[pdal] 01/16: Imported Upstream version 1.2.0

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Fri Apr 1 23:02:24 UTC 2016


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository pdal.

commit cdc1119c4f693746c350d069edd98fdee6f4c783
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Fri Apr 1 11:41:56 2016 +0200

    Imported Upstream version 1.2.0
---
 .gitignore                                         |     4 +
 .travis.yml                                        |    15 +-
 CMakeLists.txt                                     |   101 +-
 PDALConfig.cmake.in                                |     7 +-
 README.md                                          |     4 +-
 RELEASENOTES.txt                                   |   125 +
 apps/CMakeLists.txt                                |    13 +-
 apps/pdal-config                                   |     6 +-
 apps/pdal.cpp                                      |    82 +-
 apps/pdal.pc.in                                    |     2 +-
 appveyor.yml                                       |    92 +-
 cmake/boost.cmake                                  |    26 -
 cmake/config.cmake                                 |     6 +-
 cmake/ctest.cmake                                  |    24 +
 cmake/gdal.cmake                                   |     2 +-
 cmake/geos.cmake                                   |    18 +-
 cmake/macros.cmake                                 |    27 +-
 cmake/modules/FindGDAL.cmake                       |    33 +-
 cmake/modules/FindJSONCPP.cmake                    |     2 +
 cmake/python.cmake                                 |     3 +-
 cmake/spatialite.cmake                             |    10 +
 cmake/test.cmake                                   |    17 +
 cmake/unix_compiler_options.cmake                  |     4 +-
 cmake/win32_compiler_options.cmake                 |    13 +-
 doc/_static/logo/dongle/back.ai                    | 10118 -------------------
 doc/_static/logo/dongle/front.ai                   |  6536 ------------
 doc/api/cpp/algorthm.rst                           |    15 +
 doc/api/cpp/bounds.rst                             |     2 +
 doc/api/cpp/charbuf.rst                            |    12 +
 doc/api/cpp/dimension.rst                          |    15 +-
 doc/api/cpp/extractor.rst                          |    12 +
 doc/api/cpp/fileutils.rst                          |     8 +
 doc/api/cpp/index.rst                              |    13 +-
 doc/api/cpp/istream.rst                            |    11 +
 doc/api/cpp/programargs.rst                        |    12 +
 doc/api/cpp/stagefactory.rst                       |     9 +
 doc/api/cpp/utils.rst                              |    14 +
 doc/apps.rst                                       |    40 +-
 doc/community.rst                                  |     3 +
 doc/compilation/dependencies.rst                   |    28 -
 doc/compilation/index.rst                          |     6 +
 doc/compilation/python.rst                         |    35 +
 doc/compilation/unix.rst                           |     3 +-
 doc/compilation/windows.rst                        |    55 +-
 doc/conf.py                                        |    12 +-
 doc/contributors.rst                               |    86 +
 doc/development/conventions.rst                    |     2 +-
 doc/docbuild/Dockerfile                            |     3 +-
 doc/download.rst                                   |    41 +-
 doc/index.rst                                      |    11 +-
 doc/json_pipeline_specification.rst                |   343 +
 doc/metadata.rst                                   |     8 +-
 doc/nsf1.gif                                       |   Bin 0 -> 12384 bytes
 doc/pdal.style                                     |   344 +
 doc/pipeline.rst                                   |   233 +-
 doc/rsgis_logo.png                                 |   Bin 0 -> 66631 bytes
 doc/stages/filters.attribute.rst                   |   148 +-
 doc/stages/filters.chipper.rst                     |    36 +-
 doc/stages/filters.colorization.rst                |    75 +-
 doc/stages/filters.crop.rst                        |    47 +-
 doc/stages/filters.dartsample.rst                  |    12 +-
 doc/stages/filters.decimation.rst                  |    15 +-
 doc/stages/filters.divider.rst                     |    31 +-
 doc/stages/filters.ferry.rst                       |    60 +-
 doc/stages/filters.greedyprojection.rst            |    20 +-
 doc/stages/filters.gridprojection.rst              |    19 +
 doc/stages/filters.ground.rst                      |    20 +-
 doc/stages/filters.height.rst                      |    28 +-
 doc/stages/filters.hexbin.rst                      |   159 +-
 doc/stages/filters.merge.rst                       |    47 +-
 doc/stages/filters.mortonorder.rst                 |    33 +-
 doc/stages/filters.movingleastsquares.rst          |    20 +
 doc/stages/filters.poisson.rst                     |    21 +
 doc/stages/filters.predicate.rst                   |    58 +-
 doc/stages/filters.programmable.rst                |    41 +-
 doc/stages/filters.radiusoutlier.rst               |    20 +
 doc/stages/filters.randomize.rst                   |    30 +-
 doc/stages/filters.range.rst                       |    37 +-
 doc/stages/filters.reprojection.rst                |    53 +-
 doc/stages/filters.splitter.rst                    |    33 +-
 doc/stages/filters.statisticaloutlier.rst          |    45 +-
 doc/stages/filters.stats.rst                       |    40 +-
 doc/stages/filters.transformation.rst              |    39 +-
 doc/stages/filters.voxelgrid.rst                   |    20 +
 doc/stages/readers.bpf.rst                         |    23 +-
 doc/stages/readers.faux.rst                        |    33 +-
 doc/stages/readers.gdal.rst                        |    70 +-
 doc/stages/readers.geowave.rst                     |    43 +-
 doc/stages/readers.greyhound.rst                   |    30 +-
 doc/stages/readers.ilvis2.rst                      |    31 +-
 doc/stages/readers.las.rst                         |    25 +-
 doc/stages/readers.mrsid.rst                       |    25 +-
 doc/stages/readers.nitf.rst                        |    33 +-
 doc/stages/readers.oci.rst                         |    51 +-
 doc/stages/readers.optech.rst                      |    28 +-
 doc/stages/readers.pcd.rst                         |    33 +-
 doc/stages/readers.pgpointcloud.rst                |    41 +-
 doc/stages/readers.ply.rst                         |    26 +-
 doc/stages/readers.qfit.rst                        |    44 +-
 doc/stages/readers.rxp.rst                         |    76 +-
 doc/stages/readers.sqlite.rst                      |    49 +-
 doc/stages/readers.text.rst                        |    65 +
 doc/stages/readers.tindex.rst                      |    54 +-
 doc/stages/writers.bpf.rst                         |    30 +-
 doc/stages/writers.derivative.rst                  |    41 +-
 doc/stages/writers.geowave.rst                     |    47 +-
 doc/stages/writers.las.rst                         |    38 +-
 doc/stages/writers.matlab.rst                      |    33 +-
 doc/stages/writers.nitf.rst                        |    79 +-
 doc/stages/writers.null.rst                        |    28 +-
 doc/stages/writers.oci.rst                         |    95 +-
 doc/stages/writers.p2g.rst                         |    66 +-
 doc/stages/writers.pcd.rst                         |    32 +-
 doc/stages/writers.pgpointcloud.rst                |    57 +-
 doc/stages/writers.ply.rst                         |    33 +-
 doc/stages/writers.rialto.rst                      |    38 +-
 doc/stages/writers.sqlite.rst                      |    67 +-
 doc/stages/writers.text.rst                        |    33 +-
 doc/tutorial/clipping-with-shapefile.rst           |    61 +-
 doc/tutorial/dart-throwing.rst                     |    83 +-
 doc/tutorial/docker-print-one.png                  |   Bin 0 -> 43266 bytes
 doc/tutorial/docker-quickstart-env.png             |   Bin 0 -> 96142 bytes
 doc/tutorial/docker-quickstart-terminal.png        |   Bin 0 -> 126942 bytes
 doc/tutorial/docker.rst                            |   196 +
 doc/tutorial/index.rst                             |     1 +
 doc/tutorial/overview.rst                          |     4 +-
 doc/tutorial/pcl_block_tutorial.rst                |    48 +-
 doc/tutorial/reading.rst                           |    28 +-
 doc/tutorial/writing-filter.rst                    |     3 +-
 doc/tutorial/writing-kernel.rst                    |    73 +-
 doc/tutorial/writing-reader.rst                    |     6 +-
 doc/tutorial/writing-writer.rst                    |     8 +-
 doc/uoh.png                                        |   Bin 0 -> 4218 bytes
 doc/vagrant.rst                                    |   141 -
 examples/writing-kernel/MyKernel.cpp               |    26 +-
 examples/writing-kernel/MyKernel.hpp               |    13 +-
 examples/writing-reader/MyReader.cpp               |     1 +
 examples/writing-reader/pipeline-myreader.json     |    10 +
 examples/writing-reader/pipeline-myreader.xml      |    16 -
 examples/writing-writer/MyWriter.cpp               |     1 +
 examples/writing-writer/pipeline-mywriter.json     |    11 +
 examples/writing-writer/pipeline-mywriter.xml      |    19 -
 examples/writing/tutorial.cpp                      |    61 +-
 filters/CMakeLists.txt                             |     2 +
 filters/attribute/AttributeFilter.cpp              |   254 +
 filters/attribute/AttributeFilter.hpp              |   103 +
 filters/attribute/CMakeLists.txt                   |     9 +
 filters/chipper/ChipperFilter.cpp                  |     2 +
 filters/chipper/ChipperFilter.hpp                  |     2 +-
 filters/colorization/ColorizationFilter.cpp        |    67 +-
 filters/colorization/ColorizationFilter.hpp        |     4 +-
 filters/crop/CropFilter.cpp                        |   257 +-
 filters/crop/CropFilter.hpp                        |    34 +-
 filters/decimation/DecimationFilter.cpp            |    18 +-
 filters/decimation/DecimationFilter.hpp            |     5 +
 filters/divider/DividerFilter.cpp                  |     1 +
 filters/divider/DividerFilter.hpp                  |     3 +-
 filters/ferry/FerryFilter.cpp                      |    20 +-
 filters/ferry/FerryFilter.hpp                      |     2 +
 filters/merge/MergeFilter.cpp                      |     1 +
 filters/merge/MergeFilter.hpp                      |     3 +
 filters/mortonorder/MortonOrderFilter.cpp          |     2 +
 filters/mortonorder/MortonOrderFilter.hpp          |     1 +
 filters/randomize/RandomizeFilter.cpp              |     1 +
 filters/randomize/RandomizeFilter.hpp              |     1 +
 filters/range/RangeFilter.cpp                      |    17 +-
 filters/range/RangeFilter.hpp                      |     3 +-
 filters/reprojection/ReprojectionFilter.cpp        |    57 +-
 filters/reprojection/ReprojectionFilter.hpp        |     6 +-
 filters/sort/SortFilter.cpp                        |     1 +
 filters/sort/SortFilter.hpp                        |     3 +-
 filters/splitter/SplitterFilter.hpp                |     1 +
 filters/stats/StatsFilter.cpp                      |    87 +-
 filters/stats/StatsFilter.hpp                      |     4 +-
 filters/streamcallback/CMakeLists.txt              |    10 +
 filters/streamcallback/StreamCallbackFilter.cpp    |    48 +
 filters/streamcallback/StreamCallbackFilter.hpp    |    78 +
 filters/transformation/TransformationFilter.cpp    |    34 +-
 filters/transformation/TransformationFilter.hpp    |     2 +
 include/pdal/Compression.hpp                       |     5 +-
 include/pdal/Dimension.hpp                         |   148 +-
 include/pdal/Filter.hpp                            |    14 +-
 include/pdal/FlexWriter.hpp                        |    38 +-
 include/pdal/GDALUtils.hpp                         |   168 +-
 include/pdal/GEOSUtils.hpp                         |   107 +
 include/pdal/Geometry.hpp                          |   146 -
 include/pdal/GlobalEnvironment.hpp                 |    70 -
 include/pdal/Kernel.hpp                            |    77 +-
 include/pdal/KernelFactory.hpp                     |     3 -
 include/pdal/KernelSupport.hpp                     |   110 -
 include/pdal/Metadata.hpp                          |    91 +-
 include/pdal/Options.hpp                           |   134 +-
 include/pdal/PDALUtils.hpp                         |   340 +-
 include/pdal/PipelineManager.hpp                   |    10 +-
 include/pdal/PipelineReader.hpp                    |    94 -
 include/pdal/PipelineWriter.hpp                    |    33 +-
 include/pdal/PluginManager.hpp                     |    51 +-
 include/pdal/PointContainer.hpp                    |    58 +
 include/pdal/PointLayout.hpp                       |   170 +-
 include/pdal/PointRef.hpp                          |   284 +
 include/pdal/PointTable.hpp                        |   135 +-
 include/pdal/PointView.hpp                         |    81 +-
 include/pdal/PointViewIter.hpp                     |    36 +-
 include/pdal/Polygon.hpp                           |   129 +
 include/pdal/Reader.hpp                            |     3 +-
 include/pdal/SpatialReference.hpp                  |    57 +-
 include/pdal/Stage.hpp                             |   302 +-
 include/pdal/StageFactory.hpp                      |    73 +-
 include/pdal/StageWrapper.hpp                      |     6 +-
 include/pdal/UserCallback.hpp                      |   127 -
 include/pdal/Writer.hpp                            |    47 +-
 include/pdal/pdal_internal.hpp                     |     8 +-
 include/pdal/pdal_macros.hpp                       |     8 +-
 include/pdal/pdal_types.hpp                        |     2 -
 include/pdal/plang/Redirector.hpp                  |    11 +-
 include/pdal/plugin.hpp                            |    12 +-
 include/pdal/util/Algorithm.hpp                    |    38 +-
 include/pdal/util/Bounds.hpp                       |   350 +-
 include/pdal/util/Charbuf.hpp                      |    75 +-
 include/pdal/util/Endian.hpp                       |   110 -
 include/pdal/util/Extractor.hpp                    |   517 +-
 include/pdal/util/FileUtils.hpp                    |   237 +-
 include/pdal/util/Georeference.hpp                 |    10 +-
 include/pdal/util/IStream.hpp                      |   337 +-
 include/pdal/util/Inserter.hpp                     |   156 +-
 include/pdal/util/OStream.hpp                      |    81 +-
 include/pdal/util/ProgramArgs.hpp                  |  1101 ++
 include/pdal/util/Utils.hpp                        |   616 +-
 include/pdal/util/Uuid.hpp                         |   240 +
 include/pdal/util/pdal_util_export.hpp             |    51 +
 include/pdal/util/portable_endian.hpp              |    23 +-
 io/CMakeLists.txt                                  |     1 +
 io/bpf/BpfCompressor.cpp                           |     2 +-
 io/bpf/BpfHeader.cpp                               |     6 +-
 io/bpf/BpfReader.cpp                               |   173 +-
 io/bpf/BpfReader.hpp                               |    10 +-
 io/bpf/BpfWriter.cpp                               |     3 +
 io/bpf/BpfWriter.hpp                               |     1 +
 {include/pdal => io/buffer}/BufferReader.hpp       |     0
 io/buffer/CMakeLists.txt                           |    15 +
 io/derivative/DerivativeWriter.cpp                 |   391 +-
 io/derivative/DerivativeWriter.hpp                 |    43 +-
 io/faux/FauxReader.cpp                             |   134 +-
 io/faux/FauxReader.hpp                             |    13 +-
 io/gdal/GDALReader.cpp                             |    87 +-
 io/gdal/GDALReader.hpp                             |     5 +-
 io/ilvis2/CMakeLists.txt                           |     5 +
 io/ilvis2/Ilvis2MetadataReader.cpp                 |   688 ++
 io/ilvis2/Ilvis2MetadataReader.hpp                 |   107 +
 io/ilvis2/Ilvis2Reader.cpp                         |   320 +-
 io/ilvis2/Ilvis2Reader.hpp                         |    61 +-
 io/las/GeotiffSupport.cpp                          |    99 +-
 io/las/GeotiffSupport.hpp                          |    31 +-
 io/las/HeaderVal.hpp                               |    11 +-
 io/las/LasHeader.cpp                               |   204 +-
 io/las/LasHeader.hpp                               |    37 +-
 io/las/LasReader.cpp                               |   507 +-
 io/las/LasReader.hpp                               |    86 +-
 io/las/LasWriter.cpp                               |   313 +-
 io/las/LasWriter.hpp                               |     7 +-
 io/las/ZipPoint.cpp                                |     3 +-
 io/null/NullWriter.cpp                             |     1 +
 io/null/NullWriter.hpp                             |     2 +-
 io/optech/OptechReader.cpp                         |     1 +
 io/optech/OptechReader.hpp                         |     1 +
 io/ply/PlyReader.cpp                               |     1 +
 io/ply/PlyReader.hpp                               |     2 +-
 io/ply/PlyWriter.cpp                               |     1 +
 io/ply/PlyWriter.hpp                               |     2 +-
 io/qfit/QfitReader.cpp                             |     1 +
 io/qfit/QfitReader.hpp                             |     1 +
 io/sbet/SbetReader.cpp                             |    30 +-
 io/sbet/SbetReader.hpp                             |     3 +
 io/sbet/SbetWriter.cpp                             |     7 +-
 io/sbet/SbetWriter.hpp                             |     1 +
 io/terrasolid/TerrasolidReader.cpp                 |     1 +
 io/terrasolid/TerrasolidReader.hpp                 |     1 +
 io/text/CMakeLists.txt                             |     5 +-
 io/text/TextReader.cpp                             |   176 +
 io/text/TextReader.hpp                             |   104 +
 io/text/TextWriter.cpp                             |    18 +-
 io/text/TextWriter.hpp                             |     1 +
 io/tindex/TIndexReader.cpp                         |   114 +-
 io/tindex/TIndexReader.hpp                         |    20 +-
 kernels/delta/DeltaKernel.cpp                      |    45 +-
 kernels/delta/DeltaKernel.hpp                      |     3 +-
 kernels/diff/DiffKernel.cpp                        |    88 +-
 kernels/diff/DiffKernel.hpp                        |     9 +-
 kernels/info/InfoKernel.cpp                        |   190 +-
 kernels/info/InfoKernel.hpp                        |    14 +-
 kernels/merge/MergeKernel.cpp                      |    20 +-
 kernels/merge/MergeKernel.hpp                      |     4 +-
 kernels/pipeline/PipelineKernel.cpp                |    72 +-
 kernels/pipeline/PipelineKernel.hpp                |     6 +-
 kernels/random/RandomKernel.cpp                    |   131 +-
 kernels/random/RandomKernel.hpp                    |    10 +-
 kernels/sort/SortKernel.cpp                        |    54 +-
 kernels/sort/SortKernel.hpp                        |     4 +-
 kernels/split/SplitKernel.cpp                      |    58 +-
 kernels/split/SplitKernel.hpp                      |     4 +-
 kernels/tindex/TIndexKernel.cpp                    |   123 +-
 kernels/tindex/TIndexKernel.hpp                    |     5 +-
 kernels/translate/TranslateKernel.cpp              |    53 +-
 kernels/translate/TranslateKernel.hpp              |     4 +-
 pdal_defines.h.in                                  |    15 -
 plugins/CMakeLists.txt                             |     5 +-
 plugins/attribute/CMakeLists.txt                   |    26 -
 plugins/attribute/filters/AttributeFilter.cpp      |   374 -
 plugins/attribute/filters/AttributeFilter.hpp      |   101 -
 plugins/attribute/test/AttributeFilterTest.cpp     |   186 -
 plugins/cpd/CMakeLists.txt                         |    47 +-
 plugins/cpd/kernel/Cpd.cpp                         |   308 +-
 plugins/cpd/kernel/Cpd.hpp                         |    37 +-
 plugins/cpd/test/CpdKernelTest.cpp                 |    26 +-
 plugins/geowave/io/GeoWaveReader.cpp               |     9 +-
 plugins/geowave/io/GeoWaveReader.hpp               |     3 +-
 plugins/greyhound/io/GreyhoundReader.cpp           |     2 +-
 plugins/hexbin/CMakeLists.txt                      |    11 +
 plugins/hexbin/filters/HexBin.cpp                  |    93 +-
 plugins/hexbin/filters/HexBin.hpp                  |     1 +
 plugins/hexbin/kernel/DensityKernel.cpp            |   130 +
 plugins/hexbin/kernel/DensityKernel.hpp            |    69 +
 plugins/hexbin/kernel/OGR.cpp                      |   232 +
 plugins/hexbin/kernel/OGR.hpp                      |    90 +
 plugins/hexbin/test/HexbinFilterTest.cpp           |     8 +-
 plugins/icebridge/CMakeLists.txt                   |     2 +
 plugins/icebridge/io/Hdf5Handler.cpp               |     3 -
 plugins/icebridge/io/IcebridgeReader.cpp           |    41 +
 plugins/icebridge/io/IcebridgeReader.hpp           |    21 +
 plugins/icebridge/test/IcebridgeReaderTest.cpp     |    10 +-
 plugins/matlab/io/MatlabWriter.cpp                 |     2 +-
 plugins/matlab/io/MatlabWriter.hpp                 |     2 +-
 plugins/matlab/test/MatlabWriterTest.cpp           |     4 +-
 plugins/mrsid/io/MrsidReader.cpp                   |     1 +
 plugins/mrsid/io/MrsidReader.hpp                   |     2 +-
 plugins/mrsid/test/MrsidTest.cpp                   |     5 +-
 plugins/nitf/CMakeLists.txt                        |     2 +
 plugins/nitf/io/MetadataReader.cpp                 |    16 +-
 plugins/nitf/io/MetadataReader.hpp                 |     1 -
 plugins/nitf/io/NitfFile.cpp                       |     2 -
 plugins/nitf/io/NitfReader.cpp                     |     1 +
 plugins/nitf/io/NitfReader.hpp                     |    59 +-
 plugins/nitf/io/NitfWriter.cpp                     |    53 +-
 plugins/nitf/test/NitfReaderTest.cpp               |    42 +-
 plugins/nitf/test/NitfWriterTest.cpp               |    30 +-
 plugins/oci/CMakeLists.txt                         |     3 +
 plugins/oci/io/OciReader.cpp                       |    48 +-
 plugins/oci/io/OciReader.hpp                       |     2 +-
 plugins/oci/io/OciWriter.cpp                       |    48 +-
 plugins/oci/io/OciWriter.hpp                       |     2 +
 plugins/oci/test/OCITest.cpp                       |    16 +-
 plugins/p2g/io/P2gWriter.cpp                       |    57 +-
 plugins/p2g/io/P2gWriter.hpp                       |    10 +-
 plugins/pcl/CMakeLists.txt                         |     7 +
 plugins/pcl/filters/DartSampleFilter.cpp           |     6 +-
 plugins/pcl/filters/GreedyProjectionFilter.cpp     |     2 +
 plugins/pcl/filters/GridProjectionFilter.cpp       |     2 +
 plugins/pcl/filters/GroundFilter.cpp               |     1 +
 plugins/pcl/filters/HeightFilter.cpp               |     7 +-
 plugins/pcl/filters/HeightFilter.hpp               |     1 -
 plugins/pcl/filters/MovingLeastSquaresFilter.cpp   |     2 +
 plugins/pcl/filters/PCLBlock.cpp                   |     2 +
 plugins/pcl/filters/PoissonFilter.cpp              |     2 +
 plugins/pcl/filters/RadiusOutlierFilter.cpp        |    14 +-
 plugins/pcl/filters/StatisticalOutlierFilter.cpp   |    16 +-
 plugins/pcl/filters/VoxelGridFilter.cpp            |     2 +
 plugins/pcl/io/PCLVisualizer.cpp                   |     1 +
 plugins/pcl/io/PcdReader.cpp                       |     2 +
 plugins/pcl/io/PcdWriter.cpp                       |     3 -
 plugins/pcl/kernel/GroundKernel.cpp                |    55 +-
 plugins/pcl/kernel/GroundKernel.hpp                |     5 +-
 plugins/pcl/kernel/HeightAboveGroundKernel.cpp     |    37 +-
 plugins/pcl/kernel/HeightAboveGroundKernel.hpp     |     7 +-
 plugins/pcl/kernel/PCLKernel.cpp                   |    66 +-
 plugins/pcl/kernel/PCLKernel.hpp                   |     5 +-
 plugins/pcl/kernel/SmoothKernel.cpp                |    50 +-
 plugins/pcl/kernel/SmoothKernel.hpp                |     5 +-
 plugins/pcl/kernel/ViewKernel.cpp                  |    44 +-
 plugins/pcl/kernel/ViewKernel.hpp                  |     6 +-
 plugins/pcl/test/PCLBlockFilterTest.cpp            |    24 +-
 plugins/pgpointcloud/CMakeLists.txt                |     1 +
 plugins/pgpointcloud/io/PgCommon.hpp               |    11 +-
 plugins/pgpointcloud/io/PgReader.cpp               |     8 +-
 plugins/pgpointcloud/io/PgWriter.cpp               |    75 +-
 .../pgpointcloud/test/PgpointcloudWriterTest.cpp   |    24 +-
 plugins/python/CMakeLists.txt                      |     7 +-
 plugins/python/filters/PredicateFilter.cpp         |     1 +
 plugins/python/filters/ProgrammableFilter.cpp      |     1 +
 plugins/python/test/PLangTest.cpp                  |    14 +-
 plugins/python/test/PredicateFilterTest.cpp        |    78 +-
 plugins/python/test/ProgrammableFilterTest.cpp     |    29 +-
 plugins/python/test/PythonPipelineTest.cpp         |   102 +
 plugins/rxp/CMakeLists.txt                         |     1 +
 plugins/rxp/io/RxpReader.cpp                       |     1 +
 plugins/rxp/test/RxpReaderTest.cpp                 |     2 +-
 plugins/sqlite/CMakeLists.txt                      |     4 +-
 plugins/sqlite/io/SQLiteCommon.hpp                 |     9 +-
 plugins/sqlite/io/SQLiteReader.cpp                 |    32 +-
 plugins/sqlite/io/SQLiteReader.hpp                 |     2 +-
 plugins/sqlite/io/SQLiteWriter.cpp                 |    84 +-
 plugins/sqlite/test/SQLiteTest.cpp                 |     6 +-
 python/MANIFEST.in                                 |     1 +
 python/VERSION.txt                                 |     2 +-
 python/pdal/Pipeline.cpp                           |     8 +-
 python/pdal/Pipeline.hpp                           |     1 -
 python/pdal/__init__.py                            |     2 +-
 python/pdal/libpdalpython.pyx                      |     4 +-
 python/setup.py                                    |     8 +-
 python/test/__init__.py                            |     3 +
 python/test/test_libpdal.py                        |    34 +-
 scripts/appveyor/config.cmd                        |    27 +
 scripts/appveyor/install.cmd                       |    28 +-
 scripts/ci/before_install.sh                       |    84 +-
 scripts/ci/common.sh                               |     8 +-
 scripts/ci/script.sh                               |    52 +-
 scripts/docker/Dockerfile                          |    64 +
 scripts/docker/dependencies/Dockerfile             |   273 +
 scripts/docker/packaging/Dockerfile                |    23 +
 scripts/docker/rivlib/.gitignore                   |     1 +
 scripts/docker/rivlib/Dockerfile                   |    37 +
 scripts/linux-install-scripts/pdal.sh              |     1 -
 src/CMakeLists.txt                                 |    38 +-
 src/DynamicLibrary.cpp                             |     9 +-
 src/DynamicLibrary.h                               |    68 -
 src/DynamicLibrary.hpp                             |    69 +
 src/Filter.cpp                                     |    21 +-
 src/GDALUtils.cpp                                  |   511 +-
 src/GEOSUtils.cpp                                  |   163 +
 src/GlobalEnvironment.cpp                          |   106 -
 src/Kernel.cpp                                     |   574 +-
 src/KernelFactory.cpp                              |    35 +-
 src/KernelSupport.cpp                              |   152 -
 src/Metadata.cpp                                   |   107 +
 src/Options.cpp                                    |    46 +-
 src/PipelineManager.cpp                            |    52 +-
 src/PipelineReader.cpp                             |   526 -
 src/PipelineReader.hpp                             |    92 +
 src/PipelineReaderJSON.cpp                         |   424 +
 src/PipelineReaderJSON.hpp                         |    90 +
 src/PipelineReaderXML.cpp                          |   514 +
 src/PipelineReaderXML.hpp                          |   101 +
 src/PipelineWriter.cpp                             |   135 +-
 src/PluginManager.cpp                              |   350 +-
 src/PointLayout.cpp                                |    37 +-
 src/PointTable.cpp                                 |    32 +-
 src/PointView.cpp                                  |    41 +-
 src/Polygon.cpp                                    |   515 +
 src/Reader.cpp                                     |    16 -
 src/SpatialReference.cpp                           |    77 +-
 src/Stage.cpp                                      |   214 +-
 src/StageFactory.cpp                               |    91 +-
 src/Writer.cpp                                     |    38 +-
 src/XMLSchema.cpp                                  |    82 +-
 src/gitsha.cpp                                     |     2 +-
 src/pdal_config.cpp                                |    46 +-
 src/plang/Environment.cpp                          |    23 +-
 src/plang/Redirector.cpp                           |    34 +-
 src/util/CMakeLists.txt                            |    13 +-
 src/util/FileUtils.cpp                             |   214 +-
 src/util/Utils.cpp                                 |   289 +-
 test/CMakeLists.txt                                |     3 +
 test/data/autzen/autzen-interpolate.json.in        |    17 +
 test/data/autzen/autzen-selection.json             |     1 +
 test/data/autzen/autzen-surface.tif.min.tif        |   Bin 0 -> 57053532 bytes
 test/data/autzen/hag.py                            |     4 +-
 test/data/autzen/hag.py.in                         |    53 +
 test/data/bpf/bpf2nitf.xml.in                      |    10 +-
 test/data/filters/decimate.xml.in                  |     6 +-
 test/data/filters/ferry.json.in                    |    19 +
 test/data/filters/merge.json.in                    |     9 +
 test/data/filters/merge2.json.in                   |    19 +
 test/data/filters/merge3.json.in                   |    16 +
 test/data/filters/pcl/passthrough.json.in          |    10 +
 test/data/filters/pcl/passthrough.xml              |    18 -
 test/data/filters/pcl/passthrough.xml.in           |    18 +
 test/data/filters/sort.json.in                     |     9 +
 test/data/gdal/byte.tif                            |   Bin 0 -> 774 bytes
 test/data/gdal/data.xyz                            |   400 +
 test/data/gdal/float32.tif                         |   Bin 0 -> 1974 bytes
 test/data/gdal/float64.tif                         |   Bin 0 -> 3574 bytes
 test/data/gdal/int16.tif                           |   Bin 0 -> 1174 bytes
 test/data/gdal/int32.tif                           |   Bin 0 -> 1974 bytes
 test/data/ilvis2/ILVIS2_TEST_FILE.TXT              |     5 +
 test/data/ilvis2/ILVIS2_TEST_FILE.TXT.xml          |   813 ++
 test/data/las/test1_4.las                          |   Bin 0 -> 32305 bytes
 test/data/logs/logtest.txt                         |     1 -
 test/data/misc/opts2json_meta.txt                  |    27 +-
 test/data/nitf/chipper.json.in                     |    14 +
 test/data/nitf/las2nitf.xml.in                     |    47 +-
 test/data/nitf/write_laz.xml.in                    |    10 +-
 test/data/nitf/write_options.xml.in                |    39 +-
 test/data/pipeline/attribute.json.in               |    29 +
 test/data/pipeline/bpf2las.json.in                 |    14 +
 test/data/pipeline/bpf2nitf.json.in                |    21 +
 test/data/pipeline/chipper.json.in                 |    10 +
 test/data/pipeline/colorize-multi.json.in          |    19 +
 test/data/pipeline/colorize.json.in                |    11 +
 test/data/pipeline/crop-hole.json.in               |    14 +
 test/data/pipeline/crop-stats.json.in              |    19 +
 test/data/pipeline/crop.json.in                    |    10 +
 test/data/pipeline/crop_wkt.json.in                |    34 +
 test/data/pipeline/crop_wkt_2d.json.in             |    14 +
 .../pipeline/crop_wkt_2d_classification.json.in    |    20 +
 test/data/pipeline/decimate.json.in                |    19 +
 test/data/pipeline/ferry-reproject.json.in         |    19 +
 test/data/pipeline/from-module.json.in             |    11 +
 test/data/pipeline/hexbin-info.json.in             |    14 +
 test/data/pipeline/hexbin.json.in                  |    15 +
 test/data/pipeline/las2csv.json.in                 |    11 +
 test/data/pipeline/las2geojson.json.in             |    13 +
 test/data/pipeline/las2nitf-2.json.in              |    14 +
 .../pipeline/las2nitf-crop-with-options.json.in    |    24 +
 test/data/pipeline/las2nitf.json.in                |    21 +
 test/data/pipeline/las2space-delimited.json.in     |    16 +
 test/data/pipeline/merge.json.in                   |    16 +
 test/data/pipeline/metadata_reader.json.in         |     5 +
 test/data/pipeline/metadata_writer.json.in         |    10 +
 test/data/pipeline/mississippi.json.in             |     6 +
 test/data/pipeline/mississippi_reverse.json.in     |     6 +
 test/data/pipeline/nitf-chipper.json.in            |    14 +
 test/data/pipeline/nitf2las.json.in                |     6 +
 test/data/pipeline/p2g-writer.json.in              |    24 +
 test/data/pipeline/predicate-embed.json.in         |    11 +
 .../predicate-keep-ground-and-unclass.json.in      |    12 +
 .../pipeline/predicate-keep-last-return.json.in    |    15 +
 .../predicate-keep-specified-returns.json.in       |    12 +
 test/data/pipeline/programmable-hag.json.in        |    16 +
 .../pipeline/programmable-update-y-dims.json.in    |    11 +
 test/data/pipeline/qfit2las.json.in                |    17 +
 test/data/pipeline/range_classification.json.in    |    10 +
 test/data/pipeline/range_z.json.in                 |    10 +
 test/data/pipeline/range_z_classification.json.in  |    10 +
 test/data/pipeline/reproject.json.in               |    17 +
 test/data/pipeline/sbet2txt.json.in                |     6 +
 test/data/pipeline/sort.json.in                    |     9 +
 test/data/pipeline/splitter.json.in                |    10 +
 test/data/pipeline/stats.json.in                   |     9 +
 test/data/plang/from-module.json.in                |    11 +
 test/data/plang/predicate-embed.json.in            |    11 +
 test/data/plang/programmable-update-y-dims.json.in |    11 +
 test/data/png/autzen-height.png                    |   Bin 0 -> 594313 bytes
 test/data/pointbuffer/metadata.txt                 |    14 -
 test/data/sbet/autzen_trim.sbet                    |   Bin 0 -> 14960000 bytes
 test/data/sbet/pipeline.json.in                    |     6 +
 test/data/text/utm17_1.txt                         |    11 +
 test/data/text/utm17_2.txt                         |    11 +
 test/data/text/utm17_3.txt                         |    16 +
 test/unit/BoundsTest.cpp                           |    53 +-
 test/unit/CMakeLists.txt                           |    18 +-
 test/unit/FileUtilsTest.cpp                        |    55 +-
 test/unit/KernelTest.cpp                           |    67 +
 test/unit/LogTest.cpp                              |    43 +-
 test/unit/MetadataTest.cpp                         |    10 +-
 test/unit/OptionsTest.cpp                          |    90 +-
 test/unit/PDALUtilsTest.cpp                        |     3 +-
 test/unit/PluginManagerTest.cpp                    |   113 +
 test/unit/PointTableTest.cpp                       |    18 +-
 test/unit/PointViewTest.cpp                        |    19 +-
 test/unit/PolygonTest.cpp                          |   217 +
 test/unit/ProgramArgsTest.cpp                      |   314 +
 test/unit/SpatialReferenceTest.cpp                 |    82 +-
 test/unit/StageFactoryTest.cpp                     |    88 +
 test/unit/StreamingTest.cpp                        |   108 +
 test/unit/Support.cpp                              |     6 +-
 test/unit/UserCallbackTest.cpp                     |   109 -
 test/unit/UtilsTest.cpp                            |    25 +-
 test/unit/UuidTest.cpp                             |    54 +
 test/unit/XMLSchemaTest.cpp                        |     7 +-
 test/unit/apps/MergeTest.cpp                       |     6 +-
 test/unit/apps/RandomTest.cpp                      |    78 +
 test/unit/apps/pc2pcTest.cpp                       |     5 +-
 test/unit/apps/pcpipelineTest.cpp                  |    17 +-
 test/unit/apps/pcpipelineTestJSON.cpp              |   234 +
 test/unit/filters/AdditionalMergeTest.cpp          |   542 +
 test/unit/filters/AttributeFilterTest.cpp          |   186 +
 test/unit/filters/ColorizationFilterTest.cpp       |    79 +-
 test/unit/filters/CropFilterTest.cpp               |   168 +-
 test/unit/filters/DecimationFilterTest.cpp         |    48 +-
 test/unit/filters/FerryFilterTest.cpp              |    87 +-
 test/unit/filters/MergeTest.cpp                    |    75 +-
 test/unit/filters/RangeFilterTest.cpp              |    51 +-
 test/unit/filters/ReprojectionFilterTest.cpp       |    91 +-
 test/unit/filters/SortFilterTest.cpp               |    26 +-
 test/unit/filters/StatsFilterTest.cpp              |    56 +-
 test/unit/filters/TransformationFilterTest.cpp     |     4 +-
 test/unit/io/bpf/BPFTest.cpp                       |   119 +-
 test/unit/io/buffer/BufferTest.cpp                 |     2 +-
 test/unit/io/gdal/GDALReaderTest.cpp               |   187 +
 test/unit/io/ilvis2/Ilvis2MetadataReaderTest.cpp   |    97 +
 test/unit/io/ilvis2/Ilvis2ReaderTest.cpp           |    54 +-
 .../io/ilvis2/Ilvis2ReaderWithMDReaderTest.cpp     |   127 +
 test/unit/io/las/LasReaderTest.cpp                 |    91 +-
 test/unit/io/las/LasWriterTest.cpp                 |   199 +-
 test/unit/io/optech/OptechReaderTest.cpp           |     4 +-
 test/unit/io/ply/PlyReaderTest.cpp                 |     4 +-
 test/unit/io/ply/PlyWriterTest.cpp                 |     4 +-
 test/unit/io/sbet/SbetReaderTest.cpp               |    18 +-
 test/unit/io/terrasolid/TerrasolidReaderTest.cpp   |     2 +-
 test/unit/io/text/TextReaderTest.cpp               |    99 +
 tools/lasdump/CMakeLists.txt                       |     3 +
 tools/lasdump/Header.cpp                           |    30 +-
 tools/lasdump/Header.hpp                           |    10 +-
 vendor/jsoncpp-1.6.2/dist/json/json-forwards.h     |   255 +
 vendor/jsoncpp-1.6.2/dist/json/json.h              |  2013 ++++
 vendor/jsoncpp-1.6.2/dist/jsoncpp.cpp              |  5116 ++++++++++
 vendor/nanoflann-1.1.8/nanoflann.hpp               |     1 +
 vendor/pdalboost/CMakeLists.txt                    |    36 +
 vendor/pdalboost/Jamroot                           |   291 +
 vendor/pdalboost/boost.css                         |    66 +
 vendor/pdalboost/boost.png                         |   Bin 0 -> 6308 bytes
 vendor/pdalboost/boost/algorithm/cxx11/all_of.hpp  |    86 +
 .../boost/algorithm/string/classification.hpp      |   312 +
 .../pdalboost/boost/algorithm/string/compare.hpp   |   199 +
 .../pdalboost/boost/algorithm/string/concept.hpp   |    83 +
 vendor/pdalboost/boost/algorithm/string/config.hpp |    28 +
 .../pdalboost/boost/algorithm/string/constants.hpp |    36 +
 .../algorithm/string/detail/classification.hpp     |   353 +
 .../algorithm/string/detail/find_iterator.hpp      |    87 +
 .../boost/algorithm/string/detail/finder.hpp       |   639 ++
 .../boost/algorithm/string/detail/trim.hpp         |    95 +
 .../boost/algorithm/string/detail/util.hpp         |   106 +
 .../boost/algorithm/string/find_iterator.hpp       |   388 +
 vendor/pdalboost/boost/algorithm/string/finder.hpp |   270 +
 .../pdalboost/boost/algorithm/string/iter_find.hpp |   193 +
 .../boost/algorithm/string/predicate_facade.hpp    |    42 +
 vendor/pdalboost/boost/algorithm/string/split.hpp  |   163 +
 vendor/pdalboost/boost/algorithm/string/trim.hpp   |   398 +
 vendor/pdalboost/boost/align/align.hpp             |    20 +
 vendor/pdalboost/boost/align/detail/address.hpp    |    29 +
 vendor/pdalboost/boost/align/detail/align.hpp      |    40 +
 .../pdalboost/boost/align/detail/align_cxx11.hpp   |    22 +
 .../pdalboost/boost/align/detail/is_alignment.hpp  |    29 +
 vendor/pdalboost/boost/aligned_storage.hpp         |    18 +
 vendor/pdalboost/boost/any.hpp                     |   325 +
 vendor/pdalboost/boost/archive/add_facet.hpp       |    55 +
 .../pdalboost/boost/archive/archive_exception.hpp  |   100 +
 vendor/pdalboost/boost/archive/basic_archive.hpp   |   304 +
 .../boost/archive/basic_binary_iarchive.hpp        |   204 +
 .../boost/archive/basic_binary_iprimitive.hpp      |   194 +
 .../boost/archive/basic_binary_oarchive.hpp        |   185 +
 .../boost/archive/basic_binary_oprimitive.hpp      |   183 +
 .../boost/archive/basic_streambuf_locale_saver.hpp |    75 +
 .../boost/archive/basic_text_iarchive.hpp          |    96 +
 .../boost/archive/basic_text_iprimitive.hpp        |   137 +
 .../boost/archive/basic_text_oarchive.hpp          |   119 +
 .../boost/archive/basic_text_oprimitive.hpp        |   204 +
 .../pdalboost/boost/archive/basic_xml_archive.hpp  |    67 +
 .../pdalboost/boost/archive/basic_xml_iarchive.hpp |   128 +
 .../pdalboost/boost/archive/basic_xml_oarchive.hpp |   147 +
 vendor/pdalboost/boost/archive/binary_iarchive.hpp |    64 +
 .../boost/archive/binary_iarchive_impl.hpp         |   104 +
 vendor/pdalboost/boost/archive/binary_oarchive.hpp |    64 +
 .../boost/archive/binary_oarchive_impl.hpp         |   105 +
 .../pdalboost/boost/archive/binary_wiarchive.hpp   |    56 +
 .../pdalboost/boost/archive/binary_woarchive.hpp   |    59 +
 vendor/pdalboost/boost/archive/codecvt_null.hpp    |   104 +
 .../pdalboost/boost/archive/detail/abi_prefix.hpp  |    16 +
 .../pdalboost/boost/archive/detail/abi_suffix.hpp  |    15 +
 .../archive/detail/archive_serializer_map.hpp      |    54 +
 .../boost/archive/detail/auto_link_archive.hpp     |    48 +
 .../boost/archive/detail/auto_link_warchive.hpp    |    47 +
 .../boost/archive/detail/basic_iarchive.hpp        |   105 +
 .../boost/archive/detail/basic_iserializer.hpp     |    91 +
 .../boost/archive/detail/basic_oarchive.hpp        |    94 +
 .../boost/archive/detail/basic_oserializer.hpp     |    89 +
 .../archive/detail/basic_pointer_iserializer.hpp   |    70 +
 .../archive/detail/basic_pointer_oserializer.hpp   |    68 +
 .../boost/archive/detail/basic_serializer.hpp      |    79 +
 .../boost/archive/detail/basic_serializer_map.hpp  |    69 +
 vendor/pdalboost/boost/archive/detail/check.hpp    |   169 +
 .../boost/archive/detail/common_iarchive.hpp       |    88 +
 .../boost/archive/detail/common_oarchive.hpp       |    87 +
 vendor/pdalboost/boost/archive/detail/decl.hpp     |    59 +
 .../boost/archive/detail/helper_collection.hpp     |    99 +
 .../boost/archive/detail/interface_iarchive.hpp    |    85 +
 .../boost/archive/detail/interface_oarchive.hpp    |    87 +
 .../pdalboost/boost/archive/detail/iserializer.hpp |   634 ++
 .../pdalboost/boost/archive/detail/oserializer.hpp |   531 +
 .../boost/archive/detail/register_archive.hpp      |    91 +
 .../boost/archive/detail/utf8_codecvt_facet.hpp    |    23 +
 vendor/pdalboost/boost/archive/dinkumware.hpp      |   224 +
 .../boost/archive/impl/archive_serializer_map.ipp  |    71 +
 .../boost/archive/impl/basic_binary_iarchive.ipp   |   134 +
 .../boost/archive/impl/basic_binary_iprimitive.ipp |   210 +
 .../boost/archive/impl/basic_binary_oarchive.ipp   |    42 +
 .../boost/archive/impl/basic_binary_oprimitive.ipp |   162 +
 .../boost/archive/impl/basic_text_iarchive.ipp     |    76 +
 .../boost/archive/impl/basic_text_iprimitive.ipp   |   146 +
 .../boost/archive/impl/basic_text_oarchive.ipp     |    62 +
 .../boost/archive/impl/basic_text_oprimitive.ipp   |   113 +
 .../boost/archive/impl/basic_xml_grammar.hpp       |   173 +
 .../boost/archive/impl/basic_xml_iarchive.ipp      |   114 +
 .../boost/archive/impl/basic_xml_oarchive.ipp      |   272 +
 .../boost/archive/impl/text_iarchive_impl.ipp      |   128 +
 .../boost/archive/impl/text_oarchive_impl.ipp      |   124 +
 .../boost/archive/impl/text_wiarchive_impl.ipp     |   118 +
 .../boost/archive/impl/text_woarchive_impl.ipp     |    85 +
 .../boost/archive/impl/xml_iarchive_impl.ipp       |   199 +
 .../boost/archive/impl/xml_oarchive_impl.ipp       |   117 +
 .../boost/archive/impl/xml_wiarchive_impl.ipp      |   193 +
 .../boost/archive/impl/xml_woarchive_impl.ipp      |   151 +
 .../boost/archive/iterators/base64_from_binary.hpp |   109 +
 .../boost/archive/iterators/binary_from_base64.hpp |   118 +
 .../boost/archive/iterators/dataflow_exception.hpp |    80 +
 .../pdalboost/boost/archive/iterators/escape.hpp   |   114 +
 .../boost/archive/iterators/insert_linebreaks.hpp  |    99 +
 .../boost/archive/iterators/istream_iterator.hpp   |   107 +
 .../boost/archive/iterators/mb_from_wchar.hpp      |   133 +
 .../boost/archive/iterators/ostream_iterator.hpp   |    83 +
 .../boost/archive/iterators/remove_whitespace.hpp  |   167 +
 .../boost/archive/iterators/transform_width.hpp    |   176 +
 .../pdalboost/boost/archive/iterators/unescape.hpp |    89 +
 .../boost/archive/iterators/wchar_from_mb.hpp      |   122 +
 .../boost/archive/iterators/xml_escape.hpp         |   121 +
 .../boost/archive/iterators/xml_unescape.hpp       |   125 +
 .../boost/archive/polymorphic_iarchive.hpp         |   168 +
 .../boost/archive/polymorphic_oarchive.hpp         |   154 +
 vendor/pdalboost/boost/archive/text_iarchive.hpp   |   139 +
 vendor/pdalboost/boost/archive/text_oarchive.hpp   |   129 +
 vendor/pdalboost/boost/archive/text_wiarchive.hpp  |   137 +
 vendor/pdalboost/boost/archive/text_woarchive.hpp  |   155 +
 vendor/pdalboost/boost/archive/wcslen.hpp          |    56 +
 .../boost/archive/xml_archive_exception.hpp        |    57 +
 vendor/pdalboost/boost/archive/xml_iarchive.hpp    |   150 +
 vendor/pdalboost/boost/archive/xml_oarchive.hpp    |   143 +
 vendor/pdalboost/boost/archive/xml_wiarchive.hpp   |   165 +
 vendor/pdalboost/boost/archive/xml_woarchive.hpp   |   161 +
 vendor/pdalboost/boost/array.hpp                   |   446 +
 vendor/pdalboost/boost/assert.hpp                  |    85 +
 vendor/pdalboost/boost/atomic.hpp                  |    18 +
 vendor/pdalboost/boost/atomic/atomic.hpp           |    93 +
 vendor/pdalboost/boost/atomic/atomic_flag.hpp      |    33 +
 vendor/pdalboost/boost/atomic/capabilities.hpp     |   161 +
 .../pdalboost/boost/atomic/detail/atomic_flag.hpp  |    70 +
 .../boost/atomic/detail/atomic_template.hpp        |   774 ++
 .../pdalboost/boost/atomic/detail/bitwise_cast.hpp |    53 +
 vendor/pdalboost/boost/atomic/detail/config.hpp    |    75 +
 vendor/pdalboost/boost/atomic/detail/int_sizes.hpp |   140 +
 vendor/pdalboost/boost/atomic/detail/link.hpp      |    58 +
 vendor/pdalboost/boost/atomic/detail/lockpool.hpp  |    51 +
 .../pdalboost/boost/atomic/detail/operations.hpp   |    24 +
 .../boost/atomic/detail/operations_fwd.hpp         |    35 +
 .../boost/atomic/detail/operations_lockfree.hpp    |    30 +
 .../pdalboost/boost/atomic/detail/ops_emulated.hpp |   161 +
 vendor/pdalboost/boost/atomic/detail/pause.hpp     |    43 +
 vendor/pdalboost/boost/atomic/detail/platform.hpp  |   121 +
 .../pdalboost/boost/atomic/detail/storage_type.hpp |   280 +
 vendor/pdalboost/boost/atomic/fences.hpp           |    67 +
 vendor/pdalboost/boost/bind.hpp                    |    41 +
 vendor/pdalboost/boost/bind/arg.hpp                |    62 +
 vendor/pdalboost/boost/bind/bind.hpp               |  2256 +++++
 vendor/pdalboost/boost/bind/bind_cc.hpp            |   117 +
 vendor/pdalboost/boost/bind/bind_mf2_cc.hpp        |   228 +
 vendor/pdalboost/boost/bind/bind_mf_cc.hpp         |   441 +
 vendor/pdalboost/boost/bind/bind_template.hpp      |   345 +
 vendor/pdalboost/boost/bind/mem_fn.hpp             |   389 +
 vendor/pdalboost/boost/bind/mem_fn_cc.hpp          |   103 +
 vendor/pdalboost/boost/bind/mem_fn_template.hpp    |  1047 ++
 vendor/pdalboost/boost/bind/mem_fn_vw.hpp          |   130 +
 vendor/pdalboost/boost/bind/placeholders.hpp       |    62 +
 vendor/pdalboost/boost/bind/storage.hpp            |   475 +
 vendor/pdalboost/boost/call_traits.hpp             |    20 +
 vendor/pdalboost/boost/cerrno.hpp                  |   331 +
 vendor/pdalboost/boost/checked_delete.hpp          |    17 +
 vendor/pdalboost/boost/chrono/ceil.hpp             |    36 +
 vendor/pdalboost/boost/chrono/chrono.hpp           |    15 +
 vendor/pdalboost/boost/chrono/clock_string.hpp     |    25 +
 vendor/pdalboost/boost/chrono/config.hpp           |   216 +
 .../boost/chrono/detail/inlined/chrono.hpp         |    44 +
 .../boost/chrono/detail/inlined/mac/chrono.hpp     |   241 +
 .../boost/chrono/detail/inlined/posix/chrono.hpp   |   120 +
 .../boost/chrono/detail/inlined/win/chrono.hpp     |   149 +
 .../boost/chrono/detail/is_evenly_divisible_by.hpp |    31 +
 .../boost/chrono/detail/static_assert.hpp          |    30 +
 vendor/pdalboost/boost/chrono/detail/system.hpp    |    29 +
 vendor/pdalboost/boost/chrono/duration.hpp         |   800 ++
 vendor/pdalboost/boost/chrono/system_clocks.hpp    |   233 +
 vendor/pdalboost/boost/chrono/time_point.hpp       |   380 +
 vendor/pdalboost/boost/compressed_pair.hpp         |    20 +
 vendor/pdalboost/boost/concept/assert.hpp          |    45 +
 .../concept/detail/backward_compatibility.hpp      |    16 +
 vendor/pdalboost/boost/concept/detail/borland.hpp  |    30 +
 .../pdalboost/boost/concept/detail/concept_def.hpp |    34 +
 .../boost/concept/detail/concept_undef.hpp         |     5 +
 vendor/pdalboost/boost/concept/detail/general.hpp  |    77 +
 .../boost/concept/detail/has_constraints.hpp       |    50 +
 vendor/pdalboost/boost/concept/detail/msvc.hpp     |   123 +
 vendor/pdalboost/boost/concept/usage.hpp           |    36 +
 vendor/pdalboost/boost/concept_check.hpp           |  1082 ++
 vendor/pdalboost/boost/config.hpp                  |    67 +
 .../pdalboost/boost/config/abi/borland_prefix.hpp  |    27 +
 .../pdalboost/boost/config/abi/borland_suffix.hpp  |    12 +
 vendor/pdalboost/boost/config/abi/msvc_prefix.hpp  |    22 +
 vendor/pdalboost/boost/config/abi/msvc_suffix.hpp  |     8 +
 vendor/pdalboost/boost/config/abi_prefix.hpp       |    25 +
 vendor/pdalboost/boost/config/abi_suffix.hpp       |    27 +
 vendor/pdalboost/boost/config/auto_link.hpp        |   439 +
 vendor/pdalboost/boost/config/compiler/borland.hpp |   318 +
 vendor/pdalboost/boost/config/compiler/clang.hpp   |   279 +
 .../pdalboost/boost/config/compiler/codegear.hpp   |   220 +
 vendor/pdalboost/boost/config/compiler/comeau.hpp  |    59 +
 .../pdalboost/boost/config/compiler/common_edg.hpp |   143 +
 .../pdalboost/boost/config/compiler/compaq_cxx.hpp |    19 +
 vendor/pdalboost/boost/config/compiler/cray.hpp    |    92 +
 .../boost/config/compiler/digitalmars.hpp          |   124 +
 vendor/pdalboost/boost/config/compiler/gcc.hpp     |   314 +
 vendor/pdalboost/boost/config/compiler/gcc_xml.hpp |    95 +
 .../pdalboost/boost/config/compiler/greenhills.hpp |    28 +
 vendor/pdalboost/boost/config/compiler/hp_acc.hpp  |   145 +
 vendor/pdalboost/boost/config/compiler/intel.hpp   |   535 +
 vendor/pdalboost/boost/config/compiler/kai.hpp     |    33 +
 .../pdalboost/boost/config/compiler/metrowerks.hpp |   179 +
 vendor/pdalboost/boost/config/compiler/mpw.hpp     |   121 +
 vendor/pdalboost/boost/config/compiler/nvcc.hpp    |    16 +
 .../pdalboost/boost/config/compiler/pathscale.hpp  |   114 +
 vendor/pdalboost/boost/config/compiler/pgi.hpp     |   155 +
 .../boost/config/compiler/sgi_mipspro.hpp          |    29 +
 .../pdalboost/boost/config/compiler/sunpro_cc.hpp  |   190 +
 vendor/pdalboost/boost/config/compiler/vacpp.hpp   |   162 +
 vendor/pdalboost/boost/config/compiler/visualc.hpp |   298 +
 vendor/pdalboost/boost/config/compiler/xlcpp.hpp   |   258 +
 vendor/pdalboost/boost/config/no_tr1/cmath.hpp     |    28 +
 vendor/pdalboost/boost/config/no_tr1/complex.hpp   |    28 +
 .../pdalboost/boost/config/no_tr1/functional.hpp   |    28 +
 vendor/pdalboost/boost/config/no_tr1/memory.hpp    |    28 +
 vendor/pdalboost/boost/config/no_tr1/utility.hpp   |    28 +
 vendor/pdalboost/boost/config/platform/aix.hpp     |    33 +
 vendor/pdalboost/boost/config/platform/amigaos.hpp |    15 +
 vendor/pdalboost/boost/config/platform/beos.hpp    |    26 +
 vendor/pdalboost/boost/config/platform/bsd.hpp     |    86 +
 .../pdalboost/boost/config/platform/cloudabi.hpp   |    18 +
 vendor/pdalboost/boost/config/platform/cray.hpp    |    18 +
 vendor/pdalboost/boost/config/platform/cygwin.hpp  |    58 +
 vendor/pdalboost/boost/config/platform/haiku.hpp   |    31 +
 vendor/pdalboost/boost/config/platform/hpux.hpp    |    87 +
 vendor/pdalboost/boost/config/platform/irix.hpp    |    31 +
 vendor/pdalboost/boost/config/platform/linux.hpp   |   105 +
 vendor/pdalboost/boost/config/platform/macos.hpp   |    87 +
 vendor/pdalboost/boost/config/platform/qnxnto.hpp  |    31 +
 vendor/pdalboost/boost/config/platform/solaris.hpp |    31 +
 vendor/pdalboost/boost/config/platform/symbian.hpp |    97 +
 vendor/pdalboost/boost/config/platform/vms.hpp     |    25 +
 vendor/pdalboost/boost/config/platform/vxworks.hpp |   369 +
 vendor/pdalboost/boost/config/platform/win32.hpp   |    90 +
 vendor/pdalboost/boost/config/posix_features.hpp   |    95 +
 vendor/pdalboost/boost/config/requires_threads.hpp |    92 +
 .../boost/config/select_compiler_config.hpp        |   148 +
 .../boost/config/select_platform_config.hpp        |   137 +
 .../boost/config/select_stdlib_config.hpp          |   105 +
 .../pdalboost/boost/config/stdlib/dinkumware.hpp   |   198 +
 vendor/pdalboost/boost/config/stdlib/libcomo.hpp   |    83 +
 vendor/pdalboost/boost/config/stdlib/libcpp.hpp    |    80 +
 .../pdalboost/boost/config/stdlib/libstdcpp3.hpp   |   281 +
 vendor/pdalboost/boost/config/stdlib/modena.hpp    |    69 +
 vendor/pdalboost/boost/config/stdlib/msl.hpp       |    88 +
 vendor/pdalboost/boost/config/stdlib/roguewave.hpp |   198 +
 vendor/pdalboost/boost/config/stdlib/sgi.hpp       |   158 +
 vendor/pdalboost/boost/config/stdlib/stlport.hpp   |   248 +
 vendor/pdalboost/boost/config/stdlib/vacpp.hpp     |    64 +
 vendor/pdalboost/boost/config/suffix.hpp           |  1007 ++
 vendor/pdalboost/boost/config/user.hpp             |   133 +
 vendor/pdalboost/boost/config/warning_disable.hpp  |    47 +
 .../pdalboost/boost/container/allocator_traits.hpp |   470 +
 vendor/pdalboost/boost/container/container_fwd.hpp |   317 +
 .../pdalboost/boost/container/detail/addressof.hpp |    41 +
 .../boost/container/detail/advanced_insert_int.hpp |   477 +
 .../pdalboost/boost/container/detail/algorithm.hpp |    35 +
 .../boost/container/detail/alloc_helpers.hpp       |    60 +
 .../boost/container/detail/allocation_type.hpp     |    58 +
 .../boost/container/detail/config_begin.hpp        |    51 +
 .../boost/container/detail/config_end.hpp          |    13 +
 .../boost/container/detail/copy_move_algo.hpp      |  1142 +++
 .../boost/container/detail/destroyers.hpp          |   378 +
 .../container/detail/dispatch_uses_allocator.hpp   |   293 +
 .../pdalboost/boost/container/detail/iterator.hpp  |    40 +
 .../container/detail/iterator_to_raw_pointer.hpp   |    58 +
 .../pdalboost/boost/container/detail/iterators.hpp |   828 ++
 .../pdalboost/boost/container/detail/min_max.hpp   |    37 +
 vendor/pdalboost/boost/container/detail/mpl.hpp    |    87 +
 .../boost/container/detail/next_capacity.hpp       |    75 +
 vendor/pdalboost/boost/container/detail/pair.hpp   |   327 +
 .../boost/container/detail/placement_new.hpp       |    30 +
 .../pdalboost/boost/container/detail/std_fwd.hpp   |    56 +
 .../boost/container/detail/to_raw_pointer.hpp      |    33 +
 .../boost/container/detail/type_traits.hpp         |    70 +
 .../boost/container/detail/value_init.hpp          |    49 +
 .../container/detail/variadic_templates_tools.hpp  |   158 +
 .../boost/container/detail/version_type.hpp        |   110 +
 .../boost/container/detail/workaround.hpp          |    79 +
 vendor/pdalboost/boost/container/new_allocator.hpp |   179 +
 .../pdalboost/boost/container/scoped_allocator.hpp |   907 ++
 .../boost/container/scoped_allocator_fwd.hpp       |    71 +
 .../pdalboost/boost/container/throw_exception.hpp  |   170 +
 .../pdalboost/boost/container/uses_allocator.hpp   |   169 +
 .../boost/container/uses_allocator_fwd.hpp         |    73 +
 vendor/pdalboost/boost/container/vector.hpp        |  3386 +++++++
 vendor/pdalboost/boost/core/addressof.hpp          |   162 +
 vendor/pdalboost/boost/core/checked_delete.hpp     |    69 +
 vendor/pdalboost/boost/core/demangle.hpp           |   128 +
 vendor/pdalboost/boost/core/enable_if.hpp          |   128 +
 .../boost/core/explicit_operator_bool.hpp          |   154 +
 vendor/pdalboost/boost/core/ignore_unused.hpp      |    70 +
 vendor/pdalboost/boost/core/is_same.hpp            |    40 +
 vendor/pdalboost/boost/core/lightweight_test.hpp   |   171 +
 .../pdalboost/boost/core/no_exceptions_support.hpp |    44 +
 vendor/pdalboost/boost/core/noncopyable.hpp        |    48 +
 vendor/pdalboost/boost/core/ref.hpp                |   301 +
 vendor/pdalboost/boost/core/scoped_enum.hpp        |   192 +
 vendor/pdalboost/boost/core/swap.hpp               |    60 +
 vendor/pdalboost/boost/core/typeinfo.hpp           |   151 +
 vendor/pdalboost/boost/cregex.hpp                  |    39 +
 vendor/pdalboost/boost/cstdint.hpp                 |   546 +
 vendor/pdalboost/boost/cstdlib.hpp                 |    41 +
 vendor/pdalboost/boost/current_function.hpp        |    71 +
 .../pdalboost/boost/date_time/adjust_functors.hpp  |   178 +
 vendor/pdalboost/boost/date_time/c_time.hpp        |   123 +
 .../pdalboost/boost/date_time/compiler_config.hpp  |   169 +
 .../boost/date_time/constrained_value.hpp          |   121 +
 vendor/pdalboost/boost/date_time/date.hpp          |   208 +
 .../boost/date_time/date_clock_device.hpp          |    77 +
 vendor/pdalboost/boost/date_time/date_defs.hpp     |    26 +
 vendor/pdalboost/boost/date_time/date_duration.hpp |   146 +
 .../boost/date_time/date_duration_types.hpp        |   269 +
 .../boost/date_time/date_format_simple.hpp         |   159 +
 .../pdalboost/boost/date_time/date_formatting.hpp  |   135 +
 .../boost/date_time/date_formatting_limited.hpp    |   121 +
 .../boost/date_time/date_formatting_locales.hpp    |   233 +
 .../pdalboost/boost/date_time/date_generators.hpp  |   509 +
 vendor/pdalboost/boost/date_time/date_iterator.hpp |   101 +
 .../pdalboost/boost/date_time/date_names_put.hpp   |   320 +
 vendor/pdalboost/boost/date_time/date_parsing.hpp  |   316 +
 vendor/pdalboost/boost/date_time/dst_rules.hpp     |   391 +
 .../boost/date_time/filetime_functions.hpp         |   170 +
 .../boost/date_time/gregorian/conversion.hpp       |    68 +
 .../boost/date_time/gregorian/formatters.hpp       |   162 +
 .../date_time/gregorian/formatters_limited.hpp     |    81 +
 .../boost/date_time/gregorian/greg_calendar.hpp    |    48 +
 .../boost/date_time/gregorian/greg_date.hpp        |   136 +
 .../boost/date_time/gregorian/greg_day.hpp         |    57 +
 .../boost/date_time/gregorian/greg_day_of_year.hpp |    38 +
 .../boost/date_time/gregorian/greg_duration.hpp    |   134 +
 .../date_time/gregorian/greg_duration_types.hpp    |    43 +
 .../boost/date_time/gregorian/greg_facet.hpp       |   352 +
 .../boost/date_time/gregorian/greg_month.hpp       |   105 +
 .../boost/date_time/gregorian/greg_weekday.hpp     |    66 +
 .../boost/date_time/gregorian/greg_year.hpp        |    53 +
 .../boost/date_time/gregorian/greg_ymd.hpp         |    33 +
 .../boost/date_time/gregorian/gregorian_types.hpp  |   109 +
 .../boost/date_time/gregorian/parsers.hpp          |    91 +
 .../boost/date_time/gregorian_calendar.hpp         |    70 +
 .../boost/date_time/gregorian_calendar.ipp         |   219 +
 vendor/pdalboost/boost/date_time/int_adapter.hpp   |   509 +
 vendor/pdalboost/boost/date_time/iso_format.hpp    |   303 +
 vendor/pdalboost/boost/date_time/locale_config.hpp |    31 +
 .../boost/date_time/microsec_time_clock.hpp        |   127 +
 .../boost/date_time/parse_format_base.hpp          |    29 +
 vendor/pdalboost/boost/date_time/period.hpp        |   377 +
 .../boost/date_time/posix_time/conversion.hpp      |   102 +
 .../posix_time/date_duration_operators.hpp         |   114 +
 .../date_time/posix_time/posix_time_config.hpp     |   178 +
 .../date_time/posix_time/posix_time_duration.hpp   |    82 +
 .../date_time/posix_time/posix_time_system.hpp     |    68 +
 .../date_time/posix_time/posix_time_types.hpp      |    55 +
 .../pdalboost/boost/date_time/posix_time/ptime.hpp |    65 +
 .../boost/date_time/posix_time/time_period.hpp     |    29 +
 vendor/pdalboost/boost/date_time/special_defs.hpp  |    25 +
 vendor/pdalboost/boost/date_time/time.hpp          |   193 +
 vendor/pdalboost/boost/date_time/time_clock.hpp    |    83 +
 vendor/pdalboost/boost/date_time/time_defs.hpp     |    43 +
 vendor/pdalboost/boost/date_time/time_duration.hpp |   295 +
 vendor/pdalboost/boost/date_time/time_iterator.hpp |    52 +
 .../boost/date_time/time_resolution_traits.hpp     |   144 +
 .../boost/date_time/time_system_counted.hpp        |   254 +
 .../boost/date_time/time_system_split.hpp          |   207 +
 vendor/pdalboost/boost/date_time/wrapping_int.hpp  |   169 +
 .../pdalboost/boost/date_time/year_month_day.hpp   |    45 +
 .../pdalboost/boost/detail/allocator_utilities.hpp |   187 +
 .../pdalboost/boost/detail/atomic_redef_macros.hpp |    19 +
 .../pdalboost/boost/detail/atomic_undef_macros.hpp |    39 +
 vendor/pdalboost/boost/detail/basic_pointerbuf.hpp |   139 +
 vendor/pdalboost/boost/detail/bitmask.hpp          |    47 +
 vendor/pdalboost/boost/detail/call_traits.hpp      |   172 +
 vendor/pdalboost/boost/detail/compressed_pair.hpp  |   443 +
 vendor/pdalboost/boost/detail/container_fwd.hpp    |   157 +
 vendor/pdalboost/boost/detail/endian.hpp           |    11 +
 vendor/pdalboost/boost/detail/fenv.hpp             |   101 +
 vendor/pdalboost/boost/detail/indirect_traits.hpp  |   204 +
 vendor/pdalboost/boost/detail/interlocked.hpp      |   218 +
 vendor/pdalboost/boost/detail/is_incrementable.hpp |   125 +
 vendor/pdalboost/boost/detail/iterator.hpp         |    26 +
 vendor/pdalboost/boost/detail/lcast_precision.hpp  |   184 +
 vendor/pdalboost/boost/detail/lightweight_main.hpp |    36 +
 .../pdalboost/boost/detail/lightweight_mutex.hpp   |    22 +
 vendor/pdalboost/boost/detail/lightweight_test.hpp |    17 +
 .../boost/detail/lightweight_test_report.hpp       |    56 +
 .../boost/detail/no_exceptions_support.hpp         |    17 +
 .../pdalboost/boost/detail/reference_content.hpp   |   120 +
 .../boost/detail/scoped_enum_emulation.hpp         |    17 +
 vendor/pdalboost/boost/detail/sp_typeinfo.hpp      |    36 +
 .../pdalboost/boost/detail/utf8_codecvt_facet.hpp  |   214 +
 .../pdalboost/boost/detail/utf8_codecvt_facet.ipp  |   283 +
 .../pdalboost/boost/detail/winapi/GetLastError.hpp |    33 +
 .../pdalboost/boost/detail/winapi/basic_types.hpp  |   225 +
 vendor/pdalboost/boost/detail/winapi/config.hpp    |    72 +
 vendor/pdalboost/boost/detail/winapi/time.hpp      |   139 +
 vendor/pdalboost/boost/detail/winapi/timers.hpp    |    48 +
 vendor/pdalboost/boost/detail/workaround.hpp       |   267 +
 vendor/pdalboost/boost/enable_shared_from_this.hpp |    18 +
 .../boost/exception/current_exception_cast.hpp     |    43 +
 .../exception/detail/clone_current_exception.hpp   |    56 +
 .../boost/exception/detail/error_info_impl.hpp     |    74 +
 .../boost/exception/detail/exception_ptr.hpp       |   513 +
 .../exception/detail/is_output_streamable.hpp      |    60 +
 .../boost/exception/detail/object_hex_dump.hpp     |    50 +
 .../pdalboost/boost/exception/detail/type_info.hpp |    81 +
 .../boost/exception/diagnostic_information.hpp     |   201 +
 vendor/pdalboost/boost/exception/exception.hpp     |   499 +
 .../pdalboost/boost/exception/get_error_info.hpp   |   130 +
 vendor/pdalboost/boost/exception/info.hpp          |   198 +
 vendor/pdalboost/boost/exception/to_string.hpp     |    88 +
 .../pdalboost/boost/exception/to_string_stub.hpp   |   117 +
 vendor/pdalboost/boost/exception_ptr.hpp           |    11 +
 vendor/pdalboost/boost/filesystem.hpp              |    21 +
 vendor/pdalboost/boost/filesystem/config.hpp       |   110 +
 vendor/pdalboost/boost/filesystem/convenience.hpp  |    58 +
 .../boost/filesystem/detail/utf8_codecvt_facet.hpp |    24 +
 vendor/pdalboost/boost/filesystem/exception.hpp    |     9 +
 vendor/pdalboost/boost/filesystem/fstream.hpp      |   182 +
 vendor/pdalboost/boost/filesystem/operations.hpp   |  1346 +++
 vendor/pdalboost/boost/filesystem/path.hpp         |   964 ++
 vendor/pdalboost/boost/filesystem/path_traits.hpp  |   352 +
 vendor/pdalboost/boost/filesystem/string_file.hpp  |    43 +
 vendor/pdalboost/boost/foreach.hpp                 |  1127 +++
 vendor/pdalboost/boost/foreach_fwd.hpp             |    51 +
 vendor/pdalboost/boost/format.hpp                  |    59 +
 vendor/pdalboost/boost/format/alt_sstream.hpp      |   176 +
 vendor/pdalboost/boost/format/alt_sstream_impl.hpp |   313 +
 .../boost/format/detail/compat_workarounds.hpp     |    86 +
 .../boost/format/detail/config_macros.hpp          |    95 +
 .../boost/format/detail/msvc_disambiguater.hpp     |    54 +
 .../pdalboost/boost/format/detail/unset_macros.hpp |    34 +
 .../boost/format/detail/workarounds_gcc-2_95.hpp   |   162 +
 .../boost/format/detail/workarounds_stlport.hpp    |    36 +
 vendor/pdalboost/boost/format/exceptions.hpp       |   103 +
 vendor/pdalboost/boost/format/feed_args.hpp        |   319 +
 vendor/pdalboost/boost/format/format_class.hpp     |   168 +
 vendor/pdalboost/boost/format/format_fwd.hpp       |    43 +
 .../boost/format/format_implementation.hpp         |   329 +
 vendor/pdalboost/boost/format/free_funcs.hpp       |    70 +
 vendor/pdalboost/boost/format/group.hpp            |   684 ++
 vendor/pdalboost/boost/format/internals.hpp        |   202 +
 vendor/pdalboost/boost/format/internals_fwd.hpp    |    64 +
 vendor/pdalboost/boost/format/parsing.hpp          |   501 +
 vendor/pdalboost/boost/function.hpp                |    66 +
 .../boost/function/detail/function_iterate.hpp     |    16 +
 .../boost/function/detail/gen_maybe_include.pl     |    37 +
 .../boost/function/detail/maybe_include.hpp        |   267 +
 .../pdalboost/boost/function/detail/prologue.hpp   |    26 +
 vendor/pdalboost/boost/function/function0.hpp      |    12 +
 vendor/pdalboost/boost/function/function1.hpp      |    12 +
 vendor/pdalboost/boost/function/function10.hpp     |    12 +
 vendor/pdalboost/boost/function/function2.hpp      |    12 +
 vendor/pdalboost/boost/function/function3.hpp      |    12 +
 vendor/pdalboost/boost/function/function4.hpp      |    12 +
 vendor/pdalboost/boost/function/function5.hpp      |    12 +
 vendor/pdalboost/boost/function/function6.hpp      |    12 +
 vendor/pdalboost/boost/function/function7.hpp      |    12 +
 vendor/pdalboost/boost/function/function8.hpp      |    12 +
 vendor/pdalboost/boost/function/function9.hpp      |    12 +
 vendor/pdalboost/boost/function/function_base.hpp  |   892 ++
 vendor/pdalboost/boost/function/function_fwd.hpp   |    69 +
 .../pdalboost/boost/function/function_template.hpp |  1190 +++
 vendor/pdalboost/boost/function_equal.hpp          |    28 +
 vendor/pdalboost/boost/functional/hash.hpp         |     7 +
 .../functional/hash/detail/float_functions.hpp     |   336 +
 .../boost/functional/hash/detail/hash_float.hpp    |   271 +
 .../boost/functional/hash/detail/limits.hpp        |    62 +
 .../pdalboost/boost/functional/hash/extensions.hpp |   318 +
 vendor/pdalboost/boost/functional/hash/hash.hpp    |   559 +
 .../pdalboost/boost/functional/hash/hash_fwd.hpp   |    36 +
 vendor/pdalboost/boost/functional/hash_fwd.hpp     |    11 +
 vendor/pdalboost/boost/get_pointer.hpp             |    76 +
 vendor/pdalboost/boost/indirect_reference.hpp      |    43 +
 vendor/pdalboost/boost/integer.hpp                 |   262 +
 .../pdalboost/boost/integer/common_factor_rt.hpp   |   460 +
 vendor/pdalboost/boost/integer/integer_log2.hpp    |   112 +
 vendor/pdalboost/boost/integer/integer_mask.hpp    |   126 +
 vendor/pdalboost/boost/integer/static_log2.hpp     |   127 +
 vendor/pdalboost/boost/integer_fwd.hpp             |   187 +
 vendor/pdalboost/boost/integer_traits.hpp          |   256 +
 .../pdalboost/boost/intrusive/detail/algorithm.hpp |    90 +
 .../boost/intrusive/detail/config_begin.hpp        |    51 +
 .../boost/intrusive/detail/config_end.hpp          |    15 +
 .../detail/has_member_function_callable_with.hpp   |   340 +
 .../pdalboost/boost/intrusive/detail/iterator.hpp  |   155 +
 .../boost/intrusive/detail/minimal_pair_header.hpp |    30 +
 vendor/pdalboost/boost/intrusive/detail/mpl.hpp    |   206 +
 .../boost/intrusive/detail/pointer_element.hpp     |   168 +
 .../boost/intrusive/detail/reverse_iterator.hpp    |   144 +
 .../pdalboost/boost/intrusive/detail/std_fwd.hpp   |    43 +
 .../boost/intrusive/detail/to_raw_pointer.hpp      |    46 +
 .../boost/intrusive/detail/workaround.hpp          |    38 +
 .../pdalboost/boost/intrusive/pointer_rebind.hpp   |   188 +
 .../pdalboost/boost/intrusive/pointer_traits.hpp   |   318 +
 vendor/pdalboost/boost/intrusive_ptr.hpp           |    18 +
 vendor/pdalboost/boost/io/detail/quoted_manip.hpp  |   190 +
 vendor/pdalboost/boost/io/ios_state.hpp            |   439 +
 vendor/pdalboost/boost/io_fwd.hpp                  |    67 +
 vendor/pdalboost/boost/iostreams/categories.hpp    |   175 +
 vendor/pdalboost/boost/iostreams/chain.hpp         |   598 ++
 vendor/pdalboost/boost/iostreams/char_traits.hpp   |    73 +
 .../boost/iostreams/checked_operations.hpp         |   158 +
 vendor/pdalboost/boost/iostreams/close.hpp         |   259 +
 .../pdalboost/boost/iostreams/code_converter.hpp   |   425 +
 vendor/pdalboost/boost/iostreams/combine.hpp       |   260 +
 vendor/pdalboost/boost/iostreams/compose.hpp       |   494 +
 vendor/pdalboost/boost/iostreams/concepts.hpp      |   129 +
 vendor/pdalboost/boost/iostreams/constants.hpp     |    42 +
 vendor/pdalboost/boost/iostreams/copy.hpp          |   252 +
 .../boost/iostreams/detail/absolute_path.hpp       |    46 +
 .../boost/iostreams/detail/access_control.hpp      |    87 +
 .../iostreams/detail/adapter/concept_adapter.hpp   |   287 +
 .../iostreams/detail/adapter/device_adapter.hpp    |    67 +
 .../iostreams/detail/adapter/direct_adapter.hpp    |   281 +
 .../iostreams/detail/adapter/filter_adapter.hpp    |    69 +
 .../iostreams/detail/adapter/mode_adapter.hpp      |   123 +
 .../detail/adapter/non_blocking_adapter.hpp        |    59 +
 .../detail/adapter/output_iterator_adapter.hpp     |    41 +
 .../iostreams/detail/adapter/range_adapter.hpp     |   187 +
 .../pdalboost/boost/iostreams/detail/add_facet.hpp |    49 +
 .../boost/iostreams/detail/bool_trait_def.hpp      |    58 +
 .../detail/broken_overload_resolution/forward.hpp  |    31 +
 .../detail/broken_overload_resolution/stream.hpp   |   184 +
 .../broken_overload_resolution/stream_buffer.hpp   |   189 +
 vendor/pdalboost/boost/iostreams/detail/buffer.hpp |   200 +
 .../boost/iostreams/detail/call_traits.hpp         |    32 +
 .../boost/iostreams/detail/char_traits.hpp         |    63 +
 .../boost/iostreams/detail/codecvt_helper.hpp      |   237 +
 .../boost/iostreams/detail/codecvt_holder.hpp      |    63 +
 .../boost/iostreams/detail/config/auto_link.hpp    |    49 +
 .../boost/iostreams/detail/config/bzip2.hpp        |    48 +
 .../boost/iostreams/detail/config/codecvt.hpp      |    80 +
 .../iostreams/detail/config/disable_warnings.hpp   |    30 +
 .../boost/iostreams/detail/config/dyn_link.hpp     |    37 +
 .../iostreams/detail/config/enable_warnings.hpp    |    18 +
 .../boost/iostreams/detail/config/fpos.hpp         |    31 +
 .../boost/iostreams/detail/config/gcc.hpp          |    27 +
 .../boost/iostreams/detail/config/limits.hpp       |    19 +
 .../detail/config/overload_resolution.hpp          |    32 +
 .../boost/iostreams/detail/config/rtl.hpp          |    72 +
 .../iostreams/detail/config/unreachable_return.hpp |    25 +
 .../boost/iostreams/detail/config/wide_streams.hpp |    55 +
 .../iostreams/detail/config/windows_posix.hpp      |    25 +
 .../boost/iostreams/detail/config/zlib.hpp         |    50 +
 .../boost/iostreams/detail/counted_array.hpp       |    64 +
 .../boost/iostreams/detail/current_directory.hpp   |    65 +
 .../boost/iostreams/detail/default_arg.hpp         |    25 +
 .../pdalboost/boost/iostreams/detail/dispatch.hpp  |    41 +
 .../boost/iostreams/detail/double_object.hpp       |   114 +
 .../boost/iostreams/detail/enable_if_stream.hpp    |    32 +
 vendor/pdalboost/boost/iostreams/detail/error.hpp  |    45 +
 .../pdalboost/boost/iostreams/detail/execute.hpp   |   135 +
 .../boost/iostreams/detail/file_handle.hpp         |    32 +
 .../pdalboost/boost/iostreams/detail/forward.hpp   |   124 +
 .../pdalboost/boost/iostreams/detail/fstream.hpp   |    33 +
 .../boost/iostreams/detail/functional.hpp          |   189 +
 vendor/pdalboost/boost/iostreams/detail/ios.hpp    |    66 +
 .../pdalboost/boost/iostreams/detail/iostream.hpp  |    34 +
 .../boost/iostreams/detail/is_dereferenceable.hpp  |    84 +
 .../boost/iostreams/detail/is_iterator_range.hpp   |    49 +
 .../pdalboost/boost/iostreams/detail/newline.hpp   |    32 +
 .../pdalboost/boost/iostreams/detail/optional.hpp  |   114 +
 .../boost/iostreams/detail/param_type.hpp          |    27 +
 vendor/pdalboost/boost/iostreams/detail/path.hpp   |   214 +
 vendor/pdalboost/boost/iostreams/detail/push.hpp   |   154 +
 .../boost/iostreams/detail/push_params.hpp         |    21 +
 .../pdalboost/boost/iostreams/detail/resolve.hpp   |   235 +
 .../boost/iostreams/detail/restrict_impl.hpp       |   482 +
 vendor/pdalboost/boost/iostreams/detail/select.hpp |    86 +
 .../boost/iostreams/detail/select_by_size.hpp      |   161 +
 .../pdalboost/boost/iostreams/detail/streambuf.hpp |    34 +
 .../boost/iostreams/detail/streambuf/chainbuf.hpp  |   116 +
 .../detail/streambuf/direct_streambuf.hpp          |   313 +
 .../detail/streambuf/indirect_streambuf.hpp        |   432 +
 .../detail/streambuf/linked_streambuf.hpp          |   114 +
 .../boost/iostreams/detail/system_failure.hpp      |    84 +
 .../boost/iostreams/detail/template_params.hpp     |    26 +
 .../boost/iostreams/detail/translate_int_type.hpp  |    62 +
 .../pdalboost/boost/iostreams/detail/vc6/close.hpp |   129 +
 .../pdalboost/boost/iostreams/detail/vc6/read.hpp  |   238 +
 .../pdalboost/boost/iostreams/detail/vc6/write.hpp |   159 +
 .../boost/iostreams/detail/wrap_unwrap.hpp         |   127 +
 vendor/pdalboost/boost/iostreams/device/array.hpp  |   144 +
 .../boost/iostreams/device/back_inserter.hpp       |    41 +
 vendor/pdalboost/boost/iostreams/device/file.hpp   |   191 +
 .../boost/iostreams/device/file_descriptor.hpp     |   318 +
 .../boost/iostreams/device/mapped_file.hpp         |   599 ++
 vendor/pdalboost/boost/iostreams/device/null.hpp   |    66 +
 .../pdalboost/boost/iostreams/filter/aggregate.hpp |   168 +
 vendor/pdalboost/boost/iostreams/filter/bzip2.hpp  |   414 +
 .../pdalboost/boost/iostreams/filter/counter.hpp   |    82 +
 vendor/pdalboost/boost/iostreams/filter/grep.hpp   |   109 +
 vendor/pdalboost/boost/iostreams/filter/gzip.hpp   |   757 ++
 vendor/pdalboost/boost/iostreams/filter/line.hpp   |   227 +
 .../pdalboost/boost/iostreams/filter/newline.hpp   |   442 +
 vendor/pdalboost/boost/iostreams/filter/regex.hpp  |    98 +
 vendor/pdalboost/boost/iostreams/filter/stdio.hpp  |    84 +
 .../pdalboost/boost/iostreams/filter/symmetric.hpp |   310 +
 vendor/pdalboost/boost/iostreams/filter/test.hpp   |   322 +
 vendor/pdalboost/boost/iostreams/filter/zlib.hpp   |   427 +
 .../pdalboost/boost/iostreams/filtering_stream.hpp |   166 +
 .../boost/iostreams/filtering_streambuf.hpp        |    70 +
 vendor/pdalboost/boost/iostreams/flush.hpp         |   125 +
 vendor/pdalboost/boost/iostreams/get.hpp           |    17 +
 vendor/pdalboost/boost/iostreams/imbue.hpp         |    82 +
 .../pdalboost/boost/iostreams/input_sequence.hpp   |    72 +
 vendor/pdalboost/boost/iostreams/invert.hpp        |   167 +
 vendor/pdalboost/boost/iostreams/operations.hpp    |    26 +
 .../pdalboost/boost/iostreams/operations_fwd.hpp   |    41 +
 .../boost/iostreams/optimal_buffer_size.hpp        |    87 +
 .../pdalboost/boost/iostreams/output_sequence.hpp  |    72 +
 vendor/pdalboost/boost/iostreams/pipeline.hpp      |   128 +
 vendor/pdalboost/boost/iostreams/positioning.hpp   |   117 +
 vendor/pdalboost/boost/iostreams/put.hpp           |    17 +
 vendor/pdalboost/boost/iostreams/putback.hpp       |    17 +
 vendor/pdalboost/boost/iostreams/read.hpp          |   247 +
 vendor/pdalboost/boost/iostreams/restrict.hpp      |    26 +
 vendor/pdalboost/boost/iostreams/seek.hpp          |   180 +
 vendor/pdalboost/boost/iostreams/skip.hpp          |   112 +
 vendor/pdalboost/boost/iostreams/slice.hpp         |    28 +
 vendor/pdalboost/boost/iostreams/stream.hpp        |   151 +
 vendor/pdalboost/boost/iostreams/stream_buffer.hpp |   116 +
 vendor/pdalboost/boost/iostreams/tee.hpp           |   232 +
 vendor/pdalboost/boost/iostreams/traits.hpp        |   391 +
 vendor/pdalboost/boost/iostreams/traits_fwd.hpp    |   111 +
 vendor/pdalboost/boost/iostreams/write.hpp         |   171 +
 vendor/pdalboost/boost/is_placeholder.hpp          |    31 +
 vendor/pdalboost/boost/iterator.hpp                |    20 +
 .../pdalboost/boost/iterator/detail/config_def.hpp |   128 +
 .../boost/iterator/detail/config_undef.hpp         |    24 +
 .../pdalboost/boost/iterator/detail/enable_if.hpp  |    83 +
 .../iterator/detail/facade_iterator_category.hpp   |   193 +
 .../pdalboost/boost/iterator/filter_iterator.hpp   |   137 +
 .../pdalboost/boost/iterator/indirect_iterator.hpp |   145 +
 vendor/pdalboost/boost/iterator/interoperable.hpp  |    54 +
 .../pdalboost/boost/iterator/iterator_adaptor.hpp  |   360 +
 .../boost/iterator/iterator_categories.hpp         |   215 +
 .../pdalboost/boost/iterator/iterator_concepts.hpp |   275 +
 .../pdalboost/boost/iterator/iterator_facade.hpp   |   980 ++
 .../pdalboost/boost/iterator/iterator_traits.hpp   |    60 +
 .../pdalboost/boost/iterator/minimum_category.hpp  |    95 +
 .../pdalboost/boost/iterator/reverse_iterator.hpp  |    74 +
 .../boost/iterator/transform_iterator.hpp          |   171 +
 vendor/pdalboost/boost/iterator_adaptors.hpp       |    13 +
 vendor/pdalboost/boost/lexical_cast.hpp            |   105 +
 .../boost/lexical_cast/bad_lexical_cast.hpp        |   101 +
 .../lexical_cast/detail/converter_lexical.hpp      |   498 +
 .../detail/converter_lexical_streams.hpp           |   787 ++
 .../lexical_cast/detail/converter_numeric.hpp      |   194 +
 .../boost/lexical_cast/detail/inf_nan.hpp          |   197 +
 .../boost/lexical_cast/detail/is_character.hpp     |    58 +
 .../lexical_cast/detail/lcast_char_constants.hpp   |    46 +
 .../detail/lcast_unsigned_converters.hpp           |   294 +
 .../boost/lexical_cast/detail/widest_char.hpp      |    40 +
 .../boost/lexical_cast/try_lexical_convert.hpp     |   212 +
 vendor/pdalboost/boost/limits.hpp                  |   146 +
 vendor/pdalboost/boost/make_shared.hpp             |    17 +
 vendor/pdalboost/boost/math/policies/policy.hpp    |  1042 ++
 .../math/special_functions/detail/fp_traits.hpp    |   580 ++
 .../math/special_functions/detail/round_fwd.hpp    |    93 +
 .../boost/math/special_functions/fpclassify.hpp    |   626 ++
 .../boost/math/special_functions/math_fwd.hpp      |  1586 +++
 .../boost/math/special_functions/sign.hpp          |   194 +
 vendor/pdalboost/boost/math/tools/config.hpp       |   462 +
 vendor/pdalboost/boost/math/tools/promotion.hpp    |   182 +
 vendor/pdalboost/boost/math/tools/real_cast.hpp    |    31 +
 vendor/pdalboost/boost/math/tools/user.hpp         |   105 +
 vendor/pdalboost/boost/mem_fn.hpp                  |    24 +
 vendor/pdalboost/boost/memory_order.hpp            |    57 +
 vendor/pdalboost/boost/move/adl_move_swap.hpp      |   233 +
 vendor/pdalboost/boost/move/core.hpp               |   501 +
 vendor/pdalboost/boost/move/default_delete.hpp     |   201 +
 .../pdalboost/boost/move/detail/config_begin.hpp   |    19 +
 vendor/pdalboost/boost/move/detail/config_end.hpp  |    12 +
 vendor/pdalboost/boost/move/detail/fwd_macros.hpp  |   661 ++
 .../boost/move/detail/iterator_traits.hpp          |    73 +
 vendor/pdalboost/boost/move/detail/meta_utils.hpp  |   564 ++
 .../boost/move/detail/meta_utils_core.hpp          |   120 +
 .../pdalboost/boost/move/detail/move_helpers.hpp   |   252 +
 .../pdalboost/boost/move/detail/std_ns_begin.hpp   |    30 +
 vendor/pdalboost/boost/move/detail/std_ns_end.hpp  |    14 +
 vendor/pdalboost/boost/move/detail/type_traits.hpp |  1078 ++
 .../boost/move/detail/unique_ptr_meta_utils.hpp    |   591 ++
 vendor/pdalboost/boost/move/detail/workaround.hpp  |    55 +
 vendor/pdalboost/boost/move/iterator.hpp           |   312 +
 vendor/pdalboost/boost/move/make_unique.hpp        |   237 +
 vendor/pdalboost/boost/move/traits.hpp             |    77 +
 vendor/pdalboost/boost/move/unique_ptr.hpp         |   871 ++
 vendor/pdalboost/boost/move/utility.hpp            |   149 +
 vendor/pdalboost/boost/move/utility_core.hpp       |   317 +
 vendor/pdalboost/boost/mpl/O1_size.hpp             |    40 +
 vendor/pdalboost/boost/mpl/O1_size_fwd.hpp         |    24 +
 vendor/pdalboost/boost/mpl/advance.hpp             |    76 +
 vendor/pdalboost/boost/mpl/advance_fwd.hpp         |    28 +
 vendor/pdalboost/boost/mpl/always.hpp              |    38 +
 vendor/pdalboost/boost/mpl/and.hpp                 |    60 +
 vendor/pdalboost/boost/mpl/apply.hpp               |   229 +
 vendor/pdalboost/boost/mpl/apply_fwd.hpp           |   107 +
 vendor/pdalboost/boost/mpl/apply_wrap.hpp          |   234 +
 vendor/pdalboost/boost/mpl/arg.hpp                 |   131 +
 vendor/pdalboost/boost/mpl/arg_fwd.hpp             |    28 +
 vendor/pdalboost/boost/mpl/assert.hpp              |   439 +
 vendor/pdalboost/boost/mpl/at.hpp                  |    52 +
 vendor/pdalboost/boost/mpl/at_fwd.hpp              |    24 +
 vendor/pdalboost/boost/mpl/aux_/O1_size_impl.hpp   |    87 +
 vendor/pdalboost/boost/mpl/aux_/adl_barrier.hpp    |    48 +
 .../pdalboost/boost/mpl/aux_/advance_backward.hpp  |   128 +
 .../pdalboost/boost/mpl/aux_/advance_forward.hpp   |   127 +
 vendor/pdalboost/boost/mpl/aux_/arg_typedef.hpp    |    31 +
 vendor/pdalboost/boost/mpl/aux_/arithmetic_op.hpp  |    92 +
 vendor/pdalboost/boost/mpl/aux_/arity.hpp          |    39 +
 vendor/pdalboost/boost/mpl/aux_/arity_spec.hpp     |    67 +
 vendor/pdalboost/boost/mpl/aux_/at_impl.hpp        |    45 +
 vendor/pdalboost/boost/mpl/aux_/begin_end_impl.hpp |   101 +
 vendor/pdalboost/boost/mpl/aux_/clear_impl.hpp     |    35 +
 .../pdalboost/boost/mpl/aux_/common_name_wknd.hpp  |    34 +
 vendor/pdalboost/boost/mpl/aux_/comparison_op.hpp  |    83 +
 vendor/pdalboost/boost/mpl/aux_/config/adl.hpp     |    40 +
 vendor/pdalboost/boost/mpl/aux_/config/arrays.hpp  |    30 +
 vendor/pdalboost/boost/mpl/aux_/config/bcc.hpp     |    28 +
 vendor/pdalboost/boost/mpl/aux_/config/bind.hpp    |    33 +
 .../pdalboost/boost/mpl/aux_/config/compiler.hpp   |    66 +
 vendor/pdalboost/boost/mpl/aux_/config/ctps.hpp    |    30 +
 .../boost/mpl/aux_/config/dependent_nttp.hpp       |    35 +
 .../boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp   |    27 +
 vendor/pdalboost/boost/mpl/aux_/config/dtp.hpp     |    46 +
 vendor/pdalboost/boost/mpl/aux_/config/eti.hpp     |    47 +
 .../pdalboost/boost/mpl/aux_/config/forwarding.hpp |    27 +
 vendor/pdalboost/boost/mpl/aux_/config/gcc.hpp     |    23 +
 vendor/pdalboost/boost/mpl/aux_/config/gpu.hpp     |    35 +
 .../pdalboost/boost/mpl/aux_/config/has_apply.hpp  |    32 +
 vendor/pdalboost/boost/mpl/aux_/config/has_xxx.hpp |    34 +
 .../pdalboost/boost/mpl/aux_/config/integral.hpp   |    38 +
 vendor/pdalboost/boost/mpl/aux_/config/intel.hpp   |    21 +
 vendor/pdalboost/boost/mpl/aux_/config/lambda.hpp  |    32 +
 vendor/pdalboost/boost/mpl/aux_/config/msvc.hpp    |    21 +
 .../boost/mpl/aux_/config/msvc_typename.hpp        |    26 +
 vendor/pdalboost/boost/mpl/aux_/config/nttp.hpp    |    41 +
 .../pdalboost/boost/mpl/aux_/config/operators.hpp  |    34 +
 .../boost/mpl/aux_/config/overload_resolution.hpp  |    29 +
 .../pdalboost/boost/mpl/aux_/config/pp_counter.hpp |    26 +
 .../boost/mpl/aux_/config/preprocessor.hpp         |    39 +
 .../boost/mpl/aux_/config/static_constant.hpp      |    25 +
 vendor/pdalboost/boost/mpl/aux_/config/ttp.hpp     |    41 +
 vendor/pdalboost/boost/mpl/aux_/config/typeof.hpp  |    38 +
 .../boost/mpl/aux_/config/use_preprocessed.hpp     |    19 +
 .../pdalboost/boost/mpl/aux_/config/workaround.hpp |    19 +
 vendor/pdalboost/boost/mpl/aux_/contains_impl.hpp  |    61 +
 vendor/pdalboost/boost/mpl/aux_/count_args.hpp     |   105 +
 vendor/pdalboost/boost/mpl/aux_/empty_impl.hpp     |    43 +
 vendor/pdalboost/boost/mpl/aux_/find_if_pred.hpp   |    31 +
 vendor/pdalboost/boost/mpl/aux_/fold_impl.hpp      |    43 +
 vendor/pdalboost/boost/mpl/aux_/fold_impl_body.hpp |   365 +
 vendor/pdalboost/boost/mpl/aux_/full_lambda.hpp    |   354 +
 vendor/pdalboost/boost/mpl/aux_/has_apply.hpp      |    32 +
 vendor/pdalboost/boost/mpl/aux_/has_begin.hpp      |    23 +
 vendor/pdalboost/boost/mpl/aux_/has_key_impl.hpp   |    34 +
 vendor/pdalboost/boost/mpl/aux_/has_rebind.hpp     |    99 +
 vendor/pdalboost/boost/mpl/aux_/has_size.hpp       |    23 +
 vendor/pdalboost/boost/mpl/aux_/has_tag.hpp        |    23 +
 vendor/pdalboost/boost/mpl/aux_/has_type.hpp       |    23 +
 .../boost/mpl/aux_/include_preprocessed.hpp        |    42 +
 vendor/pdalboost/boost/mpl/aux_/insert_impl.hpp    |    68 +
 .../boost/mpl/aux_/inserter_algorithm.hpp          |   159 +
 .../pdalboost/boost/mpl/aux_/integral_wrapper.hpp  |    93 +
 .../pdalboost/boost/mpl/aux_/is_msvc_eti_arg.hpp   |    64 +
 vendor/pdalboost/boost/mpl/aux_/iter_apply.hpp     |    47 +
 .../pdalboost/boost/mpl/aux_/iter_fold_if_impl.hpp |   210 +
 vendor/pdalboost/boost/mpl/aux_/iter_fold_impl.hpp |    42 +
 .../boost/mpl/aux_/lambda_arity_param.hpp          |    25 +
 vendor/pdalboost/boost/mpl/aux_/lambda_no_ctps.hpp |   193 +
 vendor/pdalboost/boost/mpl/aux_/lambda_spec.hpp    |    49 +
 vendor/pdalboost/boost/mpl/aux_/lambda_support.hpp |   169 +
 vendor/pdalboost/boost/mpl/aux_/largest_int.hpp    |    63 +
 vendor/pdalboost/boost/mpl/aux_/logical_op.hpp     |   165 +
 vendor/pdalboost/boost/mpl/aux_/msvc_dtw.hpp       |    68 +
 vendor/pdalboost/boost/mpl/aux_/msvc_eti_base.hpp  |    77 +
 vendor/pdalboost/boost/mpl/aux_/msvc_is_class.hpp  |    58 +
 .../pdalboost/boost/mpl/aux_/msvc_never_true.hpp   |    34 +
 vendor/pdalboost/boost/mpl/aux_/msvc_type.hpp      |    62 +
 vendor/pdalboost/boost/mpl/aux_/na.hpp             |    95 +
 vendor/pdalboost/boost/mpl/aux_/na_assert.hpp      |    34 +
 vendor/pdalboost/boost/mpl/aux_/na_fwd.hpp         |    31 +
 vendor/pdalboost/boost/mpl/aux_/na_spec.hpp        |   175 +
 .../pdalboost/boost/mpl/aux_/nested_type_wknd.hpp  |    48 +
 vendor/pdalboost/boost/mpl/aux_/nttp_decl.hpp      |    35 +
 .../boost/mpl/aux_/numeric_cast_utils.hpp          |    77 +
 vendor/pdalboost/boost/mpl/aux_/numeric_op.hpp     |   315 +
 vendor/pdalboost/boost/mpl/aux_/overload_names.hpp |    48 +
 .../mpl/aux_/preprocessed/bcc/advance_backward.hpp |    97 +
 .../mpl/aux_/preprocessed/bcc/advance_forward.hpp  |    97 +
 .../boost/mpl/aux_/preprocessed/bcc/and.hpp        |    69 +
 .../boost/mpl/aux_/preprocessed/bcc/apply.hpp      |   169 +
 .../boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp  |    52 +
 .../boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp |   461 +
 .../boost/mpl/aux_/preprocessed/bcc/arg.hpp        |   117 +
 .../boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp |   300 +
 .../boost/mpl/aux_/preprocessed/bcc/bind.hpp       |   397 +
 .../boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp   |    46 +
 .../boost/mpl/aux_/preprocessed/bcc/bitand.hpp     |   147 +
 .../boost/mpl/aux_/preprocessed/bcc/bitor.hpp      |   147 +
 .../boost/mpl/aux_/preprocessed/bcc/bitxor.hpp     |   147 +
 .../boost/mpl/aux_/preprocessed/bcc/deque.hpp      |   323 +
 .../boost/mpl/aux_/preprocessed/bcc/divides.hpp    |   146 +
 .../boost/mpl/aux_/preprocessed/bcc/equal_to.hpp   |    94 +
 .../boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp  |   180 +
 .../mpl/aux_/preprocessed/bcc/full_lambda.hpp      |   558 +
 .../boost/mpl/aux_/preprocessed/bcc/greater.hpp    |    94 +
 .../mpl/aux_/preprocessed/bcc/greater_equal.hpp    |    94 +
 .../boost/mpl/aux_/preprocessed/bcc/inherit.hpp    |   139 +
 .../aux_/preprocessed/bcc/iter_fold_if_impl.hpp    |   133 +
 .../mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp   |   180 +
 .../mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp   |   229 +
 .../boost/mpl/aux_/preprocessed/bcc/less.hpp       |    94 +
 .../boost/mpl/aux_/preprocessed/bcc/less_equal.hpp |    94 +
 .../boost/mpl/aux_/preprocessed/bcc/list.hpp       |   323 +
 .../boost/mpl/aux_/preprocessed/bcc/list_c.hpp     |   328 +
 .../boost/mpl/aux_/preprocessed/bcc/map.hpp        |   323 +
 .../boost/mpl/aux_/preprocessed/bcc/minus.hpp      |   146 +
 .../boost/mpl/aux_/preprocessed/bcc/modulus.hpp    |   101 +
 .../mpl/aux_/preprocessed/bcc/not_equal_to.hpp     |    94 +
 .../boost/mpl/aux_/preprocessed/bcc/or.hpp         |    69 +
 .../mpl/aux_/preprocessed/bcc/placeholders.hpp     |   105 +
 .../boost/mpl/aux_/preprocessed/bcc/plus.hpp       |   146 +
 .../boost/mpl/aux_/preprocessed/bcc/quote.hpp      |   119 +
 .../aux_/preprocessed/bcc/reverse_fold_impl.hpp    |   295 +
 .../preprocessed/bcc/reverse_iter_fold_impl.hpp    |   295 +
 .../boost/mpl/aux_/preprocessed/bcc/set.hpp        |   323 +
 .../boost/mpl/aux_/preprocessed/bcc/set_c.hpp      |   328 +
 .../boost/mpl/aux_/preprocessed/bcc/shift_left.hpp |    99 +
 .../mpl/aux_/preprocessed/bcc/shift_right.hpp      |    99 +
 .../mpl/aux_/preprocessed/bcc/template_arity.hpp   |    40 +
 .../boost/mpl/aux_/preprocessed/bcc/times.hpp      |   146 +
 .../mpl/aux_/preprocessed/bcc/unpack_args.hpp      |    97 +
 .../boost/mpl/aux_/preprocessed/bcc/vector.hpp     |   323 +
 .../boost/mpl/aux_/preprocessed/bcc/vector_c.hpp   |   309 +
 .../aux_/preprocessed/bcc551/advance_backward.hpp  |    97 +
 .../aux_/preprocessed/bcc551/advance_forward.hpp   |    97 +
 .../boost/mpl/aux_/preprocessed/bcc551/and.hpp     |    69 +
 .../boost/mpl/aux_/preprocessed/bcc551/apply.hpp   |   169 +
 .../mpl/aux_/preprocessed/bcc551/apply_fwd.hpp     |    52 +
 .../mpl/aux_/preprocessed/bcc551/apply_wrap.hpp    |   456 +
 .../boost/mpl/aux_/preprocessed/bcc551/arg.hpp     |   123 +
 .../mpl/aux_/preprocessed/bcc551/basic_bind.hpp    |   306 +
 .../boost/mpl/aux_/preprocessed/bcc551/bind.hpp    |   403 +
 .../mpl/aux_/preprocessed/bcc551/bind_fwd.hpp      |    46 +
 .../boost/mpl/aux_/preprocessed/bcc551/bitand.hpp  |   147 +
 .../boost/mpl/aux_/preprocessed/bcc551/bitor.hpp   |   147 +
 .../boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp  |   147 +
 .../boost/mpl/aux_/preprocessed/bcc551/deque.hpp   |   323 +
 .../boost/mpl/aux_/preprocessed/bcc551/divides.hpp |   146 +
 .../mpl/aux_/preprocessed/bcc551/equal_to.hpp      |    94 +
 .../mpl/aux_/preprocessed/bcc551/fold_impl.hpp     |   180 +
 .../mpl/aux_/preprocessed/bcc551/full_lambda.hpp   |   558 +
 .../boost/mpl/aux_/preprocessed/bcc551/greater.hpp |    94 +
 .../mpl/aux_/preprocessed/bcc551/greater_equal.hpp |    94 +
 .../boost/mpl/aux_/preprocessed/bcc551/inherit.hpp |   141 +
 .../aux_/preprocessed/bcc551/iter_fold_if_impl.hpp |   133 +
 .../aux_/preprocessed/bcc551/iter_fold_impl.hpp    |   180 +
 .../aux_/preprocessed/bcc551/lambda_no_ctps.hpp    |   229 +
 .../boost/mpl/aux_/preprocessed/bcc551/less.hpp    |    94 +
 .../mpl/aux_/preprocessed/bcc551/less_equal.hpp    |    94 +
 .../boost/mpl/aux_/preprocessed/bcc551/list.hpp    |   323 +
 .../boost/mpl/aux_/preprocessed/bcc551/list_c.hpp  |   328 +
 .../boost/mpl/aux_/preprocessed/bcc551/map.hpp     |   323 +
 .../boost/mpl/aux_/preprocessed/bcc551/minus.hpp   |   146 +
 .../boost/mpl/aux_/preprocessed/bcc551/modulus.hpp |   101 +
 .../mpl/aux_/preprocessed/bcc551/not_equal_to.hpp  |    94 +
 .../boost/mpl/aux_/preprocessed/bcc551/or.hpp      |    69 +
 .../mpl/aux_/preprocessed/bcc551/placeholders.hpp  |   105 +
 .../boost/mpl/aux_/preprocessed/bcc551/plus.hpp    |   146 +
 .../boost/mpl/aux_/preprocessed/bcc551/quote.hpp   |    11 +
 .../aux_/preprocessed/bcc551/reverse_fold_impl.hpp |   295 +
 .../preprocessed/bcc551/reverse_iter_fold_impl.hpp |   295 +
 .../boost/mpl/aux_/preprocessed/bcc551/set.hpp     |   323 +
 .../boost/mpl/aux_/preprocessed/bcc551/set_c.hpp   |   328 +
 .../mpl/aux_/preprocessed/bcc551/shift_left.hpp    |    99 +
 .../mpl/aux_/preprocessed/bcc551/shift_right.hpp   |    99 +
 .../aux_/preprocessed/bcc551/template_arity.hpp    |    40 +
 .../boost/mpl/aux_/preprocessed/bcc551/times.hpp   |   146 +
 .../mpl/aux_/preprocessed/bcc551/unpack_args.hpp   |    97 +
 .../boost/mpl/aux_/preprocessed/bcc551/vector.hpp  |   323 +
 .../mpl/aux_/preprocessed/bcc551/vector_c.hpp      |   309 +
 .../preprocessed/bcc_pre590/advance_backward.hpp   |    97 +
 .../preprocessed/bcc_pre590/advance_forward.hpp    |    97 +
 .../boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp |    69 +
 .../mpl/aux_/preprocessed/bcc_pre590/apply.hpp     |   169 +
 .../mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp |    52 +
 .../aux_/preprocessed/bcc_pre590/apply_wrap.hpp    |   456 +
 .../boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp |   117 +
 .../aux_/preprocessed/bcc_pre590/basic_bind.hpp    |   300 +
 .../mpl/aux_/preprocessed/bcc_pre590/bind.hpp      |   397 +
 .../mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp  |    46 +
 .../mpl/aux_/preprocessed/bcc_pre590/bitand.hpp    |   147 +
 .../mpl/aux_/preprocessed/bcc_pre590/bitor.hpp     |   147 +
 .../mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp    |   147 +
 .../mpl/aux_/preprocessed/bcc_pre590/deque.hpp     |   323 +
 .../mpl/aux_/preprocessed/bcc_pre590/divides.hpp   |   146 +
 .../mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp  |    94 +
 .../mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp |   180 +
 .../aux_/preprocessed/bcc_pre590/full_lambda.hpp   |   558 +
 .../mpl/aux_/preprocessed/bcc_pre590/greater.hpp   |    94 +
 .../aux_/preprocessed/bcc_pre590/greater_equal.hpp |    94 +
 .../mpl/aux_/preprocessed/bcc_pre590/inherit.hpp   |   139 +
 .../preprocessed/bcc_pre590/iter_fold_if_impl.hpp  |   133 +
 .../preprocessed/bcc_pre590/iter_fold_impl.hpp     |   180 +
 .../preprocessed/bcc_pre590/lambda_no_ctps.hpp     |   229 +
 .../mpl/aux_/preprocessed/bcc_pre590/less.hpp      |    94 +
 .../aux_/preprocessed/bcc_pre590/less_equal.hpp    |    94 +
 .../mpl/aux_/preprocessed/bcc_pre590/list.hpp      |   323 +
 .../mpl/aux_/preprocessed/bcc_pre590/list_c.hpp    |   328 +
 .../boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp |   323 +
 .../mpl/aux_/preprocessed/bcc_pre590/minus.hpp     |   146 +
 .../mpl/aux_/preprocessed/bcc_pre590/modulus.hpp   |   101 +
 .../aux_/preprocessed/bcc_pre590/not_equal_to.hpp  |    94 +
 .../boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp  |    69 +
 .../aux_/preprocessed/bcc_pre590/placeholders.hpp  |   105 +
 .../mpl/aux_/preprocessed/bcc_pre590/plus.hpp      |   146 +
 .../mpl/aux_/preprocessed/bcc_pre590/quote.hpp     |    11 +
 .../preprocessed/bcc_pre590/reverse_fold_impl.hpp  |   295 +
 .../bcc_pre590/reverse_iter_fold_impl.hpp          |   295 +
 .../boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp |   323 +
 .../mpl/aux_/preprocessed/bcc_pre590/set_c.hpp     |   328 +
 .../aux_/preprocessed/bcc_pre590/shift_left.hpp    |    99 +
 .../aux_/preprocessed/bcc_pre590/shift_right.hpp   |    99 +
 .../preprocessed/bcc_pre590/template_arity.hpp     |    40 +
 .../mpl/aux_/preprocessed/bcc_pre590/times.hpp     |   146 +
 .../aux_/preprocessed/bcc_pre590/unpack_args.hpp   |    97 +
 .../mpl/aux_/preprocessed/bcc_pre590/vector.hpp    |   323 +
 .../mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp  |   309 +
 .../mpl/aux_/preprocessed/dmc/advance_backward.hpp |    97 +
 .../mpl/aux_/preprocessed/dmc/advance_forward.hpp  |    97 +
 .../boost/mpl/aux_/preprocessed/dmc/and.hpp        |    69 +
 .../boost/mpl/aux_/preprocessed/dmc/apply.hpp      |   169 +
 .../boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp  |    52 +
 .../boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp |    84 +
 .../boost/mpl/aux_/preprocessed/dmc/arg.hpp        |   123 +
 .../boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp |   406 +
 .../boost/mpl/aux_/preprocessed/dmc/bind.hpp       |   515 +
 .../boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp   |    53 +
 .../boost/mpl/aux_/preprocessed/dmc/bitand.hpp     |   147 +
 .../boost/mpl/aux_/preprocessed/dmc/bitor.hpp      |   147 +
 .../boost/mpl/aux_/preprocessed/dmc/bitxor.hpp     |   147 +
 .../boost/mpl/aux_/preprocessed/dmc/deque.hpp      |   323 +
 .../boost/mpl/aux_/preprocessed/dmc/divides.hpp    |   146 +
 .../boost/mpl/aux_/preprocessed/dmc/equal_to.hpp   |    94 +
 .../boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp  |   180 +
 .../mpl/aux_/preprocessed/dmc/full_lambda.hpp      |   536 +
 .../boost/mpl/aux_/preprocessed/dmc/greater.hpp    |    94 +
 .../mpl/aux_/preprocessed/dmc/greater_equal.hpp    |    94 +
 .../boost/mpl/aux_/preprocessed/dmc/inherit.hpp    |   141 +
 .../aux_/preprocessed/dmc/iter_fold_if_impl.hpp    |   133 +
 .../mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp   |   180 +
 .../mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp   |   229 +
 .../boost/mpl/aux_/preprocessed/dmc/less.hpp       |    94 +
 .../boost/mpl/aux_/preprocessed/dmc/less_equal.hpp |    94 +
 .../boost/mpl/aux_/preprocessed/dmc/list.hpp       |   323 +
 .../boost/mpl/aux_/preprocessed/dmc/list_c.hpp     |   328 +
 .../boost/mpl/aux_/preprocessed/dmc/map.hpp        |   323 +
 .../boost/mpl/aux_/preprocessed/dmc/minus.hpp      |   146 +
 .../boost/mpl/aux_/preprocessed/dmc/modulus.hpp    |   101 +
 .../mpl/aux_/preprocessed/dmc/not_equal_to.hpp     |    94 +
 .../boost/mpl/aux_/preprocessed/dmc/or.hpp         |    69 +
 .../mpl/aux_/preprocessed/dmc/placeholders.hpp     |   105 +
 .../boost/mpl/aux_/preprocessed/dmc/plus.hpp       |   146 +
 .../boost/mpl/aux_/preprocessed/dmc/quote.hpp      |   123 +
 .../aux_/preprocessed/dmc/reverse_fold_impl.hpp    |   231 +
 .../preprocessed/dmc/reverse_iter_fold_impl.hpp    |   231 +
 .../boost/mpl/aux_/preprocessed/dmc/set.hpp        |   323 +
 .../boost/mpl/aux_/preprocessed/dmc/set_c.hpp      |   328 +
 .../boost/mpl/aux_/preprocessed/dmc/shift_left.hpp |    99 +
 .../mpl/aux_/preprocessed/dmc/shift_right.hpp      |    99 +
 .../mpl/aux_/preprocessed/dmc/template_arity.hpp   |    11 +
 .../boost/mpl/aux_/preprocessed/dmc/times.hpp      |   146 +
 .../mpl/aux_/preprocessed/dmc/unpack_args.hpp      |    94 +
 .../boost/mpl/aux_/preprocessed/dmc/vector.hpp     |   323 +
 .../boost/mpl/aux_/preprocessed/dmc/vector_c.hpp   |   309 +
 .../mpl/aux_/preprocessed/gcc/advance_backward.hpp |    97 +
 .../mpl/aux_/preprocessed/gcc/advance_forward.hpp  |    97 +
 .../boost/mpl/aux_/preprocessed/gcc/and.hpp        |    69 +
 .../boost/mpl/aux_/preprocessed/gcc/apply.hpp      |   169 +
 .../boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp  |    52 +
 .../boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp |    84 +
 .../boost/mpl/aux_/preprocessed/gcc/arg.hpp        |   123 +
 .../boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp |   440 +
 .../boost/mpl/aux_/preprocessed/gcc/bind.hpp       |   561 +
 .../boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp   |    52 +
 .../boost/mpl/aux_/preprocessed/gcc/bitand.hpp     |   147 +
 .../boost/mpl/aux_/preprocessed/gcc/bitor.hpp      |   147 +
 .../boost/mpl/aux_/preprocessed/gcc/bitxor.hpp     |   147 +
 .../boost/mpl/aux_/preprocessed/gcc/deque.hpp      |   323 +
 .../boost/mpl/aux_/preprocessed/gcc/divides.hpp    |   146 +
 .../boost/mpl/aux_/preprocessed/gcc/equal_to.hpp   |    94 +
 .../boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp  |   180 +
 .../mpl/aux_/preprocessed/gcc/full_lambda.hpp      |   558 +
 .../boost/mpl/aux_/preprocessed/gcc/greater.hpp    |    94 +
 .../mpl/aux_/preprocessed/gcc/greater_equal.hpp    |    94 +
 .../boost/mpl/aux_/preprocessed/gcc/inherit.hpp    |   141 +
 .../aux_/preprocessed/gcc/iter_fold_if_impl.hpp    |   133 +
 .../mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp   |   180 +
 .../mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp   |   229 +
 .../boost/mpl/aux_/preprocessed/gcc/less.hpp       |    94 +
 .../boost/mpl/aux_/preprocessed/gcc/less_equal.hpp |    94 +
 .../boost/mpl/aux_/preprocessed/gcc/list.hpp       |   323 +
 .../boost/mpl/aux_/preprocessed/gcc/list_c.hpp     |   328 +
 .../boost/mpl/aux_/preprocessed/gcc/map.hpp        |   323 +
 .../boost/mpl/aux_/preprocessed/gcc/minus.hpp      |   146 +
 .../boost/mpl/aux_/preprocessed/gcc/modulus.hpp    |   101 +
 .../mpl/aux_/preprocessed/gcc/not_equal_to.hpp     |    94 +
 .../boost/mpl/aux_/preprocessed/gcc/or.hpp         |    69 +
 .../mpl/aux_/preprocessed/gcc/placeholders.hpp     |   105 +
 .../boost/mpl/aux_/preprocessed/gcc/plus.hpp       |   146 +
 .../boost/mpl/aux_/preprocessed/gcc/quote.hpp      |   123 +
 .../aux_/preprocessed/gcc/reverse_fold_impl.hpp    |   231 +
 .../preprocessed/gcc/reverse_iter_fold_impl.hpp    |   231 +
 .../boost/mpl/aux_/preprocessed/gcc/set.hpp        |   323 +
 .../boost/mpl/aux_/preprocessed/gcc/set_c.hpp      |   328 +
 .../boost/mpl/aux_/preprocessed/gcc/shift_left.hpp |    99 +
 .../mpl/aux_/preprocessed/gcc/shift_right.hpp      |    99 +
 .../mpl/aux_/preprocessed/gcc/template_arity.hpp   |    97 +
 .../boost/mpl/aux_/preprocessed/gcc/times.hpp      |   146 +
 .../mpl/aux_/preprocessed/gcc/unpack_args.hpp      |    94 +
 .../boost/mpl/aux_/preprocessed/gcc/vector.hpp     |   323 +
 .../boost/mpl/aux_/preprocessed/gcc/vector_c.hpp   |   309 +
 .../aux_/preprocessed/msvc60/advance_backward.hpp  |   132 +
 .../aux_/preprocessed/msvc60/advance_forward.hpp   |   132 +
 .../boost/mpl/aux_/preprocessed/msvc60/and.hpp     |    73 +
 .../boost/mpl/aux_/preprocessed/msvc60/apply.hpp   |   166 +
 .../mpl/aux_/preprocessed/msvc60/apply_fwd.hpp     |    46 +
 .../mpl/aux_/preprocessed/msvc60/apply_wrap.hpp    |   247 +
 .../boost/mpl/aux_/preprocessed/msvc60/arg.hpp     |   123 +
 .../mpl/aux_/preprocessed/msvc60/basic_bind.hpp    |   328 +
 .../boost/mpl/aux_/preprocessed/msvc60/bind.hpp    |   432 +
 .../mpl/aux_/preprocessed/msvc60/bind_fwd.hpp      |    46 +
 .../boost/mpl/aux_/preprocessed/msvc60/bitand.hpp  |   149 +
 .../boost/mpl/aux_/preprocessed/msvc60/bitor.hpp   |   149 +
 .../boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp  |   149 +
 .../boost/mpl/aux_/preprocessed/msvc60/deque.hpp   |   556 +
 .../boost/mpl/aux_/preprocessed/msvc60/divides.hpp |   148 +
 .../mpl/aux_/preprocessed/msvc60/equal_to.hpp      |   102 +
 .../mpl/aux_/preprocessed/msvc60/fold_impl.hpp     |   293 +
 .../mpl/aux_/preprocessed/msvc60/full_lambda.hpp   |   554 +
 .../boost/mpl/aux_/preprocessed/msvc60/greater.hpp |   102 +
 .../mpl/aux_/preprocessed/msvc60/greater_equal.hpp |   102 +
 .../boost/mpl/aux_/preprocessed/msvc60/inherit.hpp |   166 +
 .../aux_/preprocessed/msvc60/iter_fold_if_impl.hpp |   133 +
 .../aux_/preprocessed/msvc60/iter_fold_impl.hpp    |   293 +
 .../aux_/preprocessed/msvc60/lambda_no_ctps.hpp    |   229 +
 .../boost/mpl/aux_/preprocessed/msvc60/less.hpp    |   102 +
 .../mpl/aux_/preprocessed/msvc60/less_equal.hpp    |   102 +
 .../boost/mpl/aux_/preprocessed/msvc60/list.hpp    |   556 +
 .../boost/mpl/aux_/preprocessed/msvc60/list_c.hpp  |   534 +
 .../boost/mpl/aux_/preprocessed/msvc60/map.hpp     |   556 +
 .../boost/mpl/aux_/preprocessed/msvc60/minus.hpp   |   148 +
 .../boost/mpl/aux_/preprocessed/msvc60/modulus.hpp |   115 +
 .../mpl/aux_/preprocessed/msvc60/not_equal_to.hpp  |   102 +
 .../boost/mpl/aux_/preprocessed/msvc60/or.hpp      |    73 +
 .../mpl/aux_/preprocessed/msvc60/placeholders.hpp  |   105 +
 .../boost/mpl/aux_/preprocessed/msvc60/plus.hpp    |   148 +
 .../boost/mpl/aux_/preprocessed/msvc60/quote.hpp   |    11 +
 .../aux_/preprocessed/msvc60/reverse_fold_impl.hpp |   343 +
 .../preprocessed/msvc60/reverse_iter_fold_impl.hpp |   343 +
 .../boost/mpl/aux_/preprocessed/msvc60/set.hpp     |   556 +
 .../boost/mpl/aux_/preprocessed/msvc60/set_c.hpp   |   534 +
 .../mpl/aux_/preprocessed/msvc60/shift_left.hpp    |   114 +
 .../mpl/aux_/preprocessed/msvc60/shift_right.hpp   |   114 +
 .../aux_/preprocessed/msvc60/template_arity.hpp    |    46 +
 .../boost/mpl/aux_/preprocessed/msvc60/times.hpp   |   148 +
 .../mpl/aux_/preprocessed/msvc60/unpack_args.hpp   |   109 +
 .../boost/mpl/aux_/preprocessed/msvc60/vector.hpp  |   556 +
 .../mpl/aux_/preprocessed/msvc60/vector_c.hpp      |   534 +
 .../aux_/preprocessed/msvc70/advance_backward.hpp  |    97 +
 .../aux_/preprocessed/msvc70/advance_forward.hpp   |    97 +
 .../boost/mpl/aux_/preprocessed/msvc70/and.hpp     |    71 +
 .../boost/mpl/aux_/preprocessed/msvc70/apply.hpp   |   160 +
 .../mpl/aux_/preprocessed/msvc70/apply_fwd.hpp     |    46 +
 .../mpl/aux_/preprocessed/msvc70/apply_wrap.hpp    |   138 +
 .../boost/mpl/aux_/preprocessed/msvc70/arg.hpp     |   123 +
 .../mpl/aux_/preprocessed/msvc70/basic_bind.hpp    |   328 +
 .../boost/mpl/aux_/preprocessed/msvc70/bind.hpp    |   432 +
 .../mpl/aux_/preprocessed/msvc70/bind_fwd.hpp      |    46 +
 .../boost/mpl/aux_/preprocessed/msvc70/bitand.hpp  |   151 +
 .../boost/mpl/aux_/preprocessed/msvc70/bitor.hpp   |   151 +
 .../boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp  |   151 +
 .../boost/mpl/aux_/preprocessed/msvc70/deque.hpp   |   556 +
 .../boost/mpl/aux_/preprocessed/msvc70/divides.hpp |   150 +
 .../mpl/aux_/preprocessed/msvc70/equal_to.hpp      |   102 +
 .../mpl/aux_/preprocessed/msvc70/fold_impl.hpp     |   245 +
 .../mpl/aux_/preprocessed/msvc70/full_lambda.hpp   |   554 +
 .../boost/mpl/aux_/preprocessed/msvc70/greater.hpp |   102 +
 .../mpl/aux_/preprocessed/msvc70/greater_equal.hpp |   102 +
 .../boost/mpl/aux_/preprocessed/msvc70/inherit.hpp |   166 +
 .../aux_/preprocessed/msvc70/iter_fold_if_impl.hpp |   133 +
 .../aux_/preprocessed/msvc70/iter_fold_impl.hpp    |   245 +
 .../aux_/preprocessed/msvc70/lambda_no_ctps.hpp    |   229 +
 .../boost/mpl/aux_/preprocessed/msvc70/less.hpp    |   102 +
 .../mpl/aux_/preprocessed/msvc70/less_equal.hpp    |   102 +
 .../boost/mpl/aux_/preprocessed/msvc70/list.hpp    |   556 +
 .../boost/mpl/aux_/preprocessed/msvc70/list_c.hpp  |   534 +
 .../boost/mpl/aux_/preprocessed/msvc70/map.hpp     |   556 +
 .../boost/mpl/aux_/preprocessed/msvc70/minus.hpp   |   150 +
 .../boost/mpl/aux_/preprocessed/msvc70/modulus.hpp |   115 +
 .../mpl/aux_/preprocessed/msvc70/not_equal_to.hpp  |   102 +
 .../boost/mpl/aux_/preprocessed/msvc70/or.hpp      |    71 +
 .../mpl/aux_/preprocessed/msvc70/placeholders.hpp  |   105 +
 .../boost/mpl/aux_/preprocessed/msvc70/plus.hpp    |   150 +
 .../boost/mpl/aux_/preprocessed/msvc70/quote.hpp   |   116 +
 .../aux_/preprocessed/msvc70/reverse_fold_impl.hpp |   295 +
 .../preprocessed/msvc70/reverse_iter_fold_impl.hpp |   295 +
 .../boost/mpl/aux_/preprocessed/msvc70/set.hpp     |   556 +
 .../boost/mpl/aux_/preprocessed/msvc70/set_c.hpp   |   534 +
 .../mpl/aux_/preprocessed/msvc70/shift_left.hpp    |   114 +
 .../mpl/aux_/preprocessed/msvc70/shift_right.hpp   |   114 +
 .../aux_/preprocessed/msvc70/template_arity.hpp    |    46 +
 .../boost/mpl/aux_/preprocessed/msvc70/times.hpp   |   150 +
 .../mpl/aux_/preprocessed/msvc70/unpack_args.hpp   |   109 +
 .../boost/mpl/aux_/preprocessed/msvc70/vector.hpp  |   556 +
 .../mpl/aux_/preprocessed/msvc70/vector_c.hpp      |   534 +
 .../aux_/preprocessed/mwcw/advance_backward.hpp    |    97 +
 .../mpl/aux_/preprocessed/mwcw/advance_forward.hpp |    97 +
 .../boost/mpl/aux_/preprocessed/mwcw/and.hpp       |    69 +
 .../boost/mpl/aux_/preprocessed/mwcw/apply.hpp     |   169 +
 .../boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp |    52 +
 .../mpl/aux_/preprocessed/mwcw/apply_wrap.hpp      |   456 +
 .../boost/mpl/aux_/preprocessed/mwcw/arg.hpp       |   123 +
 .../mpl/aux_/preprocessed/mwcw/basic_bind.hpp      |   440 +
 .../boost/mpl/aux_/preprocessed/mwcw/bind.hpp      |   561 +
 .../boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp  |    52 +
 .../boost/mpl/aux_/preprocessed/mwcw/bitand.hpp    |   147 +
 .../boost/mpl/aux_/preprocessed/mwcw/bitor.hpp     |   147 +
 .../boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp    |   147 +
 .../boost/mpl/aux_/preprocessed/mwcw/deque.hpp     |   323 +
 .../boost/mpl/aux_/preprocessed/mwcw/divides.hpp   |   146 +
 .../boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp  |    94 +
 .../boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp |   180 +
 .../mpl/aux_/preprocessed/mwcw/full_lambda.hpp     |   554 +
 .../boost/mpl/aux_/preprocessed/mwcw/greater.hpp   |    94 +
 .../mpl/aux_/preprocessed/mwcw/greater_equal.hpp   |    94 +
 .../boost/mpl/aux_/preprocessed/mwcw/inherit.hpp   |   141 +
 .../aux_/preprocessed/mwcw/iter_fold_if_impl.hpp   |   133 +
 .../mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp  |   180 +
 .../mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp  |   229 +
 .../boost/mpl/aux_/preprocessed/mwcw/less.hpp      |    94 +
 .../mpl/aux_/preprocessed/mwcw/less_equal.hpp      |    94 +
 .../boost/mpl/aux_/preprocessed/mwcw/list.hpp      |   323 +
 .../boost/mpl/aux_/preprocessed/mwcw/list_c.hpp    |   328 +
 .../boost/mpl/aux_/preprocessed/mwcw/map.hpp       |   323 +
 .../boost/mpl/aux_/preprocessed/mwcw/minus.hpp     |   146 +
 .../boost/mpl/aux_/preprocessed/mwcw/modulus.hpp   |   101 +
 .../mpl/aux_/preprocessed/mwcw/not_equal_to.hpp    |    94 +
 .../boost/mpl/aux_/preprocessed/mwcw/or.hpp        |    69 +
 .../mpl/aux_/preprocessed/mwcw/placeholders.hpp    |   105 +
 .../boost/mpl/aux_/preprocessed/mwcw/plus.hpp      |   146 +
 .../boost/mpl/aux_/preprocessed/mwcw/quote.hpp     |   123 +
 .../aux_/preprocessed/mwcw/reverse_fold_impl.hpp   |   231 +
 .../preprocessed/mwcw/reverse_iter_fold_impl.hpp   |   231 +
 .../boost/mpl/aux_/preprocessed/mwcw/set.hpp       |   323 +
 .../boost/mpl/aux_/preprocessed/mwcw/set_c.hpp     |   328 +
 .../mpl/aux_/preprocessed/mwcw/shift_left.hpp      |    99 +
 .../mpl/aux_/preprocessed/mwcw/shift_right.hpp     |    99 +
 .../mpl/aux_/preprocessed/mwcw/template_arity.hpp  |    11 +
 .../boost/mpl/aux_/preprocessed/mwcw/times.hpp     |   146 +
 .../mpl/aux_/preprocessed/mwcw/unpack_args.hpp     |    94 +
 .../boost/mpl/aux_/preprocessed/mwcw/vector.hpp    |   323 +
 .../boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp  |   309 +
 .../aux_/preprocessed/no_ctps/advance_backward.hpp |    97 +
 .../aux_/preprocessed/no_ctps/advance_forward.hpp  |    97 +
 .../boost/mpl/aux_/preprocessed/no_ctps/and.hpp    |    73 +
 .../boost/mpl/aux_/preprocessed/no_ctps/apply.hpp  |   268 +
 .../mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp    |    50 +
 .../mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp   |    78 +
 .../boost/mpl/aux_/preprocessed/no_ctps/arg.hpp    |   123 +
 .../mpl/aux_/preprocessed/no_ctps/basic_bind.hpp   |   486 +
 .../boost/mpl/aux_/preprocessed/no_ctps/bind.hpp   |   590 ++
 .../mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp     |    52 +
 .../boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp |   134 +
 .../boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp  |   134 +
 .../boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp |   134 +
 .../boost/mpl/aux_/preprocessed/no_ctps/deque.hpp  |   556 +
 .../mpl/aux_/preprocessed/no_ctps/divides.hpp      |   133 +
 .../mpl/aux_/preprocessed/no_ctps/equal_to.hpp     |    94 +
 .../mpl/aux_/preprocessed/no_ctps/fold_impl.hpp    |   245 +
 .../mpl/aux_/preprocessed/no_ctps/full_lambda.hpp  |   554 +
 .../mpl/aux_/preprocessed/no_ctps/greater.hpp      |    94 +
 .../aux_/preprocessed/no_ctps/greater_equal.hpp    |    94 +
 .../mpl/aux_/preprocessed/no_ctps/inherit.hpp      |   166 +
 .../preprocessed/no_ctps/iter_fold_if_impl.hpp     |   133 +
 .../aux_/preprocessed/no_ctps/iter_fold_impl.hpp   |   245 +
 .../aux_/preprocessed/no_ctps/lambda_no_ctps.hpp   |   229 +
 .../boost/mpl/aux_/preprocessed/no_ctps/less.hpp   |    94 +
 .../mpl/aux_/preprocessed/no_ctps/less_equal.hpp   |    94 +
 .../boost/mpl/aux_/preprocessed/no_ctps/list.hpp   |   556 +
 .../boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp |   534 +
 .../boost/mpl/aux_/preprocessed/no_ctps/map.hpp    |   556 +
 .../boost/mpl/aux_/preprocessed/no_ctps/minus.hpp  |   133 +
 .../mpl/aux_/preprocessed/no_ctps/modulus.hpp      |   101 +
 .../mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp |    94 +
 .../boost/mpl/aux_/preprocessed/no_ctps/or.hpp     |    73 +
 .../mpl/aux_/preprocessed/no_ctps/placeholders.hpp |   105 +
 .../boost/mpl/aux_/preprocessed/no_ctps/plus.hpp   |   133 +
 .../boost/mpl/aux_/preprocessed/no_ctps/quote.hpp  |   116 +
 .../preprocessed/no_ctps/reverse_fold_impl.hpp     |   295 +
 .../no_ctps/reverse_iter_fold_impl.hpp             |   295 +
 .../boost/mpl/aux_/preprocessed/no_ctps/set.hpp    |   556 +
 .../boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp  |   534 +
 .../mpl/aux_/preprocessed/no_ctps/shift_left.hpp   |    99 +
 .../mpl/aux_/preprocessed/no_ctps/shift_right.hpp  |    99 +
 .../aux_/preprocessed/no_ctps/template_arity.hpp   |    40 +
 .../boost/mpl/aux_/preprocessed/no_ctps/times.hpp  |   133 +
 .../mpl/aux_/preprocessed/no_ctps/unpack_args.hpp  |   109 +
 .../boost/mpl/aux_/preprocessed/no_ctps/vector.hpp |   556 +
 .../mpl/aux_/preprocessed/no_ctps/vector_c.hpp     |   534 +
 .../aux_/preprocessed/no_ttp/advance_backward.hpp  |    97 +
 .../aux_/preprocessed/no_ttp/advance_forward.hpp   |    97 +
 .../boost/mpl/aux_/preprocessed/no_ttp/and.hpp     |    69 +
 .../boost/mpl/aux_/preprocessed/no_ttp/apply.hpp   |   169 +
 .../mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp     |    52 +
 .../mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp    |    84 +
 .../boost/mpl/aux_/preprocessed/no_ttp/arg.hpp     |   123 +
 .../mpl/aux_/preprocessed/no_ttp/basic_bind.hpp    |   369 +
 .../boost/mpl/aux_/preprocessed/no_ttp/bind.hpp    |   466 +
 .../mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp      |    52 +
 .../boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp  |   157 +
 .../boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp   |   157 +
 .../boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp  |   157 +
 .../boost/mpl/aux_/preprocessed/no_ttp/deque.hpp   |   323 +
 .../boost/mpl/aux_/preprocessed/no_ttp/divides.hpp |   156 +
 .../mpl/aux_/preprocessed/no_ttp/equal_to.hpp      |    98 +
 .../mpl/aux_/preprocessed/no_ttp/fold_impl.hpp     |   180 +
 .../mpl/aux_/preprocessed/no_ttp/full_lambda.hpp   |   554 +
 .../boost/mpl/aux_/preprocessed/no_ttp/greater.hpp |    98 +
 .../mpl/aux_/preprocessed/no_ttp/greater_equal.hpp |    98 +
 .../boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp |   141 +
 .../aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp |   133 +
 .../aux_/preprocessed/no_ttp/iter_fold_impl.hpp    |   180 +
 .../aux_/preprocessed/no_ttp/lambda_no_ctps.hpp    |   229 +
 .../boost/mpl/aux_/preprocessed/no_ttp/less.hpp    |    98 +
 .../mpl/aux_/preprocessed/no_ttp/less_equal.hpp    |    98 +
 .../boost/mpl/aux_/preprocessed/no_ttp/list.hpp    |   323 +
 .../boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp  |   328 +
 .../boost/mpl/aux_/preprocessed/no_ttp/map.hpp     |   323 +
 .../boost/mpl/aux_/preprocessed/no_ttp/minus.hpp   |   156 +
 .../boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp |   111 +
 .../mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp  |    98 +
 .../boost/mpl/aux_/preprocessed/no_ttp/or.hpp      |    69 +
 .../mpl/aux_/preprocessed/no_ttp/placeholders.hpp  |   105 +
 .../boost/mpl/aux_/preprocessed/no_ttp/plus.hpp    |   156 +
 .../boost/mpl/aux_/preprocessed/no_ttp/quote.hpp   |    11 +
 .../aux_/preprocessed/no_ttp/reverse_fold_impl.hpp |   231 +
 .../preprocessed/no_ttp/reverse_iter_fold_impl.hpp |   231 +
 .../boost/mpl/aux_/preprocessed/no_ttp/set.hpp     |   323 +
 .../boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp   |   328 +
 .../mpl/aux_/preprocessed/no_ttp/shift_left.hpp    |   110 +
 .../mpl/aux_/preprocessed/no_ttp/shift_right.hpp   |   110 +
 .../aux_/preprocessed/no_ttp/template_arity.hpp    |    40 +
 .../boost/mpl/aux_/preprocessed/no_ttp/times.hpp   |   156 +
 .../mpl/aux_/preprocessed/no_ttp/unpack_args.hpp   |    94 +
 .../boost/mpl/aux_/preprocessed/no_ttp/vector.hpp  |   323 +
 .../mpl/aux_/preprocessed/no_ttp/vector_c.hpp      |   309 +
 .../aux_/preprocessed/plain/advance_backward.hpp   |    97 +
 .../aux_/preprocessed/plain/advance_forward.hpp    |    97 +
 .../boost/mpl/aux_/preprocessed/plain/and.hpp      |    64 +
 .../boost/mpl/aux_/preprocessed/plain/apply.hpp    |   139 +
 .../mpl/aux_/preprocessed/plain/apply_fwd.hpp      |    52 +
 .../mpl/aux_/preprocessed/plain/apply_wrap.hpp     |    84 +
 .../boost/mpl/aux_/preprocessed/plain/arg.hpp      |   123 +
 .../mpl/aux_/preprocessed/plain/basic_bind.hpp     |   440 +
 .../boost/mpl/aux_/preprocessed/plain/bind.hpp     |   561 +
 .../boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp |    52 +
 .../boost/mpl/aux_/preprocessed/plain/bitand.hpp   |   142 +
 .../boost/mpl/aux_/preprocessed/plain/bitor.hpp    |   142 +
 .../boost/mpl/aux_/preprocessed/plain/bitxor.hpp   |   142 +
 .../boost/mpl/aux_/preprocessed/plain/deque.hpp    |   323 +
 .../boost/mpl/aux_/preprocessed/plain/divides.hpp  |   141 +
 .../boost/mpl/aux_/preprocessed/plain/equal_to.hpp |    92 +
 .../mpl/aux_/preprocessed/plain/fold_impl.hpp      |   180 +
 .../mpl/aux_/preprocessed/plain/full_lambda.hpp    |   554 +
 .../boost/mpl/aux_/preprocessed/plain/greater.hpp  |    92 +
 .../mpl/aux_/preprocessed/plain/greater_equal.hpp  |    92 +
 .../boost/mpl/aux_/preprocessed/plain/inherit.hpp  |   125 +
 .../aux_/preprocessed/plain/iter_fold_if_impl.hpp  |   133 +
 .../mpl/aux_/preprocessed/plain/iter_fold_impl.hpp |   180 +
 .../mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp |   228 +
 .../boost/mpl/aux_/preprocessed/plain/less.hpp     |    92 +
 .../mpl/aux_/preprocessed/plain/less_equal.hpp     |    92 +
 .../boost/mpl/aux_/preprocessed/plain/list.hpp     |   323 +
 .../boost/mpl/aux_/preprocessed/plain/list_c.hpp   |   328 +
 .../boost/mpl/aux_/preprocessed/plain/map.hpp      |   323 +
 .../boost/mpl/aux_/preprocessed/plain/minus.hpp    |   141 +
 .../boost/mpl/aux_/preprocessed/plain/modulus.hpp  |    99 +
 .../mpl/aux_/preprocessed/plain/not_equal_to.hpp   |    92 +
 .../boost/mpl/aux_/preprocessed/plain/or.hpp       |    64 +
 .../mpl/aux_/preprocessed/plain/placeholders.hpp   |   105 +
 .../boost/mpl/aux_/preprocessed/plain/plus.hpp     |   141 +
 .../boost/mpl/aux_/preprocessed/plain/quote.hpp    |   123 +
 .../aux_/preprocessed/plain/reverse_fold_impl.hpp  |   231 +
 .../preprocessed/plain/reverse_iter_fold_impl.hpp  |   231 +
 .../boost/mpl/aux_/preprocessed/plain/set.hpp      |   323 +
 .../boost/mpl/aux_/preprocessed/plain/set_c.hpp    |   328 +
 .../mpl/aux_/preprocessed/plain/shift_left.hpp     |    97 +
 .../mpl/aux_/preprocessed/plain/shift_right.hpp    |    97 +
 .../mpl/aux_/preprocessed/plain/template_arity.hpp |    11 +
 .../boost/mpl/aux_/preprocessed/plain/times.hpp    |   141 +
 .../mpl/aux_/preprocessed/plain/unpack_args.hpp    |    94 +
 .../boost/mpl/aux_/preprocessed/plain/vector.hpp   |   323 +
 .../boost/mpl/aux_/preprocessed/plain/vector_c.hpp |   309 +
 .../pdalboost/boost/mpl/aux_/preprocessor/add.hpp  |    65 +
 .../mpl/aux_/preprocessor/def_params_tail.hpp      |   105 +
 .../boost/mpl/aux_/preprocessor/default_params.hpp |    67 +
 .../pdalboost/boost/mpl/aux_/preprocessor/enum.hpp |    62 +
 .../boost/mpl/aux_/preprocessor/ext_params.hpp     |    78 +
 .../boost/mpl/aux_/preprocessor/filter_params.hpp  |    28 +
 .../boost/mpl/aux_/preprocessor/params.hpp         |    65 +
 .../mpl/aux_/preprocessor/partial_spec_params.hpp  |    32 +
 .../boost/mpl/aux_/preprocessor/range.hpp          |    30 +
 .../boost/mpl/aux_/preprocessor/repeat.hpp         |    51 +
 .../pdalboost/boost/mpl/aux_/preprocessor/sub.hpp  |    65 +
 .../boost/mpl/aux_/preprocessor/tuple.hpp          |    29 +
 vendor/pdalboost/boost/mpl/aux_/ptr_to_ref.hpp     |    46 +
 vendor/pdalboost/boost/mpl/aux_/push_back_impl.hpp |    70 +
 .../pdalboost/boost/mpl/aux_/push_front_impl.hpp   |    71 +
 .../pdalboost/boost/mpl/aux_/reverse_fold_impl.hpp |    44 +
 .../boost/mpl/aux_/reverse_fold_impl_body.hpp      |   412 +
 .../boost/mpl/aux_/reverse_iter_fold_impl.hpp      |    43 +
 .../pdalboost/boost/mpl/aux_/sequence_wrapper.hpp  |   292 +
 vendor/pdalboost/boost/mpl/aux_/size_impl.hpp      |    52 +
 vendor/pdalboost/boost/mpl/aux_/static_cast.hpp    |    27 +
 vendor/pdalboost/boost/mpl/aux_/template_arity.hpp |   189 +
 .../boost/mpl/aux_/template_arity_fwd.hpp          |    23 +
 .../boost/mpl/aux_/traits_lambda_spec.hpp          |    63 +
 vendor/pdalboost/boost/mpl/aux_/type_wrapper.hpp   |    47 +
 vendor/pdalboost/boost/mpl/aux_/unwrap.hpp         |    51 +
 vendor/pdalboost/boost/mpl/aux_/value_wknd.hpp     |    89 +
 vendor/pdalboost/boost/mpl/aux_/yes_no.hpp         |    58 +
 vendor/pdalboost/boost/mpl/back_fwd.hpp            |    24 +
 vendor/pdalboost/boost/mpl/back_inserter.hpp       |    34 +
 vendor/pdalboost/boost/mpl/base.hpp                |    35 +
 vendor/pdalboost/boost/mpl/begin_end.hpp           |    57 +
 vendor/pdalboost/boost/mpl/begin_end_fwd.hpp       |    27 +
 vendor/pdalboost/boost/mpl/bind.hpp                |   551 +
 vendor/pdalboost/boost/mpl/bind_fwd.hpp            |    99 +
 vendor/pdalboost/boost/mpl/bool.hpp                |    39 +
 vendor/pdalboost/boost/mpl/bool_fwd.hpp            |    33 +
 vendor/pdalboost/boost/mpl/clear.hpp               |    39 +
 vendor/pdalboost/boost/mpl/clear_fwd.hpp           |    24 +
 vendor/pdalboost/boost/mpl/comparison.hpp          |    24 +
 vendor/pdalboost/boost/mpl/contains.hpp            |    41 +
 vendor/pdalboost/boost/mpl/contains_fwd.hpp        |    25 +
 vendor/pdalboost/boost/mpl/deref.hpp               |    41 +
 vendor/pdalboost/boost/mpl/distance.hpp            |    78 +
 vendor/pdalboost/boost/mpl/distance_fwd.hpp        |    28 +
 vendor/pdalboost/boost/mpl/empty.hpp               |    39 +
 vendor/pdalboost/boost/mpl/empty_fwd.hpp           |    24 +
 vendor/pdalboost/boost/mpl/equal_to.hpp            |    21 +
 vendor/pdalboost/boost/mpl/erase_fwd.hpp           |    24 +
 vendor/pdalboost/boost/mpl/erase_key_fwd.hpp       |    24 +
 vendor/pdalboost/boost/mpl/eval_if.hpp             |    71 +
 vendor/pdalboost/boost/mpl/find.hpp                |    38 +
 vendor/pdalboost/boost/mpl/find_if.hpp             |    50 +
 vendor/pdalboost/boost/mpl/fold.hpp                |    48 +
 vendor/pdalboost/boost/mpl/for_each.hpp            |   123 +
 vendor/pdalboost/boost/mpl/front_fwd.hpp           |    24 +
 vendor/pdalboost/boost/mpl/front_inserter.hpp      |    33 +
 vendor/pdalboost/boost/mpl/greater.hpp             |    21 +
 vendor/pdalboost/boost/mpl/greater_equal.hpp       |    21 +
 vendor/pdalboost/boost/mpl/has_key.hpp             |    41 +
 vendor/pdalboost/boost/mpl/has_key_fwd.hpp         |    25 +
 vendor/pdalboost/boost/mpl/has_xxx.hpp             |   647 ++
 vendor/pdalboost/boost/mpl/identity.hpp            |    45 +
 vendor/pdalboost/boost/mpl/if.hpp                  |   135 +
 vendor/pdalboost/boost/mpl/insert.hpp              |    41 +
 vendor/pdalboost/boost/mpl/insert_fwd.hpp          |    24 +
 vendor/pdalboost/boost/mpl/insert_range_fwd.hpp    |    24 +
 vendor/pdalboost/boost/mpl/inserter.hpp            |    32 +
 vendor/pdalboost/boost/mpl/int.hpp                 |    22 +
 vendor/pdalboost/boost/mpl/int_fwd.hpp             |    27 +
 vendor/pdalboost/boost/mpl/integral_c.hpp          |    51 +
 vendor/pdalboost/boost/mpl/integral_c_fwd.hpp      |    32 +
 vendor/pdalboost/boost/mpl/integral_c_tag.hpp      |    26 +
 vendor/pdalboost/boost/mpl/is_placeholder.hpp      |    67 +
 vendor/pdalboost/boost/mpl/is_sequence.hpp         |   112 +
 vendor/pdalboost/boost/mpl/iter_fold.hpp           |    49 +
 vendor/pdalboost/boost/mpl/iter_fold_if.hpp        |   117 +
 vendor/pdalboost/boost/mpl/iterator_category.hpp   |    35 +
 vendor/pdalboost/boost/mpl/iterator_range.hpp      |    42 +
 vendor/pdalboost/boost/mpl/iterator_tags.hpp       |    27 +
 vendor/pdalboost/boost/mpl/key_type_fwd.hpp        |    25 +
 vendor/pdalboost/boost/mpl/lambda.hpp              |    29 +
 vendor/pdalboost/boost/mpl/lambda_fwd.hpp          |    57 +
 vendor/pdalboost/boost/mpl/less.hpp                |    21 +
 vendor/pdalboost/boost/mpl/less_equal.hpp          |    21 +
 vendor/pdalboost/boost/mpl/limits/arity.hpp        |    21 +
 vendor/pdalboost/boost/mpl/limits/list.hpp         |    21 +
 vendor/pdalboost/boost/mpl/limits/unrolling.hpp    |    21 +
 vendor/pdalboost/boost/mpl/limits/vector.hpp       |    21 +
 vendor/pdalboost/boost/mpl/list.hpp                |    57 +
 vendor/pdalboost/boost/mpl/list/aux_/O1_size.hpp   |    33 +
 vendor/pdalboost/boost/mpl/list/aux_/begin_end.hpp |    44 +
 vendor/pdalboost/boost/mpl/list/aux_/clear.hpp     |    34 +
 vendor/pdalboost/boost/mpl/list/aux_/empty.hpp     |    34 +
 vendor/pdalboost/boost/mpl/list/aux_/front.hpp     |    33 +
 .../boost/mpl/list/aux_/include_preprocessed.hpp   |    35 +
 vendor/pdalboost/boost/mpl/list/aux_/item.hpp      |    55 +
 vendor/pdalboost/boost/mpl/list/aux_/iterator.hpp  |    76 +
 vendor/pdalboost/boost/mpl/list/aux_/numbered.hpp  |    68 +
 .../pdalboost/boost/mpl/list/aux_/numbered_c.hpp   |    71 +
 vendor/pdalboost/boost/mpl/list/aux_/pop_front.hpp |    34 +
 .../mpl/list/aux_/preprocessed/plain/list10.hpp    |   149 +
 .../mpl/list/aux_/preprocessed/plain/list10_c.hpp  |   164 +
 .../mpl/list/aux_/preprocessed/plain/list20.hpp    |   169 +
 .../mpl/list/aux_/preprocessed/plain/list20_c.hpp  |   173 +
 .../mpl/list/aux_/preprocessed/plain/list30.hpp    |   189 +
 .../mpl/list/aux_/preprocessed/plain/list30_c.hpp  |   183 +
 .../mpl/list/aux_/preprocessed/plain/list40.hpp    |   209 +
 .../mpl/list/aux_/preprocessed/plain/list40_c.hpp  |   193 +
 .../mpl/list/aux_/preprocessed/plain/list50.hpp    |   229 +
 .../mpl/list/aux_/preprocessed/plain/list50_c.hpp  |   203 +
 vendor/pdalboost/boost/mpl/list/aux_/push_back.hpp |    36 +
 .../pdalboost/boost/mpl/list/aux_/push_front.hpp   |    39 +
 vendor/pdalboost/boost/mpl/list/aux_/size.hpp      |    33 +
 vendor/pdalboost/boost/mpl/list/aux_/tag.hpp       |    24 +
 vendor/pdalboost/boost/mpl/list/list0.hpp          |    42 +
 vendor/pdalboost/boost/mpl/list/list0_c.hpp        |    31 +
 vendor/pdalboost/boost/mpl/list/list10.hpp         |    43 +
 vendor/pdalboost/boost/mpl/list/list10_c.hpp       |    43 +
 vendor/pdalboost/boost/mpl/list/list20.hpp         |    43 +
 vendor/pdalboost/boost/mpl/list/list20_c.hpp       |    43 +
 vendor/pdalboost/boost/mpl/list/list30.hpp         |    43 +
 vendor/pdalboost/boost/mpl/list/list30_c.hpp       |    43 +
 vendor/pdalboost/boost/mpl/list/list40.hpp         |    43 +
 vendor/pdalboost/boost/mpl/list/list40_c.hpp       |    43 +
 vendor/pdalboost/boost/mpl/list/list50.hpp         |    43 +
 vendor/pdalboost/boost/mpl/list/list50_c.hpp       |    43 +
 vendor/pdalboost/boost/mpl/logical.hpp             |    21 +
 vendor/pdalboost/boost/mpl/long.hpp                |    22 +
 vendor/pdalboost/boost/mpl/long_fwd.hpp            |    27 +
 vendor/pdalboost/boost/mpl/min_max.hpp             |    46 +
 vendor/pdalboost/boost/mpl/minus.hpp               |    21 +
 vendor/pdalboost/boost/mpl/multiplies.hpp          |    53 +
 vendor/pdalboost/boost/mpl/negate.hpp              |    81 +
 vendor/pdalboost/boost/mpl/next.hpp                |    19 +
 vendor/pdalboost/boost/mpl/next_prior.hpp          |    49 +
 vendor/pdalboost/boost/mpl/not.hpp                 |    51 +
 vendor/pdalboost/boost/mpl/not_equal_to.hpp        |    21 +
 vendor/pdalboost/boost/mpl/numeric_cast.hpp        |    41 +
 vendor/pdalboost/boost/mpl/or.hpp                  |    61 +
 vendor/pdalboost/boost/mpl/pair.hpp                |    70 +
 vendor/pdalboost/boost/mpl/pair_view.hpp           |   169 +
 vendor/pdalboost/boost/mpl/placeholders.hpp        |   100 +
 vendor/pdalboost/boost/mpl/plus.hpp                |    21 +
 vendor/pdalboost/boost/mpl/pop_back_fwd.hpp        |    24 +
 vendor/pdalboost/boost/mpl/pop_front_fwd.hpp       |    24 +
 vendor/pdalboost/boost/mpl/print.hpp               |    75 +
 vendor/pdalboost/boost/mpl/prior.hpp               |    19 +
 vendor/pdalboost/boost/mpl/protect.hpp             |    55 +
 vendor/pdalboost/boost/mpl/push_back.hpp           |    53 +
 vendor/pdalboost/boost/mpl/push_back_fwd.hpp       |    24 +
 vendor/pdalboost/boost/mpl/push_front.hpp          |    52 +
 vendor/pdalboost/boost/mpl/push_front_fwd.hpp      |    24 +
 vendor/pdalboost/boost/mpl/quote.hpp               |   151 +
 vendor/pdalboost/boost/mpl/remove_if.hpp           |    83 +
 vendor/pdalboost/boost/mpl/reverse_fold.hpp        |    50 +
 vendor/pdalboost/boost/mpl/reverse_iter_fold.hpp   |    56 +
 vendor/pdalboost/boost/mpl/same_as.hpp             |    55 +
 vendor/pdalboost/boost/mpl/sequence_tag.hpp        |   124 +
 vendor/pdalboost/boost/mpl/sequence_tag_fwd.hpp    |    26 +
 vendor/pdalboost/boost/mpl/set/aux_/at_impl.hpp    |    40 +
 .../boost/mpl/set/aux_/begin_end_impl.hpp          |    43 +
 vendor/pdalboost/boost/mpl/set/aux_/clear_impl.hpp |    35 +
 vendor/pdalboost/boost/mpl/set/aux_/empty_impl.hpp |    34 +
 vendor/pdalboost/boost/mpl/set/aux_/erase_impl.hpp |    41 +
 .../boost/mpl/set/aux_/erase_key_impl.hpp          |    53 +
 .../pdalboost/boost/mpl/set/aux_/has_key_impl.hpp  |    60 +
 .../pdalboost/boost/mpl/set/aux_/insert_impl.hpp   |    65 +
 .../boost/mpl/set/aux_/insert_range_impl.hpp       |    41 +
 vendor/pdalboost/boost/mpl/set/aux_/item.hpp       |    82 +
 vendor/pdalboost/boost/mpl/set/aux_/iterator.hpp   |    98 +
 .../pdalboost/boost/mpl/set/aux_/key_type_impl.hpp |    34 +
 vendor/pdalboost/boost/mpl/set/aux_/set0.hpp       |    69 +
 vendor/pdalboost/boost/mpl/set/aux_/size_impl.hpp  |    33 +
 vendor/pdalboost/boost/mpl/set/aux_/tag.hpp        |    24 +
 .../boost/mpl/set/aux_/value_type_impl.hpp         |    34 +
 vendor/pdalboost/boost/mpl/set/set0.hpp            |    36 +
 vendor/pdalboost/boost/mpl/size.hpp                |    42 +
 vendor/pdalboost/boost/mpl/size_fwd.hpp            |    24 +
 vendor/pdalboost/boost/mpl/tag.hpp                 |    52 +
 vendor/pdalboost/boost/mpl/times.hpp               |    21 +
 vendor/pdalboost/boost/mpl/transform.hpp           |   145 +
 vendor/pdalboost/boost/mpl/value_type_fwd.hpp      |    25 +
 vendor/pdalboost/boost/mpl/vector.hpp              |    57 +
 vendor/pdalboost/boost/mpl/vector/aux_/O1_size.hpp |    56 +
 vendor/pdalboost/boost/mpl/vector/aux_/at.hpp      |   116 +
 vendor/pdalboost/boost/mpl/vector/aux_/back.hpp    |    59 +
 .../pdalboost/boost/mpl/vector/aux_/begin_end.hpp  |    49 +
 vendor/pdalboost/boost/mpl/vector/aux_/clear.hpp   |    55 +
 vendor/pdalboost/boost/mpl/vector/aux_/empty.hpp   |    68 +
 vendor/pdalboost/boost/mpl/vector/aux_/front.hpp   |    56 +
 .../boost/mpl/vector/aux_/include_preprocessed.hpp |    55 +
 vendor/pdalboost/boost/mpl/vector/aux_/item.hpp    |   103 +
 .../pdalboost/boost/mpl/vector/aux_/iterator.hpp   |   130 +
 .../pdalboost/boost/mpl/vector/aux_/numbered.hpp   |   218 +
 .../pdalboost/boost/mpl/vector/aux_/numbered_c.hpp |    77 +
 .../pdalboost/boost/mpl/vector/aux_/pop_back.hpp   |    40 +
 .../pdalboost/boost/mpl/vector/aux_/pop_front.hpp  |    40 +
 .../vector/aux_/preprocessed/no_ctps/vector10.hpp  |  1528 +++
 .../aux_/preprocessed/no_ctps/vector10_c.hpp       |   149 +
 .../vector/aux_/preprocessed/no_ctps/vector20.hpp  |  1804 ++++
 .../aux_/preprocessed/no_ctps/vector20_c.hpp       |   195 +
 .../vector/aux_/preprocessed/no_ctps/vector30.hpp  |  2124 ++++
 .../aux_/preprocessed/no_ctps/vector30_c.hpp       |   238 +
 .../vector/aux_/preprocessed/no_ctps/vector40.hpp  |  2444 +++++
 .../aux_/preprocessed/no_ctps/vector40_c.hpp       |   281 +
 .../vector/aux_/preprocessed/no_ctps/vector50.hpp  |  2764 +++++
 .../aux_/preprocessed/no_ctps/vector50_c.hpp       |   325 +
 .../vector/aux_/preprocessed/plain/vector10.hpp    |   829 ++
 .../vector/aux_/preprocessed/plain/vector10_c.hpp  |   149 +
 .../vector/aux_/preprocessed/plain/vector20.hpp    |  1144 +++
 .../vector/aux_/preprocessed/plain/vector20_c.hpp  |   195 +
 .../vector/aux_/preprocessed/plain/vector30.hpp    |  1464 +++
 .../vector/aux_/preprocessed/plain/vector30_c.hpp  |   238 +
 .../vector/aux_/preprocessed/plain/vector40.hpp    |  1784 ++++
 .../vector/aux_/preprocessed/plain/vector40_c.hpp  |   281 +
 .../vector/aux_/preprocessed/plain/vector50.hpp    |  2104 ++++
 .../vector/aux_/preprocessed/plain/vector50_c.hpp  |   325 +
 .../aux_/preprocessed/typeof_based/vector10.hpp    |   139 +
 .../aux_/preprocessed/typeof_based/vector10_c.hpp  |   154 +
 .../aux_/preprocessed/typeof_based/vector20.hpp    |   159 +
 .../aux_/preprocessed/typeof_based/vector20_c.hpp  |   163 +
 .../aux_/preprocessed/typeof_based/vector30.hpp    |   179 +
 .../aux_/preprocessed/typeof_based/vector30_c.hpp  |   173 +
 .../aux_/preprocessed/typeof_based/vector40.hpp    |   199 +
 .../aux_/preprocessed/typeof_based/vector40_c.hpp  |   183 +
 .../aux_/preprocessed/typeof_based/vector50.hpp    |   219 +
 .../aux_/preprocessed/typeof_based/vector50_c.hpp  |   193 +
 .../pdalboost/boost/mpl/vector/aux_/push_back.hpp  |    40 +
 .../pdalboost/boost/mpl/vector/aux_/push_front.hpp |    40 +
 vendor/pdalboost/boost/mpl/vector/aux_/size.hpp    |    49 +
 vendor/pdalboost/boost/mpl/vector/aux_/tag.hpp     |    32 +
 vendor/pdalboost/boost/mpl/vector/aux_/vector0.hpp |    52 +
 vendor/pdalboost/boost/mpl/vector/vector0.hpp      |    34 +
 vendor/pdalboost/boost/mpl/vector/vector0_c.hpp    |    31 +
 vendor/pdalboost/boost/mpl/vector/vector10.hpp     |    45 +
 vendor/pdalboost/boost/mpl/vector/vector10_c.hpp   |    46 +
 vendor/pdalboost/boost/mpl/vector/vector20.hpp     |    45 +
 vendor/pdalboost/boost/mpl/vector/vector20_c.hpp   |    46 +
 vendor/pdalboost/boost/mpl/vector/vector30.hpp     |    45 +
 vendor/pdalboost/boost/mpl/vector/vector30_c.hpp   |    47 +
 vendor/pdalboost/boost/mpl/vector/vector40.hpp     |    45 +
 vendor/pdalboost/boost/mpl/vector/vector40_c.hpp   |    46 +
 vendor/pdalboost/boost/mpl/vector/vector50.hpp     |    45 +
 vendor/pdalboost/boost/mpl/vector/vector50_c.hpp   |    46 +
 vendor/pdalboost/boost/mpl/void.hpp                |    76 +
 vendor/pdalboost/boost/mpl/void_fwd.hpp            |    26 +
 .../boost/multi_index/detail/access_specifier.hpp  |    54 +
 .../boost/multi_index/detail/adl_swap.hpp          |    44 +
 .../multi_index/detail/archive_constructed.hpp     |    79 +
 .../boost/multi_index/detail/auto_space.hpp        |    91 +
 .../boost/multi_index/detail/base_type.hpp         |    74 +
 .../multi_index/detail/bidir_node_iterator.hpp     |   114 +
 .../boost/multi_index/detail/converter.hpp         |    52 +
 .../boost/multi_index/detail/copy_map.hpp          |   142 +
 .../detail/do_not_copy_elements_tag.hpp            |    34 +
 .../multi_index/detail/duplicates_iterator.hpp     |   120 +
 .../pdalboost/boost/multi_index/detail/has_tag.hpp |    42 +
 .../boost/multi_index/detail/header_holder.hpp     |    50 +
 .../boost/multi_index/detail/index_base.hpp        |   293 +
 .../boost/multi_index/detail/index_loader.hpp      |   139 +
 .../boost/multi_index/detail/index_matcher.hpp     |   249 +
 .../boost/multi_index/detail/index_node_base.hpp   |   131 +
 .../boost/multi_index/detail/index_saver.hpp       |   135 +
 .../boost/multi_index/detail/invariant_assert.hpp  |    21 +
 .../boost/multi_index/detail/is_index_list.hpp     |    40 +
 .../boost/multi_index/detail/is_transparent.hpp    |   135 +
 .../boost/multi_index/detail/iter_adaptor.hpp      |   321 +
 .../multi_index/detail/modify_key_adaptor.hpp      |    49 +
 .../boost/multi_index/detail/no_duplicate_tags.hpp |    97 +
 .../boost/multi_index/detail/node_type.hpp         |    66 +
 .../boost/multi_index/detail/ord_index_args.hpp    |    83 +
 .../boost/multi_index/detail/ord_index_impl.hpp    |  1567 +++
 .../multi_index/detail/ord_index_impl_fwd.hpp      |   128 +
 .../boost/multi_index/detail/ord_index_node.hpp    |   658 ++
 .../boost/multi_index/detail/ord_index_ops.hpp     |   266 +
 .../boost/multi_index/detail/promotes_arg.hpp      |    83 +
 .../pdalboost/boost/multi_index/detail/raw_ptr.hpp |    52 +
 .../boost/multi_index/detail/safe_mode.hpp         |   588 ++
 .../boost/multi_index/detail/scope_guard.hpp       |   453 +
 .../boost/multi_index/detail/seq_index_node.hpp    |   217 +
 .../boost/multi_index/detail/seq_index_ops.hpp     |   199 +
 .../multi_index/detail/serialization_version.hpp   |    73 +
 .../boost/multi_index/detail/uintptr_type.hpp      |    76 +
 .../boost/multi_index/detail/unbounded.hpp         |    66 +
 .../boost/multi_index/detail/value_compare.hpp     |    56 +
 .../boost/multi_index/detail/vartempl_support.hpp  |   247 +
 vendor/pdalboost/boost/multi_index/identity.hpp    |   145 +
 .../pdalboost/boost/multi_index/identity_fwd.hpp   |    26 +
 vendor/pdalboost/boost/multi_index/indexed_by.hpp  |    68 +
 vendor/pdalboost/boost/multi_index/member.hpp      |   262 +
 .../pdalboost/boost/multi_index/ordered_index.hpp  |   114 +
 .../boost/multi_index/ordered_index_fwd.hpp        |    35 +
 .../boost/multi_index/safe_mode_errors.hpp         |    48 +
 .../boost/multi_index/sequenced_index.hpp          |  1062 ++
 .../boost/multi_index/sequenced_index_fwd.hpp      |    91 +
 vendor/pdalboost/boost/multi_index/tag.hpp         |    88 +
 vendor/pdalboost/boost/multi_index_container.hpp   |  1362 +++
 .../pdalboost/boost/multi_index_container_fwd.hpp  |   121 +
 vendor/pdalboost/boost/next_prior.hpp              |   165 +
 vendor/pdalboost/boost/non_type.hpp                |    27 +
 vendor/pdalboost/boost/noncopyable.hpp             |    17 +
 vendor/pdalboost/boost/none.hpp                    |    59 +
 vendor/pdalboost/boost/none_t.hpp                  |    40 +
 .../pdalboost/boost/numeric/conversion/bounds.hpp  |    24 +
 vendor/pdalboost/boost/numeric/conversion/cast.hpp |    61 +
 .../boost/numeric/conversion/conversion_traits.hpp |    39 +
 .../boost/numeric/conversion/converter.hpp         |    68 +
 .../numeric/conversion/converter_policies.hpp      |   194 +
 .../boost/numeric/conversion/detail/bounds.hpp     |    58 +
 .../conversion/detail/conversion_traits.hpp        |    97 +
 .../boost/numeric/conversion/detail/converter.hpp  |   602 ++
 .../conversion/detail/int_float_mixture.hpp        |    72 +
 .../numeric/conversion/detail/is_subranged.hpp     |   234 +
 .../boost/numeric/conversion/detail/meta.hpp       |   120 +
 .../conversion/detail/numeric_cast_traits.hpp      |   138 +
 .../numeric/conversion/detail/old_numeric_cast.hpp |   339 +
 .../preprocessed/numeric_cast_traits_common.hpp    |  1741 ++++
 .../preprocessed/numeric_cast_traits_long_long.hpp |   347 +
 .../numeric/conversion/detail/sign_mixture.hpp     |    72 +
 .../conversion/detail/udt_builtin_mixture.hpp      |    69 +
 .../numeric/conversion/int_float_mixture_enum.hpp  |    29 +
 .../numeric/conversion/numeric_cast_traits.hpp     |    31 +
 .../boost/numeric/conversion/sign_mixture_enum.hpp |    29 +
 .../conversion/udt_builtin_mixture_enum.hpp        |    26 +
 vendor/pdalboost/boost/operators.hpp               |   950 ++
 vendor/pdalboost/boost/optional.hpp                |    18 +
 .../boost/optional/bad_optional_access.hpp         |    32 +
 vendor/pdalboost/boost/optional/optional.hpp       |  1567 +++
 vendor/pdalboost/boost/optional/optional_fwd.hpp   |    30 +
 vendor/pdalboost/boost/optional/optional_io.hpp    |    94 +
 vendor/pdalboost/boost/pending/integer_log2.hpp    |     9 +
 vendor/pdalboost/boost/pointee.hpp                 |    74 +
 vendor/pdalboost/boost/predef.h                    |    24 +
 vendor/pdalboost/boost/predef/architecture.h       |    32 +
 vendor/pdalboost/boost/predef/architecture/alpha.h |    59 +
 vendor/pdalboost/boost/predef/architecture/arm.h   |    70 +
 .../pdalboost/boost/predef/architecture/blackfin.h |    46 +
 .../pdalboost/boost/predef/architecture/convex.h   |    65 +
 vendor/pdalboost/boost/predef/architecture/ia64.h  |    49 +
 vendor/pdalboost/boost/predef/architecture/m68k.h  |    82 +
 vendor/pdalboost/boost/predef/architecture/mips.h  |    73 +
 .../pdalboost/boost/predef/architecture/parisc.h   |    64 +
 vendor/pdalboost/boost/predef/architecture/ppc.h   |    72 +
 .../pdalboost/boost/predef/architecture/pyramid.h  |    42 +
 vendor/pdalboost/boost/predef/architecture/rs6k.h  |    56 +
 vendor/pdalboost/boost/predef/architecture/sparc.h |    54 +
 .../pdalboost/boost/predef/architecture/superh.h   |    67 +
 .../pdalboost/boost/predef/architecture/sys370.h   |    43 +
 .../pdalboost/boost/predef/architecture/sys390.h   |    43 +
 vendor/pdalboost/boost/predef/architecture/x86.h   |    38 +
 .../pdalboost/boost/predef/architecture/x86/32.h   |    87 +
 .../pdalboost/boost/predef/architecture/x86/64.h   |    50 +
 vendor/pdalboost/boost/predef/architecture/z.h     |    42 +
 vendor/pdalboost/boost/predef/compiler.h           |    43 +
 vendor/pdalboost/boost/predef/compiler/borland.h   |    63 +
 vendor/pdalboost/boost/predef/compiler/clang.h     |    56 +
 vendor/pdalboost/boost/predef/compiler/comeau.h    |    61 +
 vendor/pdalboost/boost/predef/compiler/compaq.h    |    66 +
 vendor/pdalboost/boost/predef/compiler/diab.h      |    56 +
 .../pdalboost/boost/predef/compiler/digitalmars.h  |    56 +
 vendor/pdalboost/boost/predef/compiler/dignus.h    |    56 +
 vendor/pdalboost/boost/predef/compiler/edg.h       |    56 +
 vendor/pdalboost/boost/predef/compiler/ekopath.h   |    57 +
 vendor/pdalboost/boost/predef/compiler/gcc.h       |    68 +
 vendor/pdalboost/boost/predef/compiler/gcc_xml.h   |    53 +
 .../pdalboost/boost/predef/compiler/greenhills.h   |    66 +
 vendor/pdalboost/boost/predef/compiler/hp_acc.h    |    61 +
 vendor/pdalboost/boost/predef/compiler/iar.h       |    56 +
 vendor/pdalboost/boost/predef/compiler/ibm.h       |    72 +
 vendor/pdalboost/boost/predef/compiler/intel.h     |    65 +
 vendor/pdalboost/boost/predef/compiler/kai.h       |    56 +
 vendor/pdalboost/boost/predef/compiler/llvm.h      |    57 +
 vendor/pdalboost/boost/predef/compiler/metaware.h  |    53 +
 .../pdalboost/boost/predef/compiler/metrowerks.h   |    77 +
 vendor/pdalboost/boost/predef/compiler/microtec.h  |    53 +
 vendor/pdalboost/boost/predef/compiler/mpw.h       |    63 +
 vendor/pdalboost/boost/predef/compiler/palm.h      |    56 +
 vendor/pdalboost/boost/predef/compiler/pgi.h       |    60 +
 .../pdalboost/boost/predef/compiler/sgi_mipspro.h  |    66 +
 vendor/pdalboost/boost/predef/compiler/sunpro.h    |    76 +
 vendor/pdalboost/boost/predef/compiler/tendra.h    |    53 +
 vendor/pdalboost/boost/predef/compiler/visualc.h   |    91 +
 vendor/pdalboost/boost/predef/compiler/watcom.h    |    56 +
 vendor/pdalboost/boost/predef/detail/_cassert.h    |    17 +
 vendor/pdalboost/boost/predef/detail/_exception.h  |    15 +
 .../pdalboost/boost/predef/detail/comp_detected.h  |    10 +
 .../pdalboost/boost/predef/detail/endian_compat.h  |    26 +
 vendor/pdalboost/boost/predef/detail/os_detected.h |    10 +
 .../boost/predef/detail/platform_detected.h        |    10 +
 vendor/pdalboost/boost/predef/detail/test.h        |    17 +
 vendor/pdalboost/boost/predef/hardware.h           |    16 +
 vendor/pdalboost/boost/predef/hardware/simd.h      |   107 +
 vendor/pdalboost/boost/predef/hardware/simd/arm.h  |    57 +
 .../boost/predef/hardware/simd/arm/versions.h      |    32 +
 vendor/pdalboost/boost/predef/hardware/simd/ppc.h  |    69 +
 .../boost/predef/hardware/simd/ppc/versions.h      |    51 +
 vendor/pdalboost/boost/predef/hardware/simd/x86.h  |   123 +
 .../boost/predef/hardware/simd/x86/versions.h      |   129 +
 .../pdalboost/boost/predef/hardware/simd/x86_amd.h |    87 +
 .../boost/predef/hardware/simd/x86_amd/versions.h  |    51 +
 vendor/pdalboost/boost/predef/language.h           |    17 +
 vendor/pdalboost/boost/predef/language/objc.h      |    42 +
 vendor/pdalboost/boost/predef/language/stdc.h      |    53 +
 vendor/pdalboost/boost/predef/language/stdcpp.h    |   121 +
 vendor/pdalboost/boost/predef/library.h            |    16 +
 vendor/pdalboost/boost/predef/library/c.h          |    20 +
 vendor/pdalboost/boost/predef/library/c/_prefix.h  |    13 +
 vendor/pdalboost/boost/predef/library/c/gnu.h      |    61 +
 vendor/pdalboost/boost/predef/library/c/uc.h       |    47 +
 vendor/pdalboost/boost/predef/library/c/vms.h      |    47 +
 vendor/pdalboost/boost/predef/library/c/zos.h      |    56 +
 vendor/pdalboost/boost/predef/library/std.h        |    25 +
 .../pdalboost/boost/predef/library/std/_prefix.h   |    23 +
 vendor/pdalboost/boost/predef/library/std/cxx.h    |    46 +
 .../boost/predef/library/std/dinkumware.h          |    52 +
 .../pdalboost/boost/predef/library/std/libcomo.h   |    47 +
 vendor/pdalboost/boost/predef/library/std/modena.h |    45 +
 vendor/pdalboost/boost/predef/library/std/msl.h    |    53 +
 .../pdalboost/boost/predef/library/std/roguewave.h |    56 +
 vendor/pdalboost/boost/predef/library/std/sgi.h    |    51 +
 .../pdalboost/boost/predef/library/std/stdcpp3.h   |    53 +
 .../pdalboost/boost/predef/library/std/stlport.h   |    59 +
 vendor/pdalboost/boost/predef/library/std/vacpp.h  |    44 +
 vendor/pdalboost/boost/predef/make.h               |    89 +
 vendor/pdalboost/boost/predef/os.h                 |    33 +
 vendor/pdalboost/boost/predef/os/aix.h             |    66 +
 vendor/pdalboost/boost/predef/os/amigaos.h         |    46 +
 vendor/pdalboost/boost/predef/os/android.h         |    45 +
 vendor/pdalboost/boost/predef/os/beos.h            |    45 +
 vendor/pdalboost/boost/predef/os/bsd.h             |   103 +
 vendor/pdalboost/boost/predef/os/bsd/bsdi.h        |    48 +
 vendor/pdalboost/boost/predef/os/bsd/dragonfly.h   |    50 +
 vendor/pdalboost/boost/predef/os/bsd/free.h        |    60 +
 vendor/pdalboost/boost/predef/os/bsd/net.h         |    84 +
 vendor/pdalboost/boost/predef/os/bsd/open.h        |   171 +
 vendor/pdalboost/boost/predef/os/cygwin.h          |    45 +
 vendor/pdalboost/boost/predef/os/haiku.h           |    46 +
 vendor/pdalboost/boost/predef/os/hpux.h            |    47 +
 vendor/pdalboost/boost/predef/os/ios.h             |    51 +
 vendor/pdalboost/boost/predef/os/irix.h            |    46 +
 vendor/pdalboost/boost/predef/os/linux.h           |    46 +
 vendor/pdalboost/boost/predef/os/macos.h           |    65 +
 vendor/pdalboost/boost/predef/os/os400.h           |    45 +
 vendor/pdalboost/boost/predef/os/qnxnto.h          |    59 +
 vendor/pdalboost/boost/predef/os/solaris.h         |    46 +
 vendor/pdalboost/boost/predef/os/unix.h            |    76 +
 vendor/pdalboost/boost/predef/os/vms.h             |    52 +
 vendor/pdalboost/boost/predef/os/windows.h         |    51 +
 vendor/pdalboost/boost/predef/other.h              |    16 +
 vendor/pdalboost/boost/predef/other/endian.h       |   204 +
 vendor/pdalboost/boost/predef/platform.h           |    21 +
 vendor/pdalboost/boost/predef/platform/mingw.h     |    69 +
 .../boost/predef/platform/windows_desktop.h        |    45 +
 .../boost/predef/platform/windows_phone.h          |    43 +
 .../boost/predef/platform/windows_runtime.h        |    45 +
 .../boost/predef/platform/windows_store.h          |    43 +
 vendor/pdalboost/boost/predef/version.h            |    15 +
 vendor/pdalboost/boost/predef/version_number.h     |    53 +
 .../boost/preprocessor/arithmetic/add.hpp          |    51 +
 .../boost/preprocessor/arithmetic/dec.hpp          |   289 +
 .../preprocessor/arithmetic/detail/div_base.hpp    |    61 +
 .../boost/preprocessor/arithmetic/inc.hpp          |   288 +
 .../boost/preprocessor/arithmetic/mod.hpp          |    39 +
 .../boost/preprocessor/arithmetic/sub.hpp          |    50 +
 vendor/pdalboost/boost/preprocessor/array/data.hpp |    28 +
 vendor/pdalboost/boost/preprocessor/array/elem.hpp |    29 +
 vendor/pdalboost/boost/preprocessor/array/size.hpp |    28 +
 vendor/pdalboost/boost/preprocessor/cat.hpp        |    35 +
 vendor/pdalboost/boost/preprocessor/comma_if.hpp   |    17 +
 .../boost/preprocessor/comparison/equal.hpp        |    34 +
 .../boost/preprocessor/comparison/greater.hpp      |    38 +
 .../boost/preprocessor/comparison/less.hpp         |    46 +
 .../boost/preprocessor/comparison/less_equal.hpp   |    39 +
 .../boost/preprocessor/comparison/not_equal.hpp    |   814 ++
 .../pdalboost/boost/preprocessor/config/config.hpp |   104 +
 .../boost/preprocessor/control/deduce_d.hpp        |    22 +
 .../preprocessor/control/detail/dmc/while.hpp      |   536 +
 .../preprocessor/control/detail/edg/while.hpp      |   534 +
 .../preprocessor/control/detail/msvc/while.hpp     |   277 +
 .../boost/preprocessor/control/detail/while.hpp    |   536 +
 .../boost/preprocessor/control/expr_if.hpp         |    30 +
 .../boost/preprocessor/control/expr_iif.hpp        |    31 +
 vendor/pdalboost/boost/preprocessor/control/if.hpp |    30 +
 .../pdalboost/boost/preprocessor/control/iif.hpp   |    34 +
 .../pdalboost/boost/preprocessor/control/while.hpp |   312 +
 .../pdalboost/boost/preprocessor/debug/error.hpp   |    33 +
 vendor/pdalboost/boost/preprocessor/dec.hpp        |    17 +
 .../boost/preprocessor/detail/auto_rec.hpp         |   293 +
 .../pdalboost/boost/preprocessor/detail/check.hpp  |    48 +
 .../boost/preprocessor/detail/dmc/auto_rec.hpp     |   286 +
 .../boost/preprocessor/detail/is_binary.hpp        |    30 +
 .../pdalboost/boost/preprocessor/detail/split.hpp  |    35 +
 vendor/pdalboost/boost/preprocessor/empty.hpp      |    17 +
 vendor/pdalboost/boost/preprocessor/enum.hpp       |    17 +
 .../pdalboost/boost/preprocessor/enum_params.hpp   |    17 +
 .../preprocessor/enum_params_with_a_default.hpp    |    17 +
 .../preprocessor/enum_params_with_defaults.hpp     |    17 +
 .../boost/preprocessor/enum_shifted_params.hpp     |    17 +
 vendor/pdalboost/boost/preprocessor/expr_if.hpp    |    17 +
 .../preprocessor/facilities/detail/is_empty.hpp    |    55 +
 .../boost/preprocessor/facilities/empty.hpp        |    23 +
 .../boost/preprocessor/facilities/expand.hpp       |    28 +
 .../boost/preprocessor/facilities/identity.hpp     |    27 +
 .../boost/preprocessor/facilities/intercept.hpp    |   277 +
 .../boost/preprocessor/facilities/is_1.hpp         |    23 +
 .../boost/preprocessor/facilities/is_empty.hpp     |    56 +
 .../preprocessor/facilities/is_empty_variadic.hpp  |    57 +
 .../boost/preprocessor/facilities/overload.hpp     |    25 +
 vendor/pdalboost/boost/preprocessor/identity.hpp   |    17 +
 vendor/pdalboost/boost/preprocessor/inc.hpp        |    17 +
 vendor/pdalboost/boost/preprocessor/iterate.hpp    |    17 +
 .../iteration/detail/bounds/lower1.hpp             |    99 +
 .../iteration/detail/bounds/lower2.hpp             |    99 +
 .../iteration/detail/bounds/lower3.hpp             |    99 +
 .../iteration/detail/bounds/lower4.hpp             |    99 +
 .../iteration/detail/bounds/lower5.hpp             |    99 +
 .../iteration/detail/bounds/upper1.hpp             |    99 +
 .../iteration/detail/bounds/upper2.hpp             |    99 +
 .../iteration/detail/bounds/upper3.hpp             |    99 +
 .../iteration/detail/bounds/upper4.hpp             |    99 +
 .../iteration/detail/bounds/upper5.hpp             |    99 +
 .../boost/preprocessor/iteration/detail/finish.hpp |    99 +
 .../iteration/detail/iter/forward1.hpp             |  1342 +++
 .../iteration/detail/iter/forward2.hpp             |  1338 +++
 .../iteration/detail/iter/forward3.hpp             |  1338 +++
 .../iteration/detail/iter/forward4.hpp             |  1338 +++
 .../iteration/detail/iter/forward5.hpp             |  1338 +++
 .../iteration/detail/iter/reverse1.hpp             |  1296 +++
 .../iteration/detail/iter/reverse2.hpp             |  1296 +++
 .../iteration/detail/iter/reverse3.hpp             |  1296 +++
 .../iteration/detail/iter/reverse4.hpp             |  1296 +++
 .../iteration/detail/iter/reverse5.hpp             |  1296 +++
 .../boost/preprocessor/iteration/detail/local.hpp  |   812 ++
 .../boost/preprocessor/iteration/detail/rlocal.hpp |   782 ++
 .../boost/preprocessor/iteration/detail/self.hpp   |    21 +
 .../boost/preprocessor/iteration/detail/start.hpp  |    99 +
 .../boost/preprocessor/iteration/iterate.hpp       |    82 +
 .../boost/preprocessor/iteration/local.hpp         |    26 +
 .../boost/preprocessor/iteration/self.hpp          |    19 +
 vendor/pdalboost/boost/preprocessor/list/adt.hpp   |    73 +
 .../preprocessor/list/detail/dmc/fold_left.hpp     |   279 +
 .../preprocessor/list/detail/edg/fold_left.hpp     |   536 +
 .../preprocessor/list/detail/edg/fold_right.hpp    |   794 ++
 .../boost/preprocessor/list/detail/fold_left.hpp   |   279 +
 .../boost/preprocessor/list/detail/fold_right.hpp  |   277 +
 .../boost/preprocessor/list/fold_left.hpp          |   303 +
 .../boost/preprocessor/list/fold_right.hpp         |    40 +
 .../boost/preprocessor/list/for_each_i.hpp         |    65 +
 .../pdalboost/boost/preprocessor/list/reverse.hpp  |    40 +
 .../pdalboost/boost/preprocessor/logical/and.hpp   |    30 +
 .../boost/preprocessor/logical/bitand.hpp          |    38 +
 .../pdalboost/boost/preprocessor/logical/bool.hpp  |   288 +
 .../pdalboost/boost/preprocessor/logical/compl.hpp |    36 +
 .../pdalboost/boost/preprocessor/logical/not.hpp   |    30 +
 .../boost/preprocessor/punctuation/comma.hpp       |    21 +
 .../boost/preprocessor/punctuation/comma_if.hpp    |    31 +
 .../punctuation/detail/is_begin_parens.hpp         |    48 +
 .../preprocessor/punctuation/is_begin_parens.hpp   |    51 +
 vendor/pdalboost/boost/preprocessor/repeat.hpp     |    17 +
 .../boost/preprocessor/repeat_from_to.hpp          |    17 +
 .../preprocessor/repetition/detail/dmc/for.hpp     |   536 +
 .../preprocessor/repetition/detail/edg/for.hpp     |   534 +
 .../boost/preprocessor/repetition/detail/for.hpp   |   536 +
 .../preprocessor/repetition/detail/msvc/for.hpp    |   277 +
 .../boost/preprocessor/repetition/enum.hpp         |    66 +
 .../preprocessor/repetition/enum_binary_params.hpp |    54 +
 .../boost/preprocessor/repetition/enum_params.hpp  |    41 +
 .../repetition/enum_params_with_a_default.hpp      |    25 +
 .../repetition/enum_params_with_defaults.hpp       |    24 +
 .../repetition/enum_shifted_params.hpp             |    44 +
 .../repetition/enum_trailing_params.hpp            |    38 +
 .../boost/preprocessor/repetition/for.hpp          |   324 +
 .../boost/preprocessor/repetition/repeat.hpp       |   825 ++
 .../preprocessor/repetition/repeat_from_to.hpp     |    87 +
 vendor/pdalboost/boost/preprocessor/seq/cat.hpp    |    49 +
 .../boost/preprocessor/seq/detail/is_empty.hpp     |    49 +
 .../boost/preprocessor/seq/detail/split.hpp        |   284 +
 vendor/pdalboost/boost/preprocessor/seq/elem.hpp   |   304 +
 vendor/pdalboost/boost/preprocessor/seq/enum.hpp   |   288 +
 .../pdalboost/boost/preprocessor/seq/first_n.hpp   |    30 +
 .../pdalboost/boost/preprocessor/seq/fold_left.hpp |  1070 ++
 .../pdalboost/boost/preprocessor/seq/for_each.hpp  |   107 +
 .../boost/preprocessor/seq/for_each_i.hpp          |   109 +
 vendor/pdalboost/boost/preprocessor/seq/rest_n.hpp |    46 +
 vendor/pdalboost/boost/preprocessor/seq/seq.hpp    |    44 +
 vendor/pdalboost/boost/preprocessor/seq/size.hpp   |   548 +
 vendor/pdalboost/boost/preprocessor/seq/subseq.hpp |    28 +
 .../pdalboost/boost/preprocessor/seq/to_tuple.hpp  |    27 +
 .../pdalboost/boost/preprocessor/seq/transform.hpp |    48 +
 .../boost/preprocessor/slot/detail/counter.hpp     |   269 +
 .../boost/preprocessor/slot/detail/def.hpp         |    49 +
 .../boost/preprocessor/slot/detail/shared.hpp      |   247 +
 .../boost/preprocessor/slot/detail/slot1.hpp       |   267 +
 .../boost/preprocessor/slot/detail/slot2.hpp       |   267 +
 .../boost/preprocessor/slot/detail/slot3.hpp       |   267 +
 .../boost/preprocessor/slot/detail/slot4.hpp       |   267 +
 .../boost/preprocessor/slot/detail/slot5.hpp       |   267 +
 vendor/pdalboost/boost/preprocessor/slot/slot.hpp  |    32 +
 vendor/pdalboost/boost/preprocessor/stringize.hpp  |    33 +
 .../preprocessor/tuple/detail/is_single_return.hpp |    28 +
 vendor/pdalboost/boost/preprocessor/tuple/eat.hpp  |   115 +
 vendor/pdalboost/boost/preprocessor/tuple/elem.hpp |   201 +
 vendor/pdalboost/boost/preprocessor/tuple/rem.hpp  |   149 +
 vendor/pdalboost/boost/preprocessor/tuple/size.hpp |    28 +
 .../pdalboost/boost/preprocessor/tuple/to_list.hpp |   118 +
 .../pdalboost/boost/preprocessor/variadic/elem.hpp |    94 +
 .../pdalboost/boost/preprocessor/variadic/size.hpp |    30 +
 .../detail/exception_implementation.hpp            |    83 +
 .../property_tree/detail/file_parser_error.hpp     |    88 +
 .../property_tree/detail/info_parser_error.hpp     |    32 +
 .../property_tree/detail/info_parser_read.hpp      |   391 +
 .../property_tree/detail/info_parser_utils.hpp     |    32 +
 .../property_tree/detail/info_parser_write.hpp     |   147 +
 .../detail/info_parser_writer_settings.hpp         |    40 +
 .../detail/json_parser/narrow_encoding.hpp         |   157 +
 .../property_tree/detail/json_parser/parser.hpp    |   524 +
 .../property_tree/detail/json_parser/read.hpp      |    55 +
 .../detail/json_parser/standard_callbacks.hpp      |   152 +
 .../detail/json_parser/wide_encoding.hpp           |   171 +
 .../property_tree/detail/json_parser_error.hpp     |    33 +
 .../property_tree/detail/json_parser_write.hpp     |   168 +
 .../property_tree/detail/ptree_implementation.hpp  |   933 ++
 .../boost/property_tree/detail/ptree_utils.hpp     |   105 +
 .../boost/property_tree/detail/rapidxml.hpp        |  2595 +++++
 .../property_tree/detail/xml_parser_error.hpp      |    33 +
 .../property_tree/detail/xml_parser_flags.hpp      |    31 +
 .../detail/xml_parser_read_rapidxml.hpp            |   144 +
 .../property_tree/detail/xml_parser_utils.hpp      |   141 +
 .../property_tree/detail/xml_parser_write.hpp      |   197 +
 .../detail/xml_parser_writer_settings.hpp          |    64 +
 .../pdalboost/boost/property_tree/exceptions.hpp   |    86 +
 .../boost/property_tree/id_translator.hpp          |    51 +
 .../pdalboost/boost/property_tree/info_parser.hpp  |   151 +
 .../pdalboost/boost/property_tree/ini_parser.hpp   |   334 +
 .../pdalboost/boost/property_tree/json_parser.hpp  |   140 +
 vendor/pdalboost/boost/property_tree/ptree.hpp     |   518 +
 vendor/pdalboost/boost/property_tree/ptree_fwd.hpp |   143 +
 .../boost/property_tree/ptree_serialization.hpp    |   129 +
 .../boost/property_tree/stream_translator.hpp      |   229 +
 .../pdalboost/boost/property_tree/string_path.hpp  |   278 +
 .../pdalboost/boost/property_tree/xml_parser.hpp   |   152 +
 vendor/pdalboost/boost/random/detail/config.hpp    |    18 +
 vendor/pdalboost/boost/random/detail/const_mod.hpp |   216 +
 .../boost/random/detail/disable_warnings.hpp       |    29 +
 .../boost/random/detail/enable_warnings.hpp        |    22 +
 .../boost/random/detail/generator_bits.hpp         |    36 +
 .../pdalboost/boost/random/detail/integer_log2.hpp |    84 +
 .../boost/random/detail/large_arithmetic.hpp       |   122 +
 vendor/pdalboost/boost/random/detail/operators.hpp |    84 +
 .../pdalboost/boost/random/detail/ptr_helper.hpp   |    67 +
 vendor/pdalboost/boost/random/detail/seed.hpp      |   115 +
 vendor/pdalboost/boost/random/detail/seed_impl.hpp |   398 +
 .../boost/random/detail/signed_unsigned_tools.hpp  |    89 +
 .../pdalboost/boost/random/linear_congruential.hpp |   466 +
 vendor/pdalboost/boost/random/traits.hpp           |   107 +
 vendor/pdalboost/boost/random/uniform_01.hpp       |   257 +
 vendor/pdalboost/boost/random/uniform_smallint.hpp |   307 +
 vendor/pdalboost/boost/range.hpp                   |    23 +
 .../boost/range/adaptor/adjacent_filtered.hpp      |   237 +
 .../pdalboost/boost/range/adaptor/argument_fwd.hpp |    80 +
 vendor/pdalboost/boost/range/adaptor/copied.hpp    |    68 +
 vendor/pdalboost/boost/range/adaptor/filtered.hpp  |   121 +
 vendor/pdalboost/boost/range/adaptor/formatted.hpp |   229 +
 vendor/pdalboost/boost/range/adaptor/indexed.hpp   |   370 +
 .../pdalboost/boost/range/adaptor/indirected.hpp   |   100 +
 vendor/pdalboost/boost/range/adaptor/map.hpp       |   204 +
 vendor/pdalboost/boost/range/adaptor/replaced.hpp  |   169 +
 .../pdalboost/boost/range/adaptor/replaced_if.hpp  |   177 +
 vendor/pdalboost/boost/range/adaptor/reversed.hpp  |   103 +
 vendor/pdalboost/boost/range/adaptor/sliced.hpp    |    96 +
 vendor/pdalboost/boost/range/adaptor/strided.hpp   |   697 ++
 vendor/pdalboost/boost/range/adaptor/tokenized.hpp |   137 +
 .../pdalboost/boost/range/adaptor/transformed.hpp  |   137 +
 vendor/pdalboost/boost/range/adaptor/uniqued.hpp   |    97 +
 vendor/pdalboost/boost/range/adaptors.hpp          |    31 +
 vendor/pdalboost/boost/range/algorithm.hpp         |   104 +
 .../boost/range/algorithm/adjacent_find.hpp        |   125 +
 .../boost/range/algorithm/binary_search.hpp        |    49 +
 vendor/pdalboost/boost/range/algorithm/copy.hpp    |    41 +
 .../boost/range/algorithm/copy_backward.hpp        |    43 +
 vendor/pdalboost/boost/range/algorithm/count.hpp   |    50 +
 .../pdalboost/boost/range/algorithm/count_if.hpp   |    51 +
 vendor/pdalboost/boost/range/algorithm/equal.hpp   |   200 +
 .../boost/range/algorithm/equal_range.hpp          |    80 +
 vendor/pdalboost/boost/range/algorithm/fill.hpp    |    49 +
 vendor/pdalboost/boost/range/algorithm/fill_n.hpp  |    53 +
 vendor/pdalboost/boost/range/algorithm/find.hpp    |    80 +
 .../pdalboost/boost/range/algorithm/find_end.hpp   |   152 +
 .../boost/range/algorithm/find_first_of.hpp        |   155 +
 vendor/pdalboost/boost/range/algorithm/find_if.hpp |    81 +
 .../pdalboost/boost/range/algorithm/for_each.hpp   |   110 +
 .../pdalboost/boost/range/algorithm/generate.hpp   |    49 +
 .../boost/range/algorithm/heap_algorithm.hpp       |   194 +
 .../boost/range/algorithm/inplace_merge.hpp        |    74 +
 .../range/algorithm/lexicographical_compare.hpp    |    58 +
 .../boost/range/algorithm/lower_bound.hpp          |   124 +
 .../boost/range/algorithm/max_element.hpp          |   115 +
 vendor/pdalboost/boost/range/algorithm/merge.hpp   |    61 +
 .../boost/range/algorithm/min_element.hpp          |   115 +
 .../pdalboost/boost/range/algorithm/mismatch.hpp   |   195 +
 .../boost/range/algorithm/nth_element.hpp          |    74 +
 .../boost/range/algorithm/partial_sort.hpp         |    76 +
 .../boost/range/algorithm/partial_sort_copy.hpp    |    82 +
 .../pdalboost/boost/range/algorithm/partition.hpp  |    74 +
 .../boost/range/algorithm/permutation.hpp          |   108 +
 .../boost/range/algorithm/random_shuffle.hpp       |    68 +
 vendor/pdalboost/boost/range/algorithm/remove.hpp  |    74 +
 .../boost/range/algorithm/remove_copy.hpp          |    44 +
 .../boost/range/algorithm/remove_copy_if.hpp       |    38 +
 .../pdalboost/boost/range/algorithm/remove_if.hpp  |    75 +
 vendor/pdalboost/boost/range/algorithm/replace.hpp |    53 +
 .../boost/range/algorithm/replace_copy.hpp         |    42 +
 .../boost/range/algorithm/replace_copy_if.hpp      |    46 +
 .../pdalboost/boost/range/algorithm/replace_if.hpp |    54 +
 vendor/pdalboost/boost/range/algorithm/reverse.hpp |    50 +
 .../boost/range/algorithm/reverse_copy.hpp         |    40 +
 vendor/pdalboost/boost/range/algorithm/rotate.hpp  |    51 +
 .../boost/range/algorithm/rotate_copy.hpp          |    44 +
 vendor/pdalboost/boost/range/algorithm/search.hpp  |   134 +
 .../pdalboost/boost/range/algorithm/search_n.hpp   |   360 +
 .../boost/range/algorithm/set_algorithm.hpp        |   198 +
 vendor/pdalboost/boost/range/algorithm/sort.hpp    |    68 +
 .../boost/range/algorithm/stable_partition.hpp     |    73 +
 .../boost/range/algorithm/stable_sort.hpp          |    68 +
 .../pdalboost/boost/range/algorithm/transform.hpp  |    96 +
 vendor/pdalboost/boost/range/algorithm/unique.hpp  |   107 +
 .../boost/range/algorithm/unique_copy.hpp          |    51 +
 .../boost/range/algorithm/upper_bound.hpp          |   127 +
 vendor/pdalboost/boost/range/as_literal.hpp        |   127 +
 vendor/pdalboost/boost/range/begin.hpp             |   135 +
 vendor/pdalboost/boost/range/category.hpp          |    29 +
 vendor/pdalboost/boost/range/concepts.hpp          |   386 +
 vendor/pdalboost/boost/range/config.hpp            |    56 +
 vendor/pdalboost/boost/range/const_iterator.hpp    |    76 +
 .../boost/range/const_reverse_iterator.hpp         |    35 +
 vendor/pdalboost/boost/range/detail/as_literal.hpp |    33 +
 vendor/pdalboost/boost/range/detail/begin.hpp      |    83 +
 vendor/pdalboost/boost/range/detail/common.hpp     |   118 +
 .../detail/default_constructible_unary_fn.hpp      |    64 +
 vendor/pdalboost/boost/range/detail/detail_str.hpp |   376 +
 vendor/pdalboost/boost/range/detail/end.hpp        |    86 +
 .../boost/range/detail/extract_optional_type.hpp   |    48 +
 .../boost/range/detail/has_member_size.hpp         |    66 +
 .../boost/range/detail/implementation_help.hpp     |   114 +
 .../pdalboost/boost/range/detail/misc_concept.hpp  |    33 +
 .../range/detail/msvc_has_iterator_workaround.hpp  |   132 +
 .../pdalboost/boost/range/detail/range_return.hpp  |   180 +
 .../pdalboost/boost/range/detail/remove_extent.hpp |   157 +
 vendor/pdalboost/boost/range/detail/safe_bool.hpp  |    72 +
 vendor/pdalboost/boost/range/detail/sfinae.hpp     |    77 +
 vendor/pdalboost/boost/range/detail/size_type.hpp  |    55 +
 vendor/pdalboost/boost/range/detail/str_types.hpp  |    38 +
 vendor/pdalboost/boost/range/detail/value_type.hpp |    72 +
 vendor/pdalboost/boost/range/difference_type.hpp   |    47 +
 vendor/pdalboost/boost/range/distance.hpp          |    34 +
 vendor/pdalboost/boost/range/empty.hpp             |    34 +
 vendor/pdalboost/boost/range/end.hpp               |   128 +
 vendor/pdalboost/boost/range/functions.hpp         |    27 +
 .../pdalboost/boost/range/has_range_iterator.hpp   |    83 +
 vendor/pdalboost/boost/range/iterator.hpp          |    74 +
 vendor/pdalboost/boost/range/iterator_range.hpp    |    16 +
 .../pdalboost/boost/range/iterator_range_core.hpp  |   883 ++
 vendor/pdalboost/boost/range/iterator_range_io.hpp |    93 +
 vendor/pdalboost/boost/range/metafunctions.hpp     |    31 +
 vendor/pdalboost/boost/range/mutable_iterator.hpp  |    79 +
 vendor/pdalboost/boost/range/pointer.hpp           |    30 +
 vendor/pdalboost/boost/range/range_fwd.hpp         |    63 +
 vendor/pdalboost/boost/range/rbegin.hpp            |    65 +
 vendor/pdalboost/boost/range/reference.hpp         |    29 +
 vendor/pdalboost/boost/range/rend.hpp              |    65 +
 vendor/pdalboost/boost/range/result_iterator.hpp   |    33 +
 vendor/pdalboost/boost/range/reverse_iterator.hpp  |    42 +
 .../boost/range/reverse_result_iterator.hpp        |    32 +
 vendor/pdalboost/boost/range/size.hpp              |    76 +
 vendor/pdalboost/boost/range/size_type.hpp         |    95 +
 vendor/pdalboost/boost/range/sub_range.hpp         |   287 +
 vendor/pdalboost/boost/range/traversal.hpp         |    31 +
 vendor/pdalboost/boost/range/value_type.hpp        |    30 +
 vendor/pdalboost/boost/ratio/config.hpp            |    92 +
 vendor/pdalboost/boost/ratio/detail/mpl/abs.hpp    |    89 +
 vendor/pdalboost/boost/ratio/detail/mpl/gcd.hpp    |   124 +
 vendor/pdalboost/boost/ratio/detail/mpl/lcm.hpp    |   126 +
 vendor/pdalboost/boost/ratio/detail/mpl/sign.hpp   |    89 +
 .../boost/ratio/detail/overflow_helpers.hpp        |   367 +
 .../pdalboost/boost/ratio/mpl/rational_c_tag.hpp   |    25 +
 vendor/pdalboost/boost/ratio/ratio.hpp             |   293 +
 vendor/pdalboost/boost/ratio/ratio_fwd.hpp         |   109 +
 vendor/pdalboost/boost/rational.hpp                |   709 ++
 vendor/pdalboost/boost/ref.hpp                     |    17 +
 vendor/pdalboost/boost/scoped_array.hpp            |    16 +
 vendor/pdalboost/boost/scoped_ptr.hpp              |    16 +
 vendor/pdalboost/boost/serialization/access.hpp    |   145 +
 vendor/pdalboost/boost/serialization/array.hpp     |   154 +
 .../boost/serialization/assume_abstract.hpp        |    59 +
 .../pdalboost/boost/serialization/base_object.hpp  |   101 +
 .../boost/serialization/collection_size_type.hpp   |    62 +
 .../boost/serialization/collections_save_imp.hpp   |    82 +
 vendor/pdalboost/boost/serialization/config.hpp    |    74 +
 .../serialization/detail/stack_constructor.hpp     |    65 +
 .../boost/serialization/extended_type_info.hpp     |   116 +
 .../serialization/extended_type_info_no_rtti.hpp   |   182 +
 .../serialization/extended_type_info_typeid.hpp    |   167 +
 vendor/pdalboost/boost/serialization/factory.hpp   |   100 +
 .../boost/serialization/force_include.hpp          |    55 +
 .../serialization/is_bitwise_serializable.hpp      |    46 +
 .../boost/serialization/item_version_type.hpp      |    68 +
 vendor/pdalboost/boost/serialization/level.hpp     |   116 +
 .../pdalboost/boost/serialization/level_enum.hpp   |    55 +
 vendor/pdalboost/boost/serialization/nvp.hpp       |   135 +
 .../boost/serialization/serialization.hpp          |   154 +
 vendor/pdalboost/boost/serialization/singleton.hpp |   158 +
 .../pdalboost/boost/serialization/smart_cast.hpp   |   275 +
 .../pdalboost/boost/serialization/split_free.hpp   |    93 +
 .../pdalboost/boost/serialization/split_member.hpp |    86 +
 .../pdalboost/boost/serialization/state_saver.hpp  |    96 +
 .../boost/serialization/static_warning.hpp         |   102 +
 vendor/pdalboost/boost/serialization/string.hpp    |    30 +
 .../boost/serialization/strong_typedef.hpp         |    46 +
 .../boost/serialization/throw_exception.hpp        |    44 +
 vendor/pdalboost/boost/serialization/tracking.hpp  |   118 +
 .../boost/serialization/tracking_enum.hpp          |    41 +
 vendor/pdalboost/boost/serialization/traits.hpp    |    65 +
 .../serialization/type_info_implementation.hpp     |    73 +
 vendor/pdalboost/boost/serialization/utility.hpp   |    56 +
 vendor/pdalboost/boost/serialization/version.hpp   |   107 +
 vendor/pdalboost/boost/serialization/void_cast.hpp |   298 +
 .../boost/serialization/void_cast_fwd.hpp          |    37 +
 vendor/pdalboost/boost/serialization/wrapper.hpp   |    60 +
 vendor/pdalboost/boost/shared_array.hpp            |    19 +
 vendor/pdalboost/boost/shared_ptr.hpp              |    19 +
 vendor/pdalboost/boost/smart_ptr.hpp               |    31 +
 .../boost/smart_ptr/allocate_shared_array.hpp      |   181 +
 vendor/pdalboost/boost/smart_ptr/bad_weak_ptr.hpp  |    59 +
 .../boost/smart_ptr/detail/array_allocator.hpp     |   318 +
 .../boost/smart_ptr/detail/array_count_impl.hpp    |    67 +
 .../boost/smart_ptr/detail/array_traits.hpp        |    60 +
 .../boost/smart_ptr/detail/array_utility.hpp       |   214 +
 .../boost/smart_ptr/detail/lightweight_mutex.hpp   |    42 +
 .../pdalboost/boost/smart_ptr/detail/lwm_nop.hpp   |    37 +
 .../boost/smart_ptr/detail/lwm_pthreads.hpp        |    87 +
 .../boost/smart_ptr/detail/lwm_win32_cs.hpp        |   119 +
 .../boost/smart_ptr/detail/operator_bool.hpp       |    64 +
 .../boost/smart_ptr/detail/quick_allocator.hpp     |   199 +
 .../boost/smart_ptr/detail/shared_count.hpp        |   709 ++
 .../boost/smart_ptr/detail/sp_convertible.hpp      |    92 +
 .../boost/smart_ptr/detail/sp_counted_base.hpp     |    93 +
 .../smart_ptr/detail/sp_counted_base_acc_ia64.hpp  |   151 +
 .../boost/smart_ptr/detail/sp_counted_base_aix.hpp |   143 +
 .../smart_ptr/detail/sp_counted_base_clang.hpp     |   140 +
 .../smart_ptr/detail/sp_counted_base_cw_ppc.hpp    |   171 +
 .../smart_ptr/detail/sp_counted_base_gcc_ia64.hpp  |   158 +
 .../smart_ptr/detail/sp_counted_base_gcc_mips.hpp  |   182 +
 .../smart_ptr/detail/sp_counted_base_gcc_ppc.hpp   |   182 +
 .../smart_ptr/detail/sp_counted_base_gcc_sparc.hpp |   167 +
 .../smart_ptr/detail/sp_counted_base_gcc_x86.hpp   |   174 +
 .../boost/smart_ptr/detail/sp_counted_base_nt.hpp  |   108 +
 .../boost/smart_ptr/detail/sp_counted_base_pt.hpp  |   137 +
 .../smart_ptr/detail/sp_counted_base_snc_ps3.hpp   |   162 +
 .../smart_ptr/detail/sp_counted_base_spin.hpp      |   132 +
 .../detail/sp_counted_base_std_atomic.hpp          |   137 +
 .../smart_ptr/detail/sp_counted_base_sync.hpp      |   156 +
 .../smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp |   151 +
 .../boost/smart_ptr/detail/sp_counted_base_w32.hpp |   131 +
 .../boost/smart_ptr/detail/sp_counted_impl.hpp     |   271 +
 .../smart_ptr/detail/sp_disable_deprecated.hpp     |    40 +
 .../boost/smart_ptr/detail/sp_forward.hpp          |    52 +
 .../boost/smart_ptr/detail/sp_has_sync.hpp         |    69 +
 .../boost/smart_ptr/detail/sp_if_array.hpp         |    34 +
 .../boost/smart_ptr/detail/sp_interlocked.hpp      |   163 +
 .../boost/smart_ptr/detail/sp_nullptr_t.hpp        |    45 +
 .../pdalboost/boost/smart_ptr/detail/spinlock.hpp  |    65 +
 .../boost/smart_ptr/detail/spinlock_gcc_arm.hpp    |   121 +
 .../boost/smart_ptr/detail/spinlock_nt.hpp         |    89 +
 .../boost/smart_ptr/detail/spinlock_pool.hpp       |    91 +
 .../boost/smart_ptr/detail/spinlock_pt.hpp         |    79 +
 .../boost/smart_ptr/detail/spinlock_std_atomic.hpp |    83 +
 .../boost/smart_ptr/detail/spinlock_sync.hpp       |    87 +
 .../boost/smart_ptr/detail/spinlock_w32.hpp        |   113 +
 .../pdalboost/boost/smart_ptr/detail/yield_k.hpp   |   177 +
 .../boost/smart_ptr/enable_shared_from_this.hpp    |    89 +
 vendor/pdalboost/boost/smart_ptr/intrusive_ptr.hpp |   336 +
 vendor/pdalboost/boost/smart_ptr/make_shared.hpp   |    22 +
 .../boost/smart_ptr/make_shared_array.hpp          |   158 +
 .../boost/smart_ptr/make_shared_object.hpp         |  1131 +++
 vendor/pdalboost/boost/smart_ptr/scoped_array.hpp  |   132 +
 vendor/pdalboost/boost/smart_ptr/scoped_ptr.hpp    |   167 +
 vendor/pdalboost/boost/smart_ptr/shared_array.hpp  |   292 +
 vendor/pdalboost/boost/smart_ptr/shared_ptr.hpp    |  1077 ++
 vendor/pdalboost/boost/smart_ptr/weak_ptr.hpp      |   253 +
 vendor/pdalboost/boost/static_assert.hpp           |   180 +
 vendor/pdalboost/boost/swap.hpp                    |    17 +
 vendor/pdalboost/boost/system/api_config.hpp       |    42 +
 vendor/pdalboost/boost/system/config.hpp           |    70 +
 vendor/pdalboost/boost/system/cygwin_error.hpp     |    56 +
 .../pdalboost/boost/system/detail/error_code.ipp   |   467 +
 .../system/detail/local_free_on_destruction.hpp    |    40 +
 vendor/pdalboost/boost/system/error_code.hpp       |   520 +
 vendor/pdalboost/boost/system/linux_error.hpp      |   110 +
 vendor/pdalboost/boost/system/system_error.hpp     |    84 +
 vendor/pdalboost/boost/system/windows_error.hpp    |   126 +
 vendor/pdalboost/boost/test/debug.hpp              |   138 +
 vendor/pdalboost/boost/test/debug_config.hpp       |    24 +
 vendor/pdalboost/boost/test/detail/config.hpp      |   127 +
 .../boost/test/detail/enable_warnings.hpp          |    36 +
 vendor/pdalboost/boost/test/detail/fwd_decl.hpp    |    45 +
 .../pdalboost/boost/test/detail/global_typedef.hpp |    93 +
 vendor/pdalboost/boost/test/detail/log_level.hpp   |    40 +
 vendor/pdalboost/boost/test/detail/pp_variadic.hpp |    49 +
 .../boost/test/detail/suppress_warnings.hpp        |    38 +
 .../boost/test/detail/throw_exception.hpp          |    72 +
 vendor/pdalboost/boost/test/detail/workaround.hpp  |    56 +
 vendor/pdalboost/boost/test/execution_monitor.hpp  |   518 +
 vendor/pdalboost/boost/test/framework.hpp          |   275 +
 .../boost/test/impl/compiler_log_formatter.ipp     |   290 +
 vendor/pdalboost/boost/test/impl/cpp_main.ipp      |   136 +
 vendor/pdalboost/boost/test/impl/debug.ipp         |   977 ++
 vendor/pdalboost/boost/test/impl/decorator.ipp     |   202 +
 .../boost/test/impl/execution_monitor.ipp          |  1438 +++
 vendor/pdalboost/boost/test/impl/framework.ipp     |  1295 +++
 .../boost/test/impl/plain_report_formatter.ipp     |   207 +
 .../pdalboost/boost/test/impl/progress_monitor.ipp |   185 +
 .../boost/test/impl/results_collector.ipp          |   276 +
 .../pdalboost/boost/test/impl/results_reporter.ipp |   197 +
 vendor/pdalboost/boost/test/impl/test_main.ipp     |    65 +
 vendor/pdalboost/boost/test/impl/test_tools.ipp    |   680 ++
 vendor/pdalboost/boost/test/impl/test_tree.ipp     |   460 +
 vendor/pdalboost/boost/test/impl/unit_test_log.ipp |   469 +
 .../pdalboost/boost/test/impl/unit_test_main.ipp   |   293 +
 .../boost/test/impl/unit_test_monitor.ipp          |    75 +
 .../boost/test/impl/unit_test_parameters.ipp       |   729 ++
 .../boost/test/impl/xml_log_formatter.ipp          |   223 +
 .../boost/test/impl/xml_report_formatter.ipp       |   111 +
 .../boost/test/included/prg_exec_monitor.hpp       |    25 +
 vendor/pdalboost/boost/test/minimal.hpp            |   156 +
 .../boost/test/output/compiler_log_formatter.hpp   |    72 +
 .../boost/test/output/plain_report_formatter.hpp   |    59 +
 .../boost/test/output/xml_log_formatter.hpp        |    72 +
 .../boost/test/output/xml_report_formatter.hpp     |    52 +
 vendor/pdalboost/boost/test/parameterized_test.hpp |   172 +
 vendor/pdalboost/boost/test/prg_exec_monitor.hpp   |    81 +
 vendor/pdalboost/boost/test/progress_monitor.hpp   |    66 +
 vendor/pdalboost/boost/test/results_collector.hpp  |   128 +
 vendor/pdalboost/boost/test/results_reporter.hpp   |   122 +
 vendor/pdalboost/boost/test/test_tools.hpp         |    68 +
 vendor/pdalboost/boost/test/tools/assertion.hpp    |   410 +
 .../boost/test/tools/assertion_result.hpp          |    90 +
 .../boost/test/tools/collection_comparison_op.hpp  |   378 +
 vendor/pdalboost/boost/test/tools/context.hpp      |    65 +
 .../boost/test/tools/cstring_comparison_op.hpp     |    91 +
 .../boost/test/tools/detail/bitwise_manip.hpp      |   123 +
 .../boost/test/tools/detail/expression_holder.hpp  |    70 +
 vendor/pdalboost/boost/test/tools/detail/fwd.hpp   |   121 +
 .../boost/test/tools/detail/indirections.hpp       |    94 +
 .../pdalboost/boost/test/tools/detail/it_pair.hpp  |    74 +
 .../test/tools/detail/lexicographic_manip.hpp      |    69 +
 .../boost/test/tools/detail/per_element_manip.hpp  |    69 +
 .../boost/test/tools/detail/print_helper.hpp       |   199 +
 .../boost/test/tools/detail/tolerance_manip.hpp    |   130 +
 .../boost/test/tools/floating_point_comparison.hpp |   315 +
 vendor/pdalboost/boost/test/tools/fpc_op.hpp       |   224 +
 .../pdalboost/boost/test/tools/fpc_tolerance.hpp   |   103 +
 vendor/pdalboost/boost/test/tools/interface.hpp    |   376 +
 vendor/pdalboost/boost/test/tools/old/impl.hpp     |   358 +
 .../pdalboost/boost/test/tools/old/interface.hpp   |   282 +
 .../boost/test/tools/output_test_stream.hpp        |    96 +
 .../boost/test/tree/auto_registration.hpp          |    53 +
 vendor/pdalboost/boost/test/tree/decorator.hpp     |   277 +
 vendor/pdalboost/boost/test/tree/fixture.hpp       |   116 +
 .../pdalboost/boost/test/tree/global_fixture.hpp   |    68 +
 vendor/pdalboost/boost/test/tree/observer.hpp      |    70 +
 .../boost/test/tree/test_case_counter.hpp          |    54 +
 .../boost/test/tree/test_case_template.hpp         |   144 +
 vendor/pdalboost/boost/test/tree/test_unit.hpp     |   275 +
 vendor/pdalboost/boost/test/tree/traverse.hpp      |    58 +
 vendor/pdalboost/boost/test/tree/visitor.hpp       |    52 +
 vendor/pdalboost/boost/test/unit_test.hpp          |    70 +
 vendor/pdalboost/boost/test/unit_test_log.hpp      |   172 +
 .../boost/test/unit_test_log_formatter.hpp         |   248 +
 vendor/pdalboost/boost/test/unit_test_monitor.hpp  |    60 +
 .../pdalboost/boost/test/unit_test_parameters.hpp  |   128 +
 vendor/pdalboost/boost/test/unit_test_suite.hpp    |   366 +
 vendor/pdalboost/boost/test/utils/algorithm.hpp    |   222 +
 vendor/pdalboost/boost/test/utils/assign_op.hpp    |    39 +
 .../test/utils/basic_cstring/basic_cstring.hpp     |   738 ++
 .../test/utils/basic_cstring/basic_cstring_fwd.hpp |    40 +
 .../test/utils/basic_cstring/bcs_char_traits.hpp   |   150 +
 .../boost/test/utils/basic_cstring/compare.hpp     |   147 +
 .../boost/test/utils/basic_cstring/io.hpp          |    73 +
 .../boost/test/utils/class_properties.hpp          |   195 +
 vendor/pdalboost/boost/test/utils/custom_manip.hpp |    61 +
 vendor/pdalboost/boost/test/utils/foreach.hpp      |   316 +
 vendor/pdalboost/boost/test/utils/is_cstring.hpp   |    58 +
 .../boost/test/utils/is_forward_iterable.hpp       |   166 +
 .../test/utils/iterator/input_iterator_facade.hpp  |   105 +
 .../boost/test/utils/iterator/token_iterator.hpp   |   417 +
 vendor/pdalboost/boost/test/utils/lazy_ostream.hpp |   128 +
 vendor/pdalboost/boost/test/utils/named_params.hpp |   388 +
 vendor/pdalboost/boost/test/utils/rtti.hpp         |    63 +
 .../boost/test/utils/runtime/argument.hpp          |   131 +
 .../boost/test/utils/runtime/argument_factory.hpp  |   242 +
 .../test/utils/runtime/cla/argv_traverser.hpp      |   105 +
 .../boost/test/utils/runtime/cla/parser.hpp        |   491 +
 .../boost/test/utils/runtime/env/fetch.hpp         |   108 +
 .../pdalboost/boost/test/utils/runtime/errors.hpp  |   195 +
 .../boost/test/utils/runtime/finalize.hpp          |    56 +
 vendor/pdalboost/boost/test/utils/runtime/fwd.hpp  |    45 +
 .../boost/test/utils/runtime/modifier.hpp          |   101 +
 .../boost/test/utils/runtime/parameter.hpp         |   472 +
 vendor/pdalboost/boost/test/utils/setcolor.hpp     |   126 +
 vendor/pdalboost/boost/test/utils/string_cast.hpp  |    69 +
 .../boost/test/utils/trivial_singleton.hpp         |    79 +
 .../boost/test/utils/wrap_stringstream.hpp         |   162 +
 vendor/pdalboost/boost/test/utils/xml_printer.hpp  |   143 +
 vendor/pdalboost/boost/throw_exception.hpp         |   102 +
 vendor/pdalboost/boost/timer.hpp                   |    72 +
 vendor/pdalboost/boost/timer/config.hpp            |    53 +
 vendor/pdalboost/boost/timer/timer.hpp             |   132 +
 vendor/pdalboost/boost/token_functions.hpp         |   651 ++
 vendor/pdalboost/boost/token_iterator.hpp          |   128 +
 vendor/pdalboost/boost/tokenizer.hpp               |    98 +
 .../pdalboost/boost/tuple/detail/tuple_basic.hpp   |   989 ++
 vendor/pdalboost/boost/tuple/tuple.hpp             |    67 +
 vendor/pdalboost/boost/type.hpp                    |    18 +
 vendor/pdalboost/boost/type_index.hpp              |   265 +
 .../pdalboost/boost/type_index/ctti_type_index.hpp |   179 +
 .../type_index/detail/compile_time_type_info.hpp   |   144 +
 .../type_index/detail/ctti_register_class.hpp      |    40 +
 .../boost/type_index/detail/stl_register_class.hpp |    40 +
 .../pdalboost/boost/type_index/stl_type_index.hpp  |   272 +
 .../boost/type_index/type_index_facade.hpp         |   300 +
 vendor/pdalboost/boost/type_traits/add_const.hpp   |    46 +
 vendor/pdalboost/boost/type_traits/add_cv.hpp      |    41 +
 .../boost/type_traits/add_lvalue_reference.hpp     |    27 +
 vendor/pdalboost/boost/type_traits/add_pointer.hpp |    61 +
 .../pdalboost/boost/type_traits/add_reference.hpp  |    59 +
 .../boost/type_traits/add_rvalue_reference.hpp     |    64 +
 .../pdalboost/boost/type_traits/add_volatile.hpp   |    40 +
 .../boost/type_traits/aligned_storage.hpp          |   138 +
 .../pdalboost/boost/type_traits/alignment_of.hpp   |   119 +
 vendor/pdalboost/boost/type_traits/common_type.hpp |   144 +
 .../boost/type_traits/composite_traits.hpp         |    29 +
 vendor/pdalboost/boost/type_traits/conditional.hpp |    20 +
 .../boost/type_traits/conversion_traits.hpp        |    17 +
 vendor/pdalboost/boost/type_traits/copy_cv.hpp     |    34 +
 vendor/pdalboost/boost/type_traits/cv_traits.hpp   |    24 +
 vendor/pdalboost/boost/type_traits/decay.hpp       |    43 +
 vendor/pdalboost/boost/type_traits/declval.hpp     |    44 +
 .../boost/type_traits/detail/bool_trait_def.hpp    |   179 +
 .../boost/type_traits/detail/bool_trait_undef.hpp  |    28 +
 .../type_traits/detail/common_arithmetic_type.hpp  |   212 +
 .../boost/type_traits/detail/common_type_impl.hpp  |   107 +
 .../detail/composite_member_pointer_type.hpp       |   113 +
 .../type_traits/detail/composite_pointer_type.hpp  |   153 +
 .../pdalboost/boost/type_traits/detail/config.hpp  |    72 +
 .../type_traits/detail/has_binary_operator.hpp     |   222 +
 .../type_traits/detail/is_function_ptr_helper.hpp  |   176 +
 .../type_traits/detail/is_function_ptr_tester.hpp  |   449 +
 .../type_traits/detail/is_mem_fun_pointer_impl.hpp |   723 ++
 .../detail/is_mem_fun_pointer_tester.hpp           |  1800 ++++
 .../boost/type_traits/detail/mp_defer.hpp          |    56 +
 .../type_traits/detail/template_arity_spec.hpp     |    16 +
 .../boost/type_traits/detail/yes_no_type.hpp       |    26 +
 .../boost/type_traits/function_traits.hpp          |   174 +
 .../pdalboost/boost/type_traits/has_left_shift.hpp |    49 +
 vendor/pdalboost/boost/type_traits/has_minus.hpp   |    60 +
 .../boost/type_traits/has_minus_assign.hpp         |    65 +
 .../boost/type_traits/has_new_operator.hpp         |   147 +
 .../boost/type_traits/has_nothrow_assign.hpp       |    83 +
 .../boost/type_traits/has_nothrow_constructor.hpp  |    72 +
 .../boost/type_traits/has_nothrow_copy.hpp         |    82 +
 vendor/pdalboost/boost/type_traits/has_plus.hpp    |    54 +
 .../boost/type_traits/has_plus_assign.hpp          |    66 +
 .../boost/type_traits/has_right_shift.hpp          |    49 +
 .../boost/type_traits/has_trivial_assign.hpp       |    51 +
 .../boost/type_traits/has_trivial_constructor.hpp  |    57 +
 .../boost/type_traits/has_trivial_copy.hpp         |    62 +
 .../boost/type_traits/has_trivial_destructor.hpp   |    48 +
 .../boost/type_traits/has_trivial_move_assign.hpp  |    72 +
 .../type_traits/has_trivial_move_constructor.hpp   |    77 +
 .../boost/type_traits/integral_constant.hpp        |   106 +
 .../boost/type_traits/integral_promotion.hpp       |   181 +
 vendor/pdalboost/boost/type_traits/intrinsics.hpp  |   380 +
 vendor/pdalboost/boost/type_traits/is_abstract.hpp |   149 +
 .../pdalboost/boost/type_traits/is_arithmetic.hpp  |    22 +
 vendor/pdalboost/boost/type_traits/is_array.hpp    |    43 +
 .../pdalboost/boost/type_traits/is_assignable.hpp  |    76 +
 .../boost/type_traits/is_base_and_derived.hpp      |   244 +
 vendor/pdalboost/boost/type_traits/is_base_of.hpp  |    39 +
 vendor/pdalboost/boost/type_traits/is_class.hpp    |   114 +
 vendor/pdalboost/boost/type_traits/is_const.hpp    |    46 +
 .../boost/type_traits/is_constructible.hpp         |    80 +
 .../pdalboost/boost/type_traits/is_convertible.hpp |   488 +
 .../boost/type_traits/is_copy_constructible.hpp    |   187 +
 .../boost/type_traits/is_default_constructible.hpp |    64 +
 .../boost/type_traits/is_destructible.hpp          |    60 +
 vendor/pdalboost/boost/type_traits/is_empty.hpp    |   120 +
 vendor/pdalboost/boost/type_traits/is_enum.hpp     |   166 +
 vendor/pdalboost/boost/type_traits/is_final.hpp    |    30 +
 vendor/pdalboost/boost/type_traits/is_float.hpp    |    20 +
 .../boost/type_traits/is_floating_point.hpp        |    30 +
 vendor/pdalboost/boost/type_traits/is_function.hpp |   102 +
 .../pdalboost/boost/type_traits/is_fundamental.hpp |    26 +
 vendor/pdalboost/boost/type_traits/is_integral.hpp |    89 +
 .../boost/type_traits/is_lvalue_reference.hpp      |    50 +
 .../type_traits/is_member_function_pointer.hpp     |   120 +
 .../boost/type_traits/is_member_pointer.hpp        |    45 +
 .../type_traits/is_nothrow_move_assignable.hpp     |    81 +
 .../type_traits/is_nothrow_move_constructible.hpp  |    86 +
 vendor/pdalboost/boost/type_traits/is_pod.hpp      |    58 +
 vendor/pdalboost/boost/type_traits/is_pointer.hpp  |    47 +
 .../pdalboost/boost/type_traits/is_polymorphic.hpp |   122 +
 .../pdalboost/boost/type_traits/is_reference.hpp   |    30 +
 .../boost/type_traits/is_rvalue_reference.hpp      |    25 +
 vendor/pdalboost/boost/type_traits/is_same.hpp     |    41 +
 vendor/pdalboost/boost/type_traits/is_scalar.hpp   |    27 +
 vendor/pdalboost/boost/type_traits/is_signed.hpp   |   163 +
 vendor/pdalboost/boost/type_traits/is_union.hpp    |    31 +
 vendor/pdalboost/boost/type_traits/is_unsigned.hpp |   163 +
 .../boost/type_traits/is_virtual_base_of.hpp       |   105 +
 vendor/pdalboost/boost/type_traits/is_void.hpp     |    26 +
 vendor/pdalboost/boost/type_traits/is_volatile.hpp |    45 +
 vendor/pdalboost/boost/type_traits/make_signed.hpp |   131 +
 .../pdalboost/boost/type_traits/make_unsigned.hpp  |   130 +
 .../boost/type_traits/remove_all_extents.hpp       |    35 +
 .../pdalboost/boost/type_traits/remove_bounds.hpp  |    21 +
 .../pdalboost/boost/type_traits/remove_const.hpp   |    33 +
 vendor/pdalboost/boost/type_traits/remove_cv.hpp   |    40 +
 .../pdalboost/boost/type_traits/remove_extent.hpp  |    35 +
 .../pdalboost/boost/type_traits/remove_pointer.hpp |    77 +
 .../boost/type_traits/remove_reference.hpp         |    54 +
 .../boost/type_traits/remove_volatile.hpp          |    34 +
 .../pdalboost/boost/type_traits/type_identity.hpp  |    22 +
 .../boost/type_traits/type_with_alignment.hpp      |   261 +
 vendor/pdalboost/boost/utility.hpp                 |    21 +
 vendor/pdalboost/boost/utility/addressof.hpp       |    17 +
 .../pdalboost/boost/utility/base_from_member.hpp   |   171 +
 vendor/pdalboost/boost/utility/binary.hpp          |   708 ++
 .../pdalboost/boost/utility/compare_pointees.hpp   |    68 +
 vendor/pdalboost/boost/utility/declval.hpp         |    13 +
 .../boost/utility/detail/result_of_iterate.hpp     |   221 +
 vendor/pdalboost/boost/utility/enable_if.hpp       |    17 +
 vendor/pdalboost/boost/utility/identity_type.hpp   |    46 +
 vendor/pdalboost/boost/utility/result_of.hpp       |   210 +
 vendor/pdalboost/boost/utility/swap.hpp            |    17 +
 vendor/pdalboost/boost/utility/value_init.hpp      |   281 +
 vendor/pdalboost/boost/version.hpp                 |    32 +
 vendor/pdalboost/boost/visit_each.hpp              |    27 +
 vendor/pdalboost/boost/weak_ptr.hpp                |    18 +
 vendor/pdalboost/doc/src/minimal.css               |    23 +
 vendor/pdalboost/libs/atomic/src/lockpool.cpp      |   151 +
 vendor/pdalboost/libs/config/test/config_info.cpp  |  1164 +++
 vendor/pdalboost/libs/date_time/src/date_time.doc  |    72 +
 .../date_time/src/gregorian/date_generators.cpp    |    38 +
 .../libs/date_time/src/gregorian/greg_month.cpp    |   173 +
 .../libs/date_time/src/gregorian/greg_names.hpp    |    43 +
 .../libs/date_time/src/gregorian/greg_weekday.cpp  |    50 +
 .../date_time/src/gregorian/gregorian_types.cpp    |    62 +
 .../date_time/src/posix_time/posix_time_types.cpp  |    35 +
 .../src/clone_current_exception_non_intrusive.cpp  |   320 +
 vendor/pdalboost/libs/filesystem/bug/Jamfile.v2    |    19 +
 vendor/pdalboost/libs/filesystem/bug/bug.cpp       |    19 +
 vendor/pdalboost/libs/filesystem/bug/index.html    |    13 +
 vendor/pdalboost/libs/filesystem/doc/Jamfile.v2    |    19 +
 .../filesystem/doc/POSIX_filename_encoding.txt     |    55 +
 .../libs/filesystem/doc/build_tutorial.bat         |     7 +
 .../pdalboost/libs/filesystem/doc/deprecated.html  |   387 +
 vendor/pdalboost/libs/filesystem/doc/design.htm    |   353 +
 vendor/pdalboost/libs/filesystem/doc/do_list.html  |   146 +
 vendor/pdalboost/libs/filesystem/doc/faq.htm       |   148 +
 vendor/pdalboost/libs/filesystem/doc/index.htm     |   456 +
 .../libs/filesystem/doc/issue_reporting.html       |   224 +
 .../pdalboost/libs/filesystem/doc/path_table.cpp   |   260 +
 .../pdalboost/libs/filesystem/doc/path_table.txt   |    50 +
 .../libs/filesystem/doc/portability_guide.htm      |   242 +
 vendor/pdalboost/libs/filesystem/doc/publish.bat   |    21 +
 .../pdalboost/libs/filesystem/doc/reference.html   |  4227 ++++++++
 .../libs/filesystem/doc/relative_proposal.html     |   510 +
 .../libs/filesystem/doc/release_history.html       |   401 +
 vendor/pdalboost/libs/filesystem/doc/styles.css    |    19 +
 vendor/pdalboost/libs/filesystem/doc/tickets.html  |    52 +
 vendor/pdalboost/libs/filesystem/doc/tutorial.html |  1330 +++
 vendor/pdalboost/libs/filesystem/doc/v3.html       |   152 +
 .../pdalboost/libs/filesystem/doc/v3_design.html   |   199 +
 .../pdalboost/libs/filesystem/example/Jamfile.v2   |    27 +
 .../directory_symlink_parent_resolution.cpp        |    41 +
 .../libs/filesystem/example/error_demo.cpp         |   185 +
 .../libs/filesystem/example/file_size.cpp          |    44 +
 .../libs/filesystem/example/file_status.cpp        |   117 +
 .../pdalboost/libs/filesystem/example/mbcopy.cpp   |    90 +
 .../pdalboost/libs/filesystem/example/mbpath.cpp   |    80 +
 .../pdalboost/libs/filesystem/example/mbpath.hpp   |    44 +
 .../libs/filesystem/example/msvc/common.props      |    15 +
 .../libs/filesystem/example/path_info.cpp          |    82 +
 .../libs/filesystem/example/simple_ls.cpp          |    91 +
 vendor/pdalboost/libs/filesystem/example/stems.cpp |    31 +
 vendor/pdalboost/libs/filesystem/example/tchar.cpp |    39 +
 .../libs/filesystem/example/test/Jamfile.v2        |    31 +
 .../libs/filesystem/example/test/build.bat         |     7 +
 .../libs/filesystem/example/test/build.sh          |     8 +
 .../libs/filesystem/example/test/setup.bat         |    13 +
 .../libs/filesystem/example/test/setup.sh          |    19 +
 vendor/pdalboost/libs/filesystem/example/tut0.cpp  |    23 +
 vendor/pdalboost/libs/filesystem/example/tut1.cpp  |    23 +
 vendor/pdalboost/libs/filesystem/example/tut2.cpp  |    40 +
 vendor/pdalboost/libs/filesystem/example/tut3.cpp  |    52 +
 vendor/pdalboost/libs/filesystem/example/tut4.cpp  |    61 +
 vendor/pdalboost/libs/filesystem/example/tut5.cpp  |    52 +
 vendor/pdalboost/libs/filesystem/example/tut6a.cpp |    48 +
 vendor/pdalboost/libs/filesystem/example/tut6b.cpp |    50 +
 vendor/pdalboost/libs/filesystem/example/tut6c.cpp |    40 +
 vendor/pdalboost/libs/filesystem/index.html        |    13 +
 .../pdalboost/libs/filesystem/meta/libraries.json  |    14 +
 .../libs/filesystem/src/codecvt_error_category.cpp |    84 +
 .../pdalboost/libs/filesystem/src/operations.cpp   |  2341 +++++
 vendor/pdalboost/libs/filesystem/src/path.cpp      |   964 ++
 .../pdalboost/libs/filesystem/src/path_traits.cpp  |   200 +
 .../pdalboost/libs/filesystem/src/portability.cpp  |   119 +
 .../pdalboost/libs/filesystem/src/unique_path.cpp  |   161 +
 .../libs/filesystem/src/utf8_codecvt_facet.cpp     |    27 +
 .../libs/filesystem/src/windows_file_codecvt.cpp   |    75 +
 .../libs/filesystem/src/windows_file_codecvt.hpp   |    56 +
 vendor/pdalboost/libs/filesystem/test/Jamfile.v2   |    36 +
 .../libs/filesystem/test/convenience_test.cpp      |   177 +
 .../libs/filesystem/test/deprecated_test.cpp       |   250 +
 .../libs/filesystem/test/design_use_cases.cpp      |    81 +
 .../pdalboost/libs/filesystem/test/equivalent.cpp  |    39 +
 .../libs/filesystem/test/fstream_test.cpp          |   169 +
 .../libs/filesystem/test/issues/10038.cpp          |     8 +
 .../libs/filesystem/test/issues/10205.cpp          |    17 +
 .../libs/filesystem/test/issues/10485.cpp          |    14 +
 .../libs/filesystem/test/issues/10641.cpp          |    20 +
 .../filesystem/test/issues/11166-remove-race.cpp   |    38 +
 ...filtered-recursive_directory_iterator-range.cpp |    25 +
 .../libs/filesystem/test/issues/3332/test.cpp      |    37 +
 .../libs/filesystem/test/issues/4329.-basename.cpp |    20 +
 .../test/issues/5300-temp-dir-path-130.cpp         |     0
 .../test/issues/6638-global-init-fails-3.cpp       |    36 +
 .../pdalboost/libs/filesystem/test/issues/8930.cpp |     7 +
 ...9054_static_const_codecvt_segfault_pre_main.cpp |    10 +
 .../pdalboost/libs/filesystem/test/issues/9219.cpp |    40 +
 .../libs/filesystem/test/issues/Jamfile.v2         |    40 +
 .../libs/filesystem/test/issues/boost-no-inspect   |     0
 .../copy_file-compilation-error-2015-05-04.cpp     |    14 +
 .../issues/fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp   |    38 +
 .../filesystem/test/issues/hello_filesystem.cpp    |    39 +
 .../libs/filesystem/test/issues/readme.txt         |     9 +
 .../test/issues/recurse_dir_iter_5403.cpp          |   132 +
 .../filesystem/test/large_file_support_test.cpp    |    42 +
 .../pdalboost/libs/filesystem/test/locale_info.cpp |    88 +
 .../libs/filesystem/test/long_path_test.cpp        |    59 +
 .../libs/filesystem/test/macro_default_test.cpp    |    36 +
 .../libs/filesystem/test/msvc/boost-no-inspect     |     0
 .../libs/filesystem/test/msvc/common.props         |    18 +
 .../pdalboost/libs/filesystem/test/odr1_test.cpp   |    24 +
 .../pdalboost/libs/filesystem/test/odr2_test.cpp   |    18 +
 .../libs/filesystem/test/operations_test.cpp       |  2223 ++++
 .../libs/filesystem/test/operations_unit_test.cpp  |   386 +
 .../pdalboost/libs/filesystem/test/path_test.cpp   |  2026 ++++
 .../pdalboost/libs/filesystem/test/path_times.cpp  |   103 +
 .../libs/filesystem/test/path_unit_test.cpp        |  1177 +++
 .../libs/filesystem/test/relative_test.cpp         |   111 +
 .../pdalboost/libs/filesystem/test/sample_test.cpp |    63 +
 .../libs/filesystem/test/test_codecvt.hpp          |    79 +
 .../libs/filesystem/test/windows_attributes.cpp    |   108 +
 vendor/pdalboost/libs/filesystem/tools/backup.bat  |    27 +
 vendor/pdalboost/libs/filesystem/tools/exclude.txt |    14 +
 vendor/pdalboost/libs/filesystem/tools/publish.bat |     8 +
 .../libs/iostreams/doc/acknowledgments.html        |    91 +
 .../pdalboost/libs/iostreams/doc/bibliography.html |   136 +
 .../libs/iostreams/doc/classes/aggregate.html      |   113 +
 .../libs/iostreams/doc/classes/array.html          |   218 +
 .../libs/iostreams/doc/classes/back_inserter.html  |   105 +
 .../libs/iostreams/doc/classes/bzip2.html          |   324 +
 .../libs/iostreams/doc/classes/chain.html          |   389 +
 .../libs/iostreams/doc/classes/char_traits.html    |   109 +
 .../libs/iostreams/doc/classes/classes.html        |   252 +
 .../libs/iostreams/doc/classes/code_converter.html |   203 +
 .../libs/iostreams/doc/classes/counter.html        |   157 +
 .../libs/iostreams/doc/classes/device.html         |   127 +
 .../pdalboost/libs/iostreams/doc/classes/file.html |   242 +
 .../iostreams/doc/classes/file_descriptor.html     |   529 +
 .../libs/iostreams/doc/classes/filter.html         |   182 +
 .../iostreams/doc/classes/filtering_stream.html    |   430 +
 .../iostreams/doc/classes/filtering_streambuf.html |   426 +
 .../libs/iostreams/doc/classes/grep_filter.html    |   154 +
 .../pdalboost/libs/iostreams/doc/classes/gzip.html |   368 +
 .../libs/iostreams/doc/classes/line_filter.html    |   128 +
 .../libs/iostreams/doc/classes/mapped_file.html    |   680 ++
 .../pdalboost/libs/iostreams/doc/classes/mode.html |   105 +
 .../libs/iostreams/doc/classes/newline_filter.html |   311 +
 .../pdalboost/libs/iostreams/doc/classes/null.html |   273 +
 .../libs/iostreams/doc/classes/regex_filter.html   |   246 +
 .../libs/iostreams/doc/classes/stdio_filter.html   |   101 +
 .../iostreams/doc/classes/symmetric_filter.html    |   144 +
 .../pdalboost/libs/iostreams/doc/classes/zlib.html |   402 +
 .../doc/concepts/bidirectional_device.html         |   160 +
 .../doc/concepts/bidirectional_filter.html         |   154 +
 .../libs/iostreams/doc/concepts/blocking.html      |    64 +
 .../libs/iostreams/doc/concepts/closable.html      |   153 +
 .../libs/iostreams/doc/concepts/concepts.html      |    70 +
 .../libs/iostreams/doc/concepts/device.html        |   259 +
 .../libs/iostreams/doc/concepts/direct.html        |    63 +
 .../iostreams/doc/concepts/dual_use_filter.html    |    74 +
 .../libs/iostreams/doc/concepts/filter.html        |   270 +
 .../libs/iostreams/doc/concepts/flushable.html     |    99 +
 .../libs/iostreams/doc/concepts/input_filter.html  |   254 +
 .../libs/iostreams/doc/concepts/localizable.html   |    72 +
 .../iostreams/doc/concepts/multi_character.html    |    59 +
 .../iostreams/doc/concepts/optimally_buffered.html |    65 +
 .../libs/iostreams/doc/concepts/output_filter.html |   232 +
 .../libs/iostreams/doc/concepts/peekable.html      |    88 +
 .../libs/iostreams/doc/concepts/pipable.html       |    92 +
 .../iostreams/doc/concepts/seekable_device.html    |   183 +
 .../iostreams/doc/concepts/seekable_filter.html    |   176 +
 .../libs/iostreams/doc/concepts/sink.html          |   152 +
 .../libs/iostreams/doc/concepts/source.html        |   153 +
 .../iostreams/doc/concepts/symmetric_filter.html   |   105 +
 vendor/pdalboost/libs/iostreams/doc/faq.html       |   137 +
 .../libs/iostreams/doc/functions/close.html        |   288 +
 .../libs/iostreams/doc/functions/combine.html      |    61 +
 .../libs/iostreams/doc/functions/compose.html      |   134 +
 .../libs/iostreams/doc/functions/copy.html         |    63 +
 .../libs/iostreams/doc/functions/filter_test.html  |   129 +
 .../libs/iostreams/doc/functions/flush.html        |   147 +
 .../libs/iostreams/doc/functions/functions.html    |    58 +
 .../libs/iostreams/doc/functions/get.html          |   149 +
 .../libs/iostreams/doc/functions/imbue.html        |    94 +
 .../libs/iostreams/doc/functions/invert.html       |   136 +
 .../doc/functions/optimal_buffer_size.html         |    95 +
 .../libs/iostreams/doc/functions/positioning.html  |    92 +
 .../libs/iostreams/doc/functions/put.html          |   140 +
 .../libs/iostreams/doc/functions/putback.html      |   103 +
 .../libs/iostreams/doc/functions/read.html         |   202 +
 .../libs/iostreams/doc/functions/restrict.html     |   168 +
 .../libs/iostreams/doc/functions/seek.html         |   159 +
 .../libs/iostreams/doc/functions/slice.html        |    35 +
 .../libs/iostreams/doc/functions/tee.html          |   194 +
 .../libs/iostreams/doc/functions/write.html        |   203 +
 .../iostreams/doc/graphics/bidirectional_chain.gif |   Bin 0 -> 14230 bytes
 .../iostreams/doc/graphics/important_modes.gif     |   Bin 0 -> 2222 bytes
 .../libs/iostreams/doc/graphics/input_chain.gif    |   Bin 0 -> 12057 bytes
 .../doc/graphics/key_bidirectional_seq.gif         |   Bin 0 -> 374 bytes
 .../libs/iostreams/doc/graphics/key_important.gif  |   Bin 0 -> 297 bytes
 .../libs/iostreams/doc/graphics/key_input_seq.gif  |   Bin 0 -> 371 bytes
 .../libs/iostreams/doc/graphics/key_output_seq.gif |   Bin 0 -> 310 bytes
 .../libs/iostreams/doc/graphics/key_read_head.gif  |   Bin 0 -> 377 bytes
 .../iostreams/doc/graphics/key_read_write_head.gif |   Bin 0 -> 388 bytes
 .../libs/iostreams/doc/graphics/key_write_head.gif |   Bin 0 -> 377 bytes
 .../libs/iostreams/doc/graphics/modes.gif          |   Bin 0 -> 12580 bytes
 .../libs/iostreams/doc/graphics/output_chain.gif   |   Bin 0 -> 11684 bytes
 .../libs/iostreams/doc/graphics/seekable_chain.gif |   Bin 0 -> 11814 bytes
 .../libs/iostreams/doc/guide/asynchronous.html     |    80 +
 .../libs/iostreams/doc/guide/buffering.html        |    47 +
 .../libs/iostreams/doc/guide/code_conversion.html  |    51 +
 .../libs/iostreams/doc/guide/concepts.html         |   136 +
 .../libs/iostreams/doc/guide/exceptions.html       |   156 +
 .../iostreams/doc/guide/filtering_streams.html     |    55 +
 .../libs/iostreams/doc/guide/generic_streams.html  |   530 +
 .../pdalboost/libs/iostreams/doc/guide/guide.html  |    44 +
 .../libs/iostreams/doc/guide/lifetimes.html        |    47 +
 .../pdalboost/libs/iostreams/doc/guide/modes.html  |   242 +
 .../libs/iostreams/doc/guide/pipelines.html        |   142 +
 .../libs/iostreams/doc/guide/text_processing.html  |    57 +
 .../pdalboost/libs/iostreams/doc/guide/traits.html |   302 +
 .../pdalboost/libs/iostreams/doc/guide/views.html  |    51 +
 vendor/pdalboost/libs/iostreams/doc/home.html      |   129 +
 vendor/pdalboost/libs/iostreams/doc/index.html     |    25 +
 .../pdalboost/libs/iostreams/doc/installation.html |   181 +
 .../libs/iostreams/doc/macros/buffer_sizes.html    |    60 +
 .../libs/iostreams/doc/macros/macros.html          |    53 +
 .../libs/iostreams/doc/macros/workarounds.html     |   207 +
 vendor/pdalboost/libs/iostreams/doc/menu.html      |   370 +
 .../pdalboost/libs/iostreams/doc/portability.html  |    32 +
 .../libs/iostreams/doc/quick_reference.html        |   423 +
 vendor/pdalboost/libs/iostreams/doc/rationale.html |   161 +
 vendor/pdalboost/libs/iostreams/doc/reference.html |    40 +
 .../libs/iostreams/doc/release_notes.html          |   294 +
 .../pdalboost/libs/iostreams/doc/theme/boost.png   |   Bin 0 -> 7512 bytes
 .../libs/iostreams/doc/theme/boost_small.png       |   Bin 0 -> 7512 bytes
 .../libs/iostreams/doc/theme/iostreams.css         |   220 +
 .../pdalboost/libs/iostreams/doc/theme/wedge.gif   |   Bin 0 -> 152 bytes
 vendor/pdalboost/libs/iostreams/doc/tree/tree.css  |    34 +
 vendor/pdalboost/libs/iostreams/doc/tree/tree.js   |   428 +
 .../iostreams/doc/tutorial/container_device.html   |   236 +
 .../iostreams/doc/tutorial/container_sink.html     |   190 +
 .../iostreams/doc/tutorial/container_source.html   |   183 +
 .../iostreams/doc/tutorial/dictionary_filters.html |   319 +
 .../iostreams/doc/tutorial/dual_use_filters.html   |   100 +
 .../libs/iostreams/doc/tutorial/filter_usage.html  |   110 +
 .../doc/tutorial/finite_state_filters.html         |   184 +
 .../doc/tutorial/line_wrapping_filters.html        |   264 +
 .../iostreams/doc/tutorial/multichar_filters.html  |   274 +
 .../doc/tutorial/shell_comments_filters.html       |   308 +
 .../doc/tutorial/tab_expanding_filters.html        |   280 +
 .../libs/iostreams/doc/tutorial/tutorial.html      |    54 +
 .../iostreams/doc/tutorial/unix2dos_filters.html   |   230 +
 .../iostreams/doc/tutorial/writing_devices.html    |    85 +
 .../iostreams/doc/tutorial/writing_filters.html    |    91 +
 .../example/boost_back_inserter_example.cpp        |    24 +
 .../libs/iostreams/example/container_device.hpp    |   155 +
 .../iostreams/example/container_device_example.cpp |    30 +
 .../iostreams/example/container_sink_example.cpp   |    26 +
 .../iostreams/example/container_source_example.cpp |    26 +
 .../libs/iostreams/example/dictionary_filter.hpp   |   221 +
 .../libs/iostreams/example/finite_state_filter.hpp |   365 +
 .../iostreams/example/iterator_range_example.cpp   |    24 +
 .../iostreams/example/line_wrapping_filter.hpp     |   131 +
 .../iostreams/example/shell_comments_filter.hpp    |   222 +
 .../example/std_back_inserter_example.cpp          |    24 +
 .../iostreams/example/tab_expanding_filter.hpp     |   155 +
 .../libs/iostreams/example/unix2dos_filter.hpp     |    99 +
 vendor/pdalboost/libs/iostreams/index.html         |    14 +
 .../pdalboost/libs/iostreams/meta/libraries.json   |    15 +
 vendor/pdalboost/libs/iostreams/src/bzip2.cpp      |   173 +
 .../libs/iostreams/src/file_descriptor.cpp         |   601 ++
 vendor/pdalboost/libs/iostreams/src/gzip.cpp       |   174 +
 .../pdalboost/libs/iostreams/src/mapped_file.cpp   |   496 +
 vendor/pdalboost/libs/iostreams/src/zlib.cpp       |   193 +
 vendor/pdalboost/libs/iostreams/test/Jamfile.v2    |   150 +
 .../pdalboost/libs/iostreams/test/array_test.cpp   |    99 +
 .../libs/iostreams/test/auto_close_test.cpp        |   184 +
 .../libs/iostreams/test/bool_trait_test.cpp        |   252 +
 .../libs/iostreams/test/buffer_size_test.cpp       |    82 +
 .../pdalboost/libs/iostreams/test/bzip2_test.cpp   |    96 +
 .../pdalboost/libs/iostreams/test/close_test.cpp   |   651 ++
 .../libs/iostreams/test/code_converter_test.cpp    |   387 +
 .../pdalboost/libs/iostreams/test/combine_test.cpp |   227 +
 .../libs/iostreams/test/component_access_test.cpp  |   173 +
 .../pdalboost/libs/iostreams/test/compose_test.cpp |   504 +
 vendor/pdalboost/libs/iostreams/test/copy_test.cpp |   172 +
 .../pdalboost/libs/iostreams/test/counter_test.cpp |    98 +
 .../test/deprecated_file_descriptor_test.cpp       |   243 +
 .../libs/iostreams/test/detail/closable.hpp        |   343 +
 .../libs/iostreams/test/detail/constants.hpp       |    67 +
 .../libs/iostreams/test/detail/file_handle.hpp     |   108 +
 .../libs/iostreams/test/detail/filters.hpp         |   186 +
 .../iostreams/test/detail/null_padded_codecvt.hpp  |   275 +
 .../iostreams/test/detail/operation_sequence.hpp   |   224 +
 .../libs/iostreams/test/detail/sequence.hpp        |   274 +
 .../libs/iostreams/test/detail/temp_file.hpp       |    92 +
 .../iostreams/test/detail/utf8_codecvt_facet.cpp   |   371 +
 .../iostreams/test/detail/utf8_codecvt_facet.hpp   |   200 +
 .../libs/iostreams/test/detail/verification.hpp    |   316 +
 .../libs/iostreams/test/direct_adapter_test.cpp    |   111 +
 .../pdalboost/libs/iostreams/test/example_test.cpp |   461 +
 .../pdalboost/libs/iostreams/test/execute_test.cpp |   660 ++
 .../libs/iostreams/test/file_descriptor_test.cpp   |   642 ++
 vendor/pdalboost/libs/iostreams/test/file_test.cpp |    63 +
 .../pdalboost/libs/iostreams/test/filter_test.cpp  |    98 +
 .../iostreams/test/filtering_stream_flush_test.hpp |    36 +
 .../libs/iostreams/test/filtering_stream_test.cpp  |    52 +
 .../iostreams/test/finite_state_filter_test.cpp    |   182 +
 .../pdalboost/libs/iostreams/test/flush_test.cpp   |   145 +
 vendor/pdalboost/libs/iostreams/test/grep_test.cpp |   282 +
 vendor/pdalboost/libs/iostreams/test/gzip_test.cpp |   162 +
 .../pdalboost/libs/iostreams/test/invert_test.cpp  |    70 +
 .../libs/iostreams/test/large_file_test.cpp        |   446 +
 .../libs/iostreams/test/line_filter_test.cpp       |    99 +
 .../libs/iostreams/test/mapped_file_test.cpp       |   328 +
 .../pdalboost/libs/iostreams/test/newline_test.cpp |   486 +
 vendor/pdalboost/libs/iostreams/test/null_test.cpp |    44 +
 .../iostreams/test/operation_sequence_test.cpp     |   268 +
 vendor/pdalboost/libs/iostreams/test/path_test.cpp |    25 +
 .../libs/iostreams/test/pipeline_test.cpp          |    90 +
 .../pdalboost/libs/iostreams/test/putback_test.hpp |   167 +
 .../libs/iostreams/test/read_bidir_filter_test.hpp |   131 +
 .../iostreams/test/read_bidir_streambuf_test.hpp   |    77 +
 .../libs/iostreams/test/read_bidir_test.hpp        |    85 +
 .../libs/iostreams/test/read_input_filter_test.hpp |   105 +
 .../iostreams/test/read_input_istream_test.hpp     |    76 +
 .../libs/iostreams/test/read_input_seq_test.hpp    |    70 +
 .../libs/iostreams/test/read_input_test.hpp        |    65 +
 .../libs/iostreams/test/read_seekable_seq_test.hpp |    71 +
 .../libs/iostreams/test/read_seekable_test.hpp     |    69 +
 .../libs/iostreams/test/regex_filter_test.cpp      |   329 +
 .../libs/iostreams/test/restrict_test.cpp          |   690 ++
 vendor/pdalboost/libs/iostreams/test/seek_test.hpp |    51 +
 .../libs/iostreams/test/seekable_file_test.cpp     |    56 +
 .../libs/iostreams/test/seekable_filter_test.cpp   |    95 +
 .../libs/iostreams/test/sequence_test.cpp          |    24 +
 .../pdalboost/libs/iostreams/test/slice_test.cpp   |    17 +
 .../libs/iostreams/test/stdio_filter_test.cpp      |   144 +
 .../iostreams/test/stream_offset_32bit_test.cpp    |    51 +
 .../iostreams/test/stream_offset_64bit_test.cpp    |    85 +
 .../libs/iostreams/test/stream_state_test.cpp      |   161 +
 .../libs/iostreams/test/symmetric_filter_test.cpp  |   182 +
 vendor/pdalboost/libs/iostreams/test/tee_test.cpp  |   426 +
 .../libs/iostreams/test/wide_stream_test.cpp       |   145 +
 .../libs/iostreams/test/windows_pipe_test.cpp      |    63 +
 .../iostreams/test/write_bidir_filter_test.hpp     |   134 +
 .../iostreams/test/write_bidir_streambuf_test.hpp  |    87 +
 .../libs/iostreams/test/write_bidir_test.hpp       |    89 +
 .../iostreams/test/write_output_filter_test.hpp    |   114 +
 .../iostreams/test/write_output_iterator_test.hpp  |    85 +
 .../iostreams/test/write_output_ostream_test.hpp   |    84 +
 .../libs/iostreams/test/write_output_seq_test.hpp  |    78 +
 .../libs/iostreams/test/write_output_test.hpp      |    73 +
 .../iostreams/test/write_seekable_seq_test.hpp     |    79 +
 .../libs/iostreams/test/write_seekable_test.hpp    |    77 +
 vendor/pdalboost/libs/iostreams/test/zlib_test.cpp |    60 +
 .../pdalboost/libs/program_options/doc/Jamfile.v2  |    13 +
 .../libs/program_options/doc/acknowledgements.xml  |    85 +
 .../libs/program_options/doc/alternatives          |    43 +
 .../pdalboost/libs/program_options/doc/changes.xml |   150 +
 .../pdalboost/libs/program_options/doc/design.xml  |   213 +
 .../libs/program_options/doc/glossary.dox          |    19 +
 .../libs/program_options/doc/glossary.xml          |    48 +
 .../pdalboost/libs/program_options/doc/howto.xml   |   447 +
 .../pdalboost/libs/program_options/doc/index.html  |    14 +
 .../libs/program_options/doc/overview.xml          |   652 ++
 .../libs/program_options/doc/post_review_plan.txt  |   182 +
 .../libs/program_options/doc/program_options.dox   |   162 +
 .../libs/program_options/doc/program_options.ent   |    46 +
 .../libs/program_options/doc/program_options.xml   |    87 +
 .../pdalboost/libs/program_options/doc/questions   |    16 +
 .../libs/program_options/doc/questions.dox         |    12 +
 .../pdalboost/libs/program_options/doc/rationale   |    15 +
 .../libs/program_options/doc/rationale.dox         |    95 +
 .../pdalboost/libs/program_options/doc/recipes.dox |    91 +
 .../libs/program_options/doc/requirements-Rozental |   209 +
 vendor/pdalboost/libs/program_options/doc/todo.txt |   238 +
 .../libs/program_options/doc/tutorial.xml          |   353 +
 .../libs/program_options/example/Jamfile.v2        |    14 +
 .../libs/program_options/example/custom_syntax.cpp |    63 +
 .../libs/program_options/example/first.cpp         |    51 +
 .../program_options/example/multiple_sources.cfg   |     5 +
 .../program_options/example/multiple_sources.cpp   |   121 +
 .../libs/program_options/example/option_groups.cpp |    97 +
 .../example/options_description.cpp                |    86 +
 .../libs/program_options/example/real.cpp          |    96 +
 .../libs/program_options/example/regex.cpp         |   101 +
 .../libs/program_options/example/response_file.cpp |    94 +
 .../libs/program_options/example/response_file.rsp |     3 +
 vendor/pdalboost/libs/program_options/index.html   |    14 +
 .../libs/program_options/meta/libraries.json       |    15 +
 .../pdalboost/libs/program_options/src/cmdline.cpp |   719 ++
 .../libs/program_options/src/config_file.cpp       |   198 +
 .../pdalboost/libs/program_options/src/convert.cpp |   161 +
 .../program_options/src/options_description.cpp    |   664 ++
 .../pdalboost/libs/program_options/src/parsers.cpp |   249 +
 .../program_options/src/positional_options.cpp     |    53 +
 .../pdalboost/libs/program_options/src/split.cpp   |    62 +
 .../program_options/src/utf8_codecvt_facet.cpp     |    21 +
 .../libs/program_options/src/value_semantic.cpp    |   428 +
 .../libs/program_options/src/variables_map.cpp     |   249 +
 .../pdalboost/libs/program_options/src/winmain.cpp |   102 +
 .../pdalboost/libs/program_options/test/Jamfile.v2 |    40 +
 .../libs/program_options/test/cmdline_test.cpp     |   659 ++
 .../libs/program_options/test/config_test.cfg      |     9 +
 .../libs/program_options/test/exception_test.cpp   |   164 +
 .../program_options/test/exception_txt_test.cpp    |   672 ++
 .../libs/program_options/test/minitest.hpp         |    25 +
 .../test/options_description_test.cpp              |   261 +
 .../libs/program_options/test/parsers_test.cpp     |   327 +
 .../test/positional_options_test.cpp               |    91 +
 .../test/program_options_size_test.py              |    53 +
 .../libs/program_options/test/required_test.cfg    |     1 +
 .../libs/program_options/test/required_test.cpp    |    98 +
 .../libs/program_options/test/split_test.cpp       |   189 +
 .../libs/program_options/test/test_convert.cpp     |   146 +
 .../pdalboost/libs/program_options/test/ucs2.txt   |   Bin 0 -> 2750 bytes
 .../libs/program_options/test/unicode_test.cpp     |   163 +
 .../program_options/test/unrecognized_test.cpp     |    88 +
 .../pdalboost/libs/program_options/test/utf8.txt   |   Bin 0 -> 2622 bytes
 .../program_options/test/variable_map_test.cpp     |   290 +
 .../libs/program_options/test/winmain.cpp          |    74 +
 .../pdalboost/libs/program_options/test/winmain.py |    39 +
 .../libs/property_tree/breaking_changes.txt        |    51 +
 vendor/pdalboost/libs/property_tree/doc/Jamfile.v2 |    47 +
 .../pdalboost/libs/property_tree/doc/accessing.qbk |    94 +
 .../libs/property_tree/doc/cmd_line_parser.qbk     |    80 +
 .../pdalboost/libs/property_tree/doc/container.qbk |    33 +
 .../libs/property_tree/doc/images/ptree2code.png   |   Bin 0 -> 44148 bytes
 .../libs/property_tree/doc/info_parser.qbk         |    54 +
 .../libs/property_tree/doc/ini_parser.qbk          |    37 +
 vendor/pdalboost/libs/property_tree/doc/intro.qbk  |    37 +
 .../libs/property_tree/doc/json_parser.qbk         |    69 +
 .../pdalboost/libs/property_tree/doc/parsers.qbk   |    24 +
 .../libs/property_tree/doc/property_tree.qbk       |   118 +
 .../pdalboost/libs/property_tree/doc/synopsis.qbk  |    35 +
 .../doc/system_environment_parser.qbk              |    10 +
 .../pdalboost/libs/property_tree/doc/tutorial.qbk  |    56 +
 .../property_tree/doc/windows_registry_parser.qbk  |    45 +
 .../libs/property_tree/doc/xml_parser.qbk          |    54 +
 .../libs/property_tree/examples/Jamfile.v2         |    12 +
 .../property_tree/examples/custom_data_type.cpp    |    88 +
 .../libs/property_tree/examples/debug_settings.cpp |    95 +
 .../libs/property_tree/examples/debug_settings.xml |    15 +
 .../property_tree/examples/empty_ptree_trick.cpp   |    71 +
 .../property_tree/examples/info_grammar_spirit.cpp |   152 +
 .../examples/settings_fully-existent.info          |     6 +
 .../examples/settings_non-existent.info            |     6 +
 .../examples/settings_partially-existent.info      |     6 +
 .../libs/property_tree/examples/speed_test.cpp     |   130 +
 vendor/pdalboost/libs/property_tree/index.html     |    14 +
 .../libs/property_tree/meta/libraries.json         |    16 +
 .../pdalboost/libs/property_tree/test/Jamfile.v2   |    27 +
 .../test/custom-build/debug_settings.xml           |    15 +
 .../libs/property_tree/test/custom-build/gcc.mak   |    14 +
 .../libs/property_tree/test/custom-build/icc.mak   |    14 +
 .../property_tree/test/custom-build/sandbox.vcproj |   330 +
 .../test/custom-build/settings_fully-existent.info |     6 +
 .../test/custom-build/settings_non-existent.info   |     6 +
 .../custom-build/settings_partially-existent.info  |     6 +
 .../test_example_custom_data_type.vcproj           |   189 +
 .../test_example_debug_settings.vcproj             |   189 +
 .../test_example_empty_ptree_trick.vcproj          |   189 +
 .../custom-build/test_info_grammar_spirit.vcproj   |   189 +
 .../test/custom-build/test_info_parser.vcproj      |   189 +
 .../test/custom-build/test_ini_parser.vcproj       |   189 +
 .../test/custom-build/test_json_parser.vcproj      |   189 +
 .../test/custom-build/test_multi_module.vcproj     |   193 +
 .../test/custom-build/test_property_tree.vcproj    |   194 +
 .../test/custom-build/test_xml_parser.vcproj       |   197 +
 .../libs/property_tree/test/custom-build/vc.mak    |    15 +
 .../property_tree/test/prefixing_callbacks.hpp     |    79 +
 .../pdalboost/libs/property_tree/test/sandbox.cpp  |    22 +
 .../libs/property_tree/test/test_info_parser.cpp   |   249 +
 .../libs/property_tree/test/test_ini_parser.cpp    |   226 +
 .../libs/property_tree/test/test_json_parser.cpp   |   443 +
 .../libs/property_tree/test/test_json_parser2.cpp  |   898 ++
 .../libs/property_tree/test/test_multi_module1.cpp |    21 +
 .../libs/property_tree/test/test_multi_module2.cpp |    18 +
 .../libs/property_tree/test/test_property_tree.cpp |   203 +
 .../libs/property_tree/test/test_property_tree.hpp |  1355 +++
 .../libs/property_tree/test/test_utils.hpp         |   252 +
 .../property_tree/test/test_xml_parser_common.hpp  |   150 +
 .../test/test_xml_parser_rapidxml.cpp              |    34 +
 .../property_tree/test/xml_parser_test_data.hpp    |   777 ++
 vendor/pdalboost/libs/random/src/random_device.cpp |   246 +
 vendor/pdalboost/libs/regex/src/c_regex_traits.cpp |   206 +
 .../pdalboost/libs/regex/src/cpp_regex_traits.cpp  |   117 +
 vendor/pdalboost/libs/regex/src/cregex.cpp         |   660 ++
 vendor/pdalboost/libs/regex/src/fileiter.cpp       |   928 ++
 vendor/pdalboost/libs/regex/src/icu.cpp            |   507 +
 vendor/pdalboost/libs/regex/src/instances.cpp      |    32 +
 vendor/pdalboost/libs/regex/src/internals.hpp      |    35 +
 vendor/pdalboost/libs/regex/src/posix_api.cpp      |   293 +
 vendor/pdalboost/libs/regex/src/regex.cpp          |   227 +
 vendor/pdalboost/libs/regex/src/regex_debug.cpp    |    59 +
 .../pdalboost/libs/regex/src/regex_raw_buffer.cpp  |    72 +
 .../libs/regex/src/regex_traits_defaults.cpp       |   692 ++
 vendor/pdalboost/libs/regex/src/static_mutex.cpp   |   183 +
 vendor/pdalboost/libs/regex/src/usinstances.cpp    |    81 +
 .../pdalboost/libs/regex/src/w32_regex_traits.cpp  |   652 ++
 .../pdalboost/libs/regex/src/wc_regex_traits.cpp   |   314 +
 vendor/pdalboost/libs/regex/src/wide_posix_api.cpp |   312 +
 vendor/pdalboost/libs/regex/src/winstances.cpp     |    35 +
 .../regex/test/config_info/regex_config_info.cpp   |    73 +
 .../libs/serialization/src/archive_exception.cpp   |   137 +
 .../libs/serialization/src/basic_archive.cpp       |    85 +
 .../libs/serialization/src/basic_iarchive.cpp      |   592 ++
 .../libs/serialization/src/basic_iserializer.cpp   |    33 +
 .../libs/serialization/src/basic_oarchive.cpp      |   468 +
 .../libs/serialization/src/basic_oserializer.cpp   |    33 +
 .../src/basic_pointer_iserializer.cpp              |    30 +
 .../src/basic_pointer_oserializer.cpp              |    30 +
 .../serialization/src/basic_serializer_map.cpp     |   112 +
 .../serialization/src/basic_text_iprimitive.cpp    |    28 +
 .../serialization/src/basic_text_oprimitive.cpp    |    28 +
 .../serialization/src/basic_text_wiprimitive.cpp   |    35 +
 .../serialization/src/basic_text_woprimitive.cpp   |    35 +
 .../libs/serialization/src/basic_xml_archive.cpp   |    51 +
 .../libs/serialization/src/basic_xml_grammar.ipp   |   467 +
 .../libs/serialization/src/binary_iarchive.cpp     |    39 +
 .../libs/serialization/src/binary_oarchive.cpp     |    39 +
 .../libs/serialization/src/binary_wiarchive.cpp    |    47 +
 .../libs/serialization/src/binary_woarchive.cpp    |    44 +
 .../libs/serialization/src/codecvt_null.cpp        |    83 +
 .../libs/serialization/src/extended_type_info.cpp  |   188 +
 .../src/extended_type_info_no_rtti.cpp             |    85 +
 .../src/extended_type_info_typeid.cpp              |   161 +
 .../serialization/src/polymorphic_iarchive.cpp     |    29 +
 .../serialization/src/polymorphic_oarchive.cpp     |    29 +
 .../pdalboost/libs/serialization/src/stl_port.cpp  |    42 +
 .../libs/serialization/src/text_iarchive.cpp       |    32 +
 .../libs/serialization/src/text_oarchive.cpp       |    33 +
 .../libs/serialization/src/text_wiarchive.cpp      |    37 +
 .../libs/serialization/src/text_woarchive.cpp      |    35 +
 .../libs/serialization/src/utf8_codecvt_facet.cpp  |    20 +
 .../pdalboost/libs/serialization/src/void_cast.cpp |   375 +
 .../serialization/src/xml_archive_exception.cpp    |    64 +
 .../libs/serialization/src/xml_grammar.cpp         |    73 +
 .../libs/serialization/src/xml_iarchive.cpp        |    36 +
 .../libs/serialization/src/xml_oarchive.cpp        |    32 +
 .../libs/serialization/src/xml_wgrammar.cpp        |   157 +
 .../libs/serialization/src/xml_wiarchive.cpp       |    42 +
 .../libs/serialization/src/xml_woarchive.cpp       |    35 +
 .../pdalboost/libs/smart_ptr/src/sp_collector.cpp  |   270 +
 .../libs/smart_ptr/src/sp_debug_hooks.cpp          |   243 +
 vendor/pdalboost/libs/system/doc/index.html        |   163 +
 vendor/pdalboost/libs/system/doc/reference.html    |   831 ++
 vendor/pdalboost/libs/system/index.html            |    14 +
 vendor/pdalboost/libs/system/meta/libraries.json   |    11 +
 vendor/pdalboost/libs/system/src/error_code.cpp    |    20 +
 vendor/pdalboost/libs/system/test/Jamfile.v2       |    58 +
 vendor/pdalboost/libs/system/test/config_test.cpp  |    65 +
 .../libs/system/test/dynamic_link_test.cpp         |    55 +
 .../pdalboost/libs/system/test/error_code_test.cpp |   279 +
 .../libs/system/test/error_code_user_test.cpp      |   404 +
 .../libs/system/test/header_only_test.cpp          |    23 +
 .../libs/system/test/initialization_test.cpp       |    28 +
 .../pdalboost/libs/system/test/system/common.props |    22 +
 .../libs/system/test/system_error_test.cpp         |   109 +
 vendor/pdalboost/libs/system/test/throw_test.cpp   |    31 +
 .../libs/test/src/compiler_log_formatter.cpp       |    18 +
 vendor/pdalboost/libs/test/src/cpp_main.cpp        |    19 +
 vendor/pdalboost/libs/test/src/debug.cpp           |    24 +
 vendor/pdalboost/libs/test/src/decorator.cpp       |    18 +
 .../pdalboost/libs/test/src/execution_monitor.cpp  |    18 +
 vendor/pdalboost/libs/test/src/framework.cpp       |    18 +
 .../libs/test/src/plain_report_formatter.cpp       |    18 +
 .../pdalboost/libs/test/src/progress_monitor.cpp   |    18 +
 .../pdalboost/libs/test/src/results_collector.cpp  |    18 +
 .../pdalboost/libs/test/src/results_reporter.cpp   |    18 +
 vendor/pdalboost/libs/test/src/test_main.cpp       |    15 +
 vendor/pdalboost/libs/test/src/test_tools.cpp      |    18 +
 vendor/pdalboost/libs/test/src/test_tree.cpp       |    18 +
 vendor/pdalboost/libs/test/src/unit_test_log.cpp   |    18 +
 vendor/pdalboost/libs/test/src/unit_test_main.cpp  |    18 +
 .../pdalboost/libs/test/src/unit_test_monitor.cpp  |    18 +
 .../libs/test/src/unit_test_parameters.cpp         |    18 +
 .../pdalboost/libs/test/src/xml_log_formatter.cpp  |    18 +
 .../libs/test/src/xml_report_formatter.cpp         |    18 +
 vendor/pdalboost/libs/thread/src/future.cpp        |    64 +
 vendor/pdalboost/libs/thread/src/pthread/once.cpp  |    78 +
 .../libs/thread/src/pthread/once_atomic.cpp        |    90 +
 .../pdalboost/libs/thread/src/pthread/thread.cpp   |   842 ++
 vendor/pdalboost/libs/thread/src/tss_null.cpp      |    38 +
 vendor/pdalboost/libs/thread/src/win32/thread.cpp  |  1048 ++
 vendor/pdalboost/libs/thread/src/win32/tss_dll.cpp |    85 +
 vendor/pdalboost/libs/thread/src/win32/tss_pe.cpp  |   325 +
 .../libs/timer/src/auto_timers_construction.cpp    |    46 +
 vendor/pdalboost/libs/timer/src/cpu_timer.cpp      |   261 +
 vendor/pdalboost/libs/uuid/index.html              |    43 +
 vendor/pdalboost/libs/uuid/meta/libraries.json     |    15 +
 vendor/pdalboost/libs/uuid/test/Jamfile.v2         |    61 +
 .../libs/uuid/test/compile_name_generator.cpp      |    13 +
 .../libs/uuid/test/compile_nil_generator.cpp       |    13 +
 .../libs/uuid/test/compile_random_generator.cpp    |    13 +
 .../pdalboost/libs/uuid/test/compile_seed_rng.cpp  |    14 +
 .../libs/uuid/test/compile_string_generator.cpp    |    13 +
 vendor/pdalboost/libs/uuid/test/compile_uuid.cpp   |    13 +
 .../libs/uuid/test/compile_uuid_generators.cpp     |    13 +
 .../pdalboost/libs/uuid/test/compile_uuid_io.cpp   |    13 +
 .../libs/uuid/test/compile_uuid_serialize.cpp      |    13 +
 .../pdalboost/libs/uuid/test/test_generators.cpp   |   137 +
 vendor/pdalboost/libs/uuid/test/test_include1.cpp  |    24 +
 vendor/pdalboost/libs/uuid/test/test_include2.cpp  |    19 +
 vendor/pdalboost/libs/uuid/test/test_io.cpp        |   154 +
 .../libs/uuid/test/test_msvc_simd_bug981648.hpp    |    34 +
 .../uuid/test/test_msvc_simd_bug981648_foo.cpp     |    31 +
 .../uuid/test/test_msvc_simd_bug981648_main.cpp    |    40 +
 .../libs/uuid/test/test_name_generator.cpp         |    49 +
 .../libs/uuid/test/test_nil_generator.cpp          |    29 +
 .../libs/uuid/test/test_random_generator.cpp       |    71 +
 .../libs/uuid/test/test_serialization.cpp          |    71 +
 vendor/pdalboost/libs/uuid/test/test_sha1.cpp      |   306 +
 .../libs/uuid/test/test_string_generator.cpp       |    58 +
 vendor/pdalboost/libs/uuid/test/test_tagging.cpp   |    80 +
 vendor/pdalboost/libs/uuid/test/test_uuid.cpp      |   245 +
 .../pdalboost/libs/uuid/test/test_uuid_class.cpp   |    42 +
 .../pdalboost/libs/uuid/test/test_uuid_in_map.cpp  |    36 +
 .../pdalboost/libs/uuid/test/test_uuid_no_simd.cpp |   153 +
 .../libs/uuid/test/test_wserialization.cpp         |    71 +
 vendor/pdalboost/libs/uuid/uuid.html               |   689 ++
 3683 files changed, 533034 insertions(+), 27631 deletions(-)

diff --git a/.gitignore b/.gitignore
index 32cff87..d057d6d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -145,3 +145,7 @@ python/*.egg*
 python/build/*
 python/pdal/libpdalpython.so
 python/pdal/libpdalpython.cpp
+test/data/*.json
+test/data/pipeline/*.json
+test/data/filters/*.json
+test/data/plang/*.json
diff --git a/.travis.yml b/.travis.yml
index 49ec64e..5c071f1 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,17 +2,25 @@
 # Configure Travis CI service for http://github.com/PDAL
 language: cpp
 
+
+sudo:
+    required
+
+services:
+    docker
+
 compiler:
-  - g++
   - clang
 
 env:
   - PDAL_OPTIONAL_COMPONENTS=all
   - PDAL_OPTIONAL_COMPONENTS=none
 
+
 before_install: ./scripts/ci/before_install.sh
 
-script: ./scripts/ci/script.sh
+script:
+    docker run -v $TRAVIS_BUILD_DIR:/pdal -e CXX="$CXX" -e CC="$CC" -e PDAL_OPTIONAL_COMPONENTS="$PDAL_OPTIONAL_COMPONENTS" -t pdal/dependencies:latest /bin/sh -c "/pdal/scripts/ci/script.sh"
 
 notifications:
   on_success: always
@@ -23,3 +31,6 @@ notifications:
       secure: AjatYRAUpsczjENkpHPFiLLZ/leDlzx4TH+oPQYZCpA4WpJdNRy0IB4oMR2IYiY+qz0nHDbeMTBvF0l8S6NknZAz20f8buf4IkrdXymBQBOTmLHMWbpgHuSCCu7xMwtG6thjMEmBOXm5UgCcdqvlchcaoAUunyprXQWgJwI+tHE=
     on_failure: always
     on_success: change
+  webhooks:
+    urls:
+      - https://webhooks.gitter.im/e/4c7f3edec32936d6a758
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c439d7d..c206d08 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -28,14 +28,14 @@ mark_as_advanced(CMAKE_VERBOSE_MAKEFILE)
 
 # the next line is the ONLY place in the entire pdal system where
 # the version info is hard-coded
-set(PDAL_VERSION_STRING "1.1.0" CACHE STRING "PDAL version" FORCE)
+set(PDAL_VERSION_STRING "1.2.0" CACHE STRING "PDAL version" FORCE)
 
 DISSECT_VERSION()
 GET_OS_INFO()
 SET_INSTALL_DIRS()
 
-set(PDAL_API_VERSION "1")
-set(PDAL_BUILD_VERSION "2.0.0")
+set(PDAL_API_VERSION "2")
+set(PDAL_BUILD_VERSION "3.0.0")
 
 # Name of C++ library
 
@@ -51,14 +51,13 @@ set(PDAL_BUILD_VERSION "2.0.0")
 if (APPLE OR WIN32)
     set(PDAL_LIB_NAME pdalcpp)
     set(PDAL_BASE_LIB_NAME pdalcpp)
-    set(PDAL_UTIL_LIB_NAME pdal_util)
-    set(PDAL_PLANG_LIB_NAME pdal_plang)
 else()
     set(PDAL_LIB_NAME pdalcpp)
     set(PDAL_BASE_LIB_NAME pdal_base)
-    set(PDAL_UTIL_LIB_NAME pdal_util)
-    set(PDAL_PLANG_LIB_NAME pdal_plang)
 endif()
+set(PDAL_UTIL_LIB_NAME pdal_util)
+set(PDAL_PLANG_LIB_NAME pdal_plang)
+set(PDAL_BOOST_LIB_NAME pdal_boost)
 
 set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
 
@@ -78,9 +77,9 @@ SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
 IF (APPLE)
     SET(MACOSX_RPATH ON)
 endif()
-LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
+LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/${PDAL_LIB_INSTALL_DIR}" isSystemDir)
 IF("${isSystemDir}" STREQUAL "-1")
-    SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
+    SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${PDAL_LIB_INSTALL_DIR}")
 ENDIF("${isSystemDir}" STREQUAL "-1")
 
 # wipe lib/ drectory on clean. It will have plugins that could be out of date
@@ -118,9 +117,9 @@ option(WITH_APPS "Choose if PDAL utilities should be built" TRUE)
 add_feature_info("PDAL application" WITH_APPS
     "the PDAL command line application")
 
-option(BUILD_PLUGIN_ATTRIBUTE "Choose if Attribute filter is built" FALSE)
-add_feature_info("Attribute plugin" BUILD_PLUGIN_ATTRIBUTE
-    "apply attributes to a subset of points")
+option(WITH_COMPLETION "Install bash completions scripts for command line?" FALSE)
+add_feature_info("Bash completion" WITH_COMPLETION
+    "completion for PDAL command line")
 
 option(BUILD_PLUGIN_CPD "Choose if Coherent Point Drift kernel is built" FALSE)
 add_feature_info("CPD plugin" BUILD_PLUGIN_CPD
@@ -215,14 +214,15 @@ set(PDAL_BUILD_TYPE ${CMAKE_BUILD_TYPE})
 #  Dependencies.
 #------------------------------------------------------------------------------
 
-include(${PDAL_CMAKE_DIR}/boost.cmake)
 include(${PDAL_CMAKE_DIR}/gdal.cmake)
-include(${PDAL_CMAKE_DIR}/geos.cmake)  # Optional
+include(${PDAL_CMAKE_DIR}/geos.cmake)
 include(${PDAL_CMAKE_DIR}/geotiff.cmake)  # Optional
 include(${PDAL_CMAKE_DIR}/lazperf.cmake)  # Optional
 include(${PDAL_CMAKE_DIR}/laszip.cmake)  # Optional
 include(${PDAL_CMAKE_DIR}/threads.cmake)
 include(${PDAL_CMAKE_DIR}/zlib.cmake)
+include(${PDAL_CMAKE_DIR}/test.cmake)
+include(${PDAL_CMAKE_DIR}/ctest.cmake)
 
 #------------------------------------------------------------------------------
 # generate the pdal_defines.h header
@@ -251,6 +251,7 @@ PDAL_ADD_INCLUDES("" "" ${pdal_defines_h})
 include_directories("${CMAKE_CURRENT_BINARY_DIR}/include")
 
 include_directories(vendor/eigen-3.1.91)
+include_directories(vendor/jsoncpp-1.6.2/dist)
 include_directories(vendor/nanoflann-1.1.8)
 include_directories(vendor/rply-1.1.4)
 
@@ -261,6 +262,23 @@ include_directories(vendor/rply-1.1.4)
 # PDAL_TARGET_OBJECTS is used to collect the driver object libraries
 set(PDAL_TARGET_OBJECTS "")
 
+if (WITH_TESTS)
+    enable_testing()
+endif()
+add_subdirectory(plugins)
+
+include_directories(vendor/pdalboost)
+
+if (WITH_TESTS)
+    if (MSVC)
+        # Since tests link CRT dynamically (/MD[d]), require gtest to link dynamically too (default is /MT[d])
+        option(gtest_force_shared_crt "Always use shared Visual C++ run-time DLL" ON)
+    endif()
+    add_subdirectory(vendor/gtest-1.7.0)
+    add_subdirectory(test)
+endif()
+
+add_subdirectory(vendor/pdalboost)
 add_subdirectory(src/util)
 add_subdirectory(io)
 add_subdirectory(filters)
@@ -271,45 +289,8 @@ if (BUILD_PLUGIN_PYTHON)
     add_subdirectory(src/plang)
 endif()
 
-if(WITH_TESTS)
-  # This is fixed in trunk
-  # https://code.google.com/p/googletest/source/detail?r=675
-  # but for now, we need this fix
-  # http://stackoverflow.com/questions/12558327/google-test-in-visual-studio-2012
-  if (MSVC AND MSVC_VERSION EQUAL 1700)
-    add_definitions(/D _VARIADIC_MAX=10)
-  endif()
-
-  add_subdirectory(vendor/gtest-1.7.0)
-  enable_testing()
-  include_directories(vendor/gtest-1.7.0/include vendor/gtest-1.7.0)
-
-  if(ENABLE_CTEST)
-    message(STATUS
-      "Enable CTest to support submissions of results to CDash at http://cdash.org")
-    cmake_minimum_required(VERSION 2.8.0)
-    # Dashboard has been prepared for experiments
-    # http://my.cdash.org/index.php?project=PDAL
-    include(CTest)
-    message(STATUS
-      "Enable CTest to support submissions of results to CDash at http://cdash.org - done")
-  endif()
-
-  add_subdirectory(test)
-
-  # Define "make check" as alias for "make test"
-  ADD_CUSTOM_TARGET(check COMMAND ctest)
-else()
-  if(ENABLE_CTEST)
-    message(WARNING
-      "CTest support requested but WITH_TESTS option not specified to build of PDAL unit tests")
-  endif()
-endif()
-
-add_subdirectory(plugins)
-
-if(WITH_APPS)
-  add_subdirectory(apps)
+if (WITH_APPS)
+    add_subdirectory(apps)
 endif()
 
 #------------------------------------------------------------------------------
@@ -349,20 +330,26 @@ list(APPEND CPACK_SOURCE_IGNORE_FILES "/test/data/local/")
 list(APPEND CPACK_SOURCE_IGNORE_FILES "/doc/doxygen/")
 list(APPEND CPACK_SOURCE_IGNORE_FILES "/doc/build/")
 list(APPEND CPACK_SOURCE_IGNORE_FILES "/doc/presentations/")
+list(APPEND CPACK_SOURCE_IGNORE_FILES "/doc/_static/logo/dongle/")
 list(APPEND CPACK_SOURCE_IGNORE_FILES "/cmake/examples/")
 
 include(CPack)
 
 add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
 
-export(TARGETS ${PDAL_BASE_LIB_NAME} ${PDAL_UTIL_LIB_NAME}
+export(TARGETS ${PDAL_BASE_LIB_NAME}
+    ${PDAL_UTIL_LIB_NAME}
+    ${PDAL_BOOST_LIB_NAME}
     FILE "${PDAL_BINARY_DIR}/PDALTargets.cmake")
-install(EXPORT PDALTargets DESTINATION lib/pdal/cmake)
+install(EXPORT PDALTargets DESTINATION "${PDAL_LIB_INSTALL_DIR}/pdal/cmake")
 include(${PDAL_CMAKE_DIR}/config.cmake)
 
 feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES)
+export(PACKAGE PDAL)
 
 # TODO: move under scripts/bash-completion ?
-if (IS_DIRECTORY /etc/bash_completion.d)
-    install(FILES "${PROJECT_SOURCE_DIR}/scripts/bash-completion/pdal" DESTINATION "${CMAKE_INSTALL_PREFIX}/etc/bash_completion.d")
+if (WITH_COMPLETION)
+    if (IS_DIRECTORY /etc/bash_completion.d)
+        install(FILES "${PROJECT_SOURCE_DIR}/scripts/bash-completion/pdal" DESTINATION "${CMAKE_INSTALL_PREFIX}/etc/bash_completion.d")
+    endif()
 endif()
diff --git a/PDALConfig.cmake.in b/PDALConfig.cmake.in
index 1fa72e9..3defe32 100644
--- a/PDALConfig.cmake.in
+++ b/PDALConfig.cmake.in
@@ -14,8 +14,9 @@ foreach(_dir @PDAL_CONFIG_LIBRARY_DIRS@)
   set_and_check(_foo ${_dir})
   list(APPEND PDAL_LIBRARY_DIRS ${_foo})
 endforeach(_dir)
-check_required_components("@PDAL_BASE_LIB_NAME@")
-check_required_components("@PDAL_UTIL_LIB_NAME@")
-set(PDAL_LIBRARIES "@PDAL_LIB_NAME@" "@PDAL_UTIL_LIB_NAME@")
 
 include("${CMAKE_CURRENT_LIST_DIR}/PDALTargets.cmake")
+
+set(PDAL_LIBRARIES "@PDAL_BASE_LIB_NAME@" "@PDAL_UTIL_LIB_NAME@")
+
+check_required_components(PDAL)
diff --git a/README.md b/README.md
index 066bad1..4a125e7 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,9 @@
 PDAL
 ====
 
+[![Join the chat at https://gitter.im/PDAL/PDAL](https://badges.gitter.im/PDAL/PDAL.svg)](https://gitter.im/PDAL/PDAL?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
 [![Build Status](https://travis-ci.org/PDAL/PDAL.png?branch=master)](https://travis-ci.org/PDAL/PDAL)
-[![Appveyor Build Status](https://ci.appveyor.com/api/projects/status/github/pdal/pdal?branch=master&svg=true)](https://ci.appveyor.com/project/hobu/pdal)
+[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/pdal/pdal?branch=master&svg=true)](https://ci.appveyor.com/project/hobu/pdal)
 
 See http://www.pdal.io/ for more info
diff --git a/RELEASENOTES.txt b/RELEASENOTES.txt
new file mode 100644
index 0000000..715b1d3
--- /dev/null
+++ b/RELEASENOTES.txt
@@ -0,0 +1,125 @@
+1.2.0:
+
+Changes of Note:
+
+- The GEOS library is now required to build PDAL.  In earlier versions it was
+  an optional component.
+- Boost is no longer a required component.  Unless you are building plugins
+  that require boost (notably PCL and Geowave), you no longer will need
+  boost installed on your system to build or run PDAL.
+- PDAL now builds on Microsoft Visual Studio 2015.
+- The PipelineReader class has been removed and its functionality has been
+  merged into PipelineManager.
+- Plugin libraries now support Linux versioning.
+- Naming changes have been made to allow packaging with the Debian release.
+- filters.height now uses the dimension 'HeightAboveGround' instead of a
+  dimension named 'Height' to be compatible with the filters.heightaboveground.
+- Option names no longer contain lowercase characters.
+- PDAL now works with GDAL version 1.9 and later.
+- Stages created with the StageFactory are now owned by the factory.
+- filters.dartthrowing has been renamed filters.dartsample
+- 'pipeline-serialization' now produces JSON output instead of XML.
+
+Enhancements:
+
+- Pipelines may now be specified using a JSON syntax.  XML syntax is still
+  supported but users should switch to JSON when possible as the XML support
+  will be removed in a future version.
+- PDAL now can be built into a Docker container.
+- Many stages now support "streaming," which allows control of the number
+  of points stored in memory during processing.  See
+  Stage::execute(StreamPointTable&) for more information.
+- A basic text reader has been added.
+- Added support for the dimension 'ClassFlags' in readers.las.
+- The derivative writer can now produce output for multiple primitive types
+  with a single execution.
+- 'pdal info' now provides bounding box output instead of a more refined
+  boundary when the hexbin plugin isn't found.
+- Added 'pdal density' to provide a command-line interface to the
+  filters.hexbin density calcuations.
+- The icebridge reader can now load an associated metadata file.  The reader
+  also now marks the associated coordinate system as WGS84.
+- The stats filter now emits bounding box information in native and WGS84
+  projections.
+- PDAL command-line programs now (generally) check their argument lists for
+  correctness and report syntax errors.
+- 'pdal info' now provides spatial reference attributes in addition to
+  the actual well-known text.
+- Geometry can now be specified as GeoJSON as well as well-known-text in
+  most contexts.  Geometry optionally provides Z-dimension output.
+- Stage and plugin creation is now thread-safe (NOTE: Most of PDAL is
+  NOT thread-safe, so tread carefully).
+- Many, many documentation enhancements.
+
+Fixes:
+
+- A bug in generating PCIDs when with multiple simultaneous PDAL executions
+  to the same Postgres database has been fixed.
+- Fixed a bug in generated SQL delete statements when certain table names
+  were used in the writers.postgres driver.
+- Properly escape quotes when generating JSON output.
+- Fix an off-by-one error when writing data with the derivative writer that
+  could lead to a crash.
+- Fixed a depedency error during builds that could lead to a failure to
+  properly load Python extensions on Linux.
+- Fixed a bug where passing certain options to 'pdal info' could be handled
+  in ambiguous ways.
+- Fixed bugs in the reading of raster data using readers.gdal.
+- Fixed population of the AIMIDB and ACFTB attributes in writers.nitf.
+- Corrected the parsing of some dimension names in filters.colorization.
+- Fixed a potential truncation in the GlobalEncoding dimension of readers.las.
+
+1.1.0:
+
+Enhancements:
+
+- Add support for the LAZperf LAS compressor in decoding/encoding LAS files.
+  LAZperf can be enabled with the 'compression' option in readers.las and
+  writers.las.
+- Add PCL functionality as filters (filters.greedyprojection,
+  filters.gridprojection, filters.ground filters.movingleastsquares,
+  filters.poisson, filters.radiusoutlier, filters.statisticaloutlier,
+  filters.voxelgrid, filters.height, filters.dartsample)
+- Add readers.gdal to support reading raster sets as point clouds
+- Update writers.geowave and readers.geowave to work with the latest version
+  of GeoWave software.
+- Add readers.ilvis2 to support the Icebridge ILVIS2 format.
+- Disallow nested options.  Check stage documentation for changes in option
+  names and handling. (filters.ferry, filters.colorization, filters.attribute,
+  filters.crop).  Change filters.attribute to handle only a single dimension.
+- Add 'output_dims' options in writers.bpf to allow control of the dimensions
+  that should be written.
+- Add 'all' keyword in 'extra_dims' options of writers.las to cause all
+  dimensions to be written to either the standard or extra dimensions of
+  a LAS point.
+- Add filters.randomize to allow randomized order of points.
+- Add filters.divider to split a set of points into subsets of a fixed number
+  or into subsets containing a specific number of points.
+- Update to version 1.1.4 of rply in readers.rply.
+- Change the logic of the range filter to allow multiple ranges for a single
+  dimension and support a simple boolean logic.
+- Change the default scaling on writer.bpf to 'auto'.
+- Add support for smoothing boundaries generated by filters.hexbin.
+- Add readers.tindex to allow vector-filtered input of point cloud files.
+- Allow merging of datasets with non-matching spatial references.
+- Many, many documentation enhancements.
+
+Fixes:
+
+- Handle error with Pgpointcloud when pointcloud extension is not installed
+  on postgres server.  Skip tests if extention is missing.
+- Set precision on output of doubles to metadata.
+- Fix a divide-by-zero error in readers.faux when the point count was 1.
+  (https://github.com/PDAL/PDAL/issues/1015)
+- Fix fatal error loading numpy library that occurred when running
+  filters.predicate or filters.programmable.
+  (https://github.com/PDAL/PDAL/issues/1010)
+- Correct readers.las to properly check WKT bit when choosing spatial
+  reference VLR.
+  (https://github.com/PDAL/PDAL/issues/1040)
+- Correct writer.las to emit only WKT or GeoTiff VLR, not both.
+  (https://github.com/PDAL/PDAL/issues/1040)
+- Check object ID against table column id (attrelid) to ensure correct PCID
+  retrieval in readers.pgpointcloud.
+  (https://github.com/PDAL/PDAL/pull/1051)
+
diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt
index 79d2b52..566ae82 100644
--- a/apps/CMakeLists.txt
+++ b/apps/CMakeLists.txt
@@ -37,8 +37,6 @@ set(PDAL_UTILITY pdal)
 # Configure build targets
 #------------------------------------------------------------------------------
 
-link_directories(${Boost_LIBRARY_DIRS})
-
 if(PDAL_UTILITY)
     set(srcs pdal.cpp)
 
@@ -70,7 +68,7 @@ endif(APPLE AND PDAL_BUNDLE)
 if(UNIX OR APPLE)
 
     set(PKGCONFIG_LIBRARY_DEFINITIONS "")
-    set(PDAL_INCLUDE_DEFINITIONS "-I${CMAKE_INSTALL_PREFIX}/include -I${Boost_INCLUDE_DIR} -I${GDAL_INCLUDE_DIR}")
+    set(PDAL_INCLUDE_DEFINITIONS "-I${CMAKE_INSTALL_PREFIX}/include -I${GDAL_INCLUDE_DIR}")
     set(PKGCONFIG_LIBRARY_DEFINITIONS "${PKGCONFIG_LIBRARY_DEFINITIONS} gdal")
 
     if(LIBXML2_FOUND)
@@ -78,10 +76,8 @@ if(UNIX OR APPLE)
         set(PDAL_INCLUDE_DEFINITIONS "${PDAL_INCLUDE_DEFINITIONS} -I${LIBXML2_INCLUDE_DIR}")
     endif()
 
-    if (GEOS_FOUND)
-        set(PKGCONFIG_LIBRARY_DEFINITIONS "${PKGCONFIG_LIBRARY_DEFINITIONS} geos")
-        set(PDAL_INCLUDE_DEFINITIONS "${PDAL_INCLUDE_DEFINITIONS} -I${GEOS_INCLUDE_DIR}")
-    endif()
+    set(PKGCONFIG_LIBRARY_DEFINITIONS "${PKGCONFIG_LIBRARY_DEFINITIONS} geos")
+    set(PDAL_INCLUDE_DEFINITIONS "${PDAL_INCLUDE_DEFINITIONS} -I${GEOS_INCLUDE_DIR}")
 
     if (LASZIP_FOUND)
         set(PDAL_INCLUDE_DEFINITIONS "${PDAL_INCLUDE_DEFINITIONS} -I${LASZIP_INCLUDE_DIR}")
@@ -91,10 +87,9 @@ if(UNIX OR APPLE)
     configure_file(${CMAKE_CURRENT_SOURCE_DIR}/pdal.pc.in
                    ${CMAKE_CURRENT_BINARY_DIR}/pdal.pc @ONLY)
     install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pdal.pc
-        DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig/"
+        DESTINATION "${PDAL_LIB_INSTALL_DIR}/pkgconfig/"
         PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
 
-
     # Autoconf compatibility variables to use the same script source.
     configure_file("${CMAKE_CURRENT_SOURCE_DIR}/pdal-config.in"
                    "${CMAKE_CURRENT_SOURCE_DIR}/pdal-config" @ONLY)
diff --git a/apps/pdal-config b/apps/pdal-config
index b3a8d0c..1e4a1d4 100644
--- a/apps/pdal-config
+++ b/apps/pdal-config
@@ -46,7 +46,7 @@ case $1 in
     ;;
 
   --includes)
-    echo -I/usr/local/include -I/usr/include -I/usr/include/gdal -I/usr/include/libxml2 -I/usr/include -I/usr/include
+    echo -I/usr/local/include -I/usr/include/gdal -I/usr/include/libxml2 -I/usr/include -I/usr/include
     ;;
 
   --cflags)
@@ -54,11 +54,11 @@ case $1 in
     ;;
 
   --cxxflags)
-    echo -Wextra -Wall -Wno-unused-parameter -Wno-unused-variable -Wpointer-arith -Wcast-align -Wcast-qual -Wredundant-decls -Wno-long-long -Wno-unknown-pragmas -isystem /usr/local/include -std=c++11 -std=c++11
+    echo  -Wextra -Wall -Wno-unused-parameter -Wno-unused-variable -Wpointer-arith -Wcast-align -Wcast-qual -Wredundant-decls -Wno-long-long -Wno-unknown-pragmas -Wno-deprecated-declarations -isystem /usr/local/include -std=c++11 -std=c++11
     ;;
 
   --version)
-    echo 1.1.0
+    echo 1.2.0
     ;;
 
   *)
diff --git a/apps/pdal.cpp b/apps/pdal.cpp
index 1e554ba..372e9ff 100644
--- a/apps/pdal.cpp
+++ b/apps/pdal.cpp
@@ -34,6 +34,7 @@
 ****************************************************************************/
 
 #include <pdal/KernelFactory.hpp>
+#include <pdal/PluginManager.hpp>
 #include <pdal/StageFactory.hpp>
 #include <pdal/pdal_config.hpp>
 
@@ -81,7 +82,7 @@ void outputHelp()
     std::cout << "The following commands are available:" << std::endl;
 
     KernelFactory f(false);
-    StringList loaded_kernels = f.getKernelNames();
+    StringList loaded_kernels = PluginManager::names(PF_PluginType_Kernel);
 
     for (auto name : loaded_kernels)
         std::cout << "   - " << splitDriverName(name) << std::endl;
@@ -90,6 +91,7 @@ void outputHelp()
 
 void outputDrivers()
 {
+    // Force plugin loading.
     StageFactory f(false);
 
     std::ostringstream strm;
@@ -108,11 +110,12 @@ void outputDrivers()
 
     strm << std::left;
 
-    std::map<std::string, std::string> sm = f.getStageMap();
-    for (auto s : sm)
+    StringList stages = PluginManager::names(PF_PluginType_Filter |
+        PF_PluginType_Reader | PF_PluginType_Writer);
+    for (auto name : stages)
     {
-        std::string name = s.first;
-        StringList lines = Utils::wordWrap(s.second, descripColLen - 1);
+        std::string descrip = PluginManager::description(name);
+        StringList lines = Utils::wordWrap(descrip, descripColLen - 1);
         for (size_t i = 0; i < lines.size(); ++i)
         {
             strm << std::setw(nameColLen) << name << " " <<
@@ -127,16 +130,18 @@ void outputDrivers()
 
 void outputOptions(std::string const& n)
 {
+    // Force plugin loading.
     StageFactory f(false);
 
-    std::unique_ptr<Stage> s(f.createStage(n));
+    Stage* s = f.createStage(n);
     if (!s)
     {
         std::cerr << "Unable to create stage " << n << "\n";
         return;
     }
 
-    std::cout << n << std::endl;
+    std::string link = PluginManager::link(n);
+    std::cout << n << " -- " << link << std::endl;
     std::cout << headline << std::endl;
 
     std::vector<Option> options = s->getDefaultOptions().getOptions();
@@ -174,7 +179,7 @@ void outputCommands()
 {
     KernelFactory f(false);
     std::vector<std::string> loaded_kernels;
-    loaded_kernels = f.getKernelNames();
+    loaded_kernels = PluginManager::names(PF_PluginType_Kernel);
     for (auto name : loaded_kernels)
     {
         std::cout << splitDriverName(name) << std::endl;
@@ -184,8 +189,11 @@ void outputCommands()
 
 void outputOptions()
 {
+    // Force plugin loading.
     StageFactory f(false);
-    StringList nv = f.getStageNames();
+
+    StringList nv = PluginManager::names(PF_PluginType_Filter |
+        PF_PluginType_Reader | PF_PluginType_Writer);
     for (auto const& n : nv)
         outputOptions(n);
 }
@@ -193,6 +201,8 @@ void outputOptions()
 
 int main(int argc, char* argv[])
 {
+    Log log("PDAL", "stderr");
+
     // No arguments, print basic usage, plugins will be loaded
     if (argc < 2)
     {
@@ -204,14 +214,14 @@ int main(int argc, char* argv[])
     // the positional option 'command' is a valid kernel
     KernelFactory f(true);
     std::vector<std::string> loaded_kernels;
-    loaded_kernels = f.getKernelNames();
+    loaded_kernels = PluginManager::names(PF_PluginType_Kernel);
 
     bool isValidKernel = false;
-    std::string command(argv[1]);
+    std::string command = Utils::tolower(argv[1]);
     std::string fullname;
     for (auto name : loaded_kernels)
     {
-        if (boost::iequals(argv[1], splitDriverName(name)))
+        if (command == splitDriverName(name))
         {
             fullname = name;
             isValidKernel = true;
@@ -224,11 +234,11 @@ int main(int argc, char* argv[])
     {
         KernelFactory f(false);
         loaded_kernels.clear();
-        loaded_kernels = f.getKernelNames();
+        loaded_kernels = PluginManager::names(PF_PluginType_Kernel);
 
         for (auto name : loaded_kernels)
         {
-            if (boost::iequals(argv[1], splitDriverName(name)))
+            if (command == splitDriverName(name))
             {
                 fullname = name;
                 isValidKernel = true;
@@ -240,10 +250,11 @@ int main(int argc, char* argv[])
     // Dispatch execution to the kernel, passing all remaining args
     if (isValidKernel)
     {
-        int count(argc - 1); // remove the 1st argument
-        const char** args = const_cast<const char**>(&argv[1]);
-        std::unique_ptr<Kernel> app = f.createKernel(fullname);
-        return app->run(count, args, command);
+        int count(argc - 2); // remove 'pdal' and the kernel name
+        argv += 2;
+        void *kernel = PluginManager::createObject(fullname);
+        std::unique_ptr<Kernel> app(static_cast<Kernel *>(kernel));
+        return app->run(count, const_cast<char const **>(argv), command);
     }
 
     // Otherwise, process the remaining args to see if they are supported
@@ -252,44 +263,46 @@ int main(int argc, char* argv[])
     bool help = false;
     bool options = false;
     bool version = false;
-    std::string optString("all");  // --options will default to displaying information on all available stages
+
+    // --options will default to displaying information on all available stages
+    std::string optString("all");
+
     for (int i = 1; i < argc; ++i)
     {
-        if (boost::iequals(argv[i], "--debug"))
+        std::string arg = Utils::tolower(argv[i]);
+        if (arg == "--debug")
         {
             debug = true;
         }
-        else if (boost::iequals(argv[i], "--drivers"))
+        else if (arg == "--drivers")
         {
             drivers = true;
         }
-        else if (boost::iequals(argv[i], "--help") || boost::iequals(argv[i], "-h"))
+        else if ((arg == "--help") || (arg == "-h"))
         {
             help = true;
         }
-        else if (boost::algorithm::istarts_with(argv[i], "--options"))
+        else if (Utils::startsWith(arg, "--options"))
         {
-            std::vector<std::string> optionsVec;
-            // we are rather unsophisticated for now, only splitting on '=', no spaces allowed
-            boost::algorithm::split(optionsVec, argv[i],
-                boost::algorithm::is_any_of("="), boost::algorithm::token_compress_on);
+            StringList optionsVec = Utils::split2(arg, '=');
             options = true;
             if (optionsVec.size() == 2)
-                optString = optionsVec[1];
+                optString = Utils::tolower(optionsVec[1]);
         }
-        else if (boost::iequals(argv[i], "--version"))
+        else if (arg == "--version")
         {
             version = true;
         }
-        else if (boost::iequals(argv[i], "--list-commands"))
+        else if (arg == "--list-commands")
         {
             outputCommands();
             return 0;
         }
         else
         {
-            if (boost::algorithm::istarts_with(argv[i], "--"))
-                std::cerr << "Unknown option '" << argv[i] <<"' not recognized" << std::endl << std::endl;
+            if (arg == "--")
+                log.get(LogLevel::Warning) << "Unknown option '" << argv[i] <<
+                    "' not recognized" << std::endl << std::endl;
         }
     }
 
@@ -307,7 +320,7 @@ int main(int argc, char* argv[])
 
     if (options)
     {
-        if (boost::iequals(optString, "all"))
+        if (optString == "all")
             outputOptions();
         else
             outputOptions(optString);
@@ -327,7 +340,8 @@ int main(int argc, char* argv[])
     }
 
     if (!isValidKernel)
-        std::cerr << "Command '" << command <<"' not recognized" << std::endl << std::endl;
+        log.get(LogLevel::Error) << "Command '" << command <<
+            "' not recognized" << std::endl << std::endl;
     outputHelp();
     return 1;
 }
diff --git a/apps/pdal.pc.in b/apps/pdal.pc.in
index c9cb7c4..02caf80 100644
--- a/apps/pdal.pc.in
+++ b/apps/pdal.pc.in
@@ -1,6 +1,6 @@
 prefix=@CMAKE_INSTALL_PREFIX@
 exec_prefix=@CMAKE_INSTALL_PREFIX@/bin
-libdir=@CMAKE_INSTALL_PREFIX@/lib
+libdir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@
 includedir=@CMAKE_INSTALL_PREFIX@/include
 
 Name: PDAL
diff --git a/appveyor.yml b/appveyor.yml
index 6b3a0f0..908c9cb 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,49 +1,87 @@
 version: 1.0.{build}
 
-os: Windows Server 2012
+os: Visual Studio 2015
 
-platform:
-  - x64
+platform: x64
 
 configuration: Release
 
+matrix:
+  fast_finish: true
+
 environment:
-  # set the directory to use for OSGeo4W install, our CMake find packages know
-  # to look here
-  OSGEODIR: C:\OSGeo4W64
+  OSGEO4W_ROOT: C:\OSGeo4W64
 
   matrix:
     - PDAL_OPTIONAL_COMPONENTS: OFF
     - PDAL_OPTIONAL_COMPONENTS: ON
 
+# Should speed up repository cloning
+shallow_clone: true
+clone_depth: 5
+
+# Uncomment if you need to debug AppVeyor session (https://www.appveyor.com/docs/how-to/rdp-to-build-worker)
+# on_finish:
+# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
+
+init:
+  - set PYTHONHOME=C:\Python27-x64
+  - set PYTHONPATH=%PYTHONHOME%\Lib;%OSGEO4W_ROOT%\apps\Python27\lib\site-packages
+  - set PATH=C:\Program Files (x86)\MSBuild\14.0\Bin;%PATH%
+  - set PATH=%PYTHONHOME%;%PATH%
+  - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
+
 install:
   # make a temp directory for downloading osgeo4w-setup.exe
   # this may not matter as much if part of the install step, as pdal has
   # already been cloned, otherwise git would complain about a non-empty
   # directory
   - ps: mkdir C:\temp | out-null
-
-  # make the osgeo directory
-  - ps: mkdir %OSGEODIR% | out-null
-
+  - ps: mkdir $env:OSGEO4W_ROOT | out-null
+  # make an install directory for packacing
+  - ps: mkdir C:\pdalbin | out-null
   # get the OSGeo installer
-  - ps: wget http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe -OutFile C:\temp\osgeo4w-setup.exe | out-null
-
+  - ps: (new-object net.webclient).DownloadFile("http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe", "C:\temp\osgeo4w-setup.exe")
   # and install our dependencies
-  - C:\temp\osgeo4w-setup.exe -s http://download.osgeo.org/osgeo4w/ -a -q -P boost-devel,eigen,gdal,geos,hexer,iconv,laszip,libgeotiff,libtiff,libpq,libxml2,nitro,pcl,points2grid,proj,python-numpy,zlib -R %OSGEODIR% > nul
-
+  - C:\temp\osgeo4w-setup.exe -q -k -r -A -s http://download.osgeo.org/osgeo4w/ -a x86_64 -P boost-devel,eigen,gdal,geos,hexer,iconv,laszip,libgeotiff,libpq,libtiff,libxml2,nitro,pcl,points2grid,proj,python-numpy,zlib -R %OSGEO4W_ROOT% > NUL
   # call our PDAL install script
-  - call .\\scripts\\appveyor\\install.cmd
-
-#cache:
-#  # this should cache our OSGeo4W install between jobs in the build matrix
-#  - C:\OSGeo4W64
+  - call .\\scripts\\appveyor\\config.cmd
 
 build:
   parallel: true
   project: PDAL.sln
   verbosity: minimal
 
+after_build:
+  - 7z a pdal.zip %APPVEYOR_BUILD_FOLDER%\bin\*.*
+
+test_script:
+  # FIXME: Clear PATH to avoid OSGeo4W loading incompatible DLLs
+  - set PATH=
+  - set PATH=%OSGEO4W_ROOT%\bin;C:\Program Files (x86)\MSBuild\14.0\Bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\7-Zip;C:\Program Files\Microsoft Windows Performance Toolkit\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Python27;C:\Tools\GitVersion;C:\Program Files (x86)\CMake\bin;C:\Program Files\Git\cmd;C:\Program Files\Git\usr\bin;C:\Program Files\AppVeyor\BuildAgent\
+  - set PYTHONHOME=C:\Python27-x64
+  - set PYTHONPATH=%PYTHONHOME%\Lib;%OSGEO4W_ROOT%\apps\Python27\lib\site-packages
+  - echo %PATH%
+  - set GDAL_DATA=%OSGEO4W_ROOT%\share\epsg_csv
+  - set PROJ_LIB=%OSGEO4W_ROOT%\share\proj
+  - ctest -V --output-on-failure -C Release
+
+artifacts:
+  - path: pdal.zip
+    name: pdalmaster
+
+deploy:
+    # Amazon S3 deployment provider settings
+  - provider: S3
+    access_key_id:
+      secure: 6DDLMtbxyT6amL3m5gmMObyL0ucWzIGxylinnYuMJPM=
+    secret_access_key:
+      secure: cSqZlsaCxFwXgxJw0BLd7npMFvQk3Vbr74ZPLaBQWLKnOz1cKss9qab1SzSygwkh
+    bucket: "pdal"
+    folder: "osgeo4w/"
+    artifact: pdalmaster
+    set_public: true
+
 notifications:
   - provider: Email
     on_build_success: false
@@ -51,17 +89,5 @@ notifications:
     on_build_status_changed: false
 
   - provider: Slack
-    auth_token:
-      secure: Ycvea4CbhP10k3tQwTr9vU2QMdYa4JusDfbCoOwkns2O87afn/G5eBsUakdM/eyW
-    channel: pdal
-    on_build_failure: true
-    on_build_success: false
-    on_build_status_changed: true
-
-#test_script:
-#  - "SET PATH=%OSGEODIR%\\bin;%PATH%"
-#  - echo %PATH%
-#  - ctest --output-on-failure -C Release -VV
-
-matrix:
-  fast_finish: true
+    incoming_webhook:
+      secure: KxbDvaPmsvNmYpsp0TH3m3hJr7PqQL1sxR8xILBzaF2Lbku03M3mJ/h787TvDGQGX3IlyZtfTP0wvSRqMl4nMmdvDQZoAe8+Gyfc7BOkYIg=
diff --git a/cmake/boost.cmake b/cmake/boost.cmake
deleted file mode 100644
index 2a6add0..0000000
--- a/cmake/boost.cmake
+++ /dev/null
@@ -1,26 +0,0 @@
-# Default to using static, multithreaded libraries for
-# linking under MSVC.  This is because we show users how to
-# use boostpro.com installer and install those options when linking
-# on windows in the compilation documentation.
-if(WIN32)
-    if (MSVC)
-        set(Boost_USE_STATIC_LIBS   OFF)
-        set(Boost_USE_MULTITHREADED ON)
-
-        if (PDAL_USE_STATIC_RUNTIME)
-            set(Boost_USE_STATIC_RUNTIME ON)
-        endif(PDAL_USE_STATIC_RUNTIME)
-    endif(MSVC)
-endif(WIN32)
-
-find_package(Boost 1.53 REQUIRED COMPONENTS program_options iostreams filesystem system thread)
-set_package_properties(Boost PROPERTIES TYPE REQUIRED
-    PURPOSE "Boost provides fundamental functionality for PDAL")
-if(Boost_FOUND)
-  include_directories(${Boost_INCLUDE_DIRS})
-
-  # make these available for the user to set.
-  mark_as_advanced(CLEAR Boost_INCLUDE_DIR)
-  mark_as_advanced(CLEAR Boost_LIBRARY_DIRS)
-  link_directories(${Boost_LIBRARY_DIRS})
-endif(Boost_FOUND)
diff --git a/cmake/config.cmake b/cmake/config.cmake
index b47aa29..d9a2078 100644
--- a/cmake/config.cmake
+++ b/cmake/config.cmake
@@ -5,11 +5,9 @@ set(SYSCONFIG_INSTALL_DIR etc/pdal/ CACHE PATH "sysconfig")
 include(CMakePackageConfigHelpers)
 
 set(PDAL_CONFIG_INCLUDE_DIRS
-  "${CMAKE_INSTALL_PREFIX}/include"
-  "${Boost_INCLUDE_DIRS}")
+  "${CMAKE_INSTALL_PREFIX}/include")
 set(PDAL_CONFIG_LIBRARY_DIRS
-  "${CMAKE_INSTALL_PREFIX}/lib"
-  "${Boost_LIBRARY_DIRS}")
+  "${CMAKE_INSTALL_PREFIX}/lib")
 
 configure_package_config_file(
   PDALConfig.cmake.in
diff --git a/cmake/ctest.cmake b/cmake/ctest.cmake
new file mode 100644
index 0000000..a8382aa
--- /dev/null
+++ b/cmake/ctest.cmake
@@ -0,0 +1,24 @@
+#
+# CTEST support
+#
+if(ENABLE_CTEST)
+    if (WITH_TESTS)
+        message(STATUS
+            "Enable CTest to support submissions of results to CDash at http://cdash.org")
+        cmake_minimum_required(VERSION 2.8.0)
+        #
+        # Dashboard has been prepared for experiments
+        # http://my.cdash.org/index.php?project=PDAL
+        #
+        include(CTest)
+        message(STATUS
+            "Enable CTest to support submissions of results to CDash at http://cdash.org - done")
+        #
+        # Define "make check" as alias for "make test"
+        #
+        ADD_CUSTOM_TARGET(check COMMAND ctest)
+    else()
+        message(WARNING
+            "CTest support requested but WITH_TESTS option not specified to build of PDAL unit tests")
+    endif()
+endif()
diff --git a/cmake/gdal.cmake b/cmake/gdal.cmake
index 4f1a148..613aa35 100644
--- a/cmake/gdal.cmake
+++ b/cmake/gdal.cmake
@@ -1,7 +1,7 @@
 #
 # GDAL/OGR support (required)
 #
-find_package(GDAL QUIET 1.9.0)
+find_package(GDAL 1.9.0)
 set_package_properties(GDAL PROPERTIES TYPE REQUIRED
     PURPOSE "Provides general purpose raster, vector, and reference system support")
 if (GDAL_FOUND)
diff --git a/cmake/geos.cmake b/cmake/geos.cmake
index b3a4aa3..90b79d9 100644
--- a/cmake/geos.cmake
+++ b/cmake/geos.cmake
@@ -1,18 +1,8 @@
 #
-# GEOS (optional)
+# GEOS (required)
 #
 find_package(GEOS QUIET 3.3)
-set_package_properties(GEOS PROPERTIES TYPE OPTIONAL
+set_package_properties(GEOS PROPERTIES TYPE REQUIRED
     PURPOSE "Provides general purpose geometry support")
-if (GEOS_FOUND)
-    find_file(GEOS_VERSION_H version.h "${GEOS_INCLUDE_DIR}/geos")
-    if ("${GEOS_VERSION_H}" STREQUAL "GEOS_VERSION_H-NOTFOUND")
-        set(GEOS_LIBRARY "")
-        set(GEOS_FOUND FALSE)
-    else()
-        include_directories("${GEOS_INCLUDE_DIR}")
-        set(PDAL_HAVE_GEOS 1)
-    endif()
-else()
-    set(GEOS_LIBRARY "")
-endif()
+
+include_directories("${GEOS_INCLUDE_DIR}")
diff --git a/cmake/macros.cmake b/cmake/macros.cmake
index 578f97e..295f48f 100644
--- a/cmake/macros.cmake
+++ b/cmake/macros.cmake
@@ -78,9 +78,6 @@ endmacro(PDAL_ADD_LIBRARY)
 macro(PDAL_ADD_EXECUTABLE _name)
     add_executable(${_name} ${ARGN})
 
-    # must link explicitly against boost.
-    target_link_libraries(${_name} ${Boost_LIBRARIES})
-
     set(PDAL_EXECUTABLES ${PDAL_EXECUTABLES} ${_name})
     install(TARGETS ${_name}
         EXPORT PDALTargets
@@ -114,6 +111,10 @@ macro(PDAL_ADD_PLUGIN _name _type _shortname)
         ${PDAL_ADD_PLUGIN_LINK_WITH})
 
     set_property(TARGET ${${_name}} PROPERTY FOLDER "Plugins/${_type}")
+    set_target_properties(${${_name}} PROPERTIES
+        VERSION "${PDAL_BUILD_VERSION}"
+        SOVERSION "${PDAL_API_VERSION}"
+        CLEAN_DIRECT_OUTPUT 1)
 
     install(TARGETS ${${_name}}
         RUNTIME DESTINATION ${PDAL_BIN_INSTALL_DIR}
@@ -151,11 +152,15 @@ macro(PDAL_ADD_TEST _name)
     target_link_libraries(${_name} ${PDAL_BASE_LIB_NAME} gtest
         ${PDAL_ADD_TEST_LINK_WITH})
     add_test(NAME ${_name} COMMAND "${PROJECT_BINARY_DIR}/bin/${_name}" WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/..")
-    set_property(TEST ${_name} PROPERTY ENVIRONMENT
-      # Ensure plugins are loaded from build dir
-      # https://github.com/PDAL/PDAL/issues/840
-      "PDAL_DRIVER_PATH=${PROJECT_BINARY_DIR}/lib"
-    )
+    # Ensure plugins are loaded from build dir
+    # https://github.com/PDAL/PDAL/issues/840
+    if (WIN32)
+      set_property(TEST ${_name} PROPERTY ENVIRONMENT
+        "PDAL_DRIVER_PATH=${PROJECT_BINARY_DIR}/bin")
+    else()
+      set_property(TEST ${_name} PROPERTY ENVIRONMENT
+        "PDAL_DRIVER_PATH=${PROJECT_BINARY_DIR}/lib")
+    endif()
 endmacro(PDAL_ADD_TEST)
 
 ###############################################################################
@@ -223,7 +228,11 @@ endmacro(DISSECT_VERSION)
 macro(SET_INSTALL_DIRS)
   string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
   if (NOT DEFINED PDAL_LIB_INSTALL_DIR)
-    set(PDAL_LIB_INSTALL_DIR lib)
+      if (DEFINED CMAKE_INSTALL_LIBDIR)
+          set(PDAL_LIB_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}")
+      else()
+          set(PDAL_LIB_INSTALL_DIR "lib")
+      endif()
   endif ()
     set(PDAL_INCLUDE_INSTALL_ROOT "include/")
     set(PDAL_INCLUDE_INSTALL_DIR
diff --git a/cmake/modules/FindGDAL.cmake b/cmake/modules/FindGDAL.cmake
index 143a0b6..2945192 100644
--- a/cmake/modules/FindGDAL.cmake
+++ b/cmake/modules/FindGDAL.cmake
@@ -4,7 +4,7 @@
 # On success, the macro sets the following variables:
 # GDAL_FOUND       = if the library found
 # GDAL_LIBRARY     = full path to the library
-# GDAL_INCLUDE_DIR = where to find the library headers 
+# GDAL_INCLUDE_DIR = where to find the library headers
 #
 # On Unix, macro sets also:
 # GDAL_VERSION_STRING = human-readable string containing version of the library
@@ -123,7 +123,7 @@ IF(WIN32)
     IF(MSVC)
 
         FIND_PATH(GDAL_INCLUDE_DIR
-            NAMES gdal.h 
+            NAMES gdal.h
             PATH_PREFIXES gdal gdal-1.6
             PATHS
             "${OSGEO4W_ROOT_DIR}/apps/gdal-dev/include"
@@ -138,14 +138,14 @@ IF(WIN32)
             "$ENV{LIB_DIR}/lib"
             /usr/lib
             c:/msys/local/lib
-            "${OSGEO4W_ROOT_DIR}/apps/gdal-dev/lib"            
+            "${OSGEO4W_ROOT_DIR}/apps/gdal-dev/lib"
             ${OSGEO4W_ROOT_DIR}/lib)
-        
+
         IF(GDAL_LIBRARY)
             SET(GDAL_LIBRARY;odbc32;odbccp32 CACHE STRING INTERNAL)
         ENDIF()
     ENDIF(MSVC)
-  
+
 ELSEIF(UNIX)
 
     # Try to use framework on Mac OS X
@@ -154,32 +154,33 @@ ELSEIF(UNIX)
     ENDIF()
 
     # Try to use GDAL_HOME location if specified
-    IF($ENV{GDAL_HOME})
+    IF(DEFINED ENV{GDAL_HOME})
         SET(GDAL_CONFIG_PREFER_PATH
             "$ENV{GDAL_HOME}/bin" CACHE STRING "Search for gdal-config program in preferred location")
     ENDIF()
 
     # Try to use OSGeo4W installation
-    IF($ENV{OSGEO4W_HOME})
+    IF(DEFINED ENV{OSGEO4W_HOME})
         SET(GDAL_CONFIG_PREFER_OSGEO4W_PATH
             "$ENV{OSGEO4W_HOME}/bin" CACHE STRING "Search for gdal-config program provided by OSGeo4W")
     ENDIF()
 
     # Try to use FWTools installation
-    IF($ENV{FWTOOLS_HOME})
+    IF(DEFINED ENV{FWTOOLS_HOME})
         SET(GDAL_CONFIG_PREFER_FWTOOLS_PATH
             "$ENV{FWTOOLS_HOME}/bin_safe" CACHE STRING "Search for gdal-config program provided by FWTools")
     ENDIF()
 
     FIND_PROGRAM(GDAL_CONFIG gdal-config
+        HINTS
         ${GDAL_CONFIG_PREFER_PATH}
         ${GDAL_CONFIG_PREFER_OSGEO4W_PATH}
         ${GDAL_CONFIG_PREFER_FWTOOLS_PATH}
         ${GDAL_MAC_PATH}
         /usr/local/bin/
         /usr/bin/)
-            
-    IF(GDAL_CONFIG) 
+
+    IF(GDAL_CONFIG)
 
         # TODO: Replace the regex hacks with CMake version comparison feature:
         # if(version1 VERSION_LESS version2)
@@ -191,7 +192,7 @@ ELSEIF(UNIX)
         STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1" GDAL_VERSION_MAJOR "${GDAL_VERSION_STATED}")
         STRING(REGEX REPLACE "([0-9]+)\\.(/^\\d{1,2}$/)\\.([0-9]+)" "\\2" GDAL_VERSION_MINOR "${GDAL_VERSION_STATED}")
         STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\3" GDAL_VERSION_PATCH "${GDAL_VERSION_STATED}")
-        
+
         # Check for GDAL version
         if (GDAL_FIND_VERSION)
             COMPARE_VERSION_STRINGS( "${GDAL_VERSION_STATED}" "${GDAL_FIND_VERSION}" version_result)
@@ -207,15 +208,15 @@ ELSEIF(UNIX)
         EXEC_PROGRAM(${GDAL_CONFIG} ARGS --prefix OUTPUT_VARIABLE GDAL_PREFIX)
 
         FIND_PATH(GDAL_INCLUDE_DIR
-            gdal.h 
+            gdal.h
             PATH_PREFIXES gdal
-            PATHS
+            HINTS
             ${GDAL_PREFIX}/include/gdal
             ${GDAL_PREFIX}/include
-            /usr/local/include 
+            /usr/local/include
             /usr/include)
 
-        # Extract link dirs for rpath  
+        # Extract link dirs for rpath
         EXEC_PROGRAM(${GDAL_CONFIG} ARGS --libs OUTPUT_VARIABLE GDAL_CONFIG_LIBS)
 
         # Split off the link dirs (for rpath)
@@ -245,7 +246,7 @@ ELSEIF(UNIX)
         ELSE()
             SET(GDAL_LIBRARY ${GDAL_LINK_DIRECTORIES}/lib${GDAL_LIB_NAME}.so CACHE STRING INTERNAL)
         ENDIF()
-      
+
     ELSE()
         MESSAGE("FindGDAL.cmake: gdal-config not found. Please set it manually: GDAL_CONFIG=${GDAL_CONFIG}")
     ENDIF(GDAL_CONFIG)
diff --git a/cmake/modules/FindJSONCPP.cmake b/cmake/modules/FindJSONCPP.cmake
index bcd30f6..39ab630 100644
--- a/cmake/modules/FindJSONCPP.cmake
+++ b/cmake/modules/FindJSONCPP.cmake
@@ -76,6 +76,7 @@ find_library(JSONCPP_LIBRARY
 	${_jsoncppnames}
 	PATHS
 	"${JSONCPP_ROOT_DIR}/libs"
+	/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}
 	PATH_SUFFIXES
 	${_pathsuffixes})
 
@@ -84,6 +85,7 @@ find_path(JSONCPP_INCLUDE_DIR
 	json/json.h
 	PATHS
 	"${JSONCPP_ROOT_DIR}"
+	/usr/include/jsoncpp
 	PATH_SUFFIXES
 	include)
 
diff --git a/cmake/python.cmake b/cmake/python.cmake
index dd0890f..2de7dcf 100644
--- a/cmake/python.cmake
+++ b/cmake/python.cmake
@@ -1,13 +1,14 @@
 #
 # Python
 #
-find_package(PythonInterp QUIET )
+find_package(PythonInterp QUIET)
 find_package(PythonLibs QUIET 2.4)
 set_package_properties(PythonInterp PROPERTIES TYPE REQUIRED)
 if(PYTHONLIBS_FOUND)
     set(CMAKE_REQUIRED_LIBRARIES "${PYTHON_LIBRARY}")
     include_directories(SYSTEM ${PYTHON_INCLUDE_DIR})
     add_definitions(-DHAVE_PYTHON=1)
+    add_definitions(-DPDAL_PYTHON_LIBRARY="${PYTHON_LIBRARY}")
     set(PDAL_HAVE_PYTHON 1)
 
     find_package(NumPy QUIET 1.5 REQUIRED)
diff --git a/cmake/spatialite.cmake b/cmake/spatialite.cmake
new file mode 100644
index 0000000..07c18e5
--- /dev/null
+++ b/cmake/spatialite.cmake
@@ -0,0 +1,10 @@
+#
+# SpatiaLite cmake configuration
+#
+
+include(FindPkgConfig)
+
+pkg_search_module(SPATIALITE spatialite>=4.2.0)
+if(SPATIALITE_FOUND)
+    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMOD_SPATIALITE")
+endif(SPATIALITE_FOUND)
diff --git a/cmake/test.cmake b/cmake/test.cmake
new file mode 100644
index 0000000..e81c52d
--- /dev/null
+++ b/cmake/test.cmake
@@ -0,0 +1,17 @@
+# TEST support
+#
+
+if (WITH_TESTS)
+  # Without this MS builds fail from attempting to handle too many args.
+  #
+  # This is fixed in trunk
+  # https://code.google.com/p/googletest/source/detail?r=675
+  # but for now, we need this fix
+  # http://stackoverflow.com/questions/12558327/google-test-in-visual-studio-2012
+  if (MSVC AND MSVC_VERSION EQUAL 1700)
+    add_definitions(/D _VARIADIC_MAX=10)
+  endif()
+
+  include_directories(${ROOT_DIR}/vendor/gtest-1.7.0/include
+      ${ROOT_DIR}/vendor/gtest-1.7.0)
+endif()
diff --git a/cmake/unix_compiler_options.cmake b/cmake/unix_compiler_options.cmake
index 79aca3b..5a77477 100644
--- a/cmake/unix_compiler_options.cmake
+++ b/cmake/unix_compiler_options.cmake
@@ -1,4 +1,4 @@
-set(PDAL_COMMON_CXX_FLAGS "-Wextra -Wall -Wno-unused-parameter -Wno-unused-variable -Wpointer-arith -Wcast-align -Wcast-qual -Wredundant-decls -Wno-long-long -Wno-unknown-pragmas -isystem /usr/local/include"
+set(PDAL_COMMON_CXX_FLAGS "-Wextra -Wall -Wno-unused-parameter -Wno-unused-variable -Wpointer-arith -Wcast-align -Wcast-qual -Wredundant-decls -Wno-long-long -Wno-unknown-pragmas -Wno-deprecated-declarations -isystem /usr/local/include"
 )
 
 if (${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
@@ -19,4 +19,4 @@ else()
     message(FATAL_ERROR "Unsupported C++ compiler")
 endif()
 
-set (CMAKE_CXX_FLAGS "${PDAL_COMMON_CXX_FLAGS} ${CXX_STANDARD}")
+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PDAL_COMMON_CXX_FLAGS} ${CXX_STANDARD}")
diff --git a/cmake/win32_compiler_options.cmake b/cmake/win32_compiler_options.cmake
index ffb91eb..d86271a 100644
--- a/cmake/win32_compiler_options.cmake
+++ b/cmake/win32_compiler_options.cmake
@@ -12,6 +12,8 @@ if (MSVC)
       set(PDAL_COMPILER_VC8 1)
     endif()
 
+    add_definitions(-DBOOST_ALL_NO_LIB)
+
     # check for MSVC 8+
     if (NOT (MSVC_VERSION VERSION_LESS 1400))
         add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
@@ -19,18 +21,17 @@ if (MSVC)
         add_definitions(-D_CRT_NONSTDC_NO_WARNING)
         add_definitions(-D_SCL_SECURE_NO_WARNINGS)
         add_definitions(-DNOMINMAX)
-        add_definitions(-DBOOST_LIB_TOOLSET="vc110")
-        add_definitions(-DBOOST_ALL_DYN_LINK)
 
         # Nitro makes use of Exception Specifications, which results in
         # numerous warnings when compiling in MSVC. We will ignore them for
         # now.
         add_definitions("/wd4290")
-	add_definitions("/wd4800")
+        add_definitions("/wd4800")
 
-        # Windows still warns about nameless struct/union, but we assume
-        # that all of our compilers support this
-        #add_definitions("/wd4201")
+        # Windows warns about integer narrowing like crazy and it's annoying.
+        # In most cases the programmer knows what they're doing.  A good
+        # static analysis tool would be better than turning this warning off.
+        add_definitions("/wd4267")
     endif()
 
     if (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
diff --git a/doc/_static/logo/dongle/back.ai b/doc/_static/logo/dongle/back.ai
deleted file mode 100644
index 9f4d00e..0000000
--- a/doc/_static/logo/dongle/back.ai
+++ /dev/null
@@ -1,10118 +0,0 @@
-%PDF-1.5
%����
-1 0 obj
<</Metadata 2 0 R/OCProperties<</D<</ON[6 0 R 65 0 R 123 0 R 181 0 R 218 0 R 276 0 R]/Order 277 0 R/RBGroups[]>>/OCGs[6 0 R 65 0 R 123 0 R 181 0 R 218 0 R 276 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<</Length 46206/Subtype/XML/Type/Metadata>>stream
-<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
-<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c014 79.156821, 2014/08/29-03:07:50        ">
-   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-      <rdf:Description rdf:about=""
-            xmlns:dc="http://purl.org/dc/elements/1.1/"
-            xmlns:xmp="http://ns.adobe.com/xap/1.0/"
-            xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/"
-            xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
-            xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
-            xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
-            xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/"
-            xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
-            xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
-            xmlns:stFnt="http://ns.adobe.com/xap/1.0/sType/Font#"
-            xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/"
-            xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
-         <dc:format>application/pdf</dc:format>
-         <dc:title>
-            <rdf:Alt>
-               <rdf:li xml:lang="x-default">Print</rdf:li>
-            </rdf:Alt>
-         </dc:title>
-         <xmp:MetadataDate>2014-12-22T13:49:47-06:00</xmp:MetadataDate>
-         <xmp:ModifyDate>2014-12-22T13:49:47-06:00</xmp:ModifyDate>
-         <xmp:CreateDate>2014-12-22T13:19:35-06:00</xmp:CreateDate>
-         <xmp:CreatorTool>Adobe Illustrator CC 2014 (Macintosh)</xmp:CreatorTool>
-         <xmp:Thumbnails>
-            <rdf:Alt>
-               <rdf:li rdf:parseType="Resource">
-                  <xmpGImg:width>256</xmpGImg:width>
-                  <xmpGImg:height>76</xmpGImg:height>
-                  <xmpGImg:format>JPEG</xmpGImg:format>
-                  <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgATAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQV [...]
-               </rdf:li>
-            </rdf:Alt>
-         </xmp:Thumbnails>
-         <xmpMM:InstanceID>uuid:b836aab4-72de-484d-94c9-62a12fb4a9b4</xmpMM:InstanceID>
-         <xmpMM:DocumentID>xmp.did:279b96da-73fd-4f18-a911-b0f92a8f1768</xmpMM:DocumentID>
-         <xmpMM:OriginalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</xmpMM:OriginalDocumentID>
-         <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
-         <xmpMM:DerivedFrom rdf:parseType="Resource">
-            <stRef:instanceID>uuid:d1c078a0-2746-42b2-b0d1-25aedff8fb1e</stRef:instanceID>
-            <stRef:documentID>xmp.did:1b6690ed-28a8-c141-9479-b6a9cf6be651</stRef:documentID>
-            <stRef:originalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</stRef:originalDocumentID>
-            <stRef:renditionClass>proof:pdf</stRef:renditionClass>
-         </xmpMM:DerivedFrom>
-         <xmpMM:History>
-            <rdf:Seq>
-               <rdf:li rdf:parseType="Resource">
-                  <stEvt:action>saved</stEvt:action>
-                  <stEvt:instanceID>xmp.iid:279b96da-73fd-4f18-a911-b0f92a8f1768</stEvt:instanceID>
-                  <stEvt:when>2014-12-22T13:19:35-06:00</stEvt:when>
-                  <stEvt:softwareAgent>Adobe Illustrator CC 2014 (Macintosh)</stEvt:softwareAgent>
-                  <stEvt:changed>/</stEvt:changed>
-               </rdf:li>
-            </rdf:Seq>
-         </xmpMM:History>
-         <illustrator:Type>Document</illustrator:Type>
-         <illustrator:StartupProfile>Print</illustrator:StartupProfile>
-         <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
-         <xmpTPg:HasVisibleTransparency>True</xmpTPg:HasVisibleTransparency>
-         <xmpTPg:NPages>1</xmpTPg:NPages>
-         <xmpTPg:MaxPageSize rdf:parseType="Resource">
-            <stDim:w>46.499639</stDim:w>
-            <stDim:h>15.998472</stDim:h>
-            <stDim:unit>Millimeters</stDim:unit>
-         </xmpTPg:MaxPageSize>
-         <xmpTPg:Fonts>
-            <rdf:Bag>
-               <rdf:li rdf:parseType="Resource">
-                  <stFnt:fontName>Helvetica-Bold</stFnt:fontName>
-                  <stFnt:fontFamily>Helvetica</stFnt:fontFamily>
-                  <stFnt:fontFace>Bold</stFnt:fontFace>
-                  <stFnt:fontType>TrueType</stFnt:fontType>
-                  <stFnt:versionString>10.0d1e1</stFnt:versionString>
-                  <stFnt:composite>False</stFnt:composite>
-                  <stFnt:fontFileName>Helvetica.dfont</stFnt:fontFileName>
-               </rdf:li>
-            </rdf:Bag>
-         </xmpTPg:Fonts>
-         <xmpTPg:PlateNames>
-            <rdf:Seq>
-               <rdf:li>Cyan</rdf:li>
-               <rdf:li>Magenta</rdf:li>
-               <rdf:li>Yellow</rdf:li>
-               <rdf:li>Black</rdf:li>
-            </rdf:Seq>
-         </xmpTPg:PlateNames>
-         <xmpTPg:SwatchGroups>
-            <rdf:Seq>
-               <rdf:li rdf:parseType="Resource">
-                  <xmpG:groupName>Default Swatch Group</xmpG:groupName>
-                  <xmpG:groupType>0</xmpG:groupType>
-                  <xmpG:Colorants>
-                     <rdf:Seq>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>White</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>Black</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>100.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>CMYK Red</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>CMYK Yellow</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>CMYK Green</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>100.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>CMYK Cyan</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>100.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>CMYK Blue</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>100.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>CMYK Magenta</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=15 M=100 Y=90 K=10</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>15.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>90.000000</xmpG:yellow>
-                           <xmpG:black>10.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=90 Y=85 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>90.000000</xmpG:magenta>
-                           <xmpG:yellow>85.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=80 Y=95 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>80.000000</xmpG:magenta>
-                           <xmpG:yellow>95.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=50 Y=100 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>50.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=35 Y=85 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>35.000000</xmpG:magenta>
-                           <xmpG:yellow>85.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=5 M=0 Y=90 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>5.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>90.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=20 M=0 Y=100 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>20.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=50 M=0 Y=100 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>50.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=75 M=0 Y=100 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>75.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=85 M=10 Y=100 K=10</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>85.000000</xmpG:cyan>
-                           <xmpG:magenta>10.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>10.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=90 M=30 Y=95 K=30</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>90.000000</xmpG:cyan>
-                           <xmpG:magenta>30.000000</xmpG:magenta>
-                           <xmpG:yellow>95.000000</xmpG:yellow>
-                           <xmpG:black>30.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=75 M=0 Y=75 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>75.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>75.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=80 M=10 Y=45 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>80.000000</xmpG:cyan>
-                           <xmpG:magenta>10.000000</xmpG:magenta>
-                           <xmpG:yellow>45.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=70 M=15 Y=0 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>70.000000</xmpG:cyan>
-                           <xmpG:magenta>15.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=85 M=50 Y=0 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>85.000000</xmpG:cyan>
-                           <xmpG:magenta>50.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=100 M=95 Y=5 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>100.000000</xmpG:cyan>
-                           <xmpG:magenta>95.000000</xmpG:magenta>
-                           <xmpG:yellow>5.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=100 M=100 Y=25 K=25</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>100.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>25.000000</xmpG:yellow>
-                           <xmpG:black>25.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=75 M=100 Y=0 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>75.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=50 M=100 Y=0 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>50.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=35 M=100 Y=35 K=10</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>35.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>35.000000</xmpG:yellow>
-                           <xmpG:black>10.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=10 M=100 Y=50 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>10.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>50.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=95 Y=20 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>95.000000</xmpG:magenta>
-                           <xmpG:yellow>20.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=25 M=25 Y=40 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>25.000000</xmpG:cyan>
-                           <xmpG:magenta>25.000000</xmpG:magenta>
-                           <xmpG:yellow>40.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=40 M=45 Y=50 K=5</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>40.000000</xmpG:cyan>
-                           <xmpG:magenta>45.000000</xmpG:magenta>
-                           <xmpG:yellow>50.000000</xmpG:yellow>
-                           <xmpG:black>5.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=50 M=50 Y=60 K=25</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>50.000000</xmpG:cyan>
-                           <xmpG:magenta>50.000000</xmpG:magenta>
-                           <xmpG:yellow>60.000000</xmpG:yellow>
-                           <xmpG:black>25.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=55 M=60 Y=65 K=40</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>55.000000</xmpG:cyan>
-                           <xmpG:magenta>60.000000</xmpG:magenta>
-                           <xmpG:yellow>65.000000</xmpG:yellow>
-                           <xmpG:black>40.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=25 M=40 Y=65 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>25.000000</xmpG:cyan>
-                           <xmpG:magenta>40.000000</xmpG:magenta>
-                           <xmpG:yellow>65.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=30 M=50 Y=75 K=10</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>30.000000</xmpG:cyan>
-                           <xmpG:magenta>50.000000</xmpG:magenta>
-                           <xmpG:yellow>75.000000</xmpG:yellow>
-                           <xmpG:black>10.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=35 M=60 Y=80 K=25</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>35.000000</xmpG:cyan>
-                           <xmpG:magenta>60.000000</xmpG:magenta>
-                           <xmpG:yellow>80.000000</xmpG:yellow>
-                           <xmpG:black>25.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=40 M=65 Y=90 K=35</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>40.000000</xmpG:cyan>
-                           <xmpG:magenta>65.000000</xmpG:magenta>
-                           <xmpG:yellow>90.000000</xmpG:yellow>
-                           <xmpG:black>35.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=40 M=70 Y=100 K=50</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>40.000000</xmpG:cyan>
-                           <xmpG:magenta>70.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>50.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=50 M=70 Y=80 K=70</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>50.000000</xmpG:cyan>
-                           <xmpG:magenta>70.000000</xmpG:magenta>
-                           <xmpG:yellow>80.000000</xmpG:yellow>
-                           <xmpG:black>70.000000</xmpG:black>
-                        </rdf:li>
-                     </rdf:Seq>
-                  </xmpG:Colorants>
-               </rdf:li>
-               <rdf:li rdf:parseType="Resource">
-                  <xmpG:groupName>Grays</xmpG:groupName>
-                  <xmpG:groupType>1</xmpG:groupType>
-                  <xmpG:Colorants>
-                     <rdf:Seq>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=100</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>100.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=90</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>89.999400</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=80</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>79.998800</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=70</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>69.999700</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=60</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>59.999100</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=50</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>50.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=40</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>39.999400</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=30</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>29.998800</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=20</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>19.999700</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=10</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>9.999100</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=5</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>4.998800</xmpG:black>
-                        </rdf:li>
-                     </rdf:Seq>
-                  </xmpG:Colorants>
-               </rdf:li>
-               <rdf:li rdf:parseType="Resource">
-                  <xmpG:groupName>Brights</xmpG:groupName>
-                  <xmpG:groupType>1</xmpG:groupType>
-                  <xmpG:Colorants>
-                     <rdf:Seq>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=100 Y=100 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=75 Y=100 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>75.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=10 Y=95 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>10.000000</xmpG:magenta>
-                           <xmpG:yellow>95.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=85 M=10 Y=100 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>85.000000</xmpG:cyan>
-                           <xmpG:magenta>10.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=100 M=90 Y=0 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>100.000000</xmpG:cyan>
-                           <xmpG:magenta>90.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=60 M=90 Y=0 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>60.000000</xmpG:cyan>
-                           <xmpG:magenta>90.000000</xmpG:magenta>
-                           <xmpG:yellow>0.003100</xmpG:yellow>
-                           <xmpG:black>0.003100</xmpG:black>
-                        </rdf:li>
-                     </rdf:Seq>
-                  </xmpG:Colorants>
-               </rdf:li>
-            </rdf:Seq>
-         </xmpTPg:SwatchGroups>
-         <pdf:Producer>Adobe PDF library 10.01</pdf:Producer>
-      </rdf:Description>
-   </rdf:RDF>
-</x:xmpmeta>
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                           
-<?xpacket end="w"?>
endstream
endobj
3 0 obj
<</Count 1/Kids[8 0 R]/Type/Pages>>
endobj
8 0 obj
<</ArtBox[1.73402 0.134171 128.275 45.2162]/BleedBox[0.0 0.0 131.81 45.35]/Contents 278 0 R/Group 279 0 R/LastModified(D:20141222134947-06'00')/MediaBox[0.0 0.0 131.81 45.35]/Parent 3 0 R/PieceInfo<</Illustrator 280 0 R>>/Resources<</ColorSpace<</CS0 281 0 R>>/ExtGState<</GS0 282 0 R>>/Font<</TT0 275 0 R>>/ProcSet[/PDF/Text]/Properties<</MC0 276 0 R>>/XObject<</Fm0 283 0 R>>>>/Thumb 284 0 R/TrimBox[0.0 0.0 131.81 45.35]/Type/Page>>
endobj
278 0 obj
<</Filter/FlateDecode/Length 175>>stream
-H����
-�@���s�C���n���:IH
]�������g�!�������?rcQ�0I-���A()\�[_�[H
H�%,=�s�/[��!�=H�
�;���E�1�E&�@
^R���ٞ�`w�ڹ;C��
.bf�``����W/��r���	��ߩ5�UC�vC�,�X�]� �,J>
endstream
endobj
279 0 obj
<</CS 285 0 R/I false/K false/S/Transparency>>
endobj
284 0 obj
<</BitsPerComponent 8/ColorSpace 286 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 5/Length 42/Width 16>>stream
-8;Xp,*<rlN['d<Fis%bO#(-c.ng`7p!sBG@)KIgu~>
endstream
endobj
286 0 obj
[/Indexed/DeviceRGB 255 287 0 R]
endobj
287 0 obj
<</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
-8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
-b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
-E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
-6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
-VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
-PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
-l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
endstream
endobj
283 0 obj
<</BBox[1.73402 42.5696 75.7423 5.08058]/Group 288 0 R/Length 5646/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 289 0 R/CS1 281 0 R>>/ExtGState<</GS0 290 0 R/GS1 291 0 R/GS2 282 0 R>>/ProcSet[/PDF/ImageC]/Shading<</Sh0 292 0 R>>/XObject<</Im0 293 0 R>>>>/Subtype/Form>>stream
-q
-/GS0 gs
-74.0078095 0 0 37.4888263 1.7340353 5.0807957 cm
-/Im0 Do
-Q
-q
-38.946 40.568 m
-38.946 20.939 l
-38.458 22.155 37.721 23.253 36.727 24.241 c
-36.727 24.241 l
-34.751 26.177 32.342 27.152 29.508 27.152 c
-29.508 27.152 l
-26.688 27.152 24.296 26.19 22.333 24.267 c
-22.333 24.267 l
-21.267 23.223 20.497 22.051 20.011 20.766 c
-20.011 20.766 l
-19.837 22.661 19.317 24.095 18.442 25.064 c
-18.442 25.064 l
-17.155 26.455 15.439 27.152 13.294 27.152 c
-13.294 27.152 l
-11.409 27.152 9.689 26.45 8.129 25.046 c
-8.129 25.046 l
-8.129 40.568 l
-3.735 40.568 l
-3.735 7.628 l
-8.129 7.628 l
-8.129 16.814 l
-8.129 19.153 8.428 20.809 9.039 21.77 c
-9.039 21.77 l
-9.663 22.72 10.747 23.191 12.281 23.191 c
-12.281 23.191 l
-13.476 23.191 14.339 22.849 14.872 22.161 c
-14.872 22.161 l
-15.418 21.485 15.695 20.38 15.695 18.859 c
-15.695 18.859 l
-15.695 7.628 l
-20.079 7.628 l
-20.079 13.364 l
-20.56 12.118 21.294 10.998 22.281 10.011 c
-22.281 10.011 l
-24.205 8.06 26.584 7.081 29.43 7.081 c
-29.43 7.081 l
-32.303 7.081 34.734 8.039 36.71 9.95 c
-36.71 9.95 l
-37.715 10.935 38.455 12.042 38.946 13.27 c
-38.946 13.27 l
-38.946 7.628 l
-43.331 7.628 l
-43.331 9.621 l
-45.059 7.931 47.019 7.081 49.216 7.081 c
-49.216 7.081 l
-51.815 7.081 53.969 8.035 55.671 9.933 c
-55.671 9.933 l
-56.566 10.93 57.227 12.067 57.656 13.339 c
-57.656 13.339 l
-57.747 12.683 57.881 12.126 58.064 11.684 c
-58.064 11.684 l
-58.441 10.696 59.086 9.807 59.996 9.014 c
-59.996 9.014 l
-61.477 7.727 63.354 7.081 65.629 7.081 c
-65.629 7.081 l
-67.917 7.081 69.806 7.727 71.287 9.014 c
-71.287 9.014 l
-72.185 9.807 72.813 10.696 73.177 11.684 c
-73.177 11.684 l
-73.554 12.788 73.741 14.106 73.741 15.626 c
-73.741 15.626 l
-73.741 26.624 l
-69.355 26.624 l
-69.355 15.722 l
-69.355 12.576 68.112 11.007 65.629 11.007 c
-65.629 11.007 l
-63.146 11.007 61.911 12.576 61.911 15.722 c
-61.911 15.722 l
-61.911 26.624 l
-57.517 26.624 l
-57.517 21.328 l
-57.093 22.415 56.481 23.4 55.688 24.284 c
-55.688 24.284 l
-53.986 26.195 51.854 27.152 49.293 27.152 c
-49.293 27.152 l
-47.07 27.152 45.085 26.242 43.331 24.422 c
-43.331 24.422 l
-43.331 40.568 l
-h
-44.562 12.697 m
-43.574 13.802 43.079 15.28 43.079 17.126 c
-43.079 17.126 l
-43.079 18.92 43.578 20.376 44.579 21.494 c
-44.579 21.494 l
-45.592 22.624 46.902 23.191 48.514 23.191 c
-48.514 23.191 l
-50.021 23.191 51.282 22.603 52.283 21.433 c
-52.283 21.433 l
-53.271 20.289 53.765 18.807 53.765 16.988 c
-53.765 16.988 l
-53.765 15.271 53.254 13.841 52.24 12.697 c
-52.24 12.697 l
-51.238 11.566 49.982 11.007 48.461 11.007 c
-48.461 11.007 l
-46.85 11.007 45.55 11.566 44.562 12.697 c
-25.401 12.679 m
-24.387 13.785 23.876 15.288 23.876 17.186 c
-23.876 17.186 l
-23.876 18.954 24.395 20.393 25.435 21.511 c
-25.435 21.511 l
-26.475 22.629 27.832 23.191 29.508 23.191 c
-29.508 23.191 l
-31.211 23.191 32.585 22.629 33.625 21.511 c
-33.625 21.511 l
-34.652 20.406 35.167 18.937 35.167 17.091 c
-35.167 17.091 l
-35.167 15.245 34.652 13.767 33.625 12.662 c
-33.625 12.662 l
-32.598 11.558 31.224 11.007 29.508 11.007 c
-29.508 11.007 l
-27.805 11.007 26.441 11.562 25.401 12.679 c
-W n
-q
-0 g
-/GS1 gs
-0.2773154 0 0 -0.2773154 -16.4739784 130.842298 cm
-BX /Sh0 sh EX Q
-Q
-q
-1.734 42.569 74.008 -37.489 re
-W n
-/CS1 CS 0 0 0 0  SCN
-0.622 w 4 M 0 j 0 J []0 d 
-/GS2 gs
-q 1 0 0 1 3.7353 40.5684 cm
-0 0 m
-0 -32.94 l
-4.394 -32.94 l
-4.394 -23.754 l
-4.394 -21.415 4.693 -19.759 5.304 -18.797 c
-5.928 -17.848 7.011 -17.376 8.545 -17.376 c
-9.741 -17.376 10.603 -17.718 11.136 -18.407 c
-11.682 -19.083 11.96 -20.188 11.96 -21.709 c
-11.96 -32.94 l
-16.344 -32.94 l
-16.344 -27.203 l
-16.825 -28.45 17.559 -29.57 18.546 -30.557 c
-20.47 -32.507 22.849 -33.486 25.695 -33.486 c
-28.568 -33.486 30.999 -32.529 32.975 -30.618 c
-33.98 -29.633 34.72 -28.526 35.211 -27.298 c
-35.211 -32.94 l
-39.596 -32.94 l
-39.596 -30.947 l
-41.325 -32.637 43.283 -33.486 45.48 -33.486 c
-48.079 -33.486 50.233 -32.533 51.937 -30.635 c
-52.831 -29.638 53.493 -28.501 53.921 -27.229 c
-54.012 -27.885 54.146 -28.442 54.328 -28.884 c
-54.705 -29.872 55.351 -30.76 56.26 -31.554 c
-57.742 -32.841 59.618 -33.486 61.894 -33.486 c
-64.182 -33.486 66.07 -32.841 67.552 -31.554 c
-68.449 -30.76 69.078 -29.872 69.442 -28.884 c
-69.819 -27.78 70.005 -26.462 70.005 -24.942 c
-70.005 -13.944 l
-65.62 -13.944 l
-65.62 -24.846 l
-65.62 -27.992 64.377 -29.561 61.894 -29.561 c
-59.411 -29.561 58.176 -27.992 58.176 -24.846 c
-58.176 -13.944 l
-53.782 -13.944 l
-53.782 -19.239 l
-53.358 -18.152 52.746 -17.168 51.954 -16.284 c
-50.25 -14.373 48.119 -13.416 45.558 -13.416 c
-43.335 -13.416 41.35 -14.325 39.596 -16.145 c
-39.596 0 l
-35.211 0 l
-35.211 -19.629 l
-34.723 -18.412 33.986 -17.314 32.992 -16.327 c
-31.016 -14.39 28.607 -13.416 25.773 -13.416 c
-22.952 -13.416 20.561 -14.378 18.597 -16.301 c
-17.532 -17.345 16.762 -18.517 16.275 -19.802 c
-16.101 -17.907 15.582 -16.473 14.707 -15.504 c
-13.42 -14.113 11.704 -13.416 9.559 -13.416 c
-7.674 -13.416 5.954 -14.118 4.394 -15.522 c
-4.394 0 l
-0 0 l
-h
-25.773 -17.376 m
-27.476 -17.376 28.849 -17.939 29.89 -19.057 c
-30.917 -20.162 31.432 -21.631 31.432 -23.477 c
-31.432 -25.323 30.917 -26.801 29.89 -27.905 c
-28.863 -29.01 27.489 -29.561 25.773 -29.561 c
-24.07 -29.561 22.706 -29.006 21.665 -27.888 c
-20.652 -26.783 20.141 -25.279 20.141 -23.381 c
-20.141 -21.614 20.661 -20.175 21.7 -19.057 c
-22.74 -17.939 24.096 -17.376 25.773 -17.376 c
-h
-44.778 -17.376 m
-46.286 -17.376 47.547 -17.965 48.548 -19.135 c
-49.536 -20.279 50.03 -21.761 50.03 -23.58 c
-50.03 -25.297 49.518 -26.726 48.504 -27.87 c
-47.503 -29.002 46.247 -29.561 44.726 -29.561 c
-43.114 -29.561 41.814 -29.002 40.826 -27.87 c
-39.838 -26.766 39.344 -25.288 39.344 -23.442 c
-39.344 -21.648 39.843 -20.192 40.844 -19.074 c
-41.857 -17.943 43.166 -17.376 44.778 -17.376 c
-h
-S
-Q
-Q
-
endstream
endobj
288 0 obj
<</I true/K false/S/Transparency/Type/Group>>
endobj
293 0 obj
<</BitsPerComponent 8/ColorSpace 289 0 R/DecodeParms<</BitsPerComponent 4/Colors 1/Columns 1686>>/Filter/FlateDecode/Height 854/Intent/RelativeColorimetric/Length 136474/Name/X/SMask 294 0 R/Subtype/Image/Type/XObject/Width 1686>>stream
-H��kn�HFg��OV��h~�A"V�U�'�AYsU��
H��!�G�Ψc������?�\�4W���;0�!���+��7�Nx�A���f��%�4sہ���n\��y���O���\m�C!�j_
�Y�:ᑸP#1Dn����,����:��ސ?RD
b·ˢ-��}S���V�q�H77d!����I��`W1"ިvs�A`�4�f���i<Ls�A�+�n�Z��
�sډt���!��j��L��~7�p{F��#E�ʌ.���j7b�ܯG&��	��C����[
��~m���{}���������+��3dًэ	��I
~8���9e^�,/�{��q���L��~E��fz��"ubt��!}E�
YJ�����qN��n}���1��/
�H'|/_�QEnaH-��x��o�V6�O4Ʊ��3�~N<��9��~M���L�l�\���P��+�`E�0�vi��$7b�8�$.�����������htI��ӳ�M�-����k�

�}���0j
7)L����Ly�U��>M�F���oJ��\l�bԐ��e�إ�ߔ ܄�C�
-GIb��6'�j��D��]�V��V<Ҏ�`�K"�07S������Y��\4$��r�|��槛"�l��
-G��ll{T���϶
-�|.Mm����� J�p�-x�Q�(H.F72Đ"m���D]��ғ"�,&���IBߖd�FU��J��NAV�����k��%�N��3�M��FA�1
-��!�3dy֐g1D�Q
�k����q�H7V
j�%���-����6�wV;/҉sŒ�\JN�$J�Udh�W���8u
��.Mei��%��I$��
mC� Po at f�^�{?'�l�X��K(]$YfgT��	��I��71���f�Daj�䖛"�4.GM�‘oM�Q6��@J�:�{�>��z�����A��d��9a&��ޓW��6h�6p�6��
��"#�d�!�3d)�?��q�.J�q�I(
�ƶ�h �F�#��}�>�
-�z 
x�a�9���A�N��z��Q��
�ī��Ć|R�Q�R8C
-�ZCl�r`�("<0��g�q�$�����k��&�n�4˚�ɲ��.���
˲4�����
���"�0��.��fI���4�H0ۨI��h�A��!I���-��@��"�"�"�)kHAe�:惉�D璙���oM�N_��
�Ɓp�$�
t{�lp�edX�}� (�=�ټ��ߒvt1Q�V�%��t�%QN��n�\�
E�gۚ�I�"iV�5$��!��	�O7�%w.#�M�a��Q��x�ܤ�|� �i���
��t�D;m��L.L�K ݑ���Y
-��"�p':_;%;ێn�9C@��o�EC��e
ټ���3�%��Œ71DxT����t�3�5�(T�I"�@6-ݥ0��Z�u��4]�/rz>A�{�&*���ueE���8v�%���
����s��8J4ۂ&�!M6Ê���R�!ӊԨH�Mi��.���,�?�ޥ��(��(�M�
�Iݒ}�����L�$���J����8ޥibP��:'�r[�gI���`��R;�\��T$Mw�U�zC��!�t�eBE�r
��02܄��D����
-��h��R�@6�,M�@�T��K��=��LP>4�Ԇ��Dc�K�BYB�:�����Bא]J�(�l�&�j#C@�?C��C&	
AE N
-�D��t{�.ѹf���$��X��K0�8�$�$�Yb�@30��u�$I����o`
-�sumPC�ۄiRqk
tɞKA��)�$�	�e���d^�"v�ѝD����@��@V���6�aC@
-*m"C L8��^z-�\C�h����dl��e�	�Ϩr`\��
D�k
-�ř�
�ge鯥�<��+�( N���
jg�˶��%�n�R�%�$U�L��p�eE�Mi�����F�mG�c
��.�Ơ!�tӍ���K�%6�
7���д_�S'J��x\�Q*J2G ��ohOAZuum&�yc����6�w�.1d
v��%����x
-.;Ήu����h���Q��P�٦�I1
K<� H8�0D�7�bC@6�M7�,74�Mǐ��5�ed��!�#V���V���30�h
�Ip&�p�(K쑩@��v]�4
�<�0��&��)�����*L��w&��K��K�,- K�TI�#c�m\J��lۖ�}�W�6�lYe�*q�dސE�o�
G:��h�v	u	��K����Аg1DxdU:����@<��8j&)ݣv�����kir�� ^J���T�o�#��V�D�8Kd�x�LA��pG&v��^Jū�ly�m�W[R�5�J�\<9+r�!5R�!n�=M7����K
�,�-
��ߞ |��9�
GI����(�
4)��|,iS�n`[E��%K�K44˒��<�����^�8���e��3'�N�$ܗ^��VŗDI�
ζ]��&�^+���F��"�1do
)�!%n�\�
,��›)ۼ+���%�AUns�=A�<�*�
��K�f`��ѱT$i
-��m �
o�Á^u ���o�n��d�ӱT$� �Ga�JvХdk�ӯ���*���gI�$ܙ~��ݶZG
��F�gۮ�ՆI/��	�)r��r8��8C�%O�
ɒm
'Z������MyC�J£㿿�S	�����5�KIg
6�H�
|C����J�!�tLA��p
-��0�i�]�1�YRA�VK����$U��p��e]G�uTT1D��}�)�k4�v	6)�x2�4aȴ"�X���)
L�%<����,E���5D�$<4���D;p���yd�hB��Q%nR�I�[	�%�ix��[�
?F6h
z�%�1�<N)K��M�e�^�KSp���8'܉�!���jMQھj�R�8��M*MdX$�}ٛ+
9

E(LF���T�,mt��mm��"��rje���R�(���X����7
HS���8���ő�,�D���e����,�^*r�����f�*i
-�s/F��M�J�����j
��~ۖ�\S�r��lSФ��-k�=r�ӧcȴ"����dP&�n�%�
��� K�p�֫;�"TD
�g�\v�F�(z�����X3�"B�
����z������u�9E��v�"@@��� ��pe���7����JB�
����I�� Ni[��o�6�
�5\�]7�c���
-����:�jjB�p�A�K����kɚ
�����Z^�#+}K̥��]rFd�۾���b�R�!��4�!�
W��M(�"����SDFB����LH�xÃ���iU�T9�����z���I��wf�:p�Ҕ��������3�2�b��JMC��D[ i�[�v
-]x[��S �'1y�f}]iU:�J{ZK�N�F��ű�]�Rb.ݝ�BO%���Ô�nsݦ�r��TH�j�#%���BR D>�
D���f1�jx��J:%
k�
�&nEB��n��t~7V"��"rF�Z慴��e���\��$�i���X���HF��
� y�6�AU;֒�g1�_ƒ^�Rb.ݝ��JbFd�T�%u��FR��$>8۰��ڼg#�KB:��HL�5
m%�K��?q�	
-��*�@�E+�!�
���}z�ȝ9�@ '�NR֥�R���D
9�i���fB �z��rB��O&~��
�д�vD���A�A9kIZ��tH��|%-��c�)A��w�&���DݖQ�u�ܫ=����$)U�RmPn��Ը[	��E�!� rKH�=�y��4}�QK�
n]pb
K�p{J��{�c���Jbxr�� �,`���j�3���D%���������S?o%PG�s!BG-��I���2�cia��JOO�I��7�����JS���A�t�$�RAG���9�!B�O
"��9��B���A���/j��p��5;7K����=��Z�
-9er���ЁKR�l@��N"��O�<
8����w���a��B�5�;�A����с�(9�9�ɦ��tJVJw��h�#2L4�J�J�2/�.���
ʶv!����:"��3!�nx8"��T)�p˯�m��V�pKVJ��w�R&Č\��T�ܩ

���� ��,�k�8.�m(���m���c�U#c��E�4k�i�)Xh������4a,y�}i,%+����X�����[1ȵp�2N�PP����/%g|
���������!���B�y	�ԍ�����*�n�BK�q,��Ip��	IVJ���X)N%}��a*mg��w`�g)q��ڙ7 ���,���?���w~�|	���k�"t-”��`%�^���m�DV�̭����ᮬ�b+i��$7���o�6L�Ңܜ���7�xʶ�g2.�
~��L�k!d����\2���n����;ߖK��N
!�J�
�n���+1r��T���t�t��R"�:GJ"v#��������"&����+��T�Қ��Xs
-�I���V�J��s�V@�%��6����*�P�Jm�u����9\!r&�
��z�K��n���p�ǒ
-K��_X$+�{�c+}[��@n�B����X]X W[�@�h)�
D��o6�
�:
�>������Y�c�~�� i	k��Б��!�0�잘�X�`�ʹ�V������b���W�m���J�6WS��>$mÄ��
��&"�7�0!�BF"�AHKs���
��SU
K6W>e�R��Ƅ|KVJ��w�R��
�k '��U�##��r6]׷��ͼ7�fa��M��������� 
cG)XY����5s�;sY�R�{ܵ�����$7Η�n3����MER�B�AJ-�ۇ3!��Y9r��=ҭ��>tݢ��}�)�j�%UT���v�m�X)KVJ��wm��F.���	9���9;��zxil�#�͸!�1��������C<�XM$�~ķj��Z�`�T��t4�T��+�0�JVJw��h��4L�J�3Nr���m�RM|��Z&�FB�mRD����,�
L�D����`/Q����
�h��-!�J�
�.VZ�C�!XY���ru�bBJD
�4�
p�� [...]
-"W�
gB�Ä�„@Kn�#�臷��9�ņ�V�HH�R�Ǽh��
-�=G+��
�8 �jI/;*ȵ��
=��
��i��t���~	߁�4� ��e-51��1�0�
-E�io�[g�h_^���U�R�?+��J//����
�Ƚ6�)Ua���-|�IJ@�6�
"����`/�]G����p����5�%U6��d�U�m��[$$Y)�cލ��%�rV?��	���QJ �0D���[D�x<����G~��-b/
�YK
�k�>נ;��0�J]V��.����S�R��ܭ�N��6Xi�B�urO݆j���[��4���oi�`�L��fD�_B$����
m���t7gj+�ѶVv�����J�d�t|�� $|j�+��j����U�9U}D.f�4�3p?ގ���o��y<c��@18��ơ��3�8�%�e%g��w�Y�3sY�)!���^�W����Q��J��z�Ke�ʹ��Zs�y�R
J���ۏ����W�q\�4"#�C�!S
ǒ3�,�B�|�(� Bڗ�3����1�WV
-j	�����r�mɢ��J>`��20�Ah
B6a^��"Y�H�4�t���O�Y��D���N�v"��
k
�����UUS�R�
p}?�v�����9�Y���x��%@����
K��$�c�1'��F�J~��G+z�
d0�mIij�T[�7�BF)�݈��9�"�GHg	���P�D��RI�">>J�,f�2ܑ�6����|���`
-A0�L`.��	��"W(��n���Rr��v>�/��W�i���`�;\KM��cI�������GH%��x+��bK+�JO�L�0xf趔�������J�!B��:i�N�D�MH���pSc�)J�"G4�,���]"œ����
!�J~���V�
e��BPr�
���\
�ڊ.����w��24�6:_�d�aA���iھ�������Xs9��S
k�9S�O��"�[��F���VR�.L^�۲b�yN�&m�Q_�z���a8.9�N���pA­��UQӱ$p�I�Æ1�1�a"X�;��[Pn����z���
�Ro�J�P>��1x!/,p�\��H�\?I��*`�[i��IK}���RA|8��a�r0�����-�{x�V��VVz��ʠ�>	�D��^��r���v[I�І����"�.7�� ^ۖ�G)�$S8��$�Q��J��˧��һ�������2Y)���R�̓�K/ �R�T҄\�r-�4�w�0|Ⱦ��}��`��'�����n�&�
-bNҁ&X�3�
JP���<r~�v���\X)
-�xy%
P@3)�mZwVJ-Ii�?"���Zj:��A�F�H>L���g��R0Y鋷��=�업��
B0ى���y��ˀ�b�	�%�\�.������.��W������Ơ���\�Ё����s�
����հR��w���LJ�n�|fq�,�)��
�r�
-x�]?^JFI�r�!W9_�	��&ܠ%�`Ӣ�l�)�y��G�Ÿ�p�`����
FB�x+���Vz���D���R���,!+XIW%	bZJi��������J���\�v�\mb��9PWsc	�Vz�V��.��+��@F�P�0�!���J�W�k]uMJ���+BN�+���9���޵�N�E�$���-�t�/��E*�n����}K+m`�퓈&a�"Jͭ�3IpQV�M	�%rGC�5ҕ �b�7k����Z"��Xŕ��K��qnJ�����w�]��S �]���gqV��
�-�R7 ��L����P��ÈLf"B����[������e,����KT�DV�x+���
V
-`�P�a�"Y�K���
r��]J��Ӣ����"��t2^B
�J&{�\M1�-s%l,�pIAV*��
���~���,!�%YIȊ�q���J��y\�
-t[]�8�z#��q4�=�o?����3!Gnx[���&��
-�B(��k��D�D	�Ri�D�x+���VV
-4�$a�8e��%K
%9�`Y�d���!hN%��`��5c�����5x"�ЂFK]׶
�����`n�S`��$v�"+�J~7�+d%U1AV��
t��� H
-�R[��d�m D�;i�;�8Ë́
-!�Z�8�L$"�"WTmQ��
������{�J���J���$�/ �)�5� 2�i�	�㙐�Ci���[��
�g��q:�F���A
��S	�$bW����Jo%�_��J��J-Y)e"	y��U9�P�2�ֶ�붽!d����
�� 2����i8�p�%�W���B���y�iT�a*Y�J�h����ߝ��J1Yi+qd �&��Z\��T9:� �i��������{�^�?�����0+Ay�-A¼�8�@]��0���z+��pW���Vb��!h�� $DQ�J語K�O!2r4� ��Cj$b!��%IQi\�l���[�����Vz"+	X�pS�t�T�z1!h���V:��s���_o>�h �L��~�\�kS����rnK0�d��Y)�V��V
-��X)�	�U,YZ��
�%5��\�
J�O�g��$�XɆ}1Y
-|��e!��U��8��g��[��^7Y�}�� +�PJ~���,x)�\v�J���3+����G+��������3%XQ	�J�)�0%+Ig�wo%�[li�wg%IVJa%.�(=��6��M��n;:DƇ����9:B0XQ"Z+��Ș�RFV��J��J~w��J�h%5Y����4�Z�VC�?sg�
U�W�A�bg�;���y�\K��'զK�`3�R䬔z+��d++��JY��J��
-�D��������p�No�Y�<"���!� B@>���R>��2��J��T9+��J~��+VJY���ʜ�T��J8c�N�R:��M��r�@n��ʌ�;�V�{k%B��*
+�a��Y��[��6[[��Y)#+�Le�dz�$豭)��nF�d��s�XBN��J&ܚNו6V*jˇ�x���v�J��J~w���6��$Y�La%%��a�
- hRFw�����K+9����
-��Jf�M�<s�4-(��R謴�V��.��qV�J	���B�J��5Yi$dX�ӈ��D at Hg�Tk8���wZ�+	o%���-�TNVJ��YI�J�R9Z�o
+���|
-�?
r��07s��0� Y�x�JP�a%����߭�M+�Y��%5�x)���ԑ�����������!�ta���G��J�e�ޚ�س0��7���c< B��Ctj���i�YnC�Jt?�VnR�M��[}Q�tqVW���Jת�G֫R���褮��U]�a[�ѸT��\�\or��
��>�����͇���UZ,6���?eu�J啩��ŶJ�U"�~��T{U\�U��.�T�^LzUZ�5ey<b"�݅,ۻm>�M�iS�Q��R����*}Q%>�~���*
�*]�J���J��J��|ՙ�C���߮`r���Wi�~W*�כ6�`�aS���M�NT�</�t����yS���J�^�V�*��c&�|�^��z!���ͤ܆��I�*
�*�_m�t2U%>��*��t1h�t9��4)?�q5�m��<\������Mo[��ͭ�4��4�T���*���T�lW�ӶJ�R����ؖb̦���v!w���U���4~X�څ,��4
��t��ҿT��n�J_�*
G�*MJ����_���2��j~�Jw�K�Ti�ViT5U*��U�R��t�J��*]]�5U�#Qg�.�M�n��V���*����T�fZ��x]�q[��]�.U��e��ө���J��M�[p]��|=�uZ
����棏�*�4�`Ӥu���m�4��Vi8�T��Mu�J&�C[?��^�����Ujҭ�lZ��M'm��W�*
U���@����S���o�4�l���U�qD��6��Vi�V�̻�ҠW�o�D��JU�J�M���*�r��YH��r>�V���*
�U:?U%>��U:�֭R}��U�FU����
��U*����U�7ש��KU"[T���n����R]��t6�V�n7��#'R�.���D�*�f�d]�a5�V�t�J|
-A��_��T�U���mT�����כ��U���tݯҙ*�/���I�J��-U�i�4�/U�G'r�J7��t2R%>��Jg�~��\Lo߻J��m�TF=ٯRs	��^�����*Mnn�Uzh
���R}�M��t=T%>�W����E�f�7��J����*5��*�;�^�����*���*�/Y���*�Z�2��UZ.6Uzx�*���*
U���o�T�9X���Wi�,d�J��sU�s��*�����*-�m�
ޭJ��b�W��T%~��T�<�U�Jۅ�o�V�B�U�
G��ħ�*�]�Viu��U�_���lN����Z��~��D޷Je!{U�T����U���t���.Uz|,ߥJ��~�JӒ�N�:��*�����t;��T�O�*-��zr�����c'������J+U�OsD���~�~j"�B�,-�e"��g�SUj'��m;������N����K�vE����Bz)YR%�q~E�^�J|$��Jo��*�O�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�JR%H�J [...]
<� 
-0�d��g�*z�d���?S$}��'K�
�8I �+ +�
X	 X	���J ��J dV@V ;� "� ف� �� ����@v`% D`% �+ +�
X	 X	���J ��J dV@V ;� "� ف� �� ����@v`% D`% �+ +�
X	 X	���J ��J dV@V ;� "� ف� �� ����@v`% D`% �+ +�
X	 X	���J ��J dV@V ;� "� ف� �� ����@v`% D`% �+ +�
X	 X	���J ��J dV@V ;� "� ف� �� ����@v`% D`% �+ +�
X	 X	���J ��J dV@V ;� "� ف� �� ����@v`% D`% �+ +�
X	 X	���J ��J dV@V ;� "� ف� �� ��r!���e"�Rs2K�
X-?�J-?q
�r
�	z�����㭴��u�~��z
E�Ȥ��?�J�X%j�V_-Ԭ����ͷ�8+me|`��-[i�r�e,��|����� +mjz`��mZi�r92Oj�������o�V�uh5�
l�=+�h�

:ց>!9�
�=S���o�JG9�6&V�ږ�:��]�v��]���
-zX�9����a+u
���z`���X��ZM]�*�T4T�оl�
�k`p�3'o/i�V<�p��
��
+����zl\�--��(g�e���
tK�m�m�Kޤ�Zf9f���7���ZQ�Rc��f훑{�ܱk�s.��^A7�~�3���6f�γ�;Jy|?�6`j�V��u+�P�#7���5�1e6�A7澈3����d��a�W�a�bm�Mo�فբ6i���\B�������L��kOuB�Y!q;�5����[����
YI��\�N�l
�Rt-���5.a:&chj�V*�s�+�z��
-�|dސ�,�X�Io�+!�1R���rn�]>�]n�j�a%�+�ae����]�@�2�i�s)��0�J��K�~>׮�Y��[–�
�d�C�ar����x/�{q���xVj�&;�t����q�
-�M�:���g֫�B�Pk��}X�tp�֋v�Fwi߈�[�3�c�f����i~���
vl
�L�;{&���z�V��f��z
-
*��w/����4�)f'
��r9cYpj}V:�+�����B�E7�ٝ���3i���]uǶ)&ix�
-rVd�q130������L0>{�1k�R�8�aJ�d���
-*_:�F1Mp���&_�8
�Z���ߗ�J����>"�re���us5S�M���`Y��NՊƬ�
-;7�Mh��͝&��P`>c�V��2d|�6����u��47����.���ɮg$����C[~ኬt�_m����I��˷�w��ދ��xc�5�;2�X]�
�I�ZÃh�#�� �S�أ������|�֬4�2�2Am.\m�j3woZ�Vn�ގ��n��zƒ#���j��k������R���R�N���w���X�� �
I�|�|��WT��c[�2�wC�oRsMҩ:�Q�s
t��CJ�<�q�vk;��*��d�V���'�D��T&
%!ń�^��
��g�������g4����Z���'b%�s
)�WY/"$�-�+�
��w
y��K�4�2�1[��
S1-�~l������S���B��
����-��雿]���P��ƕ9r����L�F�

s��rt�=mG�O����
|9�YKj
V�:�T��a������(�]��^�\�Yu�N����[U4[��d����-�l�����#�}��}�s�G#I��ov��g�*z�P0]���볒>�혁�y*Eq�2�d�\c����
���Ytb�d'�tߟ��,��A�3�
i4���!���[�t�X�,]e�����_�
]�JrF�B2�r��E���L1��۷��I�̕�6m��˺
���+)9U��G&f�3�1 ν^r6���w��6��\qWf��:�Vb�t$�)��ie��ȵ1G�CZ�@7Mq�xo�̯ע����(��3WH#uS�4���:WY��E�n�������(s�W���H�]�[�X~5>���i�fjFJ��3/&6���c#�o��TwO*E��T��#��>�/�� �Z
���od�g�K��
-�S�br�]��.Ej�`��!������̥&lMT����0b��K|�7��t��貚�]̭�^3��ITa]�PK���{m�Ϗ�J�RK�ZKe*�?���?��z�v�r�j�ZU��Q��`��Z��j~Kڒ�
I�a�l-^b�����T��T�v��_m�.�C�{%*��H�6�h���-���	{�&+�Cj%��*)2��
�%%[�W[:�SX�{��$�q���;8Z��,�<���uLW1��]
Ìio
��Z��>��J��++����ZF��5ޕ���j%�~�zy!�r�%ij���A�a^u�R7��n�-��1S\��������n�k9U�B";�����
��i�v�����9<��-

-1�w��J�O�J�}��:�x�TI�Hre�Q�q�{��
Ot~xE�z�Q
6����އ
�۪
��3Y�d��i�v���?O~t�V�z�V:��_���ǥ�He
DI��L��r�'=k#[��Y�%/�U�/M�얬^�+�z�6� �e{��O�Ĝ��
��C��֏���~&����]�����^n�1�wb���b�Gj%UŰS;G����<���Qʕ	�w
�g�tdz��o����u�C�k�� I�q���'�Q��C�4�*��7�NN#��K�ҥl���Si���t���-���I�N���H�\�l�t��r��z����r�RWM�̸���u�V,�i}�%6�l�$
��ڔ���ɡ:ԾY`6�:�K����hכ�n™�g/�i��y�j���T=,�
�d�U>��^^
-�2z�d����󳵉�WO/ˁ�Ý]��p���.e���U
o�	j܉8��$�F����4BE�4�NF�x�Vz~{)����Z��x���6Z:�OJ'W+�lK]/�*���rU�r���'�������'{\wM�=3-++e;f+V5��%(��Wk�rݔ
�hhsc%M����0�g�7��X���/�ܝ����I�ܙ Xn#����n
V��m�J瓶�=��C����
���T�OW�����;d���3j�x��7�(z���i��Ivn�uZ�\�A���d���_ŝ6�lD�yæ���'atL�H�اiP/5HZ-�J��J����y�(o������t_�~�����n�������ٌա��5F�j7�;���U
�f*��#-���W�ve�M}s�ǤTI�H�	�Ѿ^`A�&\�tUOb2�E�-]nu�"���
�)��[��<�9+}_�����mA���1�*I��NS�̓��Й�6n|o��\m����!>Щ��غ��;"$�x��@�2Qӎy������m�4����I�d�m�?�JǷǧ��?Oe�_Gs_v6�C�$ӯ��W٦�]�\foV�ҥ*�2���N���S_n�m3Y��g?��<�%0� D���%��&)�R4���s�}cS���?Ӄ~[��u��S��+|����66���'
-ȳ8, Sĥ�r�>w}�-����$?��V�/���
`_Xd�FM�d��#‹�N�P�D'�d�f��q�0-��7f��X9�FC�M��TD���3
ʆ),���Y��,���)C���4�m��6�Bw%��Lm�ns
-���>J��-�̟����6�9�9��|�w��uAb�[$�y5�M���,cH��ʨv�X*
:T*�5�}g�|�g|���/OO�
�!	��a����d ��8%�Y�!H����;�x��R�|F.c��8 1���ð�eg#��&�\z�ky��FՕ�I�.I�VM���g�K��I�D�v�פ;g����m�	L�JA�=?'��
��j*�C,��������g�R�(�
�C�8�ӬB�
�Q��(g���6]0>��hmcɔ.t�q�jt��mSx��2X����g9�=G?��r$sg�$�A�z���Iz�9�Ѫ!<1~K�m���Qzi���:*]�J�8.�
�+:�2�p�xl��
��A�)��_�)�	�E��$Se|h��y�~/q\���g`3e{���;�L�^�-L+�R�O�I��&�V�-�6�J/�F�����%��t�ݛT'�eg�R�J�k��!��F�҅Z>�TM�a�5	[�"	ǩ�l�2�,�4�Q;��23�4�6';=D�&,t
�`tvrW�t�_Ha	aN`�T���=G>��
�Vp7�K�q)u���	A���j�6��E�����uQ�i]T��Q��	�4�m^u���~o�����y��lP� I���H�.
J�V��N�A��IJ�~�)-�i�3rf$�	=&�E0 �����
qi�]�}1n�^ӀIUP�/�f�Z6$�a#c_u���b=_�3�c�۠��4�0ܪ0M��}���5S	
b�ԝ�J?���.K� %�Nx�`M����q�d�·L��$�e��e������w��!81��m��ЙD�;ۅi��K
�[%N��3�X�w���gL�-��A"��:sq��\��$��q [...]
�	:߉��tB���M
�19
�g#�����u�
�z�
��c��jFR�jՔa��0cu
�CVg�w޲�G+��J";��l*� ܼ�M� ķ� H7/ޒF�:��J��T"���y��}��o�7�=�&�@q�Hr%.��A
�(�-3�M���O�&%Ӭ��\�R���7��T=P
s
-
�(�%}1b+9�-G߬�Ly,a��%���g�XoQz B/�1��J*%5o���k�F�g��J?c*�M�T�o�U��pYz)˯�t�L�����%@œ
)$�i��Tʏ�-�x�z/�
]F?0��L�3�,�LM`�QP2&���K�a�L�����(|$��V�6�
j3�"��%�I鄎�V����p���q'�í֕��w�g��������7P�0u�**m7_�����=T[�I��|$�4�^��20K
�?�.e�6n|dd��lc�y�;����D�{�M�F.��w����HS�@���x�c���閎�
�
|���X��Q�4�|,��r,��b`�ާFB
V#�j��XiytXJ�1��J疨�}��P�uU ����^��#$�Dr@:���Y�*�@�
-
�뒗���2R�d��S�9)��5p)5
-�YˤpM�l���Q�6"r-{��0��
-}�Bs��4���]dG�G�����J/��k~��-����$�J�trT
R��g��.�n�����(y�e�D��2��LX���R��az�K�O*��	�&���3:Y�l��s�K�\bXo�RXC�D�+�K�-�S�'x��,�,p*%�ea�+�֥�S|�%V��$V��}5TD'�P0	���m���k�lJ}
����l��2��������dY]��_d� I�^$2��E��h$�&����FF8��1&��)��ً�%u]͵h����	�zL�פ�L��0�<�ʒa�}H�S �m��~�٩,u���*���^��{�����
ʭ�J�R�!*U�����u�xp8gL�
�
;QZ���8u8k7�%˄�a@�k:aSh�r�Ѝ�0�4:
ݕ����nL�
-g00�/�J���O��5z��3f/�)+�1�8�uA�������@	�8�j���QݥF�j0�D
ƴRZ�֥���wB�i�T��T�ß`j�[1T�ٿ��
�7L"�t>�K�#���:��J��ƻ���JG��
3�Ф�xT0i�S.e�K���z����$�#���S�k���&Xܪ�
# 1�
�)�zO�]Ϗ����
^�
��N��M7�|P%j�]\RK��JgG%�n@�¼��K�����'��<	��e�D�dX$�8�'���x��e��9ۄ�ß�M�m�V��ē
�T�ƥ�
�^i
�D�Z�K��w���ǘ�����b��)�M�Ű$��Zؖ>��3(��
R�
-"i���55v���@5�K�Li�N M3�m�/��yS�G�9��=�m^�-a��������Hb�\�H�#̓e���8�k˩��"�I��Y�
恉�s���qi.λ_��>Ȟ��F��E֤���^Ni�aJ}Oh��Y�w:���������lJ���)����T�ʥ�z��ұ%*
�JYg2�vY����<����VM�1��5����);��G��Y.�2m�x|]l�F�:��W��9�(
�����P�+^=�䘔�Z������5|
Y�좰x�]��d����+���)wI��,���J
-�7��߯F,����FL���@�v�MZ�i]T�ߏB�����醦2���
`	
4�OO���^~�$��85�Hb.��-���H�
��H�I�1�4Q>��LP�1��i�%���.%ݺĤL�Ku��2j՘a��`eV�ϱ�WW�X�@w+<�[H&e���Գڝ�
-��7k�;��t"*UE]���7/� �
D�v���3��I4Q(m�8OD�3*qC����Z&ؔNj���6��6C+dr��F�
5��K�Xga͝��MúH
-���
��
���gj�c�㿄o�
��$J�=F��rI��ߖ�'�����[PJ�Q�����b�&$���<5,��Z*����n<
��еy��c镰����$�|X�	I�����T�.�z�#p�ʺ)U����k`4�e�z���ģf��K�廋S�u�=/��V�kȤ��[�jI�ߪ�6�a,���zޫ�ۗ�0~���t��� ��V&�(��/LX�/�si&ન�ãҙ�t�>Ԕ����y�ö

N�H&�D[nq�$l0N�xq��0�2G�U˨k�]��!����-t�:�8s.=F�y�Ka
�
�D)�QSc ÷o��̗�nID�\��Л0���I�Z]}gs4
�b�}�Ffֵ/��K�
$�"-2�"N�J\���^
-@�`��D��Á
9��g�s�%S�fX��m����4r�x����4J�F��i�~
�q8 Q
E��4B,�x�
K�4�w@�Y*9�
�R���|UjUT�!KB/�tL
�:;&
L�$ɯ#�l�U��h�eeE��o
o���>QY�&!�T�Ҁ��%��0Al,/�.�봉ku�]�@�_.2�M�Pm{h�;
�]�^�1����
-���c��[�����o�
-�ZR�u7�+Lbo�\�\����Jeޠ.�Jo�V��b�@Ғ2�RI&dp�㖄�!�!.�
4�l�2\f����沑�@�
-�|��7��׹tq��P2.l�N�!Ipm2*5NA��v�Y�t��
l��g2�.�Xz�0�Me���)����J¤z}9O���ipS�xe[�a0�lytXB[Zg�����͑�{�R�6
�T�IhJu�
�C�C-S���a�^���"��U�QG�+��Ļa
-�y��M�&p���z�GV�##o$}Qd'.e1�&)���em��K��%��)�KaRX���ܒ�����Ru$�ak���3���77�
s�P�k|k ���ա�
-���$��k*�->Z]
�J��,)H?�V��&)CVJ)�Ԥ���KHB�
C�L2�'W��������7���@��Is.}���y�6L��A����B.,&
&
��~˲i����v�Yx6^C�
C41X�K/��
,#~x����
�aJ4
"4�FL#�����4�00

�4`".���FXrø#*��R�+NTj�Jm](��,�V��
�0�XS�af^`�$��*�<�H[FX,�ѝ�;�1'6љa��4���R�7Ja"gc�qɘb��-?�՝�'b���I;�$_���:$u��z�}<�i1嵳>�>v���
�	
��	�PW)��]��
6��p)
�}Q�Q	"mtZd�&��sJ���D&�$Y���"e�F{NqXdI�$�7^�̴T̚l�8�4���Lfw%5&Z]/���q�(�r�ҹ\�ν
�
G5��N�dM
����9�KӁp����Q;���9^�R�c&��pI��
���c
`�ƚ_w�[
�i��B�Ө�4��Fqmu4

F�b�Ӊ�4��93YH#�?��Ju�����%�&O%\\
ٗ�R)dAf/><�S�
Ŏə/@��fI�"uq�����&�
�6�
��XfFe���~�?"�7J~
?,�sɫ�cu���K����T�r����$_�8T���2�Y�憴�a��fs^/L2�a9�i#����VL�BF�F���P�r��v��S�r�T"�
uUw���,i�j_�/Z!�� �,��^MM�"e��6��B-����iB
��H2�l��,��ū&X�)Z�ߞ��]�
t�''�\E��g���ե~��̸09
$Q)9�&�~�ɲ��dMv����V,\J�.ͱ���M5�e��4����
O#����4~�:F���4
�	��\By4�&,���I���
���N��'4���t"�At
�0�T�:o����u�I�
�$M+�$/0k���� e������g��X�d��9���Xb�Ǒ*��	ʂ7Ja�3
-���u���z]�݅
�%��'f�8�LCM�P�DH�T}���f�?�9����PZ��O����[Ǖ��D� �gw�&����=�`�Kn�=S��
UT�\mN�t��@�^�(����RFN��B�J�H��,$3Y�
v�[��{���
#��M�k\���”UTu%Q��DE�-��}�M�l8!(�(�0	#9�	ÂɁY/I���ɩ׏�R���e�)	M��p*�%v��]�-���Ż��)�i~��G�L#
�Q���צхӰài�5�p	u�E �X�a<yF?�w�wS��Xt`R���J]�$�
�C`5U��y�H���d$U�$�KȊ��� ��5)~�N�
��
���8�[���EY�\�
�Hfd��}�	�\��K{pi�.�K�f72����
&�P]�I�&��h�!��TmfL�z�aks>^9v��܏~ulnG���ILJ����0��
riZ�����S*�I؝Ҫ���*r�l�|���MM����2�KIq�ad�D%) R ��P2� [...]
�9��BNYr�t�əϴ��e�f)�"
�����~_9��)�U��H#�q4
-c0�+r�CP@���}ĥ�.�
}�V[5i��m��2u[�
��Z&=�L��
N�&QE�6H�=t`���H��9
s>s^6%:���+�)��"��%p�֭��\a��;[�Rg�p-x��J1�~X*��JZ��U�%%������? �Hz�5r��J���j���$��dN����*WUsZ����CS�0��W�(L�9å~�K&���[s��|�������]�NՠLRbܗƓ���V�[�
�t%.-���
n
3�T–L\b'޿� X,����G%W
�E����
J���4�ahF����sV&d��%x7�p`�T���y���P��?���qb*
A����&+�l%-��i�t�R[4UL/0�$g��V�Ֆ�j���~%:�l������� L⍦0Y.Q_����]⊵E���nq
��E���#&�!�(T����L
���H2��c�������sޚ���`�c�	"s�����X&,���ij�s.Eui-x��
�����覬J��H�
-Xz˲]�f����
΋�&�J�2�t}��}�N2&^�~4}R2Q�X���f
�:Z�&�Դ9l�SA_�k�X�����Jilè�>?�
'd������o�7�
�����/#Ul��4a.'VKΈsk�7��u��k�1Mߟwu��x��Q�i�>=�`�����
-�ʡ$H��j���=���ͧq�;*AohJHNH�M]���g�<G#���ę�

>��xe .#
���������Z�p:ya290����Os�c.��X])q	���.�o����gL:#0��9�zbR[v��I ��C�C��]�0gR����ù_0��?�6�Ab�n)L
V���K�K�u���������W%|�RE��D`�߿�L�I6f�`R_#ehNqf���1�̰*�ϭҬ����S(�X7�L�0��6Em�T1�ho�a�ܖ�ƙ �O����׾s�*�rT�U< $
$ʇ8����3� E�RN66�S���f��uGui
��j̥���K��@�U%��ul�:�L�z�v@&�v`�+��-�.L�]>�M(#�Ғ	���fU9'
�D��f52�C�Iq�4��6%�Rr�L�i�_�Ɩ�1�%
���4�)Q�逥<
�#m�sR�5��-S�
`�� 
e��V��
^mBM�GH��D����	
;#����y< �U5#.umQ�4��n�|�I� [...]
-:����ܠ�ݡw�?ύ��i�n�L0��
U&T Sm��t����'������WHL���
�Xkl[Z�%T�T��M)H��D1�"\���6�I;�U���� �w43���ٌtS��|aj��K�'�8�i�.]^:(Mm�jR�R�6��
3��A4<��r�ځ/�;������	^
+&.�`)#,m�5�j�,�1*]��t��`7��C��ixB�i��O#j����'���T{H3�*����&b��?�
��L%΂5�I�<���<� �`�%�L[KMb�
H��u<��_<v�[*
h���!�1�Z�s	�Op)7[���ʨ.M��;�4�qQZ�NQ�<���0	��tm�F������Y׻�Z���,��i�n#s
mu�+S�몌_
-S%��UL���[��{u)P��
Tz�
�j�ryeR�g	}������I�R�6c&�S��3&R�̹��]߁l��	��oN�C���Աt6:�tR�B���y&��tMT�66�g(%�Q"u�+Cɋ|Lފ+���s�
�w�{����1�ȊUN\J8�B�e,��و��������~�\���Č^��V���4�5��it�M��K��a`
&�n�aJ�ι;��u�hx��a\{F�i|
*��JT�zA��im�ގ��E��FG��,I&��:�o��^\ce=�w��ʜƜ�Ha},02E��X^�D\H���R�i]M��Wu�M}QzsEi�^f���B��m�0�P=�"M=���9/�}��B&��nS]��$��U�T��.�݁Ko˭5���c��S��S	�
��P%�{,i���R�.���&��vC�e$�a�N2��.�Y�x}���O������&z
\�ۢq{�H�⺴ե��(�
/6�gο1�
lx�S�P
tfɅm
tM�
-�ږ�~���
?���
Ŷm�sV[D���N��`���/��?������Y�OS�*��4J��d��I��i��i4�<�aE����4��kKY�cƌ��-^���p*�z*}'*= ;�;�I���,�c,Z+�X��<<N���1���"
���r�Lu�
���#)�5&�B���vm�%�{�H\�B���ec,�R]��RT��It/�L�J�$$�lĤ�a�j*�I����m��^���aa^�zi���6gn�L�nC_{3.!w#D'k8���J�#���rp���E�S~K�}�&"�"IR���z++L����4 ���C�8����|O6~yN7q��)�&���|��sP��Yq7Pb����6��Үaù�p��(h0���Қ�";i��t�����'�N��
����+.	G.MSAH�}�~Pr?H�n���y*�xF�4�/�REM�O��ZcAӰ�F3�.�	��i2
L�n�+a&�%dA�a�	�2�w_Q
��X$B������'P	�C8o)
�,�S�~�J�I�x2��+!�
5���n)�"Y�ڊ$�}�
�,h,HL���/�
�K�.��,��<��R�K-'�_�����Ei5.J`�fʤ(SSWr��!i��i�/'
zq�/���ϙ�
R�s7<'��y��f.i�%�p$
\��*��ҋ��$�wT�
>`
�K�ɲ'�
פ�ia�
��1�S�$űp�!.,�p�'�ov{�@G�����(".)C��
"]Vy�D��KÔP)CUj�uY��6��,7
R �2�Z�`��~+��������uz7�Nv�^\�$x&�@iEXJ������[�rYڭ�z���㈊#O���=C��4��2�ƺilO��.�Ɩ�AU��@iS{Hk�%�
�Cu�rb�j�џ�J�B%��i�
-�`u�t%
��U��$'0�/1�H]ǔ���1�
"shz�	�
�^_,/�%��:��D]2\�v�K��DY�iX8�.2iR�
�:Unpu�5���|MjG�6����
�Ǒ��o���G�&d�M몀����~SG\�]�Fg�
.8�7��".��T��&��
�z�E��X�̖g����lr:hIE�ELB�
L��i��&�����$slySՌe�f&l�w��':ǥ�A�+)ұvB]��m��<�����r`�L��p頻�5�0!�=�
�]������_v��hb05(L�_��b,��D�䖍��f�'#Vo�J�8n��@�N
�4d_��0��Oc�cO�����_�L&��q�����I	KR

�[P��Q���?�J��~��Yn5�$�	�N.U�T��&EHr�
-�j�AΪ-����
��/z��D9�i���s�K�
E�HZqL�I,-B�%KuP"&��$��W�kR@9��8U?,y؉ :c�s� ���SA
�i	��C.m�K1�*r8������*��ﻶwۦ�
Q��)�4I��IR�%��3���Q���IϿ(���^&��
t{Y�l�E�%�K��D�n�.�
u�
���\V7������}��ĨT�<MR��4&�i�����-�g�M��I���%r��aIK����#f*9,]^\\���3LAބ��DW���/�n��J��i�4
4G
��gӐ�#:QwD[*�<�7�Ѿ,)_�.�4>�^
�(:�jJY2�|&]��@U�U U� Iև�6�k�ׂ�^������
��F{��	[��qi'�H���;�%���XZ^Y�籴0o���E	L*+���3��vL
-5���C���B��x�t�/3=|��{�2��(<
����Ϳ
b��K���
�����p3u�K��P�'*mI M��� ��;�
��,3T��Wکa&�6=�|Mr)��ө��4,�ef��ge3э�	_�)a"p�r_��!�r� �H]:
Lk	b�CU�
g�Jy'�TJMI[Uѭol����
��b�љ���[�NL��$$���U+
�2q��͝/Kl�#*�sT��1_.�m#Y������1z��#�
�
�
-o��$�=1
N�Px��䖬j�j�)7xoe�̳W����3�RFKq�4Lc�(�RgӰ
�v�t S����pB�ǯ!��Q�P
-���6�J?��I*����6,K0v)K�|�\B
TZkS�
��
���������37Ӊ�Le��O�%�8�R�8���Ɇ�G����~K�n�(�E��܂I�"T[��0)�MO*F��bMBu[�#$�K�z�î���ܗ�m�����҄3�n)���%���1�I�>W�\i/P�x/*=uTj�J����c|�	�yx L1�j��<ꘔ�L¼LMr��nsI2�W�������	t�[�L�.���R騝`�K�4�.�s:}6U��*�mQ�b/���`ð`
���[_�zл�~�����[?�\�k��+������:x/*I2]
��FY
��p��i��@I��(_4�v2����Fj M,Ea������ٲd��i|*�oL���Rm˒&f�X��)��-e�Q
^�creW��H���y/5Iљ����
;}5�KM [...]
-_R��
��qa�vz0
��!`{�P��sy��
�d�XKP�7b)	�`���,5����
�ě{:i���_6w�4��*�Vi�0���f�;��Ӱ��
�s♣ �X
�`t���]9���T(�I��ӈJE^;!i�XpI% N����9G'a��q�/'�O���¹$���z0u���K�qE�"ƺ�Yi	�t��K׵��W�2�P�_����aQ�=�~��f��.��_Y�dj�
���'=t���uf�W����B]=��j�DP;���;.�#.E)������:�v��iD���Q�Q�th���.�z�!�����}���gR9cҸ&M��,�U^Z�L63�
�͹\B�(��
-���چ��'_����0 �Ŝ�d�A�xq���8��d�I�΂!f�l��AzB�C�bk�tb�Vdڒ�~�1��1�h�m=�yS*u7W�=��Fq�#�e)Q�F(�
�HGӨ^3
������%@�`	�H�U���Fg�O�}�J?*��A0����
�`�U	%IˉA$���]Ӆ���&��8�y\R�Xd���odj�\*;ueeMq�e�#��_Pt1��m��=
�`Z�������P
&Ź�Ik=�WՖ]M�O{�B����[�������
ݺ���jΥ���P	�`�7
.��=�u�Ò���Rp�6T�{�J�LJ|�F�TI]bcJh܁%�$�7� IŋL���I�1��mN�t�fν�i,�y�����\�����r�L��
���Lgij�l���&�e��,��U��������BI����4p�c���>w�]����a�81
�J5��A�ӈ�{�%<�
Э��W��;P	7�f�q��ѨJ
��q@t��d�!���F��i��\��5
-��,b_�c�zF�(K_9���$��`Tz*�B��#g�3X��dN�eZ*��Iͼ&u~��#��z�SY/�Na��$�Yauu���R�#C��$�1��X���1�?p	%�(A���Fy��*�I��p���$Tϐ��a��=7襱/����
��\�����.J�K�ݖK,�\�8ܬ.qkK&γ��fJ��]���P�@*�U�O��%@������B � �(��Z��9&q��b&Hm󥫴?��l{C�Xt]aj���r'����d�P�֧��&`Q��6\l�T%)@�:�tfmV��̸����@.ճ�x<4|nc�xv<s�U`��%56Tx�$��a�껷U�� O<P��[Q��'C����"��*a,K!�/�(�4��Oco����;�-P
�\�-���TG
F+0z3b4��i|$*=�T�
�)%�L]�M�'G��G1�0�In���&iu6���L`ԗ٢�U/j!�D�^��s"o�V���K�v�H��������T�o"e���D��5t`�B= [...]
�G\�c�V����Z�ԥ��8��Kr
�B�4�@ܺ.rA3�ry
J����5�]i�$6�E��)nA2���
i��恎��r�
�T�foR�Ը.!L8
W��ze�=.�_R�PlU�
-�K�X����
��)ą�7�c�?ƍ��Lx��!KS<�ܲ�F�����;�R�`ě[ϋv`��-�$ξ����9n��ml�RL$�
�qS��t�Ѽ|
�!���
�%���tG�B�:a���o^rWd�_e���`T����V�,��nn�R�$)O�T�kdkR�ڡ&-�S�oz�Xb�Va����Kmח(��/�K0HP(�/
-|�,>���Y,=ߒN
EI�t�%���
�I�.L&`�i�1	4��5�I�Hz\�����!/�mj�K�ֻ�8v�%���:p��ۚ

N�wd�R&u��7�U�`bUꩴ��T�y�x��TI�O�0�	�HkgS&�S&9
��
m�ߊW:�9�t��{.Ռt:�]]���0�/��.���U�+��۪W�	[(e5�DZ&���
��8>Ο
���to��j:
�$�Q��J�R�@o�z�^T�Y�7��h�w��]y���8J�f�����8�i�B��:�=,e�1��x��~��GP �A%z��R+T��rKR����>�BYz�&�����]��1�&`��Ϩ
�hC�Pꒄ[X�BlR���eX�H����R�:R0cE&��
L:̑4�Hg<��s�����������ۚF\�K
n��p��Y�p�Zۺ�m�n�K�����cL%|��a��.MIi?�����e�|O���Y�{��g����n��
\��R�G:~�LE�.I���ݥ���$�R�� CU���r cԩd1�23��l�
����yx�to4dbG�˶��1���ш�
�ͺa=�����
�`����}���%�ƾT%�1�4"N#�Q��4L{�IU1�c ��
-�H� ��{�>��`t�渦�nn6
�;3�(T:��g�̚�Ƶ �������/S�<����m�� ��f;������s p�y���vٮ�:�_7�"�%M�9\��=�$pk���1$9�����ƺd���k�K����HW�&$|i�KչX:�#�ǫ6�7PBQ2â$��$^
-w�e�����Ѝ3�A}�Z�;
��䇡�3����j�J-�
�n��������K	'o�%����\b(a19���4�
T�Ao�������X�+�E	@BK�:L2��
��}&����D.oP��������{�&�har�K�5&��X�
K#.�A���P���d'�m9���r���	������Yq�j����0����
0�)���Q�TZNf4�yx
�i4UI�4r���WL�Ki�B�
U&��(��,
���.��DJ�
?%��[[�@ؚ��k�k(?��$
�H"㴃�}�-�F����
=gJl��>�(�K�`��uI+N|�&e%�!�� K_�X:q�E��e*_�J.J��
-��2L��=&����K�g���/������M/v�k[�<�J�*
��&��h�R�֥����
PI�
*��knJ&�D^�hI���IRRY�ע`�`�˪�$3F�|^�x���]W8[��:\��KTsI;eS�"&l��,�Kc.�$���JT�0�U��V%	j��U7Y;ZÃ�k
����ÿC�L΂��RIX2H|Ж3b\.Xq�H��6�
LÊ4�u�T�}�&g�Τ27�m���42A�(�4L�˦��L����i�M��Dձ�\�,Ş�2
�ȧ�9�>)��	��a@%�T(�(�#�*K|�̓E���N��!�
yTg�`�r�m�r�t�O��"IK��I�S��KC(٢$mQ�ۢ��
���HL�.S�3Ɏ�eR��Nz��P��
ݽ�������lo�.�8w����/���`6y7X�\��~�����Q)�@*���4m��-!)+k}�<��ԛ�̞��BY�mY�L���1R�N��l������X���Y�D��
$�tL�
]6u	a�/-C���f����r(Q7��\��=�
-
їmP&k�RݸɆM�Z�#3�.�����������\È
k�(K\��
���փ�7ܯ���B��q
2/��8c�"*}����Q&�;0Z$[���!�f��F�Q�i<
��4>
��i0
N����p�yZ ��=_�����8�����
'�K�!�Ʃ��Q��'���fIe�l�D\"0�p���%��
��I�t�
��i��iȥm��.��|,-J|9++-��IX=,�/�R%��
J�s�8��
�-J	�H ʕ�(O/k]+S��Yi��^��/��ᱟ
-�ܭ�-���R���H&
�3W����m�D�	JW���G��C�D�
"�Tڮ�L%�~�V�%��
=I�����L�
&�m����t�.[��
t�\��ξW_�D��!}���,!��t.��6�rU2�p����!�b��f��]5�h؄��?�&���-;FLe))�����A�pT��0*�d�{d��
���7�R�4ц��Lc{�4��0:[d,�Z����b���]>�Y�Ɵ����4T��=[*=��:�m�X�D-��%|0�Q]�Ȭgn6�g>
GҸ��
��2;,0��.�֎K��D��JK`C��b,EK�밄b����=̓��RX4q6�#Ģ�(�T�NK�ʬ�e�C�X�>QDY�ޠO
��P@����K54�X
-e	��&�㓯K�M�p�^]��Jז��U��R�ATz�Q���d�
’�&)S)�<I�gRu�IG�t�F�������D��m��H׭K0 �H"͡.A�@����f�iH��������Q�<�a��BSU���K@��y{߇Hr��7칽����|C�m��+2b#�z��Et����
̦�*�R��T
-<�f�Z�������x!�4x
�6��
]ዧѥ�Swk f^��
-���ޚ0�y}o�|F*��PYrX҆�Di�h��pNˤ���k(������kù��E'.�|xh�UrDH�X/L�Jsć�X�JAi��E)�ja��(i���T�x)p
��T�3�S���t$T����9�1�c���C��.���0�਴��=�K>y{,�I��^ә8*ɆJ�]���� z#�SDP^�X�d* &>hK��dN0���B��|��Ȧ�
�\Zu�4�K�7�G�!�e6K�%���AIE�J�-��A(
d�THW�
-U�KLh�m����
>���7[�j����\Y+�SԃEf�̓(����a9�IHw�dq�;�v��a�x�t=J��5�%$WZFk�gIFLZ���
���6�OG��G!�%���%���/p�H�#iMHj�Ԇ�����*�< �V_C.�V\�8�Q��N��d,�bK�K�&�@)W�8���HQ�E�P�U�L
��I�5��P��1���u���7{\*���|�ε�@u)vɻ��
-9#,Y.5P
-*LS*�;�De���1�VҶ%<��>�<G�c&u��(��Qm�͢��@7�
�q�"��M]b�d9�:���K����lU�(Q*`�0D��mU��
-����I#��ߕ:���1/�q#�ۥ��S=(d��i���H�P>�J;PI�)SIh���>������z���X�~���*x��1:��
�E
fQ���hK��g��sK�-��Re*���NUy$��"m9�u̟��z�< �}.�5��bH[��
-�%
-|pD
yoK;��ga��X�;(�*M�ɼ)Jȇ(HB��J�(�U�u�:�$_�!��e
���s�����X�
�R���u8W�R��CY!y��l]".����JP��ӽ;� ��J�
	T�$Ke�$Yz�2��,����r/h�0i�o����sLns�\��N�����fGY"�yS]�%�&1��*���0��T^��%���
/JϘ�x���oכ%���x�Kh
B�X��T�] �J3K���'~*}�T���ا�\D��
�1Z�4���.U�4�~�T:o�	�ѫ
-���4IL�47ǐ�c>D�*�͑���S�W�J�X8���%p�{	�I���䘴
eҨ�γǓVyDa��Zu
�R��l�BYK�	,}9���3_���#[~�G������)�"��k]\.�;�����䬽�
-��N �J�"5$�w���Շ��9��2��g�����
_�,�R��V0.�:����g�i


-��x؅9_���य�6}.�)�%�ap���.�EP]����%����������g���fT��T�0���%
�}�@&)�I���E&�[��vyI6Á�X9�noˠ�^]�\G�A��}��JL
� &�J�X��6,5�D��R��հ3D2�K�~ה؄���vC�{|�C�V�XZ��Ȉ]= &1
��2{�e��id��d�iT��QI'��E�
�$�Bb��ӠܼX�lk�~��ln
���J�J��#�!��x� �%��=P	�[,g{,�ܐ��Y���z�L�
0i�{���M^&�2:u9q������++m턵�R�[X!�Z_�%�7%��D�1iQ��V�\��P�0ݺe&5
�&��դ�[�o�ۅ�����0��m���]�����'%�J��b��R�2E����#f��T����O��T�`ь%�6������B8�����K]�0i0ō���;W��D�=�Ҋ��w<�Lg�����jQ�R K����f�;���B��Y�E�d�%�XHCՠn���>�QVK_�z̀&~���!]A�^�ވ-�
�
$��
KYeIETQ�
�J}�R�R��*J_0%�P��bKLc��i����U
��Ă�R`4vb�cZd��s�����D�_=*m<��Հ%&H
�@���Hd̤u`ҩgv~y#�
Uة1�tX���s6D�������zm�K���Y(1�Jo}(ټ�u [...]
-�U�V���J�O���I�e�S�R��M� 2��X�k?�4
���7�:��
�5��Q�9>�9f�
[ė����T�.1�@&>s:K:�$���v9�����Ƹ�յ�si͑�K
��RL�Ka�䶔x,Փ������"�,�J
���K��+K]Qr`Z:��Dΰ�3�&����C�g�������0
p�rwgp��d��%6aJgq
�"���
sǥ6@	���E*����TK�K��T!�C��C�Uf{�e&ݚH#�
t���;�t.�Q]j�x���C
��VVEV3����Re8�RLU	��Ej�cH���n�/3�aW��
�v�b�c�%�8z =�5זV��}FM�T
d�����ЩIœ����@��S��{Q�́�_H�Ƨq�,�Y�ѵ0����4�����i�a��X�*��#O�
1�&R�/�9z*ՎJ4��D��v�Ò��i>�D���}=e��H�NjVyLA]^\���
���X��u K�ϱ�����=���?zP�J��R��47�f%�$�
-E��i�H
&ܚe���I�=����$��҅9_��+c�8��%28ϥ~]�
T�W��
���.�߾�
L�J&���ʆ�����J��+K��l��l�%�-q	dr���LG����
f�o��w��ՍqiqP�8L��e	Wq��Q����4�'A)EUJ�${���R�K(�f3�����W��z{f����Yp0j�)����2	L(�;Z-��?�����O���S�T�@%\��
-��
C'�x}�4h��4�EC5��14ǤJc4�,ѠR�%�Do���4�u��� �#�y$�a�Yy}�$6ʥ��ժ��9aɎbI�Z����ٲt ���^^�k�E�3�0��:+*�J���
%Ǥ%_��2d�M�I'5i��އ�����_
�����v��3�f�p��%�	�U�,���En��(z|x�L�4͹*�l���T��]T�(N��6KԔP�j>�$�Ϥ��1i㗺c�qƸ�*���.�8�>�t
&|U�W��ؙ��
:%�JY�d	�D@�%��B;�=T%8�f������Ǹ���[o�
g�d��K5��La
-Yf�T��R�4�#�&�Js�R>UY,�w�.qy�i̙Jtc><
�X��>�	�m��+j���r��ƹQi�4�+���?},�P��a	e	�
�1�0*�bHc��$w�6��[Y�e.
c	�Z��Pg��-逥����� U��+���RNP��(ic��YX�Ud����d Y�VW���]�1�&�F�4ܒn���2vp�%�
�q)�%��O޴
-SjIXJ�(lBu�\��HTJ�J9��ޔJ���J�N֞J(���,a	u	+�kމ��
@^�c��-u7Ȥ�)�n�N��Gk��%�4�'��;C���%�)V�?QFU)GQJd��쬪��%)`WK��
�0��.4������
��/·_9�l؈Y閚He�D�]4�"sT�O���$@%
�{�f*a���� �nn4�W�
��|lCs4�QWJ�Ԥ"�1Q��Q���ʒ�R�K�,V�l=�O�t"�[{�Y}
��.�������X귥���%t!���4��biJ���R�Rn�ԥ��0J7
-\j��Ҝ��@Oz
d�	��ɣ��_��-܊�7�r�.q��7 ?�X
UW�k���ć�RM��J����^T�����7��Y�Zז,�T����f�I�&�Mq������ԫK>��]�~o���e�9�"f.�I	J�Jŋ�0?��!�=
+��5��|�7t�7�a8�p����s���g��%*�wx*!�VRSE���3ETz�T���I�(P)"*iP�J�*/�HMťbko��o7
~��\`4/�>�4>�cZf9
T����JwTz
Tڐq�K}0y$Q���]fҝ�rX_����屴���$QlE�6c�8,�,9,�9��?�P�졔Xh?5i�DXTR���!��� `�
��:�|�JGL:(�W8���48�Aw�"w�5�꒡��,NVV�"�ˊ��m����DGQ1�0�'���m�m
	��?�<��핯�TNT	 ����'��
���dǖN�d�hv��J���r�z��	,qN�s`T"-aX/��LZ�M
-(]��gVs�t���8X��;ݚ��!*��
-�1KV制i
G�ҷ8F����w���.�$�rT
-�ì�ꕏJ�
����s�?�A���h�r�*1�I%�T�B
-5'�L�Uz�l�^�J�TP)�	
-,��o#0���@�:l[��lt�c�M
-&��$PZ&��	*�~�J��*�x��q*5��KKΥպ;[�I�dybҭ�5Ym���;lP��\<�K�MX��X��&��,e3-g`	�pX:e)���Ci�(�	%�i!�,0"���*k�A	/�f�7i?a�9IoT��E�z뗆���=�wSV��T�͛G\�3��Xi1�U��.&
�����w�Ҧ�,/H��OUz��ґÞ
KU��!K	�]�oᏜIX7Ȥ�Io'����R\u����*�v��f	�jA�]��
I��R$
- �*U��0-�f�
������~���x�2�_����������'�
{
�
��D21i�
�wVI�����Hc�*4�T�����w�F{��'�dN%�(dA&A%E*٠���Jc=G����&aǒw�ôZ��W��JS&�ᔜj�i���u�R�g�쳔;�X��J,
��e�,�:����Lb�^�(�d��Ī8O���BK��2#�0�\P�A�L�9��Ǒ�um��0�n��[��t�������{�Ż�,�8���ԙI]
�$����� &�dv��;f��W)�l��N%bi�g�r.��HZ՝I
��s��񼤣��b�R��.
׉�n��%�wP[��Jh���� %�J
-M���R
ER�D�(�l��Oӧ?���>2���짛�|�xݬj~F|-d��
@B2'��"��z�^�J�
P�@�D�gm��҇��u�6�S�1�ү�m�*
��e�y��
���Kʎ�N!9B�Ǡ��^�Z�~���G��]��(5�P���m&}ب��`���z�Z��묍c�\�X��ʭIEa���YҞ%�����֥�FPJg��$�NM�%�9���*"(�ҡ�J��vޤaN:�I���K���'��x`���
�z���n�y��ʕ
Cc.��ycQ@\z���LZX����9�x�*�TiӬ
K5-�}�ÿS�j�?2i�G�0���>����nĥc�;�6�ٸ]�/v�>U��)^%�tq�d����I@	Q)FZ�&Ѭ����
^�5ps����e0�G���C�T:
:���)�XR�`�t��
TҭJwQ�U)"��h���B�ܫ�
-�����h89��ʊD�𓊑ƬR��T�Ui�Rp	g�O���&}����`S�u�
K��*�iyb��T�1K1��ybz�FT��>K�0J�s�*��0��\e�)(%�x�"��x;�
-_��5��7iw<_�/ǤO����O�tɥ��s�ť0�ʚ[ƫ7�k)�����Eb��٣�g��Ji$�;���SiG*A
JK�2K���
IK�6��vd��t���-�S�w�K��䖉͚�V��-�B�1)ʖ�xJ��E�H����2i��h
�d�­A��ps�OT|闛����
�[R	�=!}�$P�V�JR�*wRi֪��J*���͕�xy�m���Wi�U��J�$�$\���A�Y�*��x�ҏ�)KΥN&j��%�`j^h�h��ui,.u��[�j������L&�����Ě�ђ^\q��z(��|QeQ���0E����%]f�-֖C�z��}J�L�B��\�W?ӘK�1�ڸ�X��d\Tr,#.�ce�K��G�Jߥ�RT*?W�cP	��X��d݁HUU��\Xz:�������,�M.
Nv:^�|��.▦济n�(�".-R�ćPBT�*�E�g(\�y����
�ڙ�3���K~��sn�N�
-͍��{�*IV)�T��R7ױ�B%m2zk�R	��n�owoP��
�ҖU�4�Ŗ5݇���L��W�e	�����T����
&�w�e�3�>w^N�ׄK�Xr�^I]�Ahe
�I��X�,Kާ��f)��!J�EI�@)-D"
��%�@
�R�0��7�to�&�����{ܥ�DcγT�MARA��-�5Kp���s
�JOJc�)����e�:�إ�����kz&�u��w(�m��͗�z?T��v	����%�J`I��)M:�PJ��i��3
����VU��pӛ��L	�39���a�A���Jhq��T�J@*)ө���JQ�R�*�[
��*��ؿ�6�9�
�6(9���Xv*y�-�_�Ҁ��ҞY�7Υ��¡N���m9郺j���`*Z�����-mR#0�I�Ub�giD,�3�.���<ś'
-MaUA��JuI�
-%
�AP��=J#&��q�v���
[���tq�$.�dRU��d�]�	�UDj��� ��/�Jb�{�J�J�V	��U�,ѳV��J>��A}y��y�SE�E�U�</u,�mh��5kYR�pAR��XE�'����<H��
-E�@�zE��j�l�J��9<v=�g>Si��xЩ�cK$R)�T�����v*ũW�"��6*ZU7N��
���@�k�c��q*Iѩ�/S�w����Xb��%�R�7��>���;��~;]ƥ	�j
��Vc�0�*f�d�'�8�(,�\3r����:�"�R"��Q2���dMU�K
R���A鶝��76r��:�iܥ��68��kl�lU��M�)*a�%q�汒�opIgt��}CT��E��!U�u���p�~U�n0<��R]�K�t۳��YK*m#(�b���3Q�~�~�ť�%m����%\�J:C�� R"�R�XD�'E�D�Lb�#�'0���N%7�����JB���$��6�J��*e�SI�a�C�������o��OU���D��J��N��Uj��w�c�8`i�4�2
OP
Joi�?�����C�l�g�r,e��Y���Ĩ�&��FDK}�

BP�@I*
������GQ�Љ+7�AiwnҏMz�-�v������q<.���{YR18*e%������i��8�����S���N�DI$E�:|u���I���ʒl��x��	v��m�T��+�P0K��\LZ�A��Y��@%�
v�����ʽ@*�,5.ѩ��,���P��I7)�D�&V:g��E�w	�Y�p)䂥8E�
���%�L�$nU�)�=-�T*W�
�iy�<{6/}wT��B����U	øS��
*e�J�.��mq��h_Ju{mU�
�eUYX���QIx��xXjY�'p��Z��M��
r��f��dy&Y"��,�z��gJF*�8�a�r<�*³[�Ը��Ԡ��Oe�R�2B)Ӊd���P�O^,K���͑�4'']9}�=g���K�7�]z�o�D�e)�Y�՛Y�i���#.�%>�x�%�01ї��ڪ�,���)	�,Y���$٦�Mz�W��I7��Y�;���]&�V��k�*j��%h�q���co
-!�p��R��
#�b�1

�!�8���T9s�Qܩ��JkV�tTZ:*�𷨔+W%��s
�S�^��*��aUr�#~Q�Rf
�t�*
�%�R��K�R#7/�ouX�@ivc�k�����?�����~�%�	q�$���`
j	?>���=���I��j���(F)�K؅t���(��aPڏ����L��\�2��{�O{̥~\Z�#��,���Ch�uj"
x��\��'���T���iW���U� �Z����T1K�Ǜ�Fm�.JooG�:���P���9e�k�
�6.K
�P3
-��M�Kp�[,`�/����U	TBO d�*����9�~�q�V���U)wU
-�ߦ@rT�gb��i�.�
<xoNr�YW�*�=��#��������6/��
�Eiߡ�yMP����vl����5��/�)uz�M‚nU�9̌zT�o��_�I@�)/%�E)�PZ�2�fҲA	��hP����j.��]���
���Ku\��G
�<���3�@�PEL�nNt�/�%��(�� 
��S��
�ݍ��Jt06H%�ҺTU�Us�I�AuPz�?�&�US�
g�뉲�ۢm�}�-K�Y�kDB���fGS%���g�bD�8�ReK�5*U�
~���ߡ��'T�:*av�*	�{UJ�*��bժ���mt*��Vc*a�~�F�R�R�R���$|����h��=v�es��m���o�Қ�jY�-CP-�I2��ː��Q߅�w,�(	�a�f�I3ނ(��(Q�b`�����^�%�4���^uf���.��q�Y��+�hE3�c
-�-ؾ,�^�q�	&�p��i��S�ݿ�J�Jȫ�K8�O�k�� �C
�%�������Qر�|�~�F�R�h��ʦd�&�8*��DG(�稄�4S)�T�J�z�Y�o�Һ�JY��U�šJXj��J���P%��쫤��j�F>~�8�ªԤ�&)
�dM"�N�#}0�g��Ȼ
X��7ր%����F�d��0��D������/����Q҄����2'�h�V(���TP:�R_t�7:��K��A�^��͵pVodלsf
ҫIBL:!�E$�a�R�It����T*n���ls4*��:�hU��ȴ��m���lPz�V��L�_���zˡK���u���H�u�P/�(��M��"$��d����
�ӠRqw���@%=�JI�
TZ��6�*�7��J�y
��n�R�R��A�1�j�ƺ⒗��Ϡ��Y�I�1M���GW+������~Q���?8&�_��-=�R�?�I�:BiՠD&m۠t3�.�W��ܗ��6\�ʲT�YBT�i
�@z�P���
G%�$�Di�m��V��[�>l�ź����hTô�3��MK��պ�mF��[&�5�	�X*Z�$�q)�}��R)T
i)N�/��aO��J� �PT��T�M��T�
����
B�Q����ei�Ҿ5i
-���w�W�4�K#,��
���W�A�K��4� Rj(Xfԓ`��%:߾5(}�$,J:��K@)�P��v$(�����k
O���(���.����z��%�Š��.�B&!�Ea(P�b�01P)S�pW��
U��Q	,���j��ۃ_�sPz�3Jź��ø4`iw�Jֱ���%!�'�B)D%��m
*TyG����D}�x*���T�~s�h��U*�������{8,��
���M�J�[��]o
ai�T�
-M����T�ba'~����{��4�R���۰��#�hT�kFi��:������ַ
u�o>�4�K/\��<�0H,K�,_bI� 
-SN��|o������e�=
e"��*e�S�U�a	xU�T�J��C��e���y���F��8�f�&&�%�$��B�ʧ�D=��J�Ui��J�[����P��qU*Tz��f*�e�T��x0��}w����%�P�}||
J���uno�diC,dG�"O4ҭ�i�X�G?�(�S�,�%>dR鋧�"�d�R^'��Q�y+�P7JJ[z�v/ǂҵ&]v�������ɸ���%�q+���+��R��8MMR\"�|��|_>kD%�PKL�l���j�~:�aL�',�0uqig��c(ݹZ��n,��YZ�,e��,E��B��T�'��Q��1
3����J�T9*�V��0 6�J���\����J�5�C�t�R�%��"}ԧ3�
P���_����M��AHs�\V�S��$x~�8H�	d�,qZ�K|r
-J�JK샴�3J�2��6'(�Diޕ�ݣ�_6��
�H\rX�%����PT*r���m7p�
���K,�@	�T`ܥ�� \��*�쾀��'��'����ve�n9���O��9(M��~%����v�L��֬)Y�RZ�&�B��#� �qj��0�m�\�*����7���|�s�?e3�^�����ҩDC����*��xoo�T�=�JðԦ%����9פ�O��
����1�$�4��2��5
�8�3<���Q�\�CA�� %�Z��%�%섫j}��kӇ��Ҍo���~���,Kۍ-G�
-�-
�$��N��B
�0\x>f]���PZ�*�
r�J?�*�a�Y�9qi�mϮEi?@��;ܰ�d�����g�ʉ%��P3�%�A,�@�Dq�X%@6���$;�i���_�ҥ��{Tz�H��,���t
-�G��
�6��\�I�[&��%�L������\��� %�	���_'�mM����+PN
�מ�$ّ��J�w�ג\
�A�H�H>��3�L�,��4.
-�B�A�ɉ��~�g����b�%KպD,Q
G�粸`Ipt:
�ƥ�=ΎyX�"�;%�JE�[E%��R���e	.=�(�
�*�޺(��
-����f�X��RZmi� ����A1LEJ9�r�4�Ɇ>Ӧ�����UjX*]z��1i��g�;_}
��c�T�t4,QM
�TU� `BdQ���C,%����
c���(�]��g���7J�
��2�ŋ��_�'�����u�\�K��
KҰĢ��7��c8
&�p� I0��Ur�K��M�e�^���+*g`]��,I��XhrI�0
E$
JR#"r)�M+�T�T���}�:��b�s�&-E���UY=�̴g!��hZ�~�V��*�`!6%��
-��`�����D�v ��~(
�%J�tr.Jm���*�(��'�X그sw["�(��KX\cb)`�q�
���N�R�~�J�J
��N'�$ۤrSz�D���/��Sxr�֞%�XҚӺ����}H&��6�R�ҡVi���b�tS��5~3�\,5����I���'X��z,�K���
n�
fH�LR�J�&��X�$�`�$n H�Ir��F��(
�(
������q4?��.5����
K�a	�$26� �G2"�=Pª��R���T��
-*u��W�
K�9wPz��f��_�k�r�6
ڳ���b	qe�V1H�,!f����0���D*��R=����Ҝ�;_�R�bi���2�7�g��(�\_��r�T�A���`ҁF�]wX+�C�)�G��#��CL&�A��,�P��%J�3P�}��>�/���I#��K�%��f�6,�	�D�.
-ᒷ�����J�A�GR�����dƙ>K�I%L@�m.J���Y�b�̬6K�K�0?�Rh�X��lJ��Z!itHҲ86�6�����=�]|���O2i��_o���������p*E"t+I�
�����9d�-@��(�jSF�T��ܘ��I���)�����K�&�o5KG��Ԙ$���0�>���@���lKF%�u����H��J#,��S�T�4�g�EQ
�6��i��DI-\��9@	9aU¯�J�P�
�6��`��,
��Q�Ƥ+��{������^YQQ�NUbD�x���T��,�I��9
���$�&��%�����P���BixQ�XѤ�����d߳���T���KhrK
-,1L�
�8N��0�7~)M3x�������x
�z��$J�xnd��+��,1��,�`)�+i@�#
-
-1���8�*�,��1m*�*M�d���:���h��{�Ds��n��.H%u�I�bY҉P1�kS>�
<b���I���[��6Jʵ)=<J�&P�~���{}��.��=s��OOU�;�,��%�J��%	�B!`�� 40�X����|�J�eɺ7om�νm�2��҅�ri`�g�O�m���K9X�*ƺ��p�b�U)N�J�<9�Tp�J�M�M�ѫ�>3[�%5]a9L�q�Nب԰d��,Ad�3�;#��=<Ò`���$�I�
�W��	%5��S��sc���4��]WHb$��f߳6K/#,��dhs��(�̏�����.̧/�%��/U����6���K�R�<�(�V&]��ja]�`h���$�LD���J�lK)�5�M�M%��n���浬��j�'OD1u��T֔���P.K4���b|zj��+���
2ɟB�8��ʋ��I����5�RI��ob�X�x�hm�I@��~3�3��~�z˒�ҋ����o�PZ=���R?���XJ�U [...]
J��gY���T�T���{��i��&�f�����0�d�f�.��
�
6W��<�}I��D�(f���>gw_|�d���(�m��
J�
QZ�s��1vL���!���4�KX��$�$`	�9d�?��f'͢D�Bygy���r����V�f��f��� �~gJ��}VR�����O�zKf�x�XB
�b	�,�D�-�$�V�fT!�o��M�M���o���Yd��4r&�k"�鰚�b7BSSEĕ��0)�5��%LB�;E,}�K��
�tǸ�"(q�j
��ƣ(5&�V}��׿�D�r�z��<��H�u��ұ�R
�؈4"!�pD$Ǫ�D��J�R�:-�5�Tے�(
y�(-(�9Y]q�
�
DV���%�.	��G�A�X��lSiS����7˥�U5��+l�ʲ����f�-�੸È
W��I
-���/�
,�_�|��/_Ȥ��DIJ	��/Q:^���/7���1
���ݮ��
�f�P��ı K¸$�H�

&ª$� ��R�ǧ���
,U��V�Km�^�.Fi��釵8���z��Y�`�Os�
s���	s�A�V%��IJ�ߦҦR�zo�L���|��V*,�Q���j�lB3w���d�1Ia,�U�0����u	0}�#��@�{A�␺!�T�D�ҡ�����Ju���/6�ł�q,�v�G���b�Ѱ�7,�ĒB"�aS��
�pB�q�9
�����R}m��:�2i6J���T�B�\��%lJ H�J�*�Y��
�
7�6�گпy��.�r���ș(�U*��_�*K��,

L�9�>
�
-}�
4����o�Ҏ�E�y
JW��;��c
c�n�oqE�k7�6Kǒ%t����Rh� JJTmKYN*џ_��K}�l�:(
�4�p.����n�K�̬Ğ[,��b����-�f[J�4�?�����j���*�YU�*,G)�e<Uc�Қ�e�e],�
�_�r,KY
-��+	����&�����A��x�pBɸd��8����K�{?��z]u���t�s�;�ҡ�R
���K�`
�L
+T\��
*�
�V��R�!����2�>�rF`���B��ҾbI'"�&�p�`���-Q�X*������c���ș"i����I�&��x�!���[qx0�R�/�[���XG�G`i�a�A��;ϗ�F�:f�Z�rS�sQ��5���bA
��7��ZpU�ui��}��V�.)�d:
�ą4�j��
-�J��U�a?i��gys��'�P���hAXk�䌬N��P�%�"�I0QT�P��FRm��
-�^6��p��wi�HV��

G�9kkqa5�)�j��vz0ט�%M�y�*\c�"�d�w������	S�F���olK����ᅤgu�1��,��Ti��KLRh���M��
L�C",(�n�@
��2�
1x�f��VCO;�
{|?�n�*��2C�aU �AZ(�1U��*;.�n	_C%
K�K��m��	�Lǩ�`Zx�L͖`	ZT��L�@�K]U*rD#�:�e��F%�-�I��&b��e/�YCMjƕ��Z�H5��i�%Y�
���=���&����
J2�3(9�x�
-V�y7�ǹ�?����s:�a J�GԔ�DQ�o!��m["
��T�ʒ��*����xC�s�b
�u
t\��C3'��
-�h�(�%���&I(�*!�$��e��F%�-��I���&�`0�]��&�r��bIsT�\_�2��q�g"������������K�F+z
MI��E��}o��9P�� �,5���c��)�X�J,5���DM	\
-�wQ(�
-�<�
T֢|
�8,�\R�r
*Mg�d�X�ʥX:J,�\�R
�i$�'��U����%�F�9�o�sx�7*��^��Pr8�1_��r,�OĒ�{���{��\���,%Ĥ$8ȶ����r�yy��� �$��
JG|��B"��
���N&=�H�
VحO;}�yX�{,e�K"n��K��JE�W��ҩ��{���Si
-K6�x&�/���6�G����	��\b�4<2^4��a��c��^I��D�T���(NP��5��` *}|||~lTڨ��4s�9Pb��$��b���V���
��R*˒ ����	����!1)����C�(dS* �A�4
Jk�\�ͷ������s`I[�
,�-�
-,ۈ���$0	PU%�y�*9�d��zx&�H�]ɾ,�0�Y����t
�K�Q��`��QBu	��Q��Q�FT�pR�z�y6*�o�sx�?*��q}�@��֤e�Ùa./���N�b�*�,eT��*�0�D����
0)�� 
	9���Ju�P�2iI���3��p`Z�%���8b��a�8b	u)�H�0�<�YYTY[�Q�}N�KƱ���7äǐ�V
�\<K3��=�N5\T@,,I�T���=�U�wT�mTڨ�M��U�lkM��:^���2}5o8{ �JVYjڲ���E.�
��$|
�����
��rx}ۉ���CPz��
���V��¯��ڴ[��
-X�Km�B�D&ɤ$BڥqQ�B��:*��ă�B
&͒�k
-Pn��q�Ē*=X�%Ym�uY�r�(m*nBU�>%-��J�<�؃�e�n)k?�]��ͥ�XR
�?hG%���P��*y
	|��.|{{}{
��C 9�J(��W�:�ns����Y&MU���
�
�V�u\�c��`	����R%I�]��d�Ж�<#頠���:*�X�
��H��d��I�[Xz�tB
��.s �
p$<CP"�*�*}nTڨ�
4�%�\
$��q���1�^��
[�
O��5S�JbR�c)��n�{0)HD
	%��8���nE��u�%(�4`�M�s�̴ssi�X
,]G,Մ��.*4�
��$�$	�4F�A��J�A��	��J�XZ~���@1�X.=�@����R�r	*e��K֥
�)�J���e,K�6*i#y�d���-��n�q�˶��.-�O
�6�P�����-K���.�
.�9x�� ����
�˳�4�$>޼*\�o�c�M��
-.��R�a�",i˥8
q�XH(�*�+yI��v�H*!�>?
��?�$�

e�g������ݩ�c��O��
�
-�#�Z�HI�JT�h�+*���Qi����3�I
yh���z��G���B69[-p
H1�Y�.JY��LLj�.o8�.ܣ(J1���P"]T(]�8�d�0!o>5��{8�fO�c��I�t9
	KYV�9�ID{�HB���@�YT�\L%�����x�&u/�$��9WF+�;�}�
b��b�\T�\"
�I�6A<��q��F�9C1�V��G�h�����Ō$4�er�AS���M��B�%|�0��A�=m�{!� NR�R
(ey�C�4%��Bi|����If�u���y稰OK;m:[j�t,�XJS4W���$	��*��
4������J
�\`jf�t�I�d���]o�X�8�VcI��]��T�%a)��
^¡Ɣ��WTeY�P8�>P�{��F%m*nN&Y&iκi<����&�\����,�e�eRQʚDX�8� &q8�P��$ҡD��'���J&�X��f��
l5(����ΗvK��%���
KG�%l��R&n�aG]�LT�*�
Y�i.�>
��K�#��33TҘ��i�6�W2�:W�V^�f�E�͌�e�
!�
��� ���'�;(�N�J׍J��cqc�P�f�$�0f!g��u�i`2�eԥ�T�[˿w�,�47bR�b	Ui�vA�
C*Ka�B�:�J����Ħ�h-pƛWF��w7%�,0���pH?��=��Ky [...]
-K��
].�Ku�n�Y"5I��J��Ruj�=�*�b>����$c�W��.�>0�ᵺ�
-����`��f�V�<r�HSl|eQW-��
-��ڨ�QizJJ,�4$��b���PA�Ҙ膛XbL�|,�NfYj����
�����H�Q D�8�&�(Je%� �h�"Y�4��(i�2ɮ�j�5�o��j�Ɲ�aY.��K>,�/|���a�:b�.���`D�7tI	JT�����QR�|[K��dC�c��F�l�\&q|z5��Ie(����b	/����6`�Ԫ�l�D`�h�-ɔ��d�N�lTڨ4��6S2��$�X�w��;j����`�~�\R������,���,yjY���Ti�� ���?Q�LQLe��5(�U�W�4&
�T9$)@�e8������_�'��|,Q[:�X�Q��$�U
��,&(�yw�I���T��~耒Z�&1H�ԋ�uNs6�cmu�
-�4��O�`�
��K=�$�JYF*�T�oTڨ4yx(i��d i0�Yu��
�m����^V�/�XZ��zzY��C�Z�p�{,�Q O��$P��\���&(�i�J�1�W@�H9W��LR4�G5l9N:�40-H��3X�R��a����2anǂ�����H� I���d���e��T�.Q5��N*���_w�1�j:�}
�� U
��1�v}L���TJ����J�P
-L�
D�/Y���N��׺K��
-XRV��T��K�=� �;��
�$�|�u.���F��J_�1�R:��NRH�Y��9�/���Q�'���c�K)��D���}c�6��T�=�`�SU;JU�
�H�@�>�JP�̆�5�I>�Ƭ��
!�R9B�Ed�^
�i�`�}K&
p�@%h!�~�dB(A�YG%����ןR)����KP*�=�J�)�,9�
�V�hU�*RJ�X�o����U���$X��M����i�iJm�Y;�=<�	�ta*�6*mT�w�($~'P�v{�9K�5:S���u��I���˛���"�b,=�?�~K�
���O
	�GX¥���
���R��4�Jj��[�ηqN�-U!�Aˡ����r�]=����Y
/aIS��{/aL�"� Hp
B	�(a�
�J���G�"�=Y~�;P��$��
�l(�Z���O�5��o�O0cI�t�e�O�\�MCD����Z��x
�3ب�Q���S11�5�I���Yb,��8�۟�z���0ȟe2Mn09c��l�g�Ec��8�%\K��W���S�ׯ=
K�$�4�
J�PZfR�o.�<��'-*��$j
�/}�vs!���3,}�X:	���,a�1t50���(���>��RB���JW��9�&�L�D4
-������"��ZwYO����XRXb�v�%ضM���{?�7�"X��uZ�w���Q��i��RiJ.��
����#㠣\�e���21�d0��f2��U���
�o̤�ǒ�
�;��]���%�
��T�ti�=�x_��IQ�y�
-,���:Z
/�n
-Q�}ɥ����c,�<�Ɖ璵]�\��@(�
�p�6�����b�,}?Ji���ܩ(������V��:ǥX��a�MQi��C~���e(�{�
�J'x��F��J�/��A���>Gn�b-��l+������2���$`����,y��D��A�������/H�
���*
K]���S)<��P�3NA���|GvN���T-�
��cXH;���_��3qwK����
�%H7�$���\J����f�3�PI���d)���5or���"��S�����3��%�Q��ԊX�'8�3���c�w]���L���J�iʨ�{��F���R(�q&R"��F�-A�d!�
-�J��>�����^��֚�^:�
�����M*^B�	����ښ�RU��H&5�ƶ=Ai@(M�� ���� ����H��1�0
-���˂��n��n����ư��r,�c
-� Gt�K%��a�T��>t�=C��ŋ|	���4�*�K��,���RZ
�{�c�u�t��ɬ����%8W�7��4Lm�YFt��
-e*]6*mT�{�E(]�P�Lr���d���k�OXJ.
-�\��sIͥt-=�E�
C�
T,�����ai�C��h-�J��
-�Q�R�����t�IS�oQ� I��TH��9��*��(��^�K�a�Yw9#�N'�%c�m(�@`��e*ѣ����P�=\Q�
J%��ɴ�$�|�q"�\�SZ�{|�8�^�����G��T����Q���OC;�7 Q	�tި�Q�;�S�վk<�<�ƣ��/��b���WR}�e����7����\�����sXJ��M�%�A�,!��}�
�%�$P�Ђ��ց�R�]�OU׸# �X�&=�

w*�8:Ӵ;���.�]�<�	�w�����iL�1	��u�J'G��U��7�EJ�qKL���Fɬ�Mb��shvt��)�<��B���,����tE,y*���
=�c��-S�}��9��WQ)��J\��PRLRHr��CS���]<�c$R�a����-�8�2���x�12���?�
�Q�r�X2
c�!.ɩ��Rk��Ci^J�P�:�_�簓�s��6
�
-M��VC��z�!������������]�%
-:��|��:D.a����/ԶtA�2��	�tY�J�;,B魨Y`��IN��!R�2�F{����
-���հM�ZKZ���a��d���J�J��q���$=}�$Lo	��Xl+r��5q+m�N?3d/JB&���ϥ��?��u�+�6���KX��a]U�
 	�D�@Y�P©ty
��⏿Ȥ1�7�5� 2H"$�C�n��C�Χ]���-|	K��%�3��7$1��-Q��
-*-(�j�YJ	�|��$k�q�9�:�[P�c�S��KE��x̔��D���Z��",�8VO��r1�D��[�
fT�1P�}��F�/.����5 at it�蘄�jI�,�����~Q�/�{���M�L���q���7Ua-)?=~ɜJp�qp,!����=��A&5K-x\B���^%)�g�T�G�I=�[D$�ɐ���`NQ�U���U���4��ZX�t��X«O@%�RO9���]����b��g�Z*�tO3�$W#z����&�%+8��%ZQ����"Q��������⃨D�i>q��ӹ�)�'
RD��F��Jw�vJ'�����>$q�����h�O�~M&&O%���
l���w���Z�Ǟ�ґ� ��*���"�Ai*A�)Xރ�J�N򝛂�5n�7L�y�*�B���Q���&�
��fi7'\
-X�I�����c	�4�&
-:��}�$�?�@�h*}�Tʠ�h���g�
�d]0N�95/�X+'��uG�u�ԂP�
��(�)���X"*]����@2JL%�t6*��P陓@�w%
J %�ā^|
-D�C
K�,�c�q�H��W��D�4{Y�LF�%\��a)3�c�&c	}$Y��
�QS�MCD��‚��nݿJ*�Jn�r�)&Q-T���O@����u2��v
%Q��h	NwI�
崋Zx���aib,upguZ
��J߄��i�=�1I��$�
-�SvNS�wN^+'&��k��,�9�Kɬ}
K��>>�X�����
k��2!��J����O95��P�D&���
�,�
�
--u�Ȉ�=�z�셦������a�a�I,R�ƥvĸ��ح,!�5���v!Hq(i*��o�n�$��]�oT�-��T�2$S)ȱ���h*����t��?w�g��D��L�	���QH"&�{�i*]�J�WRi	J
�	��FXI�AIv(8�ku�K�C��/�Z*ͥ�
	�>�4�>4�`�NC�� 	B�Qi�ҽ�D���`�/������jköb
���{^�~Ϟ"4��� �
&�ڪ�G.{<��R+aISɥ
E��8a	Xt� ? ����H�O�@)J�/�$��>�p�2�*Q����DpC�ɡ�w@�\�ӎ{B���ӹ�|ܕ�Vp�| #'
q��u�L�=�:GC�b��T*C�\$�I��0I�$���&H&[)w��Zcv ��	�~�j
L[ť�s��^��
cI:�sL���GM���J��.vJؑy(���I�-s�0$"���D���:�%|\&��_�˃	��}����ڜ������j�AtEH\|INR����ht [...]
f.���RQ
e
���]Q��)��W�m�0\�_�t����K�\��T�Xz��6����J���5K�%
2	�/(5%P���6��
|	J3���R0f���~�Z��
-�X��z9�LyUH����i��\o�o��RL%b�H,��YO�RaO(�Nc*���+T��҅"4c���4��ɌH��dҬJI+T8x'K�VF&S]L�4?��S�0b,�����Q� $5���QTz�R�W�ҕ��Ri�2o��A	=u����Tp&�S���٪`�ǒ�
B�d*}�6�ͥBXj����B��q23�
���BdO��<'�xw���I��p����:��
W3
�Q�>
'��L��$^N��T�|[���@Ҿy�C��c�ij��ɤɔE#v�£�tg,���K��QI���P��M�t��ߋJsP��&�I�ZI�#V��@
睍z�ȴu`�H[�mò
�F,��4�Xa,��J�Ԣ����A���t&S)��%�}����%��vz
�T���DSi,��8�p���us؋d2$��K��%X���bid�;��G%����&�H���,���$>�w�
J���A��[��f��;��
�!�n�y�*<�3��z�
CS��`ڎ���[�x,Yoxy����K�P�I�sQ��MT�
-%����׬�f�P#&C�P�`��s���N��f
-Rq0�ָT�f'���
��kX����J��Ѩ�j
i�6�^_
�
TzP��]�BI}�rVw�O��'����$��Y��%���(�T
��/
-f�RS	�"��ˍK�$n.�T=�Za�c��}d��w�JȒ����X*
-&��	{	��,�P:(M��
��J��ͱTk��6��oa��\�	GP����ȱdޅ�Ч��R�]h�!�K�b�p<�o�Q��c ��@��T��J��E��|�pHJ�oz�x��^)HU, �@+�:�0���J�*�P��Z�%`��U�=�a�$�R�����J*]�+[q4��P:z(�`u��v�O��ޒ���JB*IԻlpV+�.[<�&��Z\b���;,�Xz	7߻�V/
U��{U�=�g7�ZX�p�
-�RL���a��tz�N�{A�
CI���nf��U߹�o)�
���;�S!�U���Ԡ
H=�)�
-}ڱ,���qiZx{
K�>�!������%<�����xT�%
U��{��(EE�ifLڪͩ��6�v�%c�X�M��JY$�V(z)�H�ʔ��R����<�n�i"����w�
N���)�I
	%y�V�
T��4�*M�R�����
J;��ġTU`o%$1
�Պ�η�yr���wD�Kd"�
-�$pi��s�.{,�Q�|K��N��F%k��P� Ke).�R�
D�7�?�qA�sPz}{��T��^��?
J�.�n2i+&�L�|+�$S��0P�i,�VeAq7J�<�]��z<�~�ޣ�O���Q�|�L���NU5`�����!(
4�z�c��mN�8�
Hđʃw΢Wj�U
պ�j]�
-�T�KK;j�����X��!*	K'��a<���#���>z(=����ME�4�̛l%�kgC	
a�o��X
-§�4M˔�
NY�wt�w�[�?8
n��0�p߆%����trX��X�2O���MB,��G���|0Xw躓��W���	�.�n1I٦���r�Ղ�-U��-���^��NP�r8=��&G�4J��_�%K;N�0��A
�O�
��
���\�$\
��N*]k/�_�"!��
1	�IV'�i,YY��k�촒{&
-fJ�Kղ	���u��\K�"�(�R)��dzP����+�44Zd��(5J(}n(�[�$�=C�$[�J�%�st�BQ��� &
�,��Th.A;M%`igX��Z_�c,}e,]�E��%d�
$_�K��h�
J=�~ݤ�MP)�;��� Ͽg�f�Ϸ@$���m�Bh�N
�ae��B֧]��nZ����s.�|
�
,������v�
��2J=���L�k�EP
-Eb�YV��-0i�)4l7���df�9�8��\��T�b����s	�!S��\jd�
K�X��<�
�Z�R�����A��f��O��eJ]+(���#���g�&7&!�
I�BZj�ڇ����
B�YHs�[I�x��%��zC<eҏk�
���5,}},E2�E.���ATڱ�׵�i8��zoM�xu*}�>��B���U`�f�˷"��muI�H
�ގMN� &��b��+&-�����q7I�W�t6,Q�n��Z��e?~�n���ľv5�
%�Y�i��&���1'�X3'��Z�ZW<�:���R��/��ݮ�����47��
KG�%Iֵ�B(u6�^�Q��%<�t�i�
T�
�S�3��F@��1
�4�
-|&d�e�R;_-��`��z�w�$q߭���t`�V�K�Kx�=KL�VX:�`ih����J�ҙ�9�m3�*���^��kY�8*��9T�*}d)9(
K7?�E�N]��LR��k�b�B�T��z��
�
-�L� �J�
��/��ѻ�G��ag׶�GuL%�pQ��[�4m��b(5�HԽf�1��
-�f�0��I�ӟ���X�ZG�6KV�T�a;�K*w
g���h��wb�
�tXrP�:7���J����?����I�_�[��YpY
�Bcɠ��PZ-�̘$o���h+�`U-y�ミ��p���D.=-6h}�U�LX���O�q���O��p�=�δ�ɶ
\22a7U���"
� �/L��|@�ӳ�xC�X�0R5T7=�й�|+�Z �j(�(Vz$�+�*,�����[8Ҏ-�ͥf�»;��i���:1�
b	A�秇�������5��iۊIKpM�4����
�
���
-㖽.�Ry�Ay���\�
�~߄�ٱ�72�
�[.u�%��M��
T��QTJ��#���Z�����Qn���������f�'��+Y
-���Q*.�L���<-P�֛d��
?����ޅ�t#�~_�Ҟ7�+�����P
-J2������"���9(

J]�K7�R�n<{Ǥ�fR�$��zN�,>�
��e�
-J�r�vj�Q
/���GE�֨trTjM+[���J�;R�hS(���5V$�f%5#��5�v,��I6V
LLN��(�A(��h�vn�J����ځV�dg��<d��T��A��k*]�J�Zc�RA��$�Hb�[�bR"oII�?�˭��l
���W�O���,$Kq�o���8�0�����ݱ
���D�����R����B�wr8�L
&��y��Ԥ�_uˊ
�XZ),�y,]�]*=1��=Un$�zՙ����Q	����K���ۯa(
(a)��]W�����f�$S�o�
-ep\=DQ�K;Li�p|��x
?
cɉ�3�it,
K[�%�$��>N%�h���zM"���(Q�K� �j�YŚ��$�}ɘF\�S�Z崙�T�u�%��5��V�kU�Y�ǒ��sXr6$Q	���`)\Jv*���F��zS)�F�%#�%4u�{(~U�̐��$A;K���o9
���Eւ��)%`@��R��O��{
{������X�T�yGX��7��f%G���P�U�N_5�F���h(I)Х�,ZKT
-d�&6�l-�h�"���g��߻r��@i75i7�iG\ʸ�M��o�>�zXz}e��G�:�$�%���G��m��_@��â��d�-i���3	5�H6
%�;gR*�VT�r-*���}5-	hd�CK�/�Rl,���I��K�'3�zT2?��ݨ�7R)2���T�h(闆̅�9Z:�&�ZIp��S�7�
	D���4�?�^�a�
|���^��B�_�� K�}�p,Ũtd�HĭV˕s$�(�
�P�/���(�(��t�ţtC *�%�v��U*LB�6H�Z�vU�W?s������]�Ӯ����NQ,���Zx,�X&����ƞ-'
	�+|
��V9W4JR$�f�J�Th&)ɖJ2]!�C��\��D�I� .%

�j�B(�jֺ:
��N1��
��b���K��I�Г;�nT�Q��<CSI�̃R�UJi�~Wdd/�IT��Zd,�J��:<��I�D\J�K�:O�2�Xj�fձ�6��Ro,]"���n
�X:
�K��
���L%�(��ʼ��~9��t�W�BN�n�T�b&I�Hb"I�eE=<9f������-<w[�BZ8k���^Kj,�1>�l�E��<�r�\���	hֈf��
L´M [...]
-Ju��K�,CM�4���I����L�?��L��`,Ts�KI��%�%8
-��I{ۭ5����k�R@%`�Ri�_t�K�ù�+K)(=�
�|(�*��'(Q�B�wۖn�B�5�۹�RU�`�0���t�,�i'`�ii�K��W��c��o����Xb,
(�H���*�{=����T��*>�z�
{P2Eb�E�S��L��H�Y{?7�Y�,
�<��ֱ}�9O[蓠�q��P��X���H�ͪ�����k�àX�B%z�=.=9P�M���3�Ʀ��l/S�\�Zs".�V�T�lI^J�K1��P�dc�	���)���m�,iESiQu��Vk*z䦯K�J�&�v��vt���:��vq�<K�;�{����K8�P�ۧB`Kw�6y�H���b�ͷҭZ��=����.M��v���N
�7p
��
kdD�������ι�wJ�z*
P�
-���6
-%S$x()ͨGP�+�M�և�RZ+"�+U>�Q�Bj.���Iˊf-��_K_0jC�,=�H0��$
%g*�6�?��F���Jo��Si'P�p,B��h��-�
�/O)��-A�6Տ������
�K��|j�7��-��S!��l�X:ũt.\���O*1�
�ֺ���䟚JN��.p2Pz���X�JT�k��ZJ7
U�$�o&�t�ً�s��G��wN�Z�]����~�t
���1,=��H
�x_A�a(��y@��-,�E��3=��3��T��h�8�0N�Ռ&�[�K4lE����?ЬUX����Qk�Ȋ��z1s��9��S�'ҍJߖJ�S	���j
��Yddcі�@)(�PRLB
������Dds1�25�K��Y�^&��ǣc�����/�l��A��];&�I�
���]?��t�C���H� &=��Ԕ�I�R�  y��w�
w^�i0ٴ+G[�2���Z��c����"&	�

&)*��S�*t%�EXJzݖhq�%W30�Ԉ��y�����JŽ�p	�S��]�����EjZ*wq,��pͨ5w����\:L(��ҍJߙJ�h��M%�YK.�?�ZԀR(��Y1��4��I0� I�����
y��5��\z�5��LB/��k/
Kg~t���?z,
K[�����g.	��b*��U�^��w�����,F��V�;�P���c��oon��5������
-La
�s�[x��
�t�X
-F��%}��D|8�Tz��'�ԟJ�hGq�>���Ԣ����4�5bH��2n������*�J(􇖦-�Z��Ҏ�0��ި��~�b��dOJ7*ݨ�џJ�G-�Ne#�e�(�ji�K��T��f� 	�r��&�怉|��{���(,Մ�2��(�	
-.���X:�c)H��K�C��K轌%>;uJ#S��+���
�q(�`,0�[4�A�Jw=O�6�N��S��Y�?B&t�c�i�*H�EҎ[x���h
���kZ�@�v��w���I���Pi\����۝�R���\B��7JZ3[#�^��{L�3�nf�z�a��Bhi1�L���!,=E�t�X�j�*,=L�P�J7*};*�o��q����j��K�����Ӣr�4�C�0�C+��6
�o).��\,���),`%�	�:5���#{l�]<�B*�>/��G2�%�
%
-���L���;��ڹq(�7��Բ���m�Jw��=O%�$��T�B~����������~]}�c	1w�k�e����{��**�D;Y�bPZֲn�H���4&I�0H�I6b
�e%�(��RT �P	`T�*K��VU��g�C��,��K�&�]�44�ơt���m�T��T�p���%�կX40��R6��(
�,�r�����%�����X��+� 6[Tˊ$l������ST��S�4p�� �A��<�'�E�;�o��q�����f*A	��U�Kw2+�s)ݙ�ow��Jԇh⧝�R�>w[xe[��>���ҳƒp�Q!���;��J�7O�ϻ�*��P��H4@�3P�`
0T��i&-�5?.�,��+M[VJ�Z�"'�H�K�4\�W���>2j�B,]rS��Z.�,�4���t�ҍJ�TRT�N����Ux��:�ɒ

���X�
JHĻ�$�F��G�냜��DXB���4�Uy�r�MUR�#�(��XRy���j*�
-�R�qJO�k��ͷ��u��H��u�q�T�J�WbJ�4O۟z��KՉ�����wѴ;��w�~�d
���Œ:VGO��FZ�/���$6́R�P�u+E"�,&
H6&[�ױ�&�AH�X$�?Ь����wkx)��gF�U�K�K/.�\(
M���
�~��md*m���~��1)��Y�����0I[k�S���\d,N@��2T��9Z^
-CL
��e�V�gǒ��5cI>��3��q,I
���r�m�k����}���^!UBQ�J$v|>��@���I��٧��v����
-H
؞�Y��z��q���MO]�}eC	��
F�� |C�#�$��,g��{�~��8n���n�Sx��R������MM�gP�IEX¡q0��
-J�*y�M%�*iѼz�BI	��ä�d�-�Vj
-)@�P���`)biX�N�N���
³�X��K
�$J��� �
�T�
��W�
eUZoi�IuHʡ'�vYP����%�d�V���\�X�	K�C�i^T`|��EYj�,	*��t��J'E�Wiu�,��F��H&��K�*y�7�*9�v`PY *@�1P� JU��(�1��V=u����~
QY�u��J�P`U
-O�)��(�_X�T���g�WLP�U�ͫJ�WůJ�$��%j�)��4˨(	��no#?ɍ��HeqI
%�TV
K-��
.Y"�taz�y�	K�K
L�
%�*�'�T�۩�J�%�3 FV�l蛸PKT��n�}��[�K
K?"ܧd^$���ACV�p
�R�Y��!Fz�I{����'Q���ZGZ�������o6t�zǠ�XP��j
-݌Ia{���齯-��
-!�[��t�A
-o��t
-`i��XY�X".��q�H����G�&�mK�v%�T.u�UA��̎
���%CR�(@���	��N�
-6	�D���<
Ko�`�y�].��¡�J�D�RɟƟL�SP�PUڠ�
�v�'x�x�s�Ձ��D
IC׿Q�%��ҷ�ai����
-��(K����"�:ew�M�!�J/�JO�J?CTzD*��tFU���S�
-mp�0s1vJ��(�X�aQ}gL��G�
��yn7!�7V
-��tF
-w㷇�CRJ�P�
�\�G#�N����P�v˂���V2雝�����uJ��2BE񃨵��Bc�iܤv�FS�:�!Pj'
�K/&��t�ЕJ����E�C�*���P��a��r�.!�ŵ��b$�K-�3d\�X���:���W
L���( ޖ���ei�����J�,q$I.�����M1W�����$ C���J�
-q(�iq����B7�[˙d�ۇ��
�{wSx&Sx՗�7*���I��R?�
��yP��ET���$�n�RJ$�(�E���Ĉi!B�IKEJ�P�$�����<�X�Q���T!�������
����ҋ�$b������J�+��T�%����RU)+�tY%�o�>D�ý�R��d�4�
=,��f�{���tn�R-�R�&�ۉ�dSi�$,)_�ѡ�YXڙ�DP9��t�&�|0Ui�� �C8xxb��PZ�5B�
Bw.Cw��0�!i��	�
K�9�����Jῧ��v
-K�.10=���J�=v�h��"�R	�HB����c�y!����$j�H9�R"e9hTV�����vݑ������L`��;��C�J��i��T:�}�F��6�X5Y�*�Ju�\$�<�q�@��J�_r�&܆���z��#J�.K�S�(Khy[�;��#n��DS��K%��bɩKJOO��4q�n���I�(���aS(�0x�R4ǒJ�;E)Ĥs�$N��D���e%��Eı��)\�]ח�r

Ò�;�ܪ�<o䪜�+���Q�	(�JBI��%jf%�Δ��(�͖	��k��R
�:5�%�h���Sj/I��X]r����q�@W*
L�O�RoU�ʮ�^XU*��+�f%| ر[
��LzgX� K�O����
ƐPY��i�R�RF9�N�h��!���H*=��ma�lJ�J�Y�����u�-

�@[�0{�R^B?�P��MP2�����>7
�n����Τp�;J�:����§P��c��r��/�Ui
-�E��Dc����B5��
(�jv�T�K�.��
},%�%�xU���ԊurK���
�’�$�����+��A*��'y���rHU�`Ϩ*��h��M���.��w�8��߂9K��w�,-�N`�h8��F���K4�J�'���$�Ď`ҥP�1@�<,�6�h��J�P1
p(�PRe��D0���׫�
��8`w��owc�q�!	r�tqU��Z4J(B	\Q�
J���f�(q�&K�
���%!�Z��R�T�N�ITj[�s*�^z�X�N�b9X2\z
1ɇҕJ�*���ж�q�RZDT���`��9��Ҩk�Z�fK�MT��y
�T�X�r
DAL�5ڒ�uhv���B���-K�%�K�ه��U)�ob�Z�L
V
-�Φ�I(�3
-ѻ���ޚԷpn�Y)���4��]\�_Kj���fPr]u�W
#���1��tY�SjJ�ݚ 1��A3
|Ws��R���R�,���`�#,�i�vۋӃ�%�Ko$YP:��ҕJC��
���>��J� MU]+U��P�0���L��{@n����X�"Q�`����Kd]��cۨIt��ϣG�d��˒���~/�DPTz����l&.FN��Ϫ]�Z\
��
�e6[��m��a�;�N����j;��ݹ)|�9)ܞ��%�%&��R�hͪjL��+Ja&q1����
-�J�Z
KU"-1;�E��Vx�~z8��a$*��),i.I�̇��+��T
-��^Si��У���;��jE�.+�J����KX3�2��{J��Wc�m��R�'��@G����஺�n�u!*�Y
<z�
,,I.�#��_V% -��׆,�i�,�uV.3�Rɡ�C�>L�
Rx��ݵM�*5�x�·�~~Y�X�\��Ņ�ET�@4���2I4�pe���ā�$z4�@*&����Nu�jE�7�����a�{����%�K.����1(]��R���3��u
�&�mrܳZV�>L>����'���#5�wuY����C
%s��
N� &��%��(��`7���!��XXzr��$���P�K�4�N�|C��@�9�%x���PR��k8tO���
�K})������p���ĝ��,�X2u饇I}P�%�h�]�vB�
l��%�@1]oJ� �E8$��ҥRI�D~puJR�*/�8��gJ�J��]�
��\���2i|S�Rip6�<�<��D�¸�!�
n�U��Js��6�AE{4�2RY��,%�c�\�%\��
�*!��J�gQ�Ć�%�%&�G�)YS�R�ެ�}�[Ǘ����A(�M%�,j�R���P����o�)<1)<�Q
����ZkR�%e)�%�%E&�Ɇ�ц�4*
�-����rDK��T�ֆ��k�#a雥S\�	K(�c���v�Ӄr7=
Ǿ�ր��5��
���=2�F*t���4�V*���"ע(Ue�ՙ[�"�J�Y�’��.���m�:��'1<͓
7��A�N���
9�S_YbXR\r��@�Ҫ���r �VL�����i
�B���*
�әPn(�ǵN�O�Зd��}^Yr���d�f���A)P��NU�E�I����JJ���+���h*�,S���y�,@$�5��)�Y��t�]��è�YC`�;�g�$�Ri`	��������/�ݶ�-���ܧ��e��@�p'��MVb�H�m��Bv7��,۰!b�CEt�⩯Jm"�X�������UUi�W%sǖ$�R}(KrQZDU ����(��N*y����~6��
-cb� �v�?(�V����t�c��8U%j�
���f�8���*6���K(�C���6��N
-��X���)
�=�����+K[��K�K#$)(�~7�ފ'�����
��B%�T&�"A鼚��RX����d!a��D�V6ZPu>=�.K���3`:J*�M�R�yFU
DP	����	�� ђR�m��J��N�N:�,!�w�5�LI�(�	+�
-%�Fr���,\*͖�),�UX�4\�tBʟ�JG*��D�nV�U^&<�1� ���V�)]}{�
ݯ򷹅4S��?��I��T�
�}��k)�~"�/O�ƒ�%�zt�d�ޚ'�O�v�D�A��Ec�h"I��
��ݞY��P�N��	�!,9��D�ed0�bz���?O^�
_�
���4Z�{
�8�������i����ծJ�P�F��,AH=
-�QV��dv��T�0P�nؠ
>��
��Œ�%�$
J�g�۬Jr�T9Ehmh����%A)$(�c����*o[XI3��H����4J
�$h%�t�e�5������Ò�K��PZ�$Q⾯JGY�ڃ��E듄����TS��7���`���� �2]js,��yP�इ�QY�`1>Y?
���t�҅J�9����׭��!l�pqF'�[U	{�	Jc5�;�JjQZDU��T�&��
�;5�㭠���|S��d�%�%�%
�?=�<P:CU��k�c�r�@�� P!r�2�~JP*<PZ��k/��-,qew%�N�p��H�jmCv�R��`��T
-���;J
�=`�g��m{˂
�zrwݩJG%��F�Vb�hC���[AiKZ'�S
�i�UjY^�O�W�%�-=-^�?�$΅J�i|*
�]GwA��T�Gr4�
-� ��&!�	��Ԫ�QS�Q���u��V2J��N��+��Nn��I�з���r���ZPڲ�cW�1�>r����1rΰLQVE��{�eJ %8��^ajӗ��I��Sx"Rx�0l
�\����o��,-MҸ�x���e���P��Jf���&mc������&��v�6B�:E׹Hya�

UV�Բ���҃]��6x�C�.��^�΅J�i|R*=�
�8�sU�
Z�<�ABȊ]#l�Iv3Ui;�TY����U�p�A̸�vCκ-�I��T��|n
0���Ϥ�Mi�*�U	��\*p�,��8LX�b�R��%��PZ�Rtm��R8C
-�J���n�k��?���
��\��d�
-������E���[�Ң�HA)����5��	��P��B�ִNz8CYaiL�OnW�B�/D��M���^Tq�0�%�E)SQ����:E���J�YD{d�̊4Oy��mJJ�A�0�RiK�K��`���Kd=��zk��8
���Д4�UeB#��P���(��fK�u�ݩNv�dU��lQ�� V���ei�=v:?�ķ��o�^�k1�bI�fU��(���hToiS�
J^,�(��aI�Z��"�}zheY:zʒ��֏o	L�Om��B%�4�
�
Q��źQ�1G�jґ�A�dU�gR��r�;��N�b�p;�]T�k)k
�@�VFG
䣒=
�X�
0w�ѩK.�
(��*ݎ�"w�` �x�"�v���i9���P�xYO����)
^��
-�e
-ǫ�%'�o+K�\��u,o�}+�2�1�Z�QU9�D㬘�̓�G'��.H�R��U�D�`��e��RYZ?�92�?�Y�
����T�4�)��M�Zs"bU�s�Pu/T
���JW���,����v�R���QJn��
-q9�5�㭠��/s}�Pi����F}I��IP���/OUjU�F
�Y��q�=��@����4����s�N���y	�C
-gdwڃ]�~�ei��l��r���^�[#��(A��%At�t��D��h�hu�SD:5�
-Qj*������a�,m��:
�I�\��%�4��VRI�$Y$dEr��	gQ��9��� �2����eH�aT1�
x��a�L����vx�$��iL��*y����\�'Ai����t�v
-IxoxVp�8IH�
��'��b8/��,���
�dwHU��T�ͥ�kj8�Q��`�����02?����=�����Jf�%ѐ#8
2-Z�E���w�I��.�6K�NL����3����Z�
�f��9�����>���K��I2�,�
��9��8�\UZO���ZJc��,����nK�u���ZNOC��;�a,{{����IƸg�<=m�*
$��"�r��G9MB�h���Ai��oW�݅�'�Xx}E
-�uY:��$��
��a�0�L�`{~ц(aV���~
Ѡ�������t�i,Q��{�Tj��P�a(=8e���eɕ�L�Piv_�J���G�ݛ�@)���U���
�8�
Q�f��ҹ�D�(������쪠��ī��oCZ�:֭���,�{���8F�%��
�Z��Ԕ
kT�͉)���ǔ�G*u���=��i�p�
���>���B�x��l[�,����hw�����
����<U��$���o���[��]t����
��Rz�� ���TY2�jSYڄ���9|�J�i|*�>)����ew��"�I"��1(*Q�9�U� �����"w����-�@�~�]n�������r������^�J�����DN[�F*ȑ�>J�vG/n��![�(s�dvfY�����_��E餪4%����D�]Ǧ���m
���g��t����*��
�CRRY�
����ei,�9��r���4>?�
I%��MҺA�)���QeI�7ȀI����<�<ZF�%�
�.�c�Ә��.�X�s�� [...]
-JfY���w;�i7�%�jg�҅Js��T2q�76I\
G)����U	�lv�*��J/���N�1����itj�[�r}��0���������|Eiv�~�=]�^Y��&	S��
ϯ�Eb��}�u�r���v}��wX��+�f
�P�ʾ,u
eiu�j&m���Q���*UT�D�M�HѸ�=����Pj�s`I��0.)=�}z&s�
���I�v�n�A�˅J����T��X�^�V�$/���9�{�d����3*m�����,�id�3&
!��E{C�3P���Tz�>f:�I�י�~q�S��T%��+xfq���!�� ��Sx$"��Q�j�,
�R����I���/���%Z�*Y���D�3`�҃(�H5�F��E_���t2J�F$W�
��.�~)I�$��8a�$h�QR
-ԧ�p��Hh�όH[����c�Lvי(����Oѻ��
-�0pmZEj��L�E_���� R��)�k4�#�a}�_�B�J
�[�X��J)�.Ns����ڕ�]�6��A�l�\��_>8���8|�WƩJU����8� um�o����`
-7�C�V�z�,eNY�q�(vTY��c�t4��7�'J�n�W��~�2���E�N㤇|�z�C^hF�e��ӞV����
�=\�?��<E��9
D��$e!��8�}
�)��m����ʕ�R��
-��C[��ڠ�I�JZ��q
p��-��;dI���8�����*a3UU�QUZ���y�-�a���n�Jʖ�{���WB����PY*4��
�n�wF�����
Q❢��F	)�*�qI�����h
�LzX��[��
^��^�y���4�ޕ�t]iW+N�/�!dYP��J��E �F!�[���4��i���PL��+%�J��C�Ra���+y��K�-�_
�V
?<��]S1ݹU)�2��������|S�qU��Τp�;�+\��$v�w�wo���ʦ�,Hg�u�x���`U��h�yLz؏�%�i3����N{���J#��	����(
-ا
��=�Cl"�WZ6��S��t���3#��ɕ��L=Wz�������m��H��tp��|��Y�|�*��!�/AUZ��ovޝ�}��z�?ߤ�^^P�6�,%NY����t���D	[���J��~{;Ѽ���,%�LY�RYzm�җ��1����ÕF�q��4�__+Ǖ��X� ��q2ч�@IH�jߜu;ON�Y[�
�ɨ)Ep�2t%�
ߕ7m����
G�|���
�GbX����^0�Jpi�
��ڕl�U���땥��p�k�n��
��%=�/�y_zC��0Jl��*���MU����t�$���,K�W�xS�L�{;��^�y���4�ڕ<R~hEɕ�
���K�qs���)��̈�e�b
r�
�O
-��0{�+����q�+u�v�'M�-�ui' �/��R�.�*%X�[��3n÷�y��}�_M
-We)픥<��+/��+y�X�x��Di�WUi
mָ����ۛ����%ޔ�1[�+�Ū�u}h�nlKW�����M���
�9� 4�xR4��
#&���x���3ϕjG�P��c���
W��m�'
��a���S��^ 
- }U��ݩJ'����}-�^\>L�,1*KIlpWhܵo0J��D�]œ�Zo�GY`�H1J��V�V��v�[���/K�S� HH��AQ�,MY2��C�9���+�L�Ǹ�M�U]ow%��Tg�	�T`�6j� �=
w���3ǕJ�Jk�
��;�@wIW��K'@o�T/�"�p�U%.N;�T%�osp��W�^��AY��,Ew� �����-�Spml�GB���E�8d��J��A�%�$b҃Jr&+4&�f՗�Wy
�42�{w%OPEJ�sy��A0O�:�s ���C�it����_��Е�J�X�l-(���J0V�R��xӈ_����2�#M6�f�
��9|#��ݑ��)^�`�*

�w<�K��۳'S�6�,� �"
�d�n8J�j��D	&��J��Jlê4�

-3,�T��T�RA�Q�9�!�9��
-�ÕF��\�]:+(�>��B[
-�=�3p�Ig�Ε�|���@\��i�EfE���a^T!�LWM܃�1���;k�K�r1wӰ�T�S at u��}�_nYZĂ�1�.��]�\�~�M숈��v�{�]���--y+JlR7J
U��䔥]� �I
�@p�\qr��i��UYz���4��
v������K,Lp�r�d�g�b�\9͇z
�J��?,��
���$��D^J�J�fm�
'�$Y/mJ��V���.S�p_�k
6s��Ӭ�RYzV�q�
*�D��d w_n��I 
�w��6Jp/J,�(��M�Ҵ��.���f	���4�T]��^�y���4~�+yKg� H��
1Rz��
W:[N���
-r�\	
	\	"�h��Rәlj�t�-M�+}x����
�{�&�[�nɷ!�\��
�]f�p=g܍��w��*���@�Ȁ2RG���ȼ���[�Ow�R��Dkq�{P�85Z��ժ�:�|dz���4�Օ���TG��
-�4;��A3�N�
N
�汮���`��D5��,r�:=����	���'u�֬��;0f�������2����mU�-K{]�ڸ�
�P����P���z[��F�Q�|��%�/��L�,=!&)=,!רּ�<B�d�Ы��;mg�n��ÕF�q���驗��;�
�2��
-���J�FЫ�ҳf
���uI�Y�V�B�4ݗ�|�7��eys�.J��8����^"���=4��{�W���l�.0����p�u�%����J݂�|	c��-W��LMYbX�B�$��?ӘpcPSͼ�>\id?Ε`>�t9.��H�T�qȥhv����Е@�욮4ɗ�}QϤ}W����wG$4�u�	 zi |�}U�D]����n�b%
"��\ȴ��w��E�wN!|x?>M�ؖ<� �4�0J�YE	�d(����H�AH
"(3��AД��;�ÕF�q���٠roOK'q~�H��#�8�#p�L�XW2���Jߕ2p�t�+y9��\ē�����Z���Z*�o,L�ox]�^�<�����y����`ܿ���s�wK+�� O/H$�E	ܐ�D	���N�I�BN�����:m+�;��dz�Rw��J}��,����2Q���T�R�Ǩy�+��:�q%���<w�]Ȓ�|k�R���[�5�
.*��Tl`д;f��l���ڏ�6v�
-�w
5�;
���
-*�*������~TM�%_����1���i
Q�;�N�i�j�6�ZuZ�
-�˚����tڇ+�L��\��+YTzz� ��I�*����+I
�zu\WJ��JΔNw$�
|{�ͩ�oD7� ��\�mY�p�3�[�q_g
wq�"Pp�.�>O���>��}|�
-nA7� �Ā��f%��eIwZ���&2�N����N�p��iܩ+����q%�JxW�T���JG�9ٕp
D����ݍ+��s�K<�|sZ)��-����k B&��;�0
Sj��܅q"T��K�7�����u!�-��-�P��V|�mVK\����ݯ��L{�i%{�#R�~ k괲�i�4����+��Jp�O�u�r%TT�Rl��.���]iݸ��<��Jvq�I߲�L�
-
�.�
���t[f��ۏ�Bm܅�pnjh�
�Ie�;8Y�<c��)�;Jm	�6��LX���
�4�(��NR�R�uZ�*TB�-:��kn���J#��!��f�m�(M�W'�`d��Y:~
Wҿ`�4�(z�Q�ݕ��\;i�J�Lm��
�/�����
��z�âfm�Ewq�"�
,LG��g�J�/�w����7���S���Q�p^�vZ�[��&�*۝v7�N�p��iܻ+9r�+U$W���|
r)4*��	8�z�	4��rz�T[W�
��a�}��L�ۛ]
��n����/�%�m �����_�W^MM�JU�@R"A�!Q�X��c+ݍ'���D#�b�M�
��{Ͻ*g�����o_�u-u�ƭ��Nǹ�cw����Y�UD��B��X��:WP�!�S���˱����%��s;-X%#�d��tZ��=*����Pi�5�M�=*�,X+*��9R�|�T<{��m���K%f�A4��=���d�5Tr^�/[i�&�P�Բt�t�+��q�ֵ���4���-�q���N�p<�D%��d�mM�-l�e~�
*J8�����\;�9
�&^�CQ��0̂�U���J@%���K��\��R�N	G���J�r���o�q�d�Qv��7,Y�oa�ʚ����݅�'�M��
-.ͭ�
-.�����}v��a�IY�m6l�u:m9�iae���
*͞J���q�2
R[2�� ���R)3TᬹO������Pi�S��7�
�^�Z�
C��=�
�s)��_P�v���.-�6�Cx{]�܆
��v���Pps�*�%�L�㋗��ϝ�s
�ʳ��@�-�����p��>K
�&^cvT�u�J&�����)�
��*�ΞJ��T�����A.qXxk��#_v�R���yǹ�g��bO1��!�l�T.�����w�v�u�F��p٠��zיZ(c�d:m�;m�V$^��B��f9:����J�1O*�
� C%L�B&�B�Se�WU�O��y�J��:T� us�Q��n�7��+HݢH1usL�+�p�͐��8��-~m�-B��?��Zc
�%�{?�߼��=��v��n]y(���J��Zp�=�:m�
-�b��
��
��^c�T2ˣK����	
�2�^ټ?�h�
��,UT�
��ySɔ�t�L�[���җ�9�^Km��+�pXc���kBx3���
�r�S�̎�tصM��턶�
-nE�*���i��f�-�i�n��#�Nk�B����(T:�|@��{���2��
ϭӼH%xM�!�mNT�7����J�
���K_~��
��}�[EL@��A���~����	vg�dzjdv0���kp<%ڄ*��Ш�MC��%,��h�J^WvڅJ��*�W*Y�
�(�FɎ���H���5P���2� *�A7>���WT�k��J�
���-��T�f���JA��w��hj�3�
{�~c�
�Z���Bx�Jϴ;jV�Gkv V�Z�͸( �J
����)�;�m��Ӓ��N[�N;䖃�v�����J��JSf����
-��
-> �T�j�t�i��%���7����J�ЄSJc���@%mw^�&
�O0� ��-�c��
��fWB�(3&Ê\��ɂ.��NY�ᛘ
�[�:m9�i{Tz�Y�4���Rg�Gi�D%'
fE�TR���?��(*E�̨t��)*I���
�CN�ޱ7SkL*|Q!|!<�=�.��ّ
%�.��	T2��L�$�-���z
����f�R�I�ۊ
-�#���f�b��Jv�R�iQ^�-��68�	*�ݣң�Pi�5>
��Y�j2K^�0�d�D���M�w�f�@�휩�s:u�vUie�x�4�M	�߼c�fCx��-��dؐ
�>/��P��u�J�����E��f'�+ʣ_p�=���Cf:m��;-�ZXH�i5�ކ�����J�1w*���4�J��T��o
*����4�ᏓU�P�4*9��U�[�[Y�ld�)uWT���
t��!|��
eXi�� ��)�}*�w��587^��Z�w���2�Vq��\��	uZpK�i�߀��P_~�]�d���*ݙJj���&Rɘ�B��Έ��L�v�
�5�Z�n�M���?�n�ǯNg)��(/@�	�^r��M�J�E~��MQ��l%L� �
-.PYA�^1kvaS�t����
��R_M#�ҧ҈].T�~�P�Tj�ij��Jd��B��g:u�� �^����Y��[���;�n~O)���7�$
-�^-2RI����т�WG
����A�
Ê\ʛKygL�]XC��k�d;�o at _i��wڞ]vڅJ��*]O��Y���Pi'�Y�*����Y��S�^�
����JoAR钿�UMT"��-������/��c.��
Y��(ް�$9�5&*�H��8��ɍR�O���V��q�.*��B�&Pp
RGpT�LvZ�WN��v	��C��yjYZ�4��Jo�Pw���i��J�؋���Z�f�J�8�J�������P�F�p�<J�6u�o�1��B8.��s�k�b����%���:|*���8Iuk*�I
��lk�u�J�:���\�i�Jы�d�`�`�`��8��
-l��� ��B���R�9>�*
:Ӝ
����T*�J�S�ۜ���K�U7u'�R����c���v>S�Ef�������Bl��H�����&E�7E�]�Ի�V7�[ .�c3��������G�����h�
�
-ƭ
�B��T:P��8
���_�t'*���4O�;�T�Q镦���Tb9R�{T�3p*
��݌�nPM���;���`p,͘)�V��[�������Nͱ:9��Am
̍�
@��Fu�,Z1�u�l�TT�P�V�8"��np?��5�N߇��`��Pi�5>�N#��r�;���R�
N����s�T:*��n�Rw���
}=�J��@V�6�7YSInr��~^����گQ�����a`*��@�j`Vuw�����*}e�pQ�ob.R �(k^Y�I*���B���/T���u��4XaL��+���;?�J8Β;TgT��퇟���[��}PTzu�t�=���i*���88���H�I@%p��M
	���>|j�����4�
-�EP8+r��M"G
�MM��sʰ����r�i���՝v�R��
��@�7I%�
鎨����J�zFT�nz�j?��
�1u��oݣ��6�!�%0�l�6�B:����_�C��J�EMVdz"gi
w[	TG5*y���H�����
��u;�i��.T��~�ҿ�҈[**UD��r8
.T�O�J#��6��{��o��ԃ�n�&F
�J��R
��
�J��ԍl.���=�KR)VT�zV�oj�F
�
�%�U�i��6�8]*]��c�B��ט3��3��fAM�u&�`cu�ir��G*�3�o^�&*�3u{G_�
\��|Ⱦ1�dT���@&�wu�
��_�қC����c���D�`uTz�l�c��X�c)uZɤ�u�v�����B��Q�%*Q���J
n�*9nit7=̅J���'x���}��<���F*��2�D�:c���"-���
lNNR��N����uT:��*E%��FTZi����>�853&+0p
�Rox68�r����VS��2�
+��J�����T*
���s�K�z��/*��T2uN���D��Sw����!
���cP)�E�n!sC%wr�

�N�J
qW9,'P�#�j�-;̍J��W�J��RۚN�P�?�����zKn�V� 앟�xـ��*K %�@��d{\��dtWH�
���T%��@�����T�B��Ϩ4q�����L_�e���[4� [...]
U�ލ�P�i<X�����T�J�k�JG�*u��(�R�tJT�ө�U��2ބ��Ԥ�Ԥ3*ea��:�NvNc�e�ÈPi�U#U�C��Ui�$�%��ׄJΓ�źu
��Z8*�R�I^�ը1*����A
UzNV%k��V$z��7-ﰕQ��i�JT�䌜/��

U�ލ�Q��R	��p��*���W�*�OT��Ɯ[w�*K%�n�Q�Ψt�<����
*����5p�IGK�R��J0r@%9$*͌
Tɭ��Q���T�*T�B�]%*Tj�g	�vg*E;�ܒk
UZ)�JB�J�Q��{*�&��^�$�lj�As��1=���!�J��P�q�5�=�tq����5ބJ���*9�G��z�J�M��P�݂Jr�K��
v ��߳H��R���7G��(']ԩ�9�+m�ܑ�<�^P����
U��J��A�.���,����*e�t�*�Ti
�Tj@�Z�����1��W6�R��J����ia���U:߳@�~�*-?!s*=[��i��\�T*�J��Q��ޯ��6T��TbZ�B���ƨt<��T	\��(�l�Jeܩ��<��Q	�
�09pF��Q�P�~�*�M����ߩ�*��;"U��7��zƨ�ӛR�G�D��[S�sj*'�qU��J�S�*M�a�{T�U��g�J�W��٠J�Wi��J��JW��S�D��J�9jjT"i���*�R%T���A��=
����һVo5ޫ���VI-U�X�Q��o�Rg�4��R�T�*�"NM��9�J�{���Q���Da�۲1*�kTi�>L%r�*��U�y�J��U*�J��IAN��V�Urk�{T�*�]K�J��R�*��4�R��T��45
SX�V�Dm����T�~�*}�J�C�i�`#is���4U�W%3�P�T��Pi�*M�Y�f�G�>H��T��R�F��
UB�nI�
U�C��N��ҠTj`�s�*O%�t����=U�B*婩�~��J4i��ަR����P%T [...]
�uj*�9��[]|�
�k-�~�Jn�~�*�S���TT��%��T��VU���V��Qi�*���R�U��Q)��TNg*�I
*e���j�{T��Tz]��U�\oW�*�?�M��<ʥ�Ү�´sU:ģ��ZP�gK%1�Jj���ɩĴJ�R�	����P%k�5�=�t}�Χ%�t^�
�)���1����[t�)�DG%1�@%}���*��R���Q��h�*�!�����f�G�P��U�u���g��?��s�ߤ�d$i��iG�
|+�]'�wOI%k�5*���ur:�2��
�	Fk-��P�P�~�*}�J�����i�
����tP�<(���7������
���ǮRh�m	֫�T��z*�#U��,P�ߣJWVi�*-�)���*
-�ԛ��o�Z��X��I��J���ߤ
;�Ӧ��r�*�ݑ�J��;ro�Jn�~�*]O��T�P�K5^�/�4�J%Vw\%8&[8&8&
y,�B�S�*��y�w�y��
ר��T
-��bM�͉w�D�~��J;k��Ҹg���
U�X����Z��{L�8&�Ԓ�R�%�
e9�
-s�xڝ�t�۾J
���T*,���U:y9�[Րtي����Q.rb��)Tif7nR�Uz_U��uL�J�h�R�U�7m��2����K����~�;�ʩi��v�J���$��i�-4onFxw�	�T����9AR�Vi�('��W��J�ՇT:X*5��[k�Jr��J-�
���˨P�oO�H�Sj�
�
�k�M�4vdz}g�Q�RR)��DN��xN��It����lN���������c"V�G���4�*���;j�J�$URM���4k�4���v,�i7��/O��Q��k�(���*�R��"'��eB*5�^�Tn�u��� ��Q��<���Pi華�r�R�v�Z�
UB�>��Uz6*
R��:Ms�ё8��
-Ӝv��15�,Z����&xsg�zCɺ#�{�eh&�;'�JB!�r[���n찹�~G��KP%�d_���䪁���UB��]a�^m���i8+b�Y�*�8�*�RI6w'߸Vs��
�p�ΌJ�=bL�ͩ��H^<ʜj�������ܜ ��T�#�L7���}�J[Tir���Ǘ���>�
K%u�k�F�b�����*�9=^��pv��I^�iw|�U%��O��*����Dr���Ԩ��.a��)��9�����6�.���9up09
MN��J���V�`3H���[��n�*�)̻[S)�4�gM�G]��_��0�T*ST�dO�5i�i���n�4��=�zhoP�*�v�.�9�ek9�"�:9���8<���' ܧ���
�9f*U_����Q��cUz5*�A�^�D
�*-
��;�tT�Y����r��9��cy$J�UJ*�ua��q�
Դ{�h�M�d^��*5��-�rW6���;��J���>�8��8�
켜~���2�q[W�h����+�-O
\�a0��FR�-��
d軋����:�m�.p��P�YkUy�S7��[)��O+}��Vڷ��)+�����ywCV:8]�z�X���4Niz	�l��%�$g��Q��/܅��_�v"�WA�6HϾd�]�_r���lh?ZI����$i�lcۣ���߽�p͍Z
�Ȑ���9��6�VV�a��Z��VR���

�x�҄0��	+�)+�Ꚛ���w����
���4Vzw���Z�\O?d\@��� ��y�%{A�ֆ۳���:���҆�Rw�ڣ�+=��Q�QNH
-���j���}��=h%"�H��w�{c��R�!+
(�jL���t<̻�J��OOd��������q̩�VYP���Si�:�z����m������ܗ�{�x��~
D]c%D��nl�񞡻���W�E�ެdN)�D�r*Gr�y����VJ�����
F��bLU��E��2[�ü�}+)�5V��&ŞpU�9���ZIӎ�ԇ)gi���$�=ڽ]�v�V�ѳR����Td%���p3��2�7�NN	rb���	��?�39��g���߷���d�LP)f+M	���d�-��ح���G���儊I��t��	Y�
�{g��p��
���2a��C�iw�JvÕ�MVµ1K��4�#0� �AV
-����%Z9ᒉ[�X�΢$a�AZ����ә;����~[���Tf��R}+�
�R����V��?b�n��d���
�CIPi?�n��ۙ��hd�v�
��
�~\�v6\m%��bSʋ<-�
y�
w�a�῕\�Dh1�a[J�4wr���
毕�q+U��R����DVz��4[���ױJ�����8���`�%��Jw�c.����ʡ��7�+�j�>���ËZ�7K��
��ǎ��p���R����
�^��_�L|��A�6bc�����̩�9
楧V�k����V⧴�']f������j\R7�������f+M���d�{㕮�P�
-��
��
�Ƈ�J�u��Yi�X�7����[7�/�
�v�~�E��p�����`�gc%�E'��@r����o�99=�!�X=ƴ�ʜ؆'Q���plNOO����9���w+�<Nc~q+�FꏕP��J�a�ݒ�:��E��Ү��A�rQ��8؍y��K��Z�ޭ�]��N�԰X`�p�G��8K�����0�Y��p���=
��i!q�rb!�2媿r�%���LN
p��J���D�1"s⎕�Oe%j������Jِ�������l%Rt(f+���&��e%Yj=v�A"�
��`�[j�R��Jͷ�Kڽ?�v�1�jh�`4���-����O+5�]de.0}���f��l�U��6���ΈN;'j/���C�̉
�����9�Sߨ�Re%�X)9��t�'[���V�g+��yw
V����������嶂�T�S�S�C�5���u�n/ �:��z�[�
m�i,�":7�J/Shw����e
R��"S�D��ɩ
7XQ�,��l������jx#q	/!�R�TI�׽��dN�L�۫$q�J�c%��l�J�8�OX�� �$��XIX+mOl��q+���r�V�]�Sj��Xp�ی��뱻u�����~Ǻ
�
���=����Y����oi%��V�Ihm�Q�7�pj���wo�� ��.72�G�W@�ŠV�MtXUo��#9�Jx�s�J;k�∕

��k%`���i��XIB�g���Jc?�n+
�{�Ե3��5�
���!+�ְ���g�k��b�v�E��h�wlڰ�UiRn����YBYi�6%|R���p� j�%�=����r����I�(9q��K� w�~Y�Yo��J刕�FS:x�ѿ�Z)�V�X�n��T㠕�A+}��4����R���Z��@\�o��F\���:��(5���X��7+B����;��
���a+=�ni�n
&<[
����|�CK�91�BH�l/�D�Ӯ��[7�_~[�v���q*��J��
V������V��
G���z�����yw�V�m���z�.�؝
�������q��K�%�.���v�/y�3�{��v��
�p�m��
7��ȂHn����{��,q8'��
3����n��~^����J9Y	���J+X)ٰsZ��
+�o0|�`�CV��$��ܱҢe%���J�ܼ�������O�/��i���<cI�� �z3x�v�9��=���4�Wj��n���p?{��67Ѵ�l�KҒIZf�Ҽ�h��*j���^Ω9�C_c���V*����J{�J���҃k%���J\�Vҿc�iXG����J�a�݄����ߜZ+a��d��L���
۱�?��Ns-C;ni��4���Glh����桕�#��pi GW6n��6�˺�Ss.B�%i��V����n
-�Զ�
�ɩW�s��V�*+�����s[	S���Bi%<�����V����4[Ɍݻ��{���B�ݕ��\�8�2��v
�cE�ެdj݅�K�]��������Y��UpW�!7ܕ`���s���
[&L���0N�sr^r72��&�����JO
+��R�u�T���V���Z�5�
���J:�ӰN�6�Vb�J��l�џ܈��;Vjj���
��� *�-�\�4�ҡ}n�.������d*�=IڽzF�aص7\tH);���+���nI�fxýhj�5�JKͅ���M�9>��.EKOs��󠕈Ƒ�R`���m%�
��?�CyN+�(�X���t�{��J�?v

b�28����k
�N.�T�����+�]��s�
�U״�:נޢ���6��6�h��"/3Zh�Gjܼti9
�';ӬTPJNN±Ҫg�q����w��)f��I+m
+����&b�hYi=[�x��'�m�7�o����A��7,
-�jsm��I<�q?[��h�hi�"����R�v}+�,Q�
7?��C�Sso�]iCZies!)������~_�t��lC�J���J,�ͥ��p+i�'D1
��J���4h�蠕>�V�ɕ[�
[�ѱ{+ץ<�qN>Um c7����ZǽR�vKI;��R
s�^��
�J��Μ���7��J6\��Jk`��(�C<ǥ���
9}�
ܜ�|�J;�Z���AZ�!q���ZI/�
V����8��.ʆb�R�X	e at -��
�f+
��V��
�;�8'�n�X�i) �3��v��
-p���ȥ�f�C� !D����^�N��M���ݑ
��؆�!��Jm�
O6\�;ݕ�z+��A� �
7Oc�4��eN���ƺ�g�Jo��hz(�N
��!@�_����}+�1-a%Qm���Xݶ��úc�m��J��l~r�V���;�+2�8Y�Z�ע�=8?��^HF���u�md	�o~��O��� �����Ëd�N�{
��r�7�2
^q�b#RT��WU�xg��8�@w^�i��&ڙ��vv����
w�
4�Gj�&Kܯ!Kؿ�Ω�ѣb�oY[q�aS,�U�nG�U��[ە~8�"W2(��
-���+
�L����z
E�fWJɕ�J{Y
�tj�Ҵ�vٕ��+�%W�ɕ
<�~ό��+u���]ɍs
8�K�si2���
��6&��ۏ����������>�D;J��|�q�Gk�Z�
-hW]W7�]&��I$

w���o`WZÚ
�6+I[��`�_�ө`���6K�ҟ1�TW�1��/i믹ҙ]�E�PO:
"�b���jЄ���0•ʕ�8ss��ˬo�|�����p4�#��@\"	p�L�b}�s.�u�5�$�lg�
��D���� ۇx}�������$~T9h��
7#��P�XMõ�@U�s��f^J���J[�e������]�;m�ĮT0��( NI[��xK熴.й?
�o6�ThW�
-VM�BZ�r`�'�7�W\i縒����-�ƕ�c��
���}F���L�B>.k�sٯc6F��[M;��Q"
�(�?1�Y�?��^�
��6�J�$��/�@<FJ�_1�����ߦIsnTZ�V
j�p����J[}�+�~[kґ���d�C�IUi�+=F�����]�����q%�d�Õ@u�OZ��C�JW
-b�+�ٕ>�)\IaF�_�J_o��w��t%+v�tb�w���	1j���m�-oK����S�{`�I�
�T�nϜX%��ᾴ�4
�y��L������ᡪ�P���1�;I
�V�M
X[\�f�ӟ�5��֞lW�U�	�L�i
�D�6�%�@�I���0���w���J[��5Z�_S��-WzWLk���
�TR["WJ��͕..Ӻ峻R8�;�9}\
�!�Հ�_�X��Ѵ���hm���(��2�cR!iG��M����Rg���l�*�G�;/����nG�XxM���4TiUi3?�['���k�j�f�Z�4ݙ:]��+��5Qxx�E�%��(Nw��ծT�X�lpC��2�abbC��y�r%�i����J�z�+mn�4|�'t�V�n��y7 �����ni[�_E`E�M�(��h�(F�^Y^���d8�f��n%���K����d	j��=����Ҝ_f��"�@�E�z��k�5�)�D��_U2�\���J�e��]�>܄�� �T�+aإTT�'�r�тr��m�8���J�.1�ҷ�+��\��M�s�]�ep�\Ǫ�eh'ia��v��A�ԦݞV��d��W?�Z
7㆛��
�S��$��f���[����J���"�ߡ-/U�6W��$�UҚiO<�J���JzKK+�U\	,��j���JְUR�-�%4�=c�}�+�R����J��Jt\��I�\����Ւ����q%
��ڀ��t^YY�_��J�� ��
�vY���$�iw<�NGC��պ��q-�#rn�yA*)�p�=<h��H#���.�%�v��TW���R ��ʺ�֨����{�IW�ܰ��q&IZ$.��ZR�e֎.
��2���SI�L	 ���1�%����q��I���%W:
�2�}�<�2�Af
W
-�cts��;��JsĹ
�T�;���>k�NL��ulJ_�*U�{дñ	��%o,/�����C������DB1<�+��,ai����e���vUh�]ʤ�����*�
࡬W�'&xw�s�R����`m��U�+�~Ų�a�׏s����=*W�Y#�E&  ����*����M�
�J�L&��Ԯ�6\I��͕�[�w��t�V�oǕ���*�щa�e8*Kb]e�~�6�"�]�hƪ(�=K�:��]�ή������*9U
!�e"�,�B_��"޷ud	�gݛJ�Q�AU�Jd>��,jVڞ ?��N�Qv
�[i+W�X�D::ą �AX�J*��c�����VdЄG�N�
A��]�t�ѕ
ejW:U�$Ӭӕ@��+
޲�+� �Ƴz ��	����T�">2� \{O��kU� �/,-NI��0s�q����v66�)���7�c�pY&e��D�H�	��*�RkO&<��*q|O�Si��J;qO�
iœ�%>�2�ꉗT�,Έŏ�/�J�G��
�P'W�&0k
�HGK�M�E˕�lW*�i|Z���J�w����QNϼہ� NM��उt�#�%��%�%�L��R���1
�8��4���kʃ������O�y�p������9�� �]�mY(��ί����J$+� ��8U�6oTZ��=�v��&�ӕ*mY�ᤛ�e��".��.[�
��X��~h=��2�Q�a�6�æ��	�4�k���&=�+9T���#���͕zo߲�+�&�ּ[��
p�KqȀ�CO�p������;��nG�CQ�C�)_�i�bI�>�]i�-�n�'K |
�'9�
:!�(K;
-qU��.[��om����ȶ��� J�!���Ҟf�;y���[��<��%--j�jI�X�=���Sr�W���Ѕ9o�=n�0�#@ |�R�(B�P?� �z�"�Q��zRQ��J��?��J�-˹��M��[�+ �����e��)K�+t��
�)���X�����
�9h7a[c7ri�	�d�u�
-�,�2��S�6
�%wM=U)���P�J�w*m
�S�Ա���k��.���ʕ��o�
-�bHɁ�
�H�sSV�s��Hk�J�
-0��ږ�C�p%�' 5�� �G���#�J�z
VC��+��\����\i$�o�2�G���3�.*0�S���%�
�Ȯ�$��\�šv*�ӕ�]S׳�
���p�h��ߒP2�Љ�$���,IS��X���{�TE�IPj!+UiTi�g���MtyR�1
<�y�[��_̞��+qSB3��BS3a*��Vn�0��=��&Y����*0�T�E��a���q�g���R^��Ю���|����-
���M�]S:-�=7eͲ�,�x�n.I_w5�
-M�h�UUJ��]N�;
N�ڍ7���Գ�V
�,q�P��j�pY���FYZ4K8?HI�	�*��
]�Pi��dJ�*�(T�W�%u���%Y��|��BW�� f�u�T�*�ӕ���5�2@�KC�jx���
s�>)��ǵەTk{9A�Ҹ���:]��f�qn�4�w���tYJ�,!��Qc_*w����jUͪ����yE�R����.M�oW�׈����B�%��:M�N�)o�7��Wq>/��暪� ZU)��$U�U��U�={��[��6�4_��ʕXX�=@W2��"W:+U
,���>Y�eA��B�Ki�2�K(F
;
�s�:]�	�����	
-�DG��R�5����R�-K�R����'�
�j���AE��FY�R�,-lK���
�}GU
-UU��T*���m�?�ն���p���
~:Q�8�9�'4NY�%l�Y�]eJ��`W%�*���L߯��m5��Ր�ȕ�q��
fڕhGt�
�g3x/��ܦ�����r�^d`�6”,h��g��v7� �����)|�+_�
��3)Y�za$qb��=CrN<ɖ�
	�`�9P�t�W1����Ŕ�B
�S�
�� ̥�Q�R�sqL�*��T�����#��TrE�H0-��epo���eh��,a�w�O��MSI=[A���{&���ZU���$���v�_r;�`�o̽�>��j�b��4B2�,Iߒ%��c�Cx at U*ͪ�t:��|�Қꌯ���	���a�]�Y{>�b�^�
��pc��f�U�J%��i! �-,��R����/��V��~[��R�@m)�s@:�T�:㓸��Tyd�T�����fp��

����*K�(K�r����<�>�

WR�T�|�J�R�v�\�N#Ui%�����ܛ�S,�hQ�M�w�5Ee�%$3��i��h�N:<�
\����U�>�R1<�/�so3
V�~n��]"�t*�X�T��Z:$YI7kh���$5
�L�rZDe�<�@�Z�e�fZ���]+��өK%k'V���JrtW[1�R	�*:cpO�	5�Gn�J
Ln��֌|�� �]������R�!w[
-ɏ��
#8m_ľ�*�B����
J�E�c�E7Y�,��KW���,�AR�,1K��:�L�h�`0X(8
�}�x�dU��ҪC_�ՒX�S���N"�Z�,9(	�h����
�'���
L��"��H+����륒4���PtSa/iN�D�D����J��l�J��t��W��~���Բ�ʲ���ܝ2w��l
K�*������Rp�LT�R�J��vs>�ʥ�w�9Y�U-KǑ�����,�����
-������<��R��p��Kua�U>�XN�4��/�Oq��k�J��A��*c�=��$4R���	iF~������b�������ґ�l�|{xڭaa�<}��nS?��M%{)��B�������CwI賓?r�T�9}mt�[uΙ��%��,�\��n��&��C{�!�pq��`u^
��]��Ϊ�nwQUZ�I�\�~��hK�h��Eõ�R�����X�D�m,i�Di���1<d
���*5&<t�4��r�t��<R>�TZњ?eH%��	�';�Z帣EXE~
�
�l���ei�{��w4�g���$���b`+�*Y��b'� &L�S���
�R)��Ҥ��#7N�u>�m̲�^<S��,ah�*w���6��#e(a�����@�H�dq
-�����4�Lr)g ��KS��.K�vY��g�~F0�n"��C�F
�~��<$
`1r��*��Ui�隹#I�A�5�4�J(K/�4jX ��ǤO�T�?}C*
���t�)")Nsv0ug魎j�H�S�SxK���<�z�J��/�����mS�J�餭̂��Їn�R�j�,i������p��mbI=P\�
���S?���K ���U�^/t;-^\��p�e������p�/jY�~[�%�I��0�,1��7���D�t����<s����0T���R];]!W&)����:���D�J�=R����@�(/ُ�%�<Ǧ��Ҹ.#Ǐ~M��9�s�"	�*N�U���ݸ[�ҕa/����K3u��a��=��T��.���P<�:3��7,
�`p
K���t$���S����A��f���۳U,��=�F���c?,	9��骴��h���[��Ri��v�җ%Ly�>D#��E+o*���J6<�.x��������إ���%�Q��Fz*ɽju;k�,��zq�~
B
	
�!��2�CG�&
}G��
@D�Z�\�<o\��L%�-�t+��UR����g3L=�wt�Si�mS�_
+��d2<nf���y7
�*KU���9���OB_p��'�n�XR�C�GpȄ?Y^Fȥ4��dV�7m���;_9?���s�������/��,!��z)�KF�E>�x*D���i�\]�G��2��{���j
�Z�
��uz7>�n�"����L��j*1�`C�e��A��!f`m֦���:�*y5��

�!
����8����!�^;s��ȥC��J��!p4�2�
�4��-SI���Lr@��K���Q�������Џsܝ� ���`�6�%����A��K

�</�(��2K	�V��h7TS2�]j
�4~��̲t���^����D��g��:��7�%K'��
�$�ᑥ

�MSErG��K#��X#�%�����;�%�
-U��yQ��@U�s��QY܇�N��JO��c���Ӽ$��s.IGo_5V[i�K��_͹DC(9���/�v��T�xd�T�X����K��.�uCY깛և�D}	��4}���O�.-�P��+�G/�s(y�@p�
ܮ�py��*��e�h�U`�TZQ�j�\�N�qH��%ܢ]S3['���S�-J�K��1�ߨ
��=A#���>�\�T�M@ݏ��zm��P���Ҙ�l�92�eei�;bꏼ��_AD�H����y�b-�q�*��)Hs�C o�[*��R)�A��Z*��Si���J��h�{�er3�4U�ZY�T�aoX!L�ȮH	�%�!�>y�
'
��e5�-tjjHu<�Lx������T��J.�E��a(�
`<C0Y�w�q,Y�]O3['%�v���0fx�AB$����M��IE'E##��`۫����	��g
ā<U�Dz�О��>�4k���w�}�:?0���PN��sb Z�㷦�����~�\�[�X�˘AR�5�)�T��S�?�J�Pz�?_�%e{�����.O�Bq��R�R�M,iG<����#xǵ�F�#��l�*-��v(ّd�Z=���JSe�X�9�0�7�D�WE��$�
�=��]M�GJ���V?��&�'E	��r�<R���9xX1>e���4�ٖl�$�R�O%�^*�v*��м* ГE�˒�
������X��YL
�$ f���ڛ:��v����糘��<�@�
ڥ�(G@�s_vu��=��G�H�G��ۣ�\��6
��I�%�}����Qg�KI�X�G�KW�%��lvj(=�!�&
�'�������U�S��R�G��nYX"Ks�X�D'�3���6K8u
-�FK�S.eP�>���7T%c�D
-�5|\��k�:��:�Z+���ܒ��8�
�����($��&����������#����H�Q�d_A���_
-¿��ĆΩ�v���)�!��=�8�E�
-�%غH%Y�\����#�K��c���t*խ���$�g{ڕIF��e ���?�B��ϛĒ�;
:��D{�Q(ya쉞X��nr�KǃX>��������
�䨴6;h���O�W�]e��˒Ȥ��i�
��,��V>]��u
-FmQ�L�p�����l|:����$=��ei�'M�LG~�D��R5’�	C�$5ق��,KO�e�u���%
�dU
-@���%��u�'
��b/��X� �3��b{zOG*�*J%x�=�f6k�T23�o�c��b���Q�T�>��MlW�U!�|���
�dZ�����2�'g(p0�o`yvU���YJ)���کXZp�%�DYz�e	ˊ��hq�h�����7Kߠ�!��)�?�e��6�E�?���+�� 
���P��"5ږ�����}jbU�JIw�B
�bX�g��F�)-�k������i�*9s��Q0��s����f0����
-�͚v��h:PY��0�e���,�B�X��:p��*E�J	� ����W��H0�_{�'�Z�:+Y�{*q0#P�����K��
w*Y����+v�IN��4K��Ӳd�nֵ%^�<-�d�UQ�(,��K���}t�N@��.I��
-��k1�OL�@}���.��K%whCYR��ٴ|n�z4�����q,afO�-}���A
�dmI�X���]�I���<U
- at II_z��k5aBV$�����5y��B�a6B,Y�c�wk��?JE%U�i
g�q���̫����Z���w�J#�8��hW��.� 3�b����N�?�J�
����I�ν���MXBƕ9+0�
oQNe��w�%_�}���LRa�$��ו%˒C	��+�H;��
�� ^۹i�RHi�N;�Jd�w����͖w�5�Vchi#�DF��mIci�K3f��3'�h�т|�������H*�P��^>,���G>dk�L��a4(
X'�
�R<�%/�|���Te��JK�J
�@J�
�Ə�6���^
�u�#�4�EQ������: ��m	Y�T֙~�S���_M�P�s���4K����<���v5Z7g��2�,,��\r@C�ɘPz]R�*@)��
��cD
3�pgV�>�Ƈ�J
-D!�5�t,���9��Ǟ�����C�z,af�K|��s�P�M�2Z����Z��p=���^��~�f��1&C���ˋ�	w�dg�rY���

��,�M
Y��WW��X3	-C臏"��*E�*�hlh�
�t&��N�5�����#
�N��
�2��PkV�,ZT��N���b*]*vV��So2�.Ȓ�ݴB����
��o�D
�֤q.���
-,=I,	]r3n�ܯ2����D]�\%%T�/l��
-�WogT��yi�i#�v$��C;C�.��\�d�`4���U
ah,6��*�|.�e��ҫ6ڔ-��*a��
�a:�<P2�d�Im�,٦��#wj�k
iB���Ր�[Uf$Kϑ�xa,yo=����P%~�5:[�d� T)�4o�<�Z��w{1�<���E:? ��8�z�2��I^��+R[�R�W.P��<*������'�n{yB��7�]���V�Rז�
�
�TK���>�\����<��*
��k#8������2#(1��f-����ʹ;:�4M7�+�*yeIbI
��(�oh+�
KC�}p�9gR�� LI�7Z���k�
:��uy��HT�cB���{��4,���Z�pY��
RͶ�ӦreiA�D���٢p�
~"��'
���JyR�(�R��?�=���G�1]͵E} "S�1��w5��W�AO���pS���N%�Wn�R;�J
-J>U��hv�
�\rhl�� K�����5H�
-6R�J8&�T.�&5}�Ɍu�7���:�rv
J���x��W����J(ݨ�����lxӠ,ɽ�,CKVA,�Êk��ڲ�%�0甒����2i��5��î7�c?���2�y�N�r��ӭ*#dQ�D���H۠3]�D#YX�\��-�`&,-<X:���{%R��R��T��*Q�W��\ڪ�z3O|d��T2��7#�"��^U�TQ�*3�w*�YT���:
I=�<X�-�g�R߻i��܈���%�Td"�8��%3�D��ܭd���u���dB�UA	��Uueծ�x4 �p�?'��P��^�d���.�?�]�:���Ck0�̇���{���|����P
�Wa��6ږ����}����]�Ҝ�p6�t/�N�%Kci�,��9��|�*+׉a6�%Ka�9����ȕ˄R�:�~�T)+�؏��H�c�Ⱦfյ@|]9��,J*a�]ˑ
(�f�w*��T���t
�-�D�N6�X�����wo�
�]�nC{��k�߉��X*^���m��%~�����a-
�tQ��bmJ
�TT9� ��`�
-��
-�������
U��5'�>x�d�o���?04�Kl��C�L,�bf���U�q���11��2�hy at J(���G��< E�P�I��
-bi*��TV���L��vm�KY��<���+b��ycbi�K7���T~��3�<ΠJ���T�*5�P��Z�7�������G���1`��̪���SF�H�^�)u���/�{x��戮�J&��Vg`ɓx7��y'O�XZo;|�*!�Z�Q��$*�	�V��
.)]�\�
r�z4�nAA�E�C�ՂR
-(�,����J������o	B�b����
G���
���]�5���U��%�)ng��Ҕz�.U

Q�j�˔&(Um%�v-��`�|U�-�ئ�w�����<*�0TVl������)K���U���4n
���>� �p�1��*��*���n��u8��4.���&:=�TEz�TB��	KWm-<z��Tґ~�S�7R�=g�L&y{ݸ^sS�>P��Ⴤ�0����
-X��[���6�f���a��W
��f(�<��ꢔP".]��Ui%I'-�,Y��@%sh���w�{�Fj
�*�̫27�Tf6gd�
QP� �T@)�Y�7�Ѯ����~Fk��͔��P�~
J�K�d��v�,�:H[вTIYJ��,�\P���f���U
��	�E����ft�P��j����3��T*�
&��@L&5�ï[DhA��לJ����J
-��[�ov����bi�+d�nG�N}��Kx�:|t�I,5u�g�%4�>�x��].MӃFR�$ٿ)��8�dbρ֎s	���+�ܼ9i�\�hO6�<3G���$��Zˇ�ȯ0��Θ�%����hd��ãˤ��-|NJE�jH\g]���<Ur��I�&/�?��Z�)T
-��ɕ��+K�
i�O�|%�}�:
K7sI���������'YTe��N��:[�U���f��@�&R�~z'���
k�YRG,&M��H8�D�H�y����p�(
�K��'�&ʒ�p�=�v���Z�pT�%�"’h��"�T��\��4�L�L&���Cg�R�� J�Q�Eڝf��{p6�
��U�,�x
�{�:�X�L,Aq	K�T�ғod�������b!�C�˃%����_���QB�͸�>��|�4�~�Na:�ja��
$KL�R�cLj�U�]��W�H,�c[`��]M at i��R�^�e��v�e֤8t�Jk���*
'>J
*�����[���
Tz�~�ү��� ���Ȅ����`�Gބ����4#�����ƛ7*
�I��8�K&�nϹI$
t.�62�bl�*I�U��Kk��xK�w|��*8߼�U�T� ��_5ڰ,�x(���z,
4��-�(��*�V⏑�&���.A#;Fv}b֨|�!5��ʅ�4�V��2��S%cRߏ>(X��5�J [...]
-
�UX���/�e��8��������z�
�� �ɝLR�([�]����%w��6��A	U��&�
�8�`
-{��P�f�Pۊ놹T�e�QU�`�j9�n
>�1�//ώ��D�%^}մe�:z�
�N�?�J�D�%"�c"�
��ci��
�\�f
0ۑ
-��\,A�K������K�\02��
q����)"Y$��ᶩ�T�` (I�R��R	�(齛���V��V�2Is��p�fE{�M6�%p�&�X�*.ץ�d���~w"<X����ƒ�:���J%�h�lx�2ݨ*�RJ�F!�v����R�z�{���y�,��,5X�
-46�Ky&<,5�*�����}�nO����$2X�Y����m�*�\�z�
8[���_F%S�M���h#`$pw r�J�7;��q����T�&*�o�U%�u�`g=�e�u8^"Ra�=�c,� M��S�ɻ�]��\�.lֱc�d���N�o�:�Y$�,.�\�`v�������o�E���������ri29\H��<�v�h=�\,Q[J⦆��đ�Y�.�P�s��Ã��Q����KJ�AX��wÃo�W%JaYbL�����p�Φҿ^��/K-��&K0�AZH<�Xꝺ���	3����h�����,R=�. ��]�޺*}e���z�"�:�8(ฆ��m-��r!��	
�N�o���l�����x��x�`�#ϛM�_���҇�v:�i���V;���#-sJްR�2����pI|Z��d����=:H�N���R�^�<�JM�X�=Z
-���z�٬��E��P��N`�HY��}�E3y|?+2����zq�u4c.�Y�Jv�h�B&AQrƒ�ux0P��5�+�C���
-WiJ
���Sĩ�xU�-K`k�,!�
- tg���8���K���pB%�ғ���`����7UK
3��J��rg��Pɻ�5t�sO���{�"�@�:�"Z
-M%���wA���;���Jz SU�7hk��%?��鰮ź��u�
eYK-a)�JNީ�u��R &���|����9X4fR�V�EI��Q ��F����I�R�Pj���v|&xT �}Nc�D�Qi^�0KltY�XU\�,��JvD�	��z��CD�!��(��n%�hw��ƒU �YT
-�b�6t<,�,]��ei�R�U�$C�ô�U�a�����	����( <��$,��PR��
�*I�[�*���-��S�<�
����;����*����
��_4h�w*�YT��Jh6�B[�,�%�ӟ#'w�%@��K
b)�W%�,
Z
|���	�%cr�����:r
S��uM�=	�L��ՐӺ)3�6�R=�C�sVo
-J?
(�:�As�b�$r�����sT4�>#ں�pj�T���͞y�`.-ƒ�%�)��
-P���t�CY�N�:
����d��A��tત���9KT��׹Z���W�*K+Цi;%��PB�����ċn��K�

->?uO��ctC(�0�,
R�uYa .�^U�V~mU����\��4n��lK`�6�N:S�ǝJ0�TUA���b�Ov�G�#��l��p��T%�'��G�KL���f �|�~Xؖ��N3	�7%�R��)B���Bi�@�Z��r:i?��)�{���dp��?�Xт<�ቶ��R	/���!Μ�+�dN�e'
K6y�T
�Bk�Ri�	�RM�uڬUf�i�g�vW���Db
.��
�֎���ई�y\�`�P�+l��$y%\,�K�%?��J�����
J
�x���e��_٪4LW��o�����Б�xg�RWNr�p��	C�S�Ϥ�/�һ�Ҩ)�j,�,�Y����6�R�a��%&o�8�K���%29�r���`���
!
�S5	�K[]���
�<� �K���8B��P"�ۍ#�-�Y���T�UeiN�3�t�h.�
-’̫��l�%J�ԗ̨�E�

�R�P��P闅Ҩ�j�~޸*9P�c��X�y���P),K��,��I�K��RU�0~��LȺt��&��c�E����|F(-JyY�e�P��'u-V%���F>[�Nm���3i�|
�#�3��
-h\��'2��$Z&/�BD]c�Ć~��wS�W�P	�1�w��TY:�G�Ӟ�`�H�9,AU���-@�uI&1y��&g\�ɤ�N�H��P�S�
�
�Y�5�2�󷨳�L�FVyQ�E�͎�ԻP:�O�� �*���tS�Z�Ri.|_N�1��h[���%�h��J��F� I�
ד�J���
��J���6�(<d
�T:<�gC險��靫���.�6Q
�F)�,u��%�� MӪ���.�
-J
-�r�c1
Q�P��/��.��;lIWi.���܇W�*��\����}�k�:~�B?�(d��:��X�h)�J=R	�5�;���J��<�*i(i��),M-�5Xڏ
��7`	DQɛ,.4���=Nq�.�
�	��v}���9D���p�
&q�Ƣ��p���Ћ5��vJD���@Iqi�
v@�w�J����i��������\���j̀O`��g��
I�)6>#�"��fK#�"��$SP�
�l�3Za���I���<\���`�
�"*͸�-K
�@���}��Q��
��"�턈��0!�#��t������$�P�Ѵ�V��%������Y3�����\Q	ޭk�^*?o�"��")�L�O�_4���h��G�s���Qɛ�����n�
8

�#�x�F{���ei���a��
��Rm)KM���
�8}�ˑ͹h���w�A���]��}����Nt̤4����p���VNZ�
���v�F�ѡD��J,��$��c	�õ�˩����h��%h��9�p+.q	��.L�W��,<�&K�d
-2)�"J��2��`uZ�:�l�Q	�z�Djq�SLRGai��s^�"����DO1	z,nR����Q�����d��H���C�C��Y9P�$�������������U�^;�s�`��+óX�%�W�y~��
�T:��O*��p��P2TZۃ\b��ݴ,�-:���,����`�*��y
r�,�$���D6�>����n�,
��H�iAF���2	�*J�q���Ai;
� �_V�(i
�uSR�a�T�����%'�3D�Xª\���1ͪ����㆒-���J�>�#j��X��
->�i�4

�G����U�vZ�_�*�|�U���D��u�(K'����t��lz���k9�!�DN
6�#]`
�Ƅ�(��SaO���ܔ
-�e	�߬�K뵩Jj=��t1���P�;1���IDw�
 �<�x_�ωJ?�T�3��˥��JkKà�4W�.��O��v�p���
-�I�dq�PT�2�8�R���rkN
Y����j��i�6
'��Ew�� �
���3'�����5����+��@��:U�ez�S�
6�4��h�N\N�#I�4W&a�2%,YRɦ!�C�����5P��*
�J{���H�dTzҲ���mTz�h�1��RQ���:��R�<��#ɠ2�b�ؠZ�*і�5�
¤���Bx�+�A�ҝ���*Q-���t�\�RO,	���I̻�/�%z[O"`�
���Xʉ��XJ��K
L#Vc�.
-D��G
=_ZS�j)K\������֥��f*��X���[Ⴋ�+�nZ-a�n9{\~-
][��1?���Ǥ�sD�ͰC�>��6*K����qȉ���s��>’[+��Jc��%>�qʥ4�����r�L�"����}$�9���$0�&%5���ćx
�� H��b}�UI
�vCI�dTڿN���R�U,��4���*�Y���\P�
-%���m�J���
�|�40�҄��P�V���7@�}U��٪$����;�Ґ$��b	
u�1�j*�Z��܀A)��8�j�X�ǔ�<��D,��_���&b�"
�,�IOMj<��T(ѱ�.�肌�=�ҷ᚟b*���pΦN�W<k��"P��C��T��T� �.mFP$,=?�lw{Y��
�cIV	{c��a��.UIs)�
��l���2����ƿ
-��@�>�l
It:�$X
�x\݈׵m#Pj�������
PW�g�$�R�Mlq�t`i�e�J���J�Kb~������\��R��T\r�
׸�J��+����ˉJe�RA)-��2I�ʤ��
���EP�T��B�yg�v
�V
��j5���"��/K?Ζ��%H���`)+��Y ���(Jvc-(�(�i( ���&��T6%���w�S�r��V�p��tB���b�r�-n>W�©��嬙����u�o�s����O*�kT���Q�ۘJ�x��V�%N�?
�t���K�
\�8yM-��C��Y�\�br���Z�t���(���
H�9����0)�JϤ��;W�CDY�]6�)�n�J���U%����%V%�ҳP�۝���X��*�P�2&��FY���Mf*U�8ځIuT����OBiT�d�0���v��P����uT:S�^�t/��X�(�Ҷ&�%eZ���_�d�_�@��$��l.=��B�JRR����|
������|0��M7
@�
��q�Ί,i���v.T��I��T��T��
�FXz���{bi�R�%�8�K9
�q�%59�r��vi>gl*��ⱗ+�����>jR�
��X]
-�k$���5N�Ļlv�J�s��F'��U�퀤�uZ�A��
���T�K��9��n��u�z
F��d�V&(�i"h6y�R��0*�ƤL�������T����*(���bT���v����I�q
�wJV�Ab'G����\�x���5Vf(K[-����G,�%T%6&��¥�Bհd��D
�A�oߘ�x�Y�H@(U��(!а$h���
����*
T�
�
n�3_��
-����V�&�g��xX���>�����x�
�E(
ю+E&�J�P�K?�Kw'�-8�!jK�%�OެKU�H]�Ge\��a� &'.�6G��ѩ��T������Ql[&F��-N�T���(a�h�X8��_�QU:z*�p�>���n�iD%��ݨ�h��
�5ӊ�Q�	 ž��k`�d�41h��,Z���J����$�DB��H�8<�u:��-Ui�;�t<
J{��v�ٴN?jңb#*�ym�;�ѡ:��da�Q,�x�`)Fκd\��`��4�u� C(HQ���fWe
(+mJN��Ϧ�o�\���/��è��捺yS�yZdռY����R��f�_��?����S)T���<�:�R���������Y�3,1�y��M��8rI·&�rJ&A�:��L��J�o�09�\ �
�7
O�#aR]�**J>�c�����f�>(���cT�%r�o�Yo���qY�Թ
�ކ�
�@Ņn�Kc��LTl,٠�f�Ix�BK��IH�&����pW�Ί�ªt*a$?t0�v4�O�PB��b�x��4T�i�e+�D4��-5�`%��.���(&-�iQ�H��K0�L����r�R
��@i�t7��N�|U̜� ��s-.�Z���\��
TJU�Ǣ{����
��'�>"�B�'��֨���c�*�Iw�c)��E,�e�b�s
�7�����H�*s9T&�9���VG�KG����՜<�����J"	5I�Θ�!�Սy]��5f�����'M��(�`�O��Z)��CY�/�^�0�R�=�L�t��K����d`�a�Q2�l4yn�!eeJU�$)K"���K���`�*���tPZs�v��m׌��E۱Q]�һ�R����')K}���%I�:I�R"\�&�n�E
i�L$�s
- E�n�z%ܥ�#8z��`�#Ϻ�
T�����`]��޴�DuV���ݼ57��������P�w�l��&q�d��dR?�ҵ{t��/b������[<��sG.���L
-��d"��M�:1�����qR�8ڜG�,I��N�䘿}Q� ��_4;��U�Ǹ*�W�JP�f��(�$T:\�����",�
K�8!�2�X�ȥB�T�T�&T1�lv*��D*(��Ϥ�h�P���pY��Ci!^�U�(ithlV%�KtjY��(��ϸ\������M��ֹR�RƠPʥy诮k�'� O�,�2	魒���V�:��Z����?YU:s�WV����4�����޼�ӦZ�ʳ��q�
��P�K����O*} *
&T�@r��J�J
K��a��b��)N�bq>z�ښ
%ٛ\�ɕ�� ��s�&��3��g
���j����H�B�Ě$NG��o�Y��n�iv������
-�IU�P�	��#0�ՒI�bS�T�{,�h���A��h��n��\($k|��(f�
JA�D��FR%e������)+T�v
�߆�w5�S���"��~+b	�\4|Ne�_X&R�嶲��iY2,m-���I*��&	
�p�d�)��)��5��|~Ȥ�E�\��kM
Ai�>Z��T��GUI�\̜��Zv�Z�<Oq�3�.����R����_��?��OR���\�R/��K�0أ�_���/K�*�����kX:�*Y��z���D�k�K��%�
ӷ���l�%����9
���>��|W���
C�F�$%m`Rۖ����:���>Z
�cS�T%����L�R�m��J�_B�A�����h����
$
\�*J�,aa���T1�Y,�jU�&�5R�jaM�
�r�hυ�(ݭ*	�d�0XD��I��e".�����g�̚7� ����<�ӄ^&�)�h4N�����VVU8�)�+G�t�#Hd~�7Qi:��X�
�T1���G��ޯ+mv9��ɑ8�F�$C���%Ͽ��1��Jw�J.9�.�U����̥��"K^8�/��zi����Na�i���A�/N�
Tj�#w:>L��K7ջ9,y.�c/Eͻ��]K�!�j撄\���`2�Ld-�\'�brt5�09
�{�9g
-A�I]�y&I�vY7(����`*��P�P�A��R��.q
O�
j<q\��M�Y�%�-+�8t�=��R���H�,�Am�Xd�fRY�*	B5Ѣ��ӽ�S	Ob�P�Sk�s���e�0�z�S�=S���t�X���cU6�
�`�F��rGZi2د �kv^�
T�T��'���K�܀�6�KP'�
�v!��a�W��[��$.ٗe
��7���J�*
`%P�m|�V�D6j݆���G�z�a,������%��z�S�Kҽ�}�8ߨ�Y!�Kf=�$�(��^�' *>�	�����@b"%I/$f��2I�7U�.�wC馩tvS	G�D��?��J��Q�w�
�4֌'�ɕK��,Y�%M�*ƒE����@i��THJD)���X�H(�bCW���Ӈ�43�N�-��0�j|��dɨ�
�EX�;*��7��:b]�
K;�Rc	s��\*L���nv�h9�S��K�C5IYv
=~��J�Jq`�:���n*q��
˪���-�֬�\�?WdO�EUh�{*�
~P�kR��[
�IV܄�
-y�B�ֻ��M�ٵai<�\"OQ�e
ud(�xS2I��]d/l|�SkS�,&DB�Ft۩&]e��$P�r��P�t�t(��ᎠT0�I@����9TzK�0q���:qy/��
:1�D1h����fI�I�� ���
K2hI��v�	��C4�>J�S��Ć�|����\B�P*���1���8xQ��� K<`�ە�KE\��QQP-D�g����@��� ����'�����B�J=�b��D�=���� �8_K.A�&������ �NlV�R�T��萅�C(�1�N�Hw��1��"�V�ݤ\"Oq��;���n2
s�s�-f�n>e0�
���E4zɅG�ǜ)"$�H�)�$�zͺ�d]T�
��t�g�O_�J�S����>�J��cI�kVG\�U��u	�Bk#łdN)��u��%g��$�ZV�z&YW
�.�tˢ�
GHH��lF��նl#����`��a.��l�tC�/�_Q[พ`	jX7�r�(گk.v�@
9���oXI [...]
���K��*�
���
-Y��<0�IC&!'C�S�43��=|�c(��`���'����%�%�:P�<�k��� K;�Ҧ�vi7~���~-u��f紈ǒ����P���U����P��T�5�J!��RN I��E�<[/M�c�<��~b*�/9���ע�Q���i�¤2

?����K.�",i�ջ���c0�|R �[�t�#��]����Q�����k�9E�K:Ǥ�
�d(�
J�
�P����S��B�&*���;
�ѝN�@�waif�2�I�d`*M9�X����[{��R�"�u����Bݵ<\V�,SI���A����Ht��KeE�5��
^��t�},M�ǫr
X��)hQp�2�GWJ�E���P
���I4�0T�In(������K�&(M��k<��؂
���jla*cS���Y����Gy�
Q�}<�
T�;�^�H%@I�`$�PR�5���XR��^�$�
�4�׹�:�Ŕs�y4���^�-�,>�}��#�
��T$�džL���~�uð��sÇA�?�W(u�$��K��0�J�RD�+�*��&�n4q#.�C��%��b�,��T�����@*��Z��;I�:1�s�t���0Tt�4KJ� �,ע��K[�t�.sâ1��9��|
h2���KU�	�q5�iQ��7р�"T�I
����y(�~J��<s���0��
-2��)gef�t���.?WdO�EUh�?��ֿ�jT�0�j
J���p�XrT:�<�f�R0������|��`_�L5}�h��ڶ���.

-8o�g�9���IȻ�&�o�Y(]�
�t�p %<y�
ECź(�"a�JG�J�A��ai4�D3 �%c���K�Cżd��ߵ�HE#��,#I��Lj:jㄒ�p��ӍP�%�����F��e]х��v�ɖ��z"�4��K�Q�-,���g,�(w�.��&�&�	�=�q~Q��C�rCU��h��?z�W=�Qo{���S���n��k�+S�9q$�h(!ɗ�zi���)P�����0���

��$;)T�a�,�?K�z.��cW��sd4!�4��Tҭ$8���u#i�)�����,�4�.B�
-�]��I��
�=*T.%b,��Tz�����A<I�l�%(
#żd�VR�Jъ�䑄�T�A˙���<\���@��JE��D�"��7h=�%a'��`,���l�^�<�����~�E
;�	��D~�˸��I2�6�	���P��T:3se*��i[�J���6][�"$%����7$���TzP�Ri'T��e�ܶ�E����z��[��IU�� ���r;��
0\��dI���"vYC 
������L�v��n�r���,a����q�UKc)���K���\C�|d*�n���(�
�^SC"���D�e��jRĤ!��%�����·���@�0��5q�
-�d��!I*�
�J	,�f1��Aŵ\2
��Ѐ	��$��d*�J1������dL�LR?
�[�R� �JtK����F�z������xm{��,��^�zXz
��A<� IL����jAK[
j���������n'��v(E&�NV%�q�qI�LeE�Zde1��������9��J�?�(T:`�C*�0�5�R�$��kX8�]GXz
�t�e;�%Y���.Y��`b2�J�u������T�K�&r9
1K$.KĽ5�>�vg��
P�-�TzE(m׶�c��T�
@��ݩ�Ь�%�f;ϥ�J��d=�0P�F3V�&��,U%�j�3).J�o��٪�w�kJ
-�[��ʴ�s�PE,5Kԕ�-KA�5mi�
-,���A*�1�j��5�'h�z�a�L"�M&�9y
Jɪ�6����x��8�̗�<[L���i�K����PzR鱨�?�����Q�BI��⍬
�Z�b	�MxW^�$����Klr!�j��[e��6��J#eE6���$y$qM���?W�F�,j�6�b��XjMX *�J��V\åNH��5��X1Փ*Ԋjck4��6bR��Z�F���A	3D[c�PeU���Y�u	�
x%4
�RCX���K�5�I�x_},

��v�L]�<7��W
��_&�UA��TU�	�@铧z��ō��#E'�� �⋪������y�R~#U�I���GD�
�_CPR!)�xim�4:�N�%�
��Ι
&&�(�9kt��dM
-��6�
��G
�d��njj
�d���w�һ�>_%�$�~N��P�%T�P�x/*E���lrIv\Qnc�X2
(�+���h���P�����E�6(�R;Ai�A�pO %8O�L*Vfh-y�X҈%��6�ҵe�
�^
����v"&1Z�@��EU2��$��W��Ʊ*i��TP����|RM'?�?���3rA%��O*=��,�6HuCP���#+^R��5\?`Ž��Tz�Y
-�i,,�
�
���9&�9v�F1G�KY
�lo<�|M���o���R
��,-L
�%�Rc�—P�X�*.H�1�qa�Y�b*��[FRXh�'
�;@I$Pio��F(A!*U�L��%�<0��T�V5��d����Me�$�|]��$c��BX\����0��EuL(
T���J-!�*
]T�
-
�r^-��㙞��S�J�ȟT:���J�yDT� �0�i����	� Z �@�|;��-K�~Y�Ki��Mn#���DhB�k)�5�����֤?C$�$�I��&��-��j(��g7_�FO��!��e�ʆ��T*Ҥ��P-��J1�>ť����J(�SR�T
�B+��?%ԍPJ�#�>B	���k-���\fY���e &Ē*+�z9�%���$]��!2��� �\21��bB����HAQ�1�(��J��׆K*SY��ٲ���M�����ljJ���Tzd*a!� (�@%t@�K��uU�ed,�",����T]JqI�I��
[�����uI[ �Y�sFg��3)��i��J�H�P�I�̦���+b	[�$�����<���^TJci��J.�
-0%C�f��
-�l�}����75����tQ
J�{P�����^��B&Ue�e	6�
�Jbi�%*
n.K���!$�!�9.u]Zdke��d4R��o��t3�DxOT�M������Z�mBX��O�i�c�3{�6�T�|UzR�!��Q	�UJ�#L�`�О��o"c���z�b)&iq��^��Y��]Βi�x���[�լ}o
�Z1.I
I�4�uWC�]B��f�5n�)��T�up�%��#*]ll�:��d]�1s�m�d�K�%�UkÃC�O�&���=�ރԎ�}�"(��Lʗؖ2W�r��v
��uP����%��A,�h�w�C5D������8J]Ȥ�P��&�i\���W%Ho���-�S�q
6�}Ҽ*��ғJH�7����/Q	�����
��0N5�F�R4Na���[rɸ
�
-�Ny��@����m�,�6}$��t7(

��$	&

�
�x���J��e�XJsɃ�T�
��K%�
-����)�tu�
ϝ�+���Ԩ��rbR�-+X��)_ebIWM������8$�,
�%+H�%�0&Բ���Ѐ%�D*�=����7~���4��D&�CUR�r^�YY at U���U�
�x�m�*=���TBu	J��&H��D.��^6����z	,��8�t9as4[܅��u<a����׎Gk����LY�t}&I�J;%��VX_
�	(b��ds����K�d�$5;&5��+t�Ŋ�}�Z�X�]�I#����r	(m,�ti��j>_šρL��b	�=L>�Ҟ�
���{�X�ե�/`�k!W�Z:�'e(}�*axâ&��VP����R���\�L�ғJ�?�oS�CRi
T�� J�"(9�<@�s��nZ�Rg.c@���t�.
�)�9�.3Cv��j�?Z�	�s>gj����nd(AN�)' �*���T0�4�W8/x^�/�R
-Ki.�Y�b�
-���A�}J)
B��9������J�W
�h������T�J0�F�K��~���nK!�B.���]��b��[*�9&%�ҝ���z������	���f���K���oH�Ї�Tz(*
�0�6P�Eq�>�K�K����n�u�xp&gҷs9O&.kuv����N)��O0�� ���rJ۵��P��[+$l�����^�L����R��~]"ͤd�^�`�Z!ȀTm(U�$爟l��
:t{	%�J������(-Is^���JKtz<n?.Kca)P$ͥN���y:byD��	����PtC��Rm�R���)/�`�j�����^����IV�'�
�J�%G�W��x� J��J%��@.5K0L�"�_��RX����K6}{�c�cׂ���)Xv�ܻ-��H=$�N���#@IT�����6�]q�lBXQQR�%�H��J�{R�O�RX�g�@�mH�X�X�A��R�&
2��5:
�A��P��M�F�%�U�-V��r�\.g��jn��J]+
��m��+ƻ/Kb�O��~�;\r���Ztb�����
4إ�4����.Q�` ��V������J���bUbR)q���Җ��&�� (�����k�apU�
Kb����	.��$��d2Fg��P0X�E�q
$I$�$��>ˤ�(�� A at cO�h�	!�+J���km�T������b)�R(�@�ئs�$��	�B����F�:���G�����Y��P�pQS.匥�V���1�²t-��w�wO'�.꯻�C�V^��L:�=�z(���:E�u��J��J3S���~��(�,A����}���}Y5�K�~��v�G���K�]ec�a$J;���&�_D�L���~����Tz!*}��L%JFǒ��K(���\0I"6�B��e{,�꒙K��i6נ��:㎩/�*��Ӑ4p:��Vz�)�v_q %)G&��MB�)-$1a���
)���Ϧ�I&,����G�.KhaB��L�GM��IF [...]
-c��H�����8�DX��
��Λ�%���ե�/��k�'��T�3�K&�`�|�J���W���� 
O�*���
^���p~�֪қJ/K��JזJlk�!��$:�)˒<ͳ�`�:�Қq�sS\�\Zvd�khv�Q��]Z_Z�3"�ؓ�
�c�j�`%� D�XJ"�ʒF�OI%���L I�үi��,1
-6�LZ�]��ͅ���v��z�����I�EYB�R
�^ 
��N�;��K��-�<����Xr�f �]�i
FL������J��*զ�$�i�T�0wvႪ��KQ�k@�#S)�4�&T� ���)�P���R^�L�M�3�	�q��IC�`�,Gyw�Ɋ�	�[U
P�2�.
��
b "dD�6�Kx.�[�T"_�;*}nJ�9"�Xr��q����Z�R��z\�� ,P��P:����#6��R���dY�CUI!c)NrlYU
Q���-���%k]�\jը5-hPOH0.��@�T��(�������(U)ާ�Z�����ԟקҕ�D��$*qUJ%�"�(J�I�tNu)/KG
K���Q]��Rcs���.��?���6��Hw�G���n-���
��DQ�X�&
 ��&�Q�*����T�NS�~:-B��%�K��t[�X��

6f��>5(�+r�c�6PJ< �����U�x�`)-J2�#9
[�V�6���.M��c¼�n̤͡t�7U���D�MU)�U)U�Rk�L��7����T�Q�TAdT�TB	L
-C'�VH^X����n�3�8�u��{�S|����:���U��~�VL�C���d�(qk�s�(J1�AR !�K�"�2���J0������q�-���IX�d��Y1�d�%R��
���(��"{d�*�c�(
�$o��p���AU��O�b	���N#,�[����4��� E]�E��'C�U%�S
��;o�R�T�l\�~تқJ/H��F%8!�0�J at R�G�"��� K�B- �F7
��ӗ����������_sLz
�*)3)����DXj�R)�TK*]���=Lp����ÄI���v�,J�g���J?io(e�����7

��|ᆾH�L��r�WQѪkI�[�F��t�a���a�
�Y�
-V3��P��_�����JE%�@�U%��J�_�U�M�W�C	�����.�
�<-$�N,s�uidr&�c����+�Ӈ�F��V@	˖�dRЄpIb)��h%�K�=��?J%tr��"��U�jRo�Þ�,(�FP"�(a�C�u��@i� 
�
#�c,e9\Fw$�;�ei��U�n��bB7�9-�D06��P�l[��VP�(�U��
)6C�*E���Kw��P��T���tb*eE�g솰B�MF'7��i�
�t�K.u6�=	&it�~Ml��-��Z���a�J'��HsfRD� �ူDe)�
-��is*Y`ӟY.�QbB�YŮ��v���Z��S��X/���	P� ���DPJ�(��~�s]w��Dx0��R��o
-�
��
K�-R���w?�v���Ƅ��"�S����7>��2v!1
+P1��*��V%x�o�J
��>��ҋQ铡$3�Nf��J	4&&� L��
K�K��a遤7��,�:���i��1F�!~�O�)(�
P�IBG�6��Ȁ��d֖Xj����d'�KR��&��ʮ�
-��cР��u�4���.s,(�HT�\�w�A�p� \r�*E1�GX�ʲ��f,
��{,
��d}�J1#�P�GB��>(ɪTT��I\�<�*�gQUzS��C��'��TB~�r�a!�
b��yBH7�p��ұ�R�T,ٸċ5E���)g��I$�����T�P��D�iJ�r�PRg��%��1i������n��
�1�P�ܑ�"(�=V%j��$���
D@Ҟ����X
-+�,�
-Y�����Z_�DZ�qi�KN��U�wm�ҭ��Թ�&��%1]��_b��7�^�J�D(�]Is�JA���yas�KT�$�ʣ��&,}����T0m�Z�I���A&i��1��ZB�tl�c��8�t���� dOےJ��d��Kwe��2��
J%�C���"���P�JH(Kb��>����p܈��Ҍ�T���X�n��.m�q�+�➍P�)c��Z
��F�N��O�$U������V�7���gQ�*
-,V,��0�}%�c>)r:�TMa�ҖVX��t��=�L�!��4
���DE�z�!T� � ,QY���J?[*u�7<��xz�q��4 �=�ݣ�T2iaSj�tb{��%Ĉ�����g���s8

������
�� ͘Id����>���
XZW���n
0���
�z(�T�=Ѳ@�U	���KAD
&�
Ƚ��:MUzSI=�@����T�
�;
��	J�K�R�ӹ.����wz&��\�\�s���B�Ǚ�J%�
�������D�˲�E�G���0��I2��4�S��K�<ofɆ�B�n�T��!0G�������?B� �t�\ڣ*ʼn�T%Tvi��oGhx>�
[�0�����!-�Xs���+c炚U��<�0ৱ{P��~YUzS��R^f��lK��	�u�M	��h�����چ%��?��5.M��ݭ�׫��{ds���d�J_�PB	�e	��&_6%.KI�?�J3L��K�'
%[�լRw=l�)�@�\��t�(��K(�\G�w���ۉC��E ,�"	�sq��ZW,"��s�d�үR,�`� �P��-��^U$�$��8��ć�=yW��rf�қJ/K�KK�*/�-QU�W8>�0�dU�^�C,]ai.��=4��
S��I#�
I0iJu���De)��X#���Ӛ�gHe*
��T������f���8`���̊Y%3i�@��
��fV(����l
q	��be��OD�:{/<�I���q���p\�� K�e�lt�ֵ(���r��HWBP1��?q~�)����¹k�I'N�6)
R�΀�u��Z�^FK�ݪ.���������� �����~YA��Prs�6��v ���qI	�d)�
�mU�̪J*�e*=7bWHD-EFP�R{$�2"�\�,�=�s�b,�r���w��u�	�m/rogR�(yV
C�j�d4�
-���L
\S2,B	�%�f*�o�M���\��<0]�ؘTkڀf�tl�jָ��cIe��2%�#
�>%,�#:1��,�
���)��eQ�վ�6:-w�b)̥`�$ňA	~
J�v�Ee
j���ɜ )WQ�D�DvoX���bUzP�R�K%������"&����\�XՁ���R}w,y\�ιa�N�(rSH��~�̓RIPBQR���K�,� ��T:�L��	<�I�a�`��Sj�ըRW~��y��ݯ�J�t�(�EY�1T�$�	���8B��Tt�%ԥ�bI��U�h����T�K��'-]�-���&ք�3����ko�/��'�&n�9�T`ꂸ$�*����Inƪ҃Jӿ�V���FT��5ebAH�8�����c�N\RZ Kz
�|K�å^��n��������7^�
-(�(���Й�P�٭@	AeI�6���4H��
�9�q.�c��WX�IŮ��ʏ�P�(}����/�;�*)
e��b`�n?~�n9�a�3�5i������l�w.:���)9
`%,M�iJ�K,R`����_NP:и0s�mT8\�J��pm)��ͯJ*�T2ear) ��i�1
�T�L�\*��%c����t�V]�qif�]w���{�[oܽ�%q�PR�-J)揝�sl�]
-4��4�T�q��J?{T���#�'SjcL
-
�P�I��UjL��bJ_zPڑA	�6�{��>~��>�LYFXb	�ai���(�j��K�q�V)&$�y�Pr���6)��QP��3�r
gI,lUb��U�A��K�ϟ�X�-�rk3jKhJ
u)���N\����<��j?ՖF�t�6u��>� co�l�f�
���!��J0z*G]ʼncFX�N 펝�T:<7��Jݟ�8Ĥ�z��lpc^C��JD��
(ٕ����a��PL�J)�DL��H�(��
XJ#�"V4/,�M�a�>��nX�h���4��S:sGJ�&v�HK*�y��R���U)EUrP�\�҃J��$�aWG*
-����T&rc��ciw,
�ʹ�������~����ԇҡ
�����Bc��`�
XBYʕ�`jv�U���I��	pitn3��'�,���L
U��� J��^U��R&���S�R��,���Gʘ}�Y�`IQU�������\��Yw���.�i��5Xp+o𯯞S|(U�	=,��Bj%tb��L�����
T�?�J���-I�RB�)c<�c�Y�Q6��2IWbi9��`����cQ8�]�{J/](
|(a�PQR2����`���-���סR���eH�)P��\�׏�T��s
���$�)���"��N�X�v��JۏĤ-�g+d'[�R��.��QzQx���Kp�����V���@�j\<kH�]��Ѧ�
���0���(QOR,�1r[r�$7iTofW���8��-���$2T%�E
�Q�Q�P)E"��I%-�-���ΖZ�.��Ro�
v�
����(���P�|�Ra��SY�5f����;�l)��P�zd	�~΄�I�1.M����"TP��f�l
Cɮ�H�PBYRP�,�XLLz�~���=q��+NX�<?1���V��n7��E\h-�4xo�;J�
�c�QUiw��h�Lnmn�������@�����+;��F"I�I����*<�p[z���B.�� �Ƣs��~�>��:
-��%�RA+���2M掍���i�.U5�YK���T��΅�P����;
.-���z�&TP5_��P*,������(EL�lb�dL
0q`�Y,�	���*)M5�J�뽭��G�g�K��5�<����*Q�lA��Љ�*2I$J�J
���_T��T����4� y]W��-Li"X����3�ۅ��Lj��]��~3�ts��v�ϱ�dSE�q����Rm�dr���$��N��\Sʕ9Q��V*u����
(u���8�S�K3F�L���
-��c<�p�;������R!5v@	��Bɘ�'M��0�%�%��XB�d�`�(J���̙�pp
�c[�w�>7����G�t���6T��"sn0�\�Hm�%�v]:(m|(=�tao�J���mKU��i²���qF�HU)hJ�*�c�����Z�B��ݸ�~���.�ͷ!�^|(회+�ld5��-K�Iv
�����D��є�Ӏo�j!�:
����q\����Ұ.�e�^w�*$��}(}	B�Y�]:��\�%�}�
�$��R�6
���Y�
-/�/�$9���D�>��mi%.ͲϬ���'�ҡ�{
��,�.(�QP��1���ްUI�����s�A�7M�}Y�EH�5O��J<z�q�%NL��L������sk�>��Q�Nohų�]�L:�]��P*�p����1)�Qa!pXJ��&2LY/�J�k�4@�ϥow�ү�j\� �^Mi?��vP�'(=��Gi��R��L��p-
���[��b�yK���d�S����P:����4�BImD�
-�T�D�DUڰ��t�R�%T�4��C��a*�q���X�R���IdD�(��NXڝ��6���RcXZ�K�����.�n�#E��.�v䵲 ()�9��m HzJp�`
HmS�
��P�n2�-�P���Υ���tlOLߺ\��XZ&Մj3��
G�$w\����1�(!(% �= �䰔E�����KpQ�bi����˝���<�N>8��U�S�1�]�
��������q�ĒJ�P�[�
T�MT
-
d@�f �c����1QiBP��N��K��HU����SC,}i������NX:���c0�է�RJ{k5@��BI��%���K8�`�%�JL�-��ԽxJ>�NPj�Ұ.�bi5�֐*x������>�vN��-K��#
s�2�B	=����,�8��f���L��0U���]�jʼk����A�"z��%��]�����s���Rf�*�MU�k^UzP�Q�?��@<*
�T��mZ�-���z�m[G� ���X?X`a`�%R%��%v��E�}g�
u���>9g�H��Ԓg8��D4�E��0���<��TJb�P��ّXڷYz̺�L�㪫���E�l�9w8���Ԩ��, �xY�4
��,@���ò$UC����48��T�T�t:��T�K���{'��Q���s�|�����
#���"�?j�G�%J��=bh�I���<�<�_K� K,^|
-����e�ڃ�m��,�"?<
�TJ'԰5D�Y -[��@iA(MX���җW	YsΩ�$F�@H�IO�V��j%�R�Ƅ4�����Y*j�]�j����U����(�˱�,�nF)Es�yY�Q��F�� �˕IJ�"ip-
-���U����{u%j��
�*���!��\�:�rJ��G;6����$�
��ad��襁�K���^�&���Y��yĔ�ҶET��d��Ҥui~
?���ӎ�$��Uo�9~(�ņ�~��T�
�k�ҋ��׌��U�.*�\���/�4V�n@�*
�
�(�-�m�e��%�vA�RdYJ��
,��]�&�t����DytQjw�%lJ뜦n�d(�!/K��Ngec�e	7BU*m�4|!�Ui
��K��[���K����of�/i�)(E4�
����dYJ�� U�I�*�FgK��ҡ�ҹg��Q>�ʁ�K����4p�A)߲Hy5
`CE�
|���.�c�|�H4��(}N��eW���} !��]~��JW�g�J�Z%dD�X����@��R���#��Ȥ��,�#k;��FQ��K���7㌛�t��%�4nqTj@)M�R����!�Zб����6%R)I�2��K�N�J?�}4l�[aQ�U�TAD��癏�e�����f�����Hk
ؔ�1"�P�,J�Q�=U�ċ��$	ÔcG"��A�1K���Β���|K�]zH
�2iJ�A�w�PM(�c
���h!бyUZ,���d'A�*��k�p��J�K�
-��V�*�/|�*�Kh���c��PR

E.I��荴*�f
�
�$���	,
��u��.�������\��˿�o����q��n�4��l[��eI��Z�$H�
@��R@� R��ҦRi�̽�u�4n���wW���RI���h��k��[���K7�N�;\�o.������9"g?A*�R袄=	$}���a�Yz�~�y�P	�۲D��9,�[,���3�.Mp�^����n�T��Lp������sQ��
U�‹�ҋQg��J3T�[*����D�W
���*�
�^�|B%j(�IG�-�҈T
-
`���jɇ��M24&�
-�����Kj�v.K��*X�ʥ�տ_����n�
-Jͩ�
-mG+%5�|���Fs��1 �7F��L�VthXJ��!6�Hg5bU�

-��n����+�H�K<n�I�,�![W~r7mukl�D)+z�@i���C(#�(Qž�<p�`i�,���,E�A>ɤ��
��e��d׮��ui�K7���<w
��\^P�M)�J��qg��4�5�=�z��c�V��&��M��ґk�*᮹*Qξ�J��Z*]�A����
H1X�x
V�=ŝTB닰-���[1Ja@'�K�btI�B*Y��Z�R9��,5�%g���Kw��ɿ�cRcQ:W�RYh��M(eJ�*�nJc at H�����8J#�j;�miV�p�{#ZW�xmV�\lJ/墴o�D��Y*����^y�D}�s'��s%���D�'vj�Ƣd��;Z�hO������\�,Ez%�O��D��PEifMjlK.K֥^��w�)�S�=3����u6%%Sn�Y�k)V�Ei�B�S*�g-��˚{-��&*���-�24�/�^��Ҟא;���T�`'��(ƛJ.�"�@G�KJ��x�h^����i�ޖ�
O\T���
��Ml^)|���~���-�%�3��(�҆P�e� $j_� p8�>�%LP	w4�q�߈�Uzw�D�*U(
�����U���KwpiJ�n�������� [...]
-1P��pDܣ9 ,+��I�b�R�2A��R��F�(�JM�v�!��L�9�^
�~�ѥi�FO�����Di7��� ��J�⯂�Ed,K�!XRi����ҩ�Rߺ4m_/�+�0��L
��$K�/�P�a�Qҋa'�D��UҦ��~��W�
�o��/�ET
-U[������D�!�����^ �%z�*�'b^�h|7X�".)��-Kk�H���qt]�ߗ>S_���ݩϽhR���:;��<󲄫�Y�
T�9�
�e	C@
��h�S�<�M at 74�*A�7w/R�67�]��J%t�
-��
������,�qirƦ}zO��u[c���=(qsJi�iT=��R
-�� ��I�`�$��Ѯ�Ү�R����39�S#;�L��x�����>/Q�.],K��k�x�(-M�zA(M^��U2���� ��mU�]M�T��k���WI�5\��[z�R%' 7S���J����U��UH(I��#�Rh��RL�{��%��fGܢr���.}ҥGW�}&�n���o��g���,J�,i.8ImNcQ2<H:�R�|��@B��U2P)��ҟ����^gU:����4)�cE*��
�)Y�n��
�7����x�9;�qW�FBi�E)�Eia^@�,�
���I�A�Ŗ%	�"��b�۷Y�Y��b}� �
���ta��PmJ%J��S�{X+
�†�Qj�J�(
��z-�rR��v��^��.~�ˏ��[���J�_�R�T�B�Y��J�>����ҡ�Z T
-T,�2��.�~����y��q�S�
{�� sTS�R5�
WX���L(�V\�'�M�.J�:#�l���M5� ��_�Ȑ%�6���;X�F`3�BV����*=�*
݈ޯ�@ɪd���n[����J��ҋݔ^�#�@F�2lL��
&�ms��R��
aLj
-%j��Oh����Zԇ�j��%I,iix���K����
�r֥��w��}�I�(��@�u���(aV�5���І�W���A�*��pU2�*m�Tz{�U%cJ��ܹZ��_f�q�H��O�W̛��4S�%
WAk/�Zn���H�j�ٽ
[%27b*��J��]*O�G%`ڡR^iC�r�J��
9;�v��Ը�R)���
1�
B:�OT��RHbR�=Icm%k
-��I�$����$�~�q�F0�[^��$���t>
�Ҏ|���6&v������EG"Uf؏|8D� ��r�T�
��J��#�<�@鵥>t��m6mM2@����
� _�?�4>�.oZ]o��x�ʭ�F���
�%[�~��a)����()�<
�h�d�Re���d�a�
-.�
�>l��O�0��4�B	e�B)o��
Վ�@醪4F�(u��3�P�*��Ү�
��{L�~kG����g�TxT���J�G��R	�9F%�R�ěǩ�L�r��+C�(ς8\�P�R��A><�U�ϙ,��L�3�jD5R�F�ԯz��,���u��>x��ߣLb�yE�u��ֻ�8v��Q[
�RX�(	�R �e� 
�2��&(�ȡ��R�o�J{
�I+>{����>�\��[�t�2o^�%&Yk<
� �۲�ƪ�q�~u��R߫2Z(��X��\���g"��~ɯ�;>�`f���
^
�Tzs7S�A�*)�Jya�T��
-8��O/����c�g��.�Z��%s��T(�JK�
T���RI�Js��j�z�+����@��
䕏�
�,��D%
*�I�I��S�(���H��yRDq*t.2�5�
-T&jKVT�K.�\���Kw��J���H�I/#E�38�Ҋcw��.T*3h.�E��/1hi@�?
�FR��¼�B�S���
-*
o��om��P�7PZW8L��9[����p���-[�=������ͬm����:��&��A)�A�?��X
-<,)K���h�(�
-�0U�.��{g�121�aQj'�~�
��R�PJ� ^Ms_:a��*�s	J*�7먔f�J��/�J
-d��wR�c��U4K��d*i�Pi��TZ8TR���Gk���l��
O�S��Q��
�0	2@�5�G<�*�`���1�()�8�X2�b,զ-�l���bi�K36v�/��
�9d�HO:7L��m�:�M�&���7�wJ.	���cDH�Agr><��>Q�䖥���J���ι39���[�Pz3P����T���hM5��g�t��{ziqý�Pڙ��
{�8
-�������X,�KX�	KjK����б����ɫK~7���~��`��pM�s�@�
(I at I��Iԟ�]P�S)�TDL%81��9
�C5TڏSix����t�TڻT*�JʡR,:*E_M�����]*:WL���n �;�Qzo��f�P	W@�Ji��FABU)
`��_8i�\��-UJ0	��jj�J�
եz�.������ǾL]sD0Ƀ�Ϥ^Q2:�P2��\i
��:�S��>�|x���$��"NcxWC%�Sv��:z#����ޚ��P:Y(m��53��bg��
�~�aK�p�s�9��I&�
�-��-���9�,�8FxP�<(5E�
��K�%���ƱD������������A]�v؟2뙹O���g�� 
��MS�-����ܹ��2�\*]�R�JUG���f'�T��J�
K������6ec�x{3��R�V�5�5E_D�<c*���R��T�[*���P���pxDP�-�}*�:���<Nt�J5Q	���%�R*�`,��Tzz$1iA`�]�)	�������y���d=�M�Q���q��������������I�!�0�M[�(���ʁ�%x
3�'m�
�,��2�E��R�F$1��)��vÍ�dVCb�e(�=U�$�W�A�X�����&������{{{�6H�Μ
A��m�!��>�~��a�X�0ƒ����Ò&,�VA�['�Y�
��7��Y�LO���hX�4��H����LC�f*-Z*%��T$���R�"���mr�T��va�:��Dze��
�J��xS����\�JiK%�
��J�R�T�M}��@�
�v>��@�<�w�s;EC���	�;�J+C%Z���e
�Jp�0
�:�a�/�(F��4;E��#�WiEEU���D]��j�KcF�Y��Q���դFc�E��
���=����S�Z�L 5Fmƌ��ψJ�������R�C*�{#<(��{�A%�I�$��
T(�Xڱ:[.
7ze���u��
�\kܵA����R!���Nʈ
-5�
�LO2Oe�4����%����
-*,u"�
���.}�v.�ff�k��ʁ�ߔT��� M�}�+��Q�WK��������-��t9:*�^__o�Rc�t�C�	��J����t�A�T�"��T�QI����`x��,�|��#ĝǥ��S���C%8

&)i
-���s$�ǐ��"\.�R˥��.�	a� �
-��
�k��.k'왺���p�4��
�������sH�d�q�(��W���ۗJ��
-�w`Ƭ�|K2xLE�
�����RIUmN�8T��F�o*�h�th��1	q���0m
.�
��M\z�6/�n�I�5
�����]��
!��Rx	Jnf��􋱔,�Ґx�RKZU4tR
;��ԥ�S�g�)$]H�Z��4 ��^(�J��|(���K��-�2�R�J&j�$A��J�c_r���?ޟY��ǣ5�=^
�"��蕑X�-ɀ��6T��UT��P)e*�f��ꖅ���u �;��8vT�ל
�JX�/Q	aTzz2���$�Fd�!�2�D�\,e�%XY�W
���A]��K�z���?w���Lr{gnS�,���(�ɬ�TV F"A���q!
i̊����,xxaȼ���r�s#��7⟱�1��ҁ�t�TwL�|��*R'���n�ĥ#qi���B���Gmo.Lx{�4�����
)G`eZ(	J�4���跥
��$�B��*�7�gK�6uiL>3!��}�j�%��\0��i �\zi���R۔��RU�������K%�Q	>��@�*7T�Ip�u\�d4׾�n�
}��Ҿ�I�^_�ė��bP)�J��R�5T�*ED%<�L���Cѣ�Cry���h
{K�;�RzgT�tG���i�DU	M	^�сe.u��0��)ILR�*�
Q]ZQ�+m]�Y]�%�
�����Y�4�$֘���޶��~e[��
-�
-�pQ��f
JT�HӔ�
r� �?�0"(D%
���.��܈��F�]��$)//��J}(�I���/�ݶ�.����S��G.0'B�}inZ-�<�
�U�����(���1��H2yNW}UdP)?�p
-�^��O�ҹ����{�\���0�w���
��V�,�K�Kr�1�{Pܭ`�ÒoڒNv�RZ��:�n?�u3\z|؏H�������~(�i�
�۔,����ǫR�J�JiC%4%E*�KU�m���h�t"�.�/FvKLؾ�z���ӟl5@�+

7r���3@X�J�R��OP��RI�Jk܄�%��M�I���džJ�@̣��߱�p
��
Dσݱ�R�U��s ^��{!��đ
R�OIy:��i��4��4�����m]��jȥ��n+�=4Mh�w� �kl�5i�$+2[���^ˬ*U�
��stQ
-
��-�4�_3IO\��~�'b�
-	T��*�\���)퉸>~"�P�� �
Pb3�=I�<ϲ�)L5YK0�K'r�5����$��uc��$
-�RSno
@���>�Kȹ+b��XZ7XJ5�R*L�`g���\w
�u���L{j����o��K�a�t�륁4
6%�;��@���c��Jn#q�
-��X
-�M��cs���r����՚0����T2ՠ"�3<6�rR	&��<R)�Tr��J��RB*y����|R)���M�Js�
ZL_G<��@޺�h)]�0T
}�C O��C/By��&�J���<�%\B]b�'�2$�0ʥ1�	�T�
{%�k�.���
��N_�_4p�AMc�A�
c�%�
cp���
Bh���d�����gL,�,��"L�
T�^����9e'
-9tr�C'�+�JG�<�|O(IQ�
- 	֬/!�m���D.�U�j,�r�9���]N��.�n�R/���m�r�
��7���&�����
���((,m)����.�f��K���
-�<8��4�c�؊j���P�J�g@����P�TZ�J������I�j�ࡥ����3�j��JN�o�h�8i�� �@:Z�b�'����KH�gK��WSie��L*%�:�m�>o(��+�.��J2=�
��CSI�C�

1>
�R��9xqX�����2\B]Z���sT'd=��R	��
�J{�=-��".-ӧ�k�
 i�I�(i{�J�cQ��'�N�_
a�a�cw,J���X����k�6�#CNH�$���~7v"��1�#s
,�H����
��J5�d���iʺ��x���i��}��ǹ�V9����&�q�ۼ��Z�ΐ#�a�
��%PZ��P%�(�
vP��:�%�������4c?än�ݦIp����P�(����*E^�Rs�I�8�4��
���b�v�����ӛ����� B�R
]�;
ڒ�ˏz�
���i*���K����_ u���8�`HQ�i1v	�2�k�a�
���w�O��Q�Ҿ���;*��38eL�������c>=��V+1M�%_k�t}ܡT%E&	�je��j�5\2��˥��������Ɛ4Ǥ��u�|.���,�r��BKMQ&A!�k&L*�,x*N#?Sa,J�s�>@�P�tnO�u�D
�D&J�#�=��TX��4U	��ĺT J� �ƐK7�B����
g�����$y
���Ņ�[�#$�ؘ�
Jw�"|(Q�lMUT�>4��եi.��TwG4S��I�F.��R�4�~
J�>%C%l���T�#W��9�m7(���'ɂ��U����7�	Є�᚟_��u5H�D����hR�2T���T�f�T�J�K���q�#nʔ������hf;����� [...]
-P��mBR�h
-i�Xb�
����R�Hz�.YI{���@ZS`�A�]�Ϳs�H�-���	&Qdâ��
I��_x�e���o�������ܖm��I*�)%�
-9eo����{�_�V"J`��
����
�,M�R�)!�xehQH
�x8%���y�K�:���w7㌝��z�%c��	�3)�6GX(m����$�J|�PP^d6��h;V�,���\�=팋�s�L���� 
T����4`�@I,�cP�T��C�gP)J�u�5���gIl5��C�]��x�$HC
5�Q�I/�[�¯�gPSuU%� e5PyL�e���w�lP
@����__H%
D��"���@y��6R7ayĭ���W��<9�����<������y��8��X
�s�t��#�\�dn�Ӻ*��W�#|�u}ܰ���:��**J�^[���Z]
Ǹ4&-�G�tO^_��?�����#L���$���%f�D
.���K��pR��I2��;�,녹-�7^Q�Q���)K�D�
?S�!�x
�3�Ci��~$e)��m	W�o���K�kM�8����d�����9c�IM\�Z#�a������c�e�H�Pz_�q,%K
�r
-��D@3�Ү�ԥC�.u�46�����a�Ǥ�4����rA$h�����@�T���zN�%���
� PI��`�
��N��5��vb!�}��W
-��5:&�ų�p��[
7��
-���<������G���#[
cVG�;\b�cY���}��@.�@:�J�-���
�o��k?%�X�`��#aYsI�Ҧ�&�(NCV�8�u)k�,l+�㒵�;`��S�5��.��Hz�7*�6�$ko���ῡ���t
@h`�0���t9����s����=	�
1J����q����q���|�C�PyX����m��ra��,�B�*
-�/�k+[�5\�'����GW9����&��7k��5֘�^0Hpgq���2Gt�q1�F��K�Z�^P�P�'ꡈ����ѐ����@=�Þ��g�fN4c)�
-���
-I��gӀ��yP�R�[C���^.�m+K�/Ͽ�ڻ 
��!l
�3�%[r�
܅ou�p8�+�#a 9�m�잪��N�y�FID
-,3�9��F\�a�w��NH��}���J��#�	�	��KW

-�j�>�q,� O~ۂJ7�J7�R
b��d�7*�|s��	L
��$&D�xT��LY���/vT��
�
�4��(s��4�0ɿ�J�ʀi����]A�a��
�*��$�+�	
4���t�8�%�0��t��	4�Mcӟ�?_\SHr�$kndӍDn)J�����i�gI�g\����ۢ����n)� �=�Qj�Xr�2��Ᏼ��҉��L�O>�`&���L"(ao���;*J`#	d�U��6�gЩ(m�?^o�y~��1c�"��7�:/L\���uW���n+$*��q�J�[��Y�R$�N鬴2@?�:����d-q̥�T7���Sʹh~N3I��tj�
�r! IPWi �p(}vTj6۠����{h�N}��n�����[���Yp&G���<f$Q1 at 3h	�
��U#�@q5�&
�j{���o^��^@���ݪ�+��<�Mqo�W�ƙlل�9����X�D;BR
J쁺#,0�a�!S)؆ܔ6��s6�9	K$*ԥ"5UR���jI{$�F$�ĥ�K�Ɋ˩kM�U�ү
�4A�I$�=�cR����%���q���``��q�e�BL�ܖ�IﻜBQ�ND98��8
��$�REPBQb&�DA&iK�Z�em�7`��]i�k7�����-nn̤���#�$*k�Ԓ��H"�,�,B��
�J>�b�������`�f�S�\�;غ��a?�tY��'Ӣv^�����a`�$/
�~��j���Pb*}vT2��Q�n��Ys��OstB/H�
%���~�"P��p ����Ky	
��@�ߣ|��H_S���?E��*�	�<���pkn��"L�LN��L��h
�n
J8����Dh��_��XL���"*�r6_�u��ĢR�o
�
�2S^]*J�{�������
-�M�{���,���u�6Ť�cR}��נ$
�L_� ����'�OKQ�����J8)d�'{�)Q��Rf��џ��-��D�.��'��
�TeU.J�$��ܕ�ʍ)����`��Ic	L��nj�ۛOS�h��k;�Q��Q�:�D�3��j��AiKz_��r
-vXs^�%W%]�&�~�Xw��Ҭx^���8��1�7�c�ߥ�Z�/�%�)
�}H?J
�����|#*�r`DIP��$.\�i��aI� q�{֑œ
-="9~� x"ƣt��_�\
bT��!��Q3ش�����J�4�ik�c�Ei���p��-q�8�m{pXz�\<Z��O&�y0�#c��C�(��a�`�
��^1ݐo�4!+�y�N�*Q5*�a��	%��T"��
(�9.�{��������Al�?���4���$�r�f���$ј��,LÙ���%18��
-�l4�z��Ё�B2
��s
-�!Gt�퉠�!�
��qv'b�@�ߺ�S\�I���DE	��zQj)JR���ʒJW%�Lu]�7��K�޻���fW7rF^�ݛ�+�Zg�yQq^�l^WRn�޸J�XJYA�`	���vU��
�u�����䧺��n,�7jg��}�<{)�麡vi�/J��m0Hy�~
��Si�� S�t�|�9�!�
e�'χ�kz}����Ν	7G��A��
��V�h�jp��.`*5���ߣ��MЈ	�����j*K�*����D���11��yt��9�
-�Ѡt��/����L§L�����1"���e7I���.a�um腻�`];a�\&k%ӌp���^c׿�x4$������4�$~"��2�%m�
n'آDL�i�71�d�R 
-yȑS��>�>�24��FiO�i|"&�ҤD��'0��������qQR
�b��L����P&�\��9k�S^����lo䌃����u���5�)��u�v֗۷AiK� � x�.��!�.Y���� ��H�U�Ǹ1�N"�q�gJQ�$8����	��J� o&��٪2�S!k� ��@s��Ձ���-�EGK��ꮁ�|�=[�d'�USW�	��SEՀM�^ÄUp�Qi�穴�t+����1@�D��\ʒ�=�	��`
2����<�����8�	��
(]v�Έ�{��C���4�q������s';
-{5�R�ۺ�wu��
�$u�/=�t�Yq��Il�����߰�r��WؘIp��@"�
-B3��"���(���� ���2��[V�.��q"�@��
nP�W����z�1�"��8�R��b.	���b��/�eԕ*^*2ސK�Ac�U�����9�I�����g��ף.�k��[^�~����`,���
�s����:���4P��Z0�m���>1x��vV<�rȅ#\�^�0�^>J�T�Мf���(+I��΅a���ҁE��tz�a�˗���Y<� �84}U*2h�	�0�A���~k�ߥ���"��$$L���.�,
Y@�L�?����
��2
�Y�A���P��Ra�)M
а�
+���J�[�Jb��uϗ^TJ﫤QNUR���Z�ܛ�>�
\��0ͫ�Z`����G�x�
�/I>���|�]1�&&����Rz�\�Xf�I��V.�q�sW
KY"�졐�r
-b�"@ ��S�.`YKǃUH"��K
�N�������1�%�� J(J�Iq
E�J9��(V
0�p�4ǥ%�
���s�;˻�r�����G�������l����dez�Wc酰D�&q��f
Ƽ�Rr]-u	i��u�\�þ����W�f���Q;/2I�@%i�F�4P���@4N%G��M�v�((� �Dsߝ�ąM��o�t�\:������J�#\'�`.JǃXFe��΄�9tw&\������/��
Q�ӟ��'����\�L���v!a:��Ĉ�0mJm؄h �p O�"���t���e�@���p>��
-�uGMAy��Ir�{�XQ��a��T�u	�*r��VZt%
��K��'_Z0�!Ӽ���ή���<D���Na�m
��k�� 2S�ތ�
ѯ����O~Qr���ʁ�HN	�U� SB���D!�`}uK�<��Dx��F9h*���D��y
gY���rYn�j���<��Z;տPEe�E .��Ŗ]Ɋ�������H�#�
J&g���Nc�
`�r���4��]����Q��8�I�%첬5v�A"��u9�t;����
KF��
vi�
��K6u��%�����P�Ó�;d�B<����̯q�ۏ�4��l M�D8�%_\���ҐJ���5���L����q�b	Y��6L�
߯x��Y�,�ʆ16���4��i�-#�p�&�D*=<�
�7T
-~x�ӈƫ��o
����4j ���\;LrP�E���"R:��;"!F%"U�^"x��Ox飫KF�^
�u	!3�l��׼7�K�vZ�zq9@
��H.��C��k����t��?fRYPcu�NR�`oZ�6�E�f�AQ
-�{[��G��_��r�
-KYG^pC��>�"�Il����
-!�
@"����]	h�2iKy��Le��
-�lori
-�Kb�m�pw�4�/N������z+[��XK��Ab!|��X:Y	��&7����{�O)|B���7.��r2�빿7��Ϥf��S2
�����ҥWQ��
P�T�:�
�J���Ns�,Yf,+�
�HUw<��=��s$�y`
L��R�f�If�t�Ԉ	G�c�
�h�����J%�C"�1�;�h,�N"`�6����4!bd���2���2��!����
J��pNT�����hZ|�����U*)����Œ�ja"��(��8·�����!�˥à0
�4V���k�)�f��	��o5jO�Dw�D��آTwEI����~��%
-yT�HNYf�3��)ĩp�\Ė�N/�}ٌbOBr�V�R���'��R���(Y��+�1i��+!�
ƶ���.t�3^_G�����|#M
��q���uͫF�1떆�>�#�o��<��R'��b�
A6X8�c�C�x��I�>όv>t�o
��T3,�;��h�}Cui@�RI�H@E�Z&uv�@ɣ��I�A�
�n �K�<EV7���%��-����j{��q��1|<��,z�($Q6ն��
-
s M߲���K��a�qۈ��>�
�c�_,���B�$�i��iI��@����C��mZ�'PWZ
�J�Rz����Ϗ2�����q�u��U�u)fڃ��x-�
U	�����({.���]��3�hkR�l�g�U�i�b'ޟ����Z'�.�u5	��Z�S�3�A_v�2�p�u��Ve�ߜ�:���ʱ� P	
-AF�����Rn��D!��E
�\��DhdR����,�(	��U���kiK�J�d�&�t�Kg2�4�OW��&'�������u�ߢ��EI�yݠ�j��vXo��IK����`�	(a]�~�.eB���
t�T7�d��q_��kTs����dxi��
q��.
P.�� 
��N'v����ܺ�
]�	�Ͻ�јq��ޒI����/k[�$\a]�B#P�f ���h��RM8X��)le�
�b1!�4��b:�
FN�&�)P�*~�H��]5���+��c�pk%��ڬ�*��0�b#�쎶*�6�屹
wb|U��&׺IŸ�բ+�=�R�s	ʒ��4&^��}�����}�V��#��:q��$�Қ�ֶ�
-�T�P at El"�sEɨ��ĒP	9E�sJ���a
"��,%��Hyu��E�B��b(��2	�e�\Ң�e1���B�ii�R��Y�&%���~�t
�s���V���~��ď�θ����M�/S�T+�ҷFk���G at I��uI��mC@�
-��N�S2́I�*��U��i��8ӏ�s���Ƹ�s1n�����Jpi@��TTF�.
�&��i�6(�T��.�k�.
0%Y
ZJɂUS"2�)����o?��
-��
P� %i�%�A
-Չ	�b�A�F�΄���|*a
A|O
-cP)J��[� ��
5!V%����h������
�qp�ر'��0�JI��0��%[����,��ߟ<�츄�w��.%GԥZ�
ej]�����
ri3�KM����0y`�ɗ�ȉn�Ռ����&H�����cRa�D
I��R+2؛fn)J��7�~
��P��E!�3l*H�SlYJ%���)K�(D/���"�z�$I�I(K�(�+�M�XL�d%O�'DR$�ِK�]
���m��u�*�`���C$
-�Iu��u��t`�)��샄��EP�2��<�l�{5
2�Y�H]�IC>�jK[���x�n�{2�׏��쯰9n>�
�0���L�X��>t¯QQ�$�A-�i�F()�~�$>��`�9*.�r`�`U��9}+;�NVp�������J$�	%�^G+g�-�F0a��A&����'R	*�6G_�,Bb:EeY�1L(!�T�5籕��n����Ņ�J��@4�r!�����Y��C�U��y�,T��u��%�{�%�
�bS)��.q�V��5 ����#��/'��>�	m��?�iJ����6|���e�L�@�Ȣ�"���%�Y��~��� ��'*�+rJ�W�RD}Ę�����E�q�I��18&�ahCQJ#p)$���zǬJ�Oq�FW*2,�	��#.�3�
�F^9�x���:�gܻ0�1I���uWo�5��4vy��y���n
-�/���z����^A�D@�\�\G�D�>b]*��0g�kǥ��ʰςi2�y��s��'�Ǹ�0
�L��Ȧ�8��.J�BiD��d5΃�.�
LZE3*N�dCX�0a
0�v�,��#���u?�Hb/(%�)� �N��K5��[�go�3���|*	�M��F�2��o,��B6���鸷!�c��@�<p
�C�eRi�!#(���K ���;>�A�F�Q]R,�u)A]��ja*5U��
��f+6&�O
-�L^er�^��匵�|��׎�ԩ�h��2ߠ&Aac&��� 2�+E��u2���D�������ds�
n .�H
i�Rr�E8�4N"۲V&A `�Rf)�&@R��ڕVa�F��ҕ6
K=�v�q���l�������&�8�Ĉ���
�L%q
ֈ�
�1��X=z;���{x	�r�B]�\����6C.ɘ�з��D;�t��

���������Ÿ~�/�Yɴc&Q0�4�7�A��4
�mH��S�N��д�(��`�����xG,��JD�e��-��;�V{�#/��"�
��s�<z�A�.�U
JU�	���I�&��T�*�H%b:�&Lg(K�*^�1F���g�ɥ�@.�_����d\+�KiJ��$�8
[��R��vǓ%j��~��A]Z�0F�]E��ܖ�H� ���><��
\(��Y-�B��yF�
��̪��9Y�v������2�Kya�T7C[���$��`ߴ�ɘ����-�m�|G��
-��t1�vi�q��0zۜI
~}��bo��ڰ(ىZ,�iY�B$�HY�F ��ny*X�&��V.��8߽�D�
wSۮ��T$Yt:f�'�J�i��iʖ�iΥA�d3�<g���ܺ���4�c!M��
�$�,���L\���������PZ��'
vPv�r	�h�R"u	�1���.�Tgţ�~�����c���}�HI~Ђz�WS1�6T���(uH�P-�i�x�n�PI�қhN�R>��5
-�
��#�a�K������/6�<������IU�Q�JQ��@M��	�_w��S����u*a/�L祖%�P���lK"�F\����9�q�P&�5�����Ȟ�Štd��N��O%OT�.ai*�.AV��=Օ��p�0\:;Q��q�=0Y+Su����+�
-qd-M�%�2�f��36�ljm��>f��gR��F�U�7,�-J�_����>��Ʋ���T1���N1�Jy��fr�FX����R	�E
�¤CD$
�\O�TռPX&�69�>�&~��]�u�+�7�� MXg�L����dR�g�8��s&���XzX��:�O�u�dy�	���lU=�WN��:`z�jgI:?Lݟ���
����€�8a��ksM,J�bHV��/�ȿ�J������p�-�ą���(�RUd]^Ԫ:�]��� �o,�>�Q����b���@)�f�h�q51��G%�jBO�
c1�Xʒ��G^�<�
�.v ���恟�<���@�D(�r)WJ7�T%
�ޯJ�E-��u)��4멫	���\���N����u$�����d��TT?'�i��	�,�T]Ig�7+0��
�3��ϸD�J&yE)ݣ�
� �G�)Z��������}%�d#���xG!/��<߶�D��"bG:�M@�J�M)M��S
LY�`-=.��vll�>/s0]7c�?�
���K�x}�"i07�i���IOji�����<�ư���6�d���\�I]�Q���ź��6\�%��T�j�V���Z�
-gk�k��\�0P��A0!n!
X(�mU�;9�pƅ�JNsߠ9��#�J�%��\ V��p�s�
�O.�(� BQ�nP�J%�T�K4�Ț��	�>�����RI0�hYB�����d[���uG^ka
	���Wj��������(}�<
mV��&2Sմ.ui~���+�=+,�%~�1��
�
-&�V��LF_N`3��~ƿ�(K��ɖ$��iIF_]�5	�&�o�I�n�Ɋ�E�E�il{����aJN�X�4��F��aR]b#�Ս�߈�	)P�&9B �a���tx~~zbQ*blLF0�0�U.t����z�/�mnČ;or���.��\&Z�Ix]aRl�D<�Ɲ��݂5��s�ڵ* ��X��"v��a�z��s狧������Y���ui�g3xä3�TY&���i��@��zS����
��.օ�Op�,:(�NZ
2F0�_�#X���9�x��0
6r ]V0ř���1��gg���L�[��|��yx&}�:�,��&�L:K�t]�
Ԛ��Ar�<:��ņ�I,J�!
��c��'�����$��U��B�%�{9u�y/k;�/uʥfPi��76�����>gf��|�ݨ����
�����
Ku�H���Z��V𷲁��I47�>jL�mH(����(�¢d�dr���㎣��v���-==�y�0��FԵ$وvi#;+�6BW�����"r2�ÉL:���ӷo�cƃ�6� S�$��%dx\h?��/�m�3�nr������e��8ä1�njQu|k|/���s,}��:[�2�uq�ɭ\�r���O����q��oU���h.2�W���N�d�@����4�q.,7�@��|f9��.���R->LىSy*�A8	���[�$�F��
�
�DN�X&��giO��3aL��U���J�i���kY)��	���2����@�T }���ca ��y$5b@��R�t<D�c�?R��U����U��J���SYQW�{��ބKjc��
L}́��c��)�<8�D����ϣ�
�\�u]�>�ƚ��ٞ$�V�It��4�l�(�J��y�
I�t,���F��lD*��!Q&�ڕ�d�L:<?�}�n�$�c|�i2hLuC�J��
��
?�)��]�u���Ό��
+��Mg�D?e���ָ��ﳇE,Y��N�ҡ�L��.��Έ�l{�T;a����v��\����'1N%C&u
�:�2�i���4�q.���QI�]X� ʁb�Y0NЕ�l��uI#��j�}��4x���Dn��-5�I.M��A�gi�҃k�>�LYz�e��3
MH��[��
I��7�
#rc��8�:/����deGDŽPB2��J�F�*1�̫Ҩ���J�Ҡy�3r�(�D>S������g[�T]V^��D`��n;�^�������O�(�l�3�6֤R�M��$q7D�����%�)�-K"�U�s�{R,��t�W�Ftf#�[6��%R�Dے�0)�N�	L��7�\�S�DPh
0�VӚ��L�Te�A�c�7�:��I̸�y���cXp/�3��8c�$�u�C�ޖ
ָ���u���/�:��t� ��7�q)!��}2}�tV��r]
��d�I�i�}'
|��e�͔%�pC��

Ma� Ȯ�A1]�u%�&A����eB}�B�+ˮFK��
-T&�"c1H")K���p
DkUz
�����0e���QLm�HO��,K4�JjΣ��L�>���<�
-M&��mJ��(
a~u��t�E.YU���+�=p����x]��hKD�
�,�Li����ilMj�'��}u�2��d�v�$�$�OFk˸U��Ȥ>c�+�4����[���0w��6b�K�Br�d#
-وnu#��m�Z� %�Iv�Jd
o(J�I��=�<'� ����bm;å1h�^ΰV9��%�\�ɵ��ӄg���Ƃ;cR
&M��ZQ�m(-b��J��b]Q�5��ι�1��t
�=�;�^Ռ���j����H:/1�6� 
��4X����Ņ�).�Xڛ�s�H�\���L
�`���Q��4��$��R�Rj���)EJ�
-&�yb��
��	}�M(B[�0"	��h� �9I��Mo�?&�*JKr��6PbuDh�ٹ��ת�h��$q�p��r�(���+U��m!b��/��(/�/#0U���mc�<����Z��eKR�$��$�8M�g]��o�I�(���6��ei��������Rk������)tG�aǁ������7`*k��^$1�rX�
TU旉�v$�<�iM#�Ҕ�܈K{q� �cz֕ "%8a�k���
-&%�u������C//�&���R��K����\�_ƌ�[�
����p}�����VΨL�8K�8��Q\_X�gy㞀�.�a]�X>E9a�U�%+�&�9Lu����
�,{E4��sU�_Ǹ9
AO�ji�8��/�R�u�¢`�
�
<K9���df.�=��d��<�	B�g���N�#��zk������Pz�f f�+<
>y{�xW*��
���sN�
UH����<��<�"��y�M&5
-闣AI��/�@���qҭ�ꊲ}sIl
��&&z	*�A��	3�9<�����?���+K�%�bqyu���5	#k��
�ҐI*����_�;+��[�a��Zָ�
�-��k
-ٹ	m@�H����F��׊�DH��$y����e9�D�H���2�
\�2<
-�Z%msމW���4ȿ�[mO�q^���5�{&��$�ۇ�Fk�?�a_?0���H?*�R�� i������ۤ�w+�}`�;��~�a ��ZKq�P���w@)؃E�;�R��A���(�%�0��F2j�խO�����P��3�o�Cnm�]�m�$xp�f�&�҃k�ҏ�
��<d �h�?
KM^��Bm��>DFd�<I�6�G_�
PH7!��:f��N���K�]".��K�*�m�"��BU�i�DNf���e�R}���¼����Z��F�/��@2q��(jӫ"i{�M#kˑ�hxLʖL�
%;�Ep��?K
T�":p�N�/b���y�=�H"�AO�W��Ite�|�JcR��o���b�E�R�B,�$.!�
��G�ض��+#�\�j�	ׇ�E���D�$猜�k�ubR1�~�L*�z�φ����RV �@>i��E�ĺ!.qP�
3R���f��.�Ks_�f'���)@����d�	`�
-U�4T'�P/N.�9��5,4�Q9,�Ut���2	.���3� 8�"�J,8�n������I�
�d�M�؄8w�%�tF��֚��j�oHg�xp]�mr2Q1 ��B)!(%������������mݗTY#l��%�i���5&�W�K�eGS���Tj�ǿ|��3jileЖ#��+F鋝m
���
�

-+�I�1�a�&�B�7`)Ӡ"�
�St�.�f�D��E I">�aR�2��M����)I��S]� ��
-S��x��2�;0�nj��&7���YR��
\�:uFM�
&uĤ�3��u��O��7�'�K$�SJ��\�rJ!��-)�7��L.	\�N$������9�^��Nj��ʥ���.��W�h
?K����A��s
-�UG�J%iRd'I����ؐ/>����6ȭ$��UG`ʨ��Q
�)��{����]���V*��x:�Ä����8�p�\*ʮ�i,6�F��8�A�`�y�$�c�∢��P
-��ᖪ��Ž ﭸD6V�
���9�
L'x���e8��?�
~��X!�vv
�L�-��hi��T\T��,� I�/v6�>�6UX�$��Rd�
2
n�
ܸ-K���"zwuxW"��H�Ύ-KL�F��DBLJk )����H?s�����
��r#�3�h������s蕋Mn���z}o�sl����#I�q��&lqʤ������/,J+���X�'9\*=�0�f�@�aS;��`:���)Nu�������j
H1���������k��nj,����J_	�5�ԅ�
�Ltd�̥
`��5
yW;V0c�Z�޼~��O�F}�
�b����ѓ�

�!v����&l����d&d�vXB}�3p���
-$!�H]E;�6����d\s4�8����PC�3���~�JZ
=���i����Kq_���
��0!`
�И .�2�}P����k�)�4��9{��g�Λ銄%��%�qͽ��Y}͐Da��$
-}�1�LJ�I��n.Jn�I�
�
�"����E��%"e�%"A'�����ضdR ��9
݀�x�LR�t�4�
��t�歘1�����Y�/H�6
-��5��ѧubRaL���}�$� J�R�ui
�Cꉸ4Nx؜�
��z�
�si��[n�jN:��b\8xh�FhT2!�0y
|�.�Ot�p�A�r ,At
��*�A*M� ����)Y�̓�����cnXj��A���d���T�qЄ��R�
N+�8
#w0"
���1�<�H�$0�aj�
J�D�t�N�u�q��}I_Y�^��藡���"��LB&��t���pb���T1o�W��#�$�Y�U$�H��KI"G�
I06Be�
i���®1�)��=���"�v�.b�/'�Q�E�D�&(�<'�-3��D��x0OO�[h^�4$�Xg��4#fh�_�
�B'�&[�����
A��-�4��m9c>
-���'-��;o�K��~�|*�ǫ��d!��C?M�
O�-���x�o�x�6�՜ת������T�@+5�I�P����C)��?�h�o��R�e]� Xt";�
��q��.>��"GGʐd����-X��
�>%G�R�P���/���@̄",q}�P�؅ �{�ᜫ�2�x
l?4��y�Q�O
Ҹ7�û��@6du
���ac*-�1��Lbe�X]#]��&�W�}֛���=�
�LW
���Hlj"������dHjs��$q[�`ҝj�B���ef
n��^��H8�eE|E�
-��"��>�H���ȜD&��'$�/� O��L
&���
��Xg��B|���*��fo���g���������nwZp�

[LZ���<���^=�G�sb.-R�4k�X<T��ځ��� ɸ�]��L�����F
���#"��#��
�8ԤF$3O�g�����
8*E.,Y�Eg\� &�])9^�1�,'<��wJ�����RErŝcF1�ה�<���Jn w~ �rZ]�R��p�@J��<&�
��&R��$1 ������W�wEi?�`.[�ZriTaE��$�AZ�c��-q���gy3��L_,0UX��vtvO���d�2 ���D\��f|�#��Ԥ�L���6�����kK*u���6|�
�h��"��"@���Rp*>	a#���=���������4�E�o��<�*]��5ŻU^��j{�g۞c�<�t*��"�Rg�xs�U�d����-�
n�&����KQ�as
-@=
9д(���q�|x�P
�8�R�d�q%�@�%�-����J~�
؅OܖDt�K���t��+}S�9����v@@�zS&��6�ҁF���e�X
D�
wx���N+�0��}��6m�⽁���@r��
(i�4�{I.w����/�ܶ� �乏O�7a��
-1E��(�g�N�NOsHIN,g^
+t
�t�W�
��ſD�W�K�,�1�/L��!�z٘ ʰ����f�#��`�ab�ɞ�
׸FG���]W�Q��KR��6"	*�mY��`m�In�
�d��"q�-* �$�M'␝��=�X��I�$@Rx�H�2�&��pI�t��{��`Қqv5�4���I��m�&$�Wڄ$c�ebפ]����/����Z��s��
5l��L❁�t��:��u75�@�15�k.�U�g��@N~YS/�
��Z4�O�+r
�V���T� �;@ԕC����0��ߐI��/%Bi�P���K��n
B��p�cP��X��FAP�=�;A�_0%*H��	�
�� �&������B.m���L�u at W��A�4P�&4���ah1�������H(b[�0�$�Hm$����B�[!����Iҷ�LZ��SVA��8�7��
rH
��-BL
-k 韏��@�-���B�h�=�����3�Қq��&G���Ģ��[�g�!�d
��L`2r���P��p ���Ժ
E�ri$.�C	 ��v
--�S��l[����}�u��YݕH�$���qM�2�e��P���s
-#�.K�r�-
�]H�н�&Z��C�;�� Kl~czL'�'�O�*�	�~K
�uE��PZ����R�l��i��KQ�
̥]�9D��*��AN�d��
�A�ru}��k2�+|#�R��RR�ha"o1��\�2Y2���Mh�00��]&N�
���Y~hd
��<��H�$
M}�HR�d�hc&�$n7�l&�@=�Ri
�4e2������'2	�T�
�+���1�]������Lp��2O�f��g��̝3�_��>�"��4�W�;i���Ii��L:M��h��
-�.9.��l
Z |�7�;T��;���Z�{��>��q�5�D��z��5Nˀc�7(��7)�2�
�������L`<��}��S�~"8��.<b"�
�3����
^=�N��v�-!�RN�Z� )�H���
-b��i]BA@ؒʄI�9Ҧ�[
3�d}�ta.�����D`���{ S������Kod$*s�A�f����!:�M�~bk��#��j3��5	�M
�</|��"��
BE%���ND���4u~"���m&m6�$�{���DS��
�{���H�1\&��\͠��7��
}g�E_'���t�H��ص�a�I
u�K��}&\�% �>K
��	�d �u�[�s]v�9���Ÿ�Lj���}��r�RaM'1̮Ƀ��w�x
������r+l�m@$E�2	�tSZ=dSz�b:ٖp}�)$`RA�F���@A��
�0�@�BiJ��W��ٗ����V��]L�21�j�&γ�gL��k��:(x�tx9��޵���RG�Yl-�-K�cI�&q��ä��C
-ܖbQ���D4���2;�R
�I��|�L�R�ƈY鮓ns�fts7�-��k��~��'w�Wgn.�ua�:2);�_��ߴĥ�/5��6�NW�n�:=�i"�{z�� �Yeg�[�N��.����̮Q&m�ۓ�.�3����M�� &
�K���nW�M��i�M��\'>�g
<�4u
~�Z�A��n
<Y
�*_����Òp��
-��
�	�U� 
-r�����
��H�LbHo�՜ yIf}�ris�Ѕ���IV��dɄ�b��(��[��ZvU2U�R[1����Z��Z4��I�&m%�P��1i��M�*���n"*����D�GG~*LD
��'Z�gi�'TI!Ӵh4�g�m&5#|
�d���Bs�_��iZ'��6��z�I�ƼV+)&Y.90Y�$։h�zS��>�
K\;u
���䄟cR!�y��V�϶
����u#�|����W�9�}F*a�nۉߨ%̤�b����z� +�>AJn�`w&u��)KJ��H�A�ő,:O�YI���\�`��~�9&A��52��_`�'��
c
��^3�>������5�7tY
3-)��8֊$��ܬI�O1�+��嵟��
'b/,RZ&�*|�
^&�q�\��j��������'�Q�&�.������ή�7��c����O��G3i�>�ȥu�۶���	������u���g\��	?�q0W5X&iq���斃�t�%�� 9�./8����S.y
fG<�	D	I�p�
~��&��XZK|Ӿ�1D9D��K��
��!���
z��&�l�u���.���\!��]�3a���jdS40�6����
O���Z큦�A����(��e�-1�������2kR���t�~)�V�͟���H�D�4�ڰ��H ���
�d��׾h,tx[3�
�Z3�X�MOo�15�]�Q�ۙ`\Hƿ�I����GJ�[Ն`��rO��]<���.�7}�Ը��
o֤"Zf�oQ~�tkM+t
؎|7�U��<���p�ٟ���6��"�
w��_
�A�i
@��� A~_�U��X�7�$�
S2k��Ykۯ)__Ld..��.�����&r8=ֺ���+u'v���¦�uB8!�0�,��]�%���ۜl<FҟgRF=�����\z1y�}�TE5�k�	|�x��+���W��gɄh«�{s�fU�ݕ�)*ȣ�n��`d"�,��dtL�.(eݳ�%��3R
�j�kk�>���n�Y�Z�͑t�Q�ָf/5N��I\�enb��w�?G,IT�ۡ�(�1�P�9���-�f#��� �
�����H=
�-�D���4�
�����9=����Mi�>�kg%9�����ڇ��0å)�*V?�0�9<�&;�0f5J~>
�
�YOF�@c:
�Z!�$��\�$qնH�kRʤ��m��-*��Dx���q�Dl�DldM*����4*3
���J����g`Z�Mn���3�w�X<�K@�D��n�4���2��S�H��P�L;�ΙȤr�֔XgF��3�dQ��1��k�H$#��Ը-����2�Ϥi
-�b]Ƕ#4���덇ǟE
Q���p�$�<T���H�)D1T�(�SA>�G[P�� 򐞌�=o�K����lU�7Y��Ll/���?Dщ<F����Hv ~_�8:]'�"�0Ѩ�Q��f�%DbwQ�������3iIW�)#\�t"6h"?�)�G|�s�R4��TƚQejFo��9/���z�j��Wc.� #���u>�&�&�
�iuE�[@�����&ښTo���Q��D�F3�K��;�ָ��V�����t�:
�B4m����vWO|� 
1��.
��'-d��p)�\RR3�X��ף*�)�����W�/6]��`0�����Ddb{���`DZe8�qU:j��'�?�,���X�б
����H�$�ђ$��`S&��4�r�y�(�d"���~7�HפUr0�o�tX��c��܏IeO�{��������y��m��-��&=J��9�����G2��:���
-�=��;
龟��8�*@�
��
��2���I�gÁK��D&H�Y�Oq�g�j�lHI�'}#���$\�`=D���
-z��
�?@�Lz�;%o�e��IFQF�Ì����<�@#8��ǂ�PZ���$��
-ӌiM
rL2�B
SM���k͖4�&����9٘K��D\
��"��O�ڮI̢�g���6*M������j\��γV�,��8�0 ^rz
~�T%U�J�lK�	�����{��-�bz�k���K����������2��)$
�aW�/��ebrnU������~Q�t�
-ё%�����w�	���8{�V�I�si����L<K�E�)�޾
-�4�ܚJI�#ڋp
� r~��������>+�
�EM�^����(�k��ˮ�v��8s�a��
Ff�Y�>
kT���6��ʕ���
-�eF�4;� �/�H���te*i~'��)���?��.^L<�^L~T�,i�$ɯ�D��%�ù�	.�i%%'�z:I=�Hx;����ՔDG7<�����q߿	5����o3�XV���C�tA1�$�~�·Yذ�`�C{��!���\�"����::Q��< �,؞-�b[�`��af�lRM�M�0�ؕ1ٛ���Nb����(3P]��62u�
}��d�b�$*	���\�t�ĉ��f�w"��A�wT*��td;���.M�f�,_�5C$�Q��=�O���D.�b�����N�O�:z�����L��k�N�6�!��Sl^��_��gG�\��.��q��$�q9�p�I| o��.\�k���
y�7ܥJ)��p�`
uޏ���cC
� ���9���;�ůL���.M��"S�b�H������
���yׁF�r3
�=����zVIY�F�$��]4�G���D:�t�rTe�|T�4��t�䆥k'$I����}�m�
F����ɘ?ʤ��� eBv(:'DG7\����H��
-	���D��� ��"�m1Y�,x�
��T፮�,n���^�ݐ~���H���LE���6��&�MXNW�
c�n�{�r�����bu�<Xa��F�ti���5i�9Jx�{���ى��>_��$��5[3^�$}�A>=��
�{a��X'��*��V�G���p{
:��
-5��㻿#=u�Ư���g�8u��
#�w�Ð����X�8o�ݲΤ
�~���`��Gΐi�h�N�n/�	��	��|��_�-��(s�y}����F��
-Wn �����Ђ�7��ˬ���N�s
��VRp"?5$��wn�g�0�
~hV�I�(!<߉��a�"-��i�UV����k����ľ�6H��
��5�0>�ƩϷ&�u;���D��9F85�7�55��%C���֣���߇b�p�f2x�jB�
a1�?��~�yhro�D�<X�,RH�-�
�r?���&�"��bB���������q�4qT�f�f�3	o�Zzq|�����o��ܩ�UW��H���	t�K��v�;����^��u>O
玱7M���7�Z�CvԐC+C?���
t���W&l&RM8Ϯ��,b�1WP���K��
V��\�L㍔�����x�Aw��J�bw92*1Me͠Q�aI�Q~��.q|��S�H�wœ1V��}��?n��;F'Ŏ�{��]�5���@
o����
-�Eq[Ѫ4��cS?����[�&c��k�o&_M
0 � f��Rf83�
�[����M2���`u�}
-Io$�WK��Omy"R��٥��v�x�7[�[
�L�|��A|'I��7�M�I����!n3v���rQ��+|�ƭ��,v�;VN�>�D�k2�����GiH��jX�F�O2veB�D5y��ng谐Y�4]�
-�j��n�GJ+� �k���
!��BZ"�8	�J}V�$y���j|�mbg���*��W�l��>a� :*;������Ư����
1#�j��UƯ��Mn
��5��q؏j���i&�
���0ǘ�
0
�1��r/���6B��,��EI���|��>c;(q$R? �D1uQ3]H��$c}��\|�\d����vJ{����f��G��m���k�^@s3f*(y�)w�y\����O�ʆH?�����#�7Dp��U�b��9� 3ԧ�+���	��:�}�
-i��Z^��~��DLj$�O��I��Q� �$���d|$=��ns�m���:;
���)tr�?�)6�5�qՔ9�;������������
�����ܯyd���.�+���A�8��͉�z�QTY�,W~��B�p	��շ+{ � R�GC�-��Z3�d͸�I�(1�T|GYH!�p-�<_���+cv䶶Ս@G��
�.ָ2�W�� ���t�����"���hH��
I|�C�.^M�@0�1�1�RXF�+
֕������{t5;>A�;p&
-�G{�\��5�D)g���P&>�
����6U��T3u��)�]b3���<�KXh��M�Z�
�
�!�eJ5�@s���B�Q҄�K.�s��Qg�.���֕��k��ykF�g�Yɲd��)�ı4���UW"Ɏ��!��Žb��}��w>KB{-��RwoH�w�fr|���rB�(g9�|�{�G����u��[���?/1*�5�(I%�^n�`Ldw��+O��>��Y�G�s
�=��-	Meph��;�{7$�8]�� 0���
cYDZ$��=�� #2�J��R��4�ו�]�$I�����2ѹ�:����w��R)=(v'�V
�C�W�aj
���4�S��FK?��܏��YUv����#�������
Y�LK7�hv�S4里Yf�Q���+
�mL�z�]
�w��"j�5���O=O5-��cudž$�.�����H^ޕ�~�1
��hei�C43�r��Y"�t�#�JoU�D%Olu��Ql�B�Җ�R�Gj�稥;�#�#^��b���蛎�
Z�m�X#B/U�����<I=>���F��cVF����o1~��+�� ��E�
���@>�|M��6���	s(ɑ�i�e�]f�cGE�0���,mҦM��k�Mt�	�J��O?97�6��U� ����[ړv*Gg9S�YڝM�f)�ו/�M1c*o���
��*
��$��Joi/ګ:#}���o�
ʟr��bδ�
r��5]u����&�Nm���Q���vl�TS�
�!+Ѯ��6��0�6�-��Wѡ�J�n�}��V_����%#>uc��F'ɳ
��+ш3��=��_m��_�4T���}��»�n��f��_����і�m�����M�[X��-����?��� z��
endstream
endobj
289 0 obj
[/Separation/Black 281 0 R<</C0[0.0 0.0 0.0 0.0]/C1[0.0 0.0 0.0 1.0]/Domain[0 1]/FunctionType 2/N 1.0/Range[0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0]>>]
endobj
294 0 obj
<</BitsPerComponent 8/ColorSpace/DeviceGray/DecodeParms<</BitsPerComponent 4/Colors 1/Columns 1686>>/Filter/FlateDecode/Height 854/Intent/RelativeColorimetric/Length 215908/Name/X/Subtype/Image/Type/XObject/Width 1686>>stream
-H��gWTIF�%v�DI"B�Y	�P�`�
���?��9Uu�n�n$\���v�֬�f������͕d��L.	"�%I6'�>D;��9E�A0�k��/� �!�p��m[ٟ��xI	A�"�
��!�$�%�"����(o�:Დ�Hb� �%Y|
�R~��'�	��xEB�S�!�pjb��-��<�i_�vIA0�%�

)C��%{�N&X^D�i]�F��D���
)�I��,
]�85!�ډt�%#�!��jHy Lb�P�DQ$�̵�r��N�.!�M����7�o1D(b�6ɵ�8Sy:����F�"��v�q�
-�"-!�"��S�z�����=ϻ,]J�	�M�!e����I
	*m�U�P�6�W$�5�R��I��I�.��U�,
�:�!�܄b$�8G8�'�֧:�?�o\��xZ�l]J�3	�K�&�$�
9�"UAEt��0E.��?� ��(�l��oF6�Z�'��ϧ��%ɒp)��m�!�M���9�!U�Lb�P"D���&I��yVg��
���g��ΎA�NH��l
7)�32��+S\�����;��p�$囲�J���sἵz�v!�D:�2%�$�$ϐHEr��1�֌7;�����n�'
��d��5x4�ľ�T�w^�t�D:��Ry`�yI� ջ�����&=ݸK�\C�"#6J�p�oJ6�X��9O�s��R��3a��H'$�/J~C��ͦc�*�4�gH�"�(yM��©"�nJ5R�����O�W�'-�?ݦT���Z�����Pj�G�k�I)6�Oщ�8�
��2�L
���
�Mb�od���������6���iRڹ]"�*$KB⸆x�T�"n��$kH�rS�7]&S�K�%���a�j��}� �j���h�td�<� [...]
MR�
IR��s�:tE"
���$��B�R*3Q��M"��7e��:�.Ýx�7�JAV��;&��t/�1(�	���K���g5I�6U$e�	��)b
i3��p�ؐ��!WC��"B�R�q�$N�F��kJ�npWѓ
�����%d�`
��"�0�5H]�1Β('\4W�qf7�V�6)hH~��uQ�҆�q�(L|0�.�s).KI5A�s�;�%m
��&)ߠ�Ƣ����L_
�C�V��c�X;���K��z
z����GJ��(Ur��lK�":IT�N��ʐ���
Q��!�mz��.9�
7��*g��3P��fդ6���D��f�L�>�W<�G���c�M��#� 
�Ʉ�t	��d˒H'\�Q��Vcf�1�� A.�ߐ,�8��׆�"dʄ�)`�K�%���b��Q�JQrf�g\[]I��H4�400���c��
v�ܣ6�2uz�56���\�eI�� f��(��
�KA���C��!}�4�|�x�͟�2��QD(hQ*E�kR�IR/	��f0�&Fr����=yH�y�α.$]d���pB���`�L��!�z4��ߐ��!���]nqY��&<q����q�$��~d#�FG��1ø����������|d��&��A+����9�tI8�T�R
��x�Q��jcC�z��!�!Cbq
!E���L��x�Q��\
-
�rnBQ�?��(����M�I�nÔ#�l||bbb��RLG��wxOB>j��� [����%_��S0�'�
-��FQ�����w�6m)��9��kȤ2d
y�6�!M7u/�\�!
�P�ʔ"R%��	U�w`Uu�7�8�$�u�
M�g��33O�S0�
z�Ogff !܃zHk��C�x
*�,U�,I��
ƩRx�546�ن;	M�jӣ
��FڐmHE��LQ�<Cx�q�:;�\r�
nR%�p�
�U556Jm�l
�@Ǿ���mP
������/�g��H��n~~n�|�m"�H;�����%��f隒�=��:�����"�(�9Jf�Q�
"I�H�S4�(D'7d^E�!(O7����Ҍ,��YC��ƭ�فוr*Jzb�N�3��419=�=�_ Ŗ����W���y�
=ZY^^ZZ��T�٧�
��������RT��SP����\J��RgWw�=�$�6$��E�#Rd�q
�Pd�Q$	�id����s��MgI
�
o�*�
h��H���&�!I3Ofga�"�F������oll�0����;�l������Bro��;h71��%�,��RY�����I=��qO%g��(ݼ���y���g�УZmS�\$V)"C���dSd�!CVؐ*O7�-7�Kw:;t���&��@P9g�9J4{3�0n#����g�V���4�����������y
	��7�[[��d��:�G���>��ut/
�t=wy
�,�)X��I=��	�J�"6J
�wh�=�ly�3iz�)��e��:RC6�3�B��!k�ޖ��h��`�r�r�C��8KM*Kl�/Kb�P����w�QN]J<��q�$���`��M��vvvww�����7��Ox�����C
-no�<J��������K�CZ:�RsSC:Ug�$U.�`���V�J��ij
M�j[x��̛�A�vH�|
�gCHǐU
-��4
y<<48p�����d	í�"U
-
���T"�[(J���2ָ�yn}�t�
������÷o߾�~�?��������ۅy�[�aZZ\�.�
f�7u��9�b0U�N���UUյu�tCS3��ޅ(e��69EM•�|m��5�����3$�"�!֐M2duyu�Υ�������pC���w*]�S��
D���
��}��f 
J�I+�$�F�

�4���O���>3�F�?


��GH��}�aZ��ia���(I��t�����!U_3��zB�4Dﶺ�G�v;]J���A�mS3ܤյu$	E�d;8D�H��
�
4iz�a�.�r�gtx��t��C
��n�!�!Ba�8g�����Q��C�
��P"�I$���>���T�d_����~��c��Q�H?������(x�޿;<�v��7_n�^z6?��!K��,55��s4�J���m����T����UE���461��FM�j{�zw��M��ʐ/Ɛ,�x�
[C��v�馺�sib����Cd�ni;�*H��P�h�ʨJzB��Fށ�R���Ԍ2����kJһ��
9�i�}����ϟ�~�������_�~����
���}>�����aҽ���Ę���h
-�45���sT�2��pA8�x��Ԩ��z�����44�xlr��ܳ�n��ޛ÷�?P�H4�3$�"�Y6�1���gS��F�
-�K�b�7��HA�I�%�)�B $�.�����r�޹��$�(���e&3����|̚���ښ��r"^B�%'>��'hi/܈n{V:ƭ��io�9�@�����'t`XD�e`*#�9�������G�`&��dr�B�E�}�ыB���e2����xM"`Wͨ�����$蠥���B._<���#��S�c�[�ߑ�>!֩t���K���m��l)�'$��ef���Ie�U�P���D6��JBE�L ���$j�g�V/�dg��$&@K7��Í�7!�J���
�d7���Bãb���Rz������� \������h��]�J�J�V�5M;��	���T*% T�e����	���TT��4;3-%QXK��a���c,q+�;����C��S�]F������Rґm���ITm���Vj6���=BAĎ�n"D��Afj5���K(7̥��������l�����@��
�?�>�\rԁ@.�,u`xd����2�1��K+��&$��S
-ܔ*50������tz���݀�	�����z��FMn"3��uՕ���\�N���ب��`��~HAO��������TB�yQ���.�FD�^�NK))R�-(*)����$q;	�F�h�6BAD�!�6B0����
^B���de�&�Z�an>�/7~Ny6���$L%߀�A@
��I)C	�5b&8�� �N�
���a���^���
�������Ѩ����5��k�Z�s3�JLdxȟ�9X�C��_<�/����T�

B���ۮ^�y'�abJ�TXTZQ]� j�j�)`$M#��J��_�/�Vv+�DH
+����<��(�b��C/�pcc��7+qD�9�9Z����s4��b�
-
h�Ry'8⍄4�F�F�i�l
�?���l6��LF 8d
��z�5S�D�
1H�1-%?z@)x�� c�g�9Wn%~Gu�[�u�?�����TB�]��y�>����$���V����FզT�h{u �0	�����@H��OۣVvɥ
��R}Me�UK�	�p
����i�
-7n%~N|�V:��bE�
S�?���K!a�1@������
�2���S(U���fk�lbbrjjzzz��
�>�ujjjrbb|
�G�]���Q��.�BGZJK~)
r��u,y��������8+�Tr�n�@�����{���{
%��R*.��mhjK:�]*��W�?h@��Fa"!� 2�a��!� Dߧը�%I��ڪ��RzJ�C
-�ب���t���]K6B8"����BRr;) ��t��
g�Qfd	R��P�H���$���6ئ���ܜ�2?����	��-���,zP��8l uj�B�A�AKE�ٙ�I	���ֱt�۞���J����t�Y���
�v���u�ҭ��	�i�Or
�˪j��m�.�Fۧ�hC�!3!�"�Gȋ�i!CH7򒬳������
kI�����p6��1�l�����s�s���
� �\�����
��=+��aR"���a����$�4k�d�KK���+++����.---��y
ț��7�F��}=�n9A�P[YZT�4+#Ֆ�K�Xs
��J.�J���
���q���T��;�&�fd�AJ
ͭ��n������<>15
Y��Y>���?1�c/u+�qsc-i)�IfZ���nֱ�Gc�9���­�ω�!w��J@Λ�;��\Bu`aq9��@"�0
�&�p[\"�VW_���y��;�>�y����zu���2�[�̽������Z�R-a-U�>��y�.� �RX01�/0��)77�J�8r����Y�J�����v�v���{
�dd=�/*��mlK�
-eO�
NB�AIs����p�@ȡ���,23516jʭK&�`-�S��$>���R���=B(�!
~�y{V:q����5	���"��TJ$�
-�˪�D-m
�@"�8:>5%��� H{����������������������o@ޫ�%`7Kԙ�
�}=J�`kS}uEIanvf*R��Rd�>s�6�Np+�;����	k��{zy����w�m��O�V�`)I�]�
]��9����!�F6B6%d��vm�Y\��t
1
�j��ReY
�K���4����x�v �#��9�7+1��
b�JɄ\Q:�E�)����
#&�Y ��
-Fz�@ڇ�;;;�����]�no��~
�AM�IL�s3S�f�� ZP!m.��.�LO����dǜ������ĺ�/ ��E�mqB�e?-(���oj�ȺTZ����LNB�!� �
 b%d�PBv![D����K�҄�4<�ת�e���
-�'��{c)��� n�pD�9��[Ɇ
B�/ !
}��{�r
K��
$�~���
�����`i�>}����ׯ_�}��_�×o_�����O�>�[�o�V�%�,b�8<���:�[�J���d���Ę�t��J^
�9n%~GrVra��{x����-�6�r�ʪ�D�ۥ$��ad�����e�$D���m b%�
#� D!_!���DȻ�ׯ��f&�G�
�^u������-�Fc�Ƶب�F��o"䔛�@G��s�`��Ǐۅ��_`��K!a�1W��C+r�u"t� %�����"��v}�����O��0���Ǐ�?������/�~�������+��3mn�{���^L��HKJy��R�� 7+#c�f
1wY`���/ϯ��5���:�PC�^��&�WAAD�"����T��4*
-�4�I]@@��{�����I�8��O�]�u~����ޏ�����Q9r��~Z�(�������
EAIY��`�n��stt[|b��7���k�q���jC��>2�	�L��^B:����G�k�+ʊ
ne�p���p
�c�����H_��A��()�#B �BHD�
ΉXIrO2u�
M� 9����
-
�[X
R�{���%vROo� ��B��9��q.�;����q���X,��CԽ&��-�eg���\8}*,��������'sTsbb���
�D�$&�V�WPR��kh�n�����
)i�2s�j?{wRGg7(iph��"���-!�&����ҋg�j�U���ʼ��-&*<������������������U`%1�J���I�Jǎ
 ��B�  ��)D��9ť��
>z���9	�
}7�j��)�������4�›���9l0��� �R;�i���ܬWR��X���vwq��<!`� EVF��1d�a�������!G!b�`%Y�����CSw������?�d�켢���4�|���	gRAO@�>�`BxB�!�}�=�ܚ�45��T���Rr:�|<\
m��M
���
5UeE*"DJH�!$"��������qpq���8}!���w�����H�U+��?4�z��p��G�3|���������� [...]
5��(ܮ_IM���
-
��ts���05��a2�4d% ���C�]+
?��J�j���v��
>������
-KrMp)���
-DNG�� ��������ߋ^�������<��v
�����\Ku�p
-޸
-�0��u�30�JP^h�㤕�
��Z��J�TEU�S������$t[8t[�%���e����Rjim���
�j�����,bB�A��	����KPn��-��������������3����.6�'�
t�4�i*�
-��J!���
���J(�
M
}CA@��/(<*�r %��C#�I�)�
ᶴ�~eeeuuumm���emu�}�
p�M��X��=���
=�E)�RZJ0B0gA0�KP^NVZR����گV����+)���Z��m��.�>!���RP��Tܫ{�Rk{gO�����;95�#		Y���&d��K���`?�%
n%Eyp,]�����hkefb�����������$�D�P崙 ��d䐕htSG�B����8� �\K��ì1��$4 (	�oe@[_�������(:x���X_G�"� �3��q���`��^<m��_Yz;/�ƕ���\X�/b�3'(A
-bN\L��������JRҲy%U�������������o`XdL\b�����eU5
MO_�FR��65�%!#!B0"��""B�""dj��~72����[��ₜ��KI��F��z�9�Y���ik2�T�	B$BH+�;���@N`%i�`%
������
 �z*Z�gЁ]�����8p��
���ӧ�����nk�ӧ��;����I�nx�����H��;9�s�A~^���
Q�{���#�#�ON`�#�XIYUM���gdjnm����
~:6>9�Z�’�{��O������6�
T\H!�� �#&dmeŸ�Mp�XC}=�D��c)����)	��D��{�t��175��a2���JһV:BZ��a�orB+��A���5�t
�ͭl��<}�£ΞO��N W���
b��1qव�H[����wvv�|��Ut��eg�z���u������i
��Ro7J����ʲ��,s������֘9\�
-T��
XI���������J2���2M����7:aa����
q�܅�Wnd��.��}��YKۛnBJSӳ��$�$!!ۘ�}��l
�@���k7�j�ʊ�3��&�E�
-
�qwq��8a���ԠӔ!`%!!GH+�;��c%�]+��kj���[�9���
�8
��r�����e�5��˶���!����'m�������۷?𾋎x��
����!��/-���&�Zx
)���ú�������/�EG��dNP�T�
XI����/V� +�Q���4:CK���������'042�|b��̜�;�Tz񺽫���
�D(	�KD��������!s|�һ�A
np,�//)���~))�ldX�������������:MY	BZ��!�^+I��(�
-ʪj
������=��ȩ3q�������TB�
����4;��CN�@I|����x�
�����̴�rp}��2��=:��݁���%�����1Q��9�Ƹ���I+�;��g%y��
-����k`bfe����u6>9���ܢR�m�-m�=ã�	
n�
�J"�KD�����Kkp.!-q����Ame��ܬ뗓bO��y�9�Y���ii��T�!Ғ����
�a+
�c%*X��`j��Z�8@�FFC�����
�������V�SZeEfd���d�V����M�[���I���J�TB�_��s����~��Ư�ϳ��r������u�^���!�1�UzX�:>%�"ndt
+�����4��ǩ)`oc����-55�@
-�e�%�E�
��rw��45$�[*���2�FV�FX�o����壬D�y�6d����X�qp��
�JȜVPR��52���t��'(4�JE%��k��::�{�^
�����OD��I��QDH_o�RC���Ң�������`ߛ
���f�zZ�ʊr2������
�,�� B��V"��Doݍ�JL��J�`%�Ü<���KA����!x72.)-+����kAR�
���	%!�ffffgg?2.�33=0������y{K�`Y1<K�	QaA���;�[��ib�$�9(A6�{I�h+�[��f%&d�=�XX�8�y��$O�)*�i��[ۻx��
�NLɄn+���ojm'�44��D��]����y�R[s}Mz�2Sc�C��o�:ؘ��k�)��;))&,����~���v�J���+mذ�J��JG8��
��K�RP��B���oPXTBrFNAq��'�MЁ�SB���w��?� jsss���0.�ss�
�Gz	�%�-u=�)XQ��9ksc}-̜�*�#� [...]
���v��򲁎��s�R'D�x8bٿBZim%z�t�X���J�J\G��D%dN+*�j��Y�;C���$�f�>(�W	�{�
R�)%a�>1.
�9�3�t�Ђ/{ ��T�si�b#� s��6&ڈ9(A^nvV\�;i+�[íb����8��ENH�ʟ���cp���������Qq��9��m5
�m�:ѧ4<:��m��6��ª�`Bp�}��|��p�C��܀������Q�A>7ݝ쬮^�P9wFV��� 'i������QV�HZ��J�`%^~!1	9Ee5-}csk����+*�W	�����
FH77O�hqq�3��H�7�qA7�v|dh�JAx���
���%h�����$J����.�Ji+�[����F�J��J�s�
<..u��9�K�W���o��E'�d�G�V��
-�������8�m!
��U!�
23=���
=K���Y)��a����;_�65�ոx^ᔴ�q�cG9�
+�������%+m"��Y����W at XL���
j��&6�n���,(.\� ���D
�2�"��ڗ/_�2._0z 
P����x;62��׋����ʒ���Ԅ� ��<FV
-� �ad%f�J�h+�[����&�J��J��JB�ťO�9���khj}���-���Ĵ���R�mO;�z_����p��,����!'L�Ǚ��~7x��<*+��NK�����p��63�Ӽ��pJF��X��3e�M����-[i3i�=�J�`��'��^P�1�li{���'04:��꺦���}�Ё�)MS�!� �o߾}g
\�!���н�x36<��e��-
�������`T�V�F�4Q	JA	��p"+�����5��6SVڋ��V�>�p�����������HDlRzv~qyUMc
���1�)�l#�
!�mUDV2�q���5�[{KcmU���{��wn�pu�17��RUR<-#.
-V�BV�GYi3m%z�w�Xi?
�XIJV������K;'���Aa1	�Yy�8۟wr#co��q�/_1l?~��'������[�����P_OgGkc��������� \��ƺ��P��`%(A��~�J[h+�[�1Zi
e��JG��D%dN+(�j���8�ܸ
p'2�^����յMm�:{���ې��l�F„��&�+&da~�n
�ۋ�gmMuՕ%r3����x�:ښ��k�)+�>)!*�ϋ�t����J���VXi뒕!+	���ΜSѸdx����[~�᱉i��EeU�
-
�
�Jo�MN#�H'}ǰ����_���O
��E�[�D�uc�*
>��q/
�����Y�`%!l������V��F��J[)+�b+	����T����m
]=}�F%$g�>(��n{
-��
-��-Hi�#H� #�sUD0!�1!� �fp��g�����'�J
�2S�C}��
�,L
�Ք�ʁ����Xi+����J+m[��al%q������L��:{x��D�%���?�kj}��������	ԁ�8BJ����8;�n%tӐ�#C�/����'�%����o{�:ؘ�����+A	�V����S+�
AV�+)�i�X�:�y��F'�d��>�ihi����G���4Hie�F�
�܀�ϟ!��ތB��v��4�T��g�&Ą��t�fgy�@[�XIR
Y��}�J�h+�[�c���%+q� +I�+iꂕ�]<���D��˸��aEu}s� ~��ȑN"��̄���+��f?L�g��km�A%�������hkn�%�('��ĵd��L����~���%+qc+��+��X�]s��
-�NL��/*��ml���}502NvH� d�H�#B���25���]
mM��ˋ
��cƒ�n�;]��l�V���V�^�m%z�z�V��_���;�����PJ)��c���j+=Z��*XG
-R�P6({�7a�f��M�
I�ޛH-����v���}�g$����������*=�R��*��7hȨqSf�[�j���]aᑱ���!�e}�����(��v������^���s��9+��Rv����c�%�c��5�̙6���{��*Y��]%�t�Ԏ*AO�*��T������V�z���4q�������=x4:>)�LZf��n�~Ju�l�'r=�D\
���
n�g���(?���3�I	����
޴vŢ�3&�1x@�J/uuU��=Uj�5���[�*}�[��wrU�7�*

=~���KWo��{�ᨸ����+,)�0�s��$�����ՙѹO��r{s���⣭K0t[���
�*}4��J�%hUɾ�*��JP�J�Uz�T���V��cUiъuA�;�
���O>y������Rs�]�r�s��"���s��7��T^V\���~�drBLdxخ�M�V.��4v��J�_3Uz�[��T	w��U��7�U�կ]U��λv���Z`Ui�=�D�
?a
�9�!X^i&W玒���3��VgF�>�*J��]�7gUɾ�*-�;}�U��}�rU��'|�ԁ*AS�*u�V�'�qU��>v�&͘�xźM�w��G�$��:���[XRj�+W�<g�)Rˉ8���p�?Ke%�y��N�$�D
޿{�f�J�fN��Է��ғ�y�ԁ*�ײJ���s�3Uz؇v���ٸͮұ��T��/*��2�s��$�3fv����ܧ`u���7�aUi��u+�*�1�T��o}�tOG�U���
�*u��Ҁ!#��UZ�~s�U������2��*����j]��l3Ej9�rsn�g� [...]
-ټ~�bw����ݷJ�%H��G�����қ=����dՆ-;L�RϜ���/.������=��N��[�RmueYqA��gRM�vlݰz��J�z��[���O��&U��O�����*��w("&1�[%39'JN������Z�]cC��˟\�V)�x\�����*�
9d�_��K�*A�\�>�W��CG�s�����c�I>U����F��f��r"���>ܬ��T)9>�����*�
6ȯJ��*����_�Wi��9�|�t*-#;�������tU�N��{s9��UZ2�d�*�.A�}�U��G�Uiʬ�K�U:y6�BnAIy��n��*ٟ����¼��'�UZ�`����Uz�!��6��*���UZ�n��]a�T��D�Iҿ���Y�3�kj��kY�{vlٰ�y�\� U���z�:=�T�*�޸5t���U�khl�m�H-'�\n�íe��
ݶqM�*=�x'��6��*=���T)<2�����3s
-nI�
-s��%�;�J�:?C�p�|n����-@��F'$�:���Wx+�T���q�TJBLD�*���9�������zK�RqYeM���%'I��gfg�Ό�ZSC��˟||Ѿ�*�t]�T	�ύT���{��TZQe�Ʀk�����D���}�Y
�t���T��;=�x�*�͹�*��?x��*�5t`?����F��oаѺU�p���R%�I7\�I3�.^�~�W]����.�5�*��E�4~����}�U
-Z�|�i�ڬ/Z����G�%��I��[xK�T�go.9!�����[�� 7Q�m;�
��IL9����_tK�T���v�Dbldx��`����KU������frN��$�ן���:3�O�56�]��Z{sT	w�/]���js�5]��s��"���s��7k!���,+�J��B� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� [...]
O�ƪ�p�^,�t�.tt���[6������v�UZz��?��?=Vꆪ�w��vi�‹��آK,q��?��o�J
�2ޗ}�gm8֍Ti�v-�
g/�=;v�|r�a��|칗�
W�Vfz~�N������*�nW�Y���{�<W�;�A�����7Z��+s�Q���<׆���J�G��]�^���7��d��a�E�_a�=;��x'��*�
����9�pm����ώ�Zu���K���,W�Uo��]�.ٳذ�"��a{=;���m�L���7U���y�Q�=�k}������G8�3��i��J��|�h��5^��.���/�h����Y�
�<d3A�^a��<7��� �rk?�T):��a
u�K�f��$����r>�\�0�Z�f�*��k�]��*��@e׆[6ܱ�
����ߪ��/�ұ�����~�[�Rt�� �G������2X�Խ9�Z=֓~�S]�0VY�~�U�W�^�n���ݬ�[6W�5=�3F#*R���_�������N��m���Rp���
�ht��+���.�Bw�}z�'�8���i��Jw�*u�t�v�U�V�f���
~z7ܴq����̈́i�|}��]m��P����.���J��
��de�Ӌ�ozz�gw��x|����褻8ѥ����[Y [...]
�}an�չ��Ox)hG��*
G2<�3�Lq|�ڌN���<����s޿�.�}��O��������珻*m�/��r�^�v��U���^|
ߘ�5�l�c���0O����
v_�x�S���Wn�j��,L�V[�f&��<pe
•��Cmm����B��~q�e��>ϩ�����8d+���?~�Ui�������h���*������g�e�׬\��w��]���\����A��s
������n��	f/�����*5ߖ�aԓT�
Ree£
o�c����[�Bw�G�r�v�.����K��x�a
7��Ti�s}��/K/�
i�_� ����U�Jw>���֭Y�e펍�4\�'د��7I����{
�iF0�r�]nGN�Uz����l���V�az�Ӎ�Mp|���y��B7������t�m|=]Z�4VR�f�*�o�,u�ѫ�~��e�^�ru��[�ϝ/����u��l�d�2�a��r֢$U�t�O���~�
�e�d����w���|aZo���m/�望�
��ݍV�qr���������׾W$���I��~_
n�B��>��q�uK���lWQ�n�6U�,ݟU�d���~=NRW�2H�nu��]��[ߦ����o[Q�b��2�6�;���/�A\�$MުwߏvwX�U���x�K������/�����V�]�e��R;�Z��+s_[��ӕ��L�6��M��i_��&M�����z�=��l��0�p�iL۴�K+��n�~n�n�u���(��+R�]�n���_�?��
�]�f͊%�.�nł0��K���=��39x��T�~{�}���x�����r�����y+8p�����}Q�v�
_�j+�\�~g���
�hm>ͮM%Lgz��O����nߌ-���w�Ut�6�ӧ�(T�i�����b羵Kw��@3��f�vo|�z�۵]�f�ڵ���/[�V4��[�gݖm�l�c��_�a�[K��H�୺
R���
����*s/�^ν|q���糮*}��XTi���M�}�+W�Ky�?O���6]����<\���
�$L'-N�I�
<��'�i������u\^ŕ.
����]�Ӧ���Ә9�+����W�_~�Ti�t>�ۇ���KR�_�z�A�.W�Z�Zmo�߶~i~�]��qj��ݱ�L�+�늻6�T_ϾU�T�a�����#ӹ�W\�mo��;��r�?�ݖ�ڪ��sY����v�-�T)^��Q��fz|����~�7gz��Fi���
-n������2�\����ȝ�8L�"}�U�__�����f��7Y�
��?V&iX�f�6˵ݭ�f�K������H���l6�]�͒�W�f�ve
-�4:�+����N�t7�"�������?
t;�N�s����O�w���vwp��i=U���қׯ��`�5i�������2w�3��x�4bؗn荭��A @	�4IH�v��U
U�S��5���l����؉#v�ĉ�#�����������;5S���J}�w��ܲ�
�2�2�����*b�Bl�#
�1���f��
�ngs�
�K���Q��f�)�c�'S��,1Z�J_��J�H%0�@?�̀%���OgG�$e/1[
�%�83

>��D��ψM�cl������:7IQ�V���>
�t�I�������6���:��>L';���ʖJp,���Fq�>�"y�T��c��6���i��]hfm
��.����:���,a
Eq�UNl�')�j*mH>�N&F�cS�F2��qkR�?���,�֖
��G*��P~ �%��]��B�
�Q)@s���W���0s2�f��#JKt��\fL�
c��ô��_Gr�^��
ŤI��Q_�	a��j��`�>��+�k�4n�	0
q05�p�J�ۘJ]�H%��d؅�>y���b�eh�3z�j��8�>��/��
ݥ�r)~�m�I�o����F���dE��#B��d���P�X
ˣH�������\�#F�R�G�J[אJ��J��y����E6߽��K�/����CmEɸ�>��D���N�eh2��8,	&\Cl��R�I�3)�$E$
����/4�{99Nx%����T'(�d"�{�=���<Piy��6�RoRIB���II�NU�|�L�Ur�H{&�
�/؞ئT��u$����~��W�]Io�qFDzBS���X
-��7�Ʊ�H���S#%FkR�g�Jw�Jsӓ���q]�4,|�{�Y:�$���D�q��p�BS�(\6�sE>Y��(-�id3v�1z��
�)�R[�q)�m֙��k��
c�U���Zh��j<JxOv_�D'�d�E�;
	Ǹ����6��1���J�%�Rۧ~���8e�ie��:���G�[
lS
m�H�;
�2�D)�C��
�oM�ÿ�g�¸�.b���	(i����&Q�=N�
j�
���ݯi���TZY���UGG*��P>/	$�yHAX��LT���(%�Yh*��kkk�8W����%���
Mh���|4�

��
�f�/��z[�X�`��%-��II�V��<�a�t&��Xh�w#
'��NDz�tKuW
-�Y`:��t��C���4�*uñ�!��
�P�$(q�fշ̼���`��m�<�����j�6�Lم���\�`�'
�Ts C����%�dJ�n�&�pv��B4;��9�x$(:���]�W�t��_������S�������Lmbl�ǒ�L �E���w�D% ɘ
�E���ظff�7��|Dq	V��	��c����d0
-������T�Ir&u�	�ݪm�ͪ
[a���V�ɱ£�,���b���
��o]Y]�9.�7*�J�؊�!�!�-��L�'H�u�m�e`���d�v��e"۬[� ����m�B78�X]F~y{����Oaa!0y��f�G"���f�ϥ�A|J�A^���=-5z�)�{�T�Ũ�?����3��|T�{ss����������J���c��q�e�C6>��
���N	�2Q���u�̭h�����>C�AF��cd1h�
���Se��I�N�Ō��:Lj�Ju����UӅ�3lU묅eo��QÏXw'{��r�T�Ln�L0%jw3\j}*�X*�T
�r}��p,�/��`�tzg�8B�s-3�-��D�e�����v�ms���Dl����
-]��8).�[Z��k(I
-w	��pa�B���ӣ�~k�#Ә�8��g{-����PN' 
C�B�*���Q�n5*�Y�􃯀J�v�޼~������q8�J��|cp�"���'ɘ
���BWa4޽{�
�}5��|@�	^3FC����d�&
-HpX

&`�lQ2�5d]�gƥ����jBR!ժ1��	H6�6��(42�uF}�c�Gݝ젻�[�	ft�F���x�B�R=.e���T��&T*
��wvt�({�L
��k��J�o�
��[e�e"��뻪m��`��A*t\)�ťL(��-1��E0�/Dl�����K6c
s�(#�L�%-�RC�ԕ�F�j���tA��Kn���֥�?��
-���J�v�ݺ~uuyqn�V�c�\,��E����`�/��d/�$X
3=������������_�t�|�q	V������cH�y&���RF0a4B2&���I=&}�'.�r�&[5e�
-ݡ6�0� �@�mz��~��Y0����d�C����@�ۄ�L(�;W=��|;�K�Js���TJ�A�D���p��2�L���D�\�,cvip�rǮR�i��l�ش�l���Q�
-C�`���K�A.%�����Q0B0y+0�nF�F�
��2Ʊ����q���l���#K
�y5b���@��K<1Z�J�*�]��s����
ܻuccueq~fj�:f���QL
-�$i"Y ��Z�Y�*�ƽ�Gf��1���0/�k�3����d��I�%\J����R�$לB&Iw��#��V-��w��0��
-��B���q�xCϴ�,;�n��mk+�"�h�Z�N7�
��RZ����W�J+K@���Ra(�������7Zh�2f�G�F�U�2ey��mm��m��B����Q4ƥ��$o�Ha;m��vf̛q����G9�NB&w�yI
c��}ݍV
g�A��I�`P!�ML�V�t�Z�w�P�_�J��߾x������֮,-�NON��a��H
-��`����Hh.�8
|������Ӄ��gј��#�K�54����ɡ�-��!e/tW�*KQA8m,�P��,���ϤAL0�CӭZ�d3���	��B���a>ZݑSq�oT
-�:���w����B*t4¥�r�K��B�u�Rut�\
���0=�<=��I�l�#�<ЫT�y�&�
�o�g�Dl
-l�U�r0�8O4��:���P���n��
z��
-3�g��3�iNgdB~�E(�c,����r�]��ƨ�QmJ���A�b5Ӄ~
�R�H��	5Z�J�*�����޿{�l���;[��W./���&��%�$eK$2��%��	ܵK�2�ˆ|��xx���K�Wf����!��1���$e$��,&��\ʅ\�Υ��R&�\���d����bIa��������Y	��z
�+�ޓ� �J��6
�^�Y�I��
L~�n�K�K%����M��L�::R.���%�:����ިݧ��/ql���#��CY%/�Gls�����ؤl���.ty�K�I�D\��tQ��v�a����-	2��
1[33eg:=�s���32��b��yI����6~J�V
[?#5j��1���85��(ڞ[�8�k)<
[�J�
����������}����϶��ܼ���4?;�X�o��d
f�D�"{1��G`-�H����o޼y���;����?���C�K�5c4�3��>�IY�
����
-������s�
�ڈI
Ĥ
d�-նU��d3��L:~��
-M:��_�|�#b�Qw�����}�A�	|2`R>�jw̥�%�*��C*�*��TJ���
���6����KLRgU
�'�S�)
��c�Qj��1�7��=I���I�9t6�
���Z'��@���d%aR	�
����c��~�:�(�Һ�
��%�~�;

0
��0\
v|�/
�p ����
�6���Qڪn�^T硩�Tj
��>��R#5R+Ej��V��gt�����;�
`
��Of8H���Z��)b
i�d��
����y�i|���� ��8�
,�����޵�J˪���jx��j����:��a)��**��?%*���G�Ο>љjn��VW�XҥJ��dv>�$�
a�I��pD�"c�TƁ�����K��'��
��>X
F8�d���bp���8�|\�hp)C$�ً�2&quRf$��$�H�0��ΰ�
�{�:_��F>��}�
p�
�]�9�l2'�ٺ}�{��p);��zS����()<�w���=�rsw��F���n���$�I�P�z�O 	��8�p�G����6ywz}j}��>t�3^�$[��<���w0��ک��:�p)lj�uV
�����aRҗҵ���SfL�=��(�I	�r!�)����=T{��������!Q����(Uj�P�Д��Jqh�aa�w:~+K��w�J��3��#��.�A�7�Մq,ɫK >�#�Aw>TxF�j|��v�G�^8�|G

]�2<<<�u����\A^�k0ی٤=�C�#�9`B6�hT�򶥍˝Kk�b1i��I[�-��jIV�nn	�0���B��Z�2����"���>����G��/ܚ���d]Lރi���J��0˨��6�R�ٓD��h$\QZt4��r�ΝoҵDo�6���V�I�PA�/�i-S,ӧV)��U�qlîѶ��P.T�s���Ԋ�B��ϥ
��	�RN@
��1�c�%H1�#���"�S���c�<�3������
-� ,�2*��d�A?�R�T�Rj�)5����&�
5
,e��QT���K���������/^�*؞L��q,��7�����É��H�#���w	�Gp�0L�`
���
>Cd�mJ���I�IN&
���?�_�&xn?p7p.��2
J�����.��
�D�Ӫ2
8T:Ch�yLd�Fs�7�T���Н<�\����[c
'��B7��I�-�KK�KYJ�E/��B�E���g�� 퐖A+�V%��W5
Y�*qz��GL#�r�]�X�3�6c�m��Y�s���:�:u0��^J*�5��8�)�9y��*�jL�r�O��p�Ly\��_��@�%�@p��
�U��m�pd�[P2ۊO�0�Q�bj��F��(EM4�O/��-4�ѯ�J��T�S�)Qia�έ�����9{�����)ZWSUY^&_R���"��0fCL�����${qT*sGd-��,u���7&'obn��'''����d�Q'2��Y��
���q6�_\ٱ	�K[�hsY�Z����K�&m�;�����+)�
-{Z�
$%�����5z��&uoc޳�?�YwPJ�n�!ܤ�L
&q���n߾.��"f���)*
�J�ɦhmU�����r���7��5Z�!
-
}&�������mk��WJ�Y�eh������:]߸�@�������3
-]L�J.t|�F����
��å
;�-(�
1�כ+Ep�[S�Djkk�0��
?EO�� �)�M�ŚK�>,��x�L�
�%�54��jTZjԽ�Z
RdR`�RMH�F3`��S�<�O�s�~��G?�h���׮���;u�3���G��!Yx
�$�3KK!�6�F�u��%ً���$Y
�"W!�����
����'�4=5��$���8&DŽMd2�Y��Q9�����l��	�(���
-�Wr.-�$��ˤ���9�[� )
-��Z� �ž���O�u�Z��ϴ3�R�#;���I7O�uu�R'�&X� 
��y���K����JO-*u�'�
�Օe%�G�#���r�H�v�+���J��6�b�������5�*ӖcL�L���(Y��ɰMz-�^���cu�b
ޜU��m�['c���
�x�I
S�2I:���Fhb�X�LS��/�
�F)�)�)��L�)�$1
K�m,�*��h����}�!����h��`1X
�i.��%IC
�o8X��W��J��Tz�}�Tz���o_��@���'��'�
u��\���R����Χ���Dž����R<�d!"���33���we�Ѩ҇333�K��6�$�@r�x
y���;��	�/�ů�Zz6��%�K�Υ��R�Q�n�W����3I��*�M�d�j����:O��^��
�
����^d���S����
�A_�Q)H%[4�jT�!�^u�f ��<��~��"*=STJO���;���o���,/)�/�+�8�{����$^)�
�
�h����Սu���
�R�Ҷ�=c�md}؟�>s{�Wp��
]��N
L���k�m�s)Dž�'��I
�i�R�L*�Z$p·�)
O$͘�����g�q3%ri
���_I,��%�}��� ��Pc�JD�"[�(�1V��+��� 5�L�F�*ة@Z���)��e��k��L*}��g�~�����{�w��`߅3ouuб��h����e��!I�`T�5�P��^��]��c���ߟ����_XX��
�d�~17�����;i�&2yL,�;�����e�
L�����k,m8�VK>&y���z����b��I�-E��H�#�h�N�9*
�F��Zt~@��7�T��dg<Y�n�=�L Ss���t'8�{�?�V¥��s�J7�J�;Z���pEi1� �9q�g��}�Ҽ<^)ZF�
-gR�1��"W#��y��]F�U�2e�o��9���,Z
w:mFz
-]���5����SW��Y��˥
���w��t+�wJt�&�������	Do2��ښJ��dڃG~I����d�L�h�W`.�$��ϋ�u� ^�1�缾~��hQ㐡�P����h3��b@
!�	5n�s�@��YZ��h�^�F*�WQ���s_�>��<�?=59>r��;gO
�lK6�K['�
�*��*F�JL���$�K������K	99K4"c-�R>z����9�����G�
�np�$�,=�
�䛉O&&d#L
���^ĥ�!��p.⪼��Ci)&�R���T�$
-0X6��"�n�t"���0�>t����=k�#�u'J!��'��i_'
�p�G�A{:�4�t��Ԉp0��mriK&.b)'����,Qi�R����;S���HU��)H�o+�_�IG�2�(�i���R�
Ǩb���K�A$:�x��eh�X�w��1zu�mP2��I��������\�q�
��K��Nc)J�-(�ٻ����h���r������
�
<�;<�����A�L��L"���
��K%��V��M���������s*eP���Pn���X�]���m�F�p:
-7Vc�|<�J],���-F6P�_��������_~��}�����'�
-N����;}�RX�?�����}��Ei]�u��Y�**
-h�E9	*<r�3r���炢���V@�bm����ڤ]�&��m�nY�%K�,Y�w˲,��뺿���ypn����)��y�s߿��\S�����+TѴ�)�OZ�}���,w�UR]�G��E��7vttvv^�eG����%��xj�i���Db�
�0�#�����������m��jK�����e�dä�n&ͥb#mMb�_g��
���Nյ�aM>;�8��|��Y�h��2]v��z�v�g�p�'���|�B*SvV �}A&��Cp�Y���L�O%�����W*�	�:O� �v�V��6�&���.m�be��% i6�4��
�.�/)�E��H�9U�k��9d$�[�ҥ�QM��|�zDr�
/(�mB�KօI��n�!��#��C�%��>i����چ�X
�m �ƒa�i�_offf ����=�����e2؄a���׏���Œ��
���J̢cmc�J�]"������F��F�� ��'.#�d"�D��@������&��q��[s ���쓟|���w��v�?u��eoS����¼��Mi)�n�*6v%&�Md>�IJ`��%@��jjfGz��V)�:�qt���=vuuw���\���۫���i�['}2;eD�� I��&(��F��pk~n6
Sچ�$7����\gz��|�
-K��(�I��in&�
���M�\�Cu�E������y�O��ѽd�ݲg���r��q��[���.�&{wP6�57�L\�S��Wa��&� �K��KO�>*
�JgN
nٻ���� 7�iCҺ5�+��Jٳ�
�3gN8ʚĘa\)#!Q�����|���j�S��"{L��>�W2����Q��|q^�dd#hB���

-tN*�/���M��Kr7�ق���P⽄J>F5��(ې����xsrrs�0����G>�rssr��pdر����W('��Xz�?B �l�V%���S��f�6�z�a"~���Co#�l#W�@�N`SbJ��15"�����9�n�ig�N��=�Jw߽y�rW�`�憚ʲ���-��� qqq�W�? ��D$Q`�"0Dx�$�%���@K+�EuqGTdw����ᅡ��>�}}�KqJ�IQDF�!��LL�L
-Le��<)L�K�PW$�$��֥g�y
X
-U�<Lb`"�~�gR����W������
-�gh$�ba:U�1
v��aba�sϥ^g���5��=#�����{e�]U(�gen{�ܸ����b
�

LD�EE.`2�s�9�B�%����P�T:"T*+�ݲ9-9a�1*�Ο2��H21�YXRF��8uP���F�S�������9�#�k�v"�|����Ψ�52y]�
-��4
�x7W]�b��S~.MTTRP�UI��n�Y�Z-�������sJ�
~�����Ȱc�	�O�_������ψ�*�����
!�����O�6�����u ��ed0%�JJ�S�v�Ĕa�#/9�Tr4�OM�?�J�|�՗��ч���}���o
ܿ{G]���������4F��u���k	��"����$
-L�$����[�,�"Q]�#����7^�~}`��;z䏁�|D��SBh�NVc��ᶃ��LpG��
`���>.�����ISt2��|����4vQzZ�T3ij&EFI��;�kRjC5
L��
-U�\�Z{�I7��͞��gY�,�������޼�]�~'�����7
skU������b��)O�[Zjr��Xmo�K�o3g��[�����d��J�5��*
\��A���겢����)��W�._&o��
"� I�I�1�8)lG.��S\�F��=8�qH�ݒ�-�Oi��&����M�x(��@WZ���d	�l��T�p�	I��d',Ȇ���CB)|~Dd��%��ն5�A��o���������o�T��y̯���������
a�$��?A;����6�I~#~�P��c�*M��mL�64��mBs�S���߆,�\-�X��'dB1Ư5^(XzY��[�����A���T��7_��g������n]��p���C���^����%�+���^&11)�HB�
 I.�$A_G�)"�*5�D[�(,���888xs�3|��P�&t���"��`� ӱ�P��!`�(/.m�o���p�po]�I+(��/�L2Ei2u��äg�����wt��&�|�C�X�v�Su��~��W��������y�o�~�'��'�ɓ	\�o�nV��Z&����tU��({[���j���7{���ݢ�ҳ�O�۠҅��GZ [...]
t�r�\��4�
�T]�a���0S���(�^�
>OA	�v�����<*��VTVUUUo����Ԏ=��_����3Ӑa�0�<���ĬK,K�{AF
f���҄��?�m���Z#k��o�Q�mT?�6��
J�4�L&j��
�;
-���
qJ
���	�J�Y*��B�/>�����ॷνy��eoscmUyIa~�� �����I�Ҁ$I��>�I��
=��~V�RIx4 4��h�CC�����φ��������t��hL$�
-Ce:�ڢ���^]Y.�Oq)%�]]�j����X��KVZa:+|���4I�)S�f�R��+��mn���P]��Ԥ,̝��y�X�<���]�H��c�x��;��Mg���M������nnr�� ��[&�Җ�K�..9��r)�.ME��O �.�Jo��knؾ�xkv��
I	kW���xQtttTTTt�"�$���$JF�8��]{����o
;ѮB���e#��wJ��]g\���}=�&}��%е8`b�ӅI[��@���8�K�=u)�%S�Ćg�(-T6�*��
�Eťe�Q5̷���������qfg��G���Z}}]]m
�T����y�6���oX���O#�2%DYz�Tr��o+�
�
��4"��F��lC-õ
��h"�MFW��+jے�:�':�q|��oM��)*��׿��?��ǣC�o\�x���#��w�`Y*.�;oޔ��&���q6�%ۤxU���I�׹�"/X�xt����FFFG�ݻ��̇j�xzot�n	�Ah���-#2hL$��A��
٘���/�}���K�F\
�ϳu�-�G�%?�&x��$壟���4�ä�U�_ɩR�\�W=�
ө;�{���
�g.z�Y4W|?���뵏p���;�w����|�U}^a|��mL�$��D6QD6APTP�
"
-.��{/�zAY�b7TP�Fm��
-Q�km���d�tI�t˴��Lۯ���9�}��rﵒZI·Lr/r�y���<��j�V���*��b����W�b���܍l`08g�Ӱdأ3��ƕJ?�T�9p9v��@��̾��`c�%5ye"4��'4$x��`Ԥ���Q�1q���I�E��:�pζ�N�L��d.k�|W��u�
��	�����a4!W���J��V��\�$��nZ�ӵ�R��x�U�i�y}���/l8P�p��	x�`M��߂'�
�-�ZmvLqqq	�^��-���j�+�ٽ��dڤ���O��,	#F?0�%~j/�J��:Dq��g��ב�z
�6����1o�f��Q{N@Ӗ��t�,�"A:~QL4a	ל�G�Q0��BF���5'��׿�J���O�JF�/��
��lm���(��,���Z֥��]��������f�ZMK�\��IR`�$�%_�$�K�u�<�Du�������M�[r�?���� �%�F:����~֘"�P�&�/rF
Cri���K�6�I[�E] [...]
�v3j��A^� ��B�S&P�ơ��*��J�p7�����\"#.M�\zU;�9
L4S��D�7ƉJ7Q��޿9p���~��Qn�SX�����fU��h`)<,44&j���8􂄤
32)e�EQ�8�U3�ZZ�p��,�SB2��[�F@�Y2�Lc��v��,�z"W]�9ЉH!��K� �9��z+��%�&���ܧ�{z�����H�FO/
��,8*�햖����W�T��SVZ
-_.�ȍ��(	�r���W%��	K��G?��F
F�ms=x�T�u�#oP
-
-	�����_F�`BK��m`c�F��Fo���4�($0�Ҹ��4a)<�\UG2A3��.T����~��㇣#CW/��9q�`ہ���R{Ѯ�-�T3-���Ry���Q49�h�i!	�B|�Y��%�$ ��&IY$�۷��GFFޗs�F�+>

f�$���N�&�K��	R�S
����E�y).A]˖�
b�Ki	eyxx<��Z�$�^����w�L���:��
L�d��D�7�P�0J�L����.�
&-̰�a�g��]��VOk��$�����lnD�����L
-L�n2vg�\Z��Hи(s7�`08����$�4�iTZ���ҿ�P�w��LP�
Q�R���C��u���o�ز)'3}���K��Q-懋AKZ%���^����EeMR-��Jұn�L�yOHfH?�.9&��'���Mr��S
����6;�:���B�H����
&�l
�I�ɋ��

����?`�����t*��.LHb��}+��
��555�0��}USS]]��� ?F*�등�N�Bg!,��H#~��)S��3�����3�? 0(XBi9j#^1	z/�(Q�p<kb؆�QUI� 6٬o�)iP� �W&%Pt�
���(�2���D�/@�_|�1Q	Q����^8{Y��a���Ķg��-�x��R�E
��$mܤ[��IF$A_g�RG"�@���&	F���wGGG?��s�
_�[�QBg
'!��d�/���º���߂7��*�KK�65.�K�-&Qw���,�"�AZƘ�R����X��+JĤ���jL2���$�T�
s��DBE�sž�0m�wyϴ��<L#>��������n���Lp�hn

-v�a�2c7�$c��q�K�T��}˥.�'*��7��P��T��>��\_SQR�s���,Kj
-Q�
QQ
"##"""I3LL�I!����MI]G�$��\�%3$$3b8�������e#�'"��M?�m��p�t9N�\�tD���.���%9Z������3c�9s�����
`Ö�ي�x�%�e���5��ں�������F�&���-�����\8UŒK�6��ęTK��%g#f*�X�0�4>�?UP�0V%.�r�h@)Ymc�3���6�x���r´����N�,�����,M�j��7E�O?��u�{�\<w��pgkS
�R�u����Ps7�dge�������ـ�$��d�5I�����,!/	$��l�"Y�9>|��C�G���
�Kh�u�pb�]������'�D�B�cy�H]��&%,%S��.���Rʚ��c�Nc��S�����3����9`R�+�TM���($51���d�V�	���F�=?{��~��h���N{���~Ӝ	
�v
�� ���)1p춸r�r7uV
��ҁ�p���FI���ҟ�~�'$���.��
��hi�W�׺k[���4�?���1
��h��$Ԥ��	���H�&�$�<��$�\1Kfĭd
9�T�C��N��l��\A��|�9=�I0��D�C�\�í".��D��u�5LH0M [...]
->yt����w�����8�v[3�R�^{�ӂ�Myss7lؐ��%)��$c��L)����}]����%�%�t��i���
?~�������%����Md��LBaL�G��
-���������p�|�.�IZ�(*<�\��%��4��&�Uzz���͜ &K&-RLJ��P��y������la���iǮ

���Cbϴ����0�#�x�;�]�}Ԝ	�������:y��Q&��U�0r�Fa��t.�܍#��9o׺d��d�T�x�T�)����
���3ǻ:[�U��vo/�����_C�hq���	�W(&�H&�`:�(�$#�z�pN-�i��f4�<r��~:�l��N�M�
�
-
O���@'�SY�˱���З�W�tp�(�H;~z]�꒜o��4ET��^�Js�B�u(��������	�G�jn����wttvv
ļ�9d
��������ho�#N0�Z����NuI`��AD����zY��`|���t23z�4.���j�W0�r�6�$�q��چX��N� R7""J)R� ��V._���4����3m
5�m�6�[\��h������ˢ��b�����ྡ�%n���(�*�Q+��h�Z-Q�1�ɤ��I���v��әv���<�����
7
�@��!���x����9�:��˒��񘨤4�/R�/���?�����T�(x��3'�
>X]U�s�f���
�%d���Ԕ���)M!I��-Sj��B��#G��,E^獸(-
-���%655��r�8��uF8i�2!�#��
��Z_�}�V�m"%�i"�%%�m��F�[u	I]IK'>�,�ҕ�
-K-_��(=�(�E�{������?`����/�5&8�f2ujz�ɐ�P-=��%	V��tԯ�	�͞oZ{�����z��ڭ�_vf�����1�ce*c*(v�I��,eo��R���������2x�֪�R{S�,&�	���BH�������N�J�۷lX]�d�������(K^�y�!�Ac8ADRXD��퍎o�4]1i�b��
�\#�%��D2��[���-{l�H������lp=���J��r:&}�<
-^
�C�#ҁKr6�.�a�Iu5���ĚW��~�
{��cB�]�B)�UT��֭'���o-)ٶm��
����?ڎS[�R$lZ��<>�5{:
-����RTx�mĦ,}��wL=hs*�嶗u�*=ӥ��64���6ȤB�
Шېe`%����hZK0����)ӈ%/�����}�������*��޽u��[Ͼq�H]��ݥ۶l\�z�R���3�gf�������gdff�$1�3��d��IJ`
-I�W�I��"�D����+1�;�wZ?���Ԡ3�L<Rk��9H
�
�	�����3R^�Fq*�)���
	Ru�HK��KY6�Zז�<R��D(9�Rg�.]��x�W��~
~n���_�Su���+5I�+�#�$��+"��dz��0����}[�ž����z��ڛ��iw����L
-X�vW8�ͨ�����
$�K^.
�+��2x�:��.IFpR�����J�O�^WSU��xÚK�Ϛ��:�e�ԍ



�����GDF�u{c�t�x��JFR��ILq�$�$�K憟SZ�4�S���{[����C6gϨΤt#�΀����[�P�
ͥ��r����1�lv]r�G�%�@��D1GU��`���(w�8%T���(���#w��~w�����WTT���;�#~Z^VVV��\B4mڰ~-
�r�Y,Җ�����,��
��O�)�|_�0��q��Ͽ�m�Gy��Ĥ�Ln�����U�Q��m�r 5�D0�*\�d��BZa)�;6B���!�6gt{��E�+*�]����Dt�߽���W�<w�����+�w�,�]U�T�ev���YYӧge͘�=Hʃe"�/�/�i
�~	�|��;�ԅ�'<���+e����{����_Rj�3�L�
��:+��$�j��],L[6k.�|�8�5>6Z�%F>%-&�.?21�ے�'�-(IQ�м(u��l��}���`Rx��I`R��������j�TM"IE��۲�w̞e��ͼ���`��׮�n����ך�[#��HC���
-Le�$�.��
{˰�$}I��a��t��bե��u�	k�E�O��R����6�b���N7�^_�Tڸv岅�ٙ�&O���y�]Q�� ���D�0i�fҊU�ME�&�b
-�X�tG��B2Z3�S��t��q>	�tv���@w�'Љp6���-�r
���$�O����D;ì��]�G���K��Qg�UiTPh���	�l��`�r�k��w���W��]Y�gϞ���}����O�Q�M%\����f
/�+��cA�H}eJ��P�0q �(~�tY��$/����������pn�
=n�d%lc�Rlc���ܚm�2��Jlp����{�<���S�'�7��b4�`秹��
�
�+��)T�
���o>���߽���]:�����U�P�6���X���ɛ={V�̬ٹyhI�L.p�	}�&A`I�/�,E^T�ڢ��+�8��|ҎI�AgJe�h
�?JpG�c�7R_�}�K�7oD쓷))!�J�4Aץ1��DZ���ueLT,���I(A�x��|�R����
2��/�4|�� 0��`R���
Mj���P]%H��S��RK
�k�|_�Y��C?c/޹v�w�	,4isC(�)*�tЀ	�V\$}u%�@{���Ҝ\b� [...]
�t�ӊ9l�t�<�ŕ���}��q��V
��h�d��˾���:&\Uw�
-�K�驐�6D:��v]������.	�l(�
�
�r0&$�卍O��
-�V�͑LR��

�ݷ����������A�Qkkkj��aʠS%�x�v�֭�,]����jl��
<z����>=�wC=�z�M�o���
�t;t�>
���$ۈ�O ��g�6.[AB��ۨ�ۨ�"�LB���Ι����4y�TǠQ�с`tF������E��I����y���ٓǏ���CY*)��
/���+ȟ3'�3'?��-	��b�}VM��Oj$�-���.%�Ee���1��3��P̒B�)��ƴ�Da&
�H}�Kw����Kf�LK}E�ԥ��#^��T��٣�`�sk���}��[��lY��
$E�L
-	�t��c�YL��љ�p���
ՕI衖�9R����}9���=�8>��
�
X{�Gwk�	4�
-	��
-L�ݶ:c�\r)��R4��4r�28���U�l��%
�d�B�!*}���E��gN
k8�owi���V.��?�eI�{\l�����
�7:&6n|�ĄLR��S�Q�q���9uΫ�$s׺e
�8O�s>#��8e#��	tǬ@�H����U� �f*�H��2N��%�	GǕ0A.q��ʁ�J�aQ����fdJ
�X�


��=p������������?�;t�
�z��I�
��ZJ~��qh���}z��#F���mJ%qvy��Jݟ�
�m���前�$���@V�F
5�߳�u�h0� �jj�# V��!"f�;��;���uE�,��<���+��u�Tj����fT������W?|��;Pݕ7ϝ:q��e�l�֢
�N�z̟7o.f޼�2_�AU�Y��ήQYM�I��آ(bÊHEzQb�� �J/b%D�k@D�Ҭ��Ս&�dbI��:�Lfw2������s��~���
$f6�{���x�y���<	�k�%DMZ/C�.�&՞D�H��Ty	 A[$-֕p��r
�Q~U,��&\R����0	�S䍤/rFɥB*zi��.B]�<��4�e9�1��
��B�X��)�~�yv %.J21ʢdie=xȰ�̤	'O�>��u�;Bu@�¤��	I����ZRZ�0�{(m�,촖HZS,L��/5K~�P74�W�n���3�sk�ʄ��0��nL\�8v��$%į�[�p)@�ntV�=
�A�.��u��z	�BU%�Jou%��mN�6A��W/�k1�<v��}e%�
-r֦&��[��D��������������
�2i��I�
\T*��	��yqN�5U��4ҝ�tL�p:8�榔͵N�!)��
-9���C:1�#��|'���J]�KaB9ɇ�$��Z��r0�֎ˁ���_PhD4C)%
6\�aS�V2�={��W
>r�������s\?��������\�Ht�����B�y�������`�N�EY:x o�/�J�p�
�
��
<�f��Jns���B��)���|h^X�
��/�
^m|��1�4�f.m�H�6�R[�]
��1�U�%�w���hPɢG��*	�=��q�S�����M��,�*����=+Ð�������fMRRrJjZ��
Y�6�зW�I,0�$�K�� kK�H��#1_)#$풕&��	�)d��$��
���%�6���4�&A\K�[-꒧�,W8�d��0D�C�_��_d�9�:,J#m�Ǝ��4����������ߌI��<���`$���=vV�,���	
k�ge�_�F�zI)6856)�@��CU&c�ӑ
-%vsa*�Ǔ�����7�0ә
��E]z�!{�R�p
�(+��T����J�>�ITj5��
-߿k�����f�%�^��$�`�����7D�
	
�01)9Ce�Lq�
��IE�U3��Uoi&���c.�|���F��8�
��Da��j���X;Ύ�.q��F��
�JnOFC�^~_ذRP��
x�Ν7��U	��d�b%�#y��a���'Nb�0��CџN�”	N� Ӈ���K��%�ˆ�,���yw�5׃�}�ߕ����uT�
P�ꎅ�q�j�}�X{*��J�6�
�F=�R���#/�
^m|��1	�
3J�㚌��K-�
��rw���ٍ
1l�`�h�=^}�F��T���S�'-�(
-~�ݷϟ>y���w?�y���δ뎣,
�S�}��fge�5���
k3��seMR=�\�$)0I���*	HB[,,i���iØ~S�R�$d��(�I��`:��L�I�>�׳3ҩ��-����
��B]rv�6eℱv�C��w^K/%S�W����yQ�4e������9^`Rej�2D��L5i�nYC�T$�jS���=L�0�=���D
�gڽ��I{3e�y��+�{�L
-��UQ�z�ؽ.?Wǥ(����
�ndp(�
�պԏ���RO�%�C��*�.��O
P�)����7�|�|k���v�n�\��eHAY���BC�� ������aĤ����._)��GL�J��w�)��ZZ)b\�$ΩHF
<�yh.�6�hT�9��tf�1
t�pp9$
-Y7�K�,
�t�
o��n\��j"L���%�F\"0�I��Oq
U����Qv�&N� 8,r�{�V&$�g������(�ꈝ y��a���

F��Ӥ��hlhh��)Î���JJ���Ғ�[�(1�FG���� #
=r��AJ=�{yT�*���:������C��6dU
-	���m ѹ�ET�S�6j4�h�lFeuD�j��0��,޴�����1$��c��
���֖��h
��cQ��_E���w�ҳ'�)
޾��kW��O�,
ڇ�,m@���������dfee����5�{��L0I�$죋z$A^R]B[,,���hT�JpR�$%f�G�!�Sa�3����T��
-q%���ʼn�Ζ�em��Gn��g�%I�W:}�Z&�Ҿ(YHe���!�(M�8y���3g����

	�	�LJ�r�׭Wj�>YC����$����ܩ�I
k�秝�i�m��e(�f��zs��ʤ����
������(�d.-$.��S8psAi�[_����RwɥnJ�d��T��;��CP��
P�tөڪ��{v|�e}ANF*�o�b���ya�sC�����A�P )r���ԓV�NLN3H&Q
��LRR
j��$:��f����T2�l4��]�:o��N
-�.�NV�p)� �į�
c��Q�
"�Q��rɂ���1�JTll�L�4M-��,�OJˠnP�m;vr�]��W

����������z��immiin�'��u'k���I����l\����`91ʒ����I��F�6x�e`��k�=z�u�*u�֝���7h
�h�
�FhD�+V�6
- %��>���
�/m���?h"V�S>$0q�(�D[�4$'Ru�

�'FO�l?�
2�
-އD���9���B��=�
���;�~r���g��u��G�2��߼q}QaA~^������u�7l5��s�&�c���T"!�
u��XY� ����v�gϤU�΄� 2h����RaB`W.�Ϟni�riAu3R�%�҂�y�HZNӑ�Ǎ�
)���Π$���(J2�����88:��r���

����]�L�$�w��L�yb��
-�.K
S��1���){6���n�W�ٻ>�ӑ�*-����֯�ݰ7�-�(w�!�lp3�)xOT�5!���%�K��h��$�,��J�T�T���q�Ƶ��4��V>����֗�.Ϣ�計y�a�4a��""��c�3�R
��y�E�$��C�tRV
R
z�2�S��$Ӧ?��d����F^O��8�.�A8M��0Q��\ڸ�0/;wKX��%��i�„r4�|4�%�^���P�p99z�����T�P�V%��J�e����Z�p���=s��s���\�}�?�;{�
;�N�˫�DC ۢ���"��rYl
��ٮN��

Q�Ao�x\���������0a�J��;�`�6���:͜��
��?ėwT�g���MlqײbGQ�ee%�b��5T@����@�*���,�X��M�h��15��X�f�l99g���7�

FM4�
�������/04,��H&5��DR��a5X
Rp�L��aC�tR
��LG���=��"F�kj"�c'P�
���o��{MTjj9�s?1��u?����'�
~ˮ�y�ڕخ��R�����������

��_T��5!I�$��Ֆ>$&LIl/D�J���*��o
=]\
-����d���GL��<���E��v�Ab�o��s)��*�=�ōϚ�5t�!,�y	,������P�P�1{���M�P��P�
?i��s�η]����]�N
�j
1ikTL,�}���R
柗�T�����/%XS��3���+�$t�J�_H����L<��0WI~��M�ź1b
q�{76+ʁ�<�VQ�Gj璉�y
,QE�5�0���
-*
jB��_�Jd�m�}���R=�q�l����ve�&�Eo��vUp�������e��?�e.�n
*/0)���q��hu
1)�v�W��0�**5��J�*o$��
�e
8e˶���67��AW��8�N2��\J�WG�K�P��
8�<�&M�
c5b��t4�K�\��u�(�Rw��C��-��N�2c���4�W�۰9J
�#�bx��ü
	���%KKK����+
����Rd2��c���G[0~�h|
��:)��m�͞>y���Æ�J�ݺJTj�ƨ����il��6��԰spr��
^��CV��D�?"��E�(��K�&�	%��Jƾ=������["��B��dFO�fF
�ϸW��]��ֶ���_�J?<y�=�t���[7>��������|�����?�Xّ��V��Ĩ���D I�I�E�!&�҇����d"��bwIޒ�Ei�����J�fZ4Q at r�S������ǥ<گ0�b.Q�ck��M#,Y1�	,�x
�^`(����v+��O��E���q_����4v����f�~��v�K
����}���5b'�R�2�S+f(�-��T�תi"�6�}�Β��?絠�����v�p#�u�V|�I[�weg���b��
������+��3�x�#�s��h�"�ts��<@;	��T��Z��o
���w����W/��T�^(>Up�Pޞ��dN>���%O�����������;����BfҦ��1q�;�D�A�#��(��#�d�M,����^�6��
]:Mey�L4u�����41N���J'�%{[6�D��t4`���|4�K�:��ԭ>���R [...]
Go��е6m��OJ��	5� 4�����@
��
-"5�t�(]Xp
s)o/�yr�����+��
���ƌ
Ό��[,G�J�~+*�t����A%v���_R�r�V��t�Lщc����r����
I�	�A�䔴�L�I�I���$*}����9/�_
��G�d.�X
��Z|ڤ6&c��Ũ���$�U.�\����~�k�:�
菦��x߬�S�,+���̐���%}(�"(��I�4�-{��ӷ�n(��4k�<�E�
�]=�|�V��Y�d�P�T��$�o�Hr��Wf��?絤�7��MK&	LU�n%숢BQ�����H\�B��w��|)�h����t.��[�sI<i�b��T����=*���]�����ǧO
=���
��bK�/����T�<<<T*O i�@��P�IQ1q	;Rӳr�L�Z
.�����E�|M�2Wܲ�e���?������W��˷�����R\S���/���ȕ.�Ϧ�K��Ə
=��Lt	c�F��u"(�T¡0�Y`�N�>{������Si��-ѱ�)�
�+��c)2�JC�[[[WW�wI�џ��jk)�5�T�V�N��K�t
��K
˖.Z0wִI�0̆
451�ս[��
;�A*�kמ�[�n�즂��&C
|��!kH��$�AP:Bj�-���"j�A
��	�.�|,>]Hc;Ki4
##�$F��Ǐ��07�i9���X����1��u1�������b,�_�P|祶�w��쬌�Ԕ�d���Դ���]�I�
�o	5^*}�`:��DT������z���%���d2��I8�
�l�r��R]m5ۋ���M�`��x5y
������dz�l�ҨͰ��e����[���Ũkw��>����
:,uvq���[�L���]�$F�Q
��qVi�t#I�jL$%���L�-=}�u��	o0ܴ`�t�(&�<A�F��p�p?8�.�ӧL��dIsi��y#�K
-.��	
-a���
��߽}
Tj��*/9w���Grw	�o�)�2p���������"0(���-�9����U�ItQᘫ
-$�}U�4����1P��8L|9������ݰ�\�z�|<i.�yfL�<��J���K`.�K ^g���J�`
�[Z��0eƜ�v��ܼ����شM�����;��U�
�kj�(}/�]���Ɔd�b�{��'1����D���,�tut��y0
��/
dگO/8���y�&�Ԛ����wۻ�#1ZV��㪵6G�S�A鸬��Ѱ��Q�j���j�1p�3�KG�۳3�1Z��3��r|�l�@Ӿ�=�#�:
-*��
��?�JϞ>yDTB�u��1�*�J�1��3�K9�Y����YY9;��ܼ���k�D5�K�
&�E�Ol$�.a.�YR
�`�)�R��d2xLX��Q��/$#5v���'�QS�ݝ������0<l��B㳷�����K0�^s,����XR
%�6m�B�Q���ڡ4|��h
���g�?���~��27���A����o�ܲm{l��IJ��
e}��$Q��
�
*d~� �R�gz���O�t�
-/�����
�k�t�(�j7���:.�R�	��swq��-N�KCE��St���s��D�
	�R�
 *Y��~�*	����P��[7>���NSq��٢���3_�AY�i�Iv�1�����QQP�b/�W�J�
-H�M@��
T�GAAD at t�E
�u�8&qW����Lf�}?��5��I�}f����s��\�����7i��|��yz���sw���|����Q&��g� o
-�LB�����j����5�6f�FN٘m��)�S�԰���tr0�r�\����m��$Φ̥9�Lp��gk-��]s���&1�x*!�����#��N�:��i�JWw��H�����;��b(�HR�C��F�޹s�^����ޡ�G}���\*����6�LA�mSLD���������<����w��];���
-*}�T"��	T�XP�S��F�LͿ�r�I
��sI
L�
�Y
Bt~�PM�
-�^[
}9���`b.�E����I����zk\4ƒ����Ѽ
��r4$*�j)�#���I�7�
��H*q|�C]�*1�Ξ.��#;3=-%9������HI�$�IyG
��1��)ݨ�OLT>��b/�\jciG�+�ƥ��M
-�4`�����>vW�5]�K�DT� �u�����p��R��`IR�!�>jJ��ы�PS$S
-(����Ci"��lJ�V������
	���ۼuǮ=�I�����
��H�_C}�
�I�::�z�ӡ�V)��O�k7�M�N����j���$�vQ7�f

���h]�L�{
%�$�KCi.�h7o�K�%~-%�s
-*Qo�Jw�J�ߟJ���
5pǕ
g�K��
�V%s�
-�F` ��z{y�������B�"�$��G�c9�R�$5��?��e����چ|�H���8��fZ\��JOK>��J�s;Չ�P1���\��0i<�]�Zv	3�Gp	`2h�P�h�;uC
c�
>j��i��2g7Oߠ���J��'&�e2�JE�\�,@�
J��Ꚛ{x��>�������>�
-a���O�?v$'#5)A�eCTX��'σ��#�
���ݫ��
�;���J-�`7�dfޭ�eb�q��Ά����J{�'&�H����SgΝg�K5�6�F
� <�+�S���<Q����N�c)6�^�b�9ӧL��hcճ{,G��)�~S�$����3��z1�n^��T/X����LW���$''�%'����ҁ$�$���`�S�ϥOm0�_����k	3����1�t�LZL
L���/�}��%v>P2W��K��|d-/7�p��Y(|ㄱ4X26B�i
Ko��_%��η�)�I3j��������4Ci:
�EKW�r]����a��
;��W�� _�+f(�+w�&´[�/���BWg]�_�Ƅ��]^nO�תT���ׯ���.�ލ͊r��N)�b.���4��woK��qԼ;`.��\�Z�Tk��Tz��T����� *=yT*ݭ�q��ӥ'
-�|���Ł


��������&m &�ܳ7>�@R
-�����0I:��1O�����2���v��
-��`�.�s�w
-;�*]B���T'b�h.��0r��͙!�6l� {;�>�%��u�x�N�f�]�[X���7pȈ�� �-wY���S�PjF�%!
��6�/�����xt�T[Ky�4Q���3p}���l
-⽻�o���[�f���i�ƍ>��mK�R'cC��m�J->�Z3�L̺t�����G�G��_�|5����m�ȁ'I��������P��D�2��U��H��Ù���x0:n}h����8�a"�#rϪ/G�6��0*U���]��W/�
b,=��T}�Vŵ�g
�������HOW����T�t)+�p�|dfQqI
L�x��N�>m$�_�����8��[��i�el2i18�ґ��
��{
.���࿐w�:ϥ�[�b"Â��=ָ�\�h���DZ����'McI
%fC��6���;���<��m��4d����M���`���+]�xx��F��ݸe��/
����.�oS�jڡ?4ժ��⥎�����ӧTc�nR|9W9!�`�p��\��HpI��$z���(�8?/�5��"�0�&�3R4oqܼ�P�x.I.�j���Ш����Jc��R���3.m��UUV\�t�LY��Y*|TrGDGE������b&��Q3��RTt�B��
-�pR�1`ң�lB�O�[��;YF�5�4Q�p�:6
�[�
�
��~�[�!����A�K4r�LP�]���2qy.a/�32�LQ�z�����0�a�\��+]ݽ¢6l�T:����=Zx��b�:�Ǫ*���uuh`�`��~���@��
P����X:AA������96*����e�����O
?z���v֖����T��R	߭��I�.�-���2b̄)3�"�]�݆�p�5��#j��V�ASj�I5d9�d,��Hciۦ��`_O�UK��7s�1�r��hD�T����J/A����J�0�jk�nߺq�������r�dggeee�_v��$�L*+?s�
v�z<g&"S3�$	{�ݥ��N$���Ѥ��H
�$�~�`��H�(�Sy)��Q9�P��ZQ��>�kW�\���q�
��`,J,�mK�B�
(�3 at n�'vP�ccg?`��#1��L�J�Q�q��}���+�����C��_<��R���V��z:�y�kDw��:�@]
-�V��vO&j��K.j��W�8��\r@�
�K
��D��	�ԡ=�$��J��5��T��
��
�x��!Q����/����������fĖ�b�GE����ⅅ��b�6m�LJ<�����
U�I��H��,���\漏m)t<��KJ�#.��gg���ݣ�K���Kr���.1|� ��|���<��%<c,%S�e�z���?x�H:��WK��<}�£7n��S)'��D�)�a�NJ`���x�t�T�e�N��՜�W/]QO
���H9��έq��h
�X�4gƔ	cF
���ʢ[3���0��-[J*��Ϣ�Q	�к�A{#��َ��0��I��i��}4���j5�5�Q�
j0�e� 
^�Z*/=q<
��Ҏͱ�!�^k\�/�?{�䱣�
���-�����/�(�+����n�=���*�;H� 
-"�;kA{�],(
-�
����`C�^
�((*J0(vE�5���D����{���f�tI��=����{���=��J�6>=�Pu��^<��i�ҭ�k�5�K`(ȥ��SY'�d!�rIŧ!�	L_x&,N��5���.MU�i7��ƫLM&
0q�b\��@�����K�`�UDJ%���l���v�2���]gM�,�%���K�Va�W�L҂����3(QL
6Bo���������8g�(-Y�j-�m;�%҈���D-�B&՜���H5I��Vn�"iI�a�Y�Ȉ�]MZ���U&�0aX;/��[�A8B9����=��Tu���q�
Y�����@ueu	��ӕ�ԋ�4d���ǡ�[5�^<�������ƫ�/��)��O
�8���U�e�ݒ��]AA���AA��Ia�rEL�
<jZ��c�YٹEpTm&�E[�֫BwMm���g.)*��h�F4б�t�����ܬL�
�KRHp��֭�PꙎY�U\#��X��K::}��D�741��
3�e�
�����^��-04<*6qU���Ҋ3�8f.|-�!VH�ǚ�����/�WGLm��?K��9q,�@Jb�<,$�����V-]4w��I�
�͌G�
6h P�'P��'�R��:�

N�>��y2>�e�=��n�m(�8f��6*�i�+��m�`�%	
-,�BMuT��S��hE��
>�֯]���:s�
5GC�C�9���'P��ǠҫR�˂\Y��/K-X�n4����D.������
-��+��5L��&<$AM�Ĉ���#����nD�ƋL�L��(��p�*_��RS��ể�}�l�����X�X�BX��saYҜϴ���=�5u��H�4021������2IX��6o���&�G�%$�KE�:���G�EL�#�¸�,ՏUHK���Ϟ�F���֞L��tK
�Y2`\�c�:+gp��@�[6n�%H�`qp
-Scfq��������%�nT�@ݰ�!��O*�*DM��$�g�㏭�
޻s�������g+1�CYJOۏX����I�vKBCCBBC%@�,�gRjڡ�G3Of���(��I���yJ��
q�1;v���9�x����T\*�H��5�u)�\
J���kW-�XDY�U\+
ScC�d��ȥ��8%�J#!�YXۍu� V��}��M>�A�">9� U%eyչ�:�ҵ�h%��[Ȁ[!�i
|jen
db��:�R�Y0�¼����'�c=��`�����L���8����`��@��@��<�:}D*u��%R��N?|��2�����}�wI"��$cq��m��m\�m�l�mC{
�
�
<$
��T��+JK�sN"�b�a�;��9����8�i�����C�G����K�J�>���R�]�cT��૗?=G݁�?,�u��Q�\*0�),**.A$UT��̇�YO��~H����F��Hjm	�����Pc��T`Bo$}�؇�jd⢺T��H+iOL�,,$���{���V��Kx,�Ą
�TwLR�ǒJ�A(aQ���
��z�706���
=v��	��͜3w�"�e�(�n��;<R�')��W;&5PZ�j�L1$	����޹g�_|;w�cR]9{p� �
!=-�
N.
���﷕ե%���䍧��03ƈ X�����k�K�%��|�?�d�A��o!�� �^�x�gP����ܺ��_�t�ܙreQ>�5���=q1
-y�,<\*
�J��@Rtl|B1)���r�
K�etT��תNq��7Ɉ�M{��U�v�T`��]ݗ�n%E���t�t�&�B���l�ZOG�,���ގ�
*.�%���o?�&3=#S
���'N�5��c��
�}w�E�$���NU������A	`}�
����k���9���U�G-
����T�b�=z(u�h�� �M�k���w�1�������`�p��R7��.Pi����4G`���;mc'l#6!� �\����
��)�6nwdmm�h���Z��ː˫ʕ�y���qQҐ�m[�9.��8q�X;+3�Q#��������[F%��K�,=y���
]���K���R��t	7���R���5��.qA�L�$�I 0^_L^*u�
�֚Zd2��@`�j.Q�k���:_����0��X*k����
��%����d�a	:!`�+����Xz�z��QH�ehlfamk���<q��Y���E)0X"����Oܻ���
��E%<�.�LԤV|�
�D��Z{͚{��{G���C�:vs`j�nLk�A
W��\**����<V��
C�;$HX�(y��9����431B���
-!�w�^=�/�`U�*:@@����P�$*)>
�(����Z
ܽ�܄R���,���f
/*%)!>6F%���ˣ IP��I? ��
?q*'���tYEU5ǤF�)c���q�h]ML6��d�ҍ0е�rns\��|��V�Ě����%��$8�����b���<VqU7Ê;���3 �Ģ�������i��-D+��3D*�Mܗv�x+�/�742��:�/X�Gs��SF���З�q�u�ɈO�d
�8���k����kW�/p�9�e����������!��sT}L*u��R�?PI����v�ӄ���Y��[�F l#.i���ǩ8��� � (���6�Mj�0A��VW���8r(59^!

���n����fO���`gmnd0r(�p��<�:��T�e�*KmP�4�t��T`*/++---+ UT2$A��T��h�-*&�c����RW�
R�'�"SI�_�4�Ԍ%�*d'�.壴 ��M�SDJK۶"�V�dc	iOİ���^
K@��r����g�y�e�QF&�6vc
�\&M�1���P�V�Q�0�<:.!�+��"��I�ך Sߺs�!_�`�T��}���0�;UMG�F�L��̓�	��}.vkq�:+�08���U]Z�
���qcG�X���#���}�.�pz��?h(R���S�_B*�:��8
ܻ}�:��@��Ae b���C|��圯a��s]c��5s샤�T�R*��k�*���$�$[�� ����Vo%�}�JhO��i̹0Ɯ�fw�,���-��]�����u��{��}��L\�i2�qg��'$&��i&]�TZ^USw����zk;
��]�Ib��Hq�r%����
�z��!Ёr$�D��؀q��2� �%7�оH<Z�_�5�] [...]
-�
��
=�g���|=ݜ�̌�u4y
Uf�B*M�@Si�_M�1
�&"��J��ź�ͭ�ݽ�6R�8u6)5Kx����q�q�1�:�@6=c��%��T��	�R�c�>�{[�&W
�ez�j@%E��$�Jc>�h�Ѳ�%ȃ��{h,uu.]mnjjl�����Dj$��wtv��i��<�I����b�%%�?F�*㒉&Z_
�@]�� u�
-�H9�����P�{��9X�C,�*�X�0��_|N�]kŰā���(M��4o�*OCk��������������Z��M������������UQU
�Z�I�d���J�H�I�#r�E��������%���Xw����ȥ
�K��Օep4�T�gN�u)$�$obq+�M�
��hi�����rӦ.�` J�� t�k�BL,m�J^�J��J/��꠨4<48Џ�
T}MEiq!b	>%%)�\B�Y����s�����$!0�������2$
�I�e0�X���
%#-
��
�D�!���.]oi�8QQ��%(�&����Y�T\�f$J�-��;�p	Gq��2V%U��6ذ�
-[�U
>�7�n+;v*>9M ,�T^�U����v߽|�/x����z��9Z�Xe{���6�W3���WQ{w��y�9�[�/��Y
T���1C��H%���Ti��Cst�^Hm�4n#�����Jm�4�:�@6=�
��ҝ[=�m�Vk+K��3�'ĝ�>�%��WG[
SC�%�@%e���J�
�JޞJ ;QY���g�:�f�a���t����B�6D�$�|}�T��d�H`��Xy��I�IL$0V_
.
=
$q��u	"_5�H^N(�ll
���@�
(,� ���Az�0E�4��!��$QL��J_N�>c���Q�����t����
-{G��k�}�7�n�+J��‚�b�D��0i�g����*��LLj��eF��H��g�8����������ڪ�R088�X]�
������}��J[+
l��ښP]�#���H]�<	�L(�;*�h*9�ET���ݷپ
z��Gh��
-�9���T~JrRR"NRr2 )-#S�C�TRVY][L¤��ӋAc
�Tv��EJ2/�@2��=б�yL�4@���q��d�|r5&ܻk��Р��k���1Qou	�D��UIm��%zˌͬ윰�n���@���	)���K+k�IU��?0�M	V��/����!���O�<���VwG۵&R�����S���
���{��Jk���@�yH��_2T�
�4���[��|����f�
2z�6�F,l#�Q��h�m�c���!�ˠ
���_)KW�ˋ
r3����
9�g{��
k=W9�Y�.*-TA*Me�4�R�S�~���
�.~^�^	�ȥ���7n\��?�m�HMBӔ�$*��B���FsH)��$�0L\z�|j
,��UYv�0?7+�|R<b	�Fc�����Ҟ�&Ou��l%���
,}Ķ%v��4n��I
(�!!.]�����v��*wO�
��[�w�ދE�U����о Rs���5�p��/N�����G5�W.��7�
��[�D\b����
�y>	�X�b�.탺������������P_2�:&o�Y
-�t].�J��f̜�<���)M���J������1���񣇠tR� �\��,��fge������a��Դt at Rv.ͤ
-`$
�I���AАdW1�s�p˷9�(��4�H��8��(�K�)&b���v��
��c��
%t��f�
� ������JP��5 ��[�;�y���y��	���������+Wo�c9��
?y���v|�b�?QO�J)
��h�כ�*K/�g��$�>~x��m!���]�J�@�E�H�,�>y/T����<RIM�dba������%��ȅmT��6:�m ��a��b�m�@�
�K�,�� �/]f�&�=y���
a��<ݜ�,͌�J�Jr�J�oL%Ye	���g",aV"\�����h�����s��6�$4M"0�$R0)��j�H_��zc��#0Z_x6.��
>��X"J
|��+H��N
�������.�����&O
?�
r*YX"P�HJ�((A at T����ohlfim�����v}@PHX������IQJ�g�
.^*��"5�$��&���j��$�D_�a����ܼd(s7Z��\z��%�KW��*� x��
-��I]�:@�7X�����.��6+0zCu� �C,)�ĺ\�d��P�.'� T���[,F�
�J��ԁ�ȆT
��e������9ق�̌t����,Av�0����TU�Lb�Ɲ�~r�aR8L�Q2��qR3��F
-Lb�@�C�)p	���%(�&��N
?�?r�6��x37��%%4xj
�.͙
3g��<�J<�g�F&�+�W{��
��K䃕�W�7��vP�`h��
�т��L������]
P�ʊ
-r2�'Ğ�������`cal���TRR`���{��g,�	���J����j�Ѹ�3�
aaqy�e�F��6��Bi�e����	�hR�ڮ]m��,)��%ş�*j�έ��^nN�+�J:��J�
i*}�釠��$��e����K�Mbƽ����ޛ==��]�tCG��{�B�}&ȣk2���	;c�՗lqI��&)-1q0�q���.u�xۀ�?)!N
-KV�g���j��8���;�2�1�H�E�i_e����$�$-�JEiʔ-K��Ri��v�H$�R�Ɖ������;�;3�>����N�2�����y���y��pU&���5T�L��F~���aD�zb�O(���ҨϿ3v�xeU��Z���,�ΰ��o���e��/_����[�cA��r����/&�u��������J=�ԃH��X/s���ߕnoejw'_�q
�(��A�IJ�
-H񦺴owB����0�8?oO��˗:.��X27�����P�����\"ߗD���J�,�<�J?�Ά�
N
sOJe��z�*������i�RSR.◒�z	�����W &�WV�L������XJ��3����p�[���QP��(�R�
X�K(�X��ҠKD����ָc�`
����tIG
�D>�{
-���-tZ���!8<z{�ރ�N_H��+*���^Y��v\~6��q<��-���űA
.�ڌzp�je�87���SG����9����u)Ri��O��~0*	r}2Ri�tk�Ko�b��ӐT�4��4
�{�&�E�D.@��޺Q[]^B��xrRb\LxH��U.K�J3����@T�)K�{�4�(.5#������$)�$z`rL�Lp_�����8.�f���Ϡ�3��U_A���/����,��]��ڞ�
\�9bIS]UEYi���pɮPla[K�7DJ�rP��>Y[W��ĜB�~��R�����6��E�l�O�͊Rzfv^aqiy%TjʤFEL��jRO$�a��Q�WX
-dҭ���.y.��}���:����b��p�KG@��yC���Y�z�r�%��m�zO�b�*����:q�2`	���X���J�"cs���sT���T��+m�8�'�i0�Ԋ���
�RQa~nNV����4��32I����Rd�Ua�h$�x�
,U�zA��4
�����r^��!�o���Rq!-���=	qx>�~>P%\����H�02��jkii⧥
P2021�2m�� �@����
����ӳ!ʪ�ݸu�������?���p���w��+z�� ����=��*+��L�p��=�l�*y�F*ͳF*��x*
��T�SI�P��ڕ
>��a�;�«%�(��i��iH����x��4޲�Gb��3T�G��ݮ�~���0'#�܉�I��[����t*��*�jrT��Q�$�%
K�d@�@]"\055=�����"�0�;>4�
��.�w$��|�qa�\b�� V���E\>��y���,AA�Ahl Ҟ�>Ie�8�Ҩ���*�R�P����C�=��~���V���
ظ)<j뎝�{��D�@\"����������~T%�HR �����f/&�W��c"�F{7�ҍښ�JIiQ!�K�y��FGl	����ps]
��LpWSc����U�Q� Lc�P%f�&}P�潩�
O�7���x��RKS�;�n�JJ���y9��Y���"����J*8&1[��=�*dR��I�:{ns0V���R����!�`oO��tIRe"3=�v4y�
8�������}<W��:�Å*alh�'���2i�D��ƦV�g��~����}��-1q�Iɸ����۰��GR� [...]
-%
%S
�Ҽ_/rZ�������yKtl�7��
<|���
���+$��B�~�L�>!��c���T�HS�
I���!_Z�={Y0��Ο�7�������&��3��g��s�.�:��;1~{LdXhІu�k�W�8-v ,��Z���jkj�M]��4?%��@�44u�
M,�f̡�M��c��+��>(Ƚ�,�
������bq!�)/�|H$qQqI����0�6
�UR�p��N���"R����?\"�)��l���� �v��c�p>;��D����%��dc
�kafbd�\�������*YN�a=w�����^~��[�w%
>q�9\{��{��
w�*�����LG(�2�ؿ�j&���v<j#zp�ZRR��~��/a{4R�c��S�J�>4�F~�S�̊�u�RLܮ�d�����R2��8�'2��f��s

��u|��'moij�S��x�<Pi��X��Z��JS-T����JK,f;IQ�����db��vJ$�������
(%�yb2&å7
�8]�ӂ@�˂�G���a)*
���I�d7o�̩��F��Z���KP��SY�4d+J���Y)20"�pμ��\V���Z��=>qOҡ#�YQ**�TV��޸y�2�����b&�Ф��w�����CW�&Y.A�f���r�.
��۵s�֨�M��=������P�`	t	�`&)+�LTU��*�ZL��Q)x��_�J��b.
e��1�
-j��
-	p�H,.���LR^Yu�c6
n�t�]]2�w`-��B'ht|���\V���ji�åa�8|p�,2,k�`	z����`���KF�zz"�H�@��hv
����6E�������˹�Ҋ����`�A�*��~d��
�<w�Ǿ8�\\#��
�^)G*��=~�
��C�4{��J�?��P�v)���PB%:
x�8�����L�D �T��9>l�{���JTJ�p���Ҧ ?J���T3��@%��r�A�|�IG�T����H$Dդ>�$w`�����b.q�%�����@�{��`��0O��X�R�zO7WgG�s�gXY���h���(�
Ow�x�
�X.

�B�O�2���W %Z�
��J6��

���t���
ظ)<��̗wP�g���Lv6�Y]7�fM,���{����QA�*�"�  `�	*6��r�
E�M4Q��$���-߽߽�K5+�3
�����9aQ��$��g�:s�"o(�J�q��aדn�0�I��QI#e�X�<�x�vc	@��@c�weyiq!̥Kygs�y�����
�

��ߏ��K:�j*���
I�K�%�fϙ;OB�##�T�d1��N�J(��^�6���8�����
-o�*((���/ "a$��s+1�P�P�'�D
3>5�(��r4H�{��.��Va� ѠKd�%#�P��Z�f����r;�,\=4�TU�����UT�5�QG3��ut�����
w$9=�tޕ��W�7�v�(C���%
-3�����p�
~�b���JU�ŷ�_:���?"�R��ƜE���,T��ʧ��B��}q�J�%�jL%t
���5�F��{^�㏕2�P���(��L���=����Y��4�S�J�����P��%
$�}}�0��M����}d%�����&��c�%
ba��P�g5��Rdx��-���z{�,[j9h 1�$/Ñ�7�;��i K"LbCi:�Ҭ�����
���ghbjnmk���c������m���#��&
M�8~"���d(�ԑ���a���
8�&љ$I�H�O/t|�~N�K��Ki�FK�?�NfC�%
�����`g�B#}
Mu%Yi4��Ksf�CP���+�hh��Z,AT�TJK�7c����c�5��� X�� .� ��
-�+**.$�q+*�k�0��i<x���*�IC\�I��E�� ��1 8���U���h�.#�d��$
���D�.`���^��Nv6���꣹\RQV&��k�T?XX�9�xx��
-�$9���M����m�:��{�P4��<��b&��?q
mMu�J��iI�(��ݝ�T���g���s�Tr�\E�t�\���]t�>
�?��J
�a9�4�*�=���@��z�� �fO*�ƒ0��0��L�׏�D��2�k�L��c���K�������
�X��c���k{��u�.�v����:�Jr�
�ַ3��1}��H�?,}�g@�/_(��
%e
-%
k[��
^>k�7m	��g_L�����l:�n��ԏ
?��!*�$����6�������Q�fלp�x�+-�M�RNVzJґ�Q{A���!�=ݜ
!��t��U��d�`.��(IrH��76E�v��ۀ���T⍥��c	P��j���JKK�+--+$UU��546#&�CLb�
-���D{��
3	MG�r�ѱ��e��s	��J.���9�{4�*���
��%[jcinjb�撦�IUU
CI��x�����e�� SȞ������3��,,��4�0�J�<����qr���R}5�����3T
-޲a� �8��J���vӶ�
��5J+D_�-s
�sP
�я*�Ju�e��.��/H%��S�JK�
-b	G9�
!H0�M�
b"$Af&
��$�������%j.�-d���>쬎�-M,,���HM[E��
-
-� \���hge��HO[]EQNz��
<mgL�������/0�DC�#-����	�}������������7oݾ+to����Rҳrr��]��t���V\���t���Ϥc����k|�9Wj�A.
��O
f.A�>w���cG�FG@�������e��E��Z�ʊ�h.�$$�͓@P�����106�{�v\�^��J0��_ӱ�o�>� hm�G\����r���� I0��(�:aU��>㩊E
'�&)�`�%��K����),�4K��ٷgw0K�%V�f
��\.ih�khhj�袩dn��~��
-�Ҏ�{c$�d� *��
n�{t�$Q6�z�
H$��A��?� ��~�y�n3�J�c#Ä�� �٩$�(D�p�
*���k�����|��F��ҫ�
�=�hmdQ)�@��A*)�KO5*��%�9�����
�D
���I�.���D-6:�&�Ѹ$<��0A�OK�Kq��;�Uk|V�99�B;7��RSV��/���i �%��I⡤��dic������vC��
!aѱ�
M�8~��
��ݼUt���v_��{���+�ץ���I"n/L�x�K(�z�i�T
s�7��Ϝ��LKN<�2��ߪ���P���5�T��d�9
$%�Ó�\ %-+�����k`bfiK���S�?�H��G_�����榆��ښ��*x�𧺺�������0	�:��
ä!,�GL�a&%�8�����\"�A���[��t���3P%Ra���X�|W���/��0[�撮��z�J0�,�m
��V��ݸd�9���y���k�E�d"s��0�8���qT�y%�tN� [...]
�7x(QMǸ�>�uFR�%�0�K�M��R����X��4�*
�`	$c������bS4��K������K�{�^�ik0�)15�$P�����I2�� �DB�]�5�Ҁ�������������BQT�Xd8��ddj)�JEe�
8�'E����{mM�U�wn����b�)C�����XXz'�"��L��By?! =A����Ťw"Ss�.������Pv��&?�4�8���<h{�)�c��~�?Eq�q �
v71���eLLE�C�o����[�[D ���� 
-*�\��
"WѬ��kL\5�>��==���0@���>?�4e1C?�<��{(!vxp����n��1
�j�
-2R��7m� 
[��5`��PN�������������' (4�@lBJZf�����SU���\�����K�I
�f�з�"&����~$Ͽcܯ|]‡Zp�s��Mƥx�]����,/+����ăQ�a�����N�m`�!��T�e�!.I����mC(m���UPV����z��LR)�T�2�~�
�ċ��yK�_C\
A0
5�D�
1���	�I���̮��J��Yv�D�
��]t�9*=.�<"����pKtw��������b)
�
X
-��K�����P�%u��*�K}�������%n� X�q�Ц�H�:(�f�<�'ʴ/�����P
B�w
S����tթ���0����O��bOu���:���Tr��X�*q��%
�����	d��_H$I|L�F�A�o8a
��'.��&�����.�,�eN���

��rs��63��RWU���.!�����B��~�!�.0I0J�zx 
]=}��"�&�
���/*)-?S][��jK[獛}C�G!(ݧ���8'5�$�7��
h%��^���,p	/8����%ty��6_�t�|M�i|zg��&�EG���z�9��X��j�R۩��㒤�֭��[�JHn۾C�8���H� P)�T�~�*q����D/�
K�������\�n���H�&�M�&=��>#���̌@�V���^	k
_�~$f��
�4�Ƨ��
�
�t
-X��&Y��	�djd q	\Rg�X���Z(*�[��;��� ��A��
-��WZ;�����7�=��{.M��� ?�U���HD��Rldh���jV�w�xA["�%
��C"Q$�Mb���R@��F�5\��E.�e�X�XWs�����HVZr\tD�
_O[KSC]M����m[�|�٧��_ׯ[��C���
�(��A	-I%'WO������C�YG�
/;]Y}�¥�ͭ�ݽ���#cDPB'5l�o��kE&-����
>��'r��[
���8��
��ZqЋ+�
u�΢
W������?<d������-����k�2�K�%I			I������N��������Ï�R�rT���;NXz�#u�<�4=u\� ��M�ưH(&�I�\��A�{zPz� %amXI���N�K�^1����
ٴ�aq;��)Q_[u�ԉ�KaK���f�(.iij�����302���sp��
�
k8%=�X1V�jkGO��ᩇ3
T��l�W���t��x������@��Ԭ�"�
3�Δ�gNZ�*1Y��p	Äd��B�}�I"c�DDI�������������=�%4VM�Re9
{���I����x8۳-L
t4Ԕd�$�7oڸ�����O8(	@IP�������?:.)5=;��'+���54^�v������;�'(Ѷ�Ka&	}D�w�ʛ��a|?��K�8 S+:�g�qih���ζ��M��>s����hNfZr|́}{��y�;;�Z���ik�TU���d�wHm��]
-�������c`bac���~� :�W��/�9�%
� �K ��q� $	�$¤Y�I���ֲ&����NTN۸q��;�èg蔸t����d):X���KŽmifqIWG[
J�db�����ߞ�Ș�C���
-i[;A���{H%b��>	S�g�"F*�E<������G���[.7Ծ�*�䈟�]�4��Y�J���c�7�ښ�kV�J
��'�LX&Z��C�$�4�&�QZ٘�h�8�Ec��O�fɴ':�UksS�y��E�9�c���{�9�Y��i��*�Io���sx��g�>�,�K���%|�Jf�6���B)&>)5#'���ĩ��su����uܸ�70426>q��?��D7��2L⿝����`~&����oD^
-�K���]���,/-)���b�� ow;k
S`IS]MEIA^��c��������.-]C8
@��p4!9���	�&��3,Q���
L!��MD!�0I`�cFN���
-J+,�Z�K
�:&��n"� �
P9�RR
b)���
������@_OWWGGWO����������PV�HA�I�xX��b����h�W�ƃ?�JϿ}O�Şj��
���w*�B�,�w�D�D�D�+E�B�(�x����	/a.�Ѣ��x�d	�U{��Ɔ�U'�
�NO���

��tu��25��d�(�B˶|�٧�>�x-f	\���J�>�����

%�>�={�J�i�9G
�K��T��_ljni����

Y���(�
J<]�I�� 
�H,��4���>r�Kx���%X��8.�‰����N츚��eNj�s�� K����Ķ05�����ک�]���������
�
�S[W/�Rʯ�OX"�"X}X�g�U�K&HLP���SS� &qL�sj���wKP�����M�
�O�qӦp�o�vw�]���e)#�����������\2Ї200265�d�9��{��ML���
*�"U����ۅ���W��JH�,1]"a"m"8"D��0����-U�͘��E�/^�^S,�`Qii
����SU[u��� /+-9.*bo����=��D_{�LFJBl����K�*l�Z^�I�� %w�ҁ؄�����’�����
�.7��w����=z�iޠĹ�E0�gA�a��&����o�ǍKLMN���

��wcC]���'�
;,%
��|<\
�ؖfF�Z,U%Ey9Y(9yEe5uM
��m
A��}Q�R�1rݵ-[%:K��G����KL�@�i$"�2�쪠�
-Bi���7:›�
��%�fgpą��,� 5�G���h�R8���ޖm�\222����Օ��o�Mlh��F�Fc�Q�"��8�
��{TD��@,�� ]j��=�&E
]��f�.f��9wʽsϝ����O~˝<���},,,��%��P����."j�����EV"9
�{x���G�T��T"��\���B���/_2H�&�B��U,����9]����\��s9Kh�X�6݂
����|�䣇�����!�m-M
�Vh��h��9�f�����%p	�Qҡ��(Aiρ�G�N���>[XR^U}�jͯ7[n�#�~�%0鿬���?D3כ�9(	C�`��Z������6���s�E�9�i��G�G,��K�pz�l��M�
�V�@.-]�d�R��J]}Cs+;�@��*���*�Yz�������l� ��>�$E�8�K�

%ai��(�.�Ԩ���d���9)K�%,m�X���.	
�<;[k�ll%G���_k���U���t_qs�D-�1�>&��b�!2]�¤�^�H��D@�99o�=҄q��j��E���f��F�KՕ�Eg��S��
��=&2|m���ȉgcal���t���sg5}�4���?& 	L�|���Z2��e��v������I'�2r��\^uP��ohji���
E�p�(IZ�{�D�oꦠ$
Mi�rI~x��7j�w;�Z�o���������������Kp{K���b��;k
S������rm�e˴�%�JF���B�'R):��}H�lN���T%K���~��0rip �$y� E2��8�?�&Qz�J�5:����谂�������x
-?n	\q�)�t��R̦���@?oW���������Ξ�wpr�y�Ɉ޶s����R�� ���@�
�J�P	-�1�>
-�����e0)��L��f�s�ސa�X��p�Ҩt�P�.���.؄M0UW/���[/3���ă{vnۼ1,���U�`gef��R{ɢo��z���_~1�4\�>��q��$Cik\�^@)95-3'����܅��j���jjm�@E��o`�ᰤ(��\�Զ�-)��H�+%#�
-ɱ�sx.�K���)��o77ބ�
-,U��f��JA,��X
-���;#�,͌

�K::�utV J��f�6<t
-��m��������U���*�X�.A_z8�e��� 	��"��$=5��%�SN���
5d"�6ʮ�O�-!ͬ����"#��!l-���&v89����[�wt��zx���G�@�=t�T�sE�D%�{��lL��I%��1*��ג'�H&��Q <�H�&=��1�K#��?�v����s�;f�A7
�p���\�x��� '�t��FE��z���Z���]�l�w
�͙5�_R��}�2i��J��B�`��������Ҋ���R{�fcsk{'B��`�!�(in�H��!�xKLC�ԨK����z
tw���k]�U(�e%yY��QK.:2b]��������������@Ow�J�V���CU2��[@���
W���}	X��R�{��P�dߎ>
}=lhT��L�{�E�$A�4�ЩA/JD�X��bpT��>L�ܘ,����W\KM��+�,�b���}<�]]�%G>����(���^���"6m�
*%�� �*�/נ��T��U"��t�9 [...]
V-_����sg5cbi҄	��q��O �&O��J)��Y��e��_o44��n�������phx�
%ZQ��$�A��9
f֚�Dt�^�
��4��C��&��TU^R�K�����%��gkeajb��@_O����j#3Kk{�����?d}d��]����	)��*5k��,IYB��]B0� ��A"a��&�T�
%��a͞���i�q��<�K�cBRq�)�.K;cc�6�
���p���'x��H������!jkܮ}����.ċ
�D�4<�ҧ��%�K
-����8Hb��0R/�
s���
�t�_���Ж
��`>��y3
�5��K
��N
O<�g����y��|;KSC��?,����gϜ>m*bi��&BQ��1Q2%�t*=+�������՚�
M-m
�����ð�T%�Hb��f
-
-i�/u��
-��u	��� uzw��•p���e`	/�Ә�ݰ䀥� OW���gk
u�\2���
�LL-�lyB��O���M[�@���J
,Qu	��a�$�-%	"e�DG��sv4��ktH��jxH���Ki]�X�D`鄄�-Q��@?oOw7���=����U�����m;v��r:3�����R�Jc*�7��&<�"�Ɗ1S/V0��g� �f�I]��ßokS��ګϕ��f�N9��WܖM�k}�EN<
�պ:K�`ޜY��)ZZ�&M��I_L�6}�,J�%
�3Yy�%eU����ֶ�������70�p��,J�h9�c`��\�)�A[wJu>�P��IV�#`i��u����͍7Kh����@,
�O�����"t\cgceafbld������������ �vH�r@���hݵi��_�o����
|;r	�2��c$"�2��$YQ���H����
��
K�8bC�F��\�n�(2(������.$����*vqq�]�=�|�C�"6����s �؉�̼�Ҫ1��TR�ҟ�yQ[$�X1V�3���D [...]
�}�~B(eJ�U՗�����jnm��(�
�<��I�hEI}�8H�J�w
-�0Ґo;��
�#���A���]w�o�HY� �r���#�6���z!����.����3153�����"7/��Ј��;�J�gr
->T������K�K�'�&�IJ��$zQ"��`G�dr��ub\u
Y)�ùXuI��|J�Xʓ����g����ʶ8��%3�Y�����
A�Ej 	��^�v�*,XPA��yb}�����A�{o�sn�=�%����[p�Vr����޹��)�6N�T���A���)��1�x}rzvފ5śK��+`
ן�|��&�J?�J<��.}�J�Y��\��"!�DU'�-W\Ȩ|��
Lf\�c�
�f��;��!T�ݾy��ųu�N
9X^V�y�ꂜ�d�Z�d���~�0v���mm��.�B&
��Q�%Di9���Tq��ɚz@�Z#F�џO��|�����VӇ�%&I�$�B�D:��k�_���찓vIx.�Z�������%<�j�O`�J�ғ�q�ʰ�@?o��p.-p�?o��y��;/pqu_��

�IL��)\S��t���
�RK_U�D�D`���@"u~�1I��
ɖuI�
�f��ʂ�I�6
��N�a�,���V�eg K�j8����PTa��(U�VgH�;ۆ-���UTV�6�J7�*YU�ĺ��d�M�"SE����f�1`�L��[���Kd�TKϟ�
�2u�|C��c���ٱu㺕��i����� ?/w����:i���NC
K�����gd�@[{�!��%g@�70DA�T TKPj�}��C���7�>4��Qb�^
%I�>P]�tᓰ
�0���g�t؉���\�".���
-���<��ٽNK���)cX��⁥��>^K��\] &�
]\�{z�-
QD�j�)���J��*=�*�_�=��>QO��䌏�2I�P��d��G�[�W&vs,}�XB�g���Ԥ�M\
��P��+"""�T����䴬܂U�6lݾ{ߡʓD�;��S�JV�,q.�0��̮��B�#j ����\�h��0Y�i�>�A��<���^:W_SUY�oW���5���)�UDh��ǢsgM�2q��NC��A
�߿_��ȤA,J�J���X�R>Fi'F�P�xP�s���[@�P�Dku�%�I�F�����B��.Hw��w�V&s_�>�z�s����=:^	Kw9�*Y�
-�K�H`)�����p����"��
p*�+Ր���b톭��#�JO���)�8���
��藗
J�}}�Yڬ.qv�nu�]"?�;q��mi�X‹ą��5
K�c�2Ӓ�:�:6&:*2R�TFFE�Ī�u������E��س�б���\��U"m���$d�rIN&�e�
V�#&Qm�ZEE�΄��	ǫ��n���,��
���3���7 Ru�Ǐ
ػsۦ�U˗�'%�E��{-v�?{��Ǝ1
X�d3`0�d� (�5v¤)3f�qv1���(�0�t�t����j�������<{�����ZZۘC	��
J_-8��&qW�	�����n��
�n�#��ް�䄕���s�c���C�1ٽo���p�bi/fi5fI�VE*B��|�<�%�EPn�`p�R�NHJ���T����^|�J��m<����%\ʤ^
I=R��L�g���d��fZe	K�b鲑���;J0K��R�!1��REGG�T1q�N������b�zȞ��U#�n4�A&VI�OV��U�ćI�&)�� [...]
�
�l
���&�;
�$�R"Fi
�RF���F�
$����A	~a%�H2��AuA܆\�v��v�OXs�J�K����
�`�����nK�i��0K)�uLTDX�R_opi1�%�^>~p*)�b4��t8S�mܶs��#'@���o~�J�Yb�5>o0M��G�Mɘ�+K��*g�e��H4�׫>��$K�Z�#�RS�5`��c	-�9Y�Iz]�V

�����I�ٹ��o)-�.
��;{�tߪ�U%K]��7IL,�+*�|��;R�'�P�	����B�b�>�K2���%���[K/�k�75B��N�8z����=�����K\��̜>e��1#����vv���vv��Pr1z��S�Ϛ3����' 8<PBs/�;�(��A�
��Ƣ��C��l�0In/�`��FF�
�%�
�
ܴ�?a�
LR�R79�Kd�=�nc��`� �6b�2R
	�ب��@_/OOO/o at iiH�2:��WmB*
=QS�2JR�u�T�/���
�&�&�G�LmyF��$�Z��LrD͢���Txz�&�$�&`��c	6;���,K+��fg����%h�(�6PJI���/\]�q��]�ХS���Ʀ�X��V��*I�$�I%*[I$XL�p��4�E�FP��L�p�M$]
L\�8�,g��N��P��
�M���ׯ\8s����;�n`�������.�g�:헉�FKC;::8�;88::l����&L�:��FP�A(e#�6m�t����K@�F	�DPb~��CɄI
I��&�@��}��q���L<����L&OX3.��%�3�>�����
Kˀ%�&6Z�
^ .y�����C�*u�!53�`uѦ���
-�o����PI�%#+��7�d�&�3�*���$�"ɵL:9\����Æ�|�,p�/,����bY*��e��&�T�D@)-N��lD�j��]��x˪�U%�.�a�Q��,Id7gb�3�̿W�^�E>3s�I��8],LB��ʹdK8T
�
~�
-"����[��.����:ZQ^V�y�ꂜ�d�:Z�dт��͘:yb�iؐ!�Q�IN#F����Jyr(�	(�F(����C	P�%�(	L"M����½���a��`���Z�6�`↕b�C*7�>�S,=�a)YF�A��SEF�� ���|}���J���X�.)-+���]��U�D���J�}W�?���s������$I�L��F�eod�#��[��nuf]w�c�/�%ұ'��=K[6�YY���Rjr�A�O��
I�)i��TZW��d���*�J�@%4��*}�a�J?�Jr0�T�*Z�y�b�E.$+
)��
�礞�"��q�p�p�p�8��h��p�3e���� S��c����ʲ(�u��(�"(���TVi����3�̄9@ a�J,�y�QA��Q˶��[E�����s�=wH��cg?��|�ַ���P����v2�N
>�H�RNzҮ�@_��?�]�tтysg������W`Ҵ�3\fIP��� P�(�)�t�
��à�
�z
��@�
JL�/ZP��&������j
S5�[k
-��m\� ���#ð_K�X�,��d��c�#B���K�ޛ7o���P�
	��K�TZUA*��E*��mTRb�߼(`���dIv��L�!�Ѳ���&�Tr.i.[�8�M\Ko9,�R,�`�R,5�V���
-�r�2ҀK�		��		�I)�i��0��˫��4
8|�4v�Vs��J���J*���J��.zKB8�K ����1� �v�|M}�#a�"��oA
r\��s��\��J2����(z
��[�/�;���R��6�
�V/_�Г`��i��)S��nʔ�Ӝ�J�J�W�[�P
-�����WXL�t�-%�^��P����Ll()��Q�
ފ"���m2T�Vc��IL;VÕ-|L!�M.�窷r����KN���

��\���uB	�RL\bj��`*��߷������L%�\���:�ƭ�$e�cDz�0�-�hXG���0�Ȥ��R#u
����%&���:�Ra>Υ�Ԕ�䤤��T]zf�>������$�ܸ�f�$T"29�䠒-.iA�"3��"����W4�R�G�
���q����G�3��%5�6����>���Fɯxd��c��k�.�9q�@cCMy�!'=9���M�׮Z����;bi�t'�ipNӝg��~��;�ҏ
J1q�iY�����(�(�[�Ҹ](Ycvn9�^
"�
-,�X��2�i
�� �w#�� �I;eY��%���,�>pXz�X��%#`)-9aWLTx(p�o��v8__?�RhDtl<
-PPT^���Z�B���ށ�PI�%�x8ɇ����i0IY�$�$��rN?�J&��D0���Ѫuֹ�M
K��C�Q0����+J���<}vfF�N����ӥe ��
-L%�Uu
����<{���m��n�P���J*��&��L��"�‘$	|��BO�����>��]q�]o/�X��
�E��E�E�E�%��0� ��A����c���c�<����X��
�����OkV,�X��2s������ȤYs�{x-Z���e�0@)	3Q����TPzŠ��e�ﰑ�Z�@�7@
I4�� �X��e��OP�WRC��F&�$0Yi�R��z7�,���a�Y��>3-%1ngtDXHP`����??� �Rx�θĔtت%5
�C
�z��]B�'�C��Jְ$��G��GZL��]�T�IƱ�
N,�&�V��V���R����Kj��KeŦ��ܜ�, SzzFFfV�>�`,.�����t��S�.�J�c��B
kSI%��J�7TR��j"�LBoѕ�H"D�Q�BO����~��%
�_c&R84abG�ń��� �%͹�t�&���>1��g
ʁ�p,uݻ�c�|,��غyú�˗,Z0�}��߻�̜9�����6��뇥�����$]&�2
-���P§����4�do�"�^0H��*�d`����`jP9�� �
��L܆��v��GK����a��h�g��&���D����BB�#cb�A��|cie�&��J
�ߓ��W��Z�җ񉜒I�i�Q�d�v$�����D���$���gT�K㶕��F%,
�`]
�`K{�k*�K���%=�	.;G��o0��W�6��Olr�Z
t�
T�(�ԑ���1�zK@�zX��V�*�������{���c=#YH�āI�%��\����(��
=A�:-l,
±Tj���%�F��n����U�%�yn�sf�›
Lr��P�]��L=@��nt���Y��16F3�6�d�k0��7D�3"�7����{T2�S�L�B��M�ndD����l7�������[�X�'X�E,%��






S	�*J ���I4�@��IQI
K��I�Ҙrھ}K�-W�����wo
�;�<�\�c��
�u2��X��}����ZX��=
�X2�`�8,�VU��
-
��rs�z}nn���XTRSiOS�'�\�|�V+����h��@��wP�A%[F�D#��
�ŘļE�D�y�
-=�~�X�f�]r����;�ł>C�a�(����һw�\m59,�X��)�R�0��cƒ��y���ڕ�#���溺�qu�
L�X�p1 at i
�RB)5Co0	P:u��U
-�n���*(I\�
�\
-*Z�{ֹ�|{I5�"<f�@�p�R�Ю<*���!�!k
-L"ɟV[�ݴ�=�aiLK]*,U��
�����x�RDxxXXXxDdT�θ�d]FN^aqyu������ZZ�
��'C%��&�-<Ye��dU�J��'49�LPL�9wͼX �n�;�y��TҴ�RjBs�
-��`OK݀���7)��
lnڻ�������d,0��
������꺆}��v�ة��ܸE��P� ��J*iQ	%a(ɘ$C�H@$LBtZ���������m���
���
���,Dwq`��D
�8�>يu+X��"�����K�l,�&c������@_�M֭A,yy���������~X�l�%����X�RN�������x��

J#J�J�JZL:�0U�I"�^��C�
�͢��ip
O�CPC��S����4�Z8��؄�N�q�X�)w��RA^Nf̥�؝�QQ�pQ�1�q	I��Yz����fwc�!� [���48i*}��Wk�IM(J�i�Lj��d�8���9�VT,�ֺ�.+����
���'ŰUSIMeKt�R�^>6X�Sci_C]MUp��d,�3���K�*�kw�mj>x�������-��l��A%�l�PJ1�����Lb#��D�]����ki�	w�;��҂�&#l��#��Ĭ%qI5�&�%a,���Xj�c)#%>&"�����\�rْE
xzx̟?��s�ע�K��(mbPJH(K J$�����~f{jJv�$.Տ�t��7.ޘ
-w	�� �Z�
���;�L��)�7�Tl���������k*O��?�3����^GWW],H����@H(Bh�� !�AQP�m]wtEf�Y?���+7�����n�J�˹�|ϑ
-�*��KXj`Xʻ����|3>�FԵ�W"�y�*@)6!)5#�N~���Ֆv�������3N���R) �T�䅒l(IMN��y%�$$�9�M���3D�D����^
-��˥5�%��W��[��i�Ҙ
K�&�^s�0?���{7���D��W�a*5�vt�x�G�Q柿B*�����PA*�����++�P�3�zˋ$b, �ʃ��������r�u�#��nE�8
���4N��������%�lW��W:�V��R��VK�W/�����~���w����M0����
��͔Ll�JMm��o�Q�����ZR��$%_&)��7
H�C�2xE�t:���
\
7ҩ����Z�na�i���O>X�|,�o�%�NSX�LKIL���u��U�k׮߈��OL���[P�3�j�m�
.���
<�T¸� ��������w(��V��D3�H�#��0�T�ìb
ȼ#H���Ғlخ�%�G���0,�`�,M<��dk�T�+
����‚���������b�R��S����u�,� ��T
-�A(��+߻��\�LBkqg�� 	�U]h'������h�
��p at .���a���\�-�s1����ձ��HR��ci1�XJK����x���#a���[6���&�~�����;�p(]��P���-Ԕ͵
Mm
�� P�셒jfd�G%&	�����F�e��NT�"�����xکsiY���U�
K�|-�Q�R5�R~��[�8��b�oD�݈��KHLƩ�W�U���?L���?�(����L^(}�ݶ���/��8]L1�x�r��Z��*\R,�XRXK
Kl޾G  �fK�c��P��-�����J����TTTWT\�)(Uҩ���������i��c4��T
-RiMP�
J�I���-h{h-�,���,������,
|mmmk�L�9�����\�-���I�%4�8���͡��X�
%K�~c)%!���
gO
;�Xڵc�֟�l޼y�d����"3(�$$���ͤ�w�x�&�N�%����"��%_&�D�5ny-�le��~�x25ڑN�*���
Lj-|}s�>����'Ks"����K9Y0��n&��������(�T*.%������
 *A����po�J
-X��
J+�=�w�k at 3�l$y%c�qt��8G.�:�V���M�`�BPj��>lQ��si-XZx��-]���O�Xr ��u�զ
-��L��hJ�4��LP��4�Z�
�
����T%̱ ��TR����Ci�'��$2�
�Q$���4
-�Vv�D�����h�Z�����6d"Z��Nф�"`�7�`L�D�8����:���6�Zmut,e�%�E]�t��K{w�ܱ}۶�[�m߱sמ��� �S
J�Yw JB����9MJj�
-�����]��I�s�|#H"���UA&S�^<�-xbܱ�#5|�nX6�D.-.Ji��c�髂%x�gs3O'ɱd2�i�
��Ɇ����x3!
/�fRrj���;y������j8t��瞿|�F��0�����#��LbHR�
i(j��:G��#�:�
-�4�ur.���b�˪Xr9�M�zK��T^�+�����
���F�J]�>R�&�΀J�J
A*��l��P�Dw!���I8�����Y�X��-$�P�uuKmmm�x��b���L��ÀMm�.�L�Ch-�|�KX��\bX��L�Eex�`	�g,�z1?351�`dƒ]K�)7c�G^�뙓GE��ٳ{�N�]����
=p��qJ�ť�J�������ߠ�J����:7ͷ�4��oR-h�h��P-?"WC�C�v
LdÒ����?Ҿ��Z���$,�zA�4F��,YK��Ғ¼��Y����D���4�R�݂bm��\Kk������
��J*X�$��0���p��1.T9"orG #�J��bɴ�Z
q�8�2.�P^)
-K�`���^
KSO
�? X�q9�[�`.�� &<��XaB(Y�Z�Wwo���xrjf�9����� ��TZ
J�����*i|d'a�oa��uC�����G�*
8����l6�*�*��'��d6WA$֢����]�N ���5r�qizfn^�K��y-��%�%��~}��
_���~Џ��ܬ��諗�v�̉��#�C���݃�7dhxġ�'N�%P�OJ�%A���D������;��J�l'�I��� �CD��Ȁ�$�d �q=�U (��Vw�vl2
�
��
&�����%�}���V�Ҩ���a.��RS�R��3 J��E����bmjs��}C#�XY�}�V�K���
-�1&��e3iT�r^ɨb(Y�L2�9D+j
˫���:t&Z�����)�
�:�X� X���lok��\.UV����\Uc��ښ�:�T���
���2q�A*�驤���W�w�P{A"r&AEGoyp%�H�D� DO����
�R���7�
xO�c���^�.�L�����S.������D���� XRz��\=��8������vڛ�X��LM���r����'�
>x ,t�>���a��#�N�.1(��i�+ 
��.7mO�f1
Q�u@)�PZ\@D&�΍�Ʀ*A[���
&t�Q9� I
��;�%`�i�-\�v�.,�v���o
K�O' K�r]Ku5�
-�NS\�����u+##
.##3
�TXRZn4Րv��ۏ��-
����[���%(�4���3��IX#F�*G%#
�)��Ub��;G�N%���ouD*2�.A�{-Q��a�ߴ݉5B’����aoi��d�I�zh��
����p��T
{����0��TN2��T
-R)�R����H|6��%�0ip ��d�6c�~���,�j5M	\19���h���:
D�	�UWom0AA'��s�1���%�y
k���}��˾c��%��������䄘둗Ο=}�ؑC�������8t���Sg�]�o� �I���(-(CI5�%d�+�$�|�"4Z�LT�rI.B9.ȃj�
z*�;L;��d2!�Ȇ%�ɷ�+̥߸[��Ebn�ai��-`�L�s)7�6�	���_������j��Id��BC�	2�@fPQDAm�'�
�dz�w�o�cR�M˾ン��z�ʿz��(r���j=�7ڻz���S�x$��Ʀ�҇o��+0�eҌ/!,c�
=B0��-j-ۉq�dD$�
.@Qe��2�s�u��:4?�VJ�
�P!��9�ԳU6���	����k�Y���K
-�F��
/]
O�mjb�����a1��-O�[(��w����O��!�$����BK�����#�-���f2%!\�.��J\��b��Y�;Ngq�˅T,C
R�2�`.䠏��ҝ{�+�K/6�GŒ�n���;�z��Lc�n,U�:
lW2R.��D��
9}����?�8y����.2��9\�Uu�o�w��G&n��,�lf���#CiG�\
-LL�4AS��FR'���zE�
�a5H@�L�C�II;��L�S����Ŧ��8L
�KԀ^�[C�y�8o�R�������.�
��)�:������J
^E	l����a��@��\ڻH�5{�$���R��m�ʩ��<�d`���s�u V��;׵V�KR
��`�Z'�B�[n,R�o��;�F(X���s�|=nk
�V̺N�R?�9>9
��/B�gk�q�
��~L�c*�ܶ
J�6��m(=ZZ|0'�D�
-���J��ΉH�+��<�,��
8?��CIR`�:O���ꚺz�����V�6�V�=��+�-��k,�k~�N>�?�Kn��Z^VZrB\tD���_N����'N����i
������(�u��F��
=Ya(��=�RRK�Gc�F�!�Y nd�Z0��SoJ-�
6G����W�^��]A�Q[�K;S ���`ҥ
������¿K��2����)X��v��hl�����r���q8�ـRu
�R[��?84:ɣ�X}�Pi�۩������L��$L[�IA���HR%@b
	�X9G��%��b��յ���<�&iڲR-3�D�P��c��Œ�^K�,M��Y�)�pGp�OG'W
��$oϱ]P8_n�T�
S�J���>���Z:�k�

ϤvF9����"��eh�������\�C�������\t���W���U���ܢq	8}{���Cn{({�~VX:x,�W���F�Y��+-�ݽ����ʲb{~NfZR|ltDx�9p�g [...]
��$5�FB�1��
-$C~>��+E����j؀()��;]�	0�B�ݘ.�d�}M
7�9��ъ�a鱆�@?a���z}mu�[�V�2weu��:�R7��𘔂�+�~��
K�q��f�T͸G`��ߧ&Gq=¶A�c$�d :Di�j
�d�:9&�H��VJ�kR�`R�4OZ��E:m���~�
Kf�T,ݧ�:A������vwuuvvuu{}�r�8��L���Z�ޛ�d��AT9��߀Jf���D��۠L\�G'�46�L�b&�43��D�u�Wp�-�B0;;+33###]w2223����9�pe!���]QUS����.Q�W3b.�Ukh�F,}�K�74�%��n,ݛ�Vƒ��]RT`����y!����!gΜ		9{>4
C).!I@��������

��$|��tW�S��~�a��MC���+O�R
-LR�
�*��SOKUě�,8��2��O3
V�� �O6QMZ�5�
Ki2�
qi¼�ϥC�����Z�҂��0a��
o��O��KG|gm����vL����Z)�X����N�#�E?�P҆����ICb&�6��$U2+����
�uD�`�`
�
�
�ֱR�la Q��MB
�%�k�z�3E�{���K��]`��'U����
������$�q�]�n��雐b�J
S�J_
�͘����d"��nN����["'��,G!���8�HOKMMIINNJJJT����������4��`�;�%:/R��c
�~1��(�wm�K��3z�|Gu,	3�
-���=�ݹ=�c�c���帖����
z�NhXxDdL���i�WlJ���N�phlrz��
��
I��>Q�sG��V�ӗ�eL�J+�S��|��]��f׫ dPT��;B����&�Ⱦ"�NM;�aEW��Ҏ��`n�"����Ē��-���ҬĒ���MT�
-��
�]!>��F�R��Œ�������J�u
ͶX�9h��&GL�ɨ�I:��u��Y8GXG�N��U	��`jlni3q�
D���*��Y{H,iz}�F�ְ��p{���ߋ����
*��^�"�rU*mk��|L�.�
%�A��s��P��.
-D�CġD������ LINB&��_��+��t)>>������^ ��p�Ja�rVk{���o0�si�.\���WJ���ل%�K*T"��������[D�MO�Xjkn��(uگ�f��$%�]�".���_�����PJLI��P��4�tx{��j�=�/T=�6��CiW�~�P^Q�T%$���s/@�q��
-F �E�hr$$�PB�;���N۰{�
�دl�VO߾)���-I,�
�����}�j���*q���u
	
r*M�l]�u�^���JVP�QZ�8�٢.��I�dT�dL$ I9(���#��@�Q�#�r��{�oA���%8��Z�vT,��
Xz�ֈ�te��
-.

�� ��C#c�-���
S�5}�t�O�a������w��u6|Rr�H{ɯM� Jȇ �
L�<��J	I��9�0�
-9K�^���������C�FEEE�� ����
�]-(,��g�^�����C�S�f��jSbI&�'}��d��_Z�����S�mR�ɱ4�c�����]Rd���JOM�
.��ͱq�RӳrlJ�-
݀�����w�?Xz�DxL@����v}�%��<�t/q�L�:���Р����D��x���d�e�H� ���n
D1��*�DکV�v{��-��W�Yb�2�
=��u��9��$?�
��s���������OC���{!1�a�UU
2�w���P�	M��y�x�Ij����p�+�Hb"������;'RGj%ĒZ�
-�l�T"X*9�4.MLM�a��������΢��%������*I,
*nM\
-|�C�#�czLꊦ�3��~y>Dy�A�ϻ�X�Fl��(p��
� e�^� mw�,[(����%ј�H0���bE��<缍݅E�I9����w��oF��㜨�n9O�/�J�@�w
J��h(�^ͮ��:�Cy)�u
+)a"!
-�V����Ԕ������INNNI��l�{�L�}&Lĥ�rkUM��Is���?���5m-�x��<���;��,9K����
��Am,�\<w������q0}��=W��}i̇�r,E��j����	JZ�-"����)ݿhV;I0I�I"�h$�R�xK׫ eHf6��!�`9���;�vʆ�����Eډx��h�
�J��7=�iX��ꡗWSe�VLe�8e��6�^K�x-#ו�������}�>w*�P2�[��
�j��>6�`��:$�oH2Q!�q��;U���:�wvC+&S��\
IuJ&�%j�]�z�P��������lXs��t��������������(������W�3O���JA��� �_J��F����D"
-&�\4�,���,k�v�QjJ2"0)11!a#N�<�3!!11	�����
���������\*)��U�54�[�:�zP���V�O�4�>hc�~ =艇���Qu,U[ˊ/�=	,�de�e{�#��
���
P���:����k(�w��&�|� S%�L;A߹�|{
�t��Q?�$��Fѹ�L�j���qHěH7�6�
 N=�
II ��qG f2qUХ���w���߅��)���tG�����

�l���
-�J��^U�K9��T��n#�5h�ʆ�YT
-JJ�xp_���m
�ɡF$D" m�ƁdI��#��D֑�Z�4�`�
-�r��nnk��4��?
-�Y���\���[]XLr��
q�~:x<����0u]����b(�hPbLj
ǃV��<��R*�e��=�C����Ƞ�(�Rm�����v҉"̤lF�9I ))1a#"06&�d2E���i��`.
"�p�t��K���1�\�J�\װD�zf��Lc�:7�c�!i8vO?�k���.�a,Qd
HOO�IO?`7s�jPjpz��>����,��B�J��Jwo7�f0I��Z�
�q��S!>.�e�Ǐ2
V��#9�
)�&
M�a3x�
;Ni'[x�h����s��{
K���X��X�x���8�K�Uv�
�n����kp8�F�^L%��&HB����f��R$D2
��#�:��L�A�6?/G'��~�Ms���❔T�
-�	��,��
-�iKJ)
�wQ�����6�N~
*@^��-{Ɉ%R
�~dh{��$NOo_�o`h�A�/"��O
%�:��P��z�J_��B�j2��Nʲ
-����PV�/'j�����dRn6y+��g�X���G�1&d`dDDx��������HD�	i{�P� &L#��s��\jtzZہ%_p,����ACC��X��z;Z=M�5����3�r�یCf���f3�9K2�R��Ճ�������e�P��{LW�y,�5���IJ�V�-m?��7J7��AR`�<R�p�	@�
2�P�9���ݯ�I
&�vUr��_�k���ٰ�Q���F,M��륥�/� �jkj������72��tv����>%
�pEa�O�Rp(��q��5��Oz�Z�y������!��{'K �"GƉ��d�t֡��u ���"��L�P"X���
ǴU����V|��r�~��y�L�؉q�7
(c.1���A��޾>b���A��!����5Dw��0O���Jz(�S��1�ҭ\U�:�Z�4��嗋�?w�I�C̤�������6�3�"#�7 ׮]�&,,l�z�Ϛ5k�����	����D=��s�i��\�V�U�+��*�D�� [...]
-�
z����J38Ai���t#��
��*�й�2;i�"߶o��DB�ũ*�
�
-�iG�5�
�G
���Di�KK�|N;��7�ޥ������g�j/z�O����ĸf9<:i.��������748�\%�>�JX���%᥎JA��s���ۇ�}U����
-�I���]�����H�d�d� �!��+މ�e��o�n�.�D�r�\*�\^i��ðmiS�����Ь�D,��X=�˷i.�K� Ӏ���������u�.��9m*������H%�p
%JlJ}݀R��Q�CI�6
-ߡ��I;I���q1&��z�ADક+W�X��X�r�U߭��^Q�„��d�������켣<I(�k
X����$��Wo�<�d��y,
`,�y�����Ǐa���d���ͳ�^8�B��#n`x��@Vn���O��i��J�twq�v4�V�*�.
&�s��Z �����ւ�Pa�w�X������ 9@�0E��(5�0�h��K;`Π{Tk���:n���[�����K��3�aitxЇ��s��v69
�|
MN��������Bz������4���P��V)R�+�
�
=Ba�\v-�}{v�&�PL'�s�uVO�*q����
-AӖDq)�z�%�:�`�e�����}��}#����7�b?���$�0

HC@
��J�
�-6���T��4��´���A@	����q6�U�_�ΞB"�e#��!��@RlL� l��bp��eK�.Y���Y�d��e˖K#{��	0�Zɩ�%��
Kϥ�
-[M�C��
`�u�h ���
-���x��z���ݽ�c����D�--�N����[���,����"j��	'�t�;w����ߠPRJ�!�e�nj����U&q���
#��jt�xDن`�2��_�?���z�U��U!Q
�#�v��[��;e
�
�3nោ%�K<�cid�������q�\N>.��������q�#y7��T
- %����J|U�f�#J.�L�5BA�*�:!'�s�V�
���*�+ܳ�?4�P!�Khܠ*lT �P}>�?�Pa���4
K��R�l ,��.� �@&:׮��P�Q�����3e��k4�B��_�T�B�
J�e0��R%�|
%wJ��\
�KN�&mۚJފ��Y0�J����E�.\�`�����.\�h�7�0��갵�6DD�b1��K{���y.�<s
�U�;\*���1���#�	q,ɟ�^��ϟ��4���>o���jn��Ϟ>y��XaaAAAaᱢ'O��~���J�g�̾���(���&�5
T�`���h�51&[�!
-�(QAA�(���̈�PP�P ���1��Ȋ+j/ӫ���s��[(�/���½g߽{�Fߒj�C��M@��
�b�nTgC
�Jw	��錴T��}�ё�y&�|C��x�t#f#�t2|�;9�WF��v����`ҵp\C.����<�d
�5���F�%%�T,�⊥f��
s�����j-//++/�Z+*��J
-
�T�I�F���jTz!�
�A��֪Ӭ�0�{�`R\L\����!��t��H���8&�Q�"�p�#�@�/Q"V)�.t��]�%,ۄ�d*Qy�ŊP��!���6���
Kz}\��E.
� 5*|��}��K�

�8


�I]7zz����fS鵩�4J��s*=wM2��Ҁ����PBQ�΀�����#�.fͤ�_/_�9�!�5�xO!����|$����H
��h�C�Z���`b.mݾ#��ҡ�	I)�̜�3��0L����#
KO�&����b,�=�56��TnS����I8�&��s�4 at I7ߴ
4y 3(=�A鱄�/T %������\�ϋ�.�R���΍���-UA$J7��MQ��*�"�`9=>S��
�†�A���Zx
Z�n�v��t���X�|#ƸD�}o!�����N\��*++***+m`������O">���_�J�g��
J?���[<%�I�U)����"wT0)|���m�R$�+%��qL�CbM'�X�LK��T�!���T���G��Ai(R��+v�ܑ2kG�%���%�K�7�%���8]�I�R_��z��^��*�R�M��K��=
��
��:C�[��b,�T2
�}1Q�w}w�x&}�t�B
-CA$�������3Ew�2q�{���-X��s)($4lgDT̾�G�'��iX��گsf<T�f�󗤒Tq.2�%��匥��

�t2))111�drJj�%��'
^�@���z����y�Ǜk���!%Z
%Z�-N��t�JNL��p�~fwn%߀$jܒH�GH6��e��h8F9�
ZU�$��U�N��j��E�­�յJ
�1��G�k�Ý(7����$ 
,a.1��ԀLt���ںz
J������
-�L�b%Z��H�49�C��f��H3��}�I��F�dۨ��o�A�qT�ܬ3�Ҵ�P"��Z�f-*D�VR**:�����O$��de��d����D4k=a��}�U�W#.�
-s	\���L|IJ��U(�G"52��(��B*�ی
%L6 Ds#C�b	Z_Vz�Id"�Ҟ�
����I<�-`$͜�Q
�RN���3	g�<����g���pN��f̄����`".������[h.E��>�����-�D�B!�0`�M�62����+c�2�z������s:3ݒ������z*-=#+;�r�Bi��RK[=
CҰ�t�n*頤
a�R�zot!���
v~�
�tc�R)�MLڶ5$h#��72ߨqK")*���0��A�/睮*@�
-"�֩i'[���j
/
���䩅���3=�8�q#b;��mW[�����:{m�>�v0��lj�\�T`������*Tz(=T֭R$�*D��Q���%&���W��L�+�&k6IUJ����'�"2�D̗�n�5k׳RX�(v�\ T����L]���`I7�������>�%ɥ�� 
B
%@�
�� P�5k�F���L��p�Jo$�d8*A ��Lj
��e�RN�%%	�o,�-��3�x&�%$N�,�c[�L���� �o��/��EX��4u�?�k}6���b��Kȿ�q;!�Tr������	���F���T�ƒ��D�{<��:�Z K���٧33�-�4�Œ��	&a(�E焹U(��b.
f�w��#�Ґ~�0
���56�
J��t�D�����3i�ȷ9�?�%�k�@2x�
,����8��GVA���>���I�vZ
OLs��yn�v�>(�442,i��H,�ԝ<������:�
��I���V��6��<3�c$TJ�ݠ��)�D��>��E4nSO�
�mK;)xӆu\#H���$�Lir�#H6��9�J��b2�{��a0aڲR�T��Ɗ�*��T�u
-.jǦ4��+����:܋Ĥ؃A�K S�tD��L��A�e*�R�-��Y:�P.C
-��G02�j�RB*ZR�9�/&2��Ҧ
kW�b����1�f�J
-��0��T��Ǐ���z����x�^�.S�L��ϗ}���K�����
{�����
`�RYe�����N�	�Cc�!��|,���J�gr���淥D��4).*����2q���sr�
-��ϝ�t��P�F3�t���Y<Bɽg�@��: �䨯��t+�1T
-x����[�� �� %�H�	�6�
-���*�1Q�
-�v �<��C
���[t-|P���pi�/’�Q�V�^��%��F����hlt65_m�(u���Vi-�A%c�К�J�n�H�*EB��@\�(r��I\#/d��r�L5��s���
i
_l&U*L���TpHh�ΈH*,Tfv^a1UEU
fmKk;lt��d
-i7,�\���D`� ���[�$��Pr�@F���QiX�
C��p�X�N�����c������_A߮[�DT���>�bc!	a*�@//�wqޑ�~��L
7�}A&�G��g�K�.�B̥�-�wDD��?$�TP\r��V����N���o�+�.$�J�Xc�� ]%S����g�
-��rs����c(��Ymյ���� V��QF
�
 w��M��SJ���R�L��[��$�7�n�#w�1�c
�Z���cL;��0��ksi��b��K`�;�~�XB������\jo�����ijn���v���D[7�M���T��?ܠ��PjjԊi���l�o�d��T"�O��f
E�w5� �eЊ'�¸����i�Jm��e
�E(�%b�68�ݰd�,��vX,=q�����n��n߾��$��J
q8J���J&S�2 /�)�	J
�
-��������Ci��_��!���-�g!'!
5v��1c���pƌ���e^�	2�����c/�]�h)�\�mGDd����Vە���֎��-��<q�
�/ZKO���U��Zw�S����VQVz��9p��� ����
�t����
-[�XZ�R*�B�(��=C�{
����Vܽ����ҝ��ɥ�Ё��Ȉ�a�!A�Iܹ9�fR��qS�Vk�P���WUg���q�d4j4����DcWĮ�bY2VklT�%�����4���A� JD
C�q��
�Yk���i���h�L2�ky��/�ܳ�޿��h*�����C�骂.�&NB��T�-|�l�r.��X2���n��V9
�
=D�7ܭ�Cs	\*%0]�J�JL*+�-�T��I�S�7SI��u�f%��hE��٠�b()��X�&a�ΔM�m���*D?M2�H��2��V(,՘qz.-Y�|��4� T�� �u��F��*L�dwԚ��S,���
�{��F��L2B�8�
�1��JD*Y��2
Ԑn~�.C]�t(F0f�%š���0o�-׭^ICi���3�I&
��
-:�EY؏lՋ2�G�
���.���!�_L&���P����N�Sy.-v_��s���K���BãcR,Yy������b,=�
K�T2����6�
-֒%-%)!>.6&�"���K`�R���HBI�	�Dm�x|G(��Jo���g���D���t�s���ڊ��z%J��$�I2ߨq���T�2T�n-GO.
�����H5�f�-|
�p1����C�Zx�
��۰ɽ1F�
K���jk��*�K �87�I�nWT	(�c�꧒��{q�V�h��
J�
�k
-��H���9���l��ⅴ��IN�lG�m
i$�d �˃�O5�
Z���:G�u#�B0��.X�t�jO�Kꨟ���&X�'��t��RI<�VXR�s��DH&��Ʃ�N�?>����UFc9�C�CD߀�r2Ӓ�c$�J�7o\��HCi�����-�$a,��ݻu����c�n�2�	�"o
���.�
=n�Ҭ��s[�d�*������þ�RXąK�����W����&���Xz�m%xZ}�u
�8`
T�D!,ee��&'%L����'$�,�ٹ�W���
(���0�
-%S*YA�JM�2J�li�	�0SC�N(�{��u4TQ
-\犥��-�́4�B�N7���Ԁ
R��M2��n�����
k֩s鸝^g��_�
,����EK�n���T]U�`*�JK��ʉI�U5*��^	�/ԕf��J���=:�ѨP�JP�"

p����f�#�I�N��
�(%D�Kƚu5:Gժ�����a�*���s[�s	B�=pė�CDtl|R��麦�R�����^�Xa�{&��D`��<��$JJ�XA���6P�E;������
Tzc
�O��,�Ý*@��(?73=Y�Ҿ݀�O���`(!�Ə�LB�H""���Q���8�
|�P�J�"sLL��Xߌ5f���i3]�-�� Kބ����"/�%�e��#�ʩ�56����d��2[^jc�$��(�\���\JM��/)9������9�@�
�`��U؛J���E˷J*K�+P���y��S'��
�糓K�NJ�����$��LR�M%���
-��� =(�w\>��n0�X5�&�-|���4��0��
i��M�d���KM�
�wk� &ynW�I�5w�JM�Ʃ�[�dJO�P*�ĺE���"q��Q�8���q�p��c�PG
�撙9G���J'�WC�}3��Q�K3]����
�'��=��?��G��%�Z�4,���,��P�}�D���$��2����$J*�D_1��v*��Q��JB?��D6����W��eII��
:��{x���J���/���Ҥ	�F�LB
�� ���,����·��'E�B���ջO�������ߎ
7�y��s]����6o��9p�/ 0�|TL|r:�t�Z�-�W3Q�q#V����6���Xj1Kw��J,�b.Y�&>��i��Y9y�

-��r
������	�l�M�R�
J�Ԥ��舰�����G�����-J��P�=c�d�$%��x�t�bO��E�w������v����[��3���c���(XzF���?bM66ܭ#.L ���*bRm���4���2����]�drQ-V��:�K���u+���ߑ�{Q����
�D�5M�VR�>f�Yk&��bk]��b0�B`�R�p�2���bwj�/o��P�Bãb������b[,���E
��SI�%!�
H&�D`��M����L"u�4(��B��d���N���^�
��O��TB%E��l��D4_��dL�t!",��������ҒEn�\fN�P3
-�"&�\�[�Y�+vT�N��"Oǎ
�N��c�Wg	��zI.�\;aҔ���V�v�9p���3gãcR,ٗ
�o�ݮ����f�菱)�G��J���1���t!,ݩ�$,]+.��������a��ӱ I�9��
�_���ϵ��^�]�ݩd�o<Q�Rqa~n�


p�������!�J��9��S&M
/;7f�u-�بBG��ȡ�!��$Scڍi�
+[8��6��k�%�-@���k�V���q�0��a.��LD&:��5̤z@龀�c��jƾ���C�6A)-9!�BĹ�3\$��ځ�j�=;����� �d&��
�tb�H,C�#�|NBri��d4;9�V�ݸ���A��A��.�%��
-I���Z�%�v�f,�ְD�G̥gO%�@&>x���utP������N��
�~}g*)��b~��gH��e7J
-�s2Ғ�.F��>�GPھy�@i��\�S�'�PBK$�D��*��يS�:�|�@�(�`\0���C�
>r�x'
K�x��{��㧂�".\JJ�D�+�Y^A7����%rR����b�X�B��a�� \�������"$��0�n�ݪ��Q�$3WT�����%��
-յf�Rb\LTx(�������x{m�D��}�׹4T�5&�s�M�:4:t�W��P�U�κ�W&�KN�S���-๴^m�omῘ�p��d�K��'�K�1���� M5x�e&5�kR��D���Tz'*�\R��˰Y�[C)
P�uKE�g���M�q��A��@3޶�$L[,۾}zۓ��9�w��0n��}�J�9z��.�K�Ó�î=4kO�=�`���Ē�WO5,���Q�KB1�%�&��
 ��u�M:()_�N�v*��
-�����
-ج� 73=9>&�\H`�ߑ�
���Ν=cʤ	cᯡ�h�`R�^<�>�B���}ŖB ���p*~ ��`b.�W�{_93`�c�ƭ;v�;�{�tȹȘ���+W��b,Ց�~z,���`�c��_����ٯϨ��,
��g���%�Lu�FQƆ�hĆ:
;
-�&�H��(�ػ ���{EAD������]�g��Y�f�}ι����0�5��V\�˻��y����;I�o&ܸq#>
�H���&aQ�Lw�K%���V�J���~<6��(]<w��у�vm�
�a��e��f���{$�A�I]YM�����FSh"?y
��R���k��_���,�p-K�D�)�n,A]z at u���$^)�T!���J�﯒fh�����)���(
;��vS$��Asf����
��A�@�l�$ؚ����Fldƛ���&>��}�p�b�����!$
k�Ƙ�;��S4�[�%�mƄ�Y2�]6/KF,�SX�O$���D�9��&QQ�Ѐ�?L�Vԫ��d\�*�a���6&%�]�x��c���ܺ)b͊%
-J�C��ؿ/%�|6��$�[_�f�Z�#�X�F���� 2�&�D�P������o��a#F�wv��
0g����7Dmٹ��1_l|���
*Kp򞰲�/��Ԥ�U�����)����RvfzZJ�� ���߭��h���D�\AI]�7��l�7*JO9J��N�8rp�m1V.]�08pV��^	�Ǝ�L at EU��5I�o���H��y��X�_;,L�:kR�hH�
j
-_�fCO�x
-G�(�WR
-�����ե{��
��Mz�CI�uǵ�*Y�J���޾eS��U$g���\���̸I#�GFQhhl�hgռ�2*�u�%��v��
�A�������Ü ���R4�t��)Y���ʈ%
�$��T�
Xb.�zE0�L`�	$�I��k��V�҇��AUzAU�^
ǜ��ۉ�Ν:~�zt�ڕK��(ARw��лg(J6x�$Fm��x�<:��^�\�Z�Y�\�v��֩k7b����;cnp��k#��������!�AY��e鱦,�M%�$��y�� 
��s��.��"L��? )L����/(,�c�P�t����ͮ_
�V"����X��
r�2R�((
�<�q=���ysg��x��=t�#U4�#k������:m�>�=y
JV�2�k�Wq��%{�‡�>���S��%+ְ~@�‘�S���R>�N*K�K��^e%�d�S�<,�
-��i��$	��
�k
-J��"֮\�A���dwef����I��$�L?2��i؈��
-c]S1*�Pm�K x]r���5�7 k-��.Xڣc�t�Df���P+KZ�~F�H&�^"I�(iP�EE�r��W�����$
g�*UU��܅��~��8����l\�j颐��
-J�������R:l��@l�2{� �v!L�Z�/���j�ަS��1N.n����
��tպ����9x��ًW�nJe�6��;��Ԥ�>�"�Ϟ
�%S>�%r)5%%999%I�����ŢTTR�(=Р����U�޷�����0p��tKF)z�����-�3�o�W�	�FS�����ޮ{�.��I���X,���<��?��v

yT�^����Y�S�hL�"�/ѧpb);WM�%�Cթ,�XR����
-d⯊�$��O%���{��n�/,��a����[�}��ې`
$ԙ��m�L�@&�R��)����J��ulZ�d.�t�bۻ�����C×��X�t5XJ�d,UVU�R�� =XVIǒT��K�1���HҘ$Pz�E�^�T%�Td��΀=��z����ݱ%j��e�!��L���䬠d׭+��v�^-�')$�b�����@��A$�L��W_C]j��ڦc�
�������^>���B—�ްi��}���:��\�
R�E�xW�JZ��
x������RYI�]�%p)3##==---=
Hž��o�����JA���oߣ*�_����Je�|w@)A��P�\�j����|�z������^v�m�I�uM�D��MPd6�8�<>3�v�0�)�'K�X����U�jMᵱDu��s�%�	^�t��L���AI�J����YZ�#
��[@)Q��[
$��Ǝ1L;30	��7j��B;2
�&���+!ؤ�2�D]6b��	.n�Pkg�
^(�t����������XRr���P'�d�&����!���d�R�J�J���ZW�2� �_�|�����vm��X�bqh���ޞ�����u�dӾ
�tX/a�=�Yl�>�c���цLؘ`�`��.��ֺ�m�q��#�N��1ez�����+�F�l�}���3rY��ƒ�B.K���Q%�,��^b��n�� /7`��ė����&BQ*-��'�$V��Sk���BI���nң��PZ
:?p��n?LTCw�
�	ڷ�dn���X�f
-�?u
,+���
ݵ3H��kI�Ȓ�ŸԖ��Ϝ�ҿ9KT��K�
�L@�� Iz�
-�
-��*I(����$�\Lp�7�]�pV��[
-)H
�3Ӛ��D�V��@�9�Hs2��
-�-U[�TkHv `P�k
>r�������K�jO��w3�X*,*-�TJ������Sb��%���l�� I�$
J��ի���һ�S�rUJOIJ�~�™�G��
�n咰��3��Nvs?�
�
�]:�X�mE	׋��琉�������
-��V_),u��է��߇�7��s����aKW��ڲc�T��LE��(��*)C4.K���e����nj�����"t)?/d���$����Ҳ��{U�
�d���7�O	����9�^�(ma(-
�;������e����w��2��m�I�}k$�1��C�
-��YY5�N�p[)��)<�.)�Y-)�2Ko�%�b �K
&��$0	��%e.��J�*i�<4%I$޸~�"�tx������"H
���g�9�\s�$���I�Y�L�6��
-VH�K}���0r�x�I
^Ӵ,
<
-,]��������[PX\��ښ҃�J��.!L$�k� ��d�RMU�^�ߵJʅ4�JŅx
�c/���wǖ����-Z4������4��Թck}-���(L��b$�����c
F�E��1ե/��u�V
-K�

1z����4���B—���޶{�R�2YY�E���[�EU�w��
�RUeEyi	s� ???//�,0�I%e��U��J�$����2J"	�/����K�
-��''%��w?-7%@i���Wg��,t;@�e���j��o�y�M����v
���@�vM��k�M��jN�{
R8��ǔ��S�Ԅo��Z��%�IyO�I8
�����/��*�,
_$�N����l�
�(��(�
-���`#X�]�5��H�lA��"A��%b��-��Xf��f�����s�3�wa�ˋ��߳��o�*�d���M2	VoS�UP"�6П�D_{;^�ڶ�zӈ�����⨲"��V�%,�4(;�����!X�E���� ^Vn
�R።ۼ��Ո�X��E��ä�A��J�oT���œD���2tmUJ޷g��M֮�X�`N�4����~�=|ٯ�R{
-%,J�Ip�j������D����?K��
�\�


5n���-_�m�F(K{�e��\��
�q*�e�T��*�JK�!� L�~��"���[���Ҳ
-���P2U�^�~
-C�_QL�@�¹��9 �T�Ү﷈P�8v�����t��[�$��~"� 
���)���
-T�kgf����Y���[�Q,�@,AT�KL@&���C�$�D
�7��J���=$��&q$��-�����&"ѧw���bf�\�&glmĬ�Q�\jނ�������B������y,;7�����?�R�oR6���KL�L�M�3e�1(�P�=��vUU*����U)%)a����Q߮X�h����G���t(�(u(���e��_�I�\Il��g�N�ڵ�=��"�E�T�A��
KV]������y���Ј����V��\,K�!�%�GOi��1������Bk�K�e%P��n��L�


�ODReRy����U��PO��B��m���K�����u4#5y�����#�B��
�@�v`�ݾ
Hw�
-&	��cU�q�:O�'��
�p^����	�>w�a��+���s�d�\"`2I��L�L��3(i�?Ղ�bQ��M!�]�ШI
:��V�Ҭ0�҈a�nQ$
�l{t�E�e&k����+�p	ET�~*'efŖE�k���`pȘ	�6m�߽7)%-�x��3�LW��p�*��Q��h�
��rI#��I��j��P�B��L%i�^�l�U)�Rjr��-߭_�n��)nj
����ҿoo�
�)(ѢęD��K�
֪ů!�K�U
2,Y �l���wq��2,d�i�s.ce)��qȐN�]%
Q
��
�P~}�[D,ݿ�X*E.0�w�V�̤J
�^�����.�7����C�YS?_���},#�
���� �� ��%{&�m��� ��s
M�#u�p�:O�'���\;n�.Yۘ��
�‹�dᦱ$r	��d">R&!�~�ҿe
*������GRh�I �6Ǯ�P�:	�4tm�(��xQb��a02�O�:���"'E�-

-�����������/0x$�i�Q1
K�G`�����R+؃6&�B����#�
�H�$Τ�C��J�8���~�2�j�*���Oع-.f�ꯗ.�>mҸ�aC|
tu�koۣ� %�(�L⋥{�k��Ÿ�[%a�U����Z�����:p�_����Cg@��,�L؟�~4+��Y���"���~Rԝ�H�ߥk��N�R%�ҝ�H&�IZ&U
J�ȥ��}�~Z|�:�ҙS��3�&��
�UnJ�C'�		���rwu��j۳{W��68�f�f�iQU5Uv��!�I�4x2v�Z�X�ܙ��-���\"`B2=�<z�H�LB(=���zP��Է���d� (�]�P����I� J���R�`E�eF�D5BB�^dF����1)
�U�n�6�%w��
K3�BN+#�b��ؓx���'rN+J탇�
$,�,K
KZ.q2��Ȥj@��J��^�o�V�RV�~�����;~Klt�7�A�f��=<�o�� gGX2	J�J�d$���=dW��a�o��'X��U�������9�yz

)����-����̃��1���T��*)��`%��JK���"��"��EI�� �F�$�7�����^��ϟ��:y�Hz
-�Ҧ�ҒJ#���=�]�

�@�p�n�Ԭ	0�>�eS����� %�I��5l
�\�������C����Z���X�,	uI�!OI�I���T��[Eh�$X�]�z�r��4
-%�A�n�Ht�d�̌3�.ݚ���:*��걤h]�A�?�Z���XX�2��4bed�Ƹ�;ؗ��q4+����b(�����P�����'a������I�Ϡ�J�
�$q�҃{�m�U�:rUڴ�T�9_M�8f�� oO�/�9���Yuh�����g�(�E��b�%�ч�Ǘ�&�%�iK->oݮ�U��6v}����


�ei�T�0��S��.\
�����9h A���%�K�e@&@����
zc�1(��J/����.�q��
��O�8r�Ё�=;�m���D(͝ɡ4����dcݭ��$�M7�c��Ư}�s�{�
[���X�K=
7�%�K &B&����Pz��$�ۧtQP�hhg�O�<�M���J��s(�vKEB/��u
Ef,6�ב���f�����S,�>LD,-\�jMt�f����iDzs����ր=#�n�!.10Id��$�*C��J��TJ{*�* 3@�k�/�Ǫ�)V�y3�O
<������ƺ+
F�RS3%V�(��j�)���r�b������6
��l�
�xx�Ke�H,K{��N���t��XvWgrTc�(�s�%V��K�w+ L�&R9�I�$Z�J���T���D��"0�y9YG�&��aǶ��ё+#J3$(��8�����lفHws"�"���Mq�>0�>�@��еӷ��`�v���ƒU��[x.���h�p�[�	,��\B0!��#H��Db�������w��ЈI@���z�x�

(I"��L`�^d�-B�J�ʼ)��R%���f�[���Uk��n�~WB���L���.QڃS��������
'TC�w�J�h�d�h��(�X��$���vUĒ��æL="��� gG{�
];u�h�J�-J�^�I��2x
�n1.q,��` [...]
-���Z�������:8o��

-��OJ۵���c\���R��
�vJ�K�dh���$]	uP��S����(��
�e�����))�h�����kK�����2�j2~�(�����}�1�9�
�>�K�jQ.	X��:�0Xo�H�qiY����ut��
-�IH�؛箘�x����3r�~arT
-R^�,�B,Ѻ�\"`zN��
�%H�D�B�E%�ت�E���˄"p�FUť�E'O
�ݿ;cGb\�@_/��,�L����I��[�I���H�^;���Y��6
��K"~,�T�Yb�u�nC�-�|f��t�%K\]b�đ�{�7$L��
Tj�M[h�vg�&R��z�J(X��R���L#�*Ȣ"I��p� ���Z+��|��uv��������ۓwf�R[Rv�������Aq�ZB�pI�~I5�:��
�$[7����ܻs��M4���'�e�*%�FUi���sfN�<a�����/B�
%�I���f*n�Kp�zb�0�!bYZl��j���[��F�'�C�y�K�_�����Ǯ��S�
[����qX�'b���	��=�@$	LB(Ѣ�
J:�R3� l�0򆺚�J��ŧ�
:�gWZR|TX���g۵V�W,%P��Ai(�JwON�;ub���$���>��
c�=[�po��h������]�|,�[���P�dX�D�D�$>
��I�3(�k��[��v$�Em
B��z��|�B��tJz
��H��i0��L1<�KiT2.�A,�Z;x���a���0�3��ek�^g���5 $"&!%=k���PjKϗ�=�ą��O
n�K5eIG]�F&��ҿl5�*�G*qG�_7p at z"A�����<]�wh����P�|<�*��X��T�qc
G
2�s�2��� %�/)��K�t��b��QW�{����c?�,�Κ�h���Z;'W/���ĴLD~�2آ�z.ǿ?�S�+��-�hK<� LH&D��f�I
���CI�����K�o����
�����W�\<W3?����3y{tx������
��|�)������	}�Hw7Z����& i�I�K
�z�"�Ob�f��������lOٙ��s�Xx��k���
��ʲ� [...]
쭌��73-9>:,�ϛ��ۅ�fsP2@(�vۻW^$��$�\[#c��Ia��Ek-`ib��xbi.���z�M��>���q�Xj�R{�r%�C�N{�2H��i�I��60��J�J���Dq�m��Pw�Z��sgN�=������V�i�&�6��k�P��
�� %q��o���ߒ
?�!���4a��s,1_m�����'0,:!5cOΑ'�i�
���}�v��y-Ò�K�L�ӌH�0���ƂI�'�J/I9���4޺y����|i�Ӄ���Sb"B�z�8٭�z�Ų���1�1u%"�J��~���ڵS��O
7�Z�=��Ј؄����r��_��¤��}@��9��u�%
,.Q01h⾖0I#��PIV��~{��vIZx��V�$��=s��)	�����ٻD�r�
�3�BM,�,��`���6nv��
-��R��7�0)��
�����,)`I�%�G�j��R����n�*O�U����`��<~������ѐ������%�J3`ь [v��^=��Q�(�q��X"�׵S�
�ƙL5��1Z��Ax��F�'�C�yE�.�$aMd�~���z��ފe��W�� LM�y�!�0�+J-��)7%�dU	�[Ӄ{p��j�+a�ŧ���ߓ�#1624���u��zk��f�SQJ�8(��)H7����}��\;M
����%r���. ,YR
�
܆�k��p8w�T59w\T���z��,	�M�O��H,��
J̖�U�Y�ok��r�
�C
��pu��@(A��b2^
-%h�lQb3{w��$E�D�"����>�i��y
��������3�Spx4)��P{��f��%E.���o�ʦ�J�4�
��v
G׍8�}�m���J
-1ج��q����[ Y�U�*�7
E��F<�ݺ*A��M�d-b�7K�MX�>�9��Ʋd�����ut��
��ML��΅cWRV^Y]S����MO�j��J�X�p	�D�D��!�g�P��AI�Jx��g��C�xc}��kW��~�w���]iI�Qۂ|��6o�`m�r��Jc�D(��ԥsgF�u�7m
�c�T[�`

�!�
�L,�x�iH
-V⻻���y�ʒ�.I�$�-/Jm��֪����o!���y�s��<�6m�L�	�ۑÇ
D�Ĵ[Q$$��"ӵ=ړ���AK'O�b6`i�j��v�.�[B`�R3v:U|VnX�~R�I��T�I��Tf�A%f�J�}k��›��u{H����b|���v$Ƅ�z�Ҫ�h�,S�*
����G^���:��-�S�`��F��A|1g�b�Ր���O`��/Ө��+
��M
����4ֈ���DD�� � �,�<^��A�YD@�Y�IDPQ���A�&��6��1�W��j
���w�{ι�Z������f}�e��}�Jʫ7�v�:{
U;2H<
-t���SIK�.�H0Ql�?�3�)�$JB�\�*�
j �)��`��s=`�M�5�
�g�l���* �jj$��}��{�����t+�;Jl��>����ܑ-<Zx<j�;��K+j뛉>0x���� pVX�����qt��,�^��4"(qU�ﷃ8�֦�Z&��� �I�C�%a&�����A�$�Eh-K���I
��-m��y�IC#c�Ӳsw��_^}��h�L{PU�D��IP��
g�J�i�qTbJ ~�m�Wq��P�*K�
s�S�����y�:�Z��#U�PG�N� �
��8�
�ء)J���qD�'qdIK[Wbh���~���&�95+�����P#
-���>�|�+����:l,ѺDr	��d�ӓ'<&)
%U�w�6�ӫ�`�gNv��
��,+)��Ʉ��D��z�:�Y[�H�4��a�$�tIr��l
W����s��+
��IHJ�ڑ�{_YU]CK�	(�x�p$K���SL�/�
�h0�~Ę4RUB~
��&�ۋ�o�Z��JvS��z�Ј&���PJ�"Ad�c�𢢒������yK�
M̭�8�u��'�6c[^��5�M��p��}��1%K�(!K�)�Q*�1*��fR	�$�ܿ�7:`_�i�6��]9�)�@��*Sx
�J3�c �w~C�Jr�'�7���	�,M�����s�z�&�

�)%��_Q{��������h��KGl�|*	a��%�KL�����$Jʨ��wѯ��k �0�������a�;�Ӓc#C�~^��m,�
-H�t�
A���1I�����)��
�ͭ Kn^~�C7�&nI��-ػ� h����>�p�nqd驐,�
�!Y0��D��P1W���(��c���aO
-r��<qh�$h�%��
�pT���"��XZ���t��&�m
]<|�#�㓶f�����ili���n�,*Kr�Z�4F%�4�
*�m~N?����A�~7��ٓ�%��%E(ׄ�� x��j�*Mê��VJrȜ�)K��9΃I�-72�Z����
����}�n<
-ء޾�KW��q]��I���K,.a0�h"�!I�IbPz��0�
��cR��}�ri�¹�����5�
�C�
-
��v[�����p9�Ҽ9��4��&����p
h�.���ã�6�dl�YZ[{����$x��K�,�!d����;&2%�$�b��Pz�W%���6��(�жg����{�J��Ξ�&�Q�L$(��	��f�k`,�02]em�䊥66!9-;z
��F�
�Q��6j?=�e�qZE}]L�oo��+	a���w��
-�
���q�����$us\T�����a����*a(�Z
J‘
-�NR	�8��ޔ��$4��u%��8H_ihT\Rjv^aIY��&8ug��^a%�7��$��K/X\�`��D	#I�I�PR���*}�T���PN�hoi��*+)���ܚ


����h���d��eK���Bi"�䁣J��1I�ډ��L
7E-���'08"&>)5kG>��C
GۻN����]��*�]�,ѿ��aI�L�0���I��J7�F~�O�má��}�!�T-�	�lXo��]��(d�I��ƏGG��4}����~�DW���̒�ڰ
7�dl˃�P��
��-K/��%��FI�ƨě����F�J�JBu���x�.<���
��O���ρ
-���lg
�&�ՆU���4�V%b��i)�&�P,Y"&��G���5p��hށ!�7m��Q��%��}�St�����?rg!�J�X�r�"�yF!	3I�xTz��V�G?=�O�ҟ��*u
k<\
ߕ���� #��z�:�Y�25Z������̝��p�
�}YG�N�;��
����O��%=;�`5�M�ǻ{�]@b��,	�76��D�$���PU%�g�o��k
�[�BKd��r�ILy���͌��	\,͚=aIObhlNHm at pxt|���
N{��;E��CqYRf����WcT�M���J�3����c���t$���D�./)B�&D��y�:�Z���\·�'�Ja)�&�P��$&��	rނOt`fV�N���"bS2r���f����s�3�,�Κ�
*�`��	&���L��_�=z��7� �FgNv�5��(-.��=`ㆰ�~^n��6�fF��K`��g"A�J�҄��EK����B�Z��.106��qX����9%c�΢�2غ������]��x(}�d�(|܆�{�X;�T	R�Pu�q����i��,�5A��E���g��n,(�Ņ��e�
J&�)8'�Ys�j.Z�CJ�����4�Cr�= Y e���eI4�a���1* [...]
-�X�A2����֕�4�c��	IF'$�o۹{�Ab���Cw�X �ֱf�p_8���M��`�$%A*qU	���(U��=��q��PU����9��I������.k�̍
%zJs���^J��{D�M|%y-
��m�
�@
7�s����
�����cמ��7��"Y����"YRx�Tb�
-����*}�U����1���owdAh1�>tht� �v2*p�)	����%��d�&��c5�9�ԚY��;C�[�q�=��̭�ɒH�ʇ!�EcTbM�
�~�/O酻O��*ڷ�8�
-X��̔M��o7g�����ŋ棗L�ҸqĖ)
%~��:1T"G��G���5�/�IZXۯu���F�%�f�����k�<u���ʗFT�OR�_�R�>q,.1dz�%����P��U��J�Ujm���8�� 7;-9162z����j
ӕ˗�,^�9�)��1()ڔ��o�ai"y��-|)j᫬��y�IC7�&nIߖWX\Z	b�։d�"_���ijRL&�?T�ꉩ�=�*���T"�ݖ�%1�7OW';k
�x
��YL��M���k(�X�r�u���3a��Rk�����' ���ytNw��t��
-:��l� ��K��D��E$�"�� � b_*T0Rk��$B���T�`,!�jm�R�9�:S��y�߽�}������4�����s��{����I�ʣ�C
ig�K`�!
K��Jo�Ѧ�`
#�^P����;

��ϐ9��S�e�ZT5?+m��@���e
jQ�竢������*��K�
nbnm��Nv����[0wQ��
��窱�k�I� �7܏TJcI�K\0��D��wE�$J�Q��ӈJ�5U;����]Q��p����)	1��'���;�X����낿�1��]���Pz
S���fw��BZxHDl�Դ��s���\�qK9�U{D��v�z��;9�$�&�_��z�G����]�
��-���65!&�/�$�ҡ�1����^���
6�Ή@mPXt<�=��P�큂���)����%m*	�ёR��s������zZ`SC
�̱f��y��gB�
-�8�����1Y���u�IX]ECI�T��(	���o م����ۘ�~A�1	��93
-�P�m;+�j�6�8	�v����o6��)M%�X�r�&y�$��w���
���n��T:Z��g[�MK͛������;~�������1�)�R��\(��vCII,��[�	�pWh�~��QqI)����/^���O��ػ���QX�;5bIɣ����/\s�T��;8���NOI��
-
�D�P����F4��PRKj�8�u&�!8"��
vC{�a����ȴ���M%�6�P�$OQ�Tz�Ǹ
��2���Ϗ�Bu�{[UR�s�$�F�{��6&#�A8Y�������ө��� ��F#�,m
Gy��
�F)��,(^�n��
{�@�>)o�RI�t2�De�_*d�J��!��W�C����;��yÚ�K̙�;
j at tX����hW';k\�=�oȧ
-B���L٣$�z�f[8ڝ���(/���ISR3sg.,^���
ȶ��|��X�)K�SIF.Md��~��J\s�*���D��
*1|;):<����c��h=�K�|(	�":ufu–���B-�h���0
f�lRXj��XB��g�cZ5����6���(��H���8�&q
��_6�?�T�u+����N��

p���
�:���Oof��
*�E=T�K�%��3�R���C7e��?953o��%+$�h�Zw������x�*߸
%�$7�x�$�H��$J<��S�L�Q��u��v�KP)
5`�q�q{
ӑF��A���儒f�M\H�X�cZ��!ڝ��i�!�����RX��`�.K��)m��$��U⑤J�C����Ȑ "����\�4^$���j��F����
-��� ��]2��1-Z��=����}��$�F�H�����=��
����gN�
'c����]�d�,5>*4`�����-�a� ����Ơһj���Tb�|��r�	4pwOXF$��y��J��w�;x�����%bsL��RI�2����l2��ͤ�b����2mk���^	*���HI��
-�0������
z�`}]�od��J<�����>PW��
�p�ў�~�a��?�F�R���������K2v'O3MF��D��T	�� ��HV/,��6��-�f.O��@�b:uA�t��}H������^�=��ҏ���L&�=�Tl���^�m�l�/��+w�K����$����6&#�98U�ADeR+��D�RW��?D�32��ܚ,�/(<61%#w��E%�7l����7�h�ݭ;��Tz�z*���
U
�H��o�r�
�!S8�&��l\�ri�܂险S&�w������9n
��S�yg6��y{�����HZ���
4�Q
 ���	SӲ�f�[T��UK���EX�
���w�Nc�D��%U�	U%.���oQ4{k
�Æp���D�$+��u�����=?���kAT{�҅KW�ӰDdj_XҦ�`
(��K�x��˨)��pp�W--*����� c����LD
j�7�?T@�
�PI�T������fVvN�ƌ�

�IHNϙQXT���e-�e�Z�nE�`R��$�Jg���x������D8� �qcܜ
l,MN
�H����B�-�����Sv�G������},��������R%
KgX���SY�S�wo>�$o�W%n\�UQ�hm5�J�J
߂hf�Fp&�����PѩK��>w�5@�������ĩi�yXj!g�&��aZ�e������Tz�T�|�
3^\��C��|�u��
��g�M�
�;���x��� "j�n4*��Tb��
��룾��ij	��c�o at X�$8�|�r��M�vTTA�;q��vU�rx=|-�w8uI��T(I���{wpۗ/�C���⾃��=G�:�Za
�g@?�pGl�n�PR����H,��ݙc����

���m��
nDX:wQ�ݩ�wo.���W�J����xc�
*ń�|kE�V_��.]�^()�%��^��
��큃�K�+�"� �����-�H��<WW�7�hSI���J������� >y�ʥ�Pޏ�)��J����˄�N�B��4�s#
���C�PR�J�2�cn�7�8��T��)�Y����l�
-����I�m��b*�kު��˩Tb�
��n߼q���

��@A�e
*�F��� �Z�����e{ ��N�PҸ���)bw�����C�E����@�����-�%bw7%v�K�۝D6>�
-��Y�JT�*�¢RNFJR\Th ܺ����򭁞P���$�2�õ��<�eۃ�
’����=Ha���Xs˩3�[ۮ�������cq�m���Dm㏞J/�JN%�Fz�M
xq�7�)
-r��$�F�{�EM-L�5�s�(��W@%ũ$��p�����gbHd��3�~��� �����6TN%9���#�u4��eK��29 ��A)*�̝% ��o<������>���x�����X�!
�n�>�elfd;���?(<N��%��@���`w�Zۘ��>u}�jw�h�e���J\�V	�Ө��-��n��D�|(�ƒj��`��A K+	,�kh:A�
���{(��f��$���TR'�xE�xœ���r�
���ع�������IO��
��hg�iڧ7x�N7�4�J=�
-N7�1������]���y���)-+߽�`}cs
۽o��N��_\��m�~:o0���$�7n�L@0����cGj�TZ.E�`@S�j��M�Mu�� WD6ε��%q���e
TŕF�Q3J%:�h��I���8j4�q1�q
ETD6�]QVE"��Ȫ��!�f���(�L�
S5����{o��~t�����i��N�s~w-~�T,�lA-K
���G�R&�%0�]���e�N�Z;�	�	=�?�P�
C	�J
�T���D��(�*�G�h]WJB��G�����q&#=X�,]Aǒ/��Cɐ�g�˪j�[HH�#��7�M��D�V�����3�G at +}��t����
%�I��x���
���b�����&�F����gtV+��_c�Ɉu���X��y�������C)'N�/$�
��N�Jrא�OgT�x*�|{��96��iei���9p�x�J>d*���D3S��Hئ8�t��,%y
-��#n8��Xr�c)���3yEeU(X�tܩ�m׷�@5��E�hc(�Y��L�@n*-�Y@��h�*'Z7�N�ZBz�c�`��0����+~,��X�B_�����lڻ��}��ն��5޷V� yD=<������ĸ�Pp
Hj�$�?k�����+t��MU���zv�eb!�tx��C��el���
�-P�����pDLBr�wi�e�Jw�ZI�����Vҋ��$�7rl� ��0L�ᓉ��SɊL%���|<�)�~6$�z*ZJ�k�'�$�P�O�z�XZFǒ7�%��L��w�����O�(w/$Z�!g�{b�8�C�-<���f�T�۾
�u�h�Z�C�������J2��`,EŒ�t6������FS
nZHI��Ѷ��ﵭ��oxJ��<��`scC
�
>"6r_������u+����� 
L��^A5��V�!��g �d9gbj6i��ֶ���;���Pw ��Y*+��ҋW.�W�?�<�|�V�|�4�l���$�S�@L%��0�p�ҩ4�L [...]
c��beM
���
�0&��$�{m+�^+��wT�%�`EI����G�b '���#Y��r�d^�����Ґ�PZ�גS�JDLh%����4}6����1��ґ�J*.]e���{1_���BR���j�&إ�Mhrl�J�q�=�Si:7���|�{S�����]_J�㎣p.�\c�qc�k
K�
ހѪ�#���a�=R8�^���C	t��!�����8�����Nv*)(����XZ���e��oPhT\bJFv.��+׾mjűt�Mv�*�����k�1ZI�[�i%��8E��'�G��Ŝt�Gx��GLK�}�JR�+:��>`��.�9����a��',���cߜ�/.G�|���=J���j%�\�_H��\� �.mil���*+B��'�0ݾ�a=\`�42�>
Ŧ�
o
�wp�w��^K=����E�:|$K�Uc	�.04*��]~I�d�=~"�.�%�jϞ�"]�i%�(��C	+6�L�T�ߏ߷
-�&�%	z�%Kk��8��{��8�����+*���khla1��V�Jj�ЬVjz�V%%�����s��7��V���Yi��
��r��\��3
�
�R(P�I��Z�s��i���/[e�i����t�
N���W�V�sȴ�@'���{�[3�]ZY�Lf*
�}�3��2�J3TS	ϭ��S	>��(:��Q�0���+K��>�;WO��x����!qǫ&F	p9�qyӍzꐓ�%"Jحp�L%C$7�T�ֵ:I������4�j1
Ka`�������M˜��_~��o�7���Ԯ�o%��� �C|�p:'351.*4p��훙����nj�1ٝ����Fo�J�髫OZi$�Sn&���U��vz�s��9��MG��S�u��1�K
 �	���6r�V�o�ŰK�M>�v#Si	N%s~*
ĝ�˷�.%Y
-�ci�x,Y�и��폣qW��q'4���8p%`��j��Pw�\~:'
P":l���J�8�&�����H�}~�*&�<=�S���3��l��Y� ��; $2�P2���|���/ݴ
-��m%��]+���$x�������{C,�����F��͂�3�ǍAxJc�O�����9h+�s�%��s$�f�sTQ�H�C#Z�Q7�1ϝ��x몋H YiG�Ã��q���a*5�ȹ�����[J�nB
-�_/�)����d,YZ���T��+פ��rq�!���m%�WQ�.7
��m+��-�Ĵ�%p*
�
a���h�� K��4����/\�lպ���<���ã㏤���H6m�K6�"i[���{�J�������m4)o^�z��� <w49!&"��۝�a��/!'	R�AL�
��ZIxt2�@ogW��}���)@��;��~�����7�i�g���>|.�~�|�\�z��:#wi��׎���plD �Jf�&��?�S���S����Ǐ%
��|+w�qצqǩ&������#/=)� :�
3���X�CԈ�$I�X�ci$Ѓ)���̹
-Y�w{ǭn^����{)ٹ�
-J+.]���ڦ}��ն��5ދV��w�&&eI�ٓ��s�{�v�pq����M�`�
8�WT��h�?q1����G����F�&���X�y68m����䝒q���BqM-�5���� ��#6Ki��K�[5��� v����Mv�����?��u<�.%	
-����� :� �>�����;4 w�"��瑢q��J�����R4yf���aA{��!*�ojB�� n*��ꥤh��Л�����d,�#c�c�n
8+"&!)���3y�ik�Zd6���d�m��k%��(h5/h4z�m��zJ ��S'����ߠ��8N��o%8��� 䠕�&A+YX�B�9y�G�
J���V�D�n�M[	��N�Vz.�o���j*/^8���vn
���a�ʥ6V�f�c�N�{���?a���%}����>#�V"���g�Yܵ���ww
-��p�>�=��R9`[n��d0yH�nO�<JL���TRH&���gj6i���y4k78��CN�E<L6-�V�V�Jҿ׶��<�����V��eE4)���A툠�nj&��rR���J�)�܃L��
-gm�|�������RB�Qޕ��Vj���������Ɵ�  x�����r��s��
-�[�mqX���rΗ��=x�;�����;���)�3�����"�oA3͉;a+	��m?1���V��ċ?
����y#��bJ
Q������/Ӡ��4
-O*Z5�&c*e���,� �@���M:�c4�U�D�EeߑM\cHPA�
�Y�2����X�LH��y�������	m��Rݿ��}�w�s�Z���ƒ�� 4vN�,/ߠ��H��-�m9{�2�i��7���S�4�$�ƫ�JbT�>R	>RiWUyQ^6��@�eK��9SA��2�� �����T�
��h*�`*YA��.6)5R����YR�$�J�2��x��;�if�V�f�%�EG���y�.51T8�FIf*
4���n⮈�
:���	�N���g[���� H���~��,tu�g���\��M���6���X�Jƒ!:��a��EK���DD�%�e�VT�������6�ӧ�T���Tz�T������N5�����


��c�BWg�9FЉ��.�*��j*��H%#SH%T��ˏS�B��]��jM%y��P����,-/��LI�Y����
��w���-�N%�c�wq
�LpW������3���ߺs�^/S%Ԏ;�j���A��X_��
=
�&4p����T	0���� UBM��e�0Iڃ�{�IKk{gׅ�|��/2&!%3���0ݴפ�i5�$�ƫ�J��z>�O`Qy�T��C�t�9�ߣV�Opu����#�]k����
�T�0�4o��a�1�)Y�p��-�f����K�gB��T�|��N��HN� c����
_䛋#>0��)�7�JJ��8f,)���*t`JV~�6�)�ڻ��S�
�h} Z?/��w������=NnIAvjR,1���y�s�V�� [...]
�J�%۪�@*�h9s�K��v�/��+X���*���Վ|;y�ȁ��wl+��LI���@f�=��H_��υ�KGKj*	�w�����&�h)�.$":.9-�-Ȉv��߇G��N%��o��lKn����kBWx~��5����{�J�C�S%���8�!ͤ)�(g|��q"��7mBJ��M��ٴ�TҤҐ�R/I�Գ��IP�z������u��47���:e��'��TzMy*�u,��T
-]�!as&I�/
���AS	��{j��R�q������W��ܾ�(7c���`
85 ���41��&ޙ(k r�[u<��8�8ܽ���pgm�Lp翊X������.]m����Ô�_�W��T�
��
�3��-�NM��Z

��c��<g 
��m���e"�a6��5d��:")=}�[*o��I�J�k��T�/ Vr���v��8)���y�������ߧc*�Mp
��,��b�֡�4�z�3�n�J7�>GR����-�8r|
�p�Vpi~�������[SYZ���

�l�������؀�-�7�����7X��9�,X�����e��W�k��z�Y�X��ՖJ�������=�����v��q��]���x�����Y3x��&�*!�%Y�#cIkݴ��6���5n�jߴ�T]cĥ�
���
>�W)���k ��
-�[ϒ�9�OJ��TRsЩ������7���yn�J���6g�A*��R	��]�DRI�7�1��*-��JI�Y���
����l<5- S&�d�[|��;3
� \���s��U�܇
l��ۭ���n<��A�>�
�=8p��]���:��+��u���0����B��ū
�ԧ��=k�{s<�r!%m|��Ȧ�#�67m5ٴͲM�+�M�I%�5FH*	Y�v���N5�_���>8`��ʙ&�z�t��ÜJڲT�R�܃�s�T�B*�1�����U�E�J7�

����8��caN��R�Z��Jb�M#�3��!�����MBVT�e�}ŀ;u���"���3M%2pwδ4ҁ[&��ڐw�F�:�ŕD}��d":�eH�ߴ���
-7m{���
+�M�I���I�A�����DS�����
+�

�r���e[rҒ�V�O�������Rd:���J�9�=��hcS��I�>���
�0�:�]�p����tz2��@�
+sSc�7ѩGK�o��&�J�pg��`����ʰȘ���|\���IY	�Q{	�
��!
R�z����a��U�d�&Ɗ�

��J���H�JbI���M�c`���#޴�q�6PVv"+�7�&��_�J�z'���4�G('m���ʚ�����$t�����X�-̌
tT�
zr��yN%5_(� p�=<�T�:��Mx����P[*��K�ǘJ��uw0���]QZ����'������O�6	�FN-��-�)��_)�����Y0
�\J^qn�VR��Z���L����S�-m��=�����G�߽��8���3W��

\IU	�L�M;�l�ܦ�lڽ�uGO����w��<�(��
�I%�5^�TR�&�J��T6���z���c"�W�y���
l�0�t�L�}�t��9��xa��j�l;'ׅ�JX�o�U����q]�=�?���SI�T:�^j��M���8?3%��4�?]�z��9�u���z��&�
��i�-���.

���SXVY�M�BJ�
a	—mXS�,�ĥ���Z���;���������s��k�p�J�J�tŴ�7m��M�A6m/�iũ��M�I��J�ϤR�w�dr�(��BVB��.H]���>��H%�sȷ��tҺ���J*=��h�����]���SM�Tm-��شq=��4�J�o����y�{��ݻo:}�D�ϼ�W�^���UPRQ�������p��R?�
�v��VYV����X��m�p���g�;x�Ma{`�5M�i��
-]�ߴǚN��m�y��BX�XҤ��# �~�R��wn��@9�����3rz9m,1�x�{c�
*USS�T�h�S)N�J�K�~�u?d[7���
��ܷs{y*�!>ːo`
��pi�J�#��SIE&
�O��ќe����wPUW
�7��Dw�����N2Qa#��Z�D�A�H�.�	�{� bYĆ�nDAi'�n�6�,;ꬸ���9����}��{睿a���=������q�R�p݆�`B� ��%���Z����-#)6"�����f;
\#=-�����q��\*}$}Ӻaw�d�T���!²�6�i��M;(�M���6�1*
��
c��uw��4�_8Su�PYaNZBtx����Id%����L�
�>
���5I�����#5�H���]���
����������2l
�q���RAQI,��MC%\M�0��M�v�9���pD���o��QV�5���=�D� �����\]b�~5k���+ �X���dV*���M���i#QX�9^}�bڴ=��FA%��+����O��lWZ������D4x}�e��J �Dq�
S͡�����lh݋�������+,*
ȝJ�����b��'��
��t�����m���u�`������
*�*�W��OiΙ��N[�,�X�8(���%��ѓ��K8ۅ�N,��#�v��^i���.-�N����
��1p	��
\AT	q*q7�梥hӚn!6m�h�
;y�J_w�
lZl/�mZ����Q�������x�9�Z�

�r
��<]p�jI���ARI}�"�J�mw�T�*�/*�����7�����T��������|��Z
ܺ�|h��
���4�px�s��WJ	�����w�rp�p�,�R�R��ݿP��C���y�����jN���(��J���F��J�|<p���)���L��v���������}O`xtBZv!��*\�`��ћVA%�F�J�2X�� c#=-��O�S���UsH*-Y�m��n/�R
-P��M%�2'7*�b��)�۽!��kkȋ���qs$F)��nV�M������o�#%�Tf��
-J8�
J���T	OJ�-:p�(��w,�qeH�_	�_���o�v��;W}�Hyq^FrlD����.��[ME� K��`�H��Q��m�o�u��*rӺy���B����4��
U�T�>۱O%VX>f�%*���3S�"C����3�X�
-@R����I���.� �L��������C��?�"g*�*�u�Э��$?3_��0JI�̜���$�|�
:�j�Gq�٤ϩN��d�9.�A�����w\�܂u��P�%�
�J��$�
>��έnv�T�%��
��p���زa����%
{��@Dc��q��$7-�b��"{�D�%g���M{��eJKr�>{��NK��KA%�m�J-#C%",{9a�ʠ�����:�"*1�r����)�J!<T�K7����uC�1Z�h�I��~���F/E4J�y�M(�>4�Dq'V��B�p��¢�S��$ukm��E����=�+��Ր���������\w�L��Ce�9i���8��7��1�YW]�k!S�ڴ鸙���x)a/
kO������b�i/�_�z��7o^�x�*�Ľ��N��*<
-�򒼌d
�.��7�5�]��D�n
-�dA����*���Ӻ!߮�4�_@�)+�IO�����l�F]4~)BnݜÌ;���cT�-mw�������_RQy�T��m8����ڻٻ����JS-�wiAvj|TX�����
۾]���7��|����Ӕ��!���@Q�,}�{�iie��'hotbzN�7m
�}�7�/ț��QP���
-*
�J�"*�
-���	Tj�DT�܌���`_{k
��2H����"�&����Tj'��/0*�
-ݺK
����}ܝH��,�����ƃ�R�/��(�z�n��~!؆��G�W���p�ڍΞ[`���C~��mC��
o�=%:[�����kkN���؟�����hki���H_k
vJS&#{�\yk�;�M;�ڴ�%l�5&���sr�	
�JH�.,=�]���u���Z�Lۃ�Jb�1���A��/�
-���}���It�g�%E%n�!5���I�����*(*
ݺᡤ��

�vs�ii�[_�Ѻ�Y�'�|�
�%�n+t�
-��
��{c��s�
>v�����W�wr�K$����ꕨ����v�M�����e&�F��y��پ�t�!����\U;eA��Da)�i!-E�卥��n��}��_�;]S�������?��RA%	��Ұ��&���!ԬSӊTQ���R� ��o��}�j�%��)q���^�C16��Z�X�O�T��
�j��
f�}�(�SQ	����J���ps+;g�=A�щ̇����J8<��!˔Jox�Dv�;�Ζ�����`m��t���%��c{�L��N�T�lډ��A�VK��x�V�_ə��T\�q��m�rT�RP�q� �
b*u����@�CeE9i���{ܝ���Wj����R�
���� �$��⼌�؈?OW�7F�5��oBlݜ#��cΙ%|��*x�ۈ�
���]Xz���뚀J��}�N�q�tǠ�;:D�8
� ������|�:+������B�{��T�	�J�Q�޴�s5(YX;q���W|����s._���s
���#
8Ϟ���R�SP�qc�J����w}�
m-�3UG��%D���;��a�������h5��4RjJ��ҐT��m�T�-(*
Jl�Ռ���bo��ݺ?�P�����sT�u����<

�y@%�7�Y�:�����U0t���hw������pG
vGiavZB4v�u@%��MSBT�����Ļi?�Z���V��
�A{c�s��;y�b���;�gP֛�
-*��ƻG%�;b��
-
�qs�i������
-j�(�W��RS2�f���R�S�n
-�JR7��u�Y��k
tp����r&ݺ�o�#���YCs�R-=#�[A��^�� \f~	)�ʃJ�%��U��҂����� o�
dg�w6�JLwHM;&��N@%N\.�Y��dӶ
vN�{��k�M����g�
-
�x�^A��B%���~?P	~��*��l-�6�kjp�D�)*��d��T��q ��7Q��N�ӟӺպ�>�dy�c����C���G�U'�p�~!؇��G�W��Ԁ|�C��Шԏ�ы��X[s�De�����8���FzZKy���l�Q���_�(.�M�M���O at XT|jvA�A�i�Z�ڻ�Ц}(�M+.��Jc�J��A%	�?����iTT���
���6)��n
(
-
-Ddp�}I�E�U�a_�]�d؅aG0�hæ��7@�h�(D=V��
MO{���޹�
b��%��38�<���y�������ic�Sæ��Ms웟�0*��#��*��J�R%R���*�����R�
-�3��n֧���6�D��

-B�DbI���Tjj;���z�@�
b���g�
���V����PuW{/�;s���TYR����(

��t��޴�
-��c�ty:h*q�K̉��� 
-G�,
C(
�up��

-�Iڝ�SXZ*5�::��/��+
�����Uz
���Wg�L���n%����J�F\%
B%���vr'��gpS��\�
�F����[�;;����a�hG8�+�&+Vo�l���#��Oޓ�W\^s���V�{����=\�
�R[sC}]m��@���
�����difd��C���n
M�Jě�����͖›v����o`8q�USޗ�J���W�uU��� ֖��1��kЀ��(��GZ%j���S�0�T�}�:\��]��e�ꮂ�~ga�pW�����
hd?�J�����i��]���|9��m���Hd\2c�Ϟ��7�&��J?��=��{�������YbQ|t�`���햍kVX����h�����n.�ĨK�pT�ЛV�i�,A%k*`�ie-�i��P_��}y�W�W�m��M���J
-m遷%�T�ݻS)��*�L
�}��ݎ_�%��-
��$����d�1?J%jp�ɠl���
?56�6���kgpD쮴�ܢ�j��-�J�7n�0�#l�cr��������B�[7�]��������<��>n�X�Y�,�ם��1s�'�UQ:&��XoZ��H%-
=}#�/���"�$_ZQSW��
�i{�@_����O�^ڗosV�J�_�W��B[��������A�� P	oKSԖC^��J��ΏPhp�.�;�A*��-��W���<������Q�cn����+�}f������;3g_i����h�������P>��U�ŋ����4��t��'[����/����MK��
���W�\M��:��xZ�96�!T����im
�|!Q��{���k
9�ԊT�g�l
F_�P�x�X��(W�?C���
*�>���Q[�*M��_�b�nc~k*)\�O�W��Ј�B>����f}r��0UR�6YTZl�T�j���
����SXZu�бF�Ro�Г!��t`��U�p�J}�J-H�겢�̴]���;�]��|�~�2sc��T�ꔨ�gC�X*����9޴&��W�߼m���Hd\2�q�*4��/x���=���ԃ��n�Ji�T�
����-A%Z[��&v�m�^`*=����n�V,4��y�8Fh�J/��_�|F����m�
-����@%=��f�Vk7Y�9{��	Sӳ
K���d��nsI�ǸJX�A%"�e�r3w'�F��rq��lݪeK�
̛�w��)T�aS�ũ�*Q�9�J�8�s@%cs�q
\��qbw�e��U��i�T��q
޴�8��W����J��J�
��I��F�$F*	@%[R%�
ϫ4Lf�~{.���
�*���]��ˋ���%�E��ս�vuk��T�����h*a�����&�J��u�
�L-�րJ��� ֽ$��R%V��:;d(�U�p�[�t�bPISI����75���c�i��1�Ɓ7�����_PDl��̜}��_
>v����l��>�
��>R�
\Ԭx��_�W��Cb�W{.�;�D*UH�%bQ<����h�e��&�J
-7<����Яn\�@�>L��RuYQnfڮ؈�^�6H�%���LQW��4a��>�)��͜����oD
bht�H,)�V���74�� �pC%V��p�"��e�G
�*-��HM�	��t�ߺi�
-7R	�M��2a�8��874������8��.6[
-*m�w��

-�IJ��),�B*�::��/���0^%���*�R�
0��PÔ�g�JQ�Jh��J�C�4�1�J��w��	�D�Iپ���I�A~^.6pu�J�os��[�yu�|,��Nn��-���>�Шx�8+_ZQs������w�_�A�3x��?�TR
ķ85�J�o^��{���t{3R���0;=5Q���lg
*Y���Pᖫ4��*Qs�1��Q!T�7-��g *Y��dm���.LL��.,�B	��w���*�*��^`*=!T��d��R���͑梅�I��7��eɫ��D�IWg�Lٚ�[�t	~u#��(��Ќ�`�1�!TRG��D�3�X�z��m�n>�!Q��{���k
9�Ԋ�t���J�JϘA|��c5
����t�ҹ3�R�Ѻ�ʒIzJ�0,`������5V��H%-<����}����&���>k�������%R����7 L��HY��J�JoT�+�t�>�Vl���yʆ	*�@*}ī�*��T�_�hMzq��
>PUZ����
���l��n�&H%XB%,4cG�J�g��gR��
?51�T������go^q�~P	VT�WY�J#SwJ��P�����P*I
$┄�Ѐ
�N�[6�Yaaj���T��R�=����	TB	�U�B*�Z2&�H+k����Q,̑|�9+^�Q��s�J�*�ݓ
��~�rscl�h���
ϫ��(�	�R����U%�٠�0<�����T�4CW7�&H�I�J�F�J�c�4a��ʠ��fhh��������<�*sL%h:�R�4_"�G�
-|�
	�����Ҙ9�ɪH���psnj
-*Q	��)�N�%��
-L��S�J�x�x�ޘJ�,�*
�*�l���_�R0����W-#T�aN��ɫ�j�!U�}���ދ�]�q�*K
-��S�a��
��)�yu�*q��f}
-*Q���������r,�rnQ��-'�={�r�Tz4dӉ��>n����,L�J�t�Ə&�fb�޴���>�Шx�8+���޴Mm��M�s
-�R�|��*)�{^��V�<���_}���(oo���v��^�_�J%��{��>��
*ՂJ��Pi����5\ݸJZ
��H�Ľ~c}t���~���t�q �e,�>c���j�FE�!�I���hID"�,d���� �I�Tk�K�
�Z��)��Xf��aڙ����=��M"��{���{��<���~?�Ӹ��*w��
Wy���RT���)�ٹb�nW����*�.L�W���h������d��W�BY%c�E�ԓll�,P¬�J�H�ɞ~�a�s'�J�ژ�U*aT��qTBs�*Q��P�k�/�=M�*��U�$QI���*=e��]R����vl�Y���|ɼ����^nA%'��}z�J�k�*5Tj˫4�a(����*�1*�ܳ�pq)�t�Z9R��U6�Jhe#T��*-��
"��W�esͫ$��E	kɫߴ��(Pi�_PX�E	�RA�m�JL�T2��YQ��7׬T�G�T�U�ݐ	*-�}=X���v���_[R��̰*]A*
TZ*�
*���Ծ [...]
�U��
*%�J�H�c�eg�+���h*�p���
-Rie<�
-*ᕍU��dU"+�Q����P9�r��9+�
����J/O�N�(���C
�U厪Tuf��C*
���Ji��\F%�3P�
3�?)���T1f���7�Rbr�z%�ģSNb

MM%�ne�b�<�JX%
��ة����t�DV��o`��XP)�S��t��DU�3�����������Y������Q��ÅTɒ�T��<�2��
��-R�@!��Rtx���5R���Uj�TjъQ�C�nH�!��$Pi��41y
���������+�N*+�R�L���*ٚ�J�KU�oZ�
��u��	
��V�df�P��Ju���T�Ĩ�^�*�p*
F*ـJ�*�_���|�r�d��Tb3c*5��ԎS�?���i��|�Ҧ|4�c'��Re�o�QS� TJ!Tr
	*1+��J:���
"a�Jmy�8
�\@�P)�Qi瞢�ťX���7ᛖ�DU2�J���҂X���>�*U+3z��f�W�w�R	�NY�Y��jST	�l�RT(�l��Tj�q���*5�d#Ui����T�Ϩt	T��Q�	���J���S�j��#A%����N�R}��jf�
(e&K�J-�J��H%{^��J5��mA��E{w�U��p����4UjƩdɪ4���5TJT*�*�(S�UI錩J5R�x�3�׏$U^���of�
�T*����*-�f�PɋQI
����
��
�J�2��@��J6R���J0��U:OU�*H��X�cJ*��o׫�����Jꙑ�tSM� e����J�STI}tZQ�Ͷ
*53�F���B"A�D�R>R�X)l2�
:'bXT%�4�_�|B%ow��H���J��JzfF�RE�U�o
*
�B�[�RUMg�G�J��Ɠ*�WP�>U��d�a��g$'r*M���Uz��Tuf^淒)��٩tϜUj�����*=�*Q�^�JO���Y���JKA�J*��*��J��T
-�C�T%
��V�S��T�רJ�S�ıC�v#�րJ�A�i�S�J�����S��J�
(e&�ό��J-LM%��TUQ�J��iH����S�!U�.�EU�O�
TzN�RA�M�J��J��
�R��T�G���<Uor*U`�N*��T�B������Uj��JqT�רJZPiu������J�$*��i�*���y��o�gT*C�+׀J�թ��J����Y�ԗ��|fT%
�����-�P���J�����*�s*9��J6b�"A�D�J�4������TZI���@^%
sP�VA�l��r�JT��R�U����Q��� 3
wmߒ�6-	T�	��tT�T���i��\��`�J��T����n`T�������(e����J#�'����D�J+�JH��Ҳ�r�*�JjgLU��Jw�J?�Rg�P����}V��H����P)
T�Ǩ4����R%��H�`�9�Qi3�R��Tz&R�{�J���
V��H%�tj*iqjj*u���Z�
**�NU��1U�v*]�G�w�J5�
��פJK@���^n�}<���,Tj�]e�J�{�A�	*- �2�J{��*�1�J�ӭҷ�O�`��J�@� ߩX%ǁ\�1*���Tz�S�=V%���O`HT,��"�t�t��DU�k��-�RIޖT%}3ß3�t��5g]z�rP)BP�����Y��kRuh4�(���T�vpP�T
-���P�1*�;�}�v��Y%h:^��ԕ	�R�\��m$*is� &S��T���Rfv�X��"��
�CU"~OU��J��|MU���p�D�Ҿ�;�nZ��T�1}����M���i���v�V�J���}B�@���.U��U��t�W�T�W�t��6f����ÂPӍ
5�U����ֿp�偝SSI����r`N��R(�Ϫ���p�IP��
-N%\9�Q�T~OU��J�-�J[�*1m�v��T��dFP��7)��֬^Μ��H��Xp�G�v����

��T�pmǫ�B�ҍ
-��JpӁJ�t��*qM���âMkS	%L�r<|Cg�J+S27���T"*����{���TIԖ�J]�J5�
��&W/�?S&�&��I#��k�
���J�,8�S�
�\��?�4�J�
�4�2h��`?O�tN��A:8��t��J�]z�W��
-*q�sVV9T%��S��B���DP�ɾ��UI���VV��Qi����ĥ
fG��vG*�5��k�	���mqh���J
-;xo�
|��
��*I��1�t�P�
,ܵ}K�ڴ$P)&<���MPIig����H�	�9��h�὎�J�\�A�$�+�;�U�@*]aT:�o�F�%T��eF�wM�J��K��3�&����eV�7M[%��$m�^�L�*}Wl:2
Ǐ�J;@��eK�ńO��r#��!���V��\�-[Ü a�]aN�
��
���~AaѠҪԬ�y۾��#%���T������_�Q�����rTڅTJ��Q�j�A���~����\8{Z�&)pMb�B}<�JH�.� 4o
�aZ�*)��[�%n�
���*c�
\�JW���KO�t�D�J8
C�����֙	wkY��75�9��U��!�>�l��_pX���	��@��JW���!Q�UI���QcT%�� ��j.wnT�f�T�_�J7��_�
*�,>\������̔��
c�B}=\?
;�#�����F�n���m����a
��p*�8zh�n����t̟1v�I�ƌPUI�x�Q����ANhNn����1s/KJ[�q��/

9��	
-���G�g�<��:�8
OVcԣ��H�(6��ʪQ&�P$�KQ��H��&M�"
)ҋE��Q�n���Q8�5����Ͷ�����2��������{��cXi̤4,+ŀ�<]
l�l�`cb+��J�t+i��4��0���у�?V�+��'�
-
�uw��Ƭ�Q'K3J3�n%����C;.I��b�{{G15F�C��J��]jm+�,��:�p8"���u��.�m`%Md%�ܳ���Ƒ��Ϙ��4��e�*���ܽg���c�S3�O|u���- ��80�P��V+�e�ă��{���ɷ�r�[	��~���7o3�e���q��1���V���V�AӬ���io���9UV���

��pv��S΀W!�f)�h�i��rQ�c�+�v�+�5���:YR���x8"�������l^��+��/���$Q7�z���s�L�IRz��ŐӪ50�
K=�w
�%���m% �R*X� i% V0�Z�7�M[p+y�V��/[��V�[�;C� 
Y��V�f�+��H���z�8�X��
Zz
[iشk
�v������FV��; �����H_G
YIY
pud=X��83f����O�PN�|`�3���3^x��a����N�V�If$3$HF�}��9do�R"�J�b+��4��aX�rʝ9]�N�����E
��V��	9iv��&���£ݜAh�=(��EE;��^�|�A��r߾~�����0;=)6*4���������@WK}�jU�Vb�-A�飏>�GRr�WZ�z�M
����� 0/]�u��w��Jt�Q��+�(�$�
Đ
�!���J������
m�V��Vz�����ݽ

Z{��5�T�=!�4m<Z�F;مK(�3�i�,��i'h%��C?���R{S}]���œ��#Q��������۷�r�ש�*+,���Q��.-��3��r���721��st����ML��*�j�5�� '2+�V(�+)��J�O4�JU�g�!����]jkĭ�V� +�"+m۲Il��i�_݅�z��7_�8��h¡�`?/׽��LaO�5���=����n�JSƓ����Y���.(%i׍h�'R+�x��5�J=
�o\io����,+��H��
�z8;X[�06��h|��?�i�`��Ȝf	r2��sr�	��MJ�.�rjj�|�6?�g�_��6+��J�`���"����NV
-ƭd�[i��J�J�=y
{�}ړ�F��ɒ������d�>�^V�P�_"'KX	�f�lQƇ�>d�n��g��
-ʪj�M��wr�
��MJG��f�h�_z=�
�J���:�ܸr���LMeyQnfJ\Lx��PV��C���nV���9��͑���-�s�P�
-�I�)Ĉ��9utq�9��V��}ﴒ4�JS�h�ޑ���Z>m���i7��J�J{�~�T�d�%�F���9�Y����j����1+I�V���,
푴�L
N
-��
h��уM��M��7y0�	n�XD'X��<�p��ͫZ�
��y�|��؈~��x�%(�f��&
L
r24�aa����

���� q^�yC�R�V�y�VB$�N!٨Zi&f%�aX���HX�����"���ҫ�/�������ۚ��UW�f�'
�
-
�uw��2߾�@���NMUYa�
��'s(�f#�hﭴÂ�������7h���[TVYs6�ʍ;"���PǨG¡��~^���f�~�sᖘ1}ڸ��t����/X��W0C������
-��K��-.���/@N�XN����5
�4_Z�d�h%|ʟ�J�#c�.d�V��~c��^�DL�����JO�
=��CwX������TYQNF��@������cC=6i�-7n�D�NR�PQe����a�����Ӯ�I�����N u/i��v�lw"�������ڭ���~�J�W���%BcOj���AN�/���������������̼�_����ӽ�2'aQ�H��_�l�O�d�͛�7��4A���5�J=
wn\���p����(7#%.:<���Zcl��FEqj��eQ(g7{ G}��5��n����4��z,�8�����Wo���
���~y.�CX�����v�5���:YR�������dgefb����VRƬ$Ŵ҇,
���
Iم��V�Z�AS��K/���`XN���wXN�����u0^�QTɰ��D'��$�����#X)��&h�>c�e%|o��E���YI����J�Jh�0id��G0�Nd���tyq^&~�y��w [...]
hʑ���*F�Jhb+��0?�
Z����I�;�p�XK�m[6�hn��[I~�BYI��ݴ'�v�h�������͇�C�:lE=
ܘ[	��v�z�n	��p�;�J�M�uէʊr2��D�r=�
�-v�q�~`V�]�l���J�~͑�'���%
-ʪj<�X�;���F�&�e�/����qN�b���V��k�_^���W�+MM+��L�h<+���s�O@���iVx/+=
��V��4Q�4Hk`�?݃E�EY���Ñ!��n�v�f&F�:Z�J��K�de���f	�K G{�i7�ݢ�
-��8�";���F�&�gb=lj�t]hEg�7����n�#�RO��67���,/��H��	�z��!/pF��.��4�8�)�RX�R�s
����
$p�s
-K8�����9={�+1��J�_��1+���L!) 1JJ�VB?RA+��@Z��P�0���
�Jhb+M8+Q[��u�ֵKm��j�*J
�Ӓb�B|ܝ�̷o5�娯SSUV
5� G{Bh7����z��@;gn`X4��M�@�����P�^1������~ +�?z�㽞Nd���Gyq^fj|
���M�ܲI[s��U*J�J�.f%��p�9M�x��$)�p����
r�i����
-��K������iPTW����D
c�*E��3���:jD�@
-�PFa	�,���" a�}�M���(�����0�"��HtX$n���R�5眻�o���*����y��<�s� 
�X�b��

�W� ���8Y	��}��!+ipY�4�J�j%룱��eV����a%Ƈ���Ow��z:��^j��8�Da^VjB����^�6��F��u��f~)����
�
Q
g�������V�YO�fba���
����_T\RZY����.�C����~
c���*;
�q�0�:';K�]�z����U^��|�p�9�z1G<�IK��v�����I��aN]������
�V�O���	+-�@<}ܭ���.�F�"�7���S���.j��2+MB+=�����۷������X[QZR\�������hkA<59���VT��1 
Q���@�?.�
�p�5u-]Ýtn�I�s�N�)��#hw��v���?y�L
-�c����݁;,��f��E��z:�[��ھEo�q�+��|��g[�+�?y�p���r2�����
-���
̩��-�ۻ�����i�VzDZ�FwH���<`\��
-�V�d��Y�U�u��̬쁕���Rq+u��J
�cV���h+} �����-VO���s�JC�J]�m�Mu���9��}���cNm
5�x=�?v�f"�͙ˮ!
�
������3��Z._C����E���
���`]M��SǏ�e��G��y�8X��غYGs����TE����˃�䰜�1�5�KeɊՈ7.}��"�R2����QN�DN�_ 'ɸ���P�8����
��
�Z�V�F�K����V�������/8<:>5+��	+	�>f+U	�t �`
�:���ˬ$�/o��XO�<���������*��Tg;+S8��56�]�b�"bv+�o�3�1~������RH;M�
��0%3����s�v����I�v�
-�{w�}�֍�Ϋ��k*Ο>Q����sp�^WG
�m����.\P�^�TNS���Y�ڨ���u�1�
�%9�O�+�n 9ut������CZ	�����4�`%
-e�n%�H#������ ���NZ	`��Xi��R
a�c�5I� ����V�+��d�{����R at m���d��E��y��[�}f�&�
�V�7�y8�OH;���	�)(*}�2A�/u���8��1=@
;z�O;�¥Ywox]���­�,-).d�'�F����`�h�^_�r̜�
���`���e+׬����7
G׽��мA�� G�O�o��l+
bVBW-�m%0�t���(+��&�JS9�$�:n%���Y��5^c%��i����2+M^+��
���M�ņ��s�O
��JM���������n
�����>�f7��@�y�v��vZ06�ol
ݼB"bӲ�
�K�w��?�v
�cj���
Xi�����rK�� ��

��p"`.\�����
w
�ʧ
��I4'7�`ë�k��D���w "61=[PT\RZY����.�7<��-�J5���+YA�à���|�����;
V�O`}��
�\X/)%���̣��j�V�k��1+}İ�;2+I��ғ_~�
-�
��=�W[/5�V�/).��NK��	������'�c�8hR�>cD;mD;��N(�ؤ�
A��3��u�v]|������������H1�=��D.ܹ".oB�s��h��
-����ޖ�L-�<|Ca�r�;v�LYU]S
��f���!:��/�n���U����%�R<��

-�x�h+M
+Mí��3�������^�$�Vu��F~���YX�Yi�X����7<��fw[sS]e)xk��}ܝv[��44�g�|����?Q�͠iR#i�i3�������oPhd\r��
��r�Z���}wH�=~��Th���:�
w ^��h�W#��e��G��{�8X�
/ܥ��?�/�����S��r"���LyV�6j�@ܘYۻx��Eťd���9uÜ���?�r�蓖i%tՒV�VB���**<�����Q�a%	(���`V+����U�"+��o3"� �����O�
-�����Q[�)�J�M�X��,��&���O��~���2bv'��݊����+�1~,ڡΔ�RSPT��Se�v���3�
��O��=z�Թ
���u���
�
��ҡ
��%�4�D®�����Yi	1C��9�Z��h}�.\�
��{���a*>�g+�SZ�Py�k��v��,l
��I�ʃ9�W7��n`�z���o��1�D�><��,�J�]z�D�sz�]�\o� �
��I�J�V�� �9 YI �T��ԅ�>$��
�Vz%�J�9�I�!���T0+͐YI�_�
-+q���?\�&�ݹĚ��ru��f���p�������N�N
�fba�膶!����g\^�p��JG�
�ؤb����n'�pk+KK��P�ACЅ�5�pu�Յ�����TS��s��4�����Uk�Եt

w~���
7��nj/�^�D9
J9'�J#l+�"+�RVJ �Z{kb�ilXG�ı
&�Jp�}�������t���N��F�u�-�{���0+%+x�)H#b%y��$�獷����!av�j��ٽ\UX

��C;���+F��F��$R�Z�ac3��{�g
h>c
X��കЅ�
g'Ր#��E��z8ہ
��͸p霈� s'��\*K����۲}������O`跇�����hɉ�^��R[3i%خ����6GVB9-��Ŷ���v+	)��D�4�}�JI�9���g�H+]��w���cd���a]䣅V�m� ;=1&��Ƃ޿+dV��V�
-����m�k�=m�
kW�X��ٟ��=���T
Z�
-��t&�B�i��������7(4�hWVŵ
�D;�=��#�!�­��p�����x��y� ډ�p?�p��c<�NZEx�����G��w��

-��K�8R@����^!-aN�
?����v�V�v�gcV26ںY��Y��|h���B(A�-�)f�nR�Ҁ��>�w&�t�ᯱsJ���
Z�X	�F�J�b�4Ef%�@�+����}+�ٝ�
���lf�X
����k���_�c�$�n
�
QB0
���W�

����hW�h�
[8��P�{%���
 .�+�j���~�uu^qxL��ѶqC�F[�(�bő*Z�b(�j]
-.���PEpA�
�M)Hą�E
.�%l�èu�Vkk�:c{�y���5���p��/��y~?��y�pC����4\ٞ�/���tҔi3��N.�>�D����⒲��ںKW�pOx]����J�����Gb���J)	Q at bO�
��NK$Q�5,�fV�b�$;n�"����I�D��2g�W�j��YV��D��'�
�m��b%�V:��e%����������g �L�1v�c�� N�u@��
�igfnaie͢��:�-!Q	���WT�Z�
[�+|��:k�-�W�ϟ�
��A�o䇬�JS��KS�i�
6|��?�1��9{����K��6n
�NL��a��>{���tO����J��Vz�Y���~�(tډ�UP�Z�ԣC+QL#�[㠉bAr��)Mz�^�J��ۦ�3t�`h�7v[�kZI=v���>��{��
:
�����m�g[Z���N�^
���CKJڽ+�
�
h7�<�K�9�y��wf��
*-�W\�����[w�Th�\+�4\Ʌ�
w4�p��;v�(h��p�O
��Ξ�J;� Y9z,���Y��ܽ���c�0�-�<}�§�8���h�'e|`({���������Ct(����I�2C�mI��� _�Jx��g�
3��dɬ�@���[����c+���Vj�7{����������
-z�h�	h%�aB�%�t[I헷�J���H���R���

���
-c��s�
��
F���'��?�zJh7ȀO�D��6H��
���E�&�"펟:��kR{�ZI�p�k���{���@�p
%
wܘQ܍
G"o�mM���d��g�������:�pA�G�%�e���	#��v垾���k�v�2_e3 e&
�ެ��G݇��aA����
V������-<6�
��Y��Y�I�(Y�Y�@s�����x�<��+0H��R����Xn���ŹSǏ
9P�7+-)."xӆ?�kqXho����;f����8�'�G�������7llj��w�����㏏89=;����i�,�ݗ�҈v�
�
��67\�TW[]!4�(j�n��K7�	f	I��6K(����N�53g�\�t���u��F% l��,)���%X~�z���v8.�
��6Z�_R+���E�v{LXP�/�	PfE��gx[��pK���f�l�^�$9��ǣ�"p���,Y�cZ\R;n�-��(�*V�?V➬���ɬԻ�J
��ݷ�j�~$�n\UEYIqa��t|-[��y��\��w��V8Sz.�8٧C��,Ji7�0� ��v�qkhtBJF=������h�
5��j�+�ݹ��p��.g7>}*
����;��\�ԓ��C�'�J;�*-�f�*H�Aa1�;3��
*-G��_m$X��"��VQ��	�;.��R�dž�y�9Sx����'>�R����z�V�=	��J at u�L��{���8�iyd%v�A���
��Z�J�d%�Ld�fL����+1̰��Y�E�n+)~y����[���ۗ���
�5����yْv,İyw8�J�~|0$ڙ��2�yx���l߹kO�G�K�+O�� ��
���#�˂g
ׅo�Ļqc��)i�ZkI�&��|����+�)���:�p� +�R��=~�
��Z�Xꉕ�N
V*9P�
k�
��G��U�I���Q#8��z
�Y�Gpl�\Nc�_�T��ON�R
-T�������Ŭ��x&���޸��R2X	^�Z�n
X���V�rV�2�
\�O/�;SI�޻+5)6bۦ��\d��@'�o},K*�ê�h7���l�4K+\�������䴬��ٙO.^ڵ�>bMi���Sj�`%IíQ6\8J��;�&��+1�~�%
+��]Vi�-���B�]�v������
�JL�'�j`Op[�7o�mף=I���i1�hM��
���J��o�왰%��
�<��%u6���;�Y�C+�I�|���J��
��p8i	�녘F�����X�4Z�����Ë�NO�+fV-G!�R�n+u��[b%���~Ww
�#���bB6��x�_pZkIN��"�
4j8i7����yv@;g���6n	�J�7�Wx�㲊��:���^����#�
�W�@��n~N&
IP �p<��B�eWY.O(KB�di:RI�^iݽ���bwf��+:�%�+
-ׅ��=�m�G�J�c�'B���(.S�X(0�[��o�J,��I�Q�@+ur���NjH��I��W�>
�T��b%~���Ӓ�"`�2+	���������𱛍�K3�9
1����HI������L	8#]��OYR�]_\{�@;c�Ip���kC����


-�پ3sO>� K�
-���$�����\�p�7�,�ᮡ���p�>L����>K�X�ƒPiG"iL��Y�ETj6G�%�f���G��
�<s�g%$x�m違�(��o�
k����n�*md��
��?�
O�S'C�%��D��>+��ĒZ_5���/rtr�Ĝ�����Ϭ��n"���S]�J�y+�kcu��Rn%|��It[I��[`%��-
1�Wp�+�Kiީ��<p6R�
�G �ܔ�v=ڽ',l<�����6��p���ȸ�������D��m������iA��)���pY��E�l��+Y�x�-dO�D�p�
(��ږ%��zʪ�!U��?�J;�*�J��!Q�;ҳ�
-�K��������Ϛ��r�|,I�TZIz�Z�Y�����Pi!���ؑ���g�
���YӅ%)X&9�N���V�% n�&��L��`��J׵���E'bNC��E\�
Vj�y���ҧ��R%�%Vb�
-�T����1*����|[k�B���P���V�ZVc�x9M�p�N
;r� 7;=9>�
8|1��ӗ���]/�8��b��Ys>�[�d���`hT<a�]YEUMݥ˰2�5��"��[��d
73�$(���}�r��s��`Å�K�;�;�8K�kR�Jc"%TZ{�҆� *sj�k�.]ih�J{�^;�c�~X���(<���ߡ�|�RBt(����#ZI�2C�z�9+qI�K 4kj� �ݼ|��Ę�x�äp�K�ڜU�NV��
,�(�LVjRl8X�
�������k�Yip�����Tc7ͻ�3\\FJb��؋�
A�aY�_e�s�
'ڙ�~mc��a�j�����1
*-�'\��EN���_�QU^Y^�I�1�$q
"K4
�
M+��]`��(
�IQ�H�&E��" �h
+��K�� `�R5�L����������{/�\r��?g��>��j���
��enᒔ�bʣ��� <��ɘ�Gj���È�>�R�N��ԓM%��C��ä55�&m�����a�V��]�����$Zp�_Vj�Nb�=z�&-����Gȕ
-6d��h�Y6�3�2��V��֝�z_-�!��-,�A�\=A "��d�"�`�r�F�c
[�h��7���{M��Dȸ,�����������@��k��b.�*O
C�C���Μ ��@�(]_%����$��t*�⽌���	�9w���O |��)�YyAC��9�	3���
h's	n�"�0%�򢭛�3Rb"�!&. �6V��
�`�mc�iy �}��8i��I��&m���J��+
j����Ԧgz.;SS,K�E�x��e���"��2ZI���c+A&�llq���� d��S���V���o���H^��|����2I+��{�K�D�Ɨ��ܧ��^�V��{���e:��)̓ Ζ ��~2Z��DZD׎ƒ���r
-.�J��#>
5�
?`;WO<Xlb�ZJ���� �P
���&i��p
�YM�A�pA�!�A~^n��p�NFa<T�#]
m��0����J+=�
�	�LZoɤ�w�����U���������Jt��+�?#^�qx$OWH��)�p���
�A�Z����-�
<6��8u;x� E�ZF6�<u���K� ����?e���!�^U��r��3h+Ġ�v�ҫ�Jb��p���%�͟=�n�P=]
�͈���0��ю�J�L��^s��V�F�����
��bl��=1�0��]�[��������å$&�Y����a�|<0'H��0��0(D��XzK�cIr&ey��
0p�?
?&S	�
'�"_��	��-�I[USw��,&�5��p��W��Pv`o���<<RTh�����
�
�Z� ́螤����������#
-0�����f���8�� �c�������K�Է[�J�UT��P}4Ou�Vz������ZI������<u�pi�p���3�--��ͥc�7E��p-5G;
����v��ll�-tY�$^��۳���
�����&|�o%�½RObRA��)������OOW�y�ӦL2���06����EcI.!����4t���F�LP¤u��[�"vU��N�oNä��r���O���
p�P}��$9RvF
-$K�M�Iơ9�
"'�C
[Iݓ�[�����`°Q����<|�#b���ld�v���
��J��������UP_l��
�@���Dm.� �
_�_g�93P|��zg+I�ґZI
-��~����
_
�
9�0<��p,��*�ڱ��ZRI�
�����/P

ݼ��BV�\����0���o����v�����Vz�f�^���;�o�6����Iq��
-ow'{
��ɘ�G�X҃�c��d,�q-u�DΤr*A�3��8�<@�â�%��lu-L�����p+щ \	Z	���w�
i翿��J�	�sw�?{���f������
��J,����
S��oh<�0�y��%�� Vgҷ&���UPo���?W�h%0_�Zs2� 1���
N��!�
T�O�Gg+5����J�/_
wB �� 8Ks�X�W׸wK���ve�����@~*YX1�.
��ON���r���ťH���:J;8X{��p5�p�����1���ua^vzJBtx0�e�<[+qH�l,i�%Dgb��M"�TN��f�
\=!V��l�
P���y��8����O�
-Ѣ�WC`|a�1g-cg{
-�� 3C���}{�X�f+q/ޕGcz_p ݏ􇢪���,t���\��z
���CG`��� �v��Q5�_���Q�?DLxp��_ϟ��Fc��Vz�Z�W�b�n����%�2R@邗,&��6eK��X"�
}vMy��H|)	�S=�&O�����s�&����ik�&PD��
����vm�;1����r�夢�dox8
�����I�b"��aF����F���.!/%��JS��Ҍ9�N�Ehd\��̜�����r��gϋH��?'�Ϥ0�h��p�ML��-2)� X
���3�2�'�G.Dd���e�Ƣc:������<
EPhT\�\b e�	`�5�R5^ ^��~$�����%�1��
�U ̄q���@��r��Fg+��K�i%%�=d"s��
~39�Ȑ K���ec�Oo�X�p-�i���v0�t�T��h*(¢��\
-6o۵� �]��
U�N#���>!'��pIЋwAPr��$�G�-�t��XY41�4�]�;u��,t*��T����$8<&!%
��h��l�I�Lݯg�����wE0� ���[�����t����Ł؞��ݸ��9�l��ĭ�֏,�!F�?�T ��
ݼ�a����`j{K�0յ��7nq�T	u��ȡ�ݹ}�o�r�J��3R�[
�V���4����
�q�ԥ�����$K�]G�U���


�Kƒ�x,��
�ݝx���n�$��Ѯ���E�i}0 at 2���T�-��IH�@�� �
9~
-�_J�;����v�}5z4<�pI��k��!(�mݔ���b�R?/W;�Xb*��%��@�I�h�����l*��F�\S	0S���;��
�9R>iѤU�H-h&��#�:\�X{��'*����ua^Vzr|Th������,���F@��T�[I�XjQ+�`�\��M%� l8����;��.
�P�����R� �ĭ�z*�[�~��PuH���%�v·���	S�{�9r� �L[�ߌo2�t����t�VR��"����]����8�l,iki޻��Ѯ	~��T�풩4
-����LB� Ehd\��N�Š�Ϝg��{�����J҅K\��B�w�s��
(�Qa� :��ec����A�
�-]�	y�E��C&l*��TZ�
S	�=+��-�w#f*Aߛ��/��/��gRA�[��x����E���F�
�
.4�Ѭ?�Y���[���8
 ������
�a�� ��,p��׎�ML[��q�6��`j���` $
S�J�����;��w���
-U�v��V2
�6��Vz�Z��x3��E�
.�Li,�w�A5ޭ�ZR*%N�ɥ�a��
Q�J�`��v��KI �k/]�~�V���Ӯ�[�ʅK�B�^S�ݩ�GJ��F��HM��X�t�'��Y�X�7h �%��hm��J	 ���=��<�gc�5��u�
�..+�R��US�E�j*�2IJ�R$QD��:�D�B3��D��6��a�a�����|/������J2���W��s���y�����t�2��Ji0��6o�}�\���
��9�V�J�]r^%���Y��P����"9
ܳ���%_$ϊ��i�
i6a]��G��Y�f��vB�I"��m���3�D
�-;�)��L���s][�7�fķ�H۹���n�l،���"!^�<\F�V�wʟ�c[+i��{�JM4�w���#�q,�]ci>?�����ḻ+�nx:�\KJiבO��uG�0��T��RL%H;�JJ˫N����3 b!ȥ�v��J�����>.\�3 �y%��fg,R
K��B�[�%� ��,Z0<��2�L�d�Jy�7m�	�^QS��w�Uw�IcF�I� [...]
YE{��$/%
`�x0"�`���)iK���9��~����w����ޓ�)����l+�z�
�1��>h�Í��u�4[��"h�8����e�فf�z=>�օ�3!Ϛ�J�V"�$؈�n4�c�.X��rMA�]�x ��v)G �Z��J��?1�~�wߗ[�
 �sf��쌭d��J��Vj�}�Z�
�%.�N
��V\�c)��%���g8
��n�vZ��J�Cp�Sw@�>0�������R3�Hڕ�Xb���N;��-���
�g��QDZTU^ʍ��X���ı,�,ab�0�UI4�6x;2���.Z��)<8Px
-é4�N��[`*
��Ʃ�m��#��]ERH�F�g�Hض� oe�I	�QaA>(�`��듏�<��-��vB�q�ޝlS���
L0�I q��.Y���\q�h9�6��m!ž�]�zB~��H�Y1������b�^�'�Po�
����_y/Z������&��X�'�.?zp��\f,���sw����i�}�:�$)%�hU��	<\��Cl�庸�T
-V�J{�U��]�q�����~B��ח*i�Y�椚���D���g��
W���lmMexe�&v,�Xr�p�E�#��E{w��
p�v&���x���E�<u�����_�� ��Oڧ*�Vӭ�)�F��Y�x��X~�w�6����������Y�d��Yӣ�A�q���H
����|���C�Lhf+��D8�Ot
K{��.�0M1�f�KM�so(����H�����{
��V�J*W[��˥
�>Yy��ޝ[6��J�P��<\5��Z�w�JڊH'	
��F1��X�<vXKi)0�����yy0�mjDj�3X�/���N8���wPA�Ʀ�m�	�<}�C�~
7k.3� 혩��i����.�Nڿ�y
���w�:1����y8�V�c)����
(���
-D�˱͐͠�ESSJrxJ�a�T:}�ۺ��Z������fҦ��J�DW�W5Gq���n�8
�4��
X�����
��g�VR�%�[��SC.�z`�
h������
-�N����"w��-_�;|
�¥z.��)�{�n*)��C�J�B��
�K� �<;�v�
�\�wik����tJ<���Z8:p�t���X�*'�ٸ>OKaA��a,�F�P���g��Z��ԗ��� ��@K��F�r��0)xJI����T�Ʃt�������M6
�,!.\0;z��xME�!a,��X����ci�Pk��	��2�Z�����C7t�qo
�XxH�a��I�
����S	L�
e�ꤣF�+Im3iI}
�J(;
+��Y��ę�"B��=ȘEj��#d������W�T2$� 0"�6b��8��	p�̕y`�]\�Ձ+�k�����ިv��@7�$ݼ�hm��%
�a1N	��4z
Z��1
�T��J�����+��J�d�F�f�
	8�n�=8� ��c))aztx�do���6V����5���W|>�!�Z2�zշ�JD�"	n>x����ȱ���C#�����Lڽ����	�
]tz o���I�W(��ci;��\~,A����p��E��ux'��

�Ekd��nim���C,�J9y��yJ
L���e������{I�H�F�^����>��$�Μ:q��~���E
�b���H �<��ǔ@NYCv,)ʢG+�S�C
-$���Y��
��b�}

7+�$za1آ���4�&�҃G?���s+�����j��vo�\�&g��s�S���i5
��ޠ�B������l%u٦���[H�&i%	�=z@
B�0���XZ�l��ݑa�	w��-�L�z���j�	��䭢���h�A)u!�dlJ
�i��拊�O���:��$SI�vzĝ.�����2(f�|,�O���
-�l�������v6(Z_Sc5���fr����ݤO?3
����A�1x��n*aƠ�������ծ�<�e�ŤA$&�_H⬑������
��8��I��uv��-ۗOd!��
K��O%���
ȯ~�8
����79$l^jz֪����d�޼-$�Sa�
-ǖ_�<��pi�#Ԓ#l+.X�2s1VsdX
F�Q��ቚIZI<A[+ɿ�z���h�1����_P8��Tc)�p�T��
l�����1A����j�Z�XJ*>t��Q.��}'�E�̘��pqfv�
%�TB�Ѵ{ħ�/�SS�M�蠽�D��'q
-��Xځc);s����3b" �}�K
w���e(K�Ek1�Ԕ:I���
�
�Ǹyz�MrgၝJ1h)��',<0:iu��FRh&��5�����Lس��(UVz�93b��L�C�s���B��
�,�F߱��7|+s�< ���=,rZ|bJZƊ�u0M�
>Vy�s.�_Y�sE5�VR9S����j�VB�-�h�T��1%1~Zdh ���H��%�
-pSw�Jjk����da�XI��I��_�t,��r��noO�1Ύ`�A����zA-uk�Zb�N��:	�$ �"��`����	I)iK�V�-����R
�J�8�8�Ԥ��
V��+�.�@��t�R!��R`�����!���=��8;�ۂh��&
-��W���B�h)�|$������
D$������g�̃�8�8>ژĚi��
c+"(
*�� �����}	��r��!�
"EED���bc�g�:u�1ub�LǶ�6�ϻ�����}��C"�?�����<�|>�/0R
�����;S�UIn9��^�UL#X�+
g��]�Bgu	�^_�~���%���!5�:B�e������
[0ш�4�>X%�'��|2>��:��&�_�<���0R3�
-˪���X�1g�'��$��[	Å�L���o�
-#0�"d�C]mM
���h	�a��̐vQ_dG�>Ϗ�L
���Wޑ�^GI���� >Hv�dYz�ϕ%�vZ�k*J
-r3Rq��dr�����
$;Mu��i��ii,�$d
;RJ�!�gϙ�E�e+
�ݽ��#b�o��TTV�����+�JO��$�?��F"$e�Q�~	�,�BP��e��-K�%�'Ą�y�9; ��,!\��������Ci�E�a��
V��Fŋ�����
-��|RJ���I/i�XL#Ԓ 8<�'��7_Cn��y��\WUV���
-�!��s��
$=8)(
-sԠ�~�m�d�,M
��H)qU食M��
<74���wv�����_
o�������7n�U�̚:
-�+��i�/����F#�e���E���V���n��w�D��~�OQ Ǘ%H4g���
-T]^����rwh������������tu��i��#�Nj��pcV���Rz���������hjA_
���
�o`Xt|RjFn�ݮ�Ξ�㒪$K�WJ��\I�ըؿ���@

s�ҲY���y.K�I�Qa�>�!KX[�Ҙ,!Xڔ��mť��C�Fkhj�������?$"6�
��� �JÂ��D���0���D]�܎������ �������Ϸ�o�ڀ���������Eh9��Ng�,[�&ɖ%�H����
H�Z
�̗�=|��&$��l.���ֺR��s�h���� C��nhVB����Ȼ�/��^�%�d�0
��& d���d^y'V�����G��$��YI8�,�e��:8 ���2Q���rwq�]naj��4���Yt-�m]"Y�a7�*%uM��z�\��	��KLN��/�����q���$��K�*�iG��k+��.�5>K
1�{��g|Y�w��5�,��
�ػggmUYѦ�����o�4KS#��~9m��1�Ʈ�J�4I %Q�501G����7(<z�:
J*j��a�U��a�C��V"y���Ǐ�]�<x�Ա>�zpT ���d�A��]
m��c&CS��'Pd�����pe)��^P�z}��s
=}
k;�k~��)���U����
9q���-菟� {Af 9)V�)��
�F�Cr:رww}���| [...]
-�ґ�����������LH��=?�4
C��-����қڙLx �D6Z���fV6vN�V��F"�!<�W�Q��*ѭDݑTI�%
��h���H��g�̂��� ������njm\d��窕v�pQz
��n0��e��%UI��C�3����^�h	������; 4jͺ
Y��˷}���
��ɳw�����4�ʻ�=��b>
���
���Ԥ����x�hɢ��,ӑ���[���Jʝ�R�P�'�%��������
��P���|��pB�>�W9��X���-�l���o��0���K'a։�4���,u
H��
<,:>)5=g��u
M��
��Hx�������X�T'�ffxm-q��%D/]<{�����M
u��[6礧���
-
�������,���7�W���kIR�~��(���A�5�F�������~c����;[ڻIƒ��$k%���B�G�&���.�ϳ���b�
�G��Q�
M����� �����
jY�hI9���	�r�*14�х$`�
p

����QQ�c7��4�L
-�37�<�Ff%Q]����@?�@uyQ
x96�i�+�,О;G
�E�ʊ�8n%�+o�J4�Q�$6����V��ҿ%e��&w�q���0/s���؈`o';kK3���%m�p-��F'�
�:VJ�fDR��1W�S��������J����q��i��EeU�p{�݇��8
�-�	��fOډ���I	��nFa%zY����������ޱ���hS�����Ȑ oW���Z���,�Fw�*<(����Bx��

-�^�.5#�`�V�M�Px��N������rUI,%^IC�G�%-ɯ�lΊYڃ�w1�qSؽ��朴�D�� e'��P��uu�,�a��e�=�,)�cB)��/���J at sCH�@/��H�yFnai�Wgϑ�p�M�ܻ���o%�^f'�"�у?ޅ/�
��z�ۚ�ʠ-�$Ɔ�x���M
qY$��Hy�J2��u+�:���I���_�?
AY����W��t�
���m�ܝ���&:<��������h�g�
��a�!-�B�%j]�Qb9�d
Z
/�錔� )A76���sr�"��̼’���]�m���!�]�v

�EBYډ�.q�L��e��֒hk��t�
-���v�k�4^QR��q<&<���
-���h)^�:�%w+��ix at RR4�%L������6%=;��
�goGw�8<�������A��$Nb4����D񒒽���i
-O
?zȖ��#�5���'Hs���45���=OC}�L�,	�4Q�%#�����3w\�4� 
- at UZ��O`��Y���!4����r��0ϟ��x���Y���Jd[T �♓Gu�kj��,-�ION�	
�q���b=��|WDi	����0n%�+o�JR摸�<��{Ih����͗�Ǐ
��}
r
� ���j�ʊ��R��E��z�9;�XfabZ��GjI�8��F'&�}�Ih'� �8ה@J�
@JFf�ֶ�.�^~���R3r6o�Z]װ���@o��3/_E[�T%	����37Y�*�,3�\K2Y�%E�^
�p������=;�ˋ�s�S��‚�K��#�$SqG�%ě��ܔ�F;_�h�\�цD�&&!
K+��76�u��
;un��A��'�F��pf����յ��Q��$,ѨX���*���b��HQDA�"�""�)"U��������"�&�%ƞ��flQ!7w�Z��}�LJ��9� ��:�}���R�$�v�����6��\���� ��tu޲R�b�\S#�4iY�ĖX~&�8�cL��̒0P�T�Q�&���-Z������{?�Z| [...]
Wk/�� ��LK��
-
�������`��ڸѪX���⪍L�Ș���S'
��(�����q���{|G�&�����<Ԁ<܆�y����&��$�]�&�Dz��Lla��$���8�T�P��gN�g��A�AW����r��E泍�,�
N�i
$�I�)`��j�I�ԁ/��v�R_�JC�*a���_�|
��m;w�= ����q�x�i,��7�b�n��9��Z�a�Y��42e�DANzr|dH��t+&�
�'�9ToЀ~�l��Q����4�$Lp�VB�VpI�,���]��P	ޝޝ
��c�vG{[���-Λm2c��D&��z3X�#�Qo��ӖL�1I��
-�2�F�?i�������%+֮�s@�{ 0$2��c ��.����Ĵ�_��|��k�J�,%

��G�
�Z(K�K�ׁ����d���C��ݽ��f�m
-
m(�
KJW62M��iPry��6ڡ�F��f#$h�PxtB�Ѭ�’��(�
���C
yP���(�L��?
���	j�%~B�ް���
-�������v��Mʂ�3QY�E,u���
K�U�_~dP�:@
�W�&�CvA?]�������D )-+����U|��Y
`
�� �
P_�@%�����2���r\D��>O���@y�,*�uő�F���J�P��Vrx0i�>y��G
���=�w�f��E���x��ܶe���e�̛m<c�p�>�*D
n��K��0�E�3	��]�n��`������
��+�M�Ψ��1����E'�P�5܂�#F��vɮ�d��G�e�K��+��%t��k��Ζ�,��>��
��ۃ�j�І�X���L��j���I��C7��
-��a����>�C�QqIG2�
?��p��J%�8&�@z%
�L�Kt]jynʩ���'LW�v���s�EyYiI����\
�m֭�\f�҈!�M}H�uѡ��:.������:c����Q>��J&P�����sغ�c�o`hT|Jz�z �ם{�b<�㫙yo���o�������K�����A �[
�*.Y8w�Ѵ��IS�H'D��S�}��'*��Y �o���$ʾ���
>>x�S�=��y��sgN
�<����m�����!���26��e�~�I_t�̛�KR.�Sʵ!�����I��+ at i:@i�B��-m�l��
-
F<���t��K��^o��������UI�I2m�t�w�55yYz
e	m�:�ޙS'��f�%�G���ȇ6a,����%Q]��n`�U�>��%���f�F댍�`Hd��Ԍ�����ʪ�+�7P
���ʪ�N�+J,�X"�B
�LL,�$X҂J�7��Akx��t����N�(�IOI�
<��a��5��eiЀ~�,�-t�\��R��ޟ��N
.x��X�F�g�9
��Zk�.WO���#��ǡ�^����	�At�^��f꽕�O]��<�D��\��r��P��;�6�-�5�1m��ñ(��=Q���mT�+��J�~e�@�&^씳O��Ҳ���E�9驉�!��tuqrذ~�ʥ_ϗ`i `�1�.�z��ă��djO
�$��<����	"H��
�� �e�,m6n޶��ˇW�T�*X����ͪ��ƶ)eM$A$]��`I�,=��6~�F�������ₜ��ñ�!�⡙͚i8m򄱣h,uW�Y�wq	zT(%J� �A
��O�j`d*4��<�ц�$�
��+,)y��ڀ��C��@%��p&1DzIL|_"��K*�e��/
 
u5Ug�J
-s!�c#��}�\�IYZ–���
z�x}u{b6w���c�C��DOM
�������U	
���	SDU���L .޼��
�)<9z��G��_���w*� e��+�O��S��}��]��m֮�X`f�Eq�0B�^<�����ڨ�PI�&v�8 �!G@�[v�ԳO�����O�Ļ����N��e
MI�	�ݳ{���&;.�X,�
6���qD�e\� � �S�B��$ֿ1�����۷��Ab(-X�l�:�
����y�;�)x�I����k�z ��p���J(�M�7�y��
��hK%yY�����?��c�56\��D\"/;=%1&B�՚K`h�3
���D*.=3
��K���!�¨h&},�2'J��h�I���F��4���4�v������A
�<<�����?�k�@I`!�
8ϙ��$d⸤Kj��G�/�z�SDH�--��>�
z���V;�,M
;j���
��

V����P?
���!1��"����r����A
��٠�BUھ
��PXtbj����W���ݹG6��8�-P��&֙��7�L���q�5�}�
cC����Ě�#���J���D3I ��kM4�����d����nߨ���
:u�xnfZr|tX��~o���
7�b�-běŒ
b�1o�K�9�f�$�h���Om�H��L�u��g�>|�qP��PZk�����u�^߃�1�����]�|�:I�{���7�eU�Cc��Ut�*�*�[�7�/�*Kl�=�.�\�:��w�����
�
͞�9`ɀ��_̿/��+��Kh��"&a.vb�/��(I-dqiye&�-�v��hqע*�ר����$�g�!hq��N,���n
�i?���R}��s,#51&<�o�'[��.2�h�6y����`8�@Y X��c������C	��O����?q�t#S�*9AU�
����Wx������
�)^B�7�@I�JϘo����)���'�G�xR�n�?a���/����=��sf縬�$��M	%�K)��'��HBQ*�jJ��"$�h0&�ed�)��~�
��$���&��:����g�g��Vk����]k�Y������|?���J��@%���T�𨤀-<�G?�]��L
-.5K�,�ݍ�TQ^���
����e���<�?5iGlTxh��5�˗(�dmiާ7Y�Xq
Y�)�ă�)=��
IJ&��Ӈ���è���);�aN���g�]����?08lkt����	�WHڮ��vj�ċ�\d�GEeU�o���R��h�-�A�����
�F���_L,9
X��03��ۙS\�K��D�Ĩt�9��hsF�'-�5ڼ��Ew�!q�W	Y��۷�ZTIN%J�(&!��D����<�	�D�$�z,�R�pS$���
Pj��dHMJ�YZ��4�k�������mm�,��{���S�eX�s�#��^6
-�&hŠGB��
޼��u;T%�I�Uڄ���/=3�ԙ�9y7��4�K�^�.C�*���8ٗ��f����$�\8����
���pΌ�
���F7�7z3�>*i�R=���I���˩�lb`�
�>-XR/Klw�7t� /��wߞ<~$=-%1!&2<d��դ�x,��37%XŠ����&�L:�N��ˑD��M�z8�J�J�)M�PZ�@PXD��
�S�gH��.�A�����R%Q�E�NZ
l1����h��gc�$�ү–��5.l�2���w�n�]&�eJ��[�����X.ǒ��T�Zk�L�f<HAu�Gƃ��@i���D�Ңe+W��@�6y����hs�Q�-}D�C�b<p�Q=�~S�
��$�K�db\���X�A����›�� ���{
f_ at Y�
%�Ҍ�ܜGskާ���
K���*�����������8���
���a�MEUZIU)>1eƱ�a	\�Zx�
9
�
��X*	H���^ND�����H�ĸ��MkV.[0{�$�����%Z�����^F��6S�C��(�F
AR
>o�!����S;ɕ�ڠqw���v���KΞ>�#����mK��pKNpI��������uI�KR�5��$"�H���o�u8��{�1���7�n��p�֬
-
��MHJI;�)N�0��S\��1@��^�TI
���|��֊�A�b��$�ڣ�b

�xn�<�M֭Z�a�ؒ���(n��ݸ�ڵ��JYS����6�x�g��
�d7�@i� %������F{�mIyE���d��f!�A;��A��қ7�$@��ŋ��y��D��Eu��X��a��h �T�/܇p�d����$K��ދ�zM�tw
�4t�
L<X
F�0�:Q,��t�����%@���%(�����N
u� �a#���>fͧ����Ty��K������iwIe��?
��I����+�B�O<q,#m���[@}���<ǻ �mm�����ѭKg��?m׶��ћ��'RI�5I;� 	y�?�h"XW�����*�|w�
��L��pD��|�����&��j�f���
�m���K�7���.q\���Ȥ���?j�!�5�Pu�u
��p��(YZ�HeP��`�r�����Ș��=i�G�	s�_�{-�\�vZTI%&J�|��P�����D,��5x6��J���Bh��жn��v��e���bXB�,��Q���K�-!E��aI)�P��C/6
D(�x��������E0

�x Fˍ՘tCI%dX�ٳgO������P��bImjj���ڳ*�
N�u���gNee��K�)�҂�3�L
�kokceaj�Ө�KL�Z�
-�(JJ�1(⫷��7?�	�s��\�*}}�,Q�[��e��_�W�N(/i�i'������A _d�
�-,h�ߊ��fN�8�y���@%3c�n]��Z�r��L�?�J��D�D�T->�L� %.5KrY"�#rCe�0���(�r��s٧��f
ػ{g\��p"��,�
�G���!�%�K
-0њkTϵh!�984ʤ���P�:��#�����f� ,;g	J� ��-�1���;���q�W	{Pc۩RI����2�e�
��/�dO%M���n���U)�TZp�Z?��
K*���%edZBS��$N��t�Fƃ�8
0�)����FD��HJ�/mN^����� q�
㡖�%#�g�&(�	LB$=}ZUU���d"\B_"�$ǒ�����T�A�-�l.�,
�d��{Ѽ��'y�9�
�k��
V�R{����Nh�=���%Њ%	JF ����m퇌�2���KV���NT	��d�9P�k7q	��
O�\�n*5p}^# ��5�����de
ܻ;!fk(-t/,t�!��Y��66�j�� nצ5)t��i��C%uPbL��
B&��ZuX�M�xY��n�v�xD7������<�yh��
�i�Q,yM�4a��1#�l7��ڒV
ꒁ��qbɉ-GkNvZZ��-EI�D��)e�^��bיY��0t�(gWw��\���u �m_��J�{ ���+We
~���H�4�P���d���#Xl5���� [�X��n^I�݇�
-�.��%Aha��
�\��⊙�.��(�ڨFִ���
-LBQ2��+?

�М�)� �
-
��MHLaF����m�0
%����dP�E(���B&�H����񁿈��(L/Q� ������
-U�$8�j��'���ށZ˽�diW\tD��u�|�.�����q� 
�/8�1���
[
-�K����R
������F�������f��#�7�I�g�[��& x�6I�.��bs�R=����5A�ib�����a,ݻUH-�������!����
�|1��u4W�B�S*}�L��J�*�P"C�2	n
-��ȃ�L���Ӵ�
۠�ݯ��./�#�{��Z~n΅���R����4y�xW�]�D���Vp���՜�&
����'B�1$��cL��ME	�di�o���#B�͝,p
-�
��� ���Y���]��W�:�i>�TI�8���F�d�"����VbI7�TeI*>�R6r�i-=
B���
����B�ׂS\}!2�qi�F���ǃBhEQ(���������Ș�D0Z���h˨��x��{���P=#	J5J"�� �***
�M &�`�pI’<6
T"�������U���p�ݢ�t��R�M��_._2֌)ǹ�

o�5���
K�K�i�9 �|�r(
r�4���s�ל�K}V�h�?�e�c����̋�1�d#Q�cWa2-D��QHc�0
#&;�%K�Ȓ%[d
c�$RR
-�i,�Ƙ�����u��}���n1�9�E׋���������CU)��R�ehr�JT��3�vZ�*I�9�Z�X"}�u��Ջ駎
޿{���+��0��������.�v��0�ֹ�F��R�㢒�{X{8��A��#@z��	����'��&WU,�Z���D���,
��K0�R&�ށ
�����>��N�쇐��uI�%,9Lr��qUu^�x�1M�������7��]a�[X��hc���eG�4��fæ�I{�:�v�܅�J8�=~�&���*����~���|2�f��L
�$,�Ym�UG�w�-��-�e넶�'��\�%ow��CKP��Bf��
Xd
Ց�"�������b�
&��@s�4�F����b�����@czURA�
%¤B�����������TS*	�\JL��̛׸,mݸd���f�L�
	��t��0h@�>�fݻHXj��ϛ�\�������/
8����i���6v�`����0y��؅?��z�B���>,,f�!�FuTb�8~+ǒ$�>O�����E��b�"‚|=�����knڭS{��F�M�4����
��'�T�x�T!�B���
aҳg%%%O��%�p�!�$]�1�*T��y.�B���d�����gO
?�"4
�RX�H_O7'GVq�L�.�=a�5�K���D&Ztu�S�}�a�S�H�Θ&�L���C���z���m���`��Ý�i�!�bE(��8�~����T�*U%�I�S�-e���,�
���U�[�X��
� �=)&��C۷k���uڢ�
K��%;���
-�5jAJ#k�Y
�S��U}��B+����.�M{J�s
-��4��e��%q<��Q%5��N���I�Hyy�����@��Xz���T�eI
-���<A�%�޾��5�̜S&F�
5�����a���~"�Z�RhL�8��Ta�DPOf��Mq�P�����������!ᑓbf~�`������~��
]�g^�I%

SI,!�ɼ
�J^��q&-5eoRb���Dž��;

b����i׎�۶22lF�ԀP	�\�T�ǩ$l<�
%"J�yIO�>��ĸ����~5��;���i)��ˁ+�q����gN
N��ذ� _/7g^q�fL���c\R��
�9ʦJ��[]���ȥ	L����
�0������-�� �䃩�O�͸�;�_�9��v�@I\
e�bK�C4I\����\'��A%��q��ӡ["��,r
���e,�{{���+eֶM+(ACY���i>eT
-�mnȃ�^��"Ai�%�������R�J:PbLz D����s
�q�~.�I�%K��Дߏ*�$:�Y
L�R���
-#o������EO��;;����X2i�ʈ$B����g�L�
��r4l�?��AS��P �:���f[DԔ��K��lؼ}�G�Z�H��R�R5TRИ�ڿ� �>q���
[6�^�d���'��>ؿO�
]�j׶U��͚6n�ߠ�^]��B���?E%��T	�	�\9)@��Ǐ�郟��0a�I��JzV�\r�pD��
-�ss�)�ΝI;v��KS'�6*����e`	*�_��T�h�q.��MZkND}��E�
m982�sXt���ԐImLp3Q�>�������?0d
/;�R���� ��S(��3�������E�-�R&��\x�"
\�<����
-��Y,im	
-��v���w��?�])c)<4����Չ`	�W�/۶F._��I_������ID��$0��jG�b�a0:9��h���3�h�hm�P�C��c�} �ݻ��ݽ{��\�Œ�,U��[V�<�,�߽cK��q�̝3i|xh�����0��
-QX	K-
Q�$.��N'
==�(hDFz��J�C

�ݽG���0y�,Xm�W�߸5i�8��
jUz���J�����cR�Y��_�,>�
q��e��Ϟ
=~�(/���6B�7�>*}*S�_�T�0T�����uN����'=!D***z�~(F0Q.Q]�j�k�,������ϰ�
��˾}��/�/�;�vN�R����q�G�yӊ�h�u	;�p�e��|}0a͑�#�Ś��W�	��gwƚNf�o&Jd����y��

-
1Q����J)G��<{��_a����Ӟ��S~X*�eِ�+C�E =�O�^�Ti�2����;Ehp;�k�vHK���#}<ݜ

lm�����dԒ;�:�z�U�UCڈRRFƭڴeA�����g5�-���ENh����8��q	��6�W�+/WmU�T�@�(� I�w�de݆���u�`�]* ]"G%c��o�n:B=c�I�T at e	�����)�vn۴au��E��̘���
-�/dҽ+lkc#I`�44�3��(��
-w��M��=��P����13�.X
�bm��0T�q�JE�*���T�JJ��X
3��MZ燒wm۸neܢy��M�
����h7h at _
�n�:h�y-�>��?
����%d!Raaa<�����rI�%�*j�%qw�¸�w�6\�K��'X��0nL,o�8��֨K�h�!�ZK%G[��
g�|_�����
ID2ɘ2	��+��yo�oH�
wq��

��8y/;�c'� ����sr�U\����F���[D�,r��nnK|.��Բ����2�O��M����)Q��a��^��ù�.I\2VDF�W$&�&��UCjIT�
�x@&����C�Ћ6��Nt<�G at N3�P:�
-F��4��Ѿ�*�y#B	.���Q�Cd 	���{���L��ܼ�K�%��+��U/KU&K7~��q�$h잤č�V-_�0v���a���2,�!X�L�Dt��	�%0�0�4T炣 �M@<�C�.�L9��ܼ�C�#��~;g����7lڶs_
-�ҕk7eU*�T���$�k�'Ņ�y9w2o\��q&-5eoR"��S�ƅ�z8����47�ک�Ik#C��M�7��ǩ�I-�>*)TI�RYY)�R1ARA�Cx��俀& ��%��+5�� ySJX��%
�
�)7

o�R|
�ҷ1�#��s�t	f^O�8�%���8�X��qU�ȿK at b=g���,���
�m/ڵj�1����1j5jq at dvD�q@�#
-�$ 
-
-N�
�ш�A#**Ȍ(�́�5[�����~߷�?��b���
��Nj�������L@L2�dfn1ޒw����EK��׬��
e.A�,A)'�TY�^�Ǣ��m��'��
��(��8b���P �������(�7��
���ZYiqAnvֵ+_�?-b)"4����mɢ�RfcYf����K�`�Ȕ��
���$ �ND&��H
�'Osr&yp�fD(���%@�
A�BI�����E�z@��Ē����Ҥm���*
���ݧSVVd��.�\�cIȭ3cI�RB6�Xb�!�ҥs�i�ɇ��DE�n����u6��x���n:ؘX�_{�f�
-�G�u�����!C?iFP���:g�¥0R7z�m�ܵ'.!��@���i��c��r���yY�O\��T"l V=�WR ?���'R���Fo�:_ u�`mia6b�`����1��?����J�6�Ԓ�*��O�$�V�m��6!�����$�ߏ�] *��/�����QS+4����x�RdXp���h�Xq�.|.M
?V�%���Z񚃛W�7
�
�#|ڳ�$��D$�0�wT
��Ÿ	�m
��@�/]�����/�n�
��u�R!�:��FK
-�T��r�<��mo��X$R
S���
�\��r�EcI��d��Z
�K�w"�|�<�z�X�x������l�"���s.1��-OL�L~z�Qqy`��-g
%���a���\
<�	J{P��y��E�
���Y�"�ò�Q1n#�
=lkmnjl����&$ݿWZz�Ni�� �����KMͭm�s����(g��X�ᐝ�y�"��#I��v�
	��YX�Xr�X2�x�p�D 
-�?x�q�@av�,zʮ
��+hol��2��� Pr��p���Z���ۣb
JNMK�v3'����R�z*�P���7�D|�H�6l����쬫��ӎ&��F��m�\���<�)vT�CM����� ��[ݨλ���RQ)Q���T�'y�R�D���L$56644h4�OCc�6�ĥgϔV�X"
-���A��

DZt*-5�

����c�
��qv"����
eƸ4ؘJN�9�Z����N~���+ 	kn]3b����L��mcCi�l�O��\�n�&���^v�
	J�u�F�䢣�{Lj(	L�ِ041Y�TԺ��{^o��<�^v�Bh0�;��2�\:�$b)n/`i[��Ϧ
�V�\�י�%�	�,d\�P
���%&D�::Q���Ĥ1�P���Ǐ�t������E�}��$B�]����Ru0	�t�����Oqq�] p����^�Xµ��g�lW��ޱ����c	,�R�=���/AN
KI�ۻkGX������+�-�Ok�
"S�k�y��Ufv�v���otU��N��?�r��
J6�H����`��㟃�efe���s���
���J�̿�2� �_\
�m���?fGX���:���Ξ1��j�����X��:�>�}�~6��/Y�FT��Az��_?���LB$i4���uuu�/����\R������XQ�j��̱� 4
�
�\���cw�'�Ɗ[��Ҵ����K��0	d���lz�����{aɱ�#"aω3�d���#FQ�YZ���m�]��z���}��m߹�.��g'��ɖRB	�#v�
�+����>(q_�p �F&
0e�8���t@��P鿺�&��j�ɋ�,�ZJ ,Em����u�ݗK�v��	8q9������&$�lB [...]
ܢ1�1�!&��X��z�d!d ��7�7|���Sf̚PZ�P�
���{o|b
-l��_^�/.��
�3�T�
�G�_

n�|�0|���3'�
>�m��g�Z��
]��;�L
;z��!�~�w����y[�~�E�_�J�
��8�����kcPj� �jkkk����LЀ���c�scI��p���n�RÉXʸp�ԉc)I�م��~���R�K�gN��H
Ǹ�%�J�9�9(:�ttz)��:��jn
�75��$k;���f�r��C��ekp�����q���b�IP*��lB��~�D~�CRoX@��ai’0�,�l��l�gR�>��?�Bk����ᄸ}1Q�a�[�l��K��\r���d9
��{i�)m\L��MH��}l ��$��If��&XY�BPN�\\�/Z����i�4�^�hU����?PR���O������
�TX����{�Nn^^~q��Ae��%|Qt�(��Ñ�A>��qƖ�+�퐕y���S`
`x 
�~
K
\]p��B"8�8��5�_Yb��N�@
-La(���2a������%7�5�^��a0R�m�t��͜<x�(m�涎�RTR�Cx�c���-�Ϲ��q��I�{�#B��7�fm�`mia6b��A���c����/�D*���J�)*��ī��1	�T]]E���T�\�,}�˱�ΰ�U��p�����$
:�����V�K�N�q�6�%�o6���cd"4����E�½b�ːI$
�7\��F�23gL���<�[J(�~�!��1���
=New���z%���C���?#Jl(�����€����%�F��}*�KJ����j*�X:����É��b�#�C��6���r��kgm%pIY?�L��22))�*y�A�I1&��CP3�PZ�F.	�<'�RN~,�J\�%�E��:&}P��՝
�c���ʊ���$ RNv�m:��9wr�Kwa.U���O�yU:�M�
/Ē���%�Riq��[ׯf\8s�#IA"B�X��hg��H��N�	b�c�2�ۗG at w����v�=(��y
J>� [...]
-:��@��+@�ғ��_fAU�go{��f:�N�&&&&5�5.���h\Pq�%�(
-⊢b4�KШ(("
-��z�/�E<�
@"�T1��1ic�>������d&S/�.2r�s������ǒ�ʵ4>�;�X*��LOI�;y"������~��|H�>�9�:����!��0�pU��谸��p\Tu���
�׎�#j9�>�H]	I�$n:�Ic�M��aK]G|�΀���!�Ǣb��lB韶�
(=�%Z
�:����M����67���.�X�H��S�Bk��,遥ب�����;�nZ�/g��:�e�󸱣G
-.�GdB�$0�c�QdRffOǎ�vЎ��ݤ�
�F��$5w�B��U�x

-	�s"(�+PjeQa(=y<آ���(]��To��2���JK�
����¢"������t�Z��3#�e��'Pe��W�(�&���2L<}ZR|4R	ڷ[��
,�4vԈ�K}�K�,��E
5�ٙW'Г`Q9�iMh�7Ci�6���P쁄d]&.�t���|�
-��6q
�E�T*� �Q���V�p-԰� [�y�m�W.������<v�p��}zv�����;�V�ү_P�����*Jm�}2���

��uuu&�Q_�pAp�u	h�%鐬&�K�4���h�Q��Q������������°���6�[�R�w�dg�%*���Y� ��*�M�&T
���C�# �Ĩ�d$����s@M�0i*�o!J��|B|���B�FF�&$�ed�)Pj���)H�������~T�N���%���QX�
�Q���V���G=v�[*iR�n�{������%����<z���ݻ�mްn�JEq�M�4-�\rT"�Q��&Ƒ�n
U'���T/Nj3�1N�'N�*��2�����`��%+��3
l!Ac*"*����U���
E���yx��

-�
�R��J蒊%�0mꄱ\�'��G�r#���J�PW��.%�MM���
;|PŒ��9XwS&Np��0�Qp��⯂Lj�ɀ"�c�!1i�P��'O�$���^����k�t�����4}N���olj�?��v_�J��x�_X��2��Y���2�k�g�
yY�����Ѓ{wmٰ�w�B��Ǐ1t�C�
�����������OT�\�ү^P鹡�F���λ}����t�� ����S[
4�7P�.]�λ�
�o��l�n�p_�X2�X��HMJ����}˧�K��̛�>�u�7��%7đַ
-&����t8/:0z:I���7�?�����ԋ�D��M7z,�DU�6�{�%t
�����D
��;���k�S�dJ�y=͡Ģ$3	�{[��X��f�c�I%[�$��8y�rK�*�r�Sq�Ǐ
9|p��϶
�]���s
Jp�T� |�
�"2�Ĥ�ԤUg���fQ��� �V0�y��tW��
�
�xX���m�x��=��F9��>K����C�z\�C�LTDGRT�O��TW[}
�tL�rss������/ ���0�L,I�C��X�f/�,�[s������%�yY�)�b��i��Hh)L�.�(p�/������D�#g���8b�p���T��y
-Y�'��?(������o(�
�o�H���m�����>���*�I
��e��M����\}Zb���Á{vl�d�r�9\�����uy��^}�/��K�P�7/��P��E	U���{����iB�I�5��U⩮���KԀ�W���`��w�]��f���Ls,���2�hy���<`�ҚU+��p�a{
_E%G�[��Ts8-�-
��ʎ���#���N
G�'�7�H��Hr
�CS����>w>�o���m;w� ;v�d\b�N��_���M���ߎ4>J�-�_%i,�^��%���h�c�L.p(-K�Qnm,Kl���Q�K+X��RNfzJb��a��?�*���l���5\��
(2JL��
����,���U�
-�o��DRZ0i��4�Y�s�(���߸e�g{�񀜲9�slJM���S
�nNv�$��A� %#�R��0?/';+S��gd���Y �T
]����
�A��<]��~2Yb}�\�LKqAn&9�K��/��D\�M��;����<x'(Yȏ�A7	IBT�I�Ǝ��gO�I��A�Rxdt\"��WTr�ˆ7����u�P�B��Eg�7���k�*�p�G��ؾqݪe��g��8;}4\�y�Ν^{�e*�~��w(sM������JV?fZ�_S�Qϴ^�)}��POL�:o4���h<2�.4�.)XR/ZӼ�m�o��϶���R%c)��7U\Hp�^�%���q^�
�Dɍ�W�`r�Ʉ��C����,�+�
Fû��� �����n�`�·�7�Ҟ}��GF�`�g�(e'��%��%M�}o�[�R�˪��_y.T�[�"�'�R���-�
Ӫ�+.���u,<4�w���
���p�
�
R�DON��P��
������#��’
t
<t���˴�P��^"(��΀��A!a'N�c<�9U�C���@�'��
�� C�
-�c�RQ����Hץѣӥg賲s�
�K��Q�zC��|L�%|
�)�ȅn	]]^�T�䄘GIXZ�jŒE
H`�C�ƛ�koq>�Y��@�`�Ĥ1N J3f�{��/�]�a�vJ)�Y,��j9�����?�C��x�ߠ*o��1�-3�g��"B�ݵu�Z�%^
Ϙ2a��a����|�]m�w�2A�_�J-����/��-r�R���t��B<��� ��S]�Y
sٖ�7�㓱�Ȫz�+Û��`�>�s�;5y4�K�q���%W��D&\Z�{�B&Qth:��D��>�Ј�
	'�DB�
LHA��I3f2��|�,_��=DiD)�xlBrZFVn���
�
A	ew�Jګ��j$`+P�/A	���4_T��~h+��[���ԳBҾ׶���~V*Yc�K/�����\(nRBlt��#��g��z/�7ם�4Ir\��%�zH�qd�����6�@�j!	�(	�`Jq�j���ǔ�`(%(�ZB�_����l�N
[��9�����
-��!J`RFzZjJrrRRRrrJj�\��+(*);S��ѐ=ܽ''��O6�d�1����F��%���R�!?G�&�$li�z?ߥ>^B�\&9���2
��L�p͟��1q�T*��2�TR�Lf�KԸ�
-j�4�
q�5�ˈ �⾠�� � K�4��(KC
�@w
-��n�T\�2�IF+3ɜ�������B3S��j�?���|�y���WM	-H񗪁SgQ����E	=uM�����;#�
(e��:S^U�G��A/+��

�C��j��'�
oz���
-+���K����E�޺1����˧M�8n��!�>��w���7^��o^�#͜�\��Tz�$��Y���!2 ���|��V_�So��

Mԗ���]�`鱊%���K,ɶ�	,575؀%�ťj�{��Ҽ9���(}��a��*dFGۅ��s
��%xD+�Db���=e��4�t�s�K&�

ߤ��
cnaqIiE�doԘ�g(�\��
�J�9+�(�]l�a��Q��4ig,�t���Ǻ��H�;*�aɅ�nX� ,��[T����l㆐�5pAp	}I鸟N��,1V(Fh*�
�(�(:�� ��H�D��J�b&-^�b5	��{/l1�X�.<���tP"���
-�
��7N8�#�d�
� ���
-
��rshrs��
O�>��d��*��s�ͩ�-Knϡ�A�{�Kx$<
-
fD�',
',�ٱuSXH
-,�Ҽ���	.ykc�0-\5pJ0A(�ٌ�̜�MY�x���m�"���P*>S^Ym�w J��\�.L
�)��PI�!�*�M��񢷮�=[�
�Օ�d�)�cc����z������>�&�
9l�G��ݷ�OT���J/.�Ԫ���Pp�=Pji>��`�j�V��b�Zk���KT���c�[2�K�{�������l"y��3ҒE]ڽ�=Nr	;�&��"��^yM/Ʉ�b6��
!>
�%��\���a�G
$��	U$��τ�a�$�ևmڂ�-�RR�!+�8����7^��I�s�R��[{q�ҵ.p.��_x8*46�.��H�/��_���S�Ճ=e	d�ʴ� 
�K�
W�lkDxhp��Ksg
ɦ)Y��p�(�b�d�RR*%;@+�
-���D�J͓L�)���p(6�8���N�p{���g��A �\�����
Mu�V�M����
-��r��YY��,cvN.q	u�$
�.Ε.H��C��Z��6�SOe�����l
K5�R��̴d`)&j�N(������ ]
��n�N
1����В&h�*	@E	� =u����c(�U����	���_�7�VV��@I�Z�>�G��y���f=Wq�8�h8�pV
�rɂ�~ӧz�=b���;��7��������媙���
H%gU���ՉH����DL��T����lx`�E�L�_����=b�?�’�����Μ:�K�DE��)\�&7k&�7��g��L&�&fY
�c�a��'|;�p��(�0�H�s�$2:�$8��/�*Lڼm'�ogQ� n2��b�.���(f��Pz�
-��8���P���
-
�4Q��D?���D]}n*y����ı����G�5�4;x`_��[6���e.-��"�/����D&�(���)JA*��h5<L�$M��ЪL
-�)�P2<df�*��!�oJ�HՍN����v��<�
庶8�(N����2�
CZ�����i��P�K�gZ�;:��pk.qB#]G�ڮvv�Ql�K9���#1���]�Z�v
E��NƄq2'�,�pO��IjQ]�|g��}чb�RҍJ�:@��
y�&���V��UI��_!\���z�'//9����w(j�֍!d�sfΘ6�kܨ�C����y���_R��K���@%y��X�x��
-%[}������\Ec6�#0�����Xz�x�&���%68��]�t�"�e�kaq�gO�.�$
�;r0:
-���\&��$��;�mn2�
�ָ�du�/�
�H
�o|9��<R���A�DF���`��+V1�`u;v���D*{
p�[��
���+(�t(�[�甤@���ڪ�W��
-
55�
-6�$��� �����J�cI\<`ks
�+��Lԥ�}{vnۼ)l=��j��ŋH��Y3��,�)+Fn�g�I&5c�H�1�j
��3<PK�!�B�`�ɤ��b�"TzV��

��R�T��v�@
�;|m��LUT��c�L7���$Ӥ���3�9yE�$��B�_�vC��R!z*K���R�0T۴XB�ER��
AP�V,�Br�����,��.R��y] ��(�s9Pz

G&��>z,)UB�(1}�5o�5u��X�~t����eU"#������d��6�����
��ٻssغ�������<a�'�����}{��o��Z�����^�f���Tz1��o
����Ƿn�c(��Z���J��c2UV���X`�,)˭z����;,1�3\��-,���q����qĥ�֯�&�@���7��#��NG�<��C��?ƳǑ�9����DF���N

-&	���-��Ii+u����+*~���+�$��҂�`���$�$�EYz�F��E�g�R'ߛ{�v
�47f?\Pp)h�*��E
����*�Pl�TL�L
�����[	��Ԓ`���.Y�Ra��]�Qњ���P�
T)U�<B�-Q��^�~Pc;�^M=io�De�S at i���LOKM>��x�&1�DrjZzf��?`����%~��.K*"݋c���T��eHIJ8z�@��B�h��K�_�E�Q����sƫ��=u��KQ]KEi�v�Ԙ#q��<�)�T�2�~�\P�UɅ��U�.U%6r���Lq��p"�p���A+�,����T��cF
V>�����~}_�~�K���*���
A%u��ߕU��P�Z��U��򲲲�R�Q^a�d.�.5]h�6���K��l��X�N�%
(q�Meg(zggR����\"��´T���فX,?�9�&,Y���6l"-�
��/�aq�/29��$|�[����BB�6QOb�;���L����ly%�F��B�g��. [...]
-����k"���M%=����`�n��F{��L�%W\�`��R�F���%>d�+F�	ͤT^,����H �D���Z&mپkϾ胇I�����|2�
-Mx���ȓN�7�
J�!�Z
ܸ�y�*�%�S����c	��qqq��	���S
F�dK-mҰE��,�覍���	�\�bQ$�J�
r�H
-[#¡ǚ��%���0թ������`!I�Ų�nDQ�����r
����䳉u2�L.G'N��;131�4i�d�V�zi����_���E�(���˲�.,��"1""[M�m��I�i���}��=�B�?�~��t�����=v*����Q��yN
�y��i�S	w.�ҕ˃�z�;ښ�vK��DAnfjbLDXȖ�-Y4�ݷ�͝3{���gL��F�$�rW�OP闢��{��{�P���! �+��# ��P�4�;��j����Vmw�K�M-4�T,�M�ʆ�KܻU,�V�$"��:gk�%�Β���!�{�KQr!4�֯[Ë�χb�I�	I��B���~�?~~�pD��[�1���� �f�no�d�����Id]s
-x��LK�y8Ε+w<㞡�4'�u���B]}�Z�)�J��!���U��M�&��}:�%.���P'.ϥcGs���S.�Q%
R��2ńd��<,W�Ţ<�T��u�7�Ra��b�R���P��&��Q;�<���h��{@"R8!��6ܡT��&�d��HO�����Y��
�W���1�ܯ��%������(�M} ih��
�T_�O��Q�
�������	,�V
���KIr��W�j
%�v*���!߰W at I����q�q���6�����
���l穖�Z[���8�\���M������w�|�W^z�瞝6��'��)�zd��r��&���P��U�@Z)�Tx�,J�jk��RI�b����%JA����w��(?û��G#a����(��:s������7
���.%'��DE��ݳ�����A��9"�r�&�
���̟���0�h��`H����|��z�e@��I�t��u`�.-� �UU�Pji?��8��71J؍
-i�&�Uh���JC�����k�ͦ)
-Kg���h��^�l��I������2q	�<q���E,
���LOM��#����W�L&7�T�\g��j� ���|�g�$�F��~�$��y�}�Z]S�@_�(Љ/ht��J?hK
����ʵLJ��G@��t}jj
-��4}z�ùG
��TB������'/��;ޱ�O�
}?.Gk�d�VV�3�eg�1�b��~5!P�WY�{H
y���be�J&a��%�Ҹ���T	�@�����}*
�t��D1~W�q�݁
wT�JO
�;���7t�5>K/x��߽��˜�Ӟy�	$���OP���]�0e�?���\u�⨶UY*ͦ
-:&���.���q
-�c���Ē��!�%ټ��`'$�%k%g
�g.��>�C� �
-�ൈ9&�/������/Z�����?`
������
��"�fRLl|�.Y������l��ky(u�D�(}�a���%e�2���h(55�9kh����=��^#���-��3mԸ���F��w�X��χK���5Q23�t��A�,Tw���T���R�� �b"�T7�A�J�1���
=v\
-EC	��̰�0�N#C�q|7�>����\�Ā]�u(3=-E���H')Y�����-b��X��z�L7R��c閻t?��X�5��K.,9
�
�1��y��
!5�y�*5AՂ���_�S�P�Yv2��c��޲s�R'0��P	���pcR�D�&�[f�HS���ݚ E^�����]�[k�+���9�)	1�{B6�#���ּ�sfϚ����$��I�r5�'��P	߲�J#�����SI-VTv�%���TQn4����&p	1X� }��l�|jl�Ƈ%��ݤ�1�xd���\�#.q��`��`ھu3b���9��GI��#-]���C�#��^�#_R )x�
�DAG3���rDa����S�*���n�a���Ag7(!�{:;h3�;k
4^QLJO���@Xc�e}��4�qRi��t[���렉[V�pV����H�]��puЪ�� �&�b��5�g)i�����U��)��A�J%3�h��(.5B(�X�n:�<��a�:i/�m*�:
���\O��f�JJ`RrbB|\,���T
}U
�&�k�Z)��.���D�����4�~�F��=��z���
N(b2҃��
΢��\�#�+�!�C=AՂ�e�r�_V�YLHڶ#T(����%کv�R�JJR�Q�é��J����
\8�o����ʊ
-�d����ڶqm�߲���7�x핗^|���N���?��5�'���Q�/���;8�F����Tj�^�yb1�I�C	��PZf\�v��&�t�SM���F�boXB��F�Y���
u�v[��\B�������)_�lG�m�fZ���n%%
���냴���r�J8؋xD@"�mظi���;v��&$�LJLN�gd���8ꪪ
|r(�΃������$cn��(�7 at L���E5���\Ye���z\@�}&�t����R�ް䚸���{N��u5v��T^ZrRp�:Al\u�-��L��H1��P���Z�TD$!#I*Ei/�d0V���f�\��*��ӿ��42��A���/��uuP�ۭJ�$�z0)>�`LtNttL,j�.-
�X�=a�mhn��x�xW�>�X�Ē�oH���y[,8w,uR׬À5˹�K=!\��5�a�xh!��?���FB�N�ߠ ދ�j>%��j�Nmm�ԥk�R=�4<)�Bɣ	ȩ�KSɉ7�(��JM<�
_
�t�?����_}�7
��<��|��G&�$�(h�J�_a�\�����VŁb� �J��N�)*.1��`�ں��S
X�
�-���]n+��
qWD��\��������r4�0��!��, [...]
-���V���f�='�Rpp��4�y`��W�T�K��w�=�6-M�qV�K�'
-��R|,�������B�@��kT
�ZH!��
=FC��L��v*U�>-��<F�p�x��ON%����8b\���M�V�s��~��9�g�|n��2�'?���4(�����N��f
�Im�8�$��i�N�i3m��=�4=�6�4���D�eE9PYA�s��A at .AAAA�A�(ފ�hԘ�Xu�|����vQ�i|����j������|g��MM>C���JJ<�!U�a{��ma(Uy*���2z��&piK�ܻKg��z������t,�g�+g��3�%�8�KRry<�֢��W��e�f
-	梳PՑ�/Y�x�"z���o�b4
���[.5g�A�ITt<���\n�b}��]ݽ���P�s#
�ѽ���%��mb@���~gM������x*<
hB
�hn��A�Mc�]�m��9��>�ys�T�o,Al|&]�x�\�zdX���Q �J�Ɖ���$3�G�*wby����TRNfR�z)�y0r���~�
��wOOgG[KC�@)���8�`��
e�G��
-� �ܞ꺆�m
]=}Ch�┠�K^X�c�
����&��%��C���M��%�r�v��	
F��u=8Nc1�Ah�&Dځ��$��((��Z�Ќ��N5���B���7�T�����T�SiCZ�j{؊����~�ګ//D�?�姟|b��y�Ν3[/r��
���'I%�x\7��Q��0��KJ�)w�\�Rz�.���N�
z�
,���`=�HDAu,ݾ/,�g�c2���s�x.��륎#.I7WW��1��rtWR"]�)L�D��
eG'fy�6�m��(8������e�V�Nf�����
L��
��t
}y�7���Jw���P����]�Pڏ�J@��FC���f�h����.�4�4K���Mc����6
Ქ٦�J^XR��3�L\l����r��
��]��:�_b�L$*�*d��PDeעJI3-iz�0��#���y��i��|����uT�8�u�$�ø����m-�uՕngQ^v����$���x"���$3��Jݕ5��[���E��X�n;%�R�û'�,��B�`�N{?,Ds�V�+š4��cd���@� �((�$p&+�J]j��P������;��JW�wo=��_�Yp#���D%��{綖�͘Jק$�F�.}��7��_�����7���g��l
��l�J�ȹ�?5C��R�P�(0~QܜBf��Tjn �*�e�Ғ�"z��KJ]���
t�;w�xai\aI~r�
K抻xs�����K��+/s�h`J_���`�&\�WHppP�
=���?�O#T\��j5j.)=�!	3IP�Lj73IJJ��JW
(�r�8��H�/�.s9��R��E��+:���
c���{
�,���X�ύ�{����&.��*H�Ȋ
-40�%@&�����
--��RY�kY�Q�#$郶�_�0��~��<�
?q
-�8vi|œ&��]-/����vh�
�?ؿ{׎�[�k ����i�k�I�\�!��1��
�R~���j�����={��)F���}���n���’�-�P�aiTLa�@_/��'T�KE�
&�;�|d|�`��
B�,���L���`(���/r��>�w?ɉ��u5��k]ЧR�n*��
-gaN�ڤ�� ے��叿���~��~��/<�엞����g�ǙJ����CD%?��
���h*���d������˔
q
-����f,!�ɰt���~L&�;�
�%�C�\��PY�-G`��B��eq�Mt\�TuQ�(��0zB����FD�y	����$9@�u��9�2.:�0��m���ſy(�>{]�	�T�d�
�4���
�H`�X���b�gz�$��6�����GGF%
S�M��c���=�&��K�9�<�B��=�#1�L%�Q�
-�;$0�R9�, I�*)fRo��Ac(��L

JJ���ک ���v�lom��\U���H����
]��C�^hxdtl
����_��T�������7�􎍊Sx/���g	�K7-X�ȑ�)
Q���Z�\r!�
�����V^�
�B@��1��Y
-�R���	�n�cS��]�[�}�����Tr��g�OI\�r�?������?^�ҋ��|����
�;g�#�SS�(�*��t�~��B
�x�~��
�

�Dj�P*��������˗�����iXz���
����?Ю�~�t�Kző�)�&ѓ�3q����j9ZLtXY� �Z��!l��Z����n~��18.�J�.,�N
D����/P��d0I�:�om(�����~�]g)��@�.���%R�&�\]��B�HB	σ�����X2���駒���w��'�����Y�|
,&v�t�Ĩg���U
����QI�Ak0��ұ�>�p���ڌ�B�i�^��Q��>*�����-�7U���3ק:W��#�B�V.��l�e�+�B�"쌥�̜��2Ou]���;v�����=~��Y-��
��/�&�5�b鼎%:"�PD�����$0bg�
d�O�v/�r/����V�	�T( ؛rVV
J���k�~r(�-ZT@,Z�R�e*9�Ã��T���_�����?��g���k���**}Ơ���g��IS�W=�2�V���M
�\����de�����gjB��C�Kק�%�yks���S'��L\���}K˕9qXL&8���+i
�WBB|<ݘ��? F�8G��
)�������CE���㝤W��o"1w�Jro%����PsV(�mm�B��Q�PIB
�\�S
��j����z��>�x�T��&����ٸdFs	-.
�5�$�Im�
��ȌQQ�����s� I<�,L���UP��r���kq�����s
��RA���:&*|e�@[�ҥ�гti�-pEphxTL\brZ����RweM}Sk{g�
��ѓgPo8g�o�A{a����b銆%��� ��㽄��O�ؙ�PO�܋Ü����q ���	�N���t�JԃJ�Lo]�j����^S)=5qU�������_{����/<�,M�����sP�&�J3Tz�Du���p�g�JG����
�T��,w��Cefdlذ!##�����EZ�
�`�(
]�tejXҮI��*W����8:)�%.9�*ط��
����J_��B�х%;�IR�MJIIMMK[+<��s��H�2wV�
����ԯ��
���mJ������@IZN�����C:�Z���i�20��H�4Gp��,:�Ŷ�>N!��L�J���.�gFs��ٹ�K�ƭ��T�a� ��K
�IhH�����i��"$�V1���D��O���(�~ (ɲ��� �> [...]
�KЄ<� �*v�E����� ���@XA[A�`��M
%�u�S��+��y��o��+Si�&P��J��1��ܜQ�o��5L�W���
h��6���uk�<5{*�Pi�Q���D�Ez�kk��*)���L3���.��Lj�"����WP\Z�X���,Y� y��+�@,}�`I���\�=);N�Row'JW�����pY��M|]��|z��a����&<""R�K��d��H��#$�WB�qgh���
�I#�c׮߀ �
J���(Y�z(�B��!��9�xƒ�Lc�����f
��jm�T����
�w	]f<qa�Ap�zТDv����ɔF�������3
S�����Y!*�g	I(D̤Z���I��!-�)U�甇�B�󚖇i�6�~<�����X[u�����fH��Pz��#��{y���quuqqu�������#o�X���K2f���U�6���%
��oSw�
I��sE��4�����Ϊ�%��Er�4���$�� Ď���,8
�@�K�>8�
-�I
B
-0�����;��d�P���@��J4�Ӿ�v��6��1��
�pٹ������?�ɏ~��w��o</[|͓��x|�-��=�B�eC%t!~��9���KS}uEi1M�TCb|LTl�p�pp	]hL���հ�#�z}��胻s`i�oO�%�y�*�
�C���%�na�`*-��c2e1�p\ɢ���x[���O
��ظ�x��)�N�L#�z��T[�3����2i|����0iZt�*��I�J�Ã�P����HM!&EGED���+EQRV	ٶt��_�<t���
tTz�8*����'�����d;�\��w��j�+	L�%��Ē��(2�ᨴ�dT�l-��*�I͜T��$u�N
�e_
%��=����pZ������S(
}��?��������
��nW7w���K'������,sAɹ��&KGO�E�;i|��X�W4o*s`�C1`��%�K�Є�r
�b��q�2

-C<"��L��VP�1I
�Qz������޾��/JJ[M�[�Co��ӞNK��T:*���7~���^��+(�o���=���/�[���cv��
-����nO����a|��la
�RJA)�LHpP```PPpșPp)6!)e��/0����9-
K�1٘7}0
���t��(9L�	&
jN��,ф��y�O�;z�C�%�p]8/Yr�r��9�$�\e5#���f5�-����n�uʹ�g��[��U(��d�
b��X`Q�%cz�%�����GT#=��?�K����dK3'�
̥[7a�T�ĥ��Dd�Ԅ
&�&�ivb�Ȍ���
�Y�<䋨��h&�QR�Ĥ+�I7��8'm�~�D(���mU�~l&�+��NOI��

�#(�y�������];w89:::9����g�羃G�~�'|B"bR�M�E�5
�m]��GPp7q�r��4��K�ꀽ��%x�@s	��4���|�,��&%
�C�a`}c)�8\
YA
3��F��P"Qŝ�3y�D(Ɂz�#��Ih��T:[h���'��+��^���J/b*}�����T-�B��M%�3䃩�����P[YVR`6��b	J����~~~��A�g�P��I��
�y�pM��;��Ҍ�S�zQ:.)%��
�F�L��\s�L��&�.�Wf�
�}�{��i(��
T
�(GR		#	G&����3I4�dU�m
�Ԯ[���%n9��J��	BrB\td8B�4N"ѐ
-A(�k�6��w�j��ᆞJ�^<��h5�9&�*��27'�m���:�%��K2�NLd&�J�*G�J���Q
Zn�
�x'�ZщuQ���a�PR�q����wSSYk�0&�E���e�N��۶ҳm�#�����X:v�t`hdl�1#;�������}�V���)z|�X� Ea�_/K.�&��0���db6N����� N`��gPNG3�����t	��U
���%�*M�ﲺ��T����T�K�3͘J[0�~��J_�Si5��B�Y��B��A�i�J�:ۚ�k�|�9�i�ĸ舰�� �Ӿ>>>����������X���X���sI�7q�K��ELJ�5���*��&j:��
��Í���C�i�r�8/ܗ�
-�
��F�$��$4��U�Ij�-���C��M�����Pʠ�*!�@� C	����OⱄR��}Q���Pi��%Ƒ͟�-�KW���(�YL�5�U6���r81��H
-QiYjY)Q�䠵a:CI2����av9>���R�$s}���U�J
-r2S��‚�}��(�����
&mݲy���æM��nsܱ˅���Q�S~AaQqɩY悒��z\���+ã�q\4>���'�͛�
,=P,�nǞ04�
���H���)bW��#�G��� G����+�c&
� h(M�@;�����wb3Pu
-�}Z~���iL�	��J��T���/�@
�a���^�v�Sr*=f*�Pi�P��V�c����DA�
-���1�ag��|}N�<y��ɓ�||���
���R��R{aihdLb�û�3|�,���X
�l.]�r���謨尘D��s�1�������v�w6�'?�h���}��D"�nni��1� ߘI���td�\u�����u6�aJ�fA�l�H��D��I�)�
Dt,���"�P߬��B�{K��<
�L�%{sI֠¥��<���.\�q��82��Є�U�&�g%��AKI�阤��h�G��8�٩
�WwGkS]�cV�!!:<D�����ǭ[69l��G<��y�v�]��x�;,
��	�N0��r�J+jZ��v��)�LAXR������5�
��"ŮZ;�����,ԧ��<�
���
-�I#�o<T���_�Ҡ�/��׭W�[o��,-�3�%�T��~���O����
-�
M��
����O<�j�2�V��L���gv��>���ڐ�
�g�JOI��BJ�N
��>v�����_f1Q�g�h�^4mz�4M�699�IڤmҤm*G�UA\�Zm=�zD�`�`X�}�UEqA�]@�zP���gq�
l�������730h�ڄ�
-��?�<����Ki�YK�K����^h�
K�JX�����d{.G�\�A.ݞ����DR��	b��d�A�"Q����)>@o5��c<�)G�Ds�"��$��$�3�G
���l�g�26P��
-�N2(��h�0!�h?��~����c���#�'N����r�T��K��A�9Z)�U,q��3�>'\�~�AH$�`‘���$��J&�1�U��Ju^!�e2hǙR�LR�ׁKG
��T�;S�H<B���~�����E�٦��NJ��cۖ��{�����Z�
\ڲu;�RHx�>!9=�����
���
]}���M��gX��Xz�p,=���;i�ޙ�͹
b�N�p�Z�~
!��V��H���:e�7�P����f��+�g�.��4h̪���r+Siْ?������'?VM��X��"��**��L��ы�����~?da~NFZJb�A��������bb
��$9�:�F�N$�
Kb�3�
!��`�`�d�9��w��Ƭ���Aމ�� ሽH�!�X�����H� >�`��Y7?�h�
 �R��(-*�z J��D�~oLN�zP\VU�p���i����!�Qi�|V�e�%��+riZ�ltD�6C��;ɵj���F� I׮�J�B=P
e/��B�@�vv0
�ǁ���gZ����T䤧%(mߺeӆuk=׬�pww��X���~�`��

��
�Ԍ\si%H�
s����Ihw !����'���6����OV�0:��!b�h:ä Z��~
)
-
"i�Jp��gҧ��*u�
��,[����&w�
||m���@/y�#k+K�9��|*m�S	�7�~��wĩD3��TZ��[I%Ii�s^VzjR�!6Z��jõڈH]t�!!1Ŕ�M�T���8b�F�u,ٲ��r/�s�g��KӬ}S0�(Ȅ�w{aց��0���O�`.�8��:�i�!i�"iRH:1��mG։���6���Pj$P*���4�&�
�1:Z�h=HNCJ+k����:�~�w 
�T����J�7˱�c�� �A�ϕ�)�Q)�%N�UW�T
d$�A
J���J�
%���E�P����Q�r%�܌T�!:B�G��q�ZO@��������pi�:��=~A����Ĵ���2ػG����=CWǮ}|���o��� K�܁
Dj!^@
�&ע��I
��2.X+pB+ �Md�c��`�?C����ȳO��&�W��}���j�G��۽S�J����E*��P	�F��t���69x��
Z_fZ�1.6:*B�фj4a��H]���a^aI9��yKS�h
���%9�d.QW��$��Y
���	��
�
�;wME>�_u��.v��8�"]S �'��Ib��J/��(�R�RmuEIa~v�	'+0	�A8iQ��
d暋�y�u� �ƀJS�E��Z
$�J
K�&.���Uw�K*Ÿd�R�Z�(��J=hI&.p�Z(�����`���B	�����7�V��f�%��PZ�����yժ�p��]�<�x�۰y���������dSvAq4�&�w�qf>��K��#���
��tb���\�\���jp1d-M�{�TЀ��mQ��,L�P��S��#�S�7�>;���p���t�o;�|��@A�)).Z���&�J�t*��r*}�����+�J���ܚ �

p�k�ʊ��S�� �pMhH0^H���s))5=+Ϭ�ҥaK,=�Xz� ,�*���T���
s$稹�]u�u�0��L>�7�����C�ј�@��t6�d�P�P�V��֡T^R���� ^L҆c9 � "�� c������H�ɶ�=��h��oS�
-�*�X&�U.)�%�ek�ɤ�bZ��Z
�4��
ޘI����x�]����;�3��ʊ�LI�1�a���� J�7x{�vwu^���i9�ӊ�ή�7�lݱs�o at H�NoL��1�V�6
>B�
^

���������ҬX
*�4��P��&�$-��E�Z�T
-X�C��g�	v6P�ϴ
?z�@UYanFJBl���_}6xy�8-���T��<Si�Jo�@k( ݴ���,5�f��
1����� ����
$b
�tK��ZZ� ���]%~R`�:j~,Y�K�h�	\�O9sRΑ�w��C��a�����?���[X��^$�x�Q�I9�mF|&3I�:�ko�		J�e(���S�`��H9"� 
�A�1Ŕ�WXZ����s`��+�J3���;�d�H2�d,Y�
B�]��	�b�dL)�V�!
1
Y
��$0���'
-��Y+Pb�8�z����x<TWS^
E.9!6*\�����˪�
�-[
-��q��U.n�=	�>ؽ7 TmHL��+,�b��b���;��i�- K_K/%,IsI�S�#����i�ϴ`G4�D�2o+�x�T�	�~|K(Anߧ>���jSc=�zVZ�A�S��
���u��ß`*��w��
���V��"��F*=VQi�P�������� '#��.2<48(��o��@`p(&�>>1�\,`�{n,����Kߊ\�B�؊���
�Aq�:08
=�:�p���uu�

&Ŝ�$b3!�TL�o(���~(�f�`e� 8��?) t�����\sIEM}cS
���Q�T���o�<T��F"���bPⒸqY�Ʉd�fC1I�A&���+7�@)�$�R
Z�ֲQ%Z�?(MN�G�z.��=Ղ�XQR���b���C���`�
%'ǥ�;8,Y�����e�N+��<<�7�l�ۇ�
�D��'����k�@�Sg/t����[�&.��{,��K��&�=�T�{�\���++v#D
-B'������k`�
-x}S���CI����!��F�|2=y�<{w'�
��%�����M��]�������~�[+S�{sM�E*�eT��T�2��}-v����z_��P�	�����g�
_߽~����
-�
-,u,�͋%;�-.��$���
�9b.,�u�u�0�1��W1��^�/0q�94��$6��L�u�A�\���J�P*(� JzJ��� R
����n�$��c�U�
:J��Q�9���d�?>�,��璂K�E�f�.�6Sl�*����4��gj��������q�q�iATT�B		!a_b�AP�EA�\@Tl��[qD�ml�ƥAp�
ѱ��v���y���YP�Ʃ��F����;����R��"�py at qH�
D�I��������2��u��cG
h޵cۖʍ�9iIqJA�W.��4g�
/OOOO/�Ҽ��}����ED�cR�f��P���]��.^���2�Ha�^|��%�(=�\b����k
� )����Q��&�
n�cZ�$z(������@	���Z����=��N�������lا�ёҐ5+}�Tr�0�&���C%x ϝ*�
l�� b���g�S�tZ�:Z�R*U�h�>>5�܂��2K�X��K[�$2��\bBlE�
2!�9d.�.
-N(��b�z{q��C��!��C!G
F�D�
��
-:�3n��dm�����j�֡Ԁ�TV�� 7˘{W5:M�WCFN~QiyUm}Þ��mG1�.�X�1�1�d#��X2��%F�]�@��bX2F3J*�V�<�d�z��X�
&��P�%T�!
{��N (�\(
K��f at i�F+d����%�`(����pwC��\�=w�"o���!R�R�OL3�+.��A*�
n�8y�M^�;w�?|��|�z��Zzgb"�!R���
�%
p����^��U���`5�
-
i�f��ſ\
J�J���<��cG9u�
ԭ՛J
s3���(�$p������o*MP�G�w
*�`�
��T�֖�
�j*ˊ��f�MM��k5Ѫ�(�(e�:&6.!���`i�<�R�MX�
��9L���d£	�&�t�/�'tW��?���\G�_H
"�����g7�l��&C��T �FĠ�5�� �"<WS�u�hJ%�K�iƬ��ȳm
�[Zێ
�<�^��D%3H�ȧ�.Q]�K2Qh�+FI�91�@*�g�1R1��
-����bP"�
��,��~��:{m5Ը�LCr|�Ai
����0�<��\]�ѹ��yx��X�]�*0$<R����[XZ^]�'/������K��0�
�d}-��~�D��=Z�!�&�3R0b\c4`E at D"��3����I�%q(�玡t|��
1E
;t���g�
-�����+|�,�3��=L����'��4A�O�JoyT����r����í�vݖ���
r2�T��D+��t�H�F����z�e,!G���ү\,�4��\�
&��h0��d"h��!���39�9�
���	�
II8訙d�I�A�%m5\ M�t�YJ �����LCjr�>6F�RF)"�p3��P
�7Vl�۱k/�l�3x!z��1��y(�&�ws�4f�1sɢd�K�5�X��T"Z�"3�O��6.Z�H��S(�t<����}M� צ
E�YkStꨈ�`�ysfzy��:Owrrtttr�����9c�����]�:P"SD�Ƨ��6Tl��rW�~�5l�!]�y`��
l"�Ǟ�Kf�D�HK��4;$т="� G��t+�Y�=��"�}�7��#���>
1�vu��9�����˾X4o���t�I�Cz�S��&Si�J��~{g�J��@�:�Ci��e
6Y�1-)^P�G�¥Rix�,"2J����%�2��QW�lK��
�^�7�J@�s�?�����G�D�
�&�1�;���kp�
$d1\����
:~��̤�t4�B�gѥTQVR���a������@&�b�P��$$��!�6m�
-qv�P{z!zh*=�*	�$���-`�d/�$E�a�(�x��yJ��
-K5‘Ꙡ=�)e�H�L���J ���_�o�	~A-.ۘ���(�a!�~> ��3=��

��sptrvq� XZ�ru�$"J�KL5fC��ͻc����;N�\t���=�L4�
X�ͥ1�ڱ���|
!Z��bP��-�_h�0K���p����� ��>yL�� ��O��']����k�طo��TZ������(#$A��������ȝJ�m*MP�ӥRG���H���¼,Cj�^�V)��0�D*��I��5�����a�?�Ro�c*s�	��0\�
���$樜�A�����

��6N8��
$�H,�86�L����j�#����F
%<V9� ��LN	��6+�����v������t�<��q�ćG³�%ɨ.���U�����ɼV�T���l@i���N��ͻv�m���=#-I��KJ�}�	�\��
����M�jggo��8����
��d���5�R�2F�����������qOKk�Q������k�7��FF�bi<sI�%s-�T
-�
�<�f���X
-�A	-ԟ.�|w�̩ǎ@J��^�a}~�!%^�����Y��p�LW�iS'}�W�T����4A�O�J=@��
G�R[U^�JH2�JQr�T�.$T"��J5U���c	;�>��m<O���UO�\b۷L8樜�ل�������7pā���L��q���0IJ��G#R=�R^�1=9A�ը�"#¥a�P8�����}B�!Ҭ��v{c�~�B�����'����RI�I�^s����~eY2��C
�
Ɇ�R�jEK��W
�@�0&�C�����C7��`ݨ�C:�ݽc[MU�KR
�cxh��ދ�͞���2��4u�dtS��MsprvEXZ����? 4<R��O6d��n�޺}gӾ�mG�wvu�����\��
�ҳqb��B|.1���)8��!GN�k�
U�6@�N�e�**�΂O����n�VSY]����S+d���~Kϟ����`7������T��MSi�J�����z{.t�9�����z��;-).V��(���Iq, [...]
k4qO)(
߹98��R
�b��ƴ�]�Z� &�Z�@.W�4��бs
-��*k����
q��d�ɏ� I�MV_�_X2=�#uB(�e�������`�M�/D^4�.%
-JW�` �cJ
����e���
-�$p�
-��|
%'{�)�'M��I�%{����_�AQeY
��v��Ӗ�X��&rpp�9�����4�ɡ�I at P@�����Yf�t@
10�s
GGWGA���QF1 ��l�����=����Tq�Aw�{�9���ei���I���


��������|��m�5{��7
;y��e�R��g�7���
��K�W~8��MU��7%�O/H��0�7��Ǐ6
�۵��6��kGY 1&"$�G!s��?w����Z���
�{��Adxk\�T��*��	*U�..��LOI������<�xz!��BU��	0�rK嘥]|�� K�:h�z���ú�s�����߬L4M�M��0O�����
}��8�_�`��p��ћt��������N&w#�  ����TT���8���T ��G�
���KLIςa��bc�������*݁y��*����E��d���1�2�P�U2�h�R�z�ےtH��O�
i�Ξl:�=Dv<
�V�(��HK��V��(�\
l��Ξ1u�4�b�� [...]
��R��p=���rcy�e��b`U
-����������rpI�B��LK��,�>kcX�cI�}���xd�
=�Ȝ#��:�`�Ř6���
�y;3�ȊD��{L�$�L�D��qJ�0JM���z�R~Nfz����H~�(x����?�~BrZFN���r�R]}c�)P麺J���$
Io��#��
'K��T1���%5
�H�L�%�d$F<����A	M��e�YT!�h<�R(��E	L216622661�,KSg̞km����

��MJ]�4�ʵ�6�}箽
i:u5����
�^@Ay,�W3K.�
S����)�sa
8E��'�nfM�e�E{���E���ffCm�
���j��r��!
��y�]
m�-gN�4~������<���ҟ���J�X�:Z��l�!��B�}�
�n2��L��.y���E��'��c�V
Y�	Xj�,=�,ᨇ��-�%
�����
s̜C�EM:�`������r�H�$����%t�T�N�#Pj�}�Ƶ+�(�!�����舰t�^
-�nn�r������2�
V�*۰^����ҹ�?���^g��o�7�04� gR�l�d*&V2�ZI�J�� �y�8�#�J/(]�P:X�Gv<
��$�D�BfG�q>��(d�������!�dj�X��X�7���U��G�r=��u
9~�
a�E��^~i��.	k��<�ZtH�K�$�LA�[
��W�
u�w�;�Wn�XSR��]�*T��
���)Ǝ
ejd0�J�atk�*
��UjDR�uC٪��K��&�E�(�==�e�.�p\\e�%e �
G�T�c�8b�ǟ�y�N�=`���_۞Kd]��i]�$����3�Ȩ�ZL���W)��)ǎ9IڮI�����g�Oy�F\���K�Ϝ�3nOM5F�������U����pd2w9���RT
IجJ�C~�J���h�02�rnI�&6K��)Y�d�:�b�kE=�.�A�b�h$����F��F�@�8���%�0
Sc#��^rW���0(!�
������A&c���i3��[`�$�����ON��]V\
-]��o���D��\��X�7�%h��n���Z�$��{���)�K�Rt
-��g���$�ͫ_<��=��W��n��'kW.�φ�T+��������P�Y�JшҀJ�T�sj*A�N
����\��
�q���
-o_
��R���"��
���C,�:{�2����y��)��N���%������M
-&5�Ps�6�QG���:�߼$_yM�8�n�a�t��&�Ë�L��'
J��(Ua��
���ĸ(U(\>	�� @&Px�݇E�&�,��+Z�v��mյ{�*=�X���>�����G�4��	��
�ZI��>J%n� %�ܒ��ݖ��E�R�TS
(��n�� ?o��
�͙9m2B�����7==C#Ss�%K+{g7�o@�*&!%=+��du�ƭU�5{P�8}
�tK�%��`�AG��0���D)�E��$����d�+*{��*���st���-��V�(��H[���
-�֖3�M?����H���]mU��J
�^qT�*�jj<�T�A�(/+=9!F��V�e.N��vvv���N.2w��UQq��R6����`	�b��T�
�S]�%
�%~[�aR�sdr�y��:N�����|���ݒ�7�4
-�4?n3�P�u�	����q�j�c�
@3�����(%'�F�B�|�r7W�
���C$���IHN��-dTj��Jk��#�A	_-gjqo�d���K&1��KF���{x�W�w<�H�Y8��5�B�
FiJ��*��Ⱦ�cx������~�����2i�p|F���702F,��8e�,Kk[wOe`(D
X|�J�Tl����ݳ���؉3|�Zy,��4���_��ҕ�A�H
���#
t�
qP:}�h��n(/-^��	*Z׎������O�0v�(Sc��C?�t�'�W�W����J{wUoC*�f�%�G���s�����
[;Ggj6��GAdO�`X�NX:BX�v�����z at z�
X���{<���+&�LxБIG��7���I1 �EҚ$�E�p
d�=F���-2�N� (}�f
Ai钴���p@���

-��	
��Q"@�::~aZfnaɚu��J����U%��sQbL"���Q4L<�h�>|�KP�^񊉕L�Z��J�_��l�:�۞��ZX��2(�[�ryA6��h:� J6V�� �q%CdҰaC�
�\B,���X�=w�����K��hIv��k�m�5����Y��H���#�zx���P���	NS*}(	��h�Z �kW.A�
m�����¼��)�1!�8
̛3c��q_|nfl�7�������jUP�ߩt�Q��T�TZS�TZ���3,�3���ͧ����b/Dc��Pf��K/R�*��`C4�5�P�XPl�uM��լA��J�g�y�[�޹���'���~��0�=s���S�1Q�!�~���M�P�
-%�q)08,bB�ּi�s,aG����c'�%l��`	{��QCc��[�%��4a��sL{��N�e���'
m/~��)g$Ib��A��I�p���(]fP*?�@2�(J�!�&'�N`R�'.J8�͇�GŨSҧN���~�7�b�T��JZ��dM�$Fm�alb`"�(v�w��-�vɞ	��P\��K�J���I:�?�ll�D+vQ:ġ�bɂ\X�`e�����&wr��àԷ���G��=������R����Qc��
]���~AaQ���1f�.�_�Ś���������.�,Ց�N�����Z�D��j�gAG��}؈*�
����f�5@�G�
-��Rr𥳐/�˙�5ebr|tD(^������Q#�ؿoo���ܦQ�/D�N��K�.��TZ�ժe
sgM�������
()�.p\�
-���R at phĄX`i�t���%���c'+ɦWU]S�,�����w=��Ou�%��7�I�ZD;��}�7�䇜�H�$�^rA����h4�p�oa�]�p����W��߻kg�f2��	JS'�%%�FAH
 !�9
�x`	.>,2:!y����BP�DJ�6�TҊ
�|�
I�"��i��/Z)M&&0q.i�$�I�&�b
�Lg�ڵ�a�$	Pz#x���"�L�-��P2�m/_�Qھu#)����ٰD$���TrgGDi����oxz�K� -

<�X����*=|��ã�S'M˞��0���5�l*ڱk���C��t�c�����`�3���Ng)
-��
N�w����m@��? ���e�p�뙄:
�f�O��T
-g[��#-��ID	ƶI���N��OTj�R���	TZJT����D%Ow7����
gg��MK�P���؄�4�%�(`i[ɞ}��:�J����S�����z�T�\W��K\cI��t��ư�<��^iz�L9�H�J�5��YC=6�T[S]u��#�����x�d�͛(e���A�`
��W�u ���:��69k����:����3�R��*�lPB�P$��	(ND&&�%��4	+��d�Œ,��Vҏ+|h�����n��HQ:ˢD��/�`��3'��>��pv��Ɲ}(�Ի���Iff���̈K
K�,F���qp��y���'��̞3o�҂�_3,�
:{�IK�Bu������}�m�,�L�6�K�E0�]tDT��	/��Jx�
rg}>-#U

���tq�À:l�~}z�����Ĩ�ԩ�{�ҁ��Š\�ܙY���p
Q	Pr�9�9�<�|�C�G�$$!K3s�CG!K[����-u����]����7o����̮ [...]
-(E����zy��$g'�L
a	����ĴI���/(\���]T�x��Ljm%"57771^6�@&�KqI�%����_2�k%�����*�kn4�(571{.�7�1(
�@��,s��d����
�d���I��
N��f$.��
��1V��r�׸�Ј��䉓�f̙�h�J`is���
K?J�D��q���1�y��`�D�Q�� �R剣帾m���;I�0�ƒ�}<��2{�

ؿoo�Jݺ���՘�ԩ����!�_T*+�
-W�J�Pv�E��}�ܕr@���
G�GwO`)�ai:�ҷ[�aK�W����o޺}X¦z���qI�ZZ4q�N�bRG��!Njdh��߁�Wn�3A��� (ݺ	k����(J�++�V��/!(M�HM���

`"*��� �X�ܽ|��ãbթ�R^~�j���èҥ�X�9�^u���C���3�$����cr��	ej%�I�%i�tVLg�$j�w{���|݄A�[4�f��x��U��<JKI� ����0����8�b�`D����̀����%�Ҡ!Ñ%;G���_`XdLBr��,h���V�݀,�cX:��e�
;HK�%�{��Jt�0��������n
P:@Q�zu��Ed��
-;��������r4����A�`h�t!(�:U��T�/D��=�J�P����Rձ�n>�*A�������\��]��=8<2&>)-c*��_��v
nz��+���3g/\�ZU]SKw�����ظ�v.Iɤ1�
��h���
�s
��߹
�_����p�RM5���~8}������)پ[
PZ�;PJOI��� �0��ˀ

�
(T�
�S�dL˞���`�ڍE;���i��B�JO!�&�6b���qCC�#r�E���D���KR�ULOɤ���V
<��d��'ͤf�
��Q"kV����l�
Jte��8�b��,J��>�J�DX�	,
4t��Qc��d.Jo,h�:%
�hn��嫤Y�M;�,v������H�$�ǐJt\����I���owt��r٢��2@��J��`k5��}z�̆�ԅ�J
J�*�*I\�I��ޮ���TR�6�+,��˙1-#%!�K��Y�`gkcmmeemmck.�*�<�������T�Ҽ��+����;v��?tY���Ru�a�ރ����ĭ{��f��[��î݈��wgLok���
6(=��[�?kk�W�	w�DE��}�K����VC��3%u܄�� �
��.`��G�%���Ј�F��Tjit���AcPk��&�_��$�����
x�8�0��D]�%��Ճ����E�I�M�J
JM��ft����Q��|�R�:&2<������ɁE���0
aiG�LMMLLLMM�r,��,Y K6�2W7���X56Ѭ�yK�X�B���

��
�@|\zm|��m�V�
�.�� w���ś7`�,��3�_��.�vVc>���0�� %�J��R� [...]
-���"ݒ�.(1�l��{_�73�
C�=f�޿8�9���}��O��������/�1��������%�U�B]j=�ĥbv*S�#��h�7�2�QF?�Y}m5��e��sAh7�R/''%�=}���8�ںU ���sg�x���`Q���B���c�7a����s�X�qkxD�Q��5�R1R��)�M���jւ�<�
�I�������Zv�Gd�&&�K�<��
-���p4�ߩ��(��2I`����܌rD.
%��x(�d���P�mc	�
�Q��V�<�I
;v$0�K= Ktt���[ڌ�Njz� ������N	KE,�(��X�K"k�@=�����u�ͫK J��kr(E�$�,
-���
�j������Aژ�w�ڥ��v�HPT�����T�h�ԠD�
	�'�F �V,
\0g�tw���
T%�����������������ֶ�%�*j�R�&�����ǜ�?�ҕk7nef��Q]��K��o��j��T�M�㥿��P����Pd�E��)J��9ٙ�(v'&ĂҎD�E���.��3������i���-%3S�:�1�s���ݽ�J��J)�Tz'�B��<��A�LB$����T�SS�h"0Acb��(�J]����k�VDҀIBk����q]-s3@);��(�F$�H�С�����KZ�
�F�p�0�6L� ,�_
���ko�KWKٹ��`��~Ɇ a]R�%�=�1�h&��Km^!
�����ܺ� �lA�,�džh�#��"�t��ڻ�c֩#[�x(�T�ޏJr�5�z͋���
-Hi�r&���O�
�U?*�_��iބފ�M��_�4s�f����IT:s��u���@%/��f�C�

������
�K��m���;��y���. ,1�ڱg����O��;�t�Jj�͌�� *b	ž�.�qIm�}���K��Lu_��$���
]^�����fe��.������:|`�0�8�Ң�sfy{Nuuvrk7ʊ��`�(�+;�i�T�~�K�C�l���t:>)�Z:G%yNi~�k}�N��
-EJM�G@&!����*++��UU�& &���'m	K�y+I"�a�;a�e�FGüP�r�9�Nv.���cG"U��7
�� ��<��(!�ڷoO`���[��6a��b�(�q��n
�g������X,�E	a����gTY][�j�KpIZ=mq�;�~��i ?�]�J)�-��;Ë36TSc�!�:�����E��>��	AI���j*Ea�|�ffN~�6�R�� 7�v����gc�
��Q�𱘸��7ng���QI„���>�ݱ��aqa�]*mX
��7�k����[���L�JzCp�KC!�[Z�B,9�AЛ=w��oIR���س��c�����˩i���
d�%��HU����fkq.)?����q������?^�m<�`�$2T:[�J��
- at gwn�LK���tb��C������_�ryP���~�����9:�
mc�E���
��&(K�c
�\�x"��B�Ja@�h�J�S�+[C%�A�)A��7
-bRMuU ������
-dS
&�K���*sI�����G�J���k�����`�()�r�E�';{�@i�.(�9��5���#�v��B(AO$�k׎�$���={k��
4X�����j�K���"�+`)�T\X��q�N�k���S]�hG�_ըSY1����y�pLx�ba�@rR� J�!�qP'o������n]�t�
�NPjMUҜJ!k�o	����Tڷsۦu+�TZ�bݦ�;��@%ބD��^*R)�C�Ȉp������qcFYY
�4�2���C�

��=�������g�\�Ԫu6o
߽�ީ؄ċ)W�������+(,R�K\���&\�]��h�3M��w5_�hm"L�Zz
%�~E���Pg�ׯ�\LL8
�����{@i��_���A
����6e�$X�-$��\��I ��p6XO����*$lρ#,�2��8*=kx���/��?�
-�E��T�D*++-}�LiiiYY9�	�$��
��*x�o�]�5�R����Z�Xkd�:�
�-�#�d'��P
-���z��8�t�Sd��A	zR;n�K,������!,
�`i�?��M����S�� KY9���P@��F\�P;��ZU�[j���w�"� 
dܺ�,�T4����~3�{�9;2{'(i���գ;��N\U��RUR%��4}ּEK��T���x�����6Tz�R�����g@������J)I@���{·lXD
����A��t����.
�D,9�f���CV�[�öp�z�1���/`ֻ��u7��}�.�ԡ�~$Y�yO�K��/��*	L�IC����e&������҅������ޱ}3(
-n�<_�ڔ�' ��--�(�c
�š����þ�'8�M�*-
Y�~s�n�J�R�JEH��'�F46�
-y+�B�8��(��� H%
3��AI	��
;�I�%��j�R��IS$)�[�z+�F�����ܻL��
�';LP�AP��h�@IWg@�>�;"��'��
���/�t����^}���
b`l:|���X��4�Y
��-� ,E��/������a�+���fs�<��,ť���wP�u���@#�jT
��>
��P
-@�a
�wh�Z�{�ڿB�%(���
]�JRI��5��EǁI8�Ѓ9�j𴾶��T�J
�
>>*9Lt����iބh!���B�
:Gi�R��
�R��h���5!A��#��'؏��46�,Rw���:0�Kz��,FZC�s��:�$5Q`��k�o"M
�:~�Lܹ$U��;��u�	_��&���,郪K
���&ʤ'�LQ*}H2��t;�R���31�Q�p�÷mްnu�o��|gxy��L
o
gi)�P_�R�@ڷ>� sKk��$W���/]�R�����K�7�J%����g�*�B�(oE��%b��H&+��Ɋ��M%&�0	���2���R-�
-��H��̟�O��e��x3*��x�
-P�a����=*�<����e��u
3k����t!�V�KS*�Q��2D�F�r)Q�ߩ)�D�z�?=�s	�˰쎘����9��^~���=�6k~��_���}�����zC9�A�8����ѣ�0�>ŏ<�����C��j��N���QK)9��J KU�H�p���=��� �$~~Cu
�5����l)	,��c�d��˅s��b�DX���S(1S�O��J}Si��B*�_,�^Q� k�
*�lk��Jʮ����<�?��̳�Ra��rI�������9���鈨�ҭ�VY=K�S�G�݅���r����ysfN�CP���������D��
���f���j7�u|�l
-	; ���?���y6�����
�K$VO��E�K��@3��!�$v&���!&ѡmމ���Zr\A�٬���p�{���mވ+n��-�Ҝ�&Fh(���F
 X���z�B�ή�޾~�aQ1�J�S����-H�(�x�����5J,X	�:;��Z[[Z������
-l�`�����K�J_��U)ƥ����\��)�8��B
-3ՈD��FB���tڍ�P�r4 at P�P�����)��F�
K�����
X²�ꠈ������|� $v�M$@�븹D�Z�K�	��p	J2�o1&q6�/�
��
�(�6��Bɏ@i����KD0�ƌ	ǎ��"�M����T:{*9��P
����⹇	��~�}���<�r�RϜ�������J�&�T�>�����H%(�W�K��΃�=�қ׽��@��]�:Z�J7�]� TJ:s$��m�����eK��53E�Ӆ����D�	���
#H���%)W�u�>[��������;��
-��_x����H� Ud.A�
<B�'�%~���c�o)�����X������jS`��g�$To(et(!�#�����t&>�Xh�� ����<�^����r�dm�
*Z�
 
��65��^b������oGpXx�qB��RL�vD�GO���b*(� ��%��%��-:I-�MM�F��dMM�@&&4���+��{�s�
د�S*<]�C�-�F��2	rg0n�G�+C�(%\�:J�8(��4�y�XX�������7}&�h��"���<��Rҳϑݐ��Ie(@w�\��T�߰V7��Lh�O�[�Bx6 q��4I�6�@i�/�� %��y�
��
(��4l��'���r*M�R)`WX�JU����
�J�|����;[�jxT:���B*���||*���
�������yT�ihj�a�R�-!�����0�z(��w�loi��BT�!'
S)lW�6_oOW�vK�\`af2s���) %M

ux444��(�f���/�Zdcg���u�7ޛ���ڳ/��ј��Q�~8��
-�
N�K�i��\q\b�Ot0)��$�
w.�L��q�8w3��_����HM<

	A
��}
蟇�G�8
%3S�h(a�@�&`i����,�J�N.
�}�J��@�������:�S���"�A�7.�_�P�k��ۘI�@$�������~�74HeLh0.=f���%�Jj�KCs{�2��$�2�&���B|���3�i����P7b(�Q���(���q����QcƎ�b���j�ړ	�, K6�X����OHNςa,UV�5@�����撜0{����3�E�-#?�^�� ��|���ॴ����<����u�l��#xP��J}CI�4�T��1TB&x��
�J?���
�
�
���ǔ��J�ׯ\*8��Pi��
�*i�}\*�i
-���[�J���/])�䨄0�s�K|
o��!Ɣ&۱��T^Z\TJ����
��]����`��4�d�����Iښ�jjj�𣮡	M�;
�Ҙ`i���Jg����7A����
?t�8�^rZ�ټ�
E%8U�\�s�~7)1�+y.��>��ÅK
Il�+a�S̤�{]�� e�~d(](���>u����8h��>����V;:����mjd��:m|�j���

�A����;��{�l�.(�@䱸D%�)���6�R�C6!��w��7�� �A�
"+Tŭ�ĤF R]mmMM5~jjj�N�LL
�.qU��K��ܞ2��3��u��L5�u[#�(+-Aw�����=�v��J�(�r����)�_8&.�\�Ò:`i*’��|+��5,��� Kqgp���]+��B�^�����O��z�hu�χ����όegx(h�����l�
|p��V_�������tu�ѹ���G��Bi��E�	�|*�rq�T���O"T*�0&�PH%^��w�)������[
-���
-B���'�
�Trsr�SIe�ǣ�
�
��(�
=q&�P���^�ʍG�J����,�G�����ζfi�Q)/;-1�xTxh�?��
.@��V��i�%U'�GUUM�Υ�Ʀ)K륶�W:�|�	����;���(��Ԍ����K�*<��\"��r���.�dK�ʆ<[\�����b��ed�L�["C)'#5	��Xԡ{wb��f���*;%�J��T����3e��
�Y��,���q��T�s�0P)5+�|��2	�)�����%D����
-miR���k�L$�TWI$����K"��2�`1�`�D�q��GZ�|.)�ʾns������	!�C��]Z%����\<nO�G��n(yy(B	��!��P�3yXX�
aIU]s���3�LY,ѵ�fX:w:)53�])
-P�T����K��p�_V7���yxǷ�Wr6�Mm�	)
gi���(��PZd9�Bi2{�x��c�P���P����Q��f9�Ҏ��pD%d�ť�J�����b�O*���F��!��J�J.���T�H�%̣���J_�ؖPi{`�>L��sK�c*q�fJ�5�I�
�[v:�D(}�vG[SC���j�y�RB����Р
[}��]
�1�e4C�IZ�J**&���LTU�GX204"XZ���X�6�n�
�3$t?
-��Ӊ)�t.��\ۓʚ��uɗi1��D�4�]�<Z�ZE0y&A�P��6�I� e��ء��wpXH��/Ӡ��3
�Ф*�����q�qT�DT4�BT@P at VAvYd�D6Y�]A膦�YD�ɘh�b�I*fq�d��}�{�v�ne�q�o��s��>���������
+n���=����}�0
oz6� ���V�Ygem�����
T�-*C*5�ʺ�YO��<q{��P�|X�9(��&]�a ���%���`N�\�Սd0�`Rp����G|.=�ȥ��{���mF>�x��JP���h�H����q�������P��
�v��3�Q����{3gi��o�>�Rrz֑|H;q�L��K���K�ju�}�����hȌ�g�����6p��8%!��)�;3P��Y(�=�>�Qi�Z�J`�H���cǑJ`����o��-̅�}�yɗ"����4�y����e�T�T�,)�A*��0TZ��G���)��㑣��u
�|�*� [...]
T��fK��Kj.�;��&S�P���
�u�Z��./��NK�������
T�Z�f�����b
m,J`�L<@�٤+u�-54^f�j�ņ�[�`�<�|�B#��Sҳr��W�����j�螠����J�4�I}��1�U@$!�L"�'d2�7pnP?�7�Y]MeY1\F����Ȱ�@_�����[0i�PqFK�Pb��1 �i}#��-� !;ܽ���cR3�JUug�O��ƭی��])!j>��B�[~�]����{I�
�v���
���]hB0��`�\�
U�(<��5

�^jR�׼%�M��G�>�����j��u+aD�����(�ۤ�ب0*�J��Ci�
-�&2GKSxXb��Œ#`ɋ`)6!9=TR^U{����x�07�FU
@
�Ԃ��3��פq�I�����(l`l�l@����q��L���=\Y(�(-(�%�>�'��'N�APP	�G%��J��H���4�R9�`s����
-c�������`��ظ1i{LJxl��������	T�p�����
T�庍P�̄G�i�J�xT2YA���uP)*.�PNaIE홋�b���xd0ͮGnh���
�� EDJ��8�Q��T����(7+51&"������v�`��d!|sf�~K�L�,.�[bhD�D2����?($b�����ù��P�0U0��d�>:��r���LB2�����W
�.!��ә��$��	�JM�P:V�
�
������z�%$m�)T�>B	G)"�\4�鹰K��FˀJ��m
v�y��E'�d
9ZZu��E��x�u�S���5��&x|e�ػ|��t�;Im����X,���I�	�`0�\�E��!r�V��K��ݞ�2�`�}��3o�jd}����
�
�-zD #�_mU
��JP�9S�ܡX�bi2b��X� ,�E��'A��P�jO�9_����
0��E��u�ǜ�=�����

�QF�Ŭ�q���U�
�p���J��PZ�
�
Dy�
�{+(�Ri��JzK	�6� ���#bS��ʫ�[e�^fܽ7J[��^���^�Pb�?H	?��M�ζ�K�O�T
N*��*�Y*�+�4�CSi��J���J�v@�=��@���%5�/\j�vv�
#��L���s5�4��
��_���.]<SWUz4735!&<���}���fK
�FK�t��C�fAQ��
�3�>Ƕ�H-[�r�Z̔�����no����1T��G�JxsI�!���\�%��1�`�IM��=_J���H|$�j�X��I7Y&a��s�.��T�w$;#s
����;
�{�ŚUf�ƆK��h3C	�4�
梁��/M��IB��<}�J�)�)�'N_ O���
���&��-���?�xF�,���}N`�� &I�$��&���H����"�0u�\��B��G�J���%N���W0�[S�y:U$�T�����c�J�C�����|��DQ����L7n�(�P���JPb��(<v.!�~I�o�4�Xڴ�����' 8,2tŮ��H�^��s�s ��	�����X�QҸgJL"
݇o��rQ8L��
��;9�ma��!�Ҭ�3>��;
TJ~�T��+�t�~�a���_pxLBjV�Ѳ�:b����mp��ma6tO�
�M�󌄍S@��G��a�AGksù�5Ǐ�g�'
�*y� ��,�t�9*M��T��QI[�P��
-���T�<����_|���y�
]�W�!��L�둹�}��a��#G��A�
Ϝ�,-<��

�����f��Zs�K�O�3dҧx LP�(�)}�/M K��-�۝�vy��EF�%��g���U���'nk�D�$�bJ��%�h	���.e4�k���G$��wE�M
����wH[[�.)��_zJb
�,��{�����
j7B	��G��9�$r��=Cs��ց�21[�v�ƭ�N;w��
���SP\Q��҆�r
<�/�)<q{���R��1�-�
�/Q�
>��U��,j��P_�����K��&&
&�n��
���KOx\R�Z��K���^�oF�I�
�!��P��J�Q�̬["9Y�f0nC��G8a_���X�)�P�@��>�D��E�D�C	KN��>A����(vE��I�D-��d.
�Z�0�9 m�Nǟ��
���2���=bm������@5��ԃq�`�>x� %K%c��<(MQ����$�Js�#�LW����|��c�S2s
K�	v��6��O[�r	^���>�

K��2IS�ٓ��Ey�ic#��{{�8��̗*}�Q���B��&qT��P��
�d����
{0=;�Xy��sd<^
��
�%�4U��OR�<a?
�R��d*��]�����x����0�Pr��� _O7'{�M�J�
,�G�4����t--(L��Ys��u��c��Yn���߶c'��PH��	Ii��s
sI�"��H�	��-�)�b0q`Ҕ.��25�{ſ�B$�H��$�m�$���I���m��FLJE0��%%
���k��v{[�?���M�
�,�]� �?�0�\4�3�fK
�
���o���v�]>�!Q�'�L����8<�t��i�U�&�Q	��H��*� ��� �l����� �,�)�p/r��e_D at DQ�h�j��K;&�%.Ik��C�����ƌ=3~a�����{��{oV^1�~�
��^�q�.7"*���N�|�-{O�{>�,����z��:�[U-��Jr��[T��S���	�K����߼
\z(���'c��q-�%Ϙw'��gb[g.!�u�(uw�����T��Hd��I��6(���}��U�m~�
J�(�~&����`��r��f'Ww/� LPB2�]n~Q)H���^w�8���y>>�D\$@2�1��}�/����43$21���5QQ�l�m�@b�"(J��3u�D��_
J*M�4�P������o`XtBJzvAqy�\����?t
-3�e	Հ3r
����3nw�'M	�"�J�ՠ���hmeianFjRlD�����&K��R����O*Ay*,*Y�lrv����MJ��-<�Q	�q`���,�F�
�4��q
Z�T�����*]�x�wgF��;*d�e�yY���v�x�:n��051Z���������1}�������%�KstK
C�V��Ykaek�@\/ (,2&>1%m_Vn~a)�K��>н��1W�Ę\3.=��W>n�j�I�.�^��h�I���|���a�=֓�It�
�r�v�z�R>��݉�1�a�3�m[]
�m�1h���-1X�t�G�����C�4,e�� V�Yge�T
-��
�R�� �rl<��EZ��	y<vBȓ���J�#���-(]ώ�¢�����HjjT(�Q466���;�z�0
�`��s�.��#1�����x�
-�_���&�2!0���s�|QR�K;T|�@v�ޔ����� ���#��>{�ޖ

,�j�4���P�>�T��MN[�=} A;c@��3s�
-K @����D�N� x�;���d�Z�����c���
pL�
U���
Ȏ�
�
$3���7(��I��0�%1�&�T�
R���
1s�v�
>;¢v�	��	64�C�FF�a�S�-�5��p�M�?ai��
ەK����t��G*J��KM����ts���4�%l��P�}�J���&qTz�Pi!P���������/8"&15#�`)��&Ug��
�t	q�y�u ��$P���
F铃}�
��U
.:�or��Ѐ�۶8�Y�35FL��#@(��L�`�
s�l]=�y
@�
�S,�lD���������'�%U{������
\��&��xI��rS�
�eKB���ɐ�c�t_�$�1�n��`~�zt�RR� f	�Q����3Wg��6Vkט��[�x�п�X!��c��
:��:m�	1������
��F=�����<���) nK(*��S��	�5\J
2��=M�
-E�0�Y٨8Z/��duuu2�\^�AѤ0aaq��/_�v�ƭ��4x���|*r��Z
^�*_xq2��&ěQ�$��kW�j<#.J�n���s�P$�"B��R��+[��Bi�J�j��[�0.�K!sKk�M�[� AA����I){3�
,>\Q]+W(U�.
����Ys ����#��+e�U/ȀPPib���m �RW�J	q�C�D�l n
�ߔfP(���'�s��ԯE��!������̡	��	ƃ	�
�"� 2w��d
�B,���^��p�&�`� mdD��&K���ѓC���-
-YMyqAv�����@_ϭ��,�LV ���#�fpT��f�4��ү�J��JF&f�
�z�ED'�ٗ]P山������
0%ږp
d ߌ7��Q���|���ҽ��M����
-s3Ӓ�"C��]6�Y��1^a����Ū�P�6m*
X��1?��	X�L.72^m�n=�
����oGp8�^RJZ֥����֎��cC���.a�
�d�
-��x����%L=a/>¯�h�lq�RC�Sq�`5�$L�ID�:�TJ����
�â�Eigx�?o�-N��6�_gF7��
����Ξ5��3
2�����.���6_o�����?8"�xJI�y�������R��Î�ϋ
-� 
k9�MЯ��_���aO×��BMj����
���&��Hm�L^`jnim�T�ҕ����q��K�`�����ë�ʗ��1.OX���9��O�{c�>J�m����<����]�xg��:������9����x,��
K������
]�<���DD�%�Nۗ�[PTʼ�ե��u�n�sI(Lڳ�Z��HT�I��p���H�RU���f�`p�
����%
�J�T�DT���4�PI��3GLp��θ���A7hTu���-|���]n{�=��C6����ōN��u�����ڔ
uUeEyY{SvE����pu�hma
-Kx1PI���Qi›���J:H%]}\BFƦ�
]=|ãv��g��U�ʶn�i(Kt	��8M�9n ��?�P�v�R����Q^SQR���������v���U�q ������B�T0y*��-2X��h�oM���
��n��	@ًK�-�Ku�
-eK�j`�-1�%���¤&q��h'l��������� $a����b�-b�
L������A���\Q�
E	�;4(�Nj.8�?���F4�n�҇"�OE,�a���1!+W��������
���_\^-S4�w<�e	ōa����{\F�}q�[������ʧ&�j�TWUV��������ʪ��: S�R�%\��K_���*��x?ƪ|�^���mBs3>������[���X
��A}=,(��k�Pn�ݨ��tYhB�q�ai"��/)�>�d@�da	rيb
�����?'����j�uiD��K���4��1����q��x�עq<��l���ʲ�����`	�Q�!hp0X�ٔ(�&�h(	Tz�Qi
-R��9z�,Z�
2&����
��'#��Lт�>M���뼃��M
ɣt���5�z6��G��{;T�
؟�
�34�g�����:S���^fAU�g���t2FQ�BD	
-�/� �� (�"��.�"����
-(�a9,�專 (���c��E�I&3�Nc;�i{�N����~��
�N��ґ��}���~��9PI�����'�J��TZ�T�*�[or������s4�c�L^Q]�����?82���WO�C���^�-�䇹�%Bi������]��k+K
s3�S��
�
-;���N����9�G�
VB[j�G\�M
2ebfimk��H�ڳ�/0$<e��3�s	t�r542v_�%J������&1]"����V��.Y,Z|�"�#���[�I� a�m"���ݺ;�1dPoҡ1��
	�Âssqrt������[��Z�Θ?d�
1�������V'��޾�����)i�)5
��:{��F��XqC,�$d�{��	����� ���᷌�
^;�IM
�u�5�
-E~���Ze=��
S�T%ri����h�fu�9�r֛����.�gi1Jm�ߪ�g�4�$��Q���b5�_���
�q��-x�=׍���.
Jsa	/x
D������ $"*�HB�Դ
Y�y��2�:6��

Z�
��:!<��- at -;?�i��Dg�/E�N�9&��LP`�yho%('����z*1Ab҃������@��
��!�V���,1s`��B��3�kY�GY
�8�j�I5\ 41�&���	�\�Q��Kx�n_��֦:EYqޥ
g���E���x���676\���T�⩴�cSi1O%-��GCcsk[�
�>~���GN$��p9��\Qw��0=����+�=��y��@��
>����g_ɦR/R��cNFZJb|ldh���nW���6Vf��t�q*ii-���̥�k S��,�m����]�=�}��
<{�X�0��e����������[w�P�)X<�����ăi&�4��I5c�|Ÿ��J�0[�p	��#��I�`Y���0	2 [...]
���t�lk&)kkU�W�����RQ	h���o�*�Ҙȥ)�K�:�
U9�E���ߙ���&��N�u	���
1]�y�
%�Ɯ��i�ף�ӝ�G at 7ڊ�(@iɼPZ �l�l�1���;v")����˹2�Z6������p�t���ג����i6����̕�95��k�I� 0#RP`\�Υ$�8�6"�v�
�҇R�3��6Pi���f�3�0�s��
0s�����
?>�7<����M���NB7T�/A	��v�]k�i�u�LR��CaA��z�9;��b	���� ����TZ�T����G5�������c��$���e���-�iKPB�ƌ�t
<�4
��P�Y�0HC(��t��SZ�(/Χ�x4�`H�>�]�۷��X"��8+\���>*M�K�,S�%S
+p=���n��� {�Q1q�\ʕ����a�:�����\z�j��1!Z��$�KM|¤��������I�H$	�zC�4!a���T�-͍�EE�ۥ
�P:���k��l�&+
3�
�5�P"&IO�������r���vw/���#��S.��U�5��w�����ư��ιBa��>�X������k������JYi�\^��\^RZV^Q	`R645�\�42�K��o�
~֪\�Mj�=�M�!IҌ(
��K<@]�K�Jy�n���Q$؝��<�u#�����$���|!X2021��,9B�H��F� �>�~1
����R�-��t����I
���fu�w��?35^�q�'�/���m���r1����񐖰�@�
H^#�}�8*�͈TZT�b�S
�
3�h0A����,s� �O�C註�c�B�T>�
���۷7P���cCwou߼~���B^����r�XlT��=
;�i��2X�TZ�Qi�ǥ�"�JK�J���]�ohdfe�y��N~<��gf�TT74_�	cih
J��%F��;���{v T�|*��t�72���n��*+��x&����`/w��v-M�
 ��V�>c�R�K+V��L��742%�sptڱs��
��`�K	4�.fe����(1W�{*\"㛚
˖ &U2I�$
��|���$$K��X�q�Ɯ�6=E�7�I0.@�0d��˙���P����k'
ʟ��)�h�6J�$v�KK�}8_}H��&�m;�<����KHJM��),��ihn뀱D�Xz񒃁����A���&�0�^�˚�
�~K]uUEyiIqQa�L���/���"�j`01.��B�.�A\���իR�3|{��Y�3��֧�};F���yC��B�F\��q1Q(tg4nm�y�"1;��Ѐ��I��͙������
$��]@Ph�T�9�:��Kͭ�u�ã�L��}��)���V=������8��K4�Y�$Ϥ���;dl(U�
dC\RO%&
���Hm���d�&(AC"9����*�`,[����uL�7b��=}��"`$�6(���o�ށ-<z���.�
61���������-�����Fn�v��4�U�ip:�hLdH���nW�-\	�]�� ���oI�O�J+����P��8�x
���O<}�"aZ�����{{`<��W���.���@�<��a�R	�3>:t���f+R�� '3=5)!�Px��^O�
�
6Y[�n���@S	s	}�%�y����K�z6v��nwvu'كTqs)����K�{�
-E�Z
��G�b\���lk��%�I�LTf"�Āq�&�l������hA�(\B��^�f�/�!a�L"��v��eA���s�C�����
�����p��
i7?E���]�֨.z�����fG���)�'S�2�e�+
-eS덮>�{
K����p/�/>�Ipo�z��j*
&�0����BY~^nN6}9�������XLU*\ .1���M�?����R�?��ʹo�'���rypw��ԌjL�7:4���
U�-?��iݒH�pwF��T
J��L����8މ��$JQQ�l�ɾ]vpI�QDQQD1,z/p���"�""RԠ � *����cS�*nq��6�i��N�Ա���<�9�y���
��z>2��s�����6/���Kcb���	�����.!)9���^��i��R7�G�M�ޅ������ݫ��j���S�t��sV1	���`���nQ��ʍz�
(\fz*�ź
L����~<���)�4	�4���͓e���ǭLJ�n�����
�-<p��E(�%iu���&����?b�0n�$p��+����{�*
li�Um��X5H\�����D������ ;x2R�-F�q�G*�@�Jo!�&�M���A�1���5�����u��ꆦ��ΣP���/��>�p
b _�>Z?l���#��:��;��)mJo٘�6)
�cldh���,w�=�BX����$����wp�B�	���M�'�%�U���`����\
 ��9yj`P�%L���Y��2�tI���%&EL�G���0Yb�Q�� I_+�D��k���0s&u
��ֈ�m��zC�E	�ov4-8?������m8*J�$�D6^��6Oo� MD
����ٹ������P�N������h?�!����x�M�'AHz at L�>W��0Z�576����MeeF8ee��ʪ����F(L�m��Ϝ
.]��t������6�f<dR\��7���������b1�\ [...]
-PZFV6x��Xԥ��u��2.���>�\1l崿�����26���q���d #3"3	��
`Q�b\P�XZ"��
��� (�X*�	T�n0u�
G���_PhD̼���ƯZ�ݠ@g���aY:	*�	>p	b�>�������60�
���m��ف�
X��6�U��d���N�[��U\�ND%��O%��vT
A��Yy�KX��a�ּ�%ƪ�ƽ:w��%�XBN�%ݧy�=�[?K����q��9�KU	)]�+���\��H�1&B����*�S��0�m<�KT���������gY�
�J����KR�h���<d��E�H�0]<^r�(`�0)c��Y;�G�

�d��&e�	҅{M 	�E5	�~�S�0�m�1�I���Q���y�9�(�tC�b�"Bi����p!hv�IH|�./N�����/P�<eyšԌM������=��:P�ΜcXb/�.����Q<	��pW�����e�,v70	�d4��K�ї�e�U5uX�����#�z�Kx��U\���
�f�K��gVnr�cq{f��u�%#�2�'��ab��o�n~kd�Җ.(ͥ;
���r�
�܍/��ĥq�X�b	.�������b7���^�=�N�uiWcs
j]��}�X7�\bʮ
�ߥ�|������5 [...]
N�>x�W%%��
*�;:�zx�i��}�"195c3f�[��aЂ����Ж�#���=|��,c���_0k>`q5�i`܆΁
���PSQ��j����w���x��8�x���4�uQi<P��-!w(�AaT
��'�K�ڲ�������	0}�x�XB`��1�*�y��<�:�Gl l
�u\�JP�?��u��(]i,Joڐ�&�u�pM�����

-�ݔI�-Hg�	K�z*/��`Mxd
�
-�R�Y]��k;�	�.��\�����5�Deb�
�%�����I!G�%��?{f�#��L$V�(]�
�V�j�6��~�IG��4�v3P��SQB�F�#鎉
���Ђsv�a?}/J��J�E*9��zx��pOY�:%=+�
ņ���T�@����t[�+B~�&���]��,����̠/).�iw��juE�@����j,L
-.�".]�\��&;���6��f|k�+G�I�˳�=����	��B(�A���z{�����F��-��E��Q���~>
J�/
%K?
K^L�c羇Z�����F^WHu���a�^кΣ]���3J.1	�6��KGg��[K�?%"���M�q��	�L"&uc`���kj���Gq!��:76Ze��
J?a[XPi"���i��3!s�!a`�
�,[I� 2g�-�[T��,>t�=r��-�
�J,ck�3
-��;7Z W��KД�t܉K����dg����T
�S5�j K��$[�pzo��J?*M���4e��<�1�>1]RF�n�����%4
���O�1��s�
d�y ���<nI����_#��:
���TS^Z��J_��2n��!�^
��D%B�	?�9y]",a��.��i�0UP����A�2�����\���k=(�Dv}���8߽�$0Q���I�L�L$�gL���#����S,�#H�X�d$�cO�j��
`}�IG:;8�j*M}�NP�
Zo�2^��#������v4�t�K�,1os��
;=e�ڴ�����T�k�[W���͐�A at bO�2"4v��ɞc�X������b�vGaAA~~^^~~AA������h��Ĺt�WG>>�\����%
��|�_}eM3�|�>�Y�>
�����f|,6#��`~'�u}/��ƝT��$�jD_��
��Q�ut`
a�RP����
K��%{Y�Bãb�`��
-����J
���]�A�vt
=֍��du��.
[����G�������<��ԩ��l�ƍ�⑑��j�0V��
d3@�C����W
%���JoO��*9̡ͤ	.x?.>im��-��RSu}����N(}�U/���C�L#�!y��!|����
aq�i��w8p�,�=��
E��da5XΪAH��������t;5�������h	�yx�j�Ӌ>X��&e�q���fWSK[Ǒ.r�a�U��`�l
4��Vr�
�q�:�=�
�}'�:�o�]WYV�Jg�O^�b����;��rwu�ʆ1��S�%
-���L��7�^xT�
E]JM'�+�\��56���㻀_â���}%�x�8�d4I	��QƤ��q�ψF<X,Y-��8��t=bM�6�K�$�I�=�I�I�5��F}�_nNvVFZJ����erQ����zӂc�gNJ0I�.r��$���ǟ<嗋?\�����鿼��S���_�tjD�U�ij
(��
���(�	"Ⱦ�K at Tq�u$.1FK4��h:�M��L:m'i�֙L���{���.?~`lL����O�|�����+��v���5Kz�N���"�9):�Q��S���e�e���-/-.,�������������/(*.-�Da:|�ޘK�D.QHJ���d�?�EX��5�PV���&���nOK����38#�:��Kd
-�f���B	�ƌT�5
-^H���r;��P�
&�%�9�JA
v޾���C6lF]��Q�).����{�܅˭*�d_@��쏟�NV&5nü�
��U��8���I�8M2=t`�PA�NH(Q4Cr��C-^
40�Ն�!�&�>�ϠT�
DX��"h$��`w|Rjf^Q9�0�`˻誸se\L���ᑑ��Q�c��/�#�
xh�3���:�@3`>\SY������c��
�l¢��������
������ゅ�\���tlb2и�������^h�Xj��8����C
d��@F�@h
��y���y�MT�:�t�����
��
�8�1=�|�9z��Dui������=w�徨KAkC7l�

G���ͺ�
1���5��s�TE�3�R���&�M*��Ƅ��gВ���HV�+��G�� .�=�H����~��o�b!2	������`o`n�(yiEI
�^
-Md�T-�y�P��˼��b�䔐��vF�&�������&b��E�wR"#B"�I�E���|�0k�
�ؚ�
-dR~nvVfFzZZZ*�K�����E0��UT��
��Kf���$�� �3��6i�J��L���c���;��OU
T���t�
-!㺨�fk\㿊y�M�(�c���
_*�f*I�[��g�_@к�����������s�[߽���%6Gl��3���*����H�	>V5s7a�A4:�
��کg��G��E� **h��i��L/
��J3�f�ut�����6m
g͡,U��
-"�����
}�#@�'�
������!���������=R�E(5_&\�ܟ�;b��K�P
Ȅ9������T�fc;]��(�n
"���ED�!4FY��;�D&�Xz_�
A
"�y��
Y
Ƞ��D��@�Σ�ҹ3'�=T]A)�/!)�1DvG��<Q�4_e?�NMT���:0(U�u	�����KHJI���+,)��fk�\����i�ϑ��S��� .���&%0RI�5&mM��
�����ϕ��y$I�
�KD�~/"i�ӧ2�eM�u��5�ms&Ac�n$���m���EQ�E	�$
�uY�l̳�-��
�S���޳/5
eI������4��"

-�rR"�B"�h��a4�OB�޸ֆ�Gf͖A�����������^rr����

-���Ҋ�jC.��\R))��#���_������o�&M�4oϸ�i��%���+��OY��$|&g/�:�[�(�5���]μ.B	;���ˆ�ıD
-�`��m		h�����K�vD��R5�������U.����a�m���!�q/�>v�2�,�0��%sGe*
�U%�[�#�"	��be�?0��T�4y�Tl(8k�����Is;Hsʅ�O�=��E���4���޾�Gp�Ǥ�'O�Z}O�~��0
8��Z>�拿>�t��A6�����ȝ�6�Q5`���#���4��O�I*�~&�x>��R/�U�;���ӳ�K*�
=�tF���[��{)�i
<����D�-����
���IT�U������GG�qJ����Wg������)�T.	Q�=��upb�C]r["��jk�
�*-3'������b�,|�m�|���`⒝��E�b�����Hb�1��	��#F2��,=����GҰ������8����6��U&���}��-!."۾��*ӊ������d�F�
+�ɕ9e�2�U������e����
�Ġ��l��	��k�$���I���3����
��TT@������711�_�ޤ}�)L9yť�Z.ih�t�����N�U~�0�+�+�5mr�.�����d��H�8�F�o�'3	}�?S��$�5a��M���;�r+W���4Q,���
b�Wo�{xy���c���DXG�9|�X��32�4�c�<�v:4l&=�4�|�R���nm��(�,/0N�@;3��$�PM4 �#f���Xb�J�
JS̡�
�eC�j*�As.Js���Cs

�+�k�N 	.�Ɇq�������
R6�


|l~�e�������C�[g��<�
�
=TS�&�ޱeú5~+�=لQ
`�tw����$ˣ�D�%��*�c�Q�r
�*k�S,]�,	���	'�y��
�;��~9�.�LJ��J���j�./�ˢ���
FJ����� "o�t�i��f�ͱwpt�T%�_`кЍ����h�x/'����H�/��]�.��>��
m�`5$��&�/�'��L����N��0���T
��Imid�|�#	�����Fu�*Z)
�&{yx4w��b��{s{/�E�d���`?�n�j�S�d�`��9P�<�%^>+��B6n���D�Vu ���*��.��/�oU VO�"4Ÿ�n͞AE)/�2i���=�q��111���q�{�&Q0ef�Y˥�%h0Ë�4��ԗi�_[nRߧ���\������H�%�#y[d���>X�p�P���WɥI�P;�Vf���Jcb��O�&1ع�ؽ�h1�܇��������BXG�9�\:�璀T}ؠ nL����d��ұ&��]b�i�Z$��t��(
,2	�E�S�р,JC�)x�i`�X�򊚒�a�\���
�4�+f�pie��#
8sL�������>��I������
[{��==�ݤ���CY<��(�AYLU)j��M�V�.��M��<O��>��
��2M/���=DLoBL�&&�e��U����䜾"|
6t��C̃2�<z�<�S$�ā\�HM���ձ '#UiW��JoO��;�	%
-!� ��{N���*gI�s��Y��	Y�i�v�*:.����k�%(����-W���ڒ�iHU&�L�4�h����Hb�1��o��
O����k�F��G�i�-!.M]�Hz ����v�oS��c���
F"[{[!T�����
T+J�d�`mgH�Nq�\�bu�Z�[������k��*-mWop�S0��^�Hy$O�އ��8��& ��vk�Ȥ��^��Y�W�T�P�Xa�@��V
-(��$&!�
�f_�F�LT� !���B��� �������(��*�Sg�:��s�}�����Ja����x��|���(/+--�+--+�������
��
-��؞ ã0�:�6�Č�a��)|���i����iTw��՗��8`�)�`�$��
��,J%!-Jj���J����
1�^���%@l�
�\�@���K]�e��|ִmظiK�%�:�U
��鋿��i
�d�?�o�
7w3��s"��3���
0�6T?
�(�2
̙=�%�pL���)
��v�jnr��P�j�¯�
 K��
��ĶΞ���'��
�NPߵ������^�rD�$�;{Z3��E�@3X��L.*��HM����t��$5a6��F���9���ȑbB�ӈ�S�Ӊ��tyu]Ss�*1�m��
8H�%�>{`���Ё\�8���@�<�?Z�
z珄Ҧ�6T��Kj*J�*͏�5C��DvG�U%��#�#�9‰
-ao����~]���JRrZFVnAa���K�)�ֵwtnپs�>|ؘ+L�-
�Ͻ�d�%�R���TbԘ��-��)*��aY
����lI��>���F$
��)���
<�o7���3������ȝ/�%�n��ŠRT��-KT��g�'>��2u�̘y��mY��m�.�zS�wR��$��N��%�p��4֯�����L�,/+).
-�
-�B�����jQm�⦥ˆp���$m�� �����L72^���ɡ��m���n�o�ַ�
��Z��$���ŁI;�I�[66�VK��1E��8�Z#���>�	K#����	V@�u��K��R���jb
��ƛm:6A=6�Y�\f;
�6�o�J:C����?�͝I ��ׯa ��#�a�i�LuL�(�͍�\lp5���J�JX����Ns�,��K��$NӇ)���
}P
�t�r?����˗��ŋ}P�
a�=j ��PB3X�T_S	�NKN�?g�Kb�R
���
��I��
,�
*a R
G�J~4N�K*k�
iB
�%!�sH�Ew���Ё�G
�e
��{�z��x�@z�}���UeER���Aw�@�"
��y�^���?�&�QV1s��'$��ef����*�k�=.1��

-�j
`��C��U��w���[��E`�0H���Tg��~|���t��R
)�T[J��~��u��kI���F`�Q*�Aa��W�V,uL���&'Rd�7U�-J��|�s�2��@!�S�L{i���D
n��%�W�&Xڶk�r \�/�N
-ѓ�D.��$D#֮;X!�(�B�I��E�

�����,,
���WV�0
�Ҟ��P�d���Wlΰ���G����`���ۑ����#��u�%������o����뵌롂\�D%Z�4�4��� ����8��
KO��t����.��g����|0�W_{��uT=���G�x�.��:0y�1��_:?D�p���ѹ���ƨ��A��Hb?5a��
�mMq`�i�L�KZ�b(I���*j���
�<*=���׶8�e�J�[��v
~���.��t���z/D|����ܹ�T[��������K\%���pLx�1�hk������Ja��x�������������چ%-����έ;X�h��	�n
2����8�L
l�4�%��Ŧ*)�����@w
��2�t�\�T�ui�
d5m�˳����g�0�UV�:.��6o�A{�&
��k���
�}T��K�d�$
-��O�2�Y�'���TVGFY*-�-����@$�����5���&�&��m��)��4�ܘ��s�2R��� 2W�&3���9�y4|��*��h�)3f�ڲT^]�xi˫���m;v��8�_ĝ�'��q��0��̢��v�T�L
--,�����Β���K2�ИP���r	���{6�_ҜA0}�)�9(f|�V9h�n��'�^��n9 y��ܫ�3���k;{�|�-�M��i\�zk���y}���Oz;��7()�~i��U�
vV@�Y���K��K��u�������o�s��� &��#�P�輽�'�0Մϝ@����㴠
�
�qL��Ҁ-J�lE5j	Kჿ
��?��n v�{�����Œ�M�Ж֬�#ߋ#��@v]�O at xP�i��L��ӃO��OQm]�<D��S��
�fP^�073m�T�iS�	�,>��Sɚ��b�eiAZV�5!d��7��Y/`��
��Ё
7�q��
�8rXMu'�ٱ�m
BKsS����P~�V%��s�N�
������J�͇�\OQ���̸hM{�q��b��AW��{>�ZW���Ͷ
�ڼu;
-�[��-
&�
V&d
-�vf&
-�Ġ1�23J���ET�F�#�#J˙��%���Fm�$m�zN۷t��q}���L�W&�Ii)I	��-��+JFgQ�T�%�T�ѲĜ�”�/Ϟ����WXRQ]�(XZ�ac���v�"�#��V"r���5V!ɲ(UU�5���dgf����KO������/(,.�Z.�6\کQ���X���n!�z��n��&�*ß|����}�@�Ĭ�W��9댒����,�̗,��!��(���8��������%�K�%��S�F1ש~bX��R�4֕W"45�K.���x0l� 
&ю'�/�B:���ގ=|�$7�v�
~����1	
���	yi@��TTF8�P
P
-��p�
��lYJHN��]��EuM��0�� dw�(��u
��N�?����]]����@O����h�������g��	�p&<ƚ����J�GԈ4�'���'�Sg�,%�dd�Z�bR{���
��C
������yW�L�
S]�Z�TS�ꘛ���KJ����I��2�G=��\b�
�5���4V�
d���.͂����S3ȥ"���%�-L|�0ll
V,�=l�$NvI����#���G��ЌĠ1Qe��J���TY)�����J�#�
m����
�5�$[�(0Z��L&U&!�Qc����6"����
%��>�PG�B�@�DpCN�e)��-?TZ�������ɍ�w?�
�"N~z8���#'���Ծn�j���ٜ���Ԕ��SR���<���rå�+�%{���
�u�)����!>�W�&�lҮ�=�=]�?�4!@
-�ć�
-n�+��M��
����T��&����
b�OA��쮠�!��%�D@��O��\g�#ui�ƺ"���SU��;CG��G��
�GSDy����������F|  � /�H���3���i�&�N�6�S��?��{��|ϹW$���K"����^�V�p��R]י^�G���m�ɚ���
?6�#�vJ'`�ӫ橭�G�]�d
H�~j����^���Vͤ�]�U[+�6}�i �ҀY�"9�A-o� 
� ��J�
*���ؚKHI�s�r�@p��@͝}xd�x��7q�
-�4�I�7	�21���!�
燇Ho��Xo�u�vT��o�
f�4�JL�Y/�JS�bG��(U�=������dB��C��'��
�ԣ@5�C�y�@�y��0��D�
J���9�i���8�J�aK�;���1T�g�e��%Zg��$q����἗�_��TM\����E
�z�T��4� .T&ľo��d�K�
-#:�DellA��3�d%�"a�Ѡ,H� u$�{��۷��I��&����S�ˆI[�Iy`���ULb��D?�(i��c5��%o#�ĬX��q�I�����Ⲋm��\�[���N!r�C"r��&�����"0);+3#ݟ���KK���32��s�
-
-�KۈK{m.u�����9����V�w�
�3~���V�z?Y���"ҟ��GG��vU
-���xov\��a�:��Uy]�,$J���q��an,�`�Z�h��u�.�#���3�s

-�K6WTVU\��+�
�n0��QP�T��)�+����jd�Ox�$C5"
�-
�0x�$���c���������e
�K30�_D��^W��
�鲴>���(XR����$7��I��
:7
4Ay�cc���]r>�������(���0�6�V��D��ES��(E3�ΰL8&����^>�4��)L�EF/�	�>.>��#��T����������s��##2�ib����gh��G���4�q��1=5ŢtSZu��͠"�r�%��]�(�)]%�26��l.��� ��"��T@�l���b�&�ȋ�%l��Aa��1��L��ȳ�Ϳ>%Q��DW,,�K�"��B$V����I�d�5!�
n8����fR��nٛ.J��̌�iUQ�b�+�%{����E�ʶ��"��3uv�E�B\q)�E��E|L�%"'���^�R���~�@�/�������L9�(L�%e̥��%ʒv��x����Lw���
�xG�x�WioRVi/S��{}:Mq [...]
9������;9
&.A��{d <��
��A��C�C�J��!�M��Âܬt�'ɪJ�B�ߪ�ꀒ�%[U���,<"
-q�u����k.��o��^��fO���I'��X5��d�^'+��G���4)?�����Ġ1��L޿���_$3cY�
��HYdi�"DBI�q����+�I^blFM:D�VC
-#o
d���DG���*��,J���A8s
-�%n�)��
9�%r&q�qѯ/Bą�g\�-�3]�$��Q6/'
Y����$'%%�KJJNI0a�n.�B%h�
�9�Sӭ�_ܡ$f(��^����^�����8L��~��}EY]
-�5W��h��~`�fRs��kSqݰ�E�v���f�w�Qh,�H�
����
ť�.Eq]�~T��|r�K��K��8��x԰�ԴQ��l��y;��Ԏ�l���H��5��0��i���ǵ���
U�gQzKE8C-:
���4%�J��݀��R��;pa��T���$����S�Lg �޳0��z�A����Al0�ӝ
�'[�k�p��(��
�
~ib�\��*��f*#x�T�]�:0�˒eB�EԖ�v�U�?v��H
2���y��h
�2�ft����JT
�b׼�2HU
-���P�� �.AV*8�x�K�ĥ�[*�v쬩�
��U� 0��X\�8�1��hR#��XcT�Ʀ�?���G�AST%4b
ieY@�Ri�3.I��ڂ$26+�`xtM;wp���S�LR�F"
_��&�[��]�B�#��s��7�����KX�����
ɍ����~j��N�ϖȩ�v�$���&�z��Ą�����A&O*-4�����|��t� e#e'G�'0�1ݸ9u�B�݀�qߵI^�?e���>v���	�oTG�{�
��Tp�~"i�*��9��|�Vb�>ш�����/%�S��S@��T]Z���5�X>h�y�D=��6�X"��`��i�2	��I��퐎)
�jd�J5v��c
:i�c�d�$�I������ol&�q�`��(EM�=s�/ #s!�Ht�9�0��.,Q0կ��Q]�0��d�m���ӧ����'����~�����:M�
��<q�h�N��u5;w��J��	G��L����
L�	Ӫ=zK��hd�\.��� [...]
-*�ŝ鶉&
���Hb
-OP댔����DŪ"�Ͼ���
��ґ@$)Ic#jC^�$](��`m�$(�diL��l	1�(JN�#��$�y�]��b~��]n
_Fa��|k�%��fD�E<� �I�Et�E�j�hҒa����J&$��[�vmll�ڵqq���' L^&�ʂBťj,T�I���=}6�&�^���J�&e���?���0a���
/o��:��Up�3
mVW��Z�$�D0Ɉ�����ݾ��Œ��y�$׽�u)ui�*;���Kȩ�\N�D<6R �iTi�E����[�t
���S5�j�#��܍GDBpވq,��u5�T�+����B\�4��4m��$r�C��v7 ͽ
a����`�x�^R]�a2b��D�ɓmm�_�)~��'į���m�v�h
Z�譎9]�b��^�&
`�*����<f��x>���R�
-�
�JT<bPj�y ��<��
�8�����p�lU��b%U
W.W�^HAт�l�*,�U�K���#��c��X������
-�1�MN0�ɆG.�Reb2�3ݜ2�D���Xcp5�tF���/��ǿ��FD#+��i⒔�s��5�W���}{�&��J���$v7�b-2+��PrL�j�%+��������A��K4=�Et��|�E�I4�D���{�?�x�a��XV�b�9�ű�d��%�H�A$�9!Z�*U�خ�X��vv�����0����u�������7	6�����Wg�����>ץ?
�ůڹ}�c�T����������zY
���=&ǥ��RS��/ef�?q���?x�3����M�*�2uw��S
��V�'Y�����\K��
�6m������.δ�����v�rL�2��r'�l�.G��a�z��T��~�Î�d�y�
�4C:?�K'����7��O��]����+��hTj��
ޖ�$a�5Ԍ4���i`�l8Ņ-
-��i�:uzV_�����0�w�ԩ���ӧA(��§����K��#"�~՛t�Frz��Z�RUyiQ��؄�f�LƏw
�	e'M�m�8-.tHl��d
��<&����1 ����IԯH;(Iu��Jgg͙=+
���'�uI��J�^ye�ϥm�%���01�r`���]geB�&�`f_?��D���H'j
"�ʨ��Pj�'�BR���'��
-K�����bGB޻�%K��+�ڮ%����k�{�n6&�ܐ��1q���Q���i9�13
-n9��NťU5+�%�M�@g�w�_�]D�=��P��"Q��L"]a�S� ���,����(//�+/� ��	&&�Khp�z�
/`Bc�u�B|2f�M�NnRW=�H����� M���#����i�P$��I����YB�z1�D����/�)>������\���R�u�5+V�Y�q���ԉGR �M9 d� �IG�*�H=�ܽ�K�����"݋D#Y�㬠j��oK�8i��c���s�7#��0���U�� YP[�d�C�!��>:1�78844
��H}�fxR

�AnG�wv�h+�X�I�d� /7'2a�EQU����V��VL�	�@>ڸ�v�p�<���p����y
��<ȣ���}�G�?�-ёlGs(-��,+)�},$���4-�*�S�\ܣ���B.6��L�ؗ.�2!d�L�}&/E�LF:OT��H�e<��j
-fFY	� ,:��������޹Mqݼ��U���
�ϝ����դ�IP��I1��n�=&�_��˒܊�*�K�E�kj����E��E�I
�D�S"}�H�JġV�|CUU%�TZRRR\\�?KK�@�*4���i��4l�4�
��Q�c���&u���!m}���dƈ�ݒ���}zɥ���[�_�1)���8f^9{HŒ���.�,ʵXWpi�v��L<:�L�΍��
hi���oǖ�
<�o�2v	qA�3�H������?��q*��ILE�M�6��]�
Os,Kta��(�Қû[�v�e58�F#��`�}}�^��c Ԙ���|��Al 䆖$z�Ph#�7iJq3PN4��O�dY�BF�LH���讐
�
-R�@z8�c��
���<ze
h�D�$
-�ׯ(��Xu����J�SS�Ҵd]�h��ω�d��Z�&��'��>�����3�#hz�ؤp�QcT�=��2�|�=5E3#�DW���/bj�{ו�,I��"j��(/56�'$���Da�Lr�6QQ��Sr
-/B˒������7�n��&.��]Doo������H�HD|#tl1"�������� �LU\(�r�p�.N��~�0]��+W�3b���G�I�e��O]�7O#ct�����4M
�W�1�$���"��f�Xcj^Yw���@@a�3�����u�OR��%?pؖ �s��kJ��2����<)��j��₹S5��Hn�t�jh�0��gҸi`�i`�\��Ҵ�,9f9P,���С:�	y���ƒ򺺺�'J^o��C~}���
��	 An4I
�5�q����	�{WMX�0�J��J^Yz{F҄�-�>�����
-�H��6��a7���yt�� ��5x�đ�֦T��JC�s"JUi��ʔU�+�=p� �Ҫ(^����j�`��i�;s�ϑI���$��Db��D�Ag�(�ēO!)z���fB#�
-�rʂ�H7o\�fDҒ4zrD}�H��5�wS`bmT�
L7&!�-$�$����R��&e�
���%�u4��Kr-)�zv�Et�L"za�-'���������&
�rX%�4��6/g(�.\��3`�O��]>�v��%���O��^aV��><miH�
n���Rܽ��.J�'�R����΋u�O)��<�KL��1�v.IH�;e�n�6�@3Ϣ���5���
��dG���I��
p�g�k�A���'����kq���g�
GX*d[�f���N����Px�mm��S�!y��O���ڡ5�/�Fދk�P̃׬rMI�47&<+a¿
�RM�mi�\�(�WH���j�̣c�y
��qP��$�H,�<�?
�H���U�-�J���.I�3.�KrɔE�-��I�60!b
��Fc2��nP_�&S��
�� 2 
-:�о�ւ'��;j�)UEYAW�8�Z� ��˗�H,I#C���5�I46ї�n�NS_��b����G��4բފ�������K����#Ht�[ߘ�����]D�^���Hڵ�'��JaRA~>~X^�b<�c	�D0��B�ڸd^�
���4 at 0�~x�����b���a�&�2mw�^����s@�~{M���~�;y"N��hL��,QT�/q}A�֘��W��T,y�n�_��|��`��
��@�0�dڬL� ��;S:��.��s��2
pd).V��8)<���t���$
ե��s�+J�JS�2]���,ҖJ�%��n�#�v�!�MMP^ss
��wP^k��C~} 
Zkj�'r�C�}��e[�H��BI�Mx�����	��cj`Bӣ��&�m	�q���
���H25�Ӂ�<&��c<����¤�ǐ6(Yu̠t�&ǮK�����!��Ƹ�0�� &8YO�d�Q�3��I��Ĩ1�
��Qi��ȳ���)�a����
��	�D[��.>����/�I

niE���cR��$�D��ŔDYBp�v��@�ċX�n�K*�E��?�BR.�EB�n")�]kV{��HZ�87w�����$S>J��j�J�
��$���I?f|
Č;��U��Q��n�iŒD:�Y���Wp=g��
3�X��u����Wt��~$��
���#\*��d�Ć-�ԁIb +r ��H��t�9�
�k�yshs��!.���q ?��i1N�5��w�Iii 9��|�
�r ��͎�A�Otα�l#�v�L
�������5�>�
-�R�߻w
D�ޘ�Tx�!����L�M�uS�ai�gB�
��B�ky�;l {l �n ��c�̃�<���Cd�
(��Tǐ��
CMb)�K�-�\*�m
�҂�Ց����-p�����=��}J&��Yq3���)��W�il
:���J�O>�w��]�Jd]AX�,=�
M-"��Չ�}��!i��\�6N���ԇ��¤�I&�Q�2��w��Ҙ��x���ͻ�z��q"�H�I!�E�Dbˮ(�4K&�-�qo!יG��B˸P�V���{$����%c��x/ӯ*�+��šFD�
q�Q��

-^DAA���NE��Y\q���&i��CV�����m���<��^��^x>�
�~�������46�V����O�W
�L��U
Ó�>�$:p��dd[ʡ���L����PZQuh���?x.5q���&Ƀ�;v�{���PUY(���������2���GSl�_i��3��[|^��(��F���{\�
-�����$ާ(�@E�
2���
��ۥ~m�t
�Jq
-�q�Xڦ]PMG.1�GO��wb�ɩ�
�Ob?��J?���jS����H�
-#ؓ�lP�/�ŧR
B
K�i��4Q��
-�`� � ��1M= � ��1�`KBg�
{J�ܐ�Sii�Jme�*�9�1FkY��3p�`��n���VN&�
d������Mp�Z
xB�I���~��
-���%�~C����W4�E����wR��H8�fo\�z�I�>��J��Ⱞm%LJ�_�C)�R8�X܈%+*���t�N7b\7b�6�	!<:g$�Ez���$CRggGGG{�����S�0q�{�K
h���u�i�
���ݼf�
5�}6I�Rg
�����sm�G�H
F!��?p�M�d<��D¤-¤����|ju����Kb��M2��%;N�	*�� ���
9�@&������
��1�sӘ�&��HJ
q�.r
j��U�
�H�}jg�
�=�ťj��9Q���b,�J�\K

�.��%�Eۍ��!��'&�Ob?{����� |�ɣӰۈ�M"��}��(�e��RSc�2z���ŠҲ(�D�F�
�%�4�G��C����^�1N=jd�@�ψ,�+�k��2(ŧcz*���\Z�s����d���Y�8�zN Lӗ`�+�x2)�
I͎�d�)��'I5�
F��5<�>���
-�b���`,ϣ���H�
�ukV����f��K��q ɷ��(}�6����y&���D��cI��Òkn��~#�⍨��JD �E�R��ϱ�@jkkkmm��	�
L2�]ƥCG��=`�����n��0�f�Hj�?�Ir�:N��8�t|?GmB�[
��:g�\K�aI��(npƤ͝�[�'�C��}��@��4F\�\��S6��r�J
00�w�d"��սȬ�t��w�����J�O�k��᧭�UNi�ێgR|��@Â
Ja���@��]�1L.ɂ���S�ʨ���O��l��'�h���@$�"ؕ[d0�G�҆��A�e(գBK��jxYBs���B��y9	���zD���޺�K������O���|U�%�Q�p�WkY��T0!�`.�2�>�I��>�&E�&��c�Ě�L��
^K
�&��S��*ƙ�
-�2g 1�H$�{<�.M�j�dH�g�D�D����v̤�n5
JIok�C
-X�F���N�y6�LM9���Tl#����R���� m�ׂl6Lz0�@]Ѱ?ʞq��t���x%Ӝ�Je���$m�~x2�l|o,_���41�[�����3���0�>���II]_
7���&Q�(���KI�k�\�J �f
��ށ���Lr3�V[�G�������n�
�b�隧t�=I�� ��8`	
߽���b��q��P�cWIa;�%5
���7\'�%����&���S�*��>���F'O�m�L`	:����
)B	z�\?
�zPkH,m���"�{����D&���1�z�z�` �R,�Pj�I)]%L�V��s�si]�%:K�@��Y=G�1�eR��] j�]��g
&����&.���~F���O�;���@G4�F���&o$I���8��ΟwHB�	�si�(}�6��TE��X
-�ͰT܈
���t#��()�"!����/k��^KK
��
t��ɸß�8�x0͠f����,�(_XX�N&i���?d�{��Sw�"go����I�d���2���ە
x(�P�?�>����c.�@�

�F
 �Lm9��L�k���xF��쪻�n�?�G5N� ��6$��V�Ʊ
؁�0	jYX�@m�d��`�ڀ%3��74�z�;�	֓74����q��� y$�	|��Q-~�hoM�.�E]U�q�xyڍ�k9�
܍�M�>
-=L������
=Ѓ�g7%B��Wƈ�e�Rl���}�K[c�Y�`��?�`���M���L3;��_j08�{�&��$�~����s��^�S��g���ytG��PS"M_��$퐄�>
�IqtWaR��E�'2�����zm���t#���
R�F����6�Y�[-�;�a��f�}�� ���
4
��1�Q����KZ�Y3�Mk��y:I�2~�9���������sÛ�����ܐ���
-L����*M��P�ZRu��k�
-�ngTp�j
 �Κw.��L�z4�<
�y�	�&z^� ��}.�
��F"}})�22�j�￰L��-f(N ��!��
��h;�
�$֓4>B���>�ߓ���l`���`0I3�AK��?�*��:�
-R��onq���|�(�V=��
�>?GIQ�'��tK�(]�Ғ�s�3V�%�|���xK�$�(C�S2I�������g
4qؓ��L&��I���O�]>KE8�`+�J���
-@����撾Gw�F�$
����I�L�tI��a!X�����ҹ�
 ���	�ƍ��6���f���a(�����55�H��x�]�?E
�䈀i�����S(�:�d����(����=����|0�ᱫˁ;�d�x���2�=gR���p�X柆?|g����@��&� Q[N&���]b���:�<�u�%.�
�A�C�����þ�
A�<ɚ���?��DT*b��i
W�O
L�;Y,�
�^������˯��{�#��m�1�ܺqC��+bA�J
�]=�ި�V�K�L�!�	l�)�QU�Xr���ẋ��5� %$,���G��=��".�)�Z��v�~�Q^LR�e�}p��j�L@
�I�����1%>�=�גǿ�D�'��fb���
�����DBۻ�4&D��P��$T������
�1Ií�n�&�U�C搸��� ۻ
����8R�}��E�p�$@Z��hR0�
t�C�gp� ��3YͰ�dZ� m�6K7����Zh��Σ�ہ;�%�g�L�]bM���P�X�?y�+pIW���Am
-&U'��)���M�<�VxAw���~��
�8�R����u�L���X��
��^�SXM�$wy�`R��x�C���@�
�u�?
1�#�Y���G�H+�.��K
R����h�ޢ�6R�� ^��
����	�؞x="(��JŹ&u����KY�ޥ��B��\e���	�l
M32���H�;wa2q���!��?��,��h+�+��e�s$RM�����z�Jꎏ�,�ٷkfR���b�dX
-�
�m���
r$q�߈�"
Lm�GxJ�������q���a`���O2]�*�`���$m��=p��o6䢟�O�zEf74�&�>���

]bu��W9o�
e�q�Y����Ŗ�- `:f�����:��Eց�E����t��Q��H<�"�Q��v�YQ��L�.�Ej��!�s,�*�y�V&I,�I�$���
��`������5�v�*��ZZ���%�RJ
L�"�ܵ���9顢��P.ȁ)�-��e�]eu��4��WBI�`bI�THËA-�JWYm��Z~�j��/�{f���/���t#�qy���}ͮ�H�#�<�N/]J^Z/e�5���$&��O�c}3	^�&Z 
�Fz"?f�3"����?�C��7��\D2W�ʅ�-���#z$����gFI���Rs���1Sn��gh�\K�݈��7��D�����HI�t��h�˴fPS��Um�?�
^���yZ3�*�(�qY�Ib��`za|<�0�_B-��:���m"6������m� [...]
�ml$\ȼ�3)M�J^Ky
q
��$��
ȝ�@L
ȃ�<�xB��歔��T��˺_o�b��b�w��t3=�f��/����A(
�h�k��g��Pe��d	XD�����J�U���������;iX�	�ō���Ԍ�7�c��n�'��}1�fםm�$�"��_L�E�dy��y�>��>U�K��ɮ\�v�i������~M���n�:��
}���VI�?���^�I
����A�ZWx�6� S`��~�L!����7���5�7�����)�O�
-3����������dŸ�h	�i
K�yȜ�
ࡋ��?�Hه����7���\��Y�1ӣ%~.�R1�@�M ����P
tO�I[)�<��W�\���V���
$3
95q����~x�N
�(
�Έ4�_�ȿ��oނ�UTg�+���hY����Օ�r�I]zB�"!qs�7�x#�Nx#�Jd7���v+i����	bZ�������)ì��[���-��s6��Q/��H�����e��[i�I�]�+k]����%ঈ�Nb��א�T�ΟEj;v8,q>�,�M�L���
r���p���5q[W!r1�)��
e
?�1�]G��>X���M��E�4�0��K)�Q��R��G
�1�a��@�LJ��()9)./e �]�ɕ��b����d᪛������N�� �ڏ�O�Z~������V��(��J��F*��IR܋'u���^���%s#xW�nć#ވ���_�:��4/'���hhW�i�a�Y>?�]�{�L�
O�G~T�L�E�N���-o�'M�K~>s-/��v
:QM.o^�l��g��;�����2j(wߵ�dr'�u sv��-lw�]��w�@
�1������O�lD۶��[Һ
���ʣ�i�o�Cߓ<�
-dg����`%�}�#Z�R#��^Z���n u1�2c5_X(4Fv"=�e��4����5!��2{%6XB��NKFrtE��[�?��qRf�Y�,/�7bc7"w��1�xI����
��rȚAnzY���2ニ���G{�7qzG_x�fKi�};i'u�s��%vCL��SS7:.�<w��{�t�璚�{W�
��ɜ4��v�q�+Ž�
�[N�>�����l�����DI��>�<�\J�����
bW�H%��c
������nIϷiyi�x�Nzð�t	^h3��n
-���kB�d������Xs?
D�S��+�ً���)
-�I�b����2�mGX��U�4�
}�Q\	#xkCk�XHF�fZ(��
ޚɮ<ɗ~�<�Wqx�w�����L�R�
��v�D��
|
-zV�r�� IۚI�&t�
:LN;�,���
-DZk��5��y&�'d΃��e0�n!�n7a'��
�	g{�ѿ�
ڀ[T� ��:��0�L -O����$�Șy�~6%[��F�u)ud2�K
v���/���.c������M"'B
���f 
���?�_KP1U��6�@V�4زF]񕴵���*�ᤁ��������ܮB6O��ڍHߍ{��]:QL~ѐ
ވ�j&�����7q�:�4<;>Y&�#�ޡ+���Ռ'|ߞ�q�K��lؼ�i��Zt�:tL�/kGb��x��ܟ �dž����#�)�-+�-n�%�ԃ7�G-����v��e,�2�?�o�#
�Ƽy�:xBy�.����@���6b
'	dsS}-ˣ�7fe�����RL־��ɣ�W� �?ڶ�N�1@(#�^�R��Ϗa� ڌ�B���B�Z�Ӵ� W|$ɪm��?��q���wR����	���nĚ��[(�b:j&3�b�1eK�]3x���|
'ɣ4�6�ǺM����dW7Jj6�9p������%��Žbڎ�쳙b��j*�)��Dj�g���Ps7��m�8�W�-'M)�:t��C�
����6�F
t���Y��� ���ˤh��G塪���0����?Y
����2�E�
-/��슊IVl}2��/�
}��
��� Y�,`���y�G�IE�"�@ۈu�F�J�N
lY#	]�kII�}jU�FB,�.'�ln�F�F�N
�,/�y�w�$���fܮ��i�<H�d����:����8��d$���l7�9qRv�^�<����H�w
:�":�stb��;d��]׸�H���w�>Pω�f:��$�;��	||����묣5R�E*��	K�������] ����P
�I
R�Ϥ�%�b�iE��.y2��d�S�0�� z�@j���	��T�
-2b�,"+��FH�-6�}$)^է�&Up����bK�ۙ��n��ͩ��qb�vx#��=k��hK?Iw�h�O�w��Qwu��fٌ��p�$�T���ja���슙8ͻxΌ�;
�^�fϬ
-�e�x
�
'�T��װ�0����1{r����[��
-�(�ͤ�ԥ�<�c�@\
�?yuA:�w*���2lI�q��ڇ2c�����0�S@,0 cAAQ�Д;��G�2�
-m&\Ѧ�F�J�N�RC��#i��U�Jj=��pR�\��9ob���@d5!�n��r��
�0͞q){�]�
>�i;�<�4J���%
��Q��ȍ/-�������fg
����ԝT��Vg��W��:��>t��k� �"�r����5.͹r��|�Rg��
3x �ɹ2褿��EHd$S��h&
K�B������8�˧���R*�y[@�@�g2�K��XL�2�}�
k6�
u�n€X`�Z�0#��Ȭ�#?} T,#�*��d�Ҥ�Pj����֩��4�j�B�5B��F8']�Nj��sՋ)Ve��e>I
e<����b���UR�Ϗ�f��S����= q'5u�S��~�^��|����h��Z�Le�~�Y�~
pb�&�~��~
������K9�@�-T�r�@�<��{�!+
��b�.�2�b��MB
�d�2p�)����.���
-T��,&K����
-%���
��y�Uƺ�ݍ��/7�P�Ӝ��Ҟ�i�5���׌b�:Js�������#u=p�
�������!^��$1!m1����nD�#�S3p���n���r߳�l35[�H�_[�酪BK��%n-b41��z�Ί?տ��/
-m�[߆;�@��o.�c�@��@�]u]��}���*�mް�L��ď&�K夈I�3&�v����e"��
-͐ŝ&�^�Hu%���fjZ�����rD�KD�I��1�y���i�5#Β�d�
���3���^�M�b����K3��As��O[�g皚�mu)�Nx
��.b�ܝ�4��5��f��|_��x���o�Id7�'�i���i�4(�S�,}^r�?�L�˚)�)�r
-�1c��%��G���W�V�++UZi�HW��N�I��ܫd�7"�zNI�<�v�4��ʚ�[�d
e:e�)��qBj�C
�Soƾ{��'�:�4*:��+�Xl2j(��4��[�i%�C]2��襳�w���y�+��u7�y�
H=��@N����p1�f�|%�a�1F�e
Z<J���\e��d�}�@ВN��]�jw<-O���_n�m�P��v���æ@�-P���ɮ�۹��HI�9��$�3��P�g;"�!4D�� ;B�$�j�)��ܬ�DQ��\|�a|?�\�������+p5ӿKѡ���j���$Pi�Q���؅nJ�-Tx���7͜�r���56�!
 �)�&,��
i�TM0G؄����D�M��`�t��a�rd�B��
-p��Jj
-�'�3 at H�
�I���L?g�4�Df��O�
��?M�B��T�{��H���Uqۭ�c�}��3�}!�F��G�I�sަs��[���E�m_o2�\z"�Ѵ����$S��L��@5�y�?`a
��1WP4U���&�`
�>
-3
7҂JZ���^�fG�3�UIګ�s�

��1FɓdQ�������{��H%�-��F���������M�=g�}��y}k�f"�-Uz��8�2�ǹ�����i�8�uÚ \��b5E�<abs=͔9ξGؒ���e�<UV��b�B�	�u�
k�6�YDx%	�&���!>��Q�Z�H���p| =^�4q��Ȕ�����AG�
b������ͳĝ
��ܡrZ��ȓ�ۡ
9�3��
���}WW��Jt	����s�͔�d�+�VWX�,TH	.H����M��!� �u�37*�Yɓ�Y�?��٧�;��\��*;���`߿�����J�0yP�3W��Ü�?^:�q����c�1� ]
/ϗ,��!�%֐�ܥ�]��X��	-��k�J������\,N{T��(�$�>@~$��^
�[��S�l���]����
m'�k�8�����ԡj��q��� n
�
-�–�Ԑݐ����#p�f"� s�͌9�<fAQ������PG��B!��$���f�ݎ0��,�b1M����A�I���
F�H�J:�d�$�m�Б�.3\�=���
��Lvyk��u��!?:bL2?W\q�Q�a��
d�� 4�����D�f��Dc�4åѵ_,��;��	��`�껥4�c�

3�sIf���
)��>
���F~���\;���l�|g�8���p���YM �h��	�b?�=m3C�I&҅�i,���a�L �PF�����-<�d�6�K�펨�l��0�1�*�J9I&#��8����Zv��)�]��>�ݟ�����[/���6�~t5DYډ�2�� a�H$�)]��o�%�@Q�P#m]I�_�w��'�u���T�|�Ó�N�zv[F�\��H�|6��lg�/5���k4����������60D[��L�/,����R��3h#�G��2����1�j�#r��Z��>ʨ��EI���ӄ1ﻒ�j�Y��-�{�1�^���覽����
!��"Ӆ���	�E�iD�p��ʃG��H;ҵ�U�vu�
1I�%��
�k�qb��z��6������m������Ԛ%[{�6���� �
WS�PN�1@`@���+�Ef��H{l�mv¢u���Q)
32I�ħ��lMǕ�l��w����c���(Q{/�Vl}��X,���,#pO��QD
4ұ��#���ޭf�'Y�_.��f�L���T�
���<�����{
��~�W�I�&�����5=���:l#Q���֧�iDY��
O�N�[-��^�Rs/�

e��"�݀�D�P���
~�`kЕ�f.�������v��,vDt0K���fo�����XM08�e%���d�F#�ЂcFy�j|�^9:k�YJ���

��
󅺉2&�_���fڀ�V�
+ɲ�r���E5C���O`��3H�ڄ/JX1g�m��Z����GY�dI|O
^t�;J|"㇞A�
�i��Hz���{[q�*�ru|#�Y��
j���%�%�S�4�.�[�T�$�Ҽp�Ǵ 
��%�?��CO!�123�DƳZ��:���^�
j���2��,��AV_�Kr�W�&�
j��d��X����D�m�
�߹� ��O�
endstream
endobj
281 0 obj
[/ICCBased 295 0 R]
endobj
295 0 obj
<</Filter/FlateDecode/Length 389757/N 4>>stream
-H���uT�K�tK���KJI,��t(݋�4�K���%ҹ�H�4J#�Ғ�(H
-w���q�y�y��~�3��̙g�<3�� �Y9El
- @� ]��!O��-@� � �\����+BVKK
��:�
OX�~�����WCa���iHKL ���0�q�Y���	`�5 �c����k��
- X�] �x=�
��
�8����	�X ��Ŀ׽�>�.�f���#aP�����
�n�		�D^{y8�����	
�d�p
H��	st��:Y����׬c xc
 I�V�?S��!�:��_����
�9[�YbQ�P�~�+rA
-S�h�����Hh���t^��

�'0�߅�™kY�X��Y9�Yq�q�p��l�'���W����z�E����E$�%
D>,��^|t*K)�%/�`���\�ҫ����:���&D
�
���[�7��dplDa5�|�mb���4�,�y�y��{�e��5�
������������3��
�⚅,t+w��h�l���
��
��A

��
�	�
m
k
-��xYU��
�H�&%��Ȥ
-�q��O'M�z�3�K�T�@v[NUnn^\�o�]�a�b�Tr��t�l��mE]e~U�+�j�א�Z�:�z��a�q�i�����5����};�C�S��������[�\_�ۆw�����C�a��Q�1������;>�L$Lz}4��:%8M7�l̎��Χ/�}�XT^�]�X>\�Ym[���n�!�ycsk��kƶ�ʷ;��v{���p����I�s���0���X������ݯ�3�s�󝋒�&�$��W�WW�*��)���!�$�$�%�!e$c��HNOAKIMEq��������
�����ƕ;KL�w�@��Y�X;ؚ��8^�+�Dsp����f���K�O��TC�P�p�J%���D=��+�+���O%$*������������8�I�Z�\�Z�^�U�K�_wL�������"d�x�����]�}����� �����>�9�=�;��s���_G�8/�̹N!G�z�[<�=��2�|B}����P�Q�z�l�H0Wc(E�e�n�|�P [...]
��kJХ�e����J�*�+��篍k�j5���U���[�ZU�
��h��0�|�e�m������6�]B�@�`�P�p�H�����������?QM1Msψ�*�iϛ.��Z
[JY�Z)X-]��R�޸Ѻپ���w�������?��@��?��5� ǖ'v�N��g��
��
-��W������3�g����L�C#u!��M�M�M�E�vAms˔F�V�N���A���̝GL�w�A�̬,��l�l�ؿs�ݛ�
���n��ͽ����+���!B�²"��<b��4$����݇kR�ғ��e�d���k*�J��Y*/TS
'<�S�V�҈ԌЊЎԉЍЋЏ0�4�2����?M4I~�f�����s-�,󡅰"+�u�M�m�]�}�C�c�S�Q�\�R�Z��s�v����
������G��i��H����3G�F�FaG�D�Ƭ��č��&�$V''g�$�F���LG��˰�4͂d����j�i�kh��C�f%V�Ne��Aq�YU�ڪG^/�
�Ճ���
��[�Z{�Vڱ:�;�`��=�c}��n�K
�
���Fv�(ރ��> 'R&k?���3�?�4+:�6o���
���T�\�ұڿ6���������V����ʝ�o���F?L����T;�:�>�::>�:�;��eq�vx^sa���wݥ��ʕ��'�_� E�F�O\D�K�LtAnF�F)F�|���
�ԭ6�\�`�@z?�m+F�;�L�wiA h�y���͖������)���M���g�w�~_
�@���ZH_XA,�"F)�%�/�*9���a�Z:�Q���,\�B^_AU񡒀2�
-�*����'[j
��o5[����uR1u��h`f�m$1�xJgBdr�l�t�l�y�y�E�e$�fe�g-g#`�dGbwj��0���TOC9;��� �ܨ��ݿx�z6z�x��8��I����P��=A���!.��a�Axۑ ��ϊ����}�b�G�-����ޒē����x�`�G�/����Ԝ��������q�_�O�?�0�"��������۬խЮ˯ǰı²����µŶȷ͸ӹۺ������ �0�@�R�f�zƏǦȾ�����
�*�G�cЀџҿ����'�L�sٛ������F�s�����M����6����+����1����M����Z�����:�{����� � � ��T�?�~ò��~i��~L}��~cbA�~�Da�d���
��~t�y�~W����~O��>~\���/~���|�~���`���C ��x
������}%��H}
�1�X}%�z��}K�
��}��
{N}׋<_�~7��A�~��-
ψ��|���|��Dz|+��E|[���s|���z}
��^�}w�O@�}��-�~ċ��	{G�u��{D�z�{]�Ĭ�{��f�{�Zx�|[��]�|ϕM?�}R��<}Ǝ���z��]�Yz��Hħz����|z�=��{L�Nw�{���\�|=��>�|��v|ېI�8z/�r�
z�;�bz'�s�Mzd�6��zɬqv�{D�[�{��0>
|;�
|���
y�����y��a�Iy��?y�a��zY��vzݮ�[{^��=c{Ф�I{R��*y�߄��yf���Uy`��Vy���y���uKz��Zi{
��<�{z�%�zȎ���~+�~� }��͇}W���0}3���}HtЄ�}�Zk��}�=���~���z��ɇ��� ���}�����!�~����Єd�*s}��Y���<9������w����p���S�w�u�����������u�VrU���W��؈|;,�뇔��{���R�s��Ѳ��������;����:�8����q)�P�CV���
:4�.��8�����Ȅ���2������񡂡?�U�����p
����V�u��9S���
�����c�
�b�փ
����R�����.�ՁN��n��	��U��38���8���A�/����ͬ�������δz��6�߆�ө�n1����T\�e��7݀t�XT�� [...]
-�\��l�G�N��ػ�ځ��N�ā�a�5�t��N��zl�ߴ�S<��H6���*���<�a|��k�z|C�V��|�Ǎ|����|Ik���|�Ru��}26��'~2����F�-����B���*���o������������j�����Q^���@5z�I�`����ٳ� �$ĝ�"����c�ߘ���&�U����ij���|PJ�ˇv4v�y���V���G����.�2�{�������
�����萾hS�掼O[���3��Œ
�(����J��ьx�&�$�Ԟs�҉h�
-~�2��gK�>�-N}�o��2ن
��
N�%��է�������� ���>�w���֣A}⇤�\fX����M��ݘ�2,����
��K��Ԑ�3�����g���°����[��}
-�0�e��6��M
�_��1��
�?

���1ӣ���Ǿ���I��^����I|B�̯d��ܪwL���e1$���:
������r�W������]�
��1���S{��z�|di����L
���g0��\��
U��������{[���G{!����{	�ޔ`{&y�E{xbi�e{�Jr��|�/c�5}~
-~���:����f�#���������M�Kx+�C��a|�u��I~����.y�W��	ώ���әߎ��
�%�¡唘����[��w!�^�T`����^H��*��-�����	5�G��Ȩ�瘎��=�Π����4���r��v����_�ҍRG��f��,ދ̋������|�,���ƕ����{�
�����Ҙ�t�ٕ�^��1��F�ő�,;�'��<�!���_���������Y�l�~�J���J��t�S�#]����'FA�4��+����;ۊL�P�f�&��ɔ��ޝ������ը�s@�夏]�0�E�����+:���ևSS	𧠨��jVPp,<XQ)�XVl�(Js�&�J!����K{�@B��E�.
�e���WqQ䆓���~3��7���F�HI^�\�������ӡ���+j&Y���b�dML��
�{#�����)F���A�;q��T0��_�
^��9Iݤ�xֺ�ƢYFh�9Յ�hX;J���l�����n+j�ġ�(�m,ּJ�����(Va�V/���aؑ�@�Q~.�8_]���7]�������
��g�|�F�)
-�/��MH�|����P��8�%�oFx��C��<��R�l�
A�^����Q�l�
�z�rJAU�U����d*�
���N�$i܏�
#�v
b7F�*4ނ���
-
���pv�i�x֖�����I��o�����J۱�#�
-��W��h�ԉ�l�"�kx
wVjG�Dz���*��ߜx�W���:Ʃd��P���$�����j�4W�M��[��,]�ʫ$���W��$I�&��N���}�7¨
s������1@�9�TɎ.�E��zN�Df��*uwr ����	�
*�#����,�h؅��"�8=���N�
�%�=(�p���Qu�9s�Lӓ(�&��w�ھ�?��ER
�AHi.R�~	Ԅ�6�����:�*tД3*���۱�x#�m?r~3��2�+�w����p���6�yX
a�TO�#��
-U�¼<�_)�
I�(��}��W2S�X U��w����
M��f�_T�)����?k��YYF��K8��u;J$��þ*1T� >,��#h�%T�,�Qۥ{[��s�:��9󅼓�&^!Փ�a��@�!��"
y �
-��.��Jl6m�Hj�u�,b�U6�+s��
�hܸd�-ʥ�}�wi� �-s�un=0�Ľ�i-_�*)U��_ˈ�
���b$
��na+;ϧT�
;p�pA7����C�4��.*�Iߥ�a�8��M��m�.���ACi���7�\j|fi������ԫ)��]ޭ�j����ʄ���U�]�3(í�
�wh�J��c�h-�4x7���h׿*
P
0�H됎L����랇ڡu��Â������,�{�Bz}��8�v�g�g
�Ҳ�d[�!XTZ�Z.��vl�A���g��
-{;S�
m�`v��ؿ`~�?g�a.�
-3�Ì�{����L�^�������W�����Y�e�4��]�L�<pq޴���������k���!��G�
�]�
l v���:DeH��Xq��E��K4kHoS|�X�ֽO�7����o���*�*�+ ����2���h�`���?���k6ݤg���,�M{ST3��`�b5��XE�#*�і}�
z�#C�//��
���7��}��V;�9�T��
)?�ވ���2[�ُ�]�n�$�~�
���f�Ќ,�d���p,��B�AdrH��]`u��P��V�k�aEV�vYN��U5/y�fD.�ݡ\ �1����Q�a#K��E�:�|��N[k�=�&[],����1$��ξ�B���0Y�(�ߊq
$���]�!{Ik5�U�3�j�=Or���)�<V��
A
8H��:YjD!��L_��|O����l�xE{EY[��9��#Ev�x���2�E��as=�[R���Q��i��*��i����66�`�����ώ,��+�#�,i��1����A2��� @������ƪ�W���m���H�XJ�NP�+�)�̧�+��=l��$�zU�kb��]�i��[:��<�旰��A��r)<�� ���+e.��
-�%���ӂ�B�s�W�����ď[��~�}F.+}W����t�=�� 
-��K�e&��,�^��-��v�a�(0����

�t�tz�S���w�0D��6j��tl��.\�lVդ����)��-
g�	[ѭ�'��x�|�|D�D�ߵ�����v��wi���8�ư=�݋�bY��
-���TC7j�KI���X�7 о� s�{��W|}��&饷MR����Q��rs�%5
ԯ1�G��
�*=��V�DM� �鶢l���`JY����Ke���\
+��kl�=��ּ sr͌�
-����_L� �\�E܋ʮܤH)�B���"�nĕ)J�ۙ��3g��Y�i&M{&MʹI��B+!%��,O���=Y>7o����k����!w����I�~� Ir�a^
=�C�#Z��h��`W�u}p����)��"�z�7ff&�3����$��
�F�����J8Ҷ5���m�
-
u��R�_,^V��S&�aR�~Pf��LL_Dw��*��`\�-�9]q�����
�
�
�����T�I�6)�>u6	D�`e͢/���xq�Y%�9��ʜ�;�åO
��
d\˾�P�&eR�z��;�]����.�R�<o��Ρ�]�P{?�:�
r̨\���ʻb	�Ҥ�3|����m �s�؟���W�9����oZt]Rn��
Å\�c�W�#+�n�I&�g����y��Ajs�N�06�HiD����'@����J+
��a5V~�cR�I��̫�vwtU��c[3+?F|l(��i��U�����^+O�?R��s����� 1�Hqil��$Wþh����=���(�RE
-��1�B��vџ��n��F/��
Bs�G�����M�Y����9>�ܖ3��ȗqI��
ڣ��5����V��_�1ȣ�β��i��JiX�0�WV���H[8g�� _�/���
-n3�
`�	���38A.|�f|ј0I��6�b�v�%�&� ;Y��㿜�҄# �d��D.)��.p�'��3�J�12K[D�uɥ$s8�I<�R�i�m�J��8�}��f�� ���DJ�ƀ຃ws�!�ʫ���r��RX��
-\y^�*�̏Ld'�雲9?)

"�q��^��5�/<4��i
-��Q<����
-��;/��Ա�JB"���7��t͚��,m��Xdھ^�;촞��&s�`�Y�"������Y
�����{>Ɗ�.���z^48��e!��R�6}��vc����Mi�oz���o�0�'�=�~���i,3�:?-���?oS,���9���w������#��R�Oa����������
;�	?�
�����p��B����
-�֞I����O�
ݟ�e#}ԯ�N$�\
�l?�
]�,��
��y,��>&Р����q]�yh�0Aq��K)ĝB�F��ҍcH:��-h-�ǟc���f)�K9T��127]����q��EjL���<>h��;�|�U
-��������d�p�G
-ƫ�`�&!���8a
��l���`83>�.��q��ɂ�n������A�9
-;�
���`��H��B�y�g���
KB���*k�㰗2fF�=#��OM�
� �eT?
-m��Tm��
�_����OBۊV ��<ɆF('�n3u�G~�Ȯ#�7Њ�9��[��١`N�s�.�P..콤
'Knp��F�
�\�?
�B>���-����`����N��W�O�OW�B���l�f��x��W�^�<x==���Z/~�4/�.*g™�Pʲ�<*V-}&���ٟ�w�z��Wq=g?:��;[���-�(�Z6*<�Ȉ��`p?���2���eQ�yў>�b���-_�

x&*/��(�j����_�=߆󑊢�zF���`�Ld��E:���SN��ʔ@S� 0���3�|T�O�Ko�k��t��o}bF���z$4���-���,�.m��'j*J���|)J
�6�B������P
^�3ewܫpX���.��*��,0��7xP�ڳ�:2�X�
OT�21|"7��=<J}|�wl\��}vGic��Q����S�]�<�C�jȹ*	@8�-f�������݂={ñ(
����]�x�Ѩ�n���?�ϑ]�q�O��ˏ�ExyU���c�0��t�M�]��u3���
j �o)(Co��~2�s�Ѓl�����x��֙
��
�{��L�7z<��"�!s���[��H��a����*�{���1��l��1��,V��&I*[�v�$�#1/�� 5�Z���p(3��]�8��i2|(�2�
| z�D ��5 N�s֬����viV�`D�0Û���]���R)L�!'n��"� <v~�x��)�~�if��
-wnK�ܑQV�B�"�����Խp�� *�+ت�ED���*� �����(���o	B�'{p���wH؆ʴ*JѪmA-n��WjGE���ޯ�y~�~?r�I^
WO
��@�����l)��ƶ�W��giX��
�"�C�#�k��nA���
�˻�r���)b�!�U�ڲI���b=��>�0�ߴ���y}ĸB)H�[�����Fs�
��V�+���̯+Y(I���(����x&��9JAI���'tXm�y�G�=�X[8�TK�)�2��
<�
TSR�v�x��lȓGO�|�g�/�{�>���
4��/�g�R��F�ȶ��&�A�5���2�
uЯ*B<�i�� �0�g�r+O��A��,0���-�b�u�g[�\~�-����4:I>幃A��uF�Ǟѧ��u�D���)B�,�
*�?n�`
	'qQIz���K֗�4�{��
B_g�6�8�#�ʉ2.A�$69�!�̒�ub1&D�3Q�x��"�
>ɏn��νx�VG�&��Tۨ����Ó)�sx�d-5��Kx [...]
��P��mBU#g���B�g˷�)��-*�E
-ar���>�>Ƶrn�[ɭ�F �-I���ByѸP�=��ĶK�UC
w��G
�D��}�����"��vN��.p�]�]Q��8u�Y��{�#q��C��v}sa���x_o��y�iN�r�����(�
d8a�w�2C�Q�}V�8�UWO\�g����
��\�����yk�@��d���c��Z�t���9$��u
-p��-���1
���z(�=�f)
-�v��
�ě9����2�
 w	u��煼��ת��#����{P6�+D��q3HIi����%��B�C��
b�!���kc5�&U	):X�$܎���[��b�2�
*@�PkcӘ�d�oT�B_L1Uwi"�)��=�2#���pI9,�R�O>�T@>�;�bn�����D
��PuC����
fk���^�^��\��G~�
 ��o�L�Rc�Hqܮ=-8^5Oń�y*9��:-\�g8:T<��?*����C;��[���y�X���+����I�;��lRL߭�$D��vY�TQ6�Dy��Vm��fy%/sIs��mXP1�Lռȭ����vow)�QB�b����_ L�V�wu�p����eė���O*��|�+�]�(uH�װ4�W�U��.�{ �4�\�m.Q��w
�����R~MAi���Rz+%�B����K��z�?'�{ �� ��
k�҉
�a��a�{���H]��sX}d����a~�3��_�au���Qz�	
�������VM\ĵv5I0�L�M�)�DŽ�p���1��:5�
��,�&����4��
%���!$
}o���c��ޤ�A�]R^x���T◬M&/B�:D�wA��2�4�����?�c�d&g]5�b���4���a?������i�ǐ��  ��Ĉ��.OA
6�vfv�
s�d��(5yT��H���/P��=�(�a��;zUs�
�b�W��x�Da�)E�ʼ�	$�sg�PJ�r�e�Y�3 �w��`�c��F�o�0|U[j5k��.�5�J��&�����e�T��o�r	��È´��}I	l�p�jC���8c���5�J=g�%U��o�|L5��8E"
-ِ��
�[A
k]�����J��͆�VB�M�"{�N�r�����Q���ih Ц@�Y?��6��^߫ZWٯ�]ذ���c؋h�KSLj:>�O
ɲ���.���ݰ��Q�{5mm<ٷ?^�v"��}�ъw��9��O��&�v��X�7�km[	�,70nΒ7|��e��P��\I;<��u�^`u�!��$P����B
-ET9��ٲF��W��c����m$��="G
-}K�e��6�~֔G_���M�DԿ�s`� g�]
�v�p-9�\N�d{:�:�gv�H�_3fC;}�Ɠ
 P�� �N���p�H�
��d�U9u�;���9$8w��
���3�r�#�A�F�iD1�n�����
-}��t�e�  ���D��H�!5$�
�,I�Q:�ȖR���1�3��<�7��
�j�1�[�ЊT��m���WwzU�x��|����վ+ք{������W��>��p���:ʤ�JRqY���^���`ǯ�<�~�j��!m�r.�B�+��'���OyY+��fN*żt
�W�$��W\�2��� �M_�c[�g������jj�%WuU{{�,_��p�W��n%}P�I^�W�|nˆ;c!�p���u�cʨ�N!k#���)k��sd��5n�Ž�6Q{H10���U�
-�
�
�-�"{⠇TZG �R�,��ɇjࣶZw8j	ICF���:�b
[	
�\+�?�
-���oA
n'a
-
-��O�j0���`�%��|�^�/si�_�Xǣ�Lqi�w]�I�έ�D"J���!y�!�Զ�n��0�R�	z�WC��c�c�h���ūK�_R
[��*)!
OSo��u���Oշ�܌W���ze�W�C���a�����ϝ�L���/�QB�o�_��k�/cg���&MV?��֫5z�� !g����"?w��P͚�I�Q"����P�AdtE)q4��j���G�s���n�{"�
���}e��UM�rk��zvi89C}���
X�LB1W�".ꕝ^M
�����t?WK�L�w�DP]t�U
�揊1r�J���ոK��V����GM;ph�շm� �v>��-wg����FN�
��cI�P�#q��W�����I
��;�N�ٶ��A�)���H~�7i� t�hl�~��~dz�Y�
C����x�2>*c&�m�b����{9f�1X*�L��	�#>�
��
-
V@���g蒼]7n249=M����K%
�;��,����F�\j�
�1��kl�Z�i���؊�����ΐ�.|Q��9��а�$_.!
��;�̿�l���E�,����ɥDi�������}D��
3^�a
`Y5�
g{J=m��ɳ���y�3���C�M'�jM�-i�Ц�m��
�n5?	�SJ�E+U~ �;����q.t�Xd���~���~p*Q�eS��%�.��Ћ�"ư��Bs���Z�6-�����6[\d;�^z4�`;64藸����ͱw���
;����|�+&�A�f�LU�3���X�T��m���)l�F�'l
�V��ɺ�gcG�Ob�bɜ9�;v
\�C��L,�
>B?�KGC��e"�z
-@��E�����H���</�s�=/�ᑍY���{��P��w\L�1A
�|U{�_� ���"҉w�+Gm�
�$�#�n��o���x��N����+���}M�9�MbΥ�_ at Tܲ�'1 �,�q��$;��!�헁h1kb���
�����Bo
-�\��w�J����
���uY/|ϕd<w��Τc�~ώ�����
x�¡�#d��g3�����~����g�‡� xT2��ȵ��6s3�i75��ƻ�Z�E\1�\�ɺ�W�A' ײ
�� M	}?;ʂ�8|R�0S�#❣� ��CۿU��b0���L7ֽ`���hcEk�T\�m
�+	6�&�=����B�9)� �곌����
\�@�^
jk��a�ƚ��Ph�<��=T��6�K^MK�͋=�݊�$�Q����-�U�&�>ILp<�5������'��҉�����$>��8#�g�L�2�m�	��
c�����1
��c�
��F�w)�P��+�r�kC
q�p/��u8#�!�*
g��
°�Pa�`v�u��@��o�H�`"Ž��:�z���
_��Q<,D�>'Ӆ��WP��� .����`�x�W��3�|!6��	�
-�5���
El�["�,0�	e���[Oz��0~l�U�O��+����&x��kP��c|u��$k�.�?�{Qp""k������r�6��isV�a���=~�@�W�_�
-.<�7�
-��2�#h?c~�m'r��E�_�xs��6����a��������G�+���K
1��4���L^kUp�^^��_�� m�S^d�Ш���'����>���}��5�����$:τ!
E��[�b�Jx&�n� t�(��m�;Z��s�F5u�q �X�.�Ղ�BqKP��� *�����l���%{�ٓ{�'��f';�,TT,�b���h
�Uq�2Z
���3���;�}�����T9�vw��R�R;G
D�
-
K�*��/@hUv������$�j�!
�@�
�vyבm���,W�|-͢	�^�
�~�D�_��􆭍�"��ĉ����#c�禘�*�X/��Ϝ�e>�|�XH��;�:��)���d9gƖ�4�aB��
��Q4 
�E� �w�,C
-ۯB�U�#�>�SV�$L�-��5g�V	ϯ*�B����#��}�
np�þ�td�����U�$D�b&$^�\^�&Z"/˺+�-}��%�Z�
��:}��9���A��Yu��	��rT�lP0�"���~!	�͚*@5K�?�߫Z�-�P������=
j�>��܈�[��O?)�a5�
-�����?��W���Us����y�5^(ge�${C����m>�	"���G�գ+�$�踿��ϫ&��
Xw������
��8?��g��,'ō�=�"����/x����N����M)���'��������EF��q�rf�
CįQ9ZY�$r!���6m<YZС.�<��V^�z{U�S=
�P
-k�X%3�x��fj��n%^�����
i𴵻���s���3�0���q�h�$��`kܯ�
D& ��!�M����1��W�}훌1r����=2N��Sd�k�b�
�\��ŀ�p���d�W}^�'�S^}�+P�0iC�
�1�R� 0hDz[P�� �&!��v@�B��]P]V< �SܒG�L�O�
NgK]+&
��-A
-�2���#�sL4�j��&�D���i�b&,�A��MS���U�D��9���y�
-v���98�����j�c7MI�~�(�sL#�}�3���(M�^ N�i�E�K�E8�mi�	u�zI�$N�r|}*��+�'�4��w���{�y%��F $��8
��@�N�z��^G.g����-1Vfk�)��G�����]�u�6K"���K���1�p���P��8����r���>�)�4�
��V�9�k�J�$#��
Fь�X��٥�C��p�[��ģ)C���S�;rFP#�I�m�K�G<��h/��U�-,C
��O�
kOK�YY�;�MH-�t��%�^N��ξ�B���7"
-���O�aj��X�_84�V(N��-{D)��F�0�$�!�o�J��d�v/_�
�(�ǀ��U�H8�B �c�1����f�b5u��&�*�ҽ�n�2s���G4
0:�\=Y2�߯	�$bi�8亵M�$ҙ:ut�N�)��Eh��Dh��d�j�21|�*T��V�˰���T�5ȮM7-�^��S���84Te��hRҨj�[�U�G��U���1���K{�Nh6v�g֨�+��G?���`
lݔ$Rq-�.ަ2��S�e�8
pSՖ�k!�X��C�\�z0�0	nlh��j�<~I�����,K���r�L�)�IM����9M
�_���c+"vҜݤ�L���$>ɺ��z���j>>��X�9,�ZL-j��Ib�k��ȉ8�˚?v�t�����x������P�IO}�_ay@
��:����|Ve�6�����ubd/e�3<֭�z�t��e�a��'�c�LaM
-�lz&,f^�_!��?�l����2x2�X�y
���ń�3D���
�)�\ ?�y�e�
~��4��O�+ 9$�
�
-���E�V�D<�O0�Vbj&��mLB�2Z܈�b9��U��;n���6L0	�+��oˇCr�E.~�>T�
Sؓ�7X����?MM�!���Լu�O��t����P
Cbt;���i����ް��a��@gW��#�@��4c�9.D���o�
z2>M�5��i�~�u0�
�q�s
�wQ�9�ǸLt��삟�Mz)>���kɝ���I�;���io�"���U )��]$Y���L
>$����$T����:gUo$���UK���,�C�`sCMAJMÄ��K��C(��g]���ٮ9�s�U�G�0?����L�5���
�QM%��0O�l��5&���`�Ƒ
1,��x�'���{��k+�mY�}����-J�s#\��d���:�i/�N�K�����  \8�H�����stQ#��-�ND�)�.s*�Z���y�m�n�f����\�1l����{��(E�=�VGW��9��s�:��?���w���ǟ�Q�Z�sC��6��A�1���ƃ��6K�@�8��O�UY�^��`���7��������j6�@�9?,y����
t4&�}"�T��-
-�\Y&k���V��x�녣3��9��1ٵqQ�=�b�eMq\���
�����`/nņ|���2��͌Jkz�D�mͫ�IR4�\~5Nl��օ���KɁZ]T�C�3�l�̅��D�3jSS�)�t��Ww$IX�[�w�V��
-WT���U�w^P�eU����h�WE�^ؓ~W�c�h���s
�s��I��g�����`��w��g�s
(�5��� ��mr��
���]
��
�B`7Jf�A�

���aA�3Ɠ��G�����?{�O[
�?�x�j�/����Z�*7�e�x��X�z�
Ά��})��C���?`��K�c�M����Ռ��&)����Y�5����J]q':]$�؞�]Yv
x�(�����ı��H1��e�U����>�_0�b�?*񸨎�b����
¤،���
���D���;W�xm]|N�7U��13*�;��.�=��>���S�Üj
)��CM��>��.��e�I����1���/�Q�v����6T�
kk
+�Ɯn\\�F�F��V#���Xd���
e�&~�WE��7�"�bj��
��u��^I@�j@�bQ�
W��k��8���w��_�D
��^��z����
x�Z�KA
�_`�T}�]
-x�}�Ё�M0S�,r����V+	K��O&�ƈ�`�;�E{irf0 F�]�� w86f�

����fm_8���c3����V�<)�r1��p���� +h��s|p�
� !Q��P'�Ղ
��ʛ����2�r�Ӥe��j4Y�
r���,
�r�?4�
! U��q�]f�(��*&umM+
�;�1�
--���c�8�C���j�L=L��1�TDJ���7���>����)BH�*�c�HY}~�xI,{��7��W����jW�ާ�ʇ��h�g�_���Yov�MKi��N>���
Q��R���ǧ}��A��Q�j^��G
�s��yJG"�?txt,L��>�֍p��_��>�Po$��^<�%}���K�D��S4�
-�*S�<ܖ�y�d;���éIJ��~J�M�n>��ȸcI6��u���ɖژ��䩊i77�_�5W�2'	9�
�t�^}/��8%wd�� �0k��)��ͦ�F9
����k����ih��3�Sh�
�PB�U�Lz��s���'0�$Y�/L3����o�����
l���|��f
�ɪ\AW#�si��S�-�O^�I��+�3��6���xas�� ���@M��
-�A
h��m�4�5 V�-��'
ѵ�1��� S+
��
~*�
�%~k� ��˝��ʉl
�*�
-�lك�=�3���_2~���OgP��s
-�C�����c���d���[�a�ے{<Х��j�A	{! ߲ۓ
���;O'��9+wEH�E�����&�J��V�?f�iӺ j0�5
瀶bhW�Zx�o=��ƺ
0���z���hK5�m���o��v
(Y�Ou���t�;���e=��R�*
��yMV�n�,�$v:��Q�ڳE��.�y�Vl�;��svn��,��Wi.[�����@�����34S��D_!���M���F�>J柣ND ��@$�Y�~�-����C�Mu
(+lBpБ��^��#$�~�2è
/@̣�6 3�n�h�
-�;������۪.��������3F��q3��\َv�Zn�Z"/��vNF����N�J2V{�#ΚV�s����e_쑮�T��a�8C¢�!Η��>F��L��\�
�M{���5��eH~7;F��	�	�A���������B?���V���Y�=۩��Q i9�J.sӿc%��FVb�dեiL��`�a)kD���=W����
���
��� \n����e�>�N�X7Ƒ†2I��Y
f-�to7���/�~��U��as[��`W��*
v3_�`~����:k��� 
�j�R("�E
-*���
-��e)DDI��ss��,�f_n6�"���:hm�h+�]Aqñ��Qq��S�a����9�{~8�|�~b�h6�G���ZĠםN\�h��+��(E3�0�~������k�
T�MG����1�:zk�a'L��G�����2�>����, gt
���X&�@�?e%�
-�����=@��Ih�s��
��)H
��U�OeX^m��7R7�~�,���,�
�\j�����J�Ԍf�ͬ����
�8!*�]�JR:��W�R�]�M�ɚ�
�P��Z��;��J�N�.8ɦ������,�[�r*�Α�]M��M"wa�X)Lbjd�`�>:�?����|:?u��>^��G���$��fa��.�
-
ʥ_�S��%�ED�8�
�J��=�ĕK���{����
�6r
z�G��G�� ���
��U�i�<����K�g
��"���^ �q�
-����I6����vP����W�y^,��u�c/ 5��@�:ǹ+
[��N��+�l�i�{��P�#^�
�y����v�,ñ������-��N���ѳH�⺣<֡g�x���V�<
/���
nb�
��6���󴳜�Ρ
 �+nhB˾�P��oT(�W��#�#ĉTw�ZU
}
� w-��v��T����-9O᭺HI�z)����� �z�9��R'�d�I5��a��Z��GS˟�ag��W=��.�P1ٜ y?����2��
��X�)r�4VaG������X����Be�`9�Q1��͚@8�5��
���������$���W?�D�}��z��2�*�
-���
��p�t�
+����;Br\ܕ�'>
���-��v�
�C�Neʔ�����L-ʌ�q��K�H���r
�7�I�
d<�����B
�gNelB^փRγF2��A�qCR�&�t���7߄��{"
D9����u)��C��w���1��t�}?"���'�[�7o�̩�~�1�{�>R�u*�
��ʖd�C��l���u�tqf�2[�l�~{S4�>�J$����.nQ�nl�P�#� x��])By`r+��w����LH?����VD:�|��iU�G��~ժ�+��&+R��b� gP��>��}�����W�Թ�k�Qǖ]WSk
q�w���Z
-�D�Q���d����V���d�24����K�G�M�v���U
35��K�J~�4 & j��w�J�����*��y�;��X�߉˔��O���@��5�hw)�񘴕�o�-9E:��_�
�̂�o����&�6#�V��(ѽS�-te$
�פp}�4�%�4m�rn�z����he4�KX*��KÃ����2�9�ʩ�~���'Ǥ�l|O5ÍB�
-�;�^��j�㛑Q�`�exH��;�J�\*�`l���˴K�h��k
-&����t���F|(��8Vǡ�ܷ�
R���:ϳ��o�G*UjSKk��nR�
��gl�
��ޅ-�
6���&��Nŗ������7O
�4��rGm��O[du_T��vY�{�
̏Iy�\�aR�Ky��&�P�7ݪJ)�l���"�W�5�{K�� ���S_����j 0WSW;�w�ix��F1�^l�О伴^�'�
1���b�%�OA�����X�hq)L�7��j�}=�9PX��=��n��`��ɗKX#Cù�A
*7{� �j��WܴT�By�����ufכ���d=�A��f��]����F���=�_u*`�q������+�_i݋\�^`BaE�|�S&����%
Z�
�a�8����+Q��g�Q�[�IK��-�j��IKr2T�cju�=A
�ʧ�Q�"7��{ٮ���ם*�X|,Y����
z
����ѽ�����}�ƈf:�jCo[>�]��x^���h����lhNr�ϳEDk��c�C���Ǫ
ת9��c	���H
�t<)��}�z��!�hE~DBӳ�2�S͆��i{;�o��u��I��p�??砃4�6ٺ��^"������1�R������<�-��65s��j�p�C�����Sjqi6dzھİ�紈��
4�1�.��$�5E�
G�9���:�
�=��o���b��쾄
v#��[��x�ﯦ �AF�+T�����
���(C at RQF��7�7�2��I$��^a$�Eq��>
�.�AE��b����
i����O0�����]Т�K5ΫPÛ�G���
���
����Z�d��J���*�$d����
^�}E�*֤�>?��������Ƅ��������$d��O���	�_t�l�%��$^7��[�K��S��ECq�z�"$
]�*���B]��}��W�
zT[Rk�"�����n�]�E��U�Y
v��FU�W\�B��6�-RB�^M��e�2B�4�<ZR�V��jV�y�~��O��
-W>��/w�ͺ�h�4E��k�5˖�<1�U���[�t���D��>�Q!�.kR��涧�7�u� J��c�>�c��
-l���/��i^��3;i�����ڐ�
0��s������Z�n�S�
-���q�W7�N��p:�([���5�6�8���V�
i�AFޜ�~h�9�P�ldüj�2�dO
-�+����6��1�--��1E���wv��	�=JCH��W�3��4܏&�x��8,���&�����#Rc�3D�vz�6��RS��yu�_N/nm�ك��vT����֥Y˼?��RFװKz�n��9����Q��4�g�C�^�5l`�P
\ܲ����G�&���ޫ`��
��9�P����ҞٲX���r�6���
-V4,��{�a�؄���\tcY`]l�ǿԾ�a���r�鴯؏=b��!��&����Y�b

�^[\�aYt�$w	
-���[��R�)���i��[�{$��7f"��o
���X��p
-��z�Bz����'h�
O|Ō4ǐ�|-�j��
-:���}̴a� %Tv��5��Y9QK� �d0
?�$��ćH|�#�u�D�3�
p��h���r�d�@,@Xm��VK
Y��@o��u��([���8#!OM~�.�7SoJn%<��I��dZ��=�1�D3�!P#4����(|:]SYd���_��kG�����Rh�+Ot�B���%�/e�䱖�&]�h��r5�sl�or��Q����
"F�,bՓ�*2~��:ʼ��i��[�������t��˦����~M
-�U�6�DU�e�"udPO:���]�x+����G��B���]��q:�ʥ�'�:�-ML3\�F$�7�K�3�
 C��*s�2��z�F�s�'����
�
�̼K���s�����Ӛ��w�ER��	�!`%aT��H��v�R�W��SP�ƅT���}FVArB�[��SS &��}p
�`�	�~����_���1{�,y��o�����
���{�30��[�b�
K���:w�3��Mn����e6�s
z/0<x� &�3�nj���@���_d
�K�Bٓ�! t�r��!�6<�
�rƕ�KjT�;ҽ�����.�Z������.,��68�MUl��{D
6v�
���@)tmp�y�_.>OG�"
-Ü3N��|��
�/�'��O��-R_�1Vh&׺
N�Pz8de���
勊ZTH;X����Q�6�}��+���'h��_� |ȋ��Cc�����u��H��j�BA�,�N�OS���{�3���	L��� `]���1��> A���
�� rxӴ�*E^�.��ؐ`����Q5
�v{`=W6뼟�\9a����vGO��Xc&
v��1���w�~��� �0�W�:ʎ~��f��:
0�/˵��%�m
�KRK�A�������c�R�%�	�P�#CS��ߥ�f�mD�5�oEx��1�7B����0����<&������Yd�8"1�
�wܡ5�� TaaJ3p��5��
��7�A>��+��y��I��
M���c�u��
Zd?�B��
k1���x-���r�sV��9s
�H6p]D�G�g�O|
y��5�S�$a�E�`$�Ls
-[��Ym�
�~u�8��p`6*I
ߕ�`S8���8s�n��9O3nX�OE
/7
f�^�l�bN�[�PB�F�O��.�9����Z��_
.�5�>�F	��
�S��̉�R�'}ΪѬ`_d�X�|�{�d��HXԾ3�QlZe7P�R��q�ش�O5����OkZ��r�x5u`a ǂ:��*`�T�)��,�
-DPQʮ���dߓ�����J�����Rk=H+
-*�#u)���h��) ��)B�6��s�9߹瞏��H�ZG�z�G���T�"9��3h�D�ͺ
��s��r|��b�4��y	�$��TK	���"�$��I��~
�$�v(�B��#].��qi

��?�C��N
�����~�ޱ�|��ܷ�LcO�n���T~������vxj��̦5<.��f\K<��2p�:Cp���S�y,
66��>|z�C
-���� E
-T )��f/��:X1�}J+��>���_���~ ���Q;�^��ㆪvs&�۸>�.�k�7��yZ��S��:�˩㜍�r�
ݖۜ���aKa���!l��.g5���7�Kv�0��!;ڗ�f����e�
��%�]"X�T�
�J3�aժ�lwV�j=v�姠�α���e=b�I/��g�H&���
�:����g,(y	27�>a�b�a�8���8f��VV
�q��ɌT���0��N���������ɉB�����`(
�_"f��o!�
�t}Wg��_0}H���X
�9�,�Q���x���=�~Jٹ�x�>����ӱe�9�M���2mF��S��)�Vk����-eZF�F٥bt�g0��O?�D�ǐ%7ey��ښ6��W��S
��C��y�e��US}�
�l�`a�8i	��g"1лJ�"�|P�Kڝ�c�,��$����+�&���P����vꖴGBoj_t4I
�vq�f熚(�e��C��!��b�׼�^�S��b�Yi1���¨;2��W�`/7u�h?4
-�
���!��z��@#(���T
���6��
^��!�R	S��#�>E/�S�q9�z_ 
/G%ӈ0C�9�[ۼ�@�(٩��P��
�,�}��X�T�Ok��p��QȫU�G6
��
�x�2�e,��> ���
-?�ϭ��QެYz�/�T���5�FL��^`�tީ��3�\#�������̬D�:�
,�v��� w[mDW�����)��TB��Z���`0Ֆ`3t�BQ˟kk��s4�1y�	�`�\�޸�c�V�#��z`X�Hhw�A��0�چFTy��qӵܫ*F˪�%��*����/>�9

-�g
S'�"b'zL=N�)c��s�*����b�R�����)W<�#�S	��癛)K����
��
-&���L�\��9W�t�W!Y1�������7i*�%�����wJ_����
��閥�n�WJ�!p�����-0�T`�:K6B�+��S��z�l��L,~��J#ZL�HBEe�߈E�q1
-ڸ��TD}�bB;��*O�TC�nՍl�$OY��Q��0m��z7�o��9NŻ�|h��DV�[V��e�֩b7���Y��ZÖ�H��l�����~I�)ܻ�J�5�����oO��ݑ���%(��,�h�Z��G��ҼmR�d���!��/NEWutV57z;�j���j��s���^�^lD�Ǿ0-a���_a��L�؁��w���44簍b^
��ppi������&n�X�	����uƻ-�݂
�-c�Y4��_�����
��g	?
�j�G�I�fH���
�%��J҂[��%ϩ�C6Oz vW�z��oZ�t�A����$�?z���;�
�ؼ���FT2�/+��0���@��@S<@>0b��S�uq�w;j4S�'�/4s����E�թ(P[����V�^�5ƊH��k�g/�ۄ�w����
0��*��֭ �a�j�yB��5�TC�
�J(�_��F�4����!�m�,
R��N�
�?S����9��
:״��O��f��O�V��"յڇ1���,V)S��@�._
-���#��Q�`�K���|ͨ%c�j��/&\��:
[��F�t�^Z "��q�٤Jm�뙊jMarח�`VCg
-��w"�~><��
�8�i����}�X�T8�dzQ��V
Y<��<�J=��E�ۏ7
G8v6��Z:�%���hBò�94^�ԥm!
1���OD>�p%�H���G�����/�Û`rq�;��N�m�~M���s�\��/���Z�h�:�(���MX�а^F�.꜋�.�Y����s}5�`a ����(�(X0�T�+JS��
�4�&��~��|iB!!
!)$�)ʰ��
��WF�Y]E��븎3x,��˽�}���| 
d��c�
-��|�i-��0�Ws��
-Q_G�pRj�y�0���׿�t����j��T̎�ԍ�
D1��څ�ڍ›N�:ka?
���7�e���k��_�%]a;�ז���F�=�9��-b=
&��Mm0-�vD�'^�j��+��/5(er�^�+E��L
F1�$�1K���WE|f��O��FMK�����m��:�:1`�ڥf��X�ЩM�*i�9��
-l?+Lw?-Nx��͈��wɳ\C0���瑃f	�s��
��M;iđ`��$����O���0z��*Rٹ�B9�@�"�k��5�����
v��~�.l�B?�u g�]�ed����
�8J�A�j���͹um�.��D�O��^^��v:�y;��ske��+,L�¶v� ��ŝ���Ҽ��خ�����d��_��5�Z����;
q�#�k>���� �MU\��J����{l*͟��ґ�3Do����y����"UDc�����u��#H�)BP��it��/	v�`�_�Sʝ�{�e�5mp�Ppy�=�-2��[���m�+v��6
*.�Wۿ��Sǔ��]
�
-^DMk��,2�.#��ɲ�\���!{�
^��I4�Ԉ��.~�ç�lDc�BU\b�"c
�j��v�����J�G�|�H`_��2�r����
���H��ѥ
�
��t��HH���BaG�	:����B�f��{�'�9
-[�j��a��e

-&h��z6F�d�y?�>g�ۑx&�l$����^���:����^���n����x-'-����]�O 5�������@S
� U��ڏy]�Tu 
�_,z�
�WPT�|BJ,ɕ}`8�ߴy?p�7gˢu��\JO(_��vOUue4���+Q����bi�?A.j����Cxy���R���J�駥�P��t㸲r��T��fd�d$ֺ�FR>P�a�L���'��
�v�����2M���*��׵�T�]`W��*�cD�*��h�A�e#�"�ɆKO9�J���KL��2��J����(
KgK3jԉf��Z��nL��5��o��M(�_���>�FO����ӹGi}<���@w��#Nd����h
oo4�Y�
̾�Fٸ2�����Y�A��z$�W��֜5��Copl�i�
�\�
���3�2�l�;��a�<;�S�? B�>�<A��a�rL>�z��p
r�j��s�m��1t�Z�c̥�
�{�s�/���J{��c�*�#�3��ހf� [...]
-�oe�*��
-�p���}����%��
-K�"G�*�
yE�%��S\�#���V�9�
�ۦ2�4=���ZH
�
W}d��UU��$�U���>*;�$;�d
'=�NY��
,|ܶ
3�4�����q�T�=�ka%���h�s��䬺��U�X7Fl��[��
o��1a�puxf�9��Q�Gk4�;e
-˸�7荇�5��xB:�y����Zd�ͫ,�`2��?_�a[0�~9iY
Fs�3���g��	�Ë9u����<,yx�87��� �1�����Ja���,O�@/g���O�㔛�
9�4 �|.]�1�6��'�^� �@1'��p:Xt������wL,j��V���Qv@�wl{έ��̱���\�?R^�UV�\�GI�+�����9�����D�0���3o��y�d�[R<� "�"��"
-.��2�}��"!<�4t�H~(��-r��2��5D�H@��l��"K�����濣,��/S}�������"+���~w�������F}V
dR�z�,��:�w&?��C~Fq��J}Jݢ���J��i���rjzE�gU�#��p]ZF��
�%��+���[�Pj e�w�Vjl���W�7��wR��/*��C%�%�j��G�x�
@EFH)&0_����Օ�|Xu�
-D���RNX
A�\0JS���H���30��7�͛7�3
C�Wc+��U#�r#
aQOL4E�љ?�s~�{���s�I���y�?�y>�ҒL��ָKd-ޣJ1�v �*fH
�6��h�����z�+~B�O�:I��Qq�Z��UՍ�
P�[�U��D#�BM�	��>$�	�z|��?��^�������!J0��W8�N�	��W�zX��f���щ@'h�
�<�
-%sd�R۔e�[�$z�,��Z�2�H5����[&Ht	L���
��U�O�
췯�<�u��ɎrE�ᾀ{i�,8+ןwM2��O��\��7I8
��i�l�2�ewkv"9k�r6±��U\�R��*�q��o�GCxxy���;�:j��Y�E)
a���ΰ!Xid�j��
q(���8�S��=���l�(�P��9Iue�&��k)���W1����=k��Z�b;8�zB�C�����4��ڕa�v��?�su��UuP���\Vf�>+�5�2��j&�P�6���uR�ɮ�!
-a�+�r���k�!�o�4	��`��ܗ�P)f��%��V��Q�T��F�(Z�]s���,��TR�|O)O?��h�o�# ]�6y�л�)��O�U�,F��٠����E})�g�s��ٴG�y�Ҙp/kw~˖��I'Y��;Td�
�g�Y�U���'��I8�@F�*�	�8
$�I��+A2((�+y�8O��ϋW��ȗE��
{բ�b�W�"@�}@�C׌�t�e�Y��gv�ֈ���H���o�fE`�ea�<o�V�	�F�
C��k2������* ]v%녦L�y|�KJ���3��P�nW�(��<� yiBVO��h�P������|��q'�9["�<c-�����p����!p��w5
�ϔ�r�)
�􁢮^.
,�8L� ��o����қr�7
��ȶǫ� .�@P�p� ��"��X�SI�3����I����k�TGm���W����Vb�u6��Gބ ����`]O����ZQ���&'l�T�R&"N�!�v�G{�%���^}T�1�v�:Ȉ�\������(�IW�f��*�ڮ��ʃu��*����lg��w\W�d?�'�~�|S6�|��ɖ)ݹ��E< �K��7���b�%����J�\�*\D�)
��e�
-��2�G��2ћBjx$Z-����aV#
s�/�h"���K6WZ,�ɳ����L�9�0�~G�"~4�
�5"[���K��4�h�����q���ɕ�����F���a��1U�_��K�Ī�)��P
��
?Q΢9�ޒ"��zܮi$��5I��0�]x��oܬ��UJ&�]�:QS{%K��z����<�
�~m댋�/7�ƣ��i_��y
-
I<G�d
k~��x�k�ے��1��e'w�7���۲���
��U�y��ʪ����\���P��x��V���nL"�
N6t�Ħ>�gbN�_�����4�!/�e%�
���O;m���ht��Wv6�������[���i�������yF�y���4ʔa�t
V�]��
au���
�#������Q�Ym3rM�/q{�~�
�tj��D��
�7���f�i
���ɷ
������� �.
=[�n`4���qSh��B�r�x_�5wԐ
�%��n�
Q����~x�'G[	�`
+qb�]Q�2Ը�i�=UGn�~���ڋJ�(�����Aݪ��d��
���
E�7��K�z
+M��]������!}��
j�nh-Cզ_�魺��������a�٭�D�fr�j�6�$-�4�n�U�Z�F)�Zp
��ux'
�@��]U���/�ٳ�ۿ�3�Ug`iU�}��ڰ��U�L��W���u����+��S��U��[���;u��������XJP�v��O�ŀ��{$�KF�,q
�Q���r�u��H��.���}i�m����fZ�h~a���t���M����B�b0*��iW�
��C䶧���jZ��m��n��[nKfi
�c�+.�&oV.�� &
ʭ��{���5�_�s�9�d�m��I�A. �*s�5:	�1���Ů�
m!�|f���l'�6#N�
-Z��>���\�oM�k�CZ8�)*���b EE@��(2���7{�I�"	$!��0a�=+v U�ZŁ`-x�E���JU
Ǻ
-����~��~�7�<N�z���Q���T�!w�����B,��C)k���E��+�
�+��#�6�-��)��
p�*㪝A �����Ao���c��c~�\_xb�5Ӽ�����z�g�Q��u�}޵�z�Ge��X~	>T�S�
s��V6�������i�1=�2J眆Jh�@ U���u�;
��7!�0
-߽�\�醮���������%-;��=.
��e�/�T�7D�$v�{�.ʫ�����|�Z�Ѯ�mcDֲ+-C��u�_��{�>�1�H�1]�"�D^n�R�
�ٺ�:����E3�
[�h9�������
��7�TJOW+3
v�œ�Limc
@�6'��[�c�`Ǧ8v���!���b�R�{��1�_ӵ��u���o��P��E�2��\@;4"�mO��
�����m{��
ߺE1�d��A����}C=W����B�}[3']\PJ�G5�V��mnY�G
Xy�ahd�'J�[U~	v��W�ۅWo�]�Wn�G�n�R���9H7�Ѩ��Au
�1�v�����Zm�]lU�r�
�T�V�A
-sj�6l�hm,M��y�4A����*0����v�J��
R�?�� �Ĵ>���2C!
*�#�q0�MJ
!:ŏ�C�����R�|�d�F�a?��2�
݂�c�h3��d
B��
z��SI�t?�%�L��m��F[�A��x�Y�G�ҏ0m�;GY1űh%[�sጒ@�9�
q��_8�G>
r�

�W�n���)jod�E��z�C�.q�JviN&�I
f���8b��g�
-�
�v|�
s��d��%:uT���f�����&�L��0���~�p����.(R���U
-;
_)�w%$��/��
�t#�
-~�#�u`u[�w�.��q�s����Y��_�-����*'̳ɩ��k/���)2*
i�9��$�7fU�z�fl���c�9}�]� �,툏WYC�
I���k
S�-��t�y7>�T!����<v�`tF�W�V��"�)��'����U���!��<���^��D�V��"_W��퇖��6!�{�9
JJ�j��i_U�(홽�c4*j�����>��
���26�����Kݲ�
�	m�&c<kQ ��Jln�
'�I�y�T>��ӣh����'
�..+�upC�6�&@j�5�t���d�����P��0���=��I�˂Ė����
-�</��BིY%�V(��q/ܦ,Ǘ	�9(B��0j�tI4	�S:�q��ԙ�1��K�h^��ChhC��F�����( �|�|y�0%o:TA�
B�Q��yPI\�;hVʓ���2J
-ĥ[�Q�r��_k`��9h�� "?7�<18�����~���Щ�
t]Z*7֡�^��%A�nj#���7L{Lu�7�7]ČY	L��L�;
-�i�\WkI��S����y!KC:�31hZ�Pf:�߄���0��C�>C�{޶$tR:(ϭuO��
R4����$=��jl����uq�1?פ��9��S�i|c��q�F!�_z^�S
��K}��`�d�%D�T	�w
V�>�; �<�'�V=�(�5H�%j���WM��V�#��9�Y�D2��֓��p~�����~J
��}�D�]�gN�S�s�jJm�n-�>,v�g&S�L�l�#�����>���^�i���8��ʞ��%��4'��R��JD��h�RN0hB�A0�(r�0K+�a�������M��Y��|"�E�G����E_R^�v���4�/�?��m[˨�y�N`�K/5[�7�1���[G�ؒ'� '�铯R
�G��hqꭁ�]��>���iI��X�
-5�'�\�GB�	��ć����d�^u��x�+���[�^��%e��	�֪�p��xE��
-
� �6�%!It�ި@�Ҿ #%��
����:��* �h$r��7ש�ׁ�55�׈��Ց'I�+6��*ЮwȰ��%U�#��zD�+J�t�� �B�a�Uؕ	6����}�
�uO�r��7��d����P����
�Cu}FEu�a 7�RV�"KS����T���20
E���N�{��^��lk��ƕ$vW��(�,�F7��b
ˢÞ��O���y����<"_��)���.k�h���[n �9W�?g��ڈ7��yș�*����Ӽ�uA@ �Op��I�R��rP�(�$e[i<�H����������/�\�t�/��G�inQ��a�@��q�I�a�{�Yʒ�]��e��?D��98ߙ����y��dx ,�8�?����Pe�1�N�W��wA�i �N,�
B��=�%P�K���
�~�҈�G�!Oʽ��R=e�"!�]:�:B�I�\��MJ1�j�G�K)b
'xL"W?D\G�ԝC��{���A�A
?u#U���������UJ����
ǹ�	H{�F[�5h���[N6��){((��%��
>�V�Y�R
-n��#����(a����F�q�&mq�3%�\g?�%�ӆ��M5������X�D3�b$ʁ
W�� ����ƿ��5&͔D4�®K���
c�
�Ꮚ
�.
-��1Z�o
-^`��~¿`�6z	�q���
��aX����ǰ�)��Ӽ܄'��84�
n"Db.��� �
�yC<K���
d��},��{�*h
�

-ڸ�h�>���wMv^
c��8�Iƻ�(~��j?���
-e�o��y
��l/��Dl5�����Żר�p�y1���ܣܵ�����^004�{
�����.��%C�A2��2�d�Wu�����Q�>�o�kL<
��
����5.ſȠi�f��fh�7S��-��|�^����T�jX[�wC�Y�*��sG^1�Ve֗�+�˃������L���3�
��/2y���{���
��+�.�;C�t��J �}��
���-��
>٫y6q<����
��<b�s�
-�bk*ĉ��_�
V���
�����T�m
�}���D5�1o��U� ��Q�u
�*�n��ҹ�
�D��U4���|>�W���x�A�_P�Z�?	�Q	��y�����1�>y��K���\.�!�O�q�M��

-0C�l����];�S�k)��=RZ@�[ɷ�5��
���JBe�ǐ$��Ni"�0
-�ú�R4H��~�9.☫|Dϸah� �-�)�r�~"��e�oM�����
���K�%4	_7�"�‘e�
-QD~�0T��.��>"x*
�O�>�酧��.Ey+HVy55R���Ws�����Ek*
�PxEGB����;(J�
X��(8h�iq�mh��^�
�0`���}���_APW�D���L��Z�‹]�<��4��zG֦`��oy��Z�R
|�u^��g��C�F#�n�r)��Va�
�5�ƪw�����9��n�j�yI���t��
-xI��1b�Iy�>}���-A��گ����OSh��KF�x���6xq�qQ

-�3��S�U���\ka��椚̩�Di�~
�?{�>���J�3m�tߐ��Z���t����]�Y���N�ju]�ɒ���QY�lZZ�s��
NѴѷ���W�>S���ݥ0�B��j������+�7��q�҄fU7���m�	�����:�8���^�;�#�eտ�+���*,�_����C�Y�3���
�M���S��U*���L�X�.jQ�Ȗg�_I��W�J5a"9R��'�C�\y׳qH)��V�U��
-Z��.�\+�Ѥ�/�a��en�/|F�[��?S��Pk r�"�
-^�Y��>����V�H9
&ya���I��x�Q�<�zU1\���
-ٽ�l�*7�}��hu;Twfa^���cn����YS
q;)oZ�u�G!�uT�U�Or����lk;�H�F�-�x/,u�	s�m��>fd��}�+]
-U�.o�.����=��q�-y�]�[��v
�i�R����g���k*�`/p����LBu���+��A����@
��[�)��&P���YQ�?���i�m/��K,�Y *g�u��(i�2�`��؀V�"f��JSs��=�RU@� ��7+���>d��ْ���s�m�Y�� �)�w�=U?ο��3D�����
qjv��8<��!z
g�)�b���^�[$z�RYjT����)�Ԭ1�c�?M�2q�=�@��?��ܣ5�ew?SIf�q���D7����
k�\� 
L�24A<D1` (T@@+���7{��d�I؁	3*8����:@-�m��q�*���8r����><�u���ݹ�\��id��Xm�m��J����J������"��U��
jb'm_�z$b�"�uO���
�b�M��q_'�is��ͼ?M#mp_=~m��=�İ���+ȡ�:�L��;48l��mb�
3�埒-m�
$�Y|H��n��]�c�k�k{>3 [...]
e
l��[I��u��Y_(i��&;����t��o���

�
�����5��k������Z���/��
j���j��p��~Ch��⨿���䦿�iR�s!G�-�����֠���5����
��
-�����&w���a7W��AƫX���U����r�8��+}E)�oV�ӃIÌ}�qZl��h�<�gw�
-��A��?�=��$�6-�ޡ|,)!<�*�ǘ*z!���8�߀ϸu��Pp� �D|�Ŝ�e�=s�m4'���Ң�ؽ�YaP�OZ(���vj?�VG�gxI=V
�
�-�
̹��u�MCJ���H_�-C�]����B~�2A\�8����*�E8P�T��Δ�To�
9/�w���h������������a�ߣ�b�y\��'�F,Ռ�o%��w�U/�ժ���n�M�*��T Ƌ{�5NJ����ԢT�9L��;y
_fX�D\���u��ַA���:x�"�)�V%�V/*��]1���#
���)ԋ���@�X�"�SV�Ӆ����4u�.�f�?��Uչk�%��Nj����;c�~?�]Pۺ˄�W��Ҍ=V�듍�1�
-E�	�
ֻqd{q�׉�;�
-�N�
������YH�d�fttc�
���#&�v�P�tQ��jd����1�o�
��­�R)�ʽ@}����<7�	�&���8�w��y�y�b��H�
�04���͂
@>� o`
�����~�M�<��a9����(��n
����c9̼4��<o��/��E1�������:��ɕ��7e��
�.{��Շ�Pi	WE�Y���x�ޝr��
-�EJ�7
�T����|4��'�r41������� n�s��#?�Cśhk�6
�/ϻ���
�7�
n
�
��HIT�����c6�߱=�z
z!�?z��_)��c�)�u�e�T��}nS�3��&iq4r����E�U�Y�X\�K���88IX�`}7yIi��
-��S��iG���r3�8Eiօ�$f
����l+n��.���*d}0Qe��:F����S��S�퍆��֯�SȺ�8��~�%; [ژ�l0~{��^��
KbV+�T
�s I��x)�oe���q��ra5),k�xU����Q"��YN�פ����ܾWu8G�Q�d�!H�9�2�'���31c�C\��!Q-�;U���9�
�d�Z�o�8C�N�T1+�hڟl-?63��z�,�=]���Aw7!�z6��*H��H*[|C���_@m���s2U�r]^9��n������0�"��PuT�t$�#:H���@�бjy�b��~�=�噛��*��ku��U��Q�m�9�]'pu
�
����d��SۖHgi۬��6r-���>`Oi#�T�2��"-�!NSn\ z��$���S�C%�Q���%;���O���z�c�T)!�M�.wf�.P�o�1���U=B��l1�F�#F0HD�\u̞rڜ*��u�jQ��O5��u8�E$�7:"��І���(Uu�AN�gulW�YE�*Z�"cT\���k���Tx�l�x)�$��<�hT��',ʷ�
�����y�={V?$�N�)�D��P�Vl������]:�|�d��̏��"���w1*��=3*gB'����|�'#�sB�F�S^PR�8�?
�
-$	m�:��@����l���(蕉9
Ea,�_܎i�ǀ/O	I��4�a��S8!��%UJ������8C�(�&2�J:�;{��Mጫ~J����dm��rFW	�jg�Y�?��;��s�8Ҁ�����Z6\Fq�D
,���H	Y'{����
$a@Q��k�^����r
��h��"j�}+�m�j����y��s�������әM���D]�_CJQw�)��/ʹ�5���״2�s�7
�v���}���7�
T�V���S���6~G���oLF
��
YH����Km�k�v���~�U��.+�j
p��o8Ɖ$�5�)�\R��������(��g��H�m}�w�5j�N)
-+����������p�vO[n��Hj�͌%=h��
��4�^"��l�q:i����%S,��P����=�Ƌ�G����T����	�B�ULR8LW������$G�xLcLS��},�?�E�;�8Q��E�$?\.�e�!&���KK����J����G���7��|�_
��Ҟl8!>�8��(Y�B�I�Y�`[�}��.�B���b
��T���$��=U8O��ŧ
y��P��-x��$�]��0��_���
-�j
��(��sO�����H|/=�wKR���������`�
p�t�l>f*�ӡ����uU��<�=�T��s�(�&zpK��A?sL�o`N0M�q+~*m��-��~F7�^���5惬H]�${��|�-Ҷ9Y&�=X'�V�u+^�ϖE�m���
-��Y/�0�X� c����A��dP
c��_X��
�V�Rx�6���b�|C�6������^FeC]���o�-�F?f7���Q3�V�>͝y�Fs���y]�ݯM�F�����͊��k�^Nն��I�����#F�Z�.�7��Ɔ�Q�f�eϫCJ�n�;Aj�B
JF���w
-��mԗ��6��t�����(�I5�beE���l���X���Q����͌��
��
i,)�6QS �1zJ�ezVBf��
۹���ʹ�/���	HQ8�9�SnE%�o���-�4�NJ�`�`,��)�~u�t��yQ��N��]�vح �p����+e�"�x����N�6y�*������,�7�$'�x�\���C���QL���[8.d@}���C�ɏE)1���D?@晹���b��$�?7�
-	�Y��M���
N�|�����
_�Td'wa�}��0Z�������<���9|��3�����閗3~o=��Y>���l0Wb=P1��jmE� ��X�R[l�o�uv:.�C=���;.�a.��Bř�S[�n�W�J3�ǟN�1='\Xr���8�۲��:K�X��j�6�e	�g΀a�p� ��%z"��K�1��.c1�ɇzɭ�G�T�Ri�VB�e����� -�)K at iͬ�!�u�@_�`�&2�q��
u�p�%P ���
-��S�Ч|N�WP� !���o-t_�
��n�y��V|�ؤ��賐�e`Hʏ�E�=>\� 
�Tǀ�|��cҎ�k�IS�T!������%Gu,%[IR�'�������+#T�}m���3��\��/���df)��`����n2�#���\�M����(��CQ�d�6f��l��qG����v�첵).Z&���w�I�����Te{�������JQ�����ܕQ����E\m�`�p�`��Ҵ���\�z�[�v7OV�o9ݜQ�����}��$SSFMW�d��ny��u�я�:�	�*�o�[��3� ���
O	��
FRJ���0��ո�l����+��L+�&�
o�E�+d�-�
-�@�?��
^f�E��ko�o�\fy���J���8�z���ΰ�Xmi
����
-Nw�}����OY�p
z&�@>��g�ݪHc���.��
��]7M����z�#�f�����e"�g���\��a��@�\�qyºJc�\��3ܔ���
�����r�'W�QV�E�
D�|��P�L���s�\h_h�
�#��9�Z-
�T�d��L�>˼!���WS/b�n�iA�3���.1Fx@Ǡ�3UN�N^n�POZ�d��t<�jGLy��s=���>�vW�O&�-8ךs��hv���eSȉ���`wPU_�c�a��ř�=շ}�m`�<<�$�+��UV�6�6d�����o�88{��η���zkG}ڻ��<<�7�\���jvg!5M��!�w�&�GmpfS����g��O�3x?���
-wZs�LR�q�/�~l�K�]Q�V�����:�o��m��<Q�'��

�
R]�AMXy
��u��
�
^��ȩ����
�$�}�!� 9LH��aH8��h��ʡrTtD-�*��fY]]wu������u[bg���g޼ߛ����"���ȹ�� I7�����H�R�7�H�B�H�u��d�t�
�*�Ჲ=e���J��t�j�|���	�#T����I�/��W?�{�Ν��O�^��'�`�����v�'$�^��E�=7�I����TF�2˵���7-��^�'Z�"[�x
;�����[U�7�,���Q
yWrr�9��E��6c�y'�I� �gIR�m��2��� Z�Q����
-�{0K�,�^�H�/>�>G��@l`�T��=FZ����nZ�H	�ѳ$m�¯鵩�K�A�3D;w�����7����ŏw��^J<��`i$�M_�x��8w��U-,�/h!��pbP���1��|*�k
_U�;� ��N�45�����j��<?�>�X���_�:�]��$
%�
ͫX�+é�
��Miw z�z{7��`fOE���5Fo�h�X�}�fL�}��k%�J�q�_b��_ ��A�5��4WK������'h?�:l��TH�mm.	�m�&�"�X7�r��V7�����l̨b�]r+�
�O�pK�[�{0�E�uwrf�ӵ�Fa�jCCP�k��t�M�ݻ�Vw�[FR��(�Y�-V��E8����	�����P��?�)�p>��͛�5�	#��T��t�F%��
���3�	qhk����
�;�`�LVOp���Z�ۓ.
��j��&�\
C<G�P��J�qzK�md
-���A�>ʡ	<�*�g�!��r)J����;ȁ��&x�K0�N�\��B�&���Գ����$�bԍ7f��p��t
(�0��H�
2����3�ӲG1�d?ź���
-�b�Vֆ|�����\[�w+�tj�j?b7����h���wJ�Cm�m�#�b.^V��B���DR�b��8��E]4�J�
7LG�c.
X
d���/�a�&ڎ�
�@�顢
��zQuֈ4T��q�i˽�èb˕ 4�3���~,�y�moθ�[��0� �
-�l�}	��T�C�u�L�Bt
2��Z���W�>��Eh�@+[���y����0=
-�s�U"r]�;�û]���(��̏{�����e� �E=�m��a^2�'FKv�~.�Оm��0O�j(�e�s�ߺ���
�Pk*!��3�
I�B��
s4�{^�|{6��k\*
�}X�Y��Ǡ���D�=A
%��$�hǹW���ǂORV�����
����U�B��ꯪ��r��+C�a6���� ��K��ԣe�� :Zڿu�6&��?�W�&�k�).��]%��]�,l�b7MX]�[H"}���WL)RI�r�f�r?A��ƁY�&�I�~_�IB��$�{X��l��Z����X�E�&|�w�#����؆�`��_v�ߢf���u���3����f����m��8�9�?��9�
-̟��N�Վ��`�jz1*�������.�@��爎܋��`�o�ْ�J_����+- �4α6@��/DWE�jE}HR�Dl���;Y+�
���z���/������1�D�ѓ(z)oι&�;��.�4��aZ�#�g��
s�b�Z+�X�Wi;�<~�n�"�(�	���M�'��b6��!G
���lP<�^\��nM8-�-a��G+dyXP�^��s:����0q
\p3b����W�u.�,R�&�r��m��#<�He�ĸ�vQ�l���.ˍ���J>��қ�s)��lej�(�^ ��,�=�/����FV���6fj����;e���x��%�D�����k�%�!FW at a��o2QT�vs�
�5��h�0�B�{�U��H�i�GCO����zL'�pb�I�q����+'_1���Lv�
-���Q��A����%�
��$��[H~�}{�1�f��K�ٲ�:HmW�S
-��ëd}�2w7����
j����<� �O�����7�i�2�G��;S�W�ݒ�!�@Y�s�Z~��*���PƐ6�x�Q�ܡ��/9i�7c�G��HV�f�3��R>K�����2j�Z�xH"Z�"�)�
vH�D�}
�@���}	Y�J64�T(P_�(*�C]���mi���S�Jq�OZ�g�A��(n�y8}wν3���7���;�?߇�*x"D���6�Hae�Z
-�5K�	e
-tE=H�������\ƒ�W�8
��7��2�y��m��]L����y���	��1N<�8͍�@��������:�>
�>���6p������ӹ�<�AМ�*쵮�5M
-��N5����g���ܿ��]7�c�D�!\����O��6N�(���b���H����ֲr�t1g���u��N�'w�ߢ�e�Gr��u�b�J1��a�#�g�i�|��Gc��"����

�'x
��&�YH;�����4
�T1}�Ϯ;c�V*���ܲw��f����|�H2;�R��l��{��K��*��G��ZPg��׸z
*ۿ
��?ʗ���
-�ד:�N����9u�����L7�o����|j�B�jEV�QR��!Ū��;~;�Z�Z����xٲ�
-�(�񆜦q�����E蠟�V����7�:b��g3��h\y����g�.:O������0�7��Ң�
�b�4=�N��Hdto{�<��WZgH
�NR��
�RZ\��s�W*Zx�� ƻQͮ�l<�I���Ts|���X)���c?��p�\B� ��K��u��e��|0|/a�hB�|樕���sEG���M���s��M�d���?�*G,����H����R�g�[)|�3��
C�Q��{0b��Iט%9*��X�����R
�M��U)+�^�
�P�,�p�y*��~uR�Hw,r�~L���;�_���v
N���"����ۿ�]���//S{̑��Ͷ�^���0X
7�4�����㊈�#�ޒ{Y�<mg�$���5`��Vs-*l��ۻ�g��r��i�˕[
����L��X#DEhgq
!N-_����c	YP�a
�!w����|Em�"�����P�D�OUHS�r5�a�+[��
m���
-�Wh�*¥{I/1Ywû�Jy�׸j�k�@p[�����z�3*R�e���RXwq3�0���u%�B�AŒ%\N�C)�W�'5�꡵
-&�F+U
,��d5�gR
"J�r��VDB�SDO]V�[EסdyVӃ�1,+�Iev�"���`��Wrw�Ka��
�G��|����`��%+T�VR�C
�F���{Ys*���Z�5� ߬�R�e�s� Q3
-���j�QA�4Ӌ<>���$�.7�$C$p��
��
���A�)h����J��ew�T��*Fm���K�g-��l�m��*{��{�����v\ܲ�s�Ja>3_*ݑ���ہ>��V�5�|���WG_
�>��R��R_YL�!�R�F�jz��	S�5fځO�2��<�� `��}I\:��X�i�Zk�R
���H*��4����[(�x��X��$u|I9̺TkV���z����l�_�׼g�C��%�*�
�w�XR
��nY) N.�9+�wZ�[��E9�ľW����J%�w�p`Nj���[���.�b|JOsd�W,��R�~�#�*	Ľ�yF�dwC��p ���*�L(8�Oe��lL� �˞)A���
��v�f���F��ʹ.��Kn�d�~A򥾺]�Di��
(i���]Yʯ�J����ߟ�?�>�w�[侾
�7���KK�6�w"��!e��D�p� �5��V*
�3VEa{:KoED��cɾ���J�#�oOU4�
��4����l�TjF�k�,>�{S�?ý�Sk�>��Su�����=�|��j}�����T
-�SU�.nk�.����������m�c�Ů)Rx�b� T�<�T�V*y�Ù<+�`R�C�;S�^����0�-�itp��<ȗ�2I�Z_0�ȡ�VVKHW�ol���9�=�f
d�

j��b��%}D�C��y�{�s��I*�{ZL����1
������r`n}+�D�����_�*�Uz�3�����}�i7��7��9_�k��jx�L�+u	
�;�FxL�.�m�m���Q`sK�z�������K#�>����&����ޗxiB�V�^�\s�3�_X��X_�ر��C�+ҭj�|S��	�k�Ͻ�|j|[����X

-Ά�BL���.�?�\��D��C��q��ߢ7n�O(M�&���JO����������i�ݖw0�� ���I�J�LM,NCOYPoQ�R�S�T�U�V�X
Y#Z:[Q\f]x^�_�`�a�b�c�d�fgh#i3jBkRl^mgnqozp�q�r�s�t�u�v�w�x�y�z�{�|�}�~�ˀɁǂŃ„����������������������{�p�d�X�L�@�3�&��
�����֜ȝ��������|�j�W�E�3� �����תū������}�k�Y�G�6�$�� ��ڷȸ������~�k�Y�G�5�"���������ŵƣǑ�~�l�Y�D�.������оѧҐ�y�a�I�1�� ����ڲۘ�}�b�G�,��������{�W�3�������q�H�
������v�U�3�������s�I�
�������a�)�����\�
���Z��  ��,���
-






��������
�
�
�� �!�"�#�$�%�&�'�(�)�*�+�,�-�.�/�0�1�2�3�4�5678�9�:;~<|=|>|?}@A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�c dee�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|z}o~dX�M�A�5�)�
�����ۈʉ��������q�`�N�=�,��
-����ٖɗ��������m�Z�H�6�%������ؤʥ�������������w�o�g�`�Z�T�O�L�I�F�E�D�E�F�H�J�N�R�W�]�c�j�r�{ĄŊƐǖȝɥʭ˶̿���������������
�*�7�D�Q�^�k�yކߔ��������������������� �,�8�C�N�Y�c�j�n�o�l�d�V�D�/���  �h�	2
-R
e
r
xzzzyuph^RE7)4=
@
?
:4 ,!#"#$$�%�&�'�(�)�*�+�,�-�.�/|0p1d2Y3M4A566+7!89
: :�;�<�=�>�?�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�||}v~oi�a�Z�Q�H�>�5�+�!��
������؎͏Ð��������������x�p�j�c�^�Y�U�R�P�O�O�P�R�U�Y�_�f�n�x�����������̰߱�	� �8�Q�l�����»��!�C�e��ª������9�^ɂʦ������2�T�tҔӲ������
�6�L�a�t݇ޘߧ���������������������o�X�\�[�V�L�=�*����������b�/�����f����M���q��  ��	T�	�
-�
�
�
�p_L7!	������}tf
U
A
,   �!�"�#�$�%z&d'N(9)%**�+�,�-�.�/�0�1y2g3U4D526"788�9�:�;�<�=�>�?�@}AoBbCUDIE<F0G#HI
I�J�K�L�M�N�O�P�Q�R�S�TzUmV_WQXCY5Z&[\	\�]�^�_�`�a�b�c�dxeffTgBh0i
j
j�k�l�m�n�o�p�qlrVs at t)uu�v�w�x�y�z�{n|V}>~%
�ہ‚����r�W�;� ���ϊ����}�b�G�-����ޒē����x�`�G�/����Ԝ��������q�_�O�?�0�"��������۬խЮ˯ǰı²����µŶȷ͸ӹۺ������ �0�@�R�f�zƏǦȾ�����
�*�G�cЀџҿ����'�L�sٛ������F�s�����M����6����+����1����M����Z�����:�{����� � � �O�X͙�~ʹ��~y��~e�L�~�j��~�Q��c=9 ����~|�4�~c�l�@~]�̳�~n�f��~��C�~لOiZ/�gP����8�v����}6�q��}0����}>�ϲ:}i�^��}��,��~�
׉_L� p����K�-~~,*���~��&E()D9�v��yo�w�y���=�TS3�wI�!
�D)�J��%����OBv���w�N<i����_��ΝD�g�A]�3w�^�|�
<�~]�
-bʀ�}�S���W���?������CN�<��-Y�4����� ���B����Yp�z�S�)j"��{%�>6��4��;�
>��FVW���m��
-S�^�D�i��*��bPk������pة�?�%"�1�#!ϼK`���L�<�n-e��2*���+�)	X䥂C@�v2l
Q?����(=�0�q��
Mz�ǃI�z����7ME�Y;���
Y��@K (�-� �\��U��������&>�r���I�^���2���I�Me;Ya����"��V�N�,S�;��o�_
%s�
�D;��f�Ǝ.�����R?l
;
0Dq�>�
��8z��D�KG)�3o��+�&�<4��@n͗0�E��O�9�4��#��Ґ���n�W9
�b���_��
7}B�2�yːv���/ąJH삻Ȧ��p$�ȫވy;�Æ���ǘ�f��o虔�F¨Ls���I���,Kh�W2�!�A��jHE^�τ���� _�w�d�lX�g�g�Ωr!jU)�[%�B��\D��Cf�p�
�<_��\?�k�,.���w�Ȳ����i rJ����R����ݐ=>0�+cv���Z�{Hl�l�
L���VA��c�۠����
^{6o�Cҏ���
S�
��
م�bȏ���:sz
�
7�j�P@�Q����
��;[�w�g�|z3�0Uq`!�P����-~|���X�3�+�z2lIђ��:�_<����a�X��S5\}���E�^����G���
-�X��J4�^�Ƭw��/��I!5
-�bn�#�F���O��� ����`.ܙ�-�J\�!gZ0�
-)�ݥq Aß���O��k�V�
��^B���f8KĈza>p-F��O�J*����Yr(���".
��O��'����q�ä����f��rC���RJ'�dc~��h��!€�?�`���}W�zBd;�hѲG��ϲ�m�T
��SAi�j9�<�� �
-ߨ��%�@`��8xL��T��qė=�
,Mk
$hJ�����d�����x_�r�̰gʱ��h�t�G,�K��
ytomVK0����X�?R<�J%��m�q<UG]I�X��'t�9E��
-$Vt�� �������ܛ8�i�(�G�T�+��tԃ��]
�6k�N�*���d�$m[��w�_L��-h
��k�,Ȭ�
�&º����^>���=Џ
�]ٛ��a��`sʠ�7�
��g&Gr�ŀ�?>��r&�z`�b>&���z��
%��sx�
bw�&�{�~
�څ��]"W�R�%��c"z �D
����zA ����r���s!֝=jcf]��rm��A��NJl$�� ے�#ؑ
�>���wTf�
GF�F69�9<׵.�'S�Z*�˺#�-�Jl.��Z�Zx�%m*�|�����
�o�	�2�ӝ_T��W�K4
�eRsu33'jRF�B����Wl|��
-��F��gml0L�1�
,
�����y�+�Hu��2��f;�[�T�0BE��{�:���qn�����to�T�]o������kI,
-
��LgV_R:�Kϋ0�d�P?=	��v��E̷փ(M4�m����\��T�k׉o�����,�H��=����������Z��w/��E�I�-LQ����[����
�8�F/�g֖'$��?�[��u~f�g���h�X�j����ݚ-�	VI�m�
K��Հ,%i�b���Q���*e9�7���������W
K�����M�YiHt�X�T���BUD���w�-�4��9#i�ԗ/�r]�hGވ�/�
-
-lD2
h�‘�%TT�T*F���dw">���G��Y?�"��[f
r5��ʊ4��`��TAo��4H5�rW�S�8��Xy��;$Yr���'�q �vUP��V&�����4m�/5LJ��E�:��S�7��Hv�y..�� � k�P  �X��Al���`��
-��,e��:
E�$@B�Kr��.!{�A$A�,�C�Y[EA;|�
TJkU>���4�1a�Ɯd�cT.�����Us
R�&�Bc�h�R�)�����
-� Pd;���ʟH�b����l?1;_�:i�^��m�Mh9Ӝ+,�x�+(�‡j3�=P6u�>��a}�&���b�
(���0�=��.À<��2&�m�%�u9��_�~z�����L��!�S`(�6͟>թV��
�l��W䨸�m5y�pg�!�2��
<��	P�R%�wC�>��u
�b�v���b�F�.0���UK�$�K�;�؂�P�,�!�rA�5��%\��v���"�
-[2�g�w���dx��J���:��_�'�Eښ_+^Cژ�� ���I!	v��,���V7�2UJ������L��N�ITU�K�ɎIy/R+�=+(֨����v��6������!M����	��@P�B�%�R-��-�3��|4�-�����)#ͯ�
�w����.�ܘ�<�;�
��b��#��;*��>$e�G���
-�>�3�
�����"�
و~A��Z���$xOU��x��
�
f𜓜x;٥Q��
h
X�(�Z�����x=�`dš��
8�b�†i��d�, ϐ��!�enZ
-b���
/�޲��І�����2��P�0~�
�+��1�b��a�
�k��tT ��	�?�g�)��˧�9��
С�`.ޓ�`>'4��\DRd���Paxԗ��
����?i|�9�,�t
��Ĵ�q]��"��m-�9�O�D��'���E
x�>�#B������z6����N
k�%��tm���6BDzV��Q�G�
q,2�O:��
y�{i��H cy[]�v�a�Z��T�5 �Ȩ�R
3��4�5N�@q���G!�fYXr����{�3^�
��M7HX1��ey����������8����7ҙ;N�������P9��tn��/D�=����}*��I�:��2s�̋%�����G{��<Ie�d�X�w��39��5�I��ot=�ޓ�*
̸'��
��(���#^s����{�\���d�Y����dS�j	V���΢T>�7��a�b����� T�B��m�6ۺ�4JZm�I��
׶�F�הz�\F�D*r��E�y� [...]
-$Iⷱd�`U�+�����z�3��
8"}��Y\�E^�\Q��ܵ���)<&uZ�!
FM)V��"�ڟ}���&à/����
�
���5��
����O546�PW�눤0��
�f�GlE�bd�c
��'�ƪ�r��Ӭ[��{�K(��"M/y%���0=����zF�Bx}��{w6{Y5��0��%,��4�0�R}ԓ�vT��p>�K@�f�R�$�7H�U�(	�����/1��0�f<,��1�B�S>���٨RI3#&�&���p�a�5j����1��9#yT����H�9c�I���[��է��j���U̟�~��?�����
�+�7��N�zM�`k�|-�k�qJ�}(Ҙ2������S��aӼG�i� �;� ��b�:`uǤayU�}T��	2����Ftm�̔
%OpuD�����U0m~L-_������:�q��W��g�0~�huw�-]�
NV��rP�
=<�]x;Y���1�iw@��8,���n����\(z��q�������b�
!$zB��&5d��n��6
�1Q&�
 �&�
��C��u�Ўy
#����c%$7�]w'z\���0L�k{8<Oz	���o%4�P�˗�
-�9hz���͊��$�L�mxEFGO��$���Dc�����n�:0td#�*�v��T��2��.q0��6���v�g����Aԡ�n�3����l�'��H:�<@�I˞��8!�mR�S����s�^���U��g��f B�
�u�2L�> �;��f�G�S�
�Fx¬P�~���K�����m�%t3�M��� �c��cM(���bC�B��$
_� ��J�,���@��՜   ��%ӸZ�
;�.�6��B��)�P��T�~��~���:_��tH�NI�T�S��c��Τ5���_�3���b�O�6�-[o�
�7�$���c�n����:�zN�q��n�E2~�7\N��T���'�
�"[�fTT��^2F����
��&��+�����c5r~ԕ��(����j����l
4�8mW�DC]X�#���<����n�_	�T�� 45	�C0
V���~
m��&AG�A����7w����@�w����;����Q8� ��Q��
��?d��9���#1�y�ʕq�_eS]y|�d�*�&6Q��3�0J(�WG>�H���N� 
v���Ag��+�[�o:y1ډ�G�m�UV�'p�J{"�����M at 3��X���|��*�oƙ�ޞ�%sfJ�<��ߔ��[����-0R'G
��i�++q��NPF�\���&���XT~y�k�P�x�>���–����������~u2LX'��P
�M�O�W�	�rة
Z?q�U�����\+w�>-�q}y/sR�Q�Q�����J��@737���K�a[t̷�����E�8X��,��T����p����!��P���V�� K$��`�����Κ�׵�b�u~*L��lB�z-��<�R&,��+?�AP�]�o����L�K�ِ
'y����
�Y�?�
-~�t-"X�n�v&���?����VA�G��
+�
����7�W����h�K��D�Y��Z�%4YF�
g�[�
��� ��C_�M�6ЅLJ��!��)�9�
�!6��-��l?�@��W
���?�t`k�;�����p��}�
-P���>�f�{��i8Db����Mp/�F
��_<`w�[�U�q��.
���Y!�'i7�L'� �R�z$���v]�c�-�ީ%HY�~�ٕ����
�鞀ws{)W�a��˹��ԑ`����{�[z��
���ϡ������Z�&
���z
-
-��
��U��@u�BP.8�jz
�B�{G�tϤ1�ޕq#
���^�o�2��N*`�D��Z�m錞c�@QY��@����O�����y`��ŕ^ ��)�H�?�?��s	%�����J�@�f���-���H�%�{#}ř�PK n@�u�5w:=�Y�X9����(5#p
�9#���A�v(~�-�"]�Qb'䠡�y����a
-�������'����£�	+��v
O@��%�7_�*Z-r*��~z Ց�4��
!��w�Bp����G-q.�a+��c��"wmqk=���WfB
+
k^����0����>n�pu�5� �㞃= �m]0o�����-1�:ǒ~��%u
i����;�p�V��O�/a3��;0�o��Kܼ
L���6��E���d@�ZU%�{
����^�
Ͱ�y�O��V�NHLm���u�?�u
M��B�EQ1\�IُO�u�i�@L����7�Nk\��dd��[i��|����lRܰ��3"���r
W^ ��
-�1��9�~�(�V��ZQjsf���b�5~N
l�,
$LAE ���\�����Y�v����3k��"�*��Ie����.�gj4u��D��k"�*T�~~���g�^�
�~��<|�1�c��Px7��
kF�84�K(/AI�\ %�H�
�G;�'��6�������`kK����
-���Z�J���A�Fq��K�q�$5�GT��#.��a<��C]�s�zO��9�����@yQђ�-��D�RP����G�D{��n�����o��^�7�P��vU�v����T_F"�T��e�
��^�9��^�9���(Zi����*���J�|1�"�]����.��g:��E�TI�FzN���%T�|�k&�J�l���I��3ʌ�+�r^�qf��SNM���X��e��
$��v�{�ꢫ?�I��B�-��-Oi�0iX�o�
�葚T\���.%kR&-?(�m��=���?~3�Jncu
�/�mS<��Ð,��Le�H:�
�i�_+MSV��a�
k�@  \Ѓ*��+w��qDS!h��e

-�4��9"(h�d}+ɗ�7��)T���	b�ǪԪhm��`Y�ջ��
�s
<��-�,@��͋������SCg�Zw��N�	CU�c��W�����-JGm\Q��A]Q�]�h&D��0���Zvnw�%����0��z
��MT�X�I����:��l���<�7�
�a�`	���5�P`��ݰDh��k?�(�b��	��
?�`F��g�����ű��y���=�4EJ���0	GvQ�O4��W����d� SA�nM�C���
-ұ|`�7ø_��vY���Io���R�yYqE�,D�;�&Q�\�B�xW��r���v
t�

�
[���\"]����U���ˋ�
����w�髐�<�
|Mc+�����
�Z�9�(W
Z�ʳͰ��f����t��~X)�U�i��?�m�<P����	���;��G��-_k&ڞI&��M�L�<�:��:͹�7�����Kƒ���KX����Ѫ��W[�5P7W��tt
b�E6ռ�z
������~0�i��W�űہi4
[$�k����i�l�$����VRc4ӫ���Gk~ʿ�YQ�:ٮHb�F�G�X
~�Nu�.�kf
��c`�m
��f��4�걳�qVP~�:�U�
#/b�E7K*�W0��]�q�=$ܭ��� �X���QM52ym�B�S<l�U
-�ZҸL�eD׊=�

B��kLBR��Y�^�
�#z�A�%�ڥ`r^��'UIo�Fg�>�;1
p�'t.t-SSUn;Q��Y(sў��*�M�8=���
-BHZ#
��GcD�S���{
d'�,U�t���l�=��,}�*��v�cr�+�]�(_�1r�Ø@?A[��K�Dl�v'”o�>=��ԏ������[���?�Q�
�
ô n!ܘ���e���o���i���B]�u3����PzP'ߧ�%
�4�4Qw� �	L7@�?;�gS
Vjgo�ho�p�7�sy���
�R�\7�����V�%xL|
3 �n��|�2Q|��-��Go�t��u�V֘��Gk�}��fd�'�̐�yQ/;^��+b�#��&�~����ي2����(��<��c 3�;�n`9��2[

�Lqzt�.��)�<����lJ�a�n��
X>��ɚ��p��Tֆ��)��$��Dr�u:5�z�j�,|�~��0T\~�>�*,6�Y
-�]�7E9!��7���;a����u�*��8Y?��Ң��#� ���W
�f�iA�~�\���mB\�$�O�wD h�E��16:_�����J��qB���R%��*X���3

�!��O���:�`I�����o��k��2�+��}�Y��'1�%Y
�G����PMJ{rK
�����w
��
����_��
��L�&N�����
�N�yA '�ճmﺾo4gz"�v;L�	j�e���
%Ɯ���{��N�S6��U'*���@�d���jNc��v�o^=�Bi
���7�95���l
�
€A��ⶫ62�7�I����C�k�y
V�_}B��.I=��YR2��U^�c���<z+w@����b
-�"���8ۺ?pG�Z:�Oȿ��7�Ý��T��ԐI���
��J�A�����x߹rx���n?(��؁ w�h���?���F��O�Gj{�D
"��La�W�e�}j� �w��*����62�y3r3O�(�1�;LS��P��p��a?��
��U��}��c��qT/+��~���3M�ҫy$�=IQ�RS$�@դ@&\�l+f���EI��1k��ڸ����v�x�}_���nϐ��M�fB��y��"m�
�9�nQpϼ
Ϻ�e��\I�2��Gt3y����)w���%�u�$w[6o
@&zܞ�Y^�Z�w�;<\��b���m�����"��������{���3
=�s�
SN�Ӑov�(����D"��i��dM�֬Lใj9��Z�K7_�<��ې���ø��9�74�P6��
�0,�R���?����D ���m���6��.�D�t���he3
-����>~�o��\Ƙa3Ƹ2���@e���U*Tl��m�c�ӱ����� �~� x������n��N��������U���)o`Iχa]�����P���F�ŚVTC&�ϣ�࿋Y�=�d]/��
�.��.F�BX�s+$��=�}buM�>�RWm6�Ŗ6ᢐ�FX �5�x{v*������j;�zv��<���_~���� A��VUJϐ��^Ij�Q�x�シu�Q�o�=l�K�_��Ց�E�kZ\4��s�qU7��vOa �J?��Q)�4C��^����\��k[{��3��y�~���M�|J��'g��4Ay,$�0�( j�H��l�:Q"V҉�1X��&e��������
�s)M�Z��(�W�
�|�Ϲ�\���8�8&�t��c�p��Ҕ��a����
�͔����
�C��C�
GU�$^�fb���|�8u����̸
����&���A֍�9k�e�7�;�㥦���k�o����Av���Տ0o5����y�'����������<�!�����H���P�4
��|y��C�{_�2e��lTr�s��*��Idg_��'
V
-Fv�z|"��ƞ��ҩn2=�3[�"s����t�	�}N��8����`
�����1`X�i��]�x���(�U2\�o[v1�d%JOO&rؗ��0ܵ9�Yx�ݨ \��
��D�m����]=H�j�ovfd���)�:�t��b�dH9\
��ϛ�Y�?�8��
<%�}��dV�ەh��nu�ӻkV��3�+��(+�$���
-������#��Ջ��QҰ�����Ж���X@��h-Nd���$�a��>�M3��q��"y���$�[Y�@S���g�Ó=ݎ��P����1�)L<�d�"�d��rՕs����W��	��DJ�
-t��b��
�c�j��*���!�A�q
-hG�|�3j z�O���� ��|�
N�
-��*������%2#
�Ǔ�H�7!�
;v����� '�;��
O����~h�ĥ�%�,v6�Bբ��Tx��Dv"Lt�ïK"N#��.ec�}f��˺��d�&�T���R��AS�;Yq!������E,������AA�m?~������[�7��[ ��>
\�!�B;U��!�)/������C$N���$�A�³u�e�uU}�,3Y'��/J���c��	.8_[
O�����N-<"N�����awG��m��_+�yj~P�]ſ^\y�
X��,r-�|�㒒��ܳ���<���L^T}��,�^eDR��,��n�kqց%��|r,�!g��Jx�����=~�p{"��\ee�E�N;��Þ ��=���$���{q@Q��_��\?�/иLe���>�u��#��M����p�'Y��n�_e<�q㼅����Ra8p�LB�=��(�YK��[l��`BK����B#4;c��;H�S��^��OA<�J��~�I4,���$"���,B\HV'&fಀ/pO_*���_�_�#���&l��Wc�K	B�Z�(��|Z���b��+|���KpT��
-�Ar3v�*>�����>Ʉ�x\�+�0lk������O�Լ`� �F���cfup�.���wlC�n���KJIi]����&���f�����XPA���n�1ک���F�TK��BoI!��Ӯ���Z�� f�
)~��X��h���y���9�
ݨO��C5�����&�|�T2���Ӳ���n�SLB5eD0��:��
yP�;��(��w��9m��Ϊn�Wh����K�u����{�`��w��k�����
-��kH���>*�ڲ
��1���
�w�p5�����Q����݌�$
�;����LvvJ1��f����3n�*���T�g at oO#9|}����?V0M�5.�ۀz�{"
N�K?�C�_$
P�&B̆e>�(
q��I�u���`���|o�b|�_�0l2�Wꂝ�sC��ܴLT�
�I�a?�f(/+���P�Iw��B
W�h�g��šH
 ��
Ei����(G6

-���
�
�" �
-"(�H2�̙�dfr�	$��x�Z�EP>�ţ��
�����C������~���E��F�:}<
�\{
-�����%����
rH�6N$(߫Nᷘ_%�1�����]�2�:$����o��-�8ȥ I-qt;�'k��TjJW^�}�k��fQUr\�u��
l�N�
kHn᫂�H����*�W������d6��
M2	*{���`�V%���VR�oJJ����`+"�yO|s8����6�V��y8�
�:+����;��9��ɨ�=�.q�q���ѝ=���ɥ��^ӏ�w�ld���G���;<�bSh�
	�
�� (�����%]�
�N�}uAܹ�
�`MV����?g�=�&�o:R�����(�tWS-{66C�S����������U���foEI��hzE�'�ܜ��&��Q�8,�g�]-2t��%��F@}S|��QJĜ�h&S콧�bor
2w�q�|�o�����/�$�
Ĭ�7�Aң���I�MXIc>��f���H^�2��`�zB�ȳ�
	ŞO�*�{M�2MoR�0�i����:�T�~%�$�9ED
~c�j<}
���${.�-��+P]c��=Vz��pwz\S�;!?���
C:�G�F����Iױ�q�Y�Ş
݇>;��]�����m�S�)�yr���Ez�_n˕�aI"l�|s�G��������vm��ߵ
���_7e]֭�>��Г��U�)i:��D΂�G�}�V W�5*��{�f��?�
-�(��$�p\)9D$ZY�r|�����(�4D܁O�H���ʳ
;ܫ��v۱j�x�Lr_r�
���;Wi��
nV�|�R��u��dܦ� ;�@������Y�N�<q�Iȗsc�E���^M|��K����ƿ��6��#Q�쀫��Hl6�\�r
��E��jJ����K
-�β+� �x��=��j1�(~ǒ�)�C[vQn1����򑾪�x��V�
���a���u� I[���
8��m���Y��GeLV��(X/�%W}��%
��
-��M]4�ǽ��A�ߗn�װQ�ԈX�tGd�Ƈ�D�\wQy�R�>�l-�Q���nJ��Ȳ�c�/�����14��
�C:�'K��&���̕BO�J{ߴz�f�sW��|F-��q2��
?���}Y[�pXd�Y<\��v�+�
�M{��i�r��8��~�LJޯ����
�vlL:��	?@���o�[g�`���}�>?Ur�ǛI2��L�k.�}GpI8�Q�RV%܂L0/PU���E��
?�ɹT��c�ۼ�f�H��s��^QM�C!��)�$
�;
�ej�
�uIy	�W
����6���#L��Mi9�Ħͱ��P�*���H��ʘ����F�g��]�m��ߝn�+|���X$Z�6K'�
�O�Q�J�q ���m�(B~�lj��Su�Z
�ť�bhW��P"��z@�U�
�V��J�΂\�,<\H��A�
��5���� �O�af΍�C75O
����<x�5�
��MKQ�����e%T�f�ʤ��6
S
sFt���TOU�t(���
�2���[
-ES!.?Ӕ��#��C�:[�6�$ߴR�2G�[�D��U��cb��Dx(M<����}��|�y��%�����}�ђ���Hm�zy�Ey�)�9Didh(Cp��K�o���Y�9_\n�i�Qsƚ��Ӯk�X3��6R7��U&�"c�T4E�ʈ0�X�,t	��:�T��/>Uݮ�x�7�����F���>Q��L��~:ʥ�#�]�[eTS�2��%��c�
���Æ~EW��g�9��i���%�3W4ފ:�}޼0�_�X|���-�ƣ�µ������V�u�8H{���Y�F�"qĔ-�F95E!L��/���3z���Lw@��
"���F���Rm�O����Q&�[�#�����
�Z�O��/�x��ˤ�r�~9�T0�0b��ܬ
�4��Pߋb�>_nMFY%��<�ip
-�;R�x���@��|���qj#�l�j�?Ape�  �[�ۊ�x�{�
-�s�H�t-bM�#���t8f���5�}s�c��0�f0

CcB�K�R�mc�E����k���ץ�JH�[�ۢŚ<!)�N�o�OC����I}5����2���
������0�9���tMب�������7B���0�؋��
����0��z�D�
K�
�Ye��R�U�J�����ѐ:N::,#��D~6�ž���4o1��l�`��q5��X��U5G�"����Z4�tX���� ������
��cV�u�{�_<�9������S�N�}h���%�{�nԾ�"V}V�"C�w}�t���)�b�3�zFj�oK�����j2�'��Q9
-]��\Bȫr1.8�C|��.x8�~��pG��m<�ϰ�"i��S�˨�
�ڠ
u[��)�E��k�+WE8x����5�
q�g<k~���[��0n�&
ˊڮ�c�A��a��
Jú�g���"�:�"].f��f�5
	R�u��B�Tu6�u�|�;4R�
�'���hNp�\@I!��Bq"��:*��pX'%O���$�K#(�
�}�vW��&��$�����n������x���T�eحk���U�^�I���kK��l��

Y�+H�;"�����^�\��#G_�Km��R2�y���fbI-�ب:ݐ$;8�$N(�Ӊ�x���a
- ��1��"��*.d8>���MO�a��N�$ʡ˖~
&(��$~��>�����t�BM%^i���3��ϐ�Ef8UB	 �
���'`-�icIaͨ��+��	��دR���=�Z�����Ⱦ��Ł�=�5�U#��5H����R����>njky/����s6��H؃�E
oL��y����C�G��/��?QE%��F�v��MMz)=Z�B.��ϡƋ��/�•��3������O��8��5&�Y�����K�լ(�ST� e�ҝ�ZV�
��x'�xaV�4�Ë
�*H�]z~�h~
�i�0d,�K��8��CZy�{j��CF')�b�
|x���NJ>�V�{�0��e�#|S���E�1b狛*_�R��"���
���37�����B���oξ��(p�3_�<ݥ%-��t��ɫ�B�e��t�Ɠ��px H��uRuɵ)H?�m�����
�f@�Iz�͂qrgM_����D�|Ce�
-��ӯ_���w�CՄYK/��Ԩ	��佨/���Y0�����y��̸
7�.]�*ѳ���a �!�d��[�m��9���#{-�;�W�[����	
��U�$�mb?ci�3�ؘs���q�6�ĂT�
t� ֠}���
�dl����v��{�F�yt/ټ�t�����̰��K��Q8���
N��"���4�ʻ�c �'׸N��s6��I��
<�fWϚvЕ*�҇�T� 
��9�
�I#�{�	��mVx�@�.
��\�EyT��}��W�*�fҿS�ѵ:'��hP��of��ħ/7��n�
u�3֭F����c���ȶT���5��y�ŴѪ����L��i�Ӕ���%v
�I��G�	�ɒ3�m?PH-k�
�;?�v�bkk���Չy��^��4o B[�*�Bo���R
9���^F�t�b�Iyd����W��$ګږ�
�N��T3�VYzl
((�m��"U�a.\�vz��C�5H8�H�$?sZ�6���=:�hh�B�!É8
-`,�
g6�$cN���!L�p�<�
b<���Nz;�0y�%�
)�
�"�
�D�B@�
;�.a��$G=�W+����v�F�v-�����|d%��ݿǁ�gOŨ�
�;$KF���lb�u#�^$(�b�	���,���jdM�[s��kx�v�͆��c��?s�B��fl�S����k����Me͈Ly�i��3�TZu�g�v���#���V'{�F�,���8+�5��%\���Y`kY o���C��,VQ�"�B�k�5Wjؚ��


a�x����h�k�"�	�A�ƛ�/��d�X��!xJ
��(}�~��&�|�
����	�h��?��.��������XS ����qX�}|�#Ci�ch�K��VF @ d��w^��NH L
-jk�u�j����V�JE)������swm��^
��VQe��^*�7�c�Su�5�.�:��5!{3�A/��u@v�?�aD��UNC�k���H2)�
1�z%�9�U鱛������v򹰗�!�k��0>][#�?�w�sb���,4U��_	f�)��E�ď�*	uä6Go7�6ɵ�
���{�����'
C���Ga��+���RU�A=�@��5_�rgs1OU��G��*��ʚ�O�
&��Q͡�4��%����
��nl�c=�%Z� ��v�Y
�Ze��ਝ4�?
eC����`��
�

�_���wvĦ10�K�B/��*Br�v�4όwM��	0����
r� �`���$
����C�ܝ�G�a6;g-N_�&ɰ�.`	�`�0����M/s\�P���M�f�`p��3������ 

$��A7�	i��	���c���(y
<�N������6 ��e/�
�c�POj��m�+�YЪ
C�z��Xa-��
T��`ao�t�t�._
,qg��O�����I]@��f"�	�?4|T�]�T7[��r�5+�D4UffN�]Ϭ��'�Md�d����Y��%A'-�:�x�>�j����Ӎ
�5!�U��iMSD�-rB�FL��&����^:O����F�-T��4��w
�������T��3c
q]�2��R��d�/3���U�\;?���Up=���@�b�
-TYRJ��3���O�)*+ s�W�u�.��[��L6�Ǽ��A�. �귒�h���oN_�=C��|��HW�	Gz}��w\��2�h{?�U��r_ס�,[<���4�Dm�D��〷����C/
�F�l�
M�r_򑹾�g"�P\T�M�Ii�D��w�$��=`
��I�Ӑ
��}����6�.��jY�x^���h}]����"�]���l
-��8�"ӽ΃ǐ��
L����"�H�ڝ��k��:^֖T��m�������� �.���^�@1�~qxT���l�U����#U7�����5��:��L�E|4�&W2��5e��xz��*̖̆;�����M�0��do�^�lpm����aI�S�7�kD#���'͊$�"lL�?b�A���DI����N�mEh�
��8��Ԍ*�"vұ�E������
���݌5Z��5
���
�`z�~x�[�M N&�a� |�b�(��ǁ$�ch�
�����|cq�)M�_���Ɔw>bSО$
��	�D�p��
�z�!G@o3���
��
�a]Pn�N2);K4 U����"�p+q
��7b�������L����a�y�$�04��iC�c9��(�6�>E3a�{� R䏡�0`�?�s0��7y9'`L�q��`S��cLr &M���P.ڽ��,��_�r��u
����/�F������=܏��=1lt�Ŝ
�9>1�lם
-��KX_�t+	�
�=���#�ثL���
-u�uW�K���̹�
u)�F�@�������j�R��_$����YuBś�G�bQl+$���,o8�q�l����g�
!)
����n�2Q����U�>Yt�w�(���^�
�'Y�������
!�� %�G�U��9��� ���,� ��&>�YcwU���
�M����j"�
��Z�o6V��WF9�=�a��l
m�y������nqA/2�A�I�̐���i���
-q��AN?!9Nxl�b�O���{�e�i�Y�Q�̶�>S���Z�	.&�s���b��j?1_��ǡP���k���ٟ�
�x�`дY�!�n��6f�VJ�?ff�o���n��0�����6l�)�7�B�u�yMA�Ѣ�&�m�>�>�Nj��#4J%���&|���
E]ۊ:��i�2g�0��io*�6zX������h
+�҂��3;���1"��2ҍ�+O�?���K��ja����� ���Y|��n�MH�p�A/�LsI5��cu�*ΐDx�!W�
{�|m�p�q%��q�eh��r�Yb�Bt
M7��u�A-�
-w%5��,x�+
�z�!Ί}|%��w�pȩ�xe�Xx|Y��y$M�}y�A��z�5��{�+=�}5"6�~�{άq~�p^�Q~Md��~*XŸ�~,L��U~S@��~�5��
~�+f�2T"��P�{p�U�Ip �<��dG���X]���'Lz�J��@��ς5��)��+��g�I"ۇ���{�~�o��e��c��,�dX�؈	L;�o��@���}5��^�E+����#���zЩג�oy����cơz��Wܝ��L����@��E��5�����+��
��#N����z��O��oK�/��c����W����
K՘$�B at W���|5��%��+׊��#x�A�qzt���&oM�ɜ9c��l��W���K×���@V�� 5�����+�@�)#���� q���h�f��j�[Ű1lmPʪ�npEХip�;
��s
0�Xu�'���xzŒr{�qD��o�f��p�[ԯq�P䩪sNE�t�;=�%v�15�x�(
-��z� W�W}
q(��vsf���v�[���wLP̨OxE뢳y
-;N��z11c��{v(_��|� ׊b~mq�C|�fL�o|�[y�[|�P��|�Eҡt};O��}�1���~/(���~�!E���p޵�f&�B�p[Q�/��Pt�ہgE��S�;P����1��ƀ�(�Ā�!��ހ�p��,�Rf�O�6[B�5�Pc���E��`��;U���1���*)��^!�H��p��y�`f
����[>�f�	P[��AE�����;Z����1ٓ0�U)F�j��"0�΂op~���7f
��![B����PY�_�EE����;T�\��1撠�C)k��"d�j�pm����f�r�=[M�,�1P\�Ǒ�E��S��;`�Ћ�1�'��)}���"��
��Ρmf���n�i=��p�kq��r^m���to�lVu�rX w�tD
y�w'0�|Yz>̾j�qźjl�r�`n�t��p�u0�rnvgkbtgw�WIv~yCtx�z�0b{x|b��h�|~��j�|���l�|��^n�|�~pp�|�j\s}AVtu[}�B�w�}�0z�~l�;fׇ
��i�
-�9kD���mh�5})o��viNqꂿU�tX�BEv��=/�y��VǧeP�{�qg�����i卞�|l
��{�no��hLp�(T�su�SA�v@�Z/ryX��_d
�ִ2f}��}hƖ�Mk�/z�mt�Lgdo��jT3r��xAKu��I/8xσ��[c&��5e��[�}gܞr�Qj.�xy�l���f�oD��S�r
�d@�u��/x\�
ębp� �vdܫ���g%����iw��y3k��ye�n��bSq��@�t��o.�w��U�a����d`�R�f��W��h�-x�kk�emn)��R�q�\@?t@��.�w��Z��t�f4��u�h���v�j��xxm0x�yosekz.q�R|{itP?�|�w-�~�zK�'r�p{��s�qԜ�u#s
��vFtgw�wtu�d�x�w*Q�z%x�?E{�zb-�}�|X��p�z���r'z�ssj{@�(t�{�vxv|c�wy|Qy
-}>�z�}�-R|�~H�(o���Yp�����q݃^��s=��uPt��;b�vS��PPx
�<>Ay���-
|0���m��{��o���p��z��r ��t?s��^a�uQ��O�w+�T=�y>��,�{��¹�lu�S��m�� �oou���{p���sGr��latq��Ovk�?=tx��j,�{
�@��k��
��m�ܖ�n��l��p��rxqؔM`Ws���N�uȌ�=&x��,�z�����j׫��4lg����m�
��om��q�q0��_�s*�9N uI�_<�w��6,�z@����ja�観k��)m\�|�2n��q)p�� _<r��`M�tړl<�wJ�),zy�����}!e��u}Dh,�9}�j��
}�l�pp~.o^�~�q�L�!t";��w+��zU��{
oK�j{ipϒ{�r>�|2s�o�|�u
]�}@v�LO}�xT;"~�z-*��|L��y(x�*y�yr�
z$y�
�gWT�aˢ�ĮkTd at D\dPPp-HG��&]�30���;s�Cg(�� 1DE�*n�6ܵa�z�*�&��<��//6��

�O?��Q}�0$	8
_��{���[w� �/��!f�UmxrI
�WB���5�(����)2����.$
��5U��o�}Z�!O�O����q��m�����
��>�>P�3��ĸg|

�,�X񦁓�`���S$�>BG��
�DǕu��#�i��#��܌-�`
��xJ��!w����
م:��(�����`[H�W��eQ�2U��FD�����`�|���
:C��d���2��~Tv���k��dEeUb2�<o]�^j���j'{@��s�Jɻ�uiW����ŷ� ��o��Ws�%�PFU���V
6[f��
��r�uOC��U(5�?���"/�/��b��;��H���-O
-�o�_�%��{�"bHk�&9q\���W:���r��
�&�G�%2.i6�D�1�%~F���+~Z��C�?��
8��V��
-�2�#�⮪����
ui^#v
-�NL���؏�S���E��Z�Ln�Ö`���=l
�va�;(�>̽��p� ʠ������~��[��@��Qd��F!��7��H��$��������	����#��d�Lt�!BO�K�*��G-i���C��r�B�
.�U�l�mO�>�
�,B�2W�<+�3�6��7���ߛ��@��

�)�۠&KO�
0ޏ� ��O�
igm��82=D� �4FB[���!A�Ib4�~����Z�� 	*��fz\��O�t��F&�����ӝN&3x��F� �[�H��j���z��&3n14���b��M� �zB��!�
��|��+�
�

-/�hw{��V�\l�s��T�j�g�?қ����۟�u �깮�D�}û�.��5�ʺ�(wM�	��ұ=�L����j�e�o(u\���
y�P�X�����Ƣ8�p2�����23�2"uh�0
 �;�(3���-ybݷ�3����Wd��sF�@w�	�,��8#���!��H*9��)iF^
-��P7��D�g��3I�33D_����)�J�QNdO�m2�t�a':�=���J��.�۱�
-s�`d��+�uu�-� ǵ�i�ȵ\L
-�kw��/i���&G�1|91�:H�^��
�gW���@-� E�if�?Q��F?�/�Kv��ř�M�kz�݈u�N�0:ӎ3BJ]�PU@��׊VV�z��D��PC����9>R��Tl�{=E�Y^Sc��yjN��9����6b~mwj

[��
Zl'�d}��[�Y�ގM�:t
U9����WI�-#�d�=�sѣ�S
��I�Ku�Ʒ6i/JO{�s��{��c at 6o���P�U,�'9cV�~�M6���I�Q�1�W�wo��T+�ml��F0��\�O��d��?�o���i��4��M��4M�C%�H�f�M[�r0p�[�
���p�|R�’��/Ld/_c8]�
׍��
�YpF�KM(���Ewo�
@�jj�I0/���k�ad[�H�>��|/ѓ�L��
��|0�0S���VR��ׂV2C�æ���a��v��4x��,'L��82��'�7��&n���&
CĿ���f]9�-f]i<?h��_��]�ǿ�"��a���5!�	�+��C�Q�O�}D{�p����՛�x�էɰ��i��X1kt́K�M�w:�h_�Id)[`m���:��'1��f%s����7�^V6,��0���|����3���3~��+�䔓*o؜w�PPK��
W
��{�W���0�.��
���^�Mq��'r�>{���T������a��4EeNٟ�����ή"�V��_�ǔ3���t�f6���5��ҷ��,� �jP
���6E���x)ͻ��U��Su�@��6M6�d����������F�����V��SˬG���Ŧw�Ơ��u�y�@>.���TȆ���V�Odj�?#驺�syc���A)w,zl<��� ��ـ�B��*��7�i�j,\���P#���;}}�~��r4��fx�O�"Zh���NM��
Be�@�(7���8,i���A#F�a�N}����qǖ*�lf
����Z �ۋ
M��2�HB-����7�߅�,y�Y��#p��9|��
��q�����eے�NYƐ*��M��}�"A�튘6؈U�,��ۅ�#�����||���(qW�,��e��s��Y���!M�����ANJj�e6Ç�,��}��#��5��t�Pc�jO��f=_`�rh�T��k
H���m�=o��p�2���s�(��Hv� "��zbtu�5k#j�� [...]
^ٟ�t
S���uSHt�#v�=_�.x02�y�)B��{�!
-��}~s��<x�i'��y?^W�Ly�SV��zOH-��{=:��{�2�|�)p��}�!g�
~�s@��|h���g]�OR�r:GA=��^2��)��$�!��U�r���
hn����]��
��R��y�G��ƒZ<�����2�3� )��h��!����r��7��h/�ۋu]j�R�
Rh����Gv���:<ِA��2�v��)҈ƃ*"-�=��rY����g��<�"]2���$R1���GD�T��<�����2�䆡)�?��"Y�ׂ�r+�0��g��Ȗ�]/�&�R
�`��G;���
<���42��^�u*�څ�"|���/j	��cj_���e�U᪹h
K��$j�A��+mX7���pM.=�tsk%���v�
��\z`i���j at _׭�k�U֩im�K���oxA���q�7��ts�.��vp&(��y(6�0{�i[��p�_��`q�U���r�K��5t7A��<u�7˙wz.���yQ&��c{V��+}di$��w_O��w�U_�vxKk��x�Av��y�7͗�z�.ݒ�|&̍\}[ '�K~�hꭢ}9_
��}AU-�)}TK4��}wAd��}�7�~..���~�'
�v6 ����h����c_ �z��U��{K
�o��AO����7ԕ��L/���'A���� ӆ��h��ʉ[^񧞈~U�0�jK���EAC�ą17ה�1/7��D'r�	�b!�k��hn�/�^���U�u�K
�ʊEA8���7͔9��/A�O�7'����!H��AhZ����^��b��U�ؐ�K�'��A<�g��7ۓ��$/L�͆�'����!r������h`�JjNc��Qlyf���n�iMy�p�lf�sn�S�urq�@�x u</{,y��eEk��g�mE�j*o��l�p�x�n�r�e�qdtR�t
-v|@Uv�x�.�z={9�)b�v�"e�v���hwl�Ej�x6w�m0yd�o�y�Rr�z�?�u�|.�ye}S�i`��Y�jc����f6̈�h��vRk�yc�n�gQNq�Y?Kt�S.Jx�L��^ي���aɉY�qd��%�vgf��u/jO��b�mf��P�p���>�t(�o.w��
��]^����`c���CcH�l�Vf+�;t)i0�a�ld��O�ȯ�>tsw�[-�wn���w\-����_A���Mb0���ke#�SsShA�!a7k���O|o��>#r�
-�v��0��[D�n��^a����aS�h��dL�%r�g{��`�j哟On��-=�rf�v-�v��m�3Z���p]­
��`��܄c���r
f؝C` jR��N�n�b=�q���-�vB�w�~o�`^��q&cc�r�fB��ti
q�u�k�_�wIn�N1yq�<�{u8,-}py�mjy��n�lp�ptnR��rp/qs�r_;u�tM�w�v2<Ty�x�,|~{6��j�tn��l�uf��ntvT��pEwFo�r+xF^Jt8yZL�vkz;�x�{�+�{�}6�
h�~4�lj�~F�(l�~L�Fn�~Qn�p�~e]er�~�L:uM~�;sw�~�+�z���f��
i
���k�<~�m*�Rm�o_�n\�qǃ�K�tU��;w&��+�z@�ɮoe~���g����iю}�k��:l�nH�[[�pʈ~Ks���:�vw��+�y��Q��dX���f����h•�}j���
Շ_S ��VN�u��1���X�DY� d�0�@�/y{��e��`�@��=�P�����8�
-�
-���x��+����O��pO�T���+��g���xjZ�@���c}9`k`cTnw�?�+�^5�����j�䤢���
T&�o
-
�l���E��x9�
{�Xf�Pg at C_�[�G�=/�5��g�4��ʥ^E�*�z������	��5�#�p�
&��X��s�Y>���>��@?�n���C)�HKс�#�Eu��$�%������`^>[�
-�(?`~�^x ��0���� _�+�O��v&"Y��D�>s�5x'��]����~���-��i�f�~�>NF"
P����� ^O��G�#��
�ǖ����0�<�7�ӆ�7
�:
s���XL��!kݱr�
����x�{6�R�t�"+��@��q��*�7k�1��U誘Y�}(��~
\H��`J䞂��\��
-����5�2[{�F�;�On������ݦ��
�
*C�{
2H�
<��N-�S��2��Ur��u�UKm��5
ųBu��
-}�����3�!�J�H$�
�#h^Qv�0�q�U�Y:�ʫ�a�Z=V.���}V�Z��fs�y
����֧�M���P�8�:�x-k�ն(+�rީ�G�S�I�Э����O
���w�
�iι�9јy��������&��z�8,k�.$��x�=rmRM���R����u�Mb;d��w0y�
�2֤�T�{����
��WƊ�6m|�+�8�EC`��
�Gd]��Mm��"��W�rS禜D��~A���S������	��+�G6W#��jnA>p�� u�w0�D(�MHO�B$ ������vKѻX�� {���'V���'
5�c

-
-�sh�
]T4�I��
��D�G�ãTD�(2BNlz�9�eB_
 ݫ.�#�J�U��bG������ɰ������	�P��c36����߅!�3����?�o /˼�	��4Ta1l-vKWZ������A�p�ɾ���<���>\�Щ��ހk�a8�Z5$�G���d�W#��{{��ߢ��!	�e�8l&�V�
lu4��ʚ��@ԸQ��������WJ"�����
��쎛�����)�9(�6�g
f
�y�'�1?�J��L)��b���쭢���l��]4�L�kۘ�Pp�u�ﲹ�)nCA �Ŷ+2d���EH�'��H�m&Y3�u���ѷ��k�ѽ���ӭ���1��n�]�_Z�<ڮ�Rvӛ���pj� m9G݂������#j}d��A�-u ڠ���
-�0�\C"���
dhK>م�����ٸ�:IF�q�\BVhF�'$�[I�&3����B��t��K\ �D��'�`;�I
[�"��%�#���N���\����
I
-|?�a��8+�ş3�"-A��ש�_ZZ�K�O%u6`����X{c�ͯw1�
���$���+��O�M{�'���E�],�j�z6���+���~�
�Q��k	a=�_���/E	��q����bV�k��&S��7<R5�|m[N�S�<�
T[�'���c�֝"16`���f�i+m�Ԃ���
E��h����6��=��2%w	��\W��w3/VWx�G��k��	(�
+��K6\�G��k6ygf���p86�,W	C	~�����8
�y�q'
Sk���3��vI���ժ*�/��kffԛ]��_M����5Ɵ�$Ϲv��3����\�2
�e*��^\?����|�_��cj��1��xڶ+����em�[�8�
��@��r�1�
��3�4�6=���
�v�׶��
+�f��5�R���j�W����u��M!\��7c {1�
'a����`&y[8#��H���3��Ci\OR<y��0m�O�y3lN2'�\N
`�́QSL��'�}�)�R�찧�R3I�w('�g���V!��pG�Je�ضR.u��.��j�O[GC�����d5�a��L!_s��d
݂F����\nMͳ�&ֹj~*��A��%y   ���2[�\���f�-:H�Leyby �
-� ��}��s����-j������5+ڲkE���Z5׺ֵ��ޛc����[GS�J��o�
Ť��� ����+���unR�Ɖ�o���Q'�j
-���9y<�i;M����B�]
-���Y�5S�A
*bPW#�X�~$u2�ξ/1�a��+���` ����cv&�L/�0�̰��;t)H܄|�E���9�1��ݎ��j�Ɇ'u/���qvC��|���\l��W���ja���C�m�^~nc�=�=�7E�m+�O^�	|��v�d�,�<8L�O�j�%=���
Y0o�}�ď��vCB�W[�K&��I>f�g\"�&]��KOÑ:�
%ije�B>�%���j�:l=��T1e~��/�ߪg�
���I
0^Y��V)�<�^�ϑ�%
-�զՏQS-W��GpaθD�8�ߠ9�D֑Ճ�XM'�
-��U��J�]I�"��mt��e�uuE�)��-3`�Ҍ� SoO��
�� ������6Ju@$�Z�Z��ǚ����;���o������a��m>݄92)@m��{��������
���>�-�V�|���������WU�>r�$Ӳ]
�qّ¸��z�EYuɔ��>�GT@蚩
�\�'��}њG����9��mp.d. at L4
c�&,��r;b�
ӂ���d�l����t3�ݦ�]Q<�
b��-w
��
N
�k��	k�
b�K�%����H���@
j��"�W4�sf��|A�a{��8�c�%�J@b��W���\��E���':Ehs�ř�=�}��9fǹ��T��W�
!3ߔ�% 
פԘ�]YzĀ&X
I
kWdP�ي
�b�]�9g���bI��i�
����$ �O�1wu_)��x��S$P�)m/�UI
�.m
�psf5�Uwl}oy�h�
 4�;=DU�IKS��DS�j�j:�?�2�*w�0P��4��o���+G��4O6�j�eu��
�H�W)ϛ=���ݮȆ��s�51��
o���k���a�I�ӽ֒Wo�0�%>��#}?V�5N���_�����r}��%�7���
-�Լ��
{�!`�D}���K_�4�
-�!���Q\��Hҽ��zȔ�H�N�>�uA-^Ჰ�bg��%+k�5���8�W�	#�wi+���q��0��k�hc��uTT�[����`�5�Z[�`�J�	&���-��v�**��
cs0��� :�-�7���o�3
G�(�Z!�
d
�
�
�z	Q}v��x�'E����}��aQ#*��'���vi�Ʒ|'i��n����˵Y���;�eR{��E�1��v��i�k�Y��T�2����4o�/��;��K�
�
|O	c��
-Rr_��T��'�U�t�Kyγ�z�a�L�
=
z�s#k�)��|O�
���Ā�܇��:a�x�im&��&
^c���ŽoIѓ`�
-���W��8�2K/�ױϬ˽���^��i�����p�u�����O���:JD�:WtG<Z2��]uyy�+���0��H5W�?16א	~u��[4'�)B��rj�X��G���>��<�8Y�J]
-
Մ�y�iZP�-|xm
�4��r�Qe�`�d
Z�H
;4�S���X1̚�`��w����p�u>�7<dE,]��5�J�!
���T�%"��
�7%:�	-+�6\�w�����O��1=�zs��[ITNX��)bOIUq~�JY�����鮦�t ͆/?��w�U[j��+ϖQz�U�R�
�'d(�_���X�q��B�y��g5m���V�e�q}��J��sg[�\[���>�	H�2 
�<?\�`��L���8�n�/�j?*��BgK�ߩd�}��d��"KK{	�LT��k�a�(
�·t=no��4���i�H�A�-:��s0J�
ַYa�<Sebv]�
-�%�;�8;2�/+B�M��q�vs$`ى�Y4/�\ssi iUcd���U���a����fh�6ua�P�����&>�%�C�d>�zES�?��+��&��e�{�\�Q>��+)�
��^T9Z�P���F������� �V+�@������l@
A	��B�
-r�3���
�L2�$��
$���x ����*,^-�ڷ[]��<**�R�������I�<E�|N� �B���j��*�K�=׌���A
���ua�2�%V���/�.RC��
�v(ݴ�ܥ�Kp\��	t!w-<��
��ar[�fA72�:%�E;���),�Aj�&%yޑ$��xPM�E�@��Af�Wxx����M�%|zW�6�J�
i,�o�V�^>npdk�
ŻΫ

�:�������C�������>�
KXi��<�_�TT���Ֆ��q�cs�.�JmZ�E�Œ����:��^΄���hsVIbm8tS��X&^ a*Ɋ���n�^�m����=A2�s��^
�mICca|k��`�K��{��"Y١:nf�,ڱ�W	x�_n~�	��
-!f�睥��#�
��A�ɧo��
(u�
-gį�Vg攷���E)��?n�/ؠ�bd��S�u3�Q��Q���I�B`�\��C!���d�
-�P�,���2QC���[P���һ�n�`��
R������XYU�^��'�,|Y5
G�4-}�<���k�C���fގo�ۆ3 �����7��%�R����/4��!=�a�'��m���fUg�L���(CfU]@::&��
-�wo��߿���D[D$��<��H�׽k���U��*I�#;He6�i*��80C��
 �T�N/h%��
u�hvL�5'�ƭs*=%s+�:V9˲O�%����(LWӖ�s��w��n0~
~
I`����F��嵃v���&��K^U�*^�6U>,�V��{�:T�5zG�Fd������x|��4Z�ٲ�� �u�'�ʦ��"��Ww��[��f^�'0X�cx���������2��rK�J�J�D�������Jm��B�|CÁ=�55oc/�����h��N��L9�'0�jI��.��� ������ =$!_��3�s�^�>pX0�]S�c���Թ`gi�9��Q?�+�,O�|ek���kC)6b���f!)�,�M�����jQ����Z�F��_ ��Y[-�ۈfiv&���m�H�!�����`5o��I��xu�d
��P#�F�
-�P&�����h_2�n�nm��MsC�?�������w� ����O��t�[P�k+�j��n��A	��ǐ���� �H�ځ��Y�*�z��ל`� L﵋TL��0������1|w:4�4o�����(���%����j��̨5Y��J_���|��
�f�����
�y�l0���0����D��O+/�.5�T�"��$8��[g)T`MH��?�Ɠ��\�<f\o���-1�
b�y^�Q���E�E����*׺����e�U�.�_3P}7&^l������X���x��V�MCG| ��0A~�����
�
%_����o�
�À�c`�4]~rf
�5��o���{�/DRe�)��R��'2:(FQ�KL�U�Du�4�9��%���O�
�'����E��Gts���Ӻ|U[��nl�M�Ӵ��
-���/8*�;,��a���8�s�k�
��~!�!�@)�
�֧�&Ñs<-�s�Z�•�2�Eb��T�b~A��A�}D�ʺ0��S��{��{G�a�
oqB͝$��F8���z��*��d���
����:ٟЕLza:J��ea����
���q��
��T�*�1�"}�!�@��k���˳�߬�B/�lEy�~�eK���\�5��$���O�=h���Z����͓ނ9
����`�_��������ݎ�[�9�Ĥ���u2B�\s��
�u5=��@�Ό��p@
�z	t
�;�*+��.��Z�����a]�1��l�R�S���o�����
-�Кr��H�Y�K��g�<�`��7/�|�+4�A���*�K֨8���1��%�
�-1w������?Ɩ����)�r���~�K0�;h���+f��g:"&�6)�r����p�c��y�B��6 b����#�&l�:w����>fިÕyL/�\Z������j�@  Ν(�W�ڢu�����d>�P"Y��d'$�$�ʗ��
�V�J+W�>pG��[��^���Gڻ����2|M
5��k�ci{�
�ZJb��ILF<�fB>�P��C��R7<]'�w����K����QXb����*�
-��$f»��
~	^�̈́:�)�]��}�p��A(��+�R���X� zE����;b1t�!
���9�ݠ�B���j�`�
d�>�
��!�L7g���h
%<d:@dA��C�
�<�@��߈���@��.� ���
��Z�j���@pC䂻Qab!��
��M�b�q�q��z�b��ە�3;����@�A��K�$�˰E�
�N����T��
ۢ�H=j�o�n_a|�1��r(���'�m�r��Q˰�lp;�Ա�{�qe�� ������
=�^ՐYc�I$�ۖ(o%�
��� \�-�
Kч�޻����Α�v��K�W0d��ngXg��IF�~������X��QH��l8'Kr������gJ����
-*Xc�Z3}�E�ٓD�sj�d9F�K�䛉J� �
�I1{�V!xnK�-e>����7n�ׅ���
�_Qg1�R2Ǽĸ:@�n�\�K�X������)�'�WI�C0hݤ�!XL}����
4��l5� Vh2
��,��?��bLb#(sÀy�tk]:ibP�_"��2S&�F��
 ߆*:�/~���5�l�6���fݻ�	���Ӡ��v�<N�E���"A�M�B���I܆=��ӰD��!5��o�G�
]��Ml[U��Z~$g"��H�U�(�>�(l1���u��;8��q������i�7m�L[�@��Wxl�<R�s\�]1�^�>�g����	�Y<�#nMD��yY�ZO�E�X�;/C<_��IfG��u��R���O��M�++c�7�S��
-�4ƊaZ���ԃ�
�����u���	Mߊ]�>]o����/�m^&=�Nh̕.�g*>d_�$��
-]�k����oj-���]��w�z��`��g`�@�XR������
�SZ^6�u�V���^��o�����g��~X��Q��	�濮��a%{s
T���p4{���HLydW�)YU�&R?� �FD�/�'�g�H�7yO��G

-�S0᪄�g
:�po��)�-.XF:�
�e�� �*d�i��G{.㯙nwn.�t���Y���<�"��`����7�d�
�sSC���!�x$��g��:S����X 9
��Y������%�r_��']4K��
��.
q c�Yv�.㏢�
M
r��m������*ADbW냊��M1�Dq�by
��9���m��T'b�u�q�7�O�r�����
��}�y�XK�8���`����微�.;������~1K�}w���ҭ���rB;�ҏ�ޒ
&�6	�Rr���*?j���䆑lu��g�ICk���M��|���v����h�ZY�Hn8�V��z��Q3N?�?��֫zGP
������5�|No�(RG�J[�5��&Hs)qq}^�&2���n:z����ǰ�kFmP�03;7�N�s���i+Z�iӍ���	�^��z�s�7�T�m ,�
��zb�@��p����2�2{�9���6��ʄ��/�=�
�4�)�c���	x
-t&8
�3��B��-�(;�^S��e���dSy�7yG^�H@�Es��7<�A��Q|��h�[�\j���e��Z�Ҏy1|i�-��<C^ow���5���pc�
�P_���<.&n��;ˌpa��[y�y�$۫j���!�
ѫ�$E�42�˚v�?ݴ��^�wnYg?G��9c���K�+%�<qWŔ��z^}NV��]QvS{�q�8�ڷu)?
WV���1l��%�Wy���j�p���0#��>M�']�����|�k!���3h{�&��m��5&[K�i��K%�}UE���k̀��u
hT��[�*�F���k kO��Z �e�� ��e�v]
G
�ؼ;�G��L��W��[����d;o��o�
�3x����� ��Y{OEk[@��|�l��2��섐���^򒼗��F6a	�9�u�UQ[�E�m�'*u�WA���w��:^WfA�w:�R�c��$DZ9-N�7���~c
-�
-?��;�A�34VfO�
�����	5��*Dv��Ue_�Rqr�_����pM�v��]���{�қ[;��f�4�(
�c5ڑG����d�x�����E�jO����-n
-|�
�g8��
K��ٶŲ�]�{r3�J�(��?ұ���q�l��u;S7���qWA}�ǰ�����=��o
-�n��xg�|�GCT�p�T�aH���͗O�0�U`llڤ�C�lt��0�j�h�~��pڱY�_�,x��'�,�IU�jn�\�[M��
z��
���DB�b<Ô��]��T7S0C�o�}�2�%�s�F͘�MQ���
ś�!�7f�Sѕ&.!m����Fk����(+O�
���Oȏ��@
�W�1��f���G
�0J��Z����-#�=����q�b>@@
�g�IxFz�|�����޴\�E=�Y�g6�at�Һ*��SY�����5��T9vh�
��	�%2{}n���}I�90�v zRf����8kO�ʼ�
�jV�o�:*�x��H3�_	
6�WWx�4�\;�5ju���K:��:i�7�rʶ��Y
�Ad��~X����:J1<����;��e��
-(�;�M�s���rlڪ�U[y5�����vw�
(k
--��Ol��
H���WeG㐣�݆L9s����ŠFp6���i&x���Иp0�C2�}�Txm�C���H#�ѽZy�ڇ�m{��+�E�Aa
����W��d
�V�Sy%�ې���8b�ש"SLL����1�4�$B s��&��B��j��&�d@��Y��?O��+82}����-D^�����ݒD��(��P��R��{���Ѭ.� �s��!�$��4��P���ڣ���o
\�i�(�����#�u"��D��8�
-� �:�]�C������>�6����ڒ������׶�*��
����m at 1GQm
�lìOrus�g#� tk-ۤ��<���v+l�U�w
-]�@��V9�9'��3ի��	
�P�?#�0eD�a���S���#�[%�����LY����ƉU��U�_n����F��η4F�/V[��&+�;�k�+�4e[D7\�~YCm[�D�����������4M��
�n/���9�0����:/[�o��`�K����(��
-��T��o��r
M�8���FECw�LhT��l�������
�;=���L�t��^r%���|�TXN��d�R3O>�
���^�
����G�)�
y����
ۂ�2��b�+�Pg�DW�B��;T��
+�4Q�v�����{����9輵;���!f��6~/ė|@�r~��E�M�$,<��`�2���+��oM�ҿ$ȵk�뤆���)<$�\nnu|�LX ������+z-]�:�r"���Xꗺ.KW�;���–YFC�	�:�Aǔ+�I�U�
u���+�U>.+͋�;�SN@]���
���L U������X�Kx�6
͑8=�*�U��4^q�ݗۥ>S韒�
+�Ż
�e�L��sf���	v?���m�!���'�粈�Y��v0��z�ْ2G����wT�1��e{B��H��M�,�
�&fr(y���)�%
��P�����
Ehl�%
-$EVD����t
o��
\~6-�s��/�/���E���
2<뤪t�
���:���mb��p��V�����n(Q�7:�
�ziZ����N�l*�3��m�i��`��
��
s���nX
-�U��\�b�i0���^Kc�=�!!{pwp�y�
�K��H��&�Ș/�U�D
��
�g�#M@���
1�����&����yf_s�Ir����Ŕ\
�B�c���7�H�e�x�Xl��tbu�!��hI
-&)�� ֩�ršbp�s���;�Cu
GF�q�~~c6RbO��'l�"<͖����z
[��T���0}�5y   V�|E�W�r��ф �\�2�aAA��0	��/ɷW&a�A
-���AK]מ
�q\k�P���U�"�Jѻ�?�W���{��j#�'rG�^���$U��)~V�H�D��Tup����7��e��Ê⚊��R�"�I��^�w0�^�+m��O��X���iM��i�-T��5ȝ��'���N�]�~{e�� 
��r���5Ճ�-w��A������-��V��YF~�Ug��BO�Jt�8y�0���.{K��O�(��vlJ�	u�S��0��փy��k�^?��6W��c+�
-�C���l�]
��E�ko�%���ݼ�脦���� g}<p���?��j~�t7�Q|/y	�u�"-�Q߽����{ޥ��w
�iN1j2F��c���߀9uTE�����ڵ粎
t������
�;�HC;o�sTH#d��
����}�[aT���*Ч ހG�X�;Pp�i�t$V.��x�P
-��C�_"�>�h0�[[���tVۃw,���U���^|}�X?����4:a<X�
s��%���هU)��<�@Z�Q�/�[�6���
�.�	�
0A=��f���x�Iҗ��Q�l�3\�P�BoJ]Դ�\>[3��������?,���
ЛMOyI�Oi>�
�'�|���2��k��x��o��6��<J�c�^|5�ܲZz;*�,�1��M;]���U��� ���DQ$6*ړ��
Xz#���U��fZ,k���u���)jF��R6�:��*�hyY���p�I�~��K�SpMn�Qjm-+�y��ɽM�4q,��t0L$t�h!f��
��_�yb
q��X𖠕@�Fb��/r��hf��Z`;k��4<a�%� K�E�b}��9v_Փ�
���U���k��w�3��H��/us���k�`�Ǚ�;3��������$B4\+;�j�K�D�� Z
FF��v��
E��u�{qcʰS��TK��k�
-rS4�,F�S��Q�?���D ��"�u�%���Z�i�^,[U6Pw
���԰�
��S7ž$�
�!�E.����H
���7�^ü���
�u������m[E^����)@Y�MSP�)'b^E�q���c�?�'F����x���m����uym.͇$|��O�Kb�
��1�c���w�Wln��~B
���XfO�yDz��2�MӅ
�B�QW���ci�2�� [
�b},�1�E���w��^��k��b�)�k�,]��wH�ߦ�4�U���mϪKc`�C!��Z�ʎ�5�I�C�W�  �fQ��9�Q�|U���ά�2=��-�I�d����	2_���M��4� /ڨ��B��>oy *��Zo�9��XY��i�����fNP?��1�k�𾠣�� *���_B����u�p�ֲB[�
�
���4X����
��φ��}�����P����73�d"�d
ٮ&�<����ăT�>���x4�
Y��"��G��XF%N�g��t2��S
8.h��pq��܏��#~�
�2�Hl<hކ��
-�aG��-?�J1��p�m�����"��2���V�z�|Raw�~�l�8�
�����4����������
���E�Z�Kݸ���UG�|�B1��&T6���;w��W��ٝ]8���X��y�W���G-����%��r9���Pv��X7i�x*�L�(�u��==��ϲ�͓m
qqZe��&���߰�n�=jc�i�o��@��
��x/{Y���/�r�pՓ�-�k�b��(n��
�J;7��N]�
�	|ט
9^R��,��q��i-�j5I�~Wfǒ�;*~x���F�M��u��ò~�7�����S.0.rm���4�P�M��X��
-d����6���͵�N|b*��4u
v�v#3�֬ަq�V`i
2d%�

�5���0����7Ӝ
���jx��9��x���!K�hF�	bLb4�Ezcl��X�>�eҢ��(j
=����~�n$��
Y9P�K���C‰/�q䢘��&l���r��S�� 1��|�8��+�����ۺ���p5q   �Z����(
�QӸ�AX��!\�$$$C�srL2�$�L��%,���*OQ�u��Oł��BuUX뵊]�x��V��~�n�,��[�|�nC�
--�bY@�X?(�e�92�"կ)f�m��6@>��_�|�Xȼ
���L
N�+VJ2�v&����ǂ��g�a:y�*=>�C�,꽅�zq����wΣa���V�bP$���Ԇ3H����*
-|�t�c^�7�C�v��f�C���UʆN�\�A�
X�)�M��Ȋ��Q�r�K{���Fۏe�"j��%��h��C�����i�24��.$�Ҳ�ɹ�D��Ӯ�?2�
���]HMt���a���PZ�+C��9�J*��_r%QN�H�4�r�{W)�	|�em}�^
�e
��ٻ
-�.�v���_.e'T�)�V4��(F��o��Ugzf��0�=�r��ƣ�[(h��GjK��Ң��y�}����%�]�ʟ%��(y쭬��0�����L
1���s�R1w^N�J�O�7�
��نy�oxõ��O���`�i0)�¿6T���@J���JL#��״��C ��[!�)��9!���w�+����@,�&T��Q�0GU5����a��
-�5\1(���<U~�� ��ڌxݷ:vR�Ȇ�qV���t��.	�d7J���<L���US����0ݠL��w�k^I�p2��Z���
���#*��͚i
�1�.�~��x�E \M;.�7�vD�5枤���B��l�4 �&ɷ����͉�Qs�r�k�d�
-�B�2i�N����ğ�'��:d�a����9�<o�=���:�O8� �Zq��]��\�(�p�/@Γ��H�+�nind`�gA�د0iJ*��eW}o���
߶�x�"omz�r��Q��u
�_p=�=n_��%�!w~~S]��Jѯ5V�Q��z�<�L/8#�
��+�������>-�9]���������s�4���1y
3���yʍ����/�	��G䇫~IĴ41��_�35g%@���.1N§�
N�̡�P��i'�7����4�
�@r�z�8�Z?�
 ��i�;�f�
-�c�E�N�O�ri@�D��
�����u{A�6.ѱ>1���_�:,� ��Jf?�/�L��C�N�N��*E]٭!�����mq�=p�)��
�ݍ�
-�c�F�M�H���?�
�b;t�%��
7�r�~�����L&�3>��ﰞ�
~6slD'9�?��6�
�T­�ϙ��^
5�;�
-k[�}����gX0^h�q$W�KJm3�qV/f�̔��&��|�}3����1���s�O[�9�"6��ε�6
�9�K���+�|d���j�8a�&�k��ɐ���=9w�U�ͩ��?�������|�
���0,����lug��z� �eU
,}*�
��e-���^u��G�S���oy��7��7��bC#Q����ş�n��[�,(
��l�^	6���! ���ʌ�>�"�:�j���<rB�a̪�� NfE��
�kI8<*�͒"�e�[�,�A��v
:ks�Cl.�\șc�+��5*�W
���&��ŀ~�\K�4�sR^�?ӕ��
x0v�>biq������2�$V1�\$���Ǖw��kGԣ����Q�� �%�[�����`�ѐ�J�
Ή	`��]���+Y�)�u�!*�5��(H��Id��a�oE�lw1��7�����hY�xЈr���M��y�A39S��cLYg�Bل*d��lQ���
���P/���Džm���l)��I�R�`i��?Ğ���A��Y訌�:��e���t��/�
�y�sn琸�M����>d�SG�&H�P���e*p
���:��v��F���ӫ�}9��|%*�C��d
�ڌ����T���m ؍��θSV��k��q�����~V�Q<
��f��
-�C�B��'��L�H
�?� 6���ǍZWz��jxA�|�+cs�h�i�#a�43���
�K�Zr?�'H:���m�2��A�Ľ
�e�Эd�c�M^��k�^�C�j#,���@D�L2�� �I~tHGǫ��J̀�e��
�	W `_q�Z�b��
-�"�p�p߄CH�� 	I&�d2�L�)x�ʪ��*j�XEtJ�J]�EZ_=@�X��Y�����#>�(�U���T��#tg��E	���U�O4E���]cD��ix`Ff����w0b(���U
-�
�Y��]sA��vj�fh�w at A,b��x#�i���u+����E���_�X��x˼U-�E�W'��_�@�� c�e2b1(��
h�^EN�
�
-�`V�[@-k��b���n�_P����e�:��60���������l�u-'\��j|D�me;��tH�GD�˪&����աD!ߪ�@��M��?B
�=�
r���Ε
t<�GH�8�Jd	��l�M��
�i�lv>Sw��o2�Y�!�;DL��ž�]��򮆁�����˶�R�����f;˷��-r�
�0�ۏ첸�R}�"��?5#��mk+3�(���(.���R���
xP{K$
���~?
uX� m��
���(U$C[K��Il9v���L�"�F���]C2q�.�OI�6�1�Q��x�	�1i��Q�Zxl��e_��)O&uZ���C�j
7$
6����} �A~��8zX�������m�b|�n�^i>�]��fQ����Bch�JDj^��
k��]�r�ou��#I���h
-8ЂTc�1)�ü��W�+�-�*�kx�u��e�I�~���PE�:���LR]
&��t-¬^�*$M�4-�b������B
����c��鎳�A9Z�u�K�Dۄ������T}��p�p;dz��x0w
-�
��7
? r���
�lJ�����U/�3B��K3h��f@��j�m1��R�זD*��p
����֓�2��O�(
Vv��
-n���d���mMAO���;�1�S`�M����
-a6��)��N�˛,��_
-�l[c�.H�і%�Ŗش+#]l��c�ٶ����$ �s�~
�&���b�~In^�Y�6-�쪸ʟ���/F�R��a`	�����Ei|�o���$Գ��h:)=�k�Zv��6���g|V'E����;�R�����^�t\"ZW��
-Y���nN'⢒���Li�K�[��!6b�
���jnf�$=�+
*�.Ӄ���
K�vI�chP�*%�z��ډ,1-�pGs���D�8D�C7x��&�X���8e�!j5kL��4�Y��
��&Xq�� �Y�LA)$�]�s�_g�^
.��[����fx���́{�s��Hq�
��	������o���݌�� K���Fa�a)1$Poגי�DO̐Ń��w�q?0
$װ����ޮxYZ�N��8$��8��
_ُ$�`�l�cZ��6��ݐ?�
ȇY�+�0�H5z�ቔkQ}Ö<i�|�>!���~QQ���2�&
P{B�cH��|��7g�z�9^sy��l������u^�A�
�;�R�ck
U�>�)����v�Q
�
8�:oV�c���s�K���6��8#7�>^nNk�_�<w�*>��m�ڹ3���"Ψ��Ţl�`����
D#����
����ޣ7W-��#���h��� 
<�L�qf6��6@��0}����ك�i���h�� ��
�ӛ��R�$�0�a�p��s���T9��˟�	sJЫ��lO�
�I�w7±A8j^Տ�ork�l��17�x�&��e���o��U��d!SQ2��b+��(k�m\5
���/ [...]
�_���߷,����c��n�$k��a�����M�=U�lM�Q���"g��Ɇ
5iЉ�5M�%7R�%
q���v�L�S�G�[]]��M����	vK�s�w��>���q|�
-�7�p�L=��#.��[��CjϨ��^w�UOl���Tv�Ce�����������]�j2��0�uuFf�ձ��ʪ�:�AƆ"E�*��S��'_
-� !��
Z�:���Qpt��4��7�rv�윽Ys��9��{�<����Fr��׃d�+G1	
F�~ /b�m1�&��& x��� ,�
^�
�LtZn��D<�t"��7�4�"���ף.9���m��-��6��Iq�5�����5.1g�)�j�����������!0��OD<%n�{?ns
����
����8�Y����F<�p	���r�wPq�D��!\ ���F���KA��^���Z�Ũ�ˍ�
�R���휃�E��Ꮵ��
l�a�������?��aZ�뵘lt�U
��t�W�z������s1��͘iea1�����M�1�g͞���v��w����
��x��e�W�m��O�V�����u�m6l�Ǧ�mav��ov�u��m�w8�������m�^wO/o�}��
��?t���c�N�
:|���s�/\
	

�u9:&�J\|B"
�D�1X

 I�dJ��Դ�k�Y����y��Bz���bs�<��D(K�2��T�*+���RWkjj봺z}CcSsKk[{���������[}��w�������>

z4����g�?
�x����7o߽�0���6m��3fB|=k���s�
�Λ�
4�|K��5~X �p���%�&�(�*�,�.�0���<��6��6�4^����
�?|�X@`P�sB�#�b�$ PX<1����A͹�O�3�l.O I�r���O�S��#?UB�P'
-�B�P��T;��}�
*~>22
-E�OL���_�~���[�������� g

,v�,�cy]
�zF��l�(��}FVύP�q㫪���J6�A�$�*�H���$���Ρ�����`v0;�
�f�×9�zL2���ٞQC|�Q�M5���x��zA�R+��Ԕ k*x��Gj�sH�%Ť^Va�ݼ����r~��Lȡ�3h��
5$؋�#����2��'$
��
-�,��F�P].����V!���fo��Dc&�2`* �_
'ǹ{#	ݰw%{2��>��aQ�*X��
SV*�5r1V/�
�\�����2���d��L9�x~d����E
�]0�
-��
�^z[�AKm���<�L!����
|���t䳁�,&p#�A�e* �aʁ�'pB�r��	}��1��zw�A���j$���
-�,��9�Kͅ|�-��7\c��L�
Sy�
r���Rꈼ_��bl؞�Ұ�U��KT�U|YB
[��3�@S� �J���Ӹ�!�C�2�)gO��|�dgس�u��
��zw��2P�W^R�d���\=M4�
-��
�z�Oh'�
��7�@�nOP��J�-�y���V;Lg�]f�Γ'�R���j�
^[(����
-y�C
�B
I at l3�o?� �q�M����zۨ{�6����T�և�*?]FW^V���|�.G�2 �T�!YHl"	Iͦ
-~���]��tˑ�ն��:6^��m5�������
+�)��U�
-�&G��͒�ҥ�U	�>IL�ŤSK�`�`�;��

m\�o����j��c{.]w�{]}A�][�U���T�5�䄚T9��"#֑�$-QJ֙
-(���R;�7������n
^���윆����a�:V�V�T����ST at e���&���
-�P�kL�l���vw���6�Է�U8{`>��5#��8-Eʦhc�5I��j�
��ɱUx�(EU��������u=X�U=���ux�}{tj�G
-�����4�a�(=���Gr��(n�Ë���qZ��T�i�����vU�肝���
F7��
:&|�ؾ����ĮȬ8CLNlG\nt{B��vx~T2?�]ъ�����?����:��B':����
����n��A���S�+���w.�"nG%���PB��RBz�^�ML�p�z�&*�T@�� �mH����h���؇��Dc���΢��&Z�T_ Wj
�5yI5���LOї��5��m
- � �һE��/��`v0;�
�f��ˡp��;�ϙ־�A���}��U
�l��K��8��SQC#k�דtY�FU��VEr�AF̾!���b7���E�
|��{�e��
��w��Y�쓌�E��8�T�@V�4U4��<7�I�Ii�����������A(��R��@�����:
j:��8������v��ug����*t��E at EQ��
*�r �럄
B��;� !�rI�C at V@�]��_���Ӈ�Q����5��<�n��.>��U�W
�/)�a�Y�/-Ry%�F���2"�
	InK/i��"�t��Y�{�p�8d�|�Q\Đx �i'6ĩ/�U�Ui��5��gԧye�bLY��(k�e��&�\1q�(h��-����Ev;w��Λ�6 ��!5kC�(x�H��@����
m�՝�N��&ו�y
UF�e�a�f5n\+#�$�,�۾���.�w���A��ڐ&�T%_}ؗ�Y6"�s�
��9G
��&��j��
�ơ���R9a�WL����t~�-��m�
��A���Nv$�&��!	�2p��0t�{z$�?5Z 
uTj���]Ġ��`9��t�&	f,���h�؈!� %g�S$��&T<6
n�cK /�
�'z&��b�p��`F*��8b�(�@����H3x!}'�: yo8�I��P&\���P����{�C��@R�t(���ɓ�ʌ*rH1𵐗��&���d��x'�McČ��`�$f��>��m|�S�~䃱ؕ�$�x0�mq]P��e&�	i�#�eF6AWB~��8��QChi�T�ɞ <|�����]z��[u*�nz!�b�g��9�Ԓ�r3l��q
X�r3"���	>��4�SPh=m@����A�8�
{Ͼ�+\�Ǖ--�F����3a��@��4�M�6�;ҩ'�Z�
��8JԐ�pj��j�6 �
D�z�Q0�'����չ=��;Q���v��(��X����
�N#��0
-z���#��}�
��2��Ң��
���>�ƾ#�Ah��w��8Vw�5�C
�/[�r�:mU�5�f�Y���H�7H�����)N���6��S
P��X�'>�}�<��5ӽ�e�~y'NNdtO���ݗd�jM�
��Z��̓x3�Y��A��dE��CM&�-ڀjG
�o����ž�����>ْm\��-��u� �Z���T��S#%��xG�;�Ѣ�8]�0^�`#�Hƺ����b~ں�n��
��A��-9���*�V��i��TR8�
-��`'�yM>��a�AT�m#GђZVZ��˪ݐ��ETD������_l	�}�m�ϒdo�8�z�����P���c�)���Vd�jG�T
�*��:YϪ
�z*�M�� �S�qK�P�}���W7��K۫Ov*�o���m;C��z�z�q�t}�J���e��V�l��|e��ry
I�t��V2�j)�k��b腳��h
�����?��|��lIl�N^�mz�Qr}�\E���+������ݫl(�[�Xp��1ٔ�Z��[m at _Xi�䮠����
p�� v�f�y�?q�)����?GZ�3�=��@W���	=
T�����2lvsd�rڰ
�P챢�ށz��E



����
���q�5�Y�Tp
-yO�C����R�eb

&��l�[Ghm���
��b9��M�%��>]8��!p���~�{��g���k�l’�B�4�2?ȩV����n���I�����6
-�e%2G-8�o 
��Q����P6n�c���N/J/�F�Q�&=	}-9�>#,�
�+�>n���ƙ�,��Π�
��z,�
>3�'Џ�ԍ���I�����6�
M���o$G������Wd�o�s�f��ܐ�T:�jGyh��K�ڻ)k[��Le���ٓ���#�ceA>V�l�
��������o�iE�Ǫ�2p˪l�Me.{J~I�T��"��C�vn�c���5�3�}-���"Ðh�I'ِ,���kHM"D�[Yj�sUZ�CM:f��D˂�
+�)U�
-��N�a��a␽Zfk@��
	�0�,��"IBL�tr�AlĐ
�� N9�V�r�:��#�Q�1��h�a�
x!c��oD��jԀE�
����
�_�dLq�i&]8�N�L�S����NI��S��/�)W����K�lƜ5�==\�[jTv]�٨@�(��W�K�s�m!fwO��)�ii�L�ڤ���?鑓�#�tɕOL�=�?ٯ������9��,o�9̳��t���2����UA��P��@C6����-!d!��@ BB6�B�ĂQD���k���op��9��4����M��re���9�*��Ӎ������RM�d�0W�:�r�B�5*G1G�R�Bd;
�ib"P'd�h8^��`B��5yϕJ\
���L�΄*nW��2���b�߭�L�)�3t�*E&�'	�sd�r* ��i����@s��?��/=:V�h,~ߗ��;{���u15����k�}6�EnA;��xo��
bh�S$u�,N%��ɕ�8�j��
��'����q/�q�O=�`�S)����г
�,�T���ר�s���=@
o5�-z�$^˚Fk�3(�l�UA�?5(��!�4�
��v
��(_uw1�f�f:�w-�}h�X��Kvz�q��A���O�Q�� NϜ@�:&�z�$B/�
��$Gc�*�8�?���z0�;ߗ��]�/ZZ���V��#sY
]�X&q�zlK�NC���d
P<dՋ�c�1ƶ �ؽ�P� Ҹ�=��Ӷ�1��S�o�<X�8�/%��3Y<I�X�s�:�Hs�oe�vn��$�������
G���H�7�G��8`ݗ�$����1�]�\?�2^OdJ���tJ
�z}�eb����8B!���v���@�YN��݅4wBT_D Ձ}`0��Kw������ͮGf�
GU�
l�,&��3�=m�2)�
���(ʼn�'��qv�c�
�F��+c>¶�G�F������ޜ�
=��;����
�èj��!,�z�5�ϥ�+D�`���C��^����n��" [...]
A�
 (��$e��EU���
Ȁ�ӏ^9���������,�>I�oG�s
}YE�HBW����h���֯�յ�������YTw�L3�r�S1M�O�eS-��)*d`���[�������hh��%؝��j��ӣ��͓��\$|�[��X�RK���@-_��J���oЌ+כ�ŋ8V�"����]�?���/&�����������{���d_$]B?�,k�ʯ������2x�F5�x�
u�n#��
s����
-[�������o�y�D��s?����{h�ow���1,��8	�f�L?��CVA��yE%�
-K.?)-����amU����
[�5�[�ڜ���Ⱥ�Mt��M�0���o� ?�s�}*�Ϝ|-��.̩� �{JZV�u

�(�lIne�C�6�����%�F��Q������n�j̍�;\M�{��w
��5��6��4
��q at p�$��{�{�bK��XQVx�

�&�\^f��A{�O�
򒻭��m�����
.���B����0b��
���@��ħ/��d�?��4m�/�o
-��y0�
�w��A6k��l
o�z�=vV�tbd.R�
C�{,�DŽ4�� ��]@��Г

z�Ӂ4#���L�#y��,�xK|�}]Xÿ�C��
�>�A𵲇�i�6��p�D�1�|܎��,H�ψ���P�
(@c���
�ii@���Rq��2��[eaU^��FR��6J�z��!���`
{��v'���
��f��Q��m�)0}^(�6Rc�$5
(�r~P�,y�9��wM�:���(�^�։gDH�D��ϡy�l������"�0A4�t!5F�5�bl���
”#@��
-�)�ۚ�+Ou�`����;�\�
mqׂ�Z4+�+'�8���bqu2Ǭ�N� ���G��t$����
���F��7
�G�,)�������O
'�6��b��gSo��/+�Wu��������Q.ml���c`rj�($oQM
-��0��rIF?�i����#@���I�_�S�����>8�Z7g�W-[���ܫ��
J?&�[���1Ck\����B�"�mф;[��
- ���7q��D
-�$f�Øt�;Sj͖%q�z��f�g,��;�-�^�
�Q`-}"Ҙ�G�H���v��-
�35Sl�.�J7��o�@��
��
�5�p
�Ng�mw���ٱ�ٙ�mu���*ꊸ����/#7H �NH 
	��@HB��\�$77!�P���x �E�.�o�v��[������O���8������bD>������������)Q���6A�Y�-�a�W�j�LGU-o��F<B��8�4���4��N�_ �
�T�%�w�O_�@����9{q�/��ߔ�`P�ɥX���h��{j*h�Z;��0T��J
�5R�+ ��
4x�|_O �9�g.����m�Φ��	�^p���܀bFl���Y\u\,R�ՍR���J�	��K5�d
�A䉆Hl���^js�l�x��9��:�c6:��-
�?��y{"38�\n����,9"ARU��+���J_��ʆ��Q��$��e6W����}HN��SA[�����2�:7�<v7
�=�DU��٭�٭

��ڀ�St$K���������\`˓�l�V��+ ��h���O{ ��/�y at 6�N�.
�D�OFN�eئ#��2��z�
���F�if��D_h$iK�8uyZE�A(9�peko�R� 8��� y� �g�L��Wm
��|!S�~q�`��`�l*��7��aڲ�+�QR�%_E6����̌�VY��:+B+��5-�� M����@��1�u�q���gq��;s'/9���?�lRě��a�$si�
��hIQAAt>�7k1Fj�@3����\=ۉ� <��'��#Gޙ�?�<t�cz�ЏC��C-K���4�
��v"��b$�Sj���ѭ�^��M��;�ڑ�R%�R��1Wi��
�u�%���������|�ϻ{��<��k}�
)_���=������M�V���
�6�(ƆkF�[��
-��m�
��zw�,��F���p	h9���voZ����ͯw�x��p����o��=3��b����
-�$���ʨ����!G�l�0��3Dh�v��Yv� s��)�F��h�)�-� ��܀n�WK�/o>��u��ߎ�o�
�q���xeP
 I��h1�nzY���=�W�u
M��զ��g��ԥ��'�(e]-gCGi.�];^���ɹ�>�~��o�[?) � �oO�P^�M!=�a
Ǡ����tR�l69m^�rU�4��\�	O��%�%�-,O�]T�B��*s�;�?M���w�+��Pm���v{ւC)��#H������ܥ��O��)�i����h�\L�C.�!� K��'b��1�
����HQs�.�����w��{�ϟ��/�2��
Tp�
	�c6�#s6"���b�I��)���i�+��˰��exV��z�:;�9�

��s�YAn�S�K�G?��v��O������W{����$����a �R*��
��ը��1�o���7��l����	���˯�WC^������kh��+ ���qf7�	:�B|�J�+*�u}B�2#�P�C���Ѧˋ�S%e���*���:�g�
c�Ch�܁li��)�
-�`�Fm�5�{����kï
��
��5���!>s���^���sUX�t�9UJ厓���7��YΆ�-P��7 $*g�z0W��]y�����l`\:XA>�s9�
7<�5'&c�E=ff��ӕD�dyi�x	M8ZH�<Wa�T6T�چ�h��AgEt���
L�1��
�A�Cc�#�V��Evr�}fN�t
�1I#7ܤ�	G��ۆ
-�r;���a��t��)��Ch�H�^��0����
uΆ��c�p�.]���
~x�
^Lޓ(q��Uv�����&ro�(�Je���P
��<_ׇ�{Q
-c7Rg4�tFZg�a��CC�����Q��x�!��)(��04e�)
-�T����1�2�Υ�f�8��E‘��6G	��V�����^��؃R��(�E�֘��Y�ՙ�
�>6�.
����"4F�m	Iz���9��)�d�1��
ź� 	F+)mju�@a��7�g��DfFiUcԝR��ڊ�X�x�i�>6|X�G��/@@+$���k��a�����Qbќ0��/�n�M�ҋ��]%�:c!ר�ZTxY�
��jq4�F�ּ]X��yw�?����=5a' 
��v:�u�]��㌵��u=���,�"�@n9� �$$!�+���E�@�AHGBB�p��EA.�"(�hA�
P�뷙�ӗ}�Ї��w�
-oP�E�i������ԑ9�q�ͩ�[
�q)Q<\U�h.g�Y}��WS(35Q���EJ�Yj)zS
��h/P�k�����<�^~��'���?aS�|�� ��A�
:8}F�/�R�+�����|����cha
-�
4�Y^��H���j��ZU�7

-����[C��1 ?w�<}A�w�{�_�K�yē���]P�m�p\�+�ؐ-�
T�ź
ˠ��RV�YĐ[�t� �X;�-i�(i���7[�9GP�q4z� �g�6����@���0�=4kֈ�\�c�-M�ANTij
��*�A�+7V�	�|��ZQ�4�f��m�l��d/ �5���
�@��
-�ݽ��#�]�w̋���Usri07mN�
w�ˌ|��!W��Q�RQI���c�	fWlerU���:Gg���&{�� q?
-�n.���
�����|f�0�rg$u͚B���8�6���9�A�$�Vˊ:�bVoi
�L�,EU���J�@!Og)������@�v4�>4�=A�[�+�g�� $fy4"nv,9r1��gJc�:�5J-AY�L��
-:J匞Y��*��ϗȭy�5�Zg!W�����6��
���@����@6,
�G����D�OMBӆF`�+��٘^-��+*u�j���/i�u�U
cnC�9K)��7h�����s�z����� �5�]��N�������ٰ;��T d~><lt&a
K��]��VTUu_���;�����#�;st��x���m����-&ls{^i��
� 
-g�9yN�nZ�Ϯ^sw�s�9�
qq.�5
��4�̨��&��J���l��d��2zY
���.d����ؓj0t���=��#ۀ��{�:y�
?����ڈ���-w����~��B�=wB���(��z�?�1G�E����AR#�R�ƙ���6T�P�f�kG5��^C����� s��
��#?�
9z��	��%g������^���t!�̛�a2�Rx�c����,i�p�?T��
Л�VN
��W#�E��~���j7 s���Z��o��_;�wf�����	���.��U��/����`
-c�(�� N`+�G�D�+���:�%Z}�E�2u��>T�J
�4&
*��o��w��}��
��u��?���z�X�c���Α�ggS�+~��P2u.���3�M��V�&����*��1Z,�_e����%I#\i�P�pYRg/Pph������m�s�
Y��}��~'�kG��s4���T�j`�ޅ��X~>�3�e�n؈��2�4�"y��
���'�����ʸq~t�Zh/���5�����k���o�f�صO�a��8�s߸F�_�$����@3q˰<�R	�����d%��'���nQ�q����4f�M+���Ҩ|������׆�n��|�q���j��
p�Ch��#�/ⳟ_�c�bQ�G0l�
-�%=+�>>'n9;7�^^^�=1�.5?j���D'_X,�D,�Q�n�����?��t��/����J���\p�
��&��w!��ב���0؋���g�T�StZ�
*j���|��
�	D„=�bC�B
�3�WYx{�o��t}�5�[�,�w������$	���4LB�A#�oaQQ���\x�����ą�ʈ}IH��N��K
�ȇ�ߠ��
��K��e���'�s�}*_}�;v����$p��;���$p�\,��1~ �?$�� �
-
-�� �
��!�
-9�~��|?��}�S����R�
��wp����^@
��Y�H{��VD�rqQ�"�Ş'Vpo�TU�$�V�d�DױJ�tz�t
-�*�B��M"{�i��1�����a�=~o����ض�R[�� ��Q!��q/��e��UV.y�VH[(`��I����ʪY���L<�SJ�0Mu��V���~٫�@(���C��
[����=着0�#�?��/0�S.2s�C -3)��bg����$�395���t2C!��6+�ӵ�khC�5�Iu�?F�;��; ���?�z��{w��]-�SUԧU� ""{*(CF�
-DF$L�@	�;���/�d:�!��Z
u]�{��w����T
�*�� ʇ��F� �� �9xɉ��Y��9E���G4v����؊�?�Ƹ�@��ֱ���B��J�|��/7)�˜����b@Ջ<��*���@�
�;��€ ��f��e>� 1K�Wi��E2�c���9��rg0]����D��g
�Q])����ܚd��]ѯ�W�iMU}:o ��@�
:�v N�?ćѱ�@���F�q�?��.�[cT�(��y�1�o�M70œh~�8J�
��h.#l�QD���ҭ�W��F�[�����3j;�E���#@�� ��O���<��~����.;��YK��h�k&�qt�d=��r�T}�J����+z�PU��X}Ψ�9gT��z�<����
�#��8:���<1��)y/�%O$y����evU�m:�>Cn�^!R$��,�@�P��18Q�r�
�.���e�F��Һs&o|<�#�A��D
�1�@q4�7剜_���NJ��5yvAT�<��P�hx�0�,��w*
�\��^j4�5]�ͪD;��:�U�qZ�W �s��~���,�0PD� u������gڴ‡�lIJ�}����8Ma��)�BU��,��QdRb�n��&�8����mpZ9�.�7>
8a�@���*2
-hc�^�3~1��3�J�E�i�颸����r!:Aj$�U��^N��Mr� ��s!�����&����xt�~8���ۀ��>�4�@s�W�Ѵ�m)9�PV�-kQŸ��iP��8��
S�Y��FR��4���c�4Kl]
�I�C4<Q	��z�á�s�
��!{�2� Ѕ��f�NxfKH~�Jμ��Οu�F^4��܊����p�rf�J@�г:���6��BRBd����
-Am-[[��ꍏ��m@��Ch�[kd�+>�~r��`v��S�!��C����k��B�D��+Y]d=��a&���JD��
�;Dlw؛��7 c�_ �so����`
-	y툈z���6��tk4
6֗��7Z
��*�-��Kآ&%�ת#q�fB׆cʡ�
�2 G��MT���C?�����.�X��
[��Z�H�����5:�W�t6譥d����U�E��FIҬŋ(��ZǗ�kxZ����,����z0=�� >�=P
���~�
���?�Y�9=1��y~4����t��V$�a��i��x%A��!j�Ls�LdE�Զr��V!tZQ<����s`� i����	,{߸�?�x���Q��#/N�e��`%���z�yx+�U��nG��z)�xVY�'i��NC�V`�k��"��|Fy�T&�`y������'_ ��z>����#�n/F�\L���z�2���Cs/)��Tb%Ӌ�\8y��U	��B��+��|Ȫ/����:� �� ��{7Ӟ޸��h�o��;A[����,��8N����(��V�'O7������*�
�����x�Uzj�ޝ;�Wd�(aCV%l`P��Pyp<����}�捑
�^��g�Օ���B�
kQG5w�a
g����7�p�kŭ�Y�l���hd����˿L�^b��/IİK�(�� [...]

ۿy���7�S[��Z�����
h=(L�0��~l.}-����Z�Y�n@�."��@����P
-g�SDF�d{W���5��d�˸�:n�8� �
��� ��\���o3K>^��=ݻ_�%�%4��$&��8�� ��j%��|	���A
-oմ��Ķ�^Ƿî�:�f�Ԍ&��
��6-�L��zH|�

���b�?����ӑu����[}U��
-^��^��_��b6��Q�Y������U8��2��Tݘ��i�-4�3�4�o��'�iͩ��ZRn
-Z�o�H� �͟�s��ӹ��?}����W>ߪ�m���7�
-�b��#�1��e����n��
��?�#s
"*a�Q��{u5�k
�i�xt�JK}�
-��L�
��jH���
-0}�����0:����[gAM v
��t�v�3�t�љvZuծ]��u�C�;r�CDD ��@	!`BBHHB�
r�;��
\B���ZP�X��nŋu��
���؇}��f~/������76ذQ
����@Bbh�\�
�Y��u��un^�R!��
lQ�wL�s6���H-M{��#��R�p�R�ʒKʓ���7k׌M�rM��'����?��g�İk�S!"�	q8@&� 
���x�w���3�Ks�ޖG�!禼�:�����􊑟��� �%��� �X~H�<�齾v�m�Wka��İu�~A���D�
-(Dh>�F����,�A�C~�I)��o|J"��& ����x��ŭԤǮ03b��gF��}P����M}�3-�z���[6|�Ǔ�oK�@C��' �룐��A��
���	P� tD
`#c��{xʢ��
�H��� jl80bÀ�!s�'�<�jc�/q/Ӄ@�

�|�
-�8�-�
��QMxFeU>��i�HR�|��� ���/1����{��.�K<[�'�-<+�A�IgPW�7
�K���
�g�����
-��� N
���H]iD����/X�"�IY����E���M�
o��(���
-g�]�Yt�d��_6]8��|�pR~
=)��L�}�U�z�����{@�
yf4HsRA�:�VPR���X[CY�q��Du*ܹr��.� ��Y%3X�lsZ~=��*UN^i��\U^,��t{�gP�5�y
��- A�Er (ӣA�����eQq�����>IY`��<<)`?����5�Y�^2]b����+�0g�n�Ϫn]T_�\V�c/�=�˚�%>����x[@���A����#I��=�,-B-	��g
��Vm�<�Ǿ_%�߭P�f�ZewJ-�۸�?�{5��#��	�%��Sr�y���UC�� ��
��ݠ>���Ф'��X��ʂ��Rl�Fy�C���r�sT��I<MlQ��[T�p��o���|s^7�׍���
�/��.�v���?��A��bw�&� 4'��� �Y��4�y��h�s	��1�����b���U
-�I��I0k&K;tWp}��Q�h�� ����켡����E�
p��� �
���
���0�'#@����%'��U�������<F�t]�]"�JQ��I���e�V���Ɵ5
�L����:�cmvҘ�R�U�o=HB?M�h�> ��0%ŭ�Ґ���Ǟ���݌!�W���i��
��K�F�M�vW�Z��fC?�������]>jq�F-V��Ty�l���?d^�6b�#�Sl0�b�Y��K���O̹�4�KftD�uE5s����px�!�D�GS�vWL��v��|�j'�mm�
���c�U�Z�գ_��E�&Ѕmc�~0��
�֑��ܙ���y<wΆ��4*&ԔZ���?ȯ���
5�L��A׵YNZ���Sv}ՐCW=b�PG�*�Ǧ�y����
��M������5*`��#��Tr�+'{�
]x�\Z1���
RR�=b�������zScnamZ�ˡ��;�t�S^�v�#6)��U�kPo��࿂9�KpD�����+1v�'=�~��o�P�K6
�m 2�4��Ny��&�j�<����dn����L�C��q���N!��hd�ؽ�|<���5�mám`	��p�官��z"
���
�AN�)@������2FW
�gW�eF[�5��YҠ�5r�N
����
{s;��n;�~��U�����
� Ơ���:��9
�8p8tޝ
55��:ї_���{m������L�5�X���I�f��;Kc��%�t�6�u1�N�mg�F||�A�54n S�_���B����{<�|p!-�'+�������E��K�V+���P-U�j�����$n���l52��*mwVK\'%n'M4b�
Gl��� :�t���Vh��ÙC{�3�����݉���${�����/$8�p4�����R$b]ՠg�0u�&�Vi��[�*����s�TnG�|�N�yl�Z5H�Z�~��f�<�m�?p�3Oخ�W;oO&��g$
���*������nB���,������k���8N9E�i�՞��VO�:�c��w�+��MX	$���
aEО ��� *EY�dHeJ q ���.�{�1�����������wRX%*�U��X��ʄ�3��W���7j5W3K�]L8�(L6@�շPv�j�{��
5�m;n2���I�XKg(���Q��{8���$NQ#S~-I!����-P%_��e^*(�֔T�j���5
U�ږJr��Jj�n��m(���v�O��n�ص��Ю�
��QW�GC�6�{�}�:#�/�a���Dzj� �vB��&�ɸ�R�1�
��<���
s��
�x�
{�a9��n��m(1��̷C����;vNw�o
=��c�e߽1_�ơ ��di7���NH��Q��
Ƌ��化�|r����+F�U�hueI�����\y�Qi�Ggt�mù�[���6�����_M�y>��W���k�:nv}�þv
�sv$4��y4A֏�K磻��2��n������uJ�����UaDG�2��2��2�qwQ؃���R�pa�WPg�����M/�
�uL�nm�X�i�����vu:3��_0
%yN䍡I/�ɴQ:�8��nj�	��%b�P�,|�Tv�@�<x�֍���6yP�NPl�jL���d�a�s�������
&ۯ-Z�^��.�wv+����F�4�DM
�2�gfhɘ����	
7�(-bL�}Q(U��F�E�#��#׵���v@���W6��{��ꅿol�`btq�|ɒ� [...]
-�R�M�L�p�'ʸ~�<�x�NPm������
z�c�\�c����]�Ofy��lş]]��H���G$�;����zO'D�M�
{�BYL�������y
�\Q��F��є�{�V%�ܰI��e���'���_eP�[OÏ�s��,
�r��1

F� �
�\!��}�!C���
-�+&�w�o��F|���,ea��rq^���T�wg��t�\�w��@�~`�`��S��6��%�#�䀣�mI�눁`�(@z��;��@��F }�
�
�`O�x|�
u�,
s��s��
wY9���k��:�蕏����9�"0�.��2�� \-P�s$mC �> �������^@q���;$����8
ΐ��BOG�hO����t��P_��__����r��:!͆�i`�=l���i_(x� ��1����
r�a 
q��#��$������� ��
��$v�@���m��dx��8�$� F{���8�
-;��("���a��)^ST���S��

��7����
-Ә>��ɟA�dL�

�b�c�!�3쨠�bU�o����m`kR���S2i����@�� 1 �ȏ�l�r���>>��^��@=͚#�K�+���ڴW�+�lc�4�`}_8�������1C���Q~u��6�hx�F �0�l?
�	�y�;H� �!?��)|�$Y�"3?i�V����徊�H�!�fL��S��I̝�It�x�#
��{���v�MH��!��!��M@�0���c��r�?H�+��e.���%f�N�M�c�H����͐/dLk�����	�
�V-
�<����I��ϥ
�A����������=�j�2

!���}��A�P�t�<�d�F�d20��)䷩B��$9K�Tr_�K�Ӕr�dlM��N2��Y�ے�۝=���$d��>��I�9wȫ�_G� �7��^P�
�6P����%��Ȩ�ea�-��\`�X���L��)jY��F��X����|
ך3����"�紒�jro�/���&�ꀣm�j�v;!��Nz�A1������
-1�+�d�)��V�a�s��YV.o*�X0N?'�Tg����<'�T�Zs�{�ZI=yw)=�?S�4О\�������
�	���p�� �|��*�N�{���?(�ы
-Q#e�MeX�q�i��Jѳ�R�SF���z9���X�FR����w�O�M�n�Uzw�Oq��KqOV<mC��!�v9���~(�>g�
�Kx}E5��q
�cu��(�:�ʢ2�� R��^��P)R @JH��C�"BE0	A\��
���g��nև}����9���9? 
�^��!H�yY����z at -��F*#��1K���cH9}�b_�R�h2/s/g���f���
97y��7�
H���P������a ��� ���0����WRX�3a�A
*�v
=A)%�(����j*5ybf?���7��
�+�@\��MH�@�2�	��
 ��P��7��]���AP�e���B<�*#����
��q�
-r��|�h%�x�\N�/b�z�|VV�iè�-��
-5(n@��
-�^$����k�
-��$���ub��
-wk�<s�S�߉�MAn��#��6��kH���f�Ǹ��H�TA�t�VU�հ�	b��@)�Ŷ�e�K	��D����
�b.n\���
���Pbj����u��n@�i��f�?Z�_��x�
�w�))J_��zU�B]��;�Ŕ��F2�]K�D�HHh���R~DVM�I�D��Iԋ��q�9���@>��
�d�߁z�����f���������0��]1>���F��)�\d7KheR��U�r:[D��x%2Q5I%eu��aYI+��t�J�^�%�(G- ��i��l	\~ N
�S�y�U�����0��.Fy��a��M𔋵d�CPq	d��&��؜�
�L,�Q��d��J��)��B�J)d��B֋�$SC�
�w�N���yߧ6�Ʈ�6/���>

-q����J�hMI�l��m���"
Y�+�q���
&�WQ%�+�ŕm��������
-��T�����bs@�����
����@�ӞE��o�ܭ��
�-�~b0�������䤶�
�2'��rą�
>�U�epK�y�B�B�c^��3��X�VV��IqUz1�
>7����� �O;A������
t����������
�z��B;��~ICț���F-��LZ�,�8G��K�(^�4��#��J�
�]�c�z�9���@�Y���A�����}�O�_\;��������n�z�G�PLh�%���%l�Ʋ.�I�*\Y��������(ؼ
�X�%m�K�$i�k�
�^�-!��Bs@�i��
-�?�l�u���������?o��v����9�ц�w�D���%H�S2�{31�����|
-����n)c!��5�*!/�Q)Hj�&���I
A�� ��
|s ��Psp
�3�F��>�M/G�l|t�ĺκ�>�m�w3ȭU��
�
N��ӑ��98�żbt�,��B�w2�I
�j����Vs�:�L&9�Z&9�&� ����^
M��a��ݕ���ɤ���v�O�
��e�q'�Ey+�_h��bh�'�G���D
zCȺB(�k���AzE� �*f��5�Ό
�0"4ӌ��)ft��
Pnj�
��
X��o��]+o?سB�쨅手e��36M�$�Po��(u
-v�0�������2`�R��y=�0^G/�����z*T�N
�k��㷩a#3���
-s �r%�ۿ
-��V���e���
˴���
�?��s�i���1�ߓ��A�ԇa��q���I�w3�S��Y*v��5�(������Y51讆to�4��0x�Q�9���r�l�|��Wӆu�s��^�Y�~m�����Kw�|NQ^���#B��q��s���ғ�i1s�̈����9Zn�
0/G�Ϸ`��{�|�������{�c�n[:6-���2vk-��oV��Z�m-�F�C
��q�����4F�c����qƴ�(c
j�&��Rߕ��}�L�{#��}�����9����,��W�ϼ
3
�, S��!��VC�fi�}ؼ��þM�G��N�K?z8��O�.{—��`�bc?���[BD/b�>b��S�P���o�9����3)�{��J<��#��}�Yw:W at F4� �WAZ�Y� ۾��[h�Ϊ8, �v��
-] �#�xA�7���̀� ��}@a� �zZ�`C�?	�O-�"ܖ#�>6�5ڷ�;��2�"{��+�vM%��\
�-��yp�I^vq����2_gQM�g �9�=ǥ=Gg��>�(*(�Ȏ��;�H�����d%|	�
��,심���@EE�R�VOU����0��l*���w�o�{��_����;�C��i zC�g н����|_H���)O��� m�;�ݠ0�ʃ]�ʬ��_Y4���(��"6����5p`��63�q'	ܭ��c
��~�3��!�> G� ��P
��~�؎
�wr��+ ..��:���r�N@���uᎅE�c

��*�lظ
-����z
�H�MQ��
x��������zAԾ����DkW p���N�8t8�
@`s
$��@fk�a;P��Y�l�����n	"�
�b
H�Q�ƺ���<v�R# 9����;����PN�@<G{w>�
����oc.᮳c�ً��9
��ܹ�1�1���������?�`
v뀍5�}w ��G!�Bj�/�Y���D�}�鈿S
-�+�����5�wq�����������Y���.���棇x�c�y/q��1�4o(v�7��kH�x�� ��A�An8�x�|A�

-<A$���5��y�Ki����F�b\
g���]�����n���y���yʟ�M�	S�ḗ���i�9��X��d^�
��g�A��F
/��S��B3Q�SJ���*�bBg�x�7ۖ��)�����

-_ឋ&���Q�KQO”�
`}��v�A�l	��!��Oہ*�2�| �v$�S	�ؙ��d}һ�"�Rb%{�Tϛ��ȟ�k��������%S�1�(��q���7a2����
`c
,�A��
(=�����
=�H'P�AI#DB§�
��6i�^�\��s��u�����Yb��M��ׄ^�
aT��8.}��"��4��!O�nQ�e]f|i`Yi'��l�m�����`
w=��	A���Dx��"���S�޲L�7�R�+j�p��$y��t2�3m�x#>����e=�1��ı�.��$�{5p���נq�
-&+����0ȋ9	���55l	e��Ԅ��J�tJ{�U�K�?Mj�>��"��k�>��G�>EO�sE7�ڙ��+��2�<�b
)�׃��א��
�{�A���1(�r���hH<=�fDϠ��H:�X�
N��KS2jd�К2�SB�Q��w)������봑�6�HV+c$��i
���:����F�-P����,��SY��r	�g��2m�G�k�q#(B�C�8�z���B�]NEz7�
��ܒ�I���N����/3����au#kX]�y�2x�V���:ȶ�yΛ��k������?T�9���>�k1`�0)쉑Kx��P{
-�]D#��؄t
-J2:xՙ�&�V������"�_�����8C�j�7�1R���u�Ӳ
-�6�Y�
P��sM��ҹ��>���j���Y����,BO��z;[��Rd�:��MR�h�g7��5��V]=����{__�З�s���b���
�c
�kA��EN�Bv?k��|��?0�j7��8�H89PE
-�-a�o�Poꤜ�Y���B#k��
�����5�*a��\p�P&�k,�
-E�|�>O<�3�Kb��XC�㟡�m+�y�~�oߛ�`������b<
�&������Uȥ\5�9��颦�lY�€VɋTg�*uũ�
�6c���dJ�3��F�t@��6�cv����`���^GK�q��
;��}�^]
-��h;c;����H
�N�]/eS��
�
��V��Uf��Re�� ��$�7�e�MZYW�F�0W-�3����|@o�
l�1a
؜�u����m��%�]���V�;B=��v�B\pW-%�����\�g��KE�R�S�y*�ʐU��(������E�_0}&�7���9 ���@�͟�
-�S��߮\t�n��c��u��O:�>h�p�{+!�Z#9�RM2���Ǫ*
K��H�)��T*m�N��6���M2յ�4��\D�gB������9_2����?B��
p����%�M�u�m���w��������u��L���@#��p���BA^	��S�T���:��:��8���iQ�i�m��lY"��Y
�Y��9�}�^�Pd9(R�6�� �D�)L��I3�	%�8���)��������������|�'r2$E9)y���W
�ro
���
?(}S�ӑ���)�
�֩ CO���ǥ]����%c7M�5Y,�i�Y��!i��F�y�-_RM-ϻ�R�?{9,��Rl��|RRF�$5�t����YqE�������7
�
)�ɏ<ޑ��)�
�
Y4P��SF��5;��/
x�W�����g-���^f7�2�����.Ԋ��U!AyW��2*R/}8�Bfz��c�%9�gʥAgj�ĥ:�NwJC��rg�EC�zu��6W���zs����ms��w��~a��������
�5��e�
J�mN�� q��ȈԪ���k�Rb�
��WH���:&*���_V��/���+�w���_rDg�f�IkU�����[4Pe�1vGO}�MO���@�ٛ�K�_�o���mϕ���Y�'�	�Yw�������F��HN�M?x=G�_s���b��:�Uݔɬy�ɮ|�ɭ�
�RA�b/+�զ�tU�|�J���
-�W�mR}�m��N����W���)6'�����|�
�
��c�DŽ�6%ň��w����3�\Heܩ��%�w_J�{����1��
GV(�d�2*uT�n�V�y��xիE���5��.���vmy����N���5���ҏ��.b�<
�>����o�DrZ�c}[���-��U����$r��D���$j���� {�.�TB�2����/^�#
.SjПS3�gi�{ݒ>'��
O��
��q�b����_B�]�\~g��ݑ&ft�{w�
�t\
�ꨎ��l�t�z��9���)z68�D	W�o��Z�?u�#ꇗ�T
,��i���C�zҏNF�<,�i�QL�����?Л����O`��S���,�W��}��u��e��y�UL��+v��S��;3��$~�S'��� ��j���#*eߩ]�o^T,7Y�+��O�;'�=�#e4�@ӑ/�rdbO�,�B�
�&��xȏ����Y����h����u��X#w��v�ݗ�
-C3깢L<��F�{�F�x�A\�T:�����۴�����|��O'�w7�S�x�
[�ׁ>!r�L�:{NF��N&��&%�����S���T��˴}P<4�Mt���
-/f�V��wW��kS%*�4�ҩ��ǡ;�
�Ra�:6�p`��F~ �0�cF����n�uF��#��#��G
�!��
-E$K�s�@��9�]��0�������D�
�T���e��8�v,����`X�`�

�������N70�I��> ��~�� r�>ę["��
�fȱ2E�>��ރ�w��f6uw����	��� r�3W)
˕��
��
�0��b�
-�WS���
$x�9�[�Lkp�XB��A������{��c7$;��C#��@��!��M�O��/	�X/A�b��Ah)c�� �5��2�
-�E�0�"�Z�
+l��<W���z/kL�^��u��!Xw"u
�~R6lE���8�� z�o�*XF��[h"�n9"\tEق�.�- ��0�	�#n��y�YL�<
>
x����j=���ir��$�5w«�����
�/�U�
��r�c3���\���嬃h�D1w!���av%8���?)�b|������J��ؠ�s���~S�6�$�
o��=��O�Q��3M�����������Ad��pm�:���f�2�ɷ@H�
�q$�K��ˡ�S�
�YeL�T���~S�z���7I}��t	��_(Â�h#�t���!����	��Nu�M5e��x�uH�،x�1b��Cp
	�= Ȣ�{�v)�K�i�5�)�Zޤw=��@0A}����N�7�PF�,
���`Ȅݾr��<`&��O�l��X+m$9�C���iF�g�#Zd���= ̠�W� ��5���o��*o�Q+�����~(�F{.���0F�0L�
��w$�
sD��%
lg�gEw�:�v/@��2
ڿ�.���b�����ϰ��=��l.R��-�:�{R�U��p#V�$BB��	Y$9Y�$�0B�aod�����(PW+^!,E�^������y�>���9/��y��w��}�q�z
P�!��q��O���(
�CT�=��gd
���W	o#�oŸ_F� M"�#Q/I�ѯȷP�(7b��5. ��
0w~��B~`9P�XT?�9�; �
 <�q����
-��'j��p1�Ƙ0o�E�ר*���F�
��<��� ~�L!f(#Q�Q�P/i�1s�k�9���9�= 
n�mq����b��5�
_
4!ۀ��?P���(�}�c�y�J
MKB�$��g�s�f����2�dL
e
�N�E��F������c~c�Dϲ�1���
vK�} 76���'P�^4����c�A�-�B��ǔ�}�7bj�
�6Ö#����qr&�)�D
�Q
a���c����n� �.{ =����p��3�V�snC�sn
�>@X��\���V���?,� ���!tǻ4���̡Y%�Դ�jH�#
u�z:~��C�C��o��X}�:No\{�5�M�U�����?ͯ�O�+���r�3��n��w���f�B`��
����9����H�Y}L��p���u��D�
(0�9Z�MF�5��M.�t+y�&A
���	?,�'L�����2򤨈2%�����
`�u�M
����%�;��������sy�~���QC|�
��
%�'�bzjb7���2����zj���R�XM�I\I�-)'�K��b
mB\@�ḨO�H�8�W����w~r���C��s��k��
3�s�63��Q6���4r��6�[!¶K�&��~�������˙��F����"�D�]�?�L
�4�9.5��%Y�	�=7p��H��`�1��],��
Y1W|r�T��MO��w��eC�/0m�|L�"�H��
-Q��o\J��h�K�ٍ�
�U��}_����6HϵIӹ�{ n�����
� 
�O�
�O�?|�{��e/ʏ��U�{P
��u�''�L��٠K�T���2��^�fq� Ohg�K�
^�\��R����Q��?&�
-lLj��wx�Ѭw����݂�{��"��YMв֞\;T
�w�}�˄
nʦD֤�c�tB�5YN7)S�92� C�'N�E�E��C�,P�GI����1YR�
�P��J�[�r������Y��¹�}�'}�K��5U�v�� �Y��/�Ηg1c��|�I'�S�
CR���(N�Yd*�R!�Z�2�_ɞ*!hTAc2����p�x�3H]��}=@�����]�_��Y0���^���}�gwt�#
cOU�	E�ttAV����J�N��S��r�Y&U�+U�J��J�����E�1�Ha���U�@�5����i������
�kwxN���|ҹ�k�5��zC���������'K����Ԙ�<^�-�j3��$��/K5�u&��-Qp5
J�暒�
Qr4�rn�,Am�����@7d���K[�>Tluٰ�}�s��ë�
o�txՕ�`ߦ��*�P'�����B2�p��5	(�\��<af�(��+e��t}����VR
��Q9#uL��� { 
>�R'�
�G�&�w5\gZ׻�^��<|}���W�w��V�
Pr9꘩{.���+a�%��R��!(Pq9���<���c��952|N�<>�g�83mR�a�.���	$�r��t���
>�SWV:�rk���>��W�X��}rKEG�
K
2�؀9�ZG@$U�b�\��TDc+شB-�h��.Y�K�}�6(E[�%XӸ$.wBl���y;�
-�OU+��ڼ
G��
��r꽳ݳ��Қ�7����y(�

�n���)(A=Ǯ��52:�Z��Vf$�+̂�J��]���#���EO�P�)�=@��/q֯
��/qx���po�ӡ��r�Ο}=��K��+��3�F��NȺ��	:�VMi���	ӒLC5���vDS7����< ��]~�QmP.rF/P���m��`��C߽yݏ�:6��Ž�ў%��GVg
�� �
uDЏ
f��B)7��^^L�u)6�Z2>����u�䝆�c	Ъh](VED$
-�*���d��/�FI�
-�
��Œb��#ngT
-.uGܷ��0�n�
-�B��� �39��+r��?����%�R�C]9�˻R���z��U.y�;�w�;�l�`�W��q��y��-g��?c�S�_�
i���y����=*�|�	BKZ��JO6>�b��)MS�X�T*�4V��Uj^cu:��Zvc���tW�n��`>�ӳ~�˴[��9N;W/9��'��%j:f8�����#�m�ϲ�L�����viTv�:^ۖ��֚ǔ�.�[W���d�1�u���V#e�����ߴj�����%?
P�b�v$�k
���4����mv!�&��2yҶ��]7tG�۝8������
��/�t)�]�8IWN���0�׵���^�bvWrR��s�L�y��c��?��=����*��˷��	��/����m��
���$������K�Q���	���T��L��
�e��P�`F80+�c�_ĴŦXJ�U$&
U%�
�J�>�=r25j�"#�C##��K�n�D]�=q�=��ɑ���gD�Gw��>ѝW!p|!�ݲ7=�^Jp|��R��q�^��>(9!�Q����(
����H����a�Y��1!��;����BG.��;Q�ȞX?2�n
����)~c3:Q��/�H�& Ã
r"�d(|���!�/1��B������?���T��`���G�MG�	b�
��� ֶ�j��+��}<
�Aw�#`�
'p3���nI`�ǃ�Ѵ(ȦG@=#
:�d�
�R� ����y��=[���9��}�Ʀ����߷��� V��|���a��S
��t� �D�}
���Hp
G��P�'����'�C>i>ԓ}��<9S|P�6%_z����=P5uv�1�� ġ�P/r�.�
�ܙ�I�H�@Z^(�%Q�|
��D�J�/�&8�X`�a����:�$�I���!����a�
��x��a��;�{K����!�Ȉr�a��93aӡ�@�
-eq��q�u1�S��� y�n-��\�H�n��l��f����裆X�T?g�o"����a��H��i�9C�
-c�rY3a�aH
@FVҖEC�m<$�� �1�n&x� k��&�i�}�V3�
��#�~� {P�i��
	کaa5,
�>.�A�
C�+�Ĺ!��<��2 ��0�DC�:
���oe at X�u�
�Q
�S|p�S�\��(��n���D�{�;rP�o��,�'�!��6 at f� �A�
c�8�L�ש
(�� _��6
��h��L�j]
-䛙��āh���'��#�N�wY<L�[ȧ�򍤏염�̒v����"k[�6��A>���3��a��)X�<��
,��a�&Fc42��Q��)mkD��
��,�B��g��_� �ܒ��Z��T����O�.
P�&6+%��_e�- �� �/
_'�E���}�4
�p��R4��B�o��`,L�\�j�V���[x����
�~�IvX�%=!+9�x-���7+_�_)[��T-��=�YsSn�\V��/*G�5�f.
9s�Pl�8���P���Y^X#��*E�P�.r`i^|onI�)k-筮����E
��җ���vE���l�S�e�c�M�셦Y֓~G�>��A�^W�֯;�

����8"߇�UcP
���wG���s-�}�5�bc����)���pڳ�S�2�$�kw�[4�UՇ5������w��t��O�7T]�K���zu�ᔦ�p<��p,ctPY3dz;���/J�?G��	��ʔC��9}��~�kUa������O�^�i�[+h2VJ���n�57��^K�YEs�pI}%낺)�����3�=��=ƣ�
c��'���ݨ�6��^�(������aS�+6�L�X�4�}���7�o�FyP�:}�o�K��Vq�.[#���B~5wsڥ�
�
{��������S���]_QM�i ��P
��XP��2*:��
-�� қR	�ɗ� ��Ih� �%t!�Q"ʂh��x�w�#I�Y
�
f��o�:^�������O������ERS�"��H���N��
-8����LA�Ȳ5���,�2��_*\7���{�|�Ž�%a?<ˏ=���?� 
�
JI
���EޢĨȥ�
�ۅo�w�:����f�0E���4�(��7�*����H��w #��jc�
\	��[����Y��X-Tyl����f�"�n�(��<��=
ŷ?�
|#�jd7+'�T��J��5�k���r
��ZC�K�&<�K�:Z%IO����7�8�+�6�9��(8�.?b�\����̺�:�M/꼷�,
�Ք]r`\�sH��3A]i�ȶ+��&vAB�,IF�"I�rj%��^N��(�P)�5TL�х4=M@[�~
�̦#�����3�+�}�
�Xlp\�J�~Z���#����ʈ꒸s�B<�+�
Ԛ�)��
S��M�J)�W�Ť2f=��P� z��g�d�1�P.SG�a�i�!p2���
o;�:��ڭX�?f�k:a1�vz͓f7��~�V�
�+�9�,���PsX2^Z�$=+A��S+ȅ)����V(��b��#,^�
&/Y��L�A��z���X�
�H�f}g�!��������mG͞w���hs�:����6��^I�K�(�[^L
-�0"�1eY�af>?����VM��63�rz�\�?Y
�
B��r����s9z�!p2;i�
k#�|��r���[�a�[�!�g=�,Ʈ�l�ׂ�w�1�XW�e�f	ƫVD����)���tL^Nn?���Γ�8�rFJF7��q���x��g�3�Pr���|UO3& �S�5��`��їƽ���}�/�0~��_5�t�<�᳷�9�h[C䙆�xO�$�_TN
���r��0<AvRZ��t%OLc�4 at Pv'���fQr
��9Z-K
��::���
�I�=�mB���(�j;j�y��k�N��m�x���g��Sz��l8�h�8]��Q.��	�ȡ�b���rN<���K..$2�ʩTA
�T����3��Z�@���4R�a09�
+\��!ۊz�n�zyc�Y�
�������ɪ����V���u�a�������
y���Lɭ�˖d$�+���22^$�%�� LY/C��'��i�"=+4
������6�?��^�
�r��߳F
ݵ[٧>��󖻍\�g'�9Y��ߎA�Z�
-�՘
M��O����d%LM59���U}�v��!�5J�@��X��1f�G�y�P�d
�в<S��V��#����AӞ!�u̓n�e��������K���8/NW�E�5J��Ih��$�dc⚋�QMR|����P�B�F/���EbD-Bf�Y���k�'�j0u�
�����a3pG��4�L�
��~�źr�g�`0�h�:‰{;�<��C�I�ǫ!	�9�1=��K�¸�nIB�R����t�G�a�������Z
�3� Xd	f+���`�%P���ɵ�cr�q��QK����E�=����s`
G��
%�'�#�`�B�S�"���BՂ� �����<�o�7�W=���F�����1���ap���6�m�`De
-�M@Ϙh�Z
�i$�:d^��ic��
i���&C�)Q'q㘳�?ܢ~��"Ʈ�C4<� � �O#��(B|4���c#�^c�!^߆y���9�
a�����v��۷��r�4O��ڹ�@<gc\4{�<{�q=���5�W�=��b�_������<Cp
���
���0�;aZ��{{M+|<gz�
χ���E�O/�ݦ���:�lЌ M���5J�1P<4UÓH�U��ބ�=j��u�iݬ	Z�]����Q��v��1����)~�lG�|�i����
Z������9]����~
���Y���y���!� �;Q@ه�a# �4Es�@޻���w�M���[R�;nHz�%���K.���/�C��߇;���dヤz�u����ę����?�O9~R:��<�t�˄��g-�A�m t� @�A��)��c
�,[1����<�*�O��Q�u�
-��cK�_���ࠝ>p�.O8���0v�9���f
<
smO��v�c���b��8��fZ�p��(%-�$T�,��,5��K3�4��HDuQ�P"Kٗd�ZN<�9����\��v�updi��}��{����>�����������Q����

����`��>�7�ZN�HM���$R�C��Æ��Gda�����+2Z���B�'p��Ăp2
�S������Hr]������
-�j� ��
��yh��C�
_���K^�h���yb�5b�=����l���#
p�Q��,�
[��8X��G*�c�����E�_ �O��D�N�C��VN�š)�����i��8�
G���U;ۈ�����&��_�HfPHZ�!I��!q
�"��E���mB�"�~>"��p�g�#�!
��(Oh
g�����3a��N�Q�4��N�B�8k�C{�-�!v�,t���5�J�
d	
���@T ~�|p7���c1�?�#�H�KAo��*�V�����"t�@�'
�@�
P{��}dY�7�`
-b�� 
u�:�	Z�34b(�
���@�, �����i!�����֡%`��D�(0~���N��
�}����
��G6�9��?CL � [(B
�[�=�	q.Ш=�4�B�qq������%�
��x�g�`]��y��=�;�{���5���x��5,k  2�)���Bl��p'���0�\�Wx at c�2;�U
 ._
QM;#�����tp[�\��6s������������cc~�����p�����G���� {�Ü�ʘ�T�
�e
0�}���� �5a�lZ���(���~��'���gY�b.�cn��y�8=�לO�O�1��1�v
-�{*D̿D�[�!އ��-L�쑾h
�h�ś����H�� 1%:K谺8|H�!rP��6 ����c��
a�=��,���(������^���%��~�w
�Bx/�[b��E�܋=!��9��a�� 
gr�ܑ��
N6��C����=ڵQ�TU�nE
�/�
�����?%'b������W/�w���s�ᓸ����ے�R��ȬC
�A�I�Ƀ�L;�8b��Xɜ��!�|n�>�sZz�s~��Ē�7	ѯ4[؝����>�s�Q�SY���r���_�
�?ߓ�ߑ�ǷK��W��ҋ�a�y�u�!C�NF
-�;��ڢ0x��ǡ��<T��[(�����{��
�*#7���U��Mk�O
U�G�:��n�=uS�]�	�-�y�M�5Y�������GqI9�8�R6k��'4C
-k %������D�+t@��1����r�w�ƺw�V�t���
{���z?��u7iC̯��?
���	��W���m�ӊK�˪
�[�V�곚��f��nPs8aPݤ�r�
L�d�����S�o�
��_+���Xɜ��z�kg�l���A
-R�����ڳV������R6�^J��wc��\�~��qusB��d�
��'�#���C�ݾ��^�n����f� ��{���&c���𦐑=��N��_l�N{Z!�Fx��
v� ��f)`_�)��\ג�Yz*e��y����E�xŰ�x��h�2�1�v&�����	u��A3���l���Q�f�Jo�`M����E�o�"�=�ƚ��*���zU��5�ŗ�ҩ�+,�e�'s��G�*e3����5hS$�N>�ؐ|Ѹ#��i{�KcmJ�qkjobMZ��:�Oo
t��g�w%�;�y���}����w,p��>��z��ݭB��������/M�6小�\!8��D�߲^�7�ZՐU�����P�q̸%�5�:�=iszGRU�g���
cefobEf���
-b�,g�":�z������_Jמ �獡#�N����v�F:�u�n��rsԱ�LvSQ���p�xW�Zy}�&�6K��&w��*簩2��yC�����g�u9�I�r������r{�A"�r��YLtފ#�os����e�r��Ɂ`��{�&^�ɛu�6��L�f��JSdSy:�qM
���P\��T�ee���`KBE~Cb����2�is��jr��q��ؤϷ&�, ��%!T��� ; (]@���{�:!P�R�B(
R'�DD H�*" �
�������qw��Pag
��ȇ���9�9��ߒ�s���9I$�(��B��VK�	�S%>�� ~��"^��=�7��y�^a��s���`��&�E������T�S�Y����A������ʨcG�q�'y�3좂s�‚�n�Ô�/
.w��-XO�l�D�de1�%�P�D _����*�s�:�bhqИv��N~V�q�t��`�~��x�v>ǵ�6Ç_�TSq4������Һ�"މDn���W4��9z)�p�}��8�E���Gדr�l�D����@`�V�FExߡ³J�dT��=bH�2`#7��>"���
a��k{����?~л�>;���0����y��&6��)!��3)�l09�l:�`�
�9�e�����̒
�(�F�P��y�yX햅�#��`\���/�X˜pQ�������<
c���r�9��U�t(��PZ�=/2��*�PmC|zu;+��lrJ�'��&I�̩Zg�Tn$�Vl�D�t�_$
X'
ڤ�E���m�ۓJper7uj�Rzd�Y�g�g穾P��3Qֵ]���S<xm�~��y��-EYMQ�q��m�I���D�$;��D�����X��b��?Q̒%�T��x�)	+��pwBnL+��e|j���	�m
缴Z����"-+����d7� �'�3'0��д��Hv[}t��ָ�֞����,f�u��Df�Ĩ��bE�
i��-�k

�����#tX����99����d*%�a(�Nyh�'���E��Fcm�Cl��
g���q��zK����FFw�DEvwdž
���W�B��*x��!6�]4�n��5��������
�f�p�4
_�$z����l�ϻ�W���L��p���O���S]8�Y�����ђ@�HuH�HsxȰ`��9f����H��5���'f`�hȓ��x�E��!q�����<��7Aϭ�D�MZ㲵L���J�u_-����
L������R�.e:���G���f��������|�GC|�B�g��x_\
���5�-L�O�b��V/��Q`b���kTܣC�%hx��Z�������w�4�	�9p;Ґ}+�4�&�2j9�6b)��T�
�X��������8�������}q����G_�k�'�+>��N��A&&���t.�C�#I�.�^h�������z�-�;XO#v�>��c>N6�n��k�Rl�r��k���}����x�����g.+�98=�����7Q
�;��
pa``��4ݣA��RP.�F
}�C�ycJO��$
]ㅾjQ�P�pa�v����:M���aC/�a����o�,l���f���ʹ%�?wHo,�

�ן�DY \
�$��o����4(^���U5"kU���fJg��l�YsV�X�V^
R
x�_��m����d-��;]���:���f��ֳ{�l`�^`h�>jd�~��r��gc��"��
�t^hX�x@@��!��

���`��C��Ә��J*䣃t�'w9�O~[=>�*�~fns�������K�����;���jZ|����[���
�=8��t��
#�42B�/��kd�
@�s��u:pP�Q��D-J�S�ь�6t7t�䌞[
�_�Ce�!S�
-��"g�f(�`���*`��
�Tݍ=���.�n��e��4.��� �O�H�"Q(��D����'�P\Ј���hC�FG	
t���}Ja��FK�!k�.<�y'�l��b�a��&6�j`鬜:���<G����W ��
�
-������3���)f����hH1E3�ZQ��N|:�렻�6�о�@�&���1FB
�$T0����tE,�+`���H�c�H�dHA'S*z�|,h�gK� wi
RD�XU�Nہ
y��Z��N�z�x� ]F��7F�Q�����L�v�t�
m^�~1G�
�gs�E�o�/vh���.:P�ń�^$?s�c��4*b`�*��h�w�6z�v�k�>:7��ict�5A��=Ș0EƬ�_l�WX�i�?M�1�2�q�����J$��ވ�:&$���*eQyP�E
Y+:긺�
�(��#��
�~�������|��
�G �E������	3N:8ͺ��;8Oz ����@�5 ��!8����&�c�G��́�� ��
-|5;�Gk
�:{�nq ����#x�9��g��
��8����f�Ӹ/
�<���.o��u��[@�1 ?�s�!p�@�3��	�if �o^�9��-��j
�y;�Rf�5@nr�v' �tR/���2�}�e����_^��S��\?zq��fLxÞ7$���� >h��p�
A���N�AF\2��r6�h�jі�I���,[����t���;�RZq3~�.Ӿg\��^�3E
�&���$��ߑ����N�_���%�|��
-�, ����
@`i RkCٽ��V at 8y5�l� �9H�:��f����f�
-(w�Ĭ�Mқ\?����'���?���z��
u��:L�w�~v��{
S��?x�J�;�oe;���5C�B��"��/�oS����l�Kl�Yk3)N��d;����9����u�����t�3{ܟ1�N|ʸI�/���W
���
��I���s�	>@�e@��>�A��ngkJ����X��O]�%��i2B�ӟ��֯e�Ǥ鎣����2��Մ!n�	���1���!���k�t����k��k��:K�7�J?(}\��[ 0���G}Eb�=l
A�d<�L0�R�׼?��8
/��":��<�n($��_A�{

w��^��f�-�q�
^��5^?e�{�z�;B���������# Z�h]
 ��>HQ�@[�!�Mڮ���{��W{�z��n4��yX)��(6��~��;aj���<ⵠ���*�+�����6�E�I���>�9�?��nj3�qf��
�K�10�$H 0�<�_��^
ꝉh�4
]����\ܒ�\w��,_�!5{�o��mw�r�q�qQ�{/�3=.�iH}!徽�jϾ&�)i�d`O���ˬ����c�6�'v��M��U��� �E]s�z=H٤�[���
�<��E!~鰆d�[6�A���Zr���܅�ngc�<{�r}��Ŕa���:�߂�X��nN���Iv�� {ƫ
��=��V� �*8�����P~��
$�=�Q�4��Xh�����p��y�b�Uw
-h�e�-/�����#�{(ܺɞ�q���
�5��~4�&�A~�]�ɭ	;˯
-�&�
h�'�����e�y^�|�[�-��ӃH�7�P��\���lқ(ݢ���J���]�w����r>ע/Kj{F
�ܕ��XR�gk��ܴ?�ZWL���dUE7p�Q���=’�_Dő�E�Qo��Q3�C�:~A��W=�
���1��%�ޙ���h�F�I�i�V���
V��\-�[���SO�xgWV�S{z���T�g�*�|$1�Z�p�qXq�U_�-�khbO��c/�sc�s�^�r⦅��s��x
!��!n꽫Q�Z�M�}���y
6T�v�n���j���
-��Ҁ�'
�;���
��#���=��T>)��2U>�(���I���*�ي.Q��$]qW�V���S�4��)u߀`�_�vP��@c�MjM�給����`����:���IkOk[��
-lZ
-��ϗ�Ή#j3I%�i�Ci���bVvr/]�$8��)NI</Q%JTIc��H�4+T%�	�� �C�J
2����D�	6Ҹ{в��lep���������i�mZ�uC�ԡ�(�U��!��%�49����,zfF!+M]�MNk$
�'���(Ro"����"��Y�2uN���$~�A�	��t6td)��yv��
h�fp��y��FO�c����Vs��THvU�����D�k
-�9�d���
Zj�& )�07!�N��.���Dg\�Dg� ����YaL�� v��G
�c�Zc�q��^��f�)v��B���qɉ���&ʏuu�m�5"��*N��p�.��J/M�M)V�'�1�RNl�~T~�P�wF
�7�
#�E�y�ByΜ �
b���˱�CK�߫a��������+��'���t0n?F0ml�?�u��p��JPaTd�@B �BB"$@Xª(.��
-�U�Q��
P�Ƞ(
-n �
P�
��#������Z�*�K�M�yO�Nz�;�������պT��xl�6yo���q�Bi~�W�5�+�y;���)-4,�^
�h[E|fI�)��xҜ���9�?��[bؔQ4���u,̱,���%4xPɄ۵L�Rτ��6p������{��z�S�{��aam�_�����{��s����w��fUn�\�茝�����S���/������Tޓ��ݧ������ұ0��6��Q
���Aޞ
8�H��&+hhq�
h2�N��8�r(j�r+l���ק�V���P�t��
�����5s�m�L��a0UW�&�m0��=g�{��6�
�v�1n�X��	϶ܫ��{@���4h:A��V
l�{�x����(&nj�M]���d����s}�
[$^ؘ-�װ24�h�*�~�6��Lg��s��P�f��u�G�
Q�
Q�Р?8�P��m ��(p��I���
�.O���
��v?֦K2����+�GO�i3q���㵠u���3�SO�1����7��i.U���#�굺��ڈ�mDS�V{�?B{u��� 
� Wj N�4�$�6
-T^e@�	PtˍRxˇ���zō����΋�%L��C7�j� ��R��˹~���
훂#۷Ku�U2M{�\���~�x%W]�W(/`��<*�����U �� �Ԟ��D���L(�?

-
8��|Z� ֲ�a�
�Ϟ�q��ڙ2��9�
בō�XΏ���K�Q(�vl�
����
�h
Tt�
Pt�
-��$�3,��cܮ 8_
p�(��&�'�ϒ�4��ik~
y�)�m�P���̲qif�m�9zb���c��7/r��$�Mk^�V�7x(��\���'7�˞��g�r�?��s������a���#�_j�p�����F�W6ܥª�����^9S��Rӻ|�.	+�Keex
i��h�:e���<U�GEw���{�Ti�fא�27qO��7��|s�
����ۿ��
�����F�]gH�2��� ���YϘ����?�P�z9Ը^��'f��
ei�5�T�z+�@��| �V:0�.dp�_��&
�O����a��)>C5��Cǝ��/:	�;��/��1��
�n&�K�
`ŏ �� �X�4jFt��M�@-
��
-
a�P����B�zV �Y�a��L��Yㅘk��|kO�b����
X3�
�ٱ��~�&��6r6� ȻO�O ��G��6��ɠDW�
9�����i"�ӽQE����h��Ɯ�
,�0�b*�e9�,'�a�ՖS�����3c��3����{���D�Q�4H�0�)ځ�P�qE�
!
-�<Q=0�����i����`�
4L�O�t�=.��a.��ʰ�"��a��D��CE�����4T��Q�DU8
�c�P�f����([��
.R��n(���A������S�x���X�9���xG
r09���������A�C��ڗ�Z1�Jj
֨I�Gբ����8�hJ����*���\��'8(>M\���'��o<G����Q�`���G�����B�'t>t�
b`������8�d��LT������;Y�R6�*�q�~�u���F.J�=Qr����Nި�����?(���KGy�R������$��%�zQQţ��GC���1�
���0Vg�����်��Q�f��@e�;���b/Cxb�Qި�$D�*�,�,��
�
��]��彂w��9z��Ч[����0�OE-��z
c�
	�
L�Z`��
-�c�16���\0j��
-�#ڭ�aM��zo0|?@uDЧj�*[�>*/x}P��~�|�ݣ|�ݥ���B�Y��0��<
}����c%�	�\*�fS1��wM\���H
��t�����dr��t��q��ƽ7j�Cd	�n��]�
�7�{�G}^kN�ti�D/5�D/4D�j=�|���f���~Rc�5���u�ԙ�q�ID�Q��⊈ȾCHrsH ��� ���}��;�
-
-#x�Z�ʴ�i��Z�Աu��Z�>s�x�9�|���|�����񐊵n�.<��o �{�
�`��Z�$�����kT���"��:-�~*?�"Xu�9���"Z�{J��S��ķ���䱓�3_��:�'/:.�_;}N��<G���0�d�6�,I{�0t'
FY�!�"	�G2v�w���
oi��v�`�w/F�FJ?	W�<
�
�*���^���
Z�����
t�y
��2�~�z
}�z���m��1�B�k(�B�Q�r�b�m�c1I�
�ؿ��]����7<_ӗ��M�N���m"s�7���bDG�r�~��~.B�x+���lX�ˍ�.���A��!c��!�z]
��k<��H�;��!�g(�\�
�-i�8Hǚ3a֝;��ڇ�Sx����K���3a�#^��=.c�
vҁ9��l��n��p�
]rj�^�:q���jd��hD����a���I�K���ß�����O���+���q0�=�V
<�m!ڍ{�} �Jfk�(s^�(��B���g�V���ӜT�I���8+�q4^�r9V�~)���B���|T�_}0��~5���MB�	���3�%�BS$�a`�
-�il�8����;2- ̶Ľ�����8��r՗ro��و�
Q��?�z<�cs�˷�H��y��	*�
�λ+�ί=�5���Ghb\!�cfH
1Hu���jc'��BbU

�����`�9���K���
|��^����=(�5�/�X�O9qˤ4t�(�zX�h3�K��K��N���s��-l�Ϲ�j��9B
��XͼD���B��
��e�F.cA�&�+���8��z���`x���(� �Ֆ`AmcpS�fr]I�|U
l9$��3��d����g8��$n��<�z�ʷ&�<����c��4�A�4q��J�G���Ѣ�wHQ$r YɁ��`4vּ��;r���B3���
�,�m�����xB�鲒�ɀ<r_�,�h[�D���� ���s�*y��ڴ� ujm���J.L�$����[Լ�g�<�/��

y%��5/kN�z�1o
�Q�<ԙ��Jsp�� ~J�fT�񂊲�W��=�q�\N�]]v�c�X�J=5�|_U�:��l1�ׄ��{ќ��4m����
M�{�JxQ$<�`�K�8l��u JL�Ok�C�1�Wa�k6��k�x���!��Y����C��I}�N�:^��⨕�]J��<���| [...]
-^S3R2Y	db`����<)2��k��jcp�~#��߇��7����]N�֢	�]_B?TUo�-�8�(x.�r��"'�'GZ�-�EY
�@܉��C4�h��.��35]��.��"K�l�
�:�|�2
��\�0�7��=��F;��:��m���
-ڮ�ȃZu����(�9O��!͗�d�)2�eA��:r��
��.R��S4��>�5Y�M�AJ�"KA�	��5��
��*#p��L6�#-�pͶ��z7Ӧ� ���JWn]R
c��&����S٥�"��;�H��+,%p
jH��VJ�b e)�Q��a^b�(,D� y)��|�Z
)q�n��3כ
�X�)��a	z�mV�����o��R�G,K���)k��ȫ�vٕɎ��|��3�LV&�V�%��XU?���@�Uw��(1ſ!1Ő�(Z��e �W0Wi �
�x��6}=�A{�a��.'���M�6�eKȞ�&�!�>�6�!�$�.ݙ[+tO���fU��U�FW�#���ȑ�W���y���{R��"������wy �� p��ьÝ ����s�8��>�Z�ﵡ�7�"��f��i-hg
MoK�KiIuHl��7I�z�7�Q�����Ci
-n�

-�
\�+�k�{'�B >� �
��p��6�?�7���{qe�v��C�d]@?�ߓv>� ��e�Лb��w��8Gv廝��xw�{S;�|)
W���[�E?r�/~�V迒g9�j fjk`�����s����@=a�SN
3�w1_�3�"ܑН���]�QM^i
����@A����H ,!!		�	 a�Ȣ���
���Ѷ�N����jkkGfܵ"�hE
.���q����j�����3��/s������{�{�����sfW/�=�4�rl�4��:���&e����U�ԉU'b����r(�P�V_���}�P#>�N����W���8�,���9�u�
��>��K��~i]�ԅ�܋/����a坟Ýy�D�U�D�^�R�j�<�h��h�.�����2��A��>���
��NOD���{Z�\����
�����oO#��"�V7�Њw���X�N)iQ���OͿjr˹j�ʺZ��\�25/�$7��'6}&�o� �7}״G�m:
�i��=i�c���� l���:�;�wP^�����Ս��
Ϳ㌊�|Q�MD���
[�}���f�pN��ۊ<�zǷ�1tmk|cm_�bl��Զݜ��Ǹ����v�������
?�6�OvwP�;�����;��y��e���
*�pA�
Ld��R�ԩ�3vΰO�Ju���v�u�O��*v�t/v��^��^�ٳ�K޳�[�s�.�=͐�^cHz���a��k�=U�
�>���Ghùw�K[�w�@9�(�+J�c�Ծ "�_L��+)qZ;�@U=h��̦E�;ȇ�
#�J�$���p
��K���i��
-נ�Z���V7�n7�ˁ����p;���8��]~QB����i�8�
c>H7�'��""zBJ*'T����"}k��C�]dR�!�E�BXd/��4��8p�ܑ�~p֑
͎,x��
�x�5�q�u�oC(�'u"4c������
)��d  $L�������.9
t�?$�\0Q� �‚�̷�C��|n�	��
��
Pݠ�}�f�>������g�#�Ѕ�f !8w
-
-W�(� |�!����g�� 5�q���
̤+�$�a.9�N�	��)��B�r�=�H$$(�H��-�@����TP�i��w�g��p�Zw�l���!�_t��1 �����b
�v{���
c��b���h01�d��U!$Ą��	��Va�8*Ĥ�@=�	�>re�(>� �/�}K��

�����_����2AR�]�
`O��!�t��Z
-�WR`�H��R~��
�E$�b�P
-�ev0CK��q'��@�7���'���
�-
����r\�>&��@~
�a����
��أ�
�+� {X>�
��߀
8�r��ɀ7(q�VH�
 �pIj*$&���9f̙���!v�h���7��z+�bMD�b�G
d��*�FU'9oT��ת+��-Π��ӧ��<�����S���@������?��IH䓐��0�)����IO��0�M���_�=�_�3�[�|
��5��略�3���
�
�h���5gx/4�x�57x�k��}����10�=�c ���֟�.)~�
H���En�Z{�4:�M�L5y�$�҇�V��'�c�0l�{���nj
���]�^�A�n}��SwQ�DMЮ$�M�|�
���[:��A�8n����@��,Ҙ���HB>�#/�~|��qĒ�2�U��<}���̷;u
�3�+��ޣ���&��O�p/�Bh3���Px��t�p_t=ᙨ��*�р�K_�걺I��&�� ����(�NBQ(e�(�:\�� Ź77ǽ#g
�={	�U
[�Z�m��7S��H�!�zʿE-�����!�ƚ�+����ƛ��
�9��j�i�&"N} }	��{o�7s�Y��
���Rʳ�j����)�s�\�ΞM�o�BVkN�ŲZД���!c��R�֐��
a̻��̇$V�q�SmD����cY�i@~�<��4��V��J' �s<�0,b�K��%!dW����"����f��Ź��b��R~]�ʀs�>
���*���S��INf패��';�Q��̨�<�Ѡ<�qOy0�j�jo&��`��@9�=	����y�>�s,�A�e
Խ"�x�BB�Z�uh)M�ְ�B�XRȶ�[ȯ)\.<9���q]�QM�i��$�((H�*��"��@V,���f�5@	!�LK��@�����(������h5x�9���2��
�
��NGǶs���ȇ߹�~z�}�� [...]
�(� �r���9�#�'v�<�lY
es�$�a�����L�	N��X��k�]�;�]ЛYܕ�ڑ����ХM���ɍi�)�
J�r=
!է#��w"6C�l��R��7%xxQ���
-<<�r��U
���`�E)�z���Li��
�,�a>�c�����)��̓��*�u9�6������Ϝ �e^�*3W���uZM�?��Y�P��2��r}��m���ob
�Zfk�V�Pa�~�RM��|%Qz|Ǹ$~��(ŵO���%�
n���
-%ZnU��SOP�����j�8��=G�`ߡ��_ҥ��h�ܟ)�<���f�A�%���z�)�U��#�%ܫ��e�f���eE䶉���ò3���.��
��Ҽ�MB��Z P�+���ڰ�¦9��$�P%�+�2�-���%���&��Dq�� ��l��Z��`ߗ��+�	k��s�9l��3��k2�"Z�*?�﯊���"yo��u at +a{6�
}jKK��K���bA*h��u�E�!j	����iTo5���
����&�#YP�>�e�~L`C�&���ZSXQ��r�5\k���޸qM���>ʮ���SkM�
me�����CJ)׻���_V&	*W�"5QX�N��<�
�@��>B��s�oh\!B-"y3$���0�T`��½z��5�:<̶�ɖø��P��F�m[É�ZU�G�J�>EM��ʪ|o���HY�8�T*�Wy�-$����W6Ec�-�s�
F����F�*��"o�d�� �R�J,48X��`��f:�`�� ��-ؼ��b��t [...]
-BV�����&�*�)L�U*Cq��P|Ce���¬Aȿ!m�p �� ���Lp�~W��y�
�z{���ô
1���){��˻O9�w&�)�H�WԖu���㕧��4K3��!i��0��3"Y3JJTϑ��+�
r|�������ȭ^������:�Ou W��)��
���{�h
s�hF}p���|�f+<�X�?����p��e
`��
���{���~����䎆���v™���+�m�3bl뿈�-��b��}F��qջ,v \D�G� ����<e
��ݠ���VL��MR��1��N;�';g��\�G�R�
�*�J
��=;��շ���
�
zl�Nh��������
Ӌ�����
>i����� ��Z@՜#H��1�� �\�%w�c���홗��.�:3.f�$�p����㦥�NN�z
�j���
���5y˟>��?}�?��O�q$�6�nfDgpG
p
=�I=��@+��B;��D7�x�xK>ؼ�0��4+��6�g�������|�`��r��Ł��fڵ�C�k3��eO��=IW_zFο���C�#f�w�
��v��~��Q��i���r�
-o�s�+� k� ���c��L�V�-������&۞�˲?f`;Dx;�
e���jg�A�'�з�h�v	7|�f��k�g/]	���z
ٿկ{x�`���) �,@�
��[ �ߙ@�C
8��
����`���6���4���f1ƳG��m4c�5�ȵ�4��W+���jv���8�N�
Z]����� �����_;<Bvm5ߍ� ��=� Z4�����h�=��/p�f'�Zñ�N��G��1�gD,�Y���I�����f��l���|ˠ�r���Z���6k�?���:�j�J8��I��%��@Xe
		�A�
-Avd����q�ڣc��R��BQ,r� �V+�]Zƥ֭�+���&�g.g�A8��;�~������p+Y�'�,Y�U�GG���;��}�-m�h��Cc3X
��$�r�+ϓ~
�� ��CA��!��^	`Z�
�;e0���RuM��]Z��;�.�N�{��`x��֓�������l1����V3]ޞf:�me:�{�t��c:�����?p`#����q`�= m@`�

������@1(��Ȇ��dXM�?Sn�i�#q4�Tڤ?����̣�~\C����~ǰ�C
Kld���x:N�q�M� ���} �0�)�� 
��dh�:���=`*�
�)[
�BYbe���(��̰���B��f�i&x�h".�S� ���ߢ��M�>{
�z��
�
�LpA8"�4`��`��`�"��p��P,
�RFC`
-��l�¥�zb'���&j�A�'�^R
-��4Tx�P�������Q
�H�G�</c�h��m6F��&�Vj��r�
-��l�&���
��e�
-��#n�

#D����
-e��S��NC��CC�@:*"�=S���,��k�P��%;LQR�B��lt�$j������s
_%nsF�
��
ΐ��ـ�޻�9��sG^�x<���RH�?1YL�)ބ������/A}u����W���W�赍��El��k��
�UGɷԛ��Θ�]2�����k�/�6�9h���72��!�K����XߙB51UHC�'�O���c�qJ:���2ST�e�o��G���?}��?(�s���!E
oPq�7�h�W4����^�#^��5�π�
Z>W��So<U�u��x��O�P�@aY���%3�����H}�$31p����Ŭ��fS6p�O����/��/���X�QU�U��]�S�N�9�+U
���!�ÿ��X�oզB�~h����w���S8e�oK��F�u���hrQ

��0=�9��2~���	Z��Ҭ�vN+�
�a�|j1���2�u���a���:�v�YA�������]�+����v�գ�8�� tl�8ַ$}"֎�x
-�l���g齍�bvE��
�f?����$t5�=�+~[�V�?>�-�Tj}'��润�����
M��u�y�V�M���g���
/hF��5��D�Ӡ�DdEa0��$ L!g�*�S�i=�j���0���D�G3t��9�G.�ߌ���z�F������Zd-t��m��%m�Ӆ�Z��!?9�
��rN�����Gؠ
q;�EQ=QG�N�Z
�(��M4L�f���Ι��I��Jz{z����X�[3�ح	ټkqyV�cW�\�Yg�
��CS�ǟ"�8��(s9
~P�~��Tx��>좸6��xx����!IM8JE���o`iǒ7g�`Y��ûl;x��
-��ʩ�g��[at5#�}!Ugє�Pp6i����
����6������-
�)�>$����VG7yTE_�UF?�U����cP�=�L�xI�	��ds�0<��Z@{�-�ΑR�.�¸�
j���8�]�ECF��.-��D�
-ǣ�_:N� �N�&�!�Ƚ2~��"�RV
w�s܏^��Z�qO�%�����(ߓ��o�k"�!�dc@�1��3��E��4�w��кXD]��c�[lظ �]��lq|�,�ú��ՙ��3
-\+�ֹ�������M.�}7�מ���EI�R�N��+��g��^��3?*�I�1ބ�S8Ä́!9&��1��<&�_b7�r��2W�i��1_ì͍d
�I�U��Tfg����T6k��^�QI�ɷ�<��^�3��{{j�϶�:�-�畅�w�_�u+7���nJG��騘��=�C�<�����R}���ZVr�y��^)��.�jpdI�*/�W�y�`���v��s���-q-�[ �5g�d��B�V�.��Y��MY��2O(�g6���yK�.��om��Z
�>a"��^.�#�N�z�K�\��
g�8@����U+���b�e��V%y:��E�
w��n_�B�u���.Ϩ��<���PD� �H)#LQA�,�"��t��ІFpF�  �RD�� *�1X�Qp]��f�%'n�f��=G�}���s�����=�W�R���*�x��-^��nAIܐ�84�wQ�SQQ�;aQP�_B6���1x��C��T��T0^����,p�̕�_��-]��Q�ךnܔm^��`U��fW���H+v)O��m���R�����I����ޒ�)�ܤ�޹�oE��D��B�LH$
oA���26.�98�]���pf�n�t�.��*[;��h�Q]�&��8+e�6��lDz�BY��[�Q�+Ho�u�S�E��g|2R����>��H{-�H#B��K�&�E20�\�ߖ�p���Q�

)�qX��t)�*�+�4��W�֕�V�"�ҭ
�&ۖ�g:J��
$�\I�N^vN�WFv� -�h[�i���	��Q^�R���"�<Ln��y��3��:�dp�R
��讶gګ<9�;�ΩW�ҩ.1P�7���b,e%�6E��yR�sN��-�P�VP�_��wH� �\����D�M/!B��KH,�S�C!pY�W#4{
ԲѻK
u�L�.wvC��zMu���2X_��`,۱٢�"�Z�=�>K��0�T꺭�bQ���#����U�+�������,��
-})�.�$�)"
-&��{��d1pq�5����k7�٨��&+46r�5
�j����:�^q�:���(���X�̝)���,�dE�K�9wkE5/���s��nA���p���h��}�OQ�QQF�_�,���Õ2ڃJ�����w��f�m4����Յ�l�ț�5�{V��5�d7D����b�R�d��+�>�6�)���uSu墈�&ކ�.�u�C���q~h���Н��)�
-S��x��gz�7�.^�܃Z����Zi��>5��Pt:2e
^
i�RuI�*����K�n��m�7�rKs���=���M2�
�J���nHC�{p� O�p�C�p�C���
��
�:���=zW?��
-���-4��
]@e�*�{磤ϖ)�sg��.V��Y97�[��pp��֮(���f��)�����:�v!�;
����ikw���۪����n��{�����B����.^R�
��=��l�RMPz��A]H-�u̕I
r��bVύ>�u4Bc��uG�LB�d�
.X��P��W�v�
�ﰢ��qy�7N�}7
�{�;���s��&
�����9:�t����}��C@� �H�ĶQc$�:2������%���@��`�u#�BF6����_s*�p�p�q�p���5~'[-��<l�{�
底V�����"6>Lj�L.�
����7
�h�2h�����1=D�[!b܍Y?.b��/���Q����
��
ߪ�r<E�,g޲�}߱*������>#��ic�ؤ���#��7&�s���,1��7��]Կ��+�_6d��ǁ��
�\�D�U#���c�$�&3�+Y+&�l�������U}'�|�2爦�4SJM��&-��
m��)
��:�S��]{ [...]
-d�.�W��)6n�c�mm,�m
-��
���<x���� F0
���Y�wbX�;)l����\��n���NՅ��T��_����x��j���
~�4g&}�t����˨?���-�_��
-����gZ��Z�|h�C+�?r��'�
����J8?3NO�3�O��g�,�g���r���F���l����LP
�͞�d�={?�6��u����@��G�S��&��=`��\^���Ws8�j��\`��֯���?,^��ٛP���b��&2�r������M�އ
ּ#,�߯P�S��b� PN�P�}$�}�-�o����
8��>i���b1�91�	��q��B��G|�KV@���E�1��aɂ:�3j��Q!9N�����,vP>�'S�ߨ�־���� X�������ԤN]�O}&�gI}���D]\��wa�% 	��R�)i�~ =>BO�͂8�2�ٙ!.g.C
�X�~�خe�6�J��l��Q�*���\�iTS��@H.!�y`b�
�Fd�A at A�
4
aJ�"cD'(��
-�(�
P���ϱ���+������ �߱�}`������:{�u������I
,c��`�#ց]�����{I�|O�d�E��?Xc�����{�<
-8b¯�3�
7*��5��3�5�.ClU4�-��B
8۰::p�a��Qpڱ�X'v�1��e|�
2F9�#��a[ �lA{�̷S ɥ�,�s��0\;��
-"_
�h�@�	|9
f�рW��2:p�b5
��a|��'&�G�q�	b�{��̽D|�^'F��a� �7B��Mh���X�� t'�=��o�) ��<<�yb*���œ 
p�h¬$8*��
���u���&�#���@��
��~'8�="he
N2�
�7�n��{��s�sr��79�zJ´'$�c}$�M���6��3
-��oq���y�-��
���p�1q�ևo�����3�go�7j�q��|�\�|�T��©Ig��΀S��9�3���~�
V��3�^�i����;���N0��	
~���.�܍,��+���w�{>u��[c�}��[��k��
��������k���*t�Ϋf=�b��t���S|l�ù����dߟ{��#�׻-
�~C<fx]
F�b0�Y
&]S���c:����O�
8�2�x!��o���#��%0�<ӵ{=�t
��f�_�a�on��=n����ֿ��4����.��]:
��\7�ٵר����%�O�
�`v���ag�������z�9
�CC˅���y��K}4z��~��a��%3��*uo���׽K�m4��4��èӳ������
��<N������ǯ�<��
�l����1�u
-�½�X��.�P\G��H
41=w���N���vcY$�
Ϻ�D�����_mر���_������|k�O�6X��
�l�i�:�s����u�O��!�N�/p���m>��;��P
�,�I�F/�
P��ݓ�-�
�;j1�3"���:��wjY����<㶠U�Ǘ�3k]Ra�Xmu8���`�~��V���g����
��	xk�;`bƮ@��j���ƹ7���GhP�������XCt3���b�R/I��F?���m���o
���)M��̚C�-��o�ڷ��fop�m}P�]]��;�Nrk�~�����-��*x��5x[�w�@�;���M�4V�;A
ݓ�Lu%١
I���2Z{| �*
�=
�~st�Q�t���
���U]x��ΰ�mw�U�o
�ͭ
-i�m	i�o��)���C
�C?��€�1
fNKh�(h?/�2*�I��[�tԝ�F6�\DiKu�lI�#�e�Y���=��FuR�im��bGt�U�d5g�
v��*gTD���#�"�	�G�'�F�"K#��k"?J������A0M�@�i
B�Sp�Uh��t�����dX��L�Ғ>_�Y��ؗ�ڝ
�W�(5ܞ�dZ�nQ�cU!-�[j�!���.z��5�{
�%-d��p��_�jI��:��P
�w1 ���d_���h�
��wW�еL*���D�:臕f��J>�Y)�h��ץ��(��Sc
+�e&Ir�2��j}��S_l_W�-�����
T�C�|�)�<i�(W�D�;�
dn
��P��=�wp3��+)�#��N��X�1:�ǣ4���؝�Nߡ�gVe��7��0(Wę������fZ'�q����Չ��[�y�:AvB�P�pR���%�Lx$ʔ
;fʾ3e at b�� 
�gx��q�R"tg�3�V at G�U���;{T�r���iU��17eO+SFN_�%5.�H4+JO�T���(�v���������Z2#e�cZr�H��9K���,y�[�<eB(OR��ɾD!�D��sgW�|*�7�
Uk���h�*[�s��Z�v�mR�ho,X��6/\�8'ƨ0;�L��[�e)m�3UvYk��|Ez� 5��19�(Qqy�,��F��6.LLaR���û�W2�CBW��
�߮8{
\MA
�l���m+R7ϧ�-"��V�C��*�Q~A�iN^��27�:#'�V�]�M]Y>3I�]���'��:&�ͺ(�f��^�zL�d�/�.<�s���?��=
�|����
Ƹ��Ľ�3bf0F�Q�PI��.���
])��)��B[(%]�ە��n�v��Dm��v
�T[�UJ���:�꼴����5��|����{�y� �L�2��,�9��l#(�J�@��r�=��,�u�!�SM�ӣ�W��/I[`������I�
R�
bW�8�[�]9'y���j��s�ɭ�IO\g&
�D'g���|�����
�I������PQ��
��<'*;o$�.g�n�� A҆0�e��f�YsD���Y�g.��e����n
7'];<zm�"*�L5=��9"�Kx�5��5��[�T��L%ʡ:�3a9�E<'q��9��&���5x�>�XBV��J/��)�y+��n�d��)��˼h������Yh=w�2٬
)vQ�,y�v��i�%�)Y��aY���YW�C���o�a�d�b���τd����`����Π�� 6��Af�Ҋ�`u�
��؋M,��h����S�b�E	�n���U/�*H��,X%��%�.ls>���ab�Aǐ�SN�����7=p
��w
-�%�!9�kųx��)-v����bE8{�
��`u��,���=
-*�̃�/��Ŗ�Ŕ�	f�L7��=[�+�"|W�h�W+�Bw�K'�������
,:�������}�mD
��s���s���^R�
�(��shR��X\)���wPC�T�ffU�*'�E
L;mV1�$�b�ل��-�����m�W�C�_^!
S~\�[~	uI}�����������q-v�
P��߻`G)@N9@ΡK� �հSk
-�km �N3�<��:fjm0orm������ڹ��5�5K��֤��Uk�|��YxW�����W�E���NѨ���Q�?�<D��:�{P��_��_a~�~��C8�
���8��,~� �֋ �^�
n0���
-n��7Ld��c�u�bu}��
������F#�����5v��`��o7֜~a�v��	"Df�
/ 8���`~v��kO�Xt`n=�:σ�F�h
�
��;�i���@ʻ)��j��=��0
M���e��y���y��Ks��������;tGO��LO����t��#�'G0�o�|m@
-�=�@
fG|r��G<��a�5Spo����ܮk@}�\[��u��"A�C9�XD9�XE9����E���C��/gPm{�1m����i%�P�_��9��z
 �`�w���!? ����:.���]�ۅ��K��_`��
-�
����d�@��p�t���`u/��r)Qw	ey�����2�;e���2���N����4�_r`�y̿|��`�
 � ��4�
��	X��`X�
�z��E�
�?� �g�`�l<�<���Bb�b�L�W�@�W�}u�݈~�����c~�q���6D���
`t��6����������Lދ��
?p`�A��@�x�

�@���!Y��N��d���209��a�ӱ��V �[ j�v�lI7�� �� ƄC�1�<�3�<1��
qH�ܑ
-B_
��
|ozr�3�^A��k���DC+_��C(b9�&�41[Ba
-�B�h;ڍ��JT��F�ѷ�t�� ����~� �gF�Wf���
���4��^���M�x��p�X��D��&�d��rQ!ډ��~tբ�G�9惨��2��{�+�S��x�~*&L����zĄ7q�(��9w���.q
E� �&�&v�hbO�r���mf>Jw0�%��w�rf at Rɼ�
e�%ǘג3L���y)��<�v2O������C�ݗ��?�ET6@\$��+^�Z�FR�ُ"ʉ4q�A����Df@��y�e2��\��+d^r��
��}��g�rG�^����N�����G����v�{��[�v9��MN���	��_W�ֈ�(Y��k�t@�#q?4�w�it��
���B�jӫLc�(��#e>�P���@��w_��wOq�ץ��u*N�:���ڕ�yw��[�
�6�~���_U�%1��/�;�{�x��b �؅�>�����K=�
�������c���.�Ul�&�׮����V�sǭX�[��-u��Mu�^����u�Y~��%�U����4��� [...]
-`�T�Ri����y�Fx�s�.�q|��
r��۵����y����yo��띭}�w8�>�9�|nr�ol������ʖҵ-ˤe�=�UΧ䋜o)�
�����`������"�&�#��3��<#���“���QZ2��\���b$���D������+	m�k	ݾK�v��x�r�~�Kq���f(���/�]���p6��Q���4���3�`	(;�
e� ��
/r��
*<�EŸy�û�q�[�L�jfa9���
-W�})����j&-�Z��)=�����g�GN%

<�4I�K:
4�t!x&i5�X�Ð�䧡G��H��\ȑ5)X�KX�7`\w�r���>x�>	���]��.����K�<�
��^�9e>gx:��,����f�ٌ���
�M�`����tW�D�L�+�
�p��`����_����+����ǐ�5����|
���U���"wxP�
w�`EĄ+�͸EQ"�\!��dA�ל��8#P���
��܆���V�
k��=!㼽a�y�4g�T�h֩ȑ��tG�]��� �;z6�&��
-,
}�sQ�D���%��I���V%~pYJ��F�ii
~N�u?V,��'����Z������Bs�S`	�9�����}yt{�\T_�b��޼�1z��Dw�5Q]���_Z��|#x�~s�Kn)�$�U9	�48U��*��婄��\�C�"⁒R��X�?"����ZB�
����=��zO�ᨮ�Fg�yfG�*˒�V{�3f{�O��BlM�z�
4�e��ε�F�O��
�>pZ
�`J��U�D/�y:�Ľr	y��̿_�
�#�
���C{�-4k�-�C<L��ƣ�D���YV���,��m���e*Ƙc���A
�@p�/U�ޫ8[�	�Z*L����nƍW&�*2<
j�πJL�+�Sz��rCpgiC�����&�l�D�����IV��4�N�c��S+}���U+Ř�`������*ʿ�G�� p�� �� p0n�
nL��mX��a��z�4E��
-�S�
-��tA�*chsY3ͤ�lPأ��1F��(� ?��_���ߏ�ɿ��R���R`,���?�>F����(��^Խfjpp���Q0f|
7\���^��a3d{wU���ҕ��i�M
դ�	��0ь�]���}Q���N�bW���T�.ŪU����V�^�+�1�\��"��h
������:��еg=Փ�����p���>��j���
-�-�b�� �oЫ��*CH����׵Gh��(M����<�Rifc����
-�;��JͿ�J
�ZS���/}���t�ZE3��rϠ�7���.��g&��)
��7����x�9��n�z67�M�E�:�������
-��ԅijZ#ʫ��e�!�B�U�����c%���g��{��
-cɪ0�zO� �2���F�Z �� ������`�mg��}��-��Ԛ��В�cl. �$��,�Ҥ
V7ֆ�54��뭑���hI�f��[d\�)2�D>A�c�j1������:�� �Q� Lt ���wxBOg tZ�f݈k���Vߙ�^�������b��]�j�P��!�SXIsG���N/l���7O3��y��|�-0?a	L�YB�6b��>@�p��-3�(��.�����
7��R��F�����vs�նD��7ó������2?YWy�Īw6�vXhŽ������]��ٖ�
�e�ɳ<fd���nâ_�'t
��
Σ�ϡ��6 g�]H�
�<@��A�
m����8�`�[�`��r �K�_�#闐��2J�
m���.�������Ƴ�DdڎFrm���o#���=_�ӻ��wa�r��Z��V4��h� à �!�ƽ�{���n,4N&�;7��mx�3�P2��!x��}��r߼�_�H���f*��
��p��
�’�O�����h���h�?�'�c��6:�
h��P�� ���Q��� �q��CP
�@�H��~Ů7pE��r]�AQ�g
��� [...]
-m1�hfZ<�f	�4K8�j�eɖ)B�e�8�2WkI�N*Zd]�\Y�N^�EZ��zB�A���jr�.x���}�5A��~�J�(?w�j�6� �󁥅�ԋ�)RJ%�\�Ab�+ʽW
�X����,ښ���YB�u�(̺@
b]&	���Z7��w��[�l�[��~�s6~e��q�C�q%\�{�WGh��(?#��ƾ������#���@j%W��+^�CX�h���`Bm�k��M@`�4��a�u�_�"�[����S��~�hl�>ј�J�g��g]�ȳfP�Q�%���L���^`�}�a`a��Q ��PD�
0�÷Q	�)
��Fal�7��Ls:����q&�3s�ޜ��0�e
\[���%��%���I8��ù�	s>��p�ٴ���i���
-�]ʞQK�
@�	�?���I�oU���W�p����㠻6�DC{=�7f��f:47�Bs��P��	u�~�ڪ`�v��?��� lo>m�nV� ����G�A�	'��&���:�n��1�ߒBӡ��C
U�
��(�|�����
YO"$=3!�Q�2��
@�ׄBz��=H����f���X�
0��I��
F��)��_��u at wP�lP
( PC2��h��M��?	��tB�"��� 
�A
-������kS�R�s�Ӛ�Es�@�a�=�2`�8����Ȩl�3�q}��JC
��Hb >$�L$)�^��>�8������qZt^�w
K��-��u����D��'3��Ÿ2�q����'��v�A���Bp�aRN�H^ɛ�B~
C�
���X��H��P��C���n��n��DO���Z��u	T�
�5�2�^H����F���"�$��W�셺�=W�3u
�����G�n<P��W�Y�
g����k����J�H�܉�����g�sw��q�2����m`/t_�g��lH���j�؀6��k��m1{��`�5���F���
-��u�u��݁��\���?m�p/�#��8�{Q
ciMƘ�&3Փ
>j6{�ΆF.f�#W�'���~#{�����;��
֫�e=�֥?�:��C��ןd�����Nvå_��
VW.�D.�r�a����h+i���	���8������Jc�=�a}

X�a�2�b
���ak7lcwݿfwܳ�m�<v���nJ�5C�p���j�(���Z<��N{r�)O.i������Q��
�IC�فмy�ɄG�Q�����9�o:k�Y�n�,g׌k�e�B��K�q�p޸[�Oc�謱@�l<,:m�5�č�f�I���߇�:�W�_ns�g�|���D�AJ�Px8�ሡ���
1�#8mAq�
����wع�B�i�pƴR�dZ+j
�L|2`��D�N��{$
{��E�ڀRiM�1��FY�����jz�(3qe�ώ
Ãm)_
-
%�#m����E9�=�
�#��BdZ"��S�ى��BC�BQ}��ĵa�T���

�(�.t��ې]6�!Y�|yy�!EiH��$�AY
rIy0�۶(�0�NPW�{����
�I�'��Ij\�脳1�h�
���	�66M8���I�+'.��G�^V�'������M�C�mʃ�
[�9WUh.RD����k���-v{�?j������7$�
<�Q>ЗH=_2p5Y��Ir4'jqb�j�Q�<�UL�*�%�'�'9��@f��Ȧ0n�� n�2?�ۼ�/T{cv���dj�b��3c��{b��1�t������aG,w��l���x0� �O�~�
�g�4�J�C�
�SG����(�
��&	�ii��)s��S߷�;e�<'y�2k�JUf�Z����Cu�5}�q��K�o�\��
��Z������H!� @‘�+�����9��T]ī��u�{�����t��
����m׵���ٱ�?>3o��7��>���x�D�xG��#���G��퍼��y��
�1�3�K~{Է�o�f��Æ�_���$��T����T.n���T�wR7�\�v�4�3�g7���p$I�4���2��w�7y
�Y<���=�
���Aߎ��~m1��[b~(h��-h��Hh��\���`����%l�i<��?"ﻝA��tW�ΰ)�8��3�A�q�^�a��QY��pZ�Ӏ4ۥW�s�N)��L��jK��$��4%��Y���g [...]
-�K�<׭E��hJ3y5�YxS}k�]|�tDP%�VH�Ef�u�I�c�Q��ؘ�o�1�}�������c%���殺��9��Us0��c��lƐfӧ�ve�ٷ���͙.�J�[}F�G]z��%��W����Pt���!A�|BT*�˗$�� ��S�^�X�`E�а��t��P�7)�r>0O����c�
�m at o�6�S�m�9`ߨIv��V8ת�\����+U�r��g̬�-�l�/V�ʣ�B�Y�N�����xB�K��dń���3��_�
ܣگ逋���"`�~Ǹ�
CB��GGAӢ�ñ�G���%8XrӜ+����
wcN�g���3d��e7�
�}�|�aQ���$G}%@�~H���J�Q�bB���'R����y�"e���s�8B�a�+z�|tٰ֠�i����E�U�9�H��.%:��!_�Y�W�˫���m�ks{�H�=%Qi/dj� �)�Բb��-�����in �({�H�WF�G��'������5ԗ25e;8��a\sI�}iq� [...]
-���~VA� �`T��;!V�.J亻r�'�?$
-
K߱������!��u=�"�!�<J
й�d�&�7����|#*ʷ1��Pn�9�^oJt,0ɜ�*WmY�Gv��+���S�
�K/i���O���
���������ER=��K>�{�Ks�H�_[p��"�$�bP[�*���(�	b
�ݜB�~���xmu�Sv��%�2�MYY�^a�������S̃�$�0��(��8��q��KQ��[Q��&���'�]��%3����Z�Z:W
tCY�?�֠Ⱥ��Ywr��pnvC�}V}���^�8�v�
�w�֕z&�V�k�}�j��15�,�(�-a��W¨�/�U�	V]������u���T��z�>+�C4��-�(l�A~�*h�7#�};�j�d�Eqm��im2Gi��9�%�5���
�\�y���
��볿�_x�,?��:_�/�a���a
��ճ���`��>G�Sʹ
-�]��=m�]]@^7�^/d���ٿ
��A���0�����Xnb��>�/�!�W��[��cv
�����幷������%ޮ��B:��B:������㦉f�z~���t�.tV�.���=�Q7���!
[���@$�oG�x(3
͉
O�F���"Ʋ����
���9�
�u�5��ct�m��i�m#�
�#?r>����o<�Y��,�
�Q���}�h�
Pv	e��c@¤b��=%F��:�ފ��]�	gBgb�=3)���
�Ι
����m�U�?�nqxkz�q��	�7�/��ޜ��S��'X��c��@
-v��
��>ʵ���	 sH:D�&�u��9_�[��s�c>oχ`�|�mq��2o�T���h3q6٬܍�~��I����v�l����?ᮝ��n�9�~��W���c�����2	N �g��9� �ឋ@�e.�,x p���
��iq6.a��]x�j�_�Ǻ%�,e��%V/Y�UK��ʥ#L��yFr�6#Y���,��/<爯��1E�#T{'���t�����rcIIC�m׀�7�5�9`�
w����
-�ﮃ�����^��ł_��9�}P�V�

���)x=�χ���_�u����1>F�H}o��M����+@����
lzx�> ���չ�����l�e�
D��((`�W%���	1`A,H��@Dņ�(�<	��C�-�O1D!�ODQDĂ����g�0���;�=�;{���9���F
�9���P�Y��0�s C �Y�ҿ#�DH�N��b:D� �X
-AC��Fr�<�(g3�J��,Z��=�X�=�OZ��8����
`]
h��%�+"�6�!�j��&;��@�:5�ͣ�1� n�@h�m���
-}k7��j����GK(��]�4��8Zw }��0�`W�. ��e@~5��Gn���+��j�M
��	���:���k�Rs��G��?�:���=�@ON}�Do��G� �=�b{���� }
��`��]$7��b���u)��b�ѽ5t?+����� ��f�
5���(F? ���C��?b�>`�h�Uŗ`R�wŮ`0��o�4�H�%$��"�H>)�k�
��x�Cx�jt���h���(m����0k0���Q�����L��ɼ�L�Dc����O�WI%K�r��W��߀�|��Ex���N�
���������y��n���@߅�B�V���
��5��ջ<��RM�)O��H�D�ɿ#3�Z>
]�x)[��,<����:t�6ᑬ
��t7�J+�&�B��
Z�7pC���]h2ehT�sE������9塡|(��T������7��T��j
-:U3�P���Ÿ��@��7�Q�M��Ven)w�r��{q]yM��WՌ�C�k�p^øZsƝ{��=fK�m�`����f��9/��c� <��B��w����m"nh��6
M�ehԮ��Z\�n�%�6\Ԗ�^�,���4j��p��W�Ew�
�����ϰ~f`}�`v�`�*�j�
�|���vC���u!�����^���+
��9��[�Z��貸����i�z�;���U۔q�m��ٜ�z_�۶�l_*m�`_&�ۇ	+>��)���Q�Dy
P��+K����z?'\��z�?��#q�n����U���듸c��>�;����s�C�
��V�}��ҮB���ܾUXf�LX��D%L��3l �w���`
φ��1H�6G�[���g�\q��ǜ�q�y,w�y"��y_���s��W8-�q��;-�v\#,s��:�J�v�v:
;�9�:w�lqf���L����m|�N:�h{u�
�A��!�8�b��nq�m*���
-����[��u_���e�p�K��ؐ**2,m7�֛l1l5)0�.�7TJ6��
W��\:dk\^�V�2Y�g�`��(v���F�#9�
.�	%
�}#�c�w����JFs��c����S�[�ŋ6�-��X ��f��%Y�Z��=_�ڽX�����
U�9

��
���֥�
���t�'�+m�����Z#PM���88�>�(��c��E���V� ~�O8�qT� o�DѺ���k�6���+Y�"��ʐ-�ʑg{�fzmS,��m���ae��ye��
�/�/���L�:��}�
?>4sЬD}>͟��P�o����
;�`k�@�xry�����`A�1Z����ѓ�٣�L2�����e�i�t�,E���T�-��R�B���g��}[��~������=���h��(�1:��ӑ����� ���(����X2��

���d�
3lj2�|/N�&I
�I��?W��b�и�l�q�r�1_5׸S3�X��e<e���<���&����R}p���˴�S��h`o
�[t�ơ \���
X
a�d�{q�¿�

��F���/
-�$Y
'MN�'-P�	J7���Jܠ���<>�����j���f��<.�i�S��G�Cp"
-80(�ٯ��[�u^����ȉ�̘AȈ��Ң}��Q������XqR���9�Ӥ���'��S�
�E���
]��
��|j�
�)�ǻMk"�-&�1s��T�?p�jPEq����췍��Ҽ3N��Z,��ҿqBj�;�(v�<. at 0wl�pvL�8!f����)���xy\�
���ԨL��ȵ�"
��uyGEu�q�wgfd`����.誈�i*e�60�
U�RUZb�2�X�YK�(n�Q at M\)GO�-�h��k��n�Q���
�9��9��9s��{��}������b�<�31�=uO\u]�D��1�D�[~:s[<ס�='ˍ�y����
��kP�0e	�P�0I(��H��Ҝ�y2s��&3.N�
��#56Ci��uXS�h��vN�ޠ�G���Gp��>�36�o��_k�E
Q����Y�|��7��jd�Y�c
�?4�b���I�Q�4�I�\�t�l�-�4���
6)�1��D�")!�ΐ�c��/T��+�b�����۵
�\���z��/�N���Fŋ�~�>��\�3��T`'ٔ��uy�%&G,5�E^�rR�!+e��a򗤚����a6I�Ѷ�E	
-����$�}L�R�¤r'��V
aܦ	7�w	3
wY`�����%��Rf5�Q���|'��&`_��ԥ���<JҀ�t�f�9c(23=��9Y0e�J�2�J
�e��(۸�xyLZr��i������+
��u��bQ���ӆ�|�
N�Nl��
1�Ԅ�Duh�;��Zle�鵚����.f��I?�9YJ,6k��=��QX��%rf��ْ��itv�MTv�m�٨7����ʵ�*U/^��x����=�̣�9�ߐ{���_��: ]t~�Y����]��%�9@!��yF�
�%�H���w�
�#v��]�/�I#
-�da��6���KRAKr�������P5+w�����/���on���w�/�~9���;N1���\��,�k� +x\BҖI��U�+��ҡ�*�@d�d!��G�_ 	-�'
.��K�mJ�mg�d)�����W)�/��0�h�ʻ�09��.���^�\�T�fz�o�r
63��e��B�RL���/c߱��P"�R�U1�j$B�' ��[��)TIfW�KfV�H���2��L����i��)���&W�TzU
"g�^�?)�V���Z!�{-�����w}u��
<,�3�[_
D�=
-]c��'��Ŝ�a�U灙u��W���9��u��u:ɴ�ɔ�T��\����6�kkl=k����4�=j�"��
k�)<V�
-�U��x�A��J��
-�GRR�
НLwL
{����M��V{�ت����VOL�L�$��,��h	�[bO�"��b���IFYVIGZ,��&���̭���m�S����6n�����طӻ�mX��k���2��-�\��>;�I
2�ۭ���^�8cGbt�8��Nş��i
�kܭz
��a�5_b�[7
��W`=.�Z�
-���׆��]��4T[�]Mo�:����`+���@�.��
-L�
��p? ��f'
i�A̓0��
8�	׃S����

-�{�t�{Ȁ>-f�n)Eϖ:��4@�r��o�9t���
��X�r
0��y	��T�
��O�&`�R���3`�Q��19��*hZ]�nu�s�p2Nm����
U{0��C{2�O�Ay�
-v��P�7A��%����P��J^u��qW��}@w&cN��7s�G���80�
�u
-p>-�����*��ka{�l����(H/xAr��A$
�up�up�}�DwP��A;���6yD�t���3��=��S��-��i�w8��O.�ձ���]���#���Z�r_��`��HD��)PY
^�K�:_��K��F����n� ��)k��p��9�}�5���O
�=
�G��;�� �������pKŦ@
�؋��+p�
���By:��x�y<�K����I�d�;�B�$g��c�M|�
� ���W����
��"sO��^��-�/r����#�m�P�AaN
k���ɳ!��1�
�/Y$��^�������b�]LzWs7�� ����0"��D�KBI
I&Y����
Ux�5x��x�-���

�{�?|���3<E��<
�:q����>��DM?��} :[�K��WO2�
1�
�F.~EG+��#<C-]��c젫��O�j��ǘ�3�7�0uw������͑n�ѥ7硅��m
���!ʦ0/����3�n�4�Y��J�dL��ZG�f���vѵ��f�}7���"��
��ٹ�(.KD|��;����	���L�yTSgƟ{��$$7n�#V��j�FzX�l��$&� 	�@v������(n��R���(.�Եxlq���L;��T����tZ���y�O��w�{�?��=������#����r
-�O4~���%���<��J�LR���j|%��cI=
r
�ׂ�&|���\��
�]�8�p��%���'�.�W.+\���E��0TI��� C��Q�m at 0����x|ͧ�	��G|>�ɗ�K���
q�_���p�o�-~#n���
�T]��:�˪^�n�b���
��
-8K�!N��>�C�������<O}'��i�Ǡd�
��[�
��[�k���;���ϯ����E�f\�	��w���N�
rg��ũ!�p�/��3���94L`��
�"�"}*/�����@%�S
�������pk���6\�KÍ�8†�N�Q���p:�
-�jp2`9N�ű���	��
��

y��
y�9��t>`:G}�v���m��(/��cH?��5��'��Ip?P�;���2z4.����c��:	'�i8���ڍ���VW0��.�bf�z�W��t�[���=h/����
-���
��n{�h˸_E��	���zy����ɓ�Tb5���
�O��7�?�O����EOH�hq`�t�
�Dg���)`�Cʘ�!��]����Zv{�*vkp�hs�Ѧ�ŭ!��CΉׇ�7O�Z�4�gI�{��Y��*w�}?
�A�/�z�Pg&��2�S��:
�Qh
M��P3�}���:5��<���@S�n�T�6h�Z4u�u�q��UҠ�%Y���VkNq+5W��S�H�O�QZ*H�yY��ITꩤމ&�8��biޡ'�H�
��}�1
-�"'b{d86Gj�i`6D�3-vv]��m
/�
�%^
^%^�DR��[
��-
�&�
�+[v\^�'_�H� �{B�WG�7�&��3ҿ|�� �)�-F{� l��M��16ͱ�h�Ib�Ƥ2���l}�C�<�@�,�L\5G�$jW3�N�pZ��z�fyմ�yQG}*�.*�D=P̎�NQ-�x���yO
|JO�i�:D'�m���xZ�ѬS�Q7�u��O�g�
��x
�$>[T�u�j���Z��*���W+��F^���kS��
RΌ�U�i��gh�U�j�P��
��y�j9n��/L��]�n���s�!I���!X�2�)!�K	CmJ,S���,HNe�'e��%9ĕ��ىeܬ�Jiyb��L�R^�[�(��T�����Ļ���|~����$A�&�
\��9 �4{���I�F�� Ǫ�Xn
�Z㻨1�b�1��2�������h�![\npI��%\��BZ�_ +�/���7+�)ەN}��?����&���zAI(^s?�dN�~7�_m���S���J��< ��ñ �
T�MAeZ$Sa�2
s
-[�jfKS����\q����7�K]�*�Ӵ�'�Ԥ�1n���}�,�)�F?��?����2	J/�W��<�h��H�]���S۳��5i�禋P������1�3߃'#
e1LIF"[�nd
�3D��
�Ӓ/ɵ�Is,sevK�O��AaM��g�u��-�K�\'�Q�
�n��4A��۴���
����؁&�W��)��6
s��`V�ۘ��ҬPeE1�Y	��f`�l�Ö-��\�l[)g�ΑeZ��[�(Ҭ�xs�
U����d���d��ʔ�3��)�B�����u����̙K
P\K��|�gv��9~(u�D�c<
-r5p�F2y-�p��v�Y�尉�9y���bΒS!3�,���F{��`���ۏ�R엉�*��'^�-(_a�r�<?E�>袙�h!��kS.s(��N9�]Q��;y�I�q�#�
���Il��Ħ�3Ein�8�U(1�<R��Z��\��ܠHt�)uΣ|������Q����\A�����8��/��H4K�i�s�>}�
-$p�Gn�?��c�Uk���(�b,%	�����J,���v���-I..����	Eu������݊��#ʘ�O��ʘ����A��'�GHo���t�E�,���9g0����
���@X<�a�h`�D���2O
-��1�I
�H�q���K%q�\L�Ri���.�(�+��لaf���aQA��
׺<�T�5ڨE��A�	���EE�qA&.TD0j]S4�Vm�X�Zc4DM��'�>��3��}�9���ݓT�84ɬ�O�OZ�qI�P�/y��_,*��ʷ�8�
�o{P���z�N�����-gߑ���n���������1�>
c��	�ӧ#�%	i�J��-����,�K�RĦ�w�I�p�^��4;D������!:�g����k�{�R��e܋$�$ӻ0��
-Lg�6)C���8cl�7FgaTV?��
���x
�
�������B\�,Il�|�ଥҨ�ղ�Ye�Y�������&rM��"<�'"*�W�B
[��+X�IYIoR��٢M^��s=�����\w���D\�
C��5�`�0D�"�8�3�ƹB�q�fL��7�J��HC�vKC�viH�#iȆe!���Ԧ�.e�.��I
-�^�	̦{��~F`8[֘B99c@�"�u�(AxI$
%��_2
�J�F_�T��f!ش zS��۴N�e*Kv
-��PrQ�?
-_H
-���\
la
��d�5i
�!݉tO������R r+Z��JW��ޕ��eE�9��X��	0���e�,s�ò�������b��� ��3К�B[�m�(xuQ�!�b�#I��Y��}X La[8�
�� l�� ���
5N����
/���x�F��6�#�n�7�L����Ŗ�-�l�ڶ*�	�joAe}u͏D�t#�#s�*�g���1��6��J����ҿ�<	pnPB��U�N��P6�����t����>2�� �����kgB��C�����fQ��ttR@�Z�|
0�1��O'0��6 z?�� �
��'��Q@�86�!=��Õx-~�	�0h兠��V>��x�ڸ��\[
9��/��G��0�+��"�<��5`�#��H�a ����8���� �i��A�u#��y�㼖➼
��Ŝ����G;/"WX��_�B_-'{��9�ȍN2��I�{��F�(�;�޾���^�S��@y�\���|N� ���u'^�5�Mw6'݁�t�$�jV��;� ����.
�=
�{\��\��
��r����y��
�=��f��
-0^-�z���~I8m|E�&��w�͜<P]�G��c��;=�=����>��>�����ɤ���Dt�ح;D���M"�P2�$�ydI�O��K��
�����
ex�J<E��ߢ��'x��x��x����7w�3�Q�
Q�	Q��;��@b C�2���ӹ���t�q�L<�z<����Ltm��B�.����z��8Sv���'n��79��
�F�Btq��v��p�(�\�GBHI�{��-c�G�"���>Vғ�;؀��DW!-�tU�U�񭸆�2Gq��?�����"G�@ο����\�!����/�"��o™�8�9��i�ͦ�=z�Г�Q3p
k�Mrpq��UF���jF�g�
�ъS��m
�$3�‘O"�%�C�pb.đh8����!x ����ܒN�uY"����o���$[�
�T����Y�:����S�f����*/G�|�6�Eр&E
�:���=؝~@�JD���d� j�|�<\5x���]�7�\u�K�18��
Ψ��)�<���G�z��i8�^�&͇8�و#�"
֔��َF����8�|\ڱ��ln/`uQ�.b��>���ؐ<޷=��||���E�>8�6���p�c<�yL�a�ٰ{�
��P�
=�q@����
ا�{�&ؼ*`���n�:T{7a��ET�܁ŧ���P�Ey"�r��]���Y�t.�:ଗ+Z|p�G�{���(��M�^�D��ޅ��=��/F�2v����lT��b{@,e�
�By�
a��P�;+�~#���	�A�PD
-�@
d�!�XjY�?e�=���)P�� ��ƞ>Q�gv�ǡJ?�������
-���`�>e�
�T�N�X�I(ћ��`�Pl67H�CNI6�ܒC�HrCEIίx̲\fimc�?���p��}
a������2��l�E�a$��&�4lL�Y(6�C��OB�a��o�/���}���\��)A55�J
��.�{�]8����.�.�]n
r[�ۊ(���%��*X���ԱmSӦi3�δ�v�!m�Ӵ�t2M3M��il�/2f���9�����ߞ>f&m��J�`O��fO�-�'�_��Ʌ��ɍ��ˍ��
��"�ܱ���j�}6p/�{��V
p��\��q��z��܊5)��h�F��+"	ӚjLj��IMs"����fÙ!v43�gNsC��ܠ�"�\�4w�Y�S�e}���~@D���PC�
��� ܦ���+��;t/���m"�h��Uc*7'sM�έdF�NfX�a���젶�
i{�~�0ק=��hg�n�K�.�UEg����_	�	�y����y�����B��rp���
e�C��m��nN�S�gcD�ǐނA}�ۘ~������#� ۥ�悺�\�n�oӝQ���	~�+B�Y_٤�+�Ш�>B����I�N1�@��QD���,��6�0aL@ش
æ�4g"d�G�ٌ
��t�*����t�<l���m5vr~c?�l
S4#B��E�k���7���~A|��3�GYg�*=��1���a�V���4�(�P��g�|�(�1Z�c���$�ך�#V-�V:�V��"1��i���&K�hi�|�^��pD�)�ܖ��rYUc�E�
��E����*����ߘ�7���t�Y.�
�,B~&��E
�ǡO܄nq':�T��d! ��"�I,a�J�+:�z�����[��k�c
-�xJp�s�jqYeo��ğ�T����sT��M�
-�ܧ9�:�ި��@W�Y��L��1��Q��[�`��K��R�,e�QʃO2�^*b�r�%��Z��uJ͜C
-���QE�4!�Ҭ�B��*��#Io"�I�Qey�C�U�Q����j������y9F�z�K�"��	h���Q~^Y
�|n�0je
���lc�ek�9Y��+�E�<.��g����(� ތ)��#ʟ��ʨr��ʨ��Ϩ��H��Xt�<�S�O?����M at Su<�՛��˞�G6

�
�9J�!3�����c��m\����aE���`����د�
-�?&�#>UVG��5�U~B��$��Zʜ5���!��M^Z�{����&��Mp��ݵ6W&dw
*�&����]���
��g�]����
]�
-�+"�\�F�5��uWep��2��Ci��Ji��
-���z�E{R
p���qb����S#�u���Eu�S��nC�w�}j����w�ςb_c�٘B��5��Y���3��x�wZ��.	���
-��וy�w�������y�_s�j�J`��&F�
�O�y]���7�Gi�f�-�P�O�՟��
-f�"��1j���=��d���\��?�_T䴼��n��"��[���n~��i�~�-��J#0GL��Q;���;Z�� P�����Ž�0wn�)���
j��2@�eE~W9�
�����t��Y�V��2�s܁�wyu�6�
�5�������W�Gyu�7H��������JxZ)st�~P at 1�л����oA^�nhRqp@��P>�Cfd�J�	U!#�:�¤�z���q65�<�o`�M�>q�M���M���K�r)=k�Ju.�Ӟ�F�� �D�5�-��ʞ[��
-d��!st#2ƶ���
���c8ia=R�|+,a_؉�p���H�0�ç�]�
���M&)|�I��I�7�4
e��ָLZ��q��h�
�����c�q�=dL ��O ej=�N'��$$O�`���fb�I�"���
q��H+�FB���3�sH�\��3oF���H��2���8O1p���#�Mύ!Z�-�v�8�7	dRLL=�e��\,��'`��f<����
)H\8���شh���lX���|s��/�#~q�xq�o n�=<9�)��
 ���C�h_$��u������h
-П�fIH^��6]�p)��	D"�\ށ�����X�"vŌu+�X�E�J ʕA���|��-p�~I| ��gė�P�G�@��p�S�%gi�9����i�%ҿL�/��וP����1M���}�S��QQB_C�RJ�SN�����h������HER
!�|�dB�2�9>��eȲZfǚ��5�5�0��ż�mw�\]����������繟�њ@ҚC���eS�eS�E؈�x��x ��u�`
E�
D�994|Cݬ`����@
c�\	�0^_����o�
��!��(`���$'
���N�Rp�>�ٜ6�9m��V
��<Z��[9ɭ
�u;�
��yr����)�����ɘ��+ƫf����0j�RӢ	P6�����76�
-�
}�����@��R;�Nl��_���lL:X;��:8�

���u
'��F7yۀ��܋��o u��Q�`��=
�PS��y�����
-�*_��6���X�A��E����l�����<�������s��Dw�'
��L7�;� ��0�x��0�ZSלV�/R��"���ȭ
�N�'w97?��=�G3�s��Ǽ��BOٌ<�����݋*�%�_꺑���aуBF�qd�$�$o�����+�%��9V���)6�	*�5�����	Gp-�'.�
���o��
���
��Y]>�
C��+"�/�����N�y�Y�G(��2ꬢ�:�l�Χ���q�����&��9��[�<`_�G���z��)s��	1'�#�`u����Q/�Z)�ʤN�`u��SJ���Y���1��k����s�4r����.��f����
���~/Ȣ!��ӝ�7���:W�G�P3�ٌ�V"u�C����.�b�,���l�N%�3_�gp��q�oZ躙Y<��8I�� +� �᧾d���
��J�Q�ϟ��0��Ԋ�hI�>��K�\�P����\͜���E��140M\�ts
:���k4�2J�C斒��e.��F��`��
�J.�$�A�"gѦ��V�84�%�^:��e�^.���R
�/�N�Z�*
4؉z�z��u
u��a��w�c�3v�E����=� 2����,wwȍ>��6��^�X�㴱;�M��I(M"pX�2
ʏqP��ze6>W�N����bO�r����۱�t?��6�3�/QmvU揱���-�xN����,+?
bIa��J.��l?=��*q�|��
]?o
���쵘�ݖѨ�����)�n���y�f����Q�%*�W`�U56Y����Q1�
�^G���Xm����n�zxj�3�%�G�yg�{G�����Fhh�:�!�m3;m}Pc�j��Qe��v��l��Mv��`7v9Xg�k�a�}9V�oE�{�X�^�nA��+�'C�
%��bY(z�Կ���=�}�
bi���}z�5�
56�t�3�8zc��?*
ð�1�ӱ��#�9��J�YXR�<,u*B�S�P<l��dX�P8�^(�$,�'!������J�u��YЅ�,t�`����GH�7PK/��W���\��~��]ݱ��+\�P�����Q��!����-�n�(p�/,t+��J�\�uB��ja��:1{��\�
b�{����B��!��x�_P���������
�>ۓ�
C�������%��(��C�g(
-<'b�g$�<c�뙈
�Ta�W���'dy��^k�
�Jq��
q��)����:���2���w�N���o
� ���/y̔3'+G`�3����NX4�y*,Pb�J�l�$�UE!S�
U���Jf�r�4�1EU&&�6KI>��L�CR��i��mE��/R����.�����
a�����ǜ|�+��W��㬰@=�ծ��
�L�?2ԡHWO�,�T��c��N��iB�:[H�+����~���vH��ZE��N����һ\b�͡\�l{�����Jza���|�7���[ +�
Θ
�� _�!90
I�����B|��B\`��/�.�>
\/E�(�
TL
:��
��<&�J�A�ig�����V�2�9��Rz)d>rIv�!��cv�
RC��
⎙!c1#�	!a�
��ؐHĄ�
-ѡIBTh�0=4W�
-�������mSL
-�'-���kza�����R��Y�A#[�]d�����K��3��f��	�H�0�$h\��F�F�hM0�4ᘮ��i��Bdx�0%|�09<G�/�>_#M���2�������73��(�Bj�+�7&���
-"� �0#2
L*�8������y�2�T�2E���$�\�Ct�2_ۮ�f����F��m�o^R����=���|��y�ߔ-���}�����ԋ�RR���-�)>�Ϝ"3�
�*��{�$
��ef�Eim4%��wW^z�
�Q�M�	�	ʶ&�f�P��ndX�V�L#��1�Z���[W����,�2�Z�2���cI��>�&����6j!�<@<�Ms��L�)�.gf��2�˞�U9Y���,[�2m#e�%)ݖ���
�d;���Ӎ��bSR�ה���<&{�ytv�%!�>�ۖ��h��!Y>�q4�M�`,e,x��� �����	9���*#������f�T{�R�c�lO�8�MI�<c��e�q�1
��Q�J��s�c�9�q��8o���2��0���~�(����P�8P
-�0=}���6�Oּ@��uRʤ�JΏԸ�(%��Xg��8�5ڙ�QN�F:���YF�s�i����\o�q�2u
1G;ϙ��4���<t��
�H��|�
y�Zƀ2X �`*˝D���&��<5@�S�k촮]�S�
-�kdA�F�F(ޕ�8W���r뚬W��o
q��]U�(�N� �!8cTp�4h�w�3EM}�~Z�-謄%P3 2�OE����Q)a��F�
R\a���)���b��4�=L��
q���n��'i�{��K��~�5F_�v�����~ψ,�nD���g��j	7�UO�l�����3CW(��%
��L��m�xI
.骨y=5p^
�7D�=���IT_O��x��LSo�
Ex���Y�
�j#ܳN���%
Fx���������	��@!�'�=���o�4��h���k������)���z/Ž�s�@���
�Q
-�&+�kSwo�
��ے�겤R�z_P�w�B�'�BJ�+t�O
-}�g4�	�g�怋�p"�h'2�3�Y��R)�̬�g�Xy�����Ky�
��Th� �TĪs�hu�L�#���X�R��yj_Y����
-�ܣ��7X񱂞������i�̧����
i>�E�,���
���%��e� ��F��+�����am�ڭk��u!��u�
-����j[5Vm8���պʭVU��_�Z-�m�ߺC�[[7䷦A-V��s�y�\�۾HJ��1eRl�4�^kЯB��n��fs
��n����Ԣ:D~�aj^
)K�`���e��ổ�f+]M"�ˁ�샓4(���-��wZ^����;�i��r)	�㞓���nwF��[��
��Z�i&sMk.:��⽏B8�ji�j�pk�xj��u-���H�N~s���p��Rb]���05g9�#��э܆����A�V
-xE�{M\0p���v
Ǝ�4�G�h���
�1.�:�:6z
I�ù:bQG,���
����r/���ֱ�>����[#���>�A��VG%��h����8ٜ��h[�m��ӝi�h��ml҉GccPϡ_ON�It=���.��
�������9_��9�%�t
�z��uR ������g�l��f1�3�] &;Jw�>�%}�
�iB�PWf2�P�WI�U��̫8r��f`�Db���4�05�nt;�xZj�~��y�l�	����ҧp>�H��K�
o�[�ȝ�k�r�f�>�7
vߐ���@a5쇃L�� ���
�B,$B&��'f�����ѿ�H��i5�\��B��u��z}�M���=�ż���tC��:�~����5V����)�@ C(���M�44sћ��
��
4棱XׯuS�Dg-:Xs���E]�>����c}��X�+]`�F>�/
j�h

�
���
��� 
�<t
-��b4�o�񉖑�
-R�
-�*�ߨ�����9��z
����˓���x�6*���&|����ޚX�o�C��1�Hw*>M@'_\h��(Ac�{)�ezO��<��z�߬���M��7tT��~
k���a� ���G)��3͉s �v��0��X\ 穋���cg��h<�����<��S��ot��8DN���*�~�������D��F�4�c���Q�l�/�[~��n(1�����0�dt��Ł�SXy:n�]�W��%�,W-5ZCNv�]zI;�b��f��V�
U[�����f�>��=��l�K
5��9cnE��鄩�����z�j�>� ���^�TPnB�Hȅ�@B.�@!B�-	!"�BAQDT��R�u�κ��εg���z��������vv��n�ݥ]������9o���|��=��y���2|k���1��;n�m���m���W׆p%f.Ō�b�^������p��e�^w�������qb��p��GX�}��qQ,<s�<N >M��B��!���R�}���[�;�q+67�D��ĕ8
.n0���np�̆v����r|'�p"~����b�!
MX‘��8�p�����1��S�l�ӛ�+���,�e��
�
j�w���ѽW6����\ڔ�s�xi����XJ���$+���܂�d'wc.��#��2��-��޺��[�b_�7�7�
�I}���O0��v�G1�
QݟP{WH{���1jm��<OYΤ��d�
K��BF�3���� ׈n
��NLq=����$�{21�9����ؕ5�Ѭe�l{�m�c��}
�~���a ;����_Q�D���H��B`����,��u��m��l.^�`*���*���0���8ߎ1~F���w"��Pn;r�` � ��λ�P�m���
-~�����(�zB���Et�I���2��St�,R�Cہ�5�ΏǤ 9�UP�Q�
#�J

��Ch����B7��>��� �}=���]8���c,Px�u�b���'�k�����&����j~GI���F
�(�}��L�s�1�.�è(	Qv�
0 .E��
!q�bz���]�Bg���Nt��W2���)�Z�����XK�M於C~ʚ%���X�$���|@5敏��)p���S�=e�勔�Ǡd#�$�Jr�#�K*C at Z�� �Ԃv��enx�:�)
�-��f�$s��S�k���4���8?&"�fE�9�O�O5_��{Hc�q2Kc�^�2F9�)_�<Ay��)(�ѡ�]Q�VE9��*�(Mp+�Фt��l���
�;��|��Us�^��l��
��
����cQ���QfU=�
�|�ƌsd�L��3NY�)G��Q�F@�:��,x��p��hR��RW��€�
-

��WzPW�	[� �jƙEs��jN1��Ǩ}�|H�@��1j�O�'
Pݛz�49D&�N�7 at 9z�_�Ц��G�	��t��|4j
��JQ�U�������*;,:7�:?L�>fԏ��
��/1��*Go�6Gg�!�=G���r�O��4�\�Q|�̒�մoѽ =?ei�Ѭ�_�>
�T�x�
-`5��\�@m��j#�5u��iBu�c:�NVe�fZ�q�1^�T�r*L�#N��K�
�T֬`o�+&��&����u��h�<͔���zS<l�-0��`�͇�V��Z
�
-����VTY��Zڠ���aj�~��,�r�%����(�? ��(-�I�)�QVN�Z�/��#d�DH��S�fZ�s�e5��8m�Qmˀ�Ƈ���:	4u*T��PQ_
u�*���.(�C��'�̾�����~�I��O��LZeҺ(+#��h�!sd7$]�C�A]m4���
�
�jH��!��<�
�r�ܩ�ҩ��i��U��
���k ��	V�gb�9&r�J�G~�Dο3�3�čOݰ'ɋd��IirP}ɍN@�ݳ9*w<��d�[2!k�E��R���
J�V��.��>y�(�C�C��
x�I�e��_3��L��V�e�(��
%�d�tS�V�@uʹ��[h�UIѶ
-��X��6��#
�
D
(���v�B�	���/���
�?0���2���x�m�����
���Y�/��
��sd���?q��
� 5������i��ݧg
����&#?�E^���`!�!	rB*d�
�l�nFf���2�SH/!-|
���H	}�������z�+NR�i2Bz���'�6��� @m� ���W�7���Dd��;����<�GDH�Ȑ�DJĄ��$��#i��G�b��"6F��\�yTd��"\�
\�T.j:Z�S:*����
�� �+\���\REG'�r�IsL��:���Fs���q�<z:�� �p��{�����-{�\���-��2��=��3�� ��L�Váh�G�5֢]2�P�ŀY�O~+y8�u��<
-�e*
�{a��
-#�Z�~/c�`��˹h���fɱ�L�52�}�'2|#Ü���LyV-J�!
��w�db����R�,)r��'�?W�X�Xb''��
-&�%PKG�[̲����ZZF��%Y6�
5��'��R�vv̒+4Ļ�x�B���M�J
̐��&�l.@���藢���c��l+
eS�0��
w�/q�ƪx��h�U4�j��:��q�j����>灼����i06��@��0�{��]1���K%���5�e�dX+��aXo/m` ��ƣ�P�;61��2��������@��:X�v��p
��{���KO"ޣ�br�ϯ.��˥�*��4���q�~�d��%dԳ
ճ|�$�$
;�G��؍
�=��g~Iރs{�Ec
�����pnk*>'͓���|�]%5��!���qw4��V
��B�B%}l�N:��P�Bp�$
aI����v
g9��s��~�D�D�$�<Ɂ'���
=�����Q����%_BfjD�d{ =����YpN�'�)|FLN��3��,19�%]`a��
�B.�(}IN�P�Wʤ�8x��
d�8�D�u�:�1>�J�;�돟
�Ч�[
o��
��p���p	���p��������&����t;�1(�����{@}>��n ��p/���p_���b�?��'v�5Q�5M�+[�4[�R�
j��c��r}Ǯ{Gﱷ��EsS{�����^�
��=��9�כ��	
`.�A�F����hC+
�q�����r��C�H_i!e�W�k����2[�E�B� �;���ɳ�t���Uv�
Z���+�~�~v�uG�M���D�]쟀F3��A#�b�Î�Z̙�m
e���|��??�[�#(
F��XI�
���5��h�H��KS?����(4�H�
�И��9h��b4q�R<_�Z��ق���5b�.��@dP��+^�?��jF�
�ؤ���sb�guC�

� |��h4���)ڏ
$/{��;vk.�r�r�k���m���O�qR-Yۤk#�ވ�
��?�;@��_e��.hza}�D�����
Bc�>��
ر��lÎ�ر;ꔏ�<�-�zU�����v5��ZV��J*���T���
�)W�
��x�����+�>hv@��I��y
_b���h4���ICg�V)�B�^��f�U�l���l��F-n~T���Tj{O����Ď���\�봷�
h�����h{��N���C�-���U'���5v�k�}?U�V���0īܐ�e�-5L�bC��
f��a�J
�h��*�w��\��*v:�"��*p~�9.ϔ�bU��n�ܜoG����E��چ�{�[���E���h�s�V�Dh��������_��wTb
���-pM�<�I*v��"�
�j�[���Vj��F�toP��G�6]T��}e�~֟���h�<w{a
m~
-��*�e��AKM&Y<���u��6k�g/{�U�� ��
�<�X����^�땪l�
e��SF� [...]
�)
`���|o��|�j�o��|�5�]7�{M���R��@e�
U�_���%j�_���OS��&�����*%`����q�*9��݆�J
-���4c��i3T���Bl)Ɩ�� '�z(+�_A�J�Ҵ����Gi��498F�G(%8^B�5.$U�!�Jz�@��������E��vZ�þU\؏`}ɩH��L��
E1�c�ll�����wpӔPo��kRXg��u�����Wc�(��%v
�1
��i�FwJW\�<��\���*�����E܄���c�I`
,���b��%
�ұeJ��&w6jB��ƅ��؈0%FDjLD%D���o+."F��
Wl���
��S5,j��F-�;�
-
6oR��Q1ѧ�
��
kP���V
b��
-UPs �Qlz4�>��D�(9�I�Q&�1�S�9Dq�p�jdt/
��a�44z��t���c�-M���h`�yн\�g�̣�:�0��+*"�EP�E�a�eXT7�(
-.ǚ
b���&Z���q_c���5֥�1�x��X�Ҩ�Z�M��D�?	����\�{����������0��t�^���>|߂���3��s��1�TG9y�%��41�W�1~���P�ŌV�1V��$ٍ6es�[���2��͔-�WJ3-W��A��MJ��`�?f���r��1�
6�
�k`T�
�7�8���b�Eq
g���O9�����+����h���`U�9K��q�&�(%a�,���p���F�I�JH�c0'
�+�
�
	�?�:cx#�%S�3�=�|K!1�'tTN��쉽���/[�P�%��5)J)Iq�$[�����d�-��`�.s�\ŧ<+SJ��M���2�Z����
�bS
�����I����	��Q�g[�)#�Si)��Z�d�Q�5D���JH5ʜ���4�Li��K+R�m���9��-Qtz�ƦoԘ�Т��K
�j��0������;1U�e
��
-�����v~�ۘ7m]���Č~2g
V|F��2��-c�Y1YVEg�56�@c�e��h�K�����oPx�v�e�

-��G��
-�r+^e��ti)̇��

��߶L<G3���L�^��魘
E�iln��r�4:/N�yE�e*ܑ�0G�F9��HG�B
+���F�o�C�N#
w4"�'����V3u��J��E�Hg$Oɕ�إ��v;�SQ�}9��"
-V0\�
-�5�0F�4NHa�F�jx�D�kX�
-�QP�

-,ڬ!E�,�V`�
-,`r���ȡ0
&��2�F75���C��1A
-����

-)��%�
-.	Ұ�P
-�RPi�KS4�Ԯ��B
.��AeUz�l���~��e�j@�~��~��75��
,v����)̃r4�!���Rr�
�:��W����^A�<5d����Ӡ��z�<X��a��d�3A~N��;
��,U_g��8����^�������|���[~]=��^�ܭԡ�K8���"�E;
ms��=��&�(���UtV�9^�7���T��we�zU������o�E>UvyWMP�*����սj4ʳr��U
S�9��9����~��nբ� f@	�p<d���v�t)�2K
-�.�ϕ�.�|�������\�`�����
-Q7W������e��+_�]���5W
\�����
�0���P}A����n�w�)�a��9S����s�l)�
-}t��F���?�\�I]j<ձ�G�k��]��
5|�k����r���RKS?�`�L���5���`?�u�]�	����<τ2G�3�ND;z�4j�4t1���].�<��Jɣ����3 �{AO�<�j�5
Dk��6�o���@�5�����<l��
�}�r�
�NU�Y���M�-\n\�3�4l�+�>���WK�X�N/` ^����

���@
���8���)����a3/�f���fl^˹-��~��**�uv��4�{����W��n�u�ٕ-thF�t2�K���`
���P��y;��N��� ����n
��{7��M.v7��7�\�ĵ7TN��(W�Rj�����g�p�G�˽_���&h'��?�m�M��^��!��A9�18�P~�!�0q�� ��G����BA���l��p.��|�������7 ݾ\��G��� 
�x����`K:�9:A��$'����1
-�G
f�:GM��h�I��
���ކ�* ���]��{�
�.���C�vy��H�8�ZZg�8
�U���|J}��'�|�/������F�����k�~��E�o#v{n�;tk��`�3����?M—Nñ��=��]��
|�m-�-��M<�
��W8�/��t?���úB�9sI�����m|��y=�C��魇
-Џ�
F��{��o�k��:��K�����k��O�B
��<���u:�����=K��[Dp\���џD���l�AOЕ��p�@���F�=+�1�ɤ�I	*�!q|@
#���q�8��մNj�����B)�����
o���d� JO�X��WGt��a���(��V2:�h䳣�:F
G��q�K]k!�����*�Wm��Wx�vjgv��
�B��������m1<�{�/�H.ΐ����}�"�1�++�Y
�O䱜L��Y�v�N��A
�Túu�LM��&�آM��G2ӤO����<����J���p�W0`6�`�`6`����
-$��&!Is�
M�4I�&k�f]zd=Uu������ӎv�6�դ�Q�ҺN�:mk�U�v޷d�������z�����{
>�I}�R��/���xW�%^ս���ŋ�7��Zʥc�:�������\��G����&�dQ��qX���<�pz����}��^��ݐ���s:�����D��v)^�V�Y
=�HӨ5�K�H:ҩ�	���.��f�ƨ4&�$��^���KcE�����i�;�
:��p\'zL�}L��5i���Tx{Y<��򔞯+�='�$�eK�D�Y���5
ί��� g�85��0w����k8�vǢ�}'G����uW9��I�X��c~ξ[�c_��,o��������S�����)z�(�]Qx��!�˷�'&�s�y�[Ʃ
՜����-
�����
��
p8n�CqS�7ρ�E���l8�
�yn7<�R�����_ga���4~�c�+�Th)����_���4
3	1��7r|S+�"-
4:8��bB�	~�&�;a���YL�fW�N��#�(ۓ�2�t���יI��t�L��Ƕ�O�J�|�kz���JA.�=��yJ-�爼
J6p 9��\v��XJ�b1���R�YH��#-���si#̦M2�>�t�S�	g�b"�㙏�5�;�e�����2��|�+
-�O�����	=.V�%?{�ewV,�Y	,de�#���l3������3��a*��pN7�9��nek�4�y
���g(���(�F�s���P�;���."7)��R��.��JŎ�].�%�Y��
�ˏg� �m��
K�(�d���X��ѢV���
�2X4Lq���턶�GIP��ݦ��2=K��e�6�ҿ���7�Q׾H���
�_��Ny�����5�K�/Ib�$�SC�rM6�MN�J����)�&X:@w�8]e���o���
�s�[��<����7�C�_�k��ҝ�6��G�
���Yy�ҾLh_Fͱ
��
���3��k6�T�mq�ei�oi��⧣"D{�(���U�h�:D��,
�xlO�}�fۯ�_��\DVyF�W�f��/����k\�2,����'X�L�5�����v�
��I��M���[��a��S4�,�d���
��+48�/Q�xK�E��Dd�'�{�VwQi�>� f�<��a��Q�S��@M
�5���x���K��+q�
4;\49�p�v�X;HC�$�u;p:�S�<Em���q
���^���?���pF����L�W�uJ������뗏����_�ڜF<�T���49����P_C}}Ά���6��h
Ǯ�ƵL��$�M��5}
k�wůğĿ��"�\��F�ŢKy��z�K�����q��䊧ѕL}SΦBj��p4[�7�Q���݁�݋�=F�g�J�
*Z�ci�O<����[~���/,��*J�R��:�M%Ҩ�>ѩ�6�n�5z�q��mI�ޚNuk>�VֶJ��
T����z�x���#��f(�-Q�[�仗��G��~C���(���7���_�eJ�������"(��Y�R���Z����
X;�Tv�Pљ�����N3e�Ք��1�[(���80EQ`��#.����x�����
�O~�S
-��U.��.HgI�*�1�'���k�*�j;����ʃ��(��`KO>�=&�z�(쭥������z��
M��Iv� Y���
=DF�ۤ�~&~OF�'d�D�wK렴Ĕ�DP�K�I�N���A����?����
�L!w(���"���d
U�9�@�p��A҆GI
�#yd�GΈ�$
?K��Ż$
}����*wJkY�����E�H�M%Zc�U�V����Q�[cȘ0�6�H�D:)�y$O��y����Z'�$��bcx�M��ćOb_O7��x��G�?#~<Š���i1"�
ѡ5�U��I�J�Q٘�U��!}z
I��$�m�8��Ms���`�/6���8�e�|/������������H��u��^d��D�~@��c�L��<�0�"�"2�
-*�
��
5�"(Ȧ((��	(8*
-�+��˩₩
1n�&�D�Qc��%�i�[5�Ǧ�MjԨI�4��4�>�99=�Ǚ�g������}����T�:+�+�
Hϖs��<r0K����5}�ŀy�o�ԣ�M
��Y��j�%H.��r�D���C��f�\

���2`�]x 
kت頫��g��ȇ,
IF;��9�X2���n at 5��k���E��
r��A1�x-��Xޟf���ʋ��g�ȭԊ!+Z�p��^�����9��
-�"��҄9�a	9��Hx<��:�W0���\h���t6�|6҈��)m���4
y��x��8�l����0f�a[o����=�oU�fd�I�;��}Ț�M��
�Q���'��f��R�gx��m��v�h
��?v���p���M�᳇B�C,�1�̬������n��s�ZsI�t�J��k��9r9�k�_/7K4�v��'
>�'�'
-
<hi��H��i��?:^�m䤍k#m� #��HG�&���4�xO!މK��yp��z�5�$�/���
�#���0\�!K:NL^'&'�I;M��4�o��i�3�tΰ�ϒ賋�X�%g۹O]���
J6e%9X'�n�L������
�%��x
^B�@��H+��P༫t��\"7�eP�?.Ӕ}ċ�
-�y�d_�A�zN�ye��r����r�^_�j`}���s���à_�2|W�܀�N�'��
r�1�|� G�������|`�� �y���;��x��`�<��g̘�)Wߨ�ٴD_3�=a�{Ĝ�%s�&��Lt�����t�S�]��?��?��?��'ܽ�ou��wp
.�]N ǧ|�����i�q�衦2)��s�˻̗V�>ŏ;�q?>Ə��q�)�S�&�ժt�����"�_�u
�~�u���y����z��YWz��+��TXG�O�~>�/�~������طb-v7R
�(�=z�B>C,N��)V|���^
�������)<R"f v��'��
Bk(:�hL�~��Q6�OIa�To��S��~-���]����vف�>�P+[�]G���9DF�x��!�
��Ng�u�%y��ab
Qh�@#
����`��5��2yi�>ZU��
Ə��q@���V��f*�%��cD�
��u��X;��;�
����M,�$ǩ�W���5Ġ1
-�㱟��LV���<�H����f�؅;�I+�����o�[����m${
���
-_�v��'�
l�S�#���8�
ia��� t�����N�r
-�3��l4�?6ᇍ�l�>UG$��o�V��*V���[��r�����c�գ��_�K�s��4��g
[{/�^���g���	A'
-��h�Ec)hd����c��)E�
-�����ZV���,""[�.�v���._i��s�wr�#�
�kG�>>wp���e���l��w�U�S�Vw	�J�hY�G��%Vu.�ZꚢZ�L-q��"�|Y܊T�V�j���Z������֤y�-*s?�R�wT��c�x<Q��9�;�đz�㽅WMظn��
-Vz�iew/�w��R��Z�1HC�F����$��LU��Ux�j�g��<KT�5_�^K5ǫAE^�T�c�
-�_�,�w5����������}y��J�'m��|��^-�,�]dt�Bo�x��ۤy�����8Z%�x'j�O��|�T蓧�"��P��b��J�{nUN���������S��Me��
-~{''y�
0�
- at Cm
����S�/��]T��K%~�4ׯ����*�����5��X��NP����g(�?G���P���M�cUf�M��%�ئ���J
���A���smױ���Ā6lE�泊�r�)Ɨ9�2;�C���(?��f�����e�TV�8M
JԔ�Te��Rz�<�������+e@��lФ��J2
��J4]Qbȗ�
�\�Ն�.ڍ�iTC�s�_�/��2#��r�{hZ����Sfp�2LQJ7
S�i�&��+�4I�!�������8�RB�j��Q�杊
;�4.��
z��n�]���F��f��*`n��ˣ5�!.Yfe�z*=�W��>J1��l�D�%�G(1,V	a����Aي
/и�r�F,�؈��l���CuR#�~���=�;iAo
m�
-��1� 
-��ǽl�����09�C�"�J��	�����(�EӸ�ъ�
��Q)5U��kTt�FF[4b��0d��Ǽ�a1��|���`��!v�
�S\7�y�a&�po
-K#.����M	����̣�>�0�dQv�MvD�}
�}G�EepcĠ`Ԉ\ �Ƹ���5q��i�Fk��U�ظ/MjzbNs��5M�S��Tk7��IO��sf`f�{�{�����K9�Y�eI�PfR��II�HJWzr�Ғ���R%SJ���MJM]��j%7)��MG�`� �������A���,W�}��́z��@��y>�9���J�T�q��� ��d2��ј�T�I)&���
-`��ҧ)1ݮ��E��X��gޭX��`>�x�7�e8نV7�m\��3��0*��������ǔ��.S��R3�(�<NI�(%�'*!3U񙙚����IeP�X�
M�,T��S��+:k���+2�,���=E[
�l"�*3�k�6��5��C!X!���Y�
7%ey)�jP�5Pq�p�Z'hBv�b��5>;[�9%�ʩVd�LE�(<w��r�Wh��pH!y��Bs��C��8�
���hEc�hTB	��*��'cW��|_�/�WTA�"
�Q��B��
--
--,THQ��5(��YAE

-,zN�;�u����E��_�
-�Q`�C�E�
�����B9���<��\��*1��U2R��
-+3(�,H��"\���d��P�'��
-����1M]�&C�3�xQ�*��I�V|�Q�w�W�@�2���z��h��KUPy0	��"�_���:FbUB*]4�S�վ[=Vc�C4�:Z��x�1ȣj��)�Z��4ʻv��j��Y�~ ���<����k�C��,d����
-(��bjP*%��;&KQS��)�N2L!�z/��� @޶0yq�yڒ!S
��۪4�6Cn���:�b땳m���������\�%ܕ��jG�q�ـ^5�B
k��vj%�{]+�am����ly�=4����r���
)g�D
���d�j�� v~d��VjĨ6b��3|��9w�Z�V#5��YoX��h'���QX���э�7I�����]N
�����P��������J�[)^�lX
=��m�����|�!�3�]���
��rȣ���zf`�>}t
����j�K�4l)
w)
���W��e�
7�v
2�
l�
{Emg��6�k|�m~sn����0�(��z���8��E
BװH�~Rr_&�,��K8�p.�+��*.]���tq�������í�A�aa=��
�G�
���w1�]_�5
ͩPF�s([�\�!k�\�>�Z��
i�Jɩm�*si-�䱎<�S�
Q��
zt!��a�GO��>j��b��`;��6���{[
�V�f�6S�D�
E���V��Fr{���	��6xh���$��2����.�c}���c�����c����}
���ǹ�} 7TG�KH1��Ia�1�y
�5�빑�o�z	v�^x���2
-�� �� 3�#jr�K�� 
y�3�
6�
Y+0��;���g6�~��K8��N[�
���u�?��E�\vih
2 at o��!ނ��18��I��
59͌�#�
�
</�W/R�K
ե
�e_&��*F;�Dj
��ǒ�7��������pj���Y`��\��
�U�
-���\eN>aF�ї�2����gl�
�M���V�żu��ؠ�u�	<���=�w��'-�]U���'��m���u���}�����r
�uv
x�a���}�k���}�Ӹ�_�C<�ω���
<��74}t�WE�/JD3�|t*�-6�������K��A�N�w�}��e
�E|�y\�Y
"��qyW(���
�2�9�?9<�{�=�;�B���Dz�QD�J�^G�t�<ΐ�)��)y���|�<N�B�i�~���N��C�ُ�<�8�$�����
����S�%^�
-^��8��=�t2��a$J�*"��y�I_k
�[��X�����k�
z�
�*C��o�B�ݺ�](�Du���x8�}h��ș�y�k��!~2�f��]ʶ�$v
�m�=j"��.f
�k�Vj;ً�d*[�j37ѥ^}���':�<�����
�ZG��H�|�?�ÉG|#�-t9�إĮ�V棏9ݬYĞK��]B'����bB��Y��
�z�Z7���D�f�V��-7м8��
=���vj��=�E��E�⛈ja��_B�J��R�z��"~1[��R:ҩ���r�|�.t}�lc���+�78���v�ce�+ڼ���
Q蹡�MEǠ�F
��J���B!_�I4&�QK�ј��<v�T�C���	"�R����i�OǛ�����f�8͑v��u��>X��5�<�\�i�0w�|��G'
�X4��HG#
�|4J���=�ͫ
�O����[;i�$Nb'�'�sqbױsq��iR���M���6��Z�:��um�U�
]K+T(L\�Mh�	B�6��&�B
Ć
m0ډ3?�?~:�w�}~�{���������c�c/��
�V�0��]�b�
-�|Q��_�75���������O �op�}��������$��1�s�4WG
-
:�kѡ\����i5ϫ��~��j%?�L���
F�X0���i�*��\ъv�i���f�/hGɋ�*��ɒ�5Q�&����>d�
-���e�E���
��i׸?�-Ye,���-5j�Ԫ��J-����ЬyC��
=�i�j�׌!�
Ɣ��iM�5a<��Nj�Į1]ר鞒�ה0����F,Yڬ^F���z����Ч��}�c~��,lZ�s��Lf���1;5mnД�E����am��i�2�1˘F-�Jn\���U
c>�nzRq�U
Z�j��u��~���?��>�.�/8�l���>X�z
{�f,3�qږ�)�Q)�&��
��i��U�֦�-��������,�x���w��n�m~Lъ��k����s��xUa��
-Wާ���y��E��i�t�-��<�3�M2�s3���6{��f
��5dw*n�נݧG��
=�9b�V��r\��Ym��(T����O�����5w�U�:k�oÇ�g�Z�I�����"�r=I�8ce^Fː�H���_mU��P�Y�^g��8[��R�&���Au׎*X;���Eu�
T�����o��͉[�=�������?�kh=��R�
��io�ޡ�yd,}�<E]E\�]���V�U�.W�:���p��^ߧ@}B��I�5�R�g�ZO��xQ͍���������o��;|BVW�9��4�c@
-F�j�g�{�xr��)Q�cR�Ǧv�CO��<�jmlS�7�oT��!57���<'o�}'��]P���[�"w�w��\ ������i4`?[��0���e,aBGs��F��6��W!�ϩ&_��->�TckD�ָ��Tߖ�ۿG.Lj���j7T�2|[��/i�W��?�ճ�@s��u�~NB��/
]�m�|��5��j
���RC�%w{�j��c@�
��霑�sE՝GT���*�^���eٻހ_p�7����ά�濏�
�Y�jN�~�#?�����
y�J���
-ZU����V�n����T�
TeOL���CS�-is��CO�,|
�$[�[��&[�=��>Vy��54�И�V�A:��R��#Շ�}
rn1�*bQe�\�H��nU�����Ce�٢C�FS�]�C�;'K�̱{�M�b?�9�WY����7�3h��zϣ3�N A�ۄ%n�໣RU_�*�KT>`RـU�A�6
�j�`#�e
�
�)>s2����/�]��_SI�Ǵ��0� �:��
tf�|�0�^
B�-��'F��)ՃR��u�P��A�E�D�6$�dL�eH��K�ɘJ�	'w�(�[���*H^T^�r��*7�C�%~(�c
Fg���J� D H�~��h����O�b�l3��ɘ*QIʤ��&��*Lժ ը�T@�a��تuL.����EL�%�*P�l��܎������3��%
C��e{ˇv���LJ�m���<I
6����b���3K�O���$�����f���4/��	�xi��4ET��i�8�+�{�@+����A
�$�Vb�s�8��c�F���,ڵ^��ԖK�%
�2�~���P�p�g��3,l�?���
-Em�$P�f>ϳ��?�ݿ�}�"�	��JH��%�:bv̠���RѰ$�H����@����p���
�h
Ĉ
��`ּ�>�5&ym
xy��X{�g(b����5��
s/�w���)� 1WΣ���0JW�AJ�c6��ԔG1���	�#�u�ơK�?C"<˚�eße.��o-�q�3<�{>M�z�mx_Sh�B?��ʹ���
|���5�[By��=g��®��r�'����oϳ.�0�g��K��2{�9����	�2{�2r����{�������	�8�|oa�<�!�j��
]�q�����8zlk
=�?4��W�Ә�녘r
�
����D��
��
����6B���4-�q���EUs�wJ2�1�sg��
����t�@5y�q�_!1&@�� �p
7�" � �V�}Z�V[;�S�n�U�u��^�Z����Yٺ^�9�����g�tk��s�Z�5�a�
�w��/���������>�ׄn�Zr�1��x
v���� �fK�0�4&{C����Y����i>���>椏��� �~��q� �>�J��%?��A۹B�>��z�Ƹ%�9����j��]���
�c�F���2ur��9�A��Ca?/�~곟B;��i��8�'U��9@��m� c����A�g��|�FW�(ćW�$�
^�~�E�a{3ظ�!'���}�q��=/�X�Rl�
$�I�p�.G�&��&��
�ҝ���j�K�t�>�o�K�����O�l�H��1�������ӝ��S{���7$�

�ۘ~S����� �����M�̫2ґZ�v�>����
�Ϫ@�V�O�S;�tF=ğI�����
|�����ݞ�pOѩ���y�
�e
�	\���0]׹
��<w����2\R��@w^6��2�
R[��(�ד������b
=z	/��|
��Q|
a��xi�R��r��_��G�KV���L���
�v,t�rSk�Ɛ�2C
�K�����@�b�� ��~M!�t�����(ޣ�l"?�Z��I;��η���q2���n���?Wѽg��@Yk�@nj�����c�i}���ɼl�>�i"�'k�
���L>
�R��X���f�)������'Z��:���%t
,�e�v+�-�H�|';��!����.'v5���L�qTa'�&3�i�B/��mt9.�h�XI�dn9��L��?��E����v(��
,����r��5�^q�O�Cr1��/$v9�u���&�q'�����
-��[|c!.��yds.3:�
-��O�n1���.��̓�ي��
-��U2�E|�
��$���E�/�"|,��||���\�q7��˺������L�OgT��T2�Ce��O���8[�S
6��[���.��R^��/i8:4��D#
�<4��(G�J3�1�y�J}�P��\M曓����T��p�$�:���������`�v�� [�6��
�jV����
^?��!�=8-:q���HC��h��(f���S��wԫ�Mԡ�AS4>�.�
Y�����2�a�
ݩ�Ѓj
-=��!��v�A@{���ql5[�=0f��O�5�3\�6��;ܠIC�tg�U�aɚ�R{X���i���
�Tk�h��7�9|���u�q�
5D,P}�J�En���
��<�j�I�
\���hn8z�`�
�fB7�]<��K^:�C�n0j�!F��x�58�l�P�!G���1���X�:c�j��m�����Ue�����Tiڨ
-����I��߇�4�k��#�[c#
;zy����\�s,k��4G���
�F�I
�8ՙ�5�j�9K�f����U��Q�Uլ���E��3G%1�Tl���,�T{ ^�/�=���
hZ����W�L����
Z�1yހ�:��Ɔ��bT�%Z#-6UZ�Uaq�̒��X����*��Rq�ƍS����Yg+��J��U�m�r��);�%8
��:�0Z+М�Qt*��Nh�1m���y>G�BTa�T��,�5VŶDٜ*�e���/�Hy��&�)7�U9�]�N�%�}��Ik���2��*#��\�g�s��ó�֣���T�=����
��W�|$^h)U��b{�
-�F���ʳ��'+מ���le'��I.�;�FY)��L�T�c��
���|P���r:��#�x>�3��z��h�L�9��eHc�_#yV���R��!�:
�q��q�)ˑ�L�S�,��yJO-QZZ�R��L�#}�R\
��z at I�Ge��Ǖ��6|��W<h5�
ћ��<�X�uP�u9~��� /^�N���
�I.W��\6��R��pɑ����"%gV*)�A���Jt�(�=O��U�y�/��G��	���}U6w at +ј�f��y�PP�����ϼ�L���C����D)�3BI
���iJ��(!ۧ��r�rje�mӈ�)�˝�X�}�xQ�w7
U��
��������ؽhN�%i��� UPE<��r�{ ����H%��o�-?A�|�F�g*Η�X�__�b
-�*��KQ�2.���T�
����^pQ��C at KП��Dڑ�P
�P>ȅL���|�}�^��d+
-W\�Q��hŔX]����tȑ�_$�4��(c�,J�*�t=�T�����O��\�K�%7���ME�
�F4��
� �g��R]�AQ�g��]w�EЪ(*
-�-,�����
� 
-B��
m�ă�D3i�F���Ui;1&ͤ��N
k�
N�c�̴�L56i��֣�c��,�d�?�Y����罾��}��F�L+�����`��WJ�Q��dv|d��ȕ�Q
�Jv���\*��C	�~�;�+ιO��c�q��X�����^8V±����`>(� �
���*i�
��d�_+�;IF�YI��J�d���T�'[��y*�u)ڋ����'/ыp�| <�<�_h���&����q;(�@
1τ;�~$J�
~d����ʼnJ��**�@0�
� � � :3��"$�� �*�� ��!�y���U��Rx�P	J �l�L_��qÿ~L��l�u1JXbPt|�R.�Fz#ì�C�H�	��
��N��j�ų# a��K�gpK-��/p�
-PH�9ĜE̓}�O?���/��Q�_�µ�EgKO
�F+�k+:w%�K�����F.�(\/�Q��u`;ϰ-�D����M��T\~�vPB�s�y&1O	�_?��f4`��9��V�AZM.��?�P��px�s�{�E�z���3����
r
[d������!m��\@̳p}j��Ϋ)��$C��7�X�l�a�X���?X�6N`���LM6s�6�����U|R�M�y����Sp�w�+�TQ�"
͡|���ի^3uK	a·A?�

�XWY<���e0��":�����1�%7����	p�;q|'��q�������L~x�Թ�|���Ӊ9c5�=���m�p>
-�����q��/�O�=��r�,
�w��}�q�K� C� M~���'��q~g���<�>�,��O�
ڙ��zb/��k��u?#|a�g �D:a
 /�Caq0&�X���k����u�7F��4�(�8�
!��8��G��䠿���&M���������
s�A��
";`4"�hu��&x����`x?NsfO��8�)�������w	�/�:�r���΄;��M�6���H��hD�9p
���ɈH#��88r�p�u��\���,b���%�%
-~��O
-y��.����!��M��w�A��Q���j�@�|�ν�:���+�OQ8��|�����H���❧I~E?"�sp����h��B�p;�C�-�>�U�n�3o��>�$}����|�Q�X5���=�:�7j
��~�{��
���=Hj���=�k?
-�Ux���3z]W�]R�t�+p�k>�\P\f�Fi�3�
�[G�P'�^��uz�|���:��z�:~���C�E�
�0-��{/��J'i�
:
���A�� ���ƸE���+Z�d$�����,����%ض㷋�\D�����K��è���!�A���6���
�]T�y�xs�cu��9�/���pޏ#��N�����[f|�a
-Gb��]�m;V]��a;��l/�n�v��S����<��7v����#��dr

�E�A�+|2�����;�1�7bۊ�t�f���.�v#ʎ��^�� ���DZ��=B]��F� �yB�z����
}d�����%��,��ã%2v������b�\lQ*�'a{:�sυ�.#�U���{���~=�7Q�������By��
��5d��������f'�ީ��~�.�=��$8#��`;
ۓ�=�b��eد�~���
?:�C�ZE���Ko�����
-�rz��S�L��9���q,���Ǭ�`#�v
�����pF�H�o�~:��b&'2�B".��
-�8�p��@w���tұk�����uԣ�j�� �.�����3�H��x��U3 
2�_	Vq
��G�-*
3V�ÑG&
��ȃc
�e�T�� 
<�x����k1Q�舅��K�y�t7��͉w3	���ùs
W;#��k�#��w3�p�5&Ū1>Y
1�G�T5I��i
-De�=G����(�\��jyc�����m�+�U5q�r�
�?�����'�����L8����4��^���z����J���KXk�'�/S��IF-6X�3��k�,�!K.�l-H�WMb�����H�Qu�O��zU&����.U�Uf
R�q�JL/��tBE��p
|�'��6��\�p�-�������^~w[��6�2�UcJ�Ӕ�j�T�M3Te��|S�*��*7W���U��V�㖫h�jͳ���U����k}Es�o*��!���=��pm�`�c
m�zk ���.|q⛃��SbUeMR�Ţ
-�M�I*�NS�5[�ֹ*���Z����S�;�Iy�W)7u�rR��٩O+���f���L�9p��{HC�����
-���U
|��w�*�_��Ԗ��T��RST�:A��575Ksl�ʳ*�V�
D��Eʞ�T���5#}��2�.�5-cD��55�,��!
¿���4`��$�
|��e��}��o�Jx
 b	I���5AI*����;��œ��V�YK�f�n��V�b��UQ���y�U���ۺ�uն�]ﶹ��]����n��9�	d�
��'y����^������z|���*|�̍W�%Ye�ty-Y*���R O�G��r��jU��(��Ek�
-&-V��_v��l�4�~PV���g�~�<�mYm���j8!
:�h
0
L�ܫ�J�)��JA�� ��(�ͤB[�
6p���U��J����kRA�����s�R��~Y�;��|Vf�)e;�ו�%��?��
-�zX��]�
p
��U�[(�p9&��HQ�#]vG�lN��N(V^�O��S�k�r\m2�{��^�,�&ezv��yF����=�V���2��h���oh*���ց��SJ���|�w���I��cTn�I�"�r��e.r+��\Yŵ�,	�TҪ������)ݻQi�o��
'��}�ܔ��
���R��Sp� ���@)>”�߬�8Ki�̥��*�Pf�Y��I�(/Tz�T)
�j�hQjE'�U�o@ɾA%����;�Ċs2T\����*>W?�a;���R�ԃ�|ǤJ�
pϊ|�THپx�&')�ʨ��Li�ԪP��*����J�nRbuD��ŚX�Fw�lU|�^�U��	կ�+|�D�U���ݬ�m�o
���W
-<��w��L�F��j�V�����J�e�۔�wi��L������@�أ+�,�X�#�,�~o?�c�-�b���f���6WBQ9(.��ÝW
-��RZ N)S
24���`�⢇X��$H�)Z�Bh�B6��
�)B� �&ȖD$4�>������TP
*1Q
-<|.��HF3ńٴF4P(N�i�O�;�J�N3�X3��

.kᡖ&��lAĵ�)��0�(��4����1���� ��{���$f[��3����K���7�E���,^�m��f��v��
)
�
�#�#��ψ�v�l���/�
d��x��:��4�z0^o��
�Q&R1��&�J	ȵ	�����N��y�=/���亭�M�ԃ�
����>��������!�g����}�6blS��|�s>i�m��d�7yp.�]�6��E,`��c	5Y������Q�>����9�f�q/�r9br9�c/[��y�fg�0��%�� �<R�I�Fx��K��� -Ƃ��+��j��'k�cmt�e����g���3���~i� �'�җ_c6��QaR���k�
�����̫WFx
K���(��
&ρu`= ,�k��	,�����A��R�0/�A�A�n��>�.m��m������,����o�:�H��C���Y�k�7��f-�������Pl
,�`�'�&'ߡO�Q�!zt�~��
"�'(�~����sbϫ��5��*�]�Msv��,!�{_�3��hl�<&Bh-�TlDŽ�0 ň2���=r?F����(�8
-����a
:t�Pu�V���r�4�%��-���|��4.�F �&�1B�Jg蓳�q��\�����E?O��Ar�3��!pF�p����v�R�#<�+�;
�<�a�u:��Q��x
\ ��(�.�A]�6��������}f���J��#�+�{��^��8���i����
=s�yS~}������=*�:�+��G
�/�P]Wiԟ�%.��~J�~B�.�i\:���op����s0�^/�c��_������>Q\f�
-�4�G��5t̻j��L�?~�ʹ��y
-�J�<Cs?��D��P@��L��:�	�t
k#Dw��Q}�;1�?������R�1�
<eد%�Sue�2~�ƏS(��
X'P��84F��~����6�f

�s0>C��xЙOE������������h�4�7�jvP�}��hũ�߄�3�,j�i��0��)�(�'�
-���L5���{�� #u�̼M��`��pEW����h���T�՟W<~�`;۹�v0�Ŵi%��m�x
}�
%��rǘ��
as9��j�j=��7�{L`e
��R�5�:�%.�Z;�����}��Q`�O#6���Z�m/���u؞��{�݌�VlE�ݥ�����
�Te�� ��е/��i��Vқ��b�X��������1��\�G.��t욱k.l{�]��Z��쇰�V+�#
�]L�b��
-Y��<H����0�
g����?�>:��1~6
����ktv
�5bׄE
�g����?���R�X� 
a�2)s��n���M?ӳ��ٮ:e��05&9���(�F�����d�}�{���\,�XH.�&=�F�ڍ��c
~t�� 
!셱ۦv��,�n�/f��:��z43Ua��K����H}$A��+oX&�fp���:9/:��
jQ6��LC

8J�dR��r���u�a���ĉc;Ǘ�N�8N��vlDZs�:M�$m״	��K֭�b�BJ���A�V�S���
�V�1D��m0�؀�A	h*h�6&.ZQ��PG�'�e=:�����������3H�ì�1V�*f��젗���
�c%����X�z>���A4�lsG�X
㰔gKH	�����
;�;Ѩ$� :u�4���2�t���o>�.&�	zg=;�6��%ʯ�c�³�x/�U�|��8fw��
��cn
������i��L�"��.��|�5ը�\�nsL]�:�Yuv��0����-W�x�Z��(m٣f�A�,ǔ��V�r	�����v���M�{�R�a�� G^�{
���jSW�����K��VZ�liD�ҸZJ�J[;�l�WʺPɲ1%��(n۬�m����j�S���"��
-ۧ���:��\G8N
-6
-C��C7�]'��c�aV��DY�]-v���J��~%�uJأj��w�)��UԱ@
�1E��(llV��G!�~��*h<��G
-W�^�k���[�K�Bz��N<Y޵K3����JV%
��K1çF#�#��Ѥ�3�zg��C
-��(�Z���p�V��>Uy���9-�粼���u��7�
�;�\�MZL�3���v@�gi�%���r1O��5�m
-�
ջ+rW��]��'�O�
�W�T]�HU�+��ީJ�.U��q}�����\�Kry���r{oj'�荓��@.�pm�4�$x#�F�E���[��ת�ס�ץj�WU� D�J�[զ��~UT��㟐ۿA����
|EF�pJ偋r����P��Otk�#�Z�!��kR��]��'D���~��vy�*��婩��&.W0#g�G�څ2j��<4)Gh��/�ò��RY�
����cm����݆]
�
h�44O#��"���Ye�P�P�\u9��r�Wɨ�Uy}�
�4t�
�'[d��"kd�lUidJ%�#�DN�
*��\��d	��Կ�EسA�,$!�=���P
�<wG�r6����.G�){�R�h�ʢaY�	���T�%�Hű�*�oRa�^��d�?���*���*���vt�#�	����ih�Y#ԣY
~�}<�`�1���%�%m�&
�$=�$�U��SQ2&s�E�T�
-R��^��Ҽ�{��7��;IƔ|f����R��(� ����"P5Pų
-l�3A��4��lQi�M����
-��
���h6x�VLk+yt+^�o�Jf�%��b2� �cfF��{1u簆��	�Gc�r_ͳʤ�¶�c���m��������f��F���c���oՍ��Ƹv�
D��=d
�/û,��Ӯa��6h�&�5@�{?M������ �&��������|nc����� }1�G�x��a���)r�
�e��m 3���h)m�x7d!���s_C�}Y��5:%U��IE4O�8؇��9\�0}1B_����2yG�Q>
�ˀ91B�4B�6Lֺ�"��og4�� t@
mM@��m���ݍ>���T�𚱮
��ib�8d��6�cL��
�l�l&������q�c|-0'�3/�
�<~w�4\�|tz�����F��aɪ{Y�נ6t-#���Hb���3ı�8V�j�XC
�c�1�d�O��T��
-�3
�
o�c�e}~��z�����.hE7�5L��\�=5�-C�h,�I5$s��o%{sI�
��F�Mı�8�17v0&;X����T������V����f������H3׆A� !s���+��+�z
))"�ö[�/:@�n�dw�t/��
ı��v?��~ޗ��}�S��)
-�k�yR�{���꣯��s�"!����R�t{^sk^�n�h
-Ƃz��8K!L�t?I�!���q�8
f�
e�
ep��#Tx�p�l���C����N.a
0�U��X���R��|�������
�e��>oH
���]�)a�0K$������S��gX'�0ٟ����q��%=y�2����ղ�1@ۏ�k#��VR�+�{ ��@^��y3�xޔ��T'��Y{.o�?$�
��%�K��E&���<{ŋ��s�g�W
� �
�ml�}y��`�}ò{ސ͚���:Lm�`VKs��%O�,�~����c��c���l:W�� �{ś4썓d��ŧp����O�/y��C�/s�
�/d�"oG�G��,���~��~ͤy�I�K
��L�W��W��^/��}�_%Կ�,jg���'��ހ�
�Uf���yw?�6
sZ)�
-��:���2q�����Ӻ�{�Esx���q���~���
&̳�g��cۼ�8��m�~��v|��;�
׉�8i���M��鑶뵵��)�F�=��C��ݠ�$@��c��L
	��ILHC�C􏩈C�����$P��P����}�~���{����<$���%<����t~�n�+k�|>��
�
�ݜ�7�3
0�(_f�ѯ�=���M�gP^ <��?��QR�$�gH�GH��X��x�<	r�/0��{
>O�߰y
ކ����!���$�=�~7�V��!Rd
��c�s�e	�e:�#h�$���>��+x�y��K��+D�gt���������*s��B?�Lm*
���у�_��u���]S
�2�5t��������,���v��#Wȑ��q?>�2�S�{R�#��a����Cd�C����/6��k���*<	�3������ϋJ�\;�-�[Cw��6Н@w�Y4�:0
G���t�7��)T 2��d�	�V�9��
���-hm[���=�c��0g���!��X��=��G�G���
��x��l
'[�p�<��Sx�<���:Gϟ�#~���)�|��{�6��o

'��h��Vt�aE�.��U��F
�&�1KT���0{�l9O�.��:
�H��������:7�Ŏ������v9V� �]7��&D�n�,����n��_G�q��ɐ9�ߏG�5�,N�	2i�x��1��1v�1v�q|X��c
3g9򎳥-s]�y���l����.���G;Q��gYl��Q�� z
t'��]��C��óYI��Ƞ��o�p
�ͳU=���
sp��Q���ZyֲQ�M:,��������6rc�

e�4ԁ�6�ب�7��6f��~f��HՈj�x�2{����?���]��>��3�=�Ѳ�Єq��Q���ϰǦ!�[[��-&v�؉c'��
v�ة`�;����f�L$��G�S�\V��Y<�:�ށ���(�Na� ��<e�4���[)���3,�y
��[Tu�uU��j�-��-�n[^%{�����
�*8���ة�sI9�1u�V�u]R�u]i׋�Rη�R�u
'����k��c0�}�{�/e�Meån�W%�_EOPwT���r�.ux*ʶԕiU�;��w��}G���wIq�u����UE}o�{�z?�
-6�`o�Rc%�
A�=�R�]	_�L�:M��~��O9_ at Y_X_\i#���W�QV��W����Z1����c��)l^Q�|NA��#��_�_
�K��q{sQr�r�P後/E�u�K�!��A�R�G�d�TŒ(n&3;5K�kj
�(
l*ZT0tDfhEf����gᦌ�k2Bo�z��?u
-�7K�3A)<}Pᾄ/���
���Z��+r*�*�5R8
W(�Q0ܥ`k��֭
-D����=$#zZ��c�Ʈ�%�Uy�ߓ;�&ܒ'rW���{;i�`�R�ʵ
|��.����Z�����z�2cAbQ�c����2�e�u�&o;K�~y�Nʕ� g�9�_���;���\�ğdO��1��פ5j@
*P�<�dy�—6��-�ĭ
-%�2�.��>�|�ay�ji�ȓ*ʝ�ʕ
�3ݔ=�$[愬��e�pf(H��i����cc{S���P�2(�:x��$��!��(��*�n�?�/�UK�/w6$gGL����
���*���)r�
�F%O���9�s*�
r� �g���}-ck��l<K
�J��Y_R�o�(��f��g�2r.�tz�,�LY�H�.�E
_���"�S���DsV�Y(� 9��/�wo �K�}���>���@%�!��4����
-A�hߌ�M-]N9K-�u��ma���*$MG+],lj�
j���@���i�CeP���P�o�)�C���$P�n��N�S���!��6J�@e�����
4U6�]?M��S'hu>��[��w�4qu��:�@�z��J�����ʱ��{�-�hAz���<�2�Lr�r®Y�~���ΚE�~��A�!�a�h�66���@�A<�0ǀfq�&m�&А
��ឦ	]�`
ta/��)�q��
�ĮQ�<Hr
�2ā?B�;ꐶq��3�d��h�M���5��I<�4��ɉ����I��	���w�&�V�B{ƛ��!��]��a����6��)h������8�w�7�6��b��,
�x��e�s��n�Y�ݙw�]w4���Ս*a7�5I{�S���u����5�@�Q4�L�)t����e?~,��abr�a��0sq��q8S�
$'�����}���j�N
k��)�
e�A>�a�E{HY�a��Na�V��6
��3]� [...]
Pb
F
-*��e(P*�S�S
-J��/Pʥj-2� ʴ:�ڱj�
3���H�m-������ɞ�t���;��o������el?V��~��Y�pYKb�r�5�
c̉ջ��c,N����Y{���&Μ��&�38���]�p~�ᣴX���,�k�:g�HL6��}?�ѯ�'���	�v
?��m�I[�����-�����~x;g�r�!�q68�w�sΕΒm�
QQ]·�˨#
r�s[ � 7����c?}��&{�������v���dV��ĻH�����"��8���s��IKi�&x�A;�.G��d�#��#�h�^�e~��WN0?H�
��H�3�(�qe3~V�p��N�
�E�j'�[��ٜ;�nG��<�$�����H9��X<
�WU��~�H<^�W^ef\�.�
�eu�qD�I�N�
�ۿ�����^p�᳹��ϏU�6�K�<`�,�D$��+�5�>����>�ɿJ��Kb�&�>�f-�
|
-��������������Ol��������.>�I�Q��Aa�M���2z��
���2z���Q�{u��΢k~��8����	p
޿������z]u
q-����l�$.��%����~�u��9G�e�m�~<G���HOQ0'H�q�o���qt�x�=�;���x�y���W�V�w��3��v/�!^D-<��8�~8��9��:ΰz�A�4
-�)�w�&�>~|?�D�~�bz�":����'����~BiUh�
-^V�Xe��]��SNڟ&�h�q4�8Z�j%v�؝�lj�~��>�^�
��n��.�N�C)��u���}�v��!�~D�_�v���<���mv�\p�ǝ��;�v
�d`�IЈ�"v;�;�eZu&v��;�#��bl/�"V��c(��p<�
4�z"����%�kЙcp�_/;mu�i�G���:ў�؊ 
�@
�EN�A�{�;�ӱ;��a�rX��e��Q��Û����� ����r��W��+b� ���f����8
�S
�
a��@䩾"�;�=�}�
��ll�>B�~	���*Y�o���a���T�1�v���|*8�=���ط�{L�cz�\��c� Ql�z+�۱ݍ�>l`o6

�;������s�:��>G��NU
QuCt�
�~��1l�E��о��kپ�
Tc�	��~
���o�~���;@V�d
��jY�dg:Y
���G��-��e:������5c_	���;�~�σaWuM�C,��lr2�ژ��T2��c������^��y;u£��)TE
��G7Y���.���wm�k�Uh9W����J4f�<��i�S&���Tr2�ژJ���G��h���v�M�nY��m'�� ��dvQn��Kt\�iUd��~E&q	6qݏr�-e�/`5
3��
z�nz��W�n��A�A�
I8�p4�Q�^'����t���UR �Tx��'�y&@#5��Th�G<�����BV�a֟Y�
���:�l��<*�jU�TtG�ꊂ�
-���]9x
-�L�f�]e�\s�u���u�2�U`�Ү
t��<x���}Fu
a���V�B��/�|)n5�|j
-��j�E��5��&���(�̓���N��}J���|�T	����7+�T���,�Y�˲<�e���{�X�|xgq���ɠ�xW M|���(�*�+
-*

+�*�TH*�*
((
lW,8EVp���<��%�Lc�"ƣ�¡3�U��Z��E�
��5���xn�}
d�#�Q�Σ��_�H@�pH1#,ˈ��L##3ܤ(B�1��T82,�Q7�P�&뾭@ݓ�j#��U�#7��/�7�4�IhE�̻
�e@ҬQ��*�ˊd��pE����@��ht)d�4oW�\�Z�n��
�Yߒ�:(�uRn�pE5�
-��|��9�H�.�
-<7���%a����L��f at ufPa3$Ê(d�
-Z	b
���X���>y��$�;�B5�ur%X|�
	���E�Ί}��ṗs&�o/�E�̻,H�K}ܥx�#+�iժDb񠂉�j�����O˓�˝lSM�G�;lq�f�����܆i���	�I|H��bx�S�GdQh- ϻ|I�y"Q�X�+3�SD~��
-&��
y2�4Xr5��
9�g�Ϣ)���
K{��ca�q+�X³��Y�φ�$�/�"\C��edj(�f�s��I>�'ݲ�=�&=� #�U0�?�;���ӼMvū_nF�5#\�O&~���mX�fl�ؒ��!
|�|e6���;A+h�9�/)>�O�&�d\2�5
-����r73D

�V�:HJW	������xm�ǶA��lc�oC
��%K��"�K+>�|��pN�+=`hi�y׀)����ޅ��~�F5}fa��X5	�Z��Z�"�
-nUƱ�3h�:����Z+ne��J;�=��HYB6BIH�@���P� !Ѻ/��N�T;ն�K2��x:�ɇ�0p�=!����������?}f��^��L�R�p�φ��`@Vr����@�G�� ��A�w"0<����A! ��\�ŜԪ�X<71
1
�'#�h�G�����w_��C0"
��
5 m ṫ�`
�
�",B�",B�P�G�b��P
�!�BpS/� ���t���3�Ϟ���ߧ"�$�
�����/��0����`
%�����:�B�r�Xa`F6;X�Ap��ٕ�Vb�\���r>�i:��_PK�������
�-��:�G��/�Ґ�9�c+.q|�h"�|�X�
~5.�5��uб�Fl�
0�a
|x=��u��
��04��.z�E4)����x	��C�$����Hl-
�
y��ױ;'�jn�
i�\
W8tl�-б
k���؎�nA�
�pNlEMla�Y�6�{ר`�
-��Y�;���y8���0�
��_�w97�=�Ec�g�@Ҁ��=�	
�б����Q�R$Ή
�{P�1��j������`��	�<z	� ��aXB�5n���&s�;J
M���BD�q�
�~��Av{%���|�{
,����wQ��G
��\�:h����Ex��5
�~�<t�;�Vw�]�|()
��4�1�#�<�=��J� DQgP�
��6�X
@s �#Lt�G?�zj�e*��{���;�
~���v؝�;O�{(8C��#
�\�
-���F�س٨
)�S�"̌��tN�T���f`��#�H��8�00��;�Iw>B�΃�Vݕ�
�Y�k`������(,7U
-
U�+�'F|`���
	
- ^�EMB����@n/����+i�Q���'B/ p�aT�/D�;��C!��X��B�"�0�c�r�>�Q�8�
8/l0݊���M��?�xy~n�0���7|��c�ǎ�0q��)S�M����s��^�(d��^^�2l�/W�Y�n��_�z��W�l۾���ܵ{��"�ވ��־�o|���#G����?�����>���3L6��ğ=w>1)�B����Y"�D�-��U�5�ڂ¢�Ci�����TS��ź�Ʀf����f�pvv]��|���nܼu����}�ŗ_���o��������~�O�����D
%�}�y1�<\�'�_ �g��K��<b}���ˉ�_��+�� '����	�HB�M`8 at 8��A�Aq,>"0X�8�d$
D���0Q ��P���p)#`�@�L��6-��F�8�n��#����m��O��@zH(=&����c̾�dݽ��z�~���x�
�F���������Eyy
��=
�
%�����
�G�	�� ��X �'$`(�,�K?W-=C�
��o"[	;��=Q�o�;p0�ȱ����4�Ï?�����!Idr�
�-�bX�w��AWM�1	��	�0
-��z��޻��}�_>x�������o=z��;x��ɓ�O��k�M�����uDT_�_��ba~Cٖs�J��:C
�R���
���Z	�G#������e&\Wf���HK��i
h�0�a@À�
4���
w�|��k��f�dKe����Uh�_ݯAų�s��94H�A��Se	�*�g�)�A��x�Ӏ�	���n�_To�O��*HSo�Tb.�W]���ޠ�Z��A
�Р�%4(��ײ3n����膆��>�n��E���$YL�!�`*�_mԝ�/Qs��Р�
4�y�"�y��SIf�uaƹ���gc,�i��0�,5���pCu�~S9Ѡriȇ��۝+�]��xW�Y��"��Z:��Ӹd�M�3�^��Dv
�9��7�V0��N6CC4��N��۝#�����>1tdBG*�������@C��'�ie$5��h��ͥ�o�t��Р���Ur�S!�\ʖrz$N�:Ҡ#{��脆�ƒn#���Hi�	Кʷ��kJ��
-�A�˱)s�Ny6�K"cwgI�=��q:E�+����6�
������Zg
-�U�o-/�4C�TР�a;�rV�(�Օ
�Б�u9'�_�4
��q��b���f��՚�
*ʶ��̅ڸ�|5ǢT�۳,�8��Ȅ���#Eƾt^�鎗�{<��6�X��jwУ-VZ��zQQY�kF}QL�Vנ���<V�Dɲ	̎�
�#E�r&�ٝg�9]|ak��۝�%m�[
-
��j���tg���p�Zנ԰�e*�5+�ٖ�d���2�
-VG����p
\9��i���Ϸ9��[
���2CeX�ְ�RUt�6� �N�e5�4̖t5Ӓ�b�&�I���.��ps�6v.��iXm�q-NzX��
S^������J���YVwQ�c�gh���Y͉VK��m x*����2��
G��6������A?^T��Ra�X*+��5���j�������$
�!A�nh9��|N'������h
G]ǰ��.چr'�=U��t�i�.�4��'��$������l'Nb;niP�� 
q[�
�RN
��RJK9 IӬ�"���O�l����i{�%�Z�6[�mْyKҙ�q�L�8=��\8F\���w�����ߐ�LT�e�$
(!�a��S�
Ic.4���
��3l'��u�߻x�=�ن7���Ӛ�VTR��L�z�"����_�E>�ϋ�I��h4��X��$�&�}4��9߻����w�?���c�W�{YE˫���}�?
���Q
�
-˱lp���WDL�|r���V\�`Ɖ��
�м
V��mӰi�4l6
��m��{�Pdž��g0|ǐ��0��a���V]ց�灡F!ʺ[Kn۹�l�{�`�����?�)`�o��h@��l��ǧ�"���sf
\޼�-R�tɌ)��N��m-���n��ë�=��
-�5��e�'#1=0h�tH���h�#E��A����g
"�F	��V�h�•��I�b�m�0;;�6
���������7`�2>���A
:�S��
�vI���QĢU�]1��W
B�%
O�Xo����L[��n`�	�`�Q/c×���hޫF'�J��cs�_��+�!��DtU3(��˗�����vj�������Yy�`xN +
1™�
-x��[�V
J�f��
��Aƻ�
��C)�,�ȗ��fjkۭTk���ë����K���
/c�k$f����L��<z��Ң3������AA�h��%��{E"_�(���v}Ðn���ѡՑǀ�E{�v��X��|!
��33Z�Ѳ]��X4�A�-j�ؒB�/K�C,�_)%������o2-�o1ã���{�z��c���[O�v�ˈNـ�6�V�Ԕ*tA�D�����@�]�)�K�����z3�c�7�
Z��f
�۳��{�p�~.
qte<�`7"e�
����Ui�9��
��!8��\$U����ij��ݱ�f��V�Xׯ�Y�!C}��Oł����)�	)
�ZU�:hF����x��T5Lͭ��������\϶���|�Up?G�\=)����D����9��3�}�[Wa����P�X:x��Efq-6�jɺ[�5�|=�홯G�޺�ng��T�~�N���ɤ�ѝ�ڐ�
l]��=!5��F��Xx�B�
-�Ǫ�����hC˵��}��;޼�kaO�F���#��}������T�YإA
{\,|4�1�e
��W؈���XÎ�R�Ͼ*m;��B��R�q
}����Z鳌�ٝ�9���b�Il��V�ȵB%��0
2���qȌO�[u�a��D�ӵ�7�&��(��-��k~����iR��N��PF
-
�vhT at Ac<
-ʓ6���;B�?[�"ۊ��T�a[���d�����dcW(��i	

i}EU��q%ݝ���� p�P��s�
��vd��c��A>�G�z�(6l��j�;^i<�)7�m�}U���ɰ�w>&�t�%4��a��S
�&�Hs�ĉe!�e;�l����[�԰�0ݸ/Wi<�k�Q���
%ߤC�����X��
<p�C#I�F̍2�c`7�b��T��L��8u��xp{���lh��=�W-������
�r��ɓw�͉���;��0@"l?:��Ǣ��H������./����#3>o�����ƮO�W�}�/
���>{�cI_ᜲk�s��,�p!�m�,�g9�@�O�v.�Rg�u6A��$Ⱥ[�5��
�X�=�ښ�Wǖͯ�s���l��w�rl$&��"���;$�� &,�aq��
���J'�=ʲ�[_vw�MæaӰi��7��X�?�ښ��c˖�9�_��
0t��JddD�'�%x:,&rA>'���>\0�EE�
h`��Nӽ���GW�����pk�z����^`x���� ���+W���c"R,��B���q&<$�Lc�i7�_uA�[=k��V�}����;��Ǘ�/	�����b$�fǢ*�	˱\P������W@�i.w�Ef��x΁H�m�j�i�HW���#-��]
��`�0�(̩�

�I��HL��`��

H��w��EĴ�ϙqrxsvB�@��E���͌����:yn��8~
^���I3���m��fځ�6MmҔK�
IJ�
q�C�wI֣�y�G��ﻭ�Ѿo�bK�l˖%[^ �p(t�4u�U}\�?�ɩ��k����3������������X�b�?<1�{B1
)
�����ʠ)��u
-�e;���5+��j�K״4Œ��^�S5�x{
z��
~q_=�a8���
�ie�/��Ŵ�xX��j(�Q@Ө����ʨ�V���f�
=[rS�PԤtuE�h�x{
~���
{����/���ͩ0��/��
���!=��k��[�8�P�&��ڪY��� ��V	$7�
yM�RU�LMo��gn`�#��#4�n�%u��b��D�@��tP���f
*haTI���Ț^ʸ����,��o���e>OU�q�
x�
-�"���8����g��3h.����P�ԗ����M��Ь]
U,*��WPW�2�M��~K(���d+\����+x{���ڍ^o_
=�N�i�o���Yz!�p�g�'�ئ�b�
-Z�(�e�^�ik
{�����d�E�DU�ۆ�a�}�B���{_k_����ӜB3�sޔ�J(6�y<d#d�؞���I
.h5`U���J��UPW�
-�
-]�_f���t�����--���}�
���l?��mh�tƛ�]��k1�m(�@SV#8��S�ZʂDC����"
�	�Bj��]���*�QT�v?��r?�m����c����
o����G�#'=c�3���#�
�F-��D�Q��L�
u@��Y�B�P���Q4�
-�-��^�u��ֽ��/[|���<�7�Ƒs�p%'
�Z�f#�,��՚���D�ɳ\���S�
8��2�C��:v������D��o��s/��{롽�K�����m�x����8dG�R!k�L����B���E�	��)3T�}@�Z�d`����&�7�+�ܞ���}}�}��}�T�UK8����=1��%
vBFcr�Q�p���X��L"�l��*���"�D�&��[K76�ٲ���m�~��~y5���L�
u?�=�Z��	��8���
��0
k�cw���y�b��d+�@�"�����LCӝ��]g�^�)5Ah���]@�Q���2���8����
�4�N���`��Y�e)68G�Qs$�#�⯜mh\�l���t���r��B3lH�a��O$�+a��FT�&�.J��R�L,�	��N(;�1�	�Q
�1���
v iҷ�4ްin���|���b��-dY��~��FN좃
��a��
/a����i.(����I
-JM(-9�"IJO�E�|�3�٦��J�/
i=�������#)}ȧ���l�
�1S#�8�N����
� ��0��C����
Q�=A����D���R�.�Z�;�[O���j;r��
`��aR�4B������NuK�
}���Ae�A�9N�\ˑ���(��,��$
�fh��w��&��}��G��
'�����E���_���y�عr�Xꂯ,�@.W����D���a���ι9���9*�l	�-�qWG_h���w�퇎�-?k���׽�ҏD�.gF0�
QI��������Y�0����L�,�I�\�(
)'��ڼ����[p��������jx���څb��mwu�Ve��9A��{���@RB
�H,ʡ'�L�X���!n. &��⼏(+�����Aݤ{�4�0�Twm^�Qw
8R���vW�~_UvJ�v���
oJB
-&dp$&��#|$b32A:3�9>
-��%��<$i�CPM�����Acqd�<���k[cݍ����G��
���ۤYѧ���ۗ��	9�J����6�"Y?�1ᣱ&=���3.�t�ET��]�J0L	�)<������u�p���}
�'���/%
��hT'�bj&�����H�Cg�0g��d�sX]���sF�aFG2M����P�`3�
n�c8޿ ?)�J����._J���ȱ�N��p�/��\ڔ�I�Ai�9�_�S����b$k�d���l��Sݳax3���`<�_V��夗]i�5_J��ov�+��À���
5
R!��ڃBҦn�u\�#�.��@33lp�1�%Y��K�ִ������_�[�l�6�$��4�
��_1�}Eo}������O(��E�"9_72����NƘ�ɞ��x%+,��C�T堶 �#��y�{hX��`{�a�4'�ĝ�7�PeK(�"��*$��}�
x�-B
-N
�h�J&.��F�%9�*J`mA
�G*����Z����]���i�;�8�EU͡��k�t@	�{d�K��م�)
�9k��~�a��ə��
��(�k
B�~���gx�l؂�k�N(�?��d'�i�i/�i
-Ŵ�xX
��jx�W�:ep��C�1u3��D�r~Ϝ�K6-�('�,�e
S��$̻챡�l�o~lP�����u�՝���xXO��u�`�.8��YN��J�db�=�5�P:��)'��4c�
]��
|kˆ���E�����+��؋�1SK<l��}FdХ�
5<�S 3rrETvp%�9�T:��VL��1O;ZI�5x�Ǜ�;ƭ���=iN�se��<��T0nk���Ĵ�
�tP����J%4%V at 3\�
-Kƾ”w�0�)F�z�.�*	�-���ה
k0�&�
��Ģ�]i��g�|�7�8�O��섌���ШF
�K���@Nq�4]����iD%�D�qX�-T�c�굘wC����w�	�I�q�#����x���q������A��+�@�[
�q5@���&}T�'�j��U�jM��0������5�o}
�z
w��Ҥ����[�
{4p �v�KX���L���@�
��Q��L�Bc��j��M�8Y+
#�U�J��Va��k0����w�VC*y��C��Mh�mg��p��jL줌�
-��,���:�5#,���QP��v��?v���
=�J‚K��Њ5X�5��Uܟz���x��?��7��c�
���M	���Rځ��J��[�~�`��A�
�&d��H&Y#$c�0�$����U"�W�;��[��e�7�u��C��+fsp�O뭍(��rW;*q )�
�tـ,���V���������� �� X����ދ-]u?�z˃�z�͑eu}��4[�u�*�/ �օ%��1��=���<'�r
`���4;���p�#Y������v;G�uV�\b����KV�
}~�����]t�;�Q�oV���9E��A��b��!���@��
&X.(I/��`r"(डT'=Eq2Rd+Erp*��Vͻ�[���}�n*L/|'t{q���

݅-����*Zkb�>��"mnf��:�p �~0H�A�\^�0�K
����Ì<�h%�����\�|l|����5���Z���س52���C�Rj��=wIM̶i���5M6��(Ƌ(�Ԍ�
I�Ҕ�-�&h��8�VI�l��G�,M�����%;%�_<����3��mɟ�!��
�J��-�΅�&nc��~/l�E�#����aj��!Prj��
�d�
0+j�o����U��7�*Öo��6���
�|��$�?6��:��x�_����󔺫����K`�L|b��
���>*Q��J ���82Eg
�`�*)=P���3�؏6r��[h�/�w`�}����o�羣�=\[����u�᣻���nj:|����Ͷ�o�Zp7ȗ|Im��K��u��:�m�lB%a�5�0��as5�ޱ���wDGI��^�{I��vx�\�/��$ٝ�����h
�c
�D�,IFI�d��B#mZ4�7�"��T�Ձ>m��3��V?1�Y�i
ޯ�-:B������}�K�y�/�e�
N(���^,
-�ю�d�,A#$9Z6��m�toJ�Zmio�=��a�����qS5�ݾ�|O�����ӂS�a�c�O��0��.v8���h�x�'#TQ*L�I�H�L��ʆ�t� ޜ��Yޖ~�0˪�a�
-��аm�=�ć��“�!A�)# x�B�1B	
3��QFg2�R!@�	R��`�, ��}�o�w�Yr�6[�iì+�a�u�c�7�1��'���R�	��9#l��D�����
��}�q�N��ܱ��qZ�ӝN�U�z�uu�k�@�zW���EAAP ��I�\�Bx $�����F�$@Bȅ��pAEV�Ժ9�;�m�-ʶ���������?�
��������������*9�M��8b�ɢv�:j�h"(VV��@��ߠ���T�e���i��4EJt���Lp����avw�k}n���䅜4~�����1+�=n�*�(N
U��
-<L���;s���YIN���iBx�6���
-�_�s�Z���fF�G�������ܰ
��Z)H�B':�!�T�Ur��_JD���o�t$
���H�\$�\���V����Q��"F�a�]|V��aG�
^�j
2��#(Q6�"*r�*&!i"�$]0��
k�
��A�]0ݺ�4!>�DZ�р��/�rz[I��V��-��9�~��`q�L4�5�z]E�����CmdULD�D�](Հ���������OICV�t�^�D�A$"�C�
V[��+�{�$��SL:��Q
�1h�G���	5M|CF�^k�ʇZ��x3UA��P��i/
�
����n҄di=�ۊ�~i��+�z�d��%�C6
�@��>k\��O�X�["�d���>�Еq]i��B�6gx;iذ��%
�
-gd9�	�
$*�M
M��//uxU
�����a�����k�f���R�2�ȕ\o`����*�X�(��
�0,OƤA���q�����.�<�1*;�
�O[�T�������{�j8lQƒ�
�.3&�B��a��:A�8�/��	W=��h�S
�g�� 4IC�΢���/�}ڐ:��=k�J�]�*�
��
*8�l�]Kh���-nH�6�j����	&_c�i�S
3Ҁi�r`xaؚ�D�y�]��Mݧ
1M�&��o
-Zr-��s.��j�)�kjT�A�
Ad�GO�۸7`�p
�HG��ܤ��M$Հ�!�o �?f�*w��m��2~\?h��2b۩z�2�ln��ʯK� �@1����'
��
TY�Y�0F��G)2��U���h�Ӳ4`^���2�nK֬f{�}�V�m�&�p�ҁ�-Zw���Zܥ5U�Uz(Ԧ��MjJ���
m�3G�r�A�
��A��%�h���4��
`Z�	�����lV��y�1>����g���<��X.t+L5�2hA)�-�h������D{��b��8V#�aU�h���%i��2������4�!�_]�+�.��
x����k��q��n��-1c|�Fȏ�`

-�ju�~X
G(ZF���
�ixX� Z�E�u���i���2`y/7e��Z{�~dU���b�k�"UW�Y��s��e]-
�
��5� ?�H
0
� M�((#DDYa<�	c��0E����P�ۯ���e���z`]��Q`����%y���$4�)l���	���V�n�b�
��:3��6�z&�O3��#��dd�
� ��
`

�cs_�Ǣ���|)p�^��g՟oM,��w�9�ԛ$Ib� 	�i�{����e�:'�ɳ��
+��e���;`/����L����l����{1f�/�
w.���{ɒ���}�x}c��뻬�2
-dw���6����M���f_�����=8=�M4�<d3�
Ypn��	�j\
[��e��bۯ8��
-'?�nu��lֻh�?‹�Do.̴�.�V�{�df]%{j	
���'^@��-��Uqu��j'�
�/��� ���).�ѕ�}LU���:��S�7}���k��#��p��r�d�jz�^.���"���*���`�N��nR+n�0.���J�*��Uq�G1��|]����0��?Lm8;7�I0y	Nc�
��ϋE���ƫ+��}�
V~��R�}���s������ߟ�Xr����+ߖV�S�9��+��;��S_c	'��'��"��OQȹ�i�c�
��$��jѾ�W�C�j��-K�r��[��
x�#��=P�ác�
?��8�lޣ‚�K�����±�%GT]<�=������C�H��A��—��eV��T����+���^��˹`�;T�v=
l�\>�~	|�y؟��~u���G<w���
xz���ي��Sg�M� �'�9�t���L&)A@
-mBS )`B���mh!1���Rc�ӒeY�u߷dIֹ�z%!�v�]iu ��pd0!L���̐�$�̯ۚ>�? ���ӷm�
�H�
��oz������ޯ'�|%:��W�S�����
8�#�^�87Ѐ����`�S��ӏT��]�=�r�{L&��u���~C*�gN�{�i��%8�
��dp�?�3 ����x����
�\�ahe�
eh�
��jO�y��`~���R�M�OU!�KrU��h��>���D�u���38lj�,J0��pz���T��~��ޡ{�&`jm��
�յ��k�˦�t˸��("�R�(H�ɼX�&�Q�oAq�
�q��
˓�2�,
�a�h6E�e��X=7e�Nަ
;63e0�u��O����ɧ4]��jn���H�"Q��RĀv�
ߌ帶l���a,/�1 
�G�#���
Œa���ܔ��>ehi�3~�1k<ʞ1tȧ���i�PQ�'5�D^�LRM�l�)��l8�q(˛G�|����
��0#x���eX �+)�z�
���9�Ys{�xJ1�?o�����'u�d^�H�2�k�����<k>�q2,9ʄ�q�0�0�|���h����ah
e�>o�
옵
fϘ�+&�; [...]
-%�
��h�>�鵐i���f�qf����b�5\��É���ߊy�s�&`�`���1k�{�ڦ�4�vT��ᢁ
/���A�ɩ�YL�"2B
��5��=�+	v�:̂*;\�q`r�!�=�\=�
���y�������c��ʚq
�OZO:���ᢉ/��)�,�du�
�P�bM9�7�Fz\W��j��z{Be7&�H�΋��	�(�����
���un��̬��u�yP>�8�Z?�]�'�[E(f��jY1)QU��oh"��^�jN^�l�^$o�Gs�4o�-��Ҁ�28��>u�9�Ƚ�yh�l�u�^s��K�O�3�;(j��zIyD.�
�A�s���\��5KT1��E� ����7�� w�>u�>����3�
��m�u
*��].�������NQ!iWcZ�DX���
޲=7�B��^Ut�pQ+.hD����2�-��h�M�;[���l��'�Ap�d:�d��;
,{O�H���g�����p�j�]<�5��jT:�h�Cj���J
-]QI�%�d�@�����
[����[ߎ�A;.}�߆w���[|�pRB�\�G;���A���-��٤���
��}S��KU��T*K�0)�!D=� eR�oh`�2x�o�.���cxk���{�w��t#;]�ds��=c�?�bv>	k6�`B��:��E�M��{M��DZ�"V�E�
-��Ӽ�g�w�o������2���o�M�{�
�ir�e��Ӈ�Ţ#�3P�S
-	��}���f�j��;8�wy��m��>3tE`��uÅzA� Q���ln �w��G6
{�x�����ϫkE�7���]�H��H ~������5�_8��ɯs��뜀g���q�+<k��k��z�ʰ�2�Iކڰ���
����ꚮO��'��6Lj�!�D��D
Q.aB�2,�� Q������1&d�1B�*�U��P���z����/��i���D���~��?>��>~���?�>].L�m����`�=a
���cܜ>"�ˑ~R�J�ai�VUXaS��/���%(\bxa��@�
@�Յ �e �nH����\�tz����K?��Y)�ƶX
�f�#fHv�uq
����Ҩ�Fą^DJ�
+��a]��XH:�$�?y
.��d�_Y«�����Ѷ<�����/����"|g����v��tȣ����L�eU���'���돉s����F;��3����
�����@^~
�\R��|Q{i��K��|�
�;��yw��p�Q��~��z�D74�� �(/�����	vj �H�R���twB;ڕ0�^L�G;��t=���@�A���rɊəū��K��~�5��
�
�
l;��ζ�Й����twfe��vu�V@D@9��\"�IH"$!	���"	I�r��Tģ��]ԭ.�㮀���:}^�E_|�^<�<�~�$���g���oX7�XMs���S�R�8JI�j��'��C����=�
r��[�k1^�	�}bc�O����7����_my~{`aa�G�O�?d��8V��9Г×��;��-%Pȷr��
�|%��jMk�
V��"H+&Im�Ty�x��d��,
c���T���
-1*S���]����S��wB?6o�?�����>Oo~~���������Z�J^]�r��rj�����[���E
�ۛb��.�A�\��Ԓw��ͽ����
xY�b�N���
�8�ww`�{-C����p
�lI�nF�'�L�Ǭ�/F>�-/��,zT�B�^������
��O
>{��.�����V�~1�
��v��tnYH�I׽{Bc{C�������:
>g�ώP���:}�$%_z��^���U�S~n�ˢ��e����Ϫ�������q%�k�ҔIe�?R˒�6^L|�,Ox�ri'�
�	���ޥ^y/���	>9� }�Ǿ��+���2�2AnB:@$����dP����������Ɉ�ğ?�Ǐ۠d�~u9;�3'��ܝd}/Ds;d~��>�O`��?T��.�@�WY���4�v,dG$���xPt2\���11 
ЧO|�	@<(�1>0�n�N\x??��G� ����	�)��e�U��Mu����ƥ�6�-�k8�b#S͢���v�횮�馐��J�~�Ү�����*��`w��o�2�`�i(�`���!�8)��:���W���@�K�����D�|�Ъ���j���)��{���g�3�Wzǫ��qd�q
�1����>��,��
��A�����y�-�"�8��Yh��f�NS���%�o�_%B�)�X7�o�Ƕ���;L������ye��T;-����

��D�A
 ���
���

�p�[�Z�T��	ͷ�4�zS>Kk�L7tD�a� 3��f��Y�`�l��^{��j��{���~8
&x@��
��� ?=
-�R7
-��E�Une�2�^dQD�L�r���9I����[M#D�%@P؆�~?V��N�����
8
��o��
@�A$o
�@����
(�pM�@��/6,qkً
�x�դ�f�u㍼�*d	�%v����k\C�n������\��ӂ�9�X��g�h�
�?�)lń(9
-��R7D��k�P�Pq������Kf9T�$�Y?���.
���c�(w
�5�A��3��x
�ی��{�6�
gsv��`�� ;���l���lH�k�lԪ��a	*�,�ђY.I3�����8�a���O��r� ��7���91f�k�p�oui�6�����ٶ�0 ��( KJ�lK-Xo;_�*�%/�K8
P��*��c�K3\iaY��<�
r��|^|ǐk
2�L�=�>_����U�SI�;��
6�mN��H OH�T$�+�U=Td���웒r�l+Z3! ��6?��9�(�zI�!7�3`�z�ѯ��P�^e��-'ڜ2�������a@d�#��LҖ*1��:�H�F�מӼ(/�J��	�pEH��y,���p��W��t��:����;��7
��^)���m.����3ȷ
'����=�Zs&�6��qg
-�6�q[�ͷ��O���G$$�_�py�
��"��!hgT���6�! !�E
f_+��Rl.���[�b��u��ũ�@���36��.��}"~�'��>�]W�6���
S�L�
-��
1�f񌒢�Su<*�q�O���h�fuqi6g���A�m8�%h?�w�=� �Oe�4Ĕ=1�a��$P����[���k�匭�sH_g7)h�v!oF�VϷ0�&9��6��g���t���du��l�`�5(�
_�YT8PG
]�����s߉�5{4�;�~e�l��H&{a�L0�Ejm����<,P���2�|��s����sz��l� �e�1�-
��
-��?N��٭�<�������T3���T��TN���ؔ�f�WZi[�y噡r�x �((�x���J�� ��!x$�)���ef5��5M����>�s�����׏o�P�ʝ~���w8	J��W
1�4G��u'��C����0��VЮ#�ԫ�%JFWV]� �R�-fE�`����%l�a*�2
-�
��&
7�Ym((C
U�5X�B��~�dgr[7h��~��
}���hč87w*A?������:�Lڞ�6�4�^or]����������҆
�Xѝ&j�L/RiY��vCA���)T��u6�Ae}��
-����{4�8=��?p�k���������b�P��Vg(3���]��BGi��K��{h��nzicg�X�e�TC��P��	T!١} ���փN��t[�>59w���#;�vމ)��/
)+F
�$ev+����Ӥ(󻒔�.�R��PtSj]���Τ
-eGr�Jc(�D
5f&P}�j-~�&s�w
�l���
&���n.Y�h���)�
Y�Qt���в�
�E~���Nkb�r[iWr��a;���=��VCjRic.���Tڄj��P E
��&P�)4����6_������.��K{OkV�W<>D��:�Ew����a��>r�:����lH�d(���qm���6�r[uKT[�|ks+Au��t�pP�.�0��Vh�a����f'��
,�լ��R�:!]:� �se���p�1"�@L)�F���K�%t��ەYݑ�@��	�29��
�!��kZ���b���.���zۖ���7.nޭY�����[��"B��>�ߝ�1��c�E��G���C	�z)�?�"�W���Wc{5:�
��D����UՄ��/
-j�DA�?��i�W��7l
Z��7�ʷ��;����[�����%���NJ�d&�Dr�'IY���\�hR�6�0r�-��ʺ6�W
��C�`}UI���$P�,1�oDAÖ/V:���e��ņ-�����`�,���o�Y/ݱ)�|���!	1�i���Tܽش��D���ι�t^�73h��
0!���-��/��
����]6(֣��5�~c#턉��ӗ�R05�n�l�:����C�Ly�!�
�a�1Q�_��sO�q!�)��%5�#�����03�g!����0�̃�T�����2��^6��:ע4C_��XW	�L�����:
�ip�=<��U_��A�ޝ�
�[T���X��+j��Jr��K&����x��?�<�pj��xrY
���
-��F�֠�uF5��1�x�n]!���L03c��y8Z���,�v�cAp��B���
^�G���ubϜ��>��'>�������s��Ca����@Ci4kP
z#T�=�� �sa�Tؽ��;�`�����f�
Vg��
�� �;`
� �x
�N�@vv���G!��	R\
!�p����
�J�C���Py���8��Otغ.̾���߄���?�m?.�N�����8���B���p�D
t ��=�~��8+[�Z�!H������[C�k#`�X
���0�- -�	�"<�A
-|G�F��1���<�SJ^�R�0�!Y��@*��'Ve�.������a������
-f»3�����a����C����6b�@

��F
L��r��p`E�eR�+)�1�h����
�"�0�Alq�<���T�;K��?C�L�ES��T�Z8q]41(��
�n	o�o�>dl2.b�"�
��>c	�@g�aЫ\B��X�K&=�ה��%?}�*���_��Ŗ�͐��i�ŢIb�h�X<��"��� �JF���A����0(�&~>� ����C

���e	���C�f��pc�/ش��LV�bJ�-?k.A�7_"���NDˊǣ�%c�ƒ1���;���;���A�Ͳ^bYgT������2Cb�!�,OK�=�
y����7�����D�vZ�C&�3O���&L%H�q�1�����|4JYq��Zy��-�����>i'�:�O�J�|�C�>
1d#�LĐ����3�ѫ���or���ٔ���T��Ûc��M'M$��c����ؚ�r]�0IU=
u�f��#��� �Ȯ���Z�T�!�΢�<�0��ZO��sj�Ӟq�ku�Qj-����"eA���`	�@XB$d%!@VI ��%$lj at A��A�
V��
G��;ߙ�uz��ݼ�</�W�-�D
4�P��
��Ƒ-���
�aX��kSҞ�d�h�����[dj���Z�
"Ox�� �ɤ��+�3
-�:�����]�VlW�1��U��V��[�T�P��Q-h%�B� 7< x�G?p��_�1g�0�����;U$�x�9ZB�_/�4
�	��9Җ�X��J�Q��r�]�N��l��8��x�Z�w��N������̆�P
��!��?�G@�ﺄԧ���)f�=�:N+eyʫ?�X��|A�U�DُS���VM'Ρ��8�Z�C�"84���<��&����n��@G
�}+��/ԇ솆�Ph�:�F��L����-��ʡ��I,��~��!
(�k�˓�_�i����o3hrme
bh&"zi�]'�wh�.t�{
�P
50Ps�
-o������𘷢��ϛNb
-�
��eR�YD��^Z?D��^)�.�u�ZB��5y��h5K/X��
6Cc��u������wC-j`�]�A�@�=H
���w��KYL�#Ib�dSj�O�l�?9���������-;r�6M��֜o��
,�B����f�!�:���:o������
X
{7�$pȃ��p�Z���Q�OZ�I�wd4Oc
�
-�,�մ��s{��.�`p4��b�+����6#�1�K=�Į�Ԡ�Z��D
�=ˠi���E�~P��
?�
Oy���N���9Wz���J�LJ{+�m��:�%:'�l��J�Vf��\[j32JmF)������
`�j�/��zhٽ���
:��p(��XҔ�x�D;lN/�Ug��R�X�'�72vu����sUU
U�&[�b��XMU6cUb@�{���ų������w�@��4�����4r �+,v�RL���S�}��b�>�٦$�DbR��f���w�9Wi��Q^c�UT�-U3�f5URm�J*��0P
5p�̇ƝK@���ޱ
��C�?�
-��
;61|��������3$�-�!��x�UF1�x��&����(��b��JfX,�t����f(�F�ނ�Og 5p}��o1(����f������������<?znFE_
�O��1�ʮ�!��ѿ��L�W����V+GO��d#�͖��\Ȳ�j=�a�y
����x�A�u�|W�qˆ��m[���w��w�vH��Dd�k46U;t*_ܗBc�d�˜Y.Bn;geR�
-s��j�l����V^h3���k��s
Zo
5p��� ��w�l\�
ٰ�٥����\빽{Ǖ���;��nE��G�u?&S���>|Sv/�%��V}�)�$;͚�F�.Meם��u�EmvC�'�h��QCݢYа�sh]��,��^�trx�77n������9�7Lw�@���,�Ddu,�B����
 ��%�k�{��=���e�ե:�u�S�.u�ܥʐt*�
����ڿB۷��/�����7&V,tOm��x�}������ 
o*�<�^DA�xbyލ��0��>P,8�Okĸ��D�T��6��.�HO:{��
9F�#OV{x�A��W~�%�=���3ϭ/?u��l����m�Wۂ%/���=J�=:�U|?�H���d�eP2<���EL���p�Y?���
h����1���
}
�־Fo��/>дp��y�7g�3w�{j�<���U���m���v���?�6
�T��Xq*6;��ϸ�AJ��S�+�$����<��u��	#j��6r���
`D
3���,o�p�H���
���O�m��\��ekİ~'��  ������g���g�=�`O?H'���O޽P{�\3A+���E��%,�a\^~l\�f/�Zvll�k �������sip�����9*X�U,_Æ�۩�#���߇Ec�DǧM�'%�HNIx���+�\̣����$l�/�ptl���%
��17�~K^�}
1d�N<<y�k ��g�:ӧ�w����G3�/?��_͂U�V��V������Y�
-Q������:�j���8
@ϙΔ���Zt�V[p��
-�
-J����,ʒ�,$�@���D�L�$ ���Q��U�"{A��(��"� "Z������3y�������nt�;b��7����i���\B�+11쥂txNE���%���!�fZ�s=�ycr�̏vi@��~Z�j�^��������֬̆M$�k
�ەA>d8⇃ȀX�
�<&(G��dl��1�?�Ƞʨ���1���3
?��
������3v��jjqB�n8�J��:j`�G'`�21|��
;7�`�&�o��P�h�
1�G a}C 	
)ȁe
���d
D#O�/����6������
�P{]�䈪�F�
�(��䠀�K���c�.#��K<x������z0C |s �l���~�wGy�~���4�����;�@�kdy��n�#���֊B��B匣P2��
>q��gK���hpu�
�?ŀ׊@ؿ� 
tAC��}��"��c_zA�W;���(v@��ہ��;�\�B��Pn�
��
:�w�#��-����y��a��~��	���C'��z6�
UC���_�����
-�
B
�9�t�
��;���{�p�?
�*���N��N���&�	n�

-n�������lw��
p��?�8_�QC��<
-Lq�;FV�k�)�+�>e�RƜ%Y8ω��g�z�4�Q0�kMa?M���4�7�q���1콌!�}�
�X�u;1pC:b`���!7Ey��!%x���„�Li�������RK�33o�T-�"֋�2��$��+�Il�l2�_� ;$���'�I��$�ʻ���厐������7�Fz�,

���\
�
GN�-M��"Eǚ���T�`�R%~B��L&6�
.dN�(&p
�G��~H9�8���8�l'
+�����]��m��E
�P7Ȍ�E
2��&G�rp��I/�9��iγ�"�Sz�x2�*}L��|DjP�'^81Nh�~��ʾ���}�8��K�� ��i���i�1��U v��p�9��l��	�Z$���N0g�y��4�x2�L6A�T�'�f=$7�< ��Kl�
#���&���s�)��'
�/S՗���
@��	��A�
-N��*��1h��b ���d��|�
Q&�O%x�ΗL��(Ɠ+��jU�)
�Q��S���4w�75}�M{Ҁ��6��D�6%h�'h
ĈA�D�A��
p��
���m|(�"F-����l��Tže
'�Z�8�8k�aV��m�F������wI��I7
-�i����~���~���~}�F�Y;A�2��	��Π�q����@���P���B �^���W��f�ΔT!���
sF������.��
Jsѯ���z��Jr����И�k8��W\��+�e^_4� 1b� �,o�
��B��!�
�APw�}A"���N�Uq�SJ�xBrR9���
a�C���۴s%�Ime]�+�n���n�Yf����SV��)��)���
��!c�H�ɽ_��o��C���P%���
�I/�
֔J z�P*�5�ani��Ԛ����>Z��*��|��a9���8�fkz����.7q{�ʹ=���O
@�d�A��
(F���0��a�D
Y0�
��H ��R'u
��J���P���
-
;�-�ִ�WS���Xm�zN����f���+��
�2~��D�]nt��1���k%��~f�o�2�
�0~P�y]�܊�?����K��
-��
Չ��LM�eQ���k�j�\��r�U�[k�תK�mV����H�aы�LzqW�b�
1�C��O@��s0���
-�&�����߷ua�s�Q�O���
ԑ���Le����-Zy��
Uq���R+���
-�Yg�ԕ�[j�2Zk�kU��6�N�Q��t���.�bA&b�#�Vg���
L{�B���P��z�7
����C���F7��}���V3Gv�H�wV�e���U�+�mŲ�.�5���[�4�m���y�6k���R-�4���UN����<W�e���q��h�w�wϝ�}򯈀�+����N� �LR�b�Ц
)�skк�8r͘a3�$gR"��
FB��0�M�U�D�)���M*�W˦ҡ�=��?0�^??�ߞ�	8��&�6�
�U}�|kY
�� ��jNve~fI-�[����4�
�
}u���^����6$䥉+PI UA
-R��9(1�B�N�7׆K�/�v�o��������u�Q{�8�7#�Ng��&�eTd�֦�T7&�t6%e�6$g�եd�פf
�RyC�4��%��ІT�!KOJѿ��5h:������.����qƳ#^؉a��`o ����t=�\E���ˢ���
�IW�㊅
1ŷc
������&��W��
�J�U��
�HG�І��7��XjMv@��o��\�ԙs�y�����(���`���;�0Q����\~S\~r]Ji�(�*J(�
�V!諍.�9U0 ����4\Q,��x�\��6����\�MPi�
���P�S��ϯF,~��î�)Ӂ	o�[#d������^ΙK�ii7O�ĵ%G�d
��˪��m"Và�p�*�lHU2\](���+;�_"�n�.�P�-
�����KW�X_iz��h�V��_�F���
Z
�+Ǩ��bV
o ,)�7&�D����.~	��Ҳ���唎{��kb�F,��W
Zv�,���Ոɀ�6d�
W�6@ݾMЮ)�a`���cm��Y�m����s���͸;�<'z�<��'�I��nj�L
���E�sĥ~��$�B������ђ���f�X	G8V̩+�2�HA��:h��k{d�v��̍+I?�U�
\4P�|e�ۺ`o.z�+��'�?C�'����~|*l*�
c215`��#M�e��f&��>#�rH��������|j�x>�A2�
9�1P��R����o�<�݂x�.��NW��@��Ʋ�5΅�ʃ���vz!0$l�Ŝ��
�KH��H"N��_Ԥy=�H�z�g���04�A�y����,����Ey���٬,��G} ���"}�b�g}��OX��e��e�K�'!v�D	_�0Y��ǩo�"ȋ��ą����s�^����kJ86׍z��99���`���t2~@2ȓC�B
yvK�߿靐E�?)�ԯ��&X�׺��5�\��L^sv:����F"����e��d?�	ƿK	�\⇻�)�t{]u�e�5�y�n4nq2�u�e����I��
1�@�&d�	��t�G��e��ɍR����R�؞Z`n�v��b��, �S!O��"�������
-���Hu��
r��K�}*e:.װ�~��v�x�c��O�ѥ���$Z"��o��
i�eLMo��ʲ�@[�
F{�^
ؙ�Μ�����
�.�z�D{�@���
�,����D۵r��Z����
?��
���8�r�D��݁A�
b������fL6�lL
�0V;f��`�K���dp3% 
�	d
7���
l+G�q@�#[8ko
�G-��x
-�,�
=�j]��
�b�O��r��T�!H�4�d��T2���-�p�Sb��j ������'�t��C>
���
Z���M��ISs�?���Ç 
k
-��L���DF�r��$j�@�#H�$���C��!ױAU&46Aw�'�(���vG�U��Nkp��+����o5S�B��!J�b�
�D
}��Ӄ���P��*��C�D�}��qI�E�3� a�Q����*�q�G�
t7Z��#`&gV[��VpV0wE����Jz@٦

�}�}/D�І�
�����.�ݐ��r%�`U
0���j(�6
-�pUa/S
��1f�-����u�%o�/&��|E�@j�� �R�|�i���A���
-~����9�_�y��"�
�-c���>CzϐBT0�Bh2 at E��jp
�B� �e�(;`�uz�P/�R�
�e�@�����SWI-A+�v�w����>�o��/��e�<{�g��@|˚�]b=�{ǖ��
lMi2� 4k��p/
��7�0��D�'���^�'��
�Rʚ���B���ka~�mg}#��|%��#�3a&�����ϰ&�5���==-�:+Z�QԣuTD+�ʅ�u�Bf!��
�H�,�'$!�Ҡ("e��(U
(�L�x at e��(λO}�����s�7�i� �/l��>B�G<s�g5Ġ�f�m��>/`���X�/Ш[���
D��Մ.3�#6'�=�0�]�	���3ĉ�jқ�:��k�����c�i�!�i�{J���FӚ0#N�I at Z�
-��݀�������������xr �9{�"=q���H�{\v�[laSBz
YF���
-�Hz�1��|��
`�D>e�1�̦����X�
5�Q5P7y 7����@��?H�
����@O<
���qzܻ�,�\>�5�F}�)����b��_d���

��<	�y�`ۣ�pna�p�E?���t�ݦ,p�8�����9 ٹ��i�$��,~�'�<�=E���3��c�h/qǘc�Ӭ�*�h䥄g�x�=�?1�x��~�M\��!�_�;�_�[�������
8>
 �yȷ/�5�
�Yt ��A�c�|bI�o���#�e\���=�;�0��
c�Ñ͢G���V\_�͘>�؇�:�Cɹ�>q%�y?�h�]����� ����z�jPo�4L �	A f�~�	�'�J�8=���le����C�5�Q
��Q�I�^�M|or=��񁬊�@v�ܛ|�ܛ�,`�:j��p���!u�l�,���Ap#��@�䐏bv�/����f<���#�|�`l��	�\� �Qރ�R܎�V^��N9O�J��t��Q��'i=
-�G�,`Ow&���� i�נ�8
��`ڹ��} 3�
ѻ�k���J&��DD
�0�
�G�
��M�I�T:�
�wc;��
����rj���ޑnct�3:S
�])��l�G
�en G��
��`�2�w,�� o�o~g���1����Ag[��$�K����i�Py�R���T��'5kk���CW�l�Ƿi�Y��<V�*�ݙ�,��m��
-	^S u�W��̀�-� w�R�۽�C��W�a�#��A&RXo�H�0����H�eNNZ-�D[C��W��ӌ�x��P�n��r
�ln�6�ۮ�$t���i.�B
��S@�޽��� w�',��_V�)޷a����B���<�V33�N���"�&i��B��<�0��]n���M��fS.����kA,|���w��6-"hW;
P{�+$�w
-h�	V�o �7����m��؉=�O
��;��~1���#��+�	��4R�)i��$D},1�pTPj:«�d��ZL�f"�gԋ�
Q�^'r财�g}6pP��q2��
r�=���Y`�<�M�V�ggv��8���<���	܁?
-ȸZ+�Q���'5
-Ea�NsDfEL����ƪ�4ei�w�jis�Zڂ��v�J�ХK�4�
z[pQC���
8��
�m�����e�����
��.�[�Zuxˍ2��ߏ���2�Y|A!�,�֪5H��(�,��_��[V��E�h6)�-F��nP�Z3��mZg�o��+ȿ�
��S�����{ڻ3g�V�4w�n���K�W޹p���}�J	زc4Zq
��mː�T�JoD��|�D]ni�[Ū;Iz�I��bLJ����Ɋ6��@�PC��ɐ��ū��Sk<�+���n��װu��aNJƋ����[q���R(��X<c�(YuD��Y2
��\3�x:�e�j� w-��f�@ӂ�v�(ݑ��֦u�g5��
Y2l+��T���/.��zએ{O���;�ۗ_��߷�.lwi
."�,�d>��jl|��(9U��ѱr�����fr�%
5���0�3����o�'�
:��M�,��s&��[W8�n�R�)UK�]^6�a��֖
����6�X~%dg�El��|
AWIg)�E��
-�	��b��	�K�1��F|q
B̳(�V=���1�m�xC��Y����0��;�̂�c��&���ε�k�����\�,�����č��
�`�rlLj
��x��cW���ʴ|�Y
u��6��NQ��aK
:|a�6.����ݮ�X:ҝb�M�f��*�7�C��IC�<\:�������W{}��w�/<�ص���� SS�~Ս�����u���q��uDP�QT�(��b��I�l$$,D�*0�:ŒZ;N�Z��:n��ǵZP*���2�)�UdK����9}m^|^�������K.�7V����z��a�Z�������j�BK5}��F_�\c<�\������m�zG��i�af�ӛ����0�ܻ=��|��j|
4�쳨�Ǟ$M�W?l{�������I]voqf��"k���[ե�m+��U�n����zZ�h|��:�^E�h[��m[�?���<Y�<���
��
��id�kMn��s���Π1G_F��}�
��7^��g�Ī'��AQЖ��n-��h-ϥU�+
m+��
*��/�?)��(�^{�\��|������g�`
s��v�}Ε\��J�
��}��y�����*!dCOZDU��[�M�t��Y]��U����g(�֙�][�u��������j���xi�ڝ'��S ��](��U���N:��HӉQ��
9{Õ|��F
���
���`䔿ڸ!�m��2�8n�M�0˦M7��"�-_&��R��*:���6վK��^��<�`Lj7����x�^�[^g��X
�F����tƙ�it&Gﺐ�
�
�\�
��U��ɫ�T�4N>�Q��IT��"�b�ŋx���F���R.��p\��T��*�m?���;��1�t�e!W�r�Ή
��D��y�jx,k#�]�!Գ
Q>ňX���&�gk ���*�Y>c�Ȏc���d�%rQ�
��)�#5Ңq��+�Qh�G��3bw�F-!?�&�H#!�����Ej��Z�Q�q_��qY����_��iR���H
�
 [...]
��sp1n
�q�
��9fG���!�~%d͠3Y	/�RLt�F�kӡ�\Ob�
��IC�o2�� ��: Ʃ���:K��ayU���4c&�Ϝ���Bp,4?��
�#G�2�_%d�B����R�+>a����.|��
s��
���xF��=�qs@��
݄Y0�)։AX���ISQ��-~�b��Oqp�?��;��"s�;�T�R4HH6�•%���t�0
	�`�Hp\�"b4�G��
�v�n��M��- �1��
3Vw_,���
Q�1_������@?�	�`g��]!�gC����zzt�Ph
-á.��r=3��'C�M*${y�C� ��B�EXtY
�m	��R�w2���6�M�V�/z/钼�vH�?��i�3
�lhS�`�¨DFf(�Ь\ �_�ܜ�v
���CrH �1D�%�3O��
�;r,j��ߥ��h at a��Evy���7�;�S���0�	�A1���lz�,�
-��8��H��A�6	�M�PnK�|� ��bH�-��
�z9DW�UB𘂠�z'
�~٨
�]�Bf���oU��
�A�
%�@ǰ���l�r��2p`^
cI<�B���W(w��8 ��V�)%$u�WT5�!zJ
_�6� �+
�_(lt�rH�
e�<p F���c����G����<��e�a�r��
KQ��)����"�z��~G)�O�!��@zU
�}ݰ���.y��
�:���ڨA��T6�
z�p����tg��\`
-g#/�
����H
�B5����]
eE*L��o�@�C�^T�i�<���N?"��1,���V�a
��;���V���>�&�f�|U7h�� 2}�`t����06
-c�P��2A J�
��$7�?OC�j!L�0lSA�G��~Du��AYgV\7��?��Q��tR��6�?�I�:�?���K���
9���4d0
�\`�Q�r�$T�OC�l6Vh��%<X��ȪV´��a������=}��NU�m���3�|�ۣ��m׾�m��Y���~2���h��;�ٗw�X&9�4��,�5+��bu�֦M�ZI(V�Q�0qQj塰D�>o
e���Lp��q��__�ӫ��ڣ���I7�?������k��� ~�"�-�ց�j�W�u��Dd� !���I�
2	h�����QP�(T�hI �
ǭ{{���̋��yy~��y����$�A��'b*�3��7Em��J��O%\�OŚx4C����<H�2
-�e����z��v��A;�{ೀ���M�yK��P�a��,���`�����Bхߠ>
�
b'iݑ/���f�
F}�KF-�%�:v2�2v�f�A�i
:Oǡs=�_H��`��0��Z�:�*�J?���,�m:�����	20%��	��q�qC����hm�ݨ6foT?�'j�݆��4�9u�	NU��<��*��А^�	_b`4���0�6YA���P��2���
�4���]f��2�e\
w|D�
x�����~j&��T�x�X���p%�=�6�s���@4�j�
�r�ѐǓ
-)�
[�`b�c�1�`	i�,�p�<��f;/���_����
-|
��A;�s���T�!5஘���I	7X���-	eI�$-�>�CX?�\I
j(c����O3 �4#7�6��N�0
�������Zd�{�߽\���m�l�׷��m#š�C�����.9
�!ƶ��˜LV
���]�Q[�j���6,�K
e�D�
=�<Àd0��
�x�9h��@Z�jK���f�{�p��?�����p�j������w˓�S?�+�<ڕ
�ߡ�c�S�X�8�Z-P�K�j~!�B��l��0{R2Y:��=,V�G��r��
=/�mDP\s`
z��[k	��sB�f���jv,��t^<{���	��j]��7�w�Z�u�@�E
מ��V�ET�$����x�b%R��ν)S ���$�"�B��˸D�5ŕ�hڷx��HG��z�,߾ோ;�^5�Y�ovY��cS�%�]7+Î�j�~�jrXU�P�P��l�,S�.)��Du2qrg�H�\&餢�a�H8�,�	DO�7"�@����@��*�,��X�S�����i��y���}�-�z.��h�
um����ǟѨ�1y�H�J%e+�f�%�
b~j���ږʑ�!K�餈tX�HF�y�1_d��
�9��i�9%F��Wa`�F�����
���N֏o��������U��6�>\w1ҧ�"6T���U
�"O�e��!�<3�2%Q�*�f<�%��Ii#b�|TȖ�	8)
GjD́dtm���-��
��,_������tm���k�Ń�]_t_w]������|�`e�DAmLpf�V�"���tn��K��R��%q��)�y�I㲇%dՈ�znLHK���
-B���@
-�6�X���� ֬��6�c�7W�G��0}wv�]�:�����֋��5-a�9��A�ZR���N�V��
-�T��#��$�J�đ%�"\�hrL������ǟ7��J#�rn<�
����[���% /sڥ�Y�-x�g
~��5��=��?�
X���t,���S~g���Z����x�B��/sI$�4IŎ�� gj/�C����5z
����*4 ��F.!g�CȚ0
���-���E�m�-x�l�ۀ��l@�З�}p��Ɓ}�U��7�ܭ�>�"��Ϳ
{��IŒ�81�k�5��R�ji`����M��K���	vX��QdbF�0
��
�v��<���[�_o�7l@���陣U��eE��m�z�]~?h��n��/�$�%8����v��C�2��]�$���ow/���4��WԀ�W��K���կh!�A�b�;, å`��
-t�Y��
k�2�4��c��
��G��f��M��c��ݬ?�Q
��
�}#ف!�����'Gz6⼆�p��q^�o	�7�}�����:���Y0y!��`���X��NK��g
j�,e�UL��9or^!�p]/?��4��$B���Q.X=�㴞�0&���+��A�m���;���2�]�>����0�����Gz�b
L��;Z
hk� 
�,A�}kPd���k-��[me�{V�g]�1f=��Ϝt������{j�x�&��{���9����:����j��o�|�}�{��׉ϾGt���~�;���߁��p���F :0����Y��c�>:̓|�ޖ��y9�ӡ����7F�y:�-p.����]gQM�y�?		q�
-.,*  �l!!!{	I	�7�k
�KGw�KU��#-�X+:�u��A
=z�L[��8���
-B|潚��|�w�]=������hi�l�*5{�.]0���wp3�G��N
RqU���"֘[�> a�s�bOn
���"��)����{��>�G�6bڸ��-G�x}�H�Y��|HC4Є�aX(AQ���<��f`u|�$$c_R"����mJ
n�Ƣ/-H�'�<�<IQ�ϒ��(jOEm���־�V�U�M+E(݂�	�|��L�C4S�,r�pa
-�@qH*��tA<ֆ���E�<"�\����q+:
}ѡ@��9�FQ_^$�W)j�m��HQ�`Re�
g�
�|2

��2�������$�S� �cA3-��q�Έ&�"Q��5
�uv���en .�EW�\��A�G��
�%w���A�}��
�(h��i0u��^BӸ�f#��B#l�X� fF@>>
���a���@TN������q�
���G�����q��2͓�
$���ߡ(��2�)*%�`�8�z��
	d
��E!�;
q��L�
.}6D� �3�e|��4�|����E
s262'aq�h��/Ȣh���f3 �2���*��� (\���GA�i,�; <�As
-��R�u�
��t�:3���A��Ld>��
1�y���

-��J
�'�� J�C�ʀ�ÄF�
��KTaP�-��!��D��X
K��/l��d���AV'ɺ��.�g� Ivg�|���[x�bd=�xM��4d'ѡ`1�IgB'��^
 �9��p��GC�I<�ے!ٟ
-��t�Nf at x&�v.�Y�wg!�>Y��� ���/��y���B�	����t�&xC�Ȁ.�	��&E ����
�[��D(��@����/8�n�Bܖ�>��B�E<�����C���!�ρ��
ُ��Qx�� /(#hP�y#o1&�����BPPCU
�ꓠ�4
ʝ
�� =�G��BH�#�3���
�����
KG����R�<U@�@	��U���x��@/�Ҡ���1�k�
?8�`׆��
����0�`A�!
��\��P4� o�@z>9�� �&'}HN�J1&Q��O�n�=�[}K�Aݝ
��<Ϡ#
4��>��(:�qLT�}��å
-A�1���(�I�y
�-|�v��{8�TgP^R�W���h�ʟk�4O��w��y�����w�:�?�.<C>�)��4�½a#*�}P�2��3�L
�}*��Q�������hA�d��$�?�ҵj���}��������j��z�o������W
��˦QӅ�Q�9�g0��"7���x�&�����Xś�U�@|��e渱jGʰs)w�t��u�V�+�ne������E�c8��8��ᑾ�x_����~������aK�y�r�p��f.l���=��tГ|�{]Ċ:�&N�'��ؐ=�ա#��1�+m�W�U��]����G�F���&�
K��_�
-n�[n��Z��
�d(�0��[mmEC�S�C�-���_���z�l/�y�A���o�"����ؔ�-�Y#���z�Y��[����|���%��+���p�2\+9T�cqK�?�gK:-��;,�J/Y_8�Z4�h�
8N�J����)
,9��y���L~#�d
+ȷ�.��ͱLlK�2�ȟ9�(
���v�����mp�o��]_�J�SM��k{A�s_�%�Q�{k�7%�γ�����������fG��pY����eM��>��'( ���d�ȾWOz4̣a[4;Y��p��؛=��n������[�m�
.ѕ�+�
+��ۗn)��z��t�AG����d�9׉�+��e�U�|Y�y�+׾ʾ�ݮ~�.��
��'0�
�FfQC��5��&2�
����%��?�1��A�d���袻�[�~���mC�������?�h9�|{ɉ���Ǫ�]�]mK�:j�\����]���E����tm_�W��l�y8�yƟ�8����H%C�E�S��f_˖�
��88��9v!�5d�l!�Ҵ���eFi���K4�L��������������^���XY�A�@�����3A���������Z��6]M����D�j+���.;�
��f�w��9�&G�7�%��ƞgTF�.�8�M�<�m^�?�7���O�g�g9��9v:>$��,
-�%t��IIl�b�樒���I^�֥N��{��:���+�v�x�o��f�:4�
�kR��e	i�"anH^lYXVt/#��\Ԉ 5�=/%z*"9z&,9j649j>$)j�%�=�֓0�{��"_��B�4{Y��S�.u�E�p���@����
-�k%���Y�5_qO�f���Kf|��
��P�w�� �.�F
-�&�B�W��Lx��YN\�
;.v�%
-�#<���{�+���U���ͤ���Hߴ�z�rL���N����M~�jK���
-�O�D�dg%2�22YI�„)�x����䇑��	~d�7*a:<:~�7ǎ.�D��DaD�r����xY~nS�ћj�ᮽ�&ʷ�m�Z��_��s��2����P��"�wZ~ܙ������� ����*�d
8�ᇧOq#Rg�y)�
~�
[����&<p�H�,
�'
+�2��Ui�!
�{T�a�n�ޮ#�;ڭ5�]�������T�8���<.���)Je�
-sC9�ᬼ&
3����#/8g:"$s&,4c6��6�K]`���)K�������W���[
-��(�ݾ��=��oZm����b���ܦӖ�
��	u�151���$�<��,+�)��W��[�.ܿx&, ��̙ce͇��/���
b�3��]^6��H�<����}_��v�.W�g����A7��;=���4��i��q�^��b7&��g2��J���؞u�C=��ٞ5s�Se�!~�
������LQ ��!^�0ZE��&<�A�t�A��6J�#�ʯM7޳�ɼ�?��)��[
K�
���������~���Z�m���m=L�ko]���'./1=���^�ˁ�J����T*�-xVG�mT�E���b��T�m&W=Փ*6V���L~����^t�����{!V�~���
��g_��[o��So��Co��}�۞�~
���M������'.���!0�
�
��2�v����
M�iP�R
-*GUIE����W��S�c�~�Gm�3����t�p���������P���P���P���P����qW���'����æ�OO��?�
Z?� �
������~W�Q�z��ck �����w���wec�7S澵�
2~R'��
��A
c�C�c_;�e�ڎ[
k��|}��ś7V��}�6}���C�hq��z�E�e<'2������
P��/h�5%
�&5��hQ�tٰ�cJ�	u�	M�	��'&��&8zv1��t���Cf�5FG�w�L
O��
M����&ߢ��gh)�Q"�u ]-��M����2��� qIb�4�ܥ���%C�e�e+�eGu�e�-���Y`�X~��0]��e����h�T�����������h`���2��AÃ�"]�U 7��w�w rR^�N��/��:��Y�������߇e\�L��
��Uł8Ža��1�j
ƨ-0YS��a��^l�ٍ��w��]���hz �ڈ�{ r
$� ��
��IQ�䋪dwԤ����
�G#)34�6A;Y#t������ۇ�J{0ZYS7l�BUm�U��.�m8�Ig7m��[E��
PIt�{ � 
 �=���e�דlQ�l�_P��.���ш����zh-��$w����Ii!KZ2���_

�n�Z9U�߀�
-*���2~Z'���D�w	� �k �/ 
+ at h��׀9ʑ�Q�t7��Q��u)�����t��mEs1
�SCg�*zҔ1@|
��+�PB�%�b��,�H�b��
�I~�������ݦlm�#H�(
z�]T"�in%oFm��7�
E	
)�hD�GS�Z��ʠ3u
zQ%�I�!_��Ib�q(F�خ����<
-� �V�渶(.��@ �B� 	dO	 �D%���AFT8�+x�vpk�:�V;��z�U{�J
F�`Y���M�&<|��������GtN
-���Q�b؁ʹ'�

�8	3�V�CX�|��#�⌀
.`�]�OW��+�N��~n5|�w<���>�����
�`��
��A�
O��_
B��'=����q /n&��y�d,@؆%`mY����`�Y���n`
u���g=�w���4�{�@��7|I:�H��5
�?BH�I �t`{R��"�n>�
|��bf�/s/m!��?�삐OV"x���F`�'���!�,ɹ�
�
0z}��OX	҂A�g,�7��{Ɇ_g"D.�ǃ
-�Q�v��Gl���Y�MtBt�"�s��+]��*W�5�Fh+
!���:��i__�#�;?=�G�+b������� ��`>���7���ҁO=��3�@$�fA���b��"�h%�[W�WG���mtp:���f�}6 aי���
D� �@+��5z��q$X?�r'j"D���u�"֕
-��
��S g8@>
J�d��HJ[Q�+��<���:��
D�3q,����]b��k��,d�;2�{���!���8?D�s3�듀���U�HXA��P��AK�
-}�,�N�&-�*��unH2� ��_�x+l�ƴ�Ew���Æ�؃Q7��Q�9/�9}���p�ŀw3W�q>�&��!��?��{���ԯ��Z{d�>@V�#֊A�rAr��UU�=,7�J�$6�^�Z�^%�s^�[��%���*�7�!�q�+�C��;Q� 8/���DN&A�-��d_Ɠ|Ň����-֑{��@
w.

�lٲ�t�[����R[����"�WQ�T�;�����KRg��I�O�����{�[��7�c��!� �q�e
�#�C1�$WLh�b-���
-#�G��4�g�	��_4��egy?Y���H_κ���s[�+▲%��������kҞ�+�o.J{�I�E�eW@ܩ����j$���>đ|)�֑�����6�UT��N
-g��7G8���/yZ�\�ИN��n}���%�7�,ܫ��Q����=��V�!�Jy2������7ң��v�[��V-��@�g�_B��idg�'=���������6�M%sz_e��_-�
~6K]n�t^7
-r��
���9戞�����;�O���?O9$��
�w&�8�|[ٮ�]ٖ2�h�[�ͩ㲦Է�ƴwI
�����dg��Q at zlZh�R��jw��Z��OkCf>����VE��u��v�$�ٳ!�}*�$�\KlWv��#�Ir8}��`Z�j�Mk귚��}���#ꆵ���VE}Ƹ|{�[)!yD�m��H�@6o�<l&}���
ԭ��m��ݣF��yN��$,�P��}U���.��
+*�w����W��d�S6g
�4e��6d\Kٙ٫��N��
Q�d���s����qYU�DH$�[G�
d�Υ�‘2V���r�G6O�]m�5�
n6�;^�.�{vW��6g�?�h䷙6
-[
-+���e�y�U;
�jks?�լ����}���0�RiN�0��-�1�V�U��0.{$�m�J� �l޲�T͡
�p�<߽�����V��ԫ{���5�8���xt�hWf�lY��Wf6�nI�Y\#�-lTW�O�0v���Zn|�Z^0�3
i��M�qTU�?�(˷��y�����{)�L|2���8��k�
�݃�(7x�_h
�{�Y�����G�Ռ����F6Z
-����Ě�*ye�N�fSkʦ��Ԓ�4S���b�:S��T4�1��L��
�	� �a&�.&��������{�S�͠|�>�r�ǔ�m��ݭ�%��"���J�};���u����ʍb��Bf�\�.1�M),�,ո�LZ^ُĀ>Ӑ�X:�)(U�ƔLV���&�Bٜ�3(CU��沧�i�F�uh:�'ʿ��۝j�[W[Ģ��x��=rzSS
-�nW&��./fk�I�i�ViqU��X٬5X��9�S�Y��׺�-C�u���yTe�4�\�Ѫ��u�����MBXEA��� aIX�E at 0�qW
�z��Z�D�
-R�EAPAܵEܗ#n=3�v
-c�NUԞ
�,�g�g��|���~z��y�}?�ѐ�f���͂1=�ŧo�A���4ӵV+����ok2?�mW{$QRYk�+;��.�b����}���˶���S����"{qI�����yy%�����w��,��>{I�@��m�˶��\6��E�~����у*!ݮ3���Ft�mu�M原T�յh'l���y}�Oq���Oj�#
��Ǭ;�&a��)�*>K_X�?+w�᜜}m������d�}�=�@V^�`�O�2�w
�

Y���٧D����N���6��	u�1�ֳ.��3�&������s�Ւ"/j�T6慮;�T��nu��Ûf���=��,=������sӪo2/�
U���YeCs�w��F�Rև�D��"�_I�Uǧ
M
�����%S��,��\RU\�,=㰽C�Q�>�wݩy�'G,iY5-�yc\vSѬ�c{�SkR�N�o�
/
��Æ�/?R�>�*F���GRGC���o#zTFt���b=�����t�G_]ҡk�T�%�^
1��M�m�D����d+/d�/>�08����g6��;���>�'^�:1��U��>���>��f6#9�(�����T��Ѱ�臝Dw]������۽j/qTyÈ��M��{�\�]���ۑ�ފ�_q3�m��,��k
|��V��S�\�1�s�6��zڌ���1�יӣ� v�y�Ŵ#>�3�����D�]�!�h`�?���Utr�뮈���Ӗ����O}�����[�8�:���>��
����
��˼����&<ت�}�;h�����V����F��B
y�Cx�]DFvAu:�yD���gD7�
��#jnf���ʯ���Ӗ�"��kNkzż��r�� ��=Z���kCO�]JO�xV������cz>�F��ȵ=U��͊�t2�T��8��w(C��@u7�5�2��ω.��4
>��/�N�����͈V����/
y�/e���TF�Wfɯf�Ox�dחa3�/�N׷�!�o�c���.���܂��M
|{F����D��7��$�/!����5Z�!���Dul+Xvv�'��_�=7���-)�_�3�{p��~���j�Z��x�����Y4C���
-�UC�l��w��~�����d�5�
�IJ�A�lbY?
�h�GX�a��D��|K��#Q�;#J��Î7n:��Z(���3
-B�H�c?d��`��
��l.A��T
��VK\��_��0l��_�Lj*�P�5˿C��)�<�?�g�D(��5E@�SÝ
�� �j�
Q)f�1K�
-����X.���"[���$��X���
-Ϙ�
LG�b3Pr�h�-�O�rz���ż#�Q(L(���?&�|X
2��$��B�9A�9@��A˷A,�
-I|Kd��c��
kf�.0E���Bc����<����M����|=����H��U�
�`J�'W�
��›'�
��
-R�x�,���Q��
[9B6����'�2��q�c
��=/���J�Gp � P'D@�~�&P,6��:Kȋ��Yfσ��
���e
-�
��� �[�1<~b�8�c����!e���N��f5(�8��auhBPG	/�*����h"['�{�dxW���=��
 ocg_t�����N��:C���3pf���/F�a?�������/��C8�#"P��0!Bg��I5CH�xXAU8�v�/��_��
��=�߳�P|��]6"�3/ܠxnj0�|��r
-��;��A2BY
!�
"�8����@"�n��d3D�L@��I�l�E�v{�uDP�3�\�jv���
�KS������_�!	X�
-��@H
��+5<��B6��9��X��C�'���
-��+a
b2,1m�
�k� r�ỜV�К���K�i�����N�'Խ�#�מC��~
<WC�V����7>�E��pVCԿ�.��4���Y�EjE���( �"A��%���	��#@��#r�
A(�"H�M׫�X��VG+VW��Z�]�gߝ�/��g������|g���]�ך��$���i	��V�c�jD�0��!D�
-hzG�[���C�q
n�@=������_�\���r}A�s}F}���
-ns���[ x�
-ϫA�y9��*Φ9�|���f��9D�Y@��D�B(�
��K�����
���D��*�׌F�!�.��mz
<���vl��i�'�k�?~�1K��w���Zl�D�i&x�b�6S �����a�
[nb<���
$^�@`1��—�	��x!Js�C���)W�<G�nz�n��O���1�y�5�e�uz믬+[o�
z��|�}�	>?2a�4;N�a�1v���k
-�ZC狰o��R 
�#��
�
� ��~�H�{/px*ٽ�_�
-LJ�j�ٰb׻��ͷ�=o�:�~��y_#��!�|�\�q���w�|��
	��$|�Q>P�@
��)�w����u�s�W`���Qn2���#5h�����y��R��/��ף5n3Q�-߇�/�5��u�M
��
-�N	��:!�x\�$hB�6&�P(��APo8���.S��3�)mO��EH��d�����`�\�i�X��f6�iK��'E���d�
R��t�v�阽�'��;'�����
:>|$l*���������@�zg���!�U
4S��
� �V,�
�=v�����S^j�R�
-\�g
�[���ͨ�.�Ǭ=�"w9���9)�xOHK���U|%i�
�t�
D0���^�y�(�ewE�&:b�h�
�F	0$@��@�)��=�Į%�Ω�s�?A�

��şS~+[ov�l��Lq���ɥgr"
�2�.G�R<G��>�IZ�YEࡄ�c|;�+��#v�l���6Knsc�$�S�A
-�j)0��@7��b�-Ǯ���ȳC����c��S���S�f��z�3%쥓a�㹱.#��->�J
�;�,�3���*o&e=d}�0�6�ߐp]P���W%n�
8�r �r`�d�0���q�����-�=�-@���Ѝ}����M��>�*g./�.�q���<��J�ά
jkF�Q��Q����I>��L�'
꒮�O���+I�X�"�) �]��E��7�!�=*��n�F��g�f
����O���NT�
F*������=ERώ���\�>��fP陕�
}z;�D�/�*'D�ˡ��9a~�5i��(��akR�e
-�-D�}/�
-=˷D�u��z�|�o�.5-Bg�7�߿�f�6x�@
w�qo��]�GSI��:m�u~
�<��Y�S�Ѫ[xU�0'k,T�u!T��H�R}�����R�lu:�@�B��L
tOKA7*,Е�y8>�n�G߶a6޲�z�1hQo
ge�!̩�R�^[.��*K�ח�k�U�
M/+�(L�

U�~���P���^��^Z6��j`���0�p�X�W����w�T���
�h�u
:y�Mt�5��2��-��&bEK�h}]m�[UM�6]e�_Q�*P�+��K+���njQ�@�
ɵgCe��"y�;��B����� ;9S w!��
�!tC���}fh����@nj
���Ք��UO�����g���uUMbW]C�Vm��7ϐ���N�Աu����/�	��D��{�X�[~|p��L�[V�)���D��B���w��N���c=fh��

��r��Ͳ��������]�5��gm[�Gn˞�Y���ʆܠ��RzB�����N��Q��H�
~T���
-Ș
-�Ht@Ė��Z��Y���pـp�{
���C
|i�/C
C.�_���
�-���+��aN���n�݉[S���;���mŴݭՌ��V"��0G�<E
-�os�M�8����"�XQ��4�=�E�j9B�a����7j����O3�>�)j
s23
����^;B|�3$t�oL>,u��'{�
R�F�j�+E��^O?��dr�7��
N0����7]X!�@*Bw�]�A�d
Bc�
������_ݤ
��t��{�+<�sA��!�(�s�X亄#qΒѤ�Q�a�N��:�8�?�&l
-��C ����D�aI��)Te�Z=z�Sm�:�g\j�
�j�=
��.���Z7w����:V2ֱ. ��VD�
��ױ� ·߹���?��>����k��/���7�����ZT_ks�7�6�m����Dna-r�[�;~����c�x|���D_|J��������>�KˎEћ�ԂEG->�
���
v��8T)������N�в@]��n|�;)������T{s�%��35�q0Ͷ����m@���yW���
��5�;��d�d���&��Gy�S�-<
D���6z�<m
5��򩊐��ꈲ����Wζ7���V%�}0������֨�j��f�
�e|C�q�����H߱

�H��'D��j�d���V
&ZrR@�𢙝~4�
E��j~��"�t����K�\��������/��v.�dw��f�7D���Ǥ�k��r�{���
��<��sHL�I�SP�Ժ�h�����`S=�{lV
"Z�vЗ;x�~��&u���+�*���.���;ˣ�����]>�vc�_֍Yc�o [...]
8=�
Tx��V{����
.
�\�;vh�H5�mL¯����.��Cw����C
׏���ma3�>����^g�sX~����G��[B���Q(e>����*�
�
��M��C��ra�x�a��
�yFc��
xGa�w$xKp�'������
l`3�v�o�g�&_$*�B��M���#
|Ʉ@�CBZ((	*.�\,�\
�x��H���`� �X&c���	�ࠇW�!���fpU3�+�l�?����D�
"� �\"
�Hų:� �I�x
-C
=�q�?���/�8T��
��籎簝'�c�??g5��|����M����˾E��r�b�(xS�(b
-D��ZD��hĒT�	
�/�j!8���K�"f5S��dZ�m�$=m2]
-{�
-��-��HE�bfy"z���} ];ҏ|!��i�ү� ��9ꏨ��bD�2w�a1�x��d�]� � ��Ԡ���kyX
z� �LVG�'zB9�
q
���h(��
�F���|�?��b��2 ?ɜg��fn3�~_�r�
-B,��#dX�,�T
��<�I���i�
�b@o�����i^;oTo�"q�	���P#F¶ (wB�+�&�x0�
�U�&s/	�]�
ND�P��}�9�0�	<�T<�5<,��6�]�0N�a�h$�.�n�?�
��� h>�zG����P��A}����1�a�4{��W#��
�"�f2���ς�友����#;��� @v��
�Ȩ�A�K�H�?�0��q}�5�H����pvE��,��U���O��
ɯ)��cI
-�n �e at t�	1W͈�<�Y0*Y���-�C
S��ph(����	{�r��!{�Y����<�q������6G�O���g��Y�I-Gd��n[�����/�<��a��˂���;
�g3&�YHe�ϖrȗpp2.VO)��R��lO���s�h�pV���WC�K�rޑ���G�b���f��蟳�b��_�{��=�S���W���d
V��H<�U���6���@ud�������
e��D�*%��d*�=�'�
�U�x�x^h_�I�c���pM���+��c/���]�k��hoR��'��/%v��R��?T�١i�C{$��h�B�gX�8���$����^LUp�6�0�,
��yߜ��멚xm����F^,]}��*�\�{ʳ�?J<S�%鴳N��ح9�8�mu��
s��:��
04:a�]C�xvC_7rX�	lי@x1�0S�=�����J����>�1�Ҵʀ﫧���4O�m�bEۄ?+[+�M:V���Hi��P�v}��>��� [...]
-*2��2XP�H��TA�D �@(��J���ޔ ��A�B�6��=�������sf��κ�޽
������������{��b��
O��MbCx-�'���I?&s�>���XߎM�9#�s�d��kQ���5���n�B���N
y\8��	��
�<��;�
�?Q�B�+
y��#��p�!������u�N��x���ʶ��
[Ÿ�]
�X&w���g�������<%ݫ��:0�/<8S�6|����n�:9@틼H뉸A�x�h�|K�D~��F!ZS4����.y}
-
-���|&������t3�I�	��l}�#�fr+�Ȧ��0k�4�f,9�nD$s�&�
J�{�j<�b���1=�V���7�j�=`��~f����Y�G�j>�U�wQ1�����
�k	�����n����$o
<.������x:���rVȖQ�F�"���v�I��v$�5�
-Js���t0k�울	Ne�
NE�O
U�{�J�X��( Z� �0D]	
-� (��� ަ�i���0��E&p���J�ה�F�ߍ�yǷ
ʣl�2v�2��&%ݵI� �ť�3ɵ�D
K%�)^�U
-��
-�/�
-E�s
-��!�B�h`���/	�
{o.
-���c��2���{WT�K��E�V}���
9�{[�I
����
rU���:]M/�6�
%}
���_��7[��͖��7[�|�Ē�C��_�dD[	:����U����7��JH�u�!ܪ��5���*�5�L��� �Ne莖˜=j�С&�K�<�\�YH)ʨ�+d
��n���Qnz�
���1����!Y*b�RSv�1���0��x��� �{�J�.7�[�$��5���;	��ל���vU
���<�
u�����ST�b���t��<%7GEϒ׳dY����a�$�8�̯~�Lđd"�4
1�2D���� �
-��Xp�;O�눠kX�M�a�щԭ����q-�5ǷUWF�R���W�%
T�
�V�ze��R�kYE;')O�'̝��{���/!�s[����Y��)(��J����"���j&	p���k��
0hk�Z���1�i8f��
���
�.�Z�U��*+�{H˔Ԥ�j����
�<�����|���/_�|b
+.1��]���$�[�=��gp�{W#v�V���vYB{�>bc'ٸ���Q�9jU��#���'�!�@j��YR��.:S�%���񫚙'+|�*'8�8�|"*;R���%��S"�h5�[�K����L��q�����f`34�&��w3T�1L�z���-�#�6�-�.Y��(l���5+ȼ&�WdC#-������
n��
-V�a�#Fp
��V#ZX�+*_ͿE{�Wp�
��`����`��� �#6��ფ�!��l��y�� +�@�����N����{S
��s\»J�C:՞A�=���q��;�
��m��Aԣ͈zL�(Au�y�{�
oq�`w0������
@-vв�u������q��1����Q
��-q��/x�l#GN�

��*v:��s9��>�Վ��i�q�
\r��@�
 �o/"s;ٿ}5�2 �G ��p�s� 
g���N� k�dӻ	�iWR��X0�o3�9�j�U���m�W�;'2w
�(��������t
��ێLݒc��}
9�. �ra���
� �� 
ut
 4� ��|�$@�MH�3��v�;b�=IQ�>�as����7
��[
�M��Φ[sf
-��fjv�g:��`K��ږ:�d�u��
��Ȏ���1��{\E�+�W�w��A'�@?@ίXΟH�	 �m ��!��f[���B��ਞ��_l쫏^��'�1�)i���}�g��6K������y+w��Vn������|�8x�8�]�M�����
h��_ο����-��3�'����p����C�"�Hv���Y(��9���y�ѡ�Y&�/J�9�hZ��r����u3�W/�
����~���,�=A��}�ny���;P��
��g �D. ~��gЗL�{�(�m��#��� ��a��
!:�
5px�7�?��ՙ���Sa�20� �

��f`F��P��"JQ,X"q%��Uc	jt�
E��=��.Y{�u���ƵG"%(
-��!��
���;�O��}�}�'�~�$�~���0Ofh����#��v^��R��+��u��BW
e{;�
��F��;�m����_ x�(�6Q�}�اD��
��֍"�j)�]�5GPps�`|�(|H�?��-"���"��)bϏ߈5X/v�~�nH�>6J�-�߳�*�
.�C4��'����D�����D�
�8?��(

-
-��
А
:��H>0Z�ArCO�Y�
-y�JL�X R`��
Ev�%�����,�M4�����/q�-�T�{�c���DA�D �3
8Ӆ<�Ajt"�����@4�э$H%��ΊB+g�l��jٛ������?�-�Q
-�=�����9ߧ�ȓkpg.\�3���D�\�
�$�7��1#
g1,�e�|�/A�b|���}�~� �̂"F���M�414�b�C=A�l[�*�p�ªdp�Ͼg?Ƞ�"���cM
mdp�k7��
�a߁!\@�Y@���][ELA�,�o1:
���T�4V.�f)��A���CS��As���=��5�V;x�O�LO(��?��o
-
,�*�l!$F��
bf��/��o��Il�
�ErhW��v�n�����gGОc7�3����G
�:([tph�‘W���
!�s-FQ��^�w�M�'b�3�͓ x��	2��a�o�2�_��MJv(X��#0�bW
ax��bhpl6�wh2��w#�
P1��F��
��o�
���/ ���^����"�u��Ce���#|�=�s0/r�i�#L�l�S��ʹ�t����s��_�&�}���
�w�/�p�3���������
���
!*�s}t�$�K�z��x�g�[w1�˗!v�]kt��C���:�szk[���m��m��k��W�j�k���zV]g�I��V������
�[������M��t��:���\BO���$ 5J��b�L���+oJ,��I�CC�)�/��V�vY��"a��y�:�g	[ܟ��v
��a�i�	?z�Mx����}-
>�㡽�.�Cw&��]�mqm{w'�♯����E��^d��֬QSzɫ�ly]j��y�h�'��P=�9]}�G����K4w�V{�J��u#qg���|�&
�x��B�S��F�ӉПHD�1�v(	��C�
�jx�m�<oe������Rk�Qx�)���*~�/]� {��n�0����k�'{\N���b�N�S���K�НI��:�J�����
��s��W����Ǫ�
�m
-��S;B�!�󳔄
^�|j,�Qm~��xp���d鏟�W^�)T��?��L�	^����
�3Gw4s��&se��J����A������}"���C����v�����󓛁��ݐ���L���
����^;� ��Б����n�=*���ő•�I�e)O��
4\S3p\�C�u�s������[
����Н�7mϮ2o�Sc���ec�/�����a����}a^����
���Y��)},�QC����P�ӑNt�ċ.�2
gK�JO�譬��z`H���p�OU�_�w��-oV�߄m�]aސSiY��#�b���g��<�-�i�.�A��\D.�EĢ\�/�������+�
Tϳƃ1�#�[cty�;�-
����

���;��K��|�
�G�n)
��4�K����!k
�6��_lY9hM��-�%y���;�0�^̂�7���6o0����`D�

K{���~�y�1ϝw�
-t�TJ���ѹ	�t��(
.���
�S����˶�y��F��,�_3bBЪaSC��_2da䢢�����
w��-87��fܬ�W�_!zfl�:��Ӌ�
2��Q�P�ux��9��/��/etr���L�����]�췖e�6��լ--�]�Y�~��σ����d�e��yQs�/�<kXe���o��Z\?��j�������ˢ�
��EM)Fd{�#�@��p��>#�TFtf��NL�P�ɮ��+����( �}߆}f���DTDDY�aVePY�M�*�X�&F����M0.5�9�Ѵ1i�h���Ks����������޼[ą3r
�{�����
��ʏ2h��nڒ�۪1Sb_��ǯ���*Ҫ=�R�D�n���a_Y�9�����s����MF���""�,�MB��0R�߯i��P���Q�t	
&�V�X�)
�������w���j+�\ټw�I�l�徼T�ʜl~Yv��<��s��Q��q�;Gr�/+}�_�~�?#��_���
	��I�Q(MC��0
-`~'��4�T�?P�L)�<� �j0Rm�|Vw�ﲶ�ns�z�����5�;-�
�mK
-2��d��<�gnn�(3��[�=蛚u�?%k�?9�_r��>)�(N�BQj&
-S�(Xla���ᮔ�^����;���4�>#�80Pk =u�L{��Ӽ/xE}�Z��h�Bg./�c��$�1�8�%���#�p�0��U�$��M���K�]�O�=��O>�d(N�GQb.
-w�`1�J��D}���P:��} 'i�h`A�=�h�cZU��4���u��
�kbMeՉV9�i�Ҋ
~���-��F�X��_r�'N>�+��+D����8�E;
-Q�� ��B��`��4ԃs5ԃz�{����vH�[���C
��je-�ZEM�+�c���-$u)�)�Y����$�Tz�U7	�U�xm�
�����]��;��xs�6��pk
-bJ�s��� �S�
5��P�H3@/��*��Ʌ�.3��re�v�.+���k_��ٶ�0��Ӥ�{,w�d��h�9�
(w���辩�K�pB���r_�����:l�E����X��
z.��,^.�����V�ô6� T������~G���K5��=���Z)G��v����M�w�[n�̳�>\��Q缮��kD��{x���������v;��a�=��"�z�NϤB�
4�M C���	�r�f �h�
�a]�
��';m$��gx�F�����[�b��F��l
�6_7 ����o����7䴺���)�����A�U�輺���ɡ�QA5h 8A����z�v��V�,��Ns!e��L83	��������G����x*Ng��
���L�бB㐱�U�m�
�
-
���kp��o��o���ȱ�>^����A��wP~�1�?O �H��1Ł�i=�����3
L�L {��յ3��OǨ��ޥ�zZ���t�n�T����!��AC����ӷy���F�sh"�D3���\p-�Ds8I�?D�������M ���y`�%6�U"�� l�BgE�
b���� e�J�2��L^��U++��fMOe?���Y-�k7��g�]����e�w��+���b��
 G)���F����)����O+a�5�X�s\�3� �)�ς@x+�܊f<ndz�nK�.w�T�w�U��
Qu�����
����
��P�v5l>�֟��b�t�����R�k(��j/���˔?
�'��O D�T��
up~�
������	

����`�$
l�F����򙔱xV�2���e������ы�,��?�xO��{�*��Pu�A�o����_t��?��_��#��?�����%��7j`��X~�����|0�^��@0��WA��Nx絔��A�h�ie�ޞ`�og�?���hΓ�����|9�g|H�t��7 B� |����{`���'�
�
zh�%h�p�
4�40�p
p�X%�B0H��1B��o	��F��ʗR��Q>�=���
��X=�Q��[�L���Ʌ�Cy+)��hE�ˉH 	#[�!� `����|E~\BA�Y��p�����S� 8R��B�7��(� ˉ
-r�o�	��}bL�	�x�`B/Hb� �͇C�<��h�Ơ�3���̕A#�z�
j��A�M,�H`�Z&)&5��t�>2L��$����U�)}~D^��
����K�K��0h�Ƞ
��]�̝ACo�
�
�l`��r�I�$���
!��	2A��%r�|I�N���e�J�����vv
:�2hO������Z1�[�•�X���B�\RJj٨�B:	�Bw����,��\'���u}GEugq �S
F�A�"3� �u

-D�PAd�2��30�
 ���"�,��BK�5�ZWc��M�=�hbY�-��b'���s���u߻����}9(z�y'���V���&�q_� ������N�q%]e�v�^Hi
���h�d�e-r8hQ�A�:���'��h��E��� "���[|�}mq��B���L���b�?�ǖ( z�Ũ�����-�,����rw���(
e�}
�
��o��w��?$kxo%
�7���W�
������C���gҋ�_�w�?�=�߷{'�+E�
;
��oKQ�ܒ��(�[�'e8s21�E�3�f�N�Px�pz]�8o���W.Z�
���?����Y�̬�
�Y�����	
0��/��2���]�7\�
-�g����'\e��
-�/�����p�@w��$@/#@oZ�P/��^���z���~>+���]�}�A&����ݙ�;����U�'E��b��;��w�>��3�_�q������)�0�J�Ƨ(:�@��3��8]��z~@��I�w�}҆��<4� {����~ެ>��;��ܛs����\�Z&��U�ٳ��g��7
'���d�Y�>��=��x�����5�qχ&G<ޚ~�f�<p� ���h�
�=��#�)�ͥ�D�l/����|'�3ϝ�� �����K�����~����?�&��3:�����z���������3���ȔA���}������E�>���#z}�b��!����\  
�C
�a�	�Zd�C���_��E
y���
N68�=qh~��y&sL���?�ݢ?`�xO�n�>�A�]�g�w�d�-�Mw N��6]���V�@�A �`�Wal����-� ��pM9�G2p:ҋ},b>H�.��p ,ݨ?$���E��v/�6߹��r{�Z���6�A��[��K:��K7]������`��'�Q���k�Ա�O��/&���f~�e��%<��疈�JGT�؃q�����=ѱ�����{#4�=����]��7���nm���tۯ��6�lM�%YK�#٪�w͡hO��P���c��8� O� 7c���q>�_'��d�$8�,��d�_��۝�P�=>Ұ;.AԵ$�lSl�EGt�����m�M�ֈ6�e��Y�˩1��sC�9�z��:��N�(#5hW
�ұ0���
e���7� gRYp"�
�S'�g6�7c{g�7�'u�pKJ��Fu��=1Ŭ-![ܪ�Y�ĕ�6/Yn�"�UV�ѩ6�����̥2�+yy�]���7Li [...]
-���Íx�Ae

��� � �Z!��3��|gVg�lnG��^[΢	���D�Y	f
i�t�MuZ��<�ʾ$�ɱH��ѩ���I���I'ܴI7�r�/�Z52ĉȴI�0. x82���L�cT�e�} �
-�AO�)t�X
���6���ei��<�q}n�YuN��"[c]�)�g��d48楯erҺ䚴O�2Ӿ�����[F�
yF2�)3

3SQF
Fa텑��
-p:�z@��Q��V́�t�ڱ�J���q���
�
-U�bM˖&Y�gZ���m��ڜzGMv+���,O��vK�
���|��<wUk�%Y���Y蘒�������m��:��ȣ
P��R�
�9HG�$h�����i���9�����e��JK�'-K0_Z�n�-̝���e��R��8��7��v������grU
2�\t��E�-�r��td/$Q��8��
P�>ʟ��P�j�=�����V��ٵu���ZaI�BC]U�(�Re�S�*�,˶I+-��K�
�5;�w01E���]#�.���Bd�S�
c
-PF
F�
�9P���g?���\N� ��ay��4;�ʛfq��+�
�
�F�����uj���,�Ě��q��Ҙ�FYd��NʊmLXŠKh�����LX9:�����R�����X�U ��[<^H����}� ݍ �� ��kW
���J�8�
-�(8��������g�����6NZ�`�jN��m���z���N� ��?f`��af 
n�MP��EES�����k�ٺ��n�]6�e��y���Z(�*�X�
-��)J��Y��Y����ػ�ہΞ���;0
��}����'�MZ�B��׋�ǽ�2��-�c��$�)nJ�jG���%��W�?ō�'��=�v��pU��B`�������J��56<�ցYki3�d�
^S`����gꪉ~E+��߷bz�	+


�|NX��c�.��ts�ȥձK��,i�)X,1�$f�=bao�y-~�
�������K�U�^����
�)5cFi(
ޔ��mJצ���JG��x�i����qoM�nx$p̆��;��
.X�$lhIix^IUDnIcD�ܵ��Z"sVId��ގ�5���^���u+�7�r�~v�'�l3`Jy �*�qE��X���[Q�����sl�$���S}Fn�a
��)k�ֹ9[����V�̭�����3ʮ؇�-��%$}������0�=�5P�����-g�ť����ʁi\�&TwW�QX
�����J�(W���
wݣ�wy�
2d�f3]/����ӪK�R\;-�]�
��lI���6h�
�)�wH��p�8���_�����\ɞ�
:��P��;`�
y�V���C��Nd����Q7F�׍���j)�3u�����{&կ�r�o7$
<dH���_{�ؿF|���o�>1�T�(c��1�f`�6�ɝ��.`2Wû ù�f6h��X�t$
�G��<�gS
��F�cw�A�
�����UQ�˴��2-��Z-���~�ˣ�Q��;"���ij�r�o`�R���?����
PT���Y�@Ƈ��& �c
�O�!g�|&�_$#�%��;`?;}�MC��O"���h-���ݰ}�
���`;+��BgD�i#�3~��n`k/b݅
��F ��I�'��3@�9=.�a� k[,m�03��L�v����^�N���O�й ^�6Am?t��uނvU����*�3N5���?�ev
�SO 	��Hf�l�o|oa�������1:w4�;p��P���A����
��7�� �����-`�s̟ɹ���2;�ك?e�[��V��`�'`�
� �x@�7B�d��Nq�L9ćᇡ�
�7\�.,P.���W/��{���r����g��̎� 
X� >
̽��o����,v�$'e�h�B| �C��G����{"$(��C�� �i���J0�~O��
z��J��cl�r����}j�O�]�[��B�
	��9� �<�9���Sb(T�/�yf(ў���:-��T�D�A�����@'��/R'����y�N�[ߛ�3?�;nD$�_��}�š��<Z��$%�?(1΢�i>-&�¸��P9U�^��x��<~4^��.�0���#�;ߟi�%�G��\�������
��)P���a�I���������6R��e١���Ԫ�֏�
k�괶��M��M�6Ѯ�����Ab���N} ���:��F���9�Ur����ꧠǕ����iE�`_����P��K�u�f�T��
��:��k�A��+��i_��
!7��!�q6Tt-����?�� 	A�$��b@�k�"q $>�����ǫ�
P�
�����Z��%���vٱD��X�}�ب]t�i
;�֨�ڹ����S���+
�D��7Lj��:#�#ݢ{���-����T3$���8��8t%����|t$�ˉ��W�ӵ
��k��i-Η=>w��qڹ\w�Y���s��s�����s�y6%6{6&]�jH���`���T�$>5���@����| �q��4A�y��@�+#
Wӝ�t[Z�F⋴��d�ډ��
�S��5���?���gc�b��)+

)���yL�e�K�g�Mi4
Hm5�M��'U�vSU�X*i�I�X��gk�<OH�	]�~h��/�
���d|�������Ɯ�

�?�?x�c^u��j�_2��z��׬%>{�����YjveV����c��<dݕ��u{�U۶,�/˒�w��m��
��#��v��( �
����
_���aAh*H������QZ͈	�}S=�
>��5�	Sհ�|w
��c����e����my���U��W�o��5��+
�o"�	�Jb�Z����E�(� ��K�!@��k�� ��@ E�(��޸�j��u�nk�n����۱��vv���t����;�ad?����=s��9�s
�����߰NJbMH	k��)	^
ك{�x

�
����s%��'	
�0!n%��&�,%�^JR�/�5���|Ϲ�R����3���q��S�����։ة����PG�2{4�!�x�W�!�s΀���e$	��k�g�����|�¾����Ct�� +J\V卵WI��*9}V��8���=�0�M�TL$[�ƒۘ�I=!��C�C����Y�=�2�/�.�H�����]r³�	זDظ������T�
�u�Y�c繥�ΕA��t_����f�MM�tf<�T���Dz��#��DmZLU
<�lb�u��R�ܞT�K1#�T�
֡�)�*�[SkI%��p�^��u�
^oOq���
�<�╻���l/Xв�n38u�ԓ����c8;�{0K�o��e��=�[��s8�Ϛ6,hUO	���D
���z�������4�
�E8��ᷘ�?d`�A���{.�>v��<��g�T�F�0즎�Ї��yj�^]�w�!�S[�lϩ	m�n�6gu�4Caͤ�&s>�*�
Ie�#�Y�BCDH�YC��B� �>�9��Ή�װ{^.p!g
�0e
��b	�GP���
5&0z
-�ޝ�,��}`k~	�I_Z��ȭ�u�s��f털\;')�Y��h?�P��[x���J�$
 |���s�×j�ߢ�7
�A	��R�7��
-��`�L��R�ʢܺKe�M
-���
��"]`��Ȭ3V�V�s͆v~Y�QaI���H?+)�/n(��|+)�1"4� �#�U��cpу���.��
�{�F�������[���U���QyнŜ��X��[W�]_]j6��B�Jj9%�m|cq��P4*��Ht�+r��ޠ5~#���0��t������`���a�B�	8Y0�O0{�
��Ͳ��ny��\���V�QS���
-(��2U�XE�j�����/��-唞ה^�d�ޗd�����3MD�1A���J^�W%fA��=X��
��4��������B��y#45�Z��ѫ�
�ޥ��~E��@C]S_kͭi�f����!az�S��z;\Yu�:\Y��HUI�Tf"P�	_]Ax�<K���
����	sЊ3hA}�����`�o�ڎ
���(�2k�{�5ų�-�'�U�k)
�i.gi�,�����q@��0)Li8/Jn�-J�&J��G�l!��:�O�%��<�9<�3��38߈g�
-0�ЏX��F��� ��	�򞭔��7���z~����Rz�ز|5��靦 ��ZVj����n�&���Ƿ�q֛a2�Yۿ�q���Bx�̈́���XEna���̣��
s�
Ѓ4
0����El(
x�(�Ѵ�8zf���֟ᥴ�|G����V&�0�z{C���cz�9�{��H{�đ�<�H�Gj#��6�������_��]@��v����v`-�
��}4o�ZGd;Ġ��c����!����P��
�
�o�h�� �HO`�#8jx��g�:�y�_��AŠ
@������"f`
��=@���]� П H?p��
�N�Lo���H��K���Qe�
-ځ�
���<�h��#�i�t�|^w��������|�1���Γd��	d���:f��}�dž�,� ��T�D���H��&{���C̼ �
�a��n�vI!ʕ@��RR�pe�v��n�\��
��u�]C�[]3�W\�
[\_0����s�
��4K�7�%>k���C���?4
-`C�z'f�,@�
��w 
-;�kW� �j0�\Ž�-���nؾ$�mˉ�uY
[�u�M�e��W��/�ة��)Z���x�M���*�
��u���]x��p�N�A�{&q38��;���p;�@�5��7h~�D��@t[ �ۛ �N�D�n���^>p�W��
B�Cȃ��z�`���u�P��	�y���2��cc }8�ܻy3��i����t�u�`�
 ���� �cOx �������>����>���� ޏ�;x}~<?�
_|����^PQ]i
��o�

0�P,�$�51q�T�
-"* �D�����(Į
�ŵ�`Y#Q��	QcC�

֛�"9��s�p~��;̼�~߽�3�Hu1~
�}�|8sȼ{�¾g��
���O �Ӏ�
`}^�oZ�/頺���P\�t�-@n�*���
w�����j
g&p�!pS��|ƟT�d�'���3�! ���1��$�vp� 䋀�@q
�-5ِ�m�f�
��

�Gܔ<f;�p�{—��
��xv
-��	�������w�N��֟�5���'sv���/3�k��cߦ�T���"-�mK�@MC����
��n�*�)\��DZD
؂I�{��OY�����2�p�mfl�_ w��t��W��q�3���!�!�DX�
�&ƒZ7�"�^;��
\0���O�[/
�|�����Dݨ
���M�i6-�%���Q)�2:N��.����sbl'�q
ݙ�'�ۄ�H�ԛR��)4���"ZNŴ���^��Q�F^�^���oI}��.��҈%l�z�*������!�F4%Q:e�����E���b��+��v�w
�9�'��c�G��CzP��zD#�n�
�f�0kۡc-d���a�B�6����k���7�\�R��
u!j���L]�j�F<Vo�CU���;�J�>l�Fຕ@��
�Cq�
 �� \��֥)��������b�J��r:�ɣP-g�<
�<ܗ��\�;�Jܖ�ᦼU��p��8��^�E�'��	霽��:�'�8����^vMm <er�f-7g{��ܹ���������2d��0����j��ˆ|\2,�E�2�7��¸�{p��G�r�"
w}"��	�:�&,���7�B4SCx����ހ�y���w�ͨj��Mb�[�$�Ꞇs�#��8����L��\�G�T�J:�Aq�s���a�������[��z���%T�i��P���#|���
-�O�h�k+-^���#o#n4�¥f��K�`��[7��C�w���P�O��O���g��~�<�}>�-��,U��)Q��٬���j��i�f���M~/������-߿-4�˩ŸS
��۟*p���-lQ�犓�|P�: �Ma(����U��OU��ϰ�f�Rn1MPm6MW��f�7�
-l0�Ԭ7m�\k�eYb����׭V��h��
�%���? Z+j�s�������l�g�X��gz
j��~���:J[�EJ��,6PnLW�
�.	�)�l�ڜk��\�]n^b�Լ�f�y�\d��\h�,�7W��9��� aS����s�\
Nq�+��H�
-e�u��-
?�?;���w
-W�t��X�1Q��cJ�e
�j�tȴ*
-��O�Y4K�Th;7h�.?��~vP�}^P�}n�#���~z�Б]N-�:�3.m��K����vʺ {:+�=TFiXC��Eq�YZ�X
�,
-�Sv�fU6�z���Y_L��.4W�:�~F�rǜ�
��!{����v�z�iB�Џ�dO�����%���⹷����7u�bM7g��j����H��wP,��,��ΏL��떢��u�͌��ls�d�v�q������);|�a\�N�����w�Yo
_G=9���
7Y��#Y.�{{3~,���K�`E=����^&��W{��^�����Vo��c�vJ�4yR�p�	����}��ب<���Bcfd����m.#"�]�E�tɈzëғ�H�P�)�`e8p���v$p��������(����x���J�����O�2'>R=9�����$���A���_ٍ���Cf�	��=s
�c�;��eH��~��kZL�tN�r"}z�p���p�p���c�-<w���L�x��h��I�1����k����I91��:�oO˱�	ڬ�d9�ϗv#��tȈ�F?4n�!=��yp�
-�A��nɱ���^�.c��
ɱBO�u
�
��;��y�f��d�8X2��y?���܁n�I����6���`�q��Y�5��kG��/g�K��4�!=i�>��4CJb���e��6�%%
p�p�j\�&#���������}�������YI
�%���)֘�ꌉ��!;�_3�����T#R�4�b��
J�IOd���e
���7	1P���,,.��V�:,��U��H�A@��*��`-�k1X�b]Q��QD���#U�ѱ���rԊ��:��k+ڙs���@��w�����Ť��,��F/(�GFW�ύ��8;j�SxT��QW�c��(a>_�#�

����}x�k�����+��$�|dm���8��IZ�%BN�(If��4-y�YrR�"!1�ba�\eLB�Ut|�M�,�9���"V��6:���p
�kv
-���<r���X��������`�A�'�uH������^4?U��t[df8#=�U��1F���c�(}Z���`�����h՜�눔Ś��BmH����IF�I�
��
�']p����> A�>0^舶�K��
g�ų��f��]�
��
޹�>-�)9���;
�r=$���eѹ~�Ȝ�9�aّʰ����4���<M����W��3��2�O����/���/M触	��T��Ov=��~le�s�۲�s�r����)y@|�
-q�XP8QE�$󊼤��&��
��g�(�
�X��(�S���rm��j&/Y��]R��YrH�����{:�\���v>�$Khz��:��
�w=}�lIV��|���(f�Yb����.sFx�
��<%!e�3˦�˂��K���Q~�-'-�Vy�[M(Yc�^I��W��ؒS����ڎ]*l��H!)6=
g�;ؖm^�!�I.�I�����}*$��BP�#�� `�h���K��W�j�lҪP3��y�U
�UeXxUY���RzVnQyT�W�W���+��>j�����
-a�^��c�{�s��2�|s@�鎭 �W����U[`�
|7�q8���P3
�k�H��̐��	���Y �I���{�6�+�1n2w5�5w1���l�m��xk�:�VX�X�\s;�}F�Z:K+��* ���<����m�o�Ԫ�Y��G]�׏�[��\?�M�x�,i�+q1�K�6�H��VȆ�jdCL���N���2T+䃶�^7�τ��=�{
��tW�
-�M� Dofm������]2
kP�O

�3 C����
�w��ǀ�P�o��sc�6.C�}�$N��K
��E���%q��\�[H
v	����l�#�z
���,z�a���
�˞�u?0� ��
�&5�M:�����0h��`�<
�c��=F�`Ӓ�rX��B�z�\�U�3X
�>"$d3��8�2�;�s��
`�. ��������00�(лв]�:!�e�
-mv0o�
E�2
-�N����?���!k���� �vN�}'��5����) i{M�'܋����H�Dr�A����.�.�����iT
�����5/
Z�\���/�_\Jy��C�2�h/��`��pB�/�������뭐yO���3�3��O��W���:赦��;���X�_�*��8�kx!v�7\�[c�ی���@77�����,�]N����)��K�Ogͣp4��x0m�ځ���=�jz/��ȏ��I~"�r��~���T<�<<�E�W
��y 
~
-n:��-Z�U�����C@(�4�nO�y�i��<s	P�+��p�%���<!��_
OEl	s"�6,�q�q� U/�`�ŷ�V�o��!,�!d|
��EƑi�CRɇ����5�H6�I��#�89C��"�����?�aC�5{\UoE_�f AƐ)$��'�$��2RI֓��s��k��8����Ё�,�&�1�x���n��g.z�̅;�&�d6�#i���9�9�J�`5=��l��������
��3��
|�n�6?y��y�
�:-�а&Ē�(X�ȗ��'�H���e�U@�rz��YK���-�l�i`q���q�������
-G���#�֌C����cŚ(�CXxB���3�
<���=i,����)�A��?��p]V�k���*�W��p�l'.�}���V��w�L�.t�?�?�h�8�|��kD_��X2�=������/�#q_=ݪ���
�������eU.�����T+qV��UFt���z;:��qR݂6�N�����l��E#Ь����%����
��Z8��;���	?i���;��z�& g��ѩ]�]N�2�>�/�qC��.נ(�+����+��7&��F���,(,ȲܖEv�v���rY�˂+

"��.!xC�E��h�&Fmc��6�If:i:MS�M[�vڴ}z
���<�_��9��y�>|e
>X6�����e��7���pm��ŕO�K���\@��$�
d
��X�q��u,x�F�V��e���
-��*��U-�]��)�[kk�ݵMp=��{�������aj1d��r��r��r��_w�~k�o�7C��fC	�$r"�����C�kK��Gm�o
�����Wk�q�Kp/4
n���R�Z�
.G��R��Z�pP���9E;}V�C�)��g~֬�(�b�}Bq�}Lq�=���=�WΑH�H���둄�CH���W��
�ׇ�G1 �7r�}��G���͛`!:�)3aNi��(-�)��>����)w�f�
�i�^�Q�g2z�{8�8w<z�7���U~�Q~�?�_���\��_����6�|f~�F�dܳ�pύ��J

�V���8����	i0�`����dB�pB
{\��S�r��n�!��7
���O
��	�
-}�	�T�����{TDгD �ق�@
zN
�?
����1��D�NzN$��%L�$S)Y�XJ>}Hca
kl�!M
w0��7���ߟ�WЧ>(�U	�Qϊ�귙.�=�C�Ӟ�OQ[2	�$��<�%�b޿�{?�@ω��l��sc9�ʅ�49Lføv3�3���
�@fk����זs��5�ތF~OF����-�L�/jO���J[���>���})iN��ؕND�"BW�O��_��z�p}�b
�0��L
-&tRݱ���p@G��t�>�ի/`wg[�]�6^�g@ێ��֬�@wV?Ӓ��t3�Fݼ�^wK���ZV��w�#��ơ#"$�9�p��
�7 \G߷`�=� `
-c���i`�@�J0�C�1��)�Q��0��󊸞<+ߝ[В��r�E
9{�NÈ�a���ޒWޕ�
��m�'2��H1���D�>���O1w� W��9K ����(D}�7��
-�A�)
����i�N��3X�&{���m.,�5V�4�
-ZE5�=��!��8)������Ae�_�������H�S�GD����瘃[x��q�z���~\�__� z�_�Βh�l�V���iI�]�lvcI>�Yb�9Jl5�N���-�,�+̃�R�aY��LP��Z���I���Xn6i��H������;����
�\��>�b�<���aN��<�]&O�p[#�ٺ�j�jhg�����TW���ր�r����ETZ�)..
��-�Bˬ<�r%�h����h!��"A��b��3��:���_C�y���~
ρJ��Xڬ,pۤ�l�4V���:�rT'��UZ��*�m�����r��V-(�5�+w3��$F�,�zRn�.��֟"��+���	�=�g|�}w뿈�s��wj ���� mO
���
8
+��n=T;���L���4��.�m�+�9,<��
PP� ̫��rj���k�����2]�%���'ȟd�*"ɬ"�L;atv"�ٖx�}wW΋�u�
��D�Q�9 at Z�z�W������
-�rW�����6�t�BW
;�����d�����B]�
��aX��0#ImX��4ܗj��(IqqJ
aR�(���w�1�}
���	���
i�o{
�
7,�dP��*�=�P艁|�v*ϓA�x�,}k!;�����Z�������+Ը���if��<���$�1�-�%6Q��nF�w1��s�?�FߋV�q#������:(0v2�۵
r����n�
��խ�2�ut��H�yK�����6q�wu�U]��&ۺ�	c��c;�����0��cۈ`��7���γ
�q��Gv#M� ���0�����/��WC�/
R|J��A=�N%
�D��V�*Xq>';���(}��-�ü��gyQ�ۼ���xQ}��z	?j��X�x�c^��.�=�.�v�v)j��d�Ґ0�@��+w(�
R�V,��� Ư���\�2ZBm��6���^V��������
{��������N�r�1糨{�{�i'҈ߕ>�j�@k��� �<ɃȣP
]S!>	���k�jX?���7��vy at E}ea��Op�}P,�	����
-(�q]����ՠƂ��ADET,�NPX�
�h
{,G$1�qu]{�X�ۏ��������{����
�@�x�g��y��gΑڛ�%_�>�`�Q2l�]f(2C����/�)���멷4�y�����赌A.��| b3��8~�Z��9�P�	�rx�ë�;<+"�Q1�ír\�\��p�4é��U�p,�2!9����V�3y����LYǻH�?���R�O	VF�*�gS�݀c��j���u#
`WD�ak���26�1�Z�CcI�ڲ*K%���\�@]+��!��=��b
��ԝC݉�
Eݸr��6�����ԯ��_��Ƞ��AV� ��h�6#G��
�de��Y�PV:��
���S�^���
�
�jO-�Pwm���.�߃�k=�?�
���CIl�3�Yw�8ߕ��F6eل\d�i�kbR5љ�
&��+"�CV!��V`z�m��DQ7��� +�|
�;
��R����@.�
Wtl��l�]��>�
7� �L�b��|�I�I}g'�&w!��h!�y6��
�N�(�F{;Q׋��� ]# �D��u�Or��Lh�v�/��C��?�[7����l��O���
��1yI#_ҐW���������h� �
v<x����ռ�mּE����xD����3��=��桍�i<���,���`��!Pq��k�6@���k�A�?�	$��#�dYM6�RDJ�vRK�!��u�/��+~��xI��!쨭�Pp�W����;H����32�$�t��䐍du�r�
-��.����2i��.
�'��W��G�����
�ƙ�5���H?2�|B>�N"u��9R�kC��:k��%�2S��Vo���>�~���C����G��7�A8RW���m!�
-����Gz�j���XjMf|�tX@�Tjd�������s�"�@#�
�~��I�
�p�'��4q7F�� \��hK_h�ZG��9&��ۇ��G�x�}L��ԙ�0&���H���e��%�r�M���8O_���ŠS��	��8�t��Z%�#R����9��ST��hgG�8���A��'5�qU�˲�h�%�|:����bN+�qJ�'�98�̃UY�ê
-4�jpHՀ��&|�����W��2c�j�AxQ�eN�W^/'������7�~��}�6}pV7�lG��X
�����3�`?���`��8�n��s�W�u�2�:�A�C=�84a��T9�F��@Y��Bz��7ˈ�����n.yJ\��C��;N;t�Q��w
��ð��Թ�G��T{$a����L����敃*�|Tx��{J����
��Hf�Ki���
-IA3!�!�Z��=��k,���	`�;孁����Pg���}��� l��ʎcPR��(�b�dl	H��VJ�
�� �TX)��Iy�'e��~����L��Y�֐՝�F�R�K�0���3O�v���@ol�
��=P4 [����Gas�8O��gHy!s��!)�
!���!9��!�5!��U!��쐣���e�OKC�"#TțY�?���]���8i��G,=�c~��3X��P7l��a(�<�`�G`�q���8AZc�"[eL�eʳ����ƕ�L�FE�q�2ݸS���^�~E��X�(\(�I���<	�ԝ�n_>�|r�8n�����U���	�=���+�LXc�F�i��e%-7��e�&�2L��t�\E�)E�jZ�L1�S-�0�FlSϏ8��gj��1=��6	�,�Pe
�<��W{��>��s� �:��W|j
-{K���ھ>X���
X�?
-����#����e��&��5E�
��\�������F3+�P�yd�vf�>����6�#h�E	��(��)Tm(��O|ǧ�J�x��
�b�c����a�@OdFwƒ�0������XiQ�G����d�c����NR̎��L������N���N�γ�]��
m�M��V71��.!Fh�����*a`+�"�}�����c�������c�
�buX2��q�H�
��&̏(͍��͎)K�#���"q�4�!��S�R4��Vh���u�GEy�a��fav
.D�&�葨(�((�"���0�
̌��
(��q��h]\Q0.
cM�h��4rZ=&�Ic\km�m��&��A����;��8�}������}��yI�ir��j
I�j�I�4���j{���'�J�x�U�?3��~��F[�6�a���>�(Ѡ���Ԧ����*C�PnH
��t��$=WV�^
P�V��O�W�5�
��Mߡ���Y�g�M�Y�Hc֋*�^TZRE�S.q�a�Q��ؑl�ZV���u�d��D��9Tf�C�i*�L��i�PlJ����N�]��Y(_�Y��e���ƕj�q�&˸K���ΘqZ��qC���&#CT
�ҏ����}m��f`6���9�x%�R�uԘTf��bK0ʬcQb����BA�<!?;E�k͔:�92��)϶��-5J�e��h^�1�۵if�No�P�j��M5���g�*�ԛDe�IT�r�������,ځV��q#�SüTpM�9:ۆ��

-�c�
ӱ�1W�;�$9���J͎\y���a�V��Uz�:u��UM��6���6�vU���P��-��Ee��	�^z����o!�c.���*Z�zR����,�U#/o��
�4X���s�`r�I��,��鐥9������
ʄ<�j~�vu|�M\�IrY��@
�PT�<��xʟ���1�.'����`�!�<�N��Q��@X��#�$
&�]�0��	i�d!�e�$�r���ق�ry|I�"�d�2�x�jv�����Y�ߨf�S�*�1��	�>>d��b��Jx
�yh�I%)�{�rs� ��~0�AZy(R+‘R���9H�LT�
�I\E�4��L6��-�U�]ު�^�WY�>�J���"r���,�J������B�����2`y)PK�8�]L�WA߳H^�FB�@̯}
�a�瞂��hĺ�0ǝ"ĸ3��n�d��X宖Ns/���n�O�}M>���<���<��<�Z�G,!U�|��w������K�RE���C��Z ��ާA�������!�n
��&`������ ҳ Sy�_�X�)
��&z%<��=
�<�H�<�a�?H�Di�ˤ�W�d��T�<�p/.��$�H.����L�6��XE��Z��́�hƤ�ј�f"��Db�w�{�׈0�c���B�^a�� [...]
-�	��~�u
����@�����7hYGo��
ڥŠ�$;Fc at G8;#�\<өG��
��]
-���	�����<M�
hw=�n�];��G;�65+���P���`0���^�ہ�N`�
`�~��
j��Cp(�C����!�EA���e���a�qC��1}������C"?
���6j�e������6ր����v�1�.���Ao�8��]@8���B{|a#��hB��>��n~p��s�y����n��u��󘈿���+�2�7���ԝ�Xg
&Qs45��9�=@{��?0�#	pZM�����3�lF{��p�3��,?�gyٟ�!�a�{(p�m>/��
����.�d/`=�
f�C���70���ԧ�'����������J��"�H��5��K��\�~���¿ƍ�	��b^?En��D|B]k�4�
R�
C�I�
�X�=��
-(z������%�-�B��R�&k�O����m���?r
w���޸�p��0�>&��?<a����������;��QWw�}I����~���%���(��Ӌ�\�C
�9Y�M��FM�^�"��ċ
Xd���Oe��D���
�$�H$�'�NJH�#�I3YOZ�+���'��q��p������w��S
�����!��

"A$��!�%�$�X��,"KIYI�p�
�m�w
`7�
�pwp�:=L�
��������QC�@�����E8�&	��x
���:�pS��������8�V�g'���y},�q�gp
��*q�3|˙z���:�t̅�o�
��d,�J͹�"�Z��Q��U�x�.�i��k9W
��vn�|������S8��<F����8�Y��v�Ey�q��^
�] �[�Q at PNA�c9V؅v9v��Z�e9� �'�x�b�z�V,�x�h�ĚX�4��Sg�:��i��$�f:}�Em�d��g�}�?��<���=���?��5T-u'�@�D����Ok�%k�)"�����d>6�2�j4�h�G���L����A����I�þx�q�1�Gx������P���R*Ǎ�+�G�sM�ԝ��PS��20�l<@��
?F-5���A�ո�
��
��޸�5��Z���x
WX�wq�+0"<���⢤��MT�8UK�<�y�X>�Ʊ���s�
�qW\���
�%����u�W7�hZpYӉQ�
\��ň�v
��¸C8?�
΍��3
n�&<ĉI���d [...]
-��^�
�?�`���ST�!��|�:��lG��
�<v�q������2�k�
����p>0�����

�V�#ӝ84�ߛш3۱�j웹	C�v`p���>�ݳ�10�v��%����%U�'������8V?	�_L�Hj�ȹ
�{�<
�3&�̬)8>'�����$��r&���cp�{T`��:
5cgP'v�ö�~ak�
�?���|^�
�.l
-���>�/�څ��Cք|�/����@܎Fcy�G����9���� �2����
�]�ұcq6�-.���Rlw�/�#�	û�
�º�]bO�~qu�i�;�����X\�/�=R}F���4�����X��Lk��6c9�

�b r&�G/Ė
��$�W����|��ٱVW.��j�ձ��*]�إ[/v�I
�!�-���;*��ޕ�b�$7��Sj�U�=c������;�3Ҙ?����o��v�$�/��޸ذ,
-��X���n}���+�Ra��%��=�W�.���H�	��Ƅ��'��NQ��?Rj�j�Wr�^�\	�E
�kp���4r�iӊ
2��)�I�~<�'����y�NGWJ
VR�n0�͐/�
B��Bl4ԉ
C��6���
�r��U�e8�T.j*
w4e�ߓ(N�*;ST��<�����Uڍ�fր�g����_�&k
t���3m6:2B��СŘ�&�r4s��Hp�b��F�66IU�N�¸Q.3�TJ3jJ2��qo�؍5v�ߕ�
U~J�*ٟ��D�2j^� '�9�1�M���5�2��X�Ek�
4g��
�Y�9
��l��l��+�
-s�Xn�HNs�\bZ�8Lەb�~M��O�馏��[��K�դ*�,U&�5S�l�#��5/�G��i763����+�w.֧�<	
9S��G�%չ��MEe^�P��/8��bIn���uKŹmran�b�ݪX-�4y�3>�u�
˯��
������lU�'��
j^,�^��h�71�n��F�Ș�yP��"\ֹ��-B�-΂d�,NJ�`/(�
-�bAA�d��Hy�ղ�֯dۆ4f�i�,�5�L��}2��dZU%3_����S�1�1׫�=W̽H;��X�x:O#c�㳪��E�p�FI�B8�1���(r��Б-�
6!�Q"�ګ�
{�d�w�Y�>ey�&���&��
M��CMZ�MZ����r��4�;��ej�\���A�����+����X�Eq�
��挄���2r˲�S�/d��SY���l���N)ݹINu�VR��5���5I�4���)I%����)R�C���m�|��Gi�J��%�i"���ߋ� k�$�UN��j
r�!ۥ�ɕ�,��]]EB��LHu��W���� �]򲪣r|ը纯�U�U��T�
-U�+W���g�`�/��*���!m�M��VXE�]
�k�#���ݳ��Fz}����IE�DŽd���A��yZ�8�Z1�~�����SI��O�r�Y��S��ZU��!�ϸ�\�R㻤�Ž@�H5�
5����� �IFJ�d$�LEb�<�[ð�u	⽉��f`�ׂX.�o��m���B�w���{P
���޻bh�'bh�*�6�FU
{��'��Z��a�'�|/�����^@�,�
�%��#�k&�� jU8"W-EĪd���Ģn+ºK��u�G�|�q����X�YĖ�,�$��&ni����TUk_�p�
-"��$�D�ԒPJ����2��Uc�LU����jj�:J��ϕ�:��Gr#y�����<꒕�Ȭ
�g��*���]Fh�I#t�M#4�4B3`�i	M7-a�
�*t�fpY
Sa*��gC�~m��w��@�^dQ�bOE��*<7P�s#�)7Fay�
-�믐��
-�����
-̟���j�_�v�;�\y�)`��j�cmAv�3yf�.�f����N5`={e!�/�b򥈥Rpq�/�R�?�-	T at i�ڔ�ʿ4A~��kS>��jm��V�����ҾU^�#�_�W�OjY�Q�x?���Vv&g�����R�\)� �"�K�/�ʥ�k����%O��<

���X�p���1P�
o�m�$5q���Q �c���XF��Tޕe�)�
-SM�4PI����Yh��x>]B
�I��ϕR�)�51�Jj�I��b�۶2�1
oc ����R
P

���RC�k(b
�Wov�m7�)�
��
-�	��z�rj���E���
�o��TK�;$�]�++�>v
�۽
���c~�ǏZ��Z}-ͥ�b�b�� j�W��#0�G��
��i�%�o���FɺU���h�$��/5?(���G��	~
ŏc���0���$~�b 9E����Q�:�����_�|F^}�I�;l
5���wK������a�
M�ch�JV��0 ���E:�\:Ǣt�%�B{�
�K��u����L�/������� �gds2y
��4]�!���T�=A�OI.����? �H+��X���MXPܥ�����
���q���>g�A*K����c�����zM#�c��/�v?�>�>��~���_�zN�o�:p�t��p0��J���Sjc� �
�&C���0��&51I�I1�/�g��
ה_���q0 ބ10f�
X�P+`
��-���6�P���Ol����s
��&\w��V���6=�
�0�a&��~��j	���[��Z=��W�^�u_���:Rt�����z�m���e�.������4�+��k�4�xƠ��F
-)O��<�/�~v��VW%qm�wڡkڧ�:G�6�|"gֿl�"\��N�:u��[�ז�j�D����+D1�����x4�b��j6�������plVcw
v�R����+��4�g��SX>	ίu/`�@��hȉ+������f7r�� }�!�>�w�7%�,g�ҹ�Y���n!�K��kt��
�v��>
�	<�����Z����äŘ�
>��<�r�
jr�sqQ���A</��::o�1�
O�E%��=�h�G#{�P-�^9��ح=څ'p��S��[���m/`z��u���܂��Ϋߔ\�"�D��UG�*:�8�o�1��h$���M��	X�N>�KP_�
٤����4�*�3Z�zC�Ǫljjm3S/`�R
�
_Z�-��
-�N����!����M�h��o����n6\[�������b�6��R��\�wϑ�c�*=V��c��=?�j�CZ�yF+�n�����{�>�@<���iGK
����i��O��)r��N϶��
-ז���ѻ��Z�.G��Z�z�ִ��r��Z�3]+}fk���}���Ϯb?���j�ԿV�����r�(���E�	h�!��¤ϣxz��
ήA{�ցgկ�6��h��*�ku�x���/{��*�0L�
FkYljZ�1I��Z����
�+'�B��[�0x���Լ�k�
}��P�
�����~�+OQ� �f�×u��6�Py��V�WIH����Ra��Z�i��:����Z>N��Z����5/b��F*#r��#7i�{�YQǍԨ+ƌ�G��(�HyNd7x���
�g�{�=Ê6�Wvg�"7�
*�l��.a����n	ZЭ�����跔=Js�'jvL��bR53f���g̈Ya��T���2�c?5�b/ScSbM#�I̯\%��g�ˌ\}�2|)�)�e��n�E1>���=�*��U��)��@��=D���a
���)�f�n$[�I�
c�u��huX&��L�;by7�q����3�q�Fz��Wh�D{�o�͌
������	�q�ڽ]�i�V�K
4+>B�	 [...]
�1�g$��b>��
�������0��{	KHe�
K�"�I&�L2If�LB&�$$C!���"IT�BR,	�@�!�(}��c��V��V��c]
-B����_H��g�3s����9�|/>����X�$��E�
�Ґ���cU�8E5IsT��@U�-wd�ґ�
-G@�2#�Xa�:�Ŏ;�BG�Y��n�;�[y�c��q��9.YK
��$�_�m�q�g�����.j��]��L,k�c
�a�c��S�UU�
-��TE�<��'�,ݩ�ӣg����F�s�Q�3��L����w[���,��q+��'+�y��N��+��fNj?g�8�I�K+��M��u��J,�����T����y��]̈Qif��3�ȝ��;Kn���EF����k�\�m�ǽ��vo���[��V����r_�\���GF��9�Ʊ
�l�M�Ԁxꉧ��,'�r�`�fE�8;J�9SU�3GK=
��q��ɔϛ�\o@^o���1��Mf�g���<`9={�4�cV��y+�󱕒c�}�fCV?��8�+��/�n�-��xB�R�g��T�7\��c�_-�o�r}���'��w*��Q�?_n���0��#�����b&�w[I�^+��Z���\����x�m&����}$�=��o��%�PF<����/o������t��
��]�̂eR�
-d)=�WZ�X)��#��H
-����̈́�.sA�x>0�
�7��f|>���x�����h��A
,�B��
eVVQ�2�#�*�Rz�T���Vj�|��&)�ԥ�`��-
-V(!x�� �l��c�
�4o
2c�������ؒ���bی-�͸"ۈ+��c��/bO�~o�&�j`��<��H���i��X���1J���E�ӕP���	ZJU|([�C��
-���Jņn3�ڍ١�Y�����������3������l�1tzJٓЂ���R�}e��e�WJ���>�C5o�(�]��k�(��F���ӜU���ʥW�j֪"ͬ����F��nԴ�nM�=�ɵ�(z�ۚ\�1��6&��gJ�m<��h����|P�u <ش�����Z�Ճ4�>\3���	�i��7�Ѵ�xMmthJc���uC�2Mj�ӄ�6��i����i|�q�kzC����z[Qk`�mD���#hl#���Y�����y&-�)
�tS�4
��<D["4�e��o�����o�I�Zjlk�ƴzu]k��m���uնY�m{���F��WD��l�I��I��O�ݷ
-ߋ^
TB���:�^Z�V�ŲNoA���
�Ȏ��Ή���XX��.
��Ӱ�
-
�lPX�&]ݹC�;�誎3�~AWo�5�n����lo�l$ϵ�Y�P���F�u+k�Y�k�f`W��ѿ����X�5L��"5�k�̮I2�8�8 �y�w��Yh�$�M�][S�
��
�������λ�z��s)9�[��
��M�Lt��H㱉��T
-���K2v��W�����C3��d//���`�������N��'�����
@��~:�s
�5PB��wK)���w��D��Ҩ
i������pЂ�
v�q�8

'
&�#���a�ˁ����ea�R�#$p���K�����ȵ*5o3s@��;�\'�E�Q���?*
�E�7p
~ۇ)=I=�ӈ?5Jzz,�0�቙��ٳ
��K'��
��'���x�5�Wh��+�-"�l�M�g�����x4#�JÞ�̧�<'�9�=��?��Wь
�1�9� �e��2q���8ρ�
-�U&��. �ר�k�[�m���H�}��+iޯ��p#�
;9��<���K�2�����M�f�]j�>s�!&���E���
:�TK�Xܗ
�.S��
p�8.�j�k�a���R�3н��A�W�e�4��ހ��Rbc�‡�/�L�>e~>g�|�A��`����fN����m���
��h5@��8�
-q�
�P �`%��:X������>��q���B��x_�]}���%�~1�%� ޅ���&��V� #�7B��%B������70v�ޯ�ե�h�>�g^�}~����$%zEs���`@�}x�ËWbCa�ADA
�z��,E�L��
-F���e�;{�v0-[��nr��t�#��L�q�������j��h��8���Чm�>G��u���lꖀ��i�E�P�0'o��eX�׈�<q�L
/�����Y�Y�=��-s�\�yL��ǿoΆ$@��Ä�!�\�0`�
��c�m
6l�aCH ��%9H�PҜm%�Ҵ9�4R�4G��֩��i�V�Ȧ-�4���e���/	Қ����'������������)���'t���pg����Sx������x�
Ƭ�Z��Q������N���
��0���]�����s��?������u������
���]��
W��4����#={���Ԍ�O�J�5�*�:t�0�#4q�V��N|H��5��*}\�.��I\�\��΋x�N.��y^�s\�٧'�y� 3
1��n
S��4���[B�x�S+�k)��j���9�6��.j�Rc����sN�u��i��$�
��c\�Q��4W9s��f92�^�o���:	|�sk�L*�n45��9�
-�����+���9qJxpB�q|N^�3��s����qL͛��y�ph�yLο�
�`�
_a�o�'L����1u��4�tr����X>?L�����0?g�pj���J��U�^l��b���Px;�w�@x�#F�7b;&"�aw�Q�\r㑗�#��G~�-Q�X��M��7�����g����Q;�O-����SQ�p2"G#q$*���q`i9�-���2
v/k�ΘV����#��c�ak�6���X��.
#�/a8�6��
���`�����Cj~���c>1�1�������_��Cq��y,�$Ȱ31;Vc��JlYi��$+6%90���H���A�O�P�KL=�P�IS�A��&ze?�Z�#t�I� �%U�oW�9R2y���WP�~X�a��Jy;R��U���496�*�pz9֧�1�ڌ��v
d���?�}��ѓ�ݙ��C��M��7�!�
�Y�'K�G�=2%|�'�>K���L!��rl/���碗͙s1��
�
e�c [���Do�=9
�V8Px�Wt�S9��ڕ{�QN�Uy^�����	g#�?¡���3���m>�K�,;&Y����g�ɸl`\�*cї���y��Ÿ_�΂j�
-��(��[�
-OaZ
�p�6¥��jJ4��	�ꚰ�>���ªzB$a-��@�S�f����4�(c�CO#��	1.��a�V-EWQ|řh/΃�D���*���.m�������^4��aS�$��E���������0�� ���u��3J$a"?���J�E>��N�ś�i�^�����t!:�Q�%��,
�r\�pVh�E��
v�6�V�Z�k�`�n&�AaԾ&
��E��Q�������H���5咸Oͫz�4K�I���='=駛q��f
ܚ%pi��Q)CSU6�U�hԕêӣAgF����&} F� 
���F@����N�����Z��O��IB[%��*%q���X'{��j��}�񻋿���U��Z����LXj�`�-��P�:�FC#j
-�1tBo
Ag
��}Bc<!ʍ�2�
�6�F�
��ZI�k$Q6C�$nQ�m����C2J��_K}����v�o0��R
S�
-M�0��5�Ƭ��\
��
U'*-
�X�QnE�eB�Z��b�;���PY~%T�I�L�(�{��:�ۢ�&`aۊ^��q�5���,
Q[��x�2TY�Q�X mc4�z��L(�5Am��փb�0T�](�
���D��#���R(
�U�
��K��z�2I��A m�F�V�
l�t���6���9��IP;2P�P��Q�b�ENT�F8��w��Z�k
9�W��zY����~��o�;$d5K"���%q�e�I2AF��O|���쀡�}K���
Uk
-[P�&C~[6��
-��A��#�c���^��dz�a��0Vy�#�{2�� ���6	i��-aU�����-�8YO�i��ɞ���m���@�o>r:#�������w�#�K�
V�5H���A� 5Ї��f$&�"p���|��wH�d�ꓰb�	��|����
�.�&�
7P[��M���`븪oR�#�����$3�2���R$uHYjA\���,
����iD��"*�cD�At������H8��M��
�E�N
�Lm]'{� ���L�wX��ǿ *��p ʐ%D�qE��ׁ��
/B
���E
��yj
��Ml���`֓&����8�֪16Mn?H����}~�~�����=��~���_������Y⦎%��(	��)Dn�(�/WS�:���`ʖ��@Φ%r2m����K�ʡ�
���|���2�L��h�L�cx��,� W����<�$�R�k3`��\��r2����#s��͡jg�Q[� ٙ�ek�,3ƛ���vs�Z+�*�P�b [...]
-�S3`���V�j
eSˌ[ۑC�h��(�u�:.�:�.X�n0g�<��̙+
��[�F�_sa
-�S�yH1g`�^.�@��U�s��$����z�
4���fp�'E��g

�
-m=E�������'��������{�x�����K���4�b�X�94s�퉮�j�#��M�C�d�;�s���rÎ]ر;���ر;h�(|F�u��l��]p�w��r��߇
{�)�5���՜��� ����݌>�4��A�p�&�B��
��4��hΏ{H�c_N`G#�I#ů�K��u�X4�`�;�1�'-��c�ٮqu��x-t��ɞ�%�CR[��1Y~ւ��}8��6�9��4�.�Hb�U���(�M
����m™&>�v
~�f���ت�����n����c8!�;ݪu.4@�W�	����9|������
��-�M��
���yw�t�{���>S������ӆ�#��I�?
�{�Y�r��U�
�
-n GL_�M�%݁{ց

0�=&&OV�ۃA�
���c��Y�p
��

��d�r��Xw�@���0
�C̄9P
eP�`�~a��Y�̍;���ټ'��	�K=�=⭇�܁���uޔ������_�8
� 
�l4r�9�	s�c�x�
�Ǝi���
��)�>s�]��u� ~˯�|�
�|
��\�K�68�
ش����
��+�/�����c�Hg�i�?��
؂�.c�*�Z��k�l7��ң�49��Y}��]�Z��Z9���flA���
M��O��Ţ�:#�W��Ϛ��d����D<��/W��2v\Ž
Z�s��.�$����B���|��D�*Vޅ�p�نg�O�S�-�3�7��V8~$`�P]dO�)�㘁F֞��\�.f�2
���VG����r���!���e��~�dJV����9
�]��|�
��
_|�#�ht�����Y"
f��Q��;�c�^�أj�"G��&�A,��[Y�
�6�M�Y��
��߶i9�l�숗�Xu— ��N
��n��N�a������F��
[ȏ�2�
�d�2"���62� �P
�Y��]�n�@�y�r��������,��9lk��
�tŧ�dX�"�I���h$�1�4429����J��B�b����*_T�*�c1�����
-ۧ*oC��{���S���1���ڝ<�A	����<8�~Zg�ն�Z�f�V�
ղ��Z�n�j�MRu���j?Sf�9��/Q��b�9�j��&-p�-��Q;]T��-��Ԉ�����ɏ��>eo{g�)��Q~��h��A�N^Z�
��0U��i��EUUn�E
&h����er�U��|�w+W��r�m�
�]�w?�<������
��5����n��k�0�I�!�vß���WÕ_�n/���*�}��c�J;�U��
*�4X�;��<�1*�J�
�,�{�T��\��,P�O�f��ӌ�o���������v����?)��E�]�����C)�!��*m�U2�a��.mT��AE��5�k����)�7Vy~��7L9�ɚ�?^3��kz7����
P�� �2VkJ�6�
Ҥ�3J
��&=Uj�E�����7%��g���a�z<+Ŗ���7�fn��^	��� ��
���jz�M�9X�=G(��e�JSF�,������B�W(5x�&��k\�A�
yOcB�+%�F�XZ�(.E�Q�6XU�
�<+Ė|l�%69���i!]55��2{�+�w���
��>�4)l�&�MPjX�&���
/SJ�
-��ج�%E�҈���
���C�E#�\
�0�6�C9�,{rh�a�
�V�ᮚ�ɑ�J�쭉}�5��
5D㢒46j�R�'kt�Q����@#b�jx�F�
�OCcNjH���,
Q-�����נ�\Z�
Z#mP��G�jR��Rc<5>�_�b�5&.R)q��o���%jd�%ŧix|���4,ޤ��5��^JأNh`�'��P�-�?��<*���?we1 $�� n "�"�

�2�,�0Q��NHAA�(����M�q��Z5q�4զ�M���6mz���ĸ�&��ƚ�X���a�9����}�����"Ρ���l����X?m�
_f�K1�S�U����@Y��(/i�r�'+;� ���,�E&C�2
2��UZJ�RS�dH�PR�>%��RB�NJO���
%$�Hr����T�#,�g���=
3�
-��b��oe�Ȝ6R��pe�E+#=I�t���s�j���L��J26(��\��M���G�'�qA��;�Nw(��4�bS
:F�
�@�Q�U<�Cq���l6�)c�22�Pzf��L�J5M����T%e���U��
ř�4�lW�y���4ɼK���`�nkB�C�&���0#�Oa4A
̂�`�
0eIFs�f{Ȑ㣤�@%�VBn��rc59/Y�y��ɛ��M���DK�&XZaY�p��Y�)��
_+4ϡ�\�qh\�C�R,���r(�)�J�
�<zn�?e�&�{)��_���*
Ӥ�I�X����tEXs4�:M��
-�Y�jm��5ں]#�����
-�~��B:��wh��^�0�J�V�E7�Q)��ٓ�1jZM(�TD��‹5�d��J"Z��%�)�����,-SHi��J��T�j�����P�
����FC�C��
ڞ�� 
�lP
��fю�2��_"�gT;s�F�{id��B*�\���H=Y�@[�F��4�V"[��l
z��&_�V����vnjX�C��t8�-s�E4V@TCL�\F4#�lyE��_.�at
���s<�_�-�� =Q
�ǫ�ɷ&J>5IVc�w�U^56=VS��5��Y�!���r�>��>�<�
��e�k�z��P ��� ��
-)�il���u�O� y-��P�0yڇ��>���
+7{���4�>]�5�o_����p��S$��l�7�SO7=ϡ~�z&�j��"��9�Ff3��A��(h
�
�����ܚ�4��K}�i~�i<���[�dZ8�Z�L-P
�ky��g��ຈ�m�
��l��y�h�*^/�|�3Xs"k�ĚC�� �7IÚ%�%m���,�1ϵ�x���XE#�����
��C��
�N0�1Ҿ���C�� ��P���"p8iF�j��z��͚
�� �5J���c�{��J�����j}?���@�?6��f���	���p뤰;YT'�:��p�������p�
z��y�b�F�cI�7x��Z�Z+�o��w��^B�m���x�B<v��.�������c/�>P\���w���F�z�w>�{��pbGs֏�

��ŜC�9��V�M�(���g���U8 ���@xu��������q
?N�x���;�A�Equ����O�/����
Nj[9���W��<��F���^��W]ZG���Mg �_��p��b x���%7�Ҡ�Ï�
,\~��gw-�������/�M�CO���H���9���;b?��%�=�].���;�z���Çp�9����Ae��W�Kä/��
-M��
��y�"��
��uj��M�穀5��Z��z���a��qi����ȥ���g�7�`x����a
na�
����w4������'?P��_���
\c�
-���z��� 
� �a:̂�`�&h�6��5z���=�}�o���Ôx�$}��L�_�
�6o�p���9o��@���
`
DA
-dca�~P���:�۱߄�V��_����?���4z�"�J"����<}��t	K=|�Yx��C?���KWL|Y[0�Ϛ��2�cA���د�j����������~|ʴ�	S�ټ�T?�QJ�
z�9"�>��uqN�	��?�%w�ŗ̺7��5f�/��N��LN>V	1,�v��b{%Ө���;��[��|;�x�R>����<Z7t�H
C�u8
-���#>prWJU}���s_�D��щ��T�MNΨ@�Ə7𣋼������:~
ŏ�Z��u
[����8�}D|E��
�Bm'�|��.85�go�����-/���(t"ш�Z:�s�_��l���خ��|l6bs����ll�2�9=ق�
l��ds����
�ۮ�����"G�'�#��$:��D����
��b��]P��r����\l.`w,$
-ϓ��T�V���W��UD��̮�������r�]��9��� �]���;��A��1���B���9
�(��h���r4*Ѩ�f
,�R����y
ZDd�+�G#��r���"���pvrԾ�ѿ�+`�ܵ^��
Gk4:��ı�T-��T�iL\�����Y�n0˰/� �2,�� 3,3��1��
���$��v�c���xK�ʭk7�V�괪*�R��R�U~���V��.Q*�J��c;R������{����;G:����	r�q���+Y�Ȧc�n:�J�F�d)���ﱰ��G}��Vu���Wj폴�~U��e�Zr6�f_T=/�F�|T
g"S8�%�S[K8]ͱ��lsrx[�����}�嘽,�Lr f���Äc�e.v���L��g2�=&�> �1�����,�wvi9Tk���%�?k�5�t2Y$Dq"nG��9o��r�j8��`!�E8��\���� �I�L&�1��B(i����K����{S
H�9#�3�j���J��Cq'_vD���Syʝ�i%S
K�,'�r %�pj6�i�L�U1��������݌��2���ьQ�fL4-0�`�t�ݙ�2�y_�
d�������2����L�G�_d}>'.�z�i{X��d�U˜j�Ɍf*3��Y&�w�/������4�i'� [...]
-�Ū���I�W=����f�8��%��K�(-����޲Z��<�.z*<tU
���b�e�e�6�Z,��l�:M���񔊧�#|�
-�ğ�bF�k�
գ(Ǡ�Y��gI�[����LwU]�V��
tT��v�n��i�N�b[�a[�ѶA��6v�ר����� 
꬟Rm�v��B��CY�cbAL���7�c~�اz<�(�m;pפ�Q����gm%muvZ�Zh����G�}�F�~����'������&��������=U�S]g<���]�[�Q49ܠy ��; ��߫Z�US�=���8�RhmȢ�� GcM�5465�����䥮i�Z�86�<Վ�T9.`qܠ��e�G�:~GYӿ�Ay�AE��]i�,�{�Iߡ��bH�.
wiۦ���
CSs"
-Է�ao-������zlmmXۺ�n�S�6��9G��(��(q^����B�(p����R�jP��7tՋd��" |�#\��U�K���
Mm�l�4��l�:
-��`騥�����N�:�)��C�{�B�*��s����u�
�����
9�� �� �e��npS�?��uBX��!�'�Dk;4(>ֺ���"�t�QޓDY���
3%�R�=V
-=�x���z1{G��N��]a��92����������k�=���c`�~�5��3�t��
�
�RLrH��[�
(�m
$`
H#Ϸ�\_!9�
-�}u���e��1���ӿH��4)��$���(~I���$
�=��5���X�E�_Z#�_t	�^���}�Wt,RT�
�$k$S ��@:;���I
T�h$9�")�Obp/	�yvO�L\�Mb��&&��+�#r��r�C�|ǥ�Ġ�p�!
Ү��Zj����B��VCq$������Y��!6�BL���a�CSl

a��Td��o1��'"����lg�qHL��ݢէ9(�Ji+"�J_�1uBp:�ع��	D�S��bs�����Ma}�a�ܰn
�Byw�x
f�kf?T#������VJ٭�aH=A�a�+\��8�9�J�I_��4)�ҟ���MD
��Z��Y��XI׃(O
RS_US[�Ƕ�\���[U�\=%���=���@vP5,O8"�Y=��%]�6�mz�I0�H_�)K����0l>.�wR��
�)���Z��L�
-v�j�����5�!���/����C��p��'�V5�4X�ք�,(z�۩g���

C���|D�' z
"���9��&5x����
ZpT�%���
-vz'�5�7�`
B�cㆎS�}���&T��y�i�0(:5�
:�� H�tR��w��K����c���)�j<�)�^�x���rS��긭�����
M��z���[����
9�����5�Yi�Gcݲ�9�S
Ok�I7���e��.���5��ӍB
��2��{2��ce���e
�y��
(�K�k�]XXXv�]`9DPEEE-�}�3�Ѫ�68ƨ�ǚ&5UcըʹM���G϶&iL�L�9�l?�q��g~�e���}��y�G�㣍
Y���&�Fa���V��[O�?�r��&�4ݑ
�C�ƹ��ߢ�����ԩ�~�?�p� Ҫ���
'�K���i.�g����]��l 穋
L�h���ݷ�S
c
���)+����C7`?��vj�	��$��ur.�{�gx��hV.37������k
z���nP�7�I7��M�����;*�D
2f;y6�U�+�6�����S�|���}�.���U�����Xz�M�|��;��]j�
sr�E��5�zH]< �t9}���"�
v�@	��Z�3a,�tS��|
��=���t��������}M��>��|�������\�sOz��O���  B�VȆB}�24F�QG��@�����Ǘ����9
�3���Е��b�A�\�Ru���!u>}��p�?��^0zݣ׽C.����RC�('~�n��>��_~�fb/�%||�������%��
-�x
����6
�O�t���k?������S�n)�qG�>���H^�WB�ԟ�q
��sϨ�سu�������8�Mhl�����6���u��F��*�
��ާ<�k1N161
��){:&�2�l��Q|���#�&�x
��!Mg�M:���c��
�w�����/w�E�cj/�v��wz��YΗ:��Irq�\
�.+

v��*
-��aڃ����I���$bNgkbw%[�z\�h3n6i#�7P����P]�I��4ou.�w:����h?��K.vi ��nE�A�\��G{4�XK�IěN�����R�j5�*"� �/��rfu)�f)�O�U������p��-ql'�e��Z!�#�1�Ѱ��Ɍ�i
>V�c%>V�����2�e	�e�摍�ϯ�il�JfSQM�����4�9�αͷ�
h��f��
x�%{�Z1�p"ơ���4-�6�o,P���
-4j��T��mnq<��Me>������_x
��������
y-���5
�+8�{w��n}W0z�h%��K���dhVW�fv�Wc�!�޽LӺ�R��8M�I~�T�c�&�X���[U�s���<�1=/���g���j�j�b(G�ˋl�a5�ø�p
h��� ?��
�Y�C���i�f5�iJ_�&��U}�M
(Q]�H��Ѹ��8C5�
T
�FU�[U�W�o�<�=���ߏ�2p�Fq��Z#-�9��3#���gj�Ҕ��>(B��lQmp����֘~
��+��~e��_����U���C�,d���lְ��ڪ!�T
����~ �

������q���
>O���������

И�U�Ekt�I�"�2¡�9*P�J4<�B��cU��sh�l����+v*�pX^�9y�n)/�1ON"Cm	\e8�3���
�O�o��S���x���ʨ~*��Ԉ�x
���4&]�b�44֣!q�*��¸j��+�8K^���+ǸC.�!eǟQV���p;8��6���\E@#���$����#�R�S��A*��ЄX4�h�M
l�Q��P^S���U�5��mn�˼HY���L�.G"�\�i�'ބ���}O�0�t ���\{��L�8�g5G~/�K)^�&vWQb�
-�B48)J^K�<��Y��Mv)'9_��e�T(3�VΔi�H���g�f�&�����SJ�^��@��%w��M�.���rdž�P��2(��b�
������4 at n�Q.[��l��L͔3�#Gj�2R˕Nc��� [�\Y��(9�yY�(1��iW�S}Jj���nt�s�\�N-ک��r>�@���)��;���҃�i��
��
��V�gd(͑�TG�9�du�(�9Yg���dr�F	���w�AF��2:�)��SB�}ځγ�$�
�:P����^
����,�g�3���_�Yٲ�5(ۢ��t%gg���W�k�̮*�\�Jp5��f�uoQ��eE���ຬ(�]Eg����S
�Wg�ђL�1P%P �����R�]e����`Yr#��+s�Y�<��9���S�g��<���)�;S�2Ez7+��;�y�*�sIa����SDn[�X��,4&r����P
^p��V��,�o���4� P�!2W����d��U薡�P�E#Q4N�E�
--Z��E�'�̃�>�8�dY�]p9d�j
F�����Ev���Ǯ"��!�fR�zD�1j5�6�$�HӚ��1�Zs�L�5�Gڴ�4u�S�v���~��L�LJ=���}��}��}��J,}Z�җe-=/k�Mي�\!iZP[O��h�g
��J(�<�E{,�#��K�!�ʨ4+�iS�3E��L�8���
#�+W]EJr�ds���Z�W�,�͊w�Xf�Q�\g�.s%�k�=~�FG!�":�P
eP�idz�
UF��3�8��dw��
��$ٌ4Y�!J0F�b�W�1U�5劫���Ƨؚv��e<�H�yEg�
-_+�
TtuP��X\�~ �ZpA	��x�A{
��]�36:<RJ
3��HYL��Ze��5��P�w���*ʛ�Ho��y���	$�
R^Ɔ�p�`����}t��
-�����V@L��8�GTKC�
3��N�1��ϊP��X��1����}\�~u?��M�g���3g���!��0�C�1�����Ü`��v
.��tޗ�T�g�Yb�3��g����`6��F�����fc!�"� �]��7�f
��́v`�
0D.b8]�`��.�
Z��ЙM���"ׅ����ziX����dt�
$s�
���
�GJ˘+;hv:i4����ts���p]�f�.
u3gv��
�y�g/p9�|�
��G��� �R^'��Ĝ�C�x��Z�H�eR���&�4u\�!�c5~�!��c=~l�������uk�؈����q��C�}������ڠ|��S:N^��u�<j�U�\�>�~��ԏ0h.CM&
l�X��o���ӈ�`]~��񣇋��5顸{�	ٽ	��]��k4N�>��br�K	�$���B]�)f:[`��k�i8`o�g��g��~rr��9H}
�;¥{���Ev��$��
�9�P�,z�)Y�J\�B�c���U�?t-��=��7��������
L0�cQ�q��-��)�8ť|��<�B�$�$��!`=޺!�����\D���|�f)�x���R�����O�hX�ux3<�Ҫ_�;�
�

L
�Y����c��'��E�K�e
-�2A]�ؕKpS��9
��(b� lj�P!ݟ�+a�p:��+�5�
���pH�>�?c�t�$�`]��9���s�Mx�B���@w~DŽ
�q`�
-�a2�B5��
X X��Q�f��e���z���E�|�^&���W��T���_�?�xN���D��H�
x &@�Q��G�ՠ���oLNי�1�]e
-�?>Ǐ?�Y>c2���D�|��oI�9�d�
�8��8�>�//w�@<)�3��̤���N�L�
�?>ď�0՝��� ?���{�wg�RO�yN�9��%�x�%��cd�5^�� ����\���{%���e�3�)�/&�.lخ��ll��n应�w�E��Vو�v�ϓ:��^�<@��G!���������.���b(��?��h�Dcy���2�Ķ�uDڄ]?Sm+�_�qх�*�?J&v�����%��}� �
(n�C�
-�D�:\��fk�m�t��*�t��3z�s��<l�`ۉm�gb�I���
-�R
K9Һ�`�6��o֓�ul�����t��j������

3�
�I{��nYа���1������f���;����L�5b��J�q���a�����x�E�:�d'�ӁⲾ
u��#zo���Б��F�BWA�t�h
!�#����Z���х�G'~,#�O&Z�D���X�����\@m.�6��n��s
����;�w�ޯ]���{d�XN}v�&
��Qhdk�&�Q��,E��*x��
�h!#��#|�B���,֣������r/�!�4G���
Z�-�
-������u�T&b����V&ֳ��n���dt
-�)C�
-�Z2ш����%T�J� ��TO
�e�?<���
q[�Ƞ���}�Ǹ���X�Ƒ��`	������"�
mּ�6͍L���C4+�5F��7:G�1SUS��1��1����2b}r�.Rul��LT�i�*M��0
W����n��
�/G���$3����
[�kK
--��Ɵ&X��d�W�y���͈���Q2���c�$��@Ֆ2UY��ԩ2a�*�,a�J�4�K��ګ�ʷ~�|��!�{N`8��NZ�u\���>�7�]
���/��Rk3ɰZ嶥j�m�\���L
�ʤ�"i�ʒ�U��T��ZM8K�[T`�T�}���wj��9M���
�E�$�Qnr���v�J�
ˤ������3i�
��Ɨ��R�
-g�E)v��8T�:Lũ#5-u���&�0�P�i���єA^M
Ԭ����I_�	�ە��O��_���
��k���x
-�G�҂Ҋ.�
�
�`��+�ܔ9"T�0k�#Q�i*������7�e�y��G�(�
�A�uY`w�]`�e�]�]6��x�M0�xD��⠉��h���hԦ:���M��4��=�$�Τ�v�I
��۴�
;���^3
�7{���y��{���wi��J>S�����MM�,�)O�"�t�]�-��)���n~]6��p��D�o����}=׿%؃��
-M|���!�.��oNP�9M�1#U3&_���,UV�S�SE���嶶�i] �u���.�Xw��zH���b=�x��p�g�ي�lA�
S���!������|��(^UE�UY����\���QY�M�29m^����a�,�-��<ٗ�оY�.��e���|�9�)�-�0�pv�Ӎ�*��-�M0	&�]
���*�pĪ̑,Wi����*-5��,���T��RŮ:�&��5UW���2�7j�{���/h�����*�u]9��r���Fc3��e.�K�FB��|P	e��;GY�l�i*.�RQy��V�e�(���S��^&O�F{f)�ӡQ��]��FV>�L�+�y��>����F�G������
��� ����


�����*^����3T�͑�[�|o�F׸�[S�Q5�SӨ�|3��kW�o�2|ە�ۯ4�	
��\UZ
�FoT��Q=F��h.&�
�B��
-}/��P06F�k��[��
���y��o�H�CY�2u�LRz`��
�X��mJ<���q%�(�YI�{J��*�6�-h������ �Pe`G�Z�>�-o
�cB�2�)�f(=�
&����rkxȧ�PPɡf%��*!�BCC݊�S\�b�o+6����zn��ڌ5]��
���0P
p�]����W�>�mĤX�6&*%���p��¹J[4,���p��(.ܨ�0
/�6�&|�f�,4b�96Dx��5�ƌ �@=���|��mA{�D�'��R�b�45AC[R�@�p�D�T#E�M
aP��������<��0��i���BS��Bc���a<�}P�{{�
�$�7��e�h�6�u��grј��?�v6ʜ��M�����nc�ښ�
0�m�x�9c8����GX��f��H��⽓1[s�)��V�)m�
)n
�ql(	�".�ɣ=���å�M�����$w�c:<_��O&��
���(���ӧ ����&�⩒i�X�
tS�K�(k��Rˆp�p	[�eg%yt2'�9d�r��cN��/8&s-�[�ֳ���j�i'7�U���j�����C�m�^0}ƛ�nr��
]�"W4y� �&걙zt�G7��B
=��V6�,�Ԣ�����\�1o��v�aM]Q�D��:�����R�o
ig3�tt�:��~͍�[`+<���(f�"�$���<��G/r/~/
��~�
��[��׸�q��}p�Թ�Zj�^LR�
Z(
�D�TL�棆ˋk��ś���?x��0
�Ajr���f��-�8F�
cN���Gg��Z.�x�;\ qS�Y��S�;�Z{����\���������ٯ��_X�bS��@H
ؠAx^������q��4�[4ُz��q
-q�]��C��&�9�����x��
�1�~�c��I��2�7e��
8c�~��!|D�^ �K��K
��X�}4Y���+]$��>���#�I̯e'{ 5N�����1�bh�of�=Cc@~	�W�ad

0�����*�r�޸Ξq�M�&�����:$�fϼ�ɀ�
$`8dA>ؠ�A��d,�-��=���qB���~�#�M����]�[}�wu��O|ʯ~g�
�	��r��y�AX����z�Ea���� ����N�
-n�2.�S��Y4��y����y]����C4���b���9�eh����'�{�̻Ja,#t�Z\S	Z����!}����5}L
���>�U����3��	�xG;h�^��ms�{�V���3���]8
-�����Je|�I��NS���4
hT�O[��}?�#ĞI�y��bZg)�W�*7�e��ƻ�
�j���A�r��z��}��}Fw�����ㄧ
Sh��G�V4\ԭ��~b��
&�Tb� n�_��}�ث�
�ѫm����M-v�,�ϵ�'`|

�/�>g,��ƒ8B-^T*�G���_L|7�{٢����m���Ӊ9����:�w
[i��ɨ�
�F���ܤ��
`<
W�;k,���Ex��N�T2yg?��f�ۈ_F��t���A�7
-�Z��9
#�9N��Z֓I�:Y'���
-��\��9�y������v��2�È?�����#�����K����B�h&�t�0�U� �jg���BF5��׏��p�����6���X�f��
���Ʊ��ZtR���'�e
��]��o��
;v.�p�8q��Nl�p��9�
��&M��N�v-m�v�JW�rT+[�v
�h5���[�@�Q�ZXA\��1&
-

	����
-!:�'���������}���<_+�Qˌ7�ъF�Q4���$�M�,�c�]�O��x��a��YEVW����^e�N�{��{���J�;��Q��>��!���ctM���
:^FݏN�
t��f6R�;�I��h
a�
�:fm��M����E���Q��ڣ^C�"��)R�QX��
�s<���
-��uM!}*F��jT�����
tj"�W�5�=�d��Ʋ7k��
7,j�pV���7�P��E�,+�s_�ܴb�%4�J�{J�CvJ.���Y�m\)W�eʘ���&��+W*ߩd~��
-Z4Z�HAD�˜��*��@#S4�hт���k��"���6�P��
��:MAZ]ƴ��w�R�IJ���fa��	����X��<���1ٔ097�4dnҀ9�~s�b�}���kIi�eF˜�,
�
W�rFA�e�Y�*��]��� �Y�z�����J9ZM�
`
��<�ĉeȖ���"
X-������V�����(b
��֣.��:�c
-�7(hߡ��}
-�
Sk�j.����7�-}G���\�ܓ�<:�B� %�C��YXc��)O�/�;Qb�-�SO�Y�r��ʫ�Y�V��I��6+��^U�rD~ǤZ
[��ث&����xF
Njr;^����
���Ɋp��h����ƒ�8$�:j
�0.��k�QmR��D�5j�q*P� m�Zj�j�����9�F�fy����|Bu����|A5�WU�|
� qO�P�ٍ�Q4�`
�z�=�^�0��>�E���ü�^����P�.�Z\�jvW��]/�ۧ��v5�GT_?(�g\.�&9=���<O��sQ��*�|_����Wy=<M���ۅ%��� ����������<y�jh���T��Nn�W���ꚺT�SMӘ�|U�W���|'e�]P��+���'k���߲5�e��u�v�7�
؈MK6����B�x
�fh��ӼF���Z�r�����Fխ
U�[��U��S�Xe�)�;UxT���e	</s��2��
����J�����n����@?�@�ڠ�w�{����rͪ
�T
t�,�R)��C�zT��^/Kx�����%�_Q~�6����`ZEp���b����ǡ��]?���3D�OiZޙ#{�Q%�VY�ˠF��GőV�#�2E�e���(�Y�=ʋ<���"/)���L����+�
8B��h+��A�h�y
4�]�vU�XY��lY�
-d��e��T�Taԥ��O�Ѡrc�ʉ���VV
�0����ˀ��o��
-�U��Nڟ�`
 ���+/��hנ]�V�G%K�L��*�����ʐ(Sv�M�`�&�$���&0�	��F)~0C�0�^e�o��C#����Y;��]�#��U��
�bƒ
g)4O�$I-Y��@Oqئ��)X����`]�x)�k
-Ә�����$yҫ�o3h$a z���ʵ��5Џ��K�����f�mٓ��)����Ý�7́>�A6Á2���3|43
�#7�96��4U��_�.��4&ab1��۸z�s
V��W6t��-��ri�bA�L���"c+Ƕ�DOb�I�cN�9T�YPs46LJs;�0�c`w^�@�n��w�Uf	5�V�1!��a�5&9�f6�Ԍn�&<�V���
<��cw.�,㱗8��������@c
�<? x��Wx�[�Ǩ���
�)��`��v3֭㬁	����5��O7�XޔF|
4G!��Z�IO0/G(Ǝ2/Ljc�w�ds�M��X,ґ� s�	*�c�أ��`��wi�Go������X7n�
ڂ>�لn�ތ�c+Z�$
_-xI��L|�1y��y�uz�8��c�}���:�`?G�gi��s��y�Ǽ�O��&�� �
�ٷ�=0��ۃ>�9�g4Od�N�i8�)���<|
.[O��+�q�8���O^a���X\���ū�Ú���RZ#�u}��g�\�����"ӿ���3��0���+FH�a�
��W�
���M���q�����M�7��-:uq���Su_��qp?��a�`����ә>^�h^����� �;
�s�͌I�.��1���
����
�_�^�	�}���C~w��=u�e|�������>��r��,!݆���!y��tVL�
X1K�/�W�[�����e�2c�̦Z^�ً@'�~��y�y�_��=�ͫ
�O�8�v?;N
DZ���%���n;7�zI��m�vݺ6[E�֪]��
��B��ҁ(�	ʠ�*�k�T.��T`�@
��`��m��2���sQ�S>����w�{�y+8�!h�n�	X��
��_8�wp at 7)�8���2��}���]c�^e��� ��?��̫��
-<߅o�7�9���|
N��Fb-C�Oo�c���\#�Wp9/�|^�u��¹�|�<~K
��hM�^�#8��0lO1|�e�.�c
�_��
ރw�&��2�؉��_�3/�^P'�=�C�%��i��/pZO�~���|���1��!��}
-�"�zA�RB��L�y���,|>����O��s�yx��4c�$c�syy�0���;���G{�	�W�=���hϳ<��*w�n�Y6e6N��Y���]ad�Z�yN���8�K�΋e�T��/·df���
}?�ed��N�a���A{
�)tg�"֣=�S�q�y9���	�ܯ3�
-����O�Tn���a���w����j~���	m+���'�`�6��@;�v�a��hO����0y
$���>�f{;�{��n2��ŵSϰ�ހ��a<�_֜��B~�c7E�E]
��
��
��
T���K
�2/{��]B?��J��5h�g��I�8Z��r�s̜��y��)��u����&x"�<���参�
ǃ��-h�Qt���1����"���Eo��2K�n�B>@6�X=G�����Rf��f}��6C��<��o�'�G���q�։J�e�kC�}7Ƕ�a��1���1��1��-��4+f
�:O�l#�������
<�+xr
����d���8���rD�.�w-�
-�2k�9�s�9Y�޵��XE�N�f'�;VR+��	��8WY�\N�c��o5��R�T� #߯� ��"g�� ��~��m0�a�{�i	��g���XV�
�q��;��H�V"����/��4�gt6���覲���4�+���dg�dG�$~
->K�c�@�
Z�bK���I�~��hy�Y�E6�Vh��F��~
,	)��Y}E	���S�Q�iT]�I�Lk�i�S��;�,>�D�j+>�V�%��������%9��ib
"�6���N�&!�����ˀ�Xf�2e�z˪�c�U�9��9�Ty�:�;�Qޣe��JZV��2�V˼�
j�
Q��AE-��\R�rU!�u��9E�q�s
��m
o�hn��0��*��]7�t�
Ե�Ti�U)�C
�j��ꔴ��XS�ҤZ�n�i�cƄ��YE�y��
j0�*h|J���Tg�X>�E����:'?
'�n�݅=XK۳��|���ý49u�_;�-s)�(W�a��Q���V����+�TѦhEJg��ά�kpn��r��*�[yZ��srW^Ru�
pSngN5p�woc-u@[>C�
)�V���B.1W���ljtU(�r+R�W�:��긂��
-�����ܫ�uo���n�k�UsJ�5_���#9�ϫ�}��*�s:���Ļ�v|�O�A?t�
�bq�o&�F�xL
-y,j��+P[��Z��ޠ�M�y���u����7)��6U�>(g�9|'e�="���|��R�uޜ�p �-ĺ�V|e�:�^�$�Z���"��s��~�|�K�w���F�@�܁���rҪ
�d%��
�"#�O��	Y�_�%xQ��gT
xS� �J}NBw3��h�&h��ڡ�{�����P��a�\a���.UF|rFB����t�
�
�-:'kt�,�=2G�WY�!�D.�����5���Wi8�{��	�5سl�y��	�Cc�~��;7�zUS����r�
�cN1d�5�O��Qy|L��j��7�8�SE�c*����h�ct	��U���
-�9?�ހ�ڣس^�V>7C��Pǵ�Irag+Z
-e��ʖ�ʚpȒp���1�xi�E%ɔL��%�I$1ILY��(�	IpB'��P������o
�+h{��$�qh�~�\�r߅uc	�H��^"sʢ��!Sʩ%)�
-S
j���V�
`
����V�4NaRR�Rl�֝��Iّ�]hϠ�ņd���6h�3 /���/��<P�@�������M��M,�"ϰ�2�E�
�*���� &&C7�9ų�>LH/�S/9��t�5��H����u
��i࿏{�v�w�
�#�����A<��0��sqsc,��1�
|�rl7��mF1f#���+�>��i
�<>]��s��
����4�y%����lH*�P_���r�s�N0+8t&�ܧ�H�(�)^b���)<��v�;[�i[A�:A=A�8�m9d E������A����ĵ�$+"�o��<8����ߐ;�ݼ�l��dw���쒓�!� �SAn
-� G�@e"
-�JG�C�)��)R��Z��СPfl�ik�RA�Te�j�~���N��ξ�>���
���e`�.�ɐц��
?:񣛜���M�' �х��.;q
��+��\̎����
�
'���)'/a�����S�}��	0�Pc7�!g� 
��y�� ?QK9d���%�
.���� 5���u!�����}�0�kl����V���O)�^ތ6)��
�`�{`�5�=�0���XI}�Əu�a���K}���u\��kWr at n�zc�y�GY<�D^�%���-ći� �5�M�7�a��&X90��Os�� 6���&j��>괟d+�V곟Xl!y}K؟�6Sϟ����!�s=�U|R<�
�����/��hr�뭁H(!0�
XB��qa�C�*5�?�+8p�l�I�>�����|��	��L�}_c�uM;9`ͅ�9�����x7Z�}���� ��k
�-Ǹ(dD\,
�FN���
�?#'')�3q˥����|x���Cul���b����3׻�Z��>�W�]���y�D&�Qp
�$�
�U\0�!V�s��%���q���@�ϓ�s� ,QTg~)���!Ļ�<�jg�	۬������13 BM�� [
�I��> �����e�W�9�I���н�Fs�ƺFA}�p�C&k��@&0@>�r0
���u�-�y
s%�
��kT�m���r� � YWI���e����{1܏�-S׀�C���X�5�ȵ�G6(пјwU�H}�r���:~\e����������M�!
s?Σi�j��OZ��{���$U1�#�1J	]v[>�_���mpmu
}�)����'h��ЗQ*���
�8�fy
-��>��=��w��$��)
t��9Ïa|�$
���љ�Y�;�6�����f���_)������b�
�5خǶ��&b{�gb���x�
�O�)�5d��t;m�G/Q��'*;���������)p
��X��U�f{
&��wѺИ����P���n���.�N������Vjd
~����E�=�Kx�:\?דDt�O��`X	>��������-`��U�2��K��@	�+�\�g���Q�Q�����H/5�?����z
�OR��z��^N��l�߰�Ǩ��c~g��;h�$�
��i=��
��lYnl�	�W�P��:l7`{
�'�!��n��
-�n
_�%s�ŃtAz�����D��w�m��_P|�
�ت���]>�`�td��J�a���7�#u:��ID�Q��R-4�,M�GZYm�� �b�ÛV�͵�ǐy,�G���1�C,��E'9� '
�F;5:KQ���L����䥅�L�>��f2����H���6��l�����q�~+��9�3��=\�s
s���A�OǾ
�ٚ��5E^8BpD��J8j�����nV_����D�����*���P�#����
ĸ�c7|�8�V�3�p�w1���wG����6Q)pd‘G
n���Rx�੅�
�M؟Ld�4�H�R1è�:g(UW�^1DwA����ý��x���K�#>
6s���1�3:m���Ԑ`�ˀ)��𔰓��U
W
\�ᚈ�x�C����	v�~���nw��]�Al }����`��hi�`,�
Y̹��ß�I����)�&;U�����^U'�4$y��R�T�R����LPij���݊�.V8u��S_T(u�)G�9%�RQ�}��_��ι�_m�>�@�xV˻���JP�=Eՙ��a�2å�L��2�T�Y���rEm5�����W��EA{�������kߢ�^y��䶝U�����r
�F8����X�ʸ�
�HjF�Jޗ�O�����4�:���Vđ��,��Y�*�*U�� "�� �3�����X�|�W�F�\�~9���6> ��>`���b�:ɧ2��0ہZ��yVJ�)�7W�J�I*vf*��R��R�Y N@����9U*�!�k��]S���˵HN�Ze�^���+��쮳�
9�ALk�=�YH�I�;c �Q5�W�R���>
B��K�?/M�<�
-�*�ϗ'�'�;�<w�rݵr���LR�g�
�9<�e�l���2<?Q�������|�
lυk�1�
C@�"�S
�|�^PP�,w�My^C��\�������*�7T�o�
�f��3e��U�������Yɾ7��;�*�{G�ޘ
��� W�!��A
��yA������-��@��A��������
��-T��P��C-J
�ӆ�)1�B�&�a�a0�L
�bZ��N��0��uȣj~�@$�_@���u
ϝŃd�S��d�ʌ�*#�Uz$��H�R�ÔmTbt���(�"�I݉�À)��a���%�ى���>����A׃A��A���?L�
p�����ew�^�g���;���n�	�,$�$�\ T� ���
-����D��8V�^���Bq
�2��Z�N��6�#�2�Ң
��
��>��q���;���9����o��yn�'�[鐫�%g�+{ ]I�l%
-e
VP�!��d�"Z��� �"�8��<�<]��LpUq-��@�ԉh �ܛ_!�
-���c>
)�
$�Uc��֥�
&�S�a
-(��H�w#��)�<a�s2�9�C�>��q-���J��FP
��.�~1���͵�~L{�	��M�H��i�
4���
-J�G	l���l+@�5���c`��*�o�
>40E70�c�ۭ�
� +�W�/��p����dK��
,1!���a7���f�F3���bl����l
m�
��B&�xjG����؄��� �;@�� |�R�o.�����<���)��>
?:�c�m9�&'�4�^6O/����
��3�J��κ�s�ܺ�b��Cg\��o3@�j�i�y\g6��^g��8
���9�@/��}��o
��1DN��Q�C�b����wD�&�A�����z�kN#� 
�����-�:��Nc�nx
�_����`�=��'�d6���2�� !'#�FW�?���r&�e��R���
R�;㚅�ͬ���U�[�uv
~��&�v���6�IZF�
P�I
�`%XEn�E㮥>��yl�>7��
,f=F���5���\�3KT�h\��5����!��%�>��擤!s��`������1k���D���-
^[�c������s�X|��0��>��
�CMlFY}
�s
��$����A
�n–��Z�5d�||�X��`�5�?b
�ߝ%b���&&ϰo_`���a��M�<~���H{xy7����1��R�X���:�8{�WY����I��ň�%
@�#_&��A�%���WL����$��u��8�x�WX�Q>8B>�0uUJ
�&�^�p�Kd��|<a
�&iD�
-�ɷ��e
-�ׁ)Vޒ)V��p��˻�K4�w(�_��
���B�����S���4n;6Y��a�s����_����"����
xP�z^d�t�
-u
|L/�AN�Aù�#�����$^{Yz�<S�����U��)��� �[x30�I�PJ_e:F=��3��S��?)�(���G,�
�J�.���y�_� ?��`0���!ݴ�o4�-���2yV��0���~���o4���}6�{4���?��~�
���"~��:��8
��ܛ$�_���,�`x
pz��&C���k��*��2�����h�K�
����q�x��i�F��A�8E�8A�8��{?��'��i��~��y�X
ԟ�t��N�-�8xl������w�R:3�v�N����k��8Z���~
��^�i@�Gu>G�|Fw�UV�3�]����6�KD��_P�Lpo����Fp�*%���U~/N��
�)ڇ��GN���vSO����8��j�Q��v��85�mjd+~<L<��P6�A<�AT��N�ye�s
|
�+�E�ďX�`��8�M���Pei ����ZN˨�n
v���6�vh=5��Y�k��^�t�7V��VRy��0B���ږ�;
�K�[���Z�n��v���X0c�K{N9�.�v9+
b;B+m�v
vgSݴ�~�߁�T�Z�ڄWߣz�O弩��x@������j�X��l�f���a3�.|6@���b��rl5��]��m�*fc��J
�x�K��H��n2;���6�� s������tr��1��#�<*��]'�`;
db?�J,�~9���c�{���_Og���hgUmD����B�g��&�O���o��<O�2� :�w�E'�� '
�,8��(��� 
lF��v5�U�h7��2W�
-������t�0�P���q�5��;�@�H�1�q�(�N�{����Q@��S	�t��Ox��ZV1�j���TW��S��UE���_�m�^\[�Ɯ�$
-
�z�l��u��
�5�O}�
�8��!
d��
W!\��T���Fl��U"[�y�O���d��n�8����(G�F�>Ɵ9�D��!�Mǧ�)���;Lr+���j�OU�,U���*���.V_���ZUb�R�mP���*��Q��!�y7^��'�q~��&
��������>�@
��^�gU��cS�;Y))*wzT�0Tj���b{��
�*tT�(�Ѭ<g�r���q+˹Z����xJ~�!���ȗ|
�qm��2�˻�[�
�U�2�O%�${
*v�T����S�+Ky�<Mu�(�]�
wX��&ez:���W�gX>�j�-J���sH
�O�U�/�Zl���(����
"�Tr�
��O��%*�HV^�SSS����I�++5W����0*�7B�MJ3:e�K�1V�ml��xRS���4N�a\�ɑJ���b��1ǐ'� �A9�J@!���%7=A9�$e����(����ϗ���P&#}�����cr����?��8ʫ
-�o6��$�,��fw��I6�l~vIHBH�&@�J$
-�$�AkJJ�J��RZ�j���X��ZdZQ���t:0�V

�v�ږa�V;������0/��۽�=��s�}�o�
-|��ӷCy�d�}K���e+��
�{�y�3�����݌�s�lP⼫����`�M�2�|ey��*����
(!�Uh�+ت�`���>9�ò7��RN-�F
 �����6`|K�Zi�
-�����|A|�l�r�
:�)w�
r�(4K�P�
-�Q~�R�pB�p���N�ˆ�
/B׏܆hD��Ѳ!|���PN�c%|�a�#h�p���JF�0ߕ�K�<G�r�����rG�*��TP�V
���+�*��X
瓀�-� �c

-�-�[�� �1��!ʜ�ޅ���J� �x��]��%�oʀ�gO�&w�]E�<T�/��Ɠ-�Z�MT��D+`�J00%F �Q������(b
��'�h
|},늑���]�/���?���<�w�}Qܦ�Z�
u4�zX�;{�S$6ł:>ż�bxLq㤸S���n~ǐ�� Ѐ
(������%�������
�]%\a8��g��|�JH�l��H�Oq�4d�i

��X��6�5������|Ն�oexhE��0W�!��Д� ./�n{
y೎����Y|<���
�
��sc�Zl�ŏv��0�
��:r�� ��E�E��0��&���u���٦�0k�@3�������nI�k�%���e���
o!�y��a|��Hs�v��B�������!'K�A#KY�d>`�]�*Y� �� Ճr\t�u��L-�1G��l��k�� �Kx_
o��8I/9kA��!�h.\���c������ <�FV�x%�X�P�b����1����4"�sq}F
(�vx��g�U����m��xm�7�%��g�#rVZ���5�d
�c?��%DN�)�q63���c=
-qŴ���yּ#
3��6\��/5��������Q��
������%��,�iD e�	��$~l�6���[)��l&`�,�4�o�!��$>��2ꄯ����MS���~��w9Xeqrđ���&�f�������Nj�n��
�q/���X�6�,���a���o���������=puV?�&�k���y��G�C&g�
���3�d��L(9!�Qj� g�����ky?ۇ�G>-}����)��w�žk)�
-��!��#������6ko,c\Ɋ���A�(���f��C�~
��
�y�Cv��
&��ړ��{OK߹�F�*J������y�W��=烀%���
��qe�#3�p�H���\�΀���j�<9y��{�@�&�/|N:��gT
��"b�c�|'�k���u��4���
J��g-�_�-�_�_�߃?���[�m��rr��z��{ҿ��r��
GQ
-�-�@�t���%��"}�v�̨N�|S�
t�LF�8$P��3�\�P�E��M /3y^b}���"��3ɹ�#LV��9�����2l+C
-3l3�ԑ���)e�X��%�x?��<�>j�*��
-
-�-t��L4���&��qX�sh^�x_�xO�Nj�qJ�tR{�
L�(�������P��&˽�v�+p^�Z!��3��N�e�8�
q�Y�
�������S�q��u���
��s�a��(�C��2������M�~�]��
-�{mf�{�L��m�5��:'�`6�?�)�
=�|w��|_APŎ��L�籟.���L��i$_�y=B�z?
"
�k��z��DZ}���p_!B<DK�M`�2:~b��9^_�����#n����r�GL_�����Y��^.�=4����.r��ى;��v��
o'3��x��ll�y���`<g�����u͑�v�
*�49���9�T�
?n#/[��ne���
t����Lh�l�
-
�F����n$'�Dh�
�R-며���U`
���V�f�&�&L{����s(!lǰ]��v[a�`���^L��S
��7
-�U;M�ܧ�,����~x?
�,<f�ﲸ�U`�s%�v��X
S����jjcX~l��?�����m�nQ����p������J���U���=ŵ�[�}m�t��ڿ�
-6Z��0�jT�ql�A!vݠ�g?�#�����o�^vP�}Tʠ��N��AV�QQ��f�^�\N�\��Z]g���u�JËꘑ*F:t��J�3Қ�p�c?���R�l�B��M���fb���fsR0���$�<�7Af�����5��e%�"���H'#ݸ�� �(�'O�jl�c�I�xӀ��D���&�l-Y�����8K5��t�8��&\+7����c��H���T�û�H�>%��}'�]�
J�)��
�(<5�k�n
����t���b��#BŅ9!:N���w����p����CȎn��$���|_�)n�S�V��"xf���O�*x�l�y��x��H�%k7�
x�x�S�spd�;�I쯇o9r��8+�[@
-ԁ8�c�ҕ�h�C��|E�\
-;��{��Tn���������6�ٻ���4wX�܍*ɝ���yyr
��g�E�o����/��(�3�?�d�o�%3���$$`BH@���
��U��d���(Q�"��EED
-TP�M(�Ȗ��-��Z�"��"K��w�;=����
�4�s3_���s��g�}���ߖ6�(M@�rA�k&�Ь��%�vJ��^	;��
K���g�M@��	ú�Z|�
�u�9I<�9�v,�}��l�+팸�	O8:�C�_
�mk��<�b���$�J��.!�)A�-A�&�.~OHtO���H�ZsѴ��Ѫŭ�$N�V
��i�%M["V��x��sR��ܢ�x:�{u�>4� �gq�YBz�t��}N�}.ѽ
�z���D�Eģg�q�%��+ġ��~���Ţ��N��y}d8/a�Kb�rg��
�*bNE�} 
-A
�3A
���"�M�~��K��[4�[<~M�����
���[���[�%�V�A�[���r�Nj�?�����]༆��e�y |�1�G@(h�`�*��]�S�@�K�!M��>���b
G��s��)4
N��_�(|  �SC���,u%�7

�$��ђ4���ų
��`�6уv�-dw�C�a�آ
�ļb�1a1������1NS�aȤϋ� ��8!5F � -E�Sw'�:�{U�!�<�\>�y���0
���?�*>���⎤�3�&��C̙
"�,�\&57��K?�GӚ�
-�4J�C96g! -dSCI23!�rm�3��A��{�Z"���% �I�
��cfqdZ$-�*�
�<�|6xcw!^"�0�Å�("�q��k�N�Ƥ��5�!96"M�%�3��
C�s��o��#�:���2���������4�s�4�/���
�%���RLZ�Jk���M[����f���
-�ESjh���rٓ���\�gRG���������B
�%�xP�EWjI],-��V�I^T0�
��G����FZќ^IRkA#VN�,c.�'�Z�ϕ���W�:���g/�\��h��L1�$�i�RU�kku�RG[�bNڱ���E��AΚh˺���ن�TI�n}Rɻ�@S��3$�(����
�4�[f\��"��	h	/\4����D
�SGw��Ά�݊��+yލC�F�3��gD�v6gT��T� ��a[>u��
���������4UF��h���F��4�B@?�h�I|
b�aX_���Mb���H��������t��%�0>���B���S�
�.���z$�f*|ըj�@8�:F�F�0'�YP�y�H�`�pΪ����4���M
LH9:K��F�f���������� ��T{|���j��H���h#O S�4pu�d��d��������q'�q�m*i~R����R��B�7��
೛%l�jۛ
�Z�o�����Iq�@>CRM�}�jP�~D&�%�x������8�(���D�笚�|�9*Ŭ��v��h֘Ws/�w��QqN2��,����AI5F���(�SB�)RV�$��M����׍l�ux��U�y���d�.�/���(ǘn+��Д�<�np�5�K:ٔ� +�s�jU���dӨ��ݒjb��+�1'X�o#�M�����c[�:���>�ЬB�݆��j>��׍l[
�����{
T��3�8؂r�99��<��c��Bv�OU����d���
N�[����`(
���Y9�y�
-6izEq���e-Z^Yq�խ�暶U��_WݱS��v���7��٫w����8�v�C�
1r��1�7~¤�Sn�c�o��5�{gκo��s~?��.x�?.|��EO<�䩥˖�xz�3ϮZ��
k^Z�~�Ɨ7�y��m�n߱s�������[{���o����{�>��O���g���𑯎~����}���Ϝ=�ϟ.\J���������J�]I��YW��Q��dg+��/R�K��r��R�+��k��A��ݔ7)
nƃe�-ʅ��p��a�2b"NLUV܉w+3~�ܘ�
P~<�
y
G+K��<��+/b�:��&e�+8�f���M�y[�sP��>�|�
�
��T}�<:�I?(��)�.^J�
>�\ͻ%�~����_�_b2���lv�����ǣa�O���
�G8�#1<�\�|��LҚ�7?3'�
�t뮶;�f���[��m��q&O�6}ƽ�fϝ7��
[�x��e+��.j��[�ȤƟILiL�T*��N���h��j�~��o����'�G�~8��3gϞ;w
�?]�p�����ƶ��e����hbm���֮-;zW_�5����a��
3�Ж�����j�꩛����sӲ��Z�d���O���G.
54��PCC

54��PCC
�w
+����u
%^��]��/��9���	_ԏ�����-~k���w���e�
����ܝ�V�����O��Ѣ'�~�H�PG
�VF��ծ�=��Ͽ1���}C&|�w�w��>����/n{y�
/Mٵz�
o.���Ѳ{�_�d�'��װ�6R�k]�/�޳�̾�����{t�t� p|g��v�zf��fg�i;f��i�����N���д2/A� oF)�TLP.�� �
E�["-�����)'-�߶g�/������y�ޘᎀ�N"_�
-)�U�k�a�"a�>W�~�ՓĢ��
�?J!���&�v�e��zz���c��-̣>�$CkS�F��kCe\	��)�j3J�-)|��ʉ鱶
d(;���nZ���s�����>w�'C71}f�Dm<W�,�Q��d�uY�կ���b
�Oi�6 �
|� :���n\h���[��S��<Fǯ���%��wE:��!D|�%K���Xu���#	���?�װ
-�����}��~ϴ��v|�ʵ����M��4Yg`&_�`3�Ȓ;
-TEr-ZF�b��J�_
��6P���@ ��]T�n�m��=1�l3<q�Z��'J��7V�
�`��tH.]�*��G�S�¤�j|
VJ�[(�
�{V��5o�'���92z��ᴫ{˔�z؇"�
�����ȂD
��A��ز�z|9ZN��6P
-J!C��ճ�'׏���:ڴ�^tSM_C�Ƽ������
Dz�1$���$7��M��0-���,�6P���XP
�j���w摳�Z_8�l|�rE:��Nxc�����~T*�� v�2pFB6����Ŵ6 ޲
�v�eF`����5m�gw��8�Ȁ�Œ9�[y�ވ���X��DBGG<����3))���若[�زl^��ў=��Ǐ�SϞ�)v�����{7w�o��8�2�
-���bpO�8�">����X4	>J��6 ���3��O;F�.��
�^�h���
���W��}�F�]�υ�
-{��E����"�f(��/c�`�4���Ѭ����7�h�^!}w�>8�5��K�h�ʙH��AΡ �5�.-F\
|�{Gq�{���im=�/���Z��t��Up��
pdK*8�+��#�K����D0��
-�3� {���� ��7���1�7���@���A�����o���Pa��.
57�d0�~D�K2qH9�y���BCO�mHLU��1tՔl���2�"8���dX2,�
K�%��e(�
%6@d�u=
-�ם�����j����^A���\�ˎ�*����$�,!��2.�K
���Gv[��=����ZP
-$�A�=]����+�#��zw�^
�X�aF�*�b��Z*SR�D	�&^\��
��4��h`C�͏@v~'��x�<\�վ���A�G��i]8�^@(W�I��<�}I�X�A�-ed�YÍ�DV���a(�
e������
��Z�g:8�QCHz�,��I^���P�Q�%�x��I�-��0�2����,탡 2Ad��
j����k.s�[�g-���H�Q���$Xi}y�J&��E|���N�e2��
�@ZF��� ����O�
�A�F�#
zw��/؄9Ќ��ވ��0RYe�J($�9J;�C��`�M􂜇����}0� ��P��/69������&�I��l���됼:y���*LYT~?W at l�ͥt%��SY��Bf���a�C�*�Pn�;�ӑ��W�_�ހ��}��]���M��*��'�(�b��N)�%�O2�qbzȅ)}���^K���g
X
$'��mo
N�_u_q�
�

y�[�r=�P�"fU��dV���p
���=!�:qܴ.K�``�ZJ ������s�^�9
z�����5��-���&i	*ઑ�9u(I�#O���bD
QHnƖP
��VKE��2�j���Vwn���
'�\
G&���Ǽ����Բ֠�m0�NJ�\���ɰu�U���H
Z
�
%4Y�@�"� ��5P
��o�g�1i�p`䉳���ߦq/�����g����(M�Eɱ��Z�,��T"�V $�K�M� 2T��jA}��)���Ï
���9;g/�(��Ė>������Ȝ�f+Z��5�b�� 
m ����@9��� 2v~	j����l��̆�q���'G��%���7B�#~�̇��ސ��t&�
�n�磛#X���B�.�
��x��ю?�S�]1a<�u��톖)����/�W/�z�fn��N�cSG��q�(j�9,	ߏO
�%���Ɍ����j��1!��@��πt�/��,7�]i��u�䁇a\ŎU�q\�3:Z��:.g�
-8g��:
-ElA��,DBHHB�@¾�- 	�@�%1,	{ 	�E���"
-ZD���|���>^�‹��w���>��L�p�P
8:H��"���O�l at H�4�@D E> E�ߧ���h
�x
3�{
=�p��~�@��bI��b����)���y���`o%��6������5~)�
-}
�Oz
t�Gr(�
�y�������_
x�	�{�L|�@�m�T������+5s7*��N�
ȁ3GR�]
x��څ���)�
�|9x��^d\	\dy��b��.pP��d��m�k����k���m_� ��"8��'�q��*�����)�c {&��B��?P�|��5
-b�} ���\����hX�L3���5��j1|����%��/h`�?
�b��!4�
��У( 
���^@9�	�S��a��6������
���r��
��%'����P�b
5��A
�(�=�)|F����I�S|F�!�'����AcI�n#V���4j�Bkn



�{C.b�E
����aԞ���=�����a�g*"��t�
V�P*GhHL���f)��sU�Q�͚H��%����P�Y����~5�[y�6���V�!�zgkhpw��K

-L�y}\DM�3
�3�]W�����dk�i�jJ���$��#d=U$y��A�����
-�7B��-P����%P��_6�`
ׅ3�$����}N��+5A�IL�6�2�U�<C��TE.3�Q*{�Y���3�7 at 9b���*���� �>���`�#%�yWF�SE�
E[V\Ks2�[��nh`�Ա�Cb�x��.�
蕽�|Đ�
-Cű-����N�����V��>ߊ�=j���Vy&	����ޠ�e����=�����<S%�tX+�gJ�y�R���3!鱿A
bhv������W<���Z,�2<�_
)�*��4��6%��S�K3J2x&a�`8?A8�ͮ��bK
��� �� ���
1�8ZA�E�7]^
s�������̈́<c]DU���T�1��v�$?�P��
�g�G�S��Ӹ�i\���~1 �b�?Cbh��
4�Vo;/�/�<=��������h����JMm��^��V
-�z�E\� ����N�^禗p�$Fs���
%�A���A�h�SϷ�
zO��}�
��G���-��rc���)���.&xũ��œ�B��W>�ή0�ۯ��k@��G�
-*���h�����\���̰O����^LA�� m��(U�4�2fw���O'p���xa�0��|�YPa47(�t%��1� ��Ο;�
\0^��
vw���
vgԟ�g
�oB����� l�����;�e�^��cdUd���
���~�Pb07(��Pf�
G?���^��;87�rz����ĸ~�_|�)8Wх�����5�S����S���r�I���Td������C!b�@
��As�/��<�q�v����q���XMCA�R
F���ӯT�bkt-�#���sU���V%�U�}8Y���@������@yd���;f���ј���/�
Oy`��Q\Gg��Cٝ8	��P�&*)��&b�W�l
�M�@�fv��
#b�\MG6��l�O���?����w3.�}��CU(��&:����҇+au*�mDYD+�6��Z�Q�(��������~ʌ&s��P��cP|��M��
3�[�ǿ�3������E͋KA�IT�`

�9�IK0�s�
��^R��
��E��`J��2_m�
�M�67n����Ձ�/t�]w����I�}�Y�S����Խt�N��xh*w
ǼIH��
�N
�d�
�r0�� #��oH,B�S�}���ĈA���7��ar�����>�=s�߼t�D�[g���n�y�QA��A�$�L�N�'3	c�8�
FB�m}����.)u#=�g4��b�4~n�o�����U��c[������Q8�� ܾMYBy�͇�f�BHOI8�t�8�:K
-���
|�H�{�
��Ƞ�Ld�
T�}ū���o�ݸ\7�gMӫ�[e`��
��G�p=���ϡn��O�"��@E�d���Y�s�@�\4�yj��lf��lV����/�o��.�=ٴB�j�:
�*����n��%}�
���l��Nmg[������S�e���JK��n�/T^�����P@QQQ@@PA/]�,�Yi��n��m����������������y�Rؽ�
-��e��[
-���C�>
�yE@��)H;����a���#�s���sE�fK��ϖ��?��,���?_�V3|�~l����EfA��x8䌃���X�H��?B�� ���r��
_(�{
J��h3[��^^0_�S
�3`��
p^A�����kO����� �o� �t�7�$磐����dm���Ð��А
-P�+����6/�
-�f��^

G�p��1~��)��$�T1�|�RB���.���玦�T�M��
I����千�����.Yo�A��7�7�7��SC�kCɦ��C
��?��#4
w��PO���?�N���fo0��qZ�bNY��Ln���~(�VbOKm�k�Ze�u��8�M�B
̵����Օ�?��?��#Ȏ��,�kN�D�s�:#�:'�>V\�9Oe�
���t�̚R�2'��L�掞8�N��h�mנ镡1�!?mb#�~GP
qEfV

�	7UO$��K.�R+��
�\f�9�\cL��u%�u��M�Xy�
ߪoNhkG�W���F
5�A�k(�9���ԁ������Z��$)9��3�Ε���4��R���f�i��Nb]�6��*M�Z�I�nAӉ�W�2���v	�-�&Ġڷ
���6 �[�ɐiuL�
Ye�>�3��YK����@e����6r�U���/"4�
S�jb�
M�C
b�"5b�@
�����Ї�IUB�EI*w�:S�W���.+Է�[i�>9E�ߔ+�U�K�r7Se@p^*6���A��3�x��!�Y��!,�!*y�-�vAN��E�M&A���Cӫ�
���c��uԆnv��C���$e�^X_/.bm[rĠ������yb

�g� \����)�ƴ&}
I��Q�RV�������m��z;��hg���y�n4�6,
bhغ
;WB;b�>���t��
v�/��KWt�:A`jNm��g��\}CE���Ŵ�6N��Π7Ҥ}�4E��
1�1��1t"���/,�1��Aa��O�\4Fٴ�C
A���J�d��2�ȫ(��8
�Um�3��R
�HaD���� ذ$[��n+A�����?�
��
-
��cSΙ#
ͺ��vU�D֜�Zא��
)F�������/�
-(�F;�Lj!����
-14!��
-�r�f���ס�^w�������
Y���]1|�6�Q�HUU5gv�Ź=�uts��ԚSͳe׈2xRKFE�MP�8��1H�| Z�Og��k��1�
���5�zq4�`��.����dz�X�FPV(3�Kd��&Z/��a�s��b��P+�K�V���P��B���
�CǎOf�{�~4�������]=|�RP���IZ�-��`��
I-����|M�����)�z�圾�Ђ���x��M�E
�������os�
?�߻���Io���cA�����?c)ґ��]�쉗RtI��ZbA�e��򺣕E�HE�)B)2��*�����A��W�8/�1�����/o\��
#�=�s# �ǒ�F#�l{t%�/N�Փ %�	ʸ�tM���~����a�B4|}���M�G
�5
��qtl^��������4��4r�a������8���((>��
���'	�)
1�tIDIz��*5+�
��@}������;�X�p�gӻ�G\�^��k��m'�#����!_ٴ_D�TXr��R,-s4�A8K`��qq�Y��9UX[~M���6�®���QU�A��۠]��t�w
�\����ԮU�G��g<��<?x���_(�>6�`**9{".#u<��p�H��,���\x��;Jg��g�������h���j��_9L��q���4�ku�˽N�s�w��y(��ϗ��dyI���K���;�N��$�'s�OM�g�]/�
-��$^���y9h�:�жr�����L~�`�v�@���
	��( W6x���ϛ<{�q&: �YBH�Tl��������)�؇������Kc�����ǣ	����ڻt��K�_gaM�YǙ�q�ZG�u��ֺUjQ���V�n�����,�!�
�Bd!
K �,d�D��PZ��q�:Z�Z��g~�y�:��E/�����7\�ߙ���}E;�Y+ /W
��
-��C�A"��f�?�O� /8�עг�����V�:�sMx�
#��L]d�ƨ��ӯӌy����.��Z����rp_��O�F�����6
ߙ
a����^��
�c��P4�
���#�@94�p`���X(�^��<��|ͳ��º�<ض�
�J�smxoƒ�k��B��i�팄�Á���}��C��3Ȟ�P�'�{���$���N}�s]�����
-����݅T��f���
�V���;�pd}l
������I�m
�t����?�n;$T�Ǡ�C? ��E}����e� {,��k
�|7�(���^������^���B�|X�λ_�+�'QTy��Zs'��1��]�%��~"��0�����]�_��,p��
��/
��P�X���� � �/��O '7�'fi�w�Ԭ�u�Ӆܲ)���5��6����2]ɞH�iO���Jq>�
7
'8��́j�');�m{��k���&h
�ho'��'D�X_���A!NW1K�)��L��Y���[�Ff��Z��y
on��: L
��㆚�
��P�
5ۗ@��+ at t� =�	�
 �򆶤�YIV�S~AƷ��ST*e�\W;^��^'��c���F�:�/����n΢���w���t����@s[\d� ���FP�� E�t$�H3�>�eOs�J�0)�/(��k�
�h�@>�Ӭ
�n�
f��v��hN1�{�����vg�o�'���h9��_

��
��>�u6�EgZ�cin�=aq�W�u7h4�(�N~	=�"���l'h0SF�I7��21MG�M�l/
4d`��B�
mȠ8�4'<@s�gV
��;5�Q�9�Ts�
ny�����*�r��Q�(����FR�iھ�,
&#�{Zs�Jg�K�|�ݶ�� ۷��6@����|ftgB��&'=Te���H�[��H}�����U��{˚���6���˪���Zs�}�I/��S9�K
�� ��'h߷
-T7�����P���1!O
I��=��;s�c��Pc��ƪQ���m%�WY.��(�I���M���7����ـ������� A�d�
|L��g����GX"nJ�Vx�+�9�J�%rS}�Z�d5
LV%��TH��d���Hm�/6��%���^��A�fdP�]	=��{�}���-*�[[|�
SJј*�9(#6a�"��[�R��)����|����Υt9Xe*�\of�{{���8
�o@��eЅ
��փ�o�s{����Ȑ選�	
WtE�����i2�ȕMe*ic�A�fa<&�ZO��ki
*��QC���P�:g�Zd`"�<�A72�����`���/F�L]8�|ÖT4dHc`JB�FF��%%*��R�md`l�ʨ�k��JF��L�a4����g�!���MP��
�}ޝ��n���I�#���\�I��H(t�S�M�@� �Z�E�<	Y_'����lkW�On�:JT��
KI�I�lP�
,d�.92h��0�u/}ݾ
�t�ZX���i�������ڐ���s�M�J��LGk�6WJX}�"��P�b���y�

�Ѥw6�[�� ܺ:����y{�����G�=�~b��xH��kQI��q�F�ډ�s�B+GC�+K��U�b9#���2�� Sڲ�uAd�;������ ޺�ܗ�����<r�uz�������D��X��bbu��ȳd53MĎJ}��X[��S�L�P�-i�.
^�7���:g�zd�C����z��_-��?
�Zs���-w��yޘ
-
�0
o�C츚P%��R_;�!���Ȋ�]D
Y��K���lC��ɔh����$-�q6ଜ���@�e>�/zn߽����ʯ'm�y����t����Sq��ф������̚�t^����s��4{�g%w��Q5g,lm�E����ڬJg�d୛
����m������
?����g��z�������݋N��P��*��|3�I;��
!	R��ʼnC䖸
5m��ke��y����_goM�i
�#֊NǺ_��ъ�b�Z�Ԋ"�(�	D�	K�!
ـ� !!�@BB� 	���"ua��(nXQ���HU��^���h�?������ܿʪ�
�@������-g���{��~��o�٦�w7�i��aݯ�'�^�	E�Q��G����	���T
�Y���̂ȟ�Ea|1��Hx]&�����]�-E�"͚�`^?�e��ܡ�����aWtL
�m�qu�~���)~�?�;I �_�)�O�Ԅ��i�_hY�=�A.3���+�ݑq�+r�nW���-�n����/��^2���禰� [...]
-z*��)S��hS��es��
s��
-�����)[+�,vU%8Z��y�p�s�� 
�T z��;v6ُ�.3 �-#0l�
�&��.	���.

x�
���D�
���ꞏ�|c��es`�"5�^Y{�����JO�D�'"�E�5
2p!�8��� �;B� 
���q(���7�n���\���v{>F+,U�y�v.��5�ก
-.�I�-
-v�A��@��Dl ��
������8p
}!���������:
�.uXb��,15���(`ռb�Yȅ�K2��U�w
�ׇ���	���_ �yC�7^���R����
@�qX;� o�;�w
��]8�|�6s�\��F����V[�a��4��,�/� ��A��qp[��k=��;�\��ȯ� f�+�7�@��!H��26:C6�� pm� �m��l
��O �+8{��q�\ׁ��D!�P at r��ԣ�a��g
-B�dI�R��&�ԉ�q���MYϢ�hc�.Ɠ�ޜG��{a�87Ns���o��5d�X�݋�`�J#�o;���A�
��c�c�x�⇿��L��N�HV�<O��xF����62G��F���_��#��yCaC���[yh�����}!��D?�١u ���� ��(�� ���K�d&�̒�=KU�
'U�
Qjx#$�~�Yx/����h0�_|%|@t)� M�F
Ld�0�-�/$�m/��ߠ��	,�#]@��N����4��<����r�Uſ�P]8Ln�"�e�1]�}�}}���I;�"41� �7VP��
���@
�v���2���~o�i�E9�����ќ"΃,�`8U)
J�*�A�W
�Z��1]���
U]�K���WN�c�K�����j"�p��k����~X�
u{_��F�L�UB��	s#��0]"
L//�j��(��+$��7���
�S�ӭm"]V�Weh.�/X�m�kg❟A�/*����vPs
 [...]
g�
F3�Lc
�L�.�S�I�TS���<��F
|d�Hw�*��@��4 �7v���l�

�%�=T'�eY«�,��<���%�n���5g�
��ڦ���fmR[��z�A�ҭ-K�U��A�i�"��2�=��n�gM^�iS n�)<�q},��&�q�,]xQ̐ux*3�@gd����
-cuvu�&�ѤHom9�v�(�8_-ͼ�B�"ΆyP�����a)�!�f���Z=
��p㭡��є:
-�2E�)˖���*�����kX�F%��Tƨo�����3M"ZWM�M���,�����S(C
U�K������i����s�����໦���z2���*h�gʌ���0O��֗��e�
-��]k�[�F[� ���TN�M��A��Ag�����6W�鮣�//
w��
�ER�
$zGu��Y�.�-��*�\]Y���D i,�W��y:3?����i5�
z
�[�&����1T oe���м���g]l^u����m�;8h�=���Co��?�P�"ՖgW����K$��BQq#�Pn�	�f�����[����
~�Mx�Ab3Ԉ�n�����m�����#�Ǯ����

��F�4i�
-_���(�J���'�u���q<,2��Z�VP�\Q�JUd�}�=�5@ !a	;�D�HD���Ȏ������
V�X�� Et�>󞞹'�s1����{�����.b�X�ܛ�|�mz^y3-��9���D�^鮒d 
L���4T ���~����m��8d{�嘳�����@�_h[;�V'�(�����PJ�I��ki�)%�F��'�\��WT��on��u���wWI���e����U'���z���+�fjo�l���
/���c�}I�����6K ���m�+Ψ�U\�f\�V�����nF����e�o����ÅwE��*I���> ���fh:��֥��ݰ��˧֚�.����n�&���(���������袔[������1��Z�(�>D$h
��$���k��+{*%��KGu������S[��o�{d�<5mq|셽q�������j�?�?�gpzB9��(
��R
�F/oeV[�׃����Z�E�-M���]5���rI@�.i��'
�7��crk]:�_��Sz��p�؜�����q봋s��d
�

����2h�D��
���Ӌ�����>n�_��ҧ��ʫW\���[��1(�\Ax*�P�&
��e��~�Qa�ў���w��5�rr,��`
����)||�dh2e"� [...]
�֭]�,[����y���
-�)u�߃����
�'/RBHo�ƒ�H��g�����y��Q0��	��
-��L=��E�D��]
-D�I��(�
>݂�]�+��Q�[�W���_M��[�f��1��-���c�C\ÿDa��)��5:6`5��������\��,��+���E$�Eq�$���r�V���7�z߂jZ�'W
�ۄpN%�4X`�E�3@D�߅P Y �&(�����
�N��v��
�/���W�m�����
��FI,�ˣF���9"�/*J��~����
�?���*\8

�'C��|�� X
d}�5��1RL܁i��
��k�|s'Z8B����$1�"��۳	u�
��od����8��:;��r8�
 ���8
�����DC��+D�8C��N@;�)�/S�
�~����l��
�ZC�D�ݑA5�"�*{&#U�d8p@>�3Nl
�]80��
�{�`����
��
��m��a
�CVs��X@�s`
5�Qd�
3��c&�?.��n)T�C*בֿ��$��\�)��/�]���
N`��,w[���V6/S�W1���F@�g��
 JU�T�C��
����4��$��"1�� Bg
$�*A��H�P�
'
`�jAj�9H�7Z�
$d;A,
Q�^��j�C�>�Ak�6�*���8��$l�(|�g�<�59��jC�o�_j at nE��
Dio�K�� ���0W�,
`{k���X3�_�*��y���B��J�Z���J�EZ	n
���$/F.�D��>���y
;�5?�5�H�oC�IH>�,�
�1S��d{jC�<��, 5���uj
�S� h5�<��:y)�!j���@�Ky4@��ݿ4��$i�g�>�3M��M�$"
q������:��y�;�*C���a���Ӈ,���.1ҽ?'q��L�.�\�|Q�&����$NzE�s�eP�
�O����N��M%��O_�P��@<Ґ�� ��ֻ��<e��h@!Z��
�jY�u&�o5�C\�D.�S^GU$ͅ�`̐n1���������p��=����p��
�S�����4\:� ���9�
x�� �V��a
��d���Yˤ~Hg�/$���'�g�K�'�d=
i�N��%

���t=�n�?e5&S74�!i��
�HC
�������J
�9�@��ї����^�\Z�;=z���4C�1���O#�
-
��
FI�%��>aOЀ�~��9x,�&i<��4��А͛�l��G6�8<d��2K��^�QM�k �CE�u�:N�U�b�{ӪnE�D at .K��� !lH0B�L�ɞ
A�a����V��b9�*x�Z�����{��������s���?Ua^��W�^�S/OU�&=/����ԇDs(KPٗ.w����F�%���vB��1���.i�o�
3�)��� 	i�C�[���s1����ZО�̞��7�̯����Œ��L"i��J�'3؝�\A{�D�JP�[𵪦�uC�Uc�u)t��"��V�����o���Y
dϒ
\��k�p�����yW��icvR�5.M�ss
-�d��V¾[�6�
���ʺL��:�֐a�)�V���+�f�ę�L{�j�GJ6;o�
T
X
-ڣ����ƹ��o.yM�G`��bF)���B+�Do�S9&j����+3%*M�F�̹��g��E�� �[���W�>`��H�7K� ��
-�A��Nm��ta�Ls��)
���J�M���
-����
-
-���.�QY2%Y��")u"b����b����]
-q@�$�8�@��50���E�ڿ�����p�����������0̿b�����v9��Y�C���u�7D��r��V��,��8d��I6����Rr���<ĵ�H	i(ߴ ����׵G>��trÛV�
/,أO[C0L��]5���SI
��=��V��
E�
���fKt
��XBk����US�
j�OL�~Wi�_
����	鶅���	�^9k>���=�퓝�#�ۃ�͑Q��q�Mz
�ZA(VI�Xb>Y���ʙ,uIr-
��Rz����V]@�j
-齒B� �
� 
dW'`#g!��
ƽ���ß�o=��Uǹ���C;�|{Z#"[o]M��I��j��RE6�')�
oTWV�(
���V�X5�
֝�
�U�[�+�+����h(��\�A��j��|l>��m��/^�����7��K>���fs,�ؐ�'�N��YJdXʮK��2_��f	dz��h�
�F<ߪ!�z��A�=P�4��;A%r�@��Esw�]���k��ЙM?
_p��8�#,��-:Ym��+j�QY��ņ<
YK���
G�*�h�ez}��I�$�jp�^i�x�o\GJ�9���t[�i��v�O��=W�{����y��{7����Q�UmqY��d
-݄/�4�s�
-��b)��R$Ī8�V}�pKs�ة����U��� u_8�t�#Tov��������4�t���_�����6�=s�
�ꋈ�w]�`X
��Ҋs�dU������4a|S�$�$�E���#L���M����aT��
�!
LdN)�σ�M�~k�������c��K�_o}vvo�8�~,�x8<�⻘4j��������̒�by��Ɖ�_Qy�"�Z4���`k�0�m�z{�i��4����hހ������&ǁ���qܵy����	����9O�"n|�@
�F ���'gR�> ݈����6fY�M\d�2m&V�p73pp�,�g�n�W�A����8���vx2�
5���������c�/O�O����p�>D�962{"1>m"
��S^��gEYQ���ϸĐ�҂����z���6
-v|��y�l��@�j��G�r��
j`b�C����o�+
o=]�ޜ�����������3a�93W�g�C��3"㧉1��Ը��k�xI!/���)uJ�Tm��
s�E7
��C����j?E�X�z���f��?l^��s_)�����;��x����ً
ٳa'�f��K�����f`cf����K��ʂCgy!�$a�~W��������}g��{�e(]P�������;#
Q7��l����a��
-8��
-�����`�� ��x����d�( ��
y�B�r&�g���
����p�>����;~�`���}
���j�uB���R�*G!lu)���)�6<ק�i�x��
A;/CԞPH�
i� �=H����1�=�
bPz\ �Qoh�<-^���(��e��CUM-t��Z':�-"��%�,���X8�.
λ��� ی��-~����^��m灴�
\�qJw�֮� �ud�O�~�q���|�2�P�G(
��a�c>lpN��������j2[�Ke��8v
GEłH


"
��
BH)$$��{$!�H�*(( �X����.l�"(�3���{��9W�?p.���Y{�o���fF���0��
��� dI 
_���} ��R����b/�Wx"x�W���]�^�
�<�������|�s�8ųq��0}<
�N��b�8��!��
���cV x}�
s���<O86o7���	(G�s��
���
�
]��p0n�".��K'@22'0.@t��gC���:���u��m�t�vHzI��π/9ت#��;
-��
���!�:��	��.��񑈾�7შ���Q���l���uXk��@q������ 8���
�
2�.��y ���?M� ���*� {&0
a���5�5�sL�CTW�H䓘�����㞇
������R�L 
��� ��S��18�
@p�	����I�
-,�.`f�@�� ��h
����1\M�פ���ċ�_�ſ�mC�Dwaޠz����{�q"�&ޏF���
qH�� �-S��c�9����C�A�
8�=�����0�냁��obI�������u�1M��諸��6›�.b?�)�'��|?�UjG���o�� ��	���
�?N���S��}H�
A��	��� �uA�^�0�Kpt���Jˋ�B.B$T`��Τ���HN���&��6s�ރz��:��hG
��F�&\���ȈqHC�Y6қ"�� �tu�h�6�2�
���@@�e��	�̒G}��ߥ�G���?�մ7���W�-�����1��ۨǼ�Q����}���W䋱�D[��a�=����<�S@�6�{��9�n ]���
-����|����W�(�m���j��$2_�+�ϒj�=�
��7ewb�ʯ�t�[bs��{3��i��l�E q`��B����3@�{
��C�ag0���I�y�&K��<^R���K�e<"�ywqE�Τ*y{b��V�e�u�mus�]E���.�Iv
�9�Tҋt[@�@\m�5�@��;� �g�5,���z�y� ��C^��p..蕒�\�Jy�%`ܡ+8�
э�|�U|��%���ۤ����;��Ԟ�ޓU&?��zY'qϙ���@Zel�yeH��N�ι`�^:V|`������~�yI�ϴ��n)����0o�$��t��9ͤh$j�	�������)Wr+q�e)]�bB�Țړ]��˲P2��AzS�� ��
-<�@�%�e�׽+r*��볢C
R�
*�U��q�+���RH��s�����*riN9��$��XD�e��:5�}���k��m4d�O[i��A��K�F��
J���y�Hu��������6���(���̌�WˑJ�XUä+N/2X��L���<3�f��ڡϡݕ�h��Z��-�9А�"Z���y
-��=V��CM�����]�j�|��bCڬ؄#�ب�3kel^�P$-�*U֬\�9�j40���sf-�E�h�U1��
-�����g
HG
�+�@��_7	Y�@��Y��{�U�z���֧u�>w���[�1�,b]�Y���H���Le����l�Q�uҬ`�ZdY-IV�Q¾�gu�DY���@
��<	␋������
-��_�x:��[9p�ˣ�!��5Q�-e��'��&
-㤞�-Pq$F�D�k�
-��(���ܚ|
�9�ǻe��nkx�n1��P`
�#���|"Ȝ���̍�
������j�]�w��{M����E
�P�[[�L(�'1�F:רgK�j�J�P�ER��+.4�ŧ�3�M7�X�N-Kt_�>��k�DP"ga^c�'��q���q���K>˞^=�Sgs�ו��G���Ŝ*OJ)*J���S9ZS�X��W
-tr]�:ǐ�,ȣ+*,4EC>UuӜ��Х��K�e�"[ q`/�j�,
-�����I�g�M��k�@���76޺|t�Ŧ��ڳ1ѥ�|~y
-M_La˭L���Q�M-àͥ�XL$}�9U�Bȹn&�;t$�=)Y�-�0
���e�p�D��`����a�nj�{9v���Zk�g�oaG��Q�u�dC
��� g	K�v1[F?!RS
-�z��dH��4%Y��0��a�N����8�������u��)�H	��d�9�s
�8g�
�
[�lI�JŴ\u]I㚚�G�1�h�h��js�P��+]ռ��\��}�x���n�~����sDr�^���G{����TA�PI�
�=uz�:ڬ5>t�k���7��ͤ﾿Mw/uk�
zDs7�u�#)y��)�6YA�O9e;�푷T֦�P{@���!AsS����w�ZCRs��?
U
O>�R��j�&;����ߨ}�����M[����Z
-W��}�^�w��76��M��U���K,�Ց���=�8�RA��by������ڰ�s�ԁ��
��֫�	�u��TqZ�V��"���D
'�(�`A��^Iyݿ�20d�u���Q琯U�P�������i5w���["I^OjfƵ�<ɕ�awY9���*�����y�;z�Z����]���k^
wi�T���4��ل�ݔxwg	10dB���V��I۰�ՙ�!NG�|�=���x�a��~i��w�\p7?��W^��)��m,��m*��m+��w�4X��Ƌ��k/
TA�!G�Rpn	��.q�.qst��	[��q�3c>V�F
���n�=
R����R�L{��
e���"I�bw:C�/��8��hΎ��C
���B��h$3b�\�PpJ�x֮C�����y�K�2c�~�����q_vd��r�T�]��p���t��Inp����<!�I�ȍ�N�0Y{،�\��1~�dsR�d� �}�0b�(|��(ltT%4���4��_��+����g��Y���)���F��i���r��M�2�!s��:��ω}�� �27��,	e(�"������G���7EG.�C]�
_����5-��;�F���E
��K��xW�h_L9�Z�a�x/��wa�E|-�j��h�$$8r!��B�+Y
tn�E��v�xE�7'|��_��B���{Ax�R�9�躬N����5��_
��J�
-��ai&ܖI�m���UlDZ1�XK�u��ZO�
;rpl�@�}v;��nS0�q�) -��h��._�t�� Z;Ո�^
-�8�N�a�ZVh�a��
�Ep6�b�)�f1��D̊p�V� qURV@f�
+_}냊5^�Y�
��z��4[{།.���N!�n��Q=�A)��Z6�4�X��=&
�cຄ
-/�"���˼���6pͶBh��rwr,�"�����m�گ7���8���T:�M�� �Qm�
_��a�Ά�&
�:T���q�����e�_�!l�
��8��t����C`d��
��G��-
-�mPjb�jR�J�T�F\G
������ 2cdD�##a5ҥ�H�߈�*'��Bxr
-ې��
�e_p���s+ 	}�`>F�"�S�p�
},t�66
�!l"F���M�l��� �I�
��3Ff�9�X��!�A�N{H+��R���<!:�
�y?$���
��`�{C���T��3�#>ƍQg�S�����w�y�*�w�lHڨ�TG=��
��c��ps�dX"[��,G��\�Z�	�$7@t6�K�H�
��
-/����������i�m�>MK�H{
��
-D6XkB�A2]d� ����(�["O@~bN�{@��i� 9���Z� �F���?x���9���	ϙ��a�c<�M�
��c���y�*��K"ِ�^r��۬�"/c��cW�������Ȭ�>iǩ���F�9����ݬ��ۜ��{����1�H�H��@���?�������!i�&R�i#g�.���Q�i��@sTn�B����z!�<�y
���1v>��
eJ
�?�Vެ�#�Cb�h�w/e�=(}�z��,~L:���%|H�Şc��d�A at 6��}�Gn�R�Ũ�j�=˱�j�*�
��n_J2}���r�cf32gҎ�$M�I�ٔq���Q~��7���ל��G�᜻	�v�fOJ�s�E]�Y�*H�P�����k�P�N�����a�Z���n�Z����we���CI~�T~%c"��7*k�HN����T$�����K�c�͢ܧEw�/
�sG��x�vt�'��g��@B6$�7���ϰ&�5�o�T��#�G��
�:�� i)E�
�ed�� [...]
-�k0�
x��
���Q�bF
-��&��*�E	��jQQDkbaĠ8?R�9�Q_�3��kỵ@��`������ �ܦO��_,�Z�_�t86]�a�ɿe?����'#���a
<�R�N`V0epIt&����+�٤FI�7)��D�F��P^2�)�$9enUH4 ��q�!
�uL(�n�_�َ�+�;Wc��T�����]v�gGjx at c5�FȢ���LG�Ŧ	1����RI
-�.IN��迈��<	�E������d� ��^m��d��F�1�Pa��]�{f�펎��_
.�����h�"�&���%
J������L8Y��V���E1�F*dޑ	Y��b��S,A�
u-�3А��Gr�k���uA���K�[~�0z�d{d��څ�
-��
U�{}.ο2�HP%G�s%
F�(
�
�1/S��UJ�p��
��`������)
��F�V"�Ѐ�̥ɑ�����+O�����湖�vN�Yz��r�G}ú���M����dG��ҩ��X�\ʇ��@�.���KX�
-C�,�
��c	L�3��EGD��s��#9�h���h��>����dë�
c�V��[�L:�<��W޺^^
r�� 
��M&�31��\_.�s�)"�$WB�I)�
2��_F��	���0U8M_
 "X�� 	��
�=SvXk��Λ�����n�ky�^��ٖF+u��kQE�ov1����J̥��
-��������)
-11�8)<�^JH�'�H
F�'���阵�(�|x'ȑ,��Р����+��=�t'��n
������L}��eY��K^m�wZ%.DR�/��XJVlt��K�I����*q��$X�-	�b3'a\�t�Z 	���
�
�޹������
��/���}tzc����Z��OUw�Z�a�2�0Һ� AMx��B�.g�D�Ʊ	�b^HQz|��P觪���D~Śx�3N`�4}-�b�	�Q �_(Pf�Ziڍ��3BMh�����4�
1�w����~�
/y�-���`?v�@�$��P�\FpM"�O����.�c��/u��F�x����,��Z 
��m(��
5ۡ_;�@��
Ѓ�=���'�5ǩ�
[S���Rꠇ������
ݍ"v�;tbP;L��*�cZS��-,�5�zk�z����4M��=KF�V���)[ P��n2�Fz�CC�5�z����_�Z�~nf���:���j"
u��>��H�A
����������p��ѽ?��گ���i��4��T�޹(�΅p���U�&Pl��������}�k� j�ۯU5{j��ٮ�W��%/�{�z9��JԤ�#�)�-p���
����p�5���4�X'M!�����0�M��x�w[�^}�[�Z@�4�҆
��B�:t��a}�~~���
�o7����K�ha�]�9
��ڹ�y�e�|�e�<��o���=�p��㹺�Iܮ�gx:�z]���8����_�i�f����������V��{��Ps�T3���lE�.�.��$\������~ڲ���e���%�3�K��}�p�7�I��

��8K�e���J���J���J��݇f{��6�;X�����B�ECM�ZPՀ6T�у�>�@ [...]
-�5@;�
��
A���_��m@�%kPkj��~Cf���eK0���Jjn at A��((�g4�:�I��?|�kX�y�I*�x� ��$%���Rt���
�f��f�fjj��3Q*jS$�b������Z\�ua�b�'��q�(�����������\�}�������
Tp0��zS��s���(
2��A��
��h���B�mT�‰c4�탱�!�����]�~�^�
��q��D:�M"��!��#���M)���
X�ag�
-'�d��&�n,�D#fa$ȋ���O0�K!��G����>(��B��'j�����
�m6�s�+.\�I�9��M������D*��9�N`�

�
(�7����Fx�!�$�f���ツ�^��� k�x�]�����2_K,GT-t@�B{�,Z�����_��]��$���$��)\�N�a��8X�E=	�Ì �z�s���\2���N�l숄���^
��
RMVBd�2�eP�ڠ���fV��*`�u�}P\����\c�B瀿�
<��Jm�Qۂ��
�G0�ց~��Ӯ�^� �
7Pz<����^O$��B°7��y��i}>Ǎ�hc'|>�B'�:8��<

WC𼍑2�M�0,��؀�oN�X�ׂ��䣮�w��v�
�k����ʯ�H����H|�;�������č�������WH^:
�4
�.�x#=h�1��, -G�rR�:"����
`
q�'��y�q���~�= ��@$=� �&j��	ڐw	c!o&���
0	*��r4 ��b�Y�0C�FsȒ,!M[�t�=�N�U�"��)������3`^D��`0~폰I�𱤡-Y�I
�|�89H�
 #D�:��#e�DN3��a��fȎ\E�%�+�!_q�
�U��7x�w�܎ pN��}!
�k�H�)
-�'�c��-uh�&���W�؁�/1�(��"B`��p�����7Y����ke�9�⬐˶E������TxAT����GLr�o������
c�?��K���O~K�
R�S�S?�{i_��c�#:�u6ᐼJ�U��O���joS���p�
-��'r�"�
�R�q�ΐ1Qc���M#����)'����X���
�kF/�%m��G{�~B�?d�%�K����D�.�����
�v��X5
�u3Q�i��`sl��B�E|�q��볢0H+��z/��}+�K~�?H�
c�d��`v�1n
��O���
�?dh�=L-�6k�q�=N�ƙL�R�
-=d,�G��J�fb��	*`[�%���ƶ��h��>U^ذ�l�`����=�>��ԧ����ٝ�G���0od�g>��$�n�ޤ_��_I�\�2�s�)� �p��Fn��[lu4�v����?5�c5�vw�ֿ)�
eG�+
��˙�%5���oD��H��:2�p��~L�ξɹ��������Χ���}�⏰O��2t.��K����C	�7������:�y��,�
������T�z�d��V�G��[ʾ��=�VF����9��P�i�s.��)/�����w��"�`8�P#�~�
}b���C:1�J"�n!���ȼ����=�sS�bMs���F���])����c~.SPnrn(�W��%3������ʓ���N��cž�Q��[��������=�T��
�,�BBx�y���ɮ�ht�9��e��5h�p[Ԋ��˓v��ja̭J9�j��s��T�}�vi��.�|o���C�#���$
-�$��Z���-�����2�dA��C�.�q� ���{���'�i�:��
&�C
�D,{ږ���^������;2(+r9gJ�'
-*�GU�Y�s��[��eu-�Fv��A��dO�se}���N�6�V�
�	��i(&�A��;}�_;c䰛�p�����­�s������}�V�t�*��Y����IVe�˯W6嵨��~[T�s�d��Jiu���je�j��e��kq��@H[2YD�,%�!�i���AG�
�F��>s�:j��h��[i~W����#J:Q#g�W�	�*J�-e�ٍŻ�uM�j���*Ugi��rY����B�?u�z at Q�
���5B]���;s������k:�� ~�#-�����4)�A)�ԡ�Z�	�I	-���
-��*HDP��]
@?����8*��~�Yѳ��}���s��s��v�:
��
{�:,��{�����~'���Š�B�zj�Z���ƲԨ3�Y	����i%9ՙ�����
�p0W(��D/��D�)�췉���y�@4�!M?a{g6�-—KR�.��~��4�q��j4�h����^��\����:Y]�_^�+(.*N�/����g��d�����)��Œ��Ԍ���
񟱒@�:
�m�C����y�S�n��~c��+���
�ǯx��`���q��_��8ΩZAd���
-ё���TaiEfF�aj�Ŝ�¾�#E��%/���KiG
�$���I��;8����-88�
w�>\��/�~�e*=3rp��AO��^?۶�[cK8������!)��Lj��F��U���^Y��\Q��/?/�/��[>�_�L���RZbٛ$���8I ����r
ԫ⾶oý؁{q{nv�h�䘽��a�����^�k]g�O�hV��0q�ј���Ĵ��d������L^M�0�TW���õO��5Ki1�o�xU+q�@6�\E
T)�I}�QFˣ���{*�޴!��ݖ�17ݶa��
�L��jiO$3�#>$�M��r,�ȅ�#q��)�MU���2C�u
�6�d7�m\N	;��~��8I ���j�����<z<!�
>TD��fl���\��o�,jo:�
{�F�e�DzS{�“z�bb���#;
���W
�ק
j�HjNgv̦��_
�-�8���$�t�%d���i�F4;$��ݑFS��h䑎T��^Ŗ8��6����_p��&

������������ׄ�!�q쁊D���$���߁!c`V�7�61��=/�{5J�qP)�^^ ��>�;JB�f6��gdt��m�B�᱃F՜�A�Cƾ��,Ǵ�PO��hޝ����6wBš(����
����w�h�ñԉ9
mb%�~�c����PI _}8-��ۤН���
<�F=�Q�+
��߬�O�8�������)�4m�i��u�y
��(�<��4'
�+d1�*9��s\�\g���h��'ع���_l�{�$�2ZhBh���F�I�+�D�>/�οQ�������Kr�k{5��.���T���@�%�u�R�=w1щ�������X�E_��R�^K
>
KC
����
��/>�/�i���E��%�F��o��Zg��aAլ����
H�k��U�-ɫ���V��"W��CW9F��H�����Ք}��B[�Z�~�Z����
/9�}����)g�O�rv����e��N�����fB��8�2�Gu�R�bE�|� �|�#�5���l�YwT
[��`��w�i�}
����ӣ}x����=���{�ɏPc�M���e�C�0cy^a�[I2ކP_B-7:=�P�
��&\h��Ά80����d
��WP�h���
�'�
bp�N'��t�<��P�m�u�༮-t������0�y�'I7V�:V��y�D�8t
p|P�G�."�IL0�a��<
7y���+Д��_��*���bTm���ҷZA�V
(�f��M�Q��4L�_�nHt��
��	�#�Dd\(�Y�N�m"
In`!�
�2�Q��䬁"o�d
`n2��M&�`��� Pԇ�ͻ!��+iC��4+kB�Du����d- �_F(
-�
��T�n����R�����7X�5��7��Fp����.0d�!PF8�;!\v��j�@ndʩ�XNNȫ�I���C ����o�@+����!W2�hJ�Qf�:d� ����{R�v�O�>�/ }�hc{�6m���@]Ĭ� ��	P��e���t
�7�|� |����ϔA�$��� י
�T%���OX黀��
����>�]4�.#`\5ƨ	�L��Ϭ�_���9��,���P�-�R��
,?S�����@5�� "��Ib-a�d�V��p��'E��BP�>0O���]�QM^[�T��zYuQ����� � ��Ɛ9!		I�@�
@ �� �A@��(rUZ�P������E�
-*Ȱ�w�;�����9�]笇ظm�@�X�
 �o#D�� �/�����a��$v�l����a,�|��Fk ~�
`W�e�0�
��;xۜ��{!p	.��B
�
i+�n�	hk�rx
�[6����?nn��̀ Q�'q�-���[F�Ö�8ā�� h��=н
�����0�	D�
A�q1�O�#pR=���%�~�h��@m�
�3�@�	ҵ�@�<Ex�}��!�3��)j*t�o	��5`
 .��*{`�^������A8da
A�uI��D+ .i5p
�]������izK�$�T�J׎	�c�����g�����ȷĩ�${A��'���[�$4e�=p<�A�rȽ�Ŧy�
Y�=.������
-����4�/���qN�6KLM�(�)|��1L���҃
"_ǽ'=�zC|KxE��N����
-�i~���� ��h/y�kJ=
@��+H��
����p
�}F��@��-��af�G^��ANE�;V
���G�43�%�<�9�j�S�]�C�k����w�S����΀ȟ����	�� ��-0�
Bw{P�� ��
A��5��}�˴
�>�ez�$�|�e�[IZ؀ w�s����*�Cf���V�=zG�
�%v?��&��W�0���e�
�'�w�aO"��w6�x��� �

�	Æ9�
�<��c�X�^�O��;-��U�,�iBr��3p�F�m^�V�!�uv3�։ث��ˌ>~/�ϸ����n��l�$��;C8���
��T7[�ځ|�
��فa�䮛
��N�!�F���#{�4��
i�!�U��!��_�ٔ>���oA%��W���
�;�9-<þ$�`��O�Df�hl<�%n�|T QG����
�wN�::�>r�~�u�.��;Z�m�`�.�W&��<���AȍԄȾD
�W�A��3�JJb;D�|��I��o���K��I�yO�����%�^<A�Ok�3k 
�\!:_�:o���P�z�D�������[��
�ꮉ�w#���j�4�V�?����Vf�N$q[eqG��č�I��SV+�"�>��H>�J�����3*dS�
-�4��p�1:?��,�y��7����s������_��pyP�]y����W��~1G
yF���ԦЎ'XG���E��6�&�Z�,���L(�� %�;Hi�{I	2�+F,,�jB&)� &:W��n*J.���e��W��{;�i�4�IsȒ�����VI��T
|�(�0g��-�$Z�.�U��íN2	+TU�%��	iC
-�nE>rSiT��՟��՟�y�	z��
���߾�C�7u�27ۉZ���5/[|��ٲ��[��
Wj��ʙ�N���[�QM�*jm��U���-M-�4�cR�<7�U��>�4���2�_%di>
-35������L���A��,��t�y
]l����rx��O�g���wۂ_;�CO=aC�A�ֶ2��fS<�֨�T�hX%��B}�0/�D��=$ק
U�R:U�)?�R����H����ӎ1t��hk �uN������f�����	�G�kf���,�ںkyWS�:s-=�hU��R��*S�� �Y�����#0d
��e
���I�U��+*���"�0$N��%�ǘ��q�5���@�:g6��t1f��_��Km^t���?��p�#`���:�Ἇ7R�4ԲwVW	��e2ra���S���(�h��r+��F$!ˬ�e�����H�P<�3�Sd[X��1�5@�� ����c�bf�q�݉Ř�]K0��W����4��t���
���Qr��FVXY
_a���S��֗�pRK
q��b��\&-�O�+�=JA�]��4_8̗-,�q�i
��O��
-�1P�=�
f��<��^g̍K
v���;φ���ڻ�p;iSe
#���ݓ� &��ZJMr��`:/�2O_^*���y��Ni7�.���*���a^\��W<ƴH�=�;a�f�~.�a�l̽�s0�W�0}W��u��8�/l_�t.ҳ���Wl����:�j��� ~IH� �("��
;�BBB�@aG(���Vԩ#.�u�Sw
-�,�0Et ��VEq=�c=
���b��ʎϼ�O����;�~��������|}&G���P��n�j����'��Stbo~~́�����Ս����Ҵ껥?
eU��e��>6��
�S9�G��g?2ɃV���Env�K���7���r�k.
�^H
-��/u��sYq[[
7�s�bM�FuaӶ����9Y
��k�
-U�
E��
����┆�u�9��&��NMit����
���t�In�3 �.3��^9w�^Sǰ�V�Ց|��פ����Э3�7\X%X�Q"���L�{~�:�ܮ�Զʬ����y���m��dmC9����Te�Zl7$ch�I-��if�+�
�q�A��3$M��S���c�CV�����{n��
�Э	_}#/��zq|ε����I��JŕJ���*-��A#��HO�r��{��kJ�x�BrA7좑���ܭ����t�~�NZn2I�##r�ߒ
�w���Y���Q�۞�7<�{�<L
���Y���ȴ{�x)����}"I_�D�W%�5&��u������}��zR"�Xp"]~�$����ҤG���Hs���a���F��%z�_���	�_�r���|���2�U��^���~���AɃ�B���%�����h�`U,���숋}�;�&.v`��o��?O��]GH�O����#'o���LR9<�|5bO�r��ܬ
�W�
7/�򬳵b;�6�I��tSh
<eڵމ�-��N?���������#?G�k
��
9:�"�ݻ�v.��:�� �B!����B��^=��)�TL��m����Mz0�'��r'�Lӧ��S�������H�RmEӹ���bG�t�oz�K��^�ș�ܹ35
�M�᳝찹
�
v���	�.5�B�A�EB�"�DŽl� ��Po
��������B��
+Mg&��<J�h�����K=@±aI�۬�
 �8h�v�8c�N�-{?�p��o:��L��v���	�s���~B���B��e����2�
�
���#�0�Ƒ�ϋ��$

-��.B�Y >7�ú�
��{c���D�����f�k�n�NS
�2��K��R2LH.$
&zrX艨���Y?
-^��3C�� \�?bY>.�Ԉ�d#h�ݐk��y˰q���o�oLlq�d)jMlp��-:
�2�{��-O)zIH�8!J"����HX�>�--�t?x�9��g#��0�
��e�e:@����i��5�
!�e��96�̰�p�\�C��8���h��Շ�"	`Bʂ,�R�)��!*�B�k�� �;[����s@\�#��/�x7)�������{�4�<ǃ�.�f�q�q�!�cB��E�1�"S�T�,B�%W�"�=�U��^�jo�3�v��+�w)�n࿡��
�)
->�H���m�W] �f�{�!�և‡�� T\c�M�P�C�j1de6��C��
!>�Q�
D��Hhu���
«
���)�5�Qʤ�L
���� �@�J��M������
����0�&�j�Tً�����H��	�C��ָCR��6�� ��
Q�r�
q���	Z�لq�鄏�	�� gL�Qغ|�A�A��Cil2}
�
f�l�)2�HϠ�Y�
�_8!e�+�<�8��!������v�C�K��ľ��ā�I�p��1�\�h"G$���wH
-�.Hp�A�F�ڕ�Lw�8(Xa��hS�-��^��dlt�f�'��,��r�w6�&`FQ4%o�L::!�
�Az;���׈Qɛ�o%�Cҹ�7I{-G�K�+�
D�4ȝ��P�*��y��L�a5�%B
)mP���1o��L�6�Ɍ=~�i�ޫ����Ԇ�&7rG�Qo�1�I�yC���W�W�/dc��lL��g)�B�CBt���!ő�,��:飔�c}�!�"LPƷ�:��̚
��bϱ�M��r��6s_���`�k���c�N����8���MEqk�K��Xܪ� {H�
���� @ b�	��B�-@"D@�D�
-A�^��VP���ֶ�^�u������9ߞ3�������)�1�	ŌyD��>$
�< ������{��>p�}n0���	��1�[ n32��+�����$lw��}
���b�:������X�ۯQ���)G
�r���U`�0kq��&�L��x��O��������1�
�����Q

f#���@O[ a#����O}k�
Tm���=�0���}ډ���}�B��s"oףX��}i��$��6h�W��������ѰV�0�+�
-s�~�1��e<c�^�{�w�;���‡޶@2���|)ҷ����ld�9��
\�:�ز�s�W?� m�U�w�N�xL��yZe)~W#31�������ϫ��p��ݜvf'��eaO�γ��f�_�f�<�U�-"�,���@*2��̏Azo�h��	
�;��|��g��%ϋN����o����5�z�%E��O����Hs	]:�E\j�1[��&~7��7n���6~k����G@|m$��D� [`(2W�
-㐾�^�t�
hX��ݫ�=��)�p~\���i�)m讱
����H�^e�WB
-�]�Il�.����
cd5�N�ĩ[x� _/��WJ~	�����e�T!��r
�2�=H���@��F:�+�C���
-7�gU�Tu|�L)f�x��J.ǽ']�yA
�oV)��D
��K���1
ѕ�Ji=�,��?�',��
-uҧ��X�K��Str�G�Ð��H�S"2��(Z���l#�7�6��u{
��
]v�2��ξַr����e~�j�>9�X��E�T2K�����^Q�9A~�E�6fL��H������@�S@�V��@�((C�^�
-d�!�o5����n3�a�N����KǪ�]/�wt������9Q~uq���X��N-Q�1��J8y�j^NB�03�S�
?*��?g$����z���$��� �{�� � ��s����羚P?�l��l��e��w]O~{G��I�=V��kȉŔe&ti���r���:Nf���Q��J�8Y9$Q)�JRR^�������y�:�m�<$�H�X�
|�\^ԯs����v-�K.O���}ݪ��7�r�V��>���VA��N�fgf1�Ӌ�jMOu�^��>/NPJ�Է$��?�I��I��e��H\ �@�\�k�
�����X
-�:��G�.�5y�io�nm>K�W�g
�(��K�����ɔ4m#%'���]ƍϬ�f��e�iƴ$:�7�<�-3.�#%.
l�b$
�zo����b0[��=���\&:7�;�/�j;�E�	�����W_v����_�U*є(�ɧ��B-K^P•�Djω��^�H;)���ʋ*|˔|�J� ��d!���"���5. 7�
��Eg0ri=��{��v��U���M�-�ݥ�
��:�gv��_c����Ąr5-�4�uF��x�b����$�[�ܒ�\A�?LQ�G��l�2d����
�=��iv�'p�o���ٻǩ��ѕ��7���w��
�6q�i�D>�YP|]>�&�
Q�*4�q��
�����w���	
���m�������WB�-P��A��;�?��k�#�t ���{h5h����0ph����Uw�-������uHy^���/;,1����

-��0�i�dҌ�,���M6��ɍO�h�oht#$1�a�-0�	��p���F;0r�
�]�����m�3`
�fouw)
�^�
�l��w+{���/�J�#�E]���
J
˒B��'Q:*(�v#-��3�>�xJ÷�!�a�
�m�� ̝`�, ߷�A�
,�h�r��O-������i�
�<m<`��*a�|��7r$�]8$>~%�s0ɇv9-�t9�(�a�x�@!p`
�9���� l
���, n�0a�ߌ�����@����v�;�(��ݎ�[G�%��];��1M�ο��Þ
�Oʾ�\O<J����Y�1�
-� k��������5����o�k��z�2[���A , 4�P}���qy��9W�z��A1��
=�R�0x-�'�a[i;H���v�E5}�a ��"e"�}_"��	� $!�H�$h��bQ�tܦ�Z

��[-�8:��Wqj��v��T�TqÀ���n�|3s3���wr�s��{���S���|��Y���Y��ճ-%�gO���Q��v�@z�a��g(Uz�m����r����tG��w��NB6_a�5��d�Ս,��3k�ќ*k���*r�eUxXs��Dž�
�l��*(�Z��6�ɭk#e�-Q��]1��C��N���-���/|��/�C�-�5ұ����4�
!�.��_
��
�r'�C�̹C��ҡ��‰��Lݰz�z��
)񒏔{g�,�"��FWL�n�K��2��<��4��8~?0q�E`��k����� �?I�/��!���q$pg�1�Y�0��

�
T;ʡp�A�,�L!f���|R2�'��cVz��ɱ��5
���8�
�.�h�R�6���Do��<!+���&!�)�R7b ��E S�(v�8b��	 �OA�C"��ap����|�v�F�S����!��
�����5�8O]�����Y��+4����{��Fh�
�™(�����"���(V��ӑ��#�'
J���0�> %��(w�Ɓ����f�dl��fG��m�r�ޟ~�n��^BL�	Ѿ"4�	
I\��dL�C��pfb���c�!�Ń�5R�lOh��0��P¡E��
j9Nh�8b��#��M�N� �dB�B��gC�b��r�Dd9CV�I�;���h�d���F�
o۸�O������@p�꣞Sc>�����k��� ᳐E����N�C����P�@^ᆌE
���
�gސl�B�����@|��<�:��S!�
R�Ԩ/Do�/�G
�[1|l��
�h��f�;��
�U:A=�*�$(j=��'o��s��背f
2�N��/d
~�~C]��'�^ �O�a�M�)^� [...]
-
�|
:���a9���z�� [ 
gBƄ>�c8�i
�8�0�	�:W�=�7�9�>Э�vc 4ۂ�nA��P��Au,��l���ȗ��Q����!��ѿ)^E*�T��'*�
d#d@�G��4�L�X(
aaV4�D{�%1K튢|O��"��Ə��
y��%��~G�nw�v?Dsdڐ�T�
���߳���`F�������5�}�E�=
�z������ &L���`�dcn�=�
-'�\��y�0���.��+\2lZ
�b憘���g�M�Os�N��=ɪ�H�ӞK{��*���+��y&��O�����\�������0�TAt�L��i�/���v�NuĂ
�7�u�cżs����J>�?.\�0s�}��Իy���m��9,��?-��w�n�og\�?�]�
}oD��|$u�0�R�.`�������a�̥�S�������.��͇��=�/4���[��/��[�$����ɿ��(�*�n�)�1w�����Ǝ�K�N�w����=Rv�
�<[ �7E�)F��$��z��".�5��,u�L,��Xo?�T�4�8˽o�����Ґ���17*�f�hiH�R���R�F酒���EM�s�-�3�ԧL�4'L]�c�;ڣϳۋ�d
)�����!�J~r}�E����o�Y��{|
�_
�y�"űo����2������k�s���k.�_��Y�B|Ʋ.���͊c����/5�K���9P|>w�Ϲ�%�V�Ke�
d�Z n)��J [...]
-b}��_�`߻F�ܽR����|�~vL�U	�k��,��W����Ty�|�zߜ����_��);�����q��c�����2�i�@Vs%dM�}Q	ỐOs���ڷ��YVp���3?
c>���� t��F�}i�1�\Ci�������
�`��m�r��kU{*7iw��<狹_��(o3~n9��h�2m���:oH�Xն�f�>��L�0 ?I����8X�UA)ғ`B(�@�(� =j��j�A�@P�((�2눸z�Q�	3{f��{vV|��
����>_���Nn��MF
��*�1&�8��xx��ot~
|��N��Ό�ъ�X��Qu�TY�٭���9�.}|�gWF>U�VJoO��&51�/�'��&������Tſ
-�NZ
�� ��4D��#/�C
-��
�+2T�Vk��r��R����tLg����ve��뢰%1Gz
�;ry
�r)R~1�)�ܿ>��Y��ƪL�a������&�K���E���ļu��s��->��T��C"�{٘p#�W��7��
ư�nA��:hO6z�I�w
V��zE'�:J��
�<ZY����$K�_ɗ0��!��Nvq�`Xa�
n~�na�?C�3��/�F4�\���U�(|ɺ�r�pz�*у_Z��o2}�NfF��xDk���h���S!	��Uu�]��"Lv�/⓫
�rA����*fIvSHA����y%<�?���\�fg�����=0_��#�B'�-��͙���:xwj��6
X�ԅG];	��Úc��Z�;z�-/I"l[+c
�ʼnn��yd�0�VZT�WTX��7������p^�Mnz�<�'�;�_����"�Q1�*�
�P
����E�&|I��с�˦��nk�a��a_�	Syk�^ic�MC�c��	��4o�8�D����[*�,�c��ةE�aI���Ģ9nb�2'E�fz)b�J�?�RDU��p|M�$T�W<mՀ�
�0ק��&0�wP�j��A�����b��
��hq�%�)^�5�>9U���*���%�Ie��Q'Nt=��h��/��L�@��
-�T���P�![
�� �ד`�]

tk��
�5��]�R��wҗ]&ok��7��B�ۣ�K�q��-I
�M���<zJ������W�Š��bGWs���EV�e���1ck#���IUJ҂/�� O��0'S��^5�5H��#P
[�:���J�zm��c�.�a�/��
�c
�.�u嵧{'_���ƶTD77E4w�š��r��C�M�C›?D� ߨD�nFU(��(ƿ�`�oO�Rax� �qC�� ��
�iq7����\	;��w�>�7�9�'��LW����B�Ȏr�0y��L
,

-�M1e?0Y�~�rD���#CdU��V��&z	0��_�@�]=h����x�V�r⸁p��D0`ƿ�ޟ:es�Z���d����j��J��h�*d���AC1��b�)VO(�P���
�T��{�k���n��~�x{�o�eF�g�C��5�='ݼio�s�~�)wC,��D쏹
k5�t$��9ǐ����27��zO�1�7ml��36E���|blՋ6�<�ȕ~
W�N�P0-��
���7��HP5�	�#(^�C�}l���g��I�q��LO΅�s��d?8{ ��&`V`ǘ9�f�
�32g�̠��촋�������#�
:J���R%����n�+Wq�
���g�C5(~��/���r!���Z�
�����Ɯ%�	�Y���g�f~�������,��"/��|&��x6d�t��m�G��U����nߣCnO�6�p�`��s���Y9P�@�
-HU�Y�.B�� )RyL�����R�7*�71�[h���P�)���,SOe�Nwe�n��6s�e����w,�~^�p\����O��;�Cd���e�.|�-���{ �2�!aYb3������V�������]5�+
ꊟ��J���J����M�Wӌ�V�}(���������>o;�6kb�������6ە/����a+~*�p�<@���� �k:����>� �}�K��ې���
���_|4���kC�:(r�
:�k���!��T��
-5�C����^���pZ�>}�w ����
<H[����_ �H��h�
�\�~�:L:�
Iv�M�Q�"��
-ְD�{P��9J�ڍr�w�2�
�I�u�|��u���
&�9��+m������8�)@
�g)�k ��H��
E�	vȜ`����
���d�YT�g������;Av�5&@ �$$$6!�)6�7�,����E*n8R�A
[EQ�}k=ť�ӊ֭�Uq��3_ۙ�x�;�����}�sr
pig0
 b��ɴA$�
-�ZH�2E��1ʴ
�J� Y�e�c������'6�PT�9����I~�������(����“��F�p���
[83ؘǰ�'�

h�iC���z��u����%�i�cj����&�v&���O��N�߃�Ѓ�`�O
B
�J
�π_�.xz��ǂ6p����0��~b�8A\4��u�
�xg���3��O�>C�|��x\-��,��@�0��Y��ï� ��
�������{M�;H
3��)�W�;��=%��w�Ô/��x0�ȃ�&��|�<B��D��d�,H�:��τ(}��
 Xi��ct� `�)����$���
�����-
�?&^[�?i���	>����T��h�\H>��D����,�Ku ��	Y�
B�
!�2����m��@���½V
"�i
�Ekn��ٓ�W����B�_
a5
�W���\R'��H#��ݘ�ZX�c!F���](�#,��2S�֛C���M��ʆd�͔dp�G����#v�g�&�W�߉�ڏ�ux!�px.��S	l�H`�8�G!�ք`gr{Qv4b�gم���D�)t�0� 1&�*4�����
_c3�f�E��;�v�7�{�^��u~%;4���
�s�I�\I��>���{7s~���c
-��R�V$4���e�Pͦ�2��4/-��!E:��
>&����ϵ|3
So�"j����9O�=���w��60���
��G=��/xߑ���I����;����vM	�+�3	��"�	��
D[1�`�@*��&��
��
�D3>�+�ߤ�L_$������~YT�|?����V���.���z}nF��s#b�{=b�wUy�wTy���ߥ�7�
Q�>��
�v&��c�	a$7���d�;3,�!7�#���ў�L�	�{�g� c	�N�r�����Pչ_Kh���ȹ
���&v�߅���s1��D
<}Ip"���X�ˀ���|�ăs8�Ép'�4!��
�ι�t�l2K�
%��d�s��o��bɬ��&?�$���3��K/�w)���|�*Ι�������=G�
�
:P�u�i����㟈�&L�U�w(	��dx
��C�I�b��̀B�	�R2�
-{ƛ*W�I5G�neЌ�eJ�ѢD����Ng���N�˽����
^��w0�5�@r�p_R�hh�
ɠj_Ȁ꘴?�lw���w�}��K�o�p���[b�
RH~6�[EFV�Q��lƯuN�������V+�.��Y�*Ns:���v(���@Vo���?��,�r���=K�%}�;�;RC��
˷��W�$�V���Cؓ�/��
M�7&wУ��(#��Qo̩G������0�6�N�X'3<Yc}�"����۾�|����sk�}ٍ�
��E��6��d�~�ޯ�Zz �s�)e����/B;�E
Y�́_g.���`H�"�{�dd�:}�e�!u�Ō��Α�m3�u�Qb0Re�U��qhE��/�r����y�
���5u�6��rڥ
Y=�̾�V�>�Z����Ȗ�gaks&%�C�>���_GT䷫I�+&�gR�V�R�ZfQ�6�Q�mv��>��-"����{�9�צ��U���[^��RZ��*^�Q�$ސ�A�.o��9wGxS��#V�D5�\�j�}�\�?!m,DPS��O��;��!oQ�z�R�[3���~:�����7
��S�����o�h���U��ڻR��]���\Q�o+��/]%n.Y'k*ڤXU�MY [...]
e��Lm
8���Ȣ�TE�g�Ǚ3=a>����~��s����>9
-�f���?pf�ތ���=!)�B�3&�w��7-
�����:�í
�T~!3߷���1��
ײ��~\��bt�q�j��ZVWdx�,Ҭ�d���X�]~a����t���,����^��}w:��}.()�;x{�����B�r��%Fe�T�
A�:�']Hx�
�uE:����L8˄�M|�j2��$�Z%�������&E������Ź�;���i���
tK+��L)(�I:Z㟘�
��
�7�5�Qp|�o~	��^���B���D&���}
��8��jh�]π�4\n�AG�	��b�y�эWY�oP|&lm��M�95q��U;
�U��.�p�u<�c{i��G��~[�b�.n.�.zS��7�dAW��m�(W�I ?e���ϕ@:@��F
-�� :��@�yc��C̪ns�-9竟�j�s6��@}�pom����)Ҥ���	5�q'>Vn����T��Uy�?��? ���Ȫ���=���us5:����
r% �j � ��8Of��.-��lH��a�^t�tz/��Z}�=b]Z�f��x�
�;���:ƞ͒G7(���=�����:}B��|B�F�:�V7�^��:��{�N�x��
-�۵ W�:?y�O��^T]ׇ�^+F�5);�ǃ�ѽAO��ﺴ�4�B�U\�ۘ�{�>�ȔF|rT�^��^��v�=���#�}�#�mJ�6'jE��V������H�]r�.�;h�H�O2����pl`)

0��?�c��Wh���-K�j�э��c�ǚD�&Zn��*���Q��<������ZG�+
2�[2��Q���)'��9�O7��^F;uߑ.> g�_�E�̟d�+��?Ā���p���{߆���L3�N�p�p�~����;	ơwRL��2,��X��
-�km��
b��>�����E��
!T�*<M:���P�
Pq�` �RGذst9$��Q�F�1_�iF}��
	�

ٴ,hd�~�j�*_վ5^�\#U�Z7�WU��\�g&��L�匩�_ߘ:���Yl���,y� 
�����| ��bB�C6Č�`ӘD�	�q3dܓ�a<��7
��
ߢ�
��s��w
�^./zO6qr��D��tↁ����I��Y�p�����"w��
-p�@U/ɿ�.?y �!6>ք��!�>����8�^��L�I
�d����l�T,�q*�+�N׶�>��~�LW4Ӡg3s�'|:D����x����	ꩻ��D�a5�`� ɿ����� |
 �9�_����!(_�S�W"�y֑v�uc8��aڽ���԰y��e=�c��\���\
�t��m2��Y���Y�pO�'������-�B�a
��������-���|P�&(P�q%H��ђ�����BW�
=iS
`��0�F3
1��
-Ә+��{X��Y��2kY|�u�S�����}�.?�@���O �߁�2����`�`A�a��1
-�5��Z���JTP+Л^��4#h=��up��,��08XKt0����Ļ��7�5L�U$�;��x�
 �#��0�%�u���j�}4��d/K�
�P@領�F)�AWJ�)

�(�� �t"�� ��E�ƖF;�R!��"�Jh�`�8����� A���hy��ǵ���H�s��q��'�*.Z��o�ω7r��,�ɖX��D8��(�g����?�E,A�66���0G
��\� �Q�J\ �����Y� 
?ψ�r�ȝ�/j����:Y��B(�>\E
t�1Q��B�0M�Ʋ�!Y
�2���P����ͺ(��EQ�K
���
�
�g�ij�oĨ;K�����x�
,(��R�fB�Ҝ0�S�D%
݂5�%���;��_
�t�߸
Jkx(i Z�����G�>b���9<��J��/$/��%�&��Oߒ"o�
�?B����zQ��o��3��4
�oh""�� U�t	%����B 5�@B
��TY�X8�V�
;zг�c�X���<��?���~��y���qY�A�:5[��tMި
�D
`f/���^	4�>��
�z���
}�����z��3u�����<�
-q�z�������:O|I��~`��V=���.h�`� t
"�7�N
�qQTM�
ֆ���AH�
��$2�Ī3�l5�c� ~�[�>`��-c����5��Sf��e��~��	���#Ɯ�}Ƃٽ 0����L ��	Ƌ�B��F	cJ���j���H�}�1�@LIJ�Q�z#r�߇�zVM�#�����ٳ�n�'A���F���}x���iۻ������n����zЂ�L0X^� �W6���!`�`���U8ߐ ���4|�3���-��5�
��.!q
��1�GQk�G�,�7[�޸��V�N���a��{��r�q&��Ր�ΗB�;_
y�4
����F�=֧#��TX`̿6��M�{�W"H7B���d��]�沼5_g.}ʎ�{��f�k"��f|����*�k1�vW�Z
~޴��b�.��#��"��	�t?>�1>K�g�
���O.Q�x,�ŀ���^
�`3����8�x�ػ,�|�+>I�q������峜D���K����m�%�8��op��ks=���}2f�43J>}��p�Iʡ��^�~��3 [...]
-�� =/7A�*l	7�)��Y��Q�S��ɜ,�#��9eN�2$nc�z�?�Z��N��5���ӟ<Jݙt�֓tƿ;iֿ3��3�gW:xt���+
1��T�{ܥ:h�T�顇U���]�"k��X�Si��DQ���L��y���9B���"���Zr��қ�ͻ��Kݑ��֞~��J�b(�fZӟӕ����
 �e�;ƹ-�����{�B���抵�#��#Y�nKuь�
]���OI�:�����Lƅ�V#��`��iW^�[��ܙSOٞ�����k�2�����Pd
g�3/3�9��YR���\���=��;��@
���qݩ�D�����V
����wQ���-��:D\
�zwy�e���"�S��ح�@Ln��(-�M����~�>z
w,��;XýȒp��>�I����dY>�-���-�\!B�Eݔj�o�BW�h���N(�Ԏ�}��ɂW��D�+�,z*2m;�x���B�a����"4���hR~/C���)�;ªțf���c��?���] [...]
-�	n����OY	x����b ��- �;��j����p�:��D�U�ʎ0��\2�������ck�Y�,ͦ�&k�\�w�U��Eb�ʊ:������NFQ���� �_r*(��VP~�[��|���(B�0
�l5�g>B�U t]������*�щvut�c%�߱�0�N��kc,�l	3R5n^�Ԑb]���P+�u�H�<D5���ZoaU������0y��,�h*(Kt#�+~��U}�ͫ
-_��@&B/�nc�V����}�4�I@��Оn+�@��fw���m!��mѦ�-IVҦ
�*E�S�\�^R_����ڋ/SPy����Ҿ N�����,v�/�
�+���oV-P�e@�ʀ�=�������
-�N�����ً�o�.�3G��\5��RuZ����;6���'XT��m�ڲ
�����%�ܦ*
-��އӠ���;���d�qf��3Y������7�(l��Ѓr�f��nE�v��8������w�u
9��zk��WHw��{b�J�S��:���;�s�
ݳ���
U�Wj��7I�KKP��c����ʫ�X�
Z��/�%x&�	��=�
p������6�&z�����a��G5P��j
�W����:j�L8��r� !�
	��!�H Í	nA�x_�N=겻�Nm����ƻ��T<PT���
-��V�.`�j���-�>�d����|&3�e����#3�0���x��=��Kv�H����U�=k�
�i;m_
<e�*դ-��OزE�m��e8�i0���,�)<ۀ�
��C������	@-�?+��m��Z���I`u�'��6���@�pqu�����
�|�'�QU��޾Y���'W.
ȭX��޳.$�ܠN+�
O)?�/o����
K�m
-M-��2T��n� � 4}px;�� ;��� �?� �h���WX��ZtLÛT+�U�.)>��0�p�t�n.��>��'�n�_Zm�}�W���
-���>H[�4�@o��Ƥ��`���G�Lspf=�1Z��e _��L�Rs��`6�`a�(�����nQ��5��
����S�≧���
3��JӾ��U��_��z�k��;�q�olc�oLc��9a�9��1
�5Rk)�C:�{��P��W�X�����\(n���vW(hd��Dzs۵����
�DQ���:�8[�3.�O0�8ĵ}�ݶYٶG�1ֻ�5]ƶ��D��\"ΡK��Լ�����
-��� ��*�/=
0���"&\Bֿl!���:�!�#��ԑ��ufq:'��:�	�;#;?�����:�k�Xݵ�&��$�F�$��W�1h|
�~��z�
�=�}?����o����� ��?
 ����n��3b{˜��XFӛ̊�
�V��sB��s��>�)�K���k�
����~���ׅ���By�
�
��yV������?K�v���@��x ��D?���
Ÿ����B�G0�qL�d�0�%�c�
Mc{
���x�g���u
7�v����+{u�+}u�+5=�J��p��
_���A���_F�9 �\��w`l7@�0��Jt� t�T��a4F1n�ed��8��
Y�8�e�bI��e��I
���52@
�cs
�'��?2���5����P�@�
`
��EԔP�\���

��1l1
l0�1���LF��>�b���a�



���c�<iǚ� ���o��ܧݢ���  ��r�-�i�1:��E�� @?�X4�� &�
RD��F�
d�Ojށc
*
6S�P�B�6��p�+��
3�辘��+�g�K���.��
&'x��B��:=�&���������~
��X�BE$�9��E�i\�^�CϿ��s-��G�m�\�
U��
#M�<}�ܥ�
�!��7��[�G@����`8��3�`�z,Cu

ʦ1�p�>�/��j����w�JRC����,�Hn������!?
����۞
Fz0�E�Y�f�&���\TO�a�l>/�r�*�	Q���D�('U��
�DE���
-�尢��O�\�\�D���E� �M�‘0��Qn
ƹ2���8_B���X=�&�P3]�
�^"°O,ߨ�[�Ve�J��ڤ��
RU�UG�/T��g�s⧪+⇪n�}�Sq����[��{j���VwF@��/eP��`}��\��z�i=u\Ԏ�c|��p�<�˘�VtS�~U*~���Q�V�@d��o�}v�5uv���^��
ͥQw5����y2�F�k��H����Wɕ(���a����z{�tG�h.��
�R�0#�3���{��g�$i��n�u��D�;n�ݽ�����ov�%n���=N7c��o��K;bOI�Ƕˮ�ޖ]�}$�7,5ƣSk<:�O�Q����0����-�m�H�8&� ���d��հ�d'�
d�X�dY�I�gs3e�]�~�õ�5NW7HL4�\��r�A�׭][�ަm}^���9�U�3�~�fݐ{S"�6&��d2:�HF'��6�Q7���t�̓ М���ЏyT�b���q~��t��[]͙i{i�B����έ�\Υ���M�8�t���2�& [...]
-u6~3p:�����7���?�M$!�q6�OF�ƒ��5(n?�`�L<��h�;��$��g�/���坳��'9}��r���羜)�XL�x�s*}���H3�-�)�������䩠Q���a�#� {�����d_�O��4��{�`�{9�5(g��}/���go
-
�[�#|Yx �ˏ��Bq]c�@
ﴜ�q���=<�+��QyOfk}�2��G2)��m���
Z�1zW�
�3�~pGڳ`K���ΏA�
`�D$K��x[�.��9D@|"|'!�K�-|��
/�{��⣰��]�k��C���T�q��<��@�=�W��x�
n-�zNsP{V'�-k�y5s:�9c9Ԝ�q�)��0S�[�)Q�����C$��5��;�x�}�5��?�l`K�
~�q���C�BXRG�ͫ�;�P�]�d��C�>q�w�HE��Ӓ��ԫ|�9��0��������;�F�zx5�Oռ��Q�Q��B�g�C$kP��
 �|��sKM�gZ;���

�>�
���
��.=�w�$�e@�q��<;eb�6��tU�!�ŕ�FQ=�.��Q#����U"t�G�r�
V��M�N��|D�#2���f�o�+)�
�;�i	�Dok�vp���a�2�v\wz�`Y�s�:�P{q�G�2�ˬ��6��d:j��H343���!Z�HXi�\�:�!�$;�D��0u��t����
�[�8 ?^���|��
W�A�
,�
�9�a��i;d8��;�^�r�ji��&�������F��7�Q��*�Vnbh
-�CJdC�J�,K!�)��.R.�>�H�_�R��T
-DQ!�5(�{�A��W
�i��e$�J
�����/�����wwT_��Z���I�q��<�xu�اB��/Wk(�%�����R�"W�K��Y��{��O#��o�
T?1e�(��Q0dkP6�	�;�`͈���"v��&'3{�@�x�1��Z}�&�e��j��*���BtB�/�S��PTZ}����.+m
�h��D��z��W?�䫿����)*E��2D�� k�~[� O�p� Kf�]- �{`��t�R�m-��泎u��.U�il�R�л�ZJ*�R�%�Ɠ���@���M����Fd�>ae�������-�Q�(��w���=|����kXh�ރ�k�}tw
K���
fW�vzoUk���%��ƜyTe��7J|�
E��ueTam5-�hf��t�d֌��W�	�R��UXz͏���eDL�5��
����;h���ϴ�`��!@[�+�{}	�=L۪�_9�w^ܧ�Hr+�p�ڸ��V�w�U9)�EC�i6P3�&�����4�l�
�6m�&���l���bB��&�fBdk�*�=�[\����?ޅ�;`�@���
���I�v0ʾd �Qџ�\ЛvPԓ}��-<��zg]/&q:+ȩ

Tv{;-�}�
߾��ԾΈ��f�[�%X%�
�1~ּ���i%� wpϿэ;��h� 0L9�n�(h�(�T�m��i�x��p,م7�q0k�8}D�:��b�|��.
Z.
Q���<Ƽ����
8߇�/�!�ך?��
� V��������6OT�b�����7(\����7mǻu�!k�S���ԛ\7�l���YőK3Zϋ3�^���N��
�==}�3�F:5��tj�O�$:��@^�<�w��!���;�;�j���� ]����'pW	��D�����K����M���/nEx�Š��ܲ����S˭G��<���<"��<Y˯<Xw�z�� �":ʺ�K
�o�R� �?���� ��P~@�=T����Cʆ$o�@�&���E�ی����h�ɱ?��s�ِ��(v��0��hq��w	ݸ����y����+s
�1���~�j�`������K �x�5��'Hxf�~�g���-�l1��v4!z�!j;���ɰ	�چ�(�;:{��i7m��!���C��G{��w�5uoq ?��$� �� !�	j8*���,�ɢ�Vi
���
t���Z7����V\�֊Z�<l��":U�cQ�Td+�y���8���g&���{���{����l������ְ�{��o��hG����J�_C�K����Q~=@��� S9�o
>�b�nV���>h�����0�-
<��m[��8�u{\��<Y�9?Y�9�W���<���<�'�<���}+��[��G��6���_F�����_ ��D��
0�w�	�F��B
ڗrp��WZp~�
N]�cWؿ�ew*�����0�/Y�&֪�[ֲ�
+��J{_�݃�E����u���)��
�_����; � x5x<p��f�

��R�ݐl��A6�X�/H1$8
Ę�8D�)#�"�73Ƹ����H#�7c���/����_��_"~�0�����w�!�
�5��%J)�ơ
-�P��cԃ ���P�uB�!���4t��Р!5��g�?w$��=�!�_
��v �� �/ �� ,�1�t�ƔiB�jaPN��"�%^d2�$Ʉ6�1�F�t��rl
t�2��Π;q�1�gP�Ϣm8��$��9��sh���&I9�$դ�CI-9K.��L:X�xC�	�#�ZuD;R��
BYT&p��͡<�C�<��$�d+�+�>r�
#?��
Z_#�3�M/�e�Ȑ��o�e�wbp��8S-�]�Y��r�N��aU�y�,"_�M|Tn'U��ԐZ���\&M�a�Sހ��ׯ��T��%=���

O�z{�U
z9�g�IO�1!�E�4�1�C׹<t��s!5�H� 5[I�K	�4���ӂM��/�-��cA������
��3
-:ȟ���@=eOR l��A?ꉯ'�?}�r�O����T�">z.
銌������hԯ-�iw
{���=��k�	a�������C�,�C�R�D�NئC��

-G<z���Y�([� ��	�E�7��i=�b�AC��\A�O��k�B�+���/��w��L��w�<��1}�?d�D������UEԬ�]�@�iv��Y����BQ�鍦7ރ��`A�b�0)`�$B>��g���s���Y�g.��/1n�_n���������ߘ�7�wϰ_�d8"i4���6�[4�X\3<����oq�%�P|�ǝ�C�s��ɔ;e
�T3�(�#�j�nC��Lo�7��>
�嵄�

��3�7%_�������A_K�n�^
,��
Pi�s����c�
?��\�����t�N��� ��
B��`��hD�SE�oOu̐ &ʡ'Q
�<��8���H�1&��FT��ȅ�?G|&�^(=7�ت.�Dv6l��t�v�S!{lO�
VԆ���!����������a���P~`*Z��p�����ӄ�qt�L�:R͠��L�Cs��R|�I��_��Euq��ӱKO�,���^&?����u���-�Ñ���
�#�w�6�N�/►*♺2�jw*vE�ME4ʈ�hn
-�ҵ�Пƃ�L#�#�Z3�p'S�2'2�����h�����,��ď,��Q ;��mu\�ݾ�U{��w����+��ig�a����ˣ��l�ns�ۧ.���eqhW��D>F�� ` �}��l��A�
��mst��l�6+Bx4s��Pz�d�\���y�ʔŊ��B��b������5e	Λ�]7�w+��w_��cmB�KI"�K�PU��v�v4���
 t�6�L睦y
4,����B�8��,pc��7p5�aFr�D{�̔�=�jG����|Ŗ��6�\�!u�Si�z�)�k����N>�*�ve�]]q�+���aM�LtX��*b7�2�)�:��F[\�B:��qP��?�Y@���P���U/�bT5?F�37Y�-g�UYv�|cV��t�b��Y��k2�5��X�2}�ۗi�
�Ӿ�-K;�4�����N�ҌA����^6
�r��u�	К�H�W?�w�|��98�/�#j8��g�>	�̛f����M
�-K�e�Kr?R|���Z����9E���5.�f [...]
-���iՅ�g�$Y�(2m�y
-qAn�$/��I.ovɒk�ҳ{=R��d)��=�����uM�aND�����J���T�C
́�j@ك���`g�>:k��Q;�k���i�Z2E]�\PUnZV=CU�`Q�J�V����$Y�N��M.)��g')v�'(d�s�8�]ٚ��&�3��&I*`�F�ga�4g˨�}���=�@W�:�Eh[+�������W��V��(��D�����V�erی�"�ԒJiRqì5�M���
���h�'
*o{D���ZŜb����'z� |K}��jp�v�A���H{W�A����L��l�:O^U��niC�a����n�4�:vf�Gɖi�Y6I5�5��تz���v�����++�ET�u���
Q�O��L���9DU0�D�R�/i?�
WS
(���l�����
BԶ۠r�W�~>���oJn�
-㬖��u1��D���
���m��R�U�j����Nau�g}Pw�5�n�|�����5s
U3b7�
��%z��Ct�}���v�=7�[�*�J5Pjfq�o
��Ez��
S:B���L�6�ψiO3�ڐk���6��V
��*Y��%]ֺ�)���s`�7΁-�
�Z�òf&^��l'��~��L��	��!�߽�PvK'�^�e�.=ӑ�#Af�'����O�Џ�l�=R�-�4�+Y֕m�Yd�bk�u��f� M��_���Os�a��k�%[F�~����mf6�
�z�����
P��(�h�U��(��(�H�"y�5�������E�/��_��f�m
�7A�|o�i���=�3�z���j,}{����=e��{��g�����7�>=���
f>�yz��

��
��Lwo�T���y���#@��D
��rH��!O.tȇ<�Tg�`�n��J���8��T��y��ʦ�
4�.8�e���}��GO����������y
b"�����

�u����
��kh
+:
d
������lX��a
��uF�v����m �H���~��P��;_��7W[<�K[g��&CO�
#�����ٯ�<����~#p;�n'�p�c4�}�����S����
�
?K;�9��0��	�]������<^W|1�J ޹�y^Y�y����F�y�#�:.#��#��NW?�K�~��^y�w�4�'���K.N��毛�7R~�A���}XC���(��{���������THoX at zS
-Ǜ����C�p+��WC|;�wT����Y���,�
�,������3���3����nN����A�
�_z
����|J���>e�|��5�r���
�B�<�����x�
�G���hf����L{
�'�0yZL�A8�
�c<�
-���0~2��$�o��򏁜a�?O��
@�
([�@z��0����F=7��
3��������0z�
�׋��z9�cQ��-
�7��ö́
�1j��5򄌑�����+)?W
$��ïK��(ۍ�
(��
0�`�
-2=�1
�	�|f	���L<�B��_�!3z���3:�B����$Ք���D�(�+��;`.e��
���3e�э)߀z����]" &DD,�=q!^d1	!����5�.BC�NM�Ĵ[:8�e��1
O�M[�1� �	"8f��1�

3(%u��c[��K���M9AΒ��w�>���m�o0���8qLJ��8	��ƍc��
��Gg	����0��H
YG6�.����Y�c�
��\#'���+q/����?d�yTSW
���K¾� !/�@�	Z�*�,�ʾ�H�HXH�Ը����ТH݊�8
�m

�ک����^EN�w~�
�����N�������r���Oq�w¢)�^/
 �(s�Hl�Cb�� h&�M+� _�
�
��<����8�	��x���K����K�O >�
��N�c�t�f�'
��HbG���Z dAC�6�=��|Gw��ѽ�8}�|K� ��ߑ���g�cr�?F>�c�!S���M���A�\�=��iO�c��Og�#��SbH����5�|'.���5Ԙh�Z��z%�B��S�E]�3Q�Dt�
�
�NSEW���G�-��M1f����O����	u?�Ax��
�}aM>n�ۓ�������O��_�)��S
�'
z��R�C�*�}I
�d+�d����[�}̛�~�?$'�7$�XW<
�.z�6�0��s�;pv*f}
�p [...]
-�,�I�����K�`btV
�`����Y.u˻��w5��2�U�&�߽6]��n|ѳ���
��MF<M�y~oz���I�fC޿���Ʀ���76�#�
u�Am��a
��G�����������-��Ƽ��\%��9Z�y�%F��jM���0=����f�a�v�o}����O��O�Հ�)�c>׬���>����~?l�������������\�Ȃ�
��a
�h<������N�;�:
�-4�	���˘'�����כ
�[

0X�4[���>��a�߿���~�}�'l��_���o�
0��
'([wb+`�5�
0���@hl�FcY�q��e��F9�
�3Й� �ۨ(���֑p���<�
u�}��ֽ�K�{BVq�
-n��n��
���
-��+�og�Y^G�-�=�w[�k
�
��[?�0^�c���_�t-����
:�����a�q�F�be�=��-���V���؝�՜��v
k���
��No
��o	;(�
6�1�'ǖ�g���;����͑ض9
-�|�/�=��7S���Ѕt�>��L�C�O�!�l�/5�ѓc�;)մ31�bG�ں=���[n�[��
c�m\�L�_�&X����'\=�*�����

1���X� 쁭!
�Bwa��0��$Ѱ���ѡ
1���&��T�,ҨC�h�-Mfٚ��ޔ��$��7'V94%6ҫ�V�ovZ�C�,n�KC�QQ}܈�.��K]¸c]"��0��I��i<d ����^�y�`�
�"�!���rF�Y3�]�yT�"�՚g�Q�f�^�`�MWsVK��
i��S��Ɣ����amr�Ku���o��䳮��w]�SƄ�T�קa
��I8
-�����
�F������s��r-P�Z�v���s��-9!���E�k�)�rkCFg�\k�tq�C�����-s�L_',����Iw�K�]uҿ�Io���q�ɰ@���p'��؋i��qꞀٳ� ����Rc�viy�]+!�hf�-yA�&u��JU����t�YJN�2ϮJQ�P����d68�f4	�孢By��V��M#vϓ�t����E��
5
-��*08Lz
�пd����cE0��`� ]Eƨ���Z�?A-E3ɦ�@�Anܘo^��fU�δѫT�KT�ܒ�r�8�α k�P��I����R���(�ܳ�7ܳ�^�r���*�s�1/7;Lz>q
'� 
A��R�����
:J����m(sEM�^��ğ�P�и�(Ƭ� Ų\+g�j�m��܂�RZ�W#P�
BU�QV�W���-Su�=#�*x!�Tc'�
�jLޤQ8�'� 
•�\C�T"�	��	�R�FM.�P1�h��a�,	1�(�6-+I���d���,[MQ���P�SV	�
-�;ej׻ȵ��e�=nR�q�4�ew���8]���,X\�i���P��%�28Z��2��
����X��N��vQS�K髂X���&�	�Z��:�\�Q-Q�g�9(J+��F��u�i���W�I�cn����(Y��S�
 ��üIw��y����pB{�a4�ܷ
����7X��FU7��(o�E�42
�Í��b�rkS,�k�lE��V^U�M�*�U.$W4	*�\��ݢX�q��0�����4��k
�3 ��!��A4�(AD�q���p�U�֩�Z���
-X+ 
-8"8Kl��Uk+���.D���:��Z��u�}_�Z���?����y���}r��?h��
<Oz�w��pf&p�{������|Πe�I��SaNJ >L1+�'Ǫ�$�;LZ�_3~�P�ec�^:A?��i�Ö���8�g��~����&�h�;���+�Wƒ&�^��I�>��7A�R9���
��{��u{��d�*`}��¬4=f�15�����x/��j\j�ѫ;��|�v���
������G
��X��{E�wϔL���m���
n�5�l�����%���$
ݓ�W��o�����y?���8�lJeҁ�5��29�e�g�a�:_�_�q�ڋQ�q���=�C�8���9N�w��n�����X���ۚ�]2�xu��j��8�
�Q�
��gCl�s��4و<�+al܃��?/
�b��, q=0���D�Gcr5����04/��"�����~�}T�s��{�r�e����.�r���,�E�v�ܜ����GD����������7H}�z�
Q�I���;��q-������r�i�9����Ѩ��
}�>�mm��V
⭱��5^t��Wt�S�Y����Nq�̟���X���b�ߢm��_�6����*m�管;�k莿+��g�s����'� 
��v���}��8 ��
���.B�-
��8D�z �6P��F	�m���m���m���m��dۤ�}���h���ͮny�c�!�xP:շ��n+�9
-�d�	;�������H΢�l@��@������Ѻ��EA0[T
�V%=вdKƠE�4+�+J�D��u�I�U��>%�K��ſ+�
-����T���
�O���ﳿ&3{���_3�[�������_�
�
���wE
.�R�.uC�K�ɗ�������"�����ۡ�r��AWY
�E	]��
omb�j�/e�?f�SX�hf�?�� �
rh^�U�?�����mw���fp����ػ��> ���p���b��P٭P؋!�v��I����/��3x ���G�������@�� S`�
�
-����j'hj��X�U�5@��¨#񥤆���5��kx�k� ^��]zB/�Hf�����
,d~Љٖ�@�ˀ�O��&���|P��:�t^��;5�o
-��@]
��a��\��:$�d���w�X���<sc���Ϻ�W��� �[�����g�Cp�$�S���HO2R0EP<�EY�,��$�<D�ߐ���~�!}ȳ%�.�9
R�R
�hͥ%���2h��N�K�+*��t�~��I����M��ҟ���#�e�!��Xb?!
G	��,�r6}Bɔ�ȢM��v�>���NR]����%�����
-RJ<Q�I��
hB~l!���u?B�����3LH�{B�̤�)��
!����mY��p>�:�R�p����U�u~�ߜ%
�H���x���]��/d�����Ϧ�{̽� �j�
	��~�O�9�^�D�.U��e�纍�.O<��Ot��c�
��BT���Pw��k`w%�襸M��t�
�����l��V�GK��f��#d�<3#�K��w��a��5,Ն�!]�j��r�}�v�a��2
v�7�Ἰ�}[��S-.��R\�
-�@��!�nӀ\!Cu�~�a/Z�lE�Y`<
7"
���{���n\$n������
�q͸A�h�?�����J�	�ŀ2Ey�uŹf�)�4�S�6��b*�B:U�l�|�
��	2���������ۚ�0�#�Z�ŭ���	�i��4�UT��$�w�T�9S��i��̴MuڴWUb*P��ԅ�J����c��
������
~�
�2W
����:b\Q���q�}n�E�%
��󖱢�2YQj�PYl��:e^��Ɯ�>iNs8a�r8�.��h����v����O8
2��
0��|a���j��|�t�m����GF8BF�"x�Y����;��
��ը&(�n��1�P
�O|3Bq"z����Q�t8
�/ǃ�K��G�h�E����2
j���Ī}Eb�'
{��c\jl!�B�!�$K�@$6�Ib�ر@��
�8��X$vl'�
�Y&��v��L��=i�&�I:M��m���43��3��{�y�9��^�+b?uU�L�$�L�(��8/~�?b.����J�Ϥ��T���J�>
�F�I��
��l��
-|,���Ki� #
ޖ�_���LA��YB	e"�d�D�
�G_���vQ��
����e�
sI��Z���OKB����/yȝK��3��kFJ0��}�n�3�уL̽�{T����
-���r��r\��9��f�W��
9e�AEE�r�5����� ��z���!֜l�=+;ŝ�\��2��S�����	����cr��0G��Y)
kX��P�!�J��E��Bl� k�d��J'�+RR��D�.0����ԓy����	��5���
���L�G
�a�Ÿ!�5�G�h@�h@�DЯ$���a!�0���\̜��
/�񨻍�(#AḦ́˚Ͱ�y	�4i�ӥr�)uQ�L�6�Wl�zU�DQs���=\��
,�
+����
{����xw�/\����:
	>�ul��G<�>G~���=<��𞍄��r9
��8��	�z1iV�I��E
זƌ���3�SZ�
P���J\ܞ���x"�Y|RԡZ�oS�'���&��>Ij)�{|K	!hQ<��� �0�*������A�-3�^d� h��E����0cJ!M�����aCq�G_N��U�{ʭ�.m#۩m�v����4�B�fFԤYJh,]K���N�i~�ɦ�[���ڴ߮%�'�7؇�� [...]
-ӏ�J!@xU&��K���>zpu�6�͘7�9��o=Fl��c�
�61�]�A�SF���4[˩
�
-���ʪ�n�X�;��恸J�q��ʟp��|����&]ՇȗIz�"���C�G�/�_p�3��
u�
8mx��
8ل���ǚ��y��RH��G�"��^m��Q�lF����Y]g�Tֵ�L�}q��q��:����4��6�Z�G�H�X�#*�qe�_k%xa>�}� g�6ּ���: �:1wv��w
�Ҡ�Mζm�֖Ljn=Lnh�G�;
-��-����Ze��ij�g[���nAYè��>_b9Qe5���^R��s|�^���b;�Gxa��}x��&ּ��+�?�1s ��[ܮhhw���~�{I6W*�֕I�v�FVvǘ:˩��
-zy{-�����ns�[��
-[gD����<G(A�x�sB����<!@x���!��=��������0�
 
Gܽ�������[�f���
5�HU�R��Oa�-�*�-�)�1�������U����uy�J��8�{I(w�����E2�g�,׿��.�/w�l'�	���3r�,��{a`z`�Dl�e��x�����$��!�v$��ɏ(VG
�c
-����A;=g��%�
pd�)^�g�/=vE��'�
�� }�	/}��J�	��z�:�`
�?7�
��8^�`�f
-��T,�||������
(�I*�r�/���+�PNi#��*��&�b3&[iRoC���yة�5�A�[
��S�x�l�8�:8��0wp7z��wa
� u�O`f 0��N��IP8ς�@���2�
��!�< #�y䌀�"�7DH�-�i�����1�����߿JK�ߡ'����}G�w���Ef�rÍ
`��X��`b�u
��� �����dc!#�i�9H�����Њ�V�IW
-IV�䔕J��;eߊ+bop$rO�T��२]��Q;���v��.z�2��,�c�)!��+���}s � @��O�5b,+�<*_8��5e���
- ���wu콚/�$�'���!�
-�aG�J�
j#m
yH[C��C��/l�A޲�	y�������_!"�[{�e�_D��}d{��
 *P�t
 ' y
`�� ;oQ`뛌��]PQ]y��7}fPPi�
(�
���PP��%G]O,I�EWE#Qlh,A\l(6tQC46K�b�z����.�ݏ�wO�w��p�w���w
<���(v'
܋���H�>������dZ�$�E�,��,�si
�J����g����|XH�CBr<(d��s
r��뀯��hf'07��!�_��R�����:�W��Ɗ����2��B_}�(�VM��*
6U����	M�	�
Me����0?������;�ϋ���gns�e@�@�Ӏs%`�����-T�MP^q��7�W;A�T��(���ĉ�ff>X�x�kU@�c^_�� �c?��\��p/0��Q�z
:��U ��� �e@�+ �n:Ԥn���ZpC��͐7�݀��3��!��/��o)�ca�؉����?�DZ��ڏ��CK���sw�ُM�>��0U�﵀�&��Ѓ�
)yo
�c��������ܤ���Q}�E����.>o9����G윸�����x�~�Q` ���:�ϞWX��x�}�ͼ{�~��⦆��5i`M��󞬉�"��C��FQ�
��l�`��.~ �� �<_���
��@��]�Q
}F�i
-ͦ��Iٴ�6�6*��TL'���;<�wx���Pß-����l
�٦-��/����!�9M�J�%��rh
�S�a�޷
�q�%��Rճdo��6z�'D+7�l9�����/�6B�B��Ih��Z,����=�eB
3�2��X�'(ar9��
��!^����H����3DG�����z��p���t��s<l9
�a��4	��3�F=��@:^���\��'���WmB�� �T����~�mU5n�
��5jmjt�6�����2��� њ��.l�?�%��I$�?�K�Qxj����0
�
�����
�qǰ�
p˰7
�Pk؏�qT���!�ۿ��@�IHT� �ӍLMD{;���m���
^
�hp�g-{��e �;�m�1���j����)�N
q�i).9}�
Nkp�y�:�@��^T�
E��y�lyW*s})��
-鈛��݄�p#�?��(Iё��e=>1�E;w<��;
A��&W�
�E��8�>
U�Q�1�=�H?y,�NxdJ�<��2�u�Q�-R��.�����i������OeE�B��v�W��jz���/�+�/�
x����=�K{+�~�rK
NX���2Z*�L��-��!K��e�l�%]�ϒ%���#/����X
-�|�*
-}�)v�\Ul�Sl�}����M
�bc#�?4esZ
�4����tU���
��\q��/���Q��]�}��IE�cd�����O��Δﰦ)�[+�ZW(7[sU��ͪ����
�#���s�5�����oP�t�U]�*������60�>��k���t&T�� 
��Q
�?w����Q�=F*N�m

%�
4N�)h�"/����_���W�f�Wdkr6h�vج
�o�"�nY�o�̠6AB�m�А�c���̿���B$�Q��~<�)p0�
Ea
�W���
���HiC�x�ڰ��ܰъ��_(�{NV�
��^
���
-]d��L��k�$d�>=�H�(�aAh�a^�S}ZO�#��=�vn��4ݛ��jfWpj/�s'Ϡ?FJ��׀�7�G�bCdr#�H91�������Pf�
��蛤^�'Y��g����i���3l�z�2�	�h���8;��8�������R�}J_�#�6{�܎ ~f������췏��l��:l�v�ژȉ醕1aRVtYFt�b�aʅ������&-j����i�ّ���"�
)+�G�7N��i�q�4%�Cr�c��G	;ғ�=�F���� ��Y���c�P�'p��Fn����XoEF|��
�O� v�"-6Q�͠���hfL�ΈI�M����=ߐ
�e�
��41z��W�
����CR�[c�@a [�5{�砚}>�������)8��	
-|�`BV��
����`)-��,5!Z>���ʔ��U���L��M����
7]?1n�ݗ��bW����q\�>���r�{�c����
;ғm��|/�����#Y.��h=?g�o�ÌX<�5��/�e�����
��
�GAk���!�
�#@� 
A����z at T�Bt]O������Za��]��-3�um���n���~���L����
_�|���?��~���i����扫t�$���))2k���89ǹ0��Ւ�J��T�2k7�gk[=Lڃ�Y�S�L�^�&3iH��$���%Q�S�����{��
K��r�ٻ��>�5��`�:�d�1�U�K��k�R���$iAz�c~��97�⚣[�X��Vu���

����'4i��^�ԛ�4�#u�NpK�	J����?��sY�Ij�����e�C?��1���4�Lӱ��ظP\���!?k�Ԝ�s���r2�\�
V�A�Z���w��mꔌ����5I��^Z�
��Iz�-Y/(�b�k���ی�8���(b��q��1;�¬A�y<��/��
,���Ź9�$�9	RSv�,3��_nvI_^,י*�)�
nZc�:Ѹ�#��M��&�����x��`�D1̧���L����ڿ���bI��c���HQbQ��`
,��-�-�)�,Q�L�R}~�,=?�15/�99��U�W�H�]��������k���=O�yƘT/6
*��5
�a�pݝ�'
��恥�.���8Vr
Vb���k}9%�`*	BfI�H_�P�f���Z�I�W�ɖ�09%[\�K�Euʘ�-n�E{�#
;�E�<]UG��
Q(�"
ed����\�g��S���V�k�z�e���r9�*�a��GF�4�*CD)��⤊E�Ċx������L�ūr��*q�*��/,ۤ�_�[^v�-��,��-��*�TP�[�
-m� ��
t3��� �[k�7ֲ�!%u����NH��@r�Xh���v��或�E�c떈cj����
iDm�lA�
-����sk]C�[�WQ�T�YR3�YsW�Z�א�眧'J�#�o�n���
X� �L�m!�Q�%�#�41M�����pQD�"т�qx�N�hrm,���X!
n�w�ݰ�yf�a���^�
�̨��<c��<cY���<���:z@�-��[����}����,m"[\����mc0���lA�k
E�m!^�ŊBlI�Wm�,[�$�V&�޲�aZ�M:��lJK�,��#Y`�w��m�,`+�"8s�9?B�6����n�f�
(�	d�҃�@�^`n���J�n��,��쁘a����9x�
�i��0u�S�-쳊&�k�������O���/�Ƿ+��g��
��o�s���~��dܛ[�wq
��:hg��X�1� 0�0{��RL>�¤c>���	
�x�c&�;�b|G�:1�S�����Y�Q��1��
#:�����������A�s�9�����|�������

 ҩw
X��=|�}鄓���2�v����
��q��~	�� x�́GO4�=ˠ�5½�
-���P��B��E�E(z�<���(O=��޷��z�]ɸ-��w	"N !���
���t�;��<���
��J��i��7N}���7
��PH��I2$�9��CԿ����p���;�����7�q��BƝI��S������
��
0�"��@�!�tI�e���Ko4pe"
�WX�0��/�#�t�pL���.���#?�o0�5�w1c�b��z��x��;��~����~	�3
�' �M�J��p
�T,�=�/^`Q�|9��Y0�y������\t��$o�>r�|O~|F�!����Dϵg�/P�d�c��E]� c���An�ArKĂܑ���
l�X �� �Y,?`���/�G|��b‡h�E��E>{F)�[6S�Dϣ�
̘.c�	x�6o�>����&��w	-C�}1���<%�ă�=&�Y�E��y<�����N��
�>Cp
�m49q�42�,&�$�� Ud=�LZț�N�r��
����qO�?�/
�
-����z%q��x:�)$�D-�"d�%
d+�A�Pg?u�1��q
-��
�x����k������%w~���A�E?4���t�N"��|G҉�X�y��8�&>y;uvQ�
?� u�R�8�ۃo�>�?��pn�A��+r�7Fx@�q�nT
�\�9�C�41$���[���1�j�l��f�4�h���:�Ӆ/��u������<��;����H��T�}Pem�:�X5�$
�p
1$�$"B<��x-�J=pQ�깞�jkkն�V�c���uW����m;�
뻏��:��3���̛���~��۴�o�7(S�韮W���_'�}Ք%�CC�P>"�QmCT��oB
-~�Z���C�
�j����]�����
����FҊ��6\�l�U�~\�
�_��qQ�
�
�B�Y��OU"��1J����� F* �!�zR}��/��&4��� w�
|���kuW�a\Q�Ɨ����#.hV�s�|�يs�=���1|��
Nw�'#
��k"�uq���
�
b
���
$?��-2�z����p��۸�%W���b7;>��Ź�U8ӽ����z4�Þ�8ٳ'z���^m8�k��:�C�O�`�k�����O�]�"���_�ǘ�٧����1�-������O$.E������&�꟏Q�8�Ñ� EO���g`�
f_�BfO�r��2�lav
��lp��x�ix�m��7�1Fd7�w_A
B>
��'����

]��8\�Q�|L|4h��9�'�6{�6���`���ٮ�f:�S�-ڙL�v.�Y��ݤ]�n�nb�kwr���ܺ!g�5C��V��_>T�-È��G
<&�w銿6��Z�Y=��[|0,��Ga_�p�ҍ�6�	[tyجs0�t%�z��m��u�:vMl�*��[��/�m�[b�J���,ѝ�.�ݒ6�x,m!J�?���
-O��?���$�[F�M|@���380J�]��b�^��q��!ވ��,fM\�2��]
Wʶ�UqK�����i�B}��Y�HҤ_%��o����5�O��W�����̸��񢔐��O��%R�k�L����!jy{�Io$(�'ClH��&���$�%���IfQ��mN�pM���<C��c���6̔6$4�f&,�'��OK�!�O8��3\P�
(�$>�$�2BZ�
-��
�P
��)Ҟ�s�=�n#ڌ2��tŪ�h����1hNMa�f3sR����N���a��C��1,�36
-��K�5����e0��j��*`��
-��G11E٫�` �S�g�����~+�O�fz^��b�)K2��9s�G�1s
Ӑ�����c���
7_k*�ԘҐi��:�A�/�OL_��LoWU�P���Q����*�L��,Ch���>��rp:���>�i��B�z�eE6�l
�r��1�M4侍��>'������d[�P�����JY�Ҫ��2�
��ܤ�W(��6u�y��8�Ɠu��E����^�W�(�6ҜN`g!�XK-	�5?O�Y�=1#?��o�v����`��
��UyvΟ���-R�%(�Z�B�e�“�LU��Q��ݭqZ>�8,�;9,?�
y�™'ʝQxɷT��d�8��Gڳ�����X@~�*P`���ڢQ3a�6=�$��fb+
-rٲWZPėX}�5 +��	.k��a]��[׫m�]���NV�M�_j�UTXE�
�gܤ:�![G������-^��]4�:��u����&���r�D�����i�י�;�����

^��Q%��k�}��j_�
ooU��wj,��\�u��b�����3���^�

��w��Y� �G���r`���C��3��}Q�ye

��1L��ȸ�f����nowKlE~���F�/zGn)\��)\��*ܮ6���,��x�2�Js�� ��KtNR�S��*�4~�$�'���j�+텒�x|�Q䋃�7�q�2�	���t7���畖Kr�!Y�w���]���Q�{;Tiޣ�T�ď��Q�V"�_ <�3:�S
�P��4v�������N���O�~%��npUF�Q9�F����X�Ҙ��l�Ri�r*
��J�$�?I���R���F�*Er�Ve���*�I�X�P�T!*��E9!�{�:��;)��`�Tҝu�i
�/>���aB0�H�������1șld�B�Lf(�5�
\Z��O	N�$�I��2Cp�0��]
<��^P�U� ���T��$
-�Q��S���o��&�7
h"i4�L#�UOs
��:
��{�\?��a0�G!=���p:c
�0��66)�a
�~nL�>���\�yT��Ɵ��3,�
-ʦ0
�'�-Dk�$F��5
O46�5"�eE�
8���H�pj�%�����&*.��TӨ(1�>
-&������y�{������E���
-�9�^��٬Iθ�I���&9]h��Bm���^��]�u
�
KY�+Ǣ�V��w��dX�'���!-'
�Y�0�����0������g
#Y��T����:Ga�f)�r
-�/�lV&�TƜ�Ҙ�Xe\*T�%�R�=PC_7f1�&��y�e
Vr���� ��d�ia���=�����H����>}��BR�8�Ο,�$�}�o�ɽ��X{�
c?&�ؾ�c�~RĬ
�v��yw��R�@�Դ���`5�G�Qk�׋�W�I%
0��PCi4�K��+MA/�@�t
C�c4b
嘆HG�;r�X/us��
�����Rغv)�XH�k�����}/�q
�;�z�8���x���@�M�i3_�pz"©G�3�*�ViDhe
-B*"�r8�*Ǣk�$T͆U����[U}���V�<��B at _.��S
}�YԞ�qp
-5�Qod%0�0o��6 r'��Է�%�\:�+���2�A�v���k
<]S��ʄ�e��Ue]#9K�@U����
�{!�m����y�`<5��X:x�k���7 A�z��>�
��RS0�\$1θل�y�Y��<�n&� �;��|�&�y@�/�a�����r`:}�@����O��=@��@�A at w�:(�����_��h�
ʹ�8C;��2na�oa�i�&o��-\��
���?$O���9_H�g� ��F��W� �
���c��$��9�ϒ����j6@��Wz�BW6���
.�Ao�
������ʢw����^����Kr�����N`���'��N��f���nu�N�_����_�o��JV\Wp(y	��es̘|�A%��zp�v�ccp���>��&�7V
lc<�.=c6��$�z
�=�0��8�����WO]�
Թԩy��$�&ߓ��Bwp_��<�v
�1=H"a�,h�`1���0肉�g�0�P�B �D�D�*N�@�#3I�"����2RN��N�@��I<�7���>F;~�v���[�.�vB���-�ӎx�J���d"���%����"��SB�
ԩ�N
5j�{� �q���|�˿�C�?��N��?D_/����b"���Od
-�fRg>u��
�p6�Q��)����\s;SU�[��wh�W��p��}����+�\�D�� �Z��BӅ9	����H^!����M�?Ө3����m��&�SǎXC
56s�jn�ݸ�X|��8���%�:�U��j-��
�@o���X� �^�z��XH��o2�
L�7�7�Z��3�����X�
Ȧ�
-��󸮥F5*p��hf,Nc<�Gi�a����&
���U�nO�G;���<#pW��
-
.+���m�W��s�)hQ��窏pJ�'T98���Qu�KpH�nu5��uد9��
����:��P�#�"uO�
-�v"©
�A;����*<�
��h���?��p�{ �}���X
�N�!��pkg�I;��,��.V�U��OuEh��u�]����.�)l�����m�
-p�-/ XbEw
�(�K�e
��*\�y�>'���Y@*������o�1�zuAS�;hv�cG�bl
^��;�C�Q�	��T�6`s�Ql
-���n?J�p!���!��
"���'��,��Y��<���
8�}�h�HBm����cj"G�:r<�Q�Q�ʣ>Ħ�
l�Z��D����B�4z�T픊��51n�(�T{G�����U
HOi�c�{��W����T^o}�kd4�h��g7��P���i�h�2�X8
Pbx�
iuB�T��#�'�I��b9/a��2a��"a���xF�q�-EN�cEv���:Y��=��k�=ן��@�|��U���߶�^p�Ħ�X��cBI�Xc�զQ�7���4QZe���k�!�0}$-3-����r��P�e*S,1mU,65*�N*$�Pf�)盅"���J��C�ơ�q�s5�����>��}{`�%v��,iȵ��2��j/e[&IK-��Ŗ兖
y�%[�a�)�-%�y�j�ť��e
�y���ޙ{D
�K]
�q�D�pFf`��f�����D�
-5.�K�q-�5z�X��Tk��Ĝ4�mz�5m<96ij4Iۓd� 1��w�=�<��������/�*�&~,�$~#�$����h���������he��3x��9[/ �
��)�I?-�8�7��`�s�l�ِ'<kp
-��
q��J��4u��4�����]R����՟�+
o�z�WryjH"�>
�|�z�e�m�A6�G�#�����ulI�����1kLs�lJF�ɄU&��3-���X,V��U�ZM��I[a�(�w�
c��m<�+1�
Vl�
y�+6��"SH"���?�7�w��g����:x��u�H?6�#��<
M�Xm�E�%��4�X2�E�Z�
-�S,7{�2�
-�ۼZ[b~^*6o�]���B�e�Ka�?�����L�K�^��Z�e��}%�s����4���k�ah�E��I�٦���*�
�t�۲�m�Pj+Kl�b�ͫq���ֵR�u�l�����:��l�sm�/�Ԭ��k�Cz�����u��]˸9��D�q-빮�l-�#Q���W��
-eʔ$�#J�L�HY"8�X���r�]���+~)W�$/U~��Q��)ʅpEy'<[���!
����܃�Y����ż�1t7����|�ۊ��Q��B��Ru&����T��@�
j���:�\�L��5�
�IRԀ�Xݭ�R��Y���Vx��O^��YՐL��ܢߗ�u���J��@�o�/��K�} J�#Pd��c:�9��p��HG�#KP
���X&.q�5َ�,G��jo�2�;u���q.,�q3l��>�����P/�����^����0GO�4l��^\N�G�V�
G�3
-���w>�<�\��$丌X���]9�b�C��J�L�Wcq�Ҧ�6H&g�lt
ҥ�^ե���Ou��o�4gH꣰�+y|'��{������X���[�r

z��TB^i$��1�qO�➉ŞdyRa�X���,�|!�S$.�T�FO�&ͽNkpo�R�
r�����F��I��II��>�KB�^ޠg�S�@-��H �z��������dW
BV�HX+' �;
�<��)XTe��ʆ�U��VU(�eb��NL��,�n���
��{OKqޫ�)��ڸʐ6��'.��S�8\�>����8��4�ʕ�]
�
\��n �
��~
�OF�o
��}�H�Y��S��s	>�����Ź�͚پ����S�X�[�����hb�B��ڟ8�
t������f`���5�
���|?`��
�4Hn���X�<	�S1�?��$��0�o�
.f��0��f��i�������8�Y���c��c�
�1������Q����u@�fύ�C
PD�3I&s[�1�ef��ƌ�hLo��i�q�ڪ�3�fL	(�
(@L�
с<
؈	�=x*�)����`|�W��
�~���K����wQ{s+=��o�^�[��6 �Q1�L�Lj��ۢ0�m,&�M�S�X<���`*�30���`1Fk��Z��ن�;�aX�"��FԎG�=�a��֐��Q��e�۩�B�F�T'������%`�^ v�����>�ۣ0�}
�ڣ1�}�t�'i���;w,Ǡ�F
�؂��
h?���[?�
�
�C����Az
dݛX�'�$��b��_f�1G�
�	D��qrº����+RW,�]	�Lz?�]<X�j�z�bNt��x��|�M��=�|k��[=�tw yG��_ )����h�I�
;
>
�� ��|��d8pa
�D8�vs ��0��C���K77[7E.��
̹��3_�oI��
�}�^��3��v�i=�E�W��G���A� �
�a�:-� �Dr �:���0�������
3�G�_�l�����]�B���G�>Z�{#=�`��7����ԧ�_�_��	D�Q��ԾI�@�!�j����{����r ��a�C�я
 =��aO�p��a���Ȟߓ{��G{]E�
Y�bj���٬5����
{�����#����|D�c��1=�GO>
�g`�|C
�x���/y�=dO
��4��
r��j��b��E �20�*��;���o����!���"\>�'u�g�_���K�H�
���2�������kDT��}
**	��EZ��n��nh���YDQ�A@����B"2��b�M0�1��rRV&N�RV��8ff\*5qܢo~�T�����������{�=缤O~���l
d�!�H����u��'3�en��� ��D���ٍ��^ӉYD���d��d�"�d3�Av����t�S�"�oq?���x�W���?���"�

����~�
�1�
1�t�K����l�F3�`'5ڨq�s�s
��g�#>��mj�
O9z�<&�ȿ�?�eg7�N�
�&��qd�OT�@���E�ꬤF5j8s#5�P��{8g;���V��!}� �i�_2�:���2����G;C
5��ķQĝL%��_AԌ�3�s�Ө�C�Bj��F%5j��H�-������_�'�Q�B/��/�� }� �M�oq�~�$7� �
�/D��Ác�
��9}�r]*|=�c\|
ur�QD�UԨ�F-5>��V���9��w�d4��o鋫��˴��
���wi0Z�"��6�;ٙ0�eG'�\�;�k��B��q�5��J�N&gͣ��p
�y]U�
-��D���h���9��Y��ВS��G|��k
w�ql���C�y�e
����
����o$O�^17�����x�
��Ұ,\p��9�b�u,Ǚ�U85|z�6�S
�9�G��#�qGF^��Qߠ��1�]��
s�h��!ȓ�����x吻|��!�+�ȍ��p�y~���.��
��)�D�pM�1�lt�-C�[	:����jt�mD��6
to��O���$�x�m�
��}��qo�c<��6�WL7OfRߛ� 7�0
L.Ot�%wW􎝆��|�=^��	�����
���}��`��M.�k�:�-S��cJ
�O9��S��y�l�v
M�=D��+4x�B� y�4�����������O3
��:
-]�&��s6L���*���g��sf2�ϴa��R4{b�W��*��U��Y[Q?k�P7�S���+��}]��s_���\��u��S^���}�)����ZO.���;�
��v{{b��s��%�}4h�1��'
>Vl��D�o
j|�P�[�*��B�o��ηUX3��P>�G\=��X6rޏb�|Y,y�P<��\��{-��]�~�t���S��\ `�<Wl�?Mz�a�?��T��ӡ�ψ*?
*�ұ�/�~�j�R�̯B(�oJ�w�E������}bA�]iY�b~�<@����}��6�/G��d��&�8��o;蛦 g��G�B/�*h>*�a�R��J=ʔ�X�LA�Ҏ"e��BY$,W�
˔�b�r����+-]�--YtI��#e?!��,�C�G�߈.1��0�vƲ�1 -Zָ��.�	U�c�6��C}P�U�T:��(P��L��<U��TU �ʄlU����$�U�%[�)=�"-�"-��"5���.�#&���5��
����C�����4Ўʈa(w�ʈ)(��F����5�U둣�G�:Yj�`W�	6M�����4��U�*�h+�"�*,�_�(̑o$s�,Y�!�sG\�{��k3{
���|n�{
��kEG��0j"�^����m������`���� M�.��r��
-1Y�V���%�n����P�G�Q��o(���D��1
r���q�)jw���ge��g#߫���v,vF��qX���L�l� ��C���D�ހd}"�
��Ő-$�
	�r�d���
ۥؘvEL�i�!�B�w�Ȓa7xP�#����} ������v,5�@f�2�Ӑf�ո ��`X�j��#1΄����)�	�q�D��Fԛ�JѦ�
-��G�5]SD���2��X��{���sI,���βoW�Lj9.�]��Þ��7�$L�%a�#!1��p�%�`4kN��l��<!�\*j��b��YҘ�Kj�	E��sE��>y!E��_H�����^����X���<�j���
�#5Y�%�	�`J�c�/bS`H	�����D[��ZӅ(�RAc-"�Ub�u����B�Ǥ��+Rp�R��9����_���P�p��|�	l6�
-�
iG}�dc͝>
-1�c��x����@k[�H��b���[f�B�+��:q��#1��&.��헥��{R���h��2�q��<��3I��+�s��#k��v���x�a�>�Y�=�D��lvBP&-~�����,�"d���%�Ğ�X��VjI �5bԴ�c�1�Z�i�C��vZ3�\��o�1\r�{��y��{����lb�>Kz	�4&�Vq�.�]#�4"!R�hX�0�&>������'����dӀ��~��M}��̽������5G%]3G%>4G%��V��hd���e�T��>`
- 3��8�E<�gTJ�&;iH��bR�48%LS�h at j����T����6Q}Ҧ+:m��Ҳ����+���3m�),�)t�USh�Sh��d���Ar�Cc#����˰ 
Js��z��2������gکO��zguStV������_ٱ
-ώS��	
-˙�М��SP�E9k�S+��c�͹,�����2L����/���R��X�ݲ|އB���}��0��	����f�8*��]A�
-,
V at a��
��Zƨ�e�|,3�mIU7�"u����e�<-��\�Ga�<�X����|�"i
z˗З�Q�bjP"M�1+�X�
a��F�J�Ե�C]J}�U"ϲ(y�
�{�H����k��r)O�sy��)/�S�f9�
�C�y9�~#ǒ�r*az.nc[
5(�X��hda	�V�>���c�F�g��W�A+%��r�:���!����-;k�l�q�l}Q
�3dcMW���2U�P��
-#[y��L���@��^�R�E7�_W�?7Hq�؃�R�)`+�5�o�
k��Tg/S

��
|�!��adg,���@���PՑX
��uw\
����xº2�����s���/���)k�S
-܍>i��
ޖl�oaHa1��~R=Ci}_�
CP
������o���,^�Ç���<�OXI�-�A�	��Gh�Foz�<�^�Òs�dwT2G��vN�I�8E
�a�g0?�:Ǚg
-�hrM�@-�H���|
-�����/�:'����
��֣��?��<!9�׉���s����������E
�%o���*q|�`�	N3
�����sѼ��&�'����gS���y\��1)�
�OI
����ԾU�C�l'F
h��§p���Ĩ}�j�0,����]��o9-4�^�W
B-�I
�|�r�v�w������뇮;y:\���X�J��gp
�_۪�p��{f遭�=5�����b0�
)�T��@��63��8=��
/�0q�L�Y0r��C9�+l�����n�׿(���O=ҏ�����w�v���Wrnǥ=� �
#`<L�7 2a!�/�c�'�Dc=Pڦ�[uPt�s��3���?��v�V����Fk
��������"`<���g::Ih��;e��EEh���*֯`�M�����b�Fݤ�u��r[׈���>��<ŕ�l�d�l��l����j֟��%��hMFg&����9��G�E�q\#���d������G
�
�(�+t��|�+e���`؛����
�=�vE��Hr��sh�@
���:s��t4���C����j�Q�N�F�i-��
9�c<u�j5�Y#
-
�Էc�b��z���;��#�w!�`��sqQ����D�ʪo�1G'��
�8N
�!�#Z��kuX9�z�Z��{���K�B����A�S���y�[�x݈�:��5ud]hA>�֋]
DN��g
:��C�GaoA:���N
:K�(g�Jm�5���b>��
�i��-m��P՝
U��|�Ǵ��
���U�����l';���c��WC�(
�<D�l��v�vڽ�Z���n��dm�����
�ѡPV�bU;�U��&�wܭu��Z��;�r��r�G*u6���P�S<B�+��������� �'����I��N���U��	��~��2\�\Fk��
�r��
-��Z皠�n�Z�6_+��T�[�J��U�^�b�Z-�8����U�ק�ty�������k�şVۓV
ɵ�׈`������z-wV���6z���k��u���F���X�vQ%ݧh��
-�N��T-�Β�'_>���N�z��M����=�~W��O���2��|�u{�7W� �� � ?w1Ԅ��Z��Y�����?T�}�40VE�q*

�����
zM
�f*7h��+;8WY�E�Y�y!�
�GsC�+-�)%�)��a��_�ڸŵ7�+x(��0fl�#Yi�k�͊P-
��%,@�=#��� ����^���+e�O���iJ�WZx�R#2�
Q���>�����_�
-h- Z�E%�Hy!�@$� 	�$�BТm����������N�!��Z��ҭ�͵
{������3��n�u;�֞vN�Z���!�~��>��Ͻ��`͊�O= �S��&��'�,V��
iw�� �$���uL�s�������0��^5���K>[R��)�G{Z
-6�g�-=��X�a�ڌ
-��pŸQ��
?|�mX��
��
-o�^��:"�Y�D��X��\�f�!��U<ຒ�����X�`�d?���|���lΞ���H�)�E�k�Ӱ:;�9:�rLh�)GCN�9u�����]���Q��-\ʰ�Q�j�IY��̡�T�P/
*IT�80��Tf�?گ>����8�b
팣E�5�yhV-�O�

j����
Q��`e�
�<�y
��[���v���&*�w
��_�4#2��]Y��&��H�4c�O�79��rZM;렂
��Ʊ��	�_3
��9�j���&c�6.�N�
�:�t�p�Q�����æ_/��'EY�QZ�'�
�̆wd%��["�G���+��
���?X�u ;i����&
}6��0�(�
�Ӱ�9
�lT4�
-a+,����ƕ(5�`1��h�(.z^��ɊLC2�iTVh�#��H��Ec�[L��y�B�~'���Z$[��s���8ܦIp�f���
-�b�L�a5e��X���X��0��QR�Bq�*�[`4����(0z�Od:�y���c���/"ɴfI�����J�G�=L+���s�����3���Y&Pa����0�J�R�
si:�K�0��PTf��̊��ʽЗ?]y��X���}"�z\�lo�T����Be��(����me-�r
��A/�{"�z`-���]c,�M���b{,��KQhO������|�+��U�A[Y��J�*WC]���[�:��l�1�p�YU�D��+~����g9��� ۀ}M���.�G}\��fN*Kq�C0TGB_
]�"hj�!�&y5*��P9�P:+��Z�lW3�
�tu�
W�H�=*�gDj�U�O!wIB�
�F���s�/Qw�Z��ǀ'Ɇ5�y���0�(�Ȑ_�{��8���C��A�G�L�	�V��;�V߈�� Vx��2oR�/#�{Z$y� ���H��D�G��qK�U��(���=�C�$	�s[�*�e^
�O�o*2}QH��GZ�"țR�ڔ�M*,o6`Y���UHj�"ѿK�[�'���?�����m$4�CB���$�!�s����;ڹ��'�Z�g��[#cR3���	Hi�@R�
$��bi�,i]�G[Xܪ���		;�u�
�Fl�
�1��1m�an�%�
�¼��"�EB̺1�q�}����~��ux��@��s
`�3]�9 �;�v<���Y�휋G:㱠3�;���ż�
-�������
!2x��Ø�����cf�0k��}6J���s��l���O�\�<�N�DI�d	�%s��"*���\���$�����1#d��SC-�ڊɡ=��}
��c�ӟ��1�K��mc�q��[���g���<؎U�`
�4��
�H�v��f�'`Z�
L���p
&� �4Ba�����{y�����,�0
�`=��z���
-�bc��'.���.��v7u7R�j��<x���d�����L{�}h?�o?�p�l�����
�
���3��`!�3��
����n����pHB������\�}�C~�F
� �3�0��G��y
��
-�����da
C���8�8��M�/�
�#<hFXH�L�0�����o�M�	/���s+���<�^f
�9�ZF��!��0�0�g�~���?lJ�2�Ǜф�m�����(/�Q
p������a�AF����
��{��|�gn��8�N�_��I�fs	g�&�EMN����8�/�%6I�f��
���s� �_e
����K������Y`�9�ϓ�ɗ�[�3�M?j8�b�NS�,돚�Ԝ��q-.#�
�²b���G�w��2�)�
��&���8�o�M�-^|�x~��w���ͺ��I����3��s���G��ԍ���M}�c_�����3�I�B>#%L-[J������pm�c�r�����6��0��%&^��J�����I$�"��|�H���L����8��x˥^ȩ�I 	�@����@ 	� �\*""^��b�2T@�W=j��>gm��t��]�3�6�v[�����N��vݦs����T��|�?D�~���;��K
�N�H�#�H3i#ϑm���%��1|�I�1��G,�C�����y�|G
���3��y~�g_2��)ѐ,�O��"Ưg�F����Cld���b���O��aj��W�L�� ��#��>��[_0���o�6��9�aOƒ	#5	&�$�dP/�:
jT�ι_������72~�w1�N.�~�v�p���:��k��ߤ��0ڍ>$���<x�0z�
��oD2�D|�Z|	
k�F	��5��Z�o`�&|B7���q�ܲ�� W�8�_�U��m��/��-V��
-WțO!��S
�\�Qs2s
fN��KƟ�/~�l�Q@�RfV�_�ǻ���e���}��Ǜ��N؃>��%����q��αRg�r��r��
a�ga�������oj�^ԓ2�4j������Z����}\��
�q�>���)t�vpg���p/�/^�_ğY�op�j�G�7�0������8����=]���O͙x�ԓ3��I�<�87+]J�j��bf�@�F�Rc�n�)����C���\�v
�
V��{�k�4���W��y�?
��C~9��wy�D��)�B�8�%3���/
D����Q���U��^���j���M��
]c:�u�t�=���'�y�e����&���I���-`�S<��m^i���:����?_���
���|px\L��މR윤B��=�Vt�8��ǃN�2t�T�9�%h�]�g}���w6�vc��>��
G����c���h�"���x^�Q��y����1��H���}^���
�Y�:9?�"�� 56�qj66Lub�TZ��GK�B<�kW�)h
Vub�]X1����e��G��;���Kf	?�6��I�:�����E1g
~��
s�7ڧ�mF���eV
-����5�f4�`Up>V�.���X6��!�QҌ%!�X
�5���0�<�_Eu�g��x���G|L�w��
-��d*g
>��
�I��ǚl���)X>�#��"B���T�GP����\,�S�Es�a�jTϭC��FT�mCyT�G
@Y�̋ �Q�o�
-O��}�����؂
ձ�!�|�u�
iKd�煕Q~X=u1���cQl2�jP
kDe�
qN̏�,�
��Q��⟠H�n�
(��D��
-�•�
�>��.S�L�
�>{H�h��%��kS'�F�$
$���Ơ\*C�4�	z�$d�(�OB܉�(L\�|�2�d�p�:��F��8�7`O�9I�a�0��x��'29g��I���i�gk譞>�'�B>e�`���H!�[��B��IF��lp&9�H*F^r%��K����)�)w"KyU�Ȣ��(S���`����n�:ظv`�`볎>V�G-}�+Ǣ$�
�t(#�R����#O�
-�J�
�٪\�Rݰ��#+���F���¤�QsD��yUd�� _Ad�� ��s����6x�����:�ْ�>�����(�}�T"O

-�:��X5)�h�ĄLm6����KaL�A�n�6�tۑ�?
���Hc�N�A�F?�V'�.�����w��/����Z�����d=���F�. V}0,�9�ԋa�+`ԧ!Ð��
-}����Bk\�q=�L�H5
��|Q�4@�A�4	"� F��'��Aj?�xK1�#�M
Q��2�����g��L�d�L3�a���

�Y�t�
-Z��L
ԙyH�!�RU�2�d�"9k����^���>d�{|~y�0���B�c�{?�wp$�(�^ �J��5�ř��i���� h�!Pۢ�f�"Ֆ
U��lR��H�qC�Sy�R���H�o�Ծ��s�G�Bl�$v��a�3�#�{/u�+9�Tq/𹼜��<����\z1:EP�yC����YH΋D�#

-�
rGd�
$:m�:�!q�A�E�k-b]
����g��|A
#�% �9�i�?��wQ{�"��>�9*V�K!G���%�=
�B$��A���

�;��y�� ��@TQ	��`NQ#"�7#�xŠO!��m�9B�
!�H@���+9�~/�;9�_
-4��s]�QQXW
�e�u eߑE�=�-����f Q�(̸ �`T
0q�8Q�U
bզ�A�lVMM�`L�6
{b�CRc4�h�������o���w��{
xm�c�b-��fJ�M
�`�P��W��`Ř��Ք�hSE�(�4\������l�dZ��R��[��_����yE�`��o�جloCk�i�Y�Χ6B��}�3�U�XO�|)�uF�(<�K�9]����$*0��r��?w��rS�%/C�y���{I�y�dȫ�W�{�̻$C�2�0M�icv�E�F����C	� ��������]o�Ǻ����*_���c��%N�Ӑ$O��,�L�[��f)��e�\,{�d����39�oɥ�.�����߸H�\�y`[���t� C��H�H okG�[��j�V'k�\��r�v����:Z��u�
�$��M�ℵ�D�
���\���C��-i�
�`�|91��]%�^&*����YH�h�r���U6/�֙

4>6����V��v��
-�dά<Ȇ3D��$��ͭl��J��a�b��WS�2��m�zAWڄ�f�_��0'��xn����i�]�'�
�)�vba'��l�uPC!d��|�R��[Y���p����
�1�5��6��v)��4�0���wI
w���v ��j�Q�:jXG

��.@�Z.�Z�}-����K��b�����na�14���,��tt���N_tb������\�K���K��3�4@
o�/u��a���h�j�!j�6p��EN�c��$\bq�'-%��r?�=	��k�g�Y,zA����&Z������@��q��.�I����X��4i�Á=9] l�i��x��3�o�'3���#MF{���-� ~FK.�w�uN �Đ��v>Q�@$M1p2 u��1(}��\�����4�׸�7qț|�m‘��3�}�l�d�� �I�ƿ�>_{
�
[4�Ү�)���y�W�P(]���%|
��[��6��]?�>��F���C��#�c6�1��q��F�./�l� ~
�`0��)`�
(�b��J��zآ���~d�|����i�s���Y�;}�/���\��p�e�d��Z�
���AwH�0���Ŵ��}��k1�˰_�}�������-��
�:��5���5�u�]�|g��u
N� �����|�OC���x���̹7T�}
�c�
��ضa{�.0��.�S���0��I�
����v͏�C8	�Zנ������"�ZI�J��a/`߈����"ih�~1���/Ƕ
�����\M��?�
�Ч<~���b*-��a8�k�7刦��NƠ��A�Bc")��}�gc� �f�cߪ���^��N�������*�ȎSD�2����P�-�T+�nK�K���_�������ϡ1�L���4ʓI�g
�#?��EhX�����
rc�;Y�v��O^��}�5��1%�;J�U���<�f
�ȋc��Q���?=�IBg~�E#�ih���4�S�N1�ehTh���oֱ�5���HUD���R�n�|O��FI���7�c]O�;�99(o4�ыկٓ���p�>�h���i�#:���cFg1v��՜\;���
ke��ҧ.���]�:6k	�8�q�W:Dy��{�+�e� ��Pvw9��]��
�Ƨ�im��Z�q��
G��i�V9�h�s�V8��s��\
-��e�J]�*�T��N���u���A�2�_T��=z6k�\F�����X�ᷔ��a�w��͆����SUn�Z�
�
=�̣����U�9R%���3E���i��I�
�
�*4,�\�J�hX�|���~C9>�5��f��Sv��Vf�s������p��N����_Fъp��uQ��������7N
:���s���<�y]Fin��*�KU��t��ei�_�f���,�e�
-X���m2�Wz�J:��w4#������^o�c��Z�ן��཭���R�$��x�(0 at s����]��}5'd�f�
Ӭ���
MVF�TCӕ
6[3�
-5=|���W���F�jJ�Q�F~��Q�59����6>���h
@
h;��3�bʹvK��|�� �]9�ʎ
UVd�2���1��fF
֌��=Vi�)�=MS�f)�k�Rb�5)�\c7+9�Z��h|�����qݚy�����}�;����`s�آ��#;�E�Xo��jz\���kj|M�V��*%~�&u���nS5��Q�r5.a��t_���7�W=�hTb�F&6jd�ѳ����m
�/��
u���T@T at S���2�
0
�]`H�䲨1�
`y� ^�K$�Zf*h�Y�)=�Zֶɶ�v�:��k%�ִܓ����������?>����y��}��}��˚���ƎL�
��}%q4�bb\9\�0�
�-�_E��U
����G$+7ª��\eGڔY��Q5ʌ��5�E���J��Tjl�,����5����?N����ܛE
r��a
#NJ
�+��	q��-z�
-��)?z�r������X͎1*#&U��,��*-ήԸjY��
�R)��JNإ���2%�Șx~��)S� '��F�N��m���[�q8���8�G��E9�^�2LT�a���J3D)Ր KB��	�JI,Pr�\%ͪ�iV���'4˸Q���2�ː��.���;�� ��?�^���b���9�1�1�A��a�a�V٦�0�Q��G����%#�d��ɔ$cR�f%�*1�D	ɏȐR���fř��E[*��|	w��)�<@75؇�
����~
��gא�2jSH�d����d�8�̓d4*�<S	�,�oIU\j�bS��6_�i��ި��u
-�nW���fZ�Vh�<��))}�#�`/�ߎ��2z��3��2�G)�)�NVb5Y]�`�R�u���͘���(Eg$(*3E���Y���e�9�F�Y�5#k�B��Qp��
-�>���<o)8��O
(�^`���y�R��̳�1��μ�gyĘJ�
�#���
oE�LQxN��r�437N3r�4=Ϫ��|��SP~���55�U���K�+8�)s>�yS~�N�C@�S�K��o���ޖt/��*z�XlȤ,bI&�X�P�,��cR4Q�E
-*����(M+N���T���V�)�
-M�-Ճ%�4��CJ�ɧ䔼K>�yC�6�&35‹���JzY��Q΅Zz-����X҉oya�+�>J�
�+
�)��5�
�I�0=h��D{�&�3�SV$��_V�q�Ojly����ʳ��<��˳�:8�e�
��,�\��~Zʹ�4\�S����H�l�2�y
1�����!�P�&�JO���ոJ?��
�HyU%ʳ*Uc���Qe�{�"��n�[�F�V�KիU��F.�w�Z����V�mh�Ƞ�F΅ǩ����zr at L���I�����1Z�(7�T�:B���(G�F�e遺
����:
;л��X�_�m�Qg?��ߎ�����I�~%g#��=R��b����|J��
c��ʥ�UÛйM�����\��\<�l�F
-�H�-4���9xp�!̖�bhpj+�ވ�V���Jx���m�
H25��?��F���5
�m
[m
�m�����%��E��%��fn��WS��,b5:��.�_B�冴��O;�o-�W��e�9�7�6q&m��OI�0|�3.O�
�o�v�
0�na�`��� .��6t�#|NA��������s4�5�{��|��w9>k�1��>$mI���g�iໝ�S�Q;�v���M
��G'��$]���0�P���`�C@�uQ�N
w
�����+

-}��|7���[ً���O
-�FwJ�]��#y�‘���PR
���������a�#>
eԥ�8�
��t����4v7����1�q�z
��j��iW|?�<g>-/҃�
-܏�W�O�
��1xN��A^�S�I�AN�$'g����R��,�Y��
���h��m���y���׵�u/`ͅ�3�5�
b
���%��Ұ��>�Z����
҅�\��Opn��!���p�8>c���"5�ec���,�ý�K��K�f+�ų�`�����ߐ������o���O�!|����
z�-�Kp��\uC�ѫ��
�7Rn�Wos�ܦ��Hv���;��;�
������PeP
h�fh��(�M����EyEև������b�7:󺮢g�����Kp>���5�HCax�$�q`�\,<���u}��[���rl��w�q�8�%�����̾F
^F)^Bg~I� A��gX�>�?�Y�u
��!�y�aM���Z�����
��`{!��`{9��)E
����h̏Q����h�;�:��.�i�o�f��p^��'Ѻ�7/}���J3�G�����~1�`�9U�~
YK
m�@k6Ӣ?�ڵzGOѺ��ѩ�l�S��$�8A�Q�n<
��r_
w�_pY�X�;�|�r�"𓈏4���-��"el�
-ֱ���c�	��X�:
V;�؎��t����^��
*ׅ����5��
h����
9���$���
�	V,�a߆};�plՐ�Z|��	�-�]�����ɳ|k������yF�;l�ݘ؀���m����@��a
n_�L �b � ��-��M�&k��k�^�5�SWU�v��6Ҥj�Ti�ViӤ�ݴn��U�NC�����}�>�}��}.Wy����%z�"Y/��_{�O�b>
-ۻ��3>wi���J>EO
OUE79��𓣛
}��!\��+�q�~��F�6��e�������;K
�0������"�W���ҽ����M�y���ޑ��`���H�R���sxx/Yڱ�8]����c�~9��X�ze

Tt����OҢ���Q�B|�������c��29w��
x�z�����8�-��R�L��Sγ�hqy��i'Ooi=�l�f�f1����s��
����c�`4�!F�?�јop4V��c�:��W�y,=��|��`oŔ>1
���D�`1*��u���`6Ǝ��jL�z��a"Ώ�n
��h�F�0�pC	L��Ò{��_����CI"����%�M��{�M���l���b�dK� ��II�%�LTc,Q�cI%�:0,�APڀ!i
�H;0 �E�l�dcds�I^Ew�Ut����m�DG����{+�3����
w��L��YfV
�3�7C;���1"�#���#)
��/ՆC����Гք�6t�w�`z?:�G�Ϙ��2�іy�Yw��z
^�ω?�9�B���
x��6`���u��Kl�fi�q�'�
��L)��
�(��R�‚@v9��N�g�Ѧ�U�G��ޜ!4�L���E4�?��-x�o���	�s�@���Ïy����<����m��6���6(dᜡgm�G�J��*�*%��������V�@n
�rјۊ��.���>
u��Q��D��\���,���
Nݿ��{x�m����t
�M���c[:�o���C
�x�hd�j2q@�F�V��
��
�Z'�
-ܨ-�Z�K�g�1TΡR��av�+(7~@�����N<�_&�-7p�%~�X��	�R� u
d��
�h,L�G��z}j�T�p�p
�2Ԣ�؄
-c;
E즣(3�@�y6�uX-/���>��K�%�"�Y�����=r�`�w���
�p�s���:���T
�:��&9�&*M�p�
a7�Qn.C�ŅRKl�m����$��iX�ga�]�������GQ��"��}op
�K�
c�m�*q�-�$�
RG7u�2V<�U�5
�
��
�Y��f��j-B�͆b[,�n�K}0�u��l��
���ۯ@g��Ǐ�u���W�9D�($^#�
/c������H0�u���G'}�c��1f����I(���خ�ٞ�݀"G	�
��W4��2 ]� 
-�&��ZB���w��|j�'���,r����<G��������^��q��q���i��j诲�H��9�08��w�Q��A�2��Umu5򫛐W�GnMԵǡ�=���
P�}�u����W>�P֊�&�E��&�.w��m�
��
l��i�&��I�X9���㡭�BS����
�5�u�v۠�T!���ӆ�^(F��p
-��Ho����"��!R�䳈�=�%��.p$[;��x���u��w��I�������E덂�99�r(���ݬ�«C�ׂL�
��:��|H�u!�7
y�I$�lB�r
Җ�Hl�I-_�Y�̷�۴���?7�7��s,� ����i��jڥ�Z
�Qn 
Y�8���H��!ů�ܟ�d�2��pA�ф�� ;!	� !����3�
����O��q
�F�_|�g��|���
Af�Y��㼓#��VA}�FK=J�}�	io{eD$�
-	B�
�
-�
-
D
��!L`���0���!J���{��e7�#b�
ɽ6ɼ0�X�a,L�|�q��zJ�]
PSSm$;���8D'!b8��
-��-,F�I>�

d0�� �1�y7ȹf����{��5�"�I
q�
[�\9	���N�����98��<j���%"j:��Ùn������}H�WdBLl!p���!C���m�8�݉]^|v�c�w��G�x����K�zb�����%\D	��~�" '$D߱	,��[L"8[.�	[d�_d�]d�]�-�
t�B���F�d� {�����,J�&�Dl�a,.s�IJZeN�HڶΜ�Al�\�D
-!�{����\�	T���/�
�"�
;�
��
�&� 
-
-AW���F�&�%I�Ab�q\�
����ZkԘ�U��$�K�xHjcb��X�N�Ԧ9�{��,�޷|�{�������


+# 9Y�e�����4Pl
���X��&p
�?(�^�{1�O`b#=iuH�h�2ë�ϵ�+&n9̠���H<6�&�&t4��
-
F-4�fP3�h&�M4�����u���b�C���ɗ:Kf
<�pd4K�Ͱ	�͒�V��6�~
-0������r����C}�eHn
�
N�s���B:@<@A�_Ơ��}G�{|�|�>�|���_%~
�/
.�)
._��\Z�!�,8
]�u'0���B (5
w�N��
�FO3��朜�>��d�P�g���<��Y
�]��qp���
8����{��N��
�!d�†�Թ�^Z��>\Ҥ���}j�Ct����r�t��\�\�ȯ�k������K����8D�??8{=�<��<����w��rx\��O�
��&5�y�� v����h�}���q�����-�
t=��!��� P
F�j0��ؔ��f�/���T�d���V�
[�=��v
�]�������K�u�_}��K�7�펝ץc��+� XA��S
����Z�Q
vg�+t�B����-��l�7�?c�k�n���c��g�����X����>Nth��o���+|�������+{n�*	��^�k踂�?��t\B�{l��u�m���29�wt�t��"w�7�1p
�����y�����G\Vx��塿ۏa�
-��]��x:�
�k	%�
�^��i op���tDoq�>!;�p�
(cv;���i��	�w��|��-�8�8,����~>^���rlWa���د�����@�Z�=ZA�X�f8Z��_m&:-D���`�k�wp~
>s������
�z�K?�"�'f)X��~�v�c��N^��F[4E��т�&tl�2����!'���*,4�2�"�^��q�6�Q{�r��ר���_\1�a�#b��P
G
cᨆc2��p���Ӝ���
�.E����(>���;�����F��v��f��|��¤��n��
���3�a#<�H�#�8��
�
--F�"t<C},�\=�;�:�':�4��:�����S��p�Wh��������Ͼ�8��ֲm��;Vʛj�g�?&xlx���\�G�\t<�Q�T�S�Y��
^M�ӈ�T�5��M�!��m*�Sպ|��.�G�H;=�_:
����)DZ�H�������
�>��)��r�k�K��w�մ���Z�)�e��Z���T�m�j�����KU�}�*{lVEσ��F�]W��=�x���
���2���u�ndy>�у�����n����Oun�5�W�&��h�{�j�3T힫q
CU�1Bc=�U�9^�=����	�y.R��J�x�h���~K��m*�
*�qt<O3~
6�+W<Xma�`Z̕7/����L��Z/o��
�*o��z�j�w�ʽ���w��|�ԧP%>��S��>T�g���Y�B�*�ݨ|�V
�{Sy�+�����0w^����s�6�|���;��:rT�
-?O���j�_�J�#5�ߤb�*ꛪa}sT�w��+?�\C���o�������50h���v++��2��*3䞲B
��#����u
��
j��v��}��L��$7���T
��A*
2� (F����588C�B)7�P9!���_���)�
��t�2�1����RJ�q%�ڕ
���P
-x
�w�ۜC
�^_ ������
��IqD7��g�� C�"���De��(#<[���J��Ԉ
-�DNRR�l٣���Z�w�}L֘K�p(щCp��`�<�9���k6��d>��F�B��r�<�
�̨~J�2(-*F)Q�J��+):C�����
׀�r%���j���"�ǭ�ٴ]&��gzWq��2�
���}���6��1�d�Z�ʧyo":*�1
CБ�T������Cd3F*�'k\���T%��b.T��L��j���e�<�XK�b�*:ᨢ�����::��P+�������֣yé�Ԡ�

E�� r�f�.��S�_%Xe���l��)!Aq	Ɋ�f�h-Plb���)j��
�@��۶�`?�P���-^;�m�&�-�¸������z��8Z��2>�΁�kJJ%�<d��(� �-T1�(E�͊�������<�'�PX�XR�*4e�BRW(8u��R)0��ং�
�׉����ˣ苌�X���CK:J�7�8eS#vbbJwSt��"S��������v� Ey�a��f��]NE�1j��'�
KXuw=pD]P��h@���<�� [...]
-ˢs��h�o]!��l�0=r-,������R�e�����"�w���E9͊t&�d]���p�(��2dp�➮`w������"?�A��Ip]~�/�O�N�)�7��8OZ�5�,E�`�l"�$�\Fy�^3��$2O���d�5��T�'F��Dzz(���=, �g��B����5=�:����to9tq9�s�o���\�Y��{�\�W��m��!TWj����e(
U@!���C������r�x9��l�^��E�^^��Ǜ��MC75�"�k�C�OM�w%�U-a
�x����Ԁg#+���ޝ��H&r
���Q��ex�2��D��R��*��� �R�R>|�
`jK0��~�a||��}�X�z�f
��X��d/�,`0��o��JfJ�j��_5�����	����	�T��E��
-�WQ�%+ at 3��T.¤Vބ�;@_K�ڕ|VK���H�	���F�7�D`a��Lr��_hvȣ�<ȣ�<i���F�F6�w������h
�e
�s-��*
�*���1��2eX�I��3b3 I��s�m2<h~~�泙Ư�<Zȣ��pk{SFS�]��͖���5����e��ģ����*�Ro\9M�G-��mR��R�
�3���p�|�a����kG �A:@C|}��G�hcN��p[�E+�J���s������3�bƖ
��1�<OWb��
z����x

�o>���Q�"@�z�
cn^��N�VN�����$��)�I&��O���/\�T	�yp��ײ���
~
��
��h��
-x
�Nw�
8
^o�7h�:9Ϛ��Q�L3xm\� ��|�p�Z��+��>V�
4�X�9�np��
9�����
-�� �%p��b]7������9��E�|�F�k�.��=tq��ߣp_���	 ~ @�z�! 8�d�
-�%8�b&q�O����,���	�7�G���;��[�s}���F7�}
�#8� �>��oD�X�
�׏x�o��b����E�.!�}F
���'��W\�G��8�?#���}
-y
7{�//�x���8x����B�/��?���x��x��d!�]ʥ?��8
-��J
�q�q`��2ϓ�9�cʚ�v鷈�uX���i�<��^�^G����
~_�[��'22�8}@-��1/i��� ��z�]@�"b�#v9�1��:�:f�)d�̲�%�8
�)=�`��A��}`7x�#vL*%����x[f���E�A�>���N�lb��=��Ӊ�e��2��į�~�xV�a��v�];a�A-����63ڧam��F�n�f����:��i�y�Z
�G����1��c�W6�����!~>�g��b��E,C�
������%�F��3��QV
��
Xn��8ױ�wl=���>t�
��3�m�I����B�6�wh=�X�)p��1�b8�{�V�
��e5�����YЕ(�އq#�%��Y�/��>�`�ݍ.��F�(��$��
�p<
-G
-
68
��jȣZӴ�<�G��	���UJ�\	#��J��7�a�́{6h�^b{?�v�[�!�{8v������
-!J$�����D�
�@�2
�-D�ʂ�	�x�P���W���`��k�, at 9��G
�Y?�[�ԟ��0G�^��m���8r�К��.5~a��_\���0�A�
��O:�YT�	W*�N���.g���d
�m�$�VM�{Mn�+rޓ+����}�GXo|/������D�A]�U
�9fy�;kf��T�W���5-h�r�,�lSN�C��ݚ�;d�\�%��X�
��mh�#��aǕ~I�w���w��[��~
�8����:Z�ڲ��E�7*H��Fy�b�����=41��\���	�T�3f(�8NY�ɲGNWfd�2"+�
Y���&YM��j:.��,�/��>R�+�ц��hkk����nт�ҖQ�|�k�9T�(�ƛ�m�,S/�M���y�2̣d3[�n������\�F)%f��ĬШ���W#�^��w�h�

����8��ӂ�%m�h���Y��
y>��̠NSi���kTF��.���+�_���l#�
0
3� ΰ�l
-(0.�D4D�wq�;hc��9�&٬i�&VLlk��XS�i�&=i��Zcܲ��U�t��
��
�=�����}����kPq�QE!�
��0ԩ��,��+7l�F��SNx����1W�UJ3nU��K)��rF�7�r+%�.^��nr���n-d
��<Ffx<Bj��B'e1R�i�
-�A�7�)��
�M٦$e�Ҕi���QJ�,Sj�K)���~T�r%�7+)�)%��Dv�i%X���_J����"uw�w��&|m
#�2,�
�E�f�J�
�J�Q`�U�9@��a�0�f�(՜����1YrX
-4�R��؉J����ڨ�2��6�f�#k�+��;���+��˳[6����~v#��R���Gy����84R�^s�+�6T)�`9�aJ�F+�jS�-Yv[���_���dK��5�^��%��o�9�IE'��Ȥ��eE%}��$7�è���l�
-l�`��|n�K-<&�Fehek��V
���h��
�x�Iq�X��&�(6)G��"�$WȜ�����T$������N�;_T�����;�p�e���Nrn{ =N@�`!cp\��1��;�Y�d���T�9��0��P��,�3^�N��R��R(S�XE�NVxZ���(4}���?!C�g�	.ʐq�w�>����߂Y?=N���#�_<&0��ҧz����s�+&�OQA���1#RV�g&),3]�Y�
-�*հ�I2d�Pp�<�(0�C9��?�(8/���<39����A�M��֪��l�Ti&�Sy?����;�pM�gq�$*��r�kPHn����Ȑ����P`~���˿�̖�qHA�>+��#�C
*�B�
ܼg������9���G0���s%\*��(��E��Y�X�'bt��T���P%�b���_q�����q�-��OI��,W����Wҍ�1	%���g���حN�ՠ�:iV�4��x�
���i�|��U<}��/!㤀�A�+
Р2�|ˌ�)�h`y�����r�\�r�Y�X
-0�嘵r�CƠ�S�W��.j�B�����豉��4��/Ɩd�%���ӛ B�M�������
-��0wE�=�\
�.�BD.���"��c
'1!Mdb���6��1�;��-s8��K�pG`O+y
�
ɇK*�����a�@ȡ3$�x��
�\�
�\�5\t5\@5� ��!`u+�-M�_M;��"88Lu�m6{�������&P��
�\�����	�U
����jb�ib�h�[6ҋ�P� ���@/�D��G=������l�����y�C�2�����D��-�\X�:���`
-���X������X� �
G}��
��3�5ã9
p�5��X�ᲈ�XĢ.$��ml|��|��<���[\
-nm ��5��ʡ]�ֱ@!H]/Y�
��@�
&����
-�Vx�ҏVx�£���%����R�Z��q.|�j&�UL�+q4+�ZO�X�9Hf�F$�|�6K[� � ��w+�(����݋�����
�
<�����
d۹x���vzю��(���8�r�96����5�]@�:r��;zgA���K2>A�������b{����婋�t��}
����A=
�=
�=��u�h�
�$߽���V3u�"o%9Kɓ���FbvI9V���� ���#�=� u̐�ǜ�c at E�?e�
b(�E���a.�^z��
��C�U�>_��Z�>�QA�\�%!��Կ_p���5��5AG���y�1�~	���[�/�	
g����?�>�q��&8Ǣ�%�Yzq����]��9@��"g �5�7��<Ǽ�=f�
/΀w�9�Q|P���5�X������r���*���
��.�S�
�8��y����P

 ��q����
��-��M\�׸��p@�E~��
_�).�:
x�~B�>�G����"Q���U�mp�����A0�ҷ���x̯5��c�=��U����
�K��+<.�$���;�?�1?R�>@��k?���e�������x�
-^�?
ni 5�3|�5��ezqA#�_L�
-�^.��{�8
�3��w𗿂���8�#=�C=��:�n$�2�
��y
�?t�,���Y��?8��Vr�����E�r�?�أ��8�
G��:�rX���D���^��]M���2m���~��A�馲.�=
��ݠ���&�救GZ���q�+��YȑL�LV���8��D�D��RK�������X�%�_�"6�c�v�v'���i�P�6Դ��
� l _����+u��:�~��G-rE�.9
�Ϣ�B��1į �D�W��c���
Ğ�2� ���Y�N���y:
�߰Z_j%yWx�=�19��v�-����{�E'{�Cf�$��I�l��q��1���	�B�jrԑ��d�kL����7���6�`0`n&&`CbH '@B(�HB���[Fi.�K���@�%Y�e	(m�fi�6AZ�N]5mӺ}��m�6MӦM۪}ؤj�ڥ�4�G.S�	=z�?��y�9�9��『�w
f��
�8�����$7e�l�{�W��('ߡܿ�$x�q���Ö����8���	��1Ua�#��f<ߦg��3�q ;�������cX5�#Df��=�
��	��M��S��w)��h5�����졅p�$v1�i�L.x
-8K)gY�B�D�i���m��`���
��$���]v��>N�K<��n���'���2LY�%u	)tY��='�e��*�����\v/�<e�'O��7sKZ�ꄧK�{�lY��s���[Ȩv2���o�V�R�Z��
�˥���_��^�mOa�
�h������4���
��rx�܎\���j��Kmq�j�֦�iE㏪9ႚ��!����Ր� �
�
x��ږ����Y>�q~J�����	�M5�+ɢmI�ښ�Q{r�ڒ˵9%�M)aES՜USj�6���1m�"��Z�~D�
��XR(�j
?R��/�1~
-b����:m�:r�"8��+GS ����I�ږ��V�QQ�U��6��`(V��B�Z�7֫޸Qu�6�Mݪ5�R�i��3)�yNU�
-��V��UX>T��3S �����KH������'�bCط��E��ȓ&K�"�L�3�Tg�U�\�Z�_5���ZjUm�(h���ک��_��Q�gͪ,��m�Ub{S�����g;>S�#�{Lo��
&����Yg����{���(�C$;I!�Qk�,��ek�ͭ*[�*m媰W��^�2G�J
[���SI����3�9O� Q��sWޜ��������w�
�6�	�%��3���3�Icu�KZ~vl�F9�{��IW�3S�N�ʜ.���*��8'�"WH>�涩 �G�y���v?�<�U�<w�������+���\ޘr=1��Ht
ދ̳�[�p �3��h�
]H�Vr��|
!�)�*v[�sg���E��T��Y+�7"�w����*PN������(�"{�m�|�+��[֏e��� ��u
�
̲'����4�Gx���:�q�j2�#�%	�f(��,O�]y���-,���T._P9�z9�Z�(�i�JƕUrT֒K��_����L�_�\�O��
�g���|\
�e��-�#����m�'J�֓#�Ħ��䗥)�oR��*��)��+{i�l�3�4,kY营�_��}2Ú�2V�*C�ʨ�%�G|G�U��9�8�1�x�Y����:؁�fT���[�s
�Z�O��;�$G� [�YY���<Y>��ʬ����Q�5�`�
�Q�)-����[J��&���R��Vj0������vƟ^�Dw��;�X҃][�K>	�'������d�MSf�I��,kr@�
��ʨ�Vz(��P�RB=J
-)1<����G�C��
F%��-Ÿ*.����E8O#��wr'E�Xw3�n�y~i��jl���q0:�R��ި���F��
�()R��H��#��k�����/�� -�� �	�+`ތ���Y���tdw�������S<o�/u�(@||��Eܬ�Ÿ)Y)Q��4�(�%J!�r��$n�b%�Q�
� �ME��PԂZiF56� �c�
�yx�&F�)F��~�o���]̞���/
be�
�K�LR|'
m�	dI
4�^Ť��� �:0���'��)�~�M��v�[;~h���^r�c�6;A>N�����0��u�R�;���Hfb��M	���~f�/��w�
��_�ዾ�K�����ax���
���
e����"�'q�
!�a$
�|�:�x
�qb�M���G�#���a���{i�{�s��p�� �m�x
�A��Y�2`��͐���ѐb:
�	�}�0q8�k�]��A�(�n��bL4�n"�L���vLa�vL"�&i0��b�K4A<&��?åC)�{������1���ǎJ���w��
ցJ���9�>������c
;�c�ܘ������ɋ9.�
�?7Fҳ���B���_H�������x|
-�:;_ ���U�:G ;0�������\|��H��v,b�b
��,R�(2
$�y
{��8G^��~��;��?��o��س�Ei㗩���W��H*�_��%p
p
��Ǎ' 67��%�X�,�e
-�2�X&��8�ҫ��>_{���Ŵn���a�"�r܄���*�_��a�
�|n]������M�>�g�V�c�B~�P�W��
-I��ʊt�����9c/g�g�TW6\�ۏ�_ݛ�¸� �o�o=^I/�G��!�R6��\�{t��
Ɵ�6�%inmzK����4I�IKK�EZ.��E���\�1AA�Ƞ� �
�� ás��)�`�e2�q2&��s��ӝ�Y�iO����s~�/��<�������Yz�,��G���G��>ۇ��;�h
-{mf�5�*c?����,k�
���s�
5�����1#�ꋚ�
�b԰��> ���_�8?�@}^�Gn�x7��u6v�̀��/b at 2�(CAw6�ڦ�q-gҿ����������u7�g���8�?R<7�{�{B�G�e�E�R?.�������j���K��?�w�v�T����=:�u�ч踂��8��9,�C�%t���z
gz��@�{�཮kz
_����>���/�߈�M��_�p�귪һ�ܷt���ɜGG�8���qy�qa��6��W�qR���6��K��'H��z��
��0�v�]_�p|ܟ>��ݛ�����,�:��:���)��t
G�s��c8��8�#����8��Z��ܬ}�d/
��_�R@��m
!B��� #�_�y
\�����b�3�e�'�"֯�M�z���G<����S�q�������?_;���Wh���
���
-9�1��
%c��يP9��`-�	���ђ�o�c-��^,p9�=�R	���B�N<��Q�?��[92���t��d�n=L<��A��ȑ�]�Xe����\�h��E������x8z��'��m�H�2�G>
e��k=:
B��t5��J�R���=pt±�n����ѽ(\��S�ݰt�*�O��.r�����?��b�̘�C"�f��'���Q��~��m���m���I�G<�4�����v������PAo��� �ɠ�y�#�y�����n��s�mE��o
-����
�8�����,��� OU�B$�����P���]����*��,�����Od�_ 2��\�G�{?v�����X�-��s^tS�sd�+�\x
-�)��c�:����h�������_�P��
-~����/k$?�f�O��yF��>Oq�m��r��Ѻ�
!.s�Sc��>;\��䱧"���p᪇���pMd�pt�v����Z��f��^��w at d G�\��ȝ�� ���
-�-a4��u�AL&c�jHָA��9�ʂ�͞���*
P}LHu�ª
4Z5�����9���_'����`�K�0\RE�-U$Fp�+mw�����_�ղ����q���lI��&&c�qjHNQ8��:C�j�U���`b��+4$�JUI�
-$5ȗ4V���H�%o����U�q���O��xB��wU`��BSDE� �O��ƮG�� �m%�
#P1i����(��bP�ɨ!F��t��9�4y4�T*��R�j�����ܤbs�
-�
*H�W��5r[�)��\�ʱ\��zD�
���$#F���#ϯ�w泥��8�!7#kȍߚ�
-�Y��J-*���R�BK�
-�U�X�)�:Jn[�rm3�/T�}����R�c�����xG�i�3-»�����[���1n�Ō�s����JnFS'���R����*�U`��cO�۞�<{�r
%r9|�I
);�AY�㕙>MNg�ҝ+���*{�^�2^�5�M�l���
�����k����H��=S�l-~�@�
�F�����y2���4+�iS�ө̌\P���
-93�*=+�4L�={�l�]��< K�7���#��L�_�O�̔ z��vx75R�x�eXՅ|���v���ꤖz
P#����6(�e�3Ǣ��49\��#��L��*Y��e�k���.�{�L��ddHO��*�sLI�s�#>��|�o��
�#���c�`�;�3	mc��HrSCn|Ĥ����*� Y�|���vY<���TO��>�
-ke,�K)EmJ.����+�x�
��U\�Q���y
|�;�r���Ȼ
���� ��chiCG3#�t��2���7���^���R�L%V�J�e,u)� %�
VRYH	�2��*�ۡX��x�K^n"/����˴����2K��-p�g�]9�� ]m��	�
�jF_-CF2�֓b�$&�@��>��*-J�L����x_�b}^
�SH~��gC�� ��c�c
�~�c�U���E���p>4��q*=�N�s�����aXF�h����11��+)���`�b�

A� M
�h�P���i`��0MA
C��?��V��j�)x6����{�Lz�Ӑ����أ�VB�V7�q7
�������$�K%l\xa�0�
���t���\x
��
��
Ǹ�cB�Huh�c�C��걓z�CO�N0yy@�0���"�d��F\��1��R
��
��k�RivHM
dM4p��ġӄ�&��4���5Go�L�Lk�.K�hh�h
�k�\��ni)![�
�9�<tѓh��24����2��<��ù����.�ˍ(���ϐ��D
QA��`�	1�X<�i�1QH̡�
3&��Ĥi�f�vjb�N�1I�4c:�Iu��-lgZ'�<.����y��}��{�C<Vrc`k*c��.�rɗ��rQL.����i&�ԣM�<H���"
�\�ٜK
|b��ӣpoA2Mk��:���
�f[|v1���TR�&Nۉ$_
.CXL.q�W3U1U��JtQI.*9<�ԣ�VT ]�`�
�0�c�0͗1�����#�Z�	��2��hB� �x���D�*x�X 9S=q,'��ı�8�I
M��\�r�j�G-�e3�Z�$�s	F�!�a�
���V�_s3u@�5�� �7S��wv�d���p�)��
�
�8�F#�[#g�]4r�8�
$���7�	aj�aT�0կ�����&(���/��\�$^
�����?h��A���F>�<�� �h#;�?�;: ��6�����
�+X���y�#�t��p��
��30hs�1
���;��� 9��tG7��&�4�nrх���U]Gy�,�A����U���Epܳ���:^J�<�a�<2h6� �ƺ	�����gG��I '�M/u�E�賏F�G.�Y�
'�ṿ�����;
�1p�a0�p����{�Lߐ	{%�W@�Ca�!W��қ��O
�
c
*��r1@��� �_R����qpf��
L�tL��R��l`���u����t�
^ o$6hV�Ӑq�
�-��8.sf�p��>�rF�qخR�+�_W.0Y��
āt0R��οgj��s�;���������pH���}�A��#�
G�G�s�"^�@�� ������a��G�>|��T�p
��!X��4�T
|�p��Ʋ~k��g8��8�K8���G����<����
N�]<�E��D4 ��(�y}��Y���Z��Y��;b�6�� �ԮO���}�<�
-��n�-���qS���M�8��z
{���S�x�8Nk{�M)�(�3H�4�z�~=���1p
�p;��T���_+�}Xኁ'	�,�?u��
-��q�@>z�S'�u��/��
>�z��:=E;�

�N*ңn�<�7��U�#��`�
:�.�
�_�OR���ܠԍp���/���h=�k�!G��!�^7���Y����J�g��z\��h�����Dt�*��bn���
6���^
��489x,�؋�h2� G���
��M>:p��6��N
�v4����#ԥY
��E�f��U��R��0��we ����
�m���X��u���8#�
��t��e����D��
�t��2�!�U�e�/�Z"\B.j��(f��mV�]����O{�

j���ȭ7��\���~��t�� �\�χc
�9��)���2x�Y�ŮC-�Z@�泳R\	�,F}������9�(�48ĵ��5��x��W�:E�iU
5YJϨ�.&�j�$�
-���n1
�Bx��S����(fYj�C(�����i>'{��og������G;k�}+�l$n9�C�5���r��xx��K<��s�G��Ή��x*�j�]�r���~"}�nwUL%o� Nq�
O�*c
}��e;W�&�YC��%/��
P8�f�fc_1�)
���	k.\�p��� ��ṕg�����t���SO�Y:����o'��`��Q:9 -x��w3Ӑ���Q�z��>;\�p%�'/\�p
�k4\5�h�r��#{#PN.
-
�i��dgqe�d�����Y������1 at 3��z�MaL$?���
r2�
�C�&�X5>ȡ1A.�%jTP�FgiD�
�a!w+'t��C��V���:��7)5�C)�O(��
�1|!O�w�D�t
�.���X�m�)��1���PAN��O!��ǁ紆*�dT^�U��r
.eGx�����
�G�RZ�y�S�b��dS�<��J07*�����
��/)�|Q1���{�Z|z��x���-��k~�k��撧��f2�KmF�•i1)�
�Ts���8%���dɐ�2\	����(�Z(��L��%rF5(��.��춗e�]_�[����}��vƭ�I�����m3��l�4
�Lb
���
�	R�� �͢�(��b�%�e�*֖�[����m�%��TvG�l���F��òD�(S������/��t�N��𳛱��A
���4�8�6S��42��dS�w��F�8�r:
��v��,�3��木������Hf��\���R��W��~���M>��d�{�����<
=�Z�Q1��]!��2�Y��Q�,j�LN\�r�,���r���Ni��
�9~�L�SeL��Ȅ*W*,q�B=�9� �
-N��UH�O]p�w�L��,�X�ߕ|VLl���)�f
9�#'��CN��PEyL�xl2{�2y�eLJUD�0��(<e�BSf+ĻPA^
�����2�z6����$�����;�݊%k��� K=+��
NǦ���
G,�h6��GN
١���f��u�u}����-��m
�r��
-h
��Q`
�r��*�1n� �"ʘ�TT��W 1��h���
���۹�-s�n1N��M�O̘ۗ����������{��sE���H\��Gʐ��i(�
��P��,;V�e��
Yb /9
o��
C?��p6YMw̕��8Gm�7�;b��k�R�'��џ~z�I�ѩ�Y�i���i�?Ҿ;R�)�KZ�f���̰ef�2ݧ�Qj(5O���Y6�l�[�_�s���A^��-�//}>�-U3�Ui0��v�|:ɮL��1v�
-ͥB+�t��r�)��D]᥊y��
-ݸ�~0)\�*��ָɽ�û{��Xfm�հ����2��V��|�ߵ�=rů�Ĕ�T��M�T�۩��jE�Z��
W��j�^v�q��q�*�B�˄ΆKZ�[µo�5�c[��_�U�`�8,���G�� ��bK�^2ٓ:��hh�5�i|1�/j�Z�V<ji�V k�P��V�bi�l��lZ��sBcCMk
���U;.���n��X�G���j>XA>��ך��_���,N�7Ѧ
_\���[=_�i�u�`�x��D�@�yy��_�2%ʹ��x�
>r��؏{�Թr��`j�f>��+�T�e$9
`c���U:�
I
~�%���
�ٱ�/袁/��h��
_��s�)q��q��l��������� K�3[�j��
����M��L_�>���7\;ֲc��4��Q�kTT�((k�x��[��w
-�ሕ������Kk4��U��@���{.�J�1P╢
4�
�ŗqE��` �Ǝ���U�n�\���ɼE���i�]l����'$��{.�y����ǵ��1�Ja}���
�
�!����Ϛ�:mfG3m4�I3]4�E35q^��
'��$�;��i츎[�u�
�r@
-1�T��<ȸѹm�	��a���-��߉MKvǀz���(j-|�BL�9���~���3�p.�Q3
xԭ�G�n�߶d���N�;�|ܛ�}��6��'Ѷ$��3'�qR�<%&�4�S|qJ~�DzR�>���ދ�x/�9���f �|�ʸ'y��j=	
k�âٱ
]��0���!,�
�ڣp~����ӳ�q�0rN�<����Q��ٗc�;�ޥ��`|��<�\�����^�\e>����P��F<?W��O�cq|��x�
����i�o��r�M��_�a�{�	�u|	��=��&R��K���忚��6�����W$�dv��}������*�1?��X߶��i�{�#_��\��Y��3Nmc}�
���6�>��|d������)�]��;��_��_����
/����9�Գ
-�3���%�Ol�OI�'	�<!=��1�9��G�c���&�}/��>�3d,��mB��=�E;��bW8{�;�
-�,g_���^��U��*Ilt�B��t���l��	�x��������(����
�$�/����g����� �:{��'�iv��6�l`�����
g��v�;�����8hûC��������Q��O�)�͠s�'���I�=�.�
\�x�������
����
��)����9��)#+����y�J
���9���ۉ�xs'5��ۆ�
T�x>)�3�tSI���/
WB�)t~���-�v���k��~��ƻ�Fv��NZ��������M���s�Ep]��z>�Dk;��d�����dI8�,y�b�
i�|
EN
���b��W�V��f{�c��r�Vրco��5�(������X�e1/����s�SG	j+�G��Y�v������ꎣ7�b
%8�pTȊ*J��3�L<s�,r��X��y<3�/.��:j�M���o&�
8c$|(K�UV���u�#�%n�4���xzȂ�8�(�eY��O�L��f�d�'g��t��*jm�L��c�*R����o��	�]�;
-7i����]��Ɩ�q�Q�,�.n��/WO<}�
�S���2�c;�:q��&yb"
'�D5}V�d%Վ�=c(�B�U�����r��բ�����Ξ
F�5��T���2g�{��̞���@�%��
W9�*\�p��5�'��"�-�e]w�H�e��
�ϡ5N��k�Z�>�JY�–�ٲ�_h9��
-uk�<���q쨔+c��v��0��
�j
�k*�z�/jW�PY2����@�8~�R���5�3~ަ�

n�0^i���5Ə%F�9F�|2�fƥe��ƙ�W���~�5����U��b�S� ��'��RYo9Z��Rm
U��N���uo���ֺ��{={V
1��I=�L3�N���9)1�k���%��ҩ �����Q�2$���(�"�t
�ӦGQ��(L_=�7E���(�8��#/�|$2ގD��#�U��y��l�u�j��6��EW�m���lq�b}'6�t2"�s
����D��D���E]zG�.�Q�uX��::zdVEAfm�g]yY�#��1r���H�d�����|���8���Z���
#���_��y�)N��RlF��0�)N�EQnf��΍��yQ��3��F^��H�F�����;9rr�"��������L�.�Ñ�8��#-�*|��ָ
ߍV�k�Z;'}�^k�\ʖ9[C����k�(�)��=;EaAz�%�p�Fn���IAq���2�������Id"���AB�(�7Q\� �!	b���)D1��Q5
mQ㫚�ؾ����UZ�E�
JI'���n���[��z�^k�{���9{����w)�ʢ�c
a��eZ�2��R�[Xh�	s��q�����$z}&f��D�
U�Y�������[S�F���8� 0�*�\�L8������V[F�8�k'OaU�OX�
�u��s3�qahuaq��u�1v��te�u9�2_�<��;�}G2
��KB��#�� �&`T�q�&��I%�Yw���4v�6���NX�9
-
7ga�V^h�a,��ӽ)C"��G��`C��������A��N
�yb*��c�4Z�̲IhW�G��V
�L�gMb�g�Xޅ8
|�DIQ��Nh<)O���z�D�D�F(��73��@t�i��iN�i6���3OLf�1�;��CuI�م�Q��|��{
b	_��?Z�j`&�ޱ.v?._�Ə
�������ς��(3��8��яWҗ�>Tz.��?�����.��7�i<�
�%�oD,!`R�8��\�)����`.� .�j�ȥHB�@H
�1�%�폎�@T��
Xb��/&f:���.c�K4�#1�wsb��=�8|��L��f�Җ���xxC��Cx�t������	�$2N��(��mt
�5&j0�T?�Cp�mG2�a���E�
h
�9K(�U/0q&{���@�Ak ���
X�
=������	=���Y�&zfͺ
�u��Э�>H�V��^iPfPwމ��Ћ������������������lxH9,4�ٲ�5���f`�
,�x�8�08�!�q�M٠)]I���
l���"�1 [...]
���>[3�F�5�b(
�A�b${��i�z��з9�&� l^}�p"F;b2!�{as�E���
-D&�x�#�8j$,by�b!p,d�L�Y���]ّ!1���C�H�l�p��
��������\q
 .�������U%N�LH��-R��dch���
-�^��@�D����3Hv�gx�q�|�D�p��*�жhc��H� u�}��6�
�7j�ʌ�
-?R�#�3I�3<�� �P��S�,�>����� ؞�E�q�����\��=�-�R'6���;��9IA���zɆٜI6�|XdA�,@��W��־+Y?��[�ړ�C
�iB�F-����(�ӊ	�-A[(�
�����o�q@ j�	��ȡ^s8�
j$,A�E$�h�~?�Xhڊ����>�ǁ�-��•a�0|�!�St�+�R)5�D�@*zm�ah�C�F��nl�V7q�m�͐p�n�y�Qњ+�{��O�#Ok	��R�>����5y�]��Nb��s�0
�;P�^84~��E���J�c�
�i<r�g.��	�8��`�r���E	Kkےv��
�h��]\˹{��������W��*U�ר�
��n��z�6j�4�Y��Z��l۾CTtL��q�]�&t�ѳwb������������
M
�6bT��1cǍ�0qR��)S��e��YΞ3o��E9��|���e��X�z�ڿ��|��M��l�b��]��|�����?p�Б��rO�<u曳ߞ��� [...]
H��̿ DH�I:�A���D�0$I
�%�Ab��b$XdH02%��1M��d.�,��|$1Y(�$*����V	�N��RB�Obsp�KtNKx��
�� tEBtCbt�
H�~�0=�/HNL�.��\�}�y�

-� �)��.doF�X�^�Kh4ff��``i%Q ���JفDiG��:��
�"$`(�,�B`
\z
�B`�%��,%*)6�kB�^�I��
J�6j�����L������,�x�r�EVˆ��X��k	8QH
-�$Y�&y�(��ꕫ$��uҽy���ܽ{����!y?z���ߟ����������UQEUTQEUTQEUTQ��!�`�y�
�����bQEU����o����n��b��}S�V\+����e�:<=�c�o���*����oW���gֈ	�����W���G&��;��D�›&
N8:<�͂[��ߝ9�qt���O�	����
*Ʈ�*��Gr��~���\�13��Ǧ̏�.�K?j�a��`[ᖰ��=7%��¶�
-st�P"M8<�[^�R�6��+;
�k�
��k
��ke�U	�	�lY�j�9e�Ks��b"<��.��RE�?��<wx����c�c�e�0e�;����Q���_�/��j�n+;���P��|V��lLu��`�]�:kfp]�
V��"���C�]�C�b
w�Ê
��Qr�[�+� ,|j�w:����e�Un�3c����+:|�a톣�<5aUE��"Wv�M�qФ���>���l�)���%d�t�U��[�PY����#��Wq���€rF�t�Gz]����(9dj_8�`���]���భ�K�J7H��K�ws����ؗ1TT�..�(r�ۮ�����ѵ}
�4f�>�z��{�ϟ�ࣵ�L�A�����ϻsƌzf�zkfL��(�ք���C�
~�h?�j�}�CJ��3��E�%�/c_TV��J�*�p��T�_���xE���y\���_�^H�ڨ;Wi����
Y�A�"�ҭ[���l�!�I�v��^يR�9�$�V�d2���nq�y>��=/�����<�y�;�s�����+N��w	$�
ӟ��mWy0����\�*c���<0gל�uN��@�B����!���
���+��
G[Y��u�?R�
|�^��rr���H��/�
坑�������,�~$���K�]�Kn�`����l����=�Z�5�[7�q|g�Unr���"~��F�8�ߛ-cY����
đ\ೖ-K1�Es��� �)�`[����<pb !zٔ�������z�{t��@�E^�~˷Je}yU����-�#iږy��k��p��?���0Z/����j���,�bh��}��F�u���D��R�����%�H���2 ��
����� �v &� � �e��u	�Y�N N"�{B��^��{~ݾ�V
���>�>��zy�H�����]P�F(볫�ܤ;�dq��F��V	�Lk-��z�PߔJ��K{�w�W�y~��P�'C8�d,ߴ.����
�
�:���J�@7
�d�z�qF�@���`
�V�"��
 6X��  �#����#�
��	Z������e�W Ŕ����ԃ��N~�a�~�qfu��#E".�l�йy.�?Xϊ�
��;��m�
HK�=�`(tu4�G!g��n� ��_��:�� ^!��B@�� zh�C�L Z8�l�$@��
-��+ <j�e 2<�QQSS}?�4i�ǀ����(;�jv�,����_X��?�j�_�Xr)z��XK=A��T�h����0�B~[�)��ܦ�����bU�q OՆ��
Fv�
�S�����@���g��6��_8��1 �>� 
@
�e ��!� O� �����Ax
�C�8���~ⷎNs]=�/��I���֣�3ѡ��M*{q6l�j�K~!}
9Y�����m!���!��_�
7�Hl�ް�(��Qp�p��j�`�0G��Xs,D� `+�� ��
�/x�G �F�
@� ҚSШ
-�s�=�t��##URuM�T��������?|�����zq+[:����s����M�n�ִ�������䂹3���3�o�\P��7.��B ��<�L
0
-� wz B��F�1��2
-�Ȇ�� �DG�r�
<�6� X��`3
-���83�|6
�~!�]{=i���5�$��>�*�OE�t�O������1����o��,N�4����GO\ٞ~��pc݌
)��G�R��0X�
��
QA�l�(f�4�� ��M<�Aoc0 n�`��� ��"��0E��>���)h�@<׹L
"]�N��JY���s����
r�,�'��%����hݹv
-��� ݆/�U�)�
��|���J��n��P��W��
-�x ������k��F�E�Q��`0|�=t�[�
1x}� 
f�p��c3��A&��� �ŽpJ�� �~
��7%�1
�����,۰�PRN�D�,^�H�U
0u�����f>���
��7웻ñ]zQ��ZV�����q��6
S�
��d` �0��XA#����G�V�J�[�(���9
-R�
��WvH� o�^0�x�3�
 bx
-p`+gQ��(^���1�����ױ���>���9��ږ�騬��*�^���x���#qb ,Y2aHwc�VM�O�b�/f=-��ȁ/}	��-�
��`=���瀾�}��k��)���
-���4���`"��
C �!�)�p3 : �m� �u�@�X oQ�v� �����n�gn3����
��w
:s��+
*�����q���BV-
������M$Nre�O{�} v� �R`��
�8�3J�yM�O�4�)X� �ZG�y��Q�j{�<E�T ��I���v\�5�Y �8�F�a
���j5
�X���+�~6���yB���UX�D����C����j��*+�j�߯
�X��9�q�x;�aV�,�;�`g�\��L�Z����[�� �6�
zx�GP��k0���
ܢ���@+8MA\��Z ��T�����g����P ⚖ (�U Ͼ?�4
�;���Ic@�����S�l|Q�gV�e����O��H\����GI���s���}-:�l޸�-�P���
4T/�數H���1e
�N1��@
-���^�Sp��|�v:Q � h	 Z��1
-��VKȘ� �1�>DM
{��_�Y
����̸�Ӻ�|)�we��Uef�ᨈ�����.A�]��]��dci��I~\w���<����
8�/�t��
�P���g�+ ��e
>*7E`S# �
��3\�G��HpχH �n
aKS[��K
5�u�k;�mɶc���V�ރ	iE�HD������_+�߾U\�'�9GVXJ¬���9M�<~̨���փ �I+���q���ij�L9%��A�
��0p��cF"((�`�77 Q����#�' q��� h[:�-H,�n#*Z_YXO�
-=�V�y�!�p������
�LY���zY*K;�x2��}{"w��7�e�r
��"Iw�:G�S
y�\�V[�<�6'R��չ
n%�:溬'5�m���Dtb�Z����L\�&$
-��ܾ��~v���ן{��}߻�����<%E��&�g������IN�
��DH�J��
"�NƄdD�]�	Q�!�c�@
-�d	*��>7
�8P�W%

 \� h�`3�^l:�9�3��
c<��xWo67��!����ʺ���[�ЈZ��I���4�z{z?c�vT�g���C	|ޮ���X�.�qDh\�1�y�X��C>�M|; ��egA��� ��:܂�8XJ�[7X�I�|0|�����N�7
�����w[{�Ekv��c�JȬ�����i%J-��Q�#�u��|FB���ѵ�<~�ԠV�T�w<k�F�K�};�#9a�X!���ЭѨP5w�8G��ĥ�eb��5�@�
-ݡP�
-�`(d�B�
G $��8������&��{j?��S���
�p䴥��W5z��N�K6�
�V��i�|Q�Ah
����4�ݪ��(����d*��i��sZdD(k}P` ͏��Gg��墂t���5R�LT�c��+ʻ�#��
!� �
1M��e�+����ƅ
��xoBj�0�ǻ�8���O�U��N�������☤�"ţ���>�|���_�JvV��{J,�͓ɯ)��l/`�
���R|Vx��fm�
��96���pL1c����3Y0��ߜ,��/���N��P�[@��Q�t�+eK�T�e�9ۏ-p�
-�
Ȯ|BpW����$�
��%IH�O޿y���:�~0?_(g��D��,�rE}K�
cШ+)�J_*=��I,�?!�
4�
l=Å�[�P�ծ�=�Ğ�	[������ �}g���
OZO$o�!xL��=�5�dbBC��)		�O�մ�>�R�I�r�\���r"#;�@V�2[��k������c��lz��i5a#*�X�m�?�;�6�2.�#�:ĉ֙Li���������_ �8L+
endstream
endobj
292 0 obj
<</AntiAlias false/ColorSpace 281 0 R/Coords[200.832 326.766 200.581 446.121]/Domain[0.0 1.0]/Extend[true true]/Function 296 0 R/ShadingType 2>>
endobj
296 0 obj
<</BitsPerSample 8/Decode[0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0]/Domain[0.0 1.0]/Encode[0.0 63.0]/FunctionType 0/Length 256/Order 1/Range[0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0]/Size[64]>>stream
-YGH ZHJ \JK ]KM _MN `NO aOPcPQdQReRSfSThTUiUVjVWkWXlXYmYZnZ[o[\p\]q]^r^_s_`t`auabvacwbdxcdyde	zef
-{fg
}gh
~hi
ii
�jj�kk�ll�ll�mm�nn�oo�pp�pp�qq�rr�ss�tt�ut
�vu
�wv
�xw �yx!�zy#�{y$�{z&�|{'�}|)�~}*�},��~-��/���0���2���3
endstream
endobj
290 0 obj
<</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask 297 0 R/Type/ExtGState/ca 1.0/op false>>
endobj
291 0 obj
<</AIS false/BM/Normal/CA 1.0/OP false/OPM 0/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>>
endobj
282 0 obj
<</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>>
endobj
297 0 obj
<</BC 298 0 R/G 299 0 R/S/Luminosity/Type/Mask>>
endobj
298 0 obj
[1.0 1.0 1.0 1.0]
endobj
299 0 obj
<</BBox[1.73404 42.5696 75.7419 5.0808]/Group 300 0 R/Length 69/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ExtGState<</GS0 282 0 R>>/ProcSet[/PDF/ImageB]/XObject<</Im0 301 0 R>>>>/Subtype/Form>>stream
-q
-/GS0 gs
-74.0078095 0 0 37.4888263 1.7340353 5.0807957 cm
-/Im0 Do
-Q
-
endstream
endobj
300 0 obj
<</CS 281 0 R/I false/K false/S/Transparency/Type/Group>>
endobj
301 0 obj
<</BitsPerComponent 8/ColorSpace/DeviceGray/DecodeParms<</BitsPerComponent 4/Colors 1/Columns 1686>>/Filter/FlateDecode/Height 854/Intent/RelativeColorimetric/Length 215908/Name/X/Subtype/Image/Type/XObject/Width 1686>>stream
-H��gWTIF�%v�DI"B�Y	�P�`�
���?��9Uu�n�n$\���v�֬�f������͕d��L.	"�%I6'�>D;��9E�A0�k��/� �!�p��m[ٟ��xI	A�"�
��!�$�%�"����(o�:Დ�Hb� �%Y|
�R~��'�	��xEB�S�!�pjb��-��<�i_�vIA0�%�

)C��%{�N&X^D�i]�F��D���
)�I��,
]�85!�ډt�%#�!��jHy Lb�P�DQ$�̵�r��N�.!�M����7�o1D(b�6ɵ�8Sy:����F�"��v�q�
-�"-!�"��S�z�����=ϻ,]J�	�M�!e����I
	*m�U�P�6�W$�5�R��I��I�.��U�,
�:�!�܄b$�8G8�'�֧:�?�o\��xZ�l]J�3	�K�&�$�
9�"UAEt��0E.��?� ��(�l��oF6�Z�'��ϧ��%ɒp)��m�!�M���9�!U�Lb�P"D���&I��yVg��
���g��ΎA�NH��l
7)�32��+S\�����;��p�$囲�J���sἵz�v!�D:�2%�$�$ϐHEr��1�֌7;�����n�'
��d��5x4�ľ�T�w^�t�D:��Ry`�yI� ջ�����&=ݸK�\C�"#6J�p�oJ6�X��9O�s��R��3a��H'$�/J~C��ͦc�*�4�gH�"�(yM��©"�nJ5R�����O�W�'-�?ݦT���Z�����Pj�G�k�I)6�Oщ�8�
��2�L
���
�Mb�od���������6���iRڹ]"�*$KB⸆x�T�"n��$kH�rS�7]&S�K�%���a�j��}� �j���h�td�<� [...]
MR�
IR��s�:tE"
���$��B�R*3Q��M"��7e��:�.Ýx�7�JAV��;&��t/�1(�	���K���g5I�6U$e�	��)b
i3��p�ؐ��!WC��"B�R�q�$N�F��kJ�npWѓ
�����%d�`
��"�0�5H]�1Β('\4W�qf7�V�6)hH~��uQ�҆�q�(L|0�.�s).KI5A�s�;�%m
��&)ߠ�Ƣ����L_
�C�V��c�X;���K��z
z����GJ��(Ur��lK�":IT�N��ʐ���
Q��!�mz��.9�
7��*g��3P��fդ6���D��f�L�>�W<�G���c�M��#� 
�Ʉ�t	��d˒H'\�Q��Vcf�1�� A.�ߐ,�8��׆�"dʄ�)`�K�%���b��Q�JQrf�g\[]I��H4�400���c��
v�ܣ6�2uz�56���\�eI�� f��(��
�KA���C��!}�4�|�x�͟�2��QD(hQ*E�kR�IR/	��f0�&Fr����=yH�y�α.$]d���pB���`�L��!�z4��ߐ��!���]nqY��&<q����q�$��~d#�FG��1ø����������|d��&��A+����9�tI8�T�R
��x�Q��jcC�z��!�!Cbq
!E���L��x�Q��\
-
�rnBQ�?��(����M�I�nÔ#�l||bbb��RLG��wxOB>j��� [����%_��S0�'�
-��FQ�����w�6m)��9��kȤ2d
y�6�!M7u/�\�!
�P�ʔ"R%��	U�w`Uu�7�8�$�u�
M�g��33O�S0�
z�Ogff !܃zHk��C�x
*�,U�,I��
ƩRx�546�ن;	M�jӣ
��FڐmHE��LQ�<Cx�q�:;�\r�
nR%�p�
�U556Jm�l
�@Ǿ���mP
������/�g��H��n~~n�|�m"�H;�����%��f隒�=��:�����"�(�9Jf�Q�
"I�H�S4�(D'7d^E�!(O7����Ҍ,��YC��ƭ�فוr*Jzb�N�3��419=�=�_ Ŗ����W���y�
=ZY^^ZZ��T�٧�
��������RT��SP����\J��RgWw�=�$�6$��E�#Rd�q
�Pd�Q$	�id����s��MgI
�
o�*�
h��H���&�!I3Ofga�"�F������oll�0����;�l������Bro��;h71��%�,��RY�����I=��qO%g��(ݼ���y���g�УZmS�\$V)"C���dSd�!CVؐ*O7�-7�Kw:;t���&��@P9g�9J4{3�0n#����g�V���4�����������y
	��7�[[��d��:�G���>��ut/
�t=wy
�,�)X��I=��	�J�"6J
�wh�=�ly�3iz�)��e��:RC6�3�B��!k�ޖ��h��`�r�r�C��8KM*Kl�/Kb�P����w�QN]J<��q�$���`��M��vvvww�����7��Ox�����C
-no�<J��������K�CZ:�RsSC:Ug�$U.�`���V�J��ij
M�j[x��̛�A�vH�|
�gCHǐU
-��4
y<<48p�����d	í�"U
-
���T"�[(J���2ָ�yn}�t�
������÷o߾�~�?��������ۅy�[�aZZ\�.�
f�7u��9�b0U�N���UUյu�tCS3��ޅ(e��69EM•�|m��5�����3$�"�!֐M2duyu�Υ�������pC���w*]�S��
D���
��}��f 
J�I+�$�F�

�4���O���>3�F�?


��GH��}�aZ��ia���(I��t�����!U_3��zB�4Dﶺ�G�v;]J���A�mS3ܤյu$	E�d;8D�H��
�
4iz�a�.�r�gtx��t��C
��n�!�!Ba�8g�����Q��C�
��P"�I$���>���T�d_����~��c��Q�H?������(x�޿;<�v��7_n�^z6?��!K��,55��s4�J���m����T����UE���461��FM�j{�zw��M��ʐ/Ɛ,�x�
[C��v�馺�sib����Cd�ni;�*H��P�h�ʨJzB��Fށ�R���Ԍ2����kJһ��
9�i�}����ϟ�~�������_�~����
���}>�����aҽ���Ę���h
-�45���sT�2��pA8�x��Ԩ��z�����44�xlr��ܳ�n��ޛ÷�?P�H4�3$�"�Y6�1���gS��F�
-�K�b�7��HA�I�%�)�B $�.�����r�޹��$�(���e&3����|̚���ښ��r"^B�%'>��'hi/܈n{V:ƭ��io�9�@�����'t`XD�e`*#�9�������G�`&��dr�B�E�}�ыB���e2����xM"`Wͨ�����$蠥���B._<���#��S�c�[�ߑ�>!֩t���K���m��l)�'$��ef���Ie�U�P���D6��JBE�L ���$j�g�V/�dg��$&@K7��Í�7!�J���
�d7���Bãb���Rz������� \������h��]�J�J�V�5M;��	���T*% T�e����	���TT��4;3-%QXK��a���c,q+�;����C��S�]F������Rґm���ITm���Vj6���=BAĎ�n"D��Afj5���K(7̥��������l�����@��
�?�>�\rԁ@.�,u`xd����2�1��K+��&$��S
-ܔ*50������tz���݀�	�����z��FMn"3��uՕ���\�N���ب��`��~HAO��������TB�yQ���.�FD�^�NK))R�-(*)����$q;	�F�h�6BAD�!�6B0����
^B���de�&�Z�an>�/7~Ny6���$L%߀�A@
��I)C	�5b&8�� �N�
���a���^���
�������Ѩ����5��k�Z�s3�JLdxȟ�9X�C��_<�/����T�

B���ۮ^�y'�abJ�TXTZQ]� j�j�)`$M#��J��_�/�Vv+�DH
+����<��(�b��C/�pcc��7+qD�9�9Z����s4��b�
-
h�Ry'8⍄4�F�F�i�l
�?���l6��LF 8d
��z�5S�D�
1H�1-%?z@)x�� c�g�9Wn%~Gu�[�u�?�����TB�]��y�>����$���V����FզT�h{u �0	�����@H��OۣVvɥ
��R}Me�UK�	�p
����i�
-7n%~N|�V:��bE�
S�?���K!a�1@������
�2���S(U���fk�lbbrjjzzz��
�>�ujjjrbb|
�G�]���Q��.�BGZJK~)
r��u,y��������8+�Tr�n�@�����{���{
%��R*.��mhjK:�]*��W�?h@��Fa"!� 2�a��!� Dߧը�%I��ڪ��RzJ�C
-�ب���t���]K6B8"����BRr;) ��t��
g�Qfd	R��P�H���$���6ئ���ܜ�2?����	��-���,zP��8l uj�B�A�AKE�ٙ�I	���ֱt�۞���J����t�Y���
�v���u�ҭ��	�i�Or
�˪j��m�.�Fۧ�hC�!3!�"�Gȋ�i!CH7򒬳������
kI�����p6��1�l�����s�s���
� �\�����
��=+��aR"���a����$�4k�d�KK���+++����.---��y
ț��7�F��}=�n9A�P[YZT�4+#Ֆ�K�Xs
��J.�J���
���q���T��;�&�fd�AJ
ͭ��n������<>15
Y��Y>���?1�c/u+�qsc-i)�IfZ���nֱ�Gc�9���­�ω�!w��J@Λ�;��\Bu`aq9��@"�0
�&�p[\"�VW_���y��;�>�y����zu���2�[�̽������Z�R-a-U�>��y�.� �RX01�/0��)77�J�8r����Y�J�����v�v���{
�dd=�/*��mlK�
-eO�
NB�AIs����p�@ȡ���,23516jʭK&�`-�S��$>���R���=B(�!
~�y{V:q����5	���"��TJ$�
-�˪�D-m
�@"�8:>5%��� H{����������������������o@ޫ�%`7Kԙ�
�}=J�`kS}uEIanvf*R��Rd�>s�6�Np+�;����	k��{zy����w�m��O�V�`)I�]�
]��9����!�F6B6%d��vm�Y\��t
1
�j��ReY
�K���4����x�v �#��9�7+1��
b�JɄ\Q:�E�)����
#&�Y ��
-Fz�@ڇ�;;;�����]�no��~
�AM�IL�s3S�f�� ZP!m.��.�LO����dǜ������ĺ�/ ��E�mqB�e?-(���oj�ȺTZ����LNB�!� �
 b%d�PBv![D����K�҄�4<�ת�e���
-�'��{c)��� n�pD�9��[Ɇ
B�/ !
}��{�r
K��
$�~���
�����`i�>}����ׯ_�}��_�×o_�����O�>�[�o�V�%�,b�8<���:�[�J���d���Ę�t��J^
�9n%~GrVra��{x����-�6�r�ʪ�D�ۥ$��ad�����e�$D���m b%�
#� D!_!���DȻ�ׯ��f&�G�
�^u������-�Fc�Ƶب�F��o"䔛�@G��s�`��Ǐۅ��_`��K!a�1W��C+r�u"t� %�����"��v}�����O��0���Ǐ�?������/�~�������+��3mn�{���^L��HKJy��R�� 7+#c�f
1wY`���/ϯ��5���:�PC�^��&�WAAD�"����T��4*
-�4�I]@@��{�����I�8��O�]�u~����ޏ�����Q9r��~Z�(�������
EAIY��`�n��stt[|b��7���k�q���jC��>2�	�L��^B:����G�k�+ʊ
ne�p���p
�c�����H_��A��()�#B �BHD�
ΉXIrO2u�
M� 9����
-
�[X
R�{���%vROo� ��B��9��q.�;����q���X,��CԽ&��-�eg���\8}*,��������'sTsbb���
�D�$&�V�WPR��kh�n�����
)i�2s�j?{wRGg7(iph��"���-!�&����ҋg�j�U���ʼ��-&*<������������������U`%1�J���I�Jǎ
 ��B�  ��)D��9ť��
>z���9	�
}7�j��)�������4�›���9l0��� �R;�i���ܬWR��X���vwq��<!`� EVF��1d�a�������!G!b�`%Y�����CSw������?�d�켢���4�|���	gRAO@�>�`BxB�!�}�=�ܚ�45��T���Rr:�|<\
m��M
���
5UeE*"DJH�!$"��������qpq���8}!���w�����H�U+��?4�z��p��G�3|���������� [...]
5��(ܮ_IM���
-
��ts���05��a2�4d% ���C�]+
?��J�j���v��
>������
-KrMp)���
-DNG�� ��������ߋ^�������<��v
�����\Ku�p
-޸
-�0��u�30�JP^h�㤕�
��Z��J�TEU�S������$t[8t[�%���e����Rjim���
�j�����,bB�A��	����KPn��-��������������3����.6�'�
t�4�i*�
-��J!���
���J(�
M
}CA@��/(<*�r %��C#�I�)�
ᶴ�~eeeuuumm���emu�}�
p�M��X��=���
=�E)�RZJ0B0gA0�KP^NVZR����گV����+)���Z��m��.�>!���RP��Tܫ{�Rk{gO�����;95�#		Y���&d��K���`?�%
n%Eyp,]�����hkefb�����������$�D�P崙 ��d䐕htSG�B����8� �\K��ì1��$4 (	�oe@[_�������(:x���X_G�"� �3��q���`��^<m��_Yz;/�ƕ���\X�/b�3'(A
-bN\L��������JRҲy%U�������������o`XdL\b�����eU5
MO_�FR��65�%!#!B0"��""B�""dj��~72����[��ₜ��KI��F��z�9�Y���ik2�T�	B$BH+�;���@N`%i�`%
������
 �z*Z�gЁ]�����8p��
���ӧ�����nk�ӧ��;����I�nx�����H��;9�s�A~^���
Q�{���#�#�ON`�#�XIYUM���gdjnm����
~:6>9�Z�’�{��O������6�
T\H!�� �#&dmeŸ�Mp�XC}=�D��c)����)	��D��{�t��175��a2���JһV:BZ��a�orB+��A���5�t
�ͭl��<}�£ΞO��N W���
b��1qव�H[����wvv�|��Ut��eg�z���u������i
��Ro7J����ʲ��,s������֘9\�
-T��
XI���������J2���2M����7:aa����
q�܅�Wnd��.��}��YKۛnBJSӳ��$�$!!ۘ�}��l
�@���k7�j�ʊ�3��&�E�
-
�qwq��8a���ԠӔ!`%!!GH+�;��c%�]+��kj���[�9���
�8
��r�����e�5��˶���!����'m�������۷?𾋎x��
����!��/-���&�Zx
)���ú�������/�EG��dNP�T�
XI����/V� +�Q���4:CK���������'042�|b��̜�;�Tz񺽫���
�D(	�KD��������!s|�һ�A
np,�//)���~))�ldX�������������:MY	BZ��!�^+I��(�
-ʪj
������=��ȩ3q�������TB�
����4;��CN�@I|����x�
�����̴�rp}��2��=:��݁���%�����1Q��9�Ƹ���I+�;��g%y��
-����k`bfe����u6>9���ܢR�m�-m�=ã�	
n�
�J"�KD�����Kkp.!-q����Ame��ܬ뗓bO��y�9�Y���ii��T�!Ғ����
�a+
�c%*X��`j��Z�8@�FFC�����
�������V�SZeEfd���d�V����M�[���I���J�TB�_��s����~��Ư�ϳ��r������u�^���!�1�UzX�:>%�"ndt
+�����4��ǩ)`oc����-55�@
-�e�%�E�
��rw��45$�[*���2�FV�FX�o����壬D�y�6d����X�qp��
�JȜVPR��52���t��'(4�JE%��k��::�{�^
�����OD��I��QDH_o�RC���Ң�������`ߛ
���f�zZ�ʊr2������
�,�� B��V"��Doݍ�JL��J�`%�Ü<���KA����!x72.)-+����kAR�
���	%!�ffffgg?2.�33=0������y{K�`Y1<K�	QaA���;�[��ib�$�9(A6�{I�h+�[��f%&d�=�XX�8�y��$O�)*�i��[ۻx��
�NLɄn+���ojm'�44��D��]����y�R[s}Mz�2Sc�C��o�:ؘ��k�)��;))&,����~���v�J���+mذ�J��JG8��
��K�RP��B���oPXTBrFNAq��'�MЁ�SB���w��?� jsss���0.�ss�
�Gz	�%�-u=�)XQ��9ksc}-̜�*�#� [...]
���v��򲁎��s�R'D�x8bٿBZim%z�t�X���J�J\G��D%dN+*�j��Y�;C���$�f�>(�W	�{�
R�)%a�>1.
�9�3�t�Ђ/{ ��T�si�b#� s��6&ڈ9(A^nvV\�;i+�[íb����8��ENH�ʟ���cp���������Qq��9��m5
�m�:ѧ4<:��m��6��ª�`Bp�}��|��p�C��܀������Q�A>7ݝ쬮^�P9wFV��� 'i������QV�HZ��J�`%^~!1	9Ee5-}csk����+*�W	�����
FH77O�hqq�3��H�7�qA7�v|dh�JAx���
���%h�����$J����.�Ji+�[����F�J��J�s�
<..u��9�K�W���o��E'�d�G�V��
-�������8�m!
��U!�
23=���
=K���Y)��a����;_�65�ոx^ᔴ�q�cG9�
+�������%+m"��Y����W at XL���
j��&6�n���,(.\� ���D
�2�"��ڗ/_�2._0z 
P����x;62��׋����ʒ���Ԅ� ��<FV
-� �ad%f�J�h+�[����&�J��J��JB�ťO�9���khj}���-���Ĵ���R�mO;�z_����p��,����!'L�Ǚ��~7x��<*+��NK�����p��63�Ӽ��pJF��X��3e�M����-[i3i�=�J�`��'��^P�1�li{���'04:��꺦���}�Ё�)MS�!� �o߾}g
\�!���н�x36<��e��-
�������`T�V�F�4Q	JA	��p"+�����5��6SVڋ��V�>�p�����������HDlRzv~qyUMc
���1�)�l#�
!�mUDV2�q���5�[{KcmU���{��wn�pu�17��RUR<-#.
-V�BV�GYi3m%z�w�Xi?
�XIJV������K;'���Aa1	�Yy�8۟wr#co��q�/_1l?~��'������[�����P_OgGkc��������� \��ƺ��P��`%(A��~�J[h+�[�1Zi
e��JG��D%dN+(�j���8�ܸ
p'2�^����յMm�:{���ې��l�F„��&�+&da~�n
�ۋ�gmMuՕ%r3����x�:ښ��k�)+�>)!*�ϋ�t����J���VXi뒕!+	���ΜSѸdx����[~�᱉i��EeU�
-
�
�Jo�MN#�H'}ǰ����_���O
��E�[�D�uc�*
>��q/
�����Y�`%!l������V��F��J[)+�b+	����T����m
]=}�F%$g�>(��n{
-��
-��-Hi�#H� #�sUD0!�1!� �fp��g�����'�J
�2S�C}��
�,L
�Ք�ʁ����Xi+����J+m[��al%q������L��:{x��D�%���?�kj}��������	ԁ�8BJ����8;�n%tӐ�#C�/����'�%����o{�:ؘ�����+A	�V����S+�
AV�+)�i�X�:�y��F'�d��>�ihi����G���4Hie�F�
�܀�ϟ!��ތB��v��4�T��g�&Ą��t�fgy�@[�XIR
Y��}�J�h+�[�c���%+q� +I�+iꂕ�]<���D��˸��aEu}s� ~��ȑN"��̄���+��f?L�g��km�A%�������hkn�%�('��ĵd��L����~���%+qc+��+��X�]s��
-�NL��/*��ml���}502NvH� d�H�#B���25���]
mM��ˋ
��cƒ�n�;]��l�V���V�^�m%z�z�V��_���;�����PJ)��c���j+=Z��*XG
-R�P6({�7a�f��M�
I�ޛH-����v���}�g$����������*=�R��*��7hȨqSf�[�j���]aᑱ���!�e}�����(��v������^���s��9+��Rv����c�%�c��5�̙6���{��*Y��]%�t�Ԏ*AO�*��T������V�z���4q�������=x4:>)�LZf��n�~Ju�l�'r=�D\
���
n�g���(?���3�I	����
޴vŢ�3&�1x@�J/uuU��=Uj�5���[�*}�[��wrU�7�*

=~���KWo��{�ᨸ����+,)�0�s��$�����ՙѹO��r{s���⣭K0t[���
�*}4��J�%hUɾ�*��JP�J�Uz�T���V��cUiъuA�;�
���O>y������Rs�]�r�s��"���s��7��T^V\���~�drBLdxخ�M�V.��4v��J�_3Uz�[��T	w��U��7�U�կ]U��λv���Z`Ui�=�D�
?a
�9�!X^i&W玒���3��VgF�>�*J��]�7gUɾ�*-�;}�U��}�rU��'|�ԁ*AS�*u�V�'�qU��>v�&͘�xźM�w��G�$��:���[XRj�+W�<g�)Rˉ8���p�?Ke%�y��N�$�D
޿{�f�J�fN��Է��ғ�y�ԁ*�ײJ���s�3Uz؇v���ٸͮұ��T��/*��2�s��$�3fv����ܧ`u���7�aUi��u+�*�1�T��o}�tOG�U���
�*u��Ҁ!#��UZ�~s�U������2��*����j]��l3Ej9�rsn�g� [...]
-ټ~�bw����ݷJ�%H��G�����қ=����dՆ-;L�RϜ���/.������=��N��[�RmueYqA��gRM�vlݰz��J�z��[���O��&U��O�����*��w("&1�[%39'JN������Z�]cC��˟\�V)�x\�����*�
9d�_��K�*A�\�>�W��CG�s�����c�I>U����F��f��r"���>ܬ��T)9>�����*�
6ȯJ��*����_�Wi��9�|�t*-#;�������tU�N��{s9��UZ2�d�*�.A�}�U��G�Uiʬ�K�U:y6�BnAIy��n��*ٟ����¼��'�UZ�`����Uz�!��6��*���UZ�n��]a�T��D�Iҿ���Y�3�kj��kY�{vlٰ�y�\� U���z�:=�T�*�޸5t���U�khl�m�H-'�\n�íe��
ݶqM�*=�x'��6��*=���T)<2�����3s
-nI�
-s��%�;�J�:?C�p�|n����-@��F'$�:���Wx+�T���q�TJBLD�*���9�������zK�RqYeM���%'I��gfg�Ό�ZSC��˟||Ѿ�*�t]�T	�ύT���{��TZQe�Ʀk�����D���}�Y
�t���T��;=�x�*�͹�*��?x��*�5t`?����F��oаѺU�p���R%�I7\�I3�.^�~�W]����.�5�*��E�4~����}�U
-Z�|�i�ڬ/Z����G�%��I��[xK�T�go.9!�����[�� 7Q�m;�
��IL9����_tK�T���v�Dbldx��`����KU������frN��$�ן���:3�O�56�]��Z{sT	w�/]���js�5]��s��"���s��7k!���,+�J��B� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� uT	Q%@
UDT	PG� U�Q%@D� [...]
O�ƪ�p�^,�t�.tt���[6������v�UZz��?��?=Vꆪ�w��vi�‹��آK,q��?��o�J
�2ޗ}�gm8֍Ti�v-�
g/�=;v�|r�a��|칗�
W�Vfz~�N������*�nW�Y���{�<W�;�A�����7Z��+s�Q���<׆���J�G��]�^���7��d��a�E�_a�=;��x'��*�
����9�pm����ώ�Zu���K���,W�Uo��]�.ٳذ�"��a{=;���m�L���7U���y�Q�=�k}������G8�3��i��J��|�h��5^��.���/�h����Y�
�<d3A�^a��<7��� �rk?�T):��a
u�K�f��$����r>�\�0�Z�f�*��k�]��*��@e׆[6ܱ�
����ߪ��/�ұ�����~�[�Rt�� �G������2X�Խ9�Z=֓~�S]�0VY�~�U�W�^�n���ݬ�[6W�5=�3F#*R���_�������N��m���Rp���
�ht��+���.�Bw�}z�'�8���i��Jw�*u�t�v�U�V�f���
~z7ܴq����̈́i�|}��]m��P����.���J��
��de�Ӌ�ozz�gw��x|����褻8ѥ����[Y [...]
�}an�չ��Ox)hG��*
G2<�3�Lq|�ڌN���<����s޿�.�}��O��������珻*m�/��r�^�v��U���^|
ߘ�5�l�c���0O����
v_�x�S���Wn�j��,L�V[�f&��<pe
•��Cmm����B��~q�e��>ϩ�����8d+���?~�Ui�������h���*������g�e�׬\��w��]���\����A��s
������n��	f/�����*5ߖ�aԓT�
Ree£
o�c����[�Bw�G�r�v�.����K��x�a
7��Ti�s}��/K/�
i�_� ����U�Jw>���֭Y�e펍�4\�'د��7I����{
�iF0�r�]nGN�Uz����l���V�az�Ӎ�Mp|���y��B7������t�m|=]Z�4VR�f�*�o�,u�ѫ�~��e�^�ru��[�ϝ/����u��l�d�2�a��r֢$U�t�O���~�
�e�d����w���|aZo���m/�望�
��ݍV�qr���������׾W$���I��~_
n�B��>��q�uK���lWQ�n�6U�,ݟU�d���~=NRW�2H�nu��]��[ߦ����o[Q�b��2�6�;���/�A\�$MުwߏvwX�U���x�K������/�����V�]�e��R;�Z��+s_[��ӕ��L�6��M��i_��&M�����z�=��l��0�p�iL۴�K+��n�~n�n�u���(��+R�]�n���_�?��
�]�f͊%�.�nł0��K���=��39x��T�~{�}���x�����r�����y+8p�����}Q�v�
_�j+�\�~g���
�hm>ͮM%Lgz��O����nߌ-���w�Ut�6�ӧ�(T�i�����b羵Kw��@3��f�vo|�z�۵]�f�ڵ���/[�V4��[�gݖm�l�c��_�a�[K��H�୺
R���
����*s/�^ν|q���糮*}��XTi���M�}�+W�Ky�?O���6]����<\���
�$L'-N�I�
<��'�i������u\^ŕ.
����]�Ӧ���Ә9�+����W�_~�Ti�t>�ۇ���KR�_�z�A�.W�Z�Zmo�߶~i~�]��qj��ݱ�L�+�늻6�T_ϾU�T�a�����#ӹ�W\�mo��;��r�?�ݖ�ڪ��sY����v�-�T)^��Q��fz|����~�7gz��Fi���
-n������2�\����ȝ�8L�"}�U�__�����f��7Y�
��?V&iX�f�6˵ݭ�f�K������H���l6�]�͒�W�f�ve
-�4:�+����N�t7�"�������?
t;�N�s����O�w���vwp��i=U���қׯ��`�5i�������2w�3��x�4bؗn荭��A @	�4IH�v��U
U�S��5���l����؉#v�ĉ�#�����������;5S���J}�w��ܲ�
�2�2�����*b�Bl�#
�1���f��
�ngs�
�K���Q��f�)�c�'S��,1Z�J_��J�H%0�@?�̀%���OgG�$e/1[
�%�83

>��D��ψM�cl������:7IQ�V���>
�t�I�������6���:��>L';���ʖJp,���Fq�>�"y�T��c��6���i��]hfm
��.����:���,a
Eq�UNl�')�j*mH>�N&F�cS�F2��qkR�?���,�֖
��G*��P~ �%��]��B�
�Q)@s���W���0s2�f��#JKt��\fL�
c��ô��_Gr�^��
ŤI��Q_�	a��j��`�>��+�k�4n�	0
q05�p�J�ۘJ]�H%��d؅�>y���b�eh�3z�j��8�>��/��
ݥ�r)~�m�I�o����F���dE��#B��d���P�X
ˣH�������\�#F�R�G�J[אJ��J��y����E6߽��K�/����CmEɸ�>��D���N�eh2��8,	&\Cl��R�I�3)�$E$
����/4�{99Nx%����T'(�d"�{�=���<Piy��6�RoRIB���II�NU�|�L�Ur�H{&�
�/؞ئT��u$����~��W�]Io�qFDzBS���X
-��7�Ʊ�H���S#%FkR�g�Jw�Jsӓ���q]�4,|�{�Y:�$���D�q��p�BS�(\6�sE>Y��(-�id3v�1z��
�)�R[�q)�m֙��k��
c�U���Zh��j<JxOv_�D'�d�E�;
	Ǹ����6��1���J�%�Rۧ~���8e�ie��:���G�[
lS
m�H�;
�2�D)�C��
�oM�ÿ�g�¸�.b���	(i����&Q�=N�
j�
���ݯi���TZY���UGG*��P>/	$�yHAX��LT���(%�Yh*��kkk�8W����%���
Mh���|4�

��
�f�/��z[�X�`��%-��II�V��<�a�t&��Xh�w#
'��NDz�tKuW
-�Y`:��t��C���4�*uñ�!��
�P�$(q�fշ̼���`��m�<�����j�6�Lم���\�`�'
�Ts C����%�dJ�n�&�pv��B4;��9�x$(:���]�W�t��_������S�������Lmbl�ǒ�L �E���w�D% ɘ
�E���ظff�7��|Dq	V��	��c����d0
-������T�Ir&u�	�ݪm�ͪ
[a���V�ɱ£�,���b���
��o]Y]�9.�7*�J�؊�!�!�-��L�'H�u�m�e`���d�v��e"۬[� ����m�B78�X]F~y{����Oaa!0y��f�G"���f�ϥ�A|J�A^���=-5z�)�{�T�Ũ�?����3��|T�{ss����������J���c��q�e�C6>��
���N	�2Q���u�̭h�����>C�AF��cd1h�
���Se��I�N�Ō��:Lj�Ju����UӅ�3lU묅eo��QÏXw'{��r�T�Ln�L0%jw3\j}*�X*�T
�r}��p,�/��`�tzg�8B�s-3�-��D�e�����v�ms���Dl����
-]��8).�[Z��k(I
-w	��pa�B���ӣ�~k�#Ә�8��g{-����PN' 
C�B�*���Q�n5*�Y�􃯀J�v�޼~������q8�J��|cp�"���'ɘ
���BWa4޽{�
�}5��|@�	^3FC����d�&
-HpX

&`�lQ2�5d]�gƥ����jBR!ժ1��	H6�6��(42�uF}�c�Gݝ젻�[�	ft�F���x�B�R=.e���T��&T*
��wvt�({�L
��k��J�o�
��[e�e"��뻪m��`��A*t\)�ťL(��-1��E0�/Dl�����K6c
s�(#�L�%-�RC�ԕ�F�j���tA��Kn���֥�?��
-���J�v�ݺ~uuyqn�V�c�\,��E����`�/��d/�$X
3=������������_�t�|�q	V������cH�y&���RF0a4B2&���I=&}�'.�r�&[5e�
-ݡ6�0� �@�mz��~��Y0����d�C����@�ۄ�L(�;W=��|;�K�Js���TJ�A�D���p��2�L���D�\�,cvip�rǮR�i��l�ش�l���Q�
-C�`���K�A.%�����Q0B0y+0�nF�F�
��2Ʊ����q���l���#K
�y5b���@��K<1Z�J�*�]��s����
ܻuccueq~fj�:f���QL
-�$i"Y ��Z�Y�*�ƽ�Gf��1���0/�k�3����d��I�%\J����R�$לB&Iw��#��V-��w��0��
-��B���q�xCϴ�,;�n��mk+�"�h�Z�N7�
��RZ����W�J+K@���Ra(�������7Zh�2f�G�F�U�2ey��mm��m��B����Q4ƥ��$o�Ha;m��vf̛q����G9�NB&w�yI
c��}ݍV
g�A��I�`P!�ML�V�t�Z�w�P�_�J��߾x������֮,-�NON��a��H
-��`����Hh.�8
|������Ӄ��gј��#�K�54����ɡ�-��!e/tW�*KQA8m,�P��,���ϤAL0�CӭZ�d3���	��B���a>ZݑSq�oT
-�:���w����B*t4¥�r�K��B�u�Rut�\
���0=�<=��I�l�#�<ЫT�y�&�
�o�g�Dl
-l�U�r0�8O4��:���P���n��
z��
-3�g��3�iNgdB~�E(�c,����r�]��ƨ�QmJ���A�b5Ӄ~
�R�H��	5Z�J�*�����޿{�l���;[��W./���&��%�$eK$2��%��	ܵK�2�ˆ|��xx���K�Wf����!��1���$e$��,&��\ʅ\�Υ��R&�\���d����bIa��������Y	��z
�+�ޓ� �J��6
�^�Y�I��
L~�n�K�K%����M��L�::R.���%�:����ިݧ��/ql���#��CY%/�Gls�����ؤl���.ty�K�I�D\��tQ��v�a����-	2��
1[33eg:=�s���32��b��yI����6~J�V
[?#5j��1���85��(ڞ[�8�k)<
[�J�
����������}����϶��ܼ���4?;�X�o��d
f�D�"{1��G`-�H����o޼y���;����?���C�K�5c4�3��>�IY�
����
-������s�
�ڈI
Ĥ
d�-նU��d3��L:~��
-M:��_�|�#b�Qw�����}�A�	|2`R>�jw̥�%�*��C*�*��TJ���
���6����KLRgU
�'�S�)
��c�Qj��1�7��=I���I�9t6�
���Z'��@���d%aR	�
����c��~�:�(�Һ�
��%�~�;

0
��0\
v|�/
�p ����
�6���Qڪn�^T硩�Tj
��>��R#5R+Ej��V��gt�����;�
`
��Of8H���Z��)b
i�d��
����y�i|���� ��8�
,�����޵�J˪���jx��j����:��a)��**��?%*���G�Ο>љjn��VW�XҥJ��dv>�$�
a�I��pD�"c�TƁ�����K��'��
��>X
F8�d���bp���8�|\�hp)C$�ً�2&quRf$��$�H�0��ΰ�
�{�:_��F>��}�
p�
�]�9�l2'�ٺ}�{��p);��zS����()<�w���=�rsw��F���n���$�I�P�z�O 	��8�p�G����6ywz}j}��>t�3^�$[��<���w0��ک��:�p)lj�uV
�����aRҗҵ���SfL�=��(�I	�r!�)����=T{��������!Q����(Uj�P�Д��Jqh�aa�w:~+K��w�J��3��#��.�A�7�Մq,ɫK >�#�Aw>TxF�j|��v�G�^8�|G

]�2<<<�u����\A^�k0ی٤=�C�#�9`B6�hT�򶥍˝Kk�b1i��I[�-��jIV�nn	�0���B��Z�2����"���>����G��/ܚ���d]Lރi���J��0˨��6�R�ٓD��h$\QZt4��r�ΝoҵDo�6���V�I�PA�/�i-S,ӧV)��U�qlîѶ��P.T�s���Ԋ�B��ϥ
��	�RN@
��1�c�%H1�#���"�S���c�<�3������
-� ,�2*��d�A?�R�T�Rj�)5����&�
5
,e��QT���K���������/^�*؞L��q,��7�����É��H�#���w	�Gp�0L�`
���
>Cd�mJ���I�IN&
���?�_�&xn?p7p.��2
J�����.��
�D�Ӫ2
8T:Ch�yLd�Fs�7�T���Н<�\����[c
'��B7��I�-�KK�KYJ�E/��B�E���g�� 퐖A+�V%��W5
Y�*qz��GL#�r�]�X�3�6c�m��Y�s���:�:u0��^J*�5��8�)�9y��*�jL�r�O��p�Ly\��_��@�%�@p��
�U��m�pd�[P2ۊO�0�Q�bj��F��(EM4�O/��-4�ѯ�J��T�S�)Qia�έ�����9{�����)ZWSUY^&_R���"��0fCL�����${qT*sGd-��,u���7&'obn��'''����d�Q'2��Y��
���q6�_\ٱ	�K[�hsY�Z����K�&m�;�����+)�
-{Z�
$%�����5z��&uoc޳�?�YwPJ�n�!ܤ�L
&q���n߾.��"f���)*
�J�ɦhmU�����r���7��5Z�!
-
}&�������mk��WJ�Y�eh������:]߸�@�������3
-]L�J.t|�F����
��å
;�-(�
1�כ+Ep�[S�Djkk�0��
?EO�� �)�M�ŚK�>,��x�L�
�%�54��jTZjԽ�Z
RdR`�RMH�F3`��S�<�O�s�~��G?�h���׮���;u�3���G��!Yx
�$�3KK!�6�F�u��%ً���$Y
�"W!�����
����'�4=5��$���8&DŽMd2�Y��Q9�����l��	�(���
-�Wr.-�$��ˤ���9�[� )
-��Z� �ž���O�u�Z��ϴ3�R�#;���I7O�uu�R'�&X� 
��y���K����JO-*u�'�
�Օe%�G�#���r�H�v�+���J��6�b�������5�*ӖcL�L���(Y��ɰMz-�^���cu�b
ޜU��m�['c���
�x�I
S�2I:���Fhb�X�LS��/�
�F)�)�)��L�)�$1
K�m,�*��h����}�!����h��`1X
�i.��%IC
�o8X��W��J��Tz�}�Tz���o_��@���'��'�
u��\���R����Χ���Dž����R<�d!"���33���we�Ѩ҇333�K��6�$�@r�x
y���;��	�/�ů�Zz6��%�K�Υ��R�Q�n�W����3I��*�M�d�j����:O��^��
�
����^d���S����
�A_�Q)H%[4�jT�!�^u�f ��<��~��"*=STJO���;���o���,/)�/�+�8�{����$^)�
�
�h����Սu���
�R�Ҷ�=c�md}؟�>s{�Wp��
]��N
L���k�m�s)Dž�'��I
�i�R�L*�Z$p·�)
O$͘�����g�q3%ri
���_I,��%�}��� ��Pc�JD�"[�(�1V��+��� 5�L�F�*ة@Z���)��e��k��L*}��g�~�����{�w��`߅3ouuб��h����e��!I�`T�5�P��^��]��c���ߟ����_XX��
�d�~17�����;i�&2yL,�;�����e�
L�����k,m8�VK>&y���z����b��I�-E��H�#�h�N�9*
�F��Zt~@��7�T��dg<Y�n�=�L Ss���t'8�{�?�V¥��s�J7�J�;Z���pEi1� �9q�g��}�Ҽ<^)ZF�
-gR�1��"W#��y��]F�U�2e�o��9���,Z
w:mFz
-]���5����SW��Y��˥
���w��t+�wJt�&�������	Do2��ښJ��dڃG~I����d�L�h�W`.�$��ϋ�u� ^�1�缾~��hQ㐡�P����h3��b@
!�	5n�s�@��YZ��h�^�F*�WQ���s_�>��<�?=59>r��;gO
�lK6�K['�
�*��*F�JL���$�K������K	99K4"c-�R>z����9�����G�
�np�$�,=�
�䛉O&&d#L
���^ĥ�!��p.⪼��Ci)&�R���T�$
-0X6��"�n�t"���0�>t����=k�#�u'J!��'��i_'
�p�G�A{:�4�t��Ԉp0��mriK&.b)'����,Qi�R����;S���HU��)H�o+�_�IG�2�(�i���R�
Ǩb���K�A$:�x��eh�X�w��1zu�mP2��I��������\�q�
��K��Nc)J�-(�ٻ����h���r������
�
<�;<�����A�L��L"���
��K%��V��M���������s*eP���Pn���X�]���m�F�p:
-7Vc�|<�J],���-F6P�_��������_~��}�����'�
-N����;}�RX�?�����}��Ei]�u��Y�**
-h�E9	*<r�3r���炢���V@�bm����ڤ]�&��m�nY�%K�,Y�w˲,��뺿���ypn����)��y�s߿��\S�����+TѴ�)�OZ�}���,w�UR]�G��E��7vttvv^�eG����%��xj�i���Db�
�0�#�����������m��jK�����e�dä�n&ͥb#mMb�_g��
���Nյ�aM>;�8��|��Y�h��2]v��z�v�g�p�'���|�B*SvV �}A&��Cp�Y���L�O%�����W*�	�:O� �v�V��6�&���.m�be��% i6�4��
�.�/)�E��H�9U�k��9d$�[�ҥ�QM��|�zDr�
/(�mB�KօI��n�!��#��C�%��>i����چ�X
�m �ƒa�i�_offf ����=�����e2؄a���׏���Œ��
���J̢cmc�J�]"������F��F�� ��'.#�d"�D��@������&��q��[s ���쓟|���w��v�?u��eoS����¼��Mi)�n�*6v%&�Md>�IJ`��%@��jjfGz��V)�:�qt���=vuuw���\���۫���i�['}2;eD�� I��&(��F��pk~n6
Sچ�$7����\gz��|�
-K��(�I��in&�
���M�\�Cu�E������y�O��ѽd�ݲg���r��q��[���.�&{wP6�57�L\�S��Wa��&� �K��KO�>*
�JgN
nٻ���� 7�iCҺ5�+��Jٳ�
�3gN8ʚĘa\)#!Q�����|���j�S��"{L��>�W2����Q��|q^�dd#hB���

-tN*�/���M��Kr7�ق���P⽄J>F5��(ې����xsrrs�0����G>�rssr��pdر����W('��Xz�?B �l�V%���S��f�6�z�a"~���Co#�l#W�@�N`SbJ��15"�����9�n�ig�N��=�Jw߽y�rW�`�憚ʲ���-��� qqq�W�? ��D$Q`�"0Dx�$�%���@K+�EuqGTdw����ᅡ��>�}}�KqJ�IQDF�!��LL�L
-Le��<)L�K�PW$�$��֥g�y
X
-U�<Lb`"�~�gR����W������
-�gh$�ba:U�1
v��aba�sϥ^g���5��=#�����{e�]U(�gen{�ܸ����b
�

LD�EE.`2�s�9�B�%����P�T:"T*+�ݲ9-9a�1*�Ο2��H21�YXRF��8uP���F�S�������9�#�k�v"�|����Ψ�52y]�
-��4
�x7W]�b��S~.MTTRP�UI��n�Y�Z-�������sJ�
~�����Ȱc�	�O�_������ψ�*�����
!�����O�6�����u ��ed0%�JJ�S�v�Ĕa�#/9�Tr4�OM�?�J�|�՗��ч���}���o
ܿ{G]���������4F��u���k	��"����$
-L�$����[�,�"Q]�#����7^�~}`��;z䏁�|D��SBh�NVc��ᶃ��LpG��
`���>.�����ISt2��|����4vQzZ�T3ij&EFI��;�kRjC5
L��
-U�\�Z{�I7��͞��gY�,�������޼�]�~'�����7
skU������b��)O�[Zjr��Xmo�K�o3g��[�����d��J�5��*
\��A���겢����)��W�._&o��
"� I�I�1�8)lG.��S\�F��=8�qH�ݒ�-�Oi��&����M�x(��@WZ���d	�l��T�p�	I��d',Ȇ���CB)|~Dd��%��ն5�A��o���������o�T��y̯���������
a�$��?A;����6�I~#~�P��c�*M��mL�64��mBs�S���߆,�\-�X��'dB1Ư5^(XzY��[�����A���T��7_��g������n]��p���C���^����%�+���^&11)�HB�
 I.�$A_G�)"�*5�D[�(,���888xs�3|��P�&t���"��`� ӱ�P��!`�(/.m�o���p�po]�I+(��/�L2Ei2u��äg�����wt��&�|�C�X�v�Su��~��W��������y�o�~�'��'�ɓ	\�o�nV��Z&����tU��({[���j���7{���ݢ�ҳ�O�۠҅��GZ [...]
t�r�\��4�
�T]�a���0S���(�^�
>OA	�v�����<*��VTVUUUo����Ԏ=��_����3Ӑa�0�<���ĬK,K�{AF
f���҄��?�m���Z#k��o�Q�mT?�6��
J�4�L&j��
�;
-���
qJ
���	�J�Y*��B�/>�����ॷνy��eoscmUyIa~�� �����I�Ҁ$I��>�I��
=��~V�RIx4 4��h�CC�����φ��������t��hL$�
-Ce:�ڢ���^]Y.�Oq)%�]]�j����X��KVZa:+|���4I�)S�f�R��+��mn���P]��Ԥ,̝��y�X�<���]�H��c�x��;��Mg���M������nnr�� ��[&�Җ�K�..9��r)�.ME��O �.�Jo��knؾ�xkv��
I	kW���xQtttTTTt�"�$���$JF�8��]{����o
;ѮB���e#��wJ��]g\���}=�&}��%е8`b�ӅI[��@���8�K�=u)�%S�Ćg�(-T6�*��
�Eťe�Q5̷���������qfg��G���Z}}]]m
�T����y�6���oX���O#�2%DYz�Tr��o+�
�
��4"��F��lC-õ
��h"�MFW��+jے�:�':�q|��oM��)*��׿��?��ǣC�o\�x���#��w�`Y*.�;oޔ��&���q6�%ۤxU���I�׹�"/X�xt����FFFG�ݻ��̇j�xzot�n	�Ah���-#2hL$��A��
٘���/�}���K�F\
�ϳu�-�G�%?�&x��$壟���4�ä�U�_ɩR�\�W=�
ө;�{���
�g.z�Y4W|?���뵏p���;�w����|�U}^a|��mL�$��D6QD6APTP�
"
-.��{/�zAY�b7TP�Fm��
-Q�km���d�tI�t˴��Lۯ���9�}��rﵒZI·Lr/r�y���<��j�V���*��b����W�b���܍l`08g�Ӱdأ3��ƕJ?�T�9p9v��@��̾��`c�%5ye"4��'4$x��`Ԥ���Q�1q���I�E��:�pζ�N�L��d.k�|W��u�
��	�����a4!W���J��V��\�$��nZ�ӵ�R��x�U�i�y}���/l8P�p��	x�`M��߂'�
�-�ZmvLqqq	�^��-���j�+�ٽ��dڤ���O��,	#F?0�%~j/�J��:Dq��g��ב�z
�6����1o�f��Q{N@Ӗ��t�,�"A:~QL4a	ל�G�Q0��BF���5'��׿�J���O�JF�/��
��lm���(��,���Z֥��]��������f�ZMK�\��IR`�$�%_�$�K�u�<�Du�������M�[r�?���� �%�F:����~֘"�P�&�/rF
Cri���K�6�I[�E] [...]
�v3j��A^� ��B�S&P�ơ��*��J�p7�����\"#.M�\zU;�9
L4S��D�7ƉJ7Q��޿9p���~��Qn�SX�����fU��h`)<,44&j���8􂄤
32)e�EQ�8�U3�ZZ�p��,�SB2��[�F@�Y2�Lc��v��,�z"W]�9ЉH!��K� �9��z+��%�&���ܧ�{z�����H�FO/
��,8*�햖����W�T��SVZ
-_.�ȍ��(	�r���W%��	K��G?��F
F�ms=x�T�u�#oP
-
-	�����_F�`BK��m`c�F��Fo���4�($0�Ҹ��4a)<�\UG2A3��.T����~��㇣#CW/��9q�`ہ���R{Ѯ�-�T3-���Ry���Q49�h�i!	�B|�Y��%�$ ��&IY$�۷��GFFޗs�F�+>

f�$���N�&�K��	R�S
����E�y).A]˖�
b�Ki	eyxx<��Z�$�^����w�L���:��
L�d��D�7�P�0J�L����.�
&-̰�a�g��]��VOk��$�����lnD�����L
-L�n2vg�\Z��Hи(s7�`08����$�4�iTZ���ҿ�P�w��LP�
Q�R���C��u���o�ز)'3}���K��Q-懋AKZ%���^����EeMR-��Jұn�L�yOHfH?�.9&��'���Mr��S
����6;�:���B�H����
&�l
�I�ɋ��

����?`�����t*��.LHb��}+��
��555�0��}USS]]��� ?F*�등�N�Bg!,��H#~��)S��3�����3�? 0(XBi9j#^1	z/�(Q�p<kb؆�QUI� 6٬o�)iP� �W&%Pt�
���(�2���D�/@�_|�1Q	Q����^8{Y��a���Ķg��-�x��R�E
��$mܤ[��IF$A_g�RG"�@���&	F���wGGG?��s�
_�[�QBg
'!��d�/���º���߂7��*�KK�65.�K�-&Qw���,�"�AZƘ�R����X��+JĤ���jL2���$�T�
s��DBE�sž�0m�wyϴ��<L#>��������n���Lp�hn

-v�a�2c7�$c��q�K�T��}˥.�'*��7��P��T��>��\_SQR�s���,Kj
-Q�
QQ
"##"""I3LL�I!����MI]G�$��\�%3$$3b8�������e#�'"��M?�m��p�t9N�\�tD���.���%9Z������3c�9s�����
`Ö�ي�x�%�e���5��ں�������F�&���-�����\8UŒK�6��ęTK��%g#f*�X�0�4>�?UP�0V%.�r�h@)Ymc�3���6�x���r´����N�,�����,M�j��7E�O?��u�{�\<w��pgkS
�R�u����Ps7�dge�������ـ�$��d�5I�����,!/	$��l�"Y�9>|��C�G���
�Kh�u�pb�]������'�D�B�cy�H]��&%,%S��.���Rʚ��c�Nc��S�����3����9`R�+�TM���($51���d�V�	���F�=?{��~��h���N{���~Ӝ	
�v
�� ���)1p춸r�r7uV
��ҁ�p���FI���ҟ�~�'$���.��
��hi�W�׺k[���4�?���1
��h��$Ԥ��	���H�&�$�<��$�\1Kfĭd
9�T�C��N��l��\A��|�9=�I0��D�C�\�í".��D��u�5LH0M [...]
->yt����w�����8�v[3�R�^{�ӂ�Myss7lؐ��%)��$c��L)����}]����%�%�t��i���
?~�������%����Md��LBaL�G��
-���������p�|�.�IZ�(*<�\��%��4��&�Uzz���͜ &K&-RLJ��P��y������la���iǮ

���Cbϴ����0�#�x�;�]�}Ԝ	�������:y��Q&��U�0r�Fa��t.�܍#��9o׺d��d�T�x�T�)����
���3ǻ:[�U��vo/�����_C�hq���	�W(&�H&�`:�(�$#�z�pN-�i��f4�<r��~:�l��N�M�
�
-
O���@'�SY�˱���З�W�tp�(�H;~z]�꒜o��4ET��^�Js�B�u(��������	�G�jn����wttvv
ļ�9d
��������ho�#N0�Z����NuI`��AD����zY��`|���t23z�4.���j�W0�r�6�$�q��چX��N� R7""J)R� ��V._���4����3m
5�m�6�[\��h������ˢ��b�����ྡ�%n���(�*�Q+��h�Z-Q�1�ɤ��I���v��әv���<�����
7
�@��!���x����9�:��˒��񘨤4�/R�/���?�����T�(x��3'�
>X]U�s�f���
�%d���Ԕ���)M!I��-Sj��B��#G��,E^獸(-
-���%655��r�8��uF8i�2!�#��
��Z_�}�V�m"%�i"�%%�m��F�[u	I]IK'>�,�ҕ�
-K-_��(=�(�E�{������?`����/�5&8�f2ujz�ɐ�P-=��%	V��tԯ�	�͞oZ{�����z��ڭ�_vf�����1�ce*c*(v�I��,eo��R���������2x�֪�R{S�,&�	���BH�������N�J�۷lX]�d�������(K^�y�!�Ac8ADRXD��퍎o�4]1i�b��
�\#�%��D2��[���-{l�H������lp=���J��r:&}�<
-^
�C�#ҁKr6�.�a�Iu5���ĚW��~�
{��cB�]�B)�UT��֭'���o-)ٶm��
����?ڎS[�R$lZ��<>�5{:
-����RTx�mĦ,}��wL=hs*�嶗u�*=ӥ��64���6ȤB�
Шېe`%����hZK0����)ӈ%/�����}�������*��޽u��[Ͼq�H]��ݥ۶l\�z�R���3�gf�������gdff�$1�3��d��IJ`
-I�W�I��"�D����+1�;�wZ?���Ԡ3�L<Rk��9H
�
�	�����3R^�Fq*�)���
	Ru�HK��KY6�Zז�<R��D(9�Rg�.]��x�W��~
~n���_�Su���+5I�+�#�$��+"��dz��0����}[�ž����z��ڛ��iw����L
-X�vW8�ͨ�����
$�K^.
�+��2x�:��.IFpR�����J�O�^WSU��xÚK�Ϛ��:�e�ԍ



�����GDF�u{c�t�x��JFR��ILq�$�$�K憟SZ�4�S���{[����C6gϨΤt#�΀����[�P�
ͥ��r����1�lv]r�G�%�@��D1GU��`���(w�8%T���(���#w��~w�����WTT���;�#~Z^VVV��\B4mڰ~-
�r�Y,Җ�����,��
��O�)�|_�0��q��Ͽ�m�Gy��Ĥ�Ln�����U�Q��m�r 5�D0�*\�d��BZa)�;6B���!�6gt{��E�+*�]����Dt�߽���W�<w�����+�w�,�]U�T�ev���YYӧge͘�=Hʃe"�/�/�i
�~	�|��;�ԅ�'<���+e����{����_Rj�3�L�
��:+��$�j��],L[6k.�|�8�5>6Z�%F>%-&�.?21�ے�'�-(IQ�м(u��l��}���`Rx��I`R��������j�TM"IE��۲�w̞e��ͼ���`��׮�n����ך�[#��HC���
-Le�$�.��
{˰�$}I��a��t��bե��u�	k�E�O��R����6�b���N7�^_�Tڸv岅�ٙ�&O���y�]Q�� ���D�0i�fҊU�ME�&�b
-�X�tG��B2Z3�S��t��q>	�tv���@w�'Љp6���-�r
���$�O����D;ì��]�G���K��Qg�UiTPh���	�l��`�r�k��w���W��]Y�gϞ���}����O�Q�M%\����f
/�+��cA�H}eJ��P�0q �(~�tY��$/����������pn�
=n�d%lc�Rlc���ܚm�2��Jlp����{�<���S�'�7��b4�`秹��
�
�+��)T�
���o>���߽���]:�����U�P�6���X���ɛ={V�̬ٹyhI�L.p�	}�&A`I�/�,E^T�ڢ��+�8��|ҎI�AgJe�h
�?JpG�c�7R_�}�K�7oD쓷))!�J�4Aץ1��DZ���ueLT,���I(A�x��|�R����
2��/�4|�� 0��`R���
Mj���P]%H��S��RK
�k�|_�Y��C?c/޹v�w�	,4isC(�)*�tЀ	�V\$}u%�@{���Ҝ\b� [...]
�t�ӊ9l�t�<�ŕ���}��q��V
��h�d��˾���:&\Uw�
-�K�驐�6D:��v]������.	�l(�
�
�r0&$�卍O��
-�V�͑LR��

�ݷ����������A�Qkkkj��aʠS%�x�v�֭�,]����jl��
<z����>=�wC=�z�M�o���
�t;t�>
���$ۈ�O ��g�6.[AB��ۨ�ۨ�"�LB���Ι����4y�TǠQ�с`tF������E��I����y���ٓǏ���CY*)��
/���+ȟ3'�3'?��-	��b�}VM��Oj$�-���.%�Ee���1��3��P̒B�)��ƴ�Da&
�H}�Kw����Kf�LK}E�ԥ��#^��T��٣�`�sk���}��[��lY��
$E�L
-	�t��c�YL��љ�p���
ՕI衖�9R����}9���=�8>��
�
X{�Gwk�	4�
-	��
-L�ݶ:c�\r)��R4��4r�28���U�l��%
�d�B�!*}���E��gN
k8�owi���V.��?�eI�{\l�����
�7:&6n|�ĄLR��S�Q�q���9uΫ�$s׺e
�8O�s>#��8e#��	tǬ@�H����U� �f*�H��2N��%�	GǕ0A.q��ʁ�J�aQ����fdJ
�X�


��=p������������?�;t�
�z��I�
��ZJ~��qh���}z��#F���mJ%qvy��Jݟ�
�m���前�$���@V�F
5�߳�u�h0� �jj�# V��!"f�;��;���uE�,��<���+��u�Tj����fT������W?|��;Pݕ7ϝ:q��e�l�֢
�N�z̟7o.f޼�2_�AU�Y��ήQYM�I��آ(bÊHEzQb�� �J/b%D�k@D�Ҭ��Ս&�dbI��:�Lfw2������s��~���
$f6�{���x�y���<	�k�%DMZ/C�.�&՞D�H��Ty	 A[$-֕p��r
�Q~U,��&\R����0	�S䍤/rFɥB*zi��.B]�<��4�e9�1��
��B�X��)�~�yv %.J21ʢdie=xȰ�̤	'O�>��u�;Bu@�¤��	I����ZRZ�0�{(m�,촖HZS,L��/5K~�P74�W�n���3�sk�ʄ��0��nL\�8v��$%į�[�p)@�ntV�=
�A�.��u��z	�BU%�Jou%��mN�6A��W/�k1�<v��}e%�
-r֦&��[��D��������������
�2i��I�
\T*��	��yqN�5U��4ҝ�tL�p:8�榔͵N�!)��
-9���C:1�#��|'���J]�KaB9ɇ�$��Z��r0�֎ˁ���_PhD4C)%
6\�aS�V2�={��W
>r�������s\?��������\�Ht�����B�y�������`�N�EY:x o�/�J�p�
�
��
<�f��Jns���B��)���|h^X�
��/�
^m|��1�4�f.m�H�6�R[�]
��1�U�%�w���hPɢG��*	�=��q�S�����M��,�*����=+Ð�������fMRRrJjZ��
Y�6�зW�I,0�$�K�� kK�H��#1_)#$풕&��	�)d��$��
���%�6���4�&A\K�[-꒧�,W8�d��0D�C�_��_d�9�:,J#m�Ǝ��4����������ߌI��<���`$���=vV�,���	
k�ge�_�F�zI)6856)�@��CU&c�ӑ
-%vsa*�Ǔ�����7�0ә
��E]z�!{�R�p
�(+��T����J�>�ITj5��
-߿k�����f�%�^��$�`�����7D�
	
�01)9Ce�Lq�
��IE�U3��Uoi&���c.�|���F��8�
��Da��j���X;Ύ�.q��F��
�JnOFC�^~_ذRP��
x�Ν7��U	��d�b%�#y��a���'Nb�0��CџN�”	N� Ӈ���K��%�ˆ�,���yw�5׃�}�ߕ����uT�
P�ꎅ�q�j�}�X{*��J�6�
�F=�R���#/�
^m|��1	�
3J�㚌��K-�
��rw���ٍ
1l�`�h�=^}�F��T���S�'-�(
-~�ݷϟ>y���w?�y���δ뎣,
�S�}��fge�5���
k3��seMR=�\�$)0I���*	HB[,,i���iØ~S�R�$d��(�I��`:��L�I�>�׳3ҩ��-����
��B]rv�6eℱv�C��w^K/%S�W����yQ�4e������9^`Rej�2D��L5i�nYC�T$�jS���=L�0�=���D
�gڽ��I{3e�y��+�{�L
-��UQ�z�ؽ.?Wǥ(����
�ndp(�
�պԏ���RO�%�C��*�.��O
P�)����7�|�|k���v�n�\��eHAY���BC�� ������aĤ����._)��GL�J��w�)��ZZ)b\�$ΩHF
<�yh.�6�hT�9��tf�1
t�pp9$
-Y7�K�,
�t�
o��n\��j"L���%�F\"0�I��Oq
U����Qv�&N� 8,r�{�V&$�g������(�ꈝ y��a���

F��Ӥ��hlhh��)Î���JJ���Ғ�[�(1�FG���� #
=r��AJ=�{yT�*���:������C��6dU
-	���m ѹ�ET�S�6j4�h�lFeuD�j��0��,޴�����1$��c��
���֖��h
��cQ��_E���w�ҳ'�)
޾��kW��O�,
ڇ�,m@���������dfee����5�{��L0I�$죋z$A^R]B[,,���hT�JpR�$%f�G�!�Sa�3����T��
-q%���ʼn�Ζ�em��Gn��g�%I�W:}�Z&�Ҿ(YHe���!�(M�8y���3g����

	�	�LJ�r�׭Wj�>YC����$����ܩ�I
k�秝�i�m��e(�f��zs��ʤ����
������(�d.-$.��S8psAi�[_����RwɥnJ�d��T��;��CP��
P�tөڪ��{v|�e}ANF*�o�b���ya�sC�����A�P )r���ԓV�NLN3H&Q
��LRR
j��$:��f����T2�l4��]�:o��N
-�.�NV�p)� �į�
c��Q�
"�Q��rɂ���1�JTll�L�4M-��,�OJˠnP�m;vr�]��W

����������z��immiin�'��u'k���I����l\����`91ʒ����I��F�6x�e`��k�=z�u�*u�֝���7h
�h�
�FhD�+V�6
- %��>���
�/m���?h"V�S>$0q�(�D[�4$'Ru�

�'FO�l?�
2�
-އD���9���B��=�
���;�~r���g��u��G�2��߼q}QaA~^������u�7l5��s�&�c���T"!�
u��XY� ����v�gϤU�΄� 2h����RaB`W.�Ϟni�riAu3R�%�҂�y�HZNӑ�Ǎ�
)���Π$���(J2�����88:��r���

����]�L�$�w��L�yb��
-�.K
S��1���){6���n�W�ٻ>�ӑ�*-����֯�ݰ7�-�(w�!�lp3�)xOT�5!���%�K��h��$�,��J�T�T���q�Ƶ��4��V>����֗�.Ϣ�計y�a�4a��""��c�3�R
��y�E�$��C�tRV
R
z�2�S��$Ӧ?��d����F^O��8�.�A8M��0Q��\ڸ�0/;wKX��%��i�„r4�|4�%�^���P�p99z�����T�P�V%��J�e����Z�p���=s��s���\�}�?�;{�
;�N�˫�DC ۢ���"��rYl
��ٮN��

Q�Ao�x\���������0a�J��;�`�6���:͜��
��?ėwT�g���MlqײbGQ�ee%�b��5T@����@�*���,�X��M�h��15��X�f�l99g���7�

FM4�
�������/04,��H&5��DR��a5X
Rp�L��aC�tR
��LG���=��"F�kj"�c'P�
���o��{MTjj9�s?1��u?����'�
~ˮ�y�ڕخ��R�����������

��_T��5!I�$��Ֆ>$&LIl/D�J���*��o
=]\
-����d���GL��<���E��v�Ab�o��s)��*�=�ōϚ�5t�!,�y	,������P�P�1{���M�P��P�
?i��s�η]����]�N
�j
1ikTL,�}���R
柗�T�����/%XS��3���+�$t�J�_H����L<��0WI~��M�ź1b
q�{76+ʁ�<�VQ�Gj璉�y
,QE�5�0���
-*
jB��_�Jd�m�}���R=�q�l����ve�&�Eo��vUp�������e��?�e.�n
*/0)���q��hu
1)�v�W��0�**5��J�*o$��
�e
8e˶���67��AW��8�N2��\J�WG�K�P��
8�<�&M�
c5b��t4�K�\��u�(�Rw��C��-��N�2c���4�W�۰9J
�#�bx��ü
	���%KKK����+
����Rd2��c���G[0~�h|
��:)��m�͞>y���Æ�J�ݺJTj�ƨ����il��6��԰spr��
^��CV��D�?"��E�(��K�&�	%��Jƾ=������["��B��dFO�fF
�ϸW��]��ֶ���_�J?<y�=�t���[7>��������|�����?�Xّ��V��Ĩ���D I�I�E�!&�҇����d"��bwIޒ�Ei�����J�fZ4Q at r�S������ǥ<گ0�b.Q�ck��M#,Y1�	,�x
�^`(����v+��O��E���q_����4v����f�~��v�K
����}���5b'�R�2�S+f(�-��T�תi"�6�}�Β��?絠�����v�p#�u�V|�I[�weg���b��
������+��3�x�#�s��h�"�ts��<@;	��T��Z��o
���w����W/��T�^(>Up�Pޞ��dN>���%O�����������;����BfҦ��1q�;�D�A�#��(��#�d�M,����^�6��
]:Mey�L4u�����41N���J'�%{[6�D��t4`���|4�K�:��ԭ>���R [...]
Go��е6m��OJ��	5� 4�����@
��
-"5�t�(]Xp
s)o/�yr�����+��
���ƌ
Ό��[,G�J�~+*�t����A%v���_R�r�V��t�Lщc����r����
I�	�A�䔴�L�I�I���$*}����9/�_
��G�d.�X
��Z|ڤ6&c��Ũ���$�U.�\����~�k�:�
菦��x߬�S�,+���̐���%}(�"(��I�4�-{��ӷ�n(��4k�<�E�
�]=�|�V��Y�d�P�T��$�o�Hr��Wf��?絤�7��MK&	LU�n%숢BQ�����H\�B��w��|)�h����t.��[�sI<i�b��T����=*���]�����ǧO
=���
��bK�/����T�<<<T*O i�@��P�IQ1q	;Rӳr�L�Z
.�����E�|M�2Wܲ�e���?������W��˷�����R\S���/���ȕ.�Ϧ�K��Ə
=��Lt	c�F��u"(�T¡0�Y`�N�>{������Si��-ѱ�)�
�+��c)2�JC�[[[WW�wI�џ��jk)�5�T�V�N��K�t
��K
˖.Z0wִI�0̆
451�ս[��
;�A*�kמ�[�n�즂��&C
|��!kH��$�AP:Bj�-���"j�A
��	�.�|,>]Hc;Ki4
##�$F��Ǐ��07�i9���X����1��u1�������b,�_�P|祶�w��쬌�Ԕ�d���Դ���]�I�
�o	5^*}�`:��DT������z���%���d2��I8�
�l�r��R]m5ۋ���M�`��x5y
������dz�l�ҨͰ��e����[���Ũkw��>����
:,uvq���[�L���]�$F�Q
��qVi�t#I�jL$%���L�-=}�u��	o0ܴ`�t�(&�<A�F��p�p?8�.�ӧL��dIsi��y#�K
-.��	
-a���
��߽}
Tj��*/9w���Grw	�o�)�2p���������"0(���-�9����U�ItQᘫ
-$�}U�4����1P��8L|9������ݰ�\�z�|<i.�yfL�<��J���K`.�K ^g���J�`
�[Z��0eƜ�v��ܼ����شM�����;��U�
�kj�(}/�]���Ɔd�b�{��'1����D���,�tut��y0
��/
dگO/8���y�&�Ԛ����wۻ�#1ZV��㪵6G�S�A鸬��Ѱ��Q�j���j�1p�3�KG�۳3�1Z��3��r|�l�@Ӿ�=�#�:
-*��
��?�JϞ>yDTB�u��1�*�J�1��3�K9�Y����YY9;��ܼ���k�D5�K�
&�E�Ol$�.a.�YR
�`�)�R��d2xLX��Q��/$#5v���'�QS�ݝ������0<l��B㳷�����K0�^s,����XR
%�6m�B�Q���ڡ4|��h
���g�?���~��27���A����o�ܲm{l��IJ��
e}��$Q��
�
*d~� �R�gz���O�t�
-/�����
�k�t�(�j7���:.�R�	��swq��-N�KCE��St���s��D�
	�R�
 *Y��~�*	����P��[7>���NSq��٢���3_�AY�i�Iv�1�����QQP�b/�W�J�
-H�M@��
T�GAAD at t�E
�u�8&qW����Lf�}?��5��I�}f����s��\�����7i��|��yz���sw���|����Q&��g� o
-�LB�����j����5�6f�FN٘m��)�S�԰���tr0�r�\����m��$Φ̥9�Lp��gk-��]s���&1�x*!�����#��N�:��i�JWw��H�����;��b(�HR�C��F�޹s�^����ޡ�G}���\*����6�LA�mSLD���������<����w��];���
-*}�T"��	T�XP�S��F�LͿ�r�I
��sI
L�
�Y
Bt~�PM�
-�^[
}9���`b.�E����I����zk\4ƒ����Ѽ
��r4$*�j)�#���I�7�
��H*q|�C]�*1�Ξ.��#;3=-%9������HI�$�IyG
��1��)ݨ�OLT>��b/�\jciG�+�ƥ��M
-�4`�����>vW�5]�K�DT� �u�����p��R��`IR�!�>jJ��ы�PS$S
-(����Ci"��lJ�V������
	���ۼuǮ=�I�����
��H�_C}�
�I�::�z�ӡ�V)��O�k7�M�N����j���$�vQ7�f

���h]�L�{
%�$�KCi.�h7o�K�%~-%�s
-*Qo�Jw�J�ߟJ���
5pǕ
g�K��
�V%s�
-�F` ��z{y�������B�"�$��G�c9�R�$5��?��e����چ|�H���8��fZ\��JOK>��J�s;Չ�P1���\��0i<�]�Zv	3�Gp	`2h�P�h�;uC
c�
>j��i��2g7Oߠ���J��'&�e2�JE�\�,@�
J��Ꚛ{x��>�������>�
-a���O�?v$'#5)A�eCTX��'σ��#�
���ݫ��
�;���J-�`7�dfޭ�eb�q��Ά����J{�'&�H����SgΝg�K5�6�F
� <�+�S���<Q����N�c)6�^�b�9ӧL��hcճ{,G��)�~S�$����3��z1�n^��T/X����LW���$''�%'����ҁ$�$���`�S�ϥOm0�_����k	3����1�t�LZL
L���/�}��%v>P2W��K��|d-/7�p��Y(|ㄱ4X26B�i
Ko��_%��η�)�I3j��������4Ci:
�EKW�r]����a��
;��W�� _�+f(�+w�&´[�/���BWg]�_�Ƅ��]^nO�תT���ׯ���.�ލ͊r��N)�b.���4��woK��qԼ;`.��\�Z�Tk��Tz��T����� *=yT*ݭ�q��ӥ'
-�|���Ł


��������&m &�ܳ7>�@R
-�����0I:��1O�����2���v��
-��`�.�s�w
-;�*]B���T'b�h.��0r��͙!�6l� {;�>�%��u�x�N�f�]�[X���7pȈ�� �-wY���S�PjF�%!
��6�/�����xt�T[Ky�4Q���3p}���l
-⽻�o���[�f���i�ƍ>��mK�R'cC��m�J->�Z3�L̺t�����G�G��_�|5����m�ȁ'I��������P��D�2��U��H��Ù���x0:n}h����8�a"�#rϪ/G�6��0*U���]��W/�
b,=��T}�Vŵ�g
�������HOW����T�t)+�p�|dfQqI
L�x��N�>m$�_�����8��[��i�el2i18�ґ��
��{
.���࿐w�:ϥ�[�b"Â��=ָ�\�h���DZ����'McI
%fC��6���;���<��m��4d����M���`���+]�xx��F��ݸe��/
����.�oS�jڡ?4ժ��⥎�����ӧTc�nR|9W9!�`�p��\��HpI��$z���(�8?/�5��"�0�&�3R4oqܼ�P�x.I.�j���Ш����Jc��R���3.m��UUV\�t�LY��Y*|TrGDGE������b&��Q3��RTt�B��
-�pR�1`ң�lB�O�[��;YF�5�4Q�p�:6
�[�
�
��~�[�!����A�K4r�LP�]���2qy.a/�32�LQ�z�����0�a�\��+]ݽ¢6l�T:����=Zx��b�:�Ǫ*���uuh`�`��~���@��
P����X:AA������96*����e�����O
?z���v֖����T��R	߭��I�.�-���2b̄)3�"�]�݆�p�5��#j��V�ASj�I5d9�d,��Hciۦ��`_O�UK��7s�1�r��hD�T����J/A����J�0�jk�nߺq�������r�dggeee�_v��$�L*+?s�
v�z<g&"S3�$	{�ݥ��N$���Ѥ��H
�$�~�`��H�(�Sy)��Q9�P��ZQ��>�kW�\���q�
��`,J,�mK�B�
(�3 at n�'vP�ccg?`��#1��L�J�Q�q��}���+�����C��_<��R���V��z:�y�kDw��:�@]
-�V��vO&j��K.j��W�8��\r@�
�K
��D��	�ԡ=�$��J��5��T��
��
�x��!Q����/����������fĖ�b�GE����ⅅ��b�6m�LJ<�����
U�I��H��,���\漏m)t<��KJ�#.��gg���ݣ�K���Kr���.1|� ��|���<��%<c,%S�e�z���?x�H:��WK��<}�£7n��S)'��D�)�a�NJ`���x�t�T�e�N��՜�W/]QO
���H9��έq��h
�X�4gƔ	cF
���ʢ[3���0��-[J*��Ϣ�Q	�к�A{#��َ��0��I��i��}4���j5�5�Q�
j0�e� 
^�Z*/=q<
��Ҏͱ�!�^k\�/�?{�䱣�
���-�����/�(�+����n�=���*�;H� 
-"�;kA{�],(
-�
����`C�^
�((*J0(vE�5���D����{���f�tI��=����{���=��J�6>=�Pu��^<��i�ҭ�k�5�K`(ȥ��SY'�d!�rIŧ!�	L_x&,N��5���.MU�i7��ƫLM&
0q�b\��@�����K�`�UDJ%���l���v�2���]gM�,�%���K�Va�W�L҂����3(QL
6Bo���������8g�(-Y�j-�m;�%҈���D-�B&՜���H5I��Vn�"iI�a�Y�Ȉ�]MZ���U&�0aX;/��[�A8B9����=��Tu���q�
Y�����@ueu	��ӕ�ԋ�4d���ǡ�[5�^<�������ƫ�/��)��O
�8���U�e�ݒ��]AA���AA��Ia�rEL�
<jZ��c�YٹEpTm&�E[�֫BwMm���g.)*��h�F4б�t�����ܬL�
�KRHp��֭�PꙎY�U\#��X��K::}��D�741��
3�e�
�����^��-04<*6qU���Ҋ3�8f.|-�!VH�ǚ�����/�WGLm��?K��9q,�@Jb�<,$�����V-]4w��I�
�͌G�
6h P�'P��'�R��:�

N�>��y2>�e�=��n�m(�8f��6*�i�+��m�`�%	
-,�BMuT��S��hE��
>�֯]���:s�
5GC�C�9���'P��ǠҫR�˂\Y��/K-X�n4����D.������
-��+��5L��&<$AM�Ĉ���#����nD�ƋL�L��(��p�*_��RS��ể�}�l�����X�X�BX��saYҜϴ���=�5u��H�4021������2IX��6o���&�G�%$�KE�:���G�EL�#�¸�,ՏUHK���Ϟ�F���֞L��tK
�Y2`\�c�:+gp��@�[6n�%H�`qp
-Scfq��������%�nT�@ݰ�!��O*�*DM��$�g�㏭�
޻s�������g+1�CYJOۏX����I�vKBCCBBC%@�,�gRjڡ�G3Of���(��I���yJ��
q�1;v���9�x����T\*�H��5�u)�\
J���kW-�XDY�U\+
ScC�d��ȥ��8%�J#!�YXۍu� V��}��M>�A�">9� U%eyչ�:�ҵ�h%��[Ȁ[!�i
|jen
db��:�R�Y0�¼����'�c=��`�����L���8����`��@��@��<�:}D*u��%R��N?|��2�����}�wI"��$cq��m��m\�m�l�mC{
�
�
<$
��T��+JK�sN"�b�a�;��9����8�i�����C�G����K�J�>���R�]�cT��૗?=G݁�?,�u��Q�\*0�),**.A$UT��̇�YO��~H����F��Hjm	�����Pc��T`Bo$}�؇�jd⢺T��H+iOL�,,$���{���V��Kx,�Ą
�TwLR�ǒJ�A(aQ���
��z�706���
=v��	��͜3w�"�e�(�n��;<R�')��W;&5PZ�j�L1$	����޹g�_|;w�cR]9{p� �
!=-�
N.
���﷕ե%���䍧��03ƈ X�����k�K�%��|�?�d�A��o!�� �^�x�gP����ܺ��_�t�ܙreQ>�5���=q1
-y�,<\*
�J��@Rtl|B1)���r�
K�etT��תNq��7Ɉ�M{��U�v�T`��]ݗ�n%E���t�t�&�B���l�ZOG�,���ގ�
*.�%���o?�&3=#S
���'N�5��c��
�}w�E�$���NU������A	`}�
����k���9���U�G-
����T�b�=z(u�h�� �M�k���w�1�������`�p��R7��.Pi����4G`���;mc'l#6!� �\����
��)�6nwdmm�h���Z��ː˫ʕ�y���qQҐ�m[�9.��8q�X;+3�Q#��������[F%��K�,=y���
]���K���R��t	7���R���5��.qA�L�$�I 0^_L^*u�
�֚Zd2��@`�j.Q�k���:_����0��X*k����
��%����d�a	:!`�+����Xz�z��QH�ehlfamk���<q��Y���E)0X"����Oܻ���
��E%<�.�LԤV|�
�D��Z{͚{��{G���C�:vs`j�nLk�A
W��\**����<V��
C�;$HX�(y��9����431B���
-!�w�^=�/�`U�*:@@����P�$*)>
�(����Z
ܽ�܄R���,���f
/*%)!>6F%���ˣ IP��I? ��
?q*'���tYEU5ǤF�)c���q�h]ML6��d�ҍ0е�rns\��|��V�Ě����%��$8�����b���<VqU7Ê;���3 �Ģ�������i��-D+��3D*�Mܗv�x+�/�742��:�/X�Gs��SF���З�q�u�ɈO�d
�8���k����kW�/p�9�e����������!��sT}L*u��R�?PI����v�ӄ���Y��[�F l#.i���ǩ8��� � (���6�Mj�0A��VW���8r(59^!

���n����fO���`gmnd0r(�p��<�:��T�e�*KmP�4�t��T`*/++---+ UT2$A��T��h�-*&�c����RW�
R�'�"SI�_�4�Ԍ%�*d'�.壴 ��M�SDJK۶"�V�dc	iOİ���^
K@��r����g�y�e�QF&�6vc
�\&M�1���P�V�Q�0�<:.!�+��"��I�ך Sߺs�!_�`�T��}���0�;UMG�F�L��̓�	��}.vkq�:+�08���U]Z�
���qcG�X���#���}�.�pz��?h(R���S�_B*�:��8
ܻ}�:��@��Ae b���C|��圯a��s]c��5s샤�T�R*��k�*���$�$[�� ����Vo%�}�JhO��i̹0Ɯ�fw�,���-��]�����u��{��}��L\�i2�qg��'$&��i&]�TZ^USw����zk;
��]�Ib��Hq�r%����
�z��!Ёr$�D��؀q��2� �%7�оH<Z�_�5�] [...]
-�
��
=�g���|=ݜ�̌�u4y
Uf�B*M�@Si�_M�1
�&"��J��ź�ͭ�ݽ�6R�8u6)5Kx����q�q�1�:�@6=c��%��T��	�R�c�>�{[�&W
�ez�j@%E��$�Jc>�h�Ѳ�%ȃ��{h,uu.]mnjjl�����Dj$��wtv��i��<�I����b�%%�?F�*㒉&Z_
�@]�� u�
-�H9�����P�{��9X�C,�*�X�0��_|N�]kŰā���(M��4o�*OCk��������������Z��M������������UQU
�Z�I�d���J�H�I�#r�E��������%���Xw����ȥ
�K��Օep4�T�gN�u)$�$obq+�M�
��hi�����rӦ.�` J�� t�k�BL,m�J^�J��J/��꠨4<48Џ�
T}MEiq!b	>%%)�\B�Y����s�����$!0�������2$
�I�e0�X���
%#-
��
�D�!���.]oi�8QQ��%(�&����Y�T\�f$J�-��;�p	Gq��2V%U��6ذ�
-[�U
>�7�n+;v*>9M ,�T^�U����v߽|�/x����z��9Z�Xe{���6�W3���WQ{w��y�9�[�/��Y
T���1C��H%���Ti��Cst�^Hm�4n#�����Jm�4�:�@6=�
��ҝ[=�m�Vk+K��3�'ĝ�>�%��WG[
SC�%�@%e���J�
�JޞJ ;QY���g�:�f�a���t����B�6D�$�|}�T��d�H`��Xy��I�IL$0V_
.
=
$q��u	"_5�H^N(�ll
���@�
(,� ���Az�0E�4��!��$QL��J_N�>c���Q�����t����
-{G��k�}�7�n�+J��‚�b�D��0i�g����*��LLj��eF��H��g�8����������ڪ�R088�X]�
������}��J[+
l��ښP]�#���H]�<	�L(�;*�h*9�ET���ݷپ
z��Gh��
-�9���T~JrRR"NRr2 )-#S�C�TRVY][L¤��ӋAc
�Tv��EJ2/�@2��=б�yL�4@���q��d�|r5&ܻk��Р��k���1Qou	�D��UIm��%zˌͬ윰�n���@���	)���K+k�IU��?0�M	V��/����!���O�<���VwG۵&R�����S���
���{��Jk���@�yH��_2T�
�4���[��|����f�
2z�6�F,l#�Q��h�m�c���!�ˠ
���_)KW�ˋ
r3����
9�g{��
k=W9�Y�.*-TA*Me�4�R�S�~���
�.~^�^	�ȥ���7n\��?�m�HMBӔ�$*��B���FsH)��$�0L\z�|j
,��UYv�0?7+�|R<b	�Fc�����Ҟ�&Ou��l%���
,}Ķ%v��4n��I
(�!!.]�����v��*wO�
��[�w�ދE�U����о Rs���5�p��/N�����G5�W.��7�
��[�D\b����
�y>	�X�b�.탺������������P_2�:&o�Y
-�t].�J��f̜�<���)M���J������1���񣇠tR� �\��,��fge������a��Դt at Rv.ͤ
-`$
�I���AАdW1�s�p˷9�(��4�H��8��(�K�)&b���v��
��c��
%t��f�
� ������JP��5 ��[�;�y���y��	���������+Wo�c9��
?y���v|�b�?QO�J)
��h�כ�*K/�g��$�>~x��m!���]�J�@�E�H�,�>y/T����<RIM�dba������%��ȅmT��6:�m ��a��b�m�@�
�K�,�� �/]f�&�=y���
a��<ݜ�,͌�J�Jr�J�oL%Ye	���g",aV"\�����h�����s��6�$4M"0�$R0)��j�H_��zc��#0Z_x6.��
>��X"J
|��+H��N
�������.�����&O
?�
r*YX"P�HJ�((A at T����ohlfim�����v}@PHX������IQJ�g�
.^*��"5�$��&���j��$�D_�a����ܼd(s7Z��\z��%�KW��*� x��
-��I]�:@�7X�����.��6+0zCu� �C,)�ĺ\�d��P�.'� T���[,F�
�J��ԁ�ȆT
��e������9ق�̌t����,Av�0����TU�Lb�Ɲ�~r�aR8L�Q2��qR3��F
-Lb�@�C�)p	���%(�&��N
?�?r�6��x37��%%4xj
�.͙
3g��<�J<�g�F&�+�W{��
��K䃕�W�7��vP�`h��
�т��L������]
P�ʊ
-r2�'Ğ�������`cal���TRR`���{��g,�	���J����j�Ѹ�3�
aaqy�e�F��6��Bi�e����	�hR�ڮ]m��,)��%ş�*j�έ��^nN�+�J:��J�
i*}�釠��$��e����K�Mbƽ����ޛ==��]�tCG��{�B�}&ȣk2���	;c�՗lqI��&)-1q0�q���.u�xۀ�?)!N
-KV�g���j��8���;�2�1�H�E�i_e����$�$-�JEiʔ-K��Ri��v�H$�R�Ɖ������;�;3�>����N�2�����y���y��pU&���5T�L��F~���aD�zb�O(���ҨϿ3v�xeU��Z���,�ΰ��o���e��/_����[�cA��r����/&�u��������J=�ԃH��X/s���ߕnoejw'_�q
�(��A�IJ�
-H񦺴owB����0�8?oO��˗:.��X27�����P�����\"ߗD���J�,�<�J?�Ά�
N
sOJe��z�*������i�RSR.◒�z	�����W &�WV�L������XJ��3����p�[���QP��(�R�
X�K(�X��ҠKD����ָc�`
����tIG
�D>�{
-���-tZ���!8<z{�ރ�N_H��+*���^Y��v\~6��q<��-���űA
.�ڌzp�je�87���SG����9����u)Ri��O��~0*	r}2Ri�tk�Ko�b��ӐT�4��4
�{�&�E�D.@��޺Q[]^B��xrRb\LxH��U.K�J3����@T�)K�{�4�(.5#������$)�$z`rL�Lp_�����8.�f���Ϡ�3��U_A���/����,��]��ڞ�
\�9bIS]UEYi���pɮPla[K�7DJ�rP��>Y[W��ĜB�~��R�����6��E�l�O�͊Rzfv^aqiy%TjʤFEL��jRO$�a��Q�WX
-dҭ���.y.��}���:����b��p�KG@��yC���Y�z�r�%��m�zO�b�*����:q�2`	���X���J�"cs���sT���T��+m�8�'�i0�Ԋ���
�RQa~nNV����4��32I����Rd�Ua�h$�x�
,U�zA��4
�����r^��!�o���Rq!-���=	qx>�~>P%\����H�02��jkii⧥
P2021�2m�� �@����
����ӳ!ʪ�ݸu�������?���p���w��+z�� ����=��*+��L�p��=�l�*y�F*ͳF*��x*
��T�SI�P��ڕ
>��a�;�«%�(��i��iH����x��4޲�Gb��3T�G��ݮ�~���0'#�܉�I��[����t*��*�jrT��Q�$�%
K�d@�@]"\055=�����"�0�;>4�
��.�w$��|�qa�\b�� V���E\>��y���,AA�Ahl Ҟ�>Ie�8�Ҩ���*�R�P����C�=��~���V���
ظ)<j뎝�{��D�@\"����������~T%�HR �����f/&�W��c"�F{7�ҍښ�JIiQ!�K�y��FGl	����ps]
��LpWSc����U�Q� Lc�P%f�&}P�潩�
O�7���x��RKS�;�n�JJ���y9��Y���"����J*8&1[��=�*dR��I�:{ns0V���R����!�`oO��tIRe"3=�v4y�
8�������}<W��:�Å*alh�'���2i�D��ƦV�g��~����}��-1q�Iɸ����۰��GR� [...]
-%
%S
�Ҽ_/rZ�������yKtl�7��
<|���
���+$��B�~�L�>!��c���T�HS�
I���!_Z�={Y0��Ο�7�������&��3��g��s�.�:��;1~{LdXhІu�k�W�8-v ,��Z���jkj�M]��4?%��@�44u�
M,�f̡�M��c��+��>(Ƚ�,�
������bq!�)/�|H$qQqI����0�6
�UR�p��N���"R����?\"�)��l���� �v��c�p>;��D����%��dc
�kafbd�\�������*YN�a=w�����^~��[�w%
>q�9\{��{��
w�*�����LG(�2�ؿ�j&���v<j#zp�ZRR��~��/a{4R�c��S�J�>4�F~�S�̊�u�RLܮ�d�����R2��8�'2��f��s

��u|��'moij�S��x�<Pi��X��Z��JS-T����JK,f;IQ�����db��vJ$�������
(%�yb2&å7
�8]�ӂ@�˂�G���a)*
���I�d7o�̩��F��Z���KP��SY�4d+J���Y)20"�pμ��\V���Z��=>qOҡ#�YQ**�TV��޸y�2�����b&�Ф��w�����CW�&Y.A�f���r�.
��۵s�֨�M��=������P�`	t	�`&)+�LTU��*�ZL��Q)x��_�J��b.
e��1�
-j��
-	p�H,.���LR^Yu�c6
n�t�]]2�w`-��B'ht|���\V���ji�åa�8|p�,2,k�`	z����`���KF�zz"�H�@��hv
����6E�������˹�Ҋ����`�A�*��~d��
�<w�Ǿ8�\\#��
�^)G*��=~�
��C�4{��J�?��P�v)���PB%:
x�8�����L�D �T��9>l�{���JTJ�p���Ҧ ?J���T3��@%��r�A�|�IG�T����H$Dդ>�$w`�����b.q�%�����@�{��`��0O��X�R�zO7WgG�s�gXY���h���(�
Ow�x�
�X.

�B�O�2���W %Z�
��J6��

���t���
ظ)<��̗wP�g���Lv6�Y]7�fM,���{����QA�*�"�  `�	*6��r�
E�M4Q��$���-߽߽�K5+�3
�����9aQ��$��g�:s�"o(�J�q��aדn�0�I��QI#e�X�<�x�vc	@��@c�weyiq!̥Kygs�y�����
�

��ߏ��K:�j*���
I�K�%�fϙ;OB�##�T�d1��N�J(��^�6���8�����
-o�*((���/ "a$��s+1�P�P�'�D
3>5�(��r4H�{��.��Va� ѠKd�%#�P��Z�f����r;�,\=4�TU�����UT�5�QG3��ut�����
w$9=�tޕ��W�7�v�(C���%
-3�����p�
~�b���JU�ŷ�_:���?"�R��ƜE���,T��ʧ��B��}q�J�%�jL%t
���5�F��{^�㏕2�P���(��L���=����Y��4�S�J�����P��%
$�}}�0��M����}d%�����&��c�%
ba��P�g5��Rdx��-���z{�,[j9h 1�$/Ñ�7�;��i K"LbCi:�Ҭ�����
���ghbjnmk���c������m���#��&
M�8~"���d(�ԑ���a���
8�&љ$I�H�O/t|�~N�K��Ki�FK�?�NfC�%
�����`g�B#}
Mu%Yi4��Ksf�CP���+�hh��Z,AT�TJK�7c����c�5��� X�� .� ��
-�+**.$�q+*�k�0��i<x���*�IC\�I��E�� ��1 8���U���h�.#�d��$
���D�.`���^��Nv6���꣹\RQV&��k�T?XX�9�xx��
-�$9���M����m�:��{�P4��<��b&��?q
mMu�J��iI�(��ݝ�T���g���s�Tr�\E�t�\���]t�>
�?��J
�a9�4�*�=���@��z�� �fO*�ƒ0��0��L�׏�D��2�k�L��c���K�������
�X��c���k{��u�.�v����:�Jr�
�ַ3��1}��H�?,}�g@�/_(��
%e
-%
k[��
^>k�7m	��g_L�����l:�n��ԏ
?��!*�$����6�������Q�fלp�x�+-�M�RNVzJґ�Q{A���!�=ݜ
!��t��U��d�`.��(IrH��76E�v��ۀ���T⍥��c	P��j���JKK�+--+$UU��546#&�CLb�
-���D{��
3	MG�r�ѱ��e��s	��J.���9�{4�*���
��%[jcinjb�撦�IUU
CI��x�����e�� SȞ������3��,,��4�0�J�<����qr���R}5�����3T
-޲a� �8��J���vӶ�
��5J+D_�-s
�sP
�я*�Ju�e��.��/H%��S�JK�
-b	G9�
!H0�M�
b"$Af&
��$�������%j.�-d���>쬎�-M,,���HM[E��
-
-� \���hge��HO[]EQNz��
<mgL�������/0�DC�#-����	�}������������7oݾ+to����Rҳrr��]��t���V\���t���Ϥc����k|�9Wj�A.
��O
f.A�>w���cG�FG@�������e��E��Z�ʊ�h.�$$�͓@P�����106�{�v\�^��J0��_ӱ�o�>� hm�G\����r���� I0��(�:aU��>㩊E
'�&)�`�%��K����),�4K��ٷgw0K�%V�f
��\.ih�khhj�袩dn��~��
-�Ҏ�{c$�d� *��
n�{t�$Q6�z�
H$��A��?� ��~�y�n3�J�c#Ä�� �٩$�(D�p�
*���k�����|��F��ҫ�
�=�hmdQ)�@��A*)�KO5*��%�9�����
�D
���I�.���D-6:�&�Ѹ$<��0A�OK�Kq��;�Uk|V�99�B;7��RSV��/���i �%��I⡤��dic������vC��
!aѱ�
M�8~��
��ݼUt���v_��{���+�ץ���I"n/L�x�K(�z�i�T
s�7��Ϝ��LKN<�2��ߪ���P���5�T��d�9
$%�Ó�\ %-+�����k`bfiK���S�?�H��G_�����榆��ښ��*x�𧺺�������0	�:��
ä!,�GL�a&%�8�����\"�A���[��t���3P%Ra���X�|W���/��0[�撮��z�J0�,�m
��V��ݸd�9���y���k�E�d"s��0�8���qT�y%�tN� [...]
�7x(QMǸ�>�uFR�%�0�K�M��R����X��4�*
�`	$c������bS4��K������K�{�^�ik0�)15�$P�����I2�� �DB�]�5�Ҁ�������������BQT�Xd8��ddj)�JEe�
8�'E����{mM�U�wn����b�)C�����XXz'�"��L��By?! =A����Ťw"Ss�.������Pv��&?�4�8���<h{�)�c��~�?Eq�q �
v71���eLLE�C�o����[�[D ���� 
-*�\��
"WѬ��kL\5�>��==���0@���>?�4e1C?�<��{(!vxp����n��1
�j�
-2R��7m� 
[��5`��PN�������������' (4�@lBJZf�����SU���\�����K�I
�f�з�"&����~$Ͽcܯ|]‡Zp�s��Mƥx�]����,/+����ăQ�a�����N�m`�!��T�e�!.I����mC(m���UPV����z��LR)�T�2�~�
�ċ��yK�_C\
A0
5�D�
1���	�I���̮��J��Yv�D�
��]t�9*=.�<"����pKtw��������b)
�
X
-��K�����P�%u��*�K}�������%n� X�q�Ц�H�:(�f�<�'ʴ/�����P
B�w
S����tթ���0����O��bOu���:���Tr��X�*q��%
�����	d��_H$I|L�F�A�o8a
��'.��&�����.�,�eN���

��rs��63��RWU���.!�����B��~�!�.0I0J�zx 
]=}��"�&�
���/*)-?S][��jK[獛}C�G!(ݧ���8'5�$�7��
h%��^���,p	/8����%ty��6_�t�|M�i|zg��&�EG���z�9��X��j�R۩��㒤�֭��[�JHn۾C�8���H� P)�T�~�*q����D/�
K�������\�n���H�&�M�&=��>#���̌@�V���^	k
_�~$f��
�4�Ƨ��
�
�t
-X��&Y��	�djd q	\Rg�X���Z(*�[��;��� ��A��
-��WZ;�����7�=��{.M��� ?�U���HD��Rldh���jV�w�xA["�%
��C"Q$�Mb���R@��F�5\��E.�e�X�XWs�����HVZr\tD�
_O[KSC]M����m[�|�٧��_ׯ[��C���
�(��A	-I%'WO������C�YG�
/;]Y}�¥�ͭ�ݽ���#cDPB'5l�o��kE&-����
>��'r��[
���8��
��ZqЋ+�
u�΢
W������?<d������-����k�2�K�%I			I������N��������Ï�R�rT���;NXz�#u�<�4=u\� ��M�ưH(&�I�\��A�{zPz� %amXI���N�K�^1����
ٴ�aq;��)Q_[u�ԉ�KaK���f�(.iij�����302���sp��
�
k8%=�X1V�jkGO��ᩇ3
T��l�W���t��x������@��Ԭ�"�
3�Δ�gNZ�*1Y��p	Äd��B�}�I"c�DDI�������������=�%4VM�Re9
{���I����x8۳-L
t4Ԕd�$�7oڸ�����O8(	@IP�������?:.)5=;��'+���54^�v������;�'(Ѷ�Ka&	}D�w�ʛ��a|?��K�8 S+:�g�qih���ζ��M��>s����hNfZr|́}{��y�;;�Z���ik�TU���d�wHm��]
-�������c`bac���~� :�W��/�9�%
� �K ��q� $	�$¤Y�I���ֲ&����NTN۸q��;�èg蔸t����d):X���KŽmifqIWG[
J�db�����ߞ�Ș�C���
-i[;A���{H%b��>	S�g�"F*�E<������G���[.7Ծ�*�䈟�]�4��Y�J���c�7�ښ�kV�J
��'�LX&Z��C�$�4�&�QZ٘�h�8�Ec��O�fɴ':�UksS�y��E�9�c���{�9�Y��i��*�Io���sx��g�>�,�K���%|�Jf�6���B)&>)5#'���ĩ��su����uܸ�70426>q��?��D7��2L⿝����`~&����oD^
-�K���]���,/-)���b�� ow;k
S`IS]MEIA^��c��������.-]C8
@��p4!9���	�&��3,Q���
L!��MD!�0I`�cFN���
-J+,�Z�K
�:&��n"� �
P9�RR
b)���
������@_OWWGGWO����������PV�HA�I�xX��b����h�W�ƃ?�JϿ}O�Şj��
���w*�B�,�w�D�D�D�+E�B�(�x����	/a.�Ѣ��x�d	�U{��Ɔ�U'�
�NO���

��tu��25��d�(�B˶|�٧�>�x-f	\���J�>�����

%�>�={�J�i�9G
�K��T��_ljni����

Y���(�
J<]�I�� 
�H,��4���>r�Kx���%X��8.�‰����N츚��eNj�s�� K����Ķ05�����ک�]���������
�
�S[W/�Rʯ�OX"�"X}X�g�U�K&HLP���SS� &qL�sj���wKP�����M�
�O�qӦp�o�vw�]���e)#�����������\2Ї200265�d�9��{��ML���
*�"U����ۅ���W��JH�,1]"a"m"8"D��0����-U�͘��E�/^�^S,�`Qii
����SU[u��� /+-9.*bo����=��D_{�LFJBl����K�*l�Z^�I�� %w�ҁ؄�����’�����
�.7��w����=z�iޠĹ�E0�gA�a��&����o�ǍKLMN���

��wcC]���'�
;,%
��|<\
�ؖfF�Z,U%Ey9Y(9yEe5uM
��m
A��}Q�R�1rݵ-[%:K��G����KL�@�i$"�2�쪠�
-Bi���7:›�
��%�fgpą��,� 5�G���h�R8���ޖm�\222����Օ��o�Mlh��F�Fc�Q�"��8�
��{TD��@,�� ]j��=�&E
]��f�.f��9wʽsϝ����O~˝<���},,,��%��P����."j�����EV"9
�{x���G�T��T"��\���B���/_2H�&�B��U,����9]����\��s9Kh�X�6݂
����|�䣇�����!�m-M
�Vh��h��9�f�����%p	�Qҡ��(Aiρ�G�N���>[XR^U}�jͯ7[n�#�~�%0鿬���?D3כ�9(	C�`��Z������6���s�E�9�i��G�G,��K�pz�l��M�
�V�@.-]�d�R��J]}Cs+;�@��*���*�Yz�������l� ��>�$E�8�K�

%ai��(�.�Ԩ���d���9)K�%,m�X���.	
�<;[k�ll%G���_k���U���t_qs�D-�1�>&��b�!2]�¤�^�H��D@�99o�=҄q��j��E���f��F�KՕ�Eg��S��
��=&2|m���ȉgcal���t���sg5}�4���?& 	L�|���Z2��e��v������I'�2r��\^uP��ohji���
E�p�(IZ�{�D�oꦠ$
Mi�rI~x��7j�w;�Z�o���������������Kp{K���b��;k
S������rm�e˴�%�JF���B�'R):��}H�lN���T%K���~��0rip �$y� E2��8�?�&Qz�J�5:����谂�������x
-?n	\q�)�t��R̦���@?oW���������Ξ�wpr�y�Ɉ޶s����R�� ���@�
�J�P	-�1�>
-�����e0)��L��f�s�ސa�X��p�Ҩt�P�.���.؄M0UW/���[/3���ă{vnۼ1,���U�`gef��R{ɢo��z���_~1�4\�>��q��$Cik\�^@)95-3'����܅��j���jjm�@E��o`�ᰤ(��\�Զ�-)��H�+%#�
-ɱ�sx.�K���)��o77ބ�
-,U��f��JA,��X
-���;#�,͌

�K::�utV J��f�6<t
-��m��������U���*�X�.A_z8�e��� 	��"��$=5��%�SN���
5d"�6ʮ�O�-!ͬ����"#��!l-���&v89����[�wt��zx���G�@�=t�T�sE�D%�{��lL��I%��1*��ג'�H&��Q <�H�&=��1�K#��?�v����s�;f�A7
�p���\�x��� '�t��FE��z���Z���]�l�w
�͙5�_R��}�2i��J��B�`��������Ҋ���R{�fcsk{'B��`�!�(in�H��!�xKLC�ԨK����z
tw���k]�U(�e%yY��QK.:2b]��������������@Ow�J�V���CU2��[@���
W���}	X��R�{��P�dߎ>
}=lhT��L�{�E�$A�4�ЩA/JD�X��bpT��>L�ܘ,����W\KM��+�,�b���}<�]]�%G>����(���^���"6m�
*%�� �*�/נ��T��U"��t�9 [...]
V-_����sg5cbi҄	��q��O �&O��J)��Y��e��_o44��n�������phx�
%ZQ��$�A��9
f֚�Dt�^�
��4��C��&��TU^R�K�����%��gkeajb��@_O����j#3Kk{�����?d}d��]����	)��*5k��,IYB��]B0� ��A"a��&�T�
%��a͞���i�q��<�K�cBRq�)�.K;cc�6�
���p���'x��H������!jkܮ}����.ċ
�D�4<�ҧ��%�K
-����8Hb��0R/�
s���
�t�_���Ж
��`>��y3
�5��K
��N
O<�g����y��|;KSC��?,����gϜ>m*bi��&BQ��1Q2%�t*=+�������՚�
M-m
�����ð�T%�Hb��f
-
-i�/u��
-��u	��� uzw��•p���e`	/�Ә�ݰ䀥� OW���gk
u�\2���
�LL-�lyB��O���M[�@���J
,Qu	��a�$�-%	"e�DG��sv4��ktH��jxH���Ki]�X�D`鄄�-Q��@?oOw7���=����U�����m;v��r:3�����R�Jc*�7��&<�"�Ɗ1S/V0��g� �f�I]��ßokS��ګϕ��f�N9��WܖM�k}�EN<
�պ:K�`ޜY��)ZZ�&M��I_L�6}�,J�%
�3Yy�%eU����ֶ�������70�p��,J�h9�c`��\�)�A[wJu>�P��IV�#`i��u����͍7Kh����@,
�O�����"t\cgceafbld������������ �vH�r@���hݵi��_�o����
|;r	�2��c$"�2��$YQ���H����
��
K�8bC�F��\�n�(2(������.$����*vqq�]�=�|�C�"6����s �؉�̼�Ҫ1��TR�ҟ�yQ[$�X1V�3���D [...]
�}�~B(eJ�U՗�����jnm��(�
�<��I�hEI}�8H�J�w
-�0Ґo;��
�#���A���]w�o�HY� �r���#�6���z!����.����3153�����"7/��Ј��;�J�gr
->T������K�K�'�&�IJ��$zQ"��`G�dr��ub\u
Y)�ùXuI��|J�Xʓ����g����ʶ8��%3�Y�����
A�Ej 	��^�v�*,XPA��yb}�����A�{o�sn�=�%����[p�Vr����޹��)�6N�T���A���)��1�x}rzvފ5śK��+`
ן�|��&�J?�J<��.}�J�Y��\��"!�DU'�-W\Ȩ|��
Lf\�c�
�f��;��!T�ݾy��ųu�N
9X^V�y�ꂜ�d�Z�d���~�0v���mm��.�B&
��Q�%Di9���Tq��ɚz@�Z#F�џO��|�����VӇ�%&I�$�B�D:��k�_���찓vIx.�Z�������%<�j�O`�J�ғ�q�ʰ�@?o��p.-p�?o��y��;/pqu_��

�IL��)\S��t���
�RK_U�D�D`���@"u~�1I��
ɖuI�
�f��ʂ�I�6
��N�a�,���V�eg K�j8����PTa��(U�VgH�;ۆ-���UTV�6�J7�*YU�ĺ��d�M�"SE����f�1`�L��[���Kd�TKϟ�
�2u�|C��c���ٱu㺕��i����� ?/w����:i���NC
K�����gd�@[{�!��%g@�70DA�T TKPj�}��C���7�>4��Qb�^
%I�>P]�tᓰ
�0���g�t؉���\�".���
-���<��ٽNK���)cX��⁥��>^K��\] &�
]\�{z�-
QD�j�)���J��*=�*�_�=��>QO��䌏�2I�P��d��G�[�W&vs,}�XB�g���Ԥ�M\
��P��+"""�T����䴬܂U�6lݾ{ߡʓD�;��S�JV�,q.�0��̮��B�#j ����\�h��0Y�i�>�A��<���^:W_SUY�oW���5���)�UDh��ǢsgM�2q��NC��A
�߿_��ȤA,J�J���X�R>Fi'F�P�xP�s���[@�P�Dku�%�I�F�����B��.Hw��w�V&s_�>�z�s����=:^	Kw9�*Y�
-�K�H`)�����p����"��
p*�+Ր���b톭��#�JO���)�8���
��藗
J�}}�Yڬ.qv�nu�]"?�;q��mi�X‹ą��5
K�c�2Ӓ�:�:6&:*2R�TFFE�Ī�u������E��س�б���\��U"m���$d�rIN&�e�
V�#&Qm�ZEE�΄��	ǫ��n���,��
���3���7 Ru�Ǐ
ػsۦ�U˗�'%�E��{-v�?{��Ǝ1
X�d3`0�d� (�5v¤)3f�qv1���(�0�t�t����j�������<{�����ZZۘC	��
J_-8��&qW�	�����n��
�n�#��ް�䄕���s�c���C�1ٽo���p�bi/fi5fI�VE*B��|�<�%�EPn�`p�R�NHJ���T����^|�J��m<����%\ʤ^
I=R��L�g���d��fZe	K�b鲑���;J0K��R�!1��REGG�T1q�N������b�zȞ��U#�n4�A&VI�OV��U�ćI�&)�� [...]
�
�l
���&�;
�$�R"Fi
�RF���F�
$����A	~a%�H2��AuA܆\�v��v�OXs�J�K����
�`�����nK�i��0K)�uLTDX�R_opi1�%�^>~p*)�b4��t8S�mܶs��#'@���o~�J�Yb�5>o0M��G�Mɘ�+K��*g�e��H4�׫>��$K�Z�#�RS�5`��c	-�9Y�Iz]�V

�����I�ٹ��o)-�.
��;{�tߪ�U%K]��7IL,�+*�|��;R�'�P�	����B�b�>�K2���%���[K/�k�75B��N�8z����=�����K\��̜>e��1#����vv���vv��Pr1z��S�Ϛ3����' 8<PBs/�;�(��A�
��Ƣ��C��l�0In/�`��FF�
�%�
�
ܴ�?a�
LR�R79�Kd�=�nc��`� �6b�2R
	�ب��@_/OOO/o at iiH�2:��WmB*
=QS�2JR�u�T�/���
�&�&�G�LmyF��$�Z��LrD͢���Txz�&�$�&`��c	6;���,K+��fg����%h�(�6PJI���/\]�q��]�ХS���Ʀ�X��V��*I�$�I%*[I$XL�p��4�E�FP��L�p�M$]
L\�8�,g��N��P��
�M���ׯ\8s����;�n`�������.�g�:헉�FKC;::8�;88::l����&L�:��FP�A(e#�6m�t����K@�F	�DPb~��CɄI
I��&�@��}��q���L<����L&OX3.��%�3�>�����
Kˀ%�&6Z�
^ .y�����C�*u�!53�`uѦ���
-�o����PI�%#+��7�d�&�3�*���$�"ɵL:9\����Æ�|�,p�/,����bY*��e��&�T�D@)-N��lD�j��]��x˪�U%�.�a�Q��,Id7gb�3�̿W�^�E>3s�I��8],LB��ʹdK8T
�
~�
-"����[��.����:ZQ^V�y�ꂜ�d�:Z�dт��͘:yb�iؐ!�Q�IN#F����Jyr(�	(�F(����C	P�%�(	L"M����½���a��`���Z�6�`↕b�C*7�>�S,=�a)YF�A��SEF�� ���|}���J���X�.)-+���]��U�D���J�}W�?���s������$I�L��F�eod�#��[��nuf]w�c�/�%ұ'��=K[6�YY���Rjr�A�O��
I�)i��TZW��d���*�J�@%4��*}�a�J?�Jr0�T�*Z�y�b�E.$+
)��
�礞�"��q�p�p�p�8��h��p�3e���� S��c����ʲ(�u��(�"(���TVi����3�̄9@ a�J,�y�QA��Q˶��[E�����s�=wH��cg?��|�ַ���P����v2�N
>�H�RNzҮ�@_��?�]�tтysg������W`Ҵ�3\fIP��� P�(�)�t�
��à�
�z
��@�
JL�/ZP��&������j
S5�[k
-��m\� ���#ð_K�X�,��d��c�#B���K�ޛ7o���P�
	��K�TZUA*��E*��mTRb�߼(`���dIv��L�!�Ѳ���&�Tr.i.[�8�M\Ko9,�R,�`�R,5�V���
-�r�2ҀK�		��		�I)�i��0��˫��4
8|�4v�Vs��J���J*���J��.zKB8�K ����1� �v�|M}�#a�"��oA
r\��s��\��J2����(z
��[�/�;���R��6�
�V/_�Г`��i��)S��nʔ�Ӝ�J�J�W�[�P
-�����WXL�t�-%�^��P����Ll()��Q�
ފ"���m2T�Vc��IL;VÕ-|L!�M.�窷r����KN���

��\���uB	�RL\bj��`*��߷������L%�\���:�ƭ�$e�cDz�0�-�hXG���0�Ȥ��R#u
����%&���:�Ra>Υ�Ԕ�䤤��T]zf�>������$�ܸ�f�$T"29�䠒-.iA�"3��"����W4�R�G�
���q����G�3��%5�6����>���Fɯxd��c��k�.�9q�@cCMy�!'=9���M�׮Z����;bi�t'�ipNӝg��~��;�ҏ
J1q�iY�����(�(�[�Ҹ](Ycvn9�^
"�
-,�X��2�i
�� �w#�� �I;eY��%���,�>pXz�X��%#`)-9aWLTx(p�o��v8__?�RhDtl<
-PPT^���Z�B���ށ�PI�%�x8ɇ����i0IY�$�$��rN?�J&��D0���Ѫuֹ�M
K��C�Q0����+J���<}vfF�N����ӥe ��
-L%�Uu
����<{���m��n�P���J*��&��L��"�‘$	|��BO�����>��]q�]o/�X��
�E��E�E�E�%��0� ��A����c���c�<����X��
�����OkV,�X��2s������ȤYs�{x-Z���e�0@)	3Q����TPzŠ��e�ﰑ�Z�@�7@
I4�� �X��e��OP�WRC��F&�$0Yi�R��z7�,���a�Y��>3-%1ngtDXHP`����??� �Rx�θĔtت%5
�C
�z��]B�'�C��Jְ$��G��GZL��]�T�IƱ�
N,�&�V��V���R����Kj��KeŦ��ܜ�, SzzFFfV�>�`,.�����t��S�.�J�c��B
kSI%��J�7TR��j"�LBoѕ�H"D�Q�BO����~��%
�_c&R84abG�ń��� �%͹�t�&���>1��g
ʁ�p,uݻ�c�|,��غyú�˗,Z0�}��߻�̜9�����6��뇥�����$]&�2
-���P§����4�do�"�^0H��*�d`����`jP9�� �
��L܆��v��GK����a��h�g��&���D����BB�#cb�A��|cie�&��J
�ߓ��W��Z�җ񉜒I�i�Q�d�v$�����D���$���gT�K㶕��F%,
�`]
�`K{�k*�K���%=�	.;G��o0��W�6��Olr�Z
t�
T�(�ԑ���1�zK@�zX��V�*�������{���c=#YH�āI�%��\����(��
=A�:-l,
±Tj���%�F��n����U�%�yn�sf�›
Lr��P�]��L=@��nt���Y��16F3�6�d�k0��7D�3"�7����{T2�S�L�B��M�ndD����l7�������[�X�'X�E,%��






S	�*J ���I4�@��IQI
K��I�Ҙrھ}K�-W�����wo
�;�<�\�c��
�u2��X��}����ZX��=
�X2�`�8,�VU��
-
��rs�z}nn���XTRSiOS�'�\�|�V+����h��@��wP�A%[F�D#��
�ŘļE�D�y�
-=�~�X�f�]r����;�ł>C�a�(����һw�\m59,�X��)�R�0��cƒ��y���ڕ�#���溺�qu�
L�X�p1 at i
�RB)5Co0	P:u��U
-�n���*(I\�
�\
-*Z�{ֹ�|{I5�"<f�@�p�R�Ю<*���!�!k
-L"ɟV[�ݴ�=�aiLK]*,U��
�����x�RDxxXXXxDdT�θ�d]FN^aqyu������ZZ�
��'C%��&�-<Ye��dU�J��'49�LPL�9wͼX �n�;�y��TҴ�RjBs�
-��`OK݀���7)��
lnڻ�������d,0��
������꺆}��v�ة��ܸE��P� ��J*iQ	%a(ɘ$C�H@$LBtZ���������m���
���
���,Dwq`��D
�8�>يu+X��"�����K�l,�&c������@_�M֭A,yy���������~X�l�%����X�RN�������x��

J#J�J�JZL:�0U�I"�^��C�
�͢��ip
O�CPC��S����4�Z8��؄�N�q�X�)w��RA^Nf̥�؝�QQ�pQ�1�q	I��Yz����fwc�!� [���48i*}��Wk�IM(J�i�Lj��d�8���9�VT,�ֺ�.+����
���'ŰUSIMeKt�R�^>6X�Sci_C]MUp��d,�3���K�*�kw�mj>x�������-��l��A%�l�PJ1�����Lb#��D�]����ki�	w�;��҂�&#l��#��Ĭ%qI5�&�%a,���Xj�c)#%>&"�����\�rْE
xzx̟?��s�ע�K��(mbPJH(K J$�����~f{jJv�$.Տ�t��7.ޘ
-w	�� �Z�
���;�L��)�7�Tl���������k*O��?�3����^GWW],H����@H(Bh�� !�AQP�m]wtEf�Y?���+7�����n�J�˹�|ϑ
-�*��KXj`Xʻ����|3>�FԵ�W"�y�*@)6!)5#�N~���Ֆv�������3N���R) �T�䅒l(IMN��y%�$$�9�M���3D�D����^
-��˥5�%��W��[��i�Ҙ
K�&�^s�0?���{7���D��W�a*5�vt�x�G�Q柿B*�����PA*�����++�P�3�zˋ$b, �ʃ��������r�u�#��nE�8
���4N��������%�lW��W:�V��R��VK�W/�����~���w����M0����
��͔Ll�JMm��o�Q�����ZR��$%_&)��7
H�C�2xE�t:���
\
7ҩ����Z�na�i���O>X�|,�o�%�NSX�LKIL���u��U�k׮߈��OL���[P�3�j�m�
.���
<�T¸� ��������w(��V��D3�H�#��0�T�ìb
ȼ#H���Ғlخ�%�G���0,�`�,M<��dk�T�+
����‚���������b�R��S����u�,� ��T
-�A(��+߻��\�LBkqg�� 	�U]h'������h�
��p at .���a���\�-�s1����ձ��HR��ci1�XJK����x���#a���[6���&�~�����;�p(]��P���-Ԕ͵
Mm
�� P�셒jfd�G%&	�����F�e��NT�"�����xکsiY���U�
K�|-�Q�R5�R~��[�8��b�oD�݈��KHLƩ�W�U���?L���?�(����L^(}�ݶ���/��8]L1�x�r��Z��*\R,�XRXK
Kl޾G  �fK�c��P��-�����J����TTTWT\�)(Uҩ���������i��c4��T
-RiMP�
J�I���-h{h-�,���,������,
|mmmk�L�9�����\�-���I�%4�8���͡��X�
%K�~c)%!���
gO
;�Xڵc�֟�l޼y�d����"3(�$$���ͤ�w�x�&�N�%����"��%_&�D�5ny-�le��~�x25ڑN�*���
Lj-|}s�>����'Ks"����K9Y0��n&��������(�T*.%������
 *A����po�J
-X��
J+�=�w�k at 3�l$y%c�qt��8G.�:�V���M�`�BPj��>lQ��si-XZx��-]���O�Xr ��u�զ
-��L��hJ�4��LP��4�Z�
�
����T%̱ ��TR����Ci�'��$2�
�Q$���4
-�Vv�D�����h�Z�����6d"Z��Nф�"`�7�`L�D�8����:���6�Zmut,e�%�E]�t��K{w�ܱ}۶�[�m߱sמ��� �S
J�Yw JB����9MJj�
-�����]��I�s�|#H"���UA&S�^<�-xbܱ�#5|�nX6�D.-.Ji��c�髂%x�gs3O'ɱd2�i�
��Ɇ����x3!
/�fRrj���;y������j8t��瞿|�F��0�����#��LbHR�
i(j��:G��#�:�
-�4�ur.���b�˪Xr9�M�zK��T^�+�����
���F�J]�>R�&�΀J�J
A*��l��P�Dw!���I8�����Y�X��-$�P�uuKmmm�x��b���L��ÀMm�.�L�Ch-�|�KX��\bX��L�Eex�`	�g,�z1?351�`dƒ]K�)7c�G^�뙓GE��ٳ{�N�]����
=p��qJ�ť�J�������ߠ�J����:7ͷ�4��oR-h�h��P-?"WC�C�v
LdÒ����?Ҿ��Z���$,�zA�4F��,YK��Ғ¼��Y����D���4�R�݂bm��\Kk������
��J*X�$��0���p��1.T9"orG #�J��bɴ�Z
q�8�2.�P^)
-K�`���^
KSO
�? X�q9�[�`.�� &<��XaB(Y�Z�Wwo���xrjf�9����� ��TZ
J�����*i|d'a�oa��uC�����G�*
8����l6�*�*��'��d6WA$֢����]�N ���5r�qizfn^�K��y-��%�%��~}��
_���~Џ��ܬ��諗�v�̉��#�C���݃�7dhxġ�'N�%P�OJ�%A���D������;��J�l'�I��� �CD��Ȁ�$�d �q=�U (��Vw�vl2
�
��
&�����%�}���V�Ҩ���a.��RS�R��3 J��E����bmjs��}C#�XY�}�V�K���
-�1&��e3iT�r^ɨb(Y�L2�9D+j
˫���:t&Z�����)�
�:�X� X���lok��\.UV����\Uc��ښ�:�T���
���2q�A*�驤���W�w�P{A"r&AEGoyp%�H�D� DO����
�R���7�
xO�c���^�.�L�����S.������D���� XRz��\=��8������vڛ�X��LM���r����'�
>x ,t�>���a��#�N�.1(��i�+ 
��.7mO�f1
Q�u@)�PZ\@D&�΍�Ʀ*A[���
&t�Q9� I
��;�%`�i�-\�v�.,�v���o
K�O' K�r]Ku5�
-�NS\�����u+##
.##3
�TXRZn4Րv��ۏ��-
����[���%(�4���3��IX#F�*G%#
�)��Ub��;G�N%���ouD*2�.A�{-Q��a�ߴ݉5B’����aoi��d�I�zh��
����p��T
{����0��TN2��T
-R)�R����H|6��%�0ip ��d�6c�~���,�j5M	\19���h���:
D�	�UWom0AA'��s�1���%�y
k���}��˾c��%��������䄘둗Ο=}�ؑC�������8t���Sg�]�o� �I���(-(CI5�%d�+�$�|�"4Z�LT�rI.B9.ȃj�
z*�;L;��d2!�Ȇ%�ɷ�+̥߸[��Ebn�ai��-`�L�s)7�6�	���_������j��Id��BC�	2�@fPQDAm�'�
�dz�w�o�cR�M˾ン��z�ʿz��(r���j=�7ڻz���S�x$��Ʀ�҇o��+0�eҌ/!,c�
=B0��-j-ۉq�dD$�
.@Qe��2�s�u��:4?�VJ�
�P!��9�ԳU6���	����k�Y���K
-�F��
/]
O�mjb�����a1��-O�[(��w����O��!�$����BK�����#�-���f2%!\�.��J\��b��Y�;Ngq�˅T,C
R�2�`.䠏��ҝ{�+�K/6�GŒ�n���;�z��Lc�n,U�:
lW2R.��D��
9}����?�8y����.2��9\�Uu�o�w��G&n��,�lf���#CiG�\
-LL�4AS��FR'���zE�
�a5H@�L�C�II;��L�S����Ŧ��8L
�KԀ^�[C�y�8o�R�������.�
��)�:������J
^E	l����a��@��\ڻH�5{�$���R��m�ʩ��<�d`���s�u V��;׵V�KR
��`�Z'�B�[n,R�o��;�F(X���s�|=nk
�V̺N�R?�9>9
��/B�gk�q�
��~L�c*�ܶ
J�6��m(=ZZ|0'�D�
-���J��ΉH�+��<�,��
8?��CIR`�:O���ꚺz�����V�6�V�=��+�-��k,�k~�N>�?�Kn��Z^VZrB\tD���_N����'N����i
������(�u��F��
=Ya(��=�RRK�Gc�F�!�Y nd�Z0��SoJ-�
6G����W�^��]A�Q[�K;S ���`ҥ
������¿K��2����)X��v��hl�����r���q8�ـRu
�R[��?84:ɣ�X}�Pi�۩������L��$L[�IA���HR%@b
	�X9G��%��b��յ���<�&iڲR-3�D�P��c��Œ�^K�,M��Y�)�pGp�OG'W
��$oϱ]P8_n�T�
S�J���>���Z:�k�

ϤvF9����"��eh�������\�C�������\t���W���U���ܢq	8}{���Cn{({�~VX:x,�W���F�Y��+-�ݽ����ʲb{~NfZR|ltDx�9p�g [...]
��$5�FB�1��
-$C~>��+E����j؀()��;]�	0�B�ݘ.�d�}M
7�9��ъ�a鱆�@?a���z}mu�[�V�2weu��:�R7��𘔂�+�~��
K�q��f�T͸G`��ߧ&Gq=¶A�c$�d :Di�j
�d�:9&�H��VJ�kR�`R�4OZ��E:m���~�
Kf�T,ݧ�:A������vwuuvvuu{}�r�8��L���Z�ޛ�d��AT9��߀Jf���D��۠L\�G'�46�L�b&�43��D�u�Wp�-�B0;;+33###]w2223����9�pe!���]QUS����.Q�W3b.�Ukh�F,}�K�74�%��n,ݛ�Vƒ��]RT`����y!����!gΜ		9{>4
C).!I@��������

��$|��tW�S��~�a��MC���+O�R
-LR�
�*��SOKUě�,8��2��O3
V�� �O6QMZ�5�
Ki2�
qi¼�ϥC�����Z�҂��0a��
o��O��KG|gm����vL����Z)�X����N�#�E?�P҆����ICb&�6��$U2+����
�uD�`�`
�
�
�ֱR�la Q��MB
�%�k�z�3E�{���K��]`��'U����
������$�q�]�n��雐b�J
S�J_
�͘����d"��nN����["'��,G!���8�HOKMMIINNJJJT����������4��`�;�%:/R��c
�~1��(�wm�K��3z�|Gu,	3�
-���=�ݹ=�c�c���帖����
z�NhXxDdL���i�WlJ���N�phlrz��
��
I��>Q�sG��V�ӗ�eL�J+�S��|��]��f׫ dPT��;B����&�Ⱦ"�NM;�aEW��Ҏ��`n�"����Ē��-���ҬĒ���MT�
-��
�]!>��F�R��Œ�������J�u
ͶX�9h��&GL�ɨ�I:��u��Y8GXG�N��U	��`jlni3q�
D���*��Y{H,iz}�F�ְ��p{���ߋ����
*��^�"�rU*mk��|L�.�
%�A��s��P��.
-D�CġD������ LINB&��_��+��t)>>������^ ��p�Ja�rVk{���o0�si�.\���WJ���ل%�K*T"��������[D�MO�Xjkn��(uگ�f��$%�]�".���_�����PJLI��P��4�tx{��j�=�/T=�6��CiW�~�P^Q�T%$���s/@�q��
-F �E�hr$$�PB�;���N۰{�
�دl�VO߾)���-I,�
�����}�j���*q���u
	
r*M�l]�u�^���JVP�QZ�8�٢.��I�dT�dL$ I9(���#��@�Q�#�r��{�oA���%8��Z�vT,��
Xz�ֈ�te��
-.

�� ��C#c�-���
S�5}�t�O�a������w��u6|Rr�H{ɯM� Jȇ �
L�<��J	I��9�0�
-9K�^���������C�FEEE�� ����
�]-(,��g�^�����C�S�f��jSbI&�'}��d��_Z�����S�mR�ɱ4�c�����]Rd���JOM�
.��ͱq�RӳrlJ�-
݀�����w�?Xz�DxL@����v}�%��<�t/q�L�:���Р����D��x���d�e�H� ���n
D1��*�DکV�v{��-��W�Yb�2�
=��u��9��$?�
��s���������OC���{!1�a�UU
2�w���P�	M��y�x�Ij����p�+�Hb"������;'RGj%ĒZ�
-�l�T"X*9�4.MLM�a��������΢��%������*I,
*nM\
-|�C�#�czLꊦ�3��~y>Dy�A�ϻ�X�Fl��(p��
� e�^� mw�,[(����%ј�H0���bE��<缍݅E�I9����w��oF��㜨�n9O�/�J�@�w
J��h(�^ͮ��:�Cy)�u
+)a"!
-�V����Ԕ������INNNI��l�{�L�}&Lĥ�rkUM��Is���?���5m-�x��<���;��,9K����
��Am,�\<w������q0}��=W��}i̇�r,E��j����	JZ�-"����)ݿhV;I0I�I"�h$�R�xK׫ eHf6��!�`9���;�vʆ�����Eډx��h�
�J��7=�iX��ꡗWSe�VLe�8e��6�^K�x-#ו�������}�>w*�P2�[��
�j��>6�`��:$�oH2Q!�q��;U���:�wvC+&S��\
IuJ&�%j�]�z�P��������lXs��t��������������(������W�3O���JA��� �_J��F����D"
-&�\4�,���,k�v�QjJ2"0)11!a#N�<�3!!11	�����
���������\*)��U�54�[�:�zP���V�O�4�>hc�~ =艇���Qu,U[ˊ/�=	,�de�e{�#��
���
P���:����k(�w��&�|� S%�L;A߹�|{
�t��Q?�$��Fѹ�L�j���qHěH7�6�
 N=�
II ��qG f2qUХ���w���߅��)���tG�����

�l���
-�J��^U�K9��T��n#�5h�ʆ�YT
-JJ�xp_���m
�ɡF$D" m�ƁdI��#��D֑�Z�4�`�
-�r��nnk��4��?
-�Y���\���[]XLr��
q�~:x<����0u]����b(�hPbLj
ǃV��<��R*�e��=�C����Ƞ�(�Rm�����v҉"̤lF�9I ))1a#"06&�d2E���i��`.
"�p�t��K���1�\�J�\װD�zf��Lc�:7�c�!i8vO?�k���.�a,Qd
HOO�IO?`7s�jPjpz��>����,��B�J��Jwo7�f0I��Z�
�q��S!>.�e�Ǐ2
V��#9�
)�&
M�a3x�
;Ni'[x�h����s��{
K���X��X�x���8�K�Uv�
�n����kp8�F�^L%��&HB����f��R$D2
��#�:��L�A�6?/G'��~�Ms���❔T�
-�	��,��
-�iKJ)
�wQ�����6�N~
*@^��-{Ɉ%R
�~dh{��$NOo_�o`h�A�/"��O
%�:��P��z�J_��B�j2��Nʲ
-����PV�/'j�����dRn6y+��g�X���G�1&d`dDDx��������HD�	i{�P� &L#��s��\jtzZہ%_p,����ACC��X��z;Z=M�5����3�r�یCf���f3�9K2�R��Ճ�������e�P��{LW�y,�5���IJ�V�-m?��7J7��AR`�<R�p�	@�
2�P�9���ݯ�I
&�vUr��_�k���ٰ�Q���F,M��륥�/� �jkj������72��tv����>%
�pEa�O�Rp(��q��5��Oz�Z�y������!��{'K �"GƉ��d�t֡��u ���"��L�P"X���
ǴU����V|��r�~��y�L�؉q�7
(c.1���A��޾>b���A��!����5Dw��0O���Jz(�S��1�ҭ\U�:�Z�4��嗋�?w�I�C̤�������6�3�"#�7 ׮]�&,,l�z�Ϛ5k�����	����D=��s�i��\�V�U�+��*�D�� [...]
-�
z����J38Ai���t#��
��*�й�2;i�"߶o��DB�ũ*�
�
-�iG�5�
�G
���Di�KK�|N;��7�ޥ������g�j/z�O����ĸf9<:i.��������748�\%�>�JX���%᥎JA��s���ۇ�}U����
-�I���]�����H�d�d� �!��+މ�e��o�n�.�D�r�\*�\^i��ðmiS�����Ь�D,��X=�˷i.�K� Ӏ���������u�.��9m*������H%�p
%JlJ}݀R��Q�CI�6
-ߡ��I;I���q1&��z�ADક+W�X��X�r�U߭��^Q�„��d�������켣<I(�k
X����$��Wo�<�d��y,
`,�y�����Ǐa���d���ͳ�^8�B��#n`x��@Vn���O��i��J�twq�v4�V�*�.
&�s��Z �����ւ�Pa�w�X������ 9@�0E��(5�0�h��K;`Π{Tk���:n���[�����K��3�aitxЇ��s��v69
�|
MN��������Bz������4���P��V)R�+�
�
=Ba�\v-�}{v�&�PL'�s�uVO�*q����
-AӖDq)�z�%�:�`�e�����}��}#����7�b?���$�0

HC@
��J�
�-6���T��4��´���A@	����q6�U�_�ΞB"�e#��!��@RlL� l��bp��eK�.Y���Y�d��e˖K#{��	0�Zɩ�%��
Kϥ�
-[M�C��
`�u�h ���
-���x��z���ݽ�c����D�--�N����[���,����"j��	'�t�;w����ߠPRJ�!�e�nj����U&q���
#��jt�xDن`�2��_�?���z�U��U!Q
�#�v��[��;e
�
�3nោ%�K<�cid�������q�\N>.��������q�#y7��T
- %����J|U�f�#J.�L�5BA�*�:!'�s�V�
���*�+ܳ�?4�P!�Khܠ*lT �P}>�?�Pa���4
K��R�l ,��.� �@&:׮��P�Q�����3e��k4�B��_�T�B�
J�e0��R%�|
%wJ��\
�KN�&mۚJފ��Y0�J����E�.\�`�����.\�h�7�0��갵�6DD�b1��K{���y.�<s
�U�;\*���1���#�	q,ɟ�^��ϟ��4���>o���jn��Ϟ>y��XaaAAAaᱢ'O��~���J�g�̾���(���&�5
T�`���h�51&[�!
-�(QAA�(���̈�PP�P ���1��Ȋ+j/ӫ���s��[(�/���½g߽{�Fߒj�C��M@��
�b�nTgC
�Jw	��錴T��}�ё�y&�|C��x�t#f#�t2|�;9�WF��v����`ҵp\C.����<�d
�5���F�%%�T,�⊥f��
s�����j-//++/�Z+*��J
-
�T�I�F���jTz!�
�A��֪Ӭ�0�{�`R\L\����!��t��H���8&�Q�"�p�#�@�/Q"V)�.t��]�%,ۄ�d*Qy�ŊP��!���6���
Kz}\��E.
� 5*|��}��K�

�8


�I]7zz����fS鵩�4J��s*=wM2��Ҁ����PBQ�΀�����#�.fͤ�_/_�9�!�5�xO!����|$����H
��h�C�Z���`b.mݾ#��ҡ�	I)�̜�3��0L����#
KO�&����b,�=�56��TnS����I8�&��s�4 at I7ߴ
4y 3(=�A鱄�/T %������\�ϋ�.�R���΍���-UA$J7��MQ��*�"�`9=>S��
�†�A���Zx
Z�n�v��t���X�|#ƸD�}o!�����N\��*++***+m`������O">���_�J�g��
J?���[<%�I�U)����"wT0)|���m�R$�+%��qL�CbM'�X�LK��T�!���T���G��Ai(R��+v�ܑ2kG�%���%�K�7�%���8]�I�R_��z��^��*�R�M��K��=
��
��:C�[��b,�T2
�}1Q�w}w�x&}�t�B
-CA$�������3Ew�2q�{���-X��s)($4lgDT̾�G�'��iX��گsf<T�f�󗤒Tq.2�%��匥��

�t2))111�drJj�%��'
^�@���z����y�Ǜk���!%Z
%Z�-N��t�JNL��p�~fwn%߀$jܒH�GH6��e��h8F9�
ZU�$��U�N��j��E�­�յJ
�1��G�k�Ý(7����$ 
,a.1��ԀLt���ںz
J������
-�L�b%Z��H�49�C��f��H3��}�I��F�dۨ��o�A�qT�ܬ3�Ҵ�P"��Z�f-*D�VR**:�����O$��de��d����D4k=a��}�U�W#.�
-s	\���L|IJ��U(�G"52��(��B*�ی
%L6 Ds#C�b	Z_Vz�Id"�Ҟ�
����I<�-`$͜�Q
�RN���3	g�<����g���pN��f̄����`".������[h.E��>�����-�D�B!�0`�M�62����+c�2�z������s:3ݒ������z*-=#+;�r�Bi��RK[=
CҰ�t�n*頤
a�R�zot!���
v~�
�tc�R)�MLڶ5$h#��72ߨqK")*���0��A�/睮*@�
-"�֩i'[���j
/
���䩅���3=�8�q#b;��mW[�����:{m�>�v0��lj�\�T`������*Tz(=T֭R$�*D��Q���%&���W��L�+�&k6IUJ����'�"2�D̗�n�5k׳RX�(v�\ T����L]���`I7�������>�%ɥ�� 
B
%@�
�� P�5k�F���L��p�Jo$�d8*A ��Lj
��e�RN�%%	�o,�-��3�x&�%$N�,�c[�L���� �o��/��EX��4u�?�k}6���b��Kȿ�q;!�Tr������	���F���T�ƒ��D�{<��:�Z K���٧33�-�4�Œ��	&a(�E焹U(��b.
f�w��#�Ґ~�0
���56�
J��t�D�����3i�ȷ9�?�%�k�@2x�
,����8��GVA���>���I�vZ
OLs��yn�v�>(�442,i��H,�ԝ<������:�
��I���V��6��<3�c$TJ�ݠ��)�D��>��E4nSO�
�mK;)xӆu\#H���$�Lir�#H6��9�J��b2�{��a0aڲR�T��Ɗ�*��T�u
-.jǦ4��+����:܋Ĥ؃A�K S�tD��L��A�e*�R�-��Y:�P.C
-��G02�j�RB*ZR�9�/&2��Ҧ
kW�b����1�f�J
-��0��T��Ǐ���z����x�^�.S�L��ϗ}���K�����
{�����
`�RYe�����N�	�Cc�!��|,���J�gr���淥D��4).*����2q���sr�
-��ϝ�t��P�F3�t���Y<Bɽg�@��: �䨯��t+�1T
-x����[�� �� %�H�	�6�
-���*�1Q�
-�v �<��C
���[t-|P���pi�/’�Q�V�^��%��F����hlt65_m�(u���Vi-�A%c�К�J�n�H�*EB��@\�(r��I\#/d��r�L5��s���
i
_l&U*L���TpHh�ΈH*,Tfv^a1UEU
fmKk;lt��d
-i7,�\���D`� ���[�$��Pr�@F���QiX�
C��p�X�N�����c������_A߮[�DT���>�bc!	a*�@//�wqޑ�~��L
7�}A&�G��g�K�.�B̥�-�wDD��?$�TP\r��V����N���o�+�.$�J�Xc�� ]%S����g�
-��rs����c(��Ymյ���� V��QF
�
 w��M��SJ���R�L��[��$�7�n�#w�1�c
�Z���cL;��0��ksi��b��K`�;�~�XB������\jo�����ijn���v���D[7�M���T��?ܠ��PjjԊi���l�o�d��T"�O��f
E�w5� �eЊ'�¸����i�Jm��e
�E(�%b�68�ݰd�,��vX,=q�����n��n߾��$��J
q8J���J&S�2 /�)�	J
�
-��������Ci��_��!���-�g!'!
5v��1c���pƌ���e^�	2�����c/�]�h)�\�mGDd����Vە���֎��-��<q�
�/ZKO���U��Zw�S����VQVz��9p��� ����
�t����
-[�XZ�R*�B�(��=C�{
����Vܽ����ҝ��ɥ�Ё��Ȉ�a�!A�Iܹ9�fR��qS�Vk�P���WUg���q�d4j4����DcWĮ�bY2VklT�%�����4���A� JD
C�q��
�Yk���i���h�L2�ky��/�ܳ�޿��h*�����C�骂.�&NB��T�-|�l�r.��X2���n��V9
�
=D�7ܭ�Cs	\*%0]�J�JL*+�-�T��I�S�7SI��u�f%��hE��٠�b()��X�&a�ΔM�m���*D?M2�H��2��V(,՘qz.-Y�|��4� T�� �u��F��*L�dwԚ��S,���
�{��F��L2B�8�
�1��JD*Y��2
Ԑn~�.C]�t(F0f�%š���0o�-׭^ICi���3�I&
��
-:�EY؏lՋ2�G�
���.���!�_L&���P����N�Sy.-v_��s���K���BãcR,Yy������b,=�
K�T2����6�
-֒%-%)!>.6&�"���K`�R���HBI�	�Dm�x|G(��Jo���g���D���t�s���ڊ��z%J��$�I2ߨq���T�2T�n-GO.
�����H5�f�-|
�p1����C�Zx�
��۰ɽ1F�
K���jk��*�K �87�I�nWT	(�c�꧒��{q�V�h��
J�
�k
-��H���9���l��ⅴ��IN�lG�m
i$�d �˃�O5�
Z���:G�u#�B0��.X�t�jO�Kꨟ���&X�'��t��RI<�VXR�s��DH&��Ʃ�N�?>����UFc9�C�CD߀�r2Ӓ�c$�J�7o\��HCi�����-�$a,��ݻu����c�n�2�	�"o
���.�
=n�Ҭ��s[�d�*������þ�RXąK�����W����&���Xz�m%xZ}�u
�8`
T�D!,ee��&'%L����'$�,�ٹ�W���
(���0�
-%S*YA�JM�2J�li�	�0SC�N(�{��u4TQ
-\犥��-�́4�B�N7���Ԁ
R��M2��n�����
k֩s鸝^g��_�
,����EK�n���T]U�`*�JK��ʉI�U5*��^	�/ԕf��J���=:�ѨP�JP�"

p����f�#�I�N��
�(%D�Kƚu5:Gժ�����a�*���s[�s	B�=pė�CDtl|R��麦�R�����^�Xa�{&��D`��<��$JJ�XA���6P�E;������
Tzc
�O��,�Ý*@��(?73=Y�Ҿ݀�O���`(!�Ə�LB�H""���Q���8�
|�P�J�"sLL��Xߌ5f���i3]�-�� Kބ����"/�%�e��#�ʩ�56����d��2[^jc�$��(�\���\JM��/)9������9�@�
�`��U؛J���E˷J*K�+P���y��S'��
�糓K�NJ�����$��LR�M%���
-��� =(�w\>��n0�X5�&�-|���4��0��
i��M�d���KM�
�wk� &ynW�I�5w�JM�Ʃ�[�dJO�P*�ĺE���"q��Q�8���q�p��c�PG
�撙9G���J'�WC�}3��Q�K3]����
�'��=��?��G��%�Z�4,���,��P�}�D���$��2����$J*�D_1��v*��Q��JB?��D6����W��eII��
:��{x���J���/���Ҥ	�F�LB
�� ���,����·��'E�B���ջO�������ߎ
7�y��s]����6o��9p�/ 0�|TL|r:�t�Z�-�W3Q�q#V����6���Xj1Kw��J,�b.Y�&>��i��Y9y�

-��r
������	�l�M�R�
J�Ԥ��舰�����G�����-J��P�=c�d�$%��x�t�bO��E�w������v����[��3���c���(XzF���?bM66ܭ#.L ���*bRm���4���2����]�drQ-V��:�K���u+���ߑ�{Q����
�D�5M�VR�>f�Yk&��bk]��b0�B`�R�p�2���bwj�/o��P�Bãb������b[,���E
��SI�%!�
H&�D`��M����L"u�4(��B��d���N���^�
��O��TB%E��l��D4_��dL�t!",��������ҒEn�\fN�P3
-�"&�\�[�Y�+vT�N��"Oǎ
�N��c�Wg	��zI.�\;aҔ���V�v�9p���3gãcR,ٗ
�o�ݮ����f�菱)�G��J���1���t!,ݩ�$,]+.��������a��ӱ I�9��
�_���ϵ��^�]�ݩd�o<Q�Rqa~n�


p�������!�J��9��S&M
/;7f�u-�بBG��ȡ�!��$Scڍi�
+[8��6��k�%�-@���k�V���q�0��a.��LD&:��5̤z@龀�c��jƾ���C�6A)-9!�BĹ�3\$��ځ�j�=;����� �d&��
�tb�H,C�#�|NBri��d4;9�V�ݸ���A��A��.�%��
-I���Z�%�v�f,�ְD�G̥gO%�@&>x���utP������N��
�~}g*)��b~��gH��e7J
-�s2Ғ�.F��>�GPھy�@i��\�S�'�PBK$�D��*��يS�:�|�@�(�`\0���C�
>r�x'
K�x��{��㧂�".\JJ�D�+�Y^A7����%rR����b�X�B��a�� \�������"$��0�n�ݪ��Q�$3WT�����%��
-յf�Rb\LTx(�������x{m�D��}�׹4T�5&�s�M�:4:t�W��P�U�κ�W&�KN�S���-๴^m�omῘ�p��d�K��'�K�1���� M5x�e&5�kR��D���Tz'*�\R��˰Y�[C)
P�uKE�g���M�q��A��@3޶�$L[,۾}zۓ��9�w��0n��}�J�9z��.�K�Ó�î=4kO�=�`���Ē�WO5,���Q�KB1�%�&��
 ��u�M:()_�N�v*��
-�����
-ج� 73=9>&�\H`�ߑ�
���Ν=cʤ	cᯡ�h�`R�^<�>�B���}ŖB ���p*~ ��`b.�W�{_93`�c�ƭ;v�;�{�tȹȘ���+W��b,Ց�~z,���`�c��_����ٯϨ��,
��g���%�Lu�FQƆ�hĆ:
;
-�&�H��(�ػ ���{EAD������]�g��Y�f�}ι����0�5��V\�˻��y����;I�o&ܸq#>
�H���&aQ�Lw�K%���V�J���~<6��(]<w��у�vm�
�a��e��f���{$�A�I]YM�����FSh"?y
��R���k��_���,�p-K�D�)�n,A]z at u���$^)�T!���J�﯒fh�����)���(
;��vS$��Asf����
��A�@�l�$ؚ����Fldƛ���&>��}�p�b�����!$
k�Ƙ�;��S4�[�%�mƄ�Y2�]6/KF,�SX�O$���D�9��&QQ�Ѐ�?L�Vԫ��d\�*�a���6&%�]�x��c���ܺ)b͊%
-J�C��ؿ/%�|6��$�[_�f�Z�#�X�F���� 2�&�D�P������o��a#F�wv��
0g����7Dmٹ��1_l|���
*Kp򞰲�/��Ԥ�U�����)����RvfzZJ�� ���߭��h���D�\AI]�7��l�7*JO9J��N�8rp�m1V.]�08pV��^	�Ǝ�L at EU��5I�o���H��y��X�_;,L�:kR�hH�
j
-_�fCO�x
-G�(�WR
-�����ե{��
��Mz�CI�uǵ�*Y�J���޾eS��U$g���\���̸I#�GFQhhl�hgռ�2*�u�%��v��
�A�������Ü ���R4�t��)Y���ʈ%
�$��T�
Xb.�zE0�L`�	$�I��k��V�҇��AUzAU�^
ǜ��ۉ�Ν:~�zt�ڕK��(ARw��лg(J6x�$Fm��x�<:��^�\�Z�Y�\�v��֩k7b����;cnp��k#��������!�AY��e鱦,�M%�$��y�� 
��s��.��"L��? )L����/(,�c�P�t����ͮ_
�V"����X��
r�2R�((
�<�q=���ysg��x��=t�#U4�#k������:m�>�=y
JV�2�k�Wq��%{�‡�>���S��%+ְ~@�‘�S���R>�N*K�K��^e%�d�S�<,�
-��i��$	��
�k
-J��"֮\�A���dwef����I��$�L?2��i؈��
-c]S1*�Pm�K x]r���5�7 k-��.Xڣc�t�Df���P+KZ�~F�H&�^"I�(iP�EE�r��W�����$
g�*UU��܅��~��8����l\�j颐��
-J�������R:l��@l�2{� �v!L�Z�/���j�ަS��1N.n����
��tպ����9x��ًW�nJe�6��;��Ԥ�>�"�Ϟ
�%S>�%r)5%%999%I�����ŢTTR�(=Р����U�޷�����0p��tKF)z�����-�3�o�W�	�FS�����ޮ{�.��I���X,���<��?��v

yT�^����Y�S�hL�"�/ѧpb);WM�%�Cթ,�XR����
-d⯊�$��O%���{��n�/,��a����[�}��ې`
$ԙ��m�L�@&�R��)����J��ulZ�d.�t�bۻ�����C×��X�t5XJ�d,UVU�R�� =XVIǒT��K�1���HҘ$Pz�E�^�T%�Td��΀=��z����ݱ%j��e�!��L���䬠d׭+��v�^-�')$�b�����@��A$�L��W_C]j��ڦc�
�������^>���B—�ްi��}���:��\�
R�E�xW�JZ��
x������RYI�]�%p)3##==---=
Hž��o�����JA���oߣ*�_����Je�|w@)A��P�\�j����|�z������^v�m�I�uM�D��MPd6�8�<>3�v�0�)�'K�X����U�jMᵱDu��s�%�	^�t��L���AI�J����YZ�#
��[@)Q��[
$��Ǝ1L;30	��7j��B;2
�&���+!ؤ�2�D]6b��	.n�Pkg�
^(�t����������XRr���P'�d�&����!���d�R�J�J���ZW�2� �_�|�����vm��X�bqh���ޞ�����u�dӾ
�tX/a�=�Yl�>�c���цLؘ`�`��.��ֺ�m�q��#�N��1ez�����+�F�l�}���3rY��ƒ�B.K���Q%�,��^b��n�� /7`��ė����&BQ*-��'�$V��Sk���BI���nң��PZ
:?p��n?LTCw�
�	ڷ�dn���X�f
-�?u
,+���
ݵ3H��kI�Ȓ�ŸԖ��Ϝ�ҿ9KT��K�
�L@�� Iz�
-�
-��*I(����$�\Lp�7�]�pV��[
-)H
�3Ӛ��D�V��@�9�Hs2��
-�-U[�TkHv `P�k
>r�������K�jO��w3�X*,*-�TJ������Sb��%���l�� I�$
J��ի���һ�S�rUJOIJ�~�™�G��
�n咰��3��Nvs?�
�
�]:�X�mE	׋��琉�������
-��V_),u��է��߇�7��s����aKW��ڲc�T��LE��(��*)C4.K���e����nj�����"t)?/d���$����Ҳ��{U�
�d���7�O	����9�^�(ma(-
�;������e����w��2��m�I�}k$�1��C�
-��YY5�N�p[)��)<�.)�Y-)�2Ko�%�b �K
&��$0	��%e.��J�*i�<4%I$޸~�"�tx������"H
���g�9�\s�$���I�Y�L�6��
-VH�K}���0r�x�I
^Ӵ,
<
-,]��������[PX\��ښ҃�J��.!L$�k� ��d�RMU�^�ߵJʅ4�JŅx
�c/���wǖ����-Z4������4��Թck}-���(L��b$�����c
F�E��1ե/��u�V
-K�

1z����4���B—���޶{�R�2YY�E���[�EU�w��
�RUeEyi	s� ???//�,0�I%e��U��J�$����2J"	�/����K�
-��''%��w?-7%@i���Wg��,t;@�e���j��o�y�M����v
���@�vM��k�M��jN�{
R8��ǔ��S�Ԅo��Z��%�IyO�I8
�����/��*�,
_$�N����l�
�(��(�
-���`#X�]�5��H�lA��"A��%b��-��Xf��f�����s�3�wa�ˋ��߳��o�*�d���M2	VoS�UP"�6П�D_{;^�ڶ�zӈ�����⨲"��V�%,�4(;�����!X�E���� ^Vn
�R።ۼ��Ո�X��E��ä�A��J�oT���œD���2tmUJ޷g��M֮�X�`N�4����~�=|ٯ�R{
-%,J�Ip�j������D����?K��
�\�


5n���-_�m�F(K{�e��\��
�q*�e�T��*�JK�!� L�~��"���[���Ҳ
-���P2U�^�~
-C�_QL�@�¹��9 �T�Ү﷈P�8v�����t��[�$��~"� 
���)���
-T�kgf����Y���[�Q,�@,AT�KL@&���C�$�D
�7��J���=$��&q$��-�����&"ѧw���bf�\�&glmĬ�Q�\jނ�������B������y,;7�����?�R�oR6���KL�L�M�3e�1(�P�=��vUU*����U)%)a����Q߮X�h����G���t(�(u(���e��_�I�\Il��g�N�ڵ�=��"�E�T�A��
KV]������y���Ј����V��\,K�!�%�GOi��1������Bk�K�e%P��n��L�


�ODReRy����U��PO��B��m���K�����u4#5y�����#�B��
�@�v`�ݾ
Hw�
-&	��cU�q�:O�'��
�p^����	�>w�a��+���s�d�\"`2I��L�L��3(i�?Ղ�bQ��M!�]�ШI
:��V�Ҭ0�҈a�nQ$
�l{t�E�e&k����+�p	ET�~*'efŖE�k���`pȘ	�6m�߽7)%-�x��3�LW��p�*��Q��h�
��rI#��I��j��P�B��L%i�^�l�U)�Rjr��-߭_�n��)nj
����ҿoo�
�)(ѢęD��K�
֪ů!�K�U
2,Y �l���wq��2,d�i�s.ce)��qȐN�]%
Q
��
�P~}�[D,ݿ�X*E.0�w�V�̤J
�^�����.�7����C�YS?_���},#�
���� �� ��%{&�m��� ��s
M�#u�p�:O�'���\;n�.Yۘ��
�‹�dᦱ$r	��d">R&!�~�ҿe
*������GRh�I �6Ǯ�P�:	�4tm�(��xQb��a02�O�:���"'E�-

-�����������/0x$�i�Q1
K�G`�����R+؃6&�B����#�
�H�$Τ�C��J�8���~�2�j�*���Oع-.f�ꯗ.�>mҸ�aC|
tu�koۣ� %�(�L⋥{�k��Ÿ�[%a�U����Z�����:p�_����Cg@��,�L؟�~4+��Y���"���~Rԝ�H�ߥk��N�R%�ҝ�H&�IZ&U
J�ȥ��}�~Z|�:�ҙS��3�&��
�UnJ�C'�		���rwu��j۳{W��68�f�f�iQU5Uv��!�I�4x2v�Z�X�ܙ��-���\"`B2=�<z�H�LB(=���zP��Է���d� (�]�P����I� J���R�`E�eF�D5BB�^dF����1)
�U�n�6�%w��
K3�BN+#�b��ؓx���'rN+J탇�
$,�,K
KZ.q2��Ȥj@��J��^�o�V�RV�~�����;~Klt�7�A�f��=<�o�� gGX2	J�J�d$���=dW��a�o��'X��U�������9�yz

)����-����̃��1���T��*)��`%��JK���"��"��EI�� �F�$�7�����^��ϟ��:y�Hz
-�Ҧ�ҒJ#���=�]�

�@�p�n�Ԭ	0�>�eS����� %�I��5l
�\�������C����Z���X�,	uI�!OI�I���T��[Eh�$X�]�z�r��4
-%�A�n�Ht�d�̌3�.ݚ���:*��걤h]�A�?�Z���XX�2��4bed�Ƹ�;ؗ��q4+����b(�����P�����'a������I�Ϡ�J�
�$q�҃{�m�U�:rUڴ�T�9_M�8f�� oO�/�9���Yuh�����g�(�E��b�%�ч�Ǘ�&�%�iK->oݮ�U��6v}����


�ei�T�0��S��.\
�����9h A���%�K�e@&@����
zc�1(��J/����.�q��
��O�8r�Ё�=;�m���D(͝ɡ4����dcݭ��$�M7�c��Ư}�s�{�
[���X�K=
7�%�K &B&����Pz��$�ۧtQP�hhg�O�<�M���J��s(�vKEB/��u
Ef,6�ב���f�����S,�>LD,-\�jMt�f����iDzs����ր=#�n�!.10Id��$�*C��J��TJ{*�* 3@�k�/�Ǫ�)V�y3�O
<������ƺ+
F�RS3%V�(��j�)���r�b������6
��l�
�xx�Ke�H,K{��N���t��XvWgrTc�(�s�%V��K�w+ L�&R9�I�$Z�J���T���D��"0�y9YG�&��aǶ��ё+#J3$(��8�����lفHws"�"���Mq�>0�>�@��еӷ��`�v���ƒU��[x.���h�p�[�	,��\B0!��#H��Db�������w��ЈI@���z�x�

(I"��L`�^d�-B�J�ʼ)��R%���f�[���Uk��n�~WB���L���.QڃS��������
'TC�w�J�h�d�h��(�X��$���vUĒ��æL="��� gG{�
];u�h�J�-J�^�I��2x
�n1.q,��` [...]
-���Z�������:8o��

-��OJ۵���c\���R��
�vJ�K�dh���$]	uP��S����(��
�e�����))�h�����kK�����2�j2~�(�����}�1�9�
�>�K�jQ.	X��:�0Xo�H�qiY����ut��
-�IH�؛箘�x����3r�~arT
-R^�,�B,Ѻ�\"`zN��
�%H�D�B�E%�ت�E���˄"p�FUť�E'O
�ݿ;cGb\�@_/��,�L����I��[�I���H�^;���Y��6
��K"~,�T�Yb�u�nC�-�|f��t�%K\]b�đ�{�7$L��
Tj�M[h�vg�&R��z�J(X��R���L#�*Ȣ"I��p� ���Z+��|��uv��������ۓwf�R[Rv�������Aq�ZB�pI�~I5�:��
�$[7����ܻs��M4���'�e�*%�FUi���sfN�<a�����/B�
%�I���f*n�Kp�zb�0�!bYZl��j���[��F�'�C�y�K�_�����Ǯ��S�
[����qX�'b���	��=�@$	LB(Ѣ�
J:�R3� l�0򆺚�J��ŧ�
:�gWZR|TX���g۵V�W,%P��Ai(�JwON�;ub���$���>��
c�=[�po��h������]�|,�[���P�dX�D�D�$>
��I�3(�k��[��v$�Em
B��z��|�B��tJz
��H��i0��L1<�KiT2.�A,�Z;x���a���0�3��ek�^g���5 $"&!%=k���PjKϗ�=�ą��O
n�K5eIG]�F&��ҿl5�*�G*qG�_7p at z"A�����<]�wh����P�|<�*��X��T�qc
G
2�s�2��� %�/)��K�t��b��QW�{����c?�,�Κ�h���Z;'W/���ĴLD~�2آ�z.ǿ?�S�+��-�hK<� LH&D��f�I
���CI�����K�o����
�����W�\<W3?����3y{tx������
��|�)������	}�Hw7Z����& i�I�K
�z�"�Ob�f��������lOٙ��s�Xx��k���
��ʲ� [...]
쭌��73-9>:,�ϛ��ۅ�fsP2@(�vۻW^$��$�\[#c��Ia��Ek-`ib��xbi.���z�M��>���q�Xj�R{�r%�C�N{�2H��i�I��60��J�J���Dq�m��Pw�Z��sgN�=������V�i�&�6��k�P��
�� %q��o���ߒ
?�!���4a��s,1_m�����'0,:!5cOΑ'�i�
���}�v��y-Ò�K�L�ӌH�0���ƂI�'�J/I9���4޺y����|i�Ӄ���Sb"B�z�8٭�z�Ų���1�1u%"�J��~���ڵS��O
7�Z�=��Ј؄����r��_��¤��}@��9��u�%
,.Q01h⾖0I#��PIV��~{��vIZx��V�$��=s��)	�����ٻD�r�
�3�BM,�,��`���6nv��
-��R��7�0)��
�����,)`I�%�G�j��R����n�*O�U����`��<~������ѐ������%�J3`ь [v��^=��Q�(�q��X"�׵S�
�ƙL5��1Z��Ax��F�'�C�yE�.�$aMd�~���z��ފe��W�� LM�y�!�0�+J-��)7%�dU	�[Ӄ{p��j�+a�ŧ���ߓ�#1624���u��zk��f�SQJ�8(��)H7����}��\;M
����%r���. ,YR
�
܆�k��p8w�T59w\T���z��,	�M�O��H,��
J̖�U�Y�ok��r�
�C
��pu��@(A��b2^
-%h�lQb3{w��$E�D�"����>�i��y
��������3�Spx4)��P{��f��%E.���o�ʦ�J�4�
��v
G׍8�}�m���J
-1ج��q����[ Y�U�*�7
E��F<�ݺ*A��M�d-b�7K�MX�>�9��Ʋd�����ut��
��ML��΅cWRV^Y]S����MO�j��J�X�p	�D�D��!�g�P��AI�Jx��g��C�xc}��kW��~�w���]iI�Qۂ|��6o�`m�r��Jc�D(��ԥsgF�u�7m
�c�T[�`

�!�
�L,�x�iH
-V⻻���y�ʒ�.I�$�-/Jm��֪����o!���y�s��<�6m�L�	�ۑÇ
D�Ĵ[Q$$��"ӵ=ړ���AK'O�b6`i�j��v�.�[B`�R3v:U|VnX�~R�I��T�I��Tf�A%f�J�}k��›��u{H����b|���v$Ƅ�z�Ҫ�h�,S�*
����G^���:��-�S�`��F��A|1g�b�Ր���O`��/Ө��+
��M
����4ֈ���DD�� � �,�<^��A�YD@�Y�IDPQ���A�&��6��1�W��j
���w�{ι�Z������f}�e��}�Jʫ7�v�:{
U;2H<
-t���SIK�.�H0Ql�?�3�)�$JB�\�*�
j �)��`��s=`�M�5�
�g�l���* �jj$��}��{�����t+�;Jl��>����ܑ-<Zx<j�;��K+j뛉>0x���� pVX�����qt��,�^��4"(qU�ﷃ8�֦�Z&��� �I�C�%a&�����A�$�Eh-K���I
��-m��y�IC#c�Ӳsw��_^}��h�L{PU�D��IP��
g�J�i�qTbJ ~�m�Wq��P�*K�
s�S�����y�:�Z��#U�PG�N� �
��8�
�ء)J���qD�'qdIK[Wbh���~���&�95+�����P#
-���>�|�+����:l,ѺDr	��d�ӓ'<&)
%U�w�6�ӫ�`�gNv��
��,+)��Ʉ��D��z�:�Y[�H�4��a�$�tIr��l
W����s��+
��IHJ�ڑ�{_YU]CK�	(�x�p$K���SL�/�
�h0�~Ę4RUB~
��&�ۋ�o�Z��JvS��z�Ј&���PJ�"Ad�c�𢢒������yK�
M̭�8�u��'�6c[^��5�M��p��}��1%K�(!K�)�Q*�1*��fR	�$�ܿ�7:`_�i�6��]9�)�@��*Sx
�J3�c �w~C�Jr�'�7���	�,M�����s�z�&�

�)%��_Q{��������h��KGl�|*	a��%�KL�����$Jʨ��wѯ��k �0�������a�;�Ӓc#C�~^��m,�
-H�t�
A���1I�����)��
�ͭ Kn^~�C7�&nI��-ػ� h����>�p�nqd驐,�
�!Y0��D��P1W���(��c���aO
-r��<qh�$h�%��
�pT���"��XZ���t��&�m
]<|�#�㓶f�����ili���n�,*Kr�Z�4F%�4�
*�m~N?����A�~7��ٓ�%��%E(ׄ�� x��j�*Mê��VJrȜ�)K��9΃I�-72�Z����
����}�n<
-ء޾�KW��q]��I���K,.a0�h"�!I�IbPz��0�
��cR��}�ri�¹�����5�
�C�
-
��v[�����p9�Ҽ9��4��&����p
h�.���ã�6�dl�YZ[{����$x��K�,�!d����;&2%�$�b��Pz�W%���6��(�жg����{�J��Ξ�&�Q�L$(��	��f�k`,�02]em�䊥66!9-;z
��F�
�Q��6j?=�e�qZE}]L�oo��+	a���w��
-�
���q�����$us\T�����a����*a(�Z
J‘
-�NR	�8��ޔ��$4��u%��8H_ihT\Rjv^aIY��&8ug��^a%�7��$��K/X\�`��D	#I�I�PR���*}�T���PN�hoi��*+)���ܚ


����h���d��eK���Bi"�䁣J��1I�ډ��L
7E-���'08"&>)5kG>��C
GۻN����]��*�]�,ѿ��aI�L�0���I��J7�F~�O�má��}�!�T-�	�lXo��]��(d�I��ƏGG��4}����~�DW���̒�ڰ
7�dl˃�P��
��-K/��%��FI�ƨě����F�J�JBu���x�.<���
��O���ρ
-���lg
�&�ՆU���4�V%b��i)�&�P,Y"&��G���5p��hށ!�7m��Q��%��}�St�����?rg!�J�X�r�"�yF!	3I�xTz��V�G?=�O�ҟ��*u
k<\
ߕ���� #��z�:�Y�25Z������̝��p�
�}YG�N�;��
����O��%=;�`5�M�ǻ{�]@b��,	�76��D�$���PU%�g�o��k
�[�BKd��r�ILy���͌��	\,͚=aIObhlNHm at pxt|���
N{��;E��CqYRf����WcT�M���J�3����c���t$���D�./)B�&D��y�:�Z���\·�'�Ja)�&�P��$&��	rނOt`fV�N���"bS2r���f����s�3�,�Κ�
*�`��	&���L��_�=z��7� �FgNv�5��(-.��=`ㆰ�~^n��6�fF��K`��g"A�J�҄��EK����B�Z��.106��qX����9%c�΢�2غ������]��x(}�d�(|܆�{�X;�T	R�Pu�q����i��,�5A��E���g��n,(�Ņ��e�
J&�)8'�Ys�j.Z�CJ�����4�Cr�= Y e���eI4�a���1* [...]
-�X�A2����֕�4�c��	IF'$�o۹{�Ab���Cw�X �ֱf�p_8���M��`�$%A*qU	���(U��=��q��PU����9��I������.k�̍
%zJs���^J��{D�M|%y-
��m�
�@
7�s����
�����cמ��7��"Y����"YRx�Tb�
-����*}�U����1���owdAh1�>tht� �v2*p�)	����%��d�&��c5�9�ԚY��;C�[�q�=��̭�ɒH�ʇ!�EcTbM�
�~�/O酻O��*ڷ�8�
-X��̔M��o7g�����ŋ棗L�ҸqĖ)
%~��:1T"G��G���5�/�IZXۯu���F�%�f�����k�<u���ʗFT�OR�_�R�>q,.1dz�%����P��U��J�Ujm���8�� 7;-9162z����j
ӕ˗�,^�9�)��1()ڔ��o�ai"y��-|)j᫬��y�IC7�&nIߖWX\Z	b�։d�"_���ijRL&�?T�ꉩ�=�*���T"�ݖ�%1�7OW';k
�x
��YL��M���k(�X�r�u���3a��Rk�����' ���ytNw��t��
-:��l� ��K��D��E$�"�� � b_*T0Rk��$B���T�`,!�jm�R�9�:S��y�߽�}������4�����s��{����I�ʣ�C
ig�K`�!
K��Jo�Ѧ�`
#�^P����;

��ϐ9��S�e�ZT5?+m��@���e
jQ�竢������*��K�
nbnm��Nv����[0wQ��
��窱�k�I� �7܏TJcI�K\0��D��wE�$J�Q��ӈJ�5U;����]Q��p����)	1��'���;�X����낿�1��]���Pz
S���fw��BZxHDl�Դ��s���\�qK9�U{D��v�z��;9�$�&�_��z�G����]�
��-���65!&�/�$�ҡ�1����^���
6�Ή@mPXt<�=��P�큂���)����%m*	�ёR��s������zZ`SC
�̱f��y��gB�
-�8�����1Y���u�IX]ECI�T��(	���o م����ۘ�~A�1	��93
-�P�m;+�j�6�8	�v����o6��)M%�X�r�&y�$��w���
���n��T:Z��g[�MK͛������;~�������1�)�R��\(��vCII,��[�	�pWh�~��QqI)����/^���O��ػ���QX�;5bIɣ����/\s�T��;8���NOI��
-
�D�P����F4��PRKj�8�u&�!8"��
vC{�a����ȴ���M%�6�P�$OQ�Tz�Ǹ
��2���Ϗ�Bu�{[UR�s�$�F�{��6&#�A8Y�������ө��� ��F#�,m
Gy��
�F)��,(^�n��
{�@�>)o�RI�t2�De�_*d�J��!��W�C����;��yÚ�K̙�;
j at tX����hW';k\�=�oȧ
-B���L٣$�z�f[8ڝ���(/���ISR3sg.,^���
ȶ��|��X�)K�SIF.Md��~��J\s�*���D��
*1|;):<����c��h=�K�|(	�":ufu–���B-�h���0
f�lRXj��XB��g�cZ5����6���(��H���8�&q
��_6�?�T�u+����N��

p���
�:���Oof��
*�E=T�K�%��3�R���C7e��?953o��%+$�h�Zw������x�*߸
%�$7�x�$�H��$J<��S�L�Q��u��v�KP)
5`�q�q{
ӑF��A���儒f�M\H�X�cZ��!ڝ��i�!�����RX��`�.K��)m��$��U⑤J�C����Ȑ "����\�4^$���j��F����
-��� ��]2��1-Z��=����}��$�F�H�����=��
����gN�
'c����]�d�,5>*4`�����-�a� ����Ơһj���Tb�|��r�	4pwOXF$��y��J��w�;x�����%bsL��RI�2����l2��ͤ�b����2mk���^	*���HI��
-�0������
z�`}]�od��J<�����>PW��
�p�ў�~�a��?�F�R���������K2v'O3MF��D��T	�� ��HV/,��6��-�f.O��@�b:uA�t��}H������^�=��ҏ���L&�=�Tl���^�m�l�/��+w�K����$����6&#�98U�ADeR+��D�RW��?D�32��ܚ,�/(<61%#w��E%�7l����7�h�ݭ;��Tz�z*���
U
�H��o�r�
�!S8�&��l\�ri�܂险S&�w������9n
��S�yg6��y{�����HZ���
4�Q
 ���	SӲ�f�[T��UK���EX�
���w�Nc�D��%U�	U%.���oQ4{k
�Æp���D�$+��u�����=?���kAT{�҅KW�ӰDdj_XҦ�`
(��K�x��˨)��pp�W--*����� c����LD
j�7�?T@�
�PI�T������fVvN�ƌ�

�IHNϙQXT���e-�e�Z�nE�`R��$�Jg���x������D8� �qcܜ
l,MN
�H����B�-�����Sv�G������},��������R%
KgX���SY�S�wo>�$o�W%n\�UQ�hm5�J�J
߂hf�Fp&�����PѩK��>w�5@�������ĩi�yXj!g�&��aZ�e������Tz�T�|�
3^\��C��|�u��
��g�M�
�;���x��� "j�n4*��Tb��
��룾��ij	��c�o at X�$8�|�r��M�vTTA�;q��vU�rx=|-�w8uI��T(I���{wpۗ/�C���⾃��=G�:�Za
�g@?�pGl�n�PR����H,��ݙc����

���m��
nDX:wQ�ݩ�wo.���W�J����xc�
*ń�|kE�V_��.]�^()�%��^��
��큃�K�+�"� �����-�H��<WW�7�hSI���J������� >y�ʥ�Pޏ�)��J����˄�N�B��4�s#
���C�PR�J�2�cn�7�8��T��)�Y����l�
-����I�m��b*�kު��˩Tb�
��n߼q���

��@A�e
*�F��� �Z�����e{ ��N�PҸ���)bw�����C�E����@�����-�%bw7%v�K�۝D6>�
-��Y�JT�*�¢RNFJR\Th ܺ����򭁞P���$�2�õ��<�eۃ�
’����=Ha���Xs˩3�[ۮ�������cq�m���Dm㏞J/�JN%�Fz�M
xq�7�)
-r��$�F�{�EM-L�5�s�(��W@%ũ$��p�����gbHd��3�~��� �����6TN%9���#�u4��eK��29 ��A)*�̝% ��o<������>���x�����X�!
�n�>�elfd;���?(<N��%��@���`w�Zۘ��>u}�jw�h�e���J\�V	�Ө��-��n��D�|(�ƒj��`��A K+	,�kh:A�
���{(��f��$���TR'�xE�xœ���r�
���ع�������IO��
��hg�iڧ7x�N7�4�J=�
-N7�1������]���y���)-+߽�`}cs
۽o��N��_\��m�~:o0���$�7n�L@0����cGj�TZ.E�`@S�j��M�Mu�� WD6ε��%q���e
TŕF�Q3J%:�h��I���8j4�q1�q
ETD6�]QVE"��Ȫ��!�f���(�L�
S5����{o��~t�����i��N�s~w-~�T,�lA-K
���G�R&�%0�]���e�N�Z;�	�	=�?�P�
C	�J
�T���D��(�*�G�h]WJB��G�����q&#=X�,]Aǒ/��Cɐ�g�˪j�[HH�#��7�M��D�V�����3�G at +}��t����
%�I��x���
���b�����&�F����gtV+��_c�Ɉu���X��y�������C)'N�/$�
��N�Jrא�OgT�x*�|{��96��iei���9p�x�J>d*���D3S��Hئ8�t��,%y
-��#n8��Xr�c)���3yEeU(X�tܩ�m׷�@5��E�hc(�Y��L�@n*-�Y@��h�*'Z7�N�ZBz�c�`��0����+~,��X�B_�����lڻ��}��ն��5޷V� yD=<������ĸ�Pp
Hj�$�?k�����+t��MU���zv�eb!�tx��C��el���
�-P�����pDLBr�wi�e�Jw�ZI�����Vҋ��$�7rl� ��0L�ᓉ��SɊL%���|<�)�~6$�z*ZJ�k�'�$�P�O�z�XZFǒ7�%��L��w�����O�(w/$Z�!g�{b�8�C�-<���f�T�۾
�u�h�Z�C�������J2��`,EŒ�t6������FS
nZHI��Ѷ��ﵭ��oxJ��<��`scC
�
>"6r_������u+����� 
L��^A5��V�!��g �d9gbj6i��ֶ���;���Pw ��Y*+��ҋW.�W�?�<�|�V�|�4�l���$�S�@L%��0�p�ҩ4�L [...]
c��beM
���
�0&��$�{m+�^+��wT�%�`EI����G�b '���#Y��r�d^�����Ґ�PZ�גS�JDLh%����4}6����1��ґ�J*.]e���{1_���BR���j�&إ�Mhrl�J�q�=�Si:7���|�{S�����]_J�㎣p.�\c�qc�k
K�
ހѪ�#���a�=R8�^���C	t��!�����8�����Nv*)(����XZ���e��oPhT\bJFv.��+׾mjűt�Mv�*�����k�1ZI�[�i%��8E��'�G��Ŝt�Gx��GLK�}�JR�+:��>`��.�9����a��',���cߜ�/.G�|���=J���j%�\�_H��\� �.mil���*+B��'�0ݾ�a=\`�42�>
Ŧ�
o
�wp�w��^K=����E�:|$K�Uc	�.04*��]~I�d�=~"�.�%�jϞ�"]�i%�(��C	+6�L�T�ߏ߷
-�&�%	z�%Kk��8��{��8�����+*���khla1��V�Jj�ЬVjz�V%%�����s��7��V���Yi��
��r��\��3
�
�R(P�I��Z�s��i���/[e�i����t�
N���W�V�sȴ�@'���{�[3�]ZY�Lf*
�}�3��2�J3TS	ϭ��S	>��(:��Q�0���+K��>�;WO��x����!qǫ&F	p9�qyӍzꐓ�%"Jحp�L%C$7�T�ֵ:I������4�j1
Ka`�������M˜��_~��o�7���Ԯ�o%��� �C|�p:'351.*4p��훙����nj�1ٝ����Fo�J�髫OZi$�Sn&���U��vz�s��9��MG��S�u��1�K
 �	���6r�V�o�ŰK�M>�v#Si	N%s~*
ĝ�˷�.%Y
-�ci�x,Y�и��폣qW��q'4���8p%`��j��Pw�\~:'
P":l���J�8�&�����H�}~�*&�<=�S���3��l��Y� ��; $2�P2���|���/ݴ
-��m%��]+���$x�������{C,�����F��͂�3�ǍAxJc�O�����9h+�s�%��s$�f�sTQ�H�C#Z�Q7�1ϝ��x몋H YiG�Ã��q���a*5�ȹ�����[J�nB
-�_/�)����d,YZ���T��+פ��rq�!���m%�WQ�.7
��m+��-�Ĵ�%p*
�
a���h�� K��4����/\�lպ���<���ã㏤���H6m�K6�"i[���{�J�������m4)o^�z��� <w49!&"��۝�a��/!'	R�AL�
��ZIxt2�@ogW��}���)@��;��~�����7�i�g���>|.�~�|�\�z��:#wi��׎���plD �Jf�&��?�S���S����Ǐ%
��|+w�qצqǩ&������#/=)� :�
3���X�CԈ�$I�X�ci$Ѓ)���̹
-Y�w{ǭn^����{)ٹ�
-J+.]���ڦ}��ն��5ދV��w�&&eI�ٓ��s�{�v�pq����M�`�
8�WT��h�?q1����G����F�&���X�y68m����䝒q���BqM-�5���� ��#6Ki��K�[5��� v����Mv�����?��u<�.%	
-����� :� �>�����;4 w�"��瑢q��J�����R4yf���aA{��!*�ojB�� n*��ꥤh��Л�����d,�#c�c�n
8+"&!)���3y�ik�Zd6���d�m��k%��(h5/h4z�m��zJ ��S'����ߠ��8N��o%8��� 䠕�&A+YX�B�9y�G�
J���V�D�n�M[	��N�Vz.�o���j*/^8���vn
���a�ʥ6V�f�c�N�{���?a���%}����>#�V"���g�Yܵ���ww
-��p�>�=��R9`[n��d0yH�nO�<JL���TRH&���gj6i���y4k78��CN�E<L6-�V�V�Jҿ׶��<�����V��eE4)���A툠�nj&��rR���J�)�܃L��
-gm�|�������RB�Qޕ��Vj���������Ɵ�  x�����r��s��
-�[�mqX���rΗ��=x�;�����;���)�3�����"�oA3͉;a+	��m?1���V��ċ?
����y#��bJ
Q������/Ӡ��4
-O*Z5�&c*e���,� �@���M:�c4�U�D�EeߑM\cHPA�
�Y�2����X�LH��y�������	m��Rݿ��}�w�s�Z���ƒ�� 4vN�,/ߠ��H��-�m9{�2�i��7���S�4�$�ƫ�JbT�>R	>RiWUyQ^6��@�eK��9SA��2�� �����T�
��h*�`*YA��.6)5R����YR�$�J�2��x��;�if�V�f�%�EG���y�.51T8�FIf*
4���n⮈�
:���	�N���g[���� H���~��,tu�g���\��M���6���X�Jƒ!:��a��EK���DD�%�e�VT�������6�ӧ�T���Tz�T������N5�����


��c�BWg�9FЉ��.�*��j*��H%#SH%T��ˏS�B��]��jM%y��P����,-/��LI�Y����
��w���-�N%�c�wq
�LpW������3���ߺs�^/S%Ԏ;�j���A��X_��
=
�&4p����T	0���� UBM��e�0Iڃ�{�IKk{gׅ�|��/2&!%3���0ݴפ�i5�$�ƫ�J��z>�O`Qy�T��C�t�9�ߣV�Opu����#�]k����
�T�0�4o��a�1�)Y�p��-�f����K�gB��T�|��N��HN� c����
_䛋#>0��)�7�JJ��8f,)���*t`JV~�6�)�ڻ��S�
�h} Z?/��w������=NnIAvjR,1���y�s�V�� [...]
�J�%۪�@*�h9s�K��v�/��+X���*���Վ|;y�ȁ��wl+��LI���@f�=��H_��υ�KGKj*	�w�����&�h)�.$":.9-�-Ȉv��߇G��N%��o��lKn����kBWx~��5����{�J�C�S%���8�!ͤ)�(g|��q"��7mBJ��M��ٴ�TҤҐ�R/I�Գ��IP�z������u��47���:e��'��TzMy*�u,��T
-]�!as&I�/
���AS	��{j��R�q������W��ܾ�(7c���`
85 ���41��&ޙ(k r�[u<��8�8ܽ���pgm�Lp翊X������.]m����Ô�_�W��T�
��
�3��-�NM��Z

��c��<g 
��m���e"�a6��5d��:")=}�[*o��I�J�k��T�/ Vr���v��8)���y�������ߧc*�Mp
��,��b�֡�4�z�3�n�J7�>GR����-�8r|
�p�Vpi~�������[SYZ���

�l�������؀�-�7�����7X��9�,X�����e��W�k��z�Y�X��ՖJ�������=�����v��q��]���x�����Y3x��&�*!�%Y�#cIkݴ��6���5n�jߴ�T]cĥ�
���
>�W)���k ��
-�[ϒ�9�OJ��TRsЩ������7���yn�J���6g�A*��R	��]�DRI�7�1��*-��JI�Y���
����l<5- S&�d�[|��;3
� \���s��U�܇
l��ۭ���n<��A�>�
�=8p��]���:��+��u���0����B��ū
�ԧ��=k�{s<�r!%m|��Ȧ�#�67m5ٴͲM�+�M�I%�5FH*	Y�v���N5�_���>8`��ʙ&�z�t��ÜJڲT�R�܃�s�T�B*�1�����U�E�J7�

����8��caN��R�Z��Jb�M#�3��!�����MBVT�e�}ŀ;u���"���3M%2pwδ4ҁ[&��ڐw�F�:�ŕD}��d":�eH�ߴ���
-7m{���
+�M�I���I�A�����DS�����
+�

�r���e[rҒ�V�O�������Rd:���J�9�=��hcS��I�>���
�0�:�]�p����tz2��@�
+sSc�7ѩGK�o��&�J�pg��`����ʰȘ���|\���IY	�Q{	�
��!
R�z����a��U�d�&Ɗ�

��J���H�JbI���M�c`���#޴�q�6PVv"+�7�&��_�J�z'���4�G('m���ʚ�����$t�����X�-̌
tT�
zr��yN%5_(� p�=<�T�:��Mx����P[*��K�ǘJ��uw0���]QZ����'������O�6	�FN-��-�)��_)�����Y0
�\J^qn�VR��Z���L����S�-m��=�����G�߽��8���3W��

\IU	�L�M;�l�ܦ�lڽ�uGO����w��<�(��
�I%�5^�TR�&�J��T6���z���c"�W�y���
l�0�t�L�}�t��9��xa��j�l;'ׅ�JX�o�U����q]�=�?���SI�T:�^j��M���8?3%��4�?]�z��9�u���z��&�
��i�-���.

���SXVY�M�BJ�
a	—mXS�,�ĥ���Z���;���������s��k�p�J�J�tŴ�7m��M�A6m/�iũ��M�I��J�ϤR�w�dr�(��BVB��.H]���>��H%�sȷ��tҺ���J*=��h�����]���SM�Tm-��شq=��4�J�o����y�{��ݻo:}�D�ϼ�W�^���UPRQ�������p��R?�
�v��VYV����X��m�p���g�;x�Ma{`�5M�i��
-]�ߴǚN��m�y��BX�XҤ��# �~�R��wn��@9�����3rz9m,1�x�{c�
*USS�T�h�S)N�J�K�~�u?d[7���
��ܷs{y*�!>ːo`
��pi�J�#��SIE&
�O��ќe����wPUW
�7��Dw�����N2Qa#��Z�D�A�H�.�	�{� bYĆ�nDAi'�n�6�,;ꬸ���9����}��{睿a���=������q�R�p݆�`B� ��%���Z����-#)6"�����f;
\#=-�����q��\*}$}Ӻaw�d�T���!²�6�i��M;(�M���6�1*
��
c��uw��4�_8Su�PYaNZBtx����Id%����L�
�>
���5I�����#5�H���]���
����������2l
�q���RAQI,��MC%\M�0��M�v�9���pD���o��QV�5���=�D� �����\]b�~5k���+ �X���dV*���M���i#QX�9^}�bڴ=��FA%��+����O��lWZ������D4x}�e��J �Dq�
S͡�����lh݋�������+,*
ȝJ�����b��'��
��t�����m���u�`������
*�*�W��OiΙ��N[�,�X�8(���%��ѓ��K8ۅ�N,��#�v��^i���.-�N����
��1p	��
\AT	q*q7�梥hӚn!6m�h�
;y�J_w�
lZl/�mZ����Q�������x�9�Z�

�r
��<]p�jI���ARI}�"�J�mw�T�*�/*�����7�����T��������|��Z
ܺ�|h��
���4�px�s��WJ	�����w�rp�p�,�R�R��ݿP��C���y�����jN���(��J���F��J�|<p���)���L��v���������}O`xtBZv!��*\�`��ћVA%�F�J�2X�� c#=-��O�S���UsH*-Y�m��n/�R
-P��M%�2'7*�b��)�۽!��kkȋ���qs$F)��nV�M������o�#%�Tf��
-J8�
J���T	OJ�-:p�(��w,�qeH�_	�_���o�v��;W}�Hyq^FrlD����.��[ME� K��`�H��Q��m�o�u��*rӺy���B����4��
U�T�>۱O%VX>f�%*���3S�"C����3�X�
-@R����I���.� �L��������C��?�"g*�*�u�Э��$?3_��0JI�̜���$�|�
:�j�Gq�٤ϩN��d�9.�A�����w\�܂u��P�%�
�J��$�
>��έnv�T�%��
��p���زa����%
{��@Dc��q��$7-�b��"{�D�%g���M{��eJKr�>{��NK��KA%�m�J-#C%",{9a�ʠ�����:�"*1�r����)�J!<T�K7����uC�1Z�h�I��~���F/E4J�y�M(�>4�Dq'V��B�p��¢�S��$ukm��E����=�+��Ր���������\w�L��Ce�9i���8��7��1�YW]�k!S�ڴ鸙���x)a/
kO������b�i/�_�z��7o^�x�*�Ľ��N��*<
-�򒼌d
�.��7�5�]��D�n
-�dA����*���Ӻ!߮�4�_@�)+�IO�����l�F]4~)BnݜÌ;���cT�-mw�������_RQy�T��m8����ڻٻ����JS-�wiAvj|TX�����
۾]���7��|����Ӕ��!���@Q�,}�{�iie��'hotbzN�7m
�}�7�/ț��QP���
-*
�J�"*�
-���	Tj�DT�܌���`_{k
��2H����"�&����Tj'��/0*�
-ݺK
����}ܝH��,�����ƃ�R�/��(�z�n��~!؆��G�W���p�ڍΞ[`���C~��mC��
o�=%:[�����kkN���؟�����hki���H_k
vJS&#{�\yk�;�M;�ڴ�%l�5&���sr�	
�JH�.,=�]���u���Z�Lۃ�Jb�1���A��/�
-���}���It�g�%E%n�!5���I�����*(*
ݺᡤ��

�vs�ii�[_�Ѻ�Y�'�|�
�%�n+t�
-��
��{c��s�
>v�����W�wr�K$����ꕨ����v�M�����e&�F��y��پ�t�!����\U;eA��Da)�i!-E�卥��n��}��_�;]S�������?��RA%	��Ұ��&���!ԬSӊTQ���R� ��o��}�j�%��)q���^�C16��Z�X�O�T��
�j��
f�}�(�SQ	����J���ps+;g�=A�щ̇����J8<��!˔Jox�Dv�;�Ζ�����`m��t���%��c{�L��N�T�lډ��A�VK��x�V�_ə��T\�q��m�rT�RP�q� �
b*u����@�CeE9i���{ܝ���Wj����R�
���� �$��⼌�؈?OW�7F�5��oBlݜ#��cΙ%|��*x�ۈ�
���]Xz���뚀J��}�N�q�tǠ�;:D�8
� ������|�:+������B�{��T�	�J�Q�޴�s5(YX;q���W|����s._���s
���#
8Ϟ���R�SP�qc�J����w}�
m-�3UG��%D���;��a�������h5��4RjJ��ҐT��m�T�-(*
Jl�Ռ���bo��ݺ?�P�����sT�u����<

�y@%�7�Y�:�����U0t���hw������pG
vGiavZB4v�u@%��MSBT�����Ļi?�Z���V��
�A{c�s��;y�b���;�gP֛�
-*��ƻG%�;b��
-
�qs�i������
-j�(�W��RS2�f���R�S�n
-�JR7��u�Y��k
tp����r&ݺ�o�#���YCs�R-=#�[A��^�� \f~	)�ʃJ�%��U��҂����� o�
dg�w6�JLwHM;&��N@%N\.�Y��dӶ
vN�{��k�M����g�
-
�x�^A��B%���~?P	~��*��l-�6�kjp�D�)*��d��T��q ��7Q��N�ӟӺպ�>�dy�c����C���G�U'�p�~!؇��G�W��Ԁ|�C��Шԏ�ы��X[s�De�����8���FzZKy���l�Q���_�(.�M�M���O at XT|jvA�A�i�Z�ڻ�Ц}(�M+.��Jc�J��A%	�?����iTT���
���6)��n
(
-
-Ddp�}I�E�U�a_�]�d؅aG0�hæ��7@�h�(D=V��
MO{���޹�
b��%��38�<���y�������ic�Sæ��Ms웟�0*��#��*��J�R%R���*�����R�
-�3��n֧���6�D��

-B�DbI���Tjj;���z�@�
b���g�
���V����PuW{/�;s���TYR����(

��t��޴�
-��c�ty:h*q�K̉��� 
-G�,
C(
�up��

-�Iڝ�SXZ*5�::��/��+
�����Uz
���Wg�L���n%����J�F\%
B%���vr'��gpS��\�
�F����[�;;����a�hG8�+�&+Vo�l���#��Oޓ�W\^s���V�{����=\�
�R[sC}]m��@���
�����difd��C���n
M�Jě�����͖›v����o`8q�USޗ�J���W�uU��� ֖��1��kЀ��(��GZ%j���S�0�T�}�:\��]��e�ꮂ�~ga�pW�����
hd?�J�����i��]���|9��m���Hd\2c�Ϟ��7�&��J?��=��{�������YbQ|t�`���햍kVX����h�����n.�ĨK�pT�ЛV�i�,A%k*`�ie-�i��P_��}y�W�W�m��M���J
-m遷%�T�ݻS)��*�L
�}��ݎ_�%��-
��$����d�1?J%jp�ɠl���
?56�6���kgpD쮴�ܢ�j��-�J�7n�0�#l�cr��������B�[7�]��������<��>n�X�Y�,�ם��1s�'�UQ:&��XoZ��H%-
=}#�/���"�$_ZQSW��
�i{�@_����O�^ڗosV�J�_�W��B[��������A�� P	oKSԖC^��J��ΏPhp�.�;�A*��-��W���<������Q�cn����+�}f������;3g_i����h�������P>��U�ŋ����4��t��'[����/����MK��
���W�\M��:��xZ�96�!T����im
�|!Q��{���k
9�ԊT�g�l
F_�P�x�X��(W�?C���
*�>���Q[�*M��_�b�nc~k*)\�O�W��Ј�B>����f}r��0UR�6YTZl�T�j���
����SXZu�бF�Ro�Г!��t`��U�p�J}�J-H�겢�̴]���;�]��|�~�2sc��T�ꔨ�gC�X*����9޴&��W�߼m���Hd\2�q�*4��/x���=���ԃ��n�Ji�T�
����-A%Z[��&v�m�^`*=����n�V,4��y�8Fh�J/��_�|F����m�
-����@%=��f�Vk7Y�9{��	Sӳ
K���d��nsI�ǸJX�A%"�e�r3w'�F��rq��lݪeK�
̛�w��)T�aS�ũ�*Q�9�J�8�s@%cs�q
\��qbw�e��U��i�T��q
޴�8��W����J��J�
��I��F�$F*	@%[R%�
ϫ4Lf�~{.���
�*���]��ˋ���%�E��ս�vuk��T�����h*a�����&�J��u�
�L-�րJ��� ֽ$��R%V��:;d(�U�p�[�t�bPISI����75���c�i��1�Ɓ7�����_PDl��̜}��_
>v����l��>�
��>R�
\Ԭx��_�W��Cb�W{.�;�D*UH�%bQ<����h�e��&�J
-7<����Яn\�@�>L��RuYQnfڮ؈�^�6H�%���LQW��4a��>�)��͜����oD
bht�H,)�V���74�� �pC%V��p�"��e�G
�*-��HM�	��t�ߺi�
-7R	�M��2a�8��874������8��.6[
-*m�w��

-�IJ��),�B*�::��/���0^%���*�R�
0��PÔ�g�JQ�Jh��J�C�4�1�J��w��	�D�Iپ���I�A~^.6pu�J�os��[�yu�|,��Nn��-���>�Шx�8+_ZQs������w�_�A�3x��?�TR
ķ85�J�o^��{���t{3R���0;=5Q���lg
*Y���Pᖫ4��*Qs�1��Q!T�7-��g *Y��dm���.LL��.,�B	��w���*�*��^`*=!T��d��R���͑梅�I��7��eɫ��D�IWg�Lٚ�[�t	~u#��(��Ќ�`�1�!TRG��D�3�X�z��m�n>�!Q��{���k
9�Ԋ�t���J�JϘA|��c5
����t�ҹ3�R�Ѻ�ʒIzJ�0,`������5V��H%-<����}����&���>k�������%R����7 L��HY��J�JoT�+�t�>�Vl���yʆ	*�@*}ī�*��T�_�hMzq��
>PUZ����
���l��n�&H%XB%,4cG�J�g��gR��
?51�T������go^q�~P	VT�WY�J#SwJ��P�����P*I
$┄�Ѐ
�N�[6�Yaaj���T��R�=����	TB	�U�B*�Z2&�H+k����Q,̑|�9+^�Q��s�J�*�ݓ
��~�rscl�h���
ϫ��(�	�R����U%�٠�0<�����T�4CW7�&H�I�J�F�J�c�4a��ʠ��fhh��������<�*sL%h:�R�4_"�G�
-|�
	�����Ҙ9�ɪH���psnj
-*Q	��)�N�%��
-L��S�J�x�x�ޘJ�,�*
�*�l���_�R0����W-#T�aN��ɫ�j�!U�}���ދ�]�q�*K
-��S�a��
��)�yu�*q��f}
-*Q���������r,�rnQ��-'�={�r�Tz4dӉ��>n����,L�J�t�Ə&�fb�޴���>�Шx�8+���޴Mm��M�s
-�R�|��*)�{^��V�<���_}���(oo���v��^�_�J%��{��>��
*ՂJ��Pi����5\ݸJZ
��H�Ľ~c}t���~���t�q �e,�>c���j�FE�!�I���hID"�,d���� �I�Tk�K�
�Z��)��Xf��aڙ����=��M"��{���{��<���~?�Ӹ��*w��
Wy���RT���)�ٹb�nW����*�.L�W���h������d��W�BY%c�E�ԓll�,P¬�J�H�ɞ~�a�s'�J�ژ�U*aT��qTBs�*Q��P�k�/�=M�*��U�$QI���*=e��]R����vl�Y���|ɼ����^nA%'��}z�J�k�*5Tj˫4�a(����*�1*�ܳ�pq)�t�Z9R��U6�Jhe#T��*-��
"��W�esͫ$��E	kɫߴ��(Pi�_PX�E	�RA�m�JL�T2��YQ��7׬T�G�T�U�ݐ	*-�}=X���v���_[R��̰*]A*
TZ*�
*���Ծ [...]
�U��
*%�J�H�c�eg�+���h*�p���
-Rie<�
-*ᕍU��dU"+�Q����P9�r��9+�
����J/O�N�(���C
�U厪Tuf��C*
���Ji��\F%�3P�
3�?)���T1f���7�Rbr�z%�ģSNb

MM%�ne�b�<�JX%
��ة����t�DV��o`��XP)�S��t��DU�3�����������Y������Q��ÅTɒ�T��<�2��
��-R�@!��Rtx���5R���Uj�TjъQ�C�nH�!��$Pi��41y
���������+�N*+�R�L���*ٚ�J�KU�oZ�
��u��	
��V�df�P��Ju���T�Ĩ�^�*�p*
F*ـJ�*�_���|�r�d��Tb3c*5��ԎS�?���i��|�Ҧ|4�c'��Re�o�QS� TJ!Tr
	*1+��J:���
"a�Jmy�8
�\@�P)�Qi瞢�ťX���7ᛖ�DU2�J���҂X���>�*U+3z��f�W�w�R	�NY�Y��jST	�l�RT(�l��Tj�q���*5�d#Ui����T�Ϩt	T��Q�	���J���S�j��#A%����N�R}��jf�
(e&K�J-�J��H%{^��J5��mA��E{w�U��p����4UjƩdɪ4���5TJT*�*�(S�UI錩J5R�x�3�׏$U^���of�
�T*����*-�f�PɋQI
����
��
�J�2��@��J6R���J0��U:OU�*H��X�cJ*��o׫�����Jꙑ�tSM� e����J�STI}tZQ�Ͷ
*53�F���B"A�D�R>R�X)l2�
:'bXT%�4�_�|B%ow��H���J��JzfF�RE�U�o
*
�B�[�RUMg�G�J��Ɠ*�WP�>U��d�a��g$'r*M���Uz��Tuf^淒)��٩tϜUj�����*=�*Q�^�JO���Y���JKA�J*��*��J��T
-�C�T%
��V�S��T�רJ�S�ıC�v#�րJ�A�i�S�J�����S��J�
(e&�ό��J-LM%��TUQ�J��iH����S�!U�.�EU�O�
TzN�RA�M�J��J��
�R��T�G���<Uor*U`�N*��T�B������Uj��JqT�רJZPiu������J�$*��i�*���y��o�gT*C�+׀J�թ��J����Y�ԗ��|fT%
�����-�P���J�����*�s*9��J6b�"A�D�J�4������TZI���@^%
sP�VA�l��r�JT��R�U����Q��� 3
wmߒ�6-	T�	��tT�T���i��\��`�J��T����n`T�������(e����J#�'����D�J+�JH��Ҳ�r�*�JjgLU��Jw�J?�Rg�P����}V��H����P)
T�Ǩ4����R%��H�`�9�Qi3�R��Tz&R�{�J���
V��H%�tj*iqjj*u���Z�
**�NU��1U�v*]�G�w�J5�
��פJK@���^n�}<���,Tj�]e�J�{�A�	*- �2�J{��*�1�J�ӭҷ�O�`��J�@� ߩX%ǁ\�1*���Tz�S�=V%���O`HT,��"�t�t��DU�k��-�RIޖT%}3ß3�t��5g]z�rP)BP�����Y��kRuh4�(���T�vpP�T
-���P�1*�;�}�v��Y%h:^��ԕ	�R�\��m$*is� &S��T���Rfv�X��"��
�CU"~OU��J��|MU���p�D�Ҿ�;�nZ��T�1}����M���i���v�V�J���}B�@���.U��U��t�W�T�W�t��6f����ÂPӍ
5�U����ֿp�偝SSI����r`N��R(�Ϫ���p�IP��
-N%\9�Q�T~OU��J�-�J[�*1m�v��T��dFP��7)��֬^Μ��H��Xp�G�v����

��T�pmǫ�B�ҍ
-��JpӁJ�t��*qM���âMkS	%L�r<|Cg�J+S27���T"*����{���TIԖ�J]�J5�
��&W/�?S&�&��I#��k�
���J�,8�S�
�\��?�4�J�
�4�2h��`?O�tN��A:8��t��J�]z�W��
-*q�sVV9T%��S��B���DP�ɾ��UI���VV��Qi����ĥ
fG��vG*�5��k�	���mqh���J
-;xo�
|��
��*I��1�t�P�
,ܵ}K�ڴ$P)&<���MPIig����H�	�9��h�὎�J�\�A�$�+�;�U�@*]aT:�o�F�%T��eF�wM�J��K��3�&����eV�7M[%��$m�^�L�*}Wl:2
Ǐ�J;@��eK�ńO��r#��!���V��\�-[Ü a�]aN�
��
���~AaѠҪԬ�y۾��#%���T������_�Q�����rTڅTJ��Q�j�A���~����\8{Z�&)pMb�B}<�JH�.� 4o
�aZ�*)��[�%n�
���*c�
\�JW���KO�t�D�J8
C�����֙	wkY��75�9��U��!�>�l��_pX���	��@��JW���!Q�UI���QcT%�� ��j.wnT�f�T�_�J7��_�
*�,>\������̔��
c�B}=\?
;�#�����F�n���m����a
��p*�8zh�n����t̟1v�I�ƌPUI�x�Q����ANhNn����1s/KJ[�q��/

9��	
-���G�g�<��:�8
OVcԣ��H�(6��ʪQ&�P$�KQ��H��&M�"
)ҋE��Q�n���Q8�5����Ͷ�����2��������{��cXi̤4,+ŀ�<]
l�l�`cb+��J�t+i��4��0���у�?V�+��'�
-
�uw��Ƭ�Q'K3J3�n%����C;.I��b�{{G15F�C��J��]jm+�,��:�p8"���u��.�m`%Md%�ܳ���Ƒ��Ϙ��4��e�*���ܽg���c�S3�O|u���- ��80�P��V+�e�ă��{���ɷ�r�[	��~���7o3�e���q��1���V���V�AӬ���io���9UV���

��pv��S΀W!�f)�h�i��rQ�c�+�v�+�5���:YR���x8"�������l^��+��/���$Q7�z���s�L�IRz��ŐӪ50�
K=�w
�%���m% �R*X� i% V0�Z�7�M[p+y�V��/[��V�[�;C� 
Y��V�f�+��H���z�8�X��
Zz
[iشk
�v������FV��; �����H_G
YIY
pud=X��83f����O�PN�|`�3���3^x��a����N�V�If$3$HF�}��9do�R"�J�b+��4��aX�rʝ9]�N�����E
��V��	9iv��&���£ݜAh�=(��EE;��^�|�A��r߾~�����0;=)6*4���������@WK}�jU�Vb�-A�飏>�GRr�WZ�z�M
����� 0/]�u��w��Jt�Q��+�(�$�
Đ
�!���J������
m�V��Vz�����ݽ

Z{��5�T�=!�4m<Z�F;مK(�3�i�,��i'h%��C?���R{S}]���œ��#Q��������۷�r�ש�*+,���Q��.-��3��r���721��st����ML��*�j�5�� '2+�V(�+)��J�O4�JU�g�!����]jkĭ�V� +�"+m۲Il��i�_݅�z��7_�8��h¡�`?/׽��LaO�5���=����n�JSƓ����Y���.(%i׍h�'R+�x��5�J=
�o\io����,+��H��
�z8;X[�06��h|��?�i�`��Ȝf	r2��sr�	��MJ�.�rjj�|�6?�g�_��6+��J�`���"����NV
-ƭd�[i��J�J�=y
{�}ړ�F��ɒ������d�>�^V�P�_"'KX	�f�lQƇ�>d�n��g��
-ʪj�M��wr�
��MJG��f�h�_z=�
�J���:�ܸr���LMeyQnfJ\Lx��PV��C���nV���9��͑���-�s�P�
-�I�)Ĉ��9utq�9��V��}ﴒ4�JS�h�ޑ���Z>m���i7��J�J{�~�T�d�%�F���9�Y����j����1+I�V���,
푴�L
N
-��
h��уM��M��7y0�	n�XD'X��<�p��ͫZ�
��y�|��؈~��x�%(�f��&
L
r24�aa����

���� q^�yC�R�V�y�VB$�N!٨Zi&f%�aX���HX�����"���ҫ�/�������ۚ��UW�f�'
�
-
�uw��2߾�@���NMUYa�
��'s(�f#�hﭴÂ�������7h���[TVYs6�ʍ;"���PǨG¡��~^���f�~�sᖘ1}ڸ��t����/X��W0C������
-��K��-.���/@N�XN����5
�4_Z�d�h%|ʟ�J�#c�.d�V��~c��^�DL�����JO�
=��CwX������TYQNF��@������cC=6i�-7n�D�NR�PQe����a�����Ӯ�I�����N u/i��v�lw"�������ڭ���~�J�W���%BcOj���AN�/���������������̼�_����ӽ�2'aQ�H��_�l�O�d�͛�7��4A���5�J=
wn\���p����(7#%.:<���Zcl��FEqj��eQ(g7{ G}��5��n����4��z,�8�����Wo���
���~y.�CX�����v�5���:YR�������dgefb����VRƬ$Ŵ҇,
���
Iم��V�Z�AS��K/���`XN���wXN�����u0^�QTɰ��D'��$�����#X)��&h�>c�e%|o��E���YI����J�Jh�0id��G0�Nd���tyq^&~�y��w [...]
hʑ���*F�Jhb+��0?�
Z����I�;�p�XK�m[6�hn��[I~�BYI��ݴ'�v�h�������͇�C�:lE=
ܘ[	��v�z�n	��p�;�J�M�uէʊr2��D�r=�
�-v�q�~`V�]�l���J�~͑�'���%
-ʪj<�X�;���F�&�e�/����qN�b���V��k�_^���W�+MM+��L�h<+���s�O@���iVx/+=
��V��4Q�4Hk`�?݃E�EY���Ñ!��n�v�f&F�:Z�J��K�de���f	�K G{�i7�ݢ�
-��8�";���F�&�gb=lj�t]hEg�7����n�#�RO��67���,/��H��	�z��!/pF��.��4�8�)�RX�R�s
����
$p�s
-K8�����9={�+1��J�_��1+���L!) 1JJ�VB?RA+��@Z��P�0���
�Jhb+M8+Q[��u�ֵKm��j�*J
�Ӓb�B|ܝ�̷o5�娯SSUV
5� G{Bh7����z��@;gn`X4��M�@�����P�^1������~ +�?z�㽞Nd���Gyq^fj|
���M�ܲI[s��U*J�J�.f%��p�9M�x��$)�p����
r�i����
-��K������iPTW����D
c�*E��3���:jD�@
-�PFa	�,���" a�}�M���(�����0�"��HtX$n���R�5眻�o���*����y��<�s� 
�X�b��

�W� ���8Y	��}��!+ipY�4�J�j%룱��eV����a%Ƈ���Ow��z:��^j��8�Da^VjB����^�6��F��u��f~)����
�
Q
g�������V�YO�fba���
����_T\RZY����.�C����~
c���*;
�q�0�:';K�]�z����U^��|�p�9�z1G<�IK��v�����I��aN]������
�V�O���	+-�@<}ܭ���.�F�"�7���S���.j��2+MB+=�����۷������X[QZR\�������hkA<59���VT��1 
Q���@�?.�
�p�5u-]Ýtn�I�s�N�)��#hw��v���?y�L
-�c����݁;,��f��E��z:�[��ھEo�q�+��|��g[�+�?y�p���r2�����
-���
̩��-�ۻ�����i�VzDZ�FwH���<`\��
-�V�d��Y�U�u��̬쁕���Rq+u��J
�cV���h+} �����-VO���s�JC�J]�m�Mu���9��}���cNm
5�x=�?v�f"�͙ˮ!
�
������3��Z._C����E���
���`]M��SǏ�e��G��y�8X��غYGs����TE����˃�䰜�1�5�KeɊՈ7.}��"�R2����QN�DN�_ 'ɸ���P�8����
��
�Z�V�F�K����V�������/8<:>5+��	+	�>f+U	�t �`
�:���ˬ$�/o��XO�<���������*��Tg;+S8��56�]�b�"bv+�o�3�1~������RH;M�
��0%3����s�v����I�v�
-�{w�}�֍�Ϋ��k*Ο>Q����sp�^WG
�m����.\P�^�TNS���Y�ڨ���u�1�
�%9�O�+�n 9ut������CZ	�����4�`%
-e�n%�H#������ ���NZ	`��Xi��R
a�c�5I� ����V�+��d�{����R at m���d��E��y��[�}f�&�
�V�7�y8�OH;���	�)(*}�2A�/u���8��1=@
;z�O;�¥Ywox]���­�,-).d�'�F����`�h�^_�r̜�
���`���e+׬����7
G׽��мA�� G�O�o��l+
bVBW-�m%0�t���(+��&�JS9�$�:n%���Y��5^c%��i����2+M^+��
���M�ņ��s�O
��JM���������n
�����>�f7��@�y�v��vZ06�ol
ݼB"bӲ�
�K�w��?�v
�cj���
Xi�����rK�� ��

��p"`.\�����
w
�ʧ
��I4'7�`ë�k��D���w "61=[PT\RZY����.�7<��-�J5���+YA�à���|�����;
V�O`}��
�\X/)%���̣��j�V�k��1+}İ�;2+I��ғ_~�
-�
��=�W[/5�V�/).��NK��	������'�c�8hR�>cD;mD;��N(�ؤ�
A��3��u�v]|������������H1�=��D.ܹ".oB�s��h��
-����ޖ�L-�<|Ca�r�;v�LYU]S
��f���!:��/�n���U����%�R<��

-�x�h+M
+Mí��3�������^�$�Vu��F~���YX�Yi�X����7<��fw[sS]e)xk��}ܝv[��44�g�|����?Q�͠iR#i�i3�������oPhd\r��
��r�Z���}wH�=~��Th���:�
w ^��h�W#��e��G��{�8X�
/ܥ��?�/�����S��r"���LyV�6j�@ܘYۻx��Eťd���9uÜ���?�r�蓖i%tՒV�VB���**<�����Q�a%	(���`V+����U�"+��o3"� �����O�
-�����Q[�)�J�M�X��,��&���O��~���2bv'��݊����+�1~,ڡΔ�RSPT��Se�v���3�
��O��=z�Թ
���u���
�
��ҡ
��%�4�D®�����Yi	1C��9�Z��h}�.\�
��{���a*>�g+�SZ�Py�k��v��,l
��I�ʃ9�W7��n`�z���o��1�D�><��,�J�]z�D�sz�]�\o� �
��I�J�V�� �9 YI �T��ԅ�>$��
�Vz%�J�9�I�!���T0+͐YI�_�
-+q���?\�&�ݹĚ��ru��f���p�������N�N
�fba�膶!����g\^�p��JG�
�ؤb����n'�pk+KK��P�ACЅ�5�pu�Յ�����TS��s��4�����Uk�Եt

w~���
7��nj/�^�D9
J9'�J#l+�"+�RVJ �Z{kb�ilXG�ı
&�Jp�}�������t���N��F�u�-�{���0+%+x�)H#b%y��$�獷����!av�j��ٽ\UX

��C;���+F��F��$R�Z�ac3��{�g
h>c
X��കЅ�
g'Ր#��E��z8ہ
��͸p霈� s'��\*K����۲}������O`跇�����hɉ�^��R[3i%خ����6GVB9-��Ŷ���v+	)��D�4�}�JI�9���g�H+]��w���cd���a]䣅V�m� ;=1&��Ƃ޿+dV��V�
-����m�k�=m�
kW�X��ٟ��=���T
Z�
-��t&�B�i��������7(4�hWVŵ
�D;�=��#�!�­��p�����x��y� ډ�p?�p��c<�NZEx�����G��w��

-��K�8R@����^!-aN�
?����v�V�v�gcV26ںY��Y��|h���B(A�-�)f�nR�Ҁ��>�w&�t�ᯱsJ���
Z�X	�F�J�b�4Ef%�@�+����}+�ٝ�
���lf�X
����k���_�c�$�n
�
QB0
���W�

����hW�h�
[8��P�{%���
 .�+�j���~�uu^qxL��ѶqC�F[�(�bő*Z�b(�j]
-.���PEpA�
�M)Hą�E
.�%l�èu�Vkk�:c{�y���5���p��/��y~?��y�pC����4\ٞ�/���tҔi3��N.�>�D����⒲��ںKW�pOx]����J�����Gb���J)	Q at bO�
��NK$Q�5,�fV�b�$;n�"����I�D��2g�W�j��YV��D��'�
�m��b%�V:��e%����������g �L�1v�c�� N�u@��
�igfnaie͢��:�-!Q	���WT�Z�
[�+|��:k�-�W�ϟ�
��A�o䇬�JS��KS�i�
6|��?�1��9{����K��6n
�NL��a��>{���tO����J��Vz�Y���~�(tډ�UP�Z�ԣC+QL#�[㠉bAr��)Mz�^�J��ۦ�3t�`h�7v[�kZI=v���>��{��
:
�����m�g[Z���N�^
���CKJڽ+�
�
h7�<�K�9�y��wf��
*-�W\�����[w�Th�\+�4\Ʌ�
w4�p��;v�(h��p�O
��Ξ�J;� Y9z,���Y��ܽ���c�0�-�<}�§�8���h�'e|`({���������Ct(����I�2C�mI��� _�Jx��g�
3��dɬ�@���[����c+���Vj�7{����������
-z�h�	h%�aB�%�t[I헷�J���H���R���

���
-c��s�
��
F���'��?�zJh7ȀO�D��6H��
���E�&�"펟:��kR{�ZI�p�k���{���@�p
%
wܘQ܍
G"o�mM���d��g�������:�pA�G�%�e���	#��v垾���k�v�2_e3 e&
�ެ��G݇��aA����
V������-<6�
��Y��Y�I�(Y�Y�@s�����x�<��+0H��R����Xn���ŹSǏ
9P�7+-)."xӆ?�kqXho����;f����8�'�G�������7llj��w�����㏏89=;����i�,�ݗ�҈v�
�
��67\�TW[]!4�(j�n��K7�	f	I��6K(����N�53g�\�t���u��F% l��,)���%X~�z���v8.�
��6Z�_R+���E�v{LXP�/�	PfE��gx[��pK���f�l�^�$9��ǣ�"p���,Y�cZ\R;n�-��(�*V�?V➬���ɬԻ�J
��ݷ�j�~$�n\UEYIqa��t|-[��y��\��w��V8Sz.�8٧C��,Ji7�0� ��v�qkhtBJF=������h�
5��j�+�ݹ��p��.g7>}*
����;��\�ԓ��C�'�J;�*-�f�*H�Aa1�;3��
*-G��_m$X��"��VQ��	�;.��R�dž�y�9Sx����'>�R����z�V�=	��J at u�L��{���8�iyd%v�A���
��Z�J�d%�Ld�fL����+1̰��Y�E�n+)~y����[���ۗ���
�5����yْv,İyw8�J�~|0$ڙ��2�yx���l߹kO�G�K�+O�� ��
���#�˂g
ׅo�Ļqc��)i�ZkI�&��|����+�)���:�p� +�R��=~�
��Z�Xꉕ�N
V*9P�
k�
��G��U�I���Q#8��z
�Y�Gpl�\Nc�_�T��ON�R
-T�������Ŭ��x&���޸��R2X	^�Z�n
X���V�rV�2�
\�O/�;SI�޻+5)6bۦ��\d��@'�o},K*�ê�h7���l�4K+\�������䴬��ٙO.^ڵ�>bMi���Sj�`%IíQ6\8J��;�&��+1�~�%
+��]Vi�-���B�]�v������
�JL�'�j`Op[�7o�mף=I���i1�hM��
���J��o�왰%��
�<��%u6���;�Y�C+�I�|���J��
��p8i	�녘F�����X�4Z�����Ë�NO�+fV-G!�R�n+u��[b%���~Ww
�#���bB6��x�_pZkIN��"�
4j8i7����yv@;g���6n	�J�7�Wx�㲊��:���^����#�
�W�@��n~N&
IP �p<��B�eWY.O(KB�di:RI�^iݽ���bwf��+:�%�+
-ׅ��=�m�G�J�c�'B���(.S�X(0�[��o�J,��I�Q�@+ur���NjH��I��W�>
�T��b%~���Ӓ�"`�2+	���������𱛍�K3�9
1����HI������L	8#]��OYR�]_\{�@;c�Ip���kC����


-�پ3sO>� K�
-���$�����\�p�7�,�ᮡ���p�>L����>K�X�ƒPiG"iL��Y�ETj6G�%�f���G��
�<s�g%$x�m違�(��o�
k����n�*md��
��?�
O�S'C�%��D��>+��ĒZ_5���/rtr�Ĝ�����Ϭ��n"���S]�J�y+�kcu��Rn%|��It[I��[`%��-
1�Wp�+�Kiީ��<p6R�
�G �ܔ�v=ڽ',l<�����6��p���ȸ�������D��m������iA��)���pY��E�l��+Y�x�-dO�D�p�
(��ږ%��zʪ�!U��?�J;�*�J��!Q�;ҳ�
-�K��������Ϛ��r�|,I�TZIz�Z�Y�����Pi!���ؑ���g�
���YӅ%)X&9�N���V�% n�&��L��`��J׵���E'bNC��E\�
Vj�y���ҧ��R%�%Vb�
-�T����1*����|[k�B���P���V�ZVc�x9M�p�N
;r� 7;=9>�
8|1��ӗ���]/�8��b��Ys>�[�d���`hT<a�]YEUMݥ˰2�5��"��[��d
73�$(���}�r��s��`Å�K�;�;�8K�kR�Jc"%TZ{�҆� *sj�k�.]ih�J{�^;�c�~X���(<���ߡ�|�RBt(����#ZI�2C�z�9+qI�K 4kj� �ݼ|��Ę�x�äp�K�ڜU�NV��
,�(�LVjRl8X�
�������k�Yip�����Tc7ͻ�3\\FJb��؋�
A�aY�_e�s�
'ڙ�~mc��a�j�����1
*-�'\��EN���_�QU^Y^�I�1�$q
"K4
�
M+��]`��(
�IQ�H�&E��" �h
+��K�� `�R5�L����������{/�\r��?g��>��j���
��enᒔ�bʣ��� <��ɘ�Gj���È�>�R�N��ԓM%��C��ä55�&m�����a�V��]�����$Zp�_Vj�Nb�=z�&-����Gȕ
-6d��h�Y6�3�2��V��֝�z_-�!��-,�A�\=A "��d�"�`�r�F�c
[�h��7���{M��Dȸ,�����������@��k��b.�*O
C�C���Μ ��@�(]_%����$��t*�⽌���	�9w���O |��)�YyAC��9�	3���
h's	n�"�0%�򢭛�3Rb"�!&. �6V��
�`�mc�iy �}��8i��I��&m���J��+
j����Ԧgz.;SS,K�E�x��e���"��2ZI���c+A&�llq���� d��S���V���o���H^��|����2I+��{�K�D�Ɨ��ܧ��^�V��{���e:��)̓ Ζ ��~2Z��DZD׎ƒ���r
-.�J��#>
5�
?`;WO<Xlb�ZJ���� �P
���&i��p
�YM�A�pA�!�A~^n��p�NFa<T�#]
m��0����J+=�
�	�LZoɤ�w�����U���������Jt��+�?#^�qx$OWH��)�p���
�A�Z����-�
<6��8u;x� E�ZF6�<u���K� ����?e���!�^U��r��3h+Ġ�v�ҫ�Jb��p���%�͟=�n�P=]
�͈���0��ю�J�L��^s��V�F�����
��bl��=1�0��]�[��������å$&�Y����a�|<0'H��0��0(D��XzK�cIr&ey��
0p�?
?&S	�
'�"_��	��-�I[USw��,&�5��p��W��Pv`o���<<RTh�����
�
�Z� ́螤����������#
-0�����f���8�� �c�������K�Է[�J�UT��P}4Ou�Vz������ZI������<u�pi�p���3�--��ͥc�7E��p-5G;
����v��ll�-tY�$^��۳���
�����&|�o%�½RObRA��)������OOW�y�ӦL2���06����EcI.!����4t���F�LP¤u��[�"vU��N�oNä��r���O���
p�P}��$9RvF
-$K�M�Iơ9�
"'�C
[Iݓ�[�����`°Q����<|�#b���ld�v���
��J��������UP_l��
�@���Dm.� �
_�_g�93P|��zg+I�ґZI
-��~����
_
�
9�0<��p,��*�ڱ��ZRI�
�����/P

ݼ��BV�\����0���o����v�����Vz�f�^���;�o�6����Iq��
-ow'{
��ɘ�G�X҃�c��d,�q-u�DΤr*A�3��8�<@�â�%��lu-L�����p+щ \	Z	���w�
i翿��J�	�sw�?{���f������
��J,����
S��oh<�0�y��%�� Vgҷ&���UPo���?W�h%0_�Zs2� 1���
N��!�
T�O�Gg+5����J�/_
wB �� 8Ks�X�W׸wK���ve�����@~*YX1�.
��ON���r���ťH���:J;8X{��p5�p�����1���ua^vzJBtx0�e�<[+qH�l,i�%Dgb��M"�TN��f�
\=!V��l�
P���y��8����O�
-Ѣ�WC`|a�1g-cg{
-�� 3C���}{�X�f+q/ޕGcz_p ݏ􇢪���,t���\��z
���CG`��� �v��Q5�_���Q�?DLxp��_ϟ��Fc��Vz�Z�W�b�n����%�2R@邗,&��6eK��X"�
}vMy��H|)	�S=�&O�����s�&����ik�&PD��
����vm�;1����r�夢�dox8
�����I�b"��aF����F���.!/%��JS��Ҍ9�N�Ehd\��̜�����r��gϋH��?'�Ϥ0�h��p�ML��-2)� X
���3�2�'�G.Dd���e�Ƣc:������<
EPhT\�\b e�	`�5�R5^ ^��~$�����%�1��
�U ̄q���@��r��Fg+��K�i%%�=d"s��
~39�Ȑ K���ec�Oo�X�p-�i���v0�t�T��h*(¢��\
-6o۵� �]��
U�N#���>!'��pIЋwAPr��$�G�-�t��XY41�4�]�;u��,t*��T����$8<&!%
��h��l�I�Lݯg�����wE0� ���[�����t����Ł؞��ݸ��9�l��ĭ�֏,�!F�?�T ��
ݼ�a����`j{K�0յ��7nq�T	u��ȡ�ݹ}�o�r�J��3R�[
�V���4����
�q�ԥ�����$K�]G�U���


�Kƒ�x,��
�ݝx���n�$��Ѯ���E�i}0 at 2���T�-��IH�@�� �
9~
-�_J�;����v�}5z4<�pI��k��!(�mݔ���b�R?/W;�Xb*��%��@�I�h�����l*��F�\S	0S���;��
�9R>iѤU�H-h&��#�:\�X{��'*����ua^Vzr|Th������,���F@��T�[I�XjQ+�`�\��M%� l8����;��.
�P�����R� �ĭ�z*�[�~��PuH���%�v·���	S�{�9r� �L[�ߌo2�t����t�VR��"����]����8�l,iki޻��Ѯ	~��T�풩4
-����LB� Ehd\��N�Š�Ϝg��{�����J҅K\��B�w�s��
(�Qa� :��ec����A�
�-]�	y�E��C&l*��TZ�
S	�=+��-�w#f*Aߛ��/��/��gRA�[��x����E���F�
�
.4�Ѭ?�Y���[���8
 ������
�a�� ��,p��׎�ML[��q�6��`j���` $
S�J�����;��w���
-U�v��V2
�6��Vz�Z��x3��E�
.�Li,�w�A5ޭ�ZR*%N�ɥ�a��
Q�J�`��v��KI �k/]�~�V���Ӯ�[�ʅK�B�^S�ݩ�GJ��F��HM��X�t�'��Y�X�7h �%��hm��J	 ���=��<�gc�5��u�
�..+�R��US�E�j*�2IJ�R$QD��:�D�B3��D��6��a�a�����|/������J2���W��s���y�����t�2��Ji0��6o�}�\���
��9�V�J�]r^%���Y��P����"9
ܳ���%_$ϊ��i�
i6a]��G��Y�f��vB�I"��m���3�D
�-;�)��L���s][�7�fķ�H۹���n�l،���"!^�<\F�V�wʟ�c[+i��{�JM4�w���#�q,�]ci>?�����ḻ+�nx:�\KJiבO��uG�0��T��RL%H;�JJ˫N����3 b!ȥ�v��J�����>.\�3 �y%��fg,R
K��B�[�%� ��,Z0<��2�L�d�Jy�7m�	�^QS��w�Uw�IcF�I� [...]
YE{��$/%
`�x0"�`���)iK���9��~����w����ޓ�)����l+�z�
�1��>h�Í��u�4[��"h�8����e�فf�z=>�օ�3!Ϛ�J�V"�$؈�n4�c�.X��rMA�]�x ��v)G �Z��J��?1�~�wߗ[�
 �sf��쌭d��J��Vj�}�Z�
�%.�N
��V\�c)��%���g8
��n�vZ��J�Cp�Sw@�>0�������R3�Hڕ�Xb���N;��-���
�g��QDZTU^ʍ��X���ı,�,ab�0�UI4�6x;2���.Z��)<8Px
-é4�N��[`*
��Ʃ�m��#��]ERH�F�g�Hض� oe�I	�QaA>(�`��듏�<��-��vB�q�ޝlS���
L0�I q��.Y���\q�h9�6��m!ž�]�zB~��H�Y1������b�^�'�Po�
����_y/Z������&��X�'�.?zp��\f,���sw����i�}�:�$)%�hU��	<\��Cl�庸�T
-V�J{�U��]�q�����~B��ח*i�Y�椚���D���g��
W���lmMexe�&v,�Xr�p�E�#��E{w��
p�v&���x���E�<u�����_�� ��Oڧ*�Vӭ�)�F��Y�x��X~�w�6����������Y�d��Yӣ�A�q���H
����|���C�Lhf+��D8�Ot
K{��.�0M1�f�KM�so(����H�����{
��V�J*W[��˥
�>Yy��ޝ[6��J�P��<\5��Z�w�JڊH'	
��F1��X�<vXKi)0�����yy0�mjDj�3X�/���N8���wPA�Ʀ�m�	�<}�C�~
7k.3� 혩��i����.�Nڿ�y
���w�:1����y8�V�c)����
(���
-D�˱͐͠�ESSJrxJ�a�T:}�ۺ��Z������fҦ��J�DW�W5Gq���n�8
�4��
X�����
��g�VR�%�[��SC.�z`�
h������
-�N����"w��-_�;|
�¥z.��)�{�n*)��C�J�B��
�K� �<;�v�
�\�wik����tJ<���Z8:p�t���X�*'�ٸ>OKaA��a,�F�P���g��Z��ԗ��� ��@K��F�r��0)xJI����T�Ʃt�������M6
�,!.\0;z��xME�!a,��X����ci�Pk��	��2�Z�����C7t�qo
�XxH�a��I�
����S	L�
e�ꤣF�+Im3iI}
�J(;
+��Y��ę�"B��=ȘEj��#d������W�T2$� 0"�6b��8��	p�̕y`�]\�Ձ+�k�����ިv��@7�$ݼ�hm��%
�a1N	��4z
Z��1
�T��J�����+��J�d�F�f�
	8�n�=8� ��c))aztx�do���6V����5���W|>�!�Z2�zշ�JD�"	n>x����ȱ���C#�����Lڽ����	�
]tz o���I�W(��ci;��\~,A����p��E��ux'��

�Ekd��nim���C,�J9y��yJ
L���e������{I�H�F�^����>��$�Μ:q��~���E
�b���H �<��ǔ@NYCv,)ʢG+�S�C
-$���Y��
��b�}

7+�$za1آ���4�&�҃G?���s+�����j��vo�\�&g��s�S���i5
��ޠ�B������l%u٦���[H�&i%	�=z@
B�0���XZ�l��ݑa�	w��-�L�z���j�	��䭢���h�A)u!�dlJ
�i��拊�O���:��$SI�vzĝ.�����2(f�|,�O���
-�l�������v6(Z_Sc5���fr����ݤO?3
����A�1x��n*aƠ�������ծ�<�e�ŤA$&�_H⬑������
��8��I��uv��-ۗOd!��
K��O%���
ȯ~�8
����79$l^jz֪����d�޼-$�Sa�
-ǖ_�<��pi�#Ԓ#l+.X�2s1VsdX
F�Q��ቚIZI<A[+ɿ�z���h�1����_P8��Tc)�p�T��
l�����1A����j�Z�XJ*>t��Q.��}'�E�̘��pqfv�
%�TB�Ѵ{ħ�/�SS�M�蠽�D��'q
-��Xځc);s����3b" �}�K
w���e(K�Ek1�Ԕ:I���
�
�Ǹyz�MrgၝJ1h)��',<0:iu��FRh&��5�����Lس��(UVz�93b��L�C�s���B��
�,�F߱��7|+s�< ���=,rZ|bJZƊ�u0M�
>Vy�s.�_Y�sE5�VR9S����j�VB�-�h�T��1%1~Zdh ���H��%�
-pSw�Jjk����da�XI��I��_�t,��r��noO�1Ύ`�A����zA-uk�Zb�N��:	�$ �"��`����	I)iK�V�-����R
�J�8�8�Ԥ��
V��+�.�@��t�R!��R`�����!���=��8;�ۂh��&
-��W���B�h)�|$������
D$������g�̃�8�8>ژĚi��
c+"(
*�� �����}	��r��!�
"EED���bc�g�:u�1ub�LǶ�6�ϻ�����}��C"�?�����<�|>�/0R
�����;S�UIn9��^�UL#X�+
g��]�Bgu	�^_�~���%���!5�:B�e������
[0ш�4�>X%�'��|2>��:��&�_�<���0R3�
-˪���X�1g�'��$��[	Å�L���o�
-#0�"d�C]mM
���h	�a��̐vQ_dG�>Ϗ�L
���Wޑ�^GI���� >Hv�dYz�ϕ%�vZ�k*J
-r3Rq��dr�����
$;Mu��i��ii,�$d
;RJ�!�gϙ�E�e+
�ݽ��#b�o��TTV�����+�JO��$�?��F"$e�Q�~	�,�BP��e��-K�%�'Ą�y�9; ��,!\��������Ci�E�a��
V��Fŋ�����
-��|RJ���I/i�XL#Ԓ 8<�'��7_Cn��y��\WUV���
-�!��s��
$=8)(
-sԠ�~�m�d�,M
��H)qU食M��
<74���wv�����_
o�������7n�U�̚:
-�+��i�/����F#�e���E���V���n��w�D��~�OQ Ǘ%H4g���
-T]^����rwh������������tu��i��#�Nj��pcV���Rz���������hjA_
���
�o`Xt|RjFn�ݮ�Ξ�㒪$K�WJ��\I�ըؿ���@

s�ҲY���y.K�I�Qa�>�!KX[�Ҙ,!Xڔ��mť��C�Fkhj�������?$"6�
��� �JÂ��D���0���D]�܎������ �������Ϸ�o�ڀ���������Eh9��Ng�,[�&ɖ%�H����
H�Z
�̗�=|��&$��l.���ֺR��s�h���� C��nhVB����Ȼ�/��^�%�d�0
��& d���d^y'V�����G��$��YI8�,�e��:8 ���2Q���rwq�]naj��4���Yt-�m]"Y�a7�*%uM��z�\��	��KLN��/�����q���$��K�*�iG��k+��.�5>K
1�{��g|Y�w��5�,��
�ػggmUYѦ�����o�4KS#��~9m��1�Ʈ�J�4I %Q�501G����7(<z�:
J*j��a�U��a�C��V"y���Ǐ�]�<x�Ա>�zpT ���d�A��]
m��c&CS��'Pd�����pe)��^P�z}��s
=}
k;�k~��)���U����
9q���-菟� {Af 9)V�)��
�F�Cr:رww}���| [...]
-�ґ�����������LH��=?�4
C��-����қڙLx �D6Z���fV6vN�V��F"�!<�W�Q��*ѭDݑTI�%
��h���H��g�̂��� ������njm\d��窕v�pQz
��n0��e��%UI��C�3����^�h	������; 4jͺ
Y��˷}���
��ɳw�����4�ʻ�=��b>
���
���Ԥ����x�hɢ��,ӑ���[���Jʝ�R�P�'�%��������
��P���|��pB�>�W9��X���-�l���o��0���K'a։�4���,u
H��
<,:>)5=g��u
M��
��Hx�������X�T'�ffxm-q��%D/]<{�����M
u��[6礧���
-
�������,���7�W���kIR�~��(���A�5�F�������~c����;[ڻIƒ��$k%���B�G�&���.�ϳ���b�
�G��Q�
M����� �����
jY�hI9���	�r�*14�х$`�
p

����QQ�c7��4�L
-�37�<�Ff%Q]����@?�@uyQ
x96�i�+�,О;G
�E�ʊ�8n%�+o�J4�Q�$6����V��ҿ%e��&w�q���0/s���؈`o';kK3���%m�p-��F'�
�:VJ�fDR��1W�S��������J����q��i��EeU�p{�݇��8
�-�	��fOډ���I	��nFa%zY����������ޱ���hS�����Ȑ oW���Z���,�Fw�*<(����Bx��

-�^�.5#�`�V�M�Px��N������rUI,%^IC�G�%-ɯ�lΊYڃ�w1�qSؽ��朴�D�� e'��P��uu�,�a��e�=�,)�cB)��/���J at sCH�@/��H�yFnai�Wgϑ�p�M�ܻ���o%�^f'�"�у?ޅ/�
��z�ۚ�ʠ-�$Ɔ�x���M
qY$��Hy�J2��u+�:���I���_�?
AY����W��t�
���m�ܝ���&:<��������h�g�
��a�!-�B�%j]�Qb9�d
Z
/�錔� )A76���sr�"��̼’���]�m���!�]�v

�EBYډ�.q�L��e��֒hk��t�
-���v�k�4^QR��q<&<���
-���h)^�:�%w+��ix at RR4�%L������6%=;��
�goGw�8<�������A��$Nb4����D񒒽���i
-O
?zȖ��#�5���'Hs���45���=OC}�L�,	�4Q�%#�����3w\�4� 
- at UZ��O`��Y���!4����r��0ϟ��x���Y���Jd[T �♓Gu�kj��,-�ION�	
�q���b=��|WDi	����0n%�+o�JR摸�<��{Ih����͗�Ǐ
��}
r
� ���j�ʊ��R��E��z�9;�XfabZ��GjI�8��F'&�}�Ih'� �8ה@J�
@JFf�ֶ�.�^~���R3r6o�Z]װ���@o��3/_E[�T%	����37Y�*�,3�\K2Y�%E�^
�p������=;�ˋ�s�S��‚�K��#�$SqG�%ě��ܔ�F;_�h�\�цD�&&!
K+��76�u��
;un��A��'�F��pf����յ��Q��$,ѨX���*���b��HQDA�"�""�)"U��������"�&�%ƞ��flQ!7w�Z��}�LJ��9� ��:�}���R�$�v�����6��\���� ��tu޲R�b�\S#�4iY�ĖX~&�8�cL��̒0P�T�Q�&���-Z������{?�Z| [...]
Wk/�� ��LK��
-
�������`��ڸѪX���⪍L�Ș���S'
��(�����q���{|G�&�����<Ԁ<܆�y����&��$�]�&�Dz��Lla��$���8�T�P��gN�g��A�AW����r��E泍�,�
N�i
$�I�)`��j�I�ԁ/��v�R_�JC�*a���_�|
��m;w�= ����q�x�i,��7�b�n��9��Z�a�Y��42e�DANzr|dH��t+&�
�'�9ToЀ~�l��Q����4�$Lp�VB�VpI�,���]��P	ޝޝ
��c�vG{[���-Λm2c��D&��z3X�#�Qo��ӖL�1I��
-�2�F�?i�������%+֮�s@�{ 0$2��c ��.����Ĵ�_��|��k�J�,%

��G�
�Z(K�K�ׁ����d���C��ݽ��f�m
-
m(�
KJW62M��iPry��6ڡ�F��f#$h�PxtB�Ѭ�’��(�
���C
yP���(�L��?
���	j�%~B�ް���
-�������v��Mʂ�3QY�E,u���
K�U�_~dP�:@
�W�&�CvA?]�������D )-+����U|��Y
`
�� �
P_�@%�����2���r\D��>O���@y�,*�uő�F���J�P��Vrx0i�>y��G
���=�w�f��E���x��ܶe���e�̛m<c�p�>�*D
n��K��0�E�3	��]�n��`������
��+�M�Ψ��1����E'�P�5܂�#F��vɮ�d��G�e�K��+��%t��k��Ζ�,��>��
��ۃ�j�І�X���L��j���I��C7��
-��a����>�C�QqIG2�
?��p��J%�8&�@z%
�L�Kt]jynʩ���'LW�v���s�EyYiI����\
�m֭�\f�҈!�M}H�uѡ��:.������:c����Q>��J&P�����sغ�c�o`hT|Jz�z �ם{�b<�㫙yo���o�������K�����A �[
�*.Y8w�Ѵ��IS�H'D��S�}��'*��Y �o���$ʾ���
>>x�S�=��y��sgN
�<����m�����!���26��e�~�I_t�̛�KR.�Sʵ!�����I��+ at i:@i�B��-m�l��
-
F<���t��K��^o��������UI�I2m�t�w�55yYz
e	m�:�ޙS'��f�%�G���ȇ6a,����%Q]��n`�U�>��%���f�F댍�`Hd��Ԍ�����ʪ�+�7P
���ʪ�N�+J,�X"�B
�LL,�$X҂J�7��Akx��t����N�(�IOI�
<��a��5��eiЀ~�,�-t�\��R��ޟ��N
.x��X�F�g�9
��Zk�.WO���#��ǡ�^����	�At�^��f꽕�O]��<�D��\��r��P��;�6�-�5�1m��ñ(��=Q���mT�+��J�~e�@�&^씳O��Ҳ���E�9驉�!��tuqrذ~�ʥ_ϗ`i `�1�.�z��ă��djO
�$��<����	"H��
�� �e�,m6n޶��ˇW�T�*X����ͪ��ƶ)eM$A$]��`I�,=��6~�F�������ₜ��ñ�!�⡙͚i8m򄱣h,uW�Y�wq	zT(%J� �A
��O�j`d*4��<�ц�$�
��+,)y��ڀ��C��@%��p&1DzIL|_"��K*�e��/
 
u5Ug�J
-s!�c#��}�\�IYZ–���
z�x}u{b6w���c�C��DOM
�������U	
���	SDU���L .޼��
�)<9z��G��_���w*� e��+�O��S��}��]��m֮�X`f�Eq�0B�^<�����ڨ�PI�&v�8 �!G@�[v�ԳO�����O�Ļ����N��e
MI�	�ݳ{���&;.�X,�
6���qD�e\� � �S�B��$ֿ1�����۷��Ab(-X�l�:�
����y�;�)x�I����k�z ��p���J(�M�7�y��
��hK%yY�����?��c�56\��D\"/;=%1&B�՚K`h�3
���D*.=3
��K���!�¨h&},�2'J��h�I���F��4���4�v������A
�<<�����?�k�@I`!�
8ϙ��$d⸤Kj��G�/�z�SDH�--��>�
z���V;�,M
;j���
��

V����P?
���!1��"����r����A
��٠�BUھ
��PXtbj����W���ݹG6��8�-P��&֙��7�L���q�5�}�
cC����Ě�#���J���D3I ��kM4�����d����nߨ���
:u�xnfZr|tX��~o���
7�b�-běŒ
b�1o�K�9�f�$�h���Om�H��L�u��g�>|�qP��PZk�����u�^߃�1�����]�|�:I�{���7�eU�Cc��Ut�*�*�[�7�/�*Kl�=�.�\�:��w�����
�
͞�9`ɀ��_̿/��+��Kh��"&a.vb�/��(I-dqiye&�-�v��hqע*�ר����$�g�!hq��N,���n
�i?���R}��s,#51&<�o�'[��.2�h�6y����`8�@Y X��c������C	��O����?q�t#S�*9AU�
����Wx������
�)^B�7�@I�JϘo����)���'�G�xR�n�?a���/����=��sf縬�$��M	%�K)��'��HBQ*�jJ��"$�h0&�ed�)��~�
��$���&��:����g�g��Vk����]k�Y������|?���J��@%���T�𨤀-<�G?�]��L
-.5K�,�ݍ�TQ^���
����e���<�?5iGlTxh��5�˗(�dmiާ7Y�Xq
Y�)�ă�)=��
IJ&��Ӈ���è���);�aN���g�]����?08lkt����	�WHڮ��vj�ċ�\d�GEeU�o���R��h�-�A�����
�F���_L,9
X��03��ۙS\�K��D�Ĩt�9��hsF�'-�5ڼ��Ew�!q�W	Y��۷�ZTIN%J�(&!��D����<�	�D�$�z,�R�pS$���
Pj��dHMJ�YZ��4�k�������mm�,��{���S�eX�s�#��^6
-�&hŠGB��
޼��u;T%�I�Uڄ���/=3�ԙ�9y7��4�K�^�.C�*���8ٗ��f����$�\8����
���pΌ�
���F7�7z3�>*i�R=���I���˩�lb`�
�>-XR/Klw�7t� /��wߞ<~$=-%1!&2<d��դ�x,��37%XŠ����&�L:�N��ˑD��M�z8�J�J�)M�PZ�@PXD��
�S�gH��.�A�����R%Q�E�NZ
l1����h��gc�$�ү–��5.l�2���w�n�]&�eJ��[�����X.ǒ��T�Zk�L�f<HAu�Gƃ��@i���D�Ңe+W��@�6y����hs�Q�-}D�C�b<p�Q=�~S�
��$�K�db\���X�A����›�� ���{
f_ at Y�
%�Ҍ�ܜGskާ���
K���*�����������8���
���a�MEUZIU)>1eƱ�a	\�Zx�
9
�
��X*	H���^ND�����H�ĸ��MkV.[0{�$�����%Z�����^F��6S�C��(�F
AR
>o�!����S;ɕ�ڠqw���v���KΞ>�#����mK��pKNpI��������uI�KR�5��$"�H���o�u8��{�1���7�n��p�֬
-
��MHJI;�)N�0��S\��1@��^�TI
���|��֊�A�b��$�ڣ�b

�xn�<�M֭Z�a�ؒ���(n��ݸ�ڵ��JYS����6�x�g��
�d7�@i� %������F{�mIyE���d��f!�A;��A��қ7�$@��ŋ��y��D��Eu��X��a��h �T�/܇p�d����$K��ދ�zM�tw
�4t�
L<X
F�0�:Q,��t�����%@���%(�����N
u� �a#���>fͧ����Ty��K������iwIe��?
��I����+�B�O<q,#m���[@}���<ǻ �mm�����ѭKg��?m׶��ћ��'RI�5I;� 	y�?�h"XW�����*�|w�
��L��pD��|�����&��j�f���
�m���K�7���.q\���Ȥ���?j�!�5�Pu�u
��p��(YZ�HeP��`�r�����Ș��=i�G�	s�_�{-�\�vZTI%&J�|��P�����D,��5x6��J���Bh��жn��v��e���bXB�,��Q���K�-!E��aI)�P��C/6
D(�x��������E0

�x Fˍ՘tCI%dX�ٳgO������P��bImjj���ڳ*�
N�u���gNee��K�)�҂�3�L
�kokceaj�Ө�KL�Z�
-�(JJ�1(⫷��7?�	�s��\�*}}�,Q�[��e��_�W�N(/i�i'������A _d�
�-,h�ߊ��fN�8�y���@%3c�n]��Z�r��L�?�J��D�D�T->�L� %.5KrY"�#rCe�0���(�r��s٧��f
ػ{g\��p"��,�
�G���!�%�K
-0њkTϵh!�984ʤ���P�:��#�����f� ,;g	J� ��-�1���;���q�W	{Pc۩RI����2�e�
��/�dO%M���n���U)�TZp�Z?��
K*���%edZBS��$N��t�Fƃ�8
0�)����FD��HJ�/mN^����� q�
㡖�%#�g�&(�	LB$=}ZUU���d"\B_"�$ǒ�����T�A�-�l.�,
�d��{Ѽ��'y�9�
�k��
V�R{����Nh�=���%Њ%	JF ����m퇌�2���KV���NT	��d�9P�k7q	��
O�\�n*5p}^# ��5�����de
ܻ;!fk(-t/,t�!��Y��66�j�� nצ5)t��i��C%uPbL��
B&��ZuX�M�xY��n�v�xD7������<�yh��
�i�Q,yM�4a��1#�l7��ڒV
ꒁ��qbɉ-GkNvZZ��-EI�D��)e�^��bיY��0t�(gWw��\���u �m_��J�{ ���+We
~���H�4�P���d���#Xl5���� [�X��n^I�݇�
-�.��%Aha��
�\��⊙�.��(�ڨFִ���
-LBQ2��+?

�М�)� �
-
��MHLaF����m�0
%����dP�E(���B&�H����񁿈��(L/Q� ������
-U�$8�j��'���ށZ˽�diW\tD��u�|�.�����q� 
�/8�1���
[
-�K����R
������F�������f��#�7�I�g�[��& x�6I�.��bs�R=����5A�ib�����a,ݻUH-�������!����
�|1��u4W�B�S*}�L��J�*�P"C�2	n
-��ȃ�L���Ӵ�
۠�ݯ��./�#�{��Z~n΅���R����4y�xW�]�D���Vp���՜�&
����'B�1$��cL��ME	�di�o���#B�͝,p
-�
��� ���Y���]��W�:�i>�TI�8���F�d�"����VbI7�TeI*>�R6r�i-=
B���
����B�ׂS\}!2�qi�F���ǃBhEQ(���������Ș�D0Z���h˨��x��{���P=#	J5J"�� �***
�M &�`�pI’<6
T"�������U���p�ݢ�t��R�M��_._2֌)ǹ�

o�5���
K�K�i�9 �|�r(
r�4���s�ל�K}V�h�?�e�c����̋�1�d#Q�cWa2-D��QHc�0
#&;�%K�Ȓ%[d
c�$RR
-�i,�Ƙ�����u��}���n1�9�E׋���������CU)��R�ehr�JT��3�vZ�*I�9�Z�X"}�u��Ջ駎
޿{���+��0��������.�v��0�ֹ�F��R�㢒�{X{8��A��#@z��	����'��&WU,�Z���D���,
��K0�R&�ށ
�����>��N�쇐��uI�%,9Lr��qUu^�x�1M�������7��]a�[X��hc���eG�4��fæ�I{�:�v�܅�J8�=~�&���*����~���|2�f��L
�$,�Ym�UG�w�-��-�e넶�'��\�%ow��CKP��Bf��
Xd
Ց�"�������b�
&��@s�4�F����b�����@czURA�
%¤B�����������TS*	�\JL��̛׸,mݸd���f�L�
	��t��0h@�>�fݻHXj��ϛ�\�������/
8����i���6v�`����0y��؅?��z�B���>,,f�!�FuTb�8~+ǒ$�>O�����E��b�"‚|=�����knڭS{��F�M�4����
��'�T�x�T!�B���
aҳg%%%O��%�p�!�$]�1�*T��y.�B���d�����gO
?�"4
�RX�H_O7'GVq�L�.�=a�5�K���D&Ztu�S�}�a�S�H�Θ&�L���C���z���m���`��Ý�i�!�bE(��8�~����T�*U%�I�S�-e���,�
���U�[�X��
� �=)&��C۷k���uڢ�
K��%;���
-�5jAJ#k�Y
�S��U}��B+����.�M{J�s
-��4��e��%q<��Q%5��N���I�Hyy�����@��Xz���T�eI
-���<A�%�޾��5�̜S&F�
5�����a���~"�Z�RhL�8��Ta�DPOf��Mq�P�����������!ᑓbf~�`������~��
]�g^�I%

SI,!�ɼ
�J^��q&-5eoRb���Dž��;

b����i׎�۶22lF�ԀP	�\�T�ǩ$l<�
%"J�yIO�>��ĸ����~5��;���i)��ˁ+�q����gN
N��ذ� _/7g^q�fL���c\R��
�9ʦJ��[]���ȥ	L����
�0������-�� �䃩�O�͸�;�_�9��v�@I\
e�bK�C4I\����\'��A%��q��ӡ["��,r
���e,�{{���+eֶM+(ACY���i>eT
-�mnȃ�^��"Ai�%�������R�J:PbLz D����s
�q�~.�I�%K��Дߏ*�$:�Y
L�R���
-#o������EO��;;����X2i�ʈ$B����g�L�
��r4l�?��AS��P �:���f[DԔ��K��lؼ}�G�Z�H��R�R5TRИ�ڿ� �>q���
[6�^�d���'��>ؿO�
]�j׶U��͚6n�ߠ�^]��B���?E%��T	�	�\9)@��Ǐ�郟��0a�I��JzV�\r�pD��
-�ss�)�ΝI;v��KS'�6*����e`	*�_��T�h�q.��MZkND}��E�
m982�sXt���ԐImLp3Q�>�������?0d
/;�R���� ��S(��3�������E�-�R&��\x�"
\�<����
-��Y,im	
-��v���w��?�])c)<4����Չ`	�W�/۶F._��I_������ID��$0��jG�b�a0:9��h���3�h�hm�P�C��c�} �ݻ��ݽ{��\�Œ�,U��[V�<�,�߽cK��q�̝3i|xh�����0��
-QX	K-
Q�$.��N'
==�(hDFz��J�C

�ݽG���0y�,Xm�W�߸5i�8��
jUz���J�����cR�Y��_�,>�
q��e��Ϟ
=~�(/���6B�7�>*}*S�_�T�0T�����uN����'=!D***z�~(F0Q.Q]�j�k�,������ϰ�
��˾}��/�/�;�vN�R����q�G�yӊ�h�u	;�p�e��|}0a͑�#�Ś��W�	��gwƚNf�o&Jd����y��

-
1Q����J)G��<{��_a����Ӟ��S~X*�eِ�+C�E =�O�^�Ti�2����;Ehp;�k�vHK���#}<ݜ

lm�����dԒ;�:�z�U�UCڈRRFƭڴeA�����g5�-���ENh����8��q	��6�W�+/WmU�T�@�(� I�w�de݆���u�`�]* ]"G%c��o�n:B=c�I�T at e	�����)�vn۴au��E��̘���
-�/dҽ+lkc#I`�44�3��(��
-w��M��=��P����13�.X
�bm��0T�q�JE�*���T�JJ��X
3��MZ燒wm۸neܢy��M�
����h7h at _
�n�:h�y-�>��?
����%d!Raaa<�����rI�%�*j�%qw�¸�w�6\�K��'X��0nL,o�8��֨K�h�!�ZK%G[��
g�|_�����
ID2ɘ2	��+��yo�oH�
wq��

��8y/;�c'� ����sr�U\����F���[D�,r��nnK|.��Բ����2�O��M����)Q��a��^��ù�.I\2VDF�W$&�&��UCjIT�
�x@&����C�Ћ6��Nt<�G at N3�P:�
-F��4��Ѿ�*�y#B	.���Q�Cd 	���{���L��ܼ�K�%��+��U/KU&K7~��q�$h잤č�V-_�0v���a���2,�!X�L�Dt��	�%0�0�4T炣 �M@<�C�.�L9��ܼ�C�#��~;g����7lڶs_
-�ҕk7eU*�T���$�k�'Ņ�y9w2o\��q&-5eoR"��S�ƅ�z8����47�ک�Ik#C��M�7��ǩ�I-�>*)TI�RYY)�R1ARA�Cx��俀& ��%��+5�� ySJX��%
�
�)7

o�R|
�ҷ1�#��s�t	f^O�8�%���8�X��qU�ȿK at b=g���,���
�m/ڵj�1����1j5jq at dvD�q@�#
-�$ 
-
-N�
�ш�A#**Ȍ(�́�5[�����~߷�?��b���
��Nj�������L@L2�dfn1ޒw����EK��׬��
e.A�,A)'�TY�^�Ǣ��m��'��
��(��8b���P �������(�7��
���ZYiqAnvֵ+_�?-b)"4����mɢ�RfcYf����K�`�Ȕ��
���$ �ND&��H
�'Osr&yp�fD(���%@�
A�BI�����E�z@��Ē����Ҥm���*
���ݧSVVd��.�\�cIȭ3cI�RB6�Xb�!�ҥs�i�ɇ��DE�n����u6��x���n:ؘX�_{�f�
-�G�u�����!C?iFP���:g�¥0R7z�m�ܵ'.!��@���i��c��r���yY�O\��T"l V=�WR ?���'R���Fo�:_ u�`mia6b�`����1��?����J�6�Ԓ�*��O�$�V�m��6!�����$�ߏ�] *��/�����QS+4����x�RdXp���h�Xq�.|.M
?V�%���Z񚃛W�7
�
�#|ڳ�$��D$�0�wT
��Ÿ	�m
��@�/]�����/�n�
��u�R!�:��FK
-�T��r�<��mo��X$R
S���
�\��r�EcI��d��Z
�K�w"�|�<�z�X�x������l�"���s.1��-OL�L~z�Qqy`��-g
%���a���\
<�	J{P��y��E�
���Y�"�ò�Q1n#�
=lkmnjl����&$ݿWZz�Ni�� �����KMͭm�s����(g��X�ᐝ�y�"��#I��v�
	��YX�Xr�X2�x�p�D 
-�?x�q�@av�,zʮ
��+hol��2��� Pr��p���Z���ۣb
JNMK�v3'����R�z*�P���7�D|�H�6l����쬫��ӎ&��F��m�\���<�)vT�CM����� ��[ݨλ���RQ)Q���T�'y�R�D���L$56644h4�OCc�6�ĥgϔV�X"
-���A��

DZt*-5�

����c�
��qv"����
eƸ4ؘJN�9�Z����N~���+ 	kn]3b����L��mcCi�l�O��\�n�&���^v�
	J�u�F�䢣�{Lj(	L�ِ041Y�TԺ��{^o��<�^v�Bh0�;��2�\:�$b)n/`i[��Ϧ
�V�\�י�%�	�,d\�P
���%&D�::Q���Ĥ1�P���Ǐ�t������E�}��$B�]����Ru0	�t�����Oqq�] p����^�Xµ��g�lW��ޱ����c	,�R�=���/AN
KI�ۻkGX������+�-�Ok�
"S�k�y��Ufv�v���otU��N��?�r��
J6�H����`��㟃�efe���s���
���J�̿�2� �_\
�m���?fGX���:���Ξ1��j�����X��:�>�}�~6��/Y�FT��Az��_?���LB$i4���uuu�/����\R������XQ�j��̱� 4
�
�\���cw�'�Ɗ[��Ҵ����K��0	d���lz�����{aɱ�#"aω3�d���#FQ�YZ���m�]��z���}��m߹�.��g'��ɖRB	�#v�
�+����>(q_�p �F&
0e�8���t@��P鿺�&��j�ɋ�,�ZJ ,Em����u�ݗK�v��	8q9������&$�lB [...]
ܢ1�1�!&��X��z�d!d ��7�7|���Sf̚PZ�P�
���{o|b
-l��_^�/.��
�3�T�
�G�_

n�|�0|���3'�
>�m��g�Z��
]��;�L
;z��!�~�w����y[�~�E�_�J�
��8�����kcPj� �jkkk����LЀ���c�scI��p���n�RÉXʸp�ԉc)I�م��~���R�K�gN��H
Ǹ�%�J�9�9(:�ttz)��:��jn
�75��$k;���f�r��C��ekp�����q���b�IP*��lB��~�D~�CRoX@��ai’0�,�l��l�gR�>��?�Bk����ᄸ}1Q�a�[�l��K��\r���d9
��{i�)m\L��MH��}l ��$��If��&XY�BPN�\\�/Z����i�4�^�hU����?PR���O������
�TX����{�Nn^^~q��Ae��%|Qt�(��Ñ�A>��qƖ�+�퐕y���S`
`x 
�~
K
\]p��B"8�8��5�_Yb��N�@
-La(���2a������%7�5�^��a0R�m�t��͜<x�(m�涎�RTR�Cx�c���-�Ϲ��q��I�{�#B��7�fm�`mia6b��A���c����/�D*���J�)*��ī��1	�T]]E���T�\�,}�˱�ΰ�U��p�����$
:�����V�K�N�q�6�%�o6���cd"4����E�½b�ːI$
�7\��F�23gL���<�[J(�~�!��1���
=New���z%���C���?#Jl(�����€����%�F��}*�KJ����j*�X:����É��b�#�C��6���r��kgm%pIY?�L��22))�*y�A�I1&��CP3�PZ�F.	�<'�RN~,�J\�%�E��:&}P��՝
�c���ʊ���$ RNv�m:��9wr�Kwa.U���O�yU:�M�
/Ē���%�Riq��[ׯf\8s�#IA"B�X��hg��H��N�	b�c�2�ۗG at w����v�=(��y
J>� [...]
-:��@��+@�ғ��_fAU�go{��f:�N�&&&&5�5.���h\Pq�%�(
-⊢b4�KШ(("
-��z�/�E<�
@"�T1��1ic�>������d&S/�.2r�s������ǒ�ʵ4>�;�X*��LOI�;y"������~��|H�>�9�:����!��0�pU��谸��p\Tu���
�׎�#j9�>�H]	I�$n:�Ic�M��aK]G|�΀���!�Ǣb��lB韶�
(=�%Z
�:����M����67���.�X�H��S�Bk��,遥ب�����;�nZ�/g��:�e�󸱣G
-.�GdB�$0�c�QdRffOǎ�vЎ��ݤ�
�F��$5w�B��U�x

-	�s"(�+PjeQa(=y<آ���(]��To��2���JK�
����¢"������t�Z��3#�e��'Pe��W�(�&���2L<}ZR|4R	ڷ[��
,�4vԈ�K}�K�,��E
5�ٙW'Г`Q9�iMh�7Ci�6���P쁄d]&.�t���|�
-��6q
�E�T*� �Q���V�p-԰� [�y�m�W.������<v�p��}zv�����;�V�ү_P�����*Jm�}2���

��uuu&�Q_�pAp�u	h�%鐬&�K�4���h�Q��Q������������°���6�[�R�w�dg�%*���Y� ��*�M�&T
���C�# �Ĩ�d$����s@M�0i*�o!J��|B|���B�FF�&$�ed�)Pj���)H�������~T�N���%���QX�
�Q���V���G=v�[*iR�n�{������%����<z���ݻ�mްn�JEq�M�4-�\rT"�Q��&Ƒ�n
U'���T/Nj3�1N�'N�*��2�����`��%+��3
l!Ac*"*����U���
E���yx��

-�
�R��J蒊%�0mꄱ\�'��G�r#���J�PW��.%�MM���
;|PŒ��9XwS&Np��0�Qp��⯂Lj�ɀ"�c�!1i�P��'O�$���^����k�t�����4}N���olj�?��v_�J��x�_X��2��Y���2�k�g�
yY�����Ѓ{wmٰ�w�B��Ǐ1t�C�
�����������OT�\�ү^P鹡�F���λ}����t�� ����S[
4�7P�.]�λ�
�o��l�n�p_�X2�X��HMJ����}˧�K��̛�>�u�7��%7đַ
-&����t8/:0z:I���7�?�����ԋ�D��M7z,�DU�6�{�%t
�����D
��;���k�S�dJ�y=͡Ģ$3	�{[��X��f�c�I%[�$��8y�rK�*�r�Sq�Ǐ
9|p��϶
�]���s
Jp�T� |�
�"2�Ĥ�ԤUg���fQ��� �V0�y��tW��
�
�xX���m�x��=��F9��>K����C�z\�C�LTDGRT�O��TW[}
�tL�rss������/ ���0�L,I�C��X�f/�,�[s������%�yY�)�b��i��Hh)L�.�(p�/������D�#g���8b�p���T��y
-Y�'��?(������o(�
�o�H���m�����>���*�I
��e��M����\}Zb���Á{vl�d�r�9\�����uy��^}�/��K�P�7/��P��E	U���{����iB�I�5��U⩮���KԀ�W���`��w�]��f���Ls,���2�hy���<`�ҚU+��p�a{
_E%G�[��Ts8-�-
��ʎ���#���N
G�'�7�H��Hr
�CS����>w>�o���m;w� ;v�d\b�N��_���M���ߎ4>J�-�_%i,�^��%���h�c�L.p(-K�Qnm,Kl���Q�K+X��RNfzJb��a��?�*���l���5\��
(2JL��
����,���U�
-�o��DRZ0i��4�Y�s�(���߸e�g{�񀜲9�slJM���S
�nNv�$��A� %#�R��0?/';+S��gd���Y �T
]����
�A��<]��~2Yb}�\�LKqAn&9�K��/��D\�M��;����<x'(Yȏ�A7	IBT�I�Ǝ��gO�I��A�Rxdt\"��WTr�ˆ7����u�P�B��Eg�7���k�*�p�G��ؾqݪe��g��8;}4\�y�Ν^{�e*�~��w(sM������JV?fZ�_S�Qϴ^�)}��POL�:o4���h<2�.4�.)XR/ZӼ�m�o��϶���R%c)��7U\Hp�^�%���q^�
�Dɍ�W�`r�Ʉ��C����,�+�
Fû��� �����n�`�·�7�Ҟ}��GF�`�g�(e'��%��%M�}o�[�R�˪��_y.T�[�"�'�R���-�
Ӫ�+.���u,<4�w���
���p�
�
R�DON��P��
������#��’
t
<t���˴�P��^"(��΀��A!a'N�c<�9U�C���@�'��
�� C�
-�c�RQ����Hץѣӥg賲s�
�K��Q�zC��|L�%|
�)�ȅn	]]^�T�䄘GIXZ�jŒE
H`�C�ƛ�koq>�Y��@�`�Ĥ1N J3f�{��/�]�a�vJ)�Y,��j9�����?�C��x�ߠ*o��1�-3�g��"B�ݵu�Z�%^
Ϙ2a��a����|�]m�w�2A�_�J-����/��-r�R���t��B<��� ��S]�Y
sٖ�7�㓱�Ȫz�+Û��`�>�s�;5y4�K�q���%W��D&\Z�{�B&Qth:��D��>�Ј�
	'�DB�
LHA��I3f2��|�,_��=DiD)�xlBrZFVn���
�
A	ew�Jګ��j$`+P�/A	���4_T��~h+��[���ԳBҾ׶���~V*Yc�K/�����\(nRBlt��#��g��z/�7ם�4Ir\��%�zH�qd�����6�@�j!	�(	�`Jq�j���ǔ�`(%(�ZB�_����l�N
[��9�����
-��!J`RFzZjJrrRRRrrJj�\��+(*);S��ѐ=ܽ''��O6�d�1����F��%���R�!?G�&�$li�z?ߥ>^B�\&9���2
��L�p͟��1q�T*��2�TR�Lf�KԸ�
-j�4�
q�5�ˈ �⾠�� � K�4��(KC
�@w
-��n�T\�2�IF+3ɜ�������B3S��j�?���|�y���WM	-H񗪁SgQ����E	=uM�����;#�
(e��:S^U�G��A/+��

�C��j��'�
oz���
-+���K����E�޺1����˧M�8n��!�>��w���7^��o^�#͜�\��Tz�$��Y���!2 ���|��V_�So��

Mԗ���]�`鱊%���K,ɶ�	,575؀%�ťj�{��Ҽ9���(}��a��*dFGۅ��s
��%xD+�Db���=e��4�t�s�K&�

ߤ��
cnaqIiE�doԘ�g(�\��
�J�9+�(�]l�a��Q��4ig,�t���Ǻ��H�;*�aɅ�nX� ,��[T����l㆐�5pAp	}I鸟N��,1V(Fh*�
�(�(:�� ��H�D��J�b&-^�b5	��{/l1�X�.<���tP"���
-�
��7N8�#�d�
� ���
-
��rshrs��
O�>��d��*��s�ͩ�-Knϡ�A�{�Kx$<
-
fD�',
',�ٱuSXH
-,�Ҽ���	.ykc�0-\5pJ0A(�ٌ�̜�MY�x���m�"���P*>S^Ym�w J��\�.L
�)��PI�!�*�M��񢷮�=[�
�Օ�d�)�cc����z������>�&�
9l�G��ݷ�OT���J/.�Ԫ���Pp�=Pji>��`�j�V��b�Zk���KT���c�[2�K�{�������l"y��3ҒE]ڽ�=Nr	;�&��"��^yM/Ʉ�b6��
!>
�%��\���a�G
$��	U$��τ�a�$�ևmڂ�-�RR�!+�8����7^��I�s�R��[{q�ҵ.p.��_x8*46�.��H�/��_���S�Ճ=e	d�ʴ� 
�K�
W�lkDxhp��Ksg
ɦ)Y��p�(�b�d�RR*%;@+�
-���D�J͓L�)���p(6�8���N�p{���g��A �\�����
Mu�V�M����
-��r��YY��,cvN.q	u�$
�.Ε.H��C��Z��6�SOe�����l
K5�R��̴d`)&j�N(������ ]
��n�N
1����В&h�*	@E	� =u����c(�U����	���_�7�VV��@I�Z�>�G��y���f=Wq�8�h8�pV
�rɂ�~ӧz�=b���;��7��������媙���
H%gU���ՉH����DL��T����lx`�E�L�_����=b�?�’�����Μ:�K�DE��)\�&7k&�7��g��L&�&fY
�c�a��'|;�p��(�0�H�s�$2:�$8��/�*Lڼm'�ogQ� n2��b�.���(f��Pz�
-��8���P���
-
�4Q��D?���D]}n*y����ı����G�5�4;x`_��[6���e.-��"�/����D&�(���)JA*��h5<L�$M��ЪL
-�)�P2<df�*��!�oJ�HՍN����v��<�
庶8�(N����2�
CZ�����i��P�K�gZ�;:��pk.qB#]G�ڮvv�Ql�K9���#1���]�Z�v
E��NƄq2'�,�pO��IjQ]�|g��}чb�RҍJ�:@��
y�&���V��UI��_!\���z�'//9����w(j�֍!d�sfΘ6�kܨ�C����y���_R��K���@%y��X�x��
-%[}������\Ec6�#0�����Xz�x�&���%68��]�t�"�e�kaq�gO�.�$
�;r0:
-���\&��$��;�mn2�
�ָ�du�/�
�H
�o|9��<R���A�DF���`��+V1�`u;v���D*{
p�[��
���+(�t(�[�甤@���ڪ�W��
-
55�
-6�$��� �����J�cI\<`ks
�+��Lԥ�}{vnۼ)l=��j��ŋH��Y3��,�)+Fn�g�I&5c�H�1�j
��3<PK�!�B�`�ɤ��b�"TzV��

��R�T��v�@
�;|m��LUT��c�L7���$Ӥ���3�9yE�$��B�_�vC��R!z*K���R�0T۴XB�ER��
AP�V,�Br�����,��.R��y] ��(�s9Pz

G&��>z,)UB�(1}�5o�5u��X�~t����eU"#������d��6�����
��ٻssغ�������<a�'�����}{��o��Z�����^�f���Tz1��o
����Ƿn�c(��Z���J��c2UV���X`�,)˭z����;,1�3\��-,���q����qĥ�֯�&�@���7��#��NG�<��C��?ƳǑ�9����DF���N

-&	���-��Ii+u����+*~���+�$��҂�`���$�$�EYz�F��E�g�R'ߛ{�v
�47f?\Pp)h�*��E
����*�Pl�TL�L
�����[	��Ԓ`���.Y�Ra��]�Qњ���P�
T)U�<B�-Q��^�~Pc;�^M=io�De�S at i���LOKM>��x�&1�DrjZzf��?`����%~��.K*"݋c���T��eHIJ8z�@��B�h��K�_�E�Q����sƫ��=u��KQ]KEi�v�Ԙ#q��<�)�T�2�~�\P�UɅ��U�.U%6r���Lq��p"�p���A+�,����T��cF
V>�����~}_�~�K���*���
A%u��ߕU��P�Z��U��򲲲�R�Q^a�d.�.5]h�6���K��l��X�N�%
(q�Meg(zggR����\"��´T���فX,?�9�&,Y���6l"-�
��/�aq�/29��$|�[����BB�6QOb�;���L����ly%�F��B�g��. [...]
-����k"���M%=����`�n��F{��L�%W\�`��R�F���%>d�+F�	ͤT^,����H �D���Z&mپkϾ胇I�����|2�
-Mx���ȓN�7�
J�!�Z
ܸ�y�*�%�S����c	��qqq��	���S
F�dK-mҰE��,�覍���	�\�bQ$�J�
r�H
-[#¡ǚ��%���0թ������`!I�Ų�nDQ�����r
����䳉u2�L.G'N��;131�4i�d�V�zi����_���E�(���˲�.,��"1""[M�m��I�i���}��=�B�?�~��t�����=v*����Q��yN
�y��i�S	w.�ҕ˃�z�;ښ�vK��DAnfjbLDXȖ�-Y4�ݷ�͝3{���gL��F�$�rW�OP闢��{��{�P���! �+��# ��P�4�;��j����Vmw�K�M-4�T,�M�ʆ�KܻU,�V�$"��:gk�%�Β���!�{�KQr!4�֯[Ë�χb�I�	I��B���~�?~~�pD��[�1���� �f�no�d�����Id]s
-x��LK�y8Ε+w<㞡�4'�u���B]}�Z�)�J��!���U��M�&��}:�%.���P'.ϥcGs���S.�Q%
R��2ńd��<,W�Ţ<�T��u�7�Ra��b�R���P��&��Q;�<���h��{@"R8!��6ܡT��&�d��HO�����Y��
�W���1�ܯ��%������(�M} ih��
�T_�O��Q�
�������	,�V
���KIr��W�j
%�v*���!߰W at I����q�q���6�����
���l穖�Z[���8�\���M������w�|�W^z�瞝6��'��)�zd��r��&���P��U�@Z)�Tx�,J�jk��RI�b����%JA����w��(?û��G#a����(��:s������7
���.%'��DE��ݳ�����A��9"�r�&�
���̟���0�h��`H����|��z�e@��I�t��u`�.-� �UU�Pji?��8��71J؍
-i�&�Uh���JC�����k�ͦ)
-Kg���h��^�l��I������2q	�<q���E,
���LOM��#����W�L&7�T�\g��j� ���|�g�$�F��~�$��y�}�Z]S�@_�(Љ/ht��J?hK
����ʵLJ��G@��t}jj
-��4}z�ùG
��TB������'/��;ޱ�O�
}?.Gk�d�VV�3�eg�1�b��~5!P�WY�{H
y���be�J&a��%�Ҹ���T	�@�����}*
�t��D1~W�q�݁
wT�JO
�;���7t�5>K/x��߽��˜�Ӟy�	$���OP���]�0e�?���\u�⨶UY*ͦ
-:&���.���q
-�c���Ē��!�%ټ��`'$�%k%g
�g.��>�C� �
-�ൈ9&�/������/Z�����?`
������
��"�fRLl|�.Y������l��ky(u�D�(}�a���%e�2���h(55�9kh����=��^#���-��3mԸ���F��w�X��χK���5Q23�t��A�,Tw���T���R�� �b"�T7�A�J�1���
=v\
-EC	��̰�0�N#C�q|7�>����\�Ā]�u(3=-E���H')Y�����-b��X��z�L7R��c閻t?��X�5��K.,9
�
�1��y��
!5�y�*5AՂ���_�S�P�Yv2��c��޲s�R'0��P	���pcR�D�&�[f�HS���ݚ E^�����]�[k�+���9�)	1�{B6�#���ּ�sfϚ����$��I�r5�'��P	߲�J#�����SI-VTv�%���TQn4����&p	1X� }��l�|jl�Ƈ%��ݤ�1�xd���\�#.q��`��`ھu3b���9��GI��#-]���C�#��^�#_R )x�
�DAG3���rDa����S�*���n�a���Ag7(!�{:;h3�;k
4^QLJO���@Xc�e}��4�qRi��t[���렉[V�pV����H�]��puЪ�� �&�b��5�g)i�����U��)��A�J%3�h��(.5B(�X�n:�<��a�:i/�m*�:
���\O��f�JJ`RrbB|\,���T
}U
�&�k�Z)��.���D�����4�~�F��=��z���
N(b2҃��
΢��\�#�+�!�C=AՂ�e�r�_V�YLHڶ#T(����%کv�R�JJR�Q�é��J����
\8�o����ʊ
-�d����ڶqm�߲���7�x핗^|���N���?��5�'���Q�/���;8�F����Tj�^�yb1�I�C	��PZf\�v��&�t�SM���F�boXB��F�Y���
u�v[��\B�������)_�lG�m�fZ���n%%
���냴���r�J8؋xD@"�mظi���;v��&$�LJLN�gd���8ꪪ
|r(�΃������$cn��(�7 at L���E5���\Ye���z\@�}&�t����R�ް䚸���{N��u5v��T^ZrRp�:Al\u�-��L��H1��P���Z�TD$!#I*Ei/�d0V���f�\��*��ӿ��42��A���/��uuP�ۭJ�$�z0)>�`LtNttL,j�.-
�X�=a�mhn��x�xW�>�X�Ē�oH���y[,8w,uR׬À5˹�K=!\��5�a�xh!��?���FB�N�ߠ ދ�j>%��j�Nmm�ԥk�R=�4<)�Bɣ	ȩ�KSɉ7�(��JM<�
_
�t�?����_}�7
��<��|��G&�$�(h�J�_a�\�����VŁb� �J��N�)*.1��`�ں��S
X�
�-���]n+��
qWD��\��������r4�0��!��, [...]
-���V���f�='�Rpp��4�y`��W�T�K��w�=�6-M�qV�K�'
-��R|,�������B�@��kT
�ZH!��
=FC��L��v*U�>-��<F�p�x��ON%����8b\���M�V�s��~��9�g�|n��2�'?���4(�����N��f
�Im�8�$��i�N�i3m��=�4=�6�4���D�eE9PYA�s��A at .AAAA�A�(ފ�hԘ�Xu�|����vQ�i|����j������|g��MM>C���JJ<�!U�a{��ma(Uy*���2z��&piK�ܻKg��z������t,�g�+g��3�%�8�KRry<�֢��W��e�f
-	梳PՑ�/Y�x�"z���o�b4
���[.5g�A�ITt<���\n�b}��]ݽ���P�s#
�ѽ���%��mb@���~gM������x*<
hB
�hn��A�Mc�]�m��9��>�ys�T�o,Al|&]�x�\�zdX���Q �J�Ɖ���$3�G�*wby����TRNfR�z)�y0r���~�
��wOOgG[KC�@)���8�`��
e�G��
-� �ܞ꺆�m
]=}Ch�┠�K^X�c�
����&��%��C���M��%�r�v��	
F��u=8Nc1�Ah�&Dځ��$��((��Z�Ќ��N5���B���7�T�����T�SiCZ�j{؊����~�ګ//D�?�姟|b��y�Ν3[/r��
���'I%�x\7��Q��0��KJ�)w�\�Rz�.���N�
z�
,���`=�HDAu,ݾ/,�g�c2���s�x.��륎#.I7WW��1��rtWR"]�)L�D��
eG'fy�6�m��(8������e�V�Nf�����
L��
��t
}y�7���Jw���P����]�Pڏ�J@��FC���f�h����.�4�4K���Mc����6
Ქ٦�J^XR��3�L\l����r��
��]��:�_b�L$*�*d��PDeעJI3-iz�0��#���y��i��|����uT�8�u�$�ø����m-�uՕngQ^v����$���x"���$3��Jݕ5��[���E��X�n;%�R�û'�,��B�`�N{?,Ds�V�+š4��cd���@� �((�$p&+�J]j��P������;��JW�wo=��_�Yp#���D%��{綖�͘Jק$�F�.}��7��_�����7���g��l
��l�J�ȹ�?5C��R�P�(0~QܜBf��Tjn �*�e�Ғ�"z��KJ]���
t�;w�xai\aI~r�
K抻xs�����K��+/s�h`J_���`�&\�WHppP�
=���?�O#T\��j5j.)=�!	3IP�Lj73IJJ��JW
(�r�8��H�/�.s9��R��E��+:���
c���{
�,���X�ύ�{����&.��*H�Ȋ
-40�%@&�����
--��RY�kY�Q�#$郶�_�0��~��<�
?q
-�8vi|œ&��]-/����vh�
�?ؿ{׎�[�k ����i�k�I�\�!��1��
�R~���j�����={��)F���}���n���’�-�P�aiTLa�@_/��'T�KE�
&�;�|d|�`��
B�,���L���`(���/r��>�w?ɉ��u5��k]ЧR�n*��
-gaN�ڤ�� ے��叿���~��~��/<�엞����g�ǙJ����CD%?��
���h*���d������˔
q
-����f,!�ɰt���~L&�;�
�%�C�\��PY�-G`��B��eq�Mt\�TuQ�(��0zB����FD�y	����$9@�u��9�2.:�0��m���ſy(�>{]�	�T�d�
�4���
�H`�X���b�gz�$��6�����GGF%
S�M��c���=�&��K�9�<�B��=�#1�L%�Q�
-�;$0�R9�, I�*)fRo��Ac(��L

JJ���ک ���v�lom��\U���H����
]��C�^hxdtl
����_��T�������7�􎍊Sx/���g	�K7-X�ȑ�)
Q���Z�\r!�
�����V^�
�B@��1��Y
-�R���	�n�cS��]�[�}�����Tr��g�OI\�r�?������?^�ҋ��|����
�;g�#�SS�(�*��t�~��B
�x�~��
�

�Dj�P*��������˗�����iXz���
����?Ю�~�t�Kző�)�&ѓ�3q����j9ZLtXY� �Z��!l��Z����n~��18.�J�.,�N
D����/P��d0I�:�om(�����~�]g)��@�.���%R�&�\]��B�HB	σ�����X2���駒���w��'�����Y�|
,&v�t�Ĩg���U
����QI�Ak0��ұ�>�p���ڌ�B�i�^��Q��>*�����-�7U���3ק:W��#�B�V.��l�e�+�B�"쌥�̜��2Ou]���;v�����=~��Y-��
��/�&�5�b鼎%:"�PD�����$0bg�
d�O�v/�r/����V�	�T( ؛rVV
J���k�~r(�-ZT@,Z�R�e*9�Ã��T���_�����?��g���k���**}Ơ���g��IS�W=�2�V���M
�\����de�����gjB��C�Kק�%�yks���S'��L\���}K˕9qXL&8���+i
�WBB|<ݘ��? F�8G��
)�������CE���㝤W��o"1w�Jro%����PsV(�mm�B��Q�PIB
�\�S
��j����z��>�x�T��&����ٸdFs	-.
�5�$�Im�
��ȌQQ�����s� I<�,L���UP��r���kq�����s
��RA���:&*|e�@[�ҥ�гti�-pEphxTL\brZ����RweM}Sk{g�
��ѓgPo8g�o�A{a����b銆%��� ��㽄��O�ؙ�PO�܋Ü����q ���	�N���t�JԃJ�Lo]�j����^S)=5qU�������_{����/<�,M�����sP�&�J3Tz�Du���p�g�JG����
�T��,w��Cefdlذ!##�����EZ�
�`�(
]�tejXҮI��*W����8:)�%.9�*ط��
����J_��B�х%;�IR�MJIIMMK[+<��s��H�2wV�
����ԯ��
���mJ������@IZN�����C:�Z���i�20��H�4Gp��,:�Ŷ�>N!��L�J���.�gFs��ٹ�K�ƭ��T�a� ��K
�IhH�����i��"$�V1���D��O���(�~ (ɲ��� �> [...]
�KЄ<� �*v�E����� ���@XA[A�`��M
%�u�S��+��y��o��+Si�&P��J��1��ܜQ�o��5L�W���
h��6���uk�<5{*�Pi�Q���D�Ez�kk��*)���L3���.��Lj�"����WP\Z�X���,Y� y��+�@,}�`I���\�=);N�Row'JW�����pY��M|]��|z��a����&<""R�K��d��H��#$�WB�qgh���
�I#�c׮߀ �
J���(Y�z(�B��!��9�xƒ�Lc�����f
��jm�T����
�w	]f<qa�Ap�zТDv����ɔF�������3
S�����Y!*�g	I(D̤Z���I��!-�)U�甇�B�󚖇i�6�~<�����X[u�����fH��Pz��#��{y���quuqqu�������#o�X���K2f���U�6���%
��oSw�
I��sE��4�����Ϊ�%��Er�4���$�� Ď���,8
�@�K�>8�
-�I
B
-0�����;��d�P���@��J4�Ӿ�v��6��1��
�pٹ������?�ɏ~��w��o</[|͓��x|�-��=�B�eC%t!~��9���KS}uEi1M�TCb|LTl�p�pp	]hL���հ�#�z}��胻s`i�oO�%�y�*�
�C���%�na�`*-��c2e1�p\ɢ���x[���O
��ظ�x��)�N�L#�z��T[�3����2i|����0iZt�*��I�J�Ã�P����HM!&EGED���+EQRV	ٶt��_�<t���
tTz�8*����'�����d;�\��w��j�+	L�%��Ē��(2�ᨴ�dT�l-��*�I͜T��$u�N
�e_
%��=����pZ������S(
}��?��������
��nW7w���K'������,sAɹ��&KGO�E�;i|��X�W4o*s`�C1`��%�K�Є�r
�b��q�2

-C<"��L��VP�1I
�Qz������޾��/JJ[M�[�Co��ӞNK��T:*���7~���^��+(�o���=���/�[���cv��
-����nO����a|��la
�RJA)�LHpP```PPpșPp)6!)e��/0����9-
K�1٘7}0
���t��(9L�	&
jN��,ф��y�O�;z�C�%�p]8/Yr�r��9�$�\e5#���f5�-����n�uʹ�g��[��U(��d�
b��X`Q�%cz�%�����GT#=��?�K����dK3'�
̥[7a�T�ĥ��Dd�Ԅ
&�&�ivb�Ȍ���
�Y�<䋨��h&�QR�Ĥ+�I7��8'm�~�D(���mU�~l&�+��NOI��

�#(�y�������];w89:::9����g�羃G�~�'|B"bR�M�E�5
�m]��GPp7q�r��4��K�ꀽ��%x�@s	��4���|�,��&%
�C�a`}c)�8\
YA
3��F��P"Qŝ�3y�D(Ɂz�#��Ih��T:[h���'��+��^���J/b*}�����T-�B��M%�3䃩�����P[YVR`6��b	J����~~~��A�g�P��I��
�y�pM��;��Ҍ�S�zQ:.)%��
�F�L��\s�L��&�.�Wf�
�}�{��i(��
T
�(GR		#	G&����3I4�dU�m
�Ԯ[���%n9��J��	BrB\td8B�4N"ѐ
-A(�k�6��w�j��ᆞJ�^<��h5�9&�*��27'�m���:�%��K2�NLd&�J�*G�J���Q
Zn�
�x'�ZщuQ���a�PR�q����wSSYk�0&�E���e�N��۶ҳm�#�����X:v�t`hdl�1#;�������}�V���)z|�X� Ea�_/K.�&��0���db6N����� N`��gPNG3�����t	��U
���%�*M�ﲺ��T����T�K�3͘J[0�~��J_�Si5��B�Y��B��A�i�J�:ۚ�k�|�9�i�ĸ舰�� �Ӿ>>>����������X���X���sI�7q�K��ELJ�5���*��&j:��
��Í���C�i�r�8/ܗ�
-�
��F�$��$4��U�Ij�-���C��M�����Pʠ�*!�@� C	����OⱄR��}Q���Pi��%Ƒ͟�-�KW���(�YL�5�U6���r81��H
-QiYjY)Q�䠵a:CI2����av9>���R�$s}���U�J
-r2S��‚�}��(�����
&mݲy���æM��nsܱ˅���Q�S~AaQqɩY悒��z\���+ã�q\4>���'�͛�
,=P,�nǞ04�
���H���)bW��#�G��� G����+�c&
� h(M�@;�����wb3Pu
-�}Z~���iL�	��J��T���/�@
�a���^�v�Sr*=f*�Pi�P��V�c����DA�
-���1�ag��|}N�<y��ɓ�||���
���R��R{aihdLb�û�3|�,���X
�l.]�r���謨尘D��s�1�������v�w6�'?�h���}��D"�nni��1� ߘI���td�\u�����u6�aJ�fA�l�H��D��I�)�
Dt,���"�P߬��B�{K��<
�L�%{sI֠¥��<���.\�q��82��Є�U�&�g%��AKI�阤��h�G��8�٩
�WwGkS]�cV�!!:<D�����ǭ[69l��G<��y�v�]��x�;,
��	�N0��r�J+jZ��v��)�LAXR������5�
��"ŮZ;�����,ԧ��<�
���
-�I#�o<T���_�Ҡ�/��׭W�[o��,-�3�%�T��~���O����
-�
M��
����O<�j�2�V��L���gv��>���ڐ�
�g�JOI��BJ�N
��>v�����_f1Q�g�h�^4mz�4M�699�IڤmҤm*G�UA\�Zm=�zD�`�`X�}�UEqA�]@�zP���gq�
l�������730h�ڄ�
-��?�<����Ki�YK�K����^h�
K�JX�����d{.G�\�A.ݞ����DR��	b��d�A�"Q����)>@o5��c<�)G�Ds�"��$��$�3�G
���l�g�26P��
-�N2(��h�0!�h?��~����c���#�'N����r�T��K��A�9Z)�U,q��3�>'\�~�AH$�`‘���$��J&�1�U��Ju^!�e2hǙR�LR�ׁKG
��T�;S�H<B���~�����E�٦��NJ��cۖ��{�����Z�
\ڲu;�RHx�>!9=�����
���
]}���M��gX��Xz�p,=���;i�ޙ�͹
b�N�p�Z�~
!��V��H���:e�7�P����f��+�g�.��4h̪���r+Siْ?������'?VM��X��"��**��L��ы�����~?da~NFZJb�A��������bb
��$9�:�F�N$�
Kb�3�
!��`�`�d�9��w��Ƭ���Aމ�� ሽH�!�X�����H� >�`��Y7?�h�
 �R��(-*�z J��D�~oLN�zP\VU�p���i����!�Qi�|V�e�%��+riZ�ltD�6C��;ɵj���F� I׮�J�B=P
e/��B�@�vv0
�ǁ���gZ����T䤧%(mߺeӆuk=׬�pww��X���~�`��

��
�Ԍ\si%H�
s����Ihw !����'���6����OV�0:��!b�h:ä Z��~
)
-
"i�Jp��gҧ��*u�
��,[����&w�
||m���@/y�#k+K�9��|*m�S	�7�~��wĩD3��TZ��[I%Ii�s^VzjR�!6Z��jõڈH]t�!!1Ŕ�M�T���8b�F�u,ٲ��r/�s�g��KӬ}S0�(Ȅ�w{aց��0���O�`.�8��:�i�!i�"iRH:1��mG։���6���Pj$P*���4�&�
�1:Z�h=HNCJ+k����:�~�w 
�T����J�7˱�c�� �A�ϕ�)�Q)�%N�UW�T
d$�A
J���J�
%���E�P����Q�r%�܌T�!:B�G��q�ZO@��������pi�:��=~A����Ĵ���2ػG����=CWǮ}|���o��� K�܁
Dj!^@
�&ע��I
��2.X+pB+ �Md�c��`�?C����ȳO��&�W��}���j�G��۽S�J����E*��P	�F��t���69x��
Z_fZ�1.6:*B�фj4a��H]���a^aI9��yKS�h
���%9�d.QW��$��Y
���	��
�
�;wME>�_u��.v��8�"]S �'��Ib��J/��(�R�RmuEIa~v�	'+0	�A8iQ��
d暋�y�u� �ƀJS�E��Z
$�J
K�&.���Uw�K*Ÿd�R�Z�(��J=hI&.p�Z(�����`���B	�����7�V��f�%��PZ�����yժ�p��]�<�x�۰y���������dSvAq4�&�w�qf>��K��#���
��tb���\�\���jp1d-M�{�TЀ��mQ��,L�P��S��#�S�7�>;���p���t�o;�|��@A�)).Z���&�J�t*��r*}�����+�J���ܚ �

p�k�ʊ��S�� �pMhH0^H���s))5=+Ϭ�ҥaK,=�Xz� ,�*���T���
s$稹�]u�u�0��L>�7�����C�ј�@��t6�d�P�P�V��֡T^R���� ^L҆c9 � "�� c������H�ɶ�=��h��oS�
-�*�X&�U.)�%�ek�ɤ�bZ��Z
�4��
ޘI����x�]����;�3��ʊ�LI�1�a���� J�7x{�vwu^���i9�ӊ�ή�7�lݱs�o at H�NoL��1�V�6
>B�
^

���������ҬX
*�4��P��&�$-��E�Z�T
-X�C��g�	v6P�ϴ
?z�@UYanFJBl���_}6xy�8-���T��<Si�Jo�@k( ݴ���,5�f��
1����� ����
$b
�tK��ZZ� ���]%~R`�:j~,Y�K�h�	\�O9sRΑ�w��C��a�����?���[X��^$�x�Q�I9�mF|&3I�:�ko�		J�e(���S�`��H9"� 
�A�1Ŕ�WXZ����s`��+�J3���;�d�H2�d,Y�
B�]��	�b�dL)�V�!
1
Y
��$0���'
-��Y+Pb�8�z����x<TWS^
E.9!6*\�����˪�
�-[
-��q��U.n�=	�>ؽ7 TmHL��+,�b��b���;��i�- K_K/%,IsI�S�#����i�ϴ`G4�D�2o+�x�T�	�~|K(Anߧ>���jSc=�zVZ�A�S��
���u��ß`*��w��
���V��"��F*=VQi�P�������� '#��.2<48(��o��@`p(&�>>1�\,`�{n,����Kߊ\�B�؊���
�Aq�:08
=�:�p���uu�

&Ŝ�$b3!�TL�o(���~(�f�`e� 8��?) t�����\sIEM}cS
���Q�T���o�<T��F"���bPⒸqY�Ʉd�fC1I�A&���+7�@)�$�R
Z�ֲQ%Z�?(MN�G�z.��=Ղ�XQR���b���C���`�
%'ǥ�;8,Y�����e�N+��<<�7�l�ۇ�
�D��'����k�@�Sg/t����[�&.��{,��K��&�=�T�{�\���++v#D
-B'������k`�
-x}S���CI����!��F�|2=y�<{w'�
��%�����M��]�������~�[+S�{sM�E*�eT��T�2��}-v����z_��P�	�����g�
_߽~����
-�
-,u,�͋%;�-.��$���
�9b.,�u�u�0�1��W1��^�/0q�94��$6��L�u�A�\���J�P*(� JzJ��� R
����n�$��c�U�
:J��Q�9���d�?>�,��璂K�E�f�.�6Sl�*����4��gj��������q�q�iATT�B		!a_b�AP�EA�\@Tl��[qD�ml�ƥAp�
ѱ��v���y���YP�Ʃ��F����;����R��"�py at qH�
D�I��������2��u��cG
h޵cۖʍ�9iIqJA�W.��4g�
/OOOO/�Ҽ��}����ED�cR�f��P���]��.^���2�Ha�^|��%�(=�\b����k
� )����Q��&�
n�cZ�$z(������@	���Z����=��N�������lا�ёҐ5+}�Tr�0�&���C%x ϝ*�
l�� b���g�S�tZ�:Z�R*U�h�>>5�܂��2K�X��K[�$2��\bBlE�
2!�9d.�.
-N(��b�z{q��C��!��C!G
F�D�
��
-:�3n��dm�����j�֡Ԁ�TV�� 7˘{W5:M�WCFN~QiyUm}Þ��mG1�.�X�1�1�d#��X2��%F�]�@��bX2F3J*�V�<�d�z��X�
&��P�%T�!
{��N (�\(
K��f at i�F+d����%�`(����pwC��\�=w�"o���!R�R�OL3�+.��A*�
n�8y�M^�;w�?|��|�z��Zzgb"�!R���
�%
p����^��U���`5�
-
i�f��ſ\
J�J���<��cG9u�
ԭ՛J
s3���(�$p������o*MP�G�w
*�`�
��T�֖�
�j*ˊ��f�MM��k5Ѫ�(�(e�:&6.!���`i�<�R�MX�
��9L���d£	�&�t�/�'tW��?���\G�_H
"�����g7�l��&C��T �FĠ�5�� �"<WS�u�hJ%�K�iƬ��ȳm
�[Zێ
�<�^��D%3H�ȧ�.Q]�K2Qh�+FI�91�@*�g�1R1��
-����bP"�
��,��~��:{m5Ը�LCr|�Ai
����0�<��\]�ѹ��yx��X�]�*0$<R����[XZ^]�'/������K��0�
�d}-��~�D��=Z�!�&�3R0b\c4`E at D"��3����I�%q(�玡t|��
1E
;t���g�
-�����+|�,�3��=L����'��4A�O�JoyT����r����í�vݖ���
r2�T��D+��t�H�F����z�e,!G���ү\,�4��\�
&��h0��d"h��!���39�9�
���	�
II8訙d�I�A�%m5\ M�t�YJ �����LCjr�>6F�RF)"�p3��P
�7Vl�۱k/�l�3x!z��1��y(�&�ws�4f�1sɢd�K�5�X��T"Z�"3�O��6.Z�H��S(�t<����}M� צ
E�YkStꨈ�`�ysfzy��:Owrrtttr�����9c�����]�:P"SD�Ƨ��6Tl��rW�~�5l�!]�y`��
l"�Ǟ�Kf�D�HK��4;$т="� G��t+�Y�=��"�}�7��#���>
1�vu��9�����˾X4o���t�I�Cz�S��&Si�J��~{g�J��@�:�Ci��e
6Y�1-)^P�G�¥Rix�,"2J����%�2��QW�lK��
�^�7�J@�s�?�����G�D�
�&�1�;���kp�
$d1\����
:~��̤�t4�B�gѥTQVR���a������@&�b�P��$$��!�6m�
-qv�P{z!zh*=�*	�$���-`�d/�$E�a�(�x��yJ��
-K5‘Ꙡ=�)e�H�L���J ���_�o�	~A-.ۘ���(�a!�~> ��3=��

��sptrvq� XZ�ru�$"J�KL5fC��ͻc����;N�\t���=�L4�
X�ͥ1�ڱ���|
!Z��bP��-�_h�0K���p����� ��>yL�� ��O��']����k�طo��TZ������(#$A��������ȝJ�m*MP�ӥRG���H���¼,Cj�^�V)��0�D*��I��5�����a�?�Ro�c*s�	��0\�
���$樜�A�����

��6N8��
$�H,�86�L����j�#����F
%<V9� ��LN	��6+�����v������t�<��q�ćG³�%ɨ.���U�����ɼV�T���l@i���N��ͻv�m���=#-I��KJ�}�	�\��
����M�jggo��8����
��d���5�R�2F�����������qOKk�Q������k�7��FF�bi<sI�%s-�T
-�
�<�f���X
-�A	-ԟ.�|w�̩ǎ@J��^�a}~�!%^�����Y��p�LW�iS'}�W�T����4A�O�J=@��
G�R[U^�JH2�JQr�T�.$T"��J5U���c	;�>��m<O���UO�\b۷L8樜�ل�������7pā���L��q���0IJ��G#R=�R^�1=9A�ը�"#¥a�P8�����}B�!Ҭ��v{c�~�B�����'����RI�I�^s����~eY2��C
�
Ɇ�R�jEK��W
�@�0&�C�����C7��`ݨ�C:�ݽc[MU�KR
�cxh��ދ�͞���2��4u�dtS��MsprvEXZ����? 4<R��O6d��n�޺}gӾ�mG�wvu�����\��
�ҳqb��B|.1���)8��!GN�k�
U�6@�N�e�**�΂O����n�VSY]����S+d���~Kϟ����`7������T��MSi�J�����z{.t�9�����z��;-).V��(���Iq, [...]
k4qO)(
߹98��R
�b��ƴ�]�Z� &�Z�@.W�4��бs
-��*k����
q��d�ɏ� I�MV_�_X2=�#uB(�e�������`�M�/D^4�.%
-JW�` �cJ
����e���
-�$p�
-��|
%'{�)�'M��I�%{����_�AQeY
��v��Ӗ�X��&rpp�9�����4�ɡ�I at P@�����Yf�t@
10�s
GGWGA���QF1 ��l�����=����Tq�Aw�{�9���ei���I���


��������|��m�5{��7
;y��e�R��g�7���
��K�W~8��MU��7%�O/H��0�7��Ǐ6
�۵��6��kGY 1&"$�G!s��?w����Z���
�{��Adxk\�T��*��	*U�..��LOI������<�xz!��BU��	0�rK嘥]|�� K�:h�z���ú�s�����߬L4M�M��0O�����
}��8�_�`��p��ћt��������N&w#�  ����TT���8���T ��G�
���KLIςa��bc�������*݁y��*����E��d���1�2�P�U2�h�R�z�ےtH��O�
i�Ξl:�=Dv<
�V�(��HK��V��(�\
l��Ξ1u�4�b�� [...]
��R��p=���rcy�e��b`U
-����������rpI�B��LK��,�>kcX�cI�}���xd�
=�Ȝ#��:�`�Ř6���
�y;3�ȊD��{L�$�L�D��qJ�0JM���z�R~Nfz����H~�(x����?�~BrZFN���r�R]}c�)P麺J���$
Io��#��
'K��T1���%5
�H�L�%�d$F<����A	M��e�YT!�h<�R(��E	L216622661�,KSg̞km����

��MJ]�4�ʵ�6�}箽
i:u5����
�^@Ay,�W3K.�
S����)�sa
8E��'�nfM�e�E{���E���ffCm�
���j��r��!
��y�]
m�-gN�4~������<���ҟ���J�X�:Z��l�!��B�}�
�n2��L��.y���E��'��c�V
Y�	Xj�,=�,ᨇ��-�%
�����
s̜C�EM:�`������r�H�$����%t�T�N�#Pj�}�Ƶ+�(�!�����舰t�^
-�nn�r������2�
V�*۰^����ҹ�?���^g��o�7�04� gR�l�d*&V2�ZI�J�� �y�8�#�J/(]�P:X�Gv<
��$�D�BfG�q>��(d�������!�dj�X��X�7���U��G�r=��u
9~�
a�E��^~i��.	k��<�ZtH�K�$�LA�[
��W�
u�w�;�Wn�XSR��]�*T��
���)Ǝ
ejd0�J�atk�*
��UjDR�uC٪��K��&�E�(�==�e�.�p\\e�%e �
G�T�c�8b�ǟ�y�N�=`���_۞Kd]��i]�$����3�Ȩ�ZL���W)��)ǎ9IڮI�����g�Oy�F\���K�Ϝ�3nOM5F�������U����pd2w9���RT
IجJ�C~�J���h�02�rnI�&6K��)Y�d�:�b�kE=�.�A�b�h$����F��F�@�8���%�0
Sc#��^rW���0(!�
������A&c���i3��[`�$�����ON��]V\
-]��o���D��\��X�7�%h��n���Z�$��{���)�K�Rt
-��g���$�ͫ_<��=��W��n��'kW.�φ�T+��������P�Y�JшҀJ�T�sj*A�N
����\��
�q���
-o_
��R���"��
���C,�:{�2����y��)��N���%������M
-&5�Ps�6�QG���:�߼$_yM�8�n�a�t��&�Ë�L��'
J��(Ua��
���ĸ(U(\>	�� @&Px�݇E�&�,��+Z�v��mյ{�*=�X���>�����G�4��	��
�ZI��>J%n� %�ܒ��ݖ��E�R�TS
(��n�� ?o��
�͙9m2B�����7==C#Ss�%K+{g7�o@�*&!%=+��du�ƭU�5{P�8}
�tK�%��`�AG��0���D)�E��$����d�+*{��*���st���-��V�(��H[���
-�֖3�M?����H���]mU��J
�^qT�*�jj<�T�A�(/+=9!F��V�e.N��vvv���N.2w��UQq��R6����`	�b��T�
�S]�%
�%~[�aR�sdr�y��:N�����|���ݒ�7�4
-�4?n3�P�u�	����q�j�c�
@3�����(%'�F�B�|�r7W�
���C$���IHN��-dTj��Jk��#�A	_-gjqo�d���K&1��KF���{x�W�w<�H�Y8��5�B�
FiJ��*��Ⱦ�cx������~�����2i�p|F���702F,��8e�,Kk[wOe`(D
X|�J�Tl����ݳ���؉3|�Zy,��4���_��ҕ�A�H
���#
t�
qP:}�h��n(/-^��	*Z׎������O�0v�(Sc��C?�t�'�W�W����J{wUoC*�f�%�G���s�����
[;Ggj6��GAdO�`X�NX:BX�v�����z at z�
X���{<���+&�LxБIG��7���I1 �EҚ$�E�p
d�=F���-2�N� (}�f
Ai钴���p@���

-��	
��Q"@�::~aZfnaɚu��J����U%��sQbL"���Q4L<�h�>|�KP�^񊉕L�Z��J�_��l�:�۞��ZX��2(�[�ryA6��h:� J6V�� �q%CdҰaC�
�\B,���X�=w�����K��hIv��k�m�5����Y��H���#�zx���P���	NS*}(	��h�Z �kW.A�
m�����¼��)�1!�8
̛3c��q_|nfl�7�������jUP�ߩt�Q��T�TZS�TZ���3,�3���ͧ����b/Dc��Pf��K/R�*��`C4�5�P�XPl�uM��լA��J�g�y�[�޹���'���~��0�=s���S�1Q�!�~���M�P�
-%�q)08,bB�ּi�s,aG����c'�%l��`	{��QCc��[�%��4a��sL{��N�e���'
m/~��)g$Ib��A��I�p���(]fP*?�@2�(J�!�&'�N`R�'.J8�͇�GŨSҧN���~�7�b�T��JZ��dM�$Fm�alb`"�(v�w��-�vɞ	��P\��K�J���I:�?�ll�D+vQ:ġ�bɂ\X�`e�����&wr��àԷ���G��=������R����Qc��
]���~AaQ���1f�.�_�Ś���������.�,Ց�N�����Z�D��j�gAG��}؈*�
����f�5@�G�
-��Rr𥳐/�˙�5ebr|tD(^������Q#�ؿoo���ܦQ�/D�N��K�.��TZ�ժe
sgM�������
()�.p\�
-���R at phĄX`i�t���%���c'+ɦWU]S�,�����w=��Ou�%��7�I�ZD;��}�7�䇜�H�$�^rA����h4�p�oa�]�p����W��߻kg�f2��	JS'�%%�FAH
 !�9
�x`	.>,2:!y����BP�DJ�6�TҊ
�|�
I�"��i��/Z)M&&0q.i�$�I�&�b
�Lg�ڵ�a�$	Pz#x���"�L�-��P2�m/_�Qھu#)����ٰD$���TrgGDi����oxz�K� -

<�X����*=|��ã�S'M˞��0���5�l*ڱk���C��t�c�����`�3���Ng)
-��
N�w����m@��? ���e�p�뙄:
�f�O��T
-g[��#-��ID	ƶI���N��OTj�R���	TZJT����D%Ow7����
gg��MK�P���؄�4�%�(`i[ɞ}��:�J����S�����z�T�\W��K\cI��t��ư�<��^iz�L9�H�J�5��YC=6�T[S]u��#�����x�d�͛(e���A�`
��W�u ���:��69k����:����3�R��*�lPB�P$��	(ND&&�%��4	+��d�Œ,��Vҏ+|h�����n��HQ:ˢD��/�`��3'��>��pv��Ɲ}(�Ի���Iff���̈K
K�,F���qp��y���'��̞3o�҂�_3,�
:{�IK�Bu������}�m�,�L�6�K�E0�]tDT��	/��Jx�
rg}>-#U

���tq�À:l�~}z�����Ĩ�ԩ�{�ҁ��Š\�ܙY���p
Q	Pr�9�9�<�|�C�G�$$!K3s�CG!K[����-u����]����7o����̮ [...]
-(E����zy��$g'�L
a	����ĴI���/(\���]T�x��Ljm%"57771^6�@&�KqI�%����_2�k%�����*�kn4�(571{.�7�1(
�@��,s��d����
�d���I��
N��f$.��
��1V��r�׸�Ј��䉓�f̙�h�J`is���
K?J�D��q���1�y��`�D�Q�� �R剣帾m���;I�0�ƒ�}<��2{�

ؿoo�Jݺ���՘�ԩ����!�_T*+�
-W�J�Pv�E��}�ܕr@���
G�GwO`)�ai:�ҷ[�aK�W����o޺}X¦z���qI�ZZ4q�N�bRG��!Njdh��߁�Wn�3A��� (ݺ	k����(J�++�V��/!(M�HM���

`"*��� �X�ܽ|��ãbթ�R^~�j���èҥ�X�9�^u���C���3�$����cr��	ej%�I�%i�tVLg�$j�w{���|݄A�[4�f��x��U��<JKI� ����0����8�b�`D����̀����%�Ҡ!Ñ%;G���_`XdLBr��,h���V�݀,�cX:��e�
;HK�%�{��Jt�0��������n
P:@Q�zu��Ed��
-;��������r4����A�`h�t!(�:U��T�/D��=�J�P����Rձ�n>�*A�������\��]��=8<2&>)-c*��_��v
nz��+���3g/\�ZU]SKw�����ظ�v.Iɤ1�
��h���
�s
��߹
�_����p�RM5���~8}������)پ[
PZ�;PJOI��� �0��ˀ

�
(T�
�S�dL˞���`�ڍE;���i��B�JO!�&�6b���qCC�#r�E���D���KR�ULOɤ���V
<��d��'ͤf�
��Q"kV����l�
Jte��8�b��,J��>�J�DX�	,
4t��Qc��d.Jo,h�:%
�hn��嫤Y�M;�,v������H�$�ǐJt\����I���owt��r٢��2@��J��`k5��}z�̆�ԅ�J
J�*�*I\�I��ޮ���TR�6�+,��˙1-#%!�K��Y�`gkcmmeemmck.�*�<�������T�Ҽ��+����;v��?tY���Ru�a�ރ����ĭ{��f��[��î݈��wgLok���
6(=��[�?kk�W�	w�DE��}�K����VC��3%u܄�� �
��.`��G�%���Ј�F��Tjit���AcPk��&�_��$�����
x�8�0��D]�%��Ճ����E�I�M�J
JM��ft����Q��|�R�:&2<������ɁE���0
aiG�LMMLLLMM�r,��,Y K6�2W7���X56Ѭ�yK�X�B���

��
�@|\zm|��m�V�
�.�� w���ś7`�,��3�_��.�vVc>���0�� %�J��R� [...]
-���"ݒ�.(1�l��{_�73�
C�=f�޿8�9���}��O��������/�1��������%�U�B]j=�ĥbv*S�#��h�7�2�QF?�Y}m5��e��sAh7�R/''%�=}���8�ںU ���sg�x���`Q���B���c�7a����s�X�qkxD�Q��5�R1R��)�M���jւ�<�
�I�������Zv�Gd�&&�K�<��
-���p4�ߩ��(��2I`����܌rD.
%��x(�d���P�mc	�
�Q��V�<�I
;v$0�K= Ktt���[ڌ�Njz� ������N	KE,�(��X�K"k�@=�����u�ͫK J��kr(E�$�,
-���
�j������Aژ�w�ڥ��v�HPT�����T�h�ԠD�
	�'�F �V,
\0g�tw���
T%�����������������ֶ�%�*j�R�&�����ǜ�?�ҕk7nef��Q]��K��o��j��T�M�㥿��P����Pd�E��)J��9ٙ�(v'&ĂҎD�E���.��3������i���-%3S�:�1�s���ݽ�J��J)�Tz'�B��<��A�LB$����T�SS�h"0Acb��(�J]����k�VDҀIBk����q]-s3@);��(�F$�H�С�����KZ�
�F�p�0�6L� ,�_
���ko�KWKٹ��`��~Ɇ a]R�%�=�1�h&��Km^!
�����ܺ� �lA�,�džh�#��"�t��ڻ�c֩#[�x(�T�ޏJr�5�z͋���
-Hi�r&���O�
�U?*�_��iބފ�M��_�4s�f����IT:s��u���@%/��f�C�

������
�K��m���;��y���. ,1�ڱg����O��;�t�Jj�͌�� *b	ž�.�qIm�}���K��Lu_��$���
]^�����fe��.������:|`�0�8�Ң�sfy{Nuuvrk7ʊ��`�(�+;�i�T�~�K�C�l���t:>)�Z:G%yNi~�k}�N��
-EJM�G@&!����*++��UU�& &���'m	K�y+I"�a�;a�e�FGüP�r�9�Nv.���cG"U��7
�� ��<��(!�ڷoO`���[��6a��b�(�q��n
�g������X,�E	a����gTY][�j�KpIZ=mq�;�~��i ?�]�J)�-��;Ë36TSc�!�:�����E��>��	AI���j*Ea�|�ffN~�6�R�� 7�v����gc�
��Q�𱘸��7ng���QI„���>�ݱ��aqa�]*mX
��7�k����[���L�JzCp�KC!�[Z�B,9�AЛ=w��oIR���س��c�����˩i���
d�%��HU����fkq.)?����q������?^�m<�`�$2T:[�J��
- at gwn�LK���tb��C������_�ryP���~�����9:�
mc�E���
��&(K�c
�\�x"��B�Ja@�h�J�S�+[C%�A�)A��7
-bRMuU ������
-dS
&�K���*sI�����G�J���k�����`�()�r�E�';{�@i�.(�9��5���#�v��B(AO$�k׎�$���={k��
4X�����j�K���"�+`)�T\X��q�N�k���S]�hG�_ըSY1����y�pLx�ba�@rR� J�!�qP'o������n]�t�
�NPjMUҜJ!k�o	����Tڷsۦu+�TZ�bݦ�;��@%ބD��^*R)�C�Ȉp������qcFYY
�4�2���C�

��=�������g�\�Ԫu6o
߽�ީ؄ċ)W�������+(,R�K\���&\�]��h�3M��w5_�hm"L�Zz
%�~E���Pg�ׯ�\LL8
�����{@i��_���A
����6e�$X�-$��\��I ��p6XO����*$lρ#,�2��8*=kx���/��?�
-�E��T�D*++-}�LiiiYY9�	�$��
��*x�o�]�5�R����Z�Xkd�:�
�-�#�d'��P
-���z��8�t�Sd��A	zR;n�K,������!,
�`i�?��M����S�� KY9���P@��F\�P;��ZU�[j���w�"� 
dܺ�,�T4����~3�{�9;2{'(i���գ;��N\U��RUR%��4}ּEK��T���x�����6Tz�R�����g@������J)I@���{·lXD
����A��t����.
�D,9�f���CV�[�öp�z�1���/`ֻ��u7��}�.�ԡ�~$Y�yO�K��/��*	L�IC����e&������҅������ޱ}3(
-n�<_�ڔ�' ��--�(�c
�š����þ�'8�M�*-
Y�~s�n�J�R�JEH��'�F46�
-y+�B�8��(��� H%
3��AI	��
;�I�%��j�R��IS$)�[�z+�F�����ܻL��
�';LP�AP��h�@IWg@�>�;"��'��
���/�t����^}���
b`l:|���X��4�Y
��-� ,E��/������a�+���fs�<��,ť���wP�u���@#�jT
��>
��P
-@�a
�wh�Z�{�ڿB�%(���
]�JRI��5��EǁI8�Ѓ9�j𴾶��T�J
�
>>*9Lt����iބh!���B�
:Gi�R��
�R��h���5!A��#��'؏��46�,Rw���:0�Kz��,FZC�s��:�$5Q`��k�o"M
�:~�Lܹ$U��;��u�	_��&���,郪K
���&ʤ'�LQ*}H2��t;�R���31�Q�p�÷mްnu�o��|gxy��L
o
gi)�P_�R�@ڷ>� sKk��$W���/]�R�����K�7�J%����g�*�B�(oE��%b��H&+��Ɋ��M%&�0	���2���R-�
-��H��̟�O��e��x3*��x�
-P�a����=*�<����e��u
3k����t!�V�KS*�Q��2D�F�r)Q�ߩ)�D�z�?=�s	�˰쎘����9��^~���=�6k~��_���}�����zC9�A�8����ѣ�0�>ŏ<�����C��j��N���QK)9��J KU�H�p���=��� �$~~Cu
�5����l)	,��c�d��˅s��b�DX���S(1S�O��J}Si��B*�_,�^Q� k�
*�lk��Jʮ����<�?��̳�Ra��rI�������9���鈨�ҭ�VY=K�S�G�݅���r����ysfN�CP���������D��
���f���j7�u|�l
-	; ���?���y6�����
�K$VO��E�K��@3��!�$v&���!&ѡmމ���Zr\A�٬���p�{���mވ+n��-�Ҝ�&Fh(���F
 X���z�B�ή�޾~�aQ1�J�S����-H�(�x�����5J,X	�:;��Z[[Z������
-l�`�����K�J_��U)ƥ����\��)�8��B
-3ՈD��FB���tڍ�P�r4 at P�P�����)��F�
K�����
X²�ꠈ������|� $v�M$@�븹D�Z�K�	��p	J2�o1&q6�/�
��
�(�6��Bɏ@i����KD0�ƌ	ǎ��"�M����T:{*9��P
����⹇	��~�}���<�r�RϜ�������J�&�T�>�����H%(�W�K��΃�=�қ׽��@��]�:Z�J7�]� TJ:s$��m�����eK��53E�Ӆ����D�	���
#H���%)W�u�>[��������;��
-��_x����H� Ud.A�
<B�'�%~���c�o)�����X������jS`��g�$To(et(!�#�����t&>�Xh�� ����<�^����r�dm�
*Z�
 
��65��^b������oGpXx�qB��RL�vD�GO���b*(� ��%��%��-:I-�MM�F��dMM�@&&4���+��{�s�
د�S*<]�C�-�F��2	rg0n�G�+C�(%\�:J�8(��4�y�XX�������7}&�h��"���<��Rҳϑݐ��Ie(@w�\��T�߰V7��Lh�O�[�Bx6 q��4I�6�@i�/�� %��y�
��
(��4l��'���r*M�R)`WX�JU����
�J�|����;[�jxT:���B*���||*���
�������yT�ihj�a�R�-!�����0�z(��w�loi��BT�!'
S)lW�6_oOW�vK�\`af2s���) %M

ux444��(�f���/�Zdcg���u�7ޛ���ڳ/��ј��Q�~8��
-�
N�K�i��\q\b�Ot0)��$�
w.�L��q�8w3��_����HM<

	A
��}
蟇�G�8
%3S�h(a�@�&`i����,�J�N.
�}�J��@�������:�S���"�A�7.�_�P�k��ۘI�@$�������~�74HeLh0.=f���%�Jj�KCs{�2��$�2�&���B|���3�i����P7b(�Q���(���q����QcƎ�b���j�ړ	�, K6�X����OHNςa,UV�5@�����撜0{����3�E�-#?�^�� ��|���ॴ����<����u�l��#xP��J}CI�4�T��1TB&x��
�J?���
�
�
���ǔ��J�ׯ\*8��Pi��
�*i�}\*�i
-���[�J���/])�䨄0�s�K|
o��!Ɣ&۱��T^Z\TJ����
��]����`��4�d�����Iښ�jjj�𣮡	M�;
�Ҙ`i���Jg����7A����
?t�8�^rZ�ټ�
E%8U�\�s�~7)1�+y.��>��ÅK
Il�+a�S̤�{]�� e�~d(](���>u����8h��>����V;:����mjd��:m|�j���

�A����;��{�l�.(�@䱸D%�)���6�R�C6!��w��7�� �A�
"+Tŭ�ĤF R]mmMM5~jjj�N�LL
�.qU��K��ܞ2��3��u��L5�u[#�(+-Aw�����=�v��J�(�r����)�_8&.�\�Ò:`i*’��|+��5,��� Kqgp���]+��B�^�����O��z�hu�χ����όegx(h�����l�
|p��V_�������tu�ѹ���G��Bi��E�	�|*�rq�T���O"T*�0&�PH%^��w�)������[
-���
-B���'�
�Trsr�SIe�ǣ�
�
��(�
=q&�P���^�ʍG�J����,�G�����ζfi�Q)/;-1�xTxh�?��
.@��V��i�%U'�GUUM�Υ�Ʀ)K륶�W:�|�	����;���(��Ԍ����K�*<��\"��r���.�dK�ʆ<[\�����b��ed�L�["C)'#5	��Xԡ{wb��f���*;%�J��T����3e��
�Y��,���q��T�s�0P)5+�|��2	�)�����%D����
-miR���k�L$�TWI$����K"��2�`1�`�D�q��GZ�|.)�ʾns������	!�C��]Z%����\<nO�G��n(yy(B	��!��P�3yXX�
aIU]s���3�LY,ѵ�fX:w:)53�])
-P�T����K��p�_V7���yxǷ�Wr6�Mm�	)
gi���(��PZd9�Bi2{�x��c�P���P����Q��f9�Ҏ��pD%d�ť�J�����b�O*���F��!��J�J.���T�H�%̣���J_�ؖPi{`�>L��sK�c*q�fJ�5�I�
�[v:�D(}�vG[SC���j�y�RB����Р
[}��]
�1�e4C�IZ�J**&���LTU�GX204"XZ���X�6�n�
�3$t?
-��Ӊ)�t.��\ۓʚ��uɗi1��D�4�]�<Z�ZE0y&A�P��6�I� e��ء��wpXH��/Ӡ��3
�Ф*�����q�qT�DT4�BT@P at VAvYd�D6Y�]A膦�YD�ɘh�b�I*fq�d��}�{�v�ne�q�o��s��>���������
+n���=����}�0
oz6� ���V�Ygem�����
T�-*C*5�ʺ�YO��<q{��P�|X�9(��&]�a ���%���`N�\�Սd0�`Rp����G|.=�ȥ��{���mF>�x��JP���h�H����q�������P��
�v��3�Q����{3gi��o�>�Rrz֑|H;q�L��K���K�ju�}�����hȌ�g�����6p��8%!��)�;3P��Y(�=�>�Qi�Z�J`�H���cǑJ`����o��-̅�}�yɗ"����4�y����e�T�T�,)�A*��0TZ��G���)��㑣��u
�|�*� [...]
T��fK��Kj.�;��&S�P���
�u�Z��./��NK�������
T�Z�f�����b
m,J`�L<@�٤+u�-54^f�j�ņ�[�`�<�|�B#��Sҳr��W�����j�螠����J�4�I}��1�U@$!�L"�'d2�7pnP?�7�Y]MeY1\F����Ȱ�@_�����[0i�PqFK�Pb��1 �i}#��-� !;ܽ���cR3�JUug�O��ƭی��])!j>��B�[~�]����{I�
�v���
���]hB0��`�\�
U�(<��5

�^jR�׼%�M��G�>�����j��u+aD�����(�ۤ�ب0*�J��Ci�
-�&2GKSxXb��Œ#`ɋ`)6!9=TR^U{����x�07�FU
@
�Ԃ��3��פq�I�����(l`l�l@����q��L���=\Y(�(-(�%�>�'��'N�APP	�G%��J��H���4�R9�`s����
-c�������`��ظ1i{LJxl��������	T�p�����
T�庍P�̄G�i�J�xT2YA���uP)*.�PNaIE홋�b���xd0ͮGnh���
�� EDJ��8�Q��T����(7+51&"������v�`��d!|sf�~K�L�,.�[bhD�D2����?($b�����ù��P�0U0��d�>:��r���LB2�����W
�.!��ә��$��	�JM�P:V�
�
������z�%$m�)T�>B	G)"�\4�鹰K��FˀJ��m
v�y��E'�d
9ZZu��E��x�u�S���5��&x|e�ػ|��t�;Im����X,���I�	�`0�\�E��!r�V��K��ݞ�2�`�}��3o�jd}����
�
�-zD #�_mU
��JP�9S�ܡX�bi2b��X� ,�E��'A��P�jO�9_����
0��E��u�ǜ�=�����

�QF�Ŭ�q���U�
�p���J��PZ�
�
Dy�
�{+(�Ri��JzK	�6� ���#bS��ʫ�[e�^fܽ7J[��^���^�Pb�?H	?��M�ζ�K�O�T
N*��*�Y*�+�4�CSi��J���J�v@�=��@���%5�/\j�vv�
#��L���s5�4��
��_���.]<SWUz4735!&<���}���fK
�FK�t��C�fAQ��
�3�>Ƕ�H-[�r�Z̔�����no����1T��G�JxsI�!���\�%��1�`�IM��=_J���H|$�j�X��I7Y&a��s�.��T�w$;#s
����;
�{�ŚUf�ƆK��h3C	�4�
梁��/M��IB��<}�J�)�)�'N_ O���
���&��-���?�xF�,���}N`�� &I�$��&���H����"�0u�\��B��G�J���%N���W0�[S�y:U$�T�����c�J�C�����|��DQ����L7n�(�P���JPb��(<v.!�~I�o�4�Xڴ�����' 8,2tŮ��H�^��s�s ��	�����X�QҸgJL"
݇o��rQ8L��
��;9�ma��!�Ҭ�3>��;
TJ~�T��+�t�~�a���_pxLBjV�Ѳ�:b����mp��ma6tO�
�M�󌄍S@��G��a�AGksù�5Ǐ�g�'
�*y� ��,�t�9*M��T��QI[�P��
-���T�<����_|���y�
]�W�!��L�둹�}��a��#G��A�
Ϝ�,-<��

�����f��Zs�K�O�3dҧx LP�(�)}�/M K��-�۝�vy��EF�%��g���U���'nk�D�$�bJ��%�h	���.e4�k���G$��wE�M
����wH[[�.)��_zJb
�,��{�����
j7B	��G��9�$r��=Cs��ց�21[�v�ƭ�N;w��
���SP\Q��҆�r
<�/�)<q{���R��1�-�
�/Q�
>��U��,j��P_�����K��&&
&�n��
���KOx\R�Z��K���^�oF�I�
�!��P��J�Q�̬["9Y�f0nC��G8a_���X�)�P�@��>�D��E�D�C	KN��>A����(vE��I�D-��d.
�Z�0�9 m�Nǟ��
���2���=bm������@5��ԃq�`�>x� %K%c��<(MQ����$�Js�#�LW����|��c�S2s
K�	v��6��O[�r	^���>�

K��2IS�ٓ��Ey�ic#��{{�8��̗*}�Q���B��&qT��P��
�d����
{0=;�Xy��sd<^
��
�%�4U��OR�<a?
�R��d*��]�����x����0�Pr��� _O7'{�M�J�
,�G�4����t--(L��Ys��u��c��Yn���߶c'��PH��	Ii��s
sI�"��H�	��-�)�b0q`Ҕ.��25�{ſ�B$�H��$�m�$���I���m��FLJE0��%%
���k��v{[�?���M�
�,�]� �?�0�\4�3�fK
�
���o���v�]>�!Q�'�L����8<�t��i�U�&�Q	��H��*� ��� �l����� �,�)�p/r��e_D at DQ�h�j��K;&�%.Ik��C�����ƌ=3~a�����{��{oV^1�~�
��^�q�.7"*���N�|�-{O�{>�,����z��:�[U-��Jr��[T��S���	�K����߼
\z(���'c��q-�%Ϙw'��gb[g.!�u�(uw�����T��Hd��I��6(���}��U�m~�
J�(�~&����`��r��f'Ww/� LPB2�]n~Q)H���^w�8���y>>�D\$@2�1��}�/����43$21���5QQ�l�m�@b�"(J��3u�D��_
J*M�4�P������o`XtBJzvAqy�\����?t
-3�e	Հ3r
����3nw�'M	�"�J�ՠ���hmeianFjRlD�����&K��R����O*Ay*,*Y�lrv����MJ��-<�Q	�q`���,�F�
�4��q
Z�T�����*]�x�wgF��;*d�e�yY���v�x�:n��051Z���������1}�������%�KstK
C�V��Ykaek�@\/ (,2&>1%m_Vn~a)�K��>н��1W�Ę\3.=��W>n�j�I�.�^��h�I���|���a�=֓�It�
�r�v�z�R>��݉�1�a�3�m[]
�m�1h���-1X�t�G�����C�4,e�� V�Yge�T
-��
�R�� �rl<��EZ��	y<vBȓ���J�#���-(]ώ�¢�����HjjT(�Q466���;�z�0
�`��s�.��#1�����x�
-�_���&�2!0���s�|QR�K;T|�@v�ޔ����� ���#��>{�ޖ

,�j�4���P�>�T��MN[�=} A;c@��3s�
-K @����D�N� x�;���d�Z�����c���
pL�
U���
Ȏ�
�
$3���7(��I��0�%1�&�T�
R���
1s�v�
>;¢v�	��	64�C�FF�a�S�-�5��p�M�?ai��
ەK����t��G*J��KM����ts���4�%l��P�}�J���&qTz�Pi!P���������/8"&15#�`)��&Ug��
�t	q�y�u ��$P���
F铃}�
��U
.:�or��Ѐ�۶8�Y�35FL��#@(��L�`�
s�l]=�y
@�
�S,�lD���������'�%U{������
\��&��xI��rS�
�eKB���ɐ�c�t_�$�1�n��`~�zt�RR� f	�Q����3Wg��6Vkט��[�x�п�X!��c��
:��:m�	1������
��F=�����<���) nK(*��S��	�5\J
2��=M�
-E�0�Y٨8Z/��duuu2�\^�AѤ0aaq��/_�v�ƭ��4x���|*r��Z
^�*_xq2��&ěQ�$��kW�j<#.J�n���s�P$�"B��R��+[��Bi�J�j��[�0.�K!sKk�M�[� AA����I){3�
,>\Q]+W(U�.
����Ys ����#��+e�U/ȀPPib���m �RW�J	q�C�D�l n
�ߔfP(���'�s��ԯE��!������̡	��	ƃ	�
�"� 2w��d
�B,���^��p�&�`� mdD��&K���ѓC���-
-YMyqAv�����@_ϭ��,�LV ���#�fpT��f�4��ү�J��JF&f�
�z�ED'�ٗ]P山������
0%ږp
d ߌ7��Q���|���ҽ��M����
-s3Ӓ�"C��]6�Y��1^a����Ū�P�6m*
X��1?��	X�L.72^m�n=�
����oGp8�^RJZ֥����֎��cC���.a�
�d�
-��x����%L=a/>¯�h�lq�RC�Sq�`5�$L�ID�:�TJ����
�â�Eigx�?o�-N��6�_gF7��
����Ξ5��3
2�����.���6_o�����?8"�xJI�y�������R��Î�ϋ
-� 
k9�MЯ��_���aO×��BMj����
���&��Hm�L^`jnim�T�ҕ����q��K�`�����ë�ʗ��1.OX���9��O�{c�>J�m����<����]�xg��:������9����x,��
K������
]�<���DD�%�Nۗ�[PTʼ�ե��u�n�sI(Lڳ�Z��HT�I��p���H�RU���f�`p�
����%
�J�T�DT���4�PI��3GLp��θ���A7hTu���-|���]n{�=��C6����ōN��u�����ڔ
uUeEyY{SvE����pu�hma
-Kx1PI���Qi›���J:H%]}\BFƦ�
]=|ãv��g��U�ʶn�i(Kt	��8M�9n ��?�P�v�R����Q^SQR���������v���U�q ������B�T0y*��-2X��h�oM���
��n��	@ًK�-�Ku�
-eK�j`�-1�%���¤&q��h'l��������� $a����b�-b�
L������A���\Q�
E	�;4(�Nj.8�?���F4�n�҇"�OE,�a���1!+W��������
���_\^-S4�w<�e	ōa����{\F�}q�[������ʧ&�j�TWUV��������ʪ��: S�R�%\��K_���*��x?ƪ|�^���mBs3>������[���X
��A}=,(��k�Pn�ݨ��tYhB�q�ai"��/)�>�d@�da	rيb
�����?'����j�uiD��K���4��1����q��x�עq<��l���ʲ�����`	�Q�!hp0X�ٔ(�&�h(	Tz�Qi
-R��9z�,Z�
2&����
��'#��Lт�>M���뼃��M
ɣt���5�z6��G��{;T�
؟�
�34�g�����:S���^fAU�g���t2FQ�BD	
-�/� �� (�"��.�"����
-(�a9,�專 (���c��E�I&3�Nc;�i{�N����~��
�N��ґ��}���~��9PI�����'�J��TZ�T�*�[or������s4�c�L^Q]�����?82���WO�C���^�-�䇹�%Bi������]��k+K
s3�S��
�
-;���N����9�G�
VB[j�G\�M
2ebfimk��H�ڳ�/0$<e��3�s	t�r542v_�%J������&1]"����V��.Y,Z|�"�#���[�I� a�m"���ݺ;�1dPoҡ1��
	�Âssqrt������[��Z�Θ?d�
1�������V'��޾�����)i�)5
��:{��F��XqC,�$d�{��	����� ���᷌�
^;�IM
�u�5�
-E~���Ze=��
S�T%ri����h�fu�9�r֛����.�gi1Jm�ߪ�g�4�$��Q���b5�_���
�q��-x�=׍���.
Jsa	/x
D������ $"*�HB�Դ
Y�y��2�:6��

Z�
��:!<��- at -;?�i��Dg�/E�N�9&��LP`�yho%('����z*1Ab҃������@��
��!�V���,1s`��B��3�kY�GY
�8�j�I5\ 41�&���	�\�Q��Kx�n_��֦:EYqޥ
g���E���x���676\���T�⩴�cSi1O%-��GCcsk[�
�>~���GN$��p9��\Qw��0=����+�=��y��@��
>����g_ɦR/R��cNFZJb|ldh���nW���6Vf��t�q*ii-���̥�k S��,�m����]�=�}��
<{�X�0��e����������[w�P�)X<�����ăi&�4��I5c�|Ÿ��J�0[�p	��#��I�`Y���0	2 [...]
���t�lk&)kkU�W�����RQ	h���o�*�Ҙȥ)�K�:�
U9�E���ߙ���&��N�u	���
1]�y�
%�Ɯ��i�ף�ӝ�G at 7ڊ�(@iɼPZ �l�l�1���;v")����˹2�Z6������p�t���ג����i6����̕�95��k�I� 0#RP`\�Υ$�8�6"�v�
�҇R�3��6Pi���f�3�0�s��
0s�����
?>�7<����M���NB7T�/A	��v�]k�i�u�LR��CaA��z�9;��b	���� ����TZ�T����G5�������c��$���e���-�iKPB�ƌ�t
<�4
��P�Y�0HC(��t��SZ�(/Χ�x4�`H�>�]�۷��X"��8+\���>*M�K�,S�%S
+p=���n��� {�Q1q�\ʕ����a�:�����\z�j��1!Z��$�KM|¤��������I�H$	�zC�4!a���T�-͍�EE�ۥ
�P:���k��l�&+
3�
�5�P"&IO�������r���vw/���#��S.��U�5��w�����ư��ιBa��>�X������k������JYi�\^��\^RZV^Q	`R645�\�42�K��o�
~֪\�Mj�=�M�!IҌ(
��K<@]�K�Jy�n���Q$؝��<�u#�����$���|!X2021��,9B�H��F� �>�~1
����R�-��t����I
���fu�w��?35^�q�'�/���m���r1����񐖰�@�
H^#�}�8*�͈TZT�b�S
�
3�h0A����,s� �O�C註�c�B�T>�
���۷7P���cCwou߼~���B^����r�XlT��=
;�i��2X�TZ�Qi�ǥ�"�JK�J���]�ohdfe�y��N~<��gf�TT74_�	cih
J��%F��;���{v T�|*��t�72���n��*+��x&����`/w��v-M�
 ��V�>c�R�K+V��L��742%�sptڱs��
��`�K	4�.fe����(1W�{*\"㛚
˖ &U2I�$
��|���$$K��X�q�Ɯ�6=E�7�I0.@�0d��˙���P����k'
ʟ��)�h�6J�$v�KK�}8_}H��&�m;�<����KHJM��),��ihn뀱D�Xz񒃁����A���&�0�^�˚�
�~K]uUEyiIqQa�L���/���"�j`01.��B�.�A\���իR�3|{��Y�3��֧�};F���yC��B�F\��q1Q(tg4nm�y�"1;��Ѐ��I��͙������
$��]@Ph�T�9�:��Kͭ�u�ã�L��}��)���V=������8��K4�Y�$Ϥ���;dl(U�
dC\RO%&
���Hm���d�&(AC"9����*�`,[����uL�7b��=}��"`$�6(���o�ށ-<z���.�
61���������-�����Fn�v��4�U�ip:�hLdH���nW�-\	�]�� ���oI�O�J+����P��8�x
���O<}�"aZ�����{{`<��W���.���@�<��a�R	�3>:t���f+R�� '3=5)!�Px��^O�
�
6Y[�n���@S	s	}�%�y����K�z6v��nwvu'كTqs)����K�{�
-E�Z
��G�b\���lk��%�I�LTf"�Āq�&�l������hA�(\B��^�f�/�!a�L"��v��eA���s�C�����
�����p��
i7?E���]�֨.z�����fG���)�'S�2�e�+
-eS덮>�{
K����p/�/>�Ipo�z��j*
&�0����BY~^nN6}9�������XLU*\ .1���M�?����R�?��ʹo�'���rypw��ԌjL�7:4���
U�-?��iݒH�pwF��T
J��L����8މ��$JQQ�l�ɾ]vpI�QDQQD1,z/p���"�""RԠ � *����cS�*nq��6�i��N�Ա���<�9�y���
��z>2��s�����6/���Kcb���	�����.!)9���^��i��R7�G�M�ޅ������ݫ��j���S�t��sV1	���`���nQ��ʍz�
(\fz*�ź
L����~<���)�4	�4���͓e���ǭLJ�n�����
�-<p��E(�%iu���&����?b�0n�$p��+����{�*
li�Um��X5H\�����D������ ;x2R�-F�q�G*�@�Jo!�&�M���A�1���5�����u��ꆦ��ΣP���/��>�p
b _�>Z?l���#��:��;��)mJo٘�6)
�cldh���,w�=�BX����$����wp�B�	���M�'�%�U���`����\
 ��9yj`P�%L���Y��2�tI���%&EL�G���0Yb�Q�� I_+�D��k���0s&u
��ֈ�m��zC�E	�ov4-8?������m8*J�$�D6^��6Oo� MD
����ٹ������P�N������h?�!����x�M�'AHz at L�>W��0Z�576����MeeF8ee��ʪ����F(L�m��Ϝ
.]��t������6�f<dR\��7���������b1�\ [...]
-PZFV6x��Xԥ��u��2.���>�\1l崿�����26���q���d #3"3	��
`Q�b\P�XZ"��
��� (�X*�	T�n0u�
G���_PhD̼���ƯZ�ݠ@g���aY:	*�	>p	b�>�������60�
���m��ف�
X��6�U��d���N�[��U\�ND%��O%��vT
A��Yy�KX��a�ּ�%ƪ�ƽ:w��%�XBN�%ݧy�=�[?K����q��9�KU	)]�+���\��H�1&B����*�S��0�m<�KT���������gY�
�J����KR�h���<d��E�H�0]<^r�(`�0)c��Y;�G�

�d��&e�	҅{M 	�E5	�~�S�0�m�1�I���Q���y�9�(�tC�b�"Bi����p!hv�IH|�./N�����/P�<eyšԌM������=��:P�ΜcXb/�.����Q<	��pW�����e�,v70	�d4��K�ї�e�U5uX�����#�z�Kx��U\���
�f�K��gVnr�cq{f��u�%#�2�'��ab��o�n~kd�Җ.(ͥ;
���r�
�܍/��ĥq�X�b	.�������b7���^�=�N�uiWcs
j]��}�X7�\bʮ
�ߥ�|������5 [...]
N�>x�W%%��
*�;:�zx�i��}�"195c3f�[��aЂ����Ж�#���=|��,c���_0k>`q5�i`܆΁
���PSQ��j����w���x��8�x���4�uQi<P��-!w(�AaT
��'�K�ڲ�������	0}�x�XB`��1�*�y��<�:�Gl l
�u\�JP�?��u��(]i,Joڐ�&�u�pM�����

-�ݔI�-Hg�	K�z*/��`Mxd
�
-�R�Y]��k;�	�.��\�����5�Deb�
�%�����I!G�%��?{f�#��L$V�(]�
�V�j�6��~�IG��4�v3P��SQB�F�#鎉
���Ђsv�a?}/J��J�E*9��zx��pOY�:%=+�
ņ���T�@����t[�+B~�&���]��,����̠/).�iw��juE�@����j,L
-.�".]�\��&;���6��f|k�+G�I�˳�=����	��B(�A���z{�����F��-��E��Q���~>
J�/
%K?
K^L�c羇Z�����F^WHu���a�^кΣ]���3J.1	�6��KGg��[K�?%"���M�q��	�L"&uc`���kj���Gq!��:76Ze��
J?a[XPi"���i��3!s�!a`�
�,[I� 2g�-�[T��,>t�=r��-�
�J,ck�3
-��;7Z W��KД�t܉K����dg����T
�S5�j K��$[�pzo��J?*M���4e��<�1�>1]RF�n�����%4
���O�1��s�
d�y ���<nI����_#��:
���TS^Z��J_��2n��!�^
��D%B�	?�9y]",a��.��i�0UP����A�2�����\���k=(�Dv}���8߽�$0Q���I�L�L$�gL���#����S,�#H�X�d$�cO�j��
`}�IG:;8�j*M}�NP�
Zo�2^��#������v4�t�K�,1os��
;=e�ڴ�����T�k�[W���͐�A at bO�2"4v��ɞc�X������b�vGaAA~~^^~~AA������h��Ĺt�WG>>�\����%
��|�_}eM3�|�>�Y�>
�����f|,6#��`~'�u}/��ƝT��$�jD_��
��Q�ut`
a�RP����
K��%{Y�Bãb�`��
-����J
���]�A�vt
=֍��du��.
[����G�������<��ԩ��l�ƍ�⑑��j�0V��
d3@�C����W
%���JoO��*9̡ͤ	.x?.>im��-��RSu}����N(}�U/���C�L#�!y��!|����
aq�i��w8p�,�=��
E��da5XΪAH��������t;5�������h	�yx�j�Ӌ>X��&e�q���fWSK[Ǒ.r�a�U��`�l
4��Vr�
�q�:�=�
�}'�:�o�]WYV�Jg�O^�b����;��rwu�ʆ1��S�%
-���L��7�^xT�
E]JM'�+�\��56���㻀_â���}%�x�8�d4I	��QƤ��q�ψF<X,Y-��8��t=bM�6�K�$�I�=�I�I�5��F}�_nNvVFZJ����erQ����zӂc�gNJ0I�.r��$���ǟ<嗋?\�����鿼��S���_�tjD�U�ij
(��
���(�	"Ⱦ�K at Tq�u$.1FK4��h:�M��L:m'i�֙L���{���.?~`lL����O�|�����+��v���5Kz�N���"�9):�Q��S���e�e���-/-.,�������������/(*.-�Da:|�ޘK�D.QHJ���d�?�EX��5�PV���&���nOK����38#�:��Kd
-�f���B	�ƌT�5
-^H���r;��P�
&�%�9�JA
v޾���C6lF]��Q�).����{�܅˭*�d_@��쏟�NV&5nü�
��U��8���I�8M2=t`�PA�NH(Q4Cr��C-^
40�Ն�!�&�>�ϠT�
DX��"h$��`w|Rjf^Q9�0�`˻誸se\L���ᑑ��Q�c��/�#�
xh�3���:�@3`>\SY������c��
�l¢��������
������ゅ�\���tlb2и�������^h�Xj��8����C
d��@F�@h
��y���y�MT�:�t�����
��
�8�1=�|�9z��Dui������=w�徨KAkC7l�

G���ͺ�
1���5��s�TE�3�R���&�M*��Ƅ��gВ���HV�+��G�� .�=�H����~��o�b!2	������`o`n�(yiEI
�^
-Md�T-�y�P��˼��b�䔐��vF�&�������&b��E�wR"#B"�I�E���|�0k�
�ؚ�
-dR~nvVfFzZZZ*�K�����E0��UT��
��Kf���$�� �3��6i�J��L���c���;��OU
T���t�
-!㺨�fk\㿊y�M�(�c���
_*�f*I�[��g�_@к�����������s�[߽���%6Gl��3���*����H�	>V5s7a�A4:�
��کg��G��E� **h��i��L/
��J3�f�ut�����6m
g͡,U��
-"�����
}�#@�'�
������!���������=R�E(5_&\�ܟ�;b��K�P
Ȅ9������T�fc;]��(�n
"���ED�!4FY��;�D&�Xz_�
A
"�y��
Y
Ƞ��D��@�Σ�ҹ3'�=T]A)�/!)�1DvG��<Q�4_e?�NMT���:0(U�u	�����KHJI���+,)��fk�\����i�ϑ��S��� .���&%0RI�5&mM��
�����ϕ��y$I�
�KD�~/"i�ӧ2�eM�u��5�ms&Ac�n$���m���EQ�E	�$
�uY�l̳�-��
�S���޳/5
eI������4��"

-�rR"�B"�h��a4�OB�޸ֆ�Gf͖A�����������^rr����

-���Ҋ�jC.��\R))��#���_������o�&M�4oϸ�i��%���+��OY��$|&g/�:�[�(�5���]μ.B	;���ˆ�ıD
-�`��m		h�����K�vD��R5�������U.����a�m���!�q/�>v�2�,�0��%sGe*
�U%�[�#�"	��be�?0��T�4y�Tl(8k�����Is;Hsʅ�O�=��E���4���޾�Gp�Ǥ�'O�Z}O�~��0
8��Z>�拿>�t��A6�����ȝ�6�Q5`���#���4��O�I*�~&�x>��R/�U�;���ӳ�K*�
=�tF���[��{)�i
<����D�-����
���IT�U������GG�qJ����Wg������)�T.	Q�=��upb�C]r["��jk�
�*-3'������b�,|�m�|���`⒝��E�b�����Hb�1��	��#F2��,=����GҰ������8����6��U&���}��-!."۾��*ӊ������d�F�
+�ɕ9e�2�U������e����
�Ġ��l��	��k�$���I���3����
��TT@������711�_�ޤ}�)L9yť�Z.ih�t�����N�U~�0�+�+�5mr�.�����d��H�8�F�o�'3	}�?S��$�5a��M���;�r+W���4Q,���
b�Wo�{xy���c���DXG�9|�X��32�4�c�<�v:4l&=�4�|�R���nm��(�,/0N�@;3��$�PM4 �#f���Xb�J�
JS̡�
�eC�j*�As.Js���Cs

�+�k�N 	.�Ɇq�������
R6�


|l~�e�������C�[g��<�
�
=TS�&�ޱeú5~+�=لQ
`�tw����$ˣ�D�%��*�c�Q�r
�*k�S,]�,	���	'�y��
�;��~9�.�LJ��J���j�./�ˢ���
FJ����� "o�t�i��f�ͱwpt�T%�_`кЍ����h�x/'����H�/��]�.��>��
m�`5$��&�/�'��L����N��0���T
��Imid�|�#	�����Fu�*Z)
�&{yx4w��b��{s{/�E�d���`?�n�j�S�d�`��9P�<�%^>+��B6n���D�Vu ���*��.��/�oU VO�"4Ÿ�n͞AE)/�2i���=�q��111���q�{�&Q0ef�Y˥�%h0Ë�4��ԗi�_[nRߧ���\������H�%�#y[d���>X�p�P���WɥI�P;�Vf���Jcb��O�&1ع�ؽ�h1�܇��������BXG�9�\:�璀T}ؠ nL����d��ұ&��]b�i�Z$��t��(
,2	�E�S�р,JC�)x�i`�X�򊚒�a�\���
�4�+f�pie��#
8sL�������>��I������
[{��==�ݤ���CY<��(�AYLU)j��M�V�.��M��<O��>��
��2M/���=DLoBL�&&�e��U����䜾"|
6t��C̃2�<z�<�S$�ā\�HM���ձ '#UiW��JoO��;�	%
-!� ��{N���*gI�s��Y��	Y�i�v�*:.����k�%(����-W���ڒ�iHU&�L�4�h����Hb�1��o��
O����k�F��G�i�-!.M]�Hz ����v�oS��c���
F"[{[!T�����
T+J�d�`mgH�Nq�\�bu�Z�[������k��*-mWop�S0��^�Hy$O�އ��8��& ��vk�Ȥ��^��Y�W�T�P�Xa�@��V
-(��$&!�
�f_�F�LT� !���B��� �������(��*�Sg�:��s�}�����Ja����x��|���(/+--�+--+�������
��
-��؞ ã0�:�6�Č�a��)|���i����iTw��՗��8`�)�`�$��
��,J%!-Jj���J����
1�^���%@l�
�\�@���K]�e��|ִmظiK�%�:�U
��鋿��i
�d�?�o�
7w3��s"��3���
0�6T?
�(�2
̙=�%�pL���)
��v�jnr��P�j�¯�
 K��
��ĶΞ���'��
�NPߵ������^�rD�$�;{Z3��E�@3X��L.*��HM����t��$5a6��F���9���ȑbB�ӈ�S�Ӊ��tyu]Ss�*1�m��
8H�%�>{`���Ё\�8���@�<�?Z�
z珄Ҧ�6T��Kj*J�*͏�5C��DvG�U%��#�#�9‰
-ao����~]���JRrZFVnAa���K�)�ֵwtnپs�>|ؘ+L�-
�Ͻ�d�%�R���TbԘ��-��)*��aY
����lI��>���F$
��)���
<�o7���3������ȝ/�%�n��ŠRT��-KT��g�'>��2u�̘y��mY��m�.�zS�wR��$��N��%�p��4֯�����L�,/+).
-�
-�B�����jQm�⦥ˆp���$m�� �����L72^���ɡ��m���n�o�ַ�
��Z��$���ŁI;�I�[66�VK��1E��8�Z#���>�	K#����	V@�u��K��R���jb
��ƛm:6A=6�Y�\f;
�6�o�J:C����?�͝I ��ׯa ��#�a�i�LuL�(�͍�\lp5���J�JX����Ns�,��K��$NӇ)���
}P
�t�r?����˗��ŋ}P�
a�=j ��PB3X�T_S	�NKN�?g�Kb�R
���
��I��
,�
*a R
G�J~4N�K*k�
iB
�%!�sH�Ew���Ё�G
�e
��{�z��x�@z�}���UeER���Aw�@�"
��y�^���?�&�QV1s��'$��ef����*�k�=.1��

-�j
`��C��U��w���[��E`�0H���Tg��~|���t��R
)�T[J��~��u��kI���F`�Q*�Aa��W�V,uL���&'Rd�7U�-J��|�s�2��@!�S�L{i���D
n��%�W�&Xڶk�r \�/�N
-ѓ�D.��$D#֮;X!�(�B�I��E�

�����,,
���WV�0
�Ҟ��P�d���Wlΰ���G����`���ۑ����#��u�%������o����뵌롂\�D%Z�4�4��� ����8��
KO��t����.��g����|0�W_{��uT=���G�x�.��:0y�1��_:?D�p���ѹ���ƨ��A��Hb?5a��
�mMq`�i�L�KZ�b(I���*j���
�<*=���׶8�e�J�[��v
~���.��t���z/D|����ܹ�T[��������K\%���pLx�1�hk������Ja��x�������������چ%-����έ;X�h��	�n
2����8�L
l�4�%��Ŧ*)�����@w
��2�t�\�T�ui�
d5m�˳����g�0�UV�:.��6o�A{�&
��k���
�}T��K�d�$
-��O�2�Y�'���TVGFY*-�-����@$�����5���&�&��m��)��4�ܘ��s�2R��� 2W�&3���9�y4|��*��h�)3f�ڲT^]�xi˫���m;v��8�_ĝ�'��q��0��̢��v�T�L
--,�����Β���K2�ИP���r	���{6�_ҜA0}�)�9(f|�V9h�n��'�^��n9 y��ܫ�3���k;{�|�-�M��i\�zk���y}���Oz;��7()�~i��U�
vV@�Y���K��K��u�������o�s��� &��#�P�輽�'�0Մϝ@����㴠
�
�qL��Ҁ-J�lE5j	Kჿ
��?��n v�{�����Œ�M�Ж֬�#ߋ#��@v]�O at xP�i��L��ӃO��OQm]�<D��S��
�fP^�073m�T�iS�	�,>��Sɚ��b�eiAZV�5!d��7��Y/`��
��Ё
7�q��
�8rXMu'�ٱ�m
BKsS����P~�V%��s�N�
������J�͇�\OQ���̸hM{�q��b��AW��{>�ZW���Ͷ
�ڼu;
-�[��-
&�
V&d
-�vf&
-�Ġ1�23J���ET�F�#�#J˙��%���Fm�$m�zN۷t��q}���L�W&�Ii)I	��-��+JFgQ�T�%�T�ѲĜ�”�/Ϟ����WXRQ]�(XZ�ac���v�"�#��V"r���5V!ɲ(UU�5���dgf����KO������/(,.�Z.�6\کQ���X���n!�z��n��&�*ß|����}�@�Ĭ�W��9댒����,�̗,��!��(���8��������%�K�%��S�F1ש~bX��R�4֕W"45�K.���x0l� 
&ю'�/�B:���ގ=|�$7�v�
~����1	
���	yi@��TTF8�P
P
-��p�
��lYJHN��]��EuM��0�� dw�(��u
��N�?����]]����@O����h�������g��	�p&<ƚ����J�GԈ4�'���'�Sg�,%�dd�Z�bR{���
��C
������yW�L�
S]�Z�TS�ꘛ���KJ����I��2�G=��\b�
�5���4V�
d���.͂����S3ȥ"���%�-L|�0ll
V,�=l�$NvI����#���G��ЌĠ1Qe��J���TY)�����J�#�
m����
�5�$[�(0Z��L&U&!�Qc����6"����
%��>�PG�B�@�DpCN�e)��-?TZ�������ɍ�w?�
�"N~z8���#'���Ծn�j���ٜ���Ԕ��SR���<���rå�+�%{���
�u�)����!>�W�&�lҮ�=�=]�?�4!@
-�ć�
-n�+��M��
����T��&����
b�OA��쮠�!��%�D@��O��\g�#ui�ƺ"���SU��;CG��G��
�GSDy����������F|  � /�H���3���i�&�N�6�S��?��{��|ϹW$���K"����^�V�p��R]י^�G���m�ɚ���
?6�#�vJ'`�ӫ橭�G�]�d
H�~j����^���Vͤ�]�U[+�6}�i �ҀY�"9�A-o� 
� ��J�
*���ؚKHI�s�r�@p��@͝}xd�x��7q�
-�4�I�7	�21���!�
燇Ho��Xo�u�vT��o�
f�4�JL�Y/�JS�bG��(U�=������dB��C��'��
�ԣ@5�C�y�@�y��0��D�
J���9�i���8�J�aK�;���1T�g�e��%Zg��$q����἗�_��TM\����E
�z�T��4� .T&ľo��d�K�
-#:�DellA��3�d%�"a�Ѡ,H� u$�{��۷��I��&����S�ˆI[�Iy`���ULb��D?�(i��c5��%o#�ĬX��q�I�����Ⲋm��\�[���N!r�C"r��&�����"0);+3#ݟ���KK���32��s�
-
-�KۈK{m.u�����9����V�w�
�3~���V�z?Y���"ҟ��GG��vU
-���xov\��a�:��Uy]�,$J���q��an,�`�Z�h��u�.�#���3�s

-�K6WTVU\��+�
�n0��QP�T��)�+����jd�Ox�$C5"
�-
�0x�$���c���������e
�K30�_D��^W��
�鲴>���(XR����$7��I��
:7
4Ay�cc���]r>�������(���0�6�V��D��ES��(E3�ΰL8&����^>�4��)L�EF/�	�>.>��#��T����������s��##2�ib����gh��G���4�q��1=5ŢtSZu��͠"�r�%��]�(�)]%�26��l.��� ��"��T@�l���b�&�ȋ�%l��Aa��1��L��ȳ�Ϳ>%Q��DW,,�K�"��B$V����I�d�5!�
n8����fR��nٛ.J��̌�iUQ�b�+�%{����E�ʶ��"��3uv�E�B\q)�E��E|L�%"'���^�R���~�@�/�������L9�(L�%e̥��%ʒv��x����Lw���
�xG�x�WioRVi/S��{}:Mq [...]
9������;9
&.A��{d <��
��A��C�C�J��!�M��Âܬt�'ɪJ�B�ߪ�ꀒ�%[U���,<"
-q�u����k.��o��^��fO���I'��X5��d�^'+��G���4)?�����Ġ1��L޿���_$3cY�
��HYdi�"DBI�q����+�I^blFM:D�VC
-#o
d���DG���*��,J���A8s
-�%n�)��
9�%r&q�qѯ/Bą�g\�-�3]�$��Q6/'
Y����$'%%�KJJNI0a�n.�B%h�
�9�Sӭ�_ܡ$f(��^����^�����8L��~��}EY]
-�5W��h��~`�fRs��kSqݰ�E�v���f�w�Qh,�H�
����
ť�.Eq]�~T��|r�K��K��8��x԰�ԴQ��l��y;��Ԏ�l���H��5��0��i���ǵ���
U�gQzKE8C-:
���4%�J��݀��R��;pa��T���$����S�Lg �޳0��z�A����Al0�ӝ
�'[�k�p��(��
�
~ib�\��*��f*#x�T�]�:0�˒eB�EԖ�v�U�?v��H
2���y��h
�2�ft����JT
�b׼�2HU
-���P�� �.AV*8�x�K�ĥ�[*�v쬩�
��U� 0��X\�8�1��hR#��XcT�Ʀ�?���G�AST%4b
ieY@�Ri�3.I��ڂ$26+�`xtM;wp���S�LR�F"
_��&�[��]�B�#��s��7�����KX�����
ɍ����~j��N�ϖȩ�v�$���&�z��Ą�����A&O*-4�����|��t� e#e'G�'0�1ݸ9u�B�݀�qߵI^�?e���>v���	�oTG�{�
��Tp�~"i�*��9��|�Vb�>ш�����/%�S��S@��T]Z���5�X>h�y�D=��6�X"��`��i�2	��I��퐎)
�jd�J5v��c
:i�c�d�$�I������ol&�q�`��(EM�=s�/ #s!�Ht�9�0��.,Q0կ��Q]�0��d�m���ӧ����'����~�����:M�
��<q�h�N��u5;w��J��	G��L����
L�	Ӫ=zK��hd�\.��� [...]
-*�ŝ鶉&
���Hb
-OP댔����DŪ"�Ͼ���
��ґ@$)Ic#jC^�$](��`m�$(�diL��l	1�(JN�#��$�y�]��b~��]n
_Fa��|k�%��fD�E<� �I�Et�E�j�hҒa����J&$��[�vmll�ڵqq���' L^&�ʂBťj,T�I���=}6�&�^���J�&e���?���0a���
/o��:��Up�3
mVW��Z�$�D0Ɉ�����ݾ��Œ��y�$׽�u)ui�*;���Kȩ�\N�D<6R �iTi�E����[�t
���S5�j�#��܍GDBpވq,��u5�T�+����B\�4��4m��$r�C��v7 ͽ
a����`�x�^R]�a2b��D�ɓmm�_�)~��'į���m�v�h
Z�譎9]�b��^�&
`�*����<f��x>���R�
-�
�JT<bPj�y ��<��
�8�����p�lU��b%U
W.W�^HAт�l�*,�U�K���#��c��X������
-�1�MN0�ɆG.�Reb2�3ݜ2�D���Xcp5�tF���/��ǿ��FD#+��i⒔�s��5�W���}{�&��J���$v7�b-2+��PrL�j�%+��������A��K4=�Et��|�E�I4�D���{�?�x�a��XV�b�9�ű�d��%�H�A$�9!Z�*U�خ�X��vv�����0����u�������7	6�����Wg�����>ץ?
�ůڹ}�c�T����������zY
���=&ǥ��RS��/ef�?q���?x�3����M�*�2uw��S
��V�'Y�����\K��
�6m������.δ�����v�rL�2��r'�l�.G��a�z��T��~�Î�d�y�
�4C:?�K'����7��O��]����+��hTj��
ޖ�$a�5Ԍ4���i`�l8Ņ-
-��i�:uzV_�����0�w�ԩ���ӧA(��§����K��#"�~՛t�Frz��Z�RUyiQ��؄�f�LƏw
�	e'M�m�8-.tHl��d
��<&����1 ����IԯH;(Iu��Jgg͙=+
���'�uI��J�^ye�ϥm�%���01�r`���]geB�&�`f_?��D���H'j
"�ʨ��Pj�'�BR���'��
-K�����bGB޻�%K��+�ڮ%����k�{�n6&�ܐ��1q���Q���i9�13
-n9��NťU5+�%�M�@g�w�_�]D�=��P��"Q��L"]a�S� ���,����(//�+/� ��	&&�Khp�z�
/`Bc�u�B|2f�M�NnRW=�H����� M���#����i�P$��I����YB�z1�D����/�)>������\���R�u�5+V�Y�q���ԉGR �M9 d� �IG�*�H=�ܽ�K�����"݋D#Y�㬠j��oK�8i��c���s�7#��0���U�� YP[�d�C�!��>:1�78844
��H}�fxR

�AnG�wv�h+�X�I�d� /7'2a�EQU����V��VL�	�@>ڸ�v�p�<���p����y
��<ȣ���}�G�?�-ёlGs(-��,+)�},$���4-�*�S�\ܣ���B.6��L�ؗ.�2!d�L�}&/E�LF:OT��H�e<��j
-fFY	� ,:��������޹Mqݼ��U���
�ϝ����դ�IP��I1��n�=&�_��˒܊�*�K�E�kj����E��E�I
�D�S"}�H�JġV�|CUU%�TZRRR\\�?KK�@�*4���i��4l�4�
��Q�c���&u���!m}���dƈ�ݒ���}zɥ���[�_�1)���8f^9{HŒ���.�,ʵXWpi�v��L<:�L�΍��
hi���oǖ�
<�o�2v	qA�3�H������?��q*��ILE�M�6��]�
Os,Kta��(�Қû[�v�e58�F#��`�}}�^��c Ԙ���|��Al 䆖$z�Ph#�7iJq3PN4��O�dY�BF�LH���讐
�
-R�@z8�c��
���<ze
h�D�$
-�ׯ(��Xu����J�SS�Ҵd]�h��ω�d��Z�&��'��>�����3�#hz�ؤp�QcT�=��2�|�=5E3#�DW���/bj�{ו�,I��"j��(/56�'$���Da�Lr�6QQ��Sr
-/B˒������7�n��&.��]Doo������H�HD|#tl1"�������� �LU\(�r�p�.N��~�0]��+W�3b���G�I�e��O]�7O#ct�����4M
�W�1�$���"��f�Xcj^Yw���@@a�3�����u�OR��%?pؖ �s��kJ��2����<)��j��₹S5��Hn�t�jh�0��gҸi`�i`�\��Ҵ�,9f9P,���С:�	y���ƒ򺺺�'J^o��C~}���
��	 An4I
�5�q����	�{WMX�0�J��J^Yz{F҄�-�>�����
-�H��6��a7���yt�� ��5x�đ�֦T��JC�s"JUi��ʔU�+�=p� �Ҫ(^����j�`��i�;s�ϑI���$��Db��D�Ag�(�ēO!)z���fB#�
-�rʂ�H7o\�fDҒ4zrD}�H��5�wS`bmT�
L7&!�-$�$����R��&e�
���%�u4��Kr-)�zv�Et�L"za�-'���������&
�rX%�4��6/g(�.\��3`�O��]>�v��%���O��^aV��><miH�
n���Rܽ��.J�'�R����΋u�O)��<�KL��1�v.IH�;e�n�6�@3Ϣ���5���
��dG���I��
p�g�k�A���'����kq���g�
GX*d[�f���N����Px�mm��S�!y��O���ڡ5�/�Fދk�P̃׬rMI�47&<+a¿
�RM�mi�\�(�WH���j�̣c�y
��qP��$�H,�<�?
�H���U�-�J���.I�3.�KrɔE�-��I�60!b
��Fc2��nP_�&S��
�� 2 
-:�о�ւ'��;j�)UEYAW�8�Z� ��˗�H,I#C���5�I46ї�n�NS_��b����G��4բފ�������K����#Ht�[ߘ�����]D�^���Hڵ�'��JaRA~>~X^�b<�c	�D0��B�ڸd^�
���4 at 0�~x�����b���a�&�2mw�^����s@�~{M���~�;y"N��hL��,QT�/q}A�֘��W��T,y�n�_��|��`��
��@�0�dڬL� ��;S:��.��s��2
pd).V��8)<���t���$
ե��s�+J�JS�2]���,ҖJ�%��n�#�v�!�MMP^ss
��wP^k��C~} 
Zkj�'r�C�}��e[�H��BI�Mx�����	��cj`Bӣ��&�m	�q���
���H25�Ӂ�<&��c<����¤�ǐ6(Yu̠t�&ǮK�����!��Ƹ�0�� &8YO�d�Q�3��I��Ĩ1�
��Qi��ȳ���)�a����
��	�D[��.>����/�I

niE���cR��$�D��ŔDYBp�v��@�ċX�n�K*�E��?�BR.�EB�n")�]kV{��HZ�87w�����$S>J��j�J�
��$���I?f|
Č;��U��Q��n�iŒD:�Y���Wp=g��
3�X��u����Wt��~$��
���#\*��d�Ć-�ԁIb +r ��H��t�9�
�k�yshs��!.���q ?��i1N�5��w�Iii 9��|�
�r ��͎�A�Otα�l#�v�L
�������5�>�
-�R�߻w
D�ޘ�Tx�!����L�M�uS�ai�gB�
��B�ky�;l {l �n ��c�̃�<���Cd�
(��Tǐ��
CMb)�K�-�\*�m
�҂�Ց����-p�����=��}J&��Yq3���)��W�il
:���J�O>�w��]�Jd]AX�,=�
M-"��Չ�}��!i��\�6N���ԇ��¤�I&�Q�2��w��Ҙ��x���ͻ�z��q"�H�I!�E�Dbˮ(�4K&�-�qo!יG��B˸P�V���{$����%c��x/ӯ*�+��šFD�
q�Q��

-^DAA���NE��Y\q���&i��CV�����m���<��^��^x>�
�~�������46�V����O�W
�L��U
Ó�>�$:p��dd[ʡ���L����PZQuh���?x.5q���&Ƀ�;v�{���PUY(���������2���GSl�_i��3��[|^��(��F���{\�
-�����$ާ(�@E�
2���
��ۥ~m�t
�Jq
-�q�Xڦ]PMG.1�GO��wb�ɩ�
�Ob?��J?���jS����H�
-#ؓ�lP�/�ŧR
B
K�i��4Q��
-�`� � ��1M= � ��1�`KBg�
{J�ܐ�Sii�Jme�*�9�1FkY��3p�`��n���VN&�
d������Mp�Z
xB�I���~��
-���%�~C����W4�E����wR��H8�fo\�z�I�>��J��Ⱞm%LJ�_�C)�R8�X܈%+*���t�N7b\7b�6�	!<:g$�Ez���$CRggGGG{�����S�0q�{�K
h���u�i�
���ݼf�
5�}6I�Rg
�����sm�G�H
F!��?p�M�d<��D¤-¤����|ju����Kb��M2��%;N�	*�� ���
9�@&������
��1�sӘ�&��HJ
q�.r
j��U�
�H�}jg�
�=�ťj��9Q���b,�J�\K

�.��%�Eۍ��!��'&�Ob?{����� |�ɣӰۈ�M"��}��(�e��RSc�2z���ŠҲ(�D�F�
�%�4�G��C����^�1N=jd�@�ψ,�+�k��2(ŧcz*���\Z�s����d���Y�8�zN Lӗ`�+�x2)�
I͎�d�)��'I5�
F��5<�>���
-�b���`,ϣ���H�
�ukV����f��K��q ɷ��(}�6����y&���D��cI��Òkn��~#�⍨��JD �E�R��ϱ�@jkkkmm��	�
L2�]ƥCG��=`�����n��0�f�Hj�?�Ir�:N��8�t|?GmB�[
��:g�\K�aI��(npƤ͝�[�'�C��}��@��4F\�\��S6��r�J
00�w�d"��սȬ�t��w�����J�O�k��᧭�UNi�ێgR|��@Â
Ja���@��]�1L.ɂ���S�ʨ���O��l��'�h���@$�"ؕ[d0�G�҆��A�e(գBK��jxYBs���B��y9	���zD���޺�K������O���|U�%�Q�p�WkY��T0!�`.�2�>�I��>�&E�&��c�Ě�L��
^K
�&��S��*ƙ�
-�2g 1�H$�{<�.M�j�dH�g�D�D����v̤�n5
JIok�C
-X�F���N�y6�LM9���Tl#����R���� m�ׂl6Lz0�@]Ѱ?ʞq��t���x%Ӝ�Je���$m�~x2�l|o,_���41�[�����3���0�>���II]_
7���&Q�(���KI�k�\�J �f
��ށ���Lr3�V[�G�������n�
�b�隧t�=I�� ��8`	
߽���b��q��P�cWIa;�%5
���7\'�%����&���S�*��>���F'O�m�L`	:����
)B	z�\?
�zPkH,m���"�{����D&���1�z�z�` �R,�Pj�I)]%L�V��s�si]�%:K�@��Y=G�1�eR��] j�]��g
&����&.���~F���O�;���@G4�F���&o$I���8��ΟwHB�	�si�(}�6��TE��X
-�ͰT܈
���t#��()�"!����/k��^KK
��
t��ɸß�8�x0͠f����,�(_XX�N&i���?d�{��Sw�"go����I�d���2���ە
x(�P�?�>����c.�@�

�F
 �Lm9��L�k���xF��쪻�n�?�G5N� ��6$��V�Ʊ
؁�0	jYX�@m�d��`�ڀ%3��74�z�;�	֓74����q��� y$�	|��Q-~�hoM�.�E]U�q�xyڍ�k9�
܍�M�>
-=L������
=Ѓ�g7%B��Wƈ�e�Rl���}�K[c�Y�`��?�`���M���L3;��_j08�{�&��$�~����s��^�S��g���ytG��PS"M_��$퐄�>
�IqtWaR��E�'2�����zm���t#���
R�F����6�Y�[-�;�a��f�}�� ���
4
��1�Q����KZ�Y3�Mk��y:I�2~�9���������sÛ�����ܐ���
-L����*M��P�ZRu��k�
-�ngTp�j
 �Κw.��L�z4�<
�y�	�&z^� ��}.�
��F"}})�22�j�￰L��-f(N ��!��
��h;�
�$֓4>B���>�ߓ���l`���`0I3�AK��?�*��:�
-R��onq���|�(�V=��
�>?GIQ�'��tK�(]�Ғ�s�3V�%�|���xK�$�(C�S2I�������g
4qؓ��L&��I���O�]>KE8�`+�J���
-@����撾Gw�F�$
����I�L�tI��a!X�����ҹ�
 ���	�ƍ��6���f���a(�����55�H��x�]�?E
�䈀i�����S(�:�d����(����=����|0�ᱫˁ;�d�x���2�=gR���p�X柆?|g����@��&� Q[N&���]b���:�<�u�%.�
�A�C�����þ�
A�<ɚ���?��DT*b��i
W�O
L�;Y,�
�^������˯��{�#��m�1�ܺqC��+bA�J
�]=�ި�V�K�L�!�	l�)�QU�Xr���ẋ��5� %$,���G��=��".�)�Z��v�~�Q^LR�e�}p��j�L@
�I�����1%>�=�גǿ�D�'��fb���
�����DBۻ�4&D��P��$T������
�1Ií�n�&�U�C搸��� ۻ
����8R�}��E�p�$@Z��hR0�
t�C�gp� ��3YͰ�dZ� m�6K7����Zh��Σ�ہ;�%�g�L�]bM���P�X�?y�+pIW���Am
-&U'��)���M�<�VxAw���~��
�8�R����u�L���X��
��^�SXM�$wy�`R��x�C���@�
�u�?
1�#�Y���G�H+�.��K
R����h�ޢ�6R�� ^��
����	�؞x="(��JŹ&u����KY�ޥ��B��\e���	�l
M32���H�;wa2q���!��?��,��h+�+��e�s$RM�����z�Jꎏ�,�ٷkfR���b�dX
-�
�m���
r$q�߈�"
Lm�GxJ�������q���a`���O2]�*�`���$m��=p��o6䢟�O�zEf74�&�>���

]bu��W9o�
e�q�Y����Ŗ�- `:f�����:��Eց�E����t��Q��H<�"�Q��v�YQ��L�.�Ej��!�s,�*�y�V&I,�I�$���
��`������5�v�*��ZZ���%�RJ
L�"�ܵ���9顢��P.ȁ)�-��e�]eu��4��WBI�`bI�THËA-�JWYm��Z~�j��/�{f���/���t#�qy���}ͮ�H�#�<�N/]J^Z/e�5���$&��O�c}3	^�&Z 
�Fz"?f�3"����?�C��7��\D2W�ʅ�-���#z$����gFI���Rs���1Sn��gh�\K�݈��7��D�����HI�t��h�˴fPS��Um�?�
^���yZ3�*�(�qY�Ib��`za|<�0�_B-��:���m"6������m� [...]
�ml$\ȼ�3)M�J^Ky
q
��$��
ȝ�@L
ȃ�<�xB��歔��T��˺_o�b��b�w��t3=�f��/����A(
�h�k��g��Pe��d	XD�����J�U���������;iX�	�ō���Ԍ�7�c��n�'��}1�fםm�$�"��_L�E�dy��y�>��>U�K��ɮ\�v�i������~M���n�:��
}���VI�?���^�I
����A�ZWx�6� S`��~�L!����7���5�7�����)�O�
-3����������dŸ�h	�i
K�yȜ�
ࡋ��?�Hه����7���\��Y�1ӣ%~.�R1�@�M ����P
tO�I[)�<��W�\���V���
$3
95q����~x�N
�(
�Έ4�_�ȿ��oނ�UTg�+���hY����Օ�r�I]zB�"!qs�7�x#�Nx#�Jd7���v+i����	bZ�������)ì��[���-��s6��Q/��H�����e��[i�I�]�+k]����%ঈ�Nb��א�T�ΟEj;v8,q>�,�M�L���
r���p���5q[W!r1�)��
e
?�1�]G��>X���M��E�4�0��K)�Q��R��G
�1�a��@�LJ��()9)./e �]�ɕ��b����d᪛������N�� �ڏ�O�Z~������V��(��J��F*��IR܋'u���^���%s#xW�nć#ވ���_�:��4/'���hhW�i�a�Y>?�]�{�L�
O�G~T�L�E�N���-o�'M�K~>s-/��v
:QM.o^�l��g��;�����2j(wߵ�dr'�u sv��-lw�]��w�@
�1������O�lD۶��[Һ
���ʣ�i�o�Cߓ<�
-dg����`%�}�#Z�R#��^Z���n u1�2c5_X(4Fv"=�e��4����5!��2{%6XB��NKFrtE��[�?��qRf�Y�,/�7bc7"w��1�xI����
��rȚAnzY���2ニ���G{�7qzG_x�fKi�};i'u�s��%vCL��SS7:.�<w��{�t�璚�{W�
��ɜ4��v�q�+Ž�
�[N�>�����l�����DI��>�<�\J�����
bW�H%��c
������nIϷiyi�x�Nzð�t	^h3��n
-���kB�d������Xs?
D�S��+�ً���)
-�I�b����2�mGX��U�4�
}�Q\	#xkCk�XHF�fZ(��
ޚɮ<ɗ~�<�Wqx�w�����L�R�
��v�D��
|
-zV�r�� IۚI�&t�
:LN;�,���
-DZk��5��y&�'d΃��e0�n!�n7a'��
�	g{�ѿ�
ڀ[T� ��:��0�L -O����$�Șy�~6%[��F�u)ud2�K
v���/���.c������M"'B
���f 
���?�_KP1U��6�@V�4زF]񕴵���*�ᤁ��������ܮB6O��ڍHߍ{��]:QL~ѐ
ވ�j&�����7q�:�4<;>Y&�#�ޡ+���Ռ'|ߞ�q�K��lؼ�i��Zt�:tL�/kGb��x��ܟ �dž����#�)�-+�-n�%�ԃ7�G-����v��e,�2�?�o�#
�Ƽy�:xBy�.����@���6b
'	dsS}-ˣ�7fe�����RL־��ɣ�W� �?ڶ�N�1@(#�^�R��Ϗa� ڌ�B���B�Z�Ӵ� W|$ɪm��?��q���wR����	���nĚ��[(�b:j&3�b�1eK�]3x���|
'ɣ4�6�ǺM����dW7Jj6�9p������%��Žbڎ�쳙b��j*�)��Dj�g���Ps7��m�8�W�-'M)�:t��C�
����6�F
t���Y��� ���ˤh��G塪���0����?Y
����2�E�
-/��슊IVl}2��/�
}��
��� Y�,`���y�G�IE�"�@ۈu�F�J�N
lY#	]�kII�}jU�FB,�.'�ln�F�F�N
�,/�y�w�$���fܮ��i�<H�d����:����8��d$���l7�9qRv�^�<����H�w
:�":�stb��;d��]׸�H���w�>Pω�f:��$�;��	||����묣5R�E*��	K�������] ����P
�I
R�Ϥ�%�b�iE��.y2��d�S�0�� z�@j���	��T�
-2b�,"+��FH�-6�}$)^է�&Up����bK�ۙ��n��ͩ��qb�vx#��=k��hK?Iw�h�O�w��Qwu��fٌ��p�$�T���ja���슙8ͻxΌ�;
�^�fϬ
-�e�x
�
'�T��װ�0����1{r����[��
-�(�ͤ�ԥ�<�c�@\
�?yuA:�w*���2lI�q��ڇ2c�����0�S@,0 cAAQ�Д;��G�2�
-m&\Ѧ�F�J�N�RC��#i��U�Jj=��pR�\��9ob���@d5!�n��r��
�0͞q){�]�
>�i;�<�4J���%
��Q��ȍ/-�������fg
����ԝT��Vg��W��:��>t��k� �"�r����5.͹r��|�Rg��
3x �ɹ2褿��EHd$S��h&
K�B������8�˧���R*�y[@�@�g2�K��XL�2�}�
k6�
u�n€X`�Z�0#��Ȭ�#?} T,#�*��d�Ҥ�Pj����֩��4�j�B�5B��F8']�Nj��sՋ)Ve��e>I
e<����b���UR�Ϗ�f��S����= q'5u�S��~�^��|����h��Z�Le�~�Y�~
pb�&�~��~
������K9�@�-T�r�@�<��{�!+
��b�.�2�b��MB
�d�2p�)����.���
-T��,&K����
-%���
��y�Uƺ�ݍ��/7�P�Ӝ��Ҟ�i�5���׌b�:Js�������#u=p�
�������!^��$1!m1����nD�#�S3p���n���r߳�l35[�H�_[�酪BK��%n-b41��z�Ί?տ��/
-m�[߆;�@��o.�c�@��@�]u]��}���*�mް�L��ď&�K夈I�3&�v����e"��
-͐ŝ&�^�Hu%���fjZ�����rD�KD�I��1�y���i�5#Β�d�
���3���^�M�b����K3��As��O[�g皚�mu)�Nx
��.b�ܝ�4��5��f��|_��x���o�Id7�'�i���i�4(�S�,}^r�?�L�˚)�)�r
-�1c��%��G���W�V�++UZi�HW��N�I��ܫd�7"�zNI�<�v�4��ʚ�[�d
e:e�)��qBj�C
�Soƾ{��'�:�4*:��+�Xl2j(��4��[�i%�C]2��襳�w���y�+��u7�y�
H=��@N����p1�f�|%�a�1F�e
Z<J���\e��d�}�@ВN��]�jw<-O���_n�m�P��v���æ@�-P���ɮ�۹��HI�9��$�3��P�g;"�!4D�� ;B�$�j�)��ܬ�DQ��\|�a|?�\�������+p5ӿKѡ���j���$Pi�Q���؅nJ�-Tx���7͜�r���56�!
 �)�&,��
i�TM0G؄����D�M��`�t��a�rd�B��
-p��Jj
-�'�3 at H�
�I���L?g�4�Df��O�
��?M�B��T�{��H���Uqۭ�c�}��3�}!�F��G�I�sަs��[���E�m_o2�\z"�Ѵ����$S��L��@5�y�?`a
��1WP4U���&�`
�>
-3
7҂JZ���^�fG�3�UIګ�s�

��1FɓdQ�������{��H%�-��F���������M�=g�}��y}k�f"�-Uz��8�2�ǹ�����i�8�uÚ \��b5E�<abs=͔9ξGؒ���e�<UV��b�B�	�u�
k�6�YDx%	�&���!>��Q�Z�H���p| =^�4q��Ȕ�����AG�
b������ͳĝ
��ܡrZ��ȓ�ۡ
9�3��
���}WW��Jt	����s�͔�d�+�VWX�,TH	.H����M��!� �u�37*�Yɓ�Y�?��٧�;��\��*;���`߿�����J�0yP�3W��Ü�?^:�q����c�1� ]
/ϗ,��!�%֐�ܥ�]��X��	-��k�J������\,N{T��(�$�>@~$��^
�[��S�l���]����
m'�k�8�����ԡj��q��� n
�
-�–�Ԑݐ����#p�f"� s�͌9�<fAQ������PG��B!��$���f�ݎ0��,�b1M����A�I���
F�H�J:�d�$�m�Б�.3\�=���
��Lvyk��u��!?:bL2?W\q�Q�a��
d�� 4�����D�f��Dc�4åѵ_,��;��	��`�껥4�c�

3�sIf���
)��>
���F~���\;���l�|g�8���p���YM �h��	�b?�=m3C�I&҅�i,���a�L �PF�����-<�d�6�K�펨�l��0�1�*�J9I&#��8����Zv��)�]��>�ݟ�����[/���6�~t5DYډ�2�� a�H$�)]��o�%�@Q�P#m]I�_�w��'�u���T�|�Ó�N�zv[F�\��H�|6��lg�/5���k4����������60D[��L�/,����R��3h#�G��2����1�j�#r��Z��>ʨ��EI���ӄ1ﻒ�j�Y��-�{�1�^���覽����
!��"Ӆ���	�E�iD�p��ʃG��H;ҵ�U�vu�
1I�%��
�k�qb��z��6������m������Ԛ%[{�6���� �
WS�PN�1@`@���+�Ef��H{l�mv¢u���Q)
32I�ħ��lMǕ�l��w����c���(Q{/�Vl}��X,���,#pO��QD
4ұ��#���ޭf�'Y�_.��f�L���T�
���<�����{
��~�W�I�&�����5=���:l#Q���֧�iDY��
O�N�[-��^�Rs/�

e��"�݀�D�P���
~�`kЕ�f.�������v��,vDt0K���fo�����XM08�e%���d�F#�ЂcFy�j|�^9:k�YJ���

��
󅺉2&�_���fڀ�V�
+ɲ�r���E5C���O`��3H�ڄ/JX1g�m��Z����GY�dI|O
^t�;J|"㇞A�
�i��Hz���{[q�*�ru|#�Y��
j���%�%�S�4�.�[�T�$�Ҽp�Ǵ 
��%�?��CO!�123�DƳZ��:���^�
j���2��,��AV_�Kr�W�&�
j��d��X����D�m�
�߹� ��O�
endstream
endobj
276 0 obj
<</Intent 302 0 R/Name(Layer 1)/Type/OCG/Usage 303 0 R>>
endobj
302 0 obj
[/View/Design]
endobj
303 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 18.1)/Subtype/Artwork>>>>
endobj
275 0 obj
<</BaseFont/UZCPCH+Helvetica-Bold/Encoding/WinAnsiEncoding/FirstChar 32/FontDescriptor 304 0 R/LastChar 149/Subtype/TrueType/Type/Font/Widths[278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 0 0 556 0 0 611 0 0 0 0 0 611 611 611 0 389 556 0 611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 350]>>
endobj
304 0 obj
<</Ascent 1159/CapHeight 720/Descent -481/Flags 32/FontBBox[-1018 -481 1437 1159]/FontFamily(Helvetica)/FontFile2 305 0 R/FontName/UZCPCH+Helvetica-Bold/FontStretch/Normal/FontWeight 700/ItalicAngle 0/StemV 140/Type/FontDescriptor/XHeight 531>>
endobj
305 0 obj
<</Filter/FlateDecode/Length 23361/Length1 60324>>stream
-H���{xMW��Zg���M�x'N�9W�G�J���}f0�W3�A?y'"� !^��]E�N��ԣ�N��A="�V%!�HnH�jD�;+��d��7�~k���^�}~g�N�(�E����ow�	��KhDBX��ā F߈Yɦ�6����I1	
�C
���c��Dgu�R�}���ب������g�>�<���ۜ��؄���7�m||bD
_v`�
-��IKm�?��>贰�(�� ��ę�
;= rRҌ������
PD

@ݢ���h%�	_�@�q�:�g;iΌ�`B��.
��A� 曀�q�0���ո
_aQX�֛�
��G�Vz�_�G��<���G��g-�X� z7�+y�I<-!�
��gҰ9���q��2\��q3nÝ����(~���>�jC&��~4��SM��E�i)���h=����v�E%\ITR�4e��ZY��T�)���I墒�<T\��+&�1Gl���w�8/*�#�XE�E�!�վOuԛ�M����n���z�>M����s�S���-���
�a�1�h�ɘh�k,0>7�g�KF��o�2�?UF����2#�Ds����hf��#�1K��X>V�߲Y���VOk�5�e�֚l-����&m~6[���m�-��!+��]�{�}�-�m����
�+
t�
���խM7�!
ގ��U�Y�zJ���].���~�^n�&d�b8����W�&܊;p7
�#L�$���X��Ԗ:R�����b≔J��Z��7��H�)S�P����&�Vy_�Xٯ
f⧔KJ�R%@��q"\$�ub��.2�^qN\�D�x��2 [...]
�i�k >�Xd|a��8k\6�7�B�QiT�L0��qf��l�33�}�a�K
��[[�,��hua����L|
�ҙ�fkֈx��80�f��6/��c��1�)ݠ[{8�
>?�Y����q��G�g	g�=>P7`��S���	U�q������
>�U��i��t�G���r�=��Y8��Y�{hǘ�l����$��ֿ㻆�{���l��T1
�"�"���W˳˯���_b=�4���3љ���qF;����g�3�9���,�����Q �� �p~+�Wٛ/W]�A�F�`��)i�<r����
-׻3Ԣ��„��=
z��)�]|��h�?��V|�xDޏŧ�η�����.̝�
�-����q�������i�S��q�'��S�f�n`���;􀪉I+�"�~F᪠�J�aJ��V���M�
޽�r�
��1�3�7�S���m
n�s�5U]�f��>R�s�Q5_������ܭ�
�����.�׬yy<��nߖ
r�m�Ѯi7���z�UjUZ����u��WՋV�KQy������cXK��&޻�`-��
�	�p��<H�
P	a
l��p
-�'���#����|��9���� .B��
p.�eȂ�
9�
Wy���x��w�=�B܇S`*$@<L�
H��\[f�LH�d���
Ra.́y� �×�B,�{�8��
-
-TQC	��9za|_z��G�Zx���
0

4�Bv� �cG܈`'�
O�삯aW
�ŜWWaw�
����7�7��b��!ؗ��
�qg��8��8��[p�p
�K9+��_�op��1��C	��W�Q�1�2\-'��j��_q>�\
���$��/>Gi͔��'W�7do�M}(D\�>�W\Gp^�N��G�t�nR��T~F������nS	��S
������]*�
-��8�p�
��o�G•ڷZ�
�}e�
���~��
 �2M��)�p
���
-�'�D6���rdʹr
�W�i�N|+r�X��(m"�S{q@��e��$�Wc(��5��j�� S�,��S�h�@Ar��Av�T��L�L]�5�M���⠸�ƩSE�< 
-�-Q(�kY"W��'Q)
�*�H��*TCkh�X)V�ۢH�Z�X<OE�xסH��R�e⎸�_
-�r�
���
-*
-�x��]y�?�r�LUUUS�J��z��(�����_
�UVi��s�9�OO!�� ���J�JZ(ҋ.�˺���du�
"��e��{�A�YB	���K��`�����`ggdgǝ��d��޿}��>��1<�G�[:�d�8&��o
-p8���ܒ[�P
��y��6�
-Fc
^���;iC�����\��xiI�#
��{����W
�w�,S��T3��0>�W)�QZ,?��1~�HY��Q�T~U@T>��*����1Y�j��b��*_�'�ɪ��Wz��U�~�K�S���2h�85�2�MST�𧼜?㕼B'�=ҧv��<E=�}���
�}���1���l��He��v��j�X
������5i
�H�E\�u����
��%�����p
)�����+��
]w�=m��ɿT{ަ�t��
�e�9�b�گ�,��P.�q|�G���z=���$�=.ȅ�}��~o�X���\�>�.�@&;��{؏��(x�u)
�a:X��!��n�鲺�ި7�}z���u]�)�֕te]E�骺�ެ��� [f]_7�\M��9�N+��S��u�
���D:QN[���
�%=[���4�q��
��m���~]�i+�ʶ�
�o�i�m��������5D
�n<@
T����V�T��������&��D;�imt:9]h:�X��U
Z�ګΪ��*���
�
TͥmG�(�LE��z�ݶ���F�Qz��a{�Zj$�0�MS^����ު��F�j*�2���d�q{�`�r$Gq[n�ܑ�M)S��`S���#|�S�$����yN�s�����i�̧��qzp��3�y�&����
ؓ������6�t5/�lZ�g��j�zY�4�MO�@+Lo�3}ԇ�ɻy'�U�s��V�崜������CZj���C�dES�
-J�.LEȇ|ɏ��(P1
-��T�JR)
-�^�B����rJ�U�JT��PU�jT�jPM�E��եz�z��SjH��15��)5��Ԃ©%���Ԇ"(���-���ԁ:R4u��ԅ����u�
ԓzQo�C}����%�X��
$�
"n
&&
!.
%6
#&
+.��4F\�5���$��1�kbQ�C�������X�����d��
���|.�'����$�`��>�8Z��K?XD���K��Ki����j�4��
VK�X#}`�׆^v��z�Yܽ���v�A;�
R�~��~:@�C$J��B�CNo8���Iw�tRr����N�TI�l<O!��$
{
-y$��I��#��p�D�5����o>��H��f��ռk��5��	�T�!	y=�I�����O���1	�
�p%	YB��C0:	D�Gv��p�	�
�$ ?ʄB���D!1����Lx$�?ءb^&�W2�1	��s$�`�/i���Ϥ1��[E�E�qX�����c	>�R,çX�ϰ+�
-����_��c
�
���[�$��H��
���B��}DRh
�"瑆t\�E\�e\�U\�1	����
��E�|�;���X�F2Na+�a;v`'va7�{��q q�8�/�%����w
�Q|�c��#	'pR��@y���(xh0lN&��ԣ�Ҳĺc1�Q�bP�Q~4��2���	(�;��	���ʨ�MBET�΄
��:��z��Zh�F��%
��	� �֢%���4C+�Fdv&D�
"��x3�ڢ��N�,�p���{vO��t
}���/��n��P:�"��L���T�̣`
.�!7Y�g�vu3�Q��f��z2�r�w��޵2�͒�Z�X�|2�
ԡ�r�a�<%w�eֳ�%e:WqWظ&���Lr�7ݱ���d�
-#|4�k�d7ѽ'}����`w�P+[
-DA5�]'
��l�&�8L�n�{]���\�/j���9a��'
e�h3�"a��^�ϋ�9��Unw��.S�US(�,GKC�L��$B�'Ý�Αk
��u[
;�A�i!���� 
dd�����4G��U�B�c�J�\��֍u��_Σ�
�%I~�ܕ��&,��<� ��]U_���Г���%rn݄�%�T
��>'ʐ�@��*�"�%�� ]�U��T5[%�LOmO�f=˼e���Mr��9�����<����ٖ#.{����]��٦R*��Gث�� \��D�+ɷ
g%�.㚜��
-Q���/Ǜ�f�5*^mU
_O�g�'��⹫t?� ۿ�/�ئ�;��sv
;����y��kǐ�ylj�\�$C
@m��
	
-l��H
M���0C
��`0	MM�hUtI�ɨcb����"ucS��M���X�A�4j{�{
�!�?"�#������;��9�s��)�(J������O3����YX4�hj�P���Ӱ.����
Pٳ������t݇+���i�*����W�P�<{�����:��@K#�"\�6"F<�,:C\��hH�\E��^r0��
�"�O�NE�	��3�y��^C?CG���)�'����w�{�RŴbF��2G٨<�Lc+haa�;�����~�P~Vu+�5Tov�8�]A?��(MJ�Y��
Jd��j^F?&_�g�k���
-�g�C�ZX��&T�^娰�x+ǖ���X�&#c(.*,���yu�*G��)�����QV���T����|

�E��Ȃ+�4Fd�r�4R��ݏD
-�Ha!�X/򺜬�g�9�&p�?�+>>̊I���I�����
��8�cE
e�b��X��A�K<}s]N���r��XD]��1#tR�_4�>�h�}�5��}�!���qa�S�]���"�;�����K�c!t s��{$��f�9��ΨdņB"
�DT�C_%2�Od�r����C�|�E��b�� �9֝
F�Q�8�zYHK
�D|8�!k���(�<�qVT��X|<
-�Q_h�,��|��@h�$���y��bP.�ֺ�J}g|1��~)����
�����
X����
�)��X)/Z[�����a�
-c��=��K$��H�H�{b��༌ؘo^ܸoVe2K��
C|4�k�i ^dz���,������(�ϑdJ�PBp��}P#Mg�Ǥ�;��F�"���s%P��7�T}���N����^�r�v�\%�
L�
�
X0k ���`�l�g$��1()�.�pa4
�`�!��6�8Q[��p��TKy(9O<
��3�� A
-�j��pW}���8峈�/
СB���+�N�0D�.(�~r�q^s
h���>�er@�p<�
�x%
�ĥ��
'0z�!�;HN  x�O�4�s1�s +,1m�~X@	��d�M�	�Am�L�y��,��gY�[O�
4�J��O��%�۟L�c1a�vȄ׮����Za��	�A�O"
xz��-!��d�=�	��=2��"�a9���"���7��ᾧG�	�'
\Lx3�
�	oY!�[�C��e=�p4�$‘‚ED�	O=�8�mK�=��b��A���|�
-!�.ylY�w>
�.мSB>�D>�9
��"G����#V��ъR�
N)KI�KS�$I�U
-e)F�
�[�^���j�=o0�ݨ��7�KyQ�7��u�
zN��Y��s����'���0do�|B�P;����脰��hr?����?�����6�ͣ�[h��cUQ]Q])9(��j18[˕��jg���0��խM��f�9hq��Lmޟb�P7��d���$H
��{�nݪA
�9��0��K�����hkq>V(�E��zw����nj��J�������)�L1W�
�[+���ͅ�'��Z!���o
:G��ɺf82ZY��N��M��w�
#Ȓ��/�rɶ�Ё�~n˛��}�J�c
=k�����on�j��w�:�n�/Қ��-��*�V��j�ѹ#u��wY�5�T+pT��Z��BO g��4�N.��*Z��ͽt@��
����sI�
-��
�
L�y�0�D�7�����fﳺ�8�;J����>%4l���~YKj����)��Em 	+�fYˢ�)
�1ۈr�2o;�uo��N���A��f�F_��s
�d��f8UW�&���0�՘whJ>� '�Dz
j���}Z����
-�Dʠ��
���̫#ǿ�(}��*"�0>��g����}e�su��66r
kp5��j�F�Q��ˈA
��&
DH;������1J�27�M�M�:��d4�����߇T��$T5T��#W�ֽ����,NߎȮ7�\E�?�9�M<���K�߈P��k����q:��p�xj������W�DȚb�vP�+�h\����cj.�)T6 ��r���f�^��_��I�ޓ��z�
�y�
�Y}�P�
2~=}��<����6ׅ��PC�RV����͇֎�f)��f{')�Vg�c��(R�>#
-
-��h�j��H&Ϙ�;��m�"�ڦU�9��1�s�z�ɜ��](y�%�
y�y� �Y��-���
fC
����bL|v������$Q����
�.�&hE�k���\�833�;�6���;8���
B ���A�,Ay�E�������+|�ݻwa���wd�7
�qD��h�1
-�V��3�*�ik���0�h��X���-�N�i��6:���:j�i�'I۔hLk�1c�L������Qٙo����9���9d�斓mn՞
�p��N
-��NR��M���ry�~�6����
 n�\U�a4;gaA$�匤�ԴQ�Z~к�s��|�-^
-��\����ߔ"r��!��O?]��sU٧^�}���/����m~r���+3��gR�)��u�,R�rx�zJ�,uE�B�{�<S.�-1��n9̑⊎9%5��^o���e��oV5 at z��*�
7�����ǎ����c�<�O�)ey��J�$�?���/�1rO);ג�@��2�C%E�6e����.����B-����Xb_��'.ʸf	�OJ
�+�,���z#m�7�������UI��l[U�;'��³�*˕��}�1�" �߅
G��
'�2�JD,����(5HN��p��4���ٳ�XO����cE ��Vg$�H���������~��ҥ��vY�����+wS���Lm���ΰ_�J��&�f͚�r�T���~���s��9c礯X��Е��
ۢM���❺�MKKs�N�3�9�Yg[gS�6;�ΰP�59������:�Ӥ©��i�*��H_��U��χ��U��֣^_QA�d
�ؽ
-"R��δ�{
-�I
��D炶�/kr��J�ȳ
�On)� �:��:+���z������2�K,g�^P�f��E�T�5?D�2D�@!���[�.��7�I�m �a�����
v�:���'E������55�1�7m�����
§N�j;�tx�W�^E��rڙ�����}4�����c���� 
-�0��c��
���z�+��30@�X.�o�V��V�c��\�yV���b�) Ƃ>�-��-h��e���/\ n���Xs��=by����v���|� P�����W}T˲�N��sD� ���^����Â��a|�b�c�k�E	`0��8_�����^�W
���cY���p.��2��� ��� ��>��o��E�O�ˌum�vC�0f F!�`���=p6�W
����yT'�/d��,_ ĝ��w������G�`/�ljW���|�
-�VZ��0�c�An���½c�fZ�v$䬴� ��J��ڿ���%�]J����
�r
�~M��m
-SS(����3��=��ػ��>7�o�}��g�e5m��A��-�I��
ض�k�S'�<lw�{���z��q� �N����	؃�{��~'�]�
��e;�
+i�y_&�
�;��g��8s����{��vR��`�[�o[��䳟��`�H���]]��v���b�j��{��(X
,c����f[�{����&�����S𘹬�_�x��DZy�xf�{f�����zmز�$�z�[�)2; 
t�T6S�{y�v�9Ƭ��/o�}
-[�1[��%�z�
�?�7�
�+C�1̱��/xx��.
�������c9�3�qP�W���2�%�
�ݚ�n��r��
�� S/���Pp�{�������_}C�Kw�v���U�lڋun��(g~f�x=��2�r���\�=d� �
\4�B_�3�O�ܯ
 � ���sY���}~g�3��Er��ub�jE_�(�a
[
�َb������|��g�$d�A���_�ϲ
��S�
-���8��	��:���Vo����'BW���~��t1�J%اgw��
u#��N��}�S���y�;�[� ��;a�06{W�
��US��s�&�*X�Lm92�m�rbM�
��6a��Vh��9���}b��k�����w��9)
-
����l��7`���5����!�	��.��w�b�
�"��X
�<��/�>
-r��V�yy�M�ֈ��-����0�@y��m��6Q�:�� ~
Q�!nsny��8�I�T��q��;��:�#t��;EM��Ͽ�w �S
�
`
3�k��Wz�o��z
�n@���g����n%+�'b�rl{���
w�4�~w��#�U�e 5�0j�a�2|���
���y���� t(d��]L"�F.eE(9����9Ok6"�?)rz3ƛQC|C�ANj�#r�f�T�R��O�\pn��
��7�y�
�q\�oֆ\���pn��
��
Qk
��U
	�{L�;3�/_�E��*h+�m��8�(^�
.���zF�.5�����'r�dc����5�=f
6���\�g�C�%�G�
E��k`3F�ߋu�4�
G�
���g<���X=q���
�h�P�˾������tt_3��o�3�&\�o��G�
�>y4O�
91&���>���l�V���:�y@�
�fN�Y;;�_g�e���:!O¾����|��	�K�뙇q`�s��A�=�7P'b��d��y
��7֙<a��ݐo���c�8��}||M���k;E��	k����|�9p�hg)���������������q3<��A�|�8���0
�_
uY��Z��� ���S��1��?� ��9��˩uA����d��RU��F���&����=�����Q���/�પ+��}nB0�Gmx�� �E!
6�J�����"��V�G
bA�'��Jm
��v,�[��t* *#8�)3P�*S*�4���g�K���W�'��]���>�����b��1#/�5�
̌�^����C
m?�]|Ѥ-
��f-����A������eޯ�{�<�?�ZQt؍,�����f
��y�o7��T�Vs\�X!�jj�*���
�9�Y&�2���9��/��5��=sD�.#r6��r��f�v�j�7�3 *ĵ��̍z+&Џ"jf�%
�R7�d-,ǭ�͢�.�u�ק3�ܛkH�����U��J{���
�Օ�w��T�K'�Z�D	�~��Rd��<�%����

��XnU��ۏQכ����,̐u%�3&|��@?!�K�Ɵd�ÚE�x��Ԙp��Y�ėR'�kr���١l��Փ{��rlJ��X�4n���N��Y�����.ϟ]�/3���nj�BP���H������:Q�ߣ�Wr�jZ�؄��L�=�ɼ7^Q�
�^
-ђ��JP�xN�m�6f��������mq
I^w_���>���F�zZ?~^벏��vʼ�����\[2O
�3�.[���/����\!�~l_?]��یY�Aۑ$I�Y�L����k~��7k��ң��[�s�5üǩq;�纂1`�֪+��Oݧ�yo!���m�W����S����
�e��%�X.�"�Q<b�"�ZsS�����;Q9�����2�}D
��d�Ġ���%��6<��[����U<�c��6��h���B<�'e�&Ab\@���䠶�;
Q�y���&�Ś�.�:*Dv�����������ۢ��X���+�f=�F��Ed����N��cK�
~�
�:�g]
o�j����}�G4���%}�j�� ����+�:R7�����؞̸�
��X�p��N�ɜ�d�K2�%�u)�5%eu��ˠ��[ݿ�%
�;���O�b�w7\�Q����h�=�pM�BZ�y�+��Y;D���c߉���m�&>�r.�y�����e��cL��c��.Ǽ��b܏�g0���'���H��_��&j�UX�b��W��e��]���@/k ��t�_�.c���ߝ�i�h��K��j{�Z�ϯ�
ƛ��{j��s����p�\
-�Ф�A���P�s�9����]�k�#Qb��\��$�˦�<��ރ�r���78S�]��Dmp���5���gP/�c�hC��D7��IԚ��産���c��L=�>���9�f��8gq����2U^�7�.��>t���Q;/�v
M-�L-
�Vn��YK{�G��A{���Z)-�N��L��0ay�)=;��X����B��N��~�Q���yy��
��Y�yd%�<�q&QO��+mX��|������xw;�z \C��';�κ��8��>�ޢ}�4�̏ԥ�:����U����U�̌kP��5�/ї�O�.P[��Pk��E��L�{w��_�k��]g��z'%P�J�{:T~Q#����Fg*�j
P��o
Y?�P辀w$�Y�b���Lg�:*��+�0��'��6D�QCi�}�-��3���2�
��YV%s��8�
Q�t���1�L�V�f�F�q����a
�p�na�5���͒ 3�
-3��)�<�#��"23�iLcn���~
�B�}���A�(]ߞ���l���vʨ�r���XM�?��v'�I�x�����B��F
݆��b���A?{;�x2�ь�[y�<��n{X�=<+˙?�8'ܧq|�>�^"
m�T@�k�7۠�L�8��@M9�6E|
7f����P�H��!j���N�T��O��I
ý?ڭG���1*����oʭ)
��ζ�P��?�}�
r݌�H קX~�
� ���
K��n�8/0�{#�m��|����M��y���"�ԡz��5��a����&���Gˆ�{�X6�x�dY
����)㵺��k�
׉���BU/i�OgҦ�|�}U�
-�ۿQ�󰉎��Ӊb�i�GKY����
��֥m,���5S\�9��!�d{�\?#8os0�����C�:����� ���f��ʹh�_;_e
cr���!�Z�&3��'Xw`���:�����r3�Y�/�qb/C_����9���$s9&ͼn���@a$)(���}�J���J�"��e�9Fry}/m=m1�@r�Ė���R�JJ��lZ��]�y���D��|�m쵏����x��S��!]1v]���E�����A~
8�pz�ޚ����SCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB�O1��
DK��D*����ɍ��.F�Qe��v���]�&k�վ�L�׾��X�}��oҾ��F�{����Oc�ہϟNh�`���}�u:�o���C�6Ҍ��w1�oH�q��0ʘ�|S��k�C��=�[,�e�Ӿ�\��m�����=�i�wT�m��0�
��e���&�
�Y����|C����
-���� ��O�rU�{H?�	���+�;H��Z��a��5���]k��=���J��S��
-�(�(���!x;@q<8\
-X��f!�
���R����ݵ�݊{q�;��
(�s`������gw�yw+
��5q�>��)N��6qJӾ�ĩ̘[M��ĻM����M
�p2�3(�D�d�,晻>��S��|8	���L���}�P
-��X����#
=�
�5�z5gxݷ_"H��p����
�B���%8Ho��wE�x
.��t�jD�^G���+��e��V�� K�-�*��	�,���O|�~��ѭ�۰;<�Bæ{�V�eu��]m�.�ۨ5
v�7�mxToQ.��e
�ZuZ?��p��]�.��k��i�S��tyԶ�����C"�N��#�m�ĭ
�W�q�*�}��ۆE�<����~�U
������p�n����Nã7��
gg�
a8U ��#�U
�g�*�
�p}��m��t���!���
��n|v4
�MW�یHO��8��:�S�b�[WE���P���;&j�������f�
���~M���j6c�Ҋ��C^
_ڸ���Ո����uDFlW���7��V�V�WLV�Fƶ���HG�5���v��s4n�����nǭ�^��u��SRE
��O��U� ��1&r�w�X%Vݡ�VOϗ�糗�r���r߲��5��F��S�0�����9� �~������
���u|�����A����}s������P��\J�|Ӝ洎g��j�&��j^&U��\�EJ�&�%��� I'�%�d�L�Y��Oj��U�Iv�U9$��ܒG�J>�/�R@
-�E��.�"RT�Iq)!�RRJIi)#e����
-���$�U;�RU�Iu�!5��j�����ԓ��@*RK��M��4W��BZJ+�fk	W�Jm�h���v��(q�-�

EG�� 
��tR�E�J7�.=����^�[�H_�'�e�
�A2X��P�4r���Q2Z��X'�)}�$��2N�i2]f�L�%�e�e
��Y(�d�,���L��
-Y)�d�����N���(�d�lA�&�e��]�	�H��^�'��
�CrX��Q9&�儜�SrZ�(M?+��\��rI.��*��ܐ�J�o�m�#w�ܗ�P)�#y,O�<���B^�+y-o䭼���A��G��H�d$)�!9R %R!5� -���	��?�g�ȊlȎ_�9�
��y���(
�P�QEQ
�Q�(�R(�2(�r(�
-��TBeTA(����j��PuP�P
���M�+����7�@K���
��
p�-�!Qp
h��
xe+b��N�.�n�
���
��}��1 1�1C1
�1#1
-�1c1�11	�1S1
�131
�1s1� 
���K�
˱+�
-��k���	��[�
۱;�
����
��>��
�!
�
�1
�	��)�����8�󸀋��˸����븁���pwp�p���
�	����^�^�
��
����G
-AR��џ�	�����I��ə�)�����i�tL�
��L��,��?SgVfcv��
��\��<��|��@`AZ�B,�",�b,�
fI�bi�aY�cyV`E��+�
-CY��X�5X���ڬú���l��l��l�_ٔ�؜��[��l�p�h�
팠�mَ����.F�=����Ʋ;�;�
����{�w�bo�a_�c�@�`�P�p��H��h��X��xN�D�I2��e"��N���&�9�38��8�s8��8�
�����K��˸�+�����k��븞�����[��۸�;������O��^��~
�A
�a
�Q
�q��I��i��_<�s<�
��K��+��k���ɿy��y�wy������1��)��9_�%_�5��-��=?�_~�D�FM���x��_K�%�i��$ZR-��\K���Ri��4ZZ- at K���2h����� 
��7�e�-n�j��l۶m�ڲm۶m�����C|$@B$Bb$AR$Cr�@J�Bj�AZ�Czd at FdBf��,ȊlȎ
ȉ��r!7��O�E>���(��(��(��(�����J�J�
ʢ
ʣ*�*�
-����j�j��
���	����Z�Z�
ڢ
ڣ:�:�
����z�z����c bc�b�cFbFc
�b
�c&b&c
-�b�cfb����9��y��X�EX�%X�eX�X�UX�5X�uX�
؈M،-؊m؎
؉]؍=؋}؏8�C8�#8�c8�8�S8�38�s8�
��K��+��k����[��;��{��x�Gx�'x�gx�x�Wx�7x�wx���O��/��o���R�P
M�̀a������Q���13�
��q���	�����I��ɘ�)�����i��阞������1
�2�3s����bn�	�K^�
aL~`AbaaQcq�
�,�R,�2,�r,�
-��J��*��j����Z��:��z��l�Fl�&l�fl�l�Vl�6l�vl���N��.��n��
��^��>��~��
�A
�!
�a
�
�Q
�1
�q
�	��I��)��i����Y���q6�p.�q>p!q1�p)�q9Wp%Wq5�p-�q=7p#7q3�p+�q;wp'wq7�p/�q?� �0��(��8O�$O�4��,��</�"/�2��*��:o�&o�6��.��>�!�1��)��9_�%_�5��-��=?�#?�3��+��;�~Q(�DIV�0
-�p
-���H��(��h����_K�GqO�@	�H��DI�LɕB)�J��Fi�N�A�I����(��)�r(�~�ʥ�ʣ?�W���
-��
-�������o��*�R*�2*�r*�
-��J��*��j����Z��:��z��j�Fj�&j�fj�j�Vj�6j�vj��N�.�n�
�^�>�~��A�!�a��Q�1�q�	��I��)��i����Y�W�i��h��i�h�i��h��i�Vh�Vi��h��i�6h�6i��h��i�vh�vi��h��i��鰎討�N�N�����.�.鲮誮�n�n�����
�
鱞詞�^�^�����>�>鳾諾�~�q(�6L�v�0�p���H��(��h����_
˱
�q
���	�ȉ��I��ɝ�)�ʩ��i�����əCR��Y��ٝ�9�{HSr9���O�u>���.�.��.�.��!���%\ҥ\�e\��\�\ѕ\�U\��\�5\ӵ\�u\��\�
�Ѝ��M�����-�ҭ��m�����
�ѝ��]�����=�ӽ��}�����<Ѓ<�C<��<�#<ң<�c<��<�<ѓ<�S<��<�3<ӳ����l��\��|/�B/�b/�R/�r��J��j��Z��zo�Fo�fo�Vo�v��N��n��^��~�A�a�Q�q��I��i��Y��y_�E_�e_�U_�u��M��m��]��}?�C?�c?�S?�s��K��k��[��{�G�g�W�w���� T:@�@�� �
��A� R9�D
�уA��� V;��
��A� Q�8H$
���vU��d�^��{Ƥ�����6��qS7٤���6
]Y�Ȋe�$u��y����i������noF4�����ޛ��I�F8�����p2N��8
�c�� 6b�[�۰
;p&���8��<��!��.
����
԰�����BLb
-Өc?�"
�
.�%���.��t`���&,̡m8p��ax� �<p],�
-\��p5������܈�p3n���
��܉�p7������<���ix:��g�Yx6����yx>^��Ex1^���ex9^�W�Ux5^���ux=ހ7�Mx3ނ��mx;ށw�]x7ރ��}x?>��C�0
���>�����>�O���
>�������/���
-��������o���������~����	~�����~�_���
~�������?���
�����������
�e�(ZN+h%�P�@Dy*P�JT�
-�R��մ��R?����hz
=�
G��'��I�dz
-
C��qt<�@'�It2�B��it:m�3h�6�&�ʹ���6�N;�L:�Φs�\:�Χ!�I�h����Fh�h/��]@�4A��=��a��&i���N�� ]Di�.�K�R����Q�t2��,��$��E6��!�:t�<�)���i��P��
-��������������n�����n������
�����z����!�
��P�{��Ѽ��lÚ�-
��m-�\'�j93=�.
-��
KO��u:�{$r��z���!��[�i74�m�{�"���
jk��:�b�jxl��H`�5]���Ų�K�<=l���HQ����pMי�
�uM�4"�j�%��q$�BUz`D5��b���
Y$�#J6��͈�ef�FtfX��������a��{7M�W�ih��&����6XΊjI!V"kI�V,���.��{�s�h�F+Mc,J#gG���u;[���#Q��ْ��؇�O}8���؇�h
�<��d�H�p��L�mq#Q�h���ya�� �Zn2���1'Ә^s2���b*��ǜO)��
-;ө� �2
�=���iѓ@�
�$�{RO��*�qa$z�
	zB�[�/�(T5ԓN���~@�rA�ܕ87׸�Œ��bKS����D�UeZUE!���3�ݠ�1eT�#8���
ST8�,2W���<~"�
C��e�ʀ�gD�جdPH�!b��p�ﻶe���:�;�<[�r+�=W
J#j5������*���R�qUqTeRU<����
c������������.�
������J-��ؚ�OӞ��<z>3z|�����n��c2=�h�����m9�龈r��~�
-&j�ChEbE�1W0�_&\OЛһ
���
;Y�K8"ᰄ�
g��<��R�[�|
-ȖF�
Vm	�:)�Od�}�wՓ���t�!_��Y���,nqڗ����TS�Z�
�3|��2+
d^Vb�了����M"��e��%
Y߼�������xQ�Q�!鷎��%c2I?��3I��;�7��3I �庤���(��
-��B�������wU����g�C�%��$5Y����ȜLɔ8_�P��W.W3$�:(wv3X
S�
-
W�#qA1�&��}�])P��򏖂�Eœj��R_�T�%jiXy�J���i��#��b
mY
���5��x�D�e����g�M1
-�#S��tc�_Ӂ�V
v�*��t�z����+:?_=�a9F(�GN�v���Lk[N�Z���)�KGXj(�9�*K�ɜE-�V�љm��T�_r�g{��j�xЦj��d
-�F��8����Z)�kc���Y�IG}���
�/+��ry�(_��-�;n�9V4�m��� �����q��:������yWy8k�|
�ٜ�]z��d
ƹ����v"�XV�"k���J^�V�%�
&�e9�M�����"6��qVpB$��!b�b>����n,�����~�v�(8u���桕��|ݳ:A9�I�"9�f���9E��A��)�i~�	\�\Q��=u1�{B�[�w|�W�:����2��C�K��2��V����r�j�=qm�[Ǐжf���w�
׎/.ݎk�o���lN�+w<�������7�xjQ�4�y%�j��K?�l6˓e����,l�+a��#�75w,�?�
9>8\Ǩ�"],F��S�%�l[���cZ�?a��xeӶ¬e�
?I�f�sg-��&~�O6
&rw"�'rG"��3��Z�֍[�
fhs��Ļ���;����g,��v�u��+�H�p�I��/��N�h�i�MCWv���%@�.��6v��돬I�� ��xf�it� Q��LjW�#�
w6�-�.��;K��L���
��?�ƹk	)d�9�13��cT��o&6M^����i��7F�=��ՏqzΝ�E�g8ߩ��b�����p����6q_brj�FA\Z!d�G
 G��zt�x�h N��&��8�
j�>,2�f}��3��a�|��wjK�^Bm��H>�X$,X�޹��
��'���~���6�܈��9a��4֖�W�q��9|���=�cH܍���!��^��@C+
[��eL3 �x�e
-���-���g����s����m�%~��q���y�#���+B�����2cQ����
�7�{���ъ��w�J�_k��<k����Lbva at 9�����L��jj/�ڋ�v�����|E-�th�Z��6Fjc�6��͢C|^泸
��#��p�w��w��]���p����.�C� �
� XDZKya�+C+J�M�]\��QZU_E2�T�U\��W���L�$�W
~F�H�xnX(
-B�+�g
�
`�Z�-�]�6P��Kj��PZ�`

�c��b�N�-��F��U�IJa*���;
-(,�T
y;�)5
u��ϭ&I�KEPa�#h:b�"
1OG8鈅�`*b��`�{���tD��X��HE,�QJ-��P�0��n��LjW�׈�q�h"Z�����
�.b��e���ek{������� q§(Y�au���D>
*+)U'��_])�1]�
�O�4i��Z�Թ7:��roTnS��(���l��f���d
u\fb��4����4���lV�1�,�L�Q-7,$&�A�Zu�{����Wh���-�F{ٺF7�F��n�>�m(���
-�(�n�f'�y����������7�
l����oz�vJ��*OWJ-e�}�M��[�I�3۷ٱq3��w���������z~W|<��N{���Ny��S3�5��,3?;k�΂W�i�	vY�&K��ErҲ��H�`�PJ? �P��g{-�k1���W�
�H�gF*ȌԽ�G������?����A�T>�CF;g�{Z�P9��3U�j>��O���Qw"����
�0c��P��Z[&V\���2�7�Λeb�DZn-����V��K����TO�H��.� ?aּ������W)U���V~�̯��������r���O��]��g]��Q˕g��Q�����E[o?�l���t����yp�B��
���̆�؎���J��6480H֐��Mzç��J���0&s��L��˄�d~I�!��G$!�]�B;�l����HZ�8����l�IR*�JI٪����_�S�Y��2�f
V��4[u�T�驪[٪�lխU�y[u���(�_ne
%-��T�BG3�n��:��Z�l-�j�N�b����bq��D-xo8���HQX�]”�VE��R*Ĉ�!F�
a��5XR�w)E��R'�����"-.5�H�\�YFi�K�2�,�)�QR+=�V�O�'��]q~����Zy���s�_]��T��y�E�O��4gO�A��O�����~��X��i�>f
�#(��ԏ�ܞ��d-�y:c�I뗜C6��]<�Mǜ�5�������y����,r��@�)�)Ot�n�iw��e-��v�oIy.�Be�NY/�'����>=� �Ч�ƚ�1�-��ü� ���qﻳi�h�{�|�А��#U��!�����������3�zfq�G�K���.~#�=)�o�!��Q�.*�r�
ωkW���۬���'��#��KHu��vΦ����T
�BK�8��R���?AqS�����b�"�c�.�
-vN�n'ع�]ًD#?*�9e��U1��'nQ�g!�!�=���?�YL��$YFi�Ⳑ��!X����=�Ƨ��Q���
-�N,DqV�2�r����P�FX1r��)�3��%��Dݜ��ȣ�1�s�?4���S��7�k��
F�O7
�4Ȟ
€�mʵ
-}[��nV�p�
��?&�bXD�\�ku#��")Et�my�wVL�Y�
-��9ӗ��H�%�
-���h�?���I~NBi�qNjE�.���{��+���@7�,
�,9S}��T�P*o�3:��Fg��k��T�Q�җ�r'�����l�0����^�=xq�{� :C<ˆ��ǯ6���N�F۬�h�=��Eik
�Zk�"A at 7Jgi���_|qn��
s��s�?�9۩�[x݉��7,Z����Kt[.e��MD
q�Y�͝
�S�/�>gg��E���t5ؽ� NP����C�>��C��G
D�>�v�e�	"�
�3,�"�70��|�5����&?�U�&��}��^!b�#�9�""�)2�bF������Y�?�
L���?A�� +9A^�
�?��)�O1~��&ƛX�����xK�ż&����,�g���o��3?�9�G�:���u{�P��`�~��~��q������fR�3�e5�"����,���09�\��.�b���3D
a~�c�8E4�ݑ̏�Ƙ��1������5"�7������c{cl�
-۹�~_a�W��\�E�0\����
{�3��_H���dUS�M%�J�~I!	K���3��OC?H�&_�r��t��@7�q�;�
�|�߁��w�;�
����@5TG��<[�W]Oh�(mt<t����i<�#����ͶNhbr��ߞҢȋ��������v8G��R�Q��8��Y<O�l!_{��?7_��Ysu������x[���2Y
ɭZo��a��"��,K��7V�W�,�n㬔,��8�4~��CZ��V�����\�s=V���T�j����Z��:��z��(��	��	�9_��|_��<O��<





��i�O�����i�4xZ�c|�����u�:|
�_�������u�:|
�_���7��
�|�߀g�3��
x<��τc�o6�������������������b<
��X�,�c���?
�
߆o÷���m�6|�
߆o÷���m�<�ρ��s�9�
x<�ρ��s
�u�
߅��w��]�.|�
߅��w��]�.|�߃����{�=�
|�߃����{�=�
|�߇������}�>\�ׇ��������������M���N��?�w���)�S|������������7d�C�C�C�C�C��Ɵ~G�F�F�F�E�E�E�E�E�E�I�=���tq�<��<���Q�U��4��,J�â
-^Z��O�J=t���¶_���v~�����~����*|s�37�;��"y��f�<����".�(���d�JFo��Y��.�YR��2�����2V��i�O����<�U����4~�J��Ҹ�@՗�C?Q7��g�m%8�?���u�j��QJ�.�q�v����u��^�װf���~�}��?�5Q���}��rC��M��TG{�����������p�Ѻc��;߅���]���MͿ��n�۪�_w�^�]�޳�[sy�IU�����۾���0U���C��cw�Ԉ�n
M���|��T�|l':�4�;u;�Ԟ�A�G��̰���^��^�{���'T���������A�}�y������*��xo��^�{c�T��W�n�ϾS�^���*~6R�^���*~6R�n��:?��Y��g#?V��[񳑊�
+�~X�T]�L���e|7L�z
��⇩�}��*���+���V�}��oU�����Af�|��j��	u���D#���㪌M�xR??���n�yӃe�Y�E�6^�i�����V�
S�P�����?U����:�o�����U(?
�C�,w���9�g���W_^�,�n�d�y�g>��~|�ޝ�ρ:hJ��ꨁ����&����S������hp��:Y&�"�,������H��ב��H�S<�=����0����r乑�瑾lGr?��e=��c3�I��{��/ܲ\��=q��������ԋ�PG��G��C��E��
�n�,�w�ϟ���x�΍�p�Z
��z�ms�2�����r���f�걟�f3�?��7Ǧ=���_��>���w�?'�r?�m;�7�<܅I7�/99�u�=�fu�%_�^�υ,�y��=��	o��~5߾��������-�wi7���r��
-�����x^����01����jiK,DU�&�U�� ���i���-���L-����X�Y�σ��n6�
-TC-�Fy�7�mr�ȫ����lV/Y\T��S�|�K˔jA�h#�
B!bj���
PuQ�Q��)�fP�����_��G.�>�|��W�3��s6���ù�ufNG��?f0^#D���׼ݒ
i�H�G=�B��d.���d�e�TH;��_e�O�>��V�
�
)�b��������\]p���_���/�I���y��5��V�t>.�q\%�s���*E�,��";���j$�7��
��'�P
5P�PuP���?@�h�FJ|_��|�S���F(���ug��,���uN]�,�bH�ջ�-XpƑ.����N�i�b�n�{�ȿn�4�(�{�+�XVd��l�X���h�{�n��0�
-��MV�韆o��?��Ӥ�냥�9�7�~/�
%\��8�;�|��mk��j���n?|�:>��n'�����r���7���`Y��W��N�'�Y=�
n���c���
-4Y�&+�d�� ��+_�/�@m�A��Y�x��EL�̉� ��mb
�Qe:�y��ѢxyK�"W	�׬�di��Q�~���jC_���g��5��y�6A��	�5TG
�D-�F�h�FJ���uP�P
x
��/�
���/��6G%^-��(�jEL�	*P5Q
�QuQ�f�6��Z�$��3l�A�(��S��=R�A�
zd�#��퍦���e�F��dLf��P�&|�	߄o�7��M�&\�	W��E��_�/藠_�~	�eq���}��O�-|-|-�m�����m�����k�k�B�(Q1c�&N�`9v�m$�ijِbYNb5���ӭ��cg
jN��R	5�^(�^�5��T	n
9!�H���Tf�n��9b����y3�7��gg��&��	��p�'�Ovǥ��J��5�^Gz�;_v�#��Ǐ�ب�zE�h��~�a��Y���	��d�V������Q��������w�M��Ou3�VonU�R��ƒ���%�5��V�v�˜V�p0�t����4��˥5��ݍ|bj��
�٨W�\hn�k�e�^�'؝㥸��w��
+�#^�5�N��r�l�a�&[}Z:C�AU�Y=U͌��I�%�����u�h��G��ؽ٪�7��T�ޤi��
���@'�s��\&w��������l��h"� 
M��@�@�AӠ2�)�	�
�4�
h���\)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�U��W��_�
-|�*�$�g�,v72������lT`���d1�"����*
-����0����_��qt���q��Q�[m=MV[-m8���H�bD0Ex֒nOZR��3�y,9�
)>Y"�e�l�X9I���$���M�"�J��{6�;y��ʰ�E���
f�H�+���+�Sy�|"?E��H'�l�| _!�oC�{Q�w%_��
n��
��iA�3�U�.mC�Z�ڵ=7wɆ4H�l"V�sR���&�b��y.�NGn��
�Pڡ�K��SvD��
9�ࣕ�$$�&A�����/�L��}�
E%-����m���cU�V#_��,�ϣ�vWfk�W-�bv��
����?�F��6�4�K6^TF���
’�b°0(<.<&��_������#zE��Ā}�G%�F��^n=^�^h�z�2a�<X�g�݃^{dk�o�?ylB�
 +������������™����v�7��c��G�f2_hv
ͽ"��t%Lu+�7���گ�C��^�'B�C�+��5�%��
���^8����<]g;�H�t����
-J��K��n�j���z��Z= F9L���9���Z9^+�k�<ԊŨ�0��  X��M
endstream
endobj
280 0 obj
<</LastModified(D:20141222134947-06'00')/Private 306 0 R>>
endobj
306 0 obj
<</AIMetaData 307 0 R/AIPrivateData1 308 0 R/AIPrivateData10 309 0 R/AIPrivateData11 310 0 R/AIPrivateData12 311 0 R/AIPrivateData13 312 0 R/AIPrivateData14 313 0 R/AIPrivateData15 314 0 R/AIPrivateData16 315 0 R/AIPrivateData17 316 0 R/AIPrivateData18 317 0 R/AIPrivateData19 318 0 R/AIPrivateData2 319 0 R/AIPrivateData20 320 0 R/AIPrivateData21 321 0 R/AIPrivateData22 322 0 R/AIPrivateData23 323 0 R/AIPrivateData24 324 0 R/AIPrivateData3 325 0 R/AIPrivateData4 326 0 R/AIPrivateData5 327  [...]
endobj
307 0 obj
<</Length 1104>>stream
-%!PS-Adobe-3.0 
%%Creator: Adobe Illustrator(R) 17.0
%%AI8_CreatorVersion: 18.1.1
%%For: (Howard Butler) ()
%%Title: (back.ai)
%%CreationDate: 12/22/14 1:49 PM
%%Canvassize: 16383
%%BoundingBox: 1 -46 156 0
%%HiResBoundingBox: 1.7343255633059 -45.2158203125 156 -0.1337890625
%%DocumentProcessColors: Cyan Magenta Yellow Black
%AI5_FileFormat 13.0
%AI12_BuildNumber: 446
%AI3_ColorUsage: Color
%AI7_ImageSettings: 0
%%CMYKProcessColor: 1 1 1 1 ([Registration])
%AI3_Cropmarks: 0 -45.3500000000004 131.809999999999 0
%AI3_TemplateBox: 66.5 -23.5 66.5 -23.5
%AI3_TileBox: -312.095 -310.674999999999 421.904999999999 265.325
%AI3_DocumentPreview: None
%AI5_ArtSize: 14400 14400
%AI5_RulerUnits: 1
%AI9_ColorModel: 2
%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0
%AI5_TargetResolution: 800
%AI5_NumLayers: 1
%AI9_OpenToView: -864 487 1 1866 1032 18 0 0 78 133 0 0 0 1 1 0 1 1 0 1
%AI5_OpenViewLayers: 7
%%PageOrigin:-240 -419
%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142
%AI9_Flatten: 1
%AI12_CMSettings: 00.MS
%%EndComments

endstream
endobj
308 0 obj
<</Length 5861>>stream
-%%BoundingBox: 1 -46 156 0
%%HiResBoundingBox: 1.7343255633059 -45.2158203125 156 -0.1337890625
%AI7_Thumbnail: 128 40 8
%%BeginData: 5702 Hex Bytes
%0000330000660000990000CC0033000033330033660033990033CC0033FF
%0066000066330066660066990066CC0066FF009900009933009966009999
%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
%6666006666336666666666996666CC6666FF669900669933669966669999
%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
%9933009933339933669933999933CC9933FF996600996633996666996699
%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
%000011111111220000002200000022222222440000004400000044444444
%550000005500000055555555770000007700000077777777880000008800
%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
%524C45FDFCFFFD25FFA9FD60FFA8A8A8FFA8FD17FFFD05A8FD26FF7D2727
%52FFFF7D277D2752A8FFA87D27277DFFA82852522753A8FD1EFFFD05A8FD
%19FFA8A8A8FFA9FD1DFF5952A8FD04FF7D20A87D2752FF522752A8274CFF
%7D27A87D27A8FF2027A85220A8FD1DFFA8A87D7D7DA8A8FD17FFA8A87D7D
%A8FD1DFFA827F87DFD04FFF853FFFF5227A85220FFFF7DF87DF853A8A8F8
%52A82752FF7D277DFD1EFFA8A87DA8A8FD19FF7DA87DA8A8FD1DFF7D52A8
%FFFFFFA8277DFFFF7D27A85252FFFF7D277D27275252527DFF2753FFA827
%7DFD1DFFA8A87D7D7DA8A8FD17FFA87D7D7DA8AFFD24FFF852FFFF2727FF
%52F8FFFF52F8A8F87DFFFF527EA82752FF7D277DFD1EFFA8A87DA8A8FD19
%FF7DA87DA8A8FD24FFA8275252277DFF52275252207DFFA8277D5227A8FF
%2752FF7E277DFD1DFFA8A87D7D7DFFA8FD17FFA87D7D7DA8FD26FFA8527D
%A8FFFF5227A8527EFFFFFFA8527DA8FFA87D7DFFA87DA8FD1EFFA87D7D7D
%A8FD19FF7D7D7DA8A8FD2BFF5227FD2FFFA8A87D7D7DA8A8FD17FFA8FD04
%7DFD2CFF5227FD30FFA8847D7DA8FD19FF7D7D7DA8A8FD5CFFA8A87D7D7D
%A8A8FD17FFA8FD047DFD2DFF7DFD30FFA87D7D7DA8FFFFFFAFFD0DFFA8FD
%07FF7D7D7DA8A8FFFFFFA8FD27FF7D27A8FD2EFFA8A87D7D7DFD08A8FD05
%FFFD09A8FFFFFFA87D527D7DFD08A8FFFFFFA8A8A8FFA8FD05FFFD05A8FD
%0CFFA8522752A8FF7DF87D52527DFFFFFF5252277DA8FF527D5352FFA852
%2852A8FD19FFA87D7D7DA8A87DA87D7D7DA8A8FFFFFFA8A9A8A87D7D7DA8
%7DA8A8FFFFFF7D7D7DA8A8FF7D7D7DA87DA8A8FFFFA87DA8A8FD05FFA8A8
%7DA8A8FD05FFA852A8FD04FFAF277DA85227FF7D2752A85227A8FF52277D
%7D207DFF27202752A8207DA85227FD18FFA8A87D7D7DA87D7D527D527D52
%A8A8FFA8A97D7D527D527D527D7DFD04A87D527DA8A8527D527D527D7DA8
%A8A87D7D52A8A8FD04FFA87D7D52A8A8FD04FF52F852FD04FF7D2752A87D
%7EFF7DF8A8FFA8F87DFF7E53A8522752FF2727A8FF52277DFF7D277DFD18
%FFA8FD0C7DFFA8FFFD087D527D52A8A8A87D7D7DA8FD067D527D59A8A8A8
%527D7DA9FD04FFA8A8527DA1FD05FF7D277DFD05FF7D4C272752FF7D277D
%FFA8277DFF7D27277D277DFF2752FFFF5327522752277EFD17FFA8A8527D
%527D7DA8A8A87D7D527D7DA87D7D527D7DA8A8FFA8A8527D527DA87D527D
%527D7DA8A8A9A87D527D52A87D7D527DA8FD05FF7D7D52A8A8FD05FFA8FD
%05FF7D7DA8FF52277DA8F8A8FFA8F87DA82752FFA82752FF2052FFFF5227
%A8FF7D52A8FD18FFA8FD047DFFAFFFA8FF7D7D52A8A87D527DA8FFA8FFFF
%FFA8A87D7D52FF7D7D527DA8FFA8FFFFFFA87D597D7DA8527D7DFD05FFA8
%A8527D7DFD0CFFA820527D5227FF7D277DFFA8277DFF27277D522752FF27
%52FFFFFF27527D2727FD18FFA8A8527D52A8A8FFFFFFA8A8527D527D527D
%7DFFA8FD05FFA87D527D527D527D7DFFA8FD04FFAFA87D527D527D527DA8
%FD05FF7D7D52A8A8FD0CFFA8525252A8FFA852A8FFFF52A8FFAF52537E7D
%7DFF537EFD04FF7D527DFD1AFFA87D527DA8FD05FFA87D527D527D52A8A8
%FD07FFA87D527D527D52A8A8FD07FF7D7D527D527D7DA8FD04FFA8A8527D
%7DFD44FFA8A8525252A8A8FFFFFFA8A8527D527D527D7DAFFD06FFA8A852
%7D527D527DA8FD07FFA87D527D527D527DA8FD04FFA87D59527DA8FD44FF
%A87D527DA8FD05FFA87D527D527D7DA8A8FD07FFA87D527D527D7DFFA8FD
%07FF7D7D527D527D7DA8FD04FFA8A8527D7DFD44FFA8A8525252A9A8FFFF
%FFA8A8527D5252527DA8AFFD06FFA8A8527D5252527DA8FD07FFA87D527D
%5252527DA8FD04FFA87D58527DA8FD44FFA87D527DA8FD05FFA87D527D52
%7D52A8A8FD07FFA87D527D527D52A8A8FD07FF7D59527D52597DFD05FFA8
%7D527D7DFD44FFA8A8525252A8A8FFFFFFA8A85252527D525252A8A8FD05
%FFA87D5252527D52527DA8A8FD04FFA87DFD06527DA8FFFFFFA8FF525252
%A8A8FD0BFFA8A8A8FFFFA8A8FFFFFFA8A8FFFFA8FFFFA8A8FD26FFA87D52
%7DA8FD05FFA87D527DA87D527D7DAFA8FFFFFFA8A8527D52A87D59527DA8
%A8A8FFA8FFA87D52527DCA527D52A8A8FFA8FFA87D527DA8FD0CFFA8207D
%FFFF207DFFA827522752A8FFA852272752FD24FFA8A8525252A8A8FFFFFF
%A8A8525252FF7D5252527DFD04A87D5252527DA87DFD04527DA8A8A8A17D
%525252A8A87D525252A8A8A87D7D525252FFA8FD04FF7DF87DFD04FFA827
%52FFA82752FF2727A8FF217DFF5227FFA82752FD24FFA858527DA8FD05FF
%A87D527DA8FF7DFD04527D527D5252527DA8A85252527D5252527D527D52
%52527DA8FFA8FD04527DFD0552A8A8FD05FF282752FD04FFA8277DFFFF27
%53FF52275253A8FFA8F8527D7D2727FD23FFA8A8525252A8A8FFFFFFA8A8
%2E5252A8A8FF7D52275252522752527DA8FFA85227527D7DFD0452275252
%7DA8FFFFFF7D52525227FD0452A8A8FD06FFA852A8FD04FF7D277DFFA827
%52FFA87D5227F87DA827277D527D52FD24FFA87D7D7DA8FD05FFA87D7D7D
%A8FFFFFFA87D527D527D7DA8A8FFFFFF7D7D7DA8A8A87D7D527D7DA8A8FD
%05FFA87D527D527D7DA8A8FD0EFFA8277DFFA8277DFF5252FFA82727FF27
%52FFFF527DFD25FFA8FFA8FD07FFA8FFA8FD05FFA8FFA8A8A8FFA8FD05FF
%A8FFA8FFA8FFA8A8A8FFA8FD07FFFD05A8FFA8FD0FFFA852F828522752FF
%7D27275227A8FFA8FD0427A8FD6DFFA8A8FFA8FFFFFFA8A8A8FD05FFA8A8
%FDFCFFFDFCFFFDACFFFF
%%EndData

endstream
endobj
309 0 obj
<</Length 65536>>stream
-���}��f>{I��X¬�T�b�`w}lʪ�	v@c5��[�jL���Kز��U��1Q�u/���vF���s�
�Q
-͹h��^�sKo��Kn�v��/��'���i!)��OXvg��!|_Ǩ����
��VքO�e_�blH�����O[S6E�H�n�s�%�+@ѻ��Ok��M3<qÌN�sқ��LD�D,\��JC�����}j����p��ɿ<�Vq
��O�.؇ކ�-�o�-Uo��g}�;�=u���~r����/�L؞�G�w?XPԾY1!�fU��
�j�����)9,r�K��e���9�x�À.
3�mŷ���?Bh<Љ4r������k�V��S}����lN�}Ф��]uO���U+��l�@����Q��O���PBz\�CP�x��򱿧������>ݪ�<Ʀl��5kfJu�@�^��V�ԲE��(h�p��K������И!T�o}��Nh�Y��Ovl�d����Ԃ��w�t at S^~�Q?��u"u߃��:FB}���N&*d��Z���&�!��l1|� �7]��%
$*4z��n|
�Q�X?�="+�$*���JPن
Y`dĞu��/��*��%����]7���8����ᬂܫ!����mӍ*[�4ƮZ��+6b�_��``}�ˑ�J^G����$W�m^(�2�8��]��ix3�(�h��Ҳj����
-B澛\�k���
�
-���`.aݭaV�_6F�y���X;��
��!��9 N=�ېsEO(�;&��?)ixR�ޭPف�
��֌�9i�J,X1�S����E�b�����y�N6b�hO
>�#�ly�U#�xZ�1�M������~H�/&r�_���
�����S_]��j����^��qq��a�
*�4�$����Uz����Bw���N|�Lg�S;뺇�pN�����W?�Ig�܂�i/�
-+����	:�5�w�
��%C�L� ��͔��]Tu[�gwC�9+1�����y\�x�H(<�����ѿP2ߜU<1�
-��_�@$>���2�w39�����+ZXҊ�6=�����K
xy�]'��ݲ
"g���qN�\;���<lU24' ��i�m;�AuC̢�.zY�
�5�+�f¦P�jbε�~t���eԽ
i�z� +
_�W|���@e�q�>�
��
�`s�ִ�@�)��,��qi}���!Vm�
�A�$�',(1�
���]���W��v��+FFMP�A^5�
P�&zaou��*L��Y,fE�(߶��6�����#B���JX���B&TΜ
��$��01��;�`�t잟K�p���J��Srg�y�J/�0#�y�mFe�1	�jd�� 8r�N,[6`R�\��u'4}V��!d���Y�u3��(G�����'A�Y�v_(����$�����m��%
)w�D*��آ����\6͏IQϏq������14���ѼC�O��ɮ�;%��#�<u���ؘ�G�E�g�_�������-Mgz�%�Ҏ��^J�
-��*�=�Vxu���큇��kt��y5,����0������^&r�N(�e��|ޞ��wg�G[�P�W���9&y���SPr]M̻ �T����"���6ӋoIޟP"�O��F
���b�V>
�F%�`QG��*>�9�U�~BR��G����0���rs˞�����vc�
b�;l~�/��g����yy�㠪��Tw��^Ы}�oNxZ+�ʙ7��8�K}��t7�WXs׌/�[�*�J�~w�$�zX�
a��n
��ŝ̊�{
����T;��
U��
�Ź74���Š'��uM�sZT���q��V
u�&B�]亁T�k��/�?2Sc���_5��d��7S���Y]세&rQ
-{�,bI�oeg\�{�󂌒5Ҏ��u�RV!�F�u9�Ϲ����G�i;Hڬ���1;.6�/��Y0U 
��}� A����~L0�+FD6�an.�a�v*d]����cϛI�w��Ƞ�$�&��D�e�bU�mZ5��jf킊����$Z6yn �18�K�
���؜np���×qN˲��x���3Jn�b6���}?�;�@�>Rph��6wi���HKʭ�P��U:}�@�8I���X47��x0FE���ވ-��AbV��u�L��=/��E��0@�6W�9L�>��v
�`����>���}?
�J��,��8��c�'�w�I�:J��q�Wu��5���z��
Aͭ�a\�]BH�a�
-rn��v^��|i��Ŭ�ᕿ���Xg��Y9�l\�/��!'��������AEӛ5#"g�K�
�y�ֿ��6�Xu0@�Nl��"
���}����-lx�uA<y�A�^T�W4�d+��z7,�tGc�I���\=�
�I�ɺ�5EX8MQ�VHDP��X1Q�燠=��
	��Bok���.���kZDꦉR�p��>b�X.��~�o�F�ڙ���<4I�����7*\�

�����#碞�sN�7W�
H�Ijr�enѧ㔌�ǰ�o�aߜ�%�?�/J:ߏ����I<�-�9�"e\c��M���]O�=%C���Ħ\u����
is
"��Ͻ���8�_�
���h~@ӻ���Kvz�%�hr�TP��򬷫.��(�� �Ω��
n���wg%u/~6`b��
r�U	ת�
��%d=�2�sBJp�������D�W?>e�����(|Q��*|f�/���
�������*�4��,��jl�iEӧ~b�s92ႁ�z�B���OڵaKBjD�
 PZ�����
3�� �U���2�մ�
�a݀˝���Љ׈Iw�)��O'@9�}�o��G�{lڞ��4rg�M_�Sa6^��e
2m\��t���-��;ىW�*�n[����˖ԐO �_�Խ;�A�&T�D��XG��e54qӂ+�s2��
��x�kDʦ
W�y�A�6�`�3��;�����N��_�Y��s���,�z�����8����~v���Aog������d�o�TMQ_Lj�~5gIM��
2Vu�ڠ�6�S}?�Y|m�����
;��dx;��fz17m<�� �W�s�ߚw�-Ⱦ����l;�M;n.s���
�|2T즛�K���x��s�+�죡ם�
�s,�9^��U-�xNEȚ聿�p*o.�4�Y��Rf���{yWU��5��
��
ssL����DW��Eem���X�>� �
@߭ �����x|eȄ˚���Ot�_.��j��<lܾO�_2R��l\�S at _3��L���An�����DFL+i>5�ȇ>�����N��T&qZ�����m̦�jT���排Rz��������ѹM*0I
jY�͙̃�[/6�����Y
~�smV]�: �~8�8�i
��i!U��YNi[�Treń�ٴ4�����y[�.ʡ��z�N�ɿOtՅ�R��rc~s�ϰ��OW6����;~n�%��iZνc��Og����FR]���҈�;v4��#��x>іw��J�����q��4���g<?K�	?��GE�!�]亐��� 2�wN�����'Ǧ�%ϵ���
o��S���y��m+� �&8��W�@~��>>�%�^��xM*zq���}����������A�Zai#]���gg5�Lt��˙/��<#�?�eBʊ��E����=������Wa��ϠR_����}�qY?���o~.{�K�m��E����]�ҿ��y�ʨgଗ�׬D·�N�י��Y��7����U,>�pb��iO	yϖ���E%$:�E�l;�EnTο~|Պ��fc5�̺@?�Ӻ�ۼi4���{��qq�]=��
�zf���u�� �;j�N�ԅ8�u��T�W?
�-���z�y#�tBM�Y�
-�K���	��w
-w\B涙P�cBgzU[D�
����a�
<�z<L-��[��Us�1��d{΃=��r03JT܎�\��—~�P�'i�
?�9hBd��W<
-i y�.|���j�ʁn�8���h�<�ov�t�:�Qg���m?��:���
iV���"S�����Q
-48L�
@F�H��
*N՚E�z47cy��5Ӌ�hҥ����娌+��������Y5�xZIL[0���&h�Ȯ]01*wG9�����xŎ�4CS��nXw��|
Ԍ��=o��-[�{��~?��e�k�Xh��
�Z�Њ����Y%.�Ӈ~��7�5s��j0Y>q�C=)튝QpoT
{7�OʚR0�F�x9�>^����y�a�M��K&l֜���������vf����_0���fe�1��2�[�`������魆�sUO��Ů�4R�
b�(��UP�qmS<�S�p����t_sԜ
�:!ť��(5[
j���j�T~�f�j�w���9U��i��4��R�O�)0��Ie��̘�q��3
�7=��s.v�EoKEx�����[<c!;����o1�����Apĺ[�b��j᩻ ��	�^%4���Ly��[v"��,q:�;C��w
Y���@G�����~ln��''k�]�
!��X����+���@{�U+&�̾��^�ӧu��
td�ʨ;��#�8��#=e�ߴq*
���!ji����W�b�E�
��[�AcW���%=�p�*"�8�[Cn�t�����%���J<���.j����| �V?

վZ7���t��zŽ��sc��
�OS��Og�E����Y[n&f��
���y��Q~�I�Xuኖm��iecĪ	���F�:��3T�����T��/��iu&Z���Z��A^L]0&��j{K}����e�'�2�~9���ԮX��zbV�lf��z��f��N� 
��e7'�K�+k_���{�_m8h�Zn�#
�����7��l:��}���h����Ԡ�1��7,�%
^�0�D�
���
-�0 at A|�$A���
:wo�X
�gœ�>�E%o�PY3�794*h&���x��B
��^=���f���%�lf6,h�+6x�K�|��w|<���
Zmk���9G��k
>m�J�
Yp�!
<qˎ��r�H�V��Q$b��G/�2bʢ��;=DH���'�ūnsJC)tu��-ک
F	+h� \�V5��&�kqG{���Pw��ft���tT�� U���Ԑ���q�f��u
��b@]���s@\
-�%�&l���T��
�܀���`e�V�B�N�uਯ^�J��z��wNг6��26ԉ�k�
n9:fXR�xF���8ʁ�eq�ТmKsʦU�f!�����e]�!&���
Z��4�g�qs���6V�y-&���ry
8O ;A�fF͢���7	�! ��X��%
�j~���EG���E
�hL����j��Qೀ&_��VM�: �4l��l\��]D�4uR��Fߠ��Wv���:_+<fY��ڴ�k����Q5G�-�­M���M�
�I�i��ᖔK��EW��E����l嬍�x�
2dc�V�٨'
�Ҫ�l��

�"2V����!B�q�qb��lز�1kfæ�ּꢀ팆+��
-�DŽ-�~�-ԣ>�;.j㞇�aa��Lؒ��3ч�\
bT-�`w聧���xW�
�k��U�F
��
���ߜ��'�2��vRu���ո4���h����
��~j�'Iڼ2V�� ���t���L��0� o�a�[���m�p�G��v��&���A=:��O�y�%[NB���_��X5�'�a��Z�Τ�g��c�\̶O$>
I��{ˎ=�U��SkM��u��gTќ�쩊^&�W�4ĺ�Y�k*h�. :Dͯ�bd⦳U�``Vͪi��zz٬�R6gdC�m�yG�hZϭ��Q�&����a�m���U4K��4Ȯ��8�h��
�D[G5N�m��I�x�Co����Qz�� /y��
?���b!
���crTފK@^6��7 ްb#U/����f:x��ַ>�1���-:���6�ބ�s�O���H���'���8u4sՃ��g�U�}���m�U�yJ(������f����|r�W���6]�oSbMЈʘ��� �c��9"n�+�9��������s���4�!kVfZé����y:o&帄��մlng��z$[^
e�
M_sP*��9$�h���w�P��i�[uKT!W�2`� �4���>V��ZP�ig��J�E[aZK+Ҋ��:��&TԲE����D��f���X��_�y�
����`����!lb���V����
�V�وM'�7�d�zI�#
-|��n�B"�4B������g����
��<́�y�����)~ۆ�	�
i��
�6|;�'
A���������YU�i@[-[�8��Z0H)�0'��f�#�4���~�+W{�@c��vR�|^��*g)UA#|T{�m��:��
-��\̂E ������-:$=3!z�.$��\ʁ�A��bn��Ӣ��f���\LԪ_�0�	h��M{�����������6�GZk��U���>ڥZq�@
tYޤ��2�%��-�
������T|_N:�` �6FZD��fp���4P
-�

�2�������x`��*
�|x}��g����	S+&�o���ЀJ&�4
�je���
�|A��^6`�=
�O�Y�p	#<��l�ck�+��lN�*����;s"��$���!歔��)70$h2��)<P�@�Ul���c,₅Z��cV�l��0�&�e�7|��1ES�!|�po+�f����M�ۿ/������iА���
�8f����!b�
����;�kٟh
�k�.���9+!�E�_
�m� ����Q�����9��<��.�9M5cjH���A�g�
��=����faW�􆣜�5��lX���v��Uƀ�\���zb�D�
LH;~�!�P&u�"���㑰S}*aTx��.����A���{�Gx�
 ��^4��T�j�����CIq��=[0 җ���e#�~��'L���
�_�
h�9��ܬQ™���gMܦ)"~f��0�����Z��_�q��d-
v�6
fH�'\0w2�u��%s���1"h��@
 ����
^s���ȹ�Z��0�q�C��r��6(0D͝3��˖6ڤ���o���i�կ
���nn�ń���!R��ͷ�"�Q��q}�OE,�KV\L享�u��B�upR��mY^u;d��%^s��+4 �E�[�
��q�[
6iAK���k��6�>�H�'Zz6|\jh��Z��A
�p� OX=�9��
��b�X��;:8@�
-�f�l
���I�5u
�M�ݖVv&���ҤV@ؘ�6 �ߝm7�ζ��9t�fK��ʍQ}o���
�W�;Ĝ	K_��p�f�ݫ�2�u���U���T�P�0��Yi�^L�1K�]��m���x[�Τ�3��6ƙ��I�zgJ��]�tmM2h
&xƼ]�rHfv������&T��u��C^6z�ɂM��1�do�˾5�n\�ɂ^�`�L(^t0�!_{���[�?7`�V���t��8
�;!Vo$�)-!g�Hi�
oWo��;�lڂ�V=6�K�s�뷧i��EVǪ�A\�w�[d�c�֝	b�n��[qw�}�^��_��t���Y���{9.�ͩd�)7��B{��$MH��D
�����Rh`�9��ñ�θX���}z�C�ͱ+eh}�"J���;V&5?��l�q�[7�
ļ�_�wTY�}�z~o��ߗ%�0
`K
-�6��tv�6���Ug�nL#�9d�0cw�}@��תZ���Vi��׈
Q�ԞAˀIja)x�J[�Al$�'�!
u�3^����&�����S�� �8��LsEG�B�m2�����!/�TԺ�[��L̊i
&y�L�Xw	8+�_�5b������$>��2
-MBHҔ��7�`��|LpX���)~̶� Cm
#��x�Gg���h
Q2K�"�sw�)��t��=m�!
�1r=b꜒^��M{>.%��1ٳ�ĢM��
�-<ȴ�
>��N�YUK>r�F��~֬�Q�Q�7�j��MV`��,u�z����:�L�4��Y�n
����I
�=��w��-
����Y�(� �]r��}
�:�%B
&|�
p5� 7���Ye^���&��m�%
-��hY��$��
oT�V���D�S�[kgtBH�!�.{Y��aJ�������X�`1WF��%Gg�)����X����2�Sm�u�O���i�S�
u�+��J�u�|:`$��1�+�B��h�nc�tw�Ӻ=�&ߛv}��w.���]�H�(��	v�8��q.c���>i�m��3R'�������U�
g�E�Igi[6�'���
[�
��h�x��GM
wq�F�� 
���c�.�;���{/�H�U�*�!����# %w��[�Zޛ.�*��ޓm�h�

,�[Qk�~���p��'2J�rL&��J�� |�����I0����6u�S�]�A5���~�-�C�|(/�^�LG\�������S��S�\}�[����6�[�ɷ�z�C�z�L����z0"�!�GҼia�ӺDM"�-��|]U@�\]@��)	y��ӂc�7��g�����Tq�U�]Jh�L(�
E�l�p��Ff�P{_v/S�E
��f�Gi��ZMgw�G��5�%cFu����A� [...]
"�K/�������G��hC��)�w<����*���f1�Υ�|�~l؃�O���Q��{�8��
4a����m�a
c�H��6�*<&�P�����T��vU���T!�h�Y�6�#�~�-h~�\JyV��{���^�]z��{@ȊT�[ˇ�H�����.�*�Kv'�-_���
��L�is�ۺ��Vθ�D>��K��ɻ䥽���C=���
V&�JQ���-��~f�����
���'��EW�Ц�wʕnv�l�-/VcȞ�
M�+��*���|^:�Tb
���L�ټR�/��®��9��m���L��{O�ў9���LZ�a�M���e#�x!�&�/ s7RP�ct��&��K��oc����Jo��t\*/�=�W,9� �<����������FW�X��Q/[quI&���1m
̭���a>�g�Ş�DPf^�4[�d��ZX��GY����ޓ��`�����
s��R؍'�a��}
�6��ti1�<�wK�.I��	��.
��h)�w�K:�\6�
M�
�`�3���`"�C�`��YdC&�Q�G�����/oF��G��V���K����:��)�ip��.YX�-O�:�Q�[MfM�ԇ���
��M]=+$I��U`O2
�|�5�@r�W3OU�`~���]�H��~�0����»=YV/�qOA(��@��:ՏH�����;��σ�K�˰t�ꆁ� �]u"��a�B����ϟ���+��S�{�ɋ�KWS®��
-{O=v�Q]��(�	
������1
v�{;{��\�['�
�<�
}s�p&��݊I �z���d|
既2ř�|���?Q��Z�6�p,2�}���ڰ�Ḱ�r˯�&�u^�L!�i;��F��l����PJ��
?��>WJ�'4�w
+�.W���ց��	?=}Rt���谇���^F@���Qv��ݰ�wS�U7��|Je����귴t�߲���ਸc��o�˥M脍.��ۤ�I��#=}� �K�ƣ
�2�x�}z���z��9�UWw_�~Wu&#��GJR�_�yw�-슠U��w�����g�a��sq�������Z�o�������5��|Q��_o�
>����=x	�r7;,5y�AT<Wt
��;����l�JI�+lDA���$
-�Ù��M���H�Ť�֟�~���%���e	~z�H
�^�'p���
-�A�=��
{��sE��Bo���!����]�y���o��T�彲�br�?�
7q���#���[|����J��[�aw
ՄE'0�={O
-��iS؝pxXd��XD������o�Yga��J���Gg�]�t�zXz�KC��u��G�g����g�����55���ç�a�_��Ja�
�%<�Ǎ̰_~{���Ұ��谿n�
{�������5k
sI�����
�rD�4�$TM���71����#7��7k���
-%'?&rN�du����>v�Zrؓ���ϫ�.^O;�6
-r���+�P
:Z+6D�#���*���1��8��R���D�O=y�>�.<��!��M4�Kw󏽌B
��K	���<�i,�Xr��dV��w8-��e.V���G%���n�٦S��ϐ��+�p�t��W�_�/�<��
�ĵ{e�n=���v�E}؋��/�'���'�j���缶@A�bSk�cC��93��#'$ȅ�|���şI/fC������R�'�;

�9�*�v�IC���5 �a�“�a�#��/= �t�
�xB�◌z��E���"o���/�P�
Fj�K�^�#T�����q�SEh�hx#f�N5r�z)�~.5��G�`a�#��_}$
;w)9�����g�N}L@�-�����z�s6aH�[+�`��Hn�d)Y4�g��W†�$��~�N%��H��|�A���
-���7���b��xh�Y���Ȉ�V!||��1�"g:Y�j�����a����t�#(Z{�j���b�����a��S�e�_c��'_�N�$3�����qҧ�vλ1%=eVGL�h�
>r��m4��)2i{F��fu�bi�����8�(�Vu�u�ק���D8���9�Z����Ar������(����\�D

:D�ks�o�9֩m���K�;%F�X�l`���
���r[{��:�,
-{�i���c�����
{�����!��^$
-��K���A��d�#Ǩ��,�:[�Ԩx�
�ʫe��Tz���[�꟮A�n��f�W6Y/�7��H/j;}�va��;%a_B�n<�
-��wvX�{ı�lщ�"�
i��p_Gɜ�Q�d���۱oM�>���fr4o��Ď�|({6��RX+�V�����J���0z:"v,)�2���BjU��&��k�О�?�D��;!�V����=��?b� 9�
� �%�Qٺ(2E���R���J
dV��I+f��*a݆1�Q`��#�i��T1Z��ʡ�z�����3����	y
>}d�Q�h�H������J�h0�T<�1̯sj�nDg��u?��˵ǵ�^�aO�u�_�w��YF}T�|��4��
���eJK̚
�{�b+�G������ںT
�@:RK�����Q�������J��{/��9����j ��G�B�c���'���f�A�-XZpN��ˤ5�U�Zl�T_���(�m
�9K
z
�
>���o%r~������ϿU�}�ah�m;ů1ʗ��~@�G��������d��
�R�Q`$]�YT�
ʼ�M�7S\e���i�g��֫(������k����<y���<�S�`���y�u�#��
;:gQ�K[��3�Rl�U&(���!r@*/�vkJ�:��
�6K�{
C��#1=���[�P/�|���ORJ�j�
--q��G�t�H~.4�̛�ҡ�־n�Q�o1��C�xggk,���
M6?�C�
�u^���:�R����x���d�����㟊ZN%����ݨ8&��{z��a��uT�o�iР
[����l��p;Q�'L���JmUL�]
eX�'Ns>
��2��.��:v�N~؛h��ɨ3E���aP�
E��"�/�
$gN* �fR邎Q�h�}:A�RB{�?����uTwJ,�]�Z�TS�"�'���h
�,0A��ƿ��H_�%��
�`�Z�Wa��B���8
�}�N�w���u�#
�R�l�~�ިm�մ���bUWg���=���']:���*t�ށ�j�D_ԣt�
f�Z�[��@���Ӌ�m�]�Y�q��Go��f��
����%�F:3�Ne:u/�ww
�W�(�� $!�� �	���xp*3��޿��x�O| z]�yH��:u>dw���Z�����ueG�z�=r�����������{HP�{/J�2F k�e��$
�?��.K`�K��{D�ͽ��ݣ��s*����Ǿ=�/Ǥ��T�w�}̻ޫ�5|�TJGzS�5C�㐮>aa��"��K��j�$c \ͯ켑XX�0���my�# +�z
����P)����9z��8��8݂[u��ڡ���J���멚x�5�1�5�)*��UL|����Dh�Ak�Ֆ��[��η���T�VoN0�w�*������#��kK5�%���TQ+A63�16>Y=��/C�ݚ4?�Z������>��e�-����=UӦy��.�4
��<��Ձ��^�}����.`�m�4B���ɺ�ڂ5Y}e���6�Ov��oMu�
��˧�І~��=�4���P��y5-��ښ�
�vO����6g�0�vP��
�Hڈ���"�?_6�^:�q�h�}<��^F��=��JC��'
V��چ���'�:{S�>�H��;��s6Ek㮘Uq�o��5�p�1Y
�O�������a���<��ՎA5���
�n

E�ȗ` �%&�s���%x|h,����ܝi~�KŨt)��c}]��䍲)�7Mg�U�(�������	yɆ��� �c�,u���5�ԓ܌�f���97�O�IZ�&�Z����l4w
��
�n��)�'F���������z޺��K/h]��ip/�u8t��l�V�]�Xc��f9�lg�]�)k#n(6��<�Bêᳶg�E�J�"'��Qo��/}:6�|�S�
\kװ��2^�Q@�7�1�
-V��|�t�x/R��8?]��
�G����Ec]وٚo@:��m�[m�N-�Ҧ������';=�í^�g��Ǥ��)FK��K f���n�h�<-6
OIk���
�`�(����Y�Ֆ6�rc�I �\h˾��[�%����n.�''��Z�{3܊�q�CWɽ垪G���
-��
��-
�^8�:���O�L���<~f�_X%���9j֖��=�ο�ه������U�
����S��z&ʦaA���`���@���X� z��"��
ȉi^
�«aU��
�IL˲��U�.�)��\����SK6Ɖ��C�ȵ	j���&jS�,ڞ��n
���20C�*�Ǜ��	���o�bC6F�Q�n��xM�WA.��Ш��C=�RP��e>]-�*�#�B>hm���:J-ٚ$%,
 ���Q�1z⊤�� �BF��֧8�6y��e��ͮd��3Uov�s﹥�|����d�����1z�3��d�'�QnE
٧on�-44��5�yz��|'�(�P��z�u�¶E�p�\�&��w��<���j��>M-x��c��\��4)�Н�h�v�L���x��S�:^�
-9\�5y�y5	�7����QT�WE�;|:dm���-s��\�S�I�w����0�F��(H�_6��Z-sE�.\p
O��
�$�����'�
����;�}���yJᑾ�`�0������3��%�5�6T�p�c��́����mԵ|Y���h��U>�l�[u��ܵ7
}�֕{{���i����
-
s��2�Z���9�?�-���

Rl��DI��h�
� ��t��Xa�?o�]
�
�Yv�U�E�V;&}��r�F�s����`Aׄ��!�h��5l�vwo+�fy}��
��skN���c=�p�$���g{
򝡊N!5���Nb��F�#��U`��IqI�9�qJ��!f}&����J�.Y
i_H���EG����#��P]��?		W�f\o�x�7em��K
u�
�r�T�c�p����� ����Q�>M#�:˂����s��GI/��I9֙������}`�v���f!9����>�0 
��@�I�C���!��N��8e���!D��
t�,$����R�"R�M�
-]���u�����NJ�[�c�S������w'�.9�5DI�
k�v��!�il�_FL��SL#���ˣ���z��RS�������R�:�-��$�d��Y�0R�6S�� 0Gdk�r0�9T�����x�8/�l����J��P��s+��ux�41�:S�R�S=K�T���j���Y�0)^%��2�|c�,��ԑ�=
��̡�
*)����b��
%˥���"b�_�@�Y��Rx �'���_�4�׭�z`��
�f�o��ͭ��y�UR
k�⓭��d�����S�L܎ ��t�S��Q@~
&�#�g
����D�<9�b����zC�i
�'$�yU�l�o��B�{��`R�c�н)\쁔V�V0�}
-b�e&�\Ϭ:�2�>�>������+|�3R��O3��|�Ͷ���L��,������Fl��d��s]*R~`���Z=�)%e�
�E�b=J"�t��?[�V;���18tmgS��k-�_LmG�-��z�Kϫq�jʎH��u��x�<�^kn����ޓfa�_�G�A�c����
�yl�W
��%BD
�`c���/�PQ�Ͳ�_�g�P����cn"�oA
�Ǡ�,���IZ�R7����k��w�n��X윃G��%_�7$~��.���$!�-�l"�[�8�e��o{��N"b6��"V�+�uB�:Ұ`GZ6�2

5
e^�
Ϳ{ ���e5�>��3�K�	Q��9.��xh�kA� ��
]{Ν���[�U���O>bb~���:��q�-ٿ�Rc��$D;C��~�%���9��iD��
=�I�r(�B�z�}
-
�7Z��ؑ~OӐt�В��Jg�
��Q�+�昁�lWǺ���	d�}
bT�L�f^��D|g��^hi9Q1��
�,�'\[�sͧ ��h��G*r�WF.�pp*�	Y=���rad��z&�?3z头#mM��($h���*`C�V���CB�Ǫ^��o����R�[`��
�7G��z�|��靫�rK��ݳ���$�>��w��<֓�'�;�a�bl�W˂yTԊ݉�����{k}��W����,jlWE
i��'jJ���
6�HKm�=��brΖ�Z�2zفo
��ا��
��
u��Cv�*���
`����Q�^).}���m�*vw���sq�!T�MTD���=8��9~-s�'�{4�D�
a��	~=�ħ���'��OV���ku<���ޝD�]�P��9
���k�W�k��X��E2�t��÷�#;������|n�Z����ʗv	&�1��K��!�����C%�WQK��	P�C
Y�ɿf�,�}{�:�!dX'�I��� �
�x��h��u�|���D�\~u{y���,���^)ӧ��;�.T��

4�D�N��c6a�OT,衜Z�?��H�CmS�O���S��;
-��a������̜���i��
��ER�_��ߟ*�֙��Z[�/�#���aZ�J���;�~�'@%�O���'�C�{AwW�+_�����>؛��"��Sr
~3�/�k)�å٤��ٖ�ø��N9�|�������I�ԵI�

���G������u at Gi��ҷ��;]�#VʟL�����2~����D��<X��-%�� Nݟ��Y�\�

��̈D̗?����;�U3�2F�� 1kw ���j-���ƻTՉ�"�o�r�o�Z�.��&�C���	��o�߱�W<�5�]�e��h姦����̟wǐ>9��<� �3
2
�=�
J_^(�'�W���¦9Y?Z%��#�Q��Mc����i��� �d�s�<2�l�Sw�<Z�X�y�C8���Z+����c�L}Y7�S%A�\���P��_EF��Q[����#�&�&|�uo
�w�][~9�յ�7���Ρ~Z�AlH���xEB��^�K�~g�&��z�>
-�Xe��n�6ye5yǪ�'��K]�׷G
-S�

�;MHv)�����d�����
�g
k����s�S����<�_l�p0Ϭ>�Ѫ��H^-�§&^ɠS
�`g�$h���Α�C
-�L?�4
5�+'el����H9.9�)%&;D�P�de��-��,5�_�Qr��Gt�R{�mݻ���M�׌�Ї�aB�y��;B��6���}f�½u�oM#��:R^lK�yg��#�%�)�h��Y�3�z�Qӝ|����!,{ꕂcv�@A�����k�~sɘ��A�˝�+�<�)AE폃���A��F�1c��+���o���.	��!�d�F�!����Қ�ow�+�
�GY%7�I��_)����
��%�G.wd^Q5�]�c�_�6��=s��
�
���锐3=b.�5IK;�1Kl��9n��S���[�� �
nVGkZ2~:�F��:�&�z�kL��ћ�|_P��_vo��"�T��mv6,u��-��`Q�*|��
g��4��>������:����
��@��
��\S��IRЏ{Ci�<���TZރ��o�}ul�����iZ���ԇ�P��C����e
p
-�`s

N���j���v?�bs���׺��*j�|?J|�Oݻ�_�"J��Wt]�	:�4󎕌J�
n�K�:M}��������vyW �q˰�����:jձ����= �m��H��"n�3㚐�tէ�)�@ެ���f@^�U�[&Pn9:uO�I
����P�_@/g�d��͡�G���G;�>;E�h�

-�o\�}�n̸��!�տw���U*
�痁9����h�rn����� �i?���r3:Y�2�l�6���������񊰽QP�g��W"��f�ݠ$6(�!dڧ�.�����%�)0��V����]��;Us���e�_
��R/��
;�0+}���~5����
��3RpK��m_���3��n}
�I��^�)��;AI�
�G���)��o+��*��?��U�ݛ"'��*
i�򮹤���1R�u
��7��j3�>
x��R{���sf�Y�iT�jo�eC��o՜�-�g_��4�"�~��
-�l�i���Y��$-��w��o�A/�&eg��: )�+�-���
��X�,���M��ؙ������$-������0�3��G���˦���!:�9MHs��6!.�!ǘGK�Z.zk�;Mͽm�G�
^�4\�bg��m�2�!��T�&_�&F|��AЋ͞�[c��_G�a�����`Zj鑊Q�9�y�o���`n���BT�c�*d�#ﶱ����0
�qZ��rc�c�&wW�	7������҇���[���Vzʟ�EL�}���uB�mt&5��J���q����B{������E��RZ�k�&��`�cٳ�������'=�7�c��iE!
my76�����Z�����<7� �_=
b�@��
EE: oa�=�E��l��g�%�	j�冂���w	%�{-�k��H�
��]u�5v���{���=�"�NJ�9N�u/�g/粚�~ٯ�r�C~�Iz|��WZ��\um������͉�+x�؅e�l1	v)!٧bB6�*�o�?��-{e�L0?r� [...]
��!����Ӌu{����儔�d
�7�K����>
-�YD��]S5�CfyU�ܛ���k��oF���P5������4AK�	���d]>�֑\@m����

�
o~^nϾl�(�u�
toG��Ѷ�=�FE��a��:
-�������p���
=��g�o�Y�����bmK�����;Bv�VH̏�ؘk�=��)B�7��43���Ib����y<�o����� ��c�
�]C�Uc'��t�
<�G��=4�C��2l�3��ZO�u�X�}��:�����0�o�w�
�s.u>4����>����kG��6
zڍ��~���m����Q~�6R��-���^;��k�2�F�������[�
-2�3O*��V�y��胩�7�^e��o+�
-ot�3oMԤ�����o ��8UR������>X���������?C-t@�/���2�=�4��\�)~t
�!�����Zt
X�~
d��ǯv�Zn˼llK�Q]��R[�/f������*���

���8*�HK)p>i�}�eC����O采�e\��
%{����pM�u�{p�V_u��2x�#8X�R�����^\�o�:�4���3.
�1�6;�
�Ǡ!�qh�U��h�E_7�%84<Ž��i(�]Ր�l�����Py�c�<��"��
&�<��uə` �
���.����Js�o
M�w�[s�8E���4���S��~��=Qu�M�H
-d�
/R+�Zt�Myu EF.ր>o7�{�t��S�K���ύ䪃���)(bg,���`�=��
-=]��q��� G��Y,Қ��o4GZ>�P�,�u��8"x�����*�* &:���Zڮ���|�toO��r��*�Ŭ��޶
A�ϖ[���<�	S7g��nN�uo
���NU<쮄�-kɻ�9�Mޛ�g+�
-~S�Ӓ~
'E|7M������� :�-���r��9����!�[�= ���~��Uu�2AJ�D�<@�Ҽ'�˛���;�Ϸ�/l����QV��
�|���ͱ��o��'ئ0Ѯ�9Ƀ�Uo����/�����
�aru��ؗx�7�����=ҽ=�BGoM���� V�^qK�Y�����/m��\7���b�y��ROt\�v ���4�/
������26z
-~[}�we�tw����R䥴��nUʳ�!��_��Q�N55�9�۝���bJĥ~����ZE���PI�ʣ��M�T��BG{D�/|��^q�
M}��S���w�]�M��Y@��臽���9�w.pI��y|P'���O��I�����.t�_�13~_�Y�d�$�HI,9d��8�Lu��#��i�:b{�vg p21a�>�������Ǣ���o+��4}7���G�k�,!�:R�p�#��J[���ޒ߭ӈ���&��[��5O�9	��kk����D�ӵθ�k]�
B�CF+��U�. �]2`R?/�֝����:i�5��}~������"�o�Lº���n���&������s����N���qƁ����˖x�|K~��+7ȭ���
���\��5z͙��/p`��O���GEX&o
Jơ�
;�S<���� ��W���c%��1�*2
(�J>�2IJ\鬼�����(聮-�}C��&�PΫ^�>5}��:Qr
1�`��.��.�Ͽc����=�
-�I�i-��n(�a�xb
�����c=��"���k�.y��Q|�;O�wɨy�Iܛ�)�ۅ^p��������S
�;�,\���4��&y�qB�i�j�=��i��
�'���|�eT�OAC�'�1^Yu�������Ͽ>C��i���㑢��P6�WG))���_����#@�
j�%s�huS�o�������,bb�m��b�F�L);_ln8�p�����ĘŜ�+��� ��:_hn8��
C���Њ���=��>L��
�R���#1�[e�”r�T�c�D�#�Xi�y������YT��pE���se�O@�B�դ����;��Q�7:�*�v�@/ܳ����Z����P��?��{d�$CG�͉����ʖ»�6�KYK�㊄��M��
��1��=wWZ�Sۿ-4�^[�X�ȥ�)
�Ϳ��������[��;Բ�������w��g���]v{k�zS�}�M���=,�{���2
-���3И푒0��2¯D����l��[`
�;D��c5:�HY�{�X;_a�-BR��]�C!-��	
�?[�f��Fo
W�����>FK� Eg�.QkN��
���	v�U�Y��^m��j�@��IW�2�f*�
�1�h,�鿸��G[���i��P]�W�c�F��-
>ٜt�,=�˗v!5�#g��Tl�i
�ŧ8���G2L�C��^��}{c0��F_���QjS�7��/,c�7@�����'�;�1��<�2���� ~{�o�;e�d�4��CHLZn=9�!e�����Q����Y~so��▲˶��A�]�wZ��sb�@��SY�u�=K+�P�7���NyD��^�Q�8�Չ~&
��iB�S�/��ߚljI�:ү$�\,���:&�&DG
�&!/�"Bʾ���OH�)0#�.�fZ'Q��q�c�hoCO��)R���9r�.�
lR|��0"z��r��U�?�*̀�sɘ`��O
�I.�"�산�nhڗu.��
��@�z�py�c�W�Yt]�Ʈ��ЧBF��@��R��W�C ���7�>�s�'K��@V�� 艔���9��x��OFB��-ye����y�|��w�RǽX���*d��x�S�@��-��3�%����b�SN�:��%>5
�Kl��}�
EK���޴�O
��c
�h�c�C�04�H����l�G�
<�z ��&�{)7��M�.�G��
o��3o�(���C5��>Kʔ6��R�{l�y
��<T���
��Jg��s��l�U�4
���
-o̒��
-l�e
k
.� ������'������ဇ���3����1+<�:�[�(�
����Iק)1W<J|�_G�
/3QZb�CG�?]e}z*�t�����4�����h?b#��5��l��De�F_�u����.����Z

lⶔU�
x��x���^�z*�,@�����8����a���)?-wd\�
��:�r�

m��f��ٕ;��Wv��OV�0�����O�A�� �"�l��o
��hy>)=�>���(�Gj�.!��| ?^z_r�&��l�R�-��n�V=���F$t�
��� 2�+��
pq�!��E6�`
��C�S��. at k
���'*�#c��@��_��J<���=�Y�3�
e�"|rr�SBH2x.�f�x�b@��K�E7�BT����j�C[�c-�jOHJٙ"��7}j�u
-�����,)�;Ϯ�����hu
�6��r+Z�=ʶ�}��vm��g�_�@��R����=��ozd\�}�&�1�K��)�it�E�������u��1b�b,l�
��
�7
VƟjP�_6�U'����������#u�@�ŸԔ��U©@%[&˃}sȬ��H1����SF�����}����մ�
<R�{sM�
�a�,
�_3��������E
����/r�.��2GN7�TG��
fa�LS�{�/w�8�6q-�+gC|
-B�e
-�1y
-���#-�ʭ�U뻠�:Jo���L�������T�W�+�JQ!24��ezK�Pt]S�sç�~����s���8���GϺ3�+
ٜbWl�ѳ�?b_�Z!��������F��m~��uѮƥ�+��Y���6Y�1&y
�C
��>�X�
��x5��>�c�84���e�t��˭c���7�Ә�]A�󕞴�-#ٿ퍔޵Nѳ
�:�y�Y�/�g��ڞ¾u�b�U��

>/�S6	.���'��Cn���)��1Pt�6��;���ki�{H�2v�{�x�腶��ڦ���� ��=�xx��]-S���n.��#�{��J��
������.��^\��'��?
~��pQ��g�e���cd�H�~%6m{
�|�~���F?:x����K�O?ѳ��Vձ�R�W��NT=3v����O��{��
`R��
�xu �#gy59�f�C�
-�(�>[��������v_��NT��(�%g>��`��;��h��{̧�<�7s�W.�s����G�5�� 7X�
��2jc
�~�Pϲ
��VA�s�h������>�ی\���<�}�{��r�5
��<׳ ~5&m{�������w
�u��a��~mi�������-3��L�CR��!�3����;_���vEM������ 6�X�g
��#

�æX�*B����
)1գo��4�ߕ��{�l�_�A
jh�K
��
-��/!��� �Y�GKm݁�>���l���
�݂-��
-�WQKW�/V���:&J�N��cիK+�E���A�yL���p��ظ
Ԋq�&6���ƭħ�%0�/˞Yf�v�R7�w���in�UM7!�4Sޛ���z�9
�[(
��"�\B��F�����:}oe��tX׺�E&�b���X�WO(��|f� ?���p����3���͑2�zj����7MN2����3�4���
T�l?�G~
�wޟ�ߟ�|Q��')v(�G���>%i�2�JZ顑�qjH9N:�:Y��<�����Oڈ�+��vI-|}���3EɱɈ�"t�i�|{��9���!�g'��N�|➐������^��9��a\ү��AN!!Y�PrK�������'}=�1���λ�?�+����c�M����!T��!��OM��,�ҷ�!�=Y�,��\�NÂ��귇*b�OŨ�J酻"z�m��P���bx��H�=Y]���ۦ1X�g���X��8d�d'PK1)E�TxMӐxio����4"t���ɡ�T|��"zUL�OU�:2p�ۣ��͙���y�jR/o [...]
-����̂�`��r���5��J|�����u�&ǫ�� �
-��(e1&�5G�
�ٿX�����IV�-E#(ί����ȕ���6�@O�E�W
"��:�
-�R��jSۮ�&�l���*���~?U7f��V|��35ї�!�'k�=fe=[�Zy{m�� 
��&��d��M�k��6 ��JJ����~OL�= ���*�e�E����yf���8�ds�[�%l�m��w��gK
,���c}�gS�ė�6��:�kW��vŔ
����V6�x>_�U���*-"X��,ɿ�]�j� ]�+�]��]'���
s-�x������5��lh��d�C�y������,.
���G���s���6P�d�;���2���?��
��Z�k�<��84l��<tw
�j�a�,s=�fyO�Eڈ1OQ����O[s~��%|��$_9Q�r�������/{u���=NO�LR-�hUsƯ��пiX9�]�跇Jr�ym��f��H�KctmYW��O����?�Mo~8[e�
:
ac
i�"ܲ�<��"$�p�\e�rO�o�c�O�* ��M��)b��$:ro��i�&e�5����l��k�BD�2�oU<�!�
+��B�����&;Ԑrw'ʢV��nm��w ��>��P��ү{Ŕ<�s0VꚆ&ئ�q�uy�:+n�ϵ<T
�m*�m��D�O�=s̀_:D�d� ��x4�Xp�x_�,%wm���Jo郕��vƪ"�rL��2���; �4Ipqnͻ:���8�
-Մ<��S�H��a�YT��2�1~�;�N8]�Q�zr�g
�f/��Ppw�;��	%����=���)�
-�Z�q�>%�ħD'��F���c��=�{�������m!%{��9FL\�
qJ�y�>ӿ�Լ.��nL�c�>տ�D��0� �f��4�����&��l���h�:��v�/j���\�
����(�
}sぺw�8LN\�?��lm�O[�M� N]l�8��T��
-�p��e��uj�ÂE��.���ֺ�Ϧچ�u&å��:�5%�e
�l��ݧ���##�|�JG��r����?�����
%)ӯD�{e�1���8@��مU��RBƙ��r ��m�C���g\�4�^��C��x�e����P�ùU�
�,�L�Ytg��wmc�O�ID�[�Ѿ5�F6K���b^��+�<�}�p�m
��!�DZE��]a=�$lǚ�m�}��2I��b���{��Y��/��l��;c��}1�ʥ�E9$�Dc7��9��xM䕽��ǧK�*�����l���t+U�㕏,ª֙�������Ze`f▐��x�W���V���{b�T��Ĭ�Ah��`E�CZS�7��ӵ#
H���Z�!�$�%Ȉ���k+��7m��p���0��meϷ�i��Z�M V�����~�kL�Yۜq�:�Kv)�y䅪�"���@�树���&(	?~@E\�.��x���Ћø��̟t���}*
�d�Ws��%�T�b� �xK��^�ҵ�������;��Ju�й'�
"P��9 [...]
&�d�Z����|Y��N�D at k��쳸,C���8���9\a`����C#���O�y��[��#���R��id����@������d��ŭifإ�
�
�6Ptk�����7r^��̣�A�
�d����;M����"x�Gyy0U�b�c�u]��N�8��@��(#i{�&~��2�P
~�?���o1[H��;ﮱ��Kր��� ��a�F�*��~^�-{敽�xe��$|�e����6�!c���:�����m-���g�r0�
���d
�s�	Y�YL�S�G���㶆1��!��
�W3 o�#
v%w_y�Q`��z.�)��2��?4
��ẃ�
��|����d�wʭ��
HQo?m2p��L�CN�0O��������	b�s�Q�Ӳ�v	1�H�Ƹ��4�
������
��~)�H���hZ'Xɗ4��/�Ɖ�^)��BO(;Ց�ߔ��W��2C-u�i%˽�wl*�2� z�l)� \|��C�Ԋ�It��#���8�����.�l�M8��2����5������M��ek�3��C>����F��踹���
q���O<`]�%#���D�Y��
�^׭�N0�W�4�T><�PG�:]���
�D��B��s4�k
�@�
����)p�]����`��^�bd�y%����
�?&.�P��83KOu��pɳ��p��km���_��x��<
뫹���VCױ�
����C
���f}�[�Dn
�CV{�o����tHq�
5� �_دF6�P�+�`	�6h�
-l��x��ͮ⻖qX�[]S�1��@/�.��uV
6mq
�[l����1��g!0��ȣaX����;Ґ
��H���K�V1=���@�ZqC�T��������kw�~RU '
cӲ�Ŵ쥞›���o4MI?^�
+}x���Y>�6�+�H��3��}A�-�\1P/�7��S.�:R�
���)�h��Z��49�)e���l�[F���'�
=�~���!*�t����5��fX��.�:R��h
��ڛ~�К�{�:��b�dm��K�ߞ��P ���T�����Vc�>f_5v�^
��}��X�V��Rl�2�T�ɺXdW���C
�|�����
�˱�P��SKm2B�GN��ʉ��Zz���R��s�D��^|�kmڛ��
�|6ߘ�`q�;M�s��{�X�ֶ|c�:ʭ�<*
�.���ɺ=I~��45��CT
x���Qj��
��Ѕxx��"�ƪ�
�y8���`�m�
�q��&]��t�$�
�w�V��i����@
kqY6a�
�H�5�<!
x?��bK�SSO�2����c���Q���
L���P c
�
��		���Kq	�::أ��}
-bֹ�X�i��ݗ�A��x@�S��7�{w��k�A+}E�A/�dP�7b�����r�ƹEi�$�)Su�D,} �|,yl�b�T���k�} >[u�V�������1�
MM�E����B|zr��ں?-̓{��m7��E†|�l|�ߖ�ί��o�"|�?�1���("�@�Ԡ�'([J���7���i����
-�H	�t��ڝ.z�7�����il��)�ꗽ��N�b5��ȴ�1�3���i���S��
͓���qJ�v`����.�Gx5���
ٚD�^ ?���X�f1~�f��P��9x��
-]�ϲMbݳ�B��' t�+���G��9�����1�,x��h�s��:ѧfC�G/lb|�
����$*����X�p�(E[����b��x�ccg�/
1:�;�M:Q�
/
��S`�=��
�
9��
-�ꐡ�8f=������
5��l����>-씳*����M
~u-�XτYg��
2X�M
��q��*
�T�s�tԲ��,`���>*�&�x�W��M�h�X�����	L�EL+
-p�K�(�J1.�
�������z>��zK��"�攓ҁ^,�*(�bd�k��X��5��Z_��}@�ەL�
-��
��\�
-�#
�u��:���[��d��"į#��7�?\jn:Y�c�.44<�&*
�c��?Y`�*:̩d�vD�"����S����y��Vj��
s���:� ���\��%k����j|�u�*t�7�����'~
��y���p�ϙyWt]��wj>�p�O=2 ܬ��4
�]�F::{�f��w�XZ�7+c�J@�с�!_)0���͡�T�	��ɡj{�=�c�����y��e�|��8[g��hH����	�ehz�Y�c{5�t�
*�={�Gf��y����^hi����Ŕ��5��`1�&�A�q�˵���AA�_���
��6q��yl� �t����v'� ��8_%B�5��U<�U�.^/ms��*c�伪E
�g�#��|�CŁ��q�IT�&P��Il�e��j�`g���O�i s�*R�˱�R�]�)��rK�"Z�MDL�
�!G
�|��\p0���
�)�i��q�4�=>j�:C�
Ԗ_ˆz�l�Zv�'�y�Qqf��� *ho� �tT�e
-
z�e���3
1�#�'�d?�O��9D���%�%'�:�pI~-
t�H�
���
6�t�PnC� ��s��6�Yi鴈��g�
�GS�p����s�^�u���k�)�����t�
-hCX�_�x�B�>陈�Yon����ujhdZ.۩����h� ��.���OT��$�x�Tx�o�kyX�+��s5i��:�/p
f�j{8���H�3	?�2��_{�
��,�pc�&�H��t���pj ��T���犖�+����3#�i��ο�#
-r)�6�s�䖣�������W{���C�x���q��g��Y����O˵�c5��PI��*��VqE�i�4(p�����պZ�/:e���)h�y����U�b�M��I�
#��Y&½���3�s�@�
.ձO��Ϸy��E>�(d�h��!�������t���(�e���X���+t������N�K]K�
�z�#@��m�w8����\�ӑ�]���#�O.�0�;D9�cϖ�Ol��s譣U
ͷ�F�~��B�a�m�����]���,0�_w������
-�An��FRɟf._�Na�}��-I�k�����d�}��< O���&�G��Q��2
��#�~b��8U
�]�s*�E�<��&�""��Ӌ�'o�Ǫ��BhD�<����j80��
�H^M#�|
P�̒���cᐳ@�Bt�F��宊��=�'�)b at o�:���ΧF>�h�Gd�
� [...]
-�������9G��ݩ�f�
���4����i������7GrX,�3cw�q�V9ի��Ζ�[�ńd�k�T4�GI{R�p��JK�S�@9���9��9.
��T�g�||ޱ��������� �t��]a�k��x���t�ʩ9�Q��4�J�
-��W�KO
�̯\�c�Ew����lR�=<��	J�
��~���d��
���
-�r���z�5�ǁ�[���<� �.:Ž�Ĝ���0�
���o��1�
�Rpjip�
��#���H�N@��-�'7�
�+��r�lS���Fs��m.�X����>O�t�c�΍4�sC��tϧ%W���k���
.�h�M����M!9ɩ$���~��_{MGK
��"�y���c���y��=_��T��]	&ީ��.�����45 >��Q
-d�<����b�^�_�`
�����n
���=:ů���0ig
��E&�LO-���_+��_�O�����l�!^��\
-.اl���)r
��Ѐ��*��'(��Ub�\Jb�GI��d�Q��l��u���t���kh%@
�TMd��	�R�
��3OH�*�� ��;���s
�e�XK>ígT��uD����)�Ad�.�4�|eaߺ�<�y�;c� �$<ԣ f ���:CH4O�·F���d������B
�&�ɴJ�n5
��z �3��&}m�zK��|
����Z9��wװ��JF�CN�r(H.%9g{
-�SrN�y��UF��`����ǎYh�y
-�ڧ&d:?�3�(0�O���)�U扊�(�����^�m�۾����93g���s�w�-{[�lK��%Q�)R$Ŝ#H�3 at 0+˒���r�`�D�F"��ϩ�/fV�νS3U�a��u�˅�,5�^߷�/4XS?[Y�E��i�b�ދ�[�cV/�w��֜�Ք��jr>!#������('�ƹ�9o�ʹ[��O�
_{W���H��ŗ���S]�(pM�(D����E�̀V
-i��&���
��(�ϾG�����ׂZ)���V��z��Ǭ�C�n[\C-�L�.D���@ۮ�#��{�q2f�W'E-�����L�r+�	���u�:���h�˯*���݃�f����}�Z6������;n��V����o4���6��Xu�x��0	;I�L��dB��ߖ%�);�z�]�i�Y�yO��i	�Y5�>nj
k3�l.n\O'{U�u=��K�+&�":��9�k�
����G
<"x��)�T���V�	�;�/R>�(f�4�MP�i6��%q'��a]ܽ���mN�JF>x��������u�1
)���je�zum�������.��4�
�S��AG at -nٚ�^[
��s=��|�eÁ��V�q��r
ZS�F�ݙ2�.!<&!��gX��B����?ͯ��oI�ń��Dï�}�phs�+?n�6�l����O�5s{hm�<h�i��[n��3�/�[��
�}��V�.��W�L
-k,�	?o6~	��۸�y-8ͬ]�����Tw���,N�+�'d��r��i'� �*�i�-�dk��0�Hq��{u�_;��|zy�Y����-ƕ��Q�ՠ{��3�J�ZR� g�O��aW,�&��c�MQ/�
�֍1V����VԊD��=N�>��f�I�O���cQ
�
�&q�#5�]BM:x�PSͧ�&vcx�W���|6c3�n���B�›��7&�%������R�����Y���O��K���FJ�>k�qe�Z��ޚ�ե ����}�yD�S��Q�O�
���T�
V�im��,b�P���v��>�p{N*ߘ���=��'>^W�Iy!�z�����Y�D
6���t캘��
�꽞2�;�$�뺸�������������p�Y at B�2���
QCk^�B���R�6�:�,����_Aw�'�b���1�ɁqR�﷪�s+�����כ>�;ǃ�>�)n�\b&<�y�@�#�ff�ݨG$ܚ!V��Wg�[���8�(�
-�J�^|�v9��t�x��.6.>Cm���X�sn�����1J���U��X�1�`�m�~�t׹�	��MH�[��]��m�k�.lN���9�m);6�q��
-����1���$�l���Ǎ�K���C[SM?��vf�
�$���������!-�qs
-x`�V� �
��
Ns+���m
�/&,�ڴ��
5�@�n�%�����Q����K��R�4=W>[}]{0<M.�
�miD�K3���aY��)��n���{
6�{�~~.d��W�XWW��U~� ���w~����I�^�̳ݩ��?���0��)�L���'�����҈U)�>W�6B8��n?�����	j���>�-�h�4�8�<�eW���WV^t�-��:���x2�6%�r��[�%�o��5�Ւ
-c:⥰��ps�����R@�#��{�k�ċ���_'iE�In��0�����3��$d��V&XW#V�,l
�
�܌ؔ��IJ��^ŏ�ǵ��m}L�i��th�
�J��O��FbE`�p�s���	q�a���u��f��@�����D
����
y�	ҕ��R
2�*�:veX���*��8�du�r1�+Q�\���Q#�+��UEt�ʄEH@}�ߥ<��r�[*ɺ$ܘN�O��$�5�%��?o:4��n1gu��DD��6�[�;S�6�,j�=�p_u
-X�*�V��gؕ�5��������ߌ��?�>������]S��
-��BϯQ���>A/]x����A���oZ�CJ��ڤ���.���E���WHO[Y���5���n5
�{YձOq��V����!�"jd�v!�'�<�������q⹭1����<�3����
/�����BjFIh�W�4	q)��U��&~kL�iH��
�U@��u1�)�a�
��	!*�6;#�6ݭ�:8�(Mۄ� `rҨ�&-�k13�bĀ��y�Ӳ��������pJ�Z1.��6�t�"�݊}Λ5_��i
��{h�䐾��+hQ��1�n�q:�R��T��M𲈍��:n�,Cw6fDp~��9<h���4��‹���
�a��Oz_߯�Q���ȁ1nCh�Y
#\�ǁO"��urz�0п>̼���p�z��s����A�$��8`A\����10!nAL2f��o��8�w�λ��jY��k�^ҩT�
�ƠFD���Š{9I3�:<�v*f`T��f1%=;�
��z��-�����FA{h�Q����s��GإK�ؗBS2��0��ܳ��W��������k����º�$�%�v,3
܏��D�R
�i�M둵��sA-�*��v�g%⤣�v��-� =	���.��NY�]�R�
-�vf�W,�Aߤ\�^Ĭ��<}w�a�bF!
x�.������ 
԰�R.eO��ݟ�io�]�)'�Br�%`&lj86l!_ݘn;��:�
�^X{G��c��
B�{�b�ߗx����������~���q>b
��7	:@�������[��0'��95�#�'�g��;�D��fL?F�����C����^���y��Mѝ�Z��(E�Jz �T��]rQ�.������_4�����Wm�-�4���}r���\���0h��D��dש��x.�gW�f�zN������S�L;�̄���/����VN�{��^VT'�D�bb0;��V�
�z�,�@mRz������1�ῷ�\�Oq
0���
�A-�ek�_�5*n�xG/��)�b�������T$����B&�rN!	�>�g��m䲠��Xp���ڻ�q���[��\��fV�
W�e�Y��[�gS6f3��Z��˞ׄc+��
-�j=a���q��;��k_'
�k�3�g���t��������Rw3Bq����to��G%��ak�q)	> ��z
g�x!m���0*�_U����+�x�Ѥ�ߕ�=�[zUa�,
�`�C]��͡ɦ��� ^�S�4�.�ۻ�����U�מ;
Ihq�SvZu�#D�R��$�,�UP�>^P��_!���)���f��m��?�^�K;�{�L���D�����삘��qpkÌ�!��+aS�Q��=�����}'Z{zv�ifVѷ=+�O�8��~�2� �TCI�|(n���nfܬ�$,JE�+S|XVހ>��K#z^���L�p�Ia��jiXèL�x]�^>=�b��
�ʥW-�oM.��)��:f����sO+�]y�~r���T�ց[1c��&�R�-e���@�Ұϝ�a���6��	�^E�̦��CKXY�+#]':NM��k�ŝ�<(��|��pL-j%_E�Ă�i�&"�JiƩR�
��Ӧo�7��E�{�|��q�-������sr��wb�_F��FD�(
M�
]}���ʫ֟�S����S��vfe��CL����4
��Ћ ��� ����O𶀫��wx�V
��ʢZfM@íYxG��}����[¥��ݲ6�t�����Ul����9��a��q+�
��D�hE�1j���Cj��O�T�Gm"
-�V��
�CA���6C��8\48M(
�w���q��&;/���/oi�ԠA�G�Jq�#�c�0�=m9�����9f�A��*�'�g�3��מ�0�3��_�~�W����t���
-d��ia��;N��	��N���7���;���UE_Z�>
��N�Dİ�W�{�r�u�l\�Q������䒭IzEX�k�h�a�?jum�w�u�)�ӄ���6^6
Ǿ(n�u�
��������҆�ߨ'�m�+�B�B)M�$�`O�ݭ����8k�Žŗ���7�3��8�zvͪЯ'efE܌��:�p�vn[�)aG
⮠�[��_�
'�u�B�)�fg{��n����UA
�*a��
ns��Ws�t�����4����{E�G�S;K}O"f�#���/�tV���I�Ĵ�s�הS5�QJ6'�O���
ۜĝ��qg3
ZCn�K�Ҷ�\�h?Z����{�}�Lʊ��I�
-kiײ^.!7/�fz�l"�ʔ��L]B˩	����]�lZq�_|O�l̐A���R
MC5�{�zfsw-�q�f}X
d��bⷤ-rvڮ��L�&�s�1�C�ώu��~��0ϣ�<|�# '̼���5(X��U�9�������k�q�"SԂ��t9k㴤�Br�*�B�b
-�/����;. f|I��l������c1~k�틎Ck/�,�h> uY ޥ>a��fa����D�e��
�k��@���mN�c�n��7��Ư5ʒ
a
��曖S;��9�j j��T�O
�F;��H��p��+�
��&:�%
��⎾�� �H�S��(�<��c:V��X��I܉��t9	��s�"j���
�`�-�\BǨ���ZOnGlN���E�+#���gģ�ۭ�� ����?�,���
�Ү�M����5�����T뉹��߯��<�fW��� ��ޠ^BX|G9?������3��R�4�+B�[VF�{}	gbZ~��[^�i��+�!|
)���..%��*
�)�Nk�*&�lC��ft�⩅W�c��-�jM��Ƨ=lJ��j[L]
ŝF�RA��kY�<�9�u::C-C���KB�μ�;d�1Wu�2�{�{�o�柵�l�[sh�y㹸t�A&^xCȷ<h80?L(�-�TGM2��+���'�����t5�R�{�N�`i����$�8b0�
�?�~گioO���n?�1�y.�)�ɢ~[��#e}bE�%�'
�ʸ�\���6!>`u4쪭Q���G��
7K�s?i*�?2��{P�=OHyڡ��Bf1';��KY$d��i�MS
-�Vn�[��X������1�Z9ik��
|
-u��K:�Φ=����ݑq�hY[o_Lͩ�ie	
�!��tF'i�
�˿1���ܝ���ZjI�)�f�ݪ��߾<�r�������I#�0k�f
br� ha��>	����:Om�BM�S.���!
�.iS��#�QWXü6���``�Z�ZE$�*�[n7~i
����XT�^�U���<�9�x�?#�\�5$�*Q��+_
�^
��x$�W�K{�
�e�����}�;��̿5h�k���.�i<-�*��1~L9���a����2j���
�����Sko��G�}����I+�ܫ�'�k
/���i^Kx��o
<���W�6FڏD
���I)��'��	���Њ�
u�
^�bR^���
ڙe�a� �X'_tܮ�*���l����ݞss�[��m�*��}L8���E�[�C��֘�\
k��!a��ؾ<����mN���^Qσ�#�Մ�qC���t�)����VGZN�t�갑��K�3+�Z�嘅Y���M�K��)s�٭���I����x
-<�
��W�.1g�'�&�J����
\�7��䋠_�~AykgQu7����ү�>V�-�f��i	Lu��Ԟ\ş
��)�B���ފ��لu
j)�)' Mo9�Z�u	��+����žFMܶ��Z���@+�s�L\��h�k%�oig3��YD��z�<~ 0}c�z�?ü�ށ8EL���cq-�~��-��%]۠
�
�&�儥���X�	�'��[�5�.	j�e;�<ҿ��;K����Ѱ6�qb�y�O�)NMlF���_
M.�
T|�U\�t�a������=p�f!�>�wD�����Y
�5
��k�t�ΰ�E�R¦Z~�]�2��7�w
��ǰ��	
�⌓���&���	+�#/�*�����g�/I�D&���f@1�(Q�S'��VDD-}��H�#
������a{���ܬ�F
-�(f�$
�V�B��
.:C/[�n�V�aV�LXٍ������Q#�>�4���u���u�"zR�{�R���7��k���>Ƕ�zn�-�8�VRFy�f_�O�'�E[���
����9�h�#d�O�Ӭ��V�O�{�
/('5��?�J?-y4e�f\Jb��W&���'-G��u�z+#���4����ǵᎼ�MՏ��v� �f�`8�2��"S͇W_]�����O���\��J�V�W[d
��^�1*����S���T���P�g6&��f)5a<O[�ۄ�.�z>�� /Y-�>+�n���w��u�\
�\�>� �`�&
|���^����Xd��V\��Q��'�G"&-l3_t
�V^��5��?z~��	1���d��b�b�)�q���^1�ٕ��o���}��)��
b���T�W��^�}�8D���k=Ob&r�^r�5�K��b�/iY�q3�����8�2㖰�}
-h�k�����Ӌ_?$|�wk#5�'��&!.k�fm����Ӑ���Q+�"b�:����ޑ�V�
-kC�!e�-������,�2`h;a���3�jAƤ���ύI���4`��.�M򫶁�2Njj#&	y�)v`�2�:���=�������>Ƹ�׌݃�]__�dͿ%�^yM���u��
\r�I�
-h�.�\��ܑ�Y�,풰��䂹'�V_W�G��ʜY��8€�[�Xe��s�V��w3jt��4
XzQ�/8I���(x�>�u�*" 6ag^ٟv��)҅��U�5��د�s 4̶���WX���Q���>,�z2.�8	^;if5l�4��w��l7/}���q�qv)���_��ek��4��m�R�������1�ɨQBN�$���S�3�_7XzU�?�\�v��Wy-ص� 赨F،�Em)
`��~-fd�����rQ�%�$��קh�a�����9�B������-
���%2#��*�m=�����Mߧ]|�΂�'3��I�$��~��G�t�ѹ�ۙ9�P
4��>os��T¤�$m���so���nEnA�Ҷ�z.���떃a}ǩ��T�������+���D�4��
-��4�����
ϣK�^�\�.����~�"\����(����?{���x�����o���v
���^Q���� x�Y�u���+3�ᢆ�ǃ�?i���S�D���>O�J�����
���5�m������`=�|�:���,��G5��_,�/�q�u���Xb���A���	�{���Kd��^"�-��m���n��Dv[�%��b/��{���Kd��^"�-��m���n��Dv[�%��b/��{���Kd��^"�-��m���n��Dv[�%��b/��{���Kd��^"�-��m���n��Dv[�%��b/��{���Kd��^"�-��m���n��Dv[�%��b/��{���Kd��^"�-��m���n��Dv[�%��b/��{���Kd��^"�-p��A�|�� ���
Y��NA�'�ş�Ͽz�����/ �>)�d���<A/��Y�<�<���?
=���jb'c߁�r�>8h_�J���/k�
���¡g����}G�
��_� [...]
-#�F)����IEq�����W�^5���ĨI@
-��i�T��S�J�E
�% %
r���nj�⸎r%i��"&ZŎ^�%a�
�s��vn{�H�51�P�����Rv-�TʓV!�
�3�Q�6�ljHW�f^��um�%����[;�Y�R�z�U!����
:���]�A�!���i�г�������]D�x�$l�u��nN:x�����s�Zv5bS����I�����$�Yeo���ǭ�
-�N��Yȥa-�ps�R��Y���� ��S&���eb���Y�8�J�k�Q*7���3k�zrI�Ȩæ���Bzv��8���$� j�GI�C�ܪ�jĢ�&,�Έ�\֐
-:a����Z��ۃX{{�:��_b:��D,L	q#�2�cU����M%��ŝ�#���Z��|�;���Kjei��+f�
w_���^�Ћ��Y����[ys�O��U�"&�ՔU�C-2b�1����sB�rv�*�&�)�ZI��mM�y��\���+�v� j���C3�ڤI؁@�&	g�_W�w�V������[9-�Q����[\xX����? jҥ��z5�g\��φ��/�Ag�.��p�g�~�e�WI=�RRO.@kP������86��ęn�O5�v��	�����x{od����
��ȩ�j8�	5�&m�5�m�ƌ�ݘ��j�~c�,�&��ꄎr5c�Z���i����K�)�B�r�$�rnH/�E
-bU
-P�\���	����:�z!��{�[~��~,�S�I���I��̬�:6�'�KR6^{�ʨL���2.RY�C��X�������6�.�$ sb&Vm���θ��>f$_ٜĝ��Ĭ�����ˤSHie[Z�����0�I۳}��w�)���}�~�}�5�|��i1+�<j��E�|\���2`
Ii��u��C��zx��-	y���:Ĵ��݈h�I��Θ]�
��x�t��j(��vnL5��>����T����z���)o����F���_��Ib>6�z�a����j�%�}2Q���B
"*�$�RH�n)�
�����	敐Q��pZ&J>[}C��6+y9Goo��jZy[�������:A+�#%�RuG,b��
� 0��i���MI#��?�;������4�8b��V'��Oq��_�/��D�15�ZBG-�̐/��t�b�Y������Q��s�6�ێo
7
�k	�i�
1�k�8<���iG������(X	��5ia�d���6
-��>a���M�ΤE%$����	1�HI�ys������ݸ���_GG���yc�����v!��z
QS�6G��~>���Gӽ���[O�&	+ؿ9N8�����D祴�Z�6�/�Vj6�  ����y��sn�l�''m���
�
sX�x��q+�-it�l2�����d�n�I��(8�p8>�mJ[�zC:Jih��u�Y;>��o�ʁ�[�IXE��U���^�[%��E�H�Ϥ�Vћ��
J�v��=2A�#b��)E~��������-���Ϋnf<}���ب�U���
�l��y1�o:з�a�/"�I���Xy�i7�u�K�
-`tǩՑ��vs�q�I��w#f�ns��jHظ
	��3�U(Q���\��<���^&�=�Q���tR��NZU��ŧ<\r�N*��SK�:~��
`��w��R�ߖx��7
ڳVӶ�t5	�6�	�/�g��RȀ�:Bjy��l���a3���dG��A�7+OɅ�ݙ�QN��k����b��i�X���r���8��Q%mJ~�"c�����^Ԟ�X��U
�X{�����!i�eළM􊰆P����9;6�N.�Zx��c�F��P7�InE\ëM��I6Q�^�X�]�S!\xK�s�o�z�5���s�������
�28I��%�
N�
-b:vu��i�n?������<.K:9�a=�beT�6V
�uk�	�a�1�P�Y%܆^ߙe��baXי5�
�&zy�=j�6�4���20���d\
Lt��|�r00�������Ꭼ�!�
�����1/���eK��3���g�o��k�
i����+����z��k��{3
��Ww�[z]���H�w����
�jԄM��F~s�.㧝
-i���
�-@��N�!$&,�&�*���$�,�e�N�Ⱥ��I{���T���
%(���X���d��m������P+q�嘉ך�J	��� ��-���p3
���T�zebԫ셾J:��j�'�m��U��RifV"HA�l�
<�x�*l�]DG+�9D�m����	9�Y!+����zz�*jbUc�&�V	+k�0Q+�1.�휶,�M����{�I[�2�r��Kq��� ��
ܶ�]е������JӠ�r�}�2s����T {\���5Y�23kF)��w����gż�[.K�l�*��|bc����8�|�)��f{�����f�}�e��� 
k�~��Cp�t!mfT�\R^f^u+8u�;l �m`�G�����0���
�ů�nL���e�(�'�ڸ�x)0�~|u����UGL������O(�p�
-5i�#ZNM� 
`�E
��U�5M8����H\#��q����)�&ZYHO�60J7ƨ�7�h��w��"���;V��
-BB#'Ŧ�%���u������7�M�* �8	x�4h�`L��q&�i�)�m�)�m�%�Ɵ�[���Zn��)t$hGʶ�G�}k
�	g�j����x~i���xߕ�ޭ�1eT�bFv��x����_->��|�I͗�ä�����
���M+ܶ��)����V��:�#_�Ғ/�L�<5���
=�
��O��kg||J��'&�����)��I{o�
	��;�.F��y1?7��g���M
���8����������<�1�
kZ��Ԡa
��);�!�2n)7�V�G�P����(h��i�¨[�U	�3�1�^	�
�[՗tJ�i�B�=�P�_P�n�I�y�(マu�/�ZN;����{iﭱ���Vn^&�̉8(�)�_-j�u��bF�&��
������q�p�
���	+�&��^A

-Q����e)����������Ŧ�l/�{2s|:�c6�DtN"�;���g<7^�_R�M&��1�>��s;��
@��\�R	x�z�ʖ���Ց.�u�˜�v-ng5' 
P�����]!
-E��{�?�U����"fZ��Y��	��M̯&����)3�-mg�DtmgV���]�ݿ
-ؽ<��t<'�[x�y<�aU��M�-�Q���7��7�%��O�Tl�GA�ؔL8�L.��}뉥WU_,���9�����>B>ձ�"z�
X�͉Γ�/����}y�|��������R\h�Y� �
O��Ff�W�3����tBO-��WbFze�)��u�ɮ3���
═�pas|�LW��ג?�o����o{�]����V䟡\����r��h�1�ӆ�F�W���ؤW=�*�&��4�����/�1����]'�RO~�Ӛ�
�0`%58�&��bV'��N��6
W��e��2�1����J"JA�:
-�͞�Ѯ�]2qfQ�C
���o0
���x]	+�4
�f�]�w[̲�G5�p��RNN{��j�oO�@�X��13�$��d|
\p2�z��n%��	�rn8ɯ��L���J�H*�s$�,�U�+�;���O" �%΀f��*��L:�Ը�S.H�NB}OP�0ۋR���΢�7��GͤBlJP
-�7�TH+���o�=�ú#�)�fVMҎM:�6E�̪�G�O���O����9���$3�P��e�o��g�)���Seg���}�L��J��	���
� 覭i�Y�""�
r��������q+~L����
-�N5K���{�5��4���tBf��w
�T����x#
:jĝ[~{�˹'%؜�<���VԢ��ƿ��4
�녭-�"�f�o���`���O��
�^���$�S���)V	�%��H�ѭ�ƃ������#���#q-VC2��,�o�?��na�/naTϿ���u��3�����W����z�Ye�W��ګ�c�6
.m�6!p�#m?���ۿ���|,��1	�2N!%��wF��G;��7
p<(�����c<��4��$xxl�]X�*k%[�3�)҅��Y��q[�f��Fj�s&^��H�aǽ��o��
�&��=h�9��wn�e����"|ʬ�e�*E�.e���<4�ҬK�ޞS�����%xnL:��3���Hڀ{4m'�&RIz�CD}}����!�n>�
�֙�<��
�
�"�2bNf3�,�x�
�B�M.<j��ͳ��/ӛ��g]JE��{=��<`�"&fU�ʮ���8�r0
X���Y��~��ؙ���ՈzʘC�o$�xz�P���r� [...]
�1� �|�YT��:�숉Q��K�nU�����Z#:X+������Q+�Ã��U�2��@_&�E1
�5�3"6aך�Y�|ܲ�5�<j��S�
�fEtJ��OH��^�+�F�
����cG�'��.�m<�.!&�v�_}<r�<����Nt��
�����Z�
�p�6�(�Izih�V�jY���װ����v�^}�;�ьhi������Hx�
��3/�nk�z)e��AwB]7�	%�&懦�%tm'2&ba�B���͹����	�%1�����i���GHK��
Amˑ��ב�(e�If	�gMT��@��zTϮB��F��TǙ�wMQ�����
�(!'M"b��Q�:'W����6��Fz��()/n�2�ށ���Rc�ªKXD��D���P��W.Mz��R�N�������y1�$�b�esss�/f{ͺ��1�(��"7+`d�59������z�k�صI�Z^�+�?Z浤�ٰx�������1�J#�Y�Va� <j}��.�鿓��ɨ�Ӗ�r:R�O7�����M=6�W!Eݷ'Q�)O�
-t|xS�Ī����[���ڮ
�Øi����~�!"���&@SP�����ކ�e�v
�=�(�|�MC������i��y�㸄M�@@�b�GAk�e��9�8㕉�v
��m����`��\}w�go��}}wb.v��$����?�#J�oOd at g%�r~�r�U���v�|3
����z�ʔ��'n�Q�J�X�TI��	z\G.�А�7'E�YBK;����rl�߀��3*�Fھ>ů܂ZZ}�vdk���2�٠=.������� ����
^y�~,0�(M[�┥�?�6�w�щڱ�JQ5����?o�4
O����su��7m�S	-a��b:r���ʯ
��!<�_ͭM[����F#jO���j��S�b�u������D�
x�呶�k�:�fl
-I֩�o-F����M�Ƭ�����C�bb��;��^]��}`��D\�(G
�:��mɂ�ٚ�]	�/̚��
� �/�a���`?
-"FN
65<�_�
J;�?F
wFQw�ݴ��F<A<z�"§=}w %I���4w����>1���P7�);���̊�;�=w OU�]�ȡ��A/��ܙU�d<bV�!e�@/�̩n�\=�{@W'-J>j�`�����A%�R�S�:(
���qk�$�
��2-n[�d]El���Y�h��Ò| 3+bǝ�C
݊��WM4v4�r�^1g�j�neҩ������t��E��8�?N;T���[1���pI����9�ǬW&NZ�� �[�PgOOҥEA�"�'鹾;ص�9�<
-�2� s/!vc�0�|���x���
b: ���g��YWwO�(f�O	�"���aӯ#~ラ���p�%���ʵ)j�N!ش�΍���v�Q���LE����v���ԩx��%mW���x��~�&���4d at M���TGM=��w���4�5�Mʦga���(6��M�7���Kq+�e�1��
-��Di���vt˓v�$����O��N��3��E'��y�5Q5�8cî�	)3�m�U�7
Oj��8ma�1����x��St�P��=�YE�������Ӗ�Cjv����C�aʥ�Y��-��
|딁�Ԯ�w

��E�E��㌲�C�zz
j@��Hؠ��kS�'�6��TElR��1�����2D;tcr�ٔŒE�J�-��ʿrݹ���$�j�$�Z~C:UK1c�"��
�դM��[�

��G�4�Ҕ}�^��76�ɨ�����@��P��	�ש�1�{q���څ��[HKy�ܼ��~Y,��,".z]z����P�
Jq��s��S.�ƾ�W�J���_�i[���K�t��-�jk{�x�w�X�}CA��w(ez1��u1��d�2~�'�!6^k�ȬJ��̼���r�9�0`ⷅmR.�*���q�S@�Y�8Ж��SDI�����
��d)g�����y���$�ܼ��?=feA.�wc���Q���r�
d���g�^�@+a��s���
�he_|�|���s�]��7�쿕�ʄY��[)��H��5-��擆۸�~�Sk��Ogzy�z9
-:�
uH�	��
6
:���$l������
p	�}i�����hUܕ	vI��;�=�
�-�I��7��1��+���Čb����a�ոs�ݺ3
���; :��ȘQ
������!5�lu�P4,(�4��q����lBB�$舘��[3��巄���B��c��O7�Pʷ=J���i�Ӹ�Q�1�r�v��?�?�܇�ٍA-�r�e�IT'&�-F�����Lv�\xV�����Þw����?���,�q]_��<ZDϮ	�p�&JY��iw?�ߟ�r��/ɔ��G®�"v^��4���8�B�,���㍚/֟IH	�o3�
|��߆q`h�We�Y������QR��4��TOշ	u�ʽ�������ߎ�J�Ȫ^��<�W�+Q���V��d���p�9�[��;ø�&"�5��FF�{�˯@K�d�moϭm_ϭK�A�N�M��X��{��
���
�ה�]���x��
=O{��`\�5��',�r�(�$tJj����~n^9����ٕ"�?cv	ki�U6��u>c���sA����bV-�i��
0sq+��a��0	��2nѠGe�O�X�n�9$,b��qˡ���5�==>�ْ���K�	�)��\��(���:�!�&��}=�S���켲zD���e
�fDz�@B�;u
��>M8�of|��ޡ�~{����
�ֹ��_��ö��V���eu+`�Qdg
e}2EX�iݜ�%��ƈ�^��qZ��{Ӡ�2��(�z�"���o�p+��oo/(�2
".�J�d��INK�>�XymK�'
�6}�d��f{nFL
-FĤ�|�;
�
��1IȰgW������z%A���a�E��z�,�Q�)n�z����KV�u^Ů�'l�_b��
�����'��“�k����Jh�޵��O��Ϳ�:���[�
���U3����S6
���=U�伪�!
�>f嵧lr~��ݍ:q�!u��wj�M��9�<=���2/%LrA�1���	�)��0��W�	�Z�4
���ҮB-��
*AL��F�D
�ia{T+�韵
�V�/�	�u�z��Y��ð&i�t�r���
[~˸�I��C.��̈Yɏ�%�
�^�
�0����+�:��[bF�����MXĔKDC�{@>�w!b��2��k򥗢K��t��@�w�m�y{8j��[آ_�3�=�=�
�
���":NU� �B,RZ��n�z��4x���|��߿i��LR.���9{Oo��nB
B궷�A�խ����0r6���55�li�r)dgG��n1�
|���خ�9%����
jY�'�&�-f����q{�
�+�F����G��z%<�	�⸨vi�W��(���R����s�A�G �?㑉Sv���[��
��5
�J�9�q�7�
��ᵻQ�"ffT�
"p�$	��*�	O���g�I��q�Ip~T�-S�_�)��Q�B��x�<���Z��q� t!�+�w��)��Z��?l�S#f)ySǬ�n�98J��񛠎Hq�N1S�0~&
���䐆]�5�(�S
�a_K w��Ϭ� 
�h�Q#�!��VEu���ZP������VpI�$"LG�A����*9x���V�
Psk�ZNup�r-���&{������3�����<��:�w<��m��{@;
-���GӲkcZ�3�"aĝ�9(��S���3�J��n'�=�Iƈ[@O��l�
�;�
����U��^e�r�9b�7��n=��������/;~�=c���']@]���U�Y���~}7�}�:z��vޯş��q�$�Q�vNs����?7�h�{��nu �le����5w
2qt	v�C�v�Y�q�9��3�Ѓ����?ž�1L�x-
�?j�Fl7��{P�O������9-۠�r^nb'45�'M�ƌ��F[����|���=+��<b"��}����ް���@~�ف�I�j!�s	�B�	�s��<�eQ�� /
6�9�W�*�Gb�\BJ
��_8c���;���v�-f�
��W��Y}wP�;A���&lr
���t��u���l߽,��뽓����;z-jc�e<�f�`K�#�[�R>��
ʡ�O�K�Ŝ�S@�H�)�T�����������G�+ק���P���$�;�ʶx��3�:cC�.VDDQ���;!H�'�^���{�$�A�
JB�{�{�ۙ��|	�d�������>&]H9Se� ��<�fd�Ng�֛����c-
eP�"�.��h9��Y��xV�c�rQr�(�A�QL=h�t�� �[7B3���&���^z��0�5�I�7?���S%6t�'�z�1��jS»}��c�L8&M��|��$kZ�����OU�ԟ@G�|��5��
S�'�̍~V��5����o��	u���~M�3�%��1r�A4���4
DY�:��nw%}8>�D�D
�)qc䘃	&b8?s$��;A��k����Amc��Lܙ	#�
��r��tF�2EI:�D����~Gr�T%d�N�sN@�O�n�pS�{���>ro��|� ƜL��#�8)暰
ć�;"@Dz@s
���P��ГG*6ִ��/e�
J䑜O4i�#�%�
-B��ۡ�kTP�L{Ӛ��ɜ�����=���#e~%�T�s}2IO1�Q�@�U��#uN�	��������Ya��)&�DI�9T`�jɰ_�ء�=�
ݛ�O4� KM�}��C.�HN�
Hɱ�J6���͑T�}�0}:�lW�#�UB����
�gPa��UTؑ��v�x��)9Ѧg�+�����#9�0N[D��
�������
�������M�
��V���Of�J�f��@����"���sN�	�@s��k>�ڴ��s���5�a��e�u`�A�D
�2r�*6q_��
U:��E'3���Ys�8g{>�[w6�S�\�O�U���ۀ�^��:�
-NMcъsL=�*
-tg�I���sN
��@�cOF�7�C�}w�pho�>��/�#LcݔP�f�џ���_�OԤ})�U?k���Jד�?J�?Vpp
m��oI1'�
���z��0�_?�tۛ ����kE�Ib�l��$[t 4񾌇���V������
�S`�*.I�w0����L=zj>}�3�3���(!�T�%
�(���S����(�O7�B���Œ�`�{S}'X�3�ǝd"
c�DӞ�Q�ƀy*ڑ2�v�����!�����Ҳ�f���)rҞ

�7N�8��;�\�^?�;D�8T�y�iH@�p�G���Y�pCB��
-�G�����t����!���y�s
��/����N[�ɟN���&�y�R>�H��
�ɉ�*Jҡ���k���5+���� �HX	�)#ô��\�S��S5��4�JF*�c��Y.�l!��H�]nZ�=��3�e�3�"�3�$&Rݷ�c���a�A��tc��
	{<YX}�ɯ:U�
w�X��1.rs�
�9��iP��[r1gxK����軓EQ�Q��k�ǡ�C ��rl�S\�AF�9P�qg3��_
��Yڨ!�
��ч�$(���㩲�Cm��`��lf��b^�?�y��
��c-�u�ᐏ�=�M��Zq��*U��#5-�TK^��ԍtяC������Ͼ��a6��d6��h&=�H�e
L��\����<�ˮ<�N�8��Qs<��o%|>�x��C��G�t�
S^����?��sN5".x&�Q�#����s�T\�)O�}�g�_
%�Z�`G����C8��;Q�
@�EƉQ�L�,��\���:#���v��~�g�O��/^<�k�
y@���L�
`S����#NJ+wF2X [...]
��삽qb�F_�׵�D+�`�ӡB@��$m
��N���5�U�S�@� ���Jf�Ѵޫ���Sp�z	-x��3��bҖj!���НIl�ș��
��_h �bT�|?��k>��

���u�d�Ϧ����fM���Z-�p�� ��c"�#YY{9�����
��̀gr�'��1N��0=�h�����aZ�~0%��Wej�
-��sM�_|�!��%��}�q>�S{0�$�M�����].h_��<�6����/�6��f�������|��������3����:�00�	�׉�
-�K;U��Sl��8�������qM9�'%��#�
N2RL{(�o��4B�&��d6��d6�q��p�G7�����t1�e���#�Xpfz�}���ٕs1 �� �
 /�|ع:3�|*3�\���K��N���c��?Ng�+��E����!ʹ��4�qe\�\��tv��t~Ù:��\��{<)��AM�K��T���
o�����b���f{L�ؑ�Y�>j_�ŝ��O�);r:j�pO'%�"��D�!�	[C�P�ŀ��M�x>�.�^�9.fo�����q�&'�P^�A��lC���Z��s�X|����6�邳�ܪs��窼�����i�R��
�(����?
��M�Z�xg<�G)�mi��/��	�&y�}�	��X�B��O��%�%lM�R7&���!j�O۟���(٘c�~>å��c��6H~$|Oˆ=� |S����OܟࠏYy����������
-�����' o�zpAsM��S�G�l¯6�|�E�Ǵ7=�����|&�����
�#
 Vw���
�Ό �<P�t��'�&]�>L�;���+J:���r�6(��}0��i�����
ೲ����惩ґ}Mv���Hx��v�t�n�q<�t���2��ۓ�i�;Lko�����Y��
�?��Y��ą�@�Y�����ù�N�TV��8�%�a�5L��ir��)j�����D�u�-�~�a����
�;�h��~�穚?���|ᎁ_9���8����S	��禵qS�ˌHlZ�=Z�@&��8p���0*�C5���x���d:q8�N3H8i�ct�m98S����C8
b�Ҡ&���|���P�s!=�xF(4o�?�F
��S!b���;T	X��b� ��i2���-wc]�S��:S� �
;���;�
�� -bw4/sw$��/� �H��ԛ�io�s:���5-ΜmI���G���3��t�9��_3\��

��E&� g��za�n�i� [...]
-O�9eg�?g8�])6�ԣ	tڔ_Fe�>�8	���|�5z�
�ލ�8Rᣍ2��i�TS�z�̯2�k�'hq@㟁8
��d��6�c��
v2;�P�@��>7��1;`l�*r�A�
�U�cL�#���3uv!е�G�
�q�)�ϟ
<�9��;΄��Lk����d�|
-�x
-`ȹ_
���.s8�Yd3O�L쩆C�9/.>]?_�(=��(9��s!���RF��@|0ͣo�R��
irJ�TBƮ"+�X��
����΀&?P�sN4Y��w�2s
��2���w_S�}��,�
�T��3,�\O��Z��=^��UVHwԙ�@W}��=[ �
tٙV(0�_9�d��LVI4y�@� ~�3y�}-y[��ّ��崤f�3���Q��V b��
��s���|Tv��RΧ�Gjjҁ�ky�ә��
%#mG4�\A�OP�"�I�l9�bbw�)a�>���=�4���PJ��
��l�'8i�^j�f'�M�M��9%`
�95|�0N�7L��AΠ~��9�u�=9�+��9QN�"ꉌG8�������}w%�����5J�Z��tR��Rb��(9b{��1@����[��K
�m�?��;j�O���sR,8V2Q�e��ֺ�	�"�ޘ�S�!��\F�?s\P+
��o�P�~�f�Ì8��D��b��/�������3a�0P/�jFڡ�w0A��
�GXIg���cu��W��������1�H��ؗ3S�T����=��qr��:���&���D�3�'&>)d
�3�/�O�)�SB
�`Y@��@�'��H1�
-��|⡒7���8
x]��خ
�5��<U1����L{a�k�U,4�&������
8g����M���
���{��㩼ړ���'3
��yr�?�:U#O��s���s
��a�υ�����Us0�t��:�=���=�� D�&���� �0p@�	����9'Stԡ���3���i ת*UFM��6�� >?Ұ0�*l_�	ݗ
9�������u�c�@m���ԝ̦g��C
�t��3M}9���y��|&��t*��(��\*�-Ա��v��t��4
�s�K�(��B���J^��bf��
�-�@AM0NRb�TT聂���5�#
���� � 
�;R�bN5�$� �c�a�ց���N�Xj�|����
v����8��6��J3��R}��!�DN�
J��c�
c�P�%�PJO8������q���Q&b
N���|o�
��7�� ��P�v�~���V?�}k���M�_��8$8�]	����89|s �%�
-���{���\H0NpL��
��Ju:��b�G)�>ZșTH�x�3�χ�OH�;��^��� ��HF���e�e�k���	v�� %d��h�c-~�'��b��
u<!�����/?�G+L?'G�"���ɟ����6��D�/�A^zov��3F�w�I;�2P�Jj�q�� �
�D<��O
x�S�i
�8�C%9N/Is1�C���$S��L�I��	b葒 <)◆�=�d�
��@K ��c�΢�֥�愂s����cZo�>���	L}7��tІŻR��*�l��?�����=� E��
�2�߹�E<7헁q�Ne��8�f��xF�ɳ�`�`~t�
Z
� .'S&
f��	DGj�{��$��:��h�J�9�ʭ\��t�M8�a�3�e����m��7$씥^J�Q�[hTd�l����_�5
�	��&ߵ;J
���P�#�J8�+=̈3�ρ�9�d�w	~R\��~*e�L=��3Y�G3Y%�u��ٜ�3��I
�@���Q"׻S?/�#>/�!
�o���Q%d
O�x��C1�Ǖ��=p��>���,��r
�A�G�_iE;���v��k
x���d����+�з;xoәu���4߄��;@�?�R�
 ��Fq��Do�yE}=d���3̈Y�&�,գ?�{I>���m���-��j���Z��Z+��q�t %��� �.w 
vFHA{c�@�8)L�G�[��j*aot����qN��8)|�7��ݛ�y��r4N
=�P�7{	�
�(;���
-{��
��0��9���q>�Q|�a���E�����Gx�q
jo����6����0�V�Rl�;�vF0޻�`�̴vEK x�:�$G����4��Q�� �#�L)d
�؈35e�kGGI!�r(x��=0�e
K��\�0#�8�F
L�Rv��:�ڃ��܁��ډs�_�;J����1��Q�1��u|�F'�a��l
�'�O�g�y2�%GI�ar��0)h�
���o��7D��
�¶�y)�\�Q�N��!yota��F���j�8J�>�`�O��< �����w�&ؑr1�rY?F\O
-ݑ�M�90�y7���i��L3��J��l�
;��%l�ზ�P�{t����?�8�C%�d��;�b �d��-��6��l��B
�y���-́Y���}9x���Q��:� �l
PC����6��� -�j���}����;+����2�M�hw\D2Nd�w%܅&f�ΰ���K�襅
�Շt���
�}�!�L�o�p�NUY�@O���
�F(�?��j�����ւ��X���h#y�636;9+M4/M	��T�b����A�]h����=�� x%���~�/�s����Z+�Y�I��� {m����U�6�|�m����S�-7#?��c�i�X�bi
B�GS]�����~!R?(D��J�}��1�M���m8�#	#�T�A�Lg��(�;��PPϞ�݈/��w�MIVˀ6:�>.w&
-��-7@��el��0!h��ք��
0[�ϻ �
����	
`B�a8
�=����g�NW�Z�K�,fkS�ikRޮu�
Oe��3��A�{�SB�'��c�'aAO��5�)����#9+�|F�ږf ��#�G�q�K��v�]��{��k���F��.Z�a����%��zH��hǵ䧙؛�����u�/�
Z�������Q�u�8��N�9R�Ǿ��Ѓ�]lN�2��d�G�;]+�e�.�z�.��B-��F+�Y��n�� �$y���*��)���j��@{ct���h#���~z�J�{{��[%���}�����zQNz��}@k4#?����v���Y��
�������Է�Ҹ����'�}� ���O2��x�	u{����Fp�*N}�.�>����;)�W�K����u���B��(�Ǔ��
�ٗ:�_�屏��	�6;P��^���lױZ@ߕq��~f�
��v?-��
��z���4��:��B
�o\H9�R��
�1|ȱ��o�mE}Y�E^o#�{�
F	
�?vg�
	r�]ׁ��َ��܈�Ք&�� [...]
$��J��z3�y���|�a�K/#b��
��Nt_jL�0]��?#�V� 얦<��r#�i�$���f��R�q�*��jC�sM�����dg� ��Ɏ��#�̸���I�4$���A�z1���ϖ[�ߖ[Iޛ�� }9`�9�f�
n��Nu��"�N�!>���\iHs�)PL��Иh��{�Սr��A;�@]�{)�}���6�WÐk��m����^s5יJ̇�R��Bm�����7@�Zoǹ
Mpq�r(�_
iz��i}
-����c
k��%�J�o����������M�$�֖��і��,�b>m��mu�|
����.Z�z
�q��u�"�9��7�B��f�ۑ\DߑpS7L睁.��z�v�����>�T%[NE>�fy\Q�Yl4��k�-��R?(�㞍
��
��h�R^.5������؃Aܝ�l��]�3�~��f�E�I�c��Ԍ���E�
��d�q�]���m�8��6_�l%͍~�*Jx2_��4�
}�.E���@
�	+m�oڪ���O�������&���Z��v73�8����Dž�7` 6��ʠ/F�A7{�>�ϔ$Xȋ�k	>��).?���[݉6:�m�:R at nŽ���T��v_B�9~~W��lI8)�����4륺4��ꤷ㙡f�˜ǫͨϚ
-�c�0�Q׃
=�d��Ղܗ��vFΫ-��s�����fk�i�e�6�}��c���=H�XmJ����z*+4k�:��m}��x��b6[�vXn$���S^h��-�0T�)������Inϖ�?�Q�
N�F7;b�
�e�	i?Y�`";�|�*�}���0/��N
#h����@r���}�'=[����#�b�6�~�����\�#BFrE�]���Z�;U~�
Uv�muN��:/�l���Of>Y�tY�exi�R^/7�ج6��,5�X�Ja/���w��	/��1n��(��!!e��
�����]A�}Y�K{�Zr� �
�w�Z;+b���՝�[m�/7S�f*a����q�%9a�zE���z)�� �6��N+�(�5�m`6ڪ$����GҼ�3U������7�IY��{��k�-M~�T���j��z�=��wk�X��nJ����f��J�N[�`�
-�d,3��j;�kkH�Z�%�<��[�����
I��5��`.ύy8�
tGY
}Q��5�i�
t�F;�c2'�q-�j3��j��j;��t5�y���*I~��G���v�L�~A|
N��9��@Q����g09�(��7�iA�nZ�b}�{Eq��aa��A�-IV܃J����(��:��N'a��8_��� ��	�8���:�
x��{�L�jOSUMtY���v0"�q�{(޿w����Hs����2[����qX���TY��(�{w	tO��~���)�x���Ƅ�1e���U[�z����\U
�d�&��0@
�$|������8��X&N�!�����-�ƽ^k�}�-
1[��{e
�E�����q1�@o�v���뒭&�B�允wG�n�g�<.F9�(��xe��9U��x��t��zmDs���s��z�G
t
���Da�rZ]���D?��7�d������^�<�%�<�Jq�{��
��Ox$�UU~��jm��0?�N;��"������.��;�W����xI ߾��í�ʠ��ɯ�9������2ܗ~��*'Մ�_�0�������'m�
-��_��$��f?a��8�m��B�]m#���b�,5��.6�Xk+b_N���g�ݟ*�9i*ȎKM$׹j���f�)����'<
�?���\i���\j�z��Q|���'���f��Л#��d���#��u�}����ҽ̷��HP��Jp/in��da�C��z8>�0�n
-�?����8��.ק�.��kL������r����x���N��~���SB6 )K��
UX{��Է��H{�/m�rc�o�h�As5����^�2��D.�$��l�k��e�Y����Q�R���;���xw�w��,7����wgT�}ƿ��X-6҂&s�-f��_'�1�C�X3EAҳ�ṙь��@�˓E@����9�w;(^��n*��
k~�,7���q|�Ha�*���Ңd�Վl�t
�g(3�e;%�A;)�l�
p�����bc��bk��F'��@��{�kc^
r]�
=�֖E<�G�O�B�k���ù���b���`:�`���
$��7�?/��mjR��*�.G�kj�ѽ�hKEi���8%h���O��(rc_��'�эc���^n�j���Bt]h��L�H|1��X�
l6�rww�7���)C�WQ�Ƴ���"������S?��-��'q_
]�e���	�4U��}B�����~��{��M�-��
ȃ�H	������f'#��~���yy��{U�r���u���~c�6�N�v
���,#��L&fot#�����(
-�
��C���z\
I���6Ot~�ۨ0��R3�s8+��Dv�kYv����� \����\����h�����?Zm#�.7� ��فڰє�=
�݌�r�
-nsqX�k��x����R�l��l%�z�	�y��IY�l�9�рt�
��;m-�#�Y��Z�R�c���jZS;����	�S�Q�x����E�Vn�l
4��ty��R
�a����
d�G3-𕮓2&��.��3SF?�zߔ�{�[�
�Y�����K
�n�Z�z�Q:�-��O*��_�Q��5}���Ե����>�ف/i!/�,40"�%�O��w����ԧ}YnDє%�Д@_�V�}P���5�i_v3(��¤�F���,<΢��#7��R� �Q)��A��|	�xy~�3Y^��
v���$�?XAv&��,�I�/	�� �s����G���e�;�AS�{g"���D�uk�6�K1>�(���H!��C��܈qZoN�^��=U
����骶<�jw���F|�*��� ���K�]kƸ,TA_.5b
&����~�\���hw����p�"/� ��r�vw�܅r�Js�A
~wY]w_:ZU��l�((ܼ��vc���3 @o�p���1a��<��D^��A�����[s��ϷF�������Ġ����zA��$��hN��^a���t�E-��l>v8W8SG��G<����J��hKS�,֐
G�`/sS [...]
-B�f~ �7�顣���5H��F�\5�Uߎ���$#헔��J����xn
�t����ж3��o��8�
V��⤗;���Q|�pq�[Vػ+��T��\�M#��aQ��|�
�g����v79X�E�Ǽ�T&�ov���,��z��\}�ǹ�4��QΒ��3�(�jf��jjг�6��PFܓnV�>n��
v�VZ��6N���������;�r����qJoz'�sڪ��S����!�檀��E�c�^����b�8�x�б̀��l?PG~�y߮�0>�Xj�:l�����Dzc�
��#9��I�̋4W�[�
���}^^�Ls��(A�e%Xq[���5�	�.��F�u�0�����J���|>p 
�
�z���3H���M�oH�V|�x2�=��n���lĺ���>m�����h����֫MP�͎���۪jӾ�u���Œ�&a�����e^���s2;��v��D��:��w���m"�L
�YS�`�.�| ���b^�E�^Җ��ۨ�c���g+�>
5
�Z�å6��uiN�CYa"��q��
-�ם
�8*�,5 �:������2��<;��� �^/;�N73��L)�{�5�,#���R>Ȳ⟎e�ݖgG�]k���gDM��]�e��v�y��V���
i��I
�� �͸o�☻qf~`�Ʋ�
�rc^��0C��(۹J��Z
�s��ڄw]oe$�8D�0'-#��U�g����QZ���}�@}/�kg��7H
��fF�K1N���o��B�X~���I�Ǎ���g}b�����̖���ÀEa�-�⢏d"��8�;B
��;.T�����vu�2��ᘐ
-4|�Da��V��d1�ٰ �f�����5�;�Oԥ	S
�\�˝vv��ހ�����Ս�Zj��Y���(�7[��a��U��;����E�u`�'�'X�Vǽ_nNu��K���?VT�~maޕ�A��5x��&����~N�l+�}0'�]� �=��D� +a����#��\���,W[� >�R�'��+�?�W$y̵�;�A/�Y���jR��� ��}�@�n��#׺Ҿ��<��V!�
#���.��r��HV��Qq�و8�^����Rs��p~�׌D�k3-T�j�M��|E򻱌��-h��[�>wd��V[�v����$�z2w�ɉ
MQ�+mԠ�v~�^:ioH�]l�:/��t�"�J
)`�	a�.����F<X�x$��v�Y	K�4U�qw8?s{HL^� x�Mgm[av���.��4���ƉL�
-��J���;�q�0�i�e��,Mz3]���6��z
�mIA�U��6k���6��r
�y��i�
-��J]e��D	]�� 
="�|:*�~:.���^�u���@�kp
�"����t����
�x�a��xfЃ�f���Av���F���>B𾔃?Pg�Ƴ�K]�0M���~�k�-EZ�Z9	+���>A�mUI쫵vj ��hF��A~ؽ��$��j�'ȩؽ�tڡB�ߓ�);�EE���Zė�H�C�w�3���/K\����N'�6<�ߣ�7B�M�T _>��0��:�	��q�z9�o�;���!.j�9�jx�-�{������v�.1p���^'��
f,?�Y'��UY����]�0���Dk�1	�zv�˝�,x��P&{�<镪(�����F�ۭ����
��v-r��䓉t�5P��a%K��43����_*�b^�D����y�*`_:D��7�0��
�����w�k�η�9�7�}���z��Q�������G�Irū=�My��Lu�]�(�Q;���Z7�c[.�OԑR},o)�Ҽ��X�����v��r�ex�>���f���
��
-S\�Ⱦ�V�~[�����,�z/�;�L5����	Z������>�'
�m�y��qo��j�?�S���T����'*>��\n��8
�Ԟ��@�_v ��5���7�h�+ ����P˨��Y���
��C ��e�%�����B3�a��g:��6H��oH�[kB|�.���
c�7����c
|�j/'v����*N��b? ��y�
�0[{j���
-�UV��RB��H	3_j&�u'KӬ{D!w�x~�e��*�ˍ(��>f�l3�[Z��zgP�\��{)KC
�Ҝn����V��QKp�>[M��) 8|G�\Ʉ��X�C
�/�%l����k��S5��Mc=��k=��^R?��_he��g�>�{_��>���ޫ��_�ນ�*v4������K
���6j�5�8�G�
�R�`�k��mIs{(���΍��}��v\��������~�u(��&��J+�g��_�I
-��O�"�V:�A+
T��!ro<��9�C�w⽷��庉�� �P�� �
�t,/���,��V#�d�pn��>a����_�d�.�#�(�#����ηR���1�=Y��6V��
�q��
�,B�O5�1��@�Gs����^��{m����,���M7$�n
-1+
D_m5��b}����$۵~��^ʂ���܌u�w�w��>

I��2�ۘnws�>(�zf�
�9�CY̭�<.�U�F7-x��^^��n�
�e���7UG�:V�g�w��g+Q�eh�V��� )l����K�瓪Q���O�VZY
���}c,/ky��m�9M5 ��$�Vb�L-���
������+]���5�SU���c^�*�K��
��9�Ɍ<%�G[���,'G����P�>~�j++t��ᣩ��� ?
�b>Ꚋi+
��2��r���Z+=L7$Bm�	J�y�>����Glvr�[=\�ΰ�9�I�짆/���VZh>Km�����$Y)o�*Ȏ�
���N�j�0Y[����_�V�}Wz���&z�h^��
���J��V'{4������,�&�iʣ�k�R���3�
8����'팀���g�b�'u	x�\R� ���{C]BN8S����6�S��Sl�Z�^����qv��0%RQ�b����W,���I2� 
��@���
��ˋx�,EzJ�\D�^w��n
Od	��$��N+
p��Z���^�����ޒp�}|�Z� jʃ�!ha����/뭰��`sY��]9jo8���a�
�e���3$|-@�vSW�I��� ���,�^���
�c�;�
h��f��n��bz�r;�m�	�e��;,f�
ӬT�Iڒ��zr�A���
�P�:��pN��.V�A��c�ge�u[���P����W��X��Q&��m��� -��ڗ�,N���:H2c��#���㣷�ԝ�t�n��
�=i����X�b7"�����+�$+�x�ً0��͔�K패���� ��.V��a�I��:,��5S�h��N�3��ou�SW�X!K�����f��.��X;YE��\�o���j�%DzK
���5S�
gr�X�
��}���5L�E�6��(��~G!,jw*��2���z��
���n��J1v���t�	tc,��*��� 1p��
�=T��ޛ�\j%�~
�T|��@?P,�T�.:ֲ�x�*%�F'
~_���Z����1�gZ�N��Ǖn��<�F6m�##U��	���:i��_f+�^�2��x�CF���l��
��JMz�J
?t���4��XLe�m�
�������b������¢�
t蝽�
��;�B�zg�"靮�3]�
1�E��.b9j
-��K?�#t�9ȥ�����l�^"��8�h�Z����,L\j�~�lgF���t�Hy�n(���φ*K������⨙���:;n���P�
�.�M�p=���
-0�V:�Y:��BL��l�L��G��O�Ӎ��w��,���qOYX�3��I�?�v�/�膄HU�F]��|�n�ֈr�j#G�ts��MPy>�q�,3\�ZL׷��k�!cYqO�

7(D�
eA��hm�����ǎ^�m��S��b��_�Xh&��W�Y�;��!!f�K�Z�
-�Z����ȡ{���f����U�Ok��q2��0�_�'���
�n
0�&22�����OZ�Is[hN����Z���m�I�p�rd�11�z�����W��ٖ��-����0|�;�H3����d˕f��Z;�_?Ȇ�rS�Q��Y���n7���o;#٦YI�k;SEZo���>�H��VҼG�)oG�)o&�(
������{�[Ue��A%�9�)
8��oZ�&�(�Q.k�,ᶢ�۠ɫ2������HQ�
yE܋�~���2=è�)^�!��'�⚣�﵇҂ҍ
����
um��a��Aɣ�4ݦ�ay�ϵ��;�Ŀ2C� �������B�{;���gw��ܸr	���!��ܹ@
��g� ��b#��D%�
i���af�H�c_	�Co>�m��G|RIL������d��_�]ȏ��]�w����5��7��?˗K�1��1!3�6�
���.
\[C��VS\��Q�jQp_ݦ��}^ND�̓���

����������8��
-��˥��.x�~qznq{�u|w�
}w���ڑ�^�����d`�4�	Pˊ��Ѽt�6�i-v���v��Fz�H@?��%���}3���⻇� �n݀x�|z��y����\R�u���Q�Iz9
�2Ȅ�*Qv��	o:�;c9��nT� 񠏏~6�����9

1��i�s��/�}�.�Y������'���
-�����B|����5�%����^J�B7�s��t��r� 6Y�p�g:�f��;�(�Zr���;p���Sܿ]�j����&���㋬ w�JR��Q����=�A�F��
P�K
���Z�nD�ߓ�h�#�8eU��pF��<��x�KvB�u���
pG�
4?��8�/�)A.2C���q_r�xx!���
-������+
���1ms4���!L�i��(���moi9�NU��V?�f!,~`b�W�IV Wnfć^a��_��y����? ��ev�
-���
H�7��;�ɮ�ʌ�3�L�(1Z�c7VheTq����!�%���r඄��1$@/vpg���|�GVj�S^��_9����n$8�^�L�5����E=�6����3�4](��˙��Y��+줸KI>^�w�W� Onހ��w���-��+�C
������dw�
qS���0�Hܒ�������<P.�nɦ[⯋S"�p��/�}\/��{r�	$��
$��
���)���o���
���ǐ�W.C<߀\���Bn��5Y	�G��`4�FU��(8V2�OxI�а
�..�P�ϐ���7��|����	��#3���@~�@ ���
�}
b��
��n.쉺��Y��	Զ��G*D�9,�2"����;y�

v)���@��h���{;H����9����7 �������L���|)�����V%� MS�Y	�!v�Ґ�4��
nϥ�+Ƨ�M�
���v��vs�`=�A�,�B�?4�X�߃ܺrr�K�w�C
��q{��r!��l�$��r�c�=�~���3U����"}��¼�a ��#�����<�!��!�֯!6�w �o߂X޹yq�&���k�+�.��s���x��`f��=��k���֏��{R1
��z=b���9\L�P�����z�N��mg��{���m��ӧ�W�@�oA�޸	��wbv����� ���~��p�}nK
-ɟg[2aK]幛��Y���vn�`1�M� �(
y��	b�v���%�����G���!����|��Ƴ;� �/�ygv��v����d1V��b��mO�&�͉�
��\m7/a�]+���
�_�	Q��8�x�-���oA�_x
~�	�	W��o�nC����
�;��;���9��/E5�}���#��/�X�;bl�Uf"�212��/�7G���ݸ�b���]��O!��_.��cn�����N�J짭tS"�k;�኶�ԡ�����t�<��耋� �
(�
�Ύ��OB>����[��W����br��������o��ە��G�����FF����m(��~���y�;ߩ��|򝂽�G���'$��lkq���8�|
y~�
b��`��{f�G�oC���Oȣ�7!ߞ���܃�� ��H
	n�zV���"�ό��c;�p����� ����P���.{ھ��4 � yfk~������G�7nC���zdf��
���
-Ž�ܟ�y�2�KZ�@���Ϊ�d��~F��K�8Z�
h-�}�#�̓��~syo	�l�h�
b��!�񟐿�
�����_7!o�?���9\��p)tO]A�\�c�Ϸ��g��n�
-�y9�[��Kz���݀zz\��dg�}o
�z��ץːW��x܇|������o�7 ���/ĸ~��&������ż
�X�-R�$<�\'-p�񲿈�!�z��z)��'H��5�es�
P�w����!��=ȝkA�q�}������g�W��ɡ�f�����
����̍��\u-�w���9^Ms)g�>��x^r�~	�~h�fy�{��k�.nB^�Z������̡��ˇO I
.�`���b��7��4y�2.a}<�9חM_)ȟ��ķ��/2��W������X]�����<y
-�v�w�����} y��!��e��/�1�7s1Q�U(��1�ƛam�
��\�}{~�G-]`YAd<��	^�b8��a��S���Cᷘ��[��"���:�dm%s��;o�/��	<��D~��hA��@6q�Q�Y�uj�c���sms1�G�h���$�%;��(�?��/�:%2�9$�',�Q
g7Rȋ�6Q�k���$ϕ�l��`.GۙOU�}g�5����7
0	�;
-r*s
��X�Kj<�
�'�#���;����@.߇<�� l�|�}X�#ۏgF��پ�]¤��,�rO^�$�fa����v��V]��OB��<:ǂ�B��
x��++�s���n|������t��������+Bd��!�����9��Z�¶��=If�A�S���\
�IZ
-R���fR�O��������������
���;ȭk7!~]/cc��,ɲV���)�:k�
8��Ņ�"��Z�MG����f۳���E��ʌ��<�]����f����8��m��
j{�Ҧ��I�4�0�q
���l�33X233�3Y��b&C���w����[��
�aKK{����k͙����i�������=��W������&e�
^�x~�ʲ.tP]Rj�KL,�8���w5�%����r:D5�M�MS3'��kh�UV]÷����%%_�
-
-�z��忞ݸ�Q��ge�L�8�u�?�=}�?uEE��ۚ.m��v�X`�����c�bF��2�\3�g�$em�w��#��NT�yxQƧ�/
R�.�_���3E�>���G�~������os�r�,������kv}��~��>���A��6y=1
���J���q�;����h��
�QQ���������U�M��:-���/^����
�~�1����d�OsLb�i���XА���\�l`�0��=���n�y���D?^�o�c��
�������F'�+Мb.�.d6���O?,�:��J&�&f�
r.zW�oKY`�zrs��
��hǘ9[�c��i���8�<����
ΐ2�&8
-�_�N�H�5n!�ſ���O,;�=��b.�P*�
���$-wg�Wa��iRL�7�f8ҩ)�JO�2�'i�L��	��j
-����/�]����}
Ai_OP��	)������h������=G)4��Rw���|�e�_/�,���WKFJ�z3D��i�<�9"�'�@w���'��|8-�l���v%
D��
sI荶5r��8��kS���g%�a�K�w�Bt�j�Q8�K��ߞ�84T�2<XރC\�����fL�9��$�lw����-FzU�怡���u�{���
m�t��5zx�������쬡�ă���G��s}�
xY�紖�����!6��\'���u��%��>@O��
r]�)Yx�g:ht�-}+��������7����6�jk	���O<�J��3�g;6W&:�s�͊	B�f�V�>@I�t�qK:>
-]n�RͱK�툀�K�}������GUD��2<eg��`�Y�	���k�r����<>co
எ��s��3���o���2������P�p�����o��
�>�G����C���̳
uOb&&�dw�ԓ�<2b�O�!�IXm���6�T{��0/sc�+W4D+��i�-�1ԫ���R�y�f��$�g`��j.�!b�-���%h�î��nD
����T��Y;�
h�*6K����͗aT��5l�S�L��"R�R W%��
�n9�5 �N;,��֎�=��MA�C���%���h��
-2}w
Uh��};7���e�@���\UDKh�K��n�)��
�wqR.�!c��7�p���P�i�5|�k
�q0�y�=K�8\`
 ��r�p�
���mܝ!�x��ֈ�G���=�ڻO�C�#]�T at A�TT�GB�s
-�M�%fmH�N	��
���
-�:;]�n�G�ͳ�ͻ+���t�c�Pd_��$��4��2ί�J�6B[]s>-�j�WF��a��5��Rxީ�'�)���C�;��ƞ�]U��rhrO>:�'�m��̋ܚ
a'�&��E
đ��81p����y�l��A�*�>5
��w������#:RN
X at Aipi5�N�sfc��9.�jG6�h�ho�HIf�nG��u�ս
Q��ߣB�DL��1˰.j�
s�����G���� s�����
��*��:���#������3�����_�����9dڎ��+8��O��\7/b� '-G����
��$y�-o!I>�<�`B�2F۱����h�R����{���t=E�%�w�w�+^���n�"�"�iJ�K���ր,��
�j*|g	�����JҞq�#����'����������5yd��":6	��ƽ��$�Pů�S����,��{��çeb�F.;����zbCP�)�K�y�Eг����wy���L@:6�
O�UA%��/�:V������bL�v��f���}	��ZGg��ڀW��r�*JKHA��q3Ic���x
mrN%��.��؅�l�_!(���ɸ��1��M��G��u,5=v�����k����%r�"��mQ�u��T��EߠWƄ[F�~ٟ��k�����Jĝ�,U7��#j'9D=2�I�V1-�µڐ�9�~!�@�Eu�n%������鰐��VuvG�Ԡ��|�˴	ےcF.7��s�
��A
1��'�4���9��Q^9Ѓ��ErYD�7
Ғ��+-/��!	@>
�1�I[֩��8�����W���Ql�wͥ���zF=��n�����K�rzKH���L4�_���x�ۈ����u�fDuL���J1�a�.�ɢ�d��P��.��/+���������	�SC�C����u�M
#6�6`�vGv�W��&����Z쐞غ�Ru7d�4D
���Q�1�
���3 at l1#�|
k��
Wr�Ps�`��FDC��-��D�*�8��"BV+�'�<��\jR������"�5��5q�A��n�SN���C�f3
�r���_���_G��&��Ҡﯼ���?k
��
T 
|X񱞄��:��
��en�%�=��Z��q%
	*o_��ۜ�dx�֘��u��-th����K�uD�3��`��rB�_�̶�4<1
�_�
R����o
�5l�
-�z&�*6�%�y�[_��A��K��Bp����a�����*�(UG����
��[�'�ga/�����y��z��8�Ʌ�Et�[�J?�k}b�kz
X���<��@h�c��;��uF44�{`�~;� X�+��qeA%��`��7���Y0�w��$
��Xf�n}XAf�(Yh��
�b�Gх�����u\VH΄yD� V�\Bt�OFj
�8$����\h�y���n)�c
-�2X�O�t
-[�
+u��L�T�9�~�q(1S�\�N�[� {��E�����ɪ���{>%�D3���2N�*���0���Rj�WN�v�������x�}�=qo�-
endstream
endobj
310 0 obj
<</Length 65536>>stream
- �KbZ6�������d
05'l���ڙl���৛=s^a[g4���G!`�d
$��'F6-Σ
)2'ޟ ޳�+�՘��|��
<� �V �������o;��Y�z::�
�H���i�M��|N!����"}�pxQ[�S�(����=%�+�-�՚G΍����B�
o3y1�n�P3����t8�[��uG6!``X�(�j�a
�r��w^H��狯
b
-]bH�K�*v�Q^%*7�'6�6�����v�9Ġ�C>12I'F"�H�*�
/�<������v�HCl	*ٸ�E\�O�uCBG��"�Zۛ�Y���id��*,�p
��-�UE�
lHM���;�����V�Dt��wl
7y]>5c�E&��xOT�*&3����j.-�c�F���N���=NOPCj
-�HM1ː>`읱I�`��T���������������e�8%Tp���)H��
-^�{@?��[_{�n�
�\2w�]�i��XF���ʯsʞ}
\"U
�ډ��,̉
�)��+nx�\*������[��
���������s�*tAD�)IQ�ED�}��l��V��	�!!�Ȼ�J�Ϡ}k��T�c����xُΕ��>1�b[X�6���E�K���YL�g�Y�`44�KL���ޱ���51

��b�:6�`
��� ��D�l�9�>���vt�h��'jDnDޜ�����@�ؖ 	n	��0�J�Jy䰶�;��� ^���Ĩ|�,<�����
����9
1t�4�j�
���W
y �%�����J>+Կ��zg���
��|�*Bh�s
��� �G,:�G$��H�������E5NH�D�E袃ٶ�	�޹�˝��~�7���?�]
���NC�-p]��
8as��a�HE���Rȱ�/�϶`�
��{����s�":d��R��t�C�26�p�
Q2`�zAGTɥDTLD@̟�V�]ta����
���*��g� �g��tjf2~�f�O,,�_�@
nP�Ρ�f��{Wi���=Z�sD�4	�ACluϵ�1v�}/�f�ݛn�>6�8űܖ`a^@ͥ�U<b���F�\�?ɟ �F����9�S
���^%	�
j[����ZY��f&5��7���&�������8v�!º~-$7��
1
�o����L
-�C�aS�(���
pXEm���͞������
�<����W
-�Q	�),�W���
�|@,��Ż��7#ؔ3�������n�k� �v�jo[�jnoN 8<S��O#��/���r�/�́r��=�d���m
 9�;��d�����z � �
���%�
,˻�ϲ�5�4uU^6t����o���kz�]#�*�����n�{�}�+�4y$LTPA���:�:8e{��s�9!����R"�.ZPEl��Pya%,3��f�m){�5�v'��d
lP�7�S݂�;Vb�#2B�_�.	(�En*ö�L��������U�r��/B2r�s��>
z��^t��"5�4举f
����W��=q���
~l�����0���S��
B�е1#�P�=bLY at Fj�m˼k�
��3�
-(�&4��s#������Bl�������UhQx�m��P�[�b*��2a9S�`n1��!B�xd��c��x��-��{3�
5�������m��s��k
�����2�*:�'!V�����
+�,�lۻ��I��j����X&Qe�=kG�������P�N���:@�
 �G��a�Wp��5R����摡��c
�|w���s����WlO�_z���S+��d�N�0u"�%��W�8�D���M#x�*�D��x�����+
h��`��.8jă�*p��l�}�H�͐����x�c#�rd�}j4��Jc���0�n�/��n�5�sl�-����+


)�ۣ!&'�����6˿F��:@�搩�%\aLD��i��n|h
��#�e��sҿ0v��?X�i�Z
Y��
�W�u!
�^g��@����ۅ�rQG�/{SЂ��@�z�q\ 4�2,M�/��9��D��|�Q��c
��"dh8��̢����o��r����!S
K��V՝��?f<��0N1��`��X�ޚ,��8�}ɳޒ�� z��
��~tOX
����=s̕��˸��9�;Ry3,"7�6�m[��W�u̧j&�Xť�Ą
-�"�6{�J��
聨��6������#�?X@����9
��ջ���6[���t��#
�5���<k���~	�ξ
-͌lb���$T�.��Ӎ5=ܙ�gG�L�	�/
bb�u��^E��� �f�_�y�
�e�D�� �Yº�����b��`
��:Pw��Q�]`�-�9גb�ox~l� ~���/�@v&��8Z��'ko�'�o���R��'&�`,^����}�I�����7 In!,�'��(�9>�G݋-O����:��追�)�A��6N؝�'�&a��HE��(���{ԫb�����T���F~ϑ�{�`����-
��|���w_H�Q��^�z��{�0������+mi �d�̶>s��
-bF26jD�Dt�*^s,^����J���@�э�ݱ�!��:ܧ��F�,ꉵ��#G��<�"�/�UF
l��"<%���N�����
S�M*�#G��אi�w���d��Xc�h{n!�Tc�eOw@���d�ꨆ�
-+�><}g�ꎚ����D�#�`��8�>���6��@�m�l�3�
S4�UrR|�_󈜫'ƮQ����Jm�����{���
-Ocjӣ�1 
*�i��S
��-ڱ�Ϸ7��쫺jꩾ�XdTm��3�̚��Y���b2
3�W�-�
�UW����Vhyg�����3��w�0[3�W���r���\C@
p��T�=����Ss;&#��=�vf+n(��_��g���7���#���:�
-"U�_w�6
{�]�溗p9�|��4���$�3~�n���*�T�6v6=����b^�e!!�S
'�k�*�g���{�1�TKF̲
-na�n}!bW&���l���ձ��]Tߐ�9�w�8�r�:^��[�-=\F��L�W�iM�P8W�����)�_t�?�X���ѷ��]E��	�Y��E\�NPwU�)�V�)�ZHz��,��?u]ɗ�8��V�5Әt���'�!�����@멈��C=�s��7�U�A1
��HGh�*p�Q�gy����_���^�I9^!�3�L�/ R���,�*�6�N=����v�߰�4�qIh�8��5L쑑M���c-��S0�A%�����i�C�ţ���*�i�
Je@��ߝ���=Zy�/�$E�w���GjA�y�`ޕS�~K0V!˼���9"ױ
���7z���E�[��
-������Z"��� �
-H���
h��,�iD�d
����MAw���1��
 ���:<�
�n1,�-Ŗ�\���A
�����l�w
��\��5�T������
Wt��޺4�"&��Yt�:T~�>��\��>������]�É��<2�w�E���q<BR����xN�7���y|����{
_u�ɢ
�`3�� Owǚ+�L4>ؙG&ͳJ ���[X�D
�#S-��?j;�.z��i�u
���Gj� ��ew
��5r���dz��r��%[�*��#�|�AH�!$�4��<�[H.��(�
�p
-h �j�K�g�����W�X�Z
n��>6t7��Y��F彽�uZ��(��":�ߴ�'�J��S��9����P��!�_l�����Ѓ�G6v���u��w-T�6
T\[$�_�
F
�Hm�y�w�J�K������bsRTF�D O,諸!b_�jX����#=
u8{u0}�G���h萔
-[&�_�3+����H�0�����T�Wbr���K_���	h��2������yO/�fHȘ�߱?Sv��O��ԑsֱ\��t�N
-kY�)z��~��������p����G[
��+��ˈ)���/�z"�WG�Y/���א�
�W8!
�7�pO���f���gbf�������v!��M~�{=����[��6��:�'�
i��7�.!�8,�6�5=���/(�Y_-�_�c���������?m��EF�/���7�F���#�}l >g�孌�|�<Tz+��@�&�%��
��r�J8�c��5��0ak�-S"�x�_�
�t̅-�
��P
��7���"dAP��:6�q>5
�R�j~��"
v�����r&ԻJ�r.a3����T���%R�c��mϿ`���!^
A�N��h
��ݑ�ʹ�m�����見?1���H�V2�xY}������H
����h�a0���	�Ȩ���	�9 at .��A��b�����p�Y���SqÿD��,a���o�6�󮀓��%W����#��Nu�
�5X�i��e���y����`�S��bJL�}
�m_$��f�
��"
-�(ͦ����FʯXK��-�:�Ķ���u6^;�@�
Ih��EX��乄[�SOc�g���M�2�9g	�K��_q��>Q����&C_�~Ѓ��~�h
��3�L�}����1�P�_|�X�$�Zx
9��U�ڣx=g1��`��~TEC���820	A�2�db"rBupU|8	J���k쪾�3KX�V?�ռ��3~�Z&W�����*6;���9���)ګn�5����[�&,氃br����������Ts�{~�c�}rZ�l���#�F\s���j�
-"�9��U�c�1Mw
��۫���Y�����J����=$Õ
L7�j�o|�]CDT��?i��	�4K��9x��[��Gj�9_�`*��B�=�B�c�PqH�5ri@��������O����g���'k��/w���
+u�Y8�S
�N-��c)/���M
-.�BU��6>�hQ�
8S�W�[|�o�~rK9e_�ݝ%\^�Է�
����d��[F�.�
]�
�P������e�K����Z|���z�����1�W�� ^E�L�2��c�}�ea�5l\@Dot� �٧jn�������"�m�ʿ��
�Q9��x�[i|�VF��['��֩�A�Sb�B:X^@Ӝ?b����
-Rpb���H��ޖ�j�4C�ǀ6=pֵN�v_P0s��p�n覰��������~
-��`���;��ן�������R�X'��9�hJxo����ڞٖQyn	
���a)�,,m}�\�y��-�l�C�|0u
�y<��b�m/�+ȼ�S�:U��u,����N�"63�ga{��}W��@*�pj/Ih�g���s
-v��)t�wKĜ�w�ڒ��Z^(xEߋ�?-��o��׽xh�:<���L3��U}E�>���VN�
��\�}�B�����A	�-,VXGC�Ÿ���
:6�:<�wۣ�7$���5��o6koYg0i
-9@on��:ޒ�:�+!�;�
��?�4>>�.��	9
�����M�����
i|�SZ�u
��l��R�+�2tnXI��+Xx�22; &7� ^2^��+=���6Ԕ�	6����
-n�mS����
-ҹ��IqeQ%��X�„T�R�R`�k�%����0wM��������>qK�������V��z�ʻN��i]"�^`솾����X�
�j���ZK�g��7^�T�H<��ǯ
���=�nK��;�AX��7��/#�h�j~rKh(�iD�
���y
!@<W�u/6�	I�5�g'S?1�!$�d����
���M@�)@����#���b\�����MJ�R�
:��G>ӹ�J�*��>U��s���G�""+�e ��c[l}
XGd�ܯ 7 �##&�׮�Xภ��
-� n���֎) �'��	��֗%	{��5ql�
N��	��d�m�jw�h
A��ʮ�'@�W�y���3K��~�����9R�g�P���}bv�v /�Z�'!ָ�*�l����~��:�է!	�4f`��)ޞj{~
�f�����8R��]+���zW�o
˘�uv��
^�O���C1��m�9�L�l����z��Fɻ�?2VΏ6 #p�ϾmM����ILn at Dk�Jp��Ֆ�P�
�ۋ���3au[�_{����a��`����l�SqjaЎ����w�JQ�f��4 at o�=ݟn}�7
~�YG�$���L�����2�K�8;�'����(�S���ݘƦ^����pA&�1��	h.�ݭ�vGk_���`�1unas�c���_
h -
�i�S Lx�Y�WFT<�c�b
���<X{m�Zt�����#��睳�t�L�Kz��s�5lCDE���4=7���b��j/��7>���fEt<�MH�*�m'���߷y=Q
���[���Yrn����{
��3�
ð'!�
�	ew���@��O'@�?���bd�_�d��!{�!�4�k�}�E�~0v�|02H�
��=�ȱ\��8�u�4�u��V{�4���yN!���$9�1��
ttLIj�[SgJ�W�_�����j�N
5�w
Y��W ��s�-a�r�_|�S��K=X�����&��ߧ�x Ēm����xŵÑ�����=
�@���r�Ḡ�VQ��UT�m��B��
-dNPO��u�Q��Z��;{b�=5s�?X8\�����W�S|�v��2*�O^��Aw,}M�hx�緇k�9�Y����C�ׇ����i~���n	�}��ݹ�Wֹ�Q
��p��:��#�5��|�_����19>2�pX��qJᙎ5Ta��jP��LxH䷚���:1ۜBh�i����4<��Ao=Xg�6��)�>z��
yOJ��~����\P~S�Wug
�yF̪{�Z&�[F�
�
-t�5����c�-��/�sl�Dt���Ex��
-&�Hϥ��
��&�rd�B�_v�y扪�^i[�GN��1Z���#���[�s�wf+���r�O��|�7NܚC�
�S��jxp�e"j!��8H���|�T�#e{��
�L�Cpk\똔�����DZ�Lߛi~���~q��A���P
�wDIk��m�5�5���r.��3.d
��,*_�+���@�x�����+�~�_X��>\%U�\�{�^U��X��T�C�4���t��x�.�L[�-���
�`w
S�B/�%a�^q̂S#��#�1,�B�f2�Ɗ
[G
-<�S�1=��?
J؛)��?Wrcs���bc��Vl�O�#�1�*}<�+�s�ճtlj���E�+KO�7���lͫ?v9��)p��J�k�'�w��|r��4��S��"��*
-4�ɢE���u�f�
-*ݱ�Ns�
-��u��J/m
�(c%��Wte�( �B��4	?���,81(�U��pͧf<(f�b"Z.;���c�v��A���һ
������L�O��
豕.
�B3�x;�/��^$U��yJ񹾚��T������}��W�*�@?C�$��4IL=�� M
-J٘���
kpU1=��-|�$"Ѿ���$���b�u�����@^�ay�m@�[؜#_ ��
��91c���Q�50p�Եޘ�\oJ�
-�~��`�T f5_�D��<ږya�%���w_�6&~���8g���_!��w�=�Gf�ݝ�W�D���yt�}�< �v	���v����逞���kCDq@���iX���
X
��c[����G�e�
V�w=>
T^`
�眃%nO�D������_�M��0�։և�5T��,,�<Q}wo��[����
m{+驺p>��N��I�^�_�ז\��8� �.	��<�H��zX�bŌ
�W�)6���,e�Q
���8c
(�㓓@���;#��o����P�������N䅜�<X%�8Č� tswS�;^C=��C��Єx]S%%�1��
�
O{�9W�\?��q�*�+��%�M��t���*��On��O
s���:d�z�:���; n9�6��=��
t��bq��T�󝹶T`<�#�Բ	!-
Ӱ�'J&�O
��
qb�Avf@/fqY �҃���������v~P�&��q5�F"�U�R���\l}�\��t�]W�UKw��\�m-����`�-�tۓ�Id�:/����v&ZO
t�{3�5f@�X��c�C���R3��M�'F.��ȡſ�Dh
-�ϩ�6�ư�)�7����uVկ���/����
-f�K7�e�����Kجo�	/��q�ǚ~P�#x%�u��7�ut��"�-��,`s�}���5rsX��h�M�Wܘ�� � �E�X���G��y쐆�;6��F/޷>�4���p
-�~0�~+j��������o��,2���$"w�����`��uZ�n��%n������Ql�=�s�ăEp��"�i@�|��G�q��9�vL�,�!���'L<�bpO���#K�\�$�
��Vk��}��*�<��:w��Ӣ���r|YDB��� 7+4
���;��ڹNiXfW\�vT�
-* ��f�}�����e~%��-��AOD]�O�f�d����*�N��##��l1� �c�rz�}
��5~��oIjpKЅ;Ӑ
c_�񖤃��<�jkʡ���.�y����1��n9�ƾN,wI��

�3��
J�[� � ���90�L���^	�ʱ�L9�l{�;z�;ɲo0[���TbE
�������7�������f�_)�+��Uo}���wY�۫�
�@�]��;1wO��I�#c[�WRv�z�_��'�
��'����19�)L�[���7��4w���C��f��UЌ����Ur�_�j
-ʸ��ޕk����ZAg[��
؀���]�
��
�`
l��5�|�@������ҋ��C�g8�>e����`˓Ol��B�
->�+��4�����tl��̝S�M�`H�D��Xt�:�0��c �Ayof��j�P�jv��ZwG��̺�:��~��*�X��'`	ց����쳖������	������#5
�]��{����I^4չ֒(���Q���־�����Br)� ������K�Y1-�3��?�Ķ��z:�#&W��s@�%�՝�^)g�&L��
���s뮏"�.uץ~k�Ee
,J�FZ�C��!2ϭ�r/�6�U�
rs��;�+8+�l|�p	>%�5��7F
�ڐ�%*ϧ����tX��1��v
z��ܷ1v
E�
}���[&A����w
CM�S��~X�y!+�g�2��9�x��e��1R�6���ܞjI��g�]�ދ�ϵ�*4���1O��9���P�����;FO�%A��1�nq7'�
�n�zJ
0VPo��v�� x
W
��4=#��-B��η$hz+�nM�]bRÑ��i���ͳ𬀎ˏZ�~-��1�.���N���	�;�=�N�MB�	(��N�sjh�����er��"�|{��o[�G�_���}������
�+�Eva[��L�S�`�O�
l񞐋�.Қ }I<1�wx�����
�7�Xg��x%�Ұ��c�e��'�o=*돝^QDE�k&P�@C
�y=}{����Q��!94hH#�șp�������y�xV���5b�o�P�^������:+�ZF��}��3�謯e��k+���Yg�9ߚ�jn:V����{�QTV@�#9%4HX�"���3���)'�� �ߞ�$
����
�W�ư�k0��%���믍���gw�ӏE̒�I�?%������6�/����l���XnI�+����NB~���`���e|���������(�%�s�u�����[O
��õ��~9��7 ��v�����7 at o�˵�pzLGCF�tl r
�5?����u&R����ߘ�]�����~i�h��`���c	�6�x��4���&ݽ�nݙl~��(�(먾a�����@�nN�*<�N�KN�vo�
-�r:*�cQO79�#
֠��ѧ����䶣���&�ׯ��v�Y{
uO��ַ92O;
K
��^Uv��ls�*KۃEd�7�M/���]Ұ���g�G5d�d��9��ɗ�9:(���
�����A%�:��T���>#��*DfNP
-~ꃼ�t��55�oD�X���ޛ�{�X'���b@!D
5�G��g�&�m����-ė:��)�5[�QI�����[+Ħ�YDQ@��
j�����
-o�:�Z��TL�GɄ�4CK�kl��"�ܯfSlbJ�����8,��42��`��n������x���9��8f� cz�woҨQ3�
R��Kq
��L���^0�S����^5ᐒ�mR�
h��Q������R��D���e!ӈ&b���6�Q�
��!V�/�n�j6:oi��Vr�t�ʠ�s-c�
���{
�������_K�%��X�?����G���?8��������֑�[�S�wm�շ}��l� �Wq5#���~1�ѯ^v�G睲�Π��:6�".�2�J۞% ��*�����UD��0���^��
-��
-p�n���� �8��l��,#��FK�N�_Uvf}?�x������Ĕ���
�t-O�ZӾ���J}�����P
���JH��b�c�j���|�c�\YLI���D��8��r�\���
�N��ڝ�������ߞ[����7�K�
n}h�)����DH����ᗼ���腗��ʛ����[��l5�lO�X��qo�k\BD�K�=Xm|�[DH��
ʨȐ_oV��[,yn_k~P��B'��V��	x����{
�9f���Ќ��A�ڱ�Nߞ�?�͐�\.u��
-\��lK�&��9r�O@</P���fiu;��"�
�U� hr#~d����$x�l�S!�*�u��}�t�c�%��l�_ʦ�֑5�Ep�s�%ǻ�,_d_�e�ޙ���-a�,�D�$���2�.$�N!����\�zwӣeN�3���+�t��68Y떓��@��-\�_��k�Q��A�+�����J�^����S��U���U_l����L��ɷ��m��<-�ɢD
\�}Udpα^�ұR�
R��Q=�c���	i�G���j>?b����_\')
T�!�b��
-�ѫ�C����MvϑyH�ێ`,޻ʭ!�B*��&×�FA/Py�>
*�T��2^��>
}�;�|s���GmO��qj����7�>�Ͽk_B�I�
/J�y�XGn�O���6�>R�!A����f�e_����� ��6��c⨩w���i������[��L�7=dU��v��-?,%�z�i�B�e�T�
�#�4\�3�n8�e�>�C]g�E�b�����5�
��,@#'ږ!�[sM$���7�h%
-.�m�������A�UR󩖂<�3
1<˱z
Q`+�bT��*�m���
�w�j��s������A$_\����3�I�5�V�|�A�8
��W��_��2~��iz0�+�R���G;�
�aq���R�K��QЃ���_]�Տ�+u�|"J��T[����Xꑁ�86�`G&��B��X�P����%�7��QM{���s$�/
Qb+\�-��C�H�Y�w��o-3��ij�
yg��d�<���yB�5�?e��L(��˷���+��c3�pl"a�MḦk��M>
㊯
ߤ���0�Y��46+(o��ff0l��/6���i�
��M�<	Ka�^ī�f
D��n���"T�e�ᑡ��睙�_��	.)��#�b�.}�T�Uq~-��9���cV�
-�o���u� �Ұ���4>}s�t���H뫳��O.��
\�%}ч*}c^��}*"Ⱦ�)s��`������x=^)��+ŗ��A/�}5�
�w
-�oW��v%��gd3
JJ�]Nmv�y���\Ҷ�����~n��#?l�;�8��L��	�W�
- /|�ɐ���8�㾀V�Zc�
��3�}-�V_
��}:Җ��D�7�EJ��
6o��s�1
I
-1��
Tf �op
�}���׏�g忸���eP�7q�!��c�xH�&��\�C" ,
-PI��Yv�1
Q�i{����q�s�-��3���k�ng
��l|�M_kʥ����+��R���w�Y�_���n�aI���7%	7>_%���c�{=��C ~GU�*�D�CyW�����A�m�����*�7S��)��cJBUX�-�o��ms�כC-�J�@7�������m���y�?�
�����2n��ݍ��
�~잇gh��n�:J�
a�A�>(�
����w�����njz�n����0:���B�\�P�z�
U|d�4��G���k�%,DL18
�t0<bJM|݇u�쪮����9(��Hj_7������

i
E$Z�Z�l�
��8?�e�f���^lI_����d~�r�@G

B�� ���>
P#Jv@��iſ@���_Ϧǂ����3�	G
-X�m�������4�տ�F�/��97����EW�:4f�7�t�*�y��!�W��J]
-�`�ZP��5�p�I�����7PaG@���T���.��h{9C*�>	N�����?z*_~�_����`CBDJ��#Jd�e7���s�5r�c��uD�G�,�H5 �������
n2�v%&��k�o{w��+�n	��jέ���&F��i��&iB��I�F�������>	<ñ��do��nD������yx��ճ�mu,�J��0Ijv��eT�'rZ��L���qp���᮶��O�/ݚ�a
���5\s�<\z�`���V��x�h�������Ȉ����
-Ģ�k2���$����^�� 1	�;�I��þqN�+�]-wW0gT�⟕���Rv�y�ꇭ1l�O��z���:2վ�H� cp��kH�vf�����ۤ�Wgu�59G��%��X�3
~u�M	+U1
�&�B�{��
-}��iTّ�{�%α���*�o|��=�Ou#���+�[!7�_Ϭ묺��~��p�ӿ�@?]�~
X�6{���F�+�_�;��O�4�W��
-~��s����S��2�ݝ�{���mg����;��}����ӹ�g�s��#��o�*CrX�q��.���|ޓO���-$���ֱe�ӭ)����b^��ҿ	�B�]�FCg�
�
2�/$��6й~1��/&B�Rb������ds�M�D�_��*0e��Y0
VѡQ=�x�B��/�rrCTG����j��?J89g��o��B���?���Z���_��y�3��g�H��n18ٵ��&���
-��`���*b�AH��
.@҂2\�{��iϻ4~�����v2�Z��럎"r/�!��=J�����o9���W�
�$}���悌Szk�W� 闳5'����� �^B$��B:B�M�.�̵>����	y��vV��
<�'f`�6�&������
�����	u
`�c��m�Z�[}{g��ZB�٦@/��MI�����F+�,��4�¦�k��k{�(`�UWE��/��^���T�y���=��m���a��>���'�mo>wΣ�ݫ�5�𚾳�{��_R~?f at Uo��'��~C�Hǡ��G5\rDAi
nK�k�rCO�-CG��
f�ᖴ���}�^���S�̯��ҫ�H�[n[��
���<R:ȯl�D4�F�����=��:3��͡�_�KȌ������'��FT팰���#3���l�E��G=2
M:հ�Q��X%U��lRXɧۗɅ{����4ܓ�n�{A�w&/��UJA�O"f�5jѭ͡�� �P�W��mMS����/����&3If&��Lڤ�^LLb4���{C���A)��J」�`{7}~��?y��ps��*��Zk ��n�>�ۚk݄o�
h�?©�5�o��
���0�~%�>
�
x� ^G�I;�&�K��6M�}C�>�@y����'����O�oN#
-���5
<a���������������+G5��'w
�|
��)�6��� �~Áo�ˮ�ȯס�1�����PËM;�k�Maj^�7Ӳ��w��=���5@#�{�e���������ui;��U���Ȣ{�.<h݆([ӁS�J@��W�L�����,:7&j|�� �m���9�1F��k���u�J�v�����Mӣ�ړ���W�cvR~aII_��
-W
���Y�a��M+`)���۳
-T�[pVP��Rtq�W�`AɊ}���S�v��6�=����с��W7
]%
���+����t�E�m�X���
�a
���YEC���o3b�v��i�`���B�m�;���U�
Tۄ�-s͆jތ�"���`s�qaͣ#T��kt��Sui�����Q
��
���JP�� p߂,��O��m�����Rd�o��g�iQ9g�T�o�e����#��{Qyœ}7��S���<)��|d`͍�^s���LԞ�Mذ�*Wu��e
<e:�WaQ�}QG������
/|���B�i��R������|�DH�s������ܲf&�G5�w��1#���
��Gkښ�
C%��u��;>hޞ�����"�[Х�fH�g/�����r�J7���ϣ��M�l&�ic�ٹ��Q�z|�T�#'=�7.�T��.l��)1��5��Ϗtw<^�Q�'��w4��_95O�K�_���7ޘ탽]R2�f��Z9:��d&oU�lYQAS7M��u�|)f�Nl�3�e���m�$�?�p���n�0��;C7�Z
{x����үs\źS���L�� ��ð
�+�t�Sywˎ��F�ݒ�蔻X�b�׺�Yة�.9Y�O����>�P��8�7
����KE�}�:�C �?]���[�NJ*/{٧���k�fL�������^&Ϗi
��\�#�~e���NP}�茨���ݰl#�%�<AoJ��яE�{���
‚����s��+�Ύԯ�l���5PJn�إ7���g�;^l������
l�37��0���aK_���<81&��
��
 [...]
�:L���9���'�����̭��
GT
8��ה
�3���[��>
�3���][��5SgҦ�+m�
-���;�F���[�b U-��A�5
4�����z��(9;ί��g�b�֌S�-σ���ՠ�Sz�����غ�w�����
-�F�T�E�*nEM�W,��Y�Վ]��"�f|��
��jg�w�-�g�)��S@�Zl����|L�b��dlXJX����
B�����`4��?�Y���AP��1q�� 0{��$.���
�0Fc�`��
²U��T�u����[��xi̯�=���t¶߸f%4,�
�:t���X�`�6�9m�>>�roD84�%ia9?��?�G�	
k��8�1���K[S_�(e>���¾MQ��H־��y
�$A6=Tز��dc7<�f�7�m�4������u�W�Z��M۳X<J����'
�<�uZ	��pBK͔�S.Zƙ ��FP�?)m���A+?�h�

e��_���L���>X���-y��Yq`��}�-p��G�
��qE����O2_��O��ÙߕK���ӊ�;����)=�I�o�8������-����Mm��y=
��6_q�*�tP��p��΍
����`o\�����Y'Z
�15���7'%�������&XAx�덎TzeF֙�iǖ���YKfDႅT��d"��٬u
�Ĵ�]���0�F8�U3�bZ��Ef��]����ݏ|şC���	w��ue==3+nK��������!A��Qn�%����'']��iU�`YND��_��fzk�������ߤm��hz��	�~��,����ϸ�����X���Z����#xО\U�>��V_u��"K���ך��
[t� ��ӆ.9��0c�����?�u�?���޳���J

�����_��+>��龖�+zp���)gYW���p0�"�z����[����:��Ɂ	k�5{����Z�M��1�ڴ��]�ڨ�5iAќ�d�L�r��v�T��0,O�-�0;��$�)� [...]
/��D5/[`�s2@��۸3JE|�i�A
� DF���
/
��"�z��������3��;�VX�� 3��f��'l8��K&D֖Q����j:�,[�%{>x݊�8<#�q�F���,1��.q�_b���$�u�:�
��E�hł����m�
-Ј�!&��_�m���-Ġ|��v�,jD�/X>�wh"
�I�=)��V����}/����Zuf�[~vv��Ѽ�1>M��=3�������i
*TzX\su�_v~a��Ł�ҵ��6F
��y
8����C���
c��G��5'�|g���
pX{A�����j#֬��59"cB���é�����"�� Ud�(_��+�HZ_SB����S~t2�n��`��A���yh�������4܏��/C�_���?}��{!>��l2�% �D�$�H,zsj�
o���ߍ��O�U�
 <=6������Z{9�ᥣ��׿N����p�[ѕ�`e�/�W>��w�t\���GY��翺~�z��0�����
��w���K:L�)n�c���?�:���
6�j�_�����{	�u�b׎*Y��c%&�>!�}�j�WːUϧ
%3���	Ac‚�z'v���;=������!T�(� ��j`���qтO�}n���DZ��
0{VZcІ�
/
�"��l���
���N�@�����&(�3� �0�4��]'�������Xqy�"������(G��x�%�v���X��0
jSD�+Z� �cZ6cn�6�Eem�Y�y9���=���\��S�ѽ��lzb\7N���[�掤
�s?�b�) �b>�
ch�Y�8��h�;�ʲ�����3k–Ę�tՊ-�SC�
���fcvoF�OˀI+F`ں%�x�������C����\ͦ�p�u�:Q��t��0��1HE�I��
S���>��o�,޿&���c��
�bՀ�Y���� 4��i���FU:%�T� 
?�����^��Z.����[��o���ݝ�3�CRv�T?>mYO��?<�=�p;��x�f��:����ƇAi���q&m3��.
-`�C��i؃P��	��𻅍ts�ҕ��"4,h�+:D��Yy�����-��rmn�\2&��W!�ό�:�m��W�
`|T��]�j浠�1H��L����{.F��X��Z�C�6-���;Mb3�Q�<�폃BP⮓
-=<�&i}8=��\�ʾd V���a��Lؽ����:ko���t
��,���QB��#Ȍ�Gi�O��^�d���1m�-L;ŬI:���^�V<�ـL�ňI>!�&��Df���*�0U~i�;H�� )��	3z>�������S����䌿"JX��Wڜ��Ԉ������ ;�D
��̢+C�/OI�}oB$��Sc
-�������U�ɿ�e�.+�v��w[���B�A��Nb���1�B�'��B�%|�c�������v
xa����l#���vaZ��~��PM=m"f]�J
,u��:���H�\,@�H����;
6�
l@)XPa+c����!�oXȭ�&Tє�N
O��M�vD	M�?9
(�
ly��9<�G'�������kN"��*����f���:Ow�%U�k=���p��m{�����E
�}��Ru�/?��U
�r��r\��xIJ۴�j�<T�0���E���
���DU~
�࿄(�&���2�ߦ��t�i��
���V��]�����f�G�a~�b����\�����Ţ����ql[PA,\��v�\ʪ��ՠ�'�n�{+.L�+..ɡɳJB�H/��� ���������q
-ή�2�=Ď
��d��հԀ
���c��E8���>����|�ӕ�c�%��ƪ���'U̩0��]����ˑ���2T��`�k?��܂�X�f�c|V�a�L
-��_��\\P6=�rak����0��J
������-[P�����}�԰w��U{~:j?�e/�	�k&v��!�YH͋j˨�Y�$�s�B㧕�Ҁ��gf���0
�
��G
���6-��
-���:�
75���#��kJB�Ujы4]Y��ۤ�
1��Vx�* 8��"P��j͓Þk���gay��i�aOc��M�~��G�H�-\@�
�q�֖4/��1�]|FJ>����$�	q󓐚X�Q������ޟ�Ѓ3B��ׂ̌�,�g?�
-o
��?e����PқS�
�U���q�1���P��ڇ��NZ���w��yUO�����܇�H�O�}
�_F���^|���04�Fɽ�ܢ{G�����g�o��0
-^A�vFWDJ��s�
�|O.�{D�I>3;T�
W������f8_�8}_�H�]?�|��
���brN���y�g�
]�~F�ر���ʫo-+k�/
���k}p�Sv����rck]�(~r���7wӻ�&�[���d��F�-/�|�ޒ�D�2
S��A{��kv,��T�����?�<��.��?��
�[
d[_W�=5�������&.�!��.d��V�� �~ņ�]s�:�Vjsx�~����t�4����g!A�u
�䂼+��to˳e
��'j�?�����El�8Bl�
$A��)��
-r�L����
�
⢫�gB�D���
/��mŔ�X����-$oǁ(�q��1
��Z����L=����6),���e�vbF	{���7my�U_�$��Iz'H�Z �c��;�:`�]
<]�3@����m=�;��]�
Ө3Fh�v�A]uSc1F�U��f�ЬE;�l{� ���-c��W���'�~�&�9�������
�Rb��WG�/rX�	i���^������j��JlvĂ/����3�)b���1�C��Q\����

Q�u�Cj�
P`3FL���X�d'���� ��b��b#5��@���T�d$��*Q��A�k�����pgU���nq�眔�c���!\���Z<:�*�
�
-�T��?	�e�F]� ��tЬ%#�l�JnYu2+^6:�������+�W_Ʊ����[�uWg�
/t��󊮜߽��+Q3��$���r��9Uo�܈�P�퐸���`�9:kB��\u��Ķy
4kՂ��2Mg֜�x s����1�����,�p�%���=S��Y�3��gD����߼�3#ݵO¢�gKdŌ���-hK�
�Q�bv7�n�_�#KW��Y}W�n�cv�l��,|z�&���-'�?�
�f����Ckb97%,*�:.��;2�,*}y�x�g7Gq��YC�x�%%,�9oG$�����cl�\3�OX�S�c�_���C=e"V\v0j�.뱕�Zb� �⼍��h�K��[2��W͈�E#�l��íx�=�>�t�����%�a�J0k
`.��%c�X.mx��mz�n�J�3P�ɵ7�����
�"���S}-�g��w����[>*b�Bk��J�|,�����ծzQ�KX-~�N���*V=�,mڄ��qj
+�9g����

�a�Fl�
!�b\L\�P&��gwK��8��i���4��~:���!4�ر�KFlѢ�T�d���/g儂e<��ǭ�<�Wuw^����):
�ox��"�虵wl�G;�����"������U
�dEmm���a�)�Ȉea%4�C�J�
%@?�	�/�8�Aո��a�b���S�_/�aX����yXz��*wc�x�K�
��^=����f�̶E

�d��FL���}o��2���X䈕	X�
�l����5?�4g'�-�PEˆ��-'�d����{����k66|�D���a3t��i-&{L�ϘP�+V}<ꔎP��^FLBb�,�E-�
��gT��y=*�pM�
�nL�9b�ԏ�8��Yw���tⲗ
jճfr���ܾ᥀��s���lFV�Z�%�
\��
S1���J\v�N�����p��a_��
������
�m��{\ۋ
-긭>9<�-i�;����
����1���m[g�V�f�4ͪ{�C21DK�z��J��f�o�rܜ�������
�rJ��<���X�,X)�
f6|�
.�rɊ�	\4P��ո�� <!,��Z0���U��!R鬞�
��6��#zL��
�1����܈��5���&-��\�P��A��}N�l�t%-ɑ��6|Ӻ��9�"
-���MY��0�Q#�$,m�����kz����
_���b�<=��Q
k�O�.;��7
��wE��5�`�H��!�+#��Q-&�ڕ{
�l�Lm�r�k6j릟Թ�% ��ֈ�X�r9����� 
�-��>�;^b۞�
��!�}T�S81MX�R�L�vp���p7$�c�G�ʦ��	���%��:��{c��
l~����0V��c�5k7��m�	DFk�T�>M
��g����\���H�����ئm�~B��0j��}������-�z��jb���Vt��8a�E�ؙ��/yY������B<�?����D
�*)�:��
v����Lљ��O\q��W|$Ⱥ׾lG׭���'��u>@�6==܈�Z?�!-�ճFB��������^޴�����M��a�0��h��WuԌ�Zw���&��D��^���:�q���v'ق5?�}+Hǯ�Q�3.J���
-��I+^�D��8.��x9�%+�b#�
+\Ò[�d%�o����"�Z��_pQڶ�|���w+��xqM�a���
�6u8sՏn�g�G�uVd�2ӣ�8ŕ�����Y �\vX���T�j#F.x�+��fX��

&�K:��T�w;#
暋K�
���
�zf��
\�s�:F���끿�|R�J�Zi
KV!}��/�a6G at 9k.B��4��=�A.��5��n����>�j�ۧ
�D���8:H˙�p��BJ欔\���`���r=���rBE�^�r�~DBh�:����
��)��l���59�GLi�iј�_���W�=�e7���C6=����:�kU�3L��'&0aJ�)9�FJ�^�
��3�KnF���O��8�b�7F����
��h���a=�(�z�ڞ��kM�U�=��i�%5"'��	է��1��q��pg¢�<�
-n�4��m�e;�#R݌�P5#�kϿLa&��%�qb~.��x�d
.I���
_prq�N&� H!���vN��~���^s� [^*lՎ.�h;b�/u���v^]|}A��z��Ș�ڌ���.}}L�Z񰈫�
�eœrl�
_��t�D��nq?��&�=���	��歎q��1:j�D(]r1 K1[�q�!��-��
Ԛ����#lʼ����� ��
�

-�d�I�Z=����F>x9f��`Ʉ,��S��c���l��H�����i&gc�ӽ9ݣܚ�w�x��I{�O���	5a-�(��tX�L �tL��n���q6b#6m��+#td�Ml\
�tm8}㊎�	U�5����

�7�~]�
�
X�@�.t;$q����Zlu�~��l�n�ս?�3�5�#]�R��옒%/�eu��]p`ˢ֎7��C��p�� ԫ�X
a1wJ�mu
qJ���S#"D�����!W����3�k1�ٰ�K�}"�GA�� 3��ş?�c!"&�ᝠ��p�ryPN+�K�Y��	(���9�撎B�
��GY��X�?�Nx�Lo�R����ZO?!�'l~1Ar����%3�e���L�8M�~BP'�u��%k7j�,a�9��Y
�cT
-I�Q�[�VȨ�;�d��;Q݋�0I�ˆAn��K�6�
-����DZ��
-� ߷��5�3��-�HU�nrۮ�в��5G
@XK,���ۗl|Ҥ
�
�7]۴�Z��t����Z�RAQ'�mR�+������;�b���DȒ]��B׽�����12�}�����
�<���
-K�����;+VTՖ���豵v��@dz�p�t{��#�$.�Y���a��M]���=���n� 8�)'�Y{�c�a��<{h�kOZ�]��>�e���Cϣ�U�5��`6&��X�ߝZwg{��A9f�USFJ����7I�l��
�.c�6(���t+�ÔyPl���+{���\I�{�����<��V�{%���^�N�?�3�鍎��!*j{R�ٙ��v#�ޭI
-)b�ʝ7�K�#
܄���
"gz��a:{=���#t����2��[�<�޴ع5%4�����3k�T,���倰o+��[��tܪ]�5
-��
����fXb��c
-�̈́��P�
���褈��0�Ee�y�-��$܇�h5@���r�;�ݲ�qn���c7LF��D��r �
ҡl}��[��"�
�$C�9��<*e�غIO}����aI�Z��k�<�@w���|��ve~vBي�����.�Щ�����+Iw!�٩Ēe}o��Wг�c@����\To
��:�`>A���,�NMl{���mxT��AøN vɆ�澡:簴-�Wu%í�
i�c�
�x5~�m�"��,]����Ŷ�n�!wzk(�4ȡ

OS���o�h8��a���L�ᬐ�0_�
�"y��W����)��Pk�
��E+�v��a���:�tY{(o�T��� ����O)I��nĜ�������0_�mVh��l�
-�0��=ܣ%��gTI�4�eX��T�<c륯���e�= ��%ج9%�2c]�0$�儇�jl���ˈ�9�y
8m�w��xM�FZ���
]t�[bZ?�D��k�m����J���U^Y�m`��&�Q�F���F��
�t�
�����m"R��B,�9���.zȭ�
-l=�%��ԮE_��<
Ԙ�8���e#ӐC6�2���qيD
-^z�!9�j�^�Ϫ�
]{��4������\��f݄Ɲ)����������QWF��Š�7���>�Y&��
�78e}-��>�M���@�!�%Uq\21*����f\MP��Zqs�c�������L�}{�/ߛ�?ͱ�>D����2���r���ûS
�z�I���
-'��v!%k�܃
[{H#rٌ�Gߙ�1���i#�b�-m�m�c=�i6�3|f��$
c��1�W�'^
���XU��b*���a����5�+�&�s1^�'&��D���aNi��[

��C�q� Ϭ�v*�&�L>���ǁl�晌�K��-v���#�+�J� ]��z���f�lojJ��r �A5�?���?+H��5�zk�wx��'���l�];`�I=��?�G7e�p���g��7���;�h���R�نR�_�ӡ'��/=��R����?� �	*���-V������1X�V U2S�����!ELT'�ц^餺&]o_�_.�Z�q�FljU0�o�X�C^'�N{z�O
-8uF�f.�%=c��)~Lc��
��Wk�����
٬O?�Vk�z��T��&�X��>�U0n�s�������e�՝Djn�M��=����"�o#��?��#G�bڔ�Vђ*ƥ�i%�ݫ�r�Z)ԭ�zr
��D�t�l��T)[(H�=4�z���d
-��b,Z���s�4z5'��tE>�\c1�
�ye��/���)g/{)�m�
\��2��^��h
6�D
{
��/䐴E
�%�v�t�/V��O�S�/("�frܭ�o�W��#vRn�S8�
r1`�*!�9��7�1cj���Z�E�����AU�D�ʗ�Zjy
}
-
#{CG�2�@�ۦ�λ�U������9���U����si	JvO��?��j�}k!�j5�%��������ikgFlٜ쳯��3>1/�R��
-5J.�W
0Do����)�3U<~�u�;�:D͙�t�����@����:
�^��G���9������Cq����Q��<���SQ
�Tq����/�q�
}��ᇊ<�I�yC/�tbĤM�p�
�vT"��B(�H	��_�gnd�0���N�e
�p
�e���>��$�\])���b��
-�����]�V��J�
�_��[Bf�l�+�L9
��n�� g+5n6��F�K�f
5v�����TV9�ku��璲��O^���}�0��kđ�opq��5��t�a܋���*����W�BI֌�����06Ew�\��q<Et�3Kp?�p��(�L.g��A4��b4�ixS<,�TVL�������/'��$T�\����i&>����)�E��r�m4Ė_�Y��Bv�U7 
 ��`��/�!�_�I�1=
g�bJd�	��I}�Dm!������
�N��0��z?A�?���P`j�+`�?M
A���|؉�CؒP5�<�u�R@u
F��ol՞~���Ç�Nj+y?V�p�QC�_�3��]ʏ{�B<r�NsܳW�c�����(�oQ�͏��O;��A�R��=��9
�;�
�9�$��O<|�x<�
���j�ɜ�����ܼ��"	s$!�~��ͦ��OPq%5�� 
�$��B /׋��cJJA at I�v)�PI��Uṡ�N��zY-�l}��|s��Lj
-���ʏ�;�w�fA��xP��*��
w�z֑�Vչ�Yԓ7�������[&
���	D��݃�#L҄�����,z�T�����b��̙ʅ��7ap�-
���r=hh軐���dn.����?sӊ�˻�Q;5�AL:9N4hm���P���V\�VA���<�Ѵ\�w/�u�]~T
����n�*�{�B���
w�zA\V�8�x�ik|������Rb�
-�����s���g
�Э:��LzI�w/ނ�ޥ�f�s�{�F����1��ص��(�{�
w7
u��
������Bs�K.�YŌy�T
���M*àl�/�֠&.�G~-nu��R"9v?��Ǖ��kw�S)G
����}�#�ړ���LΑ�t��{���_��N�c�*�J�g\�=�N�g�q�������{
B��̫�!>�r,�@�SV�����uq���Ϥ|���=�를�~������	�?/Uy��+ixo흵�]s6�p��'��� ϓM�,7�;-
ԥ'���Kmбˍm�?��$�ߦ1�g拎ſ�9s!#�ޓ������\�>���(	9t]J �vuC�W
���W�'֖���w�]�O3k�g�%�O�{
?���=�����y"컿��
y�
-z�}��dB܅[5q���G2�m��=�t�¯���j���kiL�Z���:
J��
�(\)�bLǃ0�����%ս�
�l?v�F��+Z�n<i���%��[�G��c�
-��򛬧A��,~�t��tht�q-�~�Ji��1�r.���xJ��
 J�qQ��wY��1�;���8�4w�^k�����X��{�����>�׭��n>G
M-V�������E~[�Uϻ��
,+b&�{��~�2��?V�L��IcO������U��߲
-D��y
-�{��>��-��oe�����#)y�oS᧪�W��䜃�����2X8
�2{'���.���:��\j!��,���t���o
��קq�
5��|����
��F&2<:v���
-�	�c*|�GM+�(�
�� ����@�5w at p��:���\v,��|XWP�9�W-�)�@p�Q懤
�M��kX��J�x9�$g��9Q�!bcC'��6���)�
-s{e�vZ�x�d{� ����;�M���R�?�����ṯ�|Ʊ�2�省��]�
��5�����.2J��G��;s��d��
Jkz%f�@�i��<i����E=??O��x�
-y�~<0f�G.�.�{��<�,�
w�Ak�_�
�(��R�9Q����\�f��{���3���x���#zz�Je�sFjiCӍ����ú��6�9���\-�;�2��c`ܥ[�q�]�r$��w��\p��S�t�*猔�E��(D�����AK;��{AΖaE�% �lR-�x��Ir��c�
 ���Y�w�v��d��b���
-�����
8�3
-י14쁏{��.Z��8��=�=4ja�ZW�
i�@5�nx�'��h��]�����[y�=ײ+���+iW���v��-�jI`�TIz��ޥ ��%]�.!c�@(�3c��:tΨ�R�r3�}�!S
��N at Sw��¦�K���?o�"�x�nӑ���S�E��T�Q��\M�S
-S��ZK��cd�ME��c���/��Ⱥ�Q+l��z_��9��&<o�
�:��	9v�����N�ÍGmGN����͆Xln9����
!�tK�����-
�u�<�آ7	Tj=rPj��]�l�#�¶&"�ڻ`��^H~%�����t�������
�.�!q�:�|�#
��o��`�s��z@�5��:B"
�'b��� �Y:o�����n�\��m;��9C+������.��T�ņ&�pM�N���6j7���*{ш��I�	v��hPS4ZtX*/���*Ž�
-S�����7���;H���+I�Iފ��ҕm�G��F,��M/w������9;��yͺ!�Y��ꇻz{{����p��~3�q'�����Lڱ�Ҟ�^���'d �O)a}_�}"���ׂ6����� �m������>(�DVG
��� �0�b���l�X�գ�@Qőj$͟�E�<`]w_�Q��j����J�'v
y�;Y^��
��b�m���I5>oR|��"J���8uJ	��а�Y<�j������&�TW�-��r��l�ȗߎQ�l���	�Gt���_�.�hk
�`�.B�h��d����s
X�0
�f}�Ѭ!i��+T��ly�0sp�?G:ll�*
�����Xޯ�`MV�F?Р��O���t��A,9�]�^��%�ym�MY�2��|���Ӧ��0���p�EC�R�1�#��F��Tu	Ӏ��dL�=�m}G�5�g�5�"����qZ�}����'0c݋lۛ�V�M�=Kc}�U֫�Æ��Fa���?҅�
ϗ����: [...]
-����J���A������k>n/�f|
���^X����fX\scل)�Vc�f
�ư�>�!�L�y�	���׳�5���
-n�e� r�6�]���w�(%A-:-b26�2۞�M���l;���η3��w�J�м�
�O�y�Q-�̣��eݕ���2i�2�GS�@��dk<�����钷�
U��w0cX*)��*z6�rۚ��X2�j?�v�|		5�36�������K\{���oW
�RT�U����gh�g
Ʒ6�m����.��ϔC��B�
��
:J��S���6|���߸��}���~yダ�Q��6>�7f�����qQ����j�9)6�(ƾ��(i#fnK$�!�������S�#�2G�|
"�?�Q�Ø�m?�vր.�����v)w��K���7Gzxk>.q�π��I��N\Ղ_9k�Af�R鬷���cV}ܼ_��&4.;�e�:@✢���
�mN`�:��݇o�����j����5iɅ��p𑱜P
-I�<.E�CG+r+�o=zV��K��v3�sz�f���4�Sn��uknD����y�w�Üؿ;�� ��Q钓K�c�p�2 at qD@���Ag�3��V�Ra���
-�]ϭ
�a�V'ټ��
Q7�
-���ĕ���MO����=�E-
5k��7cŠ����KzZm���*ɕJ"�іU"�	R�����EE��EuãU38eÆ̛��������9��
pΎQ��D�bk>\㼃ڼ���}�텩���W,[;�m8!Y{#��=�~��1��V
��/�ķ�e�Ե�DV�(!ɓC�WS*d�� ���
[6o@����.l�a�U����3e>������32��i5�xN	��s��kh������m�p�i���ꤴ-�)5S
-T�
Y1����K۞�K���
-tꄙ	��
crfѴ����
�-;�u7�h��0\x}��U|0�"��
���?���s5M�w\T��(���3ל���j�!����W�i�
�/捴�u�s͊nX�v�x5{>d���
�]O�9̌�:�iAM�^1�d}	���F��M'�}r��Y�����Is/D�-�c�F͚���<���
�#������c��6K$l��Y��«�=
t�ov]�����;Sd�_RK��q��̠��������^f�����{D��Qrע�`g��=o �m�	�s��GSC��B}%Wg�e7�'�n�3T��h��1��$��u^��4�FuMo���WB’�eݓ�h����8	�i����U���4��a�\PU$��
�F�5O�Q
�L`;�=Calh�_��!v�O�5��"��
whk�NYqᚦ���	=�leL8�����
��
�QZ�G����x�Ql�7���(��k��\����G��b� �~ŀ)��cĕ�ka�fd������J��^XIE��
�
-]�#�g�
�vL�
D�/�xE�����9ϫ}|�M.y��q:�[ ^��-��8�~�P�p�ޕ��!����U
�1j ��9�]7�z�
-X5�>_PT=\��т�vQ��4�o���4��uV`悢��T��%�͖
U69��bLXseQ͘�2׍��55 ~JP��\oمپ�[s��,jYZ��K���m'	87��^�ò�۞��:���=$#"k}�d�)����2�˿�3iF��u
(����ٱ#
-����=7�6 k�2P
n
��l���6'}p��

��LE	_�a
�>T�����$�Y�

�A�W
U/��-���d��
1��-k�{nT����MXPy}�_|}���v�x���(���u� �ڰ!�}��E#$�`��%�n��Fp꾣3��a�sdZl��6�,�~����A�.Dͪ�=y�
-N_�t�︡��vp��nA���K� ;A�
��E�Ζ�������;x�?L��i:7��x�we�yh��߂�
]�;`�����h��jA�VTŎ
[����'�|��tv��I
-o/�*�����^�����E��
�jgE��y�
t����K����8�f��Q���\�6E�lY��SCU��Ҳ�]7��K�B�:�l�45��05�O����<ȧ)��?���4��
��GI�
��SӶ��4�x��U�ag��ݛ戢��^�-O�
W�����8:3��L�n[6
�ɡ��G<��S|��
�iDŽ-ڳaJg�
�5�YT4�_V_D5��qQۣII��}3
􏗉���[���#��?G�?�s�/lh��v�$������������o$t
ΝlM�
�O�
���S듏>\�G?
��k��
�[�_�06�ܱ�r�=��](sMx�c#��Ա�'Gdm�b�xu���긨���Vh��n0��(yK
~b��eA&��t�=i�'�
d^�r�׵&��
o���g>؉M;ft麶#9*/��g_���Ό��~�T\�6c*�ԝ��{^7�'�غ2WUm/֕�����$-9�� 0�Td�%��6���0�Wz7Нrn�/�ܾ�!������ڳ��{8l�i]�v���0�co��=z�Ь�~X������@��U5�qnj����l��W�O���ˑ��1��
��[�i����ϳn�{|�N;3���B)��@�w�ZZJ�� !�$�
���Zk{����|`�B�:�c���%�Q��sk�
-�@E��\Ա��㚥f;$��
,�4R��2IL�·�y���
�v�1O��I.5�T0�{�Ч�eWV��.�tW\>ZᒍbD��$$�<U�ԧ�����z&��u
˧&C6�ʯ[fp�G����U~8AH0
!
Y�`�bLl@ï�*X�;�+#�rR&8f�C5	.	!c����y�*n���m�:2�"A����k����ߣ��ZR�S�N2O�"�`��9R�GK/u����e
-�
�d�N�Tq�{��蕷��m3�X���ο\_{��%h����v�����+�o���u�"�,bg��e|��Y���@3�	�n9��+g@<
-Fih��0$�:
�SpN����V�u�[h%'ou��
����1Z�y

�a�݃Q���w�[�抳[���~��`
�E���,���8A�>Q�OT���7A�]�E�
(�p�<��`�i?�)��Q��Ȅ���B�ǫ��>��N�O�9&䣞^q�@)�(k�*��y�-��^?!j�����u�p�
�7����I:��

c
�uB./wT>������b�t!��s ��\P�����������YB�YBL�i)��GH�1��>BL\x�v�E������u
9�
��
��ik GL0���m+�\d�Vz*n
Ӓ���f~7/�����?���{	%�
<�`o
!�Y&�X�4�`����s�GMC��9����,��]��C���I�s��\��
-Lҁ��`�ݭ���
�u5�}�čw%��K~7Aoiӿ�a��������֬��ё�y.tw����N?<l�}�M�H��

0�ru �d����i�^���qN%�b{nx�~�<	��V�uϡc�
L��=��»���>ɯ&e�Z+�(�{�׶���[�JÂ:B���Pq��������~Y�Q�|�yx���+�ذ��kbj��r
���\s�?���
�j�H�'��4)�[�0�۝^xM6r�5���{H��
-��y���%����B�����l�^
�щN
��7NJ��D$���=�P[����Q��[F 1�}yח^���s��׳���p���i�U�E
-ԥ&C�JR��
Ԑ
w�J�V;��i���>M(�0
-\�̍���.%�.���$����4Z�iK>5È��q���������y�oʦ�sK
���}���J�^?9V�Pxz�
~�4F��Nࣷ�ˮ-����Ж��� �SBH<����iN�N_�}���a�&&
N 
X'�o�$�ؽAH�|}�s�ſ٥
�F/��N?�q��6]u0���U}k��;��;ӍM�z�

i��Y�����#e}�)	5��n��
b� ��<:���+a�_���*�b�SC{�EC��������e���G�F�u��e��e9��(3=(唚�k��
-�
cD�Sےs�{�q�j���p

�:�<RuGӘvv�3�����Fw���7�GAի�ī��vR����Ts���x�8��Rg��nB�o1q?}44��9V��g�MOΎR�~��~�9z^���̿�_s�y�:�2��g&}KK��=���F���6�����
-7�1���_�t������W�sF�n�v$���>�v���ߚ�i?���
���U[uXP�,��ٕ1,b�+��8��WRa�ӂ�S{#�X���{QpկaT�u ��"���7�T<�OC�^e���$�u+��[#��V���f�~p0��0�D:�i�S��
b�
E��
�r�]�/�x_zc�rc��M����� �&Xf�1���3�o�
����
�0����)4�,�]ݔ{�h�K�?S��x4#��1� `Z�m�K`q�y�LC�'����x�G�J�s�ǔu@�y���-�G��y��/5��K����E��q�uT��Fќy�o`Da�,vB��*
"��T�g`=JZ	��B�<1e���5��.̍�Ӈ}��� >�-��i~�սaz�� 1r�qG�TrIV_pV.*�i�����-Q���n�?g�P�)	�A�3�,6�f�e
����Egŀsf���ȕ��S��试���,���؏�xO��J�
��l��{�ݥW�F���>�~��
ȽHx�?�� �O�^�^��D.�*�"��8��*���(3�w��j�pᓢ����S۽����8)�>�*4O2�Ӱ�݁�� ��l���y���ѩ^���}��vz�n��+ì#���)ߏ�#�	��V/��ƛ��������O�_lL��)FD��e>�r��L���k� [...]
jY0�
�x�
4|���L���B�{J)�8����~�&�<��*MS�<em�1d|n�w��oe�ȯ,�q_69$����Vp�7�*�nt����,`|_�4���e�յw������jr�JW��
:1���
�?o��!�����"�b䓭q���O?^{1�Q1!f16�.Aƻ�0v)&0
" <����k]G�#/�G�
�8T�^��1OJ�{��$6a����yލ�
��}��s�f���a����Mѹ!z�W�)�O��E?�
f�L����g���(vPۻ�����K��g?^�Zj/�y�5���.V����f_M�v��j{�ٵ�����{�IB��M��IF�Wk�`��S�uKᩅWe�O��~m���a {n�
���)~P���8'﷽Qr��
z�
��Nԓ�&��k��/MC�٥.~f*���Ȩl�L�d
�����U���7y�ˮ�%�8�[�����h�Cc��9_]�����袦>��[�C��Q?��Anwࢾ
�$�l�#'n�W\5��\sL@·��,�'\U5&�l
-ʹ�'J¿a$\��hp�
��5��wN�c�0��Zek;
-.�ۊ~}�ͺ8LM���d�g��"�rz�k�^�х��f�~{8E�>�dA���w�-e�^B���ϯ�)��y�)%�/�_���GƂ���	+�%
mY����~P�G}�ؖqz���$1���ٿ_����7T��SӋ��'/�,�%oH���pJ7�C*�9��猲�~죦��}	����D��×���e-�����vb~�j���a�S1/��1����⛖A�#���iق��~��<Ѫ�vF(	���
���;��������񊈏
��/�
��81�>ρM<�
��4!�_��9��r.Zs���
����n�!&E9��Ř
������_`T���D�����
�]�B>n5�p�Y�)T�[I+�cS�;^�U
�VE
J �;��77{��xT
xP_KuHi9�#
<�Y,jz�
�O-"ye�r�����P�k]�׷�k�L#�$ۜ�3�Lߛ�Ǯ���]l�\��E�כ��+�e�����G�֎[���(�3V6'��ߏ
��i�A��7Mɑ����ǧ�O�r�u�?N1���b&�0D��f��9?���
l�C�/��	�Sd�p+�ޓ�̀= w>տ��Xx]��q��hFg�!G�^���
��[=�{�Qb�� 7C�uw�
�̯l [...]
-�{�1�[=Wֻ�����ߎyr8�G��3��u�A>�j�mŕ�7�74�!�7�cc6GI)}�
�ig
r��%�Ë��7:sYj�;m�˽e�@�4�����
d��s��G�
-o����7�����?�����]u{�����
z�*��?P�WO�h��A��9
���ͻ9E���v���_�Ę��5��*�~��|S��
�W�sO�sM��S���4�{���wʹ�k=�{�݈��)b.`�B�4)�1G�ug����'��&���5�� '���{��:ew�:�''�
�f�+�(�$&V۞wf{�Տ���AO&'��眝�&�����#tne����]^|�zh�!��ˮ��g���V��Fg��8�G
򾊃\ꬼf���Bsҵ�T�
!�2\r{�U����Y׬Ӥ��Y4_Wua����n.��bm]@��YŘd}k�5�˂�K�UwׇQ	
���=Q�Y|
��P
?lp�l�xlq��h��P�ԓ}^בx�8���k)�T��
sh��n
���0�VYԣ%*�`�@_�%����?Ti
&E[��^5q8EKuJ����@�F�s�4��Yj�����r�8JIZ~Uyi�]Օ��5M[�imC�� .�;/Ĭv�oo�C>�(���~8N��L��/
~�
�?��\7M��2L�ZvN�P��R;��n�y��
g�'HyK
��
�%�\s����o
%<��F�;aa�Uw�ޢ
U"��$�h�
1�`�	�9*,�
"Em 
,�(�u�}�m
�'�4%ŧfW
��

�c]�&�z#o�
yMQ_��$+��9~�>Y�*o��
�S��%�m�
ȥ^5��p�&F�T��|m�yy}�o�)r�y��j
Go��/47
�إΊ�}�����g6�`a�y�X��p
��s [...]
-wzr~_h��e�U�����';�!�
3���޻�̔$�%�=
-.2���8��d]{��aj�wS��_�-E�Um��Җ���īߌ�����7���[������y�Vߕ߰˨%�Wr����w��N3^5c��ot�\^|�}z����f?����Y%��KD��V11�-ayg�)���ح��'���H��&Σ&�h�"���bS2�Jl�O��;^�"��9X�%M�
z}�����4��`���;��Y﫺7�J�0�L�z(�fԠ�Ӱ>�J�%�5N�
�دm���c�������3
����'��|Z\�R?<�|�?H��
�4��B���_|e�����(ȑ3�P��-�
�<�®���	�b�u

���bt�ʻ�K�Wֻ�ל��2�=g�}�8���+%�3Gΰ�YzSz]�I�f�-,�X�,�II)�q�3�9��r�p���g�ڥ���
:�W���ɩ	�|�=<l�u��������q���D�[^���c�Y�?B�X�„�d��uʩ�6	&�#�e �L����lb��M��
"'5|�GN�=Y`‚�<� [...]
-t��P��ݞ����d�gc��9�,��t�<n�����,������{���k���

�¯!��+���O�)9���r*��NHP�T����V"(�h���
a#t/�.��g�_{[q��"��
��P�$��e/�2^�� !z�}�5][�1+���W9W�u䊣U.u�7-,�t8C+����aX�n_I$��ު[���_:�" �Tw�2/���s�Ne
�!e�n���ɿ��c�8��l��U�7pj��|��R\a��ZFMp�C^Z�=��[ ƪ���K���5
co���zW�/


�2��z�Z�z
yK�-�̈́���2��e�uՄ펠�,����p

�;�x�nN��Оyfo���O-�:5�i����U�
�<� �>��ӽH�I^���\�	�*�h�Qd��2��V�e ��)���\�e����vs�e�y�=wk���n)�y���诇믫/>���׃~�0�F��w
<��,6�:�|d�?����S�s
-6�)�Ad�!��/*
z瘥�BR@
2����b��#�H�<��6MJ�z.d��U����__�j����C>X��ҵ]��U��ԝ1RBh��[�(5���;�~䜡��xPˤ��2͇��c�V{	QYk�S��
�6	?o���5�|���v�i�R�6�G�����wJH�85�:FHvNSM���DM�y������ɹ
�OV����x�voeBPU��i�\0� �7%��UG��
�C� gW�K�V�(��&�8Z�Eg�����v��I���;|
<�G�,�A>�>;7-x�i�(�w��K
�]��.9^
��_�
-N�q���=�y��
��
kg���Љ��7Ư0O�ָ�y�n)�8��\_}��}��U�
1��������yb��2곁�ti�&	*�8�~
���
zK�P���.�W�
x�R�'��
,�s�O�be�>(,{�1ƃn��
��4��W%��_�M7O���/[��k\�EI�8�3�4�Z?lpY�S��5�*����G�t\�	`��V����=�����\kz��pI[5϶�qQ{#Uw�ߤ�d���m���i��m����r�Ĭ
�,��1|�c�W��N4��PO��	�U=e�~}����f�����+�Q\�o�^|�fBC��X��2�\-�K��-���)��!H�I����C����7��R��\Q6��*\A�kZ 1
��1Q߷A�}?�J��vۣԬ���w�_��g�G:�S�<r|�� �n/�~1���z76|V��.%f�\�_ŭ�+�E�)L��p՝��������8�H9@���/P7WzQ�YZ�KF���8U����g�G��
Yf�'+MM�9�
���#��0�Q@�*=R�HN����1����:���Q�����@C���3|s�"/��<��GG�2���\�2�4Ry�8Pvu����[rے��Ӌhs/��4/k�l�M�!E�c-�ڣĥo
_�����g����#��WpO-����"ᑁ���p�i��ŷYWկ2~5�-����"�Be��W�z�Q~����ph>

�ŧ�Ơ�]3������6
-&
.K[�"\r
ڣ棽*fEp��?^��ɩ�����,e�b[G躏c��c��r ��
ȗeʣ`�-���-���z4��i^څwU�_~Q|uw�2�6���/rI����=P+K}ԸP�{�|�CNL�L#@_��1N�,
-ʮlb�LpK�gU
����z��(+5�m��S
f�A��U���z�K�Jm���2\���k�o��9Y�@kviI%��w��aw�Zҩ����ͳ�L��QX���iɻC�x�$-
�|�A� �x�
yt,Hh���8&�`	�z�=]q�+EF��in�m3�
rf�w����(�6)6�4Zqs�}�o���nI#�#{!�L�"��h);c�\���y �Fm�G��z_yS՜wVِ�
亀VDޟ��,��_׽��m���S!�祗�0�)E�PzQ���a�m՝�z�u��ޗ�`�loq�8���
 ������o�;�V2��Z�V_u�����
/rϙ��	&ګ g��J��U�'fe��	V��4����/�"�K�i�)��� "�9�D�,��R\�
Ԓu���j*:�jH�~����8��Jw�-��R4p�.�V���t�� �9딶1�guCک��̋6ӯ�#���*Z
-N��w�=O�:
CFئб㰇c�G�Yj�uNP�|��z�J��MB���'4�|�$�4>w����v�y�dućU��ž�:�P�L�� wG��m����P�yW�a�
���L��\��� �Z���ˍS�$�,9/�����y8ǣ�rK.�!�
���;\�t�M�o�!�İN*���|��h��mo��q���a�fV����V6f�n+���Ij��������7��z�����j/��GIǣy�<�Gˣx�<�h�MN�.5��O1�Ϟ�0j>mp�7^
-	����S�1&(ܜh#��J��XYG�|<8���R}�����O{mb��@`QҊ�����f�C���v���
�Q*�bD��"٣'BN�k�A.؛�욗��M�NvkEf�$n]#ϥ	���*7Oß썖^wHPOjfY@ǩ�� �����;f�)T�jO������я@���lx�ձ��rFqh_K`��!���7��Qi�I.�8��uw�M�Q҈�
���u!o/�枞a&~-㧜	�yG
M�=q
 [...]
�?l��-�i�����Jۻ��yS��rJ�G�MpI1��IL<ȳ񖉪	)�H[O?�&�o��(^f�S5�}o쮾}
���2���
�f�y�_�yU��0)����ͣ�8�����lmw�	}0%,;���w�����Y��OMb|��D=l{�~w��t �G)q�#���Ί�=Zw���{�}��a�ÝAB�����.���N��:�����
Q����˻\dT�A
2�0s�2!�!cWm
U�0NT�3MB�mt�]���O�zfeh���	Z��
-���k����'.�D�:���^x�F/�UB-ٟ��k^��
N�
-�j.�*�%Z�ё���_d�7�TF��|��;[�V~w���W���#�p�(��$#�Mc�O���_M����W=�����~�c��𧆎�s�����D��b&�Z{
��P
�
}��!v֏�W�w�
-!%�R�
�[A)�
A�
 �4)Yv֥͋>l�|s���Rl^��&�:D
���]��
�x�}�
n
��(��n˻`�?5���s���E!�hY��#[���w��1O�_��n�|���s*}
�h����mW¯�
!�SB��[؝�A�3��R�,}8KL�/p	�7_����h�P���Z�?�Hs�q)�ԩᡷ�pI

��d���U
}��Ł���������	z��{ă�Aح��^������
R�������ZcRj2��T�e���{��>�z�Y���l�KK-�.ѐN
�"�&�?�5�8d���
GGy����z�ϭ��CK�C�̶H�12|���b?��W��_�
#��;P��Ҭf��8%�@LN���O����*K�E��]p�O<
��
`'o
P6�+üS�g�c W���&mNW?�w�_^�|`�6�M�*�_3M��Dz��;�︤��.i���i�8�y�?���J9����'ff�[+��E9��Џ<��,�&�/2)�6���IE��Z�f.|�=�y�أd6�}�F�EJ�;������=Z�&�fo�\��˸j���[�n͋W}�CV�;��D�`�+
�u���;V}0EN�"Fm
�cls�R����L�S|*
�.!�[��H�{7^&]�NU��((Y>U#שjm
�|�j-��?D.rI(�'ZRyPC)ܔ��Uu�8�(s�3K
��;6��k�\������j���
�Fj���n
@�57{���2����l3���U>��N}�ǵ���a|����CΧAV��xX�6~�.�׹���-��gօ��J��?�k����]���a�������� �?�jU�����A\�r'<�5˄����|zΫ���`1)"ެ��v煰�1v攰44k.�D�@�϶@�U3�t䲠�P��Wz'�̧yך_���S��%��z&0
��nS��͆�~

�j�Wî��Q��PpЛ}�G+�%��䟷JiN%������U��
-D�u&�P��:�����q�ԡ�B�:��dKTgR���#��
�
��'���:��} ��Nh=� |Y�S�
-��<�[ɇ[$�B�+w�]�5u+�WeS�y}���������МtB�i��}0��Y|St~N�)��%�+{�ew �U
Έ`�1a�S��D=>)��-��s�НzJў��F�S���i���
�Ӓl^�}�qH)9���bc&�1��n}8Q�
\h:5
��In���UL�7�W���RW:3.�Z�v�b�
-
B�V}{�-&:����&#O

�_G�w(qI��r�.u��
��
\n�s(��	>�p��IP��>Y�a|ZܫbT�vUܖ��N�u�2��Qf�����l�<9ïfUyD���n�%&Y$����i
�do���\cֵ|䯮Yx�뵂��:>8��C�(�B at q*�8�&j�?��(���㌈�V10^[�� #Q�yM�u�P&@oV��wg�/��No�%�<63����,����ə����պ��-~
�W��e���3���H���о������3��w�[�ֹ�S����8�CYM�U����Q2�jNu�����հ`N%
斑��u���@‚�tA
g�
�7w�͒�V�a�]��7{!��Z$t�ؤa7'�y�C�b����=A-Wt�F.���/�+�i#�|
-\�_���n��FY
�$�W��Z�̩��Б��Gn-���fm�����z��y�8ͫ�������u�>��Q�h�~w�]c���Tʡ��A�(o)��iC������ϛ��/�t�O^�e�,|�7^|ó�c��oo���2�~�o|��~���Mn�[�N���qk�H�J����RV��(9as�����yXTd�ԣ\�z�]ū�
E?\�]�!�
�rKvG�	k]�'fpܽ*�h�O
Ud�e
'�9f�Ef1!v�QlS�w�rt�WZGn�{�Se
A��
�޵Nc��J^�V?�y��`z����2Z��Y�#|\�e����L�q�
�1Tys�U�i�6�5�O�iE'�Zb��s��鞥�}\2�Қg��'�x����T���Y�/�1�j�6υz��<
M

e-֯� L3�V)"�<��l�{����d�<��Q�y�
�1>�-��5O@xdD��
X at U��k�;6�q��)fq�K�Rv�K����z8
�=�y�1?��tDL�<%�b�KF/:�B��g���r���W��n��n�s� �YgHy
��%&����2��C���GC.:^kz�]ln
-,�q�
�
�L0��¾���=��R�69�#f;���m��K)D��2�tM�u�&ѯgUby5�2�,!ů=��P�Q�L�U��;�~[������ͯ�k"����_T� �)ED�A���7���CeQ��V���ՙ���G���i� �����N������WK)q�zU��dU�=�&>3NӲ�!�o`�
�	�Gk<�w����i��T�uMϝ�:�KE�p���:f��-:�x�w��աoi�sK��E�7uX��Gaa�!���΂�Ƒ¸?���=����-���y�#�d�O��S��7Z�Ku��
-�
S�C!D�$�r�z�5MRN�y^Xu(��q��h��`U���S���њG��wG�1�Iz��0/�1ۈ	.�3�
l
-J6��8�$%�"�[fe&13�,&'Z&Џ|zJ�KC+<����
�����e�����+��5j�de�jˣ�U�z�H�(?֒�s5�#���5a��$��5��1��#5�'e
���N	2q�?�er�*FE�H�<)�6KH��Y���2T��y���Ta��?Y+7����\nye�b�
�d�
-�\$�����|^c�=*r�U��>֓��

�
�=�h�
�A�A��Z�?�Z_u�\��rl*�@^��
!>�L 

W= }��?G):�6��j!
xe�e��~�T�u�����
l�\��/�3-�?���S�GoͰ���)>mKӑ��!�����䭡򻲖�3֙��GK��uu�!ɷ �X���[�c�&�%�$
�C�V?������v߂�m��BB׃?j�~%
ꕓs\2|�i
-�=\���e���d���r�MJ)����W=��¥���F%%Oߏ
ߙ�

MM�z��w��Xkh>���D��	v��=��L+"ҥky\mj�fY)�Ɖʸ�e��fm����i����5Pusgq�Y�nS�J�Z�[C)�+�>�''�k[�b�<i��'
X��<��:�y˷"d�yX�4��"�e���<G�׾�^r�qa��ٟw������D�C|y�R�Ǯ@�|Ke�}��,������gc��
-j>��K��u*E at o�P�&4À	,�X��Z�M��
��*��|聘��=BM5�)�s��aҳ���0�<2t.ϥ]*>�!T;
�����*�4t�կ㡬�\��6j����5����-�9���A�*�v.�ؾE!)4ԫ!�;�1@k��
����]
 �4��6�q(�i4��y<��S�Kv�1�
J^�}�U���vP��#�M�E7�R��,��}��
-)�-���Fw�ii��l��"M3���J$�1l�q
�r�h�Q�7�.ޚ�D
���"�
<���SaR��*��z� ~�i>Y=o����B���#���q�3�v�OMbZ�K."
�[�H)����
-&�)gA��g�[^�T
��Y24'�2+@ �N=��V��Z�m
������r�&*���I'k�M�>ի���T�J����Q���z��u�X�zO��;�0�����y����G^��S��R|։�Y�yYH�yx��Z�=��l`
�!�
gW`S
�
�њ���n��/��6�<.ǩcׄf)��L�S��ڙF<ޙFG�@N?Z�{n�
PW<�!�lӫ�zsǧ-ϯ������(Y�9|���i��C�
-rŭ�U��/l���֎@�[��MJN��-�&���A����M=�E6·����
�Z?�ǫ
ġ��7�K�)�5'���
-75 �8��C))ߣ�V���0�>N׃��i.��P1��
eU�[�K?ҳ��8�#-���?�?�66
":�ԭA���Ir�]&���MLO�bh��
�>��
��_q���v99�)��Xҿl������4pk<*f)��"���f�6�r�)�9�Hi.-�y�UB�8��V���
Z6Ԯ�#�����y!�PJ�>�����Lb|�CF���3
3�";e�L���IR��pM��@�m���}������1�Rj�i���PraN-���v�Ԍ�����S�i���ce�vWq�
rv�u��m�Q2�rZ��.�:O�
���6f�7�i��u�dw
�Э$e� O�̲
����n9�jwz�8	s���leqP��}е�u\
��L�ž�:�[�G|ޠ�>�Ӡ�Z��M.��FC�W��^�!<�I�ş7�_}X�����'�ɒ�)H��H�C�
:�x�W[��j��!�#�J.EM�M�����[l��y�=�MB�s*���Rv�ɷ}��{.�گ �z��/�<ȶ����a�S�"o���{k
}\�垬Ջ
|ʧU*���[�K�G
��hh�SPK$���*���K<�k���i��k���3;��
�r��ԛC�EM�
-�r���\�)��c4�,�͓�;@���+j�0��jZIh
�
-N�YƯ
-��������ű��EWO6�ܣ

9��[�����(3`w�2

���dI�5N�Ҝ*�����M
ϧgT�g	I�bR��<5ۿ���e�7���bY��-0:گ�&�������91i�P�ȈYf1>)tO�]�I6MA
���\���l��<�
:z�����Hŭ�ER��Ur��u�Ȁ/�c�K������x�*��V`����2n�}�]
-޿�D����'
-v�Vo�=�4:ɯgB}ګoi��:^��M��@�	�	f�� .r�u���޲k�yf!�%����Rn�B���x�~95�9O-�R- �X�
$��U{���l-|sL���@�Z�C��l��	qhjq����
�tk��8Kʹ�}�%ݧ����b�{*�2F!�Z�W#�Xf���c�{�Z�
1ŧa�gh��q�3��
jx(�
϶�_���wHᏽ��8����2|�$�$ 
-sj C%8�*�
����Uf��~��)_v�%�E.mw
��P���h�����Ɠ���9�T՚���y�%Л�n���1�{ &����fYe'@ǃ����>T�����43��v/,�M�jo�of1*6�� ��‡e.�˦��e[(:�1J���I��Ϗ�&1.�:߯�WyT,�� xX�{�����e����ǫ�/O�lDPC���Љ���p�
�,��Xw���n������j�V'x5�h�6=�Hȵ�!b�$�����5����ޠ��wHp��=Ea۽a��?��^��rw����u�|�|*��|������D
��<�M�-^�*���Yz�PB���)�εf_ٛ�N9Zf �X�R�Z�#�2b�z$c�w��{�A� ��ʏ
�r��j�(�n�G��t K��"��_Ǭ�+�	�٪����ꓥ�
xJ:X�t����b�CJ���Ʈ�kk�
��{�9�������3����TB�}��f�����l�u���� �
t�g�uA�
�k
��k
�W�F��;�
�M
ɪ��Y&����hES�9�Xi�{
�a�&e���}Y-bK\[i�^f��ů�V��
�?��t�j�s���9v�]�����]��ɣ����Qц7�쳔����|�^�7��ϱJ
��g��z��<���
(�8#̣�BAͱ=�1,f�G)"�%�|��^�ǧ
#���я�cا
9P���	R�f��� �W�K��n:�*�J0��
�&�G�\o�`7��/;��
��Yd��Z�R��y��Z�fiY���Z�b�K�R�+���g�Җ��]�+��kx$ˌ��w�8�ʳωj�s���[��$�wA���3�ƞ^}
�<���ͷ�98ݫa�Mc�h�,.ݣ!仴���^�V�s|K��&	5�4MH<������E>ݫ��}jR�GE+
,p1Ǜ/'O֛_^oh��&|Z0}*^M@�������ܝ!�-��9Z�3L����&˭�� ;���Z�R�T`��w�C�HE���e�������R� [...]
�
q���z��2��u(h`���~� �ʩ�B�&��t��W�s��.�4�H[�<Z �$���5�
MMB�	�����,�]�����*�H��	�+����*�
x���P��.uë�#y5�Gr����/�rls�V��A���Jk�o�śC|>>�\
������������;�z?i
-n���jx萿��;f��j�s�`� '��*٫i}nS��c�����
k��.�|�Pӊ�@
��P	 �Y~UPWK
h���)D����_V:�~�*i���ַG+�un
�T�>}�^Ƒ�Z�VG�4�"�A��O���6���s���1����
�KF�q̓�f at -S��Qz�k���$f�m_0M��0��

�����2��]�sF15u�=:ܫ�@M��a��	|�SI+
-,3�����
ޅ�!ȓ����{/&��R�M�K��D�����~}s���
��1>��t~�ϧ�� �,s�������TР'��M6��l�6�;�+"~`��?Y�P1 <ֽ��:��~t��:EL0Ob�g(�~
���F]���8Gt�y���9D����{�m]v
�Y�Kɨ���k�k��s�3J�S�g��F1"ܫ�W��G
:��3
-��
��ͳj������}:B�GCL�z��J
�˪�w��'�$�����{eWl�Տ�JL��5�˦H�eK$<^�`� �fa�n):�#����c=�
б+��s>��V�Ԁ�	q��).5�ܩa��&�}���U	PA=���R0�}fyP�A
�d�wCw���RN�ud��L�W��:��*�
��6͇
N�S���^4��j��F����'�\��X��>�{�����T�=v��2O���864��^v����վ«[��mX쉁Z	x�xk����^ X�ɭ�V/wAnnt�]9��>�(��Ze�B�m�c6N���(.��4�O�o�8;-H��&�$ȁoMƙ�&|0��A=�RP
-���?{��
�u
�����
�{����$�&p&�m@���E�	�j`���:
�!ʀ�AaUl9v
'�m)�e٢
-)��"J�$J�D��*�y7��/�[e�3���3�
�3�D
N�k����kO���}��k
ť�}-��>���Z{z���s �N���]��|������mj_�wƑ�
���>���ܡ��~s휿=���wa�R���e�]?8T:�}E�'�{�Om^�qb��œ[���p]�w��d�_��Ѵ?���i_^�}u�O]ܷ�t����?�c�����`��;�K����tj�P˅=kW]Fz>��S[��m��C��ڡ�Ov��ǯ/�������+�@�}�ҞUϞ�9�sr���w�
��k��ko�\�����A�4��3[��vx��
���N����#�7u͸z�����}��t/:�-?�ȋ
������~~x����t�:�9??�>|i�c'��k.�����m��ǀ�μ�b��O?�
���Th��=�.m��zyg���;z�]�ݓ�p]�ubK�̳;�
?}e�ă?���;|���Y�w�?tqgn�Ч��
��ؿfŵ�kW��V�{������
��[����~�_ [...]
,����?��o�����.�*��6�rr��9'�wN=�Zۤ�[Z���~��r��^�hc�ѓ[�������������I�~:S��q�?\�{�Ԗg�9��}��My�W��Ϗ<�ܙ�9<G��.�Kve��m7�ž�e���_��_���[:
>�~��񫋌c��sf��{�
\6�ƻ��?ݼ�9��bl���?�3�1se7�;�޼l������xwhŵ����=mn�
���
�{g�~u�Ľ�N�������<��
���vn��#��߿�ٙy������t�}+�_��=��F�A^Y�_�ѷ��U��{׮:�c��/d�=?_z׾�;��߿[��x���~��~agq��������=��L?��o���9����8�!?�–���{z\���~iw�彃�.��wvkǃ��X�݋;�_��=xr�e���m�~�
��_-i8������W��t9|�9v
d���_���c��4�z~|řG_�����c�����D�y;�/��vӚ��l]����^Z�~2���k�v��O
^Wz��7Js�n_Y� �	�#󎾼�_��p��%�^��̏��{��'����w
u
�0��W�O��u0{nK�c���H�t�R�䦶�K�{���>���o�M��Kー�k&�yNmX�

q썾G?~m`և��g��9q���k�S��Ҥ����Y߼�+?�ھ�Om^�������{���܃'6,������&c��0�
-�;w>��ɭC�����;��#�
ya�ċ;
���s�)�[>\�����m�[��o������o
�u�um��^��~`yǙ--����1�®ޅgw���y��������r�{/.5>~y�yaW~�շ
-٫

�w�,�d��,�.�_Q:�����u�ث-��7�͗�w-�������
z���b�G[:���#��S�������w����
�_�w��-`7m[9��K��v�l�
�������쎕�G^l�Α���y��9���K�����O/�,
yy�������(u_�Wl=��b�����۷?�����'2�^g�j�V��շ���b��wW_=P꼴�}��
����.�
�ӟ=�s��Ħ£������Ŭ	�~��?������?j{֠,>�\�ݛ�]�S;{�^��]C�w��=�Fǔ뻗g>kh��ݥ�W��-9������Um�nx�
�)��һ/�_t�Ճ
�o
,,��`��=O=}nc�s���/l*ν�q(sv��G��崿߾V���?y������W�䯿���K�����_>��'_���K��￾g��k���n+=~
-� ����ސq��4�Z�}�7t=xj��ٗ��.��\��k����_����_�=�vy���]�<�ov~?���90�ԫ��^]6�������W�9��\��x���
��\��Ԫ^Y>l��k���=P��v�e�S;�/~��K�����끹����W<����x��
���/���ʾ�Ώ_��srC�������
-�_��
}���Q&������V�}����ynp�{��u����Z'm���?���w|�n�~f[Ϝ�;�
|�nٔ��/�wa�`���-��"��?��ׯ��C�Z6����m�K���~߾~��6u<xeO��k
-�o��<��k�������8��V�žU�ZQ���wṭ�œ�}��6���sГW�>��7������x�7��w~ے�N�1����=_�h��Ԗ��No���Љ��ӏono:��{�ŝ��_:��.�S;�����K�J����<��5'6v>t��`���
,���c�[?�u瑟M�?����������ޚ���9�����W:�u|����/��]pbC�����r>~%{��-�3���z������y�{������1���b�ؤ�^[`\��9�¾R˹���
.Ú�ݱ|��-����V\u�P����
������]vω7�
?�s���;O�˕�C}'@��>?����SA�/�����_-4�o^>�
O��m
j�
�B�K;ښ.�j��G�>��
���o\>��
��On�n��P���|X���HO˕�]s��[b}�’Ƴzg�{sp���;:�F��?��7�WO�ڑ�Ϲ���?;���~�@����%g�.�suO�c����l���So.�N�Y�zf��c��_)��������Ԥ?~��&�|����,\5xma	��3�
XY��o���������߿���}��_��g^_�zf����l_�qu���i7�.�z�)�ڎ�[b
�}��7��~v��qh�?]::�g��K��/�����W���}������[����Z����¼kK
���k?��wΙM�yWv�_����~=�.nmk��kV^޾���KK����w'�c;�R��~[|���5
�R�z�7����;���??P��?��>;��s���7z��m^�we�+��U��i����������Wv=������u~��}�[�-��c�|��-6���o
���o
}y��W��}� n��we��Ʈ�Q�\�޷�̆ǵ�^|��󳦯�?t���/�
Z�z���� [...]
--��~����S��Ō�~���~f����;���U��ƚ�}�7�֟
��Y�w����ʵ�h����bO�k:?{{�|��=����㉉qvC����
|vdŚ�[z�W���⾁�ώ�h��>�ܹ
�s���i��}��K�{���ٷ��=�ZaƵ��
-��S� w��]s��������[��������'_o���
�K���[x}Oq�՝�s��n����}���sioϜ#�k������:���5��Z���w��u�8�m���_g|��K�)�v�Y��
�{_]1�/.mC�R�vn}ߣ��??���O�o����t�]k.�]}~Kǔ�/4������'؏�����X������w?��o۽�9�?�3��{�ۯ�o���Ǿ������9��C+V^=0�s��)���^��o
�pqcaƍ��z��_�b��Yw�캶��?�v����Uj9�n�
G~�X�����^ٵ���;kxq�@��=����晫���g6�}��_>:a�Z�n���'���l�����?��k��Ã�����kV^_��Ξ���{��wE����h�����o��
-����8��>}-そ����kJ��_Y<�i�C����>�~e�вK�z������o
��ȋs&�8�1��������{����/n
Xte��]�S�m�����W
�8�j����7,�����%w��xk�����ٟ�tS��X�r����{
���{����G^���}������k��<y��P�̷n��Ԯ'�.~꟯
^��9��>ސ�����Žս��<�3�;
~)������~���E�v<���f��Oo]���� ���u��o��N��ן^q��_�
~�Ms��������_L�S�コwՊ�>��o����u���'�g������������9�v~��W2�y��V��_���
� �]����V���C��\�춖)�~��_m~��?=��s��G�z�ꡡ�CN��o���?��'�
,u^�]\����/2�>��0�:�E�~1��^����]?���G3[��#���7N>KG{ _�'E��>)"��I��O�H�}RDj�"Rk��Z�����'E��>)"��I��O�H�}RDj�"Rk��Z�����'E��>)"��I��O�H�}RDj�"Rk��Z�����'E��>)"��I��O�H�}RDj�"Rk��Z��� [...]
a�+��wu�n�,Ͱ
�҄Qߍ�n��
-[����v��.�H׍F��<�uL�6�"Cǻ<Ow<x
]]��b�먛[�S�h�Wǝ�����|�ysq�&��:fdJ0%=�d.�V�Q����=�


����
-��nZ/�E��O3�<�|��]�W����Mm�Vh���Т|�&��1���j�a�-��\�
�k1�"ۑ�j-�z�����zJ��?����w�6����f�� �	��i_:����k󭥎�_ܓ�ka(��o�2F
�|{G)1J��ǩв,�-M.�����&��"�F����c�g�Q��ВI]�
�%zR
�p�08�5#�Jr:\�xqV�4
��e �!���í1Y�/��w�z���S��&�
���^�F�J�OK�/��bny?LBrr��5��f���0Z��e]=+ߕK./C��8�")j=��ӳ��@�oqĐ��V���w%����$�
���d蕵Q@)�f%'�1�d�kx]�=ÐgPE�#Ne3
��l�b��#�M�VX�RÍ��I�7W̔
-����o5�i*t���*x�v����C�kJ��~b��
F�
X�q����H����l+f��V���3'0q�%�k�L,'S0�S0�
����Aj��q�V��X��1���u��ȴ�A��A��Lƭ�Ċ�|��F[����_�Z��B_�uJn ��U�
-o5
�L__>�3y��E;��&���!��Z�����\ix���5��jM��n
�O��{|�k�eso.�ߕ)�?�[���$'���#o�W�dS�����$�7�8��+k���m�lN��&E0tS*�� \�V��C[cO�w������BW�x�`ǰђ�ᷢZ�ǒ��|�N���S�r4\O�\j܍��@�K��o�)2���)5W`�=���L���`{��-�j=�P��I��h�4�R�2�j��uy��9�L�I�h �X�w~"b�"�2?�|u�!������fd���ƞ�I.��
d�"�b��ѝ+%睯�
-
;~t�!���(���\�=�39�L�j%�8^��7������rzZxT��G_��'M�B��b.�2q��v
�� �Z�
'Fd��W鍉w{3����<�.%�z\��%Fd�x����L������R��OHs��i"��
��B{ba^;n�8�n�F���]X�L�Je�H��㦐w܈�ā��"˒c4VX~����
�M���#�
-�q�6��
$.�
k�Z��?cE3%�h�h��ܵa�:��L�n+�h�AHN\5_�5~�OKb*3B,1FU
���m%N5udzzr]3s]�l5q���#��c��D��d��QSGS�}�]�l�;�S���
{:�;�J�N

�R��Ey���X�Z���>�U}M�9}K�_��kx-NJ%ބ��&�(��X�Z���"$�cT��^�}�#��V����⮶|WW5�k]���m�Bwrd���
�OI��}��Q؝ғ�$.��f��S
�
�7�|mC�`fE�i^����|��ۈ�qj��ݒ�8���'�l/c�~�?!���F!�ѓX�g������k@��n�ݤG���A.�"�
,�Skk���b��F�3��仫 �۴Gel��kpӲ����l&9Fc%$���|������~�b<T��m���$�-9�
-g��p&9FcE7��™����(����j�pf�(��+�I�Q�'R�™�p��t��+��B\Ժ(��3�W�p&�Z�K|L�T�
�.$�]�Lr�j�ޫ�™��";�?U�i�2d��r
7+���.]��ۯd�����aܴ���В)ԽeIu�/�&��iH
.
#͒�e���34Z"����-�|����-1�|K�[*�Ɣ|����|K�[���
j*�R�V�tK��T���-�n�M��FK�K��3!���^�0e�*���*3Qb�S&J�(�!Z���1ڏUQo�c�Ͳ��i[3�C��]�K�ۏ9��`1�]n���I���F��q���N.I�I���{�����$�L��M\n��h6q������=�

d��\�4�
-��c�%~�>Qh���j���D�?'����ƀ��Mx��S�8ϔl�����]��j}�@�#R��
N�o����j\�e
ݽ�>0���#�ƞ�n��v��I��X�
UZ
�.��:�c�9�$�v��
"b��V��:��
C����Gyq�]���`����*��H��/ut�J�ͷ��*
;�[��t�-�#�?���4�\)�\]��4���G��
�4�\����s�
�&�
��&Ve��9��4��o=�4Vbai�9�9��BJ�D��6�3����v�ʭ�����\S�l��R"v_�����
�Sے��5Պ\WWa0)6]�����!��pc�mı��0�Tr�h݆.˵�-�a.=�7
��!�/��k�4���F+�����b.�3
��D�8�^�8�/t�J��։�b�g�dt�Kt_�)�&�gV��KÜ\u������\�RU (pǨE����oF�7ʵ3S�Mi�*x
2@�`To.
��x�P/(�*6�G!�_-�U���7��_5���)4��x�K)~�M;i0'
���4��s�`N�)�0t��
١�N̉n�I�9c!�3�nӻ�=25S�_c745.��߂[\��������
5����˃j^.$o������P�-��w}���
]�ҌL~�����8��'mˑ���Dk]��
�jM�V+�k]����Vja��V�
-
/*t�T�}iW�[��a�t��j�~�ّi-
~��
J�	S'qo�t��hqR��@[�FK��4�Ժ,(����JHP�\kURn�H��d7�2���(J��d_)�֩t
;
��8#�
;�:q5���6!)��[�(��W�|��H�QG���,��L����mh�<¸4�VbRLn珆�_
&�MD�c���4�1&�
;
Ժ���ړ�?������G�*�4�Q�r=
��1���9֥LeC�1��V�dK��i�|�m"|s�5Vo�����]~Z2}��s��s=���u�G0{�J�F����R��
&��R��Y��*�����l�j؞�����U��e�0qLr��D�1J�i���KU胶b�;9:t񈣓v�J�T�M���%����K7G/m�t;e~�S�J��MaPI�)�|�"I���-�] ��l�q������q/7�2
<n°�6�Ъ�(�B������q�0;��@%Zrb��:��x��*�RB�m�%0�q���q���5c-�,w���dʦ>`����[��^`�O,��z����>M����c�z�㷐-q���
�M70��n`��n`��n`��&kܹ�U`����
u7pn���^�$d5�6���
��q����H�cW��:T�բV=���F�`t$�������q����R��޸�"Ӿ�~!#]]ͱ�c�W�B��M��.��x��[�2�Ή�
*�f��Ҋ�����Vt%OTȫG����h�=��C���z�:�J��Q�#

a����i�m�c'�]+b/qG_�-����f��E��F>Μ��惒�
-=t2}rS<z_��Ҭ��
ݓz� .�
Ul�����!�� �mđ��񱢎�=E}���э��"�2��_E*ҿ~ė�Nܝ)��T�
�1�x�8�nF��Ԛ�'M�\MR�6u
��r�Y�ݱg�%�K�N����Г��@��X��k�V`��Gr\��!8�
A���g
nc}h͈��zc�Sj<�6�i�c�z�Uַ �k]㎤2���4�~�CF5/k���t�6"ä烈���ȸ,tM�wsepu�Q1K32��bcO�$g�az��D2�|��;W���
-�u����hr�����Ե�A�/L�AGE�&�
gt섪�C%k�2��*k�,����#���i�7½�DBm[�㿩��=�/i磴��hH��
<*qo�� ߫��Z�~��}�X�Aߵ^��U��C��MߒKEu�(��]���
X��c
Z�y`�R��9�!�_R�=EF$�3�8M�ۄn_s�Q�c�
ǭ�Z�,�6fk]0`D�j�Ht/N
k43�n,1R�}�c�����[�R
|��j\�ym�����Z����:�2-��x,�<E}���>��HY��k�ߓ}l�	�qGl�N�V�� �Rr}rӿ*�m�(��?�]f3=}m�O��
��],�
4�;n,ئ�\#b����4r���j�I]]�;�rbZz
��1��V&=�kK��i���B���%�
-=3������s�������3L����-���;
�[@��Y��O���
�\]]�d�
-��a��
@��f������V����!=W7�Ѩy�[�]��\��!�>���kȿ��|gOy<��FM��z��q�[���kЭFG7��v��y�chZ������_��(LM�U�g�ϧ�l�v��F�s4��{�������\M��hY���u\��	�h7�ªo0=�rᙺ�hh���p�9z�i��gX���6>�0

�n6��_�:F}
������鍺c;6N��h�8y:��p�z�it,���,�~N

�!�5�Qz��Oa����Q�MXf���,^#�%��� �^�s����o�	��|5
�.�F!Lߣٖi�dž�8�R�����:L,.�Ө�:��p�u@@�	���4x �.�x�gZp
a��
���
! � � 1i�p��8>��\
k	ˀ7����	��(?�%�a�
ׄ�p-�4q�c[6>��
��4
�G�Y"\�vq���PG
�
���Hd�|8qHS@>0
-X8��1�y����zۚf%�.���&4"-a	�@�<)t��`Z��s�M f��Z��� ٘B���7y\
 ���qq�F
-L5P��9 5�� �=�a����
�̡�
-Кf  ��4<\���q�L�
�
�\� ��q-f at a���=iM ��p��A�
\�����2�A$aY-:L���h@��"��ZU����R ��#H��
� ��(k`D��! ���aeL��cښg� 9!Ɓ���D��F��� �W3x�e{�,@�5��TG��MC��[0˸v@�� �aJ����Mdo��u���R_��_L�@k�1L�F�{&��,z1̄nkD�p3��
d˒U�k����L�%18��@�
�d4�=B<OCl��5Jr�+����д˓dK��?�:C�
~]d�7Yqx�G4�pLD�&��Ȳ��F~�Um�#�(�$�{���H at xH�(
�sP/�:D)d�X�)4$�:��V�O7lW0j��

�
h�:O�pq
b�g�*�O|#3
�a���H+�� ���@�FԇRX�
�2rN���α�ɛ	D�Os�M b�@d�oF��.�t����`� 
Un��dԌ�V�p:/
����I�E��	��h�H�h �(ju���
�I��i�2<�p�#prЈ��;
�8"Z(x <�%	��꺅#�5I ��ԧ�a��&�
-ou
B�E2�N=>
-`.�
-&�d��s����:�Y��,ZU�
I�r\W�p��p���G��Fg��/+4��
P� ��XK1�*ftE-�,
�
�r�F$`N
�o�UE}����9 FI˴��h)ta�\��
����1
�J="Cۆ���X���+$B
8!`� 	 �4
���4���ṭ�	�NV
,A,4���Њ��&�H��
�LF�+<|��Ѽ�$1����Yq�*�hl�#+��i(.o�Ⱦhh�xt�Nd7�a�͊N�'���$�:��
-�+(�FX!���j���hIL�� �P�\s�	�%�g@�[�`A�Iv��B��YA��x�+���`�Kuh�{< 
{6[!D�
�#�|��A�@�m� ��B؀8x*0L�-.
-#�m牔;"8��AS����D���^�6:Rڤo `��7��ن�1�
B�jش��Ij��D
-=�Rd �Fp at J�y9u2�M] J�TDق�
H�^Gz3l97D���� �� C��NO�m�$��UL�AGq푾�*��M�
L
�/��`ź�3
40�(�D�h֠7f�Yjn�H��� �$�,E�A�g��Gv�A�f�X���o�P�����3��iW'�Oxl:X�F�<����T�v�a�w#��+]�D�d�ۮ��<J����љ�����@�q%�ä�����xDp5��z��F�#�k����:t�,�5j�z��6$�&
- Bo҉��{�7
-��u,�8`�@B��X3l2�,�J�9�����[M4�
K
-� B̨N�#cᙺ)=��f�i
�W� �2���p
��	� ��
V�B�� [���@�
-�%{�$�m��b���2�4҈�
���2�mJ�߳0��n�:it6o����@,��^b�X#:*�R$��M�
�.��!��1V�]6�K
f��"�IR��	&���
�
(vQ����L�"�
~�`�rK#�
~�@Rs�$
i�#'bxc<S�tp�P0�� ��њR�a�x��&Ă����a�d/��$�#X~���	�N-�?�)tvktt
0B����у�
�L>���+���O
E*
A�
��{�[43`A"�3�	�V
9΄��;A�jG'l�fHwM
y�U0�Sk�vɩ��q��
9]�0
�uc(��e�E	pv�5$�C�BIǠ��%
-��&�A���k{��G��08��P��<������`a�%�
�ʲ<3t���`�5
i����5r�t
	�.�	��ʿ�Ê1;T����h$Y�^O
�s5��W��$�A��q�q�K��y�
���QF�&����p8�c�IBsMv�E����р�9GVEyK!<�ڄ`
j�T�;H�	�Gԗ��Z&�arl. 
���Pc1�x
֓��8�ĭC�P��”WV����w�2M
-й�#c|ȅ _o~
�e�C  �
r�m�
k�ق�0�F��%Qh��@Yh�L�A��@�tF�1�
�"!�B���k
�l]l>b3��l]�x<L

-�g���#K2I���s��ע�&B��2�CCQҁ�H5e�Gb��M�;����7�=h}�{���FUA� #>.,!�)ƟP!��! G(�
-dα
�����,21 G!�Դp
H��+F=Mu1k�L�!
����X�:զb_H�@�$H.���杊e�%쒇�
�!z��5�F��рu,�MRM�Â
t���Q5��A4ckuS�+�+��B��+�l�͕�ձ�vs��w88>�JYΕA�2Rb���{u�t����h 
-p]4u��{�0�؏V79�n$ӌFǿM�� ��]��V�M��,n.ϊ�d�]�3@ˣ��OaN5�3J��Л��!�=*
��"��B[l.��	�JIX�փI�qĄ(�a%H��|�B�0"ϊ&��M�%�?�����[P암�F��C\�|6	��	��F5H��� R�(�A
A�'s	-6�F�.�.!��JR�@�͵8�'Ȋ�{

-�������� �9�A��l9ryԋPHQ
��!���
kQ����d��|�=&�@�t
.
��oFk��{t
���Xv�$����h�i��
-��|3)��\J4M�R
-Y�ژ�
��8P�]� �$Br�d�h�%� c�T�F!+�T"5p���(�5W���t
�UʑE�h2R��V���@
y��X ��4�n�e@)
åy�)d�'�&����ݴY
E�Uu�Z��W$ɔ�u���8��
T�V�tO���ht�e��~�
��i�

-{"�j�M��
�c%��io�K��)a!S�������xr,��i���	��0����J�*�3'2��� r���,�BH�8h� h,�2ހ�
-
��98nA�yx��"͔� ^�2(���,Z�
T8Tт OC"���Z��"��W-���YT�0a�d�`
�k�E`�=���@q%=��1�
�D%kLYG���(��ˣ�˙���"�ҹHE�0}
gJFg&>{�9��J�#ڰ� �)r����:xL��,
Ŕ#�t��H�������	��W�
��������q:�8�R�$�*7�ő-����j@�,�
W�aS�����w>eO-��ܰ���5���de!��v
��8m	�@	g4s���ɒ�F4M�B�+��)�!ڔb5�<[Wa~�s��,%;L!��
�F1[,%�,��<A,.?@��f�V^�hRv��B�6�ލ%I��\e�H��
-
-hzRl=o���e@�Q�ql��FZ��\	-�) 
��Q[Tœ��(�+�	�nV𕩡���*L{M4�5	[�j����VB��v�n�X����ٺ
-I�X�;�
-�RZDΊ�v���!oŲ8��&��0��D�#rCq�I`Ɗ��*T��j�)�l]<o
OmWH�����h"Hq
-�=([W!�^!'��7U��G3�u��do4#̳IF�֕�ڮ4 &\L�D�H�5���@f,�KO�n���R��L��)�Q �OW:���%�C�s��?��
-�x����(�'ȃ�%5�
f��b `0�pZ�,M�L�R��A#�\O�H���I����j��!���X��L��x�?�t۳_8��鑅��UlE�u��%��:+�H�=���$�Y@`.�
�A̖h�{ƗPJg6 ��6�P!b�
���ўC��i�/n�,�02I�h��8�^�_�QC�|[�|r:�ަ�s�(L/Ö��y�IX�儧G^�
{^��hq�
�8.��_
5���t�
�1i�S� ��3gP�@&�c��vQ��I�;T�����X盈@

��8
KT�MN�A�	*�ą^��Ƥ�T���QފtVd^Y���>�8�� 
�
�
��� �]&1�P���F�`su
-�M�����`�.ψ�oDj<x�*�`��C�Q�A�(��R]phU=�,H�*LL�>�HTy��
X:296
Uӌ��e�j���0
�֍���9�8��L��„�T�8#X����Ŗ�A��S}���#,�%���H���HiF�x#R��K�'e��H��Y5G�9\&B�M�,i4Xv�R�G`�
s���簵�Q��
�\��3����
!CN���c
�81����P�¢(i���Tm�ÈTJ
�Ek)b��*r
�줺 �M��# ��mI6.k5�V��
�
�Y)p�1�Ф܍�"I�ux�vli��r3 0%���8Ǧ4i*x�NzҦ,3�"���B�gY��jF֛ɕ���H
-�L{�H��DJ}b�@�%��� 3��
-���T�K��S��]��a.�P�4��u�-Tt1�,��\i�I�k�[�ъ�6���X]L�t�癹��]BH�$���'Q㕠�.�M&G��T}��
t]ЦF��x�dhc�DC8S�4Dz32 (
����b�q
]��� �d�X�A�@tMH�Rbb Kc
���I�"�q�|1�
Lˍ���.��p���1�U�f
-�i�B�B4��2�LQ̐{�A�X0�NѭXME;#e?� ��CRH(�#D��rt��� �b�
S��@
+�؇�3$2�]�]S��$�d.��ƺe
-�#�(���W�MW��(Vf+D�+e�AY�[�Ӝ�������C�	k�iۡ,��܋�3.�h�š����W �����\�T��J�`
-�@*��J\.Kc�
�tƄ��� �Ǒ

��c!6�l]�QG�
-���'�	���ɔ� ,��

1nG�h���ȕ
-��A���q
���Be`_PAUQ
Nj�<��h���d>�����rr�g��7���TSu�%m4��m�LL�~ـ)�	 i)Fd��
-O�T*�T�E�΢eiY�B�)rh�.�H�񥻱B�l]�R�h�X���)Vn�ˁ�Q0��ir8����]-�"G�l�!Zi��
]��Ja�
-����R�2��X��ڴl]�z-Z�.~�b	�K��P)!�h��7
ޚ�Z��P�4)mB�z`�X-դ��բ�l�z7ZG�\)��pğH#��&
�W���B���(�<-Y�x�I4e��)�p_��%Z-�K�b��
�6L�c�
-� �QTي)�!Mu��klR\
':<���>�Y�,� ���L�jG��,�\��tlV*(�����g������"�rM�I�I�#�:%8-��uc��3� �ip.�h0J�
-�
-�r�X�C�&"
�&+ft���-U. at Abݠ�<N	c�:E8-�����H�y�< Z?P��@p���
-��3կax��ı�"
�{ֿ�_��O�S�)|��få8�nq�zU�����*�l]��B�^�&
��m�*�b�_Y,?�8�!�[�
F#@��D�q�X�N��'RdC�
�B�X�N��py�#����=69�T��V
 �
$_��S�pK�ĥR
L�j�xEM�V"[W��"^u�̠�j� �	��s�d>����k�yj6[��,�v"ӟRL�YR��D��$u,���@���
��uM&�ؓ��7�x4�(�$�8�I�UJŅ���ƒ	S�Ą���ܡ�B�nG�
F�I�ƣ�2k����lC,%KZ���2�g!�N4F�mS�(��[��h�8
T�{ ���t�r�
�
,����A+DJ�!3���%
�;��ZҼ�F��H�)��DQ��#��
-��ph��ˣ��#w�PX ��C��V�'�C!�9�XG\o���w����Ķ�d뢎oW]E�8�@Ǽl���'�P*��] �!ѹ
��Q74⊡؎�v��	�>����Q�y�:h��]��g1`�d�"��cիb;S&[�fi�.n�F
۰UGBh+Et�E������
��
T�L�� �S�%
�k�������훳U �~R/|���C[l|�-�Q�� �2�R�c��G�vH
�ʠ1 HIA�2KXO<b���E�
��p'�*��̦�96tQ�̬`O�EA��E~��!����K8G\-"�f*�j�tK�6H@�(*
��6S��J�* �c"Uۼ�A at t.�c�\�Dxs�_�e��'�e�iH'�@���X�g0�&�QM%_E�L#Js��P��X$l��j�����b�/F�8���x�l�Q�������6�5V(pܓ����<�x��싫�S��!��������%�3��\C�i}�pQ<"�p��&�&ܖ�Y0NG&)��s��Fʑ&W�6
�WɝKQBEWl6�
-�Z���;7W���
ʨ
�ZƀmJ
 J��p�H�8}�@
���d�-iK�)O���
�c�_�Eר�� �
�m
A�aP�����8.���H��� 5`��F�����R7t��ZC����П 0�p�n觙*k��,��ao
�\gy�!yJ=��'@Ap3���)
��
�B-��Aj���"8e١�
������F�=�$�_Ȇn._��j�`�yR��X
��_�?���;��
��a�D�A@�%�b�f��դ�\��S�!�TS��5�_.}�4�"��S���n�
�=A���$��e�#�(,4�y
 ��
�����7��сӹޞRޞ�-"��C��W�J����-�]�?��I�o._翥��iLB��X�nV,b���0��h\�Q#ޓ��-U oU��74Wxk3W9[��t��s���bA����eB�Ie؂x-W��B����W4��*�b��X!Ѡ�p�3Vi�������T�&U�A�!�3p��J�g)�F9
n�b
T�a�謊2���t^YaZC�LiԆn����o�a`n�㉼����
a��"��W�T�P�h3cD��}�"����
i:�N��P('��蓊T5��R.)Ѿ�i��hd���e���w��VUddr�*�(jB���:��5��C_ȕ,��}!��}�߫.�_�\��Ԏ�#��AL�)#�Y�ٿ	��CځAG��w�k
������
n8�j��2J�a��
<��˄�����B�}-�,%�ԍ�U��+���$O�G��&,�kR�j�;a�D�߿��6��Vh��PWWw�'Sʵ�O/fz�s���]��_�
U���Q1���KԐ��M�``*��%���8�1X�_����\HHC�ֆ��@������'���<L�˩%(��J����q��
lU�Z�^̴�s=�zS�I��
遳�����Đ���� ���� �K:����!��ׂ9dc�,F�FB`�C����u����C�1���Cބ��_�����薇p�'g/�ll�`a>ͳ���(���� Z�
-!#>�6pD��6
�rС�i�(��oð"U�X�� �m��n�E6���`1٘ߎ���Y-��ŗyTA��3\-��'O�
-r���\y��R�m�#a���_��!A��
z��y�Q%C2�`$Tw����Lg�Rp>_iԯ
�̞
I��A1hCµ�2Xh&T\xW+��qhCd��[y��!z`TL�
p#<*�*��L`��$е��0��Eh��Y`p»�[{��=:��z-�=��
V�P�
ԴgU�\,�\��#,�

}�RBn@����C���w���޵I�q����H�_G6AT��R!h|�_������T���]C��%���`qN�
�9�Z��4��ri
?��T��qz�
ѻ*��!6���X�4�}O���2��..�*H���i�
�A��:��V�5Յī/f�7WzCl
1��)�V3gz(�h�5/�����%͠]c�ʖ��Pk��G��!�3��:��JL�r@��6aI%����Q���֐���E’[��	KzP�N���w�8:�N��n�ȔJ�b��C��bi�<�e����ɅBW��
<���|+��S}�aF������?�˖2=�]_
e�2P[`l�����%�?q5n.���fs{\**	 ���[Rr	� ���lzjC��uF���Y>�� T�!!�X�*?6��(�I�w�zb���,��1D��
ݢd^��
-�$m�c��b
RӢRy�&�*<saPOt��h"�e�򨁉|R���l�vIb��f�E�0���w��b`�i�h���
�]ո�&o��=�N��/�hȂz�a-�	X�%F�~K/3,��L��Q
+���<ʖb��$����0�e6��m0������i��� ����ޔ��o���W��M��zx������ѿ�w���n`ʢ�ȗ3��sj�H �ȄP�)&�A�Mu�;�UY|�a��qO��=�aU<Wcw�ZR��
����h���U5-"$���t�n�<�����l�IΆ���ɽ�1V�(4b
_�{�a��4�ESD��&�����p

�
.����	��a��C�

�˪�=&Up3�n��J�$]T��,��(�_��
J��p��A���g8E�a at C���h�� �2%��wr�R���
-BG���u�!�L Hp@
-@��S�U�Iit�+���4ɸ�U�����iT}@cV�k�������0���A��Q�4k@���)�n����U
�ʰ�JF��
���uǪI���|KK�g8W�1��#��~�T��U\e�x�Xg��T�ԷA�
�+ȹu�
-���n4i#ƍ
�w�Q`E`��q����\
{M�;�����IF.��
��1d/T,AB�i�2�x�u�Z�
�q1���]��qHPS?�y���`��}D����Z�8w����-E��(=��	*�c4xw�fa��j^h;w��YsM�-�r��TX7�]�iS-�,葩A��-!Զ
-O�1�K&e
W��*�2�M�|��l�i��_nk��\
,��rP��zH��ꆧs-��ke�	��-j\0�������1h"��
�ez
�Q/�f�I��,�n$���b��TN�w���c�
�#��1B}���~wL��|(�̎LonrW�����)�Xw<򅗔y�I��/��)e;f&��
-Eu-���0y�l����B)��
���hx�����T�Mg�tp�KG h�Mj����c�U��������I؆�6��i�r�0�|B�܎�$��������
endstream
endobj
311 0 obj
<</Length 65536>>stream
-�)@`TP�
�\<' 랩�.��q���� 
l��{�%a���|:�����1��2�@�L{�u�z�ZN܊������I�Ű�'N
-�ҧ�����
�v�P�%�^C u�=\0tA���D�
���x�
6t��~ܗ�'*1#َK=^X]ᬑ
��|B)5W�

K�\���{�Yq�n|,5ڟEM������"���%��'{�f��x߅-y��
wrQ�6J&E�V��܎�O'��C���ڴH.r,�s��@.vM�}�
�I'7SE}�𐉰�A��w5�X*�9>d{��V<.��m L>��4�����f��s�vN#Q��WP(n���e��"#H#��qo��S�e��N��`	+7��3@H�k�E4���,��M<��ATL�t܊i�iO�E֑n	:/���%�\��u����
�M�������i�8�����3j��
X��M�j���yUp��I��@O������h(Q��J�z'�L� �)�q�K�&Ń��ܫ����7ؓ�8�'�&����R;Zj4�bwp�tK'6��xxx"�XD�:=���q7e��\I���
-��7�괈�LWV��,��v<�dL�:c���iO���p�'ֽ��&�9M��%�<fQWM�t>PM�ۍi�La�����C�Hȉ�e��ZĞp����@,�)��`
I5�>DžBYl�Vw���<>�
�h	��
O��'y���j
O�ĺ�%k��0��m�|5
!�
ͤM
�q�,
'�7r\����Y��]��<D�ֹ뀆U�(���'�l����l�����Ҝ�'d���I�O�
�u�B�ݻ����X����"V�mn+���,8m�)��{�(�/��1�B�1<�G����p+pt%q[
-�%l!�np�o�`T
Gh��.�.�5���n��K���!1�Kt����y�C�C����� ��<�m�ڎq� �t>b���1%�a9���H�[tF���0��I��i��=�
�a��A�#�Mc��Q��F:t��6��{q��GF�R�Ig�Q�[�D"�5�c�KF�iѦJ
��:�8��
-n(���G��&K�'
��4�#���db#<���([
-�E
-�zԮF
�{���V�.
۰�
 ��:B��1ꤑx{ ��wy˙�;
$)��;��rL�,��S	�d�X��Sa�R�[(
�
'3
-c��K�Nq�L�/�8��#�{"h�O
�'��C�\1�CR��?�u��aR)�͑�0��W��
QJT*.O���Χ��"�#���V�X�D�o�\à-������r���nSDL�i3܊���:�J:�A�B�z
-]E�P�@�բ;
���N�mAT
TÛ�m��0ٲk�'-q�L�À��P��^K��-H����A�rx���:�r�8���֩6Х,>���!�
�M�Ŧ���u�ᨽ� 5�S��M5s�-�恤��=m�涌����O��=Ǖf���Hc5Ӣ�
��<UR�(�+��)��vgn��W���~���^�x��i��S(�K�
I->��LO��S���:l��Tӓ�� �;�OCpt6�,�BΎ uJǗ8�
I��chҭ��QH���@��%�4�
�g�]������
��JG�ד[r�KAPP�0�6�(�I�؂ǥ��8��pQ%xt���N���T���थ`��*\M�6����w,���)}N��Ԍ��}$4`=&Gj����<I�v�lD��U<��<O
�I�Sbl8#i��	�9�}
�
gl@��R ��1�X�|w��x;)	8ݓ
�Q��J�֬����_,KV����+����6۬G
��,�
-�gs��'�fE��6LvD��;��1E���$HՕ�$RP͘�
� 2���k�0�*�{��ؗ��w�����l�MSg�P���� �
<y�˥-��]�~�o�Z2a9��S�]�8
{�	��M�
Ċ�jؖ�+���w��s�B�D2�q (�	L���w��ʽ�M�
�r�B�[�G�fNڄ��:앺ض @��P�ɦ��J�8�V>Q���r�yd�{���2-��L��H�H��]��}]��
��a+N��dL"8�uY��e��^O2S��
���<��-��A�ѩm�E;�5���ѩC�%�[��OX~:�Ԡj3�E���tGĈ��b���n1zl�Б�Թ�P����8"#5�dj�~=�
b�ڠ��
-�jX-i����L���o�����D�;��Bԥ�OMb��p�=�=�*�<7 �����#z #�C�
m����NY��r�
�]-�
�7J�Bjy��äP at Q�G����
Ƕ(p�,�
-i<���l�o� �GM���v[Y�3��W-:sV�b�!\�B�aĄ����GHgב�
t�y�b�|���(c�ھ��`��R��Sty,;nk`��	��:��L�<�d�.��ʃ�(`a�LJ�/Vϸy	�9»���[aM"9�C�e1������]*
��1��]�d+ �sD���3Ƙ�S�I��=;3/S����j���yԷ���*��})��s\�z���� �\
j4EzF�����1nj]M�4���cv)D��Y��A1z���]��A7���4A�w��1W�)�*���5�͉E|D������ly~�$��.Y������9�a�`#���ͫ�
��lS�
��h,qh� pp���R��,�@��I9X/���iZ�<U�{�Ӌ
�A[X�́z��X�	�T9*��fn���	v6b�mRdL
�~ylO��88?LP}R[)WT��/)��n*8�n�ؼJ8�rsP�`<%����U�w�O�;���1�/u�{
3�����;�<Y��t���{�L���~m�_�����E=T���w,x
F�W*�d-�2�y o�d�>(
|&��=�8۠�Wv��_�SQ�M
ۨӃ��%z��/�4� �u�
z0յ��}�����?ؠ�1�V���F��`�
l����}�z������zy�����{��?�f�🫗�.�0'�m��:��򺕗���2�]|���_.�1��6�=|��'T��X~��B��3)#��O�0����P�����W��.yA�'�G�?vSf�Y��>x�/�
�N*��t
��L��W�
�!O�@ ���H��Qن��۵2��~�՝B��=B(���5S
_��z~�-!dީQ�;�1��
-�N���\;�)��!�%o0Ѵs�FC!Gj�ň����)E���d3Hw�w*�W��2�C�4l�����P'R"D�vM��I ���r�:n��SJ��H�Z
���%������%e�tӿաD(M27DV(�l�Q ��Q�cshZ�*��|+y��
�r-IO�����
�%�4QSN���u�2�n�>vV�2ZIz>��xȗ�3Nd
�;-l��3ٙ2��f�.�2���Ny��-�
->��5eU�I
�"+Q���)l!���n�]PT���[����uسP�+
-tV'C��%�8
��@�|K �_h
�ZR���lT�����	Mq"7yE�
���)��@�S��j��U%�>ȧ|SD��ӧ�i|�2q��8Cm�3�J���A�,C��h�?I>P
�ES�k	O�Ӕ+#ܲ�m9�$R�QM�U�e��u���'ɓ�Km�x�m�4� �jQD���4� P�~��K[�%]R��)*ԉ���Yre�=:9�n���xI$|l�Nޝ�� �&AŒ�hQ�M>�`9��~���b^�.��b�SB�
�<�
K�3�2�f�2lA/���/�)G�
-H�)��:�Qr�QO��cJ�oQ��
:� ���%�W�UC�/�������twp�
�x��.	�:(��ڗ!�ـujF	�,pH
9�: �dx��j�I� ��`�+�PL
-z�n�&����
�����U吕D��>��x����ć	����ZiR@`�+��!
-
��Q��)�"$��v �D�1P@�;	HX0J�(�
Qi���8���
%��"�WJ
�@�
e�)�Q��j
�EuhG��֊d6B,×�
1F���j�h'�(�qye�"U�Z�nuQ_��O�<�-�,�lK���&�
7
-�^ږR�r�(fɯr�4�O7'lB�"y-�xTr��|�px�Y�;gԺ�Д� i�`���OcG%N��Be
-x2�tU2��|`7J>�A��"|���[����uB�<K0
-�p�M�E�F� F��W�.!��BKʟ����3�qc at J�V
ےkf��d.-��-�X/�e�����H�JTd�O��q�Ku=B�J�hݔ��8�䊛03�
,��Y����>��o�&C\m�jlb~e�P!%���q	b��l9�\�
�I�HƎ�.��t�̤l���I�d&�
��=
"��x|��Ā|�y@�cɡ�D�
��U ����I�)/�� ��JA�T^�0����×zJ)L7<*�1M���U�(�AY'����&�ڄof�8���h�<01W�"L�"���I
=c臭�fe����,5��
)i2Q���[O���s
�Z�/�����`c%�p��Ɔ�2�� 4_2��

-h
���ֲv���	d� �j��� �0J��_J
�����?�C�%H�JWSw
RDb�SD'�W2�ʃ���#1�,���M��
-�� 㔁��S=LͥI����ܔ5���1�(7��&���O���0�1˒�
����|�@bvdf'�AJ
�B�c�EY��c�b��(���@�+� [Wr��&�������I��I�c�,�q�
-��L	%�ܳ:
-4�4���xW)!ɇ����4!�;����J�*�\&�
�'�
-�S��td)�|����ZT:o��׎��.�i��-�*��/T�a�ZN��*���kf	�4
"� �
MI4�}�/����By�t�9�
-`���
`��ߐ�!�R.n�v0��1 �zB�þB�eg���L��r���>r
-�sR�s�
V�`�����Ǧ���""����05pRm�#񄡖(�,�"�M�p=m�s��z����W_-�tx�/��h��˽@z�,t&�3�j�����v&�����h�#P�ɹ�
-!���>�T�ˇ���ؔ��qQ5
%:h�1
W(ӌ�[��34A���	 M˿Sg��𤍗)gjT�
�2Sc��*{Ve�W��2Pfj�c��*�"��35�z����i<k�o�r�@��u��u��\��1e�
��5xB���R�y<8��A�&�[N�`}�ïP�� H&j�F>��,GT]>��35�IWN�J����ѭ�2����q��H���$�r��w�''�iP�J's5>�
�j@����D��->�!�T��.G�J��<�d
-�bg�)��
_��1�O6��A�XLDej���N
���QF��L��]L��Ԙ��F����T}� �l��ы0��1eu)N��X�"Y�|·��u���<ߓ����S-��'j�m3yB
#�5�JԘ��?��J��@���'�Ӕ̓�y���Y��5��J@ͷG�:�@~ΏϘD��,c�ˉ���`:~ƒ΅)���i�::.��&�$�LG�p���
9w2Sc��J �LM T���@Oej,��2=?ScI��X�����
��Ҷ�d�
A2��T
������
n��ce���J&��(�1��
�?�j�49P�l�I��Ka�Z�H�@?��Cue�i��@sMn��	�74~�5![�(݊<����!�󡛕^T���#��H�2�&kK-�.�T�G��J	�d��ѕ�]Wot
�'�2��*�%p{6Cd$LHgM���o*�B��R�{�S�`#@N�* �,CIdK�����,��T*��G�,0e�1�W: T:aW�G-m�#�
r�(��B�~�XJۻ���
�r��65���j�
���M�<��� tu�����#��Jr��`��
T!":�	~���/��t%j�I�,�/D����Ɵ���p�L���E�����,��Q@�,��G�H���aP�r��I��NW�G� 	��f�
�2H9SJ����� �F������Veɔ��T��-Q�
-Uy��,��p
���QW��7A��F��&*
��90�kIV��ﶢO����˔�B4D��-��1�|ӻ�ӱ���q�)��K��(x�`?�AyümJs=��ex��R�	&:|���r( ��ǂ�(��
2�I�mB�I9XRy+�1���
�fY���fZ!�qx�	� �a;�+Ln�P)��{�DG���@?��+�TNt�T�R�j�r at u�PW@��r�B��g
/T|@[%�7�&/a��[�#f�C�lȜ�C�CF�#��
(?�1�嚔`��4� �
Wp3?r�j�%���%Q
1
;`�){�p&!1 �w�i����$�za (�x ��u~r�O,C�O����
-�yqB�/>e<t3�cʯ����n�	�A�8�"dj���)r/�lQ���U
R<F���D��69���� _s�X�|�P�a
-{�a��ysd��N�U0���D�/�
]@H�y|c at .�� _x����U at e���q!N�����:��B�/�A[��|
��ȗA��(���~����ov��%�
-���R'��#���s��KU��P.��|�K�#B�|�i��	+�"I���
\?��ꃔkM�>��
�0�P
�q0�Pi
-�O@e�aX�߬�"KVv�h�-V��N�Y��%@ M�ͺn@�V���Ε4\~��F٩����q��p�%
�P��`%1C��{�����'�yq U<VĢ?庙~P�v���#l
��f�YO�mA��P�%��H�j�R���F�䱐ܱB����B�p1� ��	�I�|s�[�Wxܵ"�� �|�w�X
-ھ� '�
��s�+ ���ό2 :��*�	���cA��skc���BC�����1 y����
3�p(R����%��u�?�e��
-*��̒	䀺��P��Ё��*�OK����%�vB�瞠��d�y�fN� �;Ki��bs�I���6:JA�g
-�F��2�T�,jw0��C�P
:�BD�
��IATmxJl���2$��*kx�f��^Ju�*@��Q� X >�k����N�:��֌��.ƶï�)8�g�<dCք
�B�>P��+W�*�,���/��Q{1B+蘺�p�t�C,]�Q,O�<I�D��;�V �@�.	��;l��|�ؐ��;ءB��m�2�*ק���*�d;dղ��~un���9������0��'%���U+�̝��f��
-��!�t��
n�d}C�xBV�
�A���>A�^����3��0d�1�d*�XX�lO�g�M` s���^T -D'~PQ)� �
-vC/f�"4<�ECH�_Ɩ��I��2��Yi<�J��i��F �I�she}��/[х	���!��~͈��H���Օ��
Ƨ�i��u4��5T�7 at OA�?'A�/�����Y^����za�="'��B���>H�@PDa�5
-
ʲ�v�;��Fyk�Q�������������
Šw+V�!�Xq��*w+Z�!�Xq��*w�������
ªP�!�Xq��b�
ªP�!�hq����
�y�b	.��m��hCX��aU(�V��CX��r�%�T�!�Xq��b�
ªP��Ζ�-��+R�!�Xq��b�
ªP�!�Xq��b�
ªP�!�Xq��b�
ªP����;�+�V��aŊ;�+�f��aF�;�-�f��aƊ;�+�P #�—��aƊ;Dp�,�f��C���aV(��cOLHD[f��C���aƊ;�+�P ��m7r
w�1�r8O���aƊ;�-�f��aƊ;�+�᭩\�!�Xq��_EM�¬P�!�Xq�0c�
¬P�!�Xq�0b�
¨P���S�Œw�pU�
Œw3V�!�
-�
Šw+V�!�
-�
��g�;S9r��_��c�1���SM���`��`�L�%���#�첋�{/�\����]��j�F��4I~��!��;��A~��!��;��A~��!��;��w���� }�;����z�{٩;;����
-�;�5
e���,�O�
���΂��
�;�3�Sw6�
��Y�Н
�������;C��mȦNl�����œ��
�فsSw����;;V���f�]w6�&�2�
��l�v
��n�j��;�� �ӝM�Cw��
�N�
�
T��3��θ+��3�ӝQ�s�θ����Y4p"��[H ����:ug
ޮ��p��8Y���@��pGw���ԝ
Ka�ζ%3ug�š��Ydӝ
4�tg`Y�t�
@*������1I�w���4Pwv̖���l���Έc��+�ԝM�ġ;;V֚®�CPTwv��=��L��՝mݚz,oGw����Nl�'{�;�ن�mc���c
lc�՝m�*lO����IP5�ow
���f��a�]w�Q"�m�[d�����6����1
D���2
!��Lq��T�-���մ�f�1'^4�fLj�H_��"z/Ċ̚�倣�����b�9
S��E�
ӛe&�BP_ݼ8�Yz��P���4Ҝ�73uJ�z��a�~^5�xZ�����[m
��
3@�E4�f�E��E��l^��7ӬZ�Ⱥ	���j3�� ��X��h��2�IYz3Қ��l6DKm�i�,��f���b�s]��/Zj3)���Vm���D(�T�j�ĸ�+�SѦ6[�v8R���W�
��Қ�9��ҩ����7�5[E�Mk��Z�b� 3�f������֬@�ă�5o��-uXa�̼���U�}�v���jS�)�"Kk��<��,�Yf��hZ��*G?��f�i�ܓ�PKm�ٓ\(��f�IP��f�|�wՖ>
�i�"�𩧄
�d���,����
����j��(@����R�m���
m1�2�zd�k�,S�`i�r��[(S�dS���RKe�Y�{�
en[��ئ1��j��3GF#6 at 0kv�*�lަ1+���a�1l�i�
-3
-9�	�}����Є�L_�m5f�P45f�`�1�Y1�'�rGVS���65f�\�҄m�a�1����n	ex�Ųi�<�8��Q�-�Y6���Ƽ{��ט%�i�
�:��Jt��q�-s���<���8:`�GzFZz$MLe٤�W��xO,#�3��
��Jy{�'��w�{bOo��cg��v[ds��Z!�X
:[�'��
a��h�Ģ������6�uL6���3"��|�������&�R�o��0ָU�N�qwS�b��M[7ݖ�*��Į䙅ۘO���|R8��
�I�͚��6�쑛�K
�{
'+68�1��d[�:�Q�ͽ�7qdw��ox{h
�t��ొ��u�Bӽ�jL�`s���м�p��Mv�u��l�R��=�
��Q�c�u���u4D�
�d
(��O���_�L��``���ڃ5��{�=����"ˀ�p`�S�2n[�qyg�'K�َ�^r���O��#��fJ^v���N�Yx_fI �z0�
��q
-g�'SӶ]b)&�RO}g�����-���@M�� dE��
�W,B��5�:��uc���e��[ߺ�V�|�P�p�n�"j����Tl�uV�ݷn[hJx&�m�u<;C
)�
-�cK�����R�j_jV���].
N���Ï����(T�����y�V�<XV�q!c&+��b�]�y�m���eV��]�˜������<e���~��]��tn�A�S,
۶���q��/�l�!����=C��_`	��R�+��t���0�޹N�
-�����0m!�0/6��ۤ�f���!��l,�Ҷ�vA`n/�ƶV�[��mp��^`~��m)�ؓ�-m^$8��y��8cy��vA�+���/h ېEL�ᘘ��.&l
Mi�jl+r�Lc�Lx�W,	�>�u�9�y
�_Rwaǖ�گ�
J�6K
���QHO;�f�e*����n��E�
��ͤk��&�m�ͤ�-��G�4N�C��0�͎��=:"�br�<͒�9�q
+v�n��
�3�lm�4�m�
��h��K�n���1gku�E6����|�̄��UW3��ͨ�馄ΖL`w���h>8���S�M�h$����C&��%��)T�]s�/��e
;��`I�쓥1�
(��P�-����
���Y��uG �4�΅��]~��AP`��}u�Sh��V��fu��mֺ! #�9*/����FL�"
#�B��mc[�Z}ڗ��k�������(h.')�fn�Kn���
-��q�ق�w��zD�4���=D�b�����������(;�pҢhZ0�}�*��h�RZ��ei
>�
-�%Gs	Z�;}q���wL�
%�qŝ2H�h{�JK9��}�5�x�S,_5j5�@~W�^b�L���4J)�A�� &�t�;����*3�)�Y���3^ޭ���n7�1�b<�}��
2�
-�y�
�
q~�s"+q��,�!�lm�V�j}������
����;�2
�/�҃B��A!�.9gb��[��~f!
$�7�ַ"�cX��&o������D�h���d�vB�7�t�b��!ꄩ�e�1�Ķ�H�h��-��RM�R�"+2�j$,���JH���L�B��h
e��l+2m��b7���q�L�YE��[�[
-J6Ȓ���D�,ٚ���{
+#��'��1��
�
fg�M���;��6T����}�n!za��<���aG�
��[H��&opSb�񦡈I�2Ú�ȎT��� �����qVg��]I���+F\��&]��/���T;M��C��.�cߒ�h^�ک$]�&e5���ۭ�-�N~[����
q�ͤ
��
;e�p�/�̰f[>�� (ьv�$(� ��KEqЖY���Èbd��ف�)8I��C�Q������ic�j3��5�p����0�r�F�Ff��[�O�x��$�8v�r��C4��ĵ���+�ȹ��*Ye��c[j�0� =���3��X��Y�g���~���y��4���*R�guz� �HV^-�SE��Z���x�����aNf3�I� �8/V[�E���b�,}�	����4N���m%nَB�#+4�9�2ӳQ�L� 8�r<%({-�5=�!&gre4 r4��y��	a$��\!*(Z�w�+#4K���
*���\�=�`Q��܋,�[e
���d�܋�=e#����X���20C
2~�%��܎ [...]
-�d��n���y_��l�g�sv�>9Jj��B�U�%Q�ռ+�VU�?��#tXgه�����~'�1�͋2�!�]��`>^
ɤ\�����ѣnV�e]��Sj? ?�����,�h�8F�M�vEplS��U�
���R���Q��>>�я	R?���A�? ����kW����9�?]���
���
����[�
���>ވ���ն��Cڧϻ����
�ɖ|?�w?���Ȕ�>����<�?ؔ���O���}�N�y���wr�?��R"������!�O���ڭ��.�o?$����
����}���|>��g�������y���r
����7�)�]��l��S�X���r�u1_���-
�딂D��f��O���xh�(g����_�I�X>�u�i>�^��(���[;nl��*�H��q<YGA$��9p$�tU�T��]��>$��ћ�z���WR�Ѹ^��FeЛ�gϷ��0c���oOwy}�fc�C�p��lH���n��l�J�u2���Eژ>p!�k����l
�!�����N`~#?��R�7 ����h�A
eϭ4�$�E���+4+J��"�h������e�Y+
-b
�M'e��^"��
R"R��ޢ{Od 1�MM~�F����
T�vQTpM#ꀎ	`yZB�=9�� ��A�@N$��S�"MF��;N
�
�饜�N�X
^�`^�s`ؘ��z3�%q�J���
-��݃
'|I	�I�Bh��_�A�5�Á� R�P��`p��0nf���:xZ�a&b�&���)྅�xe
-|
�bUU ��׺xӤ�T���	�p/�!8p-� �P?����$���a�d�b�>	R0B�ƞ�������D
��a2=�hx�i%��cbL�������Q��/�Җ���I���c4���;�ӭ2rR�2�9�
�8ݦ�[@�(F��t�A

���3#�|R�eփ��3˴
�=�y�e��W��[�cW��H�\���[X%��S����1`>N�r�
�Q�K�,���52\8��PIÀ�-�W�o�.d�%Ӆz;]�
ت}�"��^TH
�b+������hZG 8
�A&RV ��BX���
�$�������#��΀XBF�����x�TLЩ��Ʒ���R~@m2
E�u���"���up"ۃg1��F
�,��f�� �C�y�Ԑ5���{Y6cݓ��A���@�
-�ރsUv��9%�7��W���7^9S��U�:
�]h�
T��:�.b��9`R�$�J��"qd{�� ّ�
-d3��$ѡ��+e`�d�dlMVh�Obj�`R�]Mj�ԝO�[i���U4J�}�L���L橗֡��2o
-�U�$�8;�$\@�.���$��
-�����#9���/��
]�H�D�'D%�(�d�$QD�SuL�	a'D$3�>��௯����
-x��,�w�X���*�
�
�
-�A9�m��^� ��jr\��*��X�
�|�GJh�
���*��7�>�Eu �!4*s��h���1v����0���s�?�0�?�)�W��2
p��� |�pM	��� p$P�v�m
�'0�:B
��RH���M�<�H�jF�7g2�n�8�*u$��^����_�D
=�ӧD2�b`�a�
B8����@�)��(�ްc�p�a�4dB	
V�vh<I�˅�a0w
xё�*��TR��1���&b��av4/���B�iFW����<b�~`P�
$)t�A��%�q�s���bɌ=.����5�I6
�ϣi��5ʋe|���S�Cc�Q �Dǡ^ \c
�fpq`TD� �E
"�>�!l��C
��@
�Y�S��#��h:"�M��`_�
�"�ފ�^�@@��"͈X���A � ��ѣGE���6d ��ī�AbH��up!�P(�Q�ڃ��J�t1H
-2�[�B�Gܦ*M��B8|�
I�*=8���'x![A�5�G%�o�Vp�
-�b�G�Gc:�J��q�i��!
-t_��$)4|)
-u�i�jhW��A2Ř��\gU�f��$J�ج��AS��0���"͏ 
��iCs�*ⶄ��Ӈ*P���'����L#�k�)U�����ƀțu����:V
r�Q
-�d�©���
��b�!�x�v�Q�R���eS�B�O�+��v!mJT�%*,)[Uh�7�0��3x9�i�	8�9
O�1AC�'C��˘� T����1
-{�%�l�2���1�(0V� �@?"W�A� ���"+SP�8�B�!
-�
-R"�ԁ#��s�z���ٹ5xx⬣�Z`��PO0j
OU#8
i8�F��JE9$ p�
�`�=�2�����0��NG�;P7��e�F:'��}�"Rq
�U`i_�$�1��4����7�P�(H�� �(�p�
}p⩨S�l��p@@]W�_�,)鎇��*
L U��C j
Y�B

�F�������M�@�" �
�XL��  	A�A
@jG��B������E9���P
p0�1�����ш*����dc ��P�N�'�ƀg˚�AM�g�D�ؑa�@j0P�v*fi at d:�L��X(V�
���Ë��>������"� ���ڊxz�g��n�����lq1�R�V
�M"��kT����2��͖�܃,I�`�̳w�GeT�3���$ix����$��\�F�'�a���ZTda<� �7��Cx(��`��#��S�(��UPi��
�N4n<hdB400�b�u�z
�
-5m�3S��������"Ĉ"
�zb�!�jĸ���>&{! ��̄b�,Xyt�;D�x����BC��Q������C̈́��3:@
��]<O1CEG�d٦�q��:��'�45��&��Y‹x���o$�&C�i"�l$<�%&��u��R�4N���(
rpS���-瑷Hج& W��Pn��$/i�Q�(i.�|���N3v*�@�E��B�I"=����a�&6�(��h
 8��D0E#	n	�Yu�y��Z�fG_�R"h��A_b����!W%G%s�C��nf=�!h �t�&�Q�0 ����<�
,�
�"
���Q��R0�Xˀ�aP&������ 3W#: 4M�XW�)[�r�z_�Dl�̟����@S�f�7H��ӳ�t�c	K����F��
"
\
�7�*�#x+�hYcb2leL&�n�t�4ܨ�J�	�֨݉j?4��f#s3�h��
67
	,�b�$<��0V�$0�RvE���B#S��E�R�&%�J���Me+��tg� �͇lfP�X�{
V����Nc�I�*ɲ�V�5pw�pn{�
R�Ȱ�N6�V `�d��TZ�c�a�ݡ��4$��d�i �N�����3i�ꎐ8Z���F��<�dٌ�)Ҡ� �&
�O��*��`�$�1:{�J(����
>UAv�bijx`��Hˠ	XO�~j;���uS�2
�&NE����v#�ӧ�D!�i�x��XA3�F�h
��aw��A�B�;�p��G at s���}
X;PT�7�44/�4
� -R��
-Y)���P�]���<�~4�m�:
�`" P��	ɄlK����h��E����&�#+,S����9�u6�S�s- H@)`�A!���x	Vb��@gLj
���(�1�9)yD�*���������c�
-&���u�+�l�yaU����ă
-D�Cc��x<��`�!0'2t�+2KΨ����4̶�`�d����]�v����+���P4m
�8t��o�.Ȅy�
���ӡ��(��
D
�:����?zZ���Rd;���������P77
�p�4��D#y��g�h䙜e�#
����)���,��)jf8� M��j���e�
-J��O����~K"�p5�J,�)��x��h���D �l*�
��WL
�:��1�.ذ!/��l�f���֭+���5��ކ�L]���P J/Q�a
�<ܼ�F��������ĴQ�H�)je 
;Y
�	����W����A�' ���>�s�]Y�&^.��3���Y�
X&�MHd�Oy*���R
wt��
-*0���
-x�=��R
ugQ��Y��N/�
5ϲlߤyYD
-*���aV$d��$d��yGY�`�g����@���
��`�ٜ����U��|�J%�t���@t��
�9^݊;0"Xv*���%
-,�	�A.�E���+���
�ڭ(�E�"q��p��;8�k�@���HH��R�pE44	�./\
-���6<��|%zKo{�k�F���`��.Y
t\�+�3ɉ�S�h
����G�
3���N��;��@V�2ޔ�p_
-b��d P밈�L��QS5e��

-ȉ�qt�8p0\�&�@*W8�}�
-���T�ř"
-6$�+���8���b���oVX�/d�`T��
'
i�flS�9
���xs�dCl(}t	� }����}��?�C�����6��t`�\¿�
��x+�;Q�"
I����	;���I`�#?��6�^�1����0� 	i0%�O��-�n)�u��H�A�b��T%z�.཈D�2�Pͫr8�� ��
-F0
�p���+r�Ho.smU�>TP�����u�� }�J�	
���_h���c�xU��e<�_É
-v$3�R�c .��A�.4sj��C}Dk�@��8�y�_E��6T&�����
- ӂ>�jtW�opU�I�KRl�2�������HLp�
$@<�߶/��3(Ax��>� �0~��K1�(`e���/hV C��g�	ϒ�F�@H�����|�@�� �
�
-KɅD!�������
-@�<Ym�ˠl�TՕX�{��F���]�ɴ��� x�H�WA��k6���Z
uG�E!��\k��
	�j��H8�nA�
-�� 7s"5�������#�E
-��%b
]>M�SY��j��Dk=YQ�8��
�
-�	y7wD��=�N"�BZYR�x2vR�=ZƜ<PAf6m�
-K��,2��ȠA���h���\z�G��&�f
G=�|�sx��Jg	�Z%D�f-4�T�&�� ����pa�8�fG��y<|������+L�����?!�j�1*
Z0f�F:�kq�g���d�j��l*;��\�����쑹i@Ez��F7�S���N�*��F-�[�W��J0�/��Wd�?�'��ěgp��
�
,�Z�DLѥ�o`�. љ^ *��1 d�.���S��Qs��Q`!�1숀X@���׃Xd#�
�B�~��т
,A��a����+�h#•(ޤC�N���@��1$HPE�x"�a
p��	��SB ���vPCE�@%jE�.f�'B!�U�f£�_P1A>�dž�)�JI`�PP��N5^�2$(��
-�Lnp��p�j��)O��ԅw�:B��L+6�WE$$�/��V���a.N"�!�9Bd&�
�`� >x�(�p0
Jd:Z����h9���d^���#��	�
f
.z"���~
���
�]QEf���]����_�j�$� �!G5 at I�jڣp�S�/Ϣ���
�{�q>�T�)%?��X>xPxd&j��`YF`�b2oJX�7�B�	
q��UĤz����e

�7 {8�t�::����z�A�F͂8^��'13� PǴ�����;��LJ:p� w�
-�j4[�h~��L��7
�:����҆^�ĈH��Le1��
����(b
-	ͥ�9
,��
����2M��p�0�4�
-�"JD �gv���+�F/27�tO`^L�D>�5�DT�Ą#`�%�F'㙌V&f�]\S����+ŵ�t[�\y�7����T�; ���8jm�`vp��2�
x(q2��PM ��Tl؁�n���U.^Qa�ˑ)���,Q�a��K�
G�L��p}I E�!�9@�؅�nGQ��C�on�z͹��b��
]�Qoa���as���>��_�3�D��'���

">� �i��9����ҟ�=.��n~>+.dz5�
�b�)���/�F�'��B�� c�
���+�ܬF�\o�{6���rh,}_sя��d2~^���AV	�C.ٵX]e ��{X�+��uV࿮�]
l�T(�қ|���
�M|�����h��?7��0fmB�Y񑣗訷
̱���p%
a,���B���7l�	��/LFi�e��SW��MC>W��!*����6���0��%c%��\`��]p��""�Kq�S�Ȓ�lj�5��>��h�@�]�D������[3��"��vR��@��_Uę1I�_��wu-Z��
ɏ�m.0L�؛�?���~�n�b�����?R��\�S
;
(��d�

�.�x���|?c2����
��q+22����
-���6����Х�\��hC�j!��L�g�q⭿8��.�w���q2��38
-B�]��0�Eix�

�
-\A�
".΁�``y��~9�?re>��0k� �t��\,;��D��E%�Ƕ�!�����B�_�BWֿM��^(3��k�?���
�����Љ�
-����2�51��<!���Eh��Ju
�(��x5&%4���ʺ7x��"��x`�|6܌��S�|�*���Z����W��G!�Ia�*���:A�|]6s"�#cxt��T|� N��w��'�&��BΕ���� A����
�_��tn<��]{.��#���]8.�}���"� ��$������X�p���g����ޘ��!J��`��u���2tş@I!�����Z��OP��G�75[�A�����s�ZLz�џ>����QaV�x�v�
�D}��5�/��-\P���,���cb��m
���O�@ �?�n\[�_�Ya8�!�m1T����.� �PK�O��k

-DF�
�Ukt�}���G�s$bC�5���F�/C�Si�f�y�g���
-�s�"	 Z�">�����
���j
60��u?��\�*�_��~�+��?�g2
OH�6!J؏	-���[R
���ZL6�Sf��O4���HlDb*Q�����\N��!(���E�3���AqN�J���O!�w
���,��i��s�ۦ�����~��)�W���\�!Ӏ7� �����	�"k:xۀ;8���,�*E�Ϳ���+�[�~�!
Uo>U������%�y�	��	
6��BڢH`*
\}�
-p�"����!B2�0���>� ���e�^�o��?����'�,1eC��=H������|᪌z���~
���C�﴿/��!�rgŝ��}ʝ�����)�����3��u�#�"b<͗��n,Wc�F���mVF���L6�O�%ef�?�6��]
&K�'��?�

cX����j9@�
�3e��2�:����+;�h�/��
�,�YY�������Wr�
P?��?���UG�aȓP1Wxx+N��Y��'�#�eo�",u�5���>e����[8&�������@�9�L��Ř��K�p1����Fp3d�p5�M�d�h,�����֧����^�+��J� ���xf8���uomtA�"�g��1�D��;�ZOr�5?*l�o��l��q�x^�s�ks%���gz�O��Io���}���ߖ*�	2��c��"�ü�<�:.BBX
x���`��
�?	�����7;�?���P�
2�h��˒�Ct[��3R�G$
@�fU�ʣ��YwY?Y�O����
���d/�}�2����dn
��y]2��
��P~:��
ErH("���"B����3z�
-*��
V���?�-�.��'�,�ɸ�lto+?o.��7���4I����6��j��,�qA r)��Vt�u(+�ş����
P��d_
��we*��?Y�O��m��i��G��?�a��g5̿�I	��
��O)�΢��6�{�T�
?�Tm:�W&�3�K��׬߻�1�kj��)`�q�C:�����X�\�k���P<r
�k	A?�v��k�������nj���z�=q��7�����?�۴Iio3Y?ؘLe<]L,&����I�t
��;�m��@���p&�6�D9 >���ߣ!Zy��m��� K�\�����x��ڰ» �Z�FX�i?�Fs���l
-`{y˘L���O�Χ[��̬/��K���w|�L6�ս�C��L��
�G/�a�h��KR��%�u�s�
��
-Bi2k�,@�.IQ�r
�cu���9�dk�"�j��w
�"g�A����[�7�B/��8�
�v�c���i�i34q�Q�Z�&N�"���u���2��7�?g��
���s��sf�
P�K^�
�~�M��S���B��
8�O�g&к�mp<
w����Qr R����m��R�s�l02�!�HI\���!n[e�z��fa��N���
-�� s
D'���,҃����[� C"�JЪ$�}�[2
��bek
)�
��	��QP`���0w�1\�ۆ+Y�F���M�ZCP
�!h���4�x��龰�A��--ځU�^[@u��d��Fj����S���>jG~~�
�e��/����6
-��왔3���Vv���$��:{vU^�f6PV�<��
ze� �h��u���38����5��//�v�r
+��Fo����{�����E��~���hrB
-��3���{8�	�(M{�9�hM}�:�d �`p��{�	!~2z�	&|2z�	�2z�	�}2z~L��S�\��r�<ZoWl+]n��
��
-���y ��9l���g��(�
)��=RƢ8��o��:�U�K$5%����%§]�v���P�w����
=;�v
��j
��	b�s�����?��r>0V+2����>���y��ꉴ;����d���g�5Qv(����#�a��+׽�_��ȥ0�н1���D ��˾���v�
��?�C|l>�L��
�{�������
:�n����������t2#���z9�o�f^�PxI8���?�}�`4�
�ƌ˜o̯𯵕e�{4[u�-W�P�v�_z��PX(_}`��d�����l>3�1�����߁��W<i������<N���C�A��b���5�1dp�
�����6��/߽��/�h��`�Zϧ-'����l��
�yd�}/9������6C�_إ����O�x�@����2��YWyY���
�l��1��7W����B
BBf^��5��*���̄�k�f]�6��|MN���.mz<�������NbC
-���K���L�zN<d��MR%QUU�[�������B.@�X�o�#v��\0 ��_=����
���C���
2�����
����4���C}۲����GlZ�W4Z�Ja���fb,�,�|��2��XhB2��rݟ��C��
���2Vs�[����,�ˬD��#�?gV�9��6��1���t at 8��|5���W�
#��U�
&�Z��`����u7!�N�D��Exi�;�&
��Y�uW�D�`>�/]����V�eQ�
��!إi4��,�o�ٷȉWDM�@MkZ�7����0�eb�)�w���X�b��ƯkW|8^����x��{`��4�ݙ�t-�j�_���{��+
&�fx����=��f5T[.u{�eo�6��_���ߛ�fsG�s�p�����j>�0/�]��Y6E�Ul�q�6�_�l�`��3V#W�0�7�$�z�5D�Q��Y/6�o�ᶓ}7�lo���=��|�Y�Qm�x
���%/i~U����s��2�de���^�%�	�@�.����aq9O�o�
-M4���	5�����|1�“�3:?�Aj�}�ę�ɜF�Xl&+;�mu�󅭦�<UWe����~�U0i�q�
�l�)�xK�'��c�X4�`��8���j1gm��9�Eo8�i�7o�p�ެ�Y}/
����	�N�H����z���sB��˹I�6Pݵ����j<�Lz�w$ ��葃x�if<$��6��uL�K��E��X�- �
�{	q-
�뷤�.9Wz�#1�ϗ��l�������"�W�0}�p�T�����:�Ru��� �v����4�G�;�ކ��6���i�٫�LZy�[-������I�׵�M�me��lh�Z1��jM�����o���r��*H���g�,��g�a5�;�ê��:T��>��{�xgVq�<c���q��z83W6Q�X�Ic���!ퟫ`�^ٙ�KA.��Dlr�$6��yH���+c����_m�ۭ`��Ə|�)y�[!�:
-\27�6oc�����E��p����)6��7[�]��
q����xf�V�2�z��G�k"�9���|���#l��]��
3�Y�f�?����-AX�b
�-����p���%�|��m��M��JK��J_�ڈ����|�h�
K���`�v��(����?"�N�Gٱ)k���D[	���"��c��M�S����-N�1\���!�����D�q��&#���>6�E�8ѭ�[���˲�R2�r�����[�7��;�� k9��0�]�-k�1�ԖS�x���&���v��˼���
�ϻ
-��
|�<}
�A
�?=���-��Sp?��?����� '��+S[�9����v�H
^<d&�Ȼ�V�IpH[Dm�`����������b8%�'��
�b�ݍӻV��GKMT$���;[V^�pa	��vC�?�����gP�)Q����;!�s��Ⱥ�5�r۽*:J
-k'P/�5r]��\�%ٿ˯Zٮ쇛g���ρ�H�����C}��ػEG(T�>�>14V���*�. �>�~�"�=�;�z+ʨ�kO at -�r���d�Z�gD���0��1��
h}�	�'|�
�h�J�ۓv�&ㅙrfk�؅Z0��W���>�$>��;��.�
0��&�/_�q5XL�}Ε(�`���¬�B��4|6?�N����x`p_�
,c��W|�V泱oR.�S>���S����z������@	�E�ɋ�8��3X�� Y�:�=Ϳ���
�V����{����(���w �mS����1h;�� ���
��a|���f��p�5ˣ0���|���զo�G�5Z��Zj�ƊH� �~�Ы��x�m/|>�گ?�#����&� 
��������Qoh,�/�@������[sB���_A����B�����F�#�������)��K|��[8j��r2��e 0��}���?�/_pX}��0�|.���^��.����vZ�Z$Y��o�'���
��(
-�
K&U}��:��̼����A}K�Lm����]
����u½��(�}�_�o(rS"���Ï����*f� >�y�9�������Ӭ TC7�XI/��	���<�=y{X
�jL���v�y�HT�p�uki�$����IZ	�C�������w���'�/V~�+Z��}��]��������3#���p%�Jir� J��������>��[WWb�tqt��ku�P�����mm����{nf'7g����9���U�M����=���O�����=�����O��Շ�	�ý"�:��Y�R<��s	_����Ʋ�C�,/��{�Ǒ������
���A*ZtD�O
�
0�'�zӞX?I�ꨍ?�<In��F�4����p��a�x��O�7��Z"jlN˦=�M�<�vVas���&��D�����ʝ���U� q��r�D]
k�ų?rR"�&P|�K�=7��LJ�H�)G�=�D
���`8=lO�>�+K
Q���?�����!�����M��
N�V��R���
���A�s�Pτ���zO��ޗ���W�����b [...]
����e�(}��O�?�.��ChU�	)<�xY���7yE��41Xp߈Ʊ|-%"�W��]�n��x
JX
>��^c��K�v��ں�/��u�w��SH���>\���ŬV]��啰
�^���l7�v������a8���D"����)ݻ
5z3P�������Cw\�?��Vu���V�����}۟�W���L �_�R��������8�q��i��=*���V�ȩ���܋������p�S��榥��|���O
Kɫ��|t}���ϓxE��*��(�[�{T�C�Z����q_�Oc�F&!�MP\4�7�֍�r�ڤݾ���]�yڪZ������P
>�ծ�0��o;�Y��
.Ɓ�s����߭z���y�;��������7L��u���n<��ӧ�(]x)5�y���yF9nQ
�{<�ή^2�i�5�?�^�R�=I]��� ;
�~i�m�/s�1���;��"ǥo�B��[B2��e�q�\�v5��y����=�{)��-���\,�!��0��Ձx�
���_���7��
��ש{_��D�U��}�{�75.s�<G���~%�����'�@=�y~
��r���w ܲ��<���a~���
NtKَ��ɪ���^��1��3�K^��ks��?���bZ;�8=Ӛ�qH�}^}~�ptV쎏υ�pz>>��.��{i�sy��_\��۫x��\�?�߼��ܼ�=��m0�z|�"��pdY|IE��b!�xJ�ؤ=�����J"t2�%����m|גG�c_�>И�.���=Oꭗ�K��Q�϶�2O����ד�ǭFs��g�מ���Tl
��l�x*�������tS�H�6�T�\�>�*�y�[�|��˩�ZH�ukO	e�穧��8
W�F�Ll�J�Y+��>�F�n�p�yh�����,s���s�!�Ix;'��ꌼ��ݒ7��xv6���u)��{�R?>Z��yc�
��=��n,
���^x:�_3OO�b�9�M�F��2��c���b�"^�I//���L>����äSV���\l1]�^g�S�2�|��y?�|]\�7��D���<oD�8�


��ꁺ�^D�+_���Q� ��|q�_G
w�8|9��{<��@�ӈ�
�d�nq���Q�]��-��-^�j>�"�����I��]y���
��|`�4�6��/�������ݣ`�
��ߟ�
t=ɝ��ֹi1o�k�@�NJp>ȉgU��8;�CR6u������鿝)���ΞGy�<sj1u��B��6��+z���;��*g�Յ�\>���.�/n����Q�ظ�;sWZ�Z��xz��tz.�x��s7���^X�ޭÓ|���/�=O�{`�w��}L;�=�^n����jk�8,</��4�ߊ����aw:J��A/���R.UJ�+�m�~�>�h�E_f����s�zn?2���!9�
�{�|g
�Φw���F�*&�_��a�vT�
c˲�����Ȥ���*ypX-�Z(X������
V����<hT�hSZ=��/	y�ʜLw��Sw�s����S�����V��&:�����
��n籓Luッ�Gr�>>���^�t��Kb��_�����"�������i���9�>��G��<�WGGW�+�-�R�츴�^�=��}N<���d��*O{���qq��s��E�L]�ɽ�`y�4���G�\ޔ�����E�8�����r��(�K�_E�����R�+>�>
-Tb7e9M�
O鳸���VW�th�Y��������&���Z�J���V'�p�l�̝j���ԡ�e��r-5
-
-^%�{2J%.����5�/�P�_*�*�0K�{��y�w)�SꜨ
�h�"��T�%ru�+j79�Nu;�ד���<���䄈��������3��n�O��R�:$ge�h�
%��k�0y�h���cZ
N�7���q �

��:>�U�������X�kK����]��Ɖ��D����|��>��⺗)��;y�;�_]"��tޒq�3
-���wo���L
��ɓ�mD���d=*��ME�^V�Arq�j���lR�?>�����<=
-�
�q,)�������^?��'/�d�
�~�ߌ-"h?z�l\>��F�*9�.o��)P��d`}��|�'����`+�?���V{� 

���;���3�P�.�l^ܟJݣ�z���<Ɇ{v6{�_�F#��!yP�պ���s�%��I�4��{�x�OsB2�M�+��br|K�%������4?:��r��峱x�US�缐�4N��y��b)�z���
-��DA�\��F׉L�
+K���s
fE�&?$��a�!f5._|��<ֳ'�H�[S���T~Τ��L��(^�����Bn?s����n�3�lF�
-�7��_�
��y:S3|7�n:U�_y�ӌr�+�	9��nOqz*
����Ҹ�e�Z����kU�s��������Ei>��D��_����x_�^�鉧��x���ݙ�,=���3�GO�Zt{2����`�Qu%�K�\V���P�U�q��8/����I)��s�j���qo摬�b��^��
^:�e�}��J�ӷ�����4h,�>�~k����2_�
�xھ�N�
�bi�N'�OGϾ����]�������o�3���p9���=O՛*OZ��f��F��X�}R߯��j+��܁�2T��dvt���T��{��Zz|V��כ\�0R�t��&�=~���B��MZ�ԇ������
{�t`yT?��r����9|
u�9O��uV�tZ�˕\����V6����Ut-
N�'�y1퉽T�Z�m�=��9Ño�J
���B|snm�/��_�H��r����;I����\v!ߟgڣbJ;7���c�(����}�"[h�.��F76��Jw�|j3;*GF�LF���s�\�0* [...]
-OV��N5�u&��>pVz^�
���գq�n�>�_�'9#��
�֟u[�i}�},j)n��Xo^O����H�M���Eds��5o�é�?����r^��
��{�1�ٛ\`�E�>�{��b��4�o�G�1x
LȮ�
��0�HV���^�q�φ���7�^�r�Wu�8)ʣ�R���J���g��U����/Ԇ���{ny2��L~-\
6���j(�������E��e�k�9-��
��˃RqՍ�Գ
-9z�+�Ye礚� uy�/.��S�|sR�<�“�TU��H�����
_�*����f�X�+E[���;���j��Y�6������_�����C5]�mzN�yo���cg�b/us��
޼9�:qP��?Fn�!�=�_�o2�Z�N*�j��G+�^�����%e�S҉`_�����yZ�
-��R>��7��e>���q��
V����q'����·�n}�)ͤ��n�i�Uߩ�_TO^r���|���Y�a|
9�	�%�197�>�Bb�^�|����q�ػ�z��
,�F���lU��JzU���'	=sW2�D.�'�}�|�6*��n9��
�s�S.3v�ܥ��]��t)�߅O��Hs�y)?l��4_M�VW��P�ڏLrem�
N�Ew�?��$]8���.��j*)W"�쵝K���(=�?݉J3�̕ɮ|k�תrWU���C?'߭��W��}�Sꟗ���I��"���}����t|Z�oΫ���]�
f��,S����R7�l{��M��&;}|�zx>I)yM��o��J)�"�<�H�+�f�!V���d��͔�/i�|uM���i��"�2�;-��ǽ�&�~m�$���:D��a����n����4���2�n���sR*�6��@�s�HW�'��|q��R��r\��ɽ�"6�r�Ԥ]���؁8^gJ��һ������
r�������5�����T��3����@�Y�N+��ZM�����[���̓�����{����&�m�x;�{KKB! ����/����
U����E��̗��))| �.�����Q1�7�i}Z(�u��������I��ӛ�'�u��8^�̃����5G�ַ�ʓO?.nz7���amR>gF�r�|s:Y��%i���Kם�=O��s{w���<:�B�9�h��áR�L8�,�� [...]
-1.K�'w�ȍ�{���C��;���D~m\<���Q��󹷤����m:���#/%�P3P��y<g�ϥ�d&��e#�{�_6���z:,��I3?�_��2Ec^y����U-
��ӵ�Q�i�v�ܣ47;z��])D�������V�z
�&z�K�NZ�־��Vn�Nb9ax�_������Ȇ�ɛ�A�p��3w)3��e�����o٠���'���:W���~Z��I%S�w���k�v�&'�\�wq)���H<
/���9���`�CŸ��T�f>u|]�Y9V��jӠ�I�
����t<��i �?���B3�
�z������x,D5��0x��KA�����F�b�`�D�
FJ5�(n��zGe����O�sB��~[��!�t�~%�e��vx���M�*���٨��2

��M
����T(~Qʇ����������tC�~R�K�Ŧ[\����q�0���G����e��xK��I"�����u���U�\\�˾�#��ғ���8V���_��2�U���=��8�,�j [...]
��gZ=�h��_^_��yί��<�%�3��蓽Y�\̕����C�x^�}��Mg|w��V�vlBd���Dj7��w�K��\*t��B�����l���e숯���%�gMrr���˽�ݪ~�_5k�o��<�ȗ��K���:��o��te䊕���7Q�
��a+߻����ؽl[�qk���Q~8�uon��G���~��ZY��'�����]���
-7?y�\u�d �!ȱ�Nt��\�
��rRط�i�r����
�蚯�=�O���
��8�����_���m�
����a,]�_�
w�D~(GI)�����B�ニ�t�ihG����K��s}X�T��_9�E�d(�������D���O�~��i��/*}�&
��/�?��o�	�� )'C�x��y{Ix޺��d!�T�GC�p�Kg�x,�ڹ)�d�<�ⓖN����ƫ�:��A��-4�;W����I/�:*<7�=�����4�@�k��Ө�.
��lB���/+q�����g�G�r˟
���1s;ɉ\�
����"�餟���;^H��t!��ãb<�7_�y�<
ޅ�Z�,y[�E��A�V���9r��~�
5�@�gd w��ō�I_��[:y-��Ç���ˋR(
C'��c�-����{^�U�Q�2~���u���V
��+W
������
����Fl�iM��̙��K�����"�Q�<A_nx[�[�ڦ|�&CY���4#��;�N�&��ڪp�l���u�9�V���f@��I����r�dj��J�HθOrw��C�}�-�w[W�׋�x�s�.��غS�o(Z1������xL�
}7J�rtw
<��S�u=6�����@��8��N�b�҇��}�98l{���}��Ӭ�/� &%^Έ�Z_�R��������mv���?�s���,ӌ�ln_/�w/���>w�r�> Z�e��P;���vT<h������O�ɓ`��.�*��@&2U��D��v�L�����H%B9�s�A(����w���^����]��ݲ�����
-IO�"��&,�2۔l1��^��`�
Kμ�F�^�-�
S�+�-�QLF+Z�`� e�%���i���v1�E�ձѩ���G��c��>��J)l{щ�U�Q��ž����
��XE�#}�ȇ��w�K���fbL�%��v�ZQ6��0RZ pJ`���m�����t�l^cTI\,6 at fQ�4A��٤oY�:����h���O�
���ʼ��g���~A��ʡU>}��}l_�����p+�6��P|����}�k��p�<
H�-��nauҕz�\�&
-��x�����~�K��$�nD��s���ὁa�&�|�z�`ƒ[�F� ��܀
�
�@��]l�ɲ-�v���/�iӳ�w,�f�"#}wv
k��fM@�F/U+δ��)�<M�M7�߻g��u�QhϸyZؽ��"�w	�t�n3�mU�dU�<P���_B����[������.�mI���/x#!Lw'H��J4�K"����O�.��
*��q�o$�)*y�">C6�F�1�J��uX=C8��^H�
4���
���֤�
I���te��V���;b�a���&���U�,>�<��x��D���>�+��&��W�`0���
-������	�'�-��U�hd�.bS�҄��+hb�I�"v��~��ü^�p��J�F������{�?��(7 ��i�[�;��
�s B��v:���
6�$��mv���92����$4�@����=�ϕ`4�C�q0%t@�&xޕ�C�w��Ҍ�����?ևbxoR���*�<�/
^�ի���pH�ͤş���W��^av�¨1H8��A<yt2��۸K;kc�HX��t
W���&4���&̙-F
������Ơ4J;��������>�tM�h�|����z+��|����eZ���t���p�tU
��x
pL 5�`���
+f?��勷�'�
�D�+ݢ�
-�!� ��Dr^��4+�n�)��N,S':���s�3�#�bˑ��o��%�&�RqS��;Wb���e���u��
`e:X\ec�n��mC�xRrem�>[�/�ʘ6
-�Z{F
ԇ`�z���
����S�زB�����&J��k��e[;�A�Ũ<"�
yp')X?�b	/\�&Ok�(e�>���w�ط7U�b�
�.�U�Q�R�w��Pz�5�����f�K�M��^��w�
-|ZZ��a����+�B�)4{f�G��&�} ��k��%�'l����iBP�I��.:�h
$�#�V���	�
.�=�Q���&�^,�%Y��>�7e)��>��d��%��Ҥ��ó�m�B�RK�T�+-��
-z�Vߐ�����HS��CY���pҸ2���]2F��$�uP��~�
-������[�Tk�T
GL �7Wg#H"�{G���M�eRe|�q
�@s:]�{C����'\0
-�m(��ů��9��r��B� �����lx�f�`�Ȩ�hVy��
5U���ԫ>�P�ʧ!�A�W��4ɕ�����#��dK��}C�2]
j�A}#�i}r��O�N~���V�I�=��I����]Kz�fk1��_DU�T;�f!�5��šF0"�+̪Л�@fUFv�j��d)d�S������&����
u�
Ԋ����Y�,���߈~){���^OT4�������I��>�t?}+O���d���@p
�fjL���+)Y!g��@u}�\��`_
�7��S6IJ��Z��^�� }��' ��`�+"����:=��[~ �{|��6����Y��,���`�PpB��¶X�K9o���R�ZCW���+U�m&��z<�H���U�������J
_!��9��<�b�̻�r3�
O/7l�����G�,�cK�f�,R�j�s�3�H��yG\�����B=��\�.�h�^jɜ�B���8�c��d�j��͓�h���EǛ��u+kaq�M;�-���`"-<��W9�����ߝ=?��ڱ��'13�W�
4�o��Ա�*[�6}���(w�ӕm���:�v��a��#�4,� {&A]`e��Z;*2z*-n��1�e�J��Er˝��
���K�"�?(_mG�����(i{������n�Hԏ�ϟ���_+[�y>�-}S�v���)q���k!����� O
BwA���nC�
��fؾ�gC(�Qԑ�+��޽�h��>ƣ�����F��F�f���]
(<�3�Y����u��`PB�2�L[�v��#�b���ez��
�
�
�2P�膭ޔ�^������8$k9�0����(
��f�:��>:D�4Mr�#vqM,~'��z��kI���@)
�i&3�a�h]��]:Ve��h�u��A�زjJ����|�S�}��Ɠ��4�^At��Z��
����N�DA��Nv��,z�iH߳���� _P�ӹ���t5n�7l�Ud�WSz��Z��ʅ1����k�f�F���7����L�ǚQ$��jz�6m����Z�U�\���?8)pe��v9��������
���Oz��C�V�S�?��� ��y��!R��fK��N[��E3��NuI�Z���͉��;/�/e��>͔/]��fK&VX�w7�
I�Щͅ5@�����'��9�d�%�{K���چ�
"�4�)�Mr���ga�u�FQn�~
�o�PR�%DЅ�$���c|<��m�W��A'���|��Im���
3���m�ȟ���ŀ5 ���p,���t�W�q3ne����B�*l�@0�3v0^���?�"�?ҷ��
����}�-.n����z�>۵�{�5�:T���20⩎�Ԭ@�΍*�Z�3��5�*:�
i �+8������;�S��4hc�B+�^�ҽ��yޕ.v[��/QtІ����D�ӷ�_*���
��l�n�
�TC�[#\���������~o��c#�pn>��
�z�4� m���j�7���
�K{���Y[����!o�m�qy��II�����
��l��=���c��FG���F�T���@��O��4w}E��LqSh$�=+
H�F6c!MɅ=���]M:PB3P�ϋ�AۚU��׊T���:�;��g�����T%gk�;�3N
iZrw�W���@���>W��&���̋e0���!:�Ə��_ ��нb���+��o�g���J�^��»O#;7�
G
מ?�W3-�12�6��R�N�#5.Cs�v�p��XW]����,mݝ

���'�}D.���,�'�3��1?�+�iK��B���{}�m������G��q�B�|ڏ���?'jn�r��PO���\mt�O��u�n�#7�[���v
�4P6[n_ۛA_2�ԡQ)x�S�4�,f_߅�V2�!e�mU��ay޶���m
-D3�Ap�
-������j�y���=Fj�+*��e��
K�yT�y���d������F�[�c>S3g�v����(�z�GJ��_�9��@�쨾:���/��%4O+g�ѻ�fhŬ=X,���
�4��E%j�
?��H(7��D-�N����G�Lf,��<�
�vY<���-���4��v�o�u�c�f#�|z�_�sg�
���;����v=tc8a8����z{��]�[�rX�斓�;��Jc:w��
(�8*�s�6������;Y�Nq�$�W
-�t��7,��gO1#GCu�d_�ip�x�����Oo�4ӁY��5��|��F����H��M�y�]�a����)z�M��}~�"�(п?�{eQu��{j+
-7Ա��r��[>��]B5� �z*��h���G��Ґ���<1����� ަߓ��0�qq�X~�V��y�un��Aj�P�*�AVb��j�(�0�>�r��ϏB8]��6�r�J�{`�f�ӇmIެ��}����јY��R\�Y��۔6۞�j��M�� ����vf>4��*�+��
l{�s5GY��`}��
-X�b��$��R{Sc�n��f���2l�i��{�d���
-o��F�Vm<��\=�惇�mjVVk�Sb� 8�G���5#�/zI��kD�/T�u��]��|�
�� ����/��r%kF$dc�;� ��
-�`j�(
��N
��+�Pd��*~����/*�F�EW)M�c*��i�:wY+W/�Tw�"��/�%bWU�.V��~}�͋9H��A���,j��ˊ�����%�V�3����:�fA֚�[�tzQ
��9��u�b�)Gh�)��n��b���h%�U�'�`
����n�Z�k�0U/���O���W�Fz�K
��u�w_zF�(�ٌ�5!:fֶx��p!��CɔK�<hX�qk��u�H
�U��`���T��
��H��6>}{�c���"���d��D/�Լ�ѓ�x+�֮�%�g��!t�x����
d�M���e�O�D��F>d��sm��7�B�J�2���zϸ�O��a�V�3�+v�P�2����p���د�p�ꇨaH!0�������b��
���U�Q�Y�n�s���W�T����jP�{?K4(�/�b=;�{�x��Qs�'�KKkb\��g_�c/1( gv(�֠�Ԣ�$F��)�-�䞘��2��b;=�[`{��"1�+?P��YuЭ87��c [...]
-��-Bk�W҉}a��([T��k'�׫��₯2RߙR+����K�yv�
m���mr�H%�ʵ��-0

�1$�J���F!-�5�W~A.9�#�/
�}FY��Pgr1_��{��Y莬��"�PM�
 VR��@G�"��j������]�E�=��9�63%Q���j�T���Ξ�S���:v���^�ƕږ���ٸ�[�%���]_`���5���w��y���wO�e�s�)�9�V��J��tR�bs`���C��c���JWk�;�0�(J���E^�K
���]��ʖ�
okq���Q�?ª��mw'ʝ��-6�a��a�
׭Xҫ�P�-
-n<7N'��$DC��A1{�D�o�m�R��>P��
-5�6�<�c���M���:�F���ʂ��?oH5
�RV]�.X��nH�P!g�)V͡U��\��M�Ꜳ��Us�i��u�[��v����B�:�[���vi�bD
��![ߴTS=��
-�z�>��y�z',��,���)ۢZ>�����`�G�I�)����AF�w��ITAz
�p0�yZE��)�K"�G��Yos֪Z�W�Et�u����Yf3�[�� �.���+��4��+���~����K��%=Z J/�D2�R�w�{�z��
��:]j2Z�_��h����l�y�ʋ�7=b�����^\��A�JS�@у����L-�W��6=Bxo�9�
-уs���A��!1���uf��b�
��
���M�#O����X�`
����C$���w�w�_��q�jt.�����!X��G�c�����:�1�g�=�d:�(T n��\
-&<v���::e�PV�ggI��k 
��,ĭZ""��˴�ҝ�l���6�,$V�
��6������ [�{���U�M�=����ᆊwP��y���;Je��)�+����*��Ȥ�{KyϜ
�2�6��2^؅��(������W1�<7������|2{K�uR7Օ��� I+Q��N,���@�V'E^l>��|1����\����Zk�"C1�
戳�(7�8�뭶)}j�����X4�������|]�V"��낋��&�I����}u�kډ`�����Mm��Gn��7����K���
��PH+烁4K�_͵Jx�Ca)�q�]W$���l��&)�~Z
��!�༜�FS����w�8�5(xJ
�2��ׂ!<v컻X�w�yݏ�*	�`���)�n�
q:������c!�Y�Vl��|�ɯ�4�)N�a~)k�5�p��M�"Vb�	��kh��*�ϥ�F���b��oS��'�iN��ޢޝ0%L@�T�Mu[<����T%x7��M��g��=չHZ��C10'G��ϗI7,����V�TB�� [...]
-_լ�~b�Fm�^5%Ħrp���c��@i"�~�Z�G����\1ѕVD�p���4�!��khy���|�uJ;��I>
EOv�
�!�44Q8��
�L�~C��P��QB��N|��Zzӫm�T�
�g�P��Z����lȩ./U1��m�}���*�����
,1�C���L��>���03 �w��
��m)c�?�0�#��p4�{P>+W�a��n���i�b{��q�M�_ߛaَ�]�ErBO��b�f!��G
-G����nwO�l�� �I7e��Z��.}۾�:�c�����+�W-�f���^6�O(E��g�A��V��F�ڗhG��%�����-�hx�>��h�
/3��!Fԅ�D^\,��:
�*��q�+=�L`1�U{'h�	ߺ����fT���E��]#��%�Y��Z+�A��<+��k��Msdi�ڗ��oX�3a���d}7�:� ��]0���O3�"x���
#��x�(��m��
����3�E/<���L
[�6>���Y4o0��-��ְa�����oX
��H��N%���?g�ԏMN�P�ڲ�`����
-�v��	v�2���Mm�'q%�d��Fvk[?|��8X�*�����C�^��弳�U�nt��'�q��g�U&Y��'�=�B��cd�z�&*���P���J��n�<#�G�2��0
��*�-�U�2�ե1���Y��MTo
���,V��g�=�)����ZҐU�Z�i���lS��6�7y8

:zy~�9_�{ ^V���nhn9�T�l��K+�]�z�6^�̭����m�3��
�i}[�'����w�ז�ҷU��Ok���|�s����X�2&�T������%71z��f��y��늦���w7��KЛ���O[�Xu�2GAT�൅���rb<0d�ю�3���.���Z�w6
��4
[؎n,��7f4x��s����=�3�L��fƱWT=�p�"�+a�_�~m���v[��O�R�Eض
��'���R+�3��W��u���f-
-��QЏG�>�ƨ�
-�p|*�5]2�&Sؙb�2a-IŻ�;V
̿��.4Im�e3�a�ug�
s->��������J�j�|�� �&�´�	X:f"#�'EG�]�z��B�նs
V��`Em���FL
nkJ�����L�Bք��Y��5m���g6,�(��kr����� ���N�s�&{jG��*5

qR���&E�x\[�R��"��AS�^|
,�j�4�6���%
]������r
RMW0փ�1Ѻ�ml���賟��\\�
�Ƀ����ե�Q��h����ew*�K
�f�4�`:�e�8��؟�
�
J�]�l
��lb�ͪ�_4��6�@��)T�ycn.f�?��w[�[�X5���-
d��{�j9�)p���+�)�I�8
'60^�?e��Y�
D��sҤ��N�>�dž
-xL�
��.OR
��PǦ�:;�V�a%]���
��Y��0���q+�݆w��6�������bᬔ�l1G��0_鳤\v_�˹Hu��Ī��R�����B�A�&,�b���
"��D�[�Y�ᵱv#�ɫSL��\�U��'�1�g=�i��-%j׶
�?5�پI��~
���ݬ�~7��YH��)U҅�\����&3in�Ha)�vNNm��Ϋ@i��m�25OI�c|TP��������R�v����^K�RQ�kWk幆�m�����Z��eϗ{�F��V���~�V��V�,���:����{�=�G[i�%-Ј'�
 ���k5֟��
d؃:��i��旨�v��n�!
��fϘ�y�ڶgX."o�A��[�X�lb��k�g����8�X�q��E����뢾�jW���~
��pk �,��uq&(T�D3�C]�-i�N��
��I4�Z��Tۥ���.���罇���_Ѻ
K�Z�E��o{Z̻T�R
�kR�s.:����[�hTz�J}�ՙ	,���<;�6�h��� [...]
���_�*�?�������5�V�hzl�p�ދ/]Y�w`���|�!��a�yc�)�j�[��5�dFϊ�
�x|���B�H���d����������I=G�s��
��X�nm��>C�
-xI�z�p��2�SIQ	�+
���S�'p�c������j�-��>-�H��L	>�+"cZ$��h
��ڄ]C�/R��w
Ҧ̺
��>�^�ҟ��������@
-��/
��m�4�g�����*/�=�XYy�eSp�� )��CG�v�k2 QˋE^�����N�����Ο���[��TLW�$De�gsѾߜ
��� ^����bQ2
����5
H����r����f���g�	Qə��(L튲���T,��X���$�a�fISӊ~�
�Ÿ�"�s?z��Y���#�9^��('���C��!�
/��lV��hwU"Y>i v<a�J}��)��;�H^�O��n��W��
�z����5�f��u�0g#j~��^���� #�o��[��y ��1�?���?w>������*5�.hϺq��ʴo"q8��@��F~�CLS�qS��mؑ�9����)vDmJ �[v�Qk�'UOY�cv����A�A3���ze�D�l�c��?o�e�Q�Pf��
��c��
��3
V��Ǫ�|��t�<��c�p�r
�*��H�
��
�F�~+�Q�z���C�Ѿ�]���ktc?�
e���JW@���v���PJ٨��S�ƕ�
�v�ɮS���5�O!p��ĝ�
��K9�v�s,'�����x�
`
-wRӭ�G��P���L�h+���Q��Z�X����-�
-��O���$��?�[��
]�&�	��$?�7j��
���e��@�To�䁀��V�	+��j���hv'���U���em���zTFas��|��d�*��Vh����9 �a&J��Vp�f�F��"',��ټ]���ּrһ[b8Ue�C�|i�d�{5Yy�p{���	ر>�e�/��#���!��Mj�϶�v?x�F
�˅k^�r��p��U`�|e8���d�U��m�/��Z�7w��Y2�!Y�Q{Yb<�����3E����9亗'C�5��+�+����u��\��}�/���_�+�Vm.�Q ��~;s��qƊ��&^��޲c���{3�	���̃¢���T�:�?�׌���:�N�ty������śL�vVD�T����������*l�N��"ޫ���������
}>
�?���C����j0�q䈝wC��
-*����ڷ��-.�5��
�?'U��xB���K�,���@;f\�4�z�����bHc4���0�8	��I�����e*��
��
-,!ccM
y�
��r�
��M���1�/��U��0o3���Wj�3���ZUЗ8��Ӭ'�E�&<��U��W#4 ϛᔎ
-���87�H�|rs+�]Y��m�,�8V�d"��s�T��1+*
-���B��2�}O�
-b/�
⮥׆�D�(
i�([^oTl�og�U/*�>��&kqZ_�Aa�D+�NB�U �Lr�l��4i������YT:��E<�#?���Y���q���_y�gv����VG�{q��D<��
��w�L��e�
�G�-p�*nG�#μ�|����A�q֡=>�y��?��ܬ�;7a`����F�/y��V.��߆(D.���rtJ���y��M"�SMn9ܶ�I�����$�
�@bIu�d�,*ة��҅��^TKa\�\��bcIm?FL�
��{Tنc�]?�η���V��������ډ�9p��%
_�%�skI4��9���R��#Iy�B�����n��E���ՋC�
-+3e9����$HdŜ�߳֫%�Vl��bo��^N����0w���<_q�z�$m~�Qe�
lҳ�x��
��mֲ�o����Y&���4���mF������5�<E�3���͒(�cV:�O37e�H�VnSZ=Nޏw)Ҳ���1Ȉ/R')&#D:�f�ZLpw)d{5y8
�)$�l�Ӡj�7���$.ЃJ]�4J�
s9����|�K(��'b_a��$��*�{�"g�*/���샇X2�>_Ջ-}���[�k,:��pe]
��y��ZփnP�a��Q�%�䠑t�ܑ��J
�������u�2@����W��9
�`q3�=�#�X5*�2ϭ
-�R�����
@�cXc��ؒm�D�/��8�(���(9
:$w���2�kѽ�;���\3]�T���[���y).���H����E��@�fg��&��Wx�qr��~ �%'�Õ_�8�������NC!�����@�gUV<g�(���XD�18����])\l/,�j�7�z������x�
S�U���ՙ�h_J���妧ޅ���m��|kU5{*A�ͣ�
������mE��T�tN�S3.<O��F�Rv&la��?�P�{�7 �}���
��y>C�QMD�)�����q���A'�A��]�ʝ�ZȞ_�
�33%\
��,]���P�7�_O�R�*N+?�M�-Yy/e_�N��uE�Ҩ���F_����9HQile��WQ)�7�|�4�A����6
�t�U�L��I�:
-�G�iP;��4��,߿w��EN���(�����
-����*+)L�
��$L&J�e=y�����I������k��p�%��
�;�ݑ��)��N��=���
-����ҜX���z�N�s����dzIi��^��[�ޖ�
��g�.�H�U���g`l֡�8^��Z/�
HWy��6~��^� ���,KU��PP�?~�\�$9bFM���S�hA�{��<�[�$���JXS�ѽ���{�Ě���?l���}v
�7�0�m�6���ʺ7�w��=�T�]�38�/��QV�!-���+��jc#8ˁ�p˂66��;����-���`,�<#�]��Ѓ�x��ؤ�Ӈ������J�Y�� �ԟ��7���g�����ہ��r��|�J]|�a�I>�*���I���LJR~�!qEZ��wE�~4�!��^`\}tG��|9�;�߁�������6�(�k�
t���7=�����ʜE��?k�
-���ց|G���jdx[u~>0e�1�
-��^��ܛ#k�[�>�����θ�А�F��Ԉ��IB,7O#���E���TuE~���
l��{�r�G|��hm���O�C_M��
�R�tq�L��� �͒�*ӽ�è���_��/$���'9�
��{C����K��
?Y�s��ն�_����lC)nԢ���b�GӇ��I��[2"��P�kZ3�3��(�^Z#���]{��PvBʗ[��0����L�/�a��
ˉC\��o��Y���O��@�L�]�Xb΍zV���g��%[^��ģ���@>��4� �~��)�r��C�07ьiO`��b
b���;�W�j�_�څO��fy��$�"�e�,�'��r�}Pa�PT6A߸�C��>/��\��?��?{������c*�C�?��f�cu��=�Lf[Y%��
>��E��W��Jp���������҃q.���`��8�s��Wp��$�k��CYe&�Q����p�۫�IM3C���n�H4J�c�}�gʙA���i��s�@c�R&B����{��
~c@�X�
����ÿ(�Cr�]�j���
FX��쨽����h��ָ�֪B�r=#f�~	��z��@����R�ϐ�ՎG�$s��M��Rqxe��o{�"F$���
��p�1��p�kb/W�?�k�]�

�Q�<��{ݿ�۠�q�{��ƨ�́�E�R�}|���Y>���
-�׫, ��`�\4�8��
Y��-Z�����Q��
1����
$���@�V�? 
-��X
�
iާ�{�pz9�9-�X�vK��V����m��o�~����~d����?l��_i�'H+g�p�e��:��.����|��&�z(�үeWz��T\M���f
����2w�ի^wu�7+2��lg0��c��H�l���W�nW$/�/�ؚ���H��-��-��U�2��;�ê9<�
-Ճ��h���Wep��{���m,$ʴA��4�J�v5�XSZS�t+�
섆

��C��D�,<Ш��5Y۬?=3Q��?����{�[y
?��u<O��z�ps���?�z�i�K���aMWxj��

U�9v��4
-��M��VC:w�T�WN��l��l:]wе�V�
�:Fu�[XP	)w���AD�#M�� {?�������t��fl=e�E���<�8��&�j��j�?�P����(����
~
���& *m�,>ؚy>����ST���N0�{l���o��X�
T�Z^c�#�
-�3އ���s��ǯ�-����/-�s�M��gQG��?>aI��PϝCly��0%�C?�E��TZW�/+�������J&��BwV��?��-r��/�!�(iV
��p����Ħ��뀂�`�0"��������N�
��	�,����
-�O�>&���8z���G,��� �w�)Κ���k["��23ç�5iI��������{oM4�+�]����Y�5����$]+ �%���_�x�oxC����a������x��A�
���i9:{�?��kqeE:���C��Y�
n��}Yn>�aF=��f����ܒ���cv�&<8�g
�`D�7��ww��#և+# �En��M�	�F]����
-T�`
hEy�Oa�zǨX�:�����8���;�e�D��Hf!�v�E1�W9���ˣ����͙y�i�' ��;��
��.,+hlz��tP�w��\�578�i��Q�4ӊ[���\�z�Z�I]�2��f!'Oʲ�+`8J*�!mF�װJ�k;��*7�B�5~�z��sC�
���~��R��W���󗚋��e��D�V†��.x+�=H�v_�i� ���
��v���-!(nC�%���<G�kpژr�/�R9#����He�����a�p�A��ݤ�����`���y�=���fD���Vp����)p�ޜ��_ؓ��k�'�~/��o��g�}r
9
�"�y�W{�
-�ƶR!�g�Z�Ey�+̲�����i1vo���9�
9�r��n'���G�cn�}կͨ&�_��]�z��fΩ'���1>��v��i/�
0�:������D��U	�ֵ���yd�~�iz����Eܨөue��R��M�ː����`���
-�Y��UyJ<�{��$q�r�3��8n&�~
kv�
x�LR�b6�����5��7)���af��+��j�8�LEk��+�c�#���q��]��>1<S, So<�������Du����X�y	΂=7���YRs at 0|aQ�^���q��[�+I�O�B�e�ld�bff33��_���g�~?{��
*%DFee���	
��պ��Q&�K�¢�`?�"oU���l�#�dh5vۧB'��Y�\v&��Y��q1\t�۴��c7a��lO����-a3SϤf8���U��{��z�S n�.ZA׷����ﲒ4BK�$���@l(�!/���5�Z���NN��NJ�P����F1�r��:���j8�@?G�J�_YdG]/�/�Tt[
����:�הVO)�-b��G��L&L�;Z+������ҹ4
��e��GT����
��3��PW�e�#{��4Z?#T
s�v�Z?x�ޠ��꘧YI�
�
�|��
��龑3%�4}��Q�2�M;��9���I����*ł����s� [...]
8BaG_�"���U��B����q�+�,�5��՟�7Ś�)�/j%�ÐP������x
n
-�]�i]o�����n��?�]Q9,tk��EƦ�@#�ϦgE�U�yP���Y����	5ܪ
B,8w}�¼�r��ao�����
�M�s�d�f�L�jE?��x�"����)[�k>�_OU���
D �C�
r�_���ߘنCRzo�k:�y���SޏmΌ�T�I�}NI5Zb�
Nٻ�G�̱߬��W��d�ƏXq�nO��'��\�
_iƹ��r���FJ��0��t�S�ˉ�=���\���jm_�<+�-j�6��
v�B�؋7��RF6Ֆqc<=\O�D~��5���A�;k��hfU�@u
�b�M"�������°6|��I��ޑj �PK2q{O��q1VY<�iU��Q�Cc�|+�be�w�X
6��g0�&ɰ<��������J��VO�m���̲�M�ﶡt؋\���lȦ���ba8E���Q��h_��ѷ�x�ML��+kqA�i��{F,	k��1�a61	���@%�P�
<+�hk/(ර���X�G��Z9*3I��9�Z
CM����bo�0ܭ���N6�p���5�-�A�}��r�w��嚬�=�I����9��Ճ0*b
-2����B��
�c*��*��ޔg"�t̽��Z4<���;r͘e��c�8Ru�70��9��:Q�<�
-W�f�;�
��'��n�n�=������w���F��K�	�O{�X[�l�ʝ��l�Q�T>� n}h��D��r��
-m���쉗
-
u}8�$a��.Jt�d�{t\�x%4g�F��!;�ȖFL>�L�<ʱY��Tʶg���M�þ1WG��/K_+@��M�����c�@�{4G+�V��'&`�rWD��0�t2�h����z9���YM�9	�f=�
����W���_���_�
䲬�����8^�o���/J�����9��qO��
� w�i �b���j~�;����Il.��5B�׀D^m������̐���T*ei<��|,Ж����j
^
���}������ڂ��jNV�5H#��Л�BKy#�o^k�A���.�d�VwxU�!�:�"��� o�l4�P��YCp<�h�MZ0e?��ǔt�ߘ�2�.\��{q��Ӛ1��,>��=�5�H�(=���l�u��
�K�,a��ϭjk�T0�|7��e�W]k��
e
`�J���#Z
@���_��L
�U�D�6��z,�%#��?UE���r���ґ�_w��a ��ć
���
4s��J���K!����fK!w{'�ѓ�
-��_ ��QZLmW��0�[]�u拉�n����q�w�Ɓ��>�~k1p�Y)��M�~���z�)#}�^Fax�o2[}�n��5d��"*��IoVn���88�mA���/�r�.��{vK��} g�\v
/�
�Ik�e����E�k;��UǬ<��̳��� ���
-Ў)�^]�KRԓ��9|�/z�=y��O�#��>h�(/?��ma
��N��v���j�B;�����d��(�RY�v��)��.���Z���}Z�2

�Y�
H��
�����^s�~����2���G���E7��]�KWЖᇄ���J�_'�}z�迅�b���T:
�
�v:Qނr{�F`[������v���Ɉ{/ѺBw�
�ˣa�����7���M���m����O�
��Sn����!;{Y�E�
�`P|�v,�$kz+I�j��1f�R�6/��vO��f���%£�[<ؖ��]��Շ���U��Oi_]2��w�_ h����ƭk�YP�q��2jcQ�R�D��#�V_�l��b��J@£����MO��k��ǃo���k_biM-��s��d���^ͣX.t��e�2]��)��7�|�m�?�{N:D�L���=�
E
d�w�y�hr�"�1��I������;_���cb]��
��C�7��g6��`q���.٣t�r�w]��fK�)]�d0��ި����;��&�������8�^��¿�r��bA6k
�;v�-�]��h��
P/ͻr����
��5XZ�?ݯ��fkO5�e�;��
+�uT}����4"�#��&��YsY
���I�v���9O�ϏWͻ7�P#E�
�}��o��蟇hɨB��4�
�j�F���\l��H9�x��.d�4�#K�����HL���Zx��rV�:��Q�󜴝�኶�����t�_
�bƭ���s���h=�3��.J�Y_�TkNA$J���Gv ���]�1����:��p�D�Ul��\��4�s_�&/1�y�`G#j{2��ݽS���4)��E�����$qͪBѝ�8+6� 
Lw�
ii��i�#�#Ѿ�I�VmΏT?�,li׭�+}V�J��j:�̒=�Gnm7�z_��b�s��N���:���	g��(չ�����?@t��
�
oc�������	���D5�q�}$�n�!�\�Zc�ޥ
Z
�Єk�)/,&��*'cWK�F��.'YQ�zY�({�{�&Rn����
-l�A��% (����B)�!]YlP-�"��kÁ�����
���M�+�;�iV�VZV7�J���\p
�#m��:X�!y~	�d��m��Mi�C��|�0�t�����|@e�����~�Ƹ�ܙ˱�
-3�s��q6��`�}�;	D���M��jϴz��sniJg`��	��֌ ��%��X�:�V���Ҥ�.
;vw��W�&2��m"'Q��I���*V}|����1�B�<���ר������j�ց���x��E��[[��z�vy��Ya�[R�t���9�Z]}��vZ����כ��u�F|X�&�<ZzH�^�~I�i�^�gMJ5�����B��]`�Gt�Z~ST��V�o������U
˲郅q�H��6�I?F�>�,#r�� ����󶝊�Fi�(0$��ޤ/UǛ~r����/n��99Q��=Q���4u
/�Q�������cd�y7b�����s����|"��
E-e����
-n+:[ӓ��{��IP^��6f�bT��Gen�C�U���̴T�}~e��xw���t�J9�,P_�����r��G
�iowۍ�������e��S�|�"��q$)�}�^�r���y���$�5v��*���.=25g}[�ET�r(m�J��rI���x�D��@��ZfV�4�$��N�����rbKoa��s`�
���L{m��⦇j�uG=*�&����Ĺ�W(�cާN�ରt
-��A��D-̷ʥ��F>�w���z��"����jmZ��
���
r,=Gv�6�Z�c�/�=qar�x����+b�l��_�o�r��bPئzd���)�e^'���� vR����2ग़q���-�_u���lj���
<�D��b}�Mc}�)��<�t{��s�y���̀dC��ax��]L������A���X�L Bzwq@
�y�(�_M���\|}�l�R0FZ���a��J���-�s��+�iw�h�\��+�������w?������3
���{�E���I�A�H�+�a��X$.5v��
	~��}��ۇq8���p���1j_`8�;Ȧ/PͶQ.X|&X�͂��;��i{�<�7^2�.�rϏ��ʧ9j,O�6�q�W�BXCAi�P.f)̵O5�g]͏�}�lK;?Ӻ���`�#�E��U���Φ��2��V�F�<��,�؏-
%�4��l�U���}����/�ws8ҿ�9&���
����w
){��t��zM��˯�g�t� [...]
-�z������/�>� Z0~vô�Yg4@�q���xas~Q<�`[�E�;�2ث
���-���3'�H����eq<%����=�`l��ޫ��ty
�*,�>y�������ԕ�f#^d��#�����KL��yv����
9q��X6�
-�Y��f9-��G�oG3�;��ܨkPk	���n]fO\�b"̿���>����oe�|�6����K��v~_�8��&�k,y�O���@�t%Zb��?G�㹨,%y�=�͍��K�}+�Z��1����7�X0���?��6�����Tĸ$aF�{l�zDA�{�k����v�[���
N���>��y�g�O[���Nj� ދW�s����hU�'�{
-��_G��s�W�`�u��W?.[
�ݔP0-|�c.��ٮ8~��x� g�T���G�BY
6�f�S�U�Nc�e���0��>�w�
���wσ$��U
a舴%�:T#�������":!�4�Ҵw Y3�0�r9NNk/�11�H�r6��%+"�?�9�
���8��������w��|�E�͞K
ǡRm>>^�QA����
ԏY�Rq�X�+�/w�v�/[ո�9�!�R؂w�VM�_�aI
-`6�W��}��w}yĨ{e�cn43�<����fm*�Ues��¶dS�
��u͖�D��-Y����"Q�C,�4
H��M,˲vX�?=��gv�^�I�\{�0��&�0r��Iʤ>��#�5��v�M���R#�&��z�
b'�Ѱ/�Z�v}i��˄���H��l�5!�12
�%%b��6�jl��9�2��L�+�O�r��`�}�i�
-�m�R�z���pt�­^�s��-y�ǀ�
�	�0,+t��!�k3tJ��Sw��#��+L��;QP�Ú�F%8R-WL�)4ϟ�O�C���y-����MZ�_}�&g��l�c�h^����dt�~n3�+�X+
{fUR<��*�];�`c�:ҲP
ç����)և2�\1�
�;����g���-�.'�ʘ�/�B
?��Xj��p'!��g��*U�{k���lN1c��1

-��j�K�����MQ5O�W�rEXo�M�,E\JF�T6��ڵ���I��L|�S@ĸOL�)
��a�8I:�ߖ��wE�Q�g���j�{���=P.1f덼R�'�j����qy��f�U=;��+���
�y4�KO{��4j.\�@���7j$SZv��i>��K^E��M�_�r��F�����>g9uX-u�ب��2��}P7�Y�T�%��m����'K��O�ݟ�ϲ[
�J
?J�
Y�j#ʾݡ���j!�tU�
�!�o�w2=��s�6�׽ҁ]�
m���ӥ�nO���n}Ds�^W�m�L�ʂ�JW%X��e���
v��� Y���tF��Ⱥ�帤@�~����x�>���TO���*
��L�i�@�[����\>q���,\��m
Yj/m�[e:U�Ηm
��ٿ�_�������Y	�gwД�^S����C�5��]{��mֽ>�����tid���Uc�Yx/
���J$��60^�~��<��j�R���(��6[�DoN7G@�"��y޿��Z�0�����a�o��*B�A��%>�.# 
:�Uz��
-��t����*�~d)޷��Vrk�7!)]A�`�6�㒘��y��K(v�W�e�#�'��_4�F��Zc�2z��k��q�յ
v=��a3����ҡ}��6�3faZ��{�N��z=h�l��n������H�mu6���NhM�VYU��?N�Q9Ӝn����m��+�L�x��h���_Ik5S����ʚ��
�ZC�m��
��5Y�5I�
 

}&v�u--Uo�r�2M��>�_u��U'A��0�d`�T;�x��ߕ�늯S��� ?��[�CC�}�����
-��ek���ûC,

_�HdSո=5���p��mu5j�U��I�*�o�eܺ��t�����7+$JA�h�¥:��be�
-�љҡI��VST
iO���*d�;J�{������>
���@<�W����4/,�쾧�<Kv{��a�H��1���z
ٍ�^2&|5��K��
mZ[�@���K:���J���ZcX�Hr
2?9����yf0$�c�0���
�b1K�(w�2>��v����)�8n^�W��#��0�a��Q���٪�d	JX_
�v�5��DŽ�ܥ`���� =�מ�Z`:�c�x
�8R������Qs_ѕ��5g����˽M
j�v��L���*��*������є�

/5[R6���	�?��Y�ϿJ�ݺ�A��XfM�wd/�u�Hz�<W(�l��
��ש
F�`pS�>��Ñj����
�O���
�M�ٞ$��ȗ
��o:Zm
�G��Gu�~�_�U(���`�M���L5P��7���!�_��Ϫ
������
�\�f6�:
-����_���`���D����5���an�N��7
��dR:w��`jS�ֽ���
-���'�=j�b�ƁQ^���� �II� J�[�j�df
��ssrut���t�j�b��A���k�����%4T�D��\��[4�_�%�t-�yl�ZIV?Ȫ6��ţ[,��Jn��
���K�2jLd�F-��t:�י>V��&gJN���^!xt��J���*p��(�
��9�������p��˩�j��;,�=�ì$hޤ��{���b�Վ�F��\i��n�h	��ѯ�g�a-Sܩ#��
\H#�p;��_<+�S#��vk�
���"�o�ۓte�B�x�{�Nۥnoi���Q��i�<���u��Z�
^,�aBk>#慚-h߯������z{–/��罋wA��F�
﮴��o�
����
�qR�g.\E
v�U
?�o����`PS'�u|g;
-�Z�_�K��#���3�=����:��jx�Z������V�3�[�:h}�H���N��X)"R�ҀV�屝�j��ךYڨ��Ӥ�
�]������=����%�$������>n��y��s0+�+�/���E�|V(d��s
���،��B��d��Z$OK>
s�0�P�

�+v<�����<y���%��U���5�@�����O����vxOy�5�t�P����J�
��]����+��!_P����_��-wb�g|r�⭽ᷳ�Tp
��k��R�J����++�EjS�/��”?VJ�	�[5�ž�Ѫ�c���W��n�ɰf �1�~���&wC���|�l�c�#/:�iX :�ƈU�W
���6:&-��e at G.����W64̛��N�z��s��_(~yA��
+�
�7��}t�W!v�d�Ш]��ށ�f8~�陜��
� �N���e٣�2E��Sy1�޸�����>�ٽ��ϝ�Z��nk�:�L�h�(�id̓H%�b�I,/n8`K���B����N������Q�cRv�ֺ�nR1���P�.��BN�m at B��>rR���e�{ݓ� l��js��ܠ)��r�-��jd��k��5
��f� �'���##�ܙ�t��ᨍ�R�U�q����_�r���/��'�R�
�~&�L6�&��
6�����y뎪�R���Q�@l0��Ŗ����_����K$��sv�F����=�b��j��Þ��`=��5��l]#t���;
�ݰ��M��X�鶽E�{G¨�2q
-q��h–��ʇf
��D�	ׇ=������H�W2��B3{��-4)�ܭ�fy���B@�_0�t(Ä�����&���x��>v��������v���s�<�4���`W������Ґ�rwҷ�[pfZ��
�؈�C��=����cpq`;�����?��F�l�͗_��K�4���wes�
􅡆�|,�q��f�<�
��&M��ϟ��_d*T�=���V���*���{T}�9�:�qv!�'��m,�.yȜ����a��C� |ʞ����;�JV8S�@a����
y�.��GO�Ahd�a#��I����f���1�<��iG���8��Z���|��󠞙��nW��M����
U*��X:�x-��+Ynt�
~	�%y�Dv6�Fs
(�
-f��)2w����� %�43�-PS�Pyuo������qhe�^uBąMA�
-�>eϋJ�"�k%EY��^�g�F�9a���O��_
�~MѢ�I�Y:�Զ�C{\4�� ������lt�l'���>81
綰:�G�
�i֚l��1:x����`��&ܑV����W�T�T�5
��o&���͟1>���۱:K��*�B��$h;&�*��ir�3���!�m�<�N���"�en�g�_{LG������%��A��7��/���bD��+�
-�����A�5&?[�Q�@Ɲ
=a��ʷ`�}�{����Q
zn������+�
GGz@Ʒ��WSi��w9ދBcrt�}v���sH�˨)|�5����a�X���ET�
B�F /���%4��!�,�W^��#�
?[�.���ն��A�BO�
-�?�pA���Jʘ.*@��ҋ�M+�[1��'������.�c�a\�M�n%��|
��-W՜�I%r��L=Iև�
'R��^~ᠾ'Ok�����؎-i���
.PT���tN�
A,��a�O��_ز"���k��`k p+�f���
nu#x�1]6����rki�ga����vc�Bю\�gz(4����?ݚ�3���jW�ȷ!��h��q��
k��@�J���*���߆	�xK�ez�"_�"8�M<���-�<���e#�1_b�r#�z��:
4�a�c�'O
O��E!��Y�F�#�wU�_��
��w��`1�
Ԣb����&Ӟ�z0
���bG��
i�93�����	��}̑Z����
�(N��4���-vSz���*s�����\/�|�u���g1�}�T�5�8һ}
�/�����o��)�]��'uM5�J�R/�5�N��J

�{G���R�\sn)?� �{Hmj]~��L��~����Uλ�-��P‰�J<�9�8��rg���mR��^Q�] ��
�$���Ɏ��U��})����;vD�/���X�h��K�otl_��T7�Q^2���U�X��zJ�����:p�B���)�3b� ˬ`�/����T[��������
�흳�C�#�^?��w�C�~�e�ٝ.l���D�W��*7�6t���w?`�~{�0� ��;�V=����5���\�Nmy\
�
���\��l������C��Y����9��cc��D��>c���X9��ƣXن�iq�vKaG�D�+���nWw5��V&5�������i�K��`'��>����Ǚ}�UA�7�3n�R��oc��խfh��ۜtA
OE_
W)c1�w��=3���*�a�?�A^�7��H��ML���/Bx�

�P��
JR
��5�t����Ȏ�ݎ��y��	���q�ȿ6��drV��1�[�6����ܒ�f0�|j�)?�����)iI�[J�4��
-Ґ׶�3K��ЮO��@�+�K��'P
�*��+c�z�m��*���,<�~;�gz6<;HN�8w��[�}&��Ap���P{{���
-g��=�s����y��蠒���u�JP^K�%θ�UM��/ѻc�;_Sf������ǂq���[����~"ԢK�n\Z�=3� �2m%V
 mw����� >~�
k
�1���
-w$�0
~k?_i6g��5��/���D�ȫ8_���]�f�Q�m��,�We�D�}�	�h))���9I�Ձ�nl
��

-�j!��-D_���W��ޯ��g��xR��U��4��ʍ��o����W
-��O�3>OS�'��W
a^��/�ЉX�+ݳ�

��(
�H�i�W�3���y6d���f�!��rz�P�GVy�U��Q�\��Q�w��|8c�iv�N����xi�)h��V�y�>5���7��ʭ*q�
-�g���y4&r!����Ot��'I�����.�1M�$~u5��#�^�$�<+-��#M�W��ʒl�4�йRgH:�T�?��5'Y��ZLmΰ��߇<��
�nW�Ȋ���2ԘO��N6�a���KmbL�Z��+i�G��%�/m��OJ{��r��
�6�+���Y
L�u�4;���q��
- |1�����k��K���+�E�%C�����~]�m��5�;K�7%�����g
�ڸuf���èg;�9��hbR9�K��vW��~��.�a�ǰNW
�d����Z�] ����;,��F���I
-K��?*��V՘0@���Xr�y������=|#d���O��������-��1��9)��k���P�㞌�E�3�>n�"G��W#�2Dá��k���HŒgA]��
sr�ڙ��v�B|�
-�Fo��!� �va!���i�Y��V/ܜ�1ˆ�*���X
?�ƞE
�
1�~:"
`ڶ0t/%�V��rR8J��t=���VKȄ$�Oچ�_�BG�!�A�8;�@J�׻,E~�ϩ��N�
-c'���sxc��`��^e�2�JU幄[:
Iz"�Zj$�~6$�q�$%�ڠ���]6����`�W�7�����h�y
�<2
�)��k���~��U}��X�:j�����5}�s����>�L��Kg�Hh��'PL��GƼ��sb�5AVs��E�����<TU3x5��h�����v�մ�my;��_���B���(�}��5x�ɰP�1���h~�w����%;�I�-�mkuT:�S�(�6F�OM
iܢ��;�`���}a�V+�k�
-�h��Dd����U��F��a��՞?��q�9�T��^�����x=j�24���4�:a0��[�L��-9�W�&�J
���@9�ZFW��,ؑ�;���C/EDJ~6 ?UTY��}a���a���!0k����Gk�EN$%��f//���%Q"�������0I#7�̺?�m�Ʒ��NAϚ�%�a��\(�+x�*j��%y����c}��E
��R�l~�5e�
���,X���cnc}�L���|��
6�VM�^����������y�V��wH`D�
1��1m�FS9ȕ?ѹV2����L�'R��8s�x鬩�(�V�L_M�ߓJ�Dt���~n�p�,���Ʃ̸��Z&

9y��ʺ>���ʽ҄f��2�;5�}z�ô��"vZz�]�qo���g�����k`���'�М���W[�R=�v���
C��.�rW�sa�o�W�9��n�Vo��aU	�4�l��ؠ0�_ϱ��K�k��!9�\B���?}7%
?>��>e0��4��]3O���<� {hW2'������������s.sr)\/�؝Xkx�&1o7�t��������U�?��Ԟ�寕,�E�{3T�}Z�fO4�ڬ��M+�
�_�k �F�
0����N��#���
��Ϳ�Qy��F{䮆���{!��e�j]�z*]�^�튪
=�D��d�|�����=e�n�zio�|�?�G��s��}�3��P������K�
js�y�r��,��$��ZF��N�oՉ�Z^��=ni(�Ne X-���5���m
-_�L�4eQ������}z�Gu|�����ޕ���>�^
c�
�آ[�!mh�0�
5ɽ2w��)�����U���mۣA'�S���w���b線�DX}�\������os��ބ>�H����3�
�~���pcתLN�����C�n����ա���e�7��O����OE�qͮQ�1z!K��&�	g�V�z�{����v�3sxu�x�oJ���r<aq9Д�?2�,��Q=cv�tW�9���p`�YU��_��{���?��P�ao�+|�aq
����GO����^���<}:�*��wyd
-�e�akP�
-�վ",���ܶ_���I8d	�g�SX��C��!�C�搸�G��S��u-�0$L̃J;�I>��+��Ѵl��]H�һ�[Iz0Dldb'�82��t�d�+�&�t�+��
S�;��u�����r�ߟ�d��hjY.n|C���}^h��;/z;7I��=YQ��W�Mn���Y��G�[L���Vk_�-|Im]�+/8T�ϵAݜ�9���նT��'�o����{93��ٜğ%�tu���]h��b��rO«��w
z���"����2D�-y�}���$Ǹ�T.v��a�6��B�ڶ8I��N��y� �gk��I�[k��,_
%-@#�s��
�n�^x���?P�@�^nko�
d���(���j�p�
�J�dƌnr%�>��
�=O揬
d (
?<pxF��	�
-�Gq�ʚ�M��o�`_�~���_ }>*$��l���'h�R<��^�Q��~'S��Փ���7�L���vf�
�؉���)R
�@b��
v:��Β�H�������7�ȭ��}�{��9�
-��̔D�Ѷ!M����ZZ
QXZN����1��J�2a�����'u�w&��}�:¸�)�i
D>0r�o����y��Ҭ$�I�h�/��?+
��
�ֳ��&3TE7oMQ>��*�Va�ѸO��;-f�^q�<8��,��ʭ:
�{��Aa��A@��v���9w�Cr5������?,y��ˁ����h���Ke�[��� 8k%
�o��_�3�L��@�ਔ�<F@�����^qƭ�>8wyeQ��?
'�RH/�gSˤ������%���)�Eb�g���Ƀϋ��Φ����P�TY����0@��T��$/%�
掂ɛLo_���Zb3z��}�QJ�q��
-�>��'�
-���|�;7hV���I
s�A�
v5P�j�Lů=
��'�:
3;��T���R��<�"{8I2)�XJGPK(�{͞�԰5��-�M&�d�ܾ��>оe��zC>dn�A�#C��5��6
���t at h���p��"�c`��,�
���G�u��N��W.e���+V�
l�8Ȉ�4��
�� ��ؾ��]A�V�8;�
ۊ���
-f��9�4�snI�&.q��XY#}���ڧ�ylїq��kV_g
j�{-G��,U�#�E�
��T��Q�eJ�5�l�L�Q�<
+��Y��0�T�?Ӵ&x��Y6����G�������U���Mhצ��e�~?�ć}
a�A5m{���k�3���Xn��w���Q��u��u��PE���
L3B�IW��Z�H�{Ar*��̔��k�o��U:�Y���R{T��[E�M��5D��'X
��
-;��^��C�nf�Ǽ\����Jkd��1X�Q�.�ͤ����a�,Z�d�v�ͅŦ㈌��t8yJ\���DS����6�E�>�SƄ6M�Ď�X�y�F�/�9�o}F ?X�)
ԹX

��X��qK�"'e�'�໓�&:�۟�/\9
읕�W��Z�:��]5�>LJC��eG|�!�+$���_�
��M�'��պ|��[Ly����܊���7�I
A�
�k1~�^���7���w��y�[��Q���ںP��� �e�������]}�N�F'
��ߘ��*<ic�'C7���;����Rc�k
"#.��j̬8
�
	�<d�]E�f&Hyea��{^��{��͒��j]�q���ͧ���Mx��_`)�mq�OYR�@"��#f��
-�.��_ X�^⇭��Z�i���7Š�;}�R��l+A�����~�c��K8�N��$�p�u�E�
�|܎�2X�|�B\����hn	���o�rn�
).�ҕ����_N�x�6���v/��e���m�o�Gr��DM�*(��f%����E��C����4�֢ʄ�V̔�e��J�k����
d��&��R���w�-Z��jo'ݫ�Z{�Ɋ?$��X��ɻV��S�j�N�����N�
-�Uª����x�����ڑ
 Dږ���wԊ
��a�f�
: �O7�}5
�S�O!ZO�.(␞^Vľ�y��p�>*]~ɰß����V���L�Oٗ̆9�5���yR+3�?z����F40A3/
��<,�{hW�����-�8�mRa�Ҭ�I�˴_
�E_
-����TFM��Ӧ�.�$���'����;�П�8Ʉ2�PP�ZY�\o��S���r��Yﵦ<l
_�{L�1�`�s�M�9�ɾ�߽{f�7�t?}�P�J��*�J�����k���r����Y��d����^-����X,�ī
0�,�DE��-�p9ͷ�ז۟ڗ�M��I�i��SB�

�Z������G"t`�����~�����ࡾO�5�l>�j�s�)��I���
�O&;�Q'�ιi���Le�\w!���Cys���wE�0_Lu�^��bM"�x��24���
-�#
�i�Z�nܬ�����GN�@�<}&3�UԺ5�Rɒ��r��0�[���T�iHK�?ϲ����D��1��NI.�L�������G;���@
6���༲U����k&("
�ʌj���4���5�������CTV�H���t"{QS8�z�>{@�]sn��⫤Lq�`�GE��=�^�ӯY��u�hEv���+&0�"	�>�%��e����� 7�׫o/���Ƿ `UlmX�	��e��Y�1�.�	!�7l6��aݡ�DN��߅�g�Ɖ6�Q����k��/mؠE)������?=Xu����Գ^R��u�'�b�FQ�I"';
-��8�J�]@���$��ɛ�ߖ
\�x��8��7�%��:�J�z�#r�ۺӻ�ࣻ8&R�
�g������n��-?����`�M����p��#N�fԌ"�,��F��.�
(���
�7O��U�T��^'�a��2��8�`����Z�
*��P����K���
5�f>9m
-E��
Z
<��
-�B*�5:E�}��n��%��:N_J_GC�׊�b�\�����U0WI]�����h�j~�W�v���7���5��i�A{���˒�j�FdE��iJNq��Oi�Ԣ��$f�Y�ַ�^��_9X����
P�
���;b;��5�W����[n��܎J�i��f��!�p�
g�?�����>�OhMuʗf�q��r�h��$��i�Mݲ�W[�;�T0��#�c��k�5��He�cq?>.�%61�vO��5��
-j;\:�J_�6��D�v�z��
m��9ذ*�G��0`愿.�xɉ@��N޶1�$+[-j��=�|�%�R�
Y5-����)d�M
�V��SZ:,zLZ�n򱴮��/�	��>d���R�?N<��]-�~S����r�� (��%b(��P���A�|����D}(;�c��/�Z�y�&�c���[?����=>]�+v�F�WnR�z��M�hpDs�9*�L����>�a�
^˒~��<8�����z�ެ9���RČ*� uv@� ?%٣ٷ��QĆW��[�E����fԸ�����޺�W¨s��LS�V������V1
u$���u��t���W����V���_���d׺լ߿�9�uF�5���3�͎�
�}@�^�D>�>�~������Ȱ���� B�昈�j�
-g�ļj��L��R
�g�X�d��oAMjPάG�
,�濲k�]�.�����47�Dy
��
����}`��1�nN��
FK��@����I�
��Va9Tx��#��}�a�/��e
h϶l�m#S��^*���匒X��0�Fn�	'�

� k9�w.�v�ma�ɢ ;O���G�"��'uW���هx
�?hR�4&�P���*�I��+͉������V?�
Qk;,�
J5E汲�P>F�oS�
M�!
?�f�]ä*�v�������'괮.�/q��1ۜ/�_/�����W7_�c���sJ9�U��J���V��Y��P�2&'
K��~��54������߿
�-Q�;Ni�:Q�[�5�V�@w�_U֨��6k���a�V��*_���o��I�J�f>r5)��V���}"�xp�JZL,
��-d7L��89�]�� ��+������
����n���6�Π���J�<�f��A�L��xW2cQ�}C������ꕗ
�)\?
E
ǝT���x�ᅴ
��7��ޖ{}xi�Z��������/SV�N��.9�!o�Gw[O
��k�s�G��iY�6�3OcL�+�?��
��'7����6�	��*-�s~��Uu������\��s,2{ƕ'��O+��߆������H���P��o����ujSNr����m�
u4�0�gY�6�-�W���_S����p�9���sW�
W��ד�5A��t��A$���]0bRH�
�<$���pg<�����X%��+�>��؎T�ɾK׷|�<i��˦3J��̜
��!�w�H;�ss�a���ђC�
��M��J�c�����`ba��xi�������q������uM���)�z
�
-������>��yy
�j_�٭���L=����d>�c���l��،=�z���O)�9t���^1��d��K��n�� g���\��
�j6Ҡ��L���Z�
�ˎy�����X�a6��)���
U���D��'a?}-���l\Ow�^@��ռϮ�mXh�K�'�e�OV!�,�D�3_T�ZcD�Л����s�ˈr���c���y�J�7b)����\����h�^N�J��^�B�����lM�k
	:�Z� 2�W ���q�d���(��
��
-
���e�l�Ջ�o���;d���G�S(������
>ڀ5�r�~Kf�Z���b���>Ї����S|�H��sB�n���X7���9�&��6��
�`�mH�
-�����]Tj�/r@��
T�ԇ��r�
�o}W��$Iz���=Ĕ����X�M��
X02�eEm־���Aq�(!����G���.Vz!����=|�
�]�:n
�-B
-�ܿ݊fu�=Ź�\k��k����Cz�54����n
vB��jc�l��i&������
�3���@������ׇ
^[/�qCt�#�5��;���gsy��,�����v�R�o1�B[�\�����`�Z� �Kk�{0QL��0c٧�:p5�sԈE�Y�;MPB�!�l
-�a�TI>�G�[�$n�	2+�>2�5_y�
y��M&�#��$��S���K�i��.��:��A�}1\I
����V)ǀ+ϲ9-������
P�
-�򆜶o���*���6�م�U5hM<���o�Զ���G�:%)��T�Z���F@�84�U������U�n&��W$��y���z�r}i~s���=$-0>�
t`�i�Zo|l��ZUW
���x8�5X�U�v�;GS��0	�,�_�V3�����C�n�8#M�[��s�J�˵���.�����
ʱ�ԍ�3H�O!o߱ۖ��>S�@�-ӽ9�(�@�qQ�v
�-:��3 ��Nf΋�(�'�uF��_锔�-^�?��M�M���X}����f�ߺX�HIyWBj�3�t�_X4Z�X��E�����''M+OwxX�u��
-!��W�i���z�"wb���j
��G�ށ�W\�n뤱-`X��(1��ܑ)���
Ҙ���4˃{���9�B�v�ѭ�;ճp1���F��D^nLό��j
-
@��mRN,�$�A��?S���>���f�O�ם�{���ɍ�^������B��
���`�����3Gp5�n�
-L�"�&���sî�
���<~�O���{���8��]e��QY'�!Sv�%�_�O��)w:-S��*�/|^J�_B�ggvGpa�`,�B]��
��G���$
-�sM8ϘJ�ɺʝ�k�[�
�k�2��P���!����c�p��=1~c��נ�10��An�@͘v�
-����V��Js>���
-�L��?Et�
��F�
mɄv�6�xܼ��7@�#�
��n���Y�e���gQqM-��U�I�[X){12��u2��e����9:����p"EOM��7lS�1R������;�
���
-b
{��5=���|��|c�5N�}ߛ�)�x��8��
�g�gƊ�[E�6ۮ�1~����
'���7�o��G ���
��wg���rS�Ti��U�b�����9�G�&{~j����\��uy�J��3H�����\�+�o�G�؉QB��0mh�B(�t��jX��V�M�`�Ux��%*�ۧ͗A!�w�
 U �&���j[H�f��Uφ��߳;]؈[|���ѭKFgV`+���<Ͻ�
��7��6ʲ7P��g���}�\��O�MI2
�L)�ہ�w�LJ;"��M�^��ɮ�D�t�ZC�7
U�fPa��;��vy��e�sm��4�S���5�R�*3�
�c�r�/�m�3�k��d{�"��#{ ���O�k�z�F�zLBL'�W)����)���Z�P��2#s�4�ؤa�K������Z:�P�q8�@%4��۵:
2��[z�㍑%풷u�a!Ʃ��m��L� �\ ��kbU�-��9w`�bU��ԧ2
��i����(q����EY�t��ǫ�����j��x��
- U�����P�t�tf%6g�0~���mp��Ur�@��,��1�~ޫ�u�w�����X�>�<��]��)�Jb�z;�^�7��[����"oA���k5�_V��k
�=
J �{Y�+���vp��2&� �����vu������a!QE<]
�;�@R�OM	:
��F+��7!�b�y.�c��V����6�R�
7��ԗ@����T9�'���~�5�'NB΍��w�5�~2���JU���2>�6I$Y[]�
G��2hMj�&���]
5|�
�]��LWJ�V�:��L�2���L��S҃3dqop
��Y�����*���oS��f
�#�qcN�G�؀�-
v�X-[�c��"=;dL.
o��b�P�[[��`��n
��������
��i�{�
�����>�ѬDu.���{�Ê����D�6d�";a%�c��AiA�_V�o��ޕ�1��ن�[/e�r���b���R�#��
-�%���3�,Ng{e_�_�r�����5�|j:�x�fӜ
��nR�ί%g�W����j���ˀ_`0�1�,��[��6p����D�͜�q��� /��{��;2�=w��kH���)�b��L,e���@t
��"!��YZ�+�O__O�f�N�W�
0�b�o>W|����֠�br�u��e�5�H�g0,�V��JZr�� 򓺊]�j1X�+�
Y� �ZiL���S�D�M6��
�US�h�Y�
U��
Q��6����K�t�CY�����X-�c�G�f���y�ati	�șC�a
RJ���l�H����}*N��ʘ�k�k=�%V���߮����&����S�W�hW	���x
-�������{�[L�����yoٽbg�a
�����a����#�����6�E
�{�`�K��m>~
!���h��ܗ!CnX��H
_8��
1���vy
#��
-})4
&Y��I����1����RE`}�'�Qн�l���� �#���Z#;��d
��_>&�^��b�W��~�!M$���‰Y�o�l/$m��4P^����u�1�jU^��rr�y'&�MJm�*�8��L�8�ŊJ����K��Q��jG�\�YC+L'"�-�
T�������8|E��Bo��u�Q�J�$�}���Et_H�`�('+�K��)-�����`�W�_���M�����Җ[����m�%�aS^�9�>��b�EPEo��:��C���#��߮�L������@
[9�,���4�b)m�D��$�
�)
"���{��υ��k��Q���Z��~@ֆh��7��G��K���뛁���
���}������b��ZW���?��ժ{f]� �E+�'�Վ	��}��)qh�����+YqXp_r����9p��N�W���!E�jS�0��󺋺/�ں��2��c�-��ك���ч�Į?�e�iX��t��_2q,q�?�E�r�g5���y��W�ΗČ� [...]
-�Nn��dpT�4�c���8�QzӾ�l��G$I�����T-�vU�ZI�`
M�ߣ�8�l~M)�'F<T׊:�}
9؞����r��P�݄d�ʚ\9q�o�W���������¯��.�3%� �ԪH��DksW��f�rެSYS\��DI{����L���w.�k��
e�������˺��b�^���2�+�/���O��'P�_?�ei9�ED�M3&�d95Gk�
���V�S*��*��~y���Y���Tvo���c��jFLƘ?ڰ6�]��97�s�څ
����*oų*������N�����l���k|jbK��]7�WY=`�3_9{f���h�o7Y�~
�^w��S,�Б�th|��\oNƔIe���F�ۃC�
-�
v���'�������IG�߆t�v�q[�8v_
|
_#���JTu.��=��V�ݵI���X�:k嗈k5�����
-L�K���*
�W���"��
C�^o!�;9�F��CF|[b���@d��)bl�E�K�/A䎜k6G0�L���Ϛ�<K��nH���;���|�1�6�_C@��S�ո6wF����T�N��3�+����+����3��o��V�8���Ӟ'Y�6��C��t=�[о����+��V����%�M�2
�d+���	
m�HOW��
i�M�OU?L�w���;�;�� ouv��}K�x��W�~�K�ey�iQʹʂ\����@q����(@Z��fJz���Z'���oC��m�Ep�$���J�����6$�T~̀r��t {�rm�sX7q��~�s���j���4�˳�w� E�T��!�5����
G8��t!f\�l�l�Z
@ʆ���+֠��0�^87������v�2����xTzz
��e ��G�!翅�aẛn�sh�q��b��@�__�t�����w����[�et�9!��/���;'�1 at D~<�=�m0�`\���8zM�un����nN��� [...]
��8跮}����rP
C���)��[�� ���ي�x+k���h�U �Wv8�
-:�CN�:Ҥ�zjyw�]/���]
-�e?DX+��������/��
��#f�Toy�����)`��LïNRs0�������&�
-�?dx|Q�'��~�j@�R������h�^ ��h~\(
-��.���ˇ!x)
��';Y��&7�Yj��Z�xX�T�FE�
��Kk�@,�)b7�Xi[�bT��
�=D��M��ټ=��;�m��No�z���Q�cz@��X/Q�����(N�71��}�]vI܍ɣ��)o?>�=����ƌ��S�Ɉ�J֤���z��{�[�ٷ��^�#Qb�]�=io�ϲ��|
�|P�����7ՠ�(j[S�t��GF=l��%@�L��V�2+u��MR/ž���"�x�n�����ꗀ����1�=��?`p�	����PTen4��Ϙ�o��:���bz�A��9ƻQy�O���B�ԑY[
���:�٤[ʈ��ggq
endstream
endobj
312 0 obj
<</Length 65536>>stream
-����2�����$��)��pz<Vؙ6ܺs��g�Q3ߠ�ݩ�8$�T���*~o�j B�u��
�7{i�|%ڼ�������k����tߏ�������ѱ�
�?�1����2�i*E�3ޛ0�m��vݜ\.�>��&?��n�������=,�=0

�m��D���9sT���[�׈�c�J�(�X^�
�ZSa�t_�S����t���8��e�?
*��5�,�U�u]}+�6���:�|<��f��
>i�Vs��m���2��಩��I���b�´��j~�
;���c�}��^��d
-{E
�V�
��ۭ#�;�V���oxq9��?��	���'Zy���[���(�O�e�X�Os���"}K��oP��{b3ΞK�\��a~��A�DQ��4-�3��u�-�!/��B�v7��kս�5
�Emu�ĺH��$c 	����6��hb
[b���0����N����9�~/t��gたM�}S����O
c�U
�
�G���d#��hgkX5�T	��$���~\u��<Z*�5`�1ZT�8��~�b-���ǣ��:�?&��*M��3=�Bmf݆�9�8B���
s��������������Y7��t�
n��в�b��v�˵�y0�}��t��t~>8��?�[���X��'ksM�pq8o�x1Xxz���}=t��
uO�;����q��>
��-���N3���Ґ~}�s���n.|�H�
_�㺔�[�~	-��v�	[@+�B
-TN�4�S�P�rƤ�l"�?`]�čFQ��#���,7/�UY�Հ�
4�g�3�b
���!$ ��6��P{�~�
i?C�"f�С��1��:a�#bw�5��5��=�(K�1Ņ�o�I�ڱ��צ�����I~�P
�Ӥ��E��	�4�ͬ�Dc���d��qS����
-��
��I��Tė���S�'�� �/��@q�{���GG�֧��\B/���>��W��+#�T3ؤe�m���kĄ�
�q�I�����^�Qٳg���71�j�>�_Ӏ�d��E=J�G�N{;>LZx2Ovj�>0�^w��l��Itd�-���4=|��̫���*�������>��R���Y��Kg�*G̓�
,H�0[��\�cle	��3���%��&;b����tv�����@���Kvh�O��R���ߠ/'�˰�ɥ�?��r[��kM/����R���>���4���f��
-z���U
�n-}J����*��ל��wͬ1?� @?��ð��7��<��9O)9����E�Gy��
)�.�O�
�>
$�6����]9֥��S�r`��!��*b���D!fk��8/�N���	՚��:B�΃? r��m��B��Wz��PpP2.��[���l����Bp��VO�ǸԬ����̐h��:�v��/N�5X����*�-]��hm����LY�l��" ,��
{��4�(_�?ޟ�B�}��+#��@�T-l=)�ʼnLTn;��qwE�ӗZ��/u@
�
-�/�f~=�Bo��-��J3�C��lD}͜\��E���u\'[qā�G�	[]؅K�;�C3��f�w���W�HP�r��;���-�@�%ڃG��
9�(�Y��

B�_:\�#����1:��{j�/묉���jY\��]�T(
���Y2��~cV����L7�ʺ@.�_�L�-���Xa�x�z<��9J�8�O��F,��ުH��� ����eb;cn���>	�e��V��
8��K.������~T��i҇H�v|v���U
m+�sk�^����!��zں����eM��D��0�A����y�� B���i�j��X"�����Qn�슦;-R�g�H�E��vb��[�k���+���Pk�
�[�Ѥ<�´�ם�3<t��<�F�t6WH����*z3���
9�RtA�1
볈D�+@{�DEc(����Z4v�������hD�_֟��7ݞ7B@#�h4�fì�x��C`e�XaJ��(s���xz���Zk��PO����Kkd	���`�z~�{�&�#�
-�W�;]\z��<��{���"��<�3u�]|ҩ�̰��
�W'��R�Y�O
A��������Q{F^�fl�!��F6Uo��O��EvR�����_c�T�������KN��V_N�� }�T�Iy��Ȳ���t�W�w���~�ء��
�i�mf�<Jc���t5iT�+���6��g���M���xh�Đ�ݧ��
A��^Y_���Z�lc�u���j��|��7��+,�阌��St��7P��\��o6���U�����MEj:4/�� �lm��M��Xj(�
aI�d�co���<��ZϹ��M�~7���ٝ��;s/��ӆ`��{�
��#_�O�� ���g��*�H#I�3�s�|l�טm�$1��˚�/��؄�n�ւ��m��v����gث���W���­�Gg����i���x�iy$r��E��\�mUZ��=yR�%����%��
�f;ۢ�6GT�юb-��P���6G�
��<
-Z�Bj5ٗU$��<G���n���3
-�.�y�.*;���hZ��v�K�j6h��V��w��}�
֋;�L��Ņ��^�;"�\��Ğ����w����ϽMΟ^N�ʨ�k,K9�C���usBt��1�(�c�h������U���eNh
x~M|���)�0�p���i���^�ϓ��-N�{�n
-��v��e6<���lo��%)$�h&4��5M8��%��t��^$V�uN�6�wq
GQ�?1+GՄ�ş���
��O��I-%�Oh��Ç�d��_}�FE��=�O�lYt!��9N��&n������:�SPٛs>�.��xݎڭ�bm6(*�b���ZK��cc]r�^G�E�,�k�
�B���� �p[�
>o�(3U��5PK�=��
<���\�yf�b�N�
-��
�
G6yv�c�`y����Һ�eF���c�C�Ýl�d�t������"H��3n��pa����LZ��vH�_m�?0��N]O';`��"��
�wRa4L����Y
Na�zD
���o�
[s5�ϗ�ڝ�dN���NN��e��7↑]�F�+�Te�/
-�О�2�O��� 5/��v�|,�[��­�
�o�c���
-�K������6�
-���.������Y5͑�sf99���h����c]�
���4
��=��z�(������$��R�9;�
jJO��S��``�M|���
Q#}g�7���Y��.Heos���� �Pu&��-r4�4~��u:Hޯ9O6�2��pݰ��l�`�%�iH[U� �I�
n@��#7�M>i���q+��0�bvIϼ�๵�$�a ��pK�ݓ�jD�}m������Z�P�q|�ܰ�Y`��{�"�9��0�\��o�A�U0
��;�O~�*�]̤k�D0���;�\0y��:�p/���n/�Up3q��yN����+��R�k�_���-�
-�%'��C2�
D�>-<�A�2��<�Q�pht�[��;!���^M�f-[��Y�
��c�X"OD�e
�������9<�bNjH�\�u�%���͖
�\8X��=\��Me�t��_�I�z�||���x��r�S�"���I]uJ-�F�S�`�d�n�{`Sҭ0!Kf�sH��9fx��o��+֒çn�r��H�BR�q�L
���Y����h
]��:�.&u?��
��g��뱂�3Y��+ߞjetN�0�pT��S株��[����jMJ��^v1ԉ��铰=�_������|��0��Y��"&(X٩�� ����5��
^S���l��,�+j���{8�]���K���au��j�PM��r
RvA>�Q-B*V�j�^O�음�ӵh>� �+��vr1g����
-��@2&'Oj^��c�
�7ejb�W7{N��k䖍�9�K�)�f�+������M`;*���ݢ��w�8ɟ
�r���
��j���U��AR�|
-����C6��㸷
��t����4ܵ�84
�����{���`W��m�m�:�|kL4yʧh؇���&� Z
-���G����70³
-xB՗�O_�y���K[��7�c��
�
J��;�
��\���g��L�'�w����>C�ŭ
F�FS'�%��n��Z|�)g
ш�+(� <h͛j ??�B5�^T�d�뀅W��Ϲ'?��`}�m՚ۋ���k�4sE�(�}���;e��XL?E�~���86]��~�n�#�Zo��k�v<J���3���)GՔo�J<S[���}�9%Q䛣C�o� -��$9�~�q;9�y|n�7]ܾ���轍���W
�'�A�>G
&*�t���5d"���
}����_�J
ռ�ΰ�+ə��U�M:�y��!�^���Ka�T�J���Di1587�;b(<f'�;
���^��ۿ
G2=]G���SX_�I�A���96���C�3̕"+g�5�߫������~��5��#9�O��6?�5��
� �E%d��
�;��Q�����W��
w�ڰ���-��f�!e�xl���yK`;�t��އd�Дo/� Х�O�;ҝ�7bG�Q�߳[o�#�O��~����Kg
t��
�h��}q�/����q�M
�I��%�	ۇ�g��0�/�\��+�.b��M�d5�l=�pIb+j��
S%���B+.9t���^�-m����,���A�{�9¢�
�Т1���6?��F���`A b����o{.�a�Q��V�l
����K���1��a
��Y;��tX�k`���
��Qi��z��
�E�I�mkڑ5Z%�"���ngz,����
�A��B�w�����Xtn���
KF�d�>q/��	X��ҷ���h��W����F���~�/��gT�����;����
�̂X��
:�TG���^��[�M�o~�X��7\�^���<��
�� ʁ������>U>�jc��(5��@RoE�K�@�q���fc�)��q���
�Ï-
���]������
��
e�c�o4
-��딬�Ú���3X|�������`��!�i�M�o/٠���0��n|b����^���ޯ
�X/��խZq'������
{⴨?
����`�A#qo1���9h,�����7#;��g���
-
�6bxlL�Z��V�lbټ�+�r�.��ʦ9Ol| ���5{�Sݣ��x`���E�q�����{�y���ݫ2�A�R�;Z��d=���ͧZ��5�2��g��� ���yƑ�@�(�Y������b��^Vf۠É r��� һU

x ��y��Ro���{Z��p�`,�\r�9�-[�mL������RYk�z�^��äp��3�3�Av<GFR ���m���t׈����1���:m���6�"��MO)��w,�4`cW��	ᚗn
0
-�!(�v�\�c��9֩�~�J��������V:\��jYvy
��q��-g�U�Dž���Zȋl̳�Zn�;���b6�
-A�4	~�•��ۙ���(h�? 
�vc{��^��~�U�Y�]9��B�����<��z�)���p�
�o����`x
��fߗ�VΓ��8;h�
�K�n�t�s�B=��I���I���5��$�t
�m2-x�?(�xmFtK���I<���T.�G�ZMw��F7k�M��a��
ˢ����<�T'U��^���l�i���ȁMp��䳭�y�I��x��7�鄇x���sZe���ԂW/�G�{w�-^�;�t^ ނ#r�
�뢍�k~:�ƌ5��Q�up��@�EC�q�h��ɪ
<�
: �w��L�۵ ���ќ;�y9hF��bU��{��R�Ҟ���
�Ń:޺��g�ΐ�ޫh��V��A���6�2���+�(��jl�ƻ9�O�Fp�+W3�٣�
-ۗ�G��K�݊����N���m��3��^�ڿ�ʼ�η��+��-�B9 �\&,�Eu��J�@
_+
���mn��&0f�UsC�[s�~��aO���=�K[M�}�����
Tj��LF��`����
�E�f�C
-FN�~u�r�r*v
���,���iA���7�Yp����9�%�
�h��)?��t��X

�"Tb۪�@Gbو�=}�d�]��d��m
h��ަu��Z�
�G�k�V��"⌍�@�z�㖹��Uu�!��[i՟͸�-� ���؄Q��j��g��|1I��mtQc��}�+���U-�M�V��E���S��2!u���չ"��p��8<�5o?��#GK��(u����0��`��(�{ҌY�m�	Թc�yy8S��:	�+�O��D��
���ڗ������n#��\}��A�+#�O��B��Z��������o����O�����;	#���*�Y����
Y�|U'l�=�M��U�S=��?�,{f��ChW A~>n8)�j�O�p�7���в}�����F��%
�����WᆴK��>z�S[
t,�=�f�p��,�� ���^|u
-�
�Y
��g���y��Ԋ�6�x�D9��

-�m�";��U�Xn?j(a�熣ٚ��>����&we�/4JED�}'�l��*����w�կ#��1���`_/��z��(4���W�k��sR�B��B�xF
-[���q(��h���З��l�_Բ�
��]�m�+7ߕc;~��7��7
Z
�����j�p�D��>�h<U�٫6�Xa�5j�$8��k���NG
y�˴!6�I�\lk��c�j��
R����"��ܡe�᮸X��������(�
-�U�(���[�P�c��
�����70��gX��$�k��]'����2�����~)%9�'!�%ݹ
f���ki(�
i_n��<�
~:�
-&�����E��‹VW>��P����Y��'J����Á�2ia�Q���VTM at -k���ok塚�$���֢�͈���M��ƪ�o;Ik"�KҺ�W���*9$��Ӑ�Sל���6����˪&�N��
?��~4�����2^�n4���1��~މ�j�
��b�
�R4������q]��
E���N��[�Z(_=�w{;���n,=MV�
r0��E�ZHS�
-��q�DӠ����y�	��ݵ������t��MlCLJ� u΂��r����sJ�F�
-r�
!؇�HM����:�uT��CU�/=���d��H�*/������i��/��l��+�Yy�q����c�p��=v�<G*+�>���/��qvRՋ� �����*�WN�f�����ʨ�H��M�z��y��Q+�>�������]���q*i]�=`s�/���ן��u<���ml�������u���m,�$�N�Y���.�kICR~
-�k�e�9����\
ve���9F��
�k����d��Y8�Q��45�s���cW�v�ӓ�
d��T�چ�K
X
�A�B+�
r��w4�b�}PC�?�(��V=;[=>�M���a^�����l�1/�V?��j�^RQ
e�7C)i�|��
�.
7zd�
���G��ډ���j�[��?v��n�~��pP<}~ j���VYq{s-��-]��h[��=腖�P?m�6nn�4O��S�/��U�t-,�F ۮ
=��~zWμ{��k�����oe;���. at c�_�ʹ�w
T�R�����~&#^[���&9\Ȩy�:v�ݰyžT^/�ȴJU�����7Y �R�X���jK��A
-��_Nj�����൴����{n����,S���X��@�l��p�/��+a9iN�P	cSuTӬ�qӴtd.���s�OuoA���_9��+0l���M�n�#GP.���_o���z�c�6�
�#eA�uH�pbU;um4�v��77|i�QyD3n
?hD��lB%Gz��.K�*/��cb��v��|���iG)(LG�ʌg<�|@���R��/�+���F
�2c�Sszd�!��%�
-j��q�aԈ��M�UX�1����и��i):��
��5��e��}��_X�V�"�}����j*��K����
�0�QaEu�@"V���_�4,7CU�?�d7�r:�nG���'��41��
*5
A�g��מ-���~<w������|!�x�x�^�Bj��{��վ��{��>�c^9�'
H�m���L��T�\�:;��.�o	
-'`�Sފ�� .����L
-~�t�m
�@lJ�=5�.�5��}��펿\]�C�x-ϳ���oY6w
������k��ՑF�Wt3���Mv�"�Q�n-wH
-�R������9��ƽ�'z�����fQ��y'7=��%��oҜ�����M�
���q���v/(��y.'��"
����ٕs��^����A�_|g�e�ҷ[�z
[$�S~N�GZ�T�xw�#��}��m�ǃ��
:s�95����G�
-�2=Y1��eɡCs���^)*h����UX�3�X�v�
�, gvE�2Ƙ�Eq
-��!
oI�n
���!1���ϻ����v����D+Os���@�w���q���3�����YY�~_F����Ӎټ]�� lw=�����t���d�%oV�yX����Yƌҍ�d�l�����-F��묈z<s�(e�
�Zg*�((]�g��g?i/��r�W�dž���f�b�������/c\>P�H��

�։�O��sg<�S�u�t5k
w5���7�&���x�_M��]���b9� �v]��S'��}��J
׮��˿za�
�v2�5�����h�	���!= ;�&�x����(����"��s�N	n�$��:8�Y��U�Y�w�欤�:��Y�{NeK�P�U����گ�R:�:a���#�_wG���ehV�a�-���r1�rT�ݚ��ʝѹ�J�_P���ҩOC�e����-Z���/a"�ےS��{��`].HϷ��|�5��ߐM�-:��>
R��W��i.��ؾ�Pu��K��~gG?�rg�6fn37�b&����(:n�H���Щ�t�c��Q]����|�F}Q�(�F��]�S�
u<;( �(��̏�_�W��ّv|���@�`� x�쾌j���/�	fjHl�
������޹R¤�~��WJ
+�14Wn���[��
te�ZIu}���`�3�N���.���!X�������U���rd6knuf�o�`
i�/ߥ����V�t.�]�D��~r
+\��{��_�X��=$�:1�е�+XsNȡ���Tw�����nu�!}�!6U|٢�`�WoF�k��}U��z;��:���
?(�
C3"?
C�v�N%{���n�)�շk�
����kҌ*U�p���oPo�Jq�r�Y�Ȯ�.E��ơ�6t�
��@QW>^sǠ�I�Q�)����"&G��z�c?�/���f��
5<� �N�S��>z���x~�վ���D\
�	��і����SY"=k��OB��0�k�c�0S.�{ɸ��_����8�J�m�)/}\S2
-�����/�*��`�������Е,n��ڄ��Z�����}�k����3���F(
’?
�p�r�$'��WS����``�Ҹ�k�6l�T?87xU4�:]�^\Q�.ZЏ����g�)"L�Wkݾ
ͱ>�� �1ż�l�-��
�R�s;E�
n4:���6���`>����V�G��n�+���{6!�;������
�d�����"w�ĽD3T���3{'���u
�����W�*'
�x������ ����/w�m�s`t",�g�T?�7
�{�A�0��t�q:�_��#�}�j�M�k]��B��*�_�w�����_6�VQ"��>��
-�n�}�)S~Whhc��@�Bw>Q�2\��r�ً?���k��i��w��zL}q�MG���(�}��g9����%�X6rz?Ǵ�'�A�$^����3|7G�cY�K��lKiq�y�R���b��FtֆHy�j�#��
�*�ʀw!���Qˉ��NVmf������~��P+v��~+�E%���F
b�u��Z\O��8��Hw������͉����v
-�2����W4��*'����DϬ�����}k�F�SJ�G'va���0�5qU����"��w�ԷU������3N�K�Dn�7�p�yށ؃��z�c�psh�f
Α?���#��#��

��&���"���K�>6�߻�%��k(��^��e�?�vѸ1�U��i�ux������S����O�}��{
��͠T��
�32|�8��)##�����g�Uzi�7���fY���-����Fy	axK�4K6k.D��Y���1ew��'��ng��L
f{�rT᭎���ъ�ҝ��}��HT�'�UmX�Hs+���~��vy���XǨYbb�:���n���.b�(�A1��,R�E�4{��g�}�t�j��h	6�?yj>'h�	配���gx-ɻ�Y���*�ް��%%I��U��c�r�"�2��]�:B�N]�X�2�kn�)XP
#1���8=
-��	G�r�*JL�?9K��n�3���
H�]��-4;����ݭ{�$ɪ{�X�vH^���ƣLiea���3a�g����Z��G C

�{
k����{�z�w�����:�r��ף�M��“$H)�·����M_�����e�ۖ-m�h�_�_�[�'q[�mvk��LZP��`2'������I�
R
5�|{�����p#�`����	�_�~\�9�ܛ
]a�z�x�J����h���^��3-t7�(馍�v�n��4�[����e��s��s���M���a���^$w�ö/��l�.S��;�6N�Y�Z�����Qӿ��a�
�G{ө�o>�^y�$�ǵ]�d�*v�Yqh
����NY���[XIJ�X~ Ebʙ{]�%�5����p�Ҫ�8K��.�X�&�:�z#���e�����v/�9�j�OYg-v>�:�4}<�K7:f�oD���źLz��0��=V_����
�I��
-���d}���uT+�1r�=H��&f�����͒����-���7�ڀ�p3
�ꬻ�Z
-.���F��$���RK�G�ש�q 7��̄��D
�O[`�E��*
�Qs�!4O(1�U�MhQ��41FU-:�,I5�]HIk�m)�ٗ�
\Ȥ,�C֎����N�����H�J��l�q[n	b�x�RF���Z�
-��I-N��ϣ�Wml+d��^��
3�b�з��(�y?$�j n;n�]����o���몸��"ז���+�{gG[�3�ժ��j
!�uU(�©���ވ���'��0�[��(}ǥ��/�r
X+��#�:��۞�HD&Lk��nԅIjV�)���z�]��(�O �<S�k��'�T
(V����)��]?���c��=g� ��'Ť���y��^��!RzY\Aq�T|I�tg��:zw?
�%�?o9��i�j��q�sR�I�����wW$JK��
[fb�G/�by���2;0�Z�c�"�	vj����_��:^v
-E��Z)4ǪR�� ,D}�do5<��ĭ�*w%]���
d�,Uu��J�s���bz��|�q��Q���V���W ����ޛ��d�k~�n��2	v���l�R������G3�M�W�ؕ�2A�
�ḿ
nl�i��AG��#��E��
�R�n�^o���"D!r��N����e�8l���C�T�A��.(֟o'��Z=է��mf�{
'O�����O�;k�C�N��kPۙ`V>w�	:*z;��`�R�/�D�`Ã�l��oQ���Ǎ��+�����C�h�S������ӝ�ne(�B)}q
���pު�Y[���yz�RAv�M3�uLj�n�K�X
���?��m*��aK'e�q0´�콳�N�QփR��W�
W+�
Q��J���E�P�)�L6�	7d��i��٭5Rx���waMab�v��pM�bC��
�3�T
�[�t|W��U�(�qL�}� ��'
�"�����
?O�����;�k�p��)�����sE�Q�j��{wr��8�^�j��tAa�������픲�����C�,�P_����!g�\|���^���\;
�m�)����4K�`Z���^i�e' J�	�
�&Q�1�V,��Mrw���g�J��U;���<�=�=��5�l�hr�%��%�p����md��+c�kS)�#nzh�k�`���jç��D 4�V���`�0� ֤�-��e�������6����S�Y�'Dk���R�ʴ���4�Ƈ���m����j�Mw��
jw��K5��'�2$�|�ܘ%k%�>6bBW�/�z]��Tm7�,�/��Ujp�B]�n�M�+��i��xM]��?~\2��T�!]R7<CO���Օ6���c9�+�\�۳�O�����}_
���jT����i.2=+P�}"�&�3x�ʬ@
���1VOH]�	
��Z�O���u�F��+�d�2�&7��?���y�YC`���M�i��{�������!�
�X�h) [...]
�ƕ�: ����q�o{_�`z��w��\�t:��y"ǎ��7�;M��[�����f ��v��oCk�6��Ĩv�iޏ=��n������{�
��A`[أ���
��:_�
I�*�	�vv�I.J�h�G\/�T�z�l��:��
-��Y;�';���������܋��ڋ@���Cm�X
�5
ۧq}���`�
w-�z)��A9�v1�6I�<?@
-;��Y|u�KN�W���O��llDm�.�X�`��Z>�ӷ ��*�(N�+0M|�����ؒ������֫�?�y��LzK����TN�~��4K�[�?Z�f--��$�:�-���C�¥�v���V�ĝ
�
��"
�(��ǂ;�uF�
�U������qI�� 5٭v
;a�V]7*��{�6
�
w }1b�u��]
Q�F�[y���娭����
��|�^+KC�7���i��N��D�#s���*��k�E�p1
����[=JȪ�v+���e�<�[2o�LM�!���-NNu��8v��C�:
sd�)k봟�*`�F�����$�ύ�9t=��tr2?6
SX�+pA����,�1es�r�r�
�fǼ/�\+�
��Q�ao*���c_������]�ٝ5o�1C�c����s�,�gԲ�ӝ�q�4���k�˝3�<��wtͯ~��n��&v�/A|��]���c ��[-x��y�u;�ģB��}k#A���P˻L���A�����K�	�-��2���O\s�q��e����$m���7���O�zo� pA���>g����ʮH��,��m%�j|{�~b�!s3mI�k-8n��?�S�`ޞv$w
-G��z"�#3
�.�j�&Z�k��}^�zP���� ��� u���[�Z�l��2+@
-ΐ5iN+}b����+���i۵OCs���/�Z�
.�
iK�[D[;!��ذ%��+�[D>S(��ymEf�^��I�� ��
�t29�: �-�����s��~ػ��e��}��̀�����ha�
�?��N;�9�R�
ʧ�?(����
����O,0��q:H�mE`F����j
,g,��7n2����;��@�vd�U��F����w	ni��a�0T�� ���4�^�
���Usq��x���ks G
-�z��[	� ��t�9��\
�)M���Yy��Z;�V�(��BP�S���lA؃B��04w�wW�:�Ԗ�7e$�����.s�*I��t�{��;W~kٯ
�VM�z�%y���Ϛ�;Mr��ɣ��
-l�Jr
�+ʋ
ܷ�0��@
(�B%���k�i$wd5��;W��E]0I��v;��@�˰�j
J���2��u&�,�8��[���X]�ӭ��U����Z�����HBe]�VH,��6�;W�� ���%�ߛ(�H���Ɋ�R�kYM�?\�"���
�=S�7 8n�D=oC���^��h�
�=�zf��7'{a�	�l9��"�=�Ы"k�R�
�
�Y[�57�|F�36���L�U��Քdx(Dm����'�6�O\�UZC��W?�t<�5X��GR��Lg���{9"�Q�<�ZL���r��V�1��|=hwV
��
-=x�i����D-��A���8�����
���]/�_k��wb�_"c��롎��	�,�"�'���xI[�l�qי!o�
7'���zv�r��-
�C��
��RmlޒsuqZ��3׆�lvA�׼��&�up�B��y�`�W�IzXr�9�1
�[��B��b�ϥ2p���%�9]�$�}�0�~fC�<n��(�^���xCL�b�P����c,[�PQ�gկ���k�Ae;�/j��m�c:J�m�=���/������d%�
x����[���3���,D͆�i���.�J�X{[�cpE��ܩ����~}
U���~4۪N�FK��HM4�}2x�@
�@6z�jGpT�6�����[�s�O�Aa�c@�O
۟�]8/�2���RT�l�B�M
�4�E
^B��KJ)��7򃋎�V�Эط�[X�z��
5��j%�,������ w����^�t��}���T-
wiO�c����������
?p�zs}l�C�l)��72��~ȗ���V��俛�5y��o�������}��s��c�&ٵ���w��=�����\�~sϦ��P���
�]-�z�,�/%~f��
Zg���W�r��أ�p��\V凤ڂz���r��M�����o7��8
^��V���;/$]{5Y�j�}6�V�{�fj�


����:<��e���z�����LI�@&����jx��+)E�=p7�7���
W�tf�ݧ"�'��\w� �(��D��ke�\�q�LF��r3Q�4|�m�:A��]Qe�ÿ�`;�/����t�W�EڱS�fl��^v�Ν�@��_ط��
����E�J5��,��9LFxz�z����
fѤ�MFS��\G�Y�D���:̔����]�s
=^�+�J����F
]F]-u}�^y-��+S��ة~ߖi�]�
�յ��RN�^1��}z8�����s�J=��F�_�!y;��N�F.gmz3�Po�d)�17g6<V����u�
Ǥ[�6�K��̊z십I��6l�\��M�����|��4�Q�mU�o��;�*%���R۬r���.^���k���I����L^������Zrl6���BW��n��ړ�Qo���_�zP
����W1�lD����oi�Nn=�`vx�����J֕4�y��1��
le�Y�3���f
3QP��
�递�㺢�#nx��KG�����i� ������$VE%��dOe��L�=�*��c�����h����ش�,���C�‹�(B�Ս�:���R��X��:�Z)�:��
@�gZ�V�ʩB���Ѩ�nK�	�{�݅��F�'��R}��M���@<���0�E;�e{7��s��|?����Y,Q��K�?b�G�3o�j�
Smq>'6¨.
�K�9��W���<�#��C��Z�|�B����Fg
]�J��
oO!�lZ"n��
-�M�r�������z&�peY��"dL��
w�yg���
<�X�\6��w
}R7��`���Hqgص��M���|f������v�+WK���w�:)^#"
�
�C��F����;��-ĴvG�3��7n�����DT�}Ե������������o���<[����$?L�<~l~�
-�Mɗ�KmԷ����zbK~�6�FK�"�f�8/|A
�Ψ.\�\�g��zF�}��;�C��N͋2r�\��=�T���0�+9
῿��+�L��eM��S��l
D�TILU,嫠�V�o̩%���S�����_K�^�|n�MP��<ڍ�`+&u
e��|��*j'˹z��RR�
a��X۩��Rk�{�T^|W}��)X���0�[���䶲c��O���]{ȋ)sb`ɲ{E��2�<~<��3�� ëP�s/f?W϶�q���y�,W��S�wܬ7k%ys�,�>ӆz*Uq%X ���_�R��5Q ��!�ړ4�~5i�;:�[�n���Ӧs���l)�ISǣ���b��Z[�c+b�5*�W���ꯝ�S���|
f�[�L�}�2���B�|�	�$����~sǧ-���ýT���I�Jk��E���r�r��"[���F����I\��9Q���֬��Q��y�~b<o������R��k�l��A��q���
-���C-�]ʨ:<#���n�=C�ۚ�

+Lj����fC��F��Eͨ�V>=Y��NQ��yH�9���3Җ�h���x!E��QCRs��ŗ��Z�z��E:2f"o��P�5g)y
*�"��#L�v�:�z*����1u5����u���94�4,�8�
��sbF]ፓ��Ы���4�,��Zo�/҅����!�T�X8�a���>OT�9?K
uM�h�U
��$�ڞ@����
�u��K�X�p��!��k���Dm�$o �g��>�c��D|����mK*�;�z�?����lB��w���,�S>�� ��N�����m��]M-�1Y�/e�r�}���%��00������y8��������"
ԉ[��д�$�։1�ױ�=�8��Oo=J$c���7"�}{�OT?����B����*=;l<
���X��
}��4}Չ�y�X
��r��Qp1qz�>�Td�|�Kɀ����(8kә����CA�1��Lwx�i<�*+�.��v�0�
�U���d�z<q���h.-.�WAwk}����cY�5���� [...]
#P�ɋo���q�����uN�u1��
,���^��H#��b���jq��h,���3F/q���~�iY߿�j��g:4�������X� �*�A
���E��}D�&�\��кM,����yO at fIf
9�y�~`�>+/��F���ft��LV&[���
n�!���8T���i�љo�M��Ad�nj�O�1a���=�_�
�o��fX���ֽ�V�$�۴�=���NSM��ՓQ_'��i��$��
/:�%�ެ;�Ռ����q(L�2�8ᅄ���bA��c�j�:��
�"�e4��NW��HΆ�U�O5�+fƺAuqRP�ȕ�?sm>~�hBԫ��E&����yII���nX�b�zI����>�^iLt �?��;�oBW^��MiE�sk3�Rj�����Y��Z�C���}�iI��0e����??9l.NeEU"���xy�5
-eec� Ӄ�5ά�C�=�Y��U�tT���w��'~
9�f`��!$o�rp�4���,�z���9A����+
C� ���O��"��$�
���
*�>�:�^��:
�(����1��x���]����8��@Ƈ�.M6�6�k,���)NpHy����bֵˍ��E2�Xz0��B�=w�_��Z�B��<]����
���+���%�g��������;�J'�?��������^
�&�8t�u
�nU��s�ڽ�� ����� �-��-�^Ϛ�
��˿o����.�1bXA�,�g=*�D��i}��q�`���۟�Ǫ���f����d+ߨ<��b.����
���F�� �Yʹ�}�#	��p�����������8o=łO1<:��C\��]�Q�
��Qj^`-��
>�*����w�ޤ�d��(�bPn���)��ZG��
�+�ww�;.&�=w��>��;�f˂�-�U��x�0rm�XJ��IO��§gM6�	�
e8T��h���#)KӁ�RhR�͢SuLT��_�UuA�*Zo���8Q�Ζ��n�赩w\%s
�+{}�2�El.V3�x�چ�R���u�^�P�LR!&9��b�J~&�@��E�Y��[����
-`G�0���Ï>_�Vi��;��_fWu4����{1>
-���0
�s� �aQ�L*�uS�,�S���V�Q_t�֜�u���z�/JA�5l�XU\&���Z�B�ج��F7b ���q�����
�T���`x��Ly��� ���q�Tw�����K�b>����,�4d|���;�v'����������������z�BO�Ÿ/n�|������|0!�Ŧ
Ҙ�nn~!>��N��k�Sk׃�
�>��操ZU(�%=�n��Dd�5����`���ۅ.esѲ&����mU�p����@�@1%���
��F-D��K���� &���^5�s|�3E�>P>�
�R���@de��G��7`��6���姚��	WP��w����e~�d�7�ƨ��M�/5�8�Xx�9�q�Փ&V�*�.�8�A�c�
���A����uZ����yś��PC''G_W�~i
�~o��щ�|	L�W�/��¥s��I�#�=�j݁�~�Dg#�9����Vwp�5i�lD���+�
�6<:(M���(U��
fM��,��X��m�m,���p	.wA�)� �
E�����X8O-�����%G���Í��a�RfǁP�/%��!#����i���ۃR}ۈ�a�1sX%�y�Fp�������m�N�d
/��˧V��pm���y
��P0�a�s�����}h�'�Yp�+��5�cJ�w
�ڴN�����2b
H�!^_rK��	�E>���;�;�
��4�>��i
iT�K�9�y�;8����\�@�����
Rf�L�D~2�
-/6��˄)��y������Zi0Pwp"9�,{G֙#��"����d
�%��,���$"��ڳ�A��Ʒ
E���/}٣-, M�W�*ʰ�^;*٪�?�ZYmS����e��Xm$�/)�K�1_�ru��o�f����@R������U�
#i�6�T��N��W_�J�!7C��6{�W@{H�K\�yz�G���x��^E�xM�K���/�Kj���6aҏ�k$w�'�FK}�c���ZcU�o�-�M�Ҁ;�W�XV�.?�
���P�3�vf��|�S-כn2��1��l��3�K7����"�IJe���>��ګjeEgY�)(=w>�[X����"�����o�\Ƿ���B�-C��
)���#ww>�\a�{�W�*f4Mb|k� G@��p	w���䞜gq�EШ{$��zh=:S޳�n�Wk����9��lkjg��
�ޅ�X{[�Q�ru�Sb�V��{�
-o�AM\���M
�"R�.��
�FV�$'-(�x�#�~.)���y�R(�����vSp���ֺ��4�艸mWp^����&�N�k͹�Ov^A���̪Ou���@-V�
?�4��u��b�%D��W#d�Q;F=H�LoO�Qen=K6�C������恃��:�[v�7��%ɫ��j���h{�%\�J��N3
/�B��O*��fN��������d�%pT��������;�W��(�0|��
-���{22|}Y
xO.�5��� ,H~�O�}�g]���e6ͥE�l�5�z������2%�̻*��2g]=���Q(�+��
-����A9l:'�嵎������n��
oa=߈�E����Wd��pP�q=���k'Q�	���q���}��fg
�����|��Y�:9��CQ�瀻v���ҙ���U��M�uۼ����[� ���v���8E^m�QP���5�r���w$1������PK I>�F�AS�qjp�Y��udGDU�������z�/�� �*S��� ���a=��Ļ��Ԭ�b��
I�� ����-�ݝ,slMʌQ����c-�ȇQޞ�Ee��c8�K�S�m�A�P����U�H�2�7jMW~��X�Ŗ���Zl�~�-�T�NR�ԉqݫ����3KU-��#��0`"
-( 9g�9�����g��%�S���מ���=�
w��7UC�+)6gK�!.��^�@W}vo_�s�JF��6{����~.L\�+��w5n�Jn��0Sd��!���Q��
���
��aU��Dmu���[4z�d�Wp-:�B8���
�m}伣��r4��7�J�8�5�7
�1��9CM]ku^=�=�x-
эM=i���)�v�Q�J8�ݳ
�v�s�R���rR8.E��
����OAȁ�i�~�mr*G�ܪ�Me��f�zt������	A�I��
�������Mz��˄��Z�����FJ�(�o�N�|
O��,n4Z� 4Tx�<:("��\�b.c�0XIhܫ����x�H�.}QКf{�\�&V ��x�T-Y�C�\����/,�y�4hA����u���滋�?й���C��
�i����
��6�+ՓF]�;s�"K�ԝ��J��O0
�
�,u,�V�Ȓ_Lz1D�����wo��}�l�H<H'i!<��.�jP�zf(�N������{��ewki�vY�Ɵñ���/�@x^������}Zk���˙�(������;���~$�1��폕Z��1=?��w�Vu񣫿!
ŃC�i$��}
(d@�w\�DG�ż3sY�ě�R%A�a|��L\��:'Y��CZ��F�,[u���
���
��Ϥ��\�97D�] �St�|)`I���O��
���G���~ ���`�H���dߘȻ�7�k��
�����=���8�y���4��
Dץ�
VD���x05Z3��oi�xlOv�*9}z�
�W*)��M��AҒu��+�&�ݳ�Q =ksg��F��P��/�oF��kaޒ������#���nu<z:����&
���q�4v+z�\��C��O��wdM�}�Ѻ����{��u �������s�xu��騙�V�d��	g���n%�^e5���#�/EI�Mb����|�<V�h���xy0�.���S


�͊��m�RVܺQMM?Z��P���l����@��ն����ij��������9�a��ǵ���#-��Ԯ�/��=����z�]=�
2�s�"B�.���|����w�kkk�v�� �?�}��#+} ǃ����Z(y����W�Ӵ�W
�F��
-�Z��N��-����Z,��%�R�{ѫ ^ŨF4��K�
��L��߫�7��K`
\v�
���O��Q�^�Z���j���
���5����sj ��/in��ƻ`>��r5�jލ��������_�3F��û��N��4�R?�@
-�{>Z"t��ZN��s��\S���9ߘs�H�	��C&V̥y��Y~X�+	��Ji[�d����<�n-�R1Хn�v�>A
0�p/���N<�W����UՏ��;�H
-7�fD����{����
�簆���7���:'�L��|�
Uwj_�ź?w3d���� �O�C���ĩm�j�	e���m <
-��N��5�#8�n>�F�P4�z
,	����� r�v�����`ً�����e�xǫ[��+�c���*ҐW�� ���r����pO��I����v[�
7���U�Z��C
-���1��F^<���Xg_�Eg
ߚB��R7�A�(�Pg�%�}+wf���p��([&��u���N����Yř�F�b�X�d	q<;�0�ʋ,����k��{�|�j�W�PZ
-
TI"�����;0����Mp�2��i:�i3�2{���
qokyc뵒��,s�ևr.�^s!P/��4�)���WZ(p����m/g�{�{�;[.��vg�B]l��Bbw�d�G�>ZsF�"�Ac�y��`����������֡ ��
-�'?��c��%X��
�{�#��U���
��/l��OZ�Ҏ2����R�5s�����{o�"GXoz�
\�n��y�
�-���;6�ƌ��J����)/��e��R����ܻ�єT1�3�Gt�&��
J*A׼�J�6�X+D������fJBo�b�\��
�L�.M��׾0�^փ'�m,���s�t,�=�~-���6���&RE�����
}�6S�lu�6��
$)O���Z���2��(���M�l8�
-C�H�a���[p�o;%��{|D%
�_��\�$.ͭ>�j�^�9���v���00�q���=�v�zɕjqP�B�V��O�m
���/��㉍*t�&G{l}� ��[�r+}�-I��gz����b�����=��L�S at 8XwAg�
_��/Lg�k�}_�U7=�X�� 
�
���v�X�G
�a��x����z�c��/
��^q�r.t�ٗә�cqXRf��'��F���(�kkj4jE���GE���`���I�c8]���*���^ٱ�烕��&~��w2R�w�u3���oo#�����ut��'�]�����][���h���ͱ�2���VZ�$���:3��j�gUk�P��B�#���ք��ثu6+W��
M�n�9���<
C��nE�M�nx�Bl/�v�Yh���6�wlG7Y�<���	5Otn��f�Tw1�޶c��]3�ߗ+������ �mS�)]�U��� �x
�
-���y��o�1g�Zڳ�LD���ˍfɶ"|��qy��U+�-��
K��bt�x(��P�hV�	�
�|�kk���K����6��������+��o��S���#��e�W¾(���Y���
�l��h�K��a�S�a
-�x���xgN7���pw~���ź
�h�WT�sBޢ[�4�,�-��!	F(��(���o	�6�Ɔ_/���=8���V&�<�6�Џ��*���ĕ�I�f�4B�r4��y�Jp1��Cb��#�Uϖ�>h�'YǗs����
gN/���j��
-ڛ�K� w���*�+�P
ƻ�ȕ0�kX�|
-�� �ޅ2ڻ����&\u-���v�[��K�B�|r�>�Q�h ��
-�-�
U-���'���
x���
ڠ����ʒ�k%�=�}�:�k�{WO��)�ۧ(�S��\�t�Ȕ'�+���h�3[t�N��cM�b
S2J�e!8nq3A�H6��Y��6|���q�
����&��� �Q�Y�XOg��F
/z����Yb�s�
9��u[�Q�!d6,�<rt
�Hanz6�kR.z^׵��9��o�����l=�Δ�E�)��S�ЧC(*
����_fn��!'�>^�m��,-��M�;_�;�9!~v�k�j�>[�m���
���[N�؇�7у� q�����[6�ճ�ch�ē���?�5
JV:�|
���O(x)����ڂn
\�Uߺ;8J��<���8�{ﺖՇ"G��
�I� V�K� 9���)�t$�wb��T���k0s��2p�>P��	���쌉���X~��8�3��4(�MT]�I�<l�KǓ�f�Y�� �`�4�>&�6�I�
��=�#��B�L�]��n�G2�
׮㏾\��
´����e}�TL��
}xi�#3F
-
L9�O� ��1�C�.
��Lc���ae���S��w������� ;�K�v��P>�Z��x��Q(�87�D�o�e�YӁGT�`�b��6�%w�Ṽ�O��
%C{�]8�[�X����'���fa��}�
i��k��5/��"�34�Aۮ7Mjd�s_�Ū�4k���.���B����g���$��!��g�u�T��lM*�]��@F�
�sYvE��oG�'�����N�����8�³(��ȳBcm�	{ӂ
�l>1��e��?�`;�#�SW�.(���ˇK�Ͳr1'��r���^�w�ST��[��n�ҽp����2��?��g�<0�@Hܮ���m��N�W	
.�b8��n?�ƞ�^��j�㝪��e}f 㯴�Zy�Q.�0�;�]�O��E�DNK�cGUG������s�
a0�d�.�8��ei��)�����'��k�Nq��\a�1��;ю�X��5&�U��[80�ck�U�sn��Y����(G�"�B� ��|0OW��1�o!������`L�
C���~
���W�0˪Z�_��ئ��(~=)ށ�b׹US��Ĩh��ʍR}G�Y	�P�zUJ����5zM����:�n��s�&<��vo�Uןr�+
RIA�*.���uO�%|�i���������
��
�ƄoG�E����3�z���
��8SN�������Me4^F7$Xwʏ����P��H��f(�zt�WJ
�&�Ⱦ)vN��'��
ߪ���yB�"<�
�(3a@�CH
-j/���4ǼA���R�����k~�����qГ��SP�|O�����7��ib��? ;t��Q�hW�NiK� v���n�d`8��{
_DGZ�U��k��|��у�0J�7<�	 �����P�>
*.]2���ɢ�e��*c
9�緳kB*������"V+�}람g��T��K��VV�F�i0�};���р-
���*	����,b��qH��
�cy��\�*��B����+O���Z��Q���WP�4F�2�
���Εn�v7����6�������<�]���a�V<7�����u�J�eA#�}��~ٮK�����,��d
r��7���3��u9�����Æ	H`?wa�Q=�UY��
-�Z�-J]�*CN��L�
pߣ1
�2��� )�o����?�NTÕ��=�l1���u���at껻9�^N?Z�r��M�{g �T�5��F�oyS���J�J�����,����"��B�`z����.�n�TO=��G�-�\���
vs�������?����7��&��)�Ľ�a�<����^��P�6�.��
	��D�dm����R1
��G�I./
|ti��
�_�);0���I��*0��
��宣���y݃���^4Cu�x
�N�xv��q9tLө�{y�Fg��c;�W5o��:��!��Y����cW ���i'?��G���D�S�	@ޮ_�/Q�ל|L��^3T����
�Y��_!\��w�Q��C����}4t�
-��A4���T^��0���]b����4)���cr6��_d�?O��}�|4��6&f��^V+�p[���L1��b����ZN��ʚ�*}�:9�#��
�
u��x�כ�3�������1����n�����~��w#1�S��
'�c���w�)y����OuI} �@< ��-��4[I��,C�B��&���s9��3��,{��`�3�Pd�A�:�zIc=��x�1㾚i�~	����N �3���S}�q��
o�N�d����#`���7�H���U�q7_b~Yv/��S5eH
���X�cLiQa��:8��-+fn�����J��N�+�NG[>���CS?�k�
J%�ѷM���c�������k���:�]؍
����ږ`o+-*�]�K%c1{e�
ڤ��++j���E�6�T
-{C�m|<�h��w��>{U�Egi�W!�z3�U'ylZ�
Y�^�굱X��@j_{�"��1���﵍-#�4�q
s*�ֲW�t�񩙏�i(��7b�W���s�A�K�2k���Z�7
�������ߎw���iYlդ�!�P�b��K�a~w����f5k�����^�I۲�9o�/p/Z]��Skr���ydU���~vL��r�C�:�f�o�[��mHa\��zh�
-z�E-���g��Cɨ�r�ãH���wi(��Mm�NWw��=��:�FE�h�n����
fa���2;9��=t�sF��!�t
&/4&r?��*%`����	zl���57[sg�9�%���
+���sw[�ʱ�w��Y�֕������R�9���N�{�_�D���h�.���;�[�5��w�[��_z��!��_����}��סp
-?���
w�N��-�
G���{F�h(�n�|ס��R���;������&��#�!9g|v캣�L�����z���V�,ކ#���K�O֟�����~*��rt��:��sm5��
��.�[c
-%���f�T��-t�핎�g��=	��F����vU�z�����}�Cz��_hC�	K{�
��h��S̶�4<����1gp�
7�8�5Ld�Tm�[���f��
[2'r972��
���лL��P���l-pI��ƭ�ݜ�Hi�l���_�Էt�٭�6&����i��R����qkhӥ��[�jw�6���}�����d�jG�iM�u�or}����5��Wd�3� �z��.�i;�s���������}����:t4�
ӳ���`2�L��=�B3f����s�Bֳ�L��:*G�+T������X�B+�\
�
{�&����&�ZL%.�H���^I�<�p���5��:p�ֳ�j�Y����i�*�{�u�>���E���1ʹ��_���"��9����NѬ�V�}Z&�Ytd?�
�r�׈, �ou�*�*|Y�&��#Q�#d��j�`]�%��U��w������1���iW�~��GH病�&T�C�ڈ�S�/����C4쭪F�Y��t�5�ӊ����9��x�UT<ij#�.yuꝳ��Ӈ~�v90\�I�al��9M��
b~D�j|;�7f�O�������w�3�ګ�n���ѥ���
��
�ZΠ�uЈfKV;
�
��um.<aV�H [...]
&�fd]`�v��
���K׃�n]�����9Emޅ]���w2���M�q��z�P�)�����"s�
p�����y��l_ą
Թ�
�
=Q�K4e�x�~��;ϱ�MD��N�O��> g�7���T�]�=_O���"�b<l�������;����%�R*�Ԝ�s����
� �F���|}o�����Q|�ή������ȝ�9-�-��I�p����N��������f��
�k�ߑ��������]tac���_���,����>.
��\�R��R��������j�^;�

�����¢&�u�d9���
�����lXP�z����)�~���z���)k싄�Kf0F�
x�~tSuO���.�Rn�,������AkY��������C�g�Dg{l��_�9��".F��hz2Xa)�"��g�=?*�ʕ"�Q��ƹ�/yF����аf�2�t���
�|U�<�Z
!m
-+V�D��K}��G�d�-4����M�6{���˛�-S$��ӥ��͟�����Ӕ�g�~�7�H�m���](f46
{�{"�F�&�
�^m��x�p~�_�+�bw#�LF+H��{�����Y(r�>�p�zM��� ���R����K{d�Y��wL�1+�1$�
��tQa���H�)A�g8���X=��= q{��l�?z׭��C'��TN%��
� 0�G��+�]Y��T��]`d��1���w�y���H���:��WC�3ފ�,杖ں|A۽���0� �m�y\X�%�>?E�C
��uLm+�fP[�o�z�V>���/I'��G��sV�e�Tk���Y���P�D��S�I׆�pT��u5��hO)��An����f*��{ܒ��\�
�uS��F��:��~��7G�8�����I�6̳��G{� ��_�*��JҾC�
T��B�P�+oѽ��T���͂c�ϋ��/׽Om�
ك̗}��r;�)&r\��^�Ŭؖx���Ls�R����.5-ǂy
>?a��U�bۈ�w�:�b]БoJ��H9���
L?���q���,��h�G�A�\�!����
��Y��N�4�
-�(u�a:N4n|�܏���X9�Uצ�ɤ����K噇��\����qq\
�#oײm�i�$�����U����
��T�݉�7�_;��3�r'��9r
�ܫkH���9��R
�F� �W!�؏��%w�gXPyb��@�2�7���x�7K1�
�n{�����mp��k�i����z�9�`BR�/��z�(���l���koӋ��>�	�,B�����zf�Z��ٔ$O��sM��,�o?��D�1�*z�T+4�H�|F(4!]
|��
-��L#֦��C�e>Xc'��G���^�	q�4���gP��8W=X>��J��? :�󇉬iŝg�.�p�iT��f����L����!�`>�$'�
-d��Y)�:�J���IT�F1Ai,	|l�Ϭ�`�B�*�Å�$߅=�=���u��"�~d�3گ������ ��@�4m4w�]i-Bt��k��o�'�%̲0�
�oc�L�S�J�F?X:]�~��=#��v�A�i ��q�ዘ�O��S[��`�.�t�Ny������}Ҿ���6��	����]q�a)����5��d����������-��d�hCgo0��
 4*����)i�]v:(����.���<w<�m4�V��� qMZ���'Tv�k���%�E�\�
-o�m��'����C�L��,�>�m�Od��33=��L�e��tn;J�8Ϟ
�W�V�S�g�Z=�^ը��j�#
��f �GH�����W����HA����`圯_��-bw�NӶ�\3o1 at .��j��G2

LV>S�9
�2
�o}��I<�ּ�i4�	�d]�+�k3V.}���t���Q�)����$�{�
ҦH�&
�58=�����L8cI`��ͼ���B�a��o�Q
�����u��,h
#����Si~P1丟�?��=��?�Se/�8�Nm�=v���PM��m|=�s��
�
�t�6�Ԛ<�؃Gߛԛ���b
#n�Vy��6��p�a�
-�~���ݥh�<�x�+��
-È���0[/�ʯ6��؃P��T�]��
-d
�U
��6*

_���] Ǽȗ�j}J� ���{��]��l����Y���/�qP���L��s���K���N�!]|8
-u���;�߯X��m�S�|��[���Q�}�8\���c��%��7v�'���8Li�=+��wI`�Ӎ�{5�|�F�/�Y
ka|5ex�F�?"
���~3o�_C�Ջ�pC��uS����%�����.)���.d-�M
-3CzW��#�4biH#3�v5�&#J�
|���X��Ϝ����4ɲQ(~p1TaC����b�
���uWB�
�$����i%SO��րD����*m|5��4Q��4�[Q7�bH1���}V��$�A�CԵ��	��Y�`pvI}�`cO%���v�m�Kr�{k��rc�n�'���t�CѡԸqp��+���L뛅�B-���sEzu+G�����b֢���F�~ &�hyX�%Z"�ᠠ��
��6r	GOd�
�OL�cN���?�m9ib
n���^7��M2D)_���Ҧ��~�����RI�w�z
-{v�aU)L�{�:��QJ��8����V�'8v�F%d���d�q�h�oܯ�s&d�O[�iG,�TP�[p#��PT���X素�^�ɪ^�S�o�!�a�^j��+H~U��o>'�N?I�Jk�?�5}
ȱ�Ƈ'ٙ�-c�h�4��?���-)m��t�ji
Z�B
�<���]�
�_�W��,
�����^ٰ�|�:_�a�����aǀ�c��/���Uk���җ-g���j�=�h���Y
}<R�nGQ^"u�
�0K�k���?�n�7�^~�a'�`6ySE����[ah
�+K3�k�(o*����{����E���d�/�����:�B~]L��K���<F�J���X%�z��
mk&8���z/6�}����A���i!�8��5��~�J�1k��
&�����:
L�����������a��g%S�T?Ѥ�����\�e�"�I����B1� "
�퉾�h0��(>,[n���
���� ��%�N�K�9{M<B����TYa˄
-�7tp�J5���{K@���O�nyg޾�-�tך��KRĉ�dp��MI;̪f����
�i�b��m
�P�.��|TX(^�> �����O��t�@�R~']�;��AStDK�G��$�صyY�b�9�#%�����h�mp�,����ٱ�(X;�J����b��)`<�A��������oU= �খ;�
1z��3��gf0�nX&�0Zzw��!e�ڭ�%����u��\5�Hcbߢ�rx��ܧ̸���֡k�.]�ZU5 ʵ��ῳ���i�~Q�xN>�\���1[2vJcm
�R�va��Ɵ�Z���4��Ui8��!:��
=�6��&S
ٱ�&\�g�Ͼ+��++�ʚq&�>�
��
����'�0�V�����zO#�nɌ�vK��+{~�Y:e���8d�i��V4�
�+�KY�-|qN����nw$Ƈ�?A}�해�Z��	̳����nm�(�'�?Fo�d�ݚ��Üϼ뽆��q#�"c^���v�$-ؖ{
z��<E�7�ڀ�.K��ȝX�x�!̅Cةߋ"�m���#�][��*�*��!
gd��\|O0G۾�	���
l��t��;��q���(o�~�D%��
uW�G�
�@�I�����bg��G<���ɓ�
w�O'U���wd����Z�e�?i(%&�Z�*\5��Q�J�X_շ�w�4�:EOlr}��ׇ������Sg�9+J����V}��S�[o���Q���Ղ��X;�չ�\���{�A(�E�E�����<���I_���|�u�E�Ќ,�!<���h�ĥ��kcz�4�>I��񩽦�>�#�<IïݼU5��#�i���8�@Inr�ܳ��I��
��P�3suڎ��#>�FV}�p�54|E�uj������^��V�~�c$�!h���.J��lt���i��I��6
�Q9c��`M��Ԏ���/���)4�;Nd�5����
#��	>��?��L�q�M}j��-F_�
D�]���Z�� �'����V.�
�cw�a��ץ!���;�ؘ�?���%p�~� [...]
-y���^!GĮ�Z���S�u^V]�x���u��Z=��1?�3r���R6���h����ܚ�
�l_O{-�"+��R	��9�
-\o!Q�9^��a�[-�<t�s�y�,��X"�ǝ;
�^���W�i��?��0�_�J��-\������K�.�/����7d
�Ϧ�z$�Kw�ތ@��֍ɳ�	�na����JB�m÷3fς��S~5>��[���Úz��;Խ|}�Pw5�X?n\
ˍ�
_�O�Ύp����<Z�g̺*�ӡ&���
l�#�a�o��;}��:�A5���V~o��;�I\��h\�]������D�h&��i�ޛ��j�u4ġn:{:n�_�<5��{�]5U���g��|൨ډ�}��1�@_WSvk�>��I�{���y6vq$�|L�����L[�����̂�7SF�80-9��]azЛX��T�9"M�W���fv80
H�ԭX��K#](�fj;�Э�������~8D/_:3@�t��O���
�O?�MMH;��̞	i����-
OC�.]Dq���
3���*.c=j��]^m��US��͜����ǀ'#�t�����﬛m�����>U�wH��Z����M�{^��DC=����lb'x�t [...]
-��6���
v�툇UA(M{���B'��f��ʥ�
6�f��)
-�yчx�� ����d(�:5�]�_���2	hVvC���ēz���PCGF
-�{���{$�לm�����
<����6y��w�
?t�}������Ά �:�g^�/�	�:e�D�7J��?�����~��x����L��N
��;�6S�6�/��b�36�(	��jO��GK+�Y��^�m8�Z�
8Z�����]o�9`���A�<�0����t���s�_u{_�{�g0�
W�Qn�j�D'=���o�;9ᄛÒX�
p�Y�3}�����'��m�B��n�9�
-ޟ�&F���½O�Yn"a�JFH��Bu�	s�����8?c���
,D6=	����91��"��P.T�GT7�`���@�x���s%�@�c��q�����װ}K����l[Ċ9bN���)�W~{B��3� �)�"1b�å>�>����~+*E_s��$�1�叽���w
-ǝZ��*+����}�lw�

����􄅔�0�թ���? cB
�M<(3	�kUװ�-\����|����1�v��V��R��;r�G먊e+xd���g
�����V�l�O+f���A/����m�[�~x�]�
-/i�)b��DjÖ�8գ]D
-����J��*ȡ�`�ۖ5� G�<�HJ��k�.��
��>l�_1y�y�D��C��z8$�����8��z
�Y������q��+*�^cAh�m����h���	o|W����#[u͵_����8�R����G�G3q��Xr�ȑ!���D%��99҉���?�9�B<����$����o��ӷ��"/fIZ�9s$��hai�_���)��ҟ���_O�NiH|���*�b���"�b�>�ּ�{�+L��B 36r�-p\����	������d|6-
-�ԓ�w%!-����W:�3�js���B���u������.��Vi�>yS��^}���
�B?�o��p�+g�
m��c����]c��
mb��Ů��82}rc��ӄ�V���Γ��
u��/�����#WW�
�.�z־���M���ai�n�g���]}�:�2�����.�$tw�d�H��k3��W�=��%ۣu�[�����E����g��?�%�kK�ܨO{�w8�2�"s���q�](%��3!����x���RBe����X��
��m.��%Xc��1s�����o
���B7A�u��P���jӑ��)�|�$d��r��=q� ���ꩭhK���p�a��o��ɤp���
{�ڈ���w
HZ�������(��>�B�uِ���7i�xI�̛�o�:�.��
)
C��KH��T
���
���	�%/,�ԐVT��reM]J�o/�Sxb�SU>�j���1�����䙽�?H���+��TΣg/�I�|�Z���W*#��o�U�f)?��F�~��=q���a�
��Ō��>/�[�JV#���ε0j.�
:r�u��݈3�%���w��1�0g��P��9���F2�����o��u��
�Fݗ�sB��2x��z�x�Z�5�nGT�
aY�ޣ��p�ni]\瘡�z�h�q��W$UW�ǹ�@�~$�G=e�
�ه�u��6��lov�����{�"}#�
���" *}��
��{?���wA]�3Sj/2g*M�Z�l�8�>R����}�֢���x̂H�A�EAQ0`@�Ϲ����>ㄷ�OuW՟	�퐹�\�"��p���YWC�d��
�x��,��Ӳ�y\\��l��P�ɔj���^.�Ԅ����L��|9���W]��J�S�
��4�" l����[�?a�݁E�QR�~g΀^
�h�
�{�^�P\P�����B7�5��e�B�'
o#�-������-r-
q��[�Rffih
-D�9�T^ѱɤ_�r���;G�NL��Jsݍ�����jD!Cx�2����|��<���Q�P�o��
���b9MN�Ǧ�r
\��
�g
Z�f�Q��b��%��J�
���b=I}�Ӣڞ��Ȉ�՘����'��n�-e+S2�ى2��ɕ�����
Z
-�\Q{r�۳�0����bR�RG9�|s��	j�
�
��ӳ�G��e��O�S)P����8h�i�����������v�Ev���R�+q:^�I�����0��T�M"�*��K���c��#_�#Oz�.�F���yQg|2��dZ�eeۮ�����n^:�<����m[�T4A����+u
�����IT�cv䞌iήyi6^�G4j_����zJ�;�^��^e�-�l�{��:4��b�EY�(�0V��4�J+��=&����ʷ�O$P�v�ǎڱ�z�t��q�tF
A����`�V
5b{Tq�X.�|�%W	>3�3$!��
-_yo�]��%4X��¤�uw�?9�s�������I����0�� �����i�]��`/ݕ=��\H��ћo����īx��U��:��)󎉧s{��
��W�9Q|4�
��VA��t_�m7���Aa�A1��y�~=�/%u�ϪM^��g�V���{�n#�5��sO��^V�z'�nq}~[���
�7���L���Sɫ�3n�%Q24�

��t
�"�]��+���#�S�ᆉsl�����Y��Z����PXk�=����_׾�/<*�G@�-wł����J��+u)��eU��f�����J�����f$�5
-ee���`����ݑ랶��Vy6v_Çd�@���z'���T�^�
�\�F.^dE����>q�����_�ʒ�j��,��)����
��	]���؂�ݚ
o�V

����c��SL��?��Q�55�������c��*�Td3�ב�
��~�e����J�Q\��R�,�<�{v�?��n���]�O�e�w��M���&ܞ<|J�Ur'�q�q�oR�N��@�;V�
i��Z��
���ATqP绨���%M��b�?iMl�V�1C��k�l�N�|6��,�;mfv�I�\N�:��L������
-a
Oa��	�1v���_�lN
Ѿ��3~���i�p˜�?�ôft at K��WGP=.�,L��k��k;2�r�q�ʗǮ>tսPS�2��Fm�y���[��)�P��Թ5Z�������;[��{��K
u
��%@��Q�����NY ��=��N��*5ʛ����B�
۸p�!��bm�Ca�k
�,j�:�>L1/�j�Q:-zpI��} �<��cBj
���l�O{��q��������%j��Z�[�,g�цr[3|�Šk�Gv�(�sa�
:���J&ɰ��풓�PMҘ��W_�.���z��`�2
�k��t��B�M
*F�|�/�`�4�Vd{�P�+A���}[�e� ��;ۑzOD6�+�1�k�}E�ɫ�$�k���3��n�R.�-ڶ�t'�Х6�
kTX48��b�V^�1�
d�kb�k���j
�XG���
FҔn�:.N�s	��i��(��o�}��d$�x�XbMl9&�AS��Z\�g�N3�
t+��9`y<E4�j
��Z�|ߋ�d]/h�H�{��:ci������*l&]�������%6z�#|��Վ#N �N'm���0���ͅ��;�]�
{
-���ơ
�
��o��'�� �&�:1����4G�VD��y>&f����
�4�ǥ�����>�CYW�z֚l�B?���x�,�I���c�pY��\v ��P�=�cu>�h��cw#�o�
Zd?y�O�Q��5N"&ӞЬ�v��G��
-���5��F[^����1=:F�\�*��ߵ��W�%1̧ϳ��8g��3��zS}����V՛˱l�1;�ɝ����Td��X�S��כZ���\�[`����������±&
�ROY�>�]��]P"�����p6�zxU�˲��Nٹ�H�(2�;\�[�k��ɽ���L�qR�W��&{d����Y~�;�r��c���ќ|� E�`�,VJ,3vkKɼ܎�,
��lns���~�
{O���6��”�����\��oe�b0�Hizri��#�1�AE�@N$��OACH��S�Fǫ�V툱���^�iof������0~p�\���U�k}�
-n�de�L�U�œx\�b���;
m�D��h���ZNdhHo�-��.0���N�é�M�lO����v�,_�&;��
�������F�N�b3O|�]�b��(�h�@���#�hM�<Zv�FN���s`�
i��>���W������sy��㠾m���L,�i6.��ƚ�SK at r�YI(
�VՍ$X�BhߢC��(.n="�f�Y����,+
�s�����ȌFM��=���RR8�v�o�ppƲ�ƘŸO� ���2�W��?�ҩ��6
��':�S�Ǥ>\E�o��Ƨ�;*g+�āiv�5[dw8[��ȭ����]��ӝ�Fʗ�O3�*�M7
��GS������?0V]�����|;#���)�0G�(2[��2ܖOeQO�`��ά�C��v���s���:*�2��-�̧錕��,�ѩ[k',
r�U�#v<	|����^�F��^�#^ޣ��[*�"!5�_��g9��W
�k�����H}�v�Mx���������I�]��F�+�)�C{8D�-�l�I(
�ܴ�+K�d-:R��L�b
�|y�\%XY����H���[���r$q�(�����[�raq�z�6 at c��'�,�@Z��&UO������1 ��k0%~3z��j�p�b�
-�~N������@@
>/Uf�
-x��|a���ψ���~��mx4I)|.�c-(���ɚ��{a��E���K��mA��I�����X?ݢ����[QJ��:ea�<$a�b��^<|��s�2��U';��z,�������ϭ"~J���]v�Z�ک�J+�4ǥO0|p<�v7wD�
�Q7io����Z��4�[������P���� 5c��0A9�ɗ�>B���6)v���GaX_��V
�k�ݍ�H؃Im���;X7��x`�ބ�T�ڼZ�������ן��By2�l��
�i�ʼ�2�"y���4
M��
����*$v������C�` ����x��ƛ��*FiNw��SH��fm�3�>�ۥ
-��Ok1.���4Y轪lr��]��e���|FK� ��
��堥�lݳ��e]����=	[V�9��g>[~�)<%�ӰǸ�
���?LG
���ّؖ���_��M�����Y�6���[���/�)-1pT��"�0�7��
R �Ǡ:�5�.�

y!�͕��u�����})_�Z��I
�
���vR�г�5�Z��V�"Ճu��
�
-(���h���K8�`M��?��ÿ]��r+Im���SOl?TtS

���kB�b+^��u�1��.!O�7
���@\��D���޻�qQ���ֹ�>��#�\L�w���P*�Q�k8�}"N^m|��K��H��~�/8�(-�i�%�@o��g�?��i���Ik��3z��kt�薞s|��dV��6�#j{M���ꀲ���\g���u
g��u3�x����i]r��/'�^wF��ŝ�-[M��ơ��ہ9����gpO��9v���VL��W�59��9��0�����`��:E��;Ms�Wժ�����>��1?�
-��tmc;Q]�'
��n��
oJ>r����XEp���ŭ=o��~�� �s�-��Aߞ��K�YX�!��I�,��-s��M ��U�ss(4���t��6�.g.���Y{�׆�X=GF��ҿ��̭�����b*$c�L xK�r�a��`����lM��QL
�
�]I�G�[7��

-S+�S���Ėc�ɯYA
y�neLJ�R
�!1���|
҅￙G�%�~�d �]�a��B���ܵC�4
@�w�ܟ�6	������"r�-�m�
x�χ�T�,�
j+iE�B�7�_W?G3�М��C����F��'!.�bd�\��'�a*w�ј�������
u��"�x�A�+o�0�n�H��7)Q�]��X0�<�,���F|�o��}8f �����1'��k��u(j{9�),�J^h�#���
ĿH���ֱ��\'������'{�Rn{� ��.������INJ�
L������:���֍�������
��Xs]�O� ��4��ͱ�W#��R�:r��s�S��%�%��.\��q��O��H1���Z�W� �[*
�׿8��B�=+-�U��,xCX/�]O�	��59��Gq�[���|w5&'� �VU���r 5£x��+�u��cU�!�$�1�
���?y������\'��lf����ϵd�
k��J��Ѵ.����&V]+�ڰJ$�r�Ϳ+Ju�p��>=����J�
�f�`�r��^�R��
��}�	�
jo8�f��M�V�ה$�dhe����9��k/H�p�Z�iy C$�c��x�v_'pt��d!�߰-��Gg�Fm�0�_P��q��&�u�M�ŏ)�2�q'��o���J�;
�+��1g�`�	wf���2q�Z�kQ;Ğ
�x0���e���nz�Te[Uj�u6 J}��qy��EK�
���uxG¿�Ŏ�Uy
ҭ�r�.'�-�K��ؓ�
� ��U��N67]�J�"��C��'�e��1𜹒�I�-�,��S�1@��l�����[ᝯ9�!7A��V+�	���
�؏fl��
C��ù��-uDUƐۥ*�W!f�9��MG�%���5�<��xP�f�O��ܫt�qj
��!!��toF^�ܓNf�ݜ�H8[W�[Ӧ$F˼�`�3�b���^-i(m�J
�t*G�&�k��cr at 7��~���:
1�Zu� jNn�jT��9�꛾�;�3��U �S�
�G�=��~o�O�8$�yNJ��!�4��k��+
���R*+^�M��:n�A�}}:
w
�q��/�)��&6�gԭ^׮��b��]f�`���#,�
��a�+�
-2~�y: �|�fP�c%���
�{��e�Hl����Z]H��PrO8:���G�
j1�|�L��#.�ݬZ�V�&;n
�'ٛ�?�
�h =k�ph�.:ޔ�!�����
(�h��ܙ�tr.
D*���i+�I8yz�k���
�e_��::
j
-z���F$�WZ|�#�yd z����y�
�6�w��]�� X�4�M�k�Z�S�S}�[�k?�M���3jub3´�b�ݝ�'�+{mN��xRX�v�R���aN�\��A��N�������"o�i�Y3
o��)��ZK`~��J�T�!�t��G�{��N��N4j"�ZOc����]j�q��#�Nүk�&.�,���D
�GS�������'LÎHEa�i�Í�X�
f�C�,�e�tT�<�4��
1x?1y�n�Qv��{)jvq�EN�|���Cp�c�|��)��m�ފ���B}!�qro�]T!:�r��+b%��s���X�
Bi��Iڮ�ܣݸp��V��Xc�1� �:��Q�lx
�ư���pwP�9���s<z|=��
^���\�1�jY�J;�L-�2�E�fN��0�߇���ʴ�!�%����?����D-������ DX�]N��X�iVGc�vP&"��f
B���xN�ۆ+'�G+(����T���u�x����<uȫ��zC{�rt
�[X�=i��#�yX�RL�l#=��kyp����ȒW���s!藭@$���R��2�k���+�~�f��Y��IZ����櫄���Z	�Wʬ!Pl{���O�w�
�^F	i�G��}m�|�YZ�W�r
�a��Y�����1�<�ɉ�3��v�s���A�0	f�Q�Z��g�ڠ"B��8
l�[n	�9�n��z��ff����Ml��)Fa*D�����&%b��!cT컒��)�
���2���+�b�m�'k�Q���!>]~�n-i/�B�v(4�b �&�
�+B`��J|�W�(�2��+N>��Ѿ$�K��
�[�>പ�z��1���]��`�|:p
F�l�`U̎-��:�
-���
����ڰ�5Ǡ�2.Ua�D)���P���N�
-9��q����b߽����VZ#
My5�اw�f�&ұY���;�7c��T������T�*R�
~\Z&�ѓ��ґ�Q#
���?&�M���>
�'��B
q:&�E�3b6��
�2
F�]�=vֺꌁ0�>�"�d=b�>��J��d�&,�]�7��/r�C
�4C
>CyWٲ����
��/��	�p}~��{���أΚ�=FCa���d���bb�A5�$�1�����w>�x�p��cҤ.Ď���"�N���"o�,�~K�
so�.�=�p��4�#�\B?���e;�u�cZu����j���+���B��j��!
�\���4�k����
-��u�p�=��<:KcD�9Q���'?\�5���"��tr|(�Ѐ��Xʔ����

�o�;R�N
���D�\}���To�z%��h�ƘMb���Tn���bnYE�Q|�Z�\�T{��v3�F�T�z#J��;!�CoT5�
������5���X�Ӏ��~��޸���H����z�P���
^�7��Ó�E<�.�
�[�$�o�n*Ց��K��A��r�=�)as�G

!xm@��rQ�q����}��Ko��kT�f�W�$
-��W�ܹ/ث=�o�rBU_
[�y�2��.
-�JvX���;���8}w���]�(�wt���Q>�����<Te*�+
H�
�0��ԭ�k���p�sQ��Q���	
�
��g�E���Ӵ�\��6#�Gu
(}-�Þ�*�
�
���M�g}����+SXr�5�-��>\��<b��?�[>E��
��zZ����\6���5<݄w�0�?oUD�����^�v����z����@sn�1-+�xb�b�<�ոF��
�
Ǖ��E��590=����M�fo}�2g��6�5]j��>7s�*�1�%�X�����
P��TW�WL�i��?�h�V
-V��zg`X�����f�N�):���oY�ǵ�|�d��� CLC at +���S�+϶*:�Վ$6�k�Y�Id?;�Y�׮�9��+-A�7ao#���:�2�׬����?��x��iJ˽���%�&k�^C(�ڤrm��Et,�zΩ�mR��?V��ҤbWC�M�0X�b`�@6Mr_�

�_����Q�S�	���C��̉�U�X5$��}��.�1���5�S�
��Dӫ�W}
L��fb�#-�#C
-�-�;"{/���$	��mP�!�w��T��B�,�f��GK���’�ms�����~	�}�A�5�]6�zw�t�~I�.K�l8+�a�Z�$!����W����z���������5a_|��P����Ï�w���'�����Uү���[�׳4�r��ؒ l
-�0�Ulr��p�n!`�^�1�
b�68�ؙ
1�6���$�p�w=-��4l���j��#r#
FBp� u��ʊd�#��~����3^��+
���,�4YZ
����q82m��
�iX��oJ�>�+�E��آ���
�
3 at w��������
A��8�+�Ju(�{7"�N�Am�o>Y��K2�I��޳�i#=�䐙���&
�0��,�˨U�
��nO�~�W�N$�u�2�r��VK������8M��
�����,����w���R�\��ͭ�S�`҉)]�.[��ɚ���F������A;nj���Lc
rP�7���ܫ'䈙
����WۍF�s8��l�>T�T'�tm�H.�n�~��R�
"O�����2E���IJR�� c�r
��i�T�6��r
���
�5�%��&(�
2�K�FF����� �I��+�<
�w�����~�W���(�j��jS�*��I8lnEїK2
��i$�-��I٦tk�{u�/YS܁s����^,QQV��ަv�q�GD9/~��
N@D�L��T|ϠEs��e����$���J���-������Vu	V�bϗ�d����\G�?�	���j)����?� �4�r����
������>԰���\�C{�j�P&k��4�3��7��
j��FS�P����J���7]̾�zK�-�q�
�>�q�� ��U;!��GI3�L֣����I�7�Ojt'�ε�ԃ�$����m����}�wq�@*�9��r��.���6gm��p��&���lȚ��잼����^J�
ه���Kl��R���m్o��׳v��:��}��V��vt9R
N=�
��9Tgv�{���
��[c	73���*��b-���k�/���U �x��/)�|ZUa�[��Ձ��*������K�l�><j���V�7V]E�P[BU�>CW�ã����,�@&�%5���Dh{j`w
=��Cb��%�p��W�H��i6ʌjim
D?��4�d�\�v�
���Y�m����ve�f�tD�NNk�<���m*Q9vh
��|2ٝ�@������|,}�l 
�F��:�T��:���z6_�e*��_;�$��}9��l5��޽���(�E�K����
-�xR���O����Q��3�����ULg����g��~O��U1��c'�o�~��n��޺�p�}ww!wP�f /�7�n���7��8�wX;⢰r;ռ����̽���Al�MHc쏚���w�� ?L�;hf�&�
4�D��%�
43�/6�O����F�o+���LG�_k��v���~��ߗ�m��]/I�
��;}��zf�_l����/1����43�/6�/��G���j���/��������� �������~��������'��|���vٔ&����u���RBd���M����n\��n�:q>2
�7�OyE�Ly	^����a?����:d�?oO���	��R=?i���>׺�.�Z�
���
���;_
-�V�\��b7�`���צ�g��W�W<Ħ]�/�^�?<uR�#z��?����`9|\z��Ɨ�}cRPvrO�z�Mt�d�e�b��{���<��Okn�����Spo2�6}|#��n�'�
c����Z>���:�`�?�x9��x�m���v��u
zυZ�ij�bw1�壯���ڊ
-�߄
�M)�c�7����1�ۯ�ڙ�O����Xz��τ�͡���ʞ�`z�B��h�{ ����Q��n�����{�~6$P���yfi�t���c1⒈9�J�i�����!�#:N����`�^�����=�d��gh�絝^�hg
-	����
�B���?�ͥ{����
-�׭�/���F9�r�Z��A��b
-/�g�̆d�h�
�7�׷��wm[U��\~`%�G �����)����s��7�����w՝
;��F���͞vӴ��X��eol\�իyw=���B�����;\�6�4���h:�1<�����
 ����g��}�@��3y�Z�j溳��>��^T^k���P�Ǽ��n�?��
���??�_�@½�@E�L�5ُ��
]%۾�p+�l�������Vn0%��Е�1�4�Z���_i�zlO�
7WU�h*����!�LҾ��2┨jIs��܉Cn8�������4��5�nu�:K�x��]5M��g�p���
J[�m���g{�~�.};K����@�\;�r$>c�N�$ϧs%�]:�㡰�e��E��VY��?U�.1m��0m5�S�[�U�  U~��<�V�����
��I3Wn'��A]�wޟ�
�T��|>F�3�`"�T�]�jocBʣ4)&��bsb at Jv��Ih���q�Lp�C��@��~�Dkͻ��*n�N��[�Z
?Y٨KM�c�+'{��)W�V [...]
�2ԏyv^�\&��e���
+�en�$���K���]�~V���B�?fg0�
�ώꓒE?���}���d$��,->P.׆O{��tlՏ���
-3 ew�g
-]��TOCf
K���O�
�m�N�f9�{.+�C<
��=��/bυ��) 6�v�12=Y��T��o�;
9/7:;�tY۳�e�t��n._�ݡ�� �6?
N3����w�w���� ?L����Y��
�����
=S����h~��K��	�����k��_}��R�������/5����Kzf�_l����g�����f����m���h'��ӧ���
p9��P8 �����c�5<����8�G��ض��:8�s��^a�u�\.�p4
vY���SY��&d��:�Q��'`������O�[J��C�)�
a���Z�PظZ�
-�fa�܌�}� ��c���}U\^�v����Nl�-��s��i"�}|�Oq�O����>���)��o�w:,
�zZ��&/�D�參�t��bVl{��gـN%�
O�S��i�����)Q��=��3 at JT�>�vPMi�[੗(�����{�ט�E�xm'{� �}ym�O%�L�Qa�"��R�F���c���:	��
��<���$�����}T�W
�'�r�ǕW�}F^���o�Ks���:�I�@i��*E��gs�����(��z�����P�/?���
-�4�����B���i�t�Ń k�t������������g�)PZή�����<L{\�=Z<����P[0�9|�Q����U�i�.�ޫ�R�6����<w>�A�n�#��
-)_<
㞛\��� �:>*=�Ev�n@�ԓ�ld�z�9�/?
i%��I��i�*�TQ���L��@�R.b�l�|��0��B���=d��
Wl/..`�2{���+��-�kE㒹4�Q
�}4�q���!c�Kϯ+�\۾�s��Xl�|���F�(hs|z�u�X���;���j_.;�歽�Ú~��r4���;o���?M��MqB�/��C�N�n^g��?앻Q��qg����u�A/���
�s��;�")x�, ��W
�Z=
�L��.~Щ.�#���W��S��i�BP�I��=g� {'����'ȱ�'���-��8�S�f-����ۍQj�����K�x�������r*�MA�_k �s�oBN��<�O�诒&���}s��Ub���~'͓��_�z
�����P�)0��2Z~�e\M��`�Dq`�C����E�G��/֞@��u艹�H��[��w��lX�ćf�ڦp����ص&�fPk���18���LkX�4�T��3X�uy�3S)[�*"�^~$P_��K�I�]ي�i
^��qs���e�����bi9kEu@�Re��q\�4�w��2����Tѕ�i��R�I��lE\����b�y�/A��R�52i&[���'1(��M�0\A�a0���-��|O.O��{[�n
D�J6�ܻ"/��K�J�I(fq�z��b��`��V��d�?lJ �TJ�쎞cD�7s�x��E]�Ch=���
�N;�;�<6NC,5X
��4�Ƣ�{��*��2Fy���I	��{��5��� �����t��
O�]tY7�G:�̑ �u����s'/��]Z�&q�Uj���
ޗ%��� L��	Ğ�K�U·�f����������9-�o��
�P`��=���߱���$��*oHN�\�t�Js�� .MAc��
^l'����x��'����m����
�P���ݣ���;����6:\/��2��v���1+m+
U�Qc�Cj�e���g��
��e#QH�7�D�ՙt ��u��U#3��`���
!@�ժ&,��:��?|��X���E��P⦐�3��ɠV��$7�ʜ,�
K��k��ָ?֝�-�}t�뼇0��=� ���ux�4>�(i��t&����g�7|=�^@���v�֓���Ug�F>��5�Z���iՈp�>��>ބ��ϛ~��:��\'\#^#���/A����w�� ?L�;hf�&�
4��b��w�L����������� ���o43�/6�/��#zf�_l�������fz�_k�7���k��~�X�
���/��(X��S��yv�)�+����z
�Nh�/���~�,-/��
�ɷ�SJ���`s?E�Ƭ,NN����L�D��݉W�k�f����?)M�M$iDǔ&R>?���9ȶr9j�J
-�b;�Z�^��k����\u�n����z�>mL7J9���3�5/��]z���!^�`�8̮�?�
����$j�z~N)Q�vz�����;�R�>�>�j��>u�/��#��3:���v��]�k�
|�o
c�]�F�\��Z�p|��
w�]
�Ï@Z�S�o�&�D��u��j-�{����/&�k�
uN�n>9ګ��]1v�N��d�8�]xm�{s^�㺶�H���|��z�8�m�l��o���.|��M�F4�6��=�� ���8���Y�r��9E�)�,��������s�p㝌g�N?�m��β�~�1x���/�����f�d���ΰ���
����?�^��ZA���h ����l�;��$x
M��_�w'&�ٍ���v�5�修�*W��*~�����a�@'ƈ�x�#��������_�)�s�k�����Z�u�jDM���-
1Ϟ�;P��|�=�Ȅ���_mv+���kX��10���Y/�V8��7���7� ���K�/��%�	����z�?{�
1�j [...]
��.\���.����?��t��:������wbݷ3�)
�w>�_�IL��F�h��V]��5�A��D�JGZ�NMA��^Z�V��
^,쫼PrB�g�;)�P�=H������q
-'8i�,��(�2�;�`{�f������ZG�S����T
�M�'��
�
��D
!\��+L�ïU��M�����
'�K*�5�7!|�$h�D��׃�K$�)�w�T�E�O۾���,O�;
��j��oeH:U��-i�Uzb��B���<�5`��/�9q��b;� l�6
�` ?	��
iT���|�X������FW
-��g�v9�uȮ�J</��\I���3�	�'*�~���`�T�f�Qg���ζ�a�ѫ��[O!�J��fL�1d�?o�	�^�b�<�72^y֝���Jn2stUқ��TY�%�v#�E��
��ƵZܝ���q`���E?U?���M%��������-P�1^$W����h�%�E��N_Wkq���'�h���SZy��T����6�f�[�Q�<zn�}�})�$���N$
[gP�
�V�+A�؍(cô�����G �O{ľ���Nm+;������:�h JGKl5���:�x�:�Ic�$�����&*��
-�ik��}��W�
0�������'s� y��9d�?oO��{Sd+�����F��gu�r�Cǰ �
���h�TcHj�0D�
񸀿D,�2����
0���t2�u}�	y#�Doi�F����G -�c�~ç����R�wݾ����x
�V8��E(����~QDž�)��	g{:�nw�^�<q���J\�i�T
��x�^��u{i
[�P|�,��	߈~ʹF�Q����O��D��f�a��A���_j��R����f����I_~���h���Z���v��J����]�
����$`���/���4��&����7�V��������^DE@��E��
��}�N���V����F�#�c43����H�3!M�޼�:��M؊O,��g�1)hy8�B�4��}֯S�֗v���t���OO�
-A�����OI�^M������'���Y!��Q���!�W˞�~t��j����9g�ɤ���[-Ө.��Ύ&�*��E�؋�5߆w
1%<
-�1�'�a�՚ ��|VG�W����A�t-.���'��WV�[$�txze���t��=�/��Ŝ�{��&���O���dT�7 �1��ޗc��]�kL�
Gx�'��(g�a�>���>fP����Z��'��xJ7���.uKyا�s��-v����y�����N3}y2j咣78��Z��g\���y�>�vb�Xrd��͍w��!��
�4F���a�n�����~�7����0���0vji�-r�ߝ��i,��������x۫��c���Hv��yӪ5t�;J������-��(��g���-��q��Ƴ��.=+���q]l�;��\��}[�t�x �_�6-c٘_4A���::�1�t�yW��o�-��`m
ׯ�q��H at _ Z=�̀
�>П��-��I :�&o���P�b׫6�k'�Z�oC���+j�4�\�ֲj�`�A�Tiwn���emxZ����5���;�
�������&]CJ��T�ju�=�d/��noӀ�ú����!v�.1: [...]
:[�kvI���z��wQ1t��tt&��ꒋ��_��?Eu��(�U��>O1uW
�r�	فo�޴ˏ]钲��i�U��g���&
-�*l)�H��CZ��?u��Y�aU�
�F�
�j����DL��4ŵ�lV�ɨ�����}�l����-�'
mk�����i]Y��.�FT���ڊo&/��	�"ˑuم�Ʋ#j�eg�Q�	��?ztN���������zyzp*m�r��:�K�v�-��.k��B�M[�Z�3>����
-�6�����I�
��I��=i��l�Lll��!�\���[�G���^W�k)͎kf7ɹR%,�׾׼B�K�ήO�,�>
���.�"'ŗ��M�,W+���].������8��7Ǚ��d���3���%�CS��k�ĸ6r�'�w�;:|�}���|��d|n�e�Ř��fe���=��U�p�ݜ�]�>_$����8����
]����EߟhZ_
�
	�/?�u��
�^o��#�|\S##��a
v��|ÞLaԸM7ԁlݧj���$�f
m��7砏m���ٓMz�5zV\��ty>�������^������sK5�ǵ�=9.>��{��Z�5�h<߅�ZG(��Tn��%ly�d�r�r
-g�=Y��A289���x:+�{��75�.��<]V
p��:�>@s@�O�
-h��0�q*
���_X�2
�S`��#Q`�	H�uA�;oX(��*�廬xڎ/��2x�@?
��lz���\ٓS'\O���f���g�����}Du�Wo����iHUJ���؅����V9?�@~>�q���
#L�+_\>Or}��V��X0��B~�K@��=٧��3��E�||�R-�$&7���C�^9���\��t�*��u�u�ݬfTʜ�P���%m��=]6z��Г�E����t9�c��g�R-��eI��ekr{�I
�G�E���~�q�ѳ�|��d��ڕ���t`
�f�Vlo%m��U��ge��y7~�<&��<gg�H�
KOW�L�
-�^��4���4_&}hZ"�
�]�J�:��w���T *�<�!^�‚V��0}?k����-�Kb�s]`�ݕ�9�0�����b�;m�=�����d������D��=A�%e�E�2Ed�Vz����1�Tr�!�j���/}��'�1דFD�� ����pDy����hZX2�Ns=[0Ku*��;����!�'
���|m]�*9c}����7��&6
�S�Ҳav>�$�?�=��q^�dJ��j7\�����,P��J�1'��l�gV�N��'I��@�
=xM�OyLu/*n���5�#[��J�L��U7�������~��[H@?���#z]��X���
�Ih�;�koa��(�ahy�?&D�`h�|+��
-0�1���SV(�Yqh3Z�G��h]��Jh�$�����0:c�ٗ^f����
-����.�
$g
gQ��^�&���7��CsK(����m7l$Ύ��W>�Ç�L�2)M���l�������l���	�OH@�*��2JKq��x�p�
���V ���~.3��
�B��xݳ�-ru���i/
Ζ�
�&�G{N���@�2�7���h戃~2<D�#�|*ܘ�`��a1z�׊��o!}
���74�?��&���S�oh���"�
��_n�����_�����6��f�/7��Z���
2������h9b2	4O��j ͍4E�y�l�4��ѷ-���SN�OǜN�Tt>�.�o���j�~_����R�ܙ��Q��r��>D��\�=�5�H\�W�m�N۱X���-�
���&I���⠝(�7�s
-�
�F��l<	�YO���f��C��y���L����ԧ�s��U�鄥g�Eg�p�ރٟ���[c&��)_�4�s�x�-H��f
}
OӾ����4f6��
��w�Кx���ۘ�Ì��K$���(.�
�����h��qeX:�j�־����a�?Yݮ�lm	G����N�b��ur2�W�J5�d�[[wzmW_��%��S���/*�����B5�i}�C�m���P@)�#�-��m䕫{���N� �
����ʪi at K �Y��s��;��E_<��^���A�g7`���E�b& ١���#.o�ʗ(��W#�I
�;�
m(
ݶ
�L*��'�Z����Xd.�(�λ;�Xٽv8�A
T%���i\��`�����;�u<��W,y���
G���G�U�����(�|������j��?�}/{{�R%�o��g����S��ќ��i�V�

��4~�����JߏF�i�q��:�
.r���R�G1�e�����v�!v�k}[|�- Z����w�t+�8^
|X�	��Y.�^ﱱ�1
d$k�T[> �BݍK'U5���2�S�\GmK�
-q0�o���$���o!.���C4� �,>����:������ګ���e�[��$]���ڻ�/�%�����m}���˞��
-�̒��i����&��HT�PX)$P�o ����oq��d at U�@TԂ�j|�F�9_�rv�9�0�v
��e������q�1�
��X�ܛ�r�1��_�IU~�.�ur���T�|ԑ9sӔ~��l�?O �>ف�g���o�}���=���s���lϫ�yy5�Ksf�
Y2�ø:WA�:��gh.�p�YcEc��sV�/��S�Y1j$�����o .�6�V/�I�}6��Uf��k)�}6%(sO>�rP�4�./e'6$q�dx���8,ק[30(��'�` ���Ny�J�A$/ٕ���>��@Ԥe�h��"�<��hC�~6��A�ϕ�֊�Ǻ�J�p],��ҾJ��ĢGR�(r�}B�j�x���k�����"Vu8��_Y�@���-9&^m�E�I
IY���k���$w>�FR��9��A��hcDq8�l��j�w�d�܊���"�=3
*w��HD�׈���hU��e�S��6;������镩2ǻ#�I�I�'@,��
�q���~�N�m�5+T\+�7q�� [...]
���9�b`���p��4$)~��H��y P��`��w�e�#Lz<�&�Aӛ�|�Xu��yF��淐��q%f	� 
/�-�9�D\�:���������J9��i:N��
����BN{�Gt��p���}��쿩����Y��~�_}���>f�)�Ԫ��Sf7��������O�%
�N'0�
��޼�d�<��l�[j㐻YME�@M��
�mt��ǭ�d �ߢ�ڙ�׃��V�p�~M�Y��5�O:K\�ЯJ���R��`GSq����𙣏[�aB
-"9����g�hz������T>�%
GK�3-�
>�,�F�6/�T��V�-��O���B&ݠ;&��`F�͚������[t ��|v`�㚺����Z��
��ڸ�
�`��@���H�6/��u��
��a��SرH_�Zy�>
0Y��u�C>�pG&�N#^�rFl7�� ����?ֵT� �r��/��u�:� �/�ScyT�z�r�ӕo,zWv4�T�?�E+H�N��LWR&Gu�ja"�\�T�
-�}�˭.�&[��1���B�ˏ� n�yp��CP���m����anF'a��
��U��D����o���|O0�ѹ�3����+����X��[^^d�/��P&3�.��L�T�Ry�˗���t�*+�Ͻ2<_��<r��UN�£<���H�Iy���ڰɮ�0��~;c��9��3ս���@	\r���^�݈�{��N-
�z�����|
���� ç��5/���Ϙ��J:���Sc�#6
-���$�ﳩV�e�Zm=���
-u�Lu���=�*�#qs��9ο)7⊗�����f�U��
���'��g���ŵ"LJ��<�*Ʀy$��F�r�'p�J|�<�-�9�dJ�nF����6x�%���%����u �~sK
~
[�",�X5"���
��*�9�
�o��s
	������b�t��g���m8�U����{y�U6
-C:��(
-in&$ě�xzB(|.�il�ZsԳ�%�a��J�0Z(q���0��pw�a���M��a^j7GK���ކծ4�_8^(&56-
��eb@�P'j��Pm& �*�����w1��!(/?��[pAG��n<|8��Y	]|VBsd�&��Z�I-����6�
	�W��w$�u�l �Y�
-�M�8�u��=�	��Dc���5���}gG��
-�+#oM�!;Rj"is��HϺ���
� ,F}� �>�#���:$~1<����Z
��\k8B��\�t�su�
����d!|#x#�b���ح����ѝ��\dVaul�K
-vOm��FK=�V�p�w����3R�B+��� ޟH���'�oh����~���|����f�Ǣ������W��5��w�i&��r�����C�h��V�Gz
e�b>�\�Q'W��
dk>���1y�f>�[����xeG�
oK�\:?فr���
h}dV:Z�LŴ^��
-���l�r3`Jt
1���^�
 � 
iP����Z��O���D-���Z�]<�
�0@si�㇋˺�l)ܬ���9#�j�g����R��.�
%�!0���K��y����~��=bX4��S
] :c�Ϫ-GCh�!P
i"w��Հ(�{
}���������|jq�Vc����Y�����;
�?4+M<�VzPw�m�_�lp���y���"}
~�J(8��K�Y��W�y
�G�V���f
D�VǛ����-�3�(+����s���s�+־���c��$ ���YV�����+����$��o!�p�?N���I�
��X�4��uKp=�����^�h
��Y�u�B;��`����ꚓ�}�y&�L"��f������#�	e��"����Y�UJ�?���T�+�Q�S�AU����s.��Z���̟���ҬBЩ�7yԭU�#d�e��2=��(Rߚ���p*�hS�����f���]��P3�s�����c�[��+퀌�
sC�D���$�U\1z\q��������Z��P*w�S��\g�O��
/��~ne�:o���Z�]��1�,�i[;��4ZK����Q?ʵ���4=V�-�QS@ʠͷ��S��O��W�{pG~6�r��,��xJt=[ؠW��){��h���gF��2ZK?.2�
�՚���*��Rޥ�o��I��X7La�'$�_��D
ߞ0�x��J��?�Ky��z���sI>s{��rP8�[�[� ��kV>Wč�����>���WT�� q>S�ƒQ*�-'�Ӳ,�'z'nĂ�V�@Z���ė���DwH��\� 4w~W��!�
�0����-���r�_�
-
9���4�#m]cF��{�n��)�u#6>�R�������ɯ�k ' a�VD�	k^/���B\N�)�ɂ���"�� �f�L\7 
�'�{\!��{�[�f5�o�{V�t{:?������r��@����C�
�5�]L�q�X��L�L�)pt��t~���K��?����'?p�Ic��U[�=�=Ͻ'��=(���{*5�W���b�<>�Wk�F[���`��	;zWT�gO8����`"���Әc�Tij�[��~?5?���� ��k��`�R��!<��
��7��g�Wq��XfҮ��V?�񶾅3Ú�ZUjb�
AkJm��{�ZM
.�ÔX܍�bqW>�z^�]�[
-�����,���|�I>�\�
��8
�Z�E�c�d0�=�>N�{%���Lbam ��a�e�}�*�<�U��r�k��r��^DL�ǨEc��:=�C���,�
����?�6�\\�
@ԞO��S�j�j�,�n��&�A��
�}0�o�F���D��>��"7�0����/�ҨΤ�G{�E��>����
-yvF*�y���
�r��Cl��ׄT;��6ԓCs��0�l��N�\7�<�f�:�=�Kz�w�Y��YYq?�fy���@
�JnS���L��\�24ӣ����jZ�
�.F�:����
����!>�ɷlƵ�|tŐ
��i�ʱy����ĵ� �?fR�Ku[~Rz���`B�Ԋ���
��Kω��gµ@�>_��I��8#��uIާ����
˿G�Sp���U)�~vN�6����wt���5a�t^/�h�W�S7�;S�H���cmp�5��s�T��9o��ꂞL�H3Gn�L�POlg��El�3��xO�B9�V���̣���*n\���`��*�k3��s^f�<�kQ6�X2�uU��H�G%�k{+\�9�>7v�]�1�>�i1_9"M��(�
���fպK0�ܨ8�}���:|qy;a��a]���q��ncᕻ>jzVQ��_	�<تm�r����N|=n[�m�x���u���pnD��ً�v�̘X�
-�a�jx.�0낏�z99�7��~��e�_~2X������1.F
�
xg�2�F_†��5S�“�rٳ�7��n���Ü��:�(�g�{�:����}�	
p�O$�‹�T
���
-V�*m��(��U��W�U\�N5�+;N`-�;�������Tt�ȅ	�$�
n��¡`��:
�ǖ�mY�ܞ�&0?��	A��釘��ܱ�6�F��+�������J��
�_H@?��
qe��AU��}˒�rn�v(�݌"�
�D�}���r�BW�����Mc��D1�5�ժ2�ݻ����p�Z��%C\���,_
�\�F<��G�����n�H at _P��œ���K���FT*�{�t
E�u�"�cUN�,���;L�
����1UO1��/�T�\ᳫ��.oi���<]-��(0?o�
	h�
uҝ��.u�aϫݐ'�y��Zs����4����TA�M��w�0R�-��:_������qb�ĸ�!�ZyOQ�}�������;��	a�A;�p��+H,uv������?!�i��	�O��%��WC`X�����I~
-8�6�T�,`X�ϫ�M�v�2I�獱E?�xU��X�i
��lOޣQ3�����C�.L�-MP
-Ss$u��C���@�P��-L�-���n
��:�+}���8nˬ�+������'�L|×y��Z��~ܳ��nW3JّB
I���g
�3 �Šo,�a��h�NC�gM�do��O{�a8�-�
F啮>EX�s\�)Ձ!��\:�SJ�
f��AN%|Q}lQ��
�^�@�ZႤO��(�A�`�{���
=k�{�f�}���L��V��EW�w���q�}��B��?!���'�RC-ƥfg��G;�s
�K�x��
�D�i�t
�C-s����m#��v�'
-�ț8��\�EL\�
��ҽ�^m��_�qms�p�ݵ2�t皚] ���]}k[?��ŗ&�)�S�oh��?��f�Ǣ��L@�X������
��������K
����� �wX �m/�K^|E��A�G�^
-G�m3Ȍ�}?�P���H���hn���-��k��׊Z��k�|p�v��y��ůJ��Ws�
]����h��(���ËK9.g&  )˛���5��
���
� �&=�}�x�1�ڬ��+s,.��\�s�jRr�Rr��9����0\<����&��m�I��+���/J���
�%�X�%�p��˻�Y�%�2v�Zqs�?�~������rkP�
x��h:��z�;�ku��q�]9��H:�ş;�
�օ{�o�A�']*9:3�ͣ�z
����z帴�-A�l��9S��X�L	��f\ơ��Lн�?�íPoЈx��sg�0�.���q{1�4�����k��8��m^Ϗu22�{�ՙ5m���M[ڡ'���Qeł��z����E�[� �:��}��X���]�&�	(ܾG�FO:]0������sgU��
VE�v嶶����
��9F�n��}����#��n�����H@*�Kr�o��
-D��%�q���}
Nq%ٍ
��ݣZ�
�u����g�Pܭd�ԵF��K��WvO�
-�
-�.�+�Gs�N9�%�^�m� �^s�% UV�)}�'�6.�*��|�Ye�|��l������B����������������5���]�YUG�����<%,�7����g��}�:\$�-ߏ�;���(s�f�kU�a%0��
_�.~��
-���g��a���q�O+�?��<������F���%p�\�b�iGF�
�Ӿ�G�1o�Q�k,���)O�ԙ�#��z�%��J!�"_�/i�:m)l���#�<���D�i=��;P�<��Y� �����Cһ#��#��dʫh��>���2��U��uv�n
�A���O��s[�g=Yx�j�~�+3!��x��(�#V7���������<rq�}�����qE�
?�&<�˸��
�{�u��|�ӏ��m�x�
9nޜ7%}����
KU�hN�oIj)g���K�1�p��DZ�,����:y����e��0	���
 �b�(ꇟ�fK���
>�p2O���ߟz�
-s9��J��Hh%c���yS�\�
7�gn��3�m�W��J�T6���E�����:�h��לł'7
���� D�ÿD�ŃQ�����@U��(�\<ύrO�_ZPTy��Շ�s��	�[����!yU2[J�d�j`�7m:]��,
�
�[�:
v9��
s%�<_�( ���>��
`X��p��<�MV.|�-{q����Gg8�nX���sn{��υ�9�
Eƪ�>�Hm��X�,����C"��� a|-9�W�t�bYf9Z��ip04
-��/$������ � *o�|K z�ϢMr*��,�zl˶.�����+���mL�>��cjn�	��S
�
/!�ג\�@�U/,�n���S=F���ϧ��z>XR���ׄj���i\7�@T�fA��:q��L��|�
�LJr:��t�|����qh���%��
��P|m�7�T�;W�1��F����L�#�	h��˭����h��9�hM�I��. at U�1,e�`�׃��0�����MQ
�����|F+	W����%O�X��{�9jm�\�����Y��s
�
��E�3�n���3>M�����,5��J�
N�}BS�I�2�? ���O�!z��`
u��Z�f�Zj�xt��0����|u�'��]oǭ�5�vki��z�3����r��B�}eޭ�7��w����U�B��V&���'T}��s���
c�ϽF%0�Fn\���qm���_Դ�
-���
̙�|�z��{cr<(���K���ğ�͉
ע�

{��f�ӋFzT3]z�R�$�n �b�w�oÜ��aB���]�0C���pRE'���s裏j��x�-{ͨպ
$Df��pZ���Ny��(��~]���_�������T8M�wdOBꒃZ�>���I\��
8�D:x>�Oq-iӠ�t�O ���_��Љ˾�����çEr������I�tت�
L��2��K2�ь(/Y�Vz_Y[�ݜ�|���no�M�(2�7�9���j;��M��2k��V��2��+u_��"�m�W�Ovzu��q�#�pmlM�l�%wY}XJ��V�F(��BK����^CX�:9q~rK
-]ϣ��f(
�=R3�9ɻb��)BO95�6<jڥ^��:�UO
5��껈�)�ڼ$ŵ�s��du{���ʪjmK*Qv?;��$
	H4VK�
(�D��|3�r�;�|������8-`V��
��#��Oo\)?��u��yHMy+�WH@�*���7W���H�$�s?������5���,N��6��h�=.伬F�s�0$vA�S�)�3v�[`�����Q�6/�{?�E�#�V7��6^Bf�A�E�.@��#P�S:�G�N:��s8f���,�51bI��XH5����]��O�C�6
�<d�ϻ�V�>��%��#�s
����<������}�	h�c��V]����ڹ�3��V�<���v,=ee�=�K�}�zr+��rlm��.��QO�8"��hL<�Wnm�'5�u$z�]��Í9�W��Q��"Iox
०1�
:v_A�x�_"�� �|�j��ᬩM��՞UXN���z�:�V�e�,�Q7�D)�s� [...]
-yR.a��_�4X��#	12CS
-Ȏ\���I�����b��S5lس�>֛��d��t�2
2ݪ1�P��`����R���)��Z���Za���
0�Y�ⲓ
�D�
H������<>�+��UM����qx}�9����?+�q7��"(�]t���+oJ���y�{�l�S�-`g�~�o�H�lF�1-�u�¾9�(�
0-�:�Iz7h�a[�
-�G��� �
5
��OUk\o�L��!�t���v܍��4^'p�o۳�г�K�~�Dxa�yr"���]ą�ڏ
Q�3���k\�0��>��0p�rq��
�h8�r�zD��+}珇�M�Nj�CD:�@)
�W1��>M��s$����#i��7ڪ����ī[4��*J`cw���
���74�?�����OD��	f��T��]
��;�*.5/n\:̀�ga��?=A�?���^N\�VH
��w�rt=���N�҃@
�h0��d���3�|�>^H�>�n���0���f�9��t��hY��y�����Z�d+.��@i��?�����1\�
-qɄ����zg� �r
���6|�q
���H��az��
��#w���e�g|��4:�=
�u ޿V�Y���:s猓��� ��"|��=7��W
b��*1������-�ǥm�{V��3Z=��{���sJ7�w��	��}�:��7ǩ����G�;�#��}�r|����o����J��'�l��Fi�チ��v�fg�]s�r�0���꿲�a���!��F
���Ya�ψ��[_K�Se������
�����@{$/�^
>��I�h�i�
.���h��Oy.�i�	�j���|!�<�~�b�v
��"�J��3p�GZpY��V5�
��;
G�~	4�G)TT�
�z�>/� @}��M<�_1�����t!l�R�rv
�
-�u�Oy5�kW�
nGC:�j��
�E4��-�8[w@���Q�Dg
p��y������;j���-z�J���7����ٙ1�
-y�tK���ZY�+�>�e�V��`~���+]c��� .��n{��;��|q����(����Z���Q\��&�2д�@s����Y[�nԩ�7D
��q���l��΢E�qN��ޏ�gڏ��B&�È���
# CNڇC�����y,�Faͪ������ ��G\�i�����~ƕ���g��U\)֏Q���7�x��y��$�ly]��p
j>���#Z;���O��v���֨S�c^���	��G�Ԃ@��E�1����;���/��
"���7[a��~�qX>��K�o�c=� ��΄�_W��Öonl��-y�pF_<����$��]U�{��wv�� ݥ��L5
��ة�W�I`Z�T��o 8�q1p1�( �]>�+
�<��Y��.���onh���Ŝ,N��t�^��YD��}i>ξ����o]h�i\
������|�x\��ץ$��L��6�V�4�

-w�O s�_��E�
D�
h�cC��A��/�g����j���l�\�
ee����s�7�3g/�2yv4��{y��������ʼ�Ho����¢R�����,0���]K�lv$�
��7�/�R3��1�(_�&��2�O��+�m�fA�^���joo��ќ>�'�k��EG/��G]Uz�2��n�-�>�ͼ�Z�
-���gr
^#1����1�%��n� �� �y3�KTq�Ө�|4u���_�E�54�e���/����
�w9g���qs��}���
[2u
IEw��ӡ��
���3\�5�W�7XU�̘�fc�]!��H@*�!�*#q��|�a�oq����8�ݟ�?
s;��{Q�h�hT��lfwH���vJ�4�k��$q���5۟�1���88׼�W1�^��Ta�
-��m�b��z=�|�~�k�_q�������d�Y!��rO�![����J5v���
cCU�;�$X<*�&�&���,o��9��z_eu�p\su�������,#F�Dh�
������ߍ�01���A\*`���Fqy
n�y
��1=�U��u��WN������4�2�zh}�G�Ԧ�z����M��Ȅ���
�V�Ж�(i1qaz��6�pF�Koڐ�0M��,�@��8��c���%��������@�
-���C=E�|1$M�汞ٿ�����ڋ>�*��n�*qJ��
-b�Da˜��t����mU��6�T,zZ��i�0Բ��S5��RNKLg�u0�<��
ĥ�4�caW�}\�6n\K
�	�� ��3:��Zm�@
ƅ�Lu
�bӿI�5�\�ܢɬ��� 2۽'�t�O�Su��'�5#��1C<�v�\�"2���A�x��
�%dD:g��'繲��
w���
��3��es�:�0�Cw�1$��N�% W�
_IחlG����7�g���zI�c�@���E 2�ѝ�����]�CI�Bn���G�:ĥ	��˩ �&�W��9�t�X���������yc=�6��=PWS�v�6)��$��V>�����dז�%��u����}�`����c��KbE�Z0q<{����#�@\��0�a
��H�k�X��v�ה>Ͼ�*u=��~JK�ʮ�
;�Xi
��፮�4^�rf�\z�*���7�V�vQ����b�D?�L����gr�"tu�(֩��Z~� �:�=�������W�����
� �

[�'�)���^�xO������$��p~�,G������bS.e����9#0~�čx��fbw�u�
5�A8t65�Ru$�g��yN�3>�>3�q&W6�$�׋{*ȓNJx#�@=��
T4v�i7��Z?-������r�9ܫ����
�/��	�A�8�)��;�G��
�����Q|��;�T���멵��j>x�(
|�u���[
p����#
ɱM0x{G��,��:$ y�4����q
	�.3ϜW����"�E�;���vy�&�J.F
�& q-�E���i�
�A_�.�}�8��ܨ�����'���
����
-q%w/�~YG�la
��f�~$g�`�7f��
-��ܠ�գ�~,t�ͮ�2L=�x��h�>.q�N��5�0	�y�B�0���z ��j�d:F?_����!D�)�dz�T��=:�o ���e0^ ��A�a
�J����Co3Ʋ3��b�J6O�br��gl��PJ��#����/r
�L�1�Ag�8���:K�׽�_(�W=z�P��v][Y��LSp���u�s+�.��dk�,js��Y�GE
Le���0���9qQ����5
�%��)�\�tC�;
*�"��H"78ҝ� {���T���Y\����]��ӎ���U:�3!�����
����g�����Yen�?
%�K��o>��v��
��P��	���c��n�F(+�޻�G�Ƿ18N�s�`��'CՕ�ެ)<����ݭ>�O���i�7ն�mZ�NF���kId4mI���8@�T
3XqR�i�m�"��3�
-�靫��#���
##��-`�aZ#�A�ڲg�2\�"x�n5r��jp�v/G�,�~��f�$����0J at Me꽚��#�x_���n��%(�HV��tj9~\�yՄ�����A�#�e�ר����zPߘ���Y��v�n����`

ڝ�kԒ�7��4�dS�|��>���n�X�n��/�N4
�z6�
���'$�_�� ���<b����B�	qq>���5����I\�D����
����=O�r�8oo�G�b"�oV��g�PT齻{3G�c��f�6�7�p
T��K�����ˋ'ǩ��7�'Mp��������"
-B�<W��B>Ս��h�W@�
�⢘���^h*>.4�`���s�}N����
��G�~-F�ܡոm�����c�fU���fn���1����*K�����A:�^@QTl���O��{�=c�y柇��1�׬.3-�H=\2�����9�foG�`�2:ۋ�::��
-��o��
��b0�dj$I`�Lw`��"W[|\�����kb���z9�q��*GwfՌj�z��3'��G�����6�dz�ԧ�s`Y�?6��˝��G� ���!4�I n�:���w
�xهB�&HF��_z& b:V�oB�t�O�o�K����U%��[+|rS:\�S.l���3Ny�3
-�탦���OOW	���r�|��އƿ ��z�a�䡯��I/�w� ���u�#"\�(�
�����ТE/D��l��eQ
�[�
�%�}�47z�����;��ኧ���v
৓�-l�~y�ޓ0��?�_e���=�����D��C�����x@��h-{�B��
���O�*
�f�``�:/�Bu�u���{
��gG�(���z���$Ӹ��Qy�eA?�����8A�4�g�G&�JP�h� t�A��}c��C�N���:d�� �f/�����0���H��z{R�O��,���6t*�zK�>����U�0��s�8�<훻�k�;A���A���� ^F�в�����@هB�U�M/!X�cYyij�*�z�.8<�l�ʇe��{�S�Ѱ�������F�Z����QgN�Ο��jxHy��GSݩ;�bS�`fnG����A�< �! �y@)3���7
*��5McA���^s��Em��~��f�ϗw',ֿ͔Kty�k�`Z�������}���+�|r7����vEyjl��^�L�<5��IX
3� ����	��q��j~�	~}O7��������U��K���+��0k:Z�W�p�N`y�
���Þ6�{a��R
��
-8aN=<U�Z'Eۯ�lnnW�t�&���&��
����πB�О�

-]w� �lP�*������
�n�|sÐ�-�z`�_�E�ڸV7'��a
��O������i�㻝L���t_)+S�af
*��X���:o��p�/s����X�_�V��

�H�~�
-y�{� ��T|G&��֎V��D���>�
��s�O�v����D�����	�����޲^��D����hu�'��J�
a��lK_�dN�ힺV���2
�����b�K�>(����7z�_��Y�닩�:�w�����yw�O���߾G��mv��6ֆ�Iw5
��Qw�z�U��N��V��yYMe#f��8���\R
����������_���7������.���Ś�(=9?��/�F�ĝ/3�_��m�͙m��9
�#��\O
�n�b��j��c�-���_����@�+��#�R���A�=/�
�8������c?�S����Bc*OP*ah��8�1�/%�^����=As�]����M�-�LOח�D6��B{�K��\
s�FMG�������
W2r�vmJ��ܛ������3�2���{� ��3
IutK�֢���H� ��ի��m�PZ���r���T3�M�~��3KN�D�$5�;.x�����%Wv�N�[�m�r���5�� &
	�;����o��	�U���1�^������q�$O7C~�ד��RR�x$
��[N
-Ԗ��S�8����
���� j���{,�K��RZ܆Ƭݫl'�7v��,�[gGL2�J}����	[�W��+sdc�[����[Pj]��S���,
��$J��u?HB��ʩi��
j}"���þڟ��q]��e=+J��D����6�
Φ��z_߂��n�?�AM���*����/ 'O���	��%?�U�%5�D)�rι��n��	KZ�����#��Y�j���q.S+��7o��R �}O�2��M���_	�ݿ7��o���ʸ�6+㋶-�
?���DF�}����s
���L�/{f̽���x�
��7=�wE�u ��Zi�u���0������R{P�s�-*q�y~r��FA��
>_%kڧ%n����A|*�'-�� �W� �&P�L��kBkb�q��<������4����%����5�a�4
p)�æQUf�֐t�jO{��+�V��K�v0Z�Yq� �™�g�e��c�.^?H?Wm���N�q�ר�/ ־���!Aqx@�V�Q
endstream
endobj
313 0 obj
<</Length 65536>>stream
-���~{%]S/A�����:���L>p}��+D�1�(zLQn�\uj;�H��&_v��QS3�����l�{�����Ɓ��-������gZ�_�A�V�~R/�6G�d�N�O�
n���K$�[v����u��z�[W�,��99`�,ӭE����ǭ_

�/�����(�z��+��aUg$O��A�ҋ�\��q at 1�x�`f�E��{���_�Iq�����R���)�;{m��'H+�[x�{J*�@^s���f�g���l�k\�0Lb�2�D�f\{ѽ��1�r+�ikt#3<t�
w;�4�Ǻ���+��/ ��, E*_e�B_�m69��wj�~���ņf�6Z^wT�U�Jzp?���
 �e/��

��"9 at F�r�w6M���ӌ�o�h�Dͻƭ���U�H1v*���L�9Q��
���2�?��
-B�YQWoz?_v�����n��g����5����l�F�8�p���0�;)n\졽˒(�Up����{�u7ٻ#�s:�T�u_u4�uPb��'����e���Y'7�L�� ��Uw_;��elw-

�'�d
����nz��$
�s���3
o{b������!��'
�*�1¨F��)���,զ�s��
�������9M�UT����'M97.� �ʡ=��N���1ҽIq�9��}a���X����<�(-���P�4�v����0���v�7�K���.nދN�§k�;��dgtG�m!̶Z�
�o��ج>�Ʋ5����x�Gk<���NB�����8�'=�y��h��dE	����ϴ�JE��;��Lh܏ʨ��j�Q�{�Z`3zWp�7�Q]�/��
�Q�꟦�R�o֒��ȝT��pC�;�}XK��Ym-ִ]���n'L̳����,Ϸ���/ϗ�%S��OfXT��!���n�2�z���k��w3������b-�l͚O�9�Nfc��N=r�c��ڷښw�M���5}c�^�,U3�V��(���y�3,��t�5=n/'V�#����l��^����>�Z4��Oϟ粌N-��5(�;��[j�U����������'��ݾ��p\���I��-�*�<���gy�V.e�U�����_ F|I��-�H�J�R�>����1
d�e�2�V [...]
���']�"h �Wr�%_�/
0F.�ѣQ:�.�G?�����b9�O
��V� ��
�"%���
��
$I�0>�J�oF�X$֫�����Gj���=��wA�BR '�(��Z�kk WP�d纃�g�6�٭�Q��t��o���`֝{�`����+�o��7zu�Fcp	@������ [Pf���*@��
P�t���^����B�E
�eJP��b�NF�=�B��K蕭�TA�p�=�
���;Th�㼶�g at +V�o��ņ
0��8�@��a	�[NȻ���a���$h�؀B���~�F�c�;"i��N$�f����V#&�)Wx	������+�DU�{���.�/�ǣ��:�?�?Z��h�
e2
(sX�"��(v΀@f��(}�}\� �2�5]
���
�R��� �)"�^,��8[�&�To��X���ޛ�+�Km��wϨm��E�����.��b��Os�?�_�
-m� �gw�s�2Д}}T�:� b⦠Z�p٦ �0ư

4�S�ОF|h7
���� ɸ���Z���T�z	A��
�
O�x>�ã������u��Z�>uDt�Y`3�g �م��p��x�
4�D�I0�Y_�a����*�N<T��a���W6H��8I����Y��/�Ϡ�����,\����O`$~Ͻw�L'�4S��%y?~���
��X(Ԟ���}���, ���q��� I��Z��O�	���:7�5�K\)3Ϩ� Ts9$l���S�3�G��Q�Z�r������a
7�X?
��|7�͉[�������� F�6P�� p=�}ӡP��Z�s������ք���D���	۵`��n�����G`K��	�&�����LJT�'�Z�&n�˽��
��U���ܕz���y�ƶ�]� �MM�ў[
C���@��D����6k
�;I3)�z/���qh䋓g*e.����G3�
$\v���4At~z���Z��E�H�7 [...]
з�+�+`'@X}
�r9�����;�����I^*��.4�
C݅�ֿU���0�x�D�r{a�?"��n*X6�crgvp$}�j�Nd�RL�z����
�*��l�hC��:z��Z�
��&��E(��0Pޏ�dH�-(@g1��
ܚ|f�{�~�k�m���s��e�
�
�?�w�3u
NGٶOW������d)�D���f���ko����b
Y{A�鍱���*�PW�R����
-
-
���9b&�E<(g>��U��O��HpxCA�:R>��=�cn����I����������h:��|3.ߴu^��W��hgT'���ؙo-�u�j�o4�9}����pX����U��P��|O��6�@���Ů�^�-~"���>m٫�lɣ;��J��.��ֶ��PV�V���J�"���K�b˥�����T���[Z��c��Db1h�k�ޙW��`\V�W�g�1�� 
I��y��U�{֡
��������?�
�U}�>��\�#�W|W������,n}on�*�Y��
ƨ��f�ւJ{
i����gme�ѷ�1q�s�Ь�W�+�<
���j���W8��(��MY߾��1̴�K������Ќ�;�}���ub�;ˎK��D��������*���9����`������s�:���]�x�R,$R�u*͞+� �~q�
?ȟ��ߗ?X��Z*SV��o���s�{y�9_����i9�5*Lf��
�<�j�uy�*��fTQ?�}c�
;��M��yQ��2#89��nZ�^љR�&������]`H�>9�z�� �m@,�3����
(s��D+�[�ْ�5��Ӽ�Nnur9�s��I���
�̦H?1Cm�H��J��9�*b�ٔ}��J�.�MW��01S����C�vʛ!���$~�`�?`�
-��Оڸ�=�QHn���ȩz�N2�Ո��oֽݳ�{l{����}z�(��D{���ҕ��"��<_+�Yt+���hˈ�
�Ѿ1��k�/�y
_J��9煩��������wQzm���|��Aq���1=���
-��yˣ�ᆆ�Ke�W���ڟ������ʑ��
KLV�;93���4���E��������x&&�h.����1:
�v)5�
|��M|\Z��?N��- ��;(��P�.-��h+'���4��C� �}=�̭
�'�p��WM�i�+
-�_M�����^�1�VӤp B�/�r���1C�ڏ�+
pK���V,6�_
:l�����ǯ ����Yi�%�����T��ݥ�E]z��,j�v�U��f�n�
�W�)F���
��s�
��Yr)�&N�G�c挍oa�0j�Qu�Z
��,�>Хގ�X���
{�^����R�6�πsR��S%_�"�9K�D���'���7��)
�O��ov��v����_�Z�J?U�үJ�3
U1�iv
%©J��w��
��A
�fR�;����z�a��^b��\�탙U�+,��b�g �4� oG/P�ڕ��vk��9��9*{P�0
��,��Xa<Y�+^���U�JǓ�T�:��C8���X��dh�fz�&�X8L�=2si2�ñG߷�����u�y?߻�`[�k�H��4�?�_��T�� �Ԕ�p�ߎ���
j�&:%lR|4��
��fe����Y�w��*�pٰ��{|�>���b�)
>}|"��
�.2��o�
���j��Jʫ
�z�j�����H�p�}U��|u.����?ȵS��#�4�}c��
�$ܭ��B�Q���۝�-�|(�[q��%e��
��{
2��s�O��7+�n9��0
]J7(`�=�Ʉp���ú��W-?+���b:����g������8��Gc�5;���h˼9�e�l㬞�)���	a��}\����0�y}��g{����kozY?Y8ٿ����T�@YH�EeF<��
��޷RV{�,��8'����´����
?��*��ٯS�i@̕�:;H�\�/m�JiN�;Y��AM���ޔϬE�v��G��
��t�/�r6��/
Ӽ�[v�&��ԚOQٓDtЛTm��M�5���u�U��<�7+t�5�3��3�l���k�	o�����T�2�oQY^�*�Ci
<T�ָ��,�=^kgG��;�p�4Tzr_И��ЫY�v���H�rk��˨�/*�V�kM�:��`
� � u�3��mk��%�.F�ơ1�6�1�G�A�YU�-�x"ͻ5��k,&�¥:N4�5̹<
���4�؇*�tb�Ӯ5x(Ԁ��v��sZ�W�Ь~j�Ʋ׉���J�oH��R�Z3����1_�
��,t�o�fG���m��[��5Lj�J�q�r��r�y��
��Y��]���8�S�B��|@ �F�=��ei�M�P�����*�hf��ze�ښﯪ֔�V3>�䞓Gy�n�e�塥�:])�t����TJ����eEa�Ҍ�v�o>���d�\
�r՟�[F��N?�Ԁ��\�Z38�5���4��R����

��5閪�[�VT����`KG�;.�ߜT,g8�)���-�ީPC����>�܉��q�Ur�}�ք���},����n
m��̚��(�s�V���M�ƧV�W���#u���t*�~-��\P�lrQ��ν
s���,�o�*�O:m"��z�ZG�
?�_e��f2@�s
�>.@'Q
-`�E`��`��P��t�e@l� �	h�c�2�%@.�	gr ���dv� 2L���Pu
 ��*:>�C8�k�f<	h3\�N�c�g�G�H���[���K�ٵ���EE۷�P��J��A���P�+�QW1T+yP�}�j�/�HX�e
-P�т2
�\M܇e�HI���%��A�mB5��;\ܷ�Y� g,e�ÖP諴��,e �	: 
`���Z7�]�
��L�b@�$�'��ؖr��
�*G���jc ��B��T{��ۑ�P}��
-s+�������*0W��tY������� 9W�B)� h�=@cv� {�)�W&2�1ׅjO�����2@)
-
��[PP&+�P���
�P+� ĭ`P+_���qe�]�)��&m�g���F�d�n��:
��G�����W��՚C�^V U�
4���Oz7�����
�U4����P�* u�=������ж**�W(9���%�$�!�%ػR~	
�
�u[�n��ۻ��N��?r��kɎ��o�Y��\ǿ�B�d
���pt�]', �)H����c�w�(�JU��� �*Rr�$�y
/����S|�[���m�"��MG�q
�V
�s��o)����?�L�K������.

5:����W|�X��a�����#�gt��vjS��?�o% �mphY���n�yYD�+�@�j�f����yF����)p�c=��G�=�VC'� �?Z���n�Acq^v�s��l&�����kV�e���
-�f�
-l�	�C�
�l:Ч� ��wSp�q��{& �	��T9z��V���ܓ�����󠏮��[_n�(7���||���^t�������Rz��N#�,ɋ;�:�w�g�S��Al���~@
(��}�w�
 �a�{>��k�k�C�
-H����M.���x�t�8�K�>���/�	��G���~�ճ��V'��M��
S�������঴�~|;��Y<l�ᑱ6c�c���i"��w �����&[���W@
� ��1ȗ���e����3q�r��3�֐ �&y��iV���9kn�>��2�m��pp㏼?xGuw�כ]�n�]��ܿ��Y!�}n��M��������9Ӫ�&�V�W �- 67m�G�� �S�KG�{��&���K�w/��Y���`޷�F/-D�
��+z�R��?
j7:�+��#�n&ۖ�*�q4���5vV��f_T
-
N��IT�r�]�5��ןf����_ ��Y�7��8��A	���r��&~��C�j.��X���ҋ�.m��>�/��oW���:+��<Z�A�:���\�-�}L�|�lF魲�s�:ӯӪ��3F��Zh/����-��n5�|p�W�G&�
�w
-��H�P0��Bo
����J�ݽ�
N��bw?:��� ��{WYZ�E�ޤ�y+����~�h��j�}f`�ˇ�/$�i������E��v���|d�m�'���� �sPh���]}�6�+���򯻾�Bft1ޫ����}���:�<�(��NN��ic�����)sH���a󫙝���7�Ƞ��:�rK
E��
O���9/r�WF@��G���E�����r�~�����
-��M6�C��"*p��	8��X���%�k�l�C�������DG�n�[?2G��{=������Oћ�T����a

�*��[�x.v
E�ة�<���r�=!�1_=�/��`D[�S�&�z�_���%�ɣh�Ƨ<;��U-�Ϭ�U���r�g���
�j���`=���X��D{�fi��R���)��Tu^X!m��L����Lg�`h� ���I 
d��,���g�u�� �a\8��(���w��(4��0�K��5ګ������HC�1���r��iS�׮���Z��Fj&��ň�d��Z�%7,J��Y���3g��0��1I��s�z�3��JCP_0�`d��V�YI�B���y

-�K���s{��{#�
����X�Mw
)�o�Ǘm�ZrX�W�Y�(�M�U��b�x~���0ޯ��LcĔ�w+����qc$
O���M���G��)a�AR��>��I
��
�
��
-JR�A�pV��O�}{2��ɥn0�h]g�
��.�mַ��-���$8/��?���Szة׬
���r"�eJ�_|>����QI
�
���jfj<����<��<�_?�`�
-
-������\%Z�����+���#���v*>n{SE6�� �Fli�@�-���ͯ��"=��}
-�n8���[�ۏ
/v
r\��������q2���v���p��Qu��G���
?�_e8+y����G��? +�rȞf%�>3rgD�r�W
�Y�@�'�S]��ny����V��ӽ\��黟�L�
�!�L���U6?#�0ÆM�.s`@S
�����P�p)�L����
:U
:x+� �B�q����;�
>��x��� ���
�7��i�}qۿǔYl�y#^d��<�E�D��j;��~���*ף�G��Xn�a(N��
-�!
�4�}�)�zí8�a��
-�
� ��TM��.	�����p�cP苾��FLE�q!u��������Q�b�|tPK���Uh��z��L��
��i���&�3'h��
-y{?������=߹�$�}'�I�F�2	��Z������dt�wȔ�F�%�ʇ%Mh�������	��=nu��f�H�s���5�.]����sOo��JY�
���{
F�7��ކ��
��!��͸ޱ�!U*
8[����)<᧜:�#�;=O�Z�I���J6�����ݦ.�݇�f�j��@V�-(��	�v
���W�=��H���q$z%W��
��ձ�4�Z%�H4QO�n&���bc�!
��ƭ]�s_gv�zO��7�H[x��85j�d���,���e�蘃 �A:����
�+`�{_|�SnҔ�J�.9lz2�ı�n���1��!P�r;�(�yQ�lO��a��
�{���2�������r�'�&.[
Տ�3�ܻ��
��%�Q�r���)ڠ�e+z��f�m�:��0(,�ؤ�+�l�l��y�Ƈr��4�Kv˯ba'��8j~V�+
y��X�@N���̍
������'}�
/z%��b�������]���V���v�흑n�G�ɸ�W�����g7�y��ͳܩ����&^^��[0��3�N��װ�CX��zJ�
-fNPK�הJ�M1]
Z�͍�>ӛ��y��)������6����
'�o��;�ۄXA[�Un��*�,�`ָ��۸OF�ƽ�(� �{1*��#�'�q
�tp�FR�[��Ct��1df4��� �B���%�
fUꟉ|�
�#E����5�OmK���
z��V�<�
�71�7+0�i��
V=�^�fKk�x��Vn��u��������?�E(��e����yk�j�vǒ9)1���N��(Â�;�r�7O�1F�\�ݏ>�Q?����m�F�[�VjҜS�y�a�U=r���@��R��DX�f�t5s��G9�+�:��"݀�ؿ����%n�*���
�4b�S݂X=���ǰW�1Z4���oގmģ
Mgr匏�~�����m�F���_h43H��Ʌ��z���[W����J��^�ǭ�]:��SI�*a)�9���,g}��?����ڛ�*^��r���&������

&��I�g���H��Ό��}�6jk֘l�U at 9�f�������bxx��
-^Pq$�>e<��%��'��ͥZ�N���
�CC�/���o��KFgs�+�
�!r��|�>�\���8�
�9�՛W���O
�Q��q���&S�%Ͳ�d��W?^4�83k\�+s���3�$�E�8�i���
�PC:V~9�@!�
�.d�0~ki��?���ơ�g�T
�~@�� �X�' GE;�{m? -�j �p�[k*������{�B�h�
@�ld�id��d���LY�e�,/
!�O g�,�[�
�B�x]Yq���9�$�>y>����H����@�����y[(t� Z�P�]h���d�A������Q�uZ�ZW
@r�
-~�O�
�]�f
%+'�{��J�� �e�!�����r]/Y��&�ø��_�_�!AS:�ݶ�[��<8�
5 ��x�6�4���'��#
 g
-�v,@�P HS ��Wd�}���Pf at A���<ָdX���u��x–�a}��=�&ܷ���W �L�͛�ӡ-�h���i��OO � @;E(�_���8T�m@��z q�!z}	�����
��
-�J*F!�P��/~vb��
�5�g��?�Ԯ8�#�t|���/� ���<�a���CQ{q�� �yQ 3��ء	���
Ё ��H��ܚ Ǽ� �/NQj����;�w�b
�_^|�<_�vK��y��*Z�
-�����:1b�I��Gµ���0F�_��@n8W�)sk-{����w�F�NC(2���7w�Fг@g���[�uԼ�+�6�xzҤ�G4-�W�s.D��
�[��F%��F�Vd��5Ї�y��x^X���������;��ꮡP���V�n ���
q�\N9 dz~�_�׫X���i'~�
��|'lRQ�
>�H���

5���&`���M��=ǔ�?ڮK��ء.�N��F��2�>�Ǐ!��(��7� �a�����m1B0�Rw���< z�
 �E�}]��W��3ԺI�I:�HE�R�ݠ����Y,���eOo��^� �R��.���=/Q�z��H�����K3�~?Fw6��G�i��~]� WiB�b���A]} B������l���5;Ze�\���r�}��)��U�z�TJe4�_7��Yw�#�VG���O��[
�l{�߻���
�����X����|^3�b��q+��� 9i ��	_�@9� ����-~o��iJ_D!
V [...]
�]�?f�ݔ�݊��N]m巭V�)�݆��f��6��쥢o�e���Y2�:9Lި�/\�O����d�W���C�c�tZP�
�/���~
}˨�Ȏ
�t�_z[��h��)���A
��k?���~��D!����c�
19��o�a������jb}��
iHFe��u�T����a�
-o�H|�^�3K6�I�
-�6�)�ւ
-ۜ? �:x}ӡ�W�9��T��
�>�ը�p��e��@K�I�rTނ��
h�d�(�7sN%Z�3XMW�!�=B_
;Mk�;�K�T
-
��Ɏ�e��g\g�Vv�uJ���W|�L�Ph�}�6�����7
Z�b�P>܎��ћ>�����/���nư7I�2]C�m
9��)�7�n�7.	P��.?m#-����E�h��H�g
-^s��c���种�|)��<�s�_P�1xɄ2.�ys ȟ��ȩj�+����K�~�ӳK#w9Z��c--��R�۫
-��t�������)F
g]~+�	��G�|�!
���i���R�����Of�W�ٲ�Ŀ��
-�<(4��@
:
I��#��bCދ[,Y
�E�C
-��}S�oA�-Z�TT6���V�\��At
���;���z�@ש��TpcyfNS�\��R�֦Qx榝�O;�Z0�A
GH/�"�p���o���7+� ߏޯڼ�>v�	z
n;�=�ô�]��fl{��]����е�BS��g�D6[�w�ݼ�4.���?gj����������v�ˈ�'\X���M�g
-�؋�'�; F�%�G����䷙w[�L ���ULJ�8���.Wmؕ�[6;�P��
Fs��]
-��eo(�V0囵q�z��/�}�l�^,��uF��<p
���f<YcN<??<x~��a}��E�}�/���!"_� r׹�B��7����h7<[����?�i7�

����3����f��u0Y:\VD~ �Jٗ�+��N����O2��Yح�/����`���l�*׌ �>�����J0.��� ؾ
e
-}��k2���~?�A�q[�Z�Z����'Mb�5�6�ky���ƐS��),�L4��Ӛ"5��>���Ft�ۭ0F����+�#�����%[�;�A[q����tڃz
�
U��+ �d at x���ҏ���q�L�<gѪ�V����yh;/�ɛ��)фhi�r�]]n8�
,QjͳҔ�����҆@ؚ5�=���}\�vr��)å�h���f�~o ���	��k1�q��?�_� �6d���i�)
��3cG�NE���
�ց���"
�g��,ROa��r\Ow�~�ڗ��l<e{׉8��e����Y
Wdn5T�9�{��G.�8����?=�Y���g�k��g�;�
<�w �|V i���y�a�t6��
��|�4S��fⵍ��qS��H���FJQ��sK��z�79q\���
�&�G���]�3���qG����>�G�����?}�{]Z��W��7�6#C�8K?~\�05�J���r5�8�����g�-���f�y�m�W���;�{z�r���ZN+S��o�|�`�r4�
#��|1�z.���a�f���ef��ӵ�1�.U����HQQ�i�>/�η^�Ʀ���o�x
�ԸS�5{�:�♳����T=mj$m�
��q1�[��#��t���Ea���U,n���
0�נ�kj0���;g��Ҋ�9��rW�U+%�w�Gt6/��0���a��I�ʫ�:K�_����
D�{8;�$/��?��f:�v��T����E^�=ݖ
�|��%
�?�^a2qc�MO���&����xfސg�#�v�m�n"\;��"i;}�hr,���s����
��־�MZ�
��7r�=/
�]
鶬C٪��^Cg_D{9i��<\��>�W�~87���A�qI
�cㆇ{�w�I
V�)����Q��	��
��}>[
�����:�j��)�"�w�y._�I�.��b5�y;�7� �O�{��'�a:��Z�㢞���
��U��f��'b�]��ڏ���
�ѫ/V�,�k�<�L�5��H��Z=*�~�|��j�
7x�%v&��ecG�r>�6�
�l�
t�x���
���������ی>+�����
-
���		|V�)�<�b��(c�%�a�v�q|W���a)b����O���q��Z�p��6Y�ZEv8mVC��
�
�O�zKO%��5�p��_}/R���
�f�{���y6宊錉���=E$:J�������OFl>=@wL�ݎm�mPy��r����L͊:������\kz�Ȧ
�+�K��Ѡ����kݐW�V۰����\�h\Ʌ^�k�V���뼶�e�5|�"�lNE��J0�����n�����N��`�|���*�f��F%
-$�o�>Y�ZF�vB�b������3)�g�(��[Þ\�']�y��lz�0�a�hQ`5Ϊ����D��eP{n��jr$U6# ��%�{zg�B���Ϻ�	�
g�ad��+�P1���;?���	(��*5���mI��J���~n��8�{S��f/Mf+��7�v�G�ӷ�5�=I�����bOh�����2
Q���8�I�/�M�T(��[��S �
�D���YCܲ��z�`�$(�3�y�?�e$��A�9)P���FJwn����d�����J4=Y 끎P4�9����X�r�r�/��o����b�ul��e;?���m��:9
f��T̬�ќ���Nq��Cn��G���F
;��G��R����-�LB ��K ��,{�[�a f?� ��hú6@�������h�8hFh 4�wrw� y�g 95���s��6���"@v�@.l;�N�L��	&�7��9��R��(��L��2��=�+} pj�}~O�
���
�
�P�u�j�	@�8�a�PVj�jqP�u�,9h�YA��"�@�
��m1	?�w^�(ӎ����a�i<�
��
P� ~�ÁBՌ��m�������Y8[�A�}(��7P�{�Z_ �A��A�|�e�3P�ۇ�_���*@;���.���FXy
�K#��.�8/�u*l��)���۪��nF�gޱ�
-��S��K�_�> 
-7x��C���Jx���� ���o�>
0|�'ٰPw4 �� �@ͩ��:G/!6��2f��N�Y
-:�C������ܖ�k3쵊��
� z�������p���{F
�Ħs�ͬ���g�h�B��7
�B�t7
���K�E�Nȡ�~���-6�ؿZ�X�]�q�zo��qy�W=u_h��m��W"�v���U[�`��/�_����[��`�+PhD��ٽL�& �� �5��p�L�G�0� J�C2���8I���'!�b�Y|��:
c�zn?�܍�?�`|�ID�����B���͟^ᦖ�����n5i\N�>�������2n�HR������O9#���8���2t)@Fd�[�$�gC����
+�������i?�DF�[�L"�j�ݙps@�!�Bǁ� ������b���}�s;�{
E��
�}�ݏ�]bwz�� �܇^��ŴD�p�1�jJf!L2��x6�`f�x��Ɲi=7���>��
��;�>Y��;�r	D���o��`�����^R�O��<m���(:�Wz� ����y�I8��q�*#�?�_ X���ǀLU@���������/�x�%WK�ޣ��Ʒ�
�B��.��l/���?�2����=�����1����q�Á�u���� [...]
�ĉ8YPφ�az֯~�n^�j����l?����
��A�K5�ܕW`�y�
߉����Nl�����G�0wE�d�q{=����$av��й-K~�1��e�7�^�����~��� �y

-�<'�j^W C/��q��84�{����x�d/ц��
��p	�
�]o��<2Ӎ~[hN���m�X�,l��`�O���:��?V�<�YN,e��\5j�s__L%s���ecͼ`��n=��N�� ����"���d������ ���Z�D�B�s
�zjkN���ʡ ����l�
PY�l�LN-\�hk/�]���Yκ�k��m��Y�Xዴ�f�����[�7�LŔ�Q��fp�o�w��u�����p:������g��I(8'Re�?��=����i'
O6��9%v��Ζλ�6z��������t9g��Ao'+���6�O�Z�*�E��a����y6��g� o >��Xţ�L
���_����ЋdhѠ-C��Y �Μ_�z>�m�kP���)5�nn��R�ʵ�٬�l��S��92��t�
��a�g~�`;�BC��	��7�νrϟ�s��4 ��ie�*���dڈ�2�����@�B�p��x@�·*6�AvU=����"�/���郷���AN��ְ�A�T�t�Fmu�W��8��ʂ�R��.gJ���s���`����^��"z����5�3"��B��
�N>���
�t�
�����+N
-��Ώ����Eߜ���v�L���2�dž=����k�$a������&�)�z*�p��8i��x+�]�,��U���%��&<&h~���N��5����� �B���_���4��P���B���
-��#���ỹ���:\;���U(�v��� ���[��
��m�aS�2qw.UF�4���ⴒ%f8֡�R��5�i�qt���(��C1g��b
��l ����
@��C@��*�2������(�����Z��8i�W��v�yG�M�U�cPcY\���VV��V}.cN{z˗9��qњw'�>F)c.���|�
���"����@9����E����
���s�����##�C��N�mp65�dN‘'���X��mR�Y��|�p
��Ż��ө6�
���6������5�$|�����	�(�F
y�%c�
��|3�����q%�2O���W���u�F
�Z��o���
��qA�|K;�Ա��<�;ž>e�M7>�t+�3B���M���R�'���u,J�R�E�o���vw�gn!8�@
��o�-�ϦX��}�wn��In��=n��ѱ�u�n�k���P��d��q
-;�wʵ��ݒ�^�ﻛ�G�<T��z.�,#�q�>W
ʙ��gt�D�m�̋�+�G�Y}xyጠ�A����Q���=�N,9�U:t��z��h;��7���l�
�h�`&>�nw(]����4y>�c�lp��{�\�}�Ϙ-KUZ���sf)xJ�eE[��=��^'�i���Y�N��X�@�
�
����W���ɯ�m����Cn�楮���
�ٱ�z+`�KmGm�َXZkG�Ֆ-�W�-W]�7�Lv/�`��S>��Ӈ++5������l�����U�zo�WT?q�y�B�ds$�E�ނq^�a��Тƾ]�SHB��ʚ��a����"y�k�&�m��
��Q���
����#�Y�V҈<�)>~�kڔFgyU���]�5˷���\�,]�����:��
�"�N�8�
5C���^$�et
̟£�~�bC�[;�#KI����t8�X�7��Pct�����JyD��h^�鈖��^��䂬���i~Cp�h���Ž�&%gK�sfI0)�]nP
�E�y�όɻ/s�;�x:\4���Q0�a�۵ԫ��,��Ɨ6�-��{�ϵ�3s�0��ZhY�Vi!����+�����S
aQ���U�����ԯ��ѯ8%-�t��	�a6�V)c��&�dH
[���k�6)�H<'O�9)����ݻ��j��u�7*�Q�2Y&
�<F����i��b�I�8�B���9H����Z?X�V纘�R���D��'G�/}������
�
-73D���g��k�/��
Y�s!5�(
�Q�����ѽ�������h.�\�Zr�~f߹Q���˳�V7i�k��V_���Fo5<|���wZ/�o���]Yߵ�hP�ݺ�iM=���o�ꓰ�{G��_�=�FΦ
l�Ԃd���i���qY)a}5*�.3�L����*w��]c[�o3Nyyl�h��<�����;�T#�3�R��i�j1�Ec?����Re25��NX1�,Z���&���y%u<���o�����4��Y
�B�U�c���Q���"ד������ow
#�g�k(2�QZ�,����i@�X�d{WZ���>KIjLT>ظP�
-z���]e�������9%J8E��@����V��
�V~ú���;��jw������i5���兛�zX�)����92
O)
�Jo�
2]��+�{J�S���N�*K��v��t��Ⱥ�����ݺ�*��g�{�*����~�JX���M�9m�9��9�������`�^���
��<�voҶwGU �|��;7Cڵ?����hNJ�L=�+Zc�j5�yt��ڭ�V��K��Jԃ勹�:���e�R>p�J&�z�NU�1a�����Od�)[9�����V�=r�<K��7(SW�Ɉ�
FJ9�"̒:Z��e�bn����>o��5��yTY�T���S:�G��Q���$��"W2��l�Y�LrZ�3lQ�Q\Uj��ŬC�/}@P���{v�d<��;�G���4Q����:@��6@��>@ugqWj�� �z�N	�
� �� �ߧk�r 2����Խć H�X����@�� ����� !�7��ҝL6�O$xm�}��������w��	�ByS
���`Hf!�!�1@�V�K�	Ё7(�Y �sē. �71T}K��
� �e����`�� ��&� <z��ɖ0��!
�Q���^��"��I�7 dvj at S��̓�X-6�ouT�\�M���I`�� �@{ϊ@��
��
 �sz䎠4�!_�@X
@�k ���,�-��_�Q�{R�
��=e�@<��7���ߖ*�`�GP�δ��
0+#�m� N!>���۶ 0����h
믾��㷞<s#�
-�7@�
-�j7���ַ�	/���(���p^Xē���<���cn�����ؽ>X��{��
��G��A��+�
@�X`i�0���-	�ӛ�U�
�M\x��u v��)��M(������^G��Q����4��"�,=/�'���
-V�U�p �U���b�u�������#!���{h��5��
��7 T*@��
��w�
����*�VG�8
-�.���&��$��3.\q���u�ۣ&%��A��1"2�W:_�1�L-	ۉ:�<�ҩ`삢{=���"�r��t|��`'Eր�P�/�]���z<v���?��oq��L�q@���k��gy���Ҧw#�/o�����b9y?J_3Qا�W���t0�
��eʅkV���9����B:�i��^��w߽��'>�<�q��;�}�����/�Q
ॸ
t2�_\|ϋ�_ at x�i��=���vo�j;r�P��r
ˣ�u�0��f���y]Ot{s�um�x���x0ǧ`�j��7}���~YU���Yp���M����p������7 LQ��)���
A��% �oն�b����x�q��j.�7��Տ�K�qN�-�;Q���v��z{�ӆw8����}N�|v�^��u�mg~u�Q���ԶG{���g`_~0��NNf�Y�~�B
-���D�I�f�=��M&���Y�
���
-��rv�%@��S�׼�r�r1d�?
G���O^�l'{K}Ċ��E�����
���ĔR6�����|4��H����⬩�+o}�W���[�
-��o�=�Rg��
e at 5����P/��
-�;{�]�a�]�
-���Ru��u��n��}�1[ۨ2�oKl�,Gשm6���d$�B{�I����P�?�ʋ��*_�Kٞ
�}FuV;��-{\���~�D��o 8� �M���Q[l
2]�{���1���u��a�p��w�|���*����
Y�ߡ��i]��
5\㧼�ݭ��?��e)�vF�$��Eю��N,Z'���-d�u��RGu��j�J}��� ��ۺ��+6�l�.row�h�
���}zY���q�?���c{�'�`��z�<�xu=�<ZLbdnY>W�f���X�ڂ�kʹ/�م��~��2�%�,�������g3�
-�3;Q����$@V���ׄ�j�ɘ�b�v���Za뚏�F�c�s:�T�
-7L�{٨a�͡�#Wg�.,�$[3h#�,���i��t�����b����j֚g�����İ��^k��t�8´|�. �
�� �
o�@�Km@
-��6'd���l8�e8V��)�.EWx`���2����
N���y��Q�.�n����n�aq�fZCV5F�'Xo�w8;=6��5�Vr�v2��IVP�Y�rR��b���?��������P(�E ����e�]�����Qǁ�<��1׌

M�N�]
��Ằ)��5NK�L�S3*�"�?��ɝ�y��i�
�6�E�٫,Ĥ]qĶ=�L��KM�{�=A�
�YA��`��qPfR�
��~���ċj��K���\���'ț�&0l|_ڭϥ�e�΢��*�@s3��X����57����#M�>Ļ"@o��'�����x���?:��dD�=r/q4�

q�?o����%yɝ_gT�qZ���=�[Ǽ3�������jzp���;=�h�V�@��X��g~j��YY�3�#�,J�ه;�=�"m0&�<ʌ��pr���O
�
zeA�ԑ ��
��!\*� 3��^��������zk�
�<j>��jnfޯ��b6�r�ĝ�����4�"vX�K�
��}~.ԓY�vӲ>�� �l�����=i�FF�7G��P�	m�
�-w��_H\�_ȕ?�4��1�!o�7 at g7�=O��3�|j��2\���\�P�o��+��;�ͼo�{TZ�Ñ����F�݊��Y#�U��S6Z����S�o2c�<,O�<-\M�3P
�!�Sw��Bc��Zp��YT���L��ޣ�
�Z�s��@���9��KDo
-޶Y)
.���[X��&�T�ָJ�W��̩�.0β���g�8S�Y^�»��
�	?��G�N#�2]�	���Ϟ��W��Y�3�6�n���ҹ��
���.�+2�X��}�������g����i5�d\�����$������%����eS
���!��w{9�懭���� 3����s$r�[U
,J�̷��\J�T�l�м�u�"u3�ݪ3��~'_6ӝ<��N>CI�|��u&��+��w�y�{pv$���22A�`����
�b�B�t���7Y��3��Ion��g����yT��#AeV�A�̦�V�����ڒ�f�b�S�M�l�d�mE�v���?X����v
M&���������
-��m�h�[�뤃9
-b'���S��ef�o����M�e�
dq{�B�
{������ʯi���4��R
-�z���H�e��Y�v�nMF7�Z
����jk'���n���Ϩզ��o���4af��Ƽz�~
��M�5�t#>Kc4M�L:V�V��
��,�ɡ-V�p,.S�P���`)�[>��ގ�n���n~���a݇ye��\ʌ�tZ�5�V��&g�vM�u{5Q��hlo�Qck��ύ��p����1sؖi��5n�?+:\$�

?��L��}��i�ɉ�*�F��g��O���}�mr���u����)'���ݩ��xX��s���޻4h��]~����ʳ�
-��V�6�zv��	u�ן��n�K���U��n-3ѹ���\�~4mW�p�i��hn���.Os��iP��*��
W��u��Ӣ37-����c��v/
�k?[��J7y��i
�Z�s�z>��hyJ9t��?�Rۥ�R�6��@��
�7�`�R��:���^�
�۫�]-�Ԙ�^&ޤz�O�+�s����O����Խ^LG�=��f�[�
&�^mZ�b�5��8l�>*�K�{��N�j-R�nM�w���n�Tu��W�!S���
_m8��j��oؘk3m���`��]��p�bP!�z��F�+r��>W�
�n%V1�i���Z�
W�q-<����xޘ��U]��7tp��t����`��n���z�Qa��A%ŜeΫ��Tw0�(��̨���o���=1���>�
�����F!�w�}r`m:걲e�2�nw�c����<>����nv�e�#X�6�Mj��T_\sYy*v�u��
�elk}Jd��ϱP8mzA
�B��?�����_�T�7,�G�/����>M<�4�ܲ���y��$�ҢZT�q��D}vM���Tk�˳��S�3_�ètP����\�
-2l���%w; ��6����_�����d[ž�I���Y+�s��]�߰ �j8[�Y�&)�����\�ڰ��]6F�4�b��=�]y�Z(�D� �
Vƃ#U�J�p^
-��f��*��9m���Ƹ��$��aK̄�j
���S�ē�O
�̋v��]���m��Y�
�Z38��
-�B\,o��؄!Q3C��tMZj�5�q*�J��s,N�W���9?�6�\�HG�V&���a
�'e�6	�ܶ)�5�2�{ֺ�O�g����Jdn���}
���;�v�D�v R/ϰ� �]%}wu�)6"�7
�uM�X( �@:� Y%
ҏK���6H�1H˶�@z@�!�g�f�;�@$�����U
����`�\B�;��T�	&�׾ ί��?}q�
 �PaU���H�� 
!|
 !��qD١�{���Z��C�g���w �
H��W�	����W	�/A��^wd��:����P�O�;
/�r��Yo���؟�/��[�ޭ�Sj�g
��
8� ��=@[�
����
Y�
@�	 
�����1�º}�=% ����P�g�G'�3Y�%�ߣuf��)i���ƣ�c��\
�v�Gv�
 iK%�b�)e��	��X��9Ǯ ��]���u�e��`B�|��Nf �+�� �uM��~K��>y
�^�%DO�EiT)���V�[��#��\��G���[���Dr/Ѻh]�v�����hJ�
5�k Kw� 
{ s[3�E[`��ؤ� �.g�
�'��� !T8���e�O'�w�����\�����B�͕*�����]���{�to�Ne
��m3D3�C��*��a�9]����⹶�?ؿ� ���n�-C�#��7: ��P��C; �g�Wf �k��kL�t\��g��>jEtz_
	�;�s[6���2p�Ef�~�R0�
�� 
���vLܼ
9V��$��B>���q��~x��b��� ��(�֨,4��M���%�MD���^�&�⢅"5���fC����a��&�pM�{��d�l]GJaw�OY�R(���tX~�����W!�7*���Ʋ������C��$\g<Z�~4R�}6;6�
�i(����Pm@�����: |u�d���Ix7��+
��	�W���iM��3��O4�����v�J��}+[�휶����#6<��l9�Ұ�Ϯ����x*��65�[9��a�����_�`�^Cc�� '5�ǥ �@dU07��=��gw{7�n��݃�/��s�����f<6�)��4�}��
��Rػ�������Ie�����,�����ᒸ��9m�]�E����f
��uǏ�� 0��2y��ɷ�X�$@
V�,���{�3Y�{�n]
����X�/M|�����F��m��
�'z[���~�cՉ�
U�n;�Ҳ^���|V'�������G=`
��-j��*k��T�@��� �c������&:�*����=�����b������n���c���y�`����ج6����j��Z�2&?0���2F+ϐ��
0�K������F�u>�����<S��4�П}1�0R�6���2
�h�O��IWzɩ��f��q ���5_�.��h�܆�v�I�m��N`[����ԏ9���zĔ�+1��.�x�2B6��`��q
���?_�&�Z[_S���d�����=c��`��׳������`�����& g�w/�L~�.��c��]ٴ�
V`LwU6�tw�����3��Y����sU8�i#j*������U�h�5�N��=2=Qv]RS�mg;�il�{��H�_f��%�
-('N/����_ ���B=�d@	q0yo({d�S:�}󐣏#u�݅��dӊ����e{�~u��.?ز��#���^��O�5�qquC[yeOHչ���ls<���<�.,S�44����k�+=�Ǒ��'_���i��
-���^n
;�_�R7b$$���Fq�9f�Xł���<��J��
���«g��o�\��������
-9;m���:K�?�
Mn]�1����G��*/
E�ZD&�գ9y�{��������_ r���f��e�^�s7sb
��nu�F�
�a�
�;�d�Y�')�
��bYC���:q[;�����B=k��y�Ӡq@�[e���y�*��f�Ada��|�1?�1��^c</� ��l���o� h �ζ���.�#B���
?����> �I
-N��O����h�ڊ�

c�J�:��?�ܧk�L><�i��?����]�|�|q�Dc�+Do$��ӡW��aN�oÜ��!tn8~G�/��|
��!���o�?��I�������ZB�#;z����W�(�l�fw�7�ݏ��f'
up����{�����|w����to"�C�	�1��s�L�X�����d�.��
�E/̥Ca0��,Č����\���K���k��A�t�M
sD������f-2�M�X�[˒[_ֱ.����X�'���t1�Y�Y�d
.`�|1�����<GG��
����<P(���2�ǃˢ�����2�g!���p��6�/z�P�z_%��y��S���y�޶2������9	7Ī��U��
ik�h.(�jJ����B�Q�)~
-��[O�iw,���Qvc܄+�'�����U+�_h��{�=���.�^ͻ��G�^;4{i
��:�⯀>�VC�m���7g48f�!���r�8|X���R�t�`
-Ta��
��z��~�8�Q�T꺜��
S;|?<��0
�p@��q���ҽw����Q���8�L��B�7�a|�Q�wIoBw*���_ �j^���xX���g�I�Y;��u��U�����s����~0ut�k�����[J��'�Z�|�mKJ�����7�֥�^��=.8�xP]js�t&Ʊ�NCf��݆-nw[\���{
+]��O��	^Ξbq�>�K���yh���<֗����/�L���e
�W�DA~]̆�>3�	�\'#�#ͅ��냆���{��]?������F�Q)
1{%�)~-��̛e����,��,�c���\��"�q�͵�!
�}�s<�S�`��Ħ�EK�`�8�q?���rb;���2�Ǿ�à����%>�}�~w�-{8�:
�)�� W�j�W;�_�W���K'�?X�	:��{
ZM�vx7�
WnZȖm���.� H�cJc^�m"2�+5����I�W��|?5^Wr�h$V�sr~��
l_,�~�Ou�ao����p�-��
-kvJ�Ҏ���g�y�Vrx����orx������E�
��$
|���ֹ]?�n���8�����
?M����_���4,���#��I�p�ƽ�F$[�5.�Eo�b,��
�|��ﹹ&�����ۣNYN�ڄ��vcP�f\u[
>6{�һ1��L�x��l�h���hѨ<i�
-t�M�Y������8[z�f}�Ǧht"�u�.����f�Tu'a9�U��z���6|7r�}ܸ��ܨ���˝��eXzo�d2��>S^i!����?�ۆ 3������$���^���U8[�*��^��RT�,�bUuǍ*ݕ:���XGky_>��_��yu��j:���X
�q�M��	��SM�z��Rmc)�Cq�V/�1�ݔ�7�*'�}�U�y��t9=<�ɾW��
�6j�re��\�i!j�M�.��ɔ����&������k{7�+5��|�4��Qr��ft�����unh*�J���7[x�=6�~4<�6r�L�.E�:={��ڍg�}���jde��HƦ�N�K��ࠌl�li+�
V�޻�����+��B�iB
�a]6���պ'��7�rgpߎ���y��>^r"n(�W�.7���1��}]~rg:䍸v��j�;T��/��9�7����)�/0(
��x�K�b��9qe�
��睟�\._������YNIއ\�xEs5�\�����_�?�tVΏ�+���n,)
���@Sڌ�K
��
i�5����ը~�X:����Y��e<3�KTc�-�ڝbA�Ft>ȏ�|e���Է9����I仙i��>�qm at q�T��k��ݜ*�|{l�<˼ F���i�������Ƨ#��8W0o�"7r�{X}^��J�Q��|�/Q7�X���s��
��yw��i|�5F�w&9�h�-�$�Us0�!��J��_�1l

�ٺ�O��
-;��`��J��JYt Q���R,�'YбkM]q�tәwf�s�5�c����@O���S��s��n���}
*0��)��\�B����G�3
�t�v�

X	���|x�M��ic��S�E��b��K�Mj1�B��)����H#g��
-��\��n�5�ғ}�{��

�^�R�T
R�R�e"��
H)U�F����
-��1
?3�� ���t
Q���8q
-#�k�a���e�־X��o��(��B?�<@�qb�H*= i����c: -�
H7� ��)�5<����
-�H��
��!>6HE�H��3�������'gu_�6��66������h��,��̃��/���PW�� � 2���*x �� ���^��}
�t�
-ҧ��7>��
3���A���⬂t+Y�4S�@�=�U�8o7Nz6���h���}�r��c
-V�{���w�1��ؽ�
���l�
-���P�ІB�:��˭ ��-/7M�xl $,�bN"���i�Щ@rl
 �6H�-M��
l՗P��/��ٱ��񸅜�,(ޞR�	�ŴA=*��y��8�J��՜
��
v�-���z����� �6�}�0r�2 m�� �h�>�}0蹾�1w�:�J��밉
/*��qοw�2v��uJ~�S)�QY˻
-ݝ^U�g�;ߚ����E	�#Q{_����s>�'WJ
j��9����X9��)�.���.	��L�XGlL�w/�s���0��~��h4�|ƒG(�����-��:Y����N�vI>J!�$���y���
lM�
-�to=lຜ����dTΟ����EC�Z��Շ��I�����O~@1	
-u��X(,�1 /��3��+�F��C����k�#�9 �slc�n�,\��\��s�v��>�Y~�'��������\zK�z�m�욄�>:4U9������o|ƻ��n/m�W �� �D����A	��T��
��X������-#�,�!�|�ױh��֌O�#�+^�#�1s���SsӘ�
{��;�lst ��l?bv�>�Im���Ճ��r�l
m8�e�o�oB��&�L'�w���
 ��P�Bf���* �z�z��[C�
����K�z���`繀�~������Ǿv����w-ߝ�UvWW��,�77Q_�ljkUp��J�_=װ�	v����e��w����zp/�֤S��
��`�� �y�B�r�?��	�����=����ս�R�j�뱗2Kʑv��d���Jy�V�G������_��ګ�AYt^���nn,�5��!���a�r��\���u	SҸFݺQ���
=�
]5���n��� ��xk�D=��-��i�Wa��ެY��F���Zn/ �a�Rƻ�T6w�5�ej���Yѷ��'2�V��cj��Mb�[���t7i#h�:Fe�u��R�ų���5��֙IIk�gV�,<V�6� v�R ߚE at h��ˏ�̣��t(t����S'���^>�
-��6ڥa4�$U�;��f�ﳹ>�������ҬFF�I=�j/���LD,
�QԒ�~�N�r��l呩���s~�v���#�L>�����؟�_ 
�)@ ~	��mܬ�E]�U�sV_�dzKN��
G�]��jN�Yul$S
�B�0]�Z�b9=�LCY]�z#?�ˁc~ͤ�XuJ����*�B�s��p]i��� ���b*�iI�9���r�1��V�� �Rʤ/�g��䮧�����
2xz��:>
6�d�o|�j�E	�
�Zn{+i��=��z[Y,�K��:nv���
�n8��x&����EӲr�4jr5:t�E
��`R=^��x/�ť�*��y������w�P��M9
.1�U(�\������屭����d�Ysh��<�`�d�LTЛ���YqYQ����M˞�3��L�ڧ��S�����M��+W*O�D��tF�d�����������
z�}Q�0��5��
	/U
�M�yjFv��J>8L^�ˮ�����N��?A>**΢
-2(�

-�
"*�N���X�t�]�N��B+��&��
;I�
���c,_��g�e��tޟ�i}���V
.�t��3U:���.>KY�� 뱹��L,~�]��
+©	���qRb��mZ�n(<��P�f�0�Ӥ���
G�ҳ�햳���&q	*�-[#����Z���$��}�|p1s����;wu�q�4z���\��VV�x뒉���.q+q�#��*�EB�C|x�1(s5h���0l�����嚏�&v*��~������ΡI)v���)�}❟�Λ��
}T���;;z
[j�L�T�Cσ������r2\Qj��p�QH&R����@����\��I)�p�j�4a��wq<-Tۣx<�Fz�����!
!
�G�K�?�~�
H�W	ٜ�<$�~
x =�g���{�.���	#��.&�;	K�F���莨mI"d�+2����'�da=l�<�zڜ��? +��Svb�#���G5�>R�iۜȴ�ϴm��t�Z6�4�iɽկ����/}�m�A֕��n�Z}���>��B{\s��}��A�̈́}���ή#ϧx�^Ǥ�BtV���W`ƞ?�b
�
ot�){����:@s�JQ��
-�`B��z��Q7�Q��ST,7�����`�|� �]�/���8z��\h���X�s{&nu+F����Q��KI61�1��lL��O�OsҼ �*{V�H�0F�{���&��s���nB��le��ް�����fX
��!���2������`z���p{0n'+Ї%s�v
,z��1��X�tᤆ��%?y� RK�̋���%,9�7OvdR����F���b�����z

-v�IH\�//���֛�ab��pWNpU ��z�K�a��z�)stݴ���s���	i��i���'�쬜5ꊭ�vF /�I4�ݷX�J|�f6�0��h�@0��0b e�S��@!�R{><�
![�=>��� ~!ࠇ�p�\�G}�[�}s�'?`ߔR�o�J����8_;�#໕�������
��
^χ-ΙMbEW�÷.���rR�'A�O���,R�#���@f��a4�X
��6a��VwB\�m
��Uwp��w�X��7�䱡���\�E���[��-�Qo�,�
_��7�g3�m
�޲=<���٩��e�`����&�
�L��$�l���q��%�R�����(h�u��n������a�<������A����H

Qf����m�X�J� �`�Cv���V���׫�Y�J곳˙���`��q˩�/L�3?N�s�*dc�s6UG�ʷ�;��q�S<|���gP&Bm��o�$KA�q�"���>`w%�`4tt�x=.
��C�H���^�ʟ�U��֕oI�mID��v�"W�\�/�H=_��;8[����C��$pd[hbeB*,ڗyz�	X�z�d�SYU�:H���X��
��ʎ1w6nc��E76:D!`���/TE$�w�*5�w����A�j��}x>��}�_a4�s0z=U�/ή�a�?W���Yv1XB[M��b�'
1 V{�]%�<�C�=

����{u�_��U��
�X�s{��<���2ԫ�Ң�hw�i��<�tz�̀��a��S����lT����.���vjQ���*T>�V�@p+f�l�`$С��R{�������u���0RO^��
��<�SH[���Q[�vg�˲�ݷ��yo|�`�M���
-�C�N���v�9�Vkg�*��e����i 
�*�5�g5nԏ��.1p��K^���J{�X�o�x�.'�Q��4�1~N��׳� �%z�����
?�Xl/M|�Χ���]�*u_�����2�fe����Tm�g\?w/�z���,��k�p��H)���E��He���� �P�|���h��`���v:%*�T8���E��3~�V�a���=nG�B�u���k1���ܕ0�Y�1�ј�N]I�u-��C�{�����=���U,�S�޷Z"i
+�6S.��,O.m����z��I�rq�<cE!���v��f�ko%y�������t��b6F4r�k8��	�����r)�����k��c
�~�*D��BT;^�}-ޖ���P���k	zE������Ay$6
�`�/t�6�3���!���I�ԬJ�ԫX��gk��/2�^��e�3Gd����CK��Nn��:2l/1���Y�z���J����RN�?�����̗���"����g��L;�z�p�,�|�W�|�>[��m%�f[�qK �7�2�( [...]
~�Y���N�rs�|"IL>���|��:���%�&�I��1nf,zg"��)�|�V�	f4Ͱ?����c�L>
-��bI^�W��O�D�O6��'�4�+)೟4�W3�e.���B��QM�'�K��ʤ�r�S /[) ������ �O�
�
��q�'�{�����a���|
p��EI>�^�ܧ񬔊�G�[#�;D�e�1yP�V�D���}�%�Ӝ�iN�~�f�.�F�ӵ~�^�4רNS����o�}
-��=����^O�l-�|���:�(g�KR�L�nn�����<�n����E�~&��-��ȭs����d��O��)rd��Is�<
s����
i
n��<����Q�5L�6��n=�y�*�I��[&�u&`Ǩ����
.
�ɫk�Y���D<�F���ϗ������-�G��ly}�([���z	�á�!�^T���PW�{#/���/Y��w�oGj�O��w�B%��u6I��a������y=OOA
��q}~g�����{����"�չu�7ߵ�0F9&z�
!���i�vƋ�
:�0w��f6 ϻ��}�:��QE˃�6�a�����wWC��5���ʥYx�&���hƷ�<��
�g
���t\�o�|�c�;��n.
����٤r�+P�Z���e
6�
���x�:0��

�Qݭ��(�w	٬��
Ƞ�n�ʣ�e�޶�
�O���;-x�B
-V�z
-������[O�.�{����ՈHH3,�	���|���)}<�ӹ�9�W<�:��ޜx�]rY�v��O��
� �
�lG�#�T�Ja]�:ٺ�o�+���
tVS��:�C�i�U�5Ɵ�D��L��kwt�wM���;������c[��Q��
P�`�p�e�a�9tymפ�ږL	�}�������xw����|�zgWa�:]u����k�?�!�i�.0-7
~7
*���^�M�μ)����ZJ+-�!����N�l~ZWH���r��O�aE�n��l�
���iy�����6�^V3K�{����О
.
���i��x|x�
���v_����UmK��D��Ҭ�7��=~� ���մh:�W=7lŶ[,]� �
{]��[z��v��M-�h_Mj�J��
6��KK�=ו���
��䦱����.O�����ű�t�KJ��NO1�^��kE&5�Y���M��C"�fYWn���Ǖ���)��p���-�:�B��>�{[q���4۫ [...]
-���:���5n�f��0�H��
��Z��:j��=���+���_�g_���=H��r�*$�E�9]@9��"W�#9#ɺ����.v9�ף�a`/6�U��ow�}�Gs��zʼ�U�ڻ�W�
�c��*>7�#m,Z+Awr���`h���F|3��,��/��Z/�rJ���䫻�˝<��Ky/骑H=�R�VG��K��>���kU��ķ��q׻���;��/�����wW��f���j$㲩5�-�Enz����`&뱵�ᧁx���xk�u�w��io�i��H��M�Ͱ4��*
1�ڜH��/k�!g� 
-����K
-&Ar�����LD�w	�
���]_[��z`EgI��2��՜S/�y�r��N�XW6��{B=�MF9�G�
>��t
�s	���ɠXً׿���GrBac4�5W���X���c��c��_I���;�r�����
Cw����}�7<�cϝ��y�)�N�z�r7�����e�8�抍i
�a�Y�09r[C�nƓw'﬉Ckm	�2���grA�\��-�O�`'��`'[��3Vّ�m�?���k�x>���:`7��z�^
-^u�?�]�Eg�~uJ�f[*LkR�ה�w
�0�����H��
N`p^��
=�v
-�Ga|b�E2VKh	ml�c��(2�$CH����d;j�<~=�ݩ��������=
_,=Ȝ9��M^��z>Z��gg�d����d�Q�{�(���$9�mq�=�Gi���]��׫"{*��$��1<jF�3Ȏ1摛�
�:)��tR�
���p��7�_
Su�4(��c
z���V��J��{��R��`��X3�"���Z��'O_�n�T�={���}VDj�h
-%�����q�ڛd[��wr��H�"�1;Q@��;�>�f�Zv,�"�C�"��Z"�{F�>z1��5��v�E'�L��jx�
J�ҳө���y1ܽm3 �鑹o����etI>&N���`�+�GW��ՅYy��w�m
��Q]�̢h)��M@W� o��H� d����ۤ��!�ɐc��ڿ�<�V���c�vs���b(8ٌ<ޟLKEJ�9�Xm�o���n*LX����q�.�X倫:J�k\�
-�^��ѽ��2��5��M��sV�@���҇�|O;��1���j����G����>Q�SQ?�bR5�r���e�W���y^�
��\��xV�"i��r��SS�d�t&T

-�f�_/|m�?�+Mc-.�F�|�eg�
�$�bC�ɢ8?`lFH=���6{
D��9����{^Q�����m�:�%����?���Z���׫g����v-5��98�^bGJ����X�⺶�
\�]qg�<�
��GO��2��φ�]�1j����"���#,>���@o�V�!0�>v�
���@
YC
�f�+f�F�:�?
p�mZ���
UϩM�i�����pTV;Gx4����˥�vT6j��8d)�.]h�ީu|��*'
[#��pC�%��
X�R
11�$7(��w���?`o���޺�ٽ5X9������/�����
|t�Z��D��ζ
�Y�����`�61�1�;�
&߾���rs
-��0s¡47^�:�����B���5��G��!��P��=�$�Ȏ�EH�T�Gy�u�J`v�x��=��Gw��n_����5n=�{��2
-y�tDY��4e��Dq��6&�>�
j�)r*Kd�O/��!�&:����6�Ӄ�O��-�x
��p��DKel��1"��iW�����x�t�2��tZ/��)?
8^��p,�7X/�Y���օ��f�s�K}�)լc:����G�
� #�w���n���y2Xl�J�
Gv?׻o0�ʝ���|G�T�ݫ��"2�5��K
�u�Nu��0����j�Z�C{N��@+g+�,��ֻn-g���
e���d����Q�+�s���+��a\�?�lv����;�߹|
+���޾4B{B�d�S7��dDz ��mwZ�Ν���;�����f\��j��!�o}V*ע�G���m�xT
��\�7�Je�؎O�%�$<�/�/Y6ޚ���c���Q=/d���	�4/������4Y���"si
^@�F���������3iy�tޢ���������Yn��Fp���Q�c�~�ޠU�vi�^�=�D�hX��	�����Tg~��vP�s��V�N�;�YF�oi~�
t9^�2_�@�WN0��Ux ���
V���^�������xb5�S���Zny�����9��+�6U��h�@��6���d����LY+�\ �������h�ܖF�����RKYOL1�hS�8m'4ˆc��	l�<��pV�:p?,7v�#X��L��tHe�����gy24���mj��QZ�n��xU�w�޵�_��X� [...]
-
ho�/�W����2���!�A�H�s���2E�/��d��Q�܇}���F�y���J�n�Kkd�.��X�X��mP�6h�v��x'��l���[0]����
U�8�i��K&�ɘ5�0+��C�z+��w��%ۖ>	�!�$�-�q��%��)��>�O�PH�w���W� yK6y��Y��kN�}���(c�dl��X�ܡ�W��n��}��M bed�6�p�_��=���ءT���z�R��da2��]�ͿH>)�&��*%���N>�d�|j������O�e�>7�[����.&�K��A�3
4�0L�W�M�iKN�g��/��O��@e� �����j7UK���I9����`B߷�om|[M�A
I�2N'�h.e=�q/��#�W�:�9#x&�	�O��6���j��C�����WQ
�왧������m��-+�q,�I�0�Rd��z�8�Zh���mjH�G3Js58�h^�
�>�
y*�9
-n������
��⥦ ۶j9ؼF
���F��YA��c�Ps�z_-�|�R�v��M��v��t��
�z�=^YD}�v
-�!��j�2�V�Y�v�����r��+�Y\H��g���~���.I�з�
�p��wx����kS��O�t�G����vS�o3N;�hc�����

�}\	��G3.E�J�5�Z���eL���̳��x>��a��>{��w�d[�-l������,�7{I�+J�������
2�����S�T�:�8�_NټY�?
��r�u�~u}waK��y7�����>9I�C�x!���
j

���M�y��w/co.W<mW8�l�VaSξ|����Z@��6�_�|Y
���{�����P�[^κ�@�ڏsn�z
�p�����B�t"���x�,y{?�W�d��v�6>������4��*��[f��l6�
���9|�/)�����"/��>
2/����^�_��Y�V�ys͂�������.�������‚�d�|�o
;�Wgo����0U:�f��
I���n���Ra�k�f6�i�
�Ć��R}�:3��c����di�X6���9��ϧ{v
-���
�ۉ]*�_������K�1J
�;ʂ��)H��/����ݯc�
���k$��Pe[�Z�~9\���/��*\p�w���=(m�h���}�u�����P[�a�+��=:��V�l
,�z�.&9,0������
��*�}>�Y����GZ�GaZ84�5���g�Q.��<W��Fݽ��oN[VRki�VѾ�e�������u����&#D'{��S+�'�Ъ���b�d9�y7���󚇧Wi�m�a��c����`l_�wyӜ�2ֆ�
iC͎ɺ2��`g�#?\Y�윮���ȇ���5l��Ӊ�O{׋�������ې���-kw��Gw�/�c�C��kݹjܥ��@��nU�@{ӛ�6���Z��j3���?�t����qr۫;�}	U��^���ِN'�p��x��j`��4�jEu[�,g~�",��;�������,��>5cьXȄOXs�8b`F2Э˃�>P�k��Pg��:�n�؛B��A�ͻr�q�"	��|9[SY��kƕ뗋C�����k�s�<�t����=����ɦ�9p�����ӛ�����aq�Ƒ�q��l�y=�� ��қZ>溳�?�r�
����
�S��*M�g��XK1&_%��~&�a�5�VQLdm)&J�$ڃ�����>G�� [...]
-j}xF��
��ԡ%�p����i�>��->���z
-<��1��b�*og��?��/�?��>�qn}xre3
�t�ܦ��f������Bm���]�<cpt��
- ���U{d�X�v}+�`Q����;W�%�]dҿ4pсڬP]E(�?r�[.�;1ǭ�%��%M�6M�Щ�����%�a�F9�rT��;b4�V��#�H\��q�FD,.��x~h��U[[��zV>gG�T�C��pO�; :�'�^��K[��
Ư�
��X)<�\垥��{5>Ϻױ�u���c���E]�
�m�g�e��;�G��X�h�5���z	�\����b?��E
c�%R��fs>�ď�J�2P�|���V<���Kt�cN�#��o���ZL���,�6�
+[u6� w9���cl�o������;�g�h���!����4�z�`
i��y��\�Rށ�(���M�H柡�?<��'�*��
��Z2����<�
F��7�؞�<T��\�W�f���L�?҈ڈ��̠/֦-x����+�\TkQ.�����x����1�_DK������J;���W&h*�o>�T��#�#:������z����8S2��r������U&1'ֺ/V.A��HJ�}4��@�w%@W�	��!���ɀd�Փ,�X�,v���.��
�
-�	K���
�Z_Қ�٬�8\p3�M ��̸W�U�^�7�.H�QK�|�{#�>��W���k�p
����V�F=:.1}|[��޲KQm'}�����a
�rmC��F��|�����? �g�͗�ZU6�\=j����W>ڒ�)Şt�D{Z+#XU���`ݗ�W�w���w,L<Vq�`<3�٘<2��3hl�a��Qz�\��0@������D}f�p�x�𖌅��u-�v�B�_�-���[����i���� ̳�˪�^5�t�g3��M
�<���W��-�>!�ݮ��,��L$Ny��˨3�����ˁv�UH������YV��*PM�1"P�͏�o
v5U���i�G��3��� �ʻL��f�{�c�&���:bMP��},w���E��g)EӞ�I
��H��? w�qv�+sc�
�L2���ǎ<:o�v�VO$�k�aMa�DS�pxԩ
��@��Aa�D�1��;���N(��9��[J��:J����߳�vE�ꮞU�t��Ұ�|aj���0�95R���6/�Z�������'�L�kH�.LW:�sgx��5q�k)L�w4�9�ɝ\�
��>�:�r�#�BE��F��@���
����9�pH{�p���p�������aZ�Dž>�FK�Tm�E�rOCq]5��m��g{*� �oPe��'��'/R%�i�'��<�H$��M��
��]�z��:�4{eb4@���}k����\ (�(��t����(2:�(#g�i�ƪ�
-����;�$�"F�����T%Vrt}��Jwd!d��
@\

��D�6�kf�*���u�}�d����
-�[�}o��_{м�@�k%�=uz��%��
p��f��\��գ=O��<�v�mv뮽�_�˿_v�Mŷ涝�Zeِ�AX���,Bw�4�"5b*��}b� X��A��t�ҼB���/�*[]C&��'���X�?tf�5�oz�½W��^��v+]�d�x���!���F�&]�M�>�4
R�h��������K�4��^��fj���p���#NMB���KgxF�Z?
n�
��n�����R��vF�4�~�
�m	����E��$�9���۾5r�il�@���GX}��.�];>W�d��4�ٚDF�q
�?,��w��Ӷ�S$�C����-�ON�<X<�
-Z�*�N�^�Z���w⍭uO�J��oL�.V���v.V'5y;�k��bY
;�:˵n��jV��[��
)z�b
�}9]C�rjU�r�.�r�vF����?�@гf
}�I��*�O��A�!y,]��kym��:z��n-��QQWqu6�o�����a
-�˹`T.��=\Z�>�Cb�0k�J�X{���s�+n
�G�ݴKE���=1��=_ۀbu�����+���X[�]��
V�hUu=���}*��C������e�Tj
���No�[����*�HX&������q�
�"x��(ޗ-�>�����
-J�
-�p��gã����}�я
Z�@�B@�? 0�d`P������A��dD
-0�7�(�e���
��RBoL��U�z��\;�OM�\���M�J�u������n3-�����$���_�f��
 o��
��H8 obS �6K �7N���vF�8�t �c����9�q���m˷�7�?�y
-F�)]���
�yYT�egW�� �.4�Q�n1X��a~��o�y} {��C@r *�VƲ��M�o
�
�2$)�b��dx1@��RF��+ ����
 ��BS�%��>�$�Jk�������a�
-�D?`�^f�$���I:m�I�MG���<be���1I�\��M��$�
5�,��f��IJ��
�I��AN ��
-"u|m"��K�r��'�~F�z�!��b�=���������9$oC�%o��O��R#y�~�^�Y�aQ�`�0���-�딤Q��1N3���#�8ZTO�G�~y�\�E��s펅G௭�!x�n�t��aXH�$q����.�&ѽ�~��`��.��$�+��B��h��5���+�T���}�Z�{������O3�v▎�$�G��:^^ �?7�\�,��l�P���f=V���}r��{c���sP��
ꇯ��
^����Ǐ+	��!�G¦ f)�L�)Ф�쭽K�ѷ���>�'��mq���#Ʉ4!�U�$ғ�C�C������w�@���
9�T����C>cm)|�GA��ڮF���	�}��~�tY�W��v?��������G��J
-W�	�"v�%V�,��2
t���\�sLsy���̧��*L�Onk�u�#�
���7�
Qo�b�Z��2$�������+�կ��.#�O���nUI�'Q����t4>t譹{B�u��
��X�� ����-���ŵ�|����:�� ���K�����8��f�~����^7�Ak�
��xp-\i�R����rA�S=�jG��.�b�<tރ�� �=�篻�H�f� 
�O��Q5 N
tK�ʦ\M��j�r�'��qu�����b,�Yp�6�9�:͗�C�h�4?>>^P�|ޢX�Gx5͎�+x��� k�Qm#���,vw�駿܋t�b�EiKߠ�4k3~!�M�b�5������T��

5W�x�z�W�\����ZT9[W:o?���h��%��6�������柗(�W�-��]H
��� �%��dΦy��E�^�@z��Υ�jW��o
-%f��*��ꊧ
c�������mܤ9=��t�t>�B�!�2f3A^��#�Z�DnBo5Z�!ͷ��4���߫m���
vd/JI�
-�A�<�Jq��O�vP`��;�F��jr�~l���b��@��t��|^mʡ�.g�z[���am|�{��"�-
��c��qs~ݗ#~R
C_�k�7�}��
�����*�P
n7�c]��K>�cL<����:�-C��?�������y�\x���X�ӡ{㏽V��Xժ�H{1)a�y
"����<�i�}B�a ��?��^_���rlY#�ej�a�>��[�Sه,S���`��lwc���›�6��I�Yq�We&X�ٔ�k+�����K6�K܃;k7�.����0/��3�:zaޝL�����??"�(ל�<Ҁ�)�h�7�k?^M�e�;=��"�W�HQx��h��j8H
i?_�R��?��
-O�v���Sy��0�
,��K;~��m([H/���L�A�9B4/��:�~��+�
-��(�f��nL�\��;,�ժ
����T�
V�@�m;)"�OI����.C�dޟ/2V�M�֗�/iA�
�����������i��x�F��!!Ψ��-��q�5(f�2�鏥'��J�,�{-�M/�∈��KTa��+Ǥ
ɗؐa�ѓ4�MN��P�`��.Z��q�

�ҁ�G)u!߬-�|�̒5�_�
�^7���'
x�����q'�2%܎[��-Kt��9�.i㉚�n�S]+��֬Tk��~�w>+���&ñ����^����Ab"h-�瘰,��B��<sj8ܶ59ql8H�
9h�O3�����
����p`�a,��t����i��t���9���D������걳�RW�|�i�u;p�UV�
�wRO
^&�q�&�n#�>T�)T�GC�s�d�6#�"��f��i��2c�Vi2��u9�3��cY����wOS���U�g�^:au�q
^(|�4Gᴡ�7t�~��i���V��Wc*�&cSB��;��H��N��3�n��|i��p�ɲĊ�}{|��,�I�M/���`k��Ƌ��
,�0a�GE��}�����D.�r��;�V���2�3㮺��uk������l��:�j`
�H�宇J�^�D�q1/\-��Q�p���sՊ�e�l�_c�
-�p)�G���1�`;���gF
-�O���A���G�[E��/�O���K����ς�>�8޳�5�t4��dU~����)h`DC�jZm(�����
�'�r糳k�`��|y�X\u��؆�܍�t
͢ύ��J �*�
-���z�D�ʾJz�g�����$�k
�6�\�bFz��_��
�;*B?B	~I��.�Df~K[���i
��x�B�?v'�zE�y�e�Od+In�cf�d��cU�����2�(>2X��x�R.+S9�I��!���h2,����<B��n��2^�ay3�}����k��P���#/��V�w�`�X2����o� �
(���-�8Y?g�)���\��z�fRS�p�1F���0X��i��=P��2��<�|�E�����$�@�5�#�-.�&�9��aRÛ�ƥ%������˱Ǿ�ͱ˞�/���G�5�u��5~@��<|$s>DʌsB�O�ܡ���!4
O_�x�
c>Om���|�
Uh�Y�ʗ!'�B�x ?
u��`��~����N�?`�W��}}�Q}������cT~�OK[�o��$Oޮ3��|�&3�y��Fe���|WJ��U.�Û�����yA�g>���)o������rIt��
�&&
u��B��
:/����3[��#�ii���t��TqM��l�4�^�_�
v
	����e��
-�Ehw�F.��s��M����Wy<G\�1�����^�vu�G�"In\��Lb2��#�h�W��?�:�]�nt���G/����֕�SL�����8]#���
��@l%���N��Fj�
��}��5��V�nQ�.�U�w?٘�������kvJ�C���%x("�!��
~�:e��� I�f�$ZK�F
�cU�(��=扂ȶ=n"��&�³�tk��s‘l��8��W��:;��<f���S��<�
��M�
�7�T��� ���
��Ӱ�
D�8�᳦R���z�.���>e
ا:J�Vo�~��/
�ʺw'�.�9
�F�u
-pxV.L��n�̦0�޾�M�}C-�}7�<B]f#��
-��u�E�}h#�{=���l�Or4]H
�b�����]0�7{`��&���r�:����3�W~.D8J����f��v�Q��#�y�a$_I��
�^���,�.4ߧ��|�����ݦ
[��
]����M~qǢ�/�y:�}
��C�$`
���Rc��k��I�_s/
Q�\�#��+����su0�3
��N�zD�����^��e��Pm��c�������r��7
�n���n����m85�ּ�9n��u�Qu�|�ԡ�N�źD#��x3ev�_y��(aW�a���ؤ�������Qlw������5ık��F�&M��&X�k?`c}����E�2����S��\Ԏ��_�\�K�����r�6�mcMV�bgV�n��J׉k����{~�C��%�bbI�iԕ���vg8q3�HV;�{�/KM"��rX�od��b�W�&SN6�c8�V�x�h�
V{�B
(Bf�Ӏ������O�m�!��f�>����?l�疪��(�+��
-fTr��EA%�0�z��=�X��y�{�1x��
-/�%X^�=q����r�	P����pT��
��mp�TW��T�6��
���`��I�@ON�M?xwDA0�5� ��
��`�´ Iö��>��_��Q ��.��|�z���zӬ�����vK��P+��u^�U>,�j�G�3g�
u�
�{0-`q{��|�̛�sU�29���s��?�o@���SAC镬�qcF�Lb�p�
���rW�
ݔ�f����Z�","�{(L���
-U��= �� *�W �0B ����� ��\�&�'��Z%�_4 at K�@��ی
�9!Ў��e�RƠXY�o�;��nL��桍8�8������R���C���R�RX:Tv���� ݭ{ ��' mn� �> 
�� }U �s� L�`�Mt���˟|�s�L4/ L�a s �
|���֮e����_4]N���o~?���S�q�p�
�q/4w���6� 粟��`"p�?`1�o1`��
@��`���?�Jg�Yp/�٘ �<����
��X�� �?� �H� �8g�����oQ�qȹg?�^�*�%�����cyN�i����fٛ�,��#o�l垲��eY��Vs6X�	e>G�r�f�c�eb+���i^��a{�����5��*��S<
j�ɐGu���	��ܵ���
�Nt��Z
������üF�<Vs�}J��'{
��{����R�f�*�Ͳ�Y˲��C�@=������<P�36km_k����^�����*�����^w��,�2]���	��N�E�
���b����������g����˾��
�'M�m�[������ݳ�iQ����,8J�X��/�nk�呉�*���S�&�#"��>�ѣ���w����#~�����u�|��eV,U�O���tt�Ro�'Ob���V��ƥ������{�%�:%'����<��$���̾hs�}n�>�̆���nVj�@�<�ˆz��c��;�6r���R��WL��/�2�^fQ-o-ϯB)<�=�!�@�%��+-�L�$
� [...]
-��Z9m˥�{��v����?��'�$��<t���7|>[[����{�#�����黀Yλ�M�w��l
pe�\��NK��s�Q�fg��>~Z�K����ȋ,nm���ֶ
yئ_��Mm���9���3`�#�dz�y��LQ�ַp}Y��Mp����:���
�����_�!I�w��Z�B,���{v�L��eqS��N�δ�ì� f��<�靿��n����9�w���V�7�.AK��z��wV�щX-;��h/�]5�y ����u��&Y*�r��G;�hﭲl�Oz2?m��|,7�s�R��?1�����ai at B�Q{H��t˟_�萡�(��2����=�t��v�
���)o-�u9���n�9�(:���,��\$�Yh~��PK�[*����x6G[vm��>�7,��t�4L�t44���?o"�~6����S��a����ޚh����M�G舴zw���~ඓW�z�Ϋ�Bg;�p+^�v3{�'��w�V����ku�ql#@����4�՟�b��\���c��$X%�I���cu�ǵ�~�>J.���w��p�4O��1"'L>X���
D���k=���q=�f�
-䨋�g��2��fOrg3����Y�N�n��O�x��=Y�lZ��DJG�8B]n\��ԑ��ᑣ��H��p�?�a������@�Կy���s���pw��B&
r�*l[>�\�53�A.�-՗u���c��Xh�K:���n4�č�4�
&�����yב�u��������h7���NX���F��??3W_�k���ް��'=�=�Q�rG�[�쟢�ވ?{��6�.����

t���]�#p~9Z3�P�oy N���6�:�x
��ָ���|-x�q����``��6�7������?��Dx[[�F+�~_H�>h�w�j�R�1�R"dUir��_�O9�'V�"�)w�t�!�َ�]�!�ˆ�=�W.�|�֦|�ALh�a�	rG"�����ظ6���Q���y��WB�
iG��G���B|��¦�{��4@~"﷗�lLNP�Č�|&n�7鿈���9�ݏE5��Ϝo�?�j�j�K}�.���y�2�ͦ�t\���
7�c|�n�y����P�����P�ξ [...]
�t M�|jh}IqF��[��l&�ҬXy�[{)
�w	-�K?9X
��G�2�-ٺ@W�^�޽��zٍrA�Q�H+nnj��-�΂[wk[ܩ7��L~- ��&��~�*��p�>����
�L�	ݗ�aOU�=Y��.t,���4y�xk�H���`�M��ny�
7yR= ��|o
,��=��ι��,֯J��/ǽ��DP&I�m:�V�`�/N�I}���ǔ[�qt���`��E$~���V5���ƕݵ���cI�;�r�(a��!Ό�Tx�OG`���犥c�,d���FX�]�n9
�\��/\�5�n9�r9'���_~_���������5'�i��Y�Q�=
X���V�~S͇�G_��K���Q-�����i�Ƌ�B$
/q7g3�u=o�{/��Av�������^u���Yaw�Hd
a���
Y�J��֘�y��=��aG
�������Ĝjժ��E��E�
�M$�}�Z��@e����U�k1j���GY��V�
ϙ�{�_漫�
��3f��͍�/�"3&�-��4{�e��:Sv��SԮ���s��ĘN�q���W��S\�}�[�t���ȭ2iP�Ӡx$���ZҌ�֢v���� �Tސ
\a��zP��N满�͟�nu+ [...]
�R
�
K�9)N��"C�U���5�����i�^�ٻ���$�-���-���p�����	(��7� �K,:-�n�������bO �3�j�e0�#гM�O�*�bxpF���
�� ?q�ZV��$�~WV�>�\c}�Y���5��KW��? ��`
-����^ȋ3��Y�t���X ���6_N"|��E^�n��
-��ꞰH�sg�#
`pfU��-Be�=E�҉'W�=�}�X�
Q|M�mTY��
c
����:����ؕ��Tv�1}�q�� �ʕAF��oymjή0R~}�}��
��%o�5�^��|�����c�d��PY�m)[������=����R_��po0�j�D,I}
k��	:�ݗH������5��c���*�=�m}�m�fm�8i��GJ��CB����^@_vZ�����z�q��
�ત���]\>�_Mg[Ɗ}���lF�3���@1��e��
o��J��h�m! ���9�3�F�U]�ڌ��[�phu��/�]�0,̺
��ys�
��M>�hǹln������
����5��i���燨�U-�$��I�މk�f1�
|����
U�C�ܺ�'q{yH��o;{�V�&��WR�U�m
�I���b�U`H��M%V�ͪ'
�Xy6�y�n|+\�e�Ƶ��O��E�j�l��lS����\�
-*wu��Rn���ʹ��"����w�!w�_[sOl��E���v��\�vvcG�~���#Z:�G ��ِ�P;
^�f�O���m�z��Ju��*Yh���??W�r,��)�,�<(w���-��eenۣ�2[���ԇse�@���.d:ҲAUyMi}�G�� �����~�~/�u3
-����$����5�ϲ��e�z�L �
]rvoHd
-$����
�M TtiV�kT�_JV��������1�a�_��c���X&s��/yk����h&6$]�����!
��l��R�~a�)��?$6c���#�Ʈ,�
-�����y�L�š��m��P!-LR�U@'c����sF}�J�
� G	�͗��?��Ĺ��М7�����0+:�� Xv8Y�(a��N<��O�j6�7�`��Y�ӭ %�����U��f��x ǔ��� r�or�9 d�} d���i� 5B9�
PK1(*����Y;J��	@��('yTba9��QH
��k���Ԣ|�T�Ƌ���N��!���'�e����[���(����/~β�� �� ]� ]_\ ;� Z#A���-�N�,@����*�r��
M`F/�9�`�#'�䤍_��'��1`,3��^Ai^�4�t �ڽ~��8��S�����Miq��\��9��Б��� �O��|�O�4�S��/�,\`N%�gM/8�V�j ;�� {� �K W�H�U�Z�M��v����M}f�#8��R�gY����
r��,�q����aP΢��d�L ��0s����*��k]M֯�
Ϡy����qxB���"�ǣj�������s��lC�ߩuk�/�5��';Zz�Wds��E��	��Ӭ�wpҲ��w�?�Ƴ<Fl��^��*��A3�Hf���}��Yz�������𡜟�{���w��v�
��ߌwi{k���5�r�+�K��-�

��]�gj�Zi6�V����R6���"�X�$�����{�hߣ�${w:y���M�i�����R���Wo>�a�'腸
�=sk-O���{�����_��}x������T�3��Wi���?`�
��i�1���
ŧ@Bf�
��h���h�o<���-n&�>Wy�G[�g�$e���%��f�;��������]�(�M����Zm�O9�L�L�U�M�FK8��r*�q�(����)�P�xg��X7�}r�/�u�h<�����c��iU�z	ߧ����2�%�"}#�|�<�k燮�d��:/���u�u���2���дg�m�ߓ�q�Q��ڡϡ�~ �|
��m�N��$��vL�&�ķ�p��eE��ڍ����}n�O��l�8�
��\
꫆������}�3#�������w鍳���>���y����5�ʹ`p��2�����M.R�K������3ZR/ �D(\��FX���o0��dn�uLiSz�
vy/4Z5�7&��K
��z�r���9��
%7H�?80-��}_3-�/�r�g%d4x�����n�O<���1>�b/5��3������'؄�+�TO�S����X�oأ�^�a+�D���56е�-��㱗�ay�ȟ����Y�M��
>3dY���B=�z�������{מu��s�o`v
܏�?�
9mD>�
X�M�l5r�������!�?��c�<m���X��wk�Zt������3����q<u:��]_n	�,�Rz�� iQ��=��
C�e�A����ôu��]k� �;��o��}	S�+��
�s�gg�؇�Ź��rR��e��wl[��=~Ť���:v�Wo�ܲ�����`��������
|&����^�q1*�.ұ6âgǺk���U�G/�0�2<6W�2
G
�������鿼
utr�'�1�U*��&^�$U����l=ŵ�%ݦ#&.���ܟziL=�n��h>>����3|��y�m������l~����B�,rXc"z6A�+��p��8o��	`x���p=�a+<P���T
�_
FS��Ev�팇i��JR�n���B����sY+�@{h~Z�
�3��t-Z�(Sg�L�`�=�0���;����p���d�,�t�3�kxX��a�8niKh���������ͭ��[��i���m׵SM)
-q����Լ�Q��+ �.�tt�
�1��ͺ𱞎X��=�cz�BN6=�;)oy\[Q�hP�Fã�ZöK-
����k��ʌ���o��ͅ��ƥZ>��{�i���ݴ_
-�u#m������/mo�:���_
��Zi��2&�t7����v9X�r���3Zn>Y}����<�r8��8g�h`\�
f�`�?_�Tg�d��V�k���
l�n�hQ��TX�6	��j����^���%y0���E@~��
��t�%�}���? �Q���B��c�b�8�s+���	.��8��ld�{��SƔR��
��jI����{E�}��
��j�U�B�J�K�R�'ypv�2l�k��A�R'H4�"qZ%����r>����i?��L�N�5��jK
��9>����sbד�}�Ǎ�!���՘z��`�}��e�����xG���U)�8�iJ��dC<ΥS��$�^ދS�~�8dB�|r�
-������Q\�|>��s��Y�h����j~#ڷZ~gU���E�^V�v��8���F���<��Aw����Q�0�j^b!.7ժ�G����qgX)����LM�ބ�� Ka���^ƾo=vV/�_r����S��p�����c�����
��pi<�mR2)Ϟ�;n�w�������K2N��r8���� O� ֊O��/W�o�V��f�����&�
��%�/ؽ��˶`>��qUx����-�k��n ���T��\h�=.���\89Y�
�V�

�/;�l
��ܧ����,wt�<[ow����Q���3����:�q�����F�A����<L7ir�B��ZՄ'�l	���{��g{ ����>�K����=�υ���<�
V��9����~�m�Еmr6��N���K�-�B0�0r�bg1�6!�[�n㝮E���|��H
��i+�>��GT'�L�L��n�	ϓV�
-LU��\݀{�q��Bg�t7ڸ�-�}���Mvg^Vl�P�1ǡ�b��U�>O�4m�mə>φP>�	�0�ݡ�K@D��[�:�n�<bc�4��h4�C��<�}��G�`r�J0^���)^�� 0����]�?�_B 
��FW��7X���.;�x�9յ�O֘/h3܆4֯ߩ�^�(Ҹ�=2�Wgr�H-�L��5j��꿄��{t�!���#��'�>w��@ff)����^�)�����g��z��<�E~�n�{֭��%NӊUv�Zl�]řq��җ}C��>��*?#_��\^W�"%b��0����7����7�X�zubEе�l����.�N�� ��ŗ������ķ��%ᰢ
����Lq�
�_�[��
���#{��lk���%�i�A�k���J=fMQYQ 
҈�
��K�� Y�p����:XH�Ly�#,l�XXiְ�\�!�]���}�����N��mn/��p��O�S}9mc��^��ځ�%���
:��9��5�Ρ��2�B����I��wA�t�CJ@����o�W/��fSd���Տ�/r��p�]D���9�
9����
c�]G����iq��Aܼ����KV����:�����
4U��B��H
ҽ:[�k�G��Bآ *R�������5��+���Z:DFǪӹtĤ�M�Y��l4ڳ�Ϸg��מ�j>�m�&�s��gjT�e�
�H�;
���E�^j��0)��� ��z2f6����,"���6��Om��7k�54�
������"�v�5d|A۝+�Q��c"�t0hS��n9E<j����W�o�WS�׃���

���'�c��9��Ɏ�j���>u^�~�{�f�3��g����Z���v
-:4eAEyԱRs�!&;��D�I{Q ����e-[\��[���
���Ҽ�67�:���e�iD]�ި�������O�;�����R]���_�	,Y��G��Tt�Zɔ�+=
-��n�m����!-�!z
F��CRu	�K�>
�^�|-̛
�qo�4��{n�7�W}��u�������k'�ثu^e�zY����*wO-V���P�?���MZ!�z>����n�2��k�̗��d�oi�"��פS&Q�0͇�Q��:�5陭6H$�3�n�V�VQ�Ej��W�.;�<|~Z�ũ[�[��X��ϱ���aJ��uO�2P��y32���t�� 梜��t��aD�P'�l���ݩ�0�_,q����R%u�u���gO{�4
-�\����⚁�|��[�t6j�ۂ^�I�Tv�
VC���V��Y�^
��_��R�5���w{/vP�D�0:ͩBgR���
:Z��}��
ؐ lMr>' S�&�LK��n�m8�&�
��.�iX�x𤗯]JTߟ��H��Ģ1������
�
-n��Tj���LU
�mb��� 
$�o�m�x���
�/��� �u���K�(O QA�9W ��	@ d
�B!����~�L�+@��ѥݫ��YN�d99ߑ[��ZB
�
�v[T�
lBA}l��ыm"Q:	 ⵑs�ĵ�ȡ�?g��c���� �2�TO�|6.397=�f�d�������m�䝜T� T�zT���E�2��?k��e���,�B���>�=�K
�BQ=��u���6$��iIό1p;> ���L 
-�L�"�K�.@`P�p��� �b�и�h���u0h���k�w�;@��&@?����˜`0`㕣����1B�Q�
_��At�Z<[�k|�O���g���:��(�� 
-��k�-ퟳ��m1p���& �+�dp7G���� �!� #���-���,`)d�������
��� v, 6�� �n_9��O�7?d�a�e�"f�`��[������<�x2��Y֫sF�?��L���m[}������|Mz������#�L�?�ы�<��0�k��~;���f|��kި��I	\�2k_��|������އK
�dY�
�<�+�G��9?���1��
�'��d������⡎>�v�~TM��'XW�7�L�v������5���0��U0��z���D�3�<�i6`�){:���mj'��Z9��T���/ǀ���>��O�v�˲w1/�Ƀ�c��?v
#���
-ɋ���$i�q�n���x�k�B�?�YW��T�.���v鞩�S�A�){�Ӻ-NNES����O	�q�ׁ�y7���]+�I�^�dR��dwQ�� V���p#�b5��m�L~h��S��@�� ��?�W�
��Og*L�8w����8ށG�
B"j��m�+�
���wr���&H�c��Ӣ��4#��\�f�C��.o״�l��Mo��Eos�?d�$�*�9����Qo��f�
a����RMK��"/}1;J���'���Q7J�=�O��A�-GxDO at xG�g�7h�Cg;o�@u���t����o�̧���,�Y����?�w\��S+S�s�&�E���\
��g�����|^�[�[K�eF-�S�r�����OΎ��3�F
��B��xj�p+0F�٬��F�� :��Ax ��9����mx��x#�b֗�XYc��\�q9v_ҧ�|�d��>0�)
d�K��_�o����;/��,q��^�U�w����C�￉yV"fõ��T�7J����}�����Qg
����Y��hu?%��
��+o+\�,�-����+*������ؾwQ�t�vc�U�Cpޞ��F�Y���/�W��O�
3�؄Oe,����-��i�8�Vt'�?`�e���F�Ś����z�#������7S��8.�}^/��{�Py`���g[�/ [...]
�t�[ˁ%��Q$��Ky+|,�4�Ӷ�ߋ���p��v�R%�YQ�آUo
�\�+5r��k[�i��vc�ʴ7p�U��>��W���DEDz/�x
-���D�6��DS�����Gb�-닊��ޚ�h\ }�,��R_Լ!�Բ�N5�9��?��߹�t�f%i�P�
�5�Mc�Ùh6��~9&q�E�'����r��~أG'������p

��y�͌�����i�X_��E{�ϙV(�
-}�ڗՍsj���V�
�w�#��$
��@��L<o͍�U��0��I���3kʽ绱�-��3�[�ɎV����S~ٟ�4���'؛��2�����\���4�'�l
�_R30��/
^h��~���AC�����)��R���X�᱘����t�
���\���r���^De�c6��Ȼ�Mꍜ������='�����eGJ��(,�kv���������LZ���e?�18I:s�Z!��v�J<�n���~����*�M�K��
/> a.e
��T��Rk�=�!J�j8
��v������“���*�0r�SXi�)
t�Q>��u����
��9��/d�?�˔�j���%,cګ�:�i��*�Z����`�|�,�z�'!����8	���&P�黷<�E��9U~uOZ|�J����z]����+s�*�!�E�m���Ш0̡Ysr��m
�����9d�D~uA��Ԁ]�@���c��к�
S�4ճ�^��Y��V��$�T�&��T�:EG�qh���ƮǾ�3���O��S�n �P^bP�7�Pu0��
9V��*�H��Z��n�+=��R΅���Φ'�}�'�,��t
�C�4eܳQ^&�r����i���g��hj�}*����ɭϤ+^E�M��
�y��5ߛ\�np�N�2��qa��p5�]bw Wg���a�K�b��Z�'�똺��em�Ž"�b�|֦���,�����(�?d?�~zm����Vs1����^?��Q���b��!+�ÅÊ֡M��ݚ���Ɨ&�Ͼ
-2�:\$L6\�޳�qze��k�
g�"�~����6[4z�IjF��\8C��\
��;l��.�"Db&�.%9�'ᶭ��
���Uoۀm�d}M�u����ռ3R�3Hg
����K��ۭTw2ן#v�,�YX�|f�H1�ѭ�6����Fᗚ]v��|����o��0h��T
�
��

(�Af�a�/����E�6�]�m��
���/�e�1�|�³���ƻ�<<S��M{�-���{n>��n����}�����\}z�{&�7�.5���!�rջ�,?̈U0+��q��!8Tx2�"5U�Z��Q��Fh��?���>H����U��v�E�N�����/뷺Ŗ�b
-[��ud*һ^y��[��H���
�(��;(}-�0�.82�*ɞ�a^/_wf���E�
���vƥ6��B�
`*6���|�FYD#C�&!�;=�L(;�����ujm���Ւ��U?_���3��|�%�+���s�0+��n��b�ߎ�
y���޷J�v�1�u�3����dE㒷��h��VLt�aKt ��ܹ{�88^�Q
x#��~�D�F�6���	��S���Ї߳�v�
�t�
�
x
��E
-;��;������l���
-_�o+
�?��9�Rّ2�߈��N�t����!��+���δ�v��i֞W�n���a�eu��%1������?�W^�
.�e�)�6FܶW���NJ
ͯ�Q�=�Fſ��ʰ����yoT���ekmPS�9����r� o��S{���6�v���3��#�"�`���L��vk�>��~�`���f@��M��ϚP4]5�J	j�ujT�g=��R]��f���ڐ蝹v񸨦�ޡ�Vv@庖���3�*��쫈/<�Ȝ��2�c('O�x�4��Y݁�P\��_~�y�ؚh�J�D,�A��u��s� ÚeC�ԛ;���H���_C�zކ��Ty̪X����n|T�ͦi�$����̪���Q�2Ý��1�Qu%�
z1����kB�5�A�|��@���UJ
lxs.Em34.�iaχ:ת��q�W�|��L�u���۔�Y;q4R����-�H��9��d�ء
��Lf9�5(��1��k),�@I�<����E-��bC�
-��=i���,
--��-������]�����ڃ��*�F���,ӌ�:�y�,�M�Cm&���"�Z�J��Mr�^�P��&��}��gi;]8s0WP�h�
]�XINvЃ�\џ
<d =U �ݜ 4�! ��,��_@W�C����h�m�5J?��dԣW�#��ݐ"e�����v
-�q3��z��0�
-}KyH`U�=KT���P ���
��sT �]�Hs /
�W�; �y��̷�A 8WPs\�����r
��
�=c��8�}1��U�
�,x
���e�B���
;��m�^�]�������mu��gUp;N�R��{���d�~f�X ���r�C���)@�_ tv
���� ������ Ȇ�d���I[ 	���Z�l�lv ٖ
�h���KK^���I/1t�z����yմ��Ҫ6U�V�7��B�^l7 ��K�N�$�� )?�?g#3��.@�� �Z�=@��;@��E�z�: ݬ	 M��B
b
�"�h��pf ���8' � ~�]K�
]����O�\Q�Bf�\��~::�R������R6 ����O*y0��.^����o�
@��
����/��t�g�QJ���
۵0k,�I �� �
�U�a�5 ؉xΉ��d�
�Y�%���	��
�e<
���,���	��ն
����~�+;�UԎ�3h<�'4�
a�>�Kپ'xɹk��o�Dt3��ᖷ��`�H 4/V�/x\����럩���~��e�'P�?~��6���(������S�<^|�Oq�J�j���������{k-��u��K���K�b�N�
�yM�v�5;SI�M�&�9}G���_��1 @�-�A�l��ߌ9TW�I����K���<L'��p�џ���]Q{}Ec�w��PNFx׮�ӭ��nWd�d�8,���Y_��N}�:}

9�N
T���m���R��CO
�Z����$^���,��cP��Η��+�����m6��,le�d��#�ڿ���
-)�.��5�K���mN�6T^��`�����;:����P�7�}�]\v��⑤�,K�p�Vm����c�}8��1��S~w/q[\֍���;A(�o�
-����ݵsΈ�(Q��{�%{,{S�ZN�G��y٪k��0����7S6^�Wܞv�	E���W�'��xR�F�!�C���!{���:tm�vq��t#�@n�
��VT�^��!��
T
�Z��]OZ���NV���vn+�0.����������}���X����g�xC��1ʟ��i//G	_�!
bK�U";w��lGnK���)�;)P�G�O���$�S��|�^�y��IRڬQ����#�����r�Yp޼Ws���:�BW�B��^���m!
�Ң7 ;:��
������@}��
- ��\�r_��wH%��.zK7���
�{��W�M�Ӹ�w��_�j�*��W� ����;�r}�9s
-ur���`�7c�b�E���3]SUY���E�
-���t�
-��(�b�w���Fͱ��g=�ԏ
�'�L22�0�
J��
5w%8���o�j�({q���Oa����)6@��b������&�y}�>{%�B��_<�6���j��&�\�.2�:�����>����1��|�Ծ�P#��`1A��B�^0�E��-Z��U5��
��G
-�$�|.�qJ�n��}��`\�
?�#nV�@y�7��L���į o��/���N��Ѷ�=���
-<���I`w�V���tF/>��^~>X��!ڄ̣��s�l6�=*/U�г���lqݨH��-P;q?iv ���d���B����l�b�9��x�o��bf��m��t���m��7_W���]x���J�ԡ��XZ?g.�o��Fn8��7�#�=�捠`�a�S��!{s���˻wFR��KLFp�B��?�W�_LWt{^�v�qU��hy�o�sۍz��h��7�-���x�S�

o#[�[��G���������H3�?����vY�
�7I=�1Lw�A%��~�|�z4?q��m/���Q
����7�c�y9߼
s}{��w���ĺVku�٢���q����NӲ��$h~��a3s�V��ʹYZeY�]��ŀqٙ�����ƩU�+�Β�Q��YF� �|��t�/#k���Jz �9�m럮�v+c׏j����
Z�,_��T}�/��٢e��o��6�V����)oi�K�\��m��gl���@��Q�S4���6[�:6]v��.�2��������b+L���6�.ļ [...]
-�JZ�Ճd�T��r�]���������e�vpZ�c;
�}Q;ԉ�=�_&C��L{Q��S�:q��XT�n%���vgߙ�_�w\
\g�tM�iP�N�Tu�V�{��rTchrue
���{�
Y2�"	ɏ��z^�v�ݥx�.�0�	��h����U�c��%
p�*�������M�럌������*�{�݋��/fGͬ��
��3:�
�(�ݍѲ�WL�(:�5Q��|Jʗ�J��12l�d�\WLq�Ҟ�FjO��ۣlİQgV?ɓM=�<.|��D�g���#���&ץ
+�7k�;�_�7Ah�;��̷כ�������j=�,�J�y������
;
9Q��W�&
��~��	5DEI�a�{~X��s�
z\<m�
-8�t�A�ԩS4=�ӛ1�Y���
���E�Ã}��96�6����IN+�)��.=�
Z��g�I��O�:�g���_L�W�2D�񻛴�k���{�wuk���$i!?'��}D�"jâ3b�l�p�����g��d�<�
Zܣ�ks��Ǿ�Ҙ
I􂕁�g&j+e���K��c�6��Z��լ
|�|���m��e;��mc��[��y��!��rb��r(�	�W�`(=;E�^���
6g���+|7�T��Vh�$VWT�p�<ϑ)�	�
g?����>�1�T�5�j��?�(ܦ��(m�ɝ��F}Rg���'k>!��D$��
.���W�
.��K�8�/�Ғ ��?��{4��w
��y;��d�c�Ԯ�.(� Ė�"���
�F�ln�h�Ti���t�K��M
--�.��h=���#c�
�x�
P���û�n��������B���p�.Ն�o�6��q�,�E�d6hfKz�ב7[%��8lES
D� C���[ឋf��F��0�̎�^�X&N

'Z�	*�Y�P�5q>�������O�:m�k���R���OM���j2�Ն��������أ�1�Q]���N�ٹr��:�翈.��^�S�����|���̆|�E��i���PVIO%�H�
o�أ��
��
���3Y��U�:i�jU�5�j�u�V���5��
-r_YM�{��n�Jc�r+�k�Z
-�î�F�

�v[R�������̑�).~�[�}
�G'�e�f��������B��V�2�J3��������0��\uJ�9�t���-��J�ӡˮ2�z֑�8���;I�q��J���\b(�
�Z����~!}
nk
x89�aQ����
��PO'�s�.�� ^t�p�km�4ű�R����6��_<d>��8f
w)�H�5�{�Huz�@�
��~ $������+�֥
-�+9*� ���R��RT�à�N��
��(}B����%_�碛_~�㼕pi�
-?h��V�r�a~9]���pZ��k�vۙ��u���uG.wf���
-4v��"�|��'���ի��w� 
B��6��:.�)Z(�c,�&wL��~�|�W3~�\�ɹ�ڰ�G�<Ķx�����
3
3m ��s �`Q�?��l?C8��݇*��b��=|4V�Y(+f�ˍ��l�i��5��f^�;e*ۓD �|U�?{���\���.�
��Vy�j� �ϊ��pm#@��"CtT�\�S�*���
>c@!�P@(*WTyKG���
�%���<�2�L�
��;����L9,���M6k��)��v/a&:
�gҽ�wn��V�}�ȍ t��f�@S-5ä	h�n�#@w�@w��Ǜ���p��c���f�=+`��
�m�a霁�e�%R�|�ɦ.���^.֘���P�bʩ����D�Q�O|篞���4``�
�d�B�K�q�:`"��Lof��������mX���ꢀuKR��X��l�f81�
v3C
WF�
�
׻��Z8���Ez��!��NKf�Kkk�n����#\4v`��5
-v����_=Y�6����X[`/�
���
�E�����p'�x�X |Ԣ ?/�?,�?��?u^
�� �=
-��.2���|����Ey��
O��%gB�+t�)ǥW
-`�������ۛ�g���p�W����o��o9��0����)���ԛ�3��A�T:% �UÓ
��?™N���T��@D���m��~����(���о�z)P����p~�S!.4kϤdPϼ��ھ)ݗxS���u��m�f�z��u��k]�x5��ғt]��佻�p�z�[j�
U
-���:�)�N������_%4�W�O	�������L�������<�ߛ}�
-�=G"�ID�)���%m��?��w���QI�N/[������_��
�swp�n��~�����
��{�Om�bN���؊p~�95K���O��
z�?J�{&�6''�
��v_�+}��TNw�^�Nq9�
���yT���:��Q� ����|
�;�Ӯn�J��b�6�	�
a�6����U�]��W��-�[�Y|�Fm�ԓ���Ց����^�����b�w��b��̛ ���
��Y�}a&F��2��1�
-�v!�:��
��� �N֩9]���x������?,�˘Xܖ����"�4��G�R�k�om�Tf��xe���doW��<�����S�R�/�^K�O
�?`��k=�Qz
��2�GzNi�%��N
�^�m\X�x���v��"��\{o��@gf�b�Q��ԁ��do��	��vIPe�	yp^��F��:���c�r��$?��M�a�X��A�0|�"�q�Q<����V�K��_����ُ�t�j����j�	ٺεG�33?.<u�.:�&���6��;�>�?������F�[#�:t���\G�D<&�|�\
t�t��&��,�_�oz�z�Q�~�wV��ky�y��_�Vt~��e��R:�,���گv�bC��U
��
���J,
�&�)6K��܍ÉrEG��i���S
6�NmX0Bj��CnP�.�Ⱥ/��
�v�y�۽��D�6*f�Ex��]H����u��
��:�G����2���)���?���ã�Ց�s>�}�\~+�x^:
�ik�T'+���a�
	�Ź�7��B�ݠ����"G�~k:�#<�{��^�3
v�o�{���.��p�#L���ӊ��|�,�)�:��@{��d�t������yh���@�w�6����9,��g�V��Y����}����b%��PGmD6�l�1���H���
9Zu����y>�׎(
^�x}�y�g�k��U|��a�ťƴE��M�cy��
-\���]l,mZA��Z�B�t������̰�#g���x4A6���1oF��x
�l��cEΪ)�=�H��t\���C�+�V�x�^�?�=mK/�ͪr�2����w���1&�:�4�EI.�\��uXu-�����@�Zi��`֔���n�&��Y�q>2犲�F����X<ɥ�|��'��cCS��?
-�{��
-
-ё�
�o���a�k��������LZ�S�;ٚ�:��?ك���l�6GF�k�D�X��
�T�����L�X����Ͱ�7*��;�,�5����ЎT���ڱ���bG
v��
j����h����j�u�˜�ݾ�n^ͫ�T��mέ���\[�z�q~3j����RW��5_�ؽ�</��!O���rFe�#��
��K%��[#�v_�ʻ��䅇�Ti�q;�F߷�
��_��w3?�X��\�KA��\�Fv�!
-�xX�B[�����3f��-�T*g����i.FE�Dr�а5|h��4��@_�
4�\4�����p�W�\m�u���"]y�p�)bv/�_�v���,nJ�^KN�呬
��?H��d����$}o��$尮P���{}���V����7��Z�`M�LĒYm�Y,��ώ��ā��Yȫ���Pe�I�n<�
>-�WH]���?�w>@�ĸRr~SU�Yz��~	~�gq�d*�rE���
�D\�Ι�{X·|.�O�s�ܸ
t�jW��
-'	i��i�G��i�>������=.���
u5t�F�~�X�:Ax��c�Ii�
-�w�rC�e>�\(����
R����Y��Y���:

-�=d���j�f��	��d,T�����s� Ə}�����uܳg�N}�٪,��Y�m����@�
Vٮ[m�#�V�w_P�<V��tє
ڥ-�g(;�X\��\l�Z;a��R��P=h����u�v��sT�~2/V�o��e�̡�w,��w$u��/~K�����o�7�v�u=+⯞l�h![���G��+�ƀA
ʨ��I��Ža ��DI\�.���-�8�Z�:j�-�N�uf��3���|grAxZ���
���!�u�
�d�9��**��^��V�9�E�� ���M�6�]wt���53s
;�n�̨
oy�:�_
�^ߔ
��|��GŊ�!�Vrℚ�W��#j�	�w�
i�|�;
�tr\�@�M�\��>٧߅�!y#Y�*�̧��2c��d��a�R^f�O?`��'f��m����,�Z��t�h��b���ě��u�>��B�󔧰����+
='��S��U��_�ۍ���{��;y��X�>ʀ
�3Vv;���]�q��|����EN�5�զa��YKjqM^�w��Q�ϰ�p~
њ�
$C���/^e�E�ۺEG��!	g�n�j��6�<��t�Sa�@nu?��M`^,p�^�x���d��xuV����g��mFY�=&o3cz��kZ��/Բ��R�G�R�x-���Na���q#ѥőN��H��F�}6����q���@=��-|�R�8��P����j���*�1$�r�{DR>U�Y��ٓ����|��"�x�l�<�z6�$Z�=�.������#�����t:ځ������e‹�:~z_l<�1
$�&8�����nb��vL�1"E����=���mej�ƞ`�_�[��dN [...]
<�~��No�Ög--Dѩ<�R
�H�"��
���g˔Qs�Z��D�2��8<
�0�"~A��g�l:4N�+��
�=�-�ֻ�!�j�f��~Z��:���j��j.PttJ]��zk�Q(2��z`MT�G�,
��~�g��ů��ȑ
�5��xK)�V�7ϳ_�łwr��p�D
��
gJ�+�3�gmMAMԟH�[*a��c�J�%W���D��s���
=[/s

+����7U�V��F��.�/�ֈ�=��>�U�(#emtY8zT_6畛�����Q#JZ��J�ӻ�q{�f%���Q�
�
&��w&
Q]�o��xV,�.T�X�\ޜxى?|�*��!'7o�� �v��syS�:ޣx���bx��"�<�At�p�*���eC���Y���E�򏻖P.D�v9��^7��գŚ7Fy�y��@�䞏�x��5�;8��Qi_�L���Iַ�8��7(_����#S)r�I�O��Ãt�ƒkŅ�I3�>�j��j
-��
�U�0��NA��I��nu��
�߲
�š[�
a�h+k[����Ӛ���=EZ�-��

k��7��x
�Jѧ62�Ԉ�rmZ:o����R������
�baVEj��3�mK�%1��H��6,�y9��ف�p}��� 6�zQ`. ��� � 3jN�o
��²�VOg8��h��"��lO��C��
�
-щ�bm\��P�Q��Xk�
�{\��Rcw�
-��/G�
d��

2x�
K
�w��`jvm�?� 
-�=  9���L �Z ?cq����!�<ieg�k�IqhϨxab�V��n��T�q�B�1�>M���N��Z䤈�K�|q��>0�r��1x>rn~� ��}�,dHKY+d	�ePh@S�"��`ti^g���
� �
H�lR�do4zO at r
H
w3�ƀ��E��K�Aӑ�j�^�FQf��h��P�d-`�̠+��#��
--���. j� NN�
�j
 �e�
6
-���sd ��	��	�&#P�B�[���e�B�#�R�p�

րz	 ��"
�w� �c�3��9m�S��~��r���t�Y�`xS�Ƈˤ�E�r  ]oayg���'�;����8�zY#3�r�{2�_[
0E`�:�їc�
�
`��7`b0�O0�A��ṡ*e�K������
- �f�]��A�������3�a
�ι]�'�
�D�8�b	2BV��Fs������W���W��=$��@,ST k��
�n�v���SӁC�9��p�qpg�|)�
��%��;�%� |���0�.��u҆�	/"�l9���S��5�w<�`+�
?#ۆLs���OU���R�궿y�Ʃ�\���[��\�>܈�W�GPo�_��@��Tėi�B���K��
�l
&�����K	��%T���|���b���+��3)~��Y�V��
�������6ԓ��7H����vu_%��D+
 ��D�]BH��wӘ�#d�;����$
����cB9��
��?��duf��(��"�
����f��+΍�g��Ǭ|\����xC�az��g�bpI��0�9G�yz5C�W��uc�O+�X<dv�q�{��7�Kwg7��+�ƛ�I
6�&E�iK���cW�!뒄d�2P�?:�W�ȇ���?�mC�랩;��f;f����
����o�7�{���������t��z��Wx
֩5�����|�;f)�7i�p%k���u�����I�0[�obfAo���������>W�)9\�g~�V�	�����H_T�
@�
9��kf}�~�U���e�/{K�|�	�O��f6���z��~f��e�Q_��Ws���"lk�IPK�q ������{�~gp�Q�k����Z1���۟^��?��~����a
���+��V\(W�6מ5jf~K�t�(�St^jL��'';g%ZqǩW��!N��ѽÍFm��W����� 
&��3�Os�g�
���h�LV�Uy]2|����l�)9ح�_ko��^w!��B��ټ̖uq4ur�b���!9Y�m�����������8f�J,>
l�5T>7�)�8��|�r�'VdO�������=2�y8�	O
���=�uӨ�tC���2��$�`��}ܞ?��7����0�0�5��ۋ�~Wf�.O��U���
ݽ���!&�y2�I���\��]�?Pc^o}ts}e���Z	O~�
$�uӐc��C;�����K�v�`���O�ˇ_
�=/3N{N��m�&��d���z���lU���i�
]��慴�ζ,�
k���x�&�1;(�c%*;�V� [...]
-��6ЇZ��Ѻ׭�wH
�
��Z��l�7�*��i�lp���G����EY�������5��5��O��$�ul�-b~�9��
:�u�ώ�6U���l
�"ŕ �+��za�����;,��k9)E뤗�w�E����܅�B��y�l�3��b����=�tA(�C����s1!
[�8f�K���ѣ�}�7[��l��}�5���c}�z�RVn��hjw�6����ȥ��7I��;�B����Z1�Ŗ�
o��
-d��(�C��v6}]�j�A�"��� ����z�X�Z'OE�tԢ
67��:6қ�ӡՔ�s`%�G�jd�Ĝ-�3S���R��9w}��e���,
�v(WYͻ��z�N
�k
�Z�ލk�#4�ݞ��1�οX}��u҅��Z��!w�� �󸷽a�(�5�^
6�fwr�.2o��U�F�a�9W��ⰦM�s��F��VU
�C�jY�0���|�v��Q�3���9��By|
�"8�'��D�p�<z��]L�G%;�
���)ױ������t��Eh��k]�[�~���
mՋ5rs��_��&a}{QjzMq3�i��Kq����"�_��:��3lpQ)V��TV�V
WZY�
�����4�G��
���:����hr(�am�&��b���-���q���V�e�˻�֪گ|3��]Gsa�Ά��]��{�Ԉ�
�]l_j��/��syFj���0��c��d��yr��
�io1�`���A4���j����
-��3��b�_���Sݽl����F�u�/6So��N�������j;��9�!�6�3�3͡|�w��Q�;�Nex>�F��ȇ2�Z�[�ʲ⇸4M#FҒ�$.
'M4�_[DL�-lH%��L���b[��ܭ�
m�?�G�$Y�)p�s�T�q�̩q�
������$
��A6�$
�
���
��
�~��&��F��}�~�J��Nr¾n�L��%8�gE�P���
�������y�
�u�8�i�v��@b�"��^�.L�<�6|�}���2�]�
�7l}D�l�sj��.���M�Iԯ�g���'�k�Dg�%�o����j��-mܧ�N���J�?���\g��F���ߺ��u�ޢ|0���~pܵ�+\x�-��m�!�� �����>1oo��JfD05F�,d$t at O�%=Q%z��2=��."��������)��Ê�<ZK���=�=����"���4/xK�Z�+�Q�?#�fS������U�\k#�#���5�Y<$�=-��Hc[��=��	=�{Z��
��j��E��n
e�{s�D�!�t�2��󓽶��_�sv�	럸ۮ^��=2
�l�FI�4���j'i��k�|a��_g|Ǻn�^k{`�Ǎ$�a>���%�L��$�ɱ�y��:<�4$�Z <���7�J�͚\c؝l����P���C��)„p
 vj�N�8���d���&a������}�hN6
Ҩ�D�R9���'1s+%}Uo�����ф}r��1;;FN')=eW/Z}�����!��8U��,�;2i�s��<
mb�`��kKC�?n%���֞�I^kb��s�]��v��Y�$%
'����eG�{i��U��;۲e̋�v?��O��"����V\~�XƌBr3.�l^̶p$��F��ޗD�L��
J`�
��B������x��R����Bu�1��T��\-"��_���\���ߺ��}���^�
-��Z����է��̯�V�#�ɬ�ΘzK.����^b��:�
^\���dNO��1e�oc]ݖ�Gv�)ʝ�@�^X�sXشK�9I����f�DQNΜ"ڪ���N5^
�Uɦ�U��49T1��NT�@2=�@��h���h�9Rц�2�dt�BR�7ۭ�tx��nTk
�cHZ���l��J�ǯ�Fyv�ըLo4�q�?��
���
��}��[_�#���J/�P1SA'�M�jy,���E�d��W1�ְR|
��ը�,7�-��+yIF��	CZBw�l���
�\^6�_����
�R�BY<��FUQ�v溂�O��3
r�-];K�:���uꏪ�l4���|2�ue�(�J)t��5;����
\�
^Udg�
�"���6�f��|’_�g%�M��@(�Թ^�o��"t��X�H��B��,����n'��4��R7^[�*�w� x-��E�م�s�
�j4Wxg��ׄ�9F��wX�����͢t�O�9z����܋a�2�"3[f
,|o��pD�:�_�>��>�P�GH|<���9�
-ߠ�
endstream
endobj
314 0 obj
<</Length 65536>>stream
-j9-$�e��Ul�7
�7�M_Ş�<i�v͗Y%yV�RY�!�j*/��l��������Mmؿ,���e�t���ڛBo7XA#,�e8��tο!��
�	����-�
�~���u���o?ʭ��:�̫�\y�ɮ8U����~�6��m�gPΨ:��	���z���f�&�P��
-߄��ϵ�-��Y|Y�3WjQ�0�)�x'	$O�l�
P�sk���*
jvf#.�@m3�@�Z�28�
�j7����{+�ȃ @�5 at ma
Am�\Am�Q��q�

�iش�y���Kk�֕w����|�W�"=,~a��}�"�T�n��R��n�/!�yZ�X�����Q�e�� {. {�
�a����sx��J���68����@�p��ި S��vO��w<�
\3C'0]<�k�%�e�[�������-SU��\y�j��_ލڷ�?ϰT��BI;���k
�k�8� QA�� h+9)�����
c
I%�Л bR>g�À��u@�� �"ڭ1�f�s
 �b�����
�~o��w$p�ܑ�+P���<���H]޷K�ĺ�7,�Y0ڗ{�u�S@�
u�H�����/��$|a@�2 ��Ð��)��ڀ�}@��%���(ݩ �@�
��
st�$%1�&�,��z�����ά%�8����"y��hx��^��J�?�¹y���_=9�����ſH���S�T����m5��
&�W�?,�G�)!{��/`H��p3 #�ǀ��`����պ>+e�.z�e����_hRx��0��J����J�c���/��\��d�R�S���/�
�������
�����m��i��2��v
�/N�y�5
��x�0�S
���\�[
p�g�n$�p����۴��~�UE�;	�p�
�P���ۇ��K��n��oK����K��S��o%�a
�>���yu����ԴD�@}��@��>!����6U T�} ��*���
�B��*�����b����6�3)��Y��y�n�#����[���>yu�]&=�>��߾tI}����nL[g~�N1��~��͎	�
�������e���
�Sm�2�����������
��s��T���жXx7��������bt��c�taf��_���|�
��k�
��1�?�C�R��%� v�gNm�ʶ��fe��ujW;kf�LW��W�eI,_!�,c6/�@�����)���cV�Vn����'�`.�Ԓ�w�c�b��
�m��_2���~=�[
Ǜ���n��n����Zݝ�~Uw�嫽��
�{a�����A��R�2���(�St}xL��P�xU��_�/
􎸏�tIE�vW��A;i���
[,)�7�J��v�]�< .����P�c>�
�

^ݙ�=�3$y�S��L��c<��"99�mB
��8$��u�ۂFs �׀Rc����{�_������O����f�:�s��{$��֩&��V)Y(��b��?����ݦ���b���@ɩ�Gr���S%��	aF�#���q̡Y�O�&"���
f
?
���"�J�C�@��Su+��_�{
�
��+�	O����=��w
oh�<���i��F5gWQm��=m�W�F ew
V��("�q��J��7���[:fr�>�s�;Zj�\d�m���Z��wʝjo��=�6�“��C2=�ݴW��̳>�D��
^�&
$����%����w�W�ѿ�#�kz��vvg�*�\�a�o��
�6�ǯ`J��
f�Y�����v]��==�“w�����ꦝ���n��=�];���^��7�r(�'Y��M�gV_j�۵�yK�����1s
�pu�ۄt�;�������KOm��K��%����NJ��k���)
&��节Ó[E�i�S�{�:����@A�Z�w���~�ۺ���g6����2�
]ǻg�K��-o,�Z�
�N�?I�U�
;�t͇S:4\��
��FS�
-��>>Z?����n�e�e�Ʒ��Bo����)
�#������.��>��  "�+��!��7�{��Ju[��rk���jk�N������GM��������cs���M�Z���]�rś�Wl�����\wg�n�(
*���_lR
�N=b���C�|뼚z��~�̻h/��m�Wou���r
Z��q:�5f��
ks���|�*zS8V��ǧ=KN鎕
���
-�؄潥a�&}ݽ>t��am7h�k\�,?����a�P�ɷ��ZWh����+P��茺Q�c�w���E�s��­���I���a�����kST�_K�_�9� ��Ժ<m,�b�0#S�7E���U��������EO=��K�F*ӧFX|�{��*Q]�z�ܒ_kk"ǡ��%�2�������"��jm��h��y?,��A�uz�(m��]�����kS/2ê0W}�7�:�
-��'��zʌ���|#=�F�ߵK��M��SR�ؗ�;�%��& zH��]�
-�+�1���;���-�3Z,n0�/D��{�ɠ��ͮN�v%���-�r�;��q?�_�&�����l�
�x����R�����_�aX UT~;8!��'��.I�Ӥ�'�Ź�	D���CY	M�{*H�Pߦ>Uo��l��5��kZ���:�aӨ��T�E��ң��(��԰��%[x=^�B̝��ί��$���E=n�
v�
��Z~_أ,+�C�̜��K�>���jT�ΙV�3+4# 	�zU�[o��
�OS�}�����.m
���_:�P�pL��e�
Q��-PF��m���ͳ�#(J9��
-����Ӱ��Q����q3c婼�xN�ie;� �����,�i�*�
-��4�Xwa取A�~����u�p��#��\Wc;
��c��,/�o�[��
�df�v�=�3�?B��.eh(����a��Ho�ڋ�_�6ͅq�Nx��2�~�
����s�A_�n�Xz�&
-�E�mu���8Hy�
=�`k
�nx+���e����,0/��3�t�2�:���pM'��V^^���_�Ώ��,�)ꆚ5���dg'e��?ue;_KUݓ�$�I]-"�մ�핗�,�<~��\�/��Z�������Є�~K+�I�#��ļ
���%;Lj�1B�;�N�Y繠��v�+���D�9#�bs�,��(��^����SU�%���
=�E5�E4W�w�P�k���[�\�>㋸�H�k]
*NE$yt!5�H1K��7���]�
=��F��8��ӹ�
⡆��P���
-�͎�pf-�^Ϥl��mC��yW���#��c��k�s|
dW~_e>R
;��W[���sY\
����실Sk
-�>{���_U��
�R�g�.{���ST�5���
Ʒ�ם
v�[�oȓ���
������d�\WoD�Vz���V]y)�H�ד�aa,ͨ�B�D\rӓ<�O�
b���*�P�*��lG��\}�fhu��F�qE�f�
q͐�8�Y�e_����uN�Y�k�y�j6�p4�K�g��~
r�r{�N���
-NL�7.TG��GMe�^�r'�R^��CD
-Sb�
Xk�%K���]Fw��N /hO�;a"�5���Q���P�m_�}V�,7��P�L?
-���}�\sCƜ��N"�Y��˱k���E$>�]�ϟ�ׄ�g;ό�&s�O5
yw��Si�(O��X��-{���u����0�Neb��{:a�i��v�“�>�y����`��X'K�����G�w�v����.�5��Xj39��
��5�xڟ�/�9
T��"g��6��j��@X�dk�Z?a���6�]9��Z����w��>�e�t��
�:��o��i0e��zE�۞
݉��l@��j��31Oy��Aa�U �E
�I��WbmS$��M�S7"踔VD�N3Ě���k
�^,�K�7{���i�p����x4ٖ�Ү�d�@�SO*�H��ou�,6*̳Ǘ�qڐ���P��(
��b�H�q2(�'��b}#"��4���I^7S]�5�HwFxcG
Sl3�T�t�B��؅�ϸ�]�x��)_Tkg�P̝�wjPg䠿�֫2q4D�7B�2�e���t�i����d
5���7Y&���F��M+�k/;��ve�\�Dž����?�2�}c����
FHѰ1M?�?(zY}�7��P�) ��f4�uV��c��iu��&��hχ�r����R��r�t��z��ˬ�G]�e̶g���|��t��'iѓ��VT�
z!.��u�c5ۘ�����x9E��k�Z,yH<��~�"���E
����(��v�`��,�����
-r���Ճ2�f����B�'SB��8����ɏ0�hL�F#s;��"��q�<�����/�
1�6�i�M�}�k�����g��@�a�ǵ\���Z�ʳt/���@�ms�
x��b)��?�IQ�q����YR�76��8�,yzn�)R@����m��q��Y
9kwxqJ?_�
-�#|sWj;e
�
)BX���qܛ�`ޫ#bA�|�
�4��M
�(�R
7��_g�"�'Ő,�()B/�'���u��ŵ7`3��b�����H��
�-g����v���'��h����5��?�w+_�0���֚�s��2����Փ�c*!�`O�>`߳i��
p��h
gu�).(��K16W�K)�=���$�\84 ����>K����7���{��߁�.Umg�nJ˗���%�� �������ZJ�
!�{���P�)<����!���,?K��E{��g����_=�#A��6H�oo2�o���, �I��x�6�����"��?�ҷ8��m뼟b�șq��WVVүW�R�]����|�W�L�1j��τ��� �$(|R�0���l����9B�8a��z�[�?�`Q�I �� ���b�
-�8v��`�)�_�w�@\q�K�����
�m�b�)ƽ?n�c����q�
�\���t!� !A�'6�
������~��x��������-��` �^HQ���*�B@&�
��{�?a�=�[]�c]�JO�d��
96�mݤ��M�q�S=��\-��)g��+C
gM{W!
��9
-qk�ךL@���ۯ
��+ �)�e�o�Cei��7t�<P�Tz�j�,�]o@��(�n5'ū
�[r �}�n{X�ǩԧ96����b��/J�S���9���
-n��<��E�7?y����w(0�ݿ_���
�d��x��
-��N��~�N��w�4z�V_n����YY���A_)N��xXƌ�W]�ǰ���~���m��̊~�~��t��ӊ��.R�ۂ}��k�����s�ܟ�o��̜�э:�]�?)�G:��~�W�}x�D�`%zi?��.���%�ZqB
��m��M�C��������K�?��uF
��W���3ow,��nD-
-�tk�:����`|�b��0 �U�)�o�p�?�3sN*yۮM�����gS�����C�o
�eW�*�.�Z�g#[X
�Y4�t���y��

��,���C�:æ���Ug����c:�+�xs��a��?��S��;��r����o�	��٧�RV����z�,�m0�4��s=��p糞y��.^d�KLL��4�
l�;��ks|�(ձx���*\�F�<�Gʵ����������Y��k�o"
-�냃oV���]
-.
�̝
D̼���
�0];'eJ�'㫎>�ny͍�wa,n���r�Dî���57
�r��
���
NH/�d���x��(�E���˺���?#�A�A�B��2�V�cA��
�\�� iO��a4>>˱�!�#e�]���y<#
�;���&���7I��ϥ�/���лn؝u����
������0�M1��k�ي
�o)�k�y��_��t�|�
�IUf���U�����E
72yu����` C��XG
?h/�3՞�v7@�Ag]Ц
zm.�UF۴�]v5�����un��-�V���n'��_#��
�Ԇ
CN}�
���7;����װD�U5^�A��0.VnU�ӭ����A��Ӌ�a��
5�
-�w���!�	�lW�P�\��΍�i)�A�����Ƴ7�g
�?�u����øϒ��o��O���"�OUbG<*뚍T�SH���X-sw��^��vV:�Gp)�ijIE�^�ݲ���=*���c�)?h?Gz�Nxm^�
Z�:sjv����W}�}�u8��5g��(hUb+ەu%�_�C6('�|��]r���.GaCk�K�~{\���x�?h�@�G����&zb�n�e��4}�I�	"�j����Z�_��>-���Ék�n
��{T/�I2�֑c~]�;�Mz�J�Ώi�_�o���ABI��R4����וb�dE�Up��R�v�R
�?���4* ��0��2�<�͝�">�|�Dq^Y)�
s�Ts�Y�����_�Rm@�E�@7��Ork�ャN���M��|�
-��P��eY���	q���,JmG�{U�
��#�� .L�Q@�.��-b)�o��{�_^�_l?=�҉�W
еܞL?�j���=���m
2O�j�H�C>
Gۖ+�GU]e�&����)���ʩ^�cq�hu���-�FZ]|��R��ϋV�3

=l�CuP���i~ΆK%�;�w���]<v�Cs�����	�sO)�-U2�kOu�����UT��KI�~߱yZ]�z��
gĚ�u��}�´��¼
da>/�P�/�*O�;;���k�W�'�^2��6@1�/Q�_琖O�Mo���r��f��Ѹ,���sn08;�Dze��g��\&k
��=����L'�cK��haM�iPcl���XW��s��pz2rrz���z�L�RL�4���ds���d]�.��\[$���5�eF�<�8L��f�r�լ���*�l��W��
xى�Y�i�PLlx�>[q{��2�kz����2�z�JFX6
��ھ^��*:�}�HV�Z��y�/�Ջ�9j�wԶ�{�m�Ȥ�j�h
-�<�Z�Z���zD�i�{.d����j��ؽ��
�g���!y
�@�Vm7�����g.���$�ׅ�������S��^� ���q�^'�����%�dն�+���(�:�H{1Sl\�7 ��%�^K
&����Q�<�i��FrB�b�|cr"���
����~
��2'���ӻm:�l�M��}�h��B�$wN�(
Nڋ�Q��
p}�
��J��Q�^�۳�n����CJ�+�����Myx|���(ה!gKS�8K���о��s���l�$��=!��
��~�tj�e��������@a^gO^=K,�ǘf��vۚ�������Fy�zmET���SW��'R�&6P
27U̎���^a/���E�.F�T�7L��#y��J�v��*Z
Fs"f��(�VMT(��*�̢*��� �*-<ŞV�tʔ�M�V��\�2�O�T:
r��m�� �0�+1(�%qZ1�]�N͵�^;���
ʊuy��;24��'&���o+q���b!g�E�B"�
(au�$�4(8m��|��V����~P��j0w062W!W�T�`��
�>�E�вUN�2E��z [...]
��w�scfc���H�wS;睲�Oyy,�k�#.
-d �K��@'�*���6Ͻ�w�1�(EN��#{N�i��F=IQeY50�;����f�6��_��E�Gۃ]����%=xǀ~�4�EÛ���V'��o?sQ��˺j0��k��Ƨ���VJ9������W$��-0���yp���I�K����.�v�1s��%�Ã
c,�W�ռ@�P!I:
�
-
�ģ&y�A�2�����N
9?r�n{�3�SHRx�HH*��:�jߴ?Y�w�H/���m$�|O� ��2H�P�s�'l������5��˶��ӫ�?(c�:=
�":k/4.15ْ*W1N�U_��ː�!)��l�%VСJcgBP�Dž�j
2�e'Sސ�̖|�	*�Dq�%�ժ��M;�pw��������
-��D���"k�����d�l3�+e�#L�D(her�3d-v�̼=&V�͒(��=A]��e��"���l��H�/!^/�C\�Z��X����j�v�����^�m�|�n�7�$�
O�,�>o��ޗ��S^�VS�
��_=���\��1�f>K;
d���>K��k>�� S9]+.B[�A�x����⬽�����䓢Ha�z�����]m�CӚ7IqK�W�٬kȳ�o���?�� h�D�5��<����.�r7�����4�S ������
g)`u~�ѣkޥ�d!�7�F��bQ\J;
L�vJ)�u��?:h�D�Q�e.S��K9����� v�,���҅ݱڄ7YB3�{A��#@�`^���n�o�#�-�
�{r�O{�oЉ���.fS�]G����Z�.��M�J�9��мG�㷃�NZ��y��-�DU*�d�o��ʪ��)�o�(#k�; (}K�0��
-��F
(���8s��F���
-P4�n���7���
�
�u6�N��tr���{ �E=���E����S�teR����ôV�A��ȇ��z�<��I��B��(u -�&���u��%��"s)fY@�F=�shm�4��zGi�*:�o�
���E�I;�i�c�w��p�U>�޿�o���Ԭ�T��b�-V
0]D
�G��a��/�Pw��~z�:
���)�`�t7�a.R4w)�w����R���R,Z��
k�d98�ULZ� �	��am0h$��
K�
��1����Ț����_n�lo��i�6n�Xj�˲�>��
-2
�e��C�\[`�}-ŻXZ�Vɍ �g�-
����
`�M����d=;q��"`��>`ct�b����ot ����m�<`���go�&y֣3q����Z^q�v�^Y
I)���P�C��w%�� �f6 {��d[�3k��!�j����
-ps;�>:�qx�Sq��c���� o���+�6��c�LL~�^j{<�R�ȅ�̂S D
��D-�#wj	
7�K��{s��=Oёܝ��:\o���'��t/m{��?�+�x���%�' ��!
 4���]1��y@$�
 �`�b�"�@��z�w�
��@x�T <���K�Mϖ
+�ß/v:'3gr&�[t�w��u��&�d�o=y��RN@��_Gp�sbw� b�}��@b
�?�'H�l�`W�u�B�8��d8� ��@F�n��H�
	d�u��JjF��x|#����t��//�v�n�$�`ʩ���;������
-�c�k��L�ȿ��h�_��@я
P�|�
�*��R�^@e;P93 �ANR<�m�����Pp
-)��6tPM*?8�{��("�n	-�(\������
�7U�__��~��
w~��O����ee���ߥ�*�
л�xg}׍��(쀁�0p�?��!����&���w�'��:�l�?���s �;�1��ܽ�|y#�핎�?Kf�ߥ�)���I���������Y7���b�a'
��o�VT�$� �̓�=g�1kq�i��
����ZW�	���u�&
c�g�X�%\��]�$�˽p]&<E�^;<
����?�
����Bɍ�kC�n�lf���r����Z\P�UDR���>��^��"柨$̝{ߜ��8���a
��+&�K�ű�������_c譐�۹��ݎz|�������c,)\bf�X
q-�
ey+1��YE�uDr��'���
���_��~��ʁޔ�#�I� �C�'cqg_G�Z
)�#;쪆3��x��﯃�����������
mK�{�k]�A��=���lG�v�݅KL���$�	�x�cq�ࣈM���?sîx�������
X������B��p�^�ꭞ��G�E~����������:��m����߮Jn��E�~�=��1�M��R�u7�i����߸�siW
ު����ܵ����b������_x��%�kg
 �NHR���3H��
-Dt�
L�sr�
��V��
-�[�Ro�f����a�T��?n}
���K��0V��k��y{��
;™���0�����9��O��	�	�Di'śݮ�t!:T�J$
�F+��N���ͮ��ρ7���&��>�y����[-.��5�X��Ex�Ğ6*�z�P�ϫ����e��
�2���e�e���7��'O��@
z؈����{n��V=��nQZ �w
nXo9S;Y���e��5��-�nuQ��ĶW��+�j%��rҘ��Ui7(s��4l�`�O�X�l�Y�M�x���KE�s?h0ƍ���M�(D����j�:o�p�|vrD�����j
׍����.��j�|���*����TNj��]
-F��
K��ҹlj%�M+��H4�]�r�g�{������W��q�\j5�Ǖ�2����_4��W�'n9�[�@�
���
��H����jb�
�n(���
-�ƛ`�
E�+e�4,Wo�vxv��s'藔g8)v�h<'�}`��Ka\?
-.��8ܠy�9yl�b�E
�@d4o
��ꅪ��%������]����n#�\\I=�N4�d'Z@��6��Q�C�+�NA2!���Js�f_���U��	Oa��?�q'xs|=�Fz^��==
�v+�&	�b��+oÿ
�|]r;�j���8�q�x�r�cSt.͉�h����c��5y#�_�AlG�Ɇ� �&�-���\�S�r���Bm���I~1��wF[Tx
S�KYl@��L[�$���܇�Q�r���$l-�;fZ9Af�n�#O�+�]9�Ey��:Zоd��5�S`��-fo��Xɚٰr��o��Y��
������(��Ǡ�>�o�t�Wt�b��+��߽�>fhJ��
��d���\|���v�����i��
����w���
8��
�}�Ұ�Q�kg
��skj���0:
�y���þ���B�����GL�8sS����k�H��B=}��Z_(U)7\U�f���>R��/���*5��˒�>�ț��&��R��t�Rv�+x�'�I�1�)��6
�����f:�MB�:F�K

�c}�r�zeY?h�~����K;7Lm=?��,-U����_u��cy��ϲ-�2��̤{�>q,�I��˶�!�F$ւ��z���/},�
�d���f-
�Ӣ�1����2>0�u��3�����/i�F���K�V��x���Q�<SU�Vҹw��r��� -�&1)۹�$�bVr���d��8��G�OLīC�k����['�?��y|��E�b�Ew?�_S�ݺt�Y9S�f�J`�k���ԫS�hG�����{���
	��7�htd;22p�3i�
6�;[%�?ř������TX�kC(�JI ��h;�l� �\lj<K�
�
:�	�o��941�|\� W{��d����v�����H/,�vu��꥾L�>�
�TŸOlyh]�&)OBq���b
ߵE����e��
E'=Rܽ����P<k64n��\m]�rB�ذ'-��OJb�/&�aؓ��S�?�P�FN^��&��Li�͵�h�
񽶕�*F��~�[
�ݿk���$9��D)W�tq�Ȗ�� [...]
�:_!6�/�=��e��AUٖmF)�#V!wK�{��1
���1������/]���I��(�5�=
��>�)�_
�ѳ��>��A}x����G���/k��#idͧZ��B�)��W�
ޖ��P
%
-%o�^c|����z{���G�`���anľ�t֏2���f
-�O�嘶�˄�^Wj,eʹ
9
-� 6{Q��q"&�e�J,J
-M,B* �
��AI�\�I
^�}�'/W����ʎ���\clK��
-eU�t=yt�mq�.�|�`�9���X�VO��9�tz�l�3+�qmT�\a���|zt�8ʌH�ͭH
i����!��FdZ�f�&̄��8N
�
�}H|���
cnf���_2�}�YV�
V ,��޴�����?���E%T\חb�e
k'�r��^d�r�c
��i;�D���*9����6����TZ"��#������e����w�����
^c~�J�����
��!ִ�c�5��P=�5�v�
#��
C�Qz*m�O\��
��i���+|��
~eoq�;�|��{!��}�xD��9��8��M��f{�2����w�O�
�".d�Z�V;A�)�L�-&W��[
m�2R�a>=$R/�y�<�EzO�B
�6D��%�`Q�&��!�E��<e]�:7�JZ��#|�����

Mg��LgEO�P�HG��i|�u�4�*X�
��z�<
h��i��
�茑�a�F�������[
u5v�]
���%�9�7�]���4�hK�O��|
l<o�
���w�Ӑ'ء�K���]i�e�EJ����B��%%����m��Z�*�vɮ�
�PG�}Ղ?����u	vη:kp�Q+��ygb� Ćˤ��i�Ols@��,E��4�����d)�o,�c?���)�.]��U2r����\�s�x�0�2)O�j�jg����H���6b�:�X����F�)l?E����d]���$�l at O@Z ���I
�i�Ȉ� 2Ld@�WM at z�m����]v�˞�?;cwCf���J��j�+�P�5S`
�^��u!K�ݑ��3��E	���b!!`3P�|!���F
-��y)E@���gީ��K1��
R?)
,��MP5���T�� *���)
-m at 9�9E���X��a����L���_�w�N�9م�>IJ���{Sk;���>g�S�A�}��S5@:���oy@�D	ЁUt����:�PX�h^R�@��"���K1�]���x{@w�L�����Z�t�$���z�\&��
-
-Ld�_�7�|�5z|BB������Q>��V9䝴\�Zѳ���ף�p���
- ��+�����<:���`��0��
�����-��S�K�y*C���0�-�S� ��=�ƆS�%���i'����Z��B"n�/U�.�e�-r���zeL�k%d�BEhq
��3-�
����W!`��
-`[h
�#�
�Uy���e�K�Y�D��w���E(�x������ࢦ��[\�X�x��؟ZVh����6>��|��
3��RD&�f�#aF�W�ArD�	6o����J�[�G������-���_�c
��|�s���n�Ir��x �
-` d
Z��b[B��!��P
b�J�d�Puҭ��sKAl��4/���0:��x��O]R�ve�i‡1f#=HCP��zGSV����
-���%q�����P]}�8#p �=H��7�W�R�@��o&U�7 U�,�j�"�
-�
H6x���@�y�<7 ����P�6;�h�%����`V�[!�����o���@�H�_����n�1��W���~[���f�_�-�����@��!Pf�.��|�ePl eh$@i����P�VE���;fJ�o�3�"3W$o�/���'�ՓC���?��u�F8����c��J��Eh���~�ڳ� :�r@�������*f���AIzSS������~�n�s ������8(t�9@��/���=)����/��wݬ_�hyp�;��k�=h�E=,I/nrK�j܆��������[i/��`�(�'\����/��կ
�?��A�@�wo5��k>O\*�,w�?���l7W˒�����d!��-=(�7�Ī��9�XE
-o!�]vn�xָ��:q��X�s���f��y��fhLLcvbs�+�I�.
&�.���Y
"�1������v����؅G�=\��	��M�ݸ�p�^)�2�Vr�|,	�,�(~��3�M`E�)=���*��M�Z7h�׿��Fʑj��<<;���z�O����](+��X���<�MQH��n����?��Ǜ��	��4V�|
�?5�<�:�JL
n�4���$������Q�<�îp>���}`����؁��:���
gwxχ�tw�]�n�#Jg]��NH~;���vZ�v��t�G�չ��]�mE&Tk)�f�O��_��Q�����EKs�꿞^�̏��C<s���O����=l��u��#�ЫS�����6�<��_�x|oZ��k)7�Լu3����ލ�PG6���ϴ�����ޭ��L��S�auQy
��)Wa����߸��97/ą�]J���ν�쬽ϣ]%�w$�{���z�6l���ҽ4�c7����|Pw&��y�Z�3|����N5��~�H�q%��y�>��rU��e�|†������R���%;�[�>o��X��k�Z��������
; [...]
-��J���rR
GaC��*�ᠤ<q�6�7E,�sr�6z~>
 ���
B��2��}������@4,�8������(��iZ[ro�
�	p9�w%�w%�t%��v��
���ȴ�n��|�&��Em5	��C��N�J�(�
�����8oV
-��l�}:�������6��p�ro����9�t6�\U?�����
��q%(�8�,9*�5��E;�5�M�~n��=�t�����9d�s귬q�m��y��c��g���L$��{-�,���a�`�I���^,����������ϊ��.��jb�
�J�?z�9�����Q�6���n����Qb?O��jZ��m�4d�gb�rk�B��i�c(0q��1��}e{�a���o�uQ��
}Sb�)r��
-3��h��uk5
��n�+�z����A�S�e]�
�yZΥ�t�w��d�$.�C~Q���iM�s�����Bb:6g��2�|ao����(ʭ�AA	�ob��Y^״ݱ��j�L�'�8W����ʵ6������
g�b{N������K�]a�_�R�;(Z�ܤ����>�=*��
uI��
^�&Gɴ��
�����-��i�Fq��
ʮ��-���$�j{6Yi��m�	
⪞$��ʓ*�\�Y��+?���Ϣ����;�Hi����(��Q�;I�y%�Dn�E�T��]�q���Z��C���Z9+vb�\�lҎ7JZ�5J�PַVS��������ӄݦ��j��*�.M�!=��JEG��*���N���Mz���<#�H��{8�z}(�?ー #L(L��P�����?�6�85����¶�{�Q��^6�/r�G�5I�Og~=�\$���Y�~�HMt)Vm�2�r}���;S~‚+��l }�lY
kM�i{,o&b
#k�Ƀ���Px�>�7b>��O�t��^�U-�6jr�,���8I�
뾸x����&O��ۆ�
{�v3H�Y}G�֘OD5�dF�u�E?�3�@�sҧ�$�Б�~?���胭+b�kAXxhE8�ůf���g�2���s�J�x}#�G����2i�R�Y3���>՘�1�2�ݰR%:�H&|�3�=[�}f��dkV(�2?�j�
-���,(F���r���S
�N�8�0BPy~�WңSwL�K.�|FE�:^U9�
u�#+��%�x�׬ԟ��K@���ɱ�}q��7h�y�S�e�I�V�L����N��������G�;�ܱ���æP3�k��׊U[m׏�b29!���pKIH��D���0>�?)ng����	�V�?&s��
����[
����^��iS�
��}�s�����EA$Y#'�x������ s]L s=�IN����ܤ^�B^),���ٓ-T5��ך[�V
�F��y�g�),"Ɨ�5����
O1�\nŴ�]6��ﯮH��
�6�7�z�X�ެ��V:�ocr�A2w*>I��%����D9V��ܟdV��%�
-�\fU�׉̨��.	5lr�S���A��r�Zs�Z����W;�d�o��H�U�VX���
���Xy�}-vQ�<��n��ѹ�<uB��zc���'�C��7��(ȥ�J�v�Y��-S�+X� ߞ�%����3�i!�sz��W���&���F�gl�}Wg
sU�W����0�
�j�X��
�
<2�+��e:���U�M��8D��!1�G�ɰDa`�a�Ff
n��Y�2t���N
�g}�s��;dkP+k��"&&�!&����D�BρS��%:I��ST8�N�E��1��VYS�ؓ��)���ռy��(V1��'.D�^ć�.��4��
�D�ū�K�yW��\�ST
X���a���a��-Ш�9�є�Q���
��)6}�;2v���1�p�y�;��ە]
-�����Sk�ͦ�b�)��a�h��QV��9lje�b:��Ɔ
��� �D�/<�� �qL�
�;mg�2�&H
Uת��ð�b�Fz
����(��5}�Y@�0����ē�Pۭ d�!�
X��ң��7�۱"{b�99�Φ
*�"�I�nc
-kES�H��C�i�
��]]�� -���
�Cm��8�ȴI�,5�MEx�lt8[�;0$�49�uu}0�K���
d
-���]�7���ۉg
I�h��Zc��p�
U	j�]+�.i��Emc�I�U����/��)7�	�HX�� �
?3� C�Cv�"	yF�ףX�
-, ���'���b�f�)�=@��% ��-Ň �I�	�5 ��u�2�	2�J/�u�
e���q�K궩
���o
-�����ibqG�R�
Zh�92��T�����q�n�1�6�YM(�0r �&�eY �q��x9�8IA�F:��y����Փϫ .V�;��
��0Dbo���Wg�, ��1 �]v�I�&S5�7m*�{�^���'��(H����D�w���c;=]�WO
�
r	��H#O��q��n$@v_ {�ș�r7.����w�)�;@
�O�9
�c��	�r�> r
�o5q�.	��������w�J?jC�̌Zr��+�o��s�w'c��qK�TV���;k�"
�'.��
(xHJ��rP�k*�f������V�El ��)N
@C�9�
-4�^4|) ��p��:\�G�k��P�60�#{�]��H�F�_��,?(ce��ޙd�2��"j��<+�d3��J�@�%�i-	h���[���r�)��N��V0ܩ���o&)^O���қ���e�J
�,���R Cת�a�;��a�ic�i��D�d�皢Z׵��b�s�(�	s�bN�P����������gt]�]�Bšw
�D�������:�ڱ�q�>v�ƫ����,�}��9���'c9��R6`�9�㲏Q�7X�{��&��N<�]�{���#�=xJc��O�]��P�*|� �
fwv�[�ׯsx�K�k`���(;��Mm���b�)���U��J,!Q�Q�֓��Ĥ�=W�-����m���q�6\��N<������л=~��К"��,\ "�)��o�Ò��-a�Y a
-�b�*Z��ri�]
-�3aȱO��B
z�f|��L�	�
t=�'h�O=��	���x��7�Ml��$��� 
UHυdT,�2�~�%f ��ZҶ�ҭpҞ��4_*r���wA�N�#�r�h�k���lm
1�2�;������B�@���D��X�s
��`�$��w�ڕJK���N3�f,�9P��;P3$
T�*5� r_@	X!/���y��i�D��uO(3{��&����v�w���줐����/;N�m2��/���ûX_�m������@/�@_C�XF0��#Чx�B��l�}^3�����/�M��d�����~�}��[鉹A�Q�z�;?
��lir	ls~I�͕��
�s��N��ǵz����?f'�fI�)�U�Sr3���z,=ҫ�����k�K�\"����+�[�f��A�ߴ�V�u6��-�v�z }�Z
����O�k�.�����V���k�&u�
-�`�WQۨ�r���Rr{i���[���#��r᢭c�!w�3��C3�s��eM�^m9	��h�
-Sp2
k��^����?�
�
?�
z������ތ�7�1���f��O���y�XzZ��?z�pa
�

�����h򛿊	�.�(��E��
K��:i����+U
�2vsϚá��V�u��]�ǭX�������s���O�J�����޿�U�Zl�訰�;��bg���SOk&m��t�ez����d�	��(>
��̢���]�t��%�3��Wg_P�?�x�%�l��U���̛�A�Wn�>�~kl������ڌ֘ݜ����&��X������f&���<�C�\�ހ'���]�W�C���o�έ�
�
4���N�ho6�Z�(�6gV�hZ(�i�+��pH�Z_���^b[Xm�X
5���c�R������G/��ǧ��O��$a
x��V�C/m?�̺u�t����ϭ̻}iβ��	/&Q,/��`��.CR�<@ZmW#�5�G��c����
-�~���-]iTn#�S�f�fU�<���R�|>K&)b�h7T��*[*Z�mQ���ejIJH'���L“%(������h|�4��ԫ�L8����m�-%�Vn�T�����3�� kBer��ضȒ���b����Y���}+U�\��Egݼ՜����]/�ٮ���c
��ͦ� .^]��!�
��dI���5�%�ŕY�ʭw*��Ɨ���⬐��m�]�*�a�a��XNg]?
���ػ���u�*��H�?h$Ͽ	��'
-k��y9w[��\מ;�`}�gem�5h�d�G���Z6Ǎm�
7'�9nqP"�hv�:�r�o��w��<)5K��
��2�u_�
���6sDz�c�����%������
K�W޹۬3�iH����&;(,Y���f��>�q��6M�A2���`3�X��^g�M;ZKc���X�g��i F�43F)kOcy����~N��y��u/OlX��}�)�_v��R�V�ک�{�r�
-+eQ~Ь�+�pC�測9�I[�̬f�2_jg`��O{��8�ȳE��6ƺw;�+��vc�rM׏���aV�bC�׏��*nZ�"�?��r�z,��֪2����=�t��,����Mg�	�;
-3͜�`B����[�X���A���v2��Ƣ�f��tڠ���ڝ�ŔۘT���M����u!wk��I�krý���,R����!5�!���M����sJʓ�,Or�H�T���$.�I�h�x+߬]�e���3&�Jz�:��6��
��B
:CP���ä�̃�O���
���]:PF���z����sW��lSy^�e؞ϔ�r����c��^
���� ������B��XX��b܆"Qҋ�\�"Q�W���9UR"9q��M�R[S��M=#]��r��*0���O��g�־�h��(�"��9Z�kA�5UI�:����99ۛ:2��V��iI�57��Rv!��H�N���L��m�?��_S�C�
�#w
�w
>�?(w
U<��/�
]>�f�?��i��
�|��)��_$=��1�:X`j�������V2��-FGH�J>&C�#)-����e$��"���wI"��8B��U��o��a�׊Ě;�t�kv��t�g����v�r�UK�-�%�	�Z�	X�Ǫn{Qm��h�ݡu�9�y#>��T��Q�X�V�M�g�'����%-n�C��\(��I�B�J���)1|�^x�����6����pR���7&�c;�t��K��
=�A��u��aW7鱶oҙ����Q�	fҙ��Mg>��Uw�M��Z�\�F [...]
-�2
��6=.��T�;�Г�y����A�^��n�G:�]H:�c�tj��Jz�״b ӵ��B?������RB�ԧ��P�����4�~w�z��������������n��A�z�ǣ

ˉ����c4��
5��
-���)$�%�ې����x���Mv�"ʰ^%(�4��7���V
-ߛL����qJm
M�K������zj�{Hs�Y������D��>ko^�b'�gWVf���[O�\!5'���ne�\je*��H�{��WT��4�*Q��="ޗK|?�/x�z��F������Ok��S��1
���*�p�*v��F%$�Z���s�N�����FU�"�I�T���#�7�����x��+���g������A.gȓ$X�MlN
L�i�����?
�NOY��z���'o�5^�����^MIF;`[B;Py�*
r��-��rWAۯ��-lR�"����
AK)QqMu���r�|eō�#N;���y���-�?T�J�_��\�#�UO�x�p
-�~
-qn� عaXSUXL
���3ɠW�
�R�[�J���DG�q�EH�	HJ�8�+���ߜ�Q�J���� )	�:Us7�~�r;M[jQW���L��"��+'
(
�ϗ�i
sJ'�a��.���ҍ\��v�'���}��^>0��|�7z������(
KZB�j ��&����0g��1<�BQ{B3�����3!؝����[���uʂr^�n���73[i%�!��
y�����^�7'q�Z���~d��g�{R���IR���ޜ1ߘ_�~��^Hp����?p�/`x�:��)x(zpd�����Z���8M-b\ �hx,a�H�p4�8F# ǩ<��n��Z�R��W#%�Â���^uY���7�$���
aF)�aj�"�+�s�+���vYސ'�|�l���r�!�" �(ojԡc9Hq���鸔u�
�3.t�,c�� �m� ߩY��
�
����<�S����~��Q��
-�֎�s�i�T9Y��:,w}���t㳒�m��\�g!�DF�]��ލ�
y�O<�-C(_�} �)! �
-��������X�9@�.. �� o
����Ӏ(־O��w��%�yDvCB��o�2cӞ̇)_����
;��r$dޗ;
"���:J9e&���]\+D�Kᅼ�O��B��o�%�oą�0 �$M0�T� ��t,O�9�Hu0���c���y6��
H~8���A|�� I�Z����V
�ݴ]�A�Y�d��uBI<��x����ľ�#�(m �2J��S�7X�� [���F$y��[~�E@�
P"�T��N���^Pf
K�(� %�@)�"�T*~��_�B�2 _�
 ���L���� T�I�X��RY�\i$Y�ζ(\\S���y?7�:��g�����q
�v|�<��OPO\4k��ֺ�ݰ�jj�)���� �v�ÂvN.�Ӄ՗�f\в�4��o��]�WѾj
�����_���)z
Ud�"D.�-
P2��:NC�tB�Ք�?P9wa�<�g����Έ7u3�����V��u�
�3�%{�e��V�b٧�s���K;�,H�?�r
���ў/h�� Ӕh�w|���和r�T4\�B
���� 67����B\�!���#�Hnb
�q����*�]l��
�>���
p����`�8��\��W
;��SC�9�pƕ�8)��� ��6|�#��Z�DZ&��l��>Y�Mt2��K�a�R�j��ONPro���۟�������+d	��u ����D���
�˪	�Fv�"�B����
-�
���$FD��p�
�f����2~�:�
�~7�x�H�?%%�$�	EN r����0��V�Cpzz��@����"��X�e?���4aI �CH��HZ�$�c%�~������&��K��C�U�;O��[�o��ך�kH���y������*����V!_j��~.Jx)�mvc	�@��#��R
-P�h
(��
(�I����'�Y�fd]��0�!
����=��/O�u���w�[���W�n�
o��wj�7/hS�t����z�{�rf��m�@W�1�Y2����Q ڹ��_d�d#��W�7�\�������Q*�k��^o�~	�ώ?&���
O�X
�jvz������E�t�����z�q�pڤN��z,�>���K/�KlZ�z%�.vE�Z��DX0�6?��D��~2��_�v�
��z�{��zUg���o���s��<��#��g���oa�:l�uƟ��ܽ�/=��^b�r�+F��bg�

���c�ќ��vo&
{�iW�l'A�}�A'�@�Ǚ�P
�r���B���l��j�C{ǖ{J���n��c{�Q�ў���MP<7יS�������SG�%6Xl.T;��X��Ag-*w�v9)�M�=Iݘh
ved�y
-�h�f�Q��C/��/�ձ��r��3�c�W�U�o�
])��m��w���:��ipz������m.	ONfd�r���`f
>�?5�Wy<��(�]���/�G�Po
�9�
��O���Q�XyM{��趄�+]
�NW�
~Ў��\ڃ���N���5ΪX3Z������Wz��!=��k�s�$�z���Ϳ��5W����6�BHbV�<��g�_GDׯ��]�\w�R騷
�����^�V�sI7g�K�	{'��9�x���[_���z�~�k�ڻ_s|R=�)�ZW����ݻ+�s��5�q/VѠR�<�o���.�p{V�������y
I����W��c;�T�M
�F
lU��ɝ��\���2:ט�!�
���_�Y�nK
	Wz�L�kD|E�`ry��ԲcF)��\��y�m2nѢ�V>���?o�u��;%��;d@��npi�n:zٻ�/%␯0�_�9�ɝ[c�Iʫ�̬��m�-�I������ؚ�J&����}Z�V�h���4��򭀝���nX�$�a��6p�U��j3A��K5Ͽ�˟"EK��V���9
��`[G��Ie��,;���lp�a�����T�p�L�m)H��D�h��t;�⻘C�R�veɲ���䏽\%�~+_��<�ڎ�Vf;�����f�]�k��9
E��Azd
�~��.��c�Bg�S_���l�qմ�
ƝE�ѩs{��4��i�]��O:H;��/�o����m��Z	 ��j���[.o��8��M��`D�췒5p$��AÍU0��R�5M�^��j�v��[�
�Fi���ӎ�[��{p0�}�j�!�J���r���AZ��vU��T��M�:���RK���Z�\|,~�k�����,9���~Ӵd�d�9�3M�A�@��žд�xiG|�i��ƺK+FIS�LgS�a�N��r)�|U�8�5�zn��x?�2X��i2����V���JR��U
�T
q�P
��T
Y���C��r��a`,��FYUz�n�@�����c��Qe1��=�؜!Ԡ����j�r�
�b�$��Y���5!1Z�N	�����.�T�*�J���A�_R
nU���+�[�D6��F��Ûd�WH�ì(z�������N;�����\���Owj��b^ʎ����W��H
kt��
z��97��� �5��x���9T���G�Fͷ�$�Ű,H~#%��ǧ.-��� q�H��1%Y3ؒ�)�K�n�Ω?6�'�"�,P�v���W�v�g}�˝Z�
wj�1�Ա�X��ص������V�,��lT�UFoV�X�rP^��KI�kwy�yrK=�I7����	�<
�%d�Cⲣ"
ȴ��P6
E��A��o�6_-��s�����l����l{;bY��X�C�t����1�Gb	��>������J���Ry)��
YI�E��T��(��s�f -�_G��zǓXx�c��."��݅�bċ�ٛ��'��J�;S�k��'�����,�[%�aΚL?n[� [...]
-7�C�Y*��nb��y�+�Q:�;�)�Ҍ��Ԧ��3���0K�����B��=򇅼�k<��5{��%�‰{��^���e��
1�fe�R�b�h"ү�)E��H��pf��6�=*�	V
27��{��9�X��QlW=�X1"���ib�[WJ0V�Y�ԫdu��O�nDM�?�bB)8�!�B�\2w���}��[���z�/Y�
n��i~`R��D���+�Q'��?������@�,�erq�eH{z�{1��6�f
�l>���Q���3�
mq�
S�;w
g��r�N��m1���z�jR�R$$�g�P`�ፋo�'���w�
Sw�53@

��K:3�o���S��
I{#�$�.<cb���D	F�<�W�]����l��ǘb������&+���	\�E}��ǝE�uz���\E��QLb���_HS�k�r�!(�ˊL
�vO���۷'�Ή	n�
c��5m�e1Ќ��В��Ď(��=AA���w
��g�&�
�-����o�6&��u��t��<� [...]
-3�jx�p��62/�u�V�����w�Yh�(�"�ݶ�����j����;�-V
�X#C�R��h[
1�<T~pY�h�W�g_��k��Y��a���4s��i�Ӈ�g�
��\�=l�ͷ:���dT;Հ�:du^F�E\�f;�
[������HO�ӎ��u|�9GbAP��
g��9��/V��ڡ����*��y ���<@�|��_�H���kN��b|)���)x/��t� P`�� ?e� �
�������|/���A���g���S��L
-'��c�}�#��D���Ï4nv�RX��ī�C\�|�Wn�A
���o�<Ҧ�N?��3||�iC!h7�
���]Y =��7�� jW�����P��t�9 t�r�
s�w����o%�ty>y�b��c_��hF��̰U�ғ�p���͞$��?��
-k�s\c��BU�_��El��b��i�
-�\���b�X*
-�ܗ
��7�$�� Xͽ�.į;��B �L����by�y�ZM��kKMw'�����7Q���"|2�R����
�偠��;O�M|V^�5��$��
��6=��<�Z9�3��r},�X*
��s
-�R�e�8-,cY? θ,�މ�1�k��p�%$��t3Dq��
��S���"nS#�?[���e�/:{���|%�9�Q=`R;�G���ø��f��8��	����
�#�;/	_� ���T,g྘��W��b��~%_ �z�k� >�� _�!�T����m
�bEKafV�ż�{�0�>��x�D� ��� �~�yo�cһwF�P��S��K�=���# ��

 B�C at T� z+
�
���������s���v_һ�} 1"�X
. Z� ʥ�n
Vf���|Y�(ʔ�
]�
���qa.��\�O\`�;&ן_⽼��~�
-�2}�n�}��R���{�	H�� ��€�B �"�IU�f��*�Ro�� 9˝b	 @��* ��: ����d�f2s���J
-�ó��[�[S�
7���]�,�� �G�7� F�˼��M V��
�r�����eH� ��Q@��=��%��/O^")@=�|,3P/�Km���(��jC��; ��խS��K���;�佢�=�Y�U������4�OJ8~:��SfK
- Z��OQ�� ���  �H at 3K��7�T@��
�o^
0dTL�҉�0L���2
�S�oz��� ���Asw@�|�#.P�[�Wf�,�_��_Qgޣ�H�7��uSM�D2�=9�2����u����7����;��b� 
XL* ��� �?w~�q�d
8 i`�}��
X?� �� v���ٴ ��J

�����g_4m�69҈�$1
�z��fz����<����e�ua)���q�&��7���ͻ�
��W�
�wBJ@��w L
���k� �
G ~�؀�ǀ�5Ry���*�.�懰�4�iGFG��@���$��<9	�HJI�H �_
pK�F8$��~o�b)8��O�����ؚ@jf@*>��W2!�hC�7�x<o�x��y^7���,�{3�`�G�^?���SW�w��:����E8|������?�ۿ�W�#e������&@��ke�#��m�-O5;�M݁�/i���~�9��X�׮"�M��}{[�z�����m���w���黉��/���n#j�$�!�JHܶ�u��Ѷx=ݬ@@Wh
�������B�6�R�!��ܲ�zEy�==�Dkf���Z{T�H��5�e��Lf+�܉�����~إ����l�v~���U��Uw�p3`��z,2�j���<��%6Ʉ
�(a
�)�:-�g~=�'�?h2
+���]mw�	�>"�XW��Ы:�o�iY'�
��Ϳ
vZ���>���md=�9t�����<S^�`�ܔ��+o$��x_��1k�#sz�M��*��}�
���h������C=��uiS���1)����}2�z�<��l'?t����xڤv����;�[���
܅
�����
g-r<����7I]��x�:�Q4�N��ۼ
��o2���m��:
�w��g�U�W�z��mI�s��+
�%�ۃ�`�6����v��2�EL�Z_7�nm�9��Y��6�4M0�$�U�Q�
�<
��:�Q��⠄��? ��w�0Nׯc�t�j�֠uکW�k���5��^�B�m�+���C�
���Bu��5W���k�������o:PbYM�O��U�9��y3yD>1��O*��{��Q��U+
T��̻|jβ�kӂ�a,׸��d}]:0urj��U�1�^=6���'�c�~��-
*�ҋ�W��Sfʨ<���R�\^Jf|gnA(Z��)��۲�I6�Z��(���!�$f�w,�Nq]\��%���
�
�o
WzX�J7eci�c�m+jx;����ϓ�~X�VOP��;R�wo��U��p�P�β�$-퐷�m�Z����O���g��w��j�Iڒѳcɸ�[r|+N$y�?a��LXm�Xw��5,�}�'[�7
��
�9g]�?-;������ŢLlW��c�[��)e����������2�K�0w�����N�l�:sY��hf��������G�Y�{�X��d��ng�g����j�w"qw?��3s5NPrR^\���m X�P`,���n��s,h�X�l��Xƥ� ~�n��9.ﺦI��Lt�}�
�Z��X�I{m�v��
vh��c� �#��M�L��N�)����q�Q�z1���u�H;���[���i�Gɒ���:�
�e�
�h(3sOQ�b?X�k��_�H���n�K!m��՜Q��Nj7�Sn��ϰ��ˮ^ϝF� ���dwZ����۶��j��dT�u2Jp
-ʠ�\)��
)����
:�L	��Ur,��a�)
*�ܽ`	��.��%����4�J��[�M]�q|
����t����Z�VyM�2�z[ۺ�-U2�F5-%؏�ʠ����yے���P6eq)E��Y��N�J�9	O��M���M����r������0U��]��,EǺ�Bݜ,�\:n ��>�e�4�޹��R51:+�6�(�JxS
&
-��c�`y�0q�-J�uLV��R��࠮��`l���sD�
Մ�T�	�\m!P�����w
g�g�B�g)*^���gҌ�_���thzke_bKI�@�JU�;�־�����M�����
28��
w�U6�i'��
g�Ii7
ͧ�
;�dVa�m���'
��7"Ϣ�w\�y�^�\N��=�?���m��V60��]:�vUZ���۝�c��J�5��k�4��&T'��{���>�썿H���(6�V�B�Z(א�P��N�F�������������ə�/�7N(��E������Lg��U��
2�0��]��M�C3�G���s��&�j��hP滱��O����a��֮Xʞ�dl�-���W�e�#O����
oga[vv��+�-\�֎e7\q��X��e~Ͷ
�-s��{��˞���������۽��I�?�@M�y��V&
-Ґ69�d~x����b�
�0o����p(AC�يz)�
Sq�5�tI=`�h�zK�]�.l7�xm��lj�53K��v�3V9��/SF�|f��A=�E�t��XS���&oڧ��AA���\@
��
��_Q��6AL&M|�Cf8}�_�^��@0�&RXMJ�1nw]a���b5���5�S0?ױn0z�������m(��&0�֑k��k��m/�~��Я�kDg�툚���
����Ɲ��ks�7W�*?�Et��������W�
�����
�
V��*�c�1�
�m����4TR#���
��� �xQ�7��0�j�ڹ�&�[��K��5A��M����)?�GWtBE�vH�X�Oڦ�#�;�#�:9ķ�h�W2�gHi�
v�VskW��=��=��0���-���4�6}��J�� �e�=҅��zl|�0���QGp?RB8������
�j��V�J��]�%0��k�Ɓ	�y|V�a!=���gB�v@b��%�s���3�[�m�C��S�W#m>�-�B�TZv�ȭ�#ȭɳH7�L!jt.��\��7YA�����[{2i��!��;�!�й���O�JѺA˳�%�~�4��n��32\љ�2�r����(���B-�`�±�����ֹc|�0�
�
��m�D�#
|�<�v"ب�(��22d6�
���E�9�f�@�U )*˱aO,��̙���)�w��	�r|0C�ې����	�Ǎ꒚u�9�նcbݪ
����3 [...]
-��>��y�~�da��aC�
^�w�`Z�K	�IV�™J5�D0{�����w���I�>L��8�3=����h�z��
#:
͠�śBYe0���(6���*H�XZh,� P1g4��4S�T�
�\��U�2�	@Y�
PR2��gu�9�c�HuQb�N\���z�٧�"� ��0�ݽ=��4@/͸L�$G���c�#
��1eg3�����U,�
�
��o�� =IR,�/^�����!�ytCſ�&� t:Z t6�ڋ�:{��Q�ݲ(#��
-Uv%fof(gz����u��I|�.�}i1�N����S#T)Jq�32�qL����
�� �o+���
�*9?�N� �e�OpcnS�0�� ����Y0�$��� ���&}��;�P���>邸Y��a�4e�4X���S�4y���_Gwo:G�sm�����,��}��
, 6%�
\3{�}*'���{,����Rcc�� .����{ W�-�U88�� �t�l
G
��`��=0ʐ�W����u���.T�q?[��Ź	��$�Z���]¡T[@3-5�MN�
��s���yI�p{�����B at p8��G��Ʋq!h#@�� �
�7 ~�t�ߜ�X� ��v��-
g�����G?(�Jݞ4T5�$�=��S�cRY��2�q�,����R����������<zDU	 1�~���o�LJ���4�X.��R5��d� Y�$�c�D��oV���w at l53{�$|��ԊK��	zK�7�:�w���/	�F�l�
O0���*���Ȏ?P���z�k\O�H��di�%���ƋN
-o�r.�BP�R9��Lj��(�HJ��b�P���������k&c��'�Dg�|S�����z�N�yN�w8[k� у�JJ�rk���ą@������'�4��hKKz���v+�� ��O�@��>�#@{�˥
��x	�b
��� �./$r�H	��,����i˩cĞ�ğ>�v��J�o:\^HwR�@@����_��8����S���93 ����l���
X�����~.�� vؠ ��3�-z-���`�
	X���gE,3�
��$ܛ,��$v-
	�%
-y�,�g?%%%<�[�$yroW�4`�(
�c����+���f{�O����8 ����)
���	S|y;|���e%��T��
~�kA862�]�q�k�6(������tz�'���&���o�o��7���M��w��/�4o_�k�
�4L�b�@�6��BH ?q���Xs����!
Ѕ�/�
�I�����@�V����}�X���m��������$�!��� �ܐ��&��/��kvM`i+�Jx*|ݶ���n
������@��5 �� �����?�
�����V�|~��;�+���!9�&)$��q
_j����|��
-MHƤ%n�o���v��ތ��>Z���ҟ@7�,Е^h�0�<�6
�?h�t|�	�%��}��3��4��	Y����ܝk()L\���q�;���u`�d~��Bg'-�ŭ���7f\]��z}���t�K�%6v&^	�W

��ur
�Z
BOo�nn���$
-6a�����
�KB���5!��Χ���_��q-��}�}�W���v-?n�8r]���}�i�W�Я�
C��ю�߹Y-* ���OMճ�M�Q
�]_g��9�e���I�!��ǃ���]��~�ޱ�2{�
Yu��s��ІW�
whR�?���f at f�K��i
f6���rb�Z�М�*sg�e.��@8�ƙǤ;ʅ���3ۓdZV{1(��UW,o�̮��
��ǟ��nK�>;�N#��o���
-���2�B�9sN�&��?���Y�U��z=>O���&�������L�_Z
k�$شϬ�W�߯?���
�خ_s�NW���@���f`6���j�,�Є����
-x��m�f}]��u�H
�ڮ��k���V�J����u�Jo��t��lE��^9XV�$f�4v�\��~�D�)^Ɍ���5&84q5��EuX/���w+������|�1��Z���wn�+>^�
���o\9�b�_-���(�
2W�6L�8+gjE�P���+`�ꔔ&���A���n��m&
�������=��exqed��_��/Mܡђ+g�K�˰�eV�����'��t���!/ϛ�뀧��'
�P�npx���O�K��f�k��9
��Ay�����1J�ṱ3C_�����0��:�ݓ�]?hBk˃L�.x�J�)���<�,��?��V+=HDz���V���n3���Zj/�!�QvPP'Y��,�pk��q�v0M������`�#��W�L{���ƂQ�X�QJϷ��n>vS������H�ON`wil9�<rbX��6f�k6M
-�2�*�}���T,:KA�e���繙v����n˂���+FI��
��l�v#�O�j�b"m��-s�
H����
�������Ro�TG�V_�/
�}XU���m
7�$�t9��I����Bƕ�m�#�FIE�]�|M1���KB��O���gy<�
�
PQ��EM�:T�NJ��~F��yU��%�o]eP}���Gr�g��5<˦��Hѣ�K�bK�1
HV�y���+/Y�r��{
:�[�H1?�	(6���K?���֪����mU��6J�=
�A���!��C1X�
��ㆆʦh�RtuXi�qE�R[����
��������G�
-�is.�rד@!9���w��2�
�V:~�}�K�N��l1T�wmI��
-�
��==����z'�XJ�
2�,�2�2��})z��F���>�$:)�"b���c3J�	(#�n�&y7?�y=��q
L�^�J�@�ڬ����V-^���
ce��fnW=��1��ven����
-V)"�Dz��@���*���j��棻<�G)�Էb���27���L~���w-z³=�E��RYq����"{�AY���V�|ge�
2��f��3�h"*��U7b���A�҆殨�=�����x�+P㉲���2I��q��4�
N
�ؼ���
�R����V|u5�s�Yz�^�Ѐm;�!+oV��#�N��L�_�ҟ�A�\ЃqMZ�=m��
-�5^�
�i�$��􃒳��$���Ʋ�c�	ϻ�������;��n<�N��'?�1���������K���/�Ҏ��N
'v�VBCFo�����
ֶ{t��������v���bk��/s�9g@����s��L\U�z���oU�CW��E�s�:-3i�������*Υ�|VJ
�e
��q�N�e��
�^H2!��@�v�X'�y�%�6|�
��z����89~�;`o���۾;Ȍ�6��������[�
�F
/�r�j�̝ИL�� �==�IG�q"5= K�L!�J�;�NN�
-�L<�\I�EJ��=1_6ωLn������||�.Z���@�����	��4��Ɖ:}��ڸ��:�X��O�6��f�+f�c�R2��<���
9���Fpۥ��JG���
xR��X2�QX�,m��ܜ�L��Ǐ�.d��W
-��W���c�r.����bHI�䐒X�J�Y
-3��'�z�
b��r��x
c�e%�8ݟ�����2�j�ϗe��s�/�
5{�{b�%λt��'S�J
ONs
-�0�m��1���`�u�����4�`� E�D�DJ��BɰC(&��
��f �bT2vS�J��:�X�dѻ�֣,u
��V��x���@��n?֪4��|���"�r�^p
k�{ȑ{I�<�I>-�
���&��D�ۢ��s	���*(r��P��ְc�8L�a�e�L��nu

-̌x�5G/��X�Cl
-Ы
-f7��_C��M�bm0��u(V���XE�X�	:�V����g��j8A)5����P�g�:����;�5q&��d*������%p�?����[#8�Ca'�Q�6��s
��a�Q�
�
='A�Yׄ��ց�W���V����1�����z�b�Ÿ�
��!=#�X{��Ku�;&*��1(.���/��}�i��w�R�k&�y%"a�{<�m�����a�B��FW*(�Ӏ���X����.b��$4((��Cuey� 8��yt 8���+�@� ����@�&s�Z��Q�m�l�ݘ^@��%W{�f�k���;�M���%
�B�O�-
/�K
���vQ�Y
rX�U��(�wx
��$ �d��e ���
�D%
-��R�`��b�?�:�9ptЀ���
�'L���w��/��l���W
�n)��tKC%
;:`f��g#&���T"��6q4�ŐMm O]��*h�E��(�����V�瀂�xq�+ �hR�XR�z_��G	BJ�>���D�'�yB�p��zB�/��;8*�V��{p
�k�{���5>;g[�L�BUN)̙G��0���
�!7RYP8\W�X4 �
��!���f0�,�0(`<�*o!��
d��MB�ߩ9�!�����r1 �A� D�o!���!d5l׶FJ�
�P'�%��|�LȆ��
!��,vq
Iш��(�b�I��� ��t�Q��� �.
ţ�g��
'
{(.���Ѹ�܀�k B�K�)i
ř�	�o	(�zC(>�x(�Q_�d�ڵϙRz����?b�uا�E[M�.���
�\�'#
�v��ؽva�B���Qu@�1�6
'�h<$(�,hP�4=|�
��=(�& �8��e�	n��D���aһX��Ġ3���
%
-�pQ����w1�ӣ�^C�hG/
q�jS!vߗ���x�f��:�
-
@J�+�~$���%,� %�
%yJ�&O(y0�@�ٯm��Jn8��
%��JN�
��hs(Y�5(��P2vB��{J㱰��#�FJ�c2���8^y~ͼ;���YJ$c�W���5T�^~��T�.ED��
�
6�U��](���@J�5J����e(Ŵ�P
--
�TJB�rgS\���/
�(�G&J���*,�Kb~��x��	�9\
�p�Pah�%O��/
�Kp{a���2�D�
�
e(}
-e��ʬ�"�>/P�I"P�X
-)/��H(��5��
�����
-��d�d��W��I��:e�v�o��Є��>|�@zG��!�B���^�!l�
_�
�.���'���wx˺}(��,���$���\k~�r��ʕ�<�}%�PֽpPVb=(�^T�츍.�u.�X���˅��w��$��
��Ч�w��n~G�a������8|Y�!LL�E�+��۶m+PAXP��Pa�KC�.׆
-��7ʟd��V](�W�|��(��~���ܖR,&8ï+r�M�ɓ����(�?K8|P|
oߡ��O{'��E���D<\�V�A�v6
���&Tz!+���IPiU	s�R#(A������B��:�r*���o0v3������a��[�#�~#����»������f��»!H�*���˺��r�����΢���!�^�%T5P
����5.	U�~�hI���N��ks�|W�@�W1\!$�s͏�}��|�?ݶm��r�ok6�A���J�H�h�e��;�
W<�gl�����v��
56B
jTm�~�7P]��������-�Q���0q�Y0bӝdjuʤ��3�t5�	'����$�J
�|������j;���	��$�
�.�d��_�ޘ�kH�V��婌k`9�T���rP�-�lj�����f�<V+1��_�G,�C%�S��N���������[�eSKK�ݕ�)K��v
ּ"�46
���8��:
���ӈ�.�8�:�����:��������6�/xy
�\�!��k�^�
�~�k�{��n�"��|�
�E�Ϝm��Z����+�E�Ϟm��Zy?��B.m
_����S�80��X�;�&�^�����8����{3wˁiE���d�W�7�x%
Ĕ�@p�5~�%?\��g��<�M�}*e�ݔ��3�J_j���™QC���L.�D~�=y��
77
��SCSo�6�M�L���\$��t[ �*��S0
�SpN1=�1ݲ��vw

�,
�<:
-�!�
B�	y��5E(#�z���zmk���۵iE�!����d�GNr�YO�2�47�Φj�ѹ�ǯ�^�����!w�
5�����i^rg�
-��
-
-��[���uy�M#L
V
rF��D�\��[,��v��י���F�l�5���V<>�Q9%���x\3�R*y��{��@���Z��Z��۝uK`.�Scp���b؞i܈����9ϣ��*ϖ��x�ߟ��-s����
Ρ7s��˫*�A�	��;����$=l�M���ۻ���ڤ f�&
���&�|!�ܞS�}���:�1F������,b�~i;�1�C��|(Y„��5e�N=#<��U��7p�
|s9��}>��{lr���X��bW�~�)��]�x�4�Ǐ�w
�`(9=x�TܘV�1�9�]e�Bz
l����*�&��9��V�*뛓P�k¥ֽ���n��M{m�O�٬��K��j�8a�i���	fe�قR�/��J%$/��݆�aM��r	����S*8�w����u*�v��s=R
-O�ˇEH��YQ����ir~@�ͅy�xpRb{��
\��� ���
�T�6��z^���G��=—�+��O\
p���==~�����
�����
���{>���V�x9'�y�����
������n�B���Q����z${)Qӗ)�\��]�K�8��g��E�\)��X�c3l�0��
� ߶��}�_�Č �
����$�'0A��l��z,�����A�p�?,��'�W���9�?\��U�O`F�?\�O
���T����A�p�C�?�g�Å����7������¿1����ת�C~F�?\�9��}��#��W�?[�����eKC�� Њ��]`*+0�?Z!����J���
T_Xԯ ��%�����0Ɖ��EH�Uh����G��%��mG:�7r�����&�GsuZ�u�Qq�_�G��_ �S�nR���8�zN��9��f��)�k�S0�b�_‡�('�����]m;3��^F؃o�cD*�j�L
dq�~Iq�K
���I`�)��}h}������R
ڶKr�@�������7�
fg���'�_�\g�^
�L�{y�.=������\�i�+���C��j�ݩΝ�ܧ� v�=A�m�=�ou���K�S���u��k47�>��˱g�)�=),�4(�ЃXg}}�n��c{o >�,�7Z:�
*���D�oۿ,'8:�ZV<Z=x�9�G
�8o����;TEh��K��-��ܷc
ޯ<�ꅿ����m���D�S�R�����A>��GE�uNR;w8I�j��)�(����nDQY�=M)~��¾2C�B�{��	~��
-�e����s�3���#i��=��Z�o��~8����	�}�;��!��+z�p�(�����4D�a}!KW���,`k�۲�����E�b�#��.ql̴͹�V�I�ێ��c�Pm���8N�Nm�
ld�qf�
-�k0R�!칾ǣH�źٺ�kv	�y���I�@M�q�\���ku	w��I��
�G�uL�
�0/,*&��d����d��ř����s����f�n;���Ē�Ҕ�αE�$��Fڔ^	
�z��%�
�3�q�7	m��d+�+K�,'����Sk�J�%�b�/�Knn��L=3}-����Z%�K"�4'lpv��$�0����?$��{��Wݒj}��>hD�&2W�-|<�6֘wdJ�
v[�ra��dODž#`
�"��^�
~^�p�-2s�i�Q�~B"ȿ?oZu�f�`S��~�,���$��A��n��n��mP�m�k�q'���-)h5�m6ye�S�1x�[�(��$�1x�w�A$;���dGU�Q�CEa�Rf
��-����Dn�:��9"q�G�q�mq
-�h��H��+(7���8l�'�������WW��&O�N��^��6*�OZ��6���K��$�c�QnKd����epJ�S�����D9��A���f->���埞R�
�P�F]JF3��'�&u@�,L�1���[�uVd��l7�|�ů�,��
}��Dj���G�j�
-
-M��@���->��m�;-��ؽA�0w^(��=t/���s�����6������K晩/C�˓��&*j�*�
��
�Sf~R�Ǜ��_�k��$�|o�'��'0#�/�~B�,?�	L0��U�O`�9�-�OW������������¿1����¿1�,���g���~�Qߟ-��
�)�󧯖?�'������`����
��c�s����?��fBL�
f���,�1#�FN���������*��+o�7h�g�e�����#�#M ,�߇g�-sqp���(�s�	�L:J�x>e������ZG=1�N��
�q��ԑ������\��g+�{�����w�*@�_9 tT	A��!+���ڄ��v��c�Oi8��$������t������=z��/� 5;��o� ߶R>0;y��ys�����bF� 3#G �q�N�
��k�%!��SL›�0/U���w}�5��P���kٹ�Tb�����J����D�~�.� h�d.���4@��3Wr姓��6*ji
���L��s�3�rX��Y{�'��v��%�.�x�
�
!"����� TX�s� [...]
-�g��1$�lw�C?�m=�(Ó�=f�7� ��C�E���'����Ԙ�;�[ S2A�+��J �^r�H�, Py��J\X�F�ϓU�u�rlw����n�<��?(���jS�I䟟���2�	���ٹ;?vCP-�_�I zn��/��j7c�|�R�t6H��s%��n��s{χ�3���J����琙���{�:E�K�������`=����=hY�2˄�UIm�= �u�a�+8Ν�v����}{&o
�d
z�͞IOĊ�
7����7	����	q|a���%��w�w~k
�e�
07y�yo ��Ė_�"��8t�I�(P�k\�W�
/�\Y���
�c~ll07��N
2\�|��:��2�ɯ���R����
 ��@��L��mQ�j�-ǜ,ơ���浻]�۶�O^���
)m�ݓ
��"��Z
-��2vK�I.�[��F���6kC0KZT{s�qRF�ОiW��5��Y�y�Fz���4��~�|��o�&�ĺ��6x9-�a�1-^�����?<��bq�]����U����iS�P�&��7ѫ���@;9��q��Ɩ;�a;̫Q=�#�5�T1�ǃ(n�籀;{��n���mb��A�����t��o���GO-w_�����֣G
-d�����:wQ�K�f�-W�δ�ttjzZ(dv���p�m��.���:�
�����޼r�^�A�M�9�Kp��3��яhKL�
��P����i�*��� i�ޗer��
-�7�v����y��5����D�� ������Qe
-'1�n�
<O��d��gKݻh<�:G�r�_��mP��-{z�ɇy�~K�a��n.�0�(���.�ms�0j��h�V�_p,��>��=w
�v�Q���dQy��_�j��mf>�B3�f$H�?R���&}���c
j
��SK
-�.[ւ�Q�G�H�
���r���~�-C:���
ώ`
ݏe��G�:�����(#U�ȥb�D���n*��S�Ba��!��`@��.���6�Y���H�(�����/�&V?�F5���Չln�恡S)6J�1�M�
sE
7�<
���nSa�4�&S���e��Z�A���@����Ji|-:�Kx,������N/�yr��v�n�J
gƘ ࡶq�ElCn�چ,��M�`VxcT^a펻By�[��
�D!k�ZK��j=LVVk�̭WjZE���/��+l�j4����Y�L~Q&�c}�w�sP,Z����V
-P�Pˬtj�[�'��2KV���	.�/q�<�u�2/w��̅��̹��Ic���?
-��
-�A�����.��3�)���ɉ^J
w�D������zp�)��ȕgϖ;{�
A�W�~��]�"��,E�-J7�����#>Tnr�� �
�	L0��U�O`�9�~ʱ_�&���-�3��-��
�=~�9�-��u,����g
��
��G
�k��!?A��l���X~�T�O>E�=� �����#F>� ��9��*�f��o
=�u
]eN�
�%���Ws)��^D�Pmqx�
M�"��
B��x�s:�}��
���?PA)��F�I?k�m���ٯ�T�	�Tv�1�,)��D��zWI���ۥ
q������'Wa����䲆�c������D����P�Y�p�ж@���J������/�-�ݤ���
-���q�p��YR#�+�ɖL�sk�W$(,�Y�L{b��@CGBz�jU*j�
5y��m{��]������f��HB7a��oBj=��
��l�,>�
�Z��n�q������w�����@{3�����5�
1��L�8?��ڂ�˰�x�xy�d�.�3�_�w��-��]��j
��<Y���
���m�a_$"(�� 4����@�Q ʌ����{D��뿤�(Lm_b�_Bڄ~y���鱀�b�߹Z,^�v�
�/�Ͽ"�a�;H��~0~R����6�x�/�(�0Z�E4���^�䶲
sۨ`X��$�Y�	s�
�b+�i~�.qZ�>���65F���$���S����h)1~R�# E!��?w�U_I�Y1���"�<�v0�2�	��<��mٶ��ӫ]��Z-�~�]r�o/?)`&
>���a@��6�S�%.��R2�Su(�V��e�*�J��$/Iq�m%���&8̋»[zmw�s at K۲GM橀JfZx��������yTg4��Ӄ�m6!�0� zɿ�Z��QԦ8��NLRb��`
r�0��ă~4�Fk#��l [...]
�JɍF
粺=�w�P�y��˻ߒ4�{�ȳ�0�U�6>��
˝����;�"w�:\�H��<?�[/
`n/c�9�ˬ��Yҵ��JW�?�е�x��)�oY�wa�O�HM[Y�8Ҕ�5	=X#؉(��)(;���0����
���7�
��}��Z�֖��Z;���z���
'%ź?I��I��]�3lF�g���M�|,[�Ha��%	e��n��������_Oh�f`��6�'@{���iZ�M�a�2ɪ��@�O
-�f1��L�
[��s����N�5�X�|������bͱD��A3k�8d��uoA�?)פ
�z�s��w������;�>�X%��n�rgeA�
-6��z�{�>l�bb�AͲ�L��)~s*;ܝζ_�P�J����Z���u_�|F�c����^�*x�r����i���rf���5�v ��A����zג}n�]�%ޤt�.��1.�hl�)�E&��טƶ�"�>��v��{<�
D�_�C�R�~�H��c�[|��
�z�3�뱍�����9#U0���+�
�C��{&O����l���4�3�R}�E�/�*ao��g��� |z��mg��I�
�j4M��&Y91Î\�'��2&O
ܑg��JS���,���
��^��d5�a�H�An�A�X�
5Z�?+�D��
�

����Ecc�,_�NLbf���=�3��؉
*����h�d6�L�t<Fa��B�;/�&�a�lv^�k)Y��	�Wd��O������$����f��0��kdy��}���q�=�~{T�-��H��~��G�Fv��j����+�_���`9?��efmǸ�a�M"��v|B��q�
p��G7��j
�'	���Wx��ސZkՒ�����*�w��b��6�د��-���+9�fjjV�v�'���1�L��In���y ��I����f|9�C��ln
j��V�T�!M��3/��'y�-��]�1�˜���q"t��$��q�?����:R��m4�Z`�7J��а��v>I<��_�"A�2Y9\��-�	
-��	���k:�b�j,�#���#j� y�*j�U)����[�0w�R�
�,�ť%�p�$��YnO�]�
)0����	b�7������=�O`F�_����X~��`������� ��?X�_�3������X�\�ߘ�U�l�ߘ`��g
����������_�0�A�k��`8W�+"_��2]5r�>� t�<h�tU)[s�ؼ(ͳw��- \,�m��ҳ
]$ްm�',W�e,/���H�
�t��I�s�g�p��$�\� �
-�DU�J,��E��iD���m�j��\e{�;�C�l�}Q �/Z��
-�Rϰl)Z�
)U=Qbԇ����|ڿ��(�ߟ���̾�L�2��ٮC ��bz�	1��_����Mi�}W�Xז^�2�4A�r)j[Q��8dV�8\�w!�����r
#q�'�Va�gp4�lВ~E���1�ݚ��^|
Y���0^N���|�u[xrw]I\�l)6�mQ�
GD�+h��'hq��
�ۍ�L8�#N��O
- �/���
-��恟rUw5:��6��ص^*9l�Ib�3~�m��—��{���+*m��՝#L�Û��{����=�뮪4�mÈ��]"�?>1P��
��fZ_@����+V�����K��fL��K �
d^^?$��z\��ĸ}
��2=bW޼4|~��DY�-�wU��0w�ub:�e��W���V�
zl��P1���C�W�P�\)�E^anHò{���t;���z���M���)xW�M=�
�l�y=
�~C���P�
-��^��i �D�3�-�0���T��?��;�BT�
9��6a����>�Ğ\*�;�t�1�qӧEȽP�}{�F8j|B�\�;{�
4��a������-�8���NI7�*�R�kj��Q~Տ�8� ��+
L�LPS`zЋ{�8�\H��<�Sw`�� B�+���/�_A�C��䙎��(^���
-@'��
��	Q����ܗ>�
�]���/�-)z�J�����C�����׍�D�o۟�/����_0���Q�
JF~)Ot|����M�b�.��:��qhZL��	>�L`�ʁ�|�����L^���f�I�\��X��i��E�A��㯠D�nLmݝ���(Ԭ—8�Fp�Bz���Ҏҭ3�p��T�F�8�e�KO5띃�W���0	�9a���5��D)w�I���!f���=�~q�

��!���m`�{�E��{�"D������A�1�ݍ�'��Խ/I(��I:v�
l�6�mO�$��mǿ�WPl�������8��P�8ţ=����:�&Y��Ob�?}{��·mg�>���� ��"�_���V��;Oh'#i(+�/(���H�t��6`��A�
��Q���h[u�W�q�����%�`laO��^݊�����U����_�0��ͤR��L�/_�ni&��N�k�r��h���[��w󠔀 �� ���������e
�yNc�՞h�
���
-�:�i�)-���nJ��
-�%��Ƿ�kTz~��Z��+z�g��D~
��H'��I����IP�� �
 m��s����s��׎I�k�Ew��Գ%�J��r\ �1z\FTr��E�pp?�-�~��
-@�4��W�J)L�U���?.�X‡G�;�>�3C�A�l�˷��:�}���y��_���a������p��cڗ�K��~�j�������C�?Z$�D1�+eM���eN����X�yoH+��@�ܣZ-���A�
�_�/��>��#����K�NL{�5]���	��=�nPN�m��o���A�ƣ�w8�OO}��m����\��N�I\�z���_��4�W�n�{���9K�6���q�����M��j�����{d�
o������r->��r�~V���y
�6~��8���-�DQ�,W������'��un�l���L�Ӱ�r�7F�%��c+4x�h��Y���\�%��XK��J%
��$,V��u��r
��݆�pI
J��.��-z�?
6�=��k�3VU����P��I��f����O��
��ų[\f�zy�>A�Eat}�_V�8�V?�/�+Q���y�%������\�9��NQ}�cs���
L6S*�̩�
&��zL��y
���,c/0�q���f�����/� �]EN[
�C���t�	<�:��Xt��`YJ����
��ڮ)ƅ
-
��}kf���d#�Z���l�����F�fۉ�M;��8�s/e,_]s
G8s���q�tǧ�I�/�E�e3V�f��u�N��]l�r����
�
żҽo�� %k{B��^鎦�WaU����\T�96}��zZ/F�j
-
��
1��
5(.�m߆�\�
�J{ �\���(����E��ճ�C�S*���O�22ׂB��y�F�	
��c��Z����
-G`�ɼ�z1��k�y��k�n�sR�Q��V�������R��-�=uV�j+tn�(4�����%���o��8�A?�A~��aB򋠟@�����¿1������	��g
�/���¿1�u���������Z.�kO��}7���%R!(����(��z�iE�- �L`�S'�zvOʭ̝ZD������Q���U��җ���!ue����$�^̆	0/Q0�W�S�M�&�X/ǝ}��CuT8
zq��k+ik��yQ�h�Rk�`d���EYJc9;˾U��\��Z7y�lݥ���DxC�o� ߶?!�~�s5(
Ϡ��'}�N�c�e�I
ڦ�V:j�y�H!�F�%\-�@{�g�˿,��*�|_��0Y�+�r;�p�ֳ2ھ�v�?G��g%�
��
�$ �V
- =G���
-���l5M#
�:GV��w]� ?�x�V뙩�l��Y��Kf�ݳ�ޥ/R�	��z��>
 ơ���ș�=�Ï�_1W�7&s�b�{q�Y2u�) :�&�:�<�4���Z�;*�8���:a~��=z�;p�,���"�z�+A��]������
^O>��,��&�o;�Q��
�/��8���R�s�}`���9������[���V���{�
-�/��(��݋�ы$`p�\��a��M
��'?F].������[�f��D��`�|��4J]�ɓ�v�fz��X��hv��x����h#~ؽ�ʜ�p�
��h\
�]�Hs��s#%�z��Ή�N[�N�̽�P\�b��/��$�=�$�?I|��f����X�3�/DUo��E�����ΐ�G�� �
�a���&$�ɋ=�XwGx�����L�p�i!/*0{��޿	`L�•�<g(�l�~
-l�t/w+f&u���LjN9���A���'�@~f��c�
_T��+�=5L��w.�;��P�~J�I�N��)*���#�k�+�t�}�L}�,
�{�U23��H?� t���U���C2��c1��?�
�����f�خF�әy�?�����A�S3���c���+&�$��L����f����x�A��%@O\s����ܶ���j ��
,!�J���b|������~�G���aV{$ST� ���B,Դ�=� ���[ cf!:<���&B�L�vuL�
��� o.♾~�L/���u���C�)���v�$�5y]�-=|�Ҷ�S�h"e�!r��qsR����i��?.��4
?M� �GG�gJ
�z�Y�!�5M��5
-��������Iy����,
-I!;L ,9�>����\�l߽ Q<�V[nO��j�o�@�7�U�q�y�gz0�O��(	�lwnn���mZ��S�I+�hs����j�<w��R�&�gK��M4�ޯC��Ђ�9O���
c��3Ɣ6F
�#F���������`�C��\�?�ʿY��;�_�w�$��"U͜aMt�Vadi�T��ct�
���ư���>\�r��a�%��
�[?���v�����h[�莱�@X~Vx�]�g&(0y��r����88ӵ|Pϭ�y܏J���aT8�X���Ε>�񅠆��B���-����ڻu��I�X�_NJ0�W�{��q�U ڕ����L9Oݩ�y��o���Yޡ�(��j�u�G�p�,8�m�����Z���R'����|�Z�
�&�-�+%>٭�L\�9�\�g���%L�w/`l Й
-@��tP8��G���n2<�:���el�S f6�2Wͥ��]�Jm��-m��eR�>�'��~�Ķ�
��e9���j�葫���.gi�_������ s��Aq����G�䃘�
w�u�i�Y��
��8�<32Rw�3�j��*B��!v”���l���-�x�"���ެ��\�
�]�ӒA�?$A�� P� @�L2(=ԋ�e��X�Z��=���ö_m$hu��[b΂���JS��t��նa�%.rvY��I™����R����3��p,��#(^V �a�A����c�c=����b��X�O��TC%j߱r=�KĹ��	�3�66��M�4~]�~����b�J��Vˁ��Wj&جk�X��q�xaZ}��}�A&f�U���_�I��c��Fsj%C
Q�֦
[�p&�q�';�n�Qa������F��`5q*����˹|
,3#{�X��h����sL"�o� ߶?!�}x��
W��&��p�[�ٞi�����l��DŽ�\A�����L3
-�0�Y<�J���2�
�h���_�Pv^�X��;S�ځ�O��0�"�Ҵ���ը~V"ȷ�S�
�
�B��@M���<+��	�P�76;�
bp'��S6�]eG=mq�?s��X�Ʃ`Mw��e��Io�u'Qds�c0N
ï�}���`4��Q�J����\�A����I� �8�u��B��p��y`f�gb�ձ>�/KU3�_�k��.���cG:�
-��Y������"�
N��>X[]sP�Z��%Y9�q!w��E��D����G1�<c*�t��*I�z0�&����4=��eK�؋5��xf<2[���)�#���{�A����Ā��U��z�
����l׫���/BwkIݖ�R;A�n��D���"N�
_��2}�e�i%�X���qz\�X�5�<��$�����̨ޯ��f�q�n�U��n�M�:9�t��ټ=
�my�ZG�0޴�A�l#�`�Ҫ��%�O�� �"� ?]D��K���q�J1A�1)\N�Z��M6�C_�w�����G
���y>=hحy�0�|�J��I+>bg���.���l�.?������
�
-e����^�{����A?�A~�&���	��ˠ��� �����T��>�c�JX}-�N! ʎ�i��_cn�pA���i[����ak�ع���ɣ^h�'�L,
� �Q*Č�T�u-՞�oLW�+1?�~:(ל��[���C���6��
(ȧ�i�����6
s�}4)�c�r|���~���2UR���y�.���|���Auތg�R�������VD��V�{�B��M�Ɛ�=	�m�� ��W��9�N^ 4,��
|ꔋ����^��x�ȑ��>~�#��kzNZ�%�\

U�)���J�ݣJ���Zy�g��:ʵ�� �>L����|G_��I�W��7��ӄ5p�,��g �� WME�g;�j
9���4�utqW�b.y�6E����:r�R���\_��\E��9�U(����s|���xP!��
i
HBP��=�d��ώ	
-�~��
-��$f�k
�D0� �nS:J�d�8�[�f�U�:���T���<�(ukv��	����������#�s
�%�|oo��ֵ/��*�&_ at k������^=�Ǯ�͙� uT�I��C�Z��\Tw�>�q��0eT�#��Mr��+�����M�@�Ok�#k����\�!��, �̰�S����O/j �M�ζ�
�A04�ti���M��ZeuTj�_>��Ƌz'�g)p W���@HH�
w�n'�3�@��Wni� ��y���

NS���u�B`�3��������At,y�5��|i
-��G�b��f�.p[�U-O��Wn�6-��]�w�VG�6zq��
^ҿK�ێ� ����/1_AA��'(��y�RJ\JD�bp��@���M��f�3�z�2����p0]~�Z)J
��R
���/	�
�t[�H������螦?$_1���;0��4�~���o���н��d�
G!W�s��ҭ{�՜T�Po����͓�G�*��b�,�n��:z�[+udX�'s
-�;s2%w(��P
�^Ç�������;OӿM��Α
���GaYo�fs5���*��i���5�*ly��%{�X��z�eЂK
+nO��L��+��8��+�)��}B"ȷ���A�Q��iJP�<�������ь�/�,�?����>�QgF!=����T/�9
-��!I
Q1a��bl�.R�J�'������r*��r2�Ps"���y"�Ns?$��y~r�
A�]���
���$���'鉁TB��	U��ū��Jqq�Pl����q-"��nԯ7�vB�/�/������6>`��b���w	
-u��
T@5�y�hwr��n19��(���]bT;�
eh�ڳ���j����Y�1���%ӟ܎<���}=`�~��柖�QGC�ܛ%`���>+����J=O�B<���n�z,*����2g&���b���<�˄" �NLq��a�۶j���w��Z`z�Z8AG0�*�q�,
t�]0tWPE�o�IP��Aa�~6x�yv f�$=*�*�#{]_x��X+c��z�8����%���V�����v�S�`D�ޓY�,`^
��}�G���tMU]m�=�:��l AA��&z�;֜k���o������n(F��n���<	��̎�e���f���`ɉ�c�����Y�煿���G�
��V^�ǟwTTPY
/�����x�״���U��F}|s��f2X_��n��s���������#ۏK&���'���篞5�
�� W��

i��3�4�a��.,}���A�8����d�	�}tb�o���Y�Y��d��F�3��E��la�Y��[:3�,�sSU���q7�3�9��O���� &�PS'��t��k�*'iy�O�u��6�_��8��W�	�-����4����F>K_���o�k'%~����[d���M+:��I8۩�
S�?���
���`��:(��0���c]$G�e*O�\:�Өah�4d�ŢM4�+v��,��;^.d>���_�gJ��\X��[L���i�I���"�
2��r���`ѫ�=�0]�z�l�CbѼ��:��;�B��
-RW��tm#2X�~R�-;��`��;IzȽ��KR�9��C&�L��E�4�1�F��e#�9;]0����P) 
P�3K���֧�W�
����ֶ!�a�4Y�1R��~1ఈĒF�ݺ���wTehO��g�z}Ʈ������ZAiOV̢K�٣��
?lr0�̙���Q���I�
*��i�w:#��� l����uC�
-Cq��3�[���TI�X�
�l�ӻ��z�*[�C6�L����
���ev�n����.�vb
Qh�2<,������G�i�<
-*�Ͼ
-�a?(��pӃ���r�Q�7{]�'�F��r

F��
6�O#�7&�-k�x%��	�
�۪?B��e8��h��Z�`��b5���0�������}�?��(��y�߁�r����]h�2D!S	xh�8#����:6
�@�(LU�M^�N������� ��u�	:��G�~� ��P��~��dԯ{d�P��n%�G|�[��W݁���f��zq%�!w�rY��U��&�w��l�>��(��4rD�brX���
7GTո��˷=!�:�B���c�G��	Ś,�^��Wj$�Ll�hm{��u��`�S�
��F���p�
M����\^絹�ּ�s���GH�9��6IJh`H_�d����*�J�
�}<��]o��G��9�
F�^f4�t
0�w�%�v��+|!�ە�#�����]@C����
kS�ּv�M&�3���4ఇև�_�Y�λ�@�R��N�koT|>�&{Ov�����5ߙׯ��Y�6׾�����n�{�%�ߪ'�����r���
��g�ͭ
�t
%�A�ǞA�Hŏ�FÊ߽���_
ՙ�(U�]uV�%�૊��5�j��/�N�����]�:T,�:dC���5�"��>
fI]_��ӄ-�+�M8z�oE����ע?������K�k~J��Â�� �f�p �bUP:�������MśǢ
e*a/p��c�=Kgt�����@��Zyk����:�݃5���l��9]�'��_NfÍOt
>
�N��:�����
~ �&3O���@W���f
���
-b�?���q��f����O��X]��JB�B
�ȶ�ik�qo���=�Nٵq�,Y�T(�\��Ӿi���i�{`p��� .�Ѿ۟?�g�-< ����+l ���(��A�΋{�!�G��@��� S���-'�.^I���$�6�WwV.��O�
-4,h�e:šk��}�1�#��
F��C�c�D���
-X51 
��?5��:��+V˃cda5I�D{Q
-'���<}^���^�=,3[k
堣�?�Ή=�hܱ
oX�
.(���n'�?����������X8���dG�u�� (�|��G ���G�
�%��{~�<̲NFF����,W��`cg���r�D�h����,�C�X
Kgc��FE�DF��
�+�|�I�;=��ȑ
m� O?�_�)�h؇�Q�qE�5C(�b�1�K�prp������"X'�^d���?gAʗ�m���f>�'=j��(��wVT��L��f���6Փ�Z/��w�w�_��jڱ�X�֯/$&Z>�ܬ�/���|s'\�V���s
������ �L)<��2�B�~�e�����Nm�Q�|��,J�A�ț�_�B~��
 �
% ��?��
,�

Ew[��r
� ��^���W�%�']У���<�V�1�M����%��٨�5���D߳	ѡ���
�.�i800�iS�m�J#;�ei��� ���OF1�Ҡ�/È��V�

��I���g�=�����U�K��^Z�:i��B�ܼٙ�B��a�{J�?���m�c�H+��Y4��g���� Kˎ�~$��7x�?ŷ((WW�Y��g0�o��I���I�d4��D9��U���
;�[��
-�R39�|2.��a��?P*�������ˁ6�\i�V��Vz�U"7�*%��
�����
���ԟ��*����
-��PT-O�^~��&��hF�<g��N�F;�ꜷ���1���d,�F�Yk�e}�K�ڴ�
-�F�f�'�K�㰕����������)+�5Y�j�6��|rF4�L��.�A�����	�td�/��
�6��n_O�6=����FXS�Cw?��f)����Y"�Q
���ʘ�F�0b��ג�֢"A�
�^��(�k�xF���|8X�} +���
��F]��
Q����Ԙ>�UUr�jl�Sď������g��s��I
�r�e���8�ι�*�����7̮!
-���
������3(Z��|�����
`��0W���D'
S���*q����:���ڨ�RC_�E{�\����V���1�-���_D�i�ד���bO�k�'�B����"� *�\XsP���w鯠��5�z���=�������z5
��rI[K�G!��e��a��OZUX
�#2��bMT���b�d �� �u�kJ*NJ
-w{j��oe��B윤���(���B�
b]�
,f6���!ݐd<�]4��\�
�7|R�˻��Hx}y��z����6b����n����R�ْc�
I:0�u�eɺ��Z}����d�;�����P�ؙ?E�6�lʟ��CP!���A^�[��EБMz�U�fc|�:�bs����#�]5gRN:�]ן�
?o=g1E��W]����if=�ÜF�-���F��MHc��S���
`����

T�ey۪�rQ��q��
(
�|�������H�[R�p�K�L�8I/82=g��{���[O����\�9=�
}6���<�l����1�
-P
�r���P� ��[T�ϖ�G�]�Z
��p���9�;������Ϸ1&�(-ځ�.�i	��~�虩1�T��|:�3�8rSO��'������fL�9�O�h��������u��;����g�zT�R�j����O�ZБX
����
-��W�O�6�/�|9���}u���]v�R{sk�������i�a�����O�iI�ţ2�-��X������m~
-X�"�������2
n[���KO0bK�Q[n�'�������5ކ �h�кҋ۹�����|��*��rO��Ҥc�?�
9���1�Ҹ�V���~�h�}j�~!߇ �����F`��/�g� �K}�kV�
Bh8hnW�/� ��(rǍ"t��n�<�`O�
��W��`ƽF�i}ғV]����8&��hG5j��Rm�������yY_� _��`-S�}VXk���`m�6Z
��u��M%#
&��Ze�n�^r1�a�"s�cĝ��+ҖK����E�ă��y
��2�
N=��<�4�j~k�(T���^W�� ���t��[r��l�^�5E����/qTk&
׿����2�0��4̱������v��<�2�5��9w0�F�*݈*��{�/^d8BR��dCk���ѫ�
����wX�^�l��Ft$U�m���mh�}��Q���Z��` ���ch�ϱ��L���M��`�8���We�B	Z_P&�7�	�����w��n�Bt@�������A���#
=#"���9
����F�U6��dї
�k�>k��\@�ʴsC;tJZ�C;e�vI�)~X�W�`D�QuB<�C(/n����%Nr-8�Ǔb��OĮ7 �c��'��C�?�3
�w��+��„$�4� +1?���؟�sd��mr���	��_G��n��jq>M�6Q�x�L�
-N�F�0��{��w�Ѩߥ5��$1����Sb���Im�
m���˅_pxM�vI�s9S�U�`q�4��y
t��%Aө��
�$O	�͚��چ Ro
�����ҝ`¹��Kg^��4�������
�TK��l��^��N�4EJo5nG��Sl��p���
-�&+-��e0�O�v�9�d���,yS�2��z�i��5�İ3��&�xb��]ZBO���V�4ž�k�ұ!������R�NQ�(
o���k;���)@�lP��(
-�	��8] �"7�����[��<*��}k�
������°n8�������%_�O�Y�5���#t	�7��_^T�<m�=?IX��[�ͻ�A�
5�/|!�\�
?����_��@���[�h~!�עt�E^K��:���$pA1Y(��t\�����n�����%��^�k�����Lu/�h�7�Yk滷
-�c�{�
-$�/\��_w^u�6�*�� Ļ�`���]A�_���U蘅���9�����Б�@�rc at 1�Ow�yܗP4V�d9�I���<y)��aP
-��ϥP�
0�È��U<���>��i{^���a\�sì\
�9�Y�� 0-�u
��Y? (nP��{P3��W�>(��*(U�
(���ӵf�޸j���+V��w.�I�{���f���iΫ��p^9���f����]��#�s����گp�oZ�u>������ CY�|\���ٱ0��
(euPZtxPR���\ݾ�MⒻ�v��!�M�2�dz�'~e�b�:v��b]��c�v;tOs
��с�:�����fZO�r
��sh�Ls�9pǿ�������%��@�BPEMP���Oz����{S��;O�Cc��/E���0�)�;���re���'߆��u���O�;
�p�7}�v�
���t��f;K�/�aG%�� ���a:J
�s�}f��&@��°���M��]w�v%4..���Bf��C�w���r�gr�m����:�}q�T���l|;֎oo߹M��������隹�j? 
�ȇ��(
�(U�1@ӵ�'k�t^:�V�����q%��g���^�x�r��ҹ
���$��Ʀ��n
����|�D��zڥ��<SΎ"��6[��
�5���Ym��sP*��BQ���hv���@w�@�	P��R��ĉ����
w.�(
,܇��
M_�6%�?�h2�����$��1ЛW�y��ۃ��Zo�*:O�6�U�� jN`<�z��o�����'7
,(�G���~��LL&.XxB�Vpv����
��"$�t�������ݘ�B����s
t�"��HWN�S�
7���S���&K����6ٗ Pjs0��n	�x�܌�"���'�C {P��n��"@b�R��1>m]P͂}/�f���$'y�7�x��O���9���{N��#G�Ut�:*��z+K$�Y�ݚ��u������|@i ^�=�V -��O����gl��w�
0�c�.!7<%b�����X��e�g���YtR�]�r;do�1n�
�pķY���|=�۵��o��V$�>��d͖D=:�?���{
-�Ss��`(�ϛ ���賭�����d�ܞx�r���6�a��H�}�1њ���1*6e}�K��\bl(�?��q~+i~����-���,��\�VʭVco��B��(1*l2�I�yM��O����g��"��`{��
�d��|
��l�ܹpAw�ɫ
%Y�Yd��[���t�U��c!��5���Xq����h��
)ii����,W �?Ƨ��vP4�0��:���'(��
-��"�/P)����x��
��M?&ā3.�c��i}�b#�[/Fk���7qb!��U����Ax ��5�R��	�"�����Ks^�U���� ec�I�5������AeU9�^�����љ
��� N~�O
�ݘ�ΔLțVL��
���'m�uMM�dU�ͧ�Z��i�3Gau
������7���������)dƳI+�\��?����mT��q�N�9��y�O��ٶf۲�0:ݠ��.?o��e�%�}�ͯ�l�M�ejf�%� �5�`�+Vu�%׭KKN�h'ח
w�� J��yV�E�����r���aq3��
-�{�y�^��^����LK�S}_.�G�zE
��
���pY�j,5U��=���r� ]�gS�����1��1�݃\�	�dY�=�	@�\��U:�7�>D �
YPY*�G{�\'����z�t/U�b�����na�Q������k�%�eإ��-+�dŽ�&#�j�t�ˉ�򽸜�"?;�ʋ��]e��Z���Ɏ��
��|��&�nUX��Ϯ���s��j�Pot.�tyx�`��j
���㝻߾7�C.)n"�+�\�
a&�.?��Gl�xWۣ~57
�W�f�8W�<˭����O�ʋ��I��x� ����eP��I
U�
�3
f
�^A�,S��k��)
-���;,^��{V�E��G�����f^u���
-Z~�G��(5.�����
��Q"�
�+G��
=����V��Y�g? ,�������-?��O�8�
�s�p\���'qE4G����؅����E���l�O�l���2e���!��l�
Q�rn8��*�I��
-)��J�Q��ȃ�4�)��w�;�_��]���U�~�f�ٵ~g�������I�n�a,i���b��`��w]nx0�4�T��5�ִ�b]��F��n�o�1��+���T�����^�u��Oo�������S�}��`(��e��
��=X����9��I�$.��!7�ܶ͊QU��M������\6�9�W6����h��9�����5����*���~�K���)W"�q�����(�F
-q
�e��9� P0�|\㠢2Cw�A��,&irvqW2�Yk����b�.�L��
����
��X/̈́Q��^썪R����Ƅկ�Z��ИX��	�C�y|�g�W�G������
��(�	�ُ�;̓�y-���ld�Z�|I2}ǜU4���]�(���֙���x�N��
O�C+K���*�
߯{s�
![���j���[81�xx�H�z�p��3R��z�݃V! P>Gɳ�#'�I�>�p��>�
*���
�-߿
|v���y��J��T���
���Ż
���o}�����&��I1x�#���ԕ�F���ׄ��u���)�_Hg*8�N�p�� ~
u��2"$}�QVj���kx{�����X
:>ǜi\�5/�CS	��--�Bإ���[���}�8�㪽Q�jtM��u���̋�q�
�6�$�mL��VP����V������/��ӢVX�4��n�+~*�ä����"�v�
f��i'.�ƣ�t>8�>ߏ���0
���aj��&+��<h�)]'�6�
=��6�`�$h��bS��z�vT:
y|�7�����g�@?F<��و����P�/�G�7�2��sL���shO�4U��<�yq�՛��s�t��o�Ei����iK�1L3�N�f+5��h��?O䮮N�F�펝ڎ]\j�ܫa��B���� �[�k����,��e������)*�h��pT��D��
Ne���ɤ�N)<��@�`
kF�l���D�����:i�jo��֨r�RK��fuTú�Lԡ*�Vs\���
f+�
-+��
���=����ߊ[��{6�s~��c�ry�IA8
���� Od������g���6�ܫܾt[j�j|u��X{׻��_�zgtU8
�\�:��@�_G�w�G��<�i�|��q�˺i�R{b�
�ׄ���V��_� ڶ@��ʃ�b
-E��	�
-�D2�ȫ�
�O&������o���*�*}!qܘ����Ӿޟ
��+��%:��%&���*"
Z���������,�*A�8�Zְ����{��RU(p aD=� ��b
-
-H��ɂ�6��!!@���i�����Ľ���Xaq���W�u�W!EF��E$��F��
u<GI�^�w��߸��Gޢ��
�/���h�����(�P�<v@�^,��Q��€�W
�~>��Dh+�O[�̯&oQ�-��%�]7�Z3z	�^�M�Q
ơ����-?+̔0
h�c�
|�8�Gݱ���hZ��֜���|����A����t�ޏ
(8��
8�,����2�����{�7ҷ��(Ɲ�z�;X�
���'�Qs���r
U�2�6������B�����|;�T�Sn����L=.�M�� ��@�D�$���ꡠ�z,(L�	
-���E+��b?�>�@�݅G;
�n.zU�z�}��~w��Q
_�!7�����΂LG�c0��/_�y�����/-Ӫ���u��-���l�P��uTjR�2(H�(
-�OzY�@����R��}r�!�?��� ��TX����T/̴vԅ�	���MA�k�|��,E�[���&-�5-�7�<���㳽�q��v�d}��/��_ 
-+VӾ~���k]���#P�oUP��sP:�;PZl.O,U{��"�Jq�����f�
}�����Uw�2��e-���b��-�Bh��Ŵ��:��y}��
-����J����fpM�=@a������S�"��"�I�f��-Vh���@�nO��&�ͺ��{�
��U;��o2��C�?7[��U�+�/��s���n[�Ƨ���
��	�/��B���H
1Ku�n,�ұ�� ,� ��x�`+UPTe������Qq3����c��rc�}��\��$�V'�����s��j�#�W��ލ'��d�9�����M�mf��U{�[m��c��Q����˅o�B�
aX=(�5P|�@K�������v#���עP���_S�|��5�yx�/V�����3��v�����f�>����z�ѩ�n�Ho�I~�ޜ�ɕ",��,�Yn}���l֦�(�t�i]}Px�>;��:�5 at g��g� �x8��g�����������e�:��B�{5V(��Y�z�1:MHlf�k��X[؇ݎL몽k�J ��,���
Y��+"5��9��`�{�)� �^�>y���{@�
�ܼ��
�P3X:�u/�=�8�5��Ԟf�J�-��vT�h>�4�³shy	B'�
�=HcQE[�"_�j�d0^�jOVJ�F
�w��q,Ы�B�_�/@1w2`0�P�]��r֠�ze~��x�H��\?VNψ�}Ëh�tt��{�ZΚ��QMt����v�yտw���e�9]���J"��B
�v��x�\n4]�,j��κc�(V=�F�8I�`�
n��[�������� �W�n������u�0,�n/�m�[1a�5$�'
��]2��U;�zS�j�
���X�pK+G���2�Ra"0�ϛ\�P��2�
� ���x��6@�����`H\�,
%
Q��n	YGŬq
�O>_ܴy��@}�xw��{潩�ۄ�6�̊�:E+���08�!��"4��"TO4�!8#��7��/�sP�]�h
�
*0���'}7
6L�@%)��J����Ճ���x�᭧m9����eg^W��nk�*?V#���d5���0f��,�LX��͌�#A
�Cn-i��
�8��@��GFu �r7�}1.����"��֍d����"�@��T�l�����U8k��d����,s�zgI���g�~q�tW�lrO���<7bRQu��ߍ���`�y�d� E>a�"ݽ��u�}��>�#x���J>����b+���cO���	w��k}؃�OǓra��]
]���
�+V.�٢w��2��8v��*���;���Ӎ����f��՟��
	Q�g|!�P�dmhK at QW��|n0�䂊ƽn�z9
��E��Ƅ3}�8��XJ�,��T13د�
��\�I��Č5/l�����ב�p�2�&Xs���qۏ��z?�T��n��.9��||�d_���Fjs��l]x��נ���i_	�X,�
C_���n�X�N�mG����]P�ZI�
��Y�h�'Yԙ|68LV��=zqd402�$5��M�8L���՝
��v8 [...]
-�y7V��i`j�K�l�Rd�-���b�͔j��������}}���-1�|���<+��
J��'�8# ve�����>
C�N�J�L����Z;�
�aKyoQR*)��Б�9KO%nVK���˼i�ܮe��Y"$�
B��A�

n�5!�Y#��~�~�}���il�A���(�'
(I7 �w�U�="��R�5��9
��U�k�u)�P!Z�v�-t�%�5��hV'�3:Qr�	�ך�ɨ��ĭRy��"�����qΔ���%����M�
�A�^�����?����T`N�w~I^ly��� m���U]����� ��K\8���u����2�i�@��ex��s�ۜ�~�8Y�REǟ uq�A<z;v�륂{����ֽ�v��n\X��@��7fI�
�t�?�eytN{�`�ZXcv:��u�J�Սn-eZiZ��0��ۛ�em
�΢
����N
��A
�qm�_�)�NX��"$<��ޠH���p
!ݬ��;'mt�ɀ펚y��O
�
��@�w䋨��)P�����ܼ�ag=&�j:��
��7�}<gb���Tb��3�H�Y��
�-BMp|
-���0�u
��9�P:���h�絙�
��u���;f��p�e��:�7�����u_�vAV�mc�m9��+�7�Jg��-eT,�O��fwS��3��nK�GծqD�������x�"
-�̹U��/�V�W�m�ӝ��Z5g�iF�j6E$�4�f%�l�f�q#����
&�� �O~�-f#%��MD�z���9��̺�'j'1���t�[��|tV��<u:�]�匎-���Y".m�A=Z�w/��A�q;2�F7'u?�--g\W�E�@[J����y�=�J"���SԕwW8v��*$ߏ�6kS�h&bѓ�s��8D��~$�yB�e��mvM�w�5�jcwf�G&T����0X7�ف��$(s�Q��?��z��fb�Z1�$1����˅ol�Ӯ)����2�j-�n�2^��!RB
S��&���=u'��>�NQK�J��H���<�?y���Lh�V=�X���j�'	:�l�3��=V,��+���
�\I=�r%�D���N;��eYƸ�|_�䓙M�4k8��
Nv��v�@�;�y���z��ٴ�E:\��c��f��rS+�2�+�80�y�l�Ϫ�9"���
=�:rM�"3
?K�U(`ś�j��1�
 7�,A.�WA��M�
<�����{*����q���.�z�Ϸcg�z�x��%�w���K�̮Q|��v�I{��3?&q�~X���Qj%�;�K��=ѓ
Ô�Ѓ���~����p(Z�gYiE�T�� ���K
r"R 9��C[���:��cC��d��7t�f�)>��\�
yؽb�1
�$3}�f�pgW�V�:�U�,Oa��:�&���[�=@N
�@�>�Y�-�]g`o
�V�1Ƚ
���;�E��
�V��i�Nj
�<��,^N='�d�a^�Ǽ�l<J!�}����~��;{[���r1��^�·^6a�����q�{������(�oA�Y��MX�a�_yp�@
�bЕ!��5���
rH: Y��|N"y8�8��sq�f��y�$�\37�c�6w
F�[[͊�����z��A^w[<�����w�B�:9������uc�
9+�|o<y#a ����L�B[
V��k��8�\;{y�6Y�pf1�@e�x��n�^!��-p
��	�pr��e
-��U0u�-
Վ�
o�v�;ʧ쾼�=@.`����u�`� wږ@��|�B�k��@O³k�����W �(�жu}�����
����G�m߸	�{���8
-�y,N^��m߳�<��)D�N�v�
1Olre����� �'E�-���,*a���mA�lP��Ӡ�Vڠ��� ���A~�:=-�{��%�~���.�M�V�gM؏b��%У뽰᯲
j1�yAa6t���{�җ��,"�x��:�}��1�ط�
@>��`�;X��\:xP��.(N��
�Eq
-kam'��]���{$�ճU�5�l5��~��)��әE�=�u,�ؼd�+�m#�i��@3��F:,�
�?H��m���� ��
j�\&}PH���X�B�S��m򥬐E`�����Y���9'&�=���-�d���a���:�\��Hkc\��q5�l�r^;�B���(��z�����&��~��~!�J����퟾+g1 �������.|΃�����qm������BM��&�mu��q�8�_{f	�H�6��S�b�ࣷ��{���׆ʾ}Q�]2H3��;N��b<ް�
�{|f�XV:챇��
A!:6@)c�@鼾 -� ښ�?{d�t�

�-���v�wo�#��3�p��K>�m������@�]I\�l�:Y_����и�v�;�jݧ�
k�
-ﺔ�z����O�n� ����I�AM�-�釟=J��c�m��`��5�n��4�����8
EO��i繰�v*��'�y���;e���7ˉ��Ԏ��\-O!��f��r�ߗ�z�����_�2��/ϳE�l�e\C���F��y�xVQ��)\F�RJ

���p��n:

����"6���y
�D��\*E}c���~�j��6�Oe�����&%�)������ǟ���#� 
-%'�g�
�9��C��g[�<(�9�����8)\8�*���;�X>�N�?ٟ�
��>{ߎ�UB�gxq�eg=9گ����ֱ��@o�H)grux��U��u���� �ݗ�<5g�J��\mP���g���#����K
2�us(ʟ{om�J5����&���xeO���x}ow��j����ձ�R�SB,
�nOpF���dѶ��
-�o|!���?E��v���B����2.�!/侾o����/��a��V}n�o.�w�нn6�
�`Le��A���I�:
��崱�	�(K�J��½�/��._���|�po-.Υ�{��-	5�Ϸ���(��.(ג*(���
0$q#��\4���ŏ�
-���y}c��&��^Uop_˷K�J}'uXZ�����h�n�k?�
n]����A�rkD�p�CiAhMN���
-�
|�Gx�w� -F=X+���u�!��=N�z�<���=D�eO�1i\

�O-�s�=�
E��4�
ť�T����sN������~�I��m�?o����k1/{�d^;������
���7��SV���6@��< :��^6d�I�u-ƏN��-��M�݇	�x�F���B۠7bq4[�{evU�2p$�7*Y��j�6ϒ�9��F4����m��Y��h��j�1όs��pQ����j���S�F�����Oki��
-Cz�3�/�XWzF�Urg�;D^�<��k��F��S/�>%Bb$�]�G��n}1�)��da��q���葏�cIX�hṂ�p�}}�&��Ԟ>j���Q�=@�YU��������O���;N��5�ׁ�!w��'A/������[v9h*�j�'��S_X�!Gp��|R[0!i,�
	׆�?� ��=��|s�.�u�nnk�`�+�
-f�
-�Y��� �[PX)'Pڧޠ�l�O���%K���7s�����7�,��QNme��z��M�o-z�����S�R�˱G!��s��y|CM��՟��Tn�{�Y���I�m
_m�6R$�:n]W��
[P�]l�6�$���Ɵu�7��,ۃ�%�ƺ�`<��������AR֩}a�F߭4�I��S>(��5
�D�R��J&���"B��"V��\��^�ޭakI��Uc0�ͪ�$=,�
�`-tP4*�g�(j�:^Ϲޜ��x[B��1�����2�Ӣ�)۽��BDwE#�/��1�*�*�]���Jgx,-)j��pE��i8x׶�=0���[y<$�ǰK.�F����Z�F����
��
^�
�1 e���rϵg]
�a���H��u
턴z{7e����D��D�SZ��,������8aC��6)V�S�j�Ϳ���6�7��z)b�饦�E��潧�
�5���q5n���{�bV;�L]��q�����f�mu
��#��*�!�ۀ���H\]ʁ���Nn�۬n�o:1k&���.OUv�*)�
-p��%&=�
-�n֬���U|�����L��
bꬫO��/�G�t������3�
����і��}�����r�$g�.�Qj�8jK>�%u�hϳF��~!t��݇�J�EU&Bvғ����=T�Ό��mvZ�$�[5��j��ny���^��COv��ѩ��_���y��M��NXC�0��E���s�a�����e�(�C�(`����=LJA���������nu�SV=�5�B�S��+߻m~V��i�����0�F�P{7���X���Y�+�ƿ��Nʌ)��H�t_m����x��?|�麢��{�"�^���GPlP�E�FQL���֚{ϳ�ScՏ�,˧���"��T��O��/�����Ԡ�L��)�\��=6t��ޤ�Xq��gw[
-"m؜;m;�q����d�*�K�y�L��`ȱ
�,��	���E�-�Kc���q��st��xi���}����R�	��MDX��j�7����^���9���z�u�>���2�u�X�}�������N���
-���e�(/�]�K���w�����-��,����5��( ��M�o��=xU̲�).���0�y����g�JɓW�-
��+������69�:�۸v��
-��e~VK`�.?�šr�(�C&[B�<[�o��'����ek�g���?�O4
e�}=���V��T*��7�� r
��1�ӷ���
}������.�������D��
�
Ν�b-G���XM�<6�J��,�&�Upf�]�����=�����?IP<�1���ҏ3_���̼|g�y�*cN[����W��
-MM�+�2倐��T꺒SlU�s���H�s�]�,^T�a
� �rɲg���������j�����e�Y��z�>�8MF4�Lfs<3�O��P���%wzx#E>�!�u��X��7 ��~�����`��`����D �Wx@�-����Z�J��� N'2�
�
`a
������6��&���"	���ڃw�(q
-�3��s�~���:��
�r�"j���_�G(���
-p�XA����hԀ��WD�{Z#Q��v��j��[�����m�P���nB�6|l�� ���5�zA�j���g���+6�x�?�n�a���7��w����7 ��A�W{
-���9����Zo
F������
-Pk���
B�5
j�� �,�k���%���s�/B���$^���I��l
*�ڷ�>\E/���
�L~ �&4�s�ݓ�
;��
�m�$}j�R���<@\�TQ�� ����	�5�͢����`ϯ)�ej�T�ְ
���x��x�=sQa{ק
+B���w
-�R:��C)
~ ug �9& r�3T�� ҂��<
M@��W(����H<�%@Lr
��	� Z ��.��T�|<�#�v�)�hJ��H�a>�%��+�q�������J��m�ʩ]����[���
6�
:qW�X�@�W
���(a��%҅v"�9jD@,������W�5| \��o��kY�W'��a���7�%
Z�ŷ���|���0o�
%39����#�i��~�ޯ ��B�� �|~�+TɌ��'oK�g2�t(��Jj‼5ˀT�=@�K�t��=��s����^��;����?/f
�~x�>���Wx���
ŭ0:(���
{\wǞ��� �
a3}@�t� gX���o��Y�w 34
 ��g ��|w���%��a�EC���H�%��L�NH6�˭�2
�x�o�i��i�*�p�yl��d�vѼu6B~
-=�i��/~��� ��@�u�-P��L���{vhv�2@&��`��*@�bSz��6���
�G��=춄�U�����+���u��k�<P�.h�
���';8ț�nt�t&�X�g~M
-�گ ��5ĆZ ���*
�;R3���ө
-�r!�@��(Yk'W�<Y����^�W����t[A��GHx�t�1ό�
���´����v`�R���&����`�zl���ǭFH���o�W ��@�g
-�n� �
c@��߬�e
-���� �_�����~��{3�(�.��C�r����8\"�읓���5�:ur/��c+U�_�f��1P�m&�1O�Ys�{�ܲ�GU���Kz|�����o��B�o
<���{ �akP�w�<r�q^��&�Y��B펴z��4����qy��y����~���
`t��vW�De��Gj��E���P\yV��,�}^�����J����O�*�
- at 6� S���7� &/�9��j �a��$˥KnJ���9Ci���|����
h���
S��~:k[#�47uus����e}��y2����#3�-L�T����Wd~)̻3;'�+ )����fi��BG�]9�y}�D�ӍF:�[k��I�K��2
��� 
|������i��#K���ζ�U���[�ꏺK,^�
-��ޗ�\d���1����+������_����vY��گC�� hIy&�o:t���b�z�:�3���eU���Q}�A�w�>��[��\�m���4CC�<��k&��m�O�����9�qy����TYW
���ԱG0j�C0�̯�2KО��d���8
�
�� rŷ��%�*���|׉����+���q�M;~v��-��Eڕ������8j�I=��7?�N�M��~�NR�h��d�;�&��B���]=�ql|����w ��=�����
�B�s
-]�Nj���3��AX|�.��>81[	��S�l���,?
+���u3��Z��7gt���I�Q�q�h����7�^b�����#�ڣ ��>�+���Rag_A���0
��u��/�Sc�ܝD����Z˴΄�<;�)��~�Q�:�mba
F�yA5�<c�0�Մ����a:��zQ�Wt
H}�

foZ�Ɍ҉HJْ9r�j�"�+���P���f�N��#
�	#!��<�.�(	z���
^�������~�u�
���̠�@�ĭ�
�[af9�/L��:j
��"��b_a�<�I[)0+)y�2}��e�'/&d
�I?�@J��_Ƞ�JOLؖ3p���4�-���e�Ѱn
>'h�3��L��7����|����}����bW���7�nR-?����$�5�:EZ{}�ħ��E��=�gM��n�)���������^p@�qI��Kz`Т>ٙ��3
�m�� ����=�Ǡ����rii�D�1˃$4R��s~N�ߪ�3���n��D��{-��W/B�=��;[����:��C��ӥ�k�K�F2 z����**���� >��'k�t��;b�&���p�v�b��vj��`�����ӵz?n�w8w�Su
Mgf�1n2]����C�D��i>�m�Z��^K�/�����2m)��t:Z��\�IB��T��
�^��8�ȼ���܃[�ִ��{��i<�ݝ��;��ֵ"*+^�-Ψ~���������
+��y����-c
�v���*����m�F�y��Ga�nY�f� [...]
endstream
endobj
315 0 obj
<</Length 65536>>stream
-�� �F
���
��a�.�J~��S7Ӊ��
4���D;�7������=1Q��g=Y���P����tD���^|tw��j�jU�ҨX�X�vsM0����v���_��[:Ә$�9�$��Eu�W�L��=T�?����B�9�*:۵�@��+��*M�Z�@�0�O�9W���֋�bD�C���A��KwR�����Џ�F-{`�]!��
���n<���|����Zf�s��c��k�9�?ؿ�2Qgyo/��v��
v<�o�xZ�.
rb.��z����BQ0z��sab/���$Ծ���ݝ[]C���q�����W�5����y��w8G�/�
f5�tj57�v8"Iq�n�.�P��"��
-@?��K��c
v�l���-+O��+����L��VD��t9��	� �0G��~���:�x�9o�F+<�6�gh���>�,3LqG���?{��`X�J�2Oi�V)����x��T/�)�h)[����ү�k�w
j�]C�8+��Ֆ���/�R�=�Ŧ����ט|�h�T��$����x8��N��Z��6��@v�ݖ�
�嘅v��E��e7��Q�7ؗ�P�F�s.}�<[�YU,�
�Ua�<_a�[�_�g�?8c��ؽV������e�}/jY�_TWz�6vꖫ���t��u���Kw����7��&�M��"��İ�>g�|�u]�
�x`����
��*�f�|�7��̋V�z�H޵�RO�jqW�*��P����%�K�:c��
}��E��px�H�JPXJ��d�u�i�=-�Ǧ!pН��b�N��:h5X�dEk��v]��62[���m�E�f�
-��[�O�͍��3��g�Ҥ�e3򉹝o��
;�&��rߡ�Ɩ�4�
��u��ͪ �2>굃I 69А�m
(��]N~��e�YTK�\��xÚ��)���+��AP�+�G^�[�ܸ)��iW)2�l4icx�|��ΘS��4�y<Ө�z��ћ�~���粈k
����%HT���msӹ(�b�E(vH����q
�

�¾�.W�F�(�v��
b�yr.��,����
-U����ne��ݡ�ȝ���8�g	g}�r��@�K���Wh'y��4ƫ�@mP�
�(�֭���F����2�K��b��6��>G;)�y�]���T�|�YY�L�PI�����9je){Z)RȽR!�'Ϊ�%��4���|�gQ�����`X��=!|+d�� Xxm�y� �� }dt�U�;���
`�Q�� �� �}OZ��@*}Ԭ�:U[ �}�6�)@��
-�(�	 �����u Pȳ
-o�*
-@��(����1��{���`$�����n�c��
-���=�>�7�)�����K�v{�jc 0<OC��*�:oC�'xg9��_� �
����7w�V:@�c��lj�_���x�N��GJ�˙��I��+ B(�B��}�P�;p .M�E\}U .� Ϩ&���`z�0�k�P�����X�@g�by���	@[�
h at qUb�T�,�g�W�rc��`7AMK!&�ڿ����=ehJ
-��K�?��! 1U��Sk
p6�3i���XW���y��+�u
�L�
{��� j�i��7�m(B�@���d��".��I�0%8���u��5��b ��j�*��
-�I���zp}���
�l���M>Az��v
kcƓ
��[��
@�
�2�� =��ڷ#��;#9�
3�W-���f���D�mwu���JA��8)N~}|���
 ����~1@"i���p8�>
>ۖN���_Ұ"��
-`��J��W(|��d�
*Ӄ��/2kZq�ݍ�E�g>C��Y�����A�9N���
-��x�w���6�'
�:]��a��m�����D�1 
�D!��DJ ���z�
7 G�pD��1��9��{
�d������8��Q��Z��v
m
#�~�w���k
����� _� _�߻���g�s}
5���w�{��.UOA+�� �
�gMx
�� q/�,a���9N��G�a��$cI<ߔ�{�
�����?X���5���'���
\�k�V��<�N�^��� �������^&sP|�2h� 2�gd:�77��)>�V���d���o�*��9jNj�܍5�����3�!^�"�yN��}ߵ/Ӝ9>!qO�_�jk[�/��δ������i��?��6I^�u�V�))
F��P�}
2�wO�: tƶA�
�IA��
Z�������N-��r'8z
a�a�<���Kӻ3���$�W��/7E��Gq���
�t�q�B�O�<Z��j8�A�a�e~���y
ς&YN�'��N=]�e����&Ń��Iķ����ֈ�	�µ$
k�d}h��WK<u:��HD��dv�}Ȯo޾�����م���f�ʭIrͮrb.gD�O���j��+ ��=@d�! ���R8���&߬m�{��0	؏��
��[o}
�$��|!u�7�"q+{�\�=x���/��6�-�����7��ةwZXv�7�V�]�(��Af��WH��2��b^��`�����8Ph�.@�2;�� �q�gO���H��
-V��
�zk��gK��'��y��)�g+)f��{��	!�4gu�UkMz��I�m��l�eё0=���E����V�Eλc���I�q�W at S�P�{�x��]m��o\@�
(tk������G�D�r���hy�L����zP��cW�ޛf��[�u`Lw])��3nY���2\�v;S���DC*�af1%f�LƦ��G��Φ�
�|~ �cX���?ˬ3Qx
vy�,
����Ӿ�Y)���eY��%��)н�[��M:�>�'��Y]��dW�{��}�����
Χ��\�L�긛�&� ��tOA<S����F��p@���Č��ږ��
?�׵�`���"8{�����]��
sUt��:�æ�B.k7GD+U�=

[}�==X
��ٙ|��š�-��wr�k�
:�j���Y]�F���
a�G�u
-~�?2���?�.��go��M%����w�L)ʳ��Yn��`�
��f�m�-ے_�i�6��$�E��<��LM�g����Sa\+��!�ty�,��0�.����������6��{؈�/���}Ȑ �p��d��D�S��e��E6���2g���N�*��j�Qa9�i^��~Y�L�
���s�������p at G+��
�:S��x���F���S��
���5荞��~�J{#��/�`�������]$h�6
��뗊����A�}I���Iy��j;��"fn��
�b���7geg~T8wZ����Z����Nx�`
-�x��k�`6�RQ�Ұ�����-����W��
����@�;P]}
-��~
��.|<oS荇y��]�Z���c�pf�if�����z��6ݩ��r^iR-�N}w&�{
�N�`pd��|�4Db�6#>
m��Ψk���hH�w���$?X�
�R)7yJjm�
-@�\(���^���v˞�� ׽6���q]�}n���F���V����l��h���z�{�v�~���$
-ٯ���bρ��R�ͺPi�ڠ��~��@7��%ݗ+<E�-��Լ�
?؟
 �/�nT�
����쑇����M�ű(恫�+���ݒ쪶+�u�b��U�����i��<6�|���4}��+�Z�X'�5��hrs4���7/~ZLj~���b�i/s��登�
-؇�
-l�5=6�h�) ��b8t��~����8݊��.#�z�tB����|$�mU/���-B�
-�k,䙸0{K��w�WX#G��he�U��|�~�ؽ���6�"
uW|7GL������l
���W��H�71|v�v\�
v
�(�v�\��P�[�
-���zV{g��@˖ڌ��kcd��ѫ2p
9��jo���.K��A�pj����Q�䴐L�� �x���g�y�H�U�^%����PL�H?~�w�LƷmt��ԵYw<i��T���|ü
�ҲYL�}��h��(���;2��2d�|��^c�
tE}=m+
�lN��Q�P0�78Z���)�(��q�����Oq�y.ç�'�_7�)��w^�Ε�����'z�;��T��Qc�
->�vG��6����-������qN�(y!�d}�b{�z����ν��漶1�=�	Vo�]f��BT����\(�W��,Q
Z _�T�TM���SⰭ��Ed��~���gmy�ȯ��3�w�ui>),j*��-���j_l�Hf��D��2�˻��`�;�j4��]��J��=��f��ڙI�Z,f*akѨ̲�®�T�N���Mi3�y�븗���IVa�W����Xͮ��"��Iͦ�=i�N�Q�Д��Z�2Z
{�u-��j�n�Ѭ��\�ʀ����M����k^�8����]���KY���&�Y��
Y�d��k�RnpxT	\5�5�<�+�C��nvD�1Y�G��a�RRG�
�*�֨���
��;�ft��jO)��4�ݨ�ٕ���C�s�=]Wg�*
�J�w�<1
~���%$X;E����w2
-��yׂUZN�
-�������7l�]�1����*=�	��h������Z�y��ʭ^{Z|�
�v�����9�x���1;T�f����F���L1)�sy�{�)�]�Z�+B���t5��m�%�w��Ff�L5g8��W��T�7��z�%!#�c��J�IDq'����Ql\X������t�v�y�j饶�F��E�K��6,��eZ�bG�3/{�+��]���
�I��6�(�]����s3%�^Pծ�B
-ymK�n�
�
-��M�3U8%#q��x9��2��zi����5�
����8�T*9͚�,VB<�9�
�Wj�\.���,�+3U��<��F>jS�4������-�L�y•��g�\�8K�
�Clܿ9��[�3_�
���v�c���hl�A������U���2O�ϑ?q�
Uux��ߵ
s�am�^�i���.I�F�U�I�B
�UH�Y�%������(VP�6�H5��<�X�^q�M���L�D�
-��t�8� l���U~� �;��6�8h!$ JV9���}��/K�T�@��;@P#
��K���~��k �to����5�@�p��
)x����
��=���BBmg�'�� �m��}պ �.�L���`7 ��� ]@����x9�V �Jg��O(y?˾r �U�`�.��M@�%� 
�C(���ㄆX�
-s_�E'e�	�-���\��S%f����� ��5h�\Z�'¿�� C2
q
0�� Z����sF -�@n�
@l
@�	�!
�N���J�>K.�$��C=�%G�&����!��Wc �B-��a�Q`��{u���xk��
 �kP&W�2��
���w�>6����6���d�v[ ��n
PI
 J
> M!���\ �Q
�S ��u��CY��"��#��?X��z
�B�$W�p#2��Ǻ�� �4
�QjHo�P+;�{������Go����Sx`��
`��w%��`�8|P��\
�2
N��VI3
��\[�^� �T�g��lA��J��.t�Y�Y�����G�Wov9�����
M؁B�f`���' _�K���۟e��;�Wy� � ��`�:�8�~h}����E�	�}��+����~�u�y�o��U�x�v�4�֯^�(�ubI��.M
����
 +�8h�	��&d��	 j��]��X] s <���+�ȿM���
��M pZ�U�j/	?u�{$��?{zX�~����:�xv�f�5-�ބ�vv��E�л8Yz-�
�-���
��7�`�� �i��J���* �
�&rmQ�e�
@��c@<
㾟�q�`�q�C<���ߊWZ��]7��-	oڭN����(
^�@�nE��
����Ǯ�.�/E.��uw��`�i��aS��/��Ph��T��8#S at NO;@�f�
�@�[�*���7֏�
�2��|T��R�'��k1sg>�>���V���B��?�5ߺn����9�G��t��H����V�܆ψ�e/��Z
ho�y��o �z)���ǟ��d���H e��_�m2 �=���ŏ�I�}�%
zw�spʈ7(�K(�p��s�3/�+n��4N��G:�Yd�8�������}��3�j�-X�Od��`��`+� �I����9� v��a��v �}@s
P��	F��2�>�Ʌ/���
N�P�_
?.l=ݨ
0���SGk=�ě@������Ʀ�
kka�J{i[U�چW���ؤ���Ր(cF������x�R��Xj����
a�=��;��
ݝ
�afP�O^C��<j�2{�$��L�'�Q�Obn�q��i�{�`7�d
��2Jo�֖�S�`��H�f�U���9{5�B�,fbL_
�酠��Z�H--&�����dU�
[%� j�^��u>Z����^����dÁ[g���ynF3�xܬ&���f�ko^��h�������<uv��W2���:.�����,5_$E/��
-��oy̱��5��9���4�޿��
 '�P��@{����4	�?�h��׀�Drg���=Μ?�T�D�t�R%eWk*�MJ۬���7/�L�<������,����1���״��
k�m7�̱?Ϩ��F���L���}�>�Ŀ=¿������pMP��d�=�j�KT�}����=�J��eY��'�=�;�����/y�^��E
-���
,sɮ��n�v�E�C
1
���È��M0��v�j^m�'������K<���>��]4��� ��+ >О�
�9�'�I��~�{<��5:��_n
��ܙ��c�Qc�U�[���iǢ�e��jĵ��
��:i�0'��e�,w��H���(1��v%���b=�%
���m���hh���
��
^׿NB
��7���:_o�'3^b�v�\���u�x�?��0sr�n�%�ye��X�I��t5Z����4l�X����F�^��	� ��2�'���B(�3UU�Qz1�s�PA�(��
-ʧ�
-���R��v�,������2t2t]�鳱=�$�@?㘹q���
-�`�%�����R{`m�Q��5���3����%���l7|7���Q���̊H�&
X��P���bx������ח~?s�H���^����&�C�
�&���Wڸ����7)�ܭ��V��~�q�����=�Zͮ˲���ѫ;�6��Z���1��a˴���o
�
J��?��{���ze�z���"�[���$[\��?<�9���.����M؇*P詼�&��@{�v�wbZ����Ů��l�cSu����7

l�r���m��nF
������
��PZ���I�0��n>�f��|FZ�����ꙻ�\�xc[�zeWp{�O��7��>����%?×�rը
�����c��m��;�'����z
,
%L鈑c�L�ª�"��۹3�XEy@��H.R��[\�
F���d�����D�����&�֡-��k��N{�O����
�vWK��7 ��k�Lz���v� �|���oTaר��^V��
2_�j8��`��8M���	��Y$?6�jeؽ��K:r)7�8�v��kv������b�
�6Xï�B���f�{��6���8>��r�w������� ru���S�7�\q	}T:D�zu�\X�X���I|k���gj���V��
-�t�~���P�^�(��~M�g�����`��"�mؖ��b�Ʈ1��~]C��z���C�7£LF�h�3���?7�x��
�i"�d���W
��N~�]�e�m�YȚ���/�
��w�1-B��7����$㡔W�}�w����ur�u��J�Mӟ~s";�F����u�<8�R|�d��f&��`|J�ż�#�[��B|��z���@�]�/Q4{�L�ܾY�)�2��
�l���,��t��>3���v��/����6���#��؊�LG�m��KQ��1ӭ?ʔ*�|ͷ�
�]
>
��W9�9��(|s���~ȡA���A��}���/~��74�T��t+w���;KQfp���z�ƴ��§���
o�*;��yZ�5թ
�J0�{߮��Z|��f:�*�
�X��r] �LHm�Cn/K��q�rk����Q�Z=[�r�Q�0Q��X^�LJp��;}���+
�v�l[J��n1���/i��Q��h<���t�#�j$�ȋ��ʾp��Y�d@�%�	�f��
�:G�\c���:N
��4�~UJ��VJo�,k��Ȭ�;��吽���2�ٟ���n�T���*�
P^�5z�~��n�

9<�ϫϔ���j⾺kwέ�]�?�/����u�y��>���];��D��=+�[�=N�竸byy)��
Vj�2�R��
J���;��Zlo�K��j���s9���u�{�Ҙ-��W�ʍ��P>87Y'���|:�D���]���hB�[�},��q�
�
���N�ԟ���h��9S���f���J�Á/vo�A��tV�p��
-�#�ٴ��."��.������
�o��	�|̆�vԢ�������D_J�w��t�N�ܚ�H�l,�u�Ы�r�ܨ]��nu�E�J5u���|V��겄\G�"

�$�y��\!mׯ~����
0U�[ӏ��A�
l�4_��3�[u�+Vs0K�v����D��6����{
��
|��D�8w�!�` ��P�k?Ζ�A�cE��-�2������?�N�E�2S%�#�\s���Ȝ�P�c�"E>,��[	��MB�P)�J�]��7�`��ǿ��
-�ԍ�HBw�/��Xot���`_-=����]J����<���,����=Q��4O�ҙF�¨6�dH�����`0ܵϢ�T

N��N�^���$���~ѦY
�r���

e�r���r�:i
5��+�1��άW�D.r0�\f�M}�T�y���'�
)V�
!��W��v�6\��7|t*�1�
� ͗4ըv�PH5j�8��-�~��R
��!�� � ҮĂ�g��
7� { ɔG }� ��A��>A:ߣA�u@�H
 d
����t���s)�{��|�@ܲ ���7�hR��
-b�@\/�
Hm��NgB�.W�/lD����j���
X�� ��X
�,dڟ �],��� �/��Y(�� �Bua,A� M��zw�
R� 1h���Խg}��~tA*F�����D`�/&/l�&�A��
 Y��Д#(sA��\
�xO����\M����!A��@�a ���T�]`���1i��MV��R�1o����A��P
@�__]3|�Nz���n���K���o �a�,Ye(�:��/��tV:���E㛮� y��X���;H�Bt}�dW��Y� �@�'�*ġ
ү2�
-O 
�w�e��^�_��
O$��=��)u{�sI�	��o �oA��_��-GE(4��F�� �4m0��Y� ���Wz�@K��O���*�} ��(�n	 �U
�
�E�-����k�+�o>�9ÞJ�G>�Lƥ��E��|q�z^�(��
 IE�����{�T�
�<�^������	`��wٺ��f{�[`����d�`y U�'@�<|�F7a�^��j��Z<H� �x����1>�1�
�߬<u3N��
z
�p��S�Y�\~�?��@s~�?/@��Dq2��D��Y����Կ��~
- op
���������Z��n���pi"��I#�G���q�s��A�~��{
Y�zv
-Í�J����1~��ҥ��!'���u�o������hOp���R�"���.����A ѕؗ,w;ϋ��#0���r��#�z[��3z/��/�p[�CL9���������i{�����sm�O�–N9��|]������s��vb(�߫ \�
����5@����\1ǒ��
��wU�}Y�[C/��y���9�neq�^�~|�c��ͧ
~������
�֩�tj����Ԃ�i/������<2������1Փ����`��� �
YX��š&���Ce�{o�TarK�\�
�K��Yb�
ra�?_;��ŪW]H�b���d�o��	�#���CM��ap�f�� ��v<�Γ��1RLl��W����r��yy9��F�7w�>��
�* ��
B_��j��JԸ�$�Yӏ�w�!��'p;{��s�y%�7�
z��X;�8����ޅ��q{'����<7|AG�m�,{L�׻�ym:������
�z�v���g�}X���o X��a
���S°>�fm'�ǽ��n�����~���i��j��bN�,��h��Z����d�<�v�;YV'�:��D�M�6JV�U×�⫺,h۹�
�'�z+��E��
-WμS�v��^����o`�

�g���h}������+�����nþw�_g�����y�.z(��ܮ�L����ݴ��.�Ӗj�D_�.�˲��'�\6#���?
!f����k)�m��ܛ���qz��)-���G�� �搅�'�R
-��d[���,���݇���l����I��Cq ���͚ڤ�d�"�#�T2H{��17������BH�[-���slr�g=�&���9�W�J�d���M|�9L��n7)>��8���� pb�*U
���(�&���¡5��2�^����������O�IK
�[�:���xy����n�3�E#uU4D�Lg�����Ń:s�D�wS��K*��2��+=�4z��a�[�fĵ
-����s8��B�(</���j
�C�}��f�bd{�3��
q�}�-�6vʉ-
-y�V~��1b�.�R�i�̾9'���Խ�cu\��5��v3zt���K:%���^P>���|����|j��������x��`:�q�L�ԋ��غF����3
��g4}�O��=���m�
��q_�؃e����Z�	�������#iOf��W��tr%x+�q�=w��;�?�;�������;��5��Ks��g˿�{Hc(T������8Ȼ�n��+N!�7w�Ie�AM�Z+n᲼y��nV�4���A��I^��:)���h�T�aΘ���Y�������K ]�.M���4)�m�*u6rVm�e��Y��J0����@���?��X�sFr�躷�S�^
-����o��b�5�X�����\�@��{�i\
$�?
-���mq�Vy��eȲǏg?�4�D�7sƞ�8��bm�ꊋG�c��{�,f�fmr�
L� ��T����褳^��1v_
�*ۢ����$fL�$Q$)
-�s�,����)������3/���m7�*��QҥE��r��m+�S\�-���-�D'�٫������k5n���(�$_�[ۅ�W	��!xX֥|���SC���eސ�<�v8��o�<��n�[��&n����:
~��\
����!�Nr吻���~o3��Y��c��/�k����¿���;9�	��g��`y0�~|7�9�-�PrDu��T�u�ʷ�Nw)�.v|掠E�1��m)��j��:�Ry��6��ؙx^��I�O�t�
h/�pP��
��ڙM}V�h��yS�,�Y��Tz"h���9|6W�fo{�#h�g���Ōܘ�Eɽ1��%���ߔ�ʞG?�Pzޖ���#���2�<H�@é��#OLmҒ���o�^jܶ�K���V�����ۼ��즞�����$��MP�R���]4o�h0`���9}���E���g��
!�[���2�b��4������yȑ�c�N41d��B�M�i��{4e��Yt
�c|�״��$���ˠ5��s������o�L�_�s��Q���
��e�ƀ��w{�mi�.>W��"�t��:
r�n㖎��k� Tzh�{d�uV/p�ڗ�
T����k�h��l6�p�7g��0\���7GZ�F(��Ì�b?��zǑ%�@�~�
�͈~���1�$)L|�˫R��o�U/��*G�a,}
것�p j��M����
G_*���,���L�^��3���(�R��ѤT;�)�Z�4.�ƴT���Z�O�� +6��g��#v
��qѻ�w�x5f��U/��
���LLʘV��q,tVAk�k�q�p��Pol���C��[)#rJ���
-E糎L�Z쐧�v&
oX%
E5�^�k�6Y�1
\ƍKuh�`6�8o]?
-x����T�h�
-�w�vL�F�,
���8�.a�:�r���zG�]X`��0�i	�����V䲳�q��1�wjf�ѓ.�}�*��Y
3�ƈ�G
�
�ѵP�G�M���Ss7�¸愘�ol�*/)�k������[U1b|��Ŷ���M{���Zu�
	vW�x��'���g�ղ/5E��zOs(PXkҜ��
{���W5.��ج�n_�.�0꫊�!��G�]E	iT��ͷ���1�����L�.�_
�9�s��5(�'CxS{���MwZ�,�c����r�VH~0��0&� ��1CP��A�Ȇ:%:�u����flsY]�Z��� ���-�Z�Ɣ��I�LT���%�s�ˡ�ejP���RՃ�?�`��0=��/�Ǣ��4+��Y��k�n��B�~.�WE��<q���W+�T�Ĕ���
W�F�����YCN_�Zz�&�����4��tKu�^���\pz8T`�v-�S)��g~.��ln�-�YΉ̺�o����>�����i��D��u��e�2�m�u:�}�
��z�rε��ܪ�D�N%D��D
-g���-<w�r�)
�y��7sb���J�]�

�yhd�%���2zgZ˔p^�N{톝� 5�
;_%Nv,�~b������j8�3+2��[�Ы}z�*��I%�����̾kD�y����&�ms���0w�f^��%�0�
i��V8�U�z��B�;fh}�Z�B�$�!��ϲ�s��/�����ׅh��x��Rt�sF*A#��c�j�U���s2 qe��scJy_���|@�Y���rj�����i��u�����3������^]@<����,W!��H��
���D��������O�結�b���z��:�5�W�K�A��@Yo���,N��9N�]��j`1�[7N'%���i�Y ��85�O����	�Iq:�����
����醶�����u�y��(L����D
�O�hG<�u�$��c'А]%7�%P
C(߭|�%FU olp�$R� �1 .$��c�[e��
�l�e�@�;���2F���/�\��֞ P;M�r�Ԇ��y �p/$���MO��n8=�*�:�.	4�� �p&	d�	4���
 [...]
-����s��/x�0C"� r�HoYO�M�L�~��t����i���1��b���8+eX�f

N���Rm��
c	\�T�w�X��e���n�w�s�?�wsx����ш�U��t� 5��e�Z��x�-��	��6�3���y��x~� 7� �
� 
-N��)οO#�s� (�J�v,	|����y�GƝZ�y�4m�4��|��
�!�e���H�w�lm��u���ws���	)���	ھ	z,�
V�k��+R�}��]��
�2	�*�ͮ:	r���J/�q�Ln��n�������髸���I
-�`4N�	!��&V����s�
�q�7�W	M�'C�,�'hH{�dL~���OPz�}�&L`A���#�������}���(�D3g��:�D�y��YY2�Ȍ����+�5V��v�!3�Bw?<����B�@�ܿ���?���Ǻ�l��m/;�9��вׇ~����\�..Ec���$3�KIf���e�;�9��|�
ݷ��cB�͐
��]pP��Ž;��O��Ņ�EU���a�F�R<�O�X>62�N���^���]�*��]�X�-y�]'
ڕ���e�� ��>
���@o�J�1�T��
9����N/��zH�uu~~0u�u���u�l*m��g��l�D;LZW3x;��I�r/
O��2�;L̓|�=�����եSt�w.�-�u:�Xə�������/�=�	�[�L��
cU@���o�r�͓���]�w��

-J~s�?����V�
�X��~.A����[��P6����/k�&��ŪV1��]���Y|�~.Z��2gH�4�v�/�
����/���
?��S��{�H��zcKIf��&�-}�m�J��e�9jͭ��D�ƪ��n�7�G$/{
��[5��6%�L�nň�~��[��q"���p0Kǝ�u��U�;���>�sC��A%�ĥ�:�aa2�[{k�Á�[5���
P�Q.�T���
I1i$ٜ�J�ۢ�^�*�|
�v���0h�������(���l�Y��>�NrHLr*�悯�M�; ��=�tǹF�ک�_&�����2��\�m�&ۣL
�5v�Y������ZƘ EY"A��m��v =ɽԹm7,{��
��E��|e5^�|~��|Ƨ�l��N9��=%��$[���	h�rhM��:vk�iOK�oC��a$�mȒ�8g����
O��`�a����٭��|7�/lZ��-'x�P�>%2���R�T�Z�\��J!�w*�׷~}�t^��\�ʻ��M�ީD����:df\����1[�?r��a1۱ַ�n���,����\P���٣U��.54�=�3�K�G�����
pi6
-	����I�^��;�n��\
� p&�ϲ|i3�Q����Ũ�LU���y�脻�1i���N�6ZޏEk���&��a��ȃ�90FX֟������*���R{^gg|���x�����"�"��B1��u1VC�~բ(=����S���>+%�_��I�L/Z�����Y#;�����y8�~�t��-���(�Af`�١�Am��
R۽8{��):z��<hˠXЖ�l��k�1�i�^C�:������tH]��+Dђ-\*�}z�f�{��W�
��z�3����͝n�}�2taӟ��|m�����
v����V@�̰���g(���{��V��[A���d�Ut��(zv$*z
֕@�T%`?�T�Η�/@�0�I�������l�>�m�a�ףm����ex.���i��ܐ
�&�q�NSZX`�
/��u��?Q�uY����gu�NU4\Bi� %
����
�]sYLA.f�j<`�uo�^�+�MW� ����dN�"�*�k@"Ё�?����<���-}��W�u2է��g�3f��.h/�.YA��/w3 +�S�k�
����&[�Tu�**�����6
Qz�w���M�
67v���鸪�v^Ӿ"Q;M��,����Z�[x
���
	��˒y����@�����O���d
�n6��)l��
�oV��PHw��
�N_�-�#�x���k��K�׭t�z�mϲm�
k;Ol�Żؾش�$H�f��:D�=�[�dI�&�[�|�d��*��z3�5i������Y�)�=��<;nB��=$F�esf5�W�g1��*H�6˵���R)��n����|��v�WK�*[�[[�!�r��ھ~������&U�}K-9�E�DZ"&��/�\�7yO��B��S�K_���
)\��av�|��n�ݹ�Hc��9lRԀ~�@��
'�г��X���L��3�.�ٞ;�X�Ű�� �����r���m�3O�3g��g�O�3W�7а͟�@�����y���?u��
��<.��������rͽ-OW����0�P#�wD�z�0E%��P&������E�����Fo-�����Gp���*5�-���L�MJƽ�Ɲ=��;�J�k�m��~.�����l;$��{s9��B��..��h/
)ܚW��0��k�_��gת��ﰺbn6B�Yw4	B2f[ⷮ�{�+�d�GެV

y��L�b�fڧ�f�:
4K��+�����Bw��C/�@l
-�����/��F �G�?WN
}�v���k�f�	�Bv�A�+#aݩ�Z٩V�G��%2=������X#s���'�U.;
u�0<(�.�P�'�vA(�]�b(�~֩|dn���T",�&�{�C���Hꊧr֜��vt˭d3���B\
~��Γ�N�Gť�
8��ų��H�4��s	iy�NF
-!Q;�an)>,;"7	
���҈i��Y��-[������!���Ѹ��1<���p]+����X'�f�99�ޘ�|�ѹr�����P4����8�0
-��v�^�^�R�~0e�ɶ�X�Q�X0#��I3�!?�ܫW��dHYh.R�u����������d%�/�z�M�c!_���f���Y��N��d�U~���*�
�����+�J��X�W�9SI��җ�іo���>��^נ}e$��2=�-�P2��96�٨m���yIku����+)B8���	m6�J�S
-�Qo.��m�mu^>�Ȅ�U�L�U2;�&��EJlK4I�
���`|YS�\�XX�����5���8��
�`��[��Se4
M:+�j	�6�c�ڥ��E!���~�iPG�Vw�zR��^�=��^,���v
b7�ʇ
�˵��c��|�*U�L�h]��b��̋
�+<N
��X���X��ߩ_�U
�N���ϯ�X�7SF��t$5
	���%^��%�
�u��i�ZeuV]z�me3wϕ\��$��
*�
^�>��胑�g���c�U�\2�ss��!'�]�8��|�.��{{|;ޔp��V�˗M
�7��/&�9w�*��鷵�\	��ב���o�hn��B��XM#��dWE�(>� 1J.�R
ޯ�Tf�/0�������-'ֆQveO>�ֵ1<�Y�2z+��Ӛ��Jv8B�A6 at M}��r�F«�!�% ���a���ր���{�v�w�2�reؔ-Zk�/R��b�)��	]��[��ȶ��KJ/'V#+��!�0��	��;-

ft�%j*����;C���~�`��t�
89��V�8�i�!��J��{���1u_+u8~��է���4j�TV�;.�&v<���U�s���r�m�d3Me�CeJ�a��h=;��(�0Si� �At 

0� �)ē�w�v�X�,���X}��?h���g�꟧m��/�B�	��P9&�@�����8��8-��s\������G�]��w񇭆���W ���\�f*
������G�o��|Vx��r���}a��|�_���H���	�\}��}��w���}Dv�̓h�8��q�!b���A�"K?���=@}�h��ʀ6	�� %�\KC��ş8g��c@��?��=�����E�/�/2��^��j��"�$.M`�P�B�u�$p1a��r
&��2�+���1�w�7��'�!��q9�� ;.N'�w2��
pZĩC
^
�n� ,��6e-���^,�^��߀��Ϟ�R�������%�N�[�@gW��;�:���n�X�	\���.�Iy�Mɻ[�p���L'��oD�:�����8�	D���[�+ �H���
�o|��_y�h<�r��oC�� :
���~y� ��0�O$Aj4Ad���r�w�yC}��$�	|p�	<~
�q�9��x��R��*`5�^�֐e�k�{}���lŇ^�=��z�
���=�����aH�����]�����_1
UJ�������;�-�m��%zr��;+Av�2AT�� ��j��_�ޛ���n�K�@��q���D>?�.���0f��o��c$���d\/�9Ngoj(�N�6/r�28q�:���FW堩y�~���	���1p��2��cj	V
	?�=��	�(�r��^%
���F
��]|P(��,���,�y�ڿ�%���nȔ��+a��f���ek�ع
�c��v��W�����yd����H�f
i{
l�����.�� �!�`�w.���O�N���d0Ջe��_��΍��
-�{�
���
3��"�K~
7��+�O�=�
�S�

��:PV�Γ����!-WٮqB�(�"���~9ɫs͑V[j/���������SP�bܣ 8��d��wz�$��Ҟ��@
��۸-���_��s9,�{山�F��i��O���
�Aeז��v
�Z�,:P7j�5ׇ��_�Q�t]t� jA�y�
-��l���38�
-���e�=z��FJ�
(L:M0��鿱$#Y��_��e��4���ڱu�
[�s�#:�y9Y�:��q��Z�M��K�.gW�F�X��-z���^郬ν�h4����L8T�i�}��2T=
}�^�
��~u�95�՜��"���A��
I2�*�d��j��%�]��@�
N�qU�q��X�t ��ý�`�����7K[Y�=��~MKgs��g��
IQ�l𢷿�W,���72g8
��!�	)� �
�
g���is�-5�cf�	z}��5X<�!���{[M�[wQyC���lՋ��kX]�'�h�,H��-j�v*��g_������=m��s
w+N�6'd8��Ni:��!����
�D�o����Y���Z���M���f
Ek���n�I��
��T�+���1��O��s;NZF p��ƅ��F��������1қv���_`�{>V��͇���~{�_�=b'�eކ*p���.yK�5s{+�f��xu�"�%��
ΕGs`��b-�ƭ1���?u�L���3��5w=�X�̶��~�A{��"\��
���Zu�(9~�cW�חx˹�_�d�[�Ƭ�=؂ָ��R9��
3�r\�r15�s�q�[�Q>��c�.��
�٧3��}7��kۨ�\�@�"��#(J� ?\*�����ˁ3��>���:�ޯ�g��d�F:G���4_
-�
��;�8��qm<��9ܭNG
�Z���d^4,��q/��~��}�e
-=V�������et���_H
��/
.
˿H������'�c��Ȭrܯ��n[�ћ�yz��.�	�mh����mΫ���C�Ik�{�j#�im��5���
��޸��k?:���{���g?�OQF�&E��۹�ݝ5�6��}R�R�~I�ٙV��4#(��V��ϐ����
vyLݬo�g�|M����������û�:�
�2�����l�Rvocx�G��쑾A~�u/v�����C[e�T�B����)�X;wA*+z2��|dB��dM�Z`�,��&!��Z�I�x|��{�^�y� �m�9��͊�7���禳l
=�A��6�yh�1�%�U�RX{8�L�A��
�k�͆�
�8s]����g�����D>ye�{�5)
�Eɮ&c�| o����25ɮ���HY
-����?�f8�.��4r��v1ݭ-*�^|��l�g|���}�d�	���v�g�,M�և�.�I}v��������Se��Di����$W֯�� �H�U���o'd�o���j�����=����A���OD;~ϋ
��*�"ɬh�5&��G��V�
v+Zz��
B^L�T"tJ�	1 �W����ƆW&"�'ѧ�\��֗���eo�P9v�y�>���`��hm�?���a�+�h|dZ]�6Zݖ
��"Sl�m�"��C�bj�~0q�3
���'�j��#@n�a}����Lدg9���j{�
���i�����/0PDn�O�}j6t���@2��3��
-���H��~�k��v��^D,�V�*g��aB�}��~����,��]��,SԵXvg>���K/��C;���u�h7��w&ˍO�ҹ�H�3��؁9`io�(�õ���$1
_DŽ�C�M�&�b�&J')���|?��C�[J�>�k5�C�j�a�c��Ga�F��څ$��H�̆d����|����/BAz�>)�7�
-3+�N���v)͟���mlV�{��2�/<� K�a��U���G����ܘJ5ɍq�#طN�N���ZBO�}~�i�T��Ի	3L:�6�EAiN;�+��Ls�W�M?ɗ�	�&��~�?��\���s���q5)	�<���=s�YN�
�Y��74�Y_��@ъZ:V	���m�{t�;��3h�ݙ��b��r��J??�=n4i��f��d�r��lՄ�)
K4��J�Ưo���bT7*��,��>^�_�����9_����S=�g�ڋ�"��h�ݜ!����*O�J����̤җ�{�Y�c[�O1�/�\
y�Ԯs��ͳL��ex�:l���GKC6�]}��`�'K\d�3$.�#�4��Xl�|�A�h�A���5N]V͒z��3��K}ҕ��+�Y+��~+�
��'P�dqEuM���}`�`¥����.~�"��b�Fe>V����r���e�Ύ�U��1Y��Uc�u�a��|�Ԣ�=�E�~Z�3W}=�l�����F������קrΞUnm'0�,,�v����ni�!��V�+�Ŷ�����i�ʹ�{��Rʳ��
i��>��;��i~,��
F�z�Ӫ�z�_{�U���*O�iBwde�Y�+ssW�E����!:#2\�Œ[����_��\[�+:5|�
Fځ�@�pS�v6]txr�d䝡�3cR�Gd�����i���޸����OX��H�:C��*ll�J����k��n[��w��UJ��4��J���^�]3X�̝��9��@��_��vr� ��
��l����}K�^;�=d��"�)�)IV�Rc�s�ؼ�c~B�(��]|��s�\ʓA�t�%c|���L�X4�r��o�
U����8��J�%#��MEn��_1��!��'$�~|�/?؟�;�t��,��s=�t����o�d�A�p/$+6q/G7�)S��j�r9�6
-�j
o��Q
�

�k:y/�Z�>��k��Gv�%Sp��p��x�ə���e4�w��F;�*v*�X�8e�>3G�~�A~1�du��
~}O��5b���"��<�L0�I��W:�Q2H8_���B�[�ĜX���ըd�[��\�w���4�N��3:��n�'Z���*�ʰc2<?�'Z �
�~g�j�9�
�<��YG�ns�NX�\��9�Օ�#�񵸠SD�l�z������З
-�{�����
;-`��Q
�g�m�*κ0S�����du
poO����H���>�7��w��=6��R@�����������V:ƀsg�F
7�v���fYw�j�en�Y,��2�M��|H��u����0;�y���� �5@@R
�ٔ�%�
 oD�= ����>h+�j+��ǂG�ǂ��/┟?�t{����|Ʃ����zv
'�1���d�"�Ĥ�8�
5Nd
�W��9NZ��&9��X�(�  ��7���:�I������)���F�?L��oR�%P&Th
�����c�h�h�!p"�d
>N�'-Nn$8�m���;|���Q�p)�I�Ul0nnz�<�<�I�I �|�<3�� ��iğb���0��I�C<� ^	�#/m��)��6�o/�V�1r�5�4p�ğn�$�c&��X���8H�G� ���'��s��Vp<#3����4���Y��xm����?�jQ#�G=��Y85�a���W�8� �w>yFJq���qJ^�qJч8-Y�)ݡ8-���*`ڌS:i�i����\Ĉ�;�3
~u���9��6�N>�����~\9�z
S���b$�0�����@�K`��%Ы/$���H��	Tc�	��^(�����b������ҫ��� [...]
��zⅵ6JrI������{��=6I��2���(4_���}<�uO�O�&������Y�����ñ���
-�@�����c���]���^s'�ki��&�m&P6���&+�|�&�+-©U\؂ZXP���3D�ŗO�/	�]����D����A�w�1�L-��J+���/��C�v)�8w�L�
�.��~�7ƻE�:߮[����/��4�\�Q^���ܪb����g���RY�1��`s7�g�%�L�Oi����/�F�?xʇD�����%A�Q��m8�Q��{(�nY�]�f���s�U���i�����#��Ys��������.|m�����"�!��g.sw�y�>�<Z��t���S4��+�
ow�
��-���3�w��gvrϜ�/�q�7��e<>H�_���@�{�)���x)G�9�
�򹴽nK��hC��~.
-�R$𵑏k�P�r����ι�h�ZR}<������A��g���W8�O�_�"�E��N5P�ɨ����PZ���9�ώ>�:>��yl��A��
ݠ_���
	���,��wdr?إTy,����
�<݋��jshl�+
������9T����&�
-�P<�<�F�;qLTXLBV؏�$}7
6��]'3J
��!�-ky��?��y�7S^-2� �_��v��â%��S���%Ae(/��h�KpƗ��Yv���d�����`�U�'�
Vνgm�%��L+^���΍��Ƀ|k�W�bڠqFi<Y�ĺw���(�94
�maX\����i=�:n�
�~�F=#_�~�y|��|�� FJ��O�G���}�El�;���"���d�GHkSVN�Uch���of��	�²
��G!�4���]y�=�4i�&ȞՅ2���3�6<T���\�/�
��z
��)���^�I�1�r�'T���/
ҧ� ���R�u�^�S�������5{wpM��eG������F�-�Rݚe���_�gw���d���\qR-����X0��
{�|0��aƢ?V���v�P��=H�;B��`���Y��z�k0��?_u�e_��_u���M �aos\q����
n��f�������[0q�ud�Z��F�)Q�rtJ���
Y�m�HF�O*��
!O��Zk۷��~�?�.l�5���ۙʽ�
���1��|y�Z�<���ـ����P<�n{h��t��zx#�E왃�ʸ���l��9VǓWn�
C��}$IՏ���L��<ݟ<Q��]]}v8�қ��U���\Ѫ���/ZQ�b\�n�N7��]w��8whɗw�����/	���b�y8���b��f�|ģ�<�@�:ͫ
ս�>����
ǐ[X��H�l
��{X��a��b�i�
=��mճ��VV5%�XK>U�i�Z��R��a�Y裠ۍ�v\9��q5��`�F$��w�r�ٙxd�X6�
�@xг
�h�"�N����yb���z"����u-�	�K0������{�>���sU�
cZ�ˬ ��l�{M>�Fo��~6����t[HE1?��ȱ���r�b�"�|�s��ڙHL���,=G�K����
V���
����hZ�V�n�l�c�$9k� �Oh����A�ܵ7�fb��<c�
�����^`�
�ޖh���Ze�":ܜZ�ڜri�����Bު
e�zy
-�d��J���������Р�V�ߧK&�YWwlo��]P~0k�?����v��
�c��赜�m��C�L�/6׽ϳ�4a�T��fB[�N�ɃVV֦BA
|�ݼ��<S��Q��c�
&6�p��q���K�
�⾀�K�ٺ�����.�K�L
ks�D�n`/?yX�M�A�7���Z�=-_p��ik\�:�۾�b6�Ў�\
-�ycY;Wp���#�f�'�愫��-;M
L�BrL���L�v�0Ey1^����*��ml��/W�����a�Ŋ�
��M-���L
��qϰ��'N 1�t���AY���5�__t�7��$�W�^0���n�2-�*��5x��	\]'���F�9�Vs��W޽	e���@��yM�e>�A����4��r����(��S ��v̟�
�/�l�V�-��z
�b0����$�e%�D+���N���t%n����A$��n�WM�kx��v�fX��i
-# �NkFu���EO�T�C���Te="�a
dd>(�I%��&@��f5f����o��pd�cq��̳q�
v�J������ڬ���Ƶ����du����
���c��B���"�L�\��
�*��x*g5�hqN�͂���~���BՇ!4��D#��A�T��+ 7�Ŷ���M�]�7��|�'g�O��^j�.��(ې�l��Q�7C
g_��2���$s��h�m.�ޚ^k����O*
`��
�A3&�)ѩ=�
��Q�lUu���޵*���J2���\+���Tx��?��r~�Hgjw��x��]�^�N�d�Vg
f)�<!�8�e�u��+�
y
�*d���I"c�Ce5n��U}4��L6�ZS�A�uؖ+i9e+-�Ӊ�c9%2���|J�ͧ>*˭���}���^�?Xi�P�_�;��֫w�Ÿ�Ȼ�$���ԕ��H���Zea�`��S�s�5V�,\��&Hm�
�ꙥiՓ\:
0P�򎵃r~<J���z%�Z<B�8����m�9��/XR~X���]�!؇��a
���~�W�Mpé(S���N��/���1�+�@�V3,'^+T@<�u[.�q׍K��  [...]
4.�Vg]�0��C��X�^������F͢Ue�;���Qax�#�����eCo�~��T��b
��?����ee:h�����y�#0J��n�L��h�\���I���}c��'�q��
�q�)H��׭z�v(�6�8�F�mp�2T!��7 .ڻ�,o��^t
�1T��w ~{�Kf$ĥ�
�@|���Ő\�
=?��]v�k��J�����'�^�
-�P:�{�
R�4��7v��t�b$��8�<�s�o���	���&�7�m���c�'��yt�[�Ύҕ�w����L�F
�s�5 N~�,�p�hw�ƶ/����q$��牮"�s�DDQ.�_8��Z1Vn��p$���(u��g����?!����Y[��G��h����`�NA���uR�x�2 ������C�y0�8�� P�ǟ1��?�m'��1�g�k
�
I
�����q�Q �Hg18� �
`>�8�H��M�ؓq�-����r}
�o��R���Һ�T�C���
�Za���w�|
�d�?��F�8t�A�f
��.`:N�8�p[��
8�@��8��
-��e-��@p��g%���N������	�N(CP
�M�ۧ8�� Э5%P���6���C�)��8�LA�[�'���Q�j���{.�� l@��~�q�5b@,�7�
�� � �Io�{/jA��^���
��npC�*{����6q��"�=�ށ/�-�V{�}
��g�f�O��ş�/ğ�S�?87̖��1�d�`��3�'�bA�j�\�R��n��c׃�
��Qo_�<'���-U��a�W���9���$Y	"�b�����c��:���;�v/��X̚T��
J�����6P�r����"�p�f��p�ٗr�������x��'�ͬ�|�� ��:��i9�P{�$����bn�}�t|zV���C�s�G����-D��T��o�᝿����]}wZ���g���W�g�����_��^���_wi�v�d
���4Wg�i.}��Z)���kl�G�j7����N�k���u���ufW����:]P�s?;+�}
2
x [...]
-j�
-S#.�J�c�U
-�V=��tٝ_�׮����~d,���U���<.qb1�C�	N벰x����
���[ ��@ܔ.A�K��"�����l�|��J�zH������3j����v�������k���v��|��`�Ej�[�]j�OnooH��K'ކE�~Z�t��J��f�߭񠅈��h� ww/���г����'���i4��ň��<�Yx�:-4�Ǵ0��^�g_o}�ڝ�{%:6��y7�^��Y
����a	t�je1���| 3��<y
k�͇�

�����"�����7,i=���%'���
���]�-/�hi��Z��"}�r�C!}g��� -����(����LOL���
<d��r�ܺ|q
���u]k?�"��K}|n���?X̑�C�� �W]굱�Ug�;��9�7��ߊ�U��'W�a
�)e�Y�5��bl��4{*���a6��ݿȎ/�M
)|U/����q/���.'�n��67��p-T�n�b����5�HjU���NY� 6��P�}�%Xq)V-��-S_����ƀ�
��R*Ͱq��o�����A�{�Vi5˓���Ƹ@�e��4����
�����u�z�9�!���c:\_Sj]�v�rz��
��[yy�?:a�}��Q-�[$R�:h+�-ͩ�B
S*�f�S}2�+��d�P�Yc
�n�<�֢XQ�*��� Ƕ���}m�EvBN7I���弜>�Ĥ���=�֓ɓ
N�[�i��>IMr�����ko;oC�ż��o�
�3g�4���M�3׋ʘ��-'�Q~b(���+-��^EV�חt-�u	��h>־��s�/�/�/������=n����1��XG
-��z�%�y��_ sK�%��c��ްtt�2���q�v�����>^T�7Zjt�a
ʧp��]�H}�f��'Ψ}>�
-
����q��ݎ�l�d��w����CZX�ח�-��;amV�D\)�6��"��۾[�"����Y�1��;����Wq�m�G��誠(�y�[�zK�$�:B�9��&)NL&@��	�<;���y̅�w���+�����U[�/!W���՗�)�N�E��㳟��!�
Ġ����&�y�}�������44l�(�ra����u�ռ����!�� �^I��j͉�����݇B�������q���e����2G^O������,�2��c�e�%���ë���sqRZDnÛ��Ck⿼��D����-87�xw<�.c�[c���ߖ���$��
z_�R2y/�a�y��
�lyW�M�mJ��@�=�~���E�E�m�
�7�
��ˊ6������n�?�/h>�#��m
R
.�d��ƭH 1��+=׀ʔ�K�^��cU����yP��л���\l�B�?|f�<����۪uzL��"�p���(�g�Қz/�;卤Eu�"K��
�3СO�-�����#<���n
u [...]
������ Uxj5�t�t��aB
gK���`����
��z�,z�D�.V>֝�
�E��/���6�ej,��B�JJI�!D~@�}���o�;���	�9^��'M�8�Zw����>F��
}�u8ʽ�^�Y>�o�v�J��a�ơ��z�1�™���d�`K
��M���F0���Q<d>��������,���Lsv��b
n~��`B�lSh���E��nSf���c�/v�dOg��h��A�6� ��
��	?M[O�*� �WkH"UaQz@�d�4��>}R�~Q��~�$��b����<��i�πG�/?����.W0#���'�
�S���2�
��PJ�
�G
�4F
:Qq�C1�Fn&
��>�h|��*縎��A�#tNΈ;|d,,K�A�)A���'a�%+�
~]fo��k,�a��
��C:r��3�t���/~o
�n�c:{���Iא�����+
f�UN�X
"K#G���5��Ӟ��{�s3�m
}m�,��4�$g��Na0 o���7X�D��� ���n�]�#
�)�p;08�A��C~@�Ώ���]��6d,�&����1���Oթ��dM>K��N�!�
��1vh�I��1�^�"���1(
/�~����q�|�G��
�w��v�ݡV]m69t�O���c�"�R�N�Y��6P>�E$
[��B-
-��|(ΛA�g6�j����>AÎ�b��9��A}�E���-–,`���u���T��!� 
:�v�A�;���K�a��~��t�=R�p]��#nAk��?`s]&M漫7�pwبY�Z�cȦ.fٺ�äzs���c<0j�5�a�fp���gYrל�lQS�5U����_e��Xmg�����(��}`q>�A/m}h��JT?��S�5�?�-O.�NdԮi�
-V�
i�z���ꌭ��~E<V
�\�bz��"
��O~��D��3}g=L١��?�F_�f�b>4�w�zi�e��<X����hU���s�i�9�	���3��R��
q|_o��M
�ai4(�~��*�_��:I������n�V������K
��N`-�J`m�

{�o�a�VhՄQA�CvaɃ֗�
�(YY��1]���
��B`d�]d����S�a	{4�
!�u7QTv��?W`
zF����p�]��'7��*��6]��4( �ϔ@G�e���Ҵ���

 t�e}X� z���
}ߙ�1�߲7�]�������V'�^�|��4��:Гci�Mv`V�����%f��2����b��^ �f
- V�5
G1 SO 
%���3���2��]�+�
��i��������_�I�	
&��s��P�7�柟^�k��v!����\�\��Љ�8<�f��@S}���
���U�+c�����j
��� ��E������>�3��R���
�+#T����s�S����lIc/�f�
��H�2p�׫��5�j�j�S�����%V�' C7; ��c�����(��K�F��S����ٶ��wY��?m�D+�h���K!`���M�������+b�$o�J�n'	Il3��$���Km�$5F��qʞIחt�a�2����"���2�fF<Hf�d<�_ˎ�'����*�~_��lߋ[�b�:��ɻ�XI�4�,��,�Ze��,�f!�hg��
������3���U�e�t��dᵲ����e7q�92����Z���y�Ư��=�4|�����C򩖂�Syfa^7��`)�H�co�E�e
\�7I��Y��;
��g
��u���O�V�
r�O���S��_.)��}���O��#�~W{T���
!��.$F|�;��v�������^f����
)ӿb}7���Up�}ORV)$i���֓�
4I�	�)I���g�,��o^G
���<?KM���T�}��2xo4�ƭ
E�U����VX/�O�?�;��}�9���y�K�9u�y�Yߌ�]���N�ԍu�����=��ɻy,&�bJ�[y^m�Y�t�O
��n56���Ļ)���oP݊�����^���8���y
d"�'r
�-������~�	���i���p�S+��_d��ѵS�U0R��zr��5p��%gqJ>�k�*V��C`F�[
@��e3�_�{�8�Nsƻ#���~ʽ�y��]??~xd���=������-�iEW��0[��074\�
�ü�[����)`r��<{T�S�>q2�e��p�Pap|L���z���s��N
�F�ߩ
��Ng8ԑ��\!���D�%.o�Er�E9��8;i��C�x��aa����_U
H	>�X��M���/��n�?d���/i.g-�\ml���p���q
��2X���/�t��,b���������I�w�,mr�B3�%x���j��W5����>?у�X����	�=�����=+j{/�ݷl�nNg]gt��hV�(�����⒍4�F��������q��U�=�<{�׺ld�Sm��
-��X.D��z
$��^�r͢-��><�u��^F����S�u�����o�6�6������ʈ�@�P�fVk�8�z��_,��
���6��w�N�8/
�;F���V���4{[|��������Xv�X�x��>�'���
-��K1d��p��ksc	�G�D�9S�dz93O��75
:׽	�6����J�f��=�닩/Bw���w�c�g��+:eԸ����y/�6��Ui�\�Rw����SS�#���
��޸�a�3՛ut��վɠ�f
�κF���?�l�X���r�������~g�SO舘p��n���V㞥�Ԛ�e�������4�~�G(�BZVvf�m��
-Y��}�[�V��������	q�i���Rq:oya�q�<bc�z<f�w�L���4͡�gXc��n���z���Mʗ���$+.U�.u����l�⽭ξ�_������(��q?XJ[oIQ��
��d�Z$�C��h٩���\r&�ymʒa^esf��8�.�H_
�����Z%��z*+Ұזc�@����R�#ʢ�w��k��&6>�
�6<�2�V^��}Q�(��Mx��;����	,��D��/��r��z�['|S7���%Q��.����Ⴃq�t�N��"����e�P�J-
<_�D�[v�ѫ���w��B

��F!_DӔc�3�U&����_~)
�X�x
�9�q���Wn�h
	����
wZv�6���:�ǩ�x�ʳ�T����j�mj+Y��\S�w�BP�-F�h�������ytJB�\o��
�r��2l�M5�����Ab�L+e��n�?`�A�/�����q?�N��{�-U
��
͇
���n�Sl�۷�`<��}Ls�δ��V��r
	A�G=]2؞��s�����;���,��ɗ�C���a���O=F�j|���
-
=��g�/�zt_ڈO�L������G�W9�w-
O
��y�������id��
8�7�\4u��g�ۛ���
{ɓ7|1����n�|�e
�ZU��M�~3
-+��:%C? }�[���E���ϩtn
)�!�
�|�/��4��}�p��
gGSe��~�	���
:[��{� z�Ʋ���4��|QɲdRjO���hB�MA ϪΗ����B|�6wpĨ`�<�?�m<K��
�6�7�G(B�p��L��
�z"Mb���$8P��
	6y�
��/�?\��ӎ
�~o$���
A��4�4������$���.&�G~��`H�·%��=,�R�2�sL���x��������t����C���*I��`kUz��8}(�>�a���
k�;3�EMq(T��@�p�c��i
��m���Yo����W�^��������noV�X��Ix6�C3�q�s
�?1��G
_W�~�N�(�%���-�wgg��[)��楡p[u~@��|RxK뫘z
�X�\��<�05x�_&X��	_�?�u��B��u#�e�=j�m�4�ݪj��zO>� �����&���
�h�9�����:C�9q�Q�8�4�*��9�LB�[R���A����饴��g5D��TD,��t8KgI��䱹d9
�p�<
-���b����U\�M���:�VsdZ��W�"�nb*�ϭ#{��-�kh�� 
>4&<k#��
P�
��<*�eղ�k��Z�&R]�V�b�Ѹ��Z}#��>H�"2 ��0 �c���Ś$����r��� ��A��"@� ��xv�Li~֚�o>�B�1}����^��R
-Gdh�z'��HVj+��36����o��]^�)w���o+�V�� K�^��R.��
��0
o��v޵{��j�	�����iFU�z[�e��AE��=q���`

����E_��Xe��)�)��T��:�I�~�a�%Ƹ�nR��������K!P7X�Y��`�r�A��{�1�����|�E
��
�A��.���i�5;��t�Q
�tb��tl��tT$�w�5����F��*te�|� ��Xk5'}�+W�C)N�d��jk��nln���u�dc��`C���V�� ���H��K/�.�Ldݗ�[�cj�K�=vz�9�
��_9c�����.�������H�Zn��F'�P���;�Luv�j�n�ɔ}L�?�_�}!T�
-3[zojY�!T]�/�V�8�xW
��r�\^Ӵ3]?*
�ku�G��!���� V�vR�[�!�H߸5�Uj���l�է�`����	Ԩ@,�(��q};���[!�_����S)�
4�%Ǣ_��\�iW�\U��`rCmU����z��\���
��y3H���•�z56�*��
\�Q�H}�>�XF�zck���$����̻z�s�j���
�%qY���z�6�Ǖ�9?���$ùf����/N�����}��y�^GB��
ƶ �I�
�0�7|
J
>�j�����5x�fV/8o�_�[�1~]���W�i�}+?`ɛm�%rT%Kyp"e|���4=i�U.�^�ü;C�P*�U_�q����wb�tS�Ɋa"줼�.����)���q��L����c�X׍ڹ�V��a�>JN/��YaW�{��Z叵�!/�G�
̷-ʝQ���傒�ne�M*w�hD���
�c
��G�_��u;
�7�_�V͹��7��fg]��v7f��	ǟ�&��<H��R*���얨��?A>w�叧l�c��90�%��`p�. R�  i�� 2�q Q�"��O
 Y�w 	����\!�D��˛�e��?d���h�
-T�|��s�R�
1�W��Ik���b���ָ�j�4ؔS��,2���p��M�x �2�vq4�� hM<(�����}��޼��`�P�!� 0�vˈ� 6�p �� �; 
r2�Y��V������
W
��;a��y\����4/�Z��9�s
����:�>�%�V�
�� @�b�W�k��1���a���<`/���� ��"���

��	6������[
����� ‛\���S��-|/�%��
��_��f��U#�%�q�`��������_!Y�1{��>�֖�?��U���0�)�r�ٶ��$�?���N�
U�h��,̊�O�6
1~�o�9���(�o5I\u�$�$e��$!{��-I(�[��C�G%�����%��J�q%�AV~g���2��E�g����W5֩|W9�ϣ�Ż��ɻ�ӓ4x�IZ��,B�Ͱ�,��w=؄4NY� �!6�3����z�v�..2��`����v�~��S�|��^^���蕗��wᓾT/��z�!
\�O��L��0-���F]rY�E�F}9Y��.�����g��,��W�:�L���e-�EF���O��4N�'}L���\쵕ޣ>
-ޅ��x��e��qk-��Vxm��U��?I�׹�'/�o�
��
gѮ��m�J���
��:x-��4_F��A��
a�ݣވ�
wE�
]�I�k]OC߻j�nu��λ������a������2'�dM�Ewa�ycb��$��\O>^�b-s���ɻN��N�9�&)�n�G�}��c��
���=���Mn��k�ځ.��??V4qF�����p�M5^XK3Χ[�8&.ၓ��>:���1�F�3�L���з�g�e;�1�������M���KY��q��@Y�WB���YȆ�	��Q^���o���ܼ����}r�30
��ڑA��x�8��~��ؾ	j�Na-.:_9�gs{{�� G��W��
( ����Vl��-�N��
�Em��I>�s֞��׻Xct�X��]%��s�Y�m��Ey�g��M�e��A#��BE�y鲽o�����U�wʷC���a��"ִyfW��TZU�j6�
������l���J���d�Y�P������������
 [...]
��W�,O�v��)�?�0���p,��񺖶�
T�.B!��J�w��j�VFA�ё�FZ~O���,D�����7�=@�X�9gY�J�(���u�ط�R��o[�0�i��o���4��	m}��Wؙ���� ��/�L��4�k�i���W��?`\�N�
���O�mr����TX��X�7����h���:�����+\η�`;�SQlI���j� `�Q�d\�1]Q��Q�G3D�pj?���/o:��!-h\�ZQY�j��/��nY�i����xELN���f�3�)���j^sA�����zyN�/9�����6G���D-M�v�Mm^u��W
-f�|5��h�4u��c
-�9}��+z>Q m<�q5�o�Z-�M%
-ý|���r��)-R��$���n�HsǺ>�����N���ݕ�d����~�T���bW������7V��y�����l�+�ԕ���s��v|�1M1��
+��j�?���#�������ި��Ma4р�p�
K
�0!]k����?��S�/�z�]��}�}|�ej�p9
�+���|
�/��;O<XP[|��+�0'�Ns��A��i��KQ���P��őc���!����s����T
ȭ��aHp��Pȵ�����ނ�2����Ǭ
-�
�1V���h�vک�O���ʲ�V�-�~Rq��!�7���ԓ�zf7��i6�̲x�βq�R�eFr|����iS4u֛��l(�O�Q ��_��<�a�c+�݊
��Ŷ��5=a$���V�
~����@� ?���{��я��s�A�Wz
y
�Z��Yb�s�e�@_F�A�0�K�{��|:�U(��C.2�Dϋ|�хE���Y��0|q�ɮ\�����9���p�X݆
}m�
z�n4�^ �0�
���!�|�r}Bs}�
N�uԘ�����;��j֏i��5s��^:�R��V����M���'����2r�H�F
���

k�F+�a�om�Ȥs
k�����H� Y萢7г��CJGjX�Z/�rF �����������[�J�Dt�ӎS
���_T����S� Y���!�f��ID���dx�g�"P�a��(��>�1��s������X{�Kzv�F�g���PI�SC�m���mHR�X!����U�X�d��2 
�5����9����%��(���E�;?n��+�چ���s�rŧF�w���_�*JK�&.��ݵ�0�CJ0T�ƽ^*ӆ��繰�Z,ݥ�(��8��!V#�F��.:�qX�E᰺T�Ճ�}/?E���C�������ݕM�iS��������Z��Z��t���'��H|���$W8��է��
���1%��`��
�6+�6k���.���V:�9Z�����m����r� ���
S�Z�bJ�1�E�/�x������ۦ��vj��e�*d�x�;P/��M����$G�s��3vo�on���cx�d#
����+�
I�"GAB"X�1�����+1›��
��� :��.�{�
bR
1G���O���
)�C{�zƲ�����ӉU{�#9
�li��3oႪ�AW���o�Jy3g[��l<��<�j����w��_�U��ɀ���P,cD%n��I�&�r��b'�F�Xg;X�� V��
�
�A�?J��/*�\��_��O����#�=u��{cfy��(w�q��{Ӣ��k�u��a����7�%���,M�Џ��x݌�M�O���.
'�u
?b� o{�
����<�����

�汿���~Y7�[#�q4{�|���RcхK�E.>�<�]x�p:���I�|�19��>4�ޡ�M�f^B��}+
�J�MQWU#x��
�u��K����~��m%�w���C� /t�"�nR��	}?�>8�]�1�Q�w���
P+]q�]~��N;��t��	�9zr�s�rP��}��4�~?�q�*��f�Ԍ
-'��%��į����74V9��u�"��T����S�d��&<�n��/o�Z�HWzpXDp�2��=�g��4��s�,W����BӘ-A0{�͛���}�h�ָ�6��N�D�P�l���_۔u�+�Z��E���ݖ��eN(��+ӛ�j����/�
I���/^�I/:6�^B����we�z�'�|���j
��t�v��٧ȵ���ѕ�h9���Pu����f�
L�N�4�{��6�ejf���R���!l��d���
�j9m���̳�ٺ�>��n��8 f�j�h
'Ѐ�ֻ�L[���Z��f�R+Gw��eK��Ӧ�u��X�a��9B����u�Dn��%�Iu�Uk
sl5V��j<�ոZ��1P���������Ϣ�2�\���;��3�G
87����I���=�]��5g�!���\Fo�^�z�Z+Xj���nW5�V;>�\���2�r�J���ˏ�
/[j)˔�hGsKɭr.9FX)
i�*%1(~�b���ϝ�]���s[�̧�F��;��|g$R��]�R����G�̿�p
iy? �`�F3pt�v,��J�ܢK@|`�`%��ծ2�|��;�����`a���Bd�F�j~���bpJ�MF���
-���.͋������y���6z�PM��0ML�'���s<-�ѡ=4_"Z�!A��x���+���ⲹ����cj9{[
�%�g�J%b�-ƚ ��X����1 �:- x�2� ��R�
p��2� ��
��\�?���sF��G�_L�(*���k.u��!ʻCF����K�\�V�o�7���C^�:�k�q���$&â��*
�Y���I���
�� c} ]�
�^���oo�l_��� �]
�x�����s< ����R���)L֊L1�P܆mc�'U��F
-��Kܬ�װ:k>��b? ���z�}�d��9e/��h �$� 20m _+ 1�
��
�� ��:�N 
@
@w�
-@��
@�
�>�*�����6���Ʒnٞk�����Gcv6������`6��f�d��Ѣ��<�nP*
u��ϗ��ݗf b��w@���<�P�X��I��R:� 
� LQr�p�YpP� ��H nޗ 
�/ _��ǜ�'|�)R����t���~�q�1�2���"4�X�,�����ݘ|�se���"�H��S]\�
�oPf�w�V�e-�*��n�S�;�Ϝ,�]��I��m�Z
a9�֓?��_���!d"�+0D���k��@�.'��R��d���[t���ӓ��-3��$�ʹߒ]������"��
����U�������X��Ў�S��	
�������ߵ�L^��P��(&�N�0���
5��xg���%
��ՌU/
�D�S^v�����I���W�q�/Nѻ�>�2y-���+/&�g���Ϣ�
as���?*��|������w���e���Y�a��و��b5�o

��?up��8�
��0g�En��+?)IO�X՟E�k= [...]
�x�{5�`Oj��
7�y;
�ޭe��U�x䵳�2�Ya?����z��/�o�˫xe	z~��G���
�73:T������ʾ
(��0f�?dy�w��ge>y�k*kV�N8ų�������_�ƃ�����/���;�������*�_'� �G*�b�T�
�n�},
�����q�� ��
�qtbb�٢��>
6��� �&���%p�	���b
�=���Zc��t�g���.yL��1%��5���5��O ����2>9^�ɧh
�[��Oڃ`'Xi� �^O����e���6-lБW
���
�}M���0LVc[1�M�q
��1;.�F�G|�k�~�s������ө����F���C��g^�R���u즴ϝSJ��ǒ,��#�Q�s��Q��Jf�eH�=b��,����S���ڧo}��\�/�B���u�!k�-��=[���}�{%��a��y�^Z��_�m��o=��#^��Ʈ�F�v�� /)����sw�u����Q
�KZ��m,�YJ�X���d������µ�hF;�7V��
?��'u����
�'�
�<�m`E��3�
2��m�8�^���)dh��6���K�y�L�G�덍�Sᾪ����{��"�&a������!��n⟌Ay1S���R"�:G�u����a��;�@@0�.��ڑ���rj
�s�TJ�q�6P��Ȯ�7�aO���+{S�?�N`uH�������-|ߏ��8��Z7U^�
9���-
�&�
�mV
��Ÿ]�nX���{
[�⋰��w�>S�C�qA��s0gv��l�3�S��_�X���^�\�s��F/��@���l�qQ�U��ڤ%K]���[���׊��M��-�<
Ziw������V
<{y.��}{�Ļy��~��S2�>Ҟ=�:M:5�gS^�����1{����ъ�e�����D���T�����ԐN�5"���(^��N�W+pb�o��@����x��/�ݳɞI�HDOP��|/��y'q�����;B<��ꫳ2�p�&��G��5���v�R銩
���h��F;/˲^1�ӽ�I]^��D:����N,�P����C����)�
������<�}�����rW�2s؉��T6�P�|�s�3zd�
�1��h:M�
O_���6~�*_B���7e��ٙ��9��6��,L���NЏe	.,`
�x�ܹ��s�!k��1b��:gv��bD�3�׫�4�K�?�~��B�ߟQ*��2�j��٩���a)h3{�u{:|�m���j [...]
-��c��n'���φ�;�
Va(�'V6*:��6&{
-���Y��G�&����dQ.`����{ۢV�/�ݞ+�3?��Im(�����fB��������c�"X�m�^�0w
��fB�RD����BCߪ�E@��!�f9|�O5���\Li���Y�h�n7��5����ѩfc�J����a�����9�I�^a
��
��eW��Ԍ�~�'.��qUG`��3���!�櫼N�!ҧ�>����N��+ at 0��4����aM.�p�\DZ8a��H�~�l�ؙ���y���������;���u�]�~��B����<��e�n}}%A���b ŀ�b��#��o�~z=�z׷�\��h�B��c2�����N����6ܔ0�0
�}`
���~[�Nh#t�]�E�\|�
�0�ܒa���wFD}��3Ol�-��F�͇Z���?��°sJnw��t}�
-�ļmq�%���aG��D~�%2�)F*���G���G;�/>����x\�������6�t��n4a�XmT�!�e�*Z1&CA�+ɺP#<�V]Pj+�b/T�/���
z����۸��d�M�1�t8�
�T� �+��
�xt�O�*\?���f�UEd�uk���%�1��>`��0��y0=fZ�8^�}F>ӭh	^���X!�Y�F��3�*�!j��$g(�U_�;�qI�5�Y�{�������1=�
-�Sr��N�Kw���,r�Q��֠���J�����nA�w�ggG]�J��h앺d-@]@�M�/�f������Vւ�>�}i�ͭ4�k�\WW*��˵eL{gK�<P����*͇̗[���-S��Y�n��뗈�P�
[{��l~؇�fj�1�����tZ���\��M�'d�$�c�����o�F^��Oy�ɾ�z%���j����y	S
Q��ځ���{��t�^W(~7*j�IK�.��
��0!8�#�Hd�J[���_�n¾A��L���rDƕ��
�˝T/8�
%E<o<Z|

���<b^�L�*J�l���֤�����w�������/���ClBz�ξ��ΎD]��+;ޮ���;JF�rg�QNfXG�K����N�u����+m���Q}�u"����5��5���s7����lC���
���ݲ1.�
f.���6�o����2bJ�f��d������+#�[�Ԝ.u�e�h���p��L\>���01ˡF*M_
-�
���G�a'�"9tl5��B����/$���rz��	
;�
-�6��߆�(�	Ԩ�
-eU�\6b�z
1{�5��3��5���9�?���B���h����Q�T�E�$7rAmb3����ũ�ۚ}!�ﴘSRԒ/)˥�g/��� ˡ0����b�BΤ�C9sWM��p3�

8r޷>�]'���T�9
ؾY� $8^ �I�m��OW�v$��@�>蘣��Q)�p�>���R�G�Q�<�
���6;
�R7�f.���,�Jfz(2
Y�K�bK\��7_W �H7 wt	�s���3�3[��%xT�
� �Wo�'�d]	�
�|��<��	D�/Z��W\�
�V��S�0�L�M׻IP���(�
QC�7��`�ƮĦ�N�hɼ�bj��U�o���Q�w
�l%�ց@L;@�
-�:���
�)���Mf�@D��'�\[@L�o fd
/��
��d��dS��6r�4#����i�D�rNlZ� �
-�:śu�a��d�% ,�e �S���b�\b��1j����D@����׷�w��
=u �z
�Ec	d���\B4 7� �;�g���@nq��JF�˽�"����/��gL����cR��F�
I��Sj�j�O��DH������^���n?
-n�8�b���y
-mA@)_�@�:PQ�
T
-YU��@-/t�6���\ou8�:����*��+��6�
`��������]f��e�Xmn�jk���j��/?A	�z����m�
y�N
�ԯѶ^�O��@�
�D���d�~�8^����%�uHO���ql�F	�ߛ�?J�'��RB?w��˿�'�6�O}��h;k�&/cu5�?�\���{�*���7�?�f1���W�~o���.�O���*���Io��?���w�.�|͢S������ǻ
-Ec��P�<ܧy�~7�
�6g�ĭr!���;�e
|!���a^}�ͤ�OTJ�ף��ڟN������qR�eaF�
�]����ns�fްV���\W\�~%�~법f�
,F�v�����9u�����[豇��C\︇������
->8����_��Ӧ?e"iW��ξ�K��?��x����.gw���^W��r�
-����l�33:`�t�o�{�7��7��nQsR���Z��3�|w[��dF�8�\�]$�W��������<ז�����"~A���Ipq
h�9�4,�G~:��:�r%�Y�|�s��Y����E�𠮳���g7;�
�X�x���}�֯����+f~–��5���^�B: �<`�R����X�����3t�çs3�M�ȓ��
���A�"*b��Bd�4�x�LVtq<��4s̞�� 9��znol+�vΩ�z���ʃ���_��
q���<�ޭs�[�DP���'v��u�6��40Y��̄�w���])�N8!s�D���	x�ޮ�̰7��˶�Q�yè��M��3;n�N�w�Cut�!�����⅜*���`�g�n��Σ�6�2����
��^xc����#����R�w#aV��t��

����`�VEF��g�G�ψL�g��HW���GO6L�_��Q-�_�
-�ܯ�3^y�g����4��vj	��x�l�_Hx��r��s��U���R�Sv�/�f��DP�$�=�ޘ���x�[j�{��i���-��օ�~8
;�
sm_��T�_Rm���'�������;sRo�������n��X<�x�q0����)n4��ɲ�#	mo��etL��5@�w���l��c��U��_�V���_H�ˍ�ι�:
Y�o!}j�9�݊w��1y� �=8��if���ݨvz�d������cw��`���y�p���N�x�z���
��@a����6����ѧ�ij˶�Ӆ�����rm��SZ�ּ��S����WL����'�2��
yod���t��B�<���4�[�Z#�U�
��\n��/�VϦzL)��G4š�{x�_�������t���Y�˥�Q��*�[/һ$�%��=^q��4��%��0߰AZi�c�t�l���B��d v�
5�

_�ގ�����(��ׁ������ԥ���u����y�ҩ��[n��ZH����aA�E}" :>C�εn�G�_o�����n���`� ��ݭ��d��+g�L�"k�S������E��cy�؃�Xo�[ƴ��N�飊��xe·F���J_�����V&�̵LtR������Z���	���2ȶ3��޶��v<�X-c��=TE�����\7#��X����Ź
OG֯�
L^���p�
-yтqZ���J��&�J���W�㢜#������������dK�S�ӭx~N.�����h
i�'F移荌R�s��h4n?G^˛e��f6��\���:��NM��{�<L��!��=��~����δv��
r
��ue"�s�.�F�j��=�5[�5+^:�cQx P�>
-tz%e
��~5�~��/|!�9
*��푛��$(_�S����Vѕ��z��]jZWk]��
9f*6X��U,��j�-+���T��ԣ\`P9��X�J�y�
����
)v��J�AD^Aq#c��o
����=����֋���8�A=��*y�`����<����<E�����Q
Ҩ���Kw��R9B���\���s��)��뜌�uؘ��ѾԤ��yjo�&w; E_>��0�
����T*��t��>����*i1�2�=�.�]�
Q�\�I_T>��qT����.��qö��lÍr�Z�!�f��k���Q/�5_�L{�؊�H�؊����إ��혧�;4���Hz̟�Ǣ�6���؃�7`�Q���0�u�=ZŇ
uK�j{�\�\
7��*��
y�*�L���
?P�Lx�`%?��86mJ61���qS{s��L��:��ը�	��	fJ�iZ1�G�T��N�(m�A! ��
B;���.4�_z	�m^-��vX�A\�
Q��iE!Wq[���Lf��U�LV�HE��<�s��i� u �(�o�����&�y%�]
-��Cz�t���vs�u����6C%ߥ�L�t����BP[�;N׌�&t����Z����Q�ޱ�pJ����r�|x
����ԙM=���Ǣ\P�>�B�_�`�Kj!�G!h��B|B��v�#�ȍ�����#h��׺A�վ��z���<��EYkP�Wh}�.*z��W�����J:Pk��
E͝���z��_rK�!R2��$�x��P��
U�͇��L��bf���ip�bc��>|���s��
/[�0����l"���b�n���~!�Y�N%�
E9��F�����^�j����)_Ph�\�Oа+����t���=����7������A�i~�:�_��r6W^8}v�Z�XkZ ,�`��!����3�
�c�-k��L�ԃ
�T4�
o��\;��&��~uQ�8��27
-�2�4������vV�6MF�,>�ײ��+��ž0�[�0w~2��x�J�\���R����ЗX��T�z=ס��΂n��'u�ny�}
�Ӭ���ԩomizWK0+o>��=X�7�ѓҤA+��
�f�J^kۦ�
z���ʾ�'%���w�:?ͣ,�$����*W�6
�r��z�uDz������U�o�>0�E�,u�J��
٫ɳ|�����1�������Ao�����m>A2����lUR�d]Y7��U~u��S�bF����ͮ(�È�*�s�F')�/O�G��g�f��E]�f���~@	�匼�^[R�з�siC������I��\���9��
e�z&��$҇J�H�-��^"]�&��k�<6�Hr��Ts�z�_��<�U6�r��#�1PK+(�NM��Os
!&��a��`�h^���s9�z�U"*�
����D����W�ⶶ|�D
-Kg7�&�%�k�/�)�i���v�͜f��95+���d��у������A��LF��=�vD�b�cwV�(�/��r�`J}Z��r��2{%&))�es���
���#=�yF��Xh�f��g�
�tT##Х^�v
-��^
�r�x�Ox�C�H�Q�rj� �X#�C��[�%Ő�D�3{���z�]e�A�R��ޚ�c��<W׈;Ojy��u�����KB�F�l��(i:�rS�"p'
f2�vF��
EƗS.��_
�H���r)����� ���
Z��3��0�ڤ�d]��-Q
�	�F��(�=�
�.~oS5�إ�S�]�mh�VO�8Ec+�:¼�T^}�497Dc �
q�
-ԝi*yxq��<�%�
���:r�
���
D4Ghލ
`�6��^L��&h� ��s���`�.
��|zz��Y��Y�Ln��M�k���
Lop���\��c!f��a��qSk.|
J�����N�N�&]�#�����\���C
��G=�r�,`�Q>��
����{޹�8<�
�Ng@�

���eai��J>0
/��	pe8�%X��<t�SB^ٲ �c�z�v���̒1yiB�/���T�k��n�3�z���[S~��6JӀ'�
�%�O0To޿m at 9��5� �;rxrB^�$8�@���ٶ��%)l���:4|
�`��]#k|���Vm8�\��v��n�g�����S�Hh��^F9�m$
JYf�_=Y������"ڲ���
-��
���"��XiN�8xl��v_@*�$�zOH����r �\"���s
�����Y�gz�m]�RipZR�vfd0q_
m�Gr��#���t��7,�j)����'Gh��\���o�
��[<?�No�[ /�?!�*�e0� en@9rg��p�X�j� �p��d�8F	.���L B
.����9yT68��'_�'�^ף�?�ɟ�|��_����J��
��,�K��$�&���Ʒ��n۟��}��)���;���2n%Xw�X;˿����c��n�������q�����֟�?	<�>V���#$������E�~�>:��\����GQ���omQ;H�����M��ӯ#���1�~r
�J�F��xW���XU����4N���;��6��[�
ݮ+�����G]��d_����|("��;|�cX�QG�K���U�(�n�S�SۍOz�G�m� Z�az��O�M�6'���m��}ً���W/���<�W�̄���\�['>���� [...]
��w�����h�"��Bv�C���A���v���/��Vj�}�g!�@H�nu��O�"��}�E�y�\W�4��}lufF���O��2���/��p�
�ir�v���҆=��
��+/��-϶�/�m�X����N7a
����l�
����i��'�8��P
	��C��U���e�Yԙ	�ұ���C���
j����t7D����&\1�d��`�rqs��B�E�y@/os�t}G!�F���>J���M熩OV%�6q2��xk_^cr�c7��~����?��x�!?�
�o�;jS�S����o�}��Y������^�KG|q���< �r�;c6�:X���{ט�
-��ā����cr�C/�݆�N��:t

o�av(��B(%{��� ,�Im9(���Ь����9�����2���}�ٮuL���t�6
Õ�j
iM�#�Z��~�8�F�x�-APx� ��6r�!�d�7�y�4�.�
�]����uo`��~Z�L�%����+�������2����~�=t�]*��;����ie{������rMþ�����.*m�+����
ޙV��
okA;d�i8�Çu��s 
�5(�(�?Sd��^��ET�^��~MK~�y�u6��҄~!��k�ڗgtmwG�z@��4Z}o�ew^��愸����v�}LИ�0�ۣ��k����Y(�x���a�B�!�Ț��vw��2^��~����p�Z��k��mą�s�֠�tid���l���z
.JKͦK�k-�=Ct��dN�����|7���q�`Ӫo��N���R;H��Hz��my��G�b�����Smv�Q;��� �դ~��K=�D��~��uڑ���5ipk���g�vqsj�R_Hݾ2�y�7��Ȼ����9�_�o��N�� [...]
-�zx�����~T�9��
ץ �ve��Ǭ���e�(�Z�4�2w;�
-v
�eG�F�\�-�.v.Q�^K���k)[��=�p�WjA�!�&R�
143Z������0q�jӝ��L��A��l�Z17K��HG
G�ŚA��k�h��z����V�*#�ץ*Yr�����ri�S����W�&;W�nv�/
-���������1dټ�%I/<��6So--=�ꢸ��ڦ���V�6<S��s���f�`������t7���l
ﻢH��q߮�Ju�~\�*��Xe�sI�b%_��"g��V�x�NQ�.�B��
��/��z��v��W�X/:
X�편�a`^�:rQ�s��Rk�cy����Ƙ�ɴ�5eZZO���M䆹��'|�
-�����v����l}�ɖ�Z�P�+��K��	2[�
+v���_e�%(ec��F�<���9ёXh�@�L���K��V�Q+�ԡ#�KwM��B]:���7&q;� ^���3W���Z7�0��>�s!��/[��Ę��&�X���*�L�J�8���3H1F|;g��1�1�N���w��au���vi<S	�Q��I!��Sn�T:=-R⹾,���%�4��VP
/Ϳ�ÿ
��A��	1��>/�e�x8ht`����^Ev�u>��Z��A.oZ;�xu"��f
`�n�[��a�������D�TU�WC!�\O>��쥺K�l�wI�u��]�U)Q���E�{�
-o\a���Κ��2™��ř�Lș+$�&��/Ω�,���24���U�Ѕ�S�J��	��Ԝ�ɂ��4ݜ&mļI��sZ!����i�(�ٺ����#	�9oq*{=�@\
��:	 ��0�gx8��R�*�����fY6-����Ս�0��iĬ���Y�6ɖ
Yl�MNs�i ���f�
L�m�ܨ\!f�d��� 	R
m�R�dq#]0����I�˳
��#˂v����]�p
yx���
-���+��.�6�fw��1�A�:
�n�pD
��:z[�:Z�:���:r�!M�	�����x��]��VI�Gu�Y�,46��a)��'(�ZVf`��Nޒpf
�Ѝc~<J#<B9n�ux.#:�x
��5�,nK=fC�'Lm;Y!�ڜ��)�N�����D!�
-]'��p��{~��F�K�|.�{����F�J�Fx4�9~�
��fe�eL�sˉ�8/��
-��G�n���;�������7C�>J�ǻ<ݬgE�!�u:��kA���C��'蔔Lu��ɤ�U�8�{s1g���<�!a��/�@X&L'�	S���ŃL
-����A��sz����yb�K���{*-��w*/�p2-�:U�E�탩�� �JJ�
���B�Z�L�޻��
��B���Vz

1
݀H�A����	�6K���<��NW-a�������c���1�v[�kLض=O`�	�^������T�R{�^X��Hü�g����Z���H$��;�b�fS�.{�k��H/���� ��L��<��a����V^�hΪf�ױ�i�����dy��<�[��dq�A���I-Ti<�ȋy�QEO7ѾU�}]��V��u��ͺ��
#[+���,�mIǐ�$��KJ5(������T�w^g�;�)u/ؾ�
�~gE��
D��M#�`$ ��RGF<v����)<�sG�
�0�� U&�a�4I-_�B �)W�J5@Q�
`�@��u���G��G�3{��)�+)��%��f�p|#hNΡ�Q��"0<�׺�{Z�xs�K��39J�m�SN�B;.ā{=��������O�Z*�>,(@�
-��L�v*T�XT
 U̍���\ƚf4_H5���� y�su+R�����<���@�ߺ�ع�b�2�Jˇ�3)�8S��A3]����Ҁ>adS�ki�������o
6��%��
��� � ��*��9���!�g����F{��O���2��Rs�P�Qd��@�ب	�Ԩ/k͆8��e҈�-�����'`aJ�f�k���<`��ؚe��kv�MlO���o����Ak
ؠ�vX�$߅
-�
����T�Z��s��w�zP}1
��l�Z��	����.��{���4e��䷏�r�����KQ�zr�����t�
�e�=�u�S^�r<|�}|��&Xj�Z
�K���<�C��x� �_���
t�ɔz
s���%�e��O�Msգb��cR�:O�����
-/s�N��+%�C	�ף
-��]�?"��U��@X�] ����f
D�z�7,p:��
ē7V )k�@‹
 ��
H�T��K�j�J���Ԍ����YHV���
��g��D'ނ	�g~Z�'�F�3��G"m��|���R���q�J��ȸ��u�yi���PPԳ
m0�UO�]Ӂҩ�2������V�2�{	����
���줥q�y�'C9��9��q-q�&�!|���&�uT[	
��黋r�Io�o�vG���\�@��p�^�
-�8�	4^��>0ힼ'�@����٪��?:�G��`��u����_��ƙ���?��N�8�c��&��
�q�n
�:C��%�
��W�~Rb��yb����>֏P{����#�~��>��w�n��f���$#���D̄ǻ��
�r]|@�ݺ��{��6��mN�z7�M��+^��D���ԟ��
>ѳ����ӹ<�>��	
�h��Y���Q��X�
���hK��
�~��G�]�}���x����3��e�W�B—�˜*�;7�<s:x�����ǎ��Y<JK�r������8���)wZ�О��b��!�b���ŊY���
c?��o�r���r��	�E�����z���e˗��Av�S'U
��<;�ka�7��ng����\��6���Xo��{MN
��C_���J�K~�
�
���س�zY$=��s��!��J)Y�:��~
�Xtd~��O�Q���/{p�C>�K>��\���9F^o��Xy���,�eh-�m��*hE�V�G�5fS)���x��ε�n [...]
���

N��u�Xo�l����BZ/Nѻ�xFPg�L��$;Y#rBL'��MGrx�"=d6�9�Kk�Nnr�
��
�+>
��@�ޟ7h��|one;=l�Y�����!�.��#�{�ŭv�ڍ}�6�|9��%Y*L�ҭ9!��^x�l'��sX
o��q(��{��n�A(��4|b������i���K�����,���N���^���f
�J��g?���6�4��m�tZ=�<mɐ2�����������k
��z9��ҳ��5͚�<���l���tT������>�T-=,*N����Uw���]�޺t<�w��jw�M�-���q�%���,�5�^���E�T�5Jo�k��Fõ�(tqd�o|!�L��
�Z7c~3K��Nخzš�l��#bP��~�Q9��z�Z��{�[�ni���G�R���N3G/��\���j"�7f�&�42Ҁu�Isq=c�k�b���wQ��d�5z��
n�jؾ
l�y��
����U
��<|y��B�� z�
=<����b_H��u����ڢ�ޫ:7����n"ɵӨdѾ��2�z�b��$f�k͎��1�
v��n�0���U�h�B԰�AjX}W��j�-&ߥ2�rv����t��*hP���$���2yܧ5�9�RX��
�zGm���^�3
��a��/9�>�b݅�bͣe�9�����7�o��Ԗ��Š����������B�
-S])
oZy�v�:����۔��5w°l6�g&��oR���g� ׭�����kx
�&}
�
q�,��7ٰ�
�:w�UߞtP�zb��
��O
UkH.��n���*�a��2)L+��Y�-�=�q�K���BJy2K�
� ����kk�u
-W�>/t�wAl+�ѿ-�F;���~{[��(�Wn��.3�}�i�����0_��
عT������z��pu�L�U��
�LQ4��޲�x��,��3���#��{F&��m���v)ro�]�
�LA���1����4�Q
�ꆸyj�`�!���;����+�V�v�n
������ßV�rjJu�[�9_��Qu��ND�\)��ﲝ�ӥMB���F6�eOw������*�2V���#�gKcp�
��z��
���fn���6dW���P�:�MY�E��L+A��؇L���Ru
h�R���w����gUw;�D�W��q�S�9Ҹ��g�T�ϐ�l��؁�\��օ�t�u#
�,CK]]��Żz�*#
:�3m:�n�tj|Q�W�[�M�9űj�����Z ST|�gT��β)yΦ��ȓ᾵��
����?f��7�J�[����w��N!�2�����]
�
��k�W_#ΘR��U�a�^Ҧ�����eK]d�}���L�l]\)Nl���}�
����ɉ;�Vŋ��¦�����z2�%/�VR���D��{�|�B#-��n��7-D)ׄ�!���Y���7��z�Kឪ� �����<D+=�+nQ�	��%
eݕ�_�R+��{�]ymF2��"������e?Ȉ"s�~W,	����a�my]/Ѽn�5^�M��	����
�9s��T0�\�
�^u�19�eJ�sp�Ű�-Q��p�'C�����-���*��R��J^�0rc6Wd�|3�C֤�YmI\�>���D�˵0�RWAYIu��r#�O5SE�x��
�M��HʑlD�6��&;{�
��&�PXcJ�����o�)�m�OЦh��+�&E�x����T�Gm�z�Tk6�$=�oO�r:<�S�w���]D�
Q��UaP:��Jc]�uRC~�n.��mr�L��搗A�c�3��d��b�,�wC��� n~!
~9'#`���	�P??�����[5?�>F�R�� ý��;(��t+7��Jj�
-{�oUoB������o
-0��)(�1��I�Az��������m��)b�b-uǬ�A�~���OC���ɥ<�<������A�L1͞K5���N=|�=�o˙E��Ҟ�⦑�b��eL>�d
�ϼT��2cx[�?������x#'nZ��\)[D����c��c��EeV�\�q�Z��e�.�ւM��5���b�0�_��������8/�(/�f^J�|ϩ��^��l	rmd�r�g�s���6D�z��/t!����[!�Y���-�^_�\��%�J6[��\�{�w��E�o$MS�HRǂ%P쮫��ƢBv�g��l?�(���c2
�PN��װ
-Q�O>���<J׈�)���Da	;D�J;l_m�Y���UíV�7�<��*���
�o鼼��`���~�bj9%�ZmdAv��>�H�/�����+-?�{q27���'L�S�ȥJ�E]�@Z�
����gv���Y|�M!)V�Q��bE�6���������������
���������]��VZ���/D�.Ge�o�n�W>����z�_Q'����hBL��%
��;�Ҝ\p����+ at f���H��b[ĶȲ���Fz�^�yF�O_����4?̪�M���
�P����R�ӼX�E^���t}q�z8�f��)y/O-h��Uo͌�>����7�:d4}�n�1�,�i�����U�g�^�H_2�6�Y��`�/��i�w;�h�NJ�ܷK�SY6���-l�P�ax��D�0/��
�
6
.t�6
����Jr����sZ��r�DhWq4rL�w4Aʌ������\�����>��vyKL��2��+Q�ſ'h8�"�d��'�j�+�X9 E���� [...]
-�7�1�WWY��|����\d�̇��=���m��l]C�W4#�I���0�1d܋I�q��R����
�KTM���9�y����������9�y(��d@
�j�Q�'z�`���;��B
�,�� ���
 ]���-S�Z����k��`(�
焂Fl�]@�����!����K�����{x���_H�9̗�Z�[@]�
���ЩB
-�x�4�	L
�ƾ�
$8n]l@�6	�%�hy�4�$ ��;	�%�Ag�AR��=~[َ.���T\u����@D/�4嗪x�

���  ݋��2w8C/���$�I�g�P�0��� �A����I�z�>Ṣ�&�'�E�3`�2�����y���@���6�vpM��?�`��V��<
����dq����k4����,�P���(,�� ʧ���A ;2R��$-V�R��`C��N�<" �Mq�c9pZ� ��.��ep��p��pg4���x0
��ޫ�ܭ*�� �X&�
p��ބ��ߚ�̨�
�H�3-�\�Orm�cRN�M�EJn�J튯�
L����c��H���
fC |�+��q7;�l	P�>l�C�@8/�@&D
����@�{s z(Ŧ	D�5b�N��Iv�[�$g�K2Z��RN!�>�����U3J�]D"�ա��.�i�f��Q��U[��V��s
�o��b*�} �N�oO�F� �;>��n@��Woȗ�(�
	�� Jn�J���J�dW.��(Ͽ�[*}�Jf�
��4g
�L2
2';�)�oG��+��Q���C@�?�~��#ݖv���
Psk��
�+Q�:`4bq�0���51�&���64�+M͎�Џ���g��M���o�mk����(��F�ϓ���O<��m�i$Xu
G��,V���f���X���i>����嘆qns�1� ����8k?��m�uo�����i��GO�ȡU�Ok�w?a�G���͈ͤ~#���E�nn�6��V9���+W��o}?7�۾�A�>h�d��
8�����ı�{�Qڢ�!v�����:�5U�5
_A_D��H�9*��"�Y�9�����}�<��5�-%PP�zV��ʴ���s�ěگ4�������{Yu�
܇�����`zE���y#T��R���A�y�c'u�:~� �}t�C}r��6����m�F�n��z���56�D+r
-ϗ
d/�UU���w��8�_�W���������C���ًv):�lw��}�W�}i5v�
nf<�Y�������ro]�Qߒ�^�����W�~�K��}�c���
��ԸI�$V��
,J��Q�e1�{H�
c����W"�
:���8�_-����v��
�C�^
v��>o�g챪�Ωe#�������=�+~�n̕i�52&�}���wˍ��:�2��hS��G�b��˷��/��4�\a����K��{tp������Ь��?�j'.o��x���Ӊ��;c��,�z!�K�]85�����q��I�4�R��

Cf�AH
���	�}�4${=a�vߝ��
*K��
l�Nl��<�������h.�
�>�65n�ǣ6��2���(l���?�k�_4�k,���Q�I���}��ͭ���{�`��ۓN�xl�
����:l#dz8�=�pmm���j��+
��\�`�y
-9�
-%-�v:n �V�F��
��� ���{�W�V�r�_�g2[p<��Ӛ@��t�Փ+�h�e�A���ޣQF�Ɲ�;�a����6e�	�>�́i4CN��k[
�C�=M�74PL6o��uj�kqq��9�)��*0�ħ�.��J;ݻ_,�*\c��!_�}��5�������I
fl��c�7{z���|��U��jm�Y6�h�~.�3�d����\7��U���R-��u�s�~���7�T�(ZT���P��כw(S���D�%岘CJ�N�
��[j�&�}�M1#7��R
�&^RW~
�8�u��<5����
�=�x���]�h^f*P�ѵ�B�S�o
-ɽ���j����(U�WP*�q`{G�S��YR�^�B��Ne?P�ng'�.̮ܗ�
]��x��V�ˬG�/L5�.���YT�+�,7I{=@
vR��`�_�bu���ʃ����7/)�h�N����{5��?�W�T׶���4��
+�T�2
`��r��Ta�����r�b�T
��Z��Vaz�z��5q����)����\�&;����ѷ��V3O�cf��G޸Φ����i��?|�/��
Lz�{��}Jjd.C��'���V�����Z�#|�(=���
b�[1v�Pr\�#C\^�e\T
�i���0(�~��[�ԥm5���b
qn�����q��]s��t*����*:(�#m$�Yͼ����
Z�n8_�@߇����{0ꠡ[^�T�׬�|�����Qa�*N0~R��ꦐ/�g��s���.-��1i�-[-��Q1:�f�2v����u��6��F3��A�nN�\PQ�I��2�Ji��Ը��:�8�X�Ҷ�
-�3����7����nz�|��2��kv~�@.T���Rl/�J����ci
vםy��+B���]�P���X�����S-��Yw��A]��N��P�-�+eQ��
-�3`��N9�Lj�H�[�����Kb�CE<�O�x�ol��,�>��
���4u����P+�0뵏��;>��r���w6��Dol�76�B��_����-��i�0��lS���D��b-�U��
�ⸯ(��nʛ
ӗɂ1����Qb�tZ<	UF�;G[h��� ��� �51A�R��P�����z��3n�m�����ٞ)��\D��d&wwo�f�����$3�Ӵ��`C۫�M�"�
R��3�`�,+�%��F3���<k�@⩿�L�k������#�^�kr�r���ș�9�5-n�:�ifL^���0� }���iգK���~�B��MαG}6Ӎ->�����"��L���V��L���� '�҈O�-/��.
-%� �P�*�U?��~�k}x������c'Y^c��:�-l���1s|�2s(o�Y�
"k�� :� k�gw��nD�.�SD�>dЫ)W��n��T���ū]���Rc�_�gqu[�'yR��DF��uT��-��&2��f�27r����~��T��ݧ�̼�#

-�
-�7k4�W4�*P4~<t�~�t%w6�r3OI�%w��k�qg���FV6��Z��%9��V��̩��'��Z]�%�}�6�f��Զ|?�\x�<>A9�*�1:�NN5�-�����G�-M���]Y�NԎ�a����%+dp����J�d��1=1�õ��7��M(�zM��v���g��.Rf�����c������[=��:��>F|�LŜ�E���l�Uy��� Ô��<�n�4���]�u�&��GՍyH1��l�=�����i
~�nJx�ޞ�@x����n����~)A`i�8/h����
-F�֨��E��Q[�����W�g-'�7rm��
-wK������M��,��>���	]m/�4)�O?���/�>�a�)5q�N9�oU�*�E�����Co��^���㼰a�Ic�W at c����Ρ1�jXZ"�93���0n�ȕ@��1�����m=�[���+|KM93�u���آ�`%)��6�&C�PgDd�B&���[��^��K8 e�&��v���gD��+��l����d	C�����\�Ep�
!��V��p� \(yd�VZ��qZ#��������
-f��*�`���q�%�<��e.]0^�ݡ�c�Eܐe�k�����x�e��:1�
Z�HW4;)��\#��7�
-a�F!��4빚�eC�
�W.�A

n�B
n�������eE��W2N��*�)����d�

��4	T��^�0�����|��3�!M��=�8؆�� �
�Nn���\=��~�
=�٣=�d� ���E�K�1p�[�x�*�=�w��m!�5�2��(e�۪���-3 �\���
-�D�/n�1���T�iS���h�Pm�c)��KW��4������m!5&E���z�����m"dԳ|e
���Ѕz�y���<�n	��=3W������XĴ����G�fʅ�)X��;����p�aW �
-(�b	,���B���R^���}�(�� L]>��$4��J	;����;Ƹ�W���"�����
-(hB��*̘�m/5Wj}PI��Dži�����=A	Np` ����:���	��3����_�0Z������m�x����t�lT��v���Q�s�|�҂�_ol�A
�f�����Ev�(wH���u ]�F��{�k%�b�&�|fp'��[;'�ހ�g����T $ZlK-LS����
 �A�q(ˀ8����r�([�y�9L����[e��$N߻�+�'u�dNH'�J��^�'uw��1�Z7FiD���̻���Qv(����
%^��P�
	��HL��@rF���BuF;@u
Y@�P�wP��
-(Oq ee��Wd�_��rж/;��+gE��;�0K� �u����S�Y��`ub�3q[}���0iԹ14;[Z۬���>+���o@�0�_i
09��r���
�o���+`J�]�qI�� 0��
�^~�ެt���c��9�0O�ԃ.���c��F�(ȢKAL*�v�3q�j�k�w��=�o�~����m��,��5m�����$`�w�+Z
��QQ��q�����p������=�N�%�c�3�.�}
J=
�����oWn\J�������]r%6�;�A�f�OS<>�"��x�K%�Y��#��
-
x�&�z0�e�_� 6�9>�b�>�e��[@��ɻ�%��:�d?�J��0H���T)a�	�,�W�V�p�i�֑�����f��B�yu��6�7U�����G��Zn�_���O���]�dH�b
���r���u 
N���%�E�	�;r�J�a��r�i[�5�t�=dw˨M�p��R�i)�WNVfzƯ���J�����s�~��������g+�B��ێvj�j�'�mׁs+�n��;^ �ρ�E2	��r�������1���3���Z�?%�;�<
&�NP@��7��p�o�mT��(���q�n,g�{ڻ.n�.����~-��+�B�K��� �`���_@�W� �m��z���2�w��W�ZD���~�o2=���{���>�.�=]�e�\]���~A^�Ƒ���G�/���H9���O��C���
�?��z�ß�ݻ�RwC�
���/�	_���xF���Փ��V����
<���aލY�|�WHpE�p������^~/�aj�>\��a�pg罺��wCb���L?���Qn�\���jY����}q�Ȏ�ũt��������
͈�Zi��h�~�5�~�����׺j/*��ԩ~��#?\ir���nlcjQX�jqE�Ho�La�/��<�
���tg��1���t��ҫ����=F�ff��
|�q7�\K�a�B7?А9,��)X��װ��i0����?��	�����Q7���r��(���do��{>�
��c���2�X8"q�5��KcJ�@����F�+
hW��`���kcQ�'ݫ���^���M�C��wӣΫ��)"���J���E֧�׫���#��֦�m���o3~��gn�{���r�C噺%��
�c��Q��`�@�� ģI?��U�LJ��;�.�t߿w������V&r�V.Bf#���'LkSYIu�V�o�^Ȝ�V�Ԋ'M���H���V~��='7�|��m��7[{�\�>Zm<�2ɾ��D�Z=�=��f�n�[�;�iEnr��^n�h�ؠ
��q?d�q39`�&Y��HZ��q�4z����RH�>�����\-��f
^ݫ��j�}d��W=n������)U6��'Ϣ�?\�48�c�fOuPm�3ߗ�2�5n�G䦙gk�>A������ăk�d��Sn��U�y���|�
5'�7j�m�.�v}d���
eΪء���\����۔אq�|�;R9�7��5滥�����bǹ�%g���Q�
&��4��gVO� ��:��a�-/M�ցt�o��~i_O�K�<�Y�sU�h�M}�U��@������GK�\�e�u�K�!��
�s�B2�w5��/&��w�4E�oGj��S�3{�׎{~cN)�T������n,@�鸧���=���SmJ(������J��/Y���/.�q����;���٘�����:�s��u�#�`#�ő_,3ϪW��A!��v��&5qP��٫C�e�
�j��X����cn�5�0�~ �"���šl��_Q�3�kr����пW����k�r[�{��

�E��/*�vS
|J.���0%
��kx��`��
s�Q,�kk���t�X�\��3�4�-�or���h/C�Y�[� [...]
9,B+�_��͉�!�Ʈ������/�)
`� ���<c\V4��k菂_�{������H
-d2��ҝ�Aur��
-/UFq�EAAv�H^�FY�ӳ�/�}���A��Nxs�YK/�����Z���i
s�=v��ٱ7�[�&��d5���
��ܸ.�!��M\+)]sZ9
d'�6<�x-�=5�⶚udO�g��/�Cy�![��o��H�-�`�}1 ,Hdw�dl)��9+Ё�W�sܙ��R����?C���9�����xdj6)ݰN`��B`�A��k��X�����%%�D�<�*Bʼ�� �$�h%��rE��2��R���K4��Ġ1\���<��8��{6�����+�
�/`��~1:�QDt��4 �
-wl��^iC�ɩf���M��q�ϑ�|Z

�_U-�ȵՂK��ٚ+�X��kht����-�WV��Q\�G:'6��"rI?.Ń/��|��������
4!�`��c��c��b���Ea��'q�:�υ�b������*"H�h3
�0�'m��~[��h]�����>�?�\��Ү����*n��P?�M/x�<>���$�E��7!�ݡnr�L��
��6�f�)k����E�c�]Of�i�˔r���
� <�����`�D�^(�-ۯ�fTi�$�����*^���h0Wk+��&W�zE�׊5��jG"_
��f=��绯܅W���j2��X��gc�����s��Q
-7��˚p��c�6!+R�m_��G�F��5E���E���zv�
ޚbV��G���?�䯞��
-(KIiɤ��œ"yµ�U�Gć��5z�{^�p&7Xs������׃u
&�f�6ʸ�2��сL//���D����>E��D6b+M�΍'�E�J��D��:��M�s�"����,%��|6gxש�]q��N��^�z���,ofb[
�*�<��/qf�
�@l|~�٬�
�9��w���+�}����E�w���$A�`[ n� �R%�m�K�`���(��T�����a�B���UÞ�gqyj�?��!�@:����^�-3XW�����ܩ�G}���Z��T}Μ�J�s��L��|zU�5i�=�R��5�h"�$;�@u�Frj�Y/��^�����w�T�ή^�^̺��-z�����z
�B���O��-
-�o�p�@-!�Q��p�k�%s�E
jXz}RکsE�&����b
��x�>��2��;.U[�.܄:q)�!��y}B\������]!}�^
�
Œ\H`��^Bm
vPh[�Ez
#�P��@HY8b�u7)��Z�̭�0���%����_4�M�Qe��f��u�p�b��W����e�� 
-�1h��QuDp�K|ppU_yI�?X�X�<���3?@�<Ca���g��%_
o�y���H���k,��\�r����
d���!�
�
f 
!m7�H�2��e��E�
-2ό�uFo�Pi+9�s�=��(��w5[�Ҁ���(�uj7
+�5�uq�?rP��|
*�W)��h�s~�?�Q�j�ݟ�6�h��(�Z�4|�V8
��,��tC�](Z�w��3pr�X(��b����T�	4
�Y�"��kk��S����3"g��]E'��t�3�+��
-]�m�ں�I~�Tp-�,��U at Vy��
j�"�*_<X�S�buj�0Ag)���y���L?�r]�I��4Ӗ����:K��3���3��~����;��B&E�U�
]r���[���axzWHz�/�̜O3Ā)�m���4��D���PFV�R1{��lX
��(󊏕�8�i�2h���u�*J�X�s
P��#�R�7��� P ����	@��@*�� ��K^.� Ot�!=�?-�@r�ܿޅ�
:���l/��ÜuhH5�j�?�a�Nl
��F^�I�.,1P1���4ܟV �7>���� {�F	�d�������r�p$c$� �Ks��p
-੝
���{&
�],l:��(e�c��k�_㜊��S��p�9�ɂ��љ����@�a
�:�F�y�נ��W2��z)��(|=�$8 �Bm@�� ��
�yS~$�ga���l%8n �
�?(��fl�Z��j� �ԋE|����
�z�9�����G�d��"����[�񱨓t���s��
� �s���
+�|֬'sA��j
H�Y����@No)@�M��-�iW y8�y
��<Y��B��  ٱj���N0M;�q�J�����7��晼�;,�ݗH
�'Y�ُ!���H>�K�b�T�9 �E���&��u>
��w at s ti� ��}<��kz�5�f�
9@�Y�� t'�t=E��� ��׀֖+�]�\=w�R{mcܬ�ATxv8�
����������
��䯔<G��8C�ʸ���-
6cc�Ż
`+9
����q��`����0!�?tS
���'
��gd�6�`������i�%���|4�.G(���3y�z��rO�C�����x�Ӑx��# ]���zp� ���~e�o��W��+<��x���� �[x�`p��L�A���'@���B^_����e�h���"�j�݀���a4y��yؤ�v1.ٍK6E���F}s%������D��D8|E�f�oxB
�8m~�ɒ���` �sH�(ҽ�����@�v �#���
-dP�)|�4��;_�E	u��K�sז+B�����N�A�i��6��_���������~�op��|��ۏt�dW[�ԜP!�*�w�*�@uZw��Z"P��'
X�
�7�*�f-��U�7�ן�
��e���ߌ�������h[#��Cf>���z�\�(WE�z"n������6F��[\���pY
-88o�:�C�?����
-��W�j����G�+��Y���~��O���8	������C�k�{�d]o����v�d��k�عz���^��3,��0S6����
�E����E{��_��K7���.Ħ�
-����׺:M�}�W��C�?%�WmVG.uOM�{�y-n{�k���^������A���Kfe�ۘ�͌?������S��ro�_����,���K�3�1wu�n��4�
}V���#\�ᾆ����
=2�_m��~Y��ˉ�*�C��
�w�ޥ����>`�j�Fܒ�8��Zf������;�8S��I,���}|�
@8^Z�����#a�ý眆�6|B�������#Q�
������������F�2r�j��GO�.ߘ�mLh��׼zuS��������8����:.>/�16^�F�l�2�a�׿z�ѿ��
�}wz�_����8�G%��0B��a������w˧�b�<�:ᾅ�~
�k3T&��:�M��5d�)&G��S����I��
G�d�
B�������z\��}�[a7�
�^فG�Q�B���,�6�
v-�
�}�v
�c��<5��&
#�5�Ё��F�
�w
����f.��b/Tk�5xǷ�gF�����-����MK��ɚ�j�}�{=6
:������˶6%
m�k�
d�4O��\[�H�^��S{��{�k��Lԩ�'�����g+���w���G�Ƚ��B��izD������P��y�S��*(	���™l��yP�1�{r}�f:��6����Bf���=4�g�\��W-���g;�w����܅*��+���
�}��<�N�ʧ�����+Ef!.ə����wWC�8�:�T4�|�����B�8e
g����H.ΧVR�o
�n�h��yh G���V��ϊ�a������I
oߔv
s5.�P.�~�ҵ�C%9�#�c
�GL�=����bz��
q�].�{��,�u�s{a{��bc5kmzkѢR����ݣ���,�I9f�ި���N�UF��j�M�κJ�#�p�;�s�尭�J�Z�c�����h2¦�ک��8wg��<�����
-������8�~ ��R�y���xEM�l�GF
W���6L�
�d�g8-i��m��ۓ��Ks����
�J���<�c\su;�.��#�(�_p�5`-[��Z��_�L�A!�HF��khW������;���_���A$fL�)�ּBb����HՕ�Z�I54�����~�B�V���)��Q�fk//,1�@G�!.ow�o�o��7`{�sY�
f�؞����
���T��t�hQʳj�T�l���q���!���������E{�FOm`�2ZjzD�q#G�Й�i�`*ԯ���9��������M�=(L��N����Ȕ�p�K6y���HJ@���ڛKN��<����{�j�F3�á�zF�o;�T1,��t[�T��#--�ƪ=y-U���Ⓒ(Hh��P�dl�ŤMa���%rqWŽǹ"s
B!T��>2W/C��=��9�
��8�a�1�C_
� ]	�jR���TYʾ0���u��#���z��?�6����>>t5�Ȓ
-o_A^|(/ž�c���ٌג
���y����ٲ���&��J|�<:�<�\?�s�y
YsQ��L�k?3�	3�0�@��LU�Eo$��f�,3�Z�J)(�sv36[�g��:Q�2�vI͆�����.{�ؖ��Ɠ���.

�#�ɐ�΁�����o����؋��W����ʳ�v�`-��3��8`r�hO�7
D��J�V��Z�Oͧ3�(ip��};n��a�T��8�
�6=ZƆ�ۚ5�j��].��dI�~Ck��{�(�Z���A
�Je��^�{���؊�{ƑKi�;k��
U6y��{|4�\���ҹZ���CU�Җܹ�4I�Kq�=��6$=����m��h����)z%�w?�,���Ƽt��WOVsӝ/Wq�$�����\����z�xeE9܀�J\����q1�6���7�1E�erw�B/�ҋ.�~�Z/c��zo���x�d�v�h�RK�[o��CY\��d<�Ky��M?�_�Q�,�6�_ٵ2����t�~s��'kv)h+2�%�F\᲎,���U [...]
-�A�ɭ��~���>s_�r�,'E�3Zd�
�
�[�>�H���Kٯ�[�����GQ��B^�2>[��J4�zZ�%[�pe
%G
�!��Il�41�D��dކ�O���z
����R�$��
-�6�[�G-2�H��w�c���3HŴ�H�a�
f�^N�Ut��nu*Ng_�4�U��U(T�
d</��Z*�
���Nm��,��1���#��n��{���WS�U_$��
�fo5�;?̌�N����@i���V�&`0Me�����
��"��.�|��|ٜ��	�<d���8�9�
�/��'��e�1\?+���/l0����k�fsA�F��DH���Ҷh��N�Q9C��M����IȀ�UK�=
���AX �p�*���q�����L�@*+���P�Y�/ �xi���Pn�(V� 4�A�(.
-��,e��f��7�D�'�ϯ�M���t/3�~!�gQ3GM:�*���
S
RN��{,�C���L�q �O�ƪ
�i�^��`�~H�  
endstream
endobj
316 0 obj
<</Length 65536>>stream
-38"�� ��6f1��00�h��� c�����o�q��6�bZ-���tJ�k���#�W#2��l��W�%�_��"���bae^����9L�t� l�H6�`� ��U�����K�ѓ}n
�x��|R��ٲ �:��ҝ�#��c����7�����W�&�%İ���;��Q6��Mx��5�bL%7��'!D����&[�
G5����1�W)��d+m�D�[���B
}@�� ��
 �����|$3|Rñ=�:S$���I>�R��$� ��}�sj%�MԿf`�j�6OW�R�&oܤ��ҴBL�f
�׬�=�����A&��5 at e�JZ�@뀤
�g+�N�����@r�E3 at Y�P��	Pc�	���4���
@�V��
-�P)����)
 uTS�Z�����/~ 3&�R
���O�Su�#�ø����9Z�A���Z���Ld��*2
��+�{� �������?��� �lROoC ��Ҁ��5��
-`��{Xrx,���I.Hj�%`��̥��>}#
�E��KRUB��+y���J�\���BC�_%W�}]�iԷ=�V8��H�x��q��o�9�?��
�n��O����
��J�O�X>�
-n! �r
��ٌ /�2�'Fa���O4��9_��0SI#,:z�:����qq��'�d��?.��[X���_��W.�Mo����o����x����'�ԥ�CH�l$u���t{�t���Q�*�+���d�+� ;c�5o���
�d\p���ɿ���Q�4ொ����������n�O������߼����Z+��,&� �� 5a at E�U����
����_������ۯu����7�����
����H�#V�o��:�}���=�e*7{�m�
�F,Җߌ�S#u�
O��=�
������͆�ʡ�u�~'���q��9���~���d�oF�.����H�[�b4��w��|����������,ub3��g���Y�)���=����������$8\{��W>�x.���8U�o��7f`�,��
�_�����,d���-�a+��O�R>�֙�����A}7�+��>*��r�5�{
V�h7Z6��t"����wsi{������M��#;���g���H�k����2Ɩ��"����կk�������ߙ���}y���vg���fƼO��߾�e
ҋ0;�ͥu�Mߍ5�E��gj���aN
{Hm
-�5"Pq�H����O� v�W��zR��{�W�LqD7
����}��M��
��u��|��������~���a�����><Ý��w9.>fձf���:�G��=
��lя�x�{4���xFI�҉���qR�d e���M�����ml�T[>��}�l�̹7l��{\{Q.��q�RW��ٱ_7��׺zڋ�e��@�J���:���.�{4�Dw(T'V
!�����z��,t��M���~�2�j�r�apm��@z��G��nh�y������Ơ����G
]���e��L>S��¼�]j�?������פ�)
���8��W����+rS�S�\y��._�k�>�C?P��І�j1u3
�5'[Q�Y�b�.�*V�ՠ\��~��it����;޾�z��0+�z��, �U��>Z����\���Jť�au���\�����)}������_��0��jm� �2�x+����O۱�,�����וM�{������7���)Zfˡ|�J���*ɩSRW���Cr{��s�.K�WL��F�!���_�
���r�¶']ۓ'u{m.6�	k3l�_$/{Բ(��_����ݧ�-H��@�L)5�.��Sf�kpB��?�a)Ҳ�۳2W��YqX�7��R;bϽ��rf� � �Z�^6;���s��D+���a����0�d
c��86�y2��0�G
��Q�0�e2�H`e~U+�WT���w"
z�{
�j�
-m��=��:2*G�.��B�A/egV��?���_��qP�ڴsc�|�f�G�͆�
��H��Ux�����8��Ț�
+H�4B,��z�TML��ٿ*q;�+��ԕ,
m��RKz��-����c���"�)�9Wv�����z��ԜT
�	��xlZۙ�[[ְ-�"
�U�.��!��H�d�C]�t�Z�
�4�;�@I'�_ՑI53a`eR��J���y�U�ьޔ*��D"�*n�[\�U�U���k�v��?
�bVm1��;�Xnߪqք��Ձ��^�6�����L���L�o�����˂�;��::����ĺ��
�Bl̕�S�ȋl�$���CZ���DDiL��/���%4�KrG�/��mju��M
庂�s]��$_��ؽp����3�#9x��L�G�{wX�Fv{6�P��zO4,�X,u�1yզ2�j=Y�r��Q��ZA.�NEZ7�@���N2�ٌ���1��3�$4�797��$I�#���
-;X��l��v�x�207/2��_0�P=�1�q����0�l�
{ʶ��NC�����=��
���,�yY�rr���eL��R����=r6Eƻ��H��K5���u�iļ�
. ���;N����PͧY���L�
%޾]�e�
9�7�'V3��L
-φ3
-{^����O_�}k��f�-(ˣ��YiÁ)lj
m$J�
��S�S�(�̉�b���E
-�Y�뤦�2ݱ��q�q�q�s ��p�Y�fΘ��n���y:�l�Z�4���=��oX�"��`E4�L�`G�F�ca� >���H
������_�D��
�v����B��,�yf��6.	����P'y��¸�
e9`R2�57��f�B�q��*��wz^�v��
��
��*�p��g�I��I�8��
8����&.b�
���'��]	S���4�v������
\���K{'���
-�f_Oqt])

W��{�p~d$�,ׯ$;*-PfҞ�L2|�����(���Յ+S��U���&k�΀����"�����+~�*.�&�Me����<TU֭}}E�9H0�YŜ�(&�����k�u�9ߟ�w�n�@�z��2��s�G
���r'�fL^�fl
O���>ӣk��N�$_��TT���m���6Z��F�����f�o�%+�EQ��􍓈|�i���kG�O��η�e���"ב�5N��m����l/ל�)t�g��(���GCϝE�m�Aa`ϓ�R�z�5,�x�A�lj\�� UB�2��������"N�f�eb%��w2�{rL�y”�M}�	u9C�
Ip��%r�} ^���I�`S�z���Y�
OM�j����C���$���l�L���"!�,�m��j��
�S�
�!�w����>^��O��ٝ&�
}�Y�3�Ϸ��&�1v}���M�3�J�`��Y��RE��}0渐�)�n�	&��
c�?=1"���M��@�+�*UP�mr�/��c<�#F��Q� [...]
-�oe���������T,�,���
-z�0�!�;��Ng��� ��[
�v�R�
�k�-X�G���*�J��s�#
"�T�S��߿��.M��	�V>Ѥ$�(������ç��ϊ@O�0K�!E�z��.N��.š)����R֐A)k��S��U�g؃͚����K�~���YI"⚱<6�8/@\>U@�� vt��3_�ќ��]�¢�L�e��7�^"YA�sF��P&-�E��G
Q�U)\�4�]<q
�l���#������/�RhƲ r¬�
���H at N7& g�6 ��
�
���
Xu@�G@��G"ŝ��3�^�lQa�_����T�)�������y9zn4j��$��^qX�9
�S2�
s8
#ċ����w�
-;%�����T߭�rhj��c��5D�X:4�Fb:�GP�y (�c U4 U?�⣈p"����#��,~P]��
-�y�|��
�q��t� J
-��"�=��T$

��
hQ �i��N��I�^T����2�z�~;�ӳ��s��e��� z ]=d$@���+N�'�+
�̑�D�cmrp���R��P.�$W��l�
�i���U��/O�"
��
-�H��P� CT�H�	+�ƁK���Yu:���c���-xq̛Fc�Ư��X>�\O/��6)�
v_��,0�I*�
��s��S������=�7���Q�
�~�8��
�
��Ȼ��a
|�jJ��S`��2��K�4�T
��N�˓���`�85=\������T߱�瀛6l���f,�5��1
-�f7��7\����㲽*`���U��c#m��[�kC�� o�E��v�8�0�D����yr�T���ꭷO�;�7k]��}��3���-P7 B.���s�X�oR��J@� 4g ��,�j��
d���<F��[hѡ���NPҧ3���o
�w�m$�Z`�F���o!_��P��ִ9����-5��q��\�
-�W�$�C �����e����@ZQ+ 
W/ �=
H�NH��H�:�%��g��7���`�

b�z<���&�$�
z��Ȭ�L�͓������������X��&h$��7����y�	(�f�8^���P�@y��߆�
Pv�PzS
(����r��B�凐�t��^�׍����g��)6K{Д�y�߁�-*�'9�	;N,��$&�$��/�M��%]�~��t+5 ����J� �G����@���D�
;zӱU|�p����4IC�����\M� 

���j���5!�2����OzCR�x��n�L�ߖۤO٨�&�>�)�X`Z^�N}
-�v��N3̉?����s?��r��X�m���XW�l,�z,��?-����EY�%�"�#k�W��o<�J?��3��7��������u�ܮ�k=z�C��+|����	�z�K�a�����k]�Uɑ�����u�OS����R�X��Ț�FO�Y��+���m���ZdNa�^.aF���&:��,�4��&<N�`W+
W��b���l���m����}� &(9��	JN�Kphb��
-}N����U��rV�+��0H��Kh��AT�r'�q*
J�����Z�9��	Kps�n���g>��P���v4[f��f�������6�Ŧ���
.N��
��%6Vo=l��Rp��;�'�1�w�7O�mC��ɟ�C�sΟ��c�u��b������Ր;>�����Wf�m3y|z(��)�Vى�g��Ǔ����(ue���p�K��g`��O��/ ���*�N>���^�C��
v�$
$��ZW�w�0ѿ�Ջ:�/�r�Ր����Ϙ�+~��K��㰲.��ù1�7��к
�L���
`��W���'��}/������
v�����I�=���۾�Q��z�9w��6[��k����盻��$�-x��'��ƪ�x�m������
Dl���Aq^z>�5&���2�Oo[0��,]~o�^Poh�xvG������Η�ZN���8��$���E�o�갱�4f
�n����Tg���P)���*�V�J8��*^6U44g�˵���b�/���{&?�&/[��![�Z���WgO:^7n���$�m��<zh01l�
=j8T�oku�vh����j൴�����IW�w'_����/�?�3,컎M��Ҥ��K��,Λ]�.e����^��
�����IbR��o����3a���p��R�̤֫U
�N���=�WQ#{X���ܭM�g�F�Ҥ4�JY���#V,�W��� _p$ Ȑ5�UM���l%�0�^6G���͇�pq�3Თ�A3�s�d���eG��|�6	y��>�j?�
�~���R9�1s�O�\)��S,��jaU6
�@t��6=�W}�;���ס��
��0
d]�|�ʠ��x������//|ڠ ݎvf޶�n�������Ђo8e�w�f��K?����x%P٧��w|���Ů֬J�uzՋ�&W(8������J�୴
�X�Y׌��p�-f�̽���M�E��6fh+�Զue}��5i���\������fA�S��'e�1��vtrS�Ln�b��S?,֪~X~Fzé
�êsJdd2߹��Aסey �^�x�Ur'���*�(��͆�~��o���v�ZK�M�5kR�YV�{�-8@�fAF�&ve��jj�
'�LRۓ�JU[�C����ޘ�@rFs�C]�
��z��@���Iy��U�7�R��j����Ny��}<�m��X���ūOKyw?m�i�q��X3jwis�k����³&k��Զ�I��~!�>�;R�c��қ���[j����BSXg�v�^�����'��YG�Gǰ"C�5���%�P�EIhjє�Bc
���r���Չ�,�S9"�x�\�"�VVu�{�>���E��f7�R��H���K�6o*�eQ^o. I����/zFS:Œڽ���]�YX��~�����Ǫv�!���R�5"�e�����.
-�B�
�&s��,L�u=���)���=j%�{v�u
R?�����<�6��\)oa�0��KփR��B�Fh
�����L���Q�R{J�U����X�,%����3nC%��5i��R>_
��Um&���N���W���~uE��_9�5+t�
7lg=AY����/lg;��!�^pR�l!�I��/a�d�
�Fb�5)�j�n-i^�cT��!��]B�	��I1��qIR��/姖"a��%�N��*���#l�KS���r�op�
��gΕn�
�"˪�~��mܥ����o 6D�x�D��)
-js&~�,�,@��\؁� 㿸�j�d.uT��v���/���B���
/Oo	
W@\y)��;#T�Q`IF�[��^���z�s��6'oC�ۢKV��'�?�_?(�Om{�I�ؤ�{A�?ћ\@j�\�Иʎ�95���-��~���~�o<?=��5��|r	OV^YT�󉖑^	�p�Eg2��cBu����衼��H�Y�

-{-���?V�H��䛌q����|3�GE�@����rL� M(E�Z�(k`FP�y��a�����7z�NI���;��r���:I簧�KͨY-^V���圲�%<�pa�
 ��,���r
-,�۰q�q6(�?�
-���5�
��9
=�GE:�`���,u�\�2&��lK�ە�����
�
�*v��yi<��v���
-��
�
o������ZZg��k�Z�f�Ts=��1M/]u9A*��H�
�s�k�S/V��L?���wG��
!h�'�T.�%
-
fS���d�Z��M-h
�tTZ�u{|�N���b�|K�$�����h���vCU�j�*��
}0���i^��_�"mH���O��F�U�۝.�.�(n�-p]�.������[�xĠ��0t
-�Rk����#��w�&���,���p��ձ@
-}�u���m���� Puh��ݾ��Ԭ8���
޸
->pI�:�x]�;���
��'��L�_ݮ����_�A��T�߂�w+4��a�S�>�X��a��+�z'*�l�7�
��"��f��e!b2�H��h����W�+��z
�~
�YyK:�QX�`[
h2�g �s�@A/�@!~r��?lB�@�j~V���k���.l
�y�VS*��(���Ŧ�a6��(�T��.�g"�
-ә��M�r���Z�.h���:@��� ��N }8�"Ƽ����‚G�� �Հ�j�!����=����u%>a,�{�����{S
��
�fj�H�͒�����b\G�\Ȳ�̯՛��D���3l�}��� TAA �=
_x#t��
&��	
��0���*�H���< R�K1
ˢ
��b��0�0�	+o�{�� T ���Xf�D�ge�~:�3yj4d�����|�˺��n�>U���A��Y��qg�
���6�B����

A����,�k\&	�B,e��`�E�0^���]�k@��; �Ht�k 񲯀x4@��I|
�H�+�O6N�Ӕ��:�pU~���L9���F�A��ij4�(��i.ZGS&
y�� 
��Xao�m���k
�, �m���ȷP��ь%
���r� *
� ��%�0� �~� y<��
�����Q"�&
���8ѵE����*�Q6��o���e:�ex�.�4.����

k
��e���۳�2�/T�рjL@�gP
$�G6
hdR4�y�Tf�F�G at c�S4>*�����B��f��گO���D���
��
�N�~q�)9,��:���b�3���q)ﲨ/
b�8
�>��
Q�Vw
��@ �'���6,@��
`���m��
� S�V�Ԯ��@x,�`�Z09r
�C �ǯ!���
G-�9٧��b���SO�PA�W����s6��z)\f�馨mexZsD���<.�cȀ�`Z��[��n�W��MU���/]��!ppm8�|
k ��8���,`#��)����^ �f݌�u2��I'�`�'�G���.
��Bk9i����P�-�p�ҲP���0�
RJ�˓�薽u��
-�͈Hn��ǃ˽�
����-d��sF@�m2������
MY?�]� ?��ߋ��z|��gbxN����a��s�dަֳk-	�@�ʥ�ڕx2=��)$A��v�����������
׭O��{'�T�(�<
@��= ��H�
�x?����0 �{?��a~��O{�wg�	�ln}BZS�Ĥ
�J�?9.�K��z�����ܿ�!�_b��M��
�ր2�瀲f�XVK���P<FJ�����~��j@~�V�
�[�����?��p�"Ιh���k���;D��귤�@�/E�Wz����K��=�}��
����&	��{��
��^R at W�y���h��A|��U{
��Q���/�+U���
������ʒ!J��g�r��r���lHj�����&n�oʭn��۶,΀�z��$⻛���X��Mp��J���d�
|&ϧ�w�A��5�$#|�2b�d�4q�w�L�X^�߀k��i�٘�cΤ��H[�
�*�b�zH5�0���K�[��w�Q�&r�M���<�)T��`�/�� �� �OFl�fr	^~N�R��ew�%M�
[���/
�ڞ}lx"gx�AO�Z#<�-�qļ�{�5x׀9r�⊸�蜵N��ʺ��2���<]�V�7�LN��T����]�&�w�5�&�o��~���_:�:|Q'K��#�9T��V�
?���X�{�άS����Bi9Q���<�7ؐ��
 
fUT�M��aT��:�k|t�(}�zJ���z���P�����N�_V���u�� ��I������tqWQu�]~���2s�-���tN�6��\'��z��Z�5��l0J�2
j1��5z�yB� k��*dm�\�N�Jo;���yA;�;�w�~��.����&�f���v�J6���j���7w��C'A�����&
#w&
��R|���`���}lr����������6�e�
��������6����n4<�\<?�I�$Z�*#7
�8�X��v�
��$w�o�j5	ժ��+�pzv.�9[
���]��jj
�7D������0�\N8u<����3�h�
"p�~�p�f�oM25�ϛ�foڿ�Ur_.ԫ|�\;��z�!��ՠ����s4�x�nS�OAX�se��
]
Ǧ�r�W7�I�.Ų�~>���]O
��-�7M�NXmG�t����4j�J�W�V�a���Lj
�\������R��V�{�YQ_�w�Og�U	g�wh��\�4qr)K���6L
\|y�ZQ�@^�A~��l����v��	�d�y���+?h��?���|IrZ� 7a<m�ZQ���3����gaVKYBo��
KsP,0�Ya՘�
�y��o�� ����ܡw|��'����f�4Ag�'f�|�H�W�b�w^
;��
{X�-x���l|�<>�-� �i1Y�����xت��o�,>6�9��Ψ�m+�s��񏭕
�A6�Q)+}�z&�H팆H��}a������&�����޶��ٚ4w++
�_`�,��db�^�p�g������Ej;��T5��j>��es����rI�r�["��NJ����\-�}&w��jV.j\F�Fx���);Z�x{�L%��֤��?���9
�c�]�fbW�e���g8�60�ga���M���'�09<�F�B�`�4�tȪ�.�Q��i�z�
�j«�j�|�z��:��w.�w+'ו�+>
�c�ɉ�d��DU�ө
c�4n.�d�{��.K�p�e��
���7%U5�)�0z�z#C�u�
-��uM������r_����r߯w�� W���<l�e�V���i��R��XR�n{������<��g�٠���c���C�BF?)k�?x���4�'NH��q����B
х2	k�
F59�Qj��,EyPVJ���bt{E��/k�}vd{ō�)�/��
�
�D|������~P�
e�Ջ���$~W|7��d��]�8h���kM�T&�eu��v�z�Ψ�j�`ʥ���.~
Roe(R���]��no�[�C�c�����+q�F���"QOL��KՖr�|AB�zE,V;-��N��/��O|m�~s'��r�e-�^�G�m��=s�}�����o�m?�~���VR<,0b��I�R
+j���1Z���T��(��y��R�*�?�PNo�O����
��Z����Y�����Q)�|��z�;|�P?(�m*=���쥱߳ʅx2=�N3�M��ݦ�j?4�י*��U:���Ĺp>�a�
T�jZX:���Җ�U_`�ųq.
��񡸜��$
�"q�
¦�� �n 8��2˝�Y�k�{ٻ��ۖY5�q�ވ��_�V}y�>�JR���$gw������^���%��C��d�%�Ԯ�o�}i����Mm�;��:L����(��J	���[\UKa[�C��� 9{��{!`������eCy��
x��=��?�r��J���uK�u
6��~�L�,ɹSIlb��gt|�jx��-�C�L�̱Q«��ŷ�ȭICb[t���f��b��+[?�;Y5OZ��UD\����=Z�Q>\�`�8)���g�'�>ծ�_+Dtt�~�a��Ѷ5e���(Q�)0(�cs��T��#�K�G8�vFP:����� V��t\ń|z��k
C�D��	�������~���Q���);����՗{���B� "U
���(��1���/�N��;��=��= jJ"w*��^RU`r��)�9bm�U�y���
-
��m��l���x?bB�@h[
eT~���uHO~P�����Y�ڙ�Qy�j���l�Z�kO��c�놕�oy��Q����]T^ܹ��k}
2}�8��㼣rDC.:�I��+Q.,�?(A��7���^�
Ωi	;��&֜�K�Xd]��ɎP�����w��͉ ?�T6��4:5�Л_[�YpZpd�쵲�X�V݉�"]�TS+KҢ�"��$��f���(�3��{�_;�D��=I��
A7�{��j_�S�{�Zt?�����D�
�юQ6P�5�#��
�X
-f��ଡ�z{�2�F�Yc��&�t�� ݕ
���:��
����E�q�w�rU*�J^6�tS%"բN;������^xgL�z��d�:�K�x *p{�s����\�vf�+��kO䎵?Ho5Ð�sa��
R`����8*:l�� ?�N�ϞV@�X��
`V3>/ ��6�ۍ�񒖌�t�t�ڑ,�O��v3$�|
N�Xo�
-tz�:���N8/�
-��
���1��
�)�0��O>� �[�0����B,]�>�e
�� {`�X.C��v��T!�m`�� w�����87%�����^��|��ܥ�B؞j}��p���z�JlBp���	���ꥋG��C��,������	�R!bY
- �F,�R,�oV'>�.b�� >��O*���=x�Q��#�?�Y6Ef'�f�liwhUP`vg$؛?�R���҇�]�O�l�7��<._�,,ΨVn�1˝���\ �x��@� 8�
�� "��Q�Xj�X�@4�^,�5 ��ī�M�t�t�}		�-�r:�#��fM5�
r��3E���~�wj<��̙���_xÓ��7T{]o������<�K_ 1M�^ �`�~y2�&��y@��z,�
 +Z=���Ui���\^d^�aP;@�H���0/���jGz��4�O��Usg	���w�/��'���k���ci�I�7��Nߎ�t�W@��[�9�@/q�k4���7���&e�_u���rՊO'՚}�"�@9
P�E������/��	���+���d�ݡ�_JM%��%�w6/;7��G�g�ď�b�v� �f
�fw�
����#=>q)

����\�>�
�@k��cz2/ 0�X�}@_O+@�ҷX����O��
�����
S���%@g�>V���Sm�8T_�+/d��L�fM}�RK��S���TG��q& �)���9,��K���
��e�?�VrT�����7��:�@r �w����z������'����
�\K�-eK�u��f�XM��y��OS��r#u����tΫp=�����&�D���-��P�yP�
�ŐY���}������_.�ܻ=��X~�=~�}~e0�
��]r�!��W��9P\�
 w
d�C@
�g/���ou���֘,�-Gdcc:�1�
�())�&��?����-�	�Mr
��o�$���`�4q� ��kZ=$�1�A|�����E�Dr���x��9�� Y=�^��.U�^�(!pc\���wtn���B�D���;�O�
�
����_p�Xn�%[7�2�9 at i>P��(�!��
-Z�9��@

�@����.�^rO�4�6c��k��F�֨�k���''�� ��
I	;N��vM�Wf�7n�o�mBm��ح�1�Z�
R��	_�-Mh@��]���5
-�J�
�hT��c
-�`I��p�$)���9a�
8IoHJ�����m[�~���_�������$%!�N�m�X�uLB~�������V����1`4��S�,l�ay���?1��W6B��i�r��h�>Ų�'��O�<3�'��7��՟½<��V���!���+?䪡4U:�{ɜQ��&��
�W}��,Z	�H���z�k
M���W��dz,G
��u��$x7�,֌,>a��K���1�y7

op	������΂!�.N��s�=�����5O� _�nB��^�k
b�f�r��2�����W��'a�?hBkP�k
���v��q�7�^ڟ/�
􄉆R�}���w
��-��wķ,�P���� ��u�cש�B\YA_�&
\��"���K��I.?�"��A���R��Fw:���a�{<�Q�
d�B�_ �K�ԕt�JphbMXm3��/6�/~�\�,��{gv	��E�|#��99��fU��L�R0���fto��7�����o\�W��/@��_��O�rH�J���~�.���K
O��}���w��4\{�B����2j	M�L�.^;~�U��7uu�yl�>6
b�*�����K>� ��
���
�;�{p:��Pk����F�m�
Z���L�Q+���x�4����pX�Y�6
X����ZCc�ՠ�
U�ύH���XV�a������2�\s�_���%�ڄ�v<q�r��X���o� [...]
��%x�1
-�:��.c嫲�K�����C7_�e����A/
����M3^v��h�f��/.��A\B;�B�ͣ*!��h�֤9�,�rɛs/��3��1Vðf������G����BLNr2�	�-茞gB_�}�Ʉ�3���t��ւ
�v�=tκ=,�iۦ��5�
e+�ku
l��P��]����3��'��v�:��V�H�@C�F�!���i����ܲx�d�f5�u����[ͭ1�D4����}T���2М����Z��-��e�/s�l�L�҃�Ug��:&�!�')U5�z�yC�~�9]����Ū�̖&����U�k�~ ��C������a|�d[���cv�>W��5�m�$�	O`Wg�x�1�K��M�ҦJ�r5q�L�?��{�hy�������������[
�+4��V5��)�
,+~����DZ�%�d[ʔ�O�jIoٗ�:���,�%"�@W���Z���(<�����}�"���h�~m]鶽N��~�3��J�r�)c��'�������\��<R��!|V
5������F��m!zK�
�HY�%��2?�8�eA,YM�^
[X�&E��
~;�|�Z(���zs����f�c�˺-�κ��b�6_M�I@��x3wJ
��X�ec��Q?q������S1��PNO�4���R�0<H9|HH�=�
��x�pּ��`
��&��������1�P�������my�c���A�n�2Z�!�Ǩg��
m����W
���`�P��R�Τ�z�zV��v�ϐ�d��V>��ԻK�*y���A$F�V(�	噼�R�vhL;�5GyN��\�k8Q/����l{�Y��H1�
�e�Q��O�K��pA��놂rs�̭$�D��K,���(��Q<��X"�S� ꨰi֪���LR>
-�����`�e�,��R#
�J����yj͝��"�
���m8���ًv<�Jwan%1=��}��?(=�r
m>�*56G6�~_
r���$�(L��
-�MUF�
-ؾ�obuY9`u%'b�R�/V�W4��+b����i0����
.O��;��V�t*�����Ǝ�J�ۙ�笪�f�m��1)"�����
Tj'�b�Wj�"*c�a
-z=I2��xc��i�Q���k�>��w'�]`�J�xs���	_G��s�Jy�C[�c>�s�y�&~N��
k��j�j��äyi��W)̕o����VԖU'�%�#�9
�ʄ����J���<^~kr��{2�+�7b�4?���6�a�J�V�CY�b
�]���c����G�� a�Q�
U�{s�����fQW���fQ��UW���jTS�L�_�}�/�%�+��#�~
�@�Kzh�g�$�)x���xD��ˊ��e�o��#^ͣ!�bb�r
JH<b
�Gc�|RP���Q9��"Wl�#ZY���F����/B�Q��¹E at vN4��](����1�Y�خ
]Ӳ"+O�T��z�7F��K���'�-=췗�d��(�&��5
�;P�l�7ǎ�r�	��.��u?�;ڦT�w%��"��6�p�l\�mh��fR��?90�2���3#��+@Z���O�Y� -RGZ�U�A�҂WQ�z,E�{ۆ��G����4kK
-Q���o�r�#�X��g���n���5lm���;"����)���ޤ�@�jF� v���P)7����
Y��^�LePdF-� ��:��n��6R�
-�94edBl��c1�aޔ|�G�uGM��,ܹ9Q�nS��vF��U�h{�Y �Ok
��z73{(}�N`�f� ���Jt~  ��X���D�� ]7��q
���
��f�.*�r��=��.�v�u��k��U���#R�7j���0d�5�)�À�qG.*�Q6�9^s/3���M�ڛ!=���-���2Ek
0���*
c�׬�:� ,KR�T�X.9��ҭX�s���
[��dS�LB�C�5->�܌%�I��f+I�V�۩*-nKF�!�)>b
��J��‰B�ŎX�sk�v&�X��-�Nn9Gz��
�����঵�L1�q�9 ��:��C"��X��)�˴pZ[

-"�Ó�<Zq���	`���z�KȲ��ҳ�1�U�Mj�$���ҋ��5Cـ$:�=^�
�*�kT͝�Hj��G��Y�y�Z\�l n� on. �?� ?)�X�x,{�˓Ό�� ���b���\���BL���|z�g����'�g�ܴ����-�Ŝ"�р��c��=F}���Ȓ����}z�z���=���

�nh���q������
� ��9�	�Z���
�
bb1�XF@��: �! �p���
IJbbU���'F���
-��~
��i�
-�JM�\##��iU��
��4��
-���rރ`&�gu
�_�
�x�!�m���Ňz
�j� W������ �yc�
)4 _]	P��!m��d��`�Xz@^%"�w�����k��A�H��Gi�u�"U��g��.h�w�<��l�Ֆa#�������oQ��;��
-�����k�
����@��誟�%�}l��Dz� :oF�N]8@��Eo	�O#~�uY��Ƈ�Ө�b��<��yq;n�����"�]
G���~�g�x���%��;bIQ��ɇ&hfA������
-`���!VLT�6u�+��XF��7�a�&t��Y{��2ܗ�6�.`����fSvN�?�3j�%���3�e�H��q������yrRͷ��ۯ
�E?��ۑ��&�4��蛛[^|� _ʞ�
 /k�C
p�� p��������#!IoPәz[�
��,�m����?(.�"�

�/����s�O=#
������M`�7��_�6i�v��Ԗ����ˈx!y n⛾8��@��@Ի1��s}��IB
��Y�gIY��MP��g�e&1���?�Pۤ���餻\b�W�	n�������7�6q�~Sn��#t�@i�&PҍP���]���r�x��^�a ���`&u���5�(:�`|+B�Q��t“�`[Щ�ܶ�Mm�̆�&����7�6a�ߔ�_�뗓��t���6q���WͷZh�1Z�ƁF�
�^G7�tSC�a
-
��v.\̖�F�ן��S2:߁��')�o�m���/�mBm�n[]�W~�m�����&
�'0�)	L)�&`��ؽ���!�W����7�??�������8���&�I
���mc�m�m�

���9�G�'\
C��A怒C޶r��1݁|�#�&��E]lj����>Mns��{�
-����U�'�����/jL�L�=�
�������dz"�E�����Ț��s��ҏ�vR�m�j���r��q�|Ͻ�`H�{�̱�?�/��~k�]ܦ?�?Q����gO��P|���L.��6'��x�Y�~k���&�%]���g�4��b�P���	
M䜚K�����ğ�t�
1�
�A������^�>�!O��Lx��Ǟ���3f�͌�3��>�'.ݳ�a}���qe��^����A�A����/���No[
Z������	�ƙ&�6�ğ�.��
$LtV�
��!{�'Aq��%�:qI�=�7��0j��'�`�ڍ�s{:�W���'��M�J6��C�t�c��b��2k�v�����[V���̏���ޛ�jXJ�Km��l�h��h�҅E���+�"Jfet�Gp�	Q
@Q�P�?��%�9������c�FW�MU�7�R���(���_
-�~�v�^��ޡ�8�q�4�v#�)�
��
AGITh� �>g��ϯ�~9�zV�$��]�n��^���a���<�u�o)�TՕ���.]�)e��|[�{���&__l�*�,|y~�?�hX
-a�O���T���64C�`6
SW�8�sҡ�\q{�Bс.?�W'������Z���藝��L����_
�Ed����ԛ��W�$�}݄*}���\�<Y_��k<
-�0W�������(��1
�4
-=���j��i
-U�l�K"�=7�V��n6�hBj���ڬ��kf�;�ڪ.���N�n��띪�޻U��4�\s�2�
ce�J��V�\z��JI�0�R��܊����>�_���G�Qh�C�ka����.���
�V���$�v��v�
e+�
-��d�dB�Ak�}˒�y����{}T4;p�\�\��x���H>w����s~3����sD�
����e��c�Ⱥ���vE���*�,��� L���B�P1)W�f_VKz+
-�������x�
�p$
��
/���oFl:�ʤ�9g*�rr�P�ѯZ+�ΕN�G5�YS-�6v�L�Nz$�t�
�)��&SZOo��
-
a��kM>o�a���!���^�a�Ck�=ϔ�x����|+�]srn}ʺz���A�
:��6yB� >�I�H<��G�Mgbx"���LJ�����&�~��,%����bk	s��ȣ�	��F�F���(��7Ko�oV��Y����'B���B)��cՂ����i�NV���*y���K�g}����&�t�]R�jG�9Y�77~�0W���,��(%X�
-�|&)�A#Ϸ�r���FM�s��'7���3����J�2�3�)�ã,ϧ��
���t;��9��T�:�:��B���p&��o�i�;&˴�$jD
�+h+X��d	��v%�ݖ��v���o������p
�FYw�%خ�dX���9�U�IL�m��Q��3��#�_�|\�|j��5m��k�X�ڈ��)xs�h�ϵ0I� �adV�^��C�$�i��Fi˷�w��

�S�=���ʒc�ź���v{�兔
�+�s�eT��1I�y�/n/�G�9Jg�&��t\���� 1���"� �#e�1��V�"U��gT�AJ,
-�ݮ؞N2�:[�TJe��?�Ʌ
����;	�@���	��ؾ�`�Q�`r�
V��%�|aK�:xY�8�X�
���C<��X`�1�,!�rt���#��/S�IQ�fj7#	�t ��J�5OĜ� ���O|W�'!r�r?�V� Q,b�����K45���:��x)Uu�ck1�Qۤo=
�+������4>��g��~=��s3�—V�ܚob��~O-��U�`w
-˥���)R$ٚ%;�(� �{n:��q������R
�O5�aB��C��f
"&/�ʄy�
�u�d��>��φ�@ց�tx�9;�%};d����<���ql^�LbQ=7�E�"
ߒ���s
-� �qK��ၰE�FH�����;lE��㼄�7	�
=�w;t�kF��~O#���Er�}Erh�A��c�a��rQ���4ۦӓm%V6��x��l�L��[Ɵ$i��ѥ���U/qC
-��CR��C��?'�=}�����XxGN8��1�'��9(�(�
z~W�J

��&�c�!����3�Ѣ2M�7���|[�@��P`>��4&�*p��qb6
fW��7׹�.s)޷tnZ^ċ��LfUW�Ï���$�y	i�
p�܌��Nqnx1���-��
�b�i�^
-�+:"u���C!9����B�
-�g]`f���Ww���
@T^�@�x��f L��D��,֭F&L��(
�o��4\�m7q]�.bf��S7��M��
2<x�a��m�0��Lыe�許���fw�h����)�k�#Z�7P`
и_ (-) e�@��
����S�$�!��0�\
+�� ��d�W,�
o����`l/�t�Ylbo[X|��q]��p�5&d�9�ݞ9�6CL
:�83���z4(w��
-��>ڀ�g� U�+@�(������g
���K��� ��)
Ў3 h{�p���V�ϱT�3Q�J��{*W����fFzƍ?��&t�)kr4ȍ*i�h�]]?Yp!G�
�W8_@�]k5��
,�����
Bw
0�= ��|2
-�� FK�=�Q��b�7��L`5�]��8>�p�'��E�f��Jƒ
-3��S�r��Iލ�z�M�*	K�Q�d,)M	&K�q����~�C�:t�ȴ�O��V�,�� �
�6ѭ����8 ���	a��f/��fU�-�60�
���{�}
`ʮ
��I)һ����d]vH�9�__l��.�~���tC+)�lm���+S�?r6("t<� G�
E�[u)U!��� xܵ �zo.�:W��2EA� � Wz�����x���q�k��~�$��|q���A^��r��Ԅ���0ߛ�7�x�`�E���P�%9��=�c`�uQG�oz�|O�`�h�O )Ux{9o��Av��g@n@(�>^wD�ւp��<��K�H at 0� 0a
��l�i���r˞��R*ZH	B��#�3)����ʞ:�.�Vx�j��;Y��D݌�� ��3���� �s�&�]!A����kf0��䎒�Nšd
K at h�N
@� 
���&Hj�$0
@܂ ��2q��z|1��B�gw
��y�MO�����c������&��8[E�Lq	u�>i�i�l%m ��
��~���+@�W�	��� �
%5��#50r��M at I���
-P�$�-k9x>'t ���jM<���q�
��M&��"A��N╘�ST"v�=����H�c;�b�-�8�_)��G��ɵ�o���o.�F;b�V �;�q8�q��8����c�1/@l�H��q���\��=Ǎ�08ie>U�T��/�qz淐��	�3(\
�
bt�'@V�nH�+�o~�7��K*��o�;��c�~ju��hO�BXN �%׀6�
��
1 at K�2���
��$ ���v��a ��{PhWH3�1D�C�4jl��H%z}�>�G��.�J�
������Ǽ���_J8����+'�_׶g 8,}vM�^{�b�]dҀUBo��,7��'`I�
��ï�����sI���Ip��oP�͹�H嬠_}���)����eK��/?Հ��������	�z	��@� l
C:	i)���?ܯ�__S�oyc���o���z�����q��^"����Y�I����E����_��To�� 
���ߥ��)��\��
ӏڥ�%
Rj�a��2�=���$�.	��t
$�
H��1�X::;9���F�W�Tɣe����E�/6{X
R�O����a���'�C�mX#!L�팳_}�а-�=�]M���1"�� sc?�$f&�1��Ҷ�i�8��!�����w���X���
fK���_��w�B鋓
n�&����i��mV��O�헲��,��Q���X��� �po�050P�YPH�}P ��s��
Ƚ��|���	]���Ge
c~�nB6���h+� (���h�
�m�v��
��>�ћt-���#�\�b%y�T��I#�f�n_="���!�u�W-,\@��
-m�o�;}qB�\����3�!�?������"���0)���8v��D���ē_�=�j*G�Gv\���ܒ�u�ZQ�/bb��en��
��M�s��~Y�
�N��n�k�^�����Md��Br_���Rgڡ7ZmN�[��vhXm�`���+^�َ3�\�]�U:����������n֦ <�N%�^��wt�m�x3�
5������]�Y�xWff1!O�j}�m���đ�����c��ءva������m�r����<�iä�p��V=��(�$�����wL/� (��=IIS��u�z�Od�
�]��Ɯ��G*�^
/��z�����
-������x��(֚Wz�>��6�=@z�j�ֆF����[.�h��T���.C#/�#+����Ɓ�
;���� \o�s���ݲRx߬���� �
�%�V
Kw����^��t�њ썱��x�
iTFm�,��yt�k����U��h*LKD<��
��
�`�$	b�'��a1����*�ߥ�~���@�Fp�nBߵ
�N��y o[zMދ��UJ�~ى����ϓ����Z�A՝Ⴍ��.]s�h�ƽ2rU����$�
+��GVF�]������"�C��'�4
K���!�O��yM|��ԝ����	���R��c�
-!-B�:5�!�U�(�+S�VFվY�W
��5'v�iOܒ.��R�~��fNjU�.����
ͤ�~��7�-�o��z>}]�����3
�kC��v!9H��� ���z+=7)�T�a��{�ES���|��b�5�E中�U��_v�|+�S������4u����<��u�[��o�?2�H�2IjTH_v�Az���t�/����S�Y[��aw����5�(�
�Z�!�/N�f��r��x��ϙ�u������n�l�� Y�(RY>Zd2޲.d�x%��l�\z��?����S�2�Ry�<H���,YJf7��ո&�	K&��])��$��fO�Z]�ip%`�zVM��H�*�^m�!��!�0C�ڥ3��Ii��J�����K>]���$�^nI��|&K
-�|C	2��<#XZ>!4�
�1��U�H|
AF�c�-Nn
/�c�N�c�r�uw�ź{/˺����~(eh|W.�{����W��
/�M�
��*a�C�ƽ���65(��§�,�iϷ�w��p��jp��x��Z�خX��<�K0��*0�D&�V�����*>�L�Nҙ4֏�w%��t&�����d�
-s���;]2�����A&y
��F�r���֣�s�%>��yȺ�|�v�1��)���`��kŨRt�$irO_\�D��?��������g>�O����WZ1]�Nb�����o
�L�Y��e|M��8	�Z��[ ��W��
������LMgi/��-�VN�.�
��9Y�1}5:*=N�U:3I@�s�����qߣ�qM��x>���5�����:Vʊ;����)sf?�j�Q(�q����F
SH���l�wbc�DKFT��
Q��a��f��4��Z�
-�D~{�b�T�vO���oGck��&38`S:�
��}E��p�3t\��)_��.�$dgUwD-PO�Ц3��^�+
-ߐ
'} 	Y�[FD��lj����;j&���Lmuę\/���Ls��3�^&
�$�B#
��c���9�^#�GmvK`]s���s�
z
�'�²>��7x�Z���U�.���=ru��d����h@/mLl���hW�9G���>����V�
�4;o�%�vp�
֓�"&��=��#:h�(4E�h�O�h�@hrU�j��X*.�;&�G���k&]r�݅~rh%�g��*V~&T�vq;�:�+$ٓ��.Ѷ�]".�zD�R��{�4��:��FkA_bG�u��?c°�B�i=��g�r
d����G���`�ţ��Q��f�yT���:����:9�3C��NF���o�9���#^�ؼ^R��'��C�͖LHd���|� |g�X*�j�.�{]�O�CL�f4�<h��-��m�m�#�|
�>
�����
-xYuT��D�9�f� ���
D'�SC���������դ
%�U����Ngڋ�lp�Ƣ���.~�$�BHBK�����wq��!/
t0�tг~��6:@�qb����
�t�����r>�������e���Bp]H�e� �6� zu� z�� ���K��:"K�f�G ����zx̦'��{��)UoqR��
�R����S)uq���~��`	<PСzR
�HN�����i-��.��	�
@��� ���!l� ��� i�6��񓋧@��
 i�]O��Y����L����N��a���/%>f��#hA��{[��
��bG��
�(d��C��\�G�ʶ
�k��� p�#�\�@�<$z�z./��
@��2@��
-�{y�G��Nj ��� ��� �sE�g����'Vb�w1�myL�r�Ƌg���y��	�`�xg��b
�T�D����3�_����b� s6P��s��xA�k m1&��
Pս|<�/��t��T���<vZS� ��@��;@�[
�T��w��D��.lF�GX:����6fJ�I5�ɔ��ǕwU�4}�����./��<!#�z���b%�1�
-'� ]� }�4��y�lA����>��N ��j ��1��0�cz�t>m9/�=،Y��㱅�*�;8���0�;
��m���L
-��S��q#��m�8��zX��vБ�T����n�5̀<�
������ɏ���vsV|`>���'�A�{%
�,�؞�K��e��i`#���Y�\)�O��
:a2z���\��J�
r���Y��8_p�j�*:F�}$$�Qp�+��V�_v�
�
��[u
���\|�p n�G� ���?~���|�� �8 _j𼦦 �� ^�G��|�YN��).L�fOC��������V\��Z
�>�	6�c4K��苗�,�|`{^x�4xY� |`N~�� i
��
����1��zA�҂� �l®�m~x�< 1�3��_S@�X�9̻@�yr�}��2�Q6��
t!V��`�u�}���â���Κ�4:oX�M���ִ�2��%�T_�Iѹ�񓫏# ǩ ��7��P)�T\�B�6�TG���eA
�݇\w���{s@�

����H4oG�K.��E
a�ju^�;r��
��%�+J�he�_�
-M�/��R��L��忒o�o�
��:�+��P�����~�7��9�����*�C�8<�0+@
��f�e�� ��
'�}<̦�-k�
I#��'�)�=��(ʈ�/>�G�����O}�08Lr���	�n
��	h5�tk6t;� :5~x�	�W��E��T��<qdJ�.��D���o�~SԬ��j�p����y��t��OKK�lº�a�Y�k���}�t
SnC{��
 {6�
`��
��.�l�X�� �{� c����2
�f�w�$�'߱�b�4j��>�Z�~��w��'��BuB>a���"��һ_��Й�����y�� 
.�J�B:W r�~�؀�q��2"�nipڱ�^K�t�F��ːX�z��Fc���6�C6!�W�����l�Û���o)��|۰J·���O�
-�mKA���
-$-* I~���r
���S��q�%�/<�i��u��O�/�ɟ�}�(�CaB6!������?���Y������O���+,���
�=�
�m������
d�!JH�y��J7F�_e|�.�:�|-�
V���sC�>~r�ۆ��C+9�[Y۰HC��~K���#YX��w~o��(�;P��'PD��'���'@��J��
�A~_D@���������t����~
\�38mۜIJq㔥�����>��g��E�
�#�����d�[٥�LD2b��
z����ۢ#o�����+_�M���HS�g�K�BK��[Rc�4p���
W�^Z�4�^i�dis
c7��
�QՠΓ�O��S��\�J
bW
.��[�>���qn����
��nk
�nmM
�Y\��F|uV�����u*�{��4oT��0��
�G�������n?[��g��l�"؟����E���~D���Wۏ����j���[(CD��w6�!��QB�Ʌ���z �Y#Jn��D
E��G�1=m;6scfON�:
��˂���I<@�Tu~���ښ��b�i��~'g\!~,Q��_A1�ʢ`6�/ПԳV�i
�d���ۢ]��n�mUZ������NA/Q�I���.XTQ��i����
�c�$�&�QV�f��6�/BO���ѭϹ���U?*��nbm���z\o�MZ���Z�>D%s[N�f���%
f����r�rz����h�?��v���k�1�`��v�ye�.��K����a+�35�\�����
�~���r��:����g��Me�b
 [...]
-MϽt�1�?R���`�����Z�B��h�J=��<�3Zy��(�Ό�2}O��F��g'sj��ҽ����=P�O��@�c�+��8�!Ae�]�a���G"oO���rc�
&sP'�y|���M�7��s�I2�\�l\)���ԭ�~�}2�i�ܗ)�xT��^�o�qz�.��?[��g:�l#؟���U�`��7���X�
v�>u�B�7�a�ϳ�K>B�槾�vݲt?�;�rZ_����(yYF'i8C0�L�a��2K�:�φ�&���(���~��wЌ`?L�;�o��sҌ`�8�!M�_���?�Ά~m���-?1�!��/߫'���
����?�3�����y[~v����#=a�m��M[�������K����4?������m�=#�/������S���4#�/����#�D��=�+ m�A�u�gZE����,O����F���Vĉ�
퓾Ub
-p���;b`�/ޟf��m\�s��
�L�C��4.@�Q��
�g���\�AWW�d"u�[���
������H-O�j�R�
ב�v��3��gG���f'�
�y����9����Tu����ko�N��V��\O��y��fwF���S�n,��ׇtl4�ܱ��!���ynV�Jt�o�!�Ge��D��M���#�85�w�;X��J�jϕ�l9˜����`�6t��ڿ�Nwfݟ
!�0��"���W�����!��cR�f�j����w����ɴ���ʬ�zj�
k���F��PV������F����/O}��2Ձlˀ�U_� ����H[��jR��P�N�@�E0�C]�h��97F��K��,+zy�ֻ�R��f
�f6/�K�`y
-��E�ǻ�@�mjw=�,odA&�	Mn
ޏ���lf��֝���a��
�1T^�r��了t�D0�q#���t~:\-
if���<���>�=��W���
�iF^��
-�t5�
F�^��� K�G�uUT��N�Wxh��Xqr�g۽j��K�`�/!�2
|�X���<r�Q�ڎ�f�_ڼ�:ڰ��zoI5?���YiZ�C/?��J��l�.�Pi�6��zq�5D'?�ώܸ	��x��'��� _<
?v-�Nϸe��n��RԖ!;<��B�.��ycJ�:"$�}E�	�
WI��G~6�nЇ�&�}܆<�.��>T��}갧�kGs
e�K�J��0r��:�g�^���:$�Ge%s��OR	�F�h����!�}LJ� 
Ht�unVR
��K;|��ˇ�~��Dh3b
v� �́�CvԫCI�@�Jƣ}>�����
�3^|6�Q*�a�m����

���9�����f�ܣ��[K��Nw%�������j�ץ;r�׺��5�^Z�ڸ���pi��赉l�p���Dx
]��2�ѣ�|mh&���Rm�g&�&��
�{���gc����4���v�d:⫞�ŲN웵�n�X
��I����{?½�n{{���F�5
� g�΃
w3��	#���l]�v�N�%��bp�wdY�z��욍M��hP
-��KGt]�E`�
�T������T�M~ϗ�~~����X���
��x�-]z���
�K���
�ԨӇ�Xs{;��vݪ7\�jz1!�}{����N9`�u?`�
p��i���w�wUx\{1��bn3�S�;k�WN3_Zn�~a���j�f7���lA�u`?��	�x�{�`�����wЌ`?L����#D����+�#z~��K��m�a=#�/�׶����������]m�9zF�_
���'��4�?!�߫'\#����_m��
)�����4?��������#=#�/�ߴ��D�Y'�:�X�Ky%(�
���|�����:nX�����6Q�l�ov�����ص��ݍ`fm���M���
�����W��^
X�`
�I3
��jr�΁��ӏ	�U�d�]xɝf��ѱ�A�YF�cM��~�v�Y7ޜ|��K�i����g����_B�6���D�5��R�4m�
�.�pt��I�
]�k{}
�?�κ>�ζ�nr�]�@��y�y1/��m\�X	<_�	�~Ot���~@�Y�D��-H`��#W݌/��I�r�5�����vϫ���,+��c���P�d:�X��
��������W��3�6�{���M��L������
)�uf3�8��=���=�o��n���蜮��,��IYZ?Fč{
9�K�`���Y�+��؅+��F
�����K��Ʌi��Ө�
i0~��R�m�+��݌�M���0�·�]Fj����U��#����J��
��DS;6
-��������lr>ڴ�s���%�l�^�fE���q(Q���Y}
ۡ>���?����,��9w&��ρ��d�p�l��@��p-�L�g�;`��u;״�0J���ڿ�s��޴��5�/��P���öX&;J=1W�y��=D���P;��F4{�D� ]��G���>�Ҳ��M�\
�؇iroU����s�)
a�ɵ?�
;���e��Ԕ�b�v]rМ�޿8�!��/_��^� ���Q)&<�">�4}���({Nh�ԵЂ�O��"��,�Ez���1l�a�jض��B�+ Ŗ�T#X�����u
�I�sI�[YJ>r�7�5NO/�]�����@՜.^�����fx�AO��G�#�B�6�-��i�Xb	�Iɖ�}�����~D���P�
�u8*�G��[PSM�f~Խ(K����X�����_�Eܢ:���h��S���e���Q�5�b�=��m!ӧű�0�i��|fJ�3$zư�n��\N][ˌ�M�y۵�e�9��m��,D#�mT'�u=78eɞ>�0��e�%cG��*����o��	�1�d���	�>����.w���i�\.�,{��ԣ���������N#�����3�u�e�w��J|%��Fj�y���p
m ]�^�m���#�
��A�l�qaD�p�V��k�X-��ǒ�	ff,��1SH5�אn�� %�o������NI��x��Wc!���U��I {� ~�F~q�_K�C%>���Z,�jgJ3U���N
��!�T��齇�û"�����v���ħLޚ��7�T�ިw*A}����ܮ�~d�I�x�F��[^V5���/ [...]
-N]*
v�����:i��s���l�Q�F
�ıd�g&��
r����+w
�ȸ�.�w������,��Ʀ�H
jGt�2
Ԛۻ�j]�ո�]���	������
���UẪ�Gj>B��
Q�QbcY=+��Ι����y��v���(�Ӈr
�*
Uo�MU���\4�P�r%
ղo��e�,��
"؟

�
-�
-�
�tG�k���t�l���i�#�#��S��sB�Z�����#%��ݼ�,���ݔ��6�-.�8&����۷�gjG�Ҭ^�����������D��&\��(���~��w����g>�	���6�!������D�_��~q���-�$�!M8&����4?��������=#�/�����Ҍ`?5�Rޛ�\������
�O�f�Y_z�
x��5.%]q�x�����lN�UN�a�E����ņ��5?�7�d���F��yQ�j{�,e������C��h�0�9$�^A��|�K]���w���{���]ZtB?��co��C��Wn��q���qk5���V�N�K-�
���blVp�
f��c#��0o�z�>Nπ�
�?���E!�*~���X��8���b-R+;��
g��۰�
`9��fg?����S
�~~O�|��p�y�4ϛE $��'۶h�}c���n
��b��.�f�d���%��Vn�9�ם9.�6��:-�����h٘eM�;}�����<�G�f^�W��f
@�iP�+zob
����?�^��2�lyik;�7���cg�ي;�+�����f��\���
z�ɣ�ٍ˳�r
K����'��,��\=�
-�
-Q���
-��F>�EW�+4��Y�v�`


�8l��[e�}����<&�������xW��3\�bˡ�A���K���l"
-ivx�s$��D�O�-���
8��+üy:�o�k\������eY�/���2�Q��ϩ��
�O���7܈]w at 7
W�; �����W���
-�"	�N� ��
$:����qC=r�F�Y�����ɍ^�7�M��U^�_�
'
�㐇џf�� _�?O����8���j�W˫ŏ �*�LH3�'�&
�ʰ�ۥ*�yz�L�-�^Bu�FХ�I�ծ{��_7�{�\d��9��,ݹo'��c3"�z��m����^fiX��d�!�}{���7�u�Yap���ܨ��׷��eD�զܸƬ<\�y�<92q8�
�� ɲ����J��z���֠�x�����tv��1��c���B����(
�`��5
�J=vv��
�s�{)��o���8���Ўǭw��ɶq䖫i�O�cBxL�25�`��S�v���P�Oc��[[[����� ���W��
-�K2�@hn��Ʌ[��C
��ӭ�)�b�{rY߭��cm�͞>}4��8b
���^>};�x�%��,�ӹ*���R��
�D�?
��J��o��s�������ߖ��n�$zN4��û����m��yb���c�mv�AO+Vz�7��Q2#ɣJ��m�������!(Y
u;�?��;�_V�e!�	$Z�n~����o��>?�sw��A��s�����ٍL6��BM���Ś�~��;5m'�q���{���2�{\3���Fi1*4 at M+�l���\��C�!C���$���a��
���pN-���EeIMo-=;���۴�WG2��V�#��-�>��J�:D󑦨��t���B
��� ���ѿ��m����
exif��m�$���=w|���}���W�V5�Q1.[<��Q,�/B���
�F)���K��Z����@ﴄ4��k�O���%��!�}{��~
NA�n��t�GZ+�ma�
��m���U�T	��(pӪ��G��'�3��;��
��1�Iz�2���(�a� [...]
��χ�"���\��})�����N��l;�ت�ݔ�{Ye�'Hy���76▫��8]�
-�
T�6�U5ݮW~[�\4E���J���~Y+����@ۤ7�zI�郮��%M����#�u[�ؓF���f)�5({1�u�޶�����(�{�}��Z����
��0���ڐ)��!_|��ɢ)N2
�̲?}k�zi��~Q�z鼅�<�8|�
8
�>�� 
�A9{WE8s���Y<7U����
�c����a�J���Ur� ݛm/�������z/������翃�wЌ`?L�;hB�~��w����9z~��K�E��>��~q�C������W�9zF�_
��i�O
|H3����3Q9������8$Nԁ+�p�U+��&��M$`OJ�0�xE�j�$�S�c_IC�~C����bv��qi7��f�II�-U���
c
��0i� �/�y��0q����T7`�qHӋRp=�3}�dCXO�0��L�+��Ի#���'��|Nw�-j8�~vn�|���ӫ
����KY�
-����'7ݚ&�Y�
w�|%zs
-�$�����K��8�O��O�bO5����u�,%[�q�{M���2��ؘo��>4l�k�?ZG�U2��Y�f�l�Kq{��ΖA��濄�I�~�������<����4�S~�9�(�<�Ӻ����L�4�0�
�݂���h/7쩸X�
��31{yo2�EPA�FK�g��3g|�2���
�e�^1`*uH��v��d���|M���ǵG�n�
���ɑ	�k�4��2k�enm�֞ke/��0^��|�Oo3��\j��e�ev��A����D%	����#�8
���

-?BB��h�Ы0;��ʝ��!�vӣ��jd̎ˢc
̥
;�Iπ�d}_�ݴ,З��(��墬�K���|�9�@=���c���[�0��9���{���u�iz'����Aܱ%�����[8e��B�6$O�g��˙��q\�g�Q�L�#����"؟
�3�J4~�D�C��c��
��y�m�)�%�s	HW��\x�-��Y�
a�\�j[3�^�gm�˕5Sk�J�hi=)���d��{�
$>��s�`���®d�p���>�����a��c"7�򅮕��nc;��p�
��j�u�x!3�
�Y]�Γ�����f��a�\�� �&��m��"}B=��O�����3��O`��̴��-��ܚ5�y���
���z�
�uj������@�x���mV���X��S��rʴ7��?�����$j�_���
��o�@h^�ϴ(���{#qmuŻ�g}����&�}��*
{��ʮ6�l��It>
m���%?������`�	��i'����>��oD���J���X2f��s���,	��Q��S�6z��,�if�|Ϯ�<�����jU��V��m
-���~:锟}�V��J�MM�%�`��
-R��|t�$�<gR�a�KL�07���gA�+�bPo�\|�\z��q�-�Z���1!��G:=T�u�흪�7��,$C����_B���_�J8$:c5���@ ��G��7��
.
$#x�좽�ϼ�:��}�u6Y�L�
fp�m�w_;Rg!����{��dᝃ����.ʪ�Ʌ����1��h�
�2
>��E����e|�W���Dߟ.y�; 2[۞�-��
-
�P_SybU���h�J��Z�*������9�:5Ō���B3o��F���y_��	�����閪H�h{y6�(�}G#�`"�*(��
���ì�v��FU�\_��τ9��i�O�z8�<�4
�ʚE�T��Ag�H��� K2��η�sx�.�n�cCEӒ�e��n��ָ2ˤ��x�)�������}�\cl:U��&X�����������
g%��
T��8L������;}���@���Ĭ�y��Q�G�-��a]�������_��c�����)"��b�a��[�w�ߪ�1��� E�.��`�~��Bz����+�ܝ��ę����m�c0s����u6�`RU��mo��Z�85�jr$g��������J���6Ō��Lo��
�M�|#�����#�
-J�h���X�g�_����3��QSpY�o��T��/Da
frY�
����޳�K�'8��������,
l
8�3���"�p��M�\��H����/JAI j �p�g4+j�o�6g�����W��k�U���|��3	����+w"`;�[ioP���u�Y�w
-�}�dQ��L�߽�#�����_��(�O�+f��g�43<t���lT��*��Vg�=ZV��b�����d>�ܪs���y
���k��������f���c.F+`����� ���K|�����) ��:!M�
�
(����xU�U��ʬ��X���`tK�f�'��9=�
o1L��� cN�}t���q�?0�
-0���y�٩˵77�6킃GK�}�S����D�4�9Ӄ��>��|{7���"�h�.�՚ͣzן���k��찗�W�\�Þ'��	��2�<�?�UCe�9�]+��hk����4��$���%�����t+�����Bd>�I"�
����q�	�a/�����n17�������꘦���B�T���Bu�:�- �2�.I".M��Q��
���>
�ς�����G6�U��W��b�����m�v�vP#�׃r��lIS��
�]�����
����D괺w�������q����tL����7"������ ��$A���0�Q [WaH2A<(�pΪuaȜWΠ�?&A��O��Adֆ~��M�C��;#�-ړ�-=n�����'0���
�^-������֌O��u�u������N��_ȿ����E��?���5a��w�[����Ն�y�����B��
��g�]4.�AAlBQ�E��wQ���5
�^�iPl]��e֣��X
y�3u����[�hc��|��D�ϭ�v�R��M�/_�50�ޥ����^/�����<�O{���$^7%�� %[?��:7P��l,�
�0!�ӗ��
b��\�ţ�]K�Z��\��E����q�x���NS��Vb�����!�ǿ��?���D
-`�rB���J�U9}�R�m
����\�Aɡ��2���b��O����GE����ԯ�/�Q���+�ϩ��xb���:^%�8+4&��8���: ƀ��_0�YX[e`�t��T��� ���0]�}���r$�%6��;z:��
����d(�ߜ{
�=e�3�B�U�
۩�o�
}5;��m��nk�8���Y�'^��9;�A�􀚛�d����p��ioXը���A�m,���_���\��zf
�ֲxio�8������@Fo��.��tm�rUu�x��_����w�v֧�}C�
�?��WZ�}�xƵ���d�#�=�SR���9
j�^��?�<��d���Gaָj��̓�ܥ��I�`��}v��+�: �ʧ?��g�k�%���7���2��8Z�}-$���ϼf0����
���l
���2�1�99�):q�1�����I�x�^���'C�M-
����
-
�O�en`� �O��i��
)O�Z��?`ɑ{����.ml���
��щ%��؂�i�Zw�N����`[k�9�W�F�K9���[�E)l����b(
�
�9+I��i
-�_�]\�߯�U�k�@NrN�</�o5�O�#��k����r���p�kYYm��F���ݺ�
�%�ˮ�ý��JG�u��9UA���[λ�9�Pt\�J%ԣU*~�T ׼q:�
�e"^��xn�ent5i��{�VlO����X�׸$��"�[_p�~�(h��(��ƾ/���������|Kj�L
-����'�VFF�j�L���r����p(��:�O����ljd���}&�� �DOZ�����,���J!���
�S
>58�VX����>=<PvG�w����o���S���+�ڏ�r�
�X�vh�
m\V
����@N�6�_��c4o!�毄F����ƈ|8��_�jn�c8����DA~K
��Sz��_�ٖ�p�f�'��?�����k���+m�be&l0R��b#A��	��Ҍ��,Q*�3�a�o|!��  
:��b
N��ॽʔ�����o=0�����ڝ\���J���5����՜�4�p���/J�1%V�fOh9;�f��)s��#\U&�wr1�%��B����M�7�Rn;��9��rq����]YU}���N}:�^�G�m.�:�gP�P�Z���p��̏�]Q��]>^?�Y��(�[�{d0
�7;W�\)|-��39�u�b���y]B��u�P�
��"��<�p�
����
-��|�~.M��yh��7a�T��-|���t�M���Yzq�L���;����py/���\n=�^����?�-@����JU려�x�5����u�0�e��]�K��2�Cg���u/빂WU�T��C��6ѭ
-
�ΐ;Y_�Ck�*�aKr�A���w��Ԙ���Fk�K�B�/�Xe!np��~P^�78%2�9�7�v��f�;�ġ�8��V~;ՒBYHy9��s%]*�2��rv{��'������Υ�OV'r+�Nø�;�f
s4�ݯ)>{�	��t*��#`��ۖ�
�Ƈ�kt���Ñ��`ws��:,g�s+���:��{7��L��$W[�S����
�'ٌ5Dz�6��od�D�2ޤ��v�'|!U�'��b��
-�儵|F+�����c�A-%�������YUF�����T[�iaG6_�����U��e��@�į~�=y��g+ջpA���'�rF�2�H�_��	����	��Nm��{��D��彼�Y���!�j$����>I.�w�Ը��8���l���O$���53t̜��w�;p7��s�
]M�1J�h�_(� �K�}�5�o�ky.�? u2��_�p��첹�j|�xI
-xe�K����J�'�3v�Z
8V43}0M��r��r�R�L� ��kW�+O�].3�r���
-_����p�7�Ob������
���_�wՉ�lR���|ʨ.��-]��a�ˏ��l5R;ou����/d�!;FmeM�]Ň�_{��l��
-���"����Ze�ԯ��G
�b)�
-�Ew�ݽ�]���b�Z���W��{Y�fg�NLĢ����:�Q}b�1�l�$8��<�W|�gK�u�^4�[;� �
-5F�T'�8d�?�_��PWs�����Ըk�l����q����2�CY�ކ[Xc\�x������E�
��r=��+A)���-jM�����_��*[�d�"o�+�|K�[|!�#�
�7z��ݨ�btY�sC�FŞ`�_��=����.��2an|I����Z�
�
'�L?
����3��+&zh�M�Ιtט��n����;�wL�]�*D�סg�
���
���1)����BFe�I�F�;�˳g�T�U�j�j��&�6L�HY�~7s]�;#|-tP{�l�Ecݞ�L����}�&ߎ-�u� �[
�S�Ҵ�L�� ���{���dQ�� ��PL'ߠ�\u�� �1w�D|��
v�r\���s���p�{��uw1��T}�3/ɣk׵�ܟ�.��
\dx�:���<J�]���[|!U�K�?��B���4a��[�h�u����4?�������7��&l��b��4�i�?�ƌ1m�IP��]Pd�p��ԯ �)P���Hpnd�56X?���J���`�j�청 [...]
�l$��I\.
�������C��*:�1��{��* �9����珆��eb6m!��Ӷ�D��m���ц^EV'�����>���[���Z�>�ɺEÞy\�Ƅ^�u��s�K����H���dyF6u�*�竣�x��'[=|}����M3+�C唾ڔ�ۅ".���B�T�W ��2�����=�����m.< �2EPNe?�����L�_�n)��a`3��"��Z׆�2eyb���P?��(��>�k���l4��
>�ʊR���usV���L��%|֗?DgK8���%(
�)m�'�"�<?;���?��e禎��j��|���+v�и����"p;d5�h�2����.m*����齦
UQ&�g^N���/"5���5u� ��jF�����n���j�_
�%ʶ�/v�)� ��o��#Q��{Bo�¢�^�AS9���
��+ŏ%�k�i �gR�2�	_�_��(������
z5���se��
��V�O<���#+`���NO���)\Z�Q.n�#��5��� [...]
-�,�V�ܘo_�_�
���.�x�p��@�ck;g3�m^�E�?
�BF�pE�ǣ
z�N���2}b�l}^R�4��L\�
���_\
��|���sViϴ<қ�K���p�ɴ7���=�� V2����|�*\�#f�hU�����&�|sE

��DWcSN[U��IBC�EE��j����&/a5�0�w����t�v���c˽���:�B�\37[��� �� ,���9���1�
eN}�u�����
y����z�~삙�c��J�s�nZ�On�՞�2�%5�ͽc?������6>�7n6��Gs^b�.��Qʼn��G%��-���*�]�],��>�|��@ٺE�M?��#6�w��vO�r����-��-�E
-Q��S���L�ך���۲�\v\�]ё(�K�f�m:Ԍ郤+
��K���� 0Ɔ���
��Z�?w�B
���_
-��T�1�+�9]��v���c"�<�C,�<
/�c'�_��5
f���$�R����
��T�Sܰ���a��K`�Nk����lI�% l�8'�EP�G#��M��aUϽ������6/��*Z�g�����I��Y3SƓʗ�{�Lͳ�
��1�2�

�c�ΣĘ�G�wn��
�f��sP{��B�g|!*�+Q
-C�[�L}
*٥᛭��ѵ����j泉M
#.o���
�]C�,oh��m��������k`�{�ɷ����^%���4}�%�.�VeJ��:TmVSN#�� �kb5PN,&�n���ץ�[����슑�t�[g[6d���K��/�J�,�k��t"��ɇ`�r�A�0��!�L�O�J�E����� \�
�2A�Vw8^�/?��I���&(ۀ�0�\�;t
-
������m�eE/5X�Z
M��}��`�`7�"�5^�m�̊�0�T�~�T��|�2����H?AWߵ4��5
d��5v�� ?����m>��3�>��9�rJ>�fGg:�-�p����奝�7ĸ���
�㦳�j1�<b;"�>��α��v�;ܘi8���ޣ<z���:[xQ��"d��1���*�P:`�`�ΔΓ"��n��_���u.}_��\(y\
-�w�Jzvfg��XBk\;4��G��ٜ��Ky�b���]��
`��\��;T����
@n�G�$�����{��z5�u��� ��i_��Z(L���F���N0:�ÔG�'.�p{�#�p�9�i8^���y�i�gKT��h�Z*Ԩ	�IRs2�2���F�M� v#
�yy��)�OG-�li�v ��n��n7;�Wcp��?�M�1�To�xD�
a�9\�̍��^5(t#.ݨ5Y��x_$�4R��H��pX"Rg���t�ɸ���D7s߰
S8M:��;�%
����
�)�q$�|�G���̣�F	��
�V��E�=s�fO�ͻԚ�h�L�FD/����'u3�����}u2f�����I�j���
�n+"j��~���|�i�k�|���g�_a�笢������/E�Y�Izp���d
�g���I���E��r�����Ψ�ۓ����nK��ŸѴ�K�Y}Y����p�%}�5�)g^
_���@�wr�
D��%��2O�o 
/O��A�VFk�:�
��77�0��
-���7=��,�φM�Zo&�f�a4'��Cn
-�9R[�.QV��$�!��Qt������ɶr���I
�h~���R��_ȿ����E�	k���ߚ0~�w���Sw�yH�@�{���А���a��mS߭?�AA�^@��@ވq�[1�W{��|_����aݽ����o�o
�W�1���e9Ye{��}�.���O�B��� ?>�~ͧK9P��I���fj����� �K,����\� �]Z�Z\�l�iǽ~�ɉ��ݽ���o����ZT�
���.3��
7g����t؟����S��t�õ��|�t�G�O��+��'{�"(6O�
� ��\��
4�6�VT)�L('ң�S&>q+
->dW�7��tgp�]mN�ݛc.��y�X8Z򥚅�q�S���E�vM��[�-f�PlD.(�78(�^poŔ>�&�E� ��Oc�0h�٠�>p~�Q�]c�]8&�^٧m�م�w|LAh�+33:S��e�j�ݱ4d�m��_�
����E{	86<�f at 15SO\F�eP�W&��sP�.���a��䘝 2��
����ۺ���<n
U�?
rws���V��������A��
��P��S�����$
cdt�}������\i��Q!(
_UP3P"5+r�L�l��B��z
?մ� Dx�"��2�^ߖys��*��V)Y']�8�k+u4$����Ձ;�
�f�-;����:�>'��Kv��E��-(U���R
��<�������p�h�u�;���i�Ӝ�Rë2��;�
�2=���8�Po}ę�Qn��n+k�-;_,4t�����M�_ȟ
-@�}�]�a�n@	��ݗJ��w�r��"jLe+$�H�#�~��L���3��V=tO��0��}p�
��RȎ�5��j���ї��%%;$犭�V����	�w�� E�|K4�2�t�[��~.��hj)>���(�{,�~م��	�'�LJ�5� %[{`�}�Eo�rr���������-��+v�z�s8��:�p�S�.�+�~�X/�m����2��܉�
X��3=�yD���g�������
G�6/�����졲
l^5�r��6V%�E�}���D՘���
�	95Z�l���B���(�����N]��s8����I����>���<`P�t��M�h��y�i�
�2Ɠ����b:�E�%L-=g%e�p��n�jKO�	O
K�Am,
�N�����r��O5����������p��k���$�>������#�3�F���4���C0~$��CMoG��Vq�S��"j��R'����ũ�`������-;K�f��0ߗ �yX�^��{b��ƈh�'5�t�
)��{�&s��b۽
�д�7
���n�k�T/���H�os�,�G>�8�ZQ�q\}>�	� �p9j䵁 � +H\��`$���.�&a�^�5P��f o}�oYߧ#�}�&Rf���5��
����
�����J���v����d �Y��X1���
-�+���T�����ր�G�?S����~
-8o�]�:z�bҨ�� �|����
���b;-��8�
��ү��<[�<
�J:;4rݍWX���A�U
-���5�J��	�%�l��l꓾����П;������/���-ڠ0\$@�n7�J
-p�gO�� H�%/
o�*c�I#�]׎��X]t$��i����}|��|���,fLۛ�o�p�j��H���m下AT�RV��"p��ePb�y���������E.��Qeۜ�DA�O����y�ݵ�U9�#g����`
ΛV�}]�'�*��c�p���M5���,�«���q���Z{ö҉tGC��dG�q��S�¼wk�5OX
vMFeM�<����Λ��m���9�X�2"�z�a�*;8���۔.��5���O�n׉'���.xC�@���
S}�yc��l�ٷ
L��8���l����?�	p�$���Ii8��.���"^,�K����SO�r7�@��|l�Ԥ���{KU���NFU��5g|!�v83'��hq�ٿ
�� n@!d��T�9���K�u�&L?@8���O[��}?�R�
��!A�|.×����غ���>��j�S���d��*���jP9�b�W��vS���s".
�k$q��R��f(*��F��%��3�˱C�+jF�X���mf�S�B���H�9�7#:v���G��D�� [...]
-�ɷ'(�	
F�*3�tR��k��=&��z?��P��Rj=؊�e��+b��v�\>�N�*3�d8C
�����`�։�2S�����
6����-��PpT����IhUbH���S�₆[#�Q��Uε�J+80U��{l��nt�^��)I{+������l�T���(��{CzV
���?gNJ�ff�þgcΕ���C7�Ój��7�W���%b;��D�F����W��d��-���eЃ�����KU���-W���X�K}S`�|���r�DD÷��
2G�Ğ'Z��	2ճ%a���>7�@���T��X׎��^n�ۼ{D/�"u-�ƌ*��NE�L�:Y��8��B4w�7��5���X�O�Q"&�;&��x�
d`�b7���
١��
Ӎx����&O��m�$���#E��`�5&��r�n�Q�>ϼW)��z��4+�l�;�j��_��k)"6K��
;�U.\��aj�u��D�����5AOH�GK�n@�D�D�>ƞ������*����>/�L{R��6��-��j�p�`��F�������@g�GV�$��:���qzzs:��)�ǣX�ٷ^
nWSt�i�H2��W�t [...]
-kJs4lj������Z-�16�o��q����&�,�V����)��������n gQP�^�A~����y(
��
|��4���ȗ�'�:�O>
�XC�\h��Bې�uj
-r}|j��y�LV�3i�AS{�=�+���t�y�v
���po�� ��@Q�|8G�/2P��@�4TP�h4���,ȇ�
-���+�w6oX��t�5Z�z�I��q�4��Z3�Ĩp�
��4�e�i�`�i&w���������/�6? @���PX{���а73�~v}�Y ���izmgwhk��m�҉�x
��L
���=)>+��:\x�}��XOc[G��
.���[�7��g��X��]�B�/�
��KP�܂���
#��'qY
�\��#�	X`����-tݺ����/
��0źًp{�=���,lT.�`��6~�W��{rӞ{}LS���$�9�V6V�ZY�֬$� �>fԏ��R6 at C�
-�
����am ,� (��
�
6S�uO����#+f��N֞51K���e�OS�'���rI��K������<.ۆ{���)m�T�k]�a9��p���f��y.	
-b*�1
WGP�Uޟ
�ɦ��`
߄�͍��t:��C�׺ݮ�c�=��i��S�=�
�1u�ݽŽ.E8\�y�
�sve,��>���~��q��B���+ �ւ�}�s|W�������P�(��0�{
P��QM���]�]UR
�D�c��*
�Ůؾ����m}~��\�f'&�*��̃p
-}�]K�ת3���h���� ��^_x�z�4�2�OF01��.�A����I���[�-��mn�i�� �*���� ��/�
-ٲe��9ި��l�3���������_/hÉ6V���8����ijî)|�?i��l���$.?���v�/�Db at 9��e����WLx[������	�2���sq�/ꡦU�1˵vo���R�<ӆ˺������ko1�%
��
�S� �����t��|
�5?/6�J�4�n�粑��!�=	~��Н���ޛ��
qXXc
+�
��F��'�䵒ޥ�T3�yI=K����K�b/�ӵ��F�Ж�2H�iY��� �1j����ˆ�� ,��*�=I�D�;�ۭ�3�Kݠ�8��	���Nf�]���
����7�w��
�H��
�NsXrS^y������1ګ�ݘ|!2�|�{$�[��R:����h
�<Px��|�7J�h	p�n�v�A�8J���z;�+r�jln��9�N�u\��Y���3ʢ���o3�!�:���2��d�rK&��J������	��$�^�C�
a�_�_��|C8�<��p
%�(�B�an��ӎ<��
���������

%���
#*W�}Zz[�Y�^6�g�s>�Z�lyˤ�%�[)י���P��O��to�(��\�z�y����&�ϱ�
Ϣ��[ҟ��Okމ��V&H�n�--��"��s���
����鄫o����8�F�
�$�j��t|�����*�\1��\o��� �
�<I>��]~�ζ~ X�
(�K��d�y�5��'-��}�γ�W?G_kN59]���--!Ֆ�x{WvLJ���zo�F]]���d��x[wn���q����f��&3ݾ�����%�oB!��՚��K�����wQ/
E�>�ɷd`�/��I�ܐb
-)�^+�o�/9s11�ٔ��xa��v��؉͊:%5ɺ`;�.}�.�	���}���I�Qx����8
	5ɦb��O[��a��`�+'8y���(��|���	�a�l�0�����n�N�C�4�[�Cw���,�%��N�\�}�
Ύk�!ت �5b�
����c�8\Ѽ�#��AG�`�
��
/\Q�7�ɉ�	@^Ҡ��b}W��; �О�Z��hĶ�u��l�o������y
�������}e!-��LBZ]϶��:6[;��樢J�A�H�u�e���6A?I�
�5������
��
䷇�ovNHI(�ՐNd�.O��Gwqʝ��l� Rjwn����V�ٛJ%��ϛ��|�s��d4ܯ8�RP?�Ʌ�z?f�g�=��lj���U���|D��D����O �'�
����+S�-�
E�5�|!��n鏧Ý�hM�Am_���D�@�w]�]b��p
��1�
Ǔ	�*�\�(,��Tr����Mo�v$���=.m��˰Q�q��Lj�B��#j�  ��/ [...]
=
l�+�
Yk9Fw�^��w7n�R�J[
�\uᎼ�@�{bZ at u�[P�` ��OK�9Š��u�PN�{!��  �=C<G���"����? ��;(#p/jމz\�f+m5�=#�Ry��
�v��xe�JJ�a���>�陲Z��@cZ�djʢ�����JW��#��G���&�B�ݯu��
-��n
꼫]y�
���3 &�\sb�]�
-�3�=LY�FF.�g�`Vmw<�
-��O�@�O�����}���Qa:&�X��9f�K�^�+t-T
��2�#Bn�"���|�tQ���u�|�J��|4Ӯ~�������
-P]j�<�$y�>o���( A�:��C�
��5�N��Q8;
�Z�l\����kD7jќZ��
g�p�'��փ��iL�ZW�˪�V73R�,d���n"�<��a�yJ�<�(곋>�f%�6k���H��G����puD�kc�G��<��
_~%z����D��G���E����/�H]*J�_�
�����UQ�[��Y�;��B���+\���pP4n����������I�>ks:̵��!���OS�{�=��q�_݈N+��>�_I��gb789D�t}v�q��f�)�3����;�I�e�0J��n���_I�~��M��~!�q��m:lܓ�L�-���)�1����Ij���t��r
�ϋP/S!U��$zY���
�~g����Y\�m�_�Z7�ص��4��ƻ7��8�B�
{7�
����^_�6ę�v�!�ٴM���x��
��o�u�ė֐~]N�P�~N���e\"eޞ�QI|�'�)�⛃|S�vK
o۪6��V��z'˰5�cF5� ��L��=����l߬��D��������lV�rmy���`��f�+n]��AF�={�
-T�
(��;�}����kVAݨ�z���R#Q��í��װү��JƵ��Q㆔�0,�g%U�']�Q�m�n��	b8�@��* �g�Ϲ�^�܂M 4�� t ��y�V!x��=�|��˄9��96u�v;������	�jH��(f@���l�^F��[��+�4V�Xᕠq+��xt�	����'����?��B�A�26@�?AQk�h7W��
��C�h�TM Jv(�&D��:ȭP�f4
��|���wfc�m�
Ȋ�!�R�,ηQ9*��:��M����ߎ������#�Pӟ@.�9����I�Э�|�΁|��y�A>S� j�z 
���r�OA[��
�2��4Ȃ�d-��G�[����&��4y��{�Hۺ��`�d�u� ��lEg�qI��krps:�NA~��A���@~�+CW��N{�<���m���m���2�5:�6
�\bk���ǵ
:����;��HRػ��n��9����J�+|!* 9q���kԪ��h [...]
-PvM����]
*����
�
�9��SC	�em45:���1
9�1�ۛ�+��N\� �k�W��e��b铝���]P �9(�o,1
-ܹ
-�v�5��|���\�
��4��g��X��gE��pq:L�z�.��
m�r����Ϋ����֟�d!!Y���@N]�nZ�~N�>��n�IP0�����w�)Px�Z� �xʣ�/$��Sܬ�pY�f���*�����Nz����͐w�����
N��_��g�f)ց�$3o�fa���_�� gn>�I���E�
-
�4��|2�W7��3�)4�
���������z�`�t
�s�����\LEƕw���q�_[HV?�@]5��i�xfԻ
n�\C� 9[��Iua(��|^7q( ,��}���X�b�
-7�=:�ʘ|.��4�K#�O�-�
��>?���f��k�tS�
=��Mt�xbt�n
�m�j3�X��
do���
eO`$�E�
� ��E���O(:�1��n,(bs哸� ������
 iL<c�P
�c5���p��W����wۮsʨ��<Et|����ü�+�kz��}���]RMp�qrg���@ofpǽ�IZ�o�|_~E���'��d�� v}g������M��p��;>��s�
-ң����Yޝ.u4/�t>����XvxWo�����O~��߲C��
��@�*���+=���놆�~ �f�[8��g�5���E�߉���F������3P�ـ�gZ�h�^�_I�<
��,���P�
s���˶��zB3R�
�e�
v�K|ˬ�5�����#��M�s:
-/�
��(��a��ş7�V at qL?���x^U�psj ~F
�L���8M�Y�ɛ<]������j�퐛��!o���p����Iͱ�n���Sm�du��ȉ�\��hW2�LS�/���mf�?�Y_�l����{�-e�%\�
-�"l��Q�S at Q���!��O��5�<{�Us�?eo6d�I& {��o�g��]�u����sYe2��aS�ܥ�pX��V�^Z`���Yl�����G�8����ܩ�	
����Q|"�̊G�r�
�m�9��v�:H˪�c��� @ԟ�>#���~:���<�RA>
z/'۽� �D���ڲpnT��h%�z�6����Q�X�ﻧ�nNG��hog�
-��(�X�(���Iهiȕ�i�s
�X)���ɖ��D`�������/�9j�����-�Co`j��w�o�;
��Q���v��͠Nq��4��\'��'OY\�$��1��ш���_>,��z�6*��uP
��~l��A�r���ޣԏe��"�� D'^�y+m~rN}�[VA~�Ii=]>����v���K�n���.��F}�H��B�����Ӹ��q���F�[6-fs��[Pf��P\��7~��P��^��?Rz�V�z[�Jz�=3_��
���(8���:����BI-f	e�F����=a,vZH ��^>�"X�C��{��
��^g�;�=��d5�u����D�l�
u�YmU½����*q�T��[,���B���� i8ʼ=N�5�3�s�k�[��a�&w��au|�
�O8*eP�O����V�Y�YnL�F��*|�Yő�1j�V��I`m)����\��]�Wv3Y���U� !y0����OB��'e�;KR�t�]��ð���эa��;3������89�
>Phw(P%�� [...]
����B+�Ԉ=�V��N�U��&�.谳�
qu�
D�8��\j
��K�E>��?��
-�Re�X
-��q��Ƌ#���;�Ej���{��r�r�R�V�t�z��Q���f����@+k$r�� �� ��3$�k+��!LAv>���]߷iu�����&�7+����� h�]P�� �F��.���sO���Ω�\������0{�.����?ݧ)ml��Ț�S��^�Ҩ�T�o��ܝ�d]Jo�m����Q��
ל���ɞ����G�t��勍��'+_��
 �ր&�`�M�Z�h�!����wh�6T�Z���j�~`+�Vd��0sg)\~��랷���b�L����k��ɳ����ȡ���\�����d=嚓����A�q�kl���ܽ���K���
�\�z�rd���^����c�ޮ�H^�~��ԎI�T�6�]��\gm
-"�`��ʼݪ$C�{ƈ{��
�&
.��Jhq��I�Z�,� ��:��
�+1ߌJ�
�ey����Y�5CkS;��Y���)�vҝ�s�:)��z�Rm�#I�*.
�(/
�{�]6�m��
�@Z���6\r��sⲎ�n]��4��No���������N��f��ju
[��upgo��
|(T���!��BZ��͡zS
�O~d��x��]C���UŰ���c�i��j��>U�٦�:�2��-�F���6�l/[�]*|]�&���o�A�>?מn[h{�J�]��p�R�
�6�r/dT��U�g���0mũ�r/�����D�ʹ����iEn1�/�j~�D�)
����z�C�
�!�n}?Zu����4��
���|�U��w�4�뭼�ٚ���x�`3I��J��`�7͢,\n�[R�t�q���m����dI��O����.cq��3m�tU��}]��o�Ӥ����Ż
[N���}Et�v�c� U���|�l7��Ӫ:B
���̫a��렯e{G�.Ͻ��v4��J�[ܪ�-Xc��C � .�B���+�7�9����%~�j��Q�����s�r���e����i�.-�$
%�r�W� ��\p�Ӡ0*�Vq�ϒ>�6��؇����!4�N�i��M���F��u�vݳ��]����^�V���@�Oٕ�L�sP���J� E�엊�}�(��L(���h��b���O��������?���
��mV�{K�;ԁ�@S��vs)n��L�:��(���d�W
Q5�n�=*	41.J�dZ�
�E�x�W�V���{��
�ә��Ӎ.#IB�r*M��B�tt�@6�Z��s�w �ޘ �� ]����`�R���*�8e� �M� p(��9
�^����!#K�~�=@��
��
a� ��*@'h
��R���кj&D�d���Ȋ.������߻�%t� 4f� �v7��� ���\-�s곹;�^]
�
j 3�B{�
���C��#Ԛ< �b� }X�zb�"��`�I]�j;����[1%$֋��aTj[�gUj����{(38M����z���(����o�
�����\�`ݞ ��T��e���
��
/ ��`e8D�r6%�
@��
�6�����1eG�(,:�s	������~����+ &�@��l�ZI? ~]`�(�c
��B���� �S<���>�ko��v��aǰ��d
V:o����t��l&M;ֈd
�]{���ɣ�M9���0�������G�]��7>�|^y�p�a�
 ��	�
���@�^�?
-"�ǒ�
+:�^ ��Y��
�Z��o��>��^4�A����ѳ�[f7N�RIqBY(��
 ��>_�7
��
� �	r�y
��r����!�����	{��@<�P��l�,�(9,D���KA�����—�>�(��}����Z�0G�g��|5>�;u�`,�����	���\��!
#��[4��/�<���
z�U!
ru�
-�p Bv��B� �B������*r�L4l���|�K�1F6��S
��ؽ-�����;Zu��*m��<;��"��; ��@�����M��i�] a�d�,}gXO�g@�4�n#�eIy���
ݫ���y

q�r{p�-6��<�'oYկ\%g/��(3�Ѕo�ʓ&���
���Ʌ��ΧZ��(l�G{{e
V���;p-��z�
?. A'���|r"բ���}6
Ѽ�{�4'��ڠN��ro]ⳑ�gN�}:wd�|h�j�>%�-���k�O�A�>ʫ�{$zq�����ڶ�ׅ?�)����
�9(tYK}g��n@I����#��6M4�XTu�}
��
��/���F��:ċ���/��i�=��m����v頛�k_\ӟ���U͋�DZ�롰X�
n������$F�k��̓��)�$��t|�˨��F^R(��ы��Dzo=+�ü��
��Es�w�-!2�
�GAp�;�֒�ճ.ū�5D��3U[�6�_����
��������k��};�s�^�
5>�7�nGe�Y!X�zY�
�(|���޶��� � o�O�
-�ڋA��US]����3�h央�7�x�e[P6�N�u��U=qw�5�o�5c�]nZjT��h[+O�J��� �� 
R	�hr�B�-����;�ևB�~?1��*�
�����k
˓g֦*{�ԶTz�7�.�^~����\_f>��2���s���7�����й#aکZ�Ƥ~X�c7?)���`/�3���L�yz �{��i�������ڈ+����Jꇛ�=ŗQ�
<e at o5�V
-�����Rs�Jy���]WuzE)ñ��=q���ح�;��|"[�]��|�Q�H�����ps�R�hCu�7��^C��z��w�{�U��-S�+���l��m������3~�N��U�b�;���.�QkZa2�d��ʘ��m`�V�VC�߸X��X��S���2o��
i�+�����9��&��
 K���p$����K.ʹ5sr'Dp��׃���6��"A����
-�q��f!ua���M��۶�[��K��u���g��U���0_~�N��h�Fr������
-�&�S���iBoy[\�g���7ZD���=q�E��k�Y-RMl�
rn�W�;ѼW
��t�Pe����]�F��q�L��]1���4�O?�<�~���}n���
�+u���[>�!�h�ʁ<g�Z�����u�GO��y�;��!�O�K
�P��jLN�	��%vPj�k�9�iT�x�?�4��
Yڪs�4d[�i
N���1%!����_��9 ��A�m% �D�V|
-�5
x����g������oʛ�e���x����٨6�NޅffD
�[�6-wXD�|]�8��nY>��p�l(�מɧ��h�<��Q-��3]L%�C����9��x
(q��6� ���OA)����
��w$;�E΃|Zz�f�pCG���$}Ɲ��
������97��5F��벆��
EsQQ.�w�W.e&]��l{eyM�9���"�02Z� ]8e�(/I��g�������*���U�ܶG�Ow��B��;�?'[�^Ԥ�2oo!;��SL_�Ҥ��̂��3��P;���Q$.�v�Fuә�Ji�?I�5A�.�"����������vN��%:J"�x�Ϭ���.�v��"IG
z��๷f����Ֆ�,���D�t_�U=�09Lw���=*K3�;��Ӧ�=ٺ��
1��k�o�S�P⊸�t��; �z:І�����wr97�^|dN�z
-
r���Ǝ���_~�����tی{��yX�7���z`%��}�ٺ����)R*E���؝�Vٛ��_Z��8i��[��gcR ��A�
~�U�.�j�	�
��9
-��C
��S�n+�:�ӽ�R/��٫6
N���1gkk$e��G���Q���C����
W��*��E��aڇ�^kÓ�'��|b
�9��1_����,2�����
 w3�+�ѩ�54���`�b{?�ڱJ;5D�
�I�9`yG�k�輩N�i���Һ�QO�<�li��E�Ց��[؋&�f��<�2l3R��K�ɹ���5�#�s�A�K�ڬ�ҿ������;�7�pk�v�, {���j
-�ح�
-�';�Kд��3������T�ص�\;�p�.D���
�>�A��~�<���R��w�KӕQC�z��#
��
�u�
/�7����� Ԙ
ε���h����tM��f�+ye:K���D�)���>Y�׉v?W(�T˜���Mκ�d�wrH� ��iI��e����6���p�ǵ�e�W�!�쨾9�A]�T���Pl]�Fݺ���Gh`KuOt��4����	f�e�m��d8�7�x8��HC
SE=�h��x
�z�b�+���!����=�o=�Α���{�]m�iI&8D�J���m�w�H�A�䜙֎��\�S}��?����(�;�k*�a�\*RT�E��M�yK����j*c0 �$��$
ھܜL�֪�96��ZOl՗%�o��v�}��9���66R'l[5�k���N��Xc��}!_a��Ѹz��۪-�2U�[,����`Sr����gO�\
ov^iX���F'���S�*����2K,�h��-�
D��p'����<�+r���
�����H�N=��ļ�ZM�eK�P�}X��TD+'{�Xv�%_��� b�;<I���'q͏7���X�q��o��f��+7_ۙ$c�B͑��河9p�a��&��
X������W�՛�4�t��*H��9�Œ�Ծ��wGE��y?Ha3>�
r={�P�"��
8�x}B�]��>Qdrj�������'�굫��k~V9�C���[c7qȆNqR�[i��@��2O���@OvE����mt-��Q��ɇ���Z�<
�"�.c�@ݷu��ӦXr5�~�\�t�o̲gMD�){Dn��$#IY(��
-ϧ�"���B��N�l))U+��zڹ�R�d	�Ͱ�a��B/r�j��J���E݃T��f���������"v&��“�D��
��Q0��; ��
- at F���5�
��r���
`HϒR���-�t���<� � c�&@3A 0�*Or��� k�
��I
 ��.A�x�R�SrLNO�ב��_�b�?BQn	�^�S
�-
 �S�:*
��QV�x7����oYF\����U(�� J7�h{
���
-P��H�, $�p 	K
��ߦ?�w:�
�{%��,)2�r��A�>���E
-5�3��[���O�
�8�I�l�x k
`E�$
-�[V�.�%
=t�j�B� *8�:||�R+g ���'B (�T �F�����N��l��h�v������P�a�
� ��
�
�wv�b�7�T��h����
-,AрU��� �g�_�Y�-�r Pۅ}C�� ���@�_h�������e���o>o�l� �+��$w��g���+ �m�V�V%:����1��k���-�/t��y
p�� �S ���|r��D)g���+X{(y	{������ :vj	�+1e�f]�Y
��7�m�>��˘J��Z��w%
-x���C�݁+���0��^ �b��}��;� A�v �Ko�k^���KV�%[�$�͟����'�c�f����Լ��T�iS)��`r��������pcW�M��.4��~@�����f;
�o�G at H�A��
�=	��B;��e ���5{c}1�_g8~��2������.O�_����<H?w��֭���W�H�CY ��`83����=`���}
�_�@�F����2*P�+�9aZ9=+CH3��%ٯ�H�z�=)�|Z7x�G
�;�w�w�U]ݖob��QxE�{
ʹz���ʙ9��~q�����!k۠�7
-:�6�Ͱ�+�|�0� �%#��+�~g'.?X@����2����5d���E�����3DF���*ں襳s.p���r��
�y����7ѝ ?�[iU�n�����5ɿ1�z�V�j<���d
Ɵ������w>0H�P���^Rr�>�רi���"���\��#�p9�����.��p���U�y��p̈�f�&�� E�5�@���IX�p�ǻ��:����X�����M�W �ei �Ua��P��z �w& �h
��A\��O7���;
/���=s
� R�gV����-CnC�51�

-�+��g�<�^�`�q�u������[���9��<�D�<;څ¬�b�_�����t���B���a6����
D?rf�����Uˉ���i�Ck_��c�Ђ��v����yݛ]��ra#�E;��ue7rw�n��?��6c2CvZ*�%g4W�(-���m��a�T� �i�lJ1�E��3�㲕hϔ-�~��Ry�.�9����X ֗�=�U
� ��K���
ԟ��}������35�HwFF4�<�T0�ӋxR�c9����������?���	�>�������3

-�H��L+zy�

��fxa����&���޸l�I��O���k�FzL��[�s�J�^R��	�:��?N�r��He�δ�Q�x��|��GۤF�M
e��@44�}����Nbn�� � V�M'���yl�7���/#y<=�s���>8l�y������r໗ozz}D��~4r
����<
ؑ$O�C�fȖ����<y�֢[f�ʞ0�d���#|��Q�W l�����n�
����?W�Q��!��(��i���#�b=
�7�yvrZ��suO�!�޶$�ĽAz�2R�(�
ɡ��J=C�f�F$�l��}ӽ��<g�r"Ⴧ��N��
?����Xv ���$��JOހ�G̫���{o�6�2�~{�o������{�[s?��eV�
�D�E�L����z�<c
�E�4�gިTW���:j��8��V!��n.�����y,������2P��=��;�Yߒ� ��a��V�Q�l�<E�ͽ,u��]hث��_,��g=�ΰ��\+��PR�
_�	�f�~f�� [...]
YxiM��?��>�2��#����LV?����>���p`���.o�T
-Ŕ��x�p���I�Ok��v�:���-]
-���yw/�YZ_bu\CkQ^%�����^���z�{|T(��*T��Rԁ��p��A�q�Vi ���
-��P���+G���+r�UZ�~{3�MٴV^��Zq4���|��7W;�|�����}�
�R��[�
(�㒽p:(u�#�խF�!E�Ѧ{"�^9�O�,� ��}R�碻 �h����i8�m��m����<���L�r��B��^���$i6F�]oط͵YM����;�Hո������l���2.��F�$��I)�*z�����-#5�tJr�-9a�
- at 0}����a{�Y�v���1�w{� �jy�]����B?���u����$k��#�N�L�������(�8�TA��%�r�N�~"q;6�IK���&
u�[J{W��ZX�Eq�Έ�!��% ����94����Տ��v>OTbr����髌��wԣ�1�`�
ǔ[-�9'���;��c��
��.��s&��g��m��ؒ�Eb'jdbX�Z�z�m1�-�a�����nS�4�V�w�����_r�ۆ~���\����O����l@����剿
\ߓ��}^.�Q��w*��4��j����q�4V.���{b��F�ێ�
��vd>�zAJ�
-O��ˡ\m���^���/����
_��r��/�|������&��}��o�Vv������:����³;��_����c%����i�a�rڋ�65%
ﭞC
iI��s��N��V�����|�iN&>��ܐm|�%��8>������”�f�Gq�6'�~�?����R^�=��5���
-)-:
f�Pg���vV��z�J�h8j���z>J��F8�
-:R�+-5I,����
��x�a����s��F�K9U�! �^Z7�ޥ�~��
�끘�Y�-4��B�W�z��=��nk}���*k���e��S�
a�?�'�`�ǭ��������Io�J��.w?�zKB�H���h��������L��
�����ҩj�z�4j{��4B[մ�����S���G���8��^k�0n%�IunL����qn�㇬Wu��
�J%���1��\�HA�N�;*� B������Tь漯M9ϒW�`��8���$�Ej��*��XYc
�lQ���b��T�G�P���⯀�
�x��>�Si~�`y�}��m�
fܯ���My:��޸�����Q; �v��&
�l~0��̐|�C�� xA���l�N���s��l���F#��Z+U�^(Vꏶ]�?�rҟe ���bTZе鼻bΦ�8grM3��_q]�����}���$c\ 2�۾M{g��0Η#А��L��O���Y�W��Ŝ�D��[i`�A�U^���[���V
-�t��h�/Jl{�}�5�_�؏�)W$Q���1g3Y�x\"r"prWJ�4q�/i�j��|Z
rR����y^T�>[��;�7-�*
����
,�R�|J�K
޾ԡ
2۩0���P?-q'?�u���^�p�� *诘���7����3�{Z�>#�z���t4�Tm�G�ϧ�U�ku� C0�>�l��-'��=�/���Q�
����O*Y��~�ӡ���zy��`�SL:��K�ɹ����%_">��I|
��Wػ2�1��
h�^w�m�%\�z�O�|���E�N]�췏�>Rq+}vt�(1g� ���b�D��Z�.g+,��x�tT��%'D$>a�#�r���$=�ф�a2_
��]��P��FPMc?
� B�� ;� ic@n�
��}P�t��B ��W2��)@:00F��
 �
-�.�,�|sY�� {�`��R6����� {o�!
",��#S���&]�T���y�����?y[܁B{���h�Ǡ����Z ��	 �!��/@x	Bl�0� ���!�� ���X�w! 9���$8��x{��b�hU~@*s �o�O:��q�f�����"�2Q(?���h.�4�:�8�@�1	����m�
<X�j�[��� � M����(,ߔ��G�������jхb+ ǖ���o ��A����W:
�.��X� �^� �t 
�}�΋+�*���c�� 4#6 �aU�q��|`$`� �Z��L� �FA���O�Xyݻ/��t�������xV�W�W�G�"� ԰��
쟼�xt �yC�y�MV<�$�X� �o�
�V�j� Z�ÒRW
����_����8�xg���Ѡ��2*���͡��*�u
�վ�<��}�� Q(�M� }m��C�
�]� Wzi�]�m�pJ
�4�ζ��`\1з�&U�׵x_0�1����)=�_�Ip�.�9�J�J�YeZ�{��Z����m�[�'
-W�&��=ٿ���@�[�
��
�Pc	�9
,����2���.�w�	���!ٞ�w|�s�s�X~�5����>�
���ƕ'k.�	gn���v�PI��Q�p
��˾`v.�v$��~�x3����¯ ��,�^)k �2�d�����
S踈@�A
T@��Y|�·W�G�g��>^�$�M�jX�[6��]%�l������-.�I����
�J�G
�LP�'A��fG�,�Oq��6H_
y��~@�W`Y[��$A�
|�G Ƕ��u�1-
,�Nd+��1�ܮ?�=}뼯�Bq�\�}�=]��h���qG��
����2���n���"�ȥ
����v��j�ଓ%�:�Q��b��?�����S
�	���w�]m��0�r�i�9��/Y5���#eޖ7
o
C�r��R	I
�a��/	��eq��ev�d��_�+4�3Y
��<��r�b�X�{�7���:U���̲e}����gt����	�L&�����Iv�ィ�(
��8t�tŸ���b�O�cC��{!�ܷ�{?ِ�l:�t<ܿ� [...]
-��"0H綝N��g&ϧ��o���� �3͙'���s���
-]�@u�<
M�廤���^H�IJ���O6�e�
�`�n�\N���#w���g�x�NMM���3����9�q<��1w=M��n��.7|�t�^|.)��
�_mH�2-ʌp�D�(��N���wy�
��
����1U�{��S6�9
�43��u~�̾��\����9��V�9�S�
'-/k�!igr�ʨ�:�����9zn�Dz�1T8�
�E��E�+���$�o�����W�g@����#�����#B�rc��cT��i]�����%rM�9�V�3C^m��Y:L�&
�H-�n�=��f�{H�<	8g2���^ck�}`�3��9��o��yF���|��.tH=vNq	ۼ�
�T4���M�"�K���uY.m�����O_�2G˜��t<3;�3A���M�6�X#�M]�
����L� ���Ɂ=4���y����r�.��`\6?�qn�x�
-h�.�Y7M�5�
ls��'��lq2�2��ɧ�A�w�Xf֕a��J���B�4��p!���p���ǵ���
��cm���	��17H�o<>�·hQ��
A��TO��>_S@��J���C��+ v�� џY��P�sM
-<{\�5�~��
���cҟ���2 ��m�L�Sޘ���
��i3
�za^�sߨ�j�~,�C}�ؽ4�t3jW[������4�� ����>��b
Q?�_p"��-H
�C at r(���k)�n��9<%��a��ԟ0N
����*/�㒟
��4��fc
5E���|̌j�{��)��3��Q]��E��]�>��z&e�z�3��]�|�j�Ban�����
-��>�_Y1r
-�/�z�.��
?��
�nۂv��J?��r#t�n�Z
'^
ű譔����_�/v:��jq����W�u{'���3���;:e1ire+R}xR��W�w�6�W�7��
��
�9���ބ�Fd
���:��5��?_�o��
 ,h�"��W�Lھ���f�*n]Ũ�9�鷺��u��r�
�`S��%��:�|Ȋ�U�(f�+.��3'�KjXe��� M�	e�Z�njg�^Zٯ���=�^Ʀ��c����>��s�8��U�e�[�Vm�����������s�q��lϺ��g�y����m���=h���0m2'�me���u�D$�ŢX�
��P_�]Sw.��t�ٞ��l�aE�[ǖ��e>/���2�\�3�
94j��1�>\_������ �߳󫡔�I�=�x�:\nۻ�����y��9�E�\�`
,�6Uʁ��Ğ ����ȥW�g3O)G�)͝Z�k6uV^o",Uvҝ�F;{�g�	�'��e�B��}�MU#k��|=�b��F�D�?��K#A>~�6-�!�5^����^�
�9_�p�j�����i���\�+ at n~�/��m�J
#��=7�V�=U_
���V�a{�"3�+�Q��Ofy$}��c
�1�H���V�t��=v������2
�_yR�f-�B�{�?�E�e~�F�%�Fz��
.�l�
��q����ǻ��
y#�n�ᬶ�,���В���˳N�R��<]�
�
adr-:���e�7����q^ƻ��U�HG�&
r�v��=��Gff4���p��
��,���ݧ�1D��I���\7u�8�������Dž�	ǔ;�3��	
��J9?��0
-��Ys6�D#S~
�����R;��%��KZ���R`�y�5һ
_'�����3���7�i Q1��
kjk�b��w��;s��Ά����o
-���;�֢���>ťLf���68��TIb
v�1���}ٛ�ZASl�U%]/��v�}�"
��W�Q?dy�1%��zX���Ր�C�.߆f�P
�qر�]�U���\��J�(���i�a�ϕG�T
�
��@�Ζ&ݲ�B'��
�|;;����_E�2�V�^��$|<�
-�YA���2�K�Wn%JQc���;[!k�i�X˿
�-e
�:F�y}�+�*�/�|�UnJ�\�S�Z�Ž��۩����?��}��`tε�Jv"�g�y�R�j�U�'޽���%��"s���(�|ڝr�,y
�Boj';ubC�u���׸�.�J��v)�[��T��	�RQ*w��f<]�z�T �����h���hmf�+�̾�qR��ghO0�VJ/�m^?H7sb#q@�lۮ6�<�:s�D����z5&J�ջ{3*������)-5sQ�_Do�@D�
�5�Q~в�t��)��&5�m�([����P}���$��̯p�����)7�zH��qk���ˣ���V��U�P�h�g�n����%׊��(�\��b �ϵK��[�����vg;��n�/�քPM]p�a.5�9
�*�Y������9����5X�Їr=�W���-���q�E�VטEȖ����Ȅ��R<�hX���8����M�3��b�
� �h�g�XZ���
�8gʘ�D��~I	(���Ƞ����^f-5>f-���e�L�
-�E�5�E�߬�
��k �� $��
�ɿ�l@�3cPY.�@�T�A��� �y^@6U�A���@�(��
2�2GC�Sց�6�d�(��K��
xx�|��
Y��l��>�
@�)(T� i;k�ctH����٭����Y�3��n�<r���� [
��<Ȓi�I�kALU��0��C$���� �G������5@��.��[m�����/�3���;�,� ���=� �0
-�ƣ)�^�[��T��>���ˁ�A�' �tE���jn����AV#	����t��x�Id,�D�[�_��2�� �
-e�y�ť
�&q��o��$ r�4 2���� ��G�0�7a?˂lr�A�,�^�Uy
��!��
-
�=�>�r:��,�t+�_t��G��"�s���'s��v��_	{䖕�վ��hиw�8� :�� ��<@�
��� �� �� ��w*d�� "�8�4�D0H��y
�U�
�Kj�Ș
���
��ܐy��]�
׸�}����,�"�`��sz��-+ }��Ī��:؄� ��)

��C��+�7~O��E:!������
�����+�����Q����[M<� ��g��s�zk��u��1���µ3!ž4�~ls6��
-e���h��$ x�1T�� �\W������S�$�V>x���%
-�[��}VG>���n�Qo���l�K����nmt?���hp�C�貓����m��%�S�;aaǪ-e� �~�C�����T����0�R�ƒ
p��U|

q��p6Q3d�u�]�Q�P珗Q���gr�-�����co�����o�>�y�Q�AA'���?��w���k���7�--��d�e�_��e�ƙ_���x�F��'
��
���L�:X�z�Z�s�3�uĔG�'��~�O~l�%��,~�T!T����V�>�J�'Ⱥ�\¿��gM�яIOo����7Q.�ð��N�G� ~}P?�OY����}5����S^Z����Z����Oz�fy�V�S̹d䔣\E��-.��i��`�{}@`ئ���lW �p�S	�
���>�V�pD�=�:��Yx͢
V߰�^���Sc�;`!z��u����{W��pW�fG��������V17�<q���a���6�Z��m��F[ܾ�1��? i"�b 0 3Ɋ0�{�A��9������R����+K����
���M�}�����!����b��N}��������m��g/{�
�v�cr�е�h�Ӧ���fNw}3
3ߌ^f��+�X_�H��$ lc2)}3$q�9�ryRy�z��ܘ����t|�����޿��n4�JNS���ɭm�θ�0:�kv��LN��(�R��r���l�:�����n�GI��ƱM����Yי��7�Ι�Bo��%X�f��,��B�y����
}�æ���[>_�������0�瀳�YI���Q[g���:����}cQq"]G�X{u֨���%��	j�I���8�@���j���J����?����� �C��ډ�mn)�*g�M��9z^o�\�z���#�����wy�jE���A����c�^����\s�Tz�f [...]
��W��P:�����>���Nn[+Ԏ��g��v��,�{4Me�ӬZ].��Nf̞���L{3VD�-����N��鳿pD�ş���Vt~�jvy7�†V|���O_x_�4v��6��`�l��|}3N}�?-'���Z�w�������f���: 7��N]
z�)�5��:�l��W�5��]Y����J��&�.�^5�wմ�y��m�-t"��$�d���.�=�:��?��o��9�64�A���/0`O����z�{��֘/���3��ݬ�8�Xv,�i�e\YL���"����V,A��a,Z
--
���E��
+�;>��g������"���[��ri�L��A09΅����9 at cw���Bx6&���s2�T���l3��N\=��7�em��a-l
�"
oa��"j�{VlO�˕�)#��2��_��x�Uu���lF�H82���0+�RbVFs:���]$ŀ�uZ{�V���d�hryK�
&a������A^��l
��W6��`k
���%z����� y쩎Ked^2��쁇�)
q�
��W�i��&�b�"��L�����M���I<pƠ0�n��^V7?8��>R؞In��
 sN�I����A�5��5=q�w�';[[E���P���\��hg��Fe�6?U�o�I�qh�����sѢ99�r�h�|�1T��
�
�������
�,%��1��怸j��;
vC�
���+;��m�`�2�c퐋�ڮ��6�v���9nT5/{u�\ʒ�cb���IV��C�wDL�
��saRӘ�������p����^���t��[R%���W�����.rQ�پ\���R���qxԑww�vM��J�F�w�ty_�����
BL�Y���g���Onq�K�Q�wE1�H��'�Ud|��2lwE�;NC"�vi?b(iX�
-�2��r{�޺��" >l����z�7�~pR�n�_�~���N�SG�V<1������I
-�L�6��w;��D��(�Á
�K3����p��Nf��X��>��+���Nnp���ti���9�&�"��u׮�t�Lt�
�>�j�qgs��]�
��T�uCt���O'�®1s��t��1��6���w)��VZ5&7�/Ǎ��ʬ l�
�>�6,@�K��pB���iI�����$i����~V�E�
-;��������l�_\;��X�
���o����7
W޸�������2����6��9:%Nj���
�}�<Q
�U���/��Yd��L��m��y���彯
�ٓ:D��w�����J�ms�x�w�m�4�ܚ��
-�.WhΜ�ٜҾ9�$8W6g���7
r�[�������C����rA
�qSMG�r�] ';���R��4���D
-u�]V}C�d��9��=�q�4X��
�(��j���nЌ��Ԭw�VC5����X�����c�uCJ�u�M{�O��a��x����Kc��
���;�Cܿ�ט��,�1�c�AW(�z����'�6�\�hu�#j�.qTؚ
ٸ9Ox���/���pը�Ώaͪ���F����v���Ly���eRŽ�V������{��U�%q{?�lj����y�h�����q ��9*�<��7�
7d���a7�����6�V���f�Y7:	���9�X��̵�ș�����J�I��BoA�
�P�U�T���w]j��dQ���?�>Y�`u�mt�>�Q����Mڍ�Ȍ�^@���A�'z��1�)\�b+��Z��ʶꉛ����6�:�
��}���+R���j���VEe�n
������R.�K�R#g�7&ׯw���u��>L ��ߠc��,�&T8��pFn�݀ɶ�~��
-��8�9�O��ּ�ȸ�E?���;���t�V&u1].�z�R�S��^.��W-�͟�9sz�em�8Ȣ��I�^
-1��?x��pAZ�IZ`z�t1�l��s�����7(�B�2MˣӤ�����9��
���T��n����2���,V.<{�bde���<N�nnu��K�svP
endstream
endobj
317 0 obj
<</Length 65536>>stream
-�/�Q�v'���+�[�wZ�������bP���QU��1GB�֩��
R���C�_��-�@�|��m�	N�L1s��U�[����R�
��Nh��� aڀ���#@�� ;
���@a���{Kx�
�ӽ.<�b��/��8����O��Є��P���a
-���1w
`�X�@�Ի� ]�� ��@�7	���
-����������(~�ߝ.�!�@+�5��A����B+��$[]��ŏfn����)��ףŵ�У6�#v�A�<�I~
�^� XFh��ߐ���9@������E�j��O�o2\|5 :���@�>l
	V �D�$����1��V�>}fr�"���o��^X�B��u�
wp:58?1a� �`a?
����� ��am�V�+X��� ��3���0�ԅ��9��T��_{O�W>*q|�F��R���T��P6����o ��Pض��/���/�?��������'}�O�.���
��&�/�y��`� L�Ӊ[��Qp�'��&_�(Ͼr
-7ō�^x��)��rCh/7�-Ƿ�U�}��_�k��~�J�:��
�yHW���
���w��e�lT�Tg �`1Kv�

a^����m���׳T=!��3q��T
�Q�z42���n����s�\���x��#r=���;>R�ۙ��s~�
-���� 0�
�rb�+w(4
M`l�hߝ1`�'
o��1�N��d�c��S--����%���SpoG������{�aWj�f/��
[�2���=�&Q��,� �=����pN�@�ؑ�Z+G�I�O�G�o�FS�2/K(s��1�y@�;�W�
��=/���/�^(��{߽?�	{3��ٕ�=��
�h�k�������Yg��U�d��FV��y��W�
��%�ێك��h?Vק|�
,��_Լ
��o���]�n���K��~ߚv� f�W)���kdn�K�vqW�~�[�ǡ�����x
�z`�M�7����&�������X�`�C ��B��s��Iq�my��ud��-�Jo��8��/���ϯ	l��;�
-���Ȧ��P����D
o�X8�n�@��Y+�2�h�\��S���s�q�!���OR+��['r݃S���m��?�ƨ�0;�
e�<Q���B���2�~�O����6k��ؿ��
�|b]@|�!�$��݋�9ty�����r`5�ȿ����x`�����bP��M@��ݜq�*�m�y�=�
�oZ�5�P�Y?���*6'�-��w������07_/g9�.g

������*�o��nB˩t�/}����a���л�����1'/ld+��I�^^�=@we3,:M�Q߬F��n��ph
�&���̽}u%6}k9#̝1��g�Μ�����3ڒ^i���m��?\k/r��� �#���ׄ~��]v{\|]Z�����;�c��`���=n`]�
��ƪ��cW��m�a
�Swu\��\�O�9(J� U[��/0�TSOp]
�
6w�{w��#y�s�z���悩����v� ��M��^��@y� w�ۏގ�/D������q��f��i�J�O{�<#����1
��T2ݺќ>�z��
�����?�-�eC�g%[�N��,^ė\Zd*rɯ��L
��+��|�,����@�to�LV�B�� r4�>����3�ҹ���t�����[;��7Թu�2�9X�r�-�~V7�K��F�ܼ���Fo��r G^>>���ח�5��&��O�	���sv$5gUR��!�Ĵ6�ݛ�o �j�
i��
���q+�M�r��9��y4�}ȥ������-�wv�κ��i���@��K� �����U�<��M� tr�cV�M:�i<l�bB6�#|Zt(X�&л+-|�OE4�!&oG�vٛ��
�� ����|�
R����hv�j���Ѓ�ʳ�q at a�b;�h�.�`y=?��k� 
�x�
�3J�8�!Wgu�ّZ�4
��'|��"��ӚO_>Gn�d�ܤ5&y�>�x�����$h¦i.�|� B
-=���
3���p��<S��	Y��z�����`��
ɚ�*�U���[g����b\�>ʑDp�*�\z ��t)�"�9��Y
-��D�r�����7�.�k\�ǭIq�'�j
G���u�v�
������a�?=$��;�B�줲�,����=��K�..Ʋ��
���Ş9ݔS��ȵ��t�&��-
-ۢQ�Yk��8�;���?��s�ȵ�|���}�.+�o���km<{����T~
�G
��f�H읋����
������j�y��6�mYy�8^5F3�����VGoF�}�[5"����?�2.0�>�g�����TZc�JQl�
�Gm?�3�l�VmpR�z�!	�c^a{1����m�<�~��?�V$��ul�
������)��\)붛��Q.�œ^լe6cE�%
V�y��<��Ҳy����0��-�����A���
�My�FF) ��g���r6`,o=HZ�DZ��96�!�@�C��V��%'�hCJ�J
��q�Hg<_�^Ž/�Ė2�:�(Ĭ-ۅe���4q
~�k�u�H�Z� n�M�{I����;0�X�m]RY�Ay�ɮ;�9�k.Q~�T����R��d��
�9��^�:|O�
 ��zQ�j���������w:��̹�2���6�ǁбܹ������,�D3L�)�
�Gf��|{_���"
��~�������"}(jMꘙ���3�+�d�/
{��%M6�C^s[�?��&��_�{�_�a4���Q�d=�8��6����=L��q�R=y/��ZQ��
�L��Zw�
���(f{����i�/L�C�+�����t��������[S���+v�FhtI�
tI7Gt�:�&�������o�L�c�߮L|�
r�f��#�)Ї�"�S#��]�6���5�`��u1�j�|� ��3�ٞ������
3�����f��ݯ?C�l�/�.0�^7��s�A����H��l����m���
L~�:��ȝ�
���p�s^!�bN�s����e̱Omd�n�*ݼH�fG�?����
�\��ǝ�
��#:hH�}�
-�vCE���_�;�#^=rL�]Zȕ;
���|w�:�T�U�|�V��B�0lR
������?���
|fl�VH�.)`���O
�]��٢s�ށq�b1
?�nĮ'0��C���I��X�b
f}��d7�=*5>v/��}�+U�
6ʵČ�j���6+aVk̫�1'�Lc����CԦ����uQ���]t%��P|�Zw�����>�o�G!��
-��a�dD�aw�q0��1-��4���*�tWT�CY\�I��m��u�/-��Smqn�U�լ-�������c�d�p5�%ri_3�G�f�.�^#�E���T�꧜��vm���,��gu�.��ԸQ��)�FUwxȬ
J%d���4�d?��=lMV;
����ak֮��9YVw�^þI��^�?�֖�T7�OT�l�Yq��q%�|��6?���\�lP���i�������T>x&��.�w�<��U��	=(g��x��β7<
��L�I���'�:Gh��P�V��Fd��OL�6N|u
nJe���Jv�ٔ
�l�$��(F��.֢�^����R��Bga>�R>^*oԊ�߰�﫚c��l�R��
-G~l��������i�Hߚ*�y6�X�S�
0���R��^	�e_�j��j�*F��-ֱ���h��o��)�z�sy:�A�~�8�
Ɍz�Z&�bo%�w���
�ɐ�~�����UW��/��q�d��g���ņ8k蝍^�x�m��^eR����sv*��ܥXG������3��$�9_?�A-�3�V�#��[9�[�fZh���^�X+,���U�s�)"^��%������7Ți�v|4ܳ`�lS���lr���-%���:;�V�[�����4��1I�~1Zfѫ�ʤ�IdA�J
T��Oۖ�K��)��������a*e�="�o��~��@��T�Sp!���7 ����׊ ��5���,�� ��X�h% C�9�{'��n����� e^� ��3��WAj
� �(��#��Rj){W�M��oq�A* �_�����_�h
�Y���⛼=�*�)���c��8 �f
=�� R�R�� B���
"�^��6cb����H�NC\� �Q#�
<=�ZBT�d�(Z�P����~@�l*���9�?���"f4�C��t� �R{�6�7�"k
 GP�Ӈ�n
D<Ȳ���w ����
-9L�f!^-�(��n��	�dK��׎�9���y
Ɓ�䳛����� �A�;��ҹ�i��Vcz lD� �
|�^�����I �o}������U��R
o ,xf�qh�� g0�-�T�|7I���m/�g�\[qy�t��n
5�g?j��}�U���=���L&5��-�>�m���C�7s
-�

`'�0#I �v��UV�;bz+�S+q}���;8�%i�x{M2���Q��
�³�[�T=s�Z�XܛoĺuQĽ�ӫs���'���\�l�E`ڣ
�Uk�c��wY�w����%
p=|�� 
S� 
O�����g0r�gq�����2�y%���{�v�sF�}o1u�f�G�+�9��>'0���T�<{x�9���&ޱu
-igy����`UZ�#8��n��]�
����t�^��>#�Ϊ�W���~w���"��v�OnKۛ]�30�T5�\6���`�F,>"b�N�9����9U�k!����?��� ^���m������)��-���#�}��&�P���`l��m����d=�g%�>�h���]�pE�x3ڭ���0�M�c_����v��:�
<�M'h���_
���]�����{�E�޳?�q���
���N���-=V�s�e��? ��ez=(Sr�L����H ��W�X�x.Ň{7�Wl^Q����r���Ш�	=�
�Knx@����s�����{�?�<w�%"�,t�N5ܔ��[z�]0fv��
{�e{�<I6�t�� �R �ʬ�_*��
g&5(�\���[ڼ���{�.<0�}����)8
y#S��s%��+|Jm�|zSNͻ����q�ѣ��N��&��޲"�j�9]3�k��"g���lf��dfAJ�����oZN	
-��P�P��h��~w�^��X�']eq��"�OU3 k����iwLUb��9��w��l�H�d��Oò�i����c�#���3_�R�^�䰔
-��Iqը���Q�e�F}��{���w�7�
 �� }򪀸	$��������o�H�:�er�TK|�o�o
lsW�{��YF���m��#kמ�7�W�k,�γ��(Oƨ�AWw��f�wKx多� SSu��͎�;�t^�k�¦�h>�" 
-���Td���:�
Ν�H�U�c7b����]�SQ����؟Q
�0V�#�o�+�S��TK��X���^C�ժ=��pf��eĹK��9a
w�O%wp
-76G
-'�c� ���P9���_�� =����*��6/��n�_�b8'���>^�u�%B`��-�7�fc��oV�Y�
ǥ������W�I���#�"�Ci����>�Pr_�w�c�T�ʳ�hY�%�D�|���k�IϪ�������3���_����2m��
d�w�T�D��l& /'G��s^ޚ��Ɩl��\���K7�r�Zֻ��n0ݓF�ϛ�����.f���2�QG˳������6�m��W��Qx�tV\1l�_qj4�Е�T?
�� ;�
m�FT��ڭ�Oq;�J��>vȄ��N
a��j
}S�jL�cj5_�t�/����j���p����f�`���t���i�I5��H8�HƂg�ώO��ooN֌@G�@��)J�9�|GK�+��٪]�p���	�7�V�;�0d_nx)G�k�
ڢZk~�`V�3)鯮�kH�b-آ�S�f#���#����cߘ�������P#����
�e��ل���0���]4��7��m�9��
�h�P�,4#�/���6���B��.��c�gUM[{6_7˦E���5���
�vY*nj����ۓ��4]���wѧ0X�':A��ս�X��q%��"V�<]�c6�
���#p~��=^3��?�6�r7���i�H�
�<�'�3I�� b{�_�u�q(/U���d
��4Ӛ�
EW�kh�c��۹��j
�H1��
�1>�>ώg�Y��gg���i<�d�+��K橜*#m�����عP" �{��т�>���aWH�]�HO����������U}�]{=ζU�b0s��e�:W%=y��Oi��v��Ǖ8��G�>>�G	;��#�ր��,�Fw�>��C�����
"m�4��dz�m�YW�y����\岯�X v
X���6�V�����ʝ��j.���l,7iBҧ�"�Q�erҳ9T���QF5�����H��k�(ťʓI�yth��`;5靑��-��Et���ӻ}�7`�i�l�V�7$�_�EE4��x3~���ܚ����x�jV�����Ӌ6| [...]
-���'����Ə��MaЉi
��hC�jnOM�Dԯ5�/�Y~�N�]��ݱ�٬C7r�](
���;o�@v{�&
����?8W��
F��1���&���j�z�uZ���f]7�E��
�<�>�pN��;���0��l��hH�{������[w�WŠC����ԣ���3����B�m�
H��c�kM��ڻh�M`t��~v��!������s3x>����K颿?��Bh��s�ڊ��6'
re�u��d-���g!3
7�� �D$u�l�� �l?�j��nY]*�x�!�_���iq	[h
�Xc�Җg�q�Q�i��d�q��F�f:����kkދϵhPW�u�BuB||YK��)ޜ�\
�-Gv��
�ʉ
�R�wBZҧo�ޗ���P��@V {)l�v��@�����UN�����Ty5���o�]W��Xo�:n��#�Z|ݵj�u�Ռ��?�������ey��|l
��^�nN���b��d��lV
E%�B�Yź�C�f�
��Og7(���h��U�XcrWP
J2돭}�����F6����a��t��UQb��"�c��2�ʶ�&+C��۝]��"��4��9*J$|��Z��9��M�'#�\^/�Θ������48�*]4�K4ZӠT7�{�)��b�:�W����+�f��+~�s�I�$�Np�,��R

�R
�|�V�vQ:P��`V���N��q^a
OB�����zd��A�	V�YMh��k�l�]������|%�Y�����,Z�7l��9s�2_��J���*��%[�UC��PS�|�
�|��_���*�Hդ��!�e�t/�Zɫ���j+KS����-���4?=�������5�:]�
�
r����|`��^aP�7K��>{^%{�
˅��Z�z���$?(�#
����%G����젾�fFm�!��njȥ���ٴ�TQ�������i���O>������|i�K�|�jأ��^�Չ��ql�,�M%��j}�F�#�-���\T(^+�
����:g��MvP��̨y�{�Yp:����O��W���^F�頋đ�!�Fz������2
��w�b���i����z�⎟����~�+�j��.c��f=�
WG�*��UP��q������`2��>�f�uw���9�.�D����E;VAo~OE�j��k~��7�.��
�)8H� ��T�-I�~'����]4�E���� R'H��d "�
 i�� �f� �k� �ѧ���X%��'A{@���#R%�e;�
*�0��+A(*�����Ϩp����3�� 
�<]γ�Ԇ2����2�2��6+ )vZ�L�S���,�Ը����|>�
�R
B�&�{�I>������/�O��V��?��3�<�Ha�H�U���(&�q����eK�_�
��X�
-�C�4[� �F��a��ۖ��� 2l� ��-H��3H� ��Y������y���!
	"�@j�� �=�����!�
-Hiy*�V����'W��g���@:��O|3��
��
-i��$���V
�&NtB� �i@��=@�� ��NPH�؁�T����� ��
-�q �
�����ͭ�������[2O��cv9J�kc5���xo�c����o ��e�:i��r��|#��M�|�}
M�	�u� PN���]����B?�=���aO_c�Y�2�͟|�y��!>��Q\F��q�:��b�tn�Nzt%���Ų?�
=�	?x�
��\����? 踀A�c(T\e <� �s]�`
p47�ӷ&'�U��ߺ��7�R|��V\>{��Pj��~��^��A����^�\�pp�|f.
9-�u
�s�P(���T������m��u(������;�1q�<u� �kT �$���	��������{"ż��޺^�W �J׾wl_�m?r�-��x��ϋs�t^���rO��>�����x��(�]v�=�ב�A������ޭ����"���|L���yX��-�9yg�Y�H�
-��� K{�y"ZpL~,d׾�X�pE��%b�krΓp	�J�8��@U���k
�
RְK
RfW�����w��qϦ��].�n���l

���Cm�M����@�~�� ���ࠝ��l k}��6�*ң�=~i�렊,��~e�e��1�}�3�HP�x������!�
wz4�c��s� �8���^	|�mpm{��o"�E�2vo�nYV�I[�
�,d{鮷��Zo�῀UiA�^&�]�.�K�(b��j[:�����-�+v���b��-�V�T���ҷ���Y��N��ݑ=
l���(o�n��MO
�b��G>a�`i8#�;�v���V|K./�᫻<�2��t����s��,�H� �~�
-�*l��-C��6�d�A|�_z�m��<��O3X^�;�;��}[q.�c�U�
�������
-W

�d̀'b�av��ʪ0�t�� 
�(ML�ڤ���jqY�h�nhF�ik]�n|#>�[W���W�Gm͠�
-�g���dJ7��#����g1���Ms7�QC��>
-�ބ^X�Yl�Y�v��|�����_V���P4
���;�ŇwE�bxW%���鶼��3w�Yj�sv�s����pH�~Q��Ϳzm
(��7ʭ~��	�:-�Y�]oɁy����U�l�ʮk���p7�L.����L�r���&,m��.*X�/5%������hK֕��!e��s?�, at G|vJ6�Y����jr1�W��[�����d�ИMǗ#���	�85����q���^��}1���8��ϑn|��jL�N�`���3��Z�ڪH�U
-�_
�G0g'���
W/9X��,T�¬:-�~�FӻJ���
�L����j�V�>�<}��������
��+yX��e�:\���Iߠ���@4�h��٭/g�fM�ik��T�bU�-k���\P?Ū�خ�|܁v���
��)N�f�[�&���{�
0B|��&��@q�$ ���T�)
V�WަX�"�`�,a�X��Kf���Fƌ��80p�
��ѽ��`��KW�3P���
�7u#�h�V�E�;O�#��iP3f��cK��͛�W������M�ǵ�ñIz\�<m��w�p�޶���W�O���� ;g}V�L�|�ӏ�_�����~�U���iw��
R>�kng�WUv�՟ѽ��'��ނ�ތ"�2'Wr��t[�ԩ�4W�IL����}~�����^s��0?)d��x*��\��r�OƧ¸0),��	=�'�N�_��� }����œP
-w���}�	
-,y+o9VfC���JƆ�$p�JmJ
V���`}��JČ%
K�iwa*b����T��O'��e�hRA2.�H���xm�f��Q� �Q�G7�e�_`��*�E� �0�\���u4������{��8���{o�	�1�r�[6G�U'�
��/.?χHC��2)iA���ᄍ4�x�ki����>��c)�N�rp��
p�
�C��a�\���>k߆�m����'�ɍZk&� �{�K�}��xtދ���ы��A����
-�R-؎n6�Pu��{��J�,{��7��4[�۽��*c>3��\�I����[���z;���,%�6\sSd�a�� ۟{��q
-���e0�	��F>冩�';�:��_�{�
����S��.�:����y�3k�軕�F�n�+��Du�*�
�o\�a ,~6���\�$�f2�1n\�3�Y\��������7D�Я§��Q���n�X.M�G��(�YǨC�������p{�ZB�^�
-
} 
m����$6��0b�TY|��Ŗ��sڽH���3M)��@�Q�
�3�
9�U�
;2k�!��b��� =/�tv��¤���"�%�ݢE�&y�w�Wے�C�(#d�eV%�S��W�{� UP.��9
7�^�����T��}���+�\l(3
ͯ����m���X�q%چc�x�
4F�3�1k�
���(5�'�aPE=��W�H��̳ג;��q�[ݮV:��]�B�ς��h)�E�����z
W<;��
�]=�.Cf��
�^p�ИuǙ��˚0^�
Γ� lLL2#�C��vi
v�e��"KM+Դ_=�dc����ko�C����
��`�-�j���*�
�[~{hƟ��2�v�������n�v��^����Ẩ�|����T�Q_��'��Y
5�'-|q|'"�}��ȼ���`J�{?����P?���E�-�1�u�U��O�V����̧}m�
��u��?'M!'�M��~��M?/e��4}d���ҿ8
a}�&N洼�iOc��?�j�9��p.L�^#7b�zJ�Z=�Vʑ.
�Ue5��GA��^�}�^I7�
<W�������i��,j��iTk�J�r�������s�~��
;[����~c�6P��`}�y
�H)�$�^T�(D*��u�Ͼ�}����Q���l���Ӭ,�J���K����~�J#�L���؜6�K`-/��>��E(3��1+~d�g�|T�x�q��$���|����KQ?��e���V�q��a
�\z�1���tQ���
��ZJJZ�iZk�k���+Ns�i��^H��B���_
ȜqS����৺#�� *��^p8w�n��9���x !��J�a�t���y���^F�\w�sGd�z;�Y�����F[[
!�i�7i��u�p
�WKϺ��xGR��~fב��]s6E0��Mj1 ~��V2����cO+v����U��
x�*��� ���Q������
��C<i~���
�F3���
�akQ#�s��|S�ov�v��V����|�j�F��W$m
W�T�Ws�������]�S(w�z�/�Ϛ|^�
�o���_�r臐��a>'C�2*i��_	z�ݡ�6��
�(������h�z��S�Ij�������+[���ҮDt��tAo�3{\G���� )�JnP`�/��6�h1\@�W�/��u�$�q��^�='��5��V"��	f��!z7���o�~r���EM�+,+�_�g]��Y�D��f�*�]�*>��0p�‡��I
-yaxl�3&���N]���Vo�v�^�>�)�]I�Mv�,��K����_,�1i�F�����͆.dL�
�p��ГA;�o�\��5
\&�^�DV�A�jBc�Ao\ḹ
-��ޚ竐!���|d�s�m�s�s�v����7�o�AdG �
D���w��� �ϖ�	�`���9䮵I
>(43�,`2|��X1�a�/�C6
-�B���6kEu�("�C-��v^ �6|�},XZ?�p�~F�W0h/}p�D��� ���dm��o��d�m[ �>
x�)�+ ��	�/�_�H!�2��qP������O��ǩ�q��L��;��f���� ����8%�6`ҏ�֖��6�� iq�Vn ���,x�@���⻗��c|�I���@�/	�H���pH�q�V��|��CL��%o���>��up`���S�V�����w/����c	lsdd�Q�Sg�q.�8�
��g^t�}P������"�.�8�t ̡�E����o��<�	$���C:����T�?���m�̓����ʀep�cН�� ��}s��
�<b�YA�f��/Whu_�I���Y�U9�z�</�K�/@�3����n�d\�~|�X�a3�P2�dr.�@>"'�b`$k\��dz'Pk�m
���
3��cj���
vٿ�$|�-*�z�y-��P���	�>+��Յ�=���~�?� �]�d�߿�?IvAg2k�$K�`� �fIƘ*Ifz��
V�%�:�G�y������h4aU�u>��k*�A+��U��S\@�g�����J8?���sDž\�6��������=�1�@�u�/�Lz����|'Y��
Ld�\Ϯ|���Kr�1�dUL��m�G�c�>��k&n�����wsW;���
���`c�
}�n���݆�x�x������R��
�-��_β�DO���y�:��g���3�տH�c��� �&���8��c,�=�qlaW1�����t�x==��v`�w�G�G`��4��z�/nW�+�*�˥��zA_"����ϫ�9;�����9����6���?*Ǽ4l�f�좯T��b [...]
�6 ��*�^OJXx�I��q�Vv�G��䪵�|dD�o��.uęuzE�yI��p�9#l�5��:e=�E}[����"��� ��8
�N��?3Y��+�XKxv�B����_ki�9oږ�j���m˻�X�-{2{��)��̫��&��
��1��}�z��h���%M
!�j��X�}ޠ��c�G�H���wN�f�"ɭ �����g&�3�r�7�f4ǐڃ�<
-��-��S��z
�
���+�o�Z��L}c���[~�Z:?���9=�C��Qa�V؏�a}�frخL�٭��l�L���ʀz�*l��bn#��/�_|��pb��(���G��c��wjÿn�z�#��
u��s��������I�{\�᥽Pi����u��\?<n���m��k�,Ʒ�wrݵga�����f���^j�WD���i�e�&s��3Y{
�O�"�A���x�O��s���W#��^�z��p~`7�@���/�&Z
-=ѹ�F�l�-j'���v�DE���f����/>c��
r]�4��
���X����CT:B���
DS*���ʼn���eq��>���_�H`n�N��0}$���?�V'�7����<2ݑ�
��m�
��,Եb7�ZITޗ�*�G8���^Ǵ[%������J�8Z[2#̖�;�"?l��DLV��Jm
�r.Q�ͼ]o�6V���t;�K
���/x����&(��ͪ}.��[:���@w��WmOa��<k
�\?�A��3z�#����vg�xB6���Z|8�
�T��͢�
u����\��`,6[yf<��Qq�_v{B�sA�����XHVN<�����_���W��E��.�
�X��#�=�,��ͯ����i�����}e9*�m0�+��9ߔ�C�+��#��
--^Sf2����Yxk(�^�}����YP��7F�
��������ɸ�:N,
~�02~���H\G_��������_��t>
ɥy�h�j>��ƈ��"���oo��\��"'^�
^
3ي�/��E=��~��]k
fO%7����0ō�,
v�ʏV�'
-�sC\�۫���J�����zu����;���K�I
K>w�L��rAݶ��G�����A��ZQ�Z��[;9l������ӗ\(��R��
b at 1���6:3lvŦg
��h��41'lw��\qb�
?��ψ��x%�Ώ�\%�q
��
΋����
�A��?Us\/���,<
Ol�0��bo��c�:��|��
�o��_rSW
g{I�x+J�y����wm:���foDL�-��Nղ�^X
�
��A/LgЋ��aS�1�L��m|Kcb�ӯ�
}	`�c؏�����;(�
��P2l{�?����z�s\��d����t=X�6���G�
��x�w�y/��NU4D긮�Ѡ�OJD��U+�m�q;�IL'v�t���=�	��~X�(��Qك��Z����Z�٢��~1��Ee���Sǫ�_O-��W7tg��]}�������l3�R�6�a�<k޼w�S5ͦ\W�s
��)[k�b��
/
ɬ����w�H�6[J�����(iX�~���{���D
8�<�� [...]
���\
�i�i����]�����˘
�����%�
���^͵�Z:���Sߞ����2'��<15p�
-&3��'�='�%w
N��-��4i>3#Ju�T[ԇ�6�
TkĀl;
�εx!�~?K��=s�`�D:����{=�1Z�ؾ�ܱX2o�m4ʳ���h�K�R��el���neնK��h�,S�&^����qfY�[���=-��$����21�a��s��W�f�U��p��m�}�ٚc����۵�v�
w�j��\�pM����սk���/?�uה“��`[�Ӛ��ė���%ey>
���
N$��cl�i=�!�8����zG�
\P�B��$
���h��:UPb�n��e��a/��]vNo:�R>����Bg
-_A�8:F뭆��>�;Z{H7t���ͱj/]CSSg9-���R�n@�=�)��p�Ԁ4�?�au3�
{
�\%_$���Ts�ɺ��I�aԣ��1Q��u�V�s�����2dц:���ӶZa	[�d�ɭ�;eZ�������{��oa����qu�ٮ������^j�F�����&s^3jmK���ߔ^��9���
��l�.���l�u�ݱ[~�~gֿG��ƙ���ڝB���L����y����U[����
�l֠��r��׭>�����5���w��C�[˜��4$}Y�ʜx>�|u

c����ɵ������~

���V�AР���i�?5�f�e��>ƮM�d������>ju&(b5�Ms5.��g��U��g�Zu,�Z�M�r����\y������~
.�MZ	L�
C�y�5���G����K�+�"6���TGo�Sl&:^�#�{�:Þ�j-�����:��N$Wr� �Jk��ʏ*�/�W�Uzy����r	;��⾶M�D0����g����O%�@�����V�X��ik����I͏�}E�܇�
-v�{ǻ�B��k�����5
=�ʏ6�/E��`K�
J�٘-��8/B������@r^�+X�UT(�g8�8�V~�<2���na/���W�����2p��l�֎C������tXt����|�̩S+��{\���FRkй^�Z����M?E�'���x�>6�y7�1y~�
�
K��^osA�:�Zz����\zf�� ��>�6�"��"� "�N"R���O�
#�����cuU��|�a7��bT<6b�mҽr1��ޛh_��/WZ�.�c�Sg�4ϟ�
-|��<�|<'�5"��gdF���_b
D�� �W�A
��HR��5��5���@���
U��82�H�z��Y�ln9��Y��:5#"M�^�C�v
թ��I����B��L~��)\��H�]���ݲ^��)|�Ҧ�^�s@[WR�����
y6�Avpp~�;ѶW q�.�


-6���?���;6���eo��=N{d��6'vX��}�'���	�q2���>�d�& >�J�g3N�H0
�%�5v��%N��0�a���f��K�{a�ۿ�����A�����-�����4/q�&qrk���;�7��8 �J��� � � ��əa�?~�xl�3��
��������e�ſH :�m>��Я �l �u�i�t������Ի
�T)
-q��k�k��|���;�{,�
�S�p�$ g&Nɪ�v���\߰T�_n��{�w���#r�s�Fȳ����o	���䢟@�"��l=��	�?V�O����E�~!Ɵ���?U�L�QU�8��`P}jx%
.�F�mM���cI���-
��u	h��*�"��G���_}�o�%r�
�œq�/���>��H2�z�d���d���� 28A��O2�V3�"�H����~dh��	�B�8WE�w����X�N�Q��6x�y�ɥg����iw�6��2�̣;h�w��o�ރ\/���
.\��_��M�"\g0���4�]���@P��>�&Y���lssO�l�d	��d�4ɜ�A<�����n毩��<���h���
}�o���<x0��+%s��=�p��� ��Ø�:V�����≊睞��돌�K��QC>q�a�dz��/�Lʂ��2@��������\m���]9��~�]��g�Ȓ�l2w��
�L�H�bv>�0��컞��^���r���;4s�}𢻣�
�ȩ�����|<��������Abz�m����ߨ�b�ݒ���\In�S��l�3�R4�u��*����ԃB�m嵚燍0'e�����}���d�`�H�w�>��]\?��	C>Ve�B�94l
�ц<H��lt΢�c�s����K#�F�~N뻪
Sp��.��d-��}>v΀o	\��[/�.
(�ѭ���S�k
J��^U.��
-�<Z�<fs�O����(
n�����M0�7V��Q�
-GO�O.m�R��7��~�P5���{F��
�x��}�[��߶Ս��n���C��y�(W�����=�!.8����8?�t��"�x�Q�uS��8�4�x#�h6�v�x6���.�C-͟Y-3u4�併�����2w���۞��c[�'E�6�J#R�x�$��:<κ׫�Vo���|�V[�s�C��� ���Y��o�GU�+�����gO�]�
*�f�ꕳ��⧱���n�}�cD=
{�=�M;;�y'�
g��y��
9�n�O�;�{�'�s�����[e5޵�� �#/4���\��9�J6Ü%{.�~����'9�ygz�j+��z~}<�!��f���z���Sߛ���}�=׺g���Q�![�<�Dw�*�U
ǣ�eA[)kFv)g�����-��V.
w;�<~,�������=�,�G����������?E���FH�[5�5pVW�$���ur;�LW�h��!��	1PnM�Y
>�u�<WdOo�TQ@�L�ĥ#NҋӰ/,*J)�n�:й3o [...]
���
�Z��_�/�/?��"��qx�LO��6�tw$jk�����E����d��ud���ޢ"W��zW֎+0L�.Njl(�+A��,Xl<�Ҽ
����L�0J���Zl��(�[�9���0��圬��8
���b��JRV�xq�&�����r�C̖�ϛ�X
���;�̯��Y�;
m�F����k�"�3~�Nde��	c���ǟn���_st���z

Oq�Y���
��&��&��?�J��a�
�
_���XD}��)��
7s�n,N��X\w��5
�_x�����xR������|���L��
v�2�mK$�u�/�WC��\����� ����s�w��xLwl�4���;���
p:��r�	K�5�f��Q��;d�'������ѽIoH��Ɔ^��~��������~v��۪厮���p���'���O,n7g2�{+�t���]0_\�{El���L)��)a����nC>ߜ&�b��r�B���˕�xA��?0#��~�;��{Gk#���t]�(m��)�WTzY�#��F;�d|���u�rS#�A�b�JY�O��?�לvw����@h.9�"�*3�2%ϔ[C�B���M]�&\st�
-�f�bf,Aq��ߗ*�"^�Q�}Pԧ��R�Ue7<\��a�i'�#w�yR��!����,�T�Q�/���:>���T�/مr��Yc���iq�ي�`�L���؉z�Ѕ��v^���9���g{���c��2
�o
�;	K�
���
e�#������L����c3(��)t�7Y��Yy�iS2�g�m���q+�&��2�jI
Z1 ֔�2R��4��3<=X�ȭ6_���4���P2�<�.W�W�ꬨ��1��
�k�w�
ޣAQ�R��P
��9p�����ׁ�"������BJi��K��
�7�h�s:1���_�Ӯ�:���fw�Q4K߯v�0���͉����|3_V�=y���}.c~�c�z�'���ڎ������Ѱv(�(��l��
\�CH�C�	�Ab�
e
����:x���Bl������N�w� }�~O�/Z}��
o��Y���TC��:�V�m�-�Y��Is�EN��ryr6E6�-�]y����=��35�9W���vu�+..!G��
N'D0$a���V�/���b�
a�$-zZx1zY�u�
�G�{���^Y����� �Q�p�B���g2?��v��fC�kQ.�4V�
-!f��8�+0��?U00ha�Q}�R��F�|VT���X6���t���P��d�-a�n�r
9����!�;
h��	�s�UDϙ�GO/q�)U,���G��э�I�*/���Ki�W��/n��x]���F�Mz0(1�e
-O�Zt!���	д/��Q�o�ba�Y<c�B�ޣ3��kӍ|�%��N�`H�f�����l�Mcxm�gE�ugj���ܶ��������޷n����j������Zwe�C��rZ����c���L�o��&u,=b�7�~�9H��'-�s#��JB���^>�~*����ץS�g_h����ҨZn=l��|��ٯ�J#��sc/���~��
�n��h
�`�ah��a��M�h+�?�,ĥ�~�x�ޮF�T�t��5
V�=��[΅I�ւ
��1n���l�s�^�
��,����i~l��{����wC�'�F��n�G[i�׬��uީ!�N������R��־:i������v������fqË�!,N8�_����\7�z?EJ�.�������
2�Yo��t����ׯ
�q�ˌ�Z�3v��,��B�
T+���a���RdYbNb��
��つ�ǹG�V=kS�ؖZ��Tp�|�v�q�����d5���l����� V��d���ܾ��u��Ѭ�A�pXN�G)t;�b��ŭ)!E�����Y�X,xDM�2�k$#��¡�B��{�*�������g�;��T~
����R��x�����͠��K�u�9qp�+�EV��
Κ
'�W�+�b�uO��UnF�����zZ�G2����|��T
>yR
�`A��p���rׂ���ݲ�k��W�օ�ٶ8�~&l����BQ��AJ�࠾SS#
꫸�����<���3)�f�3
�$�u��~���?�p���|�v�"1���B^�}Xqל��󹦷�d�R�lJB
zO%
�}e���w���(��[4�?�{���"2�&DTF+@�BD�z����
-�[
�5��*3^r�N��~��P��z ���Ȕ^U/F�f%̗J�-7
A�0_,�f��Jy�8�K ���߽�"�u�� 2�1 ��
 �Z�W��xX�
�=Cd��}��߃H�XB$Q2� 8��r�f�)UYY ��}ع^���
�ju���bl�i�����f�G?��\���
������[��ۀG�?Y��ٶ��	�"����l��i�+�+�p�Ϭ���1����O�����ğRՎ�Uh�iα�d�:q|w�8�$��Qp��x.�x�,~`�x��nY��px �q
3�,`Xl�g?��8
��,s\^q���8�������^8�D
���RW3N�g'Nv�0N�q6N�V-�O	� A�����Cv @���p��Q
+@#�c��`ùߍc��
��t���Ef�|E
BE���Q>e�����O,��9;��b�ZqB �u���`{�+Na���Ќ�=EĉdN�dY\X
`� �-N�Z} �<��ĉ �#2&�K�m4����
-�WI+Ϫ�x���u^}�b��	�?I Lq�^�`M0A�m=�
���@e g3�JH���V�b�A��c>N�5 at 3��Rx���$
�L��z����
7:�h�ĐA��k���_e�
<�*<
��H�������NnO�Aʎ�@+�
�08����`�1�<�k�C�#�6��@��+�
-d&�8R9�LN���]�l!�G�9^D�|VyUJY�9����W�p������
�.�ޟ���������iнT�	�My{=f�
��7��a��"n]έ}�;=���/�L98&�b��$3x���k���'�=~�E �A�]���Π�a�(

�m��+24�ů�*�$�]@
�� ��>C����H=��_�����u�
|B����U
�����h ��|��k[��c3���.�s���$��1�y
�,B���w�pLgu�5�s�
/�w��+�q(�}���/g�z"o�?�y9�g���.O=�߹���p��ytT�:�L�y
�d[G�j�'�}/c���C�á9U
c�O,]
L��B�d��OF� �q�L����fGc:���—��N=�A
�OG�s=��;ؗ
m�j
�U�?V��Dk��jf���ڜ
O�����C3	�X̸k���T����[���NU����l���G;��e^�eg{C�I�Y���X1�l��otw�ҙҟ�Z�o���
-�﬛�k[����|t���fe�y�
���a��IG�ER��)��{"�oc��-CQ���aOG�y�ߵ�
�Y"�Ө=R.����?��&�������i���_$�-f��M3���K�9��k��	�k�5q�?;���U����K|��"-Y
Z
5'ʕxϸr{�]f��\�
����(׌�P4�
-��n��2�W��t�W��

-t'���*C��V����$���Jr�
j�=En�ϗa��4c�M��ʹn{�Mh��
/��q�juTX(�zXx?�^��Q�����}i����z���V��
��ꑓU1�d�}��
U��e�:{J�f\Z8��.&��fQ/�x~���䪲�
u�_T��é;�$�X,���Z� s
��=��UZ�W;���:�;�{�]��s�z��TN�('^aqyh�
�F�]	���I�LD����ڬ����r�7���l�
3��-g����������`��"��0�
����>�H^8�JՑ���C'>�������hW���J�ݬ_����WO�<tW��6�Pb�~�/�g/+zA��fc�������f��d6�[Ex_CG Z�7���
��)�y���מ���x\u���XP���_���1'��KFF4/c:�����yln/O
߄%�[����_�ݒ��T(�U(����
�[5������5ޕ��{h	���^�X>;xK?0�G�a�g�Ǻ�&�>�	�~
2��%w��җ�^�z`��H=%���X:���d���}���V�����f�ntVɮ
�b�(טI� Y-������֜��Ӭ+
�i�
��VKx�,��lR�L���z��9+������]�s:-��L4
�EI
Ϸ�4�D&�}��� ��S�ڻ���5�&�{h�4x�a;��+h
*��ܵ)Ý+)M���շ�|9
�gk��M�\���������U?<'�q��^`��_�/rܘVF��
-
��3�
-g0�z�#z��.�p��ȴ]�{�޼62�3�������~`]c��Z������5~Z�dP�i��{�O��
����H���޸
���6�
�W.�w��HP9���t��ct75��v�Y��#<�;��f>��!$�7q�7r��F�y��x=��l�>����!J�v�MF�Kk�߼�RM>l{���3Eq1}��v�+����
w��7y5A<~ϕ�ā�uw,�+>��B��-e��(�p�ۡ�
3�2
]��9�;�xw]|82ֳ�:�_fT�
g?���{�e̓Z����ݩ0Q�
>��_�i�.��a*.�
<{�ڔ��0!�ˣɱ���)3��پ�wؼ����#��?@��*�cD4���&Qqx�C�!�T��̉�;;$��#�o.z�����/�佝
ؚ:�C�U
�;��y7��>|E��0��?����暒Ⱥ��La[���E��0t�1؀�f�,����q�o�N�Ri�~2G���oC�
Ͳ�
�gV~P��!A\��Q�V��Fʭ_\Z
�. <�7%f��/����;O��A��0!�k
�̦��oRy�zo����9�L�MV,�8�*�p�0�b<���Q���PFvo
�d~

��uP�3O�ڞd��t]å����h�_M�
��_��e��n���+�|��k�~�߅�
z;{֯,
���Ւz�h�6^�
-.��I]
�פ�v�|�˳Pf���Ko&5R#����"��|=pn�:(��������R��/G䧿f�e,ҷ��B���]�7(>����j����̬��o����q�T��h�K=G����t��zgd$�����5��"�Xf/>��.�Q�F�([m4)Zd�!+3�?'��wcd���[�
4
�Sj�}
.؎�=��!����vi�:��Tu�a����A�S�3�e�O;v�.|��pteyc���R��ۋ-����{`��T���
�1�\;Yz/\�T��
K�3&F��<�.(� H�D-L�.��ʾ��Ⱐ�>�ݣZ�k�関�Q��;��E�΍i_��U{�^��y����n�
[h�B��?�%��>*���/7�b�
���b�%�f3��m�����1$�%���
��H$���:��"�
X��'���ճ�
��m�qoF�\�@
�5sa[䛠v�6Zh�J5�r[j�:���ƕFdϨF�s�F�8��M�p�*�����U��B�ŭܢgж�q��>q:�^��o
�Y�
-�A��{Q�}�����Ne��љ��h���ڋ�(�
����,-��y�A#�W?
b9�Ե�EԇJW�g��];���\;�6�M�B��
 �
����-�\�u�u\
-��0�['�/o��C5�5�<�j�㞹}t��
[�5{mn�ͫٷ_`��H�z�A��nZo����:�r=�ǵ��Ug伪�|���5V��K�J�y��W%@�W|6,��P���Pn
g�?�/�`���LL��Dq}r�d�lg=��7�JJ'&���SM�=���1���\�+��y/��ϧ�T��`V�r�� K�{�+�2�,u�
�7r-bcB�"�Bv�C�5����>�YHo�:3��
����lWcX�˛7��T0fҙ�/�M�vA��)���go�Wsǹך��:�`B
��Vx(P�s�[��%o��<�d�ݩ��(�cx�$xR����
��.�hJ檯���n� {���U��J
!W������$^ˋY�T�pS�h����3Л͸�b�ޫ~���<j�G�+�'�#��"#oYk
.kk+�[p�d[������wF�˹Lg8�At0C�VZA�]wna�E�n�)��K6�=
-0ԇ�	��;����aY[���S��&�ic!��z�������q�	�����zr:PɆ���������$��Q��W�?pB��>P_����vC����!���`oo���"�Οy�����7�
-��pӰ�0�=��䒞&�`t
|���\�F%CET�L+ׇw�l��'��إS�qY�P_
��Sغ�ҏ�A
�e­3��n"�� "hP���n@��
!��+C�;7�H���ȼBd��|��M��H<������Q���7}�<��%
-Up����J�ѳ�G�k�A���/P�6%�0N���+Dt��_(���'
�
"�(�O����
�l���J�X�A��j��a�ӂ�c�IJ��`�췾3�w�?ĩ~��te��;U��`��&���*���Á
8�������:�g�
x3]4 C�>Z����q̴` _�`�12l3�lۊ�E) ���̾?�1y��}���?%Ȉ��M!��8��8�r
��-��i�������d�P��������3`w�/$&
���ˋ�{�ݙ�l
6}��Q^�n/�����9�~�������
�p�56q*�eP�M�v��	n���~���`���7��5���i
��� ���,�]�?
{{��32k|�:��̫��JO>:���nȇ���<�7R��>Z��<Zק{�����XR��.R@��
�������V�S�|�S�����d��ㄸ����+6ޟ�y
�N�7����x
�B�b�J���)��kxy�
a�����R�0z��'��Y�@���G����9
��݈��Z��?$P��@��M�?
k$h��1NCƏө�i/,ę�Y����2�
�9�[txu�I�,���rv]��ර�ڡq��9�c�K� u4�W�#=n��6��$纪�
��� :#�[�s����v�K�%�f�
�k�d�@t�a���Ay��ۄ��ˍ�I�{~��)���^Ԃ�@��u��ts3�ڲ6���f�y�B���zFޜ3M;��>uȷ�n���h�z�
j�m�GK���7VѨ���^�B�2��.�!��s�]�$S��I&�7~s�
q>d�������
P��v�t���6n<���[+U\e�m�jD�IQ�Q���C��m��l:ǽ�)�e��|`
-�*{�_+��hk4����J���R�;��/j2ɊH2��@�IF]m��c��ȱ��&gh�XK�P��x���)���v�����?�m���r�r�<{b����A����
��r=���=���*i���j�:�i�{�)W��#�ڍms�u��|;y����m�9���]�'���.���
�6����gy���f�8��d�hÁ`��hczǦ~X�ѓ!/j��Y�^�n[N�4�?t�皪Z����/s�@�9�A1�9'����ܽ�:��ym�#�U��E
1p�4��d3�q&�.���
K��<X�+kP�?F��t6~����`}g�Wݸ�7\o;�\��(�xf���3���
n�e�������l����y5���D;�`���aL��ޱ:
"[

����y������٬�8PE�j	�����>��Rnl.қ�c�	��ԡr��=�z���^3�%�E�*����|m�Y��=�c�vE��Bn�y�h�Sn]�
�
t4�,���Xt=�|���=;���W��q�pt�H���)�
�V@�
�æ�%{��� z��#���/�f��+�n\��P��H�I`�ԕ��Ϸ	3,�
�#g�
m56��|5�ᨇ����g�ϸ]f�24ؖˤo
 �Cr�����m7��i�
X��,Q�
z���֫��oSgW������f	�
��
�u&Zz_�δ�e��}��(j�

�p��w
vp�du�+{/�r���
ؙ� \
��T�
$`��/z�s�>�>v6�mS��gZR��zj��F	�vZq�m����Yen��ͼ���(i�n��J�t�5��P)��+���.�YV������_�Nmjx,�kMڑ8�ާd�`��x2H*�\ �Aw&�z�\2vT�`�t��vP̆�JO�nK
�,8C��Bm�K��H{���X	�nF��,�	.��-YR��@LW�A�.;
q{����U�>`>�q��t��o�/k���69y���H8_��=�<8^^�wh�l��{���cvY��^<���jɨjj��L�
���L�|?���C�$�[��(U5�$�nG86��rKA��WU�͋$1f���/.��
l��j,d�ë���i������ۥt���B�x�i�*�=�Ju�=�P
�޴FY����ZU)0eYs]i=��Vtgb��w�1�b����x�)4�8�h/LL6=�l�aE6�V�0m��)���{E~q�W���ß|�2?
�9��<8@~��(��-<RϿ6_�6<~�sQ֞᢭N�	�������
� �&�vO�
����WY�-\8��ϰ�qPe) �ɍ��K"&�' ����A���u���/fV��'~= ~2z6�@-1
ߡ��;F8��Y�7�
���u�hU��ה"J���R#��
`�f�����������{�`Ύ�H:�Ln#�i�#ta�S��M)�e��ӃSlI�p��8�#�[
-�Z�:ĕ�J�.	{�V�9�Id�g�_��F���]��{�j
(KF��{�'&8��{���=��ƾ�����	�eĀ�~G�S�A)�b�ܼ��O6Y焀8��7Y�v
-'
}R����/vG��~��>�%?��
5�r���Ҹ��qv��Sm.���N2�]�mPp�A��
3�K2�}��Էd�T�pj��|����ۜP*;ڐ���F
�7�h�+-�<�y
.�}
.7
�&��<���Gƿ��ݡ���c2�|�[j����}E�^�{e�l�[�Z�9-�\��qDd�d)V��Vl�lC���1�Be�4�
���]���G�QT�����8
ͳ? �3�0��{%���k
�

M��X
��j�dz�Sg�q��!D�?��WT6��[VY�/��-Ǽ�矚Ë�����	��*E��!Z:(�A;�O���܊JX����碏���
û��l��Ln���hz�=g
�g8��u8�fq$W�c?�A��׉iR��Q����������}Eecp���m�z���ە)�|WtEo���2�9Tɦyhv:���b?9�݇������⌇f�b�p6��EOL:���Q�
-����f{�
��^��7�
���
v�/fyݝ���6���
��Ϸo�`���ih���I=�uᲙٌ2L�'.Y/"`a���f�c�dž�Q�H����B��VL7�ϓ��Y�q��W�m#��#0���~���%?�6���i:c��t�#�t�5�t��E�=��h	=�oҷ:g�7�B���5|�zc��ْp�� :�������
R�Wo8u�K�����M�D;5�g������~h���!h^)p�D����B�Ie����
*V
��
����3@�z��������ʵ�h]��ƚ������q�$�Ly��F�p
-+��6���u&��S*]�7
~7��Vl��	=�K:Ǡ!���	�7Ƭ�52��ν3�ڜ�r5)w�TW��T�24���TU��Z����b�
X��������w��Y0
h���ׯ:?Jv9z�.��n�d{Q낸~����u�����ܢ���SM��g�������Шj4�Vk�@�춱���pP>��M�r���%�A?`�
T�B\�%��+���㾀c�B1l���gAڰk�P���Q��>,
U�ʬ�n��m��rܾm-�D��aMiO��|�4�jV��G������+��Vx!�La���z6@
-��2=�·�K���-z�*8��
(>� ��
8{#(8�P8[#�?����r�ZF7Q�!j�q��C��ʝ|�t��,:���}�>vm�Q�2*
ˎ���7�5��-tr�`<�i��4W�>�ٝ׼d�����P~[�
�$�@ʴ+w���%���4'm )����-�T�j���I��-��^�C;r�ፉq�i�׉��Jt����Y�.P�A�������lX`��
.3+;��T
��} maA
-#P�P�sPk��Q����g�Iq\���+	�� z����
�

@U3E����
]=�$�t	N'�g����
tnl����>:<T��dQ�`�������A�Lynz�3� ��� �� ,�l l�� <s}x-8�� �K	 >�� �q� �m�<�'
��~��C�xb� ����?��Ȱ*[�6��.A9
�����vIh�ǵbCɶH��<_
���!�' �Y�o�' �4��[|�,ҷ�
 �X��`� a.K=y�� �#� �
�2K���^ 9�� 9g� �h�R\ �\:
�\�f�����u|���4u
��vb�Q��I�cb���T��z��Ft[|���u�\j�
:d�� $�� ��� 9�>����N�N��)
���!�|�;�ѓх��6B)�"B��"yո~��u���?�I�4�$�%-��M�3O1�&	�S
����QG��J(VH�4�&��r�H�q��]B���Zfo=���)�GQD:��{������[B����X���S����R����pV����W	�&y���x���cR~~�G�(��QC����Ս
z
�<{��doklz��I�p���?H^k�I^.a&��KM;5���$�������f��O�1��_
|�N����n}�%��`֬s�j���ﻓx���b��68����ۭ�'��.G��^Z�[?_D~x�W��)V� [...]
-��4Ըr��{�
�s[��7�٩�i��ޱ���cV(Q��b,	�u��?]d��q΍�Ҭ؍�2�J�Qy�Ӄ�~�i�1���'���' ��ԧ�gf¬�����1�z�o5s_t���A�֝�>[as�$�y��N�<��3?�<����p��J�G;R�<�r(sN�
K�;m����:ԩ���(@&x��\�� �dWW�O�ҟ��ђ��� ��B�<�{�yƉv�Dn7�ݺ�h�݊G.ʑ��Оɬ�G��a��-����0m
�u�.W��ˍ�mR
=�,4�F-l�RjH��?�p�?�C��r
�|� b�^)��Ԃ��M�2��/��L���T�ֵs��p`�J2kl��y~c�pv9�ya�7�z6��q��@����7&�7���8�
�y ��ۡ��N����! ��w���Y��
r2�5E��۫]��q���?*ogXrZ�K
q{\�0��;�k�{��3����0@�sŸm�$��@=��Y����%�
m��s�9.��~�2�+=�Ϯ�`��v������=�Z [...]
-�'��
yЛ���^�^�L5ʢf�����.���"��{�u�)���9���
[*F)ڷ�����, at n�l�
K3���:�YB�I�ގ��|�p�h��Mŷ�z}bERef���mO���Qi��L�9,vwζ�m�A:�.��4,Z�
PБ:����?h��1Y�N��V��m�\��J32�4EM�=����8�	J�Y�
��e��F|�z��-��fH� .���+;�ej��u��t!ۘ�������#���kR��4�Q�d(�Ԓ�(�j��Jqj}�Tr�2����7�6�K���ƍԣ0�4�ܤ8����pU�|Ϭ�}�vr�����ĸhӨ�W�bԬwb��Ď�a[;U���v?D�ϯ��P}^�J�ٽ2�U�J���e�[r��%E�|�R�R�C��͍�>h�����v�$/.���Zު9~���GO>
_��<;��i/t2,���3v�U"!�=�Z�8rK�Y�=t�R_=�S�K[Q��U@����K�*��*]�$n�SF�;�`�r�*������^S���Y�4��Ul|�j�8��to�A?Wg
-:���(��n�?=xg
�UY��qn��`�����|�c�����g���-^1%����$,yi5�)R5�4E��{�a�
�V���

p��]�<��qX�ﲏ�;��;S`�ܼ�A���u4mN�g�\�n;k�	tl$(XV��B���,�GK���a�S���1&Qg��v�JD�%��5��+m�j�h�R8b4/�,Z�y�*�\:ANWl�z�,������0�R��RݦHrL��k
s6R���/+��]�	�Dm����(�
�V��R7�Ŝi�>���;4 4����l|�)�b�.��`F�2E*���=Z�e��x��a8�}�l2�,Uj��D��Lv�?ӑ����
Ѣ�I�)]/)
2�����oT��/�86r9DŽHT�F�!�
�K��\t�
��m{�P
�SO�e��,/͕�ݦ��,_�
��!Ȼ�q���!���f�{H�i��3�x��Q|v���<F�T��.�,�5��}I�}�y�59�~P���A�p
#-u�iwf�\<�`U�[�S���U2V%��t���ڱ��
D#��;{����� e8�eّfԙ�)������8����h���y�$�%L�{�';��6C�x'W
�W����"}
��?(}P�b=|^�4�0�L��
�n��y![u½��5���GOΝ|i�?¹
���e<��Պ}I�
K��/&��y4�-��&���(U�24��$�8T�
�4�n�k��i>0���R����H|�<��E(��V��/V�m ��Ո��3>����~Рj�\�s]���(�x
-穣s�5i�c��p,͘|vx��������g)�)���.� P	&zv���7X�ndž�am�C�}o��
�2��"��
��
��{C2w��d�����Q�/�B�R�b�L�:�q�%J���H����s.ޮr�|�>���
Z�

j-�'T�Dn�nǸG�{,�`W����|.��d��P
-ȧk�pp�΍,���΂+����C;��b��
-{�ƹB�B�Sr��/ffzL2'�v[s��_-�)L��i�EP��ۛ�����ئ6W&Nm�$�S����
G��#6h�w
�jYt�Ze�
�}��
X�_��J��������9��R6ׂ�j�yқ���<�y���橱/� 㞂?���S
� 7h�s��Y�҇@�x�o�Z솱pC�%#�W
��"
#�9
��e	k�����t&�s2�����Y�T�S�	�Q������n�k:������G��0�Vc�|i�a�vh
�)�\g��`3��b2�-����
C�)Z
�<���Πۼ��1�nBk�د�8D&�WgR�:�w��̴�n�rQ���w-
�ޚ�}5�Φ�D��#
���7�5>l��'��g��WM�V�Z~wPj��s_��`-/�
@��/F��T
�-�!#1��0#��ZZ;y!>�wf�ĵy�����n�:�E�1�A�A�Q�
̨>�Ͷu�u��A��fS�T�i�V�dU�kr�Rv�����J��>˦7���P.7��]�s��t2�B�$��p��j
��,���bL��1M0��Q���Sf��c��!�lɠ��:#�
����y���%�|x�������Zߔ.U�Rrv�W	�KŸYo����d�
�Y���U�Oʰ�gBb���l~
uJ��_�|�R47���UJl��"�Ȧv���b��
8����h�+���d�
ɢQ�5Wr	�� �&B�}��<�
pƵF)zKPW'P���`a��sKy��J'�a�c�eu�f��,�1�="c�`7c��{f����Z�U�E?;�kv
w$�9�(e�7;Y�+L��f	��ޑr��m!�{�������
��(Hr>�_xPj�Ŭa�Z�U�t�� �A�"Y 0��S,  ��F�
�2����K#
:z0�� ̒= F� c���6b�N�yh���ͫ+&G���j1����M�D����B)cU�g�q�W�C�l����rk9�
�fW USSLz)���.�ۘ ��٤8_��� 874#r Z͹)&k ��Y ���/@��B��Y&�+}a^o�?��b��+��4� �{��(�B�B�ۡ.��y��^��{�郋[he���f�� :ϛ z`< �)��K ������J��)�5\Nq
��G��cX��:��> p1:x/j�e�)��:x��۞\�_uHԝT�U`g[�O߾I�e���{7�R����^
�\ ���{���_c �+S W�O��h��
 ��
 �i	 z
��
�y' �B��У����?H�� �R��Xџ<X5�"��B���Z%orB�]����ͫ�i9��}��K
�
����_��z�o��W��̕��n�5"�;@���n�T��w�H�+�~���:+#0��O3j)���3z�S�$��L��%6)Ezl'	S�R��I�3)�F�+�$
"������<�T��h[璠��r�^}rG5��/�6k���]�́���JN�'L'	u��Z�Km�_��L=�3�O	�r�%�W`�ٶ��"�R\�e�0	��2!����Iٹ?����G�]�{�t%����ok�[|%���v�W� ]���$/$�&�x.$Ϯ��(5i�H��FF���L,S,ou�>���)��7�#���;�;i���b�
��Snj\��R�����x"�ˑf/�V�}����r��w�+;�t����1h��G�x}qx[��d�WuΥ�*�ɳ�G�Ċ����
�_
�><�
-}�
�}[��­ڗj�Ɛo]zo	=_X�<�9�?Ţ#����8&jh���?L��du�}�/^�k�/l��������i,���*��uks����.J�K��i�bp��ID��
&5Y�DQ�Ǜw��th׆
�z�>���tL�]�
���u`�ܞ�,����n����~{ӈ��*���EYJ+x{�.}�0X
v� �28��Bs�
u�Yd[�L���ŧt�.$��K�U?��s�C65y.>rFK�՚�L����^+�}d���:j��R
זWY�� �-�@�Ĺ�}�+��c�����?�!js&

,Z�B.*��n�ݕiX;P�)�5&�{G���

��θ?��cT�w�H޽4�7��� �J�Z�"�@.�2�~��y4ӀXB֧�D��z^Z</��"�+��`1�D�F�]uUpx�#�2=T���ܺ�ɹ1�L:ֺ5��79FCF

�� w��04>��
��Ls Q�Ơ��� y?1y�	��1|zB��1����
}�E{u[���ǒ��9_�h���a ��ֺ�gZ���co�����H�o_̀=Yѿ��,���@�����`i������6��-�u/k��Z��"H����l�O���?`�=���Us�}�R*����\>����r��]އ;+��\���_�P� A�0C�oJy�1�M�}m��޾�L<����S{�뷧�t&�}�q�E��
�:b?�'�
a�Ě*������̳*=�˽BB�>(~�K�|��s(��J����s�dV�'�p�Ϧ�	1�G�q�䞝�`�e��n�
Ϝ�Hߞ�{+I��j��
��i��=צ����0���E�]o^,�=q���Uի����n��ӭ��ѫ��o�ܟ
-��\����
�_���"��~�޸z��l&A,���[j?&5bp��d���;
�K�9okE��
6#D��+��ͷ�WjD��Z
ݬ�/v��㐔fF�����=t�[�8߀5L
�j�mT2�?��@�ʤ�����
��tu��+��7f�$
N�f5M��~(+��o��^v��@���f⛕_\޽��^0�F���m��O]��#G�.Y�xR�4<Yj2�*�˟�
-uqR�Z9#G�P��f�K��y&ɜ��d�����U���TC�

�o6�������cz{|
W��އ��Ľ-˞� ��
-
(27 ��vTlX��;W��X���RGY
M�2�R>O�g[�
�Ȗ���D*+���m��X36%a�
� �� M�����i�?`�����I�~EgFfX�<�0�/&�A���h��Ğv!�'?�v׬�C��-t��?itz�t� (S�V�g�!�-��uՐ��"�Rԩ� ���`r�?�
�S�^�� 9�>C�{2���wf�,�F�������c�c�U�
!Q�a��
f���ᚊ��

�׃��V�k��d	3��� p�f��Zy�$�
�!)&#n�|A����`^�&�FZ0o�
��5C�K]c�} �4�c��r`F���k��d�Z���=����^����{���sV��t9�F��������]�hG-24ଫ����҉�M����a5�*��V4��E��
�
��y��*��mv����J"3z&�Y���f64�/j> ��Dl4��^l�R�R%=�O��bk�v��<��
,b��[��O�d�
��N�)��eI�� [...]
-02.",�a��@���3/�w?`G\��N�e�N���:E�|�����
r�b}r<���a=~7�	�W텨�f���Ϯ�c����B�TR��
�$��J��9Wm��� ��g�>^�%���wUK�k�,4����lu��;�)A��V��
�-��߭��[
�3l5Z�C��.�Z�2p���6aɑ�Q�����;�6��ƽ޼��(�.'�g"����Kǰ�
G��� ��!l�s�ȳǰ��p>��;�Q��)gj�Z��+�kyju��<n�R�2(�
��t�I#����8~y�x?�7���ڈ��/�I��]�I{e�
��n�'���G�f��/�i��
-��S��}dJ#l2�;
-(�M��z��m׮���O�er溙
<��-m
���
���U�+hcЛ
-��5��G}kY
���M�qt��8X�ո�}�S����L�X��ә7jm�F��l�9�J�so�gC^���[l���I��m:l
�<1��0V���P��	��W|����3z�gSߪ����U:���c����*�
2����^�>�zy����v�ܖ��x���|��$�x��G;�b����;�����l,�	�=��)��Y^8{�eq+�A��V�а��l�t��^˕��ݫh!6��x5*����]�n?`RZْ��j���%�WՋ�h9)��Z��{��b��K�u��������0����-Omm7��g�-Un͋B���� �t��J���o�m
-��|�L���!esSn��	)<4�*
k�X �B7�2}/?&�(?&�}�~;�|fr)�!G� �$\��ܜ:
rRFO��\1��\q��r�!sϥ��#7{�W|k�ثg�6/=
Ӣ-אګ����;Ք�{��ϳ��JÉ��k5�t�r��
I/�γ�=��e���uhSY����Z���얐��*r
��
��$�[N@����v�X���
��hg�1��zg���p�i����P&��KT�ȓ,u��{��}g�3!������U���|aTwIp��\� �9��@G��X�.б/��q�����N���ä��餸o��7�
_ ��@
-�N�NRl�)n�/�d����HE_�m���ʴq�8��opMyl����U�IS.w��^�ì J%��6������,�5 8��� @r��Ԇg �Z9 ��- 1!���np S+��`?J�
� D��l: ���/��y̩��	��
-b����?���E�
���⛤\򴊕o��[���i7
@
<Ź+�˕?9�Ņ����$6О����D��)��~*l��). ;�c ;M ;��
3 [] [) �J�/��M�>�I���Tk�,���u
��IR���A^Pv��fjM���'cu�0�� �?���_��R�8m� ��_|��5�T< H� � k�"�Ē{ Ĺ��w��"^$  �!; ���_H𵏳��hĭ ղ�i������%��t���qs�ma��֓����d��O{�G���?����w�= �� ��� �#�<�쟧�-o+#�@a��m�m��l��ɳ �I"�x�PG쯶�M]u�$a��W�Kx��'�
�$\����~m��l?w�[ ��O1��-����m_d����Ǥ&�����~�w��rZ?�ɳ�f��3���.��k�7#������S�祉h�OF0{'�&�~K,�$ �Ä�'�Ǥ���&��G�������=���_�T<p��M}x�uG>&_I�ژ�7�#��)>����g���ӛR.��Om�vhj!�I�
��%
�*8�y�9�̪ݣ*���]�����%�Tn��4�;̴�F2�.Gj4�X�fv�p��^ ��_F3�D��G�(�I����;8d�����{�E�
:y�X:�[Km�j�e:���
�1�;�=*��xQ��o���v5����H�r�
�.��hW?��]�(;�<��
q�4��!k
�=���}�[�}�7��;Z%�n��Օ�z˸����o1����/�W�G�����g�*&�qR�����v�_
�܇s���,g7y'lQ�
�zn~����n�[�9:m���m}��ɺ�fVny�_�����!�Z[t�vo̜y?��"R�{?F2��Qi�o�Zi�յ����i�q)54L�I��R���t:�+g���
Ѩ
�]�I7���7��[�X]�꺻H��� O
>��󬷎f|�[E
긏J��%���>�ɹ촱��'V�j�/���ז?�7��ǘL�l�
-A���
-����6_$���&/�l�ũV��
���~��'�:
�[츭�w��e翗x�.�'
�	��D�P�Bm���}�V���7'�y���t���h6
ݻ��?���� �rC�`׆�s��L���=�+�1���Iƫ�A��Z�/�w�L�%9i]�ݽ|���kk��
-!�3�����.��h>�
��p��S�道�Ы�Q�k����Q��AF�!��k�y}�{۾�j��~eZ_z�
���N��ֶ���t�q
n�9�e��$��lR��ֻ�K��!z����
�j
��a���u�y,��q;/�7�hu�C=V�8#�����,(�󋖮}���~U��^�	:�^
`���f\�p��X�uǯ�
;�M>���
�'���޽��U{~c��j35�u�j�ѭ��
c�*�1���
ÿ́��l
���#6S��Oƃf��Gd������d�Ax�뷕u������S�
ת
p���
sho�.P�B���ds��Y

-vW/��nm}Yf�t5����Sg�;����
{�ޓ�M
��p=my�P�s�廫��ꅼObڎ����
����7���?y'�E˧�=�f�t�{�G96���ˬ�u����%��DF�!:�V�㛜�4

�\u�-L�W��)ch�R�3��X�6L�ϝW2x�\�y�r��,I����'7]o��jnz����s��l��ޑ�z�Ǜ�=�7
��-sev����s���R�_?��w̧�yNV}$^Q%)������p[\�7Nη�4��C��Ζ�*)�Ī�/	�
-+FLFB�O_�G�;��K=�c�_�`]�E��1;!��=(��;��VS��t-��\��m(��_0��b9
��>_���vP���"G��!
`6#-�|A*�K5q�a�z�{��͞$4�����o��'�_9i-I6�F#6��G�O���PZ��2����^��cql���ơĬ����5,�Dj�t�T
-�u���}9Z�&��-�2��Em�_�}��
���S�-�m%�q���n�e�c���
�'S�2T��@�|K���i�K�?��A��
�5t�\��)�w�_Q��9��;�{�5�Y�k�gN��T��4JR�X*�]S�
�@�+��S��q�ۍˎ�Z�C�ɝ�{�
�'P�y.�C��6�Js
أs����*fVM�����r�]�p�T17�}�ڮ��,
���5*��r�u�}xn�p&�3�6��7!��mKJ犈��c�f����js��=�PJ��T^2/P�1��=3�V��+H�(P���G�"����b�����F�G�N�m�G�
h�����,o�X�z�N�L�ʘYu���o%D�^on6š�
m�KWeqPn
-����k��<p&����`^��e��=���3�AXRs:PRN�S�Y?C��i����
¨A,Q߻&�#�!�|�<�V0�ov����1G(��sm~��\�
�\	U�O`��>���Z��e��A��5xN4���e���
-̌]�a2wQ�y��Q�� �ǨRv4&W�ӂTM`Glυ+a8�
?�\
���&v)�)�YQW'c��7�(f�HB>t$i"���?�O�/�A�5�6�O�q�g�~{�}�=ҿ�6noe ��@^0'��M�%�
eW-:/���<xR��Y�i�0�b at 4Fv����*�3v�	�B
�m.��P�6���T�|������Du�0[*0[����
t��mW�ք���C��=���
�
��C���
%���{�SS���a���Y���ˏ�x<��e�v�U|�
�Cxs����#���;�,��eT*��ȡ0k-�Nt+{
!=�:�ʶ�E^l/ޕ4Oq�)��!��έq�H��Oh�X�[�L����2�r �}Lb��'J)Y�D@^����R��몀�y��z�Ȉ|���`���n_��a�C�S��ᶂ�Bk3�;-�bW�z�5��<��G��U�w��Ͽ�ƶ
,�K�w2H)�a��YU~�0���S���X�AFe��'��q5�</e�U[�ڼ H�l�07�d�^g^

q;�
�n+�ʱ]q����{�V}pn��M��d��6�!�^[@���ٸY
�qS�A�F��Pg�Ia?�_LF�a�[G��x����~�[�X���^^�jS
;��-����MOd�a�|Gb�r{���m�;!�U�ȷ�qVo5���<f����
��V���.��
�?l�皪L��{}%����"*
-L�0'���7Mw�����?���)%H�S�5J�D���]�Vz�<5xkMJ�C�S���1UQ��S鐣h4����L�	F0�
-}�qc;9�@�֧2��/���n#���S�ݖ�GHSQ�WAD�!�F�;ʜ/w���HJ!Gߞ�2�[�_0�V>]ꕥ�T��,)�tO��yd:Od�Y��h�]�.��8[Y��l�|6cB~6#��l�*β��A`�u�{�yo���7�+cqէɵO��V�%�t	
Lr=�
-В4٥�b�#�.0���8�D1��ܿ�	L�X��'׌�Ygf�����G�r޼ �X���nk?� ����4z{mL(3L���m���#�V:��Sjg)�i\U
w�zX

�%h��(zM�;x�h��/���#��glw�
�z��UY�|�m`�rVAoջ��f�*;g�<{�	4
B����?c�
��y6
�
�,
��&l
�
���
���E����r�칓]�K�u=�f�D3�)�8ʯ��\��Į��|��P�<5~��솻dq~�M#��
�'�Q6�-�oN?�xKς��.�~K�'�rZ�AY$x�6�
��R��ŧ
�W}���̹\�%�̦2M����2�܏�|+ >��R�{}��+E�e.�e8��y�t����@d���
�=��w+W
�#�3.
�����1�E�Yrp�, \�\�
�k3����^�ٶ8���p����&��
p
w�a�$���
|�WT>��	S�S?�^y���x����(2
�>�&.^Z
-2��q�L�N�C�����xˀ�h���tl�_�
����
�򉱣���L �T����~�)G�
��h
�u������#*������/��(�'�xz��|��{�S at L������N���)p?��ci�~U���oOo�����o
�8���x�
-@���M�e�cx���;@��w@ܲx�N���P���V�*W
��L�
g�2��.3]��
fbW���a�0miU��P���~�d)u�ID
 dH6o�s�@-\ ��.�>���t
�|rt���vt�`�
����-�E
-(|W�P��"JP�
#*��T������n�C�=���H;2)�g�c?	��+�褢}���'��
-��Q�[O����9$
-�65�� U���Q ��%
4�1��#:@��v at kOQ�y��5�2Z��Ƹ�@�έ�����yV0�)D���=-R��1j�.��Jt<��p�;m���Vr���m�?�6q�&��<���6�n���[O�W�@'��k�W�r¡��	�w6����8���lu�o�4�۫�����ߪ�d�,�����m���o��������J�oP,
�(�ct��x<�c�
��W��cL,G���'
-�|/���?$6�D	=�������?�3A���V��G�v�ʋ��,����h���ܷsX�ꏏ����> ��Cr
ޑf��-��p����x�J�
�R��օ
��V��L�a�&��;� ���XW_($%�b��Q!���P��H�1��u��������=̞2���nx�$\��I���k�R�J�(����I�~:��w�l�
>�,s=��:����ḁ��O�=ҿ7v
=���Ѿ�u�~�? �f��R��I�G�c2g��=��|/n �
�Ybp]s��R�+�37�O'1$�Ge��� �B�O=�
�(C�C>��NFخ���%F�܆��u
Ck+� ���̖ʉ��s�
��o��矏�P����U��H�mL���V��(���5O����
of�x�v0���n!f�["8
6��0Ys�y\��||�Zޜ�~��W�E��n�}ύ����3;CF�!�M
ԪNv��pB���q�9!��ʌ��O0:��X����t����^\1כ�}]O��q:|���
iU�f��蚛�����"�/�7叅Y(o�3d�wB�oNׅ�7%f����
G�Ⱦ�����,z���7�y�xvj�
|F�
��h �Ĩ��{���>����|C4���
��s��}�
T��7���p��e����~��g�;{	����JHz
U���oqz$F?��
<;�
��
|te`|�F?,�~�Y�^�ݵ���d�tv��a���yf����
�.
��u�B��}��u<�Ex��n��n��2�śZ
 
���lLv��;�[8���>r�u0��wV��}tEfzU����MO��KR:�a���V�o�{
_����i}��GJٷ�����F��o?����\�1�6��p�,�ڛ�㙈=����1��/s��fVi
�����
�Z-st90�`^�,�;�
-&��5��4���?U��w�eޞ|�B�Gam퓧Z��ɷR���N�â
����%��_pOW�
�
������(�"j;�q�r��c��sX$�D�1w@�<�|���,�s6�҆�אk�-�*�v�����_����A�
���pCQعHO>5��vo��h8Y���^�NG�W�Ƨ�sޖ]G��C��6��w�����\��T�o{^)���\)���?��R��x�(=�\�:9
�v8�c�vx���kc�n$��+ZnJt�E�if�E�A��z���k�G}�\�n�t�y<��wg������P���\��z�$GUk�<yV��C
����I����6/d^���/Z�0Ad�2�JoPؐ����D��e�X�&=z}n��n��N�
��l����ȵ�a:�{P��·5{T��sXM��u�
~�� .V9���*A�걑-m��P�]?�⡤�3���NGE�$D�ɻ⦘>~�
-�c�������	d�,J%���y����:�H���.d�bsu���<C:r�dl����TMM_�J�aּ-�v�e�X	Kۅ�*�gW<lz�"G�����BL1��
-7P�
-�ɺj<i�g
���Ї��f)?&� ?ɏ���
N
l��@�6�95�W�[�I�}��
B��^t�%%����)�Oq�W��IZ�)�נ�+�U��~��~��y.l���O
��+�-
=<�7��t5��1��,�kw1_�
�\�۹E/r�������/����
Gz%�
�<���zg�f\������#*w�i����۬��U�&k�
-�L���NX�!��bK{��y�-n�l���l�x��́��4_(�W�4��r��uϕ�<�/nmV���r��ל�z��~���eWW�J��3��
,ǷCv*z�aߓT	���[�0�5\\�گG(Z�+
�i6���)�vv<G6��� ?2�鴒OO�\)z�9���R�gz5��i�b��ՐSJ#�,�6���27PW���Xi���"ബ�T;F~��@�<����E�f'�
-��I�}j�fz��X��
�2���)�Ŕ1T�p~RE�|zˉ�2���e�(ꙋek5�jh5s��(����}D�T��#�xi���䑕�� ˝�Ė�4�
Bt���H����+�X��?��	��l=3�Y֣ؗ+A��=���n_p�'�����r�T�Qc�=��0B9Lq=�/�6�d�2!Cm
Ke]���8�WڟQ|bƇ�|5�,���p�������eqd��O4��AL
[��ZY�����zb�}�'���
� �f��Q�S�t8l�L;
9�,߰�~E6��7����]�Ε�F����J_�S�O[��u�+�]rd��[�co�A?����v+�F�htX��G�Pt�E��>oM�-oM�,o���[�n�
���w��<=bfX�r��{��.����6�l|a&�関SA)5����Su��S���o,��Oe��� Kz�e��Ң"��[S4VxW�<c�
ś�����/4���b��}*p�^k���q�6�%�6�]�ݵ�
����t7x&�4T�{�>�丼�[�q���pZ-{Z+�/��J�u��~�[��I�����aZ,(wR�iA(�y]@S�"���j|����
�
��K\pdފ�}j�f�B2G��1��r�؉�Jڿ�!����&��A:?8?>�8C���΃������t
ۃ�a�&��0�B��ʬz��!i�.�B)���2g>3�a_0�1'
G
�2�o�m�L�e.�&s��zL��M�wt���i��e�~�S)M����K
��}�ñT$���C��O��Q�|���0|G�/���%�����:�5��<r��xn�w��8��
JW�P�<��
��/,ۼ<���
1񰘥��2Gw�
��gK�z��5�x�|���++Ҁ����* D�$��E�FY,�߳�q��ZX�˖ߍ�����-?��k�vf��P�ﺪ
���f��u7v�RkI�,}ZH�_
�7��/gJ�U���U{��p�P��@w�N �Z9�P�ͬ����`fjij���X������"�
0��^�`��L
k���E*�aC����b��t4�X�V�F�k�F��E-�
�e�(�fYK��0��^�ו@��)�

�
P�/��
o�™�TĎ�5��i��^Z����+]��w+/���)D}���kD��q:�CV�!5i�/��!���ڹ{=qq~:��_����x�VP\��oea\Y�<�N�qMNy�<O�	�~�Q���3Cm�#ڕ'dP
�
�
�0x�t
[�
rd�7����Ǘ�ԝ���%}��Nž�\j��[��X�lB'S6��R�B߇0���0u�U�a�BX��
x��[�b�N�*��P����%������
d	�'

�-�oHo/�7zB�z��v)�"���rV S2�+05�19F�P��~��`m C��Y�L:o��� }?	�Y��܃Kr�'Z#���K���9��&K�w��R�5�K7[���H���G�_�i$��>��<� �{v��Q�a��x��
�"`W�B�w
�k���p��o���
�}�βG���`[�6`+�<F�ln�ID�8��bp�|�e�;�K�r�:y!������K�*���,��e��P����Z�€��ހO��z&�M��':�)�
x�����b��o
��1�,���
-���$����R �p���
c\_1ޟ_Q�ZeQ�0{�O]�\2�l�ww�T���2Q�0�`�K_0\
-'
DN1�.}K��J��J at hUs@���\�EDL9�=#@��2y�
� ����(�4 J����Ku^@��,��MЋ�4��0��Q�&�Nu��9zJ͐��9��*���x-�N�|��Ŧ��L��v�zԿ=�_�ب��@� Hko
�
� 2�"���@62>���
��:�ڨ
�n{�^r?���?���x.rP���K܏�me��f�\�i(Mm�J��}�)�*���r��8��_��W��:@1Wc�L�5PS�P
-��"|�7�[U�^�1P���R
h��n�F5`�)�c[+~D����L����z�
��Yƛ{H�5�$�;@ZU��\�ߪu��&���Z��O��|��h��
��
z�%}�8 a!��ȑ3�����)�>�}��m���W5���j����-�n��/���d��d��W���-+1�&��=�/
�'�Eq��m��_@���
P~|�:�0��5��=d.��61�.DpNL��
zTv�$Y��gXMt���r!&��G���0[���ۘ��� �Q
���x��W�9���dƽ�|�4s��:�7�k����?\vjx���rnA�����:��;�I�M�`��b�6QG��_�69'��UB�P>����ٚ��5O��V�߬H�{�$rಓ��
��9�-�̍-�䧭�I���c���iw���u�ȁ�~��HO~��቏–~��*f��;u`%
���x��?�g"�&`~��1W�;����t*W��[�
N�?=�g���0�
-���{�W�;뮁-1 M��/x
����\�����J�
-�g�j/�ˬ;7��~��謔��2e�pQD����x>[
��7k�y^��,�.Nާ�D���N�+�G�خ���'��:�?��;�����]�-����xuw�Y��gH�<��t����{J,$tBoTjܢZ���>k_�H����[Wx�3E
-��J�����\��yw�F/��E؞�Q}vg��v-UV�D
��j��x�)h>�1|�
Z��_
�$Ov�knB/�渕�Z�s�����
���<�� ПX8�� ���~	
@���f{�fV�빰���KD�!Ag�r�	��DZ�
-���R���Xl
�譹i��Hϝ�����MvEz1ne��ȧ�˰�� �����G����d���R}$��E�Wz�R��]'�+wv�J�CG~�o�w�<���T��^.b�jjTo=Cl�
-Jظ� ��G�R��B}���au��EJ7g��S��[||�qT�凷F�
B�10��N����
-ܜw
������c�I��~�9{{��
�$q��{�l�eXl'!��Yq
���>¸�zj�X@\)5�2T�o��A��z�:�����!w�^�֟M⬝�+�9�^J���| ZW��Z�ԭ�]�Ü<ǻ�^ۓ�y�ք��
n
��U+�
��Y9������,�����#�l�#�[`Ku�
j�õ�x��x`�u��	�]F-U�]�:ȇݪ�
��
3��b����Q���Tm4|-w~�b��s�Ϙ/T[D[

-\+U��.<�&�
�
����_�
Mk�-�Sx�:q�}��'�a+"����O�ET��B��NP�bxV�
-�Chg����m�\�V�0��A��WD�� <��x0���
Uz��7�9�A⚿�Lҍջ���wC�澖��g�e�V��l�nW�<ګ|��Q�@3�
-�6V�/D
-�g�bn�rA��*�%�_;�Ɣ
�L�z6��5
_��{�0�Ѭ����+<�ύ��OI� ��qo��<��=Z���+5��Rg
����#m��7Q��P)L��5�䒅�߉����tK��K�tgXܗ;�b[�ͣw9�m�|����:�X�q�l�ϋ�����Њ�3��
�����uרC3bL_�~�[V
TF��;���S�U�Z�rݕQ�~ �gebi/�,�p�Z���f�
-������y�<�VUS����+���Fj`<64���.�����G�w:�ߙln�.
9�ͷrq���N��-yZ�-vu�z7�a�a��4�C���>y}��}v�ӭ����
��aw�2�o���N�5<|���B�
-]�G�ЍA�(��
��72�F>�q�ܴ���c��T<�Vjo
Ϝmu5u�P�uu��Bu�6�~6�X��j�b=m$X�y<5��[P.
w�}�yo��w��e��f
��������"'ا��i܍'(�����
�E�瞘+���N���
>��[���q���go���Vm��]��uL�Z)E�.e[>O�8��#��[^��V��_hFm��"0ֲ�렺��=Wx�^ju4��^�,��j:<�ݧ�,�h���8�d�k�
2i��F3ںL2��du�rjCl�T�6v�(�yJ�L
��W�����qY*�tOw�w����N���+�ė!6ėH���9����ums�(�Ӣ���qx,�� o��8#�m�|��m��P̏�
ѸhN#����
QaC(�酓/�]�/(c���T��vϕ���/�!b.�;�$�]J̝V�CI��}��oi��Kj�O\�
&r��`�<k����w�
ޛ�2�U�=G
n�o٣�m���%e�M흛9�V�r{��b�J;+=�K=��;t��6%��I<��4p�O�-��z�.��VG�s(L��A�S�7?�A4_n�
Ө.�|_��
-�R�E�[^�����eB{r%�?��^
�q纎{��
��%nӶ�m�\r��x����"�{��Jo�Ng����E�r�-�3�픯i�����0�/�`�� ���3�Ǘ7��un[���
_0�
B��V�<[�
�,���Cs±����Լ�:ܲǏ����������K��ms�~��>~�TQų��2c
ce����s���~��#��S~3���.��C��[)��p��sY�V~;��Ҳ�ngw��[̀��ƒ9��7��8��T�[ԛ�XִhWZ,�e�K�/��|�� ٞ1I�����F��}.�
�K����U���
����PnR �K���k쎳G�#���S���K7Sq��D,�1�Z��F�F�ıK�{fFݚ�3��^0�
�2�D����������
-0+��x���8������uL�%�Ӏ�{ߢZ�Z��J+�*1�(]y����{��{�D�Պi��}>�7�o���
��M��[�RK)�|�B�̵�m�	1�1�.�_pv�1B��ZT��cO�hm�ɢE�Ȗ�C+[�v���:��
ä�
�<�x|��
-{N�%��CzX��m��Z�9���I��>����q��}�T?W_��I}C�a�H���IL�'D�<�!����:��-��RC�ff�(�,������)e�`�W��5G�c�

k��
��%����_0N��߷���;P��?Mn��8������o�m���-�����+���(�\����"c��&��s'|�,>�:�q�#�`�0��-(y�K{6z�?����
�z^ޑn'O"�|7��3���Bv�#
-�(!]����0%1�/�q}��
������w�X�V�`%�9o�9nd7����`ܫ7E�Tc
c�Cn���5�Oܭ�c�;<тsb�Kn�0=��.�g�`(
�s
-�my|�PI%x(l��i(\��7�c6Ě��)U��j��E��k6�/�F+q���@�X����f�K9Žg}�#�a�)�Y��Je��3�#4۬P��� �f��j� ��|`�Z�\��
b���R=P���x� ������T�2ct+������(�"O�LC�<`���O�D�6�:G -�(�|�ӕ��2�%,_�;�.ȓ���1�V�oA���zP� ������{7
�$@���E7�u
-h�v��f��
@�z=@��5�S �fk1L/����A
�6�\�J}8z��rn��հ���v<�9����ֆB,�(��N��*�.�(�����`�Y0`��#~VH�21��B�
cPl��� 
3�G0�de=�2&�9e��Yk�l�>`&�Y�0������u��.�<~�o��F��X�mV.�e�<�(�I�PȻ�B`x�Ruc~�j_�=�%/~^Z�Ope<�����ʀ뿋����1�#�-J�/pq%��� ܘZ��W������GO1�צ�f��^��ٲ4]c9�Ϛ<0W��l�}l&���o��X��銐ʀ��A�w�4��E�k�À ���d dL����ސG= ��<�c���t tX�t��� BcQB���A@���_Q����9L����
I�r>go}���J���c��Ka�J�̱���g�xP@�(�W���� ߪ���Pb�n1d�@�5\ ����H
��ɜ��,i�
��G
�J��)i���
��@:NH �H�GT. [...]
-�n
��R�W@��/����w
��q
�5{
Ԯ� �'�@�g�1n7�,Pn��8�kIi�
~��=�PX#7Ļ�E����f���&7�G�Mܶ����Oo�'�&��D�U_�ٶڬ
�NeH�עB�Cw�@��@���H
�O|���˦A��?%4�?�[įX��%����ou�'!I�M���"*��
-��'1��3@��S_t/�qf�z����p/F��
iwf7�z9����
N��I�>�
�dW�?�j�&rh)���?	�M"
R�??p����� m�O��=�UM��D3w/��{�#�Y�f
g��Z�����ػ���B��9��37u^'9��[�W=*;h�/
6�j�j��ȡ2-�JĻ�m���"�D7�O}��cd;�7��-��WŸ�O��:s�
v�
q��vq���	Q��)�O=���\ڇ��I���:����o֑uC����ʧF�Q?��s��Su����	
c`w�^f��q�_��D?s��:��c�
��֦s�8��>d���BlϷ��\m)y����a�-����ȏ�&���@g��	s���g���s�s�5u�69�9U*�<i�yr
5�����n�
Z>��q����c_�'�[���6�O�Ys����ټ�x6s�ig�9�����p��
�	�N
SbN���-�9��M�6O5h�'d��g��>�q�
-��s ��Ǐ���s?��u����佻����"���`�#�`���8��Y�=�֛zN�IM�%��[Y��ԇ�܏0T��o�*���u�2��t�_J�~oQ.�z��[}�����i0ȏ<O�[R������k�E�l�����Y��$�9G/�[n
��|xP^�{Ȝ!ݠ<%&�긅��(�9􂧗��~������y�-�䭇Ǖs��P�ήF!�%g����;�Eϗ����߱��{������q
���
�^�Y�7��m"��'	nUl�:j�vڰ~e���.WPi�8��ن��ٚ���)�E�2��r��iņ5��)h[O�ړvO��g`�[A�;ij���;���h�V ��z�5*䍭�]\�g�RkH�F?ص�jQY���
��5����N���Y���.��c1=�;�eZ�;J�DS��&:�ˈ�{�n�����l���VN{i�xM���q�hYm5*+�S߈���ܜim�:���wN;�
~{��
5�W��
_ղ��¯
ު����59�
�9�8\�����{�:�m [...]
-�tT�,r
�y8��83���������/ֻ�I�.��]֮&׾"��r1���
�t�
'���	"���jv�V�hz
���6�����ޙj��~|'�b���71�i���m�#�V���P��E)� ���k�H_Ί�2?F�<��
-~�p�ۆv�^���<������U�On|�R�B����tq��g��K���K���3a&X�7�u�Us�!4��F���*�:����kЙ�Xr�yU&�զ��o���ؚG<����|��A��]gC
�l��T�|n_��A�/�
-���K�Ξ>+�C
��ڲ9�iU]�hY|����PWk]f�R*O�T�l��v���Q�ǽ"�
,�T��'D�%Ps3�ը�]
]
-�;
�q��YANKK�_���C�t̓[�3K}$�KB/W7��e/���e�ZVe♸�y�,�=��~�J�����Sِd�}8�p��e�	�:m	d��������(�2�����:2����W���{���;T�S5J�(ѥ� �
�|~x
s�t����%�V�+>;W
-�ۢ��u�$�C��*n�-+�eS�O�WU���'�Ho"u[σ�% >SON
��,Iԛ�D�
\�5/�-�?�4rM2�{�6��2haU�l���d�oe�G�<�C�#�c�R�c��Ugjݬn�üW}���
����_Q�zRwN�b�5������|l�������c�x
�3dh���ІG|���G�kh�M�K0�0�x.�Ư}�T���"���'�u��(W'��P&�t�.x�\�$'��=���Y���8�R/-��gY{�f�D�4
�w`�qS�BZ�c�����y��%������-6��P��e���]�)v���\F��
������5٨�+��҃8n��ey�֝�*U�
�%��B�`c���z�D�
-O>z�m����t*��J�
�P�W!
�>

�/5<�G���-ީ<W�U.c;�L�Y��ߘ�2L��f��c%�l�o��i"�$::ӄ�Z��;���������S�62�'M��v�g�r*�z����O��U�y�B�����
݁PXZ#~�����v����%==q����e��n�b��e�
Kn���,�����q9��m�<т�Ĩ�=�Q���M��Au�)>��R����Q�8�Ѿ�`?�c�$�����X�n9�]�T&X&� �z��d�l(v�j��>ake�R|=b��ѝivv�a�F�M
C���(
�����(��|/�-�i��~��H
�D�>�#y���[I at j[L
�A���VǓ7��[wS(.�
�؅��,7�Q&��0P\�7>���0�[�ø��K�����������3���/�1������NA�>(yb4�#��Iy�-��T��Bf~���5��23?Tf��JY��٢>�rO$�r��S���߭U�UF��t����,��s$��
Z��g�,=�;T��ꐃS�G�#B|�p�c�| �t%��
-�!����S�f�M�T�b%������%N��/l�X�~,-4
-�k�~E��*"�+�"N�,)	��_���Ɗ��
n����U�I��~���V~7�x�`)τ>3�.�"�H�V�l���3�c�����i&����M�wĝ����%���(O`LۑУ��+%�u#\��3�R��H;Q��n��>U�#Ҵ�#R��C~����O���E �k���wvO"����3g������(������n�����f˞����Y=>:>�
�TЏ!r�M���lzD��1�Ag8�9���F��/Nң�����tJ���}@S�=�L���O�+;1=\ܤ�CB
²�U��Z`����3�~���
-UE�
OL�/����D�)��*
T�;���
�;�~�C'�QF��*m� JC
����
�{&���ZʚWl���}@��6�9
��@�Z������y
-\IH��3��X��o�Og���XI
������ܦ����fj�҄H�R�	�>f��5G/���"��ΰ����> {X#?������ �ɦbtH@�i-F����‡1�G at V-
�6e Ҹ�aƷ-)�$@*x�
�=4��]&�~�%lL�.�[̝=MX8��0�cOg��?کlvX��
&��5��γt��`۟
uNbl�:�m
�
���q� uQ��PH]����P;��}��lcj���p@���tS�z�%h��Y��9fџp	�H�L(�������Ɓ��F摣��Og�N9��J����Q�FS�5�]r!`Lu���ыb,.�lz�P�=:�SLɪƸ� S��o�1c/�����kW����5@����
-�<�K*����뻨��Cn��¸��
��@��~��:��x��YI��
Z�F���{�.���9�����
�H�ط!Ƙ ����1�2��[���1��z9�ފ]�ޅ`�	f�B��"Z��
Jo�T׎
��J\�oJ靪�����
3��
-ag�*�-/)x�x��=7R�
�ϯ?0	��B"��B��� ��t�O��//����7�
#$�K��'�2/��2�W�(�㚤7�_Qy���*�����:7b��{���n�%��(���\��t� H�@X`̟�[��=��$D�^bCm q
����@�H�J]��ɭ��J(�8��M���S1�L��R�B�@����u���j����'6[���p��QRl]f��������&���"
�������\ �� (�c�z��P#��O�}��� ���
-Td�m�@�J[���
R0��ޫq�����w��ff>6@]���	�i_�u'��wz�ݶ��W~�7�O�m�����'ﶹ�^��療��; 
��@WN3��f�7�*��^�A�
�!��=R��������'a�ɶ^���nY��6�
H��W<B�=x������ �/�al����{�`#n
�*��n6����>IAH�XW�v�@���\[Yq�T�O��@�h"/rI�m�M��J���g ]ޏ1z�P����o��`R�
o���Z��D7[���z��q�r��4�'
.�7k
�� E
�O������&��DM��'[S��Jh"�&�x'?>��|@�vGj��]n|�I��
i��t6��x+>���,>�(�p��^�Ø�dP+C���YT��4�i��򺅑���v�+q�\�=v�$Fڟv}z;=�i���	��z�_C���^\5SW�H���㊟��=*���k�x�o{g]W��.Wwבi�knn�W>n��7�
-���Z.���?�}�7������
.������"�ɮZoN�]�0n1�'^��h���y|��'���O���*��Y��vC�
-q�:�r��jB����qa�Y�A��Bg�麀�Sb�&�2U��+�
��1:7Xo$
���'���[���
�s�T\ 	LY��^%ۚ�=|{>u����?�������Qg�~]E�"n���]��Cc����x㾭��p�+�qT!��s�8
o.~�>��{��c-��7I�C#C���z�T��*ot��jut��G�^��.���+Ĺ}
��������{�~�a��
b��tn
V_�DU����u�k�j�־���!��$ IQEQ�`�9g�����\g���y���
� �>Z5Z�G���.��Lƥ������,�݇�3;�s�c]��Y����E�#r�MZ.%,�}C؆��;�@��U}��R��G��zz��y�iP���l]l�D����j����M��t��Jfm����>n����w�'(J�����K��jg&�.��x�4c�n1k'�{G	ijc��ݱ���֛��5���j��n��,܁;��S�tWu�
�ky�1��x
-NVO=#W�R�r%6�VEɬv�%���:D�:������5�����lV���
�]
Zx�������/~,���=ϯ&4����^.��qur�k.�Vk���c�']��S�R��Z�Q�ఢPt��6r��j�,�0y��[+���d�^�i/c.3�U� �VQ]+���ů�
]�á�X?p�b;^��r����
^�<l�:��SR�r\�T=����]��'�^���`�����V���_��h�䚕R54	��/ռc�+n/Ĺ؈��qD.YßW,C���B�F�
Qz�+䶛aq=#�q-;�U3
-��]i�uA��e�j"��I�6N��ƕ�h�T}v�
ϭbk�/�;������$Z�L�v����rŝf���Ќ�rJ���:������	��;Fa��ҋ��o�^�=u���h�������Z)V����ay�
�w�-	�V̤M'��ry�B�K�z�����
�^٢3m����f�`V�Q�1��:.W�Q��<T�M���O��P������gI=3�V�ۑ:#պ2g�0�AIY!�_!��]�
Wl��S��]���ʨ��KQ+D���Vt�Q��|M8��J����s�:,1�md�=5*��|?ߕs��mmu�O:��>5�ޥ4d�BU[Gi��,�e-�����fwh�nWOV|���r�:��e��$���+���Yja:���Ÿ�8�ހRG��5����Z��2��'
-�[�&},��rdH�V��=����1�2�q����\�-z�8K�Pa�)�7+%�� �
����WN:;hAjI��$%�
-�6�ע�/���sBo�T��8�z[�L��~`�7ɱ_|���x��D���z��lV`�\���Ty_�hy��.Š���{���e�QSY5J�B
�m�!6��ø3�	��F:��'�U�'5����x�j���u^xeF��;�!TZB��\d�[���O��jc����5?�O�/�,�G١xQ6�9*L"��p�{�Ć��#��v'��:�Ո��\/�k-��-�s����	.J���3Ո�
����H�,�g����Hv$�t����Yx�.�
{<�lM~`n�ǯ\�:!9�2K���\�뇅p��f8���\��c�O�ڴW7m�jZχ]3pwZ��tR�f��9Y��½�k��f]��sbM�=Ƶ�j
��/��3
w�%~3�§낟��
o���n�[�W� �#���n��e��ܐe�Ù�+����/�	ï0���f<��.������T��Bn
vr��g)N�屲S}��Uy��b��{��~�Rr����#��N5[�H5~�V<��I��v�\uO9��ٰ�T}l�-�Yf`g��3��Ft���k�s�ѡ���:�Pq4�(E�e��]���N$i�.P��lcnLσ~G
4�/�ӹmd�����*����)
y2��@s�Ȏ��e�
y.�i�-�ye�̾o����,9>Ч��A�m����P7t�P�I��O)j�=�����>]�I`�eb(�mb(�_$�>R_"$���D5��(p�e Y�Q�<ĝ�u�nV���Yf��Px�UH[���|�o�׏��U�u�vr^�üF���G� Ц�15�n�2��gG)���	���(�c["��L9��O��/�Q���`�9r��� ����'�H�1b{۷�'��M�>m��n��
�=G���)�PxE�F�JWYT��0*�"���+t�oY�*�m�����^�
�y{�#S�sB
�Ԛ(Ffr����}���
��
-�Œ���������
���'J�G|�I5�]q|F鑉�����6S~
î/l<�Ԝ�~~9t�Ҫe�~��
���Z㪛��ѣVYk�谼��(���D	',|ZC��]Th��a�Nk�U�J
#޷
Z/fn(C���n7d2M/�gx=n �3A����#���	��P���sBD�Ő���Et�O���횫eUo]6�jq��-����bX��-�;��h��
O)�>}=u�$�n�1'}1��>�Y�}u]�x����[����r�e���D
-�*
[Vh��~�N�t׫_��"�A�(C�[f�֩-���E�f�k2W~���Ŷ։���ոu����3�qX���ͩ��;;dv��G�I�W�^%s(�J�4��p;S���r���g��=Q]������ ޾!��P�_�RehRNe&JT���K�J�|T� |�y�
-�Ȁ��g��6�����
���3`
��
��??�E%x�YL
�l�gt�Dw�㔘6�1���u$�`+��U����)
�k)�[��Bo�1��׀�o	@�sb�����Ĕ< ���<�Ot;E@��9 ��$�'
��
-Je4�Y��
������_i��,m���u)���̅4��
s
�.r]�}X�uy^>���TKx	� �� �<�Lp�<�[�'���=��� rLۀlgW�lRx�8���
8�=g[�d��_�k�HA�R��
�+���CQD��,'��
U�
�8MOW�\R��ՆP����� -�Q���2LЛ'��-e�	ڙ�K=y@�N�
$�$/ʨo@���׶��r��)
�Q���d����a?U���{9���s}5��R��y��P;'{���--�[��{�!�Ӈ���;�>'�v�y��0
c� �f�� 3ө30s�
-��4��~1y� � &<���?��R�e�FU�_3�7��V������.��_j�Ƣ�3r��e�\��&KPN�ď�6��S���V��p�`	��l����7��
��8A|$�S���p� 
pզ8� g�c���u�3
8y`Ni&?��o�a��[�${	�u��#��z�tj|Hj�-ޘ��Slg��g��;A��m��t :��*H���x�t�ټ>�������@& �� ��) ������6Y�\���AV�|:��6 �-� +�U�%�u�ݽ�
���tK��*fw�K<��:��~W���f���I��<��]d%,���l���x���b}�����ZG
-]:
�YM�ce��6�h.@,��@lbX�u
�^;�^���>Ybhy@���J��T�\�B�?�(���ɒ8`���'6���ћR.=W���1|w�������~�?�>
-�W8����M�Ӵ.�M/+ #} d�( Y�j@��y�d�e�_��


@㜁v����Gq���
���qn�7�ӕmF��N�
����=dcu��������ɻ��M�C���PQ��q�6V8P;��}!�; 
%h�a�Z��h�84B���Z��_M��d��#�>��
�����͈�v��9���u��b�0[��-�z`J�^Xڭߠ��6��n�W��8_�PO_���p!;���b����7�����^T_��o�<�����a�_G�1zhcu}/��[i�ޯ�^x_�Y��-;or%��tJ�i��s�ăAS?���y'��!F���Q�w�ږ��\��
�-��� ����4�
��q�oO��˺������hr��R�]��Q�,9�v�_��x���õ�
�;;ٽk�bW�Q�혧[$�.�������rS��ro�����"$r�<f����k7~�v��Ӂ��8oH3�H_��k]��Cc����1ޡ�y�,���ԼW!��� 3�†g��O���6��^������ai
��={�nm�
��t 8���xRz8��Lw�cl.G��7��>d�Ox��Y��-�wm��=���}s�]
��`������M�O�
-C��ӿ�P	�/�T�?�ڵ�KW6�©x��n���˩93C7#��`���N���s��ǫ=��~��U���ݪwZ=�@�N�m����F��h��PDnw�dm6o�����\z���@|��m�y}��C
ɣ͌��T�~��O��L��MQ��W�F?��Q/�AW���@aW�q
ߵ�~�m��،}E�A�M�˴\Z%�}3υ��"�j���j��
�s��iv�QG��[Z�Jc\����YW������`��hg�mNz2��0t�*ջ�wl�ݪr�V��vZ�G�7[.);�NJ�88�r˿FLۏey�=���Ӂ8o��i��cclY��t�kS]��l쳵M��k�T�9������ڽ�\��U��^�/~�T~�W�
��aUG���z�B�������
��ƾ�C~�K�װ�z]�F5�Z�16+r���M�J�e�f��}�V�x~�Ɯ���r~�v�{rɇ�jQ�n���O[�r��^%ˠ�Vy܌{e3�M��
�M K�Eq>���p�@��딷J{��S-z ̶�}R���Vr`R�ƝY�}ݡv����^�'n��S�Ǫ��DW������d's�j�g��e����Z�d���y�����y�����M�L]=����~DT
Ϥֆ��`#�R�_,E���E4��޵�A�C���,:��Y�
���[)�F5�
�����Vb��ݢ>��������+˦�<���O�8�Δ��	Y�
-+���n�"k>u�;R��
�f�
z���X��\��?�WZ�͒���s=��S	&�_�Uv��ץ�-�3'��Z��Mils��@.�[
���+j�
�bz
��B9,��Z�D=��b#?\���h��Z8�ϯB.���������/������W��켪[�P�"�T-�6��R��
���
-1� ����q�wkb?n�~{<j�ڸ�־��8RˎV��Y��M��T���:�B����wk�Ϋ��P�SǙ�j\�ڈO
��[��SCx�V�ʨ�$��*7�2五��Lz��5-|���IZ:�
���Q�/��3�����<�R�(��a�

��GK�7�Vm��WkR��K�{�e�݅��N�����?
ժb���b�V��<QH�����^f��%�'� �ׯ�Ē�<��x͏,1&�H����Uٗ��g!�^^���|�
-�PJ��PصF]$�I�ʈ߆
���#Zr-�%��ɽL�ֲ(`�8�=/*2ޔ���,ɛ�[��Y��yx����M_
-s��$�K�:cblk�o�)t[��$
- )�����iA��������g��g�щ�t(�z�xs�AY���e��nI����z�v�d�9qG�md�}�
[]�N��|�`x�(Ρk�.nH���
NWE��4�'�DB�d� ���0�]e���M7�'?��
o�<77N:W����.#v���,��I�&�RbiJ�'��lR_�ecҦ�*���2�V�~��z���e�^��ɯn�o��k�t�ʜ��Ŷ4ׅ
���Eh�d�����̶�g��>7�)W)�[���
��� ���R,�vUf�F
�s�>}�q'ڿ�qZ��,Z��6t�&�X�U}�G5=C�Mcv���~7Lf�J���3*T���˫:'gt�Cv��ڱ)]"� �-��l�GY��U|��B��֢b��K������c3K��4N
׋��V��L���.�ئ"U�P2zܓ�e%;��Iv�pIޯ��
J&�w�l��o7�A��m�FKDʴT)�<�L�r���:'=�f�
-�~?����R>����e���;�j�"�d�
-}���|�A�G��vN]��=E���?�
ٙ=R��&��1ѿF[*30>F_|�������(̡�"�N��Z�s}��q�`�U�yd��
-�-�)��Bo=�h՞�>�>�
�
-o��*�;�>�#��Q��b;������_
9�';w�Mj�ʘx[�51�W�pΥ	h8��q�*�Ⱦb3_\a��Oa84�0<}�`vq��f��/ڵ@���a0��e�m��g�鲯�m%�y�ԨBj}y�k���]@�'
M��9��N���L>�D�iM%��f�4�U��
:�#|<��i��x���1�q���]��:J��̖>�3��ʰ���a��a�=��̖w(ey��	���n��Ks֭�� t J�,�9�K2��1�Vu��ɠ=�N3LR)���֠ڹ�L[1��GD�3���V��k���q'@W汇R��4��
-�LCl=3���#�IME|
���u��y%?�V�Ip+��������@�DHK�(��U`��Y�RN��4��j�O��m*~���XN+����w�=᫾0"�,���:��_��֢���>fJ�1Kv\�${9b��V�`1F����x����s����WW�t�2GЫq�@}>f�~v
B/�K���=�A�Gr]�7��-
�|[�UP�K�X��1�op��r�h�&�΂i5�
��"��HWĺkh���H��"|9�2
��W
�K��~ �(ݙôf��Л �P!�"$�8U���V
`����40���K,��`�o_C��*uܸ���;��.`3(V��(�V�ơ�Kys�W���M�LrOƜ������l)�R���d-ah�Aﰔ2�n5�Io<0�"]�c�4A��,�N��N�����pʡ W� )0� {l?�>�q~�|�Ԭc�}].��jih����n����\��Hą���sܶ���Y��W6�F�H�e��)h��S(ꀠ�<3�������0Ai�`�C��1@�t�a�=��%8q ?� �<� ߔ���o	�{�o���i��l��Y��1�i���;
E2���L�A?���� m>� �;y']�L��� ��	H
�$��ԭ A�
��e
-H!�O0|R��C
����(��cHz�$RM�,� q�^�8eh@,q��)M��p	����.�^	���0���+���D�9��r&���%9F�D6N�Z��ޛV 5��	F.������������	�7 at 5�H�UPM�L�eG[@UJ(�
-�(	� EK@�9�C����;�YE���lݨY
���-Z�]�D�KQ�}aM9�G:ed�.1z�۵0h���P�lU"@��n��(�v
-�7X}4XL?%��8� T�Bj	�@_�@�h��[��Y�=�I&����^���]�)�s��qz��zk��D1�Jǭ���H���q
'�}o�B���6
�����FJ
-��>�0�	�u��!����J`g �>e�)�\�Njs�N���9<9�v��O��
�՝Xc��H
�%�J�^,����߾9c8��C�X�����s�
���;�r��p���
 ��N�m����
-�l�xe�|B����G
-�B5��
���|/�Ip5 ����oMT���C��ھBnE�.����o��B�B7��f�H�x�!�~�a��^J���7�'�B�7�
�G����a��s��~���]œ��'@8Zw $W ޯ*·9֫
6��u���>d*��3_3���rRS���1S��k��|���-9�O��|���
���
���w��	_����������$�uZ�{ �]v �0�U�*����;`N 7d� �&�Wn��&�.T���i6��F���^�Z�z^������;�����m
�	>z�7 �?�	_����6+�{;����ܓ�6�Վ&@����ԁ��P�u
����fR���*�ߨ���O[�o6�7#���ӂ�k���mR���rK�-�U��mL��⮜댽yW, �e)f������չ�
/�}���<�d��I4����׺�y����W��(�_y��0-ϔ~���c����&7�6]^�|���a�|�����^�O|�>�� =��%u�3Kn��l���>��0w��շ��o�Gs�&���jS:j������4�
����^T��@�!���s승C���3
��
���j�wo��o�\>��D��^*D�ɧ�#�b���҃_���zm�*u��4��=�|z��
-�t 5��X�d@cN_FK�M��j?i_���Z�>��_���W���!���݀Hn��'��d��^�
��B�O����p3m���sK��s���Jc��[���;#r�7�.�Cf1�<r5�����-+}���
�՞��[�QOfk~�QV<�b�o�j�oQ�?q
��q!���W��gɏho�pF��p�G$��c�WM�/��F���±�i�޵�?{�)��v�,��n
-��
-݁�
-�
�\�zlg�r��
܈\���OBOЎ!y��\;��_�q���2�@����:�ݯ��ՓwP͎�
�Wf]�[�Lr���u�'�R�
	�����o�ؔ�FƍZ����-�
=����!�A(
-W�
O_~ʐ�͗��{T�2�c�^i k���LoQ_�-�U'�q�_�UW1��F.��"M<�ǘ�IA��OůZ[�;�
��g�.�s��u�
N�"�ז���]/y�[���d�݄&R�a�٠�,�k�J��t�q�a�em�{�s�
O>�?p5��r
)Z%.-]�1��N�뽹���ݠ�
�ou�
W�q�.��. �
I> �wB
?%��i�Z���D�}̵� Sw�:Q�4�l�9��%����ԫ�Y�\��UQ�ȱ�f�i����T��؅�e��̙?BM��J�Ү����P�

<����Eװ����M�'�m����1/6�-���<
��]��&4\��KG
�\�:�彪\��mE���Û�5�6o��npy�ܰ2��Q?�9k�y;���2d�y�̢��uc�##
m&��L

�E���
-Mt</y�)���>}1���h�ܐ��@�br��+&��+`��]��Y�A�����=�k�<�@ka��ۦ͖�%G�OK䥲*�rmo컕�����p��BX
!��tJ�l����:-��A���������xh�U����
���y�T�����
ԨϑZ۾��Vv�} ���lP�o�畎0���ӫ�x}a7g�lx�Ϻ�pz�͂��|�-��Z
��W��A��Ն����]�(oH��1\�WKY�Dy����2��
r�%8�8���w�$
��\����X:��c���;l]��.s(��:�,�c��
�GUq�+��ۥu_��Y3��`���YІ=���TXW��A����X�x��B��\��:Y�K�!ט�
�i阝Q��z���C���l��~e+��{:��W��k�f_���
A����xŝ���h�C�/Hk�A<�s)�ɝ�
�/s��{�,���;�������TvÜ���LV�\3���ɳ!|:���/�2#�^�I�:��]а
���-HK�M����%k1�l��M/9���f�����_���:n���Ʃ��!�V�gc��ٔ!����J��`Xh�jC��PA���B��YI��d%.F���(Bg��ͬԳ�L+��^;
	�?��%_+'
1[�������:ЬΒ�Ҙ�4^7��v���
ƭ,̦��E2�� [...]
f��Ww�n0l-�Z���_����B�p����%on��#����s.�^"�^������%U\�ulb�m��e�g皻]�JN���쉻%M6,>
-��c�̈́v[�m��x���M_��*b$�UO,�߳��D:;~�Թ���W�R�+���b�%�:#U�r$��u��MU�Ha�"><1^l=��`�4si�py���S�Ň���D�^2#����W���˅p�QG�j�ʙ.
�
P �{��ļ�;5����q�GGk���
F��
N��&oϘ'۽�L��k�x��E�Z����89b)s7�G(�Ë��
��;�ҕ�N�!Z��J�
%.Q
�����
=
��V�������|�Y?�J�_gt�ʥ��0X��E����j-u
�����]�4K�7AvX#��D�����'��@�K����RǦ�bV>���t�V]���l�g�/N�0�������F�;<�4��*�gs�
c6�_D�Yg���L�_
թB%ͰH5+��ѧY��� |*ݶ�HH{�
-�٨9*����,�#r&Y�a�Ec�N��(2Z]�J���&��3�G�f����/W�#
-(�_�*|��&
��
��[
-�p�
K�2��|~
�z�M뒍����H��F�†�ب�|�GI2
5�-/�)͂���
�͢�M�9�5��I
-������
�D�5nl���
��)y�k:��
��~'�

�,�FgX���t���Ҋ/Ԡg�6�����B=8�@O�^��(�	��؛�ᄏ_��Zޯ
�[���9J[z�
B^R[����uk�ҭg-O
���F:�
�-�d�nqC:�M��7��o��n�l���1��13(ϗ8m�T1���}m����<?��zfA� [	:30	�o[��J Gnv��
�m�>��"�`��5ʇ���8���A,�'ʼn�(�X� d����u��
tH��P�lPP~��B)w��Fj������3�8
tm� �S�O��:k
 :7n �K"@V'�e�!�
��n٤nڬ�+����-N�U{
�R�^�������a���T
��i�f�/�n�*#�#d��\�M��	�C��_�
������,��
6�����V$,R��ן���������`z���v��ܶ�5
�]��

�¾��B6������
X�M~`r�
�Xͮ��y��gw)@�! |��
�E���J� xé$�y ob��U��
�^
��j �
� �:K��4��d!y/����9? ���#f��.�����X����=S	�WV,m�4�<�'�ͬ�x5�LP�9�F��PI�T@�t1��b�B,g& C���'M 1"��� q�I�.��'�mB{@XK
z�
���B A�F�L����?����5��[}_s�x1����,UU`���τ݊fhVq�pw�nB��\�� a��j��
�G����x
 �T�	&W@
	�'� OR��S���
��*�8�
��0y��0��
ѕj���b�_.`B�r{;1�ʰ���^!Q�uF�ea���\/�A/�����7*�:���� '(v4�	&s@;�C�
h�@�h�	�M@��eM+�ԟ�`,�4�?�(uaT@���Z
@��Y�̋c.
V�*�}�.Z�Z���͓3��FO�p��eyYw
����b��l������_���'��`a{� <$X� �H�c��l6���6v�y�0��
��{�
�̄�L���c/�e�d�F��z
-��dj��sgx�S��`�l��t����� ݿ�i�G����Uu��%A���
�
� �F�1���
endstream
endobj
318 0 obj
<</Length 65536>>stream
-���s|*�
"]��Rk��a
-p{���p���E�3��&F��p��W��
S0�=$��7�R�`q�/�����_�F8|l�_A���>2��'��aA�[	��+�4$YB�����W ��~���G���[I���
.�[�g�-��%cmb���1+)�נ?{���#����fߏN���
"x?�޿
-���
-%�V��>]��!��
�V#H�9ȝ�f�@ڕJ@ګ�K$_����7�Yv�m:���x�E
-H���b�j�w�uۿn�of�_�k���:�t��VeJ
-
�_���/g���X
(g(*���J�>�Ҟ>P��������m�}�)���뛌�͈-�~��v�G
���ۘxQ7���3��ց�.K�3.�K�>o�{f����v�x*n�Gq��1~�z��M��j����O멯�?���7���?�`m�W��4�3��/��?3�urj>�c��o���p�g���a?�{mu�}�wP�T}[$�1랖�d����4e/=T!9[�c.Ŀ2�7r���+�������6F��Ғ�S���|<��}�wa�-��rG�ƺ�˫����}s��k,B

�W����κ
2��d:-\��d���	�+��v*DG2�.���%��
;M�M�5�"
��}�����M6�
�Bi��|����r_H/!������:}7���X��3����~?9/#r
�C7���yG
xD��O������]�E�'�wAW������;�0j�p?
�8-��Z�m��5�~�W����oz�o����C�fM�©2ƺ��pS��9q?� [...]
��
� ��5����^W�?�Uy�
�M�jdž�������.�
Su�{ȵM(�5�֏
O+&ur�4,��y�[��W���k�v���A��� �ZWcb
-߼�S�~,U����栐gcS�<��6�����e2�ɽj�6^ѩ1�b��rŠz���Pk�*��pi?&�'�dk��i
�N��q�l����4g�5m~1�q�+:�1���|:��'�m��\Z��!7�yZR�4����Ŗ�mmӈ��>h^
����Ӆ*q��T�TL��R�Z�Y���@��U��0�qɜ5g���N'���nq��EW�ތ�Ì,
i�Ӭ7,��`�$b��bޮ
�Qm4+��~E�0���w�y���38+�/����7Y�WŇԶC�o
ʷQy\=����6m��7�#��
|�8>�EWAac�C1��
L�4Rł�$ˡ�n��c�
t����{�=k?�k��j&+�q|���v��+ݯ���a�gAl��7���{�|h�j�S�W��t���9�l;����j�<n���}�[Q�4h�
-R�9���q�9�+hg�w��N���E���f��d
B��U[��y�e����t��6��s�A�smm���ͱxa3b��
t�R�Mѹ8P�7���D��jᰞ5�ήYɯ�"k\��ӷ�|lf5�[�
�ʚ���:�؆jf�@E�F[�sF_���Tv4o��,ǜ�\_?������u<Q<cK
W�X��^!~�2�2�:����V_
$Sv;��Tn	
�x�ރvk�<儏��6Dlh.��f��F�����
�UV5�yN��� ���*S�|!�U+�
�h8ҡ�nJ����s��-L�ۂ��y�>��t��Ns����j�0U_r�������3V\yN
sn�q�^
s��$S�
�5���s�-\U���ʌ�I�UA!�#SO]uA���T�O	��E�xIE��+u$�L5A���8���+��v�)
����ř?��pǕ���.�"�V
�YW�&S'
S�ތ�k�
}���'L]���B6�����������5�|C+���^&Lyn��(����jg)�{��	�}5�H6:a�H��|�e���8
��
�,�مS��U�0�����5b���������yZ����R�n�+���hS(�W)ߥİ=�D�u,�Z����А3�M�KN�e��Z=M&SZ}���k
U
-
�L��[F 
I�)}I)v��Q�$m�Y'�6ð�D��<��]�4_e\�DZ1\�Jl�{2F�)R^�y�+�,B�g����<������%��	
�
�hW�/�����p	֔���(k6�����v��R�k��ѕ~��T�ɦ
b�/��0��E7��w�*O��l2��׺�#c�3H�1��9݊6 ta�! D�pÌ<��%�
&1���:�C	˔� 3G�6��~��O�5�|�O綷���
����9=��>R����
�AQ�m�<��10�.�7z�y=�oRɵ ��ieliB��"pV�g�ָ��KP3��%����5�G�Bfe��L�cw��3���eV޴���� �/�a�oX����V�����pi���(�)���5������P�
-'K(Hs���ImI�U�E*+�N�S�1鍧�<�M�
-������7�L�":o�u��j�fj��%C�o
��#
i�����
쏷��i
�d%��e[H�c�٨M˕Zn^/��Geܸ��C/����+
)�Zv,=uv�\��%��o�Ol���J���|KC(�qhf�*�?p����
]��
��&pZH㶟 \G>�6��^�`�B��K�Z�#���/�}
��,��V�b6u��5k�s?�K�.�ݺ���P_���Ho6�a�Hʱ�e͡a���%��K��%6�[��Y�3���]�f��($�Z���qO��l�"'	�����
Ӳ��%���v��;[��ނ�N�Eۂ4iC����;��Y����v
m��l�}�M>���7�Lk�
��o�s*����ߕ2}��"	�1�c6=x"{�|�O�����#
�1A��fQH������R
����C�� �@ ���{7��O at Vw���댵�^�]_
-��MB"b֯u5��<�Q�
-����Xߝnb������Q��cC��
�{4
ѩ�8v�w���kk�Y���7?�8�N�ָ*)����B�s%�N��6az\kp��q�`Hn�x�$>��p�@
x��tv[
��L���s�	F�t��q	y�Q[�� �ZD�(��� "�� �:9�{
YyX��~i=���k�Q��*Y�qK�M_CBO�e
�,,Q/�5\��B�6�j��ٔ�(���Aޣ���"H2s��0�
$_D!�4�S��[�
�
�
-D0���)E e�x��gHz� $S' �L
�Ds�H�=��}cTg�A��ӭ�8[Z����ڵ�$E
-F]Nܕ1�YHb���:%.��
�$vɻ�5N�؋�{��p@�c ���1v ���	q�
-͜!� o
��d
�{b�` �`���'�\^��

��}
$O����l��覬�;�
*<��q�t!�a�>Q$7�����KE����N�,��Y M�%���� ���De�{P��
-�� 4(�s9��}P��	PcOT�O���*j]K[g�.�.��
-85hg�|�����6.L�S&���j���b'�G�G	o��
�#+��82`�� ��Fu�
�$d����:�?�8���(`���G+�;|瓏���z� �D�u��\�]b��
8
�ʱ+��-ͱYV��{]�5
H�
�����a���S��,��9��n��Ȃ=܃�
��3�a�IrQ�V�Q-�M+�{��-`��mx~��0����%>*�?܀?:`>���nU2��,�{2
x���;�cI4by
+>����ϭ�;7��jX�8T �u���Dv�����;�mt ��X ��NC���L�/*Up~�
�[ No�_�B�,��t�:I��q��9ŏu�7if>:݉��°Tr1��ܸ	�PB�� B�������0�@�@ȡ3 ��
D�
-�� !�:�B �
 !c,8�����B� �m�)����=�*5ڤ&�����H���+^��z�
EjF��9��l�`�K�;p��)�������{�ώ���7.{ )�
H�R�%�/��0U�%<�PG��	�>���J>�$��� 'gg�B��Ѓw~�ș�T7biv�eRWI
K�;(���/�߇z���
�_�۟�o����[��[N����[[{ ^/�A�Aw!�Go69o�vi���q��M;�h�ا�
=��R�\�4l�Q�X&:�
�9��������~�1n����G�����Tt��EhH�4T��G ��4c����K�&MU�ɽ
-����]�6+#�q�sk|fI�)����_���O��Ǹ�-����Ʈ�'��n�'������4�#�=�
`�fW`�u��������!����Y2��,s�����)녧��A�������z�
-���e��"�!�pB��ֺ/��vQ=�_E�pt�Ρ����%{��疻�_o��݌���Q�~�)���$��r��o�7	�Oz�&�^�v
QQ�ۄ�3[����C�|a�Z,��7q�����p�*��mj�.6#��S��[-��q�v7��0��~ ��|L�]��13v��4q7&�{�>
%�8�����^�t�
�N��Y���b^h�~����I�W���K���Yپ|���ё_����PG��HӜ5YўvD™�*Dv�:��	Ҡ�_�8s�����#j v�fN뜷���җ7K��
Ⴞ����{{��
|���IW�����5�N5
��p�)�����˾����֬I��ibK�'H���
��0��O�����~����S�M�{)���q�
��֑;���h��#�5J-�>��
�6
?3���zx�
��E�~�
�+cU.���[��н�w1�����$���C
s "ُ�n���+n��W�N�\��H'[��Z.(t�
�
4��P�e}
�7ua���")}�ɇңZS˱ʥ٦*�c"F���*�]2WFf�Z�e6�p�ГF~qQ]G�@
�?��/,�u� ~���O��� ����C��-�7�
���C�k���Zܱ*M�v�{��F�����
����FY�^��N��
e�~q:�"����P�
�]c�
-���Ԓ��of�y�>S�^������o�UG
Z�
~䵣���
�s��8�_��;k���U�Q�

�N�t)�x�z��>C��
W�9)����[ï���\z9'o"���q����v%��O��Qq5��{l�zJޓ3��\�f:�^��u:t4*-�6������F^�4zZ�̴�M��`���W��~��I�_
8a�*��_3��|��,�N��!ɽ&�cΡj�
�迲.�E�i�K��4f2��XȰ�����K+-<AƉRb1u
y��FL�ɦ������ٝR1�m����8�������&�&��+�^o��
[�\r��u���h� ?0�B��IJ�{����W"��ZfQ�Z�u��K
����uȹ�*u
����1��e�ܿ��I1����k�
	Gj�	�p�Z��W�i�;1�D�fR�G�X
ٶd&;����a�|t;�j]o���ڨh��A
�ba���Y�
-g}�#��.SMf���J
�c*u�2�˨�K�D3�;�f)�Z5��~q�J �~�E����3sZ�lL��:�M=��@#�0݌k��%�E�_�����0Sk�*P5q�U5)�)�Cs�FӾ
-GOk���q��~CCÀx
5h����T�����%ꮥj>-���XJ�
��Ӫ���fzZ:i,Z��>�9}���0U��ݨR�"w�U���X՘�J����b�Y,ީ�席jY�uY4e�Jld'Q��(�C�n�����p���*Y���2R�����>.�θ7�Nm��X�K5Уa��%ge�6�2���*��,��q�Wk
%�-k�唱SϤ�����\��Ł|�]�=2�N�%wR���x��S��
	|4�Y��C���������\}�ڕd+/1�K�5q����
�^۩�L��/igY9���?����S���?/��r:ZMVN�
QF�SUʲSS".��8k��H?岰��;����ʟy�*܁�-N	Z�ƞym��w
��]�e�y�=��Fk�p�ڹ�OE��}J����r�Dl�)՛���61��R&[�Z��c��
>d̼_�le�r^�W|��A�(�0�y~��2_Zi/=��ܛ>�tvU�����*o�[� ������t
-
�ظ�S�ΥSB�B���js�~�v�:_X97���<���M"9J��C}=���b���ƾ��*w}����y��t��

-�W哀=��ې�4��2s��M��&2_���+w�tʦ��p�ߩL�ɮ�%s�CR*w')�I����LN��rc�q�jbZȔղY�"1�<P�%��dlV�[L��0]���t
+Z�֊7����9�[�YCjm��ap`j�L?/�'�=1:��Y��
-5<t�T���)�1�dnә�T������ ����[�
�Ca�C	M��ҨD��u�!��·�j$��ޔ�ۥ��+w�jigf��Yt�@k��D|�=s]�����3��`E�kI#�W|Tf&�(���B�9M
(�C0���i�X��
�>�|ݳ�x�O��4��	�W
,n��X<�4��W+a�g�\W�v������l�[�nj[���1�mb�=����+�w�s��"�+@��i�;3vk��\WY���\��mCE��~�P���}���1p1���>.VN,��,>
�S֦к�J�ڱ]C����6*
-�]�Zg����#��m���#݇�J��[U��v����4�0x�e��a��>��ݑ�_�}2���j�������{���,������J�[%TA�>j{�J�x�t�X2+�c1���bIO� ��ؓp��G5��=0����{*���89S�LjTr8�X˹9�Ou�]
/��-H	�����$������vXaJb�^�+��=��
�/(�׫,r�W*bM1'����X�4��b
q
��n
`]SX	!
�
�*̲ k��C�ʷ���y>b�)8�`�����<�����H6W�9^�1$I���Z�!1�蠤��x��ߢ�]l���-��&���z��zm
-��^��b
�\;p�|�K��V��(n�Q��M�V�p����ix�B� g�j%}��K��/��|��C�3�M;�'39f	��^7�q|b&*��ڧ�=��m�i���D�7�X�28!��r�9�|\�q �|x��� �0�����(� 
}���=�/"qO|ӫ|[��v�wv�y��٢
��f3�
�<�R�[��j	�a��$��	3ʱg����2�����2L�XT��ʥpE�h+��Ҵu��vD��v$��
"G at LD@t0"���W�u�xx�� �f�Q';�(�ᾐ�����r90���0[W*
�O�R:ˆ9��U��u�ү��9>]X#1����2�R
��ㇻà�M
Ab�������* d��@L@, ��QJA�
-�
�����I�Rw at f� s�va Ȥ
��e ɥz�Eic������~������*7#�J���%�
R�ӳ�i�c�<�j
Q�z��
���Dđ��rwzjC�eH�TE� �OK]x��.�|�
��*Hl�c�J�
-�2JP&�J\"�"�ׯ����!<H�,xNkÏ8'���w7V.h�m{'��w�y�b�~��©3���6}0H��}��^/E@���(����ȂKb
-"�!�u@�S��	�^� t>f:9� :U� Zs�������c2Ql�� ���<u�Gn-��S���5k��Y
mⒼ�N

'Tq����6
���;�M�`eO�ʁ�~�`��[ �IAL3�Y�<�,�2D�
��y	�a
.�F1��

uߊ`���pL�%&�U �j���`���w��*��cg �+	q�e��ы�%$���as��vf��b\u��pE#��;�H��vd��/2|id�Ux�Ў V
������ģ�#
-�(�
M
n/8�Y��]/ۀm���~WR���\�6+Y�م�+ԟV=/���g(�JZ8p�	���
�ϙ2�R��^�
�}E��v>Tޅ�ƣ?j�y7��S��JxWv�-?Z��o
\����`F�O=�
�����伶m��
�����L�*�/�0��=�Ǝ��տqo�l�
�

�)�-��
W
-������@��{�x�d)q�(��� �zր�Y5�ۥ�xid^�lM��}^l
s&�L<X�et_hV�
%������m����ǽ��Ͽ$�?	��
�� 	 ��M?�ǧ N  q�@�<����܁|��C���U��f��UO#&a$�J�ͯ��f����w	�'c�I�7|�~<~2�?I�܁{kz�B+T��C4[@-e�@-

P#,�
-:j� �Z����L�녙�)B[V���˕�iҀ��m��?T�S��-���� �$�?:ߟ
�_=�Lݾ���X
��F�_�qC�1Z�}z�ͨ	���
-��� F�� F/<��L����S��b��0��^�y��x��eʷ���ۜ���xZk��vZ�DZ���1���C�/�B�����0w{�
-����
��tW�n�!^����t��<��-]���SQ��ȭ��53��*�+�����r���_�oס��mj��6�_]�.������;�]z>Xȓ�x^���%�©��
�eڑ)d����xd��1ޛx#j\�
*M~��ߕ�ӽo��['�Wy�[z*���A�m�����mF�zZSu���-v��k��
-��^L��W���.������g�a���!;��AHJ���W�%��ZOݧ{ݦR�w:���~uI������]�?���>?>������O:�ӽO:��60?�υi�+��*�GS����
��q؇Ԭ�n��q�:
um���jY���F��Xˍ���43���t&4�U��
�d]؉~-�{�jM�+�{��1��:�[�S(��0�#]�U(�N7#�n�
t�%
ڗ�J�k�J�U��m��K��~�m,�e��Ϋ����+�H��B��kWkJyP�4��q�gѽS]G6h
��t�VF&
�
+�#z<�e?Wd��fA���3��(I�A
<�IW�����L����F��C�}m�hNS꽾���Z�@U=V����D�_�4_v���|5���Y6zL�).�i��|a
e
�-�����v�뫯�$�t�[�>A��B�s�`f吭
e�x��Y}?Y��oP�{��Ǐ�v �%�s��X+�4.�j�R-�˯�4/��aR�ު�.��P>�ſ�53�K7��f, �N�c޹> [...]
��fVh'MR��
_
�6��'�ab�@���5�o~n"�gLc�yiKd��p��EB_j��Ӣ N��e��iq
Y|�W��Ʀg�.##,�%�S�?K��Ҽ7�Gy�gGy���Zq"+�R"j�}z����J ہm�� m�ǥgz�,0������������ԣ��(7Ӣ��U�s��jl
S.4��R��ߏH+ީ�vq[�(��ު@<zt��j���T5

����[a'(p��oW�����A�|;u�L��xI�,F���2����>��1_�v��
�픪э�rYN|����}{���x�'���\v���
�F�-&@W��`����i�x�4駅��\��=�7v=�L���ap��ߕ�
�l�:U;���j\��u	7����E0��֓�C�,R/��l$�)�Dܖ\F�W]Av�P�F�А\����QN���Q-!psS~=����7(n��'������̭��).�'p�•�)��-���5�����j�K�n̷���o�Z�TuW��L�$�J7vWZ�q���� ;I [...]
�|�T9ĵ�z�?�kEG�wO������������u�o���7�-�om�\ź>�S�c�O�:g	L�U����'���nS���-�tێ���Z!���O�iB�E��x$I�d�Re�����Qb��\�
�
���[t�+��;vZ�f��q�sJb���Is��8
G2������27��3������r����Nv�1jk�Tzu�(,�-2�O�H�2�>"N	f�~૒'������v��g��'��p���d��ue�!~���A���mNv���
$&��dl����
+r�)����"G��~�X����7�����������K2�Mv$99��}b�Q1g�9�T|5�2x1��p?��rŻ`�*�c��p�j+�A��6�
���,Sk�f���n��~g����D2��:��h��%rE�j��WVm
g�<.��ȕ7�8����\R8���֫M�	�G��<�W��
-/֪G��t��vXN��ۭ�ɑ�G{<@k1^�ȥ�g��:�{�j"�1��h�%��{q�+{�[��R�o�B�
�X&��.)@-�֢�o�G��+��Ò��9�y���
����
#=����ҫ�
�K۩/x?F�Dn�ɛ�=�^ZK�Q�$rYbE����X�}��l�E�����S\�@
�C�����ml�p�L�҅�̰�)e��$�>m�Gr`#k+�z-��+r�2��qa[gI�f
�tZ,�0�c�#����k�
������e3�9��
1�S,�p(1f�V
�&>p�d
�C� ��q�6`G�ƥ���8� -��3]�%�"݂^I��*�b�Φh5�LG�������k�yU��F�L=��U�y�.w��V�
&o��6/�أ;
ƺ��<�d��t
-�6��)Ч`�
� ���i0�����1�0Vm�� �a<kyѸs-��#�
�����ge#:��Kb���ܪ�L�adKI�HQܰ%�k��
�/Ob�̶�ap��1T?�g���O at z��8�,D`/��
`��]�(� �`!D���v�
p �\���=������'�
�yP*
�����$����G��p7ʞ�ۇY���Z;��SgzW*a�f��S����h@/
i
{9����)�S�R�5D�1|\C���
�x:
A\� �Ԯ wm���8� .�q���Of��Ƣ���!��>!�����=W@��ܪ����7�����-�������`u
\�.�l�;n�a5����{@��#��J� �<��my� {q�+�@����2�=� |�?��R�؍•�T�OF6SOy	,��D�1�Ax�8u���U
Y��jvq�u�Q��=b�g
 �&?
:$/� �)@�R1�6
q��L�x�;�
 �

-�#e bq� b9���3�c
%cF�<��n��x#���u�۸A�׈���[I�Nz�ݲC���~
�d�^'�X��@y�+���
P�	|I�P@��;�z� yf���t��r�*� ����
	�m;�i��n��j\d���ٮ��a��tǛ����m/d�&�#��|��]�ː,?b?>8���5m
���B�hWAmZ��4
Q�e�ԣ�@<��z�>Ģ	��1�q~�)�jE���F��;��Zۀ��)
B�Rhw���c��n�R_EI/�9�%?��
�j��aq���h_���<�`˝�'�� �_?9؀��p*�m�x�f�^
��Al7�|0�3bV �6��{מ˹�
�v0I,��2?=M��h=�9�&�n�����q���i��9���Du��M}!�9�{%�
-v�K�·@xgv����
D��n ����;�J��*C����ش������ �dx�+.h��{ܭ�H'��ج:�
C0C.�:
��;��
����zH�V�>�}�'���k�1n���@����ЛԄ��!�+�k��$ ^�����E�����
��Y듋ne��LR�gZ���^e3U#�>��b���/��>����&�DrSg�K���~Un���
oM�;����`
1:�0�>k
�b9��O�H����1�waq l�E����{�1]��@L��N�����5��vF�5��]�����Ǥ�/�
��
��ۓ����������նr��r���g�s at N�E ;��i] ��l����Լ\RM�[��&��Ζ�B��|x�n�;_�I�ė��
�qj�[φ�����	r�Ϸ����^�~�6�-?�r��@9�@�7�"����n�]딋
5�֩Jz#鱾�XD"U`���?%����4�i�%�S����
?�
o���dp?�>����v��) ���A� ��N<}��7����xۆ�';��F2�WF-\G�P��T��V�S��z[
g�c�:���v��ׇ��[_v�������)��M��
���5��`��G��|asu ��,����3��q��t�����:��7^q����=���I�vL�ヶ�=k�Wrɕg��l��YD�ś��`��w�ɮ��=\ק���=�+��xd�fc���GԐ�٩IB���w�Tԗ���w/�n ��}
��HW�'�R����Eu�>��˻��S9
/�Ot������Xv��W�r���m4����"e���R��./�}y%H���*�K$�1�5NB��э\��ΕکW��9�Ys�c�Mj�c��~Ҵ�0�?F�9ѷt�'����'
��[o���8s�d���¶�A����� ��%|T;
e�j�'8W�,G-,a��ٲIMƛ�"�<4���R��.l�H-��T�Xc�ʥ�X�Y�"���,7����P%����D�'#Տ��G�z^��w���C/|y�Eb,}�C�Q�j#�ݜ�lc�N�z�t�Z$4�Z<r*�z�}gGo�ua1J�jQ����ed
�J�l�_��q豣eq��u��(�"3��Zr��/#�7�6�� [...]
-S&7���H���B��Յ%;�%-�����Zr$N{��H#թ��NGfH~=�Y|�#8�s��n)�n�F��HbJ�r�ٲ[~ľ��>�<�;��4;������y�[i�'�Q�1�^���;���pTL�x�_��Av��,��Mr��K�v���]RX
��7q~=9�|�����Z���A�=n�3�en��t�f��aLS�2�U����� �t#
bZ�k�|�(����7��
wIG����~Y��E�Z�^Zg__����!�h%��י8m����]X�CK+>���HV�\�W�\���Z8�YM<s������Z)�~ihۼ����[SN�P(Z���D-}a��%O�[���z� �hp�İpI�悻�Y�Mf���S�0[�Q�rLv���jXF��r�(��R($�S^l�C.�_��Z��c��z��1��pΘ�jCwN�#m7�5�e�rve�B��Ifc�G�R�ȋ`A����UM�
ꥈs���-\�	i�V�bf����r[��`�r�s�H��8e��Z�XȮ��6�! [...]
-CV�z�c�i�p�Ԣi�K�[vH����&�-I�gb�8��Gh|y�i_^h�]���*VZfXi���	��\�h�9ߢ�W�A�b}{`�|U)
u�����
J:��1j�칳�5�ʾ��M�a��M��<YX+�
W
-�:�����Y��^�N0�N_!�^X��pX�;l+�nX�9"0����C�;h�;�Q�V� ����%�nCӋ�]a����Y���+���]Z�	�PK�/
p"K�gu�L���żzE]zI��RD��P�v�'N=�gt�<o�9�UË�]�J�G���8\�a���@t�衲^��{AU�E�F��CB���Y-��[���	��
j�=
 �Y  aU�����d���G�G�����;W��K"mh�ϊv>�3J
-mi�
/҂D�
�ճ�tn�Hj�6p!V�Þ�PUA��%&����"F���݅�!��"/�J:
H���9?R
@��. at Z�@�I
 
:��5H�!�J4*�N�}+h�#��
���ǜVrr��\mf���К�+� �5!��� H�������L�����F
�#�:r���ؽj����}�Cǧ Yz[���O��mx��L�"� �
9��\�=�"�� %�@��w��5#BW2ߵ��B���v
�X����:�)N

�yȕ8)`-���_$��3�%g��e�h�=vbݘ� N{_h��Z��
�, G�V4�������������&�F��fc�RO h�I��|:WTž��
��V�:�z�xx��d
�|9�,iR���~^M^c�5I��ڕ��S��!b5/=�.�-��b
�w�
�jS��`{�1��/^��4��X�O�[���"� c.e�![�

Sz+eK+���ͭ�#����cW�T�%>�{����9�Q|�>�X[fx��ORg��)E���0�A�r{
C�� �� `��`����Z=BTaG�`����l��C<�!�1
-�Y`l�����	`�,|Y��pۮ
-pp��L.�]��V���J)G���]�bjKG�M�Li
��:M#��Ӻ���
�Ov
�
����=c�jf���V�W�;
-�Z���X �K>Ĭ�x�&


�g{m�'Zw�ۧ
����Y9��b�ȴ�j�u*�
Zʹ)�.'���l�X������c2��A��h	 �U�H�� �u��x�Dk�Diu�8_ �#_9
-b
�'9ݷ݄8�X���%R!
��B燀���q�kS�
�V!��m�=`l6ݺ�$)�QOd
��].�xFn���ƣ�M��թǡ�V��ry�-�4��I9 ri�9H� Y�?Y(�
��dF7 9@�\
b4��ƒ��HyU $݂�b-xV�c�MqZhEq�J�l�����j�\pb{3i���%��]�\�3�q�7����'?e�]�`��q@�d�����n���_vߞ��P�����q�eP~� 1� *P�(��:��tPb|
(R y�[�ę]����
-�x)53��/��dl�wA��~1��J���"'�D���Le�'cdN�>�Y���
`�%
v��!
~�N��om�F�� zL�^ЭE�1��

�H at W����t��tj}��P-(x��Ƿ��ܱ{|d[)����ZI�T
�b���Y7>���^�a�#��rgN:�O(��r筁gs5��ˑX��C�\��T��oB�怍�0�&
�Mg �I��N�L崂�XҾ;��9q!���3H
��>�3Zoǥ�Kc
zi
�}_c�
ڈ��g�����7���_��?�)�����5����l���@\5��;!��pyx�q�$|�m �OU�P8��O�г��=ԓ�RJ.K/��m�Uΐ{����b�3{��V�������[��?�c�P����V�:
�h�B�
[-���G�2�n���Jgn-n�d�a�H4?^<�,��t�O�6쵩nc������ԽI�~�w�0kx�7�x6|~��'����;K]!F�๡B�} -# 
���QH�jH�F
H�G1EE�i⯪4[98�좂No�1�'i�
+���W?��~�~L~�����g����g�^����3:��a�{�%�f���}��%P�
�^6�l���)�$Z�C�)�C�[�����Vn��Vڷ��ǩ᣻��lxgp�l���e�~��*�^�	�i�tF2ߚ���5�tݰ�n(������좕S��S�I�
5j

ƞ\���l�*�Q`���H�ո��*h�`ߵQ7���)[Br8K,��+�6��ƗB��{�\���ٝ"J^ਞ﮲���b���*5���
t*�?=Ԉ����7�i�A�u!����E*�
z�= �Nu8���VF'�n̢D���*��r�߼���I�&t�������E8��j�y�H��s�{���at8�/�/;���}a��vԾ����;j_�����/�?
m���}a��h��D�
�OG�  h�������K[=�
�����'��#�IU�Q�t߱����bΝ��]�vEN,V�Ii���8�@F��;��nzB~GQYx�Y.]k-1[�:>�M<5��Y�	ʍ/,���
���?�p-�{����{�y䏕��
�s���T�H	f��
-�0��`dG�ꌯ�ut�Sɚ�k�
��:?�ˎ�_=�a�'�d����Q�
ӡ<�d�2����Tm�,�fq����%=�����c�!
��s��vF4l�kjeu����;��9�P���Uo��rzO�k�
�/���Q���`����q�NrheYh`��^�,<���)W�Yt�X*�k�4�>�[�
T
�ó*����L
�Z�uՙ2�ț�X�X]��{Ȗ��8L�����l�H�T����-o��4���=l�P1�/�
4��Oo�z�v7�B����#�
��L�,�r�Ĩ�8\Np/�z�l��4oC��V�¶��]��j߻^�����b���b�
�4fIyz
Dw.
-H}���uz��6�l'�����^]'g�};n�=3���K�ai
t����hϲ��6��
���0�s����[����
���-/
��r
-�\��;��+�M���;�Jm�����ږ�ͣ O�uOA��N�oU�=��/
F�Y��mm{�Ť�u!��K����L�hfŶ0�ʻ�4��
��Q�����#
�C	��Qb"5���M�$�Ok�#5�M�тKV_�{(�C�un��
8
���
d�]�~��AYZ
���x���i�֔s^}%/�\̿cW��B��"N3x�p���q}�D��o��ߎ��wq�oG�����;�oO�����n��?�!���?����?����?����?����?����?����?����?����?���[iO�/{﹦<�
-_��L4`r�`r�s���{��k��l���ۙ9�>�04.KU��JRI���v	�T,�nc�
�T��b����
��;*R����k��Ϛ���hC�<?�Ec��I˱:�oaB��M�_,�X~��b�}��U�O0q�XF�x�Z�=a�a#hx+�g��2���KlV.�X�e�dO���Iyӊ���H56����#�5=�X}hi
��_q^~��b���w��R���>ڲ��[�B�KD��h�ڡ�!vy����l,�@�eU�,�B�Csa����I;�,��?���)���>��LF��[��Li ��T
vV^��Qsk�|��
]����x��p
���t5`Y)��þ/v�U�>xj���׳�p�.���/�0��
�w�.^P�E/7����uc��|��y��!r�J�m��b�R���$����H�m��~ c��8��~L�%��f�hmcM�
`T�ƛ� �߰���\��%P�4�#�/�
)�8K���S��r�(?Y
���Ѱi
ס�8��� ��v,�	;�l�!
�Hl��D����
����������R�ք�ݪ�h���
r�m�cAC�]煢H?Y\b1�a�Y���H�'����FPoTMkz�V��Bg�ү܂�_񫡘������m�u���ח�0v
-x"�� 怨�
�A�e�fص;ag䫹�8��5�}�^����B�����>@
 �j��b�
֕�U�*#���T&o��#!��c��S������VV��������3��/�_,�Gm9�xM��X;tչ�^�d��-���a8�J
�A�P�<q?���)���c����
!��(��}?!t|��Ĉ�!�h���

����S�]@	�8�4�d�P3���6����Y4��<C���b��Y-�$���H��o'��GtB��P��E�scwT2~�h��K�g�ؕ�#Ӿñ�0�*)tr�
W�]��
�d�X6�ꈯ6�*�ީ��5�%��/�_,�t>
7��gX��Py�1
�<�C֩�C�ٗ������gVÓ
�p�KS
:��%#!Z|�(뉋
h`�k=U����J* W�O��
��ZPx(�~4���%ċ�~-�Μ�f
-�[���J�	#�&�̹�����Y��ą� ���Β1ћ@h���^
'���1ٺ�-����w�îP��@�F�T������BٔH)O�LSes�ݹ��?Km5��.��
��3��F�
v�)�M�>o�[���AL7��u�
- at C˩��y!��
֡����EPƠ&S��<
��rr�2�E�o�2t!¥���	a��\AQ�����g�*.x��
�_���_�p�o��ِՀ�l�E�]fw�#�-��
��l*�&=:&AS��M!6�k�9�Zyz
-��
-�
��-���O`J�<cjT|����Ξ������I�p]F��H������k��������ř1�>�=3۽F��M�J)�Bcy�V.
�D�M]�i�
���\zc��
-?|Bl����d�?��*��C=�stxfV���7}ju��1��/��B�S��\������1��з:s�B�l�"7,�5B���6D�
���MS��v��R!�����˿n:[?#>4z���%�?�B]B}3?Q��S����
-�)r����TN@��-�\�C�-S!w"Y
!�]q{ME�;�x��'�b��
�~(�ɰ00�����n�&_��H(�m��'\��}���H'��}��>��x� �"�����c�ё�����`T���5[�͛ B�FȆ++�O�Cy��(T| �V5�}n	�X%��Ο�D����#���a)���fJ/��
}X��X4Н�qΡ�&��SzQg5�퐠
<J*���;����&_u&m\^�J<�k�Q
�;��P�U���(�r���K�
�l�y�N'S�a5��QQ��_�o~��t��Z���e0h�E�֭�|,ݚ�X7�FH�g$|�v�4�-i�N���G�+���u�n���
_.?����~��p����R��X�H1��J�j�H	�ҩ~�_X
'd֗�?P�-2��j�+�?J曮������R)l��
;g�Gvv|r)��WHG�Z��v+�#%Ey��!�x�cg�f� 8�x8��S���9�f� �^��n/���ȯp�����Gb7�x�L���AӚn�
‘��
��B [...]
��r��
���,d�ЇWÎ� J.�:�z��d<��qR
��#�=B�0����@gĕ�VO�-�O�ʆNȾ�33����<ڀ~�FR�
��CT6"u���7곤�J�厣:�ݤ%�*AGH6��D��
�
TUZ�X,�8��/jH�?�!�GΌ�ȕ��ݤN�%�\]��[�tI�i�k�WR�
PB��Ai)�
�F�ת���AT�o�}�a�w��7���ً�����n5_�vy`i���p��sOȕ���`y]2�$9�דC�k��3��7�)a7�c#���br.�Z��O��O'��KH��~�]M��M�1n�R���X��t18	uHyn��jD��@(r�Gq�q��I�Jn�D��#u��7���*�#�s�_U��䡡Ɗ��A��J4zVEǺ�IIPW-JRڛc����3�����W��
�U`��z9(��&�IEL_tL
A�a�����f��{��Ĉ��鬐���O�������ă��
-�L4�h�L#Z��F|ϳhsJ�x��9���Y��}�2�s��4�(F౏ܵ-�s|9m�+;���"r���v� Hʘ�M�5�v�R�`������
-�57p!�1�H�%���e􃚈����Y,�&�}?.

����c�|�A�
*;7?���Q�󬁦�E��Yc�K]uϥ��#�3�$�2ۑ��<����L$r��k����W���ߡ
-�	fHi�
�[�c+D��3��/�
��
�'���

���ҟBW��io�mϽc����XU
�nb�X�C����P��ɡ���4G%�U�9�<�
(�\�
�M![)
�,�Oȸnrj.� %Dn�t�����0��	��"���Տ؊������s�X8��vK���R&=!
�Fe��F	x��������J
ZS�
��+E�f%�3�5�~Y����
���-hI���6��)
�=e�'�%l�E�9��=�b(aaZF:��CR�9HJ��V})
��n�7��M����2djԦ~2����
,��m#�WIZ��
-*��d��3HN�sT�GȘ{z� �}�V�4���ϔ��sL_
�	&��Z�܊ہ0X}ܬ;dX�)5\Wa�W u
�i�d
��:�J��]Ջ�)Q#A��~P�
�,|�g�u�� ���f�zÔn�-p����b_�q������Ws�I�؞���t
-��Z���� ��RY�oR�����\u�P�	n���Snt����\�jq���6�"P�Ռ�+�����@�|+,G:�$T{(����oƯ{,�iӪTl����P�6��GE���j����
-u:�
��Y��]�`NPq�e!��rc%a��tڇ�Ʃ�-� �FaO�2l}���l,�םXGB�/r/��{�����M�Pr\�b����

����"@b&U�C�B��	9���D12O��QNȝ/�u�e{�nJ�\�ȳ�zE2F2q1�9d���qEV�0�oN�ί�YOT���]4�V����n���t"=E����=㪤<__�S��
�u-��E
vTL~�`b���~�W�by��Ӂt����*��:L�
�W����0%Cܖqw
-W�:��fo���FN�/�V�R�N0΅*�6�r�&Hpje�;Jy琡ؚ�a%�~y��0S�ʤU�n��P� �|��Ub;.��a�����C�K����E��Ѵ�}�3T�y�`(������
��׮=)�ݦ �l
5~�^]͌'��g�H�>M�FU�L}�U
w���
-�g�r���YIܧ
�mZ�*C��|5��Z��v�Zߵ�����r�/���%�/n��G�5iQ67��.�*�ti/��.�v�M��9W�d� 
h�b���pR�
W�8���ʕΙ�bԨR��
�(m�LF��r����1�=�H�BN)RY^C���@�j��q�}教$'���&o�R�
�R'I
-�óV��� !����1Lle�j����+̽,��R�+�|.6��&��;5� ({��䒏��s�!fͶ�9�sǯ>�9Z��k��F������X�rX���4>Z^>�����oT�e�1+2ި��qc�+�Je�^���
w�M��‚~(����~���e�9i
eg��[\�=��%E�\d���P%�����g���	��=7$���Q�]�[�֖�ʴ��#Jr�_�:�j\�
l��*�VN����HFě
p~�1�8�sz"���m�@���̬��h���^'���j�5���ć��q�L
-��c��kX���=Rc��c��|�寉e3����� Q����_���.9丸5�`u���E[�uW�L��
!8�#�KJ��q��Vo�jr��ǥ%���a|W�8#�ǧ����tl~A`p�@|b��Ac}!�̢iwo:���lԽP��$�P�����9L
w��Ⱥs�H۶�9����'�u�����*xC_�͔c���
N���l+�N�x�������ʮ�X��˰����?K����˶�
Y4/*�4q�V��q�^�z�9O���'�'w�p�z�aʼ��njD��fo3���7�+*��4��@5Dd-���l3n�+�ܔ��#�
-&R�6�+�ib 4>�m�d���<��S�N�C��h�X?Liw<�(� S�
l{uZ�Rz�.Q�X�������e�옔L_���#p��
-�f�@�V��E=��7��{NM��ϕ��\�J�����������������ؔ!���z��p%��q�Q
�I�c�.Xz�;��B��:L���8 �8�� )�8��1}���zrb�"
��u���Ig��H�	�Z1
=�U׮~���1�����!ܷS:��
gv�=e"�$9:�D���J`jd]�g�R�
3�BГ�0���E�=�ո�她i�`�4Z|ٯ�S,�o�C����s.��
-�ଠ��0�M�����_,�X~���
͹9�𣞿4,Q�[���=���k�I;�I_�}�
{S1�ih�MFU�9p|�
-"D��=
d��Q@�
����- Td�Υï�b�|�򛜨��+�j���cv�J
EY�<���9�/w�Zw�=���d�����
�U�/�6\5�W��8�՞���.[���	6.	�%j���bl

f�.��Ǭ�_,�X�[Xt���G}����9��Ǖ�f�{[�' �Q$i��ܳl�7��~���g�.��#v�Nx$ܔʏ t2���m��˔�ʍ^��D�z{��Y@�����喦��)

-�|�K ,�]�)�{a�s'
cƄ��͎Z�7͜]l��~oi����IT:��1\Sڱ��^�p��	�_�dAm��~�\aS_����/��:INK�n'�)���N��-}|�ɐR�o
z���7����
-��f���t�=is3�k��P��:�
U		���89�&Bݧ�a�@M	
t��<ϵ��0��5?�
��S���݅y6�
"�_�h���>_j���ns׊��N�3
-�ظ�
-�y-u�1l�C��<�W�
U����_,�X�9X�����Z
W��g�V����J�Ճʊm嶧�.�W~Ի�r��/������B֭մ�nVQ�\�[w�u!��G�~z�b��Ǽ�%|5���9�~
�"�L��M���Z?��B'�qܪ�}Σ��`/I���os�?eH�X�>�\+(���'ON�?h
�b����p�U��~>t��j���n��!�.�m'M�
��\H�[՜�$����^[�~��v�v�� Z��x`N���4����_wv�KN���h�i ���6�Jd4�/I�#+ ��w^,c|���x�
<������ձ��
E(5m%쾶������U����.�B��~���b����ÂN?7�Xm���b��襭�&\%���o|�-C��a`1�-w�C=]�v�\�(
T��F�r崿�[[e���z�wP����Q�!�Xl�9�b~l;{�yP���׍��ʥ`�x����_���W���d,�q����H�oP�
|�����'��\����O񴟯6�?��e����&���t�1��S�ƕ�׌ll��v���x��#�X:�v�g��t�Cu��o4�Q���c4|Jn���N���V[�Lg���J8��p-��C�\W������݈�nWb�9�_��*���a?z8��Y�Y��}9���(s�.R�\�o�Ub�@p7�4
�ܴ��8�u����g/ [...]
-����pE7�M�;�./���ma�c��O,�c��4H8���X�߃o�c<=MˣF��*R1*wd���U�x>��Ib�(icK��� 6�!��
ᘦ��fW}��Q.}��h
��
�ynIb�`��R
��~f� !��d�^#�����
�2K�
q��pd7�l
�����v+��|��"�I�bX{-w��x�\dsif��
�zW1�̯%��Yt�*n��rH8��+	��8�yIw�ʠ+����i�k
+{��
-:�J8%
g�Y�A:�k��H-��4�Yz�|�<�q��}�X��A��B4�!�X���
A�O}�7Y�y
M
I`֖5
�n3�	�-�F��~~􉙼w�+D
�(��w���E(�F3;�C
�R�g���v~N"���!>7g���H��:ǵ�?#���)�&�H�j�q�ZJ�δ�hC�;��U�X����{c:�n����Ĕ�' ;��J_��!Y�$C=jof��鴬ٽ�F��!�cur��ӣ����g��9p:�ot"'��!>C���K�8��#��H8A�x�U/�H5s�rIɚI�o�<��o@
�M��Nײg�k�]l�,�c̯��N'��{GHr܉�KF
����!95k��?]#���	uW��l�Џ���<��,���M�-Bx��A2�q��K.Ў��� �2�bV�'��
�*����asoc��-��|C/Ƀb��|�E|��~
[�WN(-���U�L�
��ͼ�-��.��!�ignH] �l�)��'/��6Rf��U@�� 暔3R���z5=��RS��
X�{'�!��?����m�9�z��Q}C at 0�fD
-fuG��1���7=�]i��Ocw��zS$۪�dM�ߞ�U���
�Ɩ�W��M���q|��/�a ����r�YO�ه�׌����
l��}�N���`��
8m��H
�b�Ui
-�&�M��l6e��	��x
-Dz�����|�n2�	�U���.wh����3��h�jXV�M��i�Z��[��o� �m��fYD��|�C�
Q/f�����O�M�)��޾! ~#?�
�
����8�6�X,��{�
�eg��u��Ff=�S�!�;�X���$ �?u�
-�����&�e.Ҝ��
�B@�vB��3��4���G'B'%ٸ�Q�_����g[�q�ҏ��˜(��}a"X�@��>Vy�F,�Q�y'x��
d�ǟ�z!V���1��\2�"eJ���n�����X�Ƴeі��z,X�Eқ�č
�1�ƼD%�m����y�I�Cể`���.1�N���H�y����œU�v"�G@	>V��_�
@_��X�$��@ji� y3H�d08���?�!�p{kk��J��Y�}#�A��tv(�i��=Od)�Y�Vf�
#R�gwx�bYː$�
 �ġu�t�k	��KU�aE�!Qo�n[�QES'hZ�J���!�a@�/`
6�L3�,٨ST?]GКr��9<b[�2�
�
��0d�{��\	#:�dz����%:�EʻJ-R���	Cάe>��ar�e���"�;�c���CiW[a�
-�0�Hiʆ�7��#�n�
Ϝ�C> G���d%�'S=�!��0;Q�_��v�t�
Lⶃ�� ���� ��\��,�����K2q����ͪ�C���
�C�
-�FZ��H�6�է��o��o�@����*O��sƇ~D���M�
-�d
-�?ɲp����`|aԅH%[p��&�4�b�U0��I'�-��ބ?
a a�sPL�HmJ�<ȑk�Z���� ��
PLm�e�����?����,��� �'[�90�V̚���`Kr]�e��k,qC;,��5C���U7M�
HX�T󐂫�W���ʅ�{z%��]�VijuS��GU��5�e��b�����
�k
��>*u<���
<�^����q�eLJ����9X�k0/�eW�5���me�L`M��:o �}q��Y/��kk@�xpw`��v��Ej���n?�
�����Ә�.Fᾱ��T2���
A��e[
-`>.�L؅H%9��8Y�5���bګu�ܜx �Xhy���)�
-��G D��
,㰯�1ќdV�F�_���jm��
�m�7)�]:�
2ij��s�c���޸�L"���
Eq�ŬΈ:>��*O���Ƚ
��q]q��㎶�l��\��|�
�{�����'���3s���Sc���oQU���(� X|��q��������y9�!=�T�� %A���m!v1���a���6 u��0�sڎ�Xwp)9Uʣ;�m
W�yj�{�8
)�I��3�!Ď�G[���wS-1-��/0m_|v(�u©�ٕ�7k<[�+
�]�M�
-6��*1�v����ː��_#�p���7:��Dy&�T��u6�#�\�����_>=�H�l�yW}�
�xC慦ސ�Q�
VLN�n
��f6Rk���������� ��5�
&K��R��)�XUu4�ڽG�zd������
-��a�n��
��u��Za��c��j��t�K{�`#��w:
�M��8�ik��̹�T�#Kt�V�1+z\���҆�0���"�|"0iv ���r5|�
�9�
-��a/���!g3���Cw��I�/.�j҉�'�b�ް^8�W��恕pm&����R��I4���u����<�P��.����J� Eh}�|�����ש�\�����>05o�g�ZU�Ju���M�?/�ɥg�G�Z��l�H���3K(}���TԲȑB��gW`���x,�*b8�r,�V
w�!�[�:��F\���cF�`�QL�	�F�T�wh���l�J
-�������S�EךK&jo)j�@׮�4RJ�c@њ��:�̏Ğ�w��
����uؔ�Dh{
 ���׵��H�e�Ґ���t�A�g�gZ �
��C��Bx?\:h�z?� ��c��{2��X�B<��ɏG6;�e�0��(��3w�٬�L�j�Rň',s-�	mh�䯚�<�:��#�
m���u�6�2���x6��i�d ?z-��0v�9ߍq�
� ���X�؆�
CnX�^�#�KW�տ�]���E�Mo#�e�C�Nj�
-�
�@�4f��-ڶ?x�R�����E��E\e,�K��F��
l�NBgq4Jظ<�\G��h-�=�{P�X����h����Ɩ �J.j�ͫ� ,������~Y��-'1N%����]�w�{�8�se��*�nI��`����Ɨ
��V�qF	�dg87�~ڪ
:�=�סN��`J�7�a�o�ԩ#8g�F)���>T�0�9k��m�s\�Mz�L��RW	l"��aNZ�V�b�*ܟ4M)�:
o\��_,
���
-�H�Z�r7�)�ޮ�`ۊnA7N|�G<�@��/��9%�t�t
-�go�$����I����K��iEtkP�6���i��&���ܞ��w���
e> ����ʝ���Ȅ��<i���z�E��(�t��M�ɉ&[�HPSb��,���i��h�8<M��F��hK�F��:-�a�\�6�U^s|,�ƞ�S���HI? ;�dk�������;I?��� eR�~��W|طn�������Ei��9I[w��������y�^�`c23������Y���
x
d`ϋM����>��5����Ț#�����B�
5�g]S�fz����W<&����v�E�@|t�N︠��6|���T
-\zF<��U��qN�QH	s3
�`k�n�M&��j71�F�C�bI���ɬ�.M�)jJ�\��2����x�>x����t:�O9>���q��<q�m�Y�=O'��I�Ip|�{�(�6���$�A�b�U
��x�!�%K@����.��gU]��FJAaA\ W�V���
RR at K��C���
�z�
����W��)��"�}n�

uk��
i
��s	���Ӻ}8g	b����

����9+n
����aH��;�P�>9��0 �W:O�T�>! ���(ѥ�w�Z�^�z�;kũpj
���ͥ2���}d��Y?�#Ė�#9�����1\�^���}�@��x�ה����w�����H��s?f� h����.�lU�
���Z���r�SM�Y�6�0�X�x��ft���LF�dzFw�UKI?�~ ofT�?��0�K@���$���w�H
�)�1(
t̛�*1�SEа��_�
-5�����
Ow�����H5� �s
-,l�q�Gf��s$�6�
�z��k��Z�E�
-���&l��8���3T��N��p$�\�;����Y5��ք�5/wӑʳh�@_S��f��V��A?9�1�qGl�yLo6�V���8	=��������
-��j�;��洑�~<�S�����yv1}��{��r9�v

�-L�ry0z�
��#�N��Ϧ���Oyv�o��q�
?���oF��l7;Q���Б����N���,��O�Xy�"��o
8b���Ol�=lf��]�T�M1ZS'l�]V"���
�񵁸yqp���j7�:�_���V�0�u��:�?n
���� 8٦<:_f's}6��O���h7�
 {L��I�#%�.��
_M�,S���Ky6ٟ��)�L�i5�^fg3X�&�h��.���4�0?V
-��bv��u�nv^�cн�x���D�:� a�38��x��

�r�2��k��e�mش��	)®A�M���?����-�>
�L��5K�V�Ae7:���r���j:c��*B|-�qד��n�g['V�?�����E�:������e5^mV���ۭy�
@���
�F����;��f����;� �fW�)���oJ^{�4�e��!������А|���UH � 
��/�U��
�:�"��6��^!:��^�&�׈�|�Z�7_&%�(	ߔN��~��,O�팏�vQr�w�Ib����0bH	�4;�G�u�?��@1��+�F������ј���}ʄ_(��@'�A#�˿��un6�����;�E���~K�;&F��u
_��.e ���)OiLU�e���l7����%��@�����l��|��@��p�P*��
v~���̄ �??;/���O����5N��5��K��{�I{y�T %��S�ԙ�H	��{�r����1
��"��~<��F�[��kV�5"�&��l������j"��Zi�j9/���/�
1u�W��=<o?֛�wɵ:6�]�A�	�z�z����MOA?V��M;��	`
���u��D���g�����\����M��b.�͖�vO��Ej�c��!�a�I���<�ހ�|�������-b�ÈPWlK�����Ǟ&,ƁM?�Ҷ
-1���2q@���P�����0�$���0����m:���xP���'D��C"dKtt:K���⟷el�"� �n֠��
-{c6��f�����
��i�\��?��|t�\��m���/g�?�ѿ ��vh����8:ß��)�	i�8��L`��_�
 ��[�\�j�b��� ���c�s�C�ٟa���lF���X5�����|�,a��; �W��
�mh����W�?��z�I����V������j(Тn:
��q��O�h��&�}� >�����9���_�<���2��H<�k��Xo���4�_o�w��ӻ��
��4��Dž�!@Q$v�[�,��-�Al
;��=�T��›Qk:�.C�>6cfC�h-/6��j����������g
U/��ܓ\����(>�Z��S�!Pv.�ڎ^%G�͖
�&��
��1�!�ٖkU
-|�4�r
�SR���m���
*
�Xj�	������&
�\#�M�+����|v��q�N��C�A3��+��ʚS���3bq7*}Ļw�c�����l� ,�m֔A��~��푣�x4��䆫�G���3ZZb@R�9Ot��-궹�m�M���鏧2K
f��)G��G&����a��m{=q�10�VD04�3f5�g�2�r
��a�婂�,����2��!��n�@�T�����&n�qV@tw�R�������[�=s���w���w3�+Z��>��;�4m�V
^��`W
-*�z1},
��Z7�H��reLJT�@��So��h�HC�Q�x����Ҕr36�	�`^�c��;ge�U�GZ
-h��X'����|He\�K�*d����jb8���"U�S��U�}�!��j#N ���
�S�+���!�T�k�H�ư&=65YH���ϑ�kQ�aͪ�w�L	�`A�̥�:����TǝSS�
��
������H
���"�tt꫑:
)ŕ�]|��i�6^��H�&�4e�wZ{~�~���q�O 
�XOס�iC�
R��W�S�<^�.R�����g�E^+���K|H1|��"U�
�$����ޚaɒ��?�

Y����u`!=k��y[F-���B�u
ו2�4�]�
�� �K{l��3����GCv>�Xn;��d�} u����>V�*�H��v�dڟ
He
m%os	"�%�Y� Ҏ
��+:�׋
��
�X��e%��:�0/����z_| %�븣�y4u��#ċ�a���6"Z�R�
-��6���#=��O�Z^���"/�t��h2�p��톰~?b�GZ0(z �y�mM� R�h��f������	/�!R�i
-ְA��O R�-���]�B�����0�
��@
-v{m�1R]���_)��Ԫ)��e�4|f!��8`�K�����Lc�]��x(a�D
�HM\A��53����`c�€�� ��,Y#
���������rt���Nn�]&)�B
-�ɩۺ�͸_�f�l�N	�m+/nYO�VOz.��6I;2�!�o��W}|�%�S�����J�\8չ=�s|�\
�<�'�O���囅��y��$��p]
-?��=��x�/Qᷫ�}A���Zo�Z��#��5�����f4���]��6TE��S@����y;��
?m;:᧽����y_ko
-��_�g�O��

���)f�׍#��yM�i�c��P�����.
�>��^�a?|*Wb��'�sU>���=f�>��o�O,

����USVR���|��(�3*G�0e���%5gq�,S�o��6��W�-Y�&�7���a� J�c�Y�J�*0ցiT$�D��擄jE#�{A;�6ҠҦ�3[B�B;�E���y�N���n#py��|H�D�Z�vR�Jr*���{Hy�VW)Pm6a���a�d�X�Jh�,nH�:R�\GGj����-:�4�S�ZI ��$B�����@�XB�ÏԮ�	#U�#C���
���
��P ik����*@�I��o����/��@�	!-H�+�E�l])�)�KI���oFJ]����hi�a bC�7"�N�<Z��C^@'��|�˸�:�LГlƬ���d��<x�+�J������Ny��o�7�:t����A�|�C�A���L }�m��W�
���n%��
nM*a��	=,�@��G�V)�@a��@s���l���]����8?�w���<s`��e�Ҥ�f���`�>����)n��h���fA���u�>�g�C�DV��ɉ�Q3����d21B�ʗ�ݗ����dz��(X�w��3��A�ix��W��GzH�g�}����
���׍g�$-��%�;'Yt'�0��,�I�<�֘����
0�y��y�X,ѓ��Lѓ D�S�	xj�/�F
=1x��2J�̊&5��qi���tZ�7��H�<z�
�<������w�f�� W��3�Ќ
-�������B�R���:5�CDG�W�C�Ý��F�̪���Y�n��c�_4����Ά�u��ej�.�~�[���G�
��j�ețoC'�:���mOF�]�c��H�40�go�<c�I㻱�*�w�ҋ�
d

�W2��@�|B��2�
�Y8K��x
�f���ӳ�Mǻ`G��Up���� ԯ�>�|JHM�1%Iq-�!z��
�[�iҢ�~��
-�s�������I|~�A��Wֶt�ǘ��s�)ɖ�\b����\��S3��^��FJ���V�
-�;�
-o
��T�dw���
��σ�>w��&V��c��n���3!`fAP2�e`�OR��s���$�lߣ�-S

���6Ռ�V�L�vl�6�l�!��
-ɱKH.Y����E�i��+/!Ջ�rQ�Xc��y�:�ިY��;��f�AM��P
�@���w�f�ݵ
��u�	�>:"�[���t˷:Br*!�6��%ɳE�׵�R��lCO�1��� �wb���΋���H�a�n�u>�|Ƶ�iM,05X�SG�=��
�� `�� ���r� �\�
!5��V�3�!�P����o$_>ݑ٫V@�O�z���<Gf��k���69X�­Ȱ,�'�]|1�^!�3\
P&�Xܒ9�Xܦ�
�ύ4a���C��0Y�
_�M�ժ�z��jTd��;�#�����
S�ohv���;8;�ޖ��2D�����iR�5 ����`���d��]�(�D��W�~������$?���džO0<
LU��R�	��!�T��"P�m��A��_���<���
Ő����"����м��C��
-�sr%��P
�|w�g�}O�<��O���|}�
N0M��1ڛ j5�)�0�u�,g�ZɒtYxXŌ�(��	q����wP^_�X80*�`�}Rw;�{��/��X��m�ܬ�~H�Z�Tĝ�MOħO at a��NE_����0b{H8�>� �0�=�])u�c�
-�z��"nqx̫e��7�8�<
U7i)�����oo7�]	��m��3>ARVv,R
-�
]�h�=W��ߘ���^�h�Q�D��¿��8A�K4"N)'�8�"�����ۚR���Dc�>���h
-C�	���p^�hwK���%�$�
�~�Rz�����	��a�"��!��r`$=�
\�x�.~ �J�U�uxӌfD�	}"�
. at P��R����Z=f� fd��t̒�vy
�W��Ni߆�qi1�Ȑ�H���p����z�	<b���l`�
Y�Nt7�
��!���RLh7r��]�/�H���⓼�GS�֘��p���>�$8��o���1��7w1G@�ip���9P�^�<N
�_�g/$#T%�
��P|/$)��
�<�aSB8��^�Ҕ'�ݐ
�%a�M�K1N�=�+��X� �1�F��mj^$p7 ��������* `k^/��b��`p>��d\Nt^Z���	2�I�u--2�~�;%��>W5�����ؖ
X��q�B��툤k}��5��5����"N@s�NxK��m��Oo���ds?�!�%���L�}Q�p.͒�o�e!�b�y�6š>cE�W��ķ"�+�9{��K����K��*[�5��]2$��땰��%N����
:����F�+���?�Cg͠#)��
::x��O���!}d�Q:̷s��3�;U��CLJ�AG�/�ϡϠ����C�O�[�@���9t�����
::n&���k9t��з����б�Y�5#^	
���t�N8�eL2v�W:��RL<�H���^)�1u���U
O�s:	ضq�n�����G2�*�qfJ�6HQ�'˦��37znh荴$�ʎy�����,KIf��G(5sN��h>�8�s%��|]b��H&�ϕ(�HL�U��˕?��N� [...]
��D��g6�$�?�^!�S���%	)��H�'I�c�QLIz�8cyz�D�8ΘnC;�g����3�U�&�ɕ�n
K��f
��x�I�y|�'�/p�j%t��Ȋ���\x�R�K��{̟x
Ӄ)p5��<>�!��
J �`N
M�|��-\P�����-/�
� 
U�� �2fޢ��Q��{r�x��_��/�#;{&��KV
Et�K��,c��� �e�= ��]B�D8 �M
��D:G�G�LB��c/%h���.
�3�*�z.
� �"�i���'�r��
<��3U~�X����3z>7�hv�,9���!a`��3>�K�#y�:a��x^,[����3�+�I�ѓ�8�ԡ+����	���5}�wAa}�%�O�s��J�'&%�A�&���0w�5��˙q��'	�"��^���.��Jf�^�Ȉt�}��7���#��\1:����T�����H����מ�GT^ŷ�DbͲx-=����UK�]HH�Qy-�ׇƲ+��o{d`����}J��=2|�0
�
";�u�ݛ�qHMι�/�L�y)9�~��-^�y���$�F��
t9��s�"�6=�Z����ܑ�%�������(J\�ޒ\R�c}rs.%�i^
=h�}7�
yu/Į
XI�0�RH��b@ڸ$�d�a�Z�s��������Iȇ�r_����hgI����c����ý��^̇�P��|�oG�Jʇ{���#�p�l��f�����HK!`�ȇ�e�����r>��=$?�G�
'#���Z?r���W�n��{1�|�%L>����aF���{	��쉢
-Ő�uu�CB����$��sf��s8���3�G�Q�ӻH���ݦ�z�s��M��ݙP0�@J�i�!�r�����(`?Ɔu�7�
m
��u3����]
�6P
L���J‘�)rw	�W]P��a���0�cW
	#�/���x�U���pΟ���d�ZO.Q���jQ����f�Zv	:�ӌԑb&!�F\]h�PFj�2R?�������'#�V�y�w�X�@3�AF��
,6��b��70�Ѷ?�
-G�b�d��"z��½{�k�p�����~ �F1)����p�v�O��	z~4��c�d8�p�C�a����n��:���PZ��W����� `?Tx��!�.2��*�t�$A���'w�]��Fo�nz�m�KVV��[1��5�x���L�(ry^ȍ��@���	�1b�ˍO�3��o-9���0�ٞ���r
~���
�}:լ�}J���ق�
�13��
-��ß��W���`���d��R�ߺ(	 u*��æ#T.�-�awV�bv� R�%3�g�MŲ��RV��r9{EvX��v�2�캖 R@ހp�
�{�>��z|孵/�w&�aw�
#M��:���`�B��LbHs>�����ZP.@`�R
���Y�yn�o�D�b�閯
������v��Sy�'����
Kb����IG�K�yi��+
�p�$V�-�]jL
�猨)�I��UQ����Vѯ Y��;�F�.1U�1W߬$ǧ��oo�~%��
{�P�<�t�"�,
�E�
�\<q}�u�~��\P��
S��|O+�0�'�
:��ր�.���yJt�Kb��/��i
�`�Ui�g��2R8��Oۖ�Z�ʻ�l:>���w���r�n�|?��/ �7F�[�t�=��E�y+��E����t�+�G��J�gGA?��oH	��t|v3O�7���r��^�Φ�w�K'�3�V6
_.��{�$g���.����l:�\:�zI�ɦ�˥{��?�M�7��9?�Mǧ	�5��g��"c�~2�NP���l:�|��)�T'|�b/gӉQ����r�{�~4����huy~(�N(�g����P6
_��z�~6
_.
�,���t|3��`"�N
-�?������ɦ�˥{~��R
-���%��3���;�ML0���M�V���� p��״�����)<O����Չ��{V�N*�4|]b��J��sł��W��K�~�']��@�N{�u�ӥ'�,{�S�4 �.1$
�dv~֥��+Q��E&�"
-\�L�zv^)�
�v�;:�
ݽ�����I�3"D~�e�Īe�
ݽ��}3>Yb��g��D���)e,ߎ�zV掯҄@��7��Q{�x����2w�˲�o,o�7��<
[�撐�JS��y��,_��CӉ�*��H')�P<����k��$g���!O2`�d�e��_
-"{��0�PZ�-I�D���a(��X��g��R6:�
��ףӋ����~*���
%��1<	k�����Vr/i�p��ݬ(�3ti)�zo��$�T'��A�$IK���:�׬�ୀ ��|�D
�L�0���X@�Ĝ������
I�Dx3���
��W�xOb"C�vO���)`{{2�gQ7L`�J�J�`x^
��J�Zľ����Ƿ�Q���8�%���-
�J�`t�S\��XUB��a����'����q�
��Ȇ"�^ȯ�F�;��7I��J��oi�+�=�|��
-wTn�����T)�m[�U)O�
�U�N��3��%U�{�Vs��T�p9�39�����[�ۏ%�6��j=w�o�O��|4�@b-���f�sE�yŴ����p��X
���
�Z~;,�'|](�"U$�N\6����d�Ә4��`��'IL<��W+1�KB��Ğ��K@`�f���}pz3���bΟ�+�L֍/ؕ��)5�I&�S�
-��W�����h�ed縲C3^U
��~��c���:y5�5�\��*i�p�r\�Q�^ME��
- �����ôX�߫�'�* J��X���
���O�>v��;�ƐP�LS��>
����*rt0���Ո~+R�}ف37�.j�	����ݼKD��*wJ+\��]4ctz2��iT�}��eN9�ڱ���[���4ъs}��?
�:
,��6~+t���B�}�I�Ci2yj�<W�4<��y�
-����ùKazA��F�	y�r�mj�ix���� ��'��Ȼ��;���J8t*���>B:b!%��;�1� ��y�Q
-"�w�Κy��kZ͚UȚF=�햂y���#<$�eA9�QQ�%�;]k�I(��9j�u�ۨ��u��O�2�nǪh��V��-+p��;�F�Ë!C��?��j�ṲV�zZ1&0����Nm�Z%���u��Z8��%O�S�
�&
	)J'��hS�Yi��V�$��e����|� ��b{`�����.qs�@�L/]�K����^#����E~a�i1��l,熐�c���1�Pv��>؄T疄�O�ķϭ��eTH�Y�
M�.�W�c-��_�Q#5эK9�}ZQ��YfKKiY��^B˳W��ԕ�����H-�}ϙ���?B��O�%I���y�!��3���)w�Qs�9p
?��71}*n �4ɺu���/5��-\�W�
�8_���D2�
9)~��KiQ|��~%�+��x	e�65	�8�S
y/�
-�<P�<_r*�N��u'��TΧE��@�fp'
����YY7P����b� k	��~�b�ry^�ؓ��W�o�1`3A���������+�=��,@�9��o�!%P�|'
�
�Y��% ��S���,@!;��9��%���\%�9�2����o�Y�R�I��f2�H ��,9
Pj 7�N4
��
wT�E��5���/��Y�O���)�ǵ,�E���p?Y�O�H��7��ݴ��nQ>q/�O���ɢ|�[��;E����(�;��yz7�w��=��g�����P�u�^��ͺ~�U�މS��'��Փߨ��7����Y�O�]&�_�B]?QWF�:;v���
U������~?����hEz&�%"�T�{�~%o]�W�����c�OfU?��
���{3B�ź~B3$

�B]?I+��u��7:�>�~]?�Yi߫��81�������߻QЯ�������D=��	���}���
�w9P�������~�.1@��B�R]?qKM ���~�U�$V2zZ�� ZՏu��v]?�hU?�F<�A����Yi?��@��'�[J���mޗT�O\
���}?�a&V���z|?P�j�~]?��ʹ�ޯ�Ǘ����x�[u��~c�[]����{���Sl(\�OX��V��Um���~�jFU�o��X\�i=����A�����~��/��"�ڋ��{�F�7����L	�~]?���U�8֫T�4�����#���~�Y�p��D]?�,ܗ����b��{��
-'
���+��~O��y���~��9�i�����
D����t�bΓpU?b���~�f;o�u���v"����E���nW����+��U�O�K���tۼ4�P���x���~��2��V]?�X>}읺~�BU�{�Q�V�O<!�
F������v�7���W���|������	��˽�8~[gu��{��$|���q�v�\������b��E�%
����Ȇ��Pe�����"���}r,AGq��(���o)�Q��&ц
�V9PM����F��^K+Gv.�\��p�~_)ɭ�J���x�p^����]j������D�{��D�e,�v�\�=����	��4�2E���x��5�%V�Y�X��Qa��8��
-�,ֻ��� m�aC}zH����t�0jN�H�y:�����{霕���d˹�Tf�b_
:5�|-�X]ڑfVT��ՠjw2�j�}�V�nE531�xQ,�gNý
�c�Iͺ	�+��Sb�aڛQ~Z��Ha�/�>�ӳKu��Gn��K�����]%��o��� ��%�|;x
1�����r_<�ݍ)�Iz�H�몆��HT�T�9��ħ�t��}�7%Ka'���>����j#�	�ۚ�0�>J�{���l��3�|�)�G
-�b��>XR�(7��}H� ��م�4=�sM�#�U�p	��يl��s$�h�
q���T:
��m�:Y��-�8TP� �{�4��S��=�?͔v�4w��Hia
�
���:)=��
vl��R�L&����lHԛ)؛�-T?Dc��ق��v-���a��:��2��(까¾��h#@s���������<���N����,YdABh`�d@� �E�����J{0R��iL���u
�X: A?��A�B�i
��W8/������o8Ao=`�Y�X6P ��q�)�@��^-�q���VoSy��g�f�W�6�nf��~%|n L[����H�7,C at eg�7��j�b�������*o�r�f��8��}d��
-�6��.�m�,�PO*�7�����q'�fV���T�+_�r[6U�c	Xu��21Y=���~'�`�x����?Y��v���0���&f��:�c!w{�o
z�V0k���mj' ����e#�>�*�l�o���u����{�@)�����6ڃ��6 �s�?"�X�['��آn��7��汥/D7n��qk��pK$�� �Yn;7f�4Mw�j�\��%i	k�����mj����2������R�����U7*��0�x�Mۦ
�]X&ip���9)�lbJ�
-q�({���P�T�������%�+H�Q]�JHP”���ԄZZB<��h	�	�ʁj2:�X����vH,-z�
�4e7�	��g�3�3�ґ	�s͑�|��&X�ay��x(<Q€��?m^5/&�#�B�b�-�aĐ܏рp�Ȳf>�,. W�.�}�{�o#E� ~�kZ
�E`WF7�
�@�s�S��:2�K�W�F
N�
�,���b��u�Y[���6aI.�b&�ObI���xƿ� �F
-R��N֬�D���&x_�Z�]����
YQA'�Z�(�W�f
��5�-7>ϱ;h'ێ
��CV
X��?�a�
 9/��)T�V��_���`q����!
,���i$R���sx
�1OK��9�&�9$Y�;LS�Ԏ=NS������V���uƍ$ 
q��
�J�@b���ʲU�i�

-�B
%�)���y���h�@����'�c3����l#w+-Ͱ!x�UrQ%�>�M��X�J���d�D:
�߈�Lu�k�<���m/\hw@�|T��+�����B
3f
-V�k�
wqyƈV	VV'
贡d9{<��k̰���U�����;`��r�ҷ�I��
<�T�2A��.k�]���5Bu'˞C�ޛ
+�[m����u*w"\;�;��+O
4tN��^
����OxG	"0˰2K� �^E#A(v��#���I��qs�mJ����%��\�5E��"��7���
��X�7'H"���΃�����:��iTD���f=})��0����:�����(��) L�a)2� ��l�O�4e#�Z`M�� ��DMti)8
[���R F��EBd��|B�7N�c6Ίd��c����(��o=�3s��I�]�Z�%�
��JH�
��
˄a�@`�-��<�/�'����9���z)Y�ږ�.f �eY:����:U�z9��kO'���%�cn���v�[=�5�v�k��a^�\c[�����==�)�~�
��_"��Ⱦ�YB�pej$6yE\�U�鑘�3g��b٧�8�h\K2߽�+������f�d�b�o#�
}������������&{�����zy,O����I�	�
��5��|
I��>�E�}�{E̚-�g)n�
�l�}X�oo������$3���S����k:D7ҿ�Ƶ�_73��F���H���Ut�z�OV��_7��xa�]\���w����g?~��gW?�s��_�����M���/}��E=3���U隤�_�'���7��<��'w��7ᄌ:�v��w����O�o��oϿ~����g���+���������Y��/�8���ӕ��y7S��.��`f`o�q�,�=��9\�^��˗��?�A���P���C~���}��voІ���tO��Y���yC_/_[�3GyQo��_��
=-�������g_�
���^����Po�/�,i{m7~�Z�c�^w�L��W7�?��Y�;����H;����h�Pʮ�i
��%�
V���ۋc�������q���ke^�f�j�l��,O����*z�>-׋=�����%�4�֮�&]��O�l�4t?��|���3��X}1����j�^�����/����%o�^�&#���ϝ���C}���m�r�;��
�M�M�2��Y��ퟶ�~����+���q��r������9�B��3�T��	^:�n���
��"��,��F
.~�͵�[���
?��Î� ����:uHn\]�5��T+n햊�����+7&�O�x�ڿ~�~'��=�F�?�E�������^�]7�����oܡx��e�~��	m|���߾[�Z���=�FeC�c�S�/o}���M
������"��,�O�yn���{O��=����:c�������W��t��ϟ��*��
|��y�����^y���6�Y�dS%��P��
�?�ϛ�x��O����7�}[E�������{���|���w��9����*�=}}�
-�o׾����+����X�b�6�3�����?_�,O�y��w�|}r�Ϟ��歕W��Y1gjol�5>j�����{}��k�w�d���[���ŭ{/��M�Ys�{�
��r�hR]=��|ϮN������q3{�����ds�tL%���3������"�}�üN�1�W��9��A�
������7'w�^zmr畷�M_c�Si[��LM��[W����l��>??~q���z?�o�x�M5��[�
��Z��/m}���]��[�;oO^�,?�<w��)�%w�|1��l/����^��t��_�_*z�W~���Y�ˬ#����/N�qf�o
�H�-I3Ίb�g��c,o�~��?�f|�m�d���i����$��㟿xQ
��+�Ƌ��h�hwr��?������⫝̸-xqH��K�h���ɝ�~n�6_S�{u�{���Z�ow��7yF=��k��)���&{�~.�Vf/�[	?��?�U�&��v���g�����_֓]E�g?���JV��kEβ#/
�ޞ��OJ�M�a�J�[�bD�:
�^�'�,kPR�;9�L�*�h�ve���������t���g�>��eU��%���Z�j���-o!�ٽώ��=�������e*�'�Օ����ڵ�n�|��V�j��wi��=
��C&�Rm9�!�l=���;f
������������]�Dl��T
�~�鷟U�����7�E��
~��;r�C���W�Ro�;�_<����/
-ߟ�����xC��-��g?�#������^��J������c�u�D�U�	)�g��\�7���vava��� �~M�F��+�C��[+�"�>��IGQMHM��L�
�^����e���ؿꈩʓ?9HN�`��Wn�pN~v���r[r�MM��`S휦[�\�˔�
|,y���ȽM.���#�9���������_��$ySUkW
گ�ZG͖�J
-�[t�f��777o<|�j�7hM<I��ΖޝDo��w��;�#�(Dy���
-ֿe�н�W���V��R�S�y��d?��w{��������3��k����G�����o��1Z_xn�ڝ�[[~���W?z��G����?}���~�-z6�v����߿u�~��Q�uō/n:�ny�����C�e�Kw��y��{��^���7����0[�����{
Wh���
�O���WߏW���N�H�&p�\�_U���/m~�yL������{�Ͽ�;��}!
W�/emr����
�i{>��h�
ze��__5���+ٽ��s�/z��3W^���ǯ>������_y������_�z����k�~�ܫ;���y���Ϟ���o���>��{����r˱��n���)����g�}�DŽd�3j����fz�:�fz�4���Z�b�30��&��V�e��C�WGmM��|����l��w;vk�7L��؁
-	�?�����V�yO���~|�jͭ&2�7������U�ڴynS��2�D
�d�<׏�
Sl��9㫥�z�

Ȑ��W/��߽����z�>��]��_����v�Ը��q]V���������F�K�����w���7�q?~?� 7�ϼ�Γ�O�}i{�ޫ�ˎ�#{�w�|!1���Yz�ڧ��V���ߗ�{��ߡ������u��}6�u�u����M{��cC��w�}����q�\���OJ���SZ��ǖA�?x*��ib�t]���~���g��+
��m����S*S��;�z>�8/��/����7�{������������l����;���Ϝ���e7=��?��������(���}���>ݲ�v�ַ��kדW��o^ϻ�~��G/�
�Z{��W����T~�������zu����_8Sm����‡=�\����ś+�.��}�����*[>}w�s���&o�����[�����w����‹��,���˟�>�w����4�*�ߔ]�z�^�A�,�z��___�N�~��Ѕ [...]
��=ZF�}�~������i
-���,�4ZR�w�N�)�ސ���
�����sʻ}}�n�3�����]��O��Ϟ��S��/w_Ǵ�!��A�,�v�wB�|�@���=��^�Ӄ���o'A�|�[I������L
��c�@��v��.k���ۯ��`��Qt/$ys�垂oj�^����C��k��S^��)><�۰�}
->�����3��u�f�w�������	���|�Ŭ�|�ѯE��ռr�
���)��5�Ҝ|���cs���G?$O�yﭏ�J
���~?r>����rw��^c��x�k��o�z���'>�5������>��0�W=���EO@���H|<�m�렡L���?�h|�߮
Wf{���
�5���`�>�����:���!/�~�u�C���Yo9C��{��>
��&����L�"^��_�O����
�D��~�+{��9�T:[�����z�l�����
Щ
z�K��u������ׯF��_�Gf����i��c2
���O��N����_~~3^�ÿI�~�i;�<��ݤf�y�cy{�W
�5�W?�<���遼����~{[f�Ҟ���i�z ��hyU��ߏx�sM/k&'��+��
y��}�B�t���������d��.De�&� u���:h�
o���l�tW�_s'�����
W�f�s�z'�y�(V<��w&�e��ɕ)K�{.u.\9�3κʹp�0뜳�r.
j�s�UN���@뜳�r.
j�s�U΅+�Y�u���t
x�s�UN�|���sκʙ�䃬sκʩO�
p�ӳʩF�3?�ǯ݅̅+W�W���ﴑ����_z��w?���?z���?����͝hk�V�}���
��V����Z��
�ѝW�|~�����~��o���㗏�;z����[o>�7z6��\��sѪzI���G�o�����e~NO�������Wz��96�k�
-K�����/xt�ǯ�_���������߷�k�sw~��/��ݗ�~�㷼����ߐz��Vy]����K�'�ڌފ>�t3��~�{
�����Vע�A������_���;:l�~��G�:|��_S!T?�}��µ�����z���/�;���O�ͫ��'�vn\�ٹ~ck��MyQ�՛;�[�7�omG[WoN�oN�#n�l޼ml_�yks�
�y����7�O��gn=ݺq�^ᅫ��y����?ܒ������~񦺎�}���/����Ovn]�����s�3�*'�Y^���C`����l͉�*O'�7���u�� �t
 �4�m�'����'�
4���!�
A��[� �j@��'�A#8��RSܖ5��aT`=����CY� ��o{m2��t��w'
2ڛHG�]8��j:��g��T`�B۝t` H4�C��"l*�I��ES
������Y����N��v��:dw
-�N:6t�*��
��X��b�]9ﹶ+p�I���W��"9
�E�菩�U��u��vt8e���]�u'
 菮�%�$�IFGdM���k/�%n3��Ik�y�����p�C����"�`T٧C�)v�\��*t�1\�nY�����	��\0�t��R�b,��Q8��@P1�
�i��Z�i�.���*|�k?c<m�i�;�0A\Ma�F���(,��ZdW,
�K'
&:"y
�0I�d̖�VuJ{�/e;�K�
t*�/�,�4��f��CZ	����B�	�\$i�Y�
Ͷ|�<>�_����
-������ԞL�-tH��
2�dړK'
):�&J�p�$�͘lss#Qa�•����M�@k<�
��Y.�t�I�W�1�$Y��l���!�C6�C��xKJ78:ۚ�8k8��M�&>
-��=�<�ZP�ϠɂIW�0
tZ��Ү[��J��Hb 
�C"����01��t�	
�-y�d�$H"�M�mb5�Q[k4��Í�z�&&��\�頓��8L�����a�Z�	�C&S
� �Δ�L�M
'Db����BMV�5>H+�]�����f�N�.�/9���T�L�X�0���-�w�A,��pJ9dl����I�
��=
�Lb�����g
-PkJ=��d
K?�~����$�s���(�%�$Uh�o;L"$%
�C"]�i21�,�L��@gM{8���
�~k6c2��,�.NW�w.d�ń&&q��RR
�x'
2�%��{�X$)ۤ���6����!k¡}X��!=됶q��θ2�{`�d
��D�c����h�H1�ט(lR�O��z�x�w&*i�$� L�U2q���6b�TmB$q�>-�,b
�4L쐡uȮ��eW_O:jtpΔx��v�0�
��Fn#���V���~��l6{��RW��VW�G���}�#lB��r��LR
��Lc	��NB���%������6.���
t�/˵�s쐵��OS�,"��	�Lq<�	�p��K�K'
5:���K���qܗP�c�)�����p{�
֕�C<����C]�'WVVW�W�v<cb.����t�%X:	��d�ĻSuٶ��H""�b��
�!4Q�&��ᒙ.E
-7�)k�J\�
-
	�B�I�&���������l!W�t��Dd2`2\��9��,�/��JR�K��˶�)یC�EH¢�C�X�qHG;d�
��Js��Ch�$}��
��U��҄�TI�@�0
�	Il7e62Z��
-�Vk�j��Vʹ�ot��=jQ��}�zd<&S<6�
��xs�{�l	� tJ��'n3A��i&�Cz\�Eb�>[d8t
�H�,�rH�hJ9�Vn���X:
*hN膹��e׀�$e�A���4"��u\�94e��H6�L�|;-����l�Θnhj�K�
T�ru�3S�e�a�8�,��/��Efw� ~G�DI*7K�
-7�
����ݸ^���"P#��@Rf#����p�#���e��懩��Bp@�#�)2Y01��LL'M�\����Q�v�.ϔRPⲍ�$U;DY���C�9�x-�:�,��4$2�E�t[W\�钋%.ܲ[UO:pt0A)�q�@q�f�F��o at 8R6S��Z->_1p3���^�
U
-��Z��l��Gl"4
G�u�Kz��`�)��rP��Y�4�"�l�yWm�!d#&���@,�wHS
R��-Qlb�(0Q�F��PM����9���xKP�A�B�Q�N�
$�

��p�n�
��#�Y$���t9u��e�aD
T���N�����t�Lg�xn�
T�J�c�|�m.ۆܻƪj�m�-E�!���
2��
�_
-L��\��<],�C*E=��

D���^ƭ�'Ja���"Pn ~#�I)�U
}>���q�G>;ߔ�:��qo��K2]b���R����7��Ur�qݖ�Ҙ�D%*ۈI#jq
��A ����
��(��CT�ƥqIUn��@�K�~�8�g�T2u�nN��{G�S�$5Mb�Ea����R��:�?P�Gj䥿�'	�tT?8h�Q�Ǿc0E���O��X2KK�T���]g��Ž�xu�0)�%"��H��"��!1��q���<�r�*�zK撪��t��x���C
�!�<+G%�ӡ:1PRe M���I��~�l��:
�X�3�^��0�B�[�lǮ���\
��K��T��JAP	*Q���i���uZQ�m9Z��mtb�+�EԌG�g��!-vH[
�c�(o�
.����r���ƒS��w��t� h�r<�.*�)
��@P�2��w˃�L��(d�)���hf�����R/ۯ��#�E��P���K+�tAh����@%�\e�4��LIAiH��l�(&�z-�\�� [...]
-P�'���`Iqi��MG-�1ow��@%�de�d�6�}�Pk(Iٶ�����|A��n�2K��i��;��p-b
�	�t)����w�Vǂ%:ٗ8T��]����*��F����X͔��8�����ٍ��L����RPZm]	*0�Y����:w��9�&���
��
T��u[D��2
�^�����r�˶�1�Ӕ)�M���"I;�uH'�	q�g
-��q�n�(�N8��A���/�'vUig21�J\R�N��1M��I=Bϕh�D~j6��klsHK��6؄Mr
�N�n����
E�Q��,�����r�x*IY����DPZ^�	J�Q�ʶ�1���WO�w�"��
��9DY��źr��c�ז�p�Ѕ
�9�K,NjJ
�!͔�"�9�'���]��l*Ӵ��,�&͈L!�)�A@
�f��� i�v�t�(�K���JA�����U�J�;;n3!��
C�
T�6TL
-	I�h�5�
rHC��C��G6�C�=E&*݈KCU�){��Pa�nv�uל��C���m�?��Į��Ѣ���L��4*��Q�t�oA����f��Z�ݨզT���z��W(4�ڪ�(ér��KC�.)&�l�ۓ�V8�}�]{|
��J��k��8�=��x������4�E�J�j��N�J6�9����T���"�_���
��=�0Q�F�h)�
��L����m�~�T�IG���d!wb�D��6-*�+]=M�2p����\��!���mܕHU��ɑ�
ӕ 5*�xA@`
-�ۺ�‹��t4UZ�����x�7�

O�&�d	��J����mqs��
�x0ZQ3��a
����;�m7�)����s����n}ťA7
�����ͽ:�*ٜ��
��\)*%[
d
WՁè?\^v�h�gǙ�]���n�݈ڌҖ�)�Q=H\�vT1�C�R��4�ƹ���MFz��A%ɥ�X[�ZܲhU�m%jݩ�q٦�KT���T���&�IY�I`j��!O�$��Bw��Åۘ
-7��9+Kp4ϒ��w�+ou�MᲨ���~�
�%��:�v�hu�u���D5Q�t�S5��f�Y���
���b������p��C��{�l2J�,�t��3�����*v�CS���R7�
-J����bR'l�������

2�"i��v	5aR\�"��H�Ե�[�w��
�'�4�b����
-�������\�Կ,u�wg��W`��v�9єJ��}q��t3�Wz�Ԣ&^+�b:�cbRLKK�2Y2�s������t��J��'*I��7Ѣu��F17���n3��"ܼkT�E�{Y�:D��a�	m5W
-z��V�,-Q�FKK�\��d�f=M%p	�K���X.�-S˜V��c�
���(�u�I�7n��j��\����&�*���Q4��&���b�L�X�T
��7�R0tV��+��JPY�R���-n�*Q�ny���pu�5�lk�P��ݻ�-RK,b
b�	!�U%,
�*ܖ��	�T�ͳ*qϼ"
<Z�]c��-+.
U(P�*�u�qd8!u��p�ru&����jl;v��NY��F�%��u�oN��h�kP��T�RT���o|2G�^w�fBD��)����65�.��"ɥ?�C�q��C�t#.)��;�~7VX�6wo�B]nީ�&KrfI�@%hne�$S��"��
x�r+����9��I-�7i9���.]�R^�ďY4?�~�lG����T-HM�x�
.Q)8�#W�AA��
-l
T��_�L/����
���ej&Da�U&	:�^@e[��I쐚q����,�N␚�nM�.��T��n�x�
�/��ګ�R�8T��Qi*�J�X��T��w�KaoS�N�D�k*��x1��L\��mR,.V0q1(����!u(F��K��uiP���%msP	:~��$;���jDg̓��M�WP
���4Qj��M����q�x�!�Un
�.,��-�f��HO��F��NE����9��_���;�"�^D
�ԝ��
Ձ��
u���vM��&fS�2�ŋ����ŋ�.�i��mWo�m*	Kj���+
��Q�l�+K�95Y�xsx��\P	:f*�#��.�m�S���n�f �{�K`��
��Z�Z%��avȥ�!5rH�֦�BSc)�p
�L�xe�[x���
5�������V����	�J7�*P�w�H���e �ԫը7��.WM��<5]I�B�m�lV��u�B�]�{xA�
�K��2msP	:f�T����CZxM�^�%[@̈́��%4�Ztm/Z�Tgs���E.�j
U�5�tl�i���A@�[�v�.
x
m߈��JP	�[�T�O7���^D𺁚*El�@��N���T��w
�2��TiwQ�<х����A<�b4�5:Q[k3�Ԅ�6;��h�d)
u������:���,�v��0��^8�-��Mq��]J-vH�^#�\�@�\��"�!uvH�
b��Q�%*��d�N�E�NH9T��S	��冺�7�
�X��~'�:PAI:x�j��얘m���A�L̥Ƣ�*�v������{{.����m.�������x|��	C�&PO͒Ե9����n�P����{ר7k��"I�6�E
�\��.V��@QX
-���pk�p�^{e�Ў�:���J�|J��KM��B%�[��'�‡t��*PY���S
H{��TҪ�F��^4*4ߢ�F�gQ�`��괶ĥ`��j���� ����s�lw ��cVB%^V�n�d��ǵ
D�ag/u�X�m�
u��m��.�k�9�wK�M��!��I�[�N-u�<Y�����:��;@��&��
���?z�D��v�����b�K��U�t�����E�	~(m��$\�/j,5��xi���Wچ��
�sͶ����
-���4�*�����M�
�Q�u[���ك��6j�S5H��8�E�M�
��Yh�Ug,��-���èu�����pl�*As,C%�]�_t���ҧƬRoYY.
d-'e`�Zӆ[�|qA��^��r�E]�
�4��c�V�(,��s���r��`�=o���mn���t�3,���
�tnnn�XxKtRi��=�m�m��EW�}'g��eaV�,\4`��Ej�v�;�
-�NЗ�RأS}||B��CZ�qz�T��PET��Rz�
�pԝ�5�����e}�/q��v�״�e]�0��>QH�%e:U
-�6�O��s�&k�sr/<P	*Oy*ѝY���j^c��ZݐON({(]6�b�E.�d���"�!����촹��m����N�׸���T��\�J�-Ͳ5�Bj�)�u�r�6��qJ�o)�;w.c9��s�i�q1X�/��R��N&KA�gؕ��s��r�Ig��
�\*��tG�x�<^�Q��
��*�h[x���
j¤�b�X���tT�
-��.��T�u��УvBoe
��t�����+�ͩ�T�{�qoQ!t�n�pt2��P��6i�D��K2O�[\�+��ӂ�:6]�V�\mԪ��*y��<���H<Ǖ -,�"T�JR�Jj�D��B��I����9
3�S�H�F�U�n��0ia��b��2�>7?q�Ӡ�R��f��
�Kr�O�ܓ���
-*As��J�ݝVK�zY��R�c.���D������qb����s%W�vK��q^m���d�͞�rp(iu%�I���|GP	:~��T�O=n�_�x-�e���	�9G]�R���u��LگEҕ7�j���[��d��&L�
O�
o�7� P	�S��
X*q{���ֻ1
�P\Pe����S�:Yn�J��ro�.se�_��}A��w`�Te�ч�4�A�<�y�Ѡ;�э��T2�w��ΰ4�
d�D�Ӽ����J���=5����E�R��t���x	�j��!m��J�"�0
��
�(D���>�KU裟*U��Q?

i���ɨ���r�}���멧��XN}�s�z����mW�Su`��=ǧi�}�
U�m�4
E�T��Q�J����z��Dܾ�-]�5���*3%F������C
-,r.K'�K�P�=
-KUU�I���bQ7��.���MxzC9��͡
*�X*�t{��
�Uؤ�]SQ��l��\(-$��Y-+�^B%�����"y���`+�)�u�s���O��O�J��+C%Zy
�
�JO�	���	��D'�&5�k�K)��?WP��-�n�C.��Rm�i�	� ir�M��Fmg�*�ͫ\*%�	:��E<W�>AH���ZKYnѵ�v��� ,��SB���E�>:�i�)4u���A�a�+A��%P	*QET�tG.��a����&��t�a��J��H3[Ēi��x
�p�)��̀
-A�7�&7-����Zܖm�P	�g1�v
*�C����=
-:�����Z�Ζ���Ă8�SZ/�E�#����%ݡ�̞�cKAG{��
{���DHTj�;��J�1�Pi7�D7
o����MPHP`��@
-
:w�PS���L�pI�t�?5�E���K
"mn�����Nh�¦���3K��:/��CvA%h.�������0�
�t��	T!��4dg��<U2kJ�
-d3[�WZ�ےj�nQ\�

}��z�:M���p并��O�ƠT�rT��
���J#���NK�@�n��OCO��n��������
1�J
rA
�
-�F�Z�e%ZX�:�q��x
i�P�*A�-��d�P�9���
���<+�
*ktS֪�܅s
ܛ�N{j���H1���ɒ�
���Nm��ݧJ��M�<ZM�	�
�*M�~ �R�+��Q��������U�U�
S�]b�,�KZ	O�h����
�.$�%:�GTjH�[/��:C��1ݟUSi*As�
�h)�?Ƣ�[
�QGD%S��T������.S��?���U�.�]ZZ�^U<�f��%庑�'�ǚ�JPY*�R����v����(�E��^���[�h,b�w���u�v�"��P�D���N4�
{�J��4�2Tk*�Rn��Dvk�=A��nI!(T��PIw�L����J&LN�BSI{�Yop%����T�q at T*�A%�9T*����'�ǭ�Ԡ����h궋���ls؟E��:��$�[]7�[�ˢ�	{��
�"�dOT�gY�J�
�R�����D)⍯m�����mS.2�.$�s;�[�;�<�t��z����%�J�I���R�+A�O4ہ�RT�ʐK���R at T��W>f.+�
E�M`�h�$+E��H�!�Cj�ɭ��ku����4�m��JP	�[%T�4�ږJ
�r�S��
�h�BP�:��=�&f�\�Eqn��*y��;4� U at T���'�#C�T�JQ�J��҈��UT�w+h7i?�����	��ѢR�{7�E�CΟ��
��u�����v��
-K���q���
܃�4�*�5��ݎ�RKnN�CT��ĥˋ��;��T�c9�;ݢྐྵ����B%�xCY=l&�	�h�RT��Q�J;�J��^ym�B����=nUX�
xr�O�t0�إ�
�~ir3�:
�G{��GD�5C�
P	�c9T�X*D�V��D�}�R���/_L��:�����V�z��?��/��R� ׂܟ��eC�	���
�&�J!S)
���'
-L%�&(*i�,�9�E�C�"��MK�uچW��6�A�T
-A%�LȥR�R)b*��J�2�M�j��:T2
�}Y��I��)s~�Vs/�JPo
os%H��k*Ae�K%ޥ*����a�F���/�^K�dM����;�|�J���[��U�,��s�-�Z�4�JQ�n��
�h)�Z�B%ނG�����
w��<����g�q�˹��[0�`�ަ���Ԕ�tͅJ�1���,���
��.Q�N\�
w-E%��ה�g�?��{�/^��D�fC�Iё�4�Ơ4�JS��P��Tj�Bn�m�$퉅���
�=��I�.��r�wY*����b��c(*Q-�p�T��9Si*A�)O�����R����I)*�O����k��s��J�t���^��ޔ#}D�^�R�
4��9U�JQB%����RQT����{��J�c�+���R˹��.������qB�>���*�*E�J�:
V��J|���	�e;�Sy*��"ɖ v�B�J�@�%T� ��yW�Jt�P��*����z�J��*�\��!���9�4�	:�Tg*鮹P)��2UD�0��R%*$z���m璃>8�����P�rU��ӯkh*�:	�BP	�{�4r�D��D [...]
-�Zi*�A%�|�����T��aY����qg��_�S�r��MP	:#�R��LS�pQ�t�T��3T�;}e����T��Q)����R���4��a�#��4�Tj�A%��h
-��
���^�J%�^�J�k*Aek:��^��ҥ㤒z�<��^ *AgHS�D����҅C����J��Q�
*A'�=���UH�
GO�
�,���
��-�E�F�S�P���yK����J�.d���k*A'�Y�Dw?IS�:�h�t�
�R�F70����٨$��*���_��J=��{T�NZ�R�������RI9$C�:��M�N�z�Jշ�;,����\�t�/*�a��J�EG%吿�5��%�
-
*AgW�����
b��R���?
�r����_*���ӦP���4�e��%���eP	:�:���ݬ���G�[�v�t�u$TJ���A�CRQX��?���JS*A�c�Ҭ��?�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�y*AP�� �+P	�J�A^�JT�@%�
-T���*A�W��.P	��� �t�J��A�
T� �@%*]�T����I�2�@��9�cͭ��T��%�G���'Ч4��r��T����S�?
-��i,��:d�OU��U�Q�4��ͥ*g�J��l6��6Ч#����pT:+�ͧ*g�JGm.��P�擏���?����As��٤�q�˨�:�*#�'w��
*
�%:��΂*g�J�pȓB�c3h?AJ��AJ�{I��/��S�Cy`۔0r�
�r��4��
̤Y�vBCwr�!&�
-���^F��[9�T�u(�~���9U��PiOkM�Yx��`1���ƛ�v���q?���tF�t�L&l
�*g�J{�k��85Y��
�c�
c��a�z��O��1F^���H�=��0#���;����U����Twy�5�.�Ϧ{���4uT39l_����	�Utƨ4�X�w(���Ǵ
t U�J^{y+�q��NsL�r��(�y�@O����	̥t��4e0��̔���f��;��V�3I�'9sy\U�>��M���'=�G(�X:@*�a{zjܧf7�:��r:3T��23
��wZ
�=�c�:��pt:�`
4������
E�^Yk�

(����2
{r��q���<��)l�8O���((7��w{6������<�PN
�������n�q=f��V�@�.�9��.��E��8��GI�,�#�S'��j�sQ��j���O*��w|���h�e~(���F��Q��ˌ�w�h즍h�:�wsX��`T�Jz�������\o9�a/M���-��M'ӱ^R�(��e�T�â��r4[�
k�Rf��]�;�<��`0S8JFa˘���
_�m|�wc�̓б����G�2TjT��+q�q�c,73�l�!�Ֆ�4�$���M0��?���\qXQ�
T *7�9q�OMpT�0�T�6����
e�c�q����M�\���<I
�:�Ny0*sF��Z�S��H���G�����^��flVq�TL�
��g�|Uu�
sŤ�ִ@W
M
{a��ȗP�s�A*
�e��sm��)3x3���\��s�
쿯�A�u���:�h��I�x�sD��bB%ua�S:�J�˺�z��U��e3fb3�#S
K,v���)�
���t6�y�=�JAr�
/��	��d���2)�ԋl�3�6��=�]1I���4[n>��sX��A5�5�
���(�ai�R��:篌���
SE��F��"�l�f�d�+�
�����J����Tޓ��N�(
�l�)�y�#��Tv۫&8�~���|Riw�������R�e�C�(�a��7sAw
����Y�I�S~���ϡUv0�ʼP)
-
*�di7�֓񗲗$�-�+I��D���%ɗ�i�˴Ǵ����t��=T<^reWվ
6�:�"O�ݸ.�
0���I%
-J�f-Y��ʼc2��
�3z��tG9t�kZiZ��W6�~�����5/Ѩ���s�J�
-����ot>J�K'K��5�qVb�����~1�M�,1Y�L9���
r��_mIDj�(�
�8�ݞ�\��&���VXP�
�����1��Q�˶݂udzRq��V�2��P9��6��K���5�P�y#�
�
�>5%!?9�
�(TF4��8�Wz��$�*)��v�?x�
]��,�
�\ �����H#V3/��Ⱥ�҉]fL���u����0��b$��d~$av�\
�(�lܓ$���ƽ:sr;"0���&����
�
�"�2�"ˌ�)��6R�
��tGc
_x�����x/푕��i�o�(t�ȳi�hTN?���Ja�M7�ٽ����\�T�'D2���Ʋ�q�M��hb3�d&A2��0�_�SU��+�\��J�5�氾�#����@�:x/%�Z6�M�ߜ얪	�ɤ)[$U�Q��xw��dn�R)5��"��2m�2�3�ֻ�k2�	�ڦ LGĥ����ts�1KjN��'�}3G���L�JGc�`TN;�aB%>��L�R�aIE��'H�؊O�K���%�Ҷ�Ը�*Z��P��V�YR��3�[��U���K��ϋ��\Um�j�:�q�{:�&�A�Rq'P�
��]>��Ʀ�����"�w|�J�h���;MJ#)C$�2mw(빡,�MO��
� m�aaA7�wY
�*�
Y��X�Τc7?9�{9
c4<>T4*��J͖�Ұ��6'�Q2�Q��
-	�/A�������%IRl��P�
��WM�d����e�d�c���k�T�%�U�K�5�*��:����8��8g/�|�u��鍳�Sl&�|�L�����(p�4���m�Hr��L�P��
_�_����7���-�a�¸fZ��Xd3�
cT�#�g�d<��|P�
D'
�,��?�{���JuK�ƀ��7'7�%5]�h����4��]d.U�iiSE�iFd6���f�6��$}Y�Hi�2y�t��T8>S=��D44Q
�
f��
�o~A{6�&��`�.Ux�T|%�'H�B�e�Jt���n�]0�!��2k=�~ˤ�/J�.��;��n�mWIݛXD�]�&���n:N�b�
�P�ݏJ��{sD'�L��hd_�i�R]��P)VTZ
��66o�K�Z*A��C�c/c.m-6�I��F�X�FäK��L����i����t�K�0�]��*zE{!)WU;Eu���t�I���J�݆=��Mg7OM`c���&L������R�w��L�����"��Y���ʩ���m��d�J)�f���
��)��M2�'����D�h<�4t��i
.�ݢhz2�O=�ݾ�R
�ƣv��9�
-�Z�����$I�d{q�4@"s����L��7;J�/�%a��>�)Ki�i�����������WYe����unI�iUu���@X�umc�Jv�/ٸH	�N܋j�Tr�i�	ӌn>�Du��RK��HV�3�$=�z8y4�>�4�e��e:�
ۘ"�
_j�M3t�)�>��j�.�]��u:u��X��K��d�d\ٻ)yd��G@�F�c�
ƌ��1�G���0*��J�6SiYQi-n��y2�
Y����/]�\����<bk��$3r硗UgLS���el2�%�rgG�`�_�����.S�\���8K}�6�i웖Oh	nqu��	{,aod�[>�%��;`ʛ����)T��J]�M`*�۟���N�3�$I<�z4����Hz<����nj�m�����t3v�sq]ڻ;������eM�s�'����B�x0[4��hd��d�5�n*u�JQw9��b��f$�q}��l�H��^�M�]l.ɛ�,6�
-�x&{~&��K�=ɖ�4��f�2��d];,�
�ƖK�sWYWiָ�4)�
���U�PG9�}�"h���[�t�uܓ���^PX2��A���I
qʩ�������q�6�ޗ%�t��BR��s,�u,�w-g����)��3�i�mӛ��;X��{mK�K{'}ξ��J3ʴ�mF
'G�v�|+�����:�"��a�d���ˈYH�/��QI٭j��	{�J�(��Vi���o�|��Ms\�� ��Eɒ�R� I�K�$9�9���]�u�v�VҥN��g�21�B�$Hʏ�r'�Q�7
Knd�y�c�T�r�$�n����_XU�TUK��)�K�c�Y��T�I�
w�q:�Iv���AR�)�F!�9a��j*�C,���c�I��yR3�\d�Z�Eq=�(m�Nz(��P�l30�	S�gF�imc�T\�u�g
����f��¹;��+|s�ܘq����t�B2��v�9�l,z=q�N���N�����f6
��Ҿqu_�R�P��TR�
���a�[k��U�Wo�{����E��<e��@R�boI�dS�z�m����I}K�%Y�|�lf�$
�ɕ;O�L�Sf�t��T��
�I���0WU;Q��b'�5u��@�0�t���밧��/�	���j������'���C%��}�\��'���L���3H��4��5�i�X*���P��Pf,��M�چ�dG��ĶIt��й
p?�f��=Y89� 	�s�3u^�1)Y=�0�Nv�Tt
��
b���ir
Ѩ�ۑh�t2��hTN�.:T�5�J�;���aw%�{QS���;���_���dI\�i"��(Q����#�)�T=�Ɠ���oꛜ-�i�3v�HByL�GU��$��R�g��u�q_��+�\��	}���FO���3�$�5�&��@��:?Q��ž�{7Ut����ԓ>j!�*e���$�;�TR�T
-�J����c9:��g'hD'�iUq4�f8l��k��ƒi$�i�-�L�
�����mN�&k�a���tu;a��K��[O�$
�
�)o$���w��*��R�}Hr'�P���ٝ��2����MOr�p{���(

�qa4f�t�R��PTR��
D�h؏�˱�,
��h�߱��	�"I�%ۋ�H$e!�;�-�����L�j��8M�D.#�1�$A�-���DI'O2��%��u�hʴ���
FEU5簎 �氞�sSs�ƙ�[����L�t�)�&�)6��Trs�ng��l�r���ަl<��:�TRq�������s��D�h���=z��J�^����K[�G8�C�L�6���Ii!�G�&C�\A����t�+����6�;��I�DJ����U�v3��}ɢ�=�t2NRq���;&�>��XG��F��pnv1q�;ΰfݘ��SD��Y*u��~�
�KQ��di-����
�
�IT���/����&'IvgG�
�Bu���eW�J�L}��"hb2ɜ�a�$�rN��
�tBӥ��ȵ�
�
�j]���
֔y��a��d����[O���{���7�{�&p���L��BE�STx�L�1T��G��UF|N����w�J���$]ŹH�Ѥ�"��QcI��e��b�$�Ƕ!6�
������n�.��
L3r���NO
���$l8�kcM���ˉ|7W
-���Ϩ�UO�>Mǩ8�REk.K���E#9��hC��
�f0�a��c���`TN1��]�R8
�ΰ;��
-K�q,u��hd��Yi"%@���Y�*u���O�^���@��x�9ҠɒI
f
���pi|�T4��I��
�LU��A
�yh��$�6�
h��ӗ�|͍�;�]�H&����^NU�.lEZ?���R*5*5{D�`y<�
-Ǜ|�\���
-U<���e��e�etAѨh(�`:�W<|��3hR�&���tu)��w�p�{��4l�����!����m�����[+
�;,9�X�t
���2a�G��t)�.��}jި&J
�&��b�ᣡA�tR����H�K�ų%��O+��L)��*
��qwy%
��wm�������(�$k/��|B�b_qj��Qq�G��i�)8ѳ��	�,�i0�
{��l7���;�k�Ӽ�lqؙ�� }�f�HH�#�ƾ�`�T�g�+���%��sQ�	�EAj���Q��d�Ttyz"wZ��4T�3�":;���91R�:6
��#��$���q$��e���Y&m��&�lJ�&�t��

�)硧\��9dj at W7eaY)�
��Y�cUxG2�keo�%�X%���F�%��f��_[*��ORP����������шL4��6m*�iCi�y����;��+?uTR��NTR~W/�cD�v4�-��C=�2��f8a�|������2�j�ϕ:�2>��ܹRK|F.�
�h23�р�v��^z
�=�u\צ�II
U<k�$erIx�`߶GM�S�u^&�N�ö��Z��� ��lv3}ԍ)"g㒱��R=������tv�N���)������$�;��d�d�3]� [...]
�<��nU�&��
��
Դ�*�e�\+�K��)�I�\�N&�<��2����}�Ѡb����F�`�X�DΩw´Pz�ܘGA���̖�d�Q9}TZ��R�$��Z���	��A�e,�;�}N����"I�Ք�]�dx$I�c�|[����l9��i����XL
�I��咞�g��α_��+t������
��b"�s����$��}�e���=	���aSQr�dʀIW�Ee�>v���N5�����u��|�O�'7�?Cs���4I
I_Aϑz�������
e�m��fm�7��*���9�tܕ�Ծ��$P�K\�Uܼ�L�����ʲI�N�*�.���S�J�+������Tl3�X>}�`�$�d��g4���l0L4��5�0� �sǂ�%��O�._����TT
-����Qoiy�ҋ’z��ui
�v�]j>�$�dMM$m.e-1�X�V�RfII��8g����N)4q~$�1�T�N�љ0��6#J�.���$w�!J�=$K�֨4�N��8׳q�:Uʆ=wxi����N��7�
s
|3sI�rڨ$*5�Jrvb
�M��9
��'�֫�$
Ѥ�@�i�
-�"�
���ʎ�LzY��F���g�ߙ�N�)��Х;�.���:�EW�$����@ga��)s
-N݊L�XI���JZ�Ў�3g�eJQ&�%����R
���B� ���ѐ`
MD&��<����yj��T��F6[�~�vGM�K���U*qL[I�4`$Q��~�2�q��z�#�,v�uSQ����hl3Α�c�U���h�D�Q�K��u�d�=�K�ya:nuzw���
$�nUm;�n�0�8;�������
{�Y��1�-��ں��)S�L͘�&�ț�K� �**]r�T*�:��D��?�9f?
��f�I2�]��I��@3^��`�eZz(�ZƸF
E?`]�N��-+���k���1N�K�N�^\J�a�ޥ��pr#���R�7��~�l� �j���Ĩ7ZZ�� �d̵��%=]�`��gK��?q�i(���J��T4���l�h&�h�h,-���n4\,�yH,��Q9T�����\CQ�EG[�>�3|�����bdEv!v�JL�$�_��e۴"�G5m-c+J���š�$e6���9h2ɔ���DR��	S��
*{iwI�N#��t�.KǬ�2I��'E�����,Ia���
rX݉s#���z�������EA���	��~�Y�L�:��09��
-n�Q�LO9��QGM��V��'�@���zYNZ�{����*�gI�W�bN�8�2�3
�P���&?|Y���ق�-`J
-�t|
-���%��
��߲4�ˆ�Tԅ)Z��k��pK�s�&�!K*�\r'���5���>o���Y�즠$L
-��ٻL�#<S�r4��
s�L
-�v#�+��J��C��M�R�-Ms�$5S
-�ђ�I#}.I�J=2�nF��(Y6u��D�08_��t�ν��Rb71��I���X��#;��#��r#��Jv�R���V*ӽu
e���3)YNʯ=�=�
�p��NIrX���w��]�7wOr��@�̖��Ɠzv��>�$9�T
-��ɉ�U:�G-�-�1nK����TZwl�uS���
-I��Lcơ�
_f��]StM���^V]Qd�4C��I��in`��SŤu�’�U��ދ�oF��sm���1����*\Z�L�ÒY�r�/J O<P�h�i��s���;��+&**}
&�
�z=�%�SD��*��%NTj����Fj��.Ү
8��qY�ׇ,��I�&Mɕ��	��[�X�
ו���Y���4��d�M؛�a�>�F�0Qf�Ę�R��w�X��>Ť��w'L������-��
��Lǹ��r����Lg�Lrk4uQ��
����u
-gC�;c��KnO�STR&����[��"]�C"m:�B�2xD�\�Qc��S�d���T�T�)���k���%�
;�i������sfW��of�0]�jjca�I¼ߣ3��E4��s� {�̗hv@�"jT
�$��b�� �X�xKv5�M�G���
`�wn4�QڍF�
ZK�1�+A*
��p��kN�
�W�\�i��FQ����<��	�ԅ*��C�\�=U
2{՛�;��
J:wT�9H�ۋܥ�%�JL��Z��5S����ʹ��c
��ʏ�H��Ep�G
	���^������t�(�ȔUӛ
���L���nz
*�T����0��2q.�0I���W=5A=[v���IyA6���Gu�[Pȥ���Н>*�K�*��A<�����p=�3"����ܙ/��hD�sg�D}Zz�"���)�42Cِ�4}�g�S×���+�f�lAg:
z�$�뜍�;�Υ�Nú{��;��)��2�Q&
-)�&w��sz�N('��������b�Ґ�KY,��VG�y_
-0�6[�](c�F��F�����15oT�)
����%jj
-���7񢤣�$�F�P���Si��F[�U)���
¨C�d�$3�ш��2��E�5�I�uI�
�,�D��%������2ْ��mfMF
c���X�)��I9K�F�0��(\j��\7X��=]:�
�5j�yg��9L��� Hj����~+��E�Z#�<�r�����V��Z<e�
��K�)
-�ϧpi�U{��D�}��
-R�9��u7�!խ;ei,�@J7���N�2Uc��\�e�����[�۴y�]�)��;�+�����`Nj�wn�(-��I*$K��U
-6w�0����=����}���&��*S.q&^�[�h~�{�G�!_
-Hw3
�%������h�{E��FùI�@ȴ��pIM��Ҍ%���0�Iv
O�J�2T���!�'z��;
(���m��yUR/up��f��D�R�ʴ�,��\
���Vm�!��n�Z�N�:��H��8��#O�4��f�U�G�úĥ�p��H���qt�<>M-(e����C���u����尢8��:�_u�^K��$�'���Ҕɀ�'`2}�N���.���K�K����RI1I�
-mw�P���}���RUe���*N
I4Ir��X&Y�2��K_C�tU�6-_Ag�c;���NCAI�6gQi7��^�NSu��,�<Xb$�e�
�A(
*}#�n�?U�>9%󵮾�=w���MP.V�x�\ҙ��Vz�D/{g�`{�Ѱ�0�������hD�Q>�L�h$�l4��\��6�m⒁t�����1?���J�2n�xkxK�s�s�8T�
D\���^�D�fL���,��6�d)�"
�?jg%F�\���C��e:Ej����a
&ʊ\��
-�#��#.u��E߆�����
-*���
S>�Mmr�L�p�d�

endstream
endobj
319 0 obj
<</Length 65536>>stream
-%AI12_CompressedDatax���r%�u&����p�4��L �R�1ܼ�=GR+Ԓ�>������U,�X��O�o�
6/]%
+\��jr�XX�[����~�ͫ�7w��~5��]�wwv}�pw���|�����㇇{~�_�tg¾�I�_�o󉿻��ps��g;�fo��%���?����������������������_�������q�����{b�q;�37�~�
�p��OW>���
�8����won�}��w|�{�Ɲ��o�O7�����~7X��a������m?���W��
C�S?Z���߽�����ï��^_�pvw{w��g�����~q�=��������ݟw�[�eu��ݻ�z�����ՇW���7��������O�7���G�_^_��~���N���^��^c��^=���9���oon������_c������o?�yw�Ώ÷_��'�\?<`��\N��/���Y��S����믯��2�R���;�߽{u�G^.�:�~��f [...]
Ï�4���{s}������������,��~su���h�����X��%�������~��7w��w|G�s1p��������!bV���f�7ݙ��]��V�WX��o��y��W�q�̔H��o�,�.�dX:�1f��d��~��!��`���|�� ���p�.O	���+�����c�x����-��� h�
��������|��?�������x�p�����M����W���'�on���͇��{|}r�������������'�|���>���֝�v��*�r%w;�z}sj�����O��s��Wr�����rewr�.�^]z=_z�n�ιY�s3��Nnߝܥs�ҹw�s��s�ҫ|L�~L�~\N�N>�羹������7x���ט����
Ň�פ�����~8yu�x��\���ݛ��b��]�noN^߽�������7�d'�
�����=���������`~���C���y�q9�����w'o?�w�����7�]�V7���۫�?��r�>�O� [...]
W
-0�duuZ��W��I�"r��k�iK�
ݝ�����?������}9�Ǔ�W���ͅ�f�?���H�E
�
-��x���X�g�o7¿��z���d{r	��Ӎ�
�mw���x���_?�-����x��''���x�5����r8�"]��ǫ[�1�ܼ���������	��@�Xu�љh���
n�n��|��	��V0�����7_�?��䴸}�N�~{��ծ3�?;�nޙ)�\�����b�'�׷�xָ����������;�P�|�M��7?�����'�����4��b�J�
�~�����ۏ����>����ww�O��������?��?�a����[`��	��t~y�����y������y�|M�9��o�gW��"�n^�
��~~���<���z���Y����߼�El���������_��‐���7�����"�
8
-`׻���|�3h��=A̟���䜅������ٛli�w;�G����W�����x�i?������
�|w�GNڛ�Eu|�����W/�>��M�����<�υJ~�N�=�5���|x����_Q<����� ҷO����;�c�*�Ӌw���{�ڌ�g������}��?ں�`Xn�����;r� 
�`W}����z�=wo�����W�e���o�zJ�Dz��Qe�����������ϕ��o���O���~vw F���?���?tP{�Ggv���>}Љ�I�qH
-���b���4hz�>u����N��w����u��y2ʘ�����
-�ﳥC�>��|.��1��n����������pq�<��̙=�ܙ?��Y<��N�����.�.��ssnχsw����p
ϧ������������Ea.���]�
1^��(����?��G����
��c��G��Sm�W]�q�!�8��x�g�<^�˩��d'7�i��D���t�Φ��b�<�Oͩ=
Nݩ?
O�i<�NOO�g�������?��=
w���0
N�4��E����5>\�I5���
�
[�G��!�p:
���|�.�h�Y78�]p�M��
����]b���y�G|�?��a_�˱�F3�q���q
c
��t<�g����2����c!�)��C8��_���Gm
��������q��
��)�	G�p��
��1�8
�����9��f��v�8�.N/@N 8춀=7b�y�?w1`+ZlH�m��آ���nƦ=`����y����?�yG��?�
_H~���22+l�|3���
۰?��1����1�`���2G�%b��Ss0`�朳m.y�g�g��,(̂�,Hł
,�������ւ�ZY.�w&g#��`�O����qu��ǎ<�̸υ.ȼ{�0p
Nx��"eE��S9Hz$A^���˾�9dr89�
�
!Q�)��q���N6	���q�<��YS8�Bo!>��� � ��O�Л(@GP:i���b܇ѭn����}-O�&�<
l}�8�����sz�s?�Tkg+��c㾇�Z����x�d��m\���/AI�||O8z��C��~w�=p,�i��wx�P����3e��ʹ���
�}��a2,3��2��i���uwt_���
�>s��ǯh��
~줗,�o߽�z
=�����`b:\����<F9|>�
�
��΄{|ʑ�����*��t
�U�A<&9b>�
�
^��A��T<�t��t�'��s9�򑞑~&9b>�
�
^'ǐ��T8;�
��Gar���I�.� �<���g�r�|�
��8%����\�?�+O�
 Y
������� �#@�뷀#=����Y8t���]<0� eB>}|s��<��#p��� e,�^n~�t�Y>`� N# ��CIg|�|u��?ފ�]#����q=D����x-BZ��f�B�A*C��2
�r��
��
�t�L5������=�j�B G��B�AdZ��x	b���
A�1C�㽀!�����y	�8�ah}A�
O�fa{t���<��q�<2�w�|�5���q�:����r��UOA�!ѬI����:	�d/��x�?I���do�D��
ɨAqXˤ�{�F:Mq�6.��Yg
;
��p�!�>l����'�f��:;�{�!$8����4�>��}�sv�Q�i�i�G�
t�Z��y�&���7b at P�����cl
`0
�Y
�q
갍#�tf�ip�D�աw�j�t�z{
�ޱվ��-6���,���U��i�ל����>��})�(�(��@:�F�D�����
-
�Y@]���L�:B'���*	+��$���J/�Ņ�$�"�)�(���Kb�vBM��&Y��	r�L�TKr��Md�ě8��$��g�v�t�uI�Q�%�G�'RO�^�|�~��,�hq^�;��Nȶq����� �)�� �%e�e�
-a�YFRJ&9	I�ea��*[g��B�E�E&�B��Li����.�BZr�W�T$+�A�Q
>�$�#.�
�LQLT��
a�
-"�
�� �`Fb�^�!Q�A``��������ŝ���3�S&�g �Nh�3"�N��3"�N��3"�NŒ���>�a��
?����w/���k��n#F�応���q>g�q�A�]����K��{��ݕ�]̰��ݨX����0�e�i��g�l��
[��v�d�>&p3�|�̝7�z��
-����1[$�X%�1e��X(�q�-���Z)Ks�%�%���ɹ�ve
/wfԾ�n��8���X���}�X�V�#v��H��V��,z�=G�;��u�2��D�Bw�Zɱ�}n��'^�c4�$6�%��A�8.�
�~�����\-�%留n�� ���=����4��!��~G����D���s��ü�O�h\S�q�+�M�_p�[�|�S��ޥl6�
�x���_�>���
�b�O&� N���ʎ��Օ�]���J
����W�{���{:��c��%ة@�3q 
_vt�	���J�+6
-����t�Cv�}���+�^G�:t�p�:��>Ņčŕ6�;�T\j���ٻy1���9j
I隋�g�	�;~m�ٚa���ْҭ�'E%Uq�8�0٢��&3�Y�O/\]s����9�E�]��,
o-��?��p��/G�
[�#�#6��ut�O
ڄ����)w��x
�s�6j����x�6�5�ǎ��putO���Q
�sO��~.��I?�J�_��kXZ�

��y��!I�3�|4z鰎_����/�ϛ��s�T͋`^�r�/�<�D 
>yy�I�>yz9�F|Ξ}.�x�����
�}�b��4���
�k2��������t�O�a<��,���,�^��(�"��S�����<M���V��5i�	���~�J
��Y�
��0� k�u�.���=�s.��ǥp�^��N\�ɽ�%yaK���rc1������
�j
����P����V��(�GX�:Hj��(�g3�zPg[ŧ[���[_�];ا���ҩ9Þf�*~��h�����~�l��xK�D�o/q2�
��W���_#�`�(5���D	E*�|;�7�{[��/�&=��k�r
�����MH�K.�4]|l��#���J� ��x
-2�0
�r ��;�D�AltF*;��.���
-%U
HQ�'R�'%u�7 at EX/R�ԓ��r�ʔ�I"'y\�q����E/E5,
-�lb���
�
-<�3���
$��\�j.3X2}��	f��C����
-z:�w�\0ԅ�z�7
N85�pl/��G�]EAXS�)�G�OS���,�RX_?� �8�t
��$$��%���qPLA��1����8,G����)!�;\�V%�̣�}��V���v$�+v��v|�au��ĉ!��v��̒d�!3%	�Wl�B�� �)������� �(钜K�;��"�x[T�Zqب
ݓ1�ZqXT��m��̻Bh��e at 6C1�1�}-�k��:�
-�r3w[�
G���!�3a8i�_v�����
zhs �ˇ��`����X�/��P�98�l�9_
ks�
Ut��j�2�	g�
�:�eȔ��f�͓� �����$�ė
��N�<7�^rt/;�?�
s��
=�u	��|�Mq�0�@3��F�sN�K�jƝvnF���Y�*/O��A�؄��������/j ���7�7�7�:�����n�
��������?����
��N�\2;���iq?-.��Z
Q�s&_qG��:�E7�"/7��~
�Y��MU
U>�fwU��Y������aNe<���.� �~1�t|�|
+����*6����9�rZ�_��m�0g9��|������,���t^���
��i��i�!wIɏ3�>t+E�"c悑��Yg+��۴�˕�fK~I�Oi�I�[�E�[��$A�����Nf��tI�l�:W)uӬԝ�n��
]C����)��E<I���soQ��[�(ċ�2+��<��
|O�ݍ����63���
��q���3��ˣ�������'�2od������XD�"gd�&?C
����~�\���hݣ��\�i��iQ�hQ�Ţ���ǣ�����<v
~����G[�'m�W�n�U4��16��8���Y�Ɔ�բw}
�GK1���, e������e��)+��{}��?mlP�ʬ�?��m�Q� 5'��mR��IA�j�Te�jڣ�%*B�
-!lK ��R�@��RꎕW노KF�!'�MݜP��<=�J&-���s�^I�+){KҞ��u�����[���\��7��us_+��h
ߺ�6���2�~T5�9�o�_�Fk%�}?r��%S%��Nn��񜓅��}�$
�`���
���6<��Ob�Y�ĚM\I����Z�ZKa�8`\r�
��j�>��2��z�}��~=�
�)����Jw����"*�#T�w�,�b�*r�+�lj�t�2*u!�RJ%�ʍ�TYUY�n1��R�/�+
w)
�*�2s�nS{e]��
[���`��S�P�͖�m��Y`צ��2?��?~�x��
�=
�l��cG���}� �f��'��y�N�)�ۤ�u��&q|I
/��K�xI /)�Ӫ��\�`G�x���
B�JK�3W/�XI���R� 
�N�E�,���
��
J���`0�r<W19I��u
.6�
�zqU�`��͕
s�q7�������9�xUod[W�*ҩJ!UI�F��5�{tG
z<fB}�nGw4�����q?ً
9�g]�q�_;�[V������;��a,���A��y��cWYx�}��
<f�w�y'�	��~c�Y9����mL<k#��̳6���~��t�/������
7~v�wG����~�ݯ��&G�Y���CXL�t/�_F1�1���"x
LЪtM�L�jo[�m갵��=���X=�i�
��cnjj��	]<utO��>.��_[_]]4�v��;q٥R`Ǫ	4�"s
6����h
=�9''�U?IO�HΥ��É<{1Y=��\:l0�v-p�¬Y�2�>��T���T&|��̎E{��M���"74�n����b��u7�ua����z�{WU3
����G����kp�a��`�v(Z#W�;�V�}���z���k�
?
ԥC����Vtq���AmmH[��A\�˪d
Y�2��*k{�������IVk���C�^

�hXT.��#B�
�~괧��Y�QM]+N�?M��'D|���n��L��<�Y����;���c�"�O?�l�Rv�Ᏽwt�b\i'S�^��EKY�y�.��*
���b*��N�(��w���U���l*_�����)�Q���(`���&�'BZ	���i���w��ѵmҵ]�Ge����	S���)كR���1�ص�r�dbX�_���R�
-�}����Bo/��=Y��{~��T�qۗ#�K��R��T�j�Pzq�N
���an�r�K����
^^ν7s��8��ٶ���px
-�_��x-����r��r��f
���~ۼ�.����rǃ�V3��Oi,x縹��l���J_'ׂ;
S)4i�Ьh���?��456�%�K̗�/	0_`�$��%tӿ�~I��� �c8˗��Ƹ�$�|I��� �%�K̗�ϟ ��}pf|�_�\�%&��^oVA �Й�#�ųU*��h�Z�o����E�Ϫ}W��[U�0���\zin�;3B3�	7�V
q���.L1�Ŵ�׌q�7�c�*z��I{W��l�����/Lqa�q�n�Yaa�*X�t5'
�l���C5���H'��v�Uڊ�&uO������~c
���a��k������y��y&��A9�M�Y���A�%��0�E����n(�b-NgYZ$�iW�NZ�O�Q���ʶ8(+��ָ�ojd8uϰ:��(��q
�
-�X��B�
-M]l�Y�B��E�

EV��P$�*���Xs��b
�a�׏�j���q6ң���ſ4,����H��f��f�֮�
���G�^{�����jm����i"�q���/�3�b��p,��eץ>Exq���u��m3�
-�
�+W]��}ɧ�f�>}�i �=��j�un4PWɰ'��Fl��ӥؖ�u��
)v�����yr�u3Z�BUtbS:�u-���1R�)n��
-
���c^����'1�XI�' P�y��Q�i�N���V�
��m���6f��Yy^
�-�5z��-u�	
��Wh��8I�"
��g�!M9�2�A ]
CA+�X�"��I���(=����@�Cu�0�:��(
YA�b!m�8H@6&ٲ�����(@�L��#��g���}
�
w���Kw���:�1����6���3Q��Ya�2&l�҈��$�(N���K4�H�?���랇�	�^���K>	/5k�F�%��P��?O����/7�r�/7���pqߔ8��Y\6���H������Q��j.��*d1��:e�m �*j����n��-��%zq�_�#���8�M$c�e,ь%��D4��#|Z�5.��D<��Ƌ����X|c
i����T�uB���G�Q����㑟�/��F�+}t�;����n��<�-�cG,mY�l�Ҕ����%�,�8�Ґ��:��E�Y{H��EgX�^���S���z<mmi�]��������ve�t�t�:_�[�{��}VN��f�j�����*Kg�uW�uG��M�[uR��P)/uהV��Uc�NwCQ�O��\��q�<�
g�S}�O���Y��3`���p�(5wLѿH�
 [...]
��Ry�5ێ*��{l�F[����[e��b4{�ͻ�Am�n�f�y������l����g��z�ġ�7�dѺ��*m�J[r����J����|_�sUO���dV)F����Z�	�

<r�K��������w�۫���n�\;/$U�<��M9E���q}N�;�iq1�Ĺ�
��L����I���x,��K)�s)�w*��Z��ΏW��.��X���
O ���\I��kw��]K	�\�SU1���b�e#s�Ȯ�y�fdU2�h���9#�Q[�m�j}��p�(��(�oy��W�7�
n�}��Պ��_t�|�o��ͯ�

��߁�/�no���ŗ�vƍ{vԛFp�ѹ�1
:��4�������� wn�
�
-_�T���?�?����������_�>�3�d��ݿ��~�&]�kr��
�G���'_h���Ye<?o=��/����NN��o^?�ܽ���a�3a�'�����ON�����ś����o�)X�oss{��_?�t��������}�*�.iw�,�F�b��1�L
{l�4'C�� B���F}� d-N�Aw����|�ֿ3��L�O�G3@ �
����;
�`�\;���!�WEl5^Ec��;��>b���d��<�)�
�'���
z(8#2 0�7��u ��������"y+(��=W�	��Yn
�Nn3��&0:�M>qN��g
V
�ج�
.���0&����~�;�W�
�0E�4��)�Z��
-'ٽ�_��48@����t����
{0�`���q 
=&8��g�=��
6�@#2/���
�m��5y��Mz�
g���U��}&��Iޗ��&�q˜�$��
46f
�t�t=��Y�&�
-���ʀۀ�1
���1o�`���U0C`�T��I k��{:�0�q�K1$jp}!!V~�C�
��m �
>�G�g��
�N�]I�&#aՂ��9���m^aM����Ƒw4B��4�A��	���C����
��Y�
�g(+�\�?&`��^�I��B�9x��8 IpxH
�,t�=}%у!��=�����8��.�	$��"(rX.���pm�`�
�9@	v�.�k5�>�|@��$[�ˏ9�H�`
���T�
�IC��A# WN�ƌ��%�
l"hŒ؞=��b��x�S�l��@C"a8	�8�
{ �
@��`a ��.�����Ƃ�!y8ρ��ƾ�t���&�����l
-��!����H�N ֊�G�L�	T��q
΃I\ɺ@��wpH5`3pC�3���o�4���z
Y©�*�8b�NxP/�+�QljLp�
-�4N��H������aO�?���Q�
������˓�d��
_���I��Ԁ���=7 H|�݋��$������A[е�9|�7g�<*9#�z���'�2�=рwYc�Ƞo��@X�	M:~�1�C&
-�|�>�cc±x���
f��`��g9L�;Ō��cٰ�q"C��uLp%�8��#A�}�$
��������
�� r� �8j>��,͜�:��q��u !!��
-
S<+��?��H��MWC�bw�̗;�Hu�:L�D�
���!
���D�WqPdd��
-����䑀�	8�D��

}'���� ���0
��
�^4p��nH>��{A1�w� �
�
�jєB����C �ʘ��k�55�
-�#m����쀭��0p��^a������"�'PY{����{�E�����	�`�����`<;2Zl�H�4���|����b0�
�AN�O�X9O?��+ptȈ`h�$��@��!Ba$����R�ڂ��y�W�E��
d�
�K�iŶ�86�����T�8|Ʊ�q@{$���^
��#`/�xĔ��`�á
�O��N~y� �{w�������(m������W�7���w?9;��h>�����m�*#g��7w������[��7? Y/������B��3�w�W�9�Ǹ��Ow���<��>ʘ���( �
���>Q�nF�B�=�V��(�
-� �b���b�C���Th0v�n�Z`;�`@�a�*Rw1"Xi� 0<�'��=�h�J�g;�m�G܍
�% �k��R��� ��<8�j.����DA�ngX���F�JZ�@�N^[`2H�nK����o7
|v
�n
��\�YQn �����
Bܐ� �i[qʃ��tJ�	����
��1uH�
I{
-��)
�h
��7�!Vz����f�?쵰��c��Yh;g�`�V��r30u2��"qH��n�%P
�ɀ� x}CG�߁�O�m�����C�
�@tzǽ
�Y
�	s:�EP�0?X�>�`���a�ՠ� \�ӛ
-qFL�x4��H����2b<*���ְ�h���:�%E�t�s²G����w��3AP��� �0� ��; ��k:Z��!�<�
�J�n���
��КB�
���~4��AP(��4(B�aМۑ��}�	`�
�c{�
�*n�%2�V��� ��
-f���m�9�M1qβp�܌�3�[���<�I�#�@�(s���e���@,
����?��'"�vD�ouML
-42o�{b�ռ�"03n(���L�/PӞ
^
�5�ׂ��Y�v��
  �
�(qk�I�]o�uE��;�/F"Ypyy��Kе%N尡vDҏ#�ہ0w�ԏ�NC�ؔP
m^�!�1��HM ��ĭ<�Ԁ�1���4�
g��#TX��{�����c��d��}�TO=�:!�i�z�uAe��;z;�8�Fθu�|A��N�
��
-X���Q
�
-�S;Gv��'�A�{��|be�I��{ٌD�nXĴCpʣA+�`'Ѓ
Q3�<�
� ���7`���=�ޒ}�&�#
 6;���`�{ju�
` ju��I>�/Flp|r}�,�:`�|�2D�vBf
�ҙd�'=�`hؠM���ԉd�`�|)��X���
-K�^ ��+
�"�`@���h�M� pBd�/P���
�Gټ9�nzJY�G��2���
��1���@����ۈ�1A�
9T�q����Ʃ�P7su�P//��R Q�v�eoSc��

5I�86J4.�%�b��q�ƞIօ=y� �/
'w�������YJ��@���Op�1���y���i>����"�e��<���zA.�uHqrM��HP#�i��[�{3$�	��(
-4��T��
���i	����x�����, 

�'$!�xG;��
�İ
�C�w�C��J��,[�#Ul(ؤ ^5��x
폑E��{ :���f� ���2�-�,6%���N4
!��)��/e��������
�8
P��L�n_�~%�e��� ��< KI#����$�b ��17ӕ��
-���'� �W����b�
l�5�w������ͲԞ��|A�0!���&
ڑ�Ag������\Z�}�
���8����r��lLm���+?� �|
e ~���#p?hT=��f�y��@���$�V��4y1��
��8��'��mX
��F��,��[z�h�!����C�}0,
�o���9כoN���6��=!�H6$l�|~OyT/��k
���i�*
�'[I
���C{�)�I,@�~��A�t���g�b�EuXG6pV ����Sm��j�+����@��sV�,��V|R��E�0�6;!��H݁@m-y�gJ��q�$��	I�l�Y���H[��@aCii���hO�a���x�Y�����$ Ɔ
��h�-�`h3pH���;��S�>�2P�@$
��Q�$���!��(�f`C��v�L ��3Jo
�[c�mp�0>
*�q3��v�}��qS~��7<FB+9ނ�
-�����IRg����FA��
'kf쨾X#N�e��4��l��©
-�%��
��m`0_} d��|�Й�@^V����峂۹KiP�o:ʂ�9o�"��(U��_��/Ѓ�偌����
S��B<
 d:X'%��� �BY$���fց��J�=ف����I5\^��@��Z�������
�0�j�
����Xޢȉ�D�H��z ���4E��(�t�pr��	�$�d��V7Z�u#�Y��U�xz%!�
-��$0�\~�ԟ}��E�3 at k���5
�
;
�}�i�
�
�)��7�=��
�NH.C[,�����{����� 	�3
^���F
-:L��
-�]���X
�:��0n, ��Q>0�X�&d��pG�&�;K�v
Φ��~c���0�R�a��lҡ49�i���l�0 �$[��*fe8�o5�Op���73|YZR�K���>G��
$w�ik�����(
- /8��b>f���lmk�|Q��S�$G��4lz^|#�\t��k�`z;��@���p��d<�&��4h�1���[Kw
P`�qa�1w#ɛj�,�#��$*�i~����T*~�(���=��c�;�h~
���9��k�q$5�f��DF��c�i���},+[g��v0|� x��djI�t�8��@�,��"�#���j��^�
0������V=��$Li �� ��$�	�
�
F,�K�(�9�E9њq^���pFYYQ��A)�z�,͈��%c�E՗[�ئ�~�%�#YO�Ez��
-�g��͙Lr��8��[M�
���d�=��$6	�tTѡI����� �� �:L�28�,
�%nʔQS�@W-N9l�=�������3a�7h�g
�#x��q
^�������0"�(���k�/��H��46)&�����6qޤ��N�������
�!
4��V
/�:�W��
��
�o8����8�7řT̋�?{G�#j4�e`2Ǟ�j�	��N�b���m�
���jNM/:=hB��@�
�g���D�U�S���t��F
�68ʬl�&
o�pk��r!kyF�u��W	AC]�oF�7T� /qO���=w%|
i+0y�cV�n��p$�x
H-�yw-�V�$�-f0 �H�q��4^M�.�<��p�%�$���#�q���
-A%�@08
-�1k`5��f���
6�ŭ!��4l����;\!8�.����'(7ͮl��r�؜�(����k
B�R�Sx��[_`f�R�������W ��@�5
D���C�-�C�gu��׌L�dB��i�������;]{�Nd��<1�P��cp x �#�V)
Ֆ	_y\0P��5u���7
-��OV��2P�f�C�/��s��2�����5��D�3�2�Ϩu92C
-��1�3S�UA�:�
�C�OC�4��!]�M�
�	#
/Xw�T��2�-�������t��JX%6�tJ�e�<�=�^��,�ֽɄ
��X&l���3$Rų���P��OFOw�֘T�
�I�g��>[[3�72fj�C��
-F�:2~���AB�
6�3I(�6�p$�K
&�툱
-���+��b �-2�����61%Atx9�p4�%�Uك��h���F����ޏ����'������̢c��H�����/$L\��0�\�3zlUʐ������D��
N)E��
ut/L�
�`��̇%��lF�k۠qI�w�<�fk"f$�$�1�E� y/� �����*&^Gdam�d\&��x8�۠M����@@֖���� �
�dH���V��Hq��
�Ԗ^�
�2���`��N��`���C=q�21'b�N1�F�-��*>�
-Dd��ھ�pT�=��u)�8�"ٸj���H+�h���;��=���)�1`bȈjS��e2�Z_jG �!N����@*'W>�V���i��6ҵ��r\0�h��x�l��
:,�
-2	�y`4�DŽ�>�k?�	!Q��0�]{iȥR@�	0
�w��v������@=cOGK�Q�\�� �ō�0���f�R�
 OL�#��a�m���~}Fk@�,51��OOn�;<�H�p,+�
��(�3�IS��Y�c���t�<��͠��jK՞\�+�#���޺�
oPng�V�׺ɞ��[�9�/W�2;�[|V9��V>}��UH at Sr���Z �X�,�tCK�� �Z��ЉZ����������W�

->�@�&
Qq&
-ΔȔ�TK?� ��T�LFp*覉�T̎‘%ʧ O���Y+���^��`�䵪(&�KܓB�*Z�� �P+�G�(-��� ��N�bĔn��˔~��h�i��J�+�pJQ�C���6�N)�*f�9g4���Y�ڭ�
��^E*6�~��RGH*���l�2Rtf�� Ne:Q1�M�
-!U�
}��As��ʈ�"]�
J�*3���mZ�T������^e��A�-˞�1��*8�UHs�
���1S�P++h	�nQ�hme�-��ʌ���[�`Q^L�u�2B� ��	[E�+�
-�WFto�4ƫp}e�W�������}y�P�	ʱ�����+:��v��
���g$��E�HK���U$�&:��t����J�����l���j�N���h��~��	��%D_�r��4��K�M���_{VZ��n5ڝ'�6ybHf=+� ��h�l�.�ڵ�	�#m
LUq
�<�cL`
�Z�����s
-��� a�/�{�/
bXcbO���j��M��)����V_U�w��k�@�j~ݜ��e���v}K�x�,�o^�f�n�4�r�+Ҫ���:K�"�u���%HAo�:���*�w�R[%^�LwT���>�K.�V����&r@4��ODΖZ$k�H*+�`C��ŀ��t�F�.;���ϐqC��	T�@^}�>�3%��+��W��p
�B��V����L��^7�u��ú��v������g$�ǭ��X�Y� @�w��
��e���r�1`Mg ����Po h@�o�g9��;I�Wv)�M4�U���J�ބ����Q��"�(�2Z�UgT����6g�|ϴy7�=ka�
�
L3KN�
/:��C2HA�#��1T
���lKt�V���?�q�z.��<�&��kh�fc�)2H,�/%�"����V:�^ _M`t�xz���N��I�̺���
*��YL�w,,�b�z�0�>H����6lG_]�O����#i�=#�>jVkv�^�z���i�rysU_
��
����H���T
i�ͽ�\U�����۽nn}�8&fiJ��d[>@=/a�z����)��sd��&�1�2��1Q��[!cc�r �K�R���"X�:H=<9�,��j�
�~k�$���T�0��
�
-9Fn��a fb�E�e����
-��&�0 ��,� �L�]��5q"
$1PP ��)��u�q��q��g 
kx�'��{�d��(��ࣝR��)�"���Y���}R`��H͐j��G*�R��1��9֋UWF���� �b\P��crOPR��mV
F+u�i�7,���3X�gdW:k�3ׄp61���|٩"�a�?K{��L
������+�GmN0� �k���&:@SL�_;�����*��q��(SR�B���
A
�e��i�-{�ly��Cl�&�Q8

G����V�gy���H
-B���
�T=���B���[��Ԧ+> ��|@������\��c�3�&q��Hi��S<�֞,k�]�8O�+-��t*w��������B�����T��%�R�Ȅ��
��z"�( 
�D��h�cW��{�ok�d���%�`���`ü�j��
K�����)c�#K �X�g�������u��mY�#��mI�%��g���-Rb� �$�)�2\(o�x�a��4�
Ţ
��r�f�����۪�Do�g��چ�ab�	�6��.�N� ,��>�7���%{DW܂a����W�kV�\Tq��15�l��b����.�R��z�p��@
�z��jQ�x55i�YS��M�\	�z(
Po1=��Vհ�����1
D�"XJ����v�!��]jb>���^�DZ������W!�?[
&��r�c騡��2�YU��o���vK�l&�U�FO��m��d!Cד�|�I0�x�p���Qj���
hYR���q? ֽ��\�Va�:X���{��
� �}��	jAG�0)��U(	�
�x����D����O��x����UF���IƲ��2�J�αvE`�)[,А
9dIk��8���+Fm��:���Bf�
��qtT�_��Yq��Gv
�$L���k�	a�=��h�fi62�+FVH/`�C

�4���1J-Xt|n10���I!�`��oG�T@h�EӰH�AX#���
-�btÈE�Ja�.?�%��$U%�T�����)1��^J:2 �l`<��t��xu
��j�16� ��� S^R��hEs��G�y4��bi0pK���H�4Krz%��h�K�������AR��T~q��z*�̹���5gTܓ��{F�5̛4y����$�B_�
��Y	)ǰ5]W���s�'�ԛ�+��c��z��Ԛ�
-5a�z.�n��2T��S2���<��
������I��Z�Ҳ�
#
&ޝ֗@
5�>L/}
K�?���4�Y�Φ�j˥
�
�F�
c�'��a��1�P� mc�jIֹ��_`�|``>"s2#�#��?C�����?A��q?���D��?v��	Sz76�>��a�� 6>)�A�718�l4b
�
-�i(c���o��[<�L���t�*�4�: �{��
�
�~Pʤ*��	
�i7O�
 ;QȀ)S��Ƞ6�/���N��r?�d� +�`/�
RJ���AxV\�:�Z2�F��i �S�y1���e�
���{{/wp$��t��8�w,�lC�WYL�
*�
-Sҗ�i%(��~l��
�a�L\:2�>+GxZ�I`q�5&u��Ȅn�K�3��֓Oo
--�؟ch-
��%U�0aqj,?�!�x6B�b���8�x3�L9��)��.hO.�LH!�r�0#���6.��e�7��
�π}"����z &f��,�uj"D�`�ខ))�y3��&���ȫT
5�����2&ʧ���I
�[,�S�$o	���m�z 6�ɤ`�*�
,�n�d� Jz���1�Y�vO��̀=ײ�1����K����a�>�&��R����jN���6jzk^�\%���b+���E���i>^�oCT{���?rD�kT���÷��~}�p��bq#��(+�s�Yŕ�(QR�Z��	�XfP�d
V��i�T�Y.���T�S�xn���Y�w$�ht�k"U�
P<a��q��E�Nt�2ʍ�ׄ��+�3nM��fAz<�J
-㢜.-�¬�A��M��5^M�Ax4�_G]��4%Y�U�-먇�.v�az�l4M4�T宭�)b��rm��u
@�޴�][��Q�
���]�\��zl<����vm
�aS���mD�a��H�E�y_ ֞�%~�5��3J$�\0t�]嚳G
�a��AW���}Int�k˲
2ST�8��j��g�50
-)�b�Rs^4ى?Ů��z�RȞ�
-�L�,U�f�sL��U�-͆4RϓZ;�=��\�ٲ�9-���E�EI&2H�ۥ�5E�ےr��L�b�
 V����c�"�܍�z��� 'ƴ�3+rb<�Ds��זK��P1���`ClJ��sG��/`�cq��׃Dg��s
����NR���^�C8�<����}���u��$�D| <w�[�d�*!� A���2w�Ј�ׄA7��<��[�
��21�-�6L
�D��A���9K�陖Lɻj`#)&���b�m��
_�� f�'�v�4-��f���`st�Jr�t`C^[
lhyL�*�(��Yu��TA�Q��Ǝ���
��;1Hdzm����
W�EA�Y��[�X��`*u�h�6
CJ���'�i����+b��P�^W���
%C%��G�{�YV\A�O�����F�T��KpԺO�
l�Up�{�p}
U�
ȧ��
l�ct��IBtݱ��IXlL��s
U�y*m����a�a�e��hFyݪ_
^K����v<ү���@��_
�c�w�����p:1�B���h�_
Gǀzէ�v\���v\���>5On�����'6�6m��
؅F�3�@+)�e=���\�l��
L���3�S�O���y��
�,Y)�
گ!i+��,��~
0+ 3Z04����xdb�(TY�5�{�$�Dv�	���ae��ڭ�����ez��`近� b%�^
S �g0S3k�F��r9�+/�ƫa� %+.�L۫!Y�$
I���j�3�|�}ֵW��beƴW#�s^�&Y�x5����55���^
n�9��i�^
-�H9��&:��`6

hL�
B��j<�5~�W�y����4����I�	�&V�z���^
-6\�B�ZkT-q!�2��
�\�8�=
�|o�x����c����f�|hP�*gF�k���q��\�E���xWF�=��)��Db�v{�5��i��u)I+�h=��H*a)�N��_p{֥ڔ�$'�.e-	�XfP��!�\�R�Pgb�VFF��g��J�M���V�a���e:ɶz��~����'o� �u)A�	D :��KWA9M�L�Z
��v�n0���5��X
:�5�G�͘��t�Z���F�H$K��Tɲ� }��h披4)a��J���M�V�&��Jm�T�Z���&+����=
�(��j&�mC���RL�7�R庳8_j>&S/�a���@"ftb�\����
y�z�K��i��
�b\��0�"en.�w�f	;'�CjZ$�z)���Q.�`�O�t��Z�J��R”�Iq�̢K�6�
mjV�6%���VH�)6N,��	#^a�d�RY�[g��UY��=&�N�����R��VOz�p_�]
-@�MX,�@�I��UhN�` ڥ849��-)�g�r�3��X��_&ݒ)�,tC+��V-��N� ��b�æ8�,�aN"�E\)%���ۻ�GL�{]��|V�z���srA,�Q����lf�G&����s��
-�e�]:°h�$�JhOGZ*R.���$�B���ê��j�w�M_#k��z�T�$
��K��\A����J��5�¥|�co��k'|
D�cY�m
����R��\^ޜVt�9�VK%y��
�%YĦ�<�gP�1s�z�~�]I�r�T���+��У�6��E^�EL�(� ꥠ>���tX��[���ND�
��=�ʬ
�S
��*�"�[z����Q��K�%�%X���� _X�:�M�\�
�d�Sf�Jk�ܱ���VĘ.�/l�p��p�{!H�Fu��tOඤ�\�Z ͱ�
is�4��#%C�
YB��t���/��7��@$�Fݜb�/�#�j
{�t��Kk����m��M*�w!�(Zz�Jg
ꇬB��Тt�OCxݴ�
C/��D���Q�n�9�v���/��`�
-Q��1A�l�{�M��Z~n	"w�ϙ�$e�R
�X)�4
-�ɯڎ�^�3�
����F%J[.�M�pI<g�q�4D1�rbR��R�&�rIBB*R�ۮ�/��Zԗ���2�J
�K�Oj�:���3�8��1�$� �2ЗR��fe.S킔6L��?޼S��<`���e�8D
:��Yߍ1��ʻn�z���
�."k9�R_ji #9%���
e��J�|�܋ h�+�� ���K�r&���0mbCb�+�f�W
a�h
-&�a���d*�O��M²�rr`~��7�x���B��NdZ4�ˮ�9ͻ�8fg�YA
���@�b�fci#�zQm
}�Ӗ?�rRZ8̼�m�ݴ4��D��ww�ki�L4,��(��M�.�u1%�6_��ia�q�m
��h�3Fot�;5$���C6Mˠ]�g����4K9�q#'��4
OSP2�\R¼�[�{�
�H�

�4�O��Es�[��u�&,�YH�kB)�p��^a
G��jN�{^�0f���\Cu\@��R!�#�~\+�Ĭ ��-����Ta$V��m��3�#� �!w� ^���Iy��H�L�]��p^����N����ט��rF�
a1s�bNӌ�YWhd�۞��q
���,f��\Ÿ
�wG	C^�\��X��Ϭ"J��M0�Wh���3,�G�������Vd����3�:�~��ȯi���#Ƒ	�q��&_��!V�zJ�fF���Es�Hs�Z�Â�gQ4�I�?��1R��X���(-u3�^7+����vfe6JiJ�Q|�3�s�)T�{��Jq�	�uoO�*�G����>�y�� �֭`{Ů��m�H���
-B�acs 
�\�b�N�����E'���X7̍���uZi�)� ;�ҵݥ�����k��!�mC`�	�\1a��ʠD�(���03�7	
դLU���憥	��S��4 ���w�!;�z#���
�V��|��Ǻ؉ȧ�Q��#�i5Y2
��!��H��D��+���$ahU�~�6�V�����
 �-Z�?�w����n5��S��{���� �+�l摗M��H˫;wdZh�>�t�
-'̈́V�\�tڪ�4��*������7O��T�i�fUْ��U޾�bY�E��Va�(W�͚^�Ǩ�`��bb�om
-�%Φ��e8�9�\��)#sTUY��^�#��v;���U����KŸ"!Ze�0)�銰���iQժ�W�*���*�Wdf��_���ɪ���j�
-��5�Pei�ST8F�eT�Tt��S����[���Bj��z͂�
-'6�SALUZ�qF�Dg㬪�gč/*�,5�P��X� |]�T��*��ϪK�}CUmUZJ���RrTY�
�J�Y�j��-�*�[�4U6���=+�^Xj�*m�ٳB)��rpVZU���6�]x.j�4e]9���"�Y_J/'
]�h��|��sR�u{�b"P���9aS�:
T�b��
`�V�V���䑫nצ��\���4�~+���
^
9��x���ʖg��t^
I�H�2?5��+�*�^�]�̻��5�����1�lpu��ڀתu��u�|m6�*���f�~e�TE�����P�fSe^U�	�ٶnp��h5J�g�Ve
�V����
[�F�՛�3�#Rg�����zvk���U���"WnM
���Mf��Qk�Q�^;V���v˨�W;t���A�_y�f�Q{�4��|Wm�U{��SN3�5�ϭ�r��N1l��S���ۢ�v,*�S<�YBi�eK�i�g-������ۺók���ʙ�Ľ�7��r%+�����(�u�(ϷBD�i�!T�ho�.�W�My�
� [...]
-e�@���PYQ����P�\oh�_�~�U�:tD�
9�D+)勦�S��5�:�E+Yu�L[Y��n��W��<猖ީϪ��*�H��u�R[��c��}��(�֫0��y��Қ�
-u\��G�aam�F
U��#u@�6��qmkM��Sf
5�MC9֮iPRz�
U��)C��l��T�amNS������[F;
Y,}*~R���˦e��TvI�L�*f�eU�ŊZ"S��Uų�l�*V�uU��2	��ۦAYE�*{�
-�-l.ܴ{��k�y�OVvv��4ӫ�he�ׁյ�@h��
�R�J
������2Xc�5�
���홙b��+\��͖H��ŠWQ�	��v�X�Y����t�7�:�l�(�iO��
-	�
�s��"Sj�qT������WU��$MH��^
%o���R�B�ͬص���f��I���m1�\;��sj�������jߢ��V�5�ɝ�צ�~�5n9O�ԮWEm�W��u�حI�8��&���OgC��NdTb�`��ޱ��D'����F�&��:��N�˯s�H"#�0�e�i��Y�Ndug��!@�4L�%�Hzp}�$�/�����+�끴*��	Q�Q�ZW�?�&�J�KnE����|Y5^�֨ԲA}�l�p���Μ�
CW|��Fs}V�d�rn�r\EݨA�c��/�BЄ�fӭ��)ԯpd�_oև�W~ڶx`w�TQ�n��t�Av�qg̑>$�m �憩ѵaL5�7����&
����Jy�vז<���y�5�g���&VMԗ�9����NA}�n���Ui͗�gX55�?�
$�z&轶�� �rU=�s�LP�GZF�m�@KH�Ѝ
�0R�4��
F�(�N�~Q��v�ujۆz
-[n��R�j'�N�*ļ
']�ڬ�A�
-e�<�J%aIbC]u^*
-QuŋSX�O�ݔԻ!
i��\�瓤���y]]�?��,���<�ڵ��>r�� Q|���g��h'��G�х�nĤ�jK��؁n�N͢@����|��淺!�&�Vc�%^AFP���X�3 ����U��z��ئ��erx�
#��&��Ǣ15lL��l�'��e��L
��#�x�X�e�mc�-�}��M�t�*4gSe:�nA���:
�� ��^��wK8��7���}�9��tl�XG����bw��
��֭�� �o���0
F"��}.�V<�)��1v�ȚB��ǯ��W�`Woݪ�_W��X��
�R!��E�
)���k2j�W��k�+j����M����Ti-�vcݔ@o�Vs�
Jo�WJ7ŖV-S�/�����N�o�زm�����r`3�J��5Q�H-�iM�P�Qј��:�tn��j�(��6�ls�*����Q�S#����;.Lt�8
-a����q�e
��פ�X,6
-�
-s�dU�V�a,u�iT�2
�Ji8U��Tl�����Hl#P�eMxUو�et�d)�Cg=.�ߖ^�
-�^�8k�5�^��e
K�gF(��caJ�tn���5bb;��-6M�D
-n�
mT���pU�ڐT���/�u���}A���p���8 ���
Ɛ� }]�9��_d&��N�I�
vH���
��s��D-�5�7VL��E9ᘍ�v,Lrp`�Ñr׆�At��
 �F�kq�M��\�-�w�>�Dy�mK��EU�_��\�
@�찞��|��˺�^�V%e��UAfM
-uMgMQ��К0�Ӛ��:�zo��]�-�oSoR�*�^o)35#��ԓ�8Ssm
-cSK�x���[�T�x��V��k�?&
��/X�Z�>�
�c�_o�Tu�3P�e���W
����<�g at 7d��	l�
l�/���J����$�Yicl�bTB�P��]u� ����c�Ei�V��Io��F:�i�
�"�[�S�`ؑ97�S=�;M����=S=�|H^��qg��#ȓD��-���˓<�E��
A��X��r��G�Ƞ��E����˓T� �fh>�&0R5	bA21��0���$����3�`�_�jĘE�oh���~A�h��:C[I�qC�i���Y��:�>
,���X _u�(x)�����A��9�>�s��
�}�=��L�4����e��޻T<�nr�.
��11�gd̔j
$1j������U�?6��<�@hk�qz�[�
'k�b���5;��U���{���ˇ(��"c���#F��Pw�lC,����Y�:���X���|~��'��$I��|���}����p���Ƿ��{�����|u�j�L�Mc	Dm��l�i�L�_h��leٸ�I�Q"i#CB��&���$g�&Y�����V��A�{p��` d�6�����ʓ�ӆ'��
I�&�!����1�"� 
9B�<�a�
s�p���-+���-n���@h p3�������40^4N�80J���C{���Y,Ŭ�I�h�	��S�����Q��]�g
mdȌ�F$��(�!�yM��0�uCO:�+p(^���!=�ۀ�b�D` � S�'�sp8C�y
f@@�!EP�>|� �	!�
C��
S��1�4>VpaW���|V1��;�!���a`<'���~HL�aiΑ6U�^A�ݱ�7!���H� 5���Y!Mb
�͸�:�sZ�
-|���$�U�j�-W(��"��o�V����c�T������5�`)VF�ҀX�2ii��'�

�b���J,K�Yɛ`02ږX������cK0���؉iW�����\LB��[�����1_�Lw&���o��d%��He��L�1�f����,{��`��gV��v0���GV��� �3,'2Z��4lQ��Y @�R�
��T�ƛ�B�,�J�������cq4�+��
��n���,��â�!��v1�#F���X���p����T��Z1P��H�[����M��e�	QB	b�b�~�Rw���c.8
�N���*�Qլep�8&]�E�=C�� V��N��EG6j�a���L��3��k��P6��D�?���	��a��ޞ�[�O��(��Pߤ-���"��'� 
*m��Q��3M^d���c�֐�G���������bZ��Y1�2.-�_4�����4�W�f1TvC�s$�
��V14�C�
C`U�ڒYG�2��+1��^J�Z��� NL�
�Ô��Ϭ[�1�wd�ˤ��s��
Ԃ,�F�Zr;�K0�N�b�c,0��
����R�J��g����
�����|l�$jo�%X�ԓy`�eN��|"ơsϲ�%c���l���n
lՑ�'YpVgQ>��9,~/��K]�_T��H\�%4�������ՠE�����{�m�p��8��>�Ӳ
[ш��'�+V�Q���$�:
iQF�K�� �m����{�ӧlI��?
,Co�wHu��bd:Ci�<�/!����cz X��ȗ 
���
�(ђ눯��SX�˸@?'�m��w`��-�N���~
�~��tnH50����{<�$�l !7lȕ:Z{ZF�l8ٌl
bJ�����ۘ�b+���`�pZ�p�17c��6��eؤ�
-)_�@<���ڂ��
�
Eh�%�%s�'6 at Fa����3G
�c�>{e'ў����պB�m�t���X�TB�
�j1)����ü�ؗ���`41
�X
D(��"+~3�j��t=���{���g^
-���7�:
�U$�4˒f
����f�<]j
�x�h�1��A�,��
�/�Ǿ]Ԗ�3c���c��8vd1&�
#J��M�4:�|��$�#��و�di�X(��-;f	�e�*.���g�,`Gh�Fj#C�gO��ҏ ڞ[�)�C)�L�BX����,�D8Nc�D�: (K�a�N�����t��z&I��<`�6�G)c�(1�2J�y`s��X����{�Xβ���!k�px�S*ɢA!�@s�K=ە��#.�C	��EcE��N�	
�1�2��_�9T��T�K
�{,kh
�PXH�pD�˭X����F��9xZ&��A�����`!�
x̀�����︥=�Ql��
-[Wr�Lc/�i�U��#����mP����E��l��Q
��*��D�'~�:�
�� ?'S漗$��\7�M�6�V�9Glwǻ��
M�Le��c��2H�t����'�q @)�9FɆa\>�_�!eź���@.v
���D��'��\�!Jr>��Ea���s�
4"a����v��L
�����e�H~�Rb�=�$�
�P�h#
z��F����:
R휯G��cqd%
]�(69�UFHQu��"���a�@��[�y�(M)i<��G:�����z��[H��(S�XĐ)=o��=E��L�/�A�+L����T��N�,�I�&�J
�g
I��:FᑀEb�eXErP�ie���As
���_��������YR�إ\C��}���GJ�6��
Tʦ^��MCe��I�r��;��޳iQb Ȗ�*�/��bcm�B�,"�eHo�>Y�?P)��	���jv��x�ѥdL�#�s*�>�
&��N=�)�&���~��a+Ͷ#]@�e}M���om�ڝ`�2S�d�L�W���h
I�UO
{��ÄW��<��e�]q�x� ��\�ڽ�����yO���9��q
��פ.O{�ܟ��A��-?�
��U��{f������˃ �{��gi�%��i��	쐧��خ�{<�~�@ehd���t�����4؍g"&F�Bm�Ͷ�K�����4�����
�f�^Z��jG$�\��2$`�r���=��%��ه"�����HN9���D�KR�x�k-�h���8����D%���=a���M��wH]�j��Y�
-fΟׂٳcҸd���'V�ELx/�d5L �K
�'��j��w�k�u%�tF�xƋ��7�8S�Ї�OR2�`�����H)��HA�6��}��X�Ykd�(�Sq
ads<���Rc*R�aѺ&�������*�+dꋲ�Yg�=�ni�c��H#�Hm�lj�B2(�#i���ٞ�ߩ�X��W��?�;��A�9���ܥ4�D�`CiЊCuH�f~|C���,�B�Ѹ��B��G��}��2R������Fy�Y�.yV�<��@#m��h�M����Y�>I+-�_���tRr���˜���h9\�iN�JE��Ďx�s�����z<
�P���vp��b�.}́tش)�)���=�d�aE�)�9߰n0�'����<b%����|dz��Р.[�
�Y�B�i<k���X��1Ms�F
L`z
h�f#奯-Ob�,1J%���SL��{��e���!��+˙gX66$e)f�γ3�p17�n�-y�֘n2܁ҿ����{�j}�݋)��5v��s��%*+ [...]
-�r�gO9'Kg����-:v�?��0W����<�����\_�I�N�A.��	��ĸ�Ɋ�
-�7�A
���� �];
�t������G���L/l)q	$�}�M[ܧ:=+�.
��	lɘT#�;:눨X0��1
�Ȕ9�3=�>��4x2
�F�˓���$���P��=0ބ�/.e2�F�$9�=��8E
��p\Rh��ob�B�
�zi�q3��S4	�2
-hױ��cJW��8(K����D���x6	���
v�]bH�S=�'sE��$�S^7�d�>	ܙ$����h�`��O�
-I-��m�
1�N�2
��	p�����#!��M`2��DGKQGߧ@3E��
�Y�p����7j�w�AF:���p���q4Y1@�EG�zF�jC`t�o�c��5�
V�4�>��zeY� �
-#<g��HE�3���1���Pn[s/���!� ���|�86��c	R�D�A�l�ъF�#�t����ێR��o!3'��
�饏�'ŭ�
�uV��k���.���ֿ��������a�n�
7B�1�B��O��؀�
u,:�XG�s�*))�$�����R�0w
�6T���5
�fEI�Є��� ~t`�P�Ex#�+㈑��#���VC!�*�X��x1�Ր���N��!^U�`$�dn&ڑ�Fpl���k��X\
�'1���U��9�:55�h5(u���imclT�	��v
-�		j�h��L�`�4C(|S��ɣW��QМ�P�CfG�V�{R%�0�R0ZM�P��Y��=��r��F�pR&��
��P�Jeq��饀'{����31%�c��*�H�A�̃�s�wJ
sR�)r��
kmN��:k>�P�'+�\ZF�2.��%�'�L���hx�&�S�IQJ�>�֝A�R�U� ���otp2Cw,~JD��x'e׉�%y�4��Yr��`j��[�R��:���L���31 ��zm� �NYƮ(o���ܙFlv%c
�2��
�)� 
-Dy�T�X�.2}�g�E~Rm�q
��E��9(�Ġ֎F[�
sbH�
O���c�rl�aX[Nf�k+�$�O�̣�S[�
=vNBeE2�E|t/| ���ڲ�Xr.�&�W�߸��,�\,1K�����M�}�'���Z�Fگft��u:�Ub&h���<��,��QvW�!uL�Jw��~�;@
%��L����(���E�%:��Rࣰi��-� Q1y n
��1ۑ�Ez\$	�-
R`��
�F�m�W��
D���`�C���IN��$���W�}��i�Yn���
4DV�R]Ў��ȕW�ύ�[�z)�3Į��}&Qx��C"oDŽRתv�ȫ0�Al+�/M�!�`�^�Zʓ��DZ���R�o����H (7>;�A���Í�̟%,"��Y�w��r�$���D7��<�p���o13��j�>��
-���޻�ز\WzO�w�?��V�3����[�

�܂a��1E��CPG���ߘ��jŌbmR[R�[R��]+�1oc�q���\��ʝ��Zr(e��$6?��{Kq�Aaɦ��y���Z̧X˓
��V�\�����Nv;IM4k���,"�S��zmF
Ypj�y�	�0j}ʵ��Qc2�}yrjk阀�^1�l�t8O(c�[�#v�G�W�����]K�OG���{�=n��v�L�B�|��m�Glg�Y�U�"5�J
��wV�3p$l
{6��a��Q
-��tM6ˉ��n���� �7��!zc!)ؗ�b
-6*����.����
Ȭ`n�kk�P,�� 6[=��Y�:"�
�6|���{�I�^���/�r?��	1��7�1����owH��&Dfp��]���m�A������8! RC�@�!f	��m���kй!
-�#v�\
�F�7�8�+Jy�>�Cp��_0b_oF-�y�~��~A�o��
ϲb�C�"b�7)�ӇtI ⇔K �oS7�1 ��bo��Fz�&�P��aMf�成
M�lZh�Y���2{�qd�!
}'!�zW�eh��f:C+MȘ�.�;�z����k����ލBk.8tmSʡI)d��>����R�$yh�
-��аu��C��6���B� ����Ch\�.�yf�#t̅�I�ۖ^B_���&���{	w��q�,T��^1[JPzV�i��j�-U,�/}X�%��U,�
�O�[Xb�ޯ55s�>ᣙ+�)���A��چ�-����W��5���N2�r8x��8P
�{
=
x��Z���^<,�9��9NW�2���G�T��u�
-�
u�͍�C�7���M���X�v�l�dն�ϳV�㽬���$kA��������^��zh��Y
��^K�q�� a��ȃ0az!�����lV�D\y+���n`
de��o��g� �[g��!&��ѵ�`�
�5
��$�z�(^��2���m�!6:���8��>an
DQEA��W�!	늎��۲����p�/�WE�#���.��*�Ᾱ�u������y�
��,B��^�_������&����:q�6W�ㄆ�8G�f��vm�Z6��0�_�{3b�J�}��%�K�h�0�ǕÁ��?�I��Q�i�b�;�-n���	#���Os��S�-�M�K��E&���F��
5/���/1��G����+m��(�T�7�� �Γ��6��m9I}��\��ҩ\���;s�&�7N���)
�lG��<͙������q`�U�A
�����w0w|�7[B|��W��-{�����j�v������U>m'�M'y�2���q��Ŵ��2�^��
���y��m����o [...]
-�_�N����^j��w^��lȴ�g2[F���3��\J��㈣��8Cm��
-V%�w�q��C��JTg� ?ӺpCZ��L���H�mh�d�&+@���� dQL�mtAY��eS�0ù�:���i5�Ɋ���
-yƦ�BJʧY�TN�k|��74*�4o
�6���q������ҷSy�Ѫ�!\3��,,u*�)M#���рd���<�,tt8u��c�8A�׬D���M��B���|��N��p�}'̤��Z��ei���I*ʝ�V��݅'��\�*��������!�wiH��v��j$TH�c�~-g�+�%��?I�w�
�>2�
f�����
�$3�Bb��@���Oz�y����)d	���:���|wn��3-A�n�O�hX8[���0
�9ɫ��jZ&։
�g��ܼ�h�
 ,DǗ
+�z
�	�EH�!K;P�Z����vkX@q�DzĽ 6 ǥp;}���k����
e�8��
�'�
Y�kL7���Q�>o�\:	�Q�!���21�;��xl>�.�	�Q���]

-l/q"P�!��`���ԭ�QIh��
�CRF��D���L�����D%��A�$Z&
�^aa��v�t����I���$Grp罐!ՒW!���e���>��h}	�F%;I��$��a�����9��^-��&�9ϲ�[Y��탄�x>~���7wہ틏fd�~��S ��
��q��Ѹ.�9��m�,�\P�5X�b|�ݒ��ʺ#|�������-��n�,-R �iQ�%|���F��d�
���>s�f��'UȒHw|�"��9�ɶ�QJ8����N�qX*��}��j�B���CG��p�
����?3�Dk�P���|o�N		Y�@R��śX�쾥']`��~a�����4O���|��q+���m~Cdi>SA�ז(5��ʊ����S�z�+%:a��#��|5�:O ����"�Dp���z�D��-f!<nn8m����o�;�(:��
-GH
I|B�������a�7���0�'�
�Dg0�K]}Щ8�z�4�\)�ϓ—��~&�Ts�
��[3i�ң�0���e�)T8)�CPE\Ԥ�BN~w\1O�`��$ь�eVRT�p��Z�Ng�@�*
evLT$��=���U�
x�U�ZH�
-L� 7�V�/�dT)�4��a���H����㥟���:_��HJ�ڌdJ`�Rv���]��y�wWٷ?���A�'iƉ>��
ĶD�ˡ��k���Ds	S��I�\*�6�k���@���o[�0rf
-���p>��T�O�[~sP�E
I�Q^����"Q{��t�Pk���ܾ�ĩ�\�'��"��}!�CG��P\7?
�fR��Q��i�
_��0�4�ӑ�� 1ky|�#A8
�HM�g����&�������g�+��0�+�ȶ�Ůt�ڢ7���:1���B6�w�-�T�=tn�@ ����Gb.y#��<�
�FUPU�Q�B6	���y�	7�[�~
L��v�<����@}�luQ����Y����E9̌�{���F��1���T��	~��;'F�֋A{D�Tǒ|X�U�IW��Gp%2a�g��'%v�,X�K�:fv@��3�3I�(~�����4����g�*2oΔ$�[��qy��
D.�-�D1�먏<�
 �S��<�' c������8�\��o����=
�Ǧ��R�m'�"7o�6w���>�; �C��<�q�#&B�C�5��u
-��I���m��A�~�T�BLR73������Vg��i6w�,1���r֛�
NꜴN�Z�I9hh����grd�R�?�T�o�p�R7�Er(ɳ�Tsę��!�?��J�M���1n��<�?��nٓ�ϓ�(j3�`��f���T����̯��i����a��;N�1�e3�cQ� O8o-���
?_�e���O���M�;M|�뎵�*a�
7l�a~��7N�����uc�����<���8�#� bGҔ����@D_=4��8H?��>��w'Б�!�sIN�� 읔^�^�7h~6)�&�[��
��O;|U�U�� S���|�����q%a�\1��u
�2�Y�ruV�)�r�j�j���m4�K��e4Q�mJ���0�:M�5�R���D��/t��
����i�2�+!���aHuW@�R[�`Ot!������ �0�
��D�S�ȶБ\'VJ
P�Ur{��o�Ȑ[cK��
b˵χ�n��T��8���
1Ps]&	J%�W���i&��1�
U�f�ǁI��إI4��VT��ɒ�%�D��Ջ�I*ņ.a�4�?�_O�JQ���n��'�\��=�KlQL��K�B�IPOq���
ꁅlY�jhC �vZ�=/�mԴ�`C�<0'c ��!X�x#�.:p$6��"���y��EoN�?t*�Q��2h�	�
���84��x>���Uۻ�b�66�9�� ���
���U����Le�
m�y#��O�
k��L��<��89�O��Q�òj�|�'L���no�R'�i�|�иJ�]J�սɢ��
8h��u]�4|�_���d�#�$1mk�[�E��5�ޑӹ�XGUnKA*+�.��} �DBlo�T4KP�δ1]g��y�tƍ��2�^�
�H	J�,��aIk_��mL�If_`H��S��.�٦G¡;�;���i
��v�ƚY����v�+��Z����c��Y;�.��]��5���F���v	���B~��m����Q�bۉ��@m0�,��  
�k�bϐ
!�U���Y�g�)����f}�t�`�����H�,��
�׳��E'�l��<{����{�5i�Z���%}i��q�<���吇������4�u�'��3���<^���x\.�R~u�����v��t�O�.�aB- ���@.Uf�����Rv��(噜���F;~�‹tX�{U7i���M#eW���;�.jb�
�Y��j�
S���!�3�V [...]
4
y�j�fG;�[�8���D+�h�=� 
����:]��6M�g���T��r��(I�����2�4�^4�w���CP
��KߢJKn
�J� ��Ǒ\֦�(
-��"��(D��"���ԛ�V�fd��ƹ�n]�z+h\˺'ۛy-tv�|�ԾR��G=��w��xD��eo�$t�mR}���`��޿�M�=Z��Ń*ܠȆq$�;h��hc7���Q �QIj��u��짧�ő�}�-���T��EW�]�1�mU4t��<����&��E���N���L�}Qe��Z��_�lYN
iD���8��$ z�ps����
��=	�L�8W�&�}���;3�۩��
-�	`
�R�A,��
ݶ�
�PL�㛙�����(.&^��暜�c��3
���ġ���'���mY]讳
m}}��;��~%""�e;���`H۔`�=��~+�Q٭\��*Ym�P��!,�� �Y"�3�`�&��@L)���D�E�
g�M��%J��d5�U�a�k�Ǽy���44���	l۫�R_>|÷:��4ТÛ�%�mk%
wm�9� ��ki;l�j��
-��éb�F��x���Y�n0�V�,�ƕ��l��JB��ϩ�pI�z at 7�x,��z�n$Іq4����*�Bm�p�]#
,�/�iѭ5o�xk����z��<����8#}:/p8
v��L��,i8��F�}'�1'�9��'�*%^64� �_����c�e袆�X��J�,NUABT
�La QW��
�,M� �E�n��
=����P��V��):R�$� �A����iZ7
W���r0�Př-R����B�Վ��q�������N�oVv��d.DG�N��2R�õJ%��Q�hQg,0���� ��\P��59Z��. �����z�@ɇ���7�B�
���{�
��,N���r���J�(�oZ�Z=v5���O�s�sb{�&���A,
�nP���QG
$��=G�. ���{��k����{����W�������I�xu�Q&�5b.,Ų�s�bA0��yԱ��y6�T���M|��[M�2���K}���9�^:"K��nL�G��K�i8��t�E/�ޓ��x�	�ȭ�^ D�B��K!z�\I�ٮ��ጻ�t-��7��K�5
-Fm;��K/*!�m��zx��ސ9���;/�
X����ݎ�K/ �/���������
-��д�о76
�o;c�
u3W��J}��݁�-O���.���7��m ��|����C:���
Q�$G]�*m>�7��
�
B4z~��0I�]ȉD�PJ��J�J-+?{��U��HR5��g\k~
�fn��U?�ŶU���l�@���b�������AR�k����1��
-��蕔'B��歧n���|)B
��z�M	y\
[�l��S�]:2C���=�F� l{v��Qo�zJvY~��Cl'Ne{�KA��O'n�x��9
��O͞�^ʲ��m��4TQ��}9�����Oo��f���e�C
�Ė5��
�t(���n�:��.j0�� �E��/�h�Du6r��m7��ڿ]u��. at Lc#w�:��G�\�40�CI3����6|T")��?�O�:ꚨ~�M�zl<vF`��� g�;�T�C�:�Ц�s;�Z�̮c�8��TQ�b�D �:��!.:�q��aY
�:����~
oE��V��
�2
�Y�_[��R4H���6;$]GTH�
�a��*�+��qP�;3R�(���
vx�����/��OU��ٶa�|�Lf�;h7[
‚֫� r~��炰y���GK�ȶ �"��� �ٌ4x�:������_��1�y�Vc�W.|#�U��N�˿�Cp��;Զ�_�N�� S�G,�r�
��D ���/ȼC�d�Lʾ��
����X��c��o{���
45��_��;V9�����U�h����_��5�� ������8b�M��<�v���g��5�P;*
r��[�=�6p6��K�W�a�p
X�B!�W�
��}S��t��B�G��s%c����QoH�4�Z�<^��
嚙����-��qH���z�Rlx���rT��kx�!�$�+�k
��
��l�|��p0\�OH�$ōWY��_���:�qB

���q�w�l���ݏ�Ua�d��X��L�y�j7� �v���
�	�
ڒ��
2��AMr�,lȄ�<l\f���#?��u/�ٽ
%`�Tx�?�P5��V
��:�����t7r���h�M�;��w���0[	fc��<�io�T�Z�I>c���R�Zq*J{�R�g��O�ې���2���	tŴ�n���@-����s��w��n�	p�@��
����H��:���n�B�uM�
"'L�m�erI�	��ϗx�&h���$��5���8�
-���M��vϟ.z
����Cf��U�r�>�����F�Ę	'�
��+�b�5#��XfgQH���e��.x�1nc�o_uj�Sk
<�#���}
<��$OJ�yp����}�8�}��j
�w�m��N�Q�_��6+��r��ͼ�W�X*1������mI

r�m�!�c/ԾF��4لo��3 at 9X�����V�rӾf�~��6��Ay��goݶ�O0:�a
-�gZx PH��D�ym
|��&g-l<q�F���.\������ϓ.O�Ǯ�D���m�@�e at d�B����� t
-h�Y'�� 
�}�>#e@\dT`����#ک[:�i��bs���}s�]2t'o��ȧ�l 僢q�~���@���zNX�6��1I�x�iO�.e)H��ö&�MV��P�
ZdQ4f'���ڳ|��
��Ҳ�fB�
��'����[IJ$7��
l,g����t��6�!w�"��� ��cT���uyh��D��R3��$׻�#�x�Xܡ)��`_�ܭ
���J'ʰ��(�0
bj4� �@��3G��Mt��n=�GŘj���D��?����6I�Q<t 7�r}��D�K�S�I�{���ok�x`���"�C	V�l�0�����7I��P�V
q�N��0b
�
�P�t��V�+��~�w��-�B��(��\.!\*�WrQe<_w\�eڌ�>P�bʂ���ڪ�oo��=��8��24��wlϣ;[/ֶ���уT��-z/��u��j.
-tDb�M	�d�Au����3H͒���	�(�
-��WF��|�X^�6")x�T/�JN��+{9�i�:�P�U���d���tJ��/<�(|3�*j�+}^ ���G�G
D�W��X�ύ/G�;aP��w
-�6�
L��BbN^� ��$6��
ZS `+��-x�A��A?�].&�"�q��U�&WY�
�Ѳ�gvrR62��i���^jn}9
��O����&gSMj�d�5a�������n��
���]av��xj�foC�֒���u,�G�B�a��3�Ú\��vr�m/�>�;[�%G�Z��B5a�k{j`rh���ct�/�R�z��N�mJ"���g8u���xmv
�Q#J�
�����q!�k����X(�T�v���o����_ui�vO��v�D%G�Ї�0(S����#���BiA5�?��+	�m�2���Ĺ.ul4�#L]�o:��aӵJ��7#rAm�5g�H3X�~D4�y��
����9��ö-*Uh�٠�����"�;��jmcT��
�(��R��՝+��=&����&�(X[nC�'`�j�%U��@�=�
K�=�0���d��JR%��Ft�Ģx7��q��&��$�d�R-�K�ʦ�æo
œ�8�T?ظ�p]L8��#���l#'~cm�� 

.
-�W}��~
-�@wM�(�9Co�y	
���%����G�>
���(+���t�M�B
ڦ^�+Е
9N����bڄ����$���NN�0�
>@���$��hI�;��
6�o-�#ϗh�ƳJ�c��.u��
pn��(��5�2mB�fҢ6�!>��9[���K�f�����&�o�{���}[�\�(�g$u�:�!9�����͐�]|�䓍D��\I#Ȯ�
-�|M��S��t�~B₯8�)��Z�tI�C�I Kjٵ>
I�F��a?�R�
�Z���ͭ�f»9
-x�\2���<�G��n4k
v	�A
"P�`}�4eS%�s�>�O�GRd���8X��ͼۋ�31�YP�<6?�"CRΗ��͕È퍇Q���&�7ھ�{n��6������5�(6R�
e���&j�)�z����lNh|��$l3��њ�	,LdH���
�mD/"��J���E�C���9~qm"�kou��R���D���ʀ�$��B�Z��lL���A���H�q�S�����q�ttI9l3�������g׍�2#
-�FTr�fO�
�F:���썆
����IĊ����ؿ.1\�b��/��3
���A���Ih���
-H<��B��\��n
-�������"�O�x6q�k���E	�rEߢ�6m��F�P׈� ����������!���H�)qx�xh��<�R;[���\m
-0z)W�M��J
vJ�Wt�H
�Plʢ�z���2+`%����Yg�ms��0���L\V>�f�‚�����fҰ7щD7�
��v1Ӈ�[ݧ d�ȅ�.4]�*�)�^�ظ����|�:�!k����<��k�5��A3"����E�xm��
��S�CM_ �,M�O�a�["
�?�x`��Qw���A��BT*�P�M�

�kw6�:Xm�L_ބ����ت��!�d�&��BH#�R`W��
-a�H-P�\����dDGH�%t���p
XkY��&����
B���Kg�c���vwi�Q��T����
-�ޚvlA���3l�^*�O�$���
-��R
��,<x�mz�"����U��c����."��k�
Éz��e�2f�ߺ��l�
��x=�K[Ԑ���
��
D���9�:�q�����D*g

��JE1I�����Mg�-�>K����

������eS�P�H�l�� L�-�u�
S�bP�XS�� ���^((�S�� �XX*�*5f�A�'�
�y-f��):�)��ϖ�u]@)v��^����r��J�y�ٯ)Ϣc�Pi�p~!�X���Rd�jG�~�NBls[���Yk
��S0�M}��	��7
�I4(��z(���MGpPY�`7� �kG���XQ�w
-.	DJ���*�(C����zh�k
�
�� qQ#	���Ӝ1M��%R(H\š[���7̃��ZA�4���^Urw�Ds]��bm��#س*������-�
-�����
-݅-x\�R]W��
�8cz�}z�ͷJ£F�W��ݡ����l/���J���^��Ro��<u!�ۄ ��5��,�.߈�\�~h!�V�
Bצ�m��vz�!D�����v6��yl
��
�a�-4���P.WXĻk��m>�Q�

�iT�Dl��fo���<�49t��,PP�
J��F�>���z�xCҰ���
V�>,�����3�K�ɀ+��×3z�������1<P��ag��z�x�
��󂖉�8wQe 	`����k��nOj�A�rZ�e%
ݟj�A�8.F�sh�=�尨i^!���]oo$lT��;"
-�j@��y���l�a���u ~kf-���Z��;IeHnR���zQy�P-Hd�ƽ�@7�gR�C}g�EM�()�������
G��x0��"�i�kۦ�
|\����J.:�h^FKb� '�0��5�<�hȵ�����K>�N�S�:��=3���uR	~m"����Ŏ�
-E������T�*{; ;d�\�D���꯽lO�
�*�����>���hg��)>�Ճ"T=�
2]g�e��̐�sLF��_���͡宵��n�Bn�}ˋOI�:��|>
���d�l`�u�nA%ycF�r����|8�bt����k��L����z�㚧\c`
h�Bl12"�o�T��{G!���,�;z�a�$	��v���C�e���<�=ð�i����
��0�#�%nܜg�P�!P�G�	}7�5kV�r�cXl�Ŭ�&��O�kXN=C���{J��>�S{���|!3 
He�:���g�Rho�
l�jw�������P��pFtJ1E�­�@���#�|J�����������a��*�o�	�im5��3�]�G��<�&�
�#x�;a#��昶�j�ʢ��q������P,�� 1�ƅ��E?4��
�q�����J=Xڐ���.I@��4�l��_�Y�R�����OLΚ��fh�Ͱ�\gLk:��鴟�g��DB*��A���S��VB�
 ˽��ZFБ}�JO��Zm
���<�,��
D!QNL:�E�&������%y͊Tid9�k\2
-/����bjA���ʹ�$<�̭h��
EO�|AɬP�g�^�zۗ�ɩ��΁>�8
�lb>���l��i�u
�F���Efs�:,�&� N�GC�%�TtM=R��K2���y��7lL|D�6�9�|�*?��t@��r~��P�KT鵻Ck�	��\(W�@��X �e/>�ZC���m��3���J/"�XJpj�:�9e^O��<^J�Z���E�� ���w��s�*�e.M-Z]�:�6�m�T�]h��^� �eֺ(�4�P��ɚ7#l
B]KY���jx�P�}4��
-q���%�>�ݜ7�ʏ�� 
O���}0<�Z'�/h����ohU
�i��'^���"Œ[�
qҮ ���_�q�x���
h���
��u����}���M'�[�V02a�[�6�]3 v�M7`}�6
0C��~�
�F#`��ݹ�O[��S��
��`/xkkw,�� $
>@���u!�-x �� ��zC72/8S�
��	�:v+��v
-(1��+�1����@���
��&�V�)\fp��38�����4�
�C��
aV6�Bf©��݅eq���p�xh���F
��#v��f���p��� �}��b�c���!`�۔F�ï����Y����%e�?�vBC��
-���R�K�0�v���
-���Wl�X�h�1cM���7i���fc�ɚI
-*ی����U&�FC����j��	����s�r�^�]8v�y�ح��c��.�
{���xh�
-i�о�Mχ6��ݏ�dk� v��*
�<k�"6ǭU��d����f��
-��JNl
�U�ڔv���y!l�,�Ŭv"h�cuJ~��u�Զ�Ō�����կ�2��+�:�����F���tW�CjT
-\�m���cяwO-���㊅C�r�ٵ�x�h�WFa����6 ��k5�G\�k
T
�A����^c-�)�fS�@��j�Z��y�'


Y�]U7�e-�;Y
���B���Y
ޏ�����>�Zv��v��?fƮ�'�
- ��s� �9��2ĵ�b"�z[a7��L�2��M�����Ӊ��:%~9��B��4t��Q�� 1�e�P!��,�6�L
(�:$K�;��	���E�Dp��ÌOs"�(��8v=�W�
-Gl�2�Y��~j��\^(�X(܈�>̒�*m
l
g
�s�����"/�-��R�����G���&����D.H at I��hE�WnW�A��*�sd�5g��&_ at f��9%�u�D�~`�H=�����%tQxd0-׋����L]=jՉ��-�M�o��y@��:��z��4� ?�^Q�Gi�$��*��_��-��G�����JL/�a �Ȁ$6����6Qj�%���Α"
2dC��:ˈ㲪�ǁ:�~�����Dh`���<�
-����
v����C	��,K7�Ⱥ���6��������b~�e�3�&���)�3�Q�J-
��4�V$4q+�9�2^��_�VZ�����j���
�#����6����P�8���ʤ���FƼ��'hCY
�.���G3����?�ox�����!󳭫��D9cg�̄��!e�B���w M~:�s��ük�R�V�EȘ�
��L�����z�-����S1	�lV"�뭤<�n�Z-m#���wi�XL�-A�	:��N#۽KN�b^*�����
� � ��9�V��}��>���$�̵=�6^rȨ�
�;�d�_=os��0��n�W,���\�fy�OJ�˙�/�vk�=�y�����tU��%�2�Ԧ]�����7�����ʀ�d���Yy���v8��^C�,l:�Hd>�?�0-*�B,�������Ԥ0\�7�3V�]R�~�Q
�
V�(����i
S��0�^_�Czb}�����DC��{̲~7���(t��o>��	�N(�ߛA�r�9ۿt���'�U"���
��g(Ϩ��{�(�Ա
����fq�� wN���c]��ݭj�+N��f����$y��7Ĕ��Rڬ��d]ўހ��}�p#(&"�+��qn��G��B�:sI�u���Q�V_��J)r���H��J��Z�WJcL٬�8K*��D�4��k3�`ɢn�{�u϶��Ml��'|��2�a��Y8�{���m�����T䣅��)9_�ڵ+)}e�� �� �g�)�G��3���*T4� �����H��ˎ����4�R������y�
?��za�>Ƚ���6��.���~���O�Z�{R�&p;��%
S3X�uv��]$�9�-�a��O�]���Y����|-�11<�������g��9$!e)Z�4
{��v���GX4;��I�O��)�*�k��A�L��oX4��;������|z�;^�����4�[
��Sx4O}�ь<�;
͕�>�h��@���oX4M�ʢX�߲hr��E���.)��E3��͕�>�hR�-�f ���7)} �
��["M��왁�>�`z�-�f��ߜ癞>�iz�-�f��t���>�iz�-�f੏t�+O}��\���4W���N3��:��R���
,��N�f��Y4?^
߾YFOR����f�i�ث��ě�y�m��
-��&&m�G�-��BL�5\�t�U_�Ԍ2"�⏎��l<�`w�:�F�5�[�(
ϔ�"��%�ses�޴e_���
j��|ű��~Q��k*�+"�+쌫�E+�ׁ>f��U��{�=��4�Zn�WH|����F �[�}	��i�E ��M�t_��E��n
-&ݨ�
-.ax�G�Ⱦ"�)K52U�y�U�5w�lZ�J������M�V@(
�_�~�U�-�d[��o���K"bf� �A�6�,h���a�
�xl�[l^�6,�� �[c~o�a��폾�8�(��NW��k�ڐ'iXz/WIS��M�WqX�p#�t��]P6��v�U
�,p	ҭ�
-ȡD����
ڰ��[��XpM%���	D���a�Z�jÚ7��O�Ұ
���X+��-��- ��'{(ê���\�)�����S�}oZ�W���u䦢����E����E�����ĭ�
�������M�ĭ�
�������E�ĝ�{�'�fn�O
V.�'n�\�O
�.
-)Ns�w�.�'��.�'.�.�'�]�O\�]�O\mY�Q�Y�(��Z�(��Z�����vQYq�vQcq�w/įd����M>"ڻEcѢ�g��3���gY@%Yn�����$˴w�Β�¢u>��!��]썾b�}��6h�H�<Bn;�E@|oO>��=��+�R~5w�
˫���`qE �ꕻ�
�k����_ޛ��X;�Gv�c��o�(_6/J�Ȏ����9಑
��O�n�by�ꎙ�gMu�;�f��?ȍ�^��rc�����\e�c���OB�֞dHo1ȍ	}�vq[��-
��ђ����Q�Ƹqu�'��6jc�>� �h�[�1mʅ���f��ڔ4��k�6�P�����*��m��Z�W"�W���jy*�U�{�A���ژHԗi+��(6V'�TX�gÓ�=T.ixvԽ�7	uo
T�h�qq����Fձ�"�"�e�� �IoD}�Dj�[K+∽>� ����w���
�,L�7N��
^�Q�
�i�pB$bS���bN��%zc�J�Ip�N��������H��_/�zw��W`��`�1�$]��8����TF�
lE��'�s��C�Y�d�-a��mz tN��E�R[iqR�ݦr !	Gp{D����45u�8�AH��Gzx}�B��
d��
�+�W������58xUo���
�b��Ӽ(K�C�� [...]
-v�&k���`j:�QE��
-�~��J$rA�ah7���c���9M���4JV
��M)|��§(5�icO%�1d�ߎ�!��B���ݥ���}����Cx��-@�&k|�����\_w(A�Ku��	�d��5�����/�
�mY��u*�-
�,�w�;3�\���������rn��ͤ�'�H�=���(ݜ�1�m��.=�z+�f�d�ê�Y�y���S=��䤨<'�_�;E��
-��ʁ��
mK�{�_��OK���>Ͷ�qYgG�|D�A9��̲�CI���KW�,9���d�"3X&7E8g3/��Ź�^E�D�	�^��
-?k3\?���퇭"���˄Wv��'	�^��a�
�#��of׽o�)��uZd9�rP����D

-q�*Ma����+���
-Ƈ�]��7r�|é�Ed�pѣ�}�
-3�>.�LL'�T!4IS�^�3��9m9�A��ʒ�|�ZS��mg��(�3�����{����3ۓ/tX�N�����
-�g�/�D�H9�5x��:y4���á�YB
 �.�=يX
-<I�Y3��$mr�C�y�4���<�N���_jE
Ձ�I*��ʦH9V�A�,(!
�0�,��Y4���B��ï�)V��O;Ѓ'.�S�@�
���-��Ϊ�|e���	�o3 )�^48	]'N�&�=Oe�q"��ܱY��×f⢇w���m{z��W:���K�WON#1P�$@�y3�75By�"�st+��T�Q��P�Ӣ"�j2{���X����v
���v.�w���~ۑt�:���|�t���5��m�ٗ����V��s^�8���߹+��z�-�oV_��/�j#�Q�"<:�]a
d��E��
��D1����ڛ�����
��M�oj��>
ipۗwb̒´ӟ.q�4�C
o\/Pe|:��P@����?��q9�
��Od�`�
�5ss�����?��:/M��?����_���~��?�����W���S��GP{�Sf��3]]��<}�=�ϐ0���j%�?,>�t��Rچ��*�[jb)�4�ҡ7CØ�W+�M�-y������a��Ӭ8��W�SMN�mkf>�(�i�Z��r�ܸ�L�1���
e\�i���Y�	�%��
_t��)^�X���܃I�ٗ f�tB�b����yR�p`\��6�[�
-2�M���|&�
-��:��<���£"3��G.�����|I�%��Tzf�޺�����,����`37bk�${��?�,B3���,L
�9l[< Z��r��
�k�&ڻ0d�w
���던��Ďk��@I�u*~���u��ur��	�8ZQ	�T�)脫S�)
q�C��}��WM
e���7쬮"dS&��0��|J��
N�>�
�r���˿|/�zg�E#�)@״~�s�Q:��2�L\�dy`��d���X|t�n�DV���%Ȓ��J$���zɔѶ�*T��'��n�,���V�0�Ys�
H_&�Y��|DHTf�9��O,x�u�I�)7A<��ZT�b3�о}誖&i��Wj.!M��)m��ᐈ��
���S��:��1�ܛ;hc�N�6��I��yM�P�#�	�I�R�� �Y��Qf�Җ�@��k%7+�&�u
�Kq�嫉

��Tu ���d�#�b�5:���iЫ�W�es^�L�ڂ
-�ф
��2�1�u �,�����ƦEc�.��t��_S���W�V_�M���PD/�Wq��bf!	��������]`'�i��DT�
-N��VB	�"�H�6��M�ܧ ��p�"�*�@�nj�yg��!�!�T�T�
fIK\
-DH�C�ɦ!n�\�(�k��\x�$�c�
��x������`�%v���9��˩���-�w[�d�._#>�
x@�Q�T���;�cx�;J�$(B�bu4�I�
-I"��L�L���42d�
-��|Qѩ�����
-%�dui
۩���OB
{vZ�n�cL��-I9S-�
+k��W>
qQk�+q��Q0+�rx+�/�]�K�1�2t�a��cӒn��ty5���m2�H��9�Jl��6���}�@�Q
�&F�H�����jer���61��2�u�b��ήJ�4s��P��"�D������/��7��(b�������<�b@�؝H������:'��;��>������N�[�O�}
����Df�}e�!1-�pJ0�� �ѓ9g�&��B� ��r��+#vͩ��N��Dv
-��IE��2W�'IN��m
<D�]!o@M�,/Ax��
N�$�2��^S���>RS��D�� L&��*��$���F	��UV�{�2�(V\�����
�
�����}�����wǖ�dg�R�ۤ��u�7?Ya��/4}m',�W֦�� �q:A%Do����mb^�M�M�[
�7�`����*�	=�x
���Sa�HA���O.s�.i��9�*���P�?�%��c�غӤ
��$[õ����Z㩢*�
����?0�	��W�rQ��:f�t�h�LǪ
.N	㘴pYOb�}b;�z���C"�ͩrlG�z�0�l^z�`��Y�>/_O]��*��v)�I`������L�Z�gA��73���%�!j�C#�{	#��F�w������ژ��ے`8�
6���Ns���J_b��Ф%��d%ة�Ba^�Ͷ��F��

Y��>�46��B*A^��͜7� Wޢ�J�]:�H*C��n	��(�e횗�o�����
 ���@�����5+G��A�Ϧ��=J��e
+`�֝��~�=TŁ����S�G��3��
�����?CH��
����
���0�xm��TR7��::(co�PcUk�j)!˒@�bc)b��pc�կ|�hߕ��8���}�N�2�&a�7B
-�fR~rd3��{?h��j�F�k輢f��h���&s����;(6/�&e�8����Զ
�;��׆6S��-����!���-�����	��U�M�m
r=ױu�a��n��L!�B[���tk�k�aE�#і���NrU)��ȳ?�`,
U��ˆm0F�X��!������	�`@#w�&&�l
�
��������
؄�aP���Ԥ>p�N�[��5������$�Un��R��
�7;��<�mv~����N���o(� �
U xyc��LM��ձ�}���IWI�^��P�b��X3�&S���O_�#b��Ј-��V4�cR(�ĕ!�7r�-�#1�Q�g'��$��)H�f��7��Y�g9M< #�mΣ����]L7rqk��>���}���&�Lc'�J��MRCG�q��D�ݽ�%jNu�H1dR��R�S�զ�)
蒴EC��Yӽ���>G
5��,)f($��4
��a�<�!~���~�,?c���
-97���O<=�������4;���� ��a����Ǎz[}����� �hs�bh�O.�F_����{m�Ǽ��_��r��U�I������j���@+�M���`.��a_߶k	B��$(�=̟��*�Ta��94#���¦�vP��1 �[�F��_UHi�t��v6����W��CX ��^m7��.O
��j�1iX��j�$Rۉ:

-�W�ѭ53ǟST϶:s����
-(
������l˰p����� �������&�h�vkRa��H��������+
-d�-2n���U�%|�D��l[�_�n� }�%秧


у��{��O���:U��<�C�΍.�}[��<��ٜr�l�E�}3����$����c%��uq�Y����A\ ×l�9�x�7���(�̳ݫ�o at d�J �l �.��"�:h��xZ�hW�"�!ј�{WÀ�/lN��x�E��@�ȼ��O�zn[����j"u�K��e���Ւ�}V��\�H%ہ���x��
��S�\{��6ͽVC�^���͝��߿9���� �
�sZ����B)�;�me8���m��g�اr>��8�M��&f��>	�O�@@~�H���L�,5�hamr���
��6��c�x�y�	�E����I(B�j��vn��́=B��ɷ�xЎq��	~�
(" �@3yt_`
'��{�L6����u!i���Ցb���X.���t��TlM=��'��)nb� ��$-�!�
]����H�kye'ZI�������=g(������LW=�TP��I#>O����ޜgq���p1�R%��+� #/�P
��;������>�爨%
X–�,Ӡ�n�L��������K%ZM!���nF���"ha�_�PL�2�⓺�
��nA-j
�A���uJ�a��!e;$�vB!�PX_�YF������#a�	OH2������Y�36��82<v]�S� 

-��,Dp�����O�>�8(����YLH� 1�QlP�jM=�
B^R�7�-�̤E�K��P�Nt��@UYa�[��;;�A�+��ΧH�2. ��Y�x�C26�
:��$���
�S�tqy �u'���J���z���dR�R	�%ս��'�7h]�BY�Gƪ��[h���֙i.Hى�Ї�S��y�f�%��d1�#�S
-��%݊�

�$n{��w&�M�����~wB��Ի�
����a�X�s��Ү�a��A�
%����aw7�Ӛ����hӣ����2HQ�E�5��˵�����d���)9l�69�0��y\���!���BX����4;��
���*�
-&��5�
[�����‡,��8�����f>��
�FߧDɠW_BB
>�l�b�r��Cmbf�א�����o����ւ �k�|�ֺ�T�
Y�M
�����j�@v��#����f4��p ���Q�S�j
.��	�G�9h��4�0�A�]��B�T��y�
-T��0b�LaTx7kU-�ߵ:��u��^��KQ�1'֒�~J���83��f��k�t�J�rk\lk�6.ص�_�K�8nk	:�8K%{�o���u�
%��o���v�
%��it���ߘ��&a"D�21
��֒(E0��lh at ul-�
-	v;�IV�`)[w!�[�� 2�O	P�7�M ��(�}�3�b���X�
G.���
`P���v��.�
-�
-��o'��	�
�"v��_�u�N-���C�2�)V�]�L&V/�2��m$t
��
-)��؊L�u+�1�+F�
Fl��8j�s�g
�W��>�^A��<+�5����"��ژ�X��1��b|���+
�*n
R3+jy�ᙘ�5?��1�4����T�j���
-�	������<��p}����6p�!� �wr�k��s���5/��Y�����w�CH��m8ta�
r�߸�Ρ�c���#!�
:PB�<�ls��<31�̈́
~h�� B�N������vu��]��¡*�Z��#�J�L�r"L���+~æ�RD*�j#"���hCk�H}*6��rr
8+�q�s3��")K��]�R\c�I�'�y��
տ���ǵ��^+\�c���Z�������pex6o�V��+oE��+��@=�t�o��v������`��ZU|��Z����)�
-f|Gk�o~4A�O�z����V^�g�n��Y˾a��q��o���*XK�q
�5��x�U̐��_{3q�ϯv��f`%���Q�{�T
+o����jBE�y
/d��	
�q at Om�Mj

�e�>��`�b���f�y�bL
����\���d�?F
E��ߏ�x]8����*׾��u�O����y⛻�������wS'M	2������M�_>
4c��ݚ�����TE7#�~*g�
~~�M��Q���z�p`���3��<
-֊7��"hĨ���mNQ�䚉h�'�W
�&���G
-R�%`e(�o�3�]��w���C[3���
-:���������
�+N���ă�S
�A��X�Ny8�j~gv���W���s9>����}�����.[û�e���T �K��ۃ����Hbm�?G=v#.�t;�7?���z���yw�߬:83��b�T�#g�tb�.�����n*�j�jL&���Y›
��λ�g0��Q6���3��9	�o�Ѿ(�P� �,�F:��
-�2���1�ZO;�/�g�;�M�g��Q�/O�0
���2
��	��%wR��Ѥc���$��E�9�w� a��1�߂ 1U�G
�l6B�JJ
+p���X;l�	şy��!�����@1�I�O8��Y|k3j
�S����@!ۖ�����9�-'� �� 

-��Q\5J,
f#K'R%e
x3d
���e)3 �`�OFY O6ub��=���U
�d���F�D���58��TnͿ��s���G�

�,gɞ�
��	Z�#K��Fd��w�5Q=:FB���@Ǟ��EoE�����" Hb��~rq�M�é?4|�:\��"�\��V�\�����lƛY������<���.x�ܞ-�V�Y
յN�|	q��jf_u�ۡphY���mW4�bd٩�B�6�3���uӅ����=�ϭ�č#n���Yo"&S�H���@x������k}-r�.��;e��F)�
�ﱋ4�wKQw���eo�M�j��{�K*��h��/�Ha�F�d�”
Y�/h��$	
�@�b
�ʣ���V��(޴��2��
���ӝ0�@���e #.N�_��
�^��m��>�)�L�������N
-�]<Ϻe�[	;���¾}��{�op5�/
��A��
-S"����
-&4��`�׉}�����^U�g
2<�va&��A�Q�P�B�}�N���t�!F(X�^
�&�&����������p�ӫRD�A�d�ܞ9�T�c���z?Ha�eQL��$��S�U��؜�ι*��d�S2B�5�\;�9�j#8��A~
�-7��h�l �i�6K��ͺL���+��m=MW��'��H8tu�d�l-��ѹ��

�8̡��.Q�����3f�.R.�
-�'����8����#y���&��t<l*��Y
3IW3mU�r�F�<kq��*�AW8�����螛q;���$O �\�d�Iz�ua�$܂1��84�
%E{�OhQ�y�4�~�qâ+M�yOm�
Ʒ�J� ���y�nKLH)���l�T��K�:d�1�7��T�Y�����̂���(��ޮ7?�
�S�[�R�/��K�H�vG����K��&���-��fήɓ5��w1@�O�  �"搖�:�+��4��q
���Dͅ�)�XUm�^m�K�
��+��d���tD�
�
[cj�T�u/�ڨ�>�I�8^Z�
y,VQm�f|�K�q9�]���:�u.b�<Vh{��I%k�K�%��&͙��w�H��
��"���r��k�.^����*�h���r��G�pXϩ@_4ǒ�T�
D�i#y��
���
O�ti�W"?�M��i^���$@,Y=�޷���P��
-gڨ�ɨ�^�#8�l9��=�!����)rW!��:���l�d�82{�yΔ+�
-�
`A��f��bON^Ze���9���&ۣ(�
S�0'�^���[�V�T�+�����)���������G��ȣYd��Ǩ�ʇ��-�'g9ˮp at C�d�/��e0����Y��\�(Y��
N���
�D�)	0 U�hR;���9O�ķ�M3>�v�j�j��A�ѯ.�dk
-�Ss}1 ��ԩ�_P�HجJ-Wn
�`�V�1A��á�w�
��w�
��⁂�2cQ����A��'����Q%J3G�γM��I��\G3��rHC�
n��o�������ٻN�-���(ۻ��q���y!Ŝ��
-
-s��w��Ѹ�v�n�=;��U��'e�L{7��K�e(�	'E���>���]y��Ce��r�������eOf��
-.=n��
l�r�u��“
�.Ԭ
v��]�d?,��=����
-��C�Y���.UM������K>�%��"�ΏL��i�<
�t�_��+~j��ڼ�b@E#�0��`�jô(��07��9.Rv$�$F
k5`�!���L�vdB��duv��	�i7A�y�]\{��u3����`� �u���"��჻��8�d[~ǍĢ�C��FQ#pͣ�2�.Qb��)�-�s�2!t�#��;-叟���I�
<���^ua�wn��LREG��<5`e��P�ux_�@WO55����N�XE�0}��Z�=yM	��ފ3ʏ�H�ϗz8��~��_�]ž	�ؓ�a���L
-�7��;C���p��<h�n/�^��7�ѥ
 .>���U��wrl}#b9q`;"����*,�H"YZ��9�J8����­���:�IM
^�{�&hS�<
�_�L���tyi���y����j���[��c�K�d���P����U����,�����9���Jx�a�~�{{
�2l�a6ču3���
�f��������c�w2\��O~���������O�����'�w?���~��O��g��'������zr������_���o����'��o>������4���O��
j
�����ˌ���������p�?�������_磡��Y��`x����/�j��/~����ˠ�^�
��������?���_��'��3^�}����_��'��o���|�������|��_|������>:-��?����O�}Ǥ�˿�I��w��������h�~��߽y�_�b��G������~�7�W����mg�����?�?��_�l������~��_Ϳ���?��� [...]
���nTx���]��Fm���/�k���O?��LML�~X��7���?��oJV�Ͷ����t?�

\z0�r��@�r
Ĝ� k�=��R���ms��r����/`u�,Z
��Z�c���B�/h�2��9�������,}X5{�
��d
-�
����"�_��-�o@�@�l
-�j�d �v,!b�۷!���F�����{�D�?	.oF�
" �~J)�2��{"A���>f2F����M*�;�#n�ܶq�`�n�
ȋ� ��+��5��q�&p>���x�
��o�)��8ЅSmVܠPI(�O,
]`'�.���.��t	�K�is/
-4�y?�̀� ḓ�E�|��`���WvУ���ȩ�r9xrq�:�
-ଣȝ8?�u 	A%�L⧪�W�ՠB�
�A�X��ϡb�şS���x�(�֥�v<Nߡ��U���Q�沉�4�F����~�bPcj��e"���t��ژ��N�'<p�P���P��:����(`�E����H\��N����:koN�,�
-��![u����E�U�IP�
ѼG��X�7

 � �i9ߝ�]BA4#��W����
���\]*�j8p��+
^�3ve$��
1��
-ݣ��vC��aTVV0�ܩQ��Ak1�#*o����֛�&3�/U�D�{z�_��xt�0�&D�
��
-P����u�V<u `�D��$(�}O��[7�-Hs���9���O���1��Bg؇�
��*�ջ��,ك8��v&�ǒ4�+��ȟ�JSs��o�:8�*�XQA�Nqxq�H[�� ��0�g�}��$P�8{=�;���
��P_�&�}�~�,�c,���`h8-x�t���\��d3�As�����r�6��a��p�����s2�05,ڦ��[=�p`��!�]��+�kr�|ŋ�O�1(aT�	��EHi�}�Fx��
%�wy8l�FQO�(����K�ZN�a4����� �[
Pz�B���)�̕['�(H��Lu
�`'�FLϡ0�r̚:b
��|��#�!:Y�u��t����ڝ��)��h��r
)� ��㺋�$rw%M�Aۼ9���͆��'S�*�2�B��[ꁣUkE#G��&^�
�Ҡl��
���λÛ��S���-K
�/��i���H��
@���N��� <	
9f�������[K�6���v�
-RU#�n#��hঢ়� �]���Rq�S畆f�ҕ���FѲ��
l���#�ڈC��0����
�]0 
�����eӃW���0
�*��Zz
`'}����J��$�x��$_�����ag��c�2�t�z�����4�ʩ��4�)UT ��m�K�cn{F)��f�G��]��

xkb*��`;����xAT#�E���B���Q�Ql�$s�uI���M�OU
�O�!��/�v������5Y�iJ�p���rȌ�~jVC��a��
c\�
�}���[�Q�����Pd�T]�"�ST9q�(��|���ȝ���#cw̧f�	*9_D�:$�NR��As���
�E	��7G2����z��Y�v�|
4�d�l�%��[j��!����
�L�����%n�Y`!���mWݳ��Ĵޟ��cɯ�wܠ
��,��~���fwi篒�
-�
Χ���nn3RM��R3%x[����	ز
�+�~�O��WZRv�H�KE���>�*|�9�rH���g��
-R.�`<�G��5ͫ?&.]<%���2Q�
t�T�R&��HB6���֨Y�LK��&HG����y at Hhlt�iFj0���N����	�@Vk,D�ty��}���끎��17�p����= 8���?+�?pIn�M7�B���;{�Sة�Io~$E��R�d	�K�{����|���Ix9l<��+в��S�[�����D2���OM
*
��~�� ����C�0
�H�wr}�K_���Zɩ��
4���p^:p�r�q��O�G]
��9+.}|�d�5��
�`p��2p���:v@�?&�r�
�!<����!-��,����m�q��"�}��u3�H����m�U ��Bm��`N�B>�
���O�
�o�0��$��W��ڤ=ա^��f�~���Y� x�h8���kZ~vN*3�OCì�ӑ]
��2�ND��[́��ToD�S&#
[!&�F����.y_n?Ig)Fq�k�־˷m:�e��� >b�"���ԃ���u׾�
*ڝ�'k>��
-4�
8`
Ђ
����w����>l}�z$�Cf]�}�Z����/�)�<�
�2�+åԈ[:�mf<~��E�nlJGinP���� ;�u��K�l�`Ϻ�rv�	��H؈0�
�z�o��%s
"��賦m���}b����L�Y���	��ԯ�c�j����p�p�*��t
�?ݘf ?I^�	hui�:
�]��d��R�s�נg��(�
�$��†�d�\��)�ZX$:�
-,���)�&H)̀
�Ќ��,E�D@�`d��|`��4z����'� �s
�1�,
-
�Ћ��Xb��~��C%>v9�,���%mnR�׿yc
�������`9p4Q��tJ��,%k��|�.��{��K�����u���c`��D"p��
\��a���/͍��"��q�. W-����@<O:E+@�B+əZ��'1<%m��'�@�3���+���V�Sd��T�N%
-:�6���"r

-�� �x���<�$�|�z :��,
��9
��O�_ �"B�-���
O�C\x.


-���M�(6� pFXDl�����:��A�»S<�����#�)��'y{��ss ��\�ӭQ��
��t��I�]��xn�|
��<��<��_��4� -����W�Ue�
��7
*�~�TA�X��m�0S��-b+�f;m����.��h,�A�|�N��قZ���+~�
�^Ё��:r�t�;YH?����\�-�L�X����%�J8�"={�B-�1�j
��!�_cl�p ��
�p������� ~
Ϛ�_uM��xd��[h.�J;��4�t�8k��ા��
%%�B(���I���5����r�_��w�D>P\�}$�r���fAu6x
���G�Υt#�"
-���"�j�L��{,Sx*
d+Ԅ�k�#�R
t/�t>2pi!��8�
-���G���W�阻aK��j����Z�B��g���v��f�͎�ݦc�
 �{*�C�m��z�ӏ��������hz�`$�ݻ�%I$B��<��_�:�~f�}o�J�zc%B�4_\=�{�1H���v��>�� �K�k�|�<����ٔ|��kN�L���P,;��� y��
��A}�+�
-6R���Ƹ�݉�z�1��O���O�n���4P���@${F"���������or0h!�!ȃ^����@�d�&ir0�|
-wFՁ�j={d1�~��$��Q��X�Pg��X��F���X�Q��r@�4�4'���D��v{I䀏#�	b��	R ����(�Ȥ�G�������	;|���n�i�9��$�L
��,�j�>{� ey�D���
�6��q��%-~@Dd��>H�Gt!��"���������7
�
�
-�Kj2�P�^O�W�\�k".2pɉ
H�;��>�i*ۘm�u�|C۞��$�<�J#I�qy�}�r��&uL�&qXVck�J��^o��٠<�����v
4�l=��42ݿ��8�RI��`��I$JYw5�(A�t��4����He�������[��vh~�|��24ŝ�ґ�E��t@�/3&�5��>
rW�
�-�p�;�|w���xU���P� C��_Ć�=�E��6�Az�������˩ ��ED�SA�mq���,H3;
-c%DGԕ�攠5�o�A�7��
L^:@��OM�	I
P���L�qP��
l�
GB]������43b.`:��"' ʗ4n<����AQL��!��\s�
��p�1]U������|3�v�[
-
�f�*1--^�J��X�2-8`U
Ү�D{<��˱̽fzm���9����JmV�$5 �̔�÷��O-`*	2�gfBw]'[ lm��t%[Gb�e׀��ĨxR��2!7�!]����Le�k[��T
�rM�E�e��Sæ�l#*U n%���r�Da1���ؽ�����.��O�E
W��(�Z����s��S�b�����>��lb
ތ4iR��<[�	�����l��**�"��
-3Yw
(��$ dy]3�����T6�
g�P�8t
��uz�|ٌ6�C�ޗo#������'�=��Au�!��9�U�ڵQ0h2���ƫ_��:O9��;�O� �� T�ڠ�S^������^@��4�JRy[]��܂���@�~ݞ����y>�KI�<q��^�mh��)ݛ�u��^IP�ǘ�Dd�y���i���yH��u籜�\D!����*���A �*0<�f���
sQ.q��o=��2���I�j_�.i�"�A/�hT��
-:<�y�~��Q��զVag�CM��i�추�L�s;+Eߡ/�S���]�d��
F�-ɠ"��S�;�
�w��
���	���){�9G��s�:��:n��g4o�n�;CKe.F�؈����
�� �`0�.<�H��^g�r	��*@�kFf4)b�!!8	L�����yZ��������?y�HM
h&�EboT;�����Y�uF
\<
-�Ҭ�N,��:��r�^rL�k���Û�g�_)�cP+���@&؛M�^�ZU_իFC�.r�f�l��/���v�g���Dک��
������
#e��;@��
-�9���
�����t0��"�8���1��QQAKR���
q�F�B+���5
P3aD��o���yx��I��xA<G�1t��
����܆u6��-��t"�x�.(˘�<��6|�b.�%M� oǀs{LG�_^z;ɫ\Ng#n;)�;<w~�X�T�>a( ��Xaj���r��)��؀5
-R��ƅď>e��:3�+!�!��!m�0��tehb�G�Ɍ��
�|��C� ����n�b<6����X��p��G���
�N�͕]����d��#
�H[�$�
e<�O���w�ҺO��п�\;K��H�Pd����u��bj�(b:����.KZ�;��S����9υ�s��$���]JF�V|\ȷ�;�~(�C��:�
# �br(Y`vi�fN�rLM:F�)��x�f�BC:�+�m��h�%��sZxI���D�-�H�p�#&������I
E-�%mjċ�K��d��h��N����%�3
�i״��Ð�_ϒOi�2��<�2���D{����[�FB��c��&"���]�,���%��{b>���)0�bx���܁�J��4p �4�3��(�{�Nib��ϞuA��h>��<،=�|H8B��0���M[�
:��(1^��' �!BBo�VR5.��&������
-�:
-�/l� |�,2N^�`�8l�
-tQ��g�T��Ԉ��K؄�ےl�9
-Ve��1A5>l��v�SJT}}���̆��g5X\�f�S�47lO}h<b���y��/�F��I�e��.�d�z�4`�yf�8(vހ
s@���<��^ue���S_��O�x
����#P%���r��R��ꝗ�
�>*�9|T	�D��I�4��Us��:l�N��ٰ`����I�MH�x�%��U��<�
��Ƃ`��q�_��Q{�k�րˉ���.\ā� r1�6
g]
�WtnF����
Z��m�F�և�"�1
B"�UkuzH01N�4\�CrI5�؍�C-��!s�y���b[�PgO@�Q�Bf�#V���:�7�o�^�KlJ��5	��G
-0�x=�R��
����6Ua��0�v]f:}���P��-����y4M�1��Ai��$!�C��>5ȑo��&Ԑ�J
��(�G�P4p�����$�	C���
斑 ��Y��/�Do����мA�
:���5���K������(����͓
�r���[2�@:� ��O�?�� T�� �3
-q
-(�����!vj^Q��i-|c�T	;�[�8�
�G�P��V�.�j���l�Ku�s��b_np�鞻��[;'ۛFB%�%�D�{�ʎH1��s�g��@оyc���@D��i@�
jM�!�6'D�\�R����-e���{�9�Eh?5v��!���� ���j�Ȧ���4ϳ�͢�
؞B�KB��q�6���Qڪ��N"��s�qi�y
��t1}�c^�^�Јz�^�KF-�Q��@�o�]�^P��b2����q <�
D at l
c�+����(gK!;�j8/�y˸�
�
���C��7擞� #����S��^�l��2@�i�%ԙ�,�L/W#y]�D�>�^��]
`Gkp-�
-�+@�PQ��I�A�T�}�p�=F�
F+��
�W���
-�.K
Iф� �}���5
�>�Uۍ��Qo�
C�"�B����aR��U���v�4JH{;(�3u���� NV���^ҳ�������>������y�e�
��6�����͋�bH���IA��`�!�8o	�sݑ85R	���`�$���]/�>�
-�*�(� 7�(�4���l�3
-1���z���+�"��Wy;����@���K��~ �P�2���ps���ݴ��:a�2�
M��pbQv׫�O##¾�y�*�i
i�)���Q-&�E�t"�	�d��Q��
��
B�g�J���
e|@��f
��
{*�]h��F��MS���l+Q)|ش���/$�9�2�������Z| �Nh�Œ��
��l>'Y[Y~��P9!ڠh�����j���l�)#�2;�[�|L��ᡬѢ�zS 1
��ͨ�;�z�å�����-;�A-~��Ş	�<�6�Z~�#���ݎ59v�w��<�
���q8*� 2l��:j%�l��G���|�E��*w����й�
;�A.���ĚƱ�4r�OfUѝ���ƙ�>RQ3�����lC�K\�(g}ը����&X��-�R�d~J at 1L�Ud�B}ҹ}.xG�$���蓈(%ؚ���g?�%u
��&���	$ ���Bbt��[����-�U��Hz
)�X
}:�H�
UJ͊	��'�0p�,�L$9/
�<�
W�u��1�|c�	���գ�A���+W� ��0mbbRT��0uz�9*��p��N��W��_��)8��o�
�O�@2�3Ҷ���S&痐���>}n.9;�@%����Z,u#���)I [...]
ت������~������.���'��d6���}�`�*��bf�4@`�z�
٩. F8z�'?����o���Ң�r�

���0�k��n��h�1w|ٙ��xuZ�
(U�,��]6��$l�HB�q���d-vH�*󇏾��VVO����71Z0

Q��B���
~a�۶G�Ô�	��[�U�#���v���M�',����(�Zv6�7�P�|N�#B
����|�g��s���L=�hԽ=YJi�f�����q���`�o���B�~���P�r���O%��{I&ca��L���#	�B����y��H��e9JϩzS_L�H�0K���"p@�=O�=�,�æ�
����3��z��\
-3@/~��+�4�c?+��"��=��H9����'��aX
�'�제
-�J`�f��L@}*���=@(B�,�?�����:�aa8������n��i!�
��%N�{e$�w/H{ыL��Cl/��X5�m��ƾy
O�
z,�]�P~n�(i|r���ث
������Fy����P?�z�0yk�L�ڣ_
ft
,Q+�D0>��P9mxM؋k��,�q�
�<�t�LV��\諆�z�	�0�zƈ��� ���,��AN�{݀�J"
���,���K�Fʎ� P9�`d���&���p
-3��L�#u�$
�
�y|n8��7g����*��aBLU�(Y�%Bʙ
�\�_�a���覉�a[�4�<�>r}{����S
�R�Ը��p�w�@��{y�g
Y�'��w�}�����ݽ�aI~|�v�����u�kQ"��$�g
��gw����V����aw�$�/ꍯ$�h{�K�ɽ$�{�ꗓ>���ܸV�i��]@
;I�K�B,�bހ�
-���G;%!��b�ѧ�݀6M��ů�b"-�UnFIX�l���j�dW���b���<�Ov��$��u큗gٵ+Gfus99L�HX����
���#{
Y�%qAQB)o
�?����M����a������(�j���ϼ���. ��8-\� Ie�.�
�qi�c�C��y�f�8�����S
ܗYɝ�v�_�8CZ0+Ȳc���/] 
�Z�#k�ɠ��>i^U��e���!D[&ۍ�o��r, ��,adD�f��^��"��*�`댶6�
�f��(w��\��1
@,.8m�J��_�־�jb�z'�z
-�hs�x0�(�u�9�G@���1�|�˻{������t��s�$
���a~n�1�!

d7\25ht�`*�g�q� <��^�+��!\
��K�NA2�əb�uE,�o�4��&@o+
x��M
��j'f���ل��G
-SRb��N�
��`q|;�'w��}��q�Fb�F
*4��T� �
$A�/?l�;��}�x
n��d��T�9A�K"鞧�7�3�a8M#�q�c��>a<���Su�}�,01��D|��9xJ�_xf
�"�[������D��j��t��'��%h�l�����T/a�F�5
�X�Q>*~K�nH��4,�
F�{,Չ����B\���+���~K20e瀺�ކB(����8/S�!���ީ����:
-�H&&z��e2��w��ª
���:�Fy	tC0j�ZC�}���SH�dဩ
bv����e�h@iI?�� _�u�m��X2���Ӻ�8pꫦ �L1��g9C�`�N��'�/X�e��PB��Z�8g�^�0!���
�.�e�=��5��BpYW��C�s�$*.Q"�hU?�Mb��>Kj�`�o��5�2��Z���B� hH��\����s&�|�
�ߎ�V��D��lX7�Iy�r�0*������TG ��ؑ@	�UG��g_�>�f�j&���!8f�<J#~9�4�h��j�=�ؕ�,L�;
n���!��R/h��T�恶�d��3O�W��E��f��<|{��s{���'_��f�s
�
���C � *N��F�z5�;@����_��X�d�Qw4�L�8�J�{�pǡP���h�^a�
sd
�&*O��'�"������{�D� � k��9X+��7(aV�I�f[�Ix�����K�&D�'���	<gP� �(ϡ
�&p"{�!3� 

�Q��T�:��A�-���Aze��J�J
-��{@t� =��+SC��Vq��d��ORz�c^3��C�1����0+�ԅ��+NC�9V����.�����2~R�?�Q�|#�{
0"����<�e����!�+����f�p!Da���{�$��s@j	���S����D
�f�P�~�Gp����M����!p
-ڋ|�!ڎ� ��I:�`�$��z�Z���j��ё�G�d�ڱ����5����ޘIp�+z��ӣh�!�b�
y5A�~����>l��ZeS����wC!D�s:"T4���,'��c��+V�{8
-Y4ؘե/V�
�[�
*6DCi6�0>��1°
-L�wK����M\
-�8ʌ�<hP5{��Z���A���
��>B"t}�*�����ɉ@B�-7�JToN�-�pbB �鄪Z��01�0��X(��N"�'�&*�,
���Yt��Sc�u��o1����a��Y���p��\苰?l*5P���m�ҩ
l�U�ɉ�|��.���pSIQ��c~�1h���B�%|��H�P��9E.
0 �d��=e�e��
vz
�+����[%�	)�*'���[��0M=
<jB�*A�#� ]�� �i�����)p�oA�Sr#'0�
	9D�fq_���]��$H�iX;�l�R3��z|YA	Hx �<J����7Ud[;Q�> n��.��Ա���.I���0#:�t;�
>�h{����
=����>O�:M�����KKk
A!��g�+P�cN�G ����Èkm�F��H���= ��}� xb��J
L	�{8G�
a]z��^��P���-��7�3��:̈́��w���֢HŪ
6����L"�
�{)��	��@I�$߯fQM�y.!��
��?{$�V?�T�.�t&�4D[K˯x_��|
׈b7�ȗ����

W'�rI#Y�mvt�n�Y� �d��
�����^�
c��J;CVɱ
m���e	o�@����K�-��
h���ڭτU
��"@�һ).m�E�	�
#ql1���9LV��"�B3]ƭpB؏ 4P����3d^�"�J*���
JSw, at T�8 r��]_D�WI�N�^s�>�N�
Ѕ�դ��5���y���^�`�r�?%V�
'
�W�
-?ϒ�O�&�	�D�GLȔ
��hQX��h�Sg�h �D-s��L��r��O3?z��,����$t`�N��[UOP�P������	�
-H��|�p
-^������5�ńw���`!�G-��jd"8�
$�Z��-�7��>֫���۲�e@&��j
��Sx��������
��C���9ĻEE
>� ���<�a��"6S&Qt F�X~�v�q�6QCլ��r���L�>�,��L�֐A�>�m�q�/���4x�g��?��w�CD	�U�q�$C=�ˍZg�bg�+��
/N���I�VX
Q���)E�q��iն�&��V��":�@:�2!1���!O��H�"��+�У65%�"t�r��H��
� V��)M�������#f+�pC����m��ff���x"�5K+M��X��
��#\U)
-��}g����Nj�
-#��L��g�����q2
]U	�r��t�^����ҥ�	��8M͏��N��W�),�e~� ��y�����&�gi
��8l�
�x�ңÊ�G_+��!�����=H�s���c8������ٲq���!Ydb�
*3�
������:��
��
-2����;����g�e�!>�>I.6?��e_ŻG
e��eP�bK,�VP�#=eW
l.ײ�{�
FL�͹#
,DU=���'�d���=C�%�e\���>�Tq�!��rC.�E�
-��Z��Odݕ
�j���@I�
9=���6Ү>!c��P����	��b���\aQfZ@�zF��:d�F��Da�#7
vF�8����q��� �]��Z�E�L�g�-{���I�c�Xy!����8�y����h�h�T�F�8�/��]� +7G�D�5
p�
�
v���Xh�^Oe�c�?H�����
-
��I8����DY\"�{�����D1��>>
-
-���
�û��
-3"�HX�� ����v�Y�I�vbȢ%n���N������I�}�=U
-4A��������	�^ �{��^�\x	!�qti��LxAxg�l��$����q��Qn#HEeH
-ݎ���#Cr��']-�0Uf��x9�;r�N:�)1Ԥ̇�u�/�!8I#�̼�l0����
��>��sz5+X*��>gie��C�F'�
lm�c�Zف`�c�
?�s���V!A�u������؃��
	T��a=���q�'��C���lG
,�+]Xu�*#��PB�K���x���{z�5o�*�텊��
�U@/
-��tRgM��#�׏� ��!��\�̇Ǵ(G��M��L^�>�#'�Qf�G�_��'3����*�k#��V����{�*,����	�\&D^�])�p�
�+�4p���M(�
lwӍR�~   �7 ͧO�,�%��<�^�/Հ�)f�I�H���夐�%�l�Ȭ�?1�il�E����ZY�2&a
�x���5�����=�1;�W�y�4�ߎ�w,!gg4�#0Z�d́B�Aُb�^�ơ��
������
��Xn��ͯ�[.$,S E݋�@M��&m�d���d���_~�t�`B�
��2��g��]���)!�)P� *\q z��=��+��	����/y����X��!5Ex��7��B
<
-q
�:N���w�w���p\�zW�I�2Ay H$g	|H�O v������,���8���H�  �f�Z�	�@3��0DY�뙆鹿(V2�u=�4�T2[��^H�z�����P���"�%��иi��(���
!��ֿ�R;2�RB�||}�&��uxr3vӝ<�v��X1 Z�?���<R�`ѐR�tF���I�܋�5����2�0a�5�X!M�,����El�)5
��
-�6|PCpEط�$C�
��vH�j����M��{)�Q?DJ%q�d��D�=OXq]6K�j�p���t��a�Qu5��|
��	u-��r��T�
]k�M��o�vN��U'�K ����7'HP�
p�R��:FY|�4� U�������0�f98{8�ET�Rt������Wx��F��~'�w�j�¨�"�
-�mE�Z��GZ8���Y����Ad���D%���m��T�*�բT� ��	�����}���'��w���ś	���(9��c,�_%�r@�!�2�l��k'�
�e̚9z���UrOb��i9�>鷼^� 2o�yq(�e�tj��f
9d!�:�D=�ޭ0�;��Z��X"Ӄ���
v�Q��Nߘ��o��x�K+��JS)T~�����4��'��9���n0�I�s��H֚�����,W�s�"vp�;��C�d��G T� w
�u!`�43j�̹�]�nU����C���?�&���
�w}�
�L>a��Uwxxk�H���3�K���N
��XCP��Z4r4r���\�H�#qMM���n*�������8���m���A����f���
-D>��J�"�BE2��?-�~��N�{��J�0	v�5�X����!��`��<�_2kE��~�3����d8J�om��%{�P:���!�%�S��r	�����
�
endstream
endobj
320 0 obj
<</Length 65536>>stream
-�����\k�U��,��8ל85�U'��OT��r5A+�G
�	�L;�)��.97ܘZxWN�xC�‚�R�R�N�Qo����|��U�mL�J��e�Ri����Y�F��Lӱ�bҼ+
�B�,憏&NMNA�q
:����+��x�����]S�4<�Whj�
�I*�Rx"N���e�{̕Z��d�(!�l��q�qJ&.q&^^Q�%w~P
���Qբ�h�8�^��h8�%
u���h�+/�+`��ᲃ%�Ѵ�lYϝ*]�xq��١^STj�x�C�U������m�ttkh&��s'K�d�%���e�%��fDG�o��6q���I�
-L����p��K�]��H̕���t�
-���(M��F�^pa�
e���8��`��SX.��Rد�8_���w�✸�S5A*�ɔ�S�Ɠn3��8����/N��Q��$t���{�--��O�@�x�g"e�/oq�!�ضS��x��etya�G�-��7r×ئ�
^�����M��;��ߙ/�
��^�%��>��tVS��r�DYxDI�s0e�읕:��7��;�%#4�dL`��K:�,�l"�L">����5ѨVy�
Gc5�����h�h8�0�c1����
-���aYZ�4��C�q6�SG%�mvTիfĽ>�O\�D��#�����(��8�w��t�t̥��6�tiq�.]J�fഘK�ɂI���%_�us�<��6�K���ӥ�]��_����wt�
���=M�M�Ҹ��um����0��f�?�nܧ$���L
�Gm:�����s����
���J�>�ǻ�Aw�'�߬��(Rf�;��ĭ;����x�]�4
--3�P��3�1�Qum��M�[yMc�����lĝ�||l�K��*OhtnE���MÃѰ���ဓ��
��
��޼�9/�2�Tΰ��䅃n�S�JV���	�h~`���+�J����Ɩ@i��&JK+�$�Ft�h48�dI�K�!Jx[��(���3SG��v��tΡm�kIb��h�Min<
��)��4��u�v�TK!�%9C���J,4M)���������R\j���Դm�d��G�h���'
;L��
�t�'���F�z����.A��i�(�����Ea_���nٚ )
-�4e�^����l<�wZc.�w6���=]2q��<q*�;mu�ѭ
zAw��9�qW�
�:
Q�����֝S��䗐�H�&��2{x�h�.�&囎
��0�������ȶ��ӥ
<(�ߩ�="(Ŝ�G���I�A*whr���QJ���������I�b���K�����#,-�Ɯ�'��ұQ遙*���AtW�am���4��cj�����ţ���P7�b� 0���x���X��T�Z�Cl���
�
hrӋn�K��@/)�4�
� )��J��K��$/N�ɖ��,����a�`���K�x���h���z�t)c���Ra>�6��&�dߝ�$�ڃ��6����
v��)��~)��Rɭ��Q���i��An�	��Jϗ�c0�L�,�Z��J�kus������Ι�V'}�|ǝ�RO�����U�
�K$k��z�p�r����t�8�je:��t)�φI��;I�#�o��PꪉR4�m qԥʫ���Ϲ����J������������d�T
�ĥђ��Q�����me���1�'6�L���.[
dQIA�D#�h�
-[6��E�-��0�`	L��U2�]�1�
��.±^Z�u6���$��)��E�K��	O��ݢ�\�ީ��I%9�;������ߤMɕ�\ig]�K���e�c�b䰚k0J���c{%\sq/��Z]Jw�r�:<�2�
�R1�l�'��P��[��
vi�q��=���&Ȗ��N�N�L#/���ͥ�`�
7
-wuY*UO�J�\*]6Tj�ҫz����oy�����3L���d��H���Ԗ���~�2=|�詧��W�t�l\�K}��.��5����L���H���J]����n���a at YX��}5פ�йl��;���w;2��J
�P4Z��:�r1��B���r�����Ͼ�%��wv�g����J�I�.
�
ECq)�BAR��h��h�C�Kk�`.	�{<�ʝ��NOoJL5*N�J�
����j�Z��IaWzx���*@b���<��E��kyI�_	�s%��0UY�]tФ�#9LϘ�?�/nH�\�z��x�\���N��.�-.Aə(e���,�s���<���F�ARM���a6^������V��j0�u
-�~.�T�KE7��N���Z�J�IR���O��s�+|Μ��4ʉ�.o�T�B��L�$�����Y��>Fr/ۘ��t��'&�K���K��;������
7em?Ӛ���QL7���@7�Ӿz�|Ö4��ف���{z�֦3
-4Wj�\I�b:����t�o*��£?e$
oV�D|�T�`M���B�)�h�E5k����t��;7��,ѨQ4t3���'-M⒪�t���h�����#1zȷx�1�$*���@%e9U���T�%5����ų�� ��?D�J��K�Il0�$Ζb/���-�B
^�}f=f-&���������D��+��ˮ����

K1OO�&鉒��!ͤL�'��FO�H
�_�)�ް_��
|Qr�g���t٭s������xf9A�@2��Rt"T�`���,RM�3��09g�O��C�k%lq�!��tװ}��k���c9���^����s
-:]RHE�pI:�C����Ț�,�Jv��E��eJ�0�T�EFR�R�s�L590��Ya����r8�sqئ�~��Q�($,I�j=�����L��JfW��8r4��Ϋɍ#YԤD��}7��L�Ę�:��
�}�����?���V���2m`fȕ�geE��D旾����7�R
�����K>�d�il�i`&�T� &E�А�-�x%ھ��#�蟊J
����A��^l��%h�F�
-��ҽʁ��~���էYx��*�iNF`Z(ۨ��
-L�%h+*���x�[Ԍ'�x�Z����$/P2�;\��{h
���ڃ��-�W��ذN
6�y:���=xa�K��s�[��H P"�r�,�j���{O�ʫ�TĨ��'��L�5�Ѧ0:�|����7ۗ��
���Tda��@���3�;
%I'n���	��Wm��8`R�[�
xF�V�����5G�}c&�W��X)(
vPS\
 P��@Ya@�n�و������Y�
=7 �\LJ
��;T���wH[Q/����Zqe革dǗ�ٿ@/"C	r�["tnN#ӧ}m�4��4 ��d¶#e�k���B�Y�J/Љǡ�����Jw�h�z�Y��AM ����l��Z��AD!���X��z���g ��&�
~S�a�%�"JH8\?!Ϸ���S��$.���	7�D,uB��Rt9pA���&	��k�S_�^��ˆ���
�	�q�cG�@�ݲ~
p�nl�ۺ|*���3PIO�AkxEs�-�����힟iBF	&e�Bxq�wI�3U���S��C�"��
xj3�:^��t�Ⱥ
*�,5��K�7��j��u�D����PpC&�F-� W��Y���J���D��x�‘�X↱�*,���n���K��������G������_��D���
�4vx�<
N��a���
�aq�tO�������ѯ�)�����i�Tz`*a.,�`	�� yG�Ӹ��-!�8�d�$�`V��zu���O�����f���|0)�P"O���"R;^I�O
-�ڽnz����R�yۛ8�@�
-J����bߝϤ$�=�(i��U{6�?�ip���N�O0s�����D�"��'�p�\�a�3?t�KZ�*��J܄e%0�
ýcv̼�a�Lij&�0��8�0�cU���
-l��cTm<�1)p�;9�K��?P#+z�3�`������w�ZH�5����[�����
-�>�L��n#[��ZQBk���
���Մj��K�gػQ����%4���_��w~Uz����8�i��4��
���i0�ƞ��?
��Pt��ok�ʩ�1�W2��	͟�Jw�ww@%���J�dM�R��k*(*�Ʃ��%BRѣ`Z��vI�¿��>�1�T�B&��P��&�\*�;
N�Kn�%e9�w
����aE	G��҄�)(��,��<�L��q��9�Ы�ٰ1�
?��u���&/
dy�K�w�pC�v�J�{Qi����&<�~K��3�=�=������I�d�rI�WIR�1�����W�f�2Ӡ+�g�k���r*�"\��ÇsW�C%�8����B	{�!��V�F�͚��X�E�1Z���Z�EgS����D,a�
-&�w�۬��ߋJ��DF+oG��=��i��F�Fr�i,��H�i�a�C���̡�����J퇟�J�\*͈Jk�`���r���07���
v�b���g(L�d����5��gN���q���b.��vmrR�
-w�r��K��C{H�%z
���E
	%7P��;hr�}��wg��>�[{p�$R�Ө
���`ǜ�$b�8��;O�u����
��
7do,�#��߄J���M�SIϙ���A⾢1s��~��aW1)LZ'
Ly�ĂE���ٲ
���73z3��J�fd
�K�I5��Y��I����
*Aq2V��_����r�Ҍ������駃J+��R�kX��
TSj�\*v[�6�C�����!*����!�C������~��I�-"�)���X�Ɯ�J��r������d�tx��PXz����dB�0��S	�����4q��f2'@Z�Xť�����:1�8C�V�f�~	��W����O�

3`2�</A�
�"v�� a�x^q�`i\���Um�������
698L���<��45FS��Z���
q���pu憫6
$
-|97�I.a;�i�
-n�)���?8T��8*M�Js=g_*��J�m��C2a�����II�$7L�$�9F�}�
�&Л�Ȁ�ב
8�,��ae��Oo� [�]�J

�ա����D	�,5�m����&k�q��E4ύf+�
ϖ��=\��
1K��>s����7���料a������PTj�F�ƶ��̐�sNcs�i�/ZkJc�TA�`I�G�9<ho~���AT�����ҝ�<�0p��
)b	B%$�~�����.��9
-��g)�-`L�\%3:�*�F��K��.�*��m�p�.g�������:��A��
�66yg�Tg
'�c]��C2&5ډ�
ku�O��
�[�q��p�ī��K����x���L�h,�e��!_߆J����N��c��������z��@�Q�|e�ڦ��.��4} �ҙ��8q�&t�PqPf.�6&^�4
U��8��>]}��o��?�*���	�U�P�� ����WK[+Z�4�e��J/�HS�ĘŃA�V�՞�)T��у��{}*��-
|s�U�����S�n!R�Ӡ%.�4�'��
%��4՞"�����:V��a4�����w���T�=x�B
h/�K*ѓ��[�X�a���[�(���ӥeFŴ�Y�B����˦�(\�f<T-��LD
��
$��;j���I�Q��ǘ��b
�� )nü3:�رǭ[hܦ0�_�Љ<�7�\rn����~B&�$*��T�ޅJb����d��
�{��F9��O�As�3W�F]u1	$*
҉�*3^�����Y�"���m<��=�;aå=)�lz����?��-���y�u
 c���ݶ��
��� [...]
��)(����H�������q��N�$
xW�N0��g��M����~q"����x	�|.���=g� !{
�Dw�d�nsp%����;����D��k���8��Ǟs�}�}�I��^���6���K��%
��{s��
7!�6f*�?�J��R@C�^0@߶���ى
�I�����Q�;�1Ƌ���)�
�&�:t�R��,g�
�
b��ҁS�v��o��
3�ҳJ
*�M���2V�7C3�*3��R��b�6v��eڄ�ڤ+�,a�֥`��O���PYҵH���T�ߎJ�U�$�pr�C��TkD���.��:�4V�_e�\�*^��x;�Q���W\1��`��C�%�A~1��3Q	���o�0�[8ԇ�U
�Ǣ��LLZ�?
�d�Kkƙ6�U1�@.��y+�� ���x.)	r����!8wԁ��(�C$PB(}Ձ�a�&���
bu�s�}P{�S�Q9��q�
�i���7c�\���Z.Q�q�;���
��p%G�
��H�5�GS�.{�����E��n�
xt����.����t�H�R��(��%G���
�`�,L#��&hvI���"�d&T�����PIYE0�
�|��g�7���,g���}��͸3����P���Zm�Fb�Z�`����I���î{
��/���}�����@4�F§�8�4ftz	L�ι�Z9����X10zs�M�
�^����TZ"���	��	 ~��z(Lr�k����1�L
���#�l�I�.Q�k�50T�ťc�t4���'�ɡ��R7��!���Æ�|��/�JH&	&��d�
L�K�8�x�){M��W����[Qi��Tzp��hS�|=bI��ެ���'Ew�zq�w��������w;�2�ҙFV��iz�B� 7C$�e-|�����@Fh�V��et@�d�tV���8�Ȋ
-�bu�˵��0��륀t C��A�J������
ފJ���7���x �L
�5�ߕ�N����>�4L�
�[�'�h�vq}�n��������.<P����Ē6f?
��8I��RV�4qG/#	v
�63�$&��ԋuL��L�W�Kꋚ�!E.g�RhG,m�bi�Ibr���ь�(QA	��a#�d�c�
$9!�����}�@���xB�x�K��
��K�'t�x�

62)�F*�� *�+����
�T����y��`R�j?]z�I.�.N$_x^��fteVp���X^�aUUf�X��6������7
���B�	j胆"
-����#��ۉ���1��q��c0�ҡ:�~L��A��މJ���7\�G�L8
*�x%���g����;�6^)�&+F��1�l܅���~F*�f,�������
n����i7`�����"iD
-�&��T1_�\.��N�%�z��R��LJťj�B���R�u�]O4{G�
(PJ0Pڗ����M����/
u��i��9�����i
6�l,��O/�pۺ��	�KJ
���M.��C%�*�@�
3��O��� [�
>Ym\&��ј�q��ҋ9tRqb�I��FV3��\
�\z&�t�ĽM�u�*���RK9�ʚ,���/p,X(��?�s�'c�ctH\��
��iC��\�c��ק��JZ���;P�ÿ����_^ ������iP6���H��X
w��4�0�+jب�U�O:�"
�Z��y�5괡��XB��%)��J�E�1�p�m��(���;c2��<�F��Y&�%4�ĥ�}>�(ժ
..��w,ud�(P*m��w��#&��=Τ�� Mؠ
�
�'�9��q�W���O��K�ݘں
-��+�O����ÿ����Q�S��T���\���	�VM.v�)�z���-�Z/�4	����9�G��
�2 �^�y�9t�p�;��J�N�s#��ז�D{پ��׵�~�m��*\QQp��(�`h@�d�F�L�������R�cN
s�����
�8�!V�Ֆ(��J���a��ty.����ޟofhaz
v�����z���ݪXN9�
ݩF�^S{>�ƣw��`�G��i�)뵆*^�ۢ�*2��I}c�C���Y��㷷��O�8�>3���	o��C��*1X.� M�T�\�
-6��I�H�4��3l#�|.͌ӷ�]��ja/
j�u,5�z�iG@�L�*%�6���T��;d'�Ɂ�9P���\D�<�DO��9✻�}�SO�%�x��
�
7�)���3���~cA���P���h*��N.l@�5M��$��V�>����d�4
-Iljr���]�K�_�M��S��%E	����d�_���P)�^H��`�+k
*�%��*�WqC��s��s�>��
h
.A��0�,m�m���y�
�OL�?ߍJ���Td{y6�QW؊��N){�4�q�1[�Y���l� ;�h�wP�>Կq�Ƿ�
K?
�>+��'*Az����BX�H)����^u��{E6s>��~$�U�W��T�nc�H.-�K"\ª-�V��%�S�vK��YX�%%����
�9����-2�R���]�a{
e���
���v��ࠇ�����da��֋�*/q[�ɛ��vٴ-�,�%6[�M�杨4	vrѸfX�>�Vj2�����gR�:ht���eˀ�L�hd�p	f�t�R�/
͛}���xJ�
-ZL�M
�u P*2��uY�Rl�d�GҽW
-s��
c��EKke�a�t�+C��AY?�!i����� .J��S�US��k����~�"[�T�i�y�Y
-	���W��Ӑt���X,q�t��kF�h*�A�X�
-&M�ן�J�V�4X�@e9
-{��
-�d������k�D�֭cV0��Y���>
3��R-S\�a�v K�@�#{�m:P��;�)[�D���$Y{��o�P
z
�F|�us�4�h�&�A��xA��)���)�Re�T�)�~�P	��Q��7J���
�
�S�RjVD�1i�/P_�'	�Gm
�n8�7��N#+g�K�|(�f�á*�oFI+
�$Y�$�6��
-��}�~�?�ϟ���mMXZ�OZ�d�������yyݗp���QI�hv�����5l�^<�O#�Ncz�i8�F!��3g�T.!Fg�ƒ1Z��
-K�J�9�tT���/�’z��Ki�/�D"�Ω_��8}s��,١bV�|.�\��m�J��!�R�o��%%��A�C(U�
a�&3im���;�'
s�ɏ
W�Ɠy�%�p��
7J;���s=���d��pA�������9N�c�T�L_��;�4�E��ш2	-J�4/�Z
;t
�L?��id�p	��x[7���%�%&���2�-|K�}����J�/��xͤ�Lj�
c%�LŒ�
\*C
߮<��!��%��aa��z*}� �
��a��zž��>


se�3(5�i,�?��5�d��
F7D��S{h�%���J~&*�[*��=K8Ε�R{7�t�L�za�M\�.c!;�rɖ���dT�`,a��Ǖ�b�n_��XI�z�������?w9��
�.^0e����ts�
�%|�9��u�s�#\�m]d�8\�o���4TR�Cw�[S	*��J�b'���9/?i�<��O`�|8&���B�}��H���L�Q#�nz�,��u|�,�:���.�
-�$.V�a|JY�V��G�$3�B(�|�c�{�8���ϰ.�C��\	UdJH

ؤUN3:~o���[P�?D%�7�Y��Z=A����Ox9����dcNc�O#J�q�1�>!0z	SK�}�2��4�����m߉J\���T�,��U�5�Kqu<�UW�si�4�2)�_��㠩��0�^V��p)��e1a�bi7���Ғ���D��%(�!
�L��M�9}�̤0
�9�cl��9�DT�Sī�ȓd�n��1u���漟лe���̿�r�tW1��J���
R������4��O薗��xw1.,fR�8O����
:_s�Vn�FV��3[R(������T��//�� Gh���SVi�̙r��^�ߟ"%4�dXaWth��~�4ň%�M[b}׈��@�
�P7�Wh�[���1��
�M�{ja�X��3��O����b�a�xPM��Jrp�TBU��
�%� ��T��2p�����#$yc�E�#��sS�a���
�:�L�wZ�"�2������ӌ [...]
-.>�4��EW��a�W��]���|��C�O�J�L%�X��5��x�"����*�L
-m������F�%7\»GS\žj�Xj<,�)-}7�wNI	'gE��(aE	�
(P�KIM=��I�0���g��������:\�i<��S0��`n�Y<�
�)��M�7T�ޅJC%'������L/?��&�1L�B�E��
�H�$,LeV4��[R(��¥���	���k�R�r��J9
�`����C��3�6���Qv����/�PA�b��t�=T��ZQ�-�CA��'��������)lv��CyP�,���tf&Oc~�i��i�И?R���"�K�hL��t��۾��-�	��I��U�%��7���8��V4-���P�
[ʸ��v�//�n�Z� A�-���%�}b,9ӴCPr�
�!���a����`�J��DMO�IC
$�^��!~�<G
}o
5L�Eڍ���4�y�s8��f�?�J�N.�u;���\/?Y�ƻ�&]�H
��r�:3�2�B%ndMm#k��-)|�#pi��W)�@��ׅcY�:�����Ac,��t	�h�E��;�'�/y+(-����	\b}gYQ5�!�Rʗ'�g���T��VT����+I�����O1:Ò�3�4���mx&�7o|	�=��Rf4.�h�)rd*eD%�
�I��8}Xb.���y�h�CȤ�H���AS9
&�]&�g�%6��� [...]
��</y
-F��wf���_��o��D{��	8�oL�O�&r'�^~�W���ۋ�zҜ����Q�=‹;Y|cD7\�5Mk�1��K��+�K_���� J��;𸬄��'p�Ҥ�݌Vʠޱ����}�	ֆ�b
-�Ão\]���5~��2,-应›�ޓJ�0\Qi����6�ŭ2L�C��i<�z:�Gu6�&
an��F
9>�
�*�6?%�
�r?�Қ
�5?�z73�!�E�ͤ^�:�HF��KZ��s���=]X��n��(e��
�
�����&{�m~EI'�zx�X"
u��̛����
<.��ںx?!N��^<3�����?�};
�4
���L*�˹�Q	\qP
��"%��$��̤�t�*�1&�>�%D9No��5��
q�%�ť����^p�@	B��;pYIRRlI�� V�
%m]��0�
����Px��L}N��T����
�ߠ����	���
�􍩴*�_���a��B��
-����sOc,=�͌@o9��th�mS>�6
��q��w���.{�$�*=�T���V|���d��!%1��A)���2��
-��%K��[�A�⒎�J�%�[��/1Mۋ%�#<^R��
e�pF�J
�]��d�4\{�'ҩ�<��G��.u�u%f
-���Ћ'�;��3q
���M/J%�qs�D;�
y'W����9��*q�\Q	��@�	'��P�I��2
���LxQű
����Xh�����u�rI�饪��u�R�����
�x
gi�d�)�ţ.*�|�����>��@b�y+�~
t�
-�jhw�D�nOTjޟJp;z
���00n,�J�4�\�w4�;}��ipo7���6:r���L>�����dTB,=�`��$�ď��c�(�(إme�~y��K"�$�B,�h	�Kp�R�����;
bP�
�TR��Y���:{�J+35��I�rR
Ioɣ��vG�[��K�K"��
��]�m
-�m<�����뗗���r���[Q	7E:�Ob;�t��w��L�v0�׋{k��g�=�N�K^�oI���!���\�� PR�Ҏ�J�/
�����@]nI	�G�X���
����}
{l~�i�F*A� Qi�I+L\A��~��W��3x+*�j*��JE��-�-� p)д'`�/w�ě�i�k*�%1ņ�FŎ0T�
^�f��돧�m
�lܣلN��J0������
&�����WD�X��j��R"�%,і����cK��!6L�oL���SJXR�R/{gZ�,�,‚�a�?��vq�IG�n#��`��N��,
*tW0
g�l&l
�����f�nߞJ��\z�	`	��ra�֟,��L�P��[J�Ct�3�^#+^��x�~�B���b .������5*T�>�w�
-��S���8��vX�P���\�g*�Z
-�HZe�hg���(��^p�҇���M���**
Zu�$���sN��Ӏ�ߣa���ȱR�
pQ>����
D�?�J��HQ�RxH%HQ,(Z".-�y��t�w2i�~uJ�?氆9�q�b.�⒏%�� �S�6�鎇؎��DƔD���pr��Rns���H޹.u���?J2J==����[��ݝZvO�軂�p�N/
�ә_�f�h�-N�f@�͹T
-J�.���~1��WE�N��s��6�$��y��G���u)�4�r��d�ö�'q�K���"%� ��e�m�ay?e%e��
�	+���<`�?�HS���ĵ
`5%��;���6+`��{S��T��h�f_
p�=&�#²R�4�N>
s\f�q>Z
�
�U6�R��Ծ7�b:G)�
-�
��K+]O�P��;&<m|�@��IgZ�.5�撫[
�fK��RAXj�L#^ߎ��DƔ�gy疔l�
�9PE�	�8y��
0i,�Ɵ��s���oނ��ԗzn���e#
-��%��h�Mg�v5�R�T*ޚJb'�Rbi�䂑s�������d�%�9Fv�\r�	jV1����J��]��~�pIq	%�j��fG��U�e%�9�*�����
1ÿ�����0��C��a�
-�GS�$� ��
��U/��҇w��M%e�rE�
�~��?�<:��<�I�iĨ�{�J�9|���\E��,�U�m�"�
�~0����T2���M�	�������3���SC�(&]�T(X�vqoJ�4k���K��!߶\�n��Ғ��"P��w<�Tn�l�w�v��m�<�$%3`iz���4Ƃ�ţ���n񀩿�
o�2M��`4s{g8s��K���W��3~B*e�I%\~��ր����+�h�|I�O��6�����
-s��"\����5�b��lI�7�(�
���W � %*A_x��2R�����̋�
6

�<;
q��-���`��NI+��D��w
��
���
��*
�J�h��I��
�4�opx���g*��n@��!����J�
�
,i.��J~d�b'�.n+��K��p��9g�ij�K�.�PX�F<�� �iq왞pv����w�cKJ�{g�w��s�)�y��4���<�?�.0�q���k�g�R;���3�����{��<�v��[S��i����Z)Wr�h���3h�ͤ~����Fs�	��,ޚ�
vK
-mkm�����pط;*Ao[�2�R�X����3�9�{
DM��h;���
�ZC
KtUx����I�Y�B[��1��w�ҫ������JL�m���|�iP�
���TZ��/�Ɗ�J۽��k�#�d�1��ͽ������ռNâc5{��Ѱ(�b�(.-�*�%��)&Uzl�KK3g�V`�{lv�4�a�L)�E${�+J���ˤ$]��
}�b\j�L�8�K<�I�_h�4;(*e�J��R��l��K,A���;�ɵ���cs9j��I�&���Fq�����x�%e�3Y����V�KO[�%| J*Tj�]�W�WP�K��ˤ
���[��<�S������a����rd)R�A*�-�6�F%kוǪ��ygH�)*u��-��T2��TzD*�g�(��.�%]e�ɩd���~t�;ui*�~Mh��.cˀIok/��KCX"W�[•xԈׄ�%��~��Pj
����
2���q�3x�@�H&�7�:��c��
�R<\Z��:w=�w����x0����y��LXdɁ����N.�1�
�lc
^�"�����,���:$md�v����a�}r�*,���y����}VP�=
Z�1�fIh:ST�f�wB�
�6E�N�
�����k�T�&�t���p�����R�[*�ޑJK�-R	��4ɛ<8��)��Kp|t:�ɑcb���J��h*y�%�҄f���$��~@�%�n�L
-4�2J�KL�
�����K*�OJv<ȩ%K=P��;�s������읙Qr%=��H��}
����s�#
�f�gO��Y<�"��
�^v�3ु:�
-��u�8�M��
S	wr�-�pAd��w������'���+������xɩ.�q��RlI�-��*4����������x;�� �@���t{/���a�c��|�J"iET�@��)@����k��T�Z*�L�
P	Oc���D���5<��L�h�����R����G�͔T",=Po�Dsi&��=�4�B�{�^.��R�x�V���7���-������K�I�IJ�ЁƔ����
�!\���@i6
(��O=��s�o�)�%��a�3�ÙT\����a6���_af_�
L]�� ���R�)rav����}�7�G�á�qL:B'<
�s�H��d��;�]	nū�BE�]��txz:(��Pi״p۟n�K�of����%����4� ��UAT*sK��T�J�V�uE�52N�Q��ݹT�TZa{8PI���R�����deIc��4�	2�{P�J�(����S8l�/��
a���p��`KK����o�y�1�(�����
��R�
-�
t�C�p'��>�q�)��.
?c7�0�y����������tk�
���R���b��]���r��c�K0�"��\�K'�	g

{
t+
ޣY7�� �� �����
�T�ං�� 
����v�V� �|�
�l��
-*ͨ���X)��ЖJO?�J�������v��0��� �J�
"*���R��P)
,,ѝm�I�$�[W�4^A��k��u��K��K8kG�x�JK�=
����������E��ZA	;�M�
�9n�
�H�4&N:��
�
��wpI�si���DqIN���b
w��㙇�n�)���w��Y~bv��J�m��xO�?��^�� �.&ͣD7ĥp���z
=��fKɼC�xm��=?5u�;�;hƒ��v˴B;v�X�#��'�
N6�і
K�DP���*m*I�2!��l�������QI�37�J�(KS	j�?�J�~��Ƀi�����
K
P���������+�-�Z�]XB2�p��*����Z��d��JL��%���cJ�n�
tI����@)�����G2i���1���}\rå����w�)�m��k����΀�
�
.T�_�J4f.Wr-hœ�wfW$_�i�$7=��Yx��'�����u&���RJ�f�J�I�K�KO�ϊI�����m�7�sc�*�-xq*���n;l>q�JP�W����T�
~�pӽ���LH�e7�N=
���g2�6�ڟ�J�z�ҭ����&:
q���<��*v�.��XG�\ՊaiAI�d�%�7��0����<DX�`�䮾�P�Y(%x3��{���zuJN�]�W��,�����?o�K�t���[�u��]���px.�`g�^9 ewzB�j7

����X�>Y��H�r�[�x�	�,���l�q��(~���u at l�N/�2tbK��	ݣ�<;X�*5Ms@(5*Tjve�-x�JKc�:�p�;8��J��J�T���H�¥\��Lc�eN�Ri����QI��?	�"�c�p��(`�?�u����X�/�J�
-�x
�h�C�ܘQڤ4�%�
��JK�%x�(�R��
nc��YQR��;��%J�ɤޓ=���s�!H�B�*6�Ù�����;�����E�D%��E�t#�4�󅷑
��#���DN�G�:�|�l���m]�E¥�8����Q�PI�\����*���<��
�ћ
x<�T�s� ��n8��֧lr�t�i�T†�Je��7�"�y��û5��Q0� aC�R�
D��_��X�q+��^\
�!�%�Z���K�(&uC	;±�W��(I���ٻ������Y�=��lK�w�s�M�����!� Kpg�
-x�����T��]~�C��%cI��[������NP�Q"��u�~ːK=s��V��M-��V��P�a�y��
�z���ͬb@��4_T��?����4��i�T���F�Ji�sP)(,�X2\r(}�L:J1�8�G~�@����+ޗ�� ;�,-��pq�`�O
���	%�
(Q�Ú�
��Y��q�t1&�j���]����å�[\2S0v��
wٴzg �J0���h��T2Kf��t�Rh���Ġ�^@_�u�o��Lt���
�j\��
��<�f_W��\��-x+w��BT���J���g�-
/*�|*�L��@�(���`)�H�u@�|�p��l.�RKr�=6mli)��=
sx\ZRX.��훆�WJ-A�;�u��-)������Q'w#5�[��5\:j
-�np8S�KO�3�ť4�	-xp�u�d�J�
R�\ɥg�f����"�34�P
-(.
�a����p)��?`�0KT\�p���pO��n�j
��k��B��
oD%�:%�@�>*�bVA%���;�J��y�$�0x�%]^�%�>&]
-J�)��K�n�`�Q`i�YP�L4TEV�
9��ÿ,ᣘ�
��,lG��R�%����C'�b;�/k��q?=ƥ \��N�lp
-�z
�����/q�M��� �ҷ�ҍ���T���p��.@	��VL
-��_�.���	Kt�EI�
-����Զ�
-rx�Q)�
���ܚ�Q)�y����4�/�Ũ�W�H*�y�dTr���K�K���y(��wꯓ�5����z�JK8���!�^��d����@	�
���#%�sجdI��w��@�\&�x䣎���c��pɟ�YFۍ�&�p8�v�@b����.H���Τ�G�1*MD��`����u�
�7��ɿk �,y��s�����f����V;Z��ݷ*A��ׁ���|������
�Y*��9�JdǙJ���禒�%�K�%d"��c��P�~��_��~�.,͗��ť���sx�%��6<����R�`v6ɸ#
'�J#�wᱎy۷�Q�6��n�
�����4���+[�P+���3�����G��J:�G�u���$�
5t�h(u���Dv��
[�1�@��k�3��
��r���o�a(5�-zk�%��N��?X9	�w�Q`��Sj�� ߨ�V*M,��(��
M%:�[s\����K&ZX��c���q�s��o���%��Km/�K+���~
��WJzLi
L)����@iě����ƆK��Ǚn76
�m�ے�����:N`i o���j��Sk��T���rQ$HP�Kb����u@��}�P'����s���{�����V`j���U
�* 4EE�o���R̒�}Z�<�M�t�i�*MN��0�"`�L���@�#�čx�zȶ�s�gi�@i	�t�^�C��Wy�,Ք�`LI/��
&Q(���w;W��
�
\�a�f��Rƅ{O��ȷ;��
���n��]Q٭���R4X�e,M|,�p���@Lrf�{��(��m4�K
.A�Dt;�せ
���J
�����J��������s�O$�IP�
���OD�,Mu����
o��
^��,mSP�K�X��=�L*}(��]�Ci���Y���'�°�so���A7ae�d�3�� Xd��h�
n�|W*��%�7HJg@�GhΨF��,�U�fU\���TmK�R�C���r�ÕJW*�_?�^h,yO�I�B�
��Ѭ K�������*�����,-�Ã�Y͎���|�2��t@	��a(Q�
O)���]�T~�0���`�wo��ץ� p�xg@�w ���q�Z�VT����evDN�2�'�đ��A(�S�?HX�G�	
�Ky^C�T4��
rx��k�݁ZÙJKC�^K6�U�J����T�a�Y8ہ��
�g?�~��V��ƒ�x��~a�<}x%́t�E
�%�R�������T>�m�ϺP�0���lJ=��K
Ï����pɞAǥ�p��
\*�
{%�z���m
K*m
ϴTZ���/@�`1MYM"σ�[�[�G]Ζ��d[�����KJ\X
TH*�m�%l�m�M�W�9u�Pɸh1;|��!{��_E%�����$�'�L�4�.�_�fE�)-q
���E���^�X���9�$Ť�J������6�u@)8ԋ
����z<�`
-F��=	 e頲�����,
h������E�l��P�#X��6]L�{�>���E�se��F�K,A-
�
9��Fi3݂w�ҕJ��{߽ �yމIU/�z�X�Ғ��K�*��^��rx��W������J�xc�
ٚR��
Ca�Å��g���]��%1㧄��tdRU[�[�4���j<�IV����ϡR�U?��Ȯ���
��-D�-�N,M;�Y��P\*���p=LCKO
*�he��J�x*ű�ɥ_�c�t����>�]���t<�9<ڇ�a]	rxM
X���O
-L��S��~y�}P2j'�4�����-�qҼ���3����fD9�Rm]�
����Z�/z���c{�ϢR��yX
-¥A(
�X����bb�|�XJ�
���(сP �� (��
�h�JSA����T�PiKM�:��P���6q@c
�)�X������K��_�`�u��t����QPj](�H�:���ù�{�$z%{��r�g
!�
JcIO������:�]u�6-5
�YA��ϢRw
-�\��Xz�%g/Wwbv�s��N�U(5)�N,�
,A

�xy�5���J)�JЄ���)4�.-�
�T�R���F��#TjX��0�ȏ�-���C,���u�C
��C,UM��˫B0�<�/��n	��w�P2%�����/}9I�H���&�gA�K�k輍�n��-l
�BsW�GO���s�:�
�ȇ��m7ђ�1P���NU�Ў�����eSm�ʁP�j�J�� ������JW*ُ�����L�L��Z��;�b�*����a��9�����\1)�Xzy�t0i?�� �.
(]^qq���5�%{+#b�;�y�C�@ت�D�lp<S��� �yT
-�%������n�U�}����s�^�.�u`)5�R]�M�,)&!�
-hwȳ�&Ya~�J�+�����xR%z�ԣdj3��v���#+Knǃ���=K/� -6<4����^~��O=���	�̅��Biz$��yDZ��v
H��)?Dgσ��$�aZ���<(+A�qƮ��j��}��4=�J�~/�wc?���vE

���e��"�IߧPj�CD����\c	���R��� �C��|8�	�q%lK1�Y�T��S�]
0Z3�{U�am�y�k@
��r���H��9<��Ճ� �
��~* K�).
�� Lzi�}��~����B�2�ٻq�%�n�
-��*?Ro_���
�[�zI
�zi �WK9�w
�<���E�f�h(��:cdu�w*"���y��0\�
-�L�nJ*%�+��T��A��ť�Z5��5�b�%>��*��:9<jxH冇B�Km���T���������L2P�1�r�.�w���0�N�nY
-�N{w���>dh��XZj,�YV��.�m�KtY	�<���­���4pًܪo��-�tO0�1��sa�-�.�"
��
���Y�2o(�� � TR!m�
�W*]��B���R�N�t�cޯ_R,�Q�Ri�ҷb�

7<�
��Fвmv�Aa��%��^�I��x�&�lG���&�F���m��w���,�CT
�[;����х%������Ù*R���`k n���p<�T�U����=�sIY�'����G
��ZY!��@Y������J�+��Tr_!��uhKT��?+�/�Tt*�^Ѭо��2X���
 ������%T��~P��S=J��t�[ťq�:�qak�8or)��c�W��.�R_(9���Jگ�a�gQiKG-���(�9Vs�:e��~
�LH�����b�f��S�b��	<�ӮT�R)�U
�y1��U1Ŋ����Uk@,C/Ò�� ��asx��.J��m�? ����{>��iˢ�R����rZ»�$��\�

-cX
�U
4x=`:�s�;�����
2x����(-4
�6r�D*�sx"�'�]`<��7Ԝ7I78{K+��<UND���SU����T��"�tw�ҕJ���R3��>�c�4 ����’mx����� �

�mUo����]�����}��[hthj
,�Q�B�{�S^'&�3�X�
k�|��d1��X`�.;M�BO�� %J��.�5�
OO�R0���e�R��A�<:CX��RTd���%�"����`���
-KJR.�&D��+���T:�Kc�$���hXT��V,��=��7
s�

�U�͛����}}x~F�
�@mwE
@i�����ҙv�F\
7#��-
��u�鴏ߏ���z�Z\����pñ
-����ސ0
\e3D� K
[����ұ��)��F���o�/�c�D�%n�Z� Sx:T��h��`����J�+��oڱ`�C��Wf0б@�B�x�A�ł��
�@j�u(+��Qߢ���s����bR��˹5�̠̻@�C��B`�z=�ӹ�~|���{��-�0�Be���� n8�y<s��K� X�?�$S$Z�8�@s.�8=��Aǣ$�!�N,����
(��LB(A�C� �f���J�+�b_�#���$W����F�|�
-k�_Ub��(���R�
4<T-`�y޵�}]��m��
�EϷ&Rr���@���^��!*�P
-'�(�F�����Ioы%�3 at c)ۨ1�g���p�3/C���
���4�8g��֛ri���%$±���/��9TڬbT������҇�Wu4�:4�4�����|^K��
�]�'Fi��T�
FK���g��z~j ���+�R���\QI�
-��t�Kt2�bDr�����d2xrI/
�pɎg�Ǐgv}�,�l�w��K(���ٱaS'���RKrӅ�ci��Y�"��R�mxP��)Z� �JpS�ݕJW*�o���c�E�1�W��\:K�\���)hxp��
��Z�	��>4��SL��͝�R�7(P���OiJ�r)��}��
q\��u`)v��ƒ����Lj9�<��d��3ϥR'�B��*�8�|$���n剎N
��e֋����R�d�"�� 0A��pI9�0���J��
�*�R�9��R)~��4�������#P��֠�ܛg�r�ri̫E�TbI�h��ѕ�Ŷn�U�<�Z��PL����tٳ�}���!�z�t�y���_�y\�����=������v5zi 4wA�B�g.ǎg�R�c�s�
����\�A҉���_�@f}X�j,-`N��>K�*0���ň5���&W*]�{��w�J�j
+T���.-�U�׫q/���R,��ޡ
V���b��߮��v�J��wO�}]ъ��t2\C1
��n)�,���ȹ��X,��p
��6K 1
ZKޯ�^�K�>,
�ݶ�I�D�uoF���Eu
�|,���������fXJ�rzT�[@�?
-�TP�R�J���	_�\&�*�箖u�Vȥs�$5JP��?
-�p����9���px:
Ť�V�Sy��ԬP���ұ=ʤ�P�~@
�8�r��R?��#XR�
�U�
-�3��~B�1�W��c�!�
*�X����&R̍8Qd
���[a��bi�L�r�^mR ���\T:P�v�4ѡ�LP��J�+���R�\=H���i
����Y�Z�~=�}�
-	���Th,U�����p/�v[�� %w�]�>���[@�KQ��
��g������Ճ�����Ҁ�*K�4�����x&�{��Y��Q��t��I]"�?Bb�����)�/��XZ������p)S*�Ip�����`�J�+��Wꥒ�^��խV�V�I�~���.
�~�B�2��\W�V,���
������-ޞ��TP2k�/
-�A&��[���oQiXs7l����h,�K��j�4�w�M69d��f������h*}p�$��2�Ǎ��ѤWu�;e��B�
��
\C*!����

�K��%k\R�J��w���(�~��b��N'��Ch
-�60�VǼ�}!�P��!,���DX�k�s+7�~�$A��܍���R ���[��4|�w��;:y�bɽ Kc	.:�k/
0{?ig at F㙐������
XS�?�I|�>��4g���;��\"�7K�Ekͥ��xyA9<���J�+�ƼT�\Ut
b
IV���~3(U̳��f�\:Q�>J�
K8��Ԩ�<�v�r�⵺ږEP��`��$��'?���$߼�;�q�]G{1k�]�DX�]6���A�@�C%���3'gS)ƥ.0��n��bR ��x�M'BX��
��2�ݍ�cI)t�+,eY�*]R��DMxX����K��v�+��To{ψE�2�Ѭ�ã���e�P.W�n.uS���x�DLJ6��SX�%Cx-7ޝP�ܕ
%��!�_�d�+�@�}�\�
1�� ��X����vdžKq,=��L��XJ�\��� .)1%f<s9��0��?�J�X���¡k�CG��GqzE�δOV���]�Nƾ�,=(#�W�A�,ѓ�
%���4�R�J��׊�f�O(�2X[S�i�D4���X^�t.��
N��+אI)aI�Jm��o�{�`��6��ݝ���)�ͳ�EJG���W
-i<
-s7�. S?��|�~,�4�`:s���̈́�R]�|&�6胏
�
��>`#\�BU�.7".�~ʼn����[r�Ò��c,-	K��K3z��PR?�Y�
*݃�>k9]�t�R��{��m�94D���L?�N��*�*W�Z7Ѩ�X��(��KS,��	V��V�"%x�:�
(�JJAM��;�I�_3m��w�Le�.b��[��9�%�4`��db�gF�+���|*���GSI2)�R�Ȧq��
ՙv�*UOy��X�#*=**���zM\Js�@�CIQi�������JW*�yb61�]��
�r���$
-�rry!�>�x��s�%C��b���Ƶ��Wp+��ӷ��
W	�P�EJGB��+�oS߼���#�3w����W
��Ôv�><���n^PPo�g���W�
���
C%�I�a]��+���ќ��&�i�K��cX�X�Oc��\�>TWʕ���D�����+��T~�(��Lr�$�*j��h����(.
�ZB��`	7��m>�����-\�^�2�WL�%(Q��<
T2��9PrL\�Ia�*��<r�s�De$�]�F�tV�ԇ%�x�`	���Q��%�w� %�F��M6��u�N�R����$Y��t����
GT��..E�����ab�҂~��w<�9<�Z�	b���JW*�}\56��I�b��h�t
m����3�T��3�|�	'OK+�0�Xj�[{�
��V\Z��(Tz(Y
�TcH@r�>�P
l��n� �.�%\e���K��wT��!���5�
r�m9
��
�D�J2P�0)�$
$ [...]
-K)v;$6TR�C�OW*]�������O1&�r�j�|���j�*�X<�Y�X��f�b�
�|*�s��.T��W�p�R��@y(��	k
����.�0y�W�}�n���5r�8��s�4�
?#94K�Ҁ���i�3��ń�T
-����1(�d�'�+'E&�KsH�s#��*.�� ��)"���M���{��cI�،��VSXB&)(�=X��j])�JD��+��TzE�H��Aɉ�H��f�b͵R-��!
����?���(�O�\�&�7#?����8^���^�!� Rr�X(��s��@�#yϞΧ�y��A�C�Dc���.��;w�,�%I%�4`�K2��{?!�����-�Jf�sTE��d��
@i�I"J:Bd˘��!EeB�K
-�}�_�"��J�l�S�60L�Y<(ae	��|m)W*]�4�	���`�^�D�
i+�
ky��[uûX���f:`Ҋ�����z�%��u2%��L_�mn�&%J�7�R(u3ɵoڼ��f)l�Ǔ�R��>k7�X��
?K�1�e��$l踷��3W<��R)2�y���M�J]���ݙbR 2�Ȋ,�9Ru��f��:ۆ����~�$�D��d��m���LJ�{��+~sK�]9u���ϿR)~[*uB���r�7p�5
�p�8�Q���8)�i��M����Ly�K�+�y;��
ȸ
-�L�X,����&P���	�:
"�Q�?P
-���7#+�>�D<RF
�Sp�]/�:���_��ҝ�Μ���X��3yF�8
�\�J.}�~<
�|G.�x�"[�P
V
+,׫�ܺmC�ҭ��L}�5�;�'%(��/L�G���J�+��^�k~�&�A��˪�m!��6���3����d
�L
&��b�
�l���P�a�]|Z�r�����M�*%뵄�J�3�%��	(
0)�oJ#�Z
-,�u ���ʈc�a�>�v���!,�t�]�&9K��˰���3��!*EFj�
�L�df�+�b�-���D�vT���҄X:�`]���.��_�&}����`��%��LJp^	�SP��Sx]���_���ߎJQ(Y
#��Q��X�Il
I��[�	�>�!��2�V
&R����t����Y�%���
Z�ʄ5l��

6;�����~`��{9���?_J]N����.���G
bp�a����v���uy��%�"X�
��KRgg at 0�Is0]-�'�#��R?��֕3N��X��6����F{8�rI:�����p}�
��f�ޘf��
-��Tz�R�J����ҽ
�$��n--�@ɬӗ�v)iS�ʅ`�.�pɏ�NL�}��I�1����YC��X�^�+�
-�M�e��Ro\�-*��&�<��&j�@RXE��IcE~@X;/�z�Kű�Og.�ҀL�
���g�%�K����9)a�W���&^h��ћ>�q���:!+�n����p�#q�ET�]�Sl]i�b�C�s'����&W*]�4��:�e�{�5�
��
v�W�Y�Ed���;%��p�(���
FL�K:\�x�
�vKw"X�8�x��K2J3,~�����e���H�
U��� )qŐ��/2w�ڑ��ݣ���v'�:�T\`�3���x���|��>�o�R$�5}w�I�FX�m��x��

;�ڗ�2`b"ƥ7��~u
,���{C�9Gx	~tͤ
%&
*�\��_N��[Qɷ��8{g%�$�$���r�
w��1:z6)�a�3OA�P����m1��e�iK���O��wk�DK���!����4�[�	��e��J}m&��v��rJ!� ���0�XYkgbX�\5�.,Zܜc�B,�����ә��f����τ99s!*�N�P����2	��]@IY�Y�9I&u� ie��]�mh
-�X�Һ����[l���$*M�T�Ri����YJ�s�ĺ�H�"�B�R��
q
ƃ�P�%C�BK��m	0�U:�W&\r��m���ޝ�����_�̕

��)$e��|��
%�
�J���G�4���J������i�����X� ���^x�"K6kSYJyg �g"�oA���M����d�q#��RqPs�꘾��D'++#*
��@Ra���X�U�3���)XR"P� �����D`���<1��K�5�n�T�R���C#t
���\[D�$
�$�f�^)�Zo2]�t
>Խͺ 6i2��d�1��åi����ǿdH�G�t[a)�H��SW�Z�>-$#����?b����қ@���[�c��fO�.��P
��8�Sh��*�n%��m���K�’��Mxi��.
0[(����g>���7�R�IC2�2�ZdKC�L(�,�9�֞�Љ����
��bX��J9g�Oa	�Jh)
ɇ��%��)9\�@T�\�t����
AIW�f�I+��Id
��ؠ
U¡�v
Ԩ}B��B�5m�Yco>�’���`�q�u�HSi����D.���NMÛJ��N����D�Lx
���Ǎ�
�[<")$Z
-�|X��
�)q�
�iX���%Y]���`����̕
��� 1�� �.
x*P�df��'�Y�"[[ʼnkNA��++-*��Q�IK�CP�]�])"X,Q�QP	�H�i+D*a���?�J�<
�~
�d�w
��f��f���j��6�a�R%d��S����h
�zm fJX��K:�g6r��n7Ai���4T�`���z9�������
-����l[{C(��;�=�zLB�`)�[��)�Iȶ�Z
U���@����HNl�<k��[;�
��4�\K�4`��;ށJ#�4�2��o�l=��
�'�9x
oJp2�Ң�����=��N�ꒃ��Vx�������;E�5Րl#
��/he��JW*
�Y|C�%(�Ed&�n)� �R�j*�Z��CwO���(��*v�
,�i�>�E
*ݑSKM^P��$4���
�]j��*]J#�n�$�׮}C�{��R�b�B%+�
-
�AS��	.���s���
�?��0]�be �
�Tz�Y�v*uA�Cfs�]X���L
u.D�G4��*�د�
x!E%��ۆ��.�%I�ϒJ*��--�H�h\@��J�+�Ƽ�s�CJ8�3��
��L��d
Ӓxd\>��e��I�M�\� EbV��>p���d�z�r�%I%�W����G,��2�N�D/[��E�#~��29�3�$���}�H��T�
+i!�@I�C��M�̭��#?a�������.
,��L��K2�3`�Xڝ���T�C)�H��e�z)�
�F��J��p\�$��i}֭S���M�E��7��aIox�I+�$\� ��J�W*]���b�P2ٻ�3�t+��"�@���u
����*-c���l��S��V|��-.E���P�VR	�
�T/��3�l
h+�`��]�ɋC�q�1D��}n��<g"��#eͲ������qőy�Z�d��]�
���T.
�I����
�� �/���@�{ JOf��^��)��y��cD�N"5�"%�p�D��,����
J���s��b�z&��4�a��
���G��JW*��W��!��|���
k=p��DR��)T<��n9S�s�D�n��a��kRW`�N�l��Y�(�nN�M�e��/������d�� v
ao�R=
����/��q��"{*��.��Tɼ�r_
-�(X�8 P9�;�*(�(k�����i����O�v��Ǹ��Ҁ��4@�
���٘A���
-�u�?���;�m9�7�	]+2�Yj$��W%,E'�����N.��I
��Q	�4&�hjI�X�h�0�6���'�R��4��T�L�5�A&&PB&�ͭ�S5�=�I�R��~����2�J�M�T�w�%}��J�6�@e,��ܱ��%�n
-,����w8�!&��
�;l�P:��D��9ݺ�Q8�K��Z��I1LZk�V�?�-@)�j�y�@Ɋ��G��&�L�bC/\�Kƒ,�,�ә�]H�x�C�.'�RT�A)p$dv)����!��u�h��N�~DƉ�֩�	��&��mC�`���0�2��Q����2L`,�T�Ri�	B%�e���1�:P�{��
2v�2B��nH�T,mw�%v��l�7W�d"$՚K	�KJ�6�(�<u�P�t�����K���4�Iu,]��XQ�`��P:᳌��l}d�A�$�sk� Vc�����m�����Q��&�VU`*<k��^�,}2әzi�����㙽e��
P��w�Hh�QAI0)]#�I�Ȍℚ�d�u'cYa��ES
-������x�B�n?빛%�

QI�ǔ�D���tl��P�R�J����B�6:�]��;]R"��
3	5
4+�`I)��}��������`w*)�0�_N\���KP\2X�lB
sxG�o�JPM�`��R�zq�s��G�0T:B�����tS�
��&�}3�ꖭ�HI!u��Eı{g\k��.k���/�=K�4��[�I!Z�X���q�����)3�$�F0�j�7Vq��j+)%�t����
-�ɢR�&[IQ��
k/-������
��J�bg�B߮KdZ�,��T�R��d��F*���P�P��)JE	)G/�B�B[��P)T�4ʽs�	l��G���["�IY�
-��
s�����{����\)~�뻐J�ⵠ�b��df��B߀w�J��҃[ЛY��$��ύ����<np��[@RȬ�n��CY='�*Xk�U?i햦���:w`�SbH�}t�L�ҀMlg����3�
-�P��̓1�@o�ހ"H.�����[��ò���вRN�#5\Bq���f��ıt��aQ�ts�_\I��-IR	 	r�&����t�R�i�=��J�2�$�Jx)�
-�����0I�-"	l�
�j
6P�|{x����S�
�`JU���T�6\Z'KX����ε��S铳��;���5>�YrD��f��;\zZ�4 %QR�N��8ݜ=UL�0��[�����bp�p��Q����γv��v����~�$[����Kw�Lg>��Sr
-�3���3/��#3�G0�rJx�Hr$�:Zs�VR��2�֕��Q
���@�Ҋ�q,�j]a���
aiBXz�%,�=�U,JW*]�y)y�C�� ��%%
-��-���I�G$�b�!<
�N�D�&��1�2�&�]�[��)�Rږ��� sV�@��K^i�`I&�l~�����66���G�h�&L�s�Ի����DfO�+���e�d
��y�f�P'Z
-[|�4@
,����d���K����n�r�$g~�\s�L
K�x�F��Jv;B���A31C���I��ޖ,2"�/�$q4�ʪeY�� �(�.m at Zi�κ/��Τ'X��C��T*4 �+�zN�oA���	�;
$��
�
n��X�$����H�V	Z@(Ҷ⡚-�̕z�r)0��)�)TJ1\R��P)յ%�����
�:�ė%����).����,�~9JGAI.�D�eeOپ"�uC��K�x�,
�9
�*�����kW/��C�
7�Z����������c��}13�y����q$<�A
0L* q�A�
-����4�u�Ȋ�U���8���mt}v)�Y�K6X�ڑ݈���PJTX�	�+��T������E%�Nk�6���@)��2#&){��5���J���sC��cJ�@��n5پU\�v�5�J�S]_��[�8�(-�,	1�.ZL��xɷ<�ek8 H�޴7T��@i��tC_�f�Il�Rc���m�� �A�7��%b����t��.
��e�����
,�]ti�3��әc�3�q��Ai��+ٮJ~D����L܁�/3�rU�Y�.mAul

��X��YaWJ��n��R,X�%,M5�Pd�9��4�P龏J�ӴW*u��߁J�;I=3�l9}��P�@)U5�$�\�[�ow��)U��ꅟ�i�ߪ
-tl�P�`ʷ�%�,e)d�4����K��\U������9ޕ�^���Y
�?�gd��J'�:������8��ԓD����])4�X����<�U0d09�.����
�p�[)�<L��Q{���;�a�o?�{2,4LJ�P2���ʌ���T�RԚrOj��
�T(+��ց�t�%�c`�K
N��d����)%@_X:X��
��c��4�q��P�j���W*���߆J��;	��%�R���v���$�-Ҭ��������C@"BYD�aJ�L��þT^�n
�}jK�P��$���
�#FK%SJ_.�6fFs�k
X��
���́�'�+�2�y�W�0{j�[b��B�q��B3�L
�8�W���7Al���F���KK�
�]�

p1��3%���饡ty*����#�7.�2�����$�5�\�m:4G뎖�Ֆ�

J*�J�<@O��
���Ga),���
�m���
�J��=��p��?�J~�ts#�L���[q�Ni�&O3�*�*&5[
���I�W�R� >Z�
�	��\j{��Ue�`i��F<m�ί,��]�C׬����&(�B!�>:^�}��
|
��/�tۊ^Ca�@��*&��X���팫��.	�
z��
O��
2rv٠��9��Fw\�J=B
�47�t$���0	�
�Jp�/2� Hdq��d���K���lRA����J�N�9���������%��u�$�>�Jt��?�J
����
S�J)��n2����gȤuK!�iv�VdM^
s��A$2!��K�5�U��� /��*�`'
b�;
FKG�����,�������֔�]e�J�Nn�4r�O��b�Z
J�p�;ݐ���e�I�����K��
)Iıv0�i�<�����tGoo�4,-4�4��
3��S�-X�B���7 %0�:�Qn��8%�
1	݈PdH#}�d��RV
�L2߀\R���,�K�q-�rWJTN�aIĐ�û�X�#%*��JW*��ou��3JPRR��
�b�?(��L"$�f�%��y� *�R���4k�p� �Ԍ�Tc)��4{�`�Ī����w��k��A�
�`-�ݼ�K�J=P��	�tWX�#&���}�n�6+��_�n�������ڽkw����mL���/.o�,��܉9�$��E;x<���!�u���d�[̸�eFf�$Jx��'���V�; +J8�|�A���%�+K�ohm�x�&�R,X���{���A���J���9ꏻR��H�H�d�w3�߁�-�J%�R�U7�KW�FʵQHR�z�VP�6x� *�0�����V[��,A����
-JK6X�tJ[���*Q!�L
m�j�#G�"����
�JXR��]�[u"��S�$r
�r)}��
���W�
-h�m�R�v���e�:�ב
:���,��4��\P]�
��u��
(�d�*�Tk&��6,2�Bt(��V�
-��oH�KX��4��
�J9��hotP�)��[�!Fc��2I�Ѓ
��T�R�}��PI���,)
�v����-��I��j�b)��Fp�?d�@&piߪp�͛�ҥj����F.-�e���4�ť��9�F47����{NI�P���
��%�	RFN;ݘb&��m��D"��(
-���@��c� bB/��^xI^8���

,�K��/)�$�3cT��r<�k�HP�j�Y<��b�
-mw֓K�ȶFoB�g��
-�&�7 �r�6;hA�Kz��X�r��0�`�7L���d(�P�s$
~��?�J=���
��hW��1�����;H��Z�$����N�^N@��0�]J� bR��\s
��ES�T��4J)u<�k��!X
>��
T���^��ŒYu���J1�����g��'z��KJ���N7�E���綑*�G
-����׃�n���NdW������q/��ү���
,�
�.W�����ѡR���TŅR �I %�HP�.a��LB7��a�ׯ��՜���#+L8����K��-�J�)�����Ħ=��\�Xr6��E�;L2P��JW*����*Md��J+���}�P�����(mA��I`�H�
��Y͐L[
��P��K��S
^Y$/��
�����ү"74��vg��k&�ԡNc�{C�%oF
�L`2Iw� ��}��[��� "�+hk��Q"Ox����j���so�:�
�	��s0
%����	��'�^(G%����UQOκqIiY����� �o�å]���U$��R-]���3%K�C
�[̔3�D�M�]��O��'�B�Ձ�w	���
������f&�
3I�!I+շ�C
-��._Ub�T
��%�M5��!

��p��X4H
��!n:�Y�!�}�e
�
�b���v��g��(a�	8��eb���1oڴك�S<�<2�*������U�^����M��a�/V�a�{�'��0ǫJ7����;�D��
N�A[
(�'���F�M��x�I�
� �%A��
c)���A�=#+,SZ�5s�ѹ7T
-�t��?�J����a��:
��S:V��-A	%f����ZZ�����hQ��K[� �g�T6�.-a
���`����	ut
��	}�U�잾��P�J�!��f�KJ<#�3N��$��!( џ
ϵ8�t̝��vU�����|�
?9XBC��<:EtZ��3����P�Sh
���n+�
ʥ����yr�����ʊ
-�:�%L��9ŵ<�W���~�8��.-�.�)-�pɀI3��ԑ��R�J��9	*�����Uy~��R��}��*J*P"&)�"$1�b]D��J�@�P�-�K_���N1	v�e��;*X���ŝ:���+�Jpir��t�P���4��҆�D3b),� ��w۝�$a�ȼ�q�c��
�'�+X0�^���
υ�e�κ;X��j%���3o;a�V�0Tr�&r�(a�n�b��$3�Ft��W�K��€�%}CZP��PSX
Br���,A�1���	,�'�+��T��J�Jz���m��RRV�j�#%�R�|Q���DHR�%\q�y}�0�^��UiU��X�Kն�
�S�
:X�����#K� �������
��
*�=���DJ�<Qf	Έ��
����2a�[D��|!���G
���U s�v腧:\2;8:��H�t���K,��l�lN�R�Цb�b��d��%.�b��ef݈���u�|�[g�����
lYP�H!b����K�\�����w�9\�s��
*]�􏣒�-�3��UC��\�R���B@�UJ�I�bE���K�UK�Q�wJ��� ���၂%rĕ�9�����gZ'9�k�u�q %
ΜP��5�>�ύ���}(��A�
���2�'Re"�B�K�z�]�
�O��Os>ن㉍���Lgg���0�	M@	��#Q;�A2�m�Y��̢"IQ"<B
��,��_`iiwx��79�{����q	�tg.�(u�J�P�R��4�T
-��Ձ�wPT*3�d
�m�4
��a�ER�
�����K��*B,���Ғ��󲀆��`���Sx�ȂJ��7�8d���t�ܽk񎲱��b��T\BP�S�
w�B;>;ݲ�d+�۟�-�A
PH&���\��}��
���Y^xG�t�g>�I%X�p� ̩B�B�7�`�n�)W,�\���f҆���Q"�Ee
-�()
-��EKa���O�Z˵���s:
ذ���JW*]����pM���wXTʷJ���}���^+ׁ���~0H�j���r} ��\,)�W
v͡�9<]W2���l �7�ݝ9Z’����qzJ�d�[�>�{�fnF�
��<���D�d�t
:�?|\s�vc��$�§o��3ә�x�T�Wo�xG�J(�pʔ�[����-9�̶Ĥ���-��P�^�AD��x�B�����N<skY���R9<��ҭD��RW�t��?�Jݗ��*-�KPT�Ne���#(q�DLҪաSꍭr�b��X�
-�%��a^�`����,Y5:=�'��&q,���P騪R�}�
q����pӎ���$��I�}s,�:���1���m��3�l�UXj2���c�����1�Lb��A��
�lW���P2����Ǥ�Ȇ�#*#)�Ϻ�2 �
-K�(�̭ef��	jO��E�dos�B��`��C�ɕJ*u�J�V
��&��ہv9P�%�^�$G�:�!�q�`�D,�/u��e�)ç|q
-��
��w�D
-�K�&X-ǚI%ZE���y�;�>���4
%,O4[�	*��+`�#�oC<�D�
-���	��K��Q/<���
�>�]6K4������Pi� L��"�0��2����%�lCOn����
.A��lbi��
��lir�gz
_q�qI���Jn�4�;q��ߝJ�P�Z
6	�﨨�֍%e�A�5�����K�qIb������
L�D��X�gu�	*��������b�GPꮣ��#}���'�J��]˙ ��L��������s�eb}�����E���^���py�GW�k����A�A?<�Ǐ��T\3�İ�v$
��nD@���(I�De%�	
-�xM�bCk�r��xz �:yA��9<=��pI>�%�"��(�\���3�>F%
���Ձ���+AQ���A�L����?�/�Z
.��}�K���Zlx�`)���JO�������d�:���8v,[R�޲�F�
�S��O���?��⣊�W?ԲZNv����.
��RxmJ�''����M
-�:�J���-��cנd��[��ɠ��W��{��џ��^�ޮE^�(�/-���IXRݙP:���?l5�U��
:��P�	�(�6���0野�2�g+�Y"\�
�i������b��%��4#Im�dɃ���`R
�>4�ЈJ��q�����T	���-�O�}�=�J�t��r�[�.YX���ʄ�u:�h�Xa$K�1�qx�w�;�
���\Y鳷ᴅ O��l}�wYIP�Y���� ��r���[�{�O��]�Q����E*
-���Xi�e�Ԫ=S��U�p*e�&�!��r9P2��I�����ˆvA�E&E���*O�]�P\��T�`���%�frmY?�D��� �
(��|QiD�8*�
[U2���:�;��
�_�(��
&���]���?SZ2:��K�JJ�H�p���Q*��С�"���\����r���SA&A�]V�A	�\�<L�7����GϿ5��w����*3��rQx|�=� �G��
�3�V��R+uW��&�[�)P"�	i� �ښ��.�� �0�5�R`��r
�%g0�J�Y�=*z�’�%q��J#*���҇�a�,���:RR%�:�Fg�;(*�A}��D�]
q
�V����~��Ң��*0Yrz�	h�%jK�IT��#�c�l���m
q�pgv��%3Lc�B.S�0�(�>`�ä[��?1oG�?S]ZB�t����Q�uw������%ڞ)[a��X:V�y��$Y�٭�jV$�1�5�
U�l�Ԏ\H���/�P�
:8Xz\��
���SUZ�!z�H�<`�3J�hD��ӸtT�%�W�R%�:���f�6 	_������,�Ëa@
n��L��0=Kf
-(��
Ą�ؙ»���+�}0\S��ϓl����[M
��]V3��d$�
J�	rAwO�M�\�����ݹ(|�mKF��JK)
^T�]A�k�Q�l��RT�M�Dz[.xV��(W,)�6;�T�(]z�|aK��;�ך���D�)Xb\"d���4(������I|
zH׫��Ҳ�h�O��C���� ���-�ca�rx6Y22��:d�3����W���)1�XP�H
$t��'
(�0
	J��c"�޿��W���Lj��D���,��$p�S�;S��ѩR2��F�Jǹ
-P�fb��(I��6�wl}��T|���aiI����;�Ғ��uK�>����å?c��҈J�+*}�?		�\���J�H

g\���Q}gA��k��XzAX2�p�,��ғ
P%KfB+�
|
-���R8��aI�RmW�
�o^}��\
T�YP�	O �DP����p���S�B�hi)L�:����h'
9�V�y�&F���Ί�LId�.��`R�F�U�Y9~ai�_ŽgW�
�w�GG!,i\�#I
-�>6��rO�
�R���sY]�dx�*�IC��u �����~�4���%#��U�$��ܵ,)
-O5�6x�KژJp|m�Ib�~b�q��
��{T�+*���2��%�����nv"?���l(��qƒJz��l{��x��F3�II$AI$JqL������7d�P�A��A������ӎ�
j�D
�V�
�,.�����@iD��2-���:YyG3�x&U��w�m_
(]�@)i��1���%K����
���(<h���Lb�Ԡ�5�J�>����T�.X��͗{�[JP�ݹG�
��Q�!�o7��*
���W��H�,,5j���q
�Y�n����A$a�g5(�@"a�#L%
�i��Si��,�zdzHj���߹��.���O�҈J�!*}����0�Z2m�^� S%�:g�J J��YS��M�~p��u

P� (<�H۩cI�
�,	XJ��9�RQ��raQ��'�d	�\1P�;A��o���U�K�(|�}�(-9wG��#�]
,��3�̀R-��8�9�n�FC��
`ljJ��
D �J��5
� ~���`�X�U���Lrxm��x}\
-��Ǥ�҈J٧q٨8IݬT=.��W�z+"UB����@)kф�Ɍ�,�
o��zA�C�
-KMQ�xa���`����
�r��|����
h��[�X(
�$<J����x�-��\��9
f<Ta9<��;�&KVm��3=P��A�
*}
nI�s�m
T7�����Y�P K?��
�g�%�x�����"T�Ǧ����mq�c�H�{?
-+5�ЈJ���^Q��x�uXoʍ�*F��J	P��4et�MXYڿ�K�$$��Tx��R�g�!�,e�`>�L)��q�����߉�R��B��siPZ,�;&E,���K�/dn9<*Y�,���j���>���0���e��"	Ho�b[_����o(?\�v��	��
��Ɣ 
�j�i-�7Q��S���G��,�~���FT�<�w�J��Z��q�e�5	�(Uz����cu&MY�%K�$�ޡd
-Ϫ�K$��]�
,�&�Þ49y����
-W5�R.X�8��	 ���Q�ҋ�
�;���u�p��`f�NG�ջǮ��dk�i�,��3���v���F���ۈ�H�`�7(�k��PK?4,�`�VHj�/
=4N�
)
~�:�҈J��q���!cU۬d	<�:T�Ìu0�D6U�5i��TY�z��P�� ِ�
�Y4�?����;�qgP�I�44�
��m��L��[���[�B�(�G<
-'�W�yM�,Y��]�O1ߞ�n��+E�6©�����/�[1�ب��UB�گ�"���ْPܖ�Ԯ����F���?$��C��k
J#*��E�Rp�#
-< �P�1�Y!UzԩR�ڡ�M�H� (<l���
�,,9Xr�Ň%�KQ�q�ƨ�����Vn�"�y�J~�}�o���2
-�ik
�ÖF3K�qxb�}D���96l��#
JM/I"��֍��ӧ�b�H�[R�A�
$N`(Kط��njK9�Z%�+OE7���������J(��4�R�
gx<ס2+h
V�|U����R�jfM��8��@K�
/Taɍ�Kݟ�SI
-
��XBRZo��igR��
-"}��� �u�j��G�vKԦI[��x��υ�b�	Q
4�W
,E�3�ߤ�k�9�/�ѿ�^�ē"M���rg�J.���ҩ@)Kl',�W{Jj�6�)OL����<
��~��qFT
-��{@�Pn	�x��
�
��3R�c��&�{���Kb#햞l���P�g�]��%/�Kw����������ҽ���"}1/X,Ϩ���?R�t�SK�
-Iwg�p���7+��E"Y�{�ɩ�6�>v�\�$��b�HW6E\���e��1�o��-c������C�����5�%���[gD��ӸPT���DMh��j�]�A
�W�5���I^2�R{Tr���
-i���
K^�RdMz3������cR�L)�*݈TɌRST����z�`̓���ݝ�¡�d*��s%
/Yj�
�a)۞�����%YW�*���wl4(*���D��;���v\+-�a
��
zH�"��Ƙ��<#*e��%�R�&�
�B+�݊>�5H��Y4mx�$Sx�	����:ֱ�
�ҰQ'V�uH����J�
-�3��bW��E�(u�fuG}����(�U�i��<�J��ɒ�r����ed���I�����EC�M�,L򍶧��ӃR�X�ϊJj�ó��L���3SZ k�)�]m�3�R�i�;TF�^)< I��4Tcs�W^qF+��ta�P���.�%�C�JM
-K�
����K��Xx�v�Ԡ�D�Rr3D�p�>�R�C��WҰd�<�Vҋ��O������)9\�빼��5��x�0�ЪI�*A
A�]�h'$"v"Xҥ%��vd$�{A�擥��/�L�ohm��§�PI��Z-�HxI�CC��-Ϧ4��i�w��A���}N���
,��;l�Q���B�ϑTi�������o�)�|��
D��̌��P�7/t��*K
�!嵢nΏã��K�B	VM:Ux1��Y ]F{���`ז]�$~^���:z��Tk��64X���<#*�KTr���N-��<��6Scs�/	S
��t����a�G{/��i��a�iL��l:UrT��$����^}":
��k|�)X������Lɢ�!�Z
�Y>RK�z&K���#�^�A�J2�eѤ���hV�Io��N^i	�Z�
H�0wm��$K
p��uFT�>��D�����J��'I-�H�͙��M�����N���
Kf���Gr����e�iX�'�>�t	K!.�b�,��<����J$ [...]
-
l��K�����<
�0�K��%D���N�B�;a���$���k�I�3���ârب?I��H�Q)�4.��C�tY�,�0Nrg	��Q^
�"�<�V��/�4Z�
r]9L�3�&��.P��Ra�+����E}�
�]hO	K���+Y$�����<Ș�ZaRײE<�P�Ҭ���6X��������Ԋ���d�V�no�9m�d)f�
@iD���x�$?�M��dt�l�r	-��*��JZ�d����,�����x.ҿ�~.I�D��(
�ۧt�DUs�:H*�m��#_֕����Bۃw&�ݓ����iM��8
ZcLj�ׇs^���R �;�	�
�-#	�N.�

E0<
Ex"Yr
�����!c�c �jD��ӸHT�;J-v�n\!�J�
/TV�x���Z�
�t�U�gi��IxW��؅���mChp��K�W��®�_7��::�nG���¹�V�咥��P�Y�&Kӱ�/n4�fN���K�T~{>���`�rxU�P /��7k�,M듥�P� [...]
������=��5|�D(�ZǺ� �R�'�~bS��3-0�WTуM�fv��9�ψJ��q�;�߉-ܭ�
- ��ǖ��PI���8s�nIo*
W�#�\"��Q̪�bR�
��b���zEL����*
u��|'턶�



P�%+K���gg�j��R��
B�/*�H�Jg4��<
=\e�%1K7Z l�Ӟ����y���g�qe%ѭ�񻕎++ՠ��9���Fc�����H?�4
���>joG��:|�{�W	�JkH�T�|��4�5�-Y�%?�L���R��u�X��j	�0���ҒR�����)g2��@��A&KN��{���z�vM�?#*e��%�R.�=���tC�lYi-�J�%G����&SBi��n�F���h�È�R���x5�M)K�Wi+�J�j>�N��%�
���dIpC�8�3��[��ԠH�p+P�^%J��R�ފy��2
=0�꒥�K��
�?�^ψJ��qѨ�@�5�Tݸ�ㆎC�����O<	��.�4�XTj�Ӷ/��o���r�X[U2�R�
-�}�'?�
���A�4_���7ww"Lʅ7�,�	T�W	U�T
-<�Ѵ�T��vɒ���>,

j�h�^�gD��Ӹ|T�Mv��Ж(vx���N�Jw��U�C�g���ywG�й5Ǥf:�S+C���RP�R�*
�����:��
��,9nh��q��w9T�Z�8	&5"�P�0'�X�-�T��޻R์�>�G��diI��;] �kK�g:#*e�ƻA%!�
��#]�8P
��\�#��_{�
K�J����s����J�q���k��0/}�m/�W��R�
-*]�d���c�xp��;�b�;$e	<-�|��ͅ[Z?vD��
x

T�
i��
�ӋY� 8H
-oD��ӸtTR��
���@p�YM!�ā�!xǢ����a�B����P؆�yuyT��Qm��䑩����[j���r�X�T�T����7���{WY���be���d�GD��.
J��<?�0�+
-�8U:DJ�g2��
le	ex0KwQ.��~r���2O�
���t�d���{h��b����h�ִ$�\m*�,L�
6,�
Kw=���Z`
�e��d���\�R�.���#�ƫWY��P��"
�vБ&�����ߓF%�}L�������
%�h�_�
��3�p����,�7�diD��Ӹ@T������b��;�mm�&�5'���x6m�sl�-`�E���h�����{�f���A�q�����z2� R���J����J n��!����א��ËxZ�@���
�YU�͔J�H-�@nx�+5�E፨�y��ԥ�H�0u\2h{��q���h+@�P�l��P)h��J�a���Ω
o���@Z.
��JÐ:hcI��p��]R�"����6���N���ylj>o~+_:L�6�R-�@lx���uq�3�R�i\**��2���X��D��d�C��ik�E��}�Jգ,p�Ì�;L#�
Rqw��ј�(�
-<lVR
-��j��R4Y�t������]{�j
⡄��g4'K?�VK�V@�w�%(�A5Ҏ��y�J�%x��'D���
*U�4�wH�
:���R�ߥ�t��d J����|�?��3|�#�ʫswS��YyW��붎�T'�	.���L�g�*�fr��%� X��H4<3�7�vD���xw�t�S���X��H���gZX�)*��8�8%*5¥f�(�㺒�lVr��Qh�b�R��Q���Bﰡ���›4�^x���bQ�#�l-�t����QϒPK>��ㅘ�pވJ��q��	�H�H�>���0'}�G�G�JE0/�J
�ŞN/�TӮ�F;Va�
-�Z�!�Jں��
��S
��~�Lp�ǵ�5��r�u(��|y�Ӫ M�R�dN;<3��>��G�X O�0���ռ����5;��
������20����:��
[h-��,��E?\����#ލ�xp ��o�)�I��':�w%��r��p���l�� C
��io�ӎ��y��J����W]��&&��xG��B�H�T���S�H�w���ĕ��N@��\�h�����?����ݦ
Uxv�p�;x�����&꛺+�yQa�`B	�^�z��[
-�2r��2O�BQ)�+�l�`
-
�3%�ke�ƨd��s��
7�u�p�b<�9.Pڿ\�\xO��Ek�t�#�O��	
-O����!��2�N&�R�G^!j���:�f��������iGTJ�����t<*%���X����5;�ғC���6*���K
m
�D��(�#ߐ��eIPx<
o�u�\�&�{��VN���x�%�cq�²�v�$Qx��V崟��ӎ��y��d,�0a�|i?����)P�~@)�xV�y�[eq�
��Jo���U�o�Վ��c:͑Vɻ^��>Tr��Y�&��~�x�	%�[�4�p�ZDrڠ�4��vD��ӸtT�g����Qa��NN�;9*���IT��oow�7�
�'\b�Tx�f̶~�DG�#��“*�6u�y���-�Be鸄D-pfR9�^Sx�ӖaN�R��)���2O�Q)11\s�0|~HH��Y��^5*
�*��[e1TT��aY)XD!�EK�t�#?m�£FZ;
όz�K���J�Ӆ���'��
-%ě�Qx����3�R�i�+TҾ���p�̌��0��5�C%|��JF
x~ٜZh#�P��w�{r�Ux�B��f�Ym������iW*+��⹗���`ր����Uz��i�XN;�)
#*e��ţ�� ��9gvb�f'h��cQimQ	WYx��n���Q)WVR�kh6{��k�Nxě�Ux�'����-h��
�v,����	�_V��J8����4��~h�~��3
Q��ii�f^,�ἰ4�R�i\
*}�G%ѮN
yTz�xTJ?h�J�S�ͩ�g|:o(��;�]y�Îw��:z6?/*5;LT���|��
xC1�k@��,����N���9훟�2O�2Q�c��{,d���
�[Z�
�p�@��*�^��*�
-���7UV�y�/��sH�=��FZ7
����L��b�3SCuV�hWUV���&��}�r�ǝц���I3	������*Ŝ�D%�l�RnbxKk֢�/\��Pi�h�+�/�DY��e%��eh��;�m�AQ4��8p9���l~.j(j����l����A�WV\(!>j"�]���y�s�/C�i�Q)�4�
*]'>��c�ڕ�0�k֢҆V�#�pA��s�qjnޠ,�ǿyG|r��m�-,ͣ���؀gpw��$o5�]�L��
YV��'�
�j�s��~���t�Xj.�Q�����E%w���e����0O�� �
-���J�X�C%���G%X��oC
�j���
#��e�GWV��{c��N��Qw
Q��[�]祥��6|=2��s[)A���t7�ӊ����<fSLgD��ӸpT�9K�v�e�� ���c���:ͭ��"Q�Oڿ���n��Ju�����qo�Uh�E������y20��NpS���ۭ�j~խd����d�s[)�����R����/�Q)�4.�bM���O6��&ړ�����P��#TRC>�劃����ޙ,,}�MRw��OZ)�}�jh(����1�C����4�׽��,
Kr
-������ΈJ����PIP3l�,0�J�Fb��Q	W�_2*%��z�R魱B1�P��w�[��� 
��<��<*wHQCg�Z�I�!�B� h��t����>,����imǒ�3
2�:�R�i\:*���P��hW�&ڞ�I?�
u�T�
����ED�e��Tj������bl�Y#����J�t'��F쐧]��?��̱o&�U�rZ)�h
Qɝ�����3*��[7�!��'k�T��o�Bb�
��ǒ��%�X
¿yǾ7Rwq��P�G�q�c%
�sw9T�)�ο�:����L��RB�L,<+�*ΈJ���Qi*��vh�D;�R2�����;�����cߛ���j{�����Cj����W�ԓ
Đȅ�}
-�a�}�@¿�P�0LވJ��qi���et�5�v6
�З5�T6@��A�R�cUID�y
-�_�O�Ǿ9i7^ר���j�ὡ�r��_�=���A1w�����P)���x���A�R��5YQ)�4�*���܁�ܜ^�/k�Q�oM�|s����\�����\�;4�Aox컋�
��Z�k$»M�ó���
�O�Ł�V��bt���q9�e��κ�utbaL�0�R��#*����CwʚY��J�OT�T *!����P)>o�F������
z�c?=�Ѯ��a�
PC�R�W/w*)	޽?�d�6��h�sۇ��~}C���X(Ex�C፨�y�
-�����i?�
8dG;kַ+��J��A���J�9�J�~�K4�N�
�{��<�Ӌ 
�
-jh���L,!«��=��j�	܎�A��TZӊ9m	˞ec��
�i�gD���x'���7_���1*m	����"Q�ڢ,W�{����߼�oORC�
� x�����q�!5�vV��tu��o�y��@s��������%����
-�\c�ZfQ��<�R��GT�
�pc��<O

�:*sK�J	s�<���u�%�nZ�sG����
��
~�N3�s��,��tj(�J��Ղ)x�=��j���,���/!wЍe�fZ�Q)�4�
*�pV9o��k5p�Ĩ4� TJ
v��F�j��� ��>��"�T��پ�7tw�hu�|S����[�/ ���V/��1�M�FT��?�RWTJxK5�����
����d���9�
�����!#���0����j�m���[�d5~G}0��^G;�R�i\2*�c�id8������w�Yc����'��R��./����WQ������$��u�@����f{��>9�qf�1�O��
����9��Q�?T��ٜ��n�pV{���
Q)u���`�
�ز?�w��� �$!���
K��`�
�<�$7�{�I�R�{�<ǚ)��
���i�m5���G�pdx~8k�
hl��
������i���n}�c�
7�Ci���PF�NꉺB��M\*�
'˴�������tT��
O��uw��5/�rA񨛹��-�
��;T�� �l�^�Y�a�le�pR���p�@�j�mBHT�mu�7aZq�eZo%�:�%�#*e�ƅ��{�1T*,*嘥�;�Ԛ�*�M�����Ţ�g�
X� T*�P��M�T�/�hY
-�J�i
�Ѭ���(Ӻ�3�0��c|�3�R�i�#T�Ux�}ݮBe$c�:	ވJ��{�hs\�`�n��[�-Ge􍝰6�]i��ۗћ�+�r~(�f������]�w0{5�aɯ��{���\�?m���O�=�RT��,�Q)8-��I.�j��Mz��r/�h��h��o�F{&�e��\t݀�T*
5����4inXC�uD������'*��+��l���'�J�|T�\�߬lPi�\�w�-�	kwQqW��
�>6��R�
C%5ir�7l��?m���O�]�����"���<*�+S۬\x#4.��`�8������b�_��oj��pң�E�5!P
�ծ<;�?Ǵ�
w8��uD���x��[��
Q��i�Ja�b��tA
-��[|��,*�����J��f
���m�\I;E����������trT��584�R�
-�ޯP\
*�8T:XT2{��#��R�F�7�ZCT�

�5���.�v����6ڈJ��nP)��6�^o�^iD�V��M�]"*
*
�Qi�v���t�q
Tbz[���k�dvn��G��Jw(��_���ozFT�<�w�J���0�R�i�J�f�#4q�=:Tҍ0*�,*�Ax
-��ݞ��4����
-��.�����cZGT
-O��GT�}�A#Mp�����*��?��;�P�xW��#�JŮB���C�M�xց��}�F�4���3n}
�՜��p��I�3��_�X#*�F�$W����OT�Us]F��;�
���=s����=�P	��ww��Jiz{�x���ri����FT�LT
-�~��݊�gwSwgqX*�oD%w���ũ�������C�9��Qi>�Cí�.��ޞ%�D��.�!;]�*%i���*�.�{�3z���́�R�*���q�
�Y������
*
g�gO�t5d���BU
-�g�{�W�������J}�����Pi�ҿYی��
�^.��,V��
*
c�g+Tr�
���‹B�_+�T)s_�2��w��?�R�wn�qo*Q����J��
*E;_�-*����KE��B%�.x��Z���@+9��zf�����N�Jfj��տ�?���9����c�C<�Jv��%�RXt����e��z	Z�
-��V+U�����J�@%�e�7Ȍ��;#*ePi�;�Rm��L��G�b�
-�e^�?�R��#*��Jf���7˚Q�LjJ�����uw#*]*�&Pi7�R�EN��GT�	��h�O
-��#*�ψJ#*�'T����߈J�C�F�{B��hR,kT��ͭ�{���Q;\4*5S;\J]iD��.��ՈJ���+ՠ����
e�����{�R�O�.�4��M=ޡ���+��%*�j��3������tBT*
*��2o����J�l^
����d��e��;��U���2<|f�����FT�
Tz�3��
�F�.w^q�s��4v�F�Y�d�D����WSTZEP�Ζ#*5E�w�_ɟ�:�P���
��M�ġ��J�MP�iD���
��]���Jr��C%[E�4*)�EQ�~���Em�����t�z���s
*U*
�!�п�3���
鱭��!o���.pm�J�*��,FTQ�=�ҟ*�s&T��e�sAL��Q��v�
����%���t
������*;�[�FT� T�ר��ruXĘ�����&��	���%*���ř�����O�v�7���t���w���*9U	�ҝ@�H_�?�=�	�TT���*]��_��G�C崵˹�\ΈJ�d�D�ӡ���*=��Tw\x_�J8o�����!��_3��Q)��
��Q�8=���dnXe��q���ET�
-�3
Q�=���~��J���|D���9*�v��@�2Q��SFo��1���]�Jm���J�A�ҕg's�^����v؁��Ee�ʕ��
���Q)�4�%*#*u;QT
-�O[T��T�2�:~Z
���ۭS�n>,o�I9�ר\*m,*mV
c��R3F���I��G���J�wC��@�ňJmO3TJ5d>bC��Ę��98u�
6�v�ay�*�ۡ��\
\�
�Ш$�D7��i�v���t���ۢSTR5����tD�&�t�Qi=�R��
��/Fd�i}��S��a#o7���kT�s�݅iT<;Ѹ�r�~�?��a��0��Mh���JSW̙QiqX�u(��#*���6'�J�֗@d|	�sy�
^���Q1�W�C04|�F�v��v_��x�rv�0HTJ*SΏJ��i&�D���FT:���Rn���ɹ�wx�ޮ�w�5*\
\�j�ϻ��j�Nv0
ѭ���`M�
G�J35i�¾��nD��Q���D��
�,�=gF
����oP�8m�톊JD
Mj��/��2��ӕk+��v8�p����Y;����P����D��e��IŧD��QP�?�R
c���P)W8��ڕWa�|}��t%��8�o��X���gzr��@%��u��Ag��N���
��P���v�:̋@���P)�M���=�ҵE%����M9�RSc��;�R�p��hxk�ܙ�A����v��7i�L��]�����>?�aPF�����|��R���NuR�KB�%ɉ�J�zG�;�JKD�݈JM���;B����R�%rjh�}|�z 2h}u0��W��;���y;h��
�O�hn��4�pT��D%+7.��_��̻�;�4Ѳ�b�΃���UT�[T:�
��
��`
<�Rc��[�R��va�moE���<��
~{,v�ڕ���7M��E��<oפ�x="��%�ҏ�
��c[�nv�4k+�(T2�l�Г%�C���C�Ϭ*����J�����o�J���ʖ(�L�y�4 �������<�axM����V��*���E�d4�NZ�O���ubme�N�`'y�@���K��!����6�΂J�E#*57���X�Ǩ�J@
r��98u�����

-�M� �+�#����G�J
�Z�n˻n5�:�
׳H%�W�rg����`����T�υ��zH���+
-FT��w�J��d�tp�JذD����U�z������P|2h8N
���v��C>|]v�
��%P)»>ޕ)�u�����R�Nχ��r������7���0��
6*Y��D%�T����kQi���
Q)��	*��.|"�_

��}wN����qk���
&Ү�Ǚ�]�
���)�5#���Rvz;	��ڕ�l��4ͣ��DmS�߇{�GTQ��&�"��X���k,����;��7
o�����6���=<+*E���𮻔o V�oǗ�}C	�ۂ��	�`'y�PIo{���┨�J�Y�**U1�y��BG���
Q�0�Rc��
P��Da����
q�k,��:��}o�ݾ�=1ax�
fX�$xW�)��
���
�h�N\��?ߘD%x����Ą�����S��7tT2[�7���2CA%Y.Q)�#��RdP(
��kxN@���Ա�M�
�����p
��5�%���|�/�S#~
�h�N\�3vr�s��@*9i&J*�iT*q�H����
�Y3%�C��ɭ��:-c��7T��1*�6)��J�*�FSE� ��_�����(v���v		^�b�I�y���7�nQ�Ͼ����s��
m'U���UL�2 ;�������
���'G%z̍Q�c�DwTڌ��5����Q..
���
-�?�#w���
���qo-;�<C�/��K��@$xu��]�w�"<1	oo3��웉�bj	D)N�<�,��0��M�.�

Pi����G���~�뫸8R�ߚ��-˓����Qi>�R�G�;*��dLAg[��g
3�VǾ3i6�7���֜�Ү�I�Z�b>k�Ijޜ�w���j��^��v�;���n�t��%F�M�@�{�Z�G%�u���y'��u��UYO�J��z��cD�܏\6*E
\��7�d�
�KZ��
�
��Sǽ1����;XiW��΁J�Xb���$<'w0���P3��N?��'˹P�(e83t����Dc�l�s��.��G������hQ):2�Jm�F��(*}Q)���b"�����nu��
�\Dwsl�b�Ay�<�i3c�C^�~������H�ϛ�w�
�8wY�
�&��ʉnV%���l�?9*����t뵨��6ԠR��W�ՈJM���{F��$<
mv�z��;8u�'����-3b�3{���!9	��
�u��K�Z�N��/�%$x�G�D%CE�+7
��g�f�?�%*��A��
f��z+T�3M�:f��J/
-��ŷ?����w�J�܁�uð��N
�����\�$��(o���*�7�]m�D~���
-ǃ�p�;a�
v��De%,�-�i���N6�s�4�[T��.u��L����;���;t��9*y���A�fn}+7����5����iP�p%H
���nWX��Sǽ-W��k,�"zN�08T�o �r!��g
Kg��x#
�*n��d��!,����Nv�Q�Q� �$�ܮ�F�*J[Ҳ1,��u!���F%�
�߈J#*��A��$
K�E0(��xW���n%YV�=��������Z�r���_8�
W��(���J�b���;��C�9h�}T2��O�J��IJ�:T���M�F3�n�hy[%'�8GfD�܏�TJ�Aa��}�{1�
���
�:�M��~��J���+���ŝ��p����/t��}<�=���ې���e��O��N���KT����J��o�J+��E�X���e�J��jnυ�R�����Atp��+Wlò�Ey�0Õ��.(�o���v����ޕ��]Y)!�;�ʿ������r��C�� ��0��'V`2*-�Rk]Z�RC�>W��4�R�1폼oTJ� [...]
-�LV�� F�D�.
�����At���P)1��
�Ċ��삥�@���\�N�7nA�q �A���^)�J�JR�3�R�1ݏ�?TJw,���BSx�rp�ȷ�K��J��n�K�+���Id��J� ��C�[J�J��v ��)핟Җ�R��֠�t��1*�DR��,��W�ժ}��d�v+
��?��W�>p���U�-P�I��aD�̏�TjرD�sZm�Sx�rp�ȷ��*v�%�

����p':õw\Rx/����g��H�&�j��
���hoE���`i�C���� ��Q���Nl
N�,f��>8T�a�E��<�{���f\���z���D%�#��
K��q�'1V�����i�Np�Đ��szc9\mx�Ξ����p���)��
-���g6�hV��2Ji}�|�H
�;}�O��Œ�L��b�C�+T2)���ȡ$Y%�K�*=W���Z
�
-���+�[�+�J��[ᜋ5�#*�L�~佣��2�6
��e�b�z�fBe)�4�W��jQ
�@P���d2܀³�tQ<s�$?�cmR�
�*T
-<�kz&ZDj�LubIAD��p7�ui�ً�C�˲J���7�a�N������𓠒
t�P�eD����CTJ�d�m���
܎'
1Y�oEC��-�����E^Y��t�(<�pI�'iRT��S%�:$Sړ�“����
G�D�٭�_#�N�J���-
j<��T��ӧ0?]���i����#*�n��ݶr~���:,1
E
�_0�����2F�
VnN��.�TH�W�r�
�r`��|s���~�?�LS�0�-H���m���N5���jQi�
:���{D%��ff��V8p����J���Ө�Ө�
v���_|�#*�*u�2���i��������%K�T�EC���y�I؜1DTJ�����)<�Hkgᙡ
�
x�XB}�_�,�j
��L(���
�� �:�\�nMs�
�m�y��O�{_1R�h���բ.���wU #c���:�FT�T�#��-,�*<����jCJ��IC���{PvQ
�#�\V�JH'�
)<�H
�c,&۟��j��T	�o��b�Me!��7��N
1��魕j�ً�n��\����R�-侗P�o�]�J��૱���z�n�ˠjQ��	h�(���C%z�#*�9?*�to›��A��:8�w���

-,ɷ!��l�%�v��7I��QV�
:�UC
-��,��Z�`p�0b	��~�!�,
��?ج䧴� �uJ��y`�k�)m����<F7ٰ�*a��ڕ
�mە6��
�v8���8T���d�L�PI,�Q)�#gF�
.���r4C��e����8��Nt^�T�L���EZ�
�/8���N�
i���Kg�N�Bk�M%�������R`'
X��?����)mK;�B�F.L��T�����6,9_���x�R����JΩoq� mf�?�
��G;ԠҽD���T��rD��O
 ���9�睦�
-7�rpv3�b��,�7!�J6U*�b�C�C��z�R�hy
-oj)<V��r�b	��(x����Zh��)�^����nQT�w+�F

K<er�T
\���r�I��̷ja������b���C/fht���G��0�L��+�
Qi�����	�wt����ށ٠���~5{��=�#FR%��Sl�֡��k�J}Y)i�t�ل��Yя��ꢰ8�o���%��a� BI��W��H�D��Ii� �6�(N{�5oXB#ю%
���������d�5����
�؏��63w,��G�ȫ��WP�_� #*�9*5�rm
^��}	
��;0d�����,ɷ�v���%6�h���T�8����Ѭ
-��8Wה�a��H�^Μ,i3%R%#
�p�r�����	�k|��vFkְ���&E�$MK�[�R��{,L�F���Z�b�Ȭ��Y�z5
���
��7�J�#*��\���˵sx�
��;�8��tX:W2���|��W)H�,1d(�@�u*�k��ﮡ���@�����sM}�_�T�%�,�U��Yi򥇔6�D
�������

�pf���AK���u75<_XJ���3�%$x�7$�_:a�72�ԏ@��*ZF�������U�#*y?r&Tj��Z�;�����
ɒ
�0 ��|��_b���*�l�DM0n���]/
-��픰ZB�G}��
���^�t�XB}�W�%�N�Pn�$��R��6���IBR�)!���#�x�=	��
Ro �����H���p'
�&���J͖�EVю�����Rԛ��
��f��	��
-� [:���<\�1��DG�t�D5�%�LXޮ�C
���)�5�P��|�N>�d�|�~�Lz�J�@(��?�:`�t��rw�c��k�W�|	i8M��W=W�t���O2oF�57q����A�7C��!%
�.v�Yd�H�W�yxQ)�#�@��#k�	
��;`(c� �,�ixg�%��Z�����V��2Ub�C��}l|O�Ն�f���o1��(�vR$K�T�tXRf�?
<�T��u���_ה6�M���ZC�%Dx!*�"<;h�h'wH���C�.
��

�K�&�p��1��"��.�(=��ϫ�2?2T�AR��>���][7qlf:Y��%Q�8?�'_�UW+h��J�1�i
�
<���
������5Z��z����,Q(~�XB}�0x0<+
-�t�d8�^���u�WK�s#����M�Ex4u���$<"Y��!c���<u)v�Nb�-�
N+��
l�Y�YGT�~�
��qq��rp
-/`��d	�}�7��-D�UV+̰pC���*��}��P�\�o�����F���l����%G��G���I
 x`I
-�JR(�����~�u7�}���jDx�ס���*JZ��̡�����y�8o'C�\K5O�f��k��
�Zʑ�qkD���R'�uym
y��A��'K�H��'_X��$�n�a*��M�9�۵�u��j×q=^�E�&u���
�׷�%�L�>
���Bw<� /�*uKi�Coc�&��J���Y#r�6v�C~�R�Cf�Q.��.=;���q�Ng5m
����>��#*e�̨��
�����-�]C'�%��U���nP��?�3Ò|Y�Ka��1U%�*�����\
��;|�h,q�ɒ$^�K�����:�����@�4��ឃ���}���+j+e��/ׯC�[ճ�9�X�`�L�e�O���ɐ����
Mg,���+����c�;u
����`�R|8�Jޏ�5*%ݜ�6��5��#�<��d	<�]�-9�a�eB��;#��=�	xܫM�D]�b���6g�p����d�
xP�+ܗ��%�IDFk::������xV��VF��J
�i���C��TWM��R|��ʞY�
-�mp�q�>��맿�<�Ons
lm�+�b�����&Z@%z����R��?�ƨ��ϩ����_\�,.Y2

� �n�:w_&��5��
K
̰p�P.��S���� �b��Bp�r�>m��8\&KԳd�W��
��M}?�%�$[

*�x�:��a�fqH�������dg�u�$��
\aIpWi�$^>�m
��;q����Uxb�>$x
��p8��KGT�?��,:�+���|�=��ʒ������3w������`��r[��<SE��J][3���VGt�%e49߁��N�����
JK'3��8j��;V�����J�P�����N[(�I���Z�Rt�kԁ��WXJPx����z�r4d��Td�J4� ���^���Z-�Q)��F%�§�L�K��h�Н�s�pYY29�f%�n��H�u.X�/�*y!��1S��W)�*��v
-Zj!�Ch�n���p]�%K�x5�p��-��h�N���a

\���Wg'�d�]�Ӟ8,���@`#�J���і;ձ$
r�.���6G�qY	;�mY�zhY�:9jma8�v�Zl�U��y���?r.T�#@� �<W��?�?_

$K�|E
-��5����Y`I��%��j�
��f���������b��.:��2Z�
��%�R!��'�
ȭfo�-);�-��@�O�C�
�M�<����w��
-�
{����t#Q���46
��?kF��?g��$�g��a�RPV2�
&��T��G;,x
��wSj��C#*y?�$�U
&%��{�>u��d	U�P�0q��g��?�R���K�:��l�2�
�±�]�T
��œ�.�_����d�U����:��rx{QZzX
-��e�����R?x��Jͅ���HqH�����6򲄛/FG`���*��<�p��+i���'�<�J����n�E��t�b���|m��k����xQ)�#gB��j:��!�4D��M�O=d�nTϒ(R����%���,���K*
��k��]u�X�_�� 
-��I�6��R�d��$�d/0�)m�Ig�V�@\��2?x�7�C��
(��.)+�"���z{YPXr[X�O���k�,%���/��Nѷ�����+���J���p#.`��B%�]iD%�G��(w���
�\��/�,Qǟ��A�@

�A\�x{XR���+�܄�P���n��n��t�v
�+P����R�ha��īYJ���M����B;(����H��?P�G��&��5"l�A��Խj�J
-Ot,�6ܧ�~��3�k��X�+�$�����g���*I��ɵ+yM��U��7
�0���#gA�(� 2�>��d�&���
t
XR/�A��B6��L�V����d�T��oJ!$yI���cP)�,�JE����z�6گ2��P���f5�����ߙ�I�E�p[<�x|�BE1���-��ϙ(@%'w��U��p�;^�w��<غo�Z���ZN�p
�7���^�R�R�&Z؏NM��k��G;�O1����s���D`��(�K�6
�%Rt���Ƭ�3�%�Rx�tr\R����%�LQ�Cpj�,}aWwo�*Ҫ�xN{�dIu��xc	6�w0��S�Q;
Œ��w��

zH����(�;1X�6� w
Kw�c	W
mŖC��q��Ϛd)���R���
�'t�sZdu|YI6�&{��q٨�vD%�G��>x'���
�7M�%[��B�-��

dJKе$a��M`I�W��E���B�'퉿[�j
����*5�vPjT at W��䅮<��g,Y�*�
�\z��Q=Pm��)n�N�DFK�;[���ࡣ$%0��O&i\�'K����E���(�>�%K?��R�SO���u�ZG��&���J�v%�D��&�M�D;�R�GΆJ>&5%�&١8��%]�

�A�J’��NZ�`�q J�
��4f��ұ�.���$���`��
F�$KL��j�&끬x@ߗ��
l��%ቌ�g
G�?%u�x�N��g'k#���2�T�2Q
-Ok�g��C��.zNn�O>ܘ�ģ����'x�2u
���J�
-�#�JuM�#*y?���
������RX�;8�,���px,�B�1��A��)N�K�׾��A	�g��U+z�v����H������F
�%G�s+�����@6چD�����f��BP�-*R����;�
-�%UJ��${��
-�U
ycS&wB�
��p��
-*Y��R�㏟& 0�a�P�y���]<��n���J�D+ڕFTJ�ț�R��Ȯ)����7����[o�-Ӕ����i��������;'�����'����s��J6�
-=k�o�TJ洝P)�,Y�F<��@�����eK��t��E
����hiT���ԡ>xh�J>(}�O
�ڣR$Q�Sx�HK��A����KG��j{�l��Z\��
-����N��m�
�tQ���?�D�ە�&���ykT�e|\�K���)������Ғ�R��S�$\\߸��W�s���
��
QQ	�wQ��� O?C��R)�t�maI�^�x��
�<0ڳ���-]�k���,(�LIe��?�r�]�\���cS%a&�(��'
-K�)�?�,:2��2�
�M�?s�F�/
��ۃi�J���:,J�B�<o�X{!��o݈Z���kW����GT��Q)ة��y�ΰ�I�8�&o�(L���L�bآ�3�D�%�S`����c���U���XP�
-:+�����p�$w{���D-Sږ��4����:�d=pWnW�g��$X�S��q)e(<P�f3�=d�B��:�*E at I �&2�Q�RPX��;�(��B��
hN���j�`E_:�ҫ��x��73�ᙗ3{K#^���.�N��(���v���ɠҪ?T*
J���?mIp���q���͐Z�m�bB<�KXr..�K݀)�-�D
-�RF�D�P�J �3ĥ{�Z�uh�nvOi��R4YR�+�'�Q�=��I�xA���1&��
����;�ђ"��w��K�Jm���	P�;8t���,�Q)B�=�q�j��71�������
��bqa1�"Uښ�	\�T&�c��	ޭ�c��خ���7���#
Q�8
-��b����UT'�.�T�,)oa�`S����ÕK���t..N	�vC��*_G:rv JTA�/	�'=�J	Pj��jc׾X���dI5-Q=��������t����-L���;c�i'K�ڌ���v�Z���_W��P����`�O?Tii�P���(�)�n��I^nuY����H�v\cr�R��n��g_�ց[h�ޱ�$�>�0��\zۮ��ڈJ�A��X_� )`�����'ppqu�D�A��0��,,=",I��w��5E��۶�����1(=C�¸:�u1׏�K��'�d`ID#��z�?ī��
-k4P<�`�6Ž��B�f�Pa�p�F4��hA&�­J�A�s_U�((]�C�3���r��s������d���^��&ǟ	�+�J0�ak����]x\�'���
SZ���+��tFT�J�
������DU�
T)�kS`"gai�ݹ8s�jp	�{�"����$s����_L��͔L}�ڒҡ Q����z�V�O�+�'3Z?���Զ�&4���l=�3�J�1�~��xmO*xx1��Q�R���T�$��6<�U �BYL�����
)�[����[J�v@��F����̈́j��9K�)�;�U�UVn���_���^��;���p#
_�0�'�
�+_>�� P)����n�j$�t���x��9Xz|6-0��9�Fу�q�898���)d% �o
-��[(V8^(��%�]�{I���$��&2�v�Ԁx�:<g4�U!��%S�b��J�����|8x��<�L�\&�
-
V�Ѳ"E�wǧJ�
����V
K~�t
*}
-w��R&K����rN���#@	�����G�(\H��������S����o"$x,
,}	�v�W#*���G�ݡZ��]\�(�Ɓ�XZ2
0�x����̄ț�%G�Y\:�^=L2^�����A: (��L%ח�
-�;�J!(IH��Im K
-�:�R�x�

�
a��z��p	K�͎1��$/QBP�QM�%�YeF;������XU�.T��(!.
�,}�^��|'� _�-X k-����-pI�����]�:U�6�
E�e��٬���G�
�GT:7*ٿ�xdg|)�
Xpw{ɒ JK��,����!���#�å���$�I3+T>b��%S�@^��8�����r��Z�R�F�P)�,	�
F<�LeS�LF.`	R\i�+�^��%�}�1���
�NJH������horſ.��J�D_���^�/�	(<�,M�digW��JK��ҫS��A\�֐���pA�TR�&�� U�A�x�����nL
��p��#*��B���Y
vz��1Y��A\<Ggo�%�򀑷)Tp�M����2	H���%d��ǯ�����
�'�T���p���6U��a���^���
�������ӥ�1����d�z�bC�pIii�Jь�9�S�J`��J_�AX�	8<~ɖ������%W�*`L��.#X�:�"V
��A	���r�/�J3예Ά<"U����٬&ȅ����0|D�7B��🈺D��|�\]�c��ڸ����� �L;�3D�U��X<�q�$05�s�"YG�c�:,U@�
8�=h�K��SQi���:$J5m:Yj�P2����)-�zƇ�
���$�׵���*0Y�Ŕ�b��^O>(9���Z��_�$,���(	X��j�J�FZ;��m�,�4�!X]�
/�%���S���/XT
-������!�u�^V�N�[̚J�FT:#*�'�]"pv�H�oаԖ���ݶ>IU
-��$,�)�g���Q���&�L���7����N��A�:&�3{W�R����Li]�]۞�!
��M�>��.`Y�j"���4�m�h�‰

,�WS�q�E
��j$xp�Z�����T�u9(��R��wL���bP�k�����g��I���+�)<��
���|I\7�[���"�4���h=@����1�����r����)�f����)x%�
�o�"<����t
Tr_J�J������<��C:�v-	��d��K�����
-�.��伜w�r�!��$ru
�An���a�{2���֬4u�d�6϶*�K�"�Du�/����CGT��7��`��%Ȗ�y�>>=
�M����ژJ�P��
�4c�P}'A�h�P�r������2x���}����Z��"�2��.{4�
�����?��B�Ic
H���Pcb���eZ9V�*�9�;;p�M�[G���٬#*�����v��*��7��
إi��RJ�Gt���1,�)�-D���=b�m���Õ�r�L5���釀$�t�ꨢ�.�9,O���U�@Y��

���JDi���K�d��u�F���|�AU	`�
-�ļ�����X™,{�R>&A�

�-�V���8�.�*��%" ��QDS�T��;<����X7�[�,q��Rg
X��;��aW=���j�R9Gߒ۹1����"�伡�
�M��I��w�7�ҙQ�H,U�tg���OQ�����A�J��R�d!���N�$.y��n�����C���!&���aE��:d���Cu�J�U�����@	y�~B�D��D]��1,eL���F�c�{N at f>,).�x��2F���0ɲ�&x`��	

�N�y JR~$�
��Kc����(X������K�&^�d��r�l���[ ��G=|a��>2(}����IC�=��/�[�0_�z)�
�$x�r����J�T	y!�I�Kٝ��C�Az8�%�-m��Y�[�<�L�¤K���%�䬗C7��V漼�$��aN�8OZ���u˝�-ֻ궑�!
J�>(���YP�"b�%K�R�Q������DJ�gai�)��ٷ���ĥ��d�LeZ�$�(���ک�:Q���hC�]�T�S%6�dro����@��%�K5\|V�V�f�u#���7��␵Ƌ
-��/P�?��_�y2g9�T�J}x��j��>;���J�*����RW�!w�Ғ�p���*UX��{���
.10��#hJ ��|��eI�����%`�@��*��%�

��b���sJ6��L
^Jl��bī��E`i�$�4.�=��D���04Y� x�Z�(�d�����,ͪ�G�V�T	�5��T�	X����kE
��d���
6
�J~	KBӺ���(��|‹%;
���B6��R�c��d�b.�Ov�F�
FT"*7�E� Sr���p���<X*�&��!.n����Y�89��~^9?W]���2�p~�Ҥ�~��{������ |[�:c��
(M���A��T�uE�YJ�r^�+a4	KX,A�`m��R�{m2k}^����g)a�0xX��8P
-2�4w\�$@��Ø�AX�L0�CX���di�V�캑%�yfXډ�s�W[(\9����oD߁�Qnw��!�&�ȓ�R��ZXV
-&;�n�
mY���7�ҙQI[բ���
Om;,¸;R�`�J�Vs�t����ӥ��	|��99�����
��(zt���U~��3J�
&a�
��=����f��@i*A)�w��̩�Ϲ��%���	��JK8Ɛa	
�)�yU)��^1�U&s&a�\y�$M5�	-�w`(`�V
<�[��1�]'Բހ���&���*uiY�c�D��FJ
���;b���u���!�"��N�}����`1ob+��uȕ��r����[D;�ҙP��C%��Ġ��n2��R�
K���
-�*�P�
.��*0�fG����\,���̉߮+�������4�I�D�
-��*��_̠4��z��,(

�FQx>����
��1dXB��Mq�f;�񠼴\��)��'0�Jh��CC�����

b���G�w�V�e5ֺs�T�qM	�&.Y��g#mf݈�C�D��XuaB���_^�;}z�9P��.%<y�:&��e,��G�*+��iI�<&v��
��t>TR��++Y�B�
s��$��v���t�"K�N˄�Y��3Z<L���Y\���x9ps�����w�'�7<
�r�%C?�=�a����݂�* �CA�/��$2���t4Ǣ.��)HX�EXJ��Z��g4�����,UY.0���).�ɗ8a:h�I��g������Z�If��3����rv�ͣ4k:��J��l�ߍA%�&�!X�3�ɧ��h�J�8<H�hb���n�xK_�j��-

��̓��N-(�<vp-���¤�T)_V�k,eL��ю�4T��C���E�wP6t�g
:$K�JA������ŭ̈́5J���\2
�#G����?g�y��y���t����<��$S=�D�����͢;
JwIP�B�n��J�G�)Q�pc)��ָ;*���Kf^��f��g*	r�뛌*~	CIS�GdK=y2,��H�����4kǢR$�p��w&��jX�2�)�,5~�L�t�
.��g�
oUg�H�o�
q�2����`�Y��-b�r�ଘ��.7~U��\�LY�{h'��62�!>ohD�!���IT��҃����e
���q�%���H n#opqՅ�ti�>p�ԗ�ɡ��n�b��_�З��� �$$&=!&N�J��K�_
-���Q�BY�1(
�*��˶��X�
����V�
-KG�R#��jX‚�e^1Ņt�q�I���X��Ŝ��?����%a����I��4٬a�V ������3ڄ�0U2֢��A�irX�3�Dc9�>��K$K_��뾬p�`ɐx(��K��1���w] (
-կ�����g����i2U걬b��XmV�7MMvb���J�*�KH"X��ٿ�wX$� Kw����b�a7�K�+����?"�z9�L��Ŧ�1_g@"?g�;L��L��`�wۍ�_�u��C��y�' %�|
���`��ɡ�m
��)�-�����!K�yu).R��$hp�&L��2��bF{fS�E��	������e�B��RI�$K�@�[�v��)��T���$� ,�
-�y�Q)�,�ީv2ëD�
����ąSd��Y��BEoVd��LI
�'�N����g�++�
Z��"#vQix�D��[�5}w/TC�oll�#�g=
����g"of� ]Z�K�K�əkEn��Y��"O�Y
����1 ��{�$Og���y�R���|^��.����5e����BY�Qx�O�4?����%U����%���,��u7�X�i����<�?��T<T��,�	�1�X���YSR�ࡘZ��)@�K�x�>tx�l53�rg��B�/ITj�,�n�
�/���ǧg�
Z�����1��ߘ��<u��4���K
�����-U�/+�
Z�΍����FT:*yσP�/�J����͜l�p�E�%KqŃ#�@ .#o`�л�B�-PB�K�89L����"O����
�"�qH��U~��3RwϦL����}]ڒR����tL�$�ƈJ�'�’I���$j+w��j�&a�1�u���D�
-�T,A�����;��v_]B�0i!%<�%(�T��
��!X2j�/�3���΅�H���<�\���z�]�`w�C��m�*"�M��b���D
=I�
��J��^0�u��J�C�Zc1�R7TZ�%*���;4U�������[�-IXBG�Ҧ�_�q�K����77$?Gش&o'���89�r�H���4ieؠ�
\�!�J����V���+g�*���w����-
�
$�SN�k{t��Ѩ��
�
-�y�R��ri��+¥�3�S��bMX��_0���A%��I[4%K3<�vJ�@)4�'B%d�
�po�9�S�S]'s����\]Z�ե�Ԡ�$W������f

-q�h
���	l�6��ۓRm7Px�ڡ'Tv%�{b�G,vK���R����J�C[�s衍�
FT*A��(�o�"(���ʆl}����[a�U
-�Ļ��đ72B�
�J������.ULx9ts��U�=
��:���
 Ϳ���n8:|�����X�Ŧ
-1Qr%%��T�ij�YilA��n*�9T�,DxǣR�hqX")
�xs�!�g�kS`�
����	�	g3q��V�
�
--��"L"<��TT����S JǤJ�#R�FP2�?'	�x�F�3��*����p�;��
,�K%��*��pi+��>��p]8(�˽_.
�K�Y�k�
�E���J��u+=p�����V���ÈJCA%+
���px�H�f����
�L���!�-��]��8]bgp	�oL���!24������{��|i�� YDGW��E��b����]�$�;��uv
y� ��[5e��\�#�x��L�<F�{�w�1Z-,%R����W�%m�#���6���^� 	��b�!��P�(�C�v�
��it��Z[ d�V9Խ��Qx
��莘Id�dY%�\��I�	��̫� ҚM��W�Qw�Г��[�L|1~���W9�v+�<�[�{h��
����J�:FT�*YD2�N�
DwGpxIX�Q��Ł衬,d|
�:��"�
-z�*e?g�!����_���_��{��"��@R�&��#L� � ���u�&m�]g����<rC��lfg~��rF��`I3�h3L��@�\2d&LL
L<��5<H����Td�%b�w
-�O<�C��'N��-(�:��f՟]�p��h PI�R�d���n\�`����b
��
�w\���g�����)��>�h�@�N⺣��wt%M����`4�
>�����M�4u�d�ˆ�WS�R����J���;	K���|�)/\2Nn������C&M�MOFr+T���	"����1$U��L�4��bRa�oN�( 7Q�]��uR:��pL��|��/B3�`	z�npu�����,9�R�fF��Lʴ�򒁤�5Z�h10�sh���T��`��1ɐw.Q��C�N�A�!>��H�С�c�xX��}���0��#�K�� ��$�P�FkB;����i�꿘˲e5�n�mk:0u�Y�m����-_'t��f�C�h4k��4���P��C%K�SlGB/��C?��B)���ۈ�
���%��Vk};`�~�i���':���W	^�0�HU�o
�I���/��
-�L�]x8j���s���@)��ٖ���4�>����J��t#�W..�6�!�
-y��^�d%�������ڃ���T��Z�M�X����SFˢ��8P������ �
-q�8�ix0SE
�,EjR�˖���F�� ����
����l�յMP߲����-U�#�|]���w+�e����&�Jwv��n��ˆn9Y
-I�v�����o�Y<�0��K�K�ə���#���j��2���u��
��V���*�K��;V�ކ�3�n��.�ä�Q�m|
�+Y?�9S�R%�4�
Β
��2�d"P)
a���[-$�n��+���ƫ ���liLfb	
-&�Ş�bl3i*��jE���c#��0�8Ņ3T��(*x@��T	@	�ҝ�F�7�C�
����p�P��N�&K!,M4,ͅvhck�&}d���>�9�l k�%�ܐ�"˽�m�����^S%�!o�����[
����J�v����JP�x�Z8��
�^��uN�r$� ��š�}��o3�%tr
�0-����nE)�sp(kZ�
V�0x��-I�
{:�I��Sx��˞L#��j���iQ)K\�).h
�W�R��MQ��O%X̸C6ٓg)����HO`��	*���n���
j*2ڄ��%�J�W�t��L
���/�)��ݝъ�G�6uC���JK_&��L�4s�d��b��WL
�Y[Dl@&��W[�C�#
r��I�(����<҅W=�-+��4DT���
�HAI
�p�

K��Uť	�x2]��x<���D����Ȅ���t���-�J
��W_�<B@D�2$- CL��
a��U(&ػƠ�)U��j���d��9��>
*�-d^�w�"\2�9�L�M[��^
��T;T�pM�*
$m�R�����?�(�n���ѠI��FP�b@	)�&|�%��`�*�3�����F�O�/SF�p-2[�n2�Cٖ>� ��má��l`M@�*�m�T��&�lg�|T��Vx�
ߔ
ڭT�6�ɲ҈J�E%*\@�D�	uY��w����d�ei)�-y��.)\������Bȸ7B&tt�v��w�Po�9� 
�+��d����co��A=�\�L�+DcT(u)V��b�/��D��4��_uI���4�ԀyR<e�Jq!_�
נ Z��nOC�m�����_c�`�H�0�5�$P�P�X�Ym�p
(�S�O�*��
�
�x L�K�#Q�ơR�R��䚜q���r�K
&`dW
-d
�����5��X`k
z�ޕE
-�����J���xeA��ʁ�n���D�wD���AځPɕh�r�K�ȡ��|�z��kKT���{
-��p��5�ʈ
*/g�%����Uw
�i�[�rq�
�]X�]!
�+nn��TOb�:fa
endstream
endobj
321 0 obj
<</Length 65536>>stream
-`���Ʒ��G�!E�Q���t�Tg4���gm6�4#�m8� _X��b�dl)2� rX"$-H�B�3bR��C���۩KF+
����Ɯ�B%h��kT�x L�1�p	�o,,u��
"��X���K�h�W�
�V�Z��MP
-�9Q����$(��ߌ�AxS��U7d�J�7��yQ��
[T�6M���醄��x>�����0����`)L�̅�N�y}/
=�dBhl2��:;s,���W�o6��*d��[[��F�&�e���
�{pv��;���dFm�И~�썓�R�X³���,b�
�
&��b�dl��le �+�XWd)�$�04�
"�ґ�.��
��Jp���D\$SQ�c3E_"��2YJsx��~���.L�Q� y��Q}�	8Q]�����@ JJ����X
-xz9:l��|��J��8'*�噟Q{lD^0mi��2-PE���B{#���
��t	�)��;G	'd��I��˱�?��`�������wH���_���%KH�
�лD0�4ia¤������X�#A)&�B�1�҃
 ��8��N���j��%L��:Ǽ�9�X�Ō7�LV��B��3�Zy���L��	-V�Cł��@�%�]V��0���,ia���&c�n��}�ԉ�k3����
�W�l�p	�&X[�)�[�}T����7�$

-$�}/3�
vY�S�
�W�IN>��E�H�A8�Y���Y�ą{�Rϰ��硏3�d�\� % ����s��ә�T��͖ �3>�89�HI�ѱ�
0	o��n��:� ��$�_n\O朋IFl
��S��v��G%~M��qF#)ޭ��KL���4��d�����b[�)YS_�Yp� ��T9
-�IQ��$�I�L}��!�
(U��\!���?=�e�`�
-��&��R�w
	%H<�8+U�J$x��
�B&K|_(O
�ұwJ�8(
�*��J>�WZ]�7�����҈J�C%ߣr��xs'v(�󣐜�>`)
>đ�
��0]r�d.���
�� ��-�tkH� N���2&��HpU����f�
A{:�$��kJ��J^��-v�Xn��	 �qA�.jq�1���R#X����z�	����e���e���@ԾZISU�<r��d��_�e�'xH[��JJ0Maj"��T�J�]��\*��)����!}��Xݓ����x*���ҡ`�օ	���
t]�
JIU��^Qy�c*S�6L�O��f%��G
-<I�
������GT�������1��C��b�]Kw^��S�g��oLz�,	у�q����lƴ7g���]p�����꿯��3j�
���$�p�
-�I�	�D�&��	g�I��o�
�^
- \2����j_OK���h���Kq.�d&��3&[�.Z2U�
7�TKc*
I3��͓
ywPJ���]h �P��:�	�
-����!��%H��h����d���
��M�
�P�,� lQ�,/�Au]f��:��ro{��Ա����
����
-< ��CZ>����@	{,���c�p�S�d)�-	�1������N&�W�f��Є�E{��e3�X��xW���\u�l�d����&�	e�((��
e��:cٓi�}O	(0]"��qP�wT��%/]b��W0�2��%f�b�d�,6�]���$	�Y�$���$"�eu���H�(P
-��O J����yi�s��-�b�
@O�
�Gw�*�`�fK~����� &
-����
]���9QM�d@��ڦJZ�5+U�|f[h�'�{�����J�X��.�R)ZK��9X�tZXr���%vrp���cdBh2�n����*Q��p�NnF9�9�$
�f�QL"_��W.
J<( �U
�_
,�)*5Mq'L�N�I���X�r��b�d2W"[� g�d!ɤI�Mhm�m���!��Ru]�@ǰv�>(���z�;��d�
�pUK�1ݓ���i
w�}Y2*���R>���k�����b�3�$�W7�aD����-��+1&avt;�-��g�;���O-K��i\�\'7�
��$�iI�r<�J�5�� 	��
9:H�<LJ��c"p�R�T:c���ܧ�הԔ9X���
�A,���"�6�q�&�^'.�%�����8;g�y�l�j��!����B���$fYkA�L)p��J�W�N]��(�P�*Y-@�03���O
-�%�%�'Kq���$���g��XrdǶ����/��E�!0|�,��&ǃR�ď�J�M�G\�
�Yx)]��J�D%���,�I6.G
�K�P��
��{�%�.��#\b''�	�	�i�a]��%M�Qd��
��z-1'�+ƈ���
V)L��I�� %�3��;l��A蘱��z_���#��"6K�x��� �l.MX��n00�;��h�R�j:��BL�%����T�;� �
-���b��lc����¦�%ȕ�M��u(���$����0�ma��Ue�O��6x`fa擧7�D�^@)�*�f%P�/�
<��
;��4,T����:��
-P�&-�'�W�<�`	T�����T�$�%tr�����$O�՗X��d%O�+��a�� 	�$�n��^A��U���^��p	E�j]��Q)K���s\L�Y��-V�Ҷ���l&Z�"-۩wP�dA��f#�|V,�e�١ �
0x��-�vo���t�{���OZ�:q���Ug6��i[�CA]��iH�Nj���}�{�p3�r&�X-�S$�����Jz�;a����2�-,1.�K�t�Co�K��ur�00ፂ~
rt��d���9E�8���
���A�4�W�d��_�lK�gגI�o�w)[2�0(�C�wT�L��ٍ�%���ַmlU����Vs�
��Rw�'�'JǁR������*�
)�0��d��ҸS�O=��%��&Ku��ٗI^�9�-����HTC��I�X��V�*�֡X�%0�[hsވJ�C%�k��u�A��BV�G
-K�q3�[�M��z�%��)'׊��t�9cӔ����`8@�|� ɥI>&���[�$�hP���� �������	*5�%/�u�+%L2���X�lʼn-B�Nh1OJ%J' %� +T�!P��m�
d0i��	��ULk��#R
,Q�#`��>��>2T����j$L��(�
�6��Qa��c�{�D�$e�u�f������
-��r?q&Tr�%�J�-�
��
(��jaNiE8����

.B��`)��|'w'��!��N�q�
�cg�U!#��$L��Ƙ1I����u%9[�:2����	 ����
�P8�C-ȹpn�۠�K�p����%��b��V�<��V`�M�PG�R��3�f_3���R�Zl��R�^W�d`�X��=�|��ޤ�[Cf�bT�&��V�6Q�JTL:jB����T�z�{���a�|
-Zh�e����Jԭy��4+��ϵZ,�)���,u%�#�K�b�$�I 9:tut�"ǥKs$�c�笣cO�0I��q_��� 	J.R�|G	%�� R���B;��
��'*�a)��J\G(�)j1ci����2��S�
���&M�<)�(�J���
���kL�@�1"�V>XX��
����R���=b�l�	"L�Y+M���@E2|
��A)2�A�J(
��p0+h
��-l�
g���J#*
	�>��J�q�'}AD���Mfv�|�t"sɇw�e�`I��������^���
����r�����{�O	���a�� �����3(�1�9����qs9Rm�sf��G����N�J,Eӥ�a�;a���"�ي!�A�G�F0�P��etk��(Q�Ta�j��v%J�V����u�*Y��%Y
-����t�/�O��g�-�
� ;Oe�S�J�Ti� �ѫTiI������oD�!��ЄV �J�!K� XBa��=��b�~�WXʱx"���D^/_-�+v��#�� ���l;�Y�ew���8k�y��"�[�Y��/���|���� �ȡ���nOb��
- bD�
��ȁag"=
�fқA��@遏d�2��(}�\2X�#7$��P�㞅X
-sɂi5�bk�ڥk�.�t
F��'G���/�%�-"�3d���sx�
�����	�%� 7AE:K��R��Հ�u�I������@!59�!���
C%4�x��:��Jq~
��I���2��l� L)���ủmVcX:m��4a�K��	3��E��#ںu��a�y
ãG��'#�Vr��
�$m݅�tg�K����d��〗��� �t�.T�X�kv
\3�dl
-͒�+�
.�Z��_���.�<�{d��

ͽ

,u
�u]@�C�K��-���`m�n�$��	�q�����Z���Z�+�mQ=J�B%pޜ��סj�E���T�1���=����Q))�
q:���G�q&���z��!�;.��ɱs�]�CZ��ٸ�Y&̜�s
&�1i��]J�
� ӽ'���DX�Q��w���}_*����mЗ�X1�q�J:"��
Ͳ���
u^[[��g�����@�K������g,=��^&X��Tx���p�c�
-/ţ��B�H;��]J�n�����u��sX鵽���I��JׂJ؄
��'���=_��J'-.���p���9�����dB�ҦNk��8/��D
-#i��t��CΈ1'2yA�h#U��K
	�3=���{�҇�����a��k&��~�KЊ�ł�,��]*I�".�hO�Ю��P�P	��0��3EA�TH��

�JK���ĸ`��X��+����n�8i��<[�ͤ���|
s�n�"T�'h�"öp��!tX�'�~<*�
S	��
���PJ�X:x�)���A�K�N��9W��4�z�Je�ok��Α���NΣ�ͼZ��4@�k����$BbL 
��f�!(EЃ�r8T�~K*��}BX�Βݻd�W�_�ѵ�+%¤Q&�����l�>b��Ճ�P
-JJy�,���(��,��,j�%��8�KK��Z�>vu&�nK�q�Vr-V�Y���r� �R����w~��"3m�u�Y��!xX�'�~|*ёM�Cs
�.����KϠ+�L᧻a
��6]K\����
��
�@�b�/��# I"$�o[ʤ�A�ξ���
��k�g�PY)��5��J�����?K.��%�%��+fV%��+�V�R��3#Z�S��tc�#A	���R��Y!w�g�r�RFX��ю�Dw�z�ҩX�A׾u����n(t���d����A�;�w4=*%2T҃Y'+���G��4I��д�
A	��et�
-2��n/��A�撱r��c4YS�1��;	$6s�<K瘺m]ȟ�U
-	%Z�(Ž;�!`]	�O��?���oM��BX
-q���/�8΂�5s��Y����L:�����lQ	����7p	�Z!�fU^�E�4EQ�P�HKЅ��c��]�
�E���p����Z̭�x��̂޸�e�D2wB%�(�n
���s��~R���{�K�vqLP��,��Kq	oi�?K��O?��\����
�
�F5L�@�5s�IA&�(�B�
�D(�j@7ƚR�$>
W�8��R)$Krɂ\�hV�n|�x�(�]ɥ��^*��^(���C��v:��d(aU)WH*�V=e�(.ei��`I�G�ûP�4?؝޸�8܍����ǔ�
-��2��w�˳JJ
v*��
�7�u0��'�~T*�b��QS	���
/e���h�<�q�Q����q��S6�o禸�X��[K&�\��s�*�w�������J�\���=���
��\q�g*]�f��QiI.��3�d�/1p&�V,�Vw&�
�X]�����T��)�k���f�R�UuQ��L��U��T��,A���r7����F�4�W��_��5��oǷ�b u�+�
��\���w
�:��ҏF�_=*�!^��M�E��R
-lx�������t���q�I�yh��k���DE҄�;) 
@�
V�PZG4Q-"i�@qI�
jv *=�XL���E�4G$K>�B1�X���+殕�TÕ:�<�@�d����Qi���:�K�@�T�)Z���
�	O��n�K��q�&V�f��Y���%�D��'��Vn�*�P)��F�JS�?��cRI��K*��L)p�1x�4���A,=:X�H�4�f��f�ڹ�[���?w�����k��
�&����`�
-cYc�^��͝��k������?NS�x:-B��%�K�������@
-;f���
(=`����ۘ��(����]�u]���o�]������E�����n��Z�:pg���
�ߙ{�64��J*�2T�&|<���J?��y�S	Z�q:���g �~g�-�M_>�n�<K^�4�|[3'�

���/R@�]��
~ť�ȭH#w㎮��P�k���j�RЍp\	�Y��YL��yl
����Pi1�&�4�K܄Wll��
K�*Ȥ�@)XT2�$STP��B!��{���uתP)��R�%8k�9���h:R��H��kX
-L�9�^����IrPݮpۀG�R4
�Fx?��R�C�
\�&|2��
-�E�F[>�>���Ns�%��>4r�L�rYs7x�2�
���1����@&A[8�0S>���ț�/D�c��qɀi4�
;�%~y|�FV�t&M
T'�LQ����*oʪ.���n�Ϻ*��*�<N*-��� к��9<�FR�N��G�ƒk1�,�
-Nf��(�[��aá�6�&T��Ѷ�T�gP�.���;���)���%}kp	�HF,�F���;=\���C;w�v�wහ~�6t`�	P�A�Cg�B��XJ�J�
�r���4��\�Ϣ%;v�>��D?Nz+(
;
�>FJ5T�����]Uue
��F,E�� ��a���I��q�CזL�k1���2o��'@u[
h^
-WX@�
6�u�I��VH%
��`҃�x?4<��������ҠZ:�_�$��~]��3��Bi�֣�w�$�Дx8{ҩ<�suq*���>�\r]��%�]���Ǘjz��xO
-��
�˖7��!ƪ{
PJ PR�����i���+��V���H)ڙ

b��¥�A�4˥k�&xk�q�"���S�/߸'w/'Z
�^%��l��l�T��O*��T��ȓ�p�"�Jh�2�z�����K���u�t��7��,�����)�o�?b����}<i��t���@y��7�fi��p�Mϥ�
���Ē�0M,�Ċͮ��J��P�
(�b�.'��gX�N��"KM��Mg�ʶ-�Z
���X�������5��2XZ\��Z��E��
�`J��N�:<b�!�.F��җE��O*�=T2�9I�������2�1��`?��
�����G��ݛbi�K�XSd�TL<��4���L��PZK(Q��kz(R�.}�<��E���2&-�Rp��}�R]�y����t��Z/�S�����^($��(0yU��
�rx[/�7RZ� �g
�}�J�'����ͭ�����Jӡ��%;��J?(��M�qPV�P�Ȕ�W�9?��NX��ܕ�c鬫���
�ӥT [...]
-.�8��N�
A)()�J}��g_�e�d���}���KJK�bi�K�x������d-��*� <�
-O�+\O��<*���������b�B%nón������H�tb�=d�ހL�!��@iJ�>�
��� K,�<K
Lڽ��}`G,{��"��ƒ�cV�u�^�3��0Rb(���a���
��R��SӶ]׵m����!mjp*
-(-A]Ɏx�c���/w9GJ�g�iQ���ϞZ6���V�:�Z��t���~U�'����
�d�<L��J�
TX�p��<
_����6���
�ai��10sl��C���g�)P�
hw\�ӎ_�SUiO�/@%񅁼}$���
��\1�Ts��1�-�d�q�P��k}V)F(ey[VOy�q�S\�U��&5d�vA�7f�C(�p.��K���Ep
+pʻ
��;�߉V<@�U��E��O*���&��
Ku]6M7�d����Y,ݍa��ҕåi0i�:^����20s��=�Ic%�I(=r�	�hj� SE�KPXz*�0�x.9?�_���jv���la)�@��t �HP�J{��ퟞ���i�/����Ba)/�<J��������S�G-ł58uf�d�J��G�D�
��"�WI�U�
�~R釥ҭ��9
�ü`�W˗<gTY�

��%�na�"\r
�/����0�J$�HcH:�?wJwJ;��)���Jps
GJ����d�VH���$�x��x�8��S|Ɋ�.Yh�,�Qm�f�P�.����Cy#�q�{��Y��u�)&�

�m��	
-K`�PX�S(-aϴ�JK���T���L��V`
J����wtT	�v��p�W��0*��ҏL��N�B.�
�pzU��c�!&+���GC,�-�����3�qa;]���grOg��D2��A(m5���X�e9^
WU�R:Ȣb�U%��R�,��T�߭#�_��,�����[�K��5���?hh��q�R�B����y�?5m�a�����AV�6��"��ĺ}Q,ͧ�/��"��l��A��﨤S
JnuH2�5�W�°p4޳��O*��T��T�s���\\�4��2���h��Xr'
Lڹ��$Q��M!�D��n��9o��^���35c�7H�ۓ�d�<L��3���f,�;�Vj�V�+u���c��g��+JI����@���U��Tg]�b�
-]�%.u�%8��gM�3��ᎇK`i�
��RL���΃�~7�3p���v"Wd�:خ�P�'����G��
'%V�m	>�M���� 
,��e�2,y=�߳<4t�,�m�
f'��#���P���
-���G�!�W�E�>�
=����*��}ƹ4��A�yX�G���R
���k6�����-w:��<�
��)k���痗��R\� KU�W)���Ғ9M{),M�ij)���l�_|g�V��L���ߥM,Z
�,�~R�A%���j�����R�㱥�L��H:/Xz�
kK����%2�2Cw���L�W����;t�DG�Ǡ�Wl�xB
W!�u�i)<��;�N�yTr߫�$�L��Ƙ^�3�lr��]��5��G;�Bi�����
SsrBP�I/�>uݧO�Le	Xj�*ɱう����f�t9.��Kp��'�t�M�����(N�V���]��B��T�q���<�u�r�$ܧI)<������ ���S��(�N�����
��ƞ�f�;�Ź{M�� J[
%�l*N��:Ӯ�+z��<Q����Ɖj�PI~}h�CL`��l��|��:s�����p?�����ҝsx��Z��F(�
-J��������+���o�;
�t78��X��8
��Kp!�{�28�L]�1�IY���nu0h�P�I���b�g�W��|�&&���H�JK�o���F��a�����7*ߑ(�Pz�P�C�q���>�J�
O���D,n�
�B昙��\����Z�`����=5\��%��ˮ�������ԗ�K��9����}�ʞ��a^���2��t1-�
��_Ks`Z��kpƻr��T����!���
�:x��?�4x�aT�HS&J
DL�B�l#d�`�dt$����Ls�qj5Ƣ��;�M��*)ݚ���6���qx�vCU��zxǶ�d��p*ɷ�� �$��R`q�_����|�%V*�hޒy+6�	߬E�]\�J�/��g:U�\�}�<��
;
 �8���:
sg����ǭ��s�%pފ��h�dky;=���
B��T����B*m�-1`����
.���E�Ȥ
��
L�Y��d�tӹ�R��ߡ���3
-%��uo�D
�8�	�؆
�rj��xi\]A�C�ĊJ�#�P�_
�dr�K�2|���BWM��g�P�w,eq
-i$�R��>>���g�`��*�R^%�IЅ��;
a�,.-M9
�o$�Щe��mw�
����nu��~R�@���R�.;\��M��k�������
GK7SX:�KA0�a��L�y��߮�ɒ��GJ�%h1.�/l�/���m�6�t{<��goXB�!���-�t�N^��-Tp��5��O��Ru#�b�j
�>WL:
�xǝS���"�:�x�.<SZ�
�?��u�.���
�
����Cr��(
��|��
�:L6����?�Jk,��%�9�u��H~�Ə=�	:�2IcI:z���	,�lQ.a��ƹJ6(y&/[��g#�;
P�;W��0�Ԁ%���,6TZ�J%�9�P�L��������@��ץW*�j�
���
���	G(E�PR�Q9��8��Sx�q��%-Ue�*,)�RPZ���` 
u<�F���������U���G��v�S�\T��6'�y]�?�4#��JR�rx*Tj;���y�J0�*A�ai7�%Q\��w�/`U�
ݸ��k�ݼ���-�� ��f��˂��0XRaRK�&m�@���[�� q&�Ŀ�B)p	߇�K�piɢ,]�7\�в��ч�]J첓u����:�R��������
�t`,�i��i��v<�����m���.ĥE�蹤�'"%��!���8����T�$_���J�*=�"rD�z��j�M���+�4<@N�3x<e ���Z�|,�E�d>�����!�F�
�P��9:��/�
��^9�%�����y@����XI�� �Hr���M��>K5�j(�O;���R�= ���RQ�.!��;
�*�Ғ=L������ʳއ�!$�0�n-�ĩ�m�L*?7���J���q��1L��f�+�RPj��0���`��]X�X"O/Њ7�Ż��.��
�	��Og�\(�7b�
TJ���UH��Q1�t܃W&1dO�J�a�
C%�%����t���K�jb�FJd
w�d��`
����
���B�|��K܈��i��!�j,�e�I�Kc�
幨䃂w��ީ�X� [...]
�R�7�I�G�{�&Ǜ�K�>8�Yv�W�����K�v��t2P�%%�4�j8׋�rK~�L⪒��p9OU�x��)T�A��a���t{��
���	��=X�q)�PƑ��M��Ѝx4#
�d�R%�	G(5}�̣r��ھ�l6}�5X�
w<Е*�5�xsX+.]F:�
-��ǽ� ��3Pbڔ�J�
4t~���-�~R釧��%�u	�V)�i���
./���&KӚ���$��M�\zC.ɏ�.N�������p6+�q�(�J��(�?�+,�E���z9��T�o��fKX(�
�d�d��Kׁ,�q�~38�kg�wP��tOx��M�k(����n�`j�
Ka��x�XZ�bi��(\:^��.�����_%:��O-s���<��4��{_*Mlg����D�)Ֆ�t�r�ħj�nJOMӶy��˰E���[`i.-���s
!��@iXR2ǔ
��_�ߥ ���
�:<{��
-�Ԏ(
���Qi|C
�wcP�X��/.��:
�zw�B�v�J8'|J
-I���DX�KM\��݈'���ai|��"�y�5���������DW_e�
F��^R�#����g��w�v�t*����Q���H�c����U*�,�_�TZ[*��j*�e���e�)0A2	N���$�%s�ţ��h/`�����3ͤ`���s@��AC1�TR@���WBϡ�Ԓ+�W-DJX����x�Yi*�Z*��l���]aN��
����s���a�z�����p�w��ƑH�9�l��/�Чg
�0P$%I�`RX�KMUtML�x��������\z�u8�IGAI�ZN뱢����,���e�>����Q�9TbL;9�JF�|��C%��b^ߔ�^A���)�K\��s��:�`���\<��V���Ҡ/�V
��~V����W��4(����&��W6NA)ISl�WHꨪԵ����<8}��1ZM���X[���;b��C�A%�$��;�,,]�t��%��)�3c���0���,
T�������^__LKЈ�Y��?\`�O�yť1`�g>O��?��xp��>�)(E6B��ҩ��c�����㇋P�:z�H*=
-*}�9�J`P�'Q��G�� *50����)�Dn{��d�H%�׈*����F�x�6�;�K^
j��<
�P���a���磘|L	'���i����$>%X��i��%"r�#D��S�nfGL|��p�t��鞱��0�f!�ް[��o
����
�6���n.
%v�[
%'��Gq���G,�Q�X�[-"N90��D�Ty�4.]x5���Pa��2�}"#%
�`N-�)���%����"%�Jw�s��ݝC%l��q��|)�J�6(t:�;�$����
-�T����Z��#�j�(�V\��<TJ�4�@�v
-9�x�,^ �w��T��2�$'Pf�Čp��u��r��2S�)�x3:
-|�uV��N~�t�Jw��@�iu��H��V
�`a-�t�t=e+/�Pg�܅����7s�6J豛ӳ�>=��P�8��7��߾).��|��m��
�{i�hIb)��pJ��s�6f$D�/#%%���'������y*)K
yT��:����E��4l�Q)R�����zS
�V���V�Jp�P)���)�'e"�m;���%��9�<$9�J<�u�֮
�@�n��R ����T�l
;���WzL
�L��-
Ci�P��8\8>۴U�w%zXUyw*XR� 4��p`�R	w��T���:T2P���G|V��P	��,���,�L���
"RB���ʼn�V7�<*&]]aa���r���x4zH_�� K7��s��\`����Oy&RZ����9�Lj������P)��!��'xA*�>��T�PT�� ��/I��J8����E^@kxQ�����q���ڬ~R�{]%MƭxQ���r�8�<��K��4b'(��:vڏp^9ˤa��-�n�CGڕ�k _��O p%��ۡl�%d{*�3��f�/X:�J�
!�w=(=���B$�_����S�ǭ�ҵ�j�Ϙ4����Q()��x �+���t(R�4�),����h���Q)��ϩ�*_w�7�@	�7��M��-*��N�R���ZoޖJ8*�R��*եO�
_\�T��}ZQ����4o�����O�f.���Z�@d.�L�y���X���� SHc�y���;�$�� �wTR��[��;؁e
s
���)2���Vymӷy��Ō�N^eq��Y�JeM�N�0��y@$i,]/��1\Z�b�~z`��)Wߑ�U@��b%1�a��J@#�],�
-K���cK)�v,=ΔgG�x���g�:N�K���>٘�NP��,��I�S�wTJK�J0
��e�tm��L�-�]*u0~��R�ކ���SoWSI�bT��h�[�R����^�}
P��g�Tt�՘��=�[K�!��%���Z�Kgr齕k�
CLr
-J�}��;
2D�w�`�
-W���U����'hKM��`�F�@
P)��˩��������Rx�.�6����~��D�l.���M�ۈi�Gp�M�5�J��&�=�
�KN#�>�M,K��-9d1%�7�qb��$�f����Z(�Q�vL�7����R�{Tڬ�	�JS���ST��"�J��K�ƥ�$"P�nCT:V ��:��RB����Y[>5�s��_^^>���+e)��W�2%,a
�Vv�_o*���KG��͔k��|&�w����| Ȕ�Y�T5J m��3
-�y�s�MV�H%:Fk�$��
���d������Z#in+<
�>R���w�GV�M���?q�I��7z�J`
�Űy$��aqIA��R
��t5-ޘ�Q}��d����Ϥ�¥
��Q:b��@.-����w���)mZO�N�R�J*����
���[l�I�Ğ�T�ѿQ)�e�J���G%�iA%n�DZgA*9g�
�ZPZP	��7X�@*�EV��?��O���}���
�R�/s`RE� ղq+
���ci�K���t�Y�7֭�o�ou�In���ޙ�w���c
~���_>�>@�\��,��k*m
��
�#�9�#
-J
��}��z� ��Z������������e��QK�۸i�
������H%��1����o�?
�j,q�$.-{����KG;[�XfaL_��	%y篖{a�������0T��XS	B&7?o�&��`��[-�VL%?�R�P�����8T�NJ�!*���G	đ����p8+
��۬�n�ve	P���7��zS�V�}V�%P&ъ'Z���xo�K˪o�Z�<`�/A&�D�
�8{G�����w5K]������-S> � �k�
Q+wAiI�T��B鞡d���G�=ܛQ0��riI|��襛c��[��3]_o��F,�ҫ}\,�F��O�:X�
y���t�Rq��gf�-�
�"G���J'P)T��RI$�����xC�t�#|M�-��F�%�R�
-*�U
�N%Ji2��.JkBÃ�ATf��ȿC��)/��TC1����z.��R*Cy�s��;��meV'��C+^�p+
�6���K�����hߺ�Z����Bq���
e��.�ݎs�UY;���x�)y ]�T�U��*vUƫ��C*�v�9*
w����e*!��5��;� �t&
-L�+�%�?�K:�i
אw��k7X7Z�I�
�1�փ�wz\,9��]�`)M�]��Cc�Ҝp��.�CF$?
��]�k-x
%� GiXg PT��ҀJ_
-K%���v�J�.���!3E�ө�n
QI�Q�JY�T�SA���S� �D'h��T��땶A�ϤR�֫����%Û,�����S�R1��B˶N�&c,��S\�,�*��	.M��7�0�
5sȤ@�d�w^��D^II�9p����$�����}zVq�S�V�s+*�?�+�DϏtx�wĄ���৐P�����gR�l��pj���;���eZׂ�-�p������ѱ�A(�
(
�<����-xl)
ǒ��̎�d���6�U�Q&���ݽ�
hN@	���(
G�'AɧRo���H%e�w8拋~�J�a*
����]*]3��%���f�
-*5��R��Tj-��FR	�i
m�Y�\�(K�{��D*�8/����j�B��W������B.5Ϙ��r�o����T�$�j�K3WȽ�3E����`���;���@I	�w�s۩���@A���C��]�J�<x;�CpG�;�؏�?:TB(}d(�V��C&E���%�5�]����.��z���(�F�%��#���ཌ)��
-J:P�C<
.�r4|�CK��OXZ���p�����~YO�}� ;(
�|�#%=�i�~wBQi@���R�T2v�J���v�{�#��s��B
-G�]RI�Q��I�@��@*�����}�d��NE*aSb�ޜz�ۭl�r�t�@~���f��]������}�WTz����$l(R`R�REJP��Aa)�a�*T�j)a����6���4
�7׮��
B~$N�8d�is�ٻ��s�%%e�I(i�s�����wM��e�8�*�[Yz�v��
�#,�hi���_!�{vIq���#6�щڻ��F�����2s�S��HqJ8�K�P�}(����%�����Ҥs�4ȃ;��۹���ɫ�ԙq�s�t��@.�{-A>��q(
M���R]��Y��
��
�'
hAL�k�
���o�m�H�[F�tR08 *U�J������
-�5�*�RC�#4���=�"0=�L` ׊^)�
��
�����S��n��%�J������NLe/a4�Td��������	�<���R����t�C�_Nr�t3(�@��E1���톒R�ٻ��IJб5�YK}�\�Z��1�hH�Sw�����=�Ajq@&�p�?PY����\��BG�2�y�e�L�
�KF[ݚ��;h�S
-@�䑬}$.��TyX���[֠hX�
�I?�Ko�;3J3!���v ���)�AC��pl�Υҫ�R�TʀJ�u�'�J8��R�cx��4��ֵ��<���!*)&�qC�>*���I��*�*R��DlNmJ�"�1'�0��<���ƣ
�[�@ݔO-$� T:t�}���}���LS���!1=��q�h�KZ��i<���)�]�T��/�B�(�n��AI���}a�g�%(����Ky�R�-�;���TJmCУ�Ң
�~
-L'�P	Rr%�I��P��>�L��"n��W
=�K��e8�s
�l����5��J�
����`I
[�K ����=d�3
�2�0.
�ս�0��o���[�i 7��XS�
D���P�T�f�Dv:����'#�X�
זJf�Q9���}�����no���<LX��#+����G*U�J�ދJ�4�*�R���j�F	S	�ӵ/����TZ�fd��0�
�
 �W(k+&��Q`�Z0����=[/�7
�N�҈r��`�?w���L�q��(�d�0T��
�
�9E)�
-K���>�4�J�O;�vtG�'�X&Y(A����Bic���	<��q��q��-�n1�ď��y�՛r&�u[�/�Gp����&:(mơ�~��a)�nV9����!���!�)'�r�^�5�*��|�*{[�`��@�ϊHI��H^�p���T�?�
E��Ʃ�2�{�:����t9�Z�݈6��tP��R�Z<����ቢR��bM��}��j*AJ�Ro�s
��t���
�`�=S�D�HJ�D;"���`�|�PIEJ�Vrs�����g,�B�C
=9���g��/
�V���.�O�L����ϚER�I�c�r�yӭw�	�vz+�M�
S�ީ��A�9
�; �_J8��4$�K��S;���3�#������CI1)&)T�%	d�L���'nn-��;�-�¥�v&n�����ޙ$RfGp`�������a;�<,�
-�g{c��Y��t���Q�#�fN�
}q����X�2R��������J��R
WY`v"�uй5��=Vs�O�Ο3�����@U%
l�-$��mZ'Y���
TJ5��ރJW�JXh{Vo��
-Ji�}:�rEe��ȇ���%$���GrQ�y���R���P�ҕ���
P*
-�����p�Oߑ��=\\�,�R,r��p�+/y\�� C;�c�v�wy at r��aҀI6y�+J��f�H��::�V7m���w�$���’B?��}}���U�-����8�ҽ�T=zGH()*=�%��(NJ�$ɲ�L�c	`��p�p5�M�Q~�	�H�:X�[��]��w�m
@)7� �,��85o��g�g��Y����a"oq��҂J�}��d��

r�9�!���tp�t`*
�J�	]�
�Ű��:�r��׾ʍ<�S����^
-
vxRf��*8PTRFx����
-M���S頩D�6E�}��@��
����L��b�C���Z��R�o Vk -e��Tq��GH�
:���
>�%.�'Xž�*�Es�dڎ�K�\� �����
�� L
-1ie�wn�d�wzk��/�U�D�'�T�T�Y����%ѭ�Q
���j%���vĵT%���
-�0PRL���i�'���g�	D�%4�|��%7�t��q��
�$/Pr��(��
)�Ƹ鏂�(�*=�G��f
f�
;��-����6���
)�Io �,owъ9�(U��P2Tze*}*a'tM=gxD�<���W�J�äU@���iߑ�(d/��Œ�NW��"�}[>wP鋦��[S�US�
mϥzu����
.0�TB��#��˃;�2vĻ��T�@�(p��Y����|��sI�K�y��%��x��6=�Z����K��tq���H
-1It9�%]��6�xN)ْd� P*F�
-K,��O���	j
G?%��uhG|pwDG�4��*�%��
-gf��H"&%y�C�����xj� ��։\�.|�Koh*���^��4��_7��t�Hmm���0
�%X���c���|ã	�V�]C���M����7�g�";�+w�[ �S��*
�����#H`1���oo�ĭB�~uG��_(]uw'�;���0���{j˗��
T�ߛJ����^���R��Ƹ��@Qi��Lli�i���m���$O	��Fǎ��xh�Û=0����^=��h4U�ԒNE}�&\\2Y<<Q��L�����P�§A�@��D
-!i�IN���({���;l�%d�Ґ�g	�:8k	MxY���R�ShGp!�����&v�I�$�ҭ��o��]+ %�"�( X�f�0Aw���

�pi�bx)S9�v3��u׽@I$�t�
��󘡥P��
�@
��YT������sq͙Q�1����#}�]*�+�0�N�t�T�B���^Q��z�9k�'�c�x��VXO����y#l�a��a������f�в"���+_Td�*�J�ߖJߙJ���)��h�����z��jz�hc������
������Ď܂���)7{T�@��4�w�G`5��W\J��t�Aئ<���\Z�0�Nӱ����>�^�0i�IN��J���	n�SJ��-J��_{�p�
-XJ���kJ�!�߄��,����
!R	���Q�0i��U�LJ�"! a�<��-pi-�$W�f��E�r�B.X�9�8�M�Mc*O;�1%�#�6
%��+�%����!
;�8W������.Y/`ޫ;Vu�hͨ7٩
-�5�;:=a��	@)��
J.�Tl��P(*Au?����,%Op���FK:���j����P��G]T�F��
-
��oV�]��?��@Q)yO*%���
T�6�–�4?b�
�^1�MoF �?>���DS�
�Z�Ze� '��+G���f�A�F)e�v���f���%��@i�1.
Tk
Lh�U���
)%Y�6�$�����EٻJ7�W�
:|i۞��@<
-c<?Ca	*�=����^)?呃��
1x��O?ha(�����PP²R��9��L������m8��å�0�B����<{��\���Θ���K�<�C�J�#���oK��y�"
=d��t;��tg�.�s8���)h�
D���
���J�J*}QT��~I:G��K�sI
�%+���zp~P���q����"li�e�!4H<3��}ݗ����^�J�߸1��9Ml�O��C��J�6�
��a���t�36����9_<+�8�I
+
-
�H�)
S�H���Q�
-�*����Q���}ߪ7
Y<,.�R�pC-9{6\�j%�x.�T��� ���������H2��6���N�Q
|n(��Y3c��N�
e�jf�w�;K�dqa	g�$������M��;���
�n
-~�= oM�@	�#
���,s�w�6q�̓E�ײ�����Ҩ��6k�0�>XF
�|t����w�t�Ja,�����!��%<���i�`א�RH�o�;��,܎x(�I]��
�E��$�P:�JPGy�R�
U��t�kL��Z�s�=�d����&�.�*G�D$��Fx�>�B����

����#���?�(�����h+?a��4�o�Iyp�fV �@�<V<�WSZō��
A�CT�PI���e��K{joE��,
��å̄K&��6c3`
-�}�r�4D�5�Q��e�6o"P“�2{�S�NJ=�L��
-�%���C��T�
��
��ۅ;�WP���+�
URNJ��T�`�"Ç��Ә�c����G�S9
 ���Sk7X�&=����-`��/	~������RX�넃�w��|C���d��!���W7�;�֚)�	yq6���kyv WIw�H�������wC%��@�k�� ��*�9�
�[y-��Q<�a����5_ig�tg�Џjy��t`�a���Rm��>�W85�����
�	cJS��l��o<�K������

u<X*�@B���q-e���G�wDJs~5���yCГx��&��
;��+�,�B7=�p���*�%0
��hWxT�	:�9�H�
-!ɦ��8��&#t�%�پ�5_:��w;��A����%�~7�������������A_&6g���I���D�Ǟ��Z{��� qHHRd���]��<D�m��2����9�f,]ȩ�
/�p&����X(���%я8	JXZ��R���ع]C����qiګ
���&�4�̂�>��NՅ���@.!�KB�/�†J��/�t�2VPG�p���
P��"��Ǽ�=%�<0:
�MX�{:
�E%��ߩ��	<

-

�wi��+
B�~�>T���S�&x��

-�Z�����kmg
-d�29]�
 	���
�:�m��XgC*
��)��5��ܱ���%.e�����8y{[�B�pI$��.��2�^�Z6�m
�D
-"��I+�$SP�.(a&(1��w
(%F�h���B~F�{�`�hoG���Jp�5��T��LUd�hI��xI�ģ�]h*����ڹ�7�r�~ImMʕM#DIz�{/:m<
-JKz&^�Xj������HO<�i�߫Q�_��4�;GhM@�����NS�7�
��_JH�?
���+d�>��U��%�s�Cv�5 g��W���|GP�b�>��4��K%��94�˧�|>��ܥҟ����F��\vO�N�T�-bO"`d�{r�@���0PR�a��
�.�~�
3����A�H���=�t�p	�Jf�d+�%'��t���!������Q �aӖ-Ĥ�aR��;HG�@�����;
� u��.!��+Si�3D��O��%H'��vG�h�
��\D
u��J[��S!1��k���)q��i��Q.M��z���t�ƽ��e
�Mq�%�E��_�r�dl�2(�`������|C��C�kh;�piTy���N��R7��Hvo�d��@��9vI(	*
�C
�w��t���=��Al�Q��Z�M
:�6I<�3��4�h� ���+p�����w��x8�pW�
��(�i��[SIaZ��
��:�����14&����{LyY�kf;4-�$ҽ'(*)˦~��4&�T�����b�4$��l*��7���R�T;n�)���P�ܐ��4�-/9V��rIL�ӵ�r���Ѫ&��$�/c�l=	�*'#��+͒
��&PjL�D.��
�6WR�n���
!
-K�O��2���

��lLaG�{�#��~��^��<����1h��c�D�R�@�T��J��S`��-+��K��.�`�F�.�s}�MɌi,�~I�s�ƥP
-b�և,�`ɴ���!�>�K��lPy��s��,����Yxp#ԍ�6�;
�UZo`J�S�K�
0c�A9й-
���9������<G�F��y��W2�*V���O�v�_Sh w	U�~��������Q	Np�z�
��}K�&PC����,�z���}X
��7��{�ׇr�9��r�J�i�
�Im�]��^�͚�T_l���*.����-�񰼴��bI.
&6%aF�8�8��J��hH�^�a�a��l�
-kr
(�
(��;L�)&� ��"K�QX�pO��Si�`DW��x
�@�THp��J[��e(�I���"SC�R���	:�\Z {K�|��Wo`g{S�i�Y�诋>
ܞ�1,q+�).UNאs�����4�sT�(��qC&=��
��Tr��8vY(Y*�
�C��w��@�A�bd�t��p���������"Јb~<���v�OaPe

Ah��F���tkC��pq������Tz�T�J��',,=��U�t�9M����0eCѤ����A4�c�FH��d�W�1���ر|��&$�^!�	ۡŷ��|�J�-����)
.�:\wϔ��xi�s�Өr]�gC9���>�;X��zI�f5lȤ
��Aɰ�!A-3w�ړ�6P�rD�X�)��|@?�RxyI]vܔ���v䎸�1�A9n�
�Iax
=j��)�
-b�z
<.�
�%�r�J.X�1�8dң
U(L#����M�v�ð�S����=��,�z��v)�N�r��d��x%N.�� ����r�
.� ��
K��
-V�B��0ꋱd��?>����.���{����"����P)+��C
�04;�����wh
O*Q��ߎ]���-$�2
-��
� �R�xo?eX ww�@�D0@	G���%�t�xjI v��%�^���<����J�Y<�U.�)��L1n�Yϳb�pL�i\���Y�j6x��0F�A�D�Q0�a���D9 0oua*J�	�w�{�m����
-,�r
-��	�u��.�<S&��D��Ύ�KO���w���k
�8P����%fR�v���J
��,-��&��F+�S�r��f=�_�^��e�Ʒ�/)Mc�ˀ�HpI����q۸Kx
�9�D=��K0�7�5�s��}�L�Ay/R�ł�v?�$����g�`S��<�.%C�﯇�����Y!6h+ҹ'�sd��
U#Зyd.=R��ϟzG|.�G\P4q�>�1�U���}��p�bYI���������P�/ݔ�x������'�L#����y�Fh�9O �B�cy`���.Jw	4: ���J�^nx�p�
6>WW��J\z�Y<���b3
��4
�-/�x	5�I�y`ZB�q�v�9s�� i��cӦ5l�G]
��D$�2��Dm2{ǁ��,
-�6�W��b��S�A�R��r;�PF��
!T�{�7�J
q�+˶�����<W�RV*0
�������<{�<ob`L��(P"Ө�[
�떔N��8��-�qS\b�4x
�6ݠ��
�
=�N�gg�t��,��1�ݸG�I!o@�>�K1�k�7p<�\*}�:���is�9�KF+
�vx$����$�?�Yi
ɪ
C)�E�C�
-;
��	��[2˜������C���ѹ�tl��k̕��Raю
 :�B ���5em�R�)M��(�	�
�s�hB������R�,�
���Y1��oK�%7^��'/`��e �(Ҽ�,�;�n\�u]>&����LJ3�1�K�ˁ[���R+�
t�t8�s��;hH̽����.�#ą�k�	�V(�*A�\RL�!VRh,K����2�
%��t| |���Лpr��7k�reӈ�w%;NI�
(�XrZ���?�k��ٮ��q7�RX���t���� ���)'�S(���A��E��T�Vh�RϱA�u��%��1^~���

�`�{X�gN�V������x� �"<=�4
�(t8�8‰Q���T�p@މ�n�˺k�
-�ڊ�`d
��������<'2�P��б��R���xܐH�}'(�c�%����8{{�VXU�4
�{��\�1�VN���׮��/�ɼ��$�`0m
]����Qm�
bSQ�@If�P�V��%� �NG��<�9&u1˝��*����k
�;b�F��@?e��]Q+.�X�k�j�f��<y��*VR~|17q 3�����b^z�>Nx�3�8ڛ�%0��[,�r�>�t��X�M�P;�5�!l{�	��.�w#���\T�S����W��I��#T�
P��O��g������
@IP���b��;_���m�)+�Q ��s �
O'6j��`5�+�
-����2�
���0��`����F�SO�X�QVzs*L����6tµ�t���

��k@
G
-��A����Ð
-
k
-�r�4\�G� �
xT�5���U�� �
���S�N/�<
��]>��Tޭ,������)4�N�Q��&͚V/���0�2�I����
�w��PPE�����Vʹ��r�~眮ҐV��Z,�euc��
-�
���#L�w|N)�^�L���z
}���R�J9��P`�9<�K#>�Љ
8~��D8��޺�oUl���Jɠ
(��>��^�
���#]C����B�ف���^�
�h��;��
gM���R�
x��]����C�+{��\�u�p��9d(b�= ����B�G&��Ǜx�ex/�#~�&�7��C(Qd �溦#�Gh;=oC�
�F%��0�uu[K�	�#cF	|�H���:W*n�(�F��@PR���
-��O
xx]|oB%0���a��5�q�*jz�pɦ�P���d��K�!�� �`���k������Z��H71@ң�Rj���Y&�	%((a�
(�X�č\)U��
-nK��=e��
�	�# �W;���
1�!\��;d��*X�
��V1����8V���,!�€�r���:`�l��R�,�Gϝ����`�5��PXנֻ�=�,��K at I_�`[��a�5��;�����xi�e|0�
�:
�>��ݎ�q['�51�n(Ճ�\tzbB�A�R��#:G�'U�Zt
-
�9e�R
��c0�=XѸ���E�nI���
J(-B{
D��:4�-�CQu{m�����X�-� �����UT�� ��c�M1B�d�R
v��G'�@6t{�ce��j�9�*yh(�4:`ج��}��:v�Q߯���\29(�>�
�T]2]؍9`�/��h�`r�$�˳D��U@�D֎���Hb��i$��1� G�
-b%�3JTQ⡂N���w���i9X��qk8� ����v]?aU��L���\QR���o`�r_��)��TB�t�$:Y|~�V�
���]�,޽����:��M��m�F����l,��_�	c��;�'��0\BIS��E֞Hxu"�0���T'�#؏
�q��̂a�==Q�"m�ހw�o�8JD%�tFAko�k���(8`_0�w<���ϴ>�~������
-9s���)3��}6¿Q����/����7��>W
�f׸���ۧ�
0]A��t��P
X"��cv+l�'d��l���;@�P��Q!Zy�O�H����öp
-��t�aL��œ��{�/��)�%S_2&V-L+�\�LR����g8$��;b*Z�D��R+h&"n�K�<�nJ:{g��j�G�@C>+?���eJ�<3;"�Bo	�"�
��%
��S\�M��y�����
-��e%�a�X<��
 �܃�'�|��;1���ƙ�u�X��V�%W���mIi���/�_�CfBv�_�v
ut���J�n����0
-���ê�+���f"��}9�$��M���݄7p*�<*�W�s8�
/��J9�4��Nt�D���������FY8�-�0O �~����
�atM�?��^���F8��{P	1��J��v/%��Ro���Q!�s���TL2C ���@X
TQby0�4����r�aP-R��t�3�谒M�*}DW�
��qR+(��4
���2\�+�8�� L"d2�y�1u1m�^qksv�HZ�
I��s�$�IxL��u��
�S��@�X��J`���3�^w<
��7�)0
��Ȕ#M;�n��FEvFE�i���`�C�E����I}���U=�J�����ť�*�c�Y? �v3Ƨ$M-�\���9�ѯ�~IJ���4�e@^���L�,�^<y���2\�q[�e/`5�
�:Cy{�1�E9��=��Y������Ϥ(y���ɮ��d�DMg�]�1��35��V��

���.�!�
&�;�[�E�
�K$'��H�yHWUE[=�
R
���o� *]��қR�
-KW@%���/�懜f
��V�B�$����q��Y(l�C�eϘ�5yZS>������V�ʱ㕀�Օ��*'\�,�N�uĥ��\�~<۾E.�1	�գ�ؘI�
-(XX�&_u+-��-G�
�6l�6�Z�`����a�݀ItD��
��%n��%��tťF������-_����T��Q mv���
!U$���d:VR�R�����F>a��O�4jϤEӐKt�f
-��d
-�ʅ���r�<o��^�u�b
-	k�5�5�]�1uʀWc���q�%���f�D�PF��k(�
.�W���<
�Q�.�֝#� �4��3@��8
I�'�NU��#}����I<2+�(,]�c�iW)+
�}r!8@,)
��x	��j���Hf��
|M��ı6��Ipr6Q:W#���"���3��\Vzc*a���46�@Ʀ���W��%T���6C���1�
���AA��'A�'=.�u��|h*	��p�mz@����#���s�d.m�C�ҙ<	&m���QO�4QNQ+Gڤ�	�lִ�m3wڲq
-��9&QAI'���QEI�9�������
��h�C��3���"
)ύ5��
�U�;Bn	��
-�+��A&=���羢���R�	�IRñwť4q+����O\ɑ�����&L�5�/��Ӹ������=�@6
^�bV
-w
%�=�N#<�$���u'�:wG�Jݙ#3%x�Yx�F� /��<2�;�x��w�@ɣR~���p���]�V��c��)��p
-$N����gaG����
�
:�X�rh*Re��R��A��.h�ޏJ�d�>a�ءj���W�N�D3�>�F
d3'#�[��a
P���Y%�=@i��*��9�t�u6*���xB��
������E�Q�LL+K� �
��?c"��3��I��K�d�D>7�$���c�f�w��;�t[=3X���fpx�-A��۫�
-X�
���
��]��O�"����Y}�����{�oMӨH�i���U`��G�.AfV疜̬5���n��p���z2��+I;^9��#ʹơޔ�䔫;�]F�'AiK&��q��î!�R�dҫs��ug����
-(
)���:��:��sz"�
KJ�������dt��h+l�9k�;U�Z ��Rr�",1�g�>2?�/O0�3Qnb�\ %HWQ�.�F�w�J��c�r���N)X��
!�1!Z�<^ebG\R=�DŽ@\y(ɚ��e(q�h(̓.lU�\�8�*?\��ʤ�t�:|�%J��t"�8�&qr�%����~DŖ?�G�;O
"� I$�X������� �к9�;����O��~�W���
7��fG��jG$�;b7�#��(���R RU3��T������Je�vL
`j��L%s	*�ib
L���	�C��ȕ
��M����L$�I:��iW��F3�����B]Cp��=da��6iO�lw�I0ݹ����q�6�Y�5�8B5�7��,�.b���	
��b�

�������@�������
d)�=q�S(P�

��f(�<Q���(��w懟��w����h�^�A�8�d� ��SZ�8y��3F3�L�@	�
J�:V�6��ĥ��*NB�p	�=L㑿W'���b�N�9�<&��c��԰�Z�~�V,=�T��N$�^��~EَSwX�H�m&q�)(A�
t9
�W7Pb*��B?�3!���T���+�e8����
���#L���D
�;�A�nLzjڗO�??=��p*)6u
-LY��K^n���k��3n��J��o�xf��a��u at f�כbR�l���c��K������Nw
I.Qpj�'���HHw\չ_&�Z�0T�
58�0	T�I��&�����Ya{N�+Kl�!8x�:
��Q\�2�NLY<d)ߎ�sc�G�J�6P�

��6:][�R���ó�*�~}?*�_��t�Fh_bgb��.�TL&�C�P
�p&Sʃ���"O�/JO�}����}wX�	Z
-�\*y����
W�+�w�Df,"3��й�R7=D��YO,X���&t�c��A��A ��{|�@"ɆI�Ite�Ih�p�X7���
��̑>�O���!�쎀
4'��
��
�*BL�(Vz&=+&=�|��jH�u]�I�Z��TS����(�*�"3�љY/ ~
,�)��80�f� $��1��3�L2�z�4����?�@ү���!�K֫��l�z�;�W7��rչ�{X�g3
�`R\��
(�˼��Ya3���%���
-����`���ѦH�
�
-ʝ��#�> e*�"�����@��7�hA����0R*md�
xz���
ޞJ
,}��R���!�R�-P���
#���9e���#�B���h������<c
-
�M^�J�ؒ�JWNӃW]�Ey��!D�K�Y:�Gv����L.o��z�4�<sul�c�U*5�xX�h$Ț��=>6l6L��
jX�Ihݔ�=(	,���O�
��b��
��K��-̎�r�#b�ђ
�J)PE�mk9�;Ť�b�������	����L�I�j��&83[r�&`��x<r%��F7��X˨�o
���Ά�E�4�Lc=I��:�kH��r��8.���%�.�:�r_?/�87��L���jy�¦���
��X΅��&r��S8��������	镹r�"����ڕЅ�dQC`��,)(������T�ގJ����[¥�T�����n�3.�� ��u�1.���<��H0�T�xL��?�H	��t�M�E�.I��
,�*�^g&`rt
���0�8h��%&|<�τ:y4"�2CJ��H��v����>)��p� ��9w��>hr �O��v*���:p�,�`S��>�
Q⎈GwD�?�
��ZD�H�"5�n%��U�$ [...]
-(�W1�<L։��%��<g��&�a�
��2�L
-ɺ�c���P
-biA�P��Y�\��x>����P�3�
��qC�YOeBL���
� {5����Q
ZaNY1�
-uODJՀK��@2��b
-sy�OJ/CO0������
��"����;juF����F�wi�z-)a��
#��o at jjV ��GD�<�F��% 4C	BǘZ
�	ڀs�`ɪ�I�Qz��kVL��ZR�c��#��q
km��߶\F�l��
��:s�L��9i���ǯ��g����$�qR<�B^_�I������i�&z�`	
 ��[�
�WtT�=7ť�
1�!��xG�X	TDHypĤ����0��[�����'�����`�pA�
o:Y�V�vY�)�c`)c��k7X>
$�0nݥX�*�T���v��m
S��7��ݬ�%
�j剤WGyp3�cDu|��(���<�K�A�ݸH:"N�'��������z�9Apa����߰�����0r�� LH&@h
�	��x~`�|%'��
��(!N�**0h��!�~����qi�������t��,5�O-p��P]�TL�H��X0|�@H
�#��̀I%C�e��ġ��
-7U��%
�KN��Ȍ�u00���C�\���&
�a��I:!fn0���^l�I�S>�[�\V�H�0�Sw��
��%���~Ӂ���8�D�v��^`G<5숮�	�vG�i�Ȏ �
�D*�LzV:���F&)$u���z�7�}d��Le���a���^r��7c5Xɕo ��,��G�1z�2��n�D8loʗv�i<}X���`�÷@א�f�\r� �N�ȓ�
ֶHuV!�����)�R�j���L��p�����X�ufʹ

^�ҵ
p	�pFI<(��
�	�|%�E)�
%}��&0	lpE\L�i(�~3�����$��9z���f5��`�
-
Ԭo�I��A����GV��*ҥ����C��i�~��� ^".��YhƸ
���B��n˧Bc�]Z�X��&m06j�>�/?j�2��I+w�1&�I\�@oy^�^�I�Ϥ�ky�:n��>��Q�;".�8:�#R�Ђ�$��Q�T��I�%2V`����=$W�I����x�O�ٶ/.(�C���.�����1�S�Ă��hF�a4�� 犖�Rw୧N���$�l�ti(�e��n�]Cȥ������xV�A�n^u���i͈���I� ��B޲ƈ�tb9X����ǖ��9(-qΊ|AV:��a���[G�w`���*6���`H�A���
��4ޛJ�BߘjK��^Y�
h͞1&m�k�H ���S+e��( �4C	��JK��i(
Ԋ�*/�f%`�P�(`����#���j�}�4ĵ��}����_/�?�M�2]P�� �E�͠�
N�8`&{
��q���y��8,i
�
�Գ�B��G'v�b
qv���I�"�%^�I�3"������χ����Rd05*`�D
-�m�>�Ӹ��
Y��Z>�kW�	p�ұedo�c��/9H�����1�	t
Y.qpʉ<<$�^���$��v���8����К�u��B��H?��	&���� {y+�4��EK��A領�R�<i�m�v�	B�:xE2����m�n�ҷ������]!0P�ҳ���N\n��T2��n�
-F�
��ip��Km��]���$�b�@R8� %�.�� ��%�
J"t��$Tj%����7��G@����-
�
��vi
����P�_��\qtg���8ߵ��l�t��
mj[껳HB�B�F����X�
&�d��dK)
�Wt�0Z,���;"3;��;bvC�
�@"��}�*L
�+�$�I� ���~�%'䓘K��A��&>s�s�A����J��q�|z �6r
c��n��\���2
�L�:�]��
�������?N���\¾��� ��Bip�.��h���NH�Zk4�\"�qF��df�� {���2�9� {�W�J&��aI+�2��%�i���x�lW��`�����
�p�+U�^4��76iѦ`A�C���`�{�s�R�EW�����.&��<������������j;����
�b�E�h��'
���+t�kt���ȃ
P��@�PT�;���b�Ì1u��Z�Dۃ�h�(�v

lDL�\p��}t:T΍'�0f���^�a�=,�,�U-2j�\QFAR�vM#I9�&L�rfǩd+�tt�N�� 
7���0�@;"��ټ�P��*B;Bm	�TS�}&
 H��o���'���&
-�xAeŐ}x���BnF$�2���3\>�M"\�9%�X�9W�7eP�x�$Ҥ��tC/��
.A;kMʓr<5�C�
�{m�:����w�K��Ji/��9Sn
-��d�((
��o$���!]A K�ty��A�TT�v�w�&��t$4��/ҷ���h�KT5�wp� {w@I�����:r`	J	�
-��
�XL0D,��䑒<�H
-I��
P���P�q����s�K�K�������U��"�(�!�ɌŖlB8my�����
S⃗�&i��&M�H#� a�bi$�aSH�j��A�"l�)1i��������pG��������#`K�hqG��(3���O��
-d�B���G�
��~�\�Սڇ�
-�	��Ͱ�d���"��d�_�a����T�(�[ Rl�.d�Dg�l���T�xS�8�?F}�/tÅ����ʣ��Y�Jݱd
-�N=��ݸʳ	|Վ�����8�4(x����(��B�'� B
yo%���f(�Ԓ��sރ���<>:�j�����q��䃓��K�ul YN8GLLB��**��le��
-$
b&K,a��C��V@��OV ��<f��͏�G�y�����4�1�@��kM�G�G
�
�*��6Z�Ў)&�D�L�}�]����Щ�)Y_/2vm�A?��H��}ڤ!�Ш�r����c%�$���0�[
v&}c
�p�btn�0inpT(��gG��G숔wD&v�H���YV����*$���Ȅ`2
GC��&�ċ��x���R�ы�ɴO�qI���Ӌa��	p�el�3bR�7%�I\�
�~�k���8b' F�I�UـI��������'h͖�����
"Y���S� [��Dqc����@h
�
+L� *���4�1���-f7�ib��0|�+��3�[
,�J݌	F�C
�֔�w����|Ŗ�4[!�!�(#���!���#&y(�`������D���7�t�v���J�:�� ���RŠ�h�M�
+[�-�dP�Ϣ��I�
�K뗾�a���둬����pIk��v��;�*
� ��j����K�I�LM����踙h	
���p��j
��t�LX�#r�#Z,EA�$v�n	b"�˗��Q��dʭ��W
��%>�&`���RN��`���.���--

�
�9�ʖ1ǕC�Hu���|_w=�?�g��v���F/ ��� N7 �vǫ��r����CW��$|jܸ��ʪL�1ii���$�/��”8�a�DJg��3��ޡ�56R�~`�>��@�� $�o�$�����P�>�E��
�KK��)q��b��!��M�xL R
 ��6�
ijt��ԓ�:`g�^y\Қe
L
0AK
�T��2t�">
�zi��qo;�bG̒���M�G�Y^r@�^���A且��H��m
&���i�D�m���
W�EK�
��Q9 ��P��RiG4�
Q
�#
q0	��>��$�^�&�IpI;�÷�g�03k܌�s3��
Lf�voBF'��ބ���q&���!ி�i
���}
s���'0i�I�L�q�3.�mX���16�����~�Y�Lz��/~���c�����;�:�[O(.i,d��^3��O��4I�ڵ�7j��!��
�l���zSQ���wN�8���DjE&���B��pM�9J
O�K�@z6@����R��!��C���e��<�:"u
Sy�\J�RM&�:��X�X�h�n�t�����
�E�&-2�@
�ЬA���$B�&i;̤i(����%�#��x;�[�!��!fG�*BLRa ���Cz �|S���h
�
���L��-^I;3)�f��ŝc#r+���X�Ԭ\.�u+SH3���!�>��!˥Xg�����S�(0%�a)K�N�N$��Ϋ�/���
� H�oDf!6*�%�D��N��P�����
d�J�\*����X��R�h�T+�.I��P���
�_��C���>�����
-���W]B1�o���
�O'e�O�|=
X
�%
?v�R��
��+
y���
Pj�D��Ѣ���zz���pI7y�<��H�L�\2I2��)�)��0<
-Ӛ6|̗����
-
5���$��$�R��M����	�@�F
�����2�#zgGt�;�ē�#�-�L$
��?1��	JL�ѐ0��:3���L��Al�~����G
-�aI�,�]
FL��ڥn�մ��LZԛ�v@,�:�\2���� ��u�s�M�M����'��h��Z�8�dlS�Ǥ�A���.��KZ��x�*^n ��8Q�?:G��������MmH���]h<�Ó���I<��t���
�!HKIg"�Q��y@��;L�ȑ"�Ѧ�O�Uå+��(��r
���D��T
�X�̼7�K;R$r��l7�k�Ξ!j�N+��C�
-)C$���Hr�$4mF�t=�&
�(
7?�;"�;��
�-�uxG("�`!��I��d��BEL헁��<��̬ [7���\I�d��/�v�w'p��N"�ZF('M0i�`ٛ[���
��fM�6P
#&J7��h�I���
�=%�V�2
`�J��Ĥ�B��A*�6ìu r��h"[�ʇ�7�ة�h��� �0�d�l��>�����v�%
��`2)�@��
-x���L��PRi�
��tC��c0Q��d�%�؞� @<�C:��:p�t�IM�o��i7��N��j	ݒD*H2a��c�4+B�!�d
�#r�#�wD��
-n��HR��?D��.r��H��,Mfv����V2������Z$	��x�G����%��?¥/�lC$"�܄L���dL����ԝ�;�2bg����&H�֙�ә��6
'��
���)
-�
��
`�	t��ؼ4�ϐ��S�xS�M�O\�Ux���k�-���d}3
-�l� 0x���_���%�i�+�
=�<:�w���@*H9"�tXl �G��`$Y&1���nl��gq>�˥Wk�&`"�ҩ<2I2�z�~��Er)

��+�O��ٽ�g���ZlԬr�Y �v8hӆ�;�IJ��:;�|eoG�fG<O��G%�J�Z���#�K�DD���r%5������j:n�
J[��+9ṇ��W/�]ț��0���4.��4L���
yf�$�-&;�f\�󌪁ր�M�{B�cL�<=�.����
~Jg�.F��p$h
��~&��5�%�Q۞����t`&
��}���%7|�IVw&�sq�@���O��PH���GR�qJ��$�W>�x���юiC�+W,�Dh��p�x�<���Fx
\,N�kq�N���Y�Zh�,��v�qm����(ak�IL+-G����N��"�d�w�����~c.���
��?���Ay��J굔�g�O/��f��p�뵦x�� �}o&M���5d�$����v�4�:��}�K�G#ZC
F3
��Yp�����k,8p�����
-�w�1�𬏔��O?�e�=tMΕ�bB�P��
����sZb��Q��f����(��Qyd!�ә�}�dy�U��u%���`|>�-��0��1Z3�/>����X�zw��4������+pO7�
�H��ri�"�B���%�$��`�R��X�����;b�%xGĴ#t���D�3�1��LW߾��Ƅ/݌8�LS�����i!
��{�W��v�0NX��I��3�
�m�����2������<$w#v-wH�I7./‚a�Af��v&M�(�Fk��՜
��������ѯ��8Rچ�f��
-�X�<[����
����� ��/��l�x��^
��
�8�X�f}{u
:��p�z���&�B��h�ə�Th>-��(�����%�h	‰�[�nI"���:J⚄�l��t�݉L�u��m�]7֐�������H��ǀ����DAP$�Ar��ɰ�Q@0�,����s�at�
�̙3�̹���_�������Z��;�������wc�
�~����Uk�������&y�O��L���T
�፝�H3y+�j�qbr`���s���坞%���5���մ�

���X�=��%������5՗�*�_.bT�(w-3:U��8֦���26�)nj�N���XЫSKI��B��.���IG��&�
-]7c7@��2wr*�ɘe�ژ���r�d���-�N�s�Iq�#x���.Hu��*^=
-S�z������/

�R
-��mɲ汀�T���TC�}�h�$��seD&��E�j��4��׫T���Ϗ� �/jz��9MOj
.o��ZmSI�e��On�ʙ�J��OD0!�~ R�D\e~"Z�eR��4�L�8��+1�x�͐}��3x��#Y%xKx{�*�i��Z�J!�F���kϵB��\�w|�wT�=1������r�U�
G���x�a��Rc�]���o$��
�6N�,���YȘ�³p�4�
���I5�]	}�^��o��M��#S�Wʚ��c����史o[�f�n�k<U�)d=ԡf�&�������
Y��e�c�`�
)j�+�%�6����W%}·TQe�1��ժ���o���;�M�J
��:����hUQO�U�ҕWɻ&�g�}�I%%�8E�J���hYL��*�O�LH�IJGj,[�
����T�o3�"ڌ��H���;������
�M�'��ݖ��������IQ���������V]�Um�Lj�$WM^���Ճ���m��/;��Qw����Ws�,4��YȠ��U�ۿ�G?;�j�J���o����ۤ�:S��T�\9�6W9'��c�G�vj5
y�VjR)z=��jE�NJ4��-�Xx��
�!&��'ӥv�ϖ���ըT]ɩ��T��5z�~�g,��Y;y4]���ܵ��]"�t�x���sRx뮐�,���K����O�zo
�<����S���ڙ�l3��Y�k�{
�e�{���ӣW՟u���%�D���
��Y�&�����T׌����ۢ
-
̌����U���Ƃn읅�
�I��
}T詖��<,�D3q]�j���N,N��5�l��
%�uR��HK�K��*��
rMa
B��F�C�?z�BH
���w���-5�ɩL�}�
��ʗ:�Cˉ�����:��cCf[�%
-�f�F���҇�9��ztG�{y�]!�*ɵL*��"+����n�>I?vDTB�?��e�rѨQ:�f�^ �G��zmF%�f���#��DY+�o�j
��Lx�"M�&F�W.p5�
�bŝ����ނ�ndvTtj���B)"5�����	�6.Px���U�9)T�p����q�*�� 5y)��`g��t{_Bg-e	�#��iHOD�
-R�z�GNrV
-����6ߚ�`�b��R��yjR�ZxG��F�Ok�X��1p�ռ<y!���QM}��>���'$�p�����Z��Tt'E.�l�	)�OD^�I�ll1�������
Ks(����Ƃ��<���yџ�kmo��n"rf�
'E~��px����L��lZM��D<P�5�
ή{E#5���§mg!�%7�as
���XE/p�s*x��7i�
�x�"am2X���
*H��$\��~��!��$I�����i�Ĥ�2��j�G��t�ܤO��'�Ԓg��ThkQ��䩌ܩ�وtTQ��x��&5�H!%�|>DEMXt�B��x��}"�Y�3"ޛk��R!1��ϐ�i�zl����Ci [���F��2���
uyv�UN��8v"Ĥ
`3���.�]w36u��W2S�P�����M�w�Y��\�'b��[��DnC�$��
��[���;�LI��i��S�P�W���r� ݬ	(��Z��-��2���5ͤ&3�h2�1����S���*��/��yO��ShB3�%�4��EI+�����+�')�����>�c{R�H^8"�I��x��f��e
uD	M��Y~�H���o�_�P7aL�^��+3c�A�L�gn��6�[2��ѩ��]���p�������[B҅��rڸRQ�@�T>��f��3zy:x:zF�R������<#oI����#� �Q��)������EF��.�L��<7�g쨌U4�I
��_V+��2U�0*
,J
)Ϻ)$�JJ�L*���Q3k�,m��R�'�~{��ϱ`�ڙ5�f�Q'j$k�
፞�Z��Y��
�D�n��[q�(<�m��j$:�H��@j�#8�<#%+|�U>�c�۩��TJ퀗jo�2�����Λ
\~f+�.�WC��P��z$*H�j��
I�THL�L�92_~��3v�d�j�Ӱ��*�Î��E��F�]�;������ӂF�o����I��q(X���H���?FԼ�D����x
`c�L6WF��5�j����6���<)�Rq,p
7pŌ�ڑ��-����o,Lt�u�m�F��}T�J�4R��6.��eS��Mj;�&?{���g�f`����6
�}��
-b�#�T\o�TD�_��q{��f�դ&�P���ic�TM��
V^%�l3[u�Ҍy-
ˤ%
%$���PD"$��
�1�z����+�W�Q�
>֑��U�g�B.p
;p�N�b��v��r;������
-�u��QP+a�.��n��H��;+{����Z�
�-jY�
�7
�2]��G�\"���Ώ�XR*�h@]SMz>��n��UP����}�N�ڵ-
I�9�6Rb%�"��x>f������}x��P���
��PV���Bp���]4R�7�g� ��T0;��r��
��+;u�s�=T�xڸtV[��6S {����̸eQ���
��Z]��ȏKK�w�6�t�J�7>{���O
�a
�����9�y�|����ԩ;�I;�G�������b�E����D�"=v����M<u�C
I=�5�ѫ`��<(�=c�u��b'yx�j[�)LtT��*�������'���;KNE��+�?=gSA�z�� ����G��
��e�<3]!5ղ��O�Q��
�<�XD?V��
?Y���p��J����E��	IgD
)M��sex$��^�
>g7�>8v�u[,W�$.v(;�
�N����uPEuO����$"I���p΍�~iΏ����
�i�G���(��D���b2�d<-Z�
�N�:dGn5�7���|�b [...]
-� �G��$�!����*C�h$���Jr��51ƽ�M�ZGf�T����)G�O���U���ڸ���Ė�b���6s�p>N��_����
�G��]��H�W�L5y���
(c�|
�Դ�Ƹ)y܎��y����z�4��ҹLJ\�8>�2�1��hZ�i��9��@F�d���
-�1zF�g��F�ŎΎ��z�������W�e7cS9ڸb#��;?"yE%?���
�I�ӥ� Iꑆ�D�3��t��2���@�B�P�݆Z2h�Qp�yo��T�O��O7�3ZHH��ͧ��[��J�'"%%����t���6�B�HC��5|M�B��_&xi��'A���/�]��ꞗ��6.��gi�g _RȐ�?�����t%$)ף�I�
i*���L����);��
���<�K�Q;^���
�������+m��h���H�߉z��F��f�PF��5�!
��ܕ
��,p�J�j�̔W��R�pl��q�W�T��v2]�Lׂ��
��"Ԥ'4u��Z�$=��?v�<���Q
�s~�R�m>��Y�Q
-��%i3J�se��@Zci�

��n"��UΌQ8&����L���D�=T��>�+�0	�'�o?L�/���w��:죔/'�&)<j�:�@�!!%�k>��$3��sL��mFJ#1|���D�Ę_ු�8�Ǚ�R~����N�uw�q���J�aH/�~�nJzA\?@�skML7�8䕒��ש���&}̎�Ɣ���2��J㣐?]jmF^���4��~�}LRt;Qط���FiTD�
��(x��x-\�ԌJ\�\���m��L����z�~��sZV�"N���
-
��ޟ�����y����JV�I���)X��T�-r,�dh(��K6|�^z�)���W���띰�)�&��+y�w��b#�o����8��`���p�����R��7��<�"����̮�P<?Vh,�#Y��K6z�����
?}_��D��0��tɊ
�, �~�E	�����z`��Q0��S~�ֆ��wu
E+k�$�1O���8	�2���
�����eηY��I55	n��t� (	�`��ܭ[D�)K���^J,$�+9	3�Hp��F/��³�Dى�����Ħ��t� (�L8͠�E�c�y�o����J�CY��t_�?%�.R�NQ�S��d�: ���
-f�͉#J�X%��U`R�*�dj×l�2]��Sl�)`���ƒ��ğ򨄥���?�C�
�;��
�L!>���?�Rl2] ���x��
��ҿ��R�<)�dz�/�o>~R�P69)N��* �
Rʗ��$I+�	��V�S������
-��Gֻ(u?�
�
-
-��b%��������ƒ�$�Āы�4�ug7VI�3�(x��=����̐���8�PBpV�(��
�e�$ MZe�j�2] � ! �H�i�u�H=x�� Q��bMHDD2]	 � q�
-)���ԁl'��� ��y
��ܢ�(zH
�b�	}�� ��#pɃv^
-$M�+v��
- ��Ҙ�s�p��XI
XJD/2u�.
 �ȈD���rn�L�(�$\8k��P��C�@��<!�5!�Ą���MD�"��G悢ʞ;�d!N'YB*���rJ0	�d�Mg�t�d/;�d���z�
�9"��BbBB@�%��%YQ�0�E��+{^�x)�%g7�	��ݴY2*hB��N�y�8;p:�2��5?Je
-F(�^�L1!t �p�mfD�#!e
-�tn�$�8#p:o^�T|�Fq�M������S�K�L�	��$p�R����F�L0"�L��";�L�	�b" %�8�I2o:lv�.)vu��^��@V�n�̄\�ud˧�	)�		g	���N2������R��R��~?��B��A�d�p�vRDB.)�������J���
-
+I�M����>�a|��@/x
�P�:�
DJI;�W���Ȉ$MH9GB.�͛ߺ!!�d�8q^�8o2l~��{TH���^e�8w����:�-��tn�m��B�̌H�"#�I�n�%�\BB@	�)%3p^�d�t�***���v
A=ΝS��:�I,)El%�Q=����B&�|j	�5Ja)yN*�N��&�F��T��j���#�U���(w*v~�\Z�t��ن[J����("�&"JQ,'+!e��k$�
�}` q�$���M�UMQ=���$r�d�L/�{��$�wz�t�P���JŒ�*�}Sfb1��-��F��I'��q�XH
5�DME���o�?#��c5i1��	/Cgj)�%g���6�� �6�$ٳ����
-���T�R	g
��	)%/q�I8ΛLM�6������
�2�
=<�;)&ji�$�A�d��KI�m�$ٵI#Ʉ0"yVDtBj�Tf1qB.
&�<�'��D��] q�$�����&#VWPOR?1����r�D�D�DG�b�� y�����97Q;�z/A�m�$�ڨiF
-&$���3""5�R��Db���\.����Px�}�%%�8ޗ�㼉�Q�8h��74d�H�F�#
A�
�c�+&�]_�f�
]PK�.8�����K�m��
�$2Rm�!/"O��%�f
պi/�%4n�d��/%nUXI:�獄DY�5jԨ��JI7�;��,�L#�EO�̤Ť�$���ZB�@L8��m�źm�	�Ba�	I#!�UB("�a&�f
-$��K�(y��-�joB��^�jԠU��	I���&�Դiӫ��=���_���Q�	� e��$�T�K]�
-���咥%ddGߦ�N�	�GB��Q0"W��pB�hH͛��s���n�Õ%���tnHJ��jj%5d!��Q�D��4'Z$���9}?��G�kD�3R
-]��2]8p�%��A)i'ɄPD���������4������KKh�@��
�MX�#')%]�Ba���l�JКh�ik�ކ�M|{˖-[P�(yM��bb/q3�N��B;�.
8[�߅VJܶ��d��	>2���
%�3!!����6�֍��˥Pㆋ��dܿ��@�8�$�$��#�Y۶�ڵkOt�t�D}��O|?�P���Dj��)�NyI-�,-�[�L�-��6�� #��6^'qצB2jcD$Մ��	i#�Dn�1Q�&�Kb��
-!-Y{x�.
 �#d%�˔-뵁�8�$
-
Ǎ|Ԏrֱc�N�]]C��E|k�N�DE�D�8v2u�K�
��yZ2v(`%3���}[�
-U�&�I�I�kSM�����JH'��$�ҁ��%�[7�R�Z�\2�l�`%���nuЛj���T�&'��@8�[۶�65��nݺw��C�S�+�E���ݻu� vf7Q�(v�:�\.q�|-�KK�7���! �r,%ݶ���^%�$�Ծ5l$��'��L���L�0�n�%ѹ�
���r�J�T�RJ�
]�X'�2��Ԯ}ǎ��=(b�{��ӧ��������}����[d��Ե
��tM3�FW4��R���� 2Ҏ�o3VJ��P;�n��I�kJ"#��
QDzSD��DD������bjќ�$:7�\�]<�J^�����ZJ�
���H
;��PR��]������Q�
8p��^;H3��{]|ϵ0@����KO�NĮ][�:�%j9tRKtm��]�`��J>�R��ی�;��P�۶f״���CG6GD��2�NH��
��PB�rBz���u#/Q�&�K��'�d4nH(	#g�t�I�����y׬�h9pݺs��� �&�5d�СC�
6�	I|ϰ�C�
�^;��G��ֵs'�:Z/]M��]<�
*-�{x�7�X*��Eė�%\Ѹ�h�Z�ˤ���p�և}4P�H$dHj	�	��pBP��[�nԺ���ܮ��BKy�%�������\Ŷ��Ǒ�+%n���#'����-�&�6x�H���ȑ�F�=z�fl$�%�=�G�9�"8l�H
��o�^=�w�"�Լ�
-
k�o7w(`%/A+y}�}gJ��6�$ѵ��ٻ�l
����T2�B1ҏ�$Z��"!�h�w�x?���CB@��dE�Re�}W��F~�v��
���F:-26n���&L�(��L��/җ'�o?~
Ep�(��aCEz��A^�f0�%�TZB�@<h+yK�ҥ�(.��]�F�<!�F�e�־9I����v	i%d��q㼄$����q~B�PB���%L�VzC��T��ո!! �	n���w����yu4�6�J�I}II"o�q�D�D��L�:u�iә��M�&�q��H���ʝ�@Z0����`K
-��Ru�q
�����A\8��i3��T�&��h/�ڶ��I�
JF-۸��E��2=����,&�wn���Z�kKԸy{xfB�AB at nbdΏ
_T�R�O{״
%J
9�7r�����"j"d3g͚5{�u�9�\�"}��ٳg͚9SDp��ޤ��lj؍6d�b�Գ{W�5�E��D;�T7<�J ^�}ۅ�fo߱�ڴ� �6r��چ�5z�8j٦Ȅ��	I/!���L�ލZ7�%�\jצU�fW	-y��q�U=?+����3�W���
]T} �蠤ԡ�Lܠ!�F��&Nq:I�3w޼y��/X�p��En�W,X0��y"���ɛ>m�d�1�E;H�%^.�k�WK���o
ؠ�t�@�'x�E�
棾�j����XJ͚�jӾc�n={�e'�
=v��I�IH� /!	"��#�	��2u�	��RB��D�֭
�ⱖ��M�
nZ�װ�Y��J�yV��=�A}`���XJ���ı�&L�2m������"f��,Y�t�eˉ��W�-[�t�%�/Z(�G��9C�n" [...]
-%� !��.Z�X&dYJ	Y"2��4c�Tn�F	/
�ߧW�.���R3�q�������N�t� (8����RE9�1����:w�ћ'�$7}Ƭ��Σ�-Y�l���+��~ժU�W�^ì��/����t��+E �-]B��;g�L�b"/�6���}zv�"WKM�ƹ��
.�`%��������D�FR+%�Kmېab�D]ی���P�&��KH��	YA	Y�p!�i֌iS&	/��M,�zu�ک}�V~�&��+K��e��ɫJ|���w:�愔R�>��Bi��q��f�p���"n+�_%b�vݺ��7lظq�&&�F�(��aÆ��׉
�^En"3͟˩�8^4�CQ褖�jB����K�
-��	ޣj��.*5l���kh�Ե��Ҡ�#F�
/�$�4w>I�l��kuBDd#GD$d�N�2a��u^���A���ѕVK���-�ˍk� G	?���*і9��5n"�@-�!b�$7],�D�D�D�D�6lۼy˖�[��#��lݺu˖͛�E�6�_�f��+E���͚1u�
��Rk�CQ7�9<���W������V�	W\I;��;v��[Hi؈��&N�6c6umK�	#�^�	٤�5ńl�	Y�rŲ����ܹ�
9l��5ntiI���[�L+!" ��d^U�V��JtQ��@%��(q�I"p�7�f��;v�ܹk��=��H�+�w�޵s���[6�oܰn��UbŴh���D3H�c-u�ܡ-�PP+Xø�D������noq�뮍�6kѪ��R�~)ڶ��g͙G]��Uk֮� �e��L���C&dӆ�k׬Z�|��󅗦N?Fi�K'ո�׍m'���`%�˄���r�ר]��ܿkשk��$%��BI$n���II�"n;D�D���a��
dn��/���߿��} [...]
GD@�a]V*]�B9�O��@��>�w?)��b��`���$�H�.�W����M�
>|����-6��#G>|��M"�"zBM;wlے/R�j�%
)tBK#��߇v(�lL�dx�
"ҏa%k�/����׌6���3`�Бc&L�>S�mK�_�z����Դ���rP&$aD���x�N�VѺ���,�?g��)ƊՒl�xO�rӵW�~�D�"��d#ȑ�Ƒ�����R߁���7��D�M�m;v��w��M�S�n=z�رcǏ�-����W�
=z�H��"y��ۻ{����7�_s����i�Ǐ
1�ZڡP��X,�
-:T��6G�@���$w��+?���m��u�̈́ACG)M�5g���+V�]�����{��? |t����c	r,��
�6o��/�;k�d�Ҡ}zv�_�bIߨzх���`%����8���3�\��9��ěb��m %n�6�D�D�n=JA���;���f/�uםw�y���v��H�͇�x�}{���7�]�r�ВX-�=|�@��D� _Y��U�7��.m��ȁ����#��n�׷5��e��y3a���Ϛ�`�k�mN]�Pҡ�7�r�p�LHˆ	9&rp��=�v��m��sg��Ҙ�Ըu�ҡ-/���R�J��8
�0���J��kשEc^*��
mNL�1{�B�R�v�ڻ��P�-�H"l"i��{�}���<�`$< �z�}��{��w���v����M���۶lZ�f���̜:qܨa��ױ
-��E�9"Ҍi%s�|�J~�֊���=n�X)-X���56ma'��n=*�$l�r„��	���;)!��|�Z�=��o�߰viI��Ə� [...]
���[,���;X	AD at n�[ɸ�7���k�riw���a�������i�X(
����"pBI"n"l"i�?�ēO>y�ĉ��z�i��S'N��>���?��Hރ�w��w�.�t�&�
�ؖ�Ahi�|ڡ=|�@�7o՜3W��Ȝ<SE_XB�@
XVҗ��
����K��CF�f�u���6om�����rL��D��������<�	��'�INȣ?L	���;n;v�͇ްw׶-׭Z�x���Ը
�-��WN�$�6�a%��H+�k^V*W����:�
x*r��}����}
�U8��{��G
}�q5���<�̳�>{�ԩ�l�+��}V|��I��"y�	3��=w�~\����{v��V.]4�Z��C��MW�Z4��;�w�^x�w�"Ҍo%y���M����^3���m�wQ}��i��-Z�Rڵw?�mw�����DŽ�tB��DD�򌙐DB��n9|��}��oٸ���ԸM
/���b��N�w�
.��\Ʋ�EF#(��E��R���D�j�F!�
���m줇}�	������N�>�b$�O�����?���ɓ"w"v��;e��
--�_M;3�N3|Ȁ�t
��2��
�n1B�@���$�VR�	��G�������3�,\�r
Ii߁���zL����!��'O<}�LG$iB��dB
�_x���Gn:�o����\�t!5n��ݷW�N�Z]s5o'ԨV�b�r��WX	�,�7��|_��S'�^ێ]z���]�l�ڍ�����÷
��.r��SO?��)6��μL���+�ڈW^���y�%��N���O����Б��n�
�y�����0�Aq��\���9���LW�`�m��ؗ�.�P����}[�v�����}�
ѷ�X�>_���t�������2��DB�	9�N���S��'{�a�܎�|�X-m���Sh�Կw���T��� R&�
m��@�����Ҟy�^����	�%+Voؼ}׾�BJw�%���'�:��sϟ>M>z���^{��7�x��H�x���_{�WE�^�{��3䥇��
�i��
�C!ZA�X�
��]:�iq�����
K�������u�K�>�o�%��Uk7m�)�t��mb���#�?q��3��FzI&�#�4!gdBN�un����ݵ��E�fO�+K��z�V�+��Ƴ���{������
-��G7�M��[�O�;$VJw�����I/P�^������o���;����وW�}�
�շ�zSDO�N��y���>t�ВX-ݰ�[����b������Ud��ʜw1W�� +��cZɻ���r*W���i�Uێ]E�6T�mӯ}ۚ
[v��/VJ���УO�x�ѵ�xFI'�mNHDD8!osB^�	yNxItn�{��BK���ܲq�ʥ
�̘<~��N�;��l����ȋ�K���Q�VRg��k؈7�h�|�ȱ���	)Qx�irҙ�E�(n�������|��وW>���U�>=�;����N>�ģ
-
����}�
-��Ҝ�SD���]#3ǝ ]X��"X	�E�J]ďN�M��<�zr�w�A�E�F[ܫ����X)�^�cO<�̩�O���+�	#鄼�	��'�}N�[^B�y��ǥ��q�_�Z,�fM�8vm'���M�AZ�ɭ.��J ��$�2e�����$A��4l��)V�n�뾇
y⩓���%�
-%����D�>���O>���O?��|��'L���r'��^=��
�=�����
ڿg��
��/�7k��ܐ}(s�9s����5��@���t���Mg�T�Z�/+5����;q]UZ�q
o&
����$�m/���P���42"VBަ������}�k�6j�vnݸv��ѵ�!�Ȼ���+��heB`%��X���C�*�c����G1�����X��U�>��h)q�I�p�(l�}��_|�e$_|���q�>�؉v��W^�{���
��n�
-n۴v�R������
K2s�v�J���LW�`�!x+��'yu��@
��
��g�Y���u��v�f�
�H)Q����k+$��H��|�	����)!��r���O�<����ƍK��-�;s��N�M�V͚����M	)�Y	��$�)x����l֢5]�
8t�Iӯ[ #wEN�O�8��
�8�?b#}��W_}���_��7�ڈW���k�U=��O>��o���+gN?/VK�>D��{wlY�j��
m��
K
�q'X^>�.�
�ҏm%���T����б[������0uּ��Woزs��÷�~�}I)����o
-'��tB��DD��J�G2!b��©�^㶏�,�X2���c�.<��ݸa�<��}�>˜�kX	� ��.�TMmO�lӡkϾ�Ex���ڰe�^������N�<uZH�'��)�_}�ͷ�}��{��w߉�}ͱ�Խ��[��z�E�Zz��
-
���vm۸f����N
3b��9}��e��[�a%+ѕW��]���M�ԍn;i���KW���K��w���RJ��.�6�$�$���	����g�ʄ���ҳO?ɍ�ro�_w=m'L
�or�C��V�hܦ
-+�\Ŵ��=A�b4�Ð;�e��'�FpɊ5��Eϊ���oR��I"oBI����~��h#_���=2�W_�v���{��t��gN<����Xڳ=�*��;r0g�n1�NP݄+����݂G'r��-Zw�ܽ��!#��޲U�7S�v���x����y��3���hۄ���dBFD$�{N��_��>�%���q;z��
[6�vŒ)�G
�{���+ԩ]C>i~��!V9˯�e%�J���a*u^ٔ�V���1��
��{�R�ǟ}�X)	)Q���[V�o���~���F���߉����#/}"B'����S�|��;��ņ��͙1e�̜�	�����
�Iz�+J0�J���c�ժת[�ov�ХG_��D�	+Voغk/�
z����N�y����}��O>��˯�Q	I��UB���|��{���ϝ<��C��u����v��y���&wϮ
�Z�^�{ᄜ
+��IJ��5�,F�+�j޺
�_$���nٹ��#����Ǟ�{��$�@��o��J�����O?���m�+?��GO�����w�z��D+������
��n\�b�SǏ
ʙ��
D'���q
X	�D�Jt?�qת�@?:A7�N�6k���۳��*���O���)�/�"'ɄpD~������uB>��Wϼp�iZ,�~�0o'\�T^Xԯ�|��QC�	OZ�bX	�6�RϭV�'�Ի��U-Z��ܣ�@jgP#�q���r�]�?��SϾ��i�D
��|O=�����/���?���l�+��=<�%�\���;or+��F�̟5m˜a�9y�ܟ��c���#r ��V:ϼH>f޸�5��v�ګݤ:]�&��{P�m�<��˯���~���_}���DB8"��'�gNȏ�K��@Zz��W^|�Z,�y�ȍ{wn^�j���fL;B��дqCu�	��fi��`%���D�r�M�6
���{������"������y�Q�T�{�]!��E�D���a�����6�?S�~���?��B��ע��=�
-��³'
�;v��};D�.�=}�X�ňOT�o
��@\DX�2e�z
�}��1vҌ�.[�~��n���]������3���6�������D��;մQD�
N�n������|��	o�v�4-���6��ۺa��EsfN
7rȀ��;��7�_�+�\G[�|e%���7�7��o��7hؘ	�f���;�}�q�T�{���>��Kje�~����_������E�?�L���7�~��gS+(K~�lX͝�8~v�S[�	���r�J��J 
+���D��?Q{ܽy�{�E��lغ{��[o�����_|E�m~��_+�6��?sB""��7J�O��
%D7n�Xz������wo�M��E���Mxt�	������]��" ³��Jtb8�r%�iދS��	��H6��?���S�E�����@ju��]F����l�+����Q�~��7�|����O���9����~����[7��`����pڟ�\�������Jh+U�(�ҕW7o�';

5nʬ��W�e����q�C�Q����O�	BJܶɄ�E%$""RN��?�5n [...]
+�X��TZ[��R�/�Ԣu{z�|�(��^�r]����
�󾇟x�mq�G�����m�k���=2"FB��ǟ)!Ը}"��_~���:.7��v�	��?i�BݦZ�r�AsX	�&Vҗr�����#�Y�E��lܺ����t%�Aޝ��J$%J
E������O��?)x;?t�C��G�Aq���w]�ݾ�;�)F
����?�

�
+�x��t��
�����{-��0{����oޱ鍊�ɉ'�y�%��D��')�����	��'�o��?��J���R���;o���M7�3}�&�
A=�t�_��Oh+]+�
ư�E���!Z���7��.�퉃���y�C�?�����K�ᄃ�_����ۿ����������b����Ւh)s�r�|䁻o��&��̟=Uu��%�p�wm�J ��t��R
�=�D��
3a�u
��ڰy�
�n�ہN����>}�o��~����LG�_������q��7Z,���kgN?��c�{�����ڲq��s� y�*=�T_�.
X	�>���xV�c+�o٤���Ӧ��u���񈼬��K����rw��@J���V������3C�{�
-~�ŧ�̽�³|a�:�-�W��|�d��mZX������.U:����+��-�{܇n��J�N�����}�)-�h3�jۤ��ѝ�H����)!?~��עq�-�SO?��}w
=t`�֍k�/�3cݦ*XV�[۳RX	�2��.���'O�\~\In���w�ͷ���#O>�™WE#�K����)'�Pd�����Db���x���~��m��r�u�w�z�n|]���'�����]��ᓰH3A+����J
�J
�	+�;q����遾����݄_�{
>�[
�oR�	������K�q�=�x���;o���s'�x��;�
>�g�4�oS�߫[���wYh+���@Nc[��JW���!�	Sg�S��j{��˯�F�3�T��2rZJ
������?m�+�M�S���li����?�̽���t�����wm����OV�`o�\
�
-+��[�R�J�.U:1��VZ�i��G���J'���7���Ͻ�M��T�F��ȈpB��_�q������O?|��W��&��w
?rp����+͝9��`+5m�Y�{�
V9J�J��V��^�R.Yi�R�1�Э����cO��E����o���w2rZJZI��F�N�N�N�����2�ɇ|a�nw�_w
+-_8GX�:���i+]+����徕�����V��h���z��f�^z��>��o~�������6i�pDt�7�N�-o'Ѕ%��~��7߸WXi��y�1Z��5��.��@��=���Ԧ[i4�ʿ��6l�uo�?��_yC4��^9-%���e#c'R'C�ZAy�ç�9a%����l�Ļ�ǎ0vͥ���J N��T޷��fa�q��Jk�������'�y���|޷�� ������^�&�����T�fl'Ѕ��v��oVڱy
Yi�xi%>rHY�<�r���*V���J�-�_���6��Jt��{|Y���AFNKI+���؉��ЩV��s'H� [...]

:z��J���m������6i�pDt�7��k��&�ư(i�b�����1Y��0��@�I�JSg/X���-�n�J$)[I="�n+
=t�.u�+�2MA��j��]�K��ԡ\�(��J��W�|��O���X��
���>�X	d��ҝ�.�w�l�b��7_x���\�(��J��s�2rZJZI�����H�
����o�P�`%���Jt�	�m�����m�H���M5n�m��8��� p+;� N`% bV�	�@��J 8�� �
X	 '� �+�V v`% ��J ���X	�؁� p+;� N`% bV�	�@��J 8�� �
X	 '� �+�V v`% ��J ���X	�؁� p+;� N`% bV�	�@��J 8�� �
X	 '� �+�V v`% ��J ���X	�؁� p+;� N`% bV�	�@��J 8�� �
X	 '� �+�V v`% ��J  [...]
-R�,-;��!��&g��
-?E"h���Ϊ���p�Z)���$%�JE�b��[��(;��g��J��ܤD[)���)+(�T,\眨����
+z(�q�@�RB�T�Pb��y�����^E.{�uW�㬰Rq�d�
�MJ����L��

YvP�)������{��|+r(��J��R�֯S"Քeh�2G�sXj�N.�LMn%�J�e�_�G�(%�JIÕ(KᔃvG,�I�Ub7��{�+_����X��l�PXJ����+��1�d�$c
ʴS�9,�B�^�x'�l�4E&<~�F/m�r�`���r&�ĸsvvF� sX�
-����	J��R�L���=|ggl@��u+?��r���h�I�
-Y�OXb#EOa):aݳ�'(�VJ0��#�`(��Im�}�@Β�V�˥p�B�r��0���CvV$,���aI
���	g�Df*�w_���|0
9�I�/[��Q42���b.Fa���V�Ϲ��v�+-+K�#�[ eI#V��
��%Rx
-KV�Duw7�Nn�M�+�F38���TR�<61��v�y+�@�#W�$C��̗��@�� ]� "kv�쌕L1?V�ڡ�
-�j������xI��k8#��
���/z��u�&��zZ-,i}7E%K���V�B�.-Y�2�ef+������Dfʥ�do�e��9,4K[� ��G���V՛�y+9�3b0-
�2qd�
_��"ͧE"-o��dq5r�Je.2��?��|��2�13�)��^-c'-���Xb�x),D/p����2G!*sz�����[)z<
FJ%2��s_x��]1|����b�Hsq�d��~�
��e�\�[I/�"���ϖ�����q3b�,�L���笸p|H]]�Qe��L�B_b���u7+CS�J��V:'�b��1|fl�W���x>Х�uY�'�b{?E$�jD��	œ�R�r���;ϼ�
���./[F��y�� �ӏ��2+c~�J��
��
Ѩ9�lD��eQ���[���&&U�����I�x02;#c���؄G/��.���E#�ٸ�OQI�
�_��T#��T�J%�J�%�C
�W ]^��P]�s��x�2#l^�̐�L�e��1����-�u��D��kvK�$�܊�{�r�Jr����$�H��""�
�`j.�
>s�Rn��#
1m�MaJ�2/%,G�Q�j䌕(s���b�\���@�l!�ly��Q*�S^a�d�M�L�Le,`&;`i�W�I� [...]
-L��
�l�=^ʕj䈕d椕�����/5Y�xy����#UAS��{я�Ι����bʚdBRRR���xU��о7�Y����P�ͺ_��	
MA�)w�$7�^54�VW&�KCC������=�W���`�=��$��
Sq��N�q��X��J1��mNXIg��D�V�G��}~PI�H��d�t�8H���a�*yi3�d��4��0=.��/�Ob*@I���_�s�7�E��E���$��~�Y�KR�܊IL9j%u�UZI�"JI��Ȕ��L�pd�2㎍7z�ؤ��s:)4GO��'#ɬ�PL}3�A�vS�^�+���TA���,��J���eK˛�:�&L43#dz��s�)��]���?�Q[�.��r��՜�^Y�o��Q�Ȧ IWPЇ�s�J����BX�l�"Sь������
Ħ|��D�����J
-��	��
��25�sqVx)�
E�FJ���F�bd��:���B'�,qU��d���O�K���%��bEY��Ԉ@~E�M�L��C�3�?�0?`��B(�ꪵ�L��*��m���e7�nޘ��NL�OnY��e�V��K5agF��9��BC�)s�*ر�4��
��H��v�9&�{.��� ��ӱ9Gx��Y-
-	c^�j8�9y5�l�[�o�J�����9Z��+}��?_I*_2^��8\2Z2V<�bj����R%M�I�Le�0S0`f���KN'�7z"�j_H�
fֹF��y�uWS�7����	��[��	��R
�\��q{V��%�6Us at M%FrG&b(�c
>{��+�M15t�R��
8�"8�^���٘�CSq��p9�FPL�$��V�ֳR�:l%��$�D��P�T�m$�.
-g���BE�a
�n ���/e�T�(dj��z�L1!˼�8�a%�	/D��*W��0���B���
a�=Xv]���=��楊�)�"厕��V�
����J��LU/2j(ݑ��/�
�j:6�±I��28)5[�!�{Q�M��d|^�{Ɉ�����j�5e�)�IW1��J8s�JW��(tt��Ԓ����.�0�$#^:\*Z
,=9�'���t�Q�I7�S�Sx)ar
J
-u�FSmk_N`��F�Fb��+{���j���^�
b*ڂ)ǬTճ�<�X��<cD�Ƃ������4�2Ad��	
_Dl
-���L
-�l�y���
-�=)��84�J�C�"��0:����
_
[Q���9%Z?qvZi����<+�����?F�[xJK���Q��zJ�|q�x��B�pQ�8Wrv��h�i,����$gKN�L�L�LeLEL%�
��WR/���� ���J*�x!j���v�_h��̕
�K^ݍ����&��b*�N^.Y��6e%���9�LR㩆�G��+2r(�Ci
�
5|r���E�^�
�y��R��
�m�
�+c
��`��#��C�
3EoJ�<D�#\
�G�b�X���j\�F��Fd1��J
<+uh�V��
��R��/�T~��{/k͗F�d�8]��x��Xə�	�4��fL��LʩN
2Θ6�HX��.���xe��"��L�P�a$OHA�:ۅ�Ž*��Fٯ𦷨���m&�*�u�I�S
-��+]�v���5)�#�2�T���ّ��
�j&�3�������TI��E�4�Kџm�uR�	p�P�bNˆ���~�R�
:�)T�Pň�FPLV5����VZ�[�
[�Q���kV�ZY�����s|���$�//1U�tq���(Y
*1^-hF\c¯4���ْ�&c�R&B���J�%�����6/�c�Z&E\��\��RU6�0Yg��~���1
-o�ݮ{DO�)���vP�1�	+uP�	�J�{ǟ�
�
�&�RR��3"���L����O�_�@l�c�JCW8/9�$g�Э;�S�R�:�zX8�bc���̤���Me�D��FL���uVڿk��J�z���5mԠ^^M��W^�@�z��(_4YR��T)�$�%gIJ�J̆-Z�hɴ2���/��RM�"g�2��O�4?�ΝF���d���F^vh��$����=�W�쮚WH��
,��:�B�P�������]�q������MAx?�*�L9`��]�n[I
�_Vݤj��k4�Z�R5q��h�ّile��P�b�Š�7|z��y����n�B;�z��s-'�N~�$	
E�
�(@�����9 �����~��x�wN��qY�e셰K����Vڪ�4|Y�m�ft�P�Z��W�����3Q|%q�h
��ES%	I���%�HU��mm�v�����.)j�33�&�1� �s�%���S`��E^J줨k�&ꪽ9�
-ck��l�+s�H��s�U٭�7��	��[��]�s;�`^�5+�_��
4�����m-����J���FSG�JK���l�
e 2�ش�b�r�Fϋ���U�1t��+�=l)�f��S��Y�Qd�`�h�BrqTs�p"N�rȬ��qI��q�u;�5��jd���<zx�ne��c�J];�my�U�֯S�fuz�ֻ�}�H��|w��$��T�8]4Qr�Z�9�B%��
:tt
-A��/�lII�q�h�$5Q�dĨs��$�vٲ���Z��
�.'��=Dw�r�d�a��:����v�t1P/���e��ꈞ O����Gu��}�IJ^�~+��xV�QM^x��lY���?�Cc.����J��Y�#�Ќ
�%�HF�]02���3c�΋
�I�ɋMC��
�)�(/%��ܔ����h;O
��*�c�
�T���$���#��ƻZ���Q
{��pը�F�P�p5�I:۬tL[��d����v��hP�6-��T��߱,`E�0=%�ْ�EK$)$.�'�S�Sc׮]��
��9aR�D�8f�2
-�IN�
嶄!&o'��K�^r_��V�N���P)���9���7����̅f�:s}{D����g�`O��l��
|z+Ϙ��7��p�~�[I�m�J��J�]��軈�P���^,-�x at i��)�o��ȴ&
�C�L(6��2c��Jo�B
���w�
�%���M m�K�'���
F<�,xƒ����88ĺZ2�aTCK)x3�_�ʅ��q`X��}����aՃ��Vz�ɇ��V�#+
�߫[�v������h�T�re�~+�7�zJb#q�8^JH4OR�x��L��ѳg�^�z�V���)^�%���%E�r&b&R�!�c35Vf�b�{�rj��2��2�\
-;ɾ��}���Z��
�L�C�9��0����=�нd��0}�W���e�"�7�{�'0'�:zɤ/T�/��Ɠ����;Vj��
-2:�D?:!���
^&�.�T�
ͦVd�X
-
YC��J=����	
�����M

]���
po����"�Zn��,uY�Õj�c��d?M��|��Xs�Z�,�����FD1G�x��7�!-�c#[��:Y�m��l��#��ݭS��͛5�-��Z��WE�%��C��L#yB"Q�D�(U<7���_0 �x�_�~<_R�d�HN2dJM���b���^�l���R�I�&��=�
-�j=��P�P�u�
-ݏ
M�
�\k!_3��Nuӛ��:t����FWP1r;�p�ϳ�J�}+��@t�*�T���N�|v�b5��VJ52b,������R�
<��u�b�ڌM(7r�A/�BWfS�R2)�O�.��u��:WIy�R-�`2����֝��[&��k)����j�Q�`�S�j(QgzxbRê$
�ZR?w�X��J���Ǝ2�w���۴��)m�թ]��}�LT��
wyV��x��8\�-J�j O��
<x��E�%�/E�8h"g=�M��T�\b�hī����7K��xi�l&�]����Fĵ�o��9Lj�g0��T�U����^��S4���M6������\5�Q��{)�r�k�I�J-�Jt�Ce�IU?W\�
��Do��
*)`$�����m���>�������r�n
-����U��d��QёC�XJ��M�n��Y�x��>�L
�T'�|%�k�I��)����e�
`k)�я,��F����!S�W�;��?�����1^(���M������J���
�̘4n�}��Mx�\ue����摖���d��|������KfKD���!<7>B0R2J��'�:|8ϗ"k"h"g4K�9R�IFL'L,�rA/��M���N����&��TRpSU��i��|-��(����!F��[eL�l
-xv�
-�)���U��Gu������J"!�J
�.�Ft�P
u��Ԓ�u��./g��7�z8�&NE���
��z(�`*tl�����G-�t�5x���Iwl�ϸ���k(j����y��'d�s�
�����w�c
u�RM������Y3�CK�~���z����P5�R���j�'�T7w0.����P���K�,���+�ٶq��EsfL
7�
�ұm��W7m|E��S���o+5�$�%㥄�|DѢ)�"5z�1cƎ
;����)^_��RdMM��4@�Ɉ�L�/&�������X���I�[��$��m$o��,�<l��в�T�	����/Uy��*���TS0@�w�'�����P۝p?(\�,�R�n
ճy���>���xۗ�Gq.���e�l1�}=�����b �(j(�����
�k�bÃh��v��WtBV�R:_J�[(i'�w�A�	Y�,2�4�h�wG,�S,j�;�z&.[�Ғ�>HK������u
^�`1���Y�ƨz�i)���;�Jw
?"��IXi���|hxϮ�ڵnьK�����;�k��SJ�|�d�I�K�H$K�BE�I�&O�<�F�2Y|����5
-�����G���Ds��`
-y���r
��I�{��W�m��rî�1�
��<6X��4
��,�.��q<������g7�Lƒ�q�I�x);���6�R��|v�VM:�����Q��.�-��ʫ^O��h⸇�:"���M
;=|����ᣞnX06ݻ��
4t

;�[;
	v��s{��Ӱ^�~γ�~��*Ƀ�QG+)�Q�����UN�>�L
�R�/-%�RD5j�j4(\5�����#=��Z���M-E�hf��>���}Ӛ��Μ2~�0j;�o��Z,ɏn��5=u�m%���$��Q�t�xy$�5��%rE��6m��3f�$fy����O����FA㘱�t�8b����yb��QM�*^�n)�6^�>�QN:/�$׵�j�2��3j�a��^����d�u�gK�c���˲O�e��]�رzv
Mn]���
|�� ��$u/
-�eV��6a%���R�g'��\��~̾\9��R�$T*I�+Њ�F�L��j(ed�P��béѱ���B�t����ڊ���
N�K)�0��?
�ݻ����ICg����!�-p0����>���ج��U
��ױ��O�*D5�yS�C�y�th�

-e���PV:��"s�nߴv��y�,D+؛.,�b�����U�ܸ�����ċ$1YR�d���XG��*��̙+��^�3��LJM�
3r��&e&�d�bj~�l��OY���A���G"b��&-���Ta�I�yd��6֡��u�s�h��3Z�y�,�|���,<���΂"=QS0�*|hr�����'�d\��L���
�a�0
��=h%:��A�<y��z�X��zy	��wO���x�$��p�&N��ۈ�r�?�22�=tl�x�1��=o𼆮��l��v��{��RR��q�����<W�VR��%��:a��<!K
b�ȻR��d.<-'�b��
c�(�)�R2��P5���
-R
����zP=-�.�pt��m�g�J7
+�]�d��nj<�O���ڵiټY�&�M�+o�$��Ԛ&������O�*\�#-r��Ԃ
.\�h1�Ā�{ѢE�b��Rm����ʘ���9a<;R�xn�|q�N#a{)x�ӼG4
^J�I����Jj�tն�T��:ϝ7�
��
-���Xf�/��s��R��F�
��l
-�>-��7�$�Y1��Ye%�۔�fL�g'�wj��x�O��T�����zH�=A
��C�+��l�F"#ƒd
�%j8����7��
9|����3���k&w�+La/��n[),%����=��w�nf�EƇ�ɣ���e
L&��oH�8���D\l�M 	�D�І��ej<��@�hi
�#�d\64%}��n-e�J"s_�����oܷ#�J�Kǎ
2�o�n�;�m��u�_S��oW^)/�ˀi%Q������*=!�yRD��%REs���+V�XI\�A�%^]�|9͗"l"i<MΑn!㌉���Q%���D�hn�
&����R�=�iZ.%q���B�z�u�Ao�v��|�2������+���*f���oU�@ٹ+�{�[`r��W5�$�DQ�/1E�ו���`g��n����N�n���y������=�� �L�
4���u76
����\a%ƌ�r
?R�
>)'#6c���[
VCז���
���_�Iy<$%s�O���Y
���V�Yd�d���ȼӕ�|����d�}�SzI��rOk����x�$�f5Բ��]����萬
�j��M)O{���E�!�2���
V#�V��a�W(s��vn�_�t��I�F
��_��]:�oCZ��B�{��J��Qϧ�D
7|"^�.�El#�"iz\�z͚�k׮����)^\�f�j�,E�DЖ�YRt�"e2c4AN/�GJ��A,&��:s�'�0�璼d���˥��RTP79D;)��+�IVW�+��s����ً뼆�L5����,�jY��IO����694���� -��jv�i���sP!�K	�K�~��"+ݭ��b�\�KuȀ>=艾fM_!�0�2�U5��W��uǛ�<�JI��@�^�����K5�vd��������
=�Wp[a7tj�A-��F*;��Xu����
/
�,l>�(�7VRG+���1OX����Xy��EPK��Aqd>j
-0
�o	7�TSV�
-���3�V�/� ��@#=JI˹Pn��;��b)�V�ٴ�S�=x���t��-�W-[(ZA�ݡ�X�؎�$�n�����x�hᵒ�}�x��R��tDѢ`�Lmذq�M����7ۈW��6n�ْ�F9[�B�I�LdLFl�J؈�RL��s�\0����R5s�㑺��R�IQ�we��C����
��x�dt��
�UYj�e$�
--�E�5�*
o���d�n�׾?��
-���SD]?/����J��VZ,�4��
-2~��
�P�%����]

R�u'"ӡ#m,�*��Dבtg&�%�(4�r0%:74|i�֭���{:
V��Ѝ
7t�:�S�&�+��x�K�x��7���0�މ�mdJA_�߾#��gd��JƁd�{���	$��P�%5W�3�--����#��n�V��Fm���q�=�U��Y
�6�	 �{T�7/�VQZ�;���v{�A+�IY��wE�N	+�CVڵe�j�5|ʄ1#�
�۫{W�m#������Jh�5��#%���5uڌ�
/-$�'�
-�`�S��nݶm��
�N��۷o߶m�V�%��INي�1� y��K&%&�y�Ԟ~T���R�C��X.�cϵPJ�$�
���Z,�x��ä���ThY��ʻ����,<�]X��8�Oo�C=���<�MT���d�b�ҹ�������ާ���L���c�Ǵ���]��F

ط�|������	>�W[�Ɗ!��Q���Ƃh1��h8�L%#�%�1�4�[��ԉ�CgĆ�
o�do�R�
��x�:

��i�j鴖��Tڒ��ɥ�^4��7���J��J�8������J|��w.='ܝf�z+Y��r&V��@�.��B{��n+yK%G5r5T��j�I���j���Ϧ��Y�����d�k�\:o�˼������}�O=��C��q+����k�&<��4�ZZ,u!-�SК�+q�05cr�ǫ$�$�/ڂ #����%}$tDɢ���={��ݻ�����S��g͗4S��6s��)2��s
'L̎$&��]ˍ_a���Kꠤ*����-�	�E��&X(��2J']n:)���0�=(%ɫuFW=����9l�Ӳ��w��
-����9�!�[U�+�N1ñ���M�)0�ɦ@��b��AF�];�K��`
˥�ZI%�ߑ}[���9E=�ב��C�ԦeMy��z
��
1�r�#wq4�bի�$�S6q
�Ȭ֑cJ#1^n85{���
�I�<x���_�ɓ
&^ixWf];ॣ�K�;��yהxm-
�jt0�q�GY����h������J|��:���>Â�qv��K��G�_W��d�һ��T�^�U���ԥc�,��1XWC��O>�A�|;
���Ȓ������u6#{����/�J����ӏ?t�
G
ؽmӚ�K�Ϟ>y������C���	��S��7�ɭq0ڸ�Dӥ����FZ���JN���ݔ+�

8x��o�Iq��!��ċ҄Ia�K��6
2�11A��h[B,���hKb-�z�����R#y$�
W�Sdž��|�t�:nD�
^��[����[@[u%[���u:��q��!H�`����nw����ww

�W�N�I�}��U�l�}�=�by��c�o���{Mj��Y2kV��AC�u��Zǰ�
�#�� ��Ev�LvV&�6=�Ꮷ��'�����������~pk(� 
L1�'�D�R\��?*�%T��Pi$�T[5�_�ZŲ%!`�'�C�H�D�^�sCq��b [T�8j,$5m���$�;��yLzKyJ�e�9��v�/�:i�!h�^=^(��㔀���N
0[/�
�#˥?G����°*
�j4�h^m�5p��DrdZ�,��`U2#��
-$��X��Sp$No`)^ ����S*k�x#����y��)~)����5jhk�ZXe+�Q�6g��T##`���4A����=�ˎJ_}B%:�7i�JAwh�^�J�� �Sq
�ǣr��1�G�T�Ɲ�����_ݺ����wi�Rp�Rn���3gΜ���އ?Q�ƌ*\R��0I^��
>��? 2w�L
L
�S�TZp��ByWF���l��N݅���B)�y�lvkL��)���H��*fZ��d՝u
��a�`�)S�YC+�Ρo�����٧��'M� �pp�L�
�o�� ���$�G<y �K�j��;h^nTz
=n�JSƁ�څ6��a��H�|�Q	������\XZw�⤱��Ԧ-����~a���=�u�9���m��M��cpɯ��I#����BBǎ�t��fp)����K��Y���q��
ù���OmX��#9��nH��V�YH�Db
K����K�J��т�*�������#��*-���M�^!�/�yD ma	Y�.
���2����o��(Tz�䑃�v�ٿ*
ҿw�N�Z5kT�V��˕.%+� �Mc,˖5e
��$.��@׮� *��]�G
-��Y!Ul�7o���
�[(�����
��R9�4'�cp�~}{�Bɤ��r0jI�C�W�b� .e�g���w~��P����1����=�5*uhc.���Zb�P�'k;τ�����а��-R�����dw2�l�(+@�:��	Rp��i7�QU�ԸSu�n�x��%���	h���’A������R���׭\<�B�!�h&4k�d�!�7wN�3g����9�Cq(L�;�hU��$u꬞S�8�]�p]F�e�)��X��|>�z�&y<U�z	
:
�u�č<��\�|"R��)���ߩ_�-���} =�U��MՈRE���8�J�V�/B�Ldɰ��u��
v�K�5,݉�W6_
�
��R���e��!:[C#4���f��EZ�F#�6U��b����
+TP�Œ��KG��
������J ̄P�gN
=�o�V�
5
t���[7o���j�������T�ާp�;�!I�׀��H*T
- �óc)�B\\�x��-�>���73��)O#t�9C�
>��B&�%� :*kG�Ըa}�%j��,���i����V�}t^��y�7Om$�I����Fu
�
-ER'7�
"�?փ����bh1�2|˽��H
o̾ ���
*����	n�r?�����*QēlL|0����\2VdT���G�%
-�Ə�܋6�hϼD���I����e̔)
�}U���$/�$�
��I��e�-F
-����.��N�^��fE�
=^���7��53	�~��|\�
�[�R���$��a�V��Ϡ�0�5�LK��
�,�[9�������RC��P�T}*�\B� �t�m�@|��D/*�)\*q7�6":�5
fk��Ѵ��5��TB� �)Gσi��j��jG�%t4y���
74/*}gP��W�p�k� �
طg�m[6mX�v���%T�|L�O&0#��!����%��}�J$£��F��U�+V�\�rU�S�rŊ�����hN�g��q�T�Qy�*���#`RI{�&4a�θT��
endstream
endobj
322 0 obj
<</Length 65536>>stream
-[�fzP�x�t�v��J�yw�
�1I�yB��
��8��Y��P
�;/�y5�5����
/f_
-|z���7�&������Dt)�8�΋
.���`B�t� ��ڍ>�3/���IP��Yˌ��.&U���&�1
;����?]���e�k�QoxJ���s�&�|�멪I
o� J�zZ`BBW7�g\�&
pJ�|�
�\�*Jך�

��
�0��Q�w Z<FZ���V
-ɑT�D_�9�	[��C�__Ah�8�$��n�(�.6*9�;����q�
��"��@"�h�Ŧ�58��IoVb��G���(�䕎�����E��>bT���֮X�`���c�J�խc;Kuk�;�+[��>f�79%��2�!�w_@���cƑ{�P�I��Rx�J�Ԛ5k׮[�n=}����t�ڵ���ה��/�N�|�\l�Xx�#*�n*6¿(�{9��L��7��Z�R�(J�3K�;����=4�:�iZ�@�q�ư���
C�����7F|bz1��}%��R���n:��3�
}T�:u��d�f~΍T�����
-��}��^Tڲ~�r��׆�����E�Y+�'"%�
<��(7
$��
5z,�̴��,3O�����[����F�o�u�&�W �P�߸	�)�\\�m;��Y�	�K��������{0S�0\��c��O\ao�0����Y̢��V
-��&�V%��d��v#���Q �#<re���Z]$T���!�;����XC�:J���k
�͖�5�
m���N��䋥i���̙I�D��B�PIa��yiP)�s�J�}�P������.]@t�!���蜤��F花
*���,fEgr�$F��¥��&	"����[�#�T7nڴy��-�m������͛6Q�T�?Sरi��1�L�a�ؿ�c.�B^�=�Ku�r�x�K)J����8����y����IɒU"M��aȧ����7�����">my�}�}=�	�
IA '�����������-�v�
�\�BPF)2��A��=T����W,UB��C��N{浪UB
O��yힹl�[�J���fP�^�6 I�+�?�\f���-)(�]f���nc�o��y=�+��n���qJ!��K�ϘA�$��.���@�P
�}8��80Z�I�
�M�;܅�� �$�d�G�WŠ�Q��	g]���Xh)��jn[�IF�����EF%�
-ׅ#Y���9r=��@ᢰ!��;[C
M�d�
=
�6�hc� �Bi���Ye�[�tD�1���J|��4�c�_�l!����۳k���[4��ju����"���j�L�� IʿT������ $��$<
N�m���;v��)�.|���?ݱ};EKJ�gN�M�c�b3g��40
P��'�
�Q���%�]o8
].�]��g��&Z(�村^��T ��AסU"��1l��a�
;og;��w�>cz�};�}
��kw�n~p2�
5b8���:8�Ț5�F��K��Fx;3$�kP�X�T�B��"P�3�3*��݉��&�
��̱:Q���fnGN9, �1B/e0IZwR&�*��
-ht�kz.��]f�}�
�a����}>I-�m��]p4���N;��/�u�uJh5�R
LW_���L��2dD΃��q��=����lj�
��d=��׏T���YWh+i��gP��
���m+
����o�@|�Q��w�}�2e�&�T\����L��3l��S�F�~Vl��y�Rf� �R�3彺̺t�\ynh��P�
X:|@��V��r�გ{w�ܡm��MQS'a�c�H]vP��2Ʌ$�_s�FB�d at R΅0	0�O�޽gϞ�����g��B��@������l��E
��M�
-`=R�F��ip��%H�¡��=����Ki��%R(i��
�� ��$'~����
$���ZI�H
ð�!��y7���Oߓ��&�����*�m�v_�s�enp��`�
�%K+O����<.�L�"C:c�K�Jv��Ҝi�ȞyS�3�nvdd�<7˙ю��I�I��H�
��I�Q$I�\f�u���2;���ٿ߾]�m��8��n��
/2�C'��{�$���z{h2��%���i������	PR��
-�UkԪk�k��1�$j=��"I��(�@#J���
u_E��( K�j5(7[ޟ��ݐ���ᩒ.
��
-��jk4M�Qm�D����

-HW�ڑƟ8�̧�bK����F%H5|���Ϟ6q�!T��)�M��ԓ��o5�@�}^�h��Q�$�`
-�T�T�E�R�� �r.�I�Yp+�
����_����5�3'r�
��Ŗ,V
6wR?&�7���]\���6�%�{$��Rja��
|(�(�x�$X��
�����HFr���j]"`�C�
c�'��dߧ">cxkv�}���?'p��TU2�����n���ƥ��w,4��G��ڗ�>bTz��QٝX8g:���5�Q=�� �U���5�BvDX��~R�e�2��8I3g�s�eV�.�#�e>�����i�YGy�'̷	� L����ҁxF��N&����)�L���>��]�
-��*�nHi��{� �@�	�����d��䨒
1�(҉��fp~^�,��zxR,Q �RLO�xJ�����TB�kdV�ȓ�A�B�j��k���b��iI���!��}Ύ��Ճ֯
�.G�f,�e�
�-�.	*E���J��L��B%
'���6�]�d���Ǐ���
]:�o��*>�
-=�M�]NJ�9d���1��$���e+V�`��K i��r-8������h�����r5�g '�&�HA&�0�iSTlT��
-&{tsp�F�ʨ�
�l�ݣ�x�K���߽s
���:;P"m4��iL��]���C�
-a�U/���1L��
-a�E�!�3L{����'$�'��ٵ���9�nK(�͙5�|�l�j:y�����K�����ѨT�⣒ޝ��>�gN�'��D8�;������_��$¤�
T�Q/�2Ʌ�
�s�$��2��.c��u�|
-����Q^�
O�ynBǎӳ;7��d�J%���w�wy�Y�\���k=V83�п{؂�
-��5�o�c�n
Cx́`ƌ%=�(u%�$#u,Z�A�4���<��O�*�b)�»����L��n���;�F�Ju�
-��b���蔬1N����!Y��h4#�Z���@����#���u�^6Tb��7P�
�5Z�J��o^�j�h�A�ԫ;`I�
�]bc�aC��ӂ
:w��Ie9���U�׮S���k�v.�


�B�'N���(^���g 'q2�L*s_�~9�i�L�/��
�O&�i���.�TU�?������(�C�?��B��B�i�et�F
-?f1�N=���ك�$��Ik��62��k;3v>��i�?�[���ws�͛Lp�>�*��O#�&.�L#O(Q.����

n\
$_hT��!�M *}���][7�=��ɐ�o٤Aݚ�X*K�$[]���Y+�l9
�Z0&���Y�i,0$�Hr�8r�}�-�.s�~�m(͐�S�t��F���xT�RB7�I�T�$/ס}�ip;�/=dZ
��,�ӵf	�-��?���(�+Y�<@�AcU�A��|�Q� i�G��oM�4ɕ}���^j׺XZ5K%����L��f�V
����ۙ7�r��5��jk ���5Hj*EkLq$���^���bԞ�nX�TV���4g
44=��ˎJ�tL�۱e����Ϟ6iܨa�������M�4�kͬ
-�4e�,I��Ɛ�ڴY��NF$ �$\
~E��i�=���OS���)?SnF1R|l�N�b*sW%���\1����F^�~�5:N�K����%
-w��%��J��#
�
�B�_��5���aRE�$I��$w���:.���`D�Iס
�`�
F0�i24
�,�y���ޘ��7�n&�v�����t�[�xB�V<\�™�����[0x
��vyP�n�ɞ��!�Aw��I���'�mW
�)��c�f^J�V�0&QYЃ��E�LBG��"�����
�xJ����m��N��!�;�͎�\3��,q;
H)�r
𲼐�?�d��%&%�?�JR
`�R�t�J
J�4��E��Wy�xWr�Ȃ�d��g�|ˏ�~��#�R/�b
-����)m
�Q,�Zx\
\uQQ���F�pD7C�b%�(kԪ۠IsXm�Ak�S�%l
gߝhH���s�fX�P�X�t|�'0�Z�}�
�~eT���tL�ۻs�Ƶ+�,�3c�*��L�ӓ�1|�T���2Me7��2��!^�p�e�J��^�]*�#<R�������Ͽ���G��F~/c'S>��k&�L*����	���B�4n��^��&2�+'�/������R���~���;�P��݃ZxEth�NR��Pr�NN�$��fZ�RP�l
�O����v&C�����3��.fg���v��S��I�Q�,f`�n��'�4��D���u	S�ng��`��c�G$*5cTs�PI�m��ѷ��5�:�o��I�~�~_Ă/A�m����|��`R���U�=��$�I(��F�r��)�s�n�<%H�lFG��	�:/�#lj��5
�bNϛ�R�mΧ+���{��/�б*U�bU��
-�(
z��y��s�E�JX�W��J��A�QE����6�
-���]Q 4kT�v
^&�
�
-�4���i�]s	PIȣ�˥�S
�W�\��5��5z��;t�ެI��֔lL
��ه�]-�6�[�ze]:�U
�=�����D��s�ͅ��îm���7KK��,�8�-���HaP��O�I��4$�ڍ`I��B�T�ׂ_qd|�+�G$�����
NF>�\L�GJ�U��O�F����&O
?f�J��IY7U�J�Dd<r-����*�����_h��
S�B�4��ჃI�8����w�I��$��Y5!Ҿp
�����bg6��5�kvmw�h���}T
�	0�'*�%р��%Op#�܈�'dAF�Q���D%��{C6�v��?Q?���'�H��"+V��m�J���*�l�K�Ƥ��%��Y�!i�.�b�̋�.㺍�<R��m���'t+uB���v��t��^Œ�̺��KL�(
�
��t��V�R�v}TJ�$�T�L�4D�
-��dK�E]i���:�#�
�\��\�By�0�
-�d��;�Y��ҟ/*i
�뮣�`�)���� D�n�A��}��u�
-k,k�ӛ�!��E �
j5�t,�(ctz�ѷy�l_jT򆹟	*����4Xڱy����bi��Qx�$��C��h����ʹ��>S&)۴Y IEK�^ʻ(�o��ȫT4|M}�G|���(X����8F���������[M���8m
-�ʙЍ�*Z���P.aw�t�D�БN�p;8����J�y��;��7����y���$��qs�j?�iԧ����
��I����R/�?���	��l�@��eNt�']�K--.i�
���˥҃�6�D��o�=sQ?�ܫ['Q?������
Ʃ`t�=L�#Y����xO�+��<p���[�\�}:����pJ���6����	�:��!��F�0�ip:�U+q�/���==N�p	���!�����R��w��תרYKJ�{�40��
,�h9��+V���#Ӫd+H�e��� �=U/
��w�LriukQ 櫌Y3gx��R����
<ln��:-Q�B���
-��d�`��j��;?1k���P�h��
H��ҌdԎ"iZ�bْ��b)wNK*�iNbh�ҢR�bj8�
^xFy
��V�X�>y�ؑH�H[����۽Y�N�
�ƛ2i�f��3$)�2�ŀ�|
�E~ő�|o�����4���d�ZdR
&������(�4���5Z:D��FwCe|f�d/`�%&,��yF���z�
%����4�@�+]�vY4&�iϭQ;{��Faa�5�a:�9v~�1�[o{�[��٭�_��	�����
�	�����UI��񸵝ƥ�ws?(���s�	otW�
0i� ����J�Gm��=�uXX��ڈ�	ݗ�@�A���;��ug
*�@ͫ��yM�2/3yOi�u����<'ns2fB��S
-��;��ב�T��JE�i�;�Q��ՔJ�8����T
�*[�jͺ
�(����H̤���)�ޱ�E���#Jq��+y� �g��< ��Ԇꃪ�U��%�������
\䧻��{�O�1kv.�J��T�f]��.�{'2\��$۬O�F�M��r,L��i
�҄q ��>��Z5�cy�!�b)k�59
|�����;
��Dw8}�Zx\,͝9m�v�@��a�������iAi�)������b@"�0�����O��;.�������idR
&���;y�ƍ1��a��M�B���p+%�(,��I��]T�$�;&9��U �h�kdh���ԡ{Lk�8����!,dgm����3��8�06�@LOI�>�10�s�i�4C<�𹻏KD7f�̰��-a҃z�kd�/�ܜq^tT�!b�|ǖ����7^�OT�ą`u�����t��Y9�]���$�Ӎ���
$
��+�-.���F?߫a���-�Эt:����S�ʆ�j�C��w�P��� ����u;]
`������X5i�&�s�^�"
�I�j�ZQW�,�J[c�+A���GV
-��U�K�	��>�@L�R·�f�,�4Z-�K
�����%�B;��J��T����
�����X
-LB��)�bY���<h�2I�&�R��m[�x��eK)�Λ��lY2>�m��8}Q���Q)�F�$<�;<GK{vl٠��E��̘�`	�:֗>l�YY�/���2I
LC�v/�J �9����������R�r3�d�&��b���ݍ���>�K*]<@�>�7nX׮{S��7��Jb��(�w'�4w838�e��P;�47�4 at z˓���j�5�d�Գ
�0�v��|����kw
-p�lN �g�#ۣd���n��>������F)�����~�Zw�z��	��'�>V���/��u/�Ѻ�'̻e�
�&�q��,�
&
&M�F����؅�
ޓ�S�
?��#v���.��9^�<��t�	$t�q�>CwL�R����Z�'�Gu�K ���E �T�:��	x\
�׺}�n=�
2B��)�g͡���u�z�
-���?�����
-����d�¥��1z ,!chմQ=.�
-�@,|.�`钠�����ڙ���J��5nk(�
:|4�F)���l��=�5vhkh��U+W��ל4~,�R�.T:֮Q�|��E�1f
�/.*��*Tj�'�`陓�T2�k�&U,-Y����N�%lO
�>^5&6Ck5�;.����q�B�r/�.�-r,
?��L�dOcp��$.f��CTҎ�IEF�K*i�=��~�D�dޠ��m�z�?��ċ�I��w,���R)��y��5�3�
t]4gԘ��ك�=r�˪�1LBX������?�v����	^��1U2i`ڶ՛S���f@��%�~��"�9E�>��ҵz	&�JY/:*���o���K,9D'�ϟ5m"��@*�
��@���H���f�KI�a\'Q���Tgq��Ր�累py˘.c��y>��P�F&t�81;��R�'��#��i¥�I:Ӵ��|$!S
�cճ� ����P6Yd�[���D~���k��^�v�
-x�\�M䭖
]�6��R�+���g���N��iu�%@%�V�
<`4[�8��nf��]a�
-�`���ts�ؑ�5 5��(�0;vesf�0����ɽ��t�	54�
��٘���
.*��Q	���פ����-׮Z��`i�:Z0|�P��l�b-��$'�CĄ�1$DR�;{|�<K�'�}�~�g�H�$?c/SN�|
��k�a�`ǎ����=�]\�
PE1/�>0Ey����,�O`��b��U�c�]z��$�w(U�^
K�����0I$��a�NwZ�"ҫѰ/L�ٚ����������	^���8���i�0�D�5..!��1Ӻ|���>�ƥk�f捂J�\lT:Ǩ����t :A���*�
���m��	�Xӹ6�l�Bd�>�O9�{w��Ɠ�Ǩ,�
�np���
���7��������:�8�t�!�.�Y�G��n��.��|�Q�>}k�V�3�;o���J�E��������$&P�9G���m�b����RW2�J �
a��Y�*�-"j�B�[����S�T�D��
�4XR?.�<S���T��ݡ�
-����?�b%˩_n����$u�ѧ?Yc�a��H�5D[C������6n\(7$�Ǝ�4�;`�74
9
c6&���G{qP)�r�sf�����`	-��G�B��y���KQHj2X�f	&޼6�Bz�d�>1�`
$�{�PɁ�%^E1�φK�3x9��1H����`�F���� �Ə1�ʥ.�JV��J�:V
�ǣ`�T�ҟB��v��p�]v��[�|�
H�6i�K�Ի
-��$��仭Q@�I7�ł}�`A;
���w�����	ޖ���A&*��0c2s
-�vOg���%��Q��� 1v7�-��)ۙ׉Y
T�@�n�� !�����޾i�ʥ
�Θ2a�������ma�s�AԆ���h
%
�J�I�I&�Se
R%����{��|
�݆�ۜq��lBG��c7�4.M�>
w��VC9����I.A��%���.���^�|+^�(б6j�ĩ3���ZC����
E��
��Wm%���e������W��ı�>�'��v�J�J=^�Zx�H� ݭ�
}�PɎ�hȆ
Y�F��M[��ԭW� �@	^��!�X�	��IM�܄$c颅*
-N
?z83sZk��Aat�
�k�S/*��*Tb}V
���w������غi
���_Ǔ��8Hr��]N�F'}*bR��xI���y���8���>+��hB�����ӧ�_
.-C�Jm<S.!�#תd��s����ǃ�
-�?�cg��9�
](,,ͻj50P�"��&
J�)�g�
�=
8�!�k�R��N�;vC�a�O���`p��mt3�J�Ҁi��K�tOc��*%�.7G�z�ނ1t��-*=vQP��JrʂH�O��
K��Q�D,Z����t�[A��l&�y�T���-�
I��e>���3��q�w���9$t'�
9�u�dv�r�q����ukWg�Ӣ��ǭW�o�z����4��P�j�z�T�ԥG�CF�%PZ�°2��}�T��x�JVK����o'E�U
KT��ݽs���p-��y
�`�>�[ѡ��J�hT��n��v��fϙ'?[�c�]z�
8t�؉Sf�Y���z
Y��k
N�,����o��_U.-[��s���ܫ+�cծ�.\ -<M���t��B��e���
���d��gO�P�Ҿ]۷l\G�0��O%�)H1���9��4"��!b>��K�/
-�ʽ(T�s�cQ(�*�g"%�;�\
ɟ&���G�(\Z��yP6T�'
*"6�[�
��ʴÒJ1�w���I)�
-P����$]ߢu;��7�`�� ���F��>�;6�}�ư;
�e����� � fLA��R�E.��:���:�Zd�z��
�Ka-�c�n2���b�ҿ=T��Sr�e���
fS
-*l��ۉ�	�OZ�<N�.,
3��ISA
2�$Y�z��ũ�@�~Mq�O��
���p��1:����BZ
x;�С�G
��N�BDV���Y�2GI.�������4�+U�R�ژ*�R	����Fm�z��ͺx|J��Z���V��X��uL����ھm���+X���Q��|����<����wޖ��З���^N(�X�1�0s
P8v��֘0EY��
�ؽiK"�x�v�i�K�^�XvnW �jG��Q:�G0�0�HA0�A������(��t�Q�K����ґCO�٩��.�0sI�b��i���7�D}�'Q뎓>v0�_p/�p.�-�Q���l�d7'#2�����؈V�ӧO�{Q��i��U'��o�#t-%�,&��R�&^lX�?R��
�
���wu�7"�z�{��I�B��gt
�dժDr�
a!;��
o��>2�`��x���b�D
��+�Q�l����Y�Ըķ|�ne[.*ɹ��xu
}K��c��Oڵm�F}m۵K�Ŷn,h��Y4;Y�a^�=�e��O�˄�拰�D$t�R'/�_F
p��"�ў.-���.�*�.)`R߿���U
�
���Z��ܣ#�M�6k�K J�*G���;Q�pt�\q,Z��j�8�{�o�M�Z��!�����6��[x�,��
-]T���!;�u��s��֠±g_t3'OW� (m�� ��Fȼ�����WR�b�*�֯Y�l&��0�L	T�9�gΘ
��[@I4�[�
�
�H���G|���G�D9�dp{6�Ι;�/7/[�g��I�u�$
�����k$�.v.�,	��E}n�7'S>�.��(�$��"#
���m�(]�9�x��G>Ք屄�@��L|̇%�d�B[J�HI��w�B)O�J��A7��@�+�8Lr!_�
�$���H_8f��A"׼�{_���xv7���D���W�覉'
ވ	$�4~�nt�*�Zp��)���x�K�jf:�����ӂJ1/������&�U?��	��_�h>��1�����'
��ׁN|�eM\Q�
-�ʊU�Z0���8�I���.��T�y6�e"�2�m������N�^SO�ס�δ�t��I�U�A�r��0)L��˘�:
<jY�hۡk��A�8�:s����	�v���!���PWzYĕ�
-�nC�C��Qe�$M3^$��`�R�'��m�J�
��.�{�iD�?3*]'���[Av��R�|�G�Z���M�J#Ɛ5 ћ��5T&z��޵F�
b
�-��վ{w�ئr�K�Go�P��ܔ�lL����'ʳ4��C��S�J?
*Q2��p��ԁ}�1�d��b:�=�����J3���q�Sz�YN���8�#���8��/
.��,4id���5�(�#��A��B�K��@�)d|�qoO3ƅ����?E������}
J$0D�����O�;!9
ֻ,�I�A���e�nܝ9cQߋa_a߳�)|
J9I���u�n
�10ɜ�%��oHpi�$�g��H̆�	�>a�ʈ]������<�2�8��P�ô��^��d�;@V-<�ǩW`/����Y}]p���q1�R?j ���M�!	��iB.�v��
�
��7�{�Hy�7�D�����Yh�Q���xF%E�x�K
-�n��f}q�~V��h�b%m˪π!�TB�j�*��
H
Uʪ��BYV����g�,��S��ٵ��-��9v�����u��'��x�t�]��&$�K�J�$ɽ�̒
]�dيՕ5Z�Ю
-GU*͘3�rXcǮ��
>�p��r|�5^�

��|r��[7�_��#�9|��y��5*�/M�c���2�ȒJ /+*j�3X�b�=.��{����O2,��c$�Hꀬ�f-�A��,�q�S�֝-�>4��݋�K�;ӏ1>��������
`z�=��}ʽP/�w�(�k�K*U=�f�]:�rs
ر,,��'�#a)%Pr�o��w��#Ի���T��V������ҭ1�2H³�$�D$$'���˳�O�ex����6��u�U���Qi��i\�z�8��s��2]ʧ����?�2�p�
v
&M��S���
��jr
��\��O��M�;z��ѣ����u2�OF�ҙ���c�|��$�3�c>���<M.t�k���нe
���s��
-����,����JE��j(⸕�p��[�䲜���򕩁�ԥg�AèTzb��5��,*�0�CKZŕDK�G8�_�����A F �1e�7�=&�,�lh����ѿ�咡����3/����kֆ�1\�J�߭\����8v���)[�MZu�
$$����(�uӺU|�h��!t�E�z��T(�*G��f��Q���uaP酴��7X��	��%���b4�k�+�C��r��5��Le<4"8�s!I��v/�]ֳ~J᳞&^FN&.�<
���

	��D�X�CA�.
�����O���8�%�tuh���;Ks�
%�(ˡY���;�m
��N��e1I��=�+�61��=;[C���Q**���_�U�xB�<�K�=P�m�A=�tj߶es���
�
�������`n�լ} �J�E�7��>��O���5��M.�#p�0�_�>��ק]�
L�㵸�4di�o1I=���Iܸ#H�"�e~H�e<��n#�SoG�<*��~%��
\BN-Hd-�Qĩ\R�}�nS
`.��ɏAJ�*5�5�^��#ƪRi����o޶s°���||����%�J�J�<�&�����S?:K;��Q�j��� ��n֨N���Iӊ�
����B%��M���
zͮt�*5뢝٭w*
�(k�Q� �V����X�X��)i��K,q�bi����
X����V,[\W���kHx���@%��S�қ�����Ϝ>!1]��Iq�*�?�ȴQ�A�Z�����`�$
I�^ƻ�ky!�g�"#�#-2	0}*��y�
-���C�����4Y��-����k#�Ї�`���nX�ئ
aR
�Sb
��hs`�_(
���$�
/��ޝL�ʴ.8{�ʪð���)~v���r�� D<9vDpi��%�GӺx
����<��iw3��Ҭ�����5v
A
�� H�HZ�&�~� &�
�UB.��B����6	
L���x��_����i"kc��Z���#��nS�ҝ<U�x�ժ߄xCG��B��ڍ[w�ُ0��b"���+���{����W)�:~L!*D ֬ą���F��y�z�;#�CFh���
7*]u�P骫���M7�84����֪��8t�)3Q*��5�4���1^��a���:!epA�y�ݹ}�\q�8�Zx�[7#�G�b�;dˢIx��'L��d!nG�\�
�}�����j�S������J�m`I&
���4e��
g �3�<����v6�e�<`�b\�\�JX�3o��\k�!����Wqp�1���ٱ�ʡ�ҟ"A�
:�=�����c�J�BIXļ*B`���L�B�=�s�$'��1t�mw�i�'����ON��>���i]�\r�`��Z:9��·*=�!s���J�h�&�M.Z3ߴ�hrM�
�aC�

<h���
U��hD:�;��AL�5�
I�A�9��KF�͏��D&t\0Q�y�N)���ҹ5MdUI]m���K(�.�~�m� J�h��X�)`�
>f��Y�Tھ{߁��Jv��V�"(����'$L}�9��GX`
-�M�0j��>=:�k٤~ͪhZ��R���7���^�h����6m�ԙx��Q��ݾ����W��5>t��&�<v��*
�ctΌI�F�߫k�6�֭^�|�Dž(]�t�ެP�o�~H�������0YB�^��a�����V��%�ڭ$Pe�$��I��LHbD�����#�K�}����G&q0J�"p�'~R.-^H�9H�w�.�<Ć%"%G2
�/ N1
5o��Yӽ��-�:
�w��Z���4&�i
1H�*鳘Yu���9�
�87���)
L�3��Cޭjֹ>����OH[0��g�3���3y7S��
<OT���J?�Չ�&�*��-�����Ǝ
5r���Æ
>�����Q��&Q�7�{�I�~�Ğ2
P�����&�X �ʋLf�M
��������c�.A��t�
� J�-�
-^8)�� �uR�^�����p	�J{�<t��)J/�dZȈV�"�����j�P���#��޺a�
-,��<�ʃVM`c�DQC�SU��o T��"��ՂJ��t��D�S��^�:�ѡK��!#�u@�	�x
-�x
�xӱ�GF�%`
�&=�x]ՎL�>�o�6^���1ۀ>,5B�X�qH�e�
-�pZ*���u�Z�>_T�4���L
O��ãוJ��9:
-=Z|;v�;s�����8p��e��$��o9���E���c��
0!6�q��z���ʥ�\.��7
dA��

P�K�K�� ���M��仨��t��@;JM�P��1.6��.&�5{B������_��C�-��s��G<qpi�VbDJ?ȶ�D�]o��`�
p��s����[�u��/(*�?�~a��׾&׉�O=�w�6���`M��cnj=z���"�%��
�XoD���
�`���>�Y�7is���%�6?ߎ:L:��z� �y2��n
-����*����O�r	����λ J�.Ȧ�J�4jަc�����7�eT*�?x����	�X����f��JZ��Xg����C�T��_�����^8w��#'��ԺY���+�-Y�P��g�� ݣ�䨄�*�3fΞ3��
FW�ې��v�ԙ���q
�q��ɧU����V"�8{�M
Q\�
:5��{wl�H=m��a1Xj�����4R��d�$=
-*�t�D�"^Aj��A�v�������I����{�JE���f��A&�0�`���(룊���h������Ńg���vt����
X½�t����k�a)(�v�g͞��w���S(��
q�����n�I�Ac��H?������_d��N
-l�-� �P#�F�����"_pÔKN/p+��t��r�^���\���
��V�FI'�Ҥ
�J
5�K�Ʌ}>�.�/l5��0a��$U&i-}b���U
����w�'�	fq��L�բ�����q�@���'x�o����u�CdƐ��Л�I�%|� �85��R�V��x��/^�f'N?��K
�]��'�>�U���ޣ���)��mްz��y������V�;�,&�C���G��z�5��Ѩ�/��*�7D��� �c%e�i��/Y��
-ǧTI�,A�[�$b�ϽI!�2(H��GCs%��
>�(�MԪZ�t��
-���P�L��~�4*]sQɶ�X���%�܄��~H��'�ڃrCᔞ�S"o��I�����e�+����Ɍ�i`���Ko��*�V�\�VdС	5�E5K�
Xb�
� ,�ڒa<\��?�%�R��R�{G;J�P��;&3GK���촎 �F�@�'�UbX�e7_����C&7���$s
-i�q�����9�S.����ɠ�ʵ�\��L(�:6�p�Q�?.*YM����G	�.�A1�pkr�A�3gk�H�\�%��5&y
��~v]�ߩp��#�����Z
�EP��S�:z�6z��p
�eɤ�%�ҽ�(L��>��X�¡�ݤ�
+M��@ŲM�v�S���g�WxMa�m	XM
_�K�
�zI��W�[<[7�Ey0u��a�t�ئ��`sz�_�΋�J�jT���f�3�<Bb��-۱5��\�j�&L����5^�5�K�_z
Y�%�[ݳc���˞�7cʸC����<�
��	�
����t�eA%�d�%�RO`I���./�?��94'bw&�w0I
��/�^!��=��e.29�$��q����ʥ�*�P�Y��?d�\���(��X""�f<\
�%��5%��%�C�9Kܻ
-��1͡mR'[(��
�
�7�c�[.�$4{�1 �1q?�����נ�1�d���n��}�4�D
nXZ������k9��r�M7�����%9�,[	��&aT�5yuP)Hw����D��$��?ʼ9�ɥ�Z�k�>4�UW��I/G`��^w.�.v���N���áN�$m�
�<"���C����2\r8��{�p	����b9e�T	z᭰���Ҍ�O,[�~��=(�бz�3������d}����͉˃���<�
ڿ[��
طG��-�@+�3g�Ԩt�F%R
O�InU�V�c�&�ڳ5&���o�k�dk(P� k|m&�^,�"�=��pl���#������2%�̟G�l��Өt���Җ�G%�£t�/���a���|p�d��;z�
�{A���#�I��ؿ�{�W��\�:��/�x�D�&��5�ʳ��`I.(3,aXʬ`��B�%�?[L�:�'��3R2�;�
 �Х{/�P������A*D��XȘ���Ŵ|���'�
���.ƥ�tޭ�A.�k��s7 [...]
-�H 2�#+�*o�CF���A
-5�
�R���ϼ�JI�F�_z/��DȄ��gg9�F���sO���\��4vĠ~=:�k٤
F)�) ����M��_.*�E�)���=�~W����֘���v�.X�4�񆶆��
���1$ ~B�]�9�o��MkW.Y0kڄQ���ֱ
�oє-O��3hY��ݿK�J.
��%��
jQ�p	:�Ќ��:tk�Ҝ>S�$N�� )�\�"d(L��=LS �>��
����r5j�
��W�ի��R�*H�!_���h�%���%��X�d�w���Ke��
���
:u��'y 
-%a9P��k�Yn�:I/$
� �)�b�
���ݤ��(`2��%;�dZ�V��5a
뛚-�Vp`9�pIa��
x C&A���J
/,*�b�"M
��%�%~�/�$ׂ�"�&��`Jo��$�c�s�x��y�8	]�.)
�qm�Ĥ��1�*)�e�H�53p)C���3 �������Z���
0VZ��x'N�8P�A>{V���v!<���?����9��ZԵ:~����[7�Y�h����F
N�QJ�Z<�$�CD�6�t�%A��
*��0�Y��Ӵ56�AvP�X����o��@�cm���X�;�_�
*�X!k3�����Ч[���9T�Mٲgֲ��v����%�~����7E���P��*�P��;0g��l��l�d����4�H�Ŵ���aL����طTH$�î���%	]>
-fa�r
�,@�D�p�xp�i�
-��5aP�
m)�HI�w�޵jۡs�^}�
6�
-��
����2PbLzQzwng�I��
-b1
�?�/A��/��_؂��R/i]+�ֱ݂a҃�s7�ZE��3ӥSȔ.
mg�����\(T2��`Id��X:|P� �|��%�ȥ%�V�E.�7z�,��Q���y���t���,�o�=]��n5
5����:zn68*)�m�3G�lY.e|P}3e�BZ��
-.我�0t�<Vھ{?ZV\
������VHX��	�/�0T��_I��
^<�����ҾuS�.^�`�\Z�T/�^T��������w�J�jK�?d�KV��D�̓�x�0ɋ'�4�Ŀό$���Sǎ��
-KsfLQ�;t�֨RN�ң� �
�W��H�_bT
-��d��=�/�EK�/��gM��䌇��Z�j�
�AS��\��v�p|�$�.���K��0ݩ�G�%�95K�˔P^�kKB��GK
,]�;k�w��P��ޜ��]�.=z�8�N�T��

���(Ih\@�XA,��3J��'������3�����.
�s��l.�r�m��.���+TzT�R�
�J�`I��S���)�YgR���"E.��Z� ���Y�]cҋf���	
��"�2uO�6	��Q���=�r�����:��!��<��E��Y.�PҮP�lŪ���w�1�a��~�=O
>vJ�2)��Z�8KĞv귘�k��[o��{�Oҽ�%
fM� ^W=���B�L��v�Pɉ뙁J��ܱ;�3���5�
P�x�x;ak�(�"	�T\���+Gqz�#��#��ѹ]���jVa&���GA�`�D�%
�߱
-^�k&8�!u��a���{�d
��4E��.�:���ou�@m<)�X����<,��+
K�[�����W���"FK�%�]탒�}�^��M[J
-�hsV�w=��4t��Pˁ�w*�v�<L��k�L��=8�c�Ȥ��n?J�䶃4.���C��oi]�3������w+�%��a7�v|w�z�
+d�J���'����n�X"�Nr��)��Z�z��k� �6m�����L�J�Q#0)$]��"�6!`
-u�)�{�Yu
��	YG�
���RQ/A�ɕ3�Cٲf͂/k6J�h�*7��l�z���VoP����㧟}�׹88��_�8v��W�|JD�6T���|�ʃ�t�j��C(Tj�
�T�P)GV�J7^BT��E�l�J�mԼm��}�-;������5�y�;m���X�'
��!@�%�"y��1�?��4o&ַ@
ǔM�?�ŠK�_FTr�%
KRd|d4�ȫ�w�"����?�g���ؐt��1�aa\�m�?��u�N
3���U0��-�T�^
kK.�!x����@��
h���Yt�н0x����L7�������a5FBR ��Ω�}��v��t��Ѻ�:�.�sb�`4E\o.e�k��;$�	u5�����J�ӌJ�R$��t��n���Oʵ��ڸa��u�ג\�́���
�\L���9��y!��?�:
��
\�؛�J�$DVYG���g��0��'�=�;��9
ʞM!S6J9r� sa��*�=v�t������;�JSNJ@���{��j��@�Ι7�< �l��UK��3m�h�thC�o�J�-*�(�R��?-*�u%��
-�:��;Pa�yO,[�q����5��S�����ݍ� �MgI�G�g�&�3gM7rpr�.@�ZU	��洨��ˆJzc�/�\X:k�NϜ!�x
�x
�=��{�o{��\�>�IȽ>f=��W��\bעHB��۠V���-5mX�fU��~xf-٭%����fHR�dAIW�
gJ�sBx��N�n�$���U�`�Q��8Zo�І�FO��:�#~�%a���tN�_�7��|)��b6��`j��9+G]<Ҳ��.|w�-G�d��7���
�JBw�K���Œ�qD�b��mP��D�f+�u@�6�(�yRTw�)����.��Y���{=��>c����T<��(�?o��9.=�=�C�x8g.7)Q�B��u�<XS�6nSq�jY�TBNJ���ާ�N�{�V����ݷޤ�������n�(eڤ1��-P�P>�J7_jT���J�
�T�!e�����&kP�=�?jk�!��ø�DZ�𳧎3�a���T�LL�	��pP�ˌJn
OzxNOq�NwЇ�
�[��(��$	����*J��b��y�d��R.iu?�N,�0�D{Km[,U$~83
�ђ=�N�t�պP�%C�c��
)��H�;�9L�5W [...]
�Ԩ�D<3Z
-����c\��
J�ꢀҝ$7�^�w�9�H�t���;JL���wQ���b�SF�D����R���t�㎗xN�7Jν�.�[0��ɚ�h=�����[rqQ�4�R�R$zx��pi��=�w�ڵs��]
-��p�Eg~�{U�i�Խf�O�甎�x�\:͗��x��*)f
]⸓�r�<�s�̙3W��y
��hA�h��::Çz
��
?��
�����
t�~����k:��~1�-z���3Ҵ�Q
-��X���jT.��]�_T��A%���P����	�`
�nѐMY?[e��S�ƿ�Y����`I�ґ����IRX�*ծV�A%>7u�Q�K��w�)1t�Dz�t����p��
�f���ä󏖉�S�:����K#�
�ӣKR�M��W�DQy�t_p�İt
c�
JZ�Z�si�
m)1!�{/۽́�wT(��(ްƤ0�1�B4�&N����N����E4��-���-��1�`���%�K���9H��qك���1Q��Q�?.(�R�#��ȵ߾���ʥ ���#�r�kn��`��/���x���_=\�>8�}���
7��.͛mTR���D/��(��%�Kyr�V��7_��J^�R�Z��5�	Sg- ����Ͻ(�<��ae
;�b
�h�@e�EM+A���͘,�D�C�����A%��bP	ו���5��5h����S�J�U����'�V/[8g��Rkp?
T���J~σ%�%���R,,�/�|��S�I��
�2e�O�\�;Xo���
KƌܿO��I�k�C�Gra����<z8�ҵ�|�;
J�^�R՚u4nު]�.=z'�{��ݼ���P�m
%�h��
G�c��4�75���P��]lZ�)o
�t�
��w+X�?�e�
�
@P��������J�^�R�ӧN ��:t����J�QO�8����y�y�i
���4&�����sϜ6]<�[�Z�hCOV��7>�r���
-�
y$/�R���K��P�:Q���^��*��
t
�RI����;E.G��Q����2�gT�ףS;��*��B��x�ԾK�d�J�I
!�?kk�!o���ZNXP���C�i�&�Ի[�����@%C��`��
�K�󁭏���'"\kB�>U����XLsq�7(=͞���|�Ry>���*�b�Rv�d��4ZX��0)�hM)��|G��M����wԽ́v��P�V���_�oڣW�lY���7�<\
-Ӻ���`��؂��Lֲ�h@@3�
�n7���S� *}�jT��Oz�,=<�G ]m���#G~
-���,�E��FM?�y�JL:χ�L�
pg2��)��1䬣�J�,X�'�R�\���Q.)\ʟ?_���(TXT�j��g֕fc]�"Hg��A
-�� S�HPr1-:K ��ݷ�i�Ҕq#P��l�
��H���
5*�C��t���� �P�Hd	F�y���qPi��1�
rQ)W��4T2��4����
�9+����ٳF��k��MlSƤ��p)X.}n�`i1`i��გim��
ң� =
�$�_��l(#��w
��hӾS��)Ab��wLs��J<�6�����cD��\��}J�`��u
�r�r�
��L9
*��IK0F3 c&�P�h �]XT��I
-ƧN�8~������9��Dʅ�y��w!LJ�a��S�Ka"���Ֆ6�]�L�x#eq�MKh�ר��ʥ

-�W�T�d�j�m،�����bA�dd
�(��������D���fQ�0������ȣE����&`LT���C�%�Q	S�'�P�`�?*�`�W�~4[�|�R�I��Ǧ�0WϿs�a��i
������"
����O6��>��5-,�H8j�-1�AFK�
�
� X��_���llP*[�2�w�s�7 #��ӈ{'4��qo�
�7D��JZ�6E�Vj�xA
#�O.�h]�-9[0��-h��Mf��J�\X�� :�Cۙ3 sF�o���(*�-��R��t��gY*��S�N{2�g�.�Ӓ��;y��
�:�^�W��C�]<��N�P��ԓ�L�F�JʖF��p	_�"�}�Div�F�A
�GK�s�6�u��:�q��A�HP
-,� i��Դ:q�hg!T�)�?*�!�0*�#b8�
>:/T"�ËϞ��E*�N������^ �ɮA20�9)��ؔs���`���j/K��pIO��-,��=��Ҧu*ۛ?{��q���M���kW�����
-�wzx2ZR�ĸ�:)(�dP"F8���s��o FJ؜}b�r�ށ�p�J<��w)bR–K�$�2����H\�p�֥�`�Q���LGw
�)�V�Rvhd&� Z��_�(��XɆ4�����A��8ɸ���������O�DBZ׻��y�pg!��������K�.�=`$åݼ��*)��dĞ�>-
�/�r�X�NJ�ﱢ�
/Q�
RU�������!�J}r����"
c
HK ��J��á�ʥ��C�O�5s4�5~�n���16*5�S���J^ρ����_9���7�hup����A(��
�/�
���x�D{KK��M?�O0
ի���bE=<����S����*K��;�9
��m�J�� �
@�{EV�B
��uF1XZL��k���px�5�K���g��;�zc�D�Mœ��
�Ě��)��%��J�ҎJ�ȟx�,�\�J�,��y���(�����i�}n���rq�*��E�R�ȪCD�7��F%�K�L�K� [...]
-T�P�,ў��ÿ�8
��L
*A4���Z%uO�R��@
Al�GF%g�����f��P�:1��B̰0(��.�����iJr�	KX�ݺq�Ơ5u"�x���h���"zxK
-��&�����]@�q�V�s���0l)a��l�ӽ;q
-;J\(�KW��<0)���Lj)?����SlZ�3?�-����Mf�O�~�tcK�y9��l
�΢���M�JD�j�����R\��/-,Y�H����2���λ���̻�u���>],\r��c�� >�G��cq�a��R����W��r�d���(U�ly�(nڲ]G�+�=!��?�%�W^�,�J��`I"g�B�UK̚:~���4t��i�ϼh��bѼ���c��Kn
�ǯ��W�����b`R$�c�Zj
�x�S.��6_dۄa	n�C��ʥ*ٛ2�<Z��%������%��F�R
P"�Q���ڳo�9�Hi���ܽ;t����zGI
-��6O��(v�:����E�D⒥u}�u� �������� �XN.)T _^�fB3 B6���I
|W_m�y��ݣ
��[�H��
-\R���W�L�+]�aRJ�RZ�4yN���&�~f�x�u�5x2����>�2	
�*�r�L�R%�W�@�rU��'b���
-����*�+�F%_���@����Ҁ��Q�8��
�P9�5��񧟧���~󵗞{����H�C��K������
���=~

Rhߜ����i��≬�TK*EWn�ώ-�W-�3�}{vIjӼ1���
�-7,)\���HPb��r����1��2�x��H��w��{G4�(9
�\q�T`RttJ
%��g�U0�EӺ���(\�r)+�Q��I�*
�K��� 
ț��*��ZS95M�j@�=�J��	�"�"���"���$I� 	
��]?S(E�
����R�ť{�u�
X\bX"�!��mX�v�jU*U(_�l�2�K�)[�|�J�T�E���=�����'C��R$�4"���������m�s)Y�?��m0���u����

}/�G}�Q���T�j@"4�h�'��a��+
.YAt��>X�[
ܿ{��
 ���R���[5kX�����]Z�� K
-����?��
�噒JXS���!#�:;{
�X1Rڳ�t�B�3�5���RG&:� ���H�1�����a\��'��9*8��G{�1_���4H4��l�1�˪��D���P)P,�|ΨS۝`�z�Њ��������{�F4/(�K�k�z�T�KduCB���ѷ[X?ZD�ڷn�[���W��p�|9��/_�R�j5j�k�d�
}=A��
�J��>��3�΂�,�~��+QɃ%�����ß\H�q33����R�Ľ��� ,��^]-�B�t��>�U�W������:��

���˓3{��cXR���0�� (=*�D3]%!�͘=���x�Dܻ�_|��
�Rh�߱K�I�1#~l�-�K!�E����o��[$�
�7��飌f
Fe4�.�W���
��ͣ
�z&T?*a������iF��dI~E�z��D)RKE���Dz�0#�5(��9Q���ҀK�r�
�a䭣+ڲ.�i�
-d�5�[�&p�b�
-*T�TY�R��<k�
-b8�hEb�I#8Ĩd��oWP��
*E��/���ON�;�AR�
�D"`
-A1-��{�ᅴ<��-,�������ʩh�4lP?����#

viͩ%�%�K��	J�
Pj�$�D�;�
�n�L#�#ǜ�S(�4zH
,�[���1R��q)���n�
7GW1����b�eJA3 ��?_>�,T�(��b�OҢ�Ш䵂]��
����N�Z'2x�9\(E-�����y����o~��s�ڬ�˂ž��f
,K�M�f�֫S�F��U*�RU�R�z
���<آ��Jo�pLT�@|���P����>.i`
-~?;��bR�$������2.y�e�aXz�$�÷n\ˣ�q���
N=�U*�.^�P�G at x�����
�tӿ0)HR�t��n��_��@�s���J �au<�9
?����}@�&?��`�ZL��o��B��H-4�¥0��*Db�
e�����|)���i<�(D��R��3y�k��r!aeLT���P)����WP.�J�~���m�.�8�5l
�I�k��uBg�-��笣�	��Z�H�5�m��M�W�R��ժV�Z�Z��j�mИ�ʻ��?x�X�vXe�Y_R��^���*!_A��
-T�K���/?G|����k�O�t���.�"\,�^�8WD��ϡr`	gX^|����xX�x��i��r�m�&�K�x����N-�nQ����&�I�����1#��w�s�ҋ/�jiR(�XfI
ˆ�
1^!��H�V���͎��6�l�F
eԼ��z�ފ5�+W,W�dq¥B�
-�h@��%E_�	iQ�B���@�t�Q)
-��T�DJ�A�H��wcE�F�K�y�D\'d�~���e����C��>�vC,��ҶU���ԫ[�V��j֪S�~�&�i��� U�N�1�d� �j�`�
�~��J�M����d��������_�K�
;�#���+E����l�����ˡk��� "
�ׯZ�h�̩��KjӼQ��U+�)Q��9��a閛�&�~�]��P�R(#
�;�
H���lΚ�]�PJ=&�B��3D>B�k���@�ʥ���<p����I��M����R%��f���e}5,¨,|�s����ӄJ!Y}��!
Q0�
E~F���D�ȩ�[(E�R�uRp��+q`
-��K?G�����K*����v�Юu�fM)\�S�V�Z�kשW�a�f-�1u��Q�Hځ�Y�H�T�?�JѰ���1�#&
�\*���x)SZ`�{����U�xض�����G��
�xKK���t{�t�*`���[�)P��{�y
��|'<
)	��;Ksp
-��aR ���H�����S$.El����`4��.b���x]ͱ�DkeJ�(�84&'%�Wk�J_Hp��h-�T�Rt�����]<(GE�*WL���
��|/���_+��.�Jt�L2����K�ѰD�fݻtlߦe�6�_�����oаq���&��ؠa�����Q#�
��J�7Q)K.�#�e� \*bJegU�����]�L�?UD�$���{���ʩh��a͊�
��׫k��-pjI

���,ݖ���T��ó>(���'�� �
x�O:#%�ޥP(��€��+^#�)$�R��(9���QF�S�[4�^���Kz9��¥�?�0�d�2e+T�z&��:
�x�@����ҷ�B�_���|LrA�C%�wR�d�\'�wRr��g�-�œ�?8P,�X��KGt�5mܨa|
5n�
���
�r�y���d�y�+�t�b�R�)k\Dr��󩟼ϐ�
j��X2��`J���O
=D=�պ�7�/���P���,�u�
��~��$`�����@��V%
�T#��������s�����ݻ�J�伃}��+����9GL9�E�#�%W��
e4t��`��$�\�*G�N��
-g�̀��J���M5���=
�`�N�!�	�
-T���݅�s��{�B�Z�����o@�-�sb8��9)>V*�)Ƴ���9���!�����I�
];%�k\jҸQ�F�7iּe�vIt�eȈ��͚�x����
��JWP)&,�'�_R�0"Y��B��ύ��,��S*`IN]So��-��GK��
N<��C���֩�%<�@
Kw�y>`ҽ!P���x��}b)����{ g+��#%ݽ�C�Ť��~��
-�c^�F�Ă]�_2v��e4��
|���ʍЇ [��̊�
(]��HɆ���v�a0F?_T�����(ryB�_}�x$J��v�вy����~�8��E'/���V�׉B�������HX2mWs$��٭s��m[�lѼYS�5kޢe�I
�����I�g/X
ew�
�
-]A����yl%��J�s!��+�T�D�H��"^�0K����`��.ł%����
�_�����=����M
3\��@x�@���0Zz�{.�L�?�
J%��4z<
:�\��p��N(	!����(���H
-��O��]��
��s�h�b��ƥ`�u��y]t'A_�#Xb���-��Y��*�*V(_�\�r��W�X�J��u��֮c�^�|�G�]]T�"���%���u"�t�w����0(Yω|��
�s��NJ�V	L�g�x��K����R�Խ�*�ڶnղ���ڴmߡs7>�<~�9
��$<ȑ^A�+���0�+l��Hګ��m��*챃��(���J,�T�r �l-


vi�G

ɕ#{���
-����{�I�0_���G�D����J�?����s�H�Ͽ0�;w��P��$��+�x����F���h�h�
�mC�ҏ�-������u$�`D�pU[0��Ԭ^�J�J�
р�uE�w�Y�1��_~��y������"�:Ֆ����
[,�H��8�'K�u~�~�89DJ�䮣��(X���R���zt��Q�R�֭[�jݦM��
:u�N'0!x2w�R���^P���T��J��]���J!׳��� �}A9r�ԑZ{��R|X��k=Z�2���]�zxBxhӢ����/O�
�,ex������{�&e0�T�A�:�;��
�
)PšD����Jz�$ݻTJ�#���+|��_�;�B%l$0��v˥�[0�n����M��
n�n��L�R�J��h@�FM�J�ӟa��.�J�����ť��c.��Z�K�q�J,���1�;)wRĥ��K�H\`�	2��6x@��=�u��1�}�vm۶m�>�c�.�{�I
����X����:F���t����R,q�8�;�;g��{��鼻�a;���� ��:���R�4���wɧ�9�\j�ȴ.�7K
ڷjڰN�*|-=o�)Xʘ!�
-�� ��1�%�
�j�t
D
JJ����eK�FJn��%��
3
/�G���o�g���&�����DJ؈��_.��2
-���$�U9��v�Z�`
˙uj)\�h at U�ԩװ1X�;@/� ��)aTz?m�[������4��0�W�~�r�ГE���:1|��;��T��ҿ���Q
K+h��`i����>�z �:tHJJ�Сc��z��7`�p0���,[�
�C����(]A��:T�������D��k�s`|��o�6$%�f-����`:��_�ִ�-�)��FX�Ŝ�ף%
[�<<�.�3]
�
^�TZ�?��aK�3>�!C���3(Lʔ%k�
Q�ԋ�w(�����"i�I��u^!�
��/�k���x%lJ`Y.����nL�Լ����T�%��a
��l�f@�����k�J%��o�0�۳h��
��"ը�~	M�|�H�t`A)I�\�'
yN�c%pm&>.E�R@<=K��
-�E2q��C��ۻg�n]:w�]�v�ٻo�ACIF΂��Hځ��]A�+�� .��Ǥ0$}�I��Ρ�9>s�
?�Ϯ
~&N&��1�>b8V�dFK���Ax����E�"�?�K�R�̙2f|��3f̄B)
�+R�d��f����8|"J�|��
)�ݻ��=�b�ߚW୚/�W�4�E���
�:C�X%lJST��
e��I8��NIOK�c��ʟ���Y�^��$P���&�[�M�L)�h^�!ʱ
,�g�P���E
E�ۖ��K ��F�Ƅ�Г���sB��fu?8��s��).E�Z��ga�Ň
,�7�4n􈡃T�Իg�nݺ��[�

-��>j,	q-Y�^i'	=��
_��JWP)���J�o9���8�����?�L��4Y>|Z��ӳ,�򹳆�l�����%������hz�D=�����{vlV��'��0���Dx(Z�@�<
-��g͒%s�L�3gɒ-�C�ʓ��w
-��1(u$�p���ݭ`�
�
ds�v�R,��`�9���+��`�o����0:n�`��)aS�%�\
-.g�zlX^W�NImI˦!k@4�Q�f-Z�� ��n��Q��4�RlX�"C+���V���]H2��ɢ=�>����;�L���Rj`I_�%X��`i�����ӻW�
�z�R�4`�*��نu%H�_A�+��".E��	a�9�(��7��.nE>%��C�>p�Id��Zj1F��ˈ1�x���
-�<��'��q-)<;<�5��-��c�
,�x([���&�ȉ��PB	�Ѡd�w��D#���wL�Gp��y��
-����?�y�OL��ET���r�
��1��u��	Kt�[0�ڴl\jР~}�(Pj�6�SW^Ϝ�%��r��+��K=*E	E��"_
(���~��|�����t
��u|'��.E\
-����_
X�L����
-�,���}��Օ��O����D�D�hbW���R�&H�"����.���{��t�X���a����Uv��wι�x9�yfF
'���]�]�]�8v����r�[�Ν:v�бc��]�v��J���➳`�
-D��|^I��'n
N��9�JQ���7^�n�{UHRO����)�Cs�nѼ��h�"
ܤy
]�%���%�������T
,I���DŽ_�p�t���ֱm����T�\��Rŋ��^K��"p�&�n�t�:΍�;��:9`�J(�p�A�ͷ
��3RJ2���
o�
-�^u�m��5ތ��,<5\2�x���$��WMX�$`	/[tF��F
 �j�h@�:�6n�j��9a� *	�V�t:5Tra�;���W�}���r��^���H[)`rL���x�Ք���c�$a�[�3�L
7zD������ԵK�Ν�t�ڭG����R���.]��pgeTz��4*�Q)�
T���ѭ=w���K���:=.%<�u��%~�'����`�<Os���Cy5ͻ�L�d��v*��'	��7k��J[�*

| a��n�%o�<y�������T�~>8W��D����<K��J@�3GJIv�˜�|���`h����|k���d*a�쨕�'1�
� �p)9X��
�?I�F�
�$J�v�hQ�aD�#rWvQ�+�lc�YH�I��>2Lv�1��X�	���ՙr|��hK�� ,ѽ%6���� KÆ@�Իg��ݻu�ֽG�^}�
4J%��Z<�v at Tz
͔F�4*��R��eB�����=�$r,�W���'���'�`<����/�����2�s�� .%9]
-�R������@x v8����5�T�
^�� Kw�~�m��w��w�y����+���jL�
9�]f��X�!
J��wQ��eS��4X���6�
/�i
y�O�:���BoI���[0�*c��
X�ݽK�vm`9�!�ԯ�@�R�Vm;t���qx!�a�������K
.��dF1���TN�L;N��@[Y�2��4>�R���`K��'� Z�4_�Ҥ�cF:xЀ~}���ճg�^�z��48s��qp�y�b$;��H; *a K�R�bp)J6&�����<'9��+�*�^x����Y���{�yt3�b�_½�#�p=���t�(^`��x���#�����T,�*-
J,ݓ�;����� L�'�}���� %mש�DJkyO�%�G�C��;���:�ɓ?
��Dt��f����5���P�8�����p�
6������}��E��	K����AZ6͚�h@�
	P%��;z�dX�YE7N�^�
�
-*E��wz"�G!L�"��y&ӎ�9���,[�cfu��h)7h����
ai���Q#2�d

�_ S�>}���?p���G��0��-�����~�v�S�aT
-
�Өtn��L���$u�!	�B�p+�)���<��1xG��?��
1��	�	B!��P1ѥi��p)X.�
�%s�.1��H���v���kB�d�
ޗ�޻��뮻���T�/s?�Nϒ<?� (�
��(�!�B)Q�
-����g6���
s�5�
2S��N��v{�I5W�`��/L����4z�P���M�K$иq��lסs7\�
3a
-.��X�ѳ�JѺ�I�D���Zw�T�M�r���2]�C�J����N�!�R���u��ycь`i��ƍ
9\�� L�
8(c���#nj��|�&[��w8�JiTJ������%&�oIH�T=p+�U�R��
9�/x����߄�>&<
c!"�L.m�$a��I�b	�_�p`�S����
vx���,)t�����^�I
?�J
���7H���wC(<�$FJ��	`�� �^G#Pxc+<��q�
��gY㘌wf� ��740}�v	�V�������4��
��.
۷m�R�4oѪu��T"}��Sy�(�4��
-*u��5�Ġ�Ma�1[#��&;!
'�瘮c�:Ͽ���
�O��
�~?|�7aI^wF��吰4e��1�F
�
28#cРA��f9z�(�f�]�d9
h���^"��)�Ӓ��F�4*�8����1�>ɩ�$�$��_ @^>�t�����ۏ�R��������A0�PxB��K����f�+eX���X�+�%\��W�Z�
-eK�(Ng�
�_��}��}�� �G��(EV	Jؘ`J� %T�A)�����ֱnJ��yJ5�7 $܎�f��>2�!��4��)�E�$�#������\��
KG=X?z��
�X�
-��I4�e��mڵ�ԥ{����9���n��8	O�º���I4(1	ӈw�T�L��
2�&�
z΁���8=�|G9��
l���
��\��%}���sZ�P�Ҳ�
�Κ>e҄��G��9t��f1r��	��Θ=o\hތd^W���LiTJ�R�]P����I$q�$	"!x�������ݻw�x��?�s�>�h�ń�a,�2�I�%|�\�*.�G�����4���g�XZ���D.��4o\�N����X*�������?��.Z
�͕GP�:C(~G�r��jPz�@)�sH�B�$snY����@y����Dp;䘁m�<mi
i�#N��S�������T��b\��ޒ�jeX�-Q.u�о-��mסSP�D뙴��c w��eT���hq���n����d0;�!���9�Vd,N��
=�ձ�|`X*���Q)��'�����ƹ%K�gL�<q����#�o����ƌ
?i��Ys������!��Ҩ�F�?ԑ�:��{��I\$�ca(<^.�o׮��=i<��]��!6
:�ޥ��]K�W.e�t/�X����j���իT|�l��,j��.Q�L9J5���m��)�z	���RBL��
�E�7#�� �څf����x�5�
��L��au��<��D�ҿ,-gXk�����U����Q�*�d�

c%����8���i���KФA�*�T&N��+��1LfyΓh+�:���ܬ�h7��d������E
�ӗH�Λ=s�(�Ə
#�I�Q�F�
7aҔi3���6�v�m�����J!C�Q�B������smڹȷ4$�c	@�� [...]
-��w��Q,
��%X�mҠ^����Yn���p�
-��jPbI��ؖ�{���Ϩ=�(�v�"
%���H��QV`�Aa�-[�*{Hk<	�{7��d�݇�F�HX�́%
U���ΚwP˦w��]Q4�c�N�:w�֣W��h=s�\��-��*A��*�
-���-����,m�f��0�C�����
v
a�=���
-YJ���������K�&p�Yi)XZ�|���sf��4q���cnj3v��(͘=O�Jp�Yyʉ�_}-�JiT��A�����^�\�Lג��%"!x�6p�-[6o޴i�F뉿�y����Ʉ��`��	�K��p-�,t,KIHm�~$��g��#��A}{tiߺY��ukVX*S
-�r�G�˔}��%�t�۳�W���ĎP2�w�1;�>	a�ߴ�
-O�f�`=�[E��x�k��)�h�K��d�#F�
K��j��0,-DXB-(�H4�
ht�ٻo(�� 0/��gr׿ѿ��J)*kP��[�*LRi�o2J!�q���"<G�I�w������p����jI’�=�=D۰v��̝=s�T�K&�o��I��
-P�K��&��9)�Ө�F��@�-�$&A<�%�=p-�,�+t�-¥D\�~ݺ��1���u�׋�(|l
�{�p.�["
>���%p,�\�<�t&�
v�Y,
���uj۲i��� ,�/�OK�,	�O��KsJ���SvLҷ�؅��,
-�& ��x��L�T� 
�d�D�3n;-��f���j�Y��脩�'�10q����V.}��K����	K��,������.^�����T���%r��
��Y@��'.��;;� Z�L#��5 I��
g��c
�:�V�9�{N���0�
V�!�\J���%�
B�m��b����̚9}ڔɓ'�7y�i�g
-PZ�d����7?
<+���Bi�4*�Q)�~(�BI5�&a�t�i�$�')
-�� >%B�U+W�\�b�r�?�\�j����b64�w!0
:|�i�D4˥0,%F��K���R栾=�thӢI��G+<R�Ο�-�H�����M���PQ at K:��E�R��Rt���L�DOAf�2��,3���϶�Zxf��h�i�1�a_��(}��O���a�M$vt��y������a�\р޽���ӯ�����F�?Y��J���ۓ**%�`
%7�`L�eCR�d�F�VK���ck���;̬Le��߰��n�*,}���ؼa��˖,��4c����M�6}�, ���VB���hu����4*�Q)�|��]�$l�A�ٞ�$�Y�X	�b
�l��%K/^��|��K�,]*b�
-�0�M������i��}�Z"�#\�Ԝ�%=\����I���K �p
�
KC��޹}���U�
-��W
�ըU��	JjQ	�2�{���R�f�rn�oG)��%#@xSi�jm���!���aG;	LX�b��g᪍�d��%�ijOp�ܾe#0��#-�Qåh �~�
�J6�.�&R�<
-�A�Q)�"�"�! �LMa)�8f�rh2��!
	0�C�sL�Ʋl��:�c^�
I{�Ƴ1]<�7
�����Ҏ'6o\�f�rQ.	\�-�	��Y���PZ��J�R�
x�6�JiT���0�F�
��3>�� �����'E0���x$�j��
̟?o�\xs��_͛7o��"$.[N�%�k�VL���u��4"�r��K�VK��eK�����v
��biTfF? <�j���zujV�Z�ң�=Z�����	��
:�XTG���W�J^�m�I�����5O5"! 	3 at hH�̀6�MO���@ �0�
-
� �qɴ�jX�Eg�ɗK>,9�{�֩KƊr�D�

�1X�*��z&3N��{�'
���\���#6cLŽ�qr��i����d�-�����"�ci[2ɬn?�g�6�۱l֐�Ò=
4`i���kVA�$pi�
�m�;��%KW�Z�~�J�-gyQ���ѳ�I��9�J��<����](a�Na�H���vA�E�D$��SfϚ5r���A�4s�,�{
->&�!���.(�D�$��݄K±Dj��e{A�SǡB?�w�z
O���;KX,�2�o�.
ڴl������i���3s��0(���b����O�
ѐ;�ɂRl�D
J&&a΍m �oI\�*@B3�s�0�xd���
5�!8�p�kX���p�nE��v/��%X�r"�mCXb-���P4`����

<$@i<�g��~$���E�:.E��e3U۞�L�9�xT�
�
s��l.Dr�sLי��c�Jfuh*,��6��.�5{���4,�ڱm˦
kW�ri	E�C-Y&@i���O�RIM`������F�4*�NJԇ����D����w�C��U+��ca~>%B��)S&Ӽs">�|N�:u�t*����Z�l�JL"AǂI��q�+,���[��a)��}���b�(�䝥�Ǐ�ѿw�������Z��\�z�᠏J���:0]�Q.
\P�
q��8 &���&2��
H��
3��&���ks�$sP��h'�p,� ���u�~.E�K񂅉`I��'�5,)� L�2�
9z������\N���-F�ϳ�J?���;�f_�v(޶�
�����]�� �0���	���iS��L2<�]g:��l+��m%S��j���-��5:p~pm�pu{�9	KOnۺyú5�a���B�(mؼu;�J��Co�(���iT:�Q)	P"�z
�Kd�ǡ	!0I��
�[�Z
/ǚM#�)��7M?~ܸ�����ر��Ut�$!�Bd�%��Z,���6
�K��{'�
D4,Y?�Y,��ָ����iǎ:�_�nx��1\��S��x��ԭW�A�&t:A���=kr�
7s@�۔A�3�f�a�I�1��E�J�
 �͑Vp�0�|h
0� �I�
M2�A�������$���a�C�7Vt�̝e��1r���'N�6��l�L9V���E����P"��
�I�I��޵��
�d�Hs��!�:�9�:@�6|g���փ��I��1�S�Y�6�-X�G %,
ܷG`���!�.]����6	�ܵ{��
�b�ե�Q�
G�hP�\):��
%�

%L��*~��J�$�s@$�+�U�S"�9rƏa� ���eo\����p�L�.�
-��%].A/��h��b����Q�SƏ�CϮ�ڵnѬq���W�n�z�
�{>�Z�nۡ�J&'\Q��#�Qʕ��	RI�;�0�rnH
�����)�7�L�-�ѣ�
`�L�Ls�;��J�
�f��i��
�cE;쮾
�SC�%��uD�iِh�����wK�ѣa?s2l �͆-���(���T!�q��>2� �q
A�$J[,���
-��$e2$�#r���(�c�����0�[��M��`�
�-Z�yϾF	Dt/YX
-�K����)~-E��V��+�GC����5���{}��d�4*�ۨ�
(A�G%n�
��
�I�����M����cX
�i0h��,`0�5f�8��½p�a֜y
��$B���\z��xo����C���X�^�
跙�,�����
P���i�ƍ���ߧG���Z�9x�O��]��fP��lN8���e�	�K&�oV�͍ � �2i�
���4�DDx#+�23�
-���I{�5�f����*�0�߀�F�c2J��p�w.|&���H�F� �R����J%Ʉ�� Y}��%h4�-�� �#����;�m֯%HB�	D9��	�qL���d8�����T��d�a�L���Y2�$=$�J��%�^
-����UvQD�D�	�m
�j³�R�����YP��S"TڑF�\�J��9��#%��A��0	�6�j��4�F�_A�E��}�~���˯_����=5(c��0�m�e*m�-^*R>��wB��%�����KQ�����*��&�I�
���ܙS&��


?m��|�k>t8A������{��M�<?�&'�R%
��E=
����"�7N
�
���f����`��@fs��&���h��kX�vr�'�
��S�L
K�X��Բ!� �]
���9����3u+�U���v)zK䶹E
�6;N��mT&Qwa�<m2$��i2�s,ס<��|�N� �
��v�g)�{�]�KN����m�çZ+J�ҿ����͢^�,\ ��V���t������4*�Q)D�3@�yos"���;�.�$�-� ƈsh��t��wo8�܃6��?��٫w�>�l��^R�G9����K<�%ʥ�����kX
-6ǂ?��I�j�b��BK�'Co`�^ݻt��|�kޢe�6�;v�� J��
-�߽&�/>��\ꠤ���ͤA�Ȭ`��k�cB�
2nR�
iZ�� ���xd�`݇�1p�;��\a�����Yx��P1���1,)р�3�3��{Xs��&̺�����
X�9TrAɪn5�J��<Ib�z�.@*7k�i�L�q�d�!ב�3D�j� g&���g_Q���IOK�ђ��􊝸n&���^��nӽy쁘�}ڥ�M�ҹ�Jɂҿ��)�
~�4��!�T �F��X8�w�{�!�k�.�;w�#?�;��Y7ԋ��W��
�SkQ0�g-]�j���Ё�M
h�|ڜ-E	�?������I+~��XZ�h�̩ǂ>u�^=��Մ�p�n��݄��{��A�4s��%������'(%��K��D�$��TH�<i�8>jCW at Q�2�0@��9�v�֝́�N@D;]�FD;M�L=
���g�z�i٬V��
b�O��KWp��G.���jg
�B��МǑ͞5�4b�4�đ�� Q"�
䔺u
y�NWp
�;l��c�M@�Q통�
\z
性$m�}��u���’q�
~d�[J���~�H�J.~

u@��g�����JߤQ)��R86|%�"��ޤɳ�2F�
b���Ċ)����c�_u]g�8о]��m��Ë8�m۶]��"&v�P�x�p.X�
��,��`|��mO>��x
-��bX���%S,Y-���T�[�I��CX,-Y0gƔ	cFf
зw��#~ �w��	}d

A�Ĝp�~G�J�+�&:���u��۠���A��T�
-L7Z@�H"�qZ@��`��m�*Q�V�Z�=�O֮��(D'L �(ک֌v�Y���,<�J�
K_�{�o|`	�l�h -��w��z&��蒈�W��
�R<(����
4&�4b�ʍ���o(� �Ya���!�a[���V��Vp镼gL�p<+���P�N�s �2P0T�wHT��H�:��K۔�9�X0i$��X)T�e�r*%J�5(����mݴ^�RD<�%���"
-D��J��6" ������׼y�-���9]�� �� LP0.͙�pɲ�k�A��k����R���Jn
O�
x�VK���7"3��u����0�[�^}@�z���ԥg��I�U�A�Œ%&��'"�~Y�:�I�I�L��ET��z�V`34G345�������pG�NְvsUg���0�ʥ7f�T�\�9����]�S4Z6�3�Y�����]���Hv`%*��s��Q)z��wfxދN���x�4�LF)9��mny�v
�;�A4
l5`PƐL�n�=�qI1�4��?{'=,y�JKO�Ŭ�|He;� �acXL� Z87�
iT:7Q)���@�u��B�NJ�V�i/��(|
�!x�p,�*��Es�4nܨQC�����Ík�A�"A�Zԟ2}^�����;w����1X�
�V���N��;����wxZK at x�:i
�>�W0V��?�@�/GΗ+�jw#���)E��?$��0�rn*��T
���Rx�膱�4�0� [...]
-�vsUg�;���-kE�QkXzA’
XA�!
���""E��������-TJ�d"qҤ��v��Ҟ1�2! R;v
a�&!�!�i�þC��ٻ�&:�'qI��ՆR]<�ۚ
-,9=W��r�M:<�z�t�o�H�	�;c7?tK>�J�$*y�����c� �f�
��.�|��&� g���|�� �I�F�����c���z��=�X��ȴ��j��1�
�U3���`k�o��樆���\\���M�
�
�bi�����̘:a	B���߇�&hPB%��
��w۠��9R
-$ݒ�Hu�ʹu|��
�7�
-

��f����`$��=Z 4aф5l�vs��2�·%�¿H	��5���5f�ȁ�F��^Bڥ��f ��ڃ����oS�J�AI&�Nj����F�]����.(�Q���
v
�;@����U�L}�T�BL��E��d.�n����V��(nIzȂ������(|R���d��RɑA�
�dP�4*�2T�B�&�
-W�d�wO���ŸeO�4$|
G0퐲ִ	�,��Y��5k�W���˚5A)�N�z"�2��	`��I#�#D�7Y
S�(�
�`�t��P��;p�'��l\�r٢y��j�P�fBp�
d̜̠�֦|�%�O��2YP��;�tS#hӆu�I2�V�Gw�qw��э�`�,P����0G����

�D"�ѮK����`�h��K�mOzY���,<)i��5K{�c5I �#m$^�ܭ򗠒M6P)���>�K�6۲	k[��4�!�sG4� $J�pk�Nm4��:�W�:�2��[!2�IDW�n��c�b1І���/x
^��,��B����d����={��ݫN{"y�%�}!���6�!�J�8*�C%[��!��'������&
�G�q��l���Y�� a�"V�Z�M+�B�U���X�&��d�%��}GfP�
�%���G��lE;�뤋%��C���pe�E�
�bi��5+��
�9����#:$c�)͵����CF�O#���A�s�����t?)��
-���e,UE|k߮
"�o�++��
Տ�!���@{<Є�Ѯ��v�0ک,�d6��w������O�#��
b��|

 ��kp�K��X*�^�1�3u��Z��Vv��`�����������d
�d�h���
'�9`���w at n��E�6��0A
-�9\���´�OGl�咵��:�Ò�ƚ��Ţ[���;p�Hҝ����.�̱R��9T�c��.��dܹ��P�->d�uDH�y���~U
��+T(_��+_�B�
�*�½����Q�f�Z
;
\�7 c�p,If����%k<����<���i��
n�	���,Ch�
7~�������]v2bG=
��:Aܽ��{'&�k��4aN�(- H�*�7�TV�S
`���̇� s��,�Q���v�dj�����
��pdb�ǦYl��^�)d��
P&ţB=�՚(����%�,�R
(}����b�ܡث�:�
o�F��m2�9N�s�u*9�j����De�YdHZ�iC��B���V�N�G��Y������
-� �C� 
�$�G��ȓ�\�Ҩ�{Q)����0��1��pm��" ��֙4$��m@$�Ia�\Y��Z���ʔy��pص�ѫR�z�Z�05d=���D�D7,���_�l�sEir�T��
�C�V�dݳ r8K��ϸa-�.9&�
-�Sg�/d�f	�h�a�C
(}	J�HIGcN���`��$̹u|k�+պu � � ����f��_�|h
6\5��F;�i`��	y2
��U���#K2��g	��5����:Kxb�:|x��4>:�$r`�mT
-���r���h�����xc!!I���

'�9d+�
�����~Ccn7t�JDѡ�A`�iC���*4�`)�h�k.�o��a���0	d�w���X(='AI_���$�~�|T� �J���@��|aPڏ��ݻY<u
�i�I�ڠ\������cU <�0X�d�%
z����?�(Q�d���a|�Z�ZuH��t�z��r	��՜�
-��u��y=<;��Qɻg��p*����=��K1��B[�����ci�?��+Z�J6�(uPr;Aн;�7k@�����Ӧ&e
�ߧ�I
�Dƍ	�o��{i�
�2Gi�O�$�]
�D�dd��3��,|��-�t�����2,�*v�X��L�l���7�%cZ�BtTdM=��*;�����>�C���
1� L4����
1L&��48N�s���w0�[�ٯ:��Ц7.0
�iC�
�_�趪�Y���8
s���ҾJǒ��
=��xG�
u\o'Prz�]���҄4*��Q�*Y��J{ \
P��
L�ƌ�տ��.�$(����<�±
<>%b`�bE�> ^~��E�!�Me��*Wŋz�#.�G������
;a��Y�.]A���`a��A
�ZxL�bI��0:�D!
M �
-:&0֔]n�'�\�CP�� %�	:mt��f>>N���K�%U�����^;
ߠR%D��p$��Z�0?ia
4��G9�*`���U�t�`�R
Z�
d�2(F� �D^��?|�u�-�7o�"����Lc�$Df���� �x/p�w(�fXyc�{v���@��6�@#v��瀱����Fr-i*�j���uc5mew�
��F��Rd��`	�%h�='���3�:�9u��uu�SM���Q�g�JI8�
�Ʒ�� �fJ+�-�4.�d
��
�K��L�^��
	��[U�P����o<��B�DL|@`�p/t��+U��	q	u��w@t�@�[’3���U�b)�,��Y,��|HO��ـiJvb���|��P)*灒+�Dݻ}{�{��cGA�0	sn�$A�͈�x$"� "4����Y�6�C�
-�$�+p��
g���D���mO��c�:�p�Q�Z��&�5K��q�/
�n��f�._3 h���R�[B�խ�C�ENa�f"����$�
��m���o0� �Q&�\�� (m+�L"���i
�Ziն=X�oܭ7i�t<�amY<K�Em�OaV���ҋ� ��$�B	/s1(y�<m�I��9�J��a�Üp:ps�[��5{Ɣ�"&�B�w���DƇ��eR��I%K`(xT�`����+�=��_�ϟ�@����`���%�o=RAL�Kp��u;(�Pu<��������}B�w�d��� ��L��
��妱(]��;��jR ���$�6T��wVˊ:A;�_I��@����I
۷m�BvO!�A�͈$�Pе���,s @�xg�
-�$�+P�k��
g�8^b�~L�Qxf�M�U�7�;*x
T�܁$v�٧�ӿ��? ���f	�����

-�52�O�<�B&ai
iD]���d�H�Bh����U���#|�`!� �H"*pZǒ���@�Qц�-�=�,yF`���˻�o@�ĸt��L� ��P�s��Y
�w$����{iTʕ���/R���
9m�7{:v�@��;�j�1	ˤG �
*���U�{!��w�xw�'��/�����
-?PT��p�r����o��<����7��n'��~ �Q�m�}��4@x�)a�oC�
-�t:I=w>�s��@ɢ{�:T2A�c�2`��C&�q�Y�tC��*�V��^.���.E�
���!�
p?�
�ܛ??�
-�L%K�yX��t������t��7��Rj���v��%���~R
صk��] �Gk�R��h��Wd
�>�@)�C1CMa���u�fM0� �=
-��&��
��0��A��Ҿ#����z�u�`�-Z���1��boY�S�ym���2����'V��C�K�^�tB ҋ/&��A)x�3�J�
*��c`�R/�բJi!*č��
�jmߦe��

�[�F�ʢLz��bE�gݏ�N!���o�V��n�
b�]��{�w!0=T�p�Z���
�R������;p��Qx�H��Z<��W��5uh��R�Ƕ[x�ɟ�!Z
-Iqj�:{�x�g���f3Z���ֽ��P���e�@	��	�n�b�ڔsnJ
�=XL�7���"��V���k��=:U�h'����`���4��7߶�UI�?�^�a� �X�$�%���-
,h*� ��ni�c�����J�L� %�F�kP"�P6��&rm�0��,A�m2�8��[I�a�)��6L��EK��>xH ���$eIIUL
�� ���Ko�q	�I@� ��_~0�@�m��k�iT�E��uqa@��z���O�E	J�&�=|(t��jޤ���
-�
	za�Y�X"
-���7o�<����:o^����~! S��Ŋ��T��*թ\�.^Ͼ#XZ�l%�|�ђ����1Œ���b���C��A�%�@�|�A��Ş���J�?0��(�xb�l(R�=UQ�{�1�sn�oX$ax��p�[��9n�x�R
�����~*
�v�CY�G	�CƗ�Z���tl�i^��G$��Z�
i|�ET��/<P"����l����`
-��$�

I���hǑ6ˣ-%L�Ʋl�%�0�(n�.J[�T�����*i(�h���V���N����O�r	�S'2��� �W_=)�$*�,P���4*�s�(�T���Q��#Ai�h����սs,��թ)2>E<�B��X��P8�M7�t�7�`�oWxY�[� �D|�XqQ/=R�RUQ.	�jնcמ}hXZ�n�Vd<X7�
<���o��:���Lǝ%(
A���6�=�%�-Z(ޢ�K�.[N秷��R��L�Q��/I�'y
%���E�˘t3��s�'5�J�Ƿ��D�
	�J
�
-7k+\o>��CD=�T��v8��$�
L�:�ۇF.)^F���q3��/^�9I7��% ���
Dɀ#OU�.��/�SF%�J�
-�
-���G'@��BI�
���i�W�ę
��a2H!�j�y�öʃ�ĶI��x	�6iFtV(���&N�>xCR�
���Y��ǷAX2p�ס`:�t�b�
JA�_ЅӨ�kQ�
�e�T��� '�> %�a���֩}�P(ժ^�RƤ�!A��0/�Ս���k�]��Z�=��� �����C%˔-���㍚�l۱K���Ϟ�x�j}azx��
�G�T
�S}3�,P���U+�����]�O�ۚ�P�l��̏�f"�O�D	�n9���)b�I
� �ViX��`Y��
�c�`�
-*�UѮ���q�L�:�
e�/y��

-�FFmg��\�<L$`�X�t4��T�p�Y׷aP�9 �\%]6��M���?�L*��mp��P$�� 
a� =�Zm)�V7i]~L���T��MZ�n��0��1�?,Ma��kq
-�>*���r	q	
&�L���|�1��$K�4*�~T��T_;1��Jϲb�֍k����0J=�vjת���P(U|�l钄I·�ȱ0^s��W�S�O�����4	�ߺ��,�KE,QJ�K��լS�aӖm;X8d�hKs,Y�
-�5#TC�%e%Zv
O��&���]#����@�fæ�t@-�ؙf�C%�l�Õ��&K}!��ʤ�'z�=�J��E(-��+Uo�V�
-���0��z�&�v��hW�p�
�Q`���Ҹ�,��`s(1�!v
��Iނ!Հ�4�b `ҳϽ��`&9P�֩$%\��\q�tU�B�ۚ�"&A������d�H���f��=G��:m+&�+\�^��c�@�rI
-.Ub�`je
�v��U@�8�X
-�v�\��$�	��&A�Ġ�Ӟ(�4Q�4*�ը�UP�[7D���;�ʧ���Աm�f�
�'
-%˔|�1I�{I�H�V�Q"�])�ߍ'��A��^�\�D�tW>�X��+^�L�
-��֨󘀥6���0z”s�� �%��$ϻ���X�~fM�w/�
�ӡ�At�zP[[�Z���u��Ե;�fh��Ħ�W��Dϔ
�'�Mc�c?L��T�����{��M!D����O[�!O�;Ln��.�*ڕSY8�� 
�]g��zYx ��'��<�b6�K @�3���KJ3 R^-K�J�428����t�F�4m�֜�*L�w��&
y��
��a*��~�R���%��Z�⍛�%�jX2ϔǟxN��ӀŰ\�zI �@&z�/��PR��
�

�Q)ף�7U��\ߡ��h�ɡ�p�u��}zPjٴQ��X(=\�ăE	�D<�%��������D��+�+� �P ��M7�E���¯
-?�`���ūQ[�R
�-�
8t�Sg�h	{xG��}l�(�G�^
�,���]Ц��6��oÆ��������>�J�. J�����	�a�n(P�ɤ[�U
����e��o*�At�*�
-�5�
�T�3��]*��hgf��P�N��f��Ò�}��̷x;S.g>+�	
�g����R	5�%_V_�DuK��U�*��)lpJ#�q�2�k36�N�n��v��
�,4
��
-�B:+j�L�1[+K���Ò�xH�J�1��.0	dl��~�4bX��w�`y|/�J?#T�$T2��R	�J�~C������V,Y0g����=�t�԰~��U+U�R�b½ ��s�o�g�_�G]~�����?�������DŽ{]��tÍ�KX.=]�*��Z,�4t��I�f�hi�N�����;����c���[��:D�c�[�l޼	�f���R
�����R��5�t��w�zwW�Gh�<��b|sӂ��V���9�=8U`d�َv�(�URKe�\���wD5�>�i9_(~;�3_�����=ϒr=��
H��*%J׭�y)�D�͵�0�ubҽ�5�2$�L�<G���V`,+�S�~�R�2���tV�?�pi��,y@�8z<҈�!��ְ�]<l�10	d�'��]�$a
���"�T)�J?3T�"eT2�J������
�̘2a�p�)uh#@�:5�>Z�li,�D�~a��?ɳ�
-n�Q�2x�g>�g
�
-��n���|�(X�h�e4,u�֫F�q4ZZ�q+��A��C��1��І֛��׌���
�i�U�' ��܉�Q@���]�O
����ݷzh.�x�
(�x;A02���nh��p&z�=5�J

+h
\z饦5�
2W�T�J������F��_=,�:�,|b�,��@
�H6n��3a9��	t^�M��W�M�
� _S>
�dRe&!r��
-T��
B�j[Q(�ͪBsj[�$Q�ގ
�(��=G����4Ս�o�-U��
:k�JZ��3�%Y]�C��
Kn�
�`d1�%a5&�ރ�
J���J�\iT:GQ��ݑ�
���)
*͝9u�C�L	@�v�*�>�p���ݗ_d��n�ˤ\�u�����
F������_�t���[�Ԫ]������̹
���{ߡ#(<
4s��w�~�/mT0`���v�M��ۥ���}P(�����O����L�(jrq���>�D�AƤ;�L2����CV���Ls��e��T!*�.jg�-��p��H�V�
^h;�E��{0�dp=3؎J�MW#�xE��l�9��Pݎ
�DO��6�6+KSX���&�^s�k2D#2Y�s
[ISa�Ė�糥��Z��;tf���
eI<�V�#�����7
-����p�B&|�$&a��I�1Tr��iT:Q)\*��,���FC�Y�&�
9tP?Jի���d�ED�)_ޛ�ȷ�@��� x�|_,�
-"!�H��r��{�+���%ʔ�X�F�����j��x#�L�
ޚ
[��ڃ�b��d)�w��f�%M��Dbk,j�K�ڠ���g�}�yI�tph�L��=N˳&(�PjC3pq�m+�(���w�D���F|��͵���3�A�̏vP0�v���WD:���3������n|�ruR�
K$f�����h?�_��4��<*E���s at +rd�`H$:2]�m�ڌ1	��d�F�4\x�mu��v�!�1��Fx�k���}'�J�^JY�0.���Y�X�T��%¥�?F`d؄�]@`w�<P��:�Q)��R�T�g
 8
��
�D�>nTfF�^�4(�H�h����#
-����г(B��C�a@�%�
\Kx��%o�����̇����R��
���;(s$��'r<Q,
�bɢ�%�J�-�O������CQT[o����( `��{
�㋸pk2�ޒ
SH	W�4W�i��2�L(�.�=¤[�R�V�7�`h�F���Ls�\�����52�.�,\/�M�3P�
!]��ۧ�Yx\/n;�u&���w
-el|P���c^BP
-�r�esn�!(M323�H$Z*�*ج��bҵF&��da�����;`+j8�~�5����	�K��kފ�R��R�L���
S�%����"�� ��P�@���E׳iTʝ�d�.��U*I��Aa�'6�[%B�)�Gܿw�N�Z)P*��н���&��
��x( Ix����y���. &�ZT/�C�Ս��S��h՚uoܢMǮ��
=�y���AK�Ia�C*�bk��
��s�Yl�����j�?k�<}

-%TZ{M-�x��
����e�-Wb�
J�F��˼#I75��4��
-�(-��M+�O�;�����
-v��E���,���8
��f�;�3�J'0��z,�rI��r&-h&�����(9� :�n�^Sy�@	�T�v�‰��Y��
&�AL���?��d
-�8d*�V��q���K8��6�4-�[Z)K x��^X�(�v�5��졒KF�ĸD���,L���I�Q��D�p��T�gԿ�7
�JC��޹}�f��׮�@��|w��x#��I
-���ȫ0����( "20.���\���z�]� XzX�R�z
��lש{�CF��4m�|"<�	<���w�����8!A� js�DmY�C��~��x���t��Ѡ�O(�v%�K�4�v���r=�qҍ� Ƥk�J����"��9�
���
Lf���p(��&��;͡{x,qO�/g�` �g�����I��^v�xQ��g1����
-�����-'5��j�L`�(m�ԙܥ��8mYʱ$�� �bސ,�`��ZM.�R�K��Ob)�y���]��d� B#��
b�*� �F�s��R�3�T"��Ƶؿ�4n��A}{v�кy��u$(�H	�wм���� �#�"���|�C���
���p,�WX.]{�My �D�T����+U��X�f��co���3��`K��-��
�CDN��΍kS���P�
��| nj�z�5��� �ߢ������r��\�Vu�tC#���fέ*UN
~gY����A���v�:�.��WI����PH*0���·%w;�4ng�	Є�o�z�i�����Mr��i4��

aO�% [...]
-Ko�
��/��hc���!
~u
�*j���1����%D&�&�
I�
P
-�_�~ި�Mj�]*��w˰7jXF�^];�i���5�<���=w�qkޛn�NJ�^�I	�t�������`����,A�h�Re+T�^�~��m:v����1��2�%�Y���� �]�ۊ3Q��N*�g�	d�w
m�GI�{;1Z[2Q�.|���iy�Ai"��a'H%�м�,�$
�.6�i�{���v�]��d~���W�Yx�d�����d`����@��l =�${=�s�
H��� �›f&�2C��}�A	�[)Q"Q

%����]
��t���� �i�?���W_{�*�h����4�a	�k7nٮ�ü|2p�,�
�K6.0!2}�x$!�0���R)�J��T��K���#R
�7u��C��֩m�&
�լ*@�$���D���+!$JL�E�$����#C�‚�,����߯�����E*]�b��u4iٮs�>��
7y�
U,��I�����R�@�ҿ�x i<��3 ������T��X%�����\*��JI�R��#V��nf�@ҍ,�I2���&C���϶�od��*������v�/>
��T���lX��V
P�
¤�i=�S
Jg�T�$��L��[X��A	��j�+03��,���F�I�F�A���7���
-��oP��-���h)�
’p$S����
:B#@Y��e�'�a�,�������
(�Q��J*
�:��%���/�T�n��r�9�'�9t`�
��ӡV�J�.Y��BJ7(A�Ę$�!��t�
"�D&�%.����`)��E��(�ȣ�j=ְY�]{��6z�(���o�[x���V�S[�J<��	�
����I;1o��Z(%*�����E�y���)@i�<�A�I�+�;b:�v0ɬT�GA}��g!�o�\�wFw�p)&
o��7�����җD�U@6�

x�=�$��i�RvP�[S71��
�\}P�m�J�{{}�ͮ�����Ź�i+�T��~�
T���_9�<Xj޺�Kp
6-��e��A�&��r	�	�Ib�5aR
(�Q�
E%��3K��C������͜2a4��p�T�z�
-eK	P�O��
�{��+����s$�c�a����k��г��t�e�����;��_��kѶ�S,�b���%��\Y
-�n[ϻ����egG< |�9	

_uЛO�
�4
1���;�P��v�
-��wW]ia��~�������'�+��
e�\�,������.
Y��"�3?��L��I
��z��96���J!�y62
(����%��,W��ؽ+@� jx��te2�e�\�2�EiKi�P�[��_i�֪�xc��<̺MH��]-�ђ}Y���ŒK�K
-���,L��;�4*�TzӪ�F%���J��TZ�rɂ��&�
1D��Nm[4y�.0
J?T��}���J	A�
-%�IIұBa�W���P�K«.�?�� ��)P{xUk�k���X���†��
�T
�{���@ߗ�겳�
�1)jO3Y�×��o�'`h��Th��Ժ� %O�
1J���/Y&�s�ꅮ~_>�,xR�.�dN�����7Y�+Ie�a��%�
����
P뙁E����+b�z12	���s@���0a�Pb��4"�d�O�u*�����l(X�(P�H���V�T�V]�%�jG�W˸ת�Z#{���9�K
.12}�	 IbR�F�\�J.ׁd
�ոTZ�z�"�:d�ۣ
��h�T�X����w�J�PҘ$
+u4�b\�R�t��7�|��w�{_a��U�V�~# <p�4v��lߵ��9�Ï5�!�^"�S�x �v>�cRJ�����P�%>Bb�Ю+��83��u��{I���V����5�/���S\�����p�(
O���h;�C�
�����j�"L|ċ����MW�h:��
-�ԾCc��҉D
�d6�$�L�<�>�?�� ���,,=C@�%l���Дt�l�6�ʢ�]%y
�D%�%�$2����I)�R��T������J"�[2���c��/��6ؿ��҃E��)P��@Ia����8h�C��¯�.����q�u7�h���*[�J���X3v�V�ޞ��-��'�cP�*�8
�a	qI��eg�$�P
-m�$߿SK/'gCh�D�T�V5
OP'��>�Ĉo�� �!�R��v{_.;,� g��
��g�O������������Ɋ�d at H]-UT
-���h�Ipy
�8S"P��T��H�^�a3�I�%��0%�����T.�5�[��-�P)�%�J�ecPZ��x$�O���O��CrŒK�K���_~E��r{iT:gPI7�t���i��*�@jH�J�۵��
�
-N����P�����(
%��صL7����sQ�ĸ���ҕ���z��C�K�U�F4��>M�
<���ŀ%��iguٙ1)��Jv�ΚO�gC�� A�|��8�����da��D|~���.��
-Y���&����~����"Lj��Ϳ{O	� �Ҋ��6�o&:0(Ѳ9���6��o�Lg6/�C��APq���AY
�V�%�> 5E]-C�c�?LEmD�n�,f��B&�HF��4(�Q�lE�u�A�`
-� ��:�TI�J];�nְ^����P	�"0^��;%.���kE�����s�c�[iX�


-FK�û�
T�;K�f/X*>��_+�
"��’�
��KxA�64���s�����{e��Jv+ȾEO�
��d�)P���
��t����7+��w���+�DE�på��,����ϐY�.>�Y��Ë-�mg��Lz�z��cs�J%�g
3	��I=� (�D¶��I!�%�"��4.i>+�Y���-�ٰ�y�l"� ��c��kA+���2���,9�d�o�0)~�%�J��l��JGJ
�J#��T����T�L��{��~��7\{�%*��{1&Y�
ٷ�$,]��������<��qw��<T�
KH��
5~��y���p����"�4A�F��%�:�r��t����L8T
-R����МΆ %\��'�]u�� ��I�V&�e"<
-D�
-n��
�K���y�,����K�1���w��E4,�ۙJ6 at -hjɀ3
J�'��� 4�F��jfY.
JX���X�01��;�K�V�T..�Q�Y���KpL�W?�Z6I�ZUQk�xg��a��%����6
-�Ҩt��H���Ǐ�
�*�K%�:T���;*]w�?\P�%b�g�ɴo.��ģ%��!�AK]�g1v�����l�S�F
�#}*>r���	�X��}���6?�G4cb�ym�bn����ı������Y�t�-�	r�n������?/W��vT.%��#O�;u��y��{��v
_,%���L��zfV@��s���6�
*a&��-
5(���HX6�ӈ�I��4��&d(��]���|���pH�4{��"^xL��è�F�`�ZC_1d2�K
-�����IɁR�r5*9
���S��#`ڭ���x]*ծV	�w�݃C�k��9�D!1
I��

�J���K�û�$<`�Tw�z�
����6%j�?���
]iH\2v4�]g��s$(9��S
l~��r>ACsPxj�¯��
�`��Y�/�},4�]
-Yx7#
GE�����
���٥MT,�mg��j?�]��@�L���ay
=WKE��Q"a�La�/�L.y[��N5�M��e<\X�C�Re}Ls�<����Z��K�=�|��%L4�
¤8
�Q)ף�j�A
-����b����\*+�AݚU*�5�w��Jd~�]J�D�;v/�\ɺᒂ��~���ݘ綻�b�J�z �Э� �;@
o�ƭV
��‹,�ŒK�v ��Gǝ#�4��dyŕJ�V��e5�w��j۲�	J83��묤�A����4 %�vN~9g�7Ge�HěA簶ҕ�g�?a��4�!�Xr�`��U�r��ό�
�*9�\��d��$� ��B�w~�;5H�l�4�/D��J��ֆ��K�1ͩT�nކ7���g��a4
������A)�J��
w�x�u�
p��5⇙��J�Tz��:��N���N��o%(iL�s&���,�D�l(��5�X���Ǜ�lG|j��ʒ��K�T/x����|_��T��8걇Ja��k�-zc>Csy�
-�4hoA�;AؽsAN|s�x��.0��e�M;�<i�'�F/�b)v;�K���3�
J�M>��w��� kE֪�$�%@�:s�ϴ��I�ɂƓ�M�h�PZ,�)yQëp1��4�ib������f/�������L�����Lh�4*�FT�����
�H�J�����Ι>i�$�A�T�J�: ��w8T��wJܼ3�ˌt����ʄ%9Z��o�X*�`ɲ��rx��}e�
-�� �17�����o�E�RhG�wG�_ҌA����&W�T��46�oY
�E�V�(��J�ּ8�@�'�w�B)�I)��La\2�x@7a����a�H�2&�
�GIK�ۙ�r��IY%o{º��-��t��J���C;O+��T�+^h�,+&3M�
n���6�!�C�;��Z�’<�ُGKȗ�{x��R�[��ɂ&��&�Q)��R��'B$r
�>k�����a�JHu���p3 �����
(i�J޳,��6�=<XZ�b�n�Y*S�Ru�;t��k�XY�-<�D�R
,9��_��$w4��������
-�_��f+���8T�޲*��p	J�����ƷD�.���Ee��Y8�-��'�'M�M[K�iwi�#��b)b;S�f�	$RB��S/�T��;i��(�"3�RŋJ���Q�-�P��,+�2qI�Y����� �<X�n<��S7-I�$�xq�n�&,����R��ɘ&�J���
�:��x�u Z8(�ѮRM,�
-
G�-/���:
4(��[6,�
�*���w�⥘�Юs�~���a
,�>��s���,Eo,��R̎�'��'�󅽣Q)E_��$���j>јeK#1
�[FP��;�J
ߢ�+�h�g�Fs��]�e��f��z!������'i�����/�)�lZ�I5��~�Y %�K��	�����O��р3��;�s�A�{��W~�;y
9�R�Y�g��R^�x

��iت
����Eb
-����C�b)�K�����I�&�J���-�D�
h�I]�u��e
����R�;�� �;��.J�<ɲ���_,!O=�,]{�Ͱ�T�X	�;�����`�y�ν�u,���],%���Toh~j�+3
-��@ɖw�ZA�/�����|�.�!��%��D4.��ߢ
.����¯��p$��
�i!
�=<wd�|���v������QO.P*�����)�w�h

cS+Aɨnu"���Bl0����^K�(�7�a�V��<n�t&��كj�zf��rI"S�K�6iT2�F.@%�߼
-+�
s
��ӭc*���'K%�:p����2>��6,���n�{��;Tv��%h��"-h�
P��O�w,>�y
X��؅Q�0ֆ����0�
�J��������ca�D�	��=���(�N��|�
�"=0Q~�����#���	^�$}���#
�X�
�[��"S���$�^�T��[:�B�;e4�L�L"�t��$��%��k�K9�Y��� �7�kЍ箽�/	ĔEtM��
R-�"qɲ`��>Y�Q����\�\VڲA���u�٥}�&�ש^�2H��R	��'�w�L�%��
K��gKyn����V�Z
[x��;i����Hr�#>E�똰�����f��(�$�A����b&
�ڷ��
�
�
���F0��2$�F;7
�(��z�N��f�l-�$�F�v���
�IT��p.ElgfI2 �I\Q��@*��)p�w(�Fk�X�j$`
�,�ڠd%��
���5�,%
�%$��q��R =\��d��
-�o�RK�%��2M����;Q�`�A��^XVZ�v�Cw�4z

[
-	xT*������cQ���Q��'���\��w�
��p����
-�Q���/�%{�؄�hjL��dJ�����aj��
l*u��ŋ2�+J�����ARd�K*
���ëԨC����Sxx[�0�#
�X
-N�"�w.0y���R�|��8���oi��w�Q����W1
c�?��^��,릲
en�_�	�a�n<�kجU�.=�1e��94��e
�V�S,�~��Ҩ�}�܃J/��
�
No�ȡ�u Zx��eJ��Q
�
�X�l�`�����
�� [x���=p�(��
�
,E}
-'ι�c�	c��th�I^�ۙ�wV|SSs)�D�찊��;<��C%u`A)��d�Rv�[�+���	^M[���É�g�,<~W�f�z��E�q�]����^��[y�OZ꫘���M�(�q�E
-a�B�NW���%�x���M������T��
�p�WI���f;C��F%�k�T2�J�
--3𠁇�J�'�ٹ]K���+]��P��C�P
-�4dtF�_�����pɥ�%T
�Xx�H��ↃB���N�����b���� ���K�M&�Md��B� R�ey'�:P+h�>�X�>��������&�]t~��‹Е�Z�5�I:��g�,��eL���D�R$2�@Vb�e5�T:���{��](�bB���6gX������@�
�̲��?\@ܡ��?݇�`q.j���

L ,���
 &��g�~H���5�TZy�PɐQ!
<Z�e��	�QסM�FD
G�[��ǥ��ߑ���Jšҡ�b���
T
�Xx(
����Woغ�D�Kq��%��%MM=�!y}�v��$@�W$��Au���a��l
X�Z�rm�Qx
-'�Y�o���U�C�B;
�P�:Mҩ�7q�
Y
�Wj�R���HDJq=��_*a}����,�w�UL;���b��|C1,]h��-Q��Z��S��
����l�FK�|�3	I?�Q��?T2¤�
�#$�^��
��P0>�u ^D�0V2�d�R�%�w�-<b�)���Z#7\�����GƷ�A�X�w4�a�2r��
�Y�!�
-j���:΁�khmY+<]pAdҝ���^~a8
'����S�GrG�/�����=>.�_Vß�#:��R�5�T3շ�'��*��I����3f�(XR�ap�Em�Jհ��<<�=�ƒ�j�J�i�,#���K���5r
*�c���m��Z���
�:T,\�{�-ύ�R)�RA%�Xb���£EZ�w��{��Q�Ith�6�£�R
-t����	M�
+�@%�T�Ҕ	�rjWu+����44��o����{�يm�.�e�������J#h��$
zx����%�
�aK	#[J��B4�.��(p��y�O�G�;�*��$��������`"q�
eÒ�
q�xE-�%k�}�xxf��
U��1x)Y+�"L��1��AiT2�F.B%�[�@xیV��
�6�IסD1�:\?�_�RI��%ߚ�NQ-��ђ�J7\
�xc���4�A^�K�
�qp&j&jva��[*��J%����lU�T
�^�E�K�@)��d���d��+�tx����

��pd1}6�h��+�҃��L�?�Zԋ*��m�J�S��!zw%���$�.OU_UJ
J?B"	K�ٲ+�?��E-��gd^�բ�e
���K���5r*}玕La��s�\2/+
<�����u YhJd�T
-XS���l��"��7j�E��N�K-S�N����l\2	���L�y
���xl��S�u����h1��8��L.`�])������
w*
�I:���#��s���K���"pɁ��?�jԋ��K%8�L��}{�����I����&(�h6���Et�L�Z�/	=�국�
�ժ�%�Y�,[�ҙziTr�FnB�h^�֍��G+����e%�:�A���5��������TP�<��Nj� 
~�
,��l,M��Rx�GKty�OݣM�JaX��ь'
P�;#�}����P��QsP�ޠ��
-���
�������
K�Y8��`�N=<إ���RR��hXJ�R�zn���@���<����k�S/����t��lu��#�RBX�^���&������f��;K�`�%Ө�F���R�E=T��}�<�c%>b�x �
<n��t=� Ҭn���EÆ���K�ˡ���Rxa�C�$<�A�q�����0߇f!N�e
�RINͩD��ձG�b=��$J
��Ť�JK������=<P�1G��]�z�fP�$&�W,%܅��1ɧ���g���h�(���:�+���^l��VߏJ��g��hI��T��MPi�mKL�s�FM�����K���5r
*��J�X	�
�Ṹ}��
-m���	�$�T*%h�,<k��C�j�o������/����y�6	O�"w4�E��\3���T⩹*���_l���r>�'��
�%�x���r�^�bU�
,�%a�V����
�Ș�RU�DT�����d�.�h?z"
K�h	{x�Ñg� �9M��jK� ��
R���}iTr�F�@%��
+�m�'�ǘ9y��!zui�rᏖsx
�!�R)�~�i�`IdറT�>�Iw��Y �o�%�R��[��r�䮒,���S��^+��J���'�����(
�ђ��!�FF�$�P�������꺞aHr]�@*!K�ex�F�\���,6]#��T�!;�����@
I��
g~��%s���F%�k�RT�s�J�
�ѹm
$A.<a/l��P)r��KEK�)_��L��Tw�IEJ$<�Q�p)�%
�&(�k/�Reʗ��)z��ê�n�W��O0R�M�e��`��`d���e.�pg�E&M������
��\��T���N�dշ2i�wl��B��?�͂�d������Cy#{p��#Ǟ=aK�`�>s6^�����P��Vr�J��G,P�Wh�^�R)yT�Li}���p?H�)�Cư1Y݁�Ѧ`K���L��@�����T�� �D 冷�^e\���\?(Eg��$
zxw�-G�ᨽ�<c��J��u�I���.�X�,~�<]*5W��!w�5ύԿ
�ǟzv2{����R��S�C�*5�5hں�S,�3�Z�88 ��Ά�Ҩd|�\�J1c%8�Ի[�VM�E��(
l��q
��J����E��u�o����� ������$����wI����(�+�|Y�
qK�x4���
-��9JqY�
-�

�,��`K0Y��%�
ņ����<��y߅&���{'�*��R������Yٿ#�L����	KF��k��A�Z���݊��_��9��K���5r	*���N`��m%5V�ܽK{��
��3Vh����C%gc	\Ƞ;�@��MX6<�����I�Nl�����J�yE^{9�C<�
\ȗ��Լ����AJ�m���Ћ	wY=<"<��S,������rvb�C�����
-�J\*�(�
2��濹F�)3	m&�ת�Z�
��P����ك.�V��g���2&��x
/�J��������E=<��d���^lz�Mg���J[^��R�A�� �k 	/����DBN������҅)�;m\�B�Jzj���;i���ͫ�9J&�s��Y<\
��\,ɝ�u����!M��p��f�ƥf�b�b"��շy"N5���m ��
��
�.�K���x9��i���wH�R��$*Y��ޡ�A��bፕ�~����ڬ7�E����G��PH�Β��d�XRJx
5<Y�9���Q�[@!�\�]
-�쩒��3��l����
�;$L�/��hd��w�b�ix3��`:+���.��l�n��q��S	�u���JH����:��i�������q�������V�,���¥ 
�ؒ���is�DiTR_#�����q
-n+i<�V�
�Jj��X)��;�Aw uH�$	�s�~�G��K!%�����s& ��:����yE�
�S%,���S�Ƶ�r���p��cƒY,�d��
���7I��~�gX͛jZ8���&7�J��Q�U�����v2aI�� �þ8��.��%�Y���˶�9\ӦQ���
�
��p9�����$L�`���2+��+��c�TP�٣������M��ԣ/�X2��ǀ�R2$<�e�~�Q�P0�
��(�4��r�T�8ET�@+(�@ɇ%�óF�X�HŒ�ZA҅��k�
Ί
M�C>�xV*����A�A�V�dַ�T�Oo4
�=<+{�M�`g����jY�!�JiT:èd�� {�|[	E��n+��PV�J�@���L�I�͡G*U�K}15��g5��:*��40%�1�x�%��#�k>)��M��`|�q_�F�.G�w�Iu�k^z�#����H.�� ��ݪ�j�l
-w?���C$Iu��!����^�^�S%U*�ߨos�h����ك*�@��Ù-	��p�B�.��d�"��4*��J�d�͙>i�p�kC?n+ݥL�ʬ�+%B%����C�J:+�5\�
K�S_X
-�,���.+1�A��y�d
�R�>}��/Du�ZA9J�=<&<�˜,qoH�;Z1{�
w9>��/�Y q
0��-S	�F�J9h�DكW,��C�C�-�
 #kڜ�Q����y�R��J*ydء�
��$����V��X)*4��J:(�ijx�(<G�z}
KY��O
���iDOr
L.W���IS��X*YS�'
u���3�A�X�OK�g3 �)L�;Cu(��}��a5I�7g���S	�ue
�^�T��%���!�Y��
�b�ҏ�U��-�u��2{ xL^�9+j�4*9_��B�#YA%����
pC�
p��k�V"Nj<5V��
+E��K՜.*Ic^�R�I�����%bgm��L?3��w�r���
-x��dN�̩�Yѿ��R��o���K�7�nb�&��^?K�]����3ob��>]j�ThW�K%w���~Z;��n��b	w��X��25 4���R״iTr���
�‘R�
Gb�n�
�E
�ޙ+%�J����]y5S�I��Ѫ��U��䕎�]X�q�S*��o�)��ܠ�Ҿ�:���JgA+(l)�Zg���(�To�c��A�
u��p�9A-n�nB�$��;�f���&y��F��
.�DK@Ã{X�P:�}���
���j�
0R����u����2AS�A�
�
Z�#���d���*��P���j��qSf��,�ra�Gy�
<o@��p^{�c�R���IS�gf�>�|�w!;��%��K	N�9?�}�s�.6m�
<���
���ȅ]�|�R�&�1
-�)��ك�j5���X
ْ� p�&���is�HiTR_#��Q�$�H��0�
��a�t�)�����죒��t/.,���m;��7�nY��5Zq���Y�J�uE9�ۿ�P-\���J<U�l�0*��߫bI��9<"�EO,~R�9
<G��-+�Y�h���S	^{&Y�*�
�R0{�&KW��W�B(�/����D���6gYxiTr�F�@�p�N����C���P�~�k!���.*��y���_�o-,i�pp�z
i�v�\��g�;��{]q��uP\��BY��R)�A)��K~�1Y�M��wf
��`��JGU�G�x1x�N%��<Y*�Q`�-�=����PK�H�R� �Q��XY
-ԴiT���Ө�=T��]��`�fJ�� ��b����~T���F{I�T��h��-^X��
��9�e�o��
g����.�r�Ƕ:�<od�ix�7䅻����00���6�48�|}��.��&&�T�T"�T�!3EK��w�ݸZf�
2�H$W�bk�4*���4*e�h�k�
���C�B��v�WD�
�*�gD9��?�’�F
� w�n�;%��A
��
6�>|�]�����䀂h����
��gm�.��A��h1�M:��j��s��W2�
,+�,�‘�`�A�|�ɝC�[,1[R q�y�y[x:��#ΕF%�k��Q)���)x0���<�AK��Tv��!{�\�-^�w�4}��n�F{֡����4�hY��1Հ�\�R��:hc�,���
��$n�%st��=| ��b��hX]��k��.5�
+�1�y�b��j��
 �h
m���~sTM�u5"Ҩ�|�܅JV�
R�p��|���TvH��_�5SE��]�c
-%��@Ys�m͓gBr(�/r@��������(�.�!���T
-K	�
�,�!AZ2C�n��x�
�^?�0𰁇�J4
T\��T"���ɐ�7ؒ&ߡY���E�fmBZ�O]ӦQ��?oT
-4(L<���P�RVv�.*]�13oǚ�:@;((9tv����b�h
6xc��",c:
-Z
s?��JŒ�
�
�,鉅j�
�����2��Ý?V2
��T�
����J��T�0�W,]��$�
x�W�P�Щi_�Q7K���ϧQ)uTBޫ�0b
-�t���Ms�-g�Y+%�J��?H��u �zT7��ZT�z�8�;��x��'���m�2�+T*e%D���
��Ý1���I�
 �War������Y.��x��60g��~���~e�%��#ۻa�,�XY�-<��=�P�r��M���5r*��
-����0�
�'���&��+E�S9��J��Pa)9$���^��d�Ly�s�ܱ��ue�BK
<�0��$�����T��%3�]d�;��'Yx��'9s�
N�M�x�.pQ�x���(
$��u8{R	�B@V��
~�ሬi?���Ҩ��Ө�-T��*������Ǖ��7�T:/���xBx�J�U��YߐBx�
�΋
+Y{/kV,�Z��W�xx@X{I=<���’&��pw
]6Zx���GZx�*L��Bc%�$&�iK���;�R��\3iz�
 Z
~n�V��tfJ���5r*Eç�wT����J6/��mT����Ό�B�J@ލ��+ �j��;��q��_��>D?
Wh���
c�u(r:��/�p�@q��7 u��	a5G�~Z�ő��J�.p�b����ݜ�U��
K!�q�U
/��
�%�6�J���u����1
x:�g��%��dͤQ	�E8�g-*�YE>7`�H�2(T���Sg	*ū���C�}4O2�(R�M?�K&�-<X��C�ciˌ��Oӑ��,��@oy�|S���g5���c
(���f߁��^n�/%��J9嬨iӨd|�\�J��O
�A�py��R�
Eʔ��T�V���=h�B�s&*}u6��1V��J�K�6;��"�o�=
-�ņ;ZY2Zx��
��X�J���NzN'��;�]q�D�u�Kj
���
h�Fs�d
/�[x5�g_x�U�,�F��>�JI�R�C��ɗ�yt
�Jbx]� 1<N/%kƘӴf���i}甅�
�i\F~�p|3N��/M��+
4�w؎~/����<iM��n�5 椚��]��`��
+��L��Z���;kR	
�
�k�z�����G
�Ҩ��Ө���I�C�*����<`�1��3�ac�
�`�1v��dϒ�F"K��-�6$�d�RىR�R��(Dd����
�2�w�庮sm�s?o��s�o�����x��<����;��;t
��k`����r���h�	�T��:e�~
���Y蝱��;�c���
��{�ڀ��/cV���鉧�մ�����
���<G�G��`���.;
�n+���Op��@��Be3��#Li
-�z��NO���p�TC�C�JާјP)Mo
#�����a��阔0�骋fv8�4ܩ��)���E�P�A~9�|���tz���
��y'q�>B�-�l��*Sx�HK^x�
-Cst2��kf��E��5qՍЮ�h#*a�&Y~����w�h�[�RB�)��3=�����W#��5cZKT2�F�@��7ۮ+=��J��jez���+C^]4�T9�MX��MQP)M�ʱ�Vr��B[���=&�ɉ�V᭏���
���=z��x.?��R��
*}�M֙�|�S�7F��>h��ARx��=�-�]Ȟ��|C�0�%*5T�b]�s
o]N	ޒC%:e�҅>*�T8T�b.]u�c%�
�{/z�6M�U����qҝ���;	[��;�;������R�o�U<�Bc�
��nG���]3�]\ۨ���bvO{�/cK�p�y�$�%*y�FC%�=[W:וB��5�V���m���G�=������c%8���}�(��{�t����
�6�,ɻX1?�G�,�u�~=�r�JLp�Ob���T�8;�`w��^���fc�*͠&P%*5)T2K���v�
�ĺR��U�ʨDg�
�a�?�c�.*�1Z�B*�a^���Ed[�a���c% [...]
-S�J����P)����X�Fw,r�+U͊����<,��H�O�O��6�F��z��\���c%8���s�U������l��M�80�w�hkB
���B�
��öR��R�J	�xO��m�3��ƒ�f�J�KT*Q��P�/o�� �
�u�pfij�hVD�
���|�x��.*��\�P�;���1W?����J��|٬�!�|2�
h����}�m�����vr_�j�@�B��bM�
v�
+��u>)*�8-K�x��n��;X��_/s빪lY��*Q���6~T��D�ו�c�2��XaX���d��ȹ|TB��n��G*(@�?��ƨ��
����8g��qŬ��5�o�cӝ;G�K
��.�
a�̊!w��L���]OG���v�^�|��j����=�$��?�7^��ſ_f�5r�*Q��4��JO/T
-(
-L�4��h��������lT�
A�Xv��[��]���
���{�c�F@�yE��
7E��\��m@�yu����	_�����m��Y��n+�ףȨdzZw���,����t�쮱	�q��,�D�ƎJ�Jxq�O%�*�h�P4#�����b<p��bܡ=���Ya[� ��{d�����lz��{�B�P j('�MS���$J+T�,�X��������`ɺp�^�V��
j�XV���4�*9��d�`�Û��J��;,6*щ�����B�p�u4
-|!�2�JN~+,*�ҝ�
ofmȏ���V�����6<I
5L䢹�C���4�4b�v�uzo�A�a2�F��rc�J��w
-�
��U�Ų�̧јQ�!��\��\��N��.�V�NU���Q8����JI�Pmy�dխ�=݃!�W�V�"5Г.
m����r�85Tϡ�/���&�,v�L���h��e��&��(wЛ$������,������KT�����g��o�m�q�@��� ��C������sM�u�i���d<�g�
-�߼G�;��B� �;쌚c#w,��	j�AQ�*�v\��0�bc]x�~qڵpc�����b��K����
�.�bYq֝KTj��dEF4� �P��K���C�D[�R�9窺��8;d

)D~�d��<m���ٻ��
-!�s$*��a�X;.�$қ��2�o�'�J�w�y�P����6
��<�ʹ6D�l�JT2�F�G��y��p�?�;�Y;,�h&Pi튨D
�G��IV�D�m�wn��

Y�X��{*ٸyG�w�+	���r9Q#T��8B�g�{hYT�UV������|�9^w��
^MםKT�_E%���q�s���%�4*��oM
��_�P)�'�U7:;��W;�D���oޓ*�c�P7Z4�"�i�����4>y�1>�
���F��H>�Ȇ$*�~�;�a�����b0�a�JTjJ���O�4
}p��.�pȡ(�T4���
�'pj�
ñ'0*��V Tr��Y��U�[W��󧠆|�9�ኾ�APC^b`QT��@���d�lʼn�E��Rr��9�t��2k4�tADx%*y�Fc@��[�����x^��qáU1��/�hV@�-�T:�Q�Nc�~
��|�Xug�
�g��|bE�O
�����~�p�K
,~h�t�-
��8X�'��Q��5�
'_I8ۙŲ��Xv��ȋ���BU�R�B��Y�bZ��P
�޹�C
�J1*�p�4J�Ki�P�P)SN.x7�Ϲ}�����$��45�Exv?3C^T�+�D�W�#�'��Q��EPI�մ�eR�WiݹD��?_��⢒͖�QDl�
G���l8I#DP�A%m7�
-�{�S��v��P�>>*���32o�78*y�p��&�w���������L�Z���/X������|M������9�ْNm��`����.(6*E֕Bc��ɪ{��&��,*%Ex��,H���m�z�r~����|�{�y�F2
L��1
˴�5L��9�����U�J��h�d�7�r�a��M��*}��np��9ƛ54v
-?��rA�Cq[&-£����Vq�'�`ذ�N��4�T�^1/X������kǴ��D���h��}����\�T�5�cκ����dNa�҈JA���4��I�I��=���X�{�=α�h���
�J�y ��c�H>D�q�9@�Z�F>�2�VZwnyp�i
�
̴��D���h��$�%�����9�'2�z�bT��2��yi2������G��?�@׀�Vnԓ����"���ca�&bw��ϸӼl�֬��<��NI3�
��T���i4
T�
��*#���Y�'�YKT��3�	nD�:&�R�n��,؟5�b��2^�Z�R�D[՝fF�e��f�L�<��"�i
K�k�%*��D�:��'�CμTFl.����/Q)�΄v�	.�\�Bcqh;��N>
�xEx��*��|P�
�
qW�Q�������N&�4�:2�Ӭ
-���aZ�9M��$����J��u����Uř�
-ӎ�*sA�2-4r���iRCA�Z
b
֮�
-Ϝk��~V
�q
-����_�]�;�5zL���#ʴ��zzY�=�JT*Q�^Pɛwħ�V�
-F8Ve$k��ɲD%B��
�,+ǹ��p��}�����ݲ q�����ko��n��
�L�/�#�<1��z@%�j��̑;�?��W~��r��M�,Q�D�%�J�Ŧ�D62�`n��5KT�����r�,.H;5
-Tj����K��
Ƿ*���'9��5�h��0=t=#X��
u�J�6K1��5�s˂�hg���Z޲/Q�������0���4E�%*�ޙ���ee@%�
*>*���J�Xq���	Ƿ=�q�U.*Ň�q)�*��]T�&wp�hٰ�ܲ/��C�Jާ��QI
��>�G{��FF�}-Q��;�2
2���e�Ͳ�hs��Z<*ٯ�s|[K��];r�w#�H��Y2�
�G��5�6T
-�0�Fk�|�ޙ�}���iKT���%*-6*ѱ�@�
h�JT�򝱨,+��}�B��D�3�
*�47��=��'gh��R���,��1ϒY�֬Yȴ��ݽ�߈
-��r�J��J�S�����k�re������3'���	�VXѓ
��vF^��z=3�*���CWX}�Kf
Z�������_h9T��ǪD%��ۤP��J�S�ѣ%*�gs�e��B�1��J�~Ë0��E�Qɮg��|�(��
i�mZ}���r�Z��BT��;���ɑ���|�J��J��r��ݣY�D�:�3������<j�W���>"rˡ��+*���*5���G���5N$�6x�
�R�?J9r��0�+Q)�ϗ���P�xЉT��A�������q�B#��ܨQ�En�*��L�''�YCT�ɕ�2Q��ۖH8�1䈯>S���J2�8'G
-�J��*Q�|M��-=^&ρ��;�����)Q��w��@ͥP��9�|�M�JQ5W㘛{��J?���
۳�i��hP�4� ���]���-*���J9.�J)Q�D�%�JmXe'
y �wb�3���D�\�Ʃ��f:ݹ�3
�X����J�l��9
l&������H��J)Q)�ϗ��QI��*]x�u‰x��T��ɁJ��8�|\����䙆�OY4
T�DBڼpł�R39�
�Y%*���J�#OY4����D%�i4-T�ԢR��Һ>*U�EW���G�w&��"5�M
-���F�y�����1*��kzە5&TZ��J���J	��*5�^�Jާ��Pɽ ���{HT�����3�b�����/��ɷ�dT����Q��^Pɡ������*E��!*�P�R�J
�J
"^֌J�*���t~�%*����M�
endstream
endobj
323 0 obj
<</Length 65536>>stream
-R���t�<�t��QTJ��(��
���j@��l%��1�G���!�
JT�>���J�
T�^�����3*-�K at 1�\�����JቄF�JE]}�F�?o�S�_�R�J
�J� *���J��f귿r�J�ߙ%�+5T2��&�J4eTZ6�Jy��>��D���0*}Q��ϩ1TZ�D����bΕ
���P�I�J9Q����D�ڡ���U���_X���/Q�
^�W;4�RN�Cc�+��T�R�P�[��5�^%*-�;S�+EP)��+2*ŕ�ݚ�2�d�JT*2*
�wT�����6�K=ޓ�ľҠƷ�٢mz��[�P�R�J
�J��~���JշJM�>�>x�<�q���ॽ
vi��71o��2��R�f%*5 *�W�RC�3K�g�냗�8TP�o3P)8�8>Vt�%�E[�R�3.Q����>���
��i��-Q)�;S��!M�R̝��
*�gxo�>���U8��/Y��C%*5T����/Q���Lx��P)r�������dQ�L��%
�W�3ιdQ��J�W�^|�is�����?B��
*-w����q�JuG%�-s�R�-KT��Θ�Y��L{!}�B�3,*�͖�93��IqW_�'�J�I� ?tźE�/�7�[�	Tʸd!P�]��K��D��F���>Y�R}�3�k������
�P������@%ɔ��8Q)��r0C���n
9�fϘ�2ݝ�o1l�B%v�8x�}�6��T��Y]���;��G�տ�R�J
�J�-�nsQ��%��f�D���E%fJ��|�5C���)��EP��	�y�l����ࡶ�ᲝA��<TZ
��£R�
��-��j�JN�Ԩ�w��T���2��y~�h�Q��	�y�wo�6�5�*�
9��?�6��vS�B�a
-�t�y.H9%*������4�$��(Q)�;C�/QT����<�A��������R��:Z�ߙQ�74*y�N�>�}f1��E��'���8����~�ۍ�v�)��J9ܔ3�D���^q�

-�..Qi�ޙ ��uE�bHp��w�q�5ZT2��w^�����\�|q��r�J�Q�Y�J������z�6�\�i���iy�m:
R��*

6��w�}��3f?�Q�}�ӿ���?%*�?���
*��—�T�wƢ����3{���O���P�5�[�y�/����nM7���f�����W�����������l��r����3�J�
T:�6
�?��Y��
0�*�JwTz�7��P���ri�D��j޻!�b�D����Jީ
a���5v!s��Bf!�n���-F����?������m�$�ԵjTq�o��{@��v�r��g��w�W]wӘ��Nxx��'�0U�>��C���Pə�zs+Q)��=��KT����Q)j^�\Ȍ��/�9O5��,��
��G��_�z�ZD���˧Q)bм8�]����j�
6���t��\<���y���O����U�|��?D�,**3@�K��ԇ��ƬS�2���T�R=�3��3��� -d�՗C��D���x	�y��>�d�]
��s.5�>�@3
��7�ix1�f�y��!�n��PI���b�+S��+S��)*����Sq�J٨tz�Ju~g��.d�/�E9W����=��Lg�W�P�P��_�s��<
\��Q�0����P1]�
�L��7����ǎ2���d�i�˾ڢ�p*>�u*.Q�D��|i<T��C0h{VG��
*�`���v��3��z$�����vI�ʻB�"���4��A��EC%��Z�o
��V�v/*��L��~�j�J���u*�[cK
�P�{i?�䗨�t�R
�4�rh�ƈJN��Cl���΋X�lW�4�p��
*4*keւCC9v��F����Ҧ5C�x�fQI;/AT��(r=�5�G����Rڞ�ʹ
�A;8�k�+���q�R|�V�6x�9k
Q���?0
�i��`H��3�
��J�Z��q�G��Fv�&V��43*��r���K�Ɩ(*�h�`i�D���\9�k9$��Vvp�^�^iq�P	�y�y�p�ֵvІCY6x�A�
-�@#7�z�,V�y�f~��m`���欵�+4�J���]�S���A����J�/ITzd��6�x�D��
��"cp��f�5-^�s
�햏�+�%��۰�MF�
��
����Fx�p`�Pqa�@AK�i]��]vΰ���!���P���J�ɤ0�^Q��?��,T�4�$P)�JC�JK*��

�����-G�{�Ƞ%8���vb]��h��m��Cg��T.��!WȻ�l���R�������
��#�Z�`�V,;;
�
�b�K���S�2�P��%�JU�A����Q����{A�Qh�PJ^��<�l���7H�J�e�]����C$չ�����ϧxWy��@Q���
-�
�S���ʜe�Z�)*�vaQi�"��lJR��R�J��<��D�pQ�[��hSdPq�|���пDk��=��
-g9s
�+#��j�J�k�����w-TМ8	Q
-H%An�ػ�J���t�6�Jڇ#���;���·���A�:<D%-��*��Ϲe�R���D%�G�*%���������g������`�y�4l����]����za)�]3Dx�	Z*NQa����g��'u����g:�J?ɛ���`M>e+�_��=1^�R�J�FH~�Z_-֌����v�H�s�|�.њ��ÙZ
��Q)�F�.,��]���V)&�
��Z.��u��ҿBTrV/��ޚz=�����UeD%U����s/
>�ȚD���^
TڲD����#�w-t�j�n��|���"�T��<�l�H������Sϥ֕j�JyW#
7�.���B�QI��\	��;��J�
-�G��+�����/�!vU��5G%b|T2o�E���
IT
-�qT
-�%*E���RlDa���-�$T��<�l���O
��ٿ�^�����n�wշ,��g��Y�W�I��\Q
-I�h����W3NAP�I���WGBTZ��P	^����n1T��'uE��J'�J�.Q)�#M��/�gΈB��
�sޙ�

-62�ܡY3Y�kJ�\	
��u��/r-P)»����w�\�3����'g�g
��(ő���ݱ�"� �WG\TڕG)"�\勤R~TR
��Jy.TJ

P���+Qi)D��{�$��?��@�ݗ�%8���v�D:Ia��
���ڡ�7C��u�2�*Ex�.�Z�5�B-'1����R��nL*Y���QT��O.YyE'�JY(S7T
-�?��V�n4��V���uG%yK���7�G�����#M���p��p��7���i�mr���䏕�o(.��2B�g�+E�`2jY������I�;�9����^Z�P��5q�9ph����d�‰�+���+�J��ղlT�(
�T2�[�5�;��)��:��c�.ҏ*�\�R�G;*�F!��|m��a���,�g@]��<a�[%%vp�]$�e���
����{�ވ��Cw��	ϓ;���qZ6k�b��I��R�#��D%c��m���
Tʱ��dP�i�2�l�n��4���5F��BC�Jޏ4
T�.��o�\�/�;���%8��n�`��}l��!)�m�
��qޘ��],~�u����>h��8��
��ߐ��rE)V�W{T��G��FqR� �ɶ�P��J�0��%*I��k��4�Zպ'ƍ �D���◸��w
��q��/�}=W���dd;9D���Z�@.xR�J�\p�\�w����U,g��/�O�X*@�t�R;�4V��?;�.x��/
��bTrϯZ*�t)s�����A��Y��(�{��&��)d��:T�o�E���\)6��NC�)Q)3�M�L>�c��YW,�
��'��Vuvh���ؠ�ẛ��u���(���
"�`̚�
���
,�8�c%{n� [...]
�4��|�
*-W?���D%�9#*���J�u�*}[*���z�JK	*%� G�
���A�ݍf�f�U�Ct�ca��j���eZ8kf,w�s�Rп����G���S@��c%;�3
�/T-E)�sQ	�ZF���	�c��4VKʦ6�J��N���@%U���1�����w�eT�[��|���tP	���xZP�%*-E��AR�@ԩ���"(T�s
/��K��J�X��B3Dg��7��"t=G-��r�� �
�����!F�ڱ�1㿄ءV���J_����ޮ{����r ����Nd��86F�dw���B�HK�RDYeQ��δ����kT�D��*%*e�H�@��g��f
�Gk6���+Z�s�J�N���h1�9B��
E;TZ3r#��{04�����'Gm��L�iyI��
+u9E���G�}��@�L���S14���V��v�i�
-��ٟޒA%��
���݄�Y���A���?
L�@�T��F����,%*�?��Q���!���w��^���$��Wxc%��
�?<�;�
��53-w���xھۉ�o�8:\'C๺pM��c%�u�l��w4�X�*ᖺ4�U5_���+�g2��[LT�����䂾��U�g�*G?
�,�/����M�i�F!��S�JK7*��7��[n,m�߆���
-�J:��q�����J�hO�6�Q�
�
����;����Y8�%�ÍRx5��S<Du�v[	-t�X�1V�'�j'v�jI�?M-x���ȢR�#`�Y�p������Jr-leq�w#�6H�TՓ�iE�1�=6���������\T�=�J˖�
h�@��
�V����K|�L�6�H	�y���/��g8V
-
�[X+i������3�{�����H:\'N�G��`
e�V;Vrwh�)�5���@��l�@�gb�f����)��J�3?�:��X�Ӈ��t����(Q	߇��
��f���pQ��E%�,���D�����!(��`�r
,��E[��&�EIp�v��
-��䏕2Bׂ�w�Z��ox�õ�H�(<�x�-���D>8�hEb�
+��
�J?������Y͠?hkŒ�3?����Y��z�
-���bY�N٨��J��c�����NT���O�2�%���O�]
-�Kpŀ%?ۭxθ�n+�XI�о�Vz�^W]�vf�t%
�����xE�P^� N��%_w��D+�
Fb�ݡM��j�"tgO�,E�Ό�����:��)��B%�A_
H?�=p�����z;�U%*������ͱ��%�)��*X�J�4
T
-��m٭�,w�1F�.'獀�s���q��}gm�	�J�X)�4XK�1�l]�=X
n[���~f�W��YTZ6J�m�
��;
��\6��V�C��
2�j&R��g`,�*-c?jڔ�,�-H?����6�U�3QI�'H+?JTZ�Q�~Y�`I����Û�Rx�Jp�〒\��
T��b�f[�Vr���5�va����6�t���=At��H�[��m-��I��?
-ZZ��d]�&Z�Xi�;D,�r�������~3'ҵO�Qf�,r�_�d2�3*��W��.�)�sPU
HϹ(��JF%_Y���R�J�i���,�C
��Q ]����1G�iS��+T�s� ��Z��S�W�-�VZP��R��%A��em8��;o/)�b��9q���.������D��V�a����{�/}`��քcɢR�JD,��{^	�����ka*}�}.���aڐ��nm�o˫
%*�?ҴP),���N!a�
'���IE�Q�e$���R4ۭ(𴍍za\��`x��l+ɠ��K��x��2�Q����0�e%^*
-<A�A�$[��Z۱R*�K��@#,���`li��Fx��C+���P�n+.i>�;d�s�:
H�B߽��]Íb�U�\�����&�Jэ%�	��9XH�����6�3
-G�P�f)�턲+$���3�����-*�X�7X��K���p��uD*�³׷��,���w��5
-< �@)i�"Dk1�$P鳏�,.ý�]{��U�e3Kբ�2�Y1�
�=�:
6%�� '�'
��U��J�M���=KTJ�HA�X�-��eГs���K5	�ְ�f��}e�Y���
W�q�xf��;V�m���pY��,�%G
-�Txb��
�
�P�Z�XKk	<�
�
-����p�q?�%ߛ�4�OŦA�)y���J�����p���6V'�Yhd���O����z{�?�W�G�J�i:�$���ƒ?9�i�C�	�a�+N��v�u�o0�`�]�%�qE�m��H'����H�Uxz�V�k_K���?����ji!UJ�nc��O�՞hMxCeS|��z�KXY�a�D�̢�k��$1c8dm���w]ܬ����ܚ��ݚ2�d�˕���&�Jɍ%�Z�z~��
�Px����GHp~�D�[>�u+�P"��mlx\a�`j�����`��p�H�K��"���[g�����5�%|Prd�F��Ke�٩R%x8��
�
�\��X#&�14�K:��5��yI'4w���&��.�$��%Zm8t�6
��X!��jR��R?��ϯ���y�I�?JTZ�P�,��9�c
-�Ux^��mՊ�,y�.F
��m�.Z�E
x(���ԳEWdyr���� R1�]�E�1�C��s�j	�X�DZ:b�O�CLK�
���
�
/*9��6;����Fn]�?�:�R��|[��/��hVg9�KV�x�
�X�G G\�D����e�І;����/#�
r���֓�.����8�l��
�����*�	
-�Tx|d�������R3'�UҲp��Ѳ�miə�<���r���\�٧�Q6�;8�l�
��ndai���jκ҆f]�,������Y�p�.�do�<�K$v�%*�?҄Pɔ����ۈ�#�Hp�����	�͒��V�!�k
H�E+�Z�7Ax�-������gk��
-Ҫ��A-���Y�}��]<��O�`Y�]���uxB)Ys�5n9�eb�6���D��u��t�
ו����m��b�֊���I�B1�-_�W�Å��Y���#M
�*Sx"���g/#8lP��%	Jr�$[�?�y[�:he�V|�K�%llj���������zMp�@b��"4K��[%��@Z<b![ZC�_8*%kM�&��c��ϕ
•�B���J�H×[B��~���zf]iw����v���*o`:6o[?��
��~2�/�W��R�J�)<���!��z�E�)��VĐv��e%�^�
?C^!��Kk�
�
-Sxï�3�F�O�@��hq�~SjWK8a
-�J�,
�xY	]�tK�
-<&�
SM!P)�F�g�Zy�ޘ�g\�M�R�P)~�v�
�}t��[��#*��
��=.31a��\���#M�ܲ[4ז�C���pe��
4d���W�O1\����x3�vZ�@�.���xE!�BT�
���h�v������v�a
�^�w�Ҫ5&^m�2Z%���'L�H�Ы7\
�DC-�>��x��S
�>�k�bK�Z�Ϩo��4|�,ix����]a������q�ږ��u�)t�YZ�uZ�I�u��)�g�)Z�>�
H���%*�?ҔP�[%�[L��B&8xyZ�Cl�tTʬ�l�j��f�Ub�Ҟ�b�ZPv]E�.��i�k��Ḣ�����7H�ޥ��ʒ���`�������IH
�V	�� 
��?�:8-�Qै֚���I*/aMw<I�4�\Xr]óKuA��<}�O
-�q])��~�IDW�Ԉm�SS�,o�J�ij�[~13
-Jp�`��zf�D�$


- xHd�۩҆�U�%�:���	x��v6j�y"�ƒ�ǁ�Q�oƁ���5K5�%D���+Q<�V���v��Z��+����\)�)�cW��F:ݺ�d�/,�C ��!wȟ��'
9�,
�]a��R>/:i����:��8�g7�RG�JT�~�)��;8�Lp���̳���l��cQ'

���IP®h�D�Љ�z�ց���dՅ.��d��NwY�]�}t�8V��؎Y
N�I�,YIC�>(�xN�BI3����!x��\
���%E�-Ntp��XX�7҅4�.,����Y���[U_�d�Y�1�ܱ�ύia��D��\CT�-�#�,�$�+Y����i:����ţ���ؠ��͒�WsX��
-n�[�L�v����+���H��	*%(<���t^Y�@���7K��%��89�?�x�V	M�H��?�*߃�J�&eqZ�RO
�䡒+=���_X�5
�����!�*Q)�ϕ��D	�{]))
�J�rW��
��v��W�G������H�@�l
$�e�>�2�w 6H6K��$����|P�
-�upZ%&�`	�r&���ˈ`}^M��
����S/�^|�n�5K\�Gj�ʯ��
��h��xN���p�u��Jzԑ$�r�)�Hu@&/�w9���Y[�?�p�[+�ܡN��
6b����u
{��sc/���
-�JT
-�Y=����sȶ
/Q���&�J�7G$8�w`6�k��u�!/����!T���S�;�%�X�0�)Tv���.�8^mQ)��x
8_�,�q �?�v�k�b�kC���ϰx�<+�JF(���0�Z�
--m��5�SE�R�py�b��e3W w��SD�;T�J|��;�.�m;�7���;�\W
-�"�C/�M�2�.n���Ԡ~�
�
�
�%1�(
-���+u���
-�U"b��:,x�V3����^��:\|Qb��a��m�6�d��xm�Z"J+i�N��x �n�z�V�*3�#�ëo,NK���\G)r��u_������pw�'���pv���_|)�[q�7�
��W���=Ҝ,��,��c�Q�J?R at T�㋓#��qS��%-�S��ݨ��N�a)���BE
-m
� ��ݹ@
�,\�؄ʮ ���$�g��Hm�I;k�$�Z�Z�����h��Jw[<�T	�������L�-mu��7����֞��S�g��C��#�U���\|�V
�%�!;�

��ɏo���I�u����
q��\�%*y?R$T���㡒#36	����m�hgi�-xH�u�����b�$�;-�B�O�U2�R��-14����u�!��%���)�K�`�
-���+�m����!^�}iXX
-A�
����s]��wʰUқ�4��݆�u��<���$�����9�M6#�7�;h�������
����T���0����b��b�۩Ts�`~*�XTF����L�zI�����jp6x%*5&TZ��G�R���q��
�ѹj�`g	

�lu�O�n/S���������ᰣ���C
	�C�	������F�Õ+K4Dn��f�w�
�
-�x��5��! %��Z�(¨x8���f���,
��_VK[Mp�>y��f
̩g#w�1?J��%s�΃��?�V�ǕT;��ٍ�O3ۋ!�#���i�C�����a<5
*Q���B���?�w	N�; �G�Y:��a�
�A
K(��+���f�+r{��^�$��W."e�'Z�U��8Y�ҿ��fF����ӭv�6K ��W��k8XJ�
-�N���
6uPJS�͢��֡�/�����AJ\��.���C��`)A�>�\��f�����t��;�.xIT�>����㪫*�Lc8�&��	*UD�</�y����4d�%���`��[��[sxL9�T�.��2/�Kp�ߑ�
N#�m�Bb(��*�R�Ò+���ߎ�e'�$/��fɨTP
�px�y`=-Ja�
���A�JӂM��ӿh@@�D�JQJJ���(�;`:;�Hܣm������«
����`wv3Vj�>�
��p��^����f�e�a8T�R�Q)Wƫ��7Q��8�AM'� |}�d	n#���n�ãʮ&��%S��0��8��
�C�lӡ3f��l������6�e�_�_�q �+F;i��
�Y�*<�x�gA���BP���s��\�gŝ2J:ӿ�Z�H(Ґ�D��AJ����z���z���&��� ���3&xz�Ԓ�J��늷sK�
r	Í��_���y�p(��+Q���ڢR59/�
�/�\Y2���	�%���!�� 4F>|���$^ J�tࡒ)�7���]��
o��,��:�!�;.�� �q��NҢ��,�ī���h�`)]<��
�H��CW�Y�

�JF.�^���ǥ� }:��������b����n�GVϥ«�|�N��mf�V�RX,e�
�C5��p���w��׶���C�����̏��R��
}��O���w0l�i�hg��R`�
Bc��9S� �H�eA��4��=T����3�F��o��8�R��Hwy�\�w��g���
�%T��œ�y`��R'��5�;
��JY�cOp��*i������%ߞ��c��L`��Hȡ&�ݣ�6Ao,��l��oPxU7K�F�p�3��#'���|�	`�;����tv�w���z])\�Ek��k�JκR�Jޏ��"-'�{��!��b��,�

)L��

�AzJ��	J^	��(u8��q�s
8�]}�M�Ur�!�S��˃@y��K�
��g*B����xE��'Q�gGK
K	PB��)
~+��R&��*��x�,<��K�B!"E�)W�l��
��MЃ%����p��[Y�9g NTZ&�����|��[�sx�D;�3r���4�×�gF�hj����
JT�~�f�$��؆�[c�%��l�h�Ƙf���
��ޖ�c:�6�$s�J�2%8�w0��®�î�]%ॉ�,TJbN����5��,�
/F��g�nЖ�G�����4ͪR
���|��;���!(
D�$-�*k
R��y���#t?�t�;�A?
��Хg:^FG��8�‹�R�4f>yG� xF�&x��t%���&����+~W	��[[f]����%�!�D{�^�mn�h��%*y?R#T����/�~��
��95K껃nx8������Z��%�xȀ���%7�a���D�
�t	���F� ®����k�,1$߿(*����T
-���I2���<�c�$�4�@��w-�ˉٟ�Ѳ�N�:u9�/

�6�i��P2�*a�w�����E��;d�r;^z�����߾�J
�kZ/�,^�4&A�
w!_���Ѕ�%������X).v�+
���!*���
�X�-Q���ڠRf�K����O��"	�4K��4��1fHu7
-�[�� -�B’#y��v�DM��
-��3������;3�HW����k����dCR<4���Ǿ�cd���%�Y2*#xP�Ğ���<Pm���ō�i�DGK�;��:w�U��!h��u�����{},
}����K������3X�#Џ�KH�aN��S�R�,怒�u�ZC������&6w����/?*��]W������D�+������R*�Ub��tC
*y	�%=YRe
+�`HABc��ң�8,�o�$s�a�"�ļ�.�[���L�V�
�F�<�*��.�JUCR,6�����ZBj'�d�dxh���+
-
��ؖ8<9Ԋ�}������J^G��������⡎�R
���<1\�9�J�I?��
-�hÏ*�?�CϑK�aH*f1��;�����
-< �:��	]�󷕪+y,&���w/匽�YWjkו��hKT�~��Ox��l��%��_�d�D�.��Qh�
ޡZ�EJc
K?�$���K��ȹ�KvJ�>K��)��l��
N+P�W�0����K�J��3I�k�
�d�s��f��f	U*D���œ*hz
���3-����%�D� @Iv��H�
�w0�#�C�x��JqT��(��o�S,t��)�Sw�D�h�6\Sx��#'e�Y��R�,��
-�J��W�#�n$�if[�+�;Hax�n/�
q����K�b]�D�ď� ��1)N����%�oL7Kh�^ R`�
Bc��?�%�e�h	��j]Sx[X�W��`�
)IP�	:
+T5�C%S�#��
--�J�ux���+�J>�G1�ʚ�jX�z�Y%R�0�J�O�y �TP�`�%KA��1�*,
��)��
-�;��ԁT�~��*%Q)�$��V�
M.e��ϒC��#m�K��"-z^'�,������\���]X��X��
�
�i.ѿ�
+�@��0��L�{�1�-��$sz�Jޏ4<*�R^�R����A%�,}4K`
�C
-����
�Q���L)8�9�䧸%�����T't
(���B<T:
�w���������T�C�
Lrp�St%bST�7KL�N�īO��`7h����*͖V\�1�T<�N��hq��w8���2<���(
>���J�������w�`�C}�Y_gDݫ��c
���/�'Og�1����=

ُVh�
f?�b�ǞyN�f��;k���r(
�����Z�Z��_�>z�J�ipTJbR8���Y/��`I�[�8\4K|��\w���)'
׾͑��h	� ��
���
K�vi����$�� 0�h���
-�p��%8�w��	�
-v�]%����v>����d+I��Rv�$�W<�x9�mh
�ks��X�$�R��!
���x P�
���ђ"��w����n�<+�O�P2�LB���d��RF�D�܍%�_�6
)<��:
Zۢ+�o�rz�+XiL~��S��백>μ?x�=;x��!u��O����
Tr6��
�G��b�����0��ۛ�u���ihT
-s�Lw���w�p�E%!�͒j����ḕ�
^��N�ҩ��fJ�5
-�(�IX�).�Ku&����28U�SR�d�8Tj�A����<��;3��
��U
-e�0�3�;�D+�U3䇥D-����x
s��(��h3��
�x�ċ��u�%�HE������w��Q�1�?�2$�w#F�z�=��
,�P	�&D�J<��������T�qRFg���ٝn�ѽ�m�fI_���#�i����w0�U�6&�I�]a���A
�7A�/y�>� �8�?2u5]W:��u�D%�Gj�J>��:�Y'�)����	�s�Y�UZ]w���!��hJ���:�iXZs
��t�%�K�LN�$&�\ǣ
-���}{�@%����v`�YxV���
&��l�f����[4�� x5ē���<���՟������B�����w���%�YMG
����:��K�Ҙ���R^�eAX�g� %�(&D��<��a���-Q8$Z҆O�)<pvW5
z����ɫ��2�F*�y��BV�Ͼ7k
N�~�y�B�
-����+o�(~�>��F`98�K���J%*
������~�LU�R�Y�C��T�
��!
��p�R�
-�
,�@�IqTz'�\^d���a�qP�a��{�8 u]0T�:�w��M
6����vP)��CL�U
*Uh�\�u�](�$

h�;������,�Z� dY�OV���a
M��
m��X�2���\�ÿ	����a�+��(
b�4J�4 }a
�LL���K&B�����5
K��\��E�G�[8�R�
-���' %�:�������]-Y�p,L�Z��.���$�
MJ��5�a�A��ݽc���TTJ�����|6#���T&8���!�����8<��p��S����	B<�p�~��Mq�6��T��h!&1{�5���Ҏ���J
*�
�wwާ�(��v�l����N���{ٺ��}�#��{�x�M3XZ"

�q��mS	K̼&Z��y0�T�xX# ��ڎ���z�O�ˈ���~���!W�D%�4&1 ��>�L�K�]�
�xV6�:|R�Z�
�����}Kn�6��`�P�ⱌ%���]%>e�'m�qf�<������³�f�8��=����
-�p��–<�fT^�R1P)ʅ3"e�g��K&��dV�Y"u8v��{7����L)hx���~�kX������풏Ku�r�
H2�I!S�G at i��aX����P	G�g���$�x9Z�8&e�����D��*
���9<=t��͟,�@P%�]ҸT7`r��(���v�c��E�?{�m����O�­'T�V���%�$F����	��qɃ�
�ӆ
PXt��t<��d��W���2�*����'�~�<�
V�
څ�qf�=��g</�X�e0�q�+��QH���n;m�՟|	���KT�%*e��E$g:�L����S�f)Vw�C

�A0Z��M+
<X��L��*Jo�
0U�LˈD'1	�oJk���*Y�@�k��B����A�eJp���b&L+H��v�ݦ�I�l�����K���瞖

�m�Z���%,���ٲu�%d�����J��LI�Ѭ��=�,�����;��ÿ��C�P��&"�S>�L����K
*} [...]
-�Z���=]����\����cٙ�9bl�D[˶U��+�Ž�&=���o�����z��O�:��V;�;��f%*��d8���~euCY��Ϫz�E��u7��û���`�S����
ǰ�J<�% �L�c�åe�7(��d1��o�
-��
�qA	��t��
t]�'��N+���w/w��`WC����&B���f)$^gh

�)h S!
��,a�+c�"Q��Zb
�0H�P-粬^�q"P"�����=�:��n��;��h�G:ɬV)��
%�I�H���3z�"2i\ʆ�T� ��£E�G'���3��;7K��O�����e�B�qyWC�������.h:HN���^��:�����5��܂3z�3N=�X���c��	�KT�%*EA��j�g�x��l�O�r)ө���8<��h�S��O���xTx3,��U�0�Х7�
L�{��R�&:�Iz�D�ڿ��Iv�p�Ên=�>�"�u
��Jp����]�Z������W�#ZY1:��o�o�h����<�x��u���
�A;��v���]4,�O3�~���%rgD�P{���Z�x��4��т"��;ZU
-�9Z%�5b�N`ҧ�Ahrp�Y�ʰ�
�
-�M6M���t��\�D7~Xs&��ߚ�e��XxB
l�8�M>��/�J�ȟ�9���\��O���t
]��o����Ko�
���^�RaP)F�e5C<���ي�Y/��fɪ�Ah�

�����e�I�p�K���1Vސ�
����j�ܲ.$���s
�*6����<��6��Z��]����⁨�u�����iEF���RZi��x�V��X~ˋJ~�d�׀��y ��0h�uh{���\�uM3يAȪ
U����.(AG{��h�"E�wr���/�B���S�)J�QBLHRH�z>�G�D&L�K�]��R%T2g��am���=�9����
-Vx�l���oY�����)
-�*��1q�OY�'�b�u �V�����	{Z�W��D��R��
g�酈�Yw>�]6,ś%]w#��Ԭ�SI
NS��}.8�'f8	K��)��8j�<\��d��b�3��r.$Q����ꚽ���6�S:�@	��/
 G�p��K��i��r��&WC���
��
��w慥�Y�K�j�Y��`
��֫g��A�wT��,��’iq]�5
��O�x��Z�u��qR��o˃�f=�4��cG{��(
-�gYg�n� >�8(}��z�
& }dB&�K*|>,U@��K%(<���z��f������
�qN�1,��CB>s�+qr�\��w0o�{|�
�Xh��^B�ъ�
�I�;��C)�[k��cx�J�G�(.TC���Y���/Z�����ɺ�txOΜ���;GÔ�A����3
�h���z�-���Nq�]
-q�f�*�E$I��t�M�
-�
7�d������ww@��sz/t�;TR%8�����VTh�"��)���P']yQ�wó�+�'�Û���{�8M�vKļ����Z��'?6����jB����a
]<l�9��v��?�߁v��hYGÿ��O��&Q)J�(��I
-�}��?��ᇀL�K��v)',��|�SxV��
�15�AW�.�s#<Z���k!��d0D�y
iL�A;�-���j�Y�A���d:h�o��
��6l �o��
���Z�R�P)�6	��p����tC��nv5	έ���{�Y��p�t��@�0���4,��ß��ʛX<[z
\�����B������t��TǤj�P�����Mv
-�:�����5/dJp�;���v�Rt��Gi��JX��,x��g9�i2h/�輳{�vR�c�kX� 3�n�����6d�����I�9k���t�`@�i�s/���hI����
�e�$+��m� �T�����O��_�L�cB\�v)
-KѨE2��~�;�8�4K�a	P��W�,��s�Y!� ��]�c�v\Uj�O�u�Z%���Bp��?Y��#��%v �!}
ݺ�		�J�7����TsTJ��
��	���p��<��6K��c:�GKw��a���
,폰�V��F�K�<`�4�+�-����ԋF��cJuz��ޯ������j�
��€RwJ0�@��W����N+�H
R�*��Q��iEW~TJ5K�i&8��m�FR�.<��3�,����!.�!�Z$T�I�Q�寴HR�#-��w (
n��;Z�H���q|m;��V)J@�&$�����������? ��K�.����Hx�%{����=�Y“�G��F�
-�����q>|��
�%mо#n��;$�
㫿 ſ�d�ϐ�`�������S洬�{�h�7��H��yt���ȓ��TT��R\6��"���-�fɭ�

�p�R�v+�eR�#XB�����s
-�<`��vi�uL�3I�d9JsΫ�񬰂i�
$ј�ɻ�ar�f���n��v�c��Z
�B ���(ᰂx!=T%�;��
P��-��XI��	��i�,�A�]Z3ZB�
-�'/<�,K-���51S����V
CV]�tC+XV3���a�](N�)Y���uG���^BE
-L8*
���
P��s�'&)H@��_��x��hz���]����C=t �y(<
�[�,��.�
ύ������LQ�p�V��{}�=O�
�;^�����O��!�:��Jn�Y�bg;�x;����j�J�U��
���1ɓ
}²!��R�K��^���_w�� �RP���3���#=�%�Uޛc�D���K�t�chJ ��{+r�Ӑ�3��$US���
�
 �8+p���pXA�
���x�W��"�$���l�`;ٸ�X�ReT
-�%��
���@-���x���t�̼������p�D�K�0
Y�Ń�КF�FJ�x8@���YI��t��H�
�e�F������7 ���{�]x��W�I��x��
^:<��=n��t����
-7Kp��O��7b��R’д�"^�J!X��;�P��d�pɠ

�x�4N�����K����ɣ޴l�t��Y��U�
�C�q	^�JE@�pD�uC$�Xʆ>f`��lݐ�b�[�u7qx�%RM)`��ᮼ��R�c�>ⰃZ"!�)δK.a��d�z��^/
H&�q��2�Nu���z8Q�|
U�o�|���ܧ� 5VɎ@�"��F
-^u]X���}��
��(���Lɀ5=����������*�R(x0
�kA�J�R_K �� i
L�~ih�����$Bf��_��Z��$fY��������z�Y���C�����*y��O
J�I@z睷�y�
M L�K1XʋJ"9��Ę+X�I�'O�Ғ97�ai]WӺ�S�E��<��*T���.'��m
F:���u�4�6V�|NǕ���
���� v�~C����J��>�ЇZ5�!���|��n�M��
8<��H
S
-T<�
ǰtb��>����V�.��	s�:6ə,����J+�ޯ����@$xϸM��D�7�Ϸ��Ҿ�xH��(�!(]"A��~	.��t�� %�I��~�E�ـ!\��!�r�R6�'�
4P<�|�
-ڥ�
,��3�N�+��5b![�y�(�����"y��B�n]<`��ՠ���hGK�p���$��͵�%� ��z�M~�zK!�j� �
X��˯�h)g�$�n�4Q�
�s#|#F~�F��f�Դ���#�����D��w݅
�����Vɜ�������/�
Zq����<g����;D[�R�Q���,(����?��!~�adCL�W���Y�< �'����A�p�N9�s�vm�leR�v[s��s
�L�bA�#lJ�`��� &:x�&Q�
��*�i�t���&;JLxy����rZ�P�GAIV
�r�!?� Á��/qAWU��'�y ����Am��P�r�iqu�6D��5��9�>n����;
-�8����E��� ���V+R
�.�y��*�Ę�B�Eo�����Q�oѢ7�t�da�+ӡ%�$BTr�l�'Où��(x8������%�LĪ-��X�-
-V_c
͝�U���u�c:���`>�N�M�[�����h
ݡ
<���g�~2���A�
qB/Q�V������r��z���g�駦]ʐ��$9<K�@�4k��G&�wa���
ߩ}��P�R
h�]�
gp��o�r��$4��[�BYN�d��0�Q��y�:"��ȍ�*�Q�кm�c��d�
��=�`��*U�߹�$W2���&V�
� ��_Xg��/�ʏJ�fI���=IAC����-,�@�W�O�h<�%�t��S7b2f���F$
I��W�ژ��þP<qR�D4k��
-EJt��
J�����c�"H
�F�
�#0�~I�RK�f)
O��7K���߈�
@�u�wO�YXĪ��W��b�Uܢ`
V����fE�l;����G'Ǟ�[��)+��]y�dvh�E����wv�I�JTZlT��n�{����3*�|@�H�P5�7ֳ~��REy$�
�3�x�x*�YX�����O�z����R��g��L��9p	S}0a��<�g�Գ�$D$|��{ƙ�bLϩQ�
FG��N�v�%�u=�У0��3�Et
-����;��rl���#g�%�b:�ŝ,y�@/hX:��:w<F3����F����C�*=�@�P�NQG��Lޡ́F{�r��1
������f����h�j��h�Z�
PR�a����^}u��WԳ`��W2)`zx<f�,,�'�
	���
�r�`��.�
?x��ӯ�g��n��Z7�?3шC�`5�rk��\3���4ѻ/^wA�	�
ӭ��d�����
+��pء�3��CB�P��b���K���ӗ�����!����V�
1n�AQ���3�%R<��ˁ%�[:�י��
-������
ۥm)�!.�|��
e9��
6���y�o��
"��$Ĥ�	��R��v;�\���!�զ]��'�|�g�k�
��e�qx![�dz]
���U�
b��~��/��z.
K�\X��Rt
�A�=s�U�;���N�@�gZ\l�4.�"�S'b6j�t�V�.��$$Y�H����
vRy�(�Q�p2,���+AIҬ��
)U�J_-A�ػ��ELR�� ���y��W0)\z�U���D���ۥUn��K5K/j�B�

�񃨕`	H<��o �C� 2��E�P�����i�������E:9ƭRR�A�I<t $S
=V�t�

ۮu�[�[󔳃;��TsTrZ%
J�~���Ғt�C$h`�����JMhCXr8<3Zz�-��
�
-o�%�[��s�B�s�v��q���<��
.�g��A&Nt�r�
���8�sGm��0� L"�n�
wޕs��۶��i=�Vɮ�%�u͠�L�`Ô���;�^�dg�_���X�P�E�(�Y
-8��l�@�0��&����
�ymkc֜b��f0\2
��N�bA[͆���U90�Y��x`=
-(�UfP����i�xG����[%��������o.z1���ϛ�">���W����K�.IX�9�
-��LXܓ����`�a�����P�L7�}��d.\�	"��&_]P�fD&�J3
k��0�<�
TᏑ�O��O�����c&x�#m9k���n
�a�V���;��TST�<!g��jַ���dCR�*'��:���t��sP�x�poiP�>�{Tސ�Z���n;7��d�
�V��ԛ�^-�t���<�WW_� ��s�6��wC��R
�w� )�N�
`~޽���]�nϔ ��*P�a��D	�C�%�	�M����+3�'�um��y����!��q��@�Ԯ]���nq�S�
�����KTK�\F��L>��Pq�@�Z�$fYw�
�w8R�⡻ʌJÆkPb�5�h����>�)�	��(��w`��z��_{!����}
��s_xQ�˯���K z���K�����ap|cw�Yz�o�8���zLf��0e+�
��@��sc��x]�~�,��z�|[lS�����4����:3_w���[�JV���O��?�Ys

�J}p�$
�A찾wƢD�zA�9s��ˉJ�"�?f�De�'g]�����g�q�Oܪ�
-XB���R�ρ�{�
{KC"B��)]��ku�޻#%D���&��,0q��W�3�:�ɇ~�g?ӀiN�e�������aLA����^��F�P`�:v>�n�����
/
��Ai��W_��_�W��fU�d���;T,��~��BO�:h/�>
֖��w���yz��N8Z�V�.��N;
-\�H�l
EL��{�P��6��v���-
z��q�
@�^�P�v�U�Jv�dA��T����I
-���g��ϳ�>��&�K
^]��"�%�>�Ձd��
N�d�O?��������Оl��:�
L�**���b���r�	��P:�Ltx��Q���m,�\�>qK���������f��Y��h�6uƢD���R�N]�B�X���7ҡ� ���� LZ7$�,R#
/�
�Q<���p�,�W�k�^qi��!�u�v����ۛs
�%9
L�0�16���N>��kA��,��yδI���I�ꀼ����O���9\t��ˆ�����h��A	&�#7���w	P�zAGE�-*h��/���EX
-j	/h��԰ݒ
^pH�N�l[ܽ� �qi���eR�j���y�o@�t��4��I�S�Z�p_�q�p��t��h�G�̎6�U
-�J��\�b�s��y晧�~
-���yfγ�!.A��護5,}*Z5�U"
!��Fbw���뱵�d�����p�Wv?b�c`��
5��;��U��h3
c�?��s�x`�'��������X� +��J�C;��TKT�RV��WGϺ�լ$g5kqX����S
-�tA�3��;��2���R�i��x���.
~�A��
G�IN�T�(�A�S��2
>k9�"�8$Ls�-�D�7f:�I{���
|��� ��R�~/��kQj,A�&�"�!_W�C�{X������Q- �K�P)1�����1X���~}z�{��3h�Z�4��A������j`��DՄ��x���C6��I�n��
��z�'���}
(	�5���>���H��O�
���-xy�<��g�~��'g?���'�|�iĥy/����
-��R<8�s#o�N��g���q=�|��3:ƥ��2�_
�uM��M^�Q 5�.���h6=��ko�y��ΜӠ=bO���gM���x[�l��Dc%ܡ�c�@�P�RP�[�����0IZ�y�Uڳ ��_�.Z|X��
�9�i�`�֑���R��=����%��Z�xI���0�,GȄ�D��/|���=��e at 2���N��E�r���ݞ0i�}��A�n�� ��Ҡ�W^�޸Q�c�C���.(9��
F��Q2��
P0@��V
K�Ë̱r�R�Y
-���4���q �̫ʀ=O71;���"�J���7� bn�l��v�lh!R�IH�i�U���ᆛ8N
-�f=5ǣY��6��c���w����
J
_}���/"&)D�5s���̜9�ـKϫv�e�% ���*ɰ�%�;Yz_�f|��ɴ�k/Ɇ)����2��B<�R
~�+�Fz�
-j Z� ��:q�em�?�3/�w�9��su�|[�M��m%q
=�C[�R�P��~�j��BL����E�W͚E���ax)�o��5�0����'=x��w����WR��u� z8�C�6GA���{�](ɩb&L�����<�z� �Q�s
��� � ˩�� Ҧ I�M�Lǘ��  �T�͹
-pU
�fč7������EA��8������	�-�B��ݗ�-z��_����
���ćZ��+�
,�@
���������1;��?���z\�^��&&]L��A�8fγ�z\;���~����ڷEK���ޓ���W��A��QTIjPz9�I1T�Y}��Ҽ�v�¤Y3�1}��i�
�6m����D\zn��%:3���� ��������
-{I^����fF++;/��vM)���.�"%8q�"�����c3�����-�
�Ru�̯B&xζ�;V�whKT* *��#hP"A�K��ϟ7O�T��5���5
'�f��<
-��M�ma�I>p�]@��S
h�]�
w���K��v�
&L�[dhBlR��]���c�@R��9
I�=�z��v�Lg0	�;j�z�}
�0��n�-��{,�P�Zc�rK��d-վ4�
-b�D
�������[�D��Mz���<y�P<��4�a
�:䲁���ܳ{�h</.�dBF�\�;1
ٯ�P��JEjK�TsĤ}Z��N7J�ޝo�?N
JAG�(
b������M�Ҝg�R�4c��ǦN��z�L��ش�
-��|��.YX��R�Y��
�U�{��a�{�o/	�dh��:��t�J�dc��,[h5Ю�B�������,���x��o�#�����"�^"�t�|[�S�����R�X�D�b��h��>:��ea�,^���4�l赅o�5��͚Eu3����p��y�
���}w߮*oJq����v	�x
۷���&�]v����9x�T�S��`����o�o��kC�r��ֈ�%B�I����_a��c:����S�QR��;U�:��{Ǝ�(@IuJo�A����+��QҘ�X��+>�8�c�D��ћ�|
�-YX�<Q3��^�%jq��r�� �C�U�K��z!
#�!��R�� C�����َZ¤�;�(dYA��ػKt�0�{Ǝ�8��)��/��rA�iT̊��*({��'&)Hz���3��G�LU�4k6��<KF��PxY�]]k/iV-�-Q���X�G�`cA)�ɫj�X�x
:<(]	보"�Ol�o&)w�
-{�
��W,HN���	�����JT�-*�V���>������lY�5����]���n���ta��Y3Ի4a
Tޔ�_�ڥ�{���d�q���~i_HrP}c�ۊӜz���R/�Ju���ـ�+�u�qPv�W
�1��m�v�E�h��>�}��X��K5J�
�

-�n
u۝��?~��)�T�ӝ�%Sy��d
-P�b�_�J�|^�ĝL�%�.,���\'�Q)�%�,�n	�׻�y
:X��@�9J��l;D��	���̄J�2�j�M9T�x��~)��*L��_����Q:�󁽻�*Nc���[�(�Y+�wPr�
�a@	FJ�B����Ǧ<:��&M�8q„�'=��I��
�.=Ͱ�� ��;�c4K��8Zra�g�S��v���©�J�	X'�X���`3�rc��'�K�#�L ��E2Ө|�*�J^��os�	<4v���s{�m����N�|�
�w
�D�Z�R�|`J�o���k�p�BlY<?p	��i�aɾ�=���R
�X��
���XyC��A�KPzC�;��c�(��'L� ���Ȥ^-Lt*ө�
^0��_8�L�aPxo�yn�
��؋3]+�$�ꐼ;�ˇ\5��o
��'M6�NwJ��)
<�
P��Uu��W,暕L7(��Ru��UK�ڒ��@�����u�`��G��H�\�
�����F
ҡ��Hq�6�
	�Y�%��N;ﺛ���G�n��"��窴���#n@����u��wA�㺀���+�"�"(=��ǪQ�6UaҤ�

?����0���j��|z�xPǼ�W!Ow�,A����u癟1���
-��1�xu�-�Z��u+z}�XDb�!0�W=�3k(2aP���!���7ҏn��Z������b	<�b���w
M�b;�%*-YTZT=*�r_����"PI��g�4=�e�����Y�ЯSa����F'�����L፰��ϩי*o.��A�i�0�A�p�h�=@ä�*��T��� %:�����	 J>�+
-����I�b�H*�5� I�g�MBLj�1�ē��CRH�:,�qT��#S�Ϝ�Ɏ��A�a73�J�X�A	�kp���T
�@��޴+���{��y^T�	�,��0����K�C���k��:�G\:�{\&SK4m�Ð�C���ʆ�P5HR�Z�$��e���J��ށ
����3Y�R`���p����@��S���FIa҄�=p�ر��w�ر�?0n�¥ɏN�����O�/�gZ^�C��
n3��`�TH��P��lV-��+�	M�X at 8�����FU
�X�
-U %��M���
YW�v����B@}�򤔽
-�ި�8��bq�~{�m���?9V*Q�����Ҟ��g�ԓ��y���<��Y�)`)���LX�܇���CBȤ�[E��9�q��1GC�����z�v��D��.�z�
�?���"<�W
	�
������@�t0O"L���({��У�)Pz�Y��⠔���g}��bX^a� X�|�J�TL^FXz����"�|��R���
��
7V��2f�sV��*
*\R���q[�7��P� ���Q̶�R��ҁj*
T>�
8VȈ���N8ɲ���p���N��4��#1@ ��RF�$=/�y"Z}�U�4~��c������{����&�viڌY�k�z� ��Y�PL��N�H��
zF
:���re�6^,���A�^��4�;��!�Ƴ�	�CFnYe9��o�s~�����	V����O�̺�]v؆o+�c��
-�JΜ���c(���֧`�b֬�3gΚ��K�.Q
-
a)�j����b�V���y�*��Q"~��.
�s
�z�0ɩ�
-��z���cwF&�n!6A��
-����у�^.�F[oCx��in�=-$u׶�z���R�75J����tO?;W�q��
����8(����ɜ��>X*�F&L�q>������T�sx.,Q!�_�y��X<��x=��J���+4L���\ؼ���
���J�*V*�U�D$k���ID�a�0�GF��(`�)z�,
�$�d;^úu�5c��
~p����{�]w�q����λ�pI�KS�74�:��xb:���	
t
�Bm	��+q�<��ªEk�%�a'�`
l�F��iT��	�]L^����"	
���` J�ց�X�ZC౱
G����J%*
�L�􎪰.�E
^�{|=����Ya�B��\��=1?�
-U�%*5���A�n��
�|�8�K��>JU� L-��o_D&�&�&Hu���m��~u{��
���	�
@$:��:
۹KW�I����i�� �Q�z��΃ܢ�]�A���Q
�k�8�k,T� J����K��Q5Wը�%>��
-���j[�!�
��+�R�cu�A`�ZbO*&v��!ӑR��X�d��}�kA
+6����S���������E��n�dJ�
��
�)�u��ns�>�	����1�G�
5j��1��~�]
-�T����$.��Oqy׆������T��\�{cn ^|!n��B�m�_:Ȗ	�r� ��`l��@�I�Q�=T
##}%\��י]���V�
� n��L+���c���qtm7$sy�J��JoW�J�M�-7�|�A�'������Ӧ=ϴi��7k����>ρ��t�|��$8W -�Z@��{M)���v閑�_{��+.Wo����(ɩ���鐃0��yޭ]w�T��/�������wR��$��Z���$Ht�M:�����
1I��K\J��M�b��|*�*�
�҂\��9o��\b%s��0&���q(
� 
�w���%�JiX�Ad^y��1�v�P�
-���ܕ��6Gu��%Z`� ����q�0R��U�v�dh��TB�����OdLB�n��w�s��aA.PJ�R�����u�T���{����=��[n��[F�
s��w�;v܃
K�h��/H7K>@F'\�yų��
\r�m2�.�ҵKgͫ
�	&
��p
��_�C�Q%�XnU �
�)���������������Ꮇ��z��w�V�1���
Y�p�C[�RmQ��|E�?��OD��x�B��?]�Cr���S�ʛR
2BTz�
�t�9g��$w��#Z��[!SK�&�t�z)x������c��$gI�9� ѩ6	3]�3{)L�T��75JpZ�5	|��;(�>\) ��>,fb����dH�r/��E�*ai!~o@�G,�hq�z\�ѽr��,0A�Dۇ#�Cf
�½��Ń*ѡKR	��O:Uc�wW�FI���ZJ�((���V)��
�{�e���n3�֛oy�
��8�o
5�����c4��Wݚ%���XB=F�Pw��%��żq	�CԿ�ԕ���yv��
��
�5�gyJ�гXwJ^K�
�&›�X�DZ���u@<8�t�@&�ڷn�;o�5�ra7D���m����J��U���J��Ǧ<���ɓ~X����5
m���R��%���ܥ�8���ɓ��1
丫�
̸I����ڵm�Z�X� �4��
R��{�ް=�%��B���*ũ�
���r�H*�a�����g��0I�: ���\��#S� v.�
�T�P�)
>���|�j_�T�g��	xq~|!���"B�,�!����.����W��^"d
��h}$!�1ŌC��J�B$
��I��b��V�t���a��,+��&?*�����-�S�͍�w�I�������r<�4�6�֛G�x�u#F\{�#F\w��#o�u�mw�-V
-�4
��!�,��/���0K�����W��D9���˄�M,0�u��cp@7��<
�݈�
�^�3jPJ�
��U��fY��'����Y�'	�M$�ׅ����Q��<�$����2
^&r
�Z<��<���h+��R�U�xp�u>4~�z
ĵS�輛h<��.]���Y�0�r҉�1uhiN�L
M*��륒�z����k���
�
Y��9�$��!	�$��.��1I�:"��A�E�:��HI�)�$;�
��>�J��TU*@�0�(
�}L,^qm%hm�k[r��-��v H�3
.��%��z�ƥ�LȺ�Z�h/b2�?*,
�ZQ�H:�n��Ox��+��,�
���!���!� ��S_\�M�n�T}�Q�t�u#�_s��W]u��W_s��o���S���x�f�K։u2i	����{�k	���#p��d��W�2�
Q2
|�
�č� Oi�
-}*�	Y��<�.�<��A=�uZ�������ķ��/$�~��oҺ����JQV
����I�4q„�0a⤇.A�m<�tݙ2<��xp
�\sK`���[�P��T��p������E�w4L�庞Х�Js�Lm��ۥ^/�~
t������4:�P|�T�k
=R�Pz��LA�I����<Ia�Ju��*�
��)4
� �k�_��B4�e�t�;�?	a^3+���B�`�G[
-�!�r�RX����f&��Ƃ�֛n�n8���{p��0�Z�ID̄�>q�#@������U��b7�ԅ�I�P�~�-�(P�H���Q^�����
�b�c���ܤPy��W

z%<C�]u���S��I�
/֒�:6K��Yr~�zo8�4��E����@��e�=
~��~]t�ʘd���.�J��!#�R���7^5ZXV�#��ZR�a&�~�%*����b����#?�;��3n��'(\zt�c�,������Rh
p=������z��0�]�&L'wUi��=Bd:�z����a��WL>��/�pDI�]�
!�u���@�I�^:x�P�Kn�%������^�u/��)��L��R���5Sɼ+�
�uLȋ�}�:�R6,��+j
������܉�+�Ґ�U
Đ�����ı������CE��
-�3��[wnh/T������1
(h��D�+
2�%��s��B�6E;��*j��]9����3��!C�]�=7�Z�{�R
�i7]W㽱���
KI+��z���*���L0��`�s�� �@��!O�	�T�C2}��4V�T�������
��
ï�#gu?�KG\��^%c���
��w9�Bz�Jޮ}�y�B.��V��%��Y��>������Oъ�*o�p��nT���P"�K��a�}��
-�z��]�9@&�s
;@�S�ޯ�G��H��_�w�z� ��# uFD:�T�s
-� �A����ƤqPO՟�Ծ�S��%`������-rTC�G�y���%`
-��SZ_�f`��V�uD�T��3���}Z\�^��{�:
k	ȅ't9���R5AS!Ø��b�cվ�.
N�P)HR
�E�+�����{�e�3Φx�:N���%�9��:Y�З�����K
�g��F�%�i����
��a���%���l���9�{CHZ
���+�^�L,�ץM��
,7@���.�FU#.�;���'�'��KR|
~
k
��e�Kz���
��Z��3^J^�R�Q�[���0
��m�+L���{�R�X�%�ν�q�<L�><K�$V
T�O���*P�t���
|�j�0˩�꬞*͝�z���b�;2�z�ڷo���z����];�p��<@�W��n��~F�3��u.@�I�_q�U�\{
�0�!y7c�n���6}E�l�^5(Eu��Qm:4��&B�*�`��'�o�i�w�.�x�*P),��mjq������J��	�2�q���8�4@&'b
 b
3���c��D�P!$q� �3&�čY���nZ=��ɊƩN����!?@�����/
4��K�ӯ_����2
�`cξ��?�[�'�&�%��͝g���Z
y�ëŒV�>^,(���ttb �t6�oH)`�z
��yr����[���W	p���������e%��O�
x�/=V*Q����
-�BR��0��@a������\�ޒ3�񛅥�P��-�8,�'k33����o�p閑*�Aä�I|*ͩ7
�z�0�u9^�_ǩ7��NΣ~��� ����
 �;�9h����2��a8�y�� �=��09�1+��l��;�k�|��Ha�	X(`�p���T&�ۏ�0�VP)K�������q�;Z\��A\�Q���>XK@�t����ڈq���R�r!�J���ꢾ��"�z�H�$(�y6J�{�Cv�*���UAD�_�
*�t��J�������}��袋��U߫Z���<���

�L��
�e���%���O�^��(�����W)\Ҽ*��gt��Ǎ?��}9�DQ� �*���E���%��@��Vl�
k
�]nC��E�B�"�_x�J�C%��
�~�{Fk{����o�m�zn��%;U����_�u�
������s
-��@��R��ˌK�䈲��\�K���[�Y�g:�'&�n��T���]O<��t�����*k���7�gt�@�E�.		i�F@������n���$��VDA@��j�}��<�<�2��}]��������[����k� 5
��\{Ts]���C$Q��$��e&�WӞ��$�;;n���	�@������8Qm��Kpz͂���͟O�k�98N%�tߋ*��ᇔS)n,}�K�\We'�f��O��hj�%�tB2ɋ5�k�/�o&/EO���m��d<t��J$�K�$&-�K���R ���\�mˆ�+�1�����I��]�v�ڵ[wr��r�)�г��ic
�5�����%�ʅ=���/��v�(��!m&�c�3A�Ň^�������
:wE$��?`0O'L�ʎ��@/߻���ϱ��B����j�q�ց���
����[hc�nS鷥�mxX
,ߵ���WL��s�̚5s���f�pX��U��ɝx
�B�#�O�6
y�-o=j�	�mSq�%�p�$�o9
�
-
R H@Sf�W���@Ĝ?h֬Ys�Q�6�N�#��I�,xI���M�I��K�#�H�9�Ĥ�0zg�*�R��J����D���L�3{Μ��
�����
����7L� ����*�pqyj6��iƁ<٘Q�jA[�uwߋ���O�oն]���T]�S
b
Z0�e��:�ɭ{N���w�����3�Pi�ުe�e����}ߩ#�N��ypN��%���mڊ���><oux8���y�(�@����VW���>2СC�1oђ����uˀ��x���Q]ǽ|�džR`B{
-��d�u�݆�*��x\>f��>=:�m�����3���M��B��7�J�1

[�n�ysf㬔�p�M�>C��`�^F���"'.&��`�c��}���DIyq�S`1
�
�	-pBJ�W�6mZ�u�%�K��U\��
^�?��B�I�bb�f�I�QRѻ��Eo�Zj��Cϙ=k�̙3f�T#ՖQ?���}�,���T����	J��G��AL	"R�ɦNV`B[�Dn��b�d�h���:���O5
��
�yt
����
*zw�Y ���댜�&��uMB�Շ2��	Pѷ���U4I��x�ԙsbj�bxN��'+�w� �t攔Gb#�)iU�>�����a�f������
z��
�7���i�$
ޭ���4�� [...]
�&��v
���Im.�߰`
i9�R
�.�`�s�&�n��tFeױ����ߡ�کsg���֧UHQ�.�:r>c�W(?I�w�ZKy��(-�ң�|+ѺEϕ&�M%#a�l��KL�ST��͢�K^�
-�Z\b;���
-Ŗ�R z��������P��Ї�4���Iʡ���l����ar�C"P
-
u���eF%�Lۍ+q�&BgO&P
��<�f����(�]����<ο],�s}j��q5'��r�P8��
�~A�Q^^'��<�� �*�ML�H�U��zgS���[�^O��Y%�*IYx���Z6�_��:�ϛ��Іg���J���S�x���
h��L�W���i)Ə?a��I��U'�f�C�
]�)^��9N��U
�yz��q3sG�$����c�;z7�`.i:�1�����>���Q�G��@���!�Ǝ�0i�x!�I�IJՙՇ��,����zL]�&�`M�>	�x�(U��
�Y�J@#a:���f�`}�M�RKW�.���g�$y�E
�c��D�Ĉ���ª���fr��[�&
��xEO�Hr
Z�$���2
��!���7�tA�2�}�;�}䣇
�W�T[QҬi�f͹��6m
aևS
�.x����m򭍴�}�Ty$��J�o%��a�H��
J^�X^+N[��9j�<}����N�
In���@����Y%�Uл[GZ�^�B��d�ߓ��s�XX<7�t�J�=�¦��kwb�V�1C���8c��/�kMha�ԇǜ

K���%����%U%�|)k9�9�Ȅ8�,R�H?��>X���9R��*n�@Vr�v�jn��{
-���͚��$�����З�X����:�t��&��6_
C1&�3��zW��j�^�,��r�5x�X�]���fp���)����
��7�

ߋɓ��O��~+x�q�
-I�&9L���*�0
�R%�(�J*�\�P�<
��#Pq�RS�
�b���sJ���3a
-��8��F<p 6F
/4�Ϯ
�~��t
W吃�����
;�-��ey`�A�*`�
���l����LR)\����
��p]%���¥�A7+������T����D�Is��^��]%
C6��Q�F�
9j�hR�Ҵ7�S�g�MBXr�K���[t�^��
s�{>L��LQ��Q�Pׁ�

 ��
�k�ѠA�2�y�@�	eD$����7Pt�x���I"��q��
-��t�jTzϪ�߼A�-��
|<0�*a���}2�)�R����%�}H�7N��\�%�㪕C3�e�2��b�d�h�R�T�VÔ�0N�\�H;��$N(9Q�s�ᇐ��I��*!�I���V-[4��ɴƨO/���P
(VU7i�
�q1�ȱ�Μ�1��[����MK�Ԓ����jLwJZ�P8�Iv���[�C�)@^��
�*���U�#vQz��PJ��!P��]%
�@x�UJ�����\S�p�]�%��t+R�.���FK�ՕK��nW�F_F����1�sZ�iƵ�ˣ�t�[ގ��������۫&�o -�
��6����� ���1G� 2����0�4�G��8"%GKH́����Xc�*�[�\n�$�	Q�.�(����3z��j��c>lj�@nn��e
�����TM/)�R,mk�`�����
z.�f~��&��*i2z�	�����͆�·m�<����2
Kf����'�CY5�Q�C�P
-
�RAL*mZ�+
fL�0fC�}ܭG��^��+�o޶`�ߠa�0��1��w���DSZu^0�s���J��#Mc�S
i��s�-vSذ���o���	D^��o@�"7�
�29�6.' ����o�a�G��^%�*a-��òp����:�ڨ �m*�BT]h��Ⴆ8�hⅶ*�6�ْ���o
�S�Ϻ�bǎm,Y��
Ra<�K��p�X�
&
��xWM�5*ѠX�8�-@��IPp�Y�䋀4
E���P��h�,;�%��$ޙ칤ϝ�PBP����~gF

��1��D@���lуk�!8an��cbT���~�?��.��Ы,�}s�<�F��(����&����:�T�䩰0^=�Z=�
�I�I:x�8J��R
-�$I�s�.�CI�p�U:((�b=�V�OQ��> �z ���
?Y��v��P�U�
~�񧌅%�1�ܥ��i�

-_fv��-�1�� ���X�
�U&�u��
���J����>�J���X�U�$�R�E�,ܩu�5+ݦҭJ%�<�ʈx
�3�	��nϖ�X��)޶�dW��X�*���Y��KzS8X�&��Bȴ@�҅%�\ 26Ō�%N�2�j�Dɡ��y	�h�ܺ
���;�MBM�2��w���R
��J��(c>Gp\���#2m�
Z.���iżz��RɃ�����x:�\z�0/�E�� &�%pP�b�ъ<z���,��y+�4BO���$+)�
8�L:&LRQVv���]ʠ�M*Q�a�v�斾6o�ԉcG
��ԺE�F
hI���Z�o~hظY��
��H�?xĘ	X
�1���q���c��| �ݓ
�Z9X�䖴��
�x]���W�a��bWz�[�s���B��g����r _�I�
�ֽ;�*�'S �S�d�l�U�Z]�s
��!جt�J�,���Us��q1�\S�7�=�PMϖ�5wA K�����Pq&��CB�KJ�
��&f�L�ށFiӌ8BJ���Y��@�M��r��1x�Y؎*�H4�t
m�`$�r�t�$Tu�[L���%%w�6Ai��Z6n��H

�^b�L���*�R! ck'H�h��,���ƹ�^m.�2]��L���ɡ�Ro5߼�~���o���d%?�J�(�k<�J�.?+�D�w�,(կS��SZ
-�j����=�
:r,����cV8;�R�%]�w��UU�
-g0�@�If��D�Y��5N
~��ؾm��4�0��TUe����4��v�
p��ᶿ��T\�B�����f�P
�m*�2T�d��҅��XG�h>/����\'J%��l� ��� �
p���F.��;�6:LJ�m�]x��Ɨ���Z��y@���8��D�����框[@�
�pg:I�
�@��MMw�a�Vu��:?�L����u��+�Ƴ�@U�\
5����D��2�=MC>�־*Ekh����b��g�KX��|\��
�܍~�^�5~���b�f�Rs�Yo�ļ�z*D�8���(k��_
&�u��PV�J*Q�èa������Ԥa�Wy�+�T�E���6a�]�n��
6j����[�;-ܦ%�c�J	|�
����U��!�Cyc�v$><�w�b
�
y
���&��5�I�*Pa�S�*��z����ҰLh�O���1ثd�J�U²p��8�!�f��T���d��@->�T�*�%��s�'
?��̸Ceo at F,Ѵ����V�ȱ6���O?#Bq�3����C�B-
�9�Ҫ�ᶇ�4\����s��O-Z�
:@�X�1���޾w�$0��M:~�4
��>��;�=�_�9����CP���8Z�Kc��@�G1z,Ϟ����TT��*������X�K��(�
-���c[����'3��j1IG]h��gIʡŗz�b�Q�*�w#P
-�$��:�ĕ���P�[�f���y�6|�R�*�^�U�A�急��

>z����ᦸߩûQ,)wɔ�|��ɰ۠
;\��+lYg�L�_np�z�ܺ�$�s�a�~>�A�9p0֭�a�W	\�j�*��kF�E�:ܦ�oO�����J���HhC��<2e"v��B��ԅ*c�h�$��",�u�
-K����=�*Ʒ0�]��x�u
�,�"���
�	�
J��
.v��x `��h�sd��
-Rq�#�rL$�s�$r�@��)&��;�D�wQK�
(�(юqUf͞,���izl
�ˏ���Q)��v�ˋ%
3�R��_��+jB:��vʓy^�WM����j�~+|�-�S
$����T�I���(9�F�
����R���'��ҡ
A�j�+V(G+�q�k�2���Uk�Z���#���c'�:<=xȊ�+
�ƒj&3U���=m&H(|�N�-��V�fI~
uX^�G$�*@���s
t��*�����4���!�`�z�����z\%頕���\_ �6�n)*�J˃�P=ƌ�M�2�S��]h�-
u(X�q7Ge���Òmz�:��aR`:���z�
�k�z�u�L|5Șs�([��H�H�!�D��=��$�� �t�.��]�͡��j���8����x�)
��)d�em�؉SԌO��Ψ�#!�Q)�~<VK!��҇���>b�/�Of��V��2O��A��
�Н���P�/��P�7���w�}v�ؑC��P�Q����˖.Y��Ŋ+^����ʔ�P	�T�A�m:t��g�P�ᭈ�ṩ�`����!��P�^
-��M�)�-�Q�<r
8DO��0w�
(ީ'��w
-Ld��{R��U�
�L�a��U�O
ϐ>m�U�U�p�J�&��K/U3Sd�$��Ё�v�ْ����R�C
BX�5�U˓�.)
�҇b}3��8dB��"�B]���}�'�
 \��@�@�X˜Ho	��1��X��Vu��
g�ΊEA鐁�"��,��]yl
�
-(ZH=f����-Z��%*w *}
E��ҿ���ҏ
-KJ
*5��KΓ�/�;�b�ɬ|�����`�$��8(���&��%=�n�6�ҡOϮ
۶lJP�T�\钀��E^|��"E��J�e,5lڲm�n�����N�&��Kn�P0E{☄��e3����l�Gx�g�YV�ǁr����@���L�%��^�
4���*e�]%��oS�?�J��(`��oݰ��.��6�Z�������j2����'MUX�ba)����R�.
g�$	&��-0�h��c6��]�2�g�f*:�3��m(];v�|) YD:� Ii� �l�;^(]�%^p�M�4g�I���&kpYqkG�2Kc�i����p!�UZ�}�ذ�*�R�A YT,ч�\\�R��
��/��l�y��[�}�1
�S
Z�Kģ
�X��U���J:�=�*
���fA�l�ŋ)\�PA8�
-�X�x�Re�W�Z�6`�RK�S
o���eM3tSK	b麷�B�h%�Ǐa��d��߂� ހaWȀ�'x�J�
���͇�$��!4{u�7����¥W���y�UJv��j
nS�7�ҿ-*�X)j p�ZTz��= J�i�
�����.ᆘ��\,�
���R|��1�k��s�p�N�2j��

H�:�u a b(d��߃~C�b
�|������
!Ik�&��(�F�	�>�Ci��9��޴Ś�<�u�
�

*�Ԗ`���pi�M���H�
�,��%ז`2
�=�>;��0o�k�h�ᆙ
%��a�
U 4w�T:t�ԮU�F� J˗)�R�"�
x��p^(P�p�b/�*S�R�Wj�kԼu�.=�<ܭ�;�~O�~rb�߻e(&EK��Md'��g��^.
�Q�#��TR�UTg���*�-O�+_�z�®ҟ�q�nS�֣���b��J�F
�?�'�oۚ��J���K*,-^�j-�R�c��ZX��1+o|*,.i�Ii9QsZϑ��"U���
��t��A�@���F�"%��
˘�sJ�H�
���3�vcP:����@I¨4{�����x(��
<�O�� {�
�=���"&,��$��kK(c�y1���ܷ:����� �,&���FY�R8	x�=(\*
pD��NC�R���
�J/�b����g�<�|��^,�RI�ҫ�7oӡkϾ���
?e�Óyx'6�+�U�T�{B�(>�L�&y���r�
�#
J�*�S��M���P
-�����*u��J4�y\a�xjؐ�,�6�nE*}�O��^@nP�ݣK��mZ�lތ���v�Vm��(���O�`iWl,95qs��KZɑX�\��S�Eh"�"U�28��D#��GH�@´����Cw"h&��(y��$
%^�#���nN+t��6H�G���z;�J?{��P)�T2��
-�lWT!�LH��/��l�<��V��p�z*x);Ȫ^*!�֧�5�g?�a�f���i��ҡ}����
-C	
��6_޼y��ɛ7�sϿP�p��%�T�T�f�MZ���
cxc&N�{iuy���縰����P<)Z�_Ű�p8
-�-��Gx[�BH:H�:����{���Z��4 OJ
x-

��*��R�Z��T�ըDu-oڿg�mql
-���S�i�F
6l�Ȍ�'C���v��;�b)Nw)�K�a�`5�z��
�pTu��@�H�z5
��I�Rs(dI�&��Qu�A�1�UN	������)�*Kz��~w�
�
pK(���^[�I	��H�����������p��d�j[B|&y�w��ԓ
�_*�V���x at uh�Xu��cwa&�(Iʝ67ӈ�M&�@�
ڴ (U*_�D�"�(=�/�3�s�ʕ+w�g�K�
.R�d�
-��ע�R�
I��
7�x�{�O������a�)C�&����%<���
�|�@)S�^=�@�_|p��յ|@We�T.u�pګ��]��T�ϡ���4
-�b�<�G����(����կ� �Լek��{��/�v�Һd�,��1���%�䤼KByL&�s(\(]'Tv b|�
!�F~i�:�
KI�D��M
-h:�I�y�&�5N(�@(
�%=�yIZ`4nB�A��=��S&G�J��x���A�8��R�Kږ�Ҷ%>��I�b�d��䩂ou����S��
Z�OJȣ�<Yd
�L�����t@�8�o��`�7iP�f5�R�b/G)�3�s�́'g.�ҳ�(T�x��/W�A��]z�����~�*��Ǫ��[#C�{K?���J����l+��Jz�9J�p��1��3o�b
-:�+��OI*
���A�8FJ
���\�b���U�M�ߎJ?��J�
"T� �&�a^�۷iɳ����S�^�߹[O����0�qk\X�'��K��4���Sd"�	�&�t _�'<��C?�_�b
�|!�,"��SH"7��t��!GI�o�90_���J�43{䮶kݲY��jI��%�
�N/\�9�����IT�@ҏ���T���$�ǖ`2	���'����؟�L?�vh�aRP�K��v���t��;�R�R��Qʝ3G�lY�d˞#W�<���J��XSK-�t�֫���8��֥[��3֨��i�,Y�
����Zz�)N�ЏqB��y$��>�b
-!&%��> ���\�\;�ԪD�-�*�%�
-W� �v�nS�V��O�0��������
: /����zu^�]
O�W�K��4o)����XB�Raq�B<.w���0����Dj���h"�U���.t�� \ ]�G$$�r�I���M�ɤ�����F�)�a�I��m[5oڸa�z��w�eФ�@7l���X�ذ���;DQ)J���綑�c�G�K1��m�O�^��<o�>�I�:/u-N�֣ңk�e�
gP8W:�kլa�Z�+3��?���\9�g͒9s�L�2gΒ-{��y�=_�pїJ������-�u���i�u�8gW�����.�KK�\2)ڀ�@,[v����#��
�~'���Lp�BP��w�SI�K����h�C�:�pUx�|�yX8M�S�Rx��m*�"T�
K>*�h�
[7�
2��I$dأ޲Yc�R�Z5_�Q���y7��B�N]{P�}lL,�}KW½݉p�u����P���9�&�/0Vw�C?�_�"�2 at B#�O{I��s5]�L�u�^(����F�/�GWZ��D5qEO�z����!�Ě��x�*��*���X
-�KΓ}I�#|1y2�����8/�V�T_XO�m�z�T�R�>���Fp��;
>�8�t���U^.[�8@�ټ�s"�2e|O�L��fˑ��T�L�J�j�m،���WF<`ji�;�=�	c�q�~
�
|��#��L�
>t�E���zM��$x�WT��U����x>�T���T.uP
�O9��r�nS�֥҆5�s�%Θ�Ծu�&
�ש]��ժU�
1�������c�

qI�h��?2��#��"	#

��G��@�H���
�,1K�I�蝂�ײ���Sr�4��DΪe�eP��<@��4�s̄���/Z�37�J.�

O2\�<��֓�3O�M�.���S��K�Ѝ��2
V�58ӡC���׮P*U�C)[���~��'3dx�ɧ�ʘ)K�
��,�X�d�
-�kԮG��f�����
�3��XJ�]
-p)�J?���#��SH�
?9(�)����I�éV�6��^�Y��T�Ϡ.
޲a�r4B&�
Ω[t��֮Y�Z�*��T�Z�7����;K$Q�����R��U�\2�wL��D�)6�|���2<�
�;HŁ|����dI��G$�$�h�
.b�Ci
-C�w�.
����fs\U�
^��j=
:�k��ƌ�~��p�#G�T��(�<L]�N,2��}5��ዑ>$�h=�'��
-��z��
���� ��P⌻���F��*
�OV�mZ4���r�^*R(��yr�Ȗ%0)���y"ÓOg̜5;b���K�}����p�Z�ˣR�,�ˆ��yB᎕p!d%���:�#��
�2�|VA<���`(�QNײ$�)~׬a

�WҪ
-��J���\��T���D땎
��C[��a��vhӢ�숩\���/�\�"n��Aj�������a�����U��	�1�%-T?���J���Shb6�|1��|���ųgE�@�H��HZ�$i1�O���Qp�
�
�O����P�Ci ��]:�mլq�zu�Ih���U�U�v�������>T�5s�k��|T�q�?���aS2��d
���cs"�d���kן�a=D|�B5
A�6�)	�8�*5ᲽbW:P�]�r�J/�2g|��'
��x
.=EX��l��E��*��%S
.�%,����N�8��
� ��k�S|�<����Ċ)�<�zJXĒ�� �M�HRi�1p�*~�S
����'p����a᤼�u�nS閦���] ��7n :Q/.+_^o.�߸�E�IXZ�b�&���tS����F��
�2�
���M(_�'�1����w��c�#	#3�7K�_�����
�
�������4�;��w�^]�* ��R���k֮۠	ͫI�3�g�}
�h�J'x�RJ��c�5�K�8dJ�K�c2d�&�b�d����F�շ��������
(]��őV����wjתiúX^�D�B/<�7w�� �
O<���t�ҦK��Q��K�K/Š�J�k�mԬ5M&�%�Z��,���pK��;?�˥��p!`عOq.�#$S���$袪�	�@�}���
-Lz�!�ߕ(ZPJ
LUx��t�J�AT���F
�1`��S^��e/W(G��ʖ-WA6�������?��
-��>,%�h4��G�唚c=NJ�T

-��3%U|�׿�:�]$E$�� �bR$��'P:h;�OJ��cU>�خ�J����((���j5����p�!#�JKW�ۼm7

w�t51*�MF�����d���{1���h��CrL�	�pc�%x�5j��!�zР!.�+Q��@�ip��Iiy$M�G
I���b)G�ϽP�X�2�ԨM��]{�$�gK��&x�s\Շ[��м��>�K�a2����2��#\p-���M���%~&�/ކ���M9�Ė3�ߙ�]��!�*E�nS�V��RE%i��[�F�����R%K�*]�T�r�5_�רi�6�r44�%
��vZn\"SOG��*z�9��d�9��P�Dӱ������‘(9M� �
E�\���$���N
����A(�*�b>����r�r`�.�י֦M��;	�KW�v�y�C��	S��t���hJ L�2�6]�/�{2�[E=U
�C�C
����2Jo	��J%*��F�z��fG�X at C�1dR��~衇2�{���D�Zr&͜˫�y�և���`ɰ�#�WB����_G>��$%�$_ӲJ8�U*
��ʞ�?[���E�J��t�Ri
^����u [...]
dz$-c)[N�x��p�U<H!��-���8\�/�������j=�ň��~��\�L����D5�4��Z
ԯW��8ߩv
rP
���*u�
��f�nS�V�Ү �:��j�_(�>�bŊ�J�-_�2�M�@�W_��>�m�7KgT)�W�Z��
�d���\�K&.�&Vu"b��]0?�ȿ��8��
e��,q&]�V������aJ�y�H�R��͛4�+��$(^
��	ʿ
w��iZ͠�c&N��`�M�SJ%�T^t��\v���Ur`����s���"��1��Ϥ�:�P�3)G��ƾq4�
q�]�
>��J�M�Lz�_t
|�ӤM�^��l�BE^*]�2����b�Iӹ��eQ}xK	
�
H�7Ek�I?ŷO~��6�"<�X2��j.
DEb
-z��t-�\^˦x�/��;.u�J�}�J�T�֢8Ȼ�m�1xs��tx��׮Q�by\^�j+^�T�r/ˢ�急n.�h��H!����XK��
C���?�D�%�Β2s�/���:�r����xʞ~�D�K��
�wD
��i����p-=��ԮU��
��R+��"(
-�^��֮רY+��TZ�ҷqS)�"�����Z�q�J���=�ף��2~�K�q���[]s�G�.�Q2�
-cAi�T��ឿ~����ʗ~�H��J�
I�L��t���S?���R�,T�ʹ�Zj�/���$�p�=և�X:�fM~��_�<v�1�'�
����OZb��bX_3�>����w�͓���kH���]��!W�6�ne*-Y8{R	wS"�:�J��y�p!<�_,ZL/z�� L���4�f0�d;- �qI�<��xq�"�9
-L.�8�q��e�yl�?�
-��ER��dE�LJ�*�IԶ2�桎c(u�خU����Ԓ�`�APl���_B��N�l׹G���FO@*��T:u&Q*�~Jn����h�9*�`]��
��U����,���?��#�T���|�t;k(m�P���v-U��KE�Q	������CȤ�����#�K�=�b)�s
-cj�
-��Z�t�x�k
/_��R���q�[~�V��%�O�~Zp�Y�?T��+(a����{w�(
�k�sy��W&[�y_�N�:$�*ݦ�-G�S'�J��J
�J4
�
�_�R
�<�J�B
x�@k�s����W���%�(�N��Dqqj\��+��w�?r���tRޤ@��`v�UTL�Ǎ���c�Q��
i8�I`��@i��%` ��c(�'�>���K-���b�B�j��v��I��v����o�J!�Z=�V5��	����u�d
-?�e�8������\�nR��dT���l���R��i�~o{�
ք?�'W�,����/U�{S�J`z ���#���Ϥ�x ^��8�c��9
�>|���Mk���;N0��s���~�
�#D�K<
7z�BI�Tߑ�N4Jc�l�k�GiPRɉ�%Z�p�J�(�p�Pi��ae/��K�(P*�B���E�%˔�J����fK��{>`i͆ͯ��w�
��䒊�E�K�|�v4�� �L	�䎧�9L����r1��;�R�Jo߲q���KΛ5�t\�RK*ȧ|
9��p�6
��qg\��Uk�i���Q8r�G���J���|���*
�
�J�Y�*�
-.��d��d��S�V?��aL$yz��%��w\|'��8�
����|��T
k�JO(��Ͻ� K�o)�e ,�|&_���Z�x��w�9�\��p�
-l[ڱ�M�ΘjVo�E<�v�O�#DYp��Y�&��J8��ӵ����
����x
��M��*]
Qi-Ri*P���7��S�^�Eϴ����_(P�0�˽\�Z�W�u�X�=�ҕkH��b㒪yD񌻔�B�m=�&\������v�摊?%�$��t�r�@θK���!��V��b1�8�2Բ)(9*2s n� �h�=P�
����M�n��J�J_�	Tz'q*E)���4���_
����*!,Yhr_,�'�?���bE�s�������j.u�&Q�y#����^�p��C(���ߗ
-�t��w�}���%����⁚iK��P����R!
c�d��*?�:������D�u1_�j���D��ߛR|U}灒յ�KC��$o��N���:$�*ݦ�-L�K�<��n8�C��P�M�p�=K\*R
cIX���v
���3��4}��ז�HmR�KG�P� T�V-O��X���L뀦�E�w�o��R�����􃵗�
%��q��߁�[�p�L*�,cڛ6(U��i�b�b́|��A at X��R�_��Cp�ЍP��
aG�l�1�3�n�o����Ò�`z�k�O�[^&�ӆ��z z'u�
J<W���J5�
�
J�"������%�R�ǹ��iK�
-@�x�C�>\��ۋ%_�E
-�'~�I��F�or�>k at C��;q�2߻�Z��
-Lr�wn��m*��T�VB?�A%
>a���@����\`P��
�<�����/}�S
���K���F��t-`I�<H��_ް��Vx��us��>���1��
��s�g��
�2
��:���e�̥m费�G֭]�j��e�E$���0
-�X��|j�i�T���H���5H������;���A-ao�S��Λ	_�Q��{�"��b�O�y�d���Ok��u�����k.��Ѕ���pЎOgx�Q�����t7 ��t L�%ƒ�Q3m�Re+Ҝ�\����Զ$X⾥����.�K`��Wz"캨��!0���\	[�
(�Q#�X]�*��U�蠦	���u�nS�7����J�4
�ԵCk��[�c��ܹr�̕+7p	����)�Q��+��5j�R�4|������[�z
W�srɊ�)cO�K)㒏L���ڽ�
뷛����/�?is
�o�Qœ9G�u\|�mJz���k�+« ��CU�@n8l
�ƸR�@��iдU�.��
9n��y��J{�TJn��)<Pr6ĝד;y>��å�bD�V#ؔ��
+��b|X�f�������ў�j�3��j��I��p���A<*�Ê�|��֪5�~�#́�c��d�j(���K�~�����
�X�E@���L�2���pQ��
�:ܦ�-A%υ��K�3�N�T��:Si��QC���ڡv��3���+g�
ٳ�ȑ3Wn�R���H�v����
I�#��͢Y�Ը2��K��+��J��X�d�Qv?&p����%"�a&q�\;J�9��w��0PNmJ2���
ԩU�
-���AG�l��x�ț��"ť���48�J�ĵ_�|��骨�L�+x>7C�φ�2�|k`ݫMN�?V�Y|�42x q�ngJ4U�T�R
Ij�	Ji0|�
-�vd�
w��o��;��XJ�0`IU<��񀣇z��a�
-8�h�HTzR*<�A��/���>9lCI�+�!ki�M9������?�`��6�~c*�(T����o�>�Pi�Pi�~���G*�0�b�
���=g˖5k�lفK��yV��*V��s�:t!,�H��!l\B���ґ�,T
�P�R8��8�
�
-)�)
�&�ߑ���$�24�P̸sV�w hT�z�lSR�X�Ɍv���)�zN��ॣ- at S=+ר]�I�v]z�<b��D��D��H��p���K߹T�βDA��w�$�����l��EJ�p)���G�
�z/��|����D��$K5Z�����
5��
�L.iTR5ᏧO��5�I��_	L�%�ҿRc}x��{аn��ài�����r�M��
>�x
�I^`����X� ��ŅJبԗ�����C��NNR):~w�J�T�*@%\E;s�8�R�����S�#�#(e͒%s�,Y�fˑ3w�|��/�X*XB�jц���
�y�
-��&�$Q<���Es)�=�W��"����I�C��r�+V��v����w����:��R��8
}�
�SE8V=.��R�x�x��?�+*W'*��(*m��ҏ�_�A�S��f"�7h�#[�L������R�]��R���[E)&٪��%M��a�J��%��(����K�KX�g*
J�
-�V�x
�©lHU��c5��k+

O<t)���s�Q7�X�]k`�^��'P�F%
-� x���S��J��O��&��A*������)0��$�R����
Z���'*iLk%t�*~�#ue\V�*
:����K�ƍ
ܯg\<\���M�͝3{�,�3eʘ1S���%��
R���*�q�P
{�6.-]�z�&N.�(
=w�ǥ����
C��?���X�!�IN��ht�(���蝤���a�$�;K{Cp� �a���잒! �M��"/���<��h׹G�A#��^[�z��
�J�N�L��?���B؂jf4��H��#\\�>
�^h21�8��I���
�U$�b0�GOȕ
M"�N�s`.���Z^��g5��QB$���&0),��
-�r�2G�dH�gQ�t5�	3�+M���o��w������J��|k�t-S�ԛT
-��n"�t���D�o�J<"��,�=�?�J�f/�u:����I�"��������}�ϼ{��C�
*��ٹ]�Ƹ�Qj���ʑ
���i<�K��t�yʾ��8ux(���
-q]�@����qуq�.E�|���(e�r	��o��^���6k��d��v�0zw�����
-�s�9$
۔t�,V�c�C��GG�
��t2eFK �
5�Tj�	�4|,��*��䩤>H(ʯ1��>��t��{�9�l�P��\�Z?i
ؾ���	c#)��^sK�wk��Ui�:�A�
(I��nTJ�}�J�'���?�
��Of<���%�!���X: Mj�ח�pC
�ٛ#;��h
�
J̵PK��>�P��_nA	�;�QŌ��I���]��R�T�ԣϠ�&��T����.�TjߥW���&$C%��<�C�
.�vle*M
7����T�b9�
|>�3�!3g|��'�<�t��YXIb���j�P��M=�y��
�3��W��W�!1�N|r�?�s�����<LR^�9*��Fѻ�����s�8$��^�J��aJ�9t��x
-Z`<#�uŪ5늄
;i�PɊ�~��KQB�^�E%�Q��gv��I �N�>u�]>�N�:}�=$��p���:�2��x"
H�1�S���%�ț�ng��\�����%lTz��J�'�I
�`�^’*��[-�m��DeCX�,;��;���"..�);�R�福�l�L�	[o�R�O�j(�.R�Z�{WaSN*��wq�:�I��6l��W�(�5o]*լ۸�͡�uk��W_p����D�
��J3&�
1�o��m�Bx�#�\6�R�'�d .ew)hI�
-�@c
d(
6.q)ނŒ\RQ<q�(�$Q���%�~������Հ���d)t�Q��.s�C����9���6�*�;L"��3��]x�
��<��q�Tjө{����0�$�{
���Y'�z=�
aٯ~(��DLz�4 �����8q�$��4�L &�K�Ic�K7���E���^
5����%�r�t�,�̅JRP�&sP��{��
��O��
�c鮻�O*
h�Շ��o.`i��d��\�n��3�pSd'Yi�u����;�R�:�#���6�:[P2]�
6�kw�J	�Rђ�*ER����K�i��z��ѡ�J	cr�3L�DR�J���o=*/]�J$�4��R#�
<�B~���l2��J���T��@�>=:�m�1]�F���Td�'
�18�#�2��;/�<�짭��<p)�ԙ�\RQ<4�,w�v�l%�⩴�����t]�8x�t��OUF	�� ��U�SJT����[S�U�ssX
��d�HV��p�3e����d��+u6o�Q�4g��U�l'*�|�c�|��F�u~Rr⃒8J�$"ұcG��C���cǀM'	L�0Y\�\.�̗J���׌��mIp����J���
(�d(ɚ?�=���
%b���D�x<zH�-�X���d�A7Y�Y5�!�&b
8�Ox�B�"�
��J�k�<ԇ�I���w�P)�s=T���~�O�0���l��4`'D�����JTʗ���J+�����\ȏ�u��
-ÅJ'��CQi����t'*��y�;0KF��c��?���Kb�?K�x����4.�L�
qJ.Qc`챻�be��B\J)�����A$ً��t
���l�'ls��t�-*s�ѻ93���S+�TE8w,c
�'����ӣ
 X��;LAU�R�;t�4pؘ�ӄJ��|�KlX�$�K%��u� ���t���w�~�ȑ�t�
9�6��q������Ղq�(�xQ�M��B� ]��
D7z��
�(�
C	�����^��X��]R��x�%26�m)���v��^��%Q�P�Et�I"7y�!3?��d�Ԝ�>��}B
}
%lT2]˺��$�<�w)�R��A*
;I�r]*��N;V��:������:L%i�	P)W�[�J�r�4�q.	S�k
Ӵ��7�r�Li�h
;"5�@���
TjӼa�W�T(�
ye���=�h:< &ғ���ȅ5ܸ$��X!2�3�'OdžZ�⡱�E�.Q�+��B\
-����c�k)��D~�O��5��"�I
����9�������͞N)%�s�mJXN�w��
-��xl<J� �2��xi�q7hֺC�$�A*��L��FKv�w���/EtA�|���)���
>t��[r
<t�0����S�Kɥ���	?���"�	�6�
-���v��;����%{��}�
��O��:.��>ܚ��,��W
-b��dqJ�J9��+�ц����捇��)zwRuO�ր�}��p�Q�(Y�J)��ŠR��.�:vOhQi�>���%H�/�8��N�XT܏���2���ߚJ�?�ɡR��=�
��D���B%��<r]���cJ��E4�R���Խc�f
�Ԩ\��K��1K��2 �ҥM���i�=
-���x��~/P��n\jҢ
�M2b��I�P�(���
�]�Z"Vb:G~)4J-E��
W�+��p
�nV�ÑC�QRѻY�(��F3©���*�{.onpL�Q" -�t��'2<���[prZ���_m���{��Ѳ"}��oj;�,��%�גʍ�׽�hvZ�]b�a ҁ����������ୃ&t��K��'
���n��������U/i�w{U�U���
hF���
���A.),9�x�m�P�A,
5M:={P�x�UC?DE~A�-3Fd��),0~k@���$
3đ�f�5��(�'�1�V:$���R���@��T|BS�3��f���颏�	����Pi'��)*�mި�C�ti~[*�I�P�N��J��Pf�J�iӼ�|)��֘�b�
q��nY�NK��p8k�WkT.Oˇq�T�'�x,}����I��a��#iӁ��(^���%i\�
-q�y<|4�z3f��(
I�v�TՃN/�����~9�ZJc��BL⸗���M�w�(��;I)Q������R"G	o��;�#r�y@�b��U�^�~�V��Ƙ�TkE:Q
KH��2t�{<U�F�V�<�Lz
���޽{��AgϞ�@'$���q�K��lDW�̓R�/+x�R������4�u#\Ɍ0PB��đJ�I�%p�X鲚7���!�%ޥI�ah�1O�2Q�$���"���`�Gf����5��D��O�P�OTGn|c(���I�CtR)ETz�a�J��*
3Qr��v)K�c�J�L�\��+�J�耕U=H��J��6�R��:��JT*OT<Ǟ���J;��J�����K �
���є�iGл[��M�Z
�T�0���K�(hɇ����i
w)K6�yx�Pn\���i;v��%�\�(
H�K\���
o���%�ؚ���b�Vh�rP��L��TRs��QZ8w�����٭��9X�w�R(�e�y�� ��<��88�������V�v�&@�^��Xk����ѧN8��=}_�P�_ϓw�(1	���ݻv�ܹs��?�v�~�`�	
��hi�����P��^3��O�1&µ)�Q�4�N��L�wjGk
����`AI
����`Iׇ?��j,��$�4U���d�/�d���6�2~	��Y�6`
سOvk@��5��	�읿������<E��A�G��
��T�DY��'�J�@*Y2g���E%��ӈt��׀�����D��Tr�T%lQ�ߊJ��T�.j�$*�]�\��L+%����
�jUY��)��{�
{��~�����;�j��
ʕ�
y�){M�PJ���S�N���i���(^�
�u����l��K(T�'O�9Gܥ��.a1��s�k1�Ƽ`���,Z��C�]$Y��L���Ű6nj9���D�w
-J�)%4���|�P�#����K�@j�����S��*Z�,��6�L�ƒ���9�p����|���k�9�
-p
�D$�ܱ}۶��l۾}�N$�	
&å@9�;
/b:^�3����Ռ6�,s�8J����R�s�Fp4�
�˔�
J�k��%]��Œ��4M*=KUC�&
�7�,��[h��,��g��Bm
��%�a(�s�
T+��r*�cQ��L%�9j>a�'x}
��D��:�����E	cř��o��>���0�BT*�E%Z��SImL%�Vܰ9Q�Z�-W%W@%��RB�]�\��Z��L��X�GM����6�_�P�h���r���Ϗ��&�
��!ҕOP>���4C�ۂ�x�,w	�J��JL�RsD+L7����G�c�CH2L"�/�$��
67�~�ߨ�aƔ����Ť9��T�J�9P
%�?\�d�M�J��EAB�֪טdz��'l�`��)�
	�|!�����j�DW����
@Ҷ׷nټy�͛�l�
-hB0�}
&��iP�v��B�K��G"��_-��<��%�6�j,CոǪ��=�j�d����~(�����q��ԇ������x�K�n��8���:=�Q<��⣀
m�#L����Qf�0�kX��Xj�	����&����q�C�G:أ4�J��wa*�o��������j!����T����
{$bʼn{l��}~P�F��.x
�w��C����X,9����5*��䴨�_�J�����ۊ���yێݹ��k�V���i��8��RB_;�ﻐ+N��
�4��o��&�
�Y�*b���߀�&��ο��|�ɧ����*ţ�x�\��%��QG-He�@�����J�0��h���Y���:���;(\�iI��M
-2	e��b(x�g9Jk��4a�H��un�SJv�G��)E$�E�M?~)�?{.�R��Wݢ��g�IAd�
�v���x�����Ww��a뮝۷�6mܰ~�:<��oذq��-&p��NʓRك�U�]<&��=eLc":�J��Vm�[/9k:�������*\=P�ׁ��X=�#X��j[�'KV��`*ś��
N��{N�P`Bn�n��D��$k��7V��1~��p�k��j�@���(
��S� ��0Tz:3Q�2H��-�w��o�(��Ӡ��o�op��
�[
d
-L��r�a3o����l�Di���
 T�4J

X!��f4T��צҝ�J�����5M3i��K1�����3�i�=j}˗��*�4��<�hb�M��6�	LeK`a�,��K
����<� q)�#���0]�G5�\ꑄQ���'Y��.�0^�K��,�)&�Ҟ�(Z
"�H�Ը�?�2I%���l��+���DeCr�usJ)ᐡ��!+���Lz�_tZ���9��*5�6*� �I3�b�u�v�SL8��y7���J�8�X���uP�s �6oڰ~��5�W�³z��5k׭�@`ڱk��7���QdV�
�in�#�E��^��tA$]5/��\�'��(�x=��<��[�)�
N	��A(��@I9J�
-O�K��?��3mK.���V����~���&�7�&
�j(m��';���Č,��	c
H.�i�X<��\)�)��N��$�BT����D%��#�	^�I����`�BV2��}�o�l���$l��e𸸃]�&4{�Q�(�Oi���J
�T�ۯK%�T
�DE��k�:tK(�����
�Ƅ�sf
��>D�X�kg5�1�D�#�vܷGg=��H���
�x�t
 �K4�Q����֊����(����Q;��%��p�8W=
�J��
-�(�
-�ɕ�`s�
JVpm�uG�YHR��qMk�IV�n�5+���߀��T�NM��W����APJ�L���{���qӴ
)#�� h�M�$��Ux�Z�ۥ�/������HY�÷u��
�֮^�r�����,_�b��kL[�a2\:��^�Ė�Ŵ2�_�
���5cTm�Q�n�3�9t6�)��9\A(����q��-a7�cX�baIo��yǔ��x�j]5��:�j��Xц��sӅ�j���Xq�+k�]�Q�buO�5�V47ċ�J�J<�����RJ��M�G
E*��T*]�ԨE�.=�
�y����mP�֕'J����w!i���(�lݰf�"�
�(�+�*=�
Q)������kP	\{]*OT��DJ�5m�Cñxւ��<b��c'�V�5�!υ\���4���6�`�Ǟ�����M8Ԣ�o��v�<9լ)\�y�}�R��7U*P��/S��GfU�G5�\�(^R�5���u\����gjY�7�ä�%]�q:�H�#Z!"y�d�Igy�62I9�.�*�2r�ƃ�4���5m�]J�R�X���8N
-L���{�kƆK��h��6Z
��e�l�PY�[��RP�
72T������;�R\t���g)�nٴaݚ�+W,[�d��Et/^�д��q���5��>je
��,���(+#��v��]���0!WT�:z��%���Z2���4��%
G2Pb.Ń%�f��ax�1�g'�(�4Y
���ť��ц+�e���L싿��
7OXL���(��'3�{¶�[P��@�4$����\*�IS�!�Rv�����ɶ�q����"��[w��q��O���}.]R�Þ�D��Av
(`5e�(ڼڲI}J�*�ȂTz��ߒJ�<b[q)J�V��S�����<Rb��;��X|!����N8�F#���&���w���1�(�ƣ
p. ��e�~
t��Ku���sϽ�"��]J�yȭk
��k at Q�.=z�
8d��q�.�X�Y��q-\�yJ���dKW��4��!��״|i�M���L�����V�zS��pp�zww g�kX)%��Dѻ�|�p�xK�5qX�W��p*����5�X:p��%[B.DK}%��(��s�&Jz�6o\�v��値�.X0�ς�
_2-_�j�Zp���.������r<l)n+#ٷ���v?x4ctm�n�(-
-�K�
���˳�bC鿝’ڶ���OYX�&�\!N�Y�78UC{BUC��u���v��Tb�e�&H��[ Y ��m�P�Oh��p�0����Ξ�kj���b(�T���O���s�J��ᓝ��#VX��aˎ�{Q�N����8<��>��6c~p��%
��Z,v�1y���}{Q�f5��V �p���J(*��ע��
 *=
T��2/W�Y7b��7x�8ܧ�tպM�
�Y	}jv�}C�Ṑ
�H�����
-��oYOM�S9�i�h
��1��.�K�P�瞻� �Xa�T�]�
G��t c��.iwi��`�a/ȥ
�l�~g']2��Пܓ�>�xdɖC��: zQ]�f҇�T"f�
-�-�
�q�(q����Y#±uVE��!M��|��e�S;
Je�yWn��BS�7��S��r8.7�R!�
���Oh�$
x|�I�-\0o�9�gϚ5k��9s�Λ��E &t�,.
:bW�|�dq�$S�)�}��1�&l��0�J���r���N�K��t�
�!�e�x���P����#\JK<ό�o֊j
d��JY�����!e8�}1Jv\�IHv�x_QK
z��5�	Xk�I��� p�J�SR�4h栮t��J)�R��i�P)W���ʢN
>�{��Q��o������O�pB�^`W� ��?Aai���q�����۷n\��9�'�1�O����J�gs��H�TJ���_�JPTR�6*J|�2h��\
�Ex
1`�!<r��}��[�
�&օXq�S'i1Rz
�Ϝ2~��hr��T1,
ώ���Jw�}
P��1�I=n��K�rI�x�:u��%p��N��%	�qz�p�=��r��&�V�U�|= `�io���G
6�\�!��om�B-ēYq6���[�|�"�r��;p�z��ԺE������J����|A�;F��t�|��p�Ǟ�"<iX�O
K�(ȍ�%�S}��%�5��a����9��O��c�7z>Ɋe�&͟;g��ӧO�3}��Y���0-^�lŪ �މ�dq3�?����^2��b���Ί���Q��ro�⫡%�i��8@�HT�`FpP)(��>K��a�a�[vE��z���;�FP�r�(��U��ad��#;7$:�/�Y3	�dx�{�p
%�u[�����=%{��
��\%�J�W�9D�t@�l������G�q��X°9(�|�Z��%ibd�}�'H$%n|�N�� 
��&�
60��"���YdTz�t����
*�^Q�mX����|��╺�Z�ZL#L��`��5��}4����#��u!����#�`
\%��ZJ+a��s�
ە������{@Y���]`ɳ!�%b\� ɥ2T"^�{X�`�%L�.YN�x[M��Ē���0��dK����P�xd�,HF�i�����-&�Lm�I�֯�%�)G)	
%0��az�
�:��bARO��Ow|b	�O�%��<X^�gܑv��1���^@���,
��pZB����P2b􅎫����I�gΘ6u��I�&M��M�<e��3g�.����2F%K�
�*�?��]�[aͨc�nm�j�nj���#8D7��d2�(	�K����Xʒ����ɥ>0�7A����bG�E.D��5Wv��[d�����=f�fR�`Gi:G�p���=aY�;�R
-+

*����?�ĕ��r�������զ�8b|L��m�EZ���r!�41H
��
�	
-�97�O#iQ	�غq�ʥ�

ЛVujT�U.\d�
<��33�~��S�w�J�hKϫ,^��f�:
���CGcb	Cx��ؽw?N9�#��>�B�Ǻ%�2����B���gM�8��y?:�+����y��ݠ-�N���,yU�#w^'��
=8��{$W�J���q3|Z;L0�Zp�V�~�H�5���)�$%_��;h��!�eK^��B��v���A�޽���f|*��c��
#�R�X�ǥ᲍�0�4oѲU�.�
7��7�>�/~'PF�H�q5�@�U�QB&M�:e��	�Ǎ�g���&N�B`��R��V
�=G�0���|��ף
��p���]��rm���XfT��ۙW��6�)�ӦI
?�baIb�</O>5��ҳM0�Ե'F�FĬRV��68ap��H���{�6��(��aa>t�[�d
P�
L�\��(��f at IS��Jw"�x�ל)Q�Z���v
�
H��mb-L#sO�F�O�@
��s����&���R��,_�`��I�F`���y�z�r2p(�S42
��wE������J:���S���΋��r8#���V~Ҍ9������d��O?�
9罐�r!�ٓ���aW�xFc����'��Y3IZ����U����#\�(ރ�U����(^�j�Ԧ��.

1�
0��xي�X%.\:���	&����d2=8�\K��$�Xz�)�7zM!���H�#�@�H���MUC�3��9P흞�*)%�ޑ7�}ǀ�{db�;P���ӆ%���ᄕk7����w����_�ι�w��4��)�q�9���'�;f�#G��3j�@��IS�Ͱ��yk<�
ɫ�d
Ҽ����y��/�y��ڔ�j�R�4���S/�#8���:ĆR�Xʦ�
�aW�~�f�0�4Y��4����+���R&:��&��#
�e��^���ne
�%�<.0��	e
�ŧ�J)�F�R�G��O>�U��V�Y�3���SP�H
�5�,t�+0�&F6�~��܄-njy��u��an�\��4ɠv�Je)`E�

�#�m*Q����z(
���4N�l��Ǿ�F`%0a�%���1s��C��w!��A��GW
�^l�fJO
7rH�
��lR��F{���;�CJ�%Iǧ�	��\RQ<���R��9���x`��`s��֜<eD�&S����.��Q��U��Tu��5jZ�L6I���XLZ��JXy'U��ێRE;z�]J*zǎ1ɾa/MU���%���ܡ��"h�jt�pc�!iOF.Ŗ���3c)0�O�gL�<q��1�F
6t�<C�>b��1 ��S�Ϝ=Wqic�K��alU�Kz^϶&�c�&xP7;S�V%+Gi m1�����#X7ʘ!�4�X���R:i�x&��p�ӳo�(^��UCG��v�z������Ň��s�g}Ŭ5��<,
-���հ�N[��{��?)��P�)�k�D�
H���v
*1�2GZx���qRV3�܁*�d�9�6�6%n��g����ׯY�d��SƏ
:0�{�-׭U�b��D����
M���<����?�,��G���?R�y�����3q
�v�4p���Sg�]��z�O�G�����!_�'�
��/�ԩ�J�m�e��UK���&RZ�k�VMu	
VPW�C
�#(���
�/݅ӏ��/N�(^er����ԭg�
-�\���p�,�����²����F�-`��:1�3���eH"�ٗ���#Ì-M/
0	�
0�T�k���(Q��'� \u)Q�
%D_�
�%
�&
�?����7i��'�������Y"�
iK��HH���e�>
'T(R�X�ԋ��cG�
>l��A
�߿��<d�p�p��K�_���m�|"9>�*�vFܯ�}X1�
����n�\7Km���j������z�<�S�L�D4���`�6�dTkzl�0��T�T�Fm��u�ap	7pՐ��
��N���m��S,:~��.��-3NE)&m�L���G��Q�a]w 5-?��%S���]�J�G*av?�ST�Z�����.�̝�����7���{��*���������s��(m,n'H}�4���Z4��Ic�5�U8`��(���������פҟ��C�A|�L�i�6����g�_�
#6�v�F��p�/�C��	S�c>V/_�pRz��>�Vj"é/��ҧK#m��M ��W:�%����%7��E�.���ń�(�De�u�|��Q ��8k���.�]jZ�D��f�D
��5��h}+�Z��^Ӿ��Ip� a.���F�wm��6�$�.%U��qE��~y����XJO��|V�#�=i��Q [...]
�߯o�$:}���?`�!��c�p��
�3�;�Ue����/y��z��q.)�Cy at jv^���4r�M�QE���z��! ��%
%�K1����G�%��%�Rh�$�KƳ}S|wm�P����7Gt�{�
��
�/���$�{V�`�$`���V\T�
�eY����⤒��[T��]�J-�
N�/W�:�D�d.��$��KW��Ʉ���b�M��}��Q�P܈I8�B��_�d�JFS ��JQ�(�A�O��
�j�h9*aL��h����t�<R�T��5�4ĀMϾ����8u8K�W��DXB������/���� ���N�J�:�\���YBi�Ŵ�.v���j&2|��:�7ɚ�(�I.e�
�d�w	Ī
�z�0
����a����z�y
-���e:�:.X�e��P�t�$�;f��%��EE�B�sR��
l>q�h��� ��|�p;x�6�v�( �g
=�����Q"&����ow�*-J,=e�
8��!�1�YZ��J<G����B�w��������DV�,���Q#�
��ԫg�
����ѳW�>��
<
�����P�p��=������S�~Iwh��R�(ƀ��5c(��1�%�ڙU#�*���2/�
����G�\5
K2��!��s��$��s	k�"���7e.Q�����o����a���1㬋w��7Lž��5���>��]�ʁ�\h
�����RI�Q�J�R�J%Fػ�2���B0��ɞ�%;�A�9�
�Ụ�Q�@H�M�֬X��<P��F
Ч{�v8 �z��LH
-��h�_�J
Ҕɀ�<�,�6��

:r��i��FJh��b��#���}��Q�y5�k���*!��v���.v�ꏇe���Qi��/��\�S�x�s��xh��%�{�撒,Rc�h�)��3�p��g�d���Kf��
�s9�q��XsD�)�"I=�F��I�	�VS�$�nV�N;JR����`RJ�
-��F�������<�ĒU%
-'`�����>3���Q�'�q:t��ˈ�@��J� �;�H�ޭk��|�t�ֽG��}�
@�i����������a L��[ZOx��z���s
\4qb��$M_*�S���<Z�bE���hGغ1Y().y�xwH����?��Q�P�jhV
I5�p�Mv��?Q�s�|����X�n�q���oKdAI
��q*�$`)�Ѐ�wz W.�����p��dSIg��4<C��9�Ķ�*��mߥ'hap���Y�t��u6��[���
;v�8(c>��OP֎
;����>ծ�z%����Uܯw���چ�\�hڇ
|�>*
*��ע�l�b�1-M� �f��^���cLs�x��"
�2�FP����
9����ߎ��8�wlM

�N�.<Z���
�{�!=�
���/��x�r�x U�K"W`�Q�ri���X�
u��]&Vf܂#ݡz�ťK�����R`������)�&�RH:�^�I<O�������$J(I�
%����#�[�Ά�w�o�6�`�Lw(L�%J5v .9Kz1�RO-	�|!�WED'x@�
KRSe��I�zt�ҹS����i߾C�N@�
�����dq���UC���A��ԕ/z����S�Y�����\�2VO�ЪQ��/��%ɎH
JK�K��?�ţ��jhƬ��u̔�� }��IXt"/�'5_*"�"
�&�%l�$-�(x7j�`�R���������L(���vv���8҇)��
�O+��\
��
M��-����27�;�;p�@��;$l�����F���x�TT”E� 
�u
�U�'�D�KS���RH�v
�+X1�J
�t�
��Sg�]�Clۉ��H

:�u �#t��QkR�͚>]�~��b ��TZ�&;HZ����|@s�0
gl3e͎R��q���w�!V=�\��7j��%��7�@
��|G�Q`��=�}J��ң,.^�G-]�>��
�+}�n5�B
�H,]IG�+En����["����$L(q�
TF	
%�=��D��Q���\3��6�,��	����04�f�M��C��d�$�J��h3�
���
-����N
ڷmӺu�V-[�jպu���;t�ܵ{Op��K�s�PqI�7(�e^S�K]i�20!ɼ���Bք*xwc���=��ĵ)��kSTȵ��F���TwU�Bvĝ	AɃ%{T+���������tՐ��nV�Ѻl&�I y��
-O�ޭ� _�R�Y���,�P
�d��]�EP��&C�������j�����*�ðyϾ��
�[��F��ʹ������A�<P� |΁���
|�-7�
���=\���%ܭc���k �H�d|�t�������v���j7�J��)�G��Kl��FӸc���
=~�t^�L��t�^�����
9�����
Z.J�ݕ�rsʄ1#�
H��+��R�rZ	#�iRs O�
 �t at ujw��ʎ�a��r�T��
-�#F�X��� ,Z���m�I��ݔ%hң
�1��.&w�AL�XcL�5)5!�.aO� ʗv���c&�C&
엄	%+x���(��~n�b�r��%�ۻTb	�;pb�4�0�+��x3�sm�����FD|!DD�+q ��vǏT�,���ԡ]��-[4o֬)�f͚�h٪u�v
:u��O�6�����/!$��ʔ�c*Uy��������4�>���Ҍd���~hK̔fg�6ũ�d{=�U/��
�?�c������{�d��ɰ�xC�/Ѡ+
����&L���$�ӷ�:�m��Y����S*5b�/��6���*b�Ҁ�:��r\��.01�����	%�J��<���?�P��2s�|��h����:s.�q_����n߾���8���>��A�@��������\��ӣK�V�Rn���ӆ��\����_��'��KS����M9�i��q�<��.���
����TL���;@
�}�
�^�~����r*ы��u�
�nk(��K��k�m߇?(.��Cv�8MϞ
��]�(��tz��w��ǡ��
�2`R�E�L�t֞��12s,Y�'0��摖-�
 i�8`m�tH6�J�n`?��0A�w(d����֎��J�;g%z����|
�&A*�D�
-��m���|#��""�YD� ����`��bV�:�ߣkg`R�͚6iܨaÆ
��7iڬ��}��]{�J�sɵ���2%��q�y��Sڏ�<�!���y;��b�����J(jS�j���KJ��G7�cBX��� 3X2'W
Y�Rc�.�!���3�(=
�M�E&堚����1.<,5�{w�8Kh���&I��S�*� G���i�HJ7N���-�
h��3�%H2G�$2qu=�P��7o�`�
��={���
��9�5п(m n[��&�	����nR+�J�k��u
t���JT�;ҥ�A*����
���,���)u��D���E�����{!{�B�> I�ֱ�����I�pv|R��H�:�f+Y����
��<
-X�!թ�ʊ�Tw	ĪB��ƣ�V��F\���0���6���G-�&�OT��a&-}e
g�:f�yk��OTc�.U��H�0C]��p ϔ �$��BFUhs���E-Bw�w
�s�V�h��X*T�U�5h
-Βn���jG��7’�BDd�X) #�ov�j�A'S��LjҨa�z����S�n��
5F0�iסs����
-�%������	:��:Oi����s�
=�Y
$M$��+���r�$�7�X�j�re'{ݪsP�m�P��%)���%����,�jh�]cb�#	�
-�۷�Zuq�N��˵��]����:6,L���{�:�+OPV" ��($@ U�2r�$� �D&@� �
-�%�dْ,gY���$��Ζ�
d��a��ٞ�힯��ӽ3�;��_�'�Xu��@���e�z�U�s�wι��M�Ib����EA	Q�`�[]RҬt͵)c��

��B�I+�܋���
�o}E������/~	��׈������4��F��4�,MU$E�y��'
����U�2��ǣch �6�|�g%�t>Q4>C���퉙Sg��fl>"�|��Ґ��L�� ����7R
@�����"��|�S�?�8?;5��l��
;ⲒL���
�8$/�ey�ţ�)"\"X��i<\^�ûƪb���&~,b�e3�,�����_f�����z���!�Q3��~�;AI�

BN���@�L'�q�0֍�w��́P�%�sVJׅD�+�"��;��A+VaR����>���>��;x�1#
-" OCSH�'x�>ҟ�.`���s
�Iӓc�Ǐ�q|tl|b����?�xIE����>�Q0*`���6f�,��B��w�0�_bO��2�o�zIzLkc�2�"{Wce\o�U�
�IJ�h�V{�_�Y54��j�W�^1Y�J��4�ILƎ��;,�������oa��������낓d�jy��	���eG��V��s�Ҧ;����(m�����y<d�yy�)�a������ �~�������=���_���?���o�L
vO��>�g£�Z��kȥym_;����b%<�)\c>�W�q
a~��>)�V�H0��!
U��`��
+�_�B��G(�B�9u�����a��X�x�5+-+ɭl8���:
*��P��p	;Q�Þ} W��qك�K�~V�S��zD����3�mY_�w����l���
VW*�+�����e2W%Q�M��Rw_���[z8NB�E`��'��w�GI�(��w�T��z)�
R�"�w-��
�zq��%t�
���1-}AΈь�	�
'@�S�����?�J���i����G�
>t�����
:|���1$����,�s�^1T��~�3����f�ϰ&�>�
������`3��M�(�u#�J�)�Iw��xa��&
	�������6EJZ"્K\�;xYUC�!�f���N�6�-
-��4��c����rn�%x#��� %M��s�/ZPRހ�d�*
-'4G��
�)	;,�\o�[,�
<JV�����|�U��?���~��o������o���5�z�?��Om?|�!M�l�?r�0�J�w�u�5�[FiY	�~�v���ʬ�E����f�5��+��A�iN��;s���q��GE?9��`����,H�<ޒ��Rҷ��
jq�����
�g'!T
"�V	��u���Z�뮓Y<��A=xT��;1���x����͛��zY�S〉3y?�����F�L�L
4	j�I��VK�!��c���sGu9�]�[
.�.��~,|
N݁i{��
�80'��GVɻƺ�*�S�V����d�`o�I D��h�up/K�Ξ�9�5Y_~��
�	|�%>SO@ǣ������^�'�N:v���#���ȁ��1�ON/���3�oh�g" �; ���.
U���Jc�{D}���U7�@ؖQ�9��6�<��G�%6�z0���RR�d���*���%�ţV)j���hy��Y/�W'�
"��ʠ�S'�
��
-C'N�B�N��nHK�n��/
U5'���D�#���	�!W�7pa�R��D���ma��c�`��a�	fP?��#��`~�;`�������G?���H���|���F�ӝ_gK@�#����g&)_�����1/�c��h�7�u�ci�YI�+��6������Ɩ�
��GF�f��d�;�}{�
-}��?���Y
,�9�C��
-�N=�F��A�xrz���}
*��J�.�N��Y�J`7���#�q�#�g�Kٺ�z�4�{ӳ�K� ��^�(<ϧ����'o31���$����!Ɲu����
����}����%�����%����b Ls���E�[��{w�<er��#���ʻ6Q�%:��(s��ҵ�*�W
<��p��ӎ���y��ǥmzÜ��S �=5%�%l��	s08�S�I���޻g�n
{��
��t��񱉩�^z�3“�><��eb2`m+��45
�cҿ�wÛ��
�ʤ5�9W�$�T������4��CKJ+#%-Y�x��?�jh�]5�լ/H�Ne8
.�ɒ�?�xL��[���Q�|C���8�c���%'���w�
�@�^ˋT=�*)	V2���@aNK`��dZz�r��#��o~
�����~�{�?k�+���w��o�[�6`$0!_�v�L��6�
�O���`���hE$�hY�ݷ��k�Jf���Gk�Ƹ���бq�
D�`ڇ���W��
-����S �e��<��u0���l��>
:KC��#{)T"�v%�x^���ݥ�N�^���V"�7�gx��cc�/���"�1
01���p	�W�V!�:�����G�y"���ο�����o��;�,�#&$�3�,b}�5AI�� �u>x�)�m������к�䝯W��x?#{w��@�XefG!D�fAI]v�`FL���}��f���3�BxJ D�) �S�0"��SO�-Wc�I�����548����Ю�{������¼$��~���ϐ�T�#n��I�M��w�����l��m�sU	J��?e�\�6��
-E�xE	Mc�^��Zn�PdExѴ���J㪆�Ȫ!�f%�y���6��1�^�?������@#Q�r�o
-65��$� +3
��=M;���	�
p���OjBEA��v!�d��5d�!cy_b����9�����<�N���{�
 
 �/����M���7�ݯ��m_�ʗ����7����@�V0�ꀻ�#�Jk�JV�x���	4�olŢ+�،Oc;���
��1\B3����I
,�8y�@P
o|���癓Ċ�cHJ:�P�Y�N���7�@�Y�j(�^�J=���i�tV��z��ò�K���s{��T�$��W�Ȑ�>�uFx�g�A����g�Z���l����Dӝ�t$���آ��o~�%�?U�q�Q旄�Ʈ�`ڞ~�Ԉ��'Ѹ���
JXy�Ӂ�C�x�;4̌ ����)<�
��FY]��g>���bF|ޜ��S �5��g߯3�d�����ڹc����F��d�=1A�4:>套��ﰟ����J�!M*m����/a��
�a4�7M�(����+֦LM�
ew��[(�i,��o��s(�����t��U���m����h�W
���KMrY��b���LQ����J����!�[�HH��
�,Hg�2
yד'��:��(%B��z\)�YI
f��ÅJP�FWp���Veğx	P���k_� ��:��_s�7ހw��կ �^ó�_}��&j@�%0D�w����'��g��J���m
-�ں�vJ#$ڎ��‹O��6�#��<X q� ��<���kx���٨��:�nfj���{�9T"��$��M�9q5cJ������4^K;//���x�<��0_�>�0Q"J�r`e����Ix�9��
��S�L�9���R1�X����7��Q#F� ��?�Z II
e�t�f<�?;{z�rw�IT�@
J����%��kM���W��R#�e��
��޹{��#x�6��}R&B���Q!"_��)�b?�M!�Zp�l��΁�ޞ��.��=�};�v�%^:.yI�rn��f �}AL�x[;��V��R��F�
#�2I�q���H�s�+J{�e$_��(IN��)�6p׹�.�w;�����R\�Q���`����jyIyu��Z���$&Ž���xL���e��yw��ۿ43
�4�8��(N��*٭�p��r5kAJ����%�9,5�w������?Ff��1�>�Y 
 �/=���=��/~�� l�6<��%�����<�f3��ő�v�w����C����X�)+���\
-
�t'
��
�,��Rvf#tR�W at +�a2C��@X
b����l�����=LJ�A踣��V�|Q'o&�Ĕ�S��A�%[:��V�t�U�w�P���=����]��1�%1�%�5eo���{����s��]��O�#��j�����[����v^3�
Fz�+���o��8�$&!�д!��fx=�9	�>�X�N�q:�W��}���a�nTIn١UK��
R>��?O���>'�p͈/���_ >R�)A��e>R����z��:;��h��wtvu1�Gcx��K��O𷘘T 
���ɿך��TCj���_
o�I�?�_U.��hd�U֦��:���i��6גR�tE�nZ
-g�̪!
-�������K���$7}�D
�O$1)i
? �4�ay�Љ�0j�V�淿�ͯ�����(>U΀�,<&9��=ѩӦ�m�+�
���T�7�Jrߨ�\�AW��7�]�Orw��c�L/���+��W?���~�9>
��3��
-`{�Ov�C˨��#�>����e���L,+]}Օk�Jr_1/,�t�����2���l;rt��B9I�V
^�êQ
,�8y�@�<��'��X>�����|:�PIo�5B%4�W)����{�����
������ir�Dj–$&\��.�P1���f�����'��
�^�
5��
@� $.��>Wp~��&��T��ܳ���0^O"N�N�
J��!.P�8�b5�%�“�� M�s/

-�g���
-�Q!<%`F�)��S��}RԷ�N��lokminn������������ۿ�y	+�B+��ϕTD
���P��G��
#�DK�EAH��0}d�����t&
endstream
endobj
324 0 obj
<</Length 22349>>stream
-�gp�U�b���i���Q�c�9�t���0�-3�%ky�U5�UC��j��%n����E\T���D��kC�?
��v`�F
��h
b��AC���;���I4��ހ#{��0��b%n�z

!s�
�Rx#����	�4�����>�"
�
���K/}�S/�x�
��>��K/}���>p{��2�@$��Gc�N�-#�So�Y)�£�&�,qƆ��A����
��|��}�#���X
���q<�������(w�	g�
�x��`i�O$�����p��ۈ3��ݓi<䥶�楩'O��c��<�TU�|���31���=Ƞa��[���p&���PӻF&�s���I#h)Fz�����/����+:Ȥ����=�
s�^P���D/VQ�%-T�T�H�i�-��ҎY]>B�7V�ez�N<z����għhF|g��O	ˆ\Q�
��ځ���y44465#1uC �sh�^�%�bH�%��R�_���|Ol�2܌�JUjM�*�2şV��&
wB�0\i�+��*lN��;с�6��2�Й���2��В��37YUC/����	��L�31	i�N�_���������w��XDb]K�5�8�YX09I�px�-}�
W�Iv�l�
-R�8
�p��2-Q��A"/��vρ%�Ћ ��|�>
���~��"����<���o�"1qD����Ҙ�>��f)lP�Jk�J���A��fN�Kf1�׍IM�:B�5y���O?�,
��Q�@H
h~�
�'Ѫ��h�Y����e�$6+�"b�
))^Ҩ��%�B��G����"yi�>�ǣ�9z$��S��SQ�_�h���"J����΂ &�O��w� ����/л�
�_ɖ;�I��0��jF� ���8qdž��N��<�R�]��x���r0Qv�
(Y2�Ep�O�`���:��ϴ��I��=N'
��x^�9!>
ƌ�y��rJ,�]��n,�hj����rY
�\����	�/�B��0�/pѨ
 �n�0�͞�R+S���i��3�|dƷb��p_
��9ב}�B��R�N�J�h���aC�d�<8��*�W
uts5��'y1Ot�ea�J(��7�%�ICG�ۂ��
cr�k�܍�؆�%%� Af


�\���wO4՛������mT����W�GJ#W�
K�M��;�+�)+v������3���$�L��}�`��LJ��y�y��

��xd�{{��s�(=���X��
�|�,8!\c
����D��:����ۉ����ۇ��#�!S㙠�>��x�(y|����Qn���`��0t�
�EB�+	΍�ʰ�
�J,/1/�Q�G,��D
YV���*"UsP����L�2�I 
�+�m�/�
 61�F�|����R����h�#���ۂ�^�
-I�}�Ӹ4��R�;!<�MǏ�׷�k
4'	�&�wh��經�a�^e��D]&K>c>�C�G�BajG��c����bg���i�<�����2�����l&��Ng��L����N2����;^14|x��}�k* �l�/C�$U��S��/m���6wq!��##��7(���\.i�i�Q�Kb
-�tף���%���`\��t�PNT
Q��G�
��H�ci�r3M
tP�tL�P󗪗ۯ��	5ڍ��7��x�A��¸�$�{B%�*�l��/0Y�
-1XI/�l��OV�]Au�W�cO����!�30�z����駟~��s�;�<���O��_<D��Gރ��O�ڙ����@TA��U��JM��%=��FЈSpqfa��{��'��I
�)�'Y
�?�pV�-��<ӤB&4��J�ΦW^��=W�t�=2��
-�ҀZ��}�s�2`R�D��4�]~�؈#��
>��nK���
 �:���N� U�F?�> �G��x�2I/}��e�cJ��ܬ�`��Dk/��cº�;���;!jKԨw��Ϝ���Fc_����?
��BN	�OьxLBD2�Y���GJJ��{���A�L�3 at L
MX���C�ff�3I>�3�>��	טT l�JReH��JcЋ�2I:�.
-��^'_
u��
-p�e�� ���c"NrԦ��%;�])�%�Ż�N��t�Q5��G�����e7���O�/~�����b&'t~����d��m���Q�
����!#�C��2
‹�9�=a{E�,�����
KL��ʒ�’����6kQ7
1����������'i<e~�}����8��LGhB��x�l�~�/
[�b��a��.�ᗐ�5V)0K����Q��n�
Q�>LM��A
���^)��3�ЬJ�xH��
��	�6��
�F�(z��%����0/����L61�%ê2
�xG�؈#� c��Xu[�9��_p�D�	(��K|��*є���`ˮ��Ȩ#��
-I��H�=�)�*
�b�n��ppY7+y)s�*,ѫU��ԕ���
�ؖ����
ψ'�xj��Sb�!r�� U9`�NpP����&50�D��#1esu����4��W
G'\>�*^w�F�$�$�R*�u�T�oIy�S��G�7�^Q.���(��iN2RH�G�4^o�K.{Iɂ},-�UC��pIW
�X؄
Q��<��Ǖ�$��+��L6t~���1���Rr��-w��Ѷ7-x��'����Y8���$�$�F��MEz�f�
VX�����D�i��8u'�� xxB��?�0����/»��E�A��Hp�c�����0G�/�H#lF�.���<l#�)l�0Z<MVh���
2��"Z"!�%"�q�1�g�p4�ۗ[5��(t�
�*�i	Ĵ�U"	a�K����߫��5y��y����)��=���������G��9ވ#� c�Q�%��cD����
�*�$c�C�F
,F֟?++�1H�b%	|M�0iP,�N�wjA	��܁�[�W�%u��Ϙ�K��;ͭ
ݪ̞�ѝ�=9�1f�k>�)���.�ٳ�"�v��v9)�DMuuU�v
UU��M�HL0�D+��<��|xQF�q
 ��
��5ɪT�^�M���,oB(�U��_bݩe at e1["6a�PЮMQ)Wu$��__�z{����K��U
I^B
)ʆx�
�ڰ�n�ω|�
��:
-=��
����.O��>���!_�'�̂l�{Ț[*y�
(0Y=+���7YV��:�˖�
��/=6����N��!�8�9����9���p��	l{̮��+‡x`dP���ƪ�*�+1M_�^Yz@�d&W��B�

���fB��ϳ<����
��6
��5I�a�ؐ�5��^�

��2���t�W\%n�eƆu���	]�g�Ő	�l`&ޛ%��~�u�l?�m��}D��p�A�������J�l�M�q�[
��W1k���
h֞�III'�0Iq L�I��к�ɻ�;X2
�m�H89#��
�1	3b��!��Y����|���$CDR-G`7��5�H�۶m��VVnfJ@Ĕʠ�$OC(�

; fb2`��@n�fH��Jc��R��5!	�H)W��!�s��k
�+��Tx1���3��%W�ЦpՐ�K�����6(b�t����A��x3��E�*l]fzq5��}\�FTn��,H�0'��]q����^�
-_u��{
�0��[��"�jM|�����
CC
�S<;�؛;u
-*v����O����3� O�C�DxC��g��N��|��m�Pi
X)
,��'����0l={p�
�sH x.(ɣ�@N�@H
3$<,(	'�r���7������q� F[�w9å
�pI//Q"�KY2�'�Vd'��mYV�A�L��8�/ݿ��Ĩ�ҷe���:����m�Է�)��z�Z
|� ��ɨ������MW�=�džM�2uGss��nKJ�2�ZY�����:ڄq\Έ���"fAd�!r� Bvö�d8���m�Z^^^V�ٺu[S��Rgf��a��1=-�ףn��ILkR�R�o;�g5�xY2�
Bw�M`�Z���+�r��
oos�Fw�n��a�,��jH��x�tP��
x+_;/03}2
-�7d�2C��	��;j�i��.�aӮ7�S,x��3p��,N*�
,���jVX�B���*8`Z�7�^f:��	����x����)�i<�Ok���oOOMM��
B�a#����u
-
��>���wF�7���Ÿ��<D�t�
a#��RZ�F���ǐ��
cyLHy,%�Ǥ�P��T�'x�3�y��.��;�
�*
-+
W��a
B�RZ��=}���@l!1��z}\h(���j��h�
>�$�-as�?G�a8jgz ����R��;_��,�o�"�&�7�/�]�,0�9�n�6�ry�0A�~9��g�7G�6R�2<r�LZR]h��iF
r��Sž��H"r׬��V!%my�ǖ-�MDL0I\`�V
�Y����� 8�f���rH�B��t��
��5ӛ���7_��
}Dxtna�:��RHF�dl�t��䤥b��d5k���	Pip1vx[H�yK�
Q[��
%w!vv��%!Qb�<R��O��n�fN���M���OV�=l�VX��4-�c�T��@�h��� B8@��
=v�8����q砷Fi�k`nh���lD����bR�s�o
-��c%����Ƚ>8
�
S�7$���R�S�8���7L�'�뫽��D����6:1��%���K/	d�#-�
#[�p�`&��ܤ�Oư��W���
��3��!����p�,�hz���!�ō	�$���c��!�f���(;��\��r�Y�0�%���-�r���B�X���$�!j�
��2n̈c<#���R�~�5���⤲-[��JK����	���
-�$W
���N��*3���� n�\D�R�Bw�����A��އ�0b��I�t?����et֦�c����Ϋ�I����b��D5��%�	�ipAL$m�, 6z�@結�_�
-wn]��\&�8�v】,�#%��J�0�$k�D�R��7�ZV�]N+������O�*�E=�i2@��"5� ��0LGh
���o>�'g
��ʐ���q��m�E2���XD�$�ֈ��ހh��W��
��q"�B<u���5���Ray
�� ��߫�O��Tq���b�cU��d|�d��0a��1Բ
-�dz�
-\0
�%�.ܭF[q51� a
1��y$(l H�!�"��7����<7�-�X��ĆRĖb$Q�H����!lVJSI�0ޒ��59�<ܯ��m
VjK7��ﳏT�k���5#
(�nj@���A�$�\ٌ�!%=�����
Dfڂ
-ES	��Yj��EDL�N��c�d���h�Ti�/8����&�a|�)J��Jw��Qx뚓���My�-E�ƕ7���"W��Ǯ�!U�Zmxu�UaSt�J_�
��Gh�'n�AG4�
-
���0�.z����t�
�-��s\�qrV�3P�q��X͵��zP�7U�˹

<��l�!,Vg75�߅Ǎ�


��0q�8���f�蠲]��uNR�kä�Q6(RZsV��p�s)MZ�<�V��
g�<I`��>)���O�@��<�X
=�2(|��C,}��|3��T�d��L^ڪ͘X���5[���Xz9��Ļ՞�$[Z°�6�yP�i��z���^{�Un��
-�`"6��;�,&����;�$#qiژX��3
�����5Nrmuq��aN�	�"�d9n��A�֌�$(�nƌ�+fD�	�!2, 3� 3�!b.��7��v߽r܇�,EK�
-�
z�P'ɇ�D�ِ���Zt+1K�B�Jy����@{���UW�� ������
��H!Y�;
(���]H_�b�%W��/������~��Q1JC&d��h�g:#��g�C��e&#n\��n�q�
-���	�Y��
'}=�Ff��b���c���j�R��L+L�0��3舗�wvu� x;����v��b��� �w��A-p�`���tPq���?+����%�Ӵ��Q;SO/"!�]R 䱛��A�������IF���o��e��^U
-'��
�$�U�f��%�у�"&��N���^��Zp"L����:HP� ���'��6�AX1�X��m(;ܘ�0Hu ��:��Ʃ$l7 
k
"��J��4�vK�-	G�=7�tlGG3��gĠ�K"D��1#��
A�
�$'	J�瞻�����?w�s0)�<H�� �}���g1���xR�χ4��d]�A�C����u,a�(�^� Wx�2�
X6'�RH���*��"��Ҽ$�S�ȓ�}"�#;�n�;=m�<'�:B�a��
���e��b��D���Y J�͙�.3�PkpRd���
��f�M�EF:8�$������,���
�������	�'�N{���>�
�����cɆzdj����;D����ّ�jI!$��E�XRb
K��*xl��
�(��<�H
E	��K���o��
�(�4[R��
*9����%J��K6/��l\�9�-��
-��3��,EM`���
� �`F-�T[@��[#�)CP}H��A\!��-ƴ}GKs��^t��ލH�m�ж��$��p��G%����ق���&fD���挈�Ɣ0f��H#z)V�'��
$�;��;���y.�+Z&xI>H^����v�f<l��k�T���"���{��&8�=K��f�^
�
-�(J��Jq��x
P��h�����@��U
���m*8�l׳���
���ث{8�;��Q{D�.�T=
B
n�$F����,�[ގ⤻�Z�]5�Gu���+�������|=Žp�����Ig��x�F�x/B6B��D�cj�"�[��9|�
����!�d�i<LB &�C$�NHwA��Q�hS�0
�,�Q�VT��k
�J.w�^^
-�R)�GPa�6�2?9���RC�)���ɍԲ���yJ��y�:$ΰ�蓨��Q3 at D�3сI Ko�Bp��GAf��;MI*L��-���
���ɻ��(�M<X��{
"/�=EA�
�DG��M��]J=��Iw!!�c��v�&"&��DW
E�%�DfV���.�*�|2�I�K�<�^H}O��9;��w�E\N��+7�̹ڵ)�u�U�ޅL�?#UCT�ʼrH���+젴���}lګ3�#:S=k���Prb��T)��N1�
��$-x�ơ�EA:+,8ɱ{b-��
-� l�Ep���-�u<��!��X�

;F��9ěx
��	�-���d�7��X8n���Qo��$��uҒ���9���b�!Y�<���F�H��̫�R����X�-P��Օ�pI�=�D�
L�X��d�2,5<D�4F�Dy'��g���y�:$̰'�h�h�g� �2Փ��u�zX� �7��҆.�j��2
+�$%q�3-����WF�.�-��⎊
��,Z�Έ��
˘
���)!f:)
-"�:=<٦��شi�݆Be��.�
-�"&�{�`�ⅭT��LM
-]�A/�����&���v�w'
�F�5dM�u�K^'��_;Ӹ$~tՐ8���%�xd
�IH{�d��"�#�ma��bg�]���
7��s"(I��4����Y
��V{-�������������;�
rB�<Vp�%��Ɔ�#0������X�
�b4�5HiU���óhI���:�%��e�$�G�����A�偽�� ��}4�u�IؘZ�i�i�^�_�GȀ���������KYϛq�6�Y�#� C�q
���HĞ��N�����Z#"����#��v;,�G���85�� ��>*��$�©0�4�1�d
Y�$������vc��_^]�f�.���,fD�1#$Dj"�J���[oEfbb�
-Վ���ErIef�)7c�v3����IR�9
'��W��P��=����>
-��2�����&ƓXE��ϵ�UC�Տ�N���
2�VO��&,�,h�<��Pr�bW}�Br��0Ҿ���;��uZ��2�`!f=���lWP[a�
�"��&�$��G[
��Qǣ�9ěx]����)LEE�\ĥ�VY�@�|c��ȃҀo'y8R�<�,<� LI��on��)��QR����y�,��T"�wb
-l11���l�`�}�G��-
����:�]@�=eS@�P6}�N� )��s�o�0aG*B�&$��T�J��2 MI	SpEpRl��
-���ؠw���0�B���{+rFԇfD62#*dݝ�`��³���|3�1�&S������NPniP���*����IT�=H{Z}�>���q�<�DR���ܧ����0']���6 �����
-9r��N�v(�@�dl�C�l:
-<rD�.���r�>#�
-�
�j*�HѲ5Kyk(]a��h�$�:��SAL��Zn���]�h����C������$���[y�U,n�
9�w�a	��#�RʒP^P.߆Ąv��	�)�G�@Ly�@jk�ۦ��@�ir�>�*�Փ�]�C8�=cyI�Բ^`|+�TZ���ݾ>Q�L��5�̎K�\g�{$b
8�'Qz�,����o+n�4et�;�y?3�n�6�5��ڮ�$
�'�q+��
�C�mBLG�.b �W�:���3"��aA�
- o#JB��Q����VD�������?�fcI�)4)t)�U߉�7!
�،'�Ɛe�P�Dؗ�1�]_+����[�%��5ipQ%�2�3Y�V�&�̅�Z�B쪏������
:c2
[]��I��
��o�OC
6���	b�
��� zh�}��%]�g����h�
�	�6�Zę�Z}Q�����FXjAY05LC!%�"B� y��� -�����V�k�D�j�{
-WN^
-�עE ��a*��ȕebW��':" &6.�뜠p`װ) w���ܜ��6K=w���!� ��aIH�VZ���|EI[͉�,7��Es�S��C���	͈ڢXQ3"
a:�j��Ѓ��V<n
-�����1�
 ��c��McQM
-]�qR�o�Pߨ��#�vy��;ڰ~߶���Q
�/q}1�)ka\�	U
i^�Ӭ2Q�܀�)/�C;j�F�0tP�Q����	ɝ�>e4�
-�]my� �|`d����$#B]'o $}m�ô�
��{@X,�&�&�^uM�8�E�Z{�7� �`
���R��iӭ���<ސ���H��d�t˭�Z~�fl?Fv(,�D��Ct6�f��g�E�wN�:yi��%YP�ټVhbJɓNE�s��'�{
�TdҨ�6��&��-�h'�""�������
S
���&!���F���$_wi�-r@
1øa�l��[�ͲfDm��SB��$'!%݈�P�7��q�H̺|��*U���Y�����P�l�dj�Ti
��ĸПh�Dv�v'��+�]&�s�%�+�MY+;���:{Sȫ�
	���;z��!��QÒ���Q٤
-Pq��0�,<`�SZ���ހ-��6A��Kur��2jQ,�#��/�C\H���6D�h�%�F��
=�י�lZ
-[!6C��1&	���}I��g�@P
8Ml���P]U��ܸ��%YQt�
abRK�r�m�܍#�R�
�F�
쮃=�
v
m�Ԡ׸��
-��趃���
x��b�U�(� \������8�8���rܬB
0g�V1#*��U���W���؞d�-q��4��8br8* N���l8 �n�>�<KiR�rT)O��V�~�M��	��!�5)I[F\NZ�6e��v�-A�[�%��9
��$�
M*f��MlKC��!wK�m�K�b�I^
^��;`�����
X�7Aguo�fXH
ENMM����5�J�[zЅ��y�/`ƛ���lr,)��0�X��B�k���@�
�,_
,����e�HA�L-DJW��*��,��EL�f�z��zzeՃju��.��P��;"�¶o )�"D�>�����&�LFJ�)I�m��TH�6B�
m�4g��jFlY�S"4#T)��
LIף����t�L��ܒN�)u&Tf6om��n�P�&�q��w �>�W25�rPSR�2n�r�Eצ��%(��
1�nᮎ	��ΐ�V6��a{
R�!��GN�-���5hB�Ѧ���⤵��qVxc�~�$~65��>jIM��?ma�*��N�H�)���(����k&
+���"qp�ǃJ
�	d�!���y��$kYd�ވ��%�+����v��P�d���L�/0��.7I����O�9��}ߨ7��]����d�
-'#E(�
-���~��d����,_94#4B�nj��fr3�F13�

��Egf535���R�B�{Y��J5�%��T���;�M�i3nNZ�X\�P����J7�^O
:��[�.K�B�6f�)��b�=��B�i�=8*�]\f�����(]�¦/�A�QG���A"���xl������K
-����Xhs��u�G
O
��~�]B
$�
`�sɃ)I�����G�Y��n0�k選��0fLM��A�Ճj�@�-�+�l��Hm���7��f;�m�E�b���B����%�0�B8ə�
5�5W��cF�9i#����$xI�o��b�
�+)�I�K�<Rq��>��;��h��Rn�)u�I��s���
a����SQSa�X��]�Fw-늢�7�
-�n+�Pᤋ+���@�'s��C���.�
>�I����g�e>�6^b���6xM�#�H��@f�Dk�e	�!�{�<
d�����Z�i�x�Z��LM�n`���L=��8�ST41@���Puȸ
��}u[D����{�p�%n�Ӫ�(B�I���u�]�춅��NK��AKÄ~a3"2%�a�8(J�D>3�uQG��o2��f�&�mM�*��H}}����s��1����]_>���I(
N�a���&k�FBG�xH�
c�K���9���&��,\LN*����
n�E�
'��d�b
�1�w
q[��oW�$ w�c’٪�H
O���ɷ3��v-�
���;�<\9�5G,�����^�0Rb	�!a�Ԏ5�ST��0:촳U�.��P��3�"b�7�(P�*pE���n��[���*
��d�mII1�T$���3r8��-B�X��f�~6���tz(b
-%�n�`�M��dl�cGCjR�R+�T_��=�^t+�
cL�gW߮�\�%y��Y��m����hA�x�k��'��ɶ9��'�$��,g����-Ӊ[u�W����1����yԨ��g���z�?�`c��
�7G%���$�w�g`x�-���nW�X�@�C�<�~ch��<yɲcQbR�<���;ES��0�P51ȰK"5��]���&���Z�ٚ�vȢ��b3�b$�r3DI�0�B8��m�
&I͈0B�,8!��f՝�[��k��d�3��
b
-9�VC
-�,����$���.��7!	�`$uV�;�Zr�9��
n�8y�F��Q��W�=Y�"j�B'*p3
-5�EM
-5��sS~��pbg6Y	7']$ɻAwMH޴�`�Ԅ�ck,,rQC\N�%>-S€s��u�I�
-��a��Tm
d��M���X�
��'R���R��n�)Y�r��e2�'7S�>F�%��=�D8�N�)��!�UyՎ*e��`�f�n+�ei暤��']�"NrFKB�fF��QNt$ty��O���Io�� 8�f��&Y��I�K�S}ԛBk�R3���o/N
-̀X^2�f+
nI[���A��NJA'����-��P��F����Ԩ�dntd."']Q��/	ԉ��DM�<>ձx�����V�S��1E��ƭq��P
-Y!e�5S[�py�@hw��I�o ��ăE&ߦ�%B&f&��I|qO�a,͍ur�>��ȋ�o��[F4�	����G�AH��a���$	/g(a�I+KEDDc�n�����dF�g3
�ZIHzX�T8 .�f�~b�t&�Ik���'�W�
�����E�!�x��k3��%��o
c�A�Lr����)o���Q��ZT�Q��pB����IW8h)l��
ffBKL�c쩎�K
�Z��͒�
Jr�f�I�-���`�X�`�6@���Y��
-C���Z<�����**�s����Im�ƀ��Y2�T2`k&p%��T���l��֝�t��P�
.W������0/]o �9#���ܬ!�g��p����J)��3
�H.��43=[t�$�HҤT�)K}��LL��m��p�܂��E�$�$yux�Ffvt$5-���]��E�2[�Q7���Hy�q�!Z�2*��=^�l)�-E
}=��,�p3M�K4�,��
-�4C�����Co�4@#��eR$/E2R�6�/e���j7���B����:�f��H8���}߬^;���EH"kw���U2��t�tE1�"��F3�⤫�a�# �ĤL�֥�ʰ&�*��b�gj�
���9��x�p�š'
-

;���{�6�=rb�xH��l���Q���f����;���IZb=
���j%�x]���\w��Z��@JV&��<�v���`�e	d�cA���k���YlY3}���.T�a��P&�$��͞ohɪEÝJ�F�
�l��B$��"�ulb���3���s�\Ќ�ɚ!��
-%�����q���Z��fD4)Ui
z�:������T(�
y`+�MY�Q
/��1k�o7�{�F:�_Y��-�H���٦��D���&��Z����H<b�����wy��B��
�k�篿^�K٨�\
y�A ��wmX
*���h�B�ee����l�f�Hu�4fj7�jc��B%숮�F���7�1� #ٍ�@���!���ܔ�j�tE�r��̈��@dc"���4�AL�>#��f(]�%�ϠNIZ�R�ꯈ�d�$�M�Q����7
b�:3�M7D�:-o���ݠ!�W�&U�f�2�iNhd�������[�ת��Uϭ�-�;�E���ޖ��ŐG!���<n(J
�6Y��Pp|C���6^���
;��N���'_.� U�Վ�Gw�e$��”�
-��Z$]�N3"�x%��Yȇw���|ХI�J=�C�{h��dR�;QL�{�-�R� �l(@L˅�C�Ԙ�	����8@#�� �bI~	�if�`4�2��K��d��
�Ÿ�K .ۭv�(y\�@��($�����|��f&�/
0�cG6�y���Z��˾���^;F7*���iapYE2B�� X�̖1#��q٠�DhF�()zkV���k+���T)����l�OtJ2i��`�Q4x�
/[�W���7���1�ny�YX#qG��;�M{+
�k��t��8�\"�:,�
�,C
dsʅ?���
ˉ���ܑ���cp�نJ��y��
ʾ��o�n�t��n�����Ѣ4'%�*��+3!k:#"ќ��x?��HfV1S�V�k(Rh�A����Gx6!)F*"���,ch,	�kc�m�;:�
���P��
F������(/9�F��;
{+����&oW6K䚵�C
��I�gS�,[��7[�Ee݆J�׹���
��>����Q��Ҧٌ�J��I������R���n�� �ְ*��������g
�%l��)n��7��sSh�uD�K
-<^�w��})�v.��㧶�L!�t���v�L˥�q���#�t�>��p�R&�›�n�[}Mv��:��[��z��cw�Q|dn�v0R��jO�B�MfĒ�R���\>|؉�٥�8MZ��n�d4�P�[ʛ�4-cd,
���mq/:�r7as{D���]l1�p�l	;�;��.l诼� �.)�\�v�:*�8�xm�N=��F����&;�Î�/��-���촣�e����p��JS�m�
Y��qRT�K�J���j�֥zѩ����;�2FGaa�bg��qbǖ��AU�_K7n�����g�e�\��5�v��J1�r
�q���X5�0d�����&���BMv����jķ|��l�괣�Hl�g
-�/%E���\Z�����:
��K��
�]R�Q��S�zs�;�2F��c�:S�˂����cTźq�_�j,�,j*d���/3ˉ�u)�'^ �GXU�\/�U����B�
-3S��T�
�``�׹�
��oR���-
�|$	� #�$�VS\^Z�QpJ��ucJ��n��J�H�&�Uߍ�a
3�R�tIYF�pJ� v
��]��
r�}An�
���ƭ�( ;�.t�_��x-��YB
k ���n�ړc�+҇J��y�5���t�[�N;%&E�Y7��Z}q$�5�HhND~�x��{�ڌs3n0܌��4���n��V�
��Ԑ_�X;�D��2�ĉ���#n\�������+�cU at Vm[<���
-�m�&�B�̉.��"]vd�
�Sb�����j�F��TQ[�Hz
��C1�;#�5'"��5C�Q7�:��tk22
-��:�a\� wM�r��|�#vl
-�q�<���~<�.|8�b
�
��<�T 1�vUؖ9��jDm��d�7�v��n`�$
a�Y6���Zo��'트=�6
��Ѥ�
ɩ<��
�Dt��;�2�F��qA����q`�!���W*�K^�q XE������ѱ�)�
�y�T���j�a�/��s�=�B#�j��l��MHK0���x�v3b�IQ�9��c*�Z��I����D��Φ$
��΅C�%�\7�"�ˆX�q�;~��
$�W��e��`"L��1;��7̋�}v�Vq�tѵ^3�9�yw�s3��4ui��Vߵ�u'�Aek5�UXڮ��Ny_#��r_5���r'ӥ5VK���~ڥ��<�7AWhK��69�6;׹�e���>���ik_4!"[���[�1�N7c	M.G}q�[�3]�#N�nq��p[Z�K������	~5�
��;����+c���H8�mv6;��D:/�;]�Dp���Z�qa���xM.CKi��ݪ�XiGw�_0tV��?N��
�.�s���#�G��
���&��Άb��!G�%�.�K\�5#V��b�Y@��kҭ����!���~���N��y����<�
�h��vט�� [...]
-���>��
1P��UY��6�w�(��XIä�i�b�b�ǪAgU��' ���Oa8�vdK�U��lD�p��el�p,���h���I+om���D1r����0\sܽ]�	�"�뻜?z�E�E���wY{4���e�\
�Dz�_{,P�pu[�9��I[�/����Xt��Y����y�I�X�X�N;��2�V��&/+��X+�\F��qy\QĞ�Հ�ed�Ǹ0M^��rǪ@�2j.���=������xB���y�����r//�<=�1zn�d�����7}
��=�xnr�dgI���օs
3��f�O�.<ZZ/y� ��^���9/�J%KkwO�ΕV��J���
3�3���=�s�����z�����L���&S^�K�Sy/dKkR�|��d>�����J��D6���dd�|�qр� ����y/���Aև��?�h��{(9Q���tɮ�|iEe����ڮ��ə�Ӄc����@:~i�ɅE�<���sA��z�|:�L�z�5�k�T*���3�|$=�z!�M�2yx��_
-�ݻ0zzqj~�|m6��KsY?�Hf�����JkY�p��{���y^2x��t>���l�,�ɗ���D2	/���d�Li6�=$��l6OW�ֶ͟?=�_W��5X}�e���
{N��S���񉝍�7�5q�c�T�l�y(w��n1q��ih����ٹ�-��2#c]�3

;Rg�����ؙ��t���Ίc�]�U����c]
�u'K���ę����=��Z���o�9�5��*fZ��o.�[윢��G�=�~�X�������g�x=Ƿ��j���m�X���ۛ��'�ʎ)�`������l[��q����}�c����ҟN��8�i:�}�ח./���=ٚ�d����75���Mul^�>x�s~o��ޚ=
�r�`W宠��l�юT�W��ղ77��м�
�Ln��.x=����sS3}-u#3m^���=[
Y�X���'�ݹÝU�7��s%�X��G�X�C[���ꨜ��[���ULO����9V֜騄߫�����v����Z;3vjgUDZ�fl��t�:�V{������3{jOLU4V5�\���G=��վ�7�U�Wj
��
d��i�X.y(W�
l��Ol˴Lx��v&��
-�����%�)nn/)*3u�d����Y�A���p\Ԕ�&��V�+jg����ׂʹ�
AG�h[Uӹ��dkgs:�5��=YV�8������y��x��lI9�v
|m��Dp|{>t���ʫ��S7��۷e�k��Ig�u{M����d�~tg�Q��l}UӁ�j�����k�J$_R8�K���l�u����Ly�Cu
����_Mp?��pyy]U��(<�ɺ����T}�Lu
<P���|wUS��)��`SPY������C��@b
�%���l�L�`;(g
n%3�L��_l	��wy���^ob�bڛ�W֞ܺ�H�_���;�d�[�ғ�z�[���
)����p����3�³�/�$Ov�0��<��GZ�[���:^C��/W����f������P;�w����N��O��Q��;w��)����d[n�
�i��9�
�9���
����no��۳><�hi^�t�^����H�����f;����B�e] ��I�J~3>Z&�:��폝�ٗ�6�N�������̀dG�~My�ۛ��q�7�/�
�ٴ%�
��
�7
l��w��4����v��9��޲nR<|�n!�7?ە,�{�
*��ó-���d%̧�4\7��?�W���Y��F���̩C�lG��{�3�Ae�f�^c�������~O�������=�~{���=��
�_Y�C�v�L���G����m������8��O�~u�@g�k���Ǜ�p�M�,��w��=0ۇ3�%�<��Y��W
�'[�͞���6��G{��Ʒx�й&eq���E���	��9���|�n�`�?�
��}ls{P�;�Au7��o욇o��1��m�K&����
Jl�@
-��D�7u�%M���)4 ,�����|h�ɷ�f��?Z��&��a�������h
�����UR�����ǃ�`�fv��Ї@�[�Y����,�`�s��߱=�2=rn��h7̻��6����:z
LOf�� �U�3�܇_�W��`η϶��=�7?�

�y��!���u�%�nn���
r��.�z���bl�5
�غg�
�g;PkM��r�v|�֠3�>[��\���no
Z���O5��N탻i�9���Mw�◥q
-
��
-���g��_I ��|oPy~�|_�f��ݻi�T�O�i�
D+�
&��(̓�#ը��54L�VD<L������
�H-`�熓`u�������
��~�tc
Ԙ�!����$[�s�A����n�FsP� �
�C����*�ꢩ�:�
�W���G�cu�h�A�i�
L�C�h�2�y�Λ�`�x����m`�*�^߹�v4�
ȴ��C���cV�њT���
�P9�
X�-W�փB��<�������:����u�5�PbS~�
	�-8�1�(���K�H=����]�J�4��DM�׷x.��ބ
���
�9���'N�lh���E�i��
К |��K�	�<�=X�������r����ձ�`�
����(���l�
q��?:	_���.�n���<�w'"\�to����@;�
�c$Bi wg{��Z����J���-hCƫ�U=9�L�B҄97���:0�:7﬇�Z��@0��L���1�M΢�i���<�+麠c���tU�7U��\<��Z�NW���> �+۬e��lB
sl�Ii#�х��������{9ׇ�"���:N�un�ms�7����"�t�
k ���W��F�d'�.
;8�T����-7�����vm��Z
4��'6����fP�^�"��LFc��5�t�%���.�s�S`�
��M4���3���A�
�K�0׬� ��o [...]
O �����z��h0�C����V��M�$�
��9�%���
���9v�[^ي�]�3����z����; �@�10�-`i�&��O۵|��i��a
{�P�����]~�tJ����5nZ�:�H��?����sqt�
0j������Q΀t �=�`ni�
-H5!�
���eзLl�Ȝ�mYv556�g϶�����ֳ�xwU�L_{Yjx�hk>�MSdO�b˾]�z.��_Y�n67tu������m��zj~`�uG��D�Lcө��Ϊ�)�Ϸ�i;Yq�5?[QՖ9�9u�5�/���Q
��

��i����0W�������:�9���ζ�l
L�Ɏ��'�w�ff��;z�Oï��<���
v��
>8��{hbk�T͡�x�y/�<՚�>3OgUӮ�N
k���b��ms�;N��m?:�Q;ڰ����u���	��v��i��j�
$c�5�iz�cj��bG��d�zm
��޳�[r
?�����:��9��M=m ��VP�֩�#;�Ӛ=2Q�M
�Jw�m�9����Pbk��Ã�	Zw��:дX�}���_(�(�9���<{�a��\j��d����L>�n?�?q�8�u���� ʬ�Jd+꫁��{6'��;'��ʙ�tCg��7
?��и�zgsc�Б��#�滚�:*{��O��e��Jʛ7:���q����#����G[�ںF[��'Z��N��M�ζfn;ݺ�2��zz��Cm��G��
����v�pYu{P���w
�$�O,
����;j��;���[!ޟ�4utV
������<1�9��|OW�BvWgk㇇�vo��
�n*��>r.������y��bϡ�S�{e��{7�T�6n�O��<��.�̥�����յ�����[�Φw�g���@M�	��[�E�>�xL���s���IX�vzAswUG"��d��O
�t>����bˁ���Z�~]����ͳU��Fz�3���4d��u�ؖ#^rs*��-��B��̙�,~�bgY�X~Ϡ�5�[uX�M
�3��j8?_�:q���� w~���2�>�d���h�o��`j�o�����o�;� ��}�f�����z�c���7��e=1���W����7����zo�D��X�i�F�����e}g���Ο¼�hG�f0X��[��;�a���� x�~ͩ��l:�8��9�%�59u0��u�Pp���	o�|r"3ߒ�����y.�ko
�z����}`��d��T�e�3���lۡ�t���|yC���:�LJz` [...]
-���AZpǠ�$�=�T"���SI?��Y�x�T2ߐ�$��d��'Y8��lt��A�p	
-���T��n%�N���4�T�P�?„
s��T��L�٠R��J�nr^*���I��J%�!�!��l;=�s�g��O��˥a�)�~���@8� � "a�y
d}�O�`ւ��0;K��L��"@�^�X��H�
-n1��
�4��s�z��tr�z0#��%��L�
<Y)h8CO�6������@W锟P�0S�
=�g*Hz�
�0�����a�g�{�	� 0w2
�?Ŋ��9����Ph
�~��i�"��@���р��
N�\ f;�Je
��s4��ÍfY�

�
-�n2/�:�<X%?����|��A����D�� ^�M�t&�O�s�
x(�بl�a�R��p�	l]��@��`K~�L
0�������yMT�#
-%���K~
����;H�}�lN`~7���|�:.�� p	f
��(�H�%٤���/śAK�L�P2y��4h
�!�(��%�y��~>�w(�<`C�
4�����EE���@V.�&�_�QRO��`�<�g�5)Ѓ3>���N#�"%�pW0�`J�	�gJJ at l`�A9hG�E]��V2@Ó-��^�I ���u !��R0��
�C0��`��G��sea*��m`� � �
�+�� �l�A�a.%Q� `�$�Ԟ�4�
��R�C�Τ雓8�#R�ǽT
�)�	kc_1^�'Q���T>��u����
ԚJ��t	\V @��%0���&�
��,=t/3(�ĝ3��f���T�<4�N!@`V�`P�l��i����*H&]����{H)xT���%ы
�Ѕ������{A��@����#���Y�{
|� 7Y
��y9@
l�!�
-`%%lxw �<�70 *
�X0��8�rG��QM2 S���oDm� �t�A���&a
mW:_���S�Z��hx��o�� �z��,�Ty�%d����t��
�E�
Y0�Y8�O�9��������$��3~��	x�Ty|f -H�l?

]`
�{a���%�-���o�ԃ�	������ ��O�K��s��2�d���� 
-\@���(�����
�5�d���(
��sr�ry��x�	����}r/�ӹLi*��Y���=z�������偗ɟ��
\�
�]2O�׀���L�
b��D���� 
@o&�����L��8�sN8�!�`�� �	���p
-�0
N L�R����� �&���%1���%`$��
�����=�?��ga��O��|
��q����1�_* $�@�	��E������v
�}�
=�4 
��
2>�����ɢ�ʤѺ��ԃ�˝�
Q��3�p�A'���W�%�X�K�g
8���Rzh3>�,w
X4��t�@
��f`^��䃛��3Neg at M zp�@R�{:d��8@ՙ�s>d��e�/˂�I��$��"l?/ y�,pH
h?�y.��%@m�֠s(�
[�Y�
-t� ����SN
�E�@�pk�u�4 �>}�x�r�=�+��\�c@`
�>:�^>zE�7`��^
Y)&"r����
��(�$�� ,�R-��E]���6E^X��E�X�o>���f�� �d�
�YQ�5:#�~/L,�r@�)p��_��r���H9�	\7�$�P�%ы
��'�c�V|�L�b��"O5P C�B*x����R�q
-�h��K�9����o�x
�f�
2ƒ��H�%�.�鐢	�6@�-���<�K��~��
%X��ʃ��@�
�"�!Дc
*r	��TY��@��z��z�)
-J���
7�D��KGX
-�$
�� �v�E��suQ�L�˦����Ε�c
-& �f��&�P �F�ȷ^�+0hkA��wƒ�S�!�" �~�#Eڂ{�%��pP	��d6
���7�JL�� ���%�m)G������ &�f6��
p�(
-ca�P<!F�`0�3��IR5#�4Nj�
́�S	�f���d�D
�H�e0]�>j
-0J�����cW�ćo�p���0K^�T4��0�(�I�_��'1��l
^�a8�k�܆�K�h]�x�^�n8��?�%��@j��d��I��%e���\@��KY�����Ĉ��`�a���8g`f%��\���)�e��5��3"��s��"�h�`��˥�݀���`��􋄂
��
83� Sq ��%���@(�}�ăh�/}¾�
\
.O
-�p
R�R�+P���,�
0��P�9��^�Ŵ���LTY��c��抹�hY.>D}��
y4�
�m������`��WZ۵099|zb

v��S���'&�B���=��
��������fF�fFgNOë���E�=�sm��z`��Ʌ�������ɽ
�3s�
%Ӌ��,
=}z����3�N����"��d�����������s����
6q)
endstream
endobj
325 0 obj
<</Length 65536>>stream
-c�)�+������X)B5�|A|M?�J��_�o��&c�%$�妁hs7L�F
u*���;��e�
�F�)��Tj'v\/uYh.�6��Ư�Ha7���Ѯ�^G���~��lSB�<)�=�G$�%
y�<E�<������4�'k�00dX̩��(Ki�p��pM
@l<��
��{"i`�.�����5�80��}���oOCx
Q�iQ��#�)�Q9I0���Q�y<��	
��̙�Q�
����{<�Zp�� x��DH�����@u��D����w��$���-6A�#?>�%�7k�
���:?�e��Gv����:Xڞ:S����8g	QUqي�3DN)A=����Ȯ��ՙ�ڭ}'Ǚ����S-y�^L��2F��e,]�vzI"W`(z�
�D�c-��A�&Õt\6濹 ���G&����x�bM$�!Ξ��p:V�J5�0

CЊs�m!��jP�����1H��:a���h��##(�|�Y��Ą�=\T�
j����@�w�~u�w��T|n��
�#�`�
�+
��n?�Æ%�Qۂ!9Tg�
%��&ٟ�a��b���b��:�,M�*Ek��NC؜(�*�`���s�!�{��n/Pq��������cn1�jI)�I��E
�U?͆
Z
z�4��7&o�?����K��+�G	̊
/<n;�8D�θX:?�7$˒<�.{�S�7�Ͽ���k��<a�]y&+��
q`�rH
- �h��
��'
-���#�r�� 
PUv��	L��
V`�,����
��8X���N��b�J�n��GC�*��l竔�9�x�N��5z��p�Ȁ<��2>����^O�)i-נI��N"��zD8�Dd�aj�Q���:
-2
IAiP�b+ȚG"���xS��i� ku��~z@�v/x�
��v\�קG�|�h��\�:��a�`�	���Q��
8q�C��H�DޕPyTE��0�a�5�p%Y�1��N��==��o
-�ĬAҽ�y:�"���U�

B-�%+�Q�N`t�>
-��� %q�B�%��?�$r?�G��S at 0���!�X����̓��f� ���[a��r�|���{�~
-�{<��Ѐ$4^�,���ُ�h��E�w��}�����A�玝�7�9��A��Z��l��G�x�\���vy�o����ړ���M�3:��.�ۅ�N6�P�tPK�A�2b`�󞩅��1�
-wEjU[(z���=ڑg{��bL��w�j��fF]H��u��
� R�<<�
��&>���
��6��(��z1/
��<5�(�=�:�Ź!L0T8�Sp�f͢)1�W�vߟ�}�[����9�����
���������]�w�t4
�0�Q����1�]��8�ïߦPj� �9upY�o(95j��|�����OF�6)�}F�]N�U��z|,.ղ_� ��W{�h � �T�>�#
-� p-�l���@72)�h�+UoOP���<�� k>@�tԴ3���Q�SP�m�E�d�m
9��]r�%a�|Q��P>3�4Q���?S�nG
�[��^��t�)�C���H]e��O���3�ߐ
%{�(�NA�Ş<���
H���8sh%_����
?+m:^el�+�����y u�=�N�^��E���
-��t��w�t�����P��VX1��$�IDf��r���������ﹿ �#l����
�����=�E��#!I8��7��1
���󰽭�
�T
UP�6��>�C�G�1_��l��+��C��NKQ�dF��|
-�2����(����#�R���5
���{������n�H6Wy!��F��� �nC��"G�+��!p��� �"=�2|E;��aY]��\�s��D��A�[�n��b�`Up�׊L
Jlh�f�

)��[
	��)�
A�5�J����pؽ`xG/g`@=(��LB3{����I�Q>=���!'�<
�G���r�)d�v��I�^�(�A]TI�.p����
H�?ɪ^��D ��A���u�E�4�& w�� ����(�=�$]�G�����>�&�2z=�% ��@�
-��j��A�0�`�������Ӈ@HR���_ �
�1
h���q���^}9z��z��n�A�
E�����(��~��٫f���D-���L���k��s�L&�
Qy���(<��p
�
#z�a
-�+�Q�e1���wf�k�ݾ(]4(�ߔ����p�e���JOȚ�
-d�g����j&��4�geY�C�t9/#����Q�'�E��S:��
-�����N{I���_���n�C
�Sy�q�M0x����E�n��TG��`��bi�
-�RR_C5�����ˆ<`��kR�Q�V
hX�$d�w��>�ߡOe�9�U�=Y�n
����{�B-h=�PYq�h�߷$cr�+(*���!���L	����}�S�~��Z'fB40S�Y!�^��BM9\'(w�K�գ��t��
�TZ�w�
	݅| \��t��#���J́��i,�ޣ�t�:�^9gz�E5���=�D��[HR�Z�c��M�Nf���Ru���#n��MA�:�o��� ����{L�0
�ZD_:H�ׅl��_;1�
AB���
-s��~@Uj">���!
�����x�q_RD:yI+b�����X:�U��j' g˷=�
��`'y����bVQ��A��
�/�jl쪁"فd�"V`�J@�PL�[��y9`$7���{�h7�j)b��4�)�7����/�<���
�f�F1��$
����4$ep��#���`��RM;}
Wۗ�0���s�R�8��'\=ȫ�
��_e�yH��qP�y��U^\�
|J>�N�3D74YG�K���ƐX�/�{�B&�t(�����F|�)+��o�$3Ġ������� �����x4�^!�{'�� �/�Jv6Ue�gG
P��
(2BI.�Hl%؋@}�s���i�[��e̳Bq ��
"�v�_Px�]�v;\"������z
?:o԰W5���G9'��t��c�V	'��ごx ��
�����W�
�CȊ�'� �t8]�}W���8��O�t�Ι�鱄*�gF�2H��RP����Z�3��PCW���8���p}+m/�
�%E��:�����
ct�V:=�����<�T4��!�����k�[�*�e�"�O�J��y����j\�r���営���M���P�
v�~�s�Pi
|a{�������.���n/���a
�� �A/X6{a�"���
x��O���ڕՂ^%��
Q�8���۔����Q�[��
`��* D?2��=
�Fi�`{:J؞��D0�Z$����� x��'9��������=$
o64��GA�R��
M��d�5TV`>�D;��4���æӘ�0�����nj
	Cq{��./z��c�3
[�w�<$�$Iq��ӎ�Ϗ���Fp�{�o���
�|��	5NGz�~�<9�
B��\f:����-��B�Ӿs<�	�j
_Ge�0l(W}�*{bXz�Cz���5 C���,B�o:��t���(Ą]B$Eq���Z����/a�J1���p��L��0w8�I!h���H��<.�2�2Ƿ�AT�0�t��cPy��Q��#m=�>t/t�������wr-�L�܃�0���O�w�J�K����q]9^��1·�U�W�=�
R�I�I��
���
�^��{hd*��^��yT��մc�3����4<_�����XԿ �e�}�c�C@�5
�k��y��.H�/ud���"��UEF`� �93�q�ٶ�!�I&�
-��ݰ�chĈ�a��c(�J|�]f �`���T=��e�:ItdL� �
���yj�W��b�O
�Q����u"�
���@��"+�J ��h{|��0
:<��U" NB��,W��&lv0�El�*�l/�C�`̰5V��ӓ���@zv���n�]�7a�
-C���S
�I
-��cT+��P�����o�k���ٙ�u5�!1)7�q>�����[��8��3H����2�B=Scάs�a6��)`��{�?r���/��	l'�sK�K$��Ҙ4��wڿ�� rT>B8�i~v�9�-A�	���5g}=�)]�j�S{Rr
�"�&1�~����nJ�թۜ�5�'�b(�(L����.y�
�M�.%�3��x���pv��a����s�J�u!Ή���ĸ�II��]�4�
-�J�ͺr�+���bd~
"޾��;ҭ�b;��.�
-�����:��F
h�yY
����(�눫ԩ,J��g7�
8�@�����H
��͇��Ge9(
�	e� K�f/W7�
�|�

�f^IL��G�MA�훴��
������Q�ƚ����#u:"��0	%�Xq?��5(e1��!�^��.(q��
�\Ъ�K�
-�S��"e7#F�Ά
-�-���-n�+�(����
-��+��C�a�	�4���8�?�P��ˁi5��A��=ؗ6H �8B��"x�PU�w�+�}�M��c��L�nU�5�a�
- ����BT��ϟX�n��W�Wԑ�
��U������u��jx�wa��]v��֞����(LT�
������܍�*���zt��2��)�+]����k"M��lT(T�S�+KG������t0y���3��2����h�7/C���n �f*iV0��4|�|�O�C�аx(�qd!�&��q��'S�����d�m��,��	/̇^��+���6J�
�N@�
�E`��ʤ�C8�,�c9e��sL�v��B
R<KR/���'�+G+zG�
�V
�t������F�F�!|�$
-�>9L�8°�"L-�C~�
���kC=<����6�CG��}m��0(%-�v�Q��9lO���
a��G8�u
.}�h�r�	�ZQ#0���|ʧln���
4RC
��MGu�-(H$���@�>�^&������0dX���X�Q�oW����w�ָBy�_@�~�s�>+���4�樯�8\��]���;�J�z���*\�E՜#@
�:E���6�[w#P�c�!V��� `�����
rO��勨���>�����
�V�L?�m��w
�o�Y��D� ��W�(#�ia�G���Khi�B*+�3����lQ�^J�o���

Z0;�����%���0P(�
�׫�֎���R���!�N�4��ʔ%fn�K��ZERkUm]�����;LEL�B�����QV~�H�	�F/��
^���"��h�<����
-����V尽���p�Q�E
j?�ۈ�
J��h�����?ԛ t���|��$P@졮�2aH5wߌ��tn�.��(���sV�R `��!�
;���
0,+����N�LJ����=���v��
����H&�MB��`	���#U���w�������������W���������o��?������������o������������?�O�������������?�������������u������=����+~�7<�=͇�i��@4= �>�FAA{��(��FLDU���8��6
6�� �8"���D�X��B!��Ď��NvU�N:b��mg/��@A�.ӉY�
�� 	��	�1����C��ۇ{��
;tյ��-z$�eq
R��-���s���p��&?v��D�#��/z
!~��$��$®��wD��<�q�ނ�_a呆C=����

~�l+�'5���P�
-��W�}+��,N��\w!
	'���ݚ��4*A{��3i�+Wp��"Ȓ�-�
�Ð;��c�(Ǡ|�j"����( �pI+1�4���=åo��)]�96����蓟I��D��}tBu7:aLH'~�%��*�|�8:b'�ک����{�����QQ!����� �v�@�A;�ޔW�;3v� t<v�2
-�(��a�4Z��ʲh��P��߆[���
#P.Ӕ;�
-a�	c�z?�ټ
�������:�
-]P�������
�~
�`�s��N�X�C��{���{��'k�|��N�L���O�#1�o�zb
�?zmq'yx�Ӑ����X�,n=
-�q�zj��쏣W [2`�_��}�W�E�<,�+���Tp�P�3ӐF{�Su^�G�G���`Y�G!�G�H'G,�y$�G����
i��Vƙ���
��R#-�wLǢ/������
h5�@���Xn�$�Ι��N;(�#Ɯ���(�*�k��@�ʇ.�Y���CjD���
��p��c��[�v
��~$a�F�^kV�;�}���0~�"+[�u�`��
��j�CuQ"
;�k at y0�C
��}Kj�Y�6s2�݌�����@�
S�bV�_�
�]
�S4�^��E
&��3�
-�N\�A�d�_y�h���ƕ��'�P�v�ait�Sno-̨�*6�u���Z�(��!�a�aP��6Ԓb)�ם�7<�,ꁗ[؈5]�q^%�_�p0�Q�|������1�;N�#������1��+)�L�"V9|2ۘ�i��@��G|�M/
𪌉��~3���npN�_�W��2� �LuId8�

B�R����}�w�#���@q:��H�Sh�Q�������g8
-.���[;唂� �Y��`N28B

���tDۧ��
�^
����64�ž� Ρ��xk
{e���^E\&��I�ك"��1=ѣs
���
�]�Q�C>�9
{!���4	޷Z���_Pi�U��'V��{�#�q�@:(��a����/x�}ќLj��={T2i*�r���B��9��
�z���̻_�
��'{j�@��(����y���C�D��L���]�!��
_M����:>O�
���
���UAE�L�\=
ud�W\B�Vz�J�s G{
�
�BFC6Gh�M��s5<�����]f
SC�%���T!��R��U�A	5�"�t��X�]%jT~�A���;
*��`
�,�|�P�7e7v^|��!��i؋����p����ѝX�=w7+�l<�����/}}�D��x�m�
BpM�p��緘�P�:J
�����g�d�����!9�L�x?��{
�ńT
a�

����\Un��50.JȮ
�*��"�Z�{>
\rt�-�~��ҫE9��=#�y&�Sq�=X�������x�Q�)`pu6.{#��Lg��� ?��XpwG�ϓi�����7U��B~����[Î�S9Ւ�Fѕ�LRe���v�iD�.ք"7�h~5�Յ��R�����b�ilP�����ɝM
��MM|\�

-P�������g'���kɫ!.��<�t�i>0���K�zȦz,~42��<���E��	���Y�`�65b����
-߱,ʵ2W���r���� �еFwA����
:1ʾ4��	�.��b
+j
-l�����FF�6�kY��UY����-�fp8��'�8�[������(����i*���C�
/e�;�bG�_���AD��	H�y ����Aq�~�z2��U�p�a
M�̞*a�gU٣b���O��<{�
Y
%� �	o0�V��›�20�n^
"�9r�Lڅ��D";iQQl��<R
->��M�꘡�x���<��|��
kA�+
{z�`k$A	k�wTzُtE_DW��`� Pӆ�`8���Ҝ��
$a
-!�I��
�b��"����XL�]�n�
�l�VYe`b�~L��qT���>E��ǡN�Ts!�@ei&|�`�b��ग�)�LcX	� ?EgeJ�+
o��2L��2nj�.�	>!AW>�\=h�8�y�}K!���Z�E��`�.��J��'D��Z+�&���ٸ@�|�(B�)X
]{n�G ���7WPo7G)
-�����+��l͓z�{��?x0�ߞBތF��;O�ܹ�#�l`�A�1�XJ�<Z�0
C��=ҧZ�z�
=��:�DU�|v���<7
z۬��J� ��
9�`Y/�ߗ6@� '�,�h�AJ�8`M6�
*Gq�0�/=<���UM��7�A]ɬ
o�aR�;�e+Yk �
(��4]D�a;5L	Њ)��E#�r�
v
�'Y
�k�d�k��&f-�3��
Q��gU�����8��}�
J���8xk�ж;~ը�&Wh�ha�Wn
�k?�{;�[`P�&�
��Ќ� $��-��P9�Vp%�񭡧0‹�}m\�t�$��0�� ,�d��I��j��yc�7��zH�b�$w�S�e{�~�땮�{[l5���ȫʶ'�̔�m�}�[��í�SQ�VDy
�M��e��u=�K�o� O�P0�)H#�J�M�1+S�y�I
?	�%�E�i�nc���
��B?�T�C_������.0f���­Z� GV�<�{�y���x�
U�[�ͻ��zb�bP��K� Ez�7vq$���������"4}k8�nٗFр�T�������P@�[29��
8���p�ll��iہ��[x� B�Y�0�+���D���
~mT%�!`����~�SF1��[yn�B7nC��T����}�����<��p�\p����q��:*�U���ն��:�W\A�%���
U�u}�)�oA�z�RO���w���y&"�,7��

����*��;�O�X�֍�(��q���)5��#�b �{N���G�Y�܆X��
�;��>��A�
��ˤ�Qo
�_���m��M$i�r2��
n
l��m�����LI>�����e�!Eئ�'��nj�W�2؟����^���
�=��,��@����hc��U���
-�㗷�	�>�L�l�W`T�r�R�r�_56mB"��+���'�Dk�;JC���5,FG�e��^Ґ
S=�O|����ދ�3%Q�/��
|p�!�;,&i�S�Rx�>�I?T
-�\�^@`���(*��"l{}	�?�H�3����R{k�մ��9����P��K�G�o��9�&�Y����F=۩���PA?� ~�H:
-�q�
-�Y&�Jl��o ���7��؝
�Pl���A��������*�~��nkL9���մ7�a��_�ET=R���B���.ĵ�[�S�m�i#�n��Iu>�mh��	��疢1@��H�-2��\��7{7��ʒ!l�Z	�
�);�_
�����(a� j�z��F�q�h]��Z���t�A��c
-�8��ǚ����
���hS�E���1����́�����X
r��؅�y���
-�8�+�w�4�bjs
�y�ќwh��{7��hTD�cAŽg\Pn��$	
- �,kBO��J2-��pk�z �+�*
�$�8�|R-����;ϰ�Y�7�����K��|C��
����|i��r�#u�5_ ]�!R�F7�z�T1
28�
-�t$�3���dPƌ
-�t�:�g���:�?Hm��rYfd�e��t
No��Zk&]X�?(����Q�i����!���uz�~5��=f4e��'0袋�=Ex�C��y���+<3����G�8�5LHs
���7XY�:��ƣ>�/����g�ռC-ܡ�٥?>��X7$Ϯ��lX��QQ;�;
lĜ��D
�9Nc��U�n0�o��Z=�����,�F�6�8��<:�5ג�^�*�V0�kg��q& ؜	a�k�_��
����[�)x���I�����N	���#h�
 N�Ժ�gC�T���
-K�F����.�v��PF��D|�B����
�ʹ���@�ɷ��09�>X-S�<Ka���&�ݿ��2h��
B3�Q:���.�\!�)AjB��_z�cJ1<{�P	��8먗�8�֖��͡\<�����z��J�7�r��@	[և�`@�h��L
-�H�x�#�������5�
���z��2�J(�IhA
��o�3� ��$��^%"i;�u���׉\ˋ>;3.�<9 �<{,7�K�
=pw�Äј
H6U��P�a�� ��ac�8H�X�!�F��PĢOHF
�����.=
_
� ��'�o�zRE�{�b���>����c}�f_:�l��WݑqM�\�	e�*�q>���'��*�ݯ=~9%���0���/����I�tɝ�f���jz~P�^f+eI�=�K�wZ�&7^"+��{C�_�#~u��o�����H���k!	�–��>�ԔPD�wz�QЏp���KI-z��)�gz����Z[��
�̱Ǥ�d?z�*2u��L�^�K��PA�����ǁ�EL�2���
n��, T�tXś�
ey�!��2$PU|F�H�S�0ͷc��
�ڝ��ݽ�Mb�!BkO/����Vʉt�o�0UX^�N��v��M� �����/'�QB�i�o�3L
[���/��{P(}�.j�M�r�kH��S��n��V�����
�(�a
-.s��
���-���Z����~�W��z�&�֑$_L
� F������v_�1z5x
���P;ܸ�Q%��,��
���
�1ϙ
7DA.{JvL�����f�g��=��<W
��[C܈=�H;RH�Д@�3K���r�+xν�3-�o
���!�
-p8
�N�N��P`v����k�|�ʓ[?�^o���M�-q]s��<��u
�ԧF nZѴd�#��J}�[���S1PR���Qz0|�
��;�	j��Ԓ����+p�.w7K
�=�nEN��%��fO|Z��
�YSc�a����
"ny���鋾�jz�-e2��[*�/G�Ν
��[�Chg6
՞�G���
��;W~=�D��3��{j J����
8��Z�e������i�_���aULhh��4$��M�evW�#�PU.!?�]��aoӯO��*��M(*=Q�
����g� ��Ry�H�QE���y����G�b�
-��
��T[�������8��gl})p^
�r ��p�;�Zr`m�� ie�ڰ��{�Q��
���
��1�
.٘	�
��r� V�8y����'��G�`F��_�p�
Q�N��aȉ�
��[�,Ǻ\��8�x�n^�a
P,������s=�Z��וAp~��Mv��'3�t g+4
הY���Y����|�)�8E�1/=�ѩ
ͺ��Tź
 �!��^���;,0����P�7%�|H/�����$�}�P̯=��͑%��
�>�o���������G�eV�i�AD�Lҙ"�)#�
QR&/I2W���TD����2��
 :����I�t
[
-��9A��fB��k�fl�YwR�')U��DOq
����0��� �2%	4s�tJ1���8�U�~
u���T��Q��5ٳm����= �~�8R�32
�]�7���ߪ{�j
�AW:ڍ�=Xs��"h_gho(���
+��K��k�a/�p?�*?����s��8h���Vݔ*
�b^��Ļ\@���w����#í
�]b=�J��?6��:�R?��#׆�E�J%��7d4<M�h;	^�*w@
���1�
E�|�P���)�հ8"�8rw
x#P�hZ
-ñ��iq���t�[w�xTuB�w�U?K��HM9C
�>�����e�YY��� �;B�
dHIN�}�=^��-l\���<���@�-.�z at 3�B@�P��f�?�Z�r����
`?o*K5o*:��0
���4_�*�[��\��W���.wF��u�:��!�S��GP�w�i)� 
-H��O\1��=2q6��i�H1
����"�K,(X�pi�D�82�'<sr�S_� ��r~�:ƃ"���ʶ�
1<ɥ.%�
-a���&f7K|�_W?�(
ae�^$
j|ú�>n�ᘽ�i
��
]3�n�'��Kv�
S�H&���P�iGNj�_;hRT3H�e3�������,�yZ��/)�
b�x�G ��B�0@��
��A�J�q�<���>� QC���̾Hl�>
-b3�gYG^

�
>
�nIYW���5���i����IZ>�QS�e�gZ�����)g,�����Q�v��
h݋O�I��Q�g��/q�+������aE�N����Z���
,P	$�=�ۆt�e��X� ���&�w�ӭs�
�	�*3-�
-$=::*Hx*rZI��8�ڠ�^�g��T�����&�F���8�]z4黀�u"]����>�c0jIh �$[9^�b���ߪ�[3��IA�
-�����<�8�_p
k��ϜQ�Q�Ǟ\�
-�J�@w�"I~���Nt��EH
�G�`���=�:����c@��Vp^¯ה��g�Gp{��)I2���{�V�3��8Y���J��;�(:�wp�)�­�)}=�	�tRHp�tgbR+@���\�y0��;J��b���&�����?�
)]�rfgJB0��q>੬��
N�_AF�/����Z3��f%1��^f��#�h�(jf!:
��+G?�B]�1PX��F��߹Gz�+@� {
-mr*R��\̈��`i�h��R_���`�
Μ
O��Fh��Բ�܍�;��s?T�9�ٰ�6�u��iq�`�0�#����n��5t��TΪaG�4�+Y�t�3�@�diL��1M�6�VVRe�m�+���(�;�I-��9��k��!ǁ��)x��b��aڍ�~��C�C'Xp?�@�V
�x�̶� V����
�؞H��td��O�7
AA��
 y��3�K�}y�}���D��jQ�OLF)p�/4�+�5�3�XgC���b�50�d�Gr
��|Xa>gв�V
X�Ɗ$~�d>(D��
�F蔉׎�R�j�V������J�H�mס��oq/O{T���
��l���F��U	��OV
S�?Y�h��"���y>��l����1Ւ
���
Fޗ������� _�1[��*�\�\c�kD{{
��������8����K}x�2u�L
X��{�N���BܖLM1�5�����Q�f���d�qй4 �d�(v�=�s�P�g�^^�H [...]
AG����&�����GR������t����������Zl��7'S�.�!N�;٪R<,���w%+�`�kؽ�WA/RZ`�A�ʂ��{�/{��dR��
N��+ݢ8�.�u"v8tb�M�j���כ�zz�tl�h�u� Gi��Ѡ	��
:̻����9���:y�yk��;��3@?C$�B}�W��W��^k��%[�NT��,�v4
��,
$JQ&*��$�~�7x)�;;
-L���;�[�=,0���>��,�J�������TdH�pz���
-�UĢ��Σ��V��
-N�$����:�U+��㽃�t
�πT[�;�
�����~'o�
 Ɗ�E�
�^)T>���rk�V
�N��ݣ�
��f��z�
�w~�G�I����_���ua
-;�L��E�eD5�%h/a�J�A�����Š�c�>i["�b at x�ֹ���IyR���_Ebu���/+
%	MGs�����<$��%�RL5�j����CUmP
Z9�I{j�q�UM��H%��Pi �D��}�� {x)ɂ�(�M=g�WyH��~8�̗��×�z�*牠=F���=B�	FT?�td��X�et�
d�0�)�:%ңA
-�!M�ե�$�j���F����1�s�0*�S�Qru�W�����?��"G2$G�`�Tme8����G"�}(k�~g�ݗ���?U'b7��;�����7�
QmkX�r��`.=�x��2��S�`�W0a�ͥDd4�oY/�f�.yeB�*�,7�I6Ζk�����/��#JP.���W
CP2�����)�V�>D�%�m[Y��	u`J�@�3T
y��\ϐ�Y�P�b�c�)����[%đ�/{��Fz��ė�S�=�<�%7&�E�Q���hQ��$_�H6��҉9��=6��=� l�
D�
æ\u R҆M���w��g#x�D�L%[9Cmo
�,�0!��d�~�h��OAl�l��f1�@H�R�(��[p�h`eP�TD�}J,҈|;�M��y���c
�y����i�9�a�Ԣr����!W��d�ꎔ
-s%X9�6��+����7�
��q4�}��h��K

-����zC�
jm��%a�]nT��>� �b���Q�;r{	���X
�y`u�m�
W,�F��
���FRX4��h9������Dlx!�1���:4D6+�N��n)��H%�nL>�D�%��d�P���.*0Ch�O��wD�!�ը��ON
`� [�M�H~�>��z�E�
?@�u at k`1��[�P<	86-�Y7$]z
�;���^0ѡ�1�D	�.�
I=o��
���U
-��
s��{�+��)�.��$G�=a�*3���y����T�d+	`{
�}�W,�1d��P���E�i�BJ[�h�U`��;g6kG��~�ɘ£��k����4@Y�]J���p;ڋN�ϩ
��<��
-���
��3`��qLdBB�	�eR[O�"E�C ��"V�F~�c�<��A���D�"�N��B��M�X��8}�1�y4�B"��b|�_�g���T
W��+I��<.��wp���h�oR��v��S�D�
���O�=�A�4U1ɉ��!�̥��~�S0\�k~��S�6�|_����@�c�����l�}�M�"'�����]�
-�G;R�$�2LT�'U1�E�t��ʇ�
&K�I�u�%�
�fs
A���g#-#��1��K2����
u�e�/�E�N]�4��x���@ȵ���L�9҇�o����]�����
&�C�p��L�lkA��Q��Ic�+��
y��8�"��%~7��@?c��D���:9�r�Y4��DX�!�A��� 7�
.-�/3�C4��G��f7��
�L7>_�7�dϐ�.7��&�Z
�[-M83�'�;Y���
sb
��
`�+I�"{F�˲�,95Y!
S� �*
J�SÒ�`
-r*��^�+�bM���ğH�Z�TGj����x�~$tH�\<��0 n�P��>��C�m7� Q��ҧ!�
v�K^/4Z�ڍH|�H��������c���WJu�^Ҝ��
�
�u�J aSU�y�Z4GvQ�
�S��ZΣ;�X5�lÍz���S��
S
-il���/^On��SH��	M%��#"I��A��\
)P�'��Gj�鱐N�7yh��)R�
xİOP���o����g��曃#K�Y�!��{�:+��A]
�9�����Ƅ;���	$Qr�؟��K�
�?9*�k$f(�]-N�YDRGf��
-"�I������(��%݀��h��[� �������
hV$F���K
F*��NY�@��-YCw,
-:N*a9r"Ao��MJ�Le���F|	8������*��t�0
1?�����
��
-�<ω
��
-
��F��*��9�8
����B��C�7	�uz�֔�}��řW�z--��PT�̃��HZ���ѡ�>m��5�Ljk��׉(
����� s౳{�@��O#<�U���S�
�R��XϓN�A�<Bp�MN�
���<)
Qm���
-���s ��_ at 7��3x6vݨZ�� ��A�����
X���
����<��{<N
�K�a�6�D?�^�˄a2V��5�؍	_����
��<!�E���֭v@'�m�
<��z�o�q�¯i���Կ S��R/p�H�JҊ���l��*٬,w1(�		��c�3aQ�g�\U]�����Z�A�X�4���\�ޤp��MD�YR���
-��=.J��R�8�\�CP�c
�X��DcbS!1�{W
qƁvt˿7�pUe~"rG��r�7 at -X,[+���p{Ls�.B2䑚��n�J	e�ꦩ`��,i��86�1
�w���'����[��x+���3v�FRV~��R��}��ǚ��1�.O{�xi�������6F�G�lP�V>�6<p�g��j�\C����E��?e�U��R�t4�� s0��Z��|`��&Ξ���@,K�Q�e<��f$����A�
/zM=��݋2����c� ��!c!���$0�"�RRPt at -��
�/������}�h�R�=�ڤx���K�Ɋ�2���je�t�J�u�d�u��]NЦw����
-5
-G� �}L*=$�(ʡ6��'m(f��b���J.)�zU��B'�z�� (�L���z����u�)����9�>D
~$h��1(��`�F�ý��(C!�
tF
	p�|�d����eHz���tUS���;Ϥ�S����M"
N�����NZV�@Ps��匌',��t}?����K�'�y*�<���B�M��
�
�6e�V���$ߤ,ޅ�Ɛ��<CI�'�73�*�n%v0U����v8����-�N��D�|�	Xנp
�d

5�i�C���kɡ����W��^�=�b
-O��x2�ŹdB�#|+Sj��!-]
��դ�b	�K��DcFp^S�Ǚ��\��[�����gqgP�);]�3�bH����Pn����*\���NF����d+A
-j� �2���"=�I� ��Ȅ?����Gd��wc�+�'�&�p���Z��OP�
-lч�� I=^�x��Qm$R�� �cDw�W��;��f���`�|
-K2�<Z� H	��`	"\��WQ�P]�7�n�邂R����}�ײ��/2
)'��i(J�
h�n�����b��3���:Z�����щ�zw*n$b�>VY��CЧ�(��p.�@ +�|g02�M6���"pԐ�IZ� F���^hw�@ft�`�/�:ۻO4����uHa�U�JF�8��]��jXpb��Ԑa���ΕNW����;D�X��T��1K�؀j�lu��X2 R,�H�+��@�[B�sQL=P�����8JL���j󐉒�㸝���d0fU�j쭞
�9�D�O��B�K��$ }O�"�P<�(��p&j���燌��"�A_��^W�2E���`9���*̵��

���Zt��]��Y�QUe�]���≷F�;�`��������=X9A��{��th�"
8EF�,U�R
�e���.dzEEqO�*��y	(��HڳF�O���"L]���ɟ�
- ��RC���z̓������ �7�ߚ���
]�n������LB����9�(����Q-S�c
<�M��_A��] g�=
�X��3����MT�$A�
l{Y
�
����f+x��YFy ��T)*
��+
i����r����P�t+�ɗ<.�5�k� ��DI�0���þë]Xk
-�^pvC 1�!T��H]1r�-�Qb�T[�X��3��̱Ė��4�D(q=[�qܢ�����jl|��a*�{`��PvJ=�orP��c�FD{�	���34����;��'Wϙ��i=�!M�Ù����0�K���I���41��f9��E�@|�s�@�E�H\���{��0�$�^m�
�ٴ@�
I|�6N�v��
8�qw��ӕ��y�
�8iJء6P�����v؏��@|�.ڤ 
7��
A�ď�z��q�	z2@p�b����b�'ͥQ�1�"U� I�dn��Q�c�^��_��|E��J�5�зC�SF�>���vt���خ�� j����+
�|��
-���@ᑙbi�GG�'`�-E=����������I�g�H�U���K\��
���O���:�1��cֱ����<������JKt6�%�����8�W
- P#�{*#��3�6� .�{
�̈�6%d.6;��Y�
-���Y��Īv/�{�x� ,X՘����I|��s6q�_
-��C�A��tf��B��
�]�y��6:L�A��������Gw��p��f����U��≴�@*���T��Y1�k�ɴM������#|����piZch �X���#���1�ƾQ��-��t������<П1
��1��Q
%
�aq�/�k�G�xq/ֽ��1�����
g���k�å�ϗ�r�{�my�V>`��uѕ��R�!�Ol�_Vː0�x����!
-��H���FE`��
4 
̔C�-�
:�ߘ��o�Jv���5��L'�XMq��0��	�(��8� �݀��
�M~��3�ࢫ8�
BZ��
1)�����P�`3|�����
-3�g�Q�e�U���:Œ�{a�E�B̞��(�y���3+e1�����*��IJ��<�gY^E���iU3�DŽ�m
cI��c
��\-�gC�����N��~��F�S
�

!���V�W-}N��^����0|�?���xVm�	�*��Ԩs�-ym�)��L�u\}r�x$
u̾_27E"����)�Ox�|�|���r�
-O=.(�
�"���+1J
Z�%5>��JZ1R�1�u��^i�j
�)܌������'�� �
�+�PL����
�10&�H��,-��"t��a�
mF#i���i���=6��������L�ʹJ�&�|�hW��K����z,���h)�6�(R����V�<�`9���\4���LtOkN*�]?�ǒ�.(k�h8pM�룆�٢}x�~AP58o
�_;�.;
6�R�r�H�0,��Ka+�>�PYZ	Æ
�Q84�
l؞ʆT}��T�~�J�T��融��9����03i ��N�qm%޼���"m�P Oa|�L9	>IJt���|j�v��T� :2�y�,2�$
�OAn�� ��CoA��yb�
����!�����0����S�xID$��b�"������:�L�,�?�
�nz���8�w��,�Se��[���3��wZ(��B��B�FY�"��k��S��S)��$�C��rr�tjգfT��
����"B�*	�3�Rt��$�@p�
-ھ(qxq8+�{�`��'����j�
��I��\�@2�H��U`���T,n�<�,8\�B��H����,w��]4��e��ܔOTǜǞ����e�cvoG�ɕ�IN�Gѹb��9T'U�{�F?�
:�|�N�>H�8^�Li����-.��<
��:�*���^γ{�^�pi�<�d&�����Z
[��z�?�k籮ٳ�a�:�3i7w
�l&�j�������8��ښ�h�͢����5�|��C���&$1��x#A��'J�z��|�<�z0(3�'S-�y
-
��!P�.�EzL��%�Y��
-,B��a��� �i7��Qܱ�Ǣ�R�W���'���1���d/���#����ɲC�E��؁H(%���P��(�e�E�����n9卜Do�
��Xt�z�����n7/�V��3\��|����g�+���5�"���ߔ�?f��
-�b�K
-�+FN
-Ax��ɔ�����}�)�j�����8Y�8D\��{]�9x��BM��A�u� Z���`��bzLd���:�}����b �d�F�;�t
���n~H7x2Y��
-�>;��k52�cu O[xE7�
��'US��#
-��*�X���i�fO�/��^���+���!*�H
_���e
-2�fw);��
���\ﴃ���|;��S�I��k�.h�D��k���
&�K!~��Y�M*�.�'�ͧ�",)xZ�d�u��()�W#V`��h�v,�pކ�"K*�q�\H�{����W�ߺ��AɁ~$��F��C�h]<9C�*@�<����!��Q�ɐ�>X�1��솒W9d��=A:
��Z�
g�yRDڹ!Cy��_?5�}��1	U.�� �|ף��,u�����k/�������w�t`������8�%��
����1���V+E���o���T�P����|m ��(*����K{>R�Xi@��w�({�|@�U�< �/q�_��g�uu��`
k
�K����N -��*�zm�\~
�CL[�'�ėw�g(:τ�R��]����"h���YT�s�)M`
��ȿ��O�û��1���EaD���L=�\4s�#�L�uA��{z�{�ɧ��8K�0�ݻ�}����?��@�`!����{E�_�xXHS9������*���*5x�Z��s�5V.܁���7��f4��]� w�͛�'�g��B
-5��!<�.�I"v:�
��S6�HQl�ȅ0ǟ�~���{��
%c�J�6�;H����
Xs�
�
{� w���
����l�u�*�@
�Q�T�4蜨��#���;��
�d޷c�l/V;zi���>ʾ�B�n�˙Tf.G��
��1�ki=N�~9�Go\6��K�N\���P�^${&�݆V�ߨ̋"�`X�
�����D����
]�udN�k�=B:b����
G S �V ˆ��6�5�Ȳ��Fv�
\�B��5bE�j����̪K��1§�riRF��-8�
D+@��`�X�RQ�
��̲%1(F���L0�U��8k�A	��
{��Sk,^�����5�M@~i��!��������N�t/h]��
����%���*�$�G����x�
ܤ�tW8v�2 �5�Ը���ևhf�5�
d����(��C�G }��A
�����
H�Ћx�� �/G`~^Ӟ
�
X�`BL�"�p$�J�tW W��*�1LL2+�h�Ͻį6�/�I�F1����OS)��8=���\�����Q�d!���H�B,���,��ۇ:�O2~��ݽK�	N����ߕ�6�i�����$L�a�2-d*`���R~�vh$�
)�50{��:w<�~ĥ�lc&�>x�
-MQH<U��
w�LE������>'j������
7v-��N�'�h���e2�n{Y�
��
�'�
-!�\��<$*M����42
���-�j���!�.Ip�ȡ$���{���9�o����!\�bVZ�1xG�g�39���&-Yj�c<���MV_3A|A䰈���.�P��@]�=�3l6*�8�T��:�F<]� 	(�dI��*�m��G��k�Oq���
�(O��l�	�Z`����Td&�$3XՏ�]������3�h�'������Ea+ ����B_{X��6��3��z�2�ф�5<�4oT�����
l6�R�?�1l ٜ����i�ސ�~�o���l�Ir,
-� �-��`� ����%r
H�����:#Z�@,&Y�3K1DlS����MG�"{�%w��#�]
��jC���ǹR]��J�'�j)����y���
��zם%�.�8d=
פ
-"$�	�4�0Ϊ�ü��c;��h`���jҲ{
qf�V���g��IQ6��l^��=^��Jqs�6�Da�� ��u�8��C�h�����������ɽ��x~�У�
}�b�"@, 
���
q#�i(o�
�����w=Z��:i��u��
0#� x"�����1��`�5�M�
ev����Kn�ǴN�~(hD"�Z�������6@�{�����
-IGg�/�z� D7WxW�sȻ
ɓs�M�//q&���2A��gR�3Y��"�
��K�\����v���ߘ�:�W]=sD�d\��G�մ2�
|��
��ǜJ����ӯ{)�C"
��b�
�8�x�S�GX��^����}l��iZcl��
����ʾJ��(��;$E�f��*�b���
���:��
o��Y:+D7��n���VsY<�W�0�$����[�R�}����K���c�j�)X�
�.�o��b��8��(�����_����- 
T���(4��Þp�l���%H
�ɉo#��\�����&�nAbe�B,�0R�=�ȓ$��q�[�F"�2��(��n�� 30`2���z���9u�}]�&L��b��1��'�HX6<�0�������*Z����T����Ә�0��p'{N�=��vz�ӣ�
�q��Lǻx��n�!&y�{戴Z
-~�1A�Dy]v��B�D���
qg�� RH
��R�Ef��X�28��iޑ�4>���
��c8-���j���H
|
-W��g6�Zn:�����u���U���P�0�H�J���ؼ��g����AhvMd<^q��@�
�<֜RG��k�0��?>s^N(����WrPI6F�w=���@�p\k�;*�r�Һ��/{��Ui��U�
��Ĕ�
pu��J
}�-#��]9���$��_Y�f��;e�����K{B�V�.�3����[L�$��
��B�^;P}L,?'�T��`LZS�3
!)�p�S��
�A=
-�:s�+7RAz�*خ4u�Bͱ��铉
a�v���Q��#�6i
N�Ƃ�~·f�`��
� H�͗v�5�V.g�BDH�6#ҹ<��GvdLdvC���
-ofE�>����A��WSCh������]�_w���S+w\�\a�
���cC�z|�I&.��H��~���~)p�Ȇ��N�pS��r2�
�m��q�D��4b���`�
��o�!����<yO�Pֱ�!0��Ϗ�	��o���F:Ӟ�3J#br��7xg�b(
���
X�d�<d��� �!�X��uH��f0�h���/W��k#�Y�#�q%���K"g	�<��kQ����x����<��^������T}=�)�\i
-�3HL�
9@;~x8��O���I�N�t�"�N�!�P��'���-q��㣍U�����7��b�#�v����2q����Xx_v<��~Z��5*�%M2���)T��b!��kCܛ�����1���
-G[��ܞQ K����N�:%�Y\Vd��I���-�0��|�]5;
�h
-��6
-�!�~�U�g�}ɑ*�1�顐H~^��^�:H?�
C4�YD���l�}�XU�N��&�����'�G/L��\]So-B���G at O�8����)
����A�B��L��k
�@/3�%�!E�I3@�����c��
-����y;�c�=s t9
-H3�R��襾ƥU�U0�k[%� ����[�`W��k��t�!���BQ�?�
�	�b�
�4�AU��iOrF�.�)+��P����+ܭ
���5V��Y��-�#���Q���nU�
K�W�{��>(�_�C�0f`��O�9*��6
���q{�wo=ϒr�s�ESյSʈ���������C����z���v?@ކ��=C+�A�4;�������-��RA}c�Y�U=��<E�
0E��79����e��QL��S�`?*K���9��
Π�Uj��D�z0lΈx��P�� � 4
���� �A����3~K
�GPc�#PM�G�
���c'6 �/�]�s�h$�������޶�u|}
�s{3'�Ju�P��#)$<b�
ވ�R�A����$�6��K"����O�/I�d?��	����&�����\�ģ�N=A����$�{6̋���P���[�(:��̗@'����v�Gq�Om5$��n_�
"@z�lپ��L
���=.v�*A-@�m���ڕ%�iÔ49܎�1h
v6���,�g�����;͔�\�8&��4BrH}S
�
�m���̽}��˻�S�
-!�z��_S�nO�(�9
+�w�
��N)S�Ƿ�ᙰ��w�/�g�Z���x`
5Y���.�0�Exc#i��;�z�z
3�<db�
N^��{���u�
ۧ�
�V��:����C�
�Fgm�{�^`��+R

��=�%33"Ж�:�U&�R�Ou�ߩ�~nl���>9�1ʱ���M1�Du���W�l
���q)d@ϐ�p8�*mS��ڌ%f7[V��=�yZ��b뢼�rbhH����A͞����W$_���7!{)g�����4�AW��
-N��O,=��GDB�7�.� 객����	��K�Dl���VŇjӔLyu
-O#�?s8ΐ�4�+b���
��j:Z�u�!��+�):;`DQ�u`Ž���{�E�“������s��aQj�i,z��}�-�6��*u�_y��-c����a����7������d�ۿ��?����������������?��������������������?��?������qү������?��/��O�����u��p���{��cx�W��/�s��}"����O�Y���~���6����n�l��
%�<�ZߟP��U	��
��NKh���̣�\�2!�{=�dz~dLE/
�e���ОhP>�*
-�-��N2���A�t�AA�|�����P�mpKvC%��u�ѕޣa
�����
*6��A�A1Y6X��>
>P�-
w
'�<�|��n����
"V���M<���v$��;^�
-.
/b
>�MY2���R�:,ؗ��<�E�z����V�a�͵�x�ss���1C/{
kj���煑��7�`ah�:�o������hAy|������A�۶�f���}�D#��#�'/�k���3f���#T���
-rn�}��7�v
"n=�G�<f�,%������`��No�\�����! ?t�J޾�����?G=�ue >�,���^|Y�*GR`zl��P-���UFVyfJ�G�0��
�bu~�
$G��`g��L!4�r�1���I#1V��6)6`��kN/��24����;�i��7:m��(7t���;�lC#
w���q�$@I2�?7�
-J��1	�
c�%e���)0;Y�}LDG�uh���H�	x��|�|�
��a[gF�
-���/+f=|i��M�H�!8�>����KE��Y�9¬�X�z���`�adr�\!>/��2u2ҧ���n ��3���J�|!�Sf_��Ȭ4��P �d�S����Ʈ
-���9GkR�h�,��P����(�֟���3�ǬQ;
#�k���܍?��
�
3h9�|tu���w84=�YV���c
�&�6��Ɏc��:(��r�D'�*g53|�L:��Q�&�T��/��#q�7890�ej�>�
���8��LK>�|B����,�
�
g�Ɂ
�}�F3l�

J{��~�]x9'��MDSu��}�P�s��h� �8�E����
.�����
��0\���ʴ��/�
�S�u@%u��
��`!���Z��	
8j�x�u�v�;4ivK�{�!Am�fE<���A�
$��$NI%��	
7�:>Nz�NQo�hRk�^Ny�H��{��t�8m

�~˞�zPw{#}���ޑ�T-�� ��na�4�
���@b:n���x_6�x�=~
�pţg�%H�&az�z�˛� ��pn�{�Q
=P��pPBi�,M4�lՇ��MAlb]C<ȿR��R�]|��o��:���b�{��U�cM�ik�N���������2B�OQ��
,���
�nU�Ȓ�A��
U�S;
"���*�C*ޙ�}ZC�� �В�ޟ9g	�`��d���C�3���!i�� �n`�C�=Fd�0>�h̯
�հ-��ɡ�Y�yGq��7��d�_��,S�}�Κ$P�d�%ڸ{i�����
�6�%�����{/��}?b�=��T�~"��)
`4���B0��l|ּI�E�
�Wj�|�wCm`?3�9 KF�c�gUx�a}��}�R #��~�����
�k�s>�lW�}��
��SN��>�v��_j����C��CC��m��$�g2��o�^�N��d}j*L���䋭&�0��-�(�غ��!#���a�;��!�'"y�Tn3�
-�L"��]��L
-9H-�S;�,�
�B�"�y7u��oH�YU٠R3�z0�t�
;��
�|��il$�ƞ`!�]�Vv�I�Ŭ�m�+����0���{��;��T>ʔ�k�ei� ,d7 O��-�vљ8
-E���tE����.
�H�15��侜io�9c0=�B<�0݂ZD���=���y
Y2^#
��
Ν�"��k��!�ro�?f0�zOc��Ũ��+W�V�A	�Zm����P�ŋ��<��	��8��
�Lϳ�_�p��*pSzL�/�&�K:	�a��B����V�U
�2��>a�\>�x�:� v�j
5�,�"��g�NՓ;E���5��$��c����Ԁ�cJy�4��5���䟔0�.|��ы>O��6R'fg��ZRfe��#5ˌ���Ɖ��ǂ~M�x��3"#B���b�/G䙡��
�u��~n �q���۠t��"Q�0{�[C~��.�b$�'��\_��Yx��Q�O�
��q ����Um��p�
�P)`��Nu�	g��h<n(�Hm�����#5Nmg��j�E�W�9T���#�G�)��Z��z�R<=�E;�pE�.���_4ʌ���o�Z�U�
�N�-��
���˄��J;�n>aɑ]�k��׊�����p�{̷�Uo�a��0�a���X�P8�o5
���>����s��>����֦j5ܩ԰q��	����V�U��z��4&���-x]v�ޟ����5Me�R�M`�����=�RU	�
5GXTN�� 8\4,
-Ѱ�� ��7^�X���Veg��S��D�1K�z�a�c��
�=^�2_��cխ
9a�G#�	7n��'��q~o�؅��{k<�`����%V-l��J"���'��8��>��[�r� �A�{n
 �ra��}nD-��uVڈ�=���8L�A�J�w�ߑKT����h���o�k����?5��+7b�g+q���y�1$�V���ϫ!~
��4"�K��~K?"E'�Xsa��]��t�bP*�;*��#�a���1��?Y.�>W�5�����D�W��P
-/��@͘JU4���c��_��2Q\����k��i	(
�����
?q[+P�r��
-���UY,���{
7�I��Z��@��E_��ȴzB�
�|$�*�G.
-�:n��1�I�+v%�U�\��:�
C�a����GR8�]e����$�|D�4�[;����nH��)z6��c�
��$vSll�p�K�{X������ �ԯ�r������hlzD ��6� ����*Gka+�d7������b��U�9�4b@�yO�/o�0�Y,��?ǒ����_������71/#Dϼ�pYgS��~q�s��^��M�� e����[�����T�C���S��F�jʄ��vj��藌�Ԕ���<I�*�׻��N�8��f��5v����`��!�N��:.�#�5�=#�M4�*���>�c+Ӓ����q`��
�l��N���^���e��*tQ��x��
I��`�Fu�Yǿ���� n������Exb��3�{->@�w<��3�Ә׺�Z��?+�Pb�g1�}Ć[u��7 �l�鴇2��.�(r�iD�p� 5�(18�7� �n�������[p
�!Ս��8E�5{E���[vP���.{{i��q6Í�X���JB<�!�C����@
��8�� [...]
-׆�^UG�=
nN
,{)�hb���5k=/��%�e�}�������]�ɕ;�`�>�R`��;�P��
	�@�n�r�Wo#��ϱ�xH"H�E
-A�nR��j r�W�E�vO��!*���[U�;D��^���@B-cZz
+��^ �5��UM��e��	�p9y �2Q�=���
�X�x�ș���q|�:i�;#�
�Ll�)@����P�-�Q\��W1����a}��\��I�b��#2U��b���p;�-W���HU�=Dj�H�dI�G��P�1yYREU�@T�D��G�k�3�0ڱP�:����%E���EɾQ�:B�o��&&
-�G�13��tQ$]���'r�
.���H72�
?O�5����sbq��؜�
��O������X�݋�[����O��'�z#?�"���5�?�rY3.�9\55FL
�uD/�;6�s�ߟ��C�R���Ci���Ҟ"�@�e T)��XA�oo(2��[Pj�� �@K�
9+y�[�S���R�o���L=�2g���	e�~j}%��D*�)�c�h�W��c
1
yf�k
����#+�{�0�ɫ`��kge������p�~��k��ͦ�#���S�8S�y�+ ���OP�;.��,�! C� ���
wHސ�Ԧ�Ǒv&Ou�;�!�SV� 7�d�O��L�a#H�
^4E��E���C
J��U��<NLj,j��ZJ�%� �?����yo��	}��)����޹Ĝ�T�"����hH���H�r��^�;n*�؆zGw��h�q?��{�f��n[��0��V�]5������G�x�����]#
:���T	��N�{�9p�V�w��)�
�+�jb�Ȣs�Ĥ��%�� [...]
�!@�ӟ5
� 
S �`�ц�G���b�\��U�#5�C����^*�c���n�Od&
�uՒ�QK<3���>wH!~��[�,��О#un�
���9�g3�"���~�xF�:�	�B���^�+
��K���șg��r�#
����J��
�L�P�
`��h�
�RT��u���BC
-�䇏�� �v ����jϧ�ޕ�����%�'�n��T��S�;�o|s�'�Oq"q�������M�~����$�+�v-�l4�P���MS�-��
�
!R��[���k at H���
�o\0�%�v�D�E$�|�tV܋fg2�h���x��,�@�2��#s��+��_|�.��*��ύSciφM0�U����g[����a��l���wq��N���4E���>rŲAyT�
D;�w
�C1oH�ȯ<���K_�`��#��M�D�W$����ٿ�+a�4G��uv;N[Q�%o�L�7���0D_����D��s/T9�^�4�z$L���=�[�2⍋�42�!uv�\��X[t_WU��~�gv�І��A��H��@�!��&M����u�#z��
eX c�Z�s��"��.�Qf)�{�c�I����Y�oABřc%��;���
���Z��r@�o�G�>46�T��z�y���=�dk�����O"1[��P�(t���������8�Y����L��ч@j� �O�����P?��,������1�B�����Q_�V
o�_2\��
�w�C���=�!��"Ò����o&�^�@9۩�h3ԍǕ�p�l�W�"�I�!&K�Y-�?�*���
-�
)\��|���l"R
-�Gnv!+
p�� �
�A��P�+1�%C��������ہ��g�a�*)�1
�v!A�_%��0�"q���
.��
�M��%�s���8O}B�~���IZ&��k�B�j1�3�e5�s�T��!�s�
���uh�(����o�y�
�^юT>1'[v+�5by�N�`�������xb-n�X����/*����R��X�(h/r�%�
�v]��C�F�
-��oA����hd]�r[�,�Q�
-�,�2��a����B5Jl<�'n��Q�}��f�	L	�3��H
�u�5xȻ�0-4�W��qlQ�>�����lq���&�=�8�+pI��
S�0&�<XAMi�0@@���\5p�F8s��vh�^�#n�X��6�\�u&�&ކ��)+�$�����%(��:{��V�p�@��%D���K5=�)���I�ë�N��+��3�#7�NbC��)P'����A9��7��W�j	�2E�Q+��]t����U�
?�0���:W< ���k��!쀶���o����Ҽ���g����F��:D�n�az���G��
��L��qN��Y�W-Q~�;^��^�ء)1M��أZ�ǧ��Ö5OAS	%�Vf�e�]3yG{�靈|�X�*e
��h2G�W�b�3�L
�! �����Q�C �y=��-�{���uxJ�%x��B��H1��!�FsI��pՀ�O���\��ˊE�y:�[䣅<��>/�Ī��A�Qs5���6�Ocx��% [...]
-2�4,
ҵ$�����‡B �8�F˩�+6�wO#���
���)�a��/[�����߹Gy�9\I�4��Ż���9�ng
��1�%#��tqגOH|��8���N��0�3�1��4rvX� ���B|���x�P2�H��iߔ�g���O��؉T�SR��;�N..�8��iNDA���
יP����P at p��'�Sʏ'Lp"���>.�G%�
-�
��Fa7��-�>�G������!��������[���
1/�G&h"����X�E��p�	{�I��9"UE:�6pf4`FO1ɯ�% 3�Y
�������qy]�S;��׉�y�I�󱁁_�HH�Ƣ��xM�̢������|�,����J
��8%`�,��p4�����	Se�`�^���$�i�	�Z�p�˥`
�|��Ic?�<�rv�(Y�v���\�L(���(W�ެ�w{	����
���OO�
-u
�Z�
-)��Ʋ��g��M�Y
��1'j#�A�F�q����p,�6xj�5��%U.��Ɵ�qLS:�ڸ`I�OR
����A���$5���Y��`��F�TD2
G��$'��’:�/��'���
-�<|c��7S�Mq��6��F�r�B�#
�K�`�
.���<��
�����.{�"����S��)��2Lܨ�H���2ʄ�r����q1-��9�������b�dČi�s�҃�ʻ���!8
�``�
IN��^k
~
�d��.uP ِ�$���Db�m���.js�m�|�SN>
�yR�x6� �D���
�a��P�B�f7�s��n>U�4boġ2�RҀaFba�rd�wp�Bx�<�K�d���j��v�f
3��t9f�W"��9�5��U�L5���gB|�;С
-��#2�~nm�@���~��O�Ab����LR(�51�t�|���Z�(����9��|`?=�긅��+5Fٞ�k�ZV�w�
�5d�?�N� �P�
��8����M��ظ{D�7R���q
g떜��Kt'V���#�.�x
�7�ho�
x��cί�6����|i*�vV6ը&����Nw�^�z�:gMɈeUSזU��L^��UU�{C��V��$ˈ�<2��Dh{Fn�Y!/ݩ�g�#{z���������a%�xW���V���LC/�Z�"��R�Q�� ��*��x�FP���K|�k8����g�*��2��8066B�
�K�o9����{=�<����qR���-�Z/T�r�Ə� �K�b�_;���@[�IS�
( �L�	ʺP6|?���MR�_���
-������\��uK�.�#�;+Y�zB
$8�<X�6c#�G��e[�WU �![��Q������UE.�U9�#��O�##.Z�Džtg�7��8Cש@������
P����/'
�Z���z�����&�7�ݵ��|�h�Y�zW������x
&�jԗ[��b��<k{
�j
�@Պ"
�v��
7h�
�����
�
o}DB�e@�NG�����?��S��{84��%
Z����]@�.*5.d��߈ǿIY�7��VB��|eΥ(J#)1,���%�U��jb��:`Ca�>#��R3���T�~�v�?���,�a��0ٯL0
���C��>���;��4������p
��}�)W��’ݷWz$�G9��kje;k�!z)�AQ�w�d	�A���J[�Νh~?{Ù%�j9|�\��
-�_�g!!/����&J�5�S$�A�
-��˪�pF��oh�̿$x)6Ɩd��[?H�mK5��1LI����
�pyc�zƇ �╭@�C�ݲ��Y$���1_��KJ/�D���~b�ᖴDn��
;���g �e�|?cm"ƒw���!���;�t� ����w�D���J1���<�G��=��f�^o9��F	�2�
��pt������.q�G�u �|e�'�"8�
b6�>��*�;NܯI�EU�J��-���5P�~E|��K�$
Y����]�Xz	��S�q�R*{-H��'��K�&��ғ&���1>E}t!Ѻ�b2_r��E{"�%�On�ѧ8Z;�������K����
,�
�
-C�m�%w������X �~I�f�ђƺ�T�����f#3�9=_q^X�+w{�J�q�U��݄ôz)�슰k�u�fr��%:\�ts�?���L���U�������)L�� �ΪT����o����7-�\�
-���R]�
��&D~$�����,Z�.��-�:R
�O��{5qҤS��(���iK[�D��R�gdv����]҇�4��-�C^�_8�`�Y�x��b�uY��P�j
-�P���O�����Mi�?[�}}s��.��
�B ��W�)��i
�D�f�{z�k6ǻ�h}F~ `�C\lr�H�U
�>��}R���� �L��[�."	I���^�,f�����O�ur��X"U��!��U<������u�#��s��є]���q�͎��ᔔ@G�+0-�
�0����r���S %C"�b�
�i�Խ}}��X`uʞ����|�KӪۖ|uhf��0��h��\���C
Y$����I&�^��#��eo{�s�G���=P>Ł��b/��C��=р
�jdv�n,�C>�K�1��!JS�����
�Y
����'a1ǰr�c���
�L��ؔ<H�
sh0�L�I�+�N"�[ p�Y��Ӣ̐!Z�������Ο⧽X��zx�&n�m�850�u��z��0&R�S�(ׅ�u\��Ü�.YR�� N[��`2�=�X�
HT�|�X�Pa� � N&�Ӄm�H*�=؟JDI'q�� 13��H���3J��I���4xf��k���
�nL���
�n��/����sߙ/�!v�Me+�2�H�o$
-!M$:y_tnvq�Z���e�([�@h)�w�
ua��N
�$Ʒ)_��f��h��+<[[��{��_���RGnX�n��+���N�$�����V���'���@�*
���pڏ��5}�rp̐���%��S��Wd��M�Iwk N� #�
���
~�z<�#��}7�^4o�
��ѳ�cw:��r�	ˇ����J�p�l�u����e����:8.�.�c��f���=N�
@H��Z�TA��RɆ��R (��	Um�֭�����
-�ێ��z�

`
3�j
��Z$#
�{~�n�{�fi�C�/+DL�3����R��#8z ��-��?�?�"w���""���
*��m�� "L�k^T�DMaI�	 �1C�[��eƁ��ա
 �)�
��Ȅ V�3Y�q<d��1�s�D�0����ND ����z�T" ~�!�bJ�p =|x�ب�4[�-wd|��"�iD
�d�%��&q�;9Hx�G����R��#8Y��'��3�X��@R��H��n�7�
&�%�O+,�(��'W/�KC����O"�u9�j�I���Z��ꀛ��/<�N��#���G�A �0��q���n{� ֑=��˟�?��	�I�b���a�D���v�\;��&�h��1n.%��M65~��P/��<nb�t��rG
���g�kI\
3B�nc��n3]F���
B�IG�7��uUk���:1=G��eX��-����}\8�ͽ\�' ���f��#e,e���C��#'�`���Ȇ��
"��*�>�
��+d��8J�#eR��O�&��Eq���M�1��+<�H
�TSznTk�TӞ	�#c
o�FTl�?H�,���O�,��"�Cz
-1��u]Jo�'z��I��G/*��r�K#
�D\}FI�t�g�F�p
N
ҳ=�
��
g
-�iU��(�:GE��0zw*l�����X*0�#Xt�D/��)��T�	rq&NȺ��S�>�~5c��
}�B�D�p�
;�[g��Q��Ī8t�QsM��5�
衲�

�^E�e}�i�|��i
-��=E׳LN�)gF0�Rj�(w5e
-�Qk�k��M���1 0�Y�踊�X
�~�-M��q���
^7�5J�ø�#� ?Ht�@���m�(�y�1���;P�.��tA "���Ft���w`��a-1hw��#ɧ�-��������g��K�u�
���8�i���
knxF]��Z�w�5����8S�BM2�Kcr��N����8��C��x�v:$VÕ>�J�
4vtY�r�á��t�X�鑋P΢��n�
�CD���1�9�P�_G�|��j��$ZWi��B��)f��P�bM�����L�%�ZI2,
25�pmw
�0ie2 �H�V�[T۟X��RM�B�<0�u����
�.åM���م�L8E{쐇%u�Qq�|��)";���6t��X+P�؛P�~ ;��^U�t
�e
֬�/����{��˺�4FD���C�6�����ԅ�1
��U�
�B�&ެ
n�
 
d
x	�8/�s������P-+׸�M�|!X7��
6k�3(y�6�mR�.�{��Cu}�q�������ݤ�bX-��c�@q� N��quO�!����N`=|���(���FB�A���>��сLq���A��di��Ar��M�a�^�5VH^���V|��}�gu�{	@)$����;m0�P)��U�+n���h�ksL�l�G�_k���	��r��[�C�y�f�)8�y��E,TQ.X�
-����Pе��Osi�ᣞ��>?�k=�>�(��Ɍ6t����~Z�6<T�S��
2��գ
�f}����Rގ�b@�wg�d
-?`�3WU
��톨��(�j� �|� T��0��e3ḛY����%���Z�����@+c��BD�$�
�Ւ�b�vH�32�a'���z̚S�5��n
{*�n)
-�
-�Mg��c�ľ0�/H�D(^���P��̘����M�C�R%�
v��:�t
-G~Ȩ:WG1�j�Q�]t�VS�~��GU턬x����)�\�RR5TS�
P��R(/�W&��P�

�6y�� V����%Y�w%�נ
|$�r.�[>�Y���W�IA<5���1�Y�V4�ˣ�ȹE��s���,����j:�<Я�����poY��.��j ^�BfP�����t�ZfT?�:-�2Q�;��8�X	wÈ�B�d�.�X��$
%ψ������I5R�qZ`�	c��t{�@[_{`̐��[{1n��ҵ�YW3�	^M�0(
-]��[��Tߨ�Q�	Oʦ���^
Ctj�
��B��ϟ�]! ~x	!
�>�b˦�0�� �
�����N�1ߖآ����3j�̤5V�g��zt�!�I���~a����ъpe��=[�T%҂��e	36�<&�
3-	�	1IF�	���dQX��l�������y� }F
�2
��"�Q ҹţŵ�P����+
-$�J�ib�Ɣ���
[�Ѧ��
-
�I�җ
B�S!�G1�{�l��z<�2������b�
-��ø�!��� ���5�X
-�f|�+�R���S�jc
ہt��y\��
��Z���A/œ��ä��
|!��b_=^�`��6��*�R����^;����`���;���
�C�	����8�"Y�.Y

T�)��%�i�$G��IE��$`���k�x���`��?O��o��x�AP��!l�x��T�
W���������%�f��)7R6o
�x��;�bS����B��(�M��M�������I��u �,�)�~@<P@�o*@�Ћ���g�5�:
�
8x�6`
��
������UHR=rVw *w�=����y.a��~i�0��B�
-�uM� �}�VR�_<C�,�E[��p�;�Gԧ�̯��,�L���o�t��HZRe�')GmyI�?�	�,ͩX�҅9ӫ˯A^%�C�Y'I�p��.��D^� ����r��ŕ�_
4���t�⒟�%�S{y`�� \�I�P�cK�wpY4�����M7x�%�tL�M�hzD|�rz퀪L5�/Pc6`�·�w���8�Bh�=��S��
.j����}"7���3
�T��/ 8 $�Z1M�)�%	�����4�s�
�@����(�4�(�T0J�{Z�CLn󇏁���:OQ=*I����
- u
-
�ʱ�Q\A��몮��
؍r���H*9��-.[7��;�?Q�HW
-��15�,%�P�F��
-��+ÿՆ��L:��#J֕���&���9
U������
� !���[�!�J���|�qa�"�����h�>Q#�$�(0LIBZ���# @J�/�z}�
�5��j<|Zze��� t	ۚ$�
gs$��ej�>��.0�t����L�-�� 
��>�
�|�޼Bt
�Bɇ��8&e�r	8� ���L���G���T2�[���K��T���*
0�����!�q(ey(��
K�pj�P���E�vș�;ë�N_�vU� ����=�Qz�t�Y�z�<

��$�'�@��t�<O��̼A8�0x�$*p
@�,�Hڣ/
Q�)q����s�d�WL�� �C�%���;T^8�r��dvH��t�b���[�<�������P1c�i��郦 ����I׭J�&�
���� �����h�����B���a��.� �ס̊v��|�M��7���
�?�SY���+����t�v�=�
`!�9��Ks����EI����Ycj�(��e ��
 ~W�ϧ��:�<2�=A
-m�=
�Jz@,�T�|
*�M��G��jJeh�`
�0c�h)�٥�<V��@G�!2�$D�^�-=�
ܕ%��c
�_v�

�qY&�3����o;�nA�_�L���9�9R�Q? "OQ�[��߾�m<_����Fͩ?����
�7{��<�
����e�:��\)EH{6���!���5�6����P�t[���

-
-�5�zk��\)��^�����w!rK`

Nq9XSZ�P����!L�+��p�U*R����iV܉�}����(�f����D�
��'�P�.�g�=���fb�7[��wu��#2
!M�^��eL���q��L�H��0���x&��)
Hi-\�L�	� U��N �$p�S�~�#�hV
�R�����Y{�������!8n������%BM�>z<ʼ����t3�q��6���?�R�V J�{�x6��88�"�գ�*��h
�P�
}V�#���ң�߅�.I;!#�zag��3LA\�I�� ?*�4t!��z��[n+���~v疡D�l��

-hC� l?���Y
Jf��*3
g�a�#m���|N#+�(��'��T
-��R+�;C֠�7��@��R��0�sK��ɻ��DD��݆���B�i�F�H_��f@�A}ȗM;�_�_ٳ&��FK�X�D�uK��U��b	 
���,��UM�+Bm��o?A�� �_+N�>��<�a
������ ��rw�
���~�x.A
+�2ž�܀���N ��t`��Z�_�
�*���c����GC�����F�|��K8|�q:&�,#��$Z���"�y�ez r�h�W��9.�j떣�;�K��P?]��""���[BS�r���9]����aK˂���
�Ȕ���HBa������5eM���
-�ٵ�<r٧�RC[���bc����(S]�H6v���E�F�ٵ�^Ò/:����QܧP�
�֙���L�3	
�O
���y��_4.e^��_U���b�J�b�,~
l�5
�B4P�Kr>��%1�K
���ҿ��5�ɚF
�l�V;�B�����{
-2
���c���c�Å	������Jd2T#`V6ucm���J���Mn� &�C��6צ�+9�(4����Gs{_�Q��h��qn�$ �n�|�8
�
���{����n��[���]�>j$^!]����~_b��5q�L諃�É��D;���`�4��q���D
 �m?�"��z��0A����|�N�lA�
���Fe�j��ʁ��q
m��$[��
�͞�K
��z?7xOk�j
a��,�-Ţ.���������UC�Nv� 
�0R�������pǮS)�0Kn! ��gz
�h9NA��)J�[�k��k�f�v�
��ގn������7ύ밢��56���LJl��u��PN��X�������/��W|G响�GC
�^x^1ƫ�9���j6��{۷+��BD�%�Ʈ�]
k�׹�F�‘�"����
��@��*"da��Hcv�>�
.Ԗ��>20��p(:�Cu
aް
���ݻ
ު��/r����`���fX������]|?�\��!��F%QzH��e:��O��F����Я�l�����;l)P�<�>j����y�Ë��I����M�#x����Q
y(�?�$�@��G��X\�����l<�|v'���� �>�|("�r���(S'��=����{A�:�'ɢc9ꟻW�����5��sh��Wʇ��c���9<����G��
|�@ !��'��p�����W��b��r����=��]�-�1��hFC [...]
-��м~| 
��}���M-$m6�d�<G��w��K��K�
����r��WՋ��
����
�r�
8���ͻÅtu8��9
����ǔ�A��%�D�R#@��\H{
蚂ϝ�=;�=
M
y�<�r�+�>N���j��C3�L _�}�C�n`+�ƌ��'��0N��7��&�)���wKCV��BeN)n�{2�����
n
_�0��:�)�e�H�"�v�V*	��q,2x�z at _���t�գ�H/��̛� PB�ҀRy=�-�,�[��U��Id�w��Sv�@�2d�f!������xQ�EU��M��iu��6
��ҐWAvt���|&AY;	dG8�:
V����B=�o2w���'��rw��� 
-T�� ��D���P���өo1C�^F��$OՕ�b
�1|�� ��fc�o5
-Y�a}H�
ֻ��q�˶��kZ:%�py��(;:zY
-{^�Mp��6�X��,lv�6i�y�C�L=�e�l��R܆�32-MB��R�۷$�����2�H�A�|N^#��Ϊ���8��*�wN�����_��
�+iT:_챕�{�:s���O��	<�H
�'�
�K(u��{ꏐ"_���>�RT#y}+�| 
V�<��O�_
��C��m��C�q\.�fZ�EK�s
�=����q�t
�H�w��j��Ņ.�eD���>AN�`#>rY޽����q
A 	=���T�
�O�0� v��rTIJ��iVKX��N}�����7�>i�w�w3�p�GܶY�}
aR�u$~�DU����Q���q��~n�ƹ��5B�E�&R5tW^��-��O��Wc �	�����[��ɇJ���H
~f�+FZn �'GFl�mUB�WP�~N�J3g~N������������JM��
;���IR#���Z�����8�7|
���IhynCG�I$Ӱe�w��������>*5`��`N�C�T�ay/�D��
-%eAXe
�5 at 2����Dݧ_]����j�[4�a<K&X.\���N�Lb*��@#Ge��H�֐t�g�c)A
���9���k˻=߂�M�T���N���:w
c�h��]Ԡ�
�=`��(��q�P�
��_o�
k	Ne��d
���)Il��
.��	�""��sC%���IS��j�B�=dqaJj
�Q\��|N
-2��.�4�a�熭
 ���O�Յ�B�|L_D����<e�{�r��`͏�����f��h����3~B��A��{zy����W���A�u�U��
�����Z(*"N����,��<K	5$�P2�7����j�v2M?�^E�R�u��!�^q�9���mI`�CH����g1ivK
��kH��f8�����u��
�S4�K�΁��B��{C;4� ~n���%�Ev��{y��
���/,����T�y�M��kkjE��l�����n�/�5�VD���$�����`�?�� s�z�1��֩�S���)`<3�7)��
�Po
T�_�֟W�xc3��k� 0D���b�b����mpT]8C��2�S�a"$���{��1��)�:�F,����	�I�j)�Dj�G����7w�:R��t�ջ/
)|��$?\�y��O��`5�BFp�ɽ�d<o��؏�'��i��n��\��peu�T��A4x�ld&���;K�E�k�¤�Iq
�E������"o�O�
C
-o`�U��A(��"
-��K���
-�j��s��!��ߧP�f�|D�H]����V�c�9��r�Ϋ�I	jpi���̔���
.
��c��\o�}����?U�r\�(�푂�H,)Z.�%������oY��D�W�D�ʃ%����!��dS��Ϳ��?��_?Y������?��o������/��?��O�~�/�����ǟ���~�������������s���o��?���������>�/.�y]����+���e����Y��?5��Q�qD��[!���=�
%�dHh]LM��[/z��Ѧ��UQ {
@
=����
������������$���­��v\h�9�+:�Y[�� *��xM���
�X��f]CH:!$^��ainډe�r�&�
�R����A
�! JУ<���&�4���Y|i
qPz�q�=�k��$S�&�W�H�uV�V����
-��}N��
��{���ؽ�DX���8�
4)n{�P1��S�o�C!�7<_��|�Z�>V JK�f��7�y at +�w����7EX�T�;"����ɉ��0
`q�B����+�P�
b`�HM�$(������
��% H�{�TK��u��O:z�]_�a����];��a������A�n@8�=G�'%� F�Tɣ�@?���
-����a�Y�r7
�s� ���s�
g���
]����芈.��L�#q�A at B
-�4j�]�>
£�j1�*V��k[{�-���ƴ��)
-N��#hQYuI��@˜�
����΋�E�.���j*�
j�#��0I���&�P���\>5���W��4���W%]��KX�P�M�Nh��;C��4+,�t����`�Pߥ���,��q 8�pGE
m�P^^K�|Bo�P�
(��
u
�d
�P��I/��f\p�|��Y�v��$LM�{�}����B����nњ��'�Nμ� O��
<ؐj���� �z�H ������G��=�˕
�
&� ��
��Į����@m���ǃ�YU�1|��h��!�X	7��&e����0��05�c�
'����н�	z�
��%���� ��X�R���}��@����1E��n[�9
Y
ԃF�QSX�j�}�"pM�hg/��zbv��z|��Zf��bեH�`*R��i�
T2큝=ر��9˳{e$hJ@��2�8�ǘEK��U���
cu{`>@��}�k���M�
v@��'�u�����E�����P��X�
�9�c�����QX��Y��{ [...]
�9��^�RD)y�$h���tr;{�"peR�5��!�h�tz�[��@f3bb� bB��#�#w�Q
ؗ�t�f= U�_���n���D 3]SYsj�%�xQ�n��s�.�F��
��!�N�� i�#�,F��Ѷ�b[G]}�(��c�{Ƽ���=28#zgУB���D�]�urkm
�#�H3�K���keŏ�{�)�z=���c�\����XBj�+:��kI�(sO
����*�	�d�%d���'VVI���%(�Fj�O K.��'�����p9��{ض�C!��&��
�~C�[��T�qU֐�$�.��J2�M�ldU����~�Y�*�ԙ�Q�.{�4�9Kf�L<F�YD
OV��a�R�(.�:�Z\�x�+K!��i�b����nj@�#�
;��a�%�X�y���鞨�q߷2G���⊨~��
7 � "��# ß#�����R

�e�
�A�R�� �5:�Z����1�ʼn���d���$W��9�,�H� ���W�.uk4f�H�o���݂jJ��%J��8
����"o�ҏ��
-c�ye��,$wO	{�h���fX�ڳ
����<Z�#��vB�
�T�zx���/�XQ�/�#k�$�9��P8$)[xBd�1����%+gV[)$�����8z��8�s4��E}���:��bJ4����!�~P�T�q/���X#-&�QC
{U��ٯ�m�=�Cv
-�<�@���Pa����sx�Y�#s�9Qw�x������i2�Rãa^�]̃�и�찑�d͡ [B&��!~By
-�.�4HC�m���ij��
���J���h�����w��&p�<�Ͻ؛�qE�L��hr]�[ZSe<d/[,}��8"��#~�����I}q
N�A�/{)�_8|�Vz됑8�)��m]���zu�y6ˆ��Hf1��דJ'4 )>�=,*&�	0��}TH�x/F�})
��[`
�,�=�d�

-��.Ծ�I(1�o߃/��,S:��2�����B���
$4��skJܒ��!
f#��A\۳/�����-�����U0��<*%��3����lS���G�����=�[�'��(��� P��Ȟ,җ���蚙�a������
�M�b������q�8��)L2�ʕ��d��;�ȅ�*�S���ߐᄘ~W
����P��D 
Y���!�����K߈���� �b�v�S�1�q�-quK�%�ht*�<R���j�u|}:
5�X4���W,����sA�S{r`Ȱ�@DW���4z�E�
�P
-��֡o�d�|9�H^�^Ȏ� �+sû�L
q�^*ֲtY
N��]Ԕ�%
-�2�J��"��o.{#|�-{��W�%z��o����cGG�
�_.��q�������~�4��l4h0�H���"�Z����G�lp)/\Q_�G��
HaG�8Fr��O�p��S��Q�z{8�ΐ���w�]o�>��Q�*G�O��_
��n�k7� �VYA��p��*��:u�<,�
mAG,���h�qi����D�N

�4���֕����^��p��D���ڎ�)�+ݝ�HJ�W`��:�����e/�ĉ��7MҒ�Ljm�ʈ5x�A�KZ#�3�g������c�=P�Nq�;�S���
H�p��Qq�+�
iWd-qH=�����r+��t��D���1)_Y�[R� ���
%��d$]`�ַ�N�*B5�|�
(�s��؃Ue�
K

%�c��B>u]F`�H�NK�������`=
v��l�'VZ�(;���
G�Y
ٯ��<)_��n�sƷ�3����]�z\@����\s2
Y��א��t��l��X��U��b�~L+�w�q���-��_�PZq���/�^"LZψ����a0$���P���u��|5v$�s���Y�}� �ޏ��{�<v4�%Lx��{k�����y�*׺��a��
#��<�[��*ِ���-�~7��)�
��Y��
~�	V�+I�z��O���-`���0����/
�
-Nj�m�<i�_� k����������e/|
��ˏ�T��**�����OJ�g�@���`�~n�4hp����c��A��5 at 95T�� Ձ]���
!������֋2��mJA�8�?�<
��IyG��2؀9�/]�=�Pl��5�?�V;x ���(0#�[�����
�@Q��[s�Tދu�6ϙ���l��`�˻l_n"�mˑ�ffKNK��ˀ��Fz`\�:�%O�u��ы����L�
>�)M��n
��N��0
E֥��A�u�����b�� ���	)�=�����b�4�L�#���{���o�y�
H~�!��v�~�e�2���Z��l�)UP\���1گ����wB�Jf���L�R<a���
A�~�E2���S�'���u
-y};E!VH�*ˈ
m�
G��
3j�`��}$o�*��_J␸�G��c��[i'u#fO�
i����õ�}��㾚��C;�ϝH��):��M�s)����S���=U�7���z�
�pq�혊��ص`�g���/
�Ȯ%��ק
qǺn`�U����T�i��[O����q��{V "c��M:ă���?��3��>
-͵�ut�E~I������vpk՗k�d�x-2��/za��
s?������4��"9�9�#,{�j��53��Q0K��v��y$H
-�$�+�;�:-�\f/J�Jl 5��`Z$���{�"�,������<�m��h5\����S���
+�����~�ՎhSm� UQ�]�]!���
-fla��O�
+1_}�ѻ������r��v#7$]O/"���)�r��@z�
M�=�߫
Z��y)x�����qcI(옺��Ⱦ�I|��Q�3�/�f��P/��zmބC�F2..��@J�nJ`p�9
�#���#@�
�p�Rd�e^JF����
-dU�l��7�|�õ�:��D@$:�/
�n�(�+X~5������׷�r�$��\�j�
H� �a�d�q�V�f-�z�lU��E`@
J�tr+8yb�ʺ���s2n5�ls�} ����I��������FMsB���{/��ԣ�k�/#&�^d���~������	�
	
�

��I,5�
VcϽ=�j�
�d�D�E�
6Z�"&�Ho�Qr4{$$*
-Hi �Ĺ�G �I�6�]�%d��*���Myϗo
YV�]����}��F P��=�쟠�A �f����g{5��I�s8�⠨}��S
- �κ��%Ȟ&y����5��i�\ݜ�,b4*�j���a%=H�у�o��:��z{��a��
I
-w��Ll�鵣V�N��U���� O���#f�kM�m��)�=ʳ=4Bi�*������oj� ����.j�c�� �����8��<bxL�Qw�u���R=N�#D�b=��*-b�
�cx�
 1��nR�J��F�vZ��5eF#7���_$4i��/�D��DDd���G��tS���y���t�����R�^J��܍��bc������7�$��+�
�>��y���ܒN��65E�'���j��Μ��,RҦzЃM�:S��O��	�oTH��<���Yil�|u�4�$Cyu�ژ�&"
-Jzd� 2d��?wXaJ�಄�:AG��
0+��@r�܁F�(s�Z uE̺�05k�Ԏ0���vJ8ǭ@�x�
�
-M�3����OBd�Y
H��MS�P^7A4� 7I��M�,!�^��<�h�L��A���Ȭ �t�W�i�Z8��@�I *o�l�3u˱�p�s=ٯ������f�L����0�A�
B����
w*��
}��W��^��;�A��L?_�Z�W��C
5{�J>�
�&�
���@�F#m�Ϟ�4(4�Ƹ�ֽo=�V~k=4f����
��y-�c;1�����ĉ���D���&�K#���E�Vb��z������L��t��c�ؽ�&��5�c�O�{a�Y{%��D�1���
���&}��R�M<rTf>7DJ>�a|��x�Bn�M������?�=���y�msFv��0��'�dZ�8���E�OECm��
Όʺ����^��?YϞ��$>V���
-$
$-���
�AO-�,n����
-K�*&efD��4� 5
۽��?�:
�4c
-�����]�7�^,�t�.�d*�<t�;d�z� "y�ns��Z��E��5^g�0T#K��>�^�huz��^�$U{`h��!J� ��{���
 ���W����d��I3?Nz �
-%$\j&�G����i���f�F��s}������0���& ��P�y����େC�����}�"d5�����y�w�����)S
�&��G"�g��
�?@8�.�=u��� ��7��CڽCjh�Ȓ���:1�A�y��x\��S2���iJ���<���"޾�1h��H4Q���}��o�����ٳ���vf�l���?��в�\���m�`F��UR�ԋ�T�7
-9���y��8U{8�i
W?��%�Z5z=�����=�a2��̲b���Us-l��B8]��}���j�T�
�s��*�����_�U�&2L?��۪��
E�
�=ޟ�֫�P���f9�R���~?v�T2
�wd���o=~�&�n�	�)��kI,j�
TV,k#9������-
![h%@}rb�i�޼��V&��ez��uxM(0V�
8��u
<��^�"I�홖
��
v}M����-�u�Uv�iS��ƾ�N��c��Ǝdj� G��l�'2��JP�A�J���D1c��pQ��9�L
���
���S�S'�I��|"��	�i���!ځI�~�e�w�ơB��f�GT {{�/�&��{Uk_�@>ԻB�(����$:Bڹ��n5��r)q��!��߫�Q�h �#���
1�S�~ک_
�U�=���Oٿe
�����$" -��3;�e� ���|��6�
�=<%��/��(f���E݊
2���� d�E����g��`��WpD�L
�9��&
-]�o�T{�c���!�O��
T��(٩>Gl,�=́��A�ďy�0�]v4u�O�{	�E�̣�R ����׷�	01O�|/?�
~�~r�#�0u��X1`�i�;C	���������D��=�w�C�=DA�bϴ^'��
-��^g
�،,�>�%(�ͭ#:d)P&ޣ{Ř�t���<CF�"OQ��SJ�R�hh��h��
-��?k�m�ER���=�ec��*��ޓ&"z<��
e?�YS������GܫPf�d�W�/�3�oe��>UY��"y��;��l��>�ť_�`?p7e��{��;�7c�Z�\wJ�y���Q�������P����EB�
50H{Ʉn��E/�����Y 8&٣� 	�VZeb%`wG�b�$�E��?��Gʔ���Y�=���]��5!�•
�[��
sD��{�W"�a)Bp�LiS�p�jd@1�;�=/
-�L�
��ek at K&E�6�mE�G���P�(��
�!�h��P#D�7iy������
;�8Z��F
!'9}v
(�>���{��F�Ϗ�i�(P�B�g�?Um��"n�|"�4؏Ts��t�^��@.�
�2�
0l9��ȕ�<�(-� 'z���1#�&\1���qL��ރ�W�}�Æ邏��~e_��}2]`,\P䥕���K#.V���&� uJ
t^R
-����Ww�Z�qҊ��+ .
�w��2������/X�
-��VAgdJ�
-ߙ0���t at Af9�3̃H��8d��������'bG�O��6 �� '�{Ի}x�A��A�H.�e����p�n�/�n<��Z��0G�������Xj���e^����Ķ��{��
Fh2�5�Pw�(6ң�����Lhhƾ6}��>�t�u<��[/7��[
=��J��aC�lL��ӧ�i�R>��>!���CSf;��
tȈ;v�ȁ�A�
H1v�^�.
6&+ju�h��P�^3�W��0�]7��x���;ڃ��;
-�{���t�2�^;�%�FXۚDF8 �!yʍXU�J
�FXDצ��h��$ۗ�r�܀	��rぼ1'���R���=���Zt�~��_���ŀU�
TN��Ұ1�t�GY
-8�8� ��,3O@����k���
���uK?=�s�`	����4}W�q�ˀ��]�@�f 
������S<S��v
w�R�n�)��~�\�y���4 �s�@'X�2M!���
y"Y� BvQ�S�w��
-w�
J@�	�9]��7ż��b��WV�i�fY��eE�-¬�:��tɼq[�"��,f���´��
�}�iXs#�$���
5j�OXĊM0
-�5����]�Vӱ�I�"H|�T�H"^ׁRk�с
��0�E5HWI$�~�V�)k�C��/"r��$�W��g�gk���=�f��59Y���� �M��5�HX�=��\��s_b^O��E6qD\C� 氿hk
�^����~�%QJ%E�
�V����~�xG5�F�4k�ؑeC��ܥj
z����: |��wW#��ϾִHQ� a�X��W���z&g�
���L<4��


E������:
SC���}
���O$�-8t��&����$p�`f�x�)y���
�
Y�'��
�/�+���g�E�B����R
L�sTq@�i
>n3�����4л�R?�dH� :�Df�N�:���`(^���=
-k!���<���
'����
-��"8.��\�
͟�qu��=:u�����
<nF*
=,�a`?NH�/5�a��^�Ey?j
-
��O���KND���	*�U�t\��������+N����E�`�6c��F���b3C�%�i3���lD�Af(��Q;�}"I�:}"&�Ub*�_
E�2 +�*�r�v�����=��^͆+*ܐ3(t��N2�`�)âBľ���G
>����N+M#�@��g�KZ�}�h$A�̇��B���
�lx�G�Ο-�PKӞ)4]�-�=S����V1ɧ
�PG��L��
��C�l�bgqA ��s���g@[�����u-HJ�;\Obf�U�}
���](��.-c�w��t<��+X�V�k�`Z8	��	�ԒI�27E��Bl��S�:ێR �~�N���$��x_
5�
ď�ͥGqj�X(p!��i/w�$���ךq����
-�S
�_�^��A���@�z|
-�\Q7=�qj$Z.��
�i�-O1��q_+�.)�;q�^�Bi�%����_��W���2S���3XRى�Q���EƟ^ zI/�á�+L�=�@��� �=А�hz8SZ�1�N@���礔�3Vԯ��ҋ�D
< Ǒ�
F�A�
- �^���u����/��D�ؙ�@	�HZ�*
���f�7� b�8��2�
-�� P�zu�ʁt�Ba�=MHJa��D��t���KhD\�yH��E����nA�^���4�N
��A�B/2}I���q����;�G�&�"�`
��ƈ��uI���:���ً���~:�[�3��$~L���%;r ��m�
3~����N�-�<D���:�VH�7��dy
���*UA<����i-A�w
X�f<
$�98��YI���"M�>�°9hTc��Z%*U��C�/�RlpZ�$��M ���ۥ�AE��WET!�Q*����I���ِ�Y�|>�L�~s�d� 6)h����H�l�BHD�CC��(	���&�K����fՇ�Vz���ܣ�������等D)~�����9�'�?� �M/>�{,�>��7�=7���Á3���\33p췻
-p�T�=.췓�3�FJ�`B�p�֘y��1
a{(�'U��@
-x^^\�;��Jp��b"ѩ��ö`53��u�����BYɢ�EG�cQ��l�_T
�
�fKB�L
�P8K	�2�� #�	�U'�	r�2�|8+=p�H��!
3�� U�2�W*��F��
�WQ�"d�T�‡�
|�%ܽ�
�z5��a���"I�G˜��1X�iɎ�w���E�h�,���3D6 ��Q�$�T �y�	k�9�8�R�@ij�GUKgF���h/:��@V<9��(s� ������=��
P��o�Ε
�ED���Z���+K���L��'c!��!��p9�I@-ݝ�"�'��[J8Pb�e�.y=k�({�P��u��8
#0<̶�����gt��7e�d$�"��P�,G��<.#`ߪh�Z
�~�聎+=X����?��T.x�j��F��):�u�Id�<�gU0]
~5��-75��p�.B/�9Iy��ƎX��p
�%��)�>^�A�0=�tg��%��G�G1&

Jj!E݆cD	S9��&w/�Ӱ�BZ�^�O���@�箖eCr^>�k2r��S+!z�!��'���\=���>�W �
�_ۃ/ř���H�k�U�W�B��1�j!b��K!��άRqY2{e!�X�
�ob *‹Sv��I�6}��l�A`��G�G5�j��l�)�"2�7�d^��������Wԇ<�sB�� W,���M˾� � }��f�C�Hͯ��= �TnX3B<I���ZS:=���`��Ǒ�X����#�G{�!��E�8z�6��
f�G\i����p���
-=BB�`M=H
�
%��
-�!��KH�ش�U��
!���Z���I
t*
-�`vQ� TB���E$�F��
��_��#	�'��u ����A1��dhV&�����6��.)�F�|��Fh�
�R?�
kq�a��{��V33����P��K����Ȭ.	^	@N��z����uE�t�Z�|OUU
�z�����B
v�r���,y��ct@�A�����'.I¬#�n�z0��F(�4�KF�6�Џ}��
@�b�3�i
r2���.�����N!>b�Wɤ��+&f �@
-�d%�C+�ۄ�H
�B
~�26I��w:�
-O��i��`*�� #��i�^�,�1D(GޫRR2��B,�{�%8�
�
d�`�����	e���Iz�� "�;�'��4R�%*��

-Q(=
f]o������ĺ!� ��
n��� >u�1ap��=9I�̛5R� 1��Te��a�L.Uh�1�c�-.�� �q�5{�Z�xz�7�d������;��`���N���J���q"�#���H�>�q�R
rVݑc� �+�v(C�tL�
)�0�X�&$���)�W,dz�1z�jY`a[���O��
-ɛ
-�3�q@Ӎ�i�0K;
-��:B� �t����

��&�7���#�
�~�	��NL���M����2���;�{�*��(��
A(���h}��$�\��>���²e"������
���.MO`c=$H��Ȧ�?!�Em

��l]�Q4��{�*/�
�/�,�n@��(Xϋ՗i���P��mƟ�g���
�m�aceyı������da�|�]e⫁S�N	�Z�%�u��X:��k�m#;>r02����Cj|]��
�����.6�

-�'��%z�<Ş��)��K�֑G�+f��
��S�p����Rhx,Z�BŪ�)�0Ԋ���u��Ë�gP�
Cv_Bv�bfpBᷪb^���74�c�,ܒ����M7�=z�
�4?�sl��
S
}�#�7����O��9���JxRP {IP���R.�R����
�0�$GQ%�¤+<`��X���4��
[׻
�
E�(y
iB�v/7[�(@��	�P� �  \K�n��D��W)����#��:�6�	�l�G�\��CƖ���OtM����(�
2
����yx_  �#c�K�3]�6�
�#��YC���ȴ�ڃb.#����=��`�{��!
�n�2�DU�3S�na<�Y;�
������ZŖ�e�QV~�	�	iaV�����O�
�&�nM��9�]�����Z�p�
v�`٠
��������ޱ>V����
����;N�n�lC]Q0�����`�V��|��!�Zx�-��fp�a���=��=F�e��Ϻ��l&&��}g�y�Ʉ�s����	�,� ��R��,�
�//����
o�:���|��#��s$� �4
1'��
-�E
�
.Crf6��cT�*�)R�V�f
S5�}N@؃���!	rW

)J�>Zp��
��Gۜ���.F�|�Rz ����Q���9S�F�Cn���F����demg������B��i�'����e/V��
��9Έ
(pD2Ϫ���C�ʾLq�� WE��|�Iwd�G�6�-`/E�ہa���eז%;�{��i�j��M�`h�p�V�J4 �Y&�w|�?r�Sk.�@U���X�s�%b\�
��@��V2��w)�ȩ�<W�,;�׉h�3&[�Ӽs��Ю{�k��
p�?���j�2'��)9� -��p�YOSׁ��i*틌�)�
��w��g@���S���D7M�Ɣۢ&D�~� �$���dU�X#I��E^)�,�
1��%�G/��!!?D���u\�<:�v���
�\���y@Ⲱ�@ѤI%{�A�Q'p"0�g��b3ΛDd��A�\Vh�m"�
-ܐ��		�ھ��A�O
o	;�
`j��O��M�����+ݪ�[q
��҇�(K��=c�@��V��T{,k���
ǎ�tŽ�3Si�:�p�ɒW�a����]8P�B9_��n;��Lyw

���l*���F=�yE���F�
�=A�*oe�����Ο�֞�	<%@��{V�=��D��w�'�����C�|� ���D>��E\d���UV����
-�M�w�ـ��A���"���.�g����������HkH�HJ�-��{GM��7�$J]���D��DG\�F�@��䝖�Fd~�w<�됒�Y�{P��:�����1
-�љ�3�x���W���#Tt��?MD6c
�2V�r�K�-ם%�iCp��@�G�EC
Ʊ4<@�FQ
d4xSf�]�����H���
��C�
��7�c#�'��3�uX��!����ٙ�~�v
-�E8
Au�b�}�m���
g
-e���B
2I���|k����a�0�$D�xX��	���R��5JÄk�/�g��k�C ��^��
�Ab�0���s��~�X�����)��=�A6hW����XG�Y,
��8
>U�盀;b�Py'���5W��)ϼ�;C�%��Y�99�ј�D+_�A�Nb[g�=JM�k�؟�Յ�hz��׽mު�1*��_�\Wr槣+
����vaVaw�9����W�ɞ��i�VMF$
�r	�}�����t�œ�Cy
�@쯭+*] �_�+�5�ô�>*����W�w� ���E���rY���
"��s
-���ׯ��
[,�
���:�q�
y��E�Ȓ9���@ �v�
���&\Y%y�����P�d~���NK��D-�P�����fFaA�����q��<؝[(
-,iu�$Ӈ;�T��uT�=�3�
Ϩ��@¯�+�¤������(h\w�1�T�yV��?hCd�H}7=l�|3��귦y�g��m�&.�
疺D6�f�
-�������MByc�}�

���(���W-�JA]�c>��p� >�b��+:�&�͞����D9]��%��J���A�#����Ew�~�?�I�"!GddFPM1N [v�5�pFW���zW�Z�˶YyE��o�	Q�w�ɤ+lȴ�Q�Y�=r�~�v_8�\%c1�#I�^K:��J�P
�]��� 9Xu�k/�����J��@��!ه�K��}\q�+[0���|�(<��<c{p��f�k���%�Ɓk�M'����j�3|❱�S
ӳ�����H�)PA�faj��SxA�u�a�tE�`��jΈ+�E\q:<�����W�E�5�`�l�wR����V6�K�A3zg��%C�����s������Nn,G�Q���Q[���N�!D�����pi,� ͒��t)$3��J�*UY&�<*�f$A��
���ȭ�z.�NU��B�*
�q;�����_B��L�|A�Nh�Ȕ@V��FO�Dt=#��p�Y�� [...]
-;ϴI��
_7eE��⡝�
&���溗�A���S�"�LkY�ռ~%-�%
 
�G}5&��$��8~
h�i��%�%��Cv1�}ezP���w�S� ��7�W��"���v�˲��$�u��h� ]mv��M"� ��:�D
�
 -B�h��#*��rv/��\)�'/�Z�F���
->���\R��)a�7�$鉪W��e�GuA\��á�-j�K��3W�e
-��c�GrFC�}O&E �yL,
p
��]�����ؽʥ�� v&�����Dx�rT#x���VSE޾c���e��
�� ͡
�8�-^���Y�b�#j���€;s <x�`��_$b#��?f&�#D��!3����G�����+:�J�?V �%��$N����s�;*���y�V ����]�R=���Β�Q�w:���W�,��V&�����T,P���
>)���ח��
�A�GՓ�e�%�%�!ɦ�=�d�L)mL2p��-x�|�:~n��N��(�I5�O�o(:I�ڿ
l�sR{��g�B���~ 
�����r��M}IJ�"0m<0�:g_�r��<B�V ��O
-�wU�JGt��vٞ�K�wJ�q�8c`��oO^�% ��R0��zAs�B�����ГlE=uNӇ!k�I�
�:�wPu�#� N�K�gHM�����ǫ�M."���y��Ry�gwԶ�͆�� ����RM�
u?�ЎOJ����������&"��4Z�QZe��9N�x
�<�?D��5��柴��
�|���|�e�����K�3:� 1��8�CDY}.MV=�Ar�\�/������n�+���*� �V	75�jk�������
-PL��(�u�����L�Ek&/�,C�r�`<�#b�9���x���qT[�1A�sE)x�/9�
�1z��qqc_grְ����&�N@�ᤁ�������q�$�������8�`]�n��l
�(�0��J�.i�k*~oQMaw�
�aOj�>`eDn��Uj�䂖��g 
�+
�x�`I]%Z�ƾ;T!�$	�O�yvx��̞�Lsj��ט
\A��4e��
Ne�}D�S�3�w4���@��4$�鞷 iL���|K)J�%�$o��(�($��B~�h���(�vʎ��15:Y�t��	�����	�SP�Ex�ay����e@�h�|Q���:��
����vt1�=LR�"��
*iR���&_@��5��`����$�
-�G�g�OO��ߞc
����t��
8*��n L.8
�i��a��$f�p@�mA\�Z���������] S��4*�&��ں�)�`�x]����	�J�T��,G^]�^
'>D�t�N����j��sꊉ_�/����f� ��jm�Y���i����C&f�ט���(���8Wf�;Tx"N�L ���p�����'zGy��.=ۉ��^g��.E
�Z��������+&��W��3�,Yy�^T0�Z^ͬ��{����m*��
-����V�"�3�q����7���^��nu�6li�"~zZ?�N �:�L��&n��Lv��<�l��O��̇W�DK	njw�#YJ�Ь�I�0�7����ة��H��k-锂�$%��nJ�:DL�y4��C���gj2�����M|�. ��1c����^�a��������+V5���d�[B�q���DY&;���
(8��nN����i��32y��(�wM
Po�ޝ����H�0<��?���`�nw��+ӈ�ŭ(��Ni��&��g!JqF%W�9E���8�;vW*�<}��?�����K�y�e,{���Y/��]ÚB^��$mh�pϺ#U��,Z���ζ'M�Lx08��Bk���;.�!��w`��*D7��K7�K��ٮ��宆�G���
�e��t&�9�
t���:[oPҾ�3����P:����$��D�	�}4�qx8��eT��K97���=
��̘��hHB�9�u#�p�X(�/��g$d�6�(���P��	m� [...]
�ȍ�y'�
����r�bߩ������(�_ �j����z
u�3�<�21�o�����P
��`i�?}Q�0�
CJ�	%^pDa�A&��P�@��ct�
گ�4�
$��#"uԓ��B�g��P˃�B"��@��ˌ�F�Y�aƿ�����
��[\��`�B�2�[-Fh�W���>���3E���Y"�O�ho��	�u(�9L���Ak��E���"@��{Y"��^�D`{��v��9�:�i�����+Gdp�dB
��Xj�
-8x��m��$� ��f�w�Ÿ�kc��7h G���Ֆ IuL�+]���o︃�c���s��vWx�Ո��*n���k�H0�sd8�2��`�>k�<fW岁�E���%���h�Ο�SH͋�廘L�� >�����
N��Qxc9��k]��ήN-�ǰ��.�"��/�!H��ث;�3��$22|
��5eM�l2�U�m�F�f5YR@��JU.+�ي����Q�:��p݌
�*��L�a�FZ�+B�
�����
0F���@�A)>�sv��
-	��ȥ�����j��;�ʵWE_�K�㏈b��]۟zs�GA� K����k��;Po'��> 0=i�#|�>�=��k��b����m�e��<����� i/���
-��¢�Y��S�kVFbNVI��O%���|E�W�p/{_��O�j�Jw���Ӫ!��<	�^��Yp~i�8Hwx�%ݷ��J��b_�#�
-
�25P=RB�\*�Йrz��z�xv���nw]t��}�\�\ e�ʣ
���!hU_��^��p�9��r��D�

-
�q�d�+B�|(5��ۿ��5�9#�.	�<Co!"����Aߔg_օ"���9*	��'�5�[�UӴS��|�
J�NM��6US)
-��p �F��A��u�
�a2�ɳ��p���?ʅ��&�2;�A��T�Z�^�le;G�rTi �crY���o
�nݡ�f��8��3��2Z��d������9Ju��v�9�ی����G����L�)s�
%ʇ5]/ɹ3Ǹ��_'"O�V�GA
{OpqE�=��.�<0m�#L{q���
�#�Ib��� u	��dR��q	U:C ���>��;;uۡv��Qm2�-j��K�T/�E�����[aF����8~r��r�m�a���oW6Qލ������Xe�(�Z��=�;J *fC�~fͧG�أ�fL�ZGF8�hO��_gB
��Q߇U��1��\Oՙf���8�r����
��H�\���KoiƳ�����š�uL����0ܐ��^%��U��D��z^�
Fd�`"ش�%���1��$��2s`�H�>��U]�k��
̰�zn�tT
t��	�p?5u�9�}�Y���~�ęK`ml�yr���ԒDs
��W<��v�Ϝ�3����T�=
-f,(�,|��l�E
�C�/q%BLM�ޕ�ۇ$�]�C�^��c��h�k,Z������
���yg^F��Ur��
ި�;ABFY���7<�?p  �m��f�R�a>��x��(�DV�Dd��˱+/M�E>YCNu���B�>5���x��c�v��P{))@ۜBTJ��ܣ8�Һ��%y�G�/�k��
-�G
�����P�N�uǓ���
aMc����ۉ8�
-�����ѻ�[�z���D�A��+k�_�yd��(y�is�;�Q	��&�k&�-�@�˹>�[�  ʏ&w�P���)/�U/��?#rKF�̀ZGd�.h&Q$$�<����E/�yϥ��G�Į�W�3
--n��H�ԟ��ѕ�7
-zGW�D�/�8F��fd���gW���8G�3|o�U��LR�����b�z��C��F6צ�;�Ƭ�n�-rV�ň��M���{��~B���>��� Q&Ɏ��g�P�
���)������>ۯ��b'㰬(� [�N���R�Coz�d��'t.gC�|������x-�$ +`i>��}
o�5��[���zq)h�/�O�W��(�
cK��E�5}j����kkz��t�%����;d�;�-�����A���q��E�
g��n^2u
T�'� 
-O�(An�gs�"�ڌ-:���{/N1���\�
ѧ�Md
-}���K��Mx�1_pV�}~e)]Ij~
���Q�;�Z�(?6u�U
C�������*����5t���1yLZH�`��f��!(J�!Y4�D�48S_r�g�t>�E�t韗pNnոl0�
5�]��Wp2����D#U�4���w�|S�u��_�s�l��:w��
�%.�V�	U�R
��
�6Ҕ��6�x߅���.�n�����~	;�G�
��Ask�e�G���3���:G
:�����1�y�	/)z��n����
��%JM}χ���L����1��B٣��W�����Z�-
g�
���,�׎���_waC��Zh�Ì6�
v-��#���t�W�����\��펮l�AY�A��=����[�I�jx����p� ���:d�J6��

��s4Ye�.�}��S
1j��[�9?�T��n���oZjQc
��4�&�P
�i-�1y�ZI�?����(7�!�aJ1����
-���#�������é��G�V��R� ���2�ش�nun(� 
��'��4i%�"j�7�VN��\DZ]vA��UmU�J��D�ơS��m7�0�q.��,����8U[���w�h��O��Iۂz�_�ȹvɾ�ܘG�
H,�ۆ��7S��]�ȼ���/��W�e#L�YvI]CA?��� �6p�e/�,j���?���n�~x�8)�`%*p�8�w���<��
-7�i����jH%�G��b@�V\��{�s��A{a%{�_������g���S�����9#Z�*�`�����Q������#�K*�-��Ե 'Mf HI��}�<�H`$�+{��>闣�˗V͒e<��S�%D� J���),��}F�sMq���;�1�3������wМ>J�g׳�s\��E�:8쒦.�(�J����aǼ�ktD%�����W��
�����!	�W����dݞ�=�WYq��\�;�_�x��;�C^����Q �Bn
`�	�H�c3��H1��;���!I�(�yV9�%���w�1�*:/`���Gv!r\����Y��nC�^C�'$m����0�n@����
�bM�^�
�=
,�C�V�Ү�v���^^Q��@�Ҡ٨�(�WD
��YF�˂�ߒ�
W#V�	�����D�y�#/��%����:r�ٖ���TR�#4��&v���|��m��j_wF�̾���&p�~R�G��[ܳ'��W�)���x�h|�� [...]
-@�w]����6��5�N/E���l�����eo+-:ࠝ~å�#BY0�=Z�I9�G��I3�+U���;���L�����6��A�=\��ˠ������~�s
��s$g������wZQ{QEQ���B�Q{l�M�
^X���������BL���W$��]��?�1Nz�5�Z�	��D�$�T�4Gk_\�d-�`�}8`����I��R��l"�'��8ό�4�mR��
���À�W�n���Ot�o��4g �r���<�Ep>wI�~� o�w��ǟc�X�
��
-Qt8;� �O�Ǚ�8�~�G$x�

�|;fɼ>�}���>]�v;�Y¿_0�ʨ�"�?>�DRI�J��K
��
�ލW�1�HqW� �Y@��=.��΂pp���.�\�9�
yǁ�f�
YN�p��!�t�9tD��Q$D \�����iS¬}GC�8^����ޞ�]Ƙ;�I,5NQP��NÎn�@r�[# z��)��(�?������W������s���R�#(^��,w�8�Sv��
��8��U
��p3�J4
ܗ���HY`��YT��{�����e7)5��Ēf]D�{(�|&c�Ɛ��90U���&�clE]���G�*?��t����UU���f�j���6·��m��fa(o��q��s
-��,�Jꬥ�����5�04���|
g�{jM�l�z�t	�t83F	��;��r�V'@0j�Cz�2�
�&�:$�m� m���4g�D(uF�D���6�L_VFd��is��a�G���D��5��F��/T;W~��i��u��D��I������
~��{����U/B'��44JkcTԖϼ��>�ȑ%�<�JΤ���`
�*1�ψ�
�A
E������|�b2xCw�
ou�?1M
�*V)
>h���ޡ
�
-�x��g��p�(���kHdG@�� ��((���,�]�0��S��B�޷��QU
��"���*c*�{@�1�
-��ŀ����Vv�z�
gb�~'?
g�NR�>���Zz�?D�����{W>���0�)��"^�'~^*Ne䋡#4.�3%o�kx�NͶ�[s̷��2��#]e����9����<�

c�?{ y[`�
-�Rhf����\�^ͭ��v6��狌 !�yo	��lk�BA�ۡ?����H�5EU�
-�Win�8V��+(ҫ��4Ҹ���?E`�z)�{�%��H�EͲ`�������8iWY6�AwVȱ��3.�^ë$��8G���*�ۃ�"+h�RZ1Pԕg���輸тZ#�k����pK�o��<a����}i�L�J�|�A$r"=����sǒ
����ZGu�s���8+]���.
�4K�ʦ�۳Pd�L����W�$�vB�P��(����b�(��)�Ac0Gj�mZ�ߣZ�9�@�B��;�{w�Ge�
�@������v�r6�q6X��h�c�K7		�b��u��Z����b�`�[J�#���S�I�T�_q\9_ �@ AM? �_�~L��L�I
�0���� �Cz��LlB�'o���C�
.��k/��� ��0Dq�T�]�Q�� q�}�M����Է��,�
���(d�9ԋB�V)W�����N��C9��!>
�]��Z����a�t
�:�*��K
�A�Y'�
g�Vr�'\��J��R
��
��%Be��p��5��5�
���wM��T����/<؁���=����?�����_�w�����?}����?��?�߿������o���������������w�˿���������������������������������������������S�ŗ{�����������s����~P���*=�}��"�ĵ��,FR��m��\����(%?�;wh\#���
n
���Ō��J򮋒�="�USHF��!&pO��@uỆ�/�WKP�a���U
�Y�w�н8T����#�c�Δ�
����1��c`���G��R
�T
-*�:��?z
�q�FB�������ҙ�1<표`�H�t��t�јR�l(���t�>+�{ϧV��<��;m�ƫh�{w
ִ��M�6��FC{�:��g� T��wu^��b�ݐ�H�g΀�Z4�N�J�T�Z�|�#�l�G�_C�,]�΅qy��
��":#�@�	
-�����(���R!Q'�����:���g��������{�ӕ?
y�>[!��b}D=L@("X�F�
��3]'�x�.��o`���'x�Z
�1���(�DO4�e��7�
-��#uO$�L�:���;Gm��j]���-f�S�a8'�8?��~��;G�i�9���5��f
��;b��y�8"�w
��a)�p����������_=����^�1 "BE�v`{bB(�I�����t�i-ϑ��^?���s�ES+��^��h��W�Ag��~E��ũIn�_g�x ў���U��܁ 2E�y�fJF��
�*��
�
-�9���͈$ۑq��0Ь��L�a%|�#nغ�O�B�'x��-�
E�w�ݡ�g{�
ҝ��`F�Y�����-
��LNʷ ϳf�"4���~S��Mzլ��/��4��Z���!�����"�.:�;�71���X�a��$���o�PJ�O�$= {�z�
]t���i��
  
�6�:wSn���!�>��
-z����&��1��Tʝ��d��ZD���R��zu��n���x�t
->�s�=;-^Z1AN-��F@�&"B_O9�숽(�u&�%D�d޲�A�d;cC��a>˻������
�)!Ɗ�Nb at 0���pm�F��~:�n��C���f���g�W�I�r��h��J�����0��g^Fa�S�޷�����	�
���?N��d9��n��„\chO����c�Z
6Ϫ�O��Tm�P����2�AUu�
h��m�Ő]�Z�J�ͥ�$���Ǔ�&s-�B�&�
�
v}��^�]7{��G��@&X<�
u�'�h/n^N�
�d���)!��Q"���P)`�?N���%�O�uO��� �h
`k�ZB+
gI
�R��E��v7��N
-!���v��s��!:
>����t_��Ɨש�	|�Օ�5�u�.��=����Ό�H/�#^���nY����������{�
-*^T�3�-<V���n�çz�_��
��n�D{�
��C݇6�P��\�
:"DY�H&�*��Q����nHQ���-�KP�ǔ���:|Sd���3��Y/��#�wJ�?[�y�pG5N�R�x;�����W��5#-�Ș��
�S��4�%s�8� �V��)�dnVI
"��_�Q
-���5�{~��|�A��#n��o�|}�9�]�J�צ�$��"U�RG�W`��Hmy��=�f�A���)PZ���R���@�����~_�<�h0��+Rix�<����#,2Y�oZ��4���g�@�Ŝ� ;N�G{?�
�CH��Zmg�G7�g���gA��0�n譭%�T뒰꟧~�
3�9�+�qe�v�ϵ��W�2�{ժO�5���bnw��l�~=�f�
X
{�/���4z���R�r
@_�C�
s~  �
-4�BW^m�+��0��
}{
�@�Q�|F���8NP��#�,�P����
-�G�MC;8ZX�8��u�;����o��M1Ne�>�b�<.�,�L�<LKҵ�9P�� ��ފ����V4Dz+#	
^���tƢ
��&��4U�N��
6nD���Ŷ|s���=G�*�,��ko:�w8
Wo��2�,^FH){�b'o��vw�k�&�ǁ �`�"��:D<w�ԥ��=Ɩ�jL7.�q+��g=����L�.,u͔⧟�4JE@�W���Դ�	�@zs�Ϩ'
-� �W����+�b9�;�;m�����s����Z=��>s>?
�:��x� T��<���=p��	[�P�?D��c,G
�
(@������@<���x~�
-4�6N[d�W�؟
-6��Չ�
-��`?�< �X������\]�.%w�\zof�RO��
�[(	�����C3~'��C�1�
fV�9��'����J��?�����=�X��Гo5R�w�
���Hu3�'���
-
�o_Q�k���O��j�=d��V~2x=�p��u��j3���p�;�v�F�Cr�)>d�����t��s�[|�]�
�� A�]�z\�<��R�C0����
�th ԭ<Zi5=-���>�B��;HQ����l�?�
���d��p�G�x���o
��L�,B��F�⶟`�>w
-� ��h���F>�ޙ�[��C9
L�GS�
ѿ�,G9�œ�����N����Uj��$�}�`0~ǣ�����%S�����JT�oe�Z���$3���ڑ�q)>���i�
-�z��C��LDk��[S{ B�ERQ�<J�!�t�l��
$�ڭӭ�n��@p�ؔ�6xwE}����*6��#�ZK��ix�S�
۾�
��{Ӿ����Lw�+Ec���/�G;�"
-�[�2�����	�1�0��rɲ�P��e:|=�� ��Ӕ���
^�;��7��ٱfΏxN~����G�X_�T���߯�Of�t6|sI��aB[
SF�rFj�"�*���N��H0�d��H�x0f��"6,�ŗ	24![��P��"<ϸe >䠳���
e�dk)���2�0ad:
]c�	�oG���A=D[ޫ�
:�3R)O���/� >�,���Hh��="�O*����f��A�Ż�_��b[���vט�3�; �}��2J$-]A==�C�9��#*�"A���AF�C6� �/R\?��ox�
b�v�C
-;�T�P.*w�-�k�N��{�<ߣDS�B�Oո��V
��#�=�P'$�)Z��x���n
-=���p��	ht"glxN9��s�ӝA2>*�
9��nj��M�Z:\�z�a}!���1X⸍L0E�pjɆs
-@�k�jd��9�lZ\݉��ё��
5
-���=M����0!�4m���8��.�LM�
x;�YQ��i
������x�����E�l۪�Mh�v����&6�㏇~�d^-	z,��;#3�3�Q*0��]q�}��ƺtgiN*21��W"��N`����VS�å1Kh�/��d�qx��M���~���1be�8�F����(�p�B�'��m�g;�\4�{ӕ���Q<� 膜�龎� r����8<��m72
��1?�3u�)=
�����=�(K$$̛�^�ߔ6�3�#*=��`�Y=�?���-"���	
#���h�8��Q�جt����UN�/��xS�S�S���0�����+j�H�����8��'�:FƵ�
��3Ʉ��H
-�8
[��s�?�0
�g|ngp��s��
��G�5�H�����!-�)��yOv�N�E=�����fҲ��u��u'��PQ�3"�F�
J:Ck��`t��3��F�$)T�a.�=�n�
�
-����[Ԉ.���J*Lk�ޖ�ԌC
�P8�d�[�򱚬y�J�7Yۅ�g��ʟ8o�
gƯ
�����$�8�IS�!3�j�����W�њ��v�y�_��z���[i
M=��V�ӹ�A�eG|ɲ���
����M�c��0_]��#�e%�84�
�R��{1{�L�3}F�xNNL�`�HBI���:[ib`��~���^�
&���+GW��R��ײ��H�3PӉ2h�д*�����
9
3����y��^0���U�k�5O��X�Yk~c:�>+ M�@���;Exl�~
��;LB�2���U��i�
4��3/�E�>"~�?�P9��a��V�=���[?��{�w���b%��wM튱b���g��^�c��^�&�?2�د�X���
1�����u�p�'�
�sM����S��բ�$�;�U^

�
B�� ���<_��-����5�������b�m�y��C`M3��P�
�׈��W��#�)ȩ>�t��r�?�I�\���.�M�KE��xJ�^
endstream
endobj
326 0 obj
<</Length 65536>>stream
-�l�e�!f�#17�����Sr
��8G9���/�{D4)7�����Pq�nd���Y{:��eTȽm/��6�H�xz���x��;w�X�c�u�EL��'u�
�%���$�:�ӥ��H
���88`J

���>�1~׺�N'�o�
@��X����4p�+�i�.�g��m�}}�W*U�
xj�L�z�;�*

6��# �H�?���&���=��Sm�?I�3�h2�[
�a$f��q
lq
�@��G�>��+��{mE ��" |�qr��;Ҳ��L�6�^� ���*��4X%%M�H�L�k;
���wh�	�"`~F�.�d/T�Tx���T6�ʔ�9�u�%]�$a��gW;�T�\Z����j�] \�9�
�v�f2an��X���Ȇ@�U7)~�yf���)! ?	cm��H���]U2��sU3z�+z%bf�:��(l'WL�r
Q��g�Ea'
-���
�)#�\���]#Y����!A�a�{�S�1a��G��4܁�D�c G5�Eh�`�}O�-fF���a�
-y�E���� #���a�3a����

�5�=�%);)ts�5�ė����U(9��ؓ�d��w�c�SG�(��љ}��''�XƉ�mzƒ���©ǥT��.����WK���KYH�]U�J�w, �z(Q�ԇ�N���~>"8v��S��sz��G�B.#�?HC��*���ʶ��v���UĖ���/y��

�hܧ���?��:���5=!���Y�N��s�E��{v�����"X�y
o=P

���wj'F���S �=��/_�3
-�h:�],J|�I�#�dۣ"4}�w|�nfm��ׯ�~�Ļ�n�4�ĻÇ�q������j�)��X�����i�bv�|w���z#> �
T$�;��wNO����
����r7��aG_�[���]�3�^�X�ze�e�g�O
�b�j����#rk��m�Y3���w�U�����
�y����-��Єu
sַ]�m�&�󨉡���sm��>�3�����/\��DC�džj�qF������-�(�-�aJ
-\���,z
 �%ʋ��Y]p�<�����m/=۲$��’gf
-ɬ_ at Q^O ��2'%��z�@c�$E��3�
�k�2�(r
�B|
^@?�'�@�O�*Ԙ����e&���kW\��L��=��_�$�t}}<r DLgp��%?�r�L�Bd��E͕�'Ǻ_xSX��w���m�D[�
����
5g
��F>��!�Øl�ڜ��>�0KV���v��:���f�;�W�")�^��c�#�\ɒ
-��*���8�0��	�@7
�s�%�{*��
����-��1�
* ��3��߼Ⱦ#Η;?
�o_+	|�v|폣��"K��oF��:�[����˔ D�׵
�֯�7Q����VO�DE����DH��@���3��<0�n#LY5D}o��ݪݎ�bT��u�=�� �
�2%0�>��S�X>�t:W���[�1
-
͵ə�K�62n5Gс%�:gj��z���v"�lR~8�*PsJS�#H�\@���\��J���ii6��l�q
`?��8�gDj���dq����~�
-0�LZD ��E�2�$��2�8gK'A��|�d
������F�V�'p�Q(o��q�����ɒ�����pR�.y+��Q��J̍Q(--���#C'm���)��z��������*</�q
E��S����1	������5�֋��
u���N�@+�� 
����DvI��k��6
`�F
�������(�ko�y?t�x���asm0�n��ĥv�(% ���a��E�t�G3��_s�� ��t��n�ņ�11 Y�d0�
@k���s
[
M������v�U�R��3���y�D$f�<�Y��a���LJ<_+���"H����v���Mlq�1� 9�9�J^؟\���_3p����
-��'�Jˉ'm��u.s���/H�
��b>�Q[�'�ĝK�����}�X
3֏��r�A�GY틭��)�x��h/H�{�<���8�J`%wL4/�OeY6lMp�o�~Ԟ%�i�}p
-���C��o��
�
��{�x퇈�r�ߣ{��@+7��0�s
p�;`�/�x�5I���D�b}	�ʧ��;�
�
�~��r6RQ� 7a�
-�9\1��
¥�j5&Aw� ��FQA���t�]C��቞�
-7t��>�R'{˒���j�
���#���(F���"!
�	鎅%@�?��"J�k}�{�4+]����X�Vǜ�G�+�h������A8�W��#hDN�n=�.`�|�L��ه��
�~]�3�;z�욧�6kL=�|j�Ay�q�8{TM"
��F}~�c�ߋ���IDo��O7��AZ�F� �p��.Ds�SE�"*�d�!o�H/n��R�qCM�̉�m����c����eX^LK�%�x���F'��
�53��K��=c]�}+Fq��ȣB�d+oD��LU:��g;':��G?B�I���T��w������e���([5<��jZ��+���U�8"N���Q��P�B��()6
-S&;oCw�u�-��_�CWuBi#�)��I�V�hwoe�
���/�S��{��/㩭�nZ�^Pr�����;
��ҲׇN�J
�Ɗ��=-J`A�HcW��.��T  յP<�XO[�_�]Y�ҙ���?W
�T��{�L��T�
�7������Ì�oM�R��]�}w�6*b)�h��2�ro��^����9�0[/F:��)M�.n ��)+��\`�V m��Lް/�:WX��MZo��h\��N3Z�ә��@����������
����<A� �6��g
-Y�p��儤2?k:�caJ����x�*.?2������:%��N�o���a���oZ�d���z��5�x�5;5F�x_<x;����ᵿ
‡ G�a�
�����;1�Q���I�!*`�gA������ъC�ǡ�$�A����*���a�6�$
��������|�
��!��"��9���;쐘s�_'z"48���d?�YPf;D
v
����&�?n���a�]���^L62z����5(�Ю@����4�I i<���;3�/��R>��Lj�u
ƫ�,�xuo(�S����+��<��vg�d;��M�L�+�P�����Sw��E�|l
>���@�6b���t���uE`�0�i(�
�����y@W1v���������Җ �l�8��t0�a�E��ÁOP٢r"o&o�?z�
��!�}_�=ݸ��H�����8`���p�O��]9��u���eQ�ak&��P��~�q|Y�
'��[Cz#l���q�����g��?@��N02�$��C+��ax�K�C3�(��X�:�j�
��}?�_LJ�u!�b�ÿ�B\�\=��� �Z�3�!���@@X�U�y����
�-�W���}yј���=�a�wu��Vf�Vj�d�{ǟ�Q�ߩH��,���~T\BRs��2#�@R���}�"���qWf8�޻`�������HE����	Q
=�Z8���&�~1��m��1 
~>�����٢��=U�H�i(j���G�
䣀��:P9����)�H0��5m����L<���;�3�/��.
-ވ5�bdm�sS
*ȹ��RD�gT4��E	��q������RE#W
-����q��1zf���:U��B8���;G��-r~U�hr�|����o*�������ſ���T��'�P��"�j�#�x��La�tG�s��'g�����-Ū ;�)����D.��l�Ʀ|���m�`������Z
�)�c���
w�
z��1��UKh
���������_�G��
S�7Kp�
JT�:�OuI%�.�o�G\�X��
�D �9H�
����$
���� ��
���Li
5nm�
-�s�"7�q��P��KO���r^=lo�FH>���Bm�	����b�&��\8e��$��WU0
-���"zN~��_����f��=P똈FM$��T���7���Ɋ��i��c
��W������>����.�Q���
t�@�%6F��r Zd���
"�!Z���ND�6�m��(���˘9�y�~O-~Og�/1�(Rf
6������~1�a�Bt�*ڮc�aӾ�iO
-��%��Q�/�T�qn��1p�t6�^�]���
Wa�l3k�9�S ��w&d����Bu�k^�syvj�S�i��l�k���
�r
�2ھ�d� �K��
j�:b�y�D�
.���
��H
�.�!.o��<W�\�����5�������u
U����Щx�/��b���X� ��ЮowE8��8��$?)}9ݨ՝��k��<j���'J%������;�8����i�̎G���45��i��"O�(��:��[
-a�4
-a� D@\���닖X�䬣~I ����Q�ǫ��2@u/����p܅��,�P=f�|#f�;㸃C?l�����5#p<�=9j����u�ɴc_�s��>����Ɉ��4�^��o
W����1�c
IJ�6����1
Vq|0G
-4��u'��
�e�c�|��/�|�K
`�E��@�ՠ׎f�z��XY�	t*���ʰy�/4A�j�V��t9�cVRG���3��;
��5I�
�H.���9� ]��
2�_4{̦/-uc
Ԛ��Ǝ7u��Z�������&�
��
�&��w�Z�yy���#�R�V����^���#��~�K�Et
-͓!�^�Z�(��䂌�]h����8kFԊ�A��W�J��.�ϧ��T]x>��N�D�%mբ�y����Z� �K?�0
>�1��J��^��ŗ�t3~Q�/.�
�ؤ
��+��9
�{� � z1&�����Y� V`�;$״���'&�ɟ�`�(�\�#��
EpH�O�Y,
-��*[�Hf���WtC�G����(1��ph�\7�_碏����K��&����($ҊNM�n�\
��9o��@��|eB��=�ܯ�Q~�
��g����l��
%~A>(Ms���Ub��xW����EG\�3��� 
�`�3�A��c#!:�JZ�\��k�eBu�\YO3�q�Ta�%��N`ۂ�8QdyT�
c#���Z)J�0�����|
����h���W�"�<AwD`Q�~�2	�d .d�:�
]��u
���UQSu�������"��u

)��,�
�D���Dz}�����"&����]v:ov�u�DN�i�
�tB�9x_v=O����r
��h������4mb�
3I-�Q6���d��;
&!��C�������
�+�}G �8-<q\UcW�CV�SL�}	T
�
?#�
i���Y�����J���ƣ�
���@�{d?G�Ȳ�-�2��Jx��>��)�o���Tk
��;;oL���wf�R�xtڟTD�qU+l�(��r0˿C/W�Tl�Q�:�8�-���-!v.���"J�ë
vVce�	D��HײE�2�I�Կ
m���&���ޑ���=�(�
g��w"ɪI��p�
x;/$g��G�E�Y�Mc(�D�
e�
	�d���
-��u��4���M�d�{�v�=�Man��@��
-��<M}�Li}</�~^l1�	Kҏ ��c鲓#�|��+΄�GE�����Ҕ*.�y�b�mTi�e��rՉ�׬qv�D�U/2�5m�
n
hB}�f��#:m��(=qásŌ��O[>��I�)�0���	
t�ܒW�hߗ��$�V:yں���t!�cRҟ��&:7�G�* )u��j|KV����f�A���Xe��7�!�q
��+�
,�,{1�瞨�\����?�6�
�ϱK�|����
��|�?�I3v�\1e>��B�/A�m��!�SR�׾E��)�'`�:W�w�4
:9̈� k�

 ^I�Q{��篺��c_2����t+�!ŝ�H��g.�Ձ���÷�k)�~Y����۠q.֣u����t
�t����笭E�*�ڡ�j
�^5�V�a&�×;�Tr�N�Z�����5�Qnb?�#κ.(g)�K�Q.~HQ;��%jL���G	�ٲ
�����h��FD��fٙ��L��g���L����6��]�&�}686]�^?�v��z놺�U�.����~��;	�Σhv�ȋ>V($0v?�gǀ��d��E���!M
�}�W{��L�⪱oM\p��d��:Ծ�~�1��	����N"�#�M;�����_Z�GMT��f�@L��&
7I�ȑl�'�����?��\��d֕���z�g�^�Y�)�z�
�o0�B��>W�n���q3C�V��Y9�
a8"r�S&�_'rM&�L�g�A��N��������y��4�ծ��]�H���F
?\�Ư�u[�2�K�j���;!�XA����mQT���:E6)Lڼ�^�k�C���7�4
|2�s!>UĦ����q���X��.aEA�?CU�:�^fe#
�UYR��
�߿�1'�j�S�	��Re�AA����MU�g���t��q$�U�J���PM<p2&LJ}VJ�������ݹ�O�zlЋ�yBQ��w���f���R"�'t^�j|07�
d�`���_��U����]���m��������N��ES/���n��j����}�c��ͩ�����5-���w�<o�w�בn��2ڟ@��4��Uz�
���p�����r��i��C0�d���hI�r��	���?دի%��l1����Ø�:�[�W="7���L���/�cߎZ�����6b�4�Q�ϊ��B���SD
ϯ3�{��`nIԭ���'T�7���q����ܧc��� 2f���O�˲#��F=�������GU���Q���������G��i��
f5�|8٬��*O����v8�-~k���
:(*1��aO՚�6"
-&+��ۍ
-��}��~{�ތ
-����)�?��`2A�Gv�;�V �"� ���:�y�vĮ�Ζ�
-�K�����w��⟰�@��Y��I�4�}O�
`��|��]f�^F�,��h�>�IWa|ƮO�75�mNt�w
-o	4pcdG��*��
��+�ɿ
zE��WJ<�7��@�W�.���/qC���.7fd���5�i�-`��U
a�/$���G�;H�=�4���
J�S�
����Ss���˳w]^�A#����,�
�t�}�+n�E�:�om�e
�
cCF��l�}�O
sW���^Y<�6EZ�%� ��ѽك-1�f(�?�$��rh �Ş28*8���-dv���o�\���X-���w��?����P�-�b�����q��
m5�+WYA�߾o��q��7���w���'H�
��`�� چ|1��=Ff�[��
-�����"�@����u�^�D�
�t�ɉ�
�a �6�f�
-�Y��3������
/J��ciY��+\;����e�32ec�w�~
Y�^�* �"�xb�-��	&蘿&À˜%jD��
\�W�
-��t�\�R��������g
-�s�>�v���A�����FٻV1�/�2��;�K�26��k�Ρ(F���Aq���)��}Ča�ď�|g8
����z�8��|o

e��bB��e�
�HX�E p�{�ԟ}����DG~�n��z
�g�[�s���1&/��$��4FC�S�����5����%�0B��dG��;�U8���-4���
-A_\g����ELp��|�&	��݋�}ǻ#��3
ҳt �E�� !��<u"$X�������<�+�H��;�<��>��||�ZI�r3�7��z����mvi�����#/��Lv
ue�z#d=���8��"&fpC0a�j6��Co�z® �.2S*�i�y�VH?T��2~��8u2:��" ��:5
�?�
\�b�Ic�v���w�k
;�l�,)Xyz(ҁ�T��!N9� P�d��z3�m�>n�q�i�
����;���%q��W���$F�J�U	�q(W�kOg���f�.
-���|��ґ:�v�Z�wD��"k�Mj���"[=6�l��g�ի
1
�۞�*T2bTG�q]�� t�����B��??=iz�z�YuS�r⥾ā�IK@}#s���u���.%�a��0K�ǟ�F�H�^��w%gU�'ov����9

�|�̝>
�G��I6��ғ�MDO�uV�n�Af}>33^
I6�"M0�z�\�.����V�[O6<�g�]���"/5@"u��<�"�%B
ل�hn��� �ޭ/��Y��W��1ѝ1� ��I� �p�8��L�A-��p 7���I���"n�hXST�uH�UsEO�O��@�Rq�^�v/��*�Oa���0�B�B��{c|�5D�`
-����{w����N�J%�3TF��^��ƣ릛 �CnԿ�
-(~Lo��m���B���," {8��[��!�ފi͙��
�\l�x�:M �_z�
��^Ӗ*5\LhT]�ʌ�'K���諺�� E�䋴�TT���F���~�r��9hG�dW��v�2_�R
���f
�,��-Z0��)5���יD}�3Œ�Iwq�r�fb��{u@��B����<6 E�t�Y�S=o�i�x�~�4� ��\�-A
GJ�Q��8����.e2�i����y~Y�7��Z/��4%LJ��
-�B�/a�'y0P��V�XF�m?��{S�{޿��
�=�/Y
��֝��`kĂ+���-e�y���
�Z
؅eR�ɍ�1�[���B�-��0)"o��<o
p=)/@}��4��^�h$�Ƿy��}��iKلtD���aӣ�
�'��
4�JDH�;]{��Ɇ�28�GTD���A|k���]!C
؈;��M���͗��L
ްN�n��"Fd������ݲH��KmA�)ӂ+���X_@ǝg\(���
��
Y at jPY(V�&Z�Z[����
�6��3�bcU��U	�����6懼|����&���lG(D���ϟj�5�(4��a&j߽��W�ِc$w�сiK_�^���_�;��+f�
4|�4��ޫxG�ž
-���A[�g�ߠd
-�eJ���{~G�
���֝�] 
�H
-�5��G'������x��
��՞7��/�"�}�ŋrdS��F���V
��?*
��z�
��
�g�\�D���>�2�����mǢ�����t���d�
-a%��+*C��`��J
!�������e���=' '�9Az���㈈F/�?݊N<0��`L@���wU�J5<��w��'B[��Ӊ X�)
-����g�o�����"ɸxU������A��S��s�4�o�s��d����a�w��M��R���P=��;^�6�[On��f
Q�2Qn+N6j��Y��%��
wȸQ�r�{
��l�����^�m�s\�f�{!1�1A�I(��o9N�,
V��_���k����?i?�/<����?�����o T�k�����ث��Y��ž
�B�ߢ��߱)#�XŇ\
�c�)~ ҾE�>W-�{
Ģ.��I
��|dI0R��*
�}Q��#���3�+|�`�n+y0���:��NJ�<NB͔���J���;ӌ��΁c
9Ff�g|����c������^�
�V�<���
g�8i�G`�n3��mZ�OSѕ9cCzFY�ƭ
-�L�@�ִ�.շk�`p ������m����~R,
-��
��&
q�Ia$����{K!1Ґr%�$�H�9-_�G����Vj����by�Pj!�	�<$��w�<;��,>
�_�
,
^��O� �X$\t�

��~&++d�D�C�:����]_�G.�(˂c���O�\s��}2��}�v��*�#W	m,|�M��
�]���Ϻ�
-f��'
�xP�
��k�Uڛ����%l��3�l�%)g�
�������z���RI����g k $x�d�#���� ���
䌆�_��ӹ=S���9��dg_��=A�\�u��+�n@�! 
�p�e�6!-�_:
z�+��Z|~��  qD
tz
-r�[u�'
��q#"��M\FP���w&"��	w������k.,K�.�����
�r(qJL�ߌ��i���q��g�D�n�җ}�V��q���r>M��}���r��
]����Ҁg1؅�#9�g`�
��q��3�8O�\Ls"zE�e�:}|6 \��_a�x��0
�@��ψՏ�૾7����st�JF>���e8�
�E]���?�+��= �3�g�ν�7^�n�� �*�;[����B����1K㪴!.:�F\̽�|�R~)|��|��}�i��M��y��i�vy/�]�9�$"
-��
-%�z�k_"��At���{=��q7�B�v_}@����+���˼��aSא(��3��ɍ������C�{��u�
�e_R�g:�j�8R('@��P!����|�U4e������#�َ:
�Ca�r
O	9dNJ�#��*&���?�p��_F��`���B��m VSkh&4+
�O�"#%��,��Q�u�y��KZ.9��gP@�^S@�U�B%�4o�KE�V1Kr�5���	�Gu�V�M�ᚷ��#���(�����&B��	��ű�#��
%Wۨ#��
-j�,��5��x$8-���z�Ĭ��5=�`�����
s䩯sPE�y�
m��'h.�`�h�����	��f:�[h���4�wwd3
��a�rG�\+��}����l��oiWj�]1B-k$fP_�	kn�G��3C�85E�������9;_�[�X��.�R�Q<Ԡ�vu{!�-�*�Ȋ��J#�f ��g����c!!�
h�Bȭptga
���U�/�н&�;23�K�n�t�:�
-���������_�%�Y��-�;#��D���&�!����߱h�����j�]��
>�	�p�f:�9�����4��O�1]
X�O��u�]��Ί1�Yz���O@�:��N�r�N��& �4�t�<��
s�@�F/��s����
�ji1�5m����à
�*��3d�`�N���*���l�����0�����&����
Y��n�V�)s�8J����ùe�E
^zڻD��Ѿ��g�
-�.�23�W����N���8C�
�q4â�	��S�
�A�����Y��@!d
-�
�8�k�:�l�H�v��M:'�l�x<6���a�S}�v\
�jʁʢ)�
-�tm��Cܕi�د~�\D��S0.�D�#�xzt�Đa�x�@���e�<Mq�l�� W9?#�\�g��9�e�<NA0��w�
�b>���?�z�����qP��#
-�3����K����0W��a\�0/S"�wm�Qt�ˁ
e�{�]C�ד���_��������T�d�:#rU(�+�
-�q!��N}��=���L�:�LO������4�@p�Ӂć7��G���VO�Eu�Ʌ
�P�2���t�l��=|>��?"�qz�����(�s�:}�\�i\˳�]�����ݏ��>�=rY]7��u���`
l]���
:��� �-}d�_"�Q��A4iB������
y�h���i���*�k~���a��輀#��t�[�D�P���i@%=3��hYˠoUD���
9�FqY�߀�����3�*���ܾ�6�#5u�F-��VrW� �V:��D��(m��:#SeTp��eGCG�vYx	eu����۝?�W^�[p��9Ly6�����VH���u-E�U�_�}���E
��
~�do\j&�O<f���U�]K���M�][�[����x�5���b�P";������!<��V��wP��$C��
-G������D^�l����m�`ڦ���hA��.��
�ZWAX
;C�Yq�U�ut�Gi�F�bW��
?��<�z8�ݝ&vy
-ە�W�`�œI�Y�4D���R
ѐ믪�&ȧ���F&����Zu�u�S7��#���Wx5���s�
�`ɿ�V��(+�4ܯ$ꖡwq[�ܥ�>Ц�S�"P��-��k��rA���f

-����l���Pj�pf�掄��H-��4':׫����n�%De�R�����ߩ,#<�A�l�
-d�׊�|gH�it��	V'Qg}�,[����Pc��6Z;k����W�L#�=C��������v:��ms|?���L�y�r���xe?аJ:2�e��*j�E#��x
�\�*E�eP�����<��Az��t�{����ppؼ��DN
-al
���o��<K~�⨥]�Yv9��e��������8)��䠥�<=~�(${�r؄Aa~���
-~
�Jf*��1KƱ�E�G���*�y��޵�ۇ"�e3У�cR��8Tb�\N�x:vM�
�:�OM�=o�Qo�F՛�}�<Ŭ*�%*t
�g^���5p��T`<��f�P�2����A���\u#�����M�B�Lf�i����}D�O��>g_��Sl	9�Q+�+�F$^��ǂc���Ծ"�[�,��D�'�>'�9�8���
�$S���a�Ը��a���
����ͨX����P
yG�re%����L\}�����g
-��B���@_K���Rќ��z�*��	�>��K
� ��B���""'Xq
ۇ_��D�����?!� ����f$��B�?#� rɼ�^�Q �z%zĤ4+���V�e?���ϝ��3��t>#<\(�`"թ�8��eI�v��2�o~����v�P!��3}�:
��[���,�t��nVK�
)��#��(]��-�}Cc䆪���p��D�����
C�2��������l��Oh�(޻�DSl�B�~����)m���}3	����D퇈\�ֹz�}
���H{�Y��{���e�TS��w�������b��˅�T��m o��x�.����#}�?q���nj����
q�( _��
j��8"���L)C.����Ѹ9S��.��WiqD��|��)�0��K��^1 ���F�p���CС��s
�2⬈��JT�i�N[��hC�K�ԥD��_m/����GD
��~�5Rp�g�&��@�J��XTz�%h��K
�L�A.Wwv�%�9����o��ȨdD
||����P�(

�"^A�K '�W3�(P
d2�b���ҫ�3��\U�d_��۫��M�+–�N
ڛgHˤ�YF;c0y9������B�-���.6�T����9!DGk���G���3�����'X��Ov<�b��	��/ב�ZIq����"_&R���3Ewu�2��aL/�-��O�
�_��k��СЂd�ڞŗd�?�`ԟx�S�|����]������/-F�L9K��r�U�3��=�{J\R&���R�ga��G�va����x?c�h�TÌ��0g+drK�������D?t!�?֓����cJ�R�1挒N���w.���x����:�5�l�"��g}D�cu�\�?��_i� ��:o탚/^�]?`G�S
�)
]�5^_%�zE��
�yGu�
��k�{�S�"�
-9�o�u�r�N}�v��Cw����9�q����yhsK[���wf��
�%BWa�6�/�&��
����|^��慸x��`*���H	68q��CkD������~��
-~3�|�"��&\��=����ͪk���S����{���Q�o�P��+�ஃ.��0V�p65;j�
-�
A�S�	��2�a �n�/�
ו�@L���'�SZ������Z�+�`�(cW�(���ɽ��t
����%䩅*����x:��vL�lC`&^�ΫG룮�p�9%��Sb�p�аh�J�����秈�E�
#���F5Gl
�R���襶�Er�3��@Wp���g������.�� 
�?�R^�4|rw��jH��d���=S1ҤW�
1�nE1aS"+��@e
�����k��[&��,�Q��5�-�;P�6e�`W ���^�m9��H�xu�����h��@3�;�1n�}�9zI{#}�C�.e|
�����acc�|�(�1yA딯�oއ��r�f<�Q� 1^�
�}j��E��Q
-��	3�\��;�,�
�:/�$�#�W�a�_|o�aǥi7_ɎP}�=��gT-gZ�U+ޜ�&7g��U�
-+��f};\��\g����U���H�ٗ�R_��%p/�C+M�?�m�뀔�Y�m�4� "dt�OK7�x��Ʒǁ�j���D�n��z=4��T���M}����G���I��z}�
�D��8���
�	Q7E�G����q_����y���4�7p��N���J�g_۴�*뒰�?xm�u<���+u���ZoFv���'���}p�+թ��=B+D������a��*����Z�4�J�J[���e�?)N��=r;�iS(`���4��
9�m֟~�֓��o<|�p�&��F
��®Bn�ZuOĩ��84�lv�s�����2'k�����̪��ŪR?h�u
����S\�o�����\��$�?�y���\S�e,S���c��}�����1ߣDݳ`,�G����Ө9fs�R��["�^�^L
.B^��x���
�O"�U5�� �Z��N=3��,)*R���>�e�D"�*
K?z�AU���4����y�[����\Ne'Q+b��Q�tKA�(��d��g�/�F�^�������x���/z�{-Ɩ�����(/��-��{�n
���c�Q�E�`HequG������:�]��Nz�b��y4��#`#
4� |����
�\*ãD�l���p�����:Uc�q]9��V-�>!�q
]�F�PZ���k�*l��`�Mt����Ӣ.� ��ψ�"W�6E��� �C�Q����9�����$�~��s�� |���f�H���{��/
:E�U�(
-�����{��"������80Y���9ma�	*D>r��9tn�՞�W{߳:�P+�啌_H517jhy�y����g�q�R��#Ft��I���42�i5+#JN��w����B�!}oo
G�w����
\��Ǵ��z�=u&�i{�W7c�s�<��fx~~���^�7���.1�&���_���:]j���D
4��}$7��wF�*5G<C�?
�(XJ��\��^ ������q%u��XE'Ŝ�Ÿ����
-�Ty���C
-�H,4�]�jL7kP�xI�,�:��x��|LX��#�*�0�zj�{ŋ
-$L��x	Z���0E&��aݛC�_�׭�p�UZH���0��[��?��g��~o�G�]e�EǬҙ�7�V����^�z��	�
uj��v!0ߒ��Ha �����kwmK.�� =W}�B�ؘx���Ѵ��*�`�b�/��\�G!�>[�|� �Y�t������)� ��P_?<�xbϭA[�L��Z��m��;W�����"�p�eM<�G h+EGU
�‘�e�,G ����X�pԐ������`��3"�k^v��~:N/�!M
}
z R$�
�(��Bo<�us!��2#}��^Q�6�b����}���汃QߝN8{=7�4y
������\8�������zFu#d���κ�ߟԤX��*R���X�b�Ӯ_UQ8��/!C�
V�T^X��
�œ��uV��U೯Ͻ5�����T�0(1��l��;�Dԉ ��P��=��~�ߟeU0cU�^��Ҿ�?��s�`˘����9�F�]�������@������ʲ
��W����

�f
�� ��7�="JX� �|������n� @��WEWUWgeFF�?^�ì�@���2.^ s�
-i�������%MUtMs��
C4k$����Q�@.��	�B��80u��;
RP-wiG{#0]�꾲 ���{~���� rt����y(u˗&!Vx��[�q �A{؏��8�=���<��&�k��� ��Sfq�Y��A���a��a
S�ВI����S�
9���G��-��
1?ʵ��V�i��_�'����̓%���/)������c|�տ�����_,������������_�����������������������������������������E�י������{0�
�?+n����R¿I�*VL��c
�_�~P]4��k��y��AF�LDX����|r8B�¨]�/���bHgbQÖ�A�Y(k:�
V�Q��ǘ������8О8��}9\&?�N#�
.`�n�I��Rm�se5�< j7Xʇ�匳�2p���¸���5)��T��BTC���rO���=3�
��h$���I�(,�;������l��N
�1;rᣖ
�D+He�U��X�/��J9�����(bD� J;�������,o�
5�N|j���L�I"�޴09��K@��rq0��q��A��B="�3&���n�jK�\��u��d
"/��_��%��N|ث�	��lC��I�}U���>k��Ϗ%� >��;�
lQ�eǖ\��y�
F�����t���@`����Xo귍��5�[jT�m�
����j�ݯ�f�
�jw��OգLꛥ
�'tT��6vP���O�Ȧ
`}���ZOU���w�
���x�q�$�X�C,Bc�=��� Jw�.��{��<��ܲ�9F��LMH? tc��W���_�W��T����(L��XVlU�R+O5}
)��+�;]�x)��~:z��
h���ʲsl��I�������}Ef���ά×^��gΠб
�~&&�q�M{&���-�
c�}���� C��ԇ��X����"`!,;�	�B�(h��#o(��~Pc�� 6�)�=��H4���u(C����	\+�oB��)n/A��悰
c-€>��
�
��!���i�R7�cIX]�>/�73	f�
.?���~c�B�N�1:q9�B!=��Rh���;	�x�98ī�3�r��;�J at I4�
w
-́.!ooo����^P�Cx{
ab�؛�z{F<�\�
U��(
��ZGJ%C�\	�����)߿�#���*r�ޤ9A��`cDP�&��'"�6P��:�q%x�<�
�<y=��f�2�N��P�87%�����������K��Ff��U�8o���c����V
�5���ڠ
�
�=�S�ڝ�-C=�#_��g��x��\f�a�ס�O����������p�bUg�QTq|]�
1���d_x"�mCDA���J
���Vh�@;� _�:�m0#΅,a�x�z���8݄��~”Ղ�ھ�d���O�?�7�*�ݱ����Ԗ�4 at P��������B��~�q�
���[��_����gY
��̅ �0x����Y|����
VWsd��D�^�f�<��������
f�ݫ�r���JtK��:͟�ܱm��C#�8�#��f��آp��ŝ�d�G@wZz��*Rݓoz��+���� �-�
�ngF
����i���Y�


�4�ZB|ȍ;wQb�߿�@<����i���~�
p�Fx�v�~Mهd��~����
�歱��]�^�)$���XW*5$|q:0�=�q�S���V��3��xj���p._O���q4���8@a���9�=X*�:�)

k���S���6�R���b�s���ڪ�Y��
 @�q ���^�
-��
��(:>��@V+3$-���,ꘇ����m�����|(D��J�+����Xm�~��3��	
%��*
ꫡH~e�h˳UŵdE��
-�,�[�CP�|�v|�x�s�yڄ����u@�*�5&O�:��Li���ZxsRĉ�}j:nM]�?
�U
?���v���ƻHh�����;����B�=(���P��/�;2��H at n��~=d�9��*F:
 �1�V�mD���{0���P�|���wy��.

~���e�b
Ur�;DI}�0��H�^��$��QGW�Rf�UUOzL��1�o�Z畊��;,F��m�;�=U��@�O ��K'�
Ւ¾8�
�:O��;⋂�bU�%�
-��F���`[��T���l=�/��4�1Ӥ6i�E��F���
�1f
��gM���y��
�!�a ��\�
i�_\ �X�
�/�
-�M_���o�r���#�XC-w��|���j}3aM�XH�n�Jl�z��I�S�~(�h��|%����������&c�4���G,�W�Z~	�f�(2�LF�3�� /���*hШ-n\g�����[�2"�%B~�����Β��m^3I��m�՟�
-�I���"�s\	+
� F7(���o9
ews
d�w���J�I,y��
��t��`?���b�t
��z�1yA��j�1��.ڽ�
-��j��^GO���%�F���~�у�N�3�kR���K��]�����7�8� +X/Ӄ����tf��Q��:JEu9��ĺE�柳��i�4��[�e��?Ξ�{���K9)�
�R)��
��դ���D���5N�]0R�i��j�����z����1�bqqq:G�`3A���b~���6_?į���d39��`��3HU�UE5=+��*�����4��h0�Zv��~�I���"L*4��
����ܚ�����ñU�0�K*��-8[\4�ܼ4.��A\l���&����d�{D�
��T�q9��(~��9U�
v���ئ�2?D|�y����(%O�'u*E��R�E�!��)�R]b
Y:�&6Zt���Fh������~���'P1
��Z���bi���[ -}��0���{�x	�'��ȶ�0�g
�|��W
-#i*$EHa1��{�
m�m�
mp�>�f)
���x��=ʜ����dN�nD�7�h�$DT!�����F$%�3���=�E�Av�KÔADKG���>("P��B{�b��F��h�vOS��\lB�7z��v*Q�B�-�
{�iT
���RUM��%&��b�S)�x{�����=M����ƨ�����v<
0�7۶� ��U@��R�+B[��Ha��b���-�(c��bڍ���_��G���|?
�j�
f��KX�΁�!l%�f��qs
�#>��3$� q~��(�/�=�������N�����x�3e�����������|�tWpb�0���M��gv>EFU���=*
������q�
{�颢 zdK�Dd���="�SFנ2����yHF��\
�����ȄG��+�aH7���p�>��p�
�0�p]
��S��L��B��yoW-~��霃� ����1��_T�cL�K�f������!=nѪ!��·���3H#A���(�Ws�����$s��
-
�
��"_� 2�㦆2XS��"�h<5�H�>�㝡����ѩ�
��_GD�P#y�
����o
�
HH����Y�q�:�2�0�t%0����t�_:0��g�
�������oj:��eD(����r+!��d�U
�����Du��yjL�Ԟ��Yx����Ȃ`lY�G�i���Ka��
�a��~���*?8.�q\1	3-�yp�Jq�,l}>D 	�ΰ�;��J�Q9
亸�؄�B�i����,
H
ͭ���k��
|2�`��Z�G5��rC�-�V�s��ϳ���G�pOe;!�,�Q��+�ɏC�b	�SZ:H���h^�ը
��
x�{����I�G���s��R˶U�v����N�a���"��'.ۧ�O��[�2�(	\�2<�@�>7�s����%���X�7۱��V����-�
��(s�m�����?2^X��i�}Bw���L4$$In�X����c�l:�㋀�
(��h���= �E�,�F��/+��:`+S+��
�P����9Q-��t57@��@F���g 5�S'�o�w�ME(��`+_���Y {
h� ��l
-xOWC��-z�>>�����VQ�� 
8�$R�R(����
!� ��ߝ�B��"R��W���{�ǻ��s�W�Kv:{�����px,�
���^B[�����6/�
�X�2�b�J�߇�=�pq`(\�
O}ו$
�����`����S�9D����'��J�e�t�\غ: 
Z
x$���.���` ӷ�s$�=�V}=�/`���1
��E����UA�	
	7ʐ	����ˏ+��R��upRx��0!|�%�Wlψj:K4Z2�h��~�NoE�(�ҨC��������&v	0�eB�  JNL��P{	��ʈЅH��fܔ��=�eo���
-�p�b[�v����CI�S���²���E�/N�
6��gG ���R�is/������5���E �'�AG�G)���=I*��{ހ�3�
����+<�s��|��2��Q�)��SБ� �Ĥ��������
����,.���h�Ǫ vթ�
-��٢��^u2�w�p|=�B�И:[�l����!�Ǡ�Hy<q��Z�/dY�	ؿ�Hه◦�r߅�UQ��'0���|��"9��#O��t�V ��_
 }�8����)
-��'�#*�V9~Q�9�N����ڀ�ņ� }3��*�p��#�_�߅� TS��y��T�&y��$���q�ߕ�~���QX�����8Y�n�}D����ƙ}0�Ԡ������m!b�t����<�3����BX�I�����0N�D��(Zp˫؂}�%�cZ<�l��Q�&F�q�Ь��9kf����o��?��
(�^42؉��aB;���!=���S�xct��;�uĬq�~�4D� �(�ڸ
��A�)�\-b��-�~� �2�PF�t=��ے��/��(�\��h@�
�6��f8B�ڔ�vԐl�gg���Yb l
s��
������<0K�-~��9��BZ� �"
��g����Q��C�
w��s�3n�92��률N	�1�J�~{ Lv)pe�?
Ha�.�' �'�t�QC:$h
`M�+�'�>@(������\���bX�\YH��^�J|P��
��c��D�K�r;�h"y���u�{~�#��'��R���?�PO+�QM�(��᭳�Z|��?����K�p�lm��Ê�ߏ+��J{�	��g�͜�x������VvG���JlJ!��Q'b�/i47����E:������.�WI75���0蘺z�"�
-�Ԧr��[(_5�L��S�T
=p|O!ɶ�4Y�9���~�'�*��JP�zp�Tʫ
�3��{.~
����ϟr�ف��
I}0����~��L~�I���[�k�h�@�����[��O�M
-�l�u������Z<��fK5=�h���H�
2�B���Q��
- Q�/1�s4�8�\�
�A��gMS�<m'%}��|nx����vŤK���L+X�i2Q��9��3����L��g��� ~��v�����aY��'�F`|S����$�{� ��ca䷻n|�R0DgB�����JfFϺ¥+�K�~��
��~�%�i�\��V� M�
E�* 8����\�i��y`яn��Czޡ0?�Z`,�k�Zp���E<�+Li�h���>C0`�l �d��������:��
B
ʹ������#�eg��Lܯ� �!������
���<'o������B�Ї��	�G���5�d8�n��6��=���.?B�{����$���I~�q
Myf�O���t��xks�>ˌ�#�!eU�r#׋B_X��_
@|�^�]��_p�M�j���,z.	
��g�ߨ Ɍ�vېJ7bk�
�9�̱����d����v�o�R{��)�._��_�.�*(�:���@
��VF'�
�)IJt5[_k4�M�e������ꂽ��i��Ϧ��4>��� �мHb��k�?��.Ŀ����GT�GaG,Z��l��LG�Q��w(�D�9l��C���P �Y�������JQt��|t��?��N��{P!��
-��
%��IA
�f�)
�&x�
�
��)��
���-����������A��S%��+�ua,C�
�?��{����Hk�
 S\�Dڈ�־ܘ�QO�H-���<:�c�gC������#զ�I���l߂Z(��b�Ry�),
�m�`�Z�
¦���Vis

d< k�[��G�1Q}Z6�hx���+�E�V՟�o]��D�w�a�e�Kra}t��
	��tO�6�x�?�(a
r�Q�	7)�OԷ�)���8�זQ����UQreo)~�#����d1����h��
�^�3���,vd����t��B�a�&;�.؂��f:X8�ܺ��3O��k�a���d[�'c1�m?�(�a�A2��*�s���h�W��AT-G
0MhfS�	�TT
�1�3
i�
�CQ!����}P�8�v�He^�ۥ��
�[�'�v
>��b(}4aAH���I.�YΪ;�����'8�X:$ #�1.ޮ	6
s����B�=� F;��c�V)2�wm��
}?y�e����kTA��P�a�!(c~,�z�%��j
6�c���U����P
QV�M��
-XMX�װ\���VMq �?��7�1
-i
���a�#%�Ϫ�tM�
"���8�O�WtW	k3��\�&1B*qtR9O��
%�<k>�->�'e� #=�6�W���8b%2�9�m��l\d����
g:|4�|a�6B~ch_��p���V��xZD��ըz*5�7ib5�.��Z�����LI}PB
�a
E�_�ͣ �K�@_b
�ҵ@�;��@�����L���W�Z+�8���������RC
p!����9�L#(_�?�0��
�@O���=�U_���,�������j\�]�P���
-��$�a^�d�#t��++`|�����b6}1}SI	D��
-K<�"��J����O�
T���`��,>eKG0ў�� �p�
�1`CȢ�-����
�v�?�KV���A�<M����j>b����,T�w*
-�+ы�Jr�+�li`�;�1
-f	�E��l?`¡�t

�:�AV3
F��jjy�N(ؑ�N���{�P�I��3�>��!�uP��qJ<��3�����ҺOi+�t){ۋ��d	/afV��I`�j�M��+
�8#0�""4���|�U�&�M����o=®��e�v���uؐ�퇱�s+��f���}��.�K::
����l�r���C5�xW�uI*�?4�xi:NRN
E�ub��*"	�䣤��� �0)��9R�ϱZV�Ւ�6Ղ��O�!�:�d�HҌ$G5g8� �P����߄�e�Hh������ԨD�B���b��Ǔ���}���0=�$�g�
x�.��
l�z��l_'�[(k�4����y�̑�<�
B��L�
�pe�I����%�A�x����� � +��D<Il:@�������b��
-tK�
-
�A���u�g
}��a9�s6>�	Z]���]�0�k�
y���FGZʔ���Q
VH`�>��ס�
p�f���*
-���O��m�1��q�7
1�ة�h�CQ����1\  5$�RF��3kY�'}�
(g��V��w�Ld�)8�;�n�Q,�|%
��>
x������S5��e����=�A-��`.h�v�|�
ռsA�-6�B�,��[�0���hV^Hυhޑ��#���X�K��:���k�
D�!�L�RR���b� ���Ҫ-/0�����ߓ����� �^c��#���,3�JɊ��[�x�p�)��Y�l����Yt6����5�Kγ��Am����O)pb�,�n�T�P��/���(9��]�T�c���o�4��J:��z��l�
����$�F(�Y5L!1y�=ҿ���H��o�'5�
��u(%�~�.��
;i�q@�=�U�nُ��(�C�lLhe�;��9�/0�'0�ts�Q.m V�
˄�9	��	ehmy���a��ˁP�PH��㹕EdFA���^�Q��3 d�/y�3�	H�3XY�=i�%�X�y�&���2b��t��>q2sZ@���
+]S�
v
�*�k���}P�ja��ԈS�|nw,Cz�t�i}:�9 Na� =�J�6�x
��@�-
�@F��~%��������8`���,�|Ch\F(@�5 }~*T��=��i��s��vx�O��ۼ*�(ܟ�*4֫�S?���g���7L���
���#LգFu{]H�������"��E��DP
- ���Dc�H��ۇ�ʪ�q+h���0b^��R

<��D�
2N�Hc%�+�~\����F
A��j������쟎��#ūjQ��t"�N7Z��R�j����᠟��M�8mNa")�

�mƬ�
����Ύ�B��}�sz#%]�e
�Nq�t�Os�Q�گ9���E��E"a�+$�PPP8L�rEz���ԣESNd-|_��D��5��EۥS��)�d ����|!G{�^��$�� d
me�Ѷ,Vk�E,��k�
KKpTOl��*��ak!�Hݤa��6~�>.�������4	��|N�	���[�ġw�����B
O�Q� 5yN�f"e��=�ۑ,S�X�C�Xg��"Zu�>��
��#cpu����ɄY�'G��z/[2fzu<�{
���A�����MO2�(E�y�,
T��^O���&�c��
 �C�×d)���+�����
5�9��$ܭC�w�)����� ��MoB=P
d�%��6\�t�#� Sqj�]IAh��o�e�4��2���"���6�S1BPB^�M!�k
[�_,��fv�ۿ䯲/{�fH��
�ة(�����f!�x��p����^�
vI+��qƇD�z
re'f���~r�H����=�*~��N��@��z�}(�a���!E�����-���x���Nc��[a�
�	p3H�� 	�7l��6��TX�d��8 /9�#b��YҕȔC߬��
}OY��Ɏ��=�õ��D��
-)�)�	�
���"<��C��K�ô+G�
V�b�����C!�];<C����
��IE����_�@��4
����
��8X\
��'�좃k+���̞<�}@�Um��q����Y�%U8
���
��6�
-��
 6���9�pV�L�
d�f���hRCE%�="HA�&x
v
�Q�?�7�l����Hj�B<��������MTf`��ov�e����U�a�LW���̐YM��aKN� \�u������
9�(oǰ��-u䠠��&�j�m�
���V,ҙX��"������>x3qo�^a@ �͒�t_hV�(TXs�@����%N^�U��
-�3�"�<��I���Rn/�;�Yl-r ���Ue���
-�}/_����bMP�%��N���k�x�*�r�*��bC0
��ro'^{�
l�y)��M�[F�m�rj}��
�b
Q`����!#�����قq�����6^�a(*���}%k��鰊��
r-u��c�"�uV5
Z�bZ]C�
�#gҜ��"
������,�`�7�9m��!�� պ:��
-���xvA�/1��Ҟ�Ĵj
��ҝ)G!%��,�Ϫ
��	�{;������!�Q�>��]��ǃ�)"��5w�
-B�%ѽ�
j� ���O�
�:�,����C�P`kKHۿ�����-������	CeLlj�lթ�˂]
-���d�b����Kd��t�F�$4�����$��|��c�*��%(��ķ6H/g}��h�
vA�.��� P��D�q\5�6 3��͝�ȇ8�:�����7�i5"\��SaQ�
��5 �B��l����dʪ��
���:
���?�ӆ
����u�Z�
V@�AK�V(�����K)l
WD]�v��h�]���1R���9�+���*u��RXy�i>򚃙8]�౒��P�i���2��6�w���e>�����T[v:�j�x�[�H����x�+ݿ�P����zXA
=G~0}�y�i�d*�O1�Q���y�8p����^��P�?�:3�"t��ʡ��8�/�DQ�_�A�fsle�d��8�h�Q[p����O�H���7�
���܈-wc�:��g�:��zK8����yE�g�@��u��#�x�4���7�,�
�(v��	�O G�zj���
0�w�C���(�}���%m)pۡ|���E���H%
�`�{�.p�@>E�km�k���T�h������Q�1��UC����J�qp[K�ͤ�~����
nj�6�����
M�L"F�#+��B���\AhP�$��0+I� qHM�:�Ѡ��È���0 �S� wSQ�� B%�c^ o��A
����ԋ�G��}erx%d�z���,QG�r�f��
^�]{
���>V3qY��6��c�$R�L2��ރ�Xs�Ϋ���"U�>�T�fl0l�*���h�<�4U�t)�����k���>�*E%U;Qc{xU�A�r�w�$;��
�mE�V�w`�ӷ�*�SC�9g*��=�
-�ϑ���l�YT
-��<�µ"�M)�%F�qR.P1Q��%��J�5�c3��1C�`O�
�:��ݪ���s �`ؙ��5���1�
Z�'�~��L��ΐz�\
3���(rF�'��@�v�9"��L�s�� n
L@
-��(@a�w/d�y6�-�,����Q^鴠Yd\��Ѣ��Z��
�Y�2�F\�kd�9�홋;DGf�P�	���X�t�i_)6�p8熫�
��uw����*
�c�g�8:�o�����=5�uI��
�
-
r"B��FD�G���;
�[��/��
-1��I��H5��ù��u�����
Pe�qU�w	�b��
�ƲO��BD�CD�k1�����9�_�g	;_��I?�0H�6x�2��a���s/c�꾤�W
z�b���� X

J�JLOt���f�
q�4�4�/ӈĆ�t����x%5c��?�8V�A�W�=��>:�����Ew���>����č�K��+�
�(�f������O�x��+��3:�\�����eԒ�3ޘ�5w�G����
D'�^oY�Gg�T��
��NПF�3�����F%ȐHVH�\��!���Q/�T��S8��R$�����&�X
-���c��
S<�P��b~����B�aY�>>��=a�~:�d�}����7���v
��8T?^�F�_�~�!F��t"�!slE'��HE��3���Ͷ����~*XR��o!�0�:���H�d1��ĭ0=t�4>�׽�����](�7�I(Mٙ�sAugX�	��8M��;�
�' ��d]B0����'�����V�D_i$�l��z�
�-�h�2�ؽ�<�c�z)?}�L
-ۻ�v�m8k�ֽ�����Fs�1D��"S���䢒
֮=7ɷ�9Tw�9C����F"#�o�f�c��#j6f�<�C�v����HR���j���z�Y��	�I����$�G��b�;\��֬��kI%
-Qř��]��f��BQN#"���j\��Z���q��
-ڽR�5�
e	%1��W��c��$��_�<���h�S�e�jT*�Ϣ^瞛Ѷ�}�F���\ia��t��tG�dt�
������ڝ�w��F�]V�Nɴ���
�1�$0�=.�]O�{$�(����{Ȫ0m9�d��!��gDx� '��T�-ANu��8�VP�AXOSXG��u,�\�yj�d` rsŸ-�!ێ���.`�P(XpE���8��HZ��o�P���Ò
E/

�^�H�pdp�~�T{o��s�]��DQbc����[��Bd|�g�d=:A՞&��TJ����y�(�V�
�蔚��!�q
�kU��xt����f�u���8]5$��{\�`&Wq�8�։��}�Hal�uG
�]�T�s��Xݴ�,�l����V"[@{�B��b�����̄�zT -D���l��N�m�z�?�����
hX0+bVi��Pm
-�E�i^fd0)���p�h�:�q�Q��f������
�aʵ����"9я�2��T-�7]�,�C�[�V�F>.0�%�F���SG�@�=���F�p�R1�a0��awRh���Ⱦ�]��P)�G�B*XB��= �Ć�X����4�m�j
�͋����d�W��:�ď?�
z�8���F8"1'1� 0���
���G�#�2��Wz�"�^�z;�U[}�Mm�l���X�p7*���E�]�*lTM�����
p��Wٞ�i����0P���I��Y�t� ��~g:��y�x]@

���%��J���`,���֭��k��D�����!B�o3��H�r������VHu
E�9�V
+U�
ʮ����~p1f;*ݭ,�\D>��բ쾯��JFv�N�����th����.1��ا
��?
�lѱ-�4[�6��+l	�>�c����f.�;��rQ��)�#�&�Qq���c{����/h$*�b�6��<�#A��=�GDo/��{�
܌��
-���6K�6��ʡԨ4��f�
�G�\����O�En�B�i�3���9J�,�{����R�Yr�y��K�%H���e*�K[m[ޘ�P4)7��*�N�ds^U�C
,+۵����n
� �Ԟl���&�-J-�InXȄҨE̺������;�}��\���A���ޛX
H�#c?5�`�
�a]"�m�9�AqM�N}����lY�ዾPJ��F%q��QMka9'`��F A����J�U�+�@5k�SD�
���pU��@E@?�8U�����)�*��k7���� �jt� 
�

-y'�
-�`>�P����Ř
-�#(�t�.�ȵBs٦!;s��Y����R�K(}6�h v>9�d
->Pq8��Z����ݾu��R����D
�%�M���u��'����
2��P�2Syũ�㝞�Y�&�
��`�E��D�S-R�F��8����bNl ���� Ir!�n(&�(,l�u�e��ս�ﶹP�|��*��L׃���@zQ�'���c"X�*!�KJ:=Ombi&�,�#��[jO!�vƂ_o53��ׅ�. �(j��X�k���2Cݺ
�G���VsoD�إ76h�{�-�㺄H�sJ��1[tw�l�s#F��FǶQ�$	��IKl��{�v�ꀯ[K�ȁ ��wo�
E�l�'|�ٓiH�΅X�yfTOB�u
7�Ny Ŀ
�m��:�a&��l|�Ϥ�:f�����ӑY�%(2{ δյ
Ay�=�qgm�Є�1
��s�(��v$�8��<��x] ���{\ �Ʉ~�
-� ~P|�1����X&[8`��p��!��.֧��

�Kg	�a��_������GCXY�
���8��_Ex�f
����!LJ�b�s�j�y~4b 
 ���"D����[TZ�ZcCOO
��^� e
��D�4aW��d'�5=���[P,^hԬ_|*����|"kl-k�PV���U|4���^��V��^�ݑ��:������CX=H�`E����l5ve;b�~&�V
���X��Դ����M�e+����
�ѭW
Cf�]�N��t����1u��|9�$��j��:c��
��Kf��APKAP;��Q���.�����4XOdFt4��Kៈ&P5!�'���~�_�8~;f��ơS�	�
4ԣ���{��!�ߵj
-Г�q��{�{^�֣�$C�^���M��� X
c�X+=��K`ا����B�k
Q��3�%`f� �:R~>��a�fE
-u��[&��Ue��*Q���{ߘ���5y�)Zq�~��-��|�P#B� 3����9 ׌7�r�;��T*A�/ד@'YS��
��QQ��[
'��%
H� ���="�@�튩t�x
�v֣�݊�$*�{�r�w�ٻ����wHX���#�K���	2"DQ�8�EŔ�X@#eR
���V�����4�LC��\e�k�]/�PO�ӑ.7�qA�J��
n2���ޱs
-�)=rn�E���I��
����ȣ�1�fX&L>�B�>P +��f
O9O{""u
-E���P/S\I����n�<���vkp#Je�X���i���\ǵV�
-/�R�MJ��6�8z[�YУȖ*����.���pR3������.-���'��M�#�����Ggٜ�� ]�u����3���
-�ӧv���Z�:��M��%�qi3�b���_����
5K����ϦBD����r�^‚�ؾP����
-c����~˱�
��sP�XS��#̆M7 2�prA�9@�=��UQ>�j��N1�5.u���&��=l–�ۆ�>��O�?�%�F�ش���Ӽ\�g{��g�%���
RzD�KP�RG���>Щ|���H�D����—��$D �O�m�r�GK�ۗ�yB�r�	8̳�^BQ�
π���9�^;���rZ���(�.�S	�<��3��F��&ԴN)��8?R��ذ2��="�E�t>k���"=i��qW��F�j��Rx
�z�6V�)���NS�?�Y$���Q�$�S�������Ў1.�	@،+� �B�3<��#"�*�����JS#F�#�
*R��pC���z�<����kDth>X�J����;��}&4�(^)��y��0)Z�
���
p].�p�ٴ����Y}�e�#
��*J{�EC��9AX{�N��B����a�5{��B��}�ؼ��{��X�)������į�q�ٿ���gܮ�~)mf|���if��+����� �١���[L�_��� ��n@Q�3���6�G!�,��Q��ڵ`����A���C��r���~5�#jo����ȊN�p�)u� ((�+
D�^v����B������K>����p���R�� #<�E�	�
�0�0+�'](.*c���s�3A�~Tt� �!��3W�8yg�"߮�t���[ [...]
-èX�WLbO �b�s@}<ꕔ� 4ճ�聶��iC��h�@?�~R6Vֽ���T
�%�x��,NF&B�d��wb�(

-R/����g�
ܿ#��?�Ss�(` j���ֿckT(rMKN�!O�)���:��(kI��R���‚�3�&�q
-x�ˬ����@����c[a�#�S�J
-t˒��W������#�:7_lמ(�,q`
�xMΟȞ��|j�{�
-S��~����1�ن��m�x��
j9���`[qP�"8�p�9]Ul>��\n"0�).��z�M�8�!p�G=���԰��<�_z%��~�������A�$j at q@��s=�I�
3���s��<��ļO�$C�*��v��
�)���9�i�:��WaI<糱���uN�Z	
����H��S<8��
�;���s��)'
-U㭁ſF0��#P/*��<�k����	Ò�96�4��Tz��!I�Vu��@	Ħ�Su�q��'�8�W�*S�:K-����Ȁ/�v����}��)�)c�k�=3����p�֐;���%v��G�:ơ���1X!�G����w���&�����)k��w�Ii�6
Q�Yߏ�L��Ǎ�U{�e�cZӇ������r����.�Y?�p�
��
-�~?�3a���`(�=gam)֝��p P`j�C��r�h$�HP�B��ſ���*�#B弇���

ԟr|JlE���O���|ROX��7%9���1x��դ��C��gWDu)96Y��2o���^	���ΰ�@9�3}?�o鼛� ���w%��ď9�{��3	�6�pPg�A]�=8|dsU�a
@BCU�t��a'#ꌢ2��S�;p %z@�� �+�z���T�׃$�V�P��]�O�f8ѳF5���O�o1ζ�ɳ,�M���Um� ��&��)ה-�� ��
��J���I_U@례F]�n	��w�����]�;<�G���20�h�df�oE�1[�Տ4��g�E�9f)��ء��3U�=]�-
-�[�F����@3��~෷�0�� ��ޣ���w4E�q����/�G|��ߢ��f��ǰ�_��h�A�I����G#�
�1���q�����)�i
�
xhN�v��DE�A�8*�p���JI�Ȁ���ai�
-�؁��2J��D��={O
Q������zvȱ�_���|�����<�2J
-��")��8+H�{���8�L�����Z0���|��,�R�<Bn��መ'B�z��DX�ȡ�G��q�c����|�|L��0�:
�ǀ�P4�, �mfb#؞1��"��(^M�J���;�e�Y���$o'â��"vh�a�x�-�<C��:����=:s�8����m*|�s{�d�u
�5A]C��s�W`�u��Y�5 #$�i��C���	-Ey(�x
�}�d��9��K���U^X�H�N��@�/�0b>E(��jIS�
��q�k0 ��E�V�p�m�]��)ɢ��Uc�뺲K�ChC�q�ym{�3���e�Z��l���#kOч�k�: �~���#���� Ӽ�f���p�kE�C�	l\��P�o
X�
���kc�D�!+4�3�ִ����*jƍ��
-j����hm�$�ڽ��.�}�S��^f�<��w�Rb[4<�jQH,�F
?E\^�{�"u9e$"�ΒX��IqZ���dsԐR��QV1ϛ`���~�j׎(�("B�
-�^a���
B�a�*���wt��J=� ���z
�s�B:���$k�\���9_h8�N��X)Yߥ�&*|g6/6H���q�w��#
-�M���MF	gc% ����Ck@
-_�ޔ� ������;e�jr�
Hv-. �_���*����@Ft����9"���L~�<��Ѯ���2�������r���"�Eh�Ղl�f��!
-�f��pt�*��+��v
�wV_�������'�M
�G��=	���
u,���
'"�)��~� 0�:�����'����.��{X�
x
��R�FS&+���x
-tjY�jF5��&/�#"�/L�c�H�y>��1 ��"3�E�T��c_#�AH�e��J�K	�A�v��u��
�~�h8
���a���/��ls�<�P*��>��^���|kDK �v�Yy���ev<D�8H�v�n&��E�o�
�
 ����2�:�����m5֛Q�0=
��^r�����a�
^�T�z>���J�{D<�CS}����,�Sy�2�f��*i=���
�l�*�oQ�؝IT�}΍���q��t �
�` u
-&�y�r?�,(=��
8�G�G[O<�@^���G��
-��r����e
	�
�J�B5�#M�ɐ �G�����{D_�A@!��6�zQ�n��A�KZ
��JH:��P9�C��5f4��d�B�v|������8^�Ȭ
|��!��"
����d�8 ʗ&]ZGTP24������#�
-�в�T��$ZT`h�jH�T�)e���'��|]S��0Xw���F������>�
@���&{ �����h�M�=�(��hۡ�W�Y��KW$�Io
�3��pS�G�����0�8�"$�,96��g���jk�%{h�4/E�[ԛ�*��$_s�Xs���d�x
�<}
���
�%4!N0�ۇ���0$o�@�/�=.`�}�S�ȨBMZ/`��.3�3�ϕ`Q
���GJ	�jxKb� �6�r#����u�#���ّ���Q��w�U���h��<�xBIL�G>
��~��C1d^�^,�w��W��+e��6�{��е�,���
ԯ0X���.<�
+�f�h_ �#�n�
Օ'�)�-��&��F����h�GĘ:Jpo_-T�;�T1�yrk���T����_��Cu�_�o�l�xs`�!
~�����:H^8,�������l3��Ր�bT���I��X
~>��$�N?b*T�����������#�*��P����)v�qfܑ��H��?�&��=�D\��o�R��<YC��BV
!��t�p^E#LO$rb�T��xTEc��M�"Ktv��_GH:b��
׸��	x�	Eo��_`D��KTp'��B���J��,
�'�h�=�c�)?��_QP at Uz���e�$����hy4�@[���te� �G�|

u5�
�P�V�A#`�T������oQ�I�>����Y)^(�
���P� �jă�c���ÊL��*Gߣ:��s���`�W�pO1�
-�"��υ|�1��r�QeE�$s��	{��̞_��o�0S�� lM4�й�Xq�J��W�E���
.}S�cb&�tA���©�p)a+�(����c{�(��3�^U�Ղ���K
��`�c���m��oQ�;����Ƕz1�z�Nb% ��5M�A��}����ѵ�k=�\a:�; �;7�,+
�
���苕� �)i���v����g
-�-u��%�	�7�H��'&�u4�
rv��Aq��P�N�����f���>���)�G�P�
8F�
-�
��l�Ǣ�L"��r Wf��'��^Yyq���߰�W��>!h�
y�^<Z`0�dRu�97p �H�^�z�L��_����H���4�?�d	���K�����h�|�տ�����_,������������_�����������������������������������������~���������������K����
�	���� �_f����R�Í�p�/ c�|5v!����;��<Q{Z��~1�ߢ�����=5�W�
�̈��T#�ri��(��a���046��p�{�o�D�Xx���ۊ(*�A���$X�
=��(�O ;�C+Yw�ta)�E{�/��Ixg7#���(Kj����M���8�5�D�?!s�,�l� �KD

�2h����Q�8SfD��
-Vq�=�lI����šy�����S�@R���[4gŎუ�^�[�f��v({ƌڀ���(��E�/�cë)��A�
��cQ�í
�m"ط0Ce1��>q<)e��4�'�SMh�x�;^�;AF/yDƳޠ$3Y��ɜ
-�p���+=EX
e&�Nc֛(�NL(5�(~��f�x�q��w�~���'0$�.TJ���ç#JQ_����7���F/�}��
u��s0
��q�+�=����e���Ǝ!s�C���iD� E�E�-Q!TJ�`~
��k��{��|A0��>Ӯ�
-�"�`A?�x��?G ��ϻ�uW��AO�¼�1FUU�Ԁ �� �ëދ�4��s};��ӂV>|�
-�
O���X���ݒF:�glKOe�չ�!>��*(pp��
�PD=��F�].�~�
3�
S5y+)�=�}E�%"��&�����M��z&���it�����v�;
؏?���C!b�Q4�Ѻ��2��B�aR���A�F� )Bu�&���h3!a�$�E<n`&��J��(&���R�$2�[���=������#l8�.<x�u|<��"b�)f��D�$F�c����/�-4�$^>��{lB�X���@|F��f*{;�<�wz
iVq�9��
�(��@H�E��3��z��*�d�̵U�<���?�����Ȧ/ā��[�^�40���;�;	J
-x#��Ž��`П�9$��2Pr�xS�B������s�_�@׀�'�| &K�
-f	 7{�݊}0Z��b�(Q�EҼ�w��!̱�7��H�
�y2�(�Go^i	�� ���y��ej�Ol]
-�yJ^�9�<%��+c�8O��ʗ�;
H"��b�P�5gbJ6g�3����f�A�m��P��"&exŻL���1S9
V����^��Z�C�����
F5��c�VN
{w���W?�Z
k���`���,��g�����m�؛�LV�g��g�,q~� "r>=4�[#Q����K藞i�O�m

�(+1�{�a���[�
���`a�y]7���A���g�M
-�
/�3Dq��,Bx͓8 at J�֖Sx�nF����J "^��bZO���,ٹ_\zR,�=S��0�b��
�+�V��oA!�V�ΚX��"�|
89,��Y0��}��3��J��*�0�k�&�

����D��4�({j���[AD�LC�6"
q�!�
�C�&JԶ�

-�6�h��x(��ȯ-e$Ф(
W���e�F3��
��zC~>/�Ί\��
#�
�P5	^]+X�D��N���
r�f,�
gy
g(r蚴h�k�@%�,�V��y�9hNzO�-���)����  ���F��aSn;$P�qX}��
}�{!�!e^Hk��{�c�<u���>@�݄b{Oy���zi�;�ڷ�H,�݄�kn�4�x�"J�S�ԔgXms��17*��o�

-�B��^r�=<gx?H
��R��5���&Hت!q��Q�|Z�:���\�g�m�5 ="4HW�1Ώ(J�:˰^7{�3Ƴ��\�,W۬;��qj��=IC�b�LR��t�y�`��
�����i�7<I32Y�Z \�]��%�Y,�0�~VѫƗp��p
�@a�T�<?c�=jr�) �=.�/�����@y2�N�LU�v�+Օ���- �B͋/�$g���F
f�����B�
������]��۱�֙��ю�
�Į�aL!
n/	z�-*I[�|N��*��	��=!��Ԁƺ(
=p�9�ҵ�c9�����g<
Xw�4��P_[($V���Rق�_N�`����;8`;
-R��jMb��
w*ԋ�v?BUU�ZZ� �}F� V�5��d��aX�x������S��E�t�joQ�PL�?���
�9�����Q�R�s at A����
w
��"��Bw\
���y��Y�)(QS��xM�|�{�:���A���{��]�
ͤ}
����}P�m�r��]�%6�M~�='![Uש�Οµ�@�~����	 lT�q4�o#��^�
�����g�K��bǸ���nV�VV�`����&3��NT�Ip�w����'�q~Swϸ���E��sض�'V������bs#֕�礁���
-�w�Qa�rB+��6c��DT�.�(z�Du��v��$F�##����'Q���߁�'�s����0���ܻ �.�_���L���ۧ�zg��
ρbf�r�Q�BC�~ȭ�B5ÊPQU�VI6K�ī�@�0�2!`�W�'<����)�,gu5/Hiv:�%�.�ZR�N�����
Ώ��*y
-��+�-�`�u�+d�RV�It6�̑{�זͪ�cM����ي6s+nZ��F�<kYC�`�j͕�u����<��#��I�a���	S�9��d�7���CC{xT�c��\�|"3T�
-��z�
]���M :�m�@�'��{�tA@��|5��H�S�NLJ���&a�b
����8󸩫���
M�e@���1�5e|O
:�!���P�ޫp�p{�w�F�dv�{�c;�+Qv�Ru�k Ff�ui ��
-;�0�}7���i��j��DžR,Fra8����O����q��q���EH�Ȑ���3��'^�H��i�ǁ�T�
-Y�fB������#����|?���	+�����ԁ�|5�
�i�=팰c%��1�io^	����
-��y�V�

v�ܽG���E��2LG�iXM���v_,�=s��<�$��r��*���Yr:
-�n
ɔ&]�.
�y�F��J���XV���W�l���c�lN
5~����^Wv"'�h^��
Zܣ��
\���›C�I�1H+�"��`E����Lzh�c�w�(�B)t���۫췷�@)j�kh��
�2�:���"@
A	N�Γ{��� ` e@
-�
-=n^��喇,��
�
^~��ow���c�5�i>�d
-��@KK,v�P�\H�u�'R;�b�I���{S�>Wz�<���g�D�P��yL���b�[�ch�#�����K�6;�g"
-<��yt�u%��#�"
-Er��4��
�X�DT3�q!�Qd���J�5��]�WB/���')F�R(��IV�`
2"�B(F<.3��1��~T�m7'�WB�~�8əŵ�7��*f����>
�ÄP�]�ߣZ��4J�T+�"X�sd"u�n�I &�eL5K������+&Z���i���Z�`1��[OG�="$��e���L�ׄ�~4;z�[���2:����c�㶶�
q�Ѩ"]�߃,�6�Q��T�1	y���+L�P]�9�GAf��߲3�����P;�!��,�A
>����G��*C��7{�p�JA
�Ů�������xb���먘�/��t��
����s�8螟}r�~
݌
1����of�~��K��:�),���֛GF)Q�A� ��
� ��Q/"Ҵ�vx���C��XF at a2b��M��3a\A0�Gɉ�$n��;AH-JZ���>�
�5U� Z%���"bM[v�Hl����<�y���A�!�G]DgL�"�a�
�^�\��Qh9��xMSb��]��@;�*0��[�NX��#-P�Э&�ڽ9`��
 ��� �^=M���T��_
�8���
ȬX����Pt��w*p]�v�K6ɕU6�{@��2����e�Lݢ��Fo^GszM�N��
??��
�Ht��GY
�����
[k|@���7B9�j|��(

㌬6ul��^�-n�h��/�
s~
x
ߝ�1|
��O��b3��#a|���t�A�@A1΋��ք�l ̺�Dޏ�e:⬲dx��̫�\�vHt��غ��
��H������ޖ���9��%߂(�Ӎ���
1�(Mˎ�Q}���@�EQߔ{�HKD�a��!�ؗ�av��.
	63����`"�&8 �cM�
-��} ��9��+��I<���<�<�$?t��j�uڦF5�Xėb���s!:�6���(Њp�W
����l��j9)�ΚHQ��)�
��
-�E���sl�,hXa����@�Q{b
S�ʔlie��а?�*fDXu�9="ƍha��%
����$��/�X�S'�m?$Y�0�{���j�[�kT��4
r|� �
-Wg���Ȍ�4�ي s
�>���a��� � ��/�!6���x�K at cc���j(C{V�T��r "�@�3�6N>�^zW�o=��nG��m��h��Ŗ6]t՞��jF� p=U`1�I��u,��fC��
�f�,:�c�V �PO$j�JG�
�3�ڲ�rd(�a�
,�Dװrn�0�܃���L��R���'eB��x�^֨Q?|��NTm��1v�a��
^I}3Jԕ
-�/���b�� ���9/2����|?��6,�(˅~җ��Mۻۧ;�ϙ�� 
Q�}���
Y��ED�($.x��g��:�8q� �ĕ���M�V6�� H:1.���_�'��}����	q�T҈������=�U�hp�� I
-"�GD��+�#���5���q%Q�	Z��R�%˯�������[6���Zhb:x����^T�ҡ6H�-M5�!Q�iA�=9~���#U&���E�
���p�0�kWJ�8.]~�u
-|�`-
d��Q�+�m$�R:�:QO������}�n6��=�,浜�S�ʼn+��y��[$yo����
ȂX�!u�D�����T�!�}���������z�m�w������91�0��~�d��~�ē�n�}'u�c� fH�ݷ�Gq>���g��J���x-�x^�Ļ�<��=��<�vn)�Df-F=0+�q��]����~0�:�{y���\d�G�
�h���o���؃	�����އ����}�����Z�&_�B?��H�6H�?]3+IQ�_��3����/ke �x��q�� Ath���g=�� 5�{�Cü��]�։��wg:��;n
���,q7�a���[���qh<Tج9x�;�U��	 ��r*��B�@�Ta��T���c}����@��<����6e�FG��s}�i�[��~���R��ٱ}���r���v�Ex�E�Q4g
�r�s����i!��C
�>��w�H�n��ۃ��3Q� �x;�(��HO��J�
-1G�G�Ў�
�
v�Ze�B�|�Kb�t��S��t���SUOi|���LᏋ�x�B_� U�0%�Œ��}_l������cCO��%�C�M��{�����te���6���C��ѝ ך����挶`
-�W�����droRa:z
NKĠ1��D��B�.G�{j�Ņ�E����6+�B4��%�~~9X�#�Ö�Y�l��p�
V�-��O�A �d�j��*�>�8}�$��@�
-!�P�w9�O�;��p;�"~{����0�P���v
�),>Y�˴T����[o(��:�W�  
-�EnTؖ����!����7�xQ��N����{�kR��4�;R
�u�b�q�r�Uڛ��t�@�
��<���߮{��-������prwG �Z�qv+��1υ�nP壌�.�뎠Q�PLۧ	G��
-"Q)�f�!�}���
 pOpݴ��	����2�
i���0D{S�@DF�~t�d�{�^S�+�iR�E�
�x��C�n�ޢ�ޢ��E��j��3���`qs�]�Yl��2�o1�ZL2{7��
?
Ї�
-29`�� �L�Ht!���sH%�Hw�A��	
�,�> �{�\���s�p��i��
5�D�X��H��W�a.�q�B\j�z��� Q*C܍J7�̱�-0� I*�="�P��6�
&�=�*�+ƭ��L/����~�@5M0�w���hr
��1,���
�JX1��t��<�{H?#"��u{<����1�9`�ʃ�����aF&�S���v�
�
L��x��(���@|��AW�Q���^A������
n˲l�{���M��d��tk�V��@���_���
����o���]>V�ȉ���1b�t}D>

��*��ޓf��1;���o�O����="�U�L�� ?�g
�4�����Zs��C��f�Q�(�scAg�C���s;p4��
�]t�Y
��wݫ$H�
9o�3���^�=�4����^���@�E�%F����iA�>�jT[U�+7�腓@G�[�Ow�#�:)���Y�F:i����d1y���
�<Gr�=
-1
I83�H��mZ
N\��v�;sTRb�*0T'�'_�B
�	e;,��tA���]�1�B��������L�f��o�
-
���!-�
� �\ͳk�j�=�;�tB�$.�B$�����x�{��~O��ʞ/_b�9m���%�-& i	(�I	B��D�I�ݯ�
}�%
mOx/��O�jt��4zT���}� �BO��v{[oQ�
[�ir�7���u'Pܚ��N���D{`�����;�ޫŴ@<���Ѥv�a��c�7>��2&̖��?���@A����
	�W�s� '�F�4��ٙ���w�O�!tO�|��o�‚���T�� sg#�Pܭ}!O�f[X��(�Nݮ���̃x!���
)�M�
-�ctb(ER:@��=[
wq��bF
-�F��CB߶�({�`p��f��Va4�s	�2U}{L�[��(i2�2�T��<�A�7v����X���h���4�<�eQ-�
�w<�is  �_x��煔�J���C�"��y�'=���@  �P�S��OQ�,h�,������� d���ٟ?) �����K��=�(�9[;3�ݼ3Wם���5TY�*M҈:�4
1#g�Ȟ�GXT��h�1�*�
c�f6� %+�{���q�=�9�$M
�
��n����ɒ�2�9���=�`�
q ������qFqR��ȝ����Ԩ�1�xBo��{$�j
-���ٕp�؜�Q��L�p�4'L��T��Zs��4f�Z-���ݟ�%⒠�];�r��Cy�b�m��zj
->��e�B�Ȉ=9�+�h��T�CDC�<�z���
 �H��Y�qE�N����'�9�ْ��a� �n�H[ߥ�0�P�ơ��	���-���!ύ�_�0`醎27��da���@�N�W.�a���6�R Q�F�>�M�u���u���l��
��!}����|u��_�Ѽ�'����Aa0�W�L����ʟqks�w�h���4A�SUzAUۊQ��B�unh�RAaL��0a
��J{�
X�_��a���
���ʡL�
+ �����tE�`H�g�����g.�h��+���|~�
�����B�x�-Ϝ;S,j�,�[uZ�"��@$
�ί��)�Ϫ����9�
.�M��hS�Бq���[�
�
*�L&p��q��w:.����^[�$�U�Etu֖k��f�#���gU�}��x�g���5&�
W�x
C�1S��z�Di�LF p(�#���X�U�'�V�=�_��f�4��:~�}�y�
�ىc����}�
�O�pX�ǁ�[#
%,<슈���x�:�9!�t��y���V�B��ƃ!u��C�\��7q4��l1%FZ��yS��.0��s�A|	���ɡu`�yo�FT��fϝF�uͦ<
��Cd�͛Ī\��H��I���*U��iK+i��΢`N)ص<��)�Ge&��'��u Y�
�%�gjC�Q�P2f�@����qj #���n��@
~m�]ñ
6���a>PЊ=R��Ȑ��Oe����
h�,����kDDQ�P�
�4�)v����(ׁ
-�w��GKY�8K�#’��T.���uV��8&9tm]���:<+'��|�� �n�@�"�?�ϧ�K�֑�k�����"�:�ߗ��G��b�F����Y#[��r�\Op��|H'���An���<ێ\@�7� J
u˦UQ"���yq%sAX5���+h�L��I�&.���^�#�GL��V�
w3��#o��ـr}vh"��h���wK�{;�b�
tB|'z$Җ0�m�p�\��#�'	��o����Q����ݣ���^ʁ�/
æ�aկb�X�X�Ř ���Җ�w���3�y�ޡ'�PÅ#z�0P�M_uQ�,%=�4ה�H�Ì� �<,+D�=%"� ,��
>�C� 	��:�3C�e�Bp�R
�-(
-�N��a�5��e�##���p���v�W;�B��
MhJ��X�6[�xP�a�IF$�v�=ĻƂŻ��P�y+�������f��B"�R����]4d�ʚ����ԧԗzx
-�P��q5Ȑ��q!�ܒ ϸ�D�
�s�����P#�8�G��ݮ8޽� ��
��?� ���)�7Ÿ�ey{��4
�t�'U�&w��W
��S�,p>�o�U�)b5�|Q�&{����t�r��}EY��+;5�}�{\+E+��]���
�ۗ
-f;�	���S��X�ɍ� �쉝��]ѫsU�AT΢6-�d��a�D<�!	\9r/4��)�ߥ���E�f&� �
�l R�Ma�y��5�&�x�>'�^}�b
�PyNl��~��!�
�`;�n�C��~\ d�q�*�ɽ����t����5I��O���Xtw��ٴb�����ԝ��v����u��b�
�m��h'�
�c~'FC��*�1IMȶ�2�4,�9|��k۽o�
��L��c�%�5]_#r��iqU��ذ�������JT�9��1i��€���_Wx��#cN؊-����Y�O��B�*C�g]�]
dG�x�|)�C�y���Ե�ۡ��")nQ)����},B��y�G���l��
$�-+�:��� ,D�������k���
-T�^ ,
��G#�\v�ΆXn�H�	��0 ;�2�gI&Y�cI���|^p�"��j��&}�vn����N����0J��C�*�����ߚ|�j�EC!,�t��o,�蘁���Ϻ!0�v�@���v��U:bW5$?�c��Z����3�!\��+0⼝�;A��v��1�{����

�LCQ��z
(J$%<��K�k:���I�	�y��5ٓJ���PhEm���H�T����
��0)�IrV����=�ϭJ
W
����4
-*E��(�%���j�P�T���
�v�XmD
-gF�Èv%F�#
�I�h�wܐˎ+�\QB�r��7_2�?�R�9[���D/�6 ����~�P=����� ���p�z�����9}�
QE��&�!-�H�)��Ad;5��&���9�2�.��*~BX^��h�!Ǡ���S�+�Z���V���=۹�Q�͈j�
ؚ������+'�̒�p=BK��>T�N�D����4�
!RN�>�]6
-�'�W�
�5d_a�x�uo�)�?��m�z%=ϻ��:t|���a��$�`��@d�" w�z��8��sLiA@�!���o�

dշy7
�D�n
-����6��,�2A*7��������
-��H "~	��b�5)e�^�5�N{
���hlh�*'�\W%UA�
-մn7��&���ʈP�
������ُ�	J�x
���
�M[�(���h���8�}C��]�[ 	$���)$Wt�h���_�T����4�e=��k͜)�:bI�S�5�c�/�-�/��0�ٕHAd�7�kA�|<ݪ�� �i�24\�Q��zQ�
��㡨$�~8H�I!�W����ݛ�6W�S@���� N�YI��,�\U@��*��-�}B/���6�Ġ2�Q����~��
�(
y"=��p�yMf&��R��}���YJc��
-�4H$�쾎���Eɮ�/ $��Jn�C��̀CD���3��D�xo�3
��R�xjΉ�g�Ǐ���(n�c	wc�C�W�I��DX
c1�Ӟ2;��E���z/!�i�R��X�r�����
-��S�*y���B*b�u~��k��%�M�j�$h�͟1y�~���D=�|:�
�A\Q���hR�|����z'��w�+����wH�<J-��)�hf4����7$b̡*����
#�Ku
^?ҟ��<��-�㚇)\���/
���G� c���J_���=�w
-|�1A�q�ۥH�D�Pȧi��~8��9�u%^�� �G!*o��}��h���V��rN
�<B�^����)��_{�Ǽ�}�<��D�N
/�~���U��E����Pw&�\�J��<GYY��ʮ��
��=V�
���3�Rb�nG��]�7�`�p�U�����ɟ�AU�W9D˿&Mh!lL!;E��SS� wH�-X�p��1F�CJ>�0M9 }�
��ȟ�G-�6
J���$�7�s�
D�H���W!��}�I�;���zŅ_� KF�P
���j�|����\܂�-9ѕ�}��l`�hbv��Q���A�O�w6�+�L6L_�|�
r-� {�+�]�8k��
� �j�U,6�����
>
�v����\2R5כ0k����%E93dU��O��
�Z�T�m��ޤ�ГWk_5+���tgj�8�)�g�w/$
-]�
ű���Z���;�R�}V#tC}�R���&.�>m�d+�K��c���d�j��3iF�Ð�aDy�(|I�@[}(����������yx]�y�udm�"�H�.��
�·v������3�ѐ(��^�(���z�Xh�ꃓaX
5qTM�=5�Zk)f�O’E�=�1�,�B
�b
���8'��EZ���*$!(��"q�X�M ���&qQ�R���\��b;�R���_�e v�
��_u �.9��Z@�( �J�����Hj]Oj}H�����z���R��M�pT���}��	#�YS
10Bf�>LV�
-ӥ�:��_�cRC)�+�h�\N<�B!l��Z�S��
����T��6Y9]�D
-��-��s�Յ��
	�
 |Y�g:�C|I�����V�H&����k�g���`���x��i�̜P^;���9�
-Ƨ�����$-��E7L�EG�� 
x$)[�Q�JCiw$��tK�U�O�hi�!
-�"�w��b�#�Nq"f"��F�� ��LrV�w�JHK׫��L�_�fԛQ��Qk� ���E�:��TR�4z�a�M����Y��g6��L�-{�(E4�|-صTGw�0S�k�Ӣ[��(+�AG�y�N�@02`QU&?m�y � o�$�_�,t*Au� n<Ù&�t��&�b.Ui��Gp������Q0 3�刡G5a<�Q`/
�t�\_�5ǻ�Q��U ^�[Ɣ���.Le���p`��ɞ��8�w
���+܍�=kv�ׇH���ۋyy	���D���о-ő�l?8Y���A��vd��/a�ey`���ߧ�C<�X�Z5���ny�Ǽb��V��d{T%�v � Ϯ1ፅ��g��$����A�M��To��{�> �3mW��4lVD��čz�<|d`�g��%%}T�
�ʔL�WO��(�ϓ���c������	>Uo�.��
Oj�WD�D
�z,�F(�9Aw
-�E�W���_Y��G;^^����¤�?-��$����\�V�{o� �����
]�����+�6	��c�'����˰��5��y�<
QZ O�D�cR=���.�^��
$S ��׈�/l:ۉ@��2��LW�K�yD_�>���3�u��<�(�"b
�� ��d;�~����}���s�L�v�ٯ�2�s�)s�n���X�Ƥ:c�����
�j�3�L�qɠO��W�9��� �Щ�dk�g�굄�6m��Ϊo�B�$k^���L�4�yr�0G�����1c���M�*
-�4����h #�=A�-e�n���;��߲�8 at F��6;8Hjp����yi9h�2��u��pNDq��8�`?�'�k�=�a�����`z��w4a��
*�Rs,��f
τ�����U���WΚ��FmF%�������%6{��`Dz�//����R�$����#�(��L�B�=w;{���Q	���N��N䦲���{��
I����ՅuL94�$c�0!"ʣ�"ʉp赏Q��'���}��1%r]w�c�P
E%sk|lt����x-wt�m/aF�*<g:*�������HG�V��[U�GiP�1A���
��ѥ�@�H#�
�0�Rs�,��9�|
-�ij��U%����t�Ш�U�_��'G~w�$@еx��q�ր�P��a:�@=*,֩3�'�
��9��]/���J����P�ܨ��	^	i�OՑ$
y(��o0Zw�����������`s�N{�
aoPU�:��җ���o�!8����D�\~�Eo�r�}� 8�V�fr����/�5��2�L|��ȸ^��|k#Eu�d �l9�)�;z=�g�RaL��@�e��`��p�(i�%���cu�R�����G\�U�s@�
̒ώ�QM,oh,qb9ݸ�� �^aKጶ���I�E��U���C*��}%�@m�)$8�_1�����
N��>�n�+��Ͻ$f_�ˬUM0�c�(�ǁ:8�3��W�a��VH��D�@{����׏�Y&G��
�Z���8���0),�#(k
-�-ee�,�[��qȂ���z ��ilGTh�#s��Ka�4#¢hwi��,ή����
-M
���_�Z��~�D�
��YP$��DM�>���
Ŵs�@c����D�ځ&�/6���t\ɲ��Æ
i��.Xo.#�CD�
-�gz�H�2��]�=�gg�t�
�pE�����Xj�?]� ���'��n��C�ңk�J]����_V�}
-�MU:��;�.��6ZZ
���j
%��x�ДO���3���k
E������6�1�r����E���
������x�t
�09�K��s%z�n?�`�;�da���I۫��.g���l����	d|"�Ӕ��/�t��#�7r:a��Q�E�c	i���C/)v�'�����ׯ�"#3yjG ��Il���n�SPm
��q���̟��CG�}`�a��_�t;R�u�;/x^�ZG��H����.�a���- S��%���v�Y[|���i=I�F��=�DZ���]�w�!]ov�R.���
-vv�O�%��Ҩ|�I�
z  ��:�� �&xN�R�DP��1N��x{6�����i����n!�n=��e,;-
��x)|����Ur�^b�K�=�D�%��	�
6OI�eA�Av1}�!
-{��s�~L"v*�>P�<��蚒�V$����+R-을�o��j���W��<�	Z�QV���d������p�j�5�a��/j�QL�_+�rL�I�
9��?���Z����d���hG�	�P��v>���M�}��j+(k�3��y;�P�d�~G��� �l�;".�4
�8����I)-�������8��CGY��ؤ�8�x��J�(�O���#�Tp�M�����$�=�/Ԉ`�<�����
��y��GV+"N�`w���X'c��L������!<[Zq��q
�#$�
�� B&��
��8%��D�����y�XKx9�$��8\�V6���m's�0P�
��)fz�M��?P�>�2֊>WW�o0�G�w�C�Xm�G��N�
��
F�J[�����:8|+�iK���l���X����^���?::���i�@���P�O�n��y�\h3Z�ڏ~93X(ŽH=θϘl�/���?���5A�����
������e��G�Ϻ��zl�� ��2�b��[��=��y,��%VH��
9	���h��t�*��wP�X���+w��p�5���qL|�ۑ���͙���
�E�Q�&sU�(�c���5D���\AP<Sp����`H�1Z���

��R�
F;�8.�G�Z���Ⱦ�,��ٞ�l)�q0B�Ž�m�r"�w�-��qF��E��
-v���%��5�,!�dI�B�'1�
�
,�g�7��L�8�P���ei� ��bjT8U�t�BGBY�M�g��*�\��r&z�����jeL���b�Pz}B��� ��Ǝ���p�[@%���
)p�D%���Uf����F3��z�SF�"LeQ,h��#�KK[� ͌R{���	�U�Q%�!0O�;

�h�ew�E$e?�����݂���c�0qW��w9���{�Aѳ
-� �\��ڣ� zOl �D���LG5�Fɹ<?
�6(�7�� Mb��j���=`A�2�14|O�=h��3
д��3��5[�^�r5ҡW�#x>𰀃
f�,
-�_i���J����v[�Ub�:���X�
-�y_9>d���Lk(��k���s�
-=�D��"b:�[+��Pv:#c�.#+N�4��:�1
-��
1o(�h��
�ZF-
� �!�6.��
8�w�7xD
W�&�A����0��_
(�^��L�����|�B�va
4�sM#��
�� G�ɘ��x�i%�ndD;4��=?|8�i�C�H���v����������g�HV�k �'�p�q$�Jl���\�НxoRs�# Vߑ!������
�����u0`:6Ǻ�>�]/���50J0y���vjK`u�îMĸ"�Ŕ��
���|ߗIs��q��C�"x�]Q;���G]+	�^
�i�Ύ| Y{���>2x���x�
�
��R��h����٥[��!�`K%���gD�����9����� !�t�i�Xw^G� ����D
�_�������; �L����+����}2)
p`�Ѝ��|��>�|��_F� a#��B�~�Xg[r@ۘN����#EKTu
!
}�$�d�
]r���3�(�ySO�m���mng0W-/���_�f���L]S����A�#�Zg���8g
-�衄6B?r��Ž�r�7�j��njÜR"��5�f? 
bS�A��N�����hG�~��P��4is;f��S�e�:�3�B������K�Y�
_�q�%��i
/��˾�;�<B᣺��epE�<n�M��X7����K}K����Eu>�6�����E��
�?Gܨ�u��}�}9Lv��uM���ma0IaK��/x���G��i=���sq%���)��L����M$Y�e���k
1�@:~�E)�

P&#3j+x���룕�
A����_�?�_S�(*�V���Do�� 7�NVs�
-զ�Q@ш�~w�w��T R���Z`J�)(p��3
���E:�a��בv��$�
:
{P�6�l۵��8�$x�^"� ��5f- �k�
_��䑚v��%�Č㴀�h*ѫ�纃d�}D��z2,�a�~F�B��?�J*`"E#"���F�(
-4��-�(B*�Wy�f����
K4׊y��p��N6o#��Û�"L�*���i�M�ytuh�s�0�\����E��̲��b��fNx�"D��I��ĴL��
-!�;����]$�ҫ����bB����Jv��-��L��_��؉QY� M \
��T�D)�ɘ�m
39[���
�� >�U?��xZߣV~�aB��/0Jt0�n�4E�,H
�L�@��f}F���K�]�k��*>�s ��oZr-�6��i��
62���췉������k��Jϙ�\�U��U͌[g"-���T�����\"}}�����9Z2���vD?z�Z.-Lc{qe�
iASP�o"A���%.���0LJQ��L1k���"��Ԟ/�
���{A:�r3�t��;I>w���y��O�73Z�9�i�*p̽4��
q�����/����렄J��7��wZ�����O,0�����Y�^���{ʧ��k`6��Acm^�0�> �����/���(����>U�fe$�hu�=
��@;�	hBG�p��8�E�p
	�; ���.
�U�VGt��?
����vQ���˽_�Q���s8X(ʗ�D'ر�x�
EiU-��lچ�3Kl$��2M:hu] [...]
7�9@|V�{{��S�P�i�B�%�F{�W�Er�q�mq����8���
�G��V�����+S�cf�
�m2ۯ�/nnu3����o8B2#����w"(����h��
%ܯ��Y0�=��s���t9�����E��M���� ��s�_
���ʣݦ�֡�.<G���Ȟ�>Y,�<�,����ᔑڿ��
�	r��)@yy��IlG
1\@��L�� �-\'[�ȱ
)�Ug6��+��s���YD�h�M�FA-�do)�ԑ�ʀ�g���;�����.�]L0vD{�F=����\O-0�5zd�����2�.n��Wr�>�	a�z�ٓ�|�������;Oa�����r7[�٘?D̓����Y�։z^ґ�1�c4�]zZK�PgǼ��0e<��_]��~���ɟ�FPDp�t�ЅZ<���X�~�1�
�P+>��
-�vc�4Q
Q=�������Bf8�!vbq��
���~��
s�� X���3���던�����+���C`�!>p+��Mn�Q�!B �ZQf�z9�"̬��z�^D<嗠�yb9�
�1�A38�c�7��l�@�.�
>"���~�~���AZ��c-���t���
U֐�c�[7i�I<s���u����C#m�;]s*��R��H3����ٽ�S�5�������[��&L5�
D�<����T�|:I?�
���D��;4��y��������լp�f!��߅{G���3���@�KD�f�K~��b��j�zX	t�Q�d9���/fT"��D�
)��NX�
d�_D�G�7�w��t&Q�0��S��&�v��� X��"�`v�м�uQr)��R���
-E�*V
�d( k�*
�)�#�3"7��GW�����<Ε	
�����r�
�Pl��o?�{�cB
V��\�v�|�����ٛaq����z;t��
�:���q���-��e��
fC���� ����:�O��#��G�lgwy�#�sz��tᾄ�z,U��~
����WLz�7���q^�O<���n�+��<����,�sN����w~V�'.�����
����0���
�}�Cu�%���uG���h&J�
�D�rv�9|�V�#jN䃗L��H��*�q����WiE��;��� w�14^b �<�J�<��)v�� ��c7��K@?M�ty�?L��g��Ȣ��za�
|(\?#@�1ٟyΙ>�,���%�1��Js�DXI��	�^����T����K��

�v���k T_�
(Ex��Uc�������J�0�X��:~Դ��>�,��)�v���+�X/�����Ej~�q�a||f�,4��^�؅�c ��RM�88�4�_h9������� 
-�
��Y�����2~k�5TL�t,��ȃ���~>���%ş(�i�?�1G����܇��ܞ �z
��nDLӻ��{��,�ք0�����'㊯@z�˔�l6�V� �~�x�m��r�Ǚ����w���E_ E��?~��!��l?�]���1˅�*��E��-�N2I?,c;C���o��o~�x�*�;R_�=&XR��D�/���^�o�kH�Z��r��Z�~�2�8�#��>k�ߩ�7n�G�?���������LY���5�Π��
-'�H<ZA�� I�z����D� ���*����������D�5�L���|y4]WxPS��4��Р�0������F�z��)��_��0B��~������BIug��%T!��ȿ8�QkS�D~��p
�l�I�`� ��	G��-����V��:����޿J�ٱU��
� �
�&p�zjڦ��w^��+6Q��zGM
d ��� �" �	�f����g��qO�~?F����~���'���GrYy��".Q�y{�����F���@�����E��kB����Ӏ�Į�s�W
�,��'�d�H�.g� B0
-�v
��"��������Ng��L���ޞ3��0�ҎFsU�+�ǽ��� �d��.�x��T�2�I=9��؂i�����\Ǹ�
��
s
�ƫΉ�L����tA�T㨙
���������
�bs���
��l"ʝ^P�[Ҳ��B^��q
�;���UAX�2�� ��/C
-=��l^�d%'�� �-\��ǎ �DDR
�+э�zz�u�a(#���
y\,�pJ���y�ڋM�V�[�bO=L������W�qG��J�f�t3��M�S�,?W�Y�g
7F�D
��~����.޳4�,�zpOK+��
���6
h�Vu5�=.\'
�E���
�v/�s�2#�)�����=��A�̳�mT��^��{��%}����3�[V]�ě
��a��Q��vM�a��GV�
r�> 
y�ӏ�<�H��?���"{�b�����tg/+}9��5� }�"�[)v��`��ߣj;�k䊤��L���]!�R�k�wD���|��SJ�G�g���wvkň1���w�t�PI��{vV�4K���nr_��qj���Z���!Ñ� �u����
���q�&�Dog-3�"K�f��bX��d������[�
�b�$�j�Du�N�
���_^H��p+_��޲/�(Ȗ��^�֡5���r�
-��1� ���7�{R�����
��%��+2F��}F�+���/��#H�=�D��=�9�EeӢK��'Rz~p�����{\
)z�-�����:�e�@d�
�
�Q(��w]n2�
Vk_�T����o�����]�M����QG܇
�^�Y�H��.����+-�r�s�w������a�a�^X�C�YB�X����O�yn�㋹3�"
�D�}�<"�����$ з�NI�<��v Ư�c�u���:%�kdQ~�~�����ºC �lOk
�&[DU��6��
e����U]
7��H�k|U��Bt��h��~�F�ל�BX��W���x��Vk��ף4��t�>��������?����G����ȡ��Ѐ4�k��'��M[�i��wݰ+d�8�Y���R:��ψ�D/}y��ǁ�
-zt�r�Ÿ
~��
x��o6��7�B+j���
	�J�H��q��`

-Zs �kf2�^�DP��%�EPu�D�Z7z��M����!��r
y{L%�sS�ߦB.jjϗ-��΅q��M�Ow�Xa9 p��ׄ��>�Q�
�_ܒ)X�w���T|f*.
-�a'u�½��M�Ѯ��1� ��>#R,D�QC��<?
z裖�EW۩u�Ba�� �(�����_xzF	X���;.L���`nה�uf�������0�:j��
{"��P�M��0w��!=�	{���O�`f�	���q������~X������DD���G�
ʗ�K%������K��~������b$�C��jmX/�_�#
-t�T�~��Gy
-��+
��J�*|%���
-m���z�*g��ף���;Q�z�
d'W�D�xh&�3��Պ �{�I��!OQ�Σ�
?��l���[�s&�q#���P���
2�T
���'��[|)BJ3t_
!:��.}�����4��{5S��3p����YoG����
��
���e
��v]Lʀٝ��gD�TD��# ��8�a �����{	��ܡ5(�N������c���^��Ԉj:>�z���F��s=Oxb$�l��݂̇}��N���	�Χ]�Ȥ1(�l��k�ETG�b���r�r�
��Vɂ��,�x����/1�;L?VZP"|@'+4q���%#��Z�#��BR��e�K�
�׭82�}S���w�t�I@
5������r�o�:f������a1�k2�n�d�#�,J��T՞��߫֌�?��]p��Ww��k~�:L����}ۃ�h'�|X��DaZK�E)�4<v(����� 
~  0��� �r���G'�"�,�FK�B��&v�]
a�[ċb
-v
U��(�"ZjWRc
���\*`��"
�j�����!>{���T�9&-�% ��j/�z�x��'�+j���Q���M��O+�59��Htv)�\O<'FC�cc�=$�<��	�z�O�����0��'��_���/����������o�������������������o��o����7������o��������������O����������I����o���������7�qq����J�����O��2s��/��j���E�`hY?^���򴋢�;Q�iw�g~FUu�P��L����t�GU��J5�:r敺�~�x�
%�h�:��UT�fz����Ps�F���K.�h�"��+�:�|ES�ң��#�%��tx/�F�Lj^��i�-gj$B��>F/g2��	��O�`�;�*������l�@዆�ם@�;��y&B�D	��Х�/��V�<�J)FV�C�]���!�"��|�SU�T���k}G�U��L���Qe�����T�0�ij@
�ԕ�
Z�;k�k�[���������Ɂ+H��;��+^?J�����k쯢 JJm��i�LiP
�߂�@!�F��	�\��P�47�Fos
�iA�j�_���� �.ំ9
-������@D��9��u|WH����/����ubiC�.�z�-Ks�\����W"O���wl,zP��[m��`�U1�e����j�]�o#N�v�5�l�s�b�
�cU���o44؛�e�vN �;u�?G`r��
b�������q�هA�A����>Q��؝*q"�W������'�:M��WOv����f��,0X��8�zĭ"��Mz�U��DĜ/���K��(˟3!��(^�=�f�W4֣����T4���u���
,�qd��w��aH���Ћ����)l�(��Ι��6�k{D�V&���T��F�����FXP�?#���V��7���#õ�[
n^���l���v�����aa���_I���#<�x�D�ׇ����hHAM@��ew��Oz�4򇈟�� P�����M>�I� ��Q�����kޯ���N ^�w�B��g�	��A�^m
����}�H���&�70��.
��|�"5�s~�&���k,D�Ky\pS�w�
�q��r�
i0?�uR̖�C;���P6}�oK
F"��2�+��& �^3�2�@�Q�,B׉�g�6_~��A6�U`�tn��ב ��n�#
�
�r�m}F���M?�~�S����m
F,����J����y� �R���Ft�
���qR�F�g�{�D4M�TxN�4�<��I؛.����H��lӮ[Lx��
*$��xPm~֥n�uj�4���#�Ei�X.�%{����r	|�eJ
����,z	_h�wF�}+���� [...]
-��u'j��4��V�B��
��&�S���SB�$/1��1b��)��:�A��@c����1�H
\�u��3��U;�=��[I��߾�~8��+�a}�;+�	�si^�

G�n�-V%E�a27O�g˯� KT3o�=5S�cF�q��|,>t��Z.��]z=��@����YaWz/%�KP�4�}�i	�0E_\�b�J5� ������y�"�lL��.�!P�{��JNw�p��R��G�Y��W:�j�߫���
ܙ��5��FT
�j2���
H,�a�?�6�vT4P@��<efB�<�_<]A�}������/���#���AT�
InwaG
"2��EyM�J���s��`s﷮B�cK��+�o�O����^��?
�5u��9����18�e�Γq3�G��%k
b�zݼ���
< Q�<>b)�Z�J�/��[(�wqgk1=�6:>8	���F�1J �\
�h�D�~��ë�)'t���2���S�bڛ󠥉0

i*�֛��
-e
-���N���*"ҩ�|�aM���Z�
�
2�˹�Ə�����q&��y��3��Ծ�q�1�ޫ����-�:�yϾ�ĺ�vtq�-ATz�����������>��H����}
���S*�s�A��Qp�gf������m��u
8��)�r��U���z���h)����
-��	32=T{y��ҝ=�%���-����z�
�s��}�������.��4�����֨������@y�Y�b���픶���\�"�
�Y�#���y �I`n�Z�P�$J�Nh��Xn1�ȱ�5�����R�Ἡ�G�3�5�(@�x�H�+)

X�pt`a8���q/�E�����V-�ܶSt�ǡyb��?횇J��C �@C���<h
�Q����}�ͿU&�`@[��bw
����"�m���5�B��t�m ��-h��< 'wr91i�P��zPTwB����r�$i��<@��\#�"��~�llr�k +M��Ү{24̐���^����i!������bf^��&��EE7�����qc��g�;��|p�� ��G&(���%��Fc���!h����!W\�d�?�
\�zM���m�4�����p
�n�L��8z�2/c�����tmC�p���Wl�:#.���� 

q���̙�
�h�D;[jy��:��a}"�M����"7QSˎ��8	z

u��Oa�*���qoɖ��ї�П��D
sa2$?
�&T(-�9_T'�-�Q萰9�����|(�{�
�]�����ʈrW��=%��"
��'�4{�g�"���
ph�:{>orE9��iWd�Rz�+xd`T��
����v@*D��O�v5#ȭ�7�7�M�c~
-,
�J
-��X�{�Iy5W�Gy�t�\u=����;ȼ��ûAH�'A+�
-f
��8/ƨ�[^�P�}i��] 
�8]F��|�]L��A[��N��kO�ñ�	����c�tJu7z��t�V�ٮ��
�X�;���+�9\m���lW# �4_D�W�����EN�?����D~�ٻ�s<�z�KG�nf� �����!��CĖ.ɋXX
u��S�
-��n�
�<�x�b��Ex�~����D���qzQY�b�>+�ʩ�#
ۚ�`0��#��;z��V3�}=����+�|8���c�i�°"jV����#�/A�)� F<ȓ�"2�dj\
˷�@��� k��
يE
R/@���	�~����K���2
21?�&5�+��ȵ����0�4�>"RT?���;\�\~8ή��
 �Ex� \-��E�)�Qm�����9��(qT�,�,:͉V���H<Z���uq|�>#��m�H��rزy�7�
A��
�������bgxA�S���f�5K�F�y
@-v|".u$�-?e��j�N3�≠'-n���jWw~O�೰�������a4h�]����j$�
l�)%i9�(�S��RNTdT���5pϢR� �#>�8��F�K�,}�Y
���\t;m������ϻ��cΒ$=>�8������kw��
�#�*��k����
-�|9�xG}b7����~F�
q_L��8��ߎ�d��@�w�����`�/~��
��[������A}I
G����B���d����TH��x�Ѵ�=�)y
���.B�JH1��l�%�7���:�G�� �[�B2�Q#��^��yd���Ҿ�����e��&�P���<iʥ������f�fO�T+XM�_$��u�<�}y���ŸZyij]!;������*��K5
��1l��z���+Q�
�Bg/���Z��|
&F�?8���}�_�1�8�GՁ�ޛ`4�o�{��
-�J�����'D�����
-U@��"Ŕp�KW�����
5���q
t���
t;�
���g�)�V& yƸ�ڿ�B�����
f%}|"
-lYUP(�=�
�,�����]���I�g� ��01���I_W�}��݋����C�
����
~h���.���6P+�aWQ��x�p��GT�K��O�W�`� ��ˎ��b�
`e	�ΏN��
R
W��_�G]g���f���= �Xsd���<]Q{��i�i�^��8��}d
f�N��]p4}�_��}��=~�#G+������5�^
f

,��l6-�WO�u��(�T�	�
r��`��
XT�W�e(0������hE?��a�5������
�dR`��� ��`�&,,	�)�->"~��GEm�VF�_b疠�#ʥn����^�J�'�΍��/6f��i�3]�&4G�;�G2
��>�u��*�W�s!%K7����� P�5q��Eư�؋T���)OyfQ
-�Ή�Q�G�}�6�Z�n���
-|m�KLj3H����f@E�YW:�Bv��l]~����RA����!�d�9+y"��O�sD�������D
-�0T�wt�/��Z��4��%���f
-m�xQ�m��'��Q�̙v��K���"�
-,���Z����G-�Z����0 �r���:胝gH�� ];e�j\�����:Ou)���G��5g���8
<VM�g�w��)�%y-�H��@����=
Fx��9�d;��=
-�,���r��:��
�
�F$N��؛Q��1"T��XkOċ̈A�<��)@79|
E����[nM5
J��J��}?;����U?�)��@�5=|�+�vE�wڃ.��u�������ªH����P��a�"�2"���n��0�_��2�
�=��dc��3|��d��XT
B�
�H$��<�枡�%O��y�����g6�3aP���KG��2�
N��r����d���وdk;�����
��h�"�y�E���|�Z����L�P'��a��q�x?�<BQ�4l���ʥ]�WS���A��$6�e�/x�
����L��vd�*�������u�r�9@"�
%D

@��N?���̹�XԽhF���s����_W�\�|��
��?�JF&�lF`��[h�݂�� 0{"�w�+(o�iTcį
j����"��3�-�LCњP��6�_��D˾�:S�cU�a
�"W~Dk��y �)^��L��_���+?՟����NMs�;�T3{�#��q��!
EF���h�����Q���{�D�$�����kѨ�����8)��kal��&=�V��1[�ZB�,�!�y�����k�|��
]�p?����
~�t�F�*�+λ?D ���2�?��w�b ����U�:`
�y񼟴�w%2h0�Zn�j���]�wHeӚ�v>��zD
� TO�`8
����SD\�>�;�}N��l?Tk�a�b6M�m
ꖱ�ƌ_� �U����.[{��M�l�џ���l
M�������~���T:�Ч�Z��4��R��ȏ�-m�<�9�d
y��(��XL�� �~
�����8e{��1]�r׹\�C�D0�FJ��ׅ8?���BE�"�|PpN_tn�!HHT�P5*L*�
�;�PT���A)
a�+RKv��Ȁ�Z"��
��W�ɤ�C��M	��
��g���ץd�P��\�^�.@
S�T��;��(B�����GB;HЦQ�*��7��;΅(�5	D�����w" �L�����?~��m
g5$�8'����37΋��Z$ãDP�&&�r:�m�ك �K�>!��7 �5�d�9��
-��߻��܅}&�ո��"�!ke�v���RQ����aK�+n��V�$�A��+J��!*|D���J��7���q&��KPP�5*�+��f�=e��I��Ϣ5Y�5)T
x�c��
��}�ܯ��D�Џu�{��jifsS���q�m�پX�F��/��*��~6�?�����ݯ�7Q
f%?uy��F�@��#�-
+�px��L&6������	���LY���MA3�
;�*犑�g�yTɔ�H@�S�[����� N/�勑����߽��!�Oh�2��9�'#-؃�^�$=؏ 
�ܕ
Lp��-H���#�
`l�S ��
�x��+� A��a���b�hqB輕��v�0���}���	 ��!Z� X���PJ`¼�2^O����'r!� ����iz#����2רe�d
��l�4�IQqX/o�Ǥ����ʈ\d���h�5�<��4%)�ж+A>*	�����[D�O�@˪���S��� *5w$�����F�~	�]���3}D=�5܋ [...]
-����n:�@�jx��D\0��gDN��
6(*�������N�� U1��)�=x�+�S�u�������ݞ���=�ߟ�q��/��l
́�
- at w�FU���\s��QN�c��?#�x-֭�1͗�UV��=ўُ�ay 7���7Y�*��Bew���Yx�
-�����y��C�V,R����Ř
����ؚӱ�
������N8�E��,�i�
��j"���k��2�kɔR�lv^BON��CP

�
-h�y!��ۀ+D|^P�eƫ1�^&{��yC����3Hd.r�c<6`����,���L�y5���	 ������V	Ю�'�TA2f��� ;PQ�
��*��F�m?�[��s�4+}
���A�����
���
ߞ?D��0�ߗv��Ϩ+"pQ���������2h��꜑�fW��q$g5��eW=�L��G݀���"�y������ں�����
(���^`���tގ�Y!����]d
��q�)D�R��A8�rF�!��.�d�a^FHK�H
�
�>(���*)��&��qr���h
� �1H��A�e�
�/Hw�4�0��.]ۓ��*=�S�G@�ѐu1�+����
x��Ǘ����u�	UP�4?��b
�B�wǧ�JT�L��A��s
�[�@+�+�
"y\%�1���C`ڗ�Fv�?�*�v�	���gW�
2
��r8�[4���F�'������C�2+]�
-(����]�Y!P5�a�]"�8N�A*�c]�h
�uJ#��H?����T���&
�` �M�&�]��>��1
@����T��`�e'$8+K�D��
-�<�*q�����
It�*����#zU��ͨ�|���������­���_� �S�Mm��kp�w�b#�b��1�m��n��QY�.��7P);:����D�u%�vj)�b)�Π�Q��0� �<�'qpu�@�ǸsF�	7��K�s�`�h����O$�wbԻ�M���H�Mi*Z7�9����f������Q��_Fh%Ҡ�����Ԭ��9��fz�u
����+�Ȋ�]5n��C���
�	�t[}A��m�(p�F-�
-5X�P
�À�Z�v��r(��@y[΄��\J��B����/D��Q�,�u���@� I
t3��bG
�)�oUs��� �"�_H�
�Dnp0J�ָ�;�ma
�(�h���\��"(�l�U�3��r'�n/L�I2���с"�2
�+-�x~wF5�i~xXѧ��JѥC�{~6Xj���9^�{�<����sS��0ug�0U���_����'

��8A�^����� g�@�
wnC�z�M�f��
2~�HMW�r���ȁ@%v^d�n�~��s�H ��>�a�>�Q;O�Q��d�u�B�["�O�$�K$�0J��I�G7������a�|�]�è�D�3��9�_tb��
-gM���%e���Z��sؕ�+y�(����:�u�
�_��6)j�7B�d��ۑ�:iyo��f��(4t5���/ 8�oF4Yِ�|aK#�8��x�
M���c+j�С��D���-�뵳/�[��mIj�V��	��4�U%��7�O_qDN�;nH��nj�d�;�3�W������ߏ�K�:XH�E&���
-�e���눗��䆣�
��	���?$���&�y�-o둾zX��?����(�/·��
���?��#
��:"���3]���]��V���M�u�lc�M+^y8�ۖ��X�Q�s�9+9O�m�
�q��(	p\]d��3��
-TS9"Ĉj��&r)��$h/�D�b
��>3�{���vk��;����V�<���I��y�tx�BD�#yR
�7�����I�Jj��@߇-1?�5j;�
��I�^M��
)���
�s�ZB�q"���!��2F�`& �ݜڊ;W`;/zxF�\�Վt�*���:#ǀ��#{�o���8PL[��z�R�*Q��h������H�	��Ӆ��o�
*T�O���
*[��X#]�`؁Cs >�.:�����޻1�)$5g��"�
������Q��ߍ*ܿ��M8�W�KY04��&��;(��B
2�w��������]���A���BM��z$���z�c��
������2�ӅJv���օV
��G�T��t��lCc��
��ɐ���0!G����SB�u����W҈��:Vǽ�%��������A?�G�)���#�T�`�0B����}���<�m�c ʑ6���
-���z*�z�-���K�͉`�$�W��
&
��Mr�~��}K��
�[�>J F;>]�u���הj<�����7t���D��g�Y�L��ٻ��ť�2%�Z������^qwvb{5���Lx

��wk�`Q�.G4����l�CY��2\�5���{�}7'�������RD����}����8\E�j&|	�
�<�9��<�k�a�BE�!L�IS�E��i{�5vC���'B�n�)���ug?@�����>�
-�"G��.dgu���ة��O��-ۗ���5L#�TY�+��
��E
�'Z��F-�G�P�w�m^���Y��8k?_�<`���*F�
-֌@&~%@a��@xm�^NM�*rEL'J���b,���{�2̋3w�O���]�0Qm����������bgȳ �Ÿ��_ǕXIeF\��Z2��#��K㕸2\�5��-*�\�N�{L �W�Rk��#>Z�
Ɏh�5e
��H�}��c��^�i at V��9�W&�=�!x��@'o�����CA�#z���L�����u�_2�ܗ9�γ
S��!䫒A�U��z!�7iY���b�G���^
-�w1�<#�Gu�H�3XN$��
��
GF���z���Uv�+86��
�ׂٛ���9Ɣ�Hv���-١V��i�%�qŚ?1�5ǫ�f͚��"����.�'�z*�3�S�,nP�PK �
�E��'�c
R��.U���b���6��=�Œ	���S��w�\��dDfw&�wH$���(�~�|�?Lm��eM�l�Dw߱4���-�]
S��H���ĥ#8_qp�N�/Yx;����@�w� f��	PR��KK�uhH=�?�3�
-�A��D��'����#-ԙ��-r���2r����}ԧQ}�C\|���?����\�Z-g2��+���Z��	Յ@��4�:ƭf���<M�W��g�%�P�*�ӯ���6JS�;~����؇S,:��q8g/$9���z��|�m�ڃ�����T��ڏIW��kVTB3e%U���6�N����%� �
f�FR��>� wH�O;�I3(mV������%��gi�
���y��É��0͎������S��DD ɖT"�� C���#�_�j
�R�A%�
oO�J4����~��E�O1�
-3
��
~ᯯ�i�\�9C2E\�4=+��Q;���
�c��;�fT�[�2��F���K���gI�n��n�2v�%�N)���.�
{�ù���s��{��h��P��
u�
 ����\Dz���<hX����.L��7f���\���ҷ����)�Dq�?�
��M|XX�_��牍p��z��;l��F�
�k�nJO������*�"��eU�WޛW%���b5�H�Xϒh��
#� �NC��6�x�>�#5x?�;�o���$�� ��`�\��R{w[������dQ��(�(8���F�����M%�
F��^��u���UC�)���#6���P�)�z
-~�md�
�#�&p����/�眩���
��aDqK

�����O�S�|�0_G���9erF�:�8q��h��u���'�_w��p�b�ט�#���3l�x���J4�ͧ��p	7m Y���x	\NjQ=��
-1�6��G��
����+���y��[2??

endstream
endobj
327 0 obj
<</Length 65536>>stream
-Y/���ߩF�
-�e	�#�j�"~QF�]6��
�Y�k���!(�����#�K���
1t�8�67����g�
s��eW|����5>���#�ϱ+
�����r� ��q+�3f�6*����t�{�H��՜�dߝ�r��%�^��>4S;J�{y�e�۴:>��"��|r_���������\i+�Ѵ��
W�m��g.O.G�O�
��@�$�e�q�?�
���(��iPW���ϥ��&,�^?3���[9Ӥ�,�'�C���#Pnbi��}�o�Z����� H�u�䤾�]�5�%c-z��ҳ
-��
��D�ԋ9\1=7b�o��G�'�
Q��@J1���ѝ�Ӿ�$�}Gu��`;�Z|�CBl at Uըm�b��+B��7�:����ˉ��z}����}#�^����(����.�hu�#�%Ll�)A��U�Y�$wO���me<7
�
U��v��
�#5���n�8�s��ܡC9X����E�=���:U�U�`���R@��� <�k�
X+O�����N�~(��"��N
���5/���G�:�("
�(�<x����q���l�����5L���%�"LRP�zی@G�( ��rB���P�R0(�\��OxZ='��t/����
-U��׉gs�~̏�&�^^��$�Q�n?4
��挴:�hH�#�J���\g�@Y;��:�4�x J�i+H#X9[T�&�D5�c��`�l/�&ޢ_���]T�N{Z�Vǿ����7� ����5k$�k
0 �'\���\QsJ��?S��]P���bJ
-Dv�*�f|«f
=^8r��M�	4t��1<��|�����i�hf����
��l2�	�N^
-G�e�w-F��A{�9�/>�&�Oz�������b ������ǭ�q��g��*�����l����-��+����`��@�޼o�C��"� �z�Jh_/úEop?���"D����
���1��vƅX��}����dꠣ1 at V�H���,2�
�b�=�j�<�
�NI��#j3�l���׏Q�z��Ї]Gfڈ�F�_L�י$���O�N���יH�Xi4���J��3�a]mE��XID����ȥ
H*F1s���a�LKh�#����a�tfT����*t��@��%2@�w���P
9'���*Ip���@^�ǃ����ڡ��]c.\�"�J��
�3LA+`��]11�"#�rbvt!<���
Pd�K�C��A���\ջW��Ƈ&vc���
-��sK�R�y?O�P�s �D�I�)4��
�	���^_ʪw�;5wp��ƕ���T�>b��My}[�� �R��Q�O��
���Zf��_�x[�"����׋�^])��x���W�^y��z_��>!��/� �N�\����T��Y$�b��z�v�˓��egg�
��fU�l�
0$�`��U�-݋O<���
^�1F@����6bǃp�I89⯨!4�ON�f 7��
�/A���]��b����)Ѩ�K	���C=���
?$Y�[�A]B�����
g ��H�����Fj�(��6���]�1��✖+�%1���Ɲli�t��Y�u��($���f�D�2C[m*�WH
al�xR~oo�0�uQsbL��o=���#+$u]"���3]��o�
��/ �
���@ �^�!�-�<T�'�i/CU�	7b�
-�ߒy��ǥ�
�Ѡˆ)��:t/@�F��J�
������Ԕ��Y��ǵ��(cͧG�qo�s	:����)�1�T��O���(���c�r	�N_#���:�3�:�
��sYzck�&�h5ۡ|O�2�0��C���R���4Wm3�ݙ:K8+.<R` �� ��/f�Ѷ��e�Mž ֭�«�v�V�1mʫ�R=
I9�L�"���c`&�tqf�>P�&�
<iU�kX�
�+�3{�����of.{���h(p��s
��2�
-�G]�<�e�������[xX�|	Y_2


v����~�/�'ʆ��K;|���Z�3�j�J��E�� ��x�>�D�	�>Dy9�
ѝ���ASw�N��
󩫫b�o��<n*�|A�#�R�
�ϙ��nmGid�$���>�F��U����Z������s��`���&��\&�)�!� ^d�{��T�S�iyؠ���2Z�#�ia?���?��������'M�4ڀE0|D�D�I���hN P����
��{Ģw
I�2*���'K��m�
 QYCԂމ�j �i���E
�:�v��Y�Xղ�������v�U��
)�Mz�����
k p[�w�#�o�x��-���E
�aM
}�a�c�� 6tx�5b�6
��&
&�9�k��3߲He\���ˮ%�VJb�d�xJ͝�.?��0�/f>H��/h
*?j���R	��頠"�P�V���G�F:��ZOMK�*xo�հԷ��#�E"��+�NpQE�E���
�2-o�1�S
�ƺJ�Ċ�t���xh�:H����mzؓ�h�p�r��n}���/N��(���kP���&P�{�W80 u���&�S�����'�_ f��r x�|# ѫ:�7���
�+,k��=�L�W2���t��T`#϶ǚh[i��$ή
5\B��m��狶!%�j��e���Տ
-������4��N^ڹwC�~�uQ��/���N>@7J�,�@��qՏR�}� R�y�eC�t�Dw\b����	��
-(u�D�;���.]̓��S�&�L�]®���'�&��@]��fdFAg��T����Ү�xPp{���
-d8�D�K)a���w�� ����
�Hѐ$��z��L"@/O,<���@y��Z�]OVy�UCIŒ�&�]S���,�?Yc�K�d�C��eЅ
��
����`s�q�:���
��/� 
N��[h��,y*-��+,�%T�#��n�#j l
�>��>���v�����(�ѭ���%{��㺕_8n�xrŮ�3'�3���|7� ����3�y����.)�� ��V2k,���O�r��5.��m��J4��L_2�3=T��Uc<Q�u���Z�RBt&��
�/[�8��
-4�J�t^H����A�1:�J�D�	D�-���|�=dnXxt=� ٬��R�A��'u��G�
����j���K��FK�u]San��=ڿ��cN���0�"�'@� �`�X��Ź��lR/�}
���j��/$�>;�r<�E�M&��0�
7�1�
�2�]����L$�1
�W���!��`���������1���
��h��x��
1�[�P\
�~��,�a?�c�u�5j9��6��+r3�”+���K�>~�8�TL��yC_��;f��}�ڑ��D�Njb8$
��
ˁf�.<��^�NBG�~u���2p����31�Q��앤�%I�D�9iG"�\j�[S�5�L�?��D��
�^xp�e
��\Pa�/ű�}X��l�߷����e�
l=���
a66�y�u9�Z
-�^3
F��
-�p��@���)d�
Vt�k�maGT�+a�H. \�,���ԣnVJ���0h2h����-�^$�}�ۙ�ێ�3[=�{�8=ݒ�F[ޥ��
6
�B�3����*}����
y�Y��,��w�	�X����
�^�^ZP=*xЃy�:�7
_~Xp�6��9&"��W�T�=�P2j�
�}��st���k����?�G�/<���??�
w��*�(��sl��nʙ�;AY5��P�/��G.��
�4nTM���s�
{r��>��ߢM�b=�:�:R9��K}
-4��T��;�W4�
šBg�
�B�_d�
�Lu�(��bZAT�m����ߨ��ә�g�LC�>
��1���gP^f�����2�܋.�
����qD`�C%&ؕ��0^hF(��^�"H‰��
��F&�7S�+YS��F�ufXE��P����[�>btX��\sS
�[
R�����
�:v(5��Uh���<���.u\K�|a�4�
�=� «Hb�
�m!c�-�	P �5���`��

��,�
a�}�Y$��;W=�gh�A�G�|����B�]'ieϼuo,�Tv�{dFa	�os�t�� �3�N@�߼^��au�K9�E܎�T�w�μ�b9�,i{_+Op^lI�*�3k7�*�*���%�pF�,�����E.|
�f'\��*͸V��3`q}1�`N�t`T�?�ü4J���u�y�b)E��I>�Ճ?���(z��W�����U_G�������C�'f�r��K�gL1�gC�(����ù��{��߃�?��}�o�OW�]
�D:���Y8?������9
5 ʈ΋*s;`��Q����H�!������x18� �F*���XB
f	�Η(���A��8i7
-f��h�n�����HTz)�ߣ
y���nچ (�	Ҵ��s6su0�s2X�r���h'� z�
���
<�>�K.������9���?=�Q��l�
- ��
-pS��

�ֆaj��*M9��A�LЮY9G�:;��Qf�L�h��"����-�~�$0
-���S=F~�
�~���
檒q0x��GdU���}_$>d�	�������U�\L{��ޮ�~�%ʭ��-�"4�x���/�� qM���yգ�C�)@���K�
6�'�Y�~'�����.T8�ZڞZl�3?��o��-�=2�)x�L\��":���B��ʛ�k�4��e�m
{>����
����,:��Q���f����/c�
o���8�D�%8+h�-9�
=T��^�?�
-�
�:�
�:X��Ғ6'�'��՚�A�8EH��Q}y��^�b��ĢE�:�([F�
�
,&.]ۮ	�2g�|ə4ߠ�v�PֻZ��$)u���"j�KY�+h�я|wt�k��d9w���U��a����r;J��^U}q5�n�
�%�

�C�A8��3O�T0#����f�
�N����]{�]J�+r�r4<����.��
-މ���W5�
M(ui��'���Tz�[SP�P�2@�.�01���k�XM1B:Ҏc&B0&s.
+s���9sdͿ��QX"1�?��9A�ؙ��lq���#@�I��{ag�It/�����@�%n�n�tEzIY�J+��?z]��W|Ee��c�_
|G�D"R����)���~��1#j<"�ht�2T`{
 R
 �;LDQ>]�h�Ĵ�ݺ~A|�'*�,@���A���(c|��k���h�lŐ��?EU�\_S�~�_���Vh�E�M��
��Ё
-@����9� z�@�j����K��GD�K��Bye���h���#�8B�5s[�?D�*�#�=Ṗ-,Z�/�(:c�[v�*��/�c��:q
�z"��'p�'n��
�g"XY�

��6��K�v$�T��Qו㤾�]|�MeG,H2�
�vA#<|'�^��a�@�fw��"љa^�m������ �d��#�(�����ЦW�מJ��q�W�%pV�:'Q��zNNo���bpY� ��j�)<������WI�H��%���~)�g�XE��l���J�����(Cs�e����q�������|@j�~X
�1D{
�^ձ�(^	g
�hy5�t������Fy�k����VZ㕌!��B�l	�3�&gGos��Vg���FR

QUO^�F�.
�fd�ޛ�n�י 0=*�R�Fͽ'�Lv�vD�̀��M,
NJ宇>���N_ƫ���-�<��–�j81���p�:��5����G����wz�4~��>���kQ=�~� ' Ǧ�*�F~G,*�Q��{
�c�]�?"���5��W�go'�f���ڹɽ_�֏(�LcV�I��|2;]"u#�*��
%��I����:���[B{���dž�Z��ʈl��ǁ [...]
�}��;?�ܷ�
&�L̐>�Qѿ�����'s�`��e�P60Kw�>�,k�[����[��<߿�?�}��5�$8J��췴:"�;rp�
��/;�	;;��nfG�E��o�$R���舱8yF�Fv�\w�WѯW�N|���f��<�p6#5���*����ؘ�3�0#!��h4Q�K

-�<C�����E�F�m�䃴
<����ֹ�*�����"Q�>�`���\&
-\�3���
-@,ջ��>�(b�Я��T��Rc=j�	��cW��2�b���`h6(�m�wW�}N�鉟��Vj� ymfG�x�l�����^�V���v�jK�KGja7/���A�l�����?ߙR;�������z��U���?�{�'��5�9&�9po� ];��+sNP3q��
�����Q>b`��¨�g��.�d.}��'!1{�ԍZ'JfW�1�"�H���t*T��<��Y����f������qs���i�Ø:��0��vDu&�VW�sX�~�'�.�ۚi�B��3D4%DT��Y=|�Ԯ�1��/,́]X{�o^�����a��T�36f��i���Jp6b���uC{����ر�5<WƨOl�!�Z<°n�� 0�3ڋ��T�
s	
+�zL��a�k�8�,��c��� h�P�S����[5�~os�1Z��c���8�M���U��o�C�����������Z:���!�*��kJ�[S�fy�`[�h��/F\���M�R�N��ϽAr� [...]
-���9m��࿬�L���|��x����6�y~8&<���h+�/�,C�t�A���_��'�M��]P�,6�w����J:�D[(���W�C����}��}F�����p�8�y�W�Bm��$\�J
�T�e'��<w<>v�A�x��+5�s,)���H
��A���
O~�a W��(������_����
%t��[�uZ_9N��%V�7+<� sr�gN�0��_5�
�c���% ���f1�Ra�5�f��ėU9���cqf��KD��W�"N
l���(��[�=��t� ��g�f|�(g��	�۸���ĉ+�k�I
�Ƅ,`b����t����<�K��nV��Kbs
a�v<���G�
*
�:D`��:�D�R�`������"�A�Ү)vcx��s�d��PG
I§+�B~�z~��D��7�l��?ˍNjU��;��
��~�4�ڥ)��"���39
��'��H
���g�
D'{,���(��Z�O�<��??�����Y7�	R [...]
-s�&t��,a�a���#�C4����{��yk!�<�\;�{��W��R&ci�ڛԊ�Y6�Ž�
u�a͌�=�����cV1X��j��A�񏧍�����{s�����H֬v�
m�*<�a�`
��ŝf��yt%�2��D3� ��z;f(�?'b%B8��D�7�?��rW������
���a:ߡ-]a@��u��ĿS��jtN��pK^t?&{�w��z* � �J��Y�@�S(�<�d�#⏨�5j�l�r�W��1�[�d�
t�0�|��㴬 �
-(:߃7�V=�6�RN����xQ{)��Ѧx�
���&_�8OLҫ`��r��w�uY����)&(���5��~p�(^sayw|��E+�m����]��&�	�q��j��"�“�l��g��vmK�3�'�;�R*��p)�۲����$F�&KݴU,�*I��w~D�\{͹�@�(r�ȕc�qȌ��l�%�ј��8Ĺ'��a}t.��-b�iP9A��ᢟEa~1��
疊��
��$�rP/"��gh�Չo��.���A�:��&`�K��=��)ja��qX�+�@(Ϙ
�f�7�}pJ��w��J
vG�Ɩ8+��l+R�x
��i�yIδ�G�VG��mТ�+��JƉ����A4e��,
K��y8�����kMXdbAs|7!�\ �
-�n�kN�ke�3����7=A�[|��i֖��+QS
-�-�B
�!
=D9�L(K�a�K?�у)3c���D|�
�I a
�8"�侗K�*��U���ީ�E��
�h$�=��
-�����!HlQ]H]G�Sf��i�CQy*�yDZ�Ӝ
-u&�P�I�W�g �p��Jleq�<�=��/1�b��
�nӓA`PN��Q�hh+g#egj*f:n,�36Y�b�m�n�F����Fٵ����PF9�E�
-
�*7R��ѮQA=J�$�I
�o�#렚*����I���ԃo��p3�
���2�%buH����T2���0]�&7537��
;�����p�k�΋0Ms�$�H!1��ݒQ�s�wo�4�̔
"�1L�m��l)��K���L���һ�lMf!r�b�KQb�U��1�6א_�G
(+��&8jF=��ġ�­�^S�x��ԃ�
��+ۄ�5U�|/W�Ka.ֿZ* ��$6bo#��s�4v)�8@%���������܏��ӟ��FB�vu��"��XіK��
z�ݞ�c^�;�	�LѴ���B�"ZE
�Ї֞������Yš.�H}�%8�B�T�@p�
��������5����F��uGc���tm�]Y\,�S��
qQ��\�S���W5��+[/6�BnLGdn!')��.�Გ��x�	lPd�#�^F>���tԺ�(�Z���F�Bd�i����`B��5

-Aݝ0�
���q���6
-p�5�=Ʒ%j	�����r��H�v�<����*�  ����R�I�����3V=��f�BZ$��K����Mw���I�o|�1�
��x*�:�9� ���D쎳�9�(#2��$/�) ����c[B�9Ve�'x1r>�
-��I�=vi%? �@d�� |��A4��~#�2ԅ��� Ί�F�pΖr�S�;PFE�i�#��8g�Sn�ڽ�9lt�%\��jFta��K�]6
N�¯.eue'<
�&
$o�ƅ� �Y�[¸
-N�*�+� Si��꒽4F'�7t��
=�f$��I��t� ��,͜�P�Q�)JRv�y�~&����O�H�tAS�7l�N�Ӂ���K0�NrGB�π��N�� ���9%f�͌�(|@��� �
-���
�J��#
�<ۋqz6��3�%(�}�"(�0b}j~��s��R
{l��n����4iV�8�Ia��5���Ln�I�F
j�f.�R�F�(	K.A1C?����3������zK����6�H�8�,�9y_�)���L�i=�����^|Թ�g��J\Ց�K�ڙ�Aa�x(��C'�7C��C��tu)��s:��<b�jr�߳�"LIތ��|���C��5<�)}x/���GeF�
ݙ4�SO$����)!��\��IF(;�i�"���]�쎏��9TV��3���. ��GYQِ�LJ?Sn髟��i���g����
=���R��U�s��@eD��4�Ŏ~щ�J��
 �λ��Dx�+�N�l����E��z,0_�=�u��P`��y��tC9.�R���dD�����P*���n��*�V�N\�֫,�ub��~=�&bX&��G�$��0A����h��y�/;�v�LV�l�<���,o�-��>>h5)A̢]ݴA�K������
VYR
B�U3�|�5%��Li��y`S簙
~XX-(��
E�Z+����W�;Td
T�U�A W�=[�Zܝ��;��Ń�7dGʒɅ�Yń�VZTrIUa޲�
J.
�uTh��m���K��;�n�:�t(�P���Ou��>wȇ��I�+n�2�g�\���|�%h!�)t�膸���h�Ս@�ݘFS2��o���s
��# L������(�2���2ِ<�6hث^g�4� k<$E9�	6k�hTJ�ҒQ�p�q����;���@�I��Ez�#��դ�b�c6+ݓ!i�����>��z���1vLD�H�_%����%\��{
-��ǯ��o�o���_?Y~����~�������?~���~��������7�������o��o��׿����������_��w���?~��o�)���}��g� ����s�nj�e?�>��T��d0V��!RoQ�z>8��%+LnI�O^J}�Ґ�7atȦugs�2��I��ߤ�.'+�BMŬ�
?A\���9��Q�^�:8�s�7�m�9 NAR��m�8�dUN�Ԩ�	zP.�2F��M�CF�F�Ԫ��/��e���
7RN���$vX��N�Q	
-R�T=M�4� y��Qg��vc�����#�[��
~�&L��D˕���$ʜOF�C(g�ߺ?�������@Y)�In!�[�%<�n��R���b¨S1�d��E���3�OX
S�e�{�T�sPr�H��(�Q���"��jS5�
�5m at LL(
�8p��{�*�#����$7��iӦ��ք���HWs�.._
X�_���r��xJX��3(
�!*(Rh�.2�B����|�0J�򋃲��5��E���u��
*_kp���
}q]k������W�xI]��<�Jz�%��$��II�G�)�f��#��rNߠPR"f5@,��|Pz�x��F����a���0H]�㦬���@U���#yǖ4� �P�y���6�K�8G�(��e`w�H~<���a���0�ʽO���
L/ߊd������E3T���ga��gDk�_y�7��.�II�zl��dAx�T���"�s�d�e�&���d%{��q�f��� f�|�I!�0c�j`ƲK at qP�C�=q�
-%c
 ��M~
e����_O��|��oSʇw�$s
�2ݫ��7-�
=12���vF���88HWM��G|���cJZ�NDh�P���K��,]g��Γ��N<{�����1�Ѯ3�"PQ�KD���Z
~�I�/ ���3D�q[��^�L9 %�g���2�Y2�1f��"�½
[Dm��
31�8�z �*|��c�6���ӵՃ/�
9;�6�\mg�(�>2��7g*xXq��0dC1Q��8��d�����u��R9��jy��T al�(A3W��|��Gy8�MbĄ�<��A�=/�^���
)�.R��������ñۀCD�>�E�8ڜ�X��t tK���!3smp�;���=wg��v��]j��g+1����A��:�x8
J*�Jb� ;��
C��=� �bn�!�G��CW4�9SF�v!Yj���,�T�6~"��&�j�t~Wv��c�o�Ud� w��z��'�)���p]

�Q��Ԗ�ڪz
��^-Ie.�Z(�b�*N�oG�7;�,K��U��vg�
-Kā�
+D��E�A&Y��
��pT�[�H�l V.�{4�-xaO�ɶ�dU<�$�%�L?S�h��
-�U�
a���Z6(6�Wl�`E�"A������4W������p+?
��+wݿ�bc*h��
�
���9�&3
���j���Qe�m�l�O�6��4 ��$H�
�ܚ��W)�
�|�M,�����H��lip�9��&�1]
Q���/�-�]�7�[�x���A����
:�d'�8��:Yg��|n�v��<q�Mf0j
Hأ>�щ(S)�5\��q�к�;(v�)!BN��i&|�Ff�h�c�~6�s>

��dZ��(�c��8���ߛ�V���-*
�#���y���r,K��ֱe�6�$02�
�g��Of�?��*lL�6�~,�f�����1\7q��i�<��N�T)���r�
Pj���
�Ҙ��
u��
�g|���$[��""��Zƻ���v��=���0��-���5,�㚈�hya�|�j����}�8�BU�xp�E"PQ�`6/
 �ǁ�&�,�Ñ���l��W�g�m9���m���<�M�M��<2�M��O6�X�U�A�nyۤ�ˋ'�	h�
-�)g���e������tH,��4|��
ĝ)�=�$�%�k���R���O-Ԩ(Wɬ�`�^gi8��Se��^T>�s 
��L �������+�=8h��4U�ߙ�5��%�D/b��^rhL�Ş7)ːB(�rV�l=��'U��0e:����a��U�:�v*�P���dT-
-�3�Ŭ�q�ED%F�B�����f�B��$�g' >��Zj��J<�'#뎰���ޑ�%)(ޑ������"b
s�B+�$�t$�*F-*

�i�Bl�E�;�TlP��2
��|&@Ǎ���.��U
���
I�$�7ac��I��캓�rzA��
��߇�`��LCƐ��bzt�?��,����"�X�u��2
�d� �;S��������h��ͪZS��6y�l�
-�%�_�2��q&<5Uh���Gպ�ʲ&�Q&1����ӏ!
-ߢ�bs.H���$7ݺ�y��%��m��� Je�rۗ
�2��vM���j= ��:Ƨ�30�(i 6���kި�sY�ٚ��W�[i�
���/N�+z
��.��A�G��uV/Ճ:-�mUXJ�] 4�!	��s�zG���gw��D�
�y�)���qv���-Zϥ֐�ք�
��<�s�� $m�
�ma0���”�2pm :�%�_��x�t��_��<!�A*'��jw�4B��T��v��Y,J���
i��D���V�s�Q�ٶ+�MN�!g��ڴ4Li���dz��*�`ʖ����ò
�,��P�C/�i��ζ�˚	`���s�/���v}ѧJ�ɇ��;={)�3�QĒ
�y�Ϯ�ێ�!�+Jj�=􋦜3(k!���W
81� %u�U���)�W=���k�����}�%D�S"
�d��#v���ݥAO�i!@H� RG
�?w��m����^
�$(�G��ش�m��%����x2-w���
V�'�Ha�m&�W�B��ܟe�l��
����u��dž$[D6�!W�M
��.�V㞈
��Ԓ��5uj�����u05�v
0s[�>�EGe`����3`agzdNAP�=�38��ɋ�=ߤ~3�]}Fij���^�s{�?����U/�5��<�;�V��Z1K��:L$n�urd4�{}�
eL!�;��C'�&���#����2P9�n����b

-ЙdES�B�V��ɤ>��M4{I�����1ec*(@�o�x��&oO�y{j���B������C|�J]=�uG��4F��7��s�6AE���^�y��k���d��L���Ms�SZ
@�^���f���c�O$i���h"��$~��5���u�ΐ^���
����
'w�=4�
�(����,��&y"�2�T��
��ѣh� Di
��3�N,�g��<����2�/=���/O]
;���!��6��SE��%�Tx9�/��&o���R�"F��#XuʀX���,�"�J�ռ#����w��z���d

&`O>�X�	�
q뗽�O@���e!�Oh��
�T�o�2Te,
-2F[2/�Pb���Րt�5����ڙY��	�l�~�\!��'�Ex�L��cn; HD�,r`S����V/r�W�݀nny�͠W�	3;=��Oe[��Q�p7��Kp�
�=N���D�޵;�����/s&�

����*x���ʙt���G��$�À�c��d/�QQg*
-��u@���dQ�����~��эp&Ԙ�K;{
�`o]��ր�����}h+D��-���(<!'wB�6�,�9K��Oi��\XM��  �L
�҇H*�V��>�����z4R����a�s����9T	��g>�Q
 �^�x�~�%
gU�λt
�[�eف��r"�憗��β�����:�U�sM���=(�[����� �-R
�A�X �US%��W&����I* ����$�+�`�|�����pcYeDP�Y"9��J�i�
NR8R��+���?Оs7m�����\�Y�_��R�
��mC�
 o�Y)�mӶ
~���X����S�+
%9I��jOfLa�8�_���v�r�H�X!�7
���^ֺs#�'`��F36
Ҕ�
�%ޝ׉%����(�^�,�J�)/���@��$��2[�3iޝ''5	�
-���b^����	��,DE7��Ytp`�j`���|���#(�q�� 

-��}
v@����N�W��Pq+��!%�by��):��Q�[@�X!-��K�u[4Qɏ��
�5�w�қ/�Q��gc
-�Kt0s����޵w�wB��'Be��,���S3|*�T��_�ڒ	
-�A�hÆu#
e�TdE2���w]Eu����aӱG�e�@&D
�(�hd�ߘ�"MTҩw
%u��"��I
����T��h	6�z�T�h���,?�
�
f���)W�G��$xW��x�ċ]O֟9�`X��O:&�.�
	��p������7���ln)���
�҅2
���A3��+�)�� �)��*`;��2:�x�{��$��8J"	�O�7蓟
�R�y��!eL5�r)��K�V�^5� ��n�
���L��.���.	6u@ Ra��5^ ��r�}��(�����

�UJF���B	�<�{ ��fp�� �E� 
\H.
=@ԝ8O�	����;L�z�{J�Q�:�jA(����a�t仰,_����ܡH\����՚Q�@!;N]L?H�x�+���!��n��/k{�s���
��{1�ޏ�i_8q �櫌��E^�m[�S9��ϽpS�䲱>��M��<�bn��ng�qC[Zz�2�)<�ɢqB�*8�RE���U����	��hKn\=o:���T����^t��"��˰|\�$p&���(
�
{I�MӃ�]
X���>�(E��Z�DJw�@7��j�i��_
-�s3���q64?�j�.
-
�z����<���؍��ҵ�f�T���E��߃ �<�b�E$� �~�O���:b]/2'⢤�*���>v����T���T3��0�]X�Y0��-.�ޫ6G��d
-�赑8�� �X�o��9!�`,ҖTNY���H�s	CV	C����N�
��"eI�
; �4�yH���;���-
- i�w���x�
�=e�mr�"�ǖ����2 c
��Z}.4˲
���
����)#���z��Wj
B��f�#�Ԭ�
-�Z=�6�;Z�O��KgbK
-�U�(�XZQ�UP�D?��ϝZ���$�W}��QR
0Hql�;���^� �
 :�縅�/z���%�2R�U�h
r�Ew��F�ʶ�{k|>�+�ʔ��P���⮙�4�0fa�2I�꼚L���P��l�Ѻ���Vܝ���F
��n<���F�h�pC1
�<�2F��+rբ⵲��5��vK��ՉD�z�A�Kd9� Y�V:���X�Y�
���l�8�8Q�z��jf�&�3i>�^��'�j&���9
-�&|$
�X��ԃ��
绳!&��q�pC�D�d2�L��>��s^
RO`��
��RnG����
��v[�����s/�I�fz�$2��+B�6].lZ�T
4K>��B�.ϧc��PYa��4U3�m��
��/)���92�c�Ѱ�$��Pp��gG���C�>�D0%V�5
-K��i^��Tlsщ=!���
G���6���FO;�k����.d!;r���q�l������+�xmWA
4g
�y��P�Q�@�� cLdvMqt���umE�`���h�bJ"F�0Y
n�pe�����jh�s��<I���t��s���Y�R$�FC�˞IB�D6�γP���&�>(l�?�>s
؝�5�
�j���nu�d�l�

� �>
�[����B�@W
�������B���[{>��Nu�i�7)�1�ep�,��jL+���7#q
��6ξox��W��9�N�

p�'�@��M4������P*��
0
��i�0&�0���d7�
���S��E�Ґ{�Y,�4F��╦���ޠ0˲?�
-�u{0k�q�%v�&�i�	��M�lRj����}�ɰЋ�X��
"��ᚶ����[��f�8F�
�݉
ы[�6u���<V$|�
�y%
��^�$��&NIW�f$PDG��\,��3
$�d������G	�^�dc>u��x���Y/�@G�M1��������n��E����������V<�J&�#aV6�j�J�$ͻtNw��
��?�s�+(��QM~~�M+̍+��.Yv�nO8Xe9
�]�_hs	?�
-ԗh����
��=�0�x:o�y
��R?e�p>f��w0
&+x�
~S�E�[�|㈊G�Tܶ���zTa搿$�����wR�
bBaN�y��c(/�=�4�d�( ��h�=*�Mi�)"P��|C��BV��{�I�4t��u>K :@���ʧ��"k:T~a�u�T�Q�
s���ֻխ��5�,�x�8���y�t)��
����
�; K������㲽Efڸ
�M�x��	�z������dA�%9�O�Y|%��3m���@qpK�w۲!P�d�*���5��G��L�~��x.�������aB&��*�.h
-��X]���皣�Ш�!`�m��}yR&�Bd<,��&��By����
�B3��HK�!U��쟊
 m�PďXG� �6(\��n.;�ns#Qb��8���=��I2�@�	 e�U��LƤ�)"A,q|b9=ؖ_%jy�F�\>Uh'�1J�6� g�f�ԥ��R~�A��wN��4��e��zr��� �uV�a����5?�+�&� �ZT��/#Wv,�gUl�FŌ���dWkU���#[1S�
�������8��
-
.lNĿ�ejj���l�N<n� +.d���p�	?�vi��.�,;j�5</�VD
��C0��k3�� 6ՃD���+��zl�:������~a-����%����
R�V�J
-�
��$�A���aZ�@�A&O�?�=Ӷ7Lb����%u��A
��h���^%�M�&3�Q�@2�BA���5eF���}F{;:�ⅰ������y�O2c]��߱��"NltA'ٚ��^�r��.J���,����u�����&r,R �:�L�;q��-��⌏{�j���9lZJ����';�"g],}��'K�^�d0v4)��P�Y�.���4;u�� N���s��REf`�]�[��&%�5d�i*��J��%�7�z����YM�2�e}EMN=*������ӡ�ۉ釞!f�#�Ds���Ha�C=έa
8
 kr\�cV�$�>HxZ�FP9�����<1�[�(�Y���F��,����
ɝ���5��g�)�|�
fQ�Y�P,I,tY1�tO�O	7�
�?�D��5
��6Q���r.
��
�n�iI�&j�EGM�Ю�B.~��?����aٽ�Ѡτ�y�s����
{r����B?��d��&���V��d;7� ��M�r�ԠdC��~���"~9,F�4H
�.�[:H�f�{��k ��i�3�kqBG�O�*�׉����w��=����z6*����?
j�����FEܙQ�r[��[��@�ˍT��ŴЪC��=M�x/�]|�i҃S�D�iY;���p�Gm�5�Ն0��mڰZ.�
M�.ٝ3��
�7����%���Y!��D\>_�����$��A%�d�d���X���ΊK6�N�_oB��{���
|�t0
�귁g��Px.���ճɟ-p�R
[�^ x��y���4B�L�%�O�*ٙ�v��B7o^���W65玓���b��KP1y�l��Y���G�*���v�3�y��� @H�
��~�D�ce�̮j�=y�i��P�T۬+��9���`U򊐻Y�T�&�@:;Y�f�C`�g
-�������}�/�Ddk�����,�Ւ+�w�s���2x
�S
!�-d4kQ\#&�w���o���&�	%
�L
U���$
�~mE��T������%�?�[wc�V
K��Q�:3W ��1��c��#�Y�9�eR
k/��	
g/���F�_i^\=�jP\ԋ���QD�)��L/G@�ɴ ������I	OR��O
�@�gނxx��^��`�m��P`
��ss�3�
�N�։`�8�d��߬�� ��X��� �KO��~FK-A(���_"2P�B�0	�ihn&!f%gZC�`� 4� ��2�^�ұ��Sxި����d�>QB�{�|>$?��{4�
�s4�[Ñd¥ҵ������PRv��U�T��Tm� �h
U진@�oC�{�j���|���v4I����'�=��̟�cd�`Lj��z�Rԣ�O"��P�AҸ��

+��
���=0Wq�wv8��Pצ8�#�ELz��So�R'��'=W*V�S)o1���dXUF
$ҹ�����^
����#�E��5���� �[n��ǰbDQy �F��
�Z	4`�d���:i�����X�dMwg
���G6��kn�HZ
<�:L_ af�{fNk�`�J����J!Y'�6���`�^�$�� �S|H�o���9ȫjqQ�HV�],�p(���~�,b���V�?W�@��(�ƹ��2�fq��g7<ն�R���
�Y��J�
r6K$�䘖T�ۦ,fe�.�`������������-�U0����K�
��S )�й�~�� 0�%��K��[���7�	mUti_]x��1w�Z��U-��v����W��4�Qv>gX�:������ȱu�V��g6B�
q��!{
-�(qR�V��D��*�e�<�> ��R�$ vFc�X��.�7�j8U=u
��6����V��q��^|7y�SR8N��\�Z��i0�3��t%"�����*�#P}\.Ϫ�H%��LY�z#V섘�/��f>4z1��f�Ol.�
��:�$t
-��H�~�kU�f�h���`GX��̖
�|v
[w
)������ż*�_D� 
��yE&�~.���T�`�4����e�L��Y
�N����$�!s!��:��	֔$V�t�IŃ�N�'��A9�Y̘�x�b��T "%V3F?Up*K�uxb�
���]Z��
-�Z�ߩcJ,��2E!ïˈ��d��{1���$'�W%��`�,� 
p������"eO.�
$E��Xfd`̆�evC6�#2������)i��3�Bn�fM9�zq��G�%z�\
�z��N>H��ih
4��R��� 4�I���9*'\Bv��2�CUv*h��&*�}�e_ ڈ��S��#OQ�7iW���n�$+����ݒ�1��z�遳��f�/>emY�aؘ�Y�!���1�?�ه#n�� `�]|80&�$Xt`t�@k�&��\4Zޕ|I�~�>�Q��5�2.l�G
�����'&��� ��3��I�|�r�pؽ�W)���$낻3�+�K:���P7�]���Ɋ������8�\�kA|��#0-��/��l1�2{0?sl땘�����lf�r|O���)D@�@��"�ٲ$8��MB�J%�vI��Ow�ׂԖ����L�Ήě�E�
.KNdr�3�f��c��XC����D�
Q1��'U:�d��c�"�=ٕ#�Yʓ �N��;N��� [...]
�Œh���&��o�JFH2'
U���nr.4�����ּ����U���hC�#
�� "VhE�T�er��Y��å�z-|�T�����l8 )��|MY��%;��}O+����D�,[	Gz��-I2S{�*}Y)�0�ZNm�n��4ձ@B1N�–�>M��[
ʄ���
!_ݫJ4Y�n��-�PV�nd�p���
uꢰ
�&Ǯ���I��	C�H)���Z`i

0G
X�3[@�"���,�����i
=�f5`�
 .��5W��'��w,��Z�a�ÿ��Us%�J�s}T*X�!q�1��y�W��Ĥ��V���<d�t8��b]���.-�[n�F�}���Y.J�bj�4ܮ&^YM:X�>�ϳGK�5_�Ss��A��;h15߿+�["��VX�@ʜ�N�3���~��Q���ge$Ĕ���=���X����d�6:[*86u
;X �OB��|
%7Q������&<G���x��*qxi�I�]]ui}�"Ճ�'
�&�斳��M�0�%‘��[��f�yz#P,� �ɉo��x{����R��k2D3T�n
/�s���3BlO6`�W5I"XBY�T��ʯg�Iޖ�)n|TAD]Ur����~�.�E���4M�����3��=ɗ
١z(����	�J�^�1[�ȁ�D���
��_Pin.Di�
-
#<Σ1�F���#�{����y�,늎زaH>���X
0�
�Q�VM$�$=���~Q���tI������'i��3��3�aBԇ��+B`��!�;�s�@~IΎ�!�u���7C�e/^Z��EƖU� ��`�`5(�/ao�F�
���gb��f'��
-�"�bb��Xx��7+��"Ah��p_������@,m��O��,ۂ)0%�L���
jM^�f��3>�����I���,������o�h��,���
��Ć@��"rx�����}��	ʑC�Ow,��
�^��@C�_�CY��*�Ru��D�e�\AGl����In��/Y��
�L'%-��m;�+��g�����YD�u$�+�j�d�p,>_�󌐃�ʫ���5f_ at R�ɤv���DދO��&S-��1�l[zqy{1CO+աQ���:�
[����@�ZmF
-�v,�fr�
-��*�c�w�l����e:�f�
-	
X�"RK�#S*Ӯɥ��H ��<7�mY��u��vC/zu�i~l3�
	��_βF�{'�`U6z��Ou�{Ɓ��
_�
�
�9N�0{s�؇�Q�
p	�Y�6x���P�{�]Tt��ϻL�	����B8�־ՊJ�1��
��"w����4���8	���4B�9�=\�2M�jP~�of�`(�H,6AQ�˺4_���	)�� R�3r�`"�LԌ	oq��xBC��R"bEl��ۊ"��}7�m
���
7d��pi�Rp�M])���ub�D�.�$^�> 4�h2hɰK�����aZO"�5�BIj3��l J��)4/֭Z
-wܦ�=FL-s�i�׌m���b�H�+D���]�y�}� �b�=o,��Y$,���DO�=��ww��
m����o��LI~�n�R>:
�	ԯ�k��3��	le9s3�h�hR��(��o����@
���N��=VN����9�"e5�U�*݂P�K��U�Z6�`d-�H�tY�!%�.v-�]w[��n�˫�.R8:�t���E�K���$�3��0�
����0��E�c
草O�RR���K�
��7��jbTY�3�	A�Y�9�rf3f��͟b���P�)'h=����8��@2����`�bF>&q)ֶG��,��[P�&��Kud# �i�*nRɮ�&�i-Yò6
-�0�t�{quA�%��Ǣ�,���
_f��b֢�j�8�S��8�0L
&q�����F6���
�^E�q�̬RLM�t*�
�<�! ��2�LUK&p�ngr���"Th���NK��Ѥ++�"q,e�gp ,F��ꡋ�K�~�xc
��L����9��@d��WƆw��V���$��,�S����$�0����%K�0[Z���>��R� tY�s�@�%	�Z
�\'�}��W:1��d

-Զ�
j��D�E
�+ �Mx��B�R at -��n������<�I�ĭ��B��ƅ(����%��Z��b�I � E�DC��v
K����i��/Aq at 8G�H�)�Ov@�)p��)�폙������mn`\�.37l��EOi�OM��U塂S�$�sA	���
4�՚ݻ�}����z�\��O�q�����v;Ӊ^���X��+:uUv;��
`%�%:���0&�)Q9:W�>Ɇ]j�/�1���@�*����SBnfŖh\۶	6u)��A Q��[r�잗�~Afwm^r��L4$QHa֠%=m�Z���:.Q�$�4MLメ�=��X��"�
��H" %}˪����6 �fۜ.��,��0��
X�
)
�O�p`e��u
� y
&�4�$be�`�p��6%aDυY��x��[� �,n	�pӘv�&��� �&]��
�비��S��"II��$u<d��EY�)l�P$B7=]��
'�j^f�t�o}�տ?؀ڲ��4��>
lW�=�Yo�]��Ϸ�]Tx��3�#�A	v�َU� ���
-�ms�:),���\Jhm��푦��B�z؉������s�T�'�F�ٌ����R�iP���c��_�CPJM��D��t�W�R�����(
�)��&�re��:؍�d� ��v
%�.�BA ���  ���k�-8�<�
q®��V
"�؊~��]��k�
-�X��E����~r=m�d�E�Dy�-�)�
�RЋ�z��ii$U��"_e��k�lf�d����
;���_�D��Pʥ
,��^�1��� ��6�(�z-M�z��t�2�`.�D�(�
PN�)!e"@S%�@ƫ�jEe�cJE�	���$�׷+G��}Ϛ"���䂂�RCr�5)-�E�p�����
-LX�tYzr7WV%�o:��e���o3!���EP�
Y�B�.�Qnʘ�r�g���A�6}����K!�l0N'�yH�c��‡��q���MYÊ
���o)s�ϓ�qX,�W����5��
����d_
�u*��
�8_s1vX�?��W�Q�z����
��
7 ^��=T���UrΧ�$_�݉@8i��8�6���6$LؤM�,c�u�<|3��*��*~GC��v���@��Yc KŹD,���8��
CJ��V�6#'
�eg#����f��ssT��Ҽ����<[	1�h�
�jNz���W�GL������8��8h���p�u�E�3XސrQ�
���4#�� ����x1ŸCL���PfA����:�����7��$�
�ձ(�x����l03q۫6
��
-m1o	z���!��Vv���
����IR��*�z���
�I�S��4g
-]���T�
����Z7�D�$�
�Kb�Vd �Q�/�l$�&�9B5em�}(��(��&�7�'
ۤJ�U
�Ȅ3�/��+�,B2!PTy�6��[e}�rX5g!�O����������r�}�#��(+�U[�/�a��j!PNB-|��u-���a��
;vωB{q�j!5��%$�NE��U�6)���$
��!��
t:_�1׺-c��$��.��+�]�,��aY/̢�.�E���: ��n� =$6 �~�j'
-I�
}O`L�L�N`�伱� �G��	ߜ�
�ѵ��K�U��!V�i�ո��h��6U��ٌ%�aپ�P9d�(M��"'l��i�i�N �Ķo���2��:�r3����I��8_�`�� &
���W�j-�z�
KO8���JÎ�z��/uX�;Wy4��d� %.�jֻ��&� ڣOs�a
J�7�;��O�-O.�r��9�䀁�AD�ȟ����
���&u��ռu�]��t]=
�YM�8Τ��鵋_F�`���P�&[VE4���i
&� U��5�w��6�K�!��[�W��UIo�U��@s�9��G����k��OVr&C�?�Nl��K�x�¦6drC��=�yd?+Xfn��Y&RH#Zg���^ȧ^��_ �<�m1e� {"�oY��D{������S>�{��������V)��#V	��3�
�V-����r��z�����
���(%��c�b2-Y�~0جs��0�q��2�ո�&@�E�M
�J�6�9�<�C�A�ŘF)�,?P%j�{��5�D�����Dթ-� [...]
��l�n
-�@ �u���NP1�^[��̪����X$�Q�\�S�����m�������	���$Ț�Q�����9k$2�;f��
�
-(�k�ر3��["�T�����`�&��B���nR��`�$�_�=K�a�	��M��
"cH�ɨ�*��J���5)���ԍO�*�Z ���pk��
B�gȃ*s��	�N/w��&o�vլA����/qp
	z��w���-��g�	��
6&{VN(t"!}��5��F��I/�c��r�a
�
6*�����Hn3`I�����6��!�4�?�<Z�@	�8�H�0X
XZ���F%y��41�����
k�3��%�Δn�t�K�پ�[�^��b�2�$�X��U��^�!���;��FdC!���
�)�^��E
-sO���41�q4F����)޵	�8_���]M�@�&ұ=��݈�_f��JNj��n���*1=���
�#���`�DVM�Cz{�h�
a���,�R���n��Ʊ��y&,����1)��|Dj t���؂����eU&��ꆚQ�hr�HҮ���ܻ��3�f�.郈�(��bJ̓:Vz��T�YEIl
@gX��e�"@���
k"�Q� �ݤU	�����ӨNR~[
E����zэ>� O��V69_��z�ʋx������u �� Q�6��QmR��8�JՀ�^��"&0쓺eҍf9󙒋�	�B#"҃
�hq�
:p���	m�

醸e: C�a�����z�3b���Ï�D�U�{I��
�ܯY��^C�Zȟ]��F�q��:=����1����7�7�B+p(']��xD���Е��Ϯ�jqx�o��{�01��|�sg�-%j�T�Wr�����NN
-ڔ
-Ys\�d-̌K�읉~=w���]@�yD8>
�A�NRj��G��� �YL*�̆֋^����Lsc��� �f��M��9p�0iD�C�3�5ŮN�ױ��L݀B�`�x�P��.��T�^� ��=�U�+O��"��}
�e|�B���1Y\�VYX��3����D�D� �K𝷦	�
�X
+ʲ^m�
�*n�&�)�/Q��T�<�$��c��������yk��T��8�(�R�j(VP�tJ�NA(�s5pƔ��ʼn
rt!t_��U'���-ׇI�&�w ��HR/T���<�LJ�
V�j,iս�3���m�P�C��y����8	�`�ѣZ3��V�2
��I��NgSGS���A�s{�B���ۅ��l���ݷ�%�E
Dn=
��˔TG.<���4W��Lt��bS\�ѳ
�֦
�4�>)�#��&��i`��R��@�1��݃��

>����
������qy�9/����ķ�������9��Β�
y�d�)�^P�"�Ϳ��yV�y=����ʩ5
r�6�c�B�U
�mV��7����I�'ѕ�Mbð��+�뵆��ρ:�$h�9�
��E�
�O���Jj���R9�~fs���k��H
����J�BpS@�'�'�����O<���`e��g9�H?�*��	H�=��T�L\��`�����=	:
�{Ǣ�7@uqXd�h%�������P�
��v:+=����/pE�����\��!2$�3�B?0�Ɖ��Īc�|~�
ӸDv<�OP�Y�6ӢÁ���R
-���4t�RH�Bf3䱳���豊L��}o��e'i�O�:G�a��8
�8 e�H��C�?�95MyL��Ր8�V:�Q�Y�p~���=�z���%�MVC���9֥�W#�):@}A�
����+T���B9���
-צR���a`�+�p��%�7o�wT�jH|�adb�٘���q�î�zʔ�
�$x
��6�=�
	}�� }
؆�<�}h�A���nj�]̶iSF�%
���~H7�6��~#2���_!�;�H3Ӑ%���S�����82T� ��^�o�Im�ѳ�">�au��| �ݢ�^E�ş�ْ *f0%e�3��~:N0m(�aٱmt�ӧ�@�)ɜ��bk���'H�
4�B�
-��%��t@�d��xq�d϶��-ٺzv�
 ����v�=��?�D	;�Kz�^T��y��;&�z��u�M�<vC*Sd����
F��_Q�3
E�
sP���ݬ:�ll���&�;�J���b����&�g_��فb�サ >
$�` 
�����€ܓ���?QE�A��.l'K{:A!�	2]��SE�_nC^��M���G
-5G��
8Л,L
-�:�	���� ʯNZ+
$��XS�0�b
�8Q���'�QY�+�o*)�y:��×
KF��=
�V�f~�K��"����6X��m�=.C��i!5�j���'	�N�w����Cq�J��
<Q�d�2.B��&���
��.��3EG�ds�h�zؒO�_k�
��V���8���.��_E��;�-�������4��O#.��P�Q~��j�~�5�*��h������ƕ�(�!o�%�����	��
�����%�gy]�Ku�Zd at q�ڔ�XCJ��z�:��=��4��U�_��3��(ަ
-��9��l��
[�����c��T�ş�,��)�S�T�y�'qm at Y��v���P��n�
G�j�ꔣ�S%M�#�
���=���-N4�A�z�B�G��{A&�h|1�L��R�F��G�*��^��X�:(�4 ��R���yY��_-�
,��o�И՝�XDL�l M�
rh�@o�"1�5�
-�P������a�D�h�"��;๹�)���S� �!���I�wI���;LX��� �k
R��ȏ@�l��,�XnǟlS�GwEN�(��
x��U�L��
��!�X�Ԕt�7N&‚�
-�*|f �4
r*r�
1��3�.wv�����E�g����n�;d�e�{�Q
Q�qQ��ؐX�E!%���<d޷%+�3�gz�.�Z_\��c���D����0Y��4�+#9��X�T
�)Tc9��مnP�dž+�ñ���
7<G�
%�{���ӄy�'�g�6+wt���\�K:rfK}���� 
1 �葅qJgO�C!����i�h<A�A	*�)��=�e��q.#O�se�$�=�z���|Œ�K&]r`e���LA�J��ۍ#
-�xI�'���R�V8݆��P�̀
�a���:EX�OI�]�o_6@�`
�X
����G��^�5
�
-HR'"
�<��������7�A �Jxk7`��8�V�j��!gOm�H ���!���#��]�s�E�H��0�"䣣]ž�&g��U���,���P�3kJ\�:n�h�W&rt�(�����Q`ݡ�Da��֢�ȿ��kN�g�$�
k7�quq�JX��� q"�2y�ٝgZ��,u�
5[�Ƶ��s/��D���.���
A���i�4����5j�����
�z\�S,k����� ����H6�%��eWu9|�[�
����/��>��Wn �U_���	� 1v{=b"*;�[.�~����yȃ�6h:h��x��nԀ�#m=����Y���M!
�Lc�A
����	�Y�g���pA�6Q*i�
'F��z��
Dm�~�6�@\��Ȕ'�X at u��*;l<T�Tl��z&xn�=�{����#�d�߬YZ
]0"�=�\�=ר�?u�H|&U��A�u6���h� �B���삁X\\@�.���Y�s/���X{
rьJ�ˊ�Uٌ5� [...]
-�T�0	H��1mo���B[D�a%BF�T��ȥƁ�e�gS����߀��h�v�U���Ui�#v�����'�;#
MX󱇽��],p�A(�i
���7K�/9��8@>M��*�Q9���xj��,�����
h�*�����@��Ý"�A|�
-2*�� �"���Ah
�
�2F��'Ro�w
�>!�C��u{��|�n*�m�6�lu�M뀬�t�*)˘�
lx�q���@���:�a�"�&�N#9�<��&��&�
� �
Զ9v)��c_�k6�:�M=���۪���(��>��`r���|\��u�=�鄠%)m�
-F�0U*%�7E��^:�Y�µ�E1��㹇�R.���?@˜�q�� }l�}���Ⱦ�FP(l�kp�bdO���4!�P��7�	���i�MpX�����P
J�t������۳�L�q
u>W��&Ŗq�@�&����y��L�b��PB���:�AHm��F|1Lv�@�l�
~�
��J^��
�)`�{A
11G|M�Q�(�>͇o+1"���E��Tń�v��P�����	9L$���dZ��誄lR�
6>��ANJ\	c�@���D�
CI�� �g7
G�R]Jz�E��q�y�g��]��L���� q�L&�l���Fܵ�� &t���,F�z E+e���8��^�]�HV6�a%e�$*Y]R�"�5�(�
�[�a	�eQ
�pč�z
-3�
��0��<�����2�q���lt_�	7,f�m?
�c�.�U��:Q�g��mΞ��XU���J_���;�T���0=Q�v��HI���.?��u��Q� ĒT�������%�X��
-I�&��U~k�/��*�Ž
����u"/\y�Ƕ
�cO+��|ꅉ��d�R�k�3d V
�ln߸ 
�=Z?o��ӥ��KY�;lr�
\����K-tg��N�2��%
]�O�K�N�]�y�p�셗�e�լ��b(�@����z�rp[�.ޑ�
�h�:�d�̒`�M�Ɣ�`�n)?}<��
�|8��LuA��J��b�
-͞�=صhN��8;�%�%a^��Z(-��
sy��h
�T�'������M�PHwI���yr��~�����r�U��8X�
��'������۟���?���O����/�����/��o����������|�7���o����������ۿ��o~�/���_g'}����������s�/.n����?���~�ŀ�������������o�����?l������_��~����wv����oHP�i�!�v���7����7���|��F�~��I���������
����o�����u������K�߾���?��5pΏ��w���~�������?��������~���_�o�귿���ߝ�_��ߞ������ٟY�_~��ω�
���
G�
��������O����������Hoq����
�����_��_P����~���w�������������_���?�t�
s�>�����A�Lۧ���md�)j~�����o�����
��������}$2g�֑Z!iY��
-�3����
�ɥDj�M�R����т�Q���~�O�sq���9��_Z}X�����	X�=�w����� �}t!�Z
H�G'_��5k�m����1��›�p��#
T�ɯ��_�X\ޙ��]�
-ٟ�t�6�K��MI�3�Ƿ���IL-��H��A6�z3ű7k���H��x���l�w�����L0W4� x#V|�X����R���_썻�h
��~��}9����r��=~��ׂ������5^���i��%�
�q	&F�	��?8�h�; ^z�!
-*��X��eq at i+�}�������elA�^^ק{���ξ$��ケ�9��([�
�0��`����i���Y��d�;�3'�(z��
|G5v(�
g�/Z|��Eg����������}����{:����z���-�g cg;
(������
QsiF�.����@����|��O��SϹ�; �QH������M�3�W/>[Q��d=?��~���旁��� ��7�
ͨ��YcZ�o���E�8��W�L�
ڎ!U�z�;�R���=�_�@�"�6����8a\q3C
)g_*�-Z�}�����1����Y�{���}��_5�����b���To�1|�3�g`� ����lhJ�SL:)d��}�G�1bp������N�)>ʍo�(K<��6�֪O>��}�s�5 �K�����g��3�e����QU6����ڗ?!^���^�ケJ��^ܹ�*J��(������6|6�����|��w��
->�g���
��x�I�,�'[y�jY�;ZH�!N']�O>�<5|ܴ����1��7�fy�h����=�X�
���-��	A�x3��5�O*&ql���5�X]���)���4��zL1�se��I���u��Q��+�"�6�
-�3wԸ�~'�W�+���q�{����A*�9�~3!d��
-&E����;��"���f*��‹{u���
ܟ���
g�+;�U�g�ݲĉ;�����{��Ԋ/��LJ�t�Ϗg����R��k���L�h�l�h�r�ǜ'�n���
w���(�C� j���YW[��q�;)D�zY�w2�T�^1	�W[��w�����*�zo|���_^������}����}"y�D�J��}�k
7,�4X/B��t󻛋����
�+��F
���hN���n�������o ��F�s�׀2�m�9V���.��~�
��q͸���
7������w�I�7����"��{�ݺ�A�#��߼3u����X�
�qł�.dD��0���
)�X��|�r��>�1�?y�X}��ȵ���O��'%h`6��սAt���Hkl󾻣�h��[\¯��v4�(|?��/��g/-߽@��P���G��O�
%�X1�}�r������,�mf���ŷ�Z��QV��
Q�g�l��%&W�BM�K�}��Dϙc.lޗbm �}
����g}��
S���A��Lj�o#t�oa��Ӧ���K�Aso~Uh�޿�(�M��nT�����g���0�F��t��j�� �W}㖛�K䵫|
���
�Ӈg�9��T����9Ʃ�Ϸ��6
:i�xE�K�ޛM����=�V�]�]������
S�
�g,y�Jm��,�=�c�%�e�%,�u�'i��ޯ���e}�#>�)Na���)n��?��&(�E�r���ޒ���{[
[Uϕ��\�7r	@�5�Ga�,���5�������"&��}[Y�+X��\v(�Uj�1�� ��e\2a1_�
۞����bӊ�M�v� 3]Q�ޏ[8�
��-�h�)�;��*�����Ǹ�܉�^��wz�i��5o|��c���f�,8��mI��{"<�%F��P}�� .{~9����t�g�r�y�.wD��+�6��H���3����P4��⩼x�_�:��u�
�fL'z�_~���8W�º�c�:���$���2�m��x�Į#ۚA�w��s3co/����jwr��}�
������bdߩ���@*9{\�-�Qr_�0� �_Qb���|���vxW���4�~ڊ���ǽ�7[�C�;=�\Y&c�I�v���H >�� &�âAv��v�ֲ_C����}
k:�r�a�R}Q&c�ٛ���|������ z�f�g�B�
-E,vw�}�_}q�68+v@��68�/Ƽ��crҶ���AbQ�����G�����n|tLJ/�h������O�a���Q�m�i6
.�`��Zx�{��,
-o�z�;u��
�n���-o�͖^D���a'L;�]-��%.��m/�������N����tTެ�E)��6n/�O��k�� �}iػ&�
��q�S�>/��/��6}΀�l�U��K�Vk�;fÅ��7��W��h�L���]��mH���X�c�]��c��n��[c&�c�?��ˢ$
-�&
-D�3����-��n��g�\�z������I.?ޔ6��=ϼaՎf�go���f{��˴�5+~�
��{vD7�!	�#��f�#EBS�;�x&�hL�%��Ս�}�d7����<�;/
��B����ֹY�Nc������^m�>Ÿ7�:,�Pc����7��+2������ݸ6��h��L3Gc��+�����D�
U���e&T
-�ɻ�=�t�����"�v�����u�8e�4����>�ۺ�*Zj�B�m7F�F�Zi
^`T�MT��o�]=�{q~e=�
-�T��K[xFqw�Ȧ̔�ўg�=pE�Ѯ�滩��)�a�W�h6{w
�<E�>�D�]��
�?��r�X\��džO���G���h�b�jd�g�gP��Q8}$1(.�dF�x1o������+𻀲�>5��~�3�w����})o:?� ��'5��;}�y��O�=��oa������X���ٜ}K�^	��TnR+�vt�����N���|�"����J�e%�yߜ�fL�C�t9���s�Os��4 �߾ ����
-
��/0f��
t
�tTkܞ:�!�ן�gUT/�{oP .5���0��
-[į�W�D
��؋*�+�a��E�����f3	���C%~�ˊ�l�Z��b��ļѳh�^Η�����qk"jN=��ESj�^v)b�h�;0��;s4�;�A�h�j
m��P[Ԑ��˧#���;�.R��{��q)��wu=��Ho���'�ˢq|���O�u���U��Ԋ%���{o��'t�\=~���p�a�2!���+�'�5�G� ?�>��QwG7֡�\�i��
2E�(
"<�go�)V�2핡�9�
�w4b���so2�r�
���x�f�=�Ӹ�� 
	)�Ow��G<�1Vdd1ۿ�k���������㕝B)�L/)�㑶rC/#��蟾vL�ǫ��=�\_ى���;�'�� 3�ѭx�0
��7��Ex�0��j&4���W��z���j%���,b�6��d�t�*�ɺ����
�Z]Y��;��l������%�U��@ �{�{��[�@ĨĢ�O=�q��4t��c at fч�$�vQ�����b;�f�
5ǃD5�+��U��O��w�+�$*w�h$���Ҝ
�ik�;�'�F�<)P?A�����nM�#zZ�t��
Ͳq��%P�_v߄
x@%�ϣ'�����l+�+�� f������[�6���'�<�"9���~���
KИ�s�߁H��yi�������+�X�;RӾ�^�O��H���,6�bq2��̍*�з�$�}��Էě�EMc��V����}���f���/�Z��<�1 �9�6����E�����)w��h>1�zG�
-͢4�{����"��<D7\r綀(9�!@�Lѫ��5��wO	�z,J|>s*��	0�H쒏��
��𜞴�'.�h�kE��K_M�T�����.�n�
HƜ�X��.��gW}Bٻ�&�jdNqM�w
ؔ��H(�"e~䎚zU�
qc_'�b�������s���w6W��|#�]b�Y���ˎ_0lg�
C�:�hf�8���ָ���f풏�7����)��f�	���!��x�^��o��;�Kaǭy�������q��2*��(�
�5Ғ����˅��*�M�!'�=k�'�m�Pc��DS��s+2��!��#�ܟb k
>!Jj$�⸅�*WZo�U�Zv�ۈ��r�D��ê6�9�g$�c��
=��{&��9G�\�c�r��2)�m�	
-��1��3@"Jn��:����N��,��;�������f�E�j�\%�Vk���]�:+�;�A��#E��9
-~��j1 at u�My�‚ae�:���	|�
�ɖ�b,?#��\��H��~�Dˈ@P��5:
-}����چ�����=v����j��
�T���
�
-�1�7����e�5���Rl����2�I������
����
-�
���ob�q�rg��۫0
O&p+�7f�Re�Z���x�9����N
T���A������nI|�߷�ӢoJ�W��޷F�צ�D�s�wx�F��ŷ�ٛ��F%B�
w�(
-�itNI<��X�I_���@� �U7�
"�)v��;3�*�O"������u��cY^qØbv4��h.^�-�G���x�6��	�K�Mj�|��2��lg�6�7���0Ų�>���U�RCi0�܉E�'?����z�Pl�D�X�cF��q��~�Zc�b������
�z�{�"��n��rȲzx���j��|co5��e��=�>�U#�x��
-yb�X�2����V�4��6��8ci
����Vlm��6�u�
�r�xL���H��2
- 
;n�)�
� ��鉮�
-Kyz����߇
�k��C��
-+('x����L��k��ȿ-ݩ�}=��}�߮G���po
�g��h��|$�׌A=j����3��Q0�0�l9vk�=ʶ�������u
����-4�u����@}d~2OE�	��K�cŞ�1����f�v�Έ������&��:�N��X�-�L؈+V�bS-�i�e	A�;�NoL7�.6! z��I`�O��/���5���y�w���Q
-�n\
S��>��B3�m��~zȁ;���q�բjx7i�
���bo<�H�L��-��F�}���wk2��1V,�Q�i�%.H޿wj���c��i��4r�ZJ�� ��0%R�\f\����V
Po.$[F�/֘��u������-���S����9�cV�����|7	a��
��Y�Y(���W�1�LN;�C�M�C) m�pn3_�<�
��ܥ�/�r�w���}�F��k��˽��4��'[5&��,7.k�X�~��y��a�_�s�m��/ă�
�l#ٚ-�6�8]�]��B>@�Ng۷n��[ 
%q�#�IQ����.`:w5�}z�QS�r���@��Q�J����
��$��69H$=���#&�ƨڈ����k�
�u� �tj}�Пu�a�����ҫ��c�ڝ>8o�ざ��"�뱧P5#jS��7����a�$H�Z�τ1��RU3���$�Nڝ5��0=
k܎w���'4�{�s�ԫ_
�y��C�q�V���σX��� M��*��
��
-��z�BG���V@^�S���"�� �
-����ۻ�."�ܮ��E}�U��Ǖ:�����)
-��%5��c�R��h�d����
F
�.����cA;�q�@
Ԗ�Y-�F���
��˪�讅>F�����X_4O2,�Z/sh��A�}Y;�x�<� �y�?>\�[���N��z	�^���y	/��GX�C@���
|�e�kl}
���^x�	���L�5`�����^�o�����xW��7���
�#�z�}1wՓJ�/�%��xh_�k��.���DS)���-�!5�K��w�As>�}x�d#��|Y.qN�d���ƀd2UE�u��:Cg�D$����Qs��
()rߜm9
�jlAP=p)w��Yq^V4JM���ȯ�;���� �WA�Z+�l
�rh
fk5�U�g�-��e�3��
kɱ��)���	����w�V�	�M��e�kK+�"Wqm�R�@
J8�^�n����i����;}k��?��������_�o�:W,Y��g4^V�z޼�|�XK\��e�~��	�}�%$Gr�_����N뽂�2��Ib��}���[$ �]���
߼v�4Q�X�n��r/�U$�H�yrI/}�\�4X
�� +n
Z�w�tg�x�w��I��p	笾�T\+�FN�i�
�f�H<�NFoQ�Ck��N�-�!y�`�K�"�	}�G���L^���^�8::#�V6����1H�GZ��ȒF�Vi�z�W
-%���Ӿ��	:�m�%~DY�OZ2W
��a�
�O���H��ϖ
����9`}��
3.�!�#�帛�LU�06~1[��az�A�;"��Ҍ*���~�
�mߣnn�O�p�q�S@VD�3z��ԥ���_����S�9yF�M@��N)�T`�k�'��^�<d��d��z�Lu��Z3��(�!�>Z��_}ܿI!+�y����8-�G��SDC�
3ʷ���~\�^%.�++���p�5����~�����#�
]��w짓	�� ������=c��5m���������nnZH+�~��Qf��x
���M��
--^�wx�d�
��a���z߾�
�
��JV�-����j�I}9�L8��1z�q)&"-���չH�˷���m�ǹ��} Q��^�(p�}+�
Py^�wr|�|в������iO�v�֠Ŵ�~	rN���rœh}}�S2����c�%�ӝq\B ���+������hf��e���K��3���[#"\
�5�]�|Σg {A����j%�c�_��
�Ӹr��'��#�A
��h N�^�!�QF ��'oc
:��DžO��n�i�
m��c�0�y�d�%�Z�M<���
��rz�3Z�
&�'i��
Ǖ�
~�{vwtv�ۙ}3��=��V�[-�Q���
E�@$@�����	ZQe(R�
-�}�t�e���� ����c�fU&@I�f��
v��n޼&������~�7�cE{�F!k�2X����I:����.[�B7��`P��I((Vv�n 3��$�t٥2�
��`�qt�S	����I#�})qy9<
��L�"Fj�U��QBG�}H�3#���83��Г4/��#�%tJ|9��m�
�L��0�5ܬ�xٞlU���L�%���.�2�CQ&�"MW&����Պ��/��
�bO����,�T���@������l�I�����
t����̇� 3�C<Ȍ�B��脲�R*���`R�*J
�����)�k�	K
-��|(
�nE�/�R���L2�B(
����dE�
-G�/��YP�� ./ڵz%�.�P1�쒯J
-�(�L���T�;�j�
�Y��C��8Lt5͡ЅR���TZ�m�� �+{QbV)����D5���G��~&y
��9?D5ˤ�h�f$�Q��΀(���
I�ɟQ�����Ӯ����ʖ(������
h���z���N�CФ���n��[M�J�h¢|��S���Q,����SV�-���^�B�$��H�N7PD�#
�]��E
�.$d��(�m���jC�.*
b*B�(�SI�+4�ʇ���%�OYQA���>�%7C�[�gY
ʡPHtLG)Q�7���UD�75=�C��r��S���<���@��jTh*3����y?>���J
-#�xDBVY9U[������<�y+T\F��ʫ��R�E�f�ْݚ:�(�K��lHȢK�������R/+Σ�b�F
�j烃���{&�2�?���
�b�1y�G�
*�
%��Td0��(xI1]�����$�gQ��.�du�¤J�,��Rl���e��$Ǫ ��:+
8_�!߁����Bb��D�}�K�hbQ��F>I�aR��LV	U頼��2
J(o8�
-9��DU�U��T*(O*�|�?
�=껨�翑��B�
�|�EcFa� !���0��緜�#H�kT2�A��<a(a��T��揆Q�]
U\80A���P�d��B� z�Q��Ġ�<Y��:��0-"���
��3��|�J>��s���@����g�|�H�dP�l���³Tn~q! �vfXe����t�@QAͲ�|I�]��B�
�*��7P��Z�w!�b~1��AT���J(��4��) 7Xt�a>y)�
��
-S�,�K���|~!���ˁ�k�E��Q�>$.bR'�T�������͗?#{@A��T�K�]f�e�{B*�����p�AF���֫�:K��.�,�˼]
-E}k�nL:]�
�}+
�
-:�0SJ��AE&��
-���ES8
"��c�
����k��^RZx�rر���?���pJٕ�dl
�Y���(�4h���`�ӿ/�쒱��`1hsEg]"�^(AEF�1h
B�mq�����"�͢L~
Z�̓׼�|7�3ʅl`E�6 �k
�M�YP �
�-�	 �n
iEa� �͢��H;B�[��J���
��
-:l���A��A���3vC�d��)�	*F���R����N�f�O��
�(���UĤ�
�[MEm�i��R�0��@&y]+(N�UzʨxM�>@1y
ITRQ�y1��2�,��b�Aˢ�S�*���q�H��5�\�,��!�VLE�fq�8*+��I�8�
��� ��ⓘ�˨�����B
-mOP%ك
-*>����T�g)�Ċ(W
�H�7��N���-��e��-��@vy���T�E�"�@�Y\�ϭ,�k.�j�2�L�0��|�i�S0(!eX�T�"R�R���*TD��]�TQJ�V!ܕ�O�Ը��`�n�o4��J���Rf9E�t�>����/g{��Etd-yJPh�������tP*n�g��]-����c��lSKE����S
(gR�Ņjz�T�:�"�C���E�Q�Љ?��$�i���|F RɎ���L�O�
��yVeA
D|oz�$�.��
-
-ːYFW�.�=�A��Z#dVZeA\RBٯ�|v	 �XJ[$�nMC�,�OX�B��g��2�?Ȭ�t1���}i>['?������.UB��gy�VV��a(�uQI�~@T�
U-
=	�N�/.����YT5$�λXT�
$,�H�)����ɢ}B,�أv��� Г�y�eT�=S`�E�|t3�@
�O !� ��`2�t�/�l�o�,$��K�b�սe��XLU�����B,:E��6�ȇTLi*�_Sbsw�
W� ���\���$�?)kY�ϫf2��h�T��]����Qe�{��'�����T(k�nqH$.�A-�Rj蜠����a�� j7�*��3���BF,�zD��aR-JS��@{�{�6���d��p�J����t&��xY1��"z��c�s�<O�I!��!Et��=�^VL"
*�P#���/Q5��EӀ�
-�Db���
-��w���(���b��ݺp�RD��{��rіӨ�NvF�r*����������2�d��{�ٮ3����C*��QA]��Ό]n�������"�Q)U)���)[Bg�3�s�=)�ȟ]Ji�
-�G]F'��+u�Uͨ��
�
�V
-����JQ����
-��v�a��&~@��K�������
�V���ԩU��Q�te�By����D�(Є+��B�(�(�4�
N-J���!�X�tz
�5H(�E�Y�B�V�>��

2;���a!a9]�����	*E�x�p�<�p�BB��B�
��bUӡ�I

-8��
*���d��C	��X�
-�d���7T6��:@�+��HRPN՝)��,l9u����QƢ�T,�M�Fȡ����<K�<h�ϢC
~��8

-�����@J-�
j��v���
��
B:D�xOl$���pˢ��M�yUt���?D��9L�B�0-ϗ�QR:�J�$��Q9�a	
}�(�
-���ƨr?(J�I�<Bg�Q�
Q�����SJLޗ�Ǯt�����bE�����)!IM)ȼ{�XL�+(|
�#!	
5
�A�ϚE�|�<5�(V���f��t�˂W}O�)��ɤ��g����B�l�N2)���Yt���`O-I��Kq�4S^JYs2�� ,�
-�P�鿩�i�G
�3�$,�����/��PI���;�<dET�\t�,
�
+�٢K�L���tƢ3
��Q��*����S����+ݽ��lO�<�Oe��ӧ�E� {�,ʨpZ���O�����2�K�&���+-�s�T�p�/�k�d>�d�y]2�Ax�2K�
-��trIiY�9B�TZ`)}}
3����=%�YetQ�B�:U����Z(���~�0��ҒD��S�c�B�$�__��v�A>a��:���\H1
�Ǣ.�(�s�Ie��R���b��*��L#�å%��'ݧ���
-s'�������"�'F�Jы]�PJ�����
t�4
@�u,E�j�����
�V�+��m�KB*�BH�S����_VL�J���)t�DU���,��Q�.HeR�~��݅P��VH��(�J��A1�V�-U^�ڕ�������Rg�1J�ʙ��*ݕ�n�*L�M:���Age��"��na��(��
<M���}c0鬚7�uh���
S
&�n^L��0�Lufq9���ܽ���t�c�;�A��FYԆePz���V�t�zR�Q�D
��
N�c/�s�K����F(KPLW�+ԥ�ed He��rtz8Jߤ�_��=��QD�(�o�@���
-γ�ʨg��|D��;Fa>&��
-+D1�.�C�҇���
-�7�p��\
-�L�
)�u]�Mg���v���.����v`R7 ��w��G:g�J ,�j�v���%�w+3�j�?��!ںWTPy����{y95���|���2,/+��_h����^΢��xQ�bz1�rV�I��-V`�dNBɮk7�a�=I

入�T���B&!�S`P䥤����QΤ��1J�w������O�`��OZ�>�E����,
�eGJ�y�EE��I
T=3V�ҥ8K���Ř{r	�TQQA\��nթ�=߽�c����M*��0�df7�@D�����Q��G+�t�����7@���xf^e���⻨��tq�Bn���U��9���>�,ϧϐ��Ŕ���p�BW
�D�|��C�������)Op)E�HqQ)����5SX��X����8�.�Y�Ϲ���eI>M*/����V�G���	��[
�j�x��4��ߢn�����+돈�߸��?�Ǟ��
��t��߸ƞQ�{�aN�+��rt�F9J'��*/b��SKwŕo�Y%�+r*�6���Н���Bѹ�dP<(T�h��m���pޓ�Q���	�e�}��8Y�$_�2y�w�3P%�r�^q�[5�c��'o��.E�@'��u ��BPYS�225��QR�?�>�6�
�p���O��l�
o"�q�i�~yz���m���F��Q�O�d��ޜ�F�
����
C��~J�o�4gЛϖ毓{��]�=�+�{K���g�9 ]o����'�J�
)4%,��=M�km��{Etw����in����y�!qIyq�Ϟe�J?iuW������ҭ����~z���
�.�~�������6
��}VR��ZD����-΋Y�*aaW�N+��
jv��b��W����ȗ�(�_
�(�dP���"D�(��m^�j+��kxs�SbR�0еެ�7�`��t ��:5��Q�j�W��b�E��u�4���g
z+/&-���L����w�#�PVV�GU�Ǘ�?�&�e [...]
-Yh �
-T�**�w�$4�B��(t�\E`�(!	@>[^��d4
�zY	�k�Ro��Ne������
��~{���J+Xo|VD��.4�d1�7�
�K"��w!O1%&�t�~�!,���~�������os�d���f�}@���j��,42��,�L"�,X�����`�B5y����/
-�4����>2P�Kڎ�=������s

-��`��co��p����s�té�/T�Մ�#�l�����~��脐QT����?��
�
�_���jF9�S@�衷�y����eǾ�a%2�޺p���)�0�A�5𶦔u���3���C�@��u���Dt�},n����-�W'�Xe�/�86&'6'$U�9u'��	0�A
��t��MQ��!j�
^��^<�Y��}��}����p|�{��NĦ;>J9������c��-G�~cRӲ�D|b�q���'������q�)lJۖve���'�ߓV'슖����^���>���������O�%�D5)����I��||FX��|q��
��^���i��'aU�$�:qگW$\ʎ�q������G��"����M/��hڣ��}m+6ݧ��������
��ݙ_o>h)I����V
;���=h+Y�Y���[�<��\�r��ݭю}�
g�szatZR
���cv
�p��)��w�j�mL�������QY3����t&��
��ܴSՕ�Jjb3��ج�nsZr:>';�r�j�Ծ���f�)8�uix�~�:�5(1���9_=�L:�J�mRm�
-N�Oq�Da��~����	���jZP
���g̦�ٕ�M����t���t at -��Jvʫ�}����{<1�=�r�Nav��� �ϯ��^e摶&<�ֈMp:f�����K|>�Q�3>�!�R��(:�^57�V
�gy'W��Gy�wn�����;��l�d��f˖]�_�*;6l�f���
�q
���F��#����۠�=j^&�`c
am�#iLy�
��N��ob3�s�C�K����zy&��f�M})��+���<ܚ��s*2�=�:έ��t���E�ስߔr�Z7�z��������є�2h2bEw�#�IX9'S6��� �UP'߲J�=�����p̣�Yy��tkBv65k�i�%�ʎ�
�Hd�}xcVռ�@y:����\}}����&�J�����#)[��MT�9+>�eU�&�]̪�X}��x��?��o/�Lt�KM
+	��3n�7=0�;���?�^�J:ԝ��m���=��Gg�ٹ'�.e;���1�^��
��	w$)�����.$��'	��9푷f�un�`Jy�JXCҨU [...]
��
6�� <��x{��������OY�SV�a
t
�1H1���p��0�ABx̺�e��kDI��kA�	��dB�����Mz>6-=����Ny#�\�x%��&1���vd)��\r�{"ふ�R�>�0�щ�^�*��L�
�-��=6g�c.����F��iEiX�h/$���Ѓ��g–���ޫ�є��\�.�A
ڴ[ޚv	�����?�2��D]��n��?��*̣�&A����ڔWx.�f�����stu��"1���zF��Fn�|*Ζ�_�6ӳ��s �а���o��եC*~6��y:0���"����.~U������pߵt@%�1d~K�q�^�
ʻ��T%��|ܫ᧝�
�t�gI��#n����%�-�I����x�/���{5��~d�w"�Cþ��?��C�w��3�c=�7��u��w���NF���Oщ{�<�;m�o�f:)�Qv�z$8�jTtt˦j[wJ��O�������$�y���Nqó{5�{y���Ȭ��#7巘�N
��(� t�SژuKR6α�����{-�M�G���Q���o�?xyG�?�X]��N��G'9�^>�,��t����c��tmZ��W����
4�3ݧ���Kj1�;	���'"�#iO�s�I��9��d`�\�;����[��+;RN�&2����6`szvjNѸ���(p��߻G��W�ź��
9����W�����o��}�M�>�?�թ_/|��'���}�\�۵�8���'�?��X�9�q�p�*	G�g��wsɚ7���Z����\����4)��.	��T9�VB&s¥hI9�m9�^��G+��	k��Sױ����ĸ��p��m�rOmM����5❰A��e�`&��&]jv�eT$ /$\Zn�i&��T t����X0��~"�W��j�)�u�+�GF2���7�[]�\����ޓ�.qmt�}�l�8���l��P�am���9Hy�
�%o%�&��9Ix����ʟ?�{76-i�z/~C��G�NuOdN����nY[ҡ�Ȅ�&<��@/� [...]
-�氨�a���K�Ξ#�َ}�9��]P��
��귦������Q�Kቍ�ΏV�5�����׽���x~�]��D|��}ѡ�E��[u��.
��ЗU��������U�'ǣ���mߥ,���T�'O������ݘ��xcZp"f�5���N���^A���\�l���}�ܫ�I:e
�KՙukyY˜Gp&�9��}�1^�[�
'qXk�
�o�u~�
�������J�r�.oN�t¤C����&��
�
��2K�+��N���<d�}1��)��.X
a�|{�`�^��2�Ze����ෙ�ɒ��z����9�Z�
V�ra�47�Y{�*�� S��b�7�v¥g=Z��c��C�Gڒ{�5'��X{U)w�)��I�^� �Ұ1�q��%�Qvn/[�et:pQn��ffA����
�b
AM6,co9D5K���<},<�	
\ݙ7��5�L��'@�݂������㦢WO؟>� 7�w
���}�R��������-�mN��Ṝ_'�,Z.o���#s���DUQ+�pd�}��[^�9eM�Ӽ#�&�����-�A��Jk�=7&ZY���[����ڵ�g��#��տ���\�&]NtFZ�`�
��	�RN�����O���d$��
;����[���+��ܣ�9�W�y��>��og������Kb�؝�6�������O_�~z��
�����&M�{	��i�1I{�G���c3
FgZK�S]�$��֗3��W��v Gv�n�=0o6��?�Lu}�����V�����u��Oi�I
�IjV��2�o�����~��MͿ�>`���{_/��,^��vZti��
p�s[���k3�C�V�<5/��`��UV�tK.�����3a7�W�<`Sa���+�S��~;6�Vt����׋En^֕	�W�{�>�T��_~��տ^6b�&Vd���5v�}(�ԧ���L@'�Lz��?��^O��/�	�N�NᙈSt6�wa��iew`Kʧ��v{�hz�d��^�*s�Zu&
{���2��"|C׉����p��ܢ^�YPKqS���Gޖ�h�)����\��
 .�I�%5��>>s"��lYyG1�Q
�+ڶ��ʴ_+΄nd���喌��ˆ�̂B��E
ĒZ�/h5	p���Lp��맖��TQ����½Wra� � C}
����@W6�
���,�`d�{$��NxčI�x`�t��q�Q�eS>��1`���u��z���u�1t	�դ�#�sܡh!<š�l�G�
����G��<ݽ2n����|��}+6->��6iU6E&�
�����m~�V�dj���3k�Qp�V��M:8����Qks��;g�r����U;��J^>�|����ZA�����v�-��������)�_�t��ML�ڷ�D�"�=Gƺ>�N�F&yG6F�*�V^et��h�&�N�4�Ȭ���X�Gm0=G�f�������7���u�
��뀬k;(��
��f���'��"S�#�I΁�Gm��o��{�s4x.6
��*:��
~���O˷j�c�1��g�:K����
-^m���0�J^�@d�m�Υ\���-H��e��wf�>�=Z��
�dt�{8	�:�̞r�O~�&����޾A��?������I�Tp����w�FE�٠e(�t�}�֜W�
���pVq�N�
��)��&���@O�ᛘg�r���c���&���oمU[�W6m�c���%�����΢��
k���4�l�y��L)���p���i�Ixx�
8���N��3���H[c����},
����KZ�F!��a�0�`ʄC\��hA&k�:Dg3A��
D�h�,�9��G�`G��y��X��3���зx��g�Λ��`��o� ~�l� �
wܴ6��1�Tw���ʒ��]
k�VE�1S&��9`;K
�M̡lC��]�
�J��'�_�*Q��1�]H�|"�
���r��-|s�W�:>Z���M��g�]���
HXU��љȔ�j�������}�o[�[}�;�
�k_�
����O_�<lf��_x}���L#cc����AkH/Z����C�fV��	���❳��Q�O����8�/�ߋ��z����;-��ny;�5`��W[�����w��P�;��7��
�avUgƧ�^EG
���Gm��.���ũ_=�UW�cPXO I���n�̊�"�“k�=����'�si��)�54)���i�.o|��{��{u������,�E˟�3���^�D�ɦ�J;���b$<:q�&��:�C/��������Cr�)�6>
8��;L��H�� [...]
��V`��a�u��qt��!�*a�'j�5+���N�h��4��$��D�EI��A�k��Y�ɘ	�]$�W��
0��Q��l�%�[�������\X�ˆ�
-�
�#�ü�
x�h�{5"�F�L�w���i��� �h���U�Wޖ[R�3
*��I&�U&�Ҷ�[v]�HV�������y#6��)΁�Mx:�t�G'���_���,�w��y"l�K��z< ��^��
}א}�,X.f�etz<��Avf{q$so�oҥ�!�+a�	�$嗵E�$�7�y��6�)��0
�_�o2˖�q�F�
k6f��n�%��
�[���Y+���е�+c.���l����-�Wc�c�iysگFݪ���J��M�<���)�Q��ǻ��'Egb���Qm��4g^<4�����؇-EI���.�!:�}��J��s��Y��磝���Ҷ>CtJ����]}�=�9&8���
�W����Z��WN���ﴗ��h�f��1�1��O��0"�`�:�% ӭ���]:��X�
�SˍL�
ؚh� 9�R���
!���`os~਀}���'�3�Fܥ���rA���7g��y[�iү��N������ڰY
n���A'%��^��}��~���M#�
)f�rRvmf��U���`0���6ֈ�m������v��
~����)dW��N5�X�j�y�֦ 
2�R�!��
��U�m
̸�u_��9��
�gA�� _��}�

����\����y�0�ȫɅe�ĵ0��L�҇|��7�|y��N��1#:���w at _gCj�5G��SQ�,�.u��9��N�W�������LH���"$mK��
,��Zwux��� 
4[ '��7���	��w����6f:����$���9�7��k�O+Ȅ���7�`g�ȏ��	}�.�
�/3/�N#;�h0!�t�`�l0Z�ܟ]�gt�LH�Ny��[���n)}0t�s��k��#�p�ո_��j�h����d�:
�2����	�;������CՉyu"<h2�C�ބM�Ŝ-�췤\&�O��g9�_Ms��	��-��iD�C�qE=67<���'u�/��k����ma�=�9�v$�=�m�k�&-z���qsѳ����S�ӤI;��m3�6|�(�fխȯ��޿r��_�
6��
�f5
�t�����J;���Cˎ�r���_�ۥ���9�
x���p��Iؚiu+�"6ݵ?2^�����?Ƨ��9ķ��
pÕ�-��;>θ�ڬ���Z���l�'mIإ���m
x
f��W��x'^���ǍG�%�ia6'9��dMY�2k�����
��p8 ؗ��Ϡ�`>Gm��I��)
{'�� 
Dx/~�{�>��׈P�H8A8zܩ�"��WA?jSN�8�0k���a�JZ�!;/���k;��WA�Z � 0��6^껴3o��5�W'�^�Y�������=��SN�wk�0�
1���&�o2��=8<s$	�Y��
^{6�iy1&>�����:����3�jI�8�k6&<�OG co&��:Y6��� �4�R>�6��TmL�T��:E�w�k�k�D�du�9�����^;��w#�1�kR�����w���7�7�c�Y1�b���
�k[�b0N[s�й1��B�0
�:��	�!
��[�'%UY��7b�H^��Z�������m_�G�W$�z�MX�b�wdm֨\u
-<��5p�N�����?YU��s�s�"ߘ�4
���T`���W/�o2#
�1�?�����{�/��+���al�n�&
ckN�O^�{�w�.i���{�a�}*�{j§W^�!�1i�f�]+���^>�x�Dt|���ؘ8��&6�9�q#ߝ�;퐷,ߩ���7����I["�c��;��Ww/|�>��9ϹԜ$|���u��o���5%�Y��������C+�,�:�֧>.�}���xk�s
����aeƫ�<k@�
j%��9/�[K��5�12!=u�T������[i%63<�
ߐs�T�A��)��_V����_%�zN$��Ε���ؔ�;n�3�π��r+�NI��X3cm�{*��
u�F���
�8`#�:z
8ҡ�J�Z��6� ����?
Trs�*������
-�
�o�
����^�&�
A�8�3���c_/Z.%?��:��-n7˓V� ���hmm/
�����5�?�9��IxM�WV
'������W�	��������[6��tX��,*x�h�|�_m�-�Nzג
-WB�ǧ쉻T�-�O�Mٍ��IM'��Ӿ�a��۟
������ܢ��� �÷
]�;/Ɯ&Y:�;�Y近Y
�!
X)�`��-�}��F��_���.
�t?����
\&BzU�;0v�Z�i��j,����ٺ����k�.O��_Z����zBܫ�%�ZIġ���l�C�-oKx�-q��=�Υ]:Q�58�1c�=������M��%�2P�� n�tn�Hk�6M׫9i���wVH�w����g�N�(6+:�p����)n���c���!=3r	����ݪ�]��+�&��+���VGGܷ�J
�����]n�vЄֲ��u�p	k^�5����?oV��Y%6gD�/nw��6��
-�s��q��c
eK�U����Ƣ���_I>���c;����W�~%��Jj�f�+�vne�#m
ܬ{'뒶�~�7�A9�I1��uu���WO���
��K�f��������I�<��hA6pkB~�~��7�����|�>�2!81�{��ɩ~�+�G���w�6E+�+1��ܳ��O֧�8��mWtN/Hy�>H���Lx����v�՜ȴ�\tZ�
���V� ����ۡ������?>5
�>������k?p��Ȝ���1�~א
_����O�o���Ȗ �n���?M:�U�M�MΚĸ�"`���E��>�1�q�V��h�OGŕ�ğf������w��9�m��
�ɆC��
liġWl�U]s��G͇=��dF�t��tj�ޯ�>ؚ�}��<{
x���k�K(9I��!
�
z9��<Q��=2
��s"�{1
�
�.��`�sa�~c�[�Pw�������u��I���Lx�+"4|
��K2n�+m^���|�6�*�t�u@�2�+�p���7�a�1b�6�N�\�
�i�ɤ[ڜ�K �����`�N
ox���
��+�K��̒Z�ڽ5���
�$೨K��t����y��6�$M���KQ�Q�����s�Uw`v-���������i7����iqe�&����S4$l���U�v~�Yv[|��V��8�|�I7�K���s�#�F;�-~s�Ș�tƭ�$]Z~��tn�߸1�hY���Ĭ��l�6�.k�M�*����55|�L��-ͅ,W�����Kޚv9�ٌ��lM5mM����[����WE�K:��z&�%�shz�&t��:�_��A�'��� ��>�?k�.1gQ�g-�踺->�j��hڭߵ0e���_�F�Z�w��� ^���4cB�M�{L����=�rO�Y|V�üm�fE
&Eܡ���Y��0���'�G�w�crR+��_K��=i����2�B-!z�������/���?��#���+b�_F�&�սC����m�g�[����M�i:1���HZ�A�� ��u��n&���9�gc��㪺���/�4�^o;4��7���^�d��6i݋)a���܃[6u��C�g	�Y����KϏ�n���}Zq̭ [...]
i�'�OԵO��d�F�p�]������b��g�zM�\�s��ڜ���t�єo�k,p��^y �6�ACx.�U��-Ԧ����ɔ
�^L��I�n`~���z��%�� �������M���i��1��#�V.Ttf�Z�β�3#:k�B��Ȝ�u�8�����-�|��,1�h�u�N w��ͪ�8�ḫ�lMK��F�G �TmMJN'�v<��ѳﻋ���
1��~kJv66�lڜR�-�
�������)\�& ��
��KodFٺ1%���H�m>����Ʀ�u)�^���;��WO�>����γ��~�q��������Ql`Ge��g�zzM�Im|���g���Or^n����"�L�iO����א��	'�)���E�hgQ��+��W�;�L)�[���C�}���M���q+s�v۟��	?��`������K'}k,:�����]��7��(��g�>��8�s���W�Mx��1�6��`®磳ٍIٹ
�gϞ\(�����
�^�\�b
��K�Ž�na����Hx���q��W���<M ��9̪�{p$�
����p ̯��<Ҧm�A�����
ߘ��c�.��	�$��8��q?�5j�����
ɻ1{�����~k�_	s#�<j6ߗ��:Xm
�\2h�Eܪ��G�}����}�x�a��!#�U�
8�(�Wq���gAϸ������h�h�	/�����"�	x
�6�6�1�Ѝ
���rVR��￞E
}W3��w�Z�-n�on8L�5�E�y/�O���/��3a�<
�H�>%g��>��t�EC�K�Tnq�������b�u<�C�P������2��gB�!�o�-�4鰴;��V.�a��X��
恸CӍ��ʄ˨��&F1h�[��j���ƌ�*���:ޫQYUtZ��$؛m��>��~��̟����Ջ���D�cN^Gz�a�!��tk8ȿ�
��d|��m���
��(fZ|&e7+VǕV�$�P�ً�z���$9#m�	�{�VQurNt&n�oUw�'ν����o�
5�9<��)�p����bvEgrz�79�+��g�T���x�
���_��"
�7��
���3��a"(n��݇�Ξ��Kژ����y��5
���jڷ�(��'t]�Iu
��AQc�)oI����`|��}Ob�O�����D��?�O�>��&
ʶ�U|w���`K�
~u�[�+<��/��l:0r'�
���o�\�����/�S�s
Uᖵ��$u8����׌��`����>�^0���
-6�Ԧ<�S�aQ�NHܜ򰫶���1�AEL�K���
j$�KҌ9D��^�B��L�'I���
�_����M�A;���q�d�'i����t ��*6�'=�v�-m�=��q���d��/��G��y8�����L:te
|��x��01�w5;?�}�*���F3Tto/{a
$0�;K7�?c{Q��YR+a��p��Z9��Y6}*A2�
|�g�o�D��M��"b�:S�anq�����׀�F��V�,��\K�$B}�%l
@1I��1b>Ы���G��[�SZ���Y�w� ��C17���d�GI���u�*�[��ÊM�;�3
IS�������?��;�'��&g��i���|�
쭰��Z��gڴ�ίM�mNw}�
�?���Ѳ��.<hc`�~#�8����F���7+������l��O#�k+��vʢ=�N����;k�S����G#������(����,��ƌ���=aU��=�~$eWr���]�9i:�L8Ul��K [...]
-_/*�q{������O7�`��m�q�"V5'�
��

��
�9e�֜�kmZV�6�q �1��]f�*p˄�V
-�
��8��Am��j>`"q�ԠF
wJj1����7��,�LĂ�'֥�e=�a#���t��\*|ݑ�O,�^�=
������ܲq8
�*��Z���]�
��Cy��e�'����홰 �����㮏7g�	����
�p�=,
�&����~<�Q`AYg2�����]���/�!������uz^�[���w�H�
�&#�
�.M�7���:u&`��7u���}���0/��p�F��a��-��;˖��^q����u���>�
�߹�Mp�)8ig樂w��m��xsdz��%�S�:���'� �o3i.��)`?E�p�5+��ژ�xb���2:�m�z"=��찦��N��G'�?����;�mw�j�㮾���o� ��ⲓ�7�VΉlX����?>�
���4��A�{T��Gٽz-6+��]06S/���v�r�O����>�鈕}(A�!
�b.n%�wF�†���{�����Βa��%��rá��pJ�Ǻ?ڰ���-��1����8.��y�/�l [...]
u–~�h�鈛s�5��$�g�u�8���w�Jvq�NnI������OэyU�lH.���*`ʮ�'��=}�iۂqߚ3�
�����+�ƝW�r��+s�֕iY5

�� lMX�П��]N�.�C�H�_N��7���I�F�[��WbA~M��?urO&ü����4�[��]轔�u��2p'�Tg�@���c�'
-���q{�A�'�}��f���\P%�qQ����Z�μV��l�!<�j��"喷�3�*<`�`������7����1�w*��%|>
2�a-k�q�Y�E� �o:5�K������� ��{s���\�Ի�i2A��Aǧ�?�,��]2�}�k0��
��Z�q'�x���
��Ȇ�oe�}s޾��ۨF~P��rK�0��>n�L;z�	祯����ìܜ�u'
n�<
T�#.Y���=�u;��/���1�?�>%<
\
��Z�tbn^�̀-�~m�fV���H_(p��_���>�1���­�o����,�4�3�j��1����r�s��/�Q��~�
�:�#�'� k��?��/�΄�F��<�G���u��Gj~�|�ܭU%}H�8	�A�i�r�
5g�!���V����/�$��0���G	����ie�y����	�񗓢S�G�Ĭ�� �7��0|CҮ�I{����

����x�l�� }��{r�v{I.h�C*�βJ�[T�_���%��Cc~�8��L�d
yt�Cbq�I匀����
6am
�)0�_M��R΋7�������=f]���
���t�<��/�����$�#X�h��:e�/kۘ<�Q���`O�$
�'�u1��
<p���?�-���-�~�)���#i��	�H�wÖZ��0��Ҧ�;��t@ѵ
5m%
kS��;�����ǰF�
�;.I}�Ϋў����2~i[.�S�|q��W���v,h���8؂
򍣸�y��s	���� �ϩ�Nug£��Z!p���[�6�	�_��LҸU����UsQ�?�S�	�!�KÞT�C:en�`�^6
��
�p�[ՙ���1�`��R>���y
�[6�;����1���;�E/��~n�]FEĦ�NH���C�љ^eҡ~)o� �2�R
���f�&�N�ܻ�CkmLҘtY��I��=�3�Q��e�y��]��'�M
:O�-�] ��ws ���kSs��
��lP'ǜ�Ft�D��v�(�
!�׳!���y�<��@1��{z��Jx-`ct���6�O��Լ���ѫ���p�&�dC琙���)��W(^k�.�� �ga�R>��o�
��
��?�
-Ȼ��smJR���}����{"�բ���Ǥ���G ��(�i�<����^ւ\#����[��'�W�ļx��5
�kngYo��3��ǧ*EƯ�dj����r��J��Zf�r�H��r���ˍ̒ތ����Y���x`�Z�g�G=}����
Џ�&Ǽ&5��e�w%}���������h2p�1
��cz^)]|����1o���7������ ���
f�A�.ˆ
z���,�W,0t
�iq��Oڲe�>
��
O��M�L�]�\~
��Xh�)�i ��M�G׳�8���~I��qX���[.G��0���{�?ao�fA�A'2-��

���j�yQ�~�!:��
ޚ
O��
���Sky�n<���U�a�i�#���q��>n��Ú��YЩ��(��r�N
�s��pj��KՅ�ۄv�VIm©�X���{�Dz��C���	ޑ�CP
�Uo͉kV'D'6'M����C+:˷@��A�G���m�Q��6��^E����_�|,���9w�k1�e�r���������
:�9)Eq��)���NP%��O�)2'LT��>�w���:�.<�5�=��Q6e}�n��� S�]� �	�%
���Op�r��.E;�3��L4i��o����듿��[?�{�@<�mP`�^s
-�Bҭg�-`�>��\��-�OX��H���)��
�]�g6��,n�:���u��]�Y�,
lMGʧ�
9�����ր�9
-6�����c����l
ɐ1azY:8�
�h�B�˹�K�����
-�f<�
���Z��l�l/�
8�[��:
:=���q���
�p5��6����P�
9�!�X;`PAYw�+��ͱ �Zߗ�D��,

�"r<�d��椇}:�2����ǣ��w_��aoe�%L�q��5��N��r���/1�Ŝ�ᅱ	�_K8�ڔ_#�wu�=��
6ph.$co5�G��˗&�χ
���؞ת�u`
Ʌ�[\��$��G�:��������_ςN
������*~& iڜ�|��Ng��=���?[��.�MI�bS��Q�o����^��d>���Ǖ��G8�g��1�P4��?�焧s�3)���RvĦu�Y=;�4�Sn�2aU�Ŧe5�(�CT�WE��G7'x��9��'�?
{���/n�
�Zy�b��c6љ�	�A�Wg~���w����m~®F�|�&o�Z�7����\�ڭYq�Ƙ�2�0�^͂~NفO8d
�	���Q�'�	���S\�V?ըra�*iWulM�+�s��m��i��~�I+����w��si�Qz[
ܗ�O?�
&�&��Nv�K̶�^g��]%����<���{���/K
-i.,�N{%
�9���	�ѴϨ��8q�&��)��)�����6�
����y�;�N�jBV
�
N�^>p
a�N@�ɸ��S� X��V�rQ�_:�h�����K��
5|돀	P�M�eR6�
u�
�)9ِ����
VpRva��d�gQ'�h.���y�3�!`d�}�3�zm‡8��y
�g���k��Ad�
��E�HZ�>�y�+nH»Ҁ�S�!�>�
~	��Jf^���+?.i�Q��q
��Uպ2*>�p�$<�kS��g�{J��� ��xWtVP��4��
-�Vu��'��,��
�­�L�b�	�!8�qțQ�if��>�w�%s
�ea��n-sj9�9��W��Y+�;YO�u�lN����ϠH�Z2��P��������w�}�)�

{~��$2�=�PԼ|��l�V�B�j���w��F&x�P���� \��]��K9$uqXױy��c�!����DV���G�iy�ǂ�+�G���Ķ�ݺ�[�VT,�XA���{!�{OH!	���		!���{�I �n�g�s�{�r'���8�f����Z���&#D۟�
�o
)��ꆼ��-u;
E�^�������R?����DMH<�b.f	��)B��)f���*%&��e��%�]��g
-�ﱬ�ۙ
�s��]C�2�pQ{��s%b
����ޟ+��?g)y�*L��
6�\EH1K𑗪2إ�
�s�
q�`�ϔ,�IB��
-0�A=�&`�'jT��
6�b��슒�9��1�>'�?��8�<��}Ѕ�V��
-��c�Y��
a�k�F]�������π6|_`#.��ԋy!۪�e]�1K��1��J\����ACH֋~�	L��%�3��)闖�?�L����kLp�:�BM���F���@��{�����^����*B�E�	>
�o��t��d�N�!��2��Yv酆Yd�$D�$��356�_k
��
%��
�7�?��t�ʡ���d���\�mZ����
6ɾ��0��o�,R
-�g����
-
��h�}����&�!gsT���4�g�E��L*�{����A��-�s,@�
��C��0�{}���~j�|��0Z����� Y�
��

2��
.�2MN֍�·�0�g
-J.P����2�����ן��ٽ��,�p1W!8��{C��{$++2�()@N�L��-2����mS�C�?7O�
��ZQ
���^#��n��mv8����{����aZ�y��n�D�7��m4@��Fq!GbR��%^[���$�E\h�y9>�y�a�s8��N��-bb�YF�[�*r[��:���
5ߎ3�0��
;=p��^�˅�4�b�8Ħ�&��<�M��cUl���

�|�C��1L�O
-�_�R�}.�)�DNN�
q,-�5��]�C�����%_�\�\}�c� ���
Lԙ
-�h���h�G���ηS���U�se(���U��cE9�$g�lvZk)t��-v��@?
J��Z���p �Q�*R�%:��2
u�a������?k<��EF񿷸
��R΁�?�P�l*L��x��Yh�$9�p��?�0K(��j��
m�$ĘƑ��#p�
ȇ��bw}��|����6��
�ۦ$%Ye�p�}
)&�R�.��w��w�&�i�
�j
����냺����M�� ]�u����p���ڊ�\n����Ez�v�����g] �"��$��c���*��5.��
 �-2D�
��)�k
ÿ���*2�AFޥ����
���M@,��\m�u:����9����%:�#���9>�x�UdÅn4�]k ���
'H	77�s_��a�/4����G*���I<<���o�=煮3��Y��ʰQ��]�ָ��6�&�gڀ�8�S�����ÿnv����!<�Fȱ��<��yr��42�\�M��Lʻ�s;����E~;�%�d��

pΉ���~�U�
-0�#��K=�[
-�.V�=�E����;q���0���1�v�
�B�v'��hd'F[�\q��EFK�H�I�q|��`ɗ�޼�ra�}97��z;�]?<0	�A��0.�`��U��8��z�%��~�(�6�)5L0��ԜR�������=�a���lv.CElwd�ҏ �(�)�6I�?
.r��ül�b�
��W�u�<�a�$�?�\����
\
#w�l�DY\�d���)B����\�C�����r~�� 9r���Չ���q��-�l�Ϧ)�G㘐�sl����P��zH���S@���<��k��>���j�ܦ�`.�����n���l.|�k�~е�>�����@�Y&1�
-Z汄�x4��?A�mv����Z=��q�s�O=Ѱ�M��΀/;Q�#�b��n_��VW��RC�s)#��j}��i��S�*��Ҙ�j���h���p���` �х�s!O����*�/O���	qf1:�:�� �p0�
8��g��C�,Yx1K�1�&��M�Bw��>�Wg=]m�w��Gx�T�]�Z�a?�e@?��
c� ]�e����Fc�˓I\��9z��y,�_hkk-Sl�� 
-�f\�F+����xo�
��Vs��b�k/.�q��Ml�EZ��$.�8C���}7[����㥆��/ ϟΗ�,T?N���(�|�W��]�qV��Z���8���ށ�������Kt�Z-��yB扺4�8R�ӑ�|�1��p��g����x���k�K=V�ӍCE�vz2_.�%8���oC~�>�Hx0�Ov��@��q�k��7�
E�{]�/���wrN܃qB��V��MJ˴M��LRf�^?�W?�Z��y:W���U�>D
��*Ks2BK<�����[�����Wƞ��{m��G��^G�H����׶I>�\]�?�02�{a����W+��U�9�դ:���O�R
����{��H]+�~ �f
��

@?��@�hY����
��B����J
�DƄX���86���^_��:�%��
|�
�3�w�i�8����#�:!�V�����T�>���
[d��#���d�a�sx۽�����e�1��|M�ӭ�
��iT���\���=�`���Z�Z��
�~1�5��`��p
v&%%Z��<F�J=u���F at O�����q\�E�C
M�Z��0�ly����~R]�~N��X��L[��p���
� ԧ�)��L��𥪼��ě��؛�؛c̴G�ݸ��aB�js���)b�uy:e_���<���"��r}�+'���

k�$Z���������g*^�=57㾦"�i'<�+�y�
z2��7IH	�}�O�
 � |6��u����LJ�'���n|�^LM=�VUŴ�ź�ד���'����JB��C_��{��Ź_U��?7Z3��g�Q�J8�{��O���ZB��9�XNM;��'Z.i���kG����_�6f;��y�O��4u�_r�
��ޘ
�kA��샇M��=֏�?
�y�kIv���}w��d�ゞX�1ٿ �i�����}ZjHq\�Ox4S
�2�E#"�n]���AT�Fw�{9'ᶄ�xSJO���g?���o��CnM
-�"��j��
���:�^�uY/�*�
4����줻��J~��^b�S4�a�/��?,����
Gc/�M�Ix8����,����
�Wb�v;���Se� ��a�wZ���-E��r�͋�
u�_9
�v���Ώ~{}(/�(5a����u����;����c�|� -a�
�f
���a�Q���P��� �#��\M��le꓍vJ�z��`���
�Xk�8��@����T�:Q�7��q����1R�J=�iF�� c��S�Ҟ.Ԧ?[kJu(.�
b
G����r
�`�
-p���t����g ��dE�����e}�C�Ir�������
����
ylu�Z�r��b�2���"Ʀ�B�rR�	Р�f��^�k����v'�
ȗ
���W@���������ab�jk駹j�f���B䡔�i�Y3���������j�DZa�M��
���ۊ]���U��彝��~��$.U9ow���Q���
���W��/3‚7Ԅ�ח �;�����
�I��p�-��Xo��������tu}ʻ.������OFq%y����
'%=
'$;(����Ġ����G�?�&�1��+��Y���{��)��7U��;���g��
���k]�CU]�!@>�(��ߵe�S.�h�M����)��ё��Ұ�
t�L���R�q9K��ȗ��
������9�ך��^*��
��a���<��>do��V�f�&��|e��RU�S%w{�e���}��8[	wYi���h.��ц�8��>�"c&y�LqKֻ�ߦxA�O�~�s"��R�o�a�k�o���D�8]5O�2����I�ו옛��2z�m	%��no�'p�����8��� [...]
-�Yo�y8Wr[#����[�ۈMy�/�z�����\�~x4\�Yߗ�~�=㣘�}Sמ��TEou��m4���En��
�����oQ>KM��씯��"��Ns��d^8~�&��Z]�
� ��T���K�%�w�I����`aF�G����l�uZoHs��C�Z$ĸ�i.�4�*8V�inod��s59����;+�	�w:�^[f�i�ʤ�+-�ģ�&�n?7}����LU�
/���
�<DI}�݁͹TU���1����
W[��t-��=����jhП��0��0��5/��r^l4��j�	�Vg=��~�D~���b&{��R�L�gQ�6��|��.��ۍ�Y�����h��<�L
����5��� >n�w������>�F[��d�ۆ�?Nq�ò\�[f)>so�֚�|�!�q�)��lU��4+��
7��A*��$�n
2�_j�b
�
�[�ۀ��u���Nҏ�vSNt����bD>;ƥ�k���&'g m2O��"�\�1I��.4�߫�Q�2a����	���t{�~�t������6x�i��2Í���6��2v��!�qt��]���w��HJ�;�__��+��V��
[�� 97�q���`����
z2�MP5f|d����l'G�V��IhI��I��
W �a{��c)1�&��-6f�Y�,�2K�������~��N�ם���#�459_�za�����W�1R�R��$e�ܝb'ݛd�<
���ce�-� C���
-|���c��������+��FK��zS�. c�)��
�[~��N
-"�
���?Y��p{_Qp{����� ��"���c�h+s\-r�?�X�>f�&�q�1�Y�MzD�~{��$��r3<DY���t���L`N�J��&1"d�>�u:�v'>�aw
�0]�
�i��~��e�e%�E���ҝ���^Y��ЕAt�jw��e��{4FI��-�l
2��_M@�]�-	8�6y�po���܈q��d:�a"�\��y,!���P��>[�=
`�1>l��ޑ�֘�T��y,�'�ꅇ\�5ü�c�mu���Nj�^-��sm�v{�*��B}��s
u
H��I.�b��:�{Y&�9G̼�V��be�S%7󱌙�PJ�z�Ղ�2��JWZ��
5�/
y/������`_-rZ�\+2d��8�TU���^{�4��U�����	s�n��<��O���F�)+-��N���1�pl
†
�ҊΕ,�U�*��9 �*䟵���J�!�y��	6.�ds� �Z����T�BT��&�Q���F��74�������͖�:
t��U��S]o
�b�~.�)��t��h�����S�,U����~�C�#
>�����(9z��J�M�7Ŋ��C�v����p�.�i�%�yc��\

~8�L�8��O��4�c�-Rd��`��^O��r]���΢/#��zT�#Em��u��~(F-5����u�����Z�K{��U�7�Lx4_������#�la���ۣ�0EU��������`䛧�6%�t��
��q���w��En�
E_f;
-�w�qYbN����=P�Ñ�P�<�\M�]h����qF�����s5��,�E��ꊔ3�t� �����`�������!Íc��U���v�j���F�A���.4�}� ����ىK�ģ��
��2]
c�D�8��L^N8S����� �8.֪�#
#����R���
����g ���\�`NT���	J�j��TU+:V
-�Gb\��>�v�y:Sl��� ^���
@�]�d��5�7�0�+����\������=p/�5VVW�6HH��Z[�v8L�>#F�G�A��o����wk
���C���t��Z��rF��rV���
v"a�7{0�

��Gc�8M3֯������YQ�Ӄa�߱�Yp�5��<�K��ga��U�[g+8Z�z�W׆���D{�Z����|�0=c���`�9���89
h��a�C'�����y���T���c��9��Nf.f+�7zK}U@
�=�F��m-��i���p��MY/v���懲z�v4BK��9����w2V���	6�X�Fl}2��Ԟy~*F
O����'�
��uB���P�ڴW��?V[�ީk��%�T�����Jf��+K��+`i�Js����jC�?���p�?���$"�x���5D���O�D�Ԍ��Ƃô�'S���+�������X����������<M� ��3@�%�<��)��;V�;\�m��#�c�D`\>l�Q3�4��$#{���c���S�Oz>N��{(E�/
-8s}���h��+}%QgZF�YJ�׏c��c��M KO�"�
SC
� �|�
2D�yl��Zd"‘��x$�@Ng���T��
%׬���Z
���d�>��LQ��L��gJv�p�_�d�U^
|(.��{����N���,r0^���bm������r�IBI2 �h\��$)��
�x����d�
-gs!�2FVx0����$e���
�
-j��@���P��f{������g3�d���}>��e���V�ި �����
�(��v� �/ֻJ��P�̈́����Tǃ^���[��R�y���HR�`�.��N'�G?�:��gm��[�ޟ(��C16r�%��(%��$'�Q7.�^\���nj�d
Χ	}K-{�+�
𥆒o�a�6{�.=i��m���,=�$%Yd|�m���7�H���y1A��-e'��,�y܅�.f�:,t�zvP�I9����Gc�d��aj�D���K ^�
-TܱFH?VV0��y�
|
����;�n�r\���ۇ�9B�F	іI�8AM��%=Yj)�4���19�DɅ��
-��ʲ��	l�e���:�2bU����J�,6���d�Xi-r�LѲ��SU����%8X����	F�^?�w�1�i�5���(9v��m�� ��k��_�pI �ҭrb��
�V��Lu�kYy��y<��
M3 ��� �R@�(x(�����/r�,�8�cbl�
�!`����P��t"GG�
~S
-
��w�,��e�:Wq��UB���n��a��4I)I��p���|��V���01v��k�\x$%�mw"���"?��#�
-B�I�O5�p��Y��������oe��[�Mښ
-��
�=�	���Z5 V��-1%#��T��	��ִ��|�����FW�����7���/�S?�ZT],	kV�|dQ�/�jO4"�M�Gئ8P�(#e���Gm#$=�a��Z�)�A�f+�w��p�C�>
��Z�|�I�ŭ �𧾧S�R�l�d�NT<�y�U`����P�%�`��ن��KS���A�?�&�GX��1^���
7_
{��M�1LV�ׇ��35E��U��N|�e������&��{�����Y�׻��6��?�	\��p��?��2_�`�f4���	c\ćH�ݵfb�?�U���E�q���0�cgy$%�}�e���H�-ov�Y)ƩF�F?;U#,px�� !��=���,��J
<b���/�|X[z��\�&' \^
h�|6{!�z*΢�#-.�h�9���up2̓^��2�=�|]kNr\��}j�3�T�e�=����
вN�<@�����`��
-b�u�����u4����r�~���=�
<��X�P���qL���wo y�0�K>��:뚡����sM9Ӫ*C���cTU��F��|U��b��P�K��[� ��kS�-w�����a?�;����[��.���M��B�hD9/
��G�جc�|2[N�N�x/<����}PO� ���,����|�1��,+����f���qZ�E^�1Mx�0�t
��&�Q7U���[}.�qR��[|��Sl
b$�3�o
�5

^l��\��rۙ��nOP ��
me��Jmǡ
#*[?� �,p�?օ��K�n��/y"��d�nT��>���^�J�Kq�I|�IN.����Z�
�BW���i|�a��t��+?�������m8�*:Mѐϵ\���K�$��]z����w'��'�jV�����֎��5�\�5Hi�8��M�JʞXX�d%nt��[��۝�H]kY�l��0/�� :�����f�)�2�pR�h��,���fגw��e#��R)̢�o� [...]
-]����ͮ��
-��f���
r�V�n
��t��D��2<��,
�bl
�
-��~�qz�M.�Z��#Veu�E���}R
-Ҟ�:�[��]we�f33d����*H�lf��w񒖁��RQ���O��(�d������	Y��L��J���J}�U+�ͷ�/��<���lU�૭H������=0��AD�e��u"e������Z��V�(�6�H��V���dmE���Η�������!e{���7��:TpK�g�I3�M�-�Ƈ�v�|�M��/�<�Q�/nE���Ee�_��F���ן�D����o�.���|�T�y�T�z�P)2O��M����9��X�!],p��%�{�E~�
`��~��� !�
���x�?��ˊΦ�D�
-�v+)��C�9���9ųUE.�aB��8!Φ`BNf���
-D��"쩄zO׋
8Q�U�1���6��V5q�x�#���Ar�����A?�9�K
���f��r��BS����|��U~�ϭ��_��Cz)1{�|���
/�H��k���ؤ
12Jݐ�f�#�͑
w�R.�X�j<��K��I�7���m��1_�b�,�Yn�y�֛��P��;_)#m
endstream
endobj
328 0 obj
<</Length 65536>>stream
-
�C7����5�o����턂�D��cB~+	���	�����_��7�����;���+�D�?�������X?�y,�������j�|���?N
-P�F��N������X����+���+�Y���bo��~#�������j3<�E#*��B�t�
`%%e0]9R�M
-��e.w�*�n�T��v<�Q
�';%�&"�j���nl�5AZ�
r���_�D�
-|�
-}�
�w�҉�z��Y�l��GS5��I!j��<`y��&g��<t��{ً��ė<
�\qȗ���'MЬ{�p����
�^ݿ

-��*+5����

��d�I�-2�
�Љ�T���ӊO�U��v��[�t��|5#D�
-1>*
ʣ�$�;-�6:�z��W1�~Rb�o�"|_���+�x�
g�/g��H	{Rl���(��
Yj�jk�>2!�k��p�%f9��#�B�^��\�s~z�p���UFb�C'!������C�
�Yp�
w��@���S�j.�l�O1��+]�n*aዹ��lѷ2?�6������Jl�uL��uRb����@���:?�����&.�NM^���Aj�E-��g*�{b^�� &x�
�=���oG{�����;��d��m��۝D�'�V�	�Rn0��nF�������'��p����]P~������+¦mqD�|��@���5���*�~�XQiP\2NM<�&&
k�P�����
��iy-2��8�eYz�_Uy	�p1w��=n�
-c
'XI���̗�\�/
���DC�.���������k�ё�pW�;�� �{wA
?�~|t���w���8��=�����i*r��<�8�\�$M�
�F*��qy�Ќ�ܴk��+a���Zu�����|�@��^�\
�b>�y}x�}�:(�P��TD�Zh�|�4����B��Tb?�vp�����4�SY!�&*%�JNp0(��������_ �'O at a��@_�;�
������u�ݷA^�
A�8�&eC��:��tC��x5V�����bx������&
�.3+�ZA�ߕ�/�,ϯ�|/OP��O ����7@<�{��o��^���� ~~���z���&Ҩ�$�A�,4�d
(��v�x5ɵ[|���x
|�B��"]^�ܟ9�>;>ݿqt�k�7o�^ �����zx��\s�G�$&|k��K/!Dot"��u|'*Po{h�k���؄�k%�A�
wP��� 7LJ���\
������-ЍkW���ܟ����o
-Q�ߙF��X����
-�g��?GS���AR�����y����
s5��
���������/A���~���=���' �[�@׮�z\/����@SO��="�
Hګͪڊ�i!nk���hD~�žW!3��"�>	���������9(��k�3�|w�_�����c����\

��QA��9��ں�7��&�
~����Z'-����,��C�k���x��C,ԧ:X�}\l�o�_ݯ|���D��

�n c� ��$wWPiD�5bJ�_���0�Ti�ڤ >X���(}(@ޤ@��3�Ab����~������@߾z����KP�g�kĴ�{����
-r�Z'�ۢf��>V7Q[
�*V���ԕ�� �Aʊ��N��������r�
�8�\?���{
��@�<�~�|%���7JrȃN\��	n���AZ�|7)@YKtW�1���8��ep�&�I
�����g��(�����{�� �>] ��������_��	z~�
(��{",�V3<��|=.T�ψ�
p��Ey��O
���4��*x��*
�/BV��w�[ǧ g��<
��߁�=zzz��	��� w8���?���q��B�[�tY�A�o
a�V;�>�
��W0�W?ZW�]�'8%�������Jps}z�
��?Aw~�
���9��_�@�<�x�\���r���x��q4���
#FmCW;��Ԁ!�u���
�����
���	�q� }z�
�׵렧7o�������; _�E����
�}w���fQ�JNe'+���dє�w&(	���o�
�/5��G���k�_�A�n�,;�
X~��
 �π~
zx�/����:�^>z
-ry�
-��;1%�a���9���KZD&em�Z/-f��1�M	n�?E%G\
�����#��3�9���
�-�Ż����������3'Pax��H�o�������؟�š�6�hVHߙ��
��j7�"� �F˻�N��-��ӕ��
@�x�ܜ^�n]�
���_�u��>�xr�2���zvƽjT���.D��)���07u���6^�����R�.
xڳ.
-�}5��
-�Zz�w
��Oσ�,k����C,�v�w'����*�f ��j��3uU�ӕx� ?e��
8T�p��=�Q��H��&߅�Gz^
W|�w���u���x�����
��Tחe��	���
�������f�&j�+cM4�P=��r���B\W
�Y]�C�ޒ�J
��B³������?����Ӄ��$Ϡ�4�v
�K�(�X�f��Kx���
-�~��<�W�S�C�oJ��Oۻ��q����P��䠄k��>�^���
�o�n�`w�ށW��ӮB�
-n��ůGxh��j�YU�0L� �i
�L#�9_����V���Z�f��x��)AD&:ee�
���-���5
���t��=P�א��
�#�����e������XFyc��b?
�r�QV��
��/
7T�„��g�� -qȏN��}5����K�v���y���
���.��I+���)3*�F9#�x^�;[k�8_�n?]�j�UqњAJ���,��K{�B"�.�@
��9�q��wKS��y�����(���|51(�z�7�+���?Y���Z�n�
u(�eNUR
r^��xY�l+�}���9YK�w�'�a����?��ndG����L��
��ǛW��o]��$�9$�'�͊O�� ����zx$/u#�۔ ��jwi��JE��_�ü#��l��Vm)jXS��Z
-�>7珨/^W"�<@yaѠ���k1~��=�<%y]���YC�;��˃胩ṟ��3��D�ʖ�=���L607'�I�}���V�ט���s��hC�
u�vG�釲Z�IQ�1�E�)f���ڕ�Ś&�
�/��U"��t9jSQ�Z��!�
7����ȹ.~��DW��X�n��|u�	�1� �`ƝM�Qg �,�ʲ#
|(��-�
5yϸA�P�#��e�SU�^N���"w���X��
Ռ
}}4qCs�xECh7��Z[
-�׊���UV�o�4�͊�������
��'�|�霈c���n�Ӗ��Q[#�½�*��PU���6M��\0�ђ%ih���������
1�Ϊ��LisCJ����_])l,ݚ�a�q�
ۗ�26�Q_�br��k
�Y>mc
�)%%iFxi��\���ʨѶ�
q{kN�����?P���~Q�rB��u#��C9)ͤa�X+���uͦ��Σ��������@<�c��2Z�NB���">�;�CMe�����
8�YOuSB���o��"����SSy��d
7xC�*2��)OV�m���'kM����a�bU��݄i���W����hqZ@���Q�f~��`
tE�S37T[��qR'[؁���]ݝ����x͐ kCV��Ή��ZU�k���L����"u#��1~�~���)cU��Y�!�o�b�%�v�d;
�"�s�
���ٳ�c���6���"N�_]�.nf駛��TB��0&FU�pw�}��~�j]�-��GJF�Y+�oO�#W����ʌ���8Yk]�T7L1ЀP�w���13iu��<D]
��Z�"�~J�[�A;��ګ�
�w�O�͚�J���~x��	J����kCq�ݓ)>�6SN?�PR
RB��>ʤ �:�ȱ�p1'�յ�*
ªp7�.=[h�\,4t��T���<��4=ks�#&�lI�ـW�~_�
��m�F�v9��Yj��
��`��r�,+��4�
M�	�
-E��vd�~��c���$�
�05vw�
�9H�ݓ����n��7QG�����&� q��(;���!VY�}�m�b��Ϫ�`���ң�2�A�/��
�T��5U<�J@�jjk����#e}Ł�W�%&Go�I�z=�`��d��×��ik�U`�t��x�n�<����iR�!f96fo�jQ��VT�gd�BH�-Զ����4��;3m�۪��mE=ge�
�:*뤵�}r���_,�x����]#s�_i_Ѥ���<�u���|�z��zDZ:��"kU��z),�E��aq�D�|��{tQV�XS0sW���T9�d޾nu���ru�>]�l?_k�?[��2�XE���-�k��2#$�M027z�^G�2�m��}s ��~�9�
-�"D����������
3߭��1�&��-U���0�'S�P�
�;�5O1r��|̉���\�繤�������δ�
������\������Q[�P
|�(#���(�竪m�2�n�4P"L�7]��H����U�kZ��5�
r
-Ҿ��Œ��t^�x�-F�η�~^�+t����-��C�@;�s|�ɒH`��bOP�
9�2MJ�-��.��s���T�2`Ut
Z��}MK�m���"���Ŕ����C99s����lK���5�8I���0
-�jj�YNL:Ѱ��jF�9Pw�Km���
+B�a�>������iZ��%�U&����R�y���oUU�
I)I��b/��g��nR��+c,�hy���>�l���X��mU7���|�Zg���^���0:`_Bϔ���5��죩J&����EӾ���
)�8
\�yjU� g�-�3"�l7��H��
k*�O4�����2��]�;��ۗ"�ϗD���*�]c���#9�Ȭ`�
k�>��M*
-�1~�QV�����x�������с 
S/��B�42��"�c��8ܢ�]��L��7J�
u�����#mm���	3NӲL*.�x��r����w��׾���
s�@��X��/P
M
-rʉ�9_)瘕lı}�-Q�7���qh6-g��m��y(� O�k�l�5
�jf�uMT���������Vy��5��x����
/��g��M�KՍ���՗�@m�O��-CY�������`އ�Yz{����MP3N��������սU-F-:՜�>�G
����ʘ`�
�}�V�}Ѿfs�*�&������j��)6t�9�I[��p�+��MMH5Oc3.������\Ƹ(�QA�|�Ս���̣ib���2��=R�竂���z�~������\?�/��*��)'*z�EAH�C���S�
H����<�)�oGj.�d���x���P# �)�G�� �d���X��A����NE�Y�C�us�v��������,�>�f	.�`��W즪�rXl,��g�FI��Rb���{���:������E:�]y������Y�'0v�
-��fYT�l�
�+��n�D�Z�n=[�k6O
q�IF�A?�UL��>SN2�E8U+9����ׇ��9/*?V�GS\(P����cV2�6���?]ǮB�>mA$z��B�7��i&%6ڬ����P�p8M�ؖ2�V�Ha�)!�|�aȾN����:��������������r�l;��Z*�l������"�IQVdR1
����lߟv������v���@x�Z��s�ϿX$��/R�.���������0dR����<�Y[-:RW��<P��ߗ
��
)���	�{v���t���s�e�|_�m��ڭƧ�
A���\
���.ɾ��<��|�Ql�g�R3/�ʙ�ք�)d�A�O?�5� ?5e�a��'�_
����E*�b�N���W��l��=�|��٬��{�ٿ����O<����f�'���aV�����n� %���D���q�"��f�Ig
����&���
*!æ��/�ߗ��Ĭ��t�a��
uE�Y�6#��R�����n���%\�^�
�
��V�	�;��=	*�p���ģ
k�E�󕵶�f��zM��fE����JE�Y�'o
B�*z�}Oԃ	r����{�qN�yԳ����ډ����,�تa���-X��|ԡ�Y�������A������-Q��l	
�e�:|�c:�闺��'��'AG���[3���g?�逺��	�C9��>�mc��Ke%㧶��}��)6�$���2��k����E����,�9Yd��rb�ANJ�hH��rα���?��:�������I�RF�i�y0@
6K������A��Vw�K�d�3sw)yVIY񁄖�5���$G
M�
m2^�M����<;�.��~ ��|�
Ȋ�
�$%yWB�4Ș@-WU�.x��`�5�U�s5��g��Z|ҩ�$�P�
�cB��Ё��,�b'1ؤ�`����k9(+��V��]rb�� .�
�T7�_.ն�.�4Xgif&��h�

a���M	���4����(�|�qжP�px'�}O)&�0����r���H�
Ƈ%̂˅���@�;��
 [...]
-��2Ot�D���'���g �N��k
�m�C2�0�)C�,�?6��?W�e�ZZI75��b*��F��皝�Y�])��2�N��bS/���mVv
���@�,7OY�5ն
�DS�8ײJ�Ɛ�GJy��ފ��9S-:���Hi61)a��bj�"�gl
�C:(�wʓ�
X �5�X�{C耭�B׍!��J��E^�Y	w���Aa��n�4�o]��加
�-�
-`dk�-�ݳ�m�������QZ�ZS���<�Ś�
UO��R
���Mz��
^�z����$eM�65}�fB�&Q��}Y
����9͢`����4
�EIL>��Ɲk1q62r{��
�9V�(�٦�CU�[�ɗ3��S%
jQ�2�jJ��1v�>�
v�
%$i�K7z`~�JV�A�
;,�r��3%�R�,9�e��5�rQ��	d��'���@����#��-��&)#�l¾�6��|�O��EGrr�U�,1��&	)��8�4���M��\��t���t���(�����>����p�x
��c����$��7��J/�,s����5
�
���"d
)��������]�j��Z�=[d��4�H�<`
�m� ��L�IJ���h�G�8�4#��7��V�����dz|�������Y�%f��h�\�T��4l�IIL1L��>� ���?־���'�f
H��z���ோ5��](߭�B�&�$��n�����-�l��>g��Lf&S�{OLL3��c�w�w��{( E�	b�&EĚd����ܜ�.��ޫ�����Z��
Wvf浞�1�>
�ܣB��e�6Iɧ�Lŷ5 [...]
��
rW:A�U
����W��
�01Q�-��de_�3�.j@+��C�Y��y�����A׿ce�ؗ��6	�v{�.�:	_
�~��N��'��Z��|V4d>ڗb*��s�Os��?Z����o,5D���[��`�Ri�gծ� B���ϖX���
-SȨ�	x(`+Iۣ���Ƣ@|�_'p��}�ߞD�m�?�(z�������
-<V�j4��
"�ؽ[J,��’|+تc3}�.���z�>�H9Բ�����JHE�qd�c�`��
�
�����u-�O<
��,��f���l�l{n�,hl̼♬���W��NT�蹀�m�w˨u�U��ɚ赡�@�`�S���W�i����u�Ke�o9Y����
�uQ<ڵ ��S�R]@
u�?8�aa.1�����5�����	h��"�0�'g�ڞ�b���>������ �¾�=�
Z�
-C۳��Y\�G%���۶D�ҥ6H��

��&m
��:fj�x��>V��.Fg
�)�C=�ԧAdyU��c�Ǹ�f"ܣD����-n�Cf��
�KA��iٴSs}۞
��Q ��摩�E|�O��
�^
}�ڽt��8�[�����t�
*~{
�5�v-�J
����^b�G�/�([[<
-6»H.9T3�
-B�k��>X�|��|ec���Ud��Yk�����Yh
���\�f7�>��y��2������-�b�2f��O;S���1H��d���%.kO�g1(�h��:3q���b�S�
s��J{�}Ck�S��Y�:@I��Jo�� �?�M���C��_�:����s������ޏ���4`WG����?��@�=R|�G�r�� ����4�h����4[+
P�~�3S~7w=u�B���|� �[f�q���c�p�
.�1�Oݝ$$o� B���m��u=�`}3⃈Z�o���;ˁJ��wD�؟���
�YH��4��c
-v�LA��3�aӟ���)�>�r8{"P艶"�P[�2��T�
{�<P��!���Lc�և��/q�
uS�!0W��Ԅߚ*�~���u�J�`��0����
[B|�������wY�ͼ "G�C��i���1lw�V�=�MpLJ]:�=���J�_ud艖�<\��N�\֗ �.Q GB屆Xu���
:�9	��ޚss�/�ޑ
��� �èh�$2�)�$��Щ����aا�Ƃ s/8�.�C��ܭf��
�OŨ;Y��]
-&l_I�=����
��N��Rk�SQOߛ�yp�����ݢ���x�e���RC�uCW��3�e���@��w.�~�ȑi�9�W�t�SM��>y+˶��S\��2
y�L����Pi�yX���o��<6�,{WZ|�����ǫr������ 7�9$�x�
��Y汜�6���yG+�v��Cr��ɶ)�g]k��Y!+�>�ُڶ�x���kʾe�.xj/�S���R�Է��>]�����-�|�
ȯ�
�#��u�Q~��b�p����֪ �
��d�Mݙ�%m
�}��zil)|�=
-Z�@EM��nSҟ a!w&Pq�����M�7u�%��nj�n���=�o��&au� �
�wo
_l���6�>�@F��'���.`���|�CD)8\�BN�l��,�/�9� M��7'��L��oV�k��Z at O����Cy[�SL/_�{/�d�J�x�~��E����Q\��
�Q���Z7$�o-��hd}K�KMS�k�dI����Tpo��y�!׮t�_��{�A�vg�¬Bp��"��hbysq�'����jn9�2�;����QX�u�p��c�2|��qG�*���L=�O����3�?%��*n�mS{�˝AX��4�0�ӝ��n쎒QGA��h~�N��1��u����
-�|��f
3��uԅ\��]~��vAoWs�)I��I��nv��?���}��{��+Þ ������͡�Wj~�Ů�W�HX�����C�*�ZD��o+��/Z.�\�C"�fA��N��#�t�<��."�
�iU��Uo5��JF�S�O?�׽��<-��e���]n�����4Py���N�>ճ9':�}�՟Yѿ���4Tؾ���K���s�T��=�0	���pe' K
)��
)"߽����7�����%b���
 _�P��jL񉑁w-1��2j����~SȀk�
?�C9
朥ۦpI�>�3��c�\n�D�/�g�04e���B�pn��ᚫ�9�rX	�vc�����}�b"N�d��U2�B<YA��LWY���*jm�����9�"\"
�P�A�D�T���S��'��3GȚb�=Z����{S���Ί��}���3Ш��{r^�s/�홦��6�3t�*�{+߬uU}�x�H�-��aS,Br�7CS�ߦ�n��
-6�>Z�-�g�ʻ
��3����+ĥh�@w11^)
l�#6�낥�����_���~�']��3���/�Yo�)J"N��*]{֭H������C���>Z��=�+<4�U�Z��	<Ѱ(g&~�G0��Tv��,��o��^���o���c
���"y�,�ON,ٟG��
A���J_�K���æh%A�����H�4��>̓{fq)�)T�� "]Q_
�^��E^Q䁄�ٗP at J^�ms���ap�	q�a\rz�bgY�3%��\n9�do�`G�|o
8f��NP8KH���x��It����2꽋�����	�G�
2ӧ�g�g��<4 L3��_G����6{�D'�&����3n['K_�N���t��K��Q�<2�-�U������������ss��?6z
-^�(���L\������>�N�O
��B�{U��1�{�2:oo��m/ �� ��C�%*�k^�O��=���õ��ok,�W\
�ݛ}k�'���;��GU�u���ܚ����q�����/����\�
~��!�*r�!�|K,�4������9YfcO�
�g��Ϡb,å��#9��&D��"Bݳ��}	:`�7��{�`�Eb�R�+���X(������=jp��q��M>T�e��i�I
my�����cu��`� ��g�ˍ97���j^y�f�D/��K?<���,n�({>�	�e����!劈
���
���`U�
��9^�qw��2��@F�?����fK?h�2�XƑ�_
��gz>�)Xl���c��a�]"�S%�4�$<�u„�$������ �
>s}��%�ݒ�s.�h9W���aLҕ)R���ڨ���O
-~��fփ)|�Ӎ��O_ ���#��h�(8X՞�꫑��j�6ف��;^�zw��:p����fh�(�����@Nt��=1<f��, at JO:��^\�*{f
��7V�ހD>��<P� �:�)%Uئ+ߪ�n�������AJI�_�q����Ѝ^��9��D���g�#�j`��JB�{�v�$��l��4*�#�T�Z�_��)�|\�*y�]}����̀�W2^����l3�D�
���T���X�
-��^�˴� 暯;ѱ_�̓^9�fk� �%�N8�P�g��S�'�l�@C�b��LM�%���m�o7�Kܳ!��긽iH��@�3������u��Ѳ��#�Q�g�}���I�������^�T��K8�t��л|`�^:��#���C���p���B�}�c˼����5V��F���HÜ� ,���
����
��-��j
��ʈ��.��
t��l�����ۖ�G��� s{�]���]f"� ��+�	���)�<��J�u�O����ڵ�
-�9n_CE�k���ÿ̍À���c5!>%w��<x�4�~s�H,ܛA���C71�^t�?��q�3CH����>����}`�D|�
'�M�I�>1BD����e.�%%�:�
-���%\Yn��SL��+��
�8@~��
�� y��e>y��ɱπ�v�A/���H�46N�)�5�/z�=K�ڑpaKm�c��_:+B�o������쟋�Ի�@���>^�Ix���6ͳ@�<��sܳ�a�y��BJ��K��ݬ����8XDen�^�����3�~��b���S���z�Dx����H�����=1&�%��n�`�Z*�P��MAS���UG�=EK�mw~�.��0"�&�
� ������1�~��+
��&�s�Ŗ;D��lI�[0�2��in��*���fOL(��4�,"�<P���U�PL˾Z_r��&�m
�`
�0JC�Z�p�>�ns�*��W���[|�4��%}���a�4|���Z���՞��[�Z�
�I`}[�#%+��J{�C�
&eO¬����{\
-�&ԍ�����?Bޝ[ D��b��鞭K��
N�U^����:����o���g����ŧZX�u��+���;������}C�C.��D�3CC渚I��c`���J��&ng4�c�"���ݩnh�-������c�|��z mn��
E�^��yo�G۞#d���*���?��
���pU��@�Ýޜ�YD��
������$�`O‚�΢�,����D�U�r*P��Z:�@�6x��;Է��[�Ό���&.����<\XR�ϳ˩�.U=sg��'���sS{�5?��ZO�G��l
�	Z�&��5��F��IV��!e�����P�x��C
��
��-1�dOB���L��YgcS]�� 
@4�R�
�d�Cg�{��/��

�U���@�{u�H�6,��[�x}f�g�l�ِ�
J���o�G������3.�
-�*ڋ���~���?ا������欻�qP�jO�sC[�=�D��<ӧ�n	�;3��c-�q�ebOWX�c���}�n
,~��&��I��9f���Wx���
bc
�f}��=������ah��8:���zwe��2��[b��t � v	,�4\�VY_x�o��'�o��������e�
�8��:�J�
�qJ�{�xm"�*"
 �ۧ��
.0k�st�}���O�9FH��Yd�7��R~�
�<*
���##�vjf1N��w����̒��
-
�!f�.�+�Rx��p��h��H�;�.�hm�
=���8<sc[2��{&e�ݳ�A�|�Ȕ�E*�@B��
�LZ��~g�ͺ{����\��$ls����xn�Jg����W
�S�O�d�����Ⳟ���N�ꛏT���.�ԚO�K��=V����0
�^@���-C'-s.)�tc
-��wc���]a�}�z�2�2�N�
-1�Yb֚��R{ޭ��컋��+�����o="
�8X/d���F�/��
x� 92Ѱ�e
�P�
���u
-_Lm��>x_�\ޑ��p���
-�Ȯ&�G����7
Br�e��.��\m/}�]k����
����Yb�v���E�{0D���5	�ڗq�
-�@�/>�bK
��.BFX�uvioe��b�ħX����
-�/���o�D�_&�T/h �H�-
�G���c}Cӡ���(0yv1(�&��v�H��v��9S��B<�M�1P
w��6�B(�I\�UCC�]�
%O�X���xic�P�Z���L`,Ӑ`�
n��:XFdy�d�MBC
�6�x���}
�̫F�x��b�
����tl��&uw�W��E�;���N�<�t��n�G�
!�%�y!l���'�	���7�9t��<�8X�rs��c�
�#~���������_�GN��"Մ
-����
,�:W�d�K���(�Nh��#=��as����d��K
��?{�>����~!Bf��^D�����j
����i ���Q۳�\��Y-o�<��f
 ��_C�p��L���uM�����a����T~hC�ދ||���ⰿ�D�[Z
�9��\ݒ��]��G^��s�����p����]<�w��r�_M
�ߛt�_��-aN��pA��xm
0
䱁��_���l���M9U���1Q���$!OM���Qȧ�1|2[�ꖮ}u=׫4j��J�%Ɨ�D:Pa��
�T��&�68;H�\~���5W
��˼��U��6R�~g+�g�Ą��>X
q�c��5G:t�S�r\��^ gx�X�/���S=�}��2���e V��gSҪ4���ijY��!f��K�CF/
V��L- �
-��%�L
�K����#Đ�\|ɉ�Q�/��R�>˺H���=��u,�s�'qi�v���9
-�@#h�IU�EH�S�p�CS��bN4l⡆��i�
���?��N�\��o�o	`�)b��0.a{�y���IQ���R/�c
�vos���^�r��♘�r[��y:�˼�GL���å� ��GDl
�Q�B���.��������8tdj�vk��{¤�U&��,86���

m^ �8�2`}�gٙw���W����w����RK-�Ȉ�����μ�#��61�r�Sx_�X�l_����t�[��w+���E|���~������?td�:��>ko�\{��� �
�3j,b\�� 4t�hKr�C��Z�Kշ�}\��ڞ�I�����0�S��G���''@>t�ɥ1��.�Tx4l�]΂��SK
r&T�]�&�@�:l�;��b�*v{���F/���x]�e�U-j�Ǒ
-�n�
U��̓"
��״���VG+B�
Ea�
ş]��6��k����N�K�
~jl95�1���l�4�����'!��/���_͜�M!6�0��w(8�/�΅����N%|3c+�U���P�s�R����y��ն�Ss��^�b�����+

�8�������o�=��@�wU=[�D}�7�mv�B�8y7��׻�~�>����}W��s����B�s��UK=*RՉ�'866
�V���,̩��p�qY>%
��#��\�v�`�,�f���"f�?h,�|N�λ���X�a�������K�����0�@��Dm����g8E���qI���X�m�:BޔrwQ�~�2Y��H%ە$Ȟ��'��tˠ�G�xȿ�����j��{2k�=	����
%�r������
X�0:�B4ᒜW���~��<
��=I�[�y�>P܏L�:GO��';湨�AzZ?>�	�'�]JZ͑� :�aʼ$`��t��V�Zf�}��Σ^�1��������ۧol���4y��x��
-2c�:��E�G�iF�m��O��Ȍ�`h�}�6\
6BH�$��:4�}
�e�xn
�x���o��� ���i�ζ[��پȄ:$-\�R��l���QS���B��x�=�}:&���9>��#uk�g�
-v,`�6&���mE�WG�v	����iڕbJ�c�d��'847
��Yh����/R*��
�
mS��RSî�V�Q6p�4
�g��&��Y�6M�\�
-�&h���l}/�9��/���k�r­@e[D��k������y\Φ��4
�U _�N
��{2\�
�a�V�����ђ�N)*�@_�5�1�C��{*.�������g&�OGG��>m}˱���S�Q^9�ԫnh��Y�"�'!��y�ۛ�%y�Hٮyb�c��Ⱦ�i*�o�%ŵC�$_Xl�8Cϼ;�J�4GL�ll/}j���,�׼2���=J>�&��
,�)GƖQ����&���1~m�.bg�,k̺�ǃ��]�s0v>]�R���-��[`�^#�LL{q��Z�^�f�$���n���Z��{��yEJ	9��U�z{��)k̹�ܐ��\]�̈́�S
�dg��[�����o�������yH�{��́�p�����i�G��:JY�����Zj��( �])
8/(�������v��u
-
ߏ��m}i����Ԭ���13o.6����!�ֺ+���=e��.'�8�љn9}�a��V��cw���<*
ȥ�湕���ՖɃA�[ã�O’7'�?��5�=rT�r<��v_�
��
g�:j���؋=U!E��[jN�u�((�PMAI���م����3 ���&��p��}%�d[r�N����*��4H�|�^y�l�y���1ز����Py�u
-��r 6B.4���C�]Z
G lS�����g
69
lAG��E^��WgHUkc�l������1�5
��
-�ɽ
�6
��d�\�9iSH*p/q��j�bc��x��T�msW�#)/��rGI��$"w
s�6�9�QQGZ at w��i�F
-ūBWڦ�y�ydh�<�6�[%T��>�s�����%�2:�0�W��
���-�ls�Txh�Z�z�>S���!�
-�jF�Ћ����F�3u��J^�fV�/c��Ӹ�,xs���ZW�=9'ႌ�{��]q;���J�oۦQ���p}(��[�lk����DI�k����,���}�-����i��o¶�ڴ��O
�f���2����ƈ@�F�8%��,2n��~�Q�d��w������߈i�~�6���Qɫ}yw�C��M��F���O�ï	I�w�*C5���k�/���y.a
�+#�
���ʺ�
a�;�lE�O��h�x���$U��@A�x���m���q���y0���P���it� ���$5��� >v��捾5�pe��g+�����-2���EOم����%A+�U�kÀ&aR
�R��i_��mς>��U��i(��P�+*
��[����%�M
�GK��J�I���jj��bƒ�t�,�
�����"��:�IXD�_γ������al�qJ�y��'işw����#�l�(2�P0���8�� 'F2�xo�[(j�1�Ly~��8l�qI�y�-� [...]
-�z��1,���] �Y�e!֙�h���8���X���yY�
u.	>�����mt�9I	�A%��0IJٞa��Jl[
�9\�
����7��{W9���DC��u�	��>�'t��_��c�V��n�}��?]i-���Z�t�Vr

�qB�K�2^V�uS�J�h�
��x��ÏU��}���%զ����^���4�s-�K
m�'&n���E�s��
5w���
�8��JGmƁ�R�7����M��ږ��
�ʛrfU�u��oh���4���ք�
W�Y(}g"�F�؝��^
�
-�֗<^i��*x���њ�c
��#�@�f��e*�L�$�I��9H�O�+ܗ����Ѱ�]t�i��� o��>٦�Ҷf0i���BZ���l���*p�>��<5�`
-�>�1O���Z4�ϼ����?�{*#$~
��L��W� A;�/�Ⓑ���j��pm�w&�q�:"�Ā���3���D����Bm��s���?�7���ŧ��|J\�}�:��]�D�I��1
�l���2�My/,3��	r֋	b�C@?%
�X0@��� #�fб'F:��@Ɲ�uGz|偁P�2бv���:��:��<�4������oF&sw
�i�su�>���P��)��@A�X�<�waB��b�:�4P�V�Q�h}��E\f�����4�[�cl͑˝*.ӽ�c:d�����#3xN�Y�����G�~�\�?BHX�� �$��[z�
����<�N;$�vt^�Q�C�T$�E�ͷ/2�N
s�!���z�2B�SF�3�@>-��>�
"b��y���(qU.=�eUR�-rغ�gy�g�զ�M�$�i�����i�{���5P1'�d�[�����T]���"�&��z�}�U�3AH4�W?�!f��S�somԏ3���{Bj��8.}����u�.�#¦���I
��A1<eg��
�G�
�8&iD��K�6p9^ ��P^
��R��ViQ؀�j�H��ށ�<\�U�u�?���7vT?S��/���cȘ�	B*
��b{M�-��^�+����C%�'i�W�����偻Bx��"27,��,9���[-b��A����
-[l
�|#oθ�5V����v#��\n*N�fh
84���X| ���1������f��NT֍q\��4�vk ��N�{S:l�����+��8�P��;�"q��8PӘw�-�'�/*����c����_�������8�%�_�h��c��㠷^��.-:�؀���&���햲�G������'����}�;��k3o�w�e�RigY88!�A���|j�܇�0�׼X�~	��[~v/��n9�&�N��o�D�I_W�10�:&�@�$��Q��YB�nLBގ�s��R^\����iq����(8�X�ڝ�նd=
�����
�ԃI}J�z����}�PC�
��#
����
�!�
�m[���\��<�ܣ��|K
��
-����EG���5Z�BՒuG�Y2J�}<����8�֢�s
�V�*�|2tk��X� a�\��Q
-�<��#��$��=)����U��H��h%
��S��4Qs��&=\m�q.��5��60�=Ok�VH(��.�
uٷDD�?Gì��K�H�N��o�V��-���k�����<�fo�Wc���m�c��87��������
���v�q��ʗ��E�]
��Ց�O��€՞ҧƞ��ۃ��3�����Jgz
t�K�@�
\�73`���C���%eV�/0*�d�#)�я�^o�E�F8E���3���U��GJA�c'��BP|{���Z��Jz��g�C��cp�I�=$�룸
!�,��zI�V�zlj��KH%�#��
!,�@A,>R�KU�=�P�~�3��?ִ���=Y�T�/��'P����6H�^hA��@]������3k���Ob"���~�W/,��)B�e@
-�^iP��F�����s�R
�+�� ��81�MW�Umw�卑���t�o��E���G�}����0x�����g����.���	��ʗ����	����L����,±�^���wFjbŬ�@	?�`	�ga)v1�k�
p���"r�k
��`��Rݾ��r�/n
��O�
�%@�x�S������_�
=*�P�"m�� �
�O�rJ塆���V

-�J���z��/��no��DZ+�~!��G��� v�'�F;$�h�|M��-
-h��,&ٶ@.<R76x�,��d]��"��1
�Rק��~�M�\،J�����}ȴ���_�!?�I�ʩ�����Y
u��*��"7��<�8(�ɥ��~�akS���H�WC�ٕ`rL�5���H/��ga�n�#�]&�x�y���2q��*����?[%�O�e��
-�B�Um%��#�X�:~wb���*
��+zw�`��F�@,�z=G�~�9��_|����$"�W!���"��_��7v���u���5��u�F��M�S
�u�K���ڦ� �0�[Z��H�.9Y�pNM��L±����W?T�(>�?O�s�Q
t��g��ڗ�,Ы����]U1���:
O���˻�7Y���N��wf��{2ĭ����$�]T�X�~U�J���]��1�J�Xx'�'.9�Ƨ�g
,q�n1*�)}�f?1�<2�:S�	�*�:K.:Pr�J�2M��4�rk�EA�3m$p}�=�(V6�?X`�ܚ�e?[�.�P�����j_M�R/<�
�t����1K�1�V>_�=ѵ@�oBB�f���j:��f@΂5�&�� (~j�c��R�'T�
�z����X�jQ�C
�f�:�r��"L�VoE�j[��zҟ���	���@~��#��M�K�0K"o���e{J��3��<#䂐����)���@��a_�È�ṉ���{�� [...]
`4ַunә�EwK`��������gO����v�wsgg�3l����\ƞ�Y
AG˛@k#��R��֒�?.23o-7���A&߫lWD����F5����D=�����S�������kR���(���v���'�V�ؿw����r�X�/�Nũ���h������z\�k����"��-�CVF 	�y<�	�"%+�F?(�Ƕ�W��c.�E�|���� 2�
���w��+���Fa)״���"\��*Z�k-�v�+yч���[���I|򕝱����
-~Σ���������Ex���+81�N>�k_$�%�r�"�U�S���6!&�2��^���^���6�7Nnȿ����lp���sY�ͺ�m�z"�Fޙ�_Zn�z�3��s���	X��>��8dk���}����@�+��"̣D�z4�Ou�9�9d�W�A�\RXΞ�v���:%�\3�i֬s.6�v�(9�
�+)'��Yr�y��n�����L�c�Xj�}m2�V�*�N�c����x��R�h�
�3ʅ�G�%Ä���nb�m�We
C�8g���y|�`)�@
-hm/4ҭ�Uhi�C=h��e|�o�Pn�z-o,{�5��9[oqH��cu�CȘ�At��[�t�xY#(x�Z �4�2oWŽ:��
ͳ�)%��ċ
��;R~\��/���
w�,��.R���﯎QS>|3sx� ���ܫ��
-�*�I�ܔ�s�|dN�%Lz�}����U!���S؈?�y�߷=��ܞ�Ч$�[�����?q*#��H��6�-'zlw����P�=��6��X���Q��������g��p�GA*�
-1)�	����냕/7��TRΧ_��/~Z�*�����Du��������I?"�7VΛ�g�����=	2yw�ɫdz�e�t�C��豑A�$��5	�+�׍�	���ؑq�J#
�q�NW�$���e�
?1`�	,�&��v�	Y��u�r^�C'�k���y+��^Z�g]�&�\l�N8�J�~�X`�
j(}�%�����o~� ���H��1t��#�yw�vhȯ�M���J�h�
ٙ�ǬM�
�R.n_á��� ,R�λ�1��v�yD�<�jg
�k,���λ"�%�:�͸�ډ�e\2�jy����w�:
������c�$K"D�P�`�

t0�,w
�i��>٣A�-鷎��1鰅>	"�>Zf�*p� �0 �w�T����~���E8ň�=1&�+g�y�X�])�:M/��s+4�E&Pa?���~�#�\Qp���ZJ��쳦
�
�?��T�N�T�n
v^�I{��
-������~mw��*�Tm{��͑�wV*im
�ɣ"�y5,��
��4
������S?�u���U1aۓ�ԥ��{��<P!>�d����5I[�}��&�?&g����G?,��r'(��
M�-�h;
\��:ͷ̮?Y�7
h�T�
>O&(|��R�L�~�Q�yg��#G:խ�T���r�,�|[HH��Њ�D��9佲S�]jX�EL������.튡�8�#���\�1E��|��
���XEB11i	2�@�)?ё�GZ:�)g�-�����+���6�
�PN:u[�d���`����Q�n �L
�������=)*g�y^Ǝ��i)y��zo�+��D
���=� ȼaaJOM��]d��D�P�V	�Э$T~�
:�<���u~������Ӎ��c#���`G~�:R�T;~o�bWNP*o��S���}IU�s�,hc�W4��-�
.I��e��뺶�g�!t�LPvw�&��^p��b�C]+豱

h���E��Bz�=� [...]
P*/?��D�+k��0@ϿT�Ӯ�[��
�w��Q��A?� b.-�
�_���]r"'��;J��8i�T��?� Ͽ�|�YLܯs���I�.�����yD�j�Y�oz
-�l��๻#%�L}E���e�q9Q��I.�2�L�S.�����Gs�܋@:��P�35���ƒ@1;�=���؀�[J?�.�$]Z�zf���Y�+�-’��%R�o�Oۗ�J��[�Q 3�������`�����a��*�l]
�{`NQG�[F(ٝ Gl���v��"\��\�"
nD�N�2n�
`�MȈ)&譺����Pa�c�
���
���tf�5�4L��45ǹH�u�0�>-�e��p�g�
��L��T��vw�P�;K(�̐r6G�ћ���}��xIP�qp�9f��t;e{���<HMZ���d���_\�GX����:�	ؤK�Ƹ�
�=�h��A:c}���KN��Y�C@�
j�p����jy�=s ���܂��?���}O�bt���E4N��u�5�{RR��,6ѥ�f;�䵉�P���U��1!߿G�h��tk�Я;��
��)�;��L���\�#aB��əV��t�iƥa��<�S���狞�<ֱ�
-��)��[��g��:�����QN���\Qz a^YnȻ�6 y�1���
����j̽��}핫��ح1|������%���@�����H��Ј�	x��J}ӡ��~��p/�Pv)1ϳ�&x5�W���Y��m�b�
�xs��^�B.(�5Aʺ܇-�H�O���u_�ȿ��a�CK���z��?Ky��nt������]�����*d���9�G��c�S�/)yE���ꐵn\����
�3-3�kS�1\�lw
���]�����w?��K�J�F���
>1��n�ۥ���bB�m!:�-��A������?J������1����1Ͽ3���^�lk�쩶5�q����#���
ӵ��S��	R�}mK�'��;PPQ�Yr��>{g����qa��$�6K)��3��f��@�+��[}�0��1p�'�F;�ÿ6��i�6l���:�6��g��Q�.��g
-�$yd��|�A�#<
-Vۇ˳�c� �9��Ag+d؉� ���$Y�� ��ݚ���KiP�2EH��(&�>��	�
�o��lӍ��1N�m�Wk5�&X��c�̝	l
�e���ồ�D�"��1��讉�>��
=�s�v&��N9�u:ųL���F�))uZ>o}�`h�u��=X�Jݔp�2Yba��fI� ���Ĥ��qd�OGC}Y�~��:���@c
"�D�T��u��uh� �+v.��}2�&���t
����>Ҳ�Z:vw�Xx�e��\�#���
-�v�Lyd�|�4>�����T��_�H��1�V���J���ac�r{
�jm�F�]��<[����
L=�X��hÿo��<`w���}�a����/�}Uot<��	��Y픳�
���7������-�-@�"D�CF-ߚ �[���^��nxܹvH2fՃ�~F�r��6��Rc��yn�'U3�����bQ�7&a� �����;w�
(�?bl�}
-��Q�
 ;����u��(yS�km,l_�B���к�/W{�ލ��L���ݤ�a
:�sn��䑡�7A)�����
5%����w��ƾ�	�k}^��T�-TF�y^q��1r�MV��ߦq���#BE�2�K����?�N
U}uQȄ��ꭎ~���m>�r9�i��ڏ���RF���Qt�q���{}~��}�L����ij/��e���x�
��_���_�lj����eQO��"��f1�њ��9h�k���45�^k���������ya��R���(��f&��
-�Χ@�8�5I�ܘ;�؛�#��H�/�Q1�gi���/�q�\�e�(='`g�.}O�%i���[c�`�Rv&�e{"�1��4uUGMbbo��
�s��8X���_��%����нZ�`(��ðKip	?�����C�ʛ*�v��!rN���������U���	�g��������ZR�M�.X�~ԵC^�L�b���b��E85p�������	N)��HǤ�Ꙝ�F������*���a
���g���6�=.9�䫉[�o3��HN*�����
-\�	�
���=V��DG�hGh������m�S�;AH2��?6t��4v���FE��RS�:pͽ�p���6
VXd\�6g]S
-үYg	n9�֣�<��F�8:F3��t*�yi<з

x�#

�#R� �ؑ 3����mS���1b�J"D�-���S�n{���_�d]���Z9 ���"
�y�V:�om�V�d�b�"��<�h�����8��"§�
!BV�k^o����g��*�@�P�=G-�Kx$�\����m�J=�˓�S�d
�����
�-u�
�TH�}0MD��
`M����V�'mc�3	��������(��>+�ù	D���G�q����]1�.n�Jzq���
Vq�����D�[�py�ꈿ�qu�s�\�1�͖��T5T\����yH��Pѣ���+ðȟz Q�Ɛ��?G�ݗf����I�$�d&}ҋ�1&&�$��{GŎH/�;RTPQAz�*
-v������~w�����v��p��u�G��:���%55��17W�?\���?Z�n�r?^4�"���=���ᔍ]>"e$�$F��*������9�`,
�?
�]r�RδV>��',��t7�C2����D
��b����
rͲ��C?*�7N����G�&�%Ou��Ⱥ�[?(ٯ���mR�ݼ�˽
�~��><�#�_��+�$=����}��i~ϷY~��$���C���iÒ�p
!�Ԍ��)������ӊ��
s}쒢,|y���|QxWݓ���w~rr�n
7Wb�"N�S����V���精x��Q.{o���6l���Y����-��7O Y��و���N�����W���,�������Յ�n\}"푚��da�:? �Y�!S����O^t�?G�+W�،5;�q�¬	�5X�q�6�G4���1���T RONu�F.�oG���ONj��!*��(
udPw��9�t|��3o�S��m�Za�S��0�-��
3&��G��r"3w���
g
v
-��c

]Ԃ�=�����OډIg'�s��<\꒍��
@��q���<ͥ߂4�	Z��(�iɌ�i/����m{��G{^��8�M;��C�;�;蛺]/
�x�i���(���b`G �4���M�P�
6|����׎��
K!�r�*m;����!eM�� �t��1�7:���
�W ����|f�\<5 at L
��EKNfô�]
23*vG8�^��0	��@g��q�ʮ[w����
��=g��-���{���\�"�5V��j�T.jiE�J�� >�׋y���ݱp�V��,��⾁�v��(�;"����#eM*�yý-9�ޖ�I9󓏆;�`1̸�Y-*u��\�b�׮:8��������+��7�cD�dOe�xgŭE�+-)�����]~s�D��w†�
6~i�
[
讽��?��mz3+oN
��SV픪-�~n��j�V
N�yGg�w���YU��)��CZȻy#��?�)0�a�jRك5
�|Z\vm������v��μ0�Z
� G.�q��f!��{M\�p਒���Ԑ�u�` [...]
3
�a����h0@Sׇ��q

�h���4Ƣ|�n~��
-�
��sS�WlĂE1wAK+^���zP�g��e�>���ݘ�*}87P
���t�_l8i�:n�+�lg���ab7�tȾS��iX��@m꒵>��XpH;����� *� ȤoSPA
-�p��4���pbr�F�Հ~&�*�o�u�vtִ��eP{�d!���x��B
ep�
e�z��i�~��nX�0�BFx�N��
Q���
����
�p�GD�[~
����5�6k�V,[��zDҖ���i!�� �G�Ш5+�`d��ȉ)�Zr�6"'
WӋW�B椖R��@�۩!���d� Z�V9��%���Gk���Pw��f|���xt�g�I��
zT�)�1���=tȆ��AWg^Z6�JV͸�M7�r�F(�s�����հ��w�m�G�zK6r�ףl�Y~��Hk똦?��y�8����
-�~t�
��iV�mmJٴ�
׬��u$ � 5LD�S+�k�۽	pܬ�򩝕���pJ�M���'��
�Fռ���3
P� ��X��=�rNM��`��2�y=�hL�����
�#�kO
��V͌�c�6�[!;1��&̝�BR�W��
�Y
��߆�[T�6���u�iDE��J.s�S�"�-H�A���5��T_��U�|�. ,��8k�–U
�lg6����7�d�U�ٱ�ˆ��%2ce��8�!d1WpYQ�7M̺-;�fe�m�hM�
Jü�Q���=����us����z���������an�˄/�	9㽨�y
�r�ȅxE
�V�À������
TG-��
j���)��I�a��
$p���E@�u�`����@]��(	����٥�!9
<���~�j7|�nU
�-/<{�Ә��A�����^R�
�tɀ�<%A�|��-7�l�gbp嫖��>x�ָ3!�^�0�
\�_(>�����
e��,9�U�f^����{Dٔ�Yq�!+^r�K�,ۚ+֜Ԇ��6E�QI��6A�Ȭ�����e3J٬�
����s�Nᔁ[kQ�O���Ac�h�ʁ �U�d"��;h�]?�q0�ڳln
�q�iw'x�5
�5�&��00�Nd���l��i+
�� ]
S��V<|�T��;	�h!�-t�樨w}�C���杌��Q�lo�߹5J��xH��~�Q1i�h檯�毙��o3
��鶁ϓ��(O�w4
dX�
*[@��A ��%��b�	�1���{��cҦ�Y������0vGں��e���u�̃����)-��ڊx��D��P��,��EK;{��-�j�l��ל���yiN)$�N/���/l��{W�Rղ�k h� ��m��^V�� ����H��ы��|”�V�6=�w�^���e��׍��7'�
�c%�~	��7|\򚗃��5gOjpIK��_���V=m�e����b#7�
��8��:D�V64�B#�\h�V ��2�

О����qȋ.bm���+$P~��6����ᶎ��.���y�aL٪�4����Qտ��բ��RP
Ԕ��
- at O :a��)zA
�
�5�����r�M���9��UL�)�K&,�����$}0��/��ؐ������;���Vf�! -;��O�

-�峚��Flښ�ְ�a�Wmͅ!Mc4��7
��s�;����v at G^k���!{}D�Zq�PW|Yބ��2�#�����
��VI7��� ��G�Hj�n���K#l���R��� 
���s���+��L�
-����1g����mؠ�
>c��*�`¬V��传A_�<��e/qy�>j����������L�sk����nN�
l͊
;��	o�GC��(�������brJKC�y�ەox��11d�Vo
ѱ+Cl\�E�Z
b 6���1ec̸�.b�ho�j����M�ڿ-�Y��ּ4ز���H��fӔ�X���0��hi�o��k��{��Y!�C�]
�����%K㻃�����s���)Щ
Y8�A%5cR#�s��

���:�Y{C|ֶ��[�����_�͆
S���hw+Ye
hʥ��+�w�TܧqYpgTj\r�)zzѨ��㓲S�*A%���l[M��E-���wo�Pv �?�Lx�Į�T	����rw7%��^�$dD�/ZȠE�v��#L�����nʨ�
�Rs-����3kogϘ���2d´�^7k��
:��O�u��f-�;�F)sY�+Y:�Szt�������ao������h�k��j
-iȹ�ZZ馋^���nyH5KvFCPC͝5�!�VmBAJU�޴�j�\l̺��_�0aKF����=h�-�Px���)��o�R����������D{'��%�l��;$�5�X�b���2x������_��c�B:b��Wu;���)�*�
o���s�ˮ̒�Y�d%���G�C��VW<�!���Z:�#�~���_3sT���'�Č�K0g�벶�3Y�'t|�ƄX�`��L�ew�M�>ʡ5[:i`Tl���{�v�<�sƭ����O����O�z%fYW�@[W�@���鬰����2K�=����N�N@Է3��\��7L���xpgR��
uz�&���1g�,
qH�v������&U�i�@/�1
n|���l�	�{S��d�i�/�/
��3B񼓉Z��wm}��?m�&�z�A[Ø�� 
�;.
�
J-�:B�R�
h�
-:wlZ�B�i�)�nr���t0��X�3�k�|��T�|wLж3Nl�
��+�������]f�@�<CEiy
���gUr����nm���v���uSj��7�:zZ
�|�k� �r0֡�	��+>
ٯ��9��
ǀ
c����	w�Ƥ�/�:[w<�M/9g��
�6qo��ד���f	��p\I�?����Mw�|�ݣZu��Ǵb�S�7u�U8�e��:U�A�_�i���{L��AϠOm�7ˬ,e��B�Vf�I�He�� F� ��Y8X������oA��)��hV�vP$�)�+


-��SY��j˛53˧�؏
R����Y�zT+FX��,L���
F�Y M�
�A挭�Y
�����"���v3�c�
��`���h��
m����TN��t�$5��N��OԾlgA�rF�OJL�
��,Z�.�?
�H��>l���X��p�\|✵:�!�U��)�r��C-�鵀�Ϛ12J}���f� V%�غ;K=�n�����*�2-=�����$�~#Z����s�ڒ�;��S�
��׭��u�K,���/���|��������Czc�]�[�#�'	x�Y��(����W�V��\�~��UO��%'�8�Bϸ(U;�|�Q����X�d1W��ąюΠ[L��p&�����
vȻj',]�q�L���<}J�S��;��_��M$Ш����7G�������N���H�7!�|��u
����rd/���
-�w'9�� �1��l�������6R��F�N���	g��+�2��]⎭�n��H�x��C��$
�ɤ0�F�
-�R���h��b��q?Q��b�����D�I�ny)!�2%��lk�({��_2����}�9O�z��+4�eMJ�.W�s��1(�6)�i-BK�M4X�wyd���X�Ǵ�qH�w��Պt���
��}ZIkOY��F:�g,"�W�ɷ�{ �
B.sc�z|X!ۘ�BҾle8�$��F!۞IiVGV�/�
�?$�~z��X����^U��5�F���J�d �l!K������	ִ�f�0�	�:����F+�Vk;��}
-	lƬ���%澾:%����(z*lB?�$���D���j�Mڶ1ҩ�4)<�:��y�fE��g��	�Z��I%A���;˫��nj
-���W�Wu������jj�ʉ���I^�r��fMvїL֤�U�Њ�d�
�3��42�k�e�i��wrc�����Nc�D2Z��)
570��H����Gl���, �*�@�JOn:_���\�}$���;��}&o���[tۂ�T5��f�B�� ��M��
�B���i�\>�
�ov>j@讖U�N�f1�Υ�x�^|X���%�g�M�{�
�{�B�0n��g
"����2ʧ,�r�Y!��
��^U��]�%�4�
9�A�����J��.hz�TJyR�����Z�]z�Ry�_��
ു4�~�G��Z
HT��.�
�~���OqZv�%�͉.ۊ�k`�+���R�WH�=��XM�@��_��
%)*�(��ߚi�c���[)�A�}\����	�zC�b���ϱ��y0�심kT^FBW`u=��~Jz�57�{*�T�����?o�������L�I�{W�ў�J�V��e��U�a�X>�d�C�4�~����&�b��70�
"�p
����Zv����"���l^����Pح�9aI���0�u�h�6`2�W<鄁�8�k�{�
-�����잮@�g����gUM��مm���)+W��/�9�~�ڝ�����c�ߑ®?��z�iث�ڟK�yࡽ7u���i;7�i!X�� E�`Iߝ�f:b��31���O���8T�;&a�-�l����
��ܹ
���1a��e�K2�w5�s�	3i0����e+
��
.�T�٢��q�(��+�(�^!I�m|G��a��Ql��;����Sy���|���d��O�'��_x��"��!2�*	�+Jt���}�T��ҧ�wzz}H�4P��� ��_�nP�ASǣ��4�#^�x���D^��tNY�Ϗ���.^I	�|=+�u�ؕ5a�opDZ��޾a�Ϭ���rp�^��E��u��h����f\"���ϪN$���RT�<��/����{���^��E'��]�W
v'�����h�JkV>Q�E�Q�� #�?@Is�P��Q4�}��,$6�mw
-�E�*!�+5˅��?
?*:v�RL��{�aϣ`a�_/	;q�N؝;���u��R�'�=�<���|M��W�4"�؟h�]�����z���e��e����^y�-�������f�=4FN {^���'`pן1�+OfdϤ$מ�Hʻ�he�/ل�97
i�*H
��*�x*�2WG
-�gW+O'd�Hʠ������ϊ�~9�2�~x^؛jX�Kh��;�a�Q'D�Se��Uw6��Z�m��Bi'��$�r:���H	�W�<�����*�>��CZ�o��a7"��~�u�naؓ�Ȱ�Q�c_�~,���i78r��E™��$��n�Q����%� ���"�Й�:��|���q��?n��n?�
-�Id
{�v�qc��DXt
-�XT��Go�'^%�N��^�	�i���5w�����
���덅5���,��9*�q<!���Ԝ���W�=�l��C
-���,��3�3�~9�*���Ұ�ј�s�ˎ�z�?���?���;g,:�U�>fѵ�~G�NcH��T�Nm#s1�3|�
5r����G^��Dl�DJV��w�c���(
v�ie؅�i�^���@��ݑQ(���Ȩ;���tI4�-��X��{�/R@�
�b�z�s,!]�Cr��/c���x'���7�c�Ǣ�)a���
�7�Xi=�U��
A
��X�\�݈��ju�k�b���M���+��T��[1��/�<��5���wˎ�|Rv7�.��ڰg��ǟ%2��ɖ
Ϫ����Ǟ���}]^�}P�
��+g-
�OAHT��xt�
v�h&E<�
c,=�-W��>�}�b8�^D��=�
��
-�:\X�GAح��.�C�q�%��<�/��kE���R�2o�ɥϛѩ!�ȣl��
���Fʸ��"
m$�
;q�
-\-�8Φfw���
x����^Ē����1�?b�%d����9U�������f�B�F�S-�����s��,�MA0�"*�ˉ9-�Ƥ�ND%7�x><���g^��~V�����ߚa]��
��VN��	5%cDE�t�Y����PF��#�>� ���Ys�x�����{O�ò
�?e�����xG�9�#���m"^�X��y=6 at O��ӗ�4p��CM���&9;E.k���!�αB
���؞���9ժ��_���16�p<1�s<���{A��j1B�'k�M�x�ur]����RC��t��)ޭ�{�e�N��A,s�1��:����ܶ�/�X?=y�;�8
-
-�Cձ��
�"�p�"��aW�ԅ]8�Y� ,���Sq��
���1�
���ζ�At�G}1�c��T��g���7U���(���<�h���Τ�~�p�0��풰�ϡa��+�.^��z�<��-<^P$>�BR�v�v���
vj��
�ʬ��{�&G���>SH�X͇�g��Q�G���?��.7`t7Sʻ.ߏ��
?���;�X�~>���^#I�8>���1ÆN蜓U�1�elO��
[:�j�S�1����2*[��L�?���#�������i��;Y%�[p��
�i�E2��-BU�nPV�����tRĜ��3���͚yAms���Q�l�Ⱥ�]}�
-�P
��T>�3,�9ս�c2D������c/��N$u��P��Gv�Fe�AZ���i��V�нVeRG̚R׼^��*և�-AKM�3�$*�/�&
G�Ùso�q#�ʑ�����>�?v򏔰k�� 6���
-����ĭ�^��j�I����x�^+1�b�Z��*�%��؞��YbpD�C8V��������[l2�BF>�f��	��M�K
�Q�I����3����.*��7D
�[*
Z%V*�ˢ���a�Kl�D~�UV/���Q
-k��n
�
C)o`��1<�:O!�W[��A!�7D��Ɨo809�z|ڂ�9�+�E���"�^�ԨP�2E��K["�s��h
��!
#���v?�d��i��K��ݗ< �T��:b��K��I�F�e*o�F�l�]
���jht���ζx��)�ly\��?H)�<��:�R�������y?|(j�)���Lv�����=�w�m#*
d�K�-9peKvxk�Mw�zi�$�M9�gJBe8�/As?m :��d��x+�����a/c��}D�,��a����U��P�3'���KRiHϨ��
1~=�b at J{�ׯ���8��Rk���R-�iA�bE�@�I�ux� ����p�

E��-���ԅ����vC4h���X�����.�E_g9�1
5Ϯ�L�V�i����.VI:�]�)�=��~C�L����k�R���{�M�5Zȃ�
���r�@/���Q�>v��Ex:�/����!
ceD��r��
}[�����í�&`�w��im��&��^=ݒ_�hO [...]
-�h/��P��^�6��EA-6f�@kZ��ʎ
-�ZR�TvV�ڄo"Ef��P�#2����s�`���49 �,kD�
����ooy�!k^M���p؛^&r�H/�Z��Z����`��EʁAH��;]�!H����N�G#�O�zy��6ʒ[H\��I{�<��`
w׃.����
J at w����)51uZϩ
-��0C���I��y��N��Z�ōw���1򾵿5ϡ�n
�3�G5�I!s;g�%��yy�:�Q�dl���!�Ϙ5
�^Ӽ�W7n"�5�B���g�����z
e��B��Us�2�B�D5�
H��t�4��M�)����/�f�[�m�>�u�)�,I埇[��G36
�L���SR~�ލ��)�1J�
�Ԫ�����7
'sz��j0gj@�3D
冰�9�'۔jR@�K��2��݄�m�e����z��&_��S/�UO�N��X��\�r�od���:�ǭ-
�Aj�YF�7H�o�rFҐIP
-��A*tw�E�%ė
�2�G�e_����ABӶ_>�oΝ�u��d�){'{gL(�
j�y�u���-8H��vrɌM��v�d3�Vڪ�MX�2HsfrኋR���.hbf�u���Ȩ�b���w�^r���VT#?��uq�NR�]�8�a�����Tvٵ�\��9֭k)q��\
謝]���
-�|�k.l��I&��|����ķ;��
9�0��S�T��� >
1�0
��A�	�t�~��>�4tj%Ҧ�
Y���<�^��
�k���YW�������F�5&iA#�,���w#��w���u��Q
��
P�mY�������Qq�P��?^P�����	V\���!�ݝ�K��O�~r��w
؜m6��0�a�K���3kV�����ڽ � �~������7D(��*��)u!#>s�΄
�1��T��
���O �'��o&U���
��
�pN�˙�a�7�Ċ�
�U#�Â�)aX�E��i9�픚�7;�N�sb
-?
����	U�N��\���!:j���_�1@�J|ƄW<;�J��G���o����q��W�7�(��SJ֚�G�l
�]Ć}����;;Dާ����֞oA���QΔ��0X�v�����p��l�
��7�N�Ť�M��h�`[;�՜�U�ne7�Y������
7��ŕ�{�P�z�A.����y-*a�#����6�0�����7
�D_md����������M �
�R�
�{n
�h~���j�
-�]6�?|P1�g��-4u�=���Q����ݮU�i2vg�N
7�
jj��,��K��|8!��p
n�tW=ٳc
>�
&��+�6��n�(5���g�}%ၮ�[3�»�6C�;���k�%�4�o�<��}��poi_�V��lϹhϿ���<�
=���o�ѐ_�(�����O�E���yUq�"�VH
zq8��5Nl�{������!3�t�Mmܟ
��t8��}[clƊ�T=�C%���+#��
���9��`A�����a*���e��8paʾ�ʿ-�
�}���t�t �����zB��
)]���m�e/
`��U��)E�+
-��=�mc�Vt��iI�
#&�[|�A�
V�v	ү˟w��_����ݏ)[�=X�Ϻ��/�mC��iu�^N�T�����>�]Wsپ���/9�,}��Ѽ
��ä|!C���]'�b�M�Wֽ������۲�
'��^���n.�P��
)�T�!jR�{q���ϙ���Y�9
l���vzq�6q�A���a��u�������ڦ�O6dʞ�1$�{���S��Om�����qYCTغ���c�fo�P�{.b�_I�3��
����|����
8����k���och�_��K�?�pi;�ֆ�	i�ɫ��Wۮڔ�1:nk��
���5Џ{.|岦�]P\rgL�wg�\�kmxw�� ��[�#S7���m/�v����4D�;
��[6l����ooJ�� ���f�,`�
7
-�}�P���v�XЪ	�n�'����w\��M<e�}?��}q��?
aA����]Gm���,hKS�
���8��m�-i�,��{n�[��
����&��QKX��_��$��;��
-�+?;�Ҝ����s������Y�q�O�ɫfxjh�)s��\�?/8
6}
���m�9�nT�Q���Ic˂ʚ�+}��ﺐ5����i���aGM�����
�I^ǿBB��)o;��n��;nt�QB���P��!�W�D��d�`o�߱d;�®}�� ?]QV=_;�ѱ7���2C�m����7�zj�	ޞ2���23�w���=+�`����\_Ճe��e��� >}���ل��ž�
����}�x�Z;�O>7�N<=���sc��c�5��1������G�ֆ��Σ��uq3}��=��:�E|��j>��
���P_��EE��
C��
:cߍ+ڵ�R�t
�w�T@��Wu������o
�f��(�1%�
�vA�~_Q��4��^�E3.�� "��
z���%��9m]�K��&_8�Q�wL����%E��(펗�ta��zv\\|k�D(^T7e/ �y��߱"RVU���^.�!qzƕ
h�Pm��~
﫛 ��*x�oM�<�wy�	���Cf}vcJ�l���
�-
�ic!��ӰI�{�Ě�e�:P��}�9E��鞪��jrՎ�T��	O�6VE�(+#��y7B��O�~)������+3���_�Iu��,���c�|�1��V�ů������{
Y�)<~^y�blJ��jvݸ�EU���ޒ;��%7'z�n� !�
5oW��5c��^L�W��o?�������>$h��4|�
����vlͥ:؇Ձ���pĦ�u��p�n���x}�B�k��4��a�K��)�X��_�/���VE�"ʗT��S=���
1(�|��0"o�[��fG���m;"��0�x߇+[PU��:��x���$���%5.��LH
÷�5q{�t�q��$	~8��:�j�OtھO�
�_���}V�����x�n��<F�4F�. �0�>�0�.
�W|48��o��_�;�.��K���C^n�H���Ȥ����;zrъ����UU�de�f��桧���\/��'������P�.t��������:���1yQ���y��M�>p�VT@����}ܤ�Q/�;i�O}>�?�K(s�WG)��|��A��e��
-?y>�h�
O��/N
-s�/�ao'��I�u6�����Ƙ%uC⊦1vE����n�wTD���3�����kޝP�%�rQ���o/��
�Za�kx��Wx�����ќw5<a�-��hk�=��;�ʊ
���2�
>��aaޝñ�	Y�C&餉������[?�ͯ
���v,��5�SW��/�9�z|�	��#F�f >�}����$��=2c�F(��!3e
�����d����b �V��d����xG��5
�!�O��*��(/��6P�p��z�L��
�ʏB��/|��?����R���u��yy��P_�uu��F��'j��TԼ�R2Ϯ��y�G(�]OsYHYhK���=��x�o�����xD��G�Jb�P_|�L�֊>y���y�Bݙ��5�OG`���kv���ܘ�O����$�w-MIk� �e�Q5>=�fj����>�q�g{K���NQp�
�W���^y��L���^Z���^pMB�h;(|����	�����=:����p�X{ڕ9y���),|w[�"���
Ğ�E�u���S��#��u5(v�?'<ؚr��-��F[�v"������|χ,�� 
-�
-b@�C����⧓��[��)�����CG����@��t���s������-
2y�P�:X�tH�tΌ{���9��9�Zqs�_v��-�
��#���E92���??�]�xU���5ń�%��D)�
-S��W���Z`	�\��]�p�������e����Dl�J�Y�q�J�S+�w;��궍��~>/��XVվ�25�] ?��z��㔄�
=�N�v�Go���lzHQ����>gAǞ\�)�3)�G*H���

�JÿX�eۆ�7Q�7��+��_K��
#�����i�fl�0�F*h{�zh#���X��Okp�O
�. ��zY������6� x����|<�I�4-�}��.���)�3�Y���+�X׉�c"��a
$zJZ���
�:pԿ_ւ�%%�=�g���?��_��XYk�Y��.
���]�K��k>:��J�����ޒ�e��n��j�1)�`��R7����8�?3P
N���D78�߀v��k�^Q<��H�䤿;�@F�<�O��j�fh�W�ª�����b� ~
�N���E�b���5QS�-�k�vlMi#�yw�
�*�� �o�����k�7ۦ������:bҥ}�pN]�n�3�ꪺ*bE	y��j��q4�,��2x�YvAԏ@/gnۚ�f���������e��ݶ6 �
�[7��z8�ƥ9�o�H�>�����QNa��薏�}��8	��3��쥙����Q*�_�tζ
��ʹ�:P�jI��5W'~r�%�w��wv��Ƞ�����S�9����n���
ʂ�.z�o
�O�[�|	`�����$��/^r�W/�b�
~�Ƀ)�=�O����Ğ�����1�Ԕ���y�D)����&�)��S���.n�M'+��Ǹ���������qs/o[P+JԇU%�ݾ�1
���uM�K�w��\�0 >nj�\�6DOHRύ�Ĝ�P
ce�^�~L^�����_
�lY��$(ο>�O8ͯzu��츅����������D˿1��D��K�8�i���>A��A|򩮚�C\h��Qp���\��"rCט��E�n���t��M8nAQr�r��
-d��s3�S�� �ҡ��g�%��TO7�U�]��3Zd�~��=��,���~�(�}uf��|q�P��W��M���A�
s@�w4"����k����|��
���-�� =���+�amZ�9�j��~Lº�zG[�,/�7�Stg����X�nf4
�����
�L\�DG]���w6 (��o-~�o˿9,.��e�Wn��y�=�{�]��g���g$�;�*���
-_����t�#�t��[|�NM;��
��_.�c
o6o�=�4��������0�*\�9v��z�ޜ0aO� |���Y����������8
n�ڱ����H+%񊓖򇛖}�CK;��/���<ۍNz��l�X56�x�
8@�b�$�vҢYו��{��X� ���Ī��'3��'s�҈徊d ���r�Nue_�K$¾Y6�]zg�\�p8*
����0��G`ـ�^6Ծ��ּ��`�O�|��Ak�ƸmK��=;$m�I<M�W�cz�N�t��< �㞽��n���
���f
�?��<
���?��.��Vz��R�a�UΩa������(��?�ٹ秥�/B*|���
%��g�
��B_�k�(�����@kֹ����D;�μ�k-}0���6�_�dR�iJXtm���٦
�a�3�
�˔
�m$�x��F�%�t�?UqgMq�':�/�4��Jj�-1��� 2eHT�DT�����Տ*d�Oz�����y��ݔtv]�~�۳[&|�g at clꠀ���ݘ�̹��,��m�ďHk�
-^����s�� |��?=7�X�K�/�k��}������tq��0#*��&/���E��S#��w��ċ�G3���<jQ�oj܇NL��
U�g���5��nh �
�Ȼ��)n̸�B���t���<}��홱�3�5oM���7���}3�/�z�����½��k��E�� zh׆�
� ���'g3hU�0!*�f�

-S�zXoO�	��/ �fIO�V�����Ł���>l!��I�m]��R���ԾڱQV�جAB�����+�m���n��%e}�x8��+{&��9-��^="ՄT�o
��sjxܙQ�ue����ꗫ��h^M�#�4a�KC̫Q���nv�cGI�l_Y䦶��ߣ��O�
Zx���0�

y���i�%몟�u; Ⱦ�e(y��qNS�A�Ⱥ�d����8���,_Fq{�Ƅ5CUĆ�>�`
�{�ݺ�k�_1���{0%�����1����P�2��lo�O^\����ޱa� ���t4�łN=��泏�8pKm��8P9�]>'ox��F&n���z|ꢮ)n���ɘtgI
}�
��U#,nBRrs��:�[@�q����<-�=-��䵑�L桛ִhBe�x��g�M�K��,3�w#.��tv }J�y}�E�����1~�B)�Ҳ/
�mZHes}Ș5�{ ��|���ֲ
-��
-]@�|�m�|pp�#��'s��gk����
-R�P{ݓ�nȻ/�ƚ�����n�)�AZ�b$rNVvg����D��E�W&J��
���EV�˜���dg��!>��l_c�� "��9
���
;d�/�l�5�̌$�J�~�?�ᖮ&���5�j��p��(y�� �s�K��̿:і{a�t{����Xw�s���v�������k[z�E��Z�c�{s
��gz��N8oN� �����eoo
wp
��5��ʞ�
-����yY�h�/�1�Ͻ��"UM��M�ԼX7³mB����@��z��4%��lH��o�}�$�_���ZV�'/(��?���ߏf��)u�zHܰ(�BH�������jNF&�YY�t���'�
-�
}�bF�w�o�uսX7#�V�%ᓢ�+���?g$��W�u/?� ��%�%����Gs҇��-3,a]U�hR���d{ƽM"yӆ/p0+���gdД���̯Cd���$�nˋ
-�T>�V�}�4B%�tLȘ��Ɏ���"�?!2�?s$�?�0�],?(˼6ґpnY_g��E��s��
���G��/~�_���oA4xE�@���!x��@C�
-�i¦��5F��]:}C`��&���H���o�I�
j��<�J
Wܜ3� �&�f'\�RB�
4�dG��PWm�W�n׆L���b�u�x[ޭ���Y9(|Uה�餂����
v��AQ���k
-x����p[��	v?
��n��1y�6\�� �ݢ�1�/?��V>��ֽ8�2`�zb�D<rEͭ�
��oC����ּ?C}��~�2��?�+��+���=7ݍ˙��s����~�S�~v���..fB��h����b�>����+ް6�z�EW
�k.V��e#2m͎�����[�}����Km
Jʞ�#��)�f��Ow
͠�����LOe]Ī
_x��v����nh���_
ޅ�>��-�-[֔>XP��)K^���������Ty���}A�'�k��xP��[���W�ũwC}���@�v̍IGٻr|�Y
�(ꓛT�Շ.ڵ��FDY�T�׿ɩ�x��B�s��Ay��S���C4c�3�����}�ߒsy�����]�����~v>�����	_s�#����w�Y����>���]]�]��J*
N��33۲%��,s
fr�,�Y�eYf�d1�2$U����/f��{�μ���x=�;KK���������s���攥We?�=(������~�a��'Ԭ� R>qM [...]
-��%�8��'�5yT|�� 1�5C�w��S�R|�k}{�E���7U?�^6���9
�)F��+�ŭ�M�_��A��
r����Sn��n��{�n)9�9F�����C��LPK�rf�GʩMΡc~����%�+�7���_X|�p��[�� �w�1���l+��;ê�
f�^b/DM"J@�n�)i�n	6'����q��3ܓb����� %7���Jjy�Ă�t\�c
w{c r�1�z�=I��
g��"�19G�s�Yb�\���ET�6�ކ��?�Rs�-�d7���+7�	�`�
���C�%�Sx�_�<��k^��#�‚z13����*k�_}��^x�(|�	xq��%V�
 .o����|��[r��~v�S�Erݣ�{�s~��o��(*%���s]��ZE�א3Q�G����1Xs~o�\{�̣[ޡ���~1( w���]K�0aa��*t��`���׍��Z!�-�`�Ee�;'(�n9
���j6�KB��A�EEo�I��o�RSDG����=��^Vs�%�S	^���~�z�9>����;�4�am�j�_󽼣���M灞�	�9��j����;�����ߺ>@������^� [...]
-*�Š�,��\XF]�<��zg��>��������a�7޷^k�8�N���0��2~��{�e'���拆���);
-~�}�ʉ��Ď�zcRVe@®r�'��&Ua5ᜦZ��N�=���1�(_ �k{k���
z��+�ǭ���^�x��旰j�����o�&>ngw�5��j�_� �VQʢ*�'�Cw!'�����d�z�
1'���ymq�[È9��=M�]�\*,�CHŁ'�wWt�|=���k�8&ucyy�U�ý��-�9N�_%g%��
h���Q��{�U�
��/�7;'DM�id��n}CL�*�:|�{=Q}��p��-�#WڇaWV_CNۧ�Ջ��[q�a~�7>��
���F���)R�}
��5���!f�����J��1��%.������%+���
,Q�Q3�Z�����S�#�=jF}|��r+0y[#M)�Yti<y���%)�n)�e��I��'լ��adڔ�����_�Gj.�c]�ߛ�=|f�$�
<R�$$yT�ƭYz��6m�
���\Xkc�B�3ܥ�QA�c�
��[
-r��(���m�Y;��Z6ԫa�����
�I%��R=���C3����T��8�Zr��u0����_i�˿(��U^9�"bf}s�Kv�Q�եQ~�� ����pY�����[񕺻�tb�C��"��[�Q�jbѶ�T�]ܷ��c�L��A=� ��y���C% ��5�څ��ӫ������ױ���^
��2���2�O����<-�l��쯛�
?�G٥.I;f}�[�=�.�̂�
%����3#*BABG�L�)�41۫�.�������f���;���
#�̰�Q��e5'�!qJ�
^Y��m��?i��?[�\�O�SWޡ.���f���C~T����'6�%���b g�¦zr��Yv�g��`g�!f�5���I�������q#�&�$�
�ο�RP��.eVT��GJ*��yȈ���5�)읍!��'��k;���+#���T���:������
uM'�?�\qt�9C�J,tw�e@;N�nm�R�CثQ�>��}
-.D�
rbiw;hx2�?��{�
��(a�(,�Մ@mؒs`�~t�m�X7v���T�p����
?-�j<P �6/���b��>���&�=�
R����Z�j|���ړ��M��2Bi�(�ā���ǧ9gi��KbQ���E4�"�ts��󒟴���6?o8q�,�q*h͊�Ɵ��#z17����:6�7Kȷ�6_��`�|J�O�%���A�[��W��A� 
Ұ�bs
®E�ٞ��[��)ɵ��s��$��xe�2��^x�:�eB>X�����`y
�hy;�q1���o_@/j�_���`��
_�㑣���
+��h��
4
-�^%��9� ��������<�n��8�~L���	���Dls��z�=��\|�x�>���h��Q[ǃ�B[��YK���#h�����M�b��z�zr����s�C�s>=�3�
��H��Yj�[�l�Z���1z�� 5�9A/c�	�Z��ʂ 
lHr}��1l��ԋ況�s!)�F at F*(Eh�$�īd5���x��Z��2�#M��ߖ�u{~) ������6��;z��(��!�oO��W�"ϯ�m9���B�Y�躨^L�
��Y^�O�7�u�^��;b�_�4_p���ԝ��I9�X}=����d�bۻ��'�77���	�Wߓ��bR�
-����\{�]k��i����_��)^	�VHE)
�8-v	�fc�]�u]*>�>�L]�o�Q�^�;����
���JX�.)>�
b�5E��t�|����ts������«�3!-�.f�Q�*."�jÄ
B��������?�*���,���I�wQ�8�i'Y_�T�U�w) ���"S�S�;�c�+ۣ��YZ�K&���������-��
��\����&���םZ�/��1њ�g
�@_lN���H�Y�d��pC�[��O�E��u���T�}��}�V�W��W[}:F��>�3K�Hγ�0	X;2>}�W���
�T
-I�C�4�Ӛ�.���ٞ�]��P��&�K/�
��6�hEq[��4�i�쬺���{u�������oZS�֞�������{�tZP�����|zPϧ�|�� ������؜bU� �M,01K<��r������vRn�Ҩ�zy�
�6 ��e�������|G��j���ƽ�ȢP�T�k7��
y�ȫ��
l�����-[���QDn�H�$Vۺ6�.ؘ�<����ݏ�mb`������%�kb7:���7F�Oy%�����5p[]3�,��ea���Y�
���u�˓�S�o�W��'|X�2pZ}Jfmr^K7`��A�u�Ӧk���5��o]��oK҅_e�-�D�5��>���w� ��Q�"n�oL��-���^�� ;wk���5D���)���������
-)�U�c�۫#�2��

j�
ݽ�/
����s����������҉ȶ|��0�WJ�5,mg��m�j~Z�ו���~�A�n��(���.ms�R�5F-j���K|V��%8GQ�
���Zy�|
�C�
[NX�������&
i�C��Dž�-������� �t���{���+���7N��3 ���g;Fљ��ʿ
5��e~���v�|�kM�
k<皀]rM��և���?�vU� �k�aTX_7��<k8iy�rym ���f)�(�@�\�&fz5w�}j
*�!W������E���5����d�9h[?���.;� b���
W�5�t������ow��C�pg�ը���>F�
-(�%.O�
�c��5��3�������8�l���� %g�U�U�4�2fs����qf�m��4��A#�:
�n�Fg�H	�-
�c��/���
]��@��Hq�+�qA�
)�>9.�+M��Ĩ��{�v��^Ͽ��X� �� ��qojo��;�TbI$��谅C�/y����4)���o<*J���G��m��E.ǣ�W�����YĊ/v��[�?���
l���½�]�� ��Ԓ���b�&��@�f:ǡ��rq\��ؙ&e.�ϩ
����t�U��]�,
| h��^D�z8�A��Q�!r�?i����1���j
�_��G_��FoO��GyU��[k�;[/�&[�쓄������}���=����ak���9LΘ֔�F���+�ŝw�ˎ!ԕ���)!ԣlø�I9�OZ/�ӳ�
���y�]���
� z�>�*�)Dh��]l�yk
z�>�|q�U�)�d����Ւ�3qy���x�_��W�N��g4{��ҵ7�
Ko��\Z���Rw}rg�]��P.	>�9��a�_���~�7��T�Z�\
�j�5�_~�.����ad�Z\��3�w���ϴ=�_�'�y
%�U������9%n�<��4��/��x���)V���7��jE8�; [...]
�X�B��ݜBx��<��V����+�����ڐX��Z4��wM<<�+��S��9�h��E\^
���-��ٳq�Q3z�*
,��Q-hm�9C,5<��`D�
�����C��iu�y:ҧ#7EE
����<��2`�c���zhd�Y��*j���jz8N	��9�L������z�_��?��\��o��.Čmt��U�1F�ڞ��'��}㭗vF�.�^�~��w���9i'���{N��{Z��
�)�Ϳ�)M�.s��ӭוO*��r�#�$�'ۡ@�����݅�Y�5��K�
-��gv�ň�!���!�
��
��I��"m_ӏZq��;���YZID���\��g��b��{z��;|��[�I�8�ZP�l$��
]
��Q�=�zѧ �B�[J+]�:����'�,$�%cVt�E��F��6��sko�C�-pq.9�x}sk{�R�4HJ_��v�8�-휦�5|�GB)tM"o��w�� �k��bPE-	k�x>M_�/�SM_ݥ�AJ�_B�O�ɍ1
�pS��K��[���Uo~|����rR�[wa
�☒��2��Gp7�/`�� �zzBF!1n��zb�{�P��
-��:��/vt/��}M�J=�b���9�p���y_�:3?uN�o��D�]�����?N���4w���W��^
l���� 8�ZHD�,
�+�t�3��,
���ٓ c.�•�Ga��RD�C͇��E0�(�xJT�\k.=a`"��*�T�⸁���W�՟�Z��b�c�!����d��B��
�w��_�|
1Ё��U�t
��RG�W�E/�C^]xV���i�7.	���&W�"
��!5�֧Bd��X�
�d{������i^5��g`��X�%V��v
����0�=�[y8�����gL�H��i� �
��.��zu��G��S­�O���_����5��n�V�Q��9��7y=�*�N:�}�U�=�*�{Z�L|�_5ݹ�uec��
`2�Ό�U�$�yum{���l
���o̯���zX�ץ~hZ@��rδ����9n	��#�C�Rj����	q�'�?�'����qLa��%��:Y��
-��5I̴�Cχe���gE��r���f{T|��^�ٹ��[Q5r22af"#J�W�ϙ{Q�����/��}�,]�^U�)!��L�\���	ֳ�!
����鬄��y�@n��
)9�''��唢�����<
-r�s��㔰�B����1�����s�����	7����
>�ڄqS� �m�m��U	�>��¦���~?B���1f��I,`�{=���l�c�I�cԩ
��< =�������ޔ|��c&>5a�}蘦���3���ν��ވ��h���񆋫�E_zd�B�{谩�׭�`��s*��^�K�I��xЈ���Q`�]
-t�KF-�i���{j�bvHdž��lX at A)�5P���t¶�
YxEz�Y�k�y�1K���o�`yY{j�
�RHO�$��Ub��8��:(�ݒt�W�i��'�7��R,/�O;'a������ ��[�v�]!h��w�t\�OC�ښB��
G\
����m��z�l�0��O�g�����K]w�����p��
-�4�n�������{�{Tގ��S�������`I��gw�Რ���A
-+[K<՗7�j��9�����S��_
lv=���7v���
(х�s
�Q
� ꒲k�G(Y˃�����C�����t�=~�����kة�a��Y^��0%k�%��{HÅ��$P�j<��
c�
�
��1I��9
K��s>%�NH��G^k`�
�F�Y{_�5��	���+����)R��c�s�U�&���'�Ϸq<*F��{l��%si�������}S�;�BnTI�I�H1�Ǿjq`�^�o1]R�M�
�JlfPG.�)5�96�`���
s�y�!SOw���T��"z.�>��"n8��w �'x��^�1x��	y)�c��rPA�̈́E5��ᓥ!���)Vm��z��:�u��ag
vm�u��^�:X�}5�Yn9���F��Q�3���A�1V��+?k}�pv�v���� ��!WU V�Y��E!/�g��ay�A
�fw��Ah��;jj��LI
��rL6\�`㐢Fѯb#�J.dm�Y����u�{�~��W��Ә
�,&;bd�����
�Yb^D�����=�&��'��,�
-�j}�|&����z
�ł���_i^ �S�I!��6�ڬ w4�S�G����Yg�"�"
-/��e����=1�@�%�7Czj�/9Vս�.ս�+C��[��҈Yĉ�9��E!'��g��Xh��^	ڤ�c��3���b�ws�;��գKvA�
Y������I^�������W{6
gsv�1�d}Vuek�:��;
��W�|��Pa��L|��kh��H#�.�Ż
�VЦ,�J��K����
-��c�إ�:�\�Q�c�v�W+&�T��)s}su	�������`}�_����L
,P��n���
�5�9)�u�쓬b�$%�9��6R��:z��
��� ��R\���-�_��5���O�K����[�c&nd6��ɕ>&s}qi�
���p:&eky-��!BrrI\C��I���eg�#�s�Iԍ�
鑓
ܳ�ܠ�
��X-�x?��13��>��Vyt�^����hk�Y7
(>
6;6G,����
.��A
��%A��5Rjb&&І�kA9�WO��sQ_��q��q���Z�̭ⶕm��a�M�8����2'i�fW�ɎhEP+������v^ yf
vy�]��K���řL~ŧ�Wf�5�Z^X��
7ww�
�ƀ
-��2�x^ћ�g�Lӵ�<�uo��=h��&!c���=��
sۯ��l�5_�
i�2)���a���� ���{�6FD�n))e~��>�|cu��B�<LJ����B{����Z�1
-�\�^9X�Q6>kKM�0�#S�f�(���;0�!
�1�k�G;{vWDmn��;?�)׾%\��C��z�Ǭݽ��ZV*F��xKF��&
,�u��
M{�m����k�r�C��^��k:j�GE�
-�q�H��Xy8�%�#�rBN��F����]z+� b��8�4��
�a���!#V�7��`��9�k®�mr�a#	�U��<O���.����9U�U����������T�J�O�~m7ϧ�|�i��kp!�y1;:��p��
9��%4oOr+W�i�[�Ԣ
�ve�|se z�>��<��׉I~� �U[}�N�_�>/�ʭO���(���ǥ�^A0?n�a�)��}���[�@G�E ;��Ŝ𜈜\4�#��X�1�
�^9�Χ�4FA�

�>/�bk���H�7����>)>�+c�z�|�GƮ	�8����S����]R�u�,��g�
Ջ��K�ϒs��O�
�f!�.�ݰ�ԟ	�� �p�[� �LB��M̖�N��86
�qHTO�	���flyX���m���1�99��DG�7�)zY8y_�
q3,Gd ��X$��'�~��7��nO�� k_�Xp��
}R8�
���wk:;�bdr�`�jt��
�2���~]�sW8��_�1�r�>��I,vu����QְZ�*RYPMo�:��6!�������A/8$T�d�_��_�����P�JVˡEĈ���VI޿��dn�"�
��Q��s\||Q��a���M�=�
_�3p0ɵ�ZҧǗ�M#��M�o��N����n�}W��9yoӣ�[ϓ�!?�%TԀ�e�����;���w>Q=����[~�u���&��|�]�m]�纕Ԫ�m���e��ux�����5��ö�oM$ܵ2;*\��4>˭faֻO��N�B��\�#%W
4h���M��5��LO�y����e����7*|a�Ȇ���ٴ��/���kWW�,f ��_@]ڞ�d{BX@��
-&�)&�5�Ó�g�m�7�õ?���B��R�S2*��E�K����zcf
&�aՃ�	���.i7ɣ�|
-n�OF.�+�e ��$�]��x`�m)�x��f����W����"���^�#%��/�'	��
-F%�\�� ����OA)|�h� �aR��C���҄��3`lg9���49ϫ��|z��8[��Y�#�,�� �!��&�ʭ��A�JN�KN/u)��
%�|e��3�cf5���.����>V�5��>��P�K܀��f9���)Q�%�>�|vkr�/����ژ���3�=�xX�Š�ֆ���� q�Ā
���Q��p�G=X��	:9
��in	��p����"�^wL��윂\�n�②�wA�	�۸!=7�h�@+�U�L�}k�
����ҿ,��\tK(>��8��\�	���;z�E���Q�ʃR|Vp^h��	|��"-<�%إ|��
�꾭��X�GMꁕ���p���s[#է��:�m�hu�G�'\j���<��q0��_{W{R�S��\Q��p�	��k�@N��-m����jJ�߷���yB�crn謃uqwd�	�i�u�~t��M� �\7�����ޱ���)�$�ŗ���#l�6:��t`����L�.1/�m��
|.��F�Pb���-�Yb��$9kGN+�,�p�:�7�l�
Y�s ��oE����
 ���\l�,����� �8&	9�k�<*l�}
-r9�%�GL\�W)��gY��-��o7������U�VJ�
7�?��h{V
0&6��C}
-z�SB.�(xM
9�
�>4a`��a�M�E�4:'bd5��\t����V<��v&�O!B8�YE����U'��4���Y�@��Zǩݖ��L/��� ߃��9��U����Ib�����
��1˩ښm�/���kc"� V�[��R�����𑅮N��S�2N��5K+v�v��0������Z�{Z
-f5ȵ��NLu�
V0�6Gq���0)/���vf��[c��a5��Q�=n���=���|�+�_
i0 o"c.ԑ�ؼ��p1�������qP�죄;�F���CI`�G_C\ޑJ�:!>�ݕ�u��*i����껅߃��P�HK��ۓ���:��YvC���\{�
*E�]��4+���7�|�7��75uL���t\�QHܳ�����"�Y�:Hɉ�v|L��O�o�����
hP��
,����
�xh���^�}�k�y�0r1
�4�Ago
���g�
1SW��b�C�
�D#����`kVH�6�
-�s�r�
q{KB�D��/��]����ノ�_�����ꛪ
C��x���?[^_����(l�����&�K���q箍�s+p��/kO�?��~GB*�_�d}�?nL���-L�G������(H��א�f�)n���-��bFz㮙�����Ny�茰h	3�����
�ɣBg�f��Fkb>�<��!��J�
��+��X�`"zL�W�t�-k�|j��s䒰F���IN	��_́�d�H��Q�� �"}rV����;��쨉V��Ȅ��
4�y�
��յ�]�v�s�S���xK�]��}��B at N(rM���*~˦�
�2�ֲ5�o�80�
>�������
-�.���Fٖ�K�e���
���
����F�2?���3K���(	[���\�XƮ�;E��~�b������S�3.U�fs� `
��UT��
	�2�f�����!ĭ�!�Q\ZP�k�j�$�89w�5���@�_��r*t�K
-�r�s��n~����ಗ�U����|RV�{�����G��v��?'�o��K�s]m������GAs�)%�?�:o{W�����1j������#c<2|QT���ʰ����?�
-�?�����
rc{�V ��
���	��"n�f�A
�ү'Wy4�ꀶ����Kh��ibvbIܱ�(E�����k�5A
�:j�aw�L$l=�m�}��"�U�
-k���A���~
���k��g|::$�(`�g�S�ZLI@πv&E��m��'S��á.=h&��-v�
(�˯�~����Cw���w
έ�We,�ist������s���/B�|�s�R�>�1���ǵ1h�_E�:�>n� g:
�^
j��_�Q����h�Em{������K[͵O�!�O�\A�\��ѪBz*�.����
X��ؚ��vJp�r�_Ƭ�[PY��>.��q3��������긁�LEĐ��7p`a
�)j`!v縸���6���*:�#NmD'����ix�+���g�?�dԲ=3�99��`�MB��䊰�
�a��L �iy�Ȇy4l�,�ҐZ��+Y���X����£� �@�
j1���d����NH
�n63��-��� ���
��Bߓ����
� �
h�r�
��>Tsi�M�	�oPO�c˽/\:>:Y�k�3�&�
��7��rK����9�����uN�
-
��Թ�U�.>�������^� �M�!!�;+��
m���Ӽ3�H�>/�j�Y��!5
�k�{
_�h�X���
;@�2�FZm@ښ
�Qk�`
����ʽA���L�����7����
-j�_�O�lvN1�6G�~Y�>ɮX
���>�������(��1�kH9А��ؚ��/�E���"6�	��,�1N���5Q

��"�-w��L��
�'w�v7�O N':$�<�_�7O�}\���IX�zb�v桭���~a=�d�_�۹�;>��OEoNX;���;�&������g�� :�#$�\Z��%EA�
�%;�֫	'�)R�c{kg����,����&�7�+
3���AJ��{jf�x���E mV�W3[��]��
-�9��5�wwgk��3Z��1�M
��\\��^
��l�٘���s�z�@,
-�H�`

.��?X��ļ�h�rֆZ~�x��{��ZL�-;\��?,��VĢ]+ Z�?
K	H��A%.#�e�����稁���� ��-�hQ#
����Zv�O-���\���
�Q1� �9ۯbՆu�Ƙ���5�(A0�ͯʾ��^�swޟ"
-��,XH����
�[ƩsO
 ;�|�����`_=�[a9�*
-851ǣ�ZE���ScP˨��	�>u�5���c��L����S
7=x�V�j��Z�:���$̴�������F�׶%�*�j�5���rz�eŏq
�b��AE�4�}
-U�< �l���VvR�*A�}��+�)�bZ����Ijn
p at T	��`�Y\֞Y@�yH��Z�5Runs���v5>�A��ᅧ�z�Z>2
r�O��
ĕ���6�UX�J���YFyd���
��� ᖢ��G�Ӧ��j���<���&��"⎔Y�W���^�O��ٞ�g�?������
���/�Xn�[��Yڸ{Km�݅��A�><X��L�c���W
�Qs�x7�6�]����
����~����
-��E.<��9��\�u?nߏt���1v	��������_�:
�q�	�\Բ[>���E8���V�jY at E�޳���8�}+�5�#Uo�@Ϻg�YW��4�����S��~�
�g )�?;v��
��=}.K�E�`���+9y����
�}���FZs��$G���)t�Wì
�0�4��U�w��ٟ�m�w�%1#.?
-�龙O8\��/t��u�&��������d��򋢯?,�HW����]
��9�fAbjj�_�j�\�
�]�Ȉ9a=��㲐�q�M�g#����W<
-JQ h�=�����9{��mA^��A�∆\
R��*V��6{�}�qlnb�u�4__
��ٞ\�[*h�*��V�����
�(8C*�x�pQ)���Fթ]3������ܽ�ӷ�

-|��d�U�
[敠ny$țn)*o{��V�I>]'6�!س�q��0����l�br�@;�ud0F�UN)�G��L�����S`2�/J��>/��3
���j��6�K�kؚ`���w,Oa�\c�;֧�?k���7�}��{������a�E���S5"o�P�J�RJU@ɆU턠��ݐ��vI�w���u�����a����C�ѡ���Ӝj���i�5)�+i��CfEMIJ�YH��ܳ�����'<��t�y��aJ�}
�%A&��%�Yx����>k��A�"dF�Y��!#��}JV�WJ�pI�9>
�`w�K:X�y�X}8mW2j|ZM����Ml�k�cy^w������̯�ף��[���Z�?n���|\r
���
-h���Y@�/�H,t�4�R���i��"���;�6r����V��
���@˳V{_%�I�%�w�jjr��
{�&�w?����m�虆��Y�i�=?�Ky{���ל�Q���4o��
-
��^}��EV
Z�X{Zc@	4�4<%f�@�Lb��|��o`5[1��o��-�΂�����t���
ظ���
=��{oW�N�i�U�I������
��kA)?���
��н
!>�C��
Ȼ@��b�
�3bJ�&0&Ż@�u�[
-�vq�1�rfk��
��|�.�Q1���Yt
��,��u���%�
-�,�1��'�y�>����(�l�z�w�1h�G�C���B����)n�S�m
��Q�O�
�8&���'�.:fQ���K��������L�ܙfUF�LXC�ݙi��"S}*|^
�����T�}
-|��82#���%���e�4�.9��)��oO�7pW�O`?I���ps>_{U.a"U�[Xp��\��g��k	kq�^,uu��}��3��wbƞ
�V�ݘ f���6[oǔĢ��R��e{*y�/�vX́9��5�{�?xf�9����K,܁�E
j�>%�"jb�Bs\�|��[�NY�ǥ�� �9'�ף&R��"�gc#s��m�S���7c
"�WdžnO���f�7C
-R����&��qM��7�iv
�<9�#�=`ܶ�
�.�?���:Ɉh�nҵ	�ǰ9�WMg�&�Ň��!Css����x�;�x
0SI��#}��~�� �nN�^qJ��A����
��GlO(q*��wd����v�Fm!�5:��,
���\J\G��U�96�c�a�F>ګbԸ�q7��֟�<*;���\�<��ӓנ�m��[����F�`��7av
̦���0�B}\���Ȅ���h��^��u@=q��_h��g#V
���>����V2��*jyT�n�+����\�����ʧ�OKN�Ԥ���t���7q�[��+��I.����3
�oB:n�?y '�?*�5
bRB��Ȩ�~
�!nngFf�M|t at E�X}���
-v����9���s~�
��?�z�\e�����y"�S�o���QC�xk�U4 g�&�/��{K<*�el��_F�x�еa~����[�1��SSk�,
\�>&,�s�t�'#����01�du�:�1�r0Jn��ET�J�ߞd�,�
*ևy�9�as��n�=R}fg
-���C���9�7˂D5BT�G��Eݜ��~'���2D��|p�x���myR�CXE,N��M�V�p��qK����U?��æE�b~lQĎ-0aa-��魰�������|w�K�nX
!e�#�����7�k����>M�k(�=�h/�WK��	ya�.fd5.�DL�N�w�r�͸�K:\�{�p�WI)9�
-������X�����櫊+oJ��)1��w<����,��œӔЏ5{&fK���ze�b�T}�ssǧ�T'ۻ�z
G��q�v󩉕�6�
4�_��k�4D-\tx���Y�]Ч!�5�!U�p�@+�Wh�C�QQK7��w�
-NK�ȧ
,�<K؄
/��;RR�GA� u
[���`�"jV�C'w_+D ��#$n��EM�,�L��(�O
%��-c��T��+l�?�����ttb���B�n
".�d̺�B���RJ�rl��U������7�4����
췑����k���ոg�Ն5�W���s~�O��jEX��x�Q�=�|^ӓ����S���}q<�
ł��kݾ���g�#B��H�ɥw�_ڇ�7��
ؠ�OԷCɚ*�U��|ܮ����5���%����+w_�t=L�8
-�Y�M���=
RPʝc����_W�:�s
Ⱦ�K<X�BzfcPŅ$� Wk��[�
?Ǵ��_�
m�z1c{
�昀�M�Ƕ9F��g��
��iv��(!�3K)rO
>Z����
-�l<z ���^
Vwq�n��1M������s�%�&L��}kG{l^Hٖr��)��q�z�S�kc-�6G��;&�殻1�set���SRK�y$��e-W�#%�,���
��
��U�9!��զ6�GI)�k�U�9!�p����jד`g��wfIyQ����am�a�#f
�o�mݿ��A��C��"}Xf��i�A�mM�� _P��:����?V���`��s�����-��R�>9`P7����
�_�2So{])f`c~Yo��uC�
�c��s
-�[��K`������l��UH���u]���)��(�%�C
'c>����WGw�@h�
-S~�j��ܞ�~IM��9о�.	�zQ����%�[�kj�\�����옪;�%d
x�#v`f���M{s���9LvL����7nNn��y�~�����6��56aw�X�յ�ο���3F��7t��q3����d]aT�������/��v̈́b�{�'cT����:�!��}f{����|��%y
j���]J+Z'��
�����F�o�,���ƫ���5U��s)WDm{V!�''��W���֞�)ՇF1}���ձ�csm��������G!�j:�9T{�'�e%L���]bs|l���~\븻���e���w5�T]���?(��h�
,��@��Ԫ�U�׭��}k� X;n�7�L�\�`����Q��&�/a��9�5R��[��	t��|��Bۣ"�l�`�Bz!!a��&fcHK-�m9�9�x��J��`e��ʆ&����^
�x-1-�5a��D���@�����C�Xu�)#�<DlN at 8\l&��#�VQJ�׽|���R�4�����o7���Y9؏����+
�q��M�o�w���N��jϓ�ծ�a���2�-��
5�3�����
W�p7#������^��5���sz!�E�
��d{�L�
-�/(ם���}ۃ�]��aU�e�x�w�����؛��z_/�`�����L� ����F��_��l�lk�}���cu-j9�+����zr�	T��E���q�>`���oyU�WuoƧ���3��"�&��fI�@;������Kٟc���(_~���U2��.Zy[��$'�Lr�v�6\��M��/b���w��+;v�ٱ#G͎
9jv��Q�cG��
;r��ؑ�fǎ
5;v�ٱ#G͎
9jv��Q�cG��
;r��ؑ�fǎ
5;v�ٱ#G͎
9jv��Q�cG��
;r��ؑ�fǎ
5;v�ٱ#G͎
9jv��Q�cG��
;r��ؑ�fǎ
5;v�ٱ#G͎
9jv��Q�cG��
;r��ؑ�fǎ
5;v�ٱ#G͎
9jv��Q�cG��
;r��ؑ�fǎ
5;v�ٱ#G͎
9j������E�w�Nб�(.�H�'�rJR�u-��ű?����r��O�pI
:�-:q
�u����'.��P�g�s�`�Ul�Do�aPT������㓆���'�7����Q\����� [...]

5�9ld4�Y��1�$�������
�5f1ZV�SJ��*(%>9�2��w�"J� ��5TXDž&��JNM��
���!|�s����
-bALK*	�P��&!)dx�8h|��o�n�*�
	��=���$��fEd�R�H�Yk��R�8�:b�z���
)�}��rH�/۵P�J|^TG�������6fT�h���A5��1�I���������
�rZ�=am�D�(����5O�L���ʸ��V
�A����c�
��3���
���=P��o�55�����q]���יּs�oϽ
�{ӝN��N:
��813Ȳ���T"�23� Y,3���N
�*���;����P�kɒ�����<�g�}���ZܪfN5gm���҃�O֟�|�>Ҳ�y�������*	����Vd̒zԡd�
��{�V�8>��lO+Zb������ӕs	�^9^,�%�F��ꌙ[��H���+Y��s�k�Gk�X��=��V�J�n@����2�dc�yzk�S�s�d�G/�[��cs�si#" ���(Y[�܊�Hӷ�]I�8d���WA���‚q�*xx@��|2&�vg���u
s�/�N�^�/��>Y7��!^q[�ν�q�+񀔖s
j	����뵘[�"�$|
-�Q�bv��<�<┴�~I�nP%~5����z#
2�'f�uƩ#w��r^�.	����n���'����h��W�·�
�8�W؄�$���Z���d��*ԩdc���X@#ɇ5�BTo��n��*G��ꬋy9ef�۞f��_��!p�~6e��cn��e�����	�y�c��Р��y�Ո�Y��y��A�~��UX�>�8�>�>��*�oǓ3�J�5�҉s.Yg��<��g��[�-���+9��u�L	
��L�YK��A?��ig;�"aT%��6�cTg����1���'-�o��8���<���JI��+k�4����w��K���Sѕ�m?����{�o*��:X���wi8�G�C�Zׄ��B̭f稣&m��+n!���|@�(F�z̫�A
��ViSrVZ�9��(�_|�vt�E�'�{�*ލ��r�y�0>�9����˥�e�m<���c�ΙٗRVޕ��ӿ���|���:I�V���)����>/��2NcV�Y
��jE�G�D��!~9vƠލɀ���8P
�|�4��0�]T��U��DդK�Dz�
y���t
��yi�Ԋ1'�*ga]�{��
-:�W���O�tr"`�Ϲ��Uّ��8�[/�CZV
-s~��:�z!��G��Y|ݶ?1� {n�>5^���!�Zᑴn^E�I?�0J�!Vu��v<a�8I
݆z��
hN�!��|��|�[���v������^�=,��c~93i���'bV���S�؍�ށ�Ua9����Dp����*9Y7�,�䔦�Ҏ<u4CP΃1d��	�u�O#*�$���%������
�%l@����Y�рx4�02j
��ĝ[�M�lN��5��U�ƾ~�x�����d埐�����u�����O���K��ZLF4
-�/��}
-6̝�Щ
-A��ʺ��pOmM��'����K�<�_���K�yҩ�}&S�%h\{U����OSY
�#


i���9Ɂ1 Mq��
-
a#fg^��t
Z}����
�bڥ�O�..>��zs�{"5����	��,��Y�ͱ�l�*����q<cSv'�����;��3�2��a
-���
j�O���o�u�9��s�
A�G
|�_�����s�)��;>�jDmf�6m��~�s�7����]��(�F�LL+��Fy�v^qN$^���s�
�c�_�_~�Y㗎[���
�
*A�{�vt�y����Ӥ�]J:�O�nv9u\A
�
j��2�A�f7�Vb
A]�h�E�V�z▶bNY{ѣ��Uq����� �r>�}!1Y�
2-n$]����u99�q�P
-�"Z�?�����J�s+9�N� / n+���r�/��L�a��zɐF����9օ�
-��P~�p^�垛�E�|��:�w
jҖ�è��(��<�6�[�S�_�a0����%mdPЌ��%������Xݧ�yaS�w��
ʺ�Mܔ�
�s
q{�)�̇uz<�`����������ǔ�*���]F�9�������9/�d��.�Y����~S�?ժ�H�9��
q��
->A㮏q	�L9�4�&꿋t����]���M��[�rr�lN��-�x�1�\>psv獨t�E���$�d�#j̻y5y��w��H�NI�z��G/͹4��UڈYm�/�'m_��\4_�z?>)�ǜ�Y6ik��-O����~C�K
]��g\��-��7���MbJ\��Kjr~栎�V�ni��ɗ^1�4}���}b�)���
�̬�"1�>{�<����Z�U9��!�m��K.�go/���ZRV�	�ͫ�=�Z�떼4ã�cP��(߅^ߋ
-;�\��y8cc�E
�2
�=c�'�e��iQE|�}ɻ��:������h�輤n�uǾ���C�	�����3�Qi��ӺO��N�&|��ψY\O:�ҫ��S��[�]�ӵ�Gl���ʋ���j?��v
��s/e
�q;rb�6�)�ש�A�<[��ŝ�ONϹč�[�U��ˢ�[^�/b����鲏�;Jp�����ɩ����o�ڷP+�r�!iɹռ�S�B�C����C*q~�x
���xX���z�� �Ѳn���J���5�.����JF@��.�?·�F꘻��SR�)�������Q��
�;RVn)
-L�q���&I�JP���[X�:igH��� ~��	�R�
9�����ju��V2P�O܊xe]��ƛ���.*.�>�/�3v�Y���˭.DČ��_��ule�w6��ˑ�Q�$�jH��íD
M�ƛ�ۚ`
'�
-n1j���z���������M��_�~��e� ���b at -�/��C��
���/K[YgSs
�I���
u��c��s[3����_��k�9����O�g������H��cm�u.��=
|sCM��̴YT����Y26^����Ў/?�ڇ�+:��&A
��&���)���8���8�T�u�E����Ÿ�I
-7�edg�%�Y��M���WM�-<m�$9-(]��}I`f4&�h?����&cn�&mn�!=�}
qI�6�⦭qƩ=�H`G�nHB�ykH�ю�溏d���WF۾��=�;�ͺ/	�^��
��'��-?��p�q��ˏ���=�8���v������s��j4#��C&�JZ��w��3	+4O�.R�쑶��(m)���"�w>"e)
��X���1��Ǝ�{��X�W�vQ)-F���0�i{�~z{BX�6�;�vI�y��kB��R����s��6��+�'|2Z>��z
��
�~9.��*L��:M�x�)�2�t��
��w�Ac/�W
ɠN���ӿ]ҙvT��J��@� A-����?p�
�"=��E�:���0��5�W�Nx�<̣d}}���L�!�]:y�R�ͯNZ��Q�N�vHۓV^)P	��;���&u��'� �~#����
*%�L쿓
��]1�&����C��\/F
�(�J]kX��LWZٌ9E�
�t��:�ur� ^AS� �'�W_d�:EҮ >6��
4��sAkL;9��'��ר��s�?R�H9����W���
Y���ڛ�O�A�W�u����cK�:d��krVYsjV�|t.��嫥��+��E�;�Qp7uT&|��yq�Φ�-WF*?X
i�6k�w�>�ps�y,c֦��90�ۓ�����}�U���̃�sN]�)2��HN�/�&�GSS�Gӳ��Y���d�O9+�4m���ڹ�_�MY�%;S]G�3�0��I3���$��ٮÖ�%v]|�mPܽw�N�Bf΅�,�Lj�}.5�<���}��q�o��1�
uܫ�_��c��
k�r�i�����k���d�ߡ-��
�V�s��&�.~�v�f�R�JB���ʃ?d�*v��)Iϳ��@�3��80;��\!e~Y!�}�~��;P�������}9\����ӝI~i!d
��]�_�V�	Z���H���}9�d�`~nu>"�( [...]
�-kMdPԖq2�QG0��N��E�(0
-	� 
s�������SP�y���ōi'�2RIɈVKFt���VW}�
ဏ��Q��\����
dh�1
������x�H�WD�:fUؔ� 
7��tE]
-��BV��
�m�[�ݐ���p�m`;c�MƩ����E
▬UT��������*u\�I�F2t��ql�Օ�,<*���T瑘UR�6��7�l���F�g�Uޒ6��Ss���q�y긭��/�G�gv���4������wu����醯b�u_��M��M�3UC�pV�^�7�� ����jq��/�;�z�V���W���3���{��������
I�7�p�[c�߮���d�E��������]@
�_�"}��
������G>�ݽ���Ӻ�?�x�$�
2<u�]�"(K��Jv&�Gbӌ9���'��,��hE9��ic��;߭�����c��(�P�n�9��s7�Q�(f�+�	�NRpu�W-Hٹ�i'dhȥ��J����9�
+�Y
p`�g����<�=�2F	�"���[X�4�-EA���:1*�8� �p�ɐ����fy?C�؋����GM���Ea��Un�[��B@��MW�`��
|�����_�q
�v�3�Ǜ�J��#Rv!��B�`�^~
�4�!�>�S�!��A<��~)�
��<�i9ꓴ����
r�R��d9��
����RX1c�^���ySv^yl�y*m�]A(M������
�$�tc��d�`"�

��w�5�‚�&�/����_aA���R:�3�
TF2��� �%��+�
�Q���i����F��+fg_�l
����
<�/o�~�0��U����9��X���e�����
-|��4S�2�7Pz��
jfޥ$�U|�}!;/i!J^�#�ڰ�K��?Y�8�{��4�Dv�_��Vw�&UM+/��c�v�
�/�c��� �.�j�,=O;�: ��M��H�$�y�¹�>�����a7i�sʶԼ�r{�u61Ž���\�͂
-�"��xպ�s��?�G:B4�f�E8&>�8
oݗ�no�<� ��L�On58��w�X�9���L��9K����~�t�N�� dT`��
�$k�5�n��+��
2��O����͒��K��M�K�?�3fq;j��Va%���xU[��GV^7~�ە<ܩ�vs��
�ɧ`�cA�{� +1;�l�
�0�P��p�=�#c$�(_��\
-��R�Q�j�K��j,4 Z�U�^vE���}��v8�a����hnq�"j�]��k�A1t�Y1*���ň�@Ps(ȇ�&j͒Z�����a�,�7�`^~�
�u!��
qK�����̒p+h�6�Q�Up�5껑K�xP�J�E��oPJG���m+u��N��O�	������
ޘu*��
�T1
�T��u8�O��o��w}
-&�&u
4
������:|fM|���т��'ԑ������F
Y_\��)��y�<�:�X���߳�V�����㴽�[
���b���nth������-[S�3�����l��^��ga^�q]I9zR�kϳNy�S��^O�
=�]�B]F��5bn=��yvk�yj{�ww�8�_ɏO3�d����m�?5k��f�m��Ҋ
������v���V�q������*�HP�oc�廵�m��3�ˤK�$\�}d[Ĭl�m:>jQ�Q�J�9ډՑ�?�5}��b�B-�����6^�
 \*NΩbd-�s��+>Zzp�������ҭ����5�62Ef��Dj���L��ٹ�����[
-F
���X���;��=:U�o4A�V�~��Z����1q��c��P��N���'�ؗ6_4}
�v�畡6a-j7�ev�9��

N5o2 �KS��g�)���i���::����@.%A�H�Շ���<�{�
�
� � �g]�n2�{�Q��4�iP 3"J
��AAc!*��G�ҽŞ��F`�Z�i���^Tߓ)�O-,/�-��@O?Jqp5��Kq���ܘ��<��z-���e�Z!�6�r���k3�֍)�%�#�ڍ�{P�?�h��Q����
:�{{>��&�jq!��Q�2�1�^�r2��3�?.�4�����)��.mֆ
����Eӝ"�c!�Qb�;��{�	����:E��9!z��Qkm
m�)i����F]†�a!4�
z��
P
��*�b�²B�Г�+����ִ}�j�q{,f�;����4���W�1�>�c�ɶ]}
o$�w
Zܯ�`����Uކ��z�$>�l&�z%�����9�/G�
C��8��3����G��ZR������!<ze�
-jN�S�]���8>�uq��W����&9��k��ϠżzUҢ�^}�}h�
��	�����3SB�<���
�b�C���h�SҺ<R��ң���6Qk
-r��ڏ�^6|�����Ü�
-f>���}����M�	����}�
e��;U�=`��a�[��f}�}r�y��xs�W���o�ǡ���J|�ܘn;�����Ԍ�2�Q�C;��|,*E̓C���
�<��
-rvi��^ه�g�C����k�%��̜����t�3�V1��q	뗦Z��̳.ށ[iWoʡd��k�p*C �hp��9����Y�[�]�Žr�s���U\��߮*U?�*�h�[��
D=F-�t�O�,Fz�(-��ZE4��q�
�8W�9�mq�A��긨à�jkw�|�4��R���	�����-��z!8�X{d��F���9�GҒ��+����_�q�N����
�֔G-�5b!�J���e�[�l)!�
-�Љ��.�c�~� ���-�
��K*eqQ�
���u
�
�̺��f\z1���/���/� ���#܋���!�bm���
�W�x�����F�}71�0��
0�Š^�R��5-���C��
'c���֛��gM�M���� ���>�8�Q	SNY��A�g9��
�JZ�^YG��/�V�1w�P�l�M
-K�!������aAqj�Y��+aUg���-���9������e/
-�'`����]~�¿����
�t}�vaTv�
�<t
���d=rZ�!kO;�M;����W�Cۓ�s�������~�*�
�Z�P���W�5ռ�s��,>��+j6$����睇p��A�T���_��<
��<������M߅^w��/<�N�f煽��g��
-< c����Vau���S��*�yEm�u�ܢ��+=
�0�uR�+i۞��ܚ����JN��k�U��D��9�͢^�Vi+��I��Z����$�0.��p/M�T�=7�
�rk�]
Iۥm��d삪���c�9n��0���6
�������i0Ky�G�L͋���Z�jR�� K:4��p��n�g��� �
r�Ү��=�R6km�S
-?�X�\}A��^���d���%��;2���9�
��Y9�^�;����).�P`��W����P�7�U	V&�ѧ��yGu�����ɺ�"�6K-
-�$�w�����i�!���W��
Հ?�>݅kȹ�,��毓s�7���8���
~3QB��1s>A#�؜װV'��#��Mn����D�g���7A���&>Ϫ
S��,7o�����Os��k�H�}2<��ⷷKb��,<k�q�9�,�6�n�S�����
]!�����RVQ��
��6��%9��� �Kk�a�q�uĥf' �oϊ��ï�.�{�K
-1|VZҢ�e
ZN�,햴�Lv
��n�8>%l.F{��
:^ڡ��w.�=E'�P1a�.M(/���T	��cg^P���� �4el�FĮ��X5
ף�C��~��������PyIP�1�mMv
^|��uj�{%�Q
sn'5&�R����3��ő��Q+d+��
w�[2s�R��O��_������a���KX�uK��VZ

���Tr���|Ǐ[/��^t��Ȩ�k�F?�she$�3�T��:	�Zwp��Gi�rf��͌�9����Q����iE{vFޖ1+;�OZ�W}���N���_ƭZ���x
-Ƅ
�{��Gzl��d֢f�>�*m���N�4�T1�Խ�0p��D��[�����U�wC�7sn�(8(��}
-!��^0O?W����Z�g��Ы���h�s�^ʥ�\�3�5����
Ik�"��ٔ]�K�!���BH)&!������
��m����D|Z^W���rna#w�}wɀA�@�۲����9^��8�tҮ�G��'�A����!�v�)�W	2
iG�,(_
�
ڙT6S���LWo�
�𰱟�t��J:�]�PԬ�K��!�
^Z
r
xB.pj� x>�Q^����
�uc�~
�<D�w�Y��Qxo
b�g��*�'���0�~$���B=W���#"�w
Hp}l<�1�
endstream
endobj
329 0 obj
<</Length 65536>>stream
-]��I�и[�؍�? O
$�+3.y'�J���|oYK����׊��})���v���~��h뷉7���E�u�@ ;e
9y&

�:��估bg�w��,9+���X�Y{F۟��5d��䜸2c�5'�du˯��R�⪟j��
*��$0 �(1�5j!��̲����:eU%&X'p`�̼�sh�{���oMt�>h�d�a�G��
�y`m�FB�M v�<&C�ۣϚ�5Y3���)��;�}����� 3�Hx{�c�
mΡ�!.�)���E9oQ�܍Hy�Z�2�1�������~���;��۾_~��m�	���
0���j��X�r�9�������;f�>��3�"6n	�S���)cns��#
��7�W�A��&��ޮ�jϧQ�K��9ϵ'Yߵ�(�g�����`�M
�l��N�^!!�g�y��?��nA�>F �
���w���aq�_��W�9
��i(G��k`P�F�ߍ��Ű��:h6Gk������P�����#��1`�$�\H�Ny��7�àˊ<�|�xʩ�a
ԪZ
�_
�Y䵘t�-c"�S���z6��!>j��	<��
��x
�6��JP����ˠݴ+���[�`������;n
���C��N�l�jT����D���~0QJ��R��˘	�"R��EmϦ�}����`w��4�h���
-
-��>��{���76P���E����hY/���IFrA�#
}Y����u2ĭ�C�	�=h�Gܾ5K?7��jߓC�ޚ��畠�P��7�~}�Ǽ�9Q�����6�7|����&��R:�ԋ����(����nPL���
���P�4�f^P�9
��iY�������1Z���X���YԲ2������_���[�ٙ�/�%$�4�A�'��n�-�Cm��!������=���[�8R�ab�
z�[[HYJ#����CɆ�z��ɐ�����\��[Ԕ�ke�������L��Z�
�	imvFݝ�U��^n
�7e]�V�cPR���I�5t�f� sp�Vƹ�\�
x�˙��לS֞�
-*q��K�^��r*�7�ǫE����7

Iy�2��;��i�7x2���I��-k��Po��ǀ�n���x��z�����
�ǭ���˻~�^XЂyeI�Jơ��A=h)��G�;T
-q��u�k	��	y�~��q,��s��[i����k�Y�4�Ve���/l��N"z�AF�9�����q/�6k�m�v
ݜg�GÆAlA!��{���4x�
���j���n��
-P��Z
�А�����q�
��-�=��3vՊ�%�
�V�8�<�R���}	���
*�� o������ȨF�_PHsaF특��b���R�C`��]���W�����22���k���=9��)�<��w
�G4Z�-I�%��֡
�w� h�P��*ݚ�<�s���kݱ
-�F�2s�
�`�+l�9ۏ%fk�\}u���D��WOx��W
෼�g��K���kw�����3^ ͏�q�fa�}j�ա��9���3�~(�������`vAKޯ�ŧ�f-�3j�^@-��U~�ُY8uy�������6j��W)
�|�,��|�+C�0ߓ
�0��Y�2�Gڝ���{��K΀y��rJ���m{QQ�ۨ�c/"c�E�|"�oθ�2v^�R1S���̴�+='��|�g
-A
����S�
4�m��"1����'�G��O�/&&8WH�JX
��9��>1�~86ݺ��k�=zUΩf�>u�1�����T���)
�%�6�A+���FjM{^ŐΘ�8�!��$
�c]������
��ޡ�g�a���%����vQ��::N��k��ͷ
���Xe)��Ix�
����>�6m��$m��yq��\穬W���
�mȖH`�)|G���`�9�w`>�H at P95�d]��+g��޽e��\ё �������	jp�ݲa�[N
��\�.�
�z�60^\�
�

*����5A����b���y
x@ԑ�p!�pkWǻ�&,�R�#�\33��}
�Ʌ��xTߋG�R4$��Y�?����{��$�x�C"�V��5
�!wB���@��^}Aե
zc�U+�A�>
r
�K��¼@����J.U�y�=��ao�x��h4)'�Bl��G`~��k����vnj�2	Wϵ�o��n��
��s�u��Ĝ��ڟ���sBַ땈[�6���&!�Xgw�����(Kϩړ���4�
-u at MA.؞a�H�Ҏ���=�ĩ�!V�w���i�^��e�7+�R!�k�xp��Q��oH�VY
iոW��ye�
е�ET��al��
j�&��@���2�g\IYg�_�!s+Q7���J��.^�Ց�IN��(�{Kځ���F�sYܩ��]¦��Hܡ`��P[VI�4���O��ޫ;�|{����X����ØW#ܞU4�f�u$0�^�tg7"�~�a���I;j��o��x܄U� Y~�ԩI�-Z���+)����]�p
-�jmj��]/,��Ԛ�GP���4�'����Y�ˁ)�&��X�P�'aܓ6
��ɔq�����g]�G�g��
�`զh[�Wࡡ��Q6�ӣ!mo�oƂ��D����a"ȫMX�s^������J���:�㔧]��\�]����aצ���#���k���վ���ڐ�kG �g�5Q�/"(ad
ݧI��D)��]Ő���B��U���JI�l��+ߚ��	�Hڨ{(�7�xP�D���ȅ�G����
\7R�������eUxw4�3��'\JFڭd�����SP�B)�a�@O1�3X��{�"je>$gS��	�x�s�v~��naI��Q��5�!A1��Rk܈K	�dýw
-������j�g�'<:�J�_�<�v�ů�Z9%��ǀ��=L�
��� K�մ�S�*��!� �ӖG�{�u{����W���r.��xW �[+��&�2V
����� �6k�Y
�
���6���l�х���x�r��2�A�<��{��B��~4���K�t�
\g�)��<"���q���Y���|D����>j[{�y�1T��{��kܣ����~˙�W+K8T̬W��9E
1��c�#mٜV����B
%}r�W��Q��������Y�e�#���6}
L��9��NxMԽ5<4����݅ܨo���7�����
�!c?
�s����L�7��RP��рZ
-�j>�7G^�
#�&��H4�o��y5Y�'$��l͋�0��;9�1�?p���Y�A���B�Z
9�!g�L�h
�4炽ChX�E#jY* n�[�ǽr6?�	�gdu��
<8<J��WNJK�;���DX�y�h"�
��i(�c���!!ӍM��
s�DPڽ�7�;s��{���}�sD).%��[X��ٚ���M3N���bX-��b�W��m2f�i��H��S�^�:��Kˢ.�8kS�#.E�����ٌNx$������M/�Z�i��V�����~���4��e�%�awY?@D�Z�q�#�� k�zur��̯�A���o�`�@�om�yty��ͱ���[p�N��+X�3���e�'m��
-ȗ��8d�������&�Ы�†���v��M9�Q��5E�ѽ�RV��i�X��nI�ꄤ,nV�R��	��up!��+Q'��UP��D�E��BH-A]�&�>��sh�y_��U��F���y�ڣ	�C��
��c�b�y�z>�,��|M?�5�8���Ո�q���^{���S��Q

-�_�q��J>u���
����nj�sgNX��k#�����u)���P�G^���
�
ĩ=NQC
�swY_W��vi��i�OԚ�?!{�Q�Q퀚�[�����P��"��Rf>��.��+��������Ԉiw���ު�N~Ic@�*q�"(?�Ã}73~�$�5����ǫ��Q�^A��<䮜��?쿅nL���x��F2,ՏDT&Z�h�fsJ�Nڟ�Ҿ��T�g��:����2h.pY!��Pϯ�Ac_�s߉
�� �OT���E�I+�l�J��s���.�{��l
~��X�DX@����ѭBP)(��
x@،R�8�R���Oҙ��,^}�	���QlX m!CRfj^P���_H��50/�s�+�s��Y�E̡�LL
-/���9�vC90���
�������Y��
j����VP�F���v����S'$]*�wSߗ�ߛ�
-k��3fU�M�J��c3�s��[���+�6A��
�RbV�^z�>�:��c�'
Z��
-�w}:ծǠ!|R�����6��
i�N��iY�>����ko��+:�oz�rbVD�ì�
������AO�/�g��e�/����s	�P�69˺��e����D�0��2��W�sr+I?�
-��*rni��kI��h�ί<��~�a�{G�ȿI*�{�R��c� /�<jA>�U����Y�����WCxE���\�'i�x��u��-iW�阍v*�v����{a�5��_F�
9D���JK�s<gs�w.6�9��
C�_��i�Dh��h�NF%��%~�[x�}�ʼWPW�&�e�qw��!p�cx=,���!�P�8!qg
�R�x at U��ۋ�M�9𚶸�
�*Ȑ���ĝ)��%����#�[<�w7
_ǃ2�伌+9�V��ܞN��_n���[�ž�䂾7��aA%���Ծ
"0pu
�h��|��&�4���R�E#��N��
Z
��!��hpw��la}�Mq���nT����D���#����&�+h�j��T
��{� �
���]!9'6'f�'�F���
�����sr�)�PfNX���^L��%�Y'7^u}�>������I��t��0�������� 6A9�7�nYgfNZ��h�K'�<zbU�g����i�~Y�,(K�q�'fاb���Yi��8���8�p��:���/d��3v~��
��~�{��uoM��۵
ġ��G�vIS��8���8��y5I��">%*-8����E
�Ϙ�Sܘ��KN2��f�q��f/"�|��#jy�!�L�
-Js6Q�.�=���L�
Xy��ivZ\E8tb�md�_���V�����ٮÈ���[���
2���p�.��a]��X��%�������q.'f8�	�N����C6��b�ǘ_��|�����h�ƽB8%�T�<j�֌�"��^�}
�<�������H�p��X�[%��E�֥
�ZM����VP�
�$|֟�	�}7�[/6
N;�G�2f!,ea��F�L������O�]��ň�[���u�C�!z�1
��2��%	����!k���!ʇ�=�E�
-[	?��	s�^�?
��kh��
x��|T�)Deܟ����Kܔ�޶��V'�W����ۙ׭���@\���]i
�,��i��c}BZQ N,ǐ
9=5�9�:Y�p'�<P{L�Q�M<j�A�K��`�	����T̴MP�5�q`�uׁ�W�3�3��eį�!���P��q��~֙��d�V�k��S�
�/�SS�өi��(�������7��������
�
��z®�-=�
J�p.`Na]�:c���s�P�+&&ĥ/8GR󒚭q���'�}�I�Yjm6	����胖O
u}����2�-A�ܲ���Ck�]Sf^I�ƾ��ye�)���1��བ����������sf���l��Ɏ�i�Q�ν�Z��;��3�Oh�e��-/[����$;�<��E��y�Y�¾���]�y�=��W��̪vܮ�efM�9E��>�㧍Wm�l���O�g��e�E�]�@�i��_M=�K=���J��A�M�Z�i��K�UHi�_S
�Xx�Y3�
-|��
\�R��^�8�����qȻP��-=ǹ��
��ҵQڡ�1��8䒴EX��\&lҦ��r�
�0�5�c�wƘG�����!C�
%�H��y~Yn�W{�:��
-�oFp93'�L�([�Ӫ6Ԯ�B��֝	ޙ�7�#3�B> �#Q5ꐷ���(�Sί��	RN%#���6x=�J�ʾL����s��E�o�Rzѧ`�u�{a�GԐ��K֦h�21��E��nH�Ǽ�F2,ca!Iw�%���ج��
[��ڿ��wd����������?@�
�e�����~upJc3���k�ɅW���YQ
�-6�;Cz��,h4E?��EZO�Qڮ�!�!m5*��K/���IU����
-d�K���c������������w&��y��x�
�w+��п���%�8'6_���<��f���ƈ��Θ�b���t�F�ǡk-n��
��[~%�h����(�b��Ǧ���Ϯ��>���y$>&8�ޙ�]�o��5��$h=�7P}�6ҽ��Ň�_�<j�
��:�X:�%fٗv��݉Ym7�UGb�{nu�qp�9���+��*i�;]q�Y�)��Դ�
-���x��/�>�x������h羵7������\{��]�%gd�9%����l�tg����i��켲s��	5�y=;9�gmO�j��;��l�p�Q�瑇m�n����wI;
-�á�Ϥ���G�Nx��U�DB��֔
-�w�:�Q��V���OY�Չyօ�׭����^�|Ϳ�����QE֬�����Or��'x�_��|ѽ?����KO:�^{��!;!*�g�6��Ĝ�r|�urg�z��u2gUv%�gWF:�T����y�%����/��}�������#���/<`
�>i�
S��o��������=�g;bS��W#���iq����<��ʠ#E��
�M�'�S�#�6^���Ѓ���UՅR�8y6����f��u裏X)�G��s
)�N�8t¤EѺ��s<4��������w��~�Q�A�#��W�X9W��,� <��0�����N�#�>����d����"qڥ�NLK�P�iQ9�wD�t�
���l�1����9�V�;�
��ɬ�]Jx�9j��K�+���^q.%&�'����65+���?e���v`�Y�7���s�7�m�����cŅ�{���YV
�,ޡ}���wt�
훭���k����<�ˤ�"�F|y�5����oÏ�?�6^����;m_�=�>���?8�:�9�������Ə6�V�5x���=k=��Qw���k2fuWbVZ���s�b����_g&�'���S
w��������Kޙ�1AIb�qs��������
�݇B������f�i�]�F@������_�|
�
�MЏġ�����)^���C�9-3k�S�L�:��	O/>
��c|�����/㣜��Q��k�1ܡd��x(������>��
y��1�Qc�
-�ͦf����4}
�U����O"w��
�����G��;0f�1޹쬤*�FT������
ơ�݆����=0���qܭ��ʎm�yg��
���h�wK�;�G�~�V�޸�����>�
�Xz�����o}�u�k��`�V�>x��o�OY�C��G�5-��������A|&>ͻ�3�<㞂k�iu����~��z�qȒ͈]ܴ5�:�My���ғ�/����_kx�	m���������M�(mX��)r�����B���&8�q��5��tr\ځ�cSʖ��
�f��Э���ڒ�L��K�FÇ�kM�
qξ�2�vt7̮��7~�=����h�V����K�_}��i�*��C�O;U��UѶ�Zp6z����ǝ�,=h���s�
�P͟7Fh�w�?�j��O0�`
)��Z�sN^U��ud�E�g�w+��
_~g�u�AϭƯ�S�j§'g��[�X|X����w^
-����/�Lj���rK�Y�K?���s40��Q�Z�������>�V_��k��_�վ?1.�JL(����O�?�=���s����ޚw�w~���W󪊏R/$%�7��姼�������l<������
u|���~0x��	
=k��m��U.<j��?X�{o��}����Y|��ɔ��]�P���G�ӑ[m��=m�j�y�W�O۾��l��f��C`��o���W�Ў�洂Ԥ�%6.���}
���ǝ_�%=WK߅�.�|-�Xz&<7�6^���F����Z>�]����jݟ�}e�M�.�glRP����~x�%��&���Ӗ�"��?�
���
�������3��W#͘m[o�g��k����ꓮo7(�|B�
z���g��qAI
jsk����Ӯ�"w>� ?������k��؜��5�j�;U,*[fl�
+��f}�o
Ɔw��5��K~�n��>��;P�ߥ�Ӷ_�Oz���<!*���������ꕼ���#+#����KN�/�'8��S��~��7�?����ޡ��L�Ͽ�\ [...]
-ݪ|?k��I�u���OOӏc6^�P�����M�O�4��]���
�ב�
�׼�����쌰�z�������߃�5G�A~�}bJ�?�^�}��������w��}��E�w8G�+��UC on���/=n��s�ʻ�K��/���[��aڑ��Z��_7�1N�
42����7��_�K���YW�q��_�d
��	C�o�������obPӁ����W����-��S���������9]͟�K߿�v���_�/N�������ݍGm_ͫ/��5�������9zﯴ�n��$��bbzUc�1��{�QT��{���{�"����"v�Ҥ�59�9�����#����0#��,֚����}�Љ�U���:H1�rf�o��>����������:A���駠C�.U���v/��>B���F~3�þ:�������^�Ŭ<s?9~����2L����a���q��k��蓡=��lu��Le���6b�J;.�8�
��y-7@^�4C��j�^(y��;�QW��w�����X~>-�|0�H�3%H}2W��t�1�UR�'�Ÿ��"]�,���E�Z:Qڃ��� �
�G�����d~�k����LE�6�y�� �7P�ޑ�h���/��Le�=�XY�q*�I6@��`n۝����
0 _ziEY/�lp�6�
���p�K-�
�"�Ŧ����H���q�ww�|���nK���
E�-4�?͉�_n���kFg�7'�����cg��0/*|�х�o�Rq�,��\k����!��<_��at����P���:�J��P��l��f���̠Ҧ��u��/��
=,�J�Z71J%�;�O|2�Mz���ݑ�o�
��}��!��t���ٜ���wJƏkjN�-CK�SCC��Z3�����{)x�e�L�,?T��w��M�P���b���<�����t#2'x�n
ͅ^�3�l��|�j�~�ә�aA��~���멒K:�
-��	F�e�1cB������o櫳��*�W%=<Ts6�_VZJ?/��f*an���7�M%W[Q>ü��9~�&h�>rv�J'⻜������qUF��nh�~���)��t����E�9]�L�#%D\V1���I�'(�7�İ�[=��\h�
xȇ�s���x4�
����P��TNK�Շ�<U��x�����iN�G�2B-�|1[��~�2�Y?&�*�]�:K>\X�N{=�I}�G�u��1Ѧ!,�-%� 6<WZr^�9q���~�:��՜h�Vl��Nl�{ K����
��L���;�����n�Ȁ��a����n�}t6tWBL3b­bt����~i�	�gЉ�]�'����Q.�<����F.6}\k+�0���nu#|��ԗ�������c�$-/↮2��B]�K)�睹��G��Ocw��m��6 vsN2�@�X��b#��x}��$=�s���9���Uƿ%&����ON�7��)+�
�*b��J�L�~+-oV��o6�J�,�A}V�J��|�]�)0 �[r^�r^�ɱ�E�>�&؉�͸�'-�X#�3
@�������z6N��SW�5���lC�[6�-:��_��y�`��Ĵ# ��dE�+m��g�!74�Ȼk=%~
��܂���б	��4 �
*�d��}�ږ�QB�v�Ж�q�&�׻J�W�s���C#7z���C�۝����|c�{F���������2@[2 /
�P��d�6㙩�u�FF��e?�%�1�{�a�G/��\��y�R��2A	���b&��qz���Sn�䡷�QA at F�4[��t�
wkQw�#�c�*�L|�،I�
i�o����
-�LWe>���RT at _S�m���O�"�z/)Zא�t�!�e�9󹡹��N76`��VT|�xXW��b�*��j#���sI��t�����@�wAi�uZҷ������y
�h����b��.8��J�U�ԇ�j��~Zڣ��\.�Iq�0�����-E���b���D\i-��k�p�<Z��*����|�.�dl��,�d���\s_�Te=���ߛf'=5��T���n.�����t�e�\���w3���}�������y^��ȧ�C��,k��t3�M@�	<��+�Bl�¯s���Su�	~��]	
�ݏ���Y�e(��
#W��d'?Xo��FI����;;ݰ�ar�f"do��͓K�WG;�%�+�i�NԌ2'�ߖ:˽�{P�
-v��85��jC�ۃ	x��4*^ݐ����~e��5#*���o���.[�w �a���}.qO���7d�Y�(�˸�[}Ԙ�>��f_��͞�Ǘk�������uQ��v^���?繌�|[�H�3NK~4BL})�gz.t���~�
��>�
���
�l�'��
�9�V�]V�^nvCA� e�_O�uq��d�d� ��\e
����Jf�q����~��C���D?�Vf���g�~�(�&z�:�e�!��������bGI��&X�J���p��t�!� '8��(��,d�.�U+"�F&���?)� ���&&�
(��������O
�i��3_:'iE��K]%�
㴜]11y���e�a�}��v��$�*���u��AN�B��8+åyu�2�ž���\�lF�ޕ�&1�ދ	^i�{�ܐ�D��~$��_\24A}LbB�VT�j����M����$ƅ��Ue=���|������`�
;�f�0�%{w����u�Wf?Q�3
M����(�/כQ?�#���܏��/s��Z~�=}e�Ck?�CAΘm)ѷ
���;#�C�g{��jS�K
C��i^��Y~Γ�V��V��dN���<LI^l.���@�Z�q�a�� *dw�\x��c�jz	�����B�]�l؟&�Z�̻/���M�#&1�GJB�CF��7Ã����{
��&��0.芆~{g ���~s�"偱�t���~�؃��=�%��P��S��
�ݕ�f^xm�#��/-� x��ٺ�7;#����K5;�����V7���n|��������y�W�qI"����4��I�@FN86�!+�4�{nw�/Ԧ<��(�b
fe��c*k
-|���4�
<ߘ�ѕ��4T�՛硯M}��Y�?L���2t��v1V [�)�E#�0eU������a����g�Ss�T��-�,��!n���o ?�[j+�Է~�i/�
EgJX	ot��g��"?�pi�
<E��hp�Vi��(5��Fgi����.EG�˾M	��M��
L��
Mp�_��"�5y��������E

]��V{�����p�<��a\����\�]vv��t"�'�p��=��fl���#E�H�A� �M����[n
�����,7d�֋Ҟ\�{��<PS�c�إNB���F����v%�Ƚ��ڎ@��
8%f�Of
3�{�;��ˍ���V�ź�w�s1���.6|X��I1���؄K5Ş�!|ԮiFo
@�����~�[��p���N���x�/�y�/fx�w{aR:x�>W��+�@k�P�-���
�>����������b�����S

u�\Y���Rr�J;���
-���@��a��#�<�%]�N��Ԕ��:J���i�w_�Jy��*x�օ� j*�HUA���a
�X������a�jO��Z��P��~䭭�@ka�vYz�
�k�|�5 �t~�
-�����D������y7AO��?���eC�
v 3;�ڳ���%eA�rP������N���)&\[��r���RK滩��Rv��ն�O�*Z�<�+K~�W���*m����R}�c57���
xw�/�c�,l���>�����N��G�MQ
u
��ȑ�����-Y�[��8dȟs�?	7��}� �շ�]�
-��֝�qK\�5T��&EDZ���\>l�ҏ4"�e����V��U�=�Mt
%E޶����z
k��W
�vw���瑖Zl���L��&1�������C���@6��+
-�E?2�b
���;��
�P���$��,1Ǯ���Z���x�.��H�D9&��#�����zة(�a�����b�wS4x8C�G
���kZ��D��8���h��q||
!��`�
-픰!�Ԝ
��8
��
����̜��.X�����bo�`鷵�܏;CY���QI{
-R��,
i��go
��Gxys͈/���n��n�A> ���Y�?�	�k�F�
����9yV	;����87顔so�6��f��4P�/�dn
�~�Z
-�(�0��؜�:B
�=Ί}؅��
tc���6^��m,��>% �
���_sD𩆘�@Ů���V�S_�����Vj
�':&����*��5u�2����
#��83�Q'�粄�`��Ի��PƊ{j�G��	I�^CO�XeJjю�cU�c�5|ʾJH5�2r
ݘh G�t�=O�}&f����8X
f
�F9�YP�)AS��x����,!%�%��v4�g�U�ҭ1�O����9�<�T2a۽�_��/�ՙ�[
-?;��,@'sբ�rN����
�fo���ҟ/��}�!��iY�q!�"�f-��~5���9���{
���OӢ�W1�,2T��4
�;I�,��:U<�CɁ�%�hC��N_���/����B���3
!B�d��"j��໊�"��ޒ�P���X�F
�T��*!�1Y� j��&#&nu�>���gZ�~kC���^L����]6u����rK�'�&ҮĦ���:�6��v�3|�y��G��c}�M[-4���
12h���� XY�q�%��p��jxt��Lu�I���K��v��
�z�ԑ�Bߔ���%^��<�z�G5.�d���@#��)�e{rV�e���3@�Z�%��b�N3�_��
Ds?/o��ц
4v��#���[fӲы@���ߡ�Ujc�
�
聚��O���
-B�ij
&FŬ�Vt�M����f;.`��o��XĜBC%V'�����E�Dž��AR�tu�+U��j&�1�B��
-��1T�vO��J[櫕΢�{
->z�4_��|�
�d���R�[nB �I���>�C�o/7���]��;�_d-��*��
.�ܕ�R�fh%Gj|�Bs���.z�E��]�c�h���
ԏ��?F�{4�L���
�еbp
#�����{V��S`./2K��k=�Ϧ	x�CC)wh��]9
b
g����`����C\�;��ܔ�2W��)�e
�E̕nZ4��6�ə*���2�
oQ`�,J\�s�^�X��2kZ̓�9m��<�8��vNR��{ �F��[�0��~d䡚G�וx,��64y�p9ǚ
-�S�,[�ED���_Z�Ԭc]UՉ^(����;ð��`ϩ��w
�����/��v'�y�f�S��v�ԵN��F����W�;���W�	3$�$��{���Q��[�=ŋ�=���;��u�kHs�O�Ɲ�x;�{�(9á�e�&�J����R�1��kj^����|7�(>��Y|��Ul�&�hi�7�Y��зe{ϵgzn��b6ƈ��~d�����x���z���a����ش_+|��<�k�b��!�%u���Ua�	��>��%�x��,�<�ɶ)g�\�SK-��,�h��ěGq���ڊ݉j�Q��[jE�V�\�e�ݴl����p��?�,ʿ=��>6�葦nF�r���0"h���,#�\͵)*��~�a����EZi!�mt0"
-̈�*�~n��~DֽY>���]�i�f%�ד�&��׫|�瞤��%ᗨ�_�[�aU]��0l�Α���7�_�����
ܝ����Ί�Y!�s���R�1�V�9�`�vA2jC|6C��Y����!N�q�o���)x$�T۰S%b:4�bs���������Xh��*s֚h!�]��^�Z#|���� �u��_^�x�G�i�l���m�y;����34��b���b]�S�#�
>/�B�����Tq`K-����v���ց���y c�w�`}
#`�E��7�@��M=�$�0�9�S������>�4��!g�m�i�V%�d�2�#�)إ�C�Э��O{c��n�r�[�R���3�.T�"��muG�v_�wC'�u

>���8��i9���'ŶIJ��,���e�O�XX�xI��P��J;�m��9�����>h���jy�O�>fᑼV`
�-�s79z_R�]�b�T������Ql잒9�f�+��°'RV�
COy��Tm�9Fv���Ԋ�Z�$%� 
og�9@7tNq�>N��>�����M(�V�ǹ�̏K
y>�Kܪ��
���
�d��ž�V�����,;^��<^f�7%�?�����s��*P�����Ū��t���������Lc�/]m�m�4z�5��rO�{�{��į�cBW{�)����=��m�������0�!��_H��
-x�
-���M��+�@�7�}~�!��U9;�ug ����{�C7�)9S����&◉��q
��0�SrOɼ��I�
�����P���''5�
-%6�BZ��__�b��^l�e=k�'=Q
-�=���I)j�&D��?�9
]�D����CB�jÔ=��]e$�\BF�_,��v�
q��~��w)��
�߁�^��B�=��/t�g>\�`&Y$��]y5ck����X^h�Ξ����/zА���Gb"�} ]��Y���(�NQ��E���@/����}q��q}�V�JS����`����Sf%2�Q歬���-!h�xkÌ
)��U�r�����jܫ�$�#5�**�r�����p��Ę�+��?�Pq�*�1�@;u��	|��
�-� ��Iʆ̷���5�	>�g�U�փ�|.ȋ�
�z�(,��kW��w@!o�]�&�=��&��ps�
����):�9�A x6Jh�;b�s��:�q��)J�bg���_�l��3S���K���z�{�u�w���*%)�
-��K���^H��tz�:7��� )�1�#ڧ��m	'��c��!��Ե!��z��v��	a��Vx֍
���;���+���kQ���p���1�zp�
-���۠�@�?�x�!����Yg	�Ә̕�,omK������V�U ���v'q��Z�M�.ߑ0�ׇ�EMy��8�3-�fUn�utt�� ���h�1z�#7ㅡ����[��v�+R6���(�{Bx�ZAΥ��HP��;��]��;�A
=�ztt�ʟ�g�n�B�^�r��/����h��Ϗ��|���c��X��m��Õ$�t�
^Q�FN�%hTȅ0�W@�>%{��r}}@A�^��
�Ez���
t��eP���?^�G]�kB~�ԗ�g=��D}XjgEMֱ:Ȥ���5xrʅ�?@�>�A��_�^ݹ	���1(��s�W��{7�����uX�
���
8�?d
����w� =�0*BM�s�ƪ�^-��V,ҥ	�M�L���!��
(��+(��������؏��o����Ы�7���͋�s��%GFZ4Ȅ���/sM��h�F;��H
��PŷH�	����P
 B��"�^�>?} ���t��5Н�.��ܿz|�Џ���`f�
-?�Ƒ���>&)6j����r'�oL�M.�_�@��]*	e�~�~z�t�z�.���]Л�w@��]]�t��x�+��_�����ix��ya��
�t��Q��Q�+'��
�#�
�/MH�CTt䟘�苙�> χA���x�x��������
==�~
t���g��%��3��i�p�7���MdW�w'���QF����� �ZU�~��I腟�n ��@ߞ���_�=�w��e�
�=^��q�/�������JX���yo6�a�Gs4������ c歎���=��ɚ��bN��A:ܣ�s
�󏄯�/|��9P! �xpt8�{@}'~v�F�^�%��\肅Y䥑��<�@%�m
��>Qp����Iϻ�I�#���G���{���C���/@??�]¥f�i@�����;�
ST�]�E�*�
�bUwm�pmE at 5��̸����
e��҃@�_<}^a�A�߽��/`O
�b�|�����bRȽt������ 9^ׅT��>O�ҾO5������x��j
�!*/�j��'(�����=������t8�� �{�@7��
-r�q��=�,,�z,���
j���YI�>A�����MG�V�f_��ިB���ff\���
z����3/������@�
���ܾz����;\@??{�hY��|�[�$�����WQ�K
��,
-r�A�ɟ�eƍ�2�Uc�.�	1������9(��3���S`���n��'��W���w@
����}/�x}�T	Nx�܎�ؕSs�ĸ���Хv����8�B��f`_a����
�~�A	�ޠ��^ ק���.��\���c���n�{7o|q���BVȷ�bv��CI/9���<��
��0a�c��ɺҷ�z��jD�CHXȥ���@I�� ,���X��� �O�}��&�1��O��^<|rs}	�
	��
�`�����M7I�6U�h��
=�M���"�h�?�'E\
-����
���k�+����^pq��������_�3�|����9� ���jH�=��k[��+���9zw�OٔW��S�5k2j��zÇ�^A�G���q!��7� ��/@�/�	zz�&�O@�=��2��JV�
<��BgY��1�uf��"�!{��>�5��
ۭ
C~�Id���/Q)���"s����w)�����XyMo�|Oek���#�$؁�g��Y�k��&+1�n�X;#h���������5嘧�X�-�Z
[|�{��y��p����ډBzO�1�
�����R��!l�Y]��Q�膱¢���
�+"�����IjEq
��H����[��,!�*$<󲯻'���@-?=����
|��
-~چ��h�K]��
)��,bL�B�� ,D�ܯ��]�r1
R�[;��^M����%�_����
-�N�; �������b�i�!��W8��W�
��vR�]]I5�s �I�H#�>���ݛ	LS5\�pm�`}c���{^��y-���pwoP��0��Kw���w at 1_C.#�a.�R�[��}��^髥[
u[c\���<QQn��(�����~����]OC���<ȋJ��
u1����
�v��\������:��A��[
�fZ��2������s��ƎWDm�KUM[j6B3@���c�v��o��W�����茌ۥ)�w¾���������bB�����/@�Ү�ˋ]'�ɡ��
-�UVð�+�f�xk��=ӂ���ŭ�א��58�
:-�j��ϕ��п	��"��z�y	����Rv|�ĸ�ۙq	����|�]7�3Հ�.�e=Z�*
>Y�/s��?�ݝ��ښ�ue5]���!"
br������B��(7,
-��p)�?�כ'��`���ܔ��X��A.5|a@�0�+��6ڮ�vT��ۀ��
������z�Q3-x1���}���
-�
��l�4Q�54�R�2+��
�O����6�M_�h��v�R�Z�_����)+������9��MX�����
�]K�����z�v?-�h�
?���V2w�t�UƆ9��
��Q���nS!�n+E�-ya���h��,��O�4i�����^���)qTX�E��הB� �/'*��և	vec����~OU�ߟ��t\�ᬀ�7]�^d�.t�~�s
-�Ǫ�˃U����TeWS�d{s���%F^W5.��Rq���u����^
׻OT91�P�>YM�(y(�$�#���u��Z$����%3\�
�&�'j�9�
��ʟ#��ْ���zƵ�]�_�����ja�.���yV>զ��8��Uv]m�m��cw���`���
Ȁ��4�i��b��-e�����Ff
:+�
{�-j�o�U��[+*<+D^������e�Wu�X߷��
,7JW���U���&l3,�����"&�j�S�T�T5q����%�ճ�5%Sݔ�AV�x3#����|����9�V��e�NTb�����,TT
i�ȭQt�a��%���"
-p��%)+[ߍ�"�lH��z>H��5�N|0��Κ�Lt�Bd��ة>Qኤ�n�l��U�C�huU���aȷ�.�l�E�7G/�UQ��Z>ec��|QVY>�[�>�&��h�M���Ô��e��N�v�	�(�%.���	�K�(?�V at 3�y��n�w�����Z龮]q0W�e��T�T�+�
vƈq�����!��\��t�(%��e�h��M	`u���7�F
�E5V5�̩p7�&;�k����w
-�jMS
�q���6�
ڔ`�ץ�,�+��U
-����{��vYУR��,��8�O����{�
ͻ�|�R at 4�x��	
�$�f9��X6)9�2D���'D�
Pb���[��0Z��
��m���~Z�M�+;�2w��3�*���Z�'��^�
��0Kw'���[�#��OW2�5U
���sjjj,�u�]U���KQ|�i��f
#&Z&���>n�rW�6�;��R;h����ZͰ�(��=vw(�I���"�4�`Q�){s5�����uMC��tkφ��gCY�Z
�D-��Y
zGɆ
���9�L�g�_��mn�yD�%߮���U� ��C'��#:�R���
�s�Qd������qP��3��F��e�JZ�1�+����
�G
��]

|�P�v�ܦ;Z�鴨酀�b��k8�iV�c���
�f�����*��{�umk��0}+��� ��ne�d��S|Ǝ�����x�4B@�4z4/j>R#��P�
�5��˩�GS\䁊S~�������
q���@��Վ�g���w��CWN��lU�~�ǐ��0*����fձ�J��e�
�� )?��de��]<��zU�m��{�	
dV��{M��
��:

�膤<Tך�i���c���X���a���<���:���M2
�����R�͡�/�ׅ-���~��s��j�uh�����%9�$!�.6�|�*�]��g�K܍bR�e
眦8�H9v.�@À�OQs���;�oU
�5K�1p��瘧)`���`��㭓�
Us��?���bu��\c�S-b�ʈ�&q��YR���v���XӋF*�|v�1�G���}MS�s��Ŧ⢗;��o�@<w��;RJ��
���d��+i ��'z
�|���,>�2V����9��
�j����L"`W�F�k*+45u�S��=�dk�#+?�f���cU�Kw�B��Q���P����D�"��#�Cmc��,
�-��o
!� <��h	���_z�ע���1%�.5ˏW�������cW[SgTҠ�Ir�M͆��V�X��ݮ�9�q{8�@
��!��0��s����|��B�+Xv�l�|غ��W+x�.��{jr�j7������*c��;���w�h�eAݡ�n�A��?��_�
��
�lM�繯'
�E���C}��t���-�!p��3L�SE��{n
�~8��#6�T�j7���)�P���VT
o�zNV��-ZZ��)�meS��X۽5A�&�g��3�y�f&ک@%l�e�
j��9�h�)���:��jgλ�)l�}�~:G�
/T����GѮ%yf�
�+H����M&iq�;E.;^�՞n��L���
V��i
S���g�$��)9%6~GR�m�-��QVy���
��;�.;��n�_��jxx�$1mw�,�>^�kz�e��l
-��Jb�������;�Ե��+��s �Rt�q ��[�f>�7{�F��|�U���,��3X��
GG�t�o=��_C��lQXs8�B���->�U�L����7M�lI�1�%/�Z��j��|�c��e�+��`cΦ+�v� �n!�w�S]�{�ѿu��}5�+g�
-����v�|Oç�L�2��)O���-2
۪�cljB�M����бfYY�I	�N�7d���^|�E�g
/���i�*8��qr�ER
�ޓ��8���>MȘi+���	?��k=���S�M�,��i��qt�]�K:�O�	�����
�v��,��T��{��=��gzb��
���S��P�п�mS
��8�Ȯ	v�D
�g��<�u���Jl��|���61mOK�>�RK��jZNf�uOa�7���5��G�q�sl��,�
��x�Z|~��,#e��W��^�
M��h��vlhT~J�v��_�%a�zR��2�x���
��%�x��ɮe���B>��d�G98�@�I=����s��I.2v�g��s2B�E�H��q�V5.�6�K<���
/V6u�gV�{Z>�l�K;������2׺Ҟ���L	�ޜ�Pa{�<��)�>y>놆?�G����!�D�b6ts
�-�GX'IyG�
⾖R����ٛk�
�Tw�	OW����Z��KX
��:Ք���1B��}��t
��|U�/C���
~��
�ة�/��9��w�\�UI+��@����J�_����-�o�Wo�d�k1.����O	k~�y�,xw(��FK��R]�����ϦQlԠ0�
?���w�����V�f� ��Rl�� �8�����s�uh�ȿ�*��t�E�K2+�
>�PC��W�rvF0?�#���>f�}���/���ĸHc?�]
-�Y��1
@�ֻ�^�%��v-gs���2��Rrں�>@��
��MpJ��XH���{��ӹ��_��9�U Y��n'&mI���	P�U��9
�
t�FTu8[]s6C��i1��� ��<xG�
�#���t���æ�fk���,��k���..yi 
T��xb�G�O�k�����r�]�L �?ʦ@D8m��iM�.���W�
-#����w�d?��"C�������i[C�P���:W�ud����q��i[��IF�YBJ
$&���,������wD#�O�: /h]�a
��U�}8���Z���R����?k��
���n[�g��z���n�aߖ�ʼwF��ۣ���i�ל��hZ�8�p1N5p~2D�l]ړQb�ݭAR�5ر���jQ�[���������l����r0��"�lM��b]�u���ܑ�n���P���j�u�<d�&鱜w�:O�8U�H�h��
��ZӡR8��y
-�|>��=�w8���Z�"��Xx�4
�
f���C��Z����e
j�%]��G�nx���&���s�#�d�,"�9�J9�'�g��c�� r�`�I��V���9�
��XK/���x��ط�t��i��h�U| #��I��[
Env�
RJ�� "��y�"���[��`{�>X�:v_�x�������� 
��?7
�&�c�8]�U ��:��}����?�mƄT�]-��8�9n����Bm�s}u�������U��,���lRJ�T<<?��z2��M�(ޝ����؈�)dw

�֛��,-	:�e�
J*�.֞�
-u�pIӨ�c-2vO]
�1�]���8Ľ��^��	�\��41�PE)r���)b�U���ņ�6�_o�`�m�	��P�}��,A�J�X�w4AL>��J�g����{��Y��u


谏�ޛ�T}+PkR&ެ``w&(`�k����pWA�r�h%�	j�M�O �:vo�Qz�L��l��P_�~�PUmQ���2b�f/�WÎ��?�I�5[Y} p�SC���� �
���c

eU`RMrlƮ�9�W���y�ܕ���K�#=�dOS
i��wFa����`���&��9'�Y�c�X�$5� �lv9�$A��
�G��p)�
-���wk���{�^z�Xռ�a l*\�YNN���f���;RBҶ��n��
-L���M����N��zK��yk� ���lJb��UA���u�'@�L�EYlV���-�
�YcQv��y
�����G�/T�
 ��lU��{���h�\����l
yͷ�}ܟ�puª�y.�d�I�k��U��*� ��"�
��	�l� �/�2t��L���e���h�O9V��5��*%�9���^� ��]LJ=�3
7ۡ
�>��j�C)����Gߜ����%�Ͷ¾���{%T�I�.��s�G ���Ue�lyu���^d����Vw�� x�QT��*�}��M�T������ԅK6�Rbf��O��iw���{sUـ�e?�K�?MbZfE�G�����'{�
-�YA/ߒ bM���������P�piؔ(���$����
hQ��q��i0����D+
-��ޞ��@N/�Lp�W�Ё��1��rq�Ӯ��ŘН!T P+�[��_�չ�
��C�p�C �o
�~�w@<��r?�F��;9���R�Of�eSLԮ
Խc�1�!c	�'�4��]-��,�6
��渄3 _����AL�u
m#���K��”w����N9#�	x�]e��P �z��:x��f�:�s�<�<��*�;��y��ҡd 
��!��������v��\����Q��y_��ʺ�E�|��uj����rx��6��u��6�
��3�'�7��Q��§�
�����
=��NZ��-1�����i8�M`�V +�iX����������1\��1թ��r��6lʘ`mCi�BC��ML���~�Jʣ >�5
��Z�q)��t��<|�C��k�{���8&��^���Ӹ
����!
F)&�1�FۧXe�s̳�ʆ]56�9�Nڝ�$8T��C=�oAG�k����V��Zu��"����$�ب�!T�� 2ܮ�������$��s�9]_眪@�h�G3
��9�.GG��<�¸���%_W[���{�A���o;� 
��b_����[��H��k���l��á� [...]
-��}�7�TV�?���n����4t�
--a�
���IwN���
- at 3�ܵ���z�����;�if��0-������Zm��h�ǝ z:E�%���&ț�T�MBL��I	;���>t�V��|~��
�7_��.c������¼�2J��~�]�X���h��U

�5K�
T����n�y��gs<ޮ
x:Wq4W�ؓ�q�5�u�+��UF��
�'z��ky,�LM��W�]��5�_/j�I/���dԛ|�ǁ�B�9BJ։ �t��:~�]-�� ��O]m�s���;&x��m
&��
-�1AL�W�b����sL��,�y:���^�WK/=֑�Nt��)R���l�%����;
�/�����[j�ņ�1��q|�E�K�����E��VgXm/	�L���|��O�y�C
q:+`٧8ȽiF�鼰zVT�-��v�����J��#�)'&�wC��:r�
2D��
a
.��E�,�$���@'�^�h�Y6yy�S�I4I��Ob�ȍ6<fk�V�Y~����,��,
��R��h�@Ƭ
�~?��rN��f�Eu�˕M�K�m�z at KuL�y

��D�eU3���
��{:��x��ѩ�Qm�8�
���{�]�n�cR�۟s
�(�!A_��ښ��8X�'�?�$ܙ��zv�bbO�+�rR���s
ܖ!"����sL�^��V��q����Rr��bc[B���E|_�,�\��y��
�b†Ud>�'y�q��b���?�[r_��d=��翙e>�Ug���x ��>��^�FT ^��;A�3����v�„\���|�/'��
-�V=�H�(=����<
�����w�9��)��r'�{���G_}�;�.8R74��Y��ķ|�uV�7�0�۟2r�����h�E4!�o���F�;�g�y���SW��e�^h�y3B�~�؆I9�����\�{3?9���
Iq�i�$�H�D
�X]��A�Kw4S��{���d���
Dn�#MC��_~_�D�R����9�
��r����@�K����<��3�-7�znw#�6Gi9��/���?��a�uU՛�Y�U�w��F!޿ٴ��
-n/;է	����;�t����Ju��ij�
5��FS�3%9w�
���aQ�{����g���3¸{-ş�)�?\�fi�}}���=�(�g��XU�{���g�Vf/
�
���� ?`��e�`Xd��5�x����N��d�
wG���<��4�
w1JJR���o
�ļ_��9�g� \��W�N��u�aa*n����L�C
�7��[&�-))�1͂�8����.
N/q<�IsN��
ZR驡z�`�_o�R
-��
���,Ǧ����N��$����(�=mU��u�����
��H�+�,&Ʈv@�4��WV1
b�D�V&?Y�I~v�
A��~j <�]��8��q�
-N��%����#
}6O���B���J��.b�G���F1Q6vM�Lӷ��9��2�H���e� 
/&�17'H1W���T17󭊟��!fq+ͅ7:�>�$��ٺ��jA���v��_��j��s�5��rW��R{��ZK��]�o
O��RB�q����BMǿˢ�}
�d�
�v�=��jK�
�/���);#�x]
��v7>b�Ub
A���E�M
- �롑��9��zQ����d1���ʔ(���4�Xߘ��T��j�
�����?��!%��2�I�J�mJw?�q鿖��N5��5Ԃ��~�
-b�� ��H����R�|��R�4���i.�PM�ߛ��o��:�����
�� 13��
���
����,��s��c���IS�y�E���!
->oOA�N
����f|��-	��@E��d��U�j.s�?�{.����+�D�щ���2
 >���S_U�>FN|\��ui��+��})k���q�k�bR5���n�8G
�����������l��>g��Lg�#u��+UJ)�ww
B��ww�%D��@HH�(����s���<�s������p����ν�Zc���VZg�L�{�4bc(��D�S�DE��"����YZAPŁ�����yo�9 �tb�
��Zw��#
��O+_���b1�o��G}Y�C:l��(����`[O1�|K�	�W�'k�`OV'��As�̾�s�O;��A�7{r��v�^�v��
�jsv��S����z�I�e���E����
T at G���՞������<2
xG
\���G
�Y �4�s���g��@̀�%�O�Ի�
>sG�M����'v�\�.�9d��

��
-CFdf� �
?L�������%�E����ἰ"���%9�����ix�BC�%
'�APy�8DHaV����xsg��4�W<ǽ�i����>휔�����@M�E�p}���c
-��U��|
-
bWE*�U�>�g�_�Z��:���_�

���B�`��ڷ�iLfP���KNU`3\����	�R�g���41{u����W\Q2�Ψy�5��C��s���
�C�q+}зa�9;��$1��Z{��/ |52Q
,�y
�k�}���|��=@\q�U>sL�^�&�A��X��]#�U�w�4�Ѣ�a[��dﭸ�d��4��O/wV<����� ����C� ['���*�T�
]}�-����r~����G,�xdS
��Z�ծ�=2�q����_�lJHK*	��2v�䲀�KrLa҂
-Z�1�%õ]}Rț�β[]5O��S�}������-�1�iLrHE,��Ҫ�
\|H�/�벝R����G�
�WK�@HM�m
=�+�IGF:
-�V%�
��\�1
�Q�gj`���+@�gj�~��W~/0S��&lOA����_��1���aE��7G*�l��� ��
,P ���7�50O���oz�L��ܳ�k�������\��+džT���s�_��!M]����x��,=�0p�� �.�� �������Pˍ
E�
*r����=K
�
�6i�+��P�m�Xe��-�G�N
-����qH`�A:
�����V
�
���!��k
r܎���1�Ї�� ? ~O��¢��T��妁�Eq�g�ov����Ә�0��� .f�%ް
@>mM�2g虿N�����o�:P
cԒ�)r��<�*�'fM��q�2������r�l�ޤs
͟~�1��R�
y@~��هj#����IJ=
}���y�A[c�'�D�k
-� �]���ܜ��l)�}+��(&�����o[�b��g>��<7���DЛ���ǿm
�3�rf������F[�r��q>\��b~���f�w]�
�_�;���
=�����?[���;��}*l6�,�]=���ðW����2\�_I�ߜ�'뛫��bR۞��
�(0]{�uMs�)SW�aB��!ԧ�@.H4&�4��@~z��ZoE��ټC��+Ǹf�"
-�h�pOs��Q
Ą��2RɞN�p͠�m��w-��d��󢢨�=����QH�m
�*�:�%T���u�#5���ʻ����«~���e
w�(�:���

��xY���]زo���Z�nk9����nygqi�
-v�b7�UHçkB_�-{�Q�����rR�:v�������t���⊧��Fq_��z�.��_���&D�k���Rg�sW���+��
snjW-��Ԓ����c#��e��;�R�C
-X��H��L��?�6����-���D
�V6uWC,��=Q=��?/�{��^�؜%e�Ԛ��>��	ؒc�&b����VO���
*;|G�Qugs�V��� 
3��
6�1��sIq>
&}��D�[�;f��ZG�--��-�W+_ ����_XRK,���~���5�
�w�v�#k[�]�0��K�H���"��H�F���b���rc������X�;�Xٓ}#�2 ��
�l[����쀆]�����4 
�w��r�
-����{�������
-� �ֳP�^]�fJ�[��7�T�Y
FE��X�M��M�����"�S���,9봺�辦��Q!�W��g�Zd�y�ؔs�3�Z�.~dn;�/ztdFf����ǭi|�I�:0����
���Ez�3�δ
����j��Քr�,���
z�ςZ?_
-�ejK�8
uz}
�2�M�F����U
q��%���
-���G�ȲռЊ���m	���]J ����ȡ]j
�<�����1I�#��>Exd�Dź��]@�i��}9�64˄x�q�ra��QR���<�6��R
-s/y�0@<DX8�c�u
Ŀ]���5C-
h
��U���V��ȴ����a���a��p�.�Hm�,3���2{m
_6�*x�d\w�����i��tЮ�Q�>Z��җ��֓s��D'
����QH��Hѝ���{�
�w�P�_6B-�O�{Kl�(��e1��畖�#���@ǀy$u�-��u��+�����^㷛���bH\`�y�h�y֯���
#�:���(&uWGG���̽p�w#��&�$�D�
9�
���Vpe�#��<�������A� a�KT��.m��cv扥��D�g
	r`e���}�P|�$�?\�o�bm�
-���b�
�t�߀�
�%
��0��0Hʾ�P��c�L%=�|[��oZ��~�$ǟr�W=�̐�M#��Nr��AJ�ō	D܎�����b�	_�t� :�9Ǯ�(�#�4�1�5G,�� ~aBf��B��e�����i{
b��Rs��R}��"���
-<2P�[V��'��\��$5[�����M��M8�]��T+(�	B�ys}��4�@�P��
�|fm�T○[�$�$2����H+��.�rB*ܭ`�W��&l�H��yA�ԯg�5t��"����
������
T�o�
�����fe�L�2�>��������~[F&nN�l��Yl��(�e����d�[�
�
-�#q����������_W����"
�*W���,"�5[��Q��-C�8�N���܃%>ϧ��Yz
-o�8g���{����ԑ�ȯ�B$�G=���G �

0����3~��b6g��.����_�g��;\C}_�B8��ẦZz�/}���/vW�nŤ_��s�K=���Ȩ��2n}(�����&������'\ce����nkH�)2
�w����_�<���L�_�8�$/fu�(ru�6�����,�ȡ.����
k9��X����S��Vb�����(1���
Cs�A��M�&�xGˣ�e�r��(�:\A@�HwK`Q�I�{��#�M�7���Zs����:K
��k_m
b�e¬���V�1�Y�/2�`[�관�PtF�!=���<p�$�~^���2�kv �sk5�>§)z�=K7"F�-}<Z����Y
��FX������(pً�/uR���~�+�eG��ZH�)��,�b=2\��$:�+'�N2�m�'�Yx�(n�3Pj��X�㛃���
��}���g�B�hIX�������Ɵ$�n
�6Gp䢊�%�o}����?F1����m5OV:�
Și(y�'���o,�2� ��b6%�M	�uP]���NB���k�lk<��w���=a��
-[��&�?�6���[C@\�j(��F�p���S�j���p�v5�pOI/w��c�;K��;
-�X��w���S�����;�u�\���
�0�%z���v�+ySի]�p��&l�i�En91g{�Z{����
�S�`N!ce �ng�hKj�W��Y
�K_j�x���ۜ�e�g`�[R\�$���-����jj�SF)�hUA#��Qs�9z�W͆����%�,�
y��>%��5���
�}��y�6V���@���Jq�%�`U��
(�ܓ|�ԑ|ee�ꝶ�$z������Wd����w��x�L䱥y��B�
.������$�g?H��~�
������K���!|�W�c|�t��ci���*��
_��C$��"|3�—[�3/ 
��N�Z����͞i\������"� �w���k}%w�=�:k
�t`����ֻ0���s�ԋ]�׿���ο�m'��	�8.�1M����Y!�<���
-
-ć�ơ�����wl沼2BΞ������C����-9���z�i2N�͆�'$؂��)�9���u�06���v�\CE[�k_;�kc�,�o���Ҋ�jįD'���,4Fݘvm^�y�9Q
��B�z�ȶ�����T�ԃ"��j�)�_�=�M,�V��V@��76�T��=��<�
O:�T��Eg^i�L8kiŦnN�
Vz`�W��"��)�g�W�s�R�
�<���#f�Q5��o+d��;0�@�����
�%6�o`@�
,䞹��`Y�p��mzo��ko��m
X� ��RwգŮ����
sQ�ͺ�b������ig���̭���C��aR�����>��<s�
K_�#�`գ�p


�
������f�r�̡z��p�����H?�[�:+$�7�c{o�
�5b�
���������r\��84��Zrce�QP�-�F�WfE��񾭾?����
�g�V�|��,n	�۷���%�<����[>/�jv�}���"���Y�R�R�-5��OM�wv�$T@��uJk?�G@��:�n:�y�R�&a� |I96��U��m:˥�&l��鶑�W>%�`wIķ��
M���:>���V���f&��"{h��D͇FO�ń�<�
��!C}CP�Ay�Y�m�K��
!%8K��ϑ�Ө���������
JB$��Q\����[���kc��3�������iB��
��ڋM
j�T��Y����
X�G���Mn5���x�h]��46UՐs=8G횚:��`<Rb�bsխ
��K_#��_�G�H�x|��R��s�
-L�_��tMA�V�
-���c�)iQ'W;˟mN��U
y,�ް�B� ��k^�;^ĕm͖?
�1q�O[�ؿ�|��
$60U�|W	O:021�@�t͡3��o;%�2���ѷ�ވA	����;).�𛹡��f/��k�؇��e ���j>�;Ń��_β�/�7�ݳ!��-u�������F�GM.��a�j���e|^�
�$®�� �_��jW�'v�ŭ���:�H]��|
P�>՘̅ndB2ㆶ	
��Z�k#$����5Q���OW
�ċ�P侁�Qv�Dr�_��
cA�uM�A=�t ��
-�lg_v�ʤ���56)&e��}��.��g{����}n��p?�����$<Ư"�l��7�?��$�Y � lS�
���T�
n5l
��mI�%!��W�)5�QtnP'���
#
��,l
, �M�Amk9��krk�GY�P�z
ݡ�W�7@��#�.cR��u��V
-�n/���mL�򇰟λ��y�t́	���Lƾ�F
����p
%f��;vM�}.
���ӳ�.�̡bB� s��ꛀ�ݱ!�W�OR��-��!s�a��e�_m����
���ŵ9f�\聡��ZA�q Q��b#=S�$�("r}�������tJ%ȿ�ǭ�#���������$o�#�/����zj
l
U=q��=��� }����{H/P��=�V����[w
B�Yܴ�(�XG���Q2���y>��=�NX톿��J�NS
�su��
9��Fp��&u���m�膶1��0���	��
J�U{�;� �U,񔵍Y�4�B*rف����KޒT�t�TE�i��##��S
�����i������_��C
n(|�6X�d}
-�&�8?A/��>@��wÞ/�\�
-��M��o?�M�{��yV�U)��>���[WY�rWM�}��R\�w�V�=rx��
�
�o�!��qg��	iIUi�uI~�s
��he��&
-̥D� @��Z���J,"r*D�
�w�e�)\�} ��f�\�^�k��[���!��
c��s�=O0J?8F���Ì\����"��Kd��"rd�������⋥M����i�>��<*>�=�CT<�_�)ߖ��ݣ�t�
S$a�]�'�>\
��_���Z��1�At��&�)��
���ز�Jb��������O��\�o
-�m�d�WM+
 ��k�F�x����D��jE\�
�l�^~��*����w?o��	���v5��
|ʅ�/~;�X�x�̥�/
-X�9l��s.YE�k��cH�D�|�0"S��>�ԋx�Ӌ�{Vq׮���s���ZV�y���9���$Ħ
����k9�t��\��
���h�������͓򍽐���?�h�
�,�$\��9�x��	���R~m�v��Qv��޿�HYO���D�(粒�y��S}oc��_
-~�c���d�0"�6������
��_ߧ�7��
Y��3���Yz����9�4��r{m֮�V�=�Kt����]�צ�Grz�e5��k�Rhn�<76�_vH`��C�����/]t*��1����+c5JQٝ�6f�F�����?4�A
�=C^�c>���m*�5
����w�ܿ����
�M@|אJ7�Ao�SuӸ����F���~|����^�}a��|0���oC&_[n��$f_/x~����1����A&8'Wz![��=�����~9�be�6S�ƭ	d��"}d&"�d�g+���JA�5�4����3��o���{���g�#���b���變�zqm��:��fd�S7<vNcrƩ9��ɹ� �����  �_dF�lLc�,L�J82����ջfR����{��—��/��z�("�6LH�Q��Z�l�(��
���Q���A�]%�xWC��
�n-u����h�>96��_�b�����H�c�
�QQ*��
B� `m�R+}:>;� `{U����x�@8稅�G�~�^� �?LJZ�{-�%��{w��겸2�j$�6lA�EB@�u�S�/�̳�>
�k��}�z�*R�OE*�
C�����,�>m/�N-��j�K<�KK�:�
�K/� ��Q�f�Nj
4�u���� [...]
-�.e=YR��k�J��ڎ�ޗ3j읕�7��,��F�i���g�iu���}8���T3a�>%2�6X�h��z~��|��W��!A�
�b��&��{�Y�g������×Z������o�VD�h��]���/4���in��
h�-�tWM�
��
c���]�Ǫ&��LΥ1B�9��v����+k76z���4/���
�9Y_���8*y�����Z@�Lڙ'U�(	��:rY��
0�OƎ����҇~Y�;��n�
.�6z
-�e��
����]g0���J.�@�9
T6�����[G�
cC��8�ꎊP��xN������/{�֋����
�vB� 6�"���
p@�E�%�$� ����u��Eng�M�]dS�Zu����	ȋaf�]D��
��~6�>T�
Gj�9��w��[��w?�� �v���r��*��^�7��$�P
-<�
- qȫ"�����OܜcT5<ž�G���"�e�
-�,2����o��>�5�\5t�F�P��
�~j-}�]KIԉ�ʘS+���{*|c
�?/*����w�Ҋ�<�䓡s���m%�
���u�B'�,sN-9�]��:^��h�U��R���s�^��0��=Oa��)��.�
wvOO����~&�sگD%�����G���鱥�u
-�w�B�o�۞�\�̂�>|��Wty
-�xB�L��;R�r��`i�~� *�藓
-V���Zz��t�߷t��
�}
�f�}4ޗ&;df�&f����il��4�o��Jv͎�Uu���
(�ĵ>���6B�{�W��}2�O�U'Ȼ��Q��/jĥ�����B�O˄:d��,:q�WF	�!�]
!dIx����[���-�
�lu�nK���ՐK
��}
�h[J*6���n
c
�ͽ�/�hНyr��8�
�H�͘W�s�4е�~fcc�	\������A��8I�9
H�?�[��u=�1ő7���p�ľ�
-�L#ξ0F���ؙp�ԕrvm����<���جmGĭ�a3� ���9Y��s���Y'#�,cKBjd�RW�Z޻_I��NlMQ��

ҡ�	
��[ðx'�B�
h���;3�4��
-Zl���
�$��B�
.#�����
�䥞�<6��� ��t�_�Q�_-�ݻ:b�ġlN3 ���;jZ�����E~0���)��g���a����Z+W��ԧ���!�����ѫ����bw4`np@;`6gp�n9����PRs�[u�;��r�"� ʼ2󋮩�a&�V��;?��3.��S
��|��$���Z��h����K���s�҈��g��x��-)a�Dܜ�D��d�C�˳��"mӵ�!�o���۲>�J�+���妁}k���F��˦���
-{�(�DM�C�k-{�:���Lb
C�(�pM��`Ż�ޒ��.fc��šg���[��X`��7䔌�&P	?KP~��?��$ʺ�?[
�z&��=�^{�=�M������9�L������'eѳ�El��2�wl
�7d��|V����A@���A;s��,�h��`����
��x����o���?!SN�7�'�bs�"�$"sk���bAZ}�@y���yQ�y'��rW�]�$&yO�!� >�Y�=�����2L�Oz��޵�<2���l��u<�k�Z���Qw�b�s���h�����V���At��$�T[_yS�ɻ2��}��U��C����+��D}2FJ9�θ띡�,=Տ�⊻�͐W����i��C�>3�� j���K_
���/+t����H?4!3 N,׵�"h��~
�g=�5�Z=R\�FOս�֒krf�����'�I׿G��9�@f�
˞��b/[���
-Z��#��
+ꔄ�촡��9{�k�����3��חf�)/��ʯ���l��w5�|���\�H�M� t�(+�� !�a at ECx���
	�c�n(|!!&���/.�UE�Lܜ�,�g `4Ο����3�@$;&@��ǫ��Ϟ��6�����8:�##f���aBֶ�Y�~T7��ه��Ӕ�
-eo��gg_Yh�x�1�N>W�CJ.\ꭍ��|w�
ԇ>*wCR��%��������
,	ێ��-�3�o�Y��J�8�/�ͱM�u����0��K�r�����<�8�&B��!I�9"��"-'�R(���ҧ��?��HI�jq������ߌ�r�1�_�A�]0	������u����̀v�-{�K���_���	b깭Ѻ�k�UO4¼�������ˆ�yd/>��L >�㙧�x�����҉��s�"���
�}\���V���6�^~ԿL���Z.����wV�Ϲjj̹���^��G�Yhʹ��j<�,�c
���>��,}�(}�џ��+��j1�!
��ҽRR^`�|�!T��~%"o[��82�k}
-b�
д k���8�IZ���T�K�}��z`��۳ȏ c�ͲJ.�k��$��֪���O��K#���9ii��m�¾��Cl#̲!R�YK9�=!�q�b>�f���9b�`N%�H	hS<6�e at wM
��hj���|o�Ti�y�n���1����Z?�U��6G�b�џ��D���*��Q\��/��5���Ixzr�	^���T���rN�U�0!�ڛ��@�!
,�E�y_���(=���6�`��OUx�{�sKg�5
?嬆�vss�\�΋:�ˌ���C:2�Ԕ{s����-%�������Ӓ*�s,pv�xձ�t�_k��%
-�1Q�hu0��OY��E��U11S��;ZQޝ�f^x�04����$�4�8򃽯���@��u	9����gt��:+>�x�1M�t���5��C%���{��
=��g���@�:f�oCZ6����W�U���
ZX
 O|K:^Ɓ��5�;��|{~��
-�|h�7
�0){|��e*�Ȍ�;�L��ښ"�ԽS
rn�x)�g�l#�x� ����sz��w�
�t���
�螭�6���������A��0N~�#*��?F��[�D������~^h}8���z*dk��>I-r)��
#��Vs`�D��[p}m
�P
��9V��(��bC�=������4>��J�}/"뜔�}�$(��$*�f�(���I�R���(c}�M{8bw�]��3�}�G�"V�3�
΂?���/�S�R<#�Ѷ��{�i`
����ah��\��L]�O��ߖ�RCjV]H�A;��|���9Ư2���
�D�0���q��霆�{a���:�>;��z��'�k^�+^�!�Oy77�A���~P5@
tc3/8&9ȐFH7��]�~�bR��A
�"d��
���2�=�L���h�몠%�c#6'(�����k���5�!{f�<��t�qa^E��#ob(��w�9/$dE�ևH���zh��Ɩ�_��f�-pEG�†]#��&������� [...]
-�[��c��	l�/}5��$d�3��>
*��?W�M2�����؆Hzv��`�X�
�����U
-R�&&ڧ�`�s��9Q���~x�
�3��4�O�Mߔ��:'��]�@<�_��E�3���f>�meZ����ͲcO�����e�M�5�,���v����%.s[%$��ٗ�R\��U���bK<s�X�
��RP�ZR����A�d=+����]���x�~�����.ڒ�_�
��7
�_Y'����+�ar���V�����MTD�M
-��z��yn�����W~q���6�}�W\�%��κ8M.����c�?t�@�xg����;	3�m�.�'��fq�[���
)�̭�wEB���^��s��ԉ�~��㞥��־� $��X��~x܏RZ�~Z������J~~������0��RK�=C}��Ql�	aQ�èOg������?�wUD
�I����G:^����pG��T?��
.��YAލ��g�Q��ҿ�R$4|���%򳞆I���Თ�ޒʆ����S]����sSش3s��
Kb��Yr�i ���/������;CC�C7�3��w��{?6���UFK9��U��5�LpMU�:%e���^��QSʀ�[Ԡ�\3��W����I���5Ι�O��A���
��1��EoM������y�:�M�d]����4��I6腡����`q�w��h�G��
�q�l4����)z�o�Y�S�
-�Lt�;��`�M����:J��[�,��1C*rNS��G����;*j͡^,
-�x�,��1�F�
k��
�S�{���hYWF�����4 g�|�M�u\\�P/��0�
%�b�V���jJU����l�DE�-�!������vUt��_ts
�������[u? �f
9d�8&qq ����l���|�W�H��׾s��!-镑
-�{$��쀉
-��%���%
9rǁ��u(��[
-6ds���R��7��F.cwI �bm�|�4tY��ԠI�Y��2��~�3�p��{����^���H#�Tp��-�\��C��M�1�
���l=���޶�
z��(1��Qzc�9��F��=
�Q�֧�1k��ģeQ�Y$�Y�zƣ$���Q,
��{�
B�{�Q�e����۪
��EW�)9g{�姙�I?�"sn�X��;�Qߍ���k�~�M7��JA���.l���6|��[�ᔵ�&j����G��#���R�h%���Q�.�GU
�
!7�GF����Y\��P��(虵��N��w}�����o
qʮ}|r�br�o+]����[2R�l�%F��"��#����?����}��[��?=���
-�c[�������r������
����N�ƯNb3�)i7Lͥo��Į����P
w��ܭ���2F̩厲�
�d�P��:\�k�.�TEn�"��� 6G�弴Km���Z�gZ��6h�{

;�N�"�E�Z�˺w� K	��)��B�A+c�
��K(���+ �
,A�����E��2��Eg
smc
���d����4	)����~s���Gn�S
��Q^�{JP�6�7�9����q|�eW��
������6D��%\�a�;\�7n��?�� �-�h��1[����횄��at
�# ����	B��@�SCc�u�DM�[�K��Pr&�s�(�c��{�
�;`�����Ax�k
�� ť��T��
a羙Il��7O��3RQn%����
�����kb�
rr���_��X�
.sG
PPE)tOS=�?Y{0�:q���yb����Iׂ|�6L�6w�^�
��l���ڇ��M]U��!�C���^Q����d����m�U�s
׾�̢��
-d�e�ꉩ����|­bC}j.2��R�����[F��-l�I ���U�+7�I�.	>Q.(�҅L8�I�^Ů�����]h�|�g��7Ծ��׾�5�_9$�4��^�6�x0@�r_]$����M�*~�- �&{&��>)��
��J%q���n�=3�"�w�
�!���d����(1���𞺋3$�>De:�_Wv��KJ�_|�������ė��ǿ����� �t?��
-&+���4��(5�2���/S��_�ɱ?
bb!$]�
ﻦ�ź޺8t���@?��j�7
��<�T�@�k[�y%+�����2F�%<;�� �
,� {@촶U>�	���׽9�	z��|�ϫc�,Fŧ�qw�$g<��ಜ#�ȝYx����=�zK����?� G�
-�
%�G
�i��66��2�nO����`)s�OW�	�W�k?�Sҟ
a>��a$ߜ��>��G%�(E�qt�*�T̼{[u��2>�؉���뗶5άؖ���b��7���LI���L�#� 4k���_
޿�c�L,
��0A��Q2�
-a��-	&e�]�n���G�y�7�
���u���q���>nJ at o�M�[�-ZYl�<�G��戥!5�tl����x��I>%��`�M;^b�Z8�?���/+|��2�u���~^v��.���Ie_�|ѿm��5�r����z��
�X�{�9Z��h�1
3�6��;��l���1NJ�tW�1�^�t^����G�i�v�[��O!�Z���⬳���
Zq��4*)�f��N�$jX
�~2bc}Z0/��K̓f�����yը�m�9��9a�
�$�pu���܍���˯�w׽�
$&���t✋��b����Y�.��Up}�#���Hu�_E)�γ��� �_L���N)1�>��Z�=��ƅ�V�t<⮱^�9K/�(��Z��H��M)��0&(P���T�W+#�<� #}V��/!�ޜ"���ň7�|�J
����@���3�-;�W�
���d�>1�J>^7�0>a}�Q�	������ۆH=��F�k���k^��*�
�kC���k�]\uosM=��KJ���Ab�Kn�s�
!b�ĝE'����Xc�f����ʩ4W~��=�L\j̹i$��b^�`f��g;��I9rw��� ���n�;A%�����v��=Ynι��&��X��]Cq��
K{r����#w���44�s��� &�W~�������R�d�[�������7!=
��Q�C�OjQ��>����s�
{��_��Z���
?;�O������ʤ���n92��Q~w��z�.���
-�_Hz�_�!haP
-y�*��
){�1Pp�
��q��T����R>'�gl��u��q���%Q��I�
��H�S�-����&�ulc	��o�2����)�ck���֦���A�_'��Ȅ,�˿��&@�P)��9�7��#�h�$:)�"�i�Y�H�9|�G��u�8 s?�W.��) �8K�=��RK�-)+��*����N)�m�~d�E��=vdbb��lƎ�MX�e/�Ӳ6�bƦ��iY� u(�냚zN at F�
Jq��:r�_�N*��A��p�b��<#�lO��G�>�����niͺ�9o��մj��T����~�0IA��!E�-���wJ�9
���}��>�����}���hYp/�QmӘĀ��qϳ�
 #�G�1�IL򦜘X�#
󬚅�[C'*b}�_��l
-��ؚ�f�z�L:�]���6��ro�;��^q�%�oe�qZ��%e]J+p�8P�,�z]�.�Y�ӎ�D�!�Rb��P�ぽj&8ddcm��̵9Fɖ�U2����� �p�1�=P�%alM���#�$].jJ�%T�wK�Ɩ�{�Ԕ�Jv��䛕~j�u��c�fi����QZ���I8�p9�RBƪ��5M�w�X5n%�҈H���!/]c��Nj�����r{�
�P�k	5��0*���Wv�1˨�i��k�������{��K�5��: OV��ޮ���{�In�ʯc@��1�n)��x�'
-�9�љ���V �_���m�P�#��1����G�/����ak+�����ᥟ�7�E��*_lM
-m�L;&����k@�*��nm
��+'����$*y��Y$Џ ��Y�.�ypɯ����o��F!���)r�Gs[�Ŷ��~Bvޛ��W�=��3P�l
-��4�k�棹5��
�󮑅�.�X+S�RC7.�)g�±�5K���UXO�0
-�)�e�����	Fq��Ҝ��iH�B�k�mM!bݳ���iJ�����R�69���VY�H7�	3O��ا{���Q.�K+;'��{gP	�S��V��ֺ��[�/�0�]5�l��C�
���_�rk,�<�V��^�<jj�[C,�R`�VF ��RdBH�-t�q��l��
!U".}6LJ���d������9Fe@�D \�����IV���&ro�K?�	m���p�=5��%��mMS�7%��-�؃yc�g:����sm}�5KW񃵑�Jq�٥����*fͤ������i��Ɔ8x�����
-��!J�j�
s���g�Tv����L쾙�
-�}3
}l���LĪm.;�@����:��rNb��
���y��!�� �8��b�5��ᚫZ1�6-�lJy�-�>ìt)����?^��F!k]&�z�[�F?�ң1W�r�
1�9���+�~���k�=[h���̉p�3�2� %iCB�^� �,
���X�nm�*��kڰo�gZ볝\�����6JHX�$���d��g� �ۣ t��Z>��UQ+C&
é�cM��,�īa��5l��Wze�K�YB�[J����N9�p}��m
���˹P��^
47
���9䴚�pm�Uq�g��qq��h�ԃ�C���N��(�%�������$�
��#W�ǚ`K�
�	꽪��uE��r��p�7��$���I|�?��@�n��U�"ܚ�
�r�kN ߜ�T��Q��=�Hs/����`q�����̳O���ཀ&_�$縥l�c�>Cc��B�ZS6P-�v�v�b
d�F�`����	�5D���Ѫ�JN��(#��PtQP������㘦�{+��7&�_�/����6��-u�ch�u\�S����yX���rș
>�9
�v��i.=��0A���.2^}���
-�3��t�:���P���r
ԫ��}&.�-�p
Ϡ�	�X�]��r��Rr�r&rc�]�1#�i��wu���:*����>R��1�L��0j��u��
ا���UR+�}��K�w�*����;&*v��ҳ��l�r+-c��Õ��#[��M�k��~MmB@���5R�Zj�r/�c��o��B:B�_M.��ߙB�[F*��##�*fm��н��
J>`lh�_j��
-�o���U��P2�6��:���{a�.C�]횧�\Z&ګ�œrR�Gŀ��b����S7կ�p*����iV�}�^�:�C�ʛyk����iA���
g�
�3�
4o��a�z�8f)�^%�c���{Bfa�?|���,ٱ�Z<:&�o���
l�Mņm�8�m���p�3��+�C�
�FLےQ
�np)��[2J閌����mc
cC�
	��{C��v���pi�����%�#��ڛ�?���Ƕ��k��I�

-�1ԋ���R˘�l}�
�Ӵt
[[$�Yl��"���]�{�:��
���������0���F�T����	�b��X׎~i"~rȸ�[�V�[����
�>="գ������:a�
-V�����z���ϭ�
uj�F�3md��	n��Z��պVv���U�W��+�̂Ɇ���v̛�QFɆ�
���G.
�>�ǁ����
.	��:ͣ�V&I��	B��^m�ȭi�9���y
ڧfC�
�[O��I�3��� 
i��Í}���ivi��Bo����y>ʣ砿���YE��z2`hj
�f���
��
�!G�G!�W m�5'"�yc��C O �`��ܔ c���޺���}�+]k��NK�R���n	 X��@��H��#J� 	Npwk���|��}<��o�a�����y�+>[:!
����5S�� >����Y)�hE���x��|�Vs<�мln��t�@�w��,��EcO߬��Y
f�W��G�L*����!l†�^�c��Y��]�� ��EmCC��m�#��
�����9ʑ��i� ��,cJD�[PPr�ƚ[�
]�ՑVN9��2�k�\�eomYm�]eᧆ�Y��z�2��6��������U�Z����Hs�Є�Դa��6����S�tT!lr���@������!\Ʈ���
k�ߴ5���ùn��LC��Ds��L���|�jo�e`��i�FG-�`����5Wi:(q�ɷoW��hjښ�#�t���vm��s�hū#L��Xs*xRR�a���Z�e��L5u~]j�^�
ذ���:��8������@���nڛ�
����m���6ޢ�9�'f.[����zҢ������r|����G��59�.m}�SLK���ˌ��,vE���.l��Hsݮ���e�]<���-=&k���iׁ���{��~���pG�<��x�Њ��:�d䌋��l=��1	���"�z[i�e9��?�ѷko���qOxQ�*���@�E��>j����k������յе�&┤�dR�G
�wrZڲ�?�7t��4
Uv
*rV�(�W�4:T
-�0_�5w��,I��[C=���~�K�];��I]�
N�*F�5G ��sM�j����(��o���6*t�B.]10+�2Z���U��k�O��	��%/�ut膉�ٴ��7-��af����:h�
sK��|�#G=cw��Z6��,��MK{�k��d誏S����
v��9
掎5]=��C[[�ެi��;6٥ ��_8�U�G�V��dk��Xm�ԈY��BWt��!d���̡��V6܃��v7�J�	Es��E�ǞҰ�s�^���߫kc%��ߝR4��:$[ ���uj��ڤ���
�f�U�­�f���� @�
���~��ė�Y��iu?G��-h�`�D��݅�F��dmަ�G�;�-�s������WF�-G-~w�cpo�Ǻ���L1�.
2iA��Z�'OjYP
�g�E9%��M��WGX�%s
bz�	�3��s0�ޙ�T���
WF�����Ec-zu��w���iy�J ��1��:n�cp�٣�V����]G�ஓݽ�`�]Z:dB���7S��3t��b]����aof�ʹ
-�'�m{���}'�f���,|9^׫A�
-�$��O�
>b^"d�y
��V�gkwš��lF*k�
�Z����C�83w<ѥ�st�lM�19#�(nH
bT�A����A�^�ki�����=KG۶�
��n*u����
���&n���?�����e�(��{o�{�[f�d�ܯ��w �B>B��/
����VU��L��K7p���e�&�	4<]��Q^(d��H��Wd�M7��=���jZ�,�}�`3ꫳ���LC�EVȮ�]hu
w���nq���-c^S[0���.i�����5����
Hm󋶖�~���ְa1��ʅ�V켶	�bb����os���j�L�����=Z�v��j�T-؏B����)��u�6m흫���1!3��C��`� Z�Ђ����|l꜔��mcׯ��I
�F،�
i���̨ꊖ�M�%
-x���!f�m��\#
�JڅY���|���R����Z-WU7ԫ��&�Gt ?����]}�҈]�5S
�df�m�1k6/�j�E.Y�fnƏ*U|�L/
Q�
�~(�]�n3)�����{�J�������IG[ɬ�
[16�G�j�L���f�����嶳�v��@Z��v�;hU/N-��}�aa/tJ�[;�㵛�\��/�y�f����7c�j2x\��_3�)ۣ}�-t�[�;�.:�bsN�z�]
�?����W���ق����MGs���9���;��S�6�S�FddϚZX{Su�K&
hFE�]5ut���6G�:f�M5�&N�U�
�FD
(N�5���
����
H�h	s(���'�{�+��g��FE��a���SG�Y.U[��ߺ`�K'��-j)�Z,BE�
=�	X}�[H�Gi[�P}� ��ћc����!�֐PO�}g�
&�
����� �U1�3n��/���i��VQ}�Aȭ�qUH!ό�sm��P\#Y���
N�LV��
�T�Ի(�r�E�������K^Ob~H�+�J���4��L������?Z��3�/t�k!���Tn�2�C�����<y���7�&���4��	� G�痉:��H�[�k�TƄ�.�AD�
-�
������n��t;�1�Eyi��~0�&��*�LRK���`��$�})V��cbHĞ����I�����Pzi�u!��c��dt���Uu-)����5�nZ\���s'x�Й��Jˠ��$�M��h�-I��<���t�q8�P&N�PQ������Ve����,��$��Ę�۹)5��3`�������T�Z�4=�ݴ
�%3�xV�Mv
� ,*!M%P㻚��F�"��.Ko�j���
-�����JzJ�O�錟^�
-s�x
r9/�p�V�|��l7�8��
��p;c���t��3Zz�M#b+*F�$��S��ӭ)h�WD��_X��X�R�U��:��� 
�6#����PY�X��
hj��d�Lڻ��H�]�?��z��
��7��r4�S����ށY+�e�8�Q��xG�ϭ�
-��
@e9N�‰���Gi��Z~m⤦����1
Nv�-ml�R�-����
��E�b�.��G�D�eܛ��_��a��'7\��������E��~�_s�k���4�Ttu&;�
�N,6
����ChG1;\���,J�V\
q�-�Z��W������*�}h	�)(��.8�{=#��W/���in�Qԟ`p�N�ԡV	�,��)UsՄ�aU��MM�}��5�� uֳ�Zw?5����<�5P��jf6���?��c�47� �O_�nO�A�~������k~n�M<�����'~�Ќ[�4u�V��k0��ٜΪ
&QM����d&k1��<�QOS}�%�Q�|�ѓ�
�o�O~��4�-1 t5/�N,�yi�Ԙi�F�d�l^��awl��U�ġ�h�\���Gv�:�8}k��%b[�p"�9�D��f����_
-Ұ�e��%� ��:�ϴ�l�>�0�Kb���5a�O�Q�z��/
��6TS��c�|��	��TH�kh���e��^�!?|��w9#��j���;O���qn�����G�.=xS��
��������6��wa��of�eU��[[W�<�ΞM��1<
����ѳ�rd8��
����L�OA�K�����/İ.=xU���w��~��R?���
�
EW{�� 3ul��`
�{��k�;��)lGT5^�]�~��R���R{'*����w9���
v{�*��/��Ɠ<�˗�����/A�$�#�k�x���jB"ᱰ�_�2��u8�ڿ9�@�T��-
-U�Fa���}�B'�#�hd4O'�	�W5��b���?@ �����HJ"]����J��p��
-V�-�s
jH."w�k��
3�����2��#�D|52��Ct�G��j���9n���q{��Is���wOu��E_f���]2�U�]e�7��%D��@j�
+$��&"kW����B��NLfۏ~!p���	)�?E�ܞz�� �u�e����[_���~�
-�ط���,�H���r��<θ��iH�	�
-��x?�(6r-��p52�����T����n/��G1/}"�=~_���
��|�7��wA��~�uW@���=	����Z��������ɔ�1�!p���|����̟#S�~�O�����B���?D�1
-Ka_��$��~n�_滽���z���
�SF(���9��8���ж3�R��Ŝ��Y��x{Ъ�e�R��I9z�iq��fFv�����q)]?�~�\��0������"�;�.��~����<*����f`�}-i�
Yvc�x&��

�s
Xt�]0�wA�K���b��?���x�=�ҧ@��3�0��C���0¥�"��R�H�3������ˣ=�����A9�ɟ%�:ײ��3�p��ei��v&���'�ʟ�]z���ҫ��'��3��gT�ρ���SJ��ᔉ����,~�f�7LȚ��L�MD���M
�gV�x2�c1�\��^ �3<�u��#�/} ��zW�����:��W,��/ᇻ
�?�����!�-	j}���a�3�
�EMM�KM˱�;���	m����

}ԫ
;��v<ʯ
�
��������>��/]����͐K�ɍ��Da��2��mJ.n��B�	�%<��S�@7tO�SZ���	�B��~TZ�����˾1��n{�_���g���@�1~H�m�� ��"��0˅�=�R�F%�d��.}p`���
�l����o���B�����&��*~x�1�-5���d����Ԏ˞��_Cc�7KJE/Hx�{Ig��� #nNIJ\1�!.]zJ�P��ℼΤn����{"G�yc�zO8��&�Dr�;���{��Bb�?G���
�ͺ�U��()~X�U��S-_�L�
|��Bs�Ǥ�afE;���w��+:x��stJ�$"��Ot�/q���€z(���u��w(�w4����2�� GyF��"�Ϳ�Vh_Q�ij�p뢡�mb�&�"�}
Q��$��
)���c�[�P����*�mp��ZbN��w�g�=x������G���ǩn�A�K	�-?g�t��H�������Û%�XՉ�ӈ�a�~M [...]
-z��������t9*��v|Q۫*�̛�
��
����`�+ۚh`�N����.�Tfdw
8iu=c KH�
-�S�>!�"��2�GrAۋ��Z������>������4�HB��"��
Q� ���3JjƼ����2f���
�����
-Y-� B��-���N+���~�U ���oK.}�]���	꿙�
y
-���ɪ�����f�IGV��:� ��HK�W���M{s�S�EW(��9��g/����#jKp��
P�wS
����,����8�ǯ  6C��=��v�v��"����
#�ҵ��J9G��H�~����c�k�0$1���8��-+}W=�ͮ�3$w')��Yq%�C=S�h����բ%3��o�h���
�>&��+
Ur1���O�k_��X-S��T�/���iBR�$��A
a�
-~�%ȃ��"��D+���4����Ў/�Ƥ-*�	K*B���
�
�sTJ)sP&A
x�
^�<�ӭͭoP�(�o��Whl�
��������	����
�Ȋ�bɥ�n[Z�G�L��	�1�g�
��^�Z�ש�2� ���V_��CѾ/����t����9.��w�Ț��؟"3�~��i�%
-�v-�\|��h���ǛT��QIS嶕_ƁV
D��8�:i�$
�8
N|�x_�q�pu� $����d|�\{���K�^d��#/}���#��z4RA�
>xJJI���W��|��Y�hh��)�
z�~|����5B�{t�
����'�v���
Y�˚RI
�/G4�c�<OV�
�7 �

�/0��0��
{�#|]`0�Zf���׳'�
��OS��*� ]&�˕p�D��q�ܾD�@U�++���G��7`&�i)�
-.D�U�3�b�,�ы���eC�ҍ�Y�QK7F��k���S;âl+�s)Q܆��=l��.�4�ަ��&�^�3�����h�Fl�G[��uݪ�F�`X�Hҙ�5
�}[vj��0,vӂ+?�l�p�ˣ��&��[*��Eŝ}��v�8��iK%�Xc` �fv<��bx�7|FК���<�Q�!�I�	��
_-�ˋe
!gl���7�'T]5vYk�Y�Uh�rʍ��"I[K��]�,�P�r�U�^e��o����Op*We��=SG��Xkǎ�Q9'!�,J�E�zֶ�5=�ȳJs5
z���
�W*�����=}��.v�a��k�w�-�
Č��i��F]1��6�����gcþ�&g������\
"��HI���b��
32�Ȝַ&u�4��4�Q�.fW=�u�^��ò��Q%3s\F�vi:�MB݁��ql���
.^��U ��4��%[�z�ү�T��첺l������Iz��y��-uR?A�Aeh}	䁷Dr�
�'��M����+���Nj�m�6�n�Ȯ_
"��[��
��� �ð�1
蝑S��Ї�Ջ1π�j���R�Ʒ#(���e��k�`�5������{�/���R�C�O[�3sv���]	rj����15�<�v�߳��?����Iş(�q�džj)�]}���
-� -Q�#��8�@��=�fC]�fƺ�۟m�8u5���k�'�XЙ_v�$V���sJB����Ӯ�g
ݬ����푶�
+��i��ٰ�˖����Jޜ�5k���,���1q��$/h(�k&j��0&{I^</.�t8BA��P�\|�n��,��EN)*�5T�l$M�q �W
t��Fq�A^�nB̊ƜQc'q�T�7�ʷ������
�pÄM=��e�-v�
�sl�SM�.c-�(��3�� �j��aeL%��U��L�R1J�`�Ft������G}�KZ8֒�`��>/-��ef?
k�D/�ؘ%�`~ �e�3���]�zYQW�jA�y�
-�
mO��X��|�I�T�/�!�u5"rK�K�W`Rd���s}e���aGfD��06mw�qd'UlX��
���5k�E���YKz?wU[
�5��?!
X�E�vj�k��n��<�`b�9h��	:r{�;;�
-���%�H;�&hNA�^P����m#��b���"bI^
� �����gV�
-���2�j��죋wh,��c;�x׈��5�?
a�ׇ��K
-&xZ�O��r�ё�r�	
"�)&DM��Qc�ΪQQC�����1��:Z6M��%eїEA����q4��8�l�~u���.�LYaIK�%A{�Z̡���p�հ1\Y4�g

d����"k��;�~
�:覎U��%@����{f,���
Z0�x�3g�봒E9:r�+�����
�i��aj����+�9��7
8�5�j�o��
���3|��q8B,^��BV5��
�m�F�1���i�.f�˾��Y��R�{�
Ҥ���Ҳ��jx�|_�۩v�KKC���l։��\R!����
Jx���Z:/�zN��<
����x�/��$T�w������Q|����u��|:�ع"/�2ݙ��љ��5P�u2I��/6	v'��*�?�M�fX�[��EIn��(��K
-�|>��|�$U�=ˬ�
�c�4��u3��p�}�p�k�p��ߙ`1׌�i:jRA�^�,ٺ�L�����
zh�՜MPp�v�؄��q_Wڇ��v�D �3:P1ϔ���{*r榬&vW�K]�F/J��3�
-?-=�ၺ
���E�)p)�����!Lډ�{l��X,�7��|�������	V�1
hC��fI��`KY�qW���7�����u
�xE	��sB�&�ЂN]W�,��?�{�(C�,)0q����c+�x�H)�����e>�}��%�/;z|���o��lI���V�m��1�
-�������z
<��Y�a�
u	W��Q��t�<�����_��lʫC��
*�%,�
nH�%B�\�Qr�M4�
���x쑕 ��cSw���`LX��M}u1Gd��4vKVzl��>0@"6���N�@���#+����@�35�mk.9*f]��k���O0p;�u8��*��
��E���/Ύ<���
�=
4d_W��؄�~V��D�o�ɻV*tI�J>!��;ɰ
=6kK��:4T��ˉ���<�X����F��XK˞��7b���ʰM-"f]S
�gB�l�q�jX�����A�9�������ah��E��:jπI�>���u��vɫW��s
�[Ď�����a�K�r�<lK���3�@�FT�?R�7;��d�8ߓ�zU��y�/���0��?K��o�ʺ��N>4�GY��ꜳ	xS_��kFg\�\�6]��ѢS����N^vؾ	Uz�`2�N�*��J"�� ��X����:�n����"9��o�u��v��=sM��8�|�J,ٳP�do��}0�ܵ����
��$�|\ڸ��c����*���*
�RV�9�Pϖ��+JΧ#
�do��~�#f���X��Y��_���V�]�S=U��,�wK���;:h�Hs�-;+��Ds�íAd�^�����߯���
�*�N���e�s���)n�Ne^'Vr鉍R�*/�u��/�2^l�����5I�f\ξ
������� 
G�ZW �\�rO@/>iM}>ѕ�t�W���B���Bo���a;2D��)�ve�vu�)�1�Ƃ�,�ā��a1w����=5!kSV�"�y�lOp����6�_���}��&�.K�S��s�
�
��!��%�~�>���P#�p�%�&�=��tf&Bfz�ގ�Fޟ�
�h����P)'fL��
�s1�a�T���ס�
�c�;�UvR��f���Ol59
�⏳���RJ�\xbD$��������O]�E�~�>
#W
�2̉��O��ocu�]M�2bO	]���m*���<֡g$��EI���Puԁ�\�o�,K
-���ܧ��MqA/�N�Q��Ҡ5%�{c�(�Ċ�9�`��
�w�B8���s�|�M
,����iOO��R�#�J}6e�mUe�����L(^�������e�
TD
h�	
�l�����e�kG^
pfE�H
-f���NG��#vlGf�[ˣ6Ԑ ��k@&
ٱ��6
hIR��lS�
��t-}�J�Z
,�����є�
����u�o�d��8��|���p�[�m�C��\��o��U�q��Ӧ��h��]V����
�0E�&
�Ȍ˽� vI�a�������
�O�>�
-r�� *z�[�qOI�Y�a�6d��JJ>�
�'{K�ZA��ၧF&|U
>У�M5�[
-D�w3<���$��R��@����~83�K��q9k�O�
������?��WN.���AfA����z�Ԁ�=�}GgY*"�d���
�w�[�o/
�AS|�dwٛ-)*|YT�"��Z�U��I*}g8��]�^�RB�LO�__�ˢ��+&Z�#g[�U!�ݾ
��EDi��_	��7�/rޥ����{���,��k���kB���aD�
�#����-����)
�������03�O,�����=-:}�Ե���U)2mS���Q�2��?U�O7FX���8),��
=1o��J^�UD�w�A:wR��ʨ5���
��O'�@O6�."r�7��0���@�ۑ��kb�
@+�s	�?��I7������%1��2�Ea�G?�ͦ4���Q,��ӢR?95����q2J��[ ������dC
-��3X���P
�Ձ/����
��
��AE�ڐ�@��
Y����\}ɏ7e��G�ٶ.�?���ɑS��Y��Ӕ�}mu�� ��m���7�!��[)^�54f��w���k
_�!-����W����`�D�x'�c���>ED�k��p��I?5�d� \:љ�`A���|���×�Ș]#y`ml?g���
��(�zS
-Y�y8[���w���h��g�@�<��N�
l��C
2�>Ae.
-r?Ns���ة苙�'#��q0�N���xz`F��1�;ZT̶��w}���HK�-
.��U&y���{����H3葥t��U�� �D�e!*��ʼ=�W�~]�VT��y�&��n����\�_�k�_M̪}5){QP�iG�K�Q#"��^ۊ�wZH��q�.񆁑�hWO���|ZB�V%P�
uE�� ��b_�[�*&���VE�1�W
��&em���.Q���.���&�en��4�-"�>.�~sIK��8�Q@�*h��=鎙~MG��fk�{�5D}
��na�vԘ��!xw�'�nH*u��2��e{S�
`��W�!֦�[�` ��6�E�G����r�?�I
|���S�>�֎�MEk�
�oo�
��)
:7#R����W��ONN�
q��2�����"�J��k�7��x}�_s�*:���'Cc���(���
�㣮b�<~��x�"�
-�uU 8�97P�z��T$�߀v?�U��I��LwE�32�\��~
i����¦����-�ϭ��S�pO�w��ݓ�~��㯫i񷖥��=}u�hk���\��(��K�V �ߐ�w���
����{����i���G��b�5q����"`o�*ne�C�_ge���r�:g���z��z��
UYȮ��oxƦ�<�R�xg�'���I�oS�R��?]�)t��<�5�>�:IF�|f��hhI7��i�f��ZHؚ$���@�ߊ컯)�:2�E�w��7v��)`�?'���-vZN�
�����%q�3#�Ϯ��W̍�oN
D8���
|j���YI����#
&��̃aD̢0��;䏾��?�|�̈��;0�W�T��e	6zA��ᕾ75�<3�e�313nN��X�a"�-�m
��w��51:b]��r��
-j3`SV���ۉ֬{[*��hp��)N�����?,Ԩ�'�Rn>!,��#�~k.�j��C>8;2�
�#�6���
-��YKI�1Ń~R�f>S�3�.�*&:�ݍ���Ύ�'6v��A|̕�Ґ�#
0o%3�� 9�����{KQ�#G��27��m5$tI���r!�"T�
����-�=��KP�؟�nCR�q[Z��Ĉ�&G\�跅~��\w�S1,��wm�>�4�
�wb&��`_���'{�v�
�����V�8�ӟ9�3_-
J�
ǧ~w��m�jҖ�0�%&rST�'��Xf����Ov��o�H�f�HG��\����eLu�yY��
�����7cm���
ٯw���]MM�<�j�7��|oq�
���lw��u����l����s}�c3ej�}j�%�p�3��>����eQE�6�-�\�{NU��U"qS�I��o�2=�^Vc��� |��B���������,���Ⱦ���-��Q�
�q7���[z­#"�
-��W�f�H(\"�Y�wT8@�C��5F]5�~�T��{����"cͤ⹾�s��
�|�U~a
������3����o�L<��@S}��ۚ��������1kOFᩀXUA��~��T췙ց#+
���
-��B�
�	���h�Ӕ�
�E��1��9�ぁ�}Q��V|��02�Y�ʪ�9n�����x���%
-���͍P�-
�hA
-�2֝u ��򋙕~{����K��Q^��EM�ub�E���į�kO|fd}��hM��lϺ;�	v_��Bm��o�A.A����{3-9������Jx�hw�3%.������%�֔yk�#﹂���]
z]T
z�� C��i�䤴G˃������Р�9e~?IP��(1ῌ�2�9������k�Р�;j|�	�1�0�{��9:2�Nw�=X���V���@��e��lo.�<�Dg��R?��YOG�bo�@>��1- ��]����nP�s�œW{
-���/���
��Zuw�"�J�ʠ�x�)�E<=6bJ�
�Me��PyȖ��
�W����g����
UIO%5�� ]h�/ O���9l�\_i��{uk���$��ڋ?�5�=u��=��鏧�s^�zh_�Lgg?��ő� ^� "��s�:Z�n9[�[���hI��x�%"���˯�����Q'6l6����mYoM��S=�O�B���5%6e��tCP���	���_�{O�B��M ����
xȣ�r�KR
��$ޒ"B�͵g����l���+��JC�
��Gn[��E):���ybfe���
�烼�� ��Ǒ���%!�䈰�a��;<��e5<���ƔGc
)/
���;����q�d�%3����2aC_���d9
�
ت"7T�^[������
���|m�,�Ђ���<��͉)���oi����7����GV\���fO�I82��"�E[q����D
I����_
(��+�XV|\���v
L������-�0�v_�‚v_�>���=[�xu��.��� �giL�ki���"�z�0��fz����oJ�?'��YQRL��7�pQW�����W���M��+���=-5OGO�s1�h[K-�Q��� |g�X7��xg��U	:r
 :dm�D
7�{9�K>,����y9a����T_�SK#sC��ܐ�Bv�T�� 
�̯�^��g��/�z��^鷥��O		���𠾿-�ܧ��_�4����B��1B
-�qw����Ѧ��֨ks��Φ�۫�Է;�Ҹ��ƫ�k�F\30�|�q4u��g�3M���Y�������+��m)xQ���藷��`�ϭ5��������7C؀k\ȫ����?�U�!���AA�
n���}�W�<�ٞC��ֺ��2��'�����3�r�Yn���!D*�3w�ȴ="��0��
�:����{c�PO1)��4�*-�Yǜ�P��.2��Բuee��=�KR� ,
^�ANFEj�R�)��7�z���]�[Ѡ��]��e�75Ȕua��t{�ɖ̇s��'��2�#���$��S�j׀N=��I�3jv4��MIλ��ӝI���Șm=>k����~m���{�Q{6B�m�*���ѯ�m�NnчYIY��(��R�VN�|�3#2��#���P��@&�5��ܷ�3���ǣ]��V��PCSF��3���HM��(��t
^��4�櫳�� p@���p��2P�*Ao����6J��&v__���0NZ�ul@Ɲ���r��qlb�V�Q�
��f{��D [...]
�����4�<f�
��r��6
��Uy9����o㍬�VZ���$@�^��ߙ@>�
���Y�.fz�˼֕��cKsݾ����[�>i�K<zQ��Z �ƂVe�o�$��]�<?�|��Eş43�o-���O@��ZЙ������Af;�_��~�|�瞦*�b��s][��{d&C�l59�zx�h{�cI���C��������'}Sћ�ȗW)�
�X�\w�I��j��Xc�����׻ƚ
#�=��9���j|鱍\�>X�=�My1і|{�+�ټ����K:�v[���m"�PK�:�!b��%�
�\�MEa���"�ȆL���[�`[�N<�Tş�*Ӿ�ה~�$U�*�q��>����P����_RV��
-�<e��'b|��-mU�����Ab��EI(��V���Ya4�����%���;�I
ʂ/'vX�SXP��w�����F
�i��Uf
Y�a��l�����s����2������%��A�f
-�%��ok����=,r[U
2՛�l�?�}�����01o}�2�-�\W����#*a�gw���}e�������#c6��_��hG+����7�����/f�8:@�W$��=-%�_�q�3��XS��aj�^���&F��=
>gE�M���x6NG
�
-�M5�;�ʨ##,�Q�rd؎�	qp1�K���j��	��}
9!�n(�B���7�Ş;*d���E&ܸ��9�KZ��]��?5S�� �=ڝ�R�����D���aҗ�k��"��e!�%���K�L�?�
� q��'A��L�E���,BJ���*��g�F��,��uW����/�K�V5�)�z�����K�)�i�.r�&Z �L�2 cWdeާv*�l��~�U4����co�0��m
d}�ˉ���<3)(�
�瑁
-�6Ƣ���}��A��Q���x�
g6rg�X���<�T��w��%;L �eu��-�������r6� �� �g{�=�%q'��D)�7SK�F�p
��S,쪖��tCM�[
��m�z6\��x��ГY�b����mLjl���7R�����%~�і�'*B��Ɏ�o�(��ir̈́�4LM�z���d��cW%��%AN ��g����
�s��S�%$�`d}ZT�
-�-��{zb�B��
-�@�
��oB$��O
��-*}{�q>ED
�q��$���.qYجj�\��|���%���}��F�e�h���
�����
ͅw��82��K����$-��N�%+�^(�lk���hO��,*�:�Ѫ�GhU�\➁R�(������`��hk�MS]ܟ&f"��ʢ���37.�����C-!cST
���f�Xȥ�jt�d��D[��
6uA���5eݝ�����lg��Ds�e^����&��/�K?��S��tU��CP�uY��]@k��Q)gf"x_O����ZA��
��}
<��h��͵�
-Z��
c2v���% ������fb�E���!��DG��uE���
�5�-x;ڒ���F,ZQ�ceȈ���C+.w]\���g_�N90P
-6�t�
-�VM�Ã���}SK㙽����t��.�|v��o����5�g濗R2
��i�MyMҶ

�?��]�WE�**64��c{-fF�J
�,���
-�*�p�F�[+R��C�9�`{w���
�����v-�ܯS��
cE�� ��PW����
�!tf"���
W��Bc��8~d��.J��C�/��4���Y��%*�/'	�������Iǣd��8
�k&��0	.ee�L?���,�E96~�S�iYFm
1*�)ŇFdҪ�<`�_���O'6Bў�^i�,�0֞��p��4�]4�_
�`���-
ZU��^�m-�ebe?�֦><4V~ ��7�H;u��Td!�����3'�̋	Ɏ�j�v�K-)큥!��w'���
̺�fȨM
<a͈H��:���
��5����
-h}���F�e�Or`�dO��߸J��v5��g:�F��Eŗ9,hYZ�a�;��0�ъ0�ź������X$e��)�:��e��{X���:��"���6���=k
z�[�1��}</�~:��v�������l���gH6���=��.!c-��l
�7���U��
�2O���,K�I�V���1�:��
-�4�έ
�����#D�\@�
Yi3����]�O�.�����:��:2U�/�!��WQ�^�r��u��ۻzD™�
=���N�ج���eI�{gW�m[]��{d
-�I٦ֲ7S<xж�|`�I=��������>@
�ljj2�O54� �8T�&��_�T��	�_�L侑�s���$U!G�]�C;g���H�6p�*�ĀH81�d
ܰ:L��	˃f�	_��ț
-�����ê(��<7����6'
u2��ZK^��U�� �,�f'Y`�
��W+R��Cu��1*�+��E��M]M���bթ���.��Izi�Hx���{��yf㦱����9�_
tjg��GH��l_W
�.+�=�TF�kQq��z��>ㅾ)���D)?�Qˏ�x�����$���F�N
˽/��O&Z�.���3Ԥ�j1)���<�����ĕ
�qy����~ȇ�R��������dk�˥�;X��y6Y_�
ԊSPv��GcT؞	��.�2����i���Z�
-r���g�B��u��AB�9��w4��^��uMy���z6[�v2Ũ�s
-��M`w`]kO�I��T&���ȜyQ�{��~�N���R��

:qǎ+<��W��t���<�Aـ>J9��h� ��w^�W��
B�(xw��?�C
��C�|S�O�3��؎����
-[�Y�>Z��|:��W
[��jtF��Y�aS7��5UU�����/|cmL�ga%��tݙ��ZQ`R&{K<F[A�$���x�]g[��
2���}�'�^w����^G�6�g��kJ�ei�Ձ��;ů�f��:��J�&�A��lw��������R�=me��|h&�k	Y�*B҆�
�m��A�����ڸ��
��\���}���d-u[��ji{
kmȺoeE][�ޮ��|�����6tι��:0�J͌��QbAT��ޘt�^�~�Ɗ�5ە���X�xj�EL��榌[��}:
F%mɠ�;C�kr��5Y�ώ�&a�@+�tW��E���E'���E�#p
Q;���a��K��xCY���4�z �U������F.I�w���
t濖�]�&D���gコ�ʲtѧ��u��\gu�J��Je�K�!!� ίAxg ��I)eAx���x"� �7�2������Ⱦ���y�c\��
�Hh��{�5�7�o�5��
��LЫ=~5�mk[䕒j����<���:�i�jI�q3$��GP��'�]~�qb{
-r�/Gdl<:�K����Ӕ�}�s��n�rR!���n�W�4I���˞+1���uY/wi��k�KdnH	4��K
k�Ԑ�K��h��]�=n��ݜf�� =���Q{�
����a������<�ey�������5o�1+
�=!f��ˬ��mܝ���|��ڴ1M��.|2�]�w����N��][S�1XqHG�H�
-%��l� ^��G�����u��4IP+������m���і�9DnL�h�i�=�Y�-��#��}R\�{q��S�	��㛯���
8��
��ޔ]�rh��a�e��K���INǖ����ⓡ�9	v}�v��
~R?T��,��_�x��[��&�����A������S�2�,��m�n�*��%��Srj>�c��2j��8���(�ڻ$D�Z���[��#���<C�U���',\�G- ��as�ޣ���)u���������]�O�����d@0H��\#寍br7�H�[�䊐�ܴ��e�ul�{
qC{�ⳕW��?ܰ��iONX���r���\�1�v������� \��cU���~QP�Y`�V������
��Ɛ7�u��}���h.�+t����k�xO��x�)�$�g
-s{�=���Q��RI�g.�}���Z�Omߙ��~g~�u~�]wn`ې2�)�H���:���S��
DDIl+�u��:���E[Ӱ��Y�ͤ������ܘ��-zHC��/`ʶ���؟5|c|\���
�.���w��6Y�'�q������anX��� >��>�9�h�X��LЪ
/pW�ߑ�,/�.����Z;���M�k�c���VD�؈�����䭝y\EP��]�e�8a�
�N�3�)�[���),#��1���l�%Z�_3 �Q<���Zd~	?
�����i��?
-p*�,��td��"&,|N�t��>,gJP��WNj��)~�Y��ml�W���UQZ�F#a뻓^��.b�Q#&��J�r��_�yS��2reH���G�{&�7����>�#V$4����M�0��~ŧ���?l��9�x�gfa���5�O>�r����������J��'�(���|p�!�K]��GnO
Z��8���pyk���{�z�zr�S�ʍ�^���=���]���uk�\���X`zڞ}F���
�ٝ���ą�w�����n�L����L�{ν���t�����׵?�
�n�C�YF�I��-��W���ߚ�>��<�����{��r\��ʮ�蘠�:�
P<|�[��)��h�>�j�%�����\�
�ys�]����ng�YVq�9l�{yUw��S��/\ﻮ<��=�Ju���'dYT!Ĺ��s��'��SK������9���q{���t�$�,�W
-�5>��t�V��g���:�(�W۳�|*F��7̪���a��\@�����O��ͫ�a�@[:�v��ސ�5���@�1��J��ژ�EqߑB�rT��x�� �
A-
�|\���n��Qh�k
zӿ��O�Y�ܣJy���w����W
�
s�u]
-�
��]5�0K�D��w��x�+S���iA�����;�u�<�=��P�s��ɽ�Z�!5��UP�7�a�>��ONi�ȕ1lQHMnM�x����
S��I=
�
- x��wlN�ڭ�`�
� '�:Z�߷�F�v61f�w��x{69�"�M��g�U�'
�؇�Cz66lf�Js�D������MЛt�$1�T� ���k!
�g_����r�E�88�S��s�
-�<��S�Wo�����oW�����3q���c�l��omO��w���=�v����,�L}7��q������U��r���Lxr�FR�/�1�sY��������>�sJ�
�k�s
yi�����m��wx����wfD������U�<�ç6�媡�oU��w��CRJeT�]�X�;�-؝!,o�7
��9�:�sM�/�,����V�r��j�'z���pe!
�;O�Z}S|�u�߼Ҏ
��>���0�{:�[bw�Py�e>nac<���1T��4�ty�pmy�tcw��Tq���툒��Α�<S� �~��/:�n?��+#J	ǯ
��pn�A9�|ns���#��4���
tS��y��[��V�"������𗅾��d��g�@-�˘=a��1����rzy�m` ���f.1��W����SV
�`��n���o�ʆ�O�d<j
pŐ��qOcnJŷ?_���
�z�. �BmyC+�Ӕ��o�s����-�
W�;ϭ��>t�����
7��W�a���B��
�k�@
-�\X��v�An��a7]
-.d}Q ���*�-�^s�RZ:��|~XN�HhI�q5�a�u˩��G
�
YGq%���Eu
$�p�����Gߣ��
-�?�6�fug�{%>9�x
�hy����I��9|�_Al �
�o��
-|�_+L��%\��p���G��l
�r}
-J�_�$�\�VDb�W��	�
�W
L
8���u�u )M~%`=� ��6$t\dP�����
�if��Ǟ�TC��+�ۿ��6~e���>O*��I��;�U�ӌjÓ�/D7~��/��	ԕ�w���&�ޙA\c��
�9�����񫠴�K��%�*P���7ݹ��~�{V�
���q[����<�:�kB̍Iލ���O����,����>��$����L�o:�t��,�K,O˿���O�.�ʹ���='
��y1
-0�2��Q-��~������s�q�D����s��;�]��
-lUJ�EG4LhXIo�>o?9�-�8�%��5�V�<�ؿH�
-,�ʣ*fW��%x��en)��=�l���7�ї7��N-H*�{���y@
--�`�z1�m�}}�'��r�=�������Q�?�ӯ|�B�ww���^�}�N�q|g��t��>4ީ�׵_����:������y�k�T�>�������˽�Q-�#��W�&ZϮ�)�Ի@,�CF􃃻�^����'�x��~9�;�e#w�P��%d�g�\�W�{��Ը��a5�W0!�%RURKjI���9f���qzu�>�tCJ����<c~�t���\XC��^#v�E���:�oښ맮NP��[��Ar�?����D���_օA��[Kb�s��3��l�_I�ߚF^ݜ�]
j�m�P�ak���,�A�~bk�ۓY������ᾅ��v^�|Q����k�[��
u���P6��e�����o�
<�F��z*��
�7ƛ����l���q\�t�'{��g6���
���
Y��r*����J>»����3�GI�
��#�F�\/"��%z��
�(��'����;RN��{�-�s�e���
I�xP��@g�Ɖ�YN�k
-���
��Q�w��N�e���&;�����ݽ�
�����g]Tp{V� κ�	�� ��� ݣ�[�:.>c��rZ��-:gk�tsy���ê��Ә��,�8&�6��BB
̱�\�Rk3f�3���|B��R��
-Rc���
 �T�!���ΰ~�?���
)����
s�B�{�aW]��|��kRnw�ZQ���-
0Ƹ��yT�k��|h� �7
S�9Q̓��#ث[ӌ�l-�γ�s�|/���qȥ՟�HiD�=���^��]$��\l
,�w��7����c5򡚓��'�ow��03�x�YbmHb��@������Ap
Cn��;/�ԤƤ��~�0�Ӌ9q}�C�o��Z�
�Y����ș�]�cm����
��U
r
-" g��gPE
)�0�c���
���^)�vT�}��O
R*��ݗ�OK�j}�y"��3���6o�N�g���S�a��
тڬ��w�<�[�Ezt�Zg�1�߁]������
�
p7&85e��v�ڮ�5�f6W��
��;+#��[3Ԫ�Q��Y����Jظ̰���Ȩu`Lz���;~��P��}RT�O
-ϋi��IP;���!�n�e�Ӽ=Mk�e��E��am�Bθ�!�O�/l�o(�y�F�����U>׹�������\����6�]z*�RS�O. at 8�m��ʖߢ.8��ͮEA�ΒԊ�>���ӄ�루�� ��Gq7�&i��#�J�T���{��w��*���Ir�{����:��)R�{y1�#��Ԇ�Yl��;����K›�����0�Q�$�2[!�'�3	
�-�!��P7����-�D��
'�����_J�8��"�2�$����o�O�G;Ny�WcܻH,ݕ�C*fGL�������K����i�e��jb��o����[��ꄑG�+хq�����޷1�!%��3��K�H�q=
pCإ�""�7��ְ��
��`z�J8��U�*��m����p�=��=�}
�Int�ܘ��1�*��6��R�4�9��=�q�����_/�i95#���@�_��xȕYf��
�vD3؟0��ŵԶ�
S�2�vzi��/���K	�'�,��bDϧ��s��[D�,����;�o��\
k�����AD/by8
���i��U0;�2Ru`	W�:�z&{���"HY�B��w��-cЛ�#��,
r��el)ȵ�7�Y6§���z�!�#a����
$W�]��m�`ը^�.����������H����ֲ5�U�23	{ao��pƫRW�v���
q%��}�����Ԧ��\�S�# OR�{+�����E\Q��D��\r���F ߊX�����
3p���>��N��k�43k�/��&��:|rP�M��|��	��U��-�?o���?vYܠ�R�
P�s�
-�Vg@��a�D̘IHە� ;��v�"�s{�]���R�5E.�Y`6������>㜀^�^�
�E����-�{��>r@)�
@��[��_�Z.³��ؘ�\����������	�)˷� �j��
7�X����V����h���k^��EV�_�j��� �a}V���p��њ/\�u?��žF�O���.0�j>�
�p�}�q�d���y�e�z�+��4rry�iv���ji��'9� W��-'�
-8�1�ͭ1�?S
'zz��,�ie}
�xGLCn
-@
2FtMD�.��:��1�svM����/����H���E���"� �̂�a|�s�Z���	����4�6��g�r�/cv�9i:�7��U��v�"x�O�[ʇ�]
-r�*�$�E5T�/�\��
-�Tck6&�.8g0E)��?n�Q�jZsD��
-�	�!�5��e���
�c�����q��>�#C�����
U
Q���ʔ�ѵo��:.ί�4F��o)���c��x����M�D����W����El�_�Be{)�p�[�6��6���
xz��kߨ{ ��Qc�ݦ�o����{+|nT��*�_ W�.��&vo���aǷA���MA���[k|A�ʥ9��	j�\�����?o��1�`=�Y���EC�5?i��v䘢��]���y�0�����ˉ
;�ĺ��ҝ�3�!=��	{cv��OI@��ɤ��W�rlYB��N�و��ޞ���Y"ٳJ$q��tO��;Ĺ�IR�w�	����5�l_C���>�W
_l�o�6 Õye�r��V�6	h˃���%�q#R2Z@
4��T�|?�+!�K�V��4�D�x^�'�|�������Ӱ:�
-1)��.
-�;�Ԫ�y|��0�s
-��[�Ձ����A�l��/��H@��9'�E�#�+���'��䪔Y�ԉ�yJ�s�xۧ�@��@��OQʭo�
�1�@�� ��g�jW����퓱Z<��*���+�֬�a�xi5q�����Ў��_:�[~��B/���.��]��֤��k|N

7(�w��t��z�q&��뻕Mq
��=�k9h���6E
bfPŃ�/� �vjgLOm�wp�{�}am��>ww�Ѵ�<�0m�P��=�]��߻�;�l�o��]@V$A�	k�찆K��
�J9���<2o�5��Aտ9^u�ݝ#����-��r���Ԋ��%FOTN�	�co��΋ n�=���:ˍ�8�<���u1crR�^QL�#�Y���S�i>�5�p<��wwCNi�{Xẉ��A>�2&.�
hj3����;�@�_�F1�a��no>-0��0
9q��j��[���	���8�<ko]��л�*jsv
=rv�k�ם�U�p˯��/��Zp�\R�1��\�k.���f&h��)���5A,�+٘C#)��ѻ\R|�����"�*ja`~q��>l2��ExUL��
�Ua�~��8����Q@�dce�P��e����������&�g�|2^���Q�E�Y_6|���D�@��XI��vbgˆk��¡��

И萜��_�ֻ爥�%N�w���ߝ��п�9�u�e�Y�
�(�ctF�ldX7(�]z|�5�4�|K�{�Q��{U���;�������K@�c5m�s�����4;���}TF��/RZ6��%n�o<�>"І�RV��Tu���k��A��έ	t���çb�I�s�ղ2���%�Tx~}v�\Q�k�r�=]�%z�ZlX-"��@/��7�0W��{a
��5
�3K���]�(����� ���ʫ��6�t���C/�����𸙍u [...]
-h�[����	-�#��lu���3:
�`��\����������Bj
.aꗤ�}w|2J�r���N�� 7��ra�
����4�GxW�lM
����׈
y�3���W_BJ��4Y_6��5�ȏ��𤎏O�9��s�*�,ћW�IE�_���0�)l^ {�_E�)��=
�j�ݠ���U�Z#��gI�������	U%�pk�'gw���K�I�����:66i
�VC�"zLỲ��,�nl�;b�����1ǝ�q-��V8~j<��������w~��s���#V
|ș5�P��cdVD}I;����i2=o�����9By�!�,
U}�1�s;a��>�9�_�4xt��c����
��8������1q
�-i��E�ؒ�����EdAD
�����XP�kT�h�ʑ�<��k�fZOʔ�O.�_�l�{�P�'�
�X��U�[j?���y~԰+<z`ID)@{	��9������Y u`�X:�*ܿȨ�=�<�3�*��)-i
ֱ���Avd|�O- [...]
endstream
endobj
330 0 obj
<</Length 65536>>stream
-�>A���;W�F�X�z
�3!9��
+4�{�QR���9z]TAk
,�ʶG`y�#�K[c�ܐ��S��	b�㧎��:υ�҈S
�#K=�ݷ\��b����
��0���u�����yF����/f��ڝ7��-�V�
a�0t?dz2�r���Rӳ����-7�j.�=+B�~Ğ�g�zD(��<���������Jy
��l}�qu{�R�8T�1��ea5
�
����ز�_��JZCP�ˎ�$�
��9�/L-�z�6� j���*2�"6��Ԇ���N:�O�����}C�6��gD�\TL�����ؚ���~5�#a�ѝ��+!�2��A�v&D�ba��x:f��>laSCFbc�&�\�58^4�M���gm�_4wJO���/�sP)wI~
- ��k�����&.�-%U��B��^4|�6�]���mIY�پ��
#�73�
R�@��5�U�K>}�y韅��>�
�v
`.
�<��ԇ5d�]pE1
hylks�=�)؝%�ui
����C���D'��ր�\Xd6$�
xJ'��e�ք��(��1-�4�1!�5�ev��T0G������Wr:W&1׵O۾�/���F�09��e$�|�=��
�0�F��jPOk�:&īd�B�
-+x��Q��-O�Y
6�NGP
��B�
���a��V�)!5��F:,��V�. at s=@�ƍ,Ԟe�qD�����

-p��"���H��%��`�A=�;��l}Z
�e�f)��Y��98�Iآ�RD
-��(e�1�Ã�/m����$��6EDU�
�w����VH��Y�;Ӱk�ge�Y��~
VP!I��W
T3:�r.&����KO�(M���k5��r0����+w�^����x!��`PÆ��ՁE0~*z�{�V�9J+,Q�)f�껦/�m�o�".l���\���<�;,����(%�WȜ�J�1��
��&p~�1ff��+|^�|�qX���|�.Fr��$��x�
���
[�6Q �y�}�7)�d ����O��E4
�����^��`{��ڙ����
}wR�\Fzy�i�"��L
\�ʦČlB
�ؠ
W���s1��3M��D��̒ۢj��e���d�Fd�k�T�&,�%�
��>�j�0�ͪ
-zO�ƕ�����͞i�����)XNXC���ǐ*{�����(�c
۸��D���4���_
R��@�[�����2���9\��H��o[��
�W���ml�C�?X	�V6:�n@
-�	�#��d����֘Ա�q�1-�+tN�§�-JL��*1�*f�_!BU�l�� 5��#�:
& 0; g4EԌ���
K��w��g�����_�Z�x$��`�
-V���yw�ױ3I*�?���	��;�ɋ,��c@��

J�*`�,
,������
5�j���K����ɶQ���>QB�Ů��d}��w�'w� �)#�
��P[o����h�@���
�����~�Pj3F"��t;���w`��	7we}䀜���/�2�/���)rq耘
ԭI�q��[i#�q�9�~k����p�7�9�ń��L��$A
X�_�n�JG�
-�wE�h���
�RZM����9�2��[��}k����~=e"6����F�ߙ��b�O6��+X��؛�'u��}b|T�)��ִ�o n���Bn�r���{�<f�A���ȷ
->2f����x������h�����̊x�`��pK�e�'-ߧ4\�E�{	��^Tǣ�}��N�{ře����� PA��!��`U(�YXؠ���juPNnH[�ȃe)c��DՄ���R���{A%�ee�������ǡ�GП�I�У�f`�b)dp��߀x%f�;��|b�?���Q:�Z:1f�"���W|JzsX˄���o�_�}�{T�1ئ%i�U�u����#�o�d,q@�l����N��O���q�X����C��"
���I3
�}9�`t���B�E�xǹ�Q�y��(��7p��V��������t^�.�ʃ����"v�,b�� >���J
-��.+�JbMXAi������川Ww&��)��5�y���{g���<��'맹g��/�7³���,�t�u�Y���o�'�\|�&�����k���xc��]�C�y���w���gP�w"�_�ˊ�zyi���}�q�mw���hp爚r�X���{�hu)=��SZ�K���+?�>���+�^��)���Y�nM���o���'��ql��I��*I������s��\LP�lu��>k}^s<����M�:�"�jw�T�1;Br1.��{'��"=s�|˓�J9W~���rv����	
���@?V�gX
�1A��O�\�\υ�~+��W'�|R
`O���
t�@�$��9����
-�8��g��ޗ�fU�U��3+\Ff��~�̧GM����O
�yH����'�z�E~%�4ia�V��V�8e�F����3Q	=�B��5_�>�9�=��(������W��呞k6߄t\L���
�=�
p�昑GLX�~LY$CA%��3�u��\����C*x~�Nl�_c�v�\�zpy�����3)C�~'�1� ��-3��k|Af������n/pZ�i�)���ٞ�{ş.�
��x�xbg	x.�ss�P������[�
�^�o2�fJ[P8�
4'�eu��"Z�$��N�0��%���E�I0����1	��LԞ�����{�;w�j15���{�:N��j;��_
--JbJ��=#�;m��2i����U�
-�"�V\��J�(� 'EI��#j
jw
���Y���[#]'@\� ���sQQ
����"o����b�k��9Z�G�n�����wެO;���V�y�|�w���k ��/K������iv�{���i1�O �pMu�ߞj?��
-b�;�����>5��I�>|g�QS�P%�ig����<��_��� �U�[C2l�	[�=/�)����<�H���"��=�mٞ�4l��\�>��m�W��9v��k/ZN�􄺌�
(��.)� �_WD���-@��w�t�!�Di
)�w⺁���ޘ��\}���
����jR} ���쳾�
�`6j��|㕢����f��=+R"K�2|mLO��
<L�x��d{���>
-���
���6*m��j�6�ԭ���E������ӈ˞Y����&i!C~��p?���:&ũ$�d�}y8 �g�
��i���ᎂ��&���>�.ҿh?�6����x(
k���Q���7m'}�m��f�L�9����gI
��9�s�=��iٔ����.A�{�P��q�n����`�!m$
�Y=1����V6)��5D�������9(�����i��3��k�Z��V�`{�Y�z>��f�A���`����	�x�������Kj��E|ɞ���`�326<ed��Jr�O!��.��@=q�KXz��v|����X��=��`DFo���519�=!�#������u�i$�����XXA�JY��=[�$�gA�f�/�^��k=���J��
H����@�� �'Ap>��5�
��9|�w�\P2ZF1hdfB�E��շ�3�Bi���&
��q�׺!������,�Ub�s��g�#׻$@���1�����f���2v>/��e��9d�˘
��
���u���������U��r<�1mfa��1e��S�|��v��Aŵ\dV�{���\�]g�F)�~t�'a����7�������"�;��.�ܽ���hÉ�ihNHMm
k{�;�����S�p1��
-q}�S�ռ�䛕�-�î�s��
-͏����)#�=c�A�m
��
���������ܘQč�̸���p`L�"K��:���N�L���Ef��(�&�x��
]U�
-}���T��?uNw_	(IMA
�p/�OE��*p�#zJs\����#�uJ��]�^O�ل�ա����d��=+����e�T�ۣ���/j������/C������Æ�iHņ�gH�`
�zzW\K��- *��-��T�_IjH���GQ�{<`��
-|]��D� '
�u_J�I�13�p�q+��s�2z�JBCf��\Q��B����
^9�jc���[buEu\Ҟc�i��g� �����K�ZP�aq
�b�\�*m�>vF�G
 ^α#��ގ鑷��]�c�>ye���Z�_N�������6��a��LY��iؕ�aع��9�ă�����"�����k����͗m'�:����q���*
,�b��������BH�r*���_�ՆT�G�z�ְ=�yZ9P��W
������8 
E�����9c2�f>5��Ul�V����S�{�Ր�
��C!>���󔺸��I��V�z�a��R\���~�r��Ƀ����ѝ03 ɬ�:�f��K��8�u�Ī_V��1�#cg��
,\XCo
��
)��J|������*l���^aR#�m��s]�
'��m�
-�&�~Y/~}�Y�2���JI�3��V6��|C
<�/Rk"
-	+�����s��/���.y1���d��⸉Oڞ���t�D��I��۞�^��:�9�y�5�K%w��g��I����UY
IiX=���
���/
/n
�P>���1�
-��z!�+#U�����O�_��*y
���
)�vL' �

��-�t����}S���
-�%���W��՝�Yd��
�p�

��:�f�>XHM��BC��
�0�K
��Z~��	i�Ġ�G�A^Z�-�t�~����Z�ŵL���B�/|q���d��X���e

h�����~���Yxu��u
�`S�땡+
#����\���W���צ���^.,�ؙ}~IA���X00��<s����O;p����&�m7��~���o\��?���[{Z|Oǂ��=i
�=m�U$
�¸��0Q�6'qy�	NK@~�7c2>�1q�|�O�s��cç�qBIF��p
c
-fE�%�ٺB��̳@��X�I#��7���/��v�� ��*�%�÷�lY���z�Q-�+�
j���s�R�6���=F*���D�_�
\ڂk�)��lM�}p.�Ê@����E\���cα��q�a_'�f,b�O�h���e�Q�>�0�g#]��'6G����1�Rz1��!�7p�q#�a��N��B����_7
�K�|d�_�G�0��`��:r��*��˖�?c�@k't����s�̜��ѳ�9Z5�1?l���mwq
�
聩���"dz��ʭYtnX�ǥ�|bBOo
��5c]'6Gێ�[�V�Ufw�ں𵰜�Wq{Rz��zRmDC��Ѽoq��"~�}��4����
n�&���:fWN��>�Z��O�ڝ�\X����p�ɴ����.�Ϭ��'�|z,{�U��	��X�ՁǙUɽ�L�T�g
y-���;wC@;��c�G�}��u�`@�S����X���
-v-�Ŗg�{e�R���t�-
d��G�@�F�����_�_�h���I$�_�iy}k�W��f+���������J{r��g]3�KQP��\6�1y��5&�{f���+��
�pa5���������?D�$���pz���^	J	5�;��������&e
�
0
5�W�3>�e�W��b����~�箱�
��I����������ʎ
9lv��a�#G�
9r��ȑ�fG�
6;r�ّ#�͎
9lv��a�#G�
9r��ȑ�fG�
6;r�ّ#�͎
9lv��a�#G�
9r��ȑ�fG�
6;r�ّ#�͎
9lv��a�#G�
9r��ȑ�fG�
6;r�ّ#�͎
9lv��a�#G�
9r��ȑ�fG�
6;r�ّ#�͎
9lv��a�#G�
9r��ȑ�fG�
6;r�ّ#�͎
9lv��a�#G�����Xݱ�C�wǏ�R�%6⣎���U^���7!Xl
󣺏���1�%�@�"��cy�W�]�|�|A>v�?�<6:V�$�T��f��9y�
���|t�Xα [...]
-�)��5��b��$4�;�-
Jiu	��Q��E�3ɇ�����3���
��~�]�����+	�5�`S:q{
-ve�U�q�0�sri�}�)"�ИR
�!9�!�`�ǵ<l���M�%�U�'�%z���I���� czjG��!�>�砢*ZsXA�	+�m~9�6�f�&����SΙ��)=�q��#
X�܌YĎ�9q��w�U1��
7�r|JR�W�/
�1JY9�C��y�
9��1�u>��a�Z6֯"7����Uɣ��KNZ�؄��KYX��_U��:Bu\K��`dz�iI37ѡQԐj�ZJc��B�
�֔�K�XzE	�

�2s�	#��U�<rlYTDŽ%-L䁍��yE��8��r�$i��|�W�F���v@��L�� �����Ӵ�޻��0i��&.!cga���c&ZW��Dd�V�VК�:
!a��8a23�B��J�@��DE
���	�
�㪃
-|�g_'�x��ST
�&
ٞ˘R�8&�;G.K�X�{�q
�0Q��*\UBCn���cT�&�
6�9O(	�������"�1�1�3bz6"�������Y�b��
�q���_	�ov5���Hj1�	
�$��4��Ԧ��
�%�����L���ANz&�W������\�V�
�{������ �A.�b:.ҿ��
���g����_�2��I��7
-�q��� �4�h	�����T��&$ebB3VwEԛ0�� ��!�+��jIh9�8�?�<:k��姆oe}
��&DĨ\B�I��w� ��_���5�v*.���ʠ�\;w���ꡪ��KlD�$b���W^����
-[�P�J� k�&=n��پ����
8$��V
%f�A,�2�2˒;	#�g
�5,�7�d�洞ٕ6�:2fZG�@m��Y
)���Б�bJ|e�b��Ť-|r�$���bN�:03�
V��qC/;i��<Z�§�@�gs!f�C���ϭMB/e
�'���')��7�"���Ó���)#�2�b:LqƊ�����!�_/��m��x�����ڒ0��26RK�Ji�hpe�y������3=x�o{�>a��bͮs˫��t<����s����2��]O?e{0��}4��.�#ք
,x&ۗ��!�1Ħ����Y"N���=;��M3cg�f
1��u���^�
D�$���l���^��@�,t�sϷ��Y�<T*��:�Ч7ͮ?������c�����_v
-�*3V#�r2i������b��M at O�ب�Rю�R�p`^=�{~��S�8�,��e�Bzj��D�w�ɶ�J6�#>a���<�[Jc 0EO��3�:\�w��5�sfw�Xҋ�N)�b�-��{�t+8�m�Ȩ�1%�"����F^U?l�l{{3���*z�g����T�� [...]
-> �(i�)S_\/��tlHBOn޳��hă�Ci���uQ-��KxA5��w��BlB�����\�=/���Aٟ��۾
ψq�n���hw�x�?A���=��gl/��\
�<�}����KHnR˧F �{����ﻮ���ⴞP�֡
-�B}�W��7K�}{_߾M,<px	#�-�&iq������5�z:6l�(d�b�>X�-6luƊ*�K�/D�i��@@��,����<��H���ޡ��O��ؘÅ�5��1��
?6��+��j߽�J�`�.d'�\�K�/���r�Af��>�������&y��>�GK�-!%</���G��B���O�����9H�����	Mۨ�I3�*m���]sN���Ӻ���ߤ��"z.&�ft�5������8�̲�7i�R ��׆�3�{�c�����GJXui
�qo��J���	[��"Ty��
��
-������l2I1#�=�cC����3�2�3��������q�Xj
,�&�E
�����ԑj��<닺���J3֧K�3�1��W�1�;3rK�L�$
���Y�K��%	c/+��#*VgB�~�?�)'V(
6}�2�:��Ԭ���T��K�ZJǾ)۷N�	뙐
�c\3��	7�yF}T�l�))u	m��0�!n`!�1g}�g{���s�pk}�tkg�T^�5��	��3�|��XQҚb:z�c
��
'��

u\���!A�V�@nL�� �!
�
��� q�I8 �?���Q=�4�D�ո���T� �
�0�rv�w���R@^�+}R�
�D���j\�lsM�s���\�
��5I�
�b�l���yX���꾈*�i���6�9�l�z%y`
x���+Cl��}�n�������I�am��
հ�2&!+m
�m}}�f��"i�`bzFg��A���=0��&R��
S�0��}
u߂�Q���=
��G� ~��H�3��(�刖	��N����S���$�|Ff]�8�"�$����r� ȋ{	

1�Xp�k"���@�Y�S V��f콒l����X�o�R
\ƾ�C�_�P�6<�"���
-k�M�^�i��g�S�Z{\���6�{�@�	�imAU?'a���X�lߥ������13z�&6�`C�4�*�/��|�Y���l	�㖸�Լ�``:J��
�`s�\���y�k?�
3c	� RFRc\�ueg����
�f��%�
<K�������ӎ;/�`lmc=��K�[i
�i�*`f�$��
��j��Ք��
-_����zr#���q=��+'��,���ʡހFD���-Q%�ط����y�M!-���/��j�k��Ĥ��
)��a5�|yXM�K詭���#Ȝ����`He��k�5�,�&W��nzf�E�I�e.��o'��G�btL.�F)U�%�M7��͉���]�
�z�k�8np����v#$o?Vt�
)�WC2TATς����Yl��#w�ؙ0o
~:?(C݈�177�����lx�v:��eF4�f�
4gc�囍�M_n�i��3��ߘA��r�e�1��@/� fdL�z�	����-�s}�~����{��M�T�XO��!	��0
������@Bp�q7���t���;�k��a�
fֺ��:��y�{�r��	6����4�<>)����G�*@�%a����1��pp!#x*�uD��}�XS
c�8�����qV�I8YU1;�d}ww}����Z��qN(�8K-	jKϻ'K�lO ê��"FFa���Ƭ"V�*M���?�\�&�A [...]
-�1�r�r�T�57�E�-�qGuKbV,���aS迼����ԐA at J��Z���~
#t��䀞���$=��|����VR�"!=f�{
wִ"�Uٙ�T�f8���V
��s�3B��
��Z�<fk����h&�y��CsT?I8��A�� r�v�2]heiH�,�N�ﺧ�I>-9�o��@
�ֆW{��Q��V�k�~�*��3#Qx��lSG֏m�c$����3��
T�H��L��-����4�wx�{qT�1un̽Ü�N�3!?���R�8��(��]vb���`�ʇ���܀��#�Ʉ�i	���}����BW�O�]�Ӿ)^E�$d��nx��
%h���0����򓆶�}O�2!���?&��
����q��#U�=��qR�k��J at IJ�L�
�Ԕ��Y at qOSR6F*����0��S�[�Ð��+�N?K�A���ǏVVՎ�U�B�"?�
'�sO����;��s����VB�s^�Y�JZ�{�p����|g�A� ��RO�Vҥ؞�]�,
ZI
-����Y������F!��,
>_����)r�g�x? Z��
��
��E,����aSM}�\���
[ؕ=)�
\3�[���0--nS4��ʈ�Y�0����ˣ`
)է%��̔ܘ�Y� ��Z_��-#dB���Oڜ&?��P3��W����p���9�"�����D�p��^�0[�)��K2	H~
�Y '�
�oav�E�ߗ���󒚨�Y��ⓐ�E`~�f�0�g�Q��
|0�~� 0�_K�
�g���=ZZv�&�D
I�!��f%���|DsJ�Y1��L
�5�
[���d�q��!���(䫈y�*��g n���
����2� ��Cm#�ʩ�<&��k��)��o�Ze>7�a������18�i
-d�mB�U��D|�ګ���ؓ�o�Mʷ�#�k�Jv���p����i���W晢e�'���ȳ��oˏ���������Q��Qz
-�%�b�ٍѢ����S%g\�%g�SH
�i�Y֗��j9/���Qsf���Y�g�54e}����n�

x��ml�<�҅:�c`WD��� 
�Z?��rw��y��� �9J}��*cf
1j�`�����}EGL/R�_�,8���Z�<�
�<��=M�pORS6�q�6G�ZN��*�k��Ʃia��аKV��3��~��Sqf�{��u:0���Xł �Lj~UD+e��
-i�(��Ք4�24�ҸE�ؙ��mjE
�i�@Kuc�"d �D]�j�)�&.�m
YjA�9A�f�5L�0�J�2�̨�G��i%P���!K�:�
-���G%�h�YF��EJ�G���E&�Yk����'8��B�����3
-6�3�KO�AK)�r O�FZA�D/
-ۤ2�I@�l$�٪�1;b�`�V�y��
-:�
����
�
��A0bv!7`b�����V�)��!ya`^����9A��QS���&E4/h���v�Ȯ
-���yM�.��l�μX��iE�%6�h���gDⰝ�C|fg�H��E&� �F��+�
�����
#�F^#�rSMJ�l
�Q�"�hx�W<
�
���뚢�
rE�T]�S��<�0V��{��+�zV��jz��5y��5Bz�d�E,����\�����K/��
���Q�-�8-�;*��
�,|d������?�c�Q� ���
�Lb�5�M��;؄(�{���<\yy���0���x&��If�� ���%u{��0<E�
-O�
WzP�
OR�^ �Q�"?
-Ǹ��77Qgܣ��m��~`��a�݈^D�@]�uB�{wg{��d`u!��%Euػ�ۄ2*���5�7�-	���(h_��#G-�­��3�)6:���7Gh)���):8�*+�a�$����6����[|"�P�Z	3�B!.�f2�I���H?:��������0���׈�Q{�ˠ��ߞ@|������9�0�H�6)�D�5�VKDA#)˧.>�Ӗ_�)
5?����p�<�[����:akz�pr��YRn��>���
�c6E
�f��M"ky1����pM��CFZ�.�u�Χ
�2����̲��cWU�:�+kKo�V�4f��V&*jg�#ȿV.h�T�+�g�JEa듑0d��M� N�B/�i��~-�<l�
7��w\S����hQS}�y��' o"π&��BJ�Q��Y��� �h���1GC�<�
࿘��E�W�����
D� 0*��Q`���,�gF$�����QLG��m|�����諄��u���u�>�Yek#�{�}����j~��d8�2J8~ݓ.����6=~���*�&-l��"vy�_-&u
-aPW��e�O��ӄ�k��;�#ԇa��
5
h�Q�=�(�0�j�w�+(����QN���r7��� �ND+a {܍�AkM2!�<� ���`�oK���\c�ԨN&��j���m�StX%����Ⱥ�w{k�+㇍���� �܇��ҍ:�	���&$��f
�{�����r5+/��j�I~y2�w��{��o,��o��\P��->>�p�uv�s=f�
-�fE
dkA��Ň�L�_�,�[aL�,�&丠R����lO��W?�
u
�_�OR3�*F~P�*��l��lA.�kE�]� �/%n��A�`>�{��|���
/��(hP���
6=
[k[���� d7dt��_��>}�tbzH+�!3�
f��@���⸓��9���ꧠ�
-`��i9�R��]��:f�#&#��;�h�X��� W�t2N� ��<{�<�ea�L��	���z	ï�
��֥1je��
4p*w�"�.���
������CLr���l�
��
L��Xq������M.
�eB����C]��D����=jR(�*V�G�
,`���5��q�X�=�[:����E���aN�3�/v�����
㴭�@s�u��8�a��О�7w���
x����qFF�"�v���Q
ʣnhrk��o�_��
O��pKM�Z%%mLK�뺺��6�]�$l�C��A3�'%�<���ݚV�]��ҨQ&��$<�ur����+�C�&�<c�
��Z���N�A]��D
2A
�
-j�F�uݝ}�5Zyׯg�.��]
N����Q��5�%!�L�=ͯZ쩺�:���:D{4�^u�;€�C��N
�
��
ѲQ�]y����

��(7����k�E�����1��O�y.��Y|[zz{��;�Y~r��x7�2w�>��o�b��̼�!��	�CȢ��!jZ�$�
��mB�9ae���|O�Q�3�c�l��W�2ӂS��;p	���I�5���2c�����#�d��_�؍��b}�i�P�!�¯c΍��٘$�F�
m
]m�[# ���߄�
l�#C�hyU�i�7��ͯ�P�F
6b�#6.11�c}\_��J�6�`Р��K1�	Gu3��!����8�h�Z�d��*	a۰F�(���F�Gjkg�|��!�GM�6n�D8�I&^S
-���~e57fsb
9h`�m�i����R�V�$hn|��pPn����� +!�c��|z^�%;j�C)�5.�
∹�1l��M��;sBAbVZ
������\Z}��&�NƊX��c3��c��"�J������6	i���S‰ öǽ~s]k�\���yq��U&ٵ	YȚ��U�%Փ�ۛ�g�+�ַ��5�U���� ֣�MBV� d��\��u�������(��[@�K�E�����5�`-
3R��ƝYY}bN�
Y�$�VL�i�[S�\�ZP��b��-E���e�N�?��z�캰NL�N��g:�oOӖǰ����D�����>��p�

�dc���؃��>LI2t�/
�
�Y�&f��dH-��P�~=5wm����g���~*E[S�����K�i>�R}*Z��ksi�#��rg�o�^̝W��{
������w�����K
BF�(���WbZ��,��.8
�3�?.�ea�������1��!쭐V at v�hus�O�
B|@�r<h�
���
cgk
g���{��� ���%y�:���D-�J�p����Qs�_��9K#����0h�֔�ʣSBƧ}!s�K���чx��OpO�r<�b�[Y#Z��Ԉ�;��
Gu��
��f�J)��nA�,w��ĥAr�^q���!jo��;��ڧ��@���j*nt䌠ZD
L��am0[��Ĭ�!l�3��a`� ��3
-�
��4g'�fLS_�\s	C��!��|ra�9�$�ĥeU,����b�Kër��Y~#�
=*�#}���	���ғ��7���0���
Zi�!�,�%L�∭�auRL\
��C�4B6yuT7E
�
�YY
�4ᐈ]���~��#�ɚz����&�i�T�8�{�7v"��q�E���e3��/Ͼ�g�
����u�ʼnj�K[-�;�_�
b�[�,[#=
�E�IJJ��,��F��b0�a�u�NDڂ\�>���3'����Yp���i1֧���g
=�0��dzV|�5�(M8�{4R�G#c��w:�=�|LP#$��%	
}��n)���4��U �����
-�R�׽���~���L2��
0 y����"$�
W^�}St�=BI�D��^Hv����Z�k����<TB�Rs�a
��;AKS��*+>�?��vœm
���g�G
N�"���w�'�۞����]�KBCʈ:�*�݀FB?�
x&b�]r�r�F`J&��fnN���
�*�7�`yF�h���;%�Pv�βr�~�=,��-�.��>�E��1�Zd�=�Fd��=��C����&�У��<Zǧȵ�0p��P�6̹��Bڎ��5���">9���c�����3w���~�y�{$�h�	���y
M/�:���
��~�,l`�<���JPԉ�+�	XQ�@�����u >]ELZ!�r��
-�Ꚁ�Q
6�H;��Q�\�
��f���+Դ�A��m5��'���䂰��#�lmW���B����ؚ�g�va/m

J�
�j��ƺ�]"���T�
٠��!~�� ;3f���%	C�8:�3��0�G �?f
"F��Ɩ�
�2�{27��ϵ>ӓ>�ny�F��i�9^(
����2Y�V��5����-
<
)l+>ΉeQ��a����
�����x��
\ȩ�9���y	�gR�ZkЮ�s�$$�VDX��e���No
o��9�PGx?d'�F��C��G5"��$#kc��̓�=�H�w,��-�Þ�Lr��jv��+�;�-ݚ���R�GY9�[D��g�|�������XQ�B٥�=�-wM�r�S̜�!�0��w�]҈���ׯ
U]s�.>��^p��[q>4	�m���	��ܸ�F
7V�|S�<���L�
�+n$LĬ�Ѣ� 3]�k���Ւ�FL�뀧`~vfy��Y&a���"kUa]�,�{�Զ�
-
^5�bm����{�iG���9�Vآ���E��1���~Mkw�TS�7r�6��n�Ԅ�~%%j��Ff�W
ܦ���k�d�ڬk���=[*���,�ĮI,�� {
��
>��� �g��~�\�9�H_�#�
L�B��j�<����ojh�z}�
�pqA#�t8(agU��G��ܣ!
�(f�i c�kh
[�\ç�8�����
j�W���
'���ЃF>>�qַ��ն!�lR�����
ூ.�c����n���K�VE,�H���G�C^ۜ��s	~�ӑ���*��M����ڧa�c0���
45<w���iFV�Y�G^35Oc�
-�����6�Q1[�k�V��P*ASKo�y}N�s���0s	[���M$��J�W����l�띥���lM[�*B��
7WׁǾ�;�1��YoN̊�3��KQ�
�K#3�:�V�
�\�^ʃz�#{Ђzm
w�5E��#��4"��0+�3) ����ٱ�
-c&B��P���wi߯�/:@�C�.�!:�����0��Ǝ����Y;��P5
d�$=3��s�G�E��
d��J_����
�)fٮM^
PҲ*Z�O	̯�W��r���R~�
(=
�
5s��zzAPE�
j8������T5ۣ�d�v���ECoP��1�h��]��HP[�1��1j��
��
�AX�,��%ܘ]^���L*�)�C�|ߘ��;�G������V�ӱQ~�\�h��3%��U5b`�O�O�LT\
O��<r�5��}JzvX/� ,/	�Y~𷐉��7ҋ�ȵiks��P��54>�ꟍ�M�/!S�F
.j`��T��0ԛ�\-[�Z���a���lgF"۱q�Q%/d$��8he�vzYȈ���ӽ	/j���"�}ȵC#�g������G��P�1Uq#`����6�YH�2Kx>�S$��)3�,l�`"V�{K�ӨCV0r*�fi�H����k��W'��vych��
-�{"�'cA�
=pb7�Uc�Y�4�lx�ZE��"�<h�`wf��0
���ݹ���z�ά��;��Bݲg���V�CfEݖ�G	X��@�7�2����Q�X��sv|��T���l���\];�\�x��lc�>d-7j��cȱ8�uȞ���^��@���y;�r�#b	�۫c"��q໸4t�k ���c�t�J�X7����.�y�
=32JZ����=ɇ\C�7��ˆ�O�� ���EM
-)�d[JV��$���d�M������;�
-���7Ӈ>T�J������1���x��w�;�THM/��T���o{/��ѳ�X��ه]�y�B�䂘Q@	�����rd��	�4��k�[��C��a��+�B.!�d\�ʧb#�$�:

��[�vf��:�����]�����"6Z�W�K���Y!���
����J�=+d�܋[��&Z��0#��+�Y[�b\X��4��ң�!rzT/d$�BN at G/ܚ@_�
E���1�
2a at +"�M\|PO+��!3�|wF�ݝ��x ���
-h%��B��i��+a�*b;�_�x�21#����߇
�ϑ�ل],�}N��8˥~��}��[����6'�����T�
��O��_ǭ��b&�ģ�m�U��	�
�Q*�����-�����]tA��V$!�2���D��Sm�O��
yĸSZ�;/�Eg�8��Zq�p�j	�`c�֦
-9ڴ!���LuKb����R�`b^�q�A+����AA�
;�
�^�y2S��fE�A�,C�_
���5MI�ؘ�)�� ��a��}t��;�Ն
N�ƪ
X��^3�*1[�2b�)�0>�
��H�1Qt>
��T]t8l�I�/���Ao4Ɲ"~�*�9a!G��fN�G���ua����a
>'1#���+�F
b�[��9Ry�_5��P9>5%'��"���	Só
��r3f������ ٟ��B�W�~�Dl
-��AmC�P��o�P
�U-/�S
-�gB��
b��F�9A
���1�-�8�z�L.܅Z�k�X�R.�k�#���(��/; �Q��j���G��NE�A�&��<B���n��y���a=��UV���غ+�'@O�3�eF��t����5dJvPOL�ٕ

��Cx�w�[?����9I��s�9ץ�c]:F�s{ͥ��f�-%�$����i[:��&����>����_|lk
s5d3�����c��(0Ʈ��������A��슐�S�G�{͊j��O�R2� �7ǭRQaK�r4%�m ���fv�����H�Z���g�s"��@/
�9ؠ�G��ٌ�;��SV�
�
[��aܷUR����ޣ~�֧{�>S�m�U���IVV����6�٥��MR0״��5M{=��-+5KIz0
-؉��7A'�ⵑs�&r�GGL	8H�!;�?��Hb��+>S�8u��X�[�cp�~��^dM�+be�}���Q3�D��YX�	���,����]�P�ԬWK�\���2�ˑk(�7xa�D�ֶEg��Dg�y�C6!�o��v�
jY�

���8r��-� ��
�?�]� d!7䰄��>a�nL8dջ� f㑐}������Yl��E|N
-�(�g�C�C�Aָ�:|�����>��;㖚����>b��uPd�R��@u�B����V������*9ۭ�s��D؀V@�ØGl<�[��������
v��/�F>�5N~�9AM�,lͧ ��pr�1�b���
���>%��c-2D�B+���w]�U�g:�^ySv)���cVo
z#l����W	�Ą��E�$��8}Zz�F�L_`U�g?�Z��
R)dg�Q�R悦9�����d� �̈~�~����|F>aS�,�4p+�
���	F����Ѩ�������S�D�}��hu��
-y$ӫd�Ǭ�oy
0|q@��E�5
ȵ����m�Y�r����Y
"�̾����)��v
yw��L�r��k�sB>r
:hq �7�
2pdhut�y(��3
�Њ\jj���o���&Y!]���i����
��>�\��
-�%���M9���on�
-�Z����]*	:D\���vM�y���T�(^
�x����֖>d�-��؟��y���~�s�g��`C����c~��6��m5OW�"ҦN��X9U;vZ鎍�٘ �߅L�o��
V������B7���0���(�N��D'�"
�1y%h}�	��^���/H k�Ⱦ�T���F�e�:	˧��:~��(��,B*d3\��F���"�_�T2�O��xT,`[>��6��Q�$KCOr"v71'����"N���8`�U� k��<����Y̅����ŭ�
п�A������V�+.?���R�[�'��1�<�
՞�jn@ˇ|ɮpAX
F��N3�b�p�.���P|~c�Q�+�1�L��
�u
-�	'
��էg�-�3\Sr�=�砂
-�sRvP
l���T��pt�&bu��:S�
ǧ�b��樥�-nW4�8�l��������!��7)�cD,��6r�#w�wmm;l&��u���uȘ�qw���
-ٯ��a���0N!���\߆9F��a
�u!+�
-Y�ܘ`���"fZ�OOL�iy���L��6�6��=NNy}
�sg^?P=jN����
-�&�ȞQ'r
�<b퀚۝����������,
B��g���[b
�'�EklV�j�fg��mwQ�<6'��B��4=��.l�k��%l���6�h�}lB(L
4��Q��&�+`���Y������k�`�Q�4 �Lj�˜
*>�:"!m�;L
�
��R�
\�>�>>�
\wH���+A���mx�
Z^�A���,03Q�J�}��(�g�~��U�g^���!��2CY
����Gmq�����*�Fi��!?�T��Ml��
�3���	�)�"lm��8�$=ck���3����"��CZZ�g�t{��(��c�������A�
��
ˏ@�@n��ԬB��U5�ݝ�u#�^H��D�}N�Vʈ�䰞W��o
>ףd��u\��43gi����O�9FJ
-i)Y�iZֶ���>FK����I��*/o���@��JF�I*�1���nK�~u�V��H�^���cR��=�x�qV ���!�标R�ƙ�>̬����k�Q������0Z�Ka��Ƅt������=N|���͏�G,��)�W����Ԝ���
5Sr�&bV@ϩ�e�(xrM4��Z^��hiO�ޫ)���Q��	'���� /
"z�&�� ���QQ35/bdB�QB&6�ݠY.��
�L/���n��wbfNU
<
�^�	��8ȑ͈��,
-%�8{�sV��I����o^�
�cO���5���*�D�l��

�^1%;f�$@�#�|��D�3_�
�^�q���,�d
���� /y!���4��!{
x��&I�k[%����
�X��S浂ך_��ֶ鰣�~
�r�!+�,`ħ����l�cn�^�	Co�f��Fgd�>=�<dP�ٗ�4�
�򄳶5f�m�k�E����F�
L��
����;6��qg��x|�a �P�|�)���a�FF��@�
�%A#�4�hS%$�̵mq�`8a��e�cVF����RW�o�}�+˽�ۋ��K�	F�w�����5J���Syv����bGᡨ���3KBZNY�OEM���!-�(��b��ϴ��I�!���W���IV�k�ᝢg�'���Hw6G	�6�99˃������>%�GIz腺��i�cĻ�W��[�
Z��WK�~
��
T�K<J�ݭ���!=5o{���a�ŵ�GȢq���U�
#'m�o���7�:zޮ��T�K8D�����
��T̼
`���Y�1T~~�}ɯ�QVND#e�n
!���O�;$��������F���}�Q�4j��w(P��6��p�����066bb�U�ԭ1�Y*�!��!�ĀiC��!3�2�
-����>%=�e�"��6��kc�,���
6�!�P�v�<B��)�X����B6r/*�.
�����==Yoȍ¹�L�컉�e\`��|��%��
R����Ci�Y�q�m�� ��R��28��9
-=wԴĜb�ߌdf�6̏
�Ck����!>$��ϊ�a+1S��&zq �+���%����%xɓ��G�;����\��U�
,���/ӓ���f���nc�U�ԋ���)Q�g$wy�)��ICF!ţ�W,q����	����s����䰖�Ӳː=�1gMk�Y�Y�L��u�a�#!)�<*z��`������
=U�������~���I�܇�܏�G�{�m��n[�0�.�%\��>\��]p���8��}���#����;J~u���!��o�%Թ��K�1�Ð�Q���N�
6)�����Xi+��ܓ켵A���ܙ�a�}dmv��C�o��e�g�T�X��]�ORR�ZJ��P奥��
�)j�WEJ����ꃵ~z��e�/�AZrDͯ����)�M�8���p�y�(�zXMI*���{�
��|���+]��}��a5��7I��&=�MR�7(w�Bt`J���X�8��;�/[���ᯬ�Z�G�sO��y4�T�Y�b��c#Z.rO�r/�Q�F��UlT�$�t�ʸ��E��(�45�7EK�sJ��1u�_%c��
-�k�����*�n�g��Ѕ�=(�iK}�K+���.�%�iF�{��QqJ~7���
-A�Yﯺ��O��b%l��dȨA@�O�K�����$5es�x}��o���`f{�eۣ��ZP�W�PC�{��k�)�Ø���O3s�
:
-��z
-�E,0�[+��bږ�^OMw+I���9�ü#{�Czf�G;�0��p
4�ZX��,�V�R�F�7���Yyˎ�O
��Q;�����:F�&��b���+����k

�{ں���ݘ�q��8d�_��Ԑ�6�i�^��
�u�8� ��9H�5
-����f��iN!�F
������=J�`�=�{RBZ�և�鐁�7G�.o��mO��ۚ����|cHP3��O%��5�A�nϿ����O���{n����z��J��F??k�=��)���q���n�>z�|󑪡��>�
��S�9JI�>������j7ᚫ�~��vwc����
-uB�X�o�>�a!}��Uu����
oʏ�'*o��+nl���7F%U[�*����1J�b���{⥵
⵰�]��+]Ƚ�#�T�(#
����`���+�K�-���a�,
�i�3�^�,�-��ὓ�e�=�E�n������V�&��F�M��M�H��2��(7���☥�t�̛�����_W��c:NE
r8��=�$=-b�#F>ޫ�D!�"kJq���s+N�ؖ��w+Y�[�ć����6�������G
�W6�Y�)4$�5L���&���.�~�:�l/�e�����[�E�3�?6����[�T�0��F?r)�v@)�܂�]��\T7���|V~��M���������o�'׻q�
��Gg^/@��V���6�o����7����h����;���w����(��'��Uri�"����Û�ث[�[#�]U�Wz�W=�
�Ana@)�
"�8��7{��Z��i����#D����tD*�k���i>j��|��Rq���'�<wo?=��ӂ�<�
�j�_IN��<�"b �����q����p�,:�ч��&�C��X�,�NP�5��ق��
ef"Gd�������[�o�j	=�em��n�T����^@��vc/.���_�!'o
n���2��|�8+j���e�{~�]�)kk�A}}���������3/���_�/�&��}�=��I�>�{j��tm��vr�o�e���9�J]��Z|�9mSxxT��Qq����'��U]݆�?x��E����ty�U�Μ����Yz���5&�\���y�D�[㜂��.w�Nz�p�|��;3/r�-}�]Y���觧l
�
�v�Nl���n
V\���d{[yfL���r'�ڎ^LGji�]��e'7��7�p�\��[��G�#Ԕ՞�K�		�7U'��b��1�ζ�o8_�O�Z��Ͽ�8��#���1s�z�7�1���R�`H�oX �SPkU��#F.��a{���T"b �?�Qr��V������y�/���_���m��m�S�|���f�����K�E?���bi.ٷ�E��KYn��b
����=A��҇�m�-����q�����57�_�ܚkG
Yz_q��R�O-��J-�������b'���ڨ���1q���ڒ�<�3�Q�Í>�uW?�
Õ�.ҕ�Z����%K�jV�Z��:�q#��s
�c���o͏�~������-9ji��R	a
9E�=�+�W�G�O�����
"?k8(����AN�_�ظ9"(��ă6����JLIR>b����i�~��3o���.t�_߱�
-7�O���N���Cm
R�&��Q�k at IϋA��h��M%�|��~��s|�-�����_���{��y?�ta�[_�.�I2/���!�[-U-5�=Uym�C���ߛZR���b.ڊOl�0r#&1k{����
ul�=�']S�n��??�
�S7�_���=3/p�ޑ�[Z�X��ϿŸ6��=�W/��?g����9[C���A^�|���������o5�y{g^aN����dR�u�����=�ɜ�^u�&�����[i/<8�,o�ڛ��k�p�O����|S�ҵn���QscƗ�ڴY�2�X2�̶�

�d�54W]�þ�h+?��Y~b�}�����c�ֲ*y�W��������

��		�=�+�
d&��n@�]��9i�44����X��fͽc��
�!�tK
��w�/���
-�35�����~X����az���� ��r7��*��|g�	ǫ�#����
��:_e��
�?��
��|m�t���VԡŎ��+�Gv��B�
]}G��
��lBm�u./wV��x^��DU���J/����6&,ui�D$[zUć
��S��/4�������T��/M-%^��@}��N[�%�6��0�L�����N�Ozx�_�_��-tQo���n��
���w=#��~�<3)����&�[cs�aу=�ɹ~�����Lq
2S:0'�-�MJ2?�g��)��e�ݿ
�s�Ͻ%�t�����so���^��VC����x]z��� �leH�1��\_�cexUuu+}�l}S��C�{�=����?)7�?3o�n��������-�G�4�g�
-�u�3��RQ�"i{���SIhn��nA��x�=�xV�%���v�)�#S�Tt:��W�cmɻ��%��U�Fd�^�.8��!���5m���C�)f�s�o\�ļ��J?���[�1�����䯦e��P���Ђ��YSᙿ���߱�.=<*J�t���� '��SҼ
2��M���!y��;?��R�ujj��tVߔ���6s��:��1A�gC���NH�~xCK��U��.w�

������ܘ�w�M��IQ򗽤�2V'}�xE���%]�{�z�=",}��܁>>�V��uX_����:w���xq��>h��@����[�ٍnV�l;��E��+�Q����f���#*Z�d'۞�N�|`%��Po�t�/.�ǜZ�,?�x�PӐ�W]���9�����{���U�,-e���e���E?��
|����.�����,��K~����3,H�|�:�[]c�w�'Y�V�0���v����
UAf�೴�Y{
��߁
��������%���2,J��`�/u��Zx��u����(x�Ŏ?�ko�k����b��F�i��A��UG�_�Z�T�:��,��S���}�-/#
4ێ:��E�kn�<��/�����L'��� 7����/�a/�[�G�O��{I��OJ�����<�8�C<��܄�𠶡���;f��
��5咡|B����T���
zZQ|��|�O�����w��_����mZ�򹱡�볲#����jR�Ts��W�K�>F
[�e�ۙ�'����S��� [...]
%�
�������
f~>���	A�'��φ9w?
`��l�
�7)�ʧ���I��x��y�U�fߔ�bl*�n������?M�r�� ��[|��������E�3Y����6���6�Nʭ��p��+�/��l���N�y������
J�R����	k[�O��G��"^��W��=)I������+j�a��W��3/+�/�ǟ_�ĝ3=E�$^�KgՅ?ku��:>{s������r{��|YS
)�)a59��:��0���^)z�[�;�N�bj-�������[܅�v
E�>Zʑ�t1����i*��O����s�
0�}����z�mʉ����Ô4���#�aF�
����	�p#���)I�}���^r����&d�
��|';K�n\��Մ���
��K�p�m��OK̼Ɯ�<G��>�\�+�����w�˖��}���{�?�/<������[i�m#>ܻ:c�L�oD��5��0�K�����_�)������H
5� 9��_�t��죦�G�Y^�-���ϓ�����T)����
�b
)�'i齯���W���K��W׺J�/�-<l{��k��'���<�����K�Dž:�wg�V$�v�Ͽ*9������ �̟
��|�a�[r��ҿ�4���ԉ>�$&-
`��`.FI=�'�[��hsS�>����3�sn~�9@{�
�և��������<��t2�qMC�wS�G�4�'1�2���iZ�`m귦VJ�Z��\�8��u`�.��aI�ϣ2���̌C3/H���z��-+Iے���%m��5�GGk�/
����
e�˯��%��
-�D�P���.�ۓ��Ji�?����Ϳ*?>�w�����yi��aj¥��r�J/����cs���g���̯�
e�;yY_�;���zX�~q��<�d=������
Pn����_�U\�K?��˽�K��+_
-
N�}c��3�{�Җ���q�^�Ÿ�uy?���5-N�n�-�z
��g���࿬
}S��3�\�����Y�t�2ʹ���^t�=��wk]䬘��qk���
���g{�7���>�:�{\rx�uXQ|r��W2�I�>�����;ܥ��+6`�qq�
糪k뽬�i���ګ�/`gϾ&���%�������2K60W�/�~�O
-�.�o�W�S�7�+�₽Cܬ�ZJ���7�Ӥ�ɖ�_�G�jθ���<1�N�Ǥ4u�܋���Ϸ�;ɷ�i�[�����֗�g7��s
�s
�
�
gf�`��ה
���o��^s��f��[�?�P�8�M�lD���/��nf�
~�	c;�f��������y��oBj>v
�� �s�W?�ZS�Z���}c���ʿ���K?�w���d�tU��ot���
|1.�����g��%6G)��8Iߨj�F�bZX/ m�S�

�{�-��Gũ_������Vݘ�):��7��ɫ�	����>�
Ms���7>}I��g���<VS�}|����
'go
cn�u���d�hx���5�+7�#\7�Ɯ�
���0�ޠ���/9��W~f
���
��j���5ڬ�/�3�O�r��%��������èN�
�k�k}r�R��|K�f}Q��Ғ��R��� '��o�n���)��R#]U��y�%��|;��������T[�������`���{H\��;��n�s���y��6�}m��✯�y�_rr�9[I����+Mm�뺆�Ӻ�ŸT���k��Z�D��
e�h�p7�mW<�B�B7醣���|?#s}�_��"^���}�Q|�|��MU��>���N��{j�%���ڝ���+�I7ֺ�(����c�K{ W݈[j[������y�G��[���1J�w���9��ѷ⯎W��5,a��}�]��Rq���w��F����e�Y|E�<	>(�8���7�ܰN�
�9%�)J�� ������+�8_�
�$
`�"M3��B7㾡�dߤ8�����S��N����)�GKk�~['-�
}��^^�)�
dg��fm��.��>1�^x�ؔ���K�����f�ï�K/�ƘY�}�k�'E�f^�\ꪸ0��蘾)�㫊Kx�_iJ�;�IW�S�B����to��
瞄>,��m�p [...]
����
�7��V�ԅ7Օ���pQ�F����퐷�	׷+>yT�|�شt�S�J<0Ґ��n���%%�,��>.���n���.7��p���t9+��\c���Q|
0�����*f�����R'.��l��K�1�f��L�w��n� �.vC>j��@
�^6�#Ϭ7\[
�qQ�}�pcC�������T@����]f����p����3FG{������N�3���s��w%!
9
�]t�ƀ�����W�����>ל�P[��R�J��ؚ�bOM�LF��,�BX�z�PW[
��%_�p��Ji�ϯ��=��W|��W0Q���ʚ��
-��X��x�yU΋0ۜ�h�%�K��nj�p�o:�x0������R0�^\���>R�a}��C
-�����uy��CL���<�8%k����JgY�'1`�yv[
��y̩
l^i���=e�}zJ�S����"C-#��%�K�ّW�_/{o��-�:���b�GƸ&��k�`�w
��=3��3E�q��n=�C��:]��S1�.%�S�K����2�
܊��mIѧ������v
��h�Csu�I$ޛ�b
RB��G����q���oWf����a�-a�=��}
�pk�$hc���U��񿻰�"���m@�-��>�
�z�D&�(�Y{SL�m���>DK��噚�����
���
-~
��ͅ�'S�c#&�|?.��V;o[�ʟn*{1�I�,e�\0դ>\k/�`��⑓3W�ߍ�E��*V��9۔0L9;Ό�܉��{7*��j'1m����"�/���힚�a"
�y�	d�Rw��ŮԻ���0S!��D��|gR����*�o������o�3��t ޞ���.�� Am���2f܍�>d�}��uɾ�Y�UQ�7���*X�G�'{�B��(=w�


�������*�#CǬ�T|��~�c�\���1AW�xu�	d��|�W�*��
��YC~w�[�SMCn�|���ܐ}[_�ys���KN�x2W#N�-g�_rˉ%�1J�Fo�Ǚ��[��yOև�1�#�,�g�d�7C�l
��<Ks+���{
+]/&�)w'�1l2d�g���+)���n5�R�aV	:z����fo�ˍ��W�
-D�R�
�<� <lG�L�*�Q}�����k#�32�j2��iX�=���T
�.e
�U�CFH\�,i��{fh.��4��Y�AG�����2L�j{���f苭at�S�Iq(�)�	T����t�2�r�ޝ�SH{�Q��JhQ3JVG!�}��: Wfx�	!=��%P,�󎡪ɢ�`�� �;���gݟkO�mnLy�k�'ڟ�W��ȥ���D�^�����T�șŶaJ�f?)j�ւI�1I��q��}���f���V��.|��01ŭ�T8�,�,�y}�qW΄8���qz�W�F8��|��jƄY�Q[#̌T�i����Z6��G�w�rl#��nr�Q\�p�m
��q�UEw�"���vt�k�	��0
cȨ�� ��̻

�/w|�f"d�6��()��-㎆W�n�x&1f�U�
}v������1Z
�9X�jmi�aS
�2��>Ӕ~���l��s{�):~�- ǯ�a�.���L0�
�6�G[0���ȋՅa�~M	Y;
-
��!VIɇ�n�K�,֥#C]:�.g���Y�8�*����)�h��oL�f����b3|1c��
h��k}�L��
�5��&����8�
-���U�fk:���f��
����V��![��h��R쯁lE�����CD�jxsm����{ˍ�A[�؜=
���0*�{��Q�
����g���B��
�9T�~�� P[��p�-;xw�\���}��gl*xx`�l�����dߴ�B>�G��


�5p�n%���B��^��S
��ŝ�`Ĝ�`���Ӟ9' q�o���%e�5L��W)%u�
�|
��O
/��JO�S�(.��,�K�,�
P��z�i�6�Y,	5�f��2�Ƒ1�c�b�p__ٸ7[ݶ����nQR
-�&��_�7��,�`c9�_�Jj����
�'� �K`�YE�u
��P�
g9,��Ra�(|��D�[G��
u
�>QE���͵�> R�
гpO�,�s)���<�JGq��1d��e1-��EO�o��_��,���H�:Wq
�J†�_��OKX�ć,4?���#���5?���>xօ)>>���ʹv1���H!J��"�#�ƯK�e�zě��7���nm�Q`�O�ǚ
-���7�
-��G�YK
ܴ)!.p���PC����Ms��ʷ��ӂʨ	4ᦁ�~jk��o�������
��ֶ��b�KA-�m*z��^_n�e��7b�;+s��_7:+
��y)K����v�
0�a"�N���
���9$([�~\�-rk1��*eo���7[����HƦ—3-%A�_Hr���s�����»�]%���_]#�L��^`�����+͂ԝ�z�ΰe�'�9� =��7�a{gkz�&��U9=oCN��V��<�\��$��`A6�a��e/v��q�j6�&�6W���
�8?#"F�FZk}�F/��r����`��}o���g�8��R������=z&n���l���m
}Zh+x��[�j�W[{��<=@�þ��2�|��sD�Xm�}�v��=�*�J'�� *zj
��n�bbwTT�w�^�QUī�߮K�a疻���ښJ�li��j����	h��!�~|�r;Ỗ]�D�,~<]�
77"�fZ
-��2�̵�ݛ�~��+-UXdج�ފ�m���i��-Tu���qk�wm]�}s[�}�{0���ϊ�'8��>b���������ƚ&�8$z�%��|w��m
2vo��[�C�-��R�U��ݤ�����ӂ�����_���|:��2|�.���Ӡ�'��N�z��|»?����~t��sl��6ͪ!�h;�o䍄���'�<؝!�V;����'�')��v|̑�̴�ة1'ɱ_��Ӿ
�|s����������*4p���d�2J���˝�Ѝv�L''Q.$v�w[�����ГS�#"}xw�q��~��x֛�G"
=�ܽ
-{xT��H;4��R;#�&@��*��8f�&�N�<�Z�=Y�
��nw�����eWF�g�(��^D�Ն��s���>�qt��YP���Gi)
Q
���� o���T̎����`S{E��:�Ɇ�T�ՋxKC�
)
r]΄ޙ�ß���6�USY�z��Ȩ�1�
E���|���Zd�GME�&�(��K_���oȐX0���[�,�t3)D_M�0���
cV<��f��E^,	{s���磟��
]:����QJ·K혤NN�r<ǣ���'�(/��[j����ֲ�>#��Ԓsf;J5�›SU���ce^ҩ�o��8B��:���x��9)�$0��a�n
I
zqv�*7��F?1ѥ���Bꆄ��҇��(��:�nl����m��BȽX֩v,�9+����')��F>:v��AW��ҩ��{ς�>�6�+��c����
-S�Dg.�e������
��Ҫ�d��`Wb�=:j�C͂nJ��+�$��.,M��H�:-ʍ�
��l^�S���kc��+
-N���>T�eN���
RV`7
��K.ay'��9�
�"Aᯞ�
^;�u�,��ˠ�W΃�<���Ӡ���@�!AG�����ٷ��|��Zb
B�����V���J��zT�)^q�IzN�񒨯G�=�
��-Pr�3P����AO/�E��z��&������@,~rD�����ZWy8�*�>Y�|<�ƌRֲ��I�[�’?a�)G�CCA�o߃>ݻ�{�4��ի�owo��\]8�;�:��	`ܧ@o���u<&��oͷ��/��G�Hm'nLDyՌ��h� �5 ��R3S���t$��kPf�P�� P������@����|�,�c�@wϟ��������j]����	
ůM� ��E[j
f���8*�=�G��!�'
�~=

��?�"����q	���������~
t��)�M�|ž��-��4�X��2�_-}k�b�ۡ��;0DŽ�]$����S����e�_@�^�b_<^�zt�<������ρ.������Ź�����~L%����������
��3�(����ˉiK��M=�u#|
�:2�hf�[P��ˠ'/�Bn�E<|��y���@O�\]��/���@7��%��2�.�j��W��-i�ة�ڕ|��(=MU}��*	A���R#�9	;���S��@�n��ܽ
���̉���1�\�:u�wгK�A��_~�0
��k���������8�{
񲌑�8��6w�Ô��G#�G4�󚒜���޼<�8�- &������I`-/ ���v
����Lg�7�
9?�+�D?h�@.�����'��y��1Iǂ��<r��y�E`n�\�
zt�6����DZ�Y��лJ!>d�
�Υ�8u
���dfDT�����W��ˌ;
-O�>R}$�K0������������w�u�
��ˠ��/�||z����B;*%`�U�d��o��}VWc_jk��
̐NF��
�jw���ǗW�����A
<ݽx	t	8ϧ f>�r	p���o�N�}��T�-������ZT�r/%n���d��J���h�JH���S"D�iLfƉ�W/A�]���յˠ��
�
^ ]?{t
X��K� ����9��{B��=�*�V5�`q �e���MAJ_���'{q�5�wUh̵���c�/���߻�|	z~�0�������� ����@�����>
�y��xeA•�6L�]N�]�~_
��͵�?�[�����]t�ma9�lAD����A	AA�藯@�n�N?����|\���t�� /΂"�>:�����Vv�KE+�5��Y
�cb�\:F��!^Y
y��ý���^�z<��;PR�
 ���.�|���@
� ��
-��_�AW�q?�~
t��u�Ӏ;���a�a��/M�>-�q�-�&�C]-��&EOwQ"
���Vr�uXR��@/n\��s ���?���
���g����
�a�����7n�
-�C�V��u���\�G��\�WyLt���'��+�[ښ�%� 9�C��䞄�G�
|~$��+`n�@��n��:��Ʃ��q��
߼��eқ�G�Y��İ�G3
_�
Y�AV�H5)pTL;Z-�&����I7:�Gb�2r�82�/dr�yrn��~F]����b����>��ؔW❀�sNU�m�5�%e%Z��I
k��
TQ^v1��0x at 5}��yJ���Ɩ���¥g��&%����t A�ZF�� >~��j}a�T�7Ub��X5~v�����
-���j`y7%5�vqM$Nz�υ\�H��
�y�ó@У��X�
-�u�:(1��	Rj��V���^�>�I�ޔ�
�r!�2.D�
p
-��\pܟR��T@��f>�"��Q�QW�����9�.��� |�
-}��hĻ��i�G���'��w���smįNM%�:���l�O'��3�jv
b�E[��
Ք�5�
��[E��~}��X�� Pěo�gw����u���	xv�5
-�E?ƣY譡����c
��Np��	n�ꨰ|z��i�ǏT����ۘ�KyQI'R�D
����㷁ؽ:����[��԰�c���k�$n��PæbT��l�����׏�-�[w�D��\�O���e�v�H��p��\p�%bV�yTF�YHJ�o����9������У	_���x��8-��4`���<��m˪���J�U�.]ed�/��Ը��j����X�-��J��#��ۓYa��3ΤE�����
Лώg��^J�K<��p�RPz�G>�b��j��弬+s��/��º�yЇ�v-o�W�VTU4y+�k5~������o�D��~��G%
��|���려/o�"sS��”��P�g���-9�ѱPN#[��nj� ��x
ui�7�C�24�ގ�a�;	%��Z`k
���F��D5ա3�
-zK�)qN�9NS��a�j�Nr��
-6Ģ�V�\ؒ�
���������ȩN��X�pi�W�<�ɝh�/�Օo�Qc}J��K_ɰ�h�2V�k��ʥ��j�j�̆J�X�������na�|o]����X7��W��$u���º�N�Y5|���3Q)J[j�;U
U;���
u5�3��z�
��3Y�Z���t��
�
7�D��Q���:U�٘�lkʔ�5��kk�ƅ�O�=MSm���.���	��"'��!+�*�M�Cڔ��M)-}���&���=_'�8��TĒ
��b��׳��+���dKZ����6V]p��=����mf���ז.���T��V�6W��ƚF�T}�}���;]�~x��)j�e���,�E)�+^(�(�
�TV�)fy��.qC|
��i�Z����}���ob�.J���
�w��w�,���7Hvjw̢:��	��	�T��FH�z������Fη����YIW��@u���
n`��7�C� 
��G?Uu�#�[+�t��ʼnJ�{J��gV �g�+��(��QT��>b}��g�����R��ls.xu��*��*�� )��(+��t/+�0<�<����	c���I#͢l�5|�� "Z#���>~�7���4�wL4�]M�s���U%:+��*{*��[���5���7U_]�z���k��J��s�Ĩ�|�\�K/�Z�<�|���"��F��clSxMu�N]u�E]I����!NQ[�����Y���ޙ䒷���
�5���P���d�L�^��z[îpk���j��L-�}S]�oV\cѲ�[Jr��"dM��^�b� �P|h�x&��;�z v�%>1ow�\���%o��;��M���[% X�<��e�W1ݓ"�CJJ�
c���K��
iw
ؖG�c5صA�J5�!�U�j�
���C�����"�7����L�[ǀؕ
�U�)�
�z&+�
�����n]u�MY+��k�[
-vي�*�EY&�i[c�D��S>��I��8�=����
�j�CM;����g.*�ǜP���m*>y�T�☮�Y�շ�M�t�jڻWU���Ar�ܰ�`YV��T���f:z�$`��������T�� :��|���sϊj ���C'�����Ňf:ҭ�[d�E5�#�$�ɀ ����
6OTV̫�9sr:xY΅y�����C�q�]�+؝�lݛo5��;lZ��X�i at w���dB]�|��%c��֮b at w�j[�����-��`��LԲ������:����pn� 8i�7-n�iq^yy�CV�u}
�S�}Z«fCf�l����
)��џ�r�=���.�qm�3'�;%�5�貺��-�[hR�E�
=�<	����)+cn���+�n�LM�DcA�UA��kM�O
��F
���U	4�ؒ�b���k��q-�l�pNq�i�md!�&J��$>ӥ�%mC>�
����"l��7��U
�nuk�K�Ե3�(s)H�	!v�����1�Y���T�lk�g�Ź')�n-1ǩ�&zu�r�������t�j��$����,�m�$l)�	[2\�����n�~6��y�c��}����ֈv!�2R��*����ݡa�gGh��ܼ��C�L���ݣk�tk�
jj�=��Z78ps�ySJ�PT��t��,���
-�c�̣�{Z�M�rlc�!�����Z
�g�nڞP
��`�����*�^]u�������#c7e��i��k��
��`A�
-Z�SE/��94��
Ѓ�O�aZ֮���3EElH�?��C�|L���
�Jh�3�cVX	�ܥ
��{
�R����a�k��k�T�����а�=S\��
���n���):�g̡��L�B�
-���Q�{�\�SM��������w���w�I�ѐ��`�͍Рm�k��ؙ�j��R
�����ڱ����Y�̳y
�bI��1�}fq�޴�~�\)>X��b��
�灁s���C�����w
4���؅���w�
�g���[w�/��lzj��1���0��3[ӵ>A-pL�"�He�f�fʭ@&��fo}��SJmrz��1���*��bG��
-&ũD���ؽ����!T�� :���"�kF�
-b�]�MZ���f�1v-�bo�Ws�Z+�L������qtѯ9
ϡ$�{5�
�
-�))~7Ӛ|KV
y�����fײ*��U-����m
gS������[#EAV,�5a�Sņ�w2s�;�y����C3���蔢¶����zJ5��K����QZ�u�-�F�T��
(}�
GE� x��\��2Wx8+��50?���{�`1ӥ!f�LR��T�j_Yį9q��T��T�Q�qJ�Vo��s8��9��ގK�����ip=�.g�
-��p�N5���S7�5t,�zSEB�M�cm��h���P#��jT�UVf��?o+��2j�l�M���
��o+�0�8)�&���t�=��{��gZ�_�w��}��-~
��
-��ȡ��[�QN6�ߟv
�NQ_��팽)
����"��o�
�	E&
-d���K�D���ph���qv�S/صb�M�� �Y8�c�yԮ�$���{v;Ԅ�
=>ۧ��
����
����䵁�w�Ƣg�Q\܁������7�
-��(���|V1c�K�5�Z��h�
-���ܠ��5I)�
+xc�(��k&�ϓ	K
�EA���3�f*�z
-8����}��
`�W�N���^!w��tM��}��? �������8&��>�lo����^��O���i��
��4�o�f.u��$�:�F��7P�w&yčab�S��uC���Qi)��r?��l/&lm
�!�El+�y�i6��'y���;�F�o��˷$l8X>g�5N=�؏	sk�����[c��=����
�^#����X�
��ʯ�1PK�:j��|��=]߷����U���i��]��w�N��A�����J�
q�
y�VX��Ϟ�/���ǫ�s�Y7�ڊ_ZF1Q�����wF�y�J�O=h�x�Lq(���#�1Ӡ~�u�i�_K�*���)�IV.ѥå����
6gs�}kXP����q��=2J�c�Շ
uJ��%�Kɫ�ά�V	�SA�Y�'亥��-))me
�ҏ���q
-w&�e;Z&¦���s���8��5{F.�I�qBҺi���,�xl at sМ:�hw����@)9ԣw5e!�2�M	���<d[I�۱���杪���07��n�.6y�R����܇*8��n�5Wչ
�|�� ��C�p���iI�*B�/��E{3��;��:;�����*2D�u

�60�GI[D�٤��Sm�!��|1ߣ�]r\�z?4ح�Y%��B��Վ���Y��wS<
�4�
�� �e.�Bf;��v�؝q�	�HHi��$n�wY���Ua����[v���Ց�ws�A���؍Ql��$��$��M
-�:ڭ�O�6U�v}�y~}��`
f���@#N~�ҒJ�q�/�D��\�K�FoL0��S�-{��=�������K�vՀO���~(�Я��IW匸������T�[
���BC,Lr�
�NH�ΰ��d��?� ����k���S;&&�1Ip������\��9cWO*�$�]1w��.6*~����_��?���n2�`_��Re�g�C|�;�(w��;�l�WǨ�����#����74��[hFE��
|Jf�WFJߑ���ۋ�:�XtI��+��m��3ܤ�
.�o
��畁�g��f� 
�+z��iM�/����Z
�$��\�0��y[�rde�������y }�+��s���&��7�=��ɽe�ʾi�_�%_�
��sHə�VXx~ij�z�
2z�]���hYp��
-���"�z2�X�e!�SL�KE�����QJ\jl�w��G��h����V�K>x�l��g[� t
6�`����&�Ը
����-��l�b§
�c�����O
5��*A}�ꇼ��o��|����h~}�90
X?��{�=��x����&��� ֤
�UA�lN�

��ݛ��ZJ�]��r��e�	J�C�K �:vGI���	ݝ	v͵m�3�*���l���z`t��s�Qtꏩ�*/�In
�ܡ`@�/��p�{:&r[�N��1v5|`����f��
��3S�vt�H�����h�;���&E�:d�8�)�>��u*)9^�ܜjR�E����Fx

�\@��xf���s�N�?+j����56�*'�x�[�M)>iCBLߒR
-��͍o�U9�-
��+ͅ��C�X�)g��P
-,
-��X�]3
�֡�l��/VE���Y\��KL�]Kɛ�*}��ᙩ����pQ��sE��&Avt�����W�myO<SlήQ(:������
;\d�.R�.��}[�(yi� ��3�-�L���٣�����=
����oK	q.)�_� m�|w�S�䌢����ޒ�����*a�E
?��tU���Qb�TK���h���X��q����S��->[^��h��r�
�U�ʏ
��EFiD��f�J����9�X:�ɖ
r���c��v^�J�`e
�}�)�|��P3��y��__;�I�x}G��[4�
k�B�,t�ݛn�����-A�i�)v������#������g�
1���gV�r�x�b��Ћ�������=�	N9gk
�9��
�J�z䵼*�1#�AB��]���a�����ot�p
�m��X�M}�o Tx�
�]����ޥ$���������E*�p�KOG;J��Q�>�
����8��
�F�F�_��ʾh�)͵Y��rz��,^ce��P �z�� ��b��\U�e�4�:P
�9X��`��٪J��_�*�j
�_�.|6ו�ĩ�����>�7���R�U�
�2	�����m2�)�}��b� �n��w�"B�㌂�����W�qi�����~T�L7�K5���
�1׶;tl�0�m�+�蘰�iQ [...]
:iK��ZDF��#jJ�L�����u��'�j�Z.ʣ���
l�WK�t�Q��]y��¸�+]eo�K_[{`![]�w�
@>4<��~p��i=5����D'�=��iwi�x��
u��1�_�|�*���s�!��̽)��<O�-�2BJ^l-{9ېww�.��e����I��p
-nX��ߏ���!?�u��47��QU�_�0�δ¾���A,�I���>�g`�Z$�p��X�V �!��.u���<�SS���f��9�'ѧ5��3���O
c��}���������ُ���G�	�C���^T�z7�����q��^F�6]]�~s�S�n�ȑ�1�]c���ѲO�#%!?�h�~n�S|���r^n���dz�J>��"|�����'�-�����e�̍Q\�r0~=��6T����Z�,z6J�>]]��N�t�9AʯGD�o�E>���ab�Q
�k�g^2�S�˨_O�c��f�	��1bS�(X��Go�
-�
-&�5AH�(�1��T؁���M�&>��,��zd�H*�7�K}Zb��Y����u�76�3���	�܃	�BG:�qq6)6as�}��i�*��b[�W��	����!�O��:�`J�tjو�I:�`ZX��6�r������d�'�n9!y�
�j�=��Kߑ##��
-���Q�f�������.�ۼ:L�C��֠-R�I�v�ѡ�Ŭ#���j�����b����H@'A�*L�m��y�;�a�ϵNyfŵ�󕍻s��
3��F�:��tC���"d��
�w�B�ެ����Q
��8�꛹.��]�aN�Ub���L��(�0>�\��ؒ�dk��\eB�pn�6�桚�ٟ��ݖSl ��9pC��
�$�s��
��8H���+}�-%�
�r�B�Z��JGi�\m������˃��An�MZ��c^�1��>ߜ{{�:놹.���8�*3`���9��Wq�
] \@����<�4|�#�� ���	���
9��3%�l�h�>5
rh� �ȥ��ȇ������'�;ʃ:*ޚkK
هY�>M}�c�	^j���%��L~f��MFJ�f�#D+������K-��M|���k
��ٯlC�_f�r�S��̶�S��T�lSҵ���.,vSRb.
��]�kj�
�y�}.��buノ��@~^�C|�
���8���
� [...]
-N�5��17/
�r�d�̿gE5?M|����
-�8�}��׉ =�H%sk�Uh�QӽF�jG��0��$+���Ӊ�����k[����l�[��1��;�
L3	�@^Nsyf`?���Ԝ�3s-�Ow�tĎ���)��u)1�5Ʉ��l�����3��@K�M���JT�KO�
,W
x��u�zr!�˷}m�cRv
���9ѩg�m*:xG/�\
f!��B���O�A8Ƙy�B�b{�S�0���lBGMU&_��N�鯅��E�X4�S
-��7�8[
-6te�
��ۧc����_
T�E�`��1Z��2����X�%	"����s�G9e�O��:e� nO�bNOc�ؐ�RG8����Ǯf�}���T�d����C
��͸�$^^l+y��XYe�"�ϴ�=��,
-�k+Zj.}o���$>{K����f�=S��Xţ��ʹ<Xh˾�؜y�KO
���aB�����F.£d�m
#CW{��𽺒�?�9���A�^����G����7'���ЃIZ��!5���%�6H�~�/��KJ��x��:՘���ȡ��V�5�F�Q
-���������W>
����i��!��H��I~WC�ߙ��otCB��
�k��.w CF���_�/w���Fiy�Q�=F�w�`6�PI�ʼg
ş~W
r�z|ގ�V2)�:o��x��S�s���7rHN
�n*

a�?�k.���o�����D at _EY�
�Uh=#%^�&�:>��|�V�GM�Z�-~�5X��!E��ꐩ��`�}3��AE-
���Y���3I����k=�7-C/7�
-_��L��O�Ji�n�R0�:�Q�?
骈8)%G�]i�~y�%����~̳X��GU„��t�G��]�/y�;�ʹ�a���l@ߒ���Ӷ�O�l�\
!&�g�|K�S/qx��������ִ����{n
4�;E,^���ž�៫���\�
�gf�\:j���]=3JϽw0#�
Lq�
�-g��$�����Ƕ޲�=
��:����B}v��v�@S9%%�
2@ê�y����qF����qN�<Fd��P���L�8��r8��z�"��|���Z� mz �M
��J���$^2���=�X&���
Ȩ{;c\�Lc��Aܗ?%���q�e���qj䙍�Ґ�f�pu �as���d�

-
«"eyUֱ�����[[��_3UM?��B��b��O�L�[�Os� ���&Z��_�['l��ga��������<DMU�
���*F�-��Y.��%��r4l����V�vU�N�7BL~����� ��L��
;�W�Qא���
O�k�_mpes �js��e��㐐��\����l+�;�4ȁYXeGF,�>V2cOD	f�
�.�ᣪ��C�>�m��<�u�CI)���щo֕�=�K{vBI��1ǣ�Mu�W�J�y5��#��%���
��$�ԸD�$9ߥ�6G1�n����ڮ��Bs����𓄨�G�)��͊�_�c�c�L�GE��MҊ
\�G��t��)[2 at sM��
�9�_s5]

�b�'��SQ
}`���c����pN���za�
�T�;5#��  �
��߬v<v��������΂�*v�
yE����z_a�z/4
8��who��w�}s�]jZ����޶��uδMy�[�>`^�28�����e_=*B��ۢ1~M�
=Zx���zo�Vv0��
�Zt�t\��$1{�&��X`��~��"�M6C��RrɾAı�b��[2nn�d?��_/6�߶
��<Sl��q6�+>�����<e���b�{̮�C��k
�8n�H��n��?�U=@�wߓ�+�w'���5]f���7^59�.�|��E~^�
N�a��¬�s]��
	)i��tf��?��b��� 5�>J{Ք"���aT����)>ݩ�lKs�/�G_���87����G���3� ~ǧ/�@?
 ���lW�E��q�6I�덁�@��e�}��0!̽�>F/�P����'���?������
�'==��&��0�X��RE�k��D��Y�S�]c�!s-��'8�n
�B�x����]�l����1)�=%�6����N�s~̳��

��;;T�@���z&�����z+ޭ�¾��qiN%1c]����?�b���G`�{&J��1�����ySK��^��[=�� �
�`�B$"#����^��U6o߄o��B-c��]
-@L�`���6��� �8)wW'dX�P����Gsͅ��iW*��O�U�^��C��ʂY�W����]

��W�q�
�h�-��|g�-���ïY
w�(�n��9;Z�pVX�ϒ��g��M�g?��d\�mȿ�-����Rs+�G˧kB_i����
�������
�5���
^�E/�<m��e���i�5ͦ�4c�M�4�hΛ�渀���+�*wf�ƶ5"�UF��1#n;4�)?�,��$�أ���ї�=V���%A�� ��ʹh�te��<���s܀7�AC�БWD�/����u))�5I-ui��tBׁX��)}�љs�-��k
�⿇�k*z�>D˶+8��1l��6fS�
-��a-&a��Dz��]>s��7]�8W��cNP�k�/ >��8}����$f�4�b����1�����s����
��
��kK��,È��Ί׳-�/�ⲵ^Q���6B�� ��� ���@~��H� \����b�F�vi��q|�S��� �5�
-�*T�E�M��Z��s�n-����g����g(P�
9�V�p�b�`U��s!�����V�L%楊�wUJN��g?�6�=� ĞQp��m������7��۶���֜�3�)w,���f�)�F|��0*|C���7	X{&6�p�Cߟa�=�_���Is]yO
*h�]C)pH��>M��m8��@Y�r�}SCµ^ػ
�=�ЅlT+*��rK���).yW�%�L2
�@l
-D�|O��ʜ;���{pr�%��~}l��M�v�6�?	&z��,ȡ�?�% ��Q_-2r��߻��
-��
�H�� .A.L��O���V��+��d�0�m��!zo��8\���+yc�<�V��
g�}zj�C��_�)��}Y�x��e�FI�I���)+��|	+󩒝y����;���W�K�
-|��8v�#��b[����g����!!�}��2
�6e<�.	�g� �qw����f�m#�>��P7r0SY��cT؆����������]�7�����"H�k���`�V�T�
-Vz���v�����Y.s�_��H-ے`�-ø(�9u�_g�!3`�)�~a�!��Z�[&@�u������k���
51��
���
	�7���N	x>�P�7])�7�k�׏������
�f�(���6rmR������rc{���5 at NR�ӯ4
��yyLI�<��Y��6FN1���ə��)߯�
!�vT<�W�#z
ļ=>[
��nt��nSV
f�(�C�x�1kG
�	�����<�8-c��N��{ӵ����j��Mtkq����xi�CF�qɹ��#���n7&�A;4�zg��S�Ј��%�g�1Wf�Y�]Z�x8�sq����W6q�[���n�M~�B�z
T�U�@�/T��M��
#��c@��
�<��I�k����ޔ�6���G	E�m�,���1�6�=�K� C��Q!rQ�CAQ���^d��>z��"�&�ƭ�#���WG�?m��q@>�ڡߔuyO���Z��=�׋4��,�ڒRD�E
-��)�s=�0 Nz�\��4��P���ڲ
�8�匔sm�Og��Ҟ;5����~K;��x�̙z&S��$�ɤLz���Il���D��{{Ŏ�t�Ҥ)*U��IfΜs�s�r?|�y ���ޫ�ް�Z�V)���PG��c���f
-X����Y ��12biPM����&х{@�N�P?0Ѡ���D_S9���l��O��R����>T��o�#��O���2��.1+�~����Up�&����-=��/����[6�O��J��*
-�.-I^
�HZ�nK�?r��;�,��2{hf�����������.l��d볍)l6[i;fQ����޵��<���E�)�� #�����
-������`� ξo骿�%z���\�^X믺�h{�)A�)��PϿ\
%��0�x�
Y�ꜸS�
�] g�����{;���Φ
%�ˁo��/d�4[F0o��uל��d���T{��Zje��Q~�%XV��tG�*��ԇ�>5��mL��96
�;:.>�I�Y����܍9xZD�-Y���zZ��I-{�h�Lh�^jM�����JH.�^Ա��?�pi�V.k���
۹�c;���[�o_�9��ܘD�V��V���i��S�L!�.�$𼕞�;���
-j�oN��9N�o��܋�aL�
�����
)$uC��d[����{�%��J]������N���M�|��G�\��}��{�+=�8�$���8:��#=�z��ݮÕ�kȵ�Ix�J����&@�B
-r�<��VX}cG������:nĔ�
����T���X���x�ɕ
z��
_Ra����m��
���Q


P`��c�;�4@[#T��D{������((uc����6��9V������@>�舵�"�%5l[�����+ɵ

bh�g`����Q
�:8�Hې�=[j}�6ݞ
P2@�NX:���Y������)�1�u�ڗu�=����[�r���uL	+����!r����UT�{�h⽓�:��G5����{_J����1���O�瓢s
�茈�E���S���9��U2�/�a��r�6ݏ�H�q9�yg��9vw/�����|Qx���i�|dc���_~qm��Jb�������t{Z��@�0��~UҲ�
@�|Ǯ��5���?�A���Ϡ��
���
-]�k��n	��6���9��"��]f��;���S�o���A��d�&6nS�l	ʸ�az��QIX��+)����y80{�髼h�t�W^�Mw�t��=	̴%�h��
[��*�u�֘�UA�C��d]g��K��S��Ƥ�N21l �ni`�[jpJ\
�>\ƶ��Il��
-����Lf+
��&U'�y��!�:EQ-���
G��8�<���_��է�rv#�7f�e�!�������_�y�cJ\uD�F��Q�F��'��M��4
|�@ZqM6Tݮ�%2?f��b�4ؾC�w��
�|��Yطw
�ۅ=����$���
�l��=㨲^X�9���<�*4���9�DO���]z�;z9��>���= 4_X�,r�4�rJnm&�[IM�Π�[��6D�
�^�C"j{�4$��抷�d���]`����6:�װ%���C�xh{��Q���f@/��U��䰚�x�du�5��TG����?�F��
d��@��H
a�w
|񶵳w��)�k(����"��:�:z�w�T�2*�3��
WljyF,������wt���
Q
����N6=��W\
-(1%>9�R��$�w�[ZL�^Ԁ�7-��ɚ�Q
�l��c����V	������{�[�o$%��u�FE
9��}+Otd��
LĮ���t�,n�
�%Zǖ���K��
�n{�P
S�K#

���
��ʋ�!BzOk�wS�������O#�O.�sO9{j�09�
�]�02{��%�4���e&��)�ܶ	�B:R���ީ���d�VXta[�mڳv�'�����|��������'������I_��n��%�U袘�S#��T�H�=� �g
������{�B���eA�E�p�s@�&��W������P5�����:D�_@����5����lM���=��@2-T�3�Jx�������TR0�n�S~S�ϵ����W���!l��1�r+8���|;}sru��g�W%-�酿.	k���a�u��'+���-C'?���D��¸��<�0)V��#�gFA�����
]7�ڎܢٽ~w�¡��B�}��O���m
"y��˻h肤��ծ޶�RD�O����cߞ3�2�&���$�f�*�Y����4����չmb��<�c���,�k�V���
��#ލ�
/�������9p�* [N���I��� �1-�`#�JX{o�~�=֒
�M��k"r\Y�	�-�	d�[�
ؽ{��읂oy�
3��c�!�V���e �
[4f
��\d|RBE��"���%!��(�����o���?4��?�{kR�g;JǑo	)!%�62��
-��*��I"�����D
�
:}{V�HPMF%�nj���X��R[# s��]@��[���|s��g�Үcȼ�0�_o�@�c��{ �����*�M7���k8]�1hՎ�
�c2�S�$�X�
o�
+�G-����ᷔ�>�׾�-4��ژ���w7]�
5�Xo�㟩��ar } �ʰ�C�7g�jLS�<8�
τ�ĝ;f.����ڷq�)d�w
-�odIT��	��髃��*Z��b�`���JR���=���ْ�5��v���T\4tf���?:1�}uZJH;�
m|a=�g��ꡖŤ"ܮ_sh��ڳ6���B���}���B�F5��C��R����y؂?�
֑���X�T���#s��׿̒ˮ�ưi�A���켁���
����s���D+:/gV]gV�:����2�
4�
�Q�j�rxaX�ې5=�-|W���Y� v
����OZ�XlI�6��ᷭpP{h ޟ.��G���-�k�Y�@|�Y"��Q�ޱ�$�$1����@�-ߜ�
G�9=Mʽ��y�R��?E�_��;'�/l ���
G6L뱓�q �vЀ��w�ߞ��������lBHɂƵ,rL��ݒB�BS�ܨQ!��\�f�\�n/�͡�]��d���Ed䄒�qx�[AH��R��γ+�F�®�eAW����u
�&�۞�Ï[���Qd����E��cze��r��↴z^|�>Rse[	���wT�ߝ~s��?:+2W���P"��@�
*����
V�9͗S
Oه�/�&>���󰅱'�8h��;f	9
����P at JVX�#��U�HbvU�Lj�uQ��D��%\�e��2��v�|Jd�R���
��>[�o��"��}Y
�>J�9����gӸ�;�9x��W����g����D�혼�Ց�־c���wm9���4�&l1ӈ���=y�b�

R�;|���q^�fuʩ�޶�=-�nk���g��O���[ [...]
-~�
o|�
�}�³FN�Ϸ�qO7���j���PK�
�[�$�Ց
�֒Z�dĖ�d�+
����.�&��1�;jd�m�����V ��q��M�B��y�
�<1�ͯRJ���Qt�g����WxZI�:	����g�Oò~_7ߗ`
/�=8���`c�:�a`�9��p��͙��aE���B�Ø�\�
o�W�qs�~d�Ï
Xؑ���El�"@czXND��棃�:0�x��Ρ�����}�2<z�
���ee�Y��vM�K'(�t�e�
��b��|�e@?e�iP@�Wx'���
ȴc'� b�
��C;�qρk�9��p�.|�J���x��)�	L������I�����)	oY�^�I@��4��==�Aŭ�l�G��*I�Q��5����[���d���2�%�m�(���C[_$�G�lz|�C�h1R!�
:�
(�剾G�~i\��?��\�o"Ee}?~q��������{ZS��A��8������P���K4H��@�Y-�D?^-�6�ŕ9'Z��zj���:�n-s�0`�cv#h �:JK��e��/�m���T܌�	
�	
�O7K��&��AF
����
V�h፹�,]oCnH�����"�~s����X��0��z�-��x�O[Rr��4&���]p�=u[�Ή+������L�u�f_q52K���uq��
���rǮ�E�8ĠF��
-����쳫������_���(�tCO)��ɭ8���]���2�^��N;����}%�X�GRsk����8>�G�H�M��:�jH)}y턌�q��u�b�,�������v�5>�u��>UwGOm�x��rgu�_��@���{:LI\�*�OC_�
�nk�Z��!��Nc
-��3��G�}��x�D���2�8����O*
|���Zi��
��2w�p
;L�_���ﭥ���Y\}3�H|�!

)QE�馇��ϻ�Ȓ#��>
-%1_;�a����!}KM�M�}x��/Z�������;ZL����UK����O��7��ax��|{�t�釉�
_���u�����d������|�FC����=���5��	^�6��p�Zr�s�t(Q�fŴ�ƛ��-/��"�L�
�����ŗ�!�AT�u\ѽ���
<�Іk9�`���
q E���
-[ֳ�JJ�����7��Vh�{�܏6
-�������FQ�ys_��Ib�	$�_��/>W=���>�Gw��}-�>/]�_S3J~	.�*�<�U���Ԉ�-
���#7�x�$cvV���[���i{{�֭9p
�&&6b���zb�)��
-���CRO����7"�%fN�4
Y���ǾɆ;�&d����

U��[288G-[A��X��#3��Q���L�?�
��;{�,���T�2�D�3�P�5�`�u�`�危�'�j͟�����w
TL�JC�;�̿<�-:�$>/��7�h
�Zf����]A�Y����&XU�.Нt�wFN�~�-��_��{�[�b�*ȯ@��[�"
-B���xuS e��$��8i��=r���jB���Ŧ����W���FdŖ
Wi�m��9�,?���_b/�@;K����k >���ިD�ǽ
U?/��~O�3[:�/΢R�l{��4��9\�)@
-������8Ԗ\�t�3���_
hP �`j�����������b
xwjm�������)2�BSצ�y{��4��������>� �vu�L�@�
Rɋ�p���ڜ'@�/3pGZ*hW�)ߜ �)E7��,@�e��#���&[g��4"+.'�ǔ���U
W�w��
+��uI˛�f�Mq,7�G�o��?���=#
z`e6(�K��g;:Rぅܱ9{m�W��a�
��>5�L�m}�h�T���^?��$���G�.�4�75�MX	N��c���@ �ؐ��C*b�Y(��1����;K���<4���?7y�����f"�r�+_���Nó�oM�\G��FG�0�ſ�@��D�)g��e7�����WO~����7�r<�;����rׂ�ը�48ɳЖ�
���`�}�
15
}��5v�ͼ_�?npG>���c Fg�����W��
i�9d���y`�9uSR��7\�hO�D�O`�X�|o�Z|�7��_}QE��~�#�i��������
-��%-�lc
���g_����� s"��4�貵��ZDZt'���whC�
��X�]���tܑ�MK|�~`����
%�,�H���[n؄mw���������o��U��f
��G����l{r\����A�7`�[ZZk��#�	Ma98e���������@���
"k���F>��h�}#��gba�
-���_Z|�9
��4����;0�A�j��"����<��h�eq��%~�
kw��U	���
�� ���b��[��X��	�k^�]�08�4K�5�;�ےw5"#��C��L���6Q�c�X��ȫ#3z��3�c@�mYߨ�Տ�;���n2�؁(=�Cs���<�k��M�I�/�C�ݳ���rT��P�5ww��*�襷�Bg^�t��m5,o�[�^��k^��&�[�J/)i�����d�|�w��ITE�/Q���'g��
�g�-H���`a���Ґ�l���3����>E+}4�)�ג�%�4,���O��t��Rl�/zN�垆�15���$�
����k����ɠ���,�l��L���ݓ���&a�����9O+��yt�S��`��'�ot�M׼��B�iq��/��疅u��'�Y��U�����m���W'ZS/:���bT�Q�.�}T�svLdD@�b��ܞ�5�8q��M2�;Q����ӧ��

���}7{`���Tm�w�P�q
�ue�53��6E�Xd`�
iJ�����?�ط?��r
�����W쪇�ΐ���>�j�s��ݒc�0Rr� �<\s{�����?g��?oN��Z�4��sK�0	Ko�����-���
l��S<
��Px�XVS��K
쮑G�R+BRTz`��
𕣧�VO[淬��YymO
̖kjr�)�輵�誖�r^FN:��Ut9��5�i`�
45��'iy�.������>Z|7"mx�m@���)-.9"Ǖ��Y�zLݾ��@K�ȼc3�-�Ɩz M
�f{tI��ϑJ\��w5��d�� ;���{0f�"�ꬩ��^PJ�Z�n�>�|�=����MOO8E
x��6'٭�Ij�8.��s ���4�o�2xZD�-�l"�!Th -c
���
О�;����,ck��q����{:a���YdɇU�DD��ؘjO�I�o�c�
-���dG�)
��FLE����֜~��R�,� �hyY?���5�����g�&�p��
.�@��ǿL�s���aq,@��&�ܛ8�+~׳ߝҳs.m,���%�O��/��
Ѯ�j�*�4�N��]v��[�zz�/�p�%��0�ʗ�Ɣ[�F��klѱ� ����Z��^�j��~p��-1O/�b�\��`%j�A�zBMP��	��^{G꯯�5��I񹄒g���o��_�:���P�s�������HGַ������N�e-�[jx�_��l�@�H��ݫ�l��I� y�sp��Tӟk™��@Z�-M>tS�G^v�{7��oF�}\!Ž
hH@
�iIM��"�X�

�貖���"�g��ᔞTQ�~�Ǖ�$ e~�ȼ�O�⚧���ї��K�
=�r���w�?�B���7��\7P{�����Φ�G��Dlݔ��z�A
�ca�C:�0M�2�.�͠��:>��5oN!�؄U�L̲���w�,�
~t�!_
C
~��
-�r*/�y�{�*�o�4���:��;�[U��=-�����q)>�(1'{��[��h���m��}uǻ�d�KO���p�����厲�uX֞
Ut�m)Pٻ:Z�����	��yje`��`W]�A��r���E�۟����6Q� �����^
�d�X�l~d�{4
}y��ʻ�>ؔ��k���� 2�����s�֞򫾉�GA9�w
-�lۈ�۵0��ER�k
�Z�e�g�7��*G�k�C7f	�&Q��5@����!�&��LpD��
��(jv�bѣ�1�����]�k����
�8�M�C��/3y�+\ចM,`˴��K�������z&烻k���"������\���7�����j]�h\�>6�P���Q�44y���H����0y?;��on�!�?׭�QJZ�>���y��H@~t�)5<kψ�?���V*<�c JJ��W{e����h���#s7��g�YГ�L�C 
��FQ��y/�@�?��=	��� J�)'�̌�-��?��͏����w
��C;����bU�³9����+��UaekJH���	�q��u�X��aK���_���='G�~M0~�'f~WlJ[
�'��[�Z
�昍3��s�	|Լ�n~����6Dž�M��'��ʟ���3�n�
��B˯�}
���PK��|�e��銳��f`�4"C�;�:^H�%<���P\Dem.�
��Ԛ���޳�

��s
W�m�c&>#�H.w�=��d|�Yy��QH��rR��QR㩤g?��z𳷯�%��y����kfA��)d�W܊�_Nt�=�bV�Gf���7P��X������2���9on��ϡ���P��,rJ.��{���g?ۖ�@��F�I�&tW+�O�<r
W]��.bJR
hy���P��<2�W|��o�c_��NN
-j_~M�}�YXsS�,�A-��9<��ע�g�)H�N��o�`����쀴�Ց� �7q);:B
w��������8$)���7p�2�9 k
�
hT�+�kq5�����������ɱ%l���C��
-~���R����9z�C���ORy?�P�('�E�'�8}pq��:�7O.�.QۢZT������e
-�tbd	]3����q�~�"�@(�M����!I;Zb�ϋkY��"��?�Cژ�{���V�`O�I��?y%���<�:��6E�����Y���S�a
�) G�J@�c:Bö��> 4؁�۷�0�VuK�D�i�-:vťiT�*Z�)�p����ha�3�
�8iKC�ڔ��bztqD��δ�(0Ż&,���'j$W���s�3�a�?�
�
�N:ӯ&�m���� �X�~�s!faR��
�G�H��)
�hgӏlLⶕ��II��ļC5�'�����c�UgCn�yM�Ԍʟ�e����w�f��QD�rg�5���=���
"��Oa�
}�m�ҳ��O���m#��7I^��e
��:
<��2�71a
�l{��۵�V���2�RR�C��j�8:c��ᶎ_qn�Ptj]��<��aX�E��B���'�/?5>�t��k
���} ���=K|�ìy������J�-�����}� e�4p�n�E������S��5��ʼn�"�ym����k������#��>7v�^
g������O�YϿw@�
���ߤ�ҳ���_T�?�I��S��>��SnS�y�.
-y{�SW7��=u7���[Ņ�������Ot��*2ߖ�:�̟!�\������==��wT��ͱ��
-J�+}5�C2R�S��5�V�4����ևaϷ�ElL��Q�r��4=��'!登���
Pfh���g���^��:Rp�p�n[
y�
.�>y[�B[�1ea%�` �
��a�=��>��	�Ex>�0����rv4Hd�#ť�� �^�
�������qLzh^�؜bՄ�9m!��>�h�M
7g�逖�X
C���b��K\��8�` �~FF+{qdgwn�@�Du ��X��eR��-y�@j߳r9��T�G� ��g1�c�w͝����CrT�WF(��$� ��N�_��(��^��1en	$9� I��F��rwMĖ?׹�*�����~�B�i��}�y�`3�
잕����{V&���ftr��0(�˄�m-�<4����B$�
v���~�[��xm�T��x�&i��1�t�;���:�p���z�;��*\����
�j-Q�=R�?��(�/�a���;���{63
-�DHKEuLض�Iطw�
����-l�pM~yGFDK�_�����
��� ,�����/���K�#���n��)t��&a�c%�홱
��/�����Y�+�^���'�����rSˮ�
�ج�
<+*'WE vr�2l#�T]'����rG�@�uh�-w�C͏�����Sʯ���
�͎·_�����ƥϐ*Os�^J�y�Lƣ��
}�M{�
�,��QD�9DA�	Nu�)b����cR�[��|)A��k�yV�-�
��W��S��?������ule����mO]=��hh��&�e�ibIS�������eR�>;]=�w���
��OO�7��L�N�fu_@�{�k]�����y7c2TA`���I�-Խ�'�� ��񥆒�[�(\���p�IG&�O���
-�}_�,�*����g0i��'�^�r�#ޞ�Q�.)�ŷ7F;�wԘ��
<mPZjɵͱ��-�`��O*���ٜ��m�i-���J�E��JH��ID�-���=��$�K�ﱨ�V
-�`�m3��P`jn��M)�}^��lHݜjy�c�����W�o�Um�@^<�fC����J ��Ȋ�A�S[O��hZT����1p�
l��ܡ���`+mt�{;��������|t���+,ڑ�����
���;��j�t�y��p�u���Q��@���A�}�����T۳c��:A)ؘ���,	�yV���9X��[�������8"�;I�1�b�z�Я�j.�5zb���v�6��O:2�:J۶��ض�i�[��5�}�
۳�$���BEEt
9[ sl��Jn���
�|u
-��2���Ȯ��7��hC���?7�άOQ*�*1
��-E{�c���J_�����1-�:�DyƠO� 4�r ����<����� ���425q�j����Y��ErUX�!�u|ZXNmڐ3��Ӝ2�9Uۋx잤�X$��E
��vi
�qWLJ>u����b�3�|C�h�2��9e�7\�$W^d>�j�#��Ĺ9'��>�ʯ��Vb�z����Qͨ����i~����H�4��*�uk
Lݰ�Y �8�c����5I��΢�ǡ)_��~5��n���}�R�V��ݣs?~"�}fk�a�,�d�d�"G<��Z��?zA�O�X�W����Mo~ʬ||e[�������5wVDE�5���;�n|jV���R�9wNP
���BA�7� �zRS`�����w��_
-o��%��3�,����
����&4�bw�ơou��3#���
-o�c��w��!���OJv��<������.*q�/
�`��}�Wg��'�RT.����ܻ�>�ʷ孯��UW�5���ʮ����_z�K-��13�]t�dֽ����,
�G;O���a�Ȱ�
Q��jN�����C��k���ݻV��]��cO���!����V�>]zuK�i
�xws_t{c��>	y��gƵ��}��/+�.�D���6����Ž��8�Q5�	��=��+.�iſ�wd}��m~������[�����ZJӡ�>�R�
tʎ��Y[�V�̐
-�U|ʆ��kE*�5��m��W�K���#�.���n�х�Z.�
p��tc�Rrj����S�o�Q�~pv\��s(~�D�n�H�1=�򃃊��ⶭ�v�
���]s= ������ADņF�lľ�В�;�Mˎ�� ճ�Ȉ[ٌ�
�
0�w
-��Cdm����e2ԿDk^
C<3�w��M�������܌�Yb�g���_۲�G�Yn�� �=���;C*wO���2���,�}rz��2�tl�u��
h�6����Q[v-t�g����Tm�h5��D�L�&�A%��u�Rj����;��4�����Z.+8��CRt�E\{m��^�Dz��=J�sM0��#��7�5E��7R1�LƆ
��*Edm.�J�
-ZsH�F�<
��%���G���g�m�k���Jo�E�x�)���DG��zV��"�^&F���V�+_�������k���;��g�\��063�&7Č�ֵDVH��}�f�wηu��թ�[n��}R�u��2�.����U��
-t�G\�����w#��zV�ϦΚ�������r�\��E�&n}�;��* �[�?��0%A��;ב�p̶��1MBs!��N�q6�!`������C��mCT9���������iSX���
��OG��Ώ��C	\l~���>�B'�g��"�<�{�Vm
D%T�Dl.�J����S2J��jv͍�
��6K�
���Ur����i�D���yhJh���@(�P	�A]wW��?�R
���`��ػ0�Y�#/�\Z;0�� "�H_�gԎ�j��n����
z�C�v
4��
�]�]��

���%��
\��2�kBzl٦��l}
���w
��U�!��2L��_}o�}zOCmڒS뷔����
-��1��+s�zMgsҾ�I>�p�G
��(1{OGn
�%�
��
)�|S�نO�������<6�~wT�X�l|�����?��R��85ו����f:rw���ji�=#��/���ޜ�W��L�
��
��R�D�
8����8p���DȾ۰�E�.~ƯN���[jd�g��c
�̯ V� �x[�D$zp�=W
|�g�Ӻ!g�6���ZTS��&
-��
-��m��|
-(�,�Yx�D�d�ȣ��(�%�00ߑӠ�cz.����,�<+y�
��+!d�KI��Y��e	)ce�V
2.)�T߃|�uS|��L��
���3�I_���$�d�¦� �;�t��ؖ����w�,J@�FZg�U�EZUDOo��P=���*������
S
��*|�O�+tL��TLP� �o;��}��*R�q���*0���i���Z���8*y���g
-�����29�VhY\ٞU K�J|�w�
l���g
��"hɟn�`�q�uw��ܟ��oN̡3Oǀ�b'h]AoX_���D �%A%�1Ϩ[�&�8�PI�a���yR�m�^�<J-���A�e����7�/
-��M@�i��;>5�cM#$:�d�x_�eZB�N��W�8M�����qL^TIj�h��S�1��
�1�;� �ȿ@,v
�__����=Zv-�"լ��M];lrCF&"�f��K,dP���ua5:?� z�W�s�&j�y����9��{�yt��S��a%�%j����dк���S�@���	:�V&�-�D�m=�u�H�홙���ې�
VFI��ul��;�o�����}�;���/�eo�)͖��4����2
��
#M��yW���[�v�D�E<����$�z�4���ݽp��8p�I1,?�oK�둥{Bc�@�[��/�r�D�S�����N
�&���;GaI-�m�)
��s�~

��va��@��i0�^%~
�a]�k��ă��y�����%8h��#"8��Ն�PP�'h��MbDZT�%��u�j���ʻ@�Z]dAWU"֚�W�^�4�E�T��ĈC6&ZW���yU�	�
�c��V:�v
\a,q��+��8yⰑ
-�YY��2
����Fj�ʢ�L��^}�6�,
-���M�|
���X�� To*h�U4��L�-BѺ�����wW��1+�-c���qB�+1sՈk���5��ۣz��<t	${V�h71
�,�9&���in�oA ���}�]b���6
Mq�@Rl��W���&>'��w����a�W���� a햲딝
����G�q�[��ٶ��f�ԃ�1�
5A��Zrmb^���RM+���"D��#!C�T@?0���-�.�y����7���aZYL�ǻ�es����^�ӕ)JպB�6���c���`���#;��e��6�=��w�b������x!}+�$���X𨎎�]a�B&b�y�!�ܗs I.� b�go,Ыw-4���M�\bw�M
��>�ľ�'�21`qsWO�< {��OlFU��uiK�w����V�J
�4N)�&W�Z
x��X{҆�l=�w�_4ƣ���
�o�Z�&��������.
-�`����q�>%�s1+���k�=Jj]# 4
�N��fu����
�.���bz2�•�fے ��6�i~�6]ty}��yT
p$���@����r�TPǥ��
�"�8!sm�T�m�w��{��ξAb�8�'���2w
-C�|���u��%�Z6|`���ώ��cJ at W�3����GL<����Y�w�

]0�L uLIN�����X�����1��2LQ�HGD-|v���o���=o�6���l�Ψ�k2�*Z�^N�8ټ��
-_S��
��B�,�M.&erA�� mW��x[6&���4n�h蠉��-Q&zǖ�?`�h{�2�r?l�[En�20��N^���.E�_@�@��LD�ޯ�,0�ݳ�*`=����ٱs;�V��b���u=�cU�/�ԓ�C�lº�P�W��8H�?���
�}{�O�nsLPr\���(�D �<a�A���̸��	)h-���0�7[*TI��ӭ�`V�!��k��|[N��
;���2��Ov��ʬ��c?+�2%��J�jʾ�)��v,����K��~�3��EV�kJXo
��
�3
�M�}2x���T���hjxx��qe~�l�vC
RJ����]�g���Y^9��<
㙦��.�s�
s�Q	Z�ݙ�1݋ݒ�3�#����G�o(����]
����uh)�c��fI��Rjet�ֺc$7���&��r�R
-W�,�RDu��YE���Jjsx����؈��k��Yb�
`�N(L��߷�iq+�������^��u�=���Q�i�����ubqPɆ:�a/
�u׃
-le��"��5j^�%�P��}G�p|�sp�¡��(����WJ�d
oC��CV~��,E�{����,O��ls�&o�ց�v�
^��`M>:��b�2k+q���[N���w�݊
o�t�ʦ6[�Z��n-�i�N2<n�կi���H�oiT4
ͻG���u�]Y����KC��*.����"���[{����m'��o����
l�)��v�v|����N��;r�Q%~���`5�Gi���[��]�ဉ���1a.�	�w�}���{1hI�&>߫���k���{ �u��؀E
p�13�|�N�쬈g��~�k_��Hn�ۻg�AﶝE�)���Yl檎�
wS��̞��N���mw�d�&��^!��8hؠ�Gl�
��G�X�
1�)ə"s���Ga�S�y����>0����c�-��Y�qfV��,��1Ou���[���],	y$��V���h&%����D����sIŠ�z;��⮨�
_[�59�{�T����;)o$O��_�T��s���0��l醦B��y�T
�JFa������V��T�B�X�l�p�zhe�����c�a%s�+���&r��+�*���j���h�\8S��
�����
lֿ�
abVH�!�ǻ�4=��K������U9��=���Pk"z>;��U*�Pt�_(�[�!z�\ IwMR�k�N���/	X{��Go�
�1�������M�Ѧ���<ɨX��H�
��&���1��j&�"��	Y���
-?��j!�}���E�{�	eQ���_�֔\�{^�a�6��uZ
bCMk�~�WF�4�t��'f�S"I�j��R/+����)C1���
(�đ���m��@ǚ����s��F>y
`�

�%b�##��
��t|�����ҬJb����%#�C"I��7�N��m�?�
��e����E>�w5z�����41��%rö�ߗ�}���G
LF��!lX{z
:1E�0�Y���*��5��f�b���
�$CP��F;<��J��)�X$V[��Y�%)�<8�e]����+��]���h�7pࣱ������O
�
-�v\lv�Ρ�z����NU7=˹�Et(���Z�gI��v2�K�*��<�$�Y���.�[�C�,��
����eθ����D���b��1�T�]V4H�K�#�/���(��G}���>�`��G��<�/�-t!ÖQÚ~tڦ.N�O��`��N�
£�<�P�oBE�J4Ӭ��g��.Y�(C��MT��.���͆��VsOvT����vg��#ӱ��1�BD5���Ւ!���B�dX�

2��,Y&�(}�I׼���	Y�\2n�a]	�t}	���/o�*������=i��
-I�����&��tgY�`k틌����!���>�t� s�tX�(�
�7��A���~��L�|t�e���b� �#lG^���k	{�Ls�������}��Tʺ��YX�Q�k�x
sΥ�Y�\_ɤ@�2�
�3L(�6ٸ��Z�z�Ǹ��Ԧ�$�#}O_Q���S�������	f�o�Zn�%�'y`��,iv�43�X�ʙ�弔
�����*����t��M
�q�G��
�8ɳ��Œ
�����S�y�3
E��4���w0߸8�sizy� �m�
�yt�]&��$���El_Uͥ�𩳅|��%��	�;WU+:Q���,����WR>�z��%�(��+�t~�z���觭jD����[�׸��|\07�@���������so�x�
�'��j,i��^I�]S��Q�
9W�_y��mL�L��uUϊƈ��遰�o*p��
-��xM0��fs�=}�s@�
Lz
}B�v�onb;�7^9��y5;8�<;&�H�}�SB�[�Xg�b���"�$�
������K��_�
�4�z%k,�x�
M2>li�8�����
�T���2-��\Ή���=�}�륂O�>���<�
��c��;�.�C;�K2��Ԭ�_,1��b_1U�WB�le"��������˄���趱3͍ÿWU��R]>�CQy�WW�Wr�R�'ioɟA���}�?Go��躾;k�5+gMw;:a����]��ҝbww ��� ��bb��3���������'�C�羯�
����iČB޿�ok���`���x�l�zpH[]ڹT at ._�'r�ܡ�cOR�~���
������釿��1��3�z��
���'��/��9�� ~�˩�G����6��-�kh��*昰
<�2��R�K+/
bq��$A�Zlm�\zO���9X���^f�������;�WA	��[�ITG&��9ڢ�,�G��暭�2ꁱmh�(�Q�*���'im�S���L[�6��c��P3�P+	����l�gaN����_
-3��	?����=54˱�۟���2�O���_z�q*��w�o���c$V�πh%��d�KX�ȑ̛�"%<?C�ss˽��[w+���'w�ã��O^&;�E�n<� w�
-��@���zz�l㨸c��ڹ8^I4Ⱥ��"cCK�
-�_��XDV�������F�9$�5!��_��N.P��
���O�`��t�
��/E�s>C�*lȖ�4�O

-R&���nR{���y%�S;YLW9f�7>.DK���ʇ���]>e�x�8��S�������\��7



�n@��'�q��:}*���x���[�9��r<_߳k����jQz��cT��
�;{�g���w�JjI
��"qfr�It�+��,ȯ���D���h��Ĩtǁ���MU
}UWF

`��(����4z�J�=�ފH�|����7���{�����
�;�;D�
���O
S
�bH7,���E6�[1�ު�h�9 T�j:&
�u[	��M/
wƹ�����o0�!,��]|r���Q<�W�P����
��rp�&:|����K�W~a탮fE�f���l�XUu�M);�GD����
N�T"�>�<k���Tߊ�h��%��p�5����CP��k ��
��'��?��Ot�w�Kn�F���z���=~I�ڰ<^Sj�,�)i��}K*
�8ƄSR^�O>�"RZ~�Km��K���W�w᱂�&�޸�2���[�/��9���8�	����~�J���zͭ�J�fe��yZ�X2,��U����[^�
�)��S�/Q��WP��^zV��ਊ���-?�|��x�,��'��ɭ����������^�n.����賭`��u�
m����
j�Fp�ϱ����?~
-�܈H��.:��{� ���
3nx�n���	�:<s;��2n���L��~'�g:ڔ �P'ac�]d]�0)ղ���%6�y;�P��c�������<��?<{���������
��
���=�􇀔��a�8δ[U�lfo��
�����(� 3r��Ľ�D���~*�۴��lz��~�+�	��wA7>�3
�>!

?B��9x��:��a|�����7��t�ωËl����Za����dm�
gQ���fhg�`|C���i!�Ÿ�DQ��BH3����w�RZ���������s0�ƝG1��
��T�cp$�7P:��Q�E[Q�1%�]���|s�
��u>�S�KL{�%O"S�~	�c��f��sڍ�nvx��仔�����/�-#E��~֪��0#�&N�8I:qY��� ��g
-+h���J�>�(�g��W�� }��␒Y�c��������!̟Bb�`�,z�����oz�$vY�J�T�!��jҼ���/���nNl�W��Z��h�1/*W�ci?��D�"9�����
��!2�⇸�����9�34U���i�Ԧ�ۥ�MM
Ϣ*N��ꤍ���npk����[�,��E!���i
����~t
��p��� ���}��W�WT��SW��#��ܣj
"�t?�)�8e�T�h�~M��0=D��`?���"��R�e�/�]�R��r�e���%�������7YO��:���:�t.tx�"��'�x#>����_��b?mOK�\����A��4�с
l�(��bط�y9��b���/��䟲`�Ϡ��'E�����'��q?���oD�Wߌ�i~W��aK���1�}:�Yފ]Ք!��+�
��fe
K,�Զ
����'A�rY ����-� 0�s�}�I�
o�sJ
�s���� t�:�X:�_U'
-�uj�]8�����i�X�q�W���aF�Y"�6��vw
�t��׉��x��+��2(��S ��ga7>��nFd�܍ ��˦�^��2��ťʌN�D�aL�]����p�-�`�\S5�l�K�#�m"#���
��M��KW`��7���G)�?�sG���^��
'�͈���/��&����p�@#�@��[���:�pۨt�I$��z���m���&u��ZDcI>��O0��똬�߃�i3�_C�]���u�8wjX1�����7e��n9N���eU�a!���7��,}���>.���(��}@��W�����d��[
I��������`ʾN�E��X�c3=o���&�ǯ���n����&[.
�$"R_�@vw�pn[�2��R�O��|�S��H��4f�oMm{DSG{pKgo�`��JY��
�}2%�oiI�+�܌��C��
S
�J�}��ֆЊ�7
-G���?�f�>�-�!6����M��"2��
Ϯ�1�p;%��f�=;;��Z�XÄ��o��6�i�M5r0UΝ�6�{j������s��6
�Vf�'�unE,�ǀ��;��$�x�6��;�p�K
��lp�
<�߹�+

k�ϋ9I�B�ߦ��g�	
-��u�IYM�`;߷�O
-o��@Z�Dz������ap}�@dm�$��bHF3�P�jG
-�۽�]�
g

���]�YU
�h��q�ZR��Fy��JE�������
-i�\1ė�u��Z�:�c{�:����n�
��'���˳;u��%gH�n!{/�K�W�5���ꆺ��o�{o�q�;�j��DmŢ��D/k@
wq"�*�/�k)�[z��yd1s�	U���#4Ga�]��zU�^V�*�j
-m���GW�::��\��86fWOC
��
��t
CZe�X�G�
�6wJ3{�����v�!
�jzAӳ���Th�g<�:�U�Mь�1'E����l%��ۍ1F�� +{v�7-o!�%�0���@/nCi��������Ɓ��&yNW�<_�!C�v!
=]��6�g�6�
O�7
�K��"f�]x��(�7�FJr
����6~���
�����C���qKm�z�6G7܊�K�񋪞�
CwSW��1԰���+�f�*�zr�|w��l���3eQ̊[�U at gG(����U
cn��g�V���0��Z�+I��X_}���3!dLIQ���}m�ؑ����H�8
Gm�/I	aˣ���G����)�fIY�N$HW���:z������ľ
�Й[��a�?2ٍoK�ۃ�DIM�=1}��)sJaþq`lGS[�1��?3�7\�4]g�c�&�A�4m��ԝ���"�V�Z�Zm��cz�xNE�N�
co�(�Wu��^����P̞���ֆه:f���97��Wz�_����
Mq��P�IyEa#
����>�
)�M�t΍U�x	�ݬPy+`�_eR�",�5%�Y
־T�tn��\)�MQA�t��,���H�_�1��-�fUw���6]׸oj��1��v��
#�>��[Ssr�Uu�%mw����o�,gZ
��('k[˅n�S�և��V�H�c��u�Iqp�Y��[U�
g��p�2dC�.�S7� N/l��4��pY�V��I��'4��EmvE]�ڟ��;_�<02
-v�Ԕ��R��Z���J��>_�jє�4�����i�'F���\�
-�K+�$ʒA�S*U�Z�i��d���;�������u�O'�r�Vİ�JA֋�JԺ���)��
�L4�8δ�ߐ��[F������A^������l���rJ�ڕ#�օ�u1�ݪ�G�ђV��d	'��r'2��I6�D�O��SSǩ�'fVю�
]U�·
�׹��G��L��s���a{�ĸ#3���.<6s��z�U]���P����|��8-gi�:�K
X�"�]��e)+kUFK]�R��5�����|��pq�*�����K���E1/}e�
��d�\�F��C
�:�4��TB��
P�RxAHO���
�"��Q^����Y!#rN�H�7c&*�%����-uSݮ�U�.+��֗�hS�OLU%s�]W���s�
���!X�MSJ96WU
O�W!kjFޢ��=�j/�Kj �f�謁
�;V^��d at 6��i6
|d���
%X�z���@��`k�����2D��
������s�����B��y~��
��� �f��:Pz�����;�ML��6xk~6ã|]�q��8ss�����/v
)�%նPšSp2gļ�˕��
.j����|#���2��r'��HM�<3��L��:�Ū
�����WD���\癎�7��Y���e���TZ��BY����l^��Zmѝ�U5oþ,4���i�xc,�<�c`/ת�����E.��������{���5Q���@����r��6����$�8�,+��r�:
�x�q�x�e�x���`�\��a����9)3k{��o��Ҳ�������7��c3�|1͡��Y�S-ta��_m6����;
Hi	 ��7�_˘i�mrvƮ�
s����R��D��Ł"_%?�ّ��*%mKi�Km� �%�LG�9Փӷ��~�ڄ�u�
?hK2>�=]^�u�ڑdX�K~�'�w;Tb�:>��P������2���	ٵ
б��b��{�	�ܶ�=Z��ץ���	�����5��=%6vM��^�D�l�p_T��^��D3������_�+'E|��
��f=[��w^��.�Ʃ��om
!"��ؕ^j���
�և��
.9Qc�ƈ1�~��xe��R�o
-F���ʲS�;��910�65�PA�>Ҳ�'��q����9"+=�=	<�TSu����_M�!�zΉ��:�W�mڪ�=M)�2L����|��X�t	�`��f��ö$ؘ#-�pK��2۔�8ݘ�hE�NJ��j���cH���7FM:4p�rb҉����ecT��=9>�X]
��,��2`���ǫ�Ǔuu6C	ή���
-t�m
-��iI��*|�U�
[#>_�p�'&*�ĀM��#N����ő65%��\e��by�e�)%�
��8@��d�h�
mS`cօ(�M	.tOIϱiX�c
1�V�W3��l���Ҟ�~�?��jg����L���+�.p8�Q|�e�8�X�@
�𙗳���X�
-�z�#�_�\��P&8P��z�f��B�Z"�rF �����G`�{#�6lG' �/T��e��-VTΔ��|�MG�;�b��&̦��jĶPU{�XӲ�������> q�B=v��訋c���
ʑ�{��Й.�{]Q�o��l��Q�6�J;cf.��\W{�օ0�-�ws��0݂r�o�|>V���+i_,>C�j���#oM�$?�"$�T��
96hk�%��t<Vz��ΝD�,���w���<3��gFN��0��қ�dc ��
�gS��u�l��#-�� 
��X��PK?�
ЋoL�)o�[�_-v:�tA>v`C�n
q�|�Lu�QZ�oC��_e��[SթόU�wW����6Hp/6�ᩊ�)��L��@��lc���<��Duܝ���7�
-fΆ�8e
xͻ#�P�!�*B��yo��!��ħ]X��,}��?'��/tL�bG�����'

!O�5�
#1�LG�;RQ��g8
h���2⟓|�Y6��̂�oF�8)��H�^
��-uA?Z�
�M�.8��G�>��B����W��BW�_��'�E#�O��~�f6��d�h��dS��m���8�wW���>�XFZ�C�Dh����##n���7D��=��
����@o����-9<p[��)
83P�/�Լ?'��,qgF"x�/�yw�r5SYmS1����p� �{W�ܗ�C.LܢS
��[�w�%$ k�
endstream
endobj
331 0 obj
<</Length 65536>>stream
-�9X~��ůvey�
�n�<���B��(��+���$���S3!�n at E�( ���ס��pb��
i�u���
	�
��B)�n`c6�PA��Y���#sI��\Y��6�r��\�j<�oU}]j��?����.sK
-�[,��U`C
c�L�r 3��c-��TK��h9��8t_�lM2є�r��/egX��Q�]H7����-�D�H�u�\���s
��*���
\��F���
�H��Zrڞ��M�K�f�_�1�R|�R��Bdž��Ӳ�E@���;+���>����vv}>����`>��{�j:��I*��)�D_�-�,4�<Z�K{�я
��G͵"?쉉a��MqQ��-B�,���εx�����N�����ߴ���
o��A��c��
%>r�:˩u��:�]���jH{<Uu[_u{�<��v?���8>v�Rz�/�t��ir��QD��U�N�}\�{6���|w����p��Pqؖ���+�c�t)��w9�㮩���r[�#=1�@��]�&&mtE�g��u9���Б�r�o����=Y��Z@/w��E�>|�rG�����7;��Mq�G��w���җ��X�xoC��?
g�
>#���an�޼��\�oT�1
-��ܤ;V5�l���� ��5��rG
v;*p=V���f�p}c������?g��s#!	���}q��0��ҙ�bW��v9��2����
�^��(��JJ�Y���⨝!��
E��;���|��ɞO~RWex�g�K�c��C}
�ȇ
-��-?��Z�&1�
v^��}�g��^-�<R���u��K��㟮�g��\���t��0!�P# 
�/�J���ȥ�9A/���7�R�g�c�g���d��}O�B����Ӥ�##1�XO��6K_��k}9n
mYo��\����3ӵf�����;�_
�H)�Jʁ��/��X�
-�LuQ�Gia�l
P��:0^���M5���J������>@
-��'��3
,u�\�\о�8�ҟ�4�{o�.��� ��]����
-0v+k����@N�?P����p�}iާ#%$dCv/K��.�z~�b��{`
k��-��@Q�=q]�~���C��ԇ]��_W:Q��
-V澜�`@y��R�+���nt�;.t��9/PQn(�y��c
С
0Ә�PW
v{�~�X��vo�
�����P�D�|8D��T�rvDEc��[��Msu�C`�����`Cu�ݽaL�׉;�BSE�㥶4�mq��rW��|k�����eW�T>�H�3W���ၗ:|��8*lk�1ۖ�܅
�ӎ���L���:�j
�e�������fo�����UI��4���R=�'�]:x�
y���35��G1&䧭>�)���Ax0$���󝐠 �~n,N�g~Xh�z�)�rk�����&��UNM���n��*���Y`�C�,����i�?��qw���bD�MU
?Q����D+<� ���w��
1(�P�6Ք�Dʊz|�'g���_�[S�[�P�m!�oKT�o��n�`���qw�3}��rҡ�8{�7��r����rd��X�߸��QT��"��\{���X���48��
�s
-g��+S^\ͱ�� ��Aޣ�ĻS<�_K%�JH�(��u0�ws �c�E�h��Y��5-�(����^T�k������C9c]��Z[�{K���tU	�g�8���6pй��0�
-�G!�O�l��3����k��L���v��ׇ��mQX
�DI����m��Q�B��b7�E[��ZS��X+H�7WW�vSB����7V�=9T����p���x

-Ԧ���
�������{r��Ғv�������OT���F�2]�|����~�_/!����P� K/�u�)��=�V
���z��JN���n���4㵂��ju �?ݔ�)�0۔��X��b�
�[<����%d�b�ݷ�x�I1�Ä��FƎ��������\�� 1t����҅�9�����}�'�ӎ��m_
�ЖD�
&��v�o�=`����WBl��~�����Gv9�����{�c,wc��+�/m�F�r!�@Z�/+�iL{=ۘ��z���m��l���!����Q"v�~��\��,���lǹV�ˮ���
�����=�:��>߂�4p�����;N��|�l�xmn�z��
���W��NK
y.+
P�嶂�K��/����iYޓuiϖ;!^����2畚� ���@�{o�0AE�������aB�mI�	�
-J���p�<���.h�M5����.H����Q�{��t���̀��Ԭَ|�1n�S
?����r_Ϗ���grA�w:�Q�4��#U_��PN4>;�wcU�-
���]i^�?+,®�}�cA�;
\�۲]W��<�z
���iH{�ؑ�俛l汑���s�EE\N�5^N�T��,(=��� 
�K��]
��
Op�_�O
t�
r�D�
���*t�i� �t�}�hy���H�Ⱥ��S=�6N��_֡
�ܕ�b�I}���rZB?
-�7�/\�L�f>���<@
�QW��`�
��"�Gˮ���M�f,%
���[�7٘�ZS���L}�����G��`�516�X��a��(��w]h�x�X��b��/ÅO����т~^l��
�p������r�H9��j�!w�C�̷B�W%�0!/��0+���1�Ԙ�ڈ��
��/1�G%�GSy���NnB92�v
"�΁�;4ƾ
x��LS����ԧ[��w�Jt�D;�SY����`;�9��3��{ �ӕ��T�
��v�݅>�l�aRԣ�>b�r#��N��M
-��t�y�6��3TD>�^gZ��y�^��i�N5�]M�<E��GP�{�`���-鯵u�Ϛ0��D��G�� �����/���Qj�r'<P����7BJږ1���P����W�
`gCEڋ�����
��iS�Y���~{�a��"|�|c�������u�w�e��N��?X�ͦ
UY��zH������3#5
�����̏��ط��O�B��T��m5y��x��
��� �_�D�m
-Q^s
/M5Ƚt�
���Ć[D� 9'�r{�1�î�;�J������#y�>aML
-7�g�ԕ��L������A~N
-�Yb�ׇ��,���!^7��窒�OV&���Mys ���o

�*A���O6���
U�:��|�Vpd�D�ȡ�{JT����jy�����
A�)��^�s��R
-��
-���`�5a҇��,�
v9YB��(� G��\g�(�q��ќ�S
+��q�H������"7��y� �d�
iq�B�u��)�
��:�
�o�}��
󺚩m����}X_}U�#}U��~�ס��t��o(Hɪ�'���ћ2F��4��-�zԝA��o���ܘ��ݘP���;�Oyx=�h_����v ��΀�V�����7["R� ��nb���>^��i���v#�w��a+�xS3�u���\_%��G�H���2.�`����E{�v�
�����w ��������5��t#|~^m9.��7Հ?��b�W��}�d +bڔĤ���;3�����R��V�>��K�x ��^�x$cw�o="��Z����Lu�}
��Ԛ�|�!��j'��rW��N���.�ma��Ȩw����y�r�}
�֓�a���
�ts��U��)�z
-|��xe��7
b��܏Y�G#9�{���k�^صl�b7�}�
�yw�x�C!զ�'u:ӕ���8��֢�Ǔ�w!+��B/�wK��^B�ϴĜ���:.�*C��SZDh��~d�Z7�db�hY�c);��|G���{+��8s
��t���(!�ڟ�И�t�.��r[�K�0����}
1�V�t�&�\\礛K����]Q������
͉N�
-B��9^Z�RLH��ލ��s���������Q��QN�t�ٮB�%2�d�ǶHK���0W����2��o
���U6�E
-ڮ�e�v'��h���%C������ͩn6z<A'�O��-0�W�dȶ������&|��`�������&�9�J�]ENؓ'�{��	��Zz��(;k]L
?�
-�[C�ȹ���K
���`'S]�sy��!6�t��^h�}�t </�<�]E����J�
�oև`�+�`g��8j_Ãjs���3��6�\����ڇY�RB�lK�Ǚ���GjJ�����5���!�M�A�
��.���ϗnC�ʜ��{m�+�+C�
� !�2 ���Of�-��
�Ӂ�}fdlK`��"Tȑ����IK�oD8��ҟ�!w���;g�r⾶�2?@�Q�d?8�ğ���H��+
-�Wf?/�Ж�<�!��	1[�(���y_��ʯ
<�lȣ�rg��p��fg��NV����)DzZe�S}M�]]�X�����
��s1�Wm
��TЖ$�ú(�E��
��@� ��h�(|�/�K�Ky8 �'�k��zR�Zw򛩊��KMq�,���k�`w�(&�z�n?=���,��D�F\��v.j�1������':�⡪.����!N��
��ܚ�v����|�*��BG��C
9{�$�1���;���}
~jd��C�^�]�o��
̵�^�G}^i!�?h�{�ڗ�c�����1|�
�ڟ�+-�?���	��vx��O�处s=&�L�N�:E��ca���XCM����rgO��n����e��K}��F�K!=�ݞ�t9M#_ΰʗ���"N��-*�ߛ%�Y84����z8՜�#��rf�&�����Q�~���[��<M���="t�?�q�'����#G�@]z�Ji��q6�PǁX�8��Q|��0��L��ؗ���;�_/��;.u�;�Ǚ��j�r�}KX��?����N��� kf[s�����V�!A_�U�!zw��˾�5S��'#%��i9�*f��
��&ЋM1Ʀ������s�LV�?���]����$�m���)��/u��.���c#߮%g
(ё'l<�-#w�	�rd���>H��4qQ'ZRʷ):��Ă�H1�B�!�����-�'u��^��
�%Z��|���s
�
h�ּwR�/�ZF��%m��
%>v�<��Xh�y
i�?d���Pł����<��6d����;���k�����}5A+����V�pϭQ6lQ�)^�%D�ka�����׹G�u�#-	�o̦�un��/�+��YEK��J~�]	����L�?f	Y��)s}�� �����������s��os4ȑ�1��i�;����#
�3�
-~��]1�`�;PSr��
`/��

I��p�����xй	��ԑ���=ӳp�ZҮ��m|���ю
��䥿�Qpr�1~�����_,��\=�y�g��Ui�4��^v
�.���8Mԥ��3B
�5%;~� �����>x����zo��u�)��AB�������S�QS��l�-��0�.F����L�59+߮/-���9�=09-��05�]�O:11��3��=#1m�DJ��g�ʹ��)
��<��4�1vl*��_9�
QA�Rg�ӓ	*�h���d��v�C\U��F��
:�D�K x/q���m]��kM{�'�y��?�b��4&<��z�y������ljN��@��.࿷���'�c�i�b�
- }������\獩�i�JF��@q�]NM?ӳ�
-R�\;��tC΋
)5eUH�1Vg>Zn+t���R3�g��э�9Rҳ�Ÿ��^����7�	�Ax[%�χ��<��/tL�]�kj�N���ϧjz�}ya4����b��p��qJ����๊�x�TDŽ]�k*3�M7e=�J��6$�����u�N�Ffᦔ�&!�_�o
h9V	p�(o�()�H��ߕ�A�
-.x��Ѓ
�ij��ں�
s%��Ւ�s!�*�|�t�?X��E�+�ss�_�U<��09q_�����c�Ø�-i���(.��\JYS���
����X��� ��P���2��b� 6�f�\����y{*
�PO͹��#4E�[C ��1T���w GH���;*Z���U-gS
܉���&F��<Q�|�Y�2���u.�Y�P�
���N'���)
�P�����[d��
���YXk�Ը�6�dž�
�)):�@�5��-	���	�
�3#����0����W���D���
J���G&\�U�
ܒ�|��ց�Җg=5��<;�~��nǧ��0p�i.����F���^�p�W�����bOS-���T_����,���UA��l�
������*��c����F/|h �>��~Gl�7��
(Y���A�ߟ������f��MX�}Y
�n�
]�Z��m�'?���}k�0����E�C��m9#�p
�mIq�mv�+��f§]�Ԏa3���`�K]9/V��^-ug9�
a���Ԭ�Fz���]'צ.��%x�.徱2��� ��*G���!���!�'�������Gv%t��
)x`��օ�]v�=ƈ����tb�-v�\�Z�^�\��Y�j��y�-�[B\{ �s3�.ua���iU��
3qn`�먙�#�
Q��lK�cY�/65!��,m=��|7.p��t�!��X�����g`o���wG����++Ԁv
�m�1~V��B�ȹ2v

ln�Ya�O&Z��涡ss��<�&b��&g�ܰ5΄L���q�W�e�])��*.p��}�ҕ�|�t�,�x6)���aN������J�C
-P_�l�
�:��)�
����Mr�W��_�쎑��^�f��s6~_�0ݞ����l�=���+��]
9_S��n��8��,`��X�3k+��J�}�F��v%1�n���*�ߪ�3���
ԉ��:5�A����s<涂�Џ��R>��k���Ǧ&'*)ɀ�͸0����ѐ':Z�\7�}��zbb)8�/;
-=o��g�[,p;Pc�ϧل����
�Vf�ȡ��~2��ڴ��]
��<�->vW�C
�+kRv�0���B��� �C��K@�"���ܬ���C!�b���l����V५;�Zz6�b}[�
- -Vud&d�
�XD����O�r׆�a;c��3��b���
�D���ve�8��A���Q�	�G'
�u���0�o{�E��c��T��?V�c��|Ԯ��h��sOg9�)�@�	��>���<��<���M�`WQ�X�D�I�);*b¶
h�E���|0T�>֗��; t݅Y@ܔR��:`����"J�>\ԣن|�)!Z_��J�L�ci/t��\��Wc���
�e�/b���`q�e�3�[�7^�z�XO�]L�0V��^K�I��S�X��^6%:�TGL:�1
�JF憜�������8����J���4��xe�k�
bWӑ��J��*l�PK�#�Ce�Cy��M!���0�g�
���Hʾ�a�t,�����l��_
�w5W%�7W�=2���_jIxu��$�J�
ݸ ]u�}��y
��$��T��0���}0F��W�
-����d�/JR�_@�\�9�y�(NY��v��ؑA��Xp� }�)�z�)ợ��uq�ׁ�(��
_����eW�O76�^[��)Gz
�P����5��<
#�^���6ť�9�!v�+M8�D�ï���Z3�/��?n�!�v
2��E.
�Ϋ�ʺ�r��Ru�UA�w@>�+
�e��)#�^��],T��k�8�ڂ�
=���&8�S3�rb�N�
��AZ*�r��ls�����o󴢿�ٴ�Wʛ�fy��=O��Y��2V�u�%� {C�H���k���-+��R+�k�N~�����)Y#Ԅ��*�M[Q�
��

}�H*ؒ�#6$�I<����b�
->����|a�l��^"�<��D��t=�������n
�8۔Ȁ
#=�b��Ņ>>�
x�6V
�;��_���8ג�ً���?+�5�L�]K˺�ky x��A��B+�gC��ݑ��[c���㭵[�
-캄�؉�4U��`�
���B�K���lȫ�sB~�
�:Ȉ��Fn������G=�
씧����S-%}}l�%jJP ����
7�>�؎~������W�
Ҿ�OXb��E�69
ఀ=��6V�=��|U���H`����*!��
a6%�ĭaR‰����2�~9�*ޕ �'������Іoڠ^�Zf��&;5�R7Dy�s�q��;3����(d&�������
�P����=a���0,bG�
-S��=�h��
x��^t��2���04`{8�e_�ؗc����0Ss������;����RS����r���
<ׄ�G�،o3L��E�`�O�f3Ԕ��l䙁�q�'�Y�`�-2rk�;Z�u��Z�|ڐa".���3�����m
�ܖ�3�δ���SP��'*x{c�<me�c�0.�XK�9�b��Y�����c��3�������U)5y���YH���*�>P��.'���ʪE)-uI�=��N&YH��kU���T�	�F:�r�^�粠�j���h�=&��� g�jI��qL�Mu��DͶ��*��mݳ}�ȹ
�+�7p��S7��JI�9�Sߖ����l�I��籯fk�

p/9?�š���_kiӟ����E�ЀM=0�s�g����?��g�\��<i���|]��μ���v-)�D�	?R�C�e�0@φ�J
=mJB•�������
�\t
	O
��������x��
{
h�S3g�U1wF�y���7"��McE�ݝ!d���X�2VGYWT��G���v���8h
��A���
`�'nH� i}��H
a[���"�n�	��m��3Z.[]0��>���yM���
�
jK������G?%�� 9��f_��iZ������d����i����﷤��VY��rW��<��r�^p=3qEJ�x
t�oj�iJ��	����۴Ĥ�
��rO~�����)c���QN{
-F�����Wb#v(����'s��/v�~Gz.bE�L2�幮t����%�;b��^�@F
��Tw�X���*�Ej9��f���*��j��<
�̴$<Q#����G�_l��`3�1S}��Af�]SS�뱎O��䓯fx�c
)�"��n�Ҫg�M���}����7�ϊ=TaR/f�D�{c��#]Q��p����'�(CK�c]�K�,`gfW�ү����9�
I�ЛC�#�%M7��ٕ�
�y�e��8������ʺu%�*��G��S��u!�ˡ�:���>�|���{���z��w�'n��cmZl�MGα�8�U	6��D���ȥ��&��
���ӝ
xSJ-��=W�����Ԃ��U;���p1C+������H']���&�wGqI��K��/'S,��
���L�>�� �&�b�_�uEPq1�"
���aT��$
��$��՚����j������&��^
�Y��I�?���<���e} �v9YB�W�S6�I��rbԁ
�k�B= [...]
-���%��lg�硪��*/-�k�u壩��7ז�r���
������eST쿯b�m�R���
o�9��Q�'c��s��\dB��(6�@%@�P�V��^�`�
)��D���x6Q��UQS��Pw��8���+>P��,��Ζ��w�c`�}5-��T�t1�&�iJ�{ʢ�?����yf���.)
-�
!�.��E��53���A�*��g�PI�ۗ#����0��?r?ё�
l���B�m����
$f
)I9�̄�K)�M	��d�\�8=g�
��ʌ��r���:�m
��K-zj��
a��
��A
PoUU��<��
�pf�%
��[��Y+��s��rQT
���ش\�%�O&8��L�Xi�3uy��]��K|`](9�Ԙ��w��
^צAGX�=,��n��95�
-/��JW����6���
���o@ϝ�0�V	$xW��s ��|Ȃ��0�ϹΚ
�6AC����;���&���&\��/��b�K9]�j^*����v:��� ��{���ϕ���	
-��ɩ�&f��e6

�҇�o�~5ך�b_����	��*�{�C:���:x�Kt�8q{�q�9��� <��'��'x���V�VCq�T/��x����F�?��v���
@r������x�f�d\MrP�z.lW�ʰ�0Rf;�N���g�J�KmY櫥v�g��yR�uN:.�:BO�
�'O�f�P
�6TFݙxeC��x�½QdG�ϰ+��2�϶8���X6P/�/f�b��c�/�
k*黣%��aJ䁒�s8��T����b�e��[��O��I��.�*�vS9}S�N���/DžY�
]�Ը����W�Q�lc�C
���~�nG]�90 ��fh��	b�M����H~<�������\E�MWF�UG��^�Iߦ8�33vj��:A������\�����"D��	IG���s#��r��?��v��JF����rs�1XࢮHt(�v4���R	�j��
�-hi
h��Hv
�;�\�Oz=D�;L�{�/G
��ji�1ьp�hF:�ix�a�
��\��R [...]
��=�m?�
�<�>�ӻ�sě*	�3�kp����җ�i���̏aE�ۿݞD\���uW�C���R�梠7i

�踰��ִ>���6�8��;�
�t}���
�Y� yl}�ߟw�G��.��kg�"3=�מ��� ����usG78�{F��
n�s�-�����]�@�gc������D�����D�|�����05X��š��������7Q�+W_����xȈF�
-,�|�얕w��׌^���o$-۳2TX##4�~�;�i�ϰ��o�Wv�xm+o)ם?�m�y�i���U@5�% t��{���
�ek�X���S����CJtIL�#�?2��[�,Y~���o[Q���/P'��H׷
�
��l��\�5�y��P1Z=/�E��k�׽�Z��~�•�geI%�%k�R`�C3���
�!o1}�˾�'��kQ
�.�����l�
�-�_���LC�Q��@T-�%�\��
�o
qak
-Y�q}��#��
q
�s��sL��ǔl����.���f’)/�����a}��
-���<�-<�*	�x�y;��s׷Y��Up?H�$,��
-�bgx�Ѳ3���A��
�W������
�۷�\�
p<�
�!��be�w�B^\�"y^�nnO����(-���yh0i��R&�C#�oMv
�sqHI#�V�~%�{y��ҏ������Z�
-�X
�ӘR�
�F���5�
��;sě	-t]ۀ4�&�lN�=����Iϱ�F@λ��ǜ��H��4?}���b	3n �Y#@�h�m5�3�{䘹�~;�8��<��W�^����8����v^��m!(W�Ã>խ����izm�"�$,
L�)䤝|v��B���F0'���H�(�5Ī�
�$8�,N��5P;c��Ѡqx�;�kۘb�|\|�s�8k�`Ƿ^�N:
5�^�|���A��
ٓ����� 4����b&���sߍ�w����Wg�~0���J�ڜ�w�ϫt�Ĝޜ�m-��v���AJj%D�J _�"][y�9�q��pe}�Q��_��cS&
�a�_E��|us�Z�=)hݞvlN���&)7���g�FjSXGoޙ�����WJ*�yQ|��W�w~1�9���b+���C9�62;3zrcH����q��s|�=�tL���lZ�C��5i
�14�������w���&Q�f2�@���ˢZvw������3Sr���
�Z�I�!���)f]�"��4�)3�n����:�訆��Eg�����	�!�ltU
��_�鹨�:�n�[G�
r
�ru~����ޒ.o�#�n��;��bBAm���	�� je��
�2c��"�w0�a��ϛ�p�h�~Zr�?M~:���3��+�͸~x0m
H����������f�Φ����[*��D�I�ȹ~��;���^Ėn��9����L� �d\�w�&	'��uC��,bFB��))u�EB��Tυ�7
ǡ�9���]*z��?Om_
�_[y�w�`�Q�.>k]Mm0�@-�pQA��`�*FA���R~�90���~��k
��k��̌".�
÷S���8��J�h_z��I�X�qݛ��t�˾o�ߢΧ=��~5�=���FtԦ���y�����ޝ\_�#�
�Ҵ��ʹ�Ԍ������X34
2i��V�[
-b��~�A43gwY(��G7���*P������D�V�i:��G�U6~���
~DEkx�
ky!��
�'��zp��V	;i3�*lg���[�lLr�����'�U;
-v��
���U���q��\^X'!�5DpQ�R
P�9x��*�
��5a�|
���q�%ד�/-�{��?��
�@|����)��7��P�XZ�\�\
-�
.p�B*Ng���n��߮������?n�o�64�/
*X�A5�/�`�DtB\ ���ۦ��-�����|s�s�9܍�^D͸�A�]��W$-B��,���L���	b
wm}
��d�wi�wu���
�^8ޝ�S[�
-�ռ[�`�W�zO��x��
��|B����)z]
��oq9���
-t����ċ���RBL[��7��7��>
Q��!%��I
���m��_3�ؙ� �>��sB�� gk#RcBOG}\�sv�
JD��_
�=�9�+�:�)���1��VoTE����
I�����@�ո~n������,~y�_�0n�>��Tŵ���<�&k`���D���O�i-	��-� sc
yp���<h���N�|oe��ޚ����.d�`�^
-~-
��k��g�������Ϳ�
⊟�@�6�{�p
=(x�����Q
���������/�
<P���*���~X
��Z��>cS��w����Jj�_6�_~X�9n� �&!�,�mHF��"a��D�p�����~5
�u�<L����T��yrc�@�˺�بI�7���23��CPC�~Xc3��
�2md�eL\TZ��ʁ��`��
�<e�0��)��B�ܘ��,
-a� +
-�S���I���<k����֯�JBe at I�
-)�9����
~���,<LT�j1�Q
�}󃤀R�
--r;B
-rEx�^��7K���Ăc ̥��szj)%�
�D�yz��<�l�5���$�8��h�[~;��y6�H���ss�\��s����<�6k�D�R��<�fs�|3���Bz�@��LҪ
/��=oq�NC ^/��ʯ�]��
*9�z�o�Z
P��c��F}�"�f�
��i���ۿ���ϭ�!NG��?�S�s�f�sbQ
7�d�����n�m���k+[Sz>>g��2� ޫAmm����V��u3`�.zO�Do�����P�0���L��e���<z`����D�7�S��W�v�(��Pkbz17�g"�&-�RX���G�>��0߭�Wϳ��YJCH-"�_�k`�>yN�>^d�'T���<�z
�8��kKo�f.as���z�9�w�yY�L�4	�
���*}�m߯�k>�s�ZU��f�5
�T����O�wMm�×��~�����;\U�v��6�������M�ļ�C�5E��u�@�Jhݚ��>xVaE2��3�BZz��>�kkQ�� [...]
-[�9�}*�%�'L\DP)��ϱ6g�Ŏ�͟���:�6���JǮ�ܓ����<Z��# �����}�Ez��,�"���
-,p�����F�}��tx�v��M�KFVO��Enj�r���[�@η(Bl����^�/��7}�y��ux��
x	�u�֍y^��'�I���/�g}�P�B
���Ib�6�7>� hþ�9N�����`�ߋP A�2z�DZ��EVwP'�'��M��;N��>G�����-je\C�O驭���F�� k�1���=��"�im
w> }� ݌�8��z��{�帚K��(�=.{��~����dp
~6��\��LٸXPG�RV!)m�b���
T�^NݑEv���$oP�V��F�<��{ĩ�yBmT' ����k`$���kFk��G*� ��Q�H�W�6&IPa�
�#
p<e���QE���?N��~��V֦���[��������Ĝ�G��y{K"��"�m�5�4���1ns_
���k}Q
W�
���݊�xh����?�8��d�
DJG��k�7����g�
)�\�q��V��h��3N1����1
�8n�U&��z�qe}�ܝt
�x�H����=#OS!8�����r|�i��7�S�r���=�>�qKz/���F�/KF�.+�
d\|��j���[��/vfIUy�����ju��f��D�xԏ2�H�w��]��y�(����%��RFzg�B������
G
�q�
6a����
	�+�B_���]ڵ1��V�<��%г��3���<�~���$��b�	����.�a�^3�$�a
���Y�尚��S�:0K�N�
pZ`59�9�3���4��sN&<f�σ�(��NJ�����	N��Kb�j��ͱ��B�o�\�W�{��露w}��Sq`��5���cKo��g!�1eCA��PpZ�[`ݟM�w�ckUly��y`�ڐ4�)Y�X��'V�ۂ�Q�,�C�oMa����8
-t���b�c{��UKȁYfcB�h	/*7� ��ޠϮ��.F����VB�
'�y~�>���dL���kpe��7�w}k�X���!��,��y㗡yrUh���$\�h�Q��G^��B��
�&j��#��;Q�轨E�ߞ'VX7��z�~-�㓷g$(�����
�P૒z\SP�-s���՜����i%�:
w_ؘ�U,�6~
-xpeLDŽo�!�Cs�ʨ��֓�FsD+�ƭr��,�vs�x#��2N�(a0bz::�%�D5�椉��x�Ld]C�w]��N�����>&i�S`]#j|���c!
�;�07�z�G�����ڙ��H�1냩���ۘ�K�Z�-9�|$��h�<i��
���
��яT|�}�t�����%�9
0+��"
+�?Ƭ|��
�n�
���I�W���J�*b��i
93P�{ϛ�ky7��3ӻ�cm'��������{q��On!/
XA�,�hM1=pBiR�Z��X��]ٞ�]�ϐo��Ɯ]@������ll�B�+���vs��Cf�"bL��H8���ٕ4�3ղ:�vOPEk�iM��(�P!
��;��lx��UHA��Yx� ��^�J��@{��F̍�s
����'�lX@���YS
�a%�;�!V�5
��k���h���0cZ)9�Ң:��-LD„��+�}@˦,
L�>� n��pg��'@�:�ܽ>�������i��XoPOS��}:>��@k�3���
�.4���E��/Mh$��ntd{�V�5�=o����~��ߗ'�������!awpNЗ2�iI
�gg
-q���w�G���鰌c�q�.�Ft�����2�FZkd��R\Gm	�
�Ĝ��k��wB�A�2<
�s��Ej]x̟�ٳ=Ũ[{�(
+Ę�Iv�ҫ��7�;�Y�:�1ƨ��uD�9}1%�>I+w>CŴ"6�	��{X��8�jHMoI�X��W(H�F
�L�
�'��beVoO �Nܚ%��+�9+
���vA�d
�Q��u
?����0�Nv�5�|�R��T�C6��
�d�|V�=�(e��V
!��Ғ.)	jl�D��Y�?�q�"]ߚ���P;:
��[z����ܴݰ5C����\u��^�o�0p��Ն�����/��$�G�m�)��p%듈����
�Ǩ:�}b�
��g
߲����,ҁ
����XՑ*
 v�R��C��Z��YB���oV_v|��6����:��=�D�畈2.6�nxV�G_�*qW�ZFK��E�@<'
���99�����hI#�;���
kٝ!��r
C�F�J�0�찊�ױ:SF."cQ� �-O꾘��{�����0P Ƴ`1-Rs��
-N�Zн3A)w=���&k`W
_`6%�N͚y��C�J�yx�O�Q-�-a!ԇ�
gC
-Ƕ&:�%��X$iӝ'~%������WM��ga%Y
���vP[o�ưg7fM@�
FԼ~�O�ߺj�*�#5�-
TBK�ۜBUx^�9{O��WP�*A���la���²�OR��@$��nM �3����)#VQ���5}������,�L��A����$LC򈖏�,
-B���2Rz��=�qh%f��
�>a
�A�y_��_�
v�9�F^�Zɭ��Ջ�;����ZJ
*��!�gc
-������{����o�
�rG�>0����9������q{��"`g=L��$�fX-D'-rI�g�d$�aC�D�缣/�^���ڞCV������o�-��	��
R�F�0i�I�n����.�L`iT���[��v>b���ZQQ�s6z�͡�
����Լ���;�
�����vDCk���<��雍���G
-��y�~\?4��u����� ^��u'�����F�L�\�i=	��4�QS��A
�-f`����+�'�2޿�)ا=c&Ԥ���$��y
��k���v�4�cw9^�|��[��CW���c����<ҾW"�[��36
-�~9�fu������������`�
-bi\�l����^�0gF����ӁEJUp�M���$��
�'ж W)a�ޑEruBC���imA�me{������8�,ke�m���j�f��=/�
*�3�����+�rUt�T����Rx���MG3>1�'l#�Cz)mk_�:�y&���
΢�����y�͍i�M�ZB
-�d��U&ȹ�
�7�K/��6�0�~���:2�Qr��<�$��h̚���Z�\s�X��q��9�儎�։	�^������\b{;�{�/q<l�F+���4Z�ip��h�
��}'
?�M��9+�1�@���S�"JvwT%%Du�Fbz>�7�.�?���
���v�v���?�0�
�����iN�昨k�g���l��y=i"֥-BJ`O�9 �a(n3�x�շ�����+�Y$t�:gU���^>+�
���	�	+�?m2b::�du�)
�Y|iH���ع��w�����M%�%���$MlL��F�&1���mg
��oL��š�#���
W�~�im�E���A}d
&�KL�&��ڒ9m�1k��F4�Z�<���L�Y�<�$�E��]��e���_ܚ��\�UX~�c&k���$�D�䆂���]��+���>~C�� |�#�f�Ef��Xo�}� ��=/[��, ����*
��~��v�7�lص�Y9�3�
d^�2p�r&	#g�K�V��5��)��I�w`=K>.�I�n6����Fv_�:r+���Sz�o����g�G�^#�F���`a���<B��Cg�rp���X
X@\O1�Y+�
�$�~\'��灾}�8��������c .ˁv�L���������͡o����b��
�ų��
�3��C׼9
u����z�z�W��}�����1�����u{��ӋI�O �ޚ�;�1�ubkq5i���
�	긘�IH�)�ȝiVcR+��5�֝����y���
-3
r/�evD���E|��8�jRCm�����>P#|
���Y~���y����ϳ����~�������Ԙ���a5�fk�_o\��*`�^�~�9�:�X`4g��I��BZ!vu�xm������+)%�*��4�o٘�~닽Ws`���í�/s�R���y7
Wp��Q
�"�$6$MLX�,��-����
ܥ�wȳۓ}�&R[����\
b�L�� ��>������A
�oc
-u�7��
[$�g�T��5
Y86�i�J=t�G��C o��_�NY��Xz�}5��I'��ǖ��t
[��V��S�
b��;쵵��g: ��&m��Vg���d���y|u����mll`~9��mO��V���(PW

�h#q���O����G �9����М0��f6:`�a�F>:�b���q�����ݫ�������|XO�~�w���o�}6
-��%�p�$$d
̮���`f���BV��Ef-
D at C��%x�b� �)�+dq��_�s�v]
D��',C�q%�=���'U쮴R��͓�V�7~����祇5GbjRm��'��_��;�|^���l��PQ��`y���q{��� O"`<�o��,�F at A�kX
i��
42;m�#*Z��K��T�1����bz���q���s~Sx��*�is���o��b`Q�ڞ�w%�r~�0$Y�f5 �ɻ�����ιyT���a#
�~�,
-L	����TmX����8��ڒ�qpP}����IRIHA��1�0)
i�������@��% ���TI����
A��[^{d��Q`K����v�]�)xQTG�d��)ryh�՝�I5��
uy�W��yI���7�+�����ؚ%ܰ=h�2�"Vg-���u�0�Y�
���/�ϱ�	?��Sv&,�%T�9-�/��8��A��Z�}
쎥w�k@�"J썄q#��sI{��ͩ��a
�5��� �%
jiM5�f�DkKY=@�v'L�N�%��崍K�]}	�,���
澇�Jj�����߭=i8�}Z���S�aEvU�(��¶�)5`
[r&fo���
*P՛S���1%!
�9��
��	�{|`�Bjbc���'
���͘(
I
��)���k3��#Rs����(��Ґ�.jw at E�]
'�9�	#�R�
=ʺ�� ��yRY`�� �:"e�Ӝo`gjV�a���
-�{��1v�
��I���L�IP�JV�_��
�h��^6��6���5::k�vmM!�F��)�m�E"4G�	/`�
O��PK�>]{��
�Ͻ{.0n#�>&� bZVg�Bk�kzNG��߇�C����V��)y@�0�7&{~�
��j�Y���
t]
`�D��3@���
bv�&�'4��wu_��W~��!:'�FU�¨^L�A5u�֘R�q���Jx��\`�PZ�u�yG~����fA
�-�����@Z�뜎��-R��]7O���˒fFw��%<
BL�쌪��Y3��b��ێoRZ|��L��K��&����c[{O��>ή)eĕiv�w�p10G��O+�
\�_���=�
xZ����rN�8(ZyC���w�q�[�)�g��^�!���B��<�����(�'Zoc
-~v�}��kc=?lM"���H��X����!%�‘���U��|W�Gϓ��=TtsS�,�t�I�
()�a
�)e�w�d#�K�)��Al^ٙ#�LE����u������Y~�^����+�yXDHwnΠ/�Oo�_! ^P��:f�Ni�w/��
|ڌ,�<k����(j�#u�
�사�1��r��~2e`c>���W�Ҕ���)�w�){nh�ʗ����0p�w1���oM$
(�5�7
_�l|���=�ǭ�q�S+,�'����M��Kjzc��A����e4�Bƞ�K
�!c꼶���WO�_���T۷�9�����,9���ݟ32�rfBuƌ��ңK�Vz���xs��
Vݖ�b��2����������?
�'��
2��5�ꌨ�wi
TW��yN�
�}y;�)c!T��!�	`�,	xuBC,_z}�׮�7�	�c���~�
-�_ߜ�U-�.o�QJ?�٨�}�E��	-Au�������+����9��
Z �/�h:�9�z4�d4�%�]�
�X�)������ϻ���L\��Tױ�7�GB��Y�����I��ؔ���_����
LT�����J~�띊	�gg���?b�6�.	��Ńy�T�Z;m�w�L���`���^��y�e�
�����?�gQ�π�Ye�}��
P�k�g�cz!!k��&fgLK�_
�=����讃ذ�`�\e�A��C���T�ޔ�ߟ5�6Q�z:����]����Ӡ�o+�-�2
�N�0
^�y8��R
��%��:�^럆�^y������rvE:����!3	}ߪ�M���Ѓ���v
p�m��7���4H�i�ȭ(ЎK�q����t8��/5
�����-�RԀ����;E���H9�=7,ʻ�� �Wu��
����Y�?-x5g��v��v��^���zg������W���s�7�{NlM��&@-kEZ}�+^��A0��(�$ҿx%�<�p [...]
-�n���;k��Ԃ?��%����G����>���o�F�<4����N^���������c�������������_FQ���$Qq������XS����T9�O��n6��
�n�����/���g�L���[�KG���9]�� yJ�z4������x��90��K����荧?9z�!B�]|���3g.~�]��t���QB�k$����\`uԌ���ѓsP;S\MT����i-q3�?e1#ZV��<�4�H�	-0�:>:cQR	=���:n�

��߳5MoZy��؞��G���EbEJK���PW�&!)f�s?j��c�8(.
-����
�8<
5H�^O(�u)��5JY�o�����愁�Tbn��#/lN�)�u�#���L�hmi
����I=�#���G��ڭq�Ŕ�ٽ�Țy���ӟ4��Y���0sQ>�|}^��߈�1�z1-� �
�oBO���9�����X�7��>M��O�Y
��5�����+�:�n����|;������
��ВՉ�Q�9�fw�
|�"�m���v�T��>�c�2��A0
t�D��[y$��&
&�e��Ԕ����R1�:VG�Dk_�l�~s��L�Di)��=����I�)�&[3���Yrm�(�,2^PC�
(�Q0GY����	�����4{���J�����i��9�HTX���:�Ԍ��O۸�������	
�2m$ե
�}8�C��ظ���	OXY��3�Z26i�wd�|r�.���<�.
T��'�-|j at C����	#����{N!�W~
���3�y� $�\Tj&�/i�I� �R��G9��W9��p�"�d�|R���C���VFo��F�]"N�'�f���R�>� ���n���
�
lL�LlJY�mq�.�&V��Fս�
�'��vX�6C
�q[�q%�Yje���%���
l�JkKh	�i=�j~��k������yRy��ǭO㯅X-i
����4qQQ5�"�—5<��$�!i
L���B�
�
q
�Jƀ�H��	=�9�����\x�"Ŵ�o�P��
-��oy>��*N���9� 
׳�&n�����EL��G���k��n�&e �d�\d�$&�,bj�,����2f	#m��PM
�6ge��V6<��w�Y�*�bF����"�=m�!R ���ؒ��������R4
��*9#8G��3�a�i���t~�R�˒jRMDKm��U�/���?����U�*���ϫ~����˴_���3 k2V	3ePӋ_�
��<��9����� y��ݼ[>���|�3;b*fkR�l˙ؽ9
�;oct����ӝ5JXi#�5�!�� �|\�.�f�"Z�&�e
C�I���
-�1���2˸�D�v
I���q�B����'�N.O���=�����Y�T����@M�rN�0kaófjs҈+�;��y�-j�_
�7��t)����7���6jk�Ii�;h�q=��7�����p���λo�v
!�'��ո�-�4i����?��e�<2�, �;�r�z�
-�q3�1f$�G�
d
j:��Q�
�s�P�&�flbf����u��λ��M@Κ�)�ȝ��[�	��
5?�y巓6jG�{r{���
E��T�
�)
���)n�ќ�Gu`
W
-5�^y�{4����
"V�#��
t��'���:�‚S��X���iJ��
�2��!&f��h�g��ɕ9���k���=�m_oOt~�pa �i�| j���` ����
�'�'T��������Q���9G�^~�<���r=2��+�
I
�:�H��=������q���N�	i�
���s�ɞs	5�.�`�SF{
-�Nl �h9��ݬup e�ғF.,m����>Z����:�Vbc��E�MrAD'��=)���qz}3���?����n�mw:��MK	!�wg�Z�'_������*�T�q�Ӻϗ���`x����)�b� ����f�%o{/��Pe9�>g��ȘIMP#� �o �0����]�T��	�zg�M�!��B��
$̜����ص�Y�Bʾ�ھ����
���\�鄂Փ3
�5�����=�_We�y���4��I��� |!a�&	5	
�N��^�Pni�v�;0�s��i���$V@]9r7�<pl�vW����� �3�=�A�LȒ�	u#��9�‹��
Q�i+��2��9'�/c#��lD�шK�S���T�ނ�΋�c�n���Et�ޘ�ޕ��I#�wKe�����<�:��6i
�Y���Ԙ��[
-n&�b�V|�_K�
h8�[� +�C�Y	��Ʀ$-����
/��={6|M�g� ��u!�\�OR��<DXGjL�i�	
�=b�4l�#�
O��xI��;
-�����c���9��ٓ7S��6&,cf��lRA�6(O[d��IL�k9=i-��%�8�M�Z}����
�+m<K��(M�<c�u�Z��|^�� 
�5M��q�g5%T����֘6@
�)�)3��Ky+��b�O�_m������\����͡y���4�$4G.�k�I#��3/�~O�9<
�8mg�"Z����ڒ��; ^��v�1-
�"e���@��{Ȅ	WѠ�c:By�@iLl��Y]a�+�`6�h /�5�9��x���$�BJ��ܚ@m��_
�ҫ�&h7#����ם��������?&Ԭ��Q��Y���EJuT#@�9���z���kc�ڜ��6��.	�(51�H��M�9�y����KE�΁P��;
���pI�'c�
!� �r�Ji*8q�i+�$�h�
-Ԏ�
������<�d�K�+	�q�4��I���54a��� �ɸ�����A�+�e�bA�-yq;m�b�f

!{oY"�[��^!7
�goi�e�%�C
��r�O���Y�

s�ˣ�,dDK�ON3�[�F�9��^�
-i3�+e���Y��Po�:FgD;�K[ey��	5�J���q�?a��V��K"Q����g�%:"�Ǘ�5nOY)m
6��V��W�f��y���_�=z�S"�
�Z(-)C������;��k9;���
z�q
�ʺ�w��<#O"`n�c�߇��sFj�C��/��w":��u�ƨ�X
Q"�s&j
��])�/�"U�,p�B�QYX/�$����W\��ۜ�حQ��� V��5�!�p�
b�, D�̶�� =�*��6�M�����tQB�G�ۇ��P�{�>�%VFtԺ��5�
��3�<�G~���'�ؤJ��/�j���k� ���{�-��=VЛ �1��9��� c�ĕ���dL�s2��_�*1W&|[��ݙ���
	�#q��Ɓu�)�%%�J\���6	?3;\�k���z;�g��f�E��ۿ\}���ꋶ/|����il� ����+�LrQ`F�Jn��5�!T�Մ�!-
`
��
��=�ZV'�-�.n
;���.m5�u���m�:4
���pPi��ò���ea�nZ�O�+��2?8��X�?,S{SƾsU_QX	8�3ketem\l�)b�2q�6|;�K#��;�	� N�&jS�DkI:ب��O˹�,�w����]��9�½%��ÊthoI��]��
����@,�l÷r�[�s��3����e�(��gf����k�Xو�U at M[�]�����	�
���gj�fZ[XK�L٤����k��Y���w��T�=����J�K
J�C�ɭ�%� a��9�S�u�݇5�c��xQ#�Ӂ�
>��
��@
����EB��:V���̮�_�+�FrC�J�M,�8o=ͺ�ŭR~X��xh�S>��%�<j$��^5�4޺�դ�G�A��ӟ�Rۢ��+���lL��ؽ���l�	WWޠ��T�&�ۓZn_d���Q��=����?�|�әM~�Q2f�	(��H�N��Q-��ڻ�?��C���yȔM�؞"\�i
Q-�
0��9���7���
_< ��;�������E�p%�yLIt�TY$U�0��ZR}T����)�Y���Pj���+�X
\eX���:|]�����ƻ՟p�0{.:eZHM�
-,oF����"�t}q������iBe���VKk�(	��S�?��n�spmc
}���'�����
�$%D�h�i30���
в�Σ�>ĭBRXM�����I��1�=3���-䆜C,ȯ����h�>|� �3�`��fR]�Չ�o�s���K~+�d��v&|�F����Y W1���FRm�Ni�{��]��9��g)����hB��5)�!W�
��0ȕ�
_ƈ�_��S _�<�_�
�z�\��y��
-^� �di���0~a�p��'e<�/2@�쭊D7���W%C9'
3�+�&HY���T�23�R���6��5N�yON�0���V��;�'j���]BN�#��<Ri~Y"�� r�
�0��s�b�o�����ˌs
Ov��
�U �l�r at _e�PYFo�� �M�LI���fm���I
�6T[9��dy����c@�Č"�
�ܔ��k�]�0.
���߁���zBu#4tL���>���ҋ����QWZv׆�ߥ~��g���c	-UӚ"Jz�o�^	5s���$��s���
-j�OA�z��>;�Wt,v~Q��z�j(��4?�YΟ�'3�^�/a��.�k���S�g�;Ϳ1���>������髭w�g�,ld���I�q�L���|�qtc��kPJ!
-jU��C��<b��A�@
؞F�ٜ�>f{R���םg?��]9�G�@�CM�"zcDE������I�5ka�%� ������4�{���m��~�3�,�Ob/z��J�9�=�X��8������Y.�YE�R5

ti�!d�-�FFF�xo\x�c�v�E�j���b̀�ͭ1q���c�6�nN
-`3�5T�0F4�2䦜�G��i� f�����H�Pcv�G�@�v��딞 �
�4�
��s?H?�ZwE
������<su��x`ɮ�C*x�
�')+�3e�wg\RY�&�m$ʻog
bv���最�;T�Ӽ����]��K<����[�Mژ���꺈�\1��ԁҞ�7��6��Ҩ�ڐ�0�*�� ���Y+���<CY�X�q�q{�biai�T_�K�;��
-K"q���Aufo	�H�Y�L�|6����@}d�
,DT�h��Q��A�:���|�>�yn�ȯ�������TS꒖y�68ײaQ
�+P׳�GjHW�̬n�zz{HM�	~�'U�UlX�!�F-<�Vo�wts
-c��
-���"�)�!s�޵1A�֔
����ة��I�KWǻ�EUز�h@��/
6!�<�!�mΡ/���UY��$��#*f�o�X
��ԅg�U5�9�awm����<����w�� ?zSjru
-��
�Z`��(���چ*N N�#�e�"
-��(�=��Q�J�
='����y�"g–eA��u �
-�OXI�����3��ط��sZWH�WU�I�L
��Ղ��S�)5�3�e�d &%t��
���D��^@�%̔^HH���
p&��%��W
���
�Sצ��	���s����p�a%TW�
I��[
-3^��&%떈Ү[ �%����
������q
�6�v ��.~�
���
ۭg��;ov�\ja�Զ�a~@okHϻ�C�9K��$t./�q# ?�jZC�J��x]p�i)

5��@���|��Q�W��9��ü�C�8��97��
�
\�����P�b�(�|0�� ���@:�'n��$�
x�2 
h��A5�:�a��m��/z��' �	5�&f�BJ�3� �,��:��Σ9o?�{n����������Y�N.KdP�KZD��PsU���
�`�%� ���V1
jn}�a�V�ov
��w�r��q�3O��>�o
,��sy���V	'az�.b|n��y�MD˸d��{`0�S&�0e���2P�@�k�;*B�o�Z�1
-�9��Tn������hdQN	,���
-N������"�
�4k�0 �(����dB��i
-Կ���	����.g�	���ж	� ��Ii)
�W�)����5��?�{<2O(Mi��Iԅ����&!9i��B��D�W+��~�B]�jϙE�
���"��\�(:��:��+{Ϧt�����@�O��ٚ@��-Ra�.�Z��s�;�?a`v�`N�,D 踔V���F
����������	�1�ct���2~�2ta�(��
 �Ko�g�S`=ʣzf�=
r'ti`P�v�y��p:�
~�s�MM=n�cr�� �i���6
- at 3<f����8�=/��
-8�˃��w:@bz �{�^�`�%�gm"�.�K�K�Y��h
-�=�W�M2N�"��u�? �e
2I
'���%��y@���>�X�o��kRz�+��8��&�{����I�[v�um����s�!�:��b�N��lY��RI*ff�%Y��\� (1sI%'���;޹�~���������O(� �hE��â0�
0Y@ϥ
�ؔ��EB�N�q(��ֹ��A%�~���
-i�b�����̫e��k�a��&
ۯl���{��r�^�rf��gZ�l�͵���.0Nv)�hn�OI�=cxl��
-�ꇏL�5�$���yr�^Tɻ��"����!�0~(k�u��Ƽz
�&#���b���}eU��
�]?����@S}:��$�b���Ҷ,�Y�!��
����q-�
-�I1�u휣���傝QZ�s�5��Z�>cj���#��K�ٲ��R�я|�[�`��c�t<zH+��5B�}��
�?ޝ@<ݝ"�Z���]3d�y��t���c �
-Z�e0��zw�>)��r��7���p�-�,"�<󰊅����
;��Sp۾@ΰ�ߴ�a"�
�G�����x �S2��`��
��E��S��#-���qP�c#�
�
�3[��2��1GIs��LcW���
J�o����CX-d
)�$��^�mO��oz��g瑳�6�QO\

�[V!�C9Ԫ_�(�(�9�3�w1	AMM�SYY퐳�MCw ��� �� �{L�gYLw/5�xd||@�D
L\����ט�?6ٜ?7YL�
�e=�S���%j�찹�
�b���:�ǚ�1d`�\JxĶ����>�����z��_5YYk�r�
���'a��C�7
I9������8��Vh�ӂf�h��|����*�9�\*�]����=:ҭb� ���t,�_.�Z��e���U���a���d���	*A�ǻU$p/5�neu�K)�
��G���Gk�CA�J�N^�l䳶��M��<�	F=��f���1d�1������F��Ru�?��/ys(�0�#i��W�v%<�
p`=B@ˡz�
�C�(�u_�i0��V��0J��K��Kb��49>l��=YV���
����(xx��]f[�d�el���S4�^�#~\�G_Q
8�*��]�Ĥվ���L��
"f�y*�T��Ӕ���L�S΀9����yJ�����4>J�{8Ɍ=�?�I>1
-�Z��@�zT���������_�u��ⓐsmK�ԝ��ǁe6*���Rb��a�L�����K�}�w���o;ȯN��Kc>����z�2�SBΰ/�<��1�^
��Й}�XE)�c�'
i(h�ԧ���!��M!^�l�UE���3���rP^E��Or��^y�}��&oH>'��>g�@�n���f��~�.T]i���2z1�+.)}k����>5 4öā;�<�_�4��ն{4�n�;�,�c���\�!
�
-�� `I9�tb*o<1�7��!�}B���N%�5Ȟ�)�5�K��6�
�L��Acm_�T�y	��%.y�+���q1�e!)���V�^�� ۻ5BV �����pHӤĕ>ҫ#yu�� Y�έb��۬��>�O�
-j��R��G�ʙp����Ѱp�Gy��DP���k�*�mW�M��}mW ��1�3�!3d	ګ%���5��<��3
�H-�&B�򺠹��xMXzD6�y�EL�87�w��ڥ�i?~��V5
��:B��>���X�b�ZJ�j�T�C�0�-��l.����r��Ju籙'pH(��s�����\��{Ք�c��!�ZG`���=J.�r��<5x���ua��:�
-�a_�!�r>�
�̩�mL�>�~Ȼd�!�W��r�)R��;%�=ˬR����,n�
�u`��c��JI�N5d�|���瑱J\
J�]�x�������8hݫ��)�P��ڛ.{�֝{�1�O:Rs�^��%����
�hm��O���
ȩ��b��%�wa���^(O{6��ە�l��V
T��a�HЕ��/�ݱ/�<���-,�&�V�eRd�W�g�@?�l$�Ҡ�K��q��c���%!74�p	j1�#3��b�s�s�1�]K�Io�=j�կ��N@�8l��Ik��W0&!�p����p�
�
!�q/s�>-���N���Vp�ah-B
Xp��TYtK����
≱�٫b �z���k��
2��C�Vķ�+as��W�~̥�kw(� W�ל���O �Դ"�2%�+e���\\�@.:6��!�����ƚN/x�})&jk��:��k�+�*r^@�Ğ���Bz��2ܞ���/�d�,7&1v
�2�}�Q��SMop�
h��­�\jz�m���6�x|0�.�43`���h��&�(`W����C:��L�27&i)GF������+5��UqM �# ����c5 �k����Ed�_W��3�*���c�o�FL�[AHjH�
?�~�I(�������է����a���u�02t@%`���;�'��W���R����^vd�0?Z���	��V�I\��N��LL]+�m����,��@
�< ;��"��7�h����/�S�	Q�y����$/��q��~�}�"#�%����i�eF�m��mſu�R���s�rXG� �
E
i�|�]�
K�b�5ñDI�Ma^ ��i�~9��bw��{S��+�y����/ZGK
�kkx4ho`GƱ�Bt�)��ș�%h��╕�
k1����w at fz�T��+��^9��Q���d�I��FA���h�*������|��q����%c��M߳
�n�{	/5�����ʩ�Rv@�9�?
x���mE�GÀ.�_�e�H�Ҳ0

%�%ܦ����y8hm�:OM�=ۚʽ��!��G-�}
����U7�
}>��t�m
�Ht8KN�ü��ߥ1���z����k�d ����i('���&j�O���.f\��I�G��z/46ʚڀ
�5,��
-6�>9"fw,�7�<.<�O�B���W������ �y��C�D�N��]f
����,�P�)� �*�
-21�gb< �
.�Q1�
]�L`M��m`<Zh�U�ʦ��N�c��z�|�O[�jU�������Je�1�Z�h:��_{��5���X�iU1ۧm

�A^_�
�ٴ��M��h�
4r��5~���^��<٪�
�U�
\�
IǺ�*���fq�I\�7�׸젙�pk0��K�!3�Z�	���*����
�J��F�����T��<�u����=ɹؽij�s�
��$�=1�H�NڝJ�n�O�yg ���)-�
�BH�r�W�FC�'*�HG-9
	��	�Y$���"��,#w���?�˹�7��лD)�h�{%�T���� 旰���kֱ�s����~��C::<�"e���L��^�]�-�.�Ӝr|��`��,
�>�XO�
C����l,����Qm�H*��^%2:������#��*jdR�[�.�Oѳ�s\�k�U��3CFb�[I+�ElH����K<�GZ�́sKPQ΅����

��z
�[BJ
��x���K�\���_K��hH�hm�P?�PWոԵ�.Շـ��
d*\X�D���b���
 ��ѕ��������z�p���騐��נN��&R�_�J��1I.9�2��B�}��!�
P�
}
-bVP�D���s�T�ҫ�
�����C���L7��
-��֡�:ra at O/
��뫚Bfa�WC/�)
1�-�%�͗��]�D�L�Z�*� ?4����T��[ՆV*��Wj��A�BsyA�@�3�'k�r0d�
*?�WuB�'k\��u�-mm
��J�_'���x���
��~qCh�'<Zeѽ&T��R���Zu��zU`���U�jG 냬�e�L|�t-fQ����#�;� Ox̓5�#<>�-�KIɁ桏�
�F 
r�1�{�ϽJjt�r�� �k���z�HC.�*`/m�Y�7G�.Y��_y�	9A

c)~K�
i���$Ԭ�El�m��%'$��@���U��\
���I*>��^%{0
{l�L<�=�u�/#
���
�{��ڣ��R��.[�3���q�G6ާ$eY���=^7
˨h��;BH����.����c(��p����Iz�LxN

�3���
-��r�G3�q�I
�.%2�%#���
�c�
s�r˜
�T���ݱ� ؄M
@�
Vy�}	)�6�C���>��m���ڦpI!�
6p�^%)Ƕ {v8[t?�9�r�
-.6�e�|*b�_G*��(�W9����
-'�,n�X���X
�i��W�(��8�@���J ���WٌcK�@�\�
-�φM<ޟ�l�k
�kt�[^��p1���b�0��V)&�!a�����cCmǑV�wJ�v)~�H�9X(}����*kdK�����.�!��J����kY8�D� �S�l�[I��i���A�G
WZ� =Bvp����A
��-R��E��Z-o
oԌ��U3�j�f�g`��?p��~a���?�~
!7���
�� ��6'�/l��D��V�����B�
VkB��Áae�̦���2���������I(����\�rr@�Y��t8`
- at _@u)�Q{��e
lpO���
���\@��
-��x�����Wy��qS���9��Ù�'��9!���/�-ç�dttPY���|8ы+An.�-{h[ eC��A>Ez �˄l���l
-؏^d�@��<���z���%1ù��٧(��YB�Oj
-��9�k�<�ű��ԂG�Ax$"^@UQ�VԄ �A����7�tܱ�P0�su�}+$��F>7�a��� �k��P��1ˡ9�pك0Г��0(!
*�!A������O�0�!
�̩$��r��맽�ų̦~\�����?gX,�UI�_�A<��Y�Ԗ��TTT
)����:�
��?S�xw<�m��_�#�ϳ
-��!�W*ZO�4dPtXG+�k�%
h�W'.wiXx���
�|��A�
Al��
�Or���P3'�4ܱ��w�Z�h����
�׹<������>-�xl������L	_�ʿ�1ņ���ۥ�#.yU�S��ǭ|?|�ʮ�6����Ejj�X?�l�6	�>#�ҫ�h�*ꂦjH��B�M���jش�zU�o��wq.-.ũ��{��4�	��0ެ
<^-o8u{�Y5x��
�k�����D��
-h(�

ґA��)GzjY��$���b�_
��q�Æj֥ ��-�=��i��
-�̀���*[B�Uݡ՚~�n��C��ظ�I(��q

(E�c�
��۔l�S�F��~��Y�rXX_^
6�׆���f.����B���@���G��m���<�|
�)l�С9n��
�6U�
�j���uamEuP-`A���%��
�)�9n	.>�(y�
]v���P��%.«`c����L�CEEXƀ����?jj�B�:��=\ $�,ؚ��41���
/��| 1��x��BA�8���RD�u
�b�/헝���a�Htd�2m�7!��X���մ���\�[A�y�
Б�/PK�{p�����X�G�[#���U��7jӫ���h�
���vkX�C%�P�(�W�
wȩ'`lO@

i����C
��)P���bw�	 ���$��#�7��0|�W�B55��Z�X�Z�j����z�9��_(y6��&&I	�1H@k��
���s� ��
��b��u@��Ck�SA���H���k�2��9y
B��"5ۯ�k�j��=��V(�5"�\����A� gUTxt��>c��PY�3	�>3���Sa�e��&6��TJ�۞cd�T��C�4�ި
�W��-��&�5Q}��G_Q�Ե��ku�
cEӮ��=TrPA
~b"�ɥ
�ȏ ��՟f65l��zT�
�i��Y��#=6q��ya� ��
�>��֥����
���8��eE ��sC�e}J>�-e�<JV�G�#��
�fȠ��Z ���K���U�R۲0О����
��4�Iz��e������&���{@6���e~�5N4&xV5~
�z.+ ���P^���5�~a,��;^��sa@%�;d,��
%չ\S�\*gx,�/i%V�6��əGr!�IT�:���`� [...]
-�^�"��A'�U���)Z�u�]��U�"�
�96ͧ l-!e����0��c#��S��u��\��G<�VՇ�U-�&q��
-��T��=��{�P}y�b�1\�G
�6t>a���;�|�7�z�a3<JT
�ydh�kk;��Z69%����_�&B�����ʰ��*����>șpmA
1ۭ��95�L�|DP#d�+����=N+��#�<O,
�u6�)����ʞBs��
�gh�r
�8h�j'������~����
,�ɺ��hC�>�!n>Z7��8���|��
��D>�z�LJ~\0T5�t|�SSQ4�}���0�O+d�
�#�����j���ţo��'��&/ȰP?W����[�3|�]֫uj�}y=������- at s�
��<���� �r�;>CM�0�(�{u�"�� c�*J��������0��Xp(~��
-��N�G-�6)l�������
�ъ�ѡ��:t�y��F@�� 6<�2�юER�m��\�fz �B���
-b�si�'���R�49�`
��:�{{b�1ò��G at nC�e�
���j�q�˂�\*Ʃ�B�H!��
Rrp��
��SB��(��˔�)J��8)�p�W�S
��T����?G���
����w�ceO�@�@�
rΉV�9Q�xA-
!kI�yw���
h.)s����&n�c�
z����́
J��S�}��~9)���I�@O�^��΄�A��
�i�~%9�''d��1��%F���a �o L|U2����U��B:|z@�I���%��^ ��ze�
}g�Y}W��.y�s�cCPW��>U���W�%
�
�`��1���B:BfPCٞ��ki0�w}:�d]�ɤB�
q(E�=���G����0�5�~
	rd=��'�
>4�N�9�ӄ��I\�������ƣ�5ݡ5���
-
s�N,������#
);
4;�Ƣ~���'��.�A=��u
4�h
�h
�H-=y���t����o� �C� ^��k������k��9��e ^�k�y
-�sU�|=``��r�W�J��,��ìS�8�8& z�h��'�*�t���~�0s�о����ݧ��+��G��f�B����d�A
�4��84l��N�l2��K���v�Dx���d���+�iȹ
5)3�#��4�|�Y��R�l9����22qGr�m�fk�������(��f�k���Z��:��l��7;#e��
�n��\
-)q)!%߯�A~pK	I
))ů��T�R�=۹�Cy��_-dx$,�k��a���}�]K�d�.�6�}{8�~}8OOߞ$��N���%�h��u�S�0����
=ٗ������8���G��d�|�a[(y�W2�ˤT�
%�X�'���1�g�
�	5�1���O�^:�P�JR�G3�S63l�2�rf�}���R2O ����������g��A��
-t���_��/�Ɉ���g����~b�h
-��
<��w�8p��Y�S�f"�%�y���
.:�p��>q�M� ���
�u,�_K̶IJ_������V ��C�%��QS]r|R@�������D���%5�`o
:-�K��yah}Oł�2B�^�L �	��
���N�Q
}l�c����a���rB�u
�ƩDE��
|Z/�yd���
86W4
��8

�Y(�v�|��
Z�`\BFȇ���k<A�@.
-�Y-)�
�V��0�[�g�����K��0q�+
���l�SIͷ�ޗ0�7�Iq
eu�GS^u�@��E>
-X��g(w9��ɇ ��5
�S�*ٞ��
N
�	��H�<.ڧ����#��cz�R�
X�h��%ëU��`̃j֧䠝RR��dɃ�Ѳ#�9�;h}٣�ӃF�s(�y\����6�}ch)�}���6C��
F>t�`"
s��1�K_�Ss�O۽��;��3�6��>�x�����l7�k�-�`�:�h��&�
�;i�{����^�]�4!������*���Yxy�����0�g�S�w��
o��=t,�]Rl�GFH�����IQ���߬�ĸ��U�R�K�W�y�#�t��,�E@�O�I�Ӹw�^�
��pg����`�e�<:2 ��1��el�{��t0���.r`�%, � \�|��p��
���H�q�}��S�M�(��+J.�sDPM̀�Ĝ@gq4|�
�Ҋ��|�_�,;���_C
�Y&$���I�]�|J6�#R=
-1ۺH��șe>9�ع���BsB�����8���29�1OJJ��꘨����f
��`
�ܳD�
��a�!Cj6޳L+�,������	̋��}s��%�9�.��r�}2v�G�,:�"�۟@=w-ac��
�g���3a!��>PO^
��L�P�Q^�h�����
l�9
�ܡ=�~%�
ֲP�:��Z�OMɵK��[3��.9�皨���"�5������ip���u�fs�r�s��Cx��K}��*��=\����1�2n��
	2�'�%
Αͣ�7�#��yJ6���$�]H���g��
���_��@l�	
y��)�-�X�"�7�)ڟ�$�

w8r8
�o_*�o[����~0�.8�UT���]X#	��K'�m
�zwq�~k��3H�=g�nP"
M�KƆ�
{ø�{c�(�%VZ�����GB�9��G�>��
�?�
F?���"Ljӄ}G�
em�y;�����
��� �.�k]���W<
e/=�%/m�ظ�Y>�6χ�gUb��Gm�
n
`
�`�$��#��
-���!%8f�I����'�
��_�(��|`����.V^���V_�����r-�ⷡ����`����N���Ev�_�AM�t/
-��y!f��e�(��o.���]r��U����ɑ�^r
r8��w�ERbPM�5,�K���|
�)
�����Q^�q�Rܠ�
j�m�9Zt�`x�9aw��я~z0AIu/q�@C����H�!j�dw~����ޒ�[=�G�)J��A��m[ %X�1oơs��7^	��~wc��&��ʇ��a싍��떞⫖n���a�s����N�C�'E���,]
掦vy�y�'�#�Bg�3<��
����	�;�"��J$�y,/`���i�3`�
`�A����3�"� #�+���5ο�& �����隲�:g0���{��{�t�#�G. ۗYE�#�W�ƒ_�
��$���㤸OMM���;��x���RIP��w f�
G>V�f�1��^:C<�Nc�Ag��z
թd�m��t��,%�
��^�]S[��
�
�9�+�
-r�}��-�&5�
/��v�h��`og�F��H�@��
��4P���c����[�e�
�����~��En�bV�q,
���k��[�}���[{��燣��C�+܋�_�i��Ԅ�Q�����ۦ�˳�دgy�_Z�on�ß�AO?��
�=�
�>Y�Ȼ�ӗ���9������9n��83ӵ�-��ӳ��p� &��+��B�vO�ޮ�e��B>�&�;'�ۦ����E7Ga�l�%m���ƞ��s¤���J���x$��,�yW��
-o
N"^
N!�[A_ۦI��B����{��v/Uqf��~r�Z��J;궱����u
隣��b^�l��/%�Ő�gX@�S��� ��5
�[N�sJ at n�r1^��k��W�-9�MM�ͭſ�[a�mt���1;
'D��i��	J�����걩-�෿�����
�^T�C�.ه�;.s,��������_�(��nH�y��柺��
�����]EW�Jnk����)���������<3v���
-��e+��?�>c�%�
��_X��o�5<�
�>ݝ &.��|�d�GF��üڇ<n�j��蚢:�G]C���^�������f�k��Ƒ��=�~j�(�bz�w�ؘs�1����E�nX�}�^���
ΰ
��P@�qό-����_M�#��Ҕ{AՐ�yzc��ʼn	�s8�w{����X1���K�ʸo7{�~�JH�G �;
ԡ�U�5J�\i+���Szk���wYy�)]}晝A�C��?�u
-��Wӡ�j�{�t�R�󝡼+kmi?kN펖>T��ݰϐ3�Z
�>ON�(��֕~NYwj������?d�}ӇO<�چ|�Տ{�o,�hh(�`�@��5_���|3Jx��j
�m��n�b��O2S-��G[�{꺬啙�W;Jo_��I�����'�)�>³�N�}Cc�����_-2/�u����G>4����6%@���{���n�U]m���o�U)��5ɧֺ�/��O���/,ݴsK�孾�;�76����
/JE��s�
E���E��.�I�if��$%ng���#KO�M`Iu]�i��ɻ����~����
-�ΰ gk�
��^xI[��.���*��iA���Ӥ�=PO�g�È���m-}�7�
Wԍ)?+j�~\�H�`�CE�4<�k�U�7�}}������fo��
�#{��@�\��G�vM��Am�
��l���1��^�~"-O�~gq��G��q
-�
-ʖ.)&f��0�k�8���:�'�0�[mc��L�)P�w����G�o�U9g�(�b�?��D:�L��ԉ{�1Hx�k*��>C��N�"�3�g���]F~%�H�QS�s~�}
-hr�G���R⭓����қ����)_-�Ҿ�Td�����4+��z��c���?A�[�][o�[��1뜹��*��\��)1]׉�5FMvI��v�hi���_�H��>N���C��/�������7�c�wy��elI;�^F�s.���w�"_���Ԡ����RS�R>�!�Lm���V�M��_t��g-]E��s�I]��{����1�yP)�z�g�1�o
g_�
ʺdnN<e�̾�Y�d���`
�do�c_��]S7$�V��}�,��ZV�y���˺�����G�5v\���}>A��t���ْ �Ir���藟M��F�=�7� ��!�i}���.㌼2唤<��9v—S�.2�t�v��b{�;��� ǧ�ڴ�;��7�qߎb�|�)���܁{���>_o�F�g8@ߞn�®���_Xm.�����IQ�q�܂y4˂���*���u�`��օ�on��5w����_|�kJ��`����G�3~@���F�^�
�
m����+�nn��U^ZV��������F|�9 at x��	��o,�`h.����=7/�9ێ��� 9�����R��>��ryƩiv�WK�)?*kSҿO=�;V�hL}z�q�>˅�
Lӂ�RT��R�g����+�!������1�M��[�fm������_tk�=�*��+���gd����
GD٤�B�,)qx��	~�ҁ�gx_��j;�
ȗ��ՙ�A�|q�ZW�ݭAb���욼:������j!bw��q�ry� [...]
]�iQ�Ms�-���X��zk�ٍ���4�Y����z�T���q8����n�_Z�a7��.�k��(*N���s.R�W`�
-e7u
�g�J�m좱��w��!Q���G?��43�c�Wj�@?��?��
���g�o�5I�����}�&�bq��!
����8-m������'
�O�_N�#>����r��� ��s���>Q�K���"��$��Zw�o���f�I_��|�$L�a��q:��o�����}s�v�"㜼2벲2�L����p�OG�o��ҕz���r�����>jk� �������s���/1���v�o����q?t�.�^�[�@=Xm/��5�z�ч��m�]��<�G��'������w�Ͼ���n����^Bsj~	.> �%;�/�q~�
�����]������M���6{�׻�g�)��W�1H��d
�$JEo?WTF���g�� ��J)|��NO��ͮ�G���DS��49�
-��
�I�{��r�g��̱���"
[簑��q�R/���GKU5���
S�[�|��[�h����Rp�Дq���v��Z��9/&
L�
6�1O�-��ͭ�Fh1_V����i^���Ę[01�7��h@�Q��W�d��b�}U_����;�%o,��H��u��v~8
#$:f(�.�[�'�Z���W��\"����]���tNP�z\���x��lo���VO�eck��c����[3�9i�+�e��
97�`�=%Q������_7�Q��/���~�P��g�
�%
�p��&�G}]���>�-�"&jk��ɗ�����{`�w G���Λ��RNO�_}y8A�q���S�<�<�?'�Y���@F�.���i����:����_��)��	?j���{��Y뽼TmS��媌3���_f��
��K�m�,�b5���hL�I٘xZלq��\��F��rM������{
X�����;���:c|���D�o]u�O����~�򲗟1��[[�L8V��;��V;K��w� ��^]�|��)���L������5B��m��G������O�_�c���J
�c��������ܒ��r�o~v0�O��#��[�~V5d�ּ�9'��<;NJ�f����f�EU�/�����ɪ�����N��2�\�U��Ћ~��,�٩���[����q�G��Z�,9mx�<O�3���y������ʆ��K��g�⼛{c�|K��ZGɭ�~��!�S#`�y^ҩ�����Ԥe^�W]��C���N�K�(:�?jZ�G%�p��-��"a�Mׁ��ҍ}:��>=�H���X�c�ʱ��[lL���|���Vr�����-�ߋ����m�WA?����^�'�	�	|��1󢡽�����l���ދy��[rw��p<⹤&��J7�u'=��Nr���R�8��$#��v�WS̤�))�GX74]�W%1�?{�˷��������A�	x�ܑ���9��}����1f)�Ԭǟ�=��o㢼� [...]
->YooL��Vz��
m��i?JY�O��>놿�s���9IZ]��j;5��E{׍z�?#�ן+�2R����>mnC>vL��e
j�~�p���7��1����*�~\�?�L�v��q~��n{��L�B|��)����9''��L�n�v�p��.oA�T��<u.r��ؗ�^�=�89e�Uf
�<]e~'g���uGZ����:���=Iی��֎y�;D|�;�}�3�}�7L+r/���EV����)��^
�+�˔�]�y�3�8�4.�1��r͓�'��fԳ���m�|��6����?%�7_n�����L�|j��d�� ��g�ݘ��R@�����%|��$쉥3�����+홗�R>0|������09Rݘ~����
��]�_v��|+�K:�oν`�#&V�^|;�L���
�������Ȉ�����������Wۋnoq��Q1���<��QRw�P���s��vf��,y�ޓ{MU�rF�Q�x����&���
�lc �vd
�,�xu�z�*��/�&��<�<#�`��m[���g [...]
:k;\xǹ\��:[�d�G^���W��x�O|b�����ϻ͹l�!
j�
~3u�����uE7�	��jKn��"�F�[C����������xf_�7���
 %m�񋁏_^��[e������A�vL��M]�7��ݽ!N҄}��I{ٽ�����
D<��3�

��.;��%x,�O_Yo�Up7'hɆ6�#��=K;���~�:���
������5e]�
%ǂ뾾,��v�����������T�kAH�k�\��Kr,74xdBcw٣Ŋ4PC)���_�� ���9��V�po�3ά��_�֩@�<��%
�qsg�ٗ�YI����x��:Xt� d�CP{ø7�1�3�
�.>�2 }���s���֦�g����%��RM��	^�ck�u��L
�ze�og+`)ޅr�jk�%]C���7_N��~�ޛ{�>�xm����
"��Ͼ��ˋ�-1��y�
�"~����mɼ���z�p�N�V�hLw�`�\��a��g�ܗߚ��~_)}�>Xz
�3B����
j�KR-ڙbdZKn�t�ޙ$�<J��rw�Ʈq�=�ܒ�+_k{J߹����Ib��(�����	d�~��ԗ�9 at 6��/~9@��~�}8]N؛� �Ms
�2z�[E����)=�*�z��?��3n��9��9޵�.������ْ�cE�C:.�d�z�)�n����j[|ʪj����?AI��<.jm��B~�����c�
-g
�ڧ�
	�`sv�2�=�Ɇ�.��S���J����7����1�yݵ�M��R3�r.fg���>�J�
�r���ۀ�l��
���z����챲����u?)��f?ww���n.�>%H�n����.��Z{�í~�s�
=cu��N�Rt�1σ�a#�͉?S�}9ō����ݸg��vRS��p�#"?[*Ͽ�^`��JJ�WB�=��Ƙ���R~��կb��N��p�r�2�H�Uf����|�
wn��}��'c�W��mew�(��Mrc�����X�<K\�c�Q�1Qxow
c�����
-��(;�܅�9��F{�
�,.�>��^�A<�
@��
&D
Nqa;��xI]���;�c���1r�c�w�Ĝ�N��8�ݡ���*o
��s���۪�Y�5g�-E7gh��'s�S����NYg���qF���HӘvVߒ���09zc��y0UA�ad�[��n�@��Zg�I��JW�����_�����Lb#��\��
�P׍xj]�����1|��3��Fo�MK���YL�M�����D��Mb
��HK_��q����/&Y���ϻyX��J|�PA?��a�ZE�OR�;�7U��We-�G�Ab���
�{����v�m}
���0>�`���?�Oޙ���˸�N^�=A�����4��yt_ZS������`�����+�`e����ʩ�S��zj��4o�
-殲�Ǝ�Kk��u���TMɿu�*�Z\���p���QV�:$�tۼ a���
3�6�i��
�����٨�ցF�v�(��B|��J|��E��
�&[�})����#�
��`��8ņ9���9V��,9ek��j{��9�M����������6⓽>j��+{g�_d��(�a�V;�Q�Sx� 5v��藅�›�v|��8
��s�DZ���;�֌_

�7m�b�F智>��(-��iV��EQ�}}d�j��[Caԗ�&b�
Z/�-��1X|km�7IL�ɘ��ER��9��Z'+ig�Q`�e'K�yg���G��v�
��4'�7m3���ᅠ(��ڂW_�<�,hyɳ�1�CSw�ͭiT̡��<��0{3���)^>T�9>
���Ñ�G{Åw�M	��u�?Z'���j�����Z-ñ�~�C�L��vf	�;��x���8��unK[���qZ�j��� 6�:�(�>yk�j} ��҇�p.����k���
��;���l�Dȴ.r�
t�bU���	F�[QU [...]
}sD����{P��

���G�"呯MP�W��y�w�}9���`�fElu��+C�g�>���Ix�5���J�eL\b�g�;��
-�G���s
筬�|[���o}��o�b��.a�v7I�@{6�B]0��7lc���1q�B#�����B}��'
�kALT�Ͽ��H���Vp�:��4uS����C
���a���
-��V��.����S����+;���A~�� ���(=�6+�Z�Z��
՜�Yf����ڂ(�Gs�(}���`��651_Z:+�M-�dS��F?A�u��:߇,�A#��;*/]�E>Z�-�c]"d8eL�[[�����X�"�������
��>\ׂ��o(�e�
vc���p���d��
��U��'+-�)��F�m����N�Vd�<����m]�沘�:�ε�03v�y��e!ɳ,"�fye�A������qr�g��ڙ�� R>�F����F�FZ�]��Ko�sG���q\�G]��V׶����s��9z�K.ۥ\�G�%�N���
=6��_Y��Z�'���bN���~���׷z9E����
-�j
��v-�>VCX��Ȫ��lb�?�������;��v��-u�Ro�R�����n$��{ �;$�(	�����z��w��0WB.2s�}����9[��h��\�����e�2�����K��o;ʚJ_�l i��f��h��!��~l�R;.\�,z��=1�aB��p�閼�����9�wgY�����_��f:c��"hK�g���D��U
�sT��8\Y���ؖ�`[�ޟas�f�[S���>|�_����چ�C}M�m�,r�%��\w��-<zw��Y�C/�0��U��݄�K���3�܄ߑ�ߏ�|9������=��+g@�N
���
����#ظ�Č\��~d�_�L��y&Ţ f);��č��S�ȧ�
��!�v;��"� �8�OB�#�ب#��)�1��N��aS�����z��hcyƭzH�
�j���`��/uaÖ:1A�̴�NV���Ս��kEV\�*(:EML:

9Z���FT�qNr�Il�����
	}�p�:(��MP���G���W�i	�1
x[\E]��B�ݸ 
��ӭU��*v�q�Qp�Yzu�zޏ ��^k(J?_����WAw/��<�s����9����ag��rIP��X`h��U�<]#��h��!j��솘���B_h��O
-&�MSi�Yj���Q/
��|9���z����Zx�[NF:TT�SϦ�Mab�E���1�W at 7��'�fB����i�Kz?N�x֍N���	�T
��DяoG���=�|
��᭣����Q	�XYK=�,��R�T1;@>o��S7�p�N%�ճpv%1k��䕂�KW�x��?W�$�����H��OGpQ'`a�O`�N�N�>
|����'a��g��cN����
Jή��ǘ��}�����O+#�p}+����oC~���o�d�nG�^ �r���x��
�Gī�Ǯ��;��]>}t��9PηW��s
-��p�^��*d�|_���9���,��6�+-r KF�q�Rt�[M.���1j�� �@R
��ߡ�D�d�����v.��Ӽ������Vڝ�>D�%V��m��'y��x�J,�ȇ�$�g
Ϗ��yzt����s�'W���]� ���o�[gπ���e�i.O9��g���r
zr�q`��K[9�C�����Ӝ�ԓԬ���ߏ�x~��۠�W�Aٟރ
�=�|�����[��'O�B� ����anğ�F�[u]٣IF�
U%��l=BZ���N�ߦ��IL:�J|����}н�g@�]��w���2����A�@ Ѕ�O �>
z�w
��1���\;��� %viTW��b��7�H���z��
9=�xn�#�oނ��߁r���b_� ��q
� ��+�΁~;v
t���\�X9��)k!o�İ0�7?P���p��\�)�t}��Q!�y=��,>5�88<�8�+�
�����ˠ�ׯ�.��t����N�n����Dmy�e]c�S�$,dy��y��~;ׁ�<·<�"�]�.�;
��9^�����1���K��/��]� zp�<���N
?�?�{�����d��/^5��g�W��
�W�!��b[�OY�DŽ*��oaW�a�!�"������r���EP��;��G��y� �s�<���k���	:~��p�ķ�@���Z�Ǖ!^��D�Ю��oK���Qj��
���Q�' ���$�s|$��3Ћk�An������w��	�
�w/]�>�;���+ px�oc������+}�߼2�UV��<O�$��,�22���`i5����� �8�"*�Xܻ�G�Ǹ
��w ��\�:	��E ��_?��G'�83�Y��*.
����W"6��.q��s
N Ss�D%
�������.�.s{����w@�/?G'g�����I�؀�v����gW��K����A���&k����
-�Lz�Qh\䑊��#��_A�����ϟ�>>������\E�}y$�ճc����I~������X}'曼�ZYC��l�t��o7`�ת��+�S�o^��� }z�t��e�e�<�����e��ŋ�3����>�v�1��Gܟ���O��^R�R=����
�"�@�*�2O	�
O
`gP�i'B߼=�~t��7ׯ���zt�t��E�m`��._��:(��
9#���
yh���-rJ�� <p���UBH]�`�zh1�5�UH��¸�cA���>޿
�}����M`�O������e?Х3�AO���"�?
�z��xe^�չ6T趘��6�_@϶!?[���{]T�
~y���А#��?����A��߀^���9~t�?���zw��♳ ^��>{|$���s#��W��c��vf8
���q�i��Xim�CI
�m��J����S�} %�z	��u�% �/�~���_]��
�0�7n��\�z�w��=�7tb�eU-��b+�<�ijɫ�s݄HS)Tۉ
j%�܀$�
~����u����A~��^:�'��A�\<w����-���n= =�y�t�� �X7$���~D��yn��@Elk��Uq%~SYS�(���9�������cѯ^
�z���w@��
t���7 at On���2���#Č��BH��鎊@MC��v��4RMx5*����t��ڐ��
8�c!�r�Tv�(,�Oxb�bv��~Z]�������N\o�m�+�v���u�B��F�(�D��Y��mԀ�*��.:����#o6�X������
Q٧1����	q�(II~
p������4��]�.{�6�
-�(*�2!ei�;3�@�
Ԃ����5��[c5˜vaMJx��.�\�u� $�ħ�@��] b�����x���伛�0�{M=/u��
�1�̷��H�$>=���C�.�
b��`!_L�ژ��Ux�}R�jB`���^����w
����@A�?

�p4%$�hA|�Ifyɽ!&��l��]QI�L2

R&̫�U�5.��gVV��C5%u
�<,�vaz��߿?��������
�E��~�Y~�T�z�͠~
�P�{k(VI}��8���Y��`��be�_n�C)ڹ�#UD�:2����rND‰�����o� 9~��K��΂��~J�=�H*��N`�,
UѬ2Z�UB�t�L�\���3+h\S0��~\����� <h�`�
�.�32/ ��Ε%%������ �����t4.0�D��/G
-RRNQ�%~Su��6dKTM�W�,f��(-S�
{m�&�,NV�%m��jt�uDJԩ�/�Of��M�;�p�̓��w�ό;
.=&�)��
-��ļW��>�9Wg;��f�u�s,.����\�ES-X�UQĭ���8�dV���o�	}���#�w<���o
� %�?
-�N:U�*�?�"�L��b6̭f �z&oC�Դ���:��x-f���mƼ�B�t��/��@V:�kÍĭ�j�M&�[$<䦈UlW	YvC��f�j��X�
	�̬�a��lȢ�
���B�
�C4��0]+n~���8�+X�d�4@�������^)
��ˡ��m�(y["F�c���!��(�jW%<ԺLH[
�
����n~�\o]����H=�Ǖ�����G�u����겂��0�ݩJA��P�.k�r��\�j�[�B��Y��Gw�*����|��3}\ ��۫�e���Ҷ���(qmm�$��e����h�M5�%�pX��BA�T}ٲ��d�q�V)�xc����	yg
æ�5W7��eF��"L�z���_��:�X>�Ғ9�ڜY�G��1��	ڣ�ܷ�fz�\m��7gK�I��)�Nc����i���۷u��;����zt�b�!ii!i�x)i#�
4Т)����7��
�-
���j��6�E[�f���0�̳�z�;3u�.��vg�a�3_;�2
-�|�&lZ:dCNə!Dk ��4��卬�������*�@u����
�'M6Q� 
��E>�u��&[+c���J�S�c�=���=�x�$��("li�6��1��D`MI��Lc��� !jeப��������˦^F�vx�y���@�ƏV�
-
��)fi�`[�ŭ�"��KkCv�Y܃�f��@o�I9v
��"e�gD�`iOe�d+?z��&^���!뫫��v05��1r��0>bz <������f11���9
��^3�ַIv
u�vuu�Y^I����8.FR[����
1
�R����$��9�
�ɀ\��2]*l�(��R0+�
- �t�"��eb�P��֘�L�����8
X
CE.O�3 �Pt`��UU\��
�]z�W����%�RL▜V�R�7mO�p�2
�,� V�8����T	�	B�u�և
]�'F�O4�׀mi�
-�>^�^
�/���l"N�Gɧm�}=�*k
-�=}}�SI�;մ�m)��"b�l���ݪJ�[-`�
�S]]m�����M	�ty
�2��0OS6�q�V)����J���٤=S������ b5�&'�%������"�p�/��8X��Kt�[l���eu}몪�{E�޽"���
#f�yyK�j�Q�1R�{
���e��F�:��WѦ$��5L�sFP`��
:�W�hOC,:0R�N%��,��I���Y��OxМ%y�q��bNFΚS
��lȎ�W��~�;-l�Vc�<ӕ��s�z�lu�UA)4�kt�X[
�Pq1�㤴�n��m
��ն.�![�
/@����%)���R7�z/7���0pҨ�$l�*`1;��`�����04�.&ez�,؎�	ޟ�2�zfc���z����[���GRV���ά�;:A�q�CՕm�hX�|�|W/�44��HY�7���2���q�,�M�tM5�X$8���䞉���9d g�W�������3=��
3l�c�v`�]���x
���1��\*l�C�I�.��:X���2�٣i�s�:����
���˥��:$�d�.z��������,��m*}�9���Nbb�*R�S�ϲK��;jj�[I���n��"�54��r`o�˴��y�lܦ�%%dɛ2�Oq��
�T�{

�N���-�śGJ�[�*���k�)�ЙJ�0;���2ݫ�mw�;�ʆf����k�x��]�jc�mc��&�FĨk���J2�C�=#���i���dYNjf�#o8�����iK�#k;�_�
�[]��QW�z��4��Z�6
���CvM<ގV��q̖�Q�-��e�R��C=mS� =�b�dx4
�n
�>V�ee �cҞ�c�d��
��G�C)���6�w��'���v���}[S]�)#[��t��Q�ֱq��t��ݾ�

�5`
-g���|�M�M�Q�
-vg�t��Z���[���w���g�Np)�
]���F������:\�UmJr�s�W�Y�
��$���2[x8��
��ű�Wn#��k6욄�
c�p���-�X�}-
���ֆ�^��g?�h)ЕR�B,h{
���Ӑ�6{wEؽ� h�j�E�Ƥg���
-�LM��9�6	;�J����4�S�[����1P�ѐJ�bj��1���*��BG�#��d��S�
d��tU�i�:ʋ��а���Q���-E'���	3�Шm%�bw�S��R+2����D?�$���,�c��Rw�,�
�1V�a�5����(l��� ���dT옪Z��u�[j�*ťlOV|�O�}�
)� ��[�2&t�����A��S�6�_@�"x��e��䕂�~�X_��<JI�
c¶D�ȵ��%��C�~�E�,��3�j���	��_k\ ���>å"��!�V�JC�
-����F���pL�26{+�9�PQ*6�.�!�ؐvL���
H�O=��V���bF�V&�.'�]j.yCZC@�n4U��[E
Ɩ���)��69<�.GD[D�求o[Rlꊈ�>Ӄ�as���u�:�[&d{��b
,w�<�
�ymWaӴ�Eo�: !^Um�O��<�MF+�)ȹ�ID�]�N���]>���?r;mW����V��\`���ؼ#�p�@*[�.}���3u6%�1�,�k��m��m�3Q@|��8t�n�Pq�����69.ť�fz5��Cu����:P���X��2���700�^0{zB���T��g���Ll�9.�,GZdȔݥ����|c<�e��Lj/ڛ#��Y|��Z�:NL۝�l�k�\��.��
���
52٫E��hqك���"F�k�� 6�*��Y��-:ɦB�{
��ݙ� �z-
-.ɥ�RL,�T��E�/v��
Ŀ9��G<�Ӓ�]*~}o��zݐ1^"�<���
��E���C�' �[R|���Ĺ5�B����eh
��Wuy�
�
��
�Ʈaa�Q�N1��us
���1v4<�������K��?W�u.-�ĩ&��ε����

�%#���D!�w������˼��[��Y�4H
2�z4��/%��'��ݓ�ۃ9OV���fk3n���6��"�����.�F�9��J�O
{�� x
-O�I��ZF�
�m��}x��P`��U;F
-�*A'X$�x���Qc3�2t��02|s�W��K˲���"R�m
�ه�O ���Q���7˝w,c�@����ڏ�vN�J6')�#Ȱ�~l��8+�5�,u)�0����˽}C��!�kv�l�+R͓���	T�e�
IJ@�1p�����B�GWU}�%h��
Ei��
�1��1
ؒR
-��� ��O��U׺5t��k����8ۏ����X�C�훪[=ƪ:���kW�� ���I��N�[��:-N0J�e!��������~���n�Nv_O,�2	
sj��#��
"����}Cm����Z!׭d!
bL�Z?��SJ-����p�V:*B��X3�φp�i(���K_��t�{L4�k^ؼ.����)�Y���$l�w���Un�G��^)�0�[�1��^E�xTL��AX�U�
5
�T �'���զ�Ņ]X�gX�gg<T:����Y�E��`��th���)Z�SWݲ;S۳5�Ϟk�}�؞��#|�4�KK�� 7U'\�b.�����H�
f
X����h5��3��yLD��?ɿ �z������9�e�cl*2�;4��?\`�~βh

��|������(�9��n
-tMT�š��;��}�����v��E|cg�Q��T	]*&dGM���PJ�G��rV�\�a��S%�y��
!�5��]k/zfb�1AL]�~o�e'��� ��6E�_�~[
��0��|�
������x�U16��{{i�,��������b'�#˃E&�?����4!����Y��1�aB�\C�����ƪ�[A�5� �u��m���l���>����&��lKYh���Q�
�'!a�=�O-�

���� v�]jR�C�N�Q��w5�h�
�2��i����[��
=[
-�[�	�*\�GN,r�1iN%.eK���E����
��5�eq
]�_�rJ�e
�c�������S��}5�tWK��k־���	x_ݓ�ID$���7�:�O6� �6A�X$T��1���]��T�
-�%�
��\j�"e�&0q _G���2�=�
���1ֶy�UV	>�"�%��@>���ݣ��C]e��IN5��&���^fG�B���-	2�,F�m���FA�}5s��?g�
��T�R�ì��o��,�@�,�&B�8���h������]N�5�!b6���n-�87F��e~>;׍���P7�7#hr��P�
�hR <* �[��	l��>us��o�nl�{g��zb�|^n�c�EۦY����6.�p�Ww�Ƞ{����`�Z$�_f0�-҉�JR�tW�G_��te�����?��^�̥�D���1��<u�,��/�7��{&ɮ�@�̟
d,��6G ?�;�_���s��4}
+�&imv+k+�Z.qWA�s((E[���W� i
@��G�ɻbZ�j[�
so��B{�
?���y�T��fm��k)����
#�E���I�
��_:a��)�J~��K: ����̇
���G(��g��?�K_1�>\5w��=� [...]
-7�����9/B�^?�J�|�%ac-
-xm
m�(
��N�oj��۞,^*��&=tI1E�gG��O|2�?_ꈺ�~?�ܖ�tGL)�N���o���5,�G�K�Y�#��A�7 V����ފ�������
ą\� 
|m
��^�b�3��m���?��ro��=-�bGI�oO b=@�;��qX�g[��@F{�rh�p}G��� "�k`a a�����[��H�4p��4P�Ozd��x�Ss��f��W�xL|
��k�������UIW�C��@y��`��}�U���U��2T�؝�|�+��]��+U�}0-l��ե���ݟ��|�����["x�]
��Q��� �n
����쓴������V�䘔�AH�r?"d�
�ANy�6B��65�
-�
�
-.5
�o��M�v���cV�q�N�@���ԯ�hy���o����m#�����w[c� O���+>Y'�I�&
-�kB�y�d��Ws�W�W�k�w��i����o+x�9�Lqh��^�1�i
���
-T�S�H؞B�9��l���]F���4��|�f���3C�m+�	����Ax�j?,�.'�Mw�?ۈ	NuǤSUW�T�n99׫e�w��t��ԕ�BÏ���U�n��䭥������CS�ss�'�
��S������AdܽSM�C���dL���X�J�����.k[�g������8|�1�B�Bk�뙆�{�u�O��̜�NJ���w��x�~l���m�����1箬2��=�l+$�|�uL���|���y
�⋜�3�����R�����r2���l�?뉊yF��=�И��6���~_I*�
C��

l��mc���|��!f��u����^׊�l�A|Qs���K>n�s ~�m1씖u�1^�y{����Hq�����g'=�&<;#�d�
8�mQ�}Ca��P6ӝ����Й�pK�K_��/� ��p�Nmu���������3Յ�	w�S��zXăvL؋

[�:�O�

����ܤ
"�������kBnq
����b#��yv	
��%�%�_F2d�@Czu\ھ���9ெR��'��%^%>�
�,�P駥�ԛ��wwe�8��U�ԃ
-�
B��&11�	t�� &|��EW��d���UJ���ܡe��L
�G̀��xt��	s���}�ʭ
-�Ŝ�mM]�MYIߞ�f;Ÿ�宂7����
"h�K
�
��F\�nN�{8M�����Q61��S��7O��W\��6	$jm��d��秸�


�����T攡�S������

��7۪s�k=s�����V��R=
i�DD�!~K�ؒ�ҝ:
�xc���۝48
�mcA�0��<�=�2̊��Oy���� �2��3V��-�d>�
(�,��^��ŝ7�f�:��P{���-1>�
-��Eа�IT�/'~�r8
��]]ɓ�	B��
��>��^�~\�(y5[��h����� *x��~����؎��\D��5g��Ug�4��>�	�o�����_ ��|y9�r���w{
-�c�,td=D~?9E
��cK�:>kKD��ʩeZ6��, at .�o��}�kJ�9��vr�����⽱����0#߫���M�
ۡ�1��?���~⮛�p��&th#4��bKY�?.�xdSm�+}u��Pn�tSփaR�ݙVdҞ�
�iJ��ܓ��!�Do����K��r�xbEM�1'��W���Z���30���ok}�o�Ad䡚�q�h�QR�m+�c���k�}�"�\
C'��P�n�����_�w�VG�Yi_n%$|���GF��U�}O�����Uq�̣��3
���a$�o�~����
_�5\�n�*���uZN
-�s�1�ށ��mj��d}�{�_��+\��
-Y�.z���\l.y���tݫ##�����aJ֦��׌�槁���D��O�}�
/���D�� r���9�ȷ�ȩ;
-Z�JG�;=?�s~��� ���)Z��ͱҤ7�-�̨�s����Mt���&6g��g����rv�%��GO���,�UJ-X���9Tt�W�$�j��3����Į
-��"2
|��R���
�nKC�|s���-bT�K��ٟe���*��4�ʕa|O�����y,�m��c�E/�?S�s�m��
�C�]e����[�ZN��%@c�'��{kS�/�}�~{�Lā�
�5OF�Z��gP��EoͣȈ
5�8K16���sv�Up�v&ȅ;S��3S��S���V�C97�c�^�=���o*|��^��6	�զ�U��,��;�WVY&���-9O�:
�gۊ��K>nzkW��ܜ��n�����n�gN��VSK���
ηe�]hN��g�Ib��0.V_]�`�
��K7��A+=��R^����?�Y_��G_��G�/���N*��A�*J��!ٯ���1R�
���־�7�	\�!�	�x��1����E9��W9�FW���|��%�����7^5
�׼�i��"�Ԅl����(���)t�zwY�R{�+SMx�-�-?/��R�u��c
����X�*n�
����y�P��w9/�����qI(�*^�CM�ӵ� [...]
-
-��⯱�
B�=�w�Q��3�z�^n�M �<jx��t�w�4#���D�����{:�2��v�'�y(���P��}#��Tsɖ	J�SƂ8$��p�)^�#]�''�a�[3_�+��q�s
-��Q?���*ޭFg�������bH��!з�ҿ ��%�U
��F�	��q�b��E�=Y
�֖�Ԛ�7גrߩ'���E��e_
:\�w�f�����%W�j��i��\��ʣa�F�����y�}
����bF�u
�ٓ���[꿫��[�ѡ]�o�ql�K��4��}���MhX91ge���1I�u�Y(�
-�������`߶k �x�Ф
�E��>������m���>���1H��*���Y�+x���E�
>�����gç�_
b�#��
-c����g&�ag׻J~y���Qt–��I8�
!cGVj��h�O��9�
�5]�th��mR@����l���"l�]�T	:�<���:aøh�3
���o7��IKC�d)7�OJO�$��^Ur��`�����-����;ʿ(�)�����#�ħˍ_~�����1��}���
)��rx���V W6
-�l
0� :|�,��
������$�4��R�o�WmO�C��H�ѧ����3�����U�q7ʾ?�m��<�u�MJ*���S
�o��?�Iy~BJ��>�-�
u�ߖۊ?�(���z&��E���4��V�
rL�����P�	��X��Rr xI_mW����|s�����GG�IO��_�m��,c�(�
��UQ���l�[�Mwh�I�"@sM��Y�_�5]n�b�'�]R
���"�c ߩ�OsW{!�l�d�35#�t? ƞ�ޭt�=q�~uN��o��E�t�}�1�κ���߅���_�����c|}�vu����7��!��k��oI�h�t�ng�E���)���jk��[�����/6߭��
,��w�kE��4��
�EMT(��R\*|�
�M	>O_��tCF�Q5��[&��{Z�2��\jI��ٓ��2P�v�!��u��1��������D���PR���Q
#
��߮
T��8���v�n���
U=@�w��+�zTd��LM׾Q <�fGN��
C�o�¿-wa�Lm�b~ƽٮ���1B�85��������&ď�r��(�`GN*���Y
Fmx��q�v))ok"��|{�]m��I��Sn)6}���
�������2�����`R�c�o��_��a�ͣ��IN��?���8�d]
i�K�����h*�z��0�5��9;�����O�+"_�[���;��"���/�mI~2��qs�tvGN��Je��Ŏ
���S�f���G��:�c���YL�w���I�f��h��\����
��=�I�K�ikc�(Mmѓ	T̹�H쮁T�nL���
�`h�xҋ
�݃�	pA4�1q�.X<<�����_�]ar�
؂-Qi�y<��Ch 
��in�Њ L�ߞ$d{�|�y
��Y�x�9��$-�je���mA�-�e�
}�_y_�nN�<j*t����l{��鶜{s����O�f8l����Q�\J�`�_��"�Ϋ%���3�XiWgrlM`b�%�c+��[ɥ kB]n�}�T��TW���bB��jf�y�84���9�f�T��������T����$�4�s
��h�;Ss��tK��_󕍮��-��o����mz&駑��U��ܒ�����W[ㅁ-�lZa�E�FzM�U{sL�����e
Ї
�*H}}j[ã�M
*r�CA�=����FO����m��
�$�5
uSᣵ!J涄�GGo���6��f,ئDŹ
t�����kl����f��gy���<������
-�nUP���J��(��O��6���k(y��^_l��d
���vV��i!��
KW{�kC���B�:����r_y��������m	�ȭ0
J&tsg��b<���	y"�<�N��Zui�X���p����0�^]�$�E
�n+|�ԋ0O1*�&�e3����F�t%굌�sm��xQ!�|�l�yс�>+a|���3��K�k��X��ηf���O�k
�|�?
O��Y�È��1l̞���50�3,��4����U�L���yj��#��<��ܫh�ӶM�X
(�_��z`h���
�pq�4?��hE��_j)z��c=6ѥ�8H*�J`�s=%�T�Yw�����d��R�[}�XϢ�2�v�6/�
�*r����&����#���"b��=*z�W��'�e�AL��w��u�)g���щR~�
�*
�C��,�v��b
 ����䬏�s
J
kk�Q�Ր�lRx�rO��F/$p��⽯v��
1AOx�: OZ
��1ҟI��w���p�2vON-ޑР+�E��
)�ڒ����]���_�җ�hu ��LS����‿p` �=&&�����
���p�nd��fWM��C���e�U��������m��e�]m��r�]J�[�}|���~T̎�
-sϰ�
_�w=�ts

i
�DXƉɋ�:K
�~�M)w�쐋3
)wW� �"
l�
!$�X������i|��,�lw����x
��/�5U
-���ڟs���>x?g���i*®E&8
�l�����C��&$��&gm��ԫ
y�G�^��.lv����
}ĸfb��nR���!X�K���(9�
->g׀�ݒ���9ńZ�ռ�>R��>�<��p)��0���'��=��
�B`��N��5�v�^#�Tbҭ���ɒ�������F�Iv�nT��vp����ӭ��
��A�pQW��w
c��ɪ�FTԥ�^B�]\�[�Dn��}v������;:D�[K�X$4��|u��@�p�	�n-2թE��5tܶ���1��bL�Ɛ��(��ԆȰM��m������� <h� �>�~=��
�X�F.tU�['�1+��ٮ�W+#E_��� �v�i]�3�󹿖�z|�"��B����,�<��J�y�=�` N����]�c�aSg�2
�X�Ĵ��m�/gMM)/�
-r�03�E"��>��
Z
?���遼P�Qk��4��Y��=]��&� ����0`��� _]S5�L��yck��zT���.�Lm9�,iA�JO�
mm�}v���x��N�r?�w�S��$l��a�����5����B����)_
N
Z����4 ƃܛ�]:ѭc�w�lʁ�E�w����
-	y0��.��}Y��� ��pik�]�J�[/��*.�d������Ƥ;İ8�p�W�<��o�5��j}��
-��xIw����Yz�ֻQa��Ļ]���/u�
���Ċ]#:��X���|��
����9]�u`�M\ƞ�X����,*Z��:J�2�
-
�d��Ɯ�ѳ>+Yo�j-;\��%�$�\j��\�%~=c��s��U��O�I}�YB�['1qk#Ȱ-1>ui�j({�1A)��
j=ZR�S^��&)�MA��b��l�W�gx
|�[�����}���[�� ���ރ�\���W�?�|p4��eP?*��J72~����|s�Iz�-)/��/�V;1
�0���D��0$xm��S���H@��Ω;\��ޝ�8�T�5a��<�w� �ܛ�
�L
�� �l)I���~
g'����\�S
-�^_�v!�#��m�!�f���L7��Z�-�LR�F9Y�dU9�\J@�j�;�
j\�C��ؒ���e�5�vf�ݻ
�:���i㓷�d��<��;֦`TlN��� �\:�-�E[RL�R/4�Ԑ�i��<xm�"�2^�.�$�p2�Q��|�� �mN�2�2J�S�&X,��5oK���[������z���6)%�<�
-[�Yn+��< �ٜb����᤬��݅_����O�E]34E���~S5f�s~ا�/�+�Qq��WV1
~0[�{0K���)6iƛaڛ߇��X(
����\��M�`#��
���&�՝�]��Z��԰���ⷶqJ�C�.q�y���������}���:���k(|�g� 
�m�9��rG�#_Ssɳ�&�'��҂���ߜb�\o�|<��zv����Xs������1B�M�Mtk�yN5�d����V�xf��n

s0�flM�=*�ԟ�,�M�%��٥�q~�r;3v�Up�����at�M�(�b�

�ДuO_{i�9��� "`��qs
��a�m��D����T0��Rd�M

�L�)�c��	�7��>�����*Rٶ
�-���Abvu���̒���!��z2�m	%ǧ��*
eGS]k���ӭ��
t
VH�%��Q;2��� ��l=:fm��>�V��	�܁��:A��m�"�lMqQ3]��|�%YuqඔG��h�B�׈�w�@\��ZZ�]ǀ{���vg [...]
-ol�{�9LɵL�P���O���+y�ON
r~���*���^��<��@~?�
��Ԇ���T,u���`&ݔW�>��U�A?���U�����5�Nr(�]=�v8���Mp;Z
̩�ە�t��ޛ�
ڙ�;�<��,fe��CZ�é@%�Z��M��{�H�� +g��vv����E>�Oˉ���W�٫���-ٟ�Y�Ye^uM�S�"�<�Rr]:l���b7KD��.j���w��ŚA�l��e_?��H�]�K�R\���
~i��4�6E� �l��f`�(�s����a|����1R�b?2ũ�d��<�K�@���
:���,Ķ��k[F�'8��aR�CánH����7���뽨�[
�y������!DZ:�e
-��k��v
�Ӽ��[�.���x��;-l�1;�*�w
Ӧa"�2r^�h�IX�wӪ���2B���6���mZ�\���!L�Z��] ���=o�����ط�W��e�dL�ui�}^�*z�؜sW��� ���`����2H�x�2��Z��ꋟ,��<[�)|�1���>���rq
��F���
��Q��}�"��vi���iA���c���#�� �SmB�e
��
-� f�<
#����)&5�
1��YCui��(*f�=��Bw�=Uu̵^���C��kä�ۋ�E��]�j*".�5���õ������'�TШ�������
�t_��ۤ��]���i
-�?��������R 
]ϖ��_���c�W���W��a�������*~�b���R�s���G���"v�SvV൅�ܷ3-%a�=�'aⶦ(yV2�*�į��-ҭT��4�[E(�e}[N��9Q�ݩt�
��4�*�Rx4�*������ʹk���̴3���;uW��BK������@� b����k�;ՙ�y�w��C���-ɑܹr]k��<�,����5|
��m;�� ���*Vt��xdPI�|�hx~��/�@�rL��Ar�

`�C��OA�zNA͟T">
��|� �2�m�:I��^qcJM���Ԍ���gE�5��jaC�
lʖY���$��@��fd��Qp���dn��pA�ɟ������
CȔ��X0/G
�c�Y����m��u��w�.Q�Ψ��(��ɪu'�b��)�`�'�������u7�5k�V�)�7�5��:k>�Y쫸�c��ॽ����O���o)I�<��
�q�!
*?�܊�����&~�C����I4�D˽0.�~��
-S����h�'�
tӛCČ%=�nӍ�.�!�l��n�s¾��U�#�ƽ)*j�O�0��'m�Be��u�%���eG��C
-hԼ��ф������Zq�.��σ���!-"��ϻfgf���}���y�ej���Co���
4�)�Ʃ����]�bl��g;
�+�Nq��L��X0R
-���W���
�M9�r��:9�$�Nu#��ۚ�Z)�ל���+���@G�+_Kᵠ�aV^�j���͊�p䘠�9~z�>�ί�?�A+tq�	A%���� 7nH
�G)��~a�O_16F
����6T�ƨ���t}���—/*�Vu�Y�zt�MC-~0׏������^�PR��✠*�AX��	q}�
�{�������ژ}ۑ��%����iic����ٚ��uH_�z�J���7e[l\
�%}# �p�/B��)R�)"t��X�6���؇#|����#9�@���5
��dw�;�ʼ
�iJ�)TPs
:[�����<5)��O��&��%�
-D̢
��u�F� a�͟�q��|�V��Y;�
���~�1�3*h�����
��d0���(
1��(?��
�o'��H5V^��q	�æ�\�iE�M�׾
묺7��}2���
Ī
'�=¥/I՛
c{��Xw >�A>�0��Th�B*>�{��9
��
-|ʄ�����G/��_�
���7:�~�@�Nj��-�1d��
�!�
&z�Gl�<����Wn:�E���(oG���x��(Wr��!7�~k��\qS@!'�a��c��o�є=�.y��"§x�?�l����� �u���v�r� -��mNuv�d���t�x�Ȭ^V�S';@����s=��_z��N���74���Al�������9nDŽ�ض��v��Ͱ�e=6�ߏ�WJ
�Q	S�v������	
-|��&m���������jү�ubj���YI���~h�d'豋Z|~�WreM�H�S�3�u��w���8iࣾ�vXҌ���5������d_����`��F?<k %?��b��`D(���Ѓ)�
�}�l͹���
-�uњ����F[���
�������P���l[�9�A�ljn�3Gk�.d��Al��-
�i�ؗ.x�T*z��2̭��VsVX�����:�Z��'*��m����kv���/
B���;`}	���G#��'[�{��U
:of������.?��K S��
T��|�m;
��%Q��E�
��(�c����O�{}D�scׁ��wU}lHyxBP�:rF���� ?����6��(>oS��,���b�&��j��3
��
�;� �1H�����x��C����Ќg�W������y}LH����
�k>����*`NM�B�z��y/71�o
���c���>l9�f��u.Պ+ZsqpKj����=�	�'��̲x?ƨ�/��/*˟y��n�t5�W�
-�� I���8!.{��:��iIm�
-YT#
-���m̂K+Fr)�R6͈�
�x�N�p��e�J:��`w'�Ԑ�
-�|>�nJ�:�n?��lzY��
};�8�y
-�>AD�L�9H܅/�ׅ����[vxꊮ!bAY����*������oZ8�
���-�a��k:T�i'-��ue���~H�dG��Q~ٕ-+�hZQ5�[�p����dO�ݥ����zZ�?���1Mc�h�-?
y���lq�Uv����]+�泃�������a��:���
-v�x+�
����[p�-(��`^q	����æn
�n(hF&����
`
�f�QI����aW=!���^��eJ�]�+���h⾋P�yWy�A�l���Ά�
-T�_��%��Q2hw�P��F~���� >�چ�脗]ԓ�n
�3�Z�o�cO�4�����w�BO�7���6ŔF������C;�+�
-� �� ���>I�%wڅyEu��0
r0��������~ ��������s���cU�焥�w�>'|�
�
qzYG�|e�8h�=3�xYN43��x��K9�k�f��Iuc-�����&R���mC�oۈͻb���~~Q��m�M�Dݶ�����xH�&�=�
:���$.驍�†�]'���G�/�`�F%7�̿z �.�QI/*����*@�3��ՓJB��]n�!��6H��
���{K� ��d@��ZI��GD�='�<Ԝ�;��\�A�F����w�yZ+��"���F��E�Ⱥ:�H?#o�9�$&�qR -
��k(�B[}��aN�c
�<<��_a
��,��Y-"~I���#��6t�� 8rF�����b���[6��D���T��ۢ��c���}���
-`��P}xP��i�x2��'�iQ�Ay����>nYV�aAZ�f��B.*p ֿ4���.���߶���'���?�b�|�u��s5(kx96P��:��{vU��X74'zyw�-��5yϷ�%/?��*�N��ߦ��
�/>����.��E�۵�6���1q��1Q�s
��E(���>�~��3rXڟ^n�퍡�m
�$��f/�a�z㶛O9!֭������Kffʟ�ֵ���	�-'
|��3��lܶ��i�{��?��|D��>��z���l��&���� h�Qq�aA�c{�9����^�V߱2
����'��� q衛_�bZ
-N���b�ui:�
�����ڧ^AՃ��ƈ����z��/#4��Q̀�	5���
-�#�h���� ���84����JO{]8��ÙL΋}?�}̈́�Z�y8�^v�JK;�(|v�r���̎
���U�bT�^��CTm��վ��;��?5���GZ>\��~�i%�׆iPB�۫FVڛ�����e��(�.l�
3�V���J��
�v��� 6�ɶ�
]�`
-�4��������R.���WF;j�o�hh���h�@�ј��qZ�O2i�6hjp��킺��Q��!p��J`'EזՈ�53.gU��*�9ff��l�{8����ٗ��N3r�����-*���
-���Ҧ8a�dz�qw���?�޴��5��V��]/r�Y�㼎��
�Q
��)�YE5���3]�o3����,��4w8��ܲ6}�
F�n;q��Ɣ5
�n�"73�j_]�����L��?�L�b���� "�4���q59�"���i%4㲟
zj�f��P3�Ͷ�YZ�L��=ǩz��.�Ⲫ�㼬湋Wp�+*|�����8����!�Gz׆Iek6Z��0���S6,��U
:)�F�O�*���)�7v�������nV�C����w�ߒ�����a�D�5ښww�L�_3��A54�?悬�������P�����뚚�
72s�Em8t�(�&|����Յ�:p@���Ђ
3*���iӆ+�4-�5�7�E̠�\0������8g ���ӵ
#,
�Fz�UoK��
�l�����<������ɶ�{�ݨ��JN㌒V!�g^��&d�q�WTȄM"q݂+Zl"d'��-���n���}?v8N��|8��<�Wz�_:EU�P�焊u�dI�
� C$���
��GJx�����Xт���>����VHъ�\�৞�2�n�yI�SҜ��^&�󨀿2LaJ#.�(o��as}@�t
�׿����tq�.�8w���bD�����1��]ܶ=��ߚG����S��'q���3
�w��ꐅސy��6��g��yN��q"48T�tNVxk�ޔ�}�/^wА:F�}7���� �(w��"V�h�!5��l_������
B&� �
"�٩QIէm Oՠ�ɞ�w�֒}��ߘ�~2P/��6l��!j�� �V���t��3�I:�� ?�|�@��3/R��D�pga��i*��,���4�x0�)�1A�}
` !4{�A�[����?8�yw
촿���O3JL��[����w^�/8/��F���d �<��l
-V�9Eκ�S��)5��/�a*��?��ݕ�; ��
endstream
endobj
285 0 obj
[/ICCBased 295 0 R]
endobj
6 0 obj
<</Intent 33 0 R/Name(Layer 1)/Type/OCG/Usage 34 0 R>>
endobj
65 0 obj
<</Intent 91 0 R/Name(Layer 1)/Type/OCG/Usage 92 0 R>>
endobj
123 0 obj
<</Intent 149 0 R/Name(Layer 1)/Type/OCG/Usage 150 0 R>>
endobj
181 0 obj
<</Intent 190 0 R/Name(Layer 1)/Type/OCG/Usage 191 0 R>>
endobj
218 0 obj
<</Intent 244 0 R/Name(Layer 1)/Type/OCG/Usage 245 0 R>>
endobj
244 0 obj
[/View/Design]
endobj
245 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 18.1)/Subtype/Artwork>>>>
endobj
190 0 obj
[/View/Design]
endobj
191 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 18.1)/Subtype/Artwork>>>>
endobj
149 0 obj
[/View/Design]
endobj
150 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 18.1)/Subtype/Artwork>>>>
endobj
91 0 obj
[/View/Design]
endobj
92 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 18.1)/Subtype/Artwork>>>>
endobj
33 0 obj
[/View/Design]
endobj
34 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 18.1)/Subtype/Artwork>>>>
endobj
277 0 obj
[276 0 R]
endobj
332 0 obj
<</CreationDate(D:20141222131935-06'00')/Creator(Adobe Illustrator CC 2014 \(Macintosh\))/ModDate(D:20141222134947-06'00')/Producer(Adobe PDF library 10.01)/Title(Print)>>
endobj
xref
0 333
0000000004 65535 f
-0000000016 00000 n
-0000000224 00000 n
-0000046507 00000 n
-0000000005 00000 f
-0000000007 00000 f
-0002512206 00000 n
-0000000009 00000 f
-0000046558 00000 n
-0000000010 00000 f
-0000000011 00000 f
-0000000012 00000 f
-0000000013 00000 f
-0000000014 00000 f
-0000000015 00000 f
-0000000016 00000 f
-0000000017 00000 f
-0000000018 00000 f
-0000000019 00000 f
-0000000020 00000 f
-0000000021 00000 f
-0000000022 00000 f
-0000000023 00000 f
-0000000024 00000 f
-0000000025 00000 f
-0000000026 00000 f
-0000000027 00000 f
-0000000028 00000 f
-0000000029 00000 f
-0000000030 00000 f
-0000000031 00000 f
-0000000032 00000 f
-0000000035 00000 f
-0002513039 00000 n
-0002513070 00000 n
-0000000036 00000 f
-0000000037 00000 f
-0000000038 00000 f
-0000000039 00000 f
-0000000040 00000 f
-0000000041 00000 f
-0000000042 00000 f
-0000000043 00000 f
-0000000044 00000 f
-0000000045 00000 f
-0000000046 00000 f
-0000000047 00000 f
-0000000048 00000 f
-0000000049 00000 f
-0000000050 00000 f
-0000000051 00000 f
-0000000052 00000 f
-0000000053 00000 f
-0000000054 00000 f
-0000000055 00000 f
-0000000056 00000 f
-0000000057 00000 f
-0000000058 00000 f
-0000000059 00000 f
-0000000060 00000 f
-0000000061 00000 f
-0000000062 00000 f
-0000000063 00000 f
-0000000064 00000 f
-0000000066 00000 f
-0002512276 00000 n
-0000000067 00000 f
-0000000068 00000 f
-0000000069 00000 f
-0000000070 00000 f
-0000000071 00000 f
-0000000072 00000 f
-0000000073 00000 f
-0000000074 00000 f
-0000000075 00000 f
-0000000076 00000 f
-0000000077 00000 f
-0000000078 00000 f
-0000000079 00000 f
-0000000080 00000 f
-0000000081 00000 f
-0000000082 00000 f
-0000000083 00000 f
-0000000084 00000 f
-0000000085 00000 f
-0000000086 00000 f
-0000000087 00000 f
-0000000088 00000 f
-0000000089 00000 f
-0000000090 00000 f
-0000000093 00000 f
-0002512923 00000 n
-0002512954 00000 n
-0000000094 00000 f
-0000000095 00000 f
-0000000096 00000 f
-0000000097 00000 f
-0000000098 00000 f
-0000000099 00000 f
-0000000100 00000 f
-0000000101 00000 f
-0000000102 00000 f
-0000000103 00000 f
-0000000104 00000 f
-0000000105 00000 f
-0000000106 00000 f
-0000000107 00000 f
-0000000108 00000 f
-0000000109 00000 f
-0000000110 00000 f
-0000000111 00000 f
-0000000112 00000 f
-0000000113 00000 f
-0000000114 00000 f
-0000000115 00000 f
-0000000116 00000 f
-0000000117 00000 f
-0000000118 00000 f
-0000000119 00000 f
-0000000120 00000 f
-0000000121 00000 f
-0000000122 00000 f
-0000000124 00000 f
-0002512347 00000 n
-0000000125 00000 f
-0000000126 00000 f
-0000000127 00000 f
-0000000128 00000 f
-0000000129 00000 f
-0000000130 00000 f
-0000000131 00000 f
-0000000132 00000 f
-0000000133 00000 f
-0000000134 00000 f
-0000000135 00000 f
-0000000136 00000 f
-0000000137 00000 f
-0000000138 00000 f
-0000000139 00000 f
-0000000140 00000 f
-0000000141 00000 f
-0000000142 00000 f
-0000000143 00000 f
-0000000144 00000 f
-0000000145 00000 f
-0000000146 00000 f
-0000000147 00000 f
-0000000148 00000 f
-0000000151 00000 f
-0002512805 00000 n
-0002512837 00000 n
-0000000152 00000 f
-0000000153 00000 f
-0000000154 00000 f
-0000000155 00000 f
-0000000156 00000 f
-0000000157 00000 f
-0000000158 00000 f
-0000000159 00000 f
-0000000160 00000 f
-0000000161 00000 f
-0000000162 00000 f
-0000000163 00000 f
-0000000164 00000 f
-0000000165 00000 f
-0000000166 00000 f
-0000000167 00000 f
-0000000168 00000 f
-0000000169 00000 f
-0000000170 00000 f
-0000000171 00000 f
-0000000172 00000 f
-0000000173 00000 f
-0000000174 00000 f
-0000000175 00000 f
-0000000176 00000 f
-0000000177 00000 f
-0000000178 00000 f
-0000000179 00000 f
-0000000180 00000 f
-0000000182 00000 f
-0002512421 00000 n
-0000000183 00000 f
-0000000184 00000 f
-0000000185 00000 f
-0000000186 00000 f
-0000000187 00000 f
-0000000188 00000 f
-0000000189 00000 f
-0000000192 00000 f
-0002512687 00000 n
-0002512719 00000 n
-0000000193 00000 f
-0000000194 00000 f
-0000000195 00000 f
-0000000196 00000 f
-0000000197 00000 f
-0000000198 00000 f
-0000000199 00000 f
-0000000200 00000 f
-0000000201 00000 f
-0000000202 00000 f
-0000000203 00000 f
-0000000204 00000 f
-0000000205 00000 f
-0000000206 00000 f
-0000000207 00000 f
-0000000208 00000 f
-0000000209 00000 f
-0000000210 00000 f
-0000000211 00000 f
-0000000212 00000 f
-0000000213 00000 f
-0000000214 00000 f
-0000000215 00000 f
-0000000216 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0002512495 00000 n
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0002512569 00000 n
-0002512601 00000 n
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0001014835 00000 n
-0001014643 00000 n
-0002513155 00000 n
-0000047009 00000 n
-0000047254 00000 n
-0001038964 00000 n
-0000407159 00000 n
-0000797890 00000 n
-0000048065 00000 n
-0000047318 00000 n
-0002512169 00000 n
-0000047501 00000 n
-0000047551 00000 n
-0000054032 00000 n
-0000190835 00000 n
-0000797659 00000 n
-0000797776 00000 n
-0000797030 00000 n
-0000054095 00000 n
-0000190996 00000 n
-0000407196 00000 n
-0000797192 00000 n
-0000798004 00000 n
-0000798070 00000 n
-0000798105 00000 n
-0000798405 00000 n
-0000798480 00000 n
-0001014717 00000 n
-0001014749 00000 n
-0001015255 00000 n
-0001015517 00000 n
-0001039040 00000 n
-0001039740 00000 n
-0001040896 00000 n
-0001046809 00000 n
-0001112398 00000 n
-0001177987 00000 n
-0001243576 00000 n
-0001309165 00000 n
-0001374754 00000 n
-0001440343 00000 n
-0001505932 00000 n
-0001571521 00000 n
-0001637110 00000 n
-0001702699 00000 n
-0001768288 00000 n
-0001833877 00000 n
-0001899466 00000 n
-0001965055 00000 n
-0002030644 00000 n
-0002053046 00000 n
-0002118635 00000 n
-0002184224 00000 n
-0002249813 00000 n
-0002315402 00000 n
-0002380991 00000 n
-0002446580 00000 n
-0002513182 00000 n
-trailer
<</Size 333/Root 1 0 R/Info 332 0 R/ID[<496307306E3C404CBA393BF6BE106AFA><9D3B339D85FF45DF8C2F328FB9614C9A>]>>
startxref
2513371
%%EOF
\ No newline at end of file
diff --git a/doc/_static/logo/dongle/front.ai b/doc/_static/logo/dongle/front.ai
deleted file mode 100644
index e013169..0000000
--- a/doc/_static/logo/dongle/front.ai
+++ /dev/null
@@ -1,6536 +0,0 @@
-%PDF-1.5
%����
-1 0 obj
<</Metadata 2 0 R/OCProperties<</D<</ON[7 0 R 52 0 R 96 0 R]/Order 97 0 R/RBGroups[]>>/OCGs[7 0 R 52 0 R 96 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<</Length 49427/Subtype/XML/Type/Metadata>>stream
-<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
-<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c014 79.156821, 2014/08/29-03:07:50        ">
-   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-      <rdf:Description rdf:about=""
-            xmlns:dc="http://purl.org/dc/elements/1.1/"
-            xmlns:xmp="http://ns.adobe.com/xap/1.0/"
-            xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/"
-            xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
-            xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
-            xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
-            xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/"
-            xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
-            xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
-            xmlns:stFnt="http://ns.adobe.com/xap/1.0/sType/Font#"
-            xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/"
-            xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
-         <dc:format>application/pdf</dc:format>
-         <dc:title>
-            <rdf:Alt>
-               <rdf:li xml:lang="x-default">Print</rdf:li>
-            </rdf:Alt>
-         </dc:title>
-         <xmp:MetadataDate>2014-12-22T13:28:04-06:00</xmp:MetadataDate>
-         <xmp:ModifyDate>2014-12-22T13:28:04-06:00</xmp:ModifyDate>
-         <xmp:CreateDate>2014-12-22T13:16:47-06:00</xmp:CreateDate>
-         <xmp:CreatorTool>Adobe Illustrator CC 2014 (Macintosh)</xmp:CreatorTool>
-         <xmp:Thumbnails>
-            <rdf:Alt>
-               <rdf:li rdf:parseType="Resource">
-                  <xmpGImg:width>256</xmpGImg:width>
-                  <xmpGImg:height>80</xmpGImg:height>
-                  <xmpGImg:format>JPEG</xmpGImg:format>
-                  <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAUAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQV [...]
-               </rdf:li>
-            </rdf:Alt>
-         </xmp:Thumbnails>
-         <xmpMM:InstanceID>uuid:f064096a-ad71-bd46-91bb-69a1f800b249</xmpMM:InstanceID>
-         <xmpMM:DocumentID>xmp.did:2da2ea4e-4837-4559-b46b-81f2d3f7de04</xmpMM:DocumentID>
-         <xmpMM:OriginalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</xmpMM:OriginalDocumentID>
-         <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
-         <xmpMM:DerivedFrom rdf:parseType="Resource">
-            <stRef:instanceID>uuid:d1c078a0-2746-42b2-b0d1-25aedff8fb1e</stRef:instanceID>
-            <stRef:documentID>xmp.did:1b6690ed-28a8-c141-9479-b6a9cf6be651</stRef:documentID>
-            <stRef:originalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</stRef:originalDocumentID>
-            <stRef:renditionClass>proof:pdf</stRef:renditionClass>
-         </xmpMM:DerivedFrom>
-         <xmpMM:History>
-            <rdf:Seq>
-               <rdf:li rdf:parseType="Resource">
-                  <stEvt:action>saved</stEvt:action>
-                  <stEvt:instanceID>xmp.iid:2da2ea4e-4837-4559-b46b-81f2d3f7de04</stEvt:instanceID>
-                  <stEvt:when>2014-12-22T13:16:47-06:00</stEvt:when>
-                  <stEvt:softwareAgent>Adobe Illustrator CC 2014 (Macintosh)</stEvt:softwareAgent>
-                  <stEvt:changed>/</stEvt:changed>
-               </rdf:li>
-            </rdf:Seq>
-         </xmpMM:History>
-         <illustrator:Type>Document</illustrator:Type>
-         <illustrator:StartupProfile>Print</illustrator:StartupProfile>
-         <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
-         <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
-         <xmpTPg:NPages>1</xmpTPg:NPages>
-         <xmpTPg:MaxPageSize rdf:parseType="Resource">
-            <stDim:w>49.999194</stDim:w>
-            <stDim:h>15.998472</stDim:h>
-            <stDim:unit>Millimeters</stDim:unit>
-         </xmpTPg:MaxPageSize>
-         <xmpTPg:Fonts>
-            <rdf:Bag>
-               <rdf:li rdf:parseType="Resource">
-                  <stFnt:fontName>Bauhaus93</stFnt:fontName>
-                  <stFnt:fontFamily>Bauhaus 93</stFnt:fontFamily>
-                  <stFnt:fontFace>Regular</stFnt:fontFace>
-                  <stFnt:fontType>TrueType</stFnt:fontType>
-                  <stFnt:versionString>Version 1.52</stFnt:versionString>
-                  <stFnt:composite>False</stFnt:composite>
-                  <stFnt:fontFileName>Bauhaus93.ttf</stFnt:fontFileName>
-               </rdf:li>
-               <rdf:li rdf:parseType="Resource">
-                  <stFnt:fontName>Consolas-Bold</stFnt:fontName>
-                  <stFnt:fontFamily>Consolas</stFnt:fontFamily>
-                  <stFnt:fontFace>Bold</stFnt:fontFace>
-                  <stFnt:fontType>Open Type</stFnt:fontType>
-                  <stFnt:versionString>Version 2.00</stFnt:versionString>
-                  <stFnt:composite>False</stFnt:composite>
-                  <stFnt:fontFileName>Consolas Bold.ttf</stFnt:fontFileName>
-               </rdf:li>
-            </rdf:Bag>
-         </xmpTPg:Fonts>
-         <xmpTPg:PlateNames>
-            <rdf:Seq>
-               <rdf:li>Cyan</rdf:li>
-               <rdf:li>Magenta</rdf:li>
-               <rdf:li>Yellow</rdf:li>
-               <rdf:li>Black</rdf:li>
-            </rdf:Seq>
-         </xmpTPg:PlateNames>
-         <xmpTPg:SwatchGroups>
-            <rdf:Seq>
-               <rdf:li rdf:parseType="Resource">
-                  <xmpG:groupName>Default Swatch Group</xmpG:groupName>
-                  <xmpG:groupType>0</xmpG:groupType>
-                  <xmpG:Colorants>
-                     <rdf:Seq>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>White</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>Black</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>100.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>CMYK Red</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>CMYK Yellow</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>CMYK Green</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>100.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>CMYK Cyan</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>100.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>CMYK Blue</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>100.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>CMYK Magenta</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=15 M=100 Y=90 K=10</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>15.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>90.000000</xmpG:yellow>
-                           <xmpG:black>10.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=90 Y=85 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>90.000000</xmpG:magenta>
-                           <xmpG:yellow>85.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=80 Y=95 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>80.000000</xmpG:magenta>
-                           <xmpG:yellow>95.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=50 Y=100 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>50.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=35 Y=85 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>35.000000</xmpG:magenta>
-                           <xmpG:yellow>85.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=5 M=0 Y=90 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>5.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>90.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=20 M=0 Y=100 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>20.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=50 M=0 Y=100 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>50.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=75 M=0 Y=100 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>75.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=85 M=10 Y=100 K=10</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>85.000000</xmpG:cyan>
-                           <xmpG:magenta>10.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>10.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=90 M=30 Y=95 K=30</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>90.000000</xmpG:cyan>
-                           <xmpG:magenta>30.000000</xmpG:magenta>
-                           <xmpG:yellow>95.000000</xmpG:yellow>
-                           <xmpG:black>30.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=75 M=0 Y=75 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>75.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>75.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=80 M=10 Y=45 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>80.000000</xmpG:cyan>
-                           <xmpG:magenta>10.000000</xmpG:magenta>
-                           <xmpG:yellow>45.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=70 M=15 Y=0 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>70.000000</xmpG:cyan>
-                           <xmpG:magenta>15.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=85 M=50 Y=0 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>85.000000</xmpG:cyan>
-                           <xmpG:magenta>50.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=100 M=95 Y=5 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>100.000000</xmpG:cyan>
-                           <xmpG:magenta>95.000000</xmpG:magenta>
-                           <xmpG:yellow>5.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=100 M=100 Y=25 K=25</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>100.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>25.000000</xmpG:yellow>
-                           <xmpG:black>25.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=75 M=100 Y=0 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>75.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=50 M=100 Y=0 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>50.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=35 M=100 Y=35 K=10</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>35.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>35.000000</xmpG:yellow>
-                           <xmpG:black>10.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=10 M=100 Y=50 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>10.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>50.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=95 Y=20 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>95.000000</xmpG:magenta>
-                           <xmpG:yellow>20.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=25 M=25 Y=40 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>25.000000</xmpG:cyan>
-                           <xmpG:magenta>25.000000</xmpG:magenta>
-                           <xmpG:yellow>40.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=40 M=45 Y=50 K=5</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>40.000000</xmpG:cyan>
-                           <xmpG:magenta>45.000000</xmpG:magenta>
-                           <xmpG:yellow>50.000000</xmpG:yellow>
-                           <xmpG:black>5.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=50 M=50 Y=60 K=25</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>50.000000</xmpG:cyan>
-                           <xmpG:magenta>50.000000</xmpG:magenta>
-                           <xmpG:yellow>60.000000</xmpG:yellow>
-                           <xmpG:black>25.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=55 M=60 Y=65 K=40</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>55.000000</xmpG:cyan>
-                           <xmpG:magenta>60.000000</xmpG:magenta>
-                           <xmpG:yellow>65.000000</xmpG:yellow>
-                           <xmpG:black>40.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=25 M=40 Y=65 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>25.000000</xmpG:cyan>
-                           <xmpG:magenta>40.000000</xmpG:magenta>
-                           <xmpG:yellow>65.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=30 M=50 Y=75 K=10</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>30.000000</xmpG:cyan>
-                           <xmpG:magenta>50.000000</xmpG:magenta>
-                           <xmpG:yellow>75.000000</xmpG:yellow>
-                           <xmpG:black>10.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=35 M=60 Y=80 K=25</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>35.000000</xmpG:cyan>
-                           <xmpG:magenta>60.000000</xmpG:magenta>
-                           <xmpG:yellow>80.000000</xmpG:yellow>
-                           <xmpG:black>25.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=40 M=65 Y=90 K=35</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>40.000000</xmpG:cyan>
-                           <xmpG:magenta>65.000000</xmpG:magenta>
-                           <xmpG:yellow>90.000000</xmpG:yellow>
-                           <xmpG:black>35.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=40 M=70 Y=100 K=50</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>40.000000</xmpG:cyan>
-                           <xmpG:magenta>70.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>50.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=50 M=70 Y=80 K=70</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>50.000000</xmpG:cyan>
-                           <xmpG:magenta>70.000000</xmpG:magenta>
-                           <xmpG:yellow>80.000000</xmpG:yellow>
-                           <xmpG:black>70.000000</xmpG:black>
-                        </rdf:li>
-                     </rdf:Seq>
-                  </xmpG:Colorants>
-               </rdf:li>
-               <rdf:li rdf:parseType="Resource">
-                  <xmpG:groupName>Grays</xmpG:groupName>
-                  <xmpG:groupType>1</xmpG:groupType>
-                  <xmpG:Colorants>
-                     <rdf:Seq>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=100</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>100.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=90</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>89.999400</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=80</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>79.998800</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=70</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>69.999700</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=60</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>59.999100</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=50</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>50.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=40</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>39.999400</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=30</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>29.998800</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=20</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>19.999700</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=10</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>9.999100</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=0 Y=0 K=5</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>0.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>4.998800</xmpG:black>
-                        </rdf:li>
-                     </rdf:Seq>
-                  </xmpG:Colorants>
-               </rdf:li>
-               <rdf:li rdf:parseType="Resource">
-                  <xmpG:groupName>Brights</xmpG:groupName>
-                  <xmpG:groupType>1</xmpG:groupType>
-                  <xmpG:Colorants>
-                     <rdf:Seq>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=100 Y=100 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>100.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=75 Y=100 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>75.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=0 M=10 Y=95 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>0.000000</xmpG:cyan>
-                           <xmpG:magenta>10.000000</xmpG:magenta>
-                           <xmpG:yellow>95.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=85 M=10 Y=100 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>85.000000</xmpG:cyan>
-                           <xmpG:magenta>10.000000</xmpG:magenta>
-                           <xmpG:yellow>100.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=100 M=90 Y=0 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>100.000000</xmpG:cyan>
-                           <xmpG:magenta>90.000000</xmpG:magenta>
-                           <xmpG:yellow>0.000000</xmpG:yellow>
-                           <xmpG:black>0.000000</xmpG:black>
-                        </rdf:li>
-                        <rdf:li rdf:parseType="Resource">
-                           <xmpG:swatchName>C=60 M=90 Y=0 K=0</xmpG:swatchName>
-                           <xmpG:mode>CMYK</xmpG:mode>
-                           <xmpG:type>PROCESS</xmpG:type>
-                           <xmpG:cyan>60.000000</xmpG:cyan>
-                           <xmpG:magenta>90.000000</xmpG:magenta>
-                           <xmpG:yellow>0.003100</xmpG:yellow>
-                           <xmpG:black>0.003100</xmpG:black>
-                        </rdf:li>
-                     </rdf:Seq>
-                  </xmpG:Colorants>
-               </rdf:li>
-            </rdf:Seq>
-         </xmpTPg:SwatchGroups>
-         <pdf:Producer>Adobe PDF library 10.01</pdf:Producer>
-      </rdf:Description>
-   </rdf:RDF>
-</x:xmpmeta>
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                                                                                                    
-                           
-<?xpacket end="w"?>
endstream
endobj
3 0 obj
<</Count 1/Kids[9 0 R]/Type/Pages>>
endobj
9 0 obj
<</ArtBox[3.5598 3.04572 138.511 45.35]/BleedBox[0.0 0.0 141.73 45.35]/Contents 98 0 R/LastModified(D:20141222132804-06'00')/MediaBox[0.0 0.0 141.73 45.35]/Parent 3 0 R/PieceInfo<</Illustrator 99 0 R>>/Resources<</ColorSpace<</CS0 100 0 R>>/ExtGState<</GS0 101 0 R>>/Font<</TT0 95 0 R>>/ProcSet[/PDF/Text]/Properties<</MC0 96 0 R>>/XObject<</Fm0 102 0 R>>>>/Thumb 103 0 R/TrimBox[0.0 0.0 141.73 45.35]/Type/Page>>
endobj
98 0 obj
<</Filter/FlateDecode/Length 1130>>stream
-H��WM�7
�ϯ�=D���k�4�m�@υ��I��m���}���� 9�\4z�I����������[��O�B4>�
�dO��s?�IG��|�Yz<M�ߞ-}x�>O�-F'�������/�������/�\0/2�l<�J��I~H��Mʙظ�uM	����0e�XM�~)�"��tT�ϩS[D��m&mw0%U'-��J?V����	�J�Q�;Z�y_�

�%��|h��Wg#��_2�
�\��u�!@�hB,�m����y at gMuq�u$z��Ȝm��B�l�}��5�5�`���g��
�̮��t6�W
��'��["A[$P"�N�
@GS��CyH)�M��k�:N5�tE�Ϟ��_�����ݟi�P�;S8dz�X�ڦLLNB���y� �1+)�pk��+4
����:��Њh�WV�RY0t��4�/��Kw �z傕d�H�b�� �lS�M~p2��
�!�|u��`�8��5Sk�{��q�;ʦ�:$�vJKOGu��� [...]
�G?�K�[?�:j�v������.����{���~
��l����aA���_��c�]�K�9���v�Q�0� ���h��%jb
���(�G�.}�t��/iG[�S��
��ae���ᄐX�n�
�<�,�����s�D��l��!6�/D*6�r��B����Sj�G:��f�hTª��k!0\�����D��O�j��.��S߽:���
k�趃`�
p$މ!��R/{/N��e�� !%mr�����ӐR ��=
��s����(�}��E���2Y���V3��\"�����
�}�������&�
�
-��
UV��V�f�E|
R�9WHڨ��
A�R�1�ڄb�,M���z��ҁμ��,)��;'���=w\�����t��_Fy�<s�-{l;�
-%J�-w��%jJ�
-��ʖU(40����Sf�t&
�Z�� ���
�]�~=�֦��x��;��#`y���Z�ںϟ���i��a��~���=�����Ӵ��el��+�����8b�Pq�Z�&�a��~y���HO/����HO_������o�����nK��
 ��
endstream
endobj
103 0 obj
<</BitsPerComponent 8/ColorSpace 104 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 5/Length 55/Width 17>>stream
-8;RZ]!s7lU#bVXdK*:+7)oU>4"0_br*^pT193<$i"2k0?"ou$d08]~>
endstream
endobj
104 0 obj
[/Indexed/DeviceRGB 255 105 0 R]
endobj
105 0 obj
<</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
-8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
-b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
-E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
-6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
-VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
-PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
-l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
endstream
endobj
102 0 obj
<</BBox[49.2144 45.4716 109.766 15.2201]/Group 106 0 R/Length 47/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ExtGState<</GS0 101 0 R>>/XObject<</Fm0 107 0 R>>>>/Subtype/Form>>stream
-q
-/GS0 gs
-0 Tc 0 Tw 0 Ts 100 Tz 0 Tr /Fm0 Do
-Q
-
endstream
endobj
106 0 obj
<</I true/K false/S/Transparency/Type/Group>>
endobj
107 0 obj
<</BBox[49.2144 45.4716 109.766 15.2201]/Group 108 0 R/Length 120/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 100 0 R>>/ExtGState<</GS0 101 0 R>>/Font<</TT0 94 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form>>stream
-BT
-/CS0 cs 0 0 0 1  scn
-/GS0 gs
-/TT0 1 Tf
-0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 29.7595 0 0 27.9204 49.2144 22.2002 Tm
-(pdal)Tj
-ET
-
endstream
endobj
108 0 obj
<</I true/K false/S/Transparency/Type/Group>>
endobj
94 0 obj
<</BaseFont/XPLHSB+Bauhaus93/Encoding/WinAnsiEncoding/FirstChar 97/FontDescriptor 109 0 R/LastChar 112/Subtype/TrueType/Type/Font/Widths[588 0 0 579 0 0 0 0 0 0 0 290 0 0 0 579]>>
endobj
109 0 obj
<</Ascent 899/CapHeight 667/Descent -250/Flags 32/FontBBox[-113 -250 1276 899]/FontFamily(Bauhaus 93)/FontFile2 110 0 R/FontName/XPLHSB+Bauhaus93/FontStretch/Normal/FontWeight 400/ItalicAngle 0/StemV 180/Type/FontDescriptor/XHeight 487>>
endobj
110 0 obj
<</Filter/FlateDecode/Length 2194/Length1 3973>>stream
-H��W}PT�?���ee�]XQ� j1���ve#�O4~�m�F��
-�!Ә��*����MZɗI5F�A̠1�T�k�1
-�`�5�l:�L4��oߢ�Nәv:������s�9��w~������,/�px8ȝ�Nτ�uQX��T��
-@�Kj}r��m�ǰ�%��J�N��w#�T�yJ���T v��Q�
A{Ʉ��
-��N�g�%U%��]/����{=u�x�����z�eZ�u|�W�����u�,���)��^|��֓� ��Ʈ�)��sp���\�@QN��
-��ː
�M*�I�E���*��T�,�
%��	Um�~���Q҅��"�&sd�%zpL쐸�Æ�'ȉ֤�)#G��V���3l�����q�v��v=8!'����&O�:-o���gΚ=g�|�w
-
-�/��#�>���y`�W���^����Z^~u�k�����|�uϯ��m����JJ+�/߶tqϲ�k�5R}��"ߥ?^>��u�J�S�ޫ����%�]��g��{����|��������"�98}����O7�h]���M�a�O��z�7'�ǎ�v���#���	�����@!6�&
RG6ӣ���
�-r�
/[�9C
/�J�&�X�U��fk�5�oM��Y��e#�ߤ��r
�a���|R��:���(9V
&˪/�?�2�}EQ.(�*����W�(+��J��fDoG�������zw��ܛ�s��
����������������mw��35�y�8(�(�2X�P����%�,
-�+�
��d
YI�
-�L�ӡ��J8�p>�N� }H��kDJx����(Hw]p1
vs�y$�N^�N�v����fu�:�k�4�K5�@�]���tמ�v�K��k�Ѕ��]� 	�"1��6@�N
jM7�5��G���(s�3j?1�G�`�D�8-{�(99�a�4y.R

ue�m�,&Yal�3!_0+%�*F[�3�ִ�K�3$���$&�8����.�
<�#�z���/1���
�'�U��OGN�`M�ɈqPr'�ӑ�8�F-�]q�g\`~�MQ��Ψ��\=!q&ʱu
�e�G����X�0��H�pOp�f�ABƘ�KO�ں)V�N��S����ƻ
]���޻��]L�t�&Yb�4��5�}T��n䲚sG+G�
-��h(�`�=Q�L0���r����0���
�b�}
4�F*q�:g�z�'��o���"T _N���k ��Sڲ�M lFX �:Ҍ�9Ʋ�M:�*m$3p�u�F[`��h
��:8!���(��ViSW,Y���,4��������`��P��@�lX�i;8�
-~��J��w
l�݀�vж|�S�N�a�P�|\�*a�8�P7������?(�BoC39�}$h�G���
�&��R�G�y�]�O"<Lf�
�g2��J>�P��w���
"��n�r]�v
�_���@T)�
��|
��Өk�R�q<ʢ�vǰ�
�Lǧ)
̎�J��Ee7��������E���#������-0����\�
�؆�4��|�9e?�y8�
unD
d���݄�kA��w@
��3;'�3�����`
-$��8���7�,l�J�
��Ldz~(r0
��qHG��5�l\2ص<<�hA�R6�U
�
��I�RY����vȵ��} G �*�w��P�T�߁�^S�cn �����N�!m��
�q���U��I�%�*�}ȵ��F
��W�z�;��=P�T

V�w�Ws�%�%m�q� l��|���ӑÛA^�U�Y����q���2Wx�����w��6��l
-��f};�"�|� U
�>m��������X�>��HB�aT׉lߊ<��Y��
��p ��0o-\7��sXư�a��h�L��拔����
D7������@}'� 2y���"�1��
)�#w�z���M�������V�+"`&��
��R����t����v�[���όI�̣l�d�I���o-L�&<[?��"�&s�~T�y��j�2�����j�o���l�<��������'ۜN�\\/�~�ܙy=�+<˗9��T�ȇ�8�����<���I�V
�X�T�>l��o;JŨ���
`.���^&B*��ў=�����
kKT��d��굟J�8{�s���(%,Ax�I^=<
-��99��
 �-�

endstream
endobj
101 0 obj
<</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>>
endobj
100 0 obj
[/ICCBased 111 0 R]
endobj
111 0 obj
<</Filter/FlateDecode/Length 389757/N 4>>stream
-H���uT�K�tK���KJI,��t(݋�4�K���%ҹ�H�4J#�Ғ�(H
-w���q�y�y��~�3��̙g�<3�� �Y9El
- @� ]��!O��-@� � �\����+BVKK
��:�
OX�~�����WCa���iHKL ���0�q�Y���	`�5 �c����k��
- X�] �x=�
��
�8����	�X ��Ŀ׽�>�.�f���#aP�����
�n�		�D^{y8�����	
�d�p
H��	st��:Y����׬c xc
 I�V�?S��!�:��_����
�9[�YbQ�P�~�+rA
-S�h�����Hh���t^��

�'0�߅�™kY�X��Y9�Yq�q�p��l�'���W����z�E����E$�%
D>,��^|t*K)�%/�`���\�ҫ����:���&D
�
���[�7��dplDa5�|�mb���4�,�y�y��{�e��5�
������������3��
�⚅,t+w��h�l���
��
��A

��
�	�
m
k
-��xYU��
�H�&%��Ȥ
-�q��O'M�z�3�K�T�@v[NUnn^\�o�]�a�b�Tr��t�l��mE]e~U�+�j�א�Z�:�z��a�q�i�����5����};�C�S��������[�\_�ۆw�����C�a��Q�1������;>�L$Lz}4��:%8M7�l̎��Χ/�}�XT^�]�X>\�Ym[���n�!�ycsk��kƶ�ʷ;��v{���p����I�s���0���X������ݯ�3�s�󝋒�&�$��W�WW�*��)���!�$�$�%�!e$c��HNOAKIMEq��������
�����ƕ;KL�w�@��Y�X;ؚ��8^�+�Dsp����f���K�O��TC�P�p�J%���D=��+�+���O%$*������������8�I�Z�\�Z�^�U�K�_wL�������"d�x�����]�}����� �����>�9�=�;��s���_G�8/�̹N!G�z�[<�=��2�|B}����P�Q�z�l�H0Wc(E�e�n�|�P [...]
��kJХ�e����J�*�+��篍k�j5���U���[�ZU�
��h��0�|�e�m������6�]B�@�`�P�p�H�����������?QM1Msψ�*�iϛ.��Z
[JY�Z)X-]��R�޸Ѻپ���w�������?��@��?��5� ǖ'v�N��g��
��
-��W������3�g����L�C#u!��M�M�M�E�vAms˔F�V�N���A���̝GL�w�A�̬,��l�l�ؿs�ݛ�
���n��ͽ����+���!B�²"��<b��4$����݇kR�ғ��e�d���k*�J��Y*/TS
'<�S�V�҈ԌЊЎԉЍЋЏ0�4�2����?M4I~�f�����s-�,󡅰"+�u�M�m�]�}�C�c�S�Q�\�R�Z��s�v����
������G��i��H����3G�F�FaG�D�Ƭ��č��&�$V''g�$�F���LG��˰�4͂d����j�i�kh��C�f%V�Ne��Aq�YU�ڪG^/�
�Ճ���
��[�Z{�Vڱ:�;�`��=�c}��n�K
�
���Fv�(ރ��> 'R&k?���3�?�4+:�6o���
���T�\�ұڿ6���������V����ʝ�o���F?L����T;�:�>�::>�:�;��eq�vx^sa���wݥ��ʕ��'�_� E�F�O\D�K�LtAnF�F)F�|���
�ԭ6�\�`�@z?�m+F�;�L�wiA h�y���͖������)���M���g�w�~_
�@���ZH_XA,�"F)�%�/�*9���a�Z:�Q���,\�B^_AU񡒀2�
-�*����'[j
��o5[����uR1u��h`f�m$1�xJgBdr�l�t�l�y�y�E�e$�fe�g-g#`�dGbwj��0���TOC9;��� �ܨ��ݿx�z6z�x��8��I����P��=A���!.��a�Axۑ ��ϊ����}�b�G�-����ޒē����x�`�G�/����Ԝ��������q�_�O�?�0�"��������۬խЮ˯ǰı²����µŶȷ͸ӹۺ������ �0�@�R�f�zƏǦȾ�����
�*�G�cЀџҿ����'�L�sٛ������F�s�����M����6����+����1����M����Z�����:�{����� � � ��T�?�~ò��~i��~L}��~cbA�~�Da�d���
��~t�y�~W����~O��>~\���/~���|�~���`���C ��x
������}%��H}
�1�X}%�z��}K�
��}��
{N}׋<_�~7��A�~��-
ψ��|���|��Dz|+��E|[���s|���z}
��^�}w�O@�}��-�~ċ��	{G�u��{D�z�{]�Ĭ�{��f�{�Zx�|[��]�|ϕM?�}R��<}Ǝ���z��]�Yz��Hħz����|z�=��{L�Nw�{���\�|=��>�|��v|ېI�8z/�r�
z�;�bz'�s�Mzd�6��zɬqv�{D�[�{��0>
|;�
|���
y�����y��a�Iy��?y�a��zY��vzݮ�[{^��=c{Ф�I{R��*y�߄��yf���Uy`��Vy���y���uKz��Zi{
��<�{z�%�zȎ���~+�~� }��͇}W���0}3���}HtЄ�}�Zk��}�=���~���z��ɇ��� ���}�����!�~����Єd�*s}��Y���<9������w����p���S�w�u�����������u�VrU���W��؈|;,�뇔��{���R�s��Ѳ��������;����:�8����q)�P�CV���
:4�.��8�����Ȅ���2������񡂡?�U�����p
����V�u��9S���
�����c�
�b�փ
����R�����.�ՁN��n��	��U��38���8���A�/����ͬ�������δz��6�߆�ө�n1����T\�e��7݀t�XT�� [...]
-�\��l�G�N��ػ�ځ��N�ā�a�5�t��N��zl�ߴ�S<��H6���*���<�a|��k�z|C�V��|�Ǎ|����|Ik���|�Ru��}26��'~2����F�-����B���*���o������������j�����Q^���@5z�I�`����ٳ� �$ĝ�"����c�ߘ���&�U����ij���|PJ�ˇv4v�y���V���G����.�2�{�������
�����萾hS�掼O[���3��Œ
�(����J��ьx�&�$�Ԟs�҉h�
-~�2��gK�>�-N}�o��2ن
��
N�%��է�������� ���>�w���֣A}⇤�\fX����M��ݘ�2,����
��K��Ԑ�3�����g���°����[��}
-�0�e��6��M
�_��1��
�?

���1ӣ���Ǿ���I��^����I|B�̯d��ܪwL���e1$���:
������r�W������]�
��1���S{��z�|di����L
���g0��\��
U��������{[���G{!����{	�ޔ`{&y�E{xbi�e{�Jr��|�/c�5}~
-~���:����f�#���������M�Kx+�C��a|�u��I~����.y�W��	ώ���әߎ��
�%�¡唘����[��w!�^�T`����^H��*��-�����	5�G��Ȩ�瘎��=�Π����4���r��v����_�ҍRG��f��,ދ̋������|�,���ƕ����{�
�����Ҙ�t�ٕ�^��1��F�ő�,;�'��<�!���_���������Y�l�~�J���J��t�S�#]����'FA�4��+����;ۊL�P�f�&��ɔ��ޝ������ը�s@�夏]�0�E�����+:���ևSS	𧠨��jVPp,<XQ)�XVl�(Js�&�J!����K{�@B��E�.
�e���WqQ䆓���~3��7���F�HI^�\�������ӡ���+j&Y���b�dML��
�{#�����)F���A�;q��T0��_�
^��9Iݤ�xֺ�ƢYFh�9Յ�hX;J���l�����n+j�ġ�(�m,ּJ�����(Va�V/���aؑ�@�Q~.�8_]���7]�������
��g�|�F�)
-�/��MH�|����P��8�%�oFx��C��<��R�l�
A�^����Q�l�
�z�rJAU�U����d*�
���N�$i܏�
#�v
b7F�*4ނ���
-
���pv�i�x֖�����I��o�����J۱�#�
-��W��h�ԉ�l�"�kx
wVjG�Dz���*��ߜx�W���:Ʃd��P���$�����j�4W�M��[��,]�ʫ$���W��$I�&��N���}�7¨
s������1@�9�TɎ.�E��zN�Df��*uwr ����	�
*�#����,�h؅��"�8=���N�
�%�=(�p���Qu�9s�Lӓ(�&��w�ھ�?��ER
�AHi.R�~	Ԅ�6�����:�*tД3*���۱�x#�m?r~3��2�+�w����p���6�yX
a�TO�#��
-U�¼<�_)�
I�(��}��W2S�X U��w����
M��f�_T�)����?k��YYF��K8��u;J$��þ*1T� >,��#h�%T�,�Qۥ{[��s�:��9󅼓�&^!Փ�a��@�!��"
y �
-��.��Jl6m�Hj�u�,b�U6�+s��
�hܸd�-ʥ�}�wi� �-s�un=0�Ľ�i-_�*)U��_ˈ�
���b$
��na+;ϧT�
;p�pA7����C�4��.*�Iߥ�a�8��M��m�.���ACi���7�\j|fi������ԫ)��]ޭ�j����ʄ���U�]�3(í�
�wh�J��c�h-�4x7���h׿*
P
0�H됎L����랇ڡu��Â������,�{�Bz}��8�v�g�g
�Ҳ�d[�!XTZ�Z.��vl�A���g��
-{;S�
m�`v��ؿ`~�?g�a.�
-3�Ì�{����L�^�������W�����Y�e�4��]�L�<pq޴���������k���!��G�
�]�
l v���:DeH��Xq��E��K4kHoS|�X�ֽO�7����o���*�*�+ ����2���h�`���?���k6ݤg���,�M{ST3��`�b5��XE�#*�і}�
z�#C�//��
���7��}��V;�9�T��
)?�ވ���2[�ُ�]�n�$�~�
���f�Ќ,�d���p,��B�AdrH��]`u��P��V�k�aEV�vYN��U5/y�fD.�ݡ\ �1����Q�a#K��E�:�|��N[k�=�&[],����1$��ξ�B���0Y�(�ߊq
$���]�!{Ik5�U�3�j�=Or���)�<V��
A
8H��:YjD!��L_��|O����l�xE{EY[��9��#Ev�x���2�E��as=�[R���Q��i��*��i����66�`�����ώ,��+�#�,i��1����A2��� @������ƪ�W���m���H�XJ�NP�+�)�̧�+��=l��$�zU�kb��]�i��[:��<�旰��A��r)<�� ���+e.��
-�%���ӂ�B�s�W�����ď[��~�}F.+}W����t�=�� 
-��K�e&��,�^��-��v�a�(0����

�t�tz�S���w�0D��6j��tl��.\�lVդ����)��-
g�	[ѭ�'��x�|�|D�D�ߵ�����v��wi���8�ư=�݋�bY��
-���TC7j�KI���X�7 о� s�{��W|}��&饷MR����Q��rs�%5
ԯ1�G��
�*=��V�DM� �鶢l���`JY����Ke���\
+��kl�=��ּ sr͌�
-����_L� �\�E܋ʮܤH)�B���"�nĕ)J�ۙ��3g��Y�i&M{&MʹI��B+!%��,O���=Y>7o����k����!w����I�~� Ir�a^
=�C�#Z��h��`W�u}p����)��"�z�7ff&�3����$��
�F�����J8Ҷ5���m�
-
u��R�_,^V��S&�aR�~Pf��LL_Dw��*��`\�-�9]q�����
�
�
�����T�I�6)�>u6	D�`e͢/���xq�Y%�9��ʜ�;�åO
��
d\˾�P�&eR�z��;�]����.�R�<o��Ρ�]�P{?�:�
r̨\���ʻb	�Ҥ�3|����m �s�؟���W�9����oZt]Rn��
Å\�c�W�#+�n�I&�g����y��Ajs�N�06�HiD����'@����J+
��a5V~�cR�I��̫�vwtU��c[3+?F|l(��i��U�����^+O�?R��s����� 1�Hqil��$Wþh����=���(�RE
-��1�B��vџ��n��F/��
Bs�G�����M�Y����9>�ܖ3��ȗqI��
ڣ��5����V��_�1ȣ�β��i��JiX�0�WV���H[8g�� _�/���
-n3�
`�	���38A.|�f|ј0I��6�b�v�%�&� ;Y��㿜�҄# �d��D.)��.p�'��3�J�12K[D�uɥ$s8�I<�R�i�m�J��8�}��f�� ���DJ�ƀ຃ws�!�ʫ���r��RX��
-\y^�*�̏Ld'�雲9?)

"�q��^��5�/<4��i
-��Q<����
-��;/��Ա�JB"���7��t͚��,m��Xdھ^�;촞��&s�`�Y�"������Y
�����{>Ɗ�.���z^48��e!��R�6}��vc����Mi�oz���o�0�'�=�~���i,3�:?-���?oS,���9���w������#��R�Oa����������
;�	?�
�����p��B����
-�֞I����O�
ݟ�e#}ԯ�N$�\
�l?�
]�,��
��y,��>&Р����q]�yh�0Aq��K)ĝB�F��ҍcH:��-h-�ǟc���f)�K9T��127]����q��EjL���<>h��;�|�U
-��������d�p�G
-ƫ�`�&!���8a
��l���`83>�.��q��ɂ�n������A�9
-;�
���`��H��B�y�g���
KB���*k�㰗2fF�=#��OM�
� �eT?
-m��Tm��
�_����OBۊV ��<ɆF('�n3u�G~�Ȯ#�7Њ�9��[��١`N�s�.�P..콤
'Knp��F�
�\�?
�B>���-����`����N��W�O�OW�B���l�f��x��W�^�<x==���Z/~�4/�.*g™�Pʲ�<*V-}&���ٟ�w�z��Wq=g?:��;[���-�(�Z6*<�Ȉ��`p?���2���eQ�yў>�b���-_�

x&*/��(�j����_�=߆󑊢�zF���`�Ld��E:���SN��ʔ@S� 0���3�|T�O�Ko�k��t��o}bF���z$4���-���,�.m��'j*J���|)J
�6�B������P
^�3ewܫpX���.��*��,0��7xP�ڳ�:2�X�
OT�21|"7��=<J}|�wl\��}vGic��Q����S�]�<�C�jȹ*	@8�-f�������݂={ñ(
����]�x�Ѩ�n���?�ϑ]�q�O��ˏ�ExyU���c�0��t�M�]��u3���
j �o)(Co��~2�s�Ѓl�����x��֙
��
�{��L�7z<��"�!s���[��H��a����*�{���1��l��1��,V��&I*[�v�$�#1/�� 5�Z���p(3��]�8��i2|(�2�
| z�D ��5 N�s֬����viV�`D�0Û���]���R)L�!'n��"� <v~�x��)�~�if��
-wnK�ܑQV�B�"�����Խp�� *�+ت�ED���*� �����(���o	B�'{p���wH؆ʴ*JѪmA-n��WjGE���ޯ�y~�~?r�I^
WO
��@�����l)��ƶ�W��giX��
�"�C�#�k��nA���
�˻�r���)b�!�U�ڲI���b=��>�0�ߴ���y}ĸB)H�[�����Fs�
��V�+���̯+Y(I���(����x&��9JAI���'tXm�y�G�=�X[8�TK�)�2��
<�
TSR�v�x��lȓGO�|�g�/�{�>���
4��/�g�R��F�ȶ��&�A�5���2�
uЯ*B<�i�� �0�g�r+O��A��,0���-�b�u�g[�\~�-����4:I>幃A��uF�Ǟѧ��u�D���)B�,�
*�?n�`
	'qQIz���K֗�4�{��
B_g�6�8�#�ʉ2.A�$69�!�̒�ub1&D�3Q�x��"�
>ɏn��νx�VG�&��Tۨ����Ó)�sx�d-5��Kx [...]
��P��mBU#g���B�g˷�)��-*�E
-ar���>�>Ƶrn�[ɭ�F �-I���ByѸP�=��ĶK�UC
w��G
�D��}�����"��vN��.p�]�]Q��8u�Y��{�#q��C��v}sa���x_o��y�iN�r�����(�
d8a�w�2C�Q�}V�8�UWO\�g����
��\�����yk�@��d���c��Z�t���9$��u
-p��-���1
���z(�=�f)
-�v��
�ě9����2�
 w	u��煼��ת��#����{P6�+D��q3HIi����%��B�C��
b�!���kc5�&U	):X�$܎���[��b�2�
*@�PkcӘ�d�oT�B_L1Uwi"�)��=�2#���pI9,�R�O>�T@>�;�bn�����D
��PuC����
fk���^�^��\��G~�
 ��o�L�Rc�Hqܮ=-8^5Oń�y*9��:-\�g8:T<��?*����C;��[���y�X���+����I�;��lRL߭�$D��vY�TQ6�Dy��Vm��fy%/sIs��mXP1�Lռȭ����vow)�QB�b����_ L�V�wu�p����eė���O*��|�+�]�(uH�װ4�W�U��.�{ �4�\�m.Q��w
�����R~MAi���Rz+%�B����K��z�?'�{ �� ��
k�҉
�a��a�{���H]��sX}d����a~�3��_�au���Qz�	
�������VM\ĵv5I0�L�M�)�DŽ�p���1��:5�
��,�&����4��
%���!$
}o���c��ޤ�A�]R^x���T◬M&/B�:D�wA��2�4�����?�c�d&g]5�b���4���a?������i�ǐ��  ��Ĉ��.OA
6�vfv�
s�d��(5yT��H���/P��=�(�a��;zUs�
�b�W��x�Da�)E�ʼ�	$�sg�PJ�r�e�Y�3 �w��`�c��F�o�0|U[j5k��.�5�J��&�����e�T��o�r	��È´��}I	l�p�jC���8c���5�J=g�%U��o�|L5��8E"
-ِ��
�[A
k]�����J��͆�VB�M�"{�N�r�����Q���ih Ц@�Y?��6��^߫ZWٯ�]ذ���c؋h�KSLj:>�O
ɲ���.���ݰ��Q�{5mm<ٷ?^�v"��}�ъw��9��O��&�v��X�7�km[	�,70nΒ7|��e��P��\I;<��u�^`u�!��$P����B
-ET9��ٲF��W��c����m$��="G
-}K�e��6�~֔G_���M�DԿ�s`� g�]
�v�p-9�\N�d{:�:�gv�H�_3fC;}�Ɠ
 P�� �N���p�H�
��d�U9u�;���9$8w��
���3�r�#�A�F�iD1�n�����
-}��t�e�  ���D��H�!5$�
�,I�Q:�ȖR���1�3��<�7��
�j�1�[�ЊT��m���WwzU�x��|����վ+ք{������W��>��p���:ʤ�JRqY���^���`ǯ�<�~�j��!m�r.�B�+��'���OyY+��fN*żt
�W�$��W\�2��� �M_�c[�g������jj�%WuU{{�,_��p�W��n%}P�I^�W�|nˆ;c!�p���u�cʨ�N!k#���)k��sd��5n�Ž�6Q{H10���U�
-�
�
�-�"{⠇TZG �R�,��ɇjࣶZw8j	ICF���:�b
[	
�\+�?�
-���oA
n'a
-
-��O�j0���`�%��|�^�/si�_�Xǣ�Lqi�w]�I�έ�D"J���!y�!�Զ�n��0�R�	z�WC��c�c�h���ūK�_R
[��*)!
OSo��u���Oշ�܌W���ze�W�C���a�����ϝ�L���/�QB�o�_��k�/cg���&MV?��֫5z�� !g����"?w��P͚�I�Q"����P�AdtE)q4��j���G�s���n�{"�
���}e��UM�rk��zvi89C}���
X�LB1W�".ꕝ^M
�����t?WK�L�w�DP]t�U
�揊1r�J���ոK��V����GM;ph�շm� �v>��-wg����FN�
��cI�P�#q��W�����I
��;�N�ٶ��A�)���H~�7i� t�hl�~��~dz�Y�
C����x�2>*c&�m�b����{9f�1X*�L��	�#>�
��
-
V@���g蒼]7n249=M����K%
�;��,����F�\j�
�1��kl�Z�i���؊�����ΐ�.|Q��9��а�$_.!
��;�̿�l���E�,����ɥDi�������}D��
3^�a
`Y5�
g{J=m��ɳ���y�3���C�M'�jM�-i�Ц�m��
�n5?	�SJ�E+U~ �;����q.t�Xd���~���~p*Q�eS��%�.��Ћ�"ư��Bs���Z�6-�����6[\d;�^z4�`;64藸����ͱw���
;����|�+&�A�f�LU�3���X�T��m���)l�F�'l
�V��ɺ�gcG�Ob�bɜ9�;v
\�C��L,�
>B?�KGC��e"�z
-@��E�����H���</�s�=/�ᑍY���{��P��w\L�1A
�|U{�_� ���"҉w�+Gm�
�$�#�n��o���x��N����+���}M�9�MbΥ�_ at Tܲ�'1 �,�q��$;��!�헁h1kb���
�����Bo
-�\��w�J����
���uY/|ϕd<w��Τc�~ώ�����
x�¡�#d��g3�����~����g�‡� xT2��ȵ��6s3�i75��ƻ�Z�E\1�\�ɺ�W�A' ײ
�� M	}?;ʂ�8|R�0S�#❣� ��CۿU��b0���L7ֽ`���hcEk�T\�m
�+	6�&�=����B�9)� �곌����
\�@�^
jk��a�ƚ��Ph�<��=T��6�K^MK�͋=�݊�$�Q����-�U�&�>ILp<�5������'��҉�����$>��8#�g�L�2�m�	��
c�����1
��c�
��F�w)�P��+�r�kC
q�p/��u8#�!�*
g��
°�Pa�`v�u��@��o�H�`"Ž��:�z���
_��Q<,D�>'Ӆ��WP��� .����`�x�W��3�|!6��	�
-�5���
El�["�,0�	e���[Oz��0~l�U�O��+����&x��kP��c|u��$k�.�?�{Qp""k������r�6��isV�a���=~�@�W�_�
-.<�7�
-��2�#h?c~�m'r��E�_�xs��6����a��������G�+���K
1��4���L^kUp�^^��_�� m�S^d�Ш���'����>���}��5�����$:τ!
E��[�b�Jx&�n� t�(��m�;Z��s�F5u�q �X�.�Ղ�BqKP��� *�����l���%{�ٓ{�'��f';�,TT,�b���h
�Uq�2Z
���3���;�}�����T9�vw��R�R;G
D�
-
K�*��/@hUv������$�j�!
�@�
�vyבm���,W�|-͢	�^�
�~�D�_��􆭍�"��ĉ����#c�禘�*�X/��Ϝ�e>�|�XH��;�:��)���d9gƖ�4�aB��
��Q4 
�E� �w�,C
-ۯB�U�#�>�SV�$L�-��5g�V	ϯ*�B����#��}�
np�þ�td�����U�$D�b&$^�\^�&Z"/˺+�-}��%�Z�
��:}��9���A��Yu��	��rT�lP0�"���~!	�͚*@5K�?�߫Z�-�P������=
j�>��܈�[��O?)�a5�
-�����?��W���Us����y�5^(ge�${C����m>�	"���G�գ+�$�踿��ϫ&��
Xw������
��8?��g��,'ō�=�"����/x����N����M)���'��������EF��q�rf�
CįQ9ZY�$r!���6m<YZС.�<��V^�z{U�S=
�P
-k�X%3�x��fj��n%^�����
i𴵻���s���3�0���q�h�$��`kܯ�
D& ��!�M����1��W�}훌1r����=2N��Sd�k�b�
�\��ŀ�p���d�W}^�'�S^}�+P�0iC�
�1�R� 0hDz[P�� �&!��v@�B��]P]V< �SܒG�L�O�
NgK]+&
��-A
-�2���#�sL4�j��&�D���i�b&,�A��MS���U�D��9���y�
-v���98�����j�c7MI�~�(�sL#�}�3���(M�^ N�i�E�K�E8�mi�	u�zI�$N�r|}*��+�'�4��w���{�y%��F $��8
��@�N�z��^G.g����-1Vfk�)��G�����]�u�6K"���K���1�p���P��8����r���>�)�4�
��V�9�k�J�$#��
Fь�X��٥�C��p�[��ģ)C���S�;rFP#�I�m�K�G<��h/��U�-,C
��O�
kOK�YY�;�MH-�t��%�^N��ξ�B���7"
-���O�aj��X�_84�V(N��-{D)��F�0�$�!�o�J��d�v/_�
�(�ǀ��U�H8�B �c�1����f�b5u��&�*�ҽ�n�2s���G4
0:�\=Y2�߯	�$bi�8亵M�$ҙ:ut�N�)��Eh��Dh��d�j�21|�*T��V�˰���T�5ȮM7-�^��S���84Te��hRҨj�[�U�G��U���1���K{�Nh6v�g֨�+��G?���`
lݔ$Rq-�.ަ2��S�e�8
pSՖ�k!�X��C�\�z0�0	nlh��j�<~I�����,K���r�L�)�IM����9M
�_���c+"vҜݤ�L���$>ɺ��z���j>>��X�9,�ZL-j��Ib�k��ȉ8�˚?v�t�����x������P�IO}�_ay@
��:����|Ve�6�����ubd/e�3<֭�z�t��e�a��'�c�LaM
-�lz&,f^�_!��?�l����2x2�X�y
���ń�3D���
�)�\ ?�y�e�
~��4��O�+ 9$�
�
-���E�V�D<�O0�Vbj&��mLB�2Z܈�b9��U��;n���6L0	�+��oˇCr�E.~�>T�
Sؓ�7X����?MM�!���Լu�O��t����P
Cbt;���i����ް��a��@gW��#�@��4c�9.D���o�
z2>M�5��i�~�u0�
�q�s
�wQ�9�ǸLt��삟�Mz)>���kɝ���I�;���io�"���U )��]$Y���L
>$����$T����:gUo$���UK���,�C�`sCMAJMÄ��K��C(��g]���ٮ9�s�U�G�0?����L�5���
�QM%��0O�l��5&���`�Ƒ
1,��x�'���{��k+�mY�}����-J�s#\��d���:�i/�N�K�����  \8�H�����stQ#��-�ND�)�.s*�Z���y�m�n�f����\�1l����{��(E�=�VGW��9��s�:��?���w���ǟ�Q�Z�sC��6��A�1���ƃ��6K�@�8��O�UY�^��`���7��������j6�@�9?,y����
t4&�}"�T��-
-�\Y&k���V��x�녣3��9��1ٵqQ�=�b�eMq\���
�����`/nņ|���2��͌Jkz�D�mͫ�IR4�\~5Nl��օ���KɁZ]T�C�3�l�̅��D�3jSS�)�t��Ww$IX�[�w�V��
-WT���U�w^P�eU����h�WE�^ؓ~W�c�h���s
�s��I��g�����`��w��g�s
(�5��� ��mr��
���]
��
�B`7Jf�A�

���aA�3Ɠ��G�����?{�O[
�?�x�j�/����Z�*7�e�x��X�z�
Ά��})��C���?`��K�c�M����Ռ��&)����Y�5����J]q':]$�؞�]Yv
x�(�����ı��H1��e�U����>�_0�b�?*񸨎�b����
¤،���
���D���;W�xm]|N�7U��13*�;��.�=��>���S�Üj
)��CM��>��.��e�I����1���/�Q�v����6T�
kk
+�Ɯn\\�F�F��V#���Xd���
e�&~�WE��7�"�bj��
��u��^I@�j@�bQ�
W��k��8���w��_�D
��^��z����
x�Z�KA
�_`�T}�]
-x�}�Ё�M0S�,r����V+	K��O&�ƈ�`�;�E{irf0 F�]�� w86f�

����fm_8���c3����V�<)�r1��p���� +h��s|p�
� !Q��P'�Ղ
��ʛ����2�r�Ӥe��j4Y�
r���,
�r�?4�
! U��q�]f�(��*&umM+
�;�1�
--���c�8�C���j�L=L��1�TDJ���7���>����)BH�*�c�HY}~�xI,{��7��W����jW�ާ�ʇ��h�g�_���Yov�MKi��N>���
Q��R���ǧ}��A��Q�j^��G
�s��yJG"�?txt,L��>�֍p��_��>�Po$��^<�%}���K�D��S4�
-�*S�<ܖ�y�d;���éIJ��~J�M�n>��ȸcI6��u���ɖژ��䩊i77�_�5W�2'	9�
�t�^}/��8%wd�� �0k��)��ͦ�F9
����k����ih��3�Sh�
�PB�U�Lz��s���'0�$Y�/L3����o�����
l���|��f
�ɪ\AW#�si��S�-�O^�I��+�3��6���xas�� ���@M��
-�A
h��m�4�5 V�-��'
ѵ�1��� S+
��
~*�
�%~k� ��˝��ʉl
�*�
-�lك�=�3���_2~���OgP��s
-�C�����c���d���[�a�ے{<Х��j�A	{! ߲ۓ
���;O'��9+wEH�E�����&�J��V�?f�iӺ j0�5
瀶bhW�Zx�o=��ƺ
0���z���hK5�m���o��v
(Y�Ou���t�;���e=��R�*
��yMV�n�,�$v:��Q�ڳE��.�y�Vl�;��svn��,��Wi.[�����@�����34S��D_!���M���F�>J柣ND ��@$�Y�~�-����C�Mu
(+lBpБ��^��#$�~�2è
/@̣�6 3�n�h�
-�;������۪.��������3F��q3��\َv�Zn�Z"/��vNF����N�J2V{�#ΚV�s����e_쑮�T��a�8C¢�!Η��>F��L��\�
�M{���5��eH~7;F��	�	�A���������B?���V���Y�=۩��Q i9�J.sӿc%��FVb�dեiL��`�a)kD���=W����
���
��� \n����e�>�N�X7Ƒ†2I��Y
f-�to7���/�~��U��as[��`W��*
v3_�`~����:k��� 
�j�R("�E
-*���
-��e)DDI��ss��,�f_n6�"���:hm�h+�]Aqñ��Qq��S�a����9�{~8�|�~b�h6�G���ZĠםN\�h��+��(E3�0�~������k�
T�MG����1�:zk�a'L��G�����2�>����, gt
���X&�@�?e%�
-�����=@��Ih�s��
��)H
��U�OeX^m��7R7�~�,���,�
�\j�����J�Ԍf�ͬ����
�8!*�]�JR:��W�R�]�M�ɚ�
�P��Z��;��J�N�.8ɦ������,�[�r*�Α�]M��M"wa�X)Lbjd�`�>:�?����|:?u��>^��G���$��fa��.�
-
ʥ_�S��%�ED�8�
�J��=�ĕK���{����
�6r
z�G��G�� ���
��U�i�<����K�g
��"���^ �q�
-����I6����vP����W�y^,��u�c/ 5��@�:ǹ+
[��N��+�l�i�{��P�#^�
�y����v�,ñ������-��N���ѳH�⺣<֡g�x���V�<
/���
nb�
��6���󴳜�Ρ
 �+nhB˾�P��oT(�W��#�#ĉTw�ZU
}
� w-��v��T����-9O᭺HI�z)����� �z�9��R'�d�I5��a��Z��GS˟�ag��W=��.�P1ٜ y?����2��
��X�)r�4VaG������X����Be�`9�Q1��͚@8�5��
���������$���W?�D�}��z��2�*�
-���
��p�t�
+����;Br\ܕ�'>
���-��v�
�C�Neʔ�����L-ʌ�q��K�H���r
�7�I�
d<�����B
�gNelB^փRγF2��A�qCR�&�t���7߄��{"
D9����u)��C��w���1��t�}?"���'�[�7o�̩�~�1�{�>R�u*�
��ʖd�C��l���u�tqf�2[�l�~{S4�>�J$����.nQ�nl�P�#� x��])By`r+��w����LH?����VD:�|��iU�G��~ժ�+��&+R��b� gP��>��}�����W�Թ�k�Qǖ]WSk
q�w���Z
-�D�Q���d����V���d�24����K�G�M�v���U
35��K�J~�4 & j��w�J�����*��y�;��X�߉˔��O���@��5�hw)�񘴕�o�-9E:��_�
�̂�o����&�6#�V��(ѽS�-te$
�פp}�4�%�4m�rn�z����he4�KX*��KÃ����2�9�ʩ�~���'Ǥ�l|O5ÍB�
-�;�^��j�㛑Q�`�exH��;�J�\*�`l���˴K�h��k
-&����t���F|(��8Vǡ�ܷ�
R���:ϳ��o�G*UjSKk��nR�
��gl�
��ޅ-�
6���&��Nŗ������7O
�4��rGm��O[du_T��vY�{�
̏Iy�\�aR�Ky��&�P�7ݪJ)�l���"�W�5�{K�� ���S_����j 0WSW;�w�ix��F1�^l�О伴^�'�
1���b�%�OA�����X�hq)L�7��j�}=�9PX��=��n��`��ɗKX#Cù�A
*7{� �j��WܴT�By�����ufכ���d=�A��f��]����F���=�_u*`�q������+�_i݋\�^`BaE�|�S&����%
Z�
�a�8����+Q��g�Q�[�IK��-�j��IKr2T�cju�=A
�ʧ�Q�"7��{ٮ���ם*�X|,Y����
z
����ѽ�����}�ƈf:�jCo[>�]��x^���h����lhNr�ϳEDk��c�C���Ǫ
ת9��c	���H
�t<)��}�z��!�hE~DBӳ�2�S͆��i{;�o��u��I��p�??砃4�6ٺ��^"������1�R������<�-��65s��j�p�C�����Sjqi6dzھİ�紈��
4�1�.��$�5E�
G�9���:�
�=��o���b��쾄
v#��[��x�ﯦ �AF�+T�����
���(C at RQF��7�7�2��I$��^a$�Eq��>
�.�AE��b����
i����O0�����]Т�K5ΫPÛ�G���
���
����Z�d��J���*�$d����
^�}E�*֤�>?��������Ƅ��������$d��O���	�_t�l�%��$^7��[�K��S��ECq�z�"$
]�*���B]��}��W�
zT[Rk�"�����n�]�E��U�Y
v��FU�W\�B��6�-RB�^M��e�2B�4�<ZR�V��jV�y�~��O��
-W>��/w�ͺ�h�4E��k�5˖�<1�U���[�t���D��>�Q!�.kR��涧�7�u� J��c�>�c��
-l���/��i^��3;i�����ڐ�
0��s������Z�n�S�
-���q�W7�N��p:�([���5�6�8���V�
i�AFޜ�~h�9�P�ldüj�2�dO
-�+����6��1�--��1E���wv��	�=JCH��W�3��4܏&�x��8,���&�����#Rc�3D�vz�6��RS��yu�_N/nm�ك��vT����֥Y˼?��RFװKz�n��9����Q��4�g�C�^�5l`�P
\ܲ����G�&���ޫ`��
��9�P����ҞٲX���r�6���
-V4,��{�a�؄���\tcY`]l�ǿԾ�a���r�鴯؏=b��!��&����Y�b

�^[\�aYt�$w	
-���[��R�)���i��[�{$��7f"��o
���X��p
-��z�Bz����'h�
O|Ō4ǐ�|-�j��
-:���}̴a� %Tv��5��Y9QK� �d0
?�$��ćH|�#�u�D�3�
p��h���r�d�@,@Xm��VK
Y��@o��u��([���8#!OM~�.�7SoJn%<��I��dZ��=�1�D3�!P#4����(|:]SYd���_��kG�����Rh�+Ot�B���%�/e�䱖�&]�h��r5�sl�or��Q����
"F�,bՓ�*2~��:ʼ��i��[�������t��˦����~M
-�U�6�DU�e�"udPO:���]�x+����G��B���]��q:�ʥ�'�:�-ML3\�F$�7�K�3�
 C��*s�2��z�F�s�'����
�
�̼K���s�����Ӛ��w�ER��	�!`%aT��H��v�R�W��SP�ƅT���}FVArB�[��SS &��}p
�`�	�~����_���1{�,y��o�����
���{�30��[�b�
K���:w�3��Mn����e6�s
z/0<x� &�3�nj���@���_d
�K�Bٓ�! t�r��!�6<�
�rƕ�KjT�;ҽ�����.�Z������.,��68�MUl��{D
6v�
���@)tmp�y�_.>OG�"
-Ü3N��|��
�/�'��O��-R_�1Vh&׺
N�Pz8de���
勊ZTH;X����Q�6�}��+���'h��_� |ȋ��Cc�����u��H��j�BA�,�N�OS���{�3���	L��� `]���1��> A���
�� rxӴ�*E^�.��ؐ`����Q5
�v{`=W6뼟�\9a����vGO��Xc&
v��1���w�~��� �0�W�:ʎ~��f��:
0�/˵��%�m
�KRK�A�������c�R�%�	�P�#CS��ߥ�f�mD�5�oEx��1�7B����0����<&������Yd�8"1�
�wܡ5�� TaaJ3p��5��
��7�A>��+��y��I��
M���c�u��
Zd?�B��
k1���x-���r�sV��9s
�H6p]D�G�g�O|
y��5�S�$a�E�`$�Ls
-[��Ym�
�~u�8��p`6*I
ߕ�`S8���8s�n��9O3nX�OE
/7
f�^�l�bN�[�PB�F�O��.�9����Z��_
.�5�>�F	��
�S��̉�R�'}ΪѬ`_d�X�|�{�d��HXԾ3�QlZe7P�R��q�ش�O5����OkZ��r�x5u`a ǂ:��*`�T�)��,�
-DPQʮ���dߓ�����J�����Rk=H+
-*�#u)���h��) ��)B�6��s�9߹瞏��H�ZG�z�G���T�"9��3h�D�ͺ
��s��r|��b�4��y	�$��TK	���"�$��I��~
�$�v(�B��#].��qi

��?�C��N
�����~�ޱ�|��ܷ�LcO�n���T~������vxj��̦5<.��f\K<��2p�:Cp���S�y,
66��>|z�C
-���� E
-T )��f/��:X1�}J+��>���_���~ ���Q;�^��ㆪvs&�۸>�.�k�7��yZ��S��:�˩㜍�r�
ݖۜ���aKa���!l��.g5���7�Kv�0��!;ڗ�f����e�
��%�]"X�T�
�J3�aժ�lwV�j=v�姠�α���e=b�I/��g�H&���
�:����g,(y	27�>a�b�a�8���8f��VV
�q��ɌT���0��N���������ɉB�����`(
�_"f��o!�
�t}Wg��_0}H���X
�9�,�Q���x���=�~Jٹ�x�>����ӱe�9�M���2mF��S��)�Vk����-eZF�F٥bt�g0��O?�D�ǐ%7ey��ښ6��W��S
��C��y�e��US}�
�l�`a�8i	��g"1лJ�"�|P�Kڝ�c�,��$����+�&���P����vꖴGBoj_t4I
�vq�f熚(�e��C��!��b�׼�^�S��b�Yi1���¨;2��W�`/7u�h?4
-�
���!��z��@#(���T
���6��
^��!�R	S��#�>E/�S�q9�z_ 
/G%ӈ0C�9�[ۼ�@�(٩��P��
�,�}��X�T�Ok��p��QȫU�G6
��
�x�2�e,��> ���
-?�ϭ��QެYz�/�T���5�FL��^`�tީ��3�\#�������̬D�:�
,�v��� w[mDW�����)��TB��Z���`0Ֆ`3t�BQ˟kk��s4�1y�	�`�\�޸�c�V�#��z`X�Hhw�A��0�چFTy��qӵܫ*F˪�%��*����/>�9

-�g
S'�"b'zL=N�)c��s�*����b�R�����)W<�#�S	��癛)K����
��
-&���L�\��9W�t�W!Y1�������7i*�%�����wJ_����
��閥�n�WJ�!p�����-0�T`�:K6B�+��S��z�l��L,~��J#ZL�HBEe�߈E�q1
-ڸ��TD}�bB;��*O�TC�nՍl�$OY��Q��0m��z7�o��9NŻ�|h��DV�[V��e�֩b7���Y��ZÖ�H��l�����~I�)ܻ�J�5�����oO��ݑ���%(��,�h�Z��G��ҼmR�d���!��/NEWutV57z;�j���j��s���^�^lD�Ǿ0-a���_a��L�؁��w���44簍b^
��ppi������&n�X�	����uƻ-�݂
�-c�Y4��_�����
��g	?
�j�G�I�fH���
�%��J҂[��%ϩ�C6Oz vW�z��oZ�t�A����$�?z���;�
�ؼ���FT2�/+��0���@��@S<@>0b��S�uq�w;j4S�'�/4s����E�թ(P[����V�^�5ƊH��k�g/�ۄ�w����
0��*��֭ �a�j�yB��5�TC�
�J(�_��F�4����!�m�,
R��N�
�?S����9��
:״��O��f��O�V��"յڇ1���,V)S��@�._
-���#��Q�`�K���|ͨ%c�j��/&\��:
[��F�t�^Z "��q�٤Jm�뙊jMarח�`VCg
-��w"�~><��
�8�i����}�X�T8�dzQ��V
Y<��<�J=��E�ۏ7
G8v6��Z:�%���hBò�94^�ԥm!
1���OD>�p%�H���G�����/�Û`rq�;��N�m�~M���s�\��/���Z�h�:�(���MX�а^F�.꜋�.�Y����s}5�`a ����(�(X0�T�+JS��
�4�&��~��|iB!!
!)$�)ʰ��
��WF�Y]E��븎3x,��˽�}���| 
d��c�
-��|�i-��0�Ws��
-Q_G�pRj�y�0���׿�t����j��T̎�ԍ�
D1��څ�ڍ›N�:ka?
���7�e���k��_�%]a;�ז���F�=�9��-b=
&��Mm0-�vD�'^�j��+��/5(er�^�+E��L
F1�$�1K���WE|f��O��FMK�����m��:�:1`�ڥf��X�ЩM�*i�9��
-l?+Lw?-Nx��͈��wɳ\C0���瑃f	�s��
��M;iđ`��$����O���0z��*Rٹ�B9�@�"�k��5�����
v��~�.l�B?�u g�]�ed����
�8J�A�j���͹um�.��D�O��^^��v:�y;��ske��+,L�¶v� ��ŝ���Ҽ��خ�����d��_��5�Z����;
q�#�k>���� �MU\��J����{l*͟��ґ�3Do����y����"UDc�����u��#H�)BP��it��/	v�`�_�Sʝ�{�e�5mp�Ppy�=�-2��[���m�+v��6
*.�Wۿ��Sǔ��]
�
-^DMk��,2�.#��ɲ�\���!{�
^��I4�Ԉ��.~�ç�lDc�BU\b�"c
�j��v�����J�G�|�H`_��2�r����
���H��ѥ
�
��t��HH���BaG�	:����B�f��{�'�9
-[�j��a��e

-&h��z6F�d�y?�>g�ۑx&�l$����^���:����^���n����x-'-����]�O 5�������@S
� U��ڏy]�Tu 
�_,z�
�WPT�|BJ,ɕ}`8�ߴy?p�7gˢu��\JO(_��vOUue4���+Q����bi�?A.j����Cxy���R���J�駥�P��t㸲r��T��fd�d$ֺ�FR>P�a�L���'��
�v�����2M���*��׵�T�]`W��*�cD�*��h�A�e#�"�ɆKO9�J���KL��2��J����(
KgK3jԉf��Z��nL��5��o��M(�_���>�FO����ӹGi}<���@w��#Nd����h
oo4�Y�
̾�Fٸ2�����Y�A��z$�W��֜5��Copl�i�
�\�
���3�2�l�;��a�<;�S�? B�>�<A��a�rL>�z��p
r�j��s�m��1t�Z�c̥�
�{�s�/���J{��c�*�#�3��ހf� [...]
-�oe�*��
-�p���}����%��
-K�"G�*�
yE�%��S\�#���V�9�
�ۦ2�4=���ZH
�
W}d��UU��$�U���>*;�$;�d
'=�NY��
,|ܶ
3�4�����q�T�=�ka%���h�s��䬺��U�X7Fl��[��
o��1a�puxf�9��Q�Gk4�;e
-˸�7荇�5��xB:�y����Zd�ͫ,�`2��?_�a[0�~9iY
Fs�3���g��	�Ë9u����<,yx�87��� �1�����Ja���,O�@/g���O�㔛�
9�4 �|.]�1�6��'�^� �@1'��p:Xt������wL,j��V���Qv@�wl{έ��̱���\�?R^�UV�\�GI�+�����9�����D�0���3o��y�d�[R<� "�"��"
-.��2�}��"!<�4t�H~(��-r��2��5D�H@��l��"K�����濣,��/S}�������"+���~w�������F}V
dR�z�,��:�w&?��C~Fq��J}Jݢ���J��i���rjzE�gU�#��p]ZF��
�%��+���[�Pj e�w�Vjl���W�7��wR��/*��C%�%�j��G�x�
@EFH)&0_����Օ�|Xu�
-D���RNX
A�\0JS���H���30��7�͛7�3
C�Wc+��U#�r#
aQOL4E�љ?�s~�{���s�I���y�?�y>�ҒL��ָKd-ޣJ1�v �*fH
�6��h�����z�+~B�O�:I��Qq�Z��UՍ�
P�[�U��D#�BM�	��>$�	�z|��?��^�������!J0��W8�N�	��W�zX��f���щ@'h�
�<�
-%sd�R۔e�[�$z�,��Z�2�H5����[&Ht	L���
��U�O�
췯�<�u��ɎrE�ᾀ{i�,8+ןwM2��O��\��7I8
��i�l�2�ewkv"9k�r6±��U\�R��*�q��o�GCxxy���;�:j��Y�E)
a���ΰ!Xid�j��
q(���8�S��=���l�(�P��9Iue�&��k)���W1����=k��Z�b;8�zB�C�����4��ڕa�v��?�su��UuP���\Vf�>+�5�2��j&�P�6���uR�ɮ�!
-a�+�r���k�!�o�4	��`��ܗ�P)f��%��V��Q�T��F�(Z�]s���,��TR�|O)O?��h�o�# ]�6y�л�)��O�U�,F��٠����E})�g�s��ٴG�y�Ҙp/kw~˖��I'Y��;Td�
�g�Y�U���'��I8�@F�*�	�8
$�I��+A2((�+y�8O��ϋW��ȗE��
{բ�b�W�"@�}@�C׌�t�e�Y��gv�ֈ���H���o�fE`�ea�<o�V�	�F�
C��k2������* ]v%녦L�y|�KJ���3��P�nW�(��<� yiBVO��h�P������|��q'�9["�<c-�����p����!p��w5
�ϔ�r�)
�􁢮^.
,�8L� ��o����қr�7
��ȶǫ� .�@P�p� ��"��X�SI�3����I����k�TGm���W����Vb�u6��Gބ ����`]O����ZQ���&'l�T�R&"N�!�v�G{�%���^}T�1�v�:Ȉ�\������(�IW�f��*�ڮ��ʃu��*����lg��w\W�d?�'�~�|S6�|��ɖ)ݹ��E< �K��7���b�%����J�\�*\D�)
��e�
-��2�G��2ћBjx$Z-����aV#
s�/�h"���K6WZ,�ɳ����L�9�0�~G�"~4�
�5"[���K��4�h�����q���ɕ�����F���a��1U�_��K�Ī�)��P
��
?Q΢9�ޒ"��zܮi$��5I��0�]x��oܬ��UJ&�]�:QS{%K��z����<�
�~m댋�/7�ƣ��i_��y
-
I<G�d
k~��x�k�ے��1��e'w�7���۲���
��U�y��ʪ����\���P��x��V���nL"�
N6t�Ħ>�gbN�_�����4�!/�e%�
���O;m���ht��Wv6�������[���i�������yF�y���4ʔa�t
V�]��
au���
�#������Q�Ym3rM�/q{�~�
�tj��D��
�7���f�i
���ɷ
������� �.
=[�n`4���qSh��B�r�x_�5wԐ
�%��n�
Q����~x�'G[	�`
+qb�]Q�2Ը�i�=UGn�~���ڋJ�(�����Aݪ��d��
���
E�7��K�z
+M��]������!}��
j�nh-Cզ_�魺��������a�٭�D�fr�j�6�$-�4�n�U�Z�F)�Zp
��ux'
�@��]U���/�ٳ�ۿ�3�Ug`iU�}��ڰ��U�L��W���u����+��S��U��[���;u��������XJP�v��O�ŀ��{$�KF�,q
�Q���r�u��H��.���}i�m����fZ�h~a���t���M����B�b0*��iW�
��C䶧���jZ��m��n��[nKfi
�c�+.�&oV.�� &
ʭ��{���5�_�s�9�d�m��I�A. �*s�5:	�1���Ů�
m!�|f���l'�6#N�
-Z��>���\�oM�k�CZ8�)*���b EE@��(2���7{�I�"	$!��0a�=+v U�ZŁ`-x�E���JU
Ǻ
-����~��~�7�<N�z���Q���T�!w�����B,��C)k���E��+�
�+��#�6�-��)��
p�*㪝A �����Ao���c��c~�\_xb�5Ӽ�����z�g�Q��u�}޵�z�Ge��X~	>T�S�
s��V6�������i�1=�2J眆Jh�@ U���u�;
��7!�0
-߽�\�醮���������%-;��=.
��e�/�T�7D�$v�{�.ʫ�����|�Z�Ѯ�mcDֲ+-C��u�_��{�>�1�H�1]�"�D^n�R�
�ٺ�:����E3�
[�h9�������
��7�TJOW+3
v�œ�Limc
@�6'��[�c�`Ǧ8v���!���b�R�{��1�_ӵ��u���o��P��E�2��\@;4"�mO��
�����m{��
ߺE1�d��A����}C=W����B�}[3']\PJ�G5�V��mnY�G
Xy�ahd�'J�[U~	v��W�ۅWo�]�Wn�G�n�R���9H7�Ѩ��Au
�1�v�����Zm�]lU�r�
�T�V�A
-sj�6l�hm,M��y�4A����*0����v�J��
R�?�� �Ĵ>���2C!
*�#�q0�MJ
!:ŏ�C�����R�|�d�F�a?��2�
݂�c�h3��d
B��
z��SI�t?�%�L��m��F[�A��x�Y�G�ҏ0m�;GY1űh%[�sጒ@�9�
q��_8�G>
r�

�W�n���)jod�E��z�C�.q�JviN&�I
f���8b��g�
-�
�v|�
s��d��%:uT���f�����&�L��0���~�p����.(R���U
-;
_)�w%$��/��
�t#�
-~�#�u`u[�w�.��q�s����Y��_�-����*'̳ɩ��k/���)2*
i�9��$�7fU�z�fl���c�9}�]� �,툏WYC�
I���k
S�-��t�y7>�T!����<v�`tF�W�V��"�)��'����U���!��<���^��D�V��"_W��퇖��6!�{�9
JJ�j��i_U�(홽�c4*j�����>��
���26�����Kݲ�
�	m�&c<kQ ��Jln�
'�I�y�T>��ӣh����'
�..+�upC�6�&@j�5�t���d�����P��0���=��I�˂Ė����
-�</��BིY%�V(��q/ܦ,Ǘ	�9(B��0j�tI4	�S:�q��ԙ�1��K�h^��ChhC��F�����( �|�|y�0%o:TA�
B�Q��yPI\�;hVʓ���2J
-ĥ[�Q�r��_k`��9h�� "?7�<18�����~���Щ�
t]Z*7֡�^��%A�nj#���7L{Lu�7�7]ČY	L��L�;
-�i�\WkI��S����y!KC:�31hZ�Pf:�߄���0��C�>C�{޶$tR:(ϭuO��
R4����$=��jl����uq�1?פ��9��S�i|c��q�F!�_z^�S
��K}��`�d�%D�T	�w
V�>�; �<�'�V=�(�5H�%j���WM��V�#��9�Y�D2��֓��p~�����~J
��}�D�]�gN�S�s�jJm�n-�>,v�g&S�L�l�#�����>���^�i���8��ʞ��%��4'��R��JD��h�RN0hB�A0�(r�0K+�a�������M��Y��|"�E�G����E_R^�v���4�/�?��m[˨�y�N`�K/5[�7�1���[G�ؒ'� '�铯R
�G��hqꭁ�]��>���iI��X�
-5�'�\�GB�	��ć����d�^u��x�+���[�^��%e��	�֪�p��xE��
-
� �6�%!It�ި@�Ҿ #%��
����:��* �h$r��7ש�ׁ�55�׈��Ց'I�+6��*ЮwȰ��%U�#��zD�+J�t�� �B�a�Uؕ	6����}�
�uO�r��7��d����P����
�Cu}FEu�a 7�RV�"KS����T���20
E���N�{��^��lk��ƕ$vW��(�,�F7��b
ˢÞ��O���y����<"_��)���.k�h���[n �9W�?g��ڈ7��yș�*����Ӽ�uA@ �Op��I�R��rP�(�$e[i<�H����������/�\�t�/��G�inQ��a�@��q�I�a�{�Yʒ�]��e��?D��98ߙ����y��dx ,�8�?����Pe�1�N�W��wA�i �N,�
B��=�%P�K���
�~�҈�G�!Oʽ��R=e�"!�]:�:B�I�\��MJ1�j�G�K)b
'xL"W?D\G�ԝC��{���A�A
?u#U���������UJ����
ǹ�	H{�F[�5h���[N6��){((��%��
>�V�Y�R
-n��#����(a����F�q�&mq�3%�\g?�%�ӆ��M5������X�D3�b$ʁ
W�� ����ƿ��5&͔D4�®K���
c�
�Ꮚ
�.
-��1Z�o
-^`��~¿`�6z	�q���
��aX����ǰ�)��Ӽ܄'��84�
n"Db.��� �
�yC<K���
d��},��{�*h
�

-ڸ�h�>���wMv^
c��8�Iƻ�(~��j?���
-e�o��y
��l/��Dl5�����Żר�p�y1���ܣܵ�����^004�{
�����.��%C�A2��2�d�Wu�����Q�>�o�kL<
��
����5.ſȠi�f��fh�7S��-��|�^����T�jX[�wC�Y�*��sG^1�Ve֗�+�˃������L���3�
��/2y���{���
��+�.�;C�t��J �}��
���-��
>٫y6q<����
��<b�s�
-�bk*ĉ��_�
V���
�����T�m
�}���D5�1o��U� ��Q�u
�*�n��ҹ�
�D��U4���|>�W���x�A�_P�Z�?	�Q	��y�����1�>y��K���\.�!�O�q�M��

-0C�l����];�S�k)��=RZ@�[ɷ�5��
���JBe�ǐ$��Ni"�0
-�ú�R4H��~�9.☫|Dϸah� �-�)�r�~"��e�oM�����
���K�%4	_7�"�‘e�
-QD~�0T��.��>"x*
�O�>�酧��.Ey+HVy55R���Ws�����Ek*
�PxEGB����;(J�
X��(8h�iq�mh��^�
�0`���}���_APW�D���L��Z�‹]�<��4��zG֦`��oy��Z�R
|�u^��g��C�F#�n�r)��Va�
�5�ƪw�����9��n�j�yI���t��
-xI��1b�Iy�>}���-A��گ����OSh��KF�x���6xq�qQ

-�3��S�U���\ka��椚̩�Di�~
�?{�>���J�3m�tߐ��Z���t����]�Y���N�ju]�ɒ���QY�lZZ�s��
NѴѷ���W�>S���ݥ0�B��j������+�7��q�҄fU7���m�	�����:�8���^�;�#�eտ�+���*,�_����C�Y�3���
�M���S��U*���L�X�.jQ�Ȗg�_I��W�J5a"9R��'�C�\y׳qH)��V�U��
-Z��.�\+�Ѥ�/�a��en�/|F�[��?S��Pk r�"�
-^�Y��>����V�H9
&ya���I��x�Q�<�zU1\���
-ٽ�l�*7�}��hu;Twfa^���cn����YS
q;)oZ�u�G!�uT�U�Or����lk;�H�F�-�x/,u�	s�m��>fd��}�+]
-U�.o�.����=��q�-y�]�[��v
�i�R����g���k*�`/p����LBu���+��A����@
��[�)��&P���YQ�?���i�m/��K,�Y *g�u��(i�2�`��؀V�"f��JSs��=�RU@� ��7+���>d��ْ���s�m�Y�� �)�w�=U?ο��3D�����
qjv��8<��!z
g�)�b���^�[$z�RYjT����)�Ԭ1�c�?M�2q�=�@��?��ܣ5�ew?SIf�q���D7����
k�\� 
L�24A<D1` (T@@+���7{��d�I؁	3*8����:@-�m��q�*���8r����><�u���ݹ�\��id��Xm�m��J����J������"��U��
jb'm_�z$b�"�uO���
�b�M��q_'�is��ͼ?M#mp_=~m��=�İ���+ȡ�:�L��;48l��mb�
3�埒-m�
$�Y|H��n��]�c�k�k{>3 [...]
e
l��[I��u��Y_(i��&;����t��o���

�
�����5��k������Z���/��
j���j��p��~Ch��⨿���䦿�iR�s!G�-�����֠���5����
��
-�����&w���a7W��AƫX���U����r�8��+}E)�oV�ӃIÌ}�qZl��h�<�gw�
-��A��?�=��$�6-�ޡ|,)!<�*�ǘ*z!���8�߀ϸu��Pp� �D|�Ŝ�e�=s�m4'���Ң�ؽ�YaP�OZ(���vj?�VG�gxI=V
�
�-�
̹��u�MCJ���H_�-C�]����B~�2A\�8����*�E8P�T��Δ�To�
9/�w���h������������a�ߣ�b�y\��'�F,Ռ�o%��w�U/�ժ���n�M�*��T Ƌ{�5NJ����ԢT�9L��;y
_fX�D\���u��ַA���:x�"�)�V%�V/*��]1���#
���)ԋ���@�X�"�SV�Ӆ����4u�.�f�?��Uչk�%��Nj����;c�~?�]Pۺ˄�W��Ҍ=V�듍�1�
-E�	�
ֻqd{q�׉�;�
-�N�
������YH�d�fttc�
���#&�v�P�tQ��jd����1�o�
��­�R)�ʽ@}����<7�	�&���8�w��y�y�b��H�
�04���͂
@>� o`
�����~�M�<��a9����(��n
����c9̼4��<o��/��E1�������:��ɕ��7e��
�.{��Շ�Pi	WE�Y���x�ޝr��
-�EJ�7
�T����|4��'�r41������� n�s��#?�Cśhk�6
�/ϻ���
�7�
n
�
��HIT�����c6�߱=�z
z!�?z��_)��c�)�u�e�T��}nS�3��&iq4r����E�U�Y�X\�K���88IX�`}7yIi��
-��S��iG���r3�8Eiօ�$f
����l+n��.���*d}0Qe��:F����S��S�퍆��֯�SȺ�8��~�%; [ژ�l0~{��^��
KbV+�T
�s I��x)�oe���q��ra5),k�xU����Q"��YN�פ����ܾWu8G�Q�d�!H�9�2�'���31c�C\��!Q-�;U���9�
�d�Z�o�8C�N�T1+�hڟl-?63��z�,�=]���Aw7!�z6��*H��H*[|C���_@m���s2U�r]^9��n������0�"��PuT�t$�#:H���@�бjy�b��~�=�噛��*��ku��U��Q�m�9�]'pu
�
����d��SۖHgi۬��6r-���>`Oi#�T�2��"-�!NSn\ z��$���S�C%�Q���%;���O���z�c�T)!�M�.wf�.P�o�1���U=B��l1�F�#F0HD�\u̞rڜ*��u�jQ��O5��u8�E$�7:"��І���(Uu�AN�gulW�YE�*Z�"cT\���k���Tx�l�x)�$��<�hT��',ʷ�
�����y�={V?$�N�)�D��P�Vl������]:�|�d��̏��"���w1*��=3*gB'����|�'#�sB�F�S^PR�8�?
�
-$	m�:��@����l���(蕉9
Ea,�_܎i�ǀ/O	I��4�a��S8!��%UJ������8C�(�&2�J:�;{��Mጫ~J����dm��rFW	�jg�Y�?��;��s�8Ҁ�����Z6\Fq�D
,���H	Y'{����
$a@Q��k�^����r
��h��"j�}+�m�j����y��s�������әM���D]�_CJQw�)��/ʹ�5���״2�s�7
�v���}���7�
T�V���S���6~G���oLF
��
YH����Km�k�v���~�U��.+�j
p��o8Ɖ$�5�)�\R��������(��g��H�m}�w�5j�N)
-+����������p�vO[n��Hj�͌%=h��
��4�^"��l�q:i����%S,��P����=�Ƌ�G����T����	�B�ULR8LW������$G�xLcLS��},�?�E�;�8Q��E�$?\.�e�!&���KK����J����G���7��|�_
��Ҟl8!>�8��(Y�B�I�Y�`[�}��.�B���b
��T���$��=U8O��ŧ
y��P��-x��$�]��0��_���
-�j
��(��sO�����H|/=�wKR���������`�
p�t�l>f*�ӡ����uU��<�=�T��s�(�&zpK��A?sL�o`N0M�q+~*m��-��~F7�^���5惬H]�${��|�-Ҷ9Y&�=X'�V�u+^�ϖE�m���
-��Y/�0�X� c����A��dP
c��_X��
�V�Rx�6���b�|C�6������^FeC]���o�-�F?f7���Q3�V�>͝y�Fs���y]�ݯM�F�����͊��k�^Nն��I�����#F�Z�.�7��Ɔ�Q�f�eϫCJ�n�;Aj�B
JF���w
-��mԗ��6��t�����(�I5�beE���l���X���Q����͌��
��
i,)�6QS �1zJ�ezVBf��
۹���ʹ�/���	HQ8�9�SnE%�o���-�4�NJ�`�`,��)�~u�t��yQ��N��]�vح �p����+e�"�x����N�6y�*������,�7�$'�x�\���C���QL���[8.d@}���C�ɏE)1���D?@晹���b��$�?7�
-	�Y��M���
N�|�����
_�Td'wa�}��0Z�������<���9|��3�����閗3~o=��Y>���l0Wb=P1��jmE� ��X�R[l�o�uv:.�C=���;.�a.��Bř�S[�n�W�J3�ǟN�1='\Xr���8�۲��:K�X��j�6�e	�g΀a�p� ��%z"��K�1��.c1�ɇzɭ�G�T�Ri�VB�e����� -�)K at iͬ�!�u�@_�`�&2�q��
u�p�%P ���
-��S�Ч|N�WP� !���o-t_�
��n�y��V|�ؤ��賐�e`Hʏ�E�=>\� 
�Tǀ�|��cҎ�k�IS�T!������%Gu,%[IR�'�������+#T�}m���3��\��/���df)��`����n2�#���\�M����(��CQ�d�6f��l��qG����v�첵).Z&���w�I�����Te{�������JQ�����ܕQ����E\m�`�p�`��Ҵ���\�z�[�v7OV�o9ݜQ�����}��$SSFMW�d��ny��u�я�:�	�*�o�[��3� ���
O	��
FRJ���0��ո�l����+��L+�&�
o�E�+d�-�
-�@�?��
^f�E��ko�o�\fy���J���8�z���ΰ�Xmi
����
-Nw�}����OY�p
z&�@>��g�ݪHc���.��
��]7M����z�#�f�����e"�g���\��a��@�\�qyºJc�\��3ܔ���
�����r�'W�QV�E�
D�|��P�L���s�\h_h�
�#��9�Z-
�T�d��L�>˼!���WS/b�n�iA�3���.1Fx@Ǡ�3UN�N^n�POZ�d��t<�jGLy��s=���>�vW�O&�-8ךs��hv���eSȉ���`wPU_�c�a��ř�=շ}�m`�<<�$�+��UV�6�6d�����o�88{��η���zkG}ڻ��<<�7�\���jvg!5M��!�w�&�GmpfS����g��O�3x?���
-wZs�LR�q�/�~l�K�]Q�V�����:�o��m��<Q�'��

�
R]�AMXy
��u��
�
^��ȩ����
�$�}�!� 9LH��aH8��h��ʡrTtD-�*��fY]]wu������u[bg���g޼ߛ����"���ȹ�� I7�����H�R�7�H�B�H�u��d�t�
�*�Ჲ=e���J��t�j�|���	�#T����I�/��W?�{�Ν��O�^��'�`�����v�'$�^��E�=7�I����TF�2˵���7-��^�'Z�"[�x
;�����[U�7�,���Q
yWrr�9��E��6c�y'�I� �gIR�m��2��� Z�Q����
-�{0K�,�^�H�/>�>G��@l`�T��=FZ����nZ�H	�ѳ$m�¯鵩�K�A�3D;w�����7����ŏw��^J<��`i$�M_�x��8w��U-,�/h!��pbP���1��|*�k
_U�;� ��N�45�����j��<?�>�X���_�:�]��$
%�
ͫX�+é�
��Miw z�z{7��`fOE���5Fo�h�X�}�fL�}��k%�J�q�_b��_ ��A�5��4WK������'h?�:l��TH�mm.	�m�&�"�X7�r��V7�����l̨b�]r+�
�O�pK�[�{0�E�uwrf�ӵ�Fa�jCCP�k��t�M�ݻ�Vw�[FR��(�Y�-V��E8����	�����P��?�)�p>��͛�5�	#��T��t�F%��
���3�	qhk����
�;�`�LVOp���Z�ۓ.
��j��&�\
C<G�P��J�qzK�md
-���A�>ʡ	<�*�g�!��r)J����;ȁ��&x�K0�N�\��B�&���Գ����$�bԍ7f��p��t
(�0��H�
2����3�ӲG1�d?ź���
-�b�Vֆ|�����\[�w+�tj�j?b7����h���wJ�Cm�m�#�b.^V��B���DR�b��8��E]4�J�
7LG�c.
X
d���/�a�&ڎ�
�@�顢
��zQuֈ4T��q�i˽�èb˕ 4�3���~,�y�moθ�[��0� �
-�l�}	��T�C�u�L�Bt
2��Z���W�>��Eh�@+[���y����0=
-�s�U"r]�;�û]���(��̏{�����e� �E=�m��a^2�'FKv�~.�Оm��0O�j(�e�s�ߺ���
�Pk*!��3�
I�B��
s4�{^�|{6��k\*
�}X�Y��Ǡ���D�=A
%��$�hǹW���ǂORV�����
����U�B��ꯪ��r��+C�a6���� ��K��ԣe�� :Zڿu�6&��?�W�&�k�).��]%��]�,l�b7MX]�[H"}���WL)RI�r�f�r?A��ƁY�&�I�~_�IB��$�{X��l��Z����X�E�&|�w�#����؆�`��_v�ߢf���u���3����f����m��8�9�?��9�
-̟��N�Վ��`�jz1*�������.�@��爎܋��`�o�ْ�J_����+- �4α6@��/DWE�jE}HR�Dl���;Y+�
���z���/������1�D�ѓ(z)oι&�;��.�4��aZ�#�g��
s�b�Z+�X�Wi;�<~�n�"�(�	���M�'��b6��!G
���lP<�^\��nM8-�-a��G+dyXP�^��s:����0q
\p3b����W�u.�,R�&�r��m��#<�He�ĸ�vQ�l���.ˍ���J>��қ�s)��lej�(�^ ��,�=�/����FV���6fj����;e���x��%�D�����k�%�!FW at a��o2QT�vs�
�5��h�0�B�{�U��H�i�GCO����zL'�pb�I�q����+'_1���Lv�
-���Q��A����%�
��$��[H~�}{�1�f��K�ٲ�:HmW�S
-��ëd}�2w7����
j����<� �O�����7�i�2�G��;S�W�ݒ�!�@Y�s�Z~��*���PƐ6�x�Q�ܡ��/9i�7c�G��HV�f�3��R>K�����2j�Z�xH"Z�"�)�
vH�D�}
�@���}	Y�J64�T(P_�(*�C]���mi���S�Jq�OZ�g�A��(n�y8}wν3���7���;�?߇�*x"D���6�Hae�Z
-�5K�	e
-tE=H�������\ƒ�W�8
��7��2�y��m��]L����y���	��1N<�8͍�@��������:�>
�>���6p������ӹ�<�AМ�*쵮�5M
-��N5����g���ܿ��]7�c�D�!\����O��6N�(���b���H����ֲr�t1g���u��N�'w�ߢ�e�Gr��u�b�J1��a�#�g�i�|��Gc��"����

�'x
��&�YH;�����4
�T1}�Ϯ;c�V*���ܲw��f����|�H2;�R��l��{��K��*��G��ZPg��׸z
*ۿ
��?ʗ���
-�ד:�N����9u�����L7�o����|j�B�jEV�QR��!Ū��;~;�Z�Z����xٲ�
-�(�񆜦q�����E蠟�V����7�:b��g3��h\y����g�.:O������0�7��Ң�
�b�4=�N��Hdto{�<��WZgH
�NR��
�RZ\��s�W*Zx�� ƻQͮ�l<�I���Ts|���X)���c?��p�\B� ��K��u��e��|0|/a�hB�|樕���sEG���M���s��M�d���?�*G,����H����R�g�[)|�3��
C�Q��{0b��Iט%9*��X�����R
�M��U)+�^�
�P�,�p�y*��~uR�Hw,r�~L���;�_���v
N���"����ۿ�]���//S{̑��Ͷ�^���0X
7�4�����㊈�#�ޒ{Y�<mg�$���5`��Vs-*l��ۻ�g��r��i�˕[
����L��X#DEhgq
!N-_����c	YP�a
�!w����|Em�"�����P�D�OUHS�r5�a�+[��
m���
-�Wh�*¥{I/1Ywû�Jy�׸j�k�@p[�����z�3*R�e���RXwq3�0���u%�B�AŒ%\N�C)�W�'5�꡵
-&�F+U
,��d5�gR
"J�r��VDB�SDO]V�[EסdyVӃ�1,+�Iev�"���`��Wrw�Ka��
�G��|����`��%+T�VR�C
�F���{Ys*���Z�5� ߬�R�e�s� Q3
-���j�QA�4Ӌ<>���$�.7�$C$p��
��
���A�)h����J��ew�T��*Fm���K�g-��l�m��*{��{�����v\ܲ�s�Ja>3_*ݑ���ہ>��V�5�|���WG_
�>��R��R_YL�!�R�F�jz��	S�5fځO�2��<�� `��}I\:��X�i�Zk�R
���H*��4����[(�x��X��$u|I9̺TkV���z����l�_�׼g�C��%�*�
�w�XR
��nY) N.�9+�wZ�[��E9�ľW����J%�w�p`Nj���[���.�b|JOsd�W,��R�~�#�*	Ľ�yF�dwC��p ���*�L(8�Oe��lL� �˞)A���
��v�f���F��ʹ.��Kn�d�~A򥾺]�Di��
(i���]Yʯ�J����ߟ�?�>�w�[侾
�7���KK�6�w"��!e��D�p� �5��V*
�3VEa{:KoED��cɾ���J�#�oOU4�
��4����l�TjF�k�,>�{S�?ý�Sk�>��Su�����=�|��j}�����T
-�SU�.nk�.����������m�c�Ů)Rx�b� T�<�T�V*y�Ù<+�`R�C�;S�^����0�-�itp��<ȗ�2I�Z_0�ȡ�VVKHW�ol���9�=�f
d�

j��b��%}D�C��y�{�s��I*�{ZL����1
������r`n}+�D�����_�*�Uz�3�����}�i7��7��9_�k��jx�L�+u	
�;�FxL�.�m�m���Q`sK�z�������K#�>����&����ޗxiB�V�^�\s�3�_X��X_�ر��C�+ҭj�|S��	�k�Ͻ�|j|[����X

-Ά�BL���.�?�\��D��C��q��ߢ7n�O(M�&���JO����������i�ݖw0�� ���I�J�LM,NCOYPoQ�R�S�T�U�V�X
Y#Z:[Q\f]x^�_�`�a�b�c�d�fgh#i3jBkRl^mgnqozp�q�r�s�t�u�v�w�x�y�z�{�|�}�~�ˀɁǂŃ„����������������������{�p�d�X�L�@�3�&��
�����֜ȝ��������|�j�W�E�3� �����תū������}�k�Y�G�6�$�� ��ڷȸ������~�k�Y�G�5�"���������ŵƣǑ�~�l�Y�D�.������оѧҐ�y�a�I�1�� ����ڲۘ�}�b�G�,��������{�W�3�������q�H�
������v�U�3�������s�I�
�������a�)�����\�
���Z��  ��,���
-






��������
�
�
�� �!�"�#�$�%�&�'�(�)�*�+�,�-�.�/�0�1�2�3�4�5678�9�:;~<|=|>|?}@A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�c dee�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|z}o~dX�M�A�5�)�
�����ۈʉ��������q�`�N�=�,��
-����ٖɗ��������m�Z�H�6�%������ؤʥ�������������w�o�g�`�Z�T�O�L�I�F�E�D�E�F�H�J�N�R�W�]�c�j�r�{ĄŊƐǖȝɥʭ˶̿���������������
�*�7�D�Q�^�k�yކߔ��������������������� �,�8�C�N�Y�c�j�n�o�l�d�V�D�/���  �h�	2
-R
e
r
xzzzyuph^RE7)4=
@
?
:4 ,!#"#$$�%�&�'�(�)�*�+�,�-�.�/|0p1d2Y3M4A566+7!89
: :�;�<�=�>�?�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�||}v~oi�a�Z�Q�H�>�5�+�!��
������؎͏Ð��������������x�p�j�c�^�Y�U�R�P�O�O�P�R�U�Y�_�f�n�x�����������̰߱�	� �8�Q�l�����»��!�C�e��ª������9�^ɂʦ������2�T�tҔӲ������
�6�L�a�t݇ޘߧ���������������������o�X�\�[�V�L�=�*����������b�/�����f����M���q��  ��	T�	�
-�
�
�
�p_L7!	������}tf
U
A
,   �!�"�#�$�%z&d'N(9)%**�+�,�-�.�/�0�1y2g3U4D526"788�9�:�;�<�=�>�?�@}AoBbCUDIE<F0G#HI
I�J�K�L�M�N�O�P�Q�R�S�TzUmV_WQXCY5Z&[\	\�]�^�_�`�a�b�c�dxeffTgBh0i
j
j�k�l�m�n�o�p�qlrVs at t)uu�v�w�x�y�z�{n|V}>~%
�ہ‚����r�W�;� ���ϊ����}�b�G�-����ޒē����x�`�G�/����Ԝ��������q�_�O�?�0�"��������۬խЮ˯ǰı²����µŶȷ͸ӹۺ������ �0�@�R�f�zƏǦȾ�����
�*�G�cЀџҿ����'�L�sٛ������F�s�����M����6����+����1����M����Z�����:�{����� � � �O�X͙�~ʹ��~y��~e�L�~�j��~�Q��c=9 ����~|�4�~c�l�@~]�̳�~n�f��~��C�~لOiZ/�gP����8�v����}6�q��}0����}>�ϲ:}i�^��}��,��~�
׉_L� p����K�-~~,*���~��&E()D9�v��yo�w�y���=�TS3�wI�!
�D)�J��%����OBv���w�N<i����_��ΝD�g�A]�3w�^�|�
<�~]�
-bʀ�}�S���W���?������CN�<��-Y�4����� ���B����Yp�z�S�)j"��{%�>6��4��;�
>��FVW���m��
-S�^�D�i��*��bPk������pة�?�%"�1�#!ϼK`���L�<�n-e��2*���+�)	X䥂C@�v2l
Q?����(=�0�q��
Mz�ǃI�z����7ME�Y;���
Y��@K (�-� �\��U��������&>�r���I�^���2���I�Me;Ya����"��V�N�,S�;��o�_
%s�
�D;��f�Ǝ.�����R?l
;
0Dq�>�
��8z��D�KG)�3o��+�&�<4��@n͗0�E��O�9�4��#��Ґ���n�W9
�b���_��
7}B�2�yːv���/ąJH삻Ȧ��p$�ȫވy;�Æ���ǘ�f��o虔�F¨Ls���I���,Kh�W2�!�A��jHE^�τ���� _�w�d�lX�g�g�Ωr!jU)�[%�B��\D��Cf�p�
�<_��\?�k�,.���w�Ȳ����i rJ����R����ݐ=>0�+cv���Z�{Hl�l�
L���VA��c�۠����
^{6o�Cҏ���
S�
��
م�bȏ���:sz
�
7�j�P@�Q����
��;[�w�g�|z3�0Uq`!�P����-~|���X�3�+�z2lIђ��:�_<����a�X��S5\}���E�^����G���
-�X��J4�^�Ƭw��/��I!5
-�bn�#�F���O��� ����`.ܙ�-�J\�!gZ0�
-)�ݥq Aß���O��k�V�
��^B���f8KĈza>p-F��O�J*����Yr(���".
��O��'����q�ä����f��rC���RJ'�dc~��h��!€�?�`���}W�zBd;�hѲG��ϲ�m�T
��SAi�j9�<�� �
-ߨ��%�@`��8xL��T��qė=�
,Mk
$hJ�����d�����x_�r�̰gʱ��h�t�G,�K��
ytomVK0����X�?R<�J%��m�q<UG]I�X��'t�9E��
-$Vt�� �������ܛ8�i�(�G�T�+��tԃ��]
�6k�N�*���d�$m[��w�_L��-h
��k�,Ȭ�
�&º����^>���=Џ
�]ٛ��a��`sʠ�7�
��g&Gr�ŀ�?>��r&�z`�b>&���z��
%��sx�
bw�&�{�~
�څ��]"W�R�%��c"z �D
����zA ����r���s!֝=jcf]��rm��A��NJl$�� ے�#ؑ
�>���wTf�
GF�F69�9<׵.�'S�Z*�˺#�-�Jl.��Z�Zx�%m*�|�����
�o�	�2�ӝ_T��W�K4
�eRsu33'jRF�B����Wl|��
-��F��gml0L�1�
,
�����y�+�Hu��2��f;�[�T�0BE��{�:���qn�����to�T�]o������kI,
-
��LgV_R:�Kϋ0�d�P?=	��v��E̷փ(M4�m����\��T�k׉o�����,�H��=����������Z��w/��E�I�-LQ����[����
�8�F/�g֖'$��?�[��u~f�g���h�X�j����ݚ-�	VI�m�
K��Հ,%i�b���Q���*e9�7���������W
K�����M�YiHt�X�T���BUD���w�-�4��9#i�ԗ/�r]�hGވ�/�
-
-lD2
h�‘�%TT�T*F���dw">���G��Y?�"��[f
r5��ʊ4��`��TAo��4H5�rW�S�8��Xy��;$Yr���'�q �vUP��V&�����4m�/5LJ��E�:��S�7��Hv�y..�� � k�P  �X��Al���`��
-��,e��:
E�$@B�Kr��.!{�A$A�,�C�Y[EA;|�
TJkU>���4�1a�Ɯd�cT.�����Us
R�&�Bc�h�R�)�����
-� Pd;���ʟH�b����l?1;_�:i�^��m�Mh9Ӝ+,�x�+(�‡j3�=P6u�>��a}�&���b�
(���0�=��.À<��2&�m�%�u9��_�~z�����L��!�S`(�6͟>թV��
�l��W䨸�m5y�pg�!�2��
<��	P�R%�wC�>��u
�b�v���b�F�.0���UK�$�K�;�؂�P�,�!�rA�5��%\��v���"�
-[2�g�w���dx��J���:��_�'�Eښ_+^Cژ�� ���I!	v��,���V7�2UJ������L��N�ITU�K�ɎIy/R+�=+(֨����v��6������!M����	��@P�B�%�R-��-�3��|4�-�����)#ͯ�
�w����.�ܘ�<�;�
��b��#��;*��>$e�G���
-�>�3�
�����"�
و~A��Z���$xOU��x��
�
f𜓜x;٥Q��
h
X�(�Z�����x=�`dš��
8�b�†i��d�, ϐ��!�enZ
-b���
/�޲��І�����2��P�0~�
�+��1�b��a�
�k��tT ��	�?�g�)��˧�9��
С�`.ޓ�`>'4��\DRd���Paxԗ��
����?i|�9�,�t
��Ĵ�q]��"��m-�9�O�D��'���E
x�>�#B������z6����N
k�%��tm���6BDzV��Q�G�
q,2�O:��
y�{i��H cy[]�v�a�Z��T�5 �Ȩ�R
3��4�5N�@q���G!�fYXr����{�3^�
��M7HX1��ey����������8����7ҙ;N�������P9��tn��/D�=����}*��I�:��2s�̋%�����G{��<Ie�d�X�w��39��5�I��ot=�ޓ�*
̸'��
��(���#^s����{�\���d�Y����dS�j	V���΢T>�7��a�b����� T�B��m�6ۺ�4JZm�I��
׶�F�הz�\F�D*r��E�y� [...]
-$Iⷱd�`U�+�����z�3��
8"}��Y\�E^�\Q��ܵ���)<&uZ�!
FM)V��"�ڟ}���&à/����
�
���5��
����O546�PW�눤0��
�f�GlE�bd�c
��'�ƪ�r��Ӭ[��{�K(��"M/y%���0=����zF�Bx}��{w6{Y5��0��%,��4�0�R}ԓ�vT��p>�K@�f�R�$�7H�U�(	�����/1��0�f<,��1�B�S>���٨RI3#&�&���p�a�5j����1��9#yT����H�9c�I���[��է��j���U̟�~��?�����
�+�7��N�zM�`k�|-�k�qJ�}(Ҙ2������S��aӼG�i� �;� ��b�:`uǤayU�}T��	2����Ftm�̔
%OpuD�����U0m~L-_������:�q��W��g�0~�huw�-]�
NV��rP�
=<�]x;Y���1�iw@��8,���n����\(z��q�������b�
!$zB��&5d��n��6
�1Q&�
 �&�
��C��u�Ўy
#����c%$7�]w'z\���0L�k{8<Oz	���o%4�P�˗�
-�9hz���͊��$�L�mxEFGO��$���Dc�����n�:0td#�*�v��T��2��.q0��6���v�g����Aԡ�n�3����l�'��H:�<@�I˞��8!�mR�S����s�^���U��g��f B�
�u�2L�> �;��f�G�S�
�Fx¬P�~���K�����m�%t3�M��� �c��cM(���bC�B��$
_� ��J�,���@��՜   ��%ӸZ�
;�.�6��B��)�P��T�~��~���:_��tH�NI�T�S��c��Τ5���_�3���b�O�6�-[o�
�7�$���c�n����:�zN�q��n�E2~�7\N��T���'�
�"[�fTT��^2F����
��&��+�����c5r~ԕ��(����j����l
4�8mW�DC]X�#���<����n�_	�T�� 45	�C0
V���~
m��&AG�A����7w����@�w����;����Q8� ��Q��
��?d��9���#1�y�ʕq�_eS]y|�d�*�&6Q��3�0J(�WG>�H���N� 
v���Ag��+�[�o:y1ډ�G�m�UV�'p�J{"�����M at 3��X���|��*�oƙ�ޞ�%sfJ�<��ߔ��[����-0R'G
��i�++q��NPF�\���&���XT~y�k�P�x�>���–����������~u2LX'��P
�M�O�W�	�rة
Z?q�U�����\+w�>-�q}y/sR�Q�Q�����J��@737���K�a[t̷�����E�8X��,��T����p����!��P���V�� K$��`�����Κ�׵�b�u~*L��lB�z-��<�R&,��+?�AP�]�o����L�K�ِ
'y����
�Y�?�
-~�t-"X�n�v&���?����VA�G��
+�
����7�W����h�K��D�Y��Z�%4YF�
g�[�
��� ��C_�M�6ЅLJ��!��)�9�
�!6��-��l?�@��W
���?�t`k�;�����p��}�
-P���>�f�{��i8Db����Mp/�F
��_<`w�[�U�q��.
���Y!�'i7�L'� �R�z$���v]�c�-�ީ%HY�~�ٕ����
�鞀ws{)W�a��˹��ԑ`����{�[z��
���ϡ������Z�&
���z
-
-��
��U��@u�BP.8�jz
�B�{G�tϤ1�ޕq#
���^�o�2��N*`�D��Z�m錞c�@QY��@����O�����y`��ŕ^ ��)�H�?�?��s	%�����J�@�f���-���H�%�{#}ř�PK n@�u�5w:=�Y�X9����(5#p
�9#���A�v(~�-�"]�Qb'䠡�y����a
-�������'����£�	+��v
O@��%�7_�*Z-r*��~z Ց�4��
!��w�Bp����G-q.�a+��c��"wmqk=���WfB
+
k^����0����>n�pu�5� �㞃= �m]0o�����-1�:ǒ~��%u
i����;�p�V��O�/a3��;0�o��Kܼ
L���6��E���d@�ZU%�{
����^�
Ͱ�y�O��V�NHLm���u�?�u
M��B�EQ1\�IُO�u�i�@L����7�Nk\��dd��[i��|����lRܰ��3"���r
W^ ��
-�1��9�~�(�V��ZQjsf���b�5~N
l�,
$LAE ���\�����Y�v����3k��"�*��Ie����.�gj4u��D��k"�*T�~~���g�^�
�~��<|�1�c��Px7��
kF�84�K(/AI�\ %�H�
�G;�'��6�������`kK����
-���Z�J���A�Fq��K�q�$5�GT��#.��a<��C]�s�zO��9�����@yQђ�-��D�RP����G�D{��n�����o��^�7�P��vU�v����T_F"�T��e�
��^�9��^�9���(Zi����*���J�|1�"�]����.��g:��E�TI�FzN���%T�|�k&�J�l���I��3ʌ�+�r^�qf��SNM���X��e��
$��v�{�ꢫ?�I��B�-��-Oi�0iX�o�
�葚T\���.%kR&-?(�m��=���?~3�Jncu
�/�mS<��Ð,��Le�H:�
�i�_+MSV��a�
k�@  \Ѓ*��+w��qDS!h��e

-�4��9"(h�d}+ɗ�7��)T���	b�ǪԪhm��`Y�ջ��
�s
<��-�,@��͋������SCg�Zw��N�	CU�c��W�����-JGm\Q��A]Q�]�h&D��0���Zvnw�%����0��z
��MT�X�I����:��l���<�7�
�a�`	���5�P`��ݰDh��k?�(�b��	��
?�`F��g�����ű��y���=�4EJ���0	GvQ�O4��W����d� SA�nM�C���
-ұ|`�7ø_��vY���Io���R�yYqE�,D�;�&Q�\�B�xW��r���v
t�

�
[���\"]����U���ˋ�
����w�髐�<�
|Mc+�����
�Z�9�(W
Z�ʳͰ��f����t��~X)�U�i��?�m�<P����	���;��G��-_k&ڞI&��M�L�<�:��:͹�7�����Kƒ���KX����Ѫ��W[�5P7W��tt
b�E6ռ�z
������~0�i��W�űہi4
[$�k����i�l�$����VRc4ӫ���Gk~ʿ�YQ�:ٮHb�F�G�X
~�Nu�.�kf
��c`�m
��f��4�걳�qVP~�:�U�
#/b�E7K*�W0��]�q�=$ܭ��� �X���QM52ym�B�S<l�U
-�ZҸL�eD׊=�

B��kLBR��Y�^�
�#z�A�%�ڥ`r^��'UIo�Fg�>�;1
p�'t.t-SSUn;Q��Y(sў��*�M�8=���
-BHZ#
��GcD�S���{
d'�,U�t���l�=��,}�*��v�cr�+�]�(_�1r�Ø@?A[��K�Dl�v'”o�>=��ԏ������[���?�Q�
�
ô n!ܘ���e���o���i���B]�u3����PzP'ߧ�%
�4�4Qw� �	L7@�?;�gS
Vjgo�ho�p�7�sy���
�R�\7�����V�%xL|
3 �n��|�2Q|��-��Go�t��u�V֘��Gk�}��fd�'�̐�yQ/;^��+b�#��&�~����ي2����(��<��c 3�;�n`9��2[

�Lqzt�.��)�<����lJ�a�n��
X>��ɚ��p��Tֆ��)��$��Dr�u:5�z�j�,|�~��0T\~�>�*,6�Y
-�]�7E9!��7���;a����u�*��8Y?��Ң��#� ���W
�f�iA�~�\���mB\�$�O�wD h�E��16:_�����J��qB���R%��*X���3

�!��O���:�`I�����o��k��2�+��}�Y��'1�%Y
�G����PMJ{rK
�����w
��
����_��
��L�&N�����
�N�yA '�ճmﺾo4gz"�v;L�	j�e���
%Ɯ���{��N�S6��U'*���@�d���jNc��v�o^=�Bi
���7�95���l
�
€A��ⶫ62�7�I����C�k�y
V�_}B��.I=��YR2��U^�c���<z+w@����b
-�"���8ۺ?pG�Z:�Oȿ��7�Ý��T��ԐI���
��J�A�����x߹rx���n?(��؁ w�h���?���F��O�Gj{�D
"��La�W�e�}j� �w��*����62�y3r3O�(�1�;LS��P��p��a?��
��U��}��c��qT/+��~���3M�ҫy$�=IQ�RS$�@դ@&\�l+f���EI��1k��ڸ����v�x�}_���nϐ��M�fB��y��"m�
�9�nQpϼ
Ϻ�e��\I�2��Gt3y����)w���%�u�$w[6o
@&zܞ�Y^�Z�w�;<\��b���m�����"��������{���3
=�s�
SN�Ӑov�(����D"��i��dM�֬Lใj9��Z�K7_�<��ې���ø��9�74�P6��
�0,�R���?����D ���m���6��.�D�t���he3
-����>~�o��\Ƙa3Ƹ2���@e���U*Tl��m�c�ӱ����� �~� x������n��N��������U���)o`Iχa]�����P���F�ŚVTC&�ϣ�࿋Y�=�d]/��
�.��.F�BX�s+$��=�}buM�>�RWm6�Ŗ6ᢐ�FX �5�x{v*������j;�zv��<���_~���� A��VUJϐ��^Ij�Q�x�シu�Q�o�=l�K�_��Ց�E�kZ\4��s�qU7��vOa �J?��Q)�4C��^����\��k[{��3��y�~���M�|J��'g��4Ay,$�0�( j�H��l�:Q"V҉�1X��&e��������
�s)M�Z��(�W�
�|�Ϲ�\���8�8&�t��c�p��Ҕ��a����
�͔����
�C��C�
GU�$^�fb���|�8u����̸
����&���A֍�9k�e�7�;�㥦���k�o����Av���Տ0o5����y�'����������<�!�����H���P�4
��|y��C�{_�2e��lTr�s��*��Idg_��'
V
-Fv�z|"��ƞ��ҩn2=�3[�"s����t�	�}N��8����`
�����1`X�i��]�x���(�U2\�o[v1�d%JOO&rؗ��0ܵ9�Yx�ݨ \��
��D�m����]=H�j�ovfd���)�:�t��b�dH9\
��ϛ�Y�?�8��
<%�}��dV�ەh��nu�ӻkV��3�+��(+�$���
-������#��Ջ��QҰ�����Ж���X@��h-Nd���$�a��>�M3��q��"y���$�[Y�@S���g�Ó=ݎ��P����1�)L<�d�"�d��rՕs����W��	��DJ�
-t��b��
�c�j��*���!�A�q
-hG�|�3j z�O���� ��|�
N�
-��*������%2#
�Ǔ�H�7!�
;v����� '�;��
O����~h�ĥ�%�,v6�Bբ��Tx��Dv"Lt�ïK"N#��.ec�}f��˺��d�&�T���R��AS�;Yq!������E,������AA�m?~������[�7��[ ��>
\�!�B;U��!�)/������C$N���$�A�³u�e�uU}�,3Y'��/J���c��	.8_[
O�����N-<"N�����awG��m��_+�yj~P�]ſ^\y�
X��,r-�|�㒒��ܳ���<���L^T}��,�^eDR��,��n�kqց%��|r,�!g��Jx�����=~�p{"��\ee�E�N;��Þ ��=���$���{q@Q��_��\?�/иLe���>�u��#��M����p�'Y��n�_e<�q㼅����Ra8p�LB�=��(�YK��[l��`BK����B#4;c��;H�S��^��OA<�J��~�I4,���$"���,B\HV'&fಀ/pO_*���_�_�#���&l��Wc�K	B�Z�(��|Z���b��+|���KpT��
-�Ar3v�*>�����>Ʉ�x\�+�0lk������O�Լ`� �F���cfup�.���wlC�n���KJIi]����&���f�����XPA���n�1ک���F�TK��BoI!��Ӯ���Z�� f�
)~��X��h���y���9�
ݨO��C5�����&�|�T2���Ӳ���n�SLB5eD0��:��
yP�;��(��w��9m��Ϊn�Wh����K�u����{�`��w��k�����
-��kH���>*�ڲ
��1���
�w�p5�����Q����݌�$
�;����LvvJ1��f����3n�*���T�g at oO#9|}����?V0M�5.�ۀz�{"
N�K?�C�_$
P�&B̆e>�(
q��I�u���`���|o�b|�_�0l2�Wꂝ�sC��ܴLT�
�I�a?�f(/+���P�Iw��B
W�h�g��šH
 ��
Ei����(G6

-���
�
�" �
-"(�H2�̙�dfr�	$��x�Z�EP>�ţ��
�����C������~���E��F�:}<
�\{
-�����%����
rH�6N$(߫Nᷘ_%�1�����]�2�:$����o��-�8ȥ I-qt;�'k��TjJW^�}�k��fQUr\�u��
l�N�
kHn᫂�H����*�W������d6��
M2	*{���`�V%���VR�oJJ����`+"�yO|s8����6�V��y8�
�:+����;��9��ɨ�=�.q�q���ѝ=���ɥ��^ӏ�w�ld���G���;<�bSh�
	�
�� (�����%]�
�N�}uAܹ�
�`MV����?g�=�&�o:R�����(�tWS-{66C�S����������U���foEI��hzE�'�ܜ��&��Q�8,�g�]-2t��%��F@}S|��QJĜ�h&S콧�bor
2w�q�|�o�����/�$�
Ĭ�7�Aң���I�MXIc>��f���H^�2��`�zB�ȳ�
	ŞO�*�{M�2MoR�0�i����:�T�~%�$�9ED
~c�j<}
���${.�-��+P]c��=Vz��pwz\S�;!?���
C:�G�F����Iױ�q�Y�Ş
݇>;��]�����m�S�)�yr���Ez�_n˕�aI"l�|s�G��������vm��ߵ
���_7e]֭�>��Г��U�)i:��D΂�G�}�V W�5*��{�f��?�
-�(��$�p\)9D$ZY�r|�����(�4D܁O�H���ʳ
;ܫ��v۱j�x�Lr_r�
���;Wi��
nV�|�R��u��dܦ� ;�@������Y�N�<q�Iȗsc�E���^M|��K����ƿ��6��#Q�쀫��Hl6�\�r
��E��jJ����K
-�β+� �x��=��j1�(~ǒ�)�C[vQn1����򑾪�x��V�
���a���u� I[���
8��m���Y��GeLV��(X/�%W}��%
��
-��M]4�ǽ��A�ߗn�װQ�ԈX�tGd�Ƈ�D�\wQy�R�>�l-�Q���nJ��Ȳ�c�/�����14��
�C:�'K��&���̕BO�J{ߴz�f�sW��|F-��q2��
?���}Y[�pXd�Y<\��v�+�
�M{��i�r��8��~�LJޯ����
�vlL:��	?@���o�[g�`���}�>?Ur�ǛI2��L�k.�}GpI8�Q�RV%܂L0/PU���E��
?�ɹT��c�ۼ�f�H��s��^QM�C!��)�$
�;
�ej�
�uIy	�W
����6���#L��Mi9�Ħͱ��P�*���H��ʘ����F�g��]�m��ߝn�+|���X$Z�6K'�
�O�Q�J�q ���m�(B~�lj��Su�Z
�ť�bhW��P"��z@�U�
�V��J�΂\�,<\H��A�
��5���� �O�af΍�C75O
����<x�5�
��MKQ�����e%T�f�ʤ��6
S
sFt���TOU�t(���
�2���[
-ES!.?Ӕ��#��C�:[�6�$ߴR�2G�[�D��U��cb��Dx(M<����}��|�y��%�����}�ђ���Hm�zy�Ey�)�9Didh(Cp��K�o���Y�9_\n�i�Qsƚ��Ӯk�X3��6R7��U&�"c�T4E�ʈ0�X�,t	��:�T��/>Uݮ�x�7�����F���>Q��L��~:ʥ�#�]�[eTS�2��%��c�
���Æ~EW��g�9��i���%�3W4ފ:�}޼0�_�X|���-�ƣ�µ������V�u�8H{���Y�F�"qĔ-�F95E!L��/���3z���Lw@��
"���F���Rm�O����Q&�[�#�����
�Z�O��/�x��ˤ�r�~9�T0�0b��ܬ
�4��Pߋb�>_nMFY%��<�ip
-�;R�x���@��|���qj#�l�j�?Ape�  �[�ۊ�x�{�
-�s�H�t-bM�#���t8f���5�}s�c��0�f0

CcB�K�R�mc�E����k���ץ�JH�[�ۢŚ<!)�N�o�OC����I}5����2���
������0�9���tMب�������7B���0�؋��
����0��z�D�
K�
�Ye��R�U�J�����ѐ:N::,#��D~6�ž���4o1��l�`��q5��X��U5G�"����Z4�tX���� ������
��cV�u�{�_<�9������S�N�}h���%�{�nԾ�"V}V�"C�w}�t���)�b�3�zFj�oK�����j2�'��Q9
-]��\Bȫr1.8�C|��.x8�~��pG��m<�ϰ�"i��S�˨�
�ڠ
u[��)�E��k�+WE8x����5�
q�g<k~���[��0n�&
ˊڮ�c�A��a��
Jú�g���"�:�"].f��f�5
	R�u��B�Tu6�u�|�;4R�
�'���hNp�\@I!��Bq"��:*��pX'%O���$�K#(�
�}�vW��&��$�����n������x���T�eحk���U�^�I���kK��l��

Y�+H�;"�����^�\��#G_�Km��R2�y���fbI-�ب:ݐ$;8�$N(�Ӊ�x���a
- ��1��"��*.d8>���MO�a��N�$ʡ˖~
&(��$~��>�����t�BM%^i���3��ϐ�Ef8UB	 �
���'`-�icIaͨ��+��	��دR���=�Z�����Ⱦ��Ł�=�5�U#��5H����R����>njky/����s6��H؃�E
oL��y����C�G��/��?QE%��F�v��MMz)=Z�B.��ϡƋ��/�•��3������O��8��5&�Y�����K�լ(�ST� e�ҝ�ZV�
��x'�xaV�4�Ë
�*H�]z~�h~
�i�0d,�K��8��CZy�{j��CF')�b�
|x���NJ>�V�{�0��e�#|S���E�1b狛*_�R��"���
���37�����B���oξ��(p�3_�<ݥ%-��t��ɫ�B�e��t�Ɠ��px H��uRuɵ)H?�m�����
�f@�Iz�͂qrgM_����D�|Ce�
-��ӯ_���w�CՄYK/��Ԩ	��佨/���Y0�����y��̸
7�.]�*ѳ���a �!�d��[�m��9���#{-�;�W�[����	
��U�$�mb?ci�3�ؘs���q�6�ĂT�
t� ֠}���
�dl����v��{�F�yt/ټ�t�����̰��K��Q8���
N��"���4�ʻ�c �'׸N��s6��I��
<�fWϚvЕ*�҇�T� 
��9�
�I#�{�	��mVx�@�.
��\�EyT��}��W�*�fҿS�ѵ:'��hP��of��ħ/7��n�
u�3֭F����c���ȶT���5��y�ŴѪ����L��i�Ӕ���%v
�I��G�	�ɒ3�m?PH-k�
�;?�v�bkk���Չy��^��4o B[�*�Bo���R
9���^F�t�b�Iyd����W��$ګږ�
�N��T3�VYzl
((�m��"U�a.\�vz��C�5H8�H�$?sZ�6���=:�hh�B�!É8
-`,�
g6�$cN���!L�p�<�
b<���Nz;�0y�%�
)�
�"�
�D�B@�
;�.a��$G=�W+����v�F�v-�����|d%��ݿǁ�gOŨ�
�;$KF���lb�u#�^$(�b�	���,���jdM�[s��kx�v�͆��c��?s�B��fl�S����k����Me͈Ly�i��3�TZu�g�v���#���V'{�F�,���8+�5��%\���Y`kY o���C��,VQ�"�B�k�5Wjؚ��


a�x����h�k�"�	�A�ƛ�/��d�X��!xJ
��(}�~��&�|�
����	�h��?��.��������XS ����qX�}|�#Ci�ch�K��VF @ d��w^��NH L
-jk�u�j����V�JE)������swm��^
��VQe��^*�7�c�Su�5�.�:��5!{3�A/��u@v�?�aD��UNC�k���H2)�
1�z%�9�U鱛������v򹰗�!�k��0>][#�?�w�sb���,4U��_	f�)��E�ď�*	uä6Go7�6ɵ�
���{�����'
C���Ga��+���RU�A=�@��5_�rgs1OU��G��*��ʚ�O�
&��Q͡�4��%����
��nl�c=�%Z� ��v�Y
�Ze��ਝ4�?
eC����`��
�

�_���wvĦ10�K�B/��*Br�v�4όwM��	0����
r� �`���$
����C�ܝ�G�a6;g-N_�&ɰ�.`	�`�0����M/s\�P���M�f�`p��3������ 

$��A7�	i��	���c���(y
<�N������6 ��e/�
�c�POj��m�+�YЪ
C�z��Xa-��
T��`ao�t�t�._
,qg��O�����I]@��f"�	�?4|T�]�T7[��r�5+�D4UffN�]Ϭ��'�Md�d����Y��%A'-�:�x�>�j����Ӎ
�5!�U��iMSD�-rB�FL��&����^:O����F�-T��4��w
�������T��3c
q]�2��R��d�/3���U�\;?���Up=���@�b�
-TYRJ��3���O�)*+ s�W�u�.��[��L6�Ǽ��A�. �귒�h���oN_�=C��|��HW�	Gz}��w\��2�h{?�U��r_ס�,[<���4�Dm�D��〷����C/
�F�l�
M�r_򑹾�g"�P\T�M�Ii�D��w�$��=`
��I�Ӑ
��}����6�.��jY�x^���h}]����"�]���l
-��8�"ӽ΃ǐ��
L����"�H�ڝ��k��:^֖T��m�������� �.���^�@1�~qxT���l�U����#U7�����5��:��L�E|4�&W2��5e��xz��*̖̆;�����M�0��do�^�lpm����aI�S�7�kD#���'͊$�"lL�?b�A���DI����N�mEh�
��8��Ԍ*�"vұ�E������
���݌5Z��5
���
�`z�~x�[�M N&�a� |�b�(��ǁ$�ch�
�����|cq�)M�_���Ɔw>bSО$
��	�D�p��
�z�!G@o3���
��
�a]Pn�N2);K4 U����"�p+q
��7b�������L����a�y�$�04��iC�c9��(�6�>E3a�{� R䏡�0`�?�s0��7y9'`L�q��`S��cLr &M���P.ڽ��,��_�r��u
����/�F������=܏��=1lt�Ŝ
�9>1�lם
-��KX_�t+	�
�=���#�ثL���
-u�uW�K���̹�
u)�F�@�������j�R��_$����YuBś�G�bQl+$���,o8�q�l����g�
!)
����n�2Q����U�>Yt�w�(���^�
�'Y�������
!�� %�G�U��9��� ���,� ��&>�YcwU���
�M����j"�
��Z�o6V��WF9�=�a��l
m�y������nqA/2�A�I�̐���i���
-q��AN?!9Nxl�b�O���{�e�i�Y�Q�̶�>S���Z�	.&�s���b��j?1_��ǡP���k���ٟ�
�x�`дY�!�n��6f�VJ�?ff�o���n��0�����6l�)�7�B�u�yMA�Ѣ�&�m�>�>�Nj��#4J%���&|���
E]ۊ:��i�2g�0��io*�6zX������h
+�҂��3;���1"��2ҍ�+O�?���K��ja����� ���Y|��n�MH�p�A/�LsI5��cu�*ΐDx�!W�
{�|m�p�q%��q�eh��r�Yb�Bt
M7��u�A-�
-w%5��,x�+
�z�!Ί}|%��w�pȩ�xe�Xx|Y��y$M�}y�A��z�5��{�+=�}5"6�~�{άq~�p^�Q~Md��~*XŸ�~,L��U~S@��~�5��
~�+f�2T"��P�{p�U�Ip �<��dG���X]���'Lz�J��@��ς5��)��+��g�I"ۇ���{�~�o��e��c��,�dX�؈	L;�o��@���}5��^�E+����#���zЩג�oy����cơz��Wܝ��L����@��E��5�����+��
��#N����z��O��oK�/��c����W����
K՘$�B at W���|5��%��+׊��#x�A�qzt���&oM�ɜ9c��l��W���K×���@V�� 5�����+�@�)#���� q���h�f��j�[Ű1lmPʪ�npEХip�;
��s
0�Xu�'���xzŒr{�qD��o�f��p�[ԯq�P䩪sNE�t�;=�%v�15�x�(
-��z� W�W}
q(��vsf���v�[���wLP̨OxE뢳y
-;N��z11c��{v(_��|� ׊b~mq�C|�fL�o|�[y�[|�P��|�Eҡt};O��}�1���~/(���~�!E���p޵�f&�B�p[Q�/��Pt�ہgE��S�;P����1��ƀ�(�Ā�!��ހ�p��,�Rf�O�6[B�5�Pc���E��`��;U���1���*)��^!�H��p��y�`f
����[>�f�	P[��AE�����;Z����1ٓ0�U)F�j��"0�΂op~���7f
��![B����PY�_�EE����;T�\��1撠�C)k��"d�j�pm����f�r�=[M�,�1P\�Ǒ�E��S��;`�Ћ�1�'��)}���"��
��Ρmf���n�i=��p�kq��r^m���to�lVu�rX w�tD
y�w'0�|Yz>̾j�qźjl�r�`n�t��p�u0�rnvgkbtgw�WIv~yCtx�z�0b{x|b��h�|~��j�|���l�|��^n�|�~pp�|�j\s}AVtu[}�B�w�}�0z�~l�;fׇ
��i�
-�9kD���mh�5})o��viNqꂿU�tX�BEv��=/�y��VǧeP�{�qg�����i卞�|l
��{�no��hLp�(T�su�SA�v@�Z/ryX��_d
�ִ2f}��}hƖ�Mk�/z�mt�Lgdo��jT3r��xAKu��I/8xσ��[c&��5e��[�}gܞr�Qj.�xy�l���f�oD��S�r
�d@�u��/x\�
ębp� �vdܫ���g%����iw��y3k��ye�n��bSq��@�t��o.�w��U�a����d`�R�f��W��h�-x�kk�emn)��R�q�\@?t@��.�w��Z��t�f4��u�h���v�j��xxm0x�yosekz.q�R|{itP?�|�w-�~�zK�'r�p{��s�qԜ�u#s
��vFtgw�wtu�d�x�w*Q�z%x�?E{�zb-�}�|X��p�z���r'z�ssj{@�(t�{�vxv|c�wy|Qy
-}>�z�}�-R|�~H�(o���Yp�����q݃^��s=��uPt��;b�vS��PPx
�<>Ay���-
|0���m��{��o���p��z��r ��t?s��^a�uQ��O�w+�T=�y>��,�{��¹�lu�S��m�� �oou���{p���sGr��latq��Ovk�?=tx��j,�{
�@��k��
��m�ܖ�n��l��p��rxqؔM`Ws���N�uȌ�=&x��,�z�����j׫��4lg����m�
��om��q�q0��_�s*�9N uI�_<�w��6,�z@����ja�観k��)m\�|�2n��q)p�� _<r��`M�tړl<�wJ�),zy�����}!e��u}Dh,�9}�j��
}�l�pp~.o^�~�q�L�!t";��w+��zU��{
oK�j{ipϒ{�r>�|2s�o�|�u
]�}@v�LO}�xT;"~�z-*��|L��y(x�*y�yr�
z$y�
�gWT�aˢ�ĮkTd at D\dPPp-HG��&]�30���;s�Cg(�� 1DE�*n�6ܵa�z�*�&��<��//6��

�O?��Q}�0$	8
_��{���[w� �/��!f�UmxrI
�WB���5�(����)2����.$
��5U��o�}Z�!O�O����q��m�����
��>�>P�3��ĸg|

�,�X񦁓�`���S$�>BG��
�DǕu��#�i��#��܌-�`
��xJ��!w����
م:��(�����`[H�W��eQ�2U��FD�����`�|���
:C��d���2��~Tv���k��dEeUb2�<o]�^j���j'{@��s�Jɻ�uiW����ŷ� ��o��Ws�%�PFU���V
6[f��
��r�uOC��U(5�?���"/�/��b��;��H���-O
-�o�_�%��{�"bHk�&9q\���W:���r��
�&�G�%2.i6�D�1�%~F���+~Z��C�?��
8��V��
-�2�#�⮪����
ui^#v
-�NL���؏�S���E��Z�Ln�Ö`���=l
�va�;(�>̽��p� ʠ������~��[��@��Qd��F!��7��H��$��������	����#��d�Lt�!BO�K�*��G-i���C��r�B�
.�U�l�mO�>�
�,B�2W�<+�3�6��7���ߛ��@��

�)�۠&KO�
0ޏ� ��O�
igm��82=D� �4FB[���!A�Ib4�~����Z�� 	*��fz\��O�t��F&�����ӝN&3x��F� �[�H��j���z��&3n14���b��M� �zB��!�
��|��+�
�

-/�hw{��V�\l�s��T�j�g�?қ����۟�u �깮�D�}û�.��5�ʺ�(wM�	��ұ=�L����j�e�o(u\���
y�P�X�����Ƣ8�p2�����23�2"uh�0
 �;�(3���-ybݷ�3����Wd��sF�@w�	�,��8#���!��H*9��)iF^
-��P7��D�g��3I�33D_����)�J�QNdO�m2�t�a':�=���J��.�۱�
-s�`d��+�uu�-� ǵ�i�ȵ\L
-�kw��/i���&G�1|91�:H�^��
�gW���@-� E�if�?Q��F?�/�Kv��ř�M�kz�݈u�N�0:ӎ3BJ]�PU@��׊VV�z��D��PC����9>R��Tl�{=E�Y^Sc��yjN��9����6b~mwj

[��
Zl'�d}��[�Y�ގM�:t
U9����WI�-#�d�=�sѣ�S
��I�Ku�Ʒ6i/JO{�s��{��c at 6o���P�U,�'9cV�~�M6���I�Q�1�W�wo��T+�ml��F0��\�O��d��?�o���i��4��M��4M�C%�H�f�M[�r0p�[�
���p�|R�’��/Ld/_c8]�
׍��
�YpF�KM(���Ewo�
@�jj�I0/���k�ad[�H�>��|/ѓ�L��
��|0�0S���VR��ׂV2C�æ���a��v��4x��,'L��82��'�7��&n���&
CĿ���f]9�-f]i<?h��_��]�ǿ�"��a���5!�	�+��C�Q�O�}D{�p����՛�x�էɰ��i��X1kt́K�M�w:�h_�Id)[`m���:��'1��f%s����7�^V6,��0���|����3���3~��+�䔓*o؜w�PPK��
W
��{�W���0�.��
���^�Mq��'r�>{���T������a��4EeNٟ�����ή"�V��_�ǔ3���t�f6���5��ҷ��,� �jP
���6E���x)ͻ��U��Su�@��6M6�d����������F�����V��SˬG���Ŧw�Ơ��u�y�@>.���TȆ���V�Odj�?#驺�syc���A)w,zl<��� ��ـ�B��*��7�i�j,\���P#���;}}�~��r4��fx�O�"Zh���NM��
Be�@�(7���8,i���A#F�a�N}����qǖ*�lf
����Z �ۋ
M��2�HB-����7�߅�,y�Y��#p��9|��
��q�����eے�NYƐ*��M��}�"A�튘6؈U�,��ۅ�#�����||���(qW�,��e��s��Y���!M�����ANJj�e6Ç�,��}��#��5��t�Pc�jO��f=_`�rh�T��k
H���m�=o��p�2���s�(��Hv� "��zbtu�5k#j�� [...]
^ٟ�t
S���uSHt�#v�=_�.x02�y�)B��{�!
-��}~s��<x�i'��y?^W�Ly�SV��zOH-��{=:��{�2�|�)p��}�!g�
~�s@��|h���g]�OR�r:GA=��^2��)��$�!��U�r���
hn����]��
��R��y�G��ƒZ<�����2�3� )��h��!����r��7��h/�ۋu]j�R�
Rh����Gv���:<ِA��2�v��)҈ƃ*"-�=��rY����g��<�"]2���$R1���GD�T��<�����2�䆡)�?��"Y�ׂ�r+�0��g��Ȗ�]/�&�R
�`��G;���
<���42��^�u*�څ�"|���/j	��cj_���e�U᪹h
K��$j�A��+mX7���pM.=�tsk%���v�
��\z`i���j at _׭�k�U֩im�K���oxA���q�7��ts�.��vp&(��y(6�0{�i[��p�_��`q�U���r�K��5t7A��<u�7˙wz.���yQ&��c{V��+}di$��w_O��w�U_�vxKk��x�Av��y�7͗�z�.ݒ�|&̍\}[ '�K~�hꭢ}9_
��}AU-�)}TK4��}wAd��}�7�~..���~�'
�v6 ����h����c_ �z��U��{K
�o��AO����7ԕ��L/���'A���� ӆ��h��ʉ[^񧞈~U�0�jK���EAC�ą17ה�1/7��D'r�	�b!�k��hn�/�^���U�u�K
�ʊEA8���7͔9��/A�O�7'����!H��AhZ����^��b��U�ؐ�K�'��A<�g��7ۓ��$/L�͆�'����!r������h`�JjNc��Qlyf���n�iMy�p�lf�sn�S�urq�@�x u</{,y��eEk��g�mE�j*o��l�p�x�n�r�e�qdtR�t
-v|@Uv�x�.�z={9�)b�v�"e�v���hwl�Ej�x6w�m0yd�o�y�Rr�z�?�u�|.�ye}S�i`��Y�jc����f6̈�h��vRk�yc�n�gQNq�Y?Kt�S.Jx�L��^ي���aɉY�qd��%�vgf��u/jO��b�mf��P�p���>�t(�o.w��
��]^����`c���CcH�l�Vf+�;t)i0�a�ld��O�ȯ�>tsw�[-�wn���w\-����_A���Mb0���ke#�SsShA�!a7k���O|o��>#r�
-�v��0��[D�n��^a����aS�h��dL�%r�g{��`�j哟On��-=�rf�v-�v��m�3Z���p]­
��`��܄c���r
f؝C` jR��N�n�b=�q���-�vB�w�~o�`^��q&cc�r�fB��ti
q�u�k�_�wIn�N1yq�<�{u8,-}py�mjy��n�lp�ptnR��rp/qs�r_;u�tM�w�v2<Ty�x�,|~{6��j�tn��l�uf��ntvT��pEwFo�r+xF^Jt8yZL�vkz;�x�{�+�{�}6�
h�~4�lj�~F�(l�~L�Fn�~Qn�p�~e]er�~�L:uM~�;sw�~�+�z���f��
i
���k�<~�m*�Rm�o_�n\�qǃ�K�tU��;w&��+�z@�ɮoe~���g����iю}�k��:l�nH�[[�pʈ~Ks���:�vw��+�y��Q��dX���f����h•�}j���
Շ_S ��VN�u��1���X�DY� d�0�@�/y{��e��`�@��=�P�����8�
-�
-���x��+����O��pO�T���+��g���xjZ�@���c}9`k`cTnw�?�+�^5�����j�䤢���
T&�o
-
�l���E��x9�
{�Xf�Pg at C_�[�G�=/�5��g�4��ʥ^E�*�z������	��5�#�p�
&��X��s�Y>���>��@?�n���C)�HKс�#�Eu��$�%������`^>[�
-�(?`~�^x ��0���� _�+�O��v&"Y��D�>s�5x'��]����~���-��i�f�~�>NF"
P����� ^O��G�#��
�ǖ����0�<�7�ӆ�7
�:
s���XL��!kݱr�
����x�{6�R�t�"+��@��q��*�7k�1��U誘Y�}(��~
\H��`J䞂��\��
-����5�2[{�F�;�On������ݦ��
�
*C�{
2H�
<��N-�S��2��Ur��u�UKm��5
ųBu��
-}�����3�!�J�H$�
�#h^Qv�0�q�U�Y:�ʫ�a�Z=V.���}V�Z��fs�y
����֧�M���P�8�:�x-k�ն(+�rީ�G�S�I�Э����O
���w�
�iι�9јy��������&��z�8,k�.$��x�=rmRM���R����u�Mb;d��w0y�
�2֤�T�{����
��WƊ�6m|�+�8�EC`��
�Gd]��Mm��"��W�rS禜D��~A���S������	��+�G6W#��jnA>p�� u�w0�D(�MHO�B$ ������vKѻX�� {���'V���'
5�c

-
-�sh�
]T4�I��
��D�G�ãTD�(2BNlz�9�eB_
 ݫ.�#�J�U��bG������ɰ������	�P��c36����߅!�3����?�o /˼�	��4Ta1l-vKWZ������A�p�ɾ���<���>\�Щ��ހk�a8�Z5$�G���d�W#��{{��ߢ��!	�e�8l&�V�
lu4��ʚ��@ԸQ��������WJ"�����
��쎛�����)�9(�6�g
f
�y�'�1?�J��L)��b���쭢���l��]4�L�kۘ�Pp�u�ﲹ�)nCA �Ŷ+2d���EH�'��H�m&Y3�u���ѷ��k�ѽ���ӭ���1��n�]�_Z�<ڮ�Rvӛ���pj� m9G݂������#j}d��A�-u ڠ���
-�0�\C"���
dhK>م�����ٸ�:IF�q�\BVhF�'$�[I�&3����B��t��K\ �D��'�`;�I
[�"��%�#���N���\����
I
-|?�a��8+�ş3�"-A��ש�_ZZ�K�O%u6`����X{c�ͯw1�
���$���+��O�M{�'���E�],�j�z6���+���~�
�Q��k	a=�_���/E	��q����bV�k��&S��7<R5�|m[N�S�<�
T[�'���c�֝"16`���f�i+m�Ԃ���
E��h����6��=��2%w	��\W��w3/VWx�G��k��	(�
+��K6\�G��k6ygf���p86�,W	C	~�����8
�y�q'
Sk���3��vI���ժ*�/��kffԛ]��_M����5Ɵ�$Ϲv��3����\�2
�e*��^\?����|�_��cj��1��xڶ+����em�[�8�
��@��r�1�
��3�4�6=���
�v�׶��
+�f��5�R���j�W����u��M!\��7c {1�
'a����`&y[8#��H���3��Ci\OR<y��0m�O�y3lN2'�\N
`�́QSL��'�}�)�R�찧�R3I�w('�g���V!��pG�Je�ضR.u��.��j�O[GC�����d5�a��L!_s��d
݂F����\nMͳ�&ֹj~*��A��%y   ���2[�\���f�-:H�Leyby �
-� ��}��s����-j������5+ڲkE���Z5׺ֵ��ޛc����[GS�J��o�
Ť��� ����+���unR�Ɖ�o���Q'�j
-���9y<�i;M����B�]
-���Y�5S�A
*bPW#�X�~$u2�ξ/1�a��+���` ����cv&�L/�0�̰��;t)H܄|�E���9�1��ݎ��j�Ɇ'u/���qvC��|���\l��W���ja���C�m�^~nc�=�=�7E�m+�O^�	|��v�d�,�<8L�O�j�%=���
Y0o�}�ď��vCB�W[�K&��I>f�g\"�&]��KOÑ:�
%ije�B>�%���j�:l=��T1e~��/�ߪg�
���I
0^Y��V)�<�^�ϑ�%
-�զՏQS-W��GpaθD�8�ߠ9�D֑Ճ�XM'�
-��U��J�]I�"��mt��e�uuE�)��-3`�Ҍ� SoO��
�� ������6Ju@$�Z�Z��ǚ����;���o������a��m>݄92)@m��{��������
���>�-�V�|���������WU�>r�$Ӳ]
�qّ¸��z�EYuɔ��>�GT@蚩
�\�'��}њG����9��mp.d. at L4
c�&,��r;b�
ӂ���d�l����t3�ݦ�]Q<�
b��-w
��
N
�k��	k�
b�K�%����H���@
j��"�W4�sf��|A�a{��8�c�%�J@b��W���\��E���':Ehs�ř�=�}��9fǹ��T��W�
!3ߔ�% 
פԘ�]YzĀ&X
I
kWdP�ي
�b�]�9g���bI��i�
����$ �O�1wu_)��x��S$P�)m/�UI
�.m
�psf5�Uwl}oy�h�
 4�;=DU�IKS��DS�j�j:�?�2�*w�0P��4��o���+G��4O6�j�eu��
�H�W)ϛ=���ݮȆ��s�51��
o���k���a�I�ӽ֒Wo�0�%>��#}?V�5N���_�����r}��%�7���
-�Լ��
{�!`�D}���K_�4�
-�!���Q\��Hҽ��zȔ�H�N�>�uA-^Ჰ�bg��%+k�5���8�W�	#�wi+���q��0��k�hc��uTT�[����`�5�Z[�`�J�	&���-��v�**��
cs0��� :�-�7���o�3
G�(�Z!�
d
�
�
�z	Q}v��x�'E����}��aQ#*��'���vi�Ʒ|'i��n����˵Y���;�eR{��E�1��v��i�k�Y��T�2����4o�/��;��K�
�
|O	c��
-Rr_��T��'�U�t�Kyγ�z�a�L�
=
z�s#k�)��|O�
���Ā�܇��:a�x�im&��&
^c���ŽoIѓ`�
-���W��8�2K/�ױϬ˽���^��i�����p�u�����O���:JD�:WtG<Z2��]uyy�+���0��H5W�?16א	~u��[4'�)B��rj�X��G���>��<�8Y�J]
-
Մ�y�iZP�-|xm
�4��r�Qe�`�d
Z�H
;4�S���X1̚�`��w����p�u>�7<dE,]��5�J�!
���T�%"��
�7%:�	-+�6\�w�����O��1=�zs��[ITNX��)bOIUq~�JY�����鮦�t ͆/?��w�U[j��+ϖQz�U�R�
�'d(�_���X�q��B�y��g5m���V�e�q}��J��sg[�\[���>�	H�2 
�<?\�`��L���8�n�/�j?*��BgK�ߩd�}��d��"KK{	�LT��k�a�(
�·t=no��4���i�H�A�-:��s0J�
ַYa�<Sebv]�
-�%�;�8;2�/+B�M��q�vs$`ى�Y4/�\ssi iUcd���U���a����fh�6ua�P�����&>�%�C�d>�zES�?��+��&��e�{�\�Q>��+)�
��^T9Z�P���F������� �V+�@������l@
A	��B�
-r�3���
�L2�$��
$���x ����*,^-�ڷ[]��<**�R�������I�<E�|N� �B���j��*�K�=׌���A
���ua�2�%V���/�.RC��
�v(ݴ�ܥ�Kp\��	t!w-<��
��ar[�fA72�:%�E;���),�Aj�&%yޑ$��xPM�E�@��Af�Wxx����M�%|zW�6�J�
i,�o�V�^>npdk�
ŻΫ

�:�������C�������>�
KXi��<�_�TT���Ֆ��q�cs�.�JmZ�E�Œ����:��^΄���hsVIbm8tS��X&^ a*Ɋ���n�^�m����=A2�s��^
�mICca|k��`�K��{��"Y١:nf�,ڱ�W	x�_n~�	��
-!f�睥��#�
��A�ɧo��
(u�
-gį�Vg攷���E)��?n�/ؠ�bd��S�u3�Q��Q���I�B`�\��C!���d�
-�P�,���2QC���[P���һ�n�`��
R������XYU�^��'�,|Y5
G�4-}�<���k�C���fގo�ۆ3 �����7��%�R����/4��!=�a�'��m���fUg�L���(CfU]@::&��
-�wo��߿���D[D$��<��H�׽k���U��*I�#;He6�i*��80C��
 �T�N/h%��
u�hvL�5'�ƭs*=%s+�:V9˲O�%����(LWӖ�s��w��n0~
~
I`����F��嵃v���&��K^U�*^�6U>,�V��{�:T�5zG�Fd������x|��4Z�ٲ�� �u�'�ʦ��"��Ww��[��f^�'0X�cx���������2��rK�J�J�D�������Jm��B�|CÁ=�55oc/�����h��N��L9�'0�jI��.��� ������ =$!_��3�s�^�>pX0�]S�c���Թ`gi�9��Q?�+�,O�|ek���kC)6b���f!)�,�M�����jQ����Z�F��_ ��Y[-�ۈfiv&���m�H�!�����`5o��I��xu�d
��P#�F�
-�P&�����h_2�n�nm��MsC�?�������w� ����O��t�[P�k+�j��n��A	��ǐ���� �H�ځ��Y�*�z��ל`� L﵋TL��0������1|w:4�4o�����(���%����j��̨5Y��J_���|��
�f�����
�y�l0���0����D��O+/�.5�T�"��$8��[g)T`MH��?�Ɠ��\�<f\o���-1�
b�y^�Q���E�E����*׺����e�U�.�_3P}7&^l������X���x��V�MCG| ��0A~�����
�
%_����o�
�À�c`�4]~rf
�5��o���{�/DRe�)��R��'2:(FQ�KL�U�Du�4�9��%���O�
�'����E��Gts���Ӻ|U[��nl�M�Ӵ��
-���/8*�;,��a���8�s�k�
��~!�!�@)�
�֧�&Ñs<-�s�Z�•�2�Eb��T�b~A��A�}D�ʺ0��S��{��{G�a�
oqB͝$��F8���z��*��d���
����:ٟЕLza:J��ea����
���q��
��T�*�1�"}�!�@��k���˳�߬�B/�lEy�~�eK���\�5��$���O�=h���Z����͓ނ9
����`�_��������ݎ�[�9�Ĥ���u2B�\s��
�u5=��@�Ό��p@
�z	t
�;�*+��.��Z�����a]�1��l�R�S���o�����
-�Кr��H�Y�K��g�<�`��7/�|�+4�A���*�K֨8���1��%�
�-1w������?Ɩ����)�r���~�K0�;h���+f��g:"&�6)�r����p�c��y�B��6 b����#�&l�:w����>fިÕyL/�\Z������j�@  Ν(�W�ڢu�����d>�P"Y��d'$�$�ʗ��
�V�J+W�>pG��[��^���Gڻ����2|M
5��k�ci{�
�ZJb��ILF<�fB>�P��C��R7<]'�w����K����QXb����*�
-��$f»��
~	^�̈́:�)�]��}�p��A(��+�R���X� zE����;b1t�!
���9�ݠ�B���j�`�
d�>�
��!�L7g���h
%<d:@dA��C�
�<�@��߈���@��.� ���
��Z�j���@pC䂻Qab!��
��M�b�q�q��z�b��ە�3;����@�A��K�$�˰E�
�N����T��
ۢ�H=j�o�n_a|�1��r(���'�m�r��Q˰�lp;�Ա�{�qe�� ������
=�^ՐYc�I$�ۖ(o%�
��� \�-�
Kч�޻����Α�v��K�W0d��ngXg��IF�~������X��QH��l8'Kr������gJ����
-*Xc�Z3}�E�ٓD�sj�d9F�K�䛉J� �
�I1{�V!xnK�-e>����7n�ׅ���
�_Qg1�R2Ǽĸ:@�n�\�K�X������)�'�WI�C0hݤ�!XL}����
4��l5� Vh2
��,��?��bLb#(sÀy�tk]:ibP�_"��2S&�F��
 ߆*:�/~���5�l�6���fݻ�	���Ӡ��v�<N�E���"A�M�B���I܆=��ӰD��!5��o�G�
]��Ml[U��Z~$g"��H�U�(�>�(l1���u��;8��q������i�7m�L[�@��Wxl�<R�s\�]1�^�>�g����	�Y<�#nMD��yY�ZO�E�X�;/C<_��IfG��u��R���O��M�++c�7�S��
-�4ƊaZ���ԃ�
�����u���	Mߊ]�>]o����/�m^&=�Nh̕.�g*>d_�$��
-]�k����oj-���]��w�z��`��g`�@�XR������
�SZ^6�u�V���^��o�����g��~X��Q��	�濮��a%{s
T���p4{���HLydW�)YU�&R?� �FD�/�'�g�H�7yO��G

-�S0᪄�g
:�po��)�-.XF:�
�e�� �*d�i��G{.㯙nwn.�t���Y���<�"��`����7�d�
�sSC���!�x$��g��:S����X 9
��Y������%�r_��']4K��
��.
q c�Yv�.㏢�
M
r��m������*ADbW냊��M1�Dq�by
��9���m��T'b�u�q�7�O�r�����
��}�y�XK�8���`����微�.;������~1K�}w���ҭ���rB;�ҏ�ޒ
&�6	�Rr���*?j���䆑lu��g�ICk���M��|���v����h�ZY�Hn8�V��z��Q3N?�?��֫zGP
������5�|No�(RG�J[�5��&Hs)qq}^�&2���n:z����ǰ�kFmP�03;7�N�s���i+Z�iӍ���	�^��z�s�7�T�m ,�
��zb�@��p����2�2{�9���6��ʄ��/�=�
�4�)�c���	x
-t&8
�3��B��-�(;�^S��e���dSy�7yG^�H@�Es��7<�A��Q|��h�[�\j���e��Z�Ҏy1|i�-��<C^ow���5���pc�
�P_���<.&n��;ˌpa��[y�y�$۫j���!�
ѫ�$E�42�˚v�?ݴ��^�wnYg?G��9c���K�+%�<qWŔ��z^}NV��]QvS{�q�8�ڷu)?
WV���1l��%�Wy���j�p���0#��>M�']�����|�k!���3h{�&��m��5&[K�i��K%�}UE���k̀��u
hT��[�*�F���k kO��Z �e�� ��e�v]
G
�ؼ;�G��L��W��[����d;o��o�
�3x����� ��Y{OEk[@��|�l��2��섐���^򒼗��F6a	�9�u�UQ[�E�m�'*u�WA���w��:^WfA�w:�R�c��$DZ9-N�7���~c
-�
-?��;�A�34VfO�
�����	5��*Dv��Ue_�Rqr�_����pM�v��]���{�қ[;��f�4�(
�c5ڑG����d�x�����E�jO����-n
-|�
�g8��
K��ٶŲ�]�{r3�J�(��?ұ���q�l��u;S7���qWA}�ǰ�����=��o
-�n��xg�|�GCT�p�T�aH���͗O�0�U`llڤ�C�lt��0�j�h�~��pڱY�_�,x��'�,�IU�jn�\�[M��
z��
���DB�b<Ô��]��T7S0C�o�}�2�%�s�F͘�MQ���
ś�!�7f�Sѕ&.!m����Fk����(+O�
���Oȏ��@
�W�1��f���G
�0J��Z����-#�=����q�b>@@
�g�IxFz�|�����޴\�E=�Y�g6�at�Һ*��SY�����5��T9vh�
��	�%2{}n���}I�90�v zRf����8kO�ʼ�
�jV�o�:*�x��H3�_	
6�WWx�4�\;�5ju���K:��:i�7�rʶ��Y
�Ad��~X����:J1<����;��e��
-(�;�M�s���rlڪ�U[y5�����vw�
(k
--��Ol��
H���WeG㐣�݆L9s����ŠFp6���i&x���Иp0�C2�}�Txm�C���H#�ѽZy�ڇ�m{��+�E�Aa
����W��d
�V�Sy%�ې���8b�ש"SLL����1�4�$B s��&��B��j��&�d@��Y��?O��+82}����-D^�����ݒD��(��P��R��{���Ѭ.� �s��!�$��4��P���ڣ���o
\�i�(�����#�u"��D��8�
-� �:�]�C������>�6����ڒ������׶�*��
����m at 1GQm
�lìOrus�g#� tk-ۤ��<���v+l�U�w
-]�@��V9�9'��3ի��	
�P�?#�0eD�a���S���#�[%�����LY����ƉU��U�_n����F��η4F�/V[��&+�;�k�+�4e[D7\�~YCm[�D�����������4M��
�n/���9�0����:/[�o��`�K����(��
-��T��o��r
M�8���FECw�LhT��l�������
�;=���L�t��^r%���|�TXN��d�R3O>�
���^�
����G�)�
y����
ۂ�2��b�+�Pg�DW�B��;T��
+�4Q�v�����{����9輵;���!f��6~/ė|@�r~��E�M�$,<��`�2���+��oM�ҿ$ȵk�뤆���)<$�\nnu|�LX ������+z-]�:�r"���Xꗺ.KW�;���–YFC�	�:�Aǔ+�I�U�
u���+�U>.+͋�;�SN@]���
���L U������X�Kx�6
͑8=�*�U��4^q�ݗۥ>S韒�
+�Ż
�e�L��sf���	v?���m�!���'�粈�Y��v0��z�ْ2G����wT�1��e{B��H��M�,�
�&fr(y���)�%
��P�����
Ehl�%
-$EVD����t
o��
\~6-�s��/�/���E���
2<뤪t�
���:���mb��p��V�����n(Q�7:�
�ziZ����N�l*�3��m�i��`��
��
s���nX
-�U��\�b�i0���^Kc�=�!!{pwp�y�
�K��H��&�Ș/�U�D
��
�g�#M@���
1�����&����yf_s�Ir����Ŕ\
�B�c���7�H�e�x�Xl��tbu�!��hI
-&)�� ֩�ršbp�s���;�Cu
GF�q�~~c6RbO��'l�"<͖����z
[��T���0}�5y   V�|E�W�r��ф �\�2�aAA��0	��/ɷW&a�A
-���AK]מ
�q\k�P���U�"�Jѻ�?�W���{��j#�'rG�^���$U��)~V�H�D��Tup����7��e��Ê⚊��R�"�I��^�w0�^�+m��O��X���iM��i�-T��5ȝ��'���N�]�~{e�� 
��r���5Ճ�-w��A������-��V��YF~�Ug��BO�Jt�8y�0���.{K��O�(��vlJ�	u�S��0��փy��k�^?��6W��c+�
-�C���l�]
��E�ko�%���ݼ�脦���� g}<p���?��j~�t7�Q|/y	�u�"-�Q߽����{ޥ��w
�iN1j2F��c���߀9uTE�����ڵ粎
t������
�;�HC;o�sTH#d��
����}�[aT���*Ч ހG�X�;Pp�i�t$V.��x�P
-��C�_"�>�h0�[[���tVۃw,���U���^|}�X?����4:a<X�
s��%���هU)��<�@Z�Q�/�[�6���
�.�	�
0A=��f���x�Iҗ��Q�l�3\�P�BoJ]Դ�\>[3��������?,���
ЛMOyI�Oi>�
�'�|���2��k��x��o��6��<J�c�^|5�ܲZz;*�,�1��M;]���U��� ���DQ$6*ړ��
Xz#���U��fZ,k���u���)jF��R6�:��*�hyY���p�I�~��K�SpMn�Qjm-+�y��ɽM�4q,��t0L$t�h!f��
��_�yb
q��X𖠕@�Fb��/r��hf��Z`;k��4<a�%� K�E�b}��9v_Փ�
���U���k��w�3��H��/us���k�`�Ǚ�;3��������$B4\+;�j�K�D�� Z
FF��v��
E��u�{qcʰS��TK��k�
-rS4�,F�S��Q�?���D ��"�u�%���Z�i�^,[U6Pw
���԰�
��S7ž$�
�!�E.����H
���7�^ü���
�u������m[E^����)@Y�MSP�)'b^E�q���c�?�'F����x���m����uym.͇$|��O�Kb�
��1�c���w�Wln��~B
���XfO�yDz��2�MӅ
�B�QW���ci�2�� [
�b},�1�E���w��^��k��b�)�k�,]��wH�ߦ�4�U���mϪKc`�C!��Z�ʎ�5�I�C�W�  �fQ��9�Q�|U���ά�2=��-�I�d����	2_���M��4� /ڨ��B��>oy *��Zo�9��XY��i�����fNP?��1�k�𾠣�� *���_B����u�p�ֲB[�
�
���4X����
��φ��}�����P����73�d"�d
ٮ&�<����ăT�>���x4�
Y��"��G��XF%N�g��t2��S
8.h��pq��܏��#~�
�2�Hl<hކ��
-�aG��-?�J1��p�m�����"��2���V�z�|Raw�~�l�8�
�����4����������
���E�Z�Kݸ���UG�|�B1��&T6���;w��W��ٝ]8���X��y�W���G-����%��r9���Pv��X7i�x*�L�(�u��==��ϲ�͓m
qqZe��&���߰�n�=jc�i�o��@��
��x/{Y���/�r�pՓ�-�k�b��(n��
�J;7��N]�
�	|ט
9^R��,��q��i-�j5I�~Wfǒ�;*~x���F�M��u��ò~�7�����S.0.rm���4�P�M��X��
-d����6���͵�N|b*��4u
v�v#3�֬ަq�V`i
2d%�

�5���0����7Ӝ
���jx��9��x���!K�hF�	bLb4�Ezcl��X�>�eҢ��(j
=����~�n$��
Y9P�K���C‰/�q䢘��&l���r��S�� 1��|�8��+�����ۺ���p5q   �Z����(
�QӸ�AX��!\�$$$C�srL2�$�L��%,���*OQ�u��Oł��BuUX뵊]�x��V��~�n�,��[�|�nC�
--�bY@�X?(�e�92�"կ)f�m��6@>��_�|�Xȼ
���L
N�+VJ2�v&����ǂ��g�a:y�*=>�C�,꽅�zq����wΣa���V�bP$���Ԇ3H����*
-|�t�c^�7�C�v��f�C���UʆN�\�A�
X�)�M��Ȋ��Q�r�K{���Fۏe�"j��%��h��C�����i�24��.$�Ҳ�ɹ�D��Ӯ�?2�
���]HMt���a���PZ�+C��9�J*��_r%QN�H�4�r�{W)�	|�em}�^
�e
��ٻ
-�.�v���_.e'T�)�V4��(F��o��Ugzf��0�=�r��ƣ�[(h��GjK��Ң��y�}����%�]�ʟ%��(y쭬��0�����L
1���s�R1w^N�J�O�7�
��نy�oxõ��O���`�i0)�¿6T���@J���JL#��״��C ��[!�)��9!���w�+����@,�&T��Q�0GU5����a��
-�5\1(���<U~�� ��ڌxݷ:vR�Ȇ�qV���t��.	�d7J���<L���US����0ݠL��w�k^I�p2��Z���
���#*��͚i
�1�.�~��x�E \M;.�7�vD�5枤���B��l�4 �&ɷ����͉�Qs�r�k�d�
-�B�2i�N����ğ�'��:d�a����9�<o�=���:�O8� �Zq��]��\�(�p�/@Γ��H�+�nind`�gA�د0iJ*��eW}o���
߶�x�"omz�r��Q��u
�_p=�=n_��%�!w~~S]��Jѯ5V�Q��z�<�L/8#�
��+�������>-�9]���������s�4���1y
3���yʍ����/�	��G䇫~IĴ41��_�35g%@���.1N§�
N�̡�P��i'�7����4�
�@r�z�8�Z?�
 ��i�;�f�
-�c�E�N�O�ri@�D��
�����u{A�6.ѱ>1���_�:,� ��Jf?�/�L��C�N�N��*E]٭!�����mq�=p�)��
�ݍ�
-�c�F�M�H���?�
�b;t�%��
7�r�~�����L&�3>��ﰞ�
~6slD'9�?��6�
�T­�ϙ��^
5�;�
-k[�}����gX0^h�q$W�KJm3�qV/f�̔��&��|�}3����1���s�O[�9�"6��ε�6
�9�K���+�|d���j�8a�&�k��ɐ���=9w�U�ͩ��?�������|�
���0,����lug��z� �eU
,}*�
��e-���^u��G�S���oy��7��7��bC#Q����ş�n��[�,(
��l�^	6���! ���ʌ�>�"�:�j���<rB�a̪�� NfE��
�kI8<*�͒"�e�[�,�A��v
:ks�Cl.�\șc�+��5*�W
���&��ŀ~�\K�4�sR^�?ӕ��
x0v�>biq������2�$V1�\$���Ǖw��kGԣ����Q�� �%�[�����`�ѐ�J�
Ή	`��]���+Y�)�u�!*�5��(H��Id��a�oE�lw1��7�����hY�xЈr���M��y�A39S��cLYg�Bل*d��lQ���
���P/���Džm���l)��I�R�`i��?Ğ���A��Y訌�:��e���t��/�
�y�sn琸�M����>d�SG�&H�P���e*p
���:��v��F���ӫ�}9��|%*�C��d
�ڌ����T���m ؍��θSV��k��q�����~V�Q<
��f��
-�C�B��'��L�H
�?� 6���ǍZWz��jxA�|�+cs�h�i�#a�43���
�K�Zr?�'H:���m�2��A�Ľ
�e�Эd�c�M^��k�^�C�j#,���@D�L2�� �I~tHGǫ��J̀�e��
�	W `_q�Z�b��
-�"�p�p߄CH�� 	I&�d2�L�)x�ʪ��*j�XEtJ�J]�EZ_=@�X��Y�����#>�(�U���T��#tg��E	���U�O4E���]cD��ix`Ff����w0b(���U
-�
�Y��]sA��vj�fh�w at A,b��x#�i���u+����E���_�X��x˼U-�E�W'��_�@�� c�e2b1(��
h�^EN�
�
-�`V�[@-k��b���n�_P����e�:��60���������l�u-'\��j|D�me;��tH�GD�˪&����աD!ߪ�@��M��?B
�=�
r���Ε
t<�GH�8�Jd	��l�M��
�i�lv>Sw��o2�Y�!�;DL��ž�]��򮆁�����˶�R�����f;˷��-r�
�0�ۏ첸�R}�"��?5#��mk+3�(���(.���R���
xP{K$
���~?
uX� m��
���(U$C[K��Il9v���L�"�F���]C2q�.�OI�6�1�Q��x�	�1i��Q�Zxl��e_��)O&uZ���C�j
7$
6����} �A~��8zX�������m�b|�n�^i>�]��fQ����Bch�JDj^��
k��]�r�ou��#I���h
-8ЂTc�1)�ü��W�+�-�*�kx�u��e�I�~���PE�:���LR]
&��t-¬^�*$M�4-�b������B
����c��鎳�A9Z�u�K�Dۄ������T}��p�p;dz��x0w
-�
��7
? r���
�lJ�����U/�3B��K3h��f@��j�m1��R�זD*��p
����֓�2��O�(
Vv��
-n���d���mMAO���;�1�S`�M����
-a6��)��N�˛,��_
-�l[c�.H�і%�Ŗش+#]l��c�ٶ����$ �s�~
�&���b�~In^�Y�6-�쪸ʟ���/F�R��a`	�����Ei|�o���$Գ��h:)=�k�Zv��6���g|V'E����;�R�����^�t\"ZW��
-Y���nN'⢒���Li�K�[��!6b�
���jnf�$=�+
*�.Ӄ���
K�vI�chP�*%�z��ډ,1-�pGs���D�8D�C7x��&�X���8e�!j5kL��4�Y��
��&Xq�� �Y�LA)$�]�s�_g�^
.��[����fx���́{�s��Hq�
��	������o���݌�� K���Fa�a)1$Poגי�DO̐Ń��w�q?0
$װ����ޮxYZ�N��8$��8��
_ُ$�`�l�cZ��6��ݐ?�
ȇY�+�0�H5z�ቔkQ}Ö<i�|�>!���~QQ���2�&
P{B�cH��|��7g�z�9^sy��l������u^�A�
�;�R�ck
U�>�)����v�Q
�
8�:oV�c���s�K���6��8#7�>^nNk�_�<w�*>��m�ڹ3���"Ψ��Ţl�`����
D#����
����ޣ7W-��#���h��� 
<�L�qf6��6@��0}����ك�i���h�� ��
�ӛ��R�$�0�a�p��s���T9��˟�	sJЫ��lO�
�I�w7±A8j^Տ�ork�l��17�x�&��e���o��U��d!SQ2��b+��(k�m\5
���/ [...]
�_���߷,����c��n�$k��a�����M�=U�lM�Q���"g��Ɇ
5iЉ�5M�%7R�%
q���v�L�S�G�[]]��M����	vK�s�w��>���q|�
-�7�p�L=��#.��[��CjϨ��^w�UOl���Tv�Ce�����������]�j2��0�uuFf�ձ��ʪ�:�AƆ"E�*��S��'_
-� !��
Z�:���Qpt��4��7�rv�윽Ys��9��{�<����Fr��׃d�+G1	
F�~ /b�m1�&��& x��� ,�
^�
�LtZn��D<�t"��7�4�"���ף.9���m��-��6��Iq�5�����5.1g�)�j�����������!0��OD<%n�{?ns
����
����8�Y����F<�p	���r�wPq�D��!\ ���F���KA��^���Z�Ũ�ˍ�
�R���휃�E��Ꮵ��
l�a�������?��aZ�뵘lt�U
��t�W�z������s1��͘iea1�����M�1�g͞���v��w����
��x��e�W�m��O�V�����u�m6l�Ǧ�mav��ov�u��m�w8�������m�^wO/o�}��
��?t���c�N�
:|���s�/\
	

�u9:&�J\|B"
�D�1X

 I�dJ��Դ�k�Y����y��Bz���bs�<��D(K�2��T�*+���RWkjj봺z}CcSsKk[{���������[}��w�������>

z4����g�?
�x����7o߽�0���6m��3fB|=k���s�
�Λ�
4�|K��5~X �p���%�&�(�*�,�.�0���<��6��6�4^����
�?|�X@`P�sB�#�b�$ PX<1����A͹�O�3�l.O I�r���O�S��#?UB�P'
-�B�P��T;��}�
*~>22
-E�OL���_�~���[�������� g

,v�,�cy]
�zF��l�(��}FVύP�q㫪���J6�A�$�*�H���$���Ρ�����`v0;�
�f�×9�zL2���ٞQC|�Q�M5���x��zA�R+��Ԕ k*x��Gj�sH�%Ť^Va�ݼ����r~��Lȡ�3h��
5$؋�#����2��'$
��
-�,��F�P].����V!���fo��Dc&�2`* �_
'ǹ{#	ݰw%{2��>��aQ�*X��
SV*�5r1V/�
�\�����2���d��L9�x~d����E
�]0�
-��
�^z[�AKm���<�L!����
|���t䳁�,&p#�A�e* �aʁ�'pB�r��	}��1��zw�A���j$���
-�,��9�Kͅ|�-��7\c��L�
Sy�
r���Rꈼ_��bl؞�Ұ�U��KT�U|YB
[��3�@S� �J���Ӹ�!�C�2�)gO��|�dgس�u��
��zw��2P�W^R�d���\=M4�
-��
�z�Oh'�
��7�@�nOP��J�-�y���V;Lg�]f�Γ'�R���j�
^[(����
-y�C
�B
I at l3�o?� �q�M����zۨ{�6����T�և�*?]FW^V���|�.G�2 �T�!YHl"	Iͦ
-~���]��tˑ�ն��:6^��m5�������
+�)��U�
-�&G��͒�ҥ�U	�>IL�ŤSK�`�`�;��

m\�o����j��c{.]w�{]}A�][�U���T�5�䄚T9��"#֑�$-QJ֙
-(���R;�7������n
^���윆����a�:V�V�T����ST at e���&���
-�P�kL�l���vw���6�Է�U8{`>��5#��8-Eʦhc�5I��j�
��ɱUx�(EU��������u=X�U=���ux�}{tj�G
-�����4�a�(=���Gr��(n�Ë���qZ��T�i�����vU�肝���
F7��
:&|�ؾ����ĮȬ8CLNlG\nt{B��vx~T2?�]ъ�����?����:��B':����
����n��A���S�+���w.�"nG%���PB��RBz�^�ML�p�z�&*�T@�� �mH����h���؇��Dc���΢��&Z�T_ Wj
�5yI5���LOї��5��m
- � �һE��/��`v0;�
�f��ˡp��;�ϙ־�A���}��U
�l��K��8��SQC#k�דtY�FU��VEr�AF̾!���b7���E�
|��{�e��
��w��Y�쓌�E��8�T�@V�4U4��<7�I�Ii�����������A(��R��@�����:
j:��8������v��ug����*t��E at EQ��
*�r �럄
B��;� !�rI�C at V@�]��_���Ӈ�Q����5��<�n��.>��U�W
�/)�a�Y�/-Ry%�F���2"�
	InK/i��"�t��Y�{�p�8d�|�Q\Đx �i'6ĩ/�U�Ui��5��gԧye�bLY��(k�e��&�\1q�(h��-����Ev;w��Λ�6 ��!5kC�(x�H��@����
m�՝�N��&ו�y
UF�e�a�f5n\+#�$�,�۾���.�w���A��ڐ&�T%_}ؗ�Y6"�s�
��9G
��&��j��
�ơ���R9a�WL����t~�-��m�
��A���Nv$�&��!	�2p��0t�{z$�?5Z 
uTj���]Ġ��`9��t�&	f,���h�؈!� %g�S$��&T<6
n�cK /�
�'z&��b�p��`F*��8b�(�@����H3x!}'�: yo8�I��P&\���P����{�C��@R�t(���ɓ�ʌ*rH1𵐗��&���d��x'�McČ��`�$f��>��m|�S�~䃱ؕ�$�x0�mq]P��e&�	i�#�eF6AWB~��8��QChi�T�ɞ <|�����]z��[u*�nz!�b�g��9�Ԓ�r3l��q
X�r3"���	>��4�SPh=m@����A�8�
{Ͼ�+\�Ǖ--�F����3a��@��4�M�6�;ҩ'�Z�
��8JԐ�pj��j�6 �
D�z�Q0�'����չ=��;Q���v��(��X����
�N#��0
-z���#��}�
��2��Ң��
���>�ƾ#�Ah��w��8Vw�5�C
�/[�r�:mU�5�f�Y���H�7H�����)N���6��S
P��X�'>�}�<��5ӽ�e�~y'NNdtO���ݗd�jM�
��Z��̓x3�Y��A��dE��CM&�-ڀjG
�o����ž�����>ْm\��-��u� �Z���T��S#%��xG�;�Ѣ�8]�0^�`#�Hƺ����b~ں�n��
��A��-9���*�V��i��TR8�
-��`'�yM>��a�AT�m#GђZVZ��˪ݐ��ETD������_l	�}�m�ϒdo�8�z�����P���c�)���Vd�jG�T
�*��:YϪ
�z*�M�� �S�qK�P�}���W7��K۫Ov*�o���m;C��z�z�q�t}�J���e��V�l��|e��ry
I�t��V2�j)�k��b腳��h
�����?��|��lIl�N^�mz�Qr}�\E���+������ݫl(�[�Xp��1ٔ�Z��[m at _Xi�䮠����
p�� v�f�y�?q�)����?GZ�3�=��@W���	=
T�����2lvsd�rڰ
�P챢�ށz��E



����
���q�5�Y�Tp
-yO�C����R�eb

&��l�[Ghm���
��b9��M�%��>]8��!p���~�{��g���k�l’�B�4�2?ȩV����n���I�����6
-�e%2G-8�o 
��Q����P6n�c���N/J/�F�Q�&=	}-9�>#,�
�+�>n���ƙ�,��Π�
��z,�
>3�'Џ�ԍ���I�����6�
M���o$G������Wd�o�s�f��ܐ�T:�jGyh��K�ڻ)k[��Le���ٓ���#�ceA>V�l�
��������o�iE�Ǫ�2p˪l�Me.{J~I�T��"��C�vn�c���5�3�}-���"Ðh�I'ِ,���kHM"D�[Yj�sUZ�CM:f��D˂�
+�)U�
-��N�a��a␽Zfk@��
	�0�,��"IBL�tr�AlĐ
�� N9�V�r�:��#�Q�1��h�a�
x!c��oD��jԀE�
����
�_�dLq�i&]8�N�L�S����NI��S��/�)W����K�lƜ5�==\�[jTv]�٨@�(��W�K�s�m!fwO��)�ii�L�ڤ���?鑓�#�tɕOL�=�?ٯ������9��,o�9̳��t���2����UA��P��@C6����-!d!��@ BB6�B�ĂQD���k���op��9��4����M��re���9�*��Ӎ������RM�d�0W�:�r�B�5*G1G�R�Bd;
�ib"P'd�h8^��`B��5yϕJ\
���L�΄*nW��2���b�߭�L�)�3t�*E&�'	�sd�r* ��i����@s��?��/=:V�h,~ߗ��;{���u15����k�}6�EnA;��xo��
bh�S$u�,N%��ɕ�8�j��
��'����q/�q�O=�`�S)����г
�,�T���ר�s���=@
o5�-z�$^˚Fk�3(�l�UA�?5(��!�4�
��v
��(_uw1�f�f:�w-�}h�X��Kvz�q��A���O�Q�� NϜ@�:&�z�$B/�
��$Gc�*�8�?���z0�;ߗ��]�/ZZ���V��#sY
]�X&q�zlK�NC���d
P<dՋ�c�1ƶ �ؽ�P� Ҹ�=��Ӷ�1��S�o�<X�8�/%��3Y<I�X�s�:�Hs�oe�vn��$�������
G���H�7�G��8`ݗ�$����1�]�\?�2^OdJ���tJ
�z}�eb����8B!���v���@�YN��݅4wBT_D Ձ}`0��Kw������ͮGf�
GU�
l�,&��3�=m�2)�
���(ʼn�'��qv�c�
�F��+c>¶�G�F������ޜ�
=��;����
�èj��!,�z�5�ϥ�+D�`���C��^����n��" [...]
A�
 (��$e��EU���
Ȁ�ӏ^9���������,�>I�oG�s
}YE�HBW����h���֯�յ�������YTw�L3�r�S1M�O�eS-��)*d`���[�������hh��%؝��j��ӣ��͓��\$|�[��X�RK���@-_��J���oЌ+כ�ŋ8V�"����]�?���/&�����������{���d_$]B?�,k�ʯ������2x�F5�x�
u�n#��
s����
-[�������o�y�D��s?����{h�ow���1,��8	�f�L?��CVA��yE%�
-K.?)-����amU����
[�5�[�ڜ���Ⱥ�Mt��M�0���o� ?�s�}*�Ϝ|-��.̩� �{JZV�u

�(�lIne�C�6�����%�F��Q������n�j̍�;\M�{��w
��5��6��4
��q at p�$��{�{�bK��XQVx�

�&�\^f��A{�O�
򒻭��m�����
.���B����0b��
���@��ħ/��d�?��4m�/�o
-��y0�
�w��A6k��l
o�z�=vV�tbd.R�
C�{,�DŽ4�� ��]@��Г

z�Ӂ4#���L�#y��,�xK|�}]Xÿ�C��
�>�A𵲇�i�6��p�D�1�|܎��,H�ψ���P�
(@c���
�ii@���Rq��2��[eaU^��FR��6J�z��!���`
{��v'���
��f��Q��m�)0}^(�6Rc�$5
(�r~P�,y�9��wM�:���(�^�։gDH�D��ϡy�l������"�0A4�t!5F�5�bl���
”#@��
-�)�ۚ�+Ou�`����;�\�
mqׂ�Z4+�+'�8���bqu2Ǭ�N� ���G��t$����
���F��7
�G�,)�������O
'�6��b��gSo��/+�Wu��������Q.ml���c`rj�($oQM
-��0��rIF?�i����#@���I�_�S�����>8�Z7g�W-[���ܫ��
J?&�[���1Ck\����B�"�mф;[��
- ���7q��D
-�$f�Øt�;Sj͖%q�z��f�g,��;�-�^�
�Q`-}"Ҙ�G�H���v��-
�35Sl�.�J7��o�@��
��
�5�p
�Ng�mw���ٱ�ٙ�mu���*ꊸ����/#7H �NH 
	��@HB��\�$77!�P���x �E�.�o�v��[������O���8������bD>������������)Q���6A�Y�-�a�W�j�LGU-o��F<B��8�4���4��N�_ �
�T�%�w�O_�@����9{q�/��ߔ�`P�ɥX���h��{j*h�Z;��0T��J
�5R�+ ��
4x�|_O �9�g.����m�Φ��	�^p���܀bFl���Y\u\,R�ՍR���J�	��K5�d
�A䉆Hl���^js�l�x��9��:�c6:��-
�?��y{"38�\n����,9"ARU��+���J_��ʆ��Q��$��e6W����}HN��SA[�����2�:7�<v7
�=�DU��٭�٭

��ڀ�St$K���������\`˓�l�V��+ ��h���O{ ��/�y at 6�N�.
�D�OFN�eئ#��2��z�
���F�if��D_h$iK�8uyZE�A(9�peko�R� 8��� y� �g�L��Wm
��|!S�~q�`��`�l*��7��aڲ�+�QR�%_E6����̌�VY��:+B+��5-�� M����@��1�u�q���gq��;s'/9���?�lRě��a�$si�
��hIQAAt>�7k1Fj�@3����\=ۉ� <��'��#Gޙ�?�<t�cz�ЏC��C-K���4�
��v"��b$�Sj���ѭ�^��M��;�ڑ�R%�R��1Wi��
�u�%���������|�ϻ{��<��k}�
)_���=������M�V���
�6�(ƆkF�[��
-��m�
��zw�,��F���p	h9���voZ����ͯw�x��p����o��=3��b����
-�$���ʨ����!G�l�0��3Dh�v��Yv� s��)�F��h�)�-� ��܀n�WK�/o>��u��ߎ�o�
�q���xeP
 I��h1�nzY���=�W�u
M��զ��g��ԥ��'�(e]-gCGi.�];^���ɹ�>�~��o�[?) � �oO�P^�M!=�a
Ǡ����tR�l69m^�rU�4��\�	O��%�%�-,O�]T�B��*s�;�?M���w�+��Pm���v{ւC)��#H������ܥ��O��)�i����h�\L�C.�!� K��'b��1�
����HQs�.�����w��{�ϟ��/�2��
Tp�
	�c6�#s6"���b�I��)���i�+��˰��exV��z�:;�9�

��s�YAn�S�K�G?��v��O������W{����$����a �R*��
��ը��1�o���7��l����	���˯�WC^������kh��+ ���qf7�	:�B|�J�+*�u}B�2#�P�C���Ѧˋ�S%e���*���:�g�
c�Ch�܁li��)�
-�`�Fm�5�{����kï
��
��5���!>s���^���sUX�t�9UJ厓���7��YΆ�-P��7 $*g�z0W��]y�����l`\:XA>�s9�
7<�5'&c�E=ff��ӕD�dyi�x	M8ZH�<Wa�T6T�چ�h��AgEt���
L�1��
�A�Cc�#�V��Evr�}fN�t
�1I#7ܤ�	G��ۆ
-�r;���a��t��)��Ch�H�^��0����
uΆ��c�p�.]���
~x�
^Lޓ(q��Uv�����&ro�(�Je���P
��<_ׇ�{Q
-c7Rg4�tFZg�a��CC�����Q��x�!��)(��04e�)
-�T����1�2�Υ�f�8��E‘��6G	��V�����^��؃R��(�E�֘��Y�ՙ�
�>6�.
����"4F�m	Iz���9��)�d�1��
ź� 	F+)mju�@a��7�g��DfFiUcԝR��ڊ�X�x�i�>6|X�G��/@@+$���k��a�����Qbќ0��/�n�M�ҋ��]%�:c!ר�ZTxY�
��jq4�F�ּ]X��yw�?����=5a' 
��v:�u�]��㌵��u=���,�"�@n9� �$$!�+���E�@�AHGBB�p��EA.�"(�hA�
P�뷙�ӗ}�Ї��w�
-oP�E�i������ԑ9�q�ͩ�[
�q)Q<\U�h.g�Y}��WS(35Q���EJ�Yj)zS
��h/P�k�����<�^~��'���?aS�|�� ��A�
:8}F�/�R�+�����|����cha
-�
4�Y^��H���j��ZU�7

-����[C��1 ?w�<}A�w�{�_�K�yē���]P�m�p\�+�ؐ-�
T�ź
ˠ��RV�YĐ[�t� �X;�-i�(i���7[�9GP�q4z� �g�6����@���0�=4kֈ�\�c�-M�ANTij
��*�A�+7V�	�|��ZQ�4�f��m�l��d/ �5���
�@��
-�ݽ��#�]�w̋���Usri07mN�
w�ˌ|��!W��Q�RQI���c�	fWlerU���:Gg���&{�� q?
-�n.���
�����|f�0�rg$u͚B���8�6���9�A�$�Vˊ:�bVoi
�L�,EU���J�@!Og)������@�v4�>4�=A�[�+�g�� $fy4"nv,9r1��gJc�:�5J-AY�L��
-:J匞Y��*��ϗȭy�5�Zg!W�����6��
���@����@6,
�G����D�OMBӆF`�+��٘^-��+*u�j���/i�u�U
cnC�9K)��7h�����s�z����� �5�]��N�������ٰ;��T d~><lt&a
K��]��VTUu_���;�����#�;st��x���m����-&ls{^i��
� 
-g�9yN�nZ�Ϯ^sw�s�9�
qq.�5
��4�̨��&��J���l��d��2zY
���.d����ؓj0t���=��#ۀ��{�:y�
?����ڈ���-w����~��B�=wB���(��z�?�1G�E����AR#�R�ƙ���6T�P�f�kG5��^C����� s��
��#?�
9z��	��%g������^���t!�̛�a2�Rx�c����,i�p�?T��
Л�VN
��W#�E��~���j7 s���Z��o��_;�wf�����	���.��U��/����`
-c�(�� N`+�G�D�+���:�%Z}�E�2u��>T�J
�4&
*��o��w��}��
��u��?���z�X�c���Α�ggS�+~��P2u.���3�M��V�&����*��1Z,�_e����%I#\i�P�pYRg/Pph������m�s�
Y��}��~'�kG��s4���T�j`�ޅ��X~>�3�e�n؈��2�4�"y��
���'�����ʸq~t�Zh/���5�����k���o�f�صO�a��8�s߸F�_�$����@3q˰<�R	�����d%��'���nQ�q����4f�M+���Ҩ|������׆�n��|�q���j��
p�Ch��#�/ⳟ_�c�bQ�G0l�
-�%=+�>>'n9;7�^^^�=1�.5?j���D'_X,�D,�Q�n�����?��t��/����J���\p�
��&��w!��ב���0؋���g�T�StZ�
*j���|��
�	D„=�bC�B
�3�WYx{�o��t}�5�[�,�w������$	���4LB�A#�oaQQ���\x�����ą�ʈ}IH��N��K
�ȇ�ߠ��
��K��e���'�s�}*_}�;v����$p��;���$p�\,��1~ �?$�� �
-
-�� �
��!�
-9�~��|?��}�S����R�
��wp����^@
��Y�H{��VD�rqQ�"�Ş'Vpo�TU�$�V�d�DױJ�tz�t
-�*�B��M"{�i��1�����a�=~o����ض�R[�� ��Q!��q/��e��UV.y�VH[(`��I����ʪY���L<�SJ�0Mu��V���~٫�@(���C��
[����=着0�#�?��/0�S.2s�C -3)��bg����$�395���t2C!��6+�ӵ�khC�5�Iu�?F�;��; ���?�z��{w��]-�SUԧU� ""{*(CF�
-DF$L�@	�;���/�d:�!��Z
u]�{��w����T
�*�� ʇ��F� �� �9xɉ��Y��9E���G4v����؊�?�Ƹ�@��ֱ���B��J�|��/7)�˜����b@Ջ<��*���@�
�;��€ ��f��e>� 1K�Wi��E2�c���9��rg0]����D��g
�Q])����ܚd��]ѯ�W�iMU}:o ��@�
:�v N�?ćѱ�@���F�q�?��.�[cT�(��y�1�o�M70œh~�8J�
��h.#l�QD���ҭ�W��F�[�����3j;�E���#@�� ��O���<��~����.;��YK��h�k&�qt�d=��r�T}�J����+z�PU��X}Ψ�9gT��z�<����
�#��8:���<1��)y/�%O$y����evU�m:�>Cn�^!R$��,�@�P��18Q�r�
�.���e�F��Һs&o|<�#�A��D
�1�@q4�7剜_���NJ��5yvAT�<��P�hx�0�,��w*
�\��^j4�5]�ͪD;��:�U�qZ�W �s��~���,�0PD� u������gڴ‡�lIJ�}����8Ma��)�BU��,��QdRb�n��&�8����mpZ9�.�7>
8a�@���*2
-hc�^�3~1��3�J�E�i�颸����r!:Aj$�U��^N��Mr� ��s!�����&����xt�~8���ۀ��>�4�@s�W�Ѵ�m)9�PV�-kQŸ��iP��8��
S�Y��FR��4���c�4Kl]
�I�C4<Q	��z�á�s�
��!{�2� Ѕ��f�NxfKH~�Jμ��Οu�F^4��܊����p�rf�J@�г:���6��BRBd����
-Am-[[��ꍏ��m@��Ch�[kd�+>�~r��`v��S�!��C����k��B�D��+Y]d=��a&���JD��
�;Dlw؛��7 c�_ �so����`
-	y툈z���6��tk4
6֗��7Z
��*�-��Kآ&%�ת#q�fB׆cʡ�
�2 G��MT���C?�����.�X��
[��Z�H�����5:�W�t6譥d����U�E��FIҬŋ(��ZǗ�kxZ����,����z0=�� >�=P
���~�
���?�Y�9=1��y~4����t��V$�a��i��x%A��!j�Ls�LdE�Զr��V!tZQ<����s`� i����	,{߸�?�x���Q��#/N�e��`%���z�yx+�U��nG��z)�xVY�'i��NC�V`�k��"��|Fy�T&�`y������'_ ��z>����#�n/F�\L���z�2���Cs/)��Tb%Ӌ�\8y��U	��B��+��|Ȫ/����:� �� ��{7Ӟ޸��h�o��;A[����,��8N����(��V�'O7������*�
�����x�Uzj�ޝ;�Wd�(aCV%l`P��Pyp<����}�捑
�^��g�Օ���B�
kQG5w�a
g����7�p�kŭ�Y�l���hd����˿L�^b��/IİK�(�� [...]

ۿy���7�S[��Z�����
h=(L�0��~l.}-����Z�Y�n@�."��@����P
-g�SDF�d{W���5��d�˸�:n�8� �
��� ��\���o3K>^��=ݻ_�%�%4��$&��8�� ��j%��|	���A
-oմ��Ķ�^Ƿî�:�f�Ԍ&��
��6-�L��zH|�

���b�?����ӑu����[}U��
-^��^��_��b6��Q�Y������U8��2��Tݘ��i�-4�3�4�o��'�iͩ��ZRn
-Z�o�H� �͟�s��ӹ��?}����W>ߪ�m���7�
-�b��#�1��e����n��
��?�#s
"*a�Q��{u5�k
�i�xt�JK}�
-��L�
��jH���
-0}�����0:����[gAM v
��t�v�3�t�љvZuծ]��u�C�;r�CDD ��@	!`BBHHB�
r�;��
\B���ZP�X��nŋu��
���؇}��f~/������76ذQ
����@Bbh�\�
�Y��u��un^�R!��
lQ�wL�s6���H-M{��#��R�p�R�ʒKʓ���7k׌M�rM��'����?��g�İk�S!"�	q8@&� 
���x�w���3�Ks�ޖG�!禼�:�����􊑟��� �%��� �X~H�<�齾v�m�Wka��İu�~A���D�
-(Dh>�F����,�A�C~�I)��o|J"��& ����x��ŭԤǮ03b��gF��}P����M}�3-�z���[6|�Ǔ�oK�@C��' �룐��A��
���	P� tD
`#c��{xʢ��
�H��� jl80bÀ�!s�'�<�jc�/q/Ӄ@�

�|�
-�8�-�
��QMxFeU>��i�HR�|��� ���/1����{��.�K<[�'�-<+�A�IgPW�7
�K���
�g�����
-��� N
���H]iD����/X�"�IY����E���M�
o��(���
-g�]�Yt�d��_6]8��|�pR~
=)��L�}�U�z�����{@�
yf4HsRA�:�VPR���X[CY�q��Du*ܹr��.� ��Y%3X�lsZ~=��*UN^i��\U^,��t{�gP�5�y
��- A�Er (ӣA�����eQq�����>IY`��<<)`?����5�Y�^2]b����+�0g�n�Ϫn]T_�\V�c/�=�˚�%>����x[@���A����#I��=�,-B-	��g
��Vm�<�Ǿ_%�߭P�f�ZewJ-�۸�?�{5��#��	�%��Sr�y���UC�� ��
��ݠ>���Ф'��X��ʂ��Rl�Fy�C���r�sT��I<MlQ��[T�p��o���|s^7�׍���
�/��.�v���?��A��bw�&� 4'��� �Y��4�y��h�s	��1�����b���U
-�I��I0k&K;tWp}��Q�h�� ����켡����E�
p��� �
���
���0�'#@����%'��U�������<F�t]�]"�JQ��I���e�V���Ɵ5
�L����:�cmvҘ�R�U�o=HB?M�h�> ��0%ŭ�Ґ���Ǟ���݌!�W���i��
��K�F�M�vW�Z��fC?�������]>jq�F-V��Ty�l���?d^�6b�#�Sl0�b�Y��K���O̹�4�KftD�uE5s����px�!�D�GS�vWL��v��|�j'�mm�
���c�U�Z�գ_��E�&Ѕmc�~0��
�֑��ܙ���y<wΆ��4*&ԔZ���?ȯ���
5�L��A׵YNZ���Sv}ՐCW=b�PG�*�Ǧ�y����
��M������5*`��#��Tr�+'{�
]x�\Z1���
RR�=b�������zScnamZ�ˡ��;�t�S^�v�#6)��U�kPo��࿂9�KpD�����+1v�'=�~��o�P�K6
�m 2�4��Ny��&�j�<����dn����L�C��q���N!��hd�ؽ�|<���5�mám`	��p�官��z"
���
�AN�)@������2FW
�gW�eF[�5��YҠ�5r�N
����
{s;��n;�~��U�����
� Ơ���:��9
�8p8tޝ
55��:ї_���{m������L�5�X���I�f��;Kc��%�t�6�u1�N�mg�F||�A�54n S�_���B����{<�|p!-�'+�������E��K�V+���P-U�j�����$n���l52��*mwVK\'%n'M4b�
Gl��� :�t���Vh��ÙC{�3�����݉���${�����/$8�p4�����R$b]ՠg�0u�&�Vi��[�*����s�TnG�|�N�yl�Z5H�Z�~��f�<�m�?p�3Oخ�W;oO&��g$
���*������nB���,������k���8N9E�i�՞��VO�:�c��w�+��MX	$���
aEО ��� *EY�dHeJ q ���.�{�1�����������wRX%*�U��X��ʄ�3��W���7j5W3K�]L8�(L6@�շPv�j�{��
5�m;n2���I�XKg(���Q��{8���$NQ#S~-I!����-P%_��e^*(�֔T�j���5
U�ږJr��Jj�n��m(���v�O��n�ص��Ю�
��QW�GC�6�{�}�:#�/�a���Dzj� �vB��&�ɸ�R�1�
��<���
s��
�x�
{�a9��n��m(1��̷C����;vNw�o
=��c�e߽1_�ơ ��di7���NH��Q��
Ƌ��化�|r����+F�U�hueI�����\y�Qi�Ggt�mù�[���6�����_M�y>��W���k�:nv}�þv
�sv$4��y4A֏�K磻��2��n������uJ�����UaDG�2��2��2�qwQ؃���R�pa�WPg�����M/�
�uL�nm�X�i�����vu:3��_0
%yN䍡I/�ɴQ:�8��nj�	��%b�P�,|�Tv�@�<x�֍���6yP�NPl�jL���d�a�s�������
&ۯ-Z�^��.�wv+����F�4�DM
�2�gfhɘ����	
7�(-bL�}Q(U��F�E�#��#׵���v@���W6��{��ꅿol�`btq�|ɒ� [...]
-�R�M�L�p�'ʸ~�<�x�NPm������
z�c�\�c����]�Ofy��lş]]��H���G$�;����zO'D�M�
{�BYL�������y
�\Q��F��є�{�V%�ܰI��e���'���_eP�[OÏ�s��,
�r��1

F� �
�\!��}�!C���
-�+&�w�o��F|���,ea��rq^���T�wg��t�\�w��@�~`�`��S��6��%�#�䀣�mI�눁`�(@z��;��@��F }�
�
�`O�x|�
u�,
s��s��
wY9���k��:�蕏����9�"0�.��2�� \-P�s$mC �> �������^@q���;$����8
ΐ��BOG�hO����t��P_��__����r��:!͆�i`�=l���i_(x� ��1����
r�a 
q��#��$������� ��
��$v�@���m��dx��8�$� F{���8�
-;��("���a��)^ST���S��

��7����
-Ә>��ɟA�dL�

�b�c�!�3쨠�bU�o����m`kR���S2i����@�� 1 �ȏ�l�r���>>��^��@=͚#�K�+���ڴW�+�lc�4�`}_8�������1C���Q~u��6�hx�F �0�l?
�	�y�;H� �!?��)|�$Y�"3?i�V����徊�H�!�fL��S��I̝�It�x�#
��{���v�MH��!��!��M@�0���c��r�?H�+��e.���%f�N�M�c�H����͐/dLk�����	�
�V-
�<����I��ϥ
�A����������=�j�2

!���}��A�P�t�<�d�F�d20��)䷩B��$9K�Tr_�K�Ӕr�dlM��N2��Y�ے�۝=���$d��>��I�9wȫ�_G� �7��^P�
�6P����%��Ȩ�ea�-��\`�X���L��)jY��F��X����|
ך3����"�紒�jro�/���&�ꀣm�j�v;!��Nz�A1������
-1�+�d�)��V�a�s��YV.o*�X0N?'�Tg����<'�T�Zs�{�ZI=yw)=�?S�4О\�������
�	���p�� �|��*�N�{���?(�ы
-Q#e�MeX�q�i��Jѳ�R�SF���z9���X�FR����w�O�M�n�Uzw�Oq��KqOV<mC��!�v9���~(�>g�
�Kx}E5��q
�cu��(�:�ʢ2�� R��^��P)R @JH��C�"BE0	A\��
���g��nև}����9���9? 
�^��!H�yY����z at -��F*#��1K���cH9}�b_�R�h2/s/g���f���
97y��7�
H���P������a ��� ���0����WRX�3a�A
*�v
=A)%�(����j*5ybf?���7��
�+�@\��MH�@�2�	��
 ��P��7��]���AP�e���B<�*#����
��q�
-r��|�h%�x�\N�/b�z�|VV�iè�-��
-5(n@��
-�^$����k�
-��$���ub��
-wk�<s�S�߉�MAn��#��6��kH���f�Ǹ��H�TA�t�VU�հ�	b��@)�Ŷ�e�K	��D����
�b.n\���
���Pbj����u��n@�i��f�?Z�_��x�
�w�))J_��zU�B]��;�Ŕ��F2�]K�D�HHh���R~DVM�I�D��Iԋ��q�9���@>��
�d�߁z�����f���������0��]1>���F��)�\d7KheR��U�r:[D��x%2Q5I%eu��aYI+��t�J�^�%�(G- ��i��l	\~ N
�S�y�U�����0��.Fy��a��M𔋵d�CPq	d��&��؜�
�L,�Q��d��J��)��B�J)d��B֋�$SC�
�w�N���yߧ6�Ʈ�6/���>

-q����J�hMI�l��m���"
Y�+�q���
&�WQ%�+�ŕm��������
-��T�����bs@�����
����@�ӞE��o�ܭ��
�-�~b0�������䤶�
�2'��rą�
>�U�epK�y�B�B�c^��3��X�VV��IqUz1�
>7����� �O;A������
t����������
�z��B;��~ICț���F-��LZ�,�8G��K�(^�4��#��J�
�]�c�z�9���@�Y���A�����}�O�_\;��������n�z�G�PLh�%���%l�Ʋ.�I�*\Y��������(ؼ
�X�%m�K�$i�k�
�^�-!��Bs@�i��
-�?�l�u���������?o��v����9�ц�w�D���%H�S2�{31�����|
-����n)c!��5�*!/�Q)Hj�&���I
A�� ��
|s ��Psp
�3�F��>�M/G�l|t�ĺκ�>�m�w3ȭU��
�
N��ӑ��98�żbt�,��B�w2�I
�j����Vs�:�L&9�Z&9�&� ����^
M��a��ݕ���ɤ���v�O�
��e�q'�Ey+�_h��bh�'�G���D
zCȺB(�k���AzE� �*f��5�Ό
�0"4ӌ��)ft��
Pnj�
��
X��o��]+o?سB�쨅手e��36M�$�Po��(u
-v�0�������2`�R��y=�0^G/�����z*T�N
�k��㷩a#3���
-s �r%�ۿ
-��V���e���
˴���
�?��s�i���1�ߓ��A�ԇa��q���I�w3�S��Y*v��5�(������Y51讆to�4��0x�Q�9���r�l�|��Wӆu�s��^�Y�~m�����Kw�|NQ^���#B��q��s���ғ�i1s�̈����9Zn�
0/G�Ϸ`��{�|�������{�c�n[:6-���2vk-��oV��Z�m-�F�C
��q�����4F�c����qƴ�(c
j�&��Rߕ��}�L�{#��}�����9����,��W�ϼ
3
�, S��!��VC�fi�}ؼ��þM�G��N�K?z8��O�.{—��`�bc?���[BD/b�>b��S�P���o�9����3)�{��J<��#��}�Yw:W at F4� �WAZ�Y� ۾��[h�Ϊ8, �v��
-] �#�xA�7���̀� ��}@a� �zZ�`C�?	�O-�"ܖ#�>6�5ڷ�;��2�"{��+�vM%��\
�-��yp�I^vq����2_gQM�g �9�=ǥ=Gg��>�(*(�Ȏ��;�H�����d%|	�
��,심���@EE�R�VOU����0��l*���w�o�{��_����;�C��i zC�g н����|_H���)O��� m�;�ݠ0�ʃ]�ʬ��_Y4���(��"6����5p`��63�q'	ܭ��c
��~�3��!�> G� ��P
��~�؎
�wr��+ ..��:���r�N@���uᎅE�c

��*�lظ
-����z
�H�MQ��
x��������zAԾ����DkW p���N�8t8�
@`s
$��@fk�a;P��Y�l�����n	"�
�b
H�Q�ƺ���<v�R# 9����;����PN�@<G{w>�
����oc.᮳c�ً��9
��ܹ�1�1���������?�`
v뀍5�}w ��G!�Bj�/�Y���D�}�鈿S
-�+�����5�wq�����������Y���.���棇x�c�y/q��1�4o(v�7��kH�x�� ��A�An8�x�|A�

-<A$���5��y�Ki����F�b\
g���]�����n���y���yʟ�M�	S�ḗ���i�9��X��d^�
��g�A��F
/��S��B3Q�SJ���*�bBg�x�7ۖ��)�����

-_ឋ&���Q�KQO”�
`}��v�A�l	��!��Oہ*�2�| �v$�S	�ؙ��d}һ�"�Rb%{�Tϛ��ȟ�k��������%S�1�(��q���7a2����
`c
,�A��
(=�����
=�H'P�AI#DB§�
��6i�^�\��s��u�����Yb��M��ׄ^�
aT��8.}��"��4��!O�nQ�e]f|i`Yi'��l�m�����`
w=��	A���Dx��"���S�޲L�7�R�+j�p��$y��t2�3m�x#>����e=�1��ı�.��$�{5p���נq�
-&+����0ȋ9	���55l	e��Ԅ��J�tJ{�U�K�?Mj�>��"��k�>��G�>EO�sE7�ڙ��+��2�<�b
)�׃��א��
�{�A���1(�r���hH<=�fDϠ��H:�X�
N��KS2jd�К2�SB�Q��w)������봑�6�HV+c$��i
���:����F�-P����,��SY��r	�g��2m�G�k�q#(B�C�8�z���B�]NEz7�
��ܒ�I���N����/3����au#kX]�y�2x�V���:ȶ�yΛ��k������?T�9���>�k1`�0)쉑Kx��P{
-�]D#��؄t
-J2:xՙ�&�V������"�_�����8C�j�7�1R���u�Ӳ
-�6�Y�
P��sM��ҹ��>���j���Y����,BO��z;[��Rd�:��MR�h�g7��5��V]=����{__�З�s���b���
�c
�kA��EN�Bv?k��|��?0�j7��8�H89PE
-�-a�o�Poꤜ�Y���B#k��
�����5�*a��\p�P&�k,�
-E�|�>O<�3�Kb��XC�㟡�m+�y�~�oߛ�`������b<
�&������Uȥ\5�9��颦�lY�€VɋTg�*uũ�
�6c���dJ�3��F�t@��6�cv����`���^GK�q��
;��}�^]
-��h;c;����H
�N�]/eS��
�
��V��Uf��Re�� ��$�7�e�MZYW�F�0W-�3����|@o�
l�1a
؜�u����m��%�]���V�;B=��v�B\pW-%�����\�g��KE�R�S�y*�ʐU��(������E�_0}&�7���9 ���@�͟�
-�S��߮\t�n��c��u��O:�>h�p�{+!�Z#9�RM2���Ǫ*
K��H�)��T*m�N��6���M2յ�4��\D�gB������9_2����?B��
p����%�M�u�m���w��������u��L���@#��p���BA^	��S�T���:��:��8���iQ�i�m��lY"��Y
�Y��9�}�^�Pd9(R�6�� �D�)L��I3�	%�8���)��������������|�'r2$E9)y���W
�ro
���
?(}S�ӑ���)�
�֩ CO���ǥ]����%c7M�5Y,�i�Y��!i��F�y�-_RM-ϻ�R�?{9,��Rl��|RRF�$5�t����YqE�������7
�
)�ɏ<ޑ��)�
�
Y4P��SF��5;��/
x�W�����g-���^f7�2�����.Ԋ��U!AyW��2*R/}8�Bfz��c�%9�gʥAgj�ĥ:�NwJC��rg�EC�zu��6W���zs����ms��w��~a��������
�5��e�
J�mN�� q��ȈԪ���k�Rb�
��WH���:&*���_V��/���+�w���_rDg�f�IkU�����[4Pe�1vGO}�MO���@�ٛ�K�_�o���mϕ���Y�'�	�Yw�������F��HN�M?x=G�_s���b��:�Uݔɬy�ɮ|�ɭ�
�RA�b/+�զ�tU�|�J���
-�W�mR}�m��N����W���)6'�����|�
�
��c�DŽ�6%ň��w����3�\Heܩ��%�w_J�{����1��
GV(�d�2*uT�n�V�y��xիE���5��.���vmy����N���5���ҏ��.b�<
�>����o�DrZ�c}[���-��U����$r��D���$j���� {�.�TB�2����/^�#
.SjПS3�gi�{ݒ>'��
O��
��q�b����_B�]�\~g��ݑ&ft�{w�
�t\
�ꨎ��l�t�z��9���)z68�D	W�o��Z�?u�#ꇗ�T
,��i���C�zҏNF�<,�i�QL�����?Л����O`��S���,�W��}��u��e��y�UL��+v��S��;3��$~�S'��� ��j���#*eߩ]�o^T,7Y�+��O�;'�=�#e4�@ӑ/�rdbO�,�B�
�&��xȏ����Y����h����u��X#w��v�ݗ�
-C3깢L<��F�{�F�x�A\�T:�����۴�����|��O'�w7�S�x�
[�ׁ>!r�L�:{NF��N&��&%�����S���T��˴}P<4�Mt���
-/f�V��wW��kS%*�4�ҩ��ǡ;�
�Ra�:6�p`��F~ �0�cF����n�uF��#��#��G
�!��
-E$K�s�@��9�]��0�������D�
�T���e��8�v,����`X�`�

�������N70�I��> ��~�� r�>ę["��
�fȱ2E�>��ރ�w��f6uw����	��� r�3W)
˕��
��
�0��b�
-�WS���
$x�9�[�Lkp�XB��A������{��c7$;��C#��@��!��M�O��/	�X/A�b��Ah)c�� �5��2�
-�E�0�"�Z�
+l��<W���z/kL�^��u��!Xw"u
�~R6lE���8�� z�o�*XF��[h"�n9"\tEق�.�- ��0�	�#n��y�YL�<
>
x����j=���ir��$�5w«�����
�/�U�
��r�c3���\���嬃h�D1w!���av%8���?)�b|������J��ؠ�s���~S�6�$�
o��=��O�Q��3M�����������Ad��pm�:���f�2�ɷ@H�
�q$�K��ˡ�S�
�YeL�T���~S�z���7I}��t	��_(Â�h#�t���!����	��Nu�M5e��x�uH�،x�1b��Cp
	�= Ȣ�{�v)�K�i�5�)�Zޤw=��@0A}����N�7�PF�,
���`Ȅݾr��<`&��O�l��X+m$9�C���iF�g�#Zd���= ̠�W� ��5���o��*o�Q+�����~(�F{.���0F�0L�
��w$�
sD��%
lg�gEw�:�v/@��2
ڿ�.���b�����ϰ��=��l.R��-�:�{R�U��p#V�$BB��	Y$9Y�$�0B�aod�����(PW+^!,E�^������y�>���9/��y��w��}�q�z
P�!��q��O���(
�CT�=��gd
���W	o#�oŸ_F� M"�#Q/I�ѯȷP�(7b��5. ��
0w~��B~`9P�XT?�9�; �
 <�q����
-��'j��p1�Ƙ0o�E�ר*���F�
��<��� ~�L!f(#Q�Q�P/i�1s�k�9���9�= 
n�mq����b��5�
_
4!ۀ��?P���(�}�c�y�J
MKB�$��g�s�f����2�dL
e
�N�E��F������c~c�Dϲ�1���
vK�} 76���'P�^4����c�A�-�B��ǔ�}�7bj�
�6Ö#����qr&�)�D
�Q
a���c����n� �.{ =����p��3�V�snC�sn
�>@X��\���V���?,� ���!tǻ4���̡Y%�Դ�jH�#
u�z:~��C�C��o��X}�:No\{�5�M�U�����?ͯ�O�+���r�3��n��w���f�B`��
����9����H�Y}L��p���u��D�
(0�9Z�MF�5��M.�t+y�&A
���	?,�'L�����2򤨈2%�����
`�u�M
����%�;��������sy�~���QC|�
��
%�'�bzjb7���2����zj���R�XM�I\I�-)'�K��b
mB\@�ḨO�H�8�W����w~r���C��s��k��
3�s�63��Q6���4r��6�[!¶K�&��~�������˙��F����"�D�]�?�L
�4�9.5��%Y�	�=7p��H��`�1��],��
Y1W|r�T��MO��w��eC�/0m�|L�"�H��
-Q��o\J��h�K�ٍ�
�U��}_����6HϵIӹ�{ n�����
� 
�O�
�O�?|�{��e/ʏ��U�{P
��u�''�L��٠K�T���2��^�fq� Ohg�K�
^�\��R����Q��?&�
-lLj��wx�Ѭw����݂�{��"��YMв֞\;T
�w�}�˄
nʦD֤�c�tB�5YN7)S�92� C�'N�E�E��C�,P�GI����1YR�
�P��J�[�r������Y��¹�}�'}�K��5U�v�� �Y��/�Ηg1c��|�I'�S�
CR���(N�Yd*�R!�Z�2�_ɞ*!hTAc2����p�x�3H]��}=@�����]�_��Y0���^���}�gwt�#
cOU�	E�ttAV����J�N��S��r�Y&U�+U�J��J�����E�1�Ha���U�@�5����i������
�kwxN���|ҹ�k�5��zC���������'K����Ԙ�<^�-�j3��$��/K5�u&��-Qp5
J�暒�
Qr4�rn�,Am�����@7d���K[�>Tluٰ�}�s��ë�
o�txՕ�`ߦ��*�P'�����B2�p��5	(�\��<af�(��+e��t}����VR
��Q9#uL��� { 
>�R'�
�G�&�w5\gZ׻�^��<|}���W�w��V�
Pr9꘩{.���+a�%��R��!(Pq9���<���c��952|N�<>�g�83mR�a�.���	$�r��t���
>�SWV:�rk���>��W�X��}rKEG�
K
2�؀9�ZG@$U�b�\��TDc+شB-�h��.Y�K�}�6(E[�%XӸ$.wBl���y;�
-�OU+��ڼ
G��
��r꽳ݳ��Қ�7����y(�

�n���)(A=Ǯ��52:�Z��Vf$�+̂�J��]���#���EO�P�)�=@��/q֯
��/qx���po�ӡ��r�Ο}=��K��+��3�F��NȺ��	:�VMi���	ӒLC5���vDS7����< ��]~�QmP.rF/P���m��`��C߽yݏ�:6��Ž�ў%��GVg
�� �
uDЏ
f��B)7��^^L�u)6�Z2>����u�䝆�c	Ъh](VED$
-�*���d��/�FI�
-�
��Œb��#ngT
-.uGܷ��0�n�
-�B��� �39��+r��?����%�R�C]9�˻R���z��U.y�;�w�;�l�`�W��q��y��-g��?c�S�_�
i���y����=*�|�	BKZ��JO6>�b��)MS�X�T*�4V��Uj^cu:��Zvc���tW�n��`>�ӳ~�˴[��9N;W/9��'��%j:f8�����#�m�ϲ�L�����viTv�:^ۖ��֚ǔ�.�[W���d�1�u���V#e�����ߴj�����%?
P�b�v$�k
���4����mv!�&��2yҶ��]7tG�۝8������
��/�t)�]�8IWN���0�׵���^�bvWrR��s�L�y��c��?��=����*��˷��	��/����m��
���$������K�Q���	���T��L��
�e��P�`F80+�c�_ĴŦXJ�U$&
U%�
�J�>�=r25j�"#�C##��K�n�D]�=q�=��ɑ���gD�Gw��>ѝW!p|!�ݲ7=�^Jp|��R��q�^��>(9!�Q����(
����H����a�Y��1!��;����BG.��;Q�ȞX?2�n
����)~c3:Q��/�H�& Ã
r"�d(|���!�/1��B������?���T��`���G�MG�	b�
��� ֶ�j��+��}<
�Aw�#`�
'p3���nI`�ǃ�Ѵ(ȦG@=#
:�d�
�R� ����y��=[���9��}�Ʀ����߷��� V��|���a��S
��t� �D�}
���Hp
G��P�'����'�C>i>ԓ}��<9S|P�6%_z����=P5uv�1�� ġ�P/r�.�
�ܙ�I�H�@Z^(�%Q�|
��D�J�/�&8�X`�a����:�$�I���!����a�
��x��a��;�{K����!�Ȉr�a��93aӡ�@�
-eq��q�u1�S��� y�n-��\�H�n��l��f����裆X�T?g�o"����a��H��i�9C�
-c�rY3a�aH
@FVҖEC�m<$�� �1�n&x� k��&�i�}�V3�
��#�~� {P�i��
	کaa5,
�>.�A�
C�+�Ĺ!��<��2 ��0�DC�:
���oe at X�u�
�Q
�S|p�S�\��(��n���D�{�;rP�o��,�'�!��6 at f� �A�
c�8�L�ש
(�� _��6
��h��L�j]
-䛙��āh���'��#�N�wY<L�[ȧ�򍤏염�̒v����"k[�6��A>���3��a��)X�<��
,��a�&Fc42��Q��)mkD��
��,�B��g��_� �ܒ��Z��T����O�.
P�&6+%��_e�- �� �/
_'�E���}�4
�p��R4��B�o��`,L�\�j�V���[x����
�~�IvX�%=!+9�x-���7+_�_)[��T-��=�YsSn�\V��/*G�5�f.
9s�Pl�8���P���Y^X#��*E�P�.r`i^|onI�)k-筮����E
��җ���vE���l�S�e�c�M�셦Y֓~G�>��A�^W�֯;�

����8"߇�UcP
���wG���s-�}�5�bc����)���pڳ�S�2�$�kw�[4�UՇ5������w��t��O�7T]�K���zu�ᔦ�p<��p,ctPY3dz;���/J�?G��	��ʔC��9}��~�kUa������O�^�i�[+h2VJ���n�57��^K�YEs�pI}%낺)�����3�=��=ƣ�
c��'���ݨ�6��^�(������aS�+6�L�X�4�}���7�o�FyP�:}�o�K��Vq�.[#���B~5wsڥ�
�
{��������S���]_QM�i ��P
��XP��2*:��
-�� қR	�ɗ� ��Ih� �%t!�Q"ʂh��x�w�#I�Y
�
f��o�:^�������O������ERS�"��H���N��
-8����LA�Ȳ5���,�2��_*\7���{�|�Ž�%a?<ˏ=���?� 
�
JI
���EޢĨȥ�
�ۅo�w�:����f�0E���4�(��7�*����H��w #��jc�
\	��[����Y��X-Tyl����f�"�n�(��<��=
ŷ?�
|#�jd7+'�T��J��5�k���r
��ZC�K�&<�K�:Z%IO����7�8�+�6�9��(8�.?b�\����̺�:�M/꼷�,
�Ք]r`\�sH��3A]i�ȶ+��&vAB�,IF�"I�rj%��^N��(�P)�5TL�х4=M@[�~
�̦#�����3�+�}�
�Xlp\�J�~Z���#����ʈ꒸s�B<�+�
Ԛ�)��
S��M�J)�W�Ť2f=��P� z��g�d�1�P.SG�a�i�!p2���
o;�:��ڭX�?f�k:a1�vz͓f7��~�V�
�+�9�,���PsX2^Z�$=+A��S+ȅ)����V(��b��#,^�
&/Y��L�A��z���X�
�H�f}g�!��������mG͞w���hs�:����6��^I�K�(�[^L
-�0"�1eY�af>?����VM��63�rz�\�?Y
�
B��r����s9z�!p2;i�
k#�|��r���[�a�[�!�g=�,Ʈ�l�ׂ�w�1�XW�e�f	ƫVD����)���tL^Nn?���Γ�8�rFJF7��q���x��g�3�Pr���|UO3& �S�5��`��їƽ���}�/�0~��_5�t�<�᳷�9�h[C䙆�xO�$�_TN
���r��0<AvRZ��t%OLc�4 at Pv'���fQr
��9Z-K
��::���
�I�=�mB���(�j;j�y��k�N��m�x���g��Sz��l8�h�8]��Q.��	�ȡ�b���rN<���K..$2�ʩTA
�T����3��Z�@���4R�a09�
+\��!ۊz�n�zyc�Y�
�������ɪ����V���u�a�������
y���Lɭ�˖d$�+���22^$�%�� LY/C��'��i�"=+4
������6�?��^�
�r��߳F
ݵ[٧>��󖻍\�g'�9Y��ߎA�Z�
-�՘
M��O����d%LM59���U}�v��!�5J�@��X��1f�G�y�P�d
�в<S��V��#����AӞ!�u̓n�e��������K���8/NW�E�5J��Ih��$�dc⚋�QMR|����P�B�F/���EbD-Bf�Y���k�'�j0u�
�����a3pG��4�L�
��~�źr�g�`0�h�:‰{;�<��C�I�ǫ!	�9�1=��K�¸�nIB�R����t�G�a�������Z
�3� Xd	f+���`�%P���ɵ�cr�q��QK����E�=����s`
G��
%�'�#�`�B�S�"���BՂ� �����<�o�7�W=���F�����1���ap���6�m�`De
-�M@Ϙh�Z
�i$�:d^��ic��
i���&C�)Q'q㘳�?ܢ~��"Ʈ�C4<� � �O#��(B|4���c#�^c�!^߆y���9�
a�����v��۷��r�4O��ڹ�@<gc\4{�<{�q=���5�W�=��b�_������<Cp
���
���0�;aZ��{{M+|<gz�
χ���E�O/�ݦ���:�lЌ M���5J�1P<4UÓH�U��ބ�=j��u�iݬ	Z�]����Q��v��1����)~�lG�|�i����
Z������9]����~
���Y���y���!� �;Q@ه�a# �4Es�@޻���w�M���[R�;nHz�%���K.���/�C��߇;���dヤz�u����ę����?�O9~R:��<�t�˄��g-�A�m t� @�A��)��c
�,[1����<�*�O��Q�u�
-��cK�_���ࠝ>p�.O8���0v�9���f
<
smO��v�c���b��8��fZ�p��(%-�$T�,��,5��K3�4��HDuQ�P"Kٗd�ZN<�9����\��v�updi��}��{����>�����������Q����

����`��>�7�ZN�HM���$R�C��Æ��Gda�����+2Z���B�'p��Ăp2
�S������Hr]������
-�j� ��
��yh��C�
_���K^�h���yb�5b�=����l���#
p�Q��,�
[��8X��G*�c�����E�_ �O��D�N�C��VN�š)�����i��8�
G���U;ۈ�����&��_�HfPHZ�!I��!q
�"��E���mB�"�~>"��p�g�#�!
��(Oh
g�����3a��N�Q�4��N�B�8k�C{�-�!v�,t���5�J�
d	
���@T ~�|p7���c1�?�#�H�KAo��*�V�����"t�@�'
�@�
P{��}dY�7�`
-b�� 
u�:�	Z�34b(�
���@�, �����i!�����֡%`��D�(0~���N��
�}����
��G6�9��?CL � [(B
�[�=�	q.Ш=�4�B�qq������%�
��x�g�`]��y��=�;�{���5���x��5,k  2�)���Bl��p'���0�\�Wx at c�2;�U
 ._
QM;#�����tp[�\��6s������������cc~�����p�����G���� {�Ü�ʘ�T�
�e
0�}���� �5a�lZ���(���~��'���gY�b.�cn��y�8=�לO�O�1��1�v
-�{*D̿D�[�!އ��-L�쑾h
�h�ś����H�� 1%:K谺8|H�!rP��6 ����c��
a�=��,���(������^���%��~�w
�Bx/�[b��E�܋=!��9��a�� 
gr�ܑ��
N6��C����=ڵQ�TU�nE
�/�
�����?%'b������W/�w���s�ᓸ����ے�R��ȬC
�A�I�Ƀ�L;�8b��Xɜ��!�|n�>�sZz�s~��Ē�7	ѯ4[؝����>�s�Q�SY���r���_�
�?ߓ�ߑ�ǷK��W��ҋ�a�y�u�!C�NF
-�;��ڢ0x��ǡ��<T��[(�����{��
�*#7���U��Mk�O
U�G�:��n�=uS�]�	�-�y�M�5Y�������GqI9�8�R6k��'4C
-k %������D�+t@��1����r�w�ƺw�V�t���
{���z?��u7iC̯��?
���	��W���m�ӊK�˪
�[�V�곚��f��nPs8aPݤ�r�
L�d�����S�o�
��_+���Xɜ��z�kg�l���A
-R�����ڳV������R6�^J��wc��\�~��qusB��d�
��'�#���C�ݾ��^�n����f� ��{���&c���𦐑=��N��_l�N{Z!�Fx��
v� ��f)`_�)��\ג�Yz*e��y����E�xŰ�x��h�2�1�v&�����	u��A3���l���Q�f�Jo�`M����E�o�"�=�ƚ��*���zU��5�ŗ�ҩ�+,�e�'s��G�*e3����5hS$�N>�ؐ|Ѹ#��i{�KcmJ�qkjobMZ��:�Oo
t��g�w%�;�y���}����w,p��>��z��ݭB��������/M�6小�\!8��D�߲^�7�ZՐU�����P�q̸%�5�:�=iszGRU�g���
cefobEf���
-b�,g�":�z������_Jמ �獡#�N����v�F:�u�n��rsԱ�LvSQ���p�xW�Zy}�&�6K��&w��*簩2��yC�����g�u9�I�r������r{�A"�r��YLtފ#�os����e�r��Ɂ`��{�&^�ɛu�6��L�f��JSdSy:�qM
���P\��T�ee���`KBE~Cb����2�is��jr��q��ؤϷ&�, ��%!T��� ; (]@���{�:!P�R�B(
R'�DD H�*" �
�������qw��Pag
��ȇ���9�9��ߒ�s���9I$�(��B��VK�	�S%>�� ~��"^��=�7��y�^a��s���`��&�E������T�S�Y����A������ʨcG�q�'y�3좂s�‚�n�Ô�/
.w��-XO�l�D�de1�%�P�D _����*�s�:�bhqИv��N~V�q�t��`�~��x�v>ǵ�6Ç_�TSq4������Һ�"މDn���W4��9z)�p�}��8�E���Gדr�l�D����@`�V�FExߡ³J�dT��=bH�2`#7��>"���
a��k{����?~л�>;���0����y��&6��)!��3)�l09�l:�`�
�9�e�����̒
�(�F�P��y�yX햅�#��`\���/�X˜pQ�������<
c���r�9��U�t(��PZ�=/2��*�PmC|zu;+��lrJ�'��&I�̩Zg�Tn$�Vl�D�t�_$
X'
ڤ�E���m�ۓJper7uj�Rzd�Y�g�g穾P��3Qֵ]���S<xm�~��y��-EYMQ�q��m�I���D�$;��D�����X��b��?Q̒%�T��x�)	+��pwBnL+��e|j���	�m
缴Z����"-+����d7� �'�3'0��д��Hv[}t��ָ�֞����,f�u��Df�Ĩ��bE�
i��-�k

�����#tX����99����d*%�a(�Nyh�'���E��Fcm�Cl��
g���q��zK����FFw�DEvwdž
���W�B��*x��!6�]4�n��5��������
�f�p�4
_�$z����l�ϻ�W���L��p���O���S]8�Y�����ђ@�HuH�HsxȰ`��9f����H��5���'f`�hȓ��x�E��!q�����<��7Aϭ�D�MZ㲵L���J�u_-����
L������R�.e:���G���f��������|�GC|�B�g��x_\
���5�-L�O�b��V/��Q`b���kTܣC�%hx��Z�������w�4�	�9p;Ґ}+�4�&�2j9�6b)��T�
�X��������8�������}q����G_�k�'�+>��N��A&&���t.�C�#I�.�^h�������z�-�;XO#v�>��c>N6�n��k�Rl�r��k���}����x�����g.+�98=�����7Q
�;��
pa``��4ݣA��RP.�F
}�C�ycJO��$
]ㅾjQ�P�pa�v����:M���aC/�a����o�,l���f���ʹ%�?wHo,�

�ן�DY \
�$��o����4(^���U5"kU���fJg��l�YsV�X�V^
R
x�_��m����d-��;]���:���f��ֳ{�l`�^`h�>jd�~��r��gc��"��
�t^hX�x@@��!��

���`��C��Ә��J*䣃t�'w9�O~[=>�*�~fns�������K�����;���jZ|����[���
�=8��t��
#�42B�/��kd�
@�s��u:pP�Q��D-J�S�ь�6t7t�䌞[
�_�Ce�!S�
-��"g�f(�`���*`��
�Tݍ=���.�n��e��4.��� �O�H�"Q(��D����'�P\Ј���hC�FG	
t���}Ja��FK�!k�.<�y'�l��b�a��&6�j`鬜:���<G����W ��
�
-������3���)f����hH1E3�ZQ��N|:�렻�6�о�@�&���1FB
�$T0����tE,�+`���H�c�H�dHA'S*z�|,h�gK� wi
RD�XU�Nہ
y��Z��N�z�x� ]F��7F�Q�����L�v�t�
m^�~1G�
�gs�E�o�/vh���.:P�ń�^$?s�c��4*b`�*��h�w�6z�v�k�>:7��ict�5A��=Ș0EƬ�_l�WX�i�?M�1�2�q�����J$��ވ�:&$���*eQyP�E
Y+:긺�
�(��#��
�~�������|��
�G �E������	3N:8ͺ��;8Oz ����@�5 ��!8����&�c�G��́�� ��
-|5;�Gk
�:{�nq ����#x�9��g��
��8����f�Ӹ/
�<���.o��u��[@�1 ?�s�!p�@�3��	�if �o^�9��-��j
�y;�Rf�5@nr�v' �tR/���2�}�e����_^��S��\?zq��fLxÞ7$���� >h��p�
A���N�AF\2��r6�h�jі�I���,[����t���;�RZq3~�.Ӿg\��^�3E
�&���$��ߑ����N�_���%�|��
-�, ����
@`i RkCٽ��V at 8y5�l� �9H�:��f����f�
-(w�Ĭ�Mқ\?����'���?���z��
u��:L�w�~v��{
S��?x�J�;�oe;���5C�B��"��/�oS����l�Kl�Yk3)N��d;����9����u�����t�3{ܟ1�N|ʸI�/���W
���
��I���s�	>@�e@��>�A��ngkJ����X��O]�%��i2B�ӟ��֯e�Ǥ鎣����2��Մ!n�	���1���!���k�t����k��k��:K�7�J?(}\��[ 0���G}Eb�=l
A�d<�L0�R�׼?��8
/��":��<�n($��_A�{

w��^��f�-�q�
^��5^?e�{�z�;B���������# Z�h]
 ��>HQ�@[�!�Mڮ���{��W{�z��n4��yX)��(6��~��;aj���<ⵠ���*�+�����6�E�I���>�9�?��nj3�qf��
�K�10�$H 0�<�_��^
ꝉh�4
]����\ܒ�\w��,_�!5{�o��mw�r�q�qQ�{/�3=.�iH}!徽�jϾ&�)i�d`O���ˬ����c�6�'v��M��U��� �E]s�z=H٤�[���
�<��E!~鰆d�[6�A���Zr���܅�ngc�<{�r}��Ŕa���:�߂�X��nN���Iv�� {ƫ
��=��V� �*8�����P~��
$�=�Q�4��Xh�����p��y�b�Uw
-h�e�-/�����#�{(ܺɞ�q���
�5��~4�&�A~�]�ɭ	;˯
-�&�
h�'�����e�y^�|�[�-��ӃH�7�P��\���lқ(ݢ���J���]�w����r>ע/Kj{F
�ܕ��XR�gk��ܴ?�ZWL���dUE7p�Q���=’�_Dő�E�Qo��Q3�C�:~A��W=�
���1��%�ޙ���h�F�I�i�V���
V��\-�[���SO�xgWV�S{z���T�g�*�|$1�Z�p�qXq�U_�-�khbO��c/�sc�s�^�r⦅��s��x
!��!n꽫Q�Z�M�}���y
6T�v�n���j���
-��Ҁ�'
�;���
��#���=��T>)��2U>�(���I���*�ي.Q��$]qW�V���S�4��)u߀`�_�vP��@c�MjM�給����`����:���IkOk[��
-lZ
-��ϗ�Ή#j3I%�i�Ci���bVvr/]�$8��)NI</Q%JTIc��H�4+T%�	�� �C�J
2����D�	6Ҹ{в��lep���������i�mZ�uC�ԡ�(�U��!��%�49����,zfF!+M]�MNk$
�'���(Ro"����"��Y�2uN���$~�A�	��t6td)��yv��
h�fp��y��FO�c����Vs��THvU�����D�k
-�9�d���
Zj�& )�07!�N��.���Dg\�Dg� ����YaL�� v��G
�c�Zc�q��^��f�)v��B���qɉ���&ʏuu�m�5"��*N��p�.��J/M�M)V�'�1�RNl�~T~�P�wF
�7�
#�E�y�ByΜ �
b���˱�CK�߫a��������+��'���t0n?F0ml�?�u��p��JPaTd�@B �BB"$@Xª(.��
-�U�Q��
P�Ƞ(
-n �
P�
��#������Z�*�K�M�yO�Nz�;�������պT��xl�6yo���q�Bi~�W�5�+�y;���)-4,�^
�h[E|fI�)��xҜ���9�?��[bؔQ4���u,̱,���%4xPɄ۵L�Rτ��6p������{��z�S�{��aam�_�����{��s����w��fUn�\�茝�����S���/������Tޓ��ݧ������ұ0��6��Q
���Aޞ
8�H��&+hhq�
h2�N��8�r(j�r+l���ק�V���P�t��
�����5s�m�L��a0UW�&�m0��=g�{��6�
�v�1n�X��	϶ܫ��{@���4h:A��V
l�{�x����(&nj�M]���d����s}�
[$^ؘ-�װ24�h�*�~�6��Lg��s��P�f��u�G�
Q�
Q�Р?8�P��m ��(p��I���
�.O���
��v?֦K2����+�GO�i3q���㵠u���3�SO�1����7��i.U���#�굺��ڈ�mDS�V{�?B{u��� 
� Wj N�4�$�6
-T^e@�	PtˍRxˇ���zō����΋�%L��C7�j� ��R��˹~���
훂#۷Ku�U2M{�\���~�x%W]�W(/`��<*�����U �� �Ԟ��D���L(�?

-
8��|Z� ֲ�a�
�Ϟ�q��ڙ2��9�
בō�XΏ���K�Q(�vl�
����
�h
Tt�
Pt�
-��$�3,��cܮ 8_
p�(��&�'�ϒ�4��ik~
y�)�m�P���̲qif�m�9zb���c��7/r��$�Mk^�V�7x(��\���'7�˞��g�r�?��s������a���#�_j�p�����F�W6ܥª�����^9S��Rӻ|�.	+�Keex
i��h�:e���<U�GEw���{�Ti�fא�27qO��7��|s�
����ۿ��
�����F�]gH�2��� ���YϘ����?�P�z9Ը^��'f��
ei�5�T�z+�@��| �V:0�.dp�_��&
�O����a��)>C5��Cǝ��/:	�;��/��1��
�n&�K�
`ŏ �� �X�4jFt��M�@-
��
-
a�P����B�zV �Y�a��L��Yㅘk��|kO�b����
X3�
�ٱ��~�&��6r6� ȻO�O ��G��6��ɠDW�
9�����i"�ӽQE����h��Ɯ�
,�0�b*�e9�,'�a�ՖS�����3c��3����{���D�Q�4H�0�)ځ�P�qE�
!
-�<Q=0�����i����`�
4L�O�t�=.��a.��ʰ�"��a��D��CE�����4T��Q�DU8
�c�P�f����([��
.R��n(���A������S�x���X�9���xG
r09���������A�C��ڗ�Z1�Jj
֨I�Gբ����8�hJ����*���\��'8(>M\���'��o<G����Q�`���G�����B�'t>t�
b`������8�d��LT������;Y�R6�*�q�~�u���F.J�=Qr����Nި�����?(���KGy�R������$��%�zQQţ��GC���1�
���0Vg�����်��Q�f��@e�;���b/Cxb�Qި�$D�*�,�,��
�
��]��彂w��9z��Ч[����0�OE-��z
c�
	�
L�Z`��
-�c�16���\0j��
-�#ڭ�aM��zo0|?@uDЧj�*[�>*/x}P��~�|�ݣ|�ݥ���B�Y��0��<
}����c%�	�\*�fS1��wM\���H
��t�����dr��t��q��ƽ7j�Cd	�n��]�
�7�{�G}^kN�ti�D/5�D/4D�j=�|���f���~Rc�5���u�ԙ�q�ID�Q��⊈ȾCHrsH ��� ���}��;�
-
-#x�Z�ʴ�i��Z�Աu��Z�>s�x�9�|���|�����񐊵n�.<��o �{�
�`��Z�$�����kT���"��:-�~*?�"Xu�9���"Z�{J��S��ķ���䱓�3_��:�'/:.�_;}N��<G���0�d�6�,I{�0t'
FY�!�"	�G2v�w���
oi��v�`�w/F�FJ?	W�<
�
�*���^���
Z�����
t�y
��2�~�z
}�z���m��1�B�k(�B�Q�r�b�m�c1I�
�ؿ��]����7<_ӗ��M�N���m"s�7���bDG�r�~��~.B�x+���lX�ˍ�.���A��!c��!�z]
��k<��H�;��!�g(�\�
�-i�8Hǚ3a֝;��ڇ�Sx����K���3a�#^��=.c�
vҁ9��l��n��p�
]rj�^�:q���jd��hD����a���I�K���ß�����O���+���q0�=�V
<�m!ڍ{�} �Jfk�(s^�(��B���g�V���ӜT�I���8+�q4^�r9V�~)���B���|T�_}0��~5���MB�	���3�%�BS$�a`�
-�il�8����;2- ̶Ľ�����8��r՗ro��و�
Q��?�z<�cs�˷�H��y��	*�
�λ+�ί=�5���Ghb\!�cfH
1Hu���jc'��BbU

�����`�9���K���
|��^����=(�5�/�X�O9qˤ4t�(�zX�h3�K��K��N���s��-l�Ϲ�j��9B
��XͼD���B��
��e�F.cA�&�+���8��z���`x���(� �Ֆ`AmcpS�fr]I�|U
l9$��3��d����g8��$n��<�z�ʷ&�<����c��4�A�4q��J�G���Ѣ�wHQ$r YɁ��`4vּ��;r���B3���
�,�m�����xB�鲒�ɀ<r_�,�h[�D���� ���s�*y��ڴ� ujm���J.L�$����[Լ�g�<�/��

y%��5/kN�z�1o
�Q�<ԙ��Jsp�� ~J�fT�񂊲�W��=�q�\N�]]v�c�X�J=5�|_U�:��l1�ׄ��{ќ��4m����
M�{�JxQ$<�`�K�8l��u JL�Ok�C�1�Wa�k6��k�x���!��Y����C��I}�N�:^��⨕�]J��<���| [...]
-^S3R2Y	db`����<)2��k��jcp�~#��߇��7����]N�֢	�]_B?TUo�-�8�(x.�r��"'�'GZ�-�EY
�@܉��C4�h��.��35]��.��"K�l�
�:�|�2
��\�0�7��=��F;��:��m���
-ڮ�ȃZu����(�9O��!͗�d�)2�eA��:r��
��.R��S4��>�5Y�M�AJ�"KA�	��5��
��*#p��L6�#-�pͶ��z7Ӧ� ���JWn]R
c��&����S٥�"��;�H��+,%p
jH��VJ�b e)�Q��a^b�(,D� y)��|�Z
)q�n��3כ
�X�)��a	z�mV�����o��R�G,K���)k��ȫ�vٕɎ��|��3�LV&�V�%��XU?���@�Uw��(1ſ!1Ő�(Z��e �W0Wi �
�x��6}=�A{�a��.'���M�6�eKȞ�&�!�>�6�!�$�.ݙ[+tO���fU��U�FW�#���ȑ�W���y���{R��"������wy �� p��ьÝ ����s�8��>�Z�ﵡ�7�"��f��i-hg
MoK�KiIuHl��7I�z�7�Q�����Ci
-n�

-�
\�+�k�{'�B >� �
��p��6�?�7���{qe�v��C�d]@?�ߓv>� ��e�Лb��w��8Gv廝��xw�{S;�|)
W���[�E?r�/~�V迒g9�j fjk`�����s����@=a�SN
3�w1_�3�"ܑН���]�QM^i
����@A����H ,!!		�	 a�Ȣ���
���Ѷ�N����jkkGfܵ"�hE
.���q����j�����3��/s������{�{�����sfW/�=�4�rl�4��:���&e����U�ԉU'b����r(�P�V_���}�P#>�N����W���8�,���9�u�
��>��K��~i]�ԅ�܋/����a坟Ýy�D�U�D�^�R�j�<�h��h�.�����2��A��>���
��NOD���{Z�\����
�����oO#��"�V7�Њw���X�N)iQ���OͿjr˹j�ʺZ��\�25/�$7��'6}&�o� �7}״G�m:
�i��=i�c���� l���:�;�wP^�����Ս��
Ϳ㌊�|Q�MD���
[�}���f�pN��ۊ<�zǷ�1tmk|cm_�bl��Զݜ��Ǹ����v�������
?�6�OvwP�;�����;��y��e���
*�pA�
Ld��R�ԩ�3vΰO�Ju���v�u�O��*v�t/v��^��^�ٳ�K޳�[�s�.�=͐�^cHz���a��k�=U�
�>���Ghùw�K[�w�@9�(�+J�c�Ծ "�_L��+)qZ;�@U=h��̦E�;ȇ�
#�J�$���p
��K���i��
-נ�Z���V7�n7�ˁ����p;���8��]~QB����i�8�
c>H7�'��""zBJ*'T����"}k��C�]dR�!�E�BXd/��4��8p�ܑ�~p֑
͎,x��
�x�5�q�u�oC(�'u"4c������
)��d  $L�������.9
t�?$�\0Q� �‚�̷�C��|n�	��
��
Pݠ�}�f�>������g�#�Ѕ�f !8w
-
-W�(� |�!����g�� 5�q���
̤+�$�a.9�N�	��)��B�r�=�H$$(�H��-�@����TP�i��w�g��p�Zw�l���!�_t��1 �����b
�v{���
c��b���h01�d��U!$Ą��	��Va�8*Ĥ�@=�	�>re�(>� �/�}K��

�����_����2AR�]�
`O��!�t��Z
-�WR`�H��R~��
�E$�b�P
-�ev0CK��q'��@�7���'���
�-
����r\�>&��@~
�a����
��أ�
�+� {X>�
��߀
8�r��ɀ7(q�VH�
 �pIj*$&���9f̙���!v�h���7��z+�bMD�b�G
d��*�FU'9oT��ת+��-Π��ӧ��<�����S���@������?��IH䓐��0�)����IO��0�M���_�=�_�3�[�|
��5��略�3���
�
�h���5gx/4�x�57x�k��}����10�=�c ���֟�.)~�
H���En�Z{�4:�M�L5y�$�҇�V��'�c�0l�{���nj
���]�^�A�n}��SwQ�DMЮ$�M�|�
���[:��A�8n����@��,Ҙ���HB>�#/�~|��qĒ�2�U��<}���̷;u
�3�+��ޣ���&��O�p/�Bh3���Px��t�p_t=ᙨ��*�р�K_�걺I��&�� ����(�NBQ(e�(�:\�� Ź77ǽ#g
�={	�U
[�Z�m��7S��H�!�zʿE-�����!�ƚ�+����ƛ��
�9��j�i�&"N} }	��{o�7s�Y��
���Rʳ�j����)�s�\�ΞM�o�BVkN�ŲZД���!c��R�֐��
a̻��̇$V�q�SmD����cY�i@~�<��4��V��J' �s<�0,b�K��%!dW����"����f��Ź��b��R~]�ʀs�>
���*���S��INf패��';�Q��̨�<�Ѡ<�qOy0�j�jo&��`��@9�=	����y�>�s,�A�e
Խ"�x�BB�Z�uh)M�ְ�B�XRȶ�[ȯ)\.<9���q]�QM�i��$�((H�*��"��@V,���f�5@	!�LK��@�����(������h5x�9���2��
�
��NGǶs���ȇ߹�~z�}�� [...]
�(� �r���9�#�'v�<�lY
es�$�a�����L�	N��X��k�]�;�]ЛYܕ�ڑ����ХM���ɍi�)�
J�r=
!է#��w"6C�l��R��7%xxQ���
-<<�r��U
���`�E)�z���Li��
�,�a>�c�����)��̓��*�u9�6������Ϝ �e^�*3W���uZM�?��Y�P��2��r}��m���ob
�Zfk�V�Pa�~�RM��|%Qz|Ǹ$~��(ŵO���%�
n���
-%ZnU��SOP�����j�8��=G�`ߡ��_ҥ��h�ܟ)�<���f�A�%���z�)�U��#�%ܫ��e�f���eE䶉���ò3���.��
��Ҽ�MB��Z P�+���ڰ�¦9��$�P%�+�2�-���%���&��Dq�� ��l��Z��`ߗ��+�	k��s�9l��3��k2�"Z�*?�﯊���"yo��u at +a{6�
}jKK��K���bA*h��u�E�!j	����iTo5���
����&�#YP�>�e�~L`C�&���ZSXQ��r�5\k���޸qM���>ʮ���SkM�
me�����CJ)׻���_V&	*W�"5QX�N��<�
�@��>B��s�oh\!B-"y3$���0�T`��½z��5�:<̶�ɖø��P��F�m[É�ZU�G�J�>EM��ʪ|o���HY�8�T*�Wy�-$����W6Ec�-�s�
F����F�*��"o�d�� �R�J,48X��`��f:�`�� ��-ؼ��b��t [...]
-BV�����&�*�)L�U*Cq��P|Ce���¬Aȿ!m�p �� ���Lp�~W��y�
�z{���ô
1���){��˻O9�w&�)�H�WԖu���㕧��4K3��!i��0��3"Y3JJTϑ��+�
r|�������ȭ^������:�Ou W��)��
���{�h
s�hF}p���|�f+<�X�?����p��e
`��
���{���~����䎆���v™���+�m�3bl뿈�-��b��}F��qջ,v \D�G� ����<e
��ݠ���VL��MR��1��N;�';g��\�G�R�
�*�J
��=;��շ���
�
zl�Nh��������
Ӌ�����
>i����� ��Z@՜#H��1�� �\�%w�c���홗��.�:3.f�$�p����㦥�NN�z
�j���
���5y˟>��?}�?��O�q$�6�nfDgpG
p
=�I=��@+��B;��D7�x�xK>ؼ�0��4+��6�g�������|�`��r��Ł��fڵ�C�k3��eO��=IW_zFο���C�#f�w�
��v��~��Q��i���r�
-o�s�+� k� ���c��L�V�-������&۞�˲?f`;Dx;�
e���jg�A�'�з�h�v	7|�f��k�g/]	���z
ٿկ{x�`���) �,@�
��[ �ߙ@�C
8��
����`���6���4���f1ƳG��m4c�5�ȵ�4��W+���jv���8�N�
Z]����� �����_;<Bvm5ߍ� ��=� Z4�����h�=��/p�f'�Zñ�N��G��1�gD,�Y���I�����f��l���|ˠ�r���Z���6k�?���:�j�J8��I��%��@Xe
		�A�
-Avd����q�ڣc��R��BQ,r� �V+�]Zƥ֭�+���&�g.g�A8��;�~������p+Y�'�,Y�U�GG���;��}�-m�h��Cc3X
��$�r�+ϓ~
�� ��CA��!��^	`Z�
�;e0���RuM��]Z��;�.�N�{��`x��֓�������l1����V3]ޞf:�me:�{�t��c:�����?p`#����q`�= m@`�

������@1(��Ȇ��dXM�?Sn�i�#q4�Tڤ?����̣�~\C����~ǰ�C
Kld���x:N�q�M� ���} �0�)�� 
��dh�:���=`*�
�)[
�BYbe���(��̰���B��f�i&x�h".�S� ���ߢ��M�>{
�z��
�
�LpA8"�4`��`��`�"��p��P,
�RFC`
-��l�¥�zb'���&j�A�'�^R
-��4Tx�P�������Q
�H�G�</c�h��m6F��&�Vj��r�
-��l�&���
��e�
-��#n�

#D����
-e��S��NC��CC�@:*"�=S���,��k�P��%;LQR�B��lt�$j������s
_%nsF�
��
ΐ��ـ�޻�9��sG^�x<���RH�?1YL�)ބ������/A}u����W���W�赍��El��k��
�UGɷԛ��Θ�]2�����k�/�6�9h���72��!�K����XߙB51UHC�'�O���c�qJ:���2ST�e�o��G���?}��?(�s���!E
oPq�7�h�W4����^�#^��5�π�
Z>W��So<U�u��x��O�P�@aY���%3�����H}�$31p����Ŭ��fS6p�O����/��/���X�QU�U��]�S�N�9�+U
���!�ÿ��X�oզB�~h����w���S8e�oK��F�u���hrQ

��0=�9��2~���	Z��Ҭ�vN+�
�a�|j1���2�u���a���:�v�YA�������]�+����v�գ�8�� tl�8ַ$}"֎�x
-�l���g齍�bvE��
�f?����$t5�=�+~[�V�?>�-�Tj}'��润�����
M��u�y�V�M���g���
/hF��5��D�Ӡ�DdEa0��$ L!g�*�S�i=�j���0���D�G3t��9�G.�ߌ���z�F������Zd-t��m��%m�Ӆ�Z��!?9�
��rN�����Gؠ
q;�EQ=QG�N�Z
�(��M4L�f���Ι��I��Jz{z����X�[3�ح	ټkqyV�cW�\�Yg�
��CS�ǟ"�8��(s9
~P�~��Tx��>좸6��xx����!IM8JE���o`iǒ7g�`Y��ûl;x��
-��ʩ�g��[at5#�}!Ugє�Pp6i����
����6������-
�)�>$����VG7yTE_�UF?�U����cP�=�L�xI�	��ds�0<��Z@{�-�ΑR�.�¸�
j���8�]�ECF��.-��D�
-ǣ�_:N� �N�&�!�Ƚ2~��"�RV
w�s܏^��Z�qO�%�����(ߓ��o�k"�!�dc@�1��3��E��4�w��кXD]��c�[lظ �]��lq|�,�ú��ՙ��3
-\+�ֹ�������M.�}7�מ���EI�R�N��+��g��^��3?*�I�1ބ�S8Ä́!9&��1��<&�_b7�r��2W�i��1_ì͍d
�I�U��Tfg����T6k��^�QI�ɷ�<��^�3��{{j�϶�:�-�畅�w�_�u+7���nJG��騘��=�C�<�����R}���ZVr�y��^)��.�jpdI�*/�W�y�`���v��s���-q-�[ �5g�d��B�V�.��Y��MY��2O(�g6���yK�.��om��Z
�>a"��^.�#�N�z�K�\��
g�8@����U+���b�e��V%y:��E�
w��n_�B�u���.Ϩ��<���PD� �H)#LQA�,�"��t��ІFpF�  �RD�� *�1X�Qp]��f�%'n�f��=G�}���s�����=�W�R���*�x��-^��nAIܐ�84�wQ�SQQ�;aQP�_B6���1x��C��T��T0^����,p�̕�_��-]��Q�ךnܔm^��`U��fW���H+v)O��m���R�����I����ޒ�)�ܤ�޹�oE��D��B�LH$
oA���26.�98�]���pf�n�t�.��*[;��h�Q]�&��8+e�6��lDz�BY��[�Q�+Ho�u�S�E��g|2R����>��H{-�H#B��K�&�E20�\�ߖ�p���Q�

)�qX��t)�*�+�4��W�֕�V�"�ҭ
�&ۖ�g:J��
$�\I�N^vN�WFv� -�h[�i���	��Q^�R���"�<Ln��y��3��:�dp�R
��讶gګ<9�;�ΩW�ҩ.1P�7���b,e%�6E��yR�sN��-�P�VP�_��wH� �\����D�M/!B��KH,�S�C!pY�W#4{
ԲѻK
u�L�.wvC��zMu���2X_��`,۱٢�"�Z�=�>K��0�T꺭�bQ���#����U�+�������,��
-})�.�$�)"
-&��{��d1pq�5����k7�٨��&+46r�5
�j����:�^q�:���(���X�̝)���,�dE�K�9wkE5/���s��nA���p���h��}�OQ�QQF�_�,���Õ2ڃJ�����w��f�m4����Յ�l�ț�5�{V��5�d7D����b�R�d��+�>�6�)���uSu墈�&ކ�.�u�C���q~h���Н��)�
-S��x��gz�7�.^�܃Z����Zi��>5��Pt:2e
^
i�RuI�*����K�n��m�7�rKs���=���M2�
�J���nHC�{p� O�p�C�p�C���
��
�:���=zW?��
-���-4��
]@e�*�{磤ϖ)�sg��.V��Y97�[��pp��֮(���f��)�����:�v!�;
����ikw���۪����n��{�����B����.^R�
��=��l�RMPz��A]H-�u̕I
r��bVύ>�u4Bc��uG�LB�d�
.X��P��W�v�
�ﰢ��qy�7N�}7
�{�;���s��&
�����9:�t����}��C@� �H�ĶQc$�:2������%���@��`�u#�BF6����_s*�p�p�q�p���5~'[-��<l�{�
底V�����"6>Lj�L.�
����7
�h�2h�����1=D�[!b܍Y?.b��/���Q����
��
ߪ�r<E�,g޲�}߱*������>#��ic�ؤ���#��7&�s���,1��7��]Կ��+�_6d��ǁ��
�\�D�U#���c�$�&3�+Y+&�l�������U}'�|�2爦�4SJM��&-��
m��)
��:�S��]{ [...]
-d�.�W��)6n�c�mm,�m
-��
���<x���� F0
���Y�wbX�;)l����\��n���NՅ��T��_����x��j���
~�4g&}�t����˨?���-�_��
-����gZ��Z�|h�C+�?r��'�
����J8?3NO�3�O��g�,�g���r���F���l����LP
�͞�d�={?�6��u����@��G�S��&��=`��\^���Ws8�j��\`��֯���?,^��ٛP���b��&2�r������M�އ
ּ#,�߯P�S��b� PN�P�}$�}�-�o����
8��>i���b1�91�	��q��B��G|�KV@���E�1��aɂ:�3j��Q!9N�����,vP>�'S�ߨ�־���� X�������ԤN]�O}&�gI}���D]\��wa�% 	��R�)i�~ =>BO�͂8�2�ٙ!.g.C
�X�~�خe�6�J��l��Q�*���\�iTS��@H.!�y`b�
�Fd�A at A�
4
aJ�"cD'(��
-�(�
P���ϱ���+������ �߱�}`������:{�u������I
,c��`�#ց]�����{I�|O�d�E��?Xc�����{�<
-8b¯�3�
7*��5��3�5�.ClU4�-��B
8۰::p�a��Qpڱ�X'v�1��e|�
2F9�#��a[ �lA{�̷S ɥ�,�s��0\;��
-"_
�h�@�	|9
f�рW��2:p�b5
��a|��'&�G�q�	b�{��̽D|�^'F��a� �7B��Mh���X�� t'�=��o�) ��<<�yb*���œ 
p�h¬$8*��
���u���&�#���@��
��~'8�="he
N2�
�7�n��{��s�sr��79�zJ´'$�c}$�M���6��3
-��oq���y�-��
���p�1q�ևo�����3�go�7j�q��|�\�|�T��©Ig��΀S��9�3���~�
V��3�^�i����;���N0��	
~���.�܍,��+���w�{>u��[c�}��[��k��
��������k���*t�Ϋf=�b��t���S|l�ù����dߟ{��#�׻-
�~C<fx]
F�b0�Y
&]S���c:����O�
8�2�x!��o���#��%0�<ӵ{=�t
��f�_�a�on��=n����ֿ��4����.��]:
��\7�ٵר����%�O�
�`v���ag�������z�9
�CC˅���y��K}4z��~��a��%3��*uo���׽K�m4��4��èӳ������
��<N������ǯ�<��
�l����1�u
-�½�X��.�P\G��H
41=w���N���vcY$�
Ϻ�D�����_mر���_������|k�O�6X��
�l�i�:�s����u�O��!�N�/p���m>��;��P
�,�I�F/�
P��ݓ�-�
�;j1�3"���:��wjY����<㶠U�Ǘ�3k]Ra�Xmu8���`�~��V���g����
��	xk�;`bƮ@��j���ƹ7���GhP�������XCt3���b�R/I��F?���m���o
���)M��̚C�-��o�ڷ��fop�m}P�]]��;�Nrk�~�����-��*x��5x[�w�@�;���M�4V�;A
ݓ�Lu%١
I���2Z{| �*
�=
�~st�Q�t���
���U]x��ΰ�mw�U�o
�ͭ
-i�m	i�o��)���C
�C?��€�1
fNKh�(h?/�2*�I��[�tԝ�F6�\DiKu�lI�#�e�Y���=��FuR�im��bGt�U�d5g�
v��*gTD���#�"�	�G�'�F�"K#��k"?J������A0M�@�i
B�Sp�Uh��t�����dX��L�Ғ>_�Y��ؗ�ڝ
�W�(5ܞ�dZ�nQ�cU!-�[j�!���.z��5�{
�%-d��p��_�jI��:��P
�w1 ���d_���h�
��wW�еL*���D�:臕f��J>�Y)�h��ץ��(��Sc
+�e&Ir�2��j}��S_l_W�-�����
T�C�|�)�<i�(W�D�;�
dn
��P��=�wp3��+)�#��N��X�1:�ǣ4���؝�Nߡ�gVe��7��0(Wę������fZ'�q����Չ��[�y�:AvB�P�pR���%�Lx$ʔ
;fʾ3e at b�� 
�gx��q�R"tg�3�V at G�U���;{T�r���iU��17eO+SFN_�%5.�H4+JO�T���(�v���������Z2#e�cZr�H��9K���,y�[�<eB(OR��ɾD!�D��sgW�|*�7�
Uk���h�*[�s��Z�v�mR�ho,X��6/\�8'ƨ0;�L��[�e)m�3UvYk��|Ez� 5��19�(Qqy�,��F��6.LLaR���û�W2�CBW��
�߮8{
\MA
�l���m+R7ϧ�-"��V�C��*�Q~A�iN^��27�:#'�V�]�M]Y>3I�]���'��:&�ͺ(�f��^�zL�d�/�.<�s���?��=
�|����
Ƹ��Ľ�3bf0F�Q�PI��.���
])��)��B[(%]�ە��n�v��Dm��v
�T[�UJ���:�꼴����5��|����{�y� �L�2��,�9��l#(�J�@��r�=��,�u�!�SM�ӣ�W��/I[`������I�
R�
bW�8�[�]9'y���j��s�ɭ�IO\g&
�D'g���|�����
�I������PQ��
��<'*;o$�.g�n�� A҆0�e��f�YsD���Y�g.��e����n
7'];<zm�"*�L5=��9"�Kx�5��5��[�T��L%ʡ:�3a9�E<'q��9��&���5x�>�XBV��J/��)�y+��n�d��)��˼h������Yh=w�2٬
)vQ�,y�v��i�%�)Y��aY���YW�C���o�a�d�b���τd����`����Π�� 6��Af�Ҋ�`u�
��؋M,��h����S�b�E	�n���U/�*H��,X%��%�.ls>���ab�Aǐ�SN�����7=p
��w
-�%�!9�kųx��)-v����bE8{�
��`u��,���=
-*�̃�/��Ŗ�Ŕ�	f�L7��=[�+�"|W�h�W+�Bw�K'�������
,:�������}�mD
��s���s���^R�
�(��shR��X\)���wPC�T�ffU�*'�E
L;mV1�$�b�ل��-�����m�W�C�_^!
S~\�[~	uI}�����������q-v�
P��߻`G)@N9@ΡK� �հSk
-�km �N3�<��:fjm0orm������ڹ��5�5K��֤��Uk�|��YxW�����W�E���NѨ���Q�?�<D��:�{P��_��_a~�~��C8�
���8��,~� �֋ �^�
n0���
-n��7Ld��c�u�bu}��
������F#�����5v��`��o7֜~a�v��	"Df�
/ 8���`~v��kO�Xt`n=�:σ�F�h
�
��;�i���@ʻ)��j��=��0
M���e��y���y��Ks��������;tGO��LO����t��#�'G0�o�|m@
-�=�@
fG|r��G<��a�5Spo����ܮk@}�\[��u��"A�C9�XD9�XE9����E���C��/gPm{�1m����i%�P�_��9��z
 �`�w���!? ����:.���]�ۅ��K��_`��
-�
����d�@��p�t���`u/��r)Qw	ey�����2�;e���2���N����4�_r`�y̿|��`�
 � ��4�
��	X��`X�
�z��E�
�?� �g�`�l<�<���Bb�b�L�W�@�W�}u�݈~�����c~�q���6D���
`t��6����������Lދ��
?p`�A��@�x�

�@���!Y��N��d���209��a�ӱ��V �[ j�v�lI7�� �� ƄC�1�<�3�<1��
qH�ܑ
-B_
��
|ozr�3�^A��k���DC+_��C(b9�&�41[Ba
-�B�h;ڍ��JT��F�ѷ�t�� ����~� �gF�Wf���
���4��^���M�x��p�X��D��&�d��rQ!ډ��~tբ�G�9惨��2��{�+�S��x�~*&L����zĄ7q�(��9w���.q
E� �&�&v�hbO�r���mf>Jw0�%��w�rf at Rɼ�
e�%ǘג3L���y)��<�v2O������C�ݗ��?�ET6@\$��+^�Z�FR�ُ"ʉ4q�A����Df@��y�e2��\��+d^r��
��}��g�rG�^����N�����G����v�{��[�v9��MN���	��_W�ֈ�(Y��k�t@�#q?4�w�it��
���B�jӫLc�(��#e>�P���@��w_��wOq�ץ��u*N�:���ڕ�yw��[�
�6�~���_U�%1��/�;�{�x��b �؅�>�����K=�
�������c���.�Ul�&�׮����V�sǭX�[��-u��Mu�^����u�Y~��%�U����4��� [...]
-`�T�Ri����y�Fx�s�.�q|��
r��۵����y����yo��띭}�w8�>�9�|nr�ol������ʖҵ-ˤe�=�UΧ䋜o)�
�����`������"�&�#��3��<#���“���QZ2��\���b$���D������+	m�k	ݾK�v��x�r�~�Kq���f(���/�]���p6��Q���4���3�`	(;�
e� ��
/r��
*<�EŸy�û�q�[�L�jfa9���
-W�})����j&-�Z��)=�����g�GN%

<�4I�K:
4�t!x&i5�X�Ð�䧡G��H��\ȑ5)X�KX�7`\w�r���>x�>	���]��.����K�<�
��^�9e>gx:��,����f�ٌ���
�M�`����tW�D�L�+�
�p��`����_����+����ǐ�5����|
���U���"wxP�
w�`EĄ+�͸EQ"�\!��dA�ל��8#P���
��܆���V�
k��=!㼽a�y�4g�T�h֩ȑ��tG�]��� �;z6�&��
-,
}�sQ�D���%��I���V%~pYJ��F�ii
~N�u?V,��'����Z������Bs�S`	�9�����}yt{�\T_�b��޼�1z��Dw�5Q]���_Z��|#x�~s�Kn)�$�U9	�48U��*��婄��\�C�"⁒R��X�?"����ZB�
����=��zO�ᨮ�Fg�yfG�*˒�V{�3f{�O��BlM�z�
4�e��ε�F�O��
�>pZ
�`J��U�D/�y:�Ľr	y��̿_�
�#�
���C{�-4k�-�C<L��ƣ�D���YV���,��m���e*Ƙc���A
�@p�/U�ޫ8[�	�Z*L����nƍW&�*2<
j�πJL�+�Sz��rCpgiC�����&�l�D�����IV��4�N�c��S+}���U+Ř�`������*ʿ�G�� p�� �� p0n�
nL��mX��a��z�4E��
-�S�
-��tA�*chsY3ͤ�lPأ��1F��(� ?��_���ߏ�ɿ��R���R`,���?�>F����(��^Խfjpp���Q0f|
7\���^��a3d{wU���ҕ��i�M
դ�	��0ь�]���}Q���N�bW���T�.ŪU����V�^�+�1�\��"��h
������:��еg=Փ�����p���>��j���
-�-�b�� �oЫ��*CH����׵Gh��(M����<�Rifc����
-�;��JͿ�J
�ZS���/}���t�ZE3��rϠ�7���.��g&��)
��7����x�9��n�z67�M�E�:�������
-��ԅijZ#ʫ��e�!�B�U�����c%���g��{��
-cɪ0�zO� �2���F�Z �� ������`�mg��}��-��Ԛ��В�cl. �$��,�Ҥ
V7ֆ�54��뭑���hI�f��[d\�)2�D>A�c�j1������:�� �Q� Lt ���wxBOg tZ�f݈k���Vߙ�^�������b��]�j�P��!�SXIsG���N/l���7O3��y��|�-0?a	L�YB�6b��>@�p��-3�(��.�����
7��R��F�����vs�նD��7ó������2?YWy�Īw6�vXhŽ������]��ٖ�
�e�ɳ<fd���nâ_�'t
��
Σ�ϡ��6 g�]H�
�<@��A�
m����8�`�[�`��r �K�_�#闐��2J�
m���.�������Ƴ�DdڎFrm���o#���=_�ӻ��wa�r��Z��V4��h� à �!�ƽ�{���n,4N&�;7��mx�3�P2��!x��}��r߼�_�H���f*��
��p��
�’�O�����h���h�?�'�c��6:�
h��P�� ���Q��� �q��CP
�@�H��~Ů7pE��r]�AQ�g
��� [...]
-m1�hfZ<�f	�4K8�j�eɖ)B�e�8�2WkI�N*Zd]�\Y�N^�EZ��zB�A���jr�.x���}�5A��~�J�(?w�j�6� �󁥅�ԋ�)RJ%�\�Ab�+ʽW
�X����,ښ���YB�u�(̺@
b]&	���Z7��w��[�l�[��~�s6~e��q�C�q%\�{�WGh��(?#��ƾ������#���@j%W��+^�CX�h���`Bm�k��M@`�4��a�u�_�"�[����S��~�hl�>ј�J�g��g]�ȳfP�Q�%���L���^`�}�a`a��Q ��PD�
0�÷Q	�)
��Fal�7��Ls:����q&�3s�ޜ��0�e
\[���%��%���I8��ù�	s>��p�ٴ���i���
-�]ʞQK�
@�	�?���I�oU���W�p����㠻6�DC{=�7f��f:47�Bs��P��	u�~�ڪ`�v��?��� lo>m�nV� ����G�A�	'��&���:�n��1�ߒBӡ��C
U�
��(�|�����
YO"$=3!�Q�2��
@�ׄBz��=H����f���X�
0��I��
F��)��_��u at wP�lP
( PC2��h��M��?	��tB�"��� 
�A
-������kS�R�s�Ӛ�Es�@�a�=�2`�8����Ȩl�3�q}��JC
��Hb >$�L$)�^��>�8������qZt^�w
K��-��u����D��'3��Ÿ2�q����'��v�A���Bp�aRN�H^ɛ�B~
C�
���X��H��P��C���n��n��DO���Z��u	T�
�5�2�^H����F���"�$��W�셺�=W�3u
�����G�n<P��W�Y�
g����k����J�H�܉�����g�sw��q�2����m`/t_�g��lH���j�؀6��k��m1{��`�5���F���
-��u�u��݁��\���?m�p/�#��8�{Q
ciMƘ�&3Փ
>j6{�ΆF.f�#W�'���~#{�����;��
֫�e=�֥?�:��C��ןd�����Nvå_��
VW.�D.�r�a����h+i���	���8������Jc�=�a}

X�a�2�b
���ak7lcwݿfwܳ�m�<v���nJ�5C�p���j�(���Z<��N{r�)O.i������Q��
�IC�فмy�ɄG�Q�����9�o:k�Y�n�,g׌k�e�B��K�q�p޸[�Oc�謱@�l<,:m�5�č�f�I���߇�:�W�_ns�g�|���D�AJ�Px8�ሡ���
1�#8mAq�
����wع�B�i�pƴR�dZ+j
�L|2`��D�N��{$
{��E�ڀRiM�1��FY�����jz�(3qe�ώ
Ãm)_
-
%�#m����E9�=�
�#��BdZ"��S�ى��BC�BQ}��ĵa�T���

�(�.t��ې]6�!Y�|yy�!EiH��$�AY
rIy0�۶(�0�NPW�{����
�I�'��Ij\�脳1�h�
���	�66M8���I�+'.��G�^V�'������M�C�mʃ�
[�9WUh.RD����k���-v{�?j������7$�
<�Q>ЗH=_2p5Y��Ir4'jqb�j�Q�<�UL�*�%�'�'9��@f��Ȧ0n�� n�2?�ۼ�/T{cv���dj�b��3c��{b��1�t������aG,w��l���x0� �O�~�
�g�4�J�C�
�SG����(�
��&	�ii��)s��S߷�;e�<'y�2k�JUf�Z����Cu�5}�q��K�o�\��
��Z������H!� @‘�+�����9��T]ī��u�{�����t��
����m׵���ٱ�?>3o��7��>���x�D�xG��#���G��퍼��y��
�1�3�K~{Է�o�f��Æ�_���$��T����T.n���T�wR7�\�v�4�3�g7���p$I�4���2��w�7y
�Y<���=�
���Aߎ��~m1��[b~(h��-h��Hh��\���`����%l�i<��?"ﻝA��tW�ΰ)�8��3�A�q�^�a��QY��pZ�Ӏ4ۥW�s�N)��L��jK��$��4%��Y���g [...]
-�K�<׭E��hJ3y5�YxS}k�]|�tDP%�VH�Ef�u�I�c�Q��ؘ�o�1�}�������c%���殺��9��Us0��c��lƐfӧ�ve�ٷ���͙.�J�[}F�G]z��%��W����Pt���!A�|BT*�˗$�� ��S�^�X�`E�а��t��P�7)�r>0O����c�
�m at o�6�S�m�9`ߨIv��V8ת�\����+U�r��g̬�-�l�/V�ʣ�B�Y�N�����xB�K��dń���3��_�
ܣگ逋���"`�~Ǹ�
CB��GGAӢ�ñ�G���%8XrӜ+����
wcN�g���3d��e7�
�}�|�aQ���$G}%@�~H���J�Q�bB���'R����y�"e���s�8B�a�+z�|tٰ֠�i����E�U�9�H��.%:��!_�Y�W�˫���m�ks{�H�=%Qi/dj� �)�Բb��-�����in �({�H�WF�G��'������5ԗ25e;8��a\sI�}iq� [...]
-���~VA� �`T��;!V�.J亻r�'�?$
-
K߱������!��u=�"�!�<J
й�d�&�7����|#*ʷ1��Pn�9�^oJt,0ɜ�*WmY�Gv��+���S�
�K/i���O���
���������ER=��K>�{�Ks�H�_[p��"�$�bP[�*���(�	b
�ݜB�~���xmu�Sv��%�2�MYY�^a�������S̃�$�0��(��8��q��KQ��[Q��&���'�]��%3����Z�Z:W
tCY�?�֠Ⱥ��Ywr��pnvC�}V}���^�8�v�
�w�֕z&�V�k�}�j��15�,�(�-a��W¨�/�U�	V]������u���T��z�>+�C4��-�(l�A~�*h�7#�};�j�d�Eqm��im2Gi��9�%�5���
�\�y���
��볿�_x�,?��:_�/�a���a
��ճ���`��>G�Sʹ
-�]��=m�]]@^7�^/d���ٿ
��A���0�����Xnb��>�/�!�W��[��cv
�����幷������%ޮ��B:��B:������㦉f�z~���t�.tV�.���=�Q7���!
[���@$�oG�x(3
͉
O�F���"Ʋ����
���9�
�u�5��ct�m��i�m#�
�#?r>����o<�Y��,�
�Q���}�h�
Pv	e��c@¤b��=%F��:�ފ��]�	gBgb�=3)���
�Ι
����m�U�?�nqxkz�q��	�7�/��ޜ��S��'X��c��@
-v��
��>ʵ���	 sH:D�&�u��9_�[��s�c>oχ`�|�mq��2o�T���h3q6٬܍�~��I����v�l����?ᮝ��n�9�~��W���c�����2	N �g��9� �ឋ@�e.�,x p���
��iq6.a��]x�j�_�Ǻ%�,e��%V/Y�UK��ʥ#L��yFr�6#Y���,��/<爯��1E�#T{'���t�����rcIIC�m׀�7�5�9`�
w����
-�ﮃ�����^��ł_��9�}P�V�

���)x=�χ���_�u����1>F�H}o��M����+@����
lzx�> ���չ�����l�e�
D��((`�W%���	1`A,H��@Dņ�(�<	��C�-�O1D!�ODQDĂ����g�0���;�=�;{���9���F
�9���P�Y��0�s C �Y�ҿ#�DH�N��b:D� �X
-AC��Fr�<�(g3�J��,Z��=�X�=�OZ��8����
`]
h��%�+"�6�!�j��&;��@�:5�ͣ�1� n�@h�m���
-}k7��j����GK(��]�4��8Zw }��0�`W�. ��e@~5��Gn���+��j�M
��	���:���k�Rs��G��?�:���=�@ON}�Do��G� �=�b{���� }
��`��]$7��b���u)��b�ѽ5t?+����� ��f�
5���(F? ���C��?b�>`�h�Uŗ`R�wŮ`0��o�4�H�%$��"�H>)�k�
��x�Cx�jt���h���(m����0k0���Q�����L��ɼ�L�Dc����O�WI%K�r��W��߀�|��Ex���N�
���������y��n���@߅�B�V���
��5��ջ<��RM�)O��H�D�ɿ#3�Z>
]�x)[��,<����:t�6ᑬ
��t7�J+�&�B��
Z�7pC���]h2ehT�sE������9塡|(��T������7��T��j
-:U3�P���Ÿ��@��7�Q�M��Ven)w�r��{q]yM��WՌ�C�k�p^øZsƝ{��=fK�m�`����f��9/��c� <��B��w����m"nh��6
M�ehԮ��Z\�n�%�6\Ԗ�^�,���4j��p��W�Ew�
�����ϰ~f`}�`v�`�*�j�
�|���vC���u!�����^���+
��9��[�Z��貸����i�z�;���U۔q�m��ٜ�z_�۶�l_*m�`_&�ۇ	+>��)���Q�Dy
P��+K����z?'\��z�?��#q�n����U���듸c��>�;����s�C�
��V�}��ҮB���ܾUXf�LX��D%L��3l �w���`
φ��1H�6G�[���g�\q��ǜ�q�y,w�y"��y_���s��W8-�q��;-�v\#,s��:�J�v�v:
;�9�:w�lqf���L����m|�N:�h{u�
�A��!�8�b��nq�m*���
-����[��u_���e�p�K��ؐ**2,m7�֛l1l5)0�.�7TJ6��
W��\:dk\^�V�2Y�g�`��(v���F�#9�
.�	%
�}#�c�w����JFs��c����S�[�ŋ6�-��X ��f��%Y�Z��=_�ڽX�����
U�9

��
���֥�
���t�'�+m�����Z#PM���88�>�(��c��E���V� ~�O8�qT� o�DѺ���k�6���+Y�"��ʐ-�ʑg{�fzmS,��m���ae��ye��
�/�/���L�:��}�
?>4sЬD}>͟��P�o����
;�`k�@�xry�����`A�1Z����ѓ�٣�L2�����e�i�t�,E���T�-��R�B���g��}[��~������=���h��(�1:��ӑ����� ���(����X2��

���d�
3lj2�|/N�&I
�I��?W��b�и�l�q�r�1_5׸S3�X��e<e���<���&����R}p���˴�S��h`o
�[t�ơ \���
X
a�d�{q�¿�

��F���/
-�$Y
'MN�'-P�	J7���Jܠ���<>�����j���f��<.�i�S��G�Cp"
-80(�ٯ��[�u^����ȉ�̘AȈ��Ң}��Q������XqR���9�Ӥ���'��S�
�E���
]��
��|j�
�)�ǻMk"�-&�1s��T�?p�jPEq����췍��Ҽ3N��Z,��ҿqBj�;�(v�<. at 0wl�pvL�8!f����)���xy\�
���ԨL��ȵ�"
��uyGEu�q�wgfd`����.誈�i*e�60�
U�RUZb�2�X�YK�(n�Q at M\)GO�-�h��k��n�Q���
�9��9��9s��{��}������b�<�31�=uO\u]�D��1�D�[~:s[<ס�='ˍ�y����
��kP�0e	�P�0I(��H��Ҝ�y2s��&3.N�
��#56Ci��uXS�h��vN�ޠ�G���Gp��>�36�o��_k�E
Q����Y�|��7��jd�Y�c
�?4�b���I�Q�4�I�\�t�l�-�4���
6)�1��D�")!�ΐ�c��/T��+�b�����۵
�\���z��/�N���Fŋ�~�>��\�3��T`'ٔ��uy�%&G,5�E^�rR�!+e��a򗤚����a6I�Ѷ�E	
-����$�}L�R�¤r'��V
aܦ	7�w	3
wY`�����%��Rf5�Q���|'��&`_��ԥ���<JҀ�t�f�9c(23=��9Y0e�J�2�J
�e��(۸�xyLZr��i������+
��u��bQ���ӆ�|�
N�Nl��
1�Ԅ�Duh�;��Zle�鵚����.f��I?�9YJ,6k��=��QX��%rf��ْ��itv�MTv�m�٨7����ʵ�*U/^��x����=�̣�9�ߐ{���_��: ]t~�Y����]��%�9@!��yF�
�%�H���w�
�#v��]�/�I#
-�da��6���KRAKr�������P5+w�����/���on���w�/�~9���;N1���\��,�k� +x\BҖI��U�+��ҡ�*�@d�d!��G�_ 	-�'
.��K�mJ�mg�d)�����W)�/��0�h�ʻ�09��.���^�\�T�fz�o�r
63��e��B�RL���/c߱��P"�R�U1�j$B�' ��[��)TIfW�KfV�H���2��L����i��)���&W�TzU
"g�^�?)�V���Z!�{-�����w}u��
<,�3�[_
D�=
-]c��'��Ŝ�a�U灙u��W���9��u��u:ɴ�ɔ�T��\����6�kkl=k����4�=j�"��
k�)<V�
-�U��x�A��J��
-�GRR�
НLwL
{����M��V{�ت����VOL�L�$��,��h	�[bO�"��b���IFYVIGZ,��&���̭���m�S����6n�����طӻ�mX��k���2��-�\��>;�I
2�ۭ���^�8cGbt�8��Nş��i
�kܭz
��a�5_b�[7
��W`=.�Z�
-���׆��]��4T[�]Mo�:����`+���@�.��
-L�
��p? ��f'
i�A̓0��
8�	׃S����

-�{�t�{Ȁ>-f�n)Eϖ:��4@�r��o�9t���
��X�r
0��y	��T�
��O�&`�R���3`�Q��19��*hZ]�nu�s�p2Nm����
U{0��C{2�O�Ay�
-v��P�7A��%����P��J^u��qW��}@w&cN��7s�G���80�
�u
-p>-�����*��ka{�l����(H/xAr��A$
�up�up�}�DwP��A;���6yD�t���3��=��S��-��i�w8��O.�ձ���]���#���Z�r_��`��HD��)PY
^�K�:_��K��F����n� ��)k��p��9�}�5���O
�=
�G��;�� �������pKŦ@
�؋��+p�
���By:��x�y<�K����I�d�;�B�$g��c�M|�
� ���W����
��"sO��^��-�/r����#�m�P�AaN
k���ɳ!��1�
�/Y$��^�������b�]LzWs7�� ����0"��D�KBI
I&Y����
Ux�5x��x�-���

�{�?|���3<E��<
�:q����>��DM?��} :[�K��WO2�
1�
�F.~EG+��#<C-]��c젫��O�j��ǘ�3�7�0uw������͑n�ѥ7硅��m
���!ʦ0/����3�n�4�Y��J�dL��ZG�f���vѵ��f�}7���"��
��ٹ�(.KD|��;����	���L�yTSgƟ{��$$7n�#V��j�FzX�l��$&� 	�@v������(n��R���(.�Եxlq���L;��T����tZ���y�O��w�{�?��=������#����r
-�O4~���%���<��J�LR���j|%��cI=
r
�ׂ�&|���\��
�]�8�p��%���'�.�W.+\���E��0TI��� C��Q�m at 0����x|ͧ�	��G|>�ɗ�K���
q�_���p�o�-~#n���
�T]��:�˪^�n�b���
��
-8K�!N��>�C�������<O}'��i�Ǡd�
��[�
��[�k���;���ϯ����E�f\�	��w���N�
rg��ũ!�p�/��3���94L`��
�"�"}*/�����@%�S
�������pk���6\�KÍ�8†�N�Q���p:�
-�jp2`9N�ű���	��
��

y��
y�9��t>`:G}�v���m��(/��cH?��5��'��Ip?P�;���2z4.����c��:	'�i8���ڍ���VW0��.�bf�z�W��t�[���=h/����
-���
��n{�h˸_E��	���zy����ɓ�Tb5���
�O��7�?�O����EOH�hq`�t�
�Dg���)`�Cʘ�!��]����Zv{�*vkp�hs�Ѧ�ŭ!��CΉׇ�7O�Z�4�gI�{��Y��*w�}?
�A�/�z�Pg&��2�S��:
�Qh
M��P3�}���:5��<���@S�n�T�6h�Z4u�u�q��UҠ�%Y���VkNq+5W��S�H�O�QZ*H�yY��ITꩤމ&�8��biޡ'�H�
��}�1
-�"'b{d86Gj�i`6D�3-vv]��m
/�
�%^
^%^�DR��[
��-
�&�
�+[v\^�'_�H� �{B�WG�7�&��3ҿ|�� �)�-F{� l��M��16ͱ�h�Ib�Ƥ2���l}�C�<�@�,�L\5G�$jW3�N�pZ��z�fyմ�yQG}*�.*�D=P̎�NQ-�x���yO
|JO�i�:D'�m���xZ�ѬS�Q7�u��O�g�
��x
�$>[T�u�j���Z��*���W+��F^���kS��
RΌ�U�i��gh�U�j�P��
��y�j9n��/L��]�n���s�!I���!X�2�)!�K	CmJ,S���,HNe�'e��%9ĕ��ىeܬ�Jiyb��L�R^�[�(��T�����Ļ���|~����$A�&�
\��9 �4{���I�F�� Ǫ�Xn
�Z㻨1�b�1��2�������h�![\npI��%\��BZ�_ +�/���7+�)ەN}��?����&���zAI(^s?�dN�~7�_m���S���J��< ��ñ �
T�MAeZ$Sa�2
s
-[�jfKS����\q����7�K]�*�Ӵ�'�Ԥ�1n���}�,�)�F?��?����2	J/�W��<�h��H�]���S۳��5i�禋P������1�3߃'#
e1LIF"[�nd
�3D��
�Ӓ/ɵ�Is,sevK�O��AaM��g�u��-�K�\'�Q�
�n��4A��۴���
����؁&�W��)��6
s��`V�ۘ��ҬPeE1�Y	��f`�l�Ö-��\�l[)g�ΑeZ��[�(Ҭ�xs�
U����d���d��ʔ�3��)�B�����u����̙K
P\K��|�gv��9~(u�D�c<
-r5p�F2y-�p��v�Y�尉�9y���bΒS!3�,���F{��`���ۏ�R엉�*��'^�-(_a�r�<?E�>袙�h!��kS.s(��N9�]Q��;y�I�q�#�
���Il��Ħ�3Ein�8�U(1�<R��Z��\��ܠHt�)uΣ|������Q����\A�����8��/��H4K�i�s�>}�
-$p�Gn�?��c�Uk���(�b,%	�����J,���v���-I..����	Eu������݊��#ʘ�O��ʘ����A��'�GHo���t�E�,���9g0����
���@X<�a�h`�D���2O
-��1�I
�H�q���K%q�\L�Ri���.�(�+��لaf���aQA��
׺<�T�5ڨE��A�	���EE�qA&.TD0j]S4�Vm�X�Zc4DM��'�>��3��}�9���ݓT�84ɬ�O�OZ�qI�P�/y��_,*��ʷ�8�
�o{P���z�N�����-gߑ���n���������1�>
c��	�ӧ#�%	i�J��-����,�K�RĦ�w�I�p�^��4;D������!:�g����k�{�R��e܋$�$ӻ0��
-Lg�6)C���8cl�7FgaTV?��
���x
�
�������B\�,Il�|�ଥҨ�ղ�Ye�Y�������&rM��"<�'"*�W�B
[��+X�IYIoR��٢M^��s=�����\w���D\�
C��5�`�0D�"�8�3�ƹB�q�fL��7�J��HC�vKC�viH�#iȆe!���Ԧ�.e�.��I
-�^�	̦{��~F`8[֘B99c@�"�u�(AxI$
%��_2
�J�F_�T��f!ش zS��۴N�e*Kv
-��PrQ�?
-_H
-���\
la
��d�5i
�!݉tO������R r+Z��JW��ޕ��eE�9��X��	0���e�,s�ò�������b��� ��3К�B[�m�(xuQ�!�b�#I��Y��}X La[8�
�� l�� ���
5N����
/���x�F��6�#�n�7�L����Ŗ�-�l�ڶ*�	�joAe}u͏D�t#�#s�*�g���1��6��J����ҿ�<	pnPB��U�N��P6�����t����>2�� �����kgB��C�����fQ��ttR@�Z�|
0�1��O'0��6 z?�� �
��'��Q@�86�!=��Õx-~�	�0h兠��V>��x�ڸ��\[
9��/��G��0�+��"�<��5`�#��H�a ����8���� �i��A�u#��y�㼖➼
��Ŝ����G;/"WX��_�B_-'{��9�ȍN2��I�{��F�(�;�޾���^�S��@y�\���|N� ���u'^�5�Mw6'݁�t�$�jV��;� ����.
�=
�{\��\��
��r����y��
�=��f��
-0^-�z���~I8m|E�&��w�͜<P]�G��c��;=�=����>��>�����ɤ���Dt�ح;D���M"�P2�$�ydI�O��K��
�����
ex�J<E��ߢ��'x��x��x����7w�3�Q�
Q�	Q��;��@b C�2���ӹ���t�q�L<�z<����Ltm��B�.����z��8Sv���'n��79��
�F�Btq��v��p�(�\�GBHI�{��-c�G�"���>Vғ�;؀��DW!-�tU�U�񭸆�2Gq��?�����"G�@ο����\�!����/�"��o™�8�9��i�ͦ�=z�Г�Q3p
k�Mrpq��UF���jF�g�
�ъS��m
�$3�‘O"�%�C�pb.đh8����!x ����ܒN�uY"����o���$[�
�T����Y�:����S�f����*/G�|�6�Eр&E
�:���=؝~@�JD���d� j�|�<\5x���]�7�\u�K�18��
Ψ��)�<���G�z��i8�^�&͇8�و#�"
֔��َF����8�|\ڱ��ln/`uQ�.b��>���ؐ<޷=��||���E�>8�6���p�c<�yL�a�ٰ{�
��P�
=�q@����
ا�{�&ؼ*`���n�:T{7a��ET�܁ŧ���P�Ey"�r��]���Y�t.�:ଗ+Z|p�G�{���(��M�^�D��ޅ��=��/F�2v����lT��b{@,e�
�By�
a��P�;+�~#���	�A�PD
-�@
d�!�XjY�?e�=���)P�� ��ƞ>Q�gv�ǡJ?�������
-���`�>e�
�T�N�X�I(ћ��`�Pl67H�CNI6�ܒC�HrCEIίx̲\fimc�?���p��}
a������2��l�E�a$��&�4lL�Y(6�C��OB�a��o�/���}���\��)A55�J
��.�{�]8����.�.�]n
r[�ۊ(���%��*X���ԱmSӦi3�δ�v�!m�Ӵ�t2M3M��il�/2f���9�����ߞ>f&m��J�`O��fO�-�'�_��Ʌ��ɍ��ˍ��
��"�ܱ���j�}6p/�{��V
p��\��q��z��܊5)��h�F��+"	ӚjLj��IMs"����fÙ!v43�gNsC��ܠ�"�\�4w�Y�S�e}���~@D���PC�
��� ܦ���+��;t/���m"�h��Uc*7'sM�έdF�NfX�a���젶�
i{�~�0ק=��hg�n�K�.�UEg����_	�	�y����y�����B��rp���
e�C��m��nN�S�gcD�ǐނA}�ۘ~������#� ۥ�悺�\�n�oӝQ���	~�+B�Y_٤�+�Ш�>B����I�N1�@��QD���,��6�0aL@ش
æ�4g"d�G�ٌ
��t�*����t�<l���m5vr~c?�l
S4#B��E�k���7���~A|��3�GYg�*=��1���a�V���4�(�P��g�|�(�1Z�c���$�ך�#V-�V:�V��"1��i���&K�hi�|�^��pD�)�ܖ��rYUc�E�
��E����*����ߘ�7���t�Y.�
�,B~&��E
�ǡO܄nq':�T��d! ��"�I,a�J�+:�z�����[��k�c
-�xJp�s�jqYeo��ğ�T����sT��M�
-�ܧ9�:�ި��@W�Y��L��1��Q��[�`��K��R�,e�QʃO2�^*b�r�%��Z��uJ͜C
-���QE�4!�Ҭ�B��*��#Io"�I�Qey�C�U�Q����j������y9F�z�K�"��	h���Q~^Y
�|n�0je
���lc�ek�9Y��+�E�<.��g����(� ތ)��#ʟ��ʨr��ʨ��Ϩ��H��Xt�<�S�O?����M at Su<�՛��˞�G6

�
�9J�!3�����c��m\����aE���`����د�
-�?&�#>UVG��5�U~B��$��Zʜ5���!��M^Z�{����&��Mp��ݵ6W&dw
*�&����]���
��g�]����
]�
-�+"�\�F�5��uWep��2��Ci��Ji��
-���z�E{R
p���qb����S#�u���Eu�S��nC�w�}j����w�ςb_c�٘B��5��Y���3��x�wZ��.	���
-��וy�w�������y�_s�j�J`��&F�
�O�y]���7�Gi�f�-�P�O�՟��
-f�"��1j���=��d���\��?�_T䴼��n��"��[���n~��i�~�-��J#0GL��Q;���;Z�� P�����Ž�0wn�)���
j��2@�eE~W9�
�����t��Y�V��2�s܁�wyu�6�
�5�������W�Gyu�7H��������JxZ)st�~P at 1�л����oA^�nhRqp@��P>�Cfd�J�	U!#�:�¤�z���q65�<�o`�M�>q�M���M���K�r)=k�Ju.�Ӟ�F�� �D�5�-��ʞ[��
-d��!st#2ƶ���
���c8ia=R�|+,a_؉�p���H�0�ç�]�
���M&)|�I��I�7�4
e��ָLZ��q��h�
�����c�q�=dL ��O ej=�N'��$$O�`���fb�I�"���
q��H+�FB���3�sH�\��3oF���H��2���8O1p���#�Mύ!Z�-�v�8�7	dRLL=�e��\,��'`��f<����
)H\8���شh���lX���|s��/�#~q�xq�o n�=<9�)��
 ���C�h_$��u������h
-П�fIH^��6]�p)��	D"�\ށ�����X�"vŌu+�X�E�J ʕA���|��-p�~I| ��gė�P�G�@��p�S�%gi�9����i�%ҿL�/��וP����1M���}�S��QQB_C�RJ�SN�����h������HER
!�|�dB�2�9>��eȲZfǚ��5�5�0��ż�mw�\]����������繟�њ@ҚC���eS�eS�E؈�x��x ��u�`
E�
D�994|Cݬ`����@
c�\	�0^_����o�
��!��(`���$'
���N�Rp�>�ٜ6�9m��V
��<Z��[9ɭ
�u;�
��yr����)�����ɘ��+ƫf����0j�RӢ	P6�����76�
-�
}�����@��R;�Nl��_���lL:X;��:8�

���u
'��F7yۀ��܋��o u��Q�`��=
�PS��y�����
-�*_��6���X�A��E����l�����<�������s��Dw�'
��L7�;� ��0�x��0�ZSלV�/R��"���ȭ
�N�'w97?��=�G3�s��Ǽ��BOٌ<�����݋*�%�_꺑���aуBF�qd�$�$o�����+�%��9V���)6�	*�5�����	Gp-�'.�
���o��
���
��Y]>�
C��+"�/�����N�y�Y�G(��2ꬢ�:�l�Χ���q�����&��9��[�<`_�G���z��)s��	1'�#�`u����Q/�Z)�ʤN�`u��SJ���Y���1��k����s�4r����.��f����
���~/Ȣ!��ӝ�7���:W�G�P3�ٌ�V"u�C����.�b�,���l�N%�3_�gp��q�oZ躙Y<��8I�� +� �᧾d���
��J�Q�ϟ��0��Ԋ�hI�>��K�\�P����\͜���E��140M\�ts
:���k4�2J�C斒��e.��F��`��
�J.�$�A�"gѦ��V�84�%�^:��e�^.���R
�/�N�Z�*
4؉z�z��u
u��a��w�c�3v�E����=� 2����,wwȍ>��6��^�X�㴱;�M��I(M"pX�2
ʏqP��ze6>W�N����bO�r����۱�t?��6�3�/QmvU揱���-�xN����,+?
bIa��J.��l?=��*q�|��
]?o
���쵘�ݖѨ�����)�n���y�f����Q�%*�W`�U56Y����Q1�
�^G���Xm����n�zxj�3�%�G�yg�{G�����Fhh�:�!�m3;m}Pc�j��Qe��v��l��Mv��`7v9Xg�k�a�}9V�oE�{�X�^�nA��+�'C�
%��bY(z�Կ���=�}�
bi���}z�5�
56�t�3�8zc��?*
ð�1�ӱ��#�9��J�YXR�<,u*B�S�P<l��dX�P8�^(�$,�'!������J�u��YЅ�,t�`����GH�7PK/��W���\��~��]ݱ��+\�P�����Q��!����-�n�(p�/,t+��J�\�uB��ja��:1{��\�
b�{����B��!��x�_P���������
�>ۓ�
C�������%��(��C�g(
-<'b�g$�<c�뙈
�Ta�W���'dy��^k�
�Jq��
q��)����:���2���w�N���o
� ���/y̔3'+G`�3����NX4�y*,Pb�J�l�$�UE!S�
U���Jf�r�4�1EU&&�6KI>��L�CR��i��mE��/R����.�����
a�����ǜ|�+��W��㬰@=�ծ��
�L�?2ԡHWO�,�T��c��N��iB�:[H�+����~���vH��ZE��N����һ\b�͡\�l{�����Jza���|�7���[ +�
Θ
�� _�!90
I�����B|��B\`��/�.�>
\/E�(�
TL
:��
��<&�J�A�ig�����V�2�9��Rz)d>rIv�!��cv�
RC��
⎙!c1#�	!a�
��ؐHĄ�
-ѡIBTh�0=4W�
-�������mSL
-�'-���kza�����R��Y�A#[�]d�����K��3��f��	�H�0�$h\��F�F�hM0�4ᘮ��i��Bdx�0%|�09<G�/�>_#M���2�������73��(�Bj�+�7&���
-"� �0#2
L*�8������y�2�T�2E���$�\�Ct�2_ۮ�f����F��m�o^R����=���|��y�ߔ-���}�����ԋ�RR���-�)>�Ϝ"3�
�*��{�$
��ef�Eim4%��wW^z�
�Q�M�	�	ʶ&�f�P��ndX�V�L#��1�Z���[W����,�2�Z�2���cI��>�&����6j!�<@<�Ms��L�)�.gf��2�˞�U9Y���,[�2m#e�%)ݖ���
�d;���Ӎ��bSR�ה���<&{�ytv�%!�>�ۖ��h��!Y>�q4�M�`,e,x��� �����	9���*#������f�T{�R�c�lO�8�MI�<c��e�q�1
��Q�J��s�c�9�q��8o���2��0���~�(����P�8P
-�0=}���6�Oּ@��uRʤ�JΏԸ�(%��Xg��8�5ڙ�QN�F:���YF�s�i����\o�q�2u
1G;ϙ��4���<t��
�H��|�
y�Zƀ2X �`*˝D���&��<5@�S�k촮]�S�
-�kdA�F�F(ޕ�8W���r뚬W��o
q��]U�(�N� �!8cTp�4h�w�3EM}�~Z�-謄%P3 2�OE����Q)a��F�
R\a���)���b��4�=L��
q���n��'i�{��K��~�5F_�v�����~ψ,�nD���g��j	7�UO�l�����3CW(��%
��L��m�xI
.骨y=5p^
�7D�=���IT_O��x��LSo�
Ex���Y�
�j#ܳN���%
Fx���������	��@!�'�=���o�4��h���k������)���z/Ž�s�@���
�Q
-�&+�kSwo�
��ے�겤R�z_P�w�B�'�BJ�+t�O
-}�g4�	�g�怋�p"�h'2�3�Y��R)�̬�g�Xy�����Ky�
��Th� �TĪs�hu�L�#���X�R��yj_Y����
-�ܣ��7X񱂞������i�̧����
i>�E�,���
���%��e� ��F��+�����am�ڭk��u!��u�
-����j[5Vm8���պʭVU��_�Z-�m�ߺC�[[7䷦A-V��s�y�\�۾HJ��1eRl�4�^kЯB��n��fs
��n����Ԣ:D~�aj^
)K�`���e��ổ�f+]M"�ˁ�샓4(���-��wZ^����;�i��r)	�㞓���nwF��[��
��Z�i&sMk.:��⽏B8�ji�j�pk�xj��u-���H�N~s���p��Rb]���05g9�#��э܆����A�V
-xE�{M\0p���v
Ǝ�4�G�h���
�1.�:�:6z
I�ù:bQG,���
����r/���ֱ�>����[#���>�A��VG%��h����8ٜ��h[�m��ӝi�h��ml҉GccPϡ_ON�It=���.��
�������9_��9�%�t
�z��uR ������g�l��f1�3�] &;Jw�>�%}�
�iB�PWf2�P�WI�U��̫8r��f`�Db���4�05�nt;�xZj�~��y�l�	����ҧp>�H��K�
o�[�ȝ�k�r�f�>�7
vߐ���@a5쇃L�� ���
�B,$B&��'f�����ѿ�H��i5�\��B��u��z}�M���=�ż���tC��:�~����5V����)�@ C(���M�44sћ��
��
4棱XׯuS�Dg-:Xs���E]�>����c}��X�+]`�F>�/
j�h

�
���
��� 
�<t
-��b4�o�񉖑�
-R�
-�*�ߨ�����9��z
����˓���x�6*���&|����ޚX�o�C��1�Hw*>M@'_\h��(Ac�{)�ezO��<��z�߬���M��7tT��~
k���a� ���G)��3͉s �v��0��X\ 穋���cg��h<�����<��S��ot��8DN���*�~�������D��F�4�c���Q�l�/�[~��n(1�����0�dt��Ł�SXy:n�]�W��%�,W-5ZCNv�]zI;�b��f��V�
U[�����f�>��=��l�K
5��9cnE��鄩�����z�j�>� ���^�TPnB�Hȅ�@B.�@!B�-	!"�BAQDT��R�u�κ��εg���z��������vv��n�ݥ]������9o���|��=��y���2|k���1��;n�m���m���W׆p%f.Ō�b�^������p��e�^w�������qb��p��GX�}��qQ,<s�<N >M��B��!���R�}���[�;�q+67�D��ĕ8
.n0���np�̆v����r|'�p"~����b�!
MX‘��8�p�����1��S�l�ӛ�+���,�e��
�
j�w���ѽW6����\ڔ�s�xi����XJ���$+���܂�d'wc.��#��2��-��޺��[�b_�7�7�
�I}���O0��v�G1�
QݟP{WH{���1jm��<OYΤ��d�
K��BF�3���� ׈n
��NLq=����$�{21�9����ؕ5�Ѭe�l{�m�c��}
�~���a ;����_Q�D���H��B`����,��u��m��l.^�`*���*���0���8ߎ1~F���w"��Pn;r�` � ��λ�P�m���
-~�����(�zB���Et�I���2��St�,R�Cہ�5�ΏǤ 9�UP�Q�
#�J

��Ch����B7��>��� �}=���]8���c,Px�u�b���'�k�����&����j~GI���F
�(�}��L�s�1�.�è(	Qv�
0 .E��
!q�bz���]�Bg���Nt��W2���)�Z�����XK�M於C~ʚ%���X�$���|@5敏��)p���S�=e�勔�Ǡd#�$�Jr�#�K*C at Z�� �Ԃv��enx�:�)
�-��f�$s��S�k���4���8?&"�fE�9�O�O5_��{Hc�q2Kc�^�2F9�)_�<Ay��)(�ѡ�]Q�VE9��*�(Mp+�Фt��l���
�;��|��Us�^��l��
��
����cQ���QfU=�
�|�ƌsd�L��3NY�)G��Q�F@�:��,x��p��hR��RW��€�
-

��WzPW�	[� �jƙEs��jN1��Ǩ}�|H�@��1j�O�'
Pݛz�49D&�N�7 at 9z�_�Ц��G�	��t��|4j
��JQ�U�������*;,:7�:?L�>fԏ��
��/1��*Go�6Gg�!�=G���r�O��4�\�Q|�̒�մoѽ =?ei�Ѭ�_�>
�T�x�
-`5��\�@m��j#�5u��iBu�c:�NVe�fZ�q�1^�T�r*L�#N��K�
�T֬`o�+&��&����u��h�<͔���zS<l�-0��`�͇�V��Z
�
-����VTY��Zڠ���aj�~��,�r�%����(�? ��(-�I�)�QVN�Z�/��#d�DH��S�fZ�s�e5��8m�Qmˀ�Ƈ���:	4u*T��PQ_
u�*���.(�C��'�̾�����~�I��O��LZeҺ(+#��h�!sd7$]�C�A]m4���
�
�jH��!��<�
�r�ܩ�ҩ��i��U��
���k ��	V�gb�9&r�J�G~�Dο3�3�čOݰ'ɋd��IirP}ɍN@�ݳ9*w<��d�[2!k�E��R���
J�V��.��>y�(�C�C��
x�I�e��_3��L��V�e�(��
%�d�tS�V�@uʹ��[h�UIѶ
-��X��6��#
�
D
(���v�B�	���/���
�?0���2���x�m�����
���Y�/��
��sd���?q��
� 5������i��ݧg
����&#?�E^���`!�!	rB*d�
�l�nFf���2�SH/!-|
���H	}�������z�+NR�i2Bz���'�6��� @m� ���W�7���Dd��;����<�GDH�Ȑ�DJĄ��$��#i��G�b��"6F��\�yTd��"\�
\�T.j:Z�S:*����
�� �+\���\REG'�r�IsL��:���Fs���q�<z:�� �p��{�����-{�\���-��2��=��3�� ��L�Váh�G�5֢]2�P�ŀY�O~+y8�u��<
-�e*
�{a��
-#�Z�~/c�`��˹h���fɱ�L�52�}�'2|#Ü���LyV-J�!
��w�db����R�,)r��'�?W�X�Xb''��
-&�%PKG�[̲����ZZF��%Y6�
5��'��R�vv̒+4Ļ�x�B���M�J
̐��&�l.@���藢���c��l+
eS�0��
w�/q�ƪx��h�U4�j��:��q�j����>灼����i06��@��0�{��]1���K%���5�e�dX+��aXo/m` ��ƣ�P�;61��2��������@��:X�v��p
��{���KO"ޣ�br�ϯ.��˥�*��4���q�~�d��%dԳ
ճ|�$�$
;�G��؍
�=��g~Iރs{�Ec
�����pnk*>'͓���|�]%5��!���qw4��V
��B�B%}l�N:��P�Bp�$
aI����v
g9��s��~�D�D�$�<Ɂ'���
=�����Q����%_BfjD�d{ =����YpN�'�)|FLN��3��,19�%]`a��
�B.�(}IN�P�Wʤ�8x��
d�8�D�u�:�1>�J�;�돟
�Ч�[
o��
��p���p	���p��������&����t;�1(�����{@}>��n ��p/���p_���b�?��'v�5Q�5M�+[�4[�R�
j��c��r}Ǯ{Gﱷ��EsS{�����^�
��=��9�כ��	
`.�A�F����hC+
�q�����r��C�H_i!e�W�k����2[�E�B� �;���ɳ�t���Uv�
Z���+�~�~v�uG�M���D�]쟀F3��A#�b�Î�Z̙�m
e���|��??�[�#(
F��XI�
���5��h�H��KS?����(4�H�
�И��9h��b4q�R<_�Z��ق���5b�.��@dP��+^�?��jF�
�ؤ���sb�guC�

� |��h4���)ڏ
$/{��;vk.�r�r�k���m���O�qR-Yۤk#�ވ�
��?�;@��_e��.hza}�D�����
Bc�>��
ر��lÎ�ر;ꔏ�<�-�zU�����v5��ZV��J*���T���
�)W�
��x�����+�>hv@��I��y
_b���h4���ICg�V)�B�^��f�U�l���l��F-n~T���Tj{O����Ď���\�봷�
h�����h{��N���C�-���U'���5v�k�}?U�V���0īܐ�e�-5L�bC��
f��a�J
�h��*�w��\��*v:�"��*p~�9.ϔ�bU��n�ܜoG����E��چ�{�[���E���h�s�V�Dh��������_��wTb
���-pM�<�I*v��"�
�j�[���Vj��F�toP��G�6]T��}e�~֟���h�<w{a
m~
-��*�e��AKM&Y<���u��6k�g/{�U�� ��
�<�X����^�땪l�
e��SF� [...]
�)
`���|o��|�j�o��|�5�]7�{M���R��@e�
U�_���%j�_���OS��&�����*%`����q�*9��݆�J
-���4c��i3T���Bl)Ɩ�� '�z(+�_A�J�Ҵ����Gi��498F�G(%8^B�5.$U�!�Jz�@��������E��vZ�þU\؏`}ɩH��L��
E1�c�ll�����wpӔPo��kRXg��u�����Wc�(��%v
�1
��i�FwJW\�<��\���*�����E܄���c�I`
,���b��%
�ұeJ��&w6jB��ƅ��؈0%FDjLD%D���o+."F��
Wl���
��S5,j��F-�;�
-
6oR��Q1ѧ�
��
kP���V
b��
-UPs �Qlz4�>��D�(9�I�Q&�1�S�9Dq�p�jdt/
��a�44z��t���c�-M���h`�yн\�g�̣�:�0��+*"�EP�E�a�eXT7�(
-.ǚ
b���&Z���q_c���5֥�1�x��X�Ҩ�Z�M��D�?	����\�{����������0��t�^���>|߂���3��s��1�TG9y�%��41�W�1~���P�ŌV�1V��$ٍ6es�[���2��͔-�WJ3-W��A��MJ��`�?f���r��1�
6�
�k`T�
�7�8���b�Eq
g���O9�����+����h���`U�9K��q�&�(%a�,���p���F�I�JH�c0'
�+�
�
	�?�:cx#�%S�3�=�|K!1�'tTN��쉽���/[�P�%��5)J)Iq�$[�����d�-��`�.s�\ŧ<+SJ��M���2�Z����
�bS
�����I����	��Q�g[�)#�Si)��Z�d�Q�5D���JH5ʜ���4�Li��K+R�m���9��-Qtz�ƦoԘ�Т��K
�j��0������;1U�e
��
-�����v~�ۘ7m]���Č~2g
V|F��2��-c�Y1YVEg�56�@c�e��h�K�����oPx�v�e�

-��G��
-�r+^e��ti)̇��

��߶L<G3���L�^��魘
E�iln��r�4:/N�yE�e*ܑ�0G�F9��HG�B
+���F�o�C�N#
w4"�'����V3u��J��E�Hg$Oɕ�إ��v;�SQ�}9��"
-V0\�
-�5�0F�4NHa�F�jx�D�kX�
-�QP�

-,ڬ!E�,�V`�
-,`r���ȡ0
&��2�F75���C��1A
-����

-)��%�
-.	Ұ�P
-�RPi�KS4�Ԯ��B
.��AeUz�l���~��e�j@�~��~��75��
,v����)̃r4�!���Rr�
�:��W����^A�<5d����Ӡ��z�<X��a��d�3A~N��;
��,U_g��8����^�������|���[~]=��^�ܭԡ�K8���"�E;
ms��=��&�(���UtV�9^�7���T��we�zU������o�E>UvyWMP�*����սj4ʳr��U
S�9��9����~��nբ� f@	�p<d���v�t)�2K
-�.�ϕ�.�|�������\�`�����
-Q7W������e��+_�]���5W
\�����
�0���P}A����n�w�)�a��9S����s�l)�
-}t��F���?�\�I]j<ձ�G�k��]��
5|�k����r���RKS?�`�L���5���`?�u�]�	����<τ2G�3�ND;z�4j�4t1���].�<��Jɣ����3 �{AO�<�j�5
Dk��6�o���@�5�����<l��
�}�r�
�NU�Y���M�-\n\�3�4l�+�>���WK�X�N/` ^����

���@
���8���)����a3/�f���fl^˹-��~��**�uv��4�{����W��n�u�ٕ-thF�t2�K���`
���P��y;��N��� ����n
��{7��M.v7��7�\�ĵ7TN��(W�Rj�����g�p�G�˽_���&h'��?�m�M��^��!��A9�18�P~�!�0q�� ��G����BA���l��p.��|�������7 ݾ\��G��� 
�x����`K:�9:A��$'����1
-�G
f�:GM��h�I��
���ކ�* ���]��{�
�.���C�vy��H�8�ZZg�8
�U���|J}��'�|�/������F�����k�~��E�o#v{n�;tk��`�3����?M—Nñ��=��]��
|�m-�-��M<�
��W8�/��t?���úB�9sI�����m|��y=�C��魇
-Џ�
F��{��o�k��:��K�����k��O�B
��<���u:�����=K��[Dp\���џD���l�AOЕ��p�@���F�=+�1�ɤ�I	*�!q|@
#���q�8��մNj�����B)�����
o���d� JO�X��WGt��a���(��V2:�h䳣�:F
G��q�K]k!�����*�Wm��Wx�vjgv��
�B��������m1<�{�/�H.ΐ����}�"�1�++�Y
�O䱜L��Y�v�N��A
�Túu�LM��&�آM��G2ӤO����<����J���p�W0`6�`�`6`����
-$��&!Is�
M�4I�&k�f]zd=Uu������ӎv�6�դ�Q�ҺN�:mk�U�v޷d�������z�����{
>�I}�R��/���xW�%^ս���ŋ�7��Zʥc�:�������\��G����&�dQ��qX���<�pz����}��^��ݐ���s:�����D��v)^�V�Y
=�HӨ5�K�H:ҩ�	���.��f�ƨ4&�$��^���KcE�����i�;�
:��p\'zL�}L��5i���Tx{Y<��򔞯+�='�$�eK�D�Y���5
ί��� g�85��0w����k8�vǢ�}'G����uW9��I�X��c~ξ[�c_��,o��������S�����)z�(�]Qx��!�˷�'&�s�y�[Ʃ
՜����-
�����
��
p8n�CqS�7ρ�E���l8�
�yn7<�R�����_ga���4~�c�+�Th)����_���4
3	1��7r|S+�"-
4:8��bB�	~�&�;a���YL�fW�N��#�(ۓ�2�t���יI��t�L��Ƕ�O�J�|�kz���JA.�=��yJ-�爼
J6p 9��\v��XJ�b1���R�YH��#-���si#̦M2�>�t�S�	g�b"�㙏�5�;�e�����2��|�+
-�O�����	=.V�%?{�ewV,�Y	,de�#���l3������3��a*��pN7�9��nek�4�y
���g(���(�F�s���P�;���."7)��R��.��JŎ�].�%�Y��
�ˏg� �m��
K�(�d���X��ѢV���
�2X4Lq���턶�GIP��ݦ��2=K��e�6�ҿ���7�Q׾H���
�_��Ny�����5�K�/Ib�$�SC�rM6�MN�J����)�&X:@w�8]e���o���
�s�[��<����7�C�_�k��ҝ�6��G�
���Yy�ҾLh_Fͱ
��
���3��k6�T�mq�ei�oi��⧣"D{�(���U�h�:D��,
�xlO�}�fۯ�_��\DVyF�W�f��/����k\�2,����'X�L�5�����v�
��I��M���[��a��S4�,�d���
��+48�/Q�xK�E��Dd�'�{�VwQi�>� f�<��a��Q�S��@M
�5���x���K��+q�
4;\49�p�v�X;HC�$�u;p:�S�<Em���q
���^���?���pF����L�W�uJ������뗏����_�ڜF<�T���49����P_C}}Ά���6��h
Ǯ�ƵL��$�M��5}
k�wůğĿ��"�\��F�ŢKy��z�K�����q��䊧ѕL}SΦBj��p4[�7�Q���݁�݋�=F�g�J�
*Z�ci�O<����[~���/,��*J�R��:�M%Ҩ�>ѩ�6�n�5z�q��mI�ޚNuk>�VֶJ��
T����z�x���#��f(�-Q�[�仗��G��~C���(���7���_�eJ�������"(��Y�R���Z����
X;�Tv�Pљ�����N3e�Ք��1�[(���80EQ`��#.����x�����
�O~�S
-��U.��.HgI�*�1�'���k�*�j;����ʃ��(��`KO>�=&�z�(쭥������z��
M��Iv� Y���
=DF�ۤ�~&~OF�'d�D�wK렴Ĕ�DP�K�I�N���A����?����
�L!w(���"���d
U�9�@�p��A҆GI
�#yd�GΈ�$
?K��Ż$
}����*wJkY�����E�H�M%Zc�U�V����Q�[cȘ0�6�H�D:)�y$O��y����Z'�$��bcx�M��ćOb_O7��x��G�?#~<Š���i1"�
ѡ5�U��I�J�Q٘�U��!}z
I��$�m�8��Ms���`�/6���8�e�|/������������H��u��^d��D�~@��c�L��<�0�"�"2�
-*�
��
5�"(Ȧ((��	(8*
-�+��˩₩
1n�&�D�Qc��%�i�[5�Ǧ�MjԨI�4��4�>�99=�Ǚ�g������}����T�:+�+�
Hϖs��<r0K����5}�ŀy�o�ԣ�M
��Y��j�%H.��r�D���C��f�\

���2`�]x 
kت頫��g��ȇ,
IF;��9�X2���n at 5��k���E��
r��A1�x-��Xޟf���ʋ��g�ȭԊ!+Z�p��^�����9��
-�"��҄9�a	9��Hx<��:�W0���\h���t6�|6҈��)m���4
y��x��8�l����0f�a[o����=�oU�fd�I�;��}Ț�M��
�Q���'��f��R�gx��m��v�h
��?v���p���M�᳇B�C,�1�̬������n��s�ZsI�t�J��k��9r9�k�_/7K4�v��'
>�'�'
-
<hi��H��i��?:^�m䤍k#m� #��HG�&���4�xO!މK��yp��z�5�$�/���
�#���0\�!K:NL^'&'�I;M��4�o��i�3�tΰ�ϒ賋�X�%g۹O]���
J6e%9X'�n�L������
�%��x
^B�@��H+��P༫t��\"7�eP�?.Ӕ}ċ�
-�y�d_�A�zN�ye��r����r�^_�j`}���s���à_�2|W�܀�N�'��
r�1�|� G�������|`�� �y���;��x��`�<��g̘�)Wߨ�ٴD_3�=a�{Ĝ�%s�&��Lt�����t�S�]��?��?��?��'ܽ�ou��wp
.�]N ǧ|�����i�q�衦2)��s�˻̗V�>ŏ;�q?>Ə��q�)�S�&�ժt�����"�_�u
�~�u���y����z��YWz��+��TXG�O�~>�/�~������طb-v7R
�(�=z�B>C,N��)V|���^
�������)<R"f v��'��
Bk(:�hL�~��Q6�OIa�To��S��~-���]����vف�>�P+[�]G���9DF�x��!�
��Ng�u�%y��ab
Qh�@#
����`��5��2yi�>ZU��
Ə��q@���V��f*�%��cD�
��u��X;��;�
����M,�$ǩ�W���5Ġ1
-�㱟��LV���<�H����f�؅;�I+�����o�[����m${
���
-_�v��'�
l�S�#���8�
ia��� t�����N�r
-�3��l4�?6ᇍ�l�>UG$��o�V��*V���[��r�����c�գ��_�K�s��4��g
[{/�^���g���	A'
-��h�Ec)hd����c��)E�
-�����ZV���,""[�.�v���._i��s�wr�#�
�kG�>>wp���e���l��w�U�S�Vw	�J�hY�G��%Vu.�ZꚢZ�L-q��"�|Y܊T�V�j���Z������֤y�-*s?�R�wT��c�x<Q��9�;�đz�㽅WMظn��
-Vz�iew/�w��R��Z�1HC�F����$��LU��Ux�j�g��<KT�5_�^K5ǫAE^�T�c�
-�_�,�w5����������}y��J�'m��|��^-�,�]dt�Bo�x��ۤy�����8Z%�x'j�O��|�T蓧�"��P��b��J�{nUN���������S��Me��
-~{''y�
0�
- at Cm
����S�/��]T��K%~�4ׯ����*�����5��X��NP����g(�?G���P���M�cUf�M��%�ئ���J
���A���smױ���Ā6lE�泊�r�)Ɨ9�2;�C���(?��f�����e�TV�8M
JԔ�Te��Rz�<�������+e@��lФ��J2
��J4]Qbȗ�
�\�Ն�.ڍ�iTC�s�_�/��2#��r�{hZ����Sfp�2LQJ7
S�i�&��+�4I�!�������8�RB�j��Q�杊
;�4.��
z��n�]���F��f��*`n��ˣ5�!.Yfe�z*=�W��>J1��l�D�%�G(1,V	a����Aي
/и�r�F,�؈��l���CuR#�~���=�;iAo
m�
-��1� 
-��ǽl�����09�C�"�J��	�����(�EӸ�ъ�
��Q)5U��kTt�FF[4b��0d��Ǽ�a1��|���`��!v�
�S\7�y�a&�po
-K#.����M	����̣�>�0�dQv�MvD�}
�}G�EepcĠ`Ԉ\ �Ƹ���5q��i�Fk��U�ظ/MjzbNs��5M�S��Tk7��IO��sf`f�{�{�����K9�Y�eI�PfR��II�HJWzr�Ғ���R%SJ���MJM]��j%7)��MG�`� �������A���,W�}��́z��@��y>�9���J�T�q��� ��d2��ј�T�I)&���
-`��ҧ)1ݮ��E��X��gޭX��`>�x�7�e8نV7�m\��3��0*��������ǔ��.S��R3�(�<NI�(%�'*!3U񙙚����IeP�X�
M�,T��S��+:k���+2�,���=E[
�l"�*3�k�6��5��C!X!���Y�
7%ey)�jP�5Pq�p�Z'hBv�b��5>;[�9%�ʩVd�LE�(<w��r�Wh��pH!y��Bs��C��8�
���hEc�hTB	��*��'cW��|_�/�WTA�"
�Q��B��
--
--,THQ��5(��YAE

-,zN�;�u����E��_�
-�Q`�C�E�
�����B9���<��\��*1��U2R��
-+3(�,H��"\���d��P�'��
-����1M]�&C�3�xQ�*��I�V|�Q�w�W�@�2���z��h��KUPy0	��"�_���:FbUB*]4�S�վ[=Vc�C4�:Z��x�1ȣj��)�Z��4ʻv��j��Y�~ ���<����k�C��,d����
-(��bjP*%��;&KQS��)�N2L!�z/��� @޶0yq�yڒ!S
��۪4�6Cn���:�b땳m���������\�%ܕ��jG�q�ـ^5�B
k��vj%�{]+�am����ly�=4����r���
)g�D
���d�j�� v~d��VjĨ6b��3|��9w�Z�V#5��YoX��h'���QX���э�7I�����]N
�����P��������J�[)^�lX
=��m�����|�!�3�]���
��rȣ���zf`�>}t
����j�K�4l)
w)
���W��e�
7�v
2�
l�
{Emg��6�k|�m~sn����0�(��z���8��E
BװH�~Rr_&�,��K8�p.�+��*.]���tq�������í�A�aa=��
�G�
���w1�]_�5
ͩPF�s([�\�!k�\�>�Z��
i�Jɩm�*si-�䱎<�S�
Q��
zt!��a�GO��>j��b��`;��6���{[
�V�f�6S�D�
E���V��Fr{���	��6xh���$��2����.�c}���c�����c����}
���ǹ�} 7TG�KH1��Ia�1�y
�5�빑�o�z	v�^x���2
-�� �� 3�#jr�K�� 
y�3�
6�
Y+0��;���g6�~��K8��N[�
���u�?��E�\vih
2 at o��!ނ��18��I��
59͌�#�
�
</�W/R�K
ե
�e_&��*F;�Dj
��ǒ�7��������pj���Y`��\��
�U�
-���\eN>aF�ї�2����gl�
�M���V�żu��ؠ�u�	<���=�w��'-�]U���'��m���u���}�����r
�uv
x�a���}�k���}�Ӹ�_�C<�ω���
<��74}t�WE�/JD3�|t*�-6�������K��A�N�w�}��e
�E|�y\�Y
"��qyW(���
�2�9�?9<�{�=�;�B���Dz�QD�J�^G�t�<ΐ�)��)y���|�<N�B�i�~���N��C�ُ�<�8�$�����
����S�%^�
-^��8��=�t2��a$J�*"��y�I_k
�[��X�����k�
z�
�*C��o�B�ݺ�](�Du���x8�}h��ș�y�k��!~2�f��]ʶ�$v
�m�=j"��.f
�k�Vj;ً�d*[�j37ѥ^}���':�<�����
�ZG��H�|�?�ÉG|#�-t9�إĮ�V棏9ݬYĞK��]B'����bB��Y��
�z�Z7���D�f�V��-7м8��
=���vj��=�E��E�⛈ja��_B�J��R�z��"~1[��R:ҩ���r�|�.t}�lc���+�78���v�ce�+ڼ���
Q蹡�MEǠ�F
��J���B!_�I4&�QK�ј��<v�T�C���	"�R����i�OǛ�����f�8͑v��u��>X��5�<�\�i�0w�|��G'
�X4��HG#
�|4J���=�ͫ
�O����[;i�$Nb'�'�sqbױsq��iR���M���6��Z�:��um�U�
]K+T(L\�Mh�	B�6��&�B
Ć
m0ډ3?�?~:�w�}~�{���������c�c/��
�V�0��]�b�
-�|Q��_�75���������O �op�}��������$��1�s�4WG
-
:�kѡ\����i5ϫ��~��j%?�L���
F�X0���i�*��\ъv�i���f�/hGɋ�*��ɒ�5Q�&����>d�
-���e�E���
��i׸?�-Ye,���-5j�Ԫ��J-����ЬyC��
=�i�j�׌!�
Ɣ��iM�5a<��Nj�Į1]ר鞒�ה0����F,Yڬ^F���z����Ч��}�c~��,lZ�s��Lf���1;5mnД�E����am��i�2�1˘F-�Jn\���U
c>�nzRq�U
Z�j��u��~���?��>�.�/8�l���>X�z
{�f,3�qږ�)�Q)�&��
��i��U�֦�-��������,�x���w��n�m~Lъ��k����s��xUa��
-Wާ���y��E��i�t�-��<�3�M2�s3���6{��f
��5dw*n�נݧG��
=�9b�V��r\��Ym��(T����O�����5w�U�:k�oÇ�g�Z�I�����"�r=I�8ce^Fː�H���_mU��P�Y�^g��8[��R�&���Au׎*X;���Eu�
T�����o��͉[�=�������?�kh=��R�
��io�ޡ�yd,}�<E]E\�]���V�U�.W�:���p��^ߧ@}B��I�5�R�g�ZO��xQ͍���������o��;|BVW�9��4�c@
-F�j�g�{�xr��)Q�cR�Ǧv�CO��<�jmlS�7�oT��!57���<'o�}'��]P���[�"w�w��\ ������i4`?[��0���e,aBGs��F��6��W!�ϩ&_��->�TckD�ָ��Tߖ�ۿG.Lj���j7T�2|[��/i�W��?�ճ�@s��u�~NB��/
]�m�|��5��j
���RC�%w{�j��c@�
��霑�sE՝GT���*�^���eٻހ_p�7����ά�濏�
�Y�jN�~�#?�����
y�J���
-ZU����V�n����T�
TeOL���CS�-is��CO�,|
�$[�[��&[�=��>Vy��54�И�V�A:��R��#Շ�}
rn1�*bQe�\�H��nU�����Ce�٢C�FS�]�C�;'K�̱{�M�b?�9�WY����7�3h��zϣ3�N A�ۄ%n�໣RU_�*�KT>`RـU�A�6
�j�`#�e
�
�)>s2����/�]��_SI�Ǵ��0� �:��
tf�|�0�^
B�-��'F��)ՃR��u�P��A�E�D�6$�dL�eH��K�ɘJ�	'w�(�[���*H^T^�r��*7�C�%~(�c
Fg���J� D H�~��h����O�b�l3��ɘ*QIʤ��&��*Lժ ը�T@�a��تuL.����EL�%�*P�l��܎������3��%
C��e{ˇv���LJ�m���<I
6����b���3K�O���$�����f���4/��	�xi��4ET��i�8�+�{�@+����A
�$�Vb�s�8��c�F���,ڵ^��ԖK�%
�2�~���P�p�g��3,l�?���
-Em�$P�f>ϳ��?�ݿ�}�"�	��JH��%�:bv̠���RѰ$�H����@����p���
�h
Ĉ
��`ּ�>�5&ym
xy��X{�g(b����5��
s/�w���)� 1WΣ���0JW�AJ�c6��ԔG1���	�#�u�ơK�?C"<˚�eße.��o-�q�3<�{>M�z�mx_Sh�B?��ʹ���
|���5�[By��=g��®��r�'����oϳ.�0�g��K��2{�9����	�2{�2r����{�������	�8�|oa�<�!�j��
]�q�����8zlk
=�?4��W�Ә�녘r
�
����D��
��
����6B���4-�q���EUs�wJ2�1�sg��
����t�@5y�q�_!1&@�� �p
7�" � �V�}Z�V[;�S�n�U�u��^�Z����Yٺ^�9�����g�tk��s�Z�5�a�
�w��/���������>�ׄn�Zr�1��x
v���� �fK�0�4&{C����Y����i>���>椏��� �~��q� �>�J��%?��A۹B�>��z�Ƹ%�9����j��]���
�c�F���2ur��9�A��Ca?/�~곟B;��i��8�'U��9@��m� c����A�g��|�FW�(ćW�$�
^�~�E�a{3ظ�!'���}�q��=/�X�Rl�
$�I�p�.G�&��&��
�ҝ���j�K�t�>�o�K�����O�l�H��1�������ӝ��S{���7$�

�ۘ~S����� �����M�̫2ґZ�v�>����
�Ϫ@�V�O�S;�tF=ğI�����
|�����ݞ�pOѩ���y�
�e
�	\���0]׹
��<w����2\R��@w^6��2�
R[��(�ד������b
=z	/��|
��Q|
a��xi�R��r��_��G�KV���L���
�v,t�rSk�Ɛ�2C
�K�����@�b�� ��~M!�t�����(ޣ�l"?�Z��I;��η���q2���n���?Wѽg��@Yk�@nj�����c�i}���ɼl�>�i"�'k�
���L>
�R��X���f�)������'Z��:���%t
,�e�v+�-�H�|';��!����.'v5���L�qTa'�&3�i�B/��mt9.�h�XI�dn9��L��?��E����v(��
,����r��5�^q�O�Cr1��/$v9�u���&�q'�����
-��[|c!.��yds.3:�
-��O�n1���.��̓�ي��
-��U2�E|�
��$���E�/�"|,��||���\�q7��˺������L�OgT��T2�Ce��O���8[�S
6��[���.��R^��/i8:4��D#
�<4��(G�J3�1�y�J}�P��\M曓����T��p�$�:���������`�v�� [�6��
�jV����
^?��!�=8-:q���HC��h��(f���S��wԫ�Mԡ�AS4>�.�
Y�����2�a�
ݩ�Ѓj
-=��!��v�A@{���ql5[�=0f��O�5�3\�6��;ܠIC�tg�U�aɚ�R{X���i���
�Tk�h��7�9|���u�q�
5D,P}�J�En���
��<�j�I�
\���hn8z�`�
�fB7�]<��K^:�C�n0j�!F��x�58�l�P�!G���1���X�:c�j��m�����Ue�����Tiڨ
-����I��߇�4�k��#�[c#
;zy����\�s,k��4G���
�F�I
�8ՙ�5�j�9K�f����U��Q�Uլ���E��3G%1�Tl���,�T{ ^�/�=���
hZ����W�L����
Z�1yހ�:��Ɔ��bT�%Z#-6UZ�Uaq�̒��X����*��Rq�ƍS����Yg+��J��U�m�r��);�%8
��:�0Z+М�Qt*��Nh�1m���y>G�BTa�T��,�5VŶDٜ*�e���/�Hy��&�)7�U9�]�N�%�}��Ik���2��*#��\�g�s��ó�֣���T�=����
��W�|$^h)U��b{�
-�F���ʳ��'+מ���le'��I.�;�FY)��L�T�c��
���|P���r:��#�x>�3��z��h�L�9��eHc�_#yV���R��!�:
�q��q�)ˑ�L�S�,��yJO-QZZ�R��L�#}�R\
��z at I�Ge��Ǖ��6|��W<h5�
ћ��<�X�uP�u9~��� /^�N���
�I.W��\6��R��pɑ����"%gV*)�A���Jt�(�=O��U�y�/��G��	���}U6w at +ј�f��y�PP�����ϼ�L���C����D)�3BI
���iJ��(!ۧ��r�rje�mӈ�)�˝�X�}�xQ�w7
U��
��������ؽhN�%i��� UPE<��r�{ ����H%��o�-?A�|�F�g*Η�X�__�b
-�*��KQ�2.���T�
����^pQ��C at KП��Dڑ�P
�P>ȅL���|�}�^��d+
-W\�Q��hŔX]����tȑ�_$�4��(c�,J�*�t=�T�����O��\�K�%7���ME�
�F4��
� �g��R]�AQ�g��]w�EЪ(*
-�-,�����
� 
-B��
m�ă�D3i�F���Ui;1&ͤ��N
k�
N�c�̴�L56i��֣�c��,�d�?�Y����罾��}��F�L+�����`��WJ�Q��dv|d��ȕ�Q
�Jv���\*��C	�~�;�+ιO��c�q��X�����^8V±����`>(� �
���*i�
��d�_+�;IF�YI��J�d���T�'[��y*�u)ڋ����'/ыp�| <�<�_h���&����q;(�@
1τ;�~$J�
~d����ʼnJ��**�@0�
� � � :3��"$�� �*�� ��!�y���U��Rx�P	J �l�L_��qÿ~L��l�u1JXbPt|�R.�Fz#ì�C�H�	��
��N��j�ų# a��K�gpK-��/p�
-PH�9ĜE̓}�O?���/��Q�_�µ�EgKO
�F+�k+:w%�K�����F.�(\/�Q��u`;ϰ-�D����M��T\~�vPB�s�y&1O	�_?��f4`��9��V�AZM.��?�P��px�s�{�E�z���3����
r
[d������!m��\@̳p}j��Ϋ)��$C��7�X�l�a�X���?X�6N`���LM6s�6�����U|R�M�y����Sp�w�+�TQ�"
͡|���ի^3uK	a·A?�

�XWY<���e0��":�����1�%7����	p�;q|'��q�������L~x�Թ�|���Ӊ9c5�=���m�p>
-�����q��/�O�=��r�,
�w��}�q�K� C� M~���'��q~g���<�>�,��O�
ڙ��zb/��k��u?#|a�g �D:a
 /�Caq0&�X���k����u�7F��4�(�8�
!��8��G��䠿���&M���������
s�A��
";`4"�hu��&x����`x?NsfO��8�)�������w	�/�:�r���΄;��M�6���H��hD�9p
���ɈH#��88r�p�u��\���,b���%�%
-~��O
-y��.����!��M��w�A��Q���j�@�|�ν�:���+�OQ8��|�����H���❧I~E?"�sp����h��B�p;�C�-�>�U�n�3o��>�$}����|�Q�X5���=�:�7j
��~�{��
���=Hj���=�k?
-�Ux���3z]W�]R�t�+p�k>�\P\f�Fi�3�
�[G�P'�^��uz�|���:��z�:~���C�E�
�0-��{/��J'i�
:
���A�� ���ƸE���+Z�d$�����,����%ض㷋�\D�����K��è���!�A���6���
�]T�y�xs�cu��9�/���pޏ#��N�����[f|�a
-Gb��]�m;V]��a;��l/�n�v��S����<��7v����#��dr

�E�A�+|2�����;�1�7bۊ�t�f���.�v#ʎ��^�� ���DZ��=B]��F� �yB�z����
}d�����%��,��ã%2v������b�\lQ*�'a{:�sυ�.#�U���{���~=�7Q�������By��
��5d��������f'�ީ��~�.�=��$8#��`;
ۓ�=�b��eد�~���
?:�C�ZE���Ko�����
-�rz��S�L��9���q,���Ǭ�`#�v
�����pF�H�o�~:��b&'2�B".��
-�8�p��@w���tұk�����uԣ�j�� �.�����3�H��x��U3 
2�_	Vq
��G�-*
3V�ÑG&
��ȃc
�e�T�� 
<�x����k1Q�舅��K�y�t7��͉w3	���ùs
W;#��k�#��w3�p�5&Ū1>Y
1�G�T5I��i
-De�=G����(�\��jyc�����m�+�U5q�r�
�?�����'�����L8����4��^���z����J���KXk�'�/S��IF-6X�3��k�,�!K.�l-H�WMb�����H�Qu�O��zU&����.U�Uf
R�q�JL/��tBE��p
|�'��6��\�p�-�������^~w[��6�2�UcJ�Ӕ�j�T�M3Te��|S�*��*7W���U��V�㖫h�jͳ���U����k}Es�o*��!���=��pm�`�c
m�zk ���.|q⛃��SbUeMR�Ţ
-�M�I*�NS�5[�ֹ*���Z����S�;�Iy�W)7u�rR��٩O+���f���L�9p��{HC�����
-���U
|��w�*�_��Ԗ��T��RST�:A��575Ksl�ʳ*�V�
D��Eʞ�T���5#}��2�.�5-cD��55�,��!
¿���4`��$�
|��e��}��o�Jx
 b	I���5AI*����;��œ��V�YK�f�n��V�b��UQ���y�U���ۺ�uն�]ﶹ��]����n��9�	d�
��'y����^������z|���*|�̍W�%Ye�ty-Y*���R O�G��r��jU��(��Ek�
-&-V��_v��l�4�~PV���g�~�<�mYm���j8!
:�h
0
L�ܫ�J�)��JA�� ��(�ͤB[�
6p���U��J����kRA�����s�R��~Y�;��|Vf�)e;�ו�%��?��
-�zX��]�
p
��U�[(�p9&��HQ�#]vG�lN��N(V^�O��S�k�r\m2�{��^�,�&ezv��yF����=�V���2��h���oh*���ց��SJ���|�w���I��cTn�I�"�r��e.r+��\Yŵ�,	�TҪ������)ݻQi�o��
'��}�ܔ��
���R��Sp� ���@)>”�߬�8Ki�̥��*�Pf�Y��I�(/Tz�T)
�j�hQjE'�U�o@ɾA%����;�Ċs2T\����*>W?�a;���R�ԃ�|ǤJ�
pϊ|�THپx�&')�ʨ��Li�ԪP��*����J�nRbuD��ŚX�Fw�lU|�^�U��	կ�+|�D�U���ݬ�m�o
���W
-<��w��L�F��j�V�����J�e�۔�wi��L������@�أ+�,�X�#�,�~o?�c�-�b���f���6WBQ9(.��ÝW
-��RZ N)S
24���`�⢇X��$H�)Z�Bh�B6��
�)B� �&ȖD$4�>������TP
*1Q
-<|.��HF3ńٴF4P(N�i�O�;�J�N3�X3��

.kᡖ&��lAĵ�)��0�(��4����1���� ��{���$f[��3����K���7�E���,^�m��f��v��
)
�
�#�#��ψ�v�l���/�
d��x��:��4�z0^o��
�Q&R1��&�J	ȵ	�����N��y�=/���亭�M�ԃ�
����>��������!�g����}�6blS��|�s>i�m��d�7yp.�]�6��E,`��c	5Y������Q�>����9�f�q/�r9br9�c/[��y�fg�0��%�� �<R�I�Fx��K��� -Ƃ��+��j��'k�cmt�e����g���3���~i� �'�җ_c6��QaR���k�
�����̫WFx
K���(��
&ρu`= ,�k��	,�����A��R�0/�A�A�n��>�.m��m������,����o�:�H��C���Y�k�7��f-�������Pl
,�`�'�&'ߡO�Q�!zt�~��
"�'(�~����sbϫ��5��*�]�Msv��,!�{_�3��hl�<&Bh-�TlDŽ�0 ň2���=r?F����(�8
-����a
:t�Pu�V���r�4�%��-���|��4.�F �&�1B�Jg蓳�q��\�����E?O��Ar�3��!pF�p����v�R�#<�+�;
�<�a�u:��Q��x
\ ��(�.�A]�6��������}f���J��#�+�{��^��8���i����
=s�yS~}������=*�:�+��G
�/�P]Wiԟ�%.��~J�~B�.�i\:���op����s0�^/�c��_������>Q\f�
-�4�G��5t̻j��L�?~�ʹ��y
-�J�<Cs?��D��P@��L��:�	�t
k#Dw��Q}�;1�?������R�1�
<eد%�Sue�2~�ƏS(��
X'P��84F��~����6�f

�s0>C��xЙOE������������h�4�7�jvP�}��hũ�߄�3�,j�i��0��)�(�'�
-���L5���{�� #u�̼M��`��pEW����h���T�՟W<~�`;۹�v0�Ŵi%��m�x
}�
%��rǘ��
as9��j�j=��7�{L`e
��R�5�:�%.�Z;�����}��Q`�O#6���Z�m/���u؞��{�݌�VlE�ݥ�����
�Te�� ��е/��i��Vқ��b�X��������1��\�G.��t욱k.l{�]��Z��쇰�V+�#
�]L�b��
-Y��<H����0�
g����?�>:��1~6
����ktv
�5bׄE
�g����?���R�X� 
a�2)s��n���M?ӳ��ٮ:e��05&9���(�F�����d�}�{���\,�XH.�&=�F�ڍ��c
~t�� 
!셱ۦv��,�n�/f��:��z43Ua��K����H}$A��+oX&�fp���:9/:��
jQ6��LC

8J�dR��r���u�a���ĉc;Ǘ�N�8N��vlDZs�:M�$m״	��K֭�b�BJ���A�V�S���
�V�1D��m0�؀�A	h*h�6&.ZQ��PG�'�e=:�����������3H�ì�1V�*f��젗���
�c%����X�z>���A4�lsG�X
㰔gKH	�����
;�;Ѩ$� :u�4���2�t���o>�.&�	zg=;�6��%ʯ�c�³�x/�U�|��8fw��
��cn
������i��L�"��.��|�5ը�\�nsL]�:�Yuv��0����-W�x�Z��(m٣f�A�,ǔ��V�r	�����v���M�{�R�a�� G^�{
���jSW�����K��VZ�liD�ҸZJ�J[;�l�WʺPɲ1%��(n۬�m����j�S���"��
-ۧ���:��\G8N
-6
-C��C7�]'��c�aV��DY�]-v���J��~%�uJأj��w�)��UԱ@
�1E��(llV��G!�~��*h<��G
-W�^�k���[�K�Bz��N<Y޵K3����JV%
��K1çF#�#��Ѥ�3�zg��C
-��(�Z���p�V��>Uy���9-�粼���u��7�
�;�\�MZL�3���v@�gi�%���r1O��5�m
-�
ջ+rW��]��'�O�
�W�T]�HU�+��ީJ�.U��q}�����\�Kry���r{oj'�荓��@.�pm�4�$x#�F�E���[��ת�ס�ץj�WU� D�J�[զ��~UT��㟐ۿA����
|EF�pJ偋r����P��Otk�#�Z�!��kR��]��'D���~��vy�*��婩��&.W0#g�G�څ2j��<4)Gh��/�ò��RY�
����cm����݆]
�
h�44O#��"���Ye�P�P�\u9��r�Wɨ�Uy}�
�4t�
�'[d��"kd�lUidJ%�#�DN�
*��\��d	��Կ�EسA�,$!�=���P
�<wG�r6����.G�){�R�h�ʢaY�	���T�%�Hű�*�oRa�^��d�?���*���*���vt�#�	����ih�Y#ԣY
~�}<�`�1���%�%m�&
�$=�$�U��SQ2&s�E�T�
-R��^��Ҽ�{��7��;IƔ|f����R��(� ����"P5Pų
-l�3A��4��lQi�M����
-��
���h6x�VLk+yt+^�o�Jf�%��b2� �cfF��{1u簆��	�Gc�r_ͳʤ�¶�c���m��������f��F���c���oՍ��Ƹv�
D��=d
�/û,��Ӯa��6h�&�5@�{?M������ �&��������|nc����� }1�G�x��a���)r�
�e��m 3���h)m�x7d!���s_C�}Y��5:%U��IE4O�8؇��9\�0}1B_����2yG�Q>
�ˀ91B�4B�6Lֺ�"��og4�� t@
mM@��m���ݍ>���T�𚱮
��ib�8d��6�cL��
�l�l&������q�c|-0'�3/�
�<~w�4\�|tz�����F��aɪ{Y�נ6t-#���Hb���3ı�8V�j�XC
�c�1�d�O��T��
-�3
�
o�c�e}~��z�����.hE7�5L��\�=5�-C�h,�I5$s��o%{sI�
��F�Mı�8�17v0&;X����T������V����f������H3׆A� !s���+��+�z
))"�ö[�/:@�n�dw�t/��
ı��v?��~ޗ��}�S��)
-�k�yR�{���꣯��s�"!����R�t{^sk^�n�h
-Ƃz��8K!L�t?I�!���q�8
f�
e�
ep��#Tx�p�l���C����N.a
0�U��X���R��|�������
�e��>oH
���]�)a�0K$������S��gX'�0ٟ����q��%=y�2����ղ�1@ۏ�k#��VR�+�{ ��@^��y3�xޔ��T'��Y{.o�?$�
��%�K��E&���<{ŋ��s�g�W
� �
�ml�}y��`�}ò{ސ͚���:Lm�`VKs��%O�,�~����c��c���l:W�� �{ś4썓d��ŧp����O�/y��C�/s�
�/d�"oG�G��,���~��~ͤy�I�K
��L�W��W��^/��}�_%Կ�,jg���'��ހ�
�Uf���yw?�6
sZ)�
-��:���2q�����Ӻ�{�Esx���q���~���
&̳�g��cۼ�8��m�~��v|��;�
׉�8i���M��鑶뵵��)�F�=��C��ݠ�$@��c��L
	��ILHC�C􏩈C�����$P��P����}�~���{����<$���%<����t~�n�+k�|>��
�
�ݜ�7�3
0�(_f�ѯ�=���M�gP^ <��?��QR�$�gH�GH��X��x�<	r�/0��{
>O�߰y
ކ����!���$�=�~7�V��!Rd
��c�s�e	�e:�#h�$���>��+x�y��K��+D�gt���������*s��B?�Lm*
���у�_��u���]S
�2�5t��������,���v��#Wȑ��q?>�2�S�{R�#��a����Cd�C����/6��k���*<	�3������ϋJ�\;�-�[Cw��6Н@w�Y4�:0
G���t�7��)T 2��d�	�V�9��
���-hm[���=�c��0g���!��X��=��G�G���
��x��l
'[�p�<��Sx�<���:Gϟ�#~���)�|��{�6��o

'��h��Vt�aE�.��U��F
�&�1KT���0{�l9O�.��:
�H��������:7�Ŏ������v9V� �]7��&D�n�,����n��_G�q��ɐ9�ߏG�5�,N�	2i�x��1��1v�1v�q|X��c
3g9򎳥-s]�y���l����.���G;Q��gYl��Q�� z
t'��]��C��óYI��Ƞ��o�p
�ͳU=���
sp��Q���ZyֲQ�M:,��������6rc�

e�4ԁ�6�ب�7��6f��~f��HՈj�x�2{����?���]��>��3�=�Ѳ�Єq��Q���ϰǦ!�[[��-&v�؉c'��
v�ة`�;����f�L$��G�S�\V��Y<�:�ށ���(�Na� ��<e�4���[)���3,�y
��[Tu�uU��j�-��-�n[^%{�����
�*8���ة�sI9�1u�V�u]R�u]i׋�Rη�R�u
'����k��c0�}�{�/e�Meån�W%�_EOPwT���r�.ux*ʶԕiU�;��w��}G���wIq�u����UE}o�{�z?�
-6�`o�Rc%�
A�=�R�]	_�L�:M��~��O9_ at Y_X_\i#���W�QV��W����Z1����c��)l^Q�|NA��#��_�_
�K��q{sQr�r�P後/E�u�K�!��A�R�G�d�TŒ(n&3;5K�kj
�(
l*ZT0tDfhEf����gᦌ�k2Bo�z��?u
-�7K�3A)<}Pᾄ/���
���Z��+r*�*�5R8
W(�Q0ܥ`k��֭
-D����=$#zZ��c�Ʈ�%�Uy�ߓ;�&ܒ'rW���{;i�`�R�ʵ
|��.����Z�����z�2cAbQ�c����2�e�u�&o;K�~y�Nʕ� g�9�_���;���\�ğdO��1��פ5j@
*P�<�dy�—6��-�ĭ
-%�2�.��>�|�ay�ji�ȓ*ʝ�ʕ
�3ݔ=�$[愬��e�pf(H��i����cc{S���P�2(�:x��$��!��(��*�n�?�/�UK�/w6$gGL����
���*���)r�
�F%O���9�s*�
r� �g���}-ck��l<K
�J��Y_R�o�(��f��g�2r.�tz�,�LY�H�.�E
_���"�S���DsV�Y(� 9��/�wo �K�}���>���@%�!��4����
-A�hߌ�M-]N9K-�u��ma���*$MG+],lj�
j���@���i�CeP���P�o�)�C���$P�n��N�S���!��6J�@e�����
4U6�]?M��S'hu>��[��w�4qu��:�@�z��J�����ʱ��{�-�hAz���<�2�Lr�r®Y�~���ΚE�~��A�!�a�h�66���@�A<�0ǀfq�&m�&А
��ឦ	]�`
ta/��)�q��
�ĮQ�<Hr
�2ā?B�;ꐶq��3�d��h�M���5��I<�4��ɉ����I��	���w�&�V�B{ƛ��!��]��a����6��)h������8�w�7�6��b��,
�x��e�s��n�Y�ݙw�]w4���Ս*a7�5I{�S���u����5�@�Q4�L�)t����e?~,��abr�a��0sq��q8S�
$'�����}���j�N
k��)�
e�A>�a�E{HY�a��Na�V��6
��3]� [...]
Pb
F
-*��e(P*�S�S
-J��/Pʥj-2� ʴ:�ڱj�
3���H�m-������ɞ�t���;��o������el?V��~��Y�pYKb�r�5�
c̉ջ��c,N����Y{���&Μ��&�38���]�p~�ᣴX���,�k�:g�HL6��}?�ѯ�'���	�v
?��m�I[�����-�����~x;g�r�!�q68�w�sΕΒm�
QQ]·�˨#
r�s[ � 7����c?}��&{�������v���dV��ĻH�����"��8���s��IKi�&x�A;�.G��d�#��#�h�^�e~��WN0?H�
��H�3�(�qe3~V�p��N�
�E�j'�[��ٜ;�nG��<�$�����H9��X<
�WU��~�H<^�W^ef\�.�
�eu�qD�I�N�
�ۿ�����^p�᳹��ϏU�6�K�<`�,�D$��+�5�>����>�ɿJ��Kb�&�>�f-�
|
-��������������Ol��������.>�I�Q��Aa�M���2z��
���2z���Q�{u��΢k~��8����	p
޿������z]u
q-����l�$.��%����~�u��9G�e�m�~<G���HOQ0'H�q�o���qt�x�=�;���x�y���W�V�w��3��v/�!^D-<��8�~8��9��:ΰz�A�4
-�)�w�&�>~|?�D�~�bz�":����'����~BiUh�
-^V�Xe��]��SNڟ&�h�q4�8Z�j%v�؝�lj�~��>�^�
��n��.�N�C)��u���}�v��!�~D�_�v���<���mv�\p�ǝ��;�v
�d`�IЈ�"v;�;�eZu&v��;�#��bl/�"V��c(��p<�
4�z"����%�kЙcp�_/;mu�i�G���:ў�؊ 
�@
�EN�A�{�;�ӱ;��a�rX��e��Q��Û����� ����r��W��+b� ���f����8
�S
�
a��@䩾"�;�=�}�
��ll�>B�~	���*Y�o���a���T�1�v���|*8�=���ط�{L�cz�\��c� Ql�z+�۱ݍ�>l`o6

�;������s�:��>G��NU
QuCt�
�~��1l�E��о��kپ�
Tc�	��~
���o�~���;@V�d
��jY�dg:Y
���G��-��e:������5c_	���;�~�σaWuM�C,��lr2�ژ��T2��c������^��y;u£��)TE
��G7Y���.���wm�k�Uh9W����J4f�<��i�S&���Tr2�ژJ���G��h���v�M�nY��m'�� ��dvQn��Kt\�iUd��~E&q	6qݏr�-e�/`5
3��
z�nz��W�n��A�A�
I8�p4�Q�^'����t���UR �Tx��'�y&@#5��Th�G<�����BV�a֟Y�
���:�l��<*�jU�TtG�ꊂ�
-���]9x
-�L�f�]e�\s�u���u�2�U`�Ү
t��<x���}Fu
a���V�B��/�|)n5�|j
-��j�E��5��&���(�̓���N��}J���|�T	����7+�T���,�Y�˲<�e���{�X�|xgq���ɠ�xW M|���(�*�+
-*

+�*�TH*�*
((
lW,8EVp���<��%�Lc�"ƣ�¡3�U��Z��E�
��5���xn�}
d�#�Q�Σ��_�H@�pH1#,ˈ��L##3ܤ(B�1��T82,�Q7�P�&뾭@ݓ�j#��U�#7��/�7�4�IhE�̻
�e@ҬQ��*�ˊd��pE����@��ht)d�4oW�\�Z�n��
�Yߒ�:(�uRn�pE5�
-��|��9�H�.�
-<7���%a����L��f at ufPa3$Ê(d�
-Z	b
���X���>y��$�;�B5�ur%X|�
	���E�Ί}��ṗs&�o/�E�̻,H�K}ܥx�#+�iժDb񠂉�j�����O˓�˝lSM�G�;lq�f�����܆i���	�I|H��bx�S�GdQh- ϻ|I�y"Q�X�+3�SD~��
-&��
y2�4Xr5��
9�g�Ϣ)���
K{��ca�q+�X³��Y�φ�$�/�"\C��edj(�f�s��I>�'ݲ�=�&=� #�U0�?�;���ӼMvū_nF�5#\�O&~���mX�fl�ؒ��!
|�|e6���;A+h�9�/)>�O�&�d\2�5
-����r73D

�V�:HJW	������xm�ǶA��lc�oC
��%K��"�K+>�|��pN�+=`hi�y׀)����ޅ��~�F5}fa��X5	�Z��Z�"�
-nUƱ�3h�:����Z+ne��J;�=��HYB6BIH�@���P� !Ѻ/��N�T;ն�K2��x:�ɇ�0p�=!����������?}f��^��L�R�p�φ��`@Vr����@�G�� ��A�w"0<����A! ��\�ŜԪ�X<71
1
�'#�h�G�����w_��C0"
��
5 m ṫ�`
�
�",B�",B�P�G�b��P
�!�BpS/� ���t���3�Ϟ���ߧ"�$�
�����/��0����`
%�����:�B�r�Xa`F6;X�Ap��ٕ�Vb�\���r>�i:��_PK�������
�-��:�G��/�Ґ�9�c+.q|�h"�|�X�
~5.�5��uб�Fl�
0�a
|x=��u��
��04��.z�E4)����x	��C�$����Hl-
�
y��ױ;'�jn�
i�\
W8tl�-б
k���؎�nA�
�pNlEMla�Y�6�{ר`�
-��Y�;���y8���0�
��_�w97�=�Ec�g�@Ҁ��=�	
�б����Q�R$Ή
�{P�1��j������`��	�<z	� ��aXB�5n���&s�;J
M���BD�q�
�~��Av{%���|�{
,����wQ��G
��\�:h����Ex��5
�~�<t�;�Vw�]�|()
��4�1�#�<�=��J� DQgP�
��6�X
@s �#Lt�G?�zj�e*��{���;�
~���v؝�;O�{(8C��#
�\�
-���F�س٨
)�S�"̌��tN�T���f`��#�H��8�00��;�Iw>B�΃�Vݕ�
�Y�k`������(,7U
-
U�+�'F|`���
	
- ^�EMB����@n/����+i�Q���'B/ p�aT�/D�;��C!��X��B�"�0�c�r�>�Q�8�
8/l0݊���M��?�xy~n�0���7|��c�ǎ�0q��)S�M����s��^�(d��^^�2l�/W�Y�n��_�z��W�l۾���ܵ{��"�ވ��־�o|���#G����?�����>���3L6��ğ=w>1)�B����Y"�D�-��U�5�ڂ¢�Ci�����TS��ź�Ʀf����f�pvv]��|���nܼu����}�ŗ_���o��������~�O�����D
%�}�y1�<\�'�_ �g��K��<b}���ˉ�_��+�� '����	�HB�M`8 at 8��A�Aq,>"0X�8�d$
D���0Q ��P���p)#`�@�L��6-��F�8�n��#����m��O��@zH(=&����c̾�dݽ��z�~���x�
�F���������Eyy
��=
�
%�����
�G�	�� ��X �'$`(�,�K?W-=C�
��o"[	;��=Q�o�;p0�ȱ����4�Ï?�����!Idr�
�-�bX�w��AWM�1	��	�0
-��z��޻��}�_>x�������o=z��;x��ɓ�O��k�M�����uDT_�_��ba~Cٖs�J��:C
�R���
���Z	�G#������e&\Wf���HK��i
h�0�a@À�
4���
w�|��k��f�dKe����Uh�_ݯAų�s��94H�A��Se	�*�g�)�A��x�Ӏ�	���n�_To�O��*HSo�Tb.�W]���ޠ�Z��A
�Р�%4(��ײ3n����膆��>�n��E���$YL�!�`*�_mԝ�/Qs��Р�
4�y�"�y��SIf�uaƹ���gc,�i��0�,5���pCu�~S9Ѡriȇ��۝+�]��xW�Y��"��Z:��Ӹd�M�3�^��Dv
�9��7�V0��N6CC4��N��۝#�����>1tdBG*�������@C��'�ie$5��h��ͥ�o�t��Р���Ur�S!�\ʖrz$N�:Ҡ#{��脆�ƒn#���Hi�	Кʷ��kJ��
-�A�˱)s�Ny6�K"cwgI�=��q:E�+����6�
������Zg
-�U�o-/�4C�TР�a;�rV�(�Օ
�Б�u9'�_�4
��q��b���f��՚�
*ʶ��̅ڸ�|5ǢT�۳,�8��Ȅ���#Eƾt^�鎗�{<��6�X��jwУ-VZ��zQQY�kF}QL�Vנ���<V�Dɲ	̎�
�#E�r&�ٝg�9]|ak��۝�%m�[
-
��j���tg���p�Zנ԰�e*�5+�ٖ�d���2�
-VG����p
\9��i���Ϸ9��[
���2CeX�ְ�RUt�6� �N�e5�4̖t5Ӓ�b�&�I���.��ps�6v.��iXm�q-NzX��
S^������J���YVwQ�c�gh���Y͉VK��m x*����2��
G��6������A?^T��Ra�X*+��5���j�������$
�!A�nh9��|N'������h
G]ǰ��.چr'�=U��t�i�.�4��'��$������l'Nb;niP�� 
q[�
�RN
��RJK9 IӬ�"���O�l����i{�%�Z�6[�mْyKҙ�q�L�8=��\8F\���w�����ߐ�LT�e�$
(!�a��S�
Ic.4���
��3l'��u�߻x�=�ن7���Ӛ�VTR��L�z�"����_�E>�ϋ�I��h4��X��$�&�}4��9߻����w�?���c�W�{YE˫���}�?
���Q
�
-˱lp���WDL�|r���V\�`Ɖ��
�м
V��mӰi�4l6
��m��{�Pdž��g0|ǐ��0��a���V]ց�灡F!ʺ[Kn۹�l�{�`�����?�)`�o��h@��l��ǧ�"���sf
\޼�-R�tɌ)��N��m-���n��ë�=��
-�5��e�'#1=0h�tH���h�#E��A����g
"�F	��V�h�•��I�b�m�0;;�6
���������7`�2>���A
:�S��
�vI���QĢU�]1��W
B�%
O�Xo����L[��n`�	�`�Q/c×���hޫF'�J��cs�_��+�!��DtU3(��˗�����vj�������Yy�`xN +
1™�
-x��[�V
J�f��
��Aƻ�
��C)�,�ȗ��fjkۭTk���ë����K���
/c�k$f����L��<z��Ң3������AA�h��%��{E"_�(���v}Ðn���ѡՑǀ�E{�v��X��|!
��33Z�Ѳ]��X4�A�-j�ؒB�/K�C,�_)%������o2-�o1ã���{�z��c���[O�v�ˈNـ�6�V�Ԕ*tA�D�����@�]�)�K�����z3�c�7�
Z��f
�۳��{�p�~.
qte<�`7"e�
����Ui�9��
��!8��\$U����ij��ݱ�f��V�Xׯ�Y�!C}��Oł����)�	)
�ZU�:hF����x��T5Lͭ��������\϶���|�Up?G�\=)����D����9��3�}�[Wa����P�X:x��Efq-6�jɺ[�5�|=�홯G�޺�ng��T�~�N���ɤ�ѝ�ڐ�
l]��=!5��F��Xx�B�
-�Ǫ�����hC˵��}��;޼�kaO�F���#��}������T�YإA
{\,|4�1�e
��W؈���XÎ�R�Ͼ*m;��B��R�q
}����Z鳌�ٝ�9���b�Il��V�ȵB%��0
2���qȌO�[u�a��D�ӵ�7�&��(��-��k~����iR��N��PF
-
�vhT at Ac<
-ʓ6���;B�?[�"ۊ��T�a[���d�����dcW(��i	

i}EU��q%ݝ���� p�P��s�
��vd��c��A>�G�z�(6l��j�;^i<�)7�m�}U���ɰ�w>&�t�%4��a��S
�&�Hs�ĉe!�e;�l����[�԰�0ݸ/Wi<�k�Q���
%ߤC�����X��
<p�C#I�F̍2�c`7�b��T��L��8u��xp{���lh��=�W-������
�r��ɓw�͉���;��0@"l?:��Ǣ��H������./����#3>o�����ƮO�W�}�/
���>{�cI_ᜲk�s��,�p!�m�,�g9�@�O�v.�Rg�u6A��$Ⱥ[�5��
�X�=�ښ�Wǖͯ�s���l��w�rl$&��"���;$�� &,�aq��
���J'�=ʲ�[_vw�MæaӰi��7��X�?�ښ��c˖�9�_��
0t��JddD�'�%x:,&rA>'���>\0�EE�
h`��Nӽ���GW�����pk�z����^`x���� ���+W���c"R,��B���q&<$�Lc�i7�_uA�[=k��V�}����;��Ǘ�/	�����b$�fǢ*�	˱\P������W@�i.w�Ef��x΁H�m�j�i�HW���#-��]
��`�0�(̩�

�I��HL��`��

H��w��EĴ�ϙqrxsvB�@��E���͌����:yn��8~
^���I3���m��fځ�6MmҔK�
IJ�
q�C�wI֣�y�G��ﻭ�Ѿo�bK�l˖%[^ �p(t�4u�U}\�?�ɩ��k����3������������X�b�?<1�{B1
)
�����ʠ)��u
-�e;���5+��j�K״4Œ��^�S5�x{
z��
~q_=�a8���
�ie�/��Ŵ�xX��j(�Q@Ө����ʨ�V���f�
=[rS�PԤtuE�h�x{
~���
{����/���ͩ0��/��
���!=��k��[�8�P�&��ڪY��� ��V	$7�
yM�RU�LMo��gn`�#��#4�n�%u��b��D�@��tP���f
*haTI���Ț^ʸ����,��o���e>OU�q�
x�
-�"���8����g��3h.����P�ԗ����M��Ь]
U,*��WPW�2�M��~K(���d+\����+x{���ڍ^o_
=�N�i�o���Yz!�p�g�'�ئ�b�
-Z�(�e�^�ik
{�����d�E�DU�ۆ�a�}�B���{_k_����ӜB3�sޔ�J(6�y<d#d�؞���I
.h5`U���J��UPW�
-�
-]�_f���t�����--���}�
���l?��mh�tƛ�]��k1�m(�@SV#8��S�ZʂDC����"
�	�Bj��]���*�QT�v?��r?�m����c����
o����G�#'=c�3���#�
�F-��D�Q��L�
u@��Y�B�P���Q4�
-�-��^�u��ֽ��/[|���<�7�Ƒs�p%'
�Z�f#�,��՚���D�ɳ\���S�
8��2�C��:v������D��o��s/��{롽�K�����m�x����8dG�R!k�L����B���E�	��)3T�}@�Z�d`����&�7�+�ܞ���}}�}��}�T�UK8����=1��%
vBFcr�Q�p���X��L"�l��*���"�D�&��[K76�ٲ���m�~��~y5���L�
u?�=�Z��	��8���
��0
k�cw���y�b��d+�@�"�����LCӝ��]g�^�)5Ah���]@�Q���2���8����
�4�N���`��Y�e)68G�Qs$�#�⯜mh\�l���t���r��B3lH�a��O$�+a��FT�&�.J��R�L,�	��N(;�1�	�Q
�1���
v iҷ�4ްin���|���b��-dY��~��FN좃
��a��
/a����i.(����I
-JM(-9�"IJO�E�|�3�٦��J�/
i=�������#)}ȧ���l�
�1S#�8�N����
� ��0��C����
Q�=A����D���R�.�Z�;�[O���j;r��
`��aR�4B������NuK�
}���Ae�A�9N�\ˑ���(��,��$
�fh��w��&��}��G��
'�����E���_���y�عr�Xꂯ,�@.W����D���a���ι9���9*�l	�-�qWG_h���w�퇎�-?k���׽�ҏD�.gF0�
QI��������Y�0����L�,�I�\�(
)'��ڼ����[p��������jx���څb��mwu�Ve��9A��{���@RB
�H,ʡ'�L�X���!n. &��⼏(+�����Aݤ{�4�0�Twm^�Qw
8R���vW�~_UvJ�v���
oJB
-&dp$&��#|$b32A:3�9>
-��%��<$i�CPM�����Acqd�<���k[cݍ����G��
���ۤYѧ���ۗ��	9�J����6�"Y?�1ᣱ&=���3.�t�ET��]�J0L	�)<������u�p���}
�'���/%
��hT'�bj&�����H�Cg�0g��d�sX]���sF�aFG2M����P�`3�
n�c8޿ ?)�J����._J���ȱ�N��p�/��\ڔ�I�Ai�9�_�S����b$k�d���l��Sݳax3���`<�_V��夗]i�5_J��ov�+��À���
5
R!��ڃBҦn�u\�#�.��@33lp�1�%Y��K�ִ������_�[�l�6�$��4�
��_1�}Eo}������O(��E�"9_72����NƘ�ɞ��x%+,��C�T堶 �#��y�{hX��`{�a�4'�ĝ�7�PeK(�"��*$��}�
x�-B
-N
�h�J&.��F�%9�*J`mA
�G*����Z����]���i�;�8�EU͡��k�t@	�{d�K��م�)
�9k��~�a��ə��
��(�k
B�~���gx�l؂�k�N(�?��d'�i�i/�i
-Ŵ�xX
��jx�W�:ep��C�1u3��D�r~Ϝ�K6-�('�,�e
S��$̻챡�l�o~lP�����u�՝���xXO��u�`�.8��YN��J�db�=�5�P:��)'��4c�
]��
|kˆ���E�����+��؋�1SK<l��}FdХ�
5<�S 3rrETvp%�9�T:��VL��1O;ZI�5x�Ǜ�;ƭ���=iN�se��<��T0nk���Ĵ�
�tP����J%4%V at 3\�
-Kƾ”w�0�)F�z�.�*	�-���ה
k0�&�
��Ģ�]i��g�|�7�8�O��섌���ШF
�K���@Nq�4]����iD%�D�qX�-T�c�굘wC����w�	�I�q�#����x���q������A��+�@�[
�q5@���&}T�'�j��U�jM��0������5�o}
�z
w��Ҥ����[�
{4p �v�KX���L���@�
��Q��L�Bc��j��M�8Y+
#�U�J��Va��k0����w�VC*y��C��Mh�mg��p��jL줌�
-��,���:�5#,���QP��v��?v���
=�J‚K��Њ5X�5��Uܟz���x��?��7��c�
���M	���Rځ��J��[�~�`��A�
�&d��H&Y#$c�0�$����U"�W�;��[��e�7�u��C��+fsp�O뭍(��rW;*q )�
�tـ,���V���������� �� X����ދ-]u?�z˃�z�͑eu}��4[�u�*�/ �օ%��1��=���<'�r
`���4;���p�#Y������v;G�uV�\b����KV�
}~�����]t�;�Q�oV���9E��A��b��!���@��
&X.(I/��`r"(डT'=Eq2Rd+Erp*��Vͻ�[���}�n*L/|'t{q���

݅-����*Zkb�>��"mnf��:�p �~0H�A�\^�0�K
����Ì<�h%�����\�|l|����5���Z���س52���C�Rj��=wIM̶i���5M6��(Ƌ(�Ԍ�
I�Ҕ�-�&h��8�VI�l��G�,M�����%;%�_<����3��mɟ�!��
�J��-�΅�&nc��~/l�E�#����aj��!Prj��
�d�
0+j�o����U��7�*Öo��6���
�|��$�?6��:��x�_����󔺫����K`�L|b��
���>*Q��J ���82Eg
�`�*)=P���3�؏6r��[h�/�w`�}����o�羣�=\[����u�᣻���nj:|����Ͷ�o�Zp7ȗ|Im��K��u��:�m�lB%a�5�0��as5�ޱ���wDGI��^�{I��vx�\�/��$ٝ�����h
�c
�D�,IFI�d��B#mZ4�7�"��T�Ձ>m��3��V?1�Y�i
ޯ�-:B������}�K�y�/�e�
N(���^,
-�ю�d�,A#$9Z6��m�toJ�Zmio�=��a�����qS5�ݾ�|O�����ӂS�a�c�O��0��.v8���h�x�'#TQ*L�I�H�L��ʆ�t� ޜ��Yޖ~�0˪�a�
-��аm�=�ć��“�!A�)# x�B�1B	
3��QFg2�R!@�	R��`�, ��}�o�w�Yr�6[�iì+�a�u�c�7�1��'���R�	��9#l��D�����
��}�q�N��ܱ��qZ�ӝN�U�z�uu�k�@�zW���EAAP ��I�\�Bx $�����F�$@Bȅ��pAEV�Ժ9�;�m�-ʶ���������?�
��������������*9�M��8b�ɢv�:j�h"(VV��@��ߠ���T�e���i��4EJt���Lp����avw�k}n���䅜4~�����1+�=n�*�(N
U��
-<L���;s���YIN���iBx�6���
-�_�s�Z���fF�G�������ܰ
��Z)H�B':�!�T�Ur��_JD���o�t$
���H�\$�\���V����Q��"F�a�]|V��aG�
^�j
2��#(Q6�"*r�*&!i"�$]0��
k�
��A�]0ݺ�4!>�DZ�р��/�rz[I��V��-��9�~��`q�L4�5�z]E�����CmdULD�D�](Հ���������OICV�t�^�D�A$"�C�
V[��+�{�$��SL:��Q
�1h�G���	5M|CF�^k�ʇZ��x3UA��P��i/
�
����n҄di=�ۊ�~i��+�z�d��%�C6
�@��>k\��O�X�["�d���>�Еq]i��B�6gx;iذ��%
�
-gd9�	�
$*�M
M��//uxU
�����a�����k�f���R�2�ȕ\o`����*�X�(��
�0,OƤA���q�����.�<�1*;�
�O[�T�������{�j8lQƒ�
�.3&�B��a��:A�8�/��	W=��h�S
�g�� 4IC�΢���/�}ڐ:��=k�J�]�*�
��
*8�l�]Kh���-nH�6�j����	&_c�i�S
3Ҁi�r`xaؚ�D�y�]��Mݧ
1M�&��o
-Zr-��s.��j�)�kjT�A�
Ad�GO�۸7`�p
�HG��ܤ��M$Հ�!�o �?f�*w��m��2~\?h��2b۩z�2�ln��ʯK� �@1����'
��
TY�Y�0F��G)2��U���h�Ӳ4`^���2�nK֬f{�}�V�m�&�p�ҁ�-Zw���Zܥ5U�Uz(Ԧ��MjJ���
m�3G�r�A�
��A��%�h���4��
`Z�	�����lV��y�1>����g���<��X.t+L5�2hA)�-�h������D{��b��8V#�aU�h���%i��2������4�!�_]�+�.��
x����k��q��n��-1c|�Fȏ�`

-�ju�~X
G(ZF���
�ixX� Z�E�u���i���2`y/7e��Z{�~dU���b�k�"UW�Y��s��e]-
�
��5� ?�H
0
� M�((#DDYa<�	c��0E����P�ۯ���e���z`]��Q`����%y���$4�)l���	���V�n�b�
��:3��6�z&�O3��#��dd�
� ��
`

�cs_�Ǣ���|)p�^��g՟oM,��w�9�ԛ$Ib� 	�i�{����e�:'�ɳ��
+��e���;`/����L����l����{1f�/�
w.���{ɒ���}�x}c��뻬�2
-dw���6����M���f_�����=8=�M4�<d3�
Ypn��	�j\
[��e��bۯ8��
-'?�nu��lֻh�?‹�Do.̴�.�V�{�df]%{j	
���'^@��-��Uqu��j'�
�/��� ���).�ѕ�}LU���:��S�7}���k��#��p��r�d�jz�^.���"���*���`�N��nR+n�0.���J�*��Uq�G1��|]����0��?Lm8;7�I0y	Nc�
��ϋE���ƫ+��}�
V~��R�}���s������ߟ�Xr����+ߖV�S�9��+��;��S_c	'��'��"��OQȹ�i�c�
��$��jѾ�W�C�j��-K�r��[��
x�#��=P�ác�
?��8�lޣ‚�K�����±�%GT]<�=������C�H��A��—��eV��T����+���^��˹`�;T�v=
l�\>�~	|�y؟��~u���G<w���
xz���ي��Sg�M� �'�9�t���L&)A@
-mBS )`B���mh!1���Rc�ӒeY�u߷dIֹ�z%!�v�]iu ��pd0!L���̐�$�̯ۚ>�? ���ӷm�
�H�
��oz������ޯ'�|%:��W�S�����
8�#�^�87Ѐ����`�S��ӏT��]�=�r�{L&��u���~C*�gN�{�i��%8�
��dp�?�3 ����x����
�\�ahe�
eh�
��jO�y��`~���R�M�OU!�KrU��h��>���D�u���38lj�,J0��pz���T��~��ޡ{�&`jm��
�յ��k�˦�t˸��("�R�(H�ɼX�&�Q�oAq�
�q��
˓�2�,
�a�h6E�e��X=7e�Nަ
;63e0�u��O����ɧ4]��jn���H�"Q��RĀv�
ߌ帶l���a,/�1 
�G�#���
Œa���ܔ��>ehi�3~�1k<ʞ1tȧ���i�PQ�'5�D^�LRM�l�)��l8�q(˛G�|����
��0#x���eX �+)�z�
���9�Ys{�xJ1�?o�����'u�d^�H�2�k�����<k>�q2,9ʄ�q�0�0�|���h����ah
e�>o�
옵
fϘ�+&�; [...]
-%�
��h�>�鵐i���f�qf����b�5\��É���ߊy�s�&`�`���1k�{�ڦ�4�vT��ᢁ
/���A�ɩ�YL�"2B
��5��=�+	v�:̂*;\�q`r�!�=�\=�
���y�������c��ʚq
�OZO:���ᢉ/��)�,�du�
�P�bM9�7�Fz\W��j��z{Be7&�H�΋��	�(�����
���un��̬��u�yP>�8�Z?�]�'�[E(f��jY1)QU��oh"��^�jN^�l�^$o�Gs�4o�-��Ҁ�28��>u�9�Ƚ�yh�l�u�^s��K�O�3�;(j��zIyD.�
�A�s���\��5KT1��E� ����7�� w�>u�>����3�
��m�u
*��].�������NQ!iWcZ�DX���
޲=7�B��^Ut�pQ+.hD����2�-��h�M�;[���l��'�Ap�d:�d��;
,{O�H���g�����p�j�]<�5��jT:�h�Cj���J
-]QI�%�d�@�����
[����[ߎ�A;.}�߆w���[|�pRB�\�G;���A���-��٤���
��}S��KU��T*K�0)�!D=� eR�oh`�2x�o�.���cxk���{�w��t#;]�ds��=c�?�bv>	k6�`B��:��E�M��{M��DZ�"V�E�
-��Ӽ�g�w�o������2���o�M�{�
�ir�e��Ӈ�Ţ#�3P�S
-	��}���f�j��;8�wy��m��>3tE`��uÅzA� Q���ln �w��G6
{�x�����ϫkE�7���]�H��H ~������5�_8��ɯs��뜀g���q�+<k��k��z�ʰ�2�Iކڰ���
����ꚮO��'��6Lj�!�D��D
Q.aB�2,�� Q������1&d�1B�*�U��P���z����/��i���D���~��?>��>~���?�>].L�m����`�=a
���cܜ>"�ˑ~R�J�ai�VUXaS��/���%(\bxa��@�
@�Յ �e �nH����\�tz����K?��Y)�ƶX
�f�#fHv�uq
����Ҩ�Fą^DJ�
+��a]��XH:�$�?y
.��d�_Y«�����Ѷ<�����/����"|g����v��tȣ����L�eU���'���돉s����F;��3����
�����@^~
�\R��|Q{i��K��|�
�;��yw��p�Q��~��z�D74�� �(/�����	vj �H�R���twB;ڕ0�^L�G;��t=���@�A���rɊəū��K��~�5��
�
�
l;��ζ�Й����twfe��vu�V@D@9��\"�IH"$!	���"	I�r��Tģ��]ԭ.�㮀���:}^�E_|�^<�<�~�$���g���oX7�XMs���S�R�8JI�j��'��C����=�
r��[�k1^�	�}bc�O����7����_my~{`aa�G�O�?d��8V��9Г×��;��-%Pȷr��
�|%��jMk�
V��"H+&Im�Ty�x��d��,
c���T���
-1*S���]����S��wB?6o�?�����>Oo~~���������Z�J^]�r��rj�����[���E
�ۛb��.�A�\��Ԓw��ͽ����
xY�b�N���
�8�ww`�{-C����p
�lI�nF�'�L�Ǭ�/F>�-/��,zT�B�^������
��O
>{��.�����V�~1�
��v��tnYH�I׽{Bc{C�������:
>g�ώP���:}�$%_z��^���U�S~n�ˢ��e����Ϫ�������q%�k�ҔIe�?R˒�6^L|�,Ox�ri'�
�	���ޥ^y/���	>9� }�Ǿ��+���2�2AnB:@$����dP����������Ɉ�ğ?�Ǐ۠d�~u9;�3'��ܝd}/Ds;d~��>�O`��?T��.�@�WY���4�v,dG$���xPt2\���11 
ЧO|�	@<(�1>0�n�N\x??��G� ����	�)��e�U��Mu����ƥ�6�-�k8�b#S͢���v�횮�馐��J�~�Ү�����*��`w��o�2�`�i(�`���!�8)��:���W���@�K�����D�|�Ъ���j���)��{���g�3�Wzǫ��qd�q
�1����>��,��
��A�����y�-�"�8��Yh��f�NS���%�o�_%B�)�X7�o�Ƕ���;L������ye��T;-����

��D�A
 ���
���

�p�[�Z�T��	ͷ�4�zS>Kk�L7tD�a� 3��f��Y�`�l��^{��j��{���~8
&x@��
��� ?=
-�R7
-��E�Une�2�^dQD�L�r���9I����[M#D�%@P؆�~?V��N�����
8
��o��
@�A$o
�@����
(�pM�@��/6,qkً
�x�դ�f�u㍼�*d	�%v����k\C�n������\��ӂ�9�X��g�h�
�?�)lń(9
-��R7D��k�P�Pq������Kf9T�$�Y?���.
���c�(w
�5�A��3��x
�ی��{�6�
gsv��`�� ;���l���lH�k�lԪ��a	*�,�ђY.I3�����8�a���O��r� ��7���91f�k�p�oui�6�����ٶ�0 ��( KJ�lK-Xo;_�*�%/�K8
P��*��c�K3\iaY��<�
r��|^|ǐk
2�L�=�>_����U�SI�;��
6�mN��H OH�T$�+�U=Td���웒r�l+Z3! ��6?��9�(�zI�!7�3`�z�ѯ��P�^e��-'ڜ2�������a@d�#��LҖ*1��:�H�F�מӼ(/�J��	�pEH��y,���p��W��t��:����;��7
��^)���m.����3ȷ
'����=�Zs&�6��qg
-�6�q[�ͷ��O���G$$�_�py�
��"��!hgT���6�! !�E
f_+��Rl.���[�b��u��ũ�@���36��.��}"~�'��>�]W�6���
S�L�
-��
1�f񌒢�Su<*�q�O���h�fuqi6g���A�m8�%h?�w�=� �Oe�4Ĕ=1�a��$P����[���k�匭�sH_g7)h�v!oF�VϷ0�&9��6��g���t���du��l�`�5(�
_�YT8PG
]�����s߉�5{4�;�~e�l��H&{a�L0�Ejm����<,P���2�|��s����sz��l� �e�1�-
��
-��?N��٭�<�������T3���T��TN���ؔ�f�WZi[�y噡r�x �((�x���J�� ��!x$�)���ef5��5M����>�s�����׏o�P�ʝ~���w8	J��W
1�4G��u'��C����0��VЮ#�ԫ�%JFWV]� �R�-fE�`����%l�a*�2
-�
��&
7�Ym((C
U�5X�B��~�dgr[7h��~��
}���hč87w*A?������:�Lڞ�6�4�^or]����������҆
�Xѝ&j�L/RiY��vCA���)T��u6�Ae}��
-����{4�8=��?p�k���������b�P��Vg(3���]��BGi��K��{h��nzicg�X�e�TC��P��	T!١} ���փN��t[�>59w���#;�vމ)��/
)+F
�$ev+����Ӥ(󻒔�.�R��PtSj]���Τ
-eGr�Jc(�D
5f&P}�j-~�&s�w
�l���
&���n.Y�h���)�
Y�Qt���в�
�E~���Nkb�r[iWr��a;���=��VCjRic.���Tڄj��P E
��&P�)4����6_������.��K{OkV�W<>D��:�Ew����a��>r�:����lH�d(���qm���6�r[uKT[�|ks+Au��t�pP�.�0��Vh�a����f'��
,�լ��R�:!]:� �se���p�1"�@L)�F���K�%t��ەYݑ�@��	�29��
�!��kZ���b���.���zۖ���7.nޭY�����[��"B��>�ߝ�1��c�E��G���C	�z)�?�"�W���Wc{5:�
��D����UՄ��/
-j�DA�?��i�W��7l
Z��7�ʷ��;����[�����%���NJ�d&�Dr�'IY���\�hR�6�0r�-��ʺ6�W
��C�`}UI���$P�,1�oDAÖ/V:���e��ņ-�����`�,���o�Y/ݱ)�|���!	1�i���Tܽش��D���ι�t^�73h��
0!���-��/��
����]6(֣��5�~c#턉��ӗ�R05�n�l�:����C�Ly�!�
�a�1Q�_��sO�q!�)��%5�#�����03�g!����0�̃�T�����2��^6��:ע4C_��XW	�L�����:
�ip�=<��U_��A�ޝ�
�[T���X��+j��Jr��K&����x��?�<�pj��xrY
���
-��F�֠�uF5��1�x�n]!���L03c��y8Z���,�v�cAp��B���
^�G���ubϜ��>��'>�������s��Ca����@Ci4kP
z#T�=�� �sa�Tؽ��;�`�����f�
Vg��
�� �;`
� �x
�N�@vv���G!��	R\
!�p����
�J�C���Py���8��Otغ.̾���߄���?�m?.�N�����8���B���p�D
t ��=�~��8+[�Z�!H������[C�k#`�X
���0�- -�	�"<�A
-|G�F��1���<�SJ^�R�0�!Y��@*��'Ve�.������a������
-f»3�����a����C����6b�@

��F
L��r��p`E�eR�+)�1�h����
�"�0�Alq�<���T�;K��?C�L�ES��T�Z8q]41(��
�n	o�o�>dl2.b�"�
��>c	�@g�aЫ\B��X�K&=�ה��%?}�*���_��Ŗ�͐��i�ŢIb�h�X<��"��� �JF���A����0(�&~>� ����C

���e	���C�f��pc�/ش��LV�bJ�-?k.A�7_"���NDˊǣ�%c�ƒ1���;���;���A�Ͳ^bYgT������2Cb�!�,OK�=�
y����7�����D�vZ�C&�3O���&L%H�q�1�����|4JYq��Zy��-�����>i'�:�O�J�|�C�>
1d#�LĐ����3�ѫ���or���ٔ���T��Ûc��M'M$��c����ؚ�r]�0IU=
u�f��#��� �Ȯ���Z�T�!�΢�<�0��ZO��sj�Ӟq�ku�Qj-����"eA���`	�@XB$d%!@VI ��%$lj at A��A�
V��
G��;ߙ�uz��ݼ�</�W�-�D
4�P��
��Ƒ-���
�aX��kSҞ�d�h�����[dj���Z�
"Ox�� �ɤ��+�3
-�:�����]�VlW�1��U��V��[�T�P��Q-h%�B� 7< x�G?p��_�1g�0�����;U$�x�9ZB�_/�4
�	��9Җ�X��J�Q��r�]�N��l��8��x�Z�w��N������̆�P
��!��?�G@�ﺄԧ���)f�=�:N+eyʫ?�X��|A�U�DُS���VM'Ρ��8�Z�C�"84���<��&����n��@G
�}+��/ԇ솆�Ph�:�F��L����-��ʡ��I,��~��!
(�k�˓�_�i����o3hrme
bh&"zi�]'�wh�.t�{
�P
50Ps�
-o������𘷢��ϛNb
-�
��eR�YD��^Z?D��^)�.�u�ZB��5y��h5K/X��
6Cc��u������wC-j`�]�A�@�=H
���w��KYL�#Ib�dSj�O�l�?9���������-;r�6M��֜o��
,�B����f�!�:���:o������
X
{7�$pȃ��p�Z���Q�OZ�I�wd4Oc
�
-�,�մ��s{��.�`p4��b�+����6#�1�K=�Į�Ԡ�Z��D
�=ˠi���E�~P��
?�
Oy���N���9Wz���J�LJ{+�m��:�%:'�l��J�Vf��\[j32JmF)������
`�j�/��zhٽ���
:��p(��XҔ�x�D;lN/�Ug��R�X�'�72vu����sUU
U�&[�b��XMU6cUb@�{���ų������w�@��4�����4r �+,v�RL���S�}��b�>�٦$�DbR��f���w�9Wi��Q^c�UT�-U3�f5URm�J*��0P
5p�̇ƝK@���ޱ
��C�?�
-��
;61|��������3$�-�!��x�UF1�x��&����(��b��JfX,�t����f(�F�ނ�Og 5p}��o1(����f������������<?znFE_
�O��1�ʮ�!��ѿ��L�W����V+GO��d#�͖��\Ȳ�j=�a�y
����x�A�u�|W�qˆ��m[���w��w�vH��Dd�k46U;t*_ܗBc�d�˜Y.Bn;geR�
-s��j�l����V^h3���k��s
Zo
5p��� ��w�l\�
ٰ�٥����\빽{Ǖ���;��nE��G�u?&S���>|Sv/�%��V}�)�$;͚�F�.Meם��u�EmvC�'�h��QCݢYа�sh]��,��^�trx�77n������9�7Lw�@���,�Ddu,�B����
 ��%�k�{��=���e�ե:�u�S�.u�ܥʐt*�
����ڿB۷��/�����7&V,tOm��x�}������ 
o*�<�^DA�xbyލ��0��>P,8�Okĸ��D�T��6��.�HO:{��
9F�#OV{x�A��W~�%�=���3ϭ/?u��l����m�Wۂ%/���=J�=:�U|?�H���d�eP2<���EL���p�Y?���
h����1���
}
�־Fo��/>дp��y�7g�3w�{j�<���U���m���v���?�6
�T��Xq*6;��ϸ�AJ��S�+�$����<��u��	#j��6r���
`D
3���,o�p�H���
���O�m��\��ekİ~'��  ������g���g�=�`O?H'���O޽P{�\3A+���E��%,�a\^~l\�f/�Zvll�k �������sip�����9*X�U,_Æ�۩�#���߇Ec�DǧM�'%�HNIx���+�\̣����$l�/�ptl���%
��17�~K^�}
1d�N<<y�k ��g�:ӧ�w����G3�/?��_͂U�V��V������Y�
-Q������:�j���8
@ϙΔ���Zt�V[p��
-�
-J����,ʒ�,$�@���D�L�$ ���Q��U�"{A��(��"� "Z������3y�������nt�;b��7����i���\B�+11쥂txNE���%���!�fZ�s=�ycr�̏vi@��~Z�j�^��������֬̆M$�k
�ەA>d8⇃ȀX�
�<&(G��dl��1�?�Ƞʨ���1���3
?��
������3v��jjqB�n8�J��:j`�G'`�21|��
;7�`�&�o��P�h�
1�G a}C 	
)ȁe
���d
D#O�/����6������
�P{]�䈪�F�
�(��䠀�K���c�.#��K<x������z0C |s �l���~�wGy�~���4�����;�@�kdy��n�#���֊B��B匣P2��
>q��gK���hpu�
�?ŀ׊@ؿ� 
tAC��}��"��c_zA�W;���(v@��ہ��;�\�B��Pn�
��
:�w�#��-����y��a��~��	���C'��z6�
UC���_�����
-�
B
�9�t�
��;���{�p�?
�*���N��N���&�	n�

-n�������lw��
p��?�8_�QC��<
-Lq�;FV�k�)�+�>e�RƜ%Y8ω��g�z�4�Q0�kMa?M���4�7�q���1콌!�}�
�X�u;1pC:b`���!7Ey��!%x���„�Li�������RK�33o�T-�"֋�2��$��+�Il�l2�_� ;$���'�I��$�ʻ���厐������7�Fz�,

���\
�
GN�-M��"Eǚ���T�`�R%~B��L&6�
.dN�(&p
�G��~H9�8���8�l'
+�����]��m��E
�P7Ȍ�E
2��&G�rp��I/�9��iγ�"�Sz�x2�*}L��|DjP�'^81Nh�~��ʾ���}�8��K�� ��i���i�1��U v��p�9��l��	�Z$���N0g�y��4�x2�L6A�T�'�f=$7�< ��Kl�
#���&���s�)��'
�/S՗���
@��	��A�
-N��*��1h��b ���d��|�
Q&�O%x�ΗL��(Ɠ+��jU�)
�Q��S���4w�75}�M{Ҁ��6��D�6%h�'h
ĈA�D�A��
p��
���m|(�"F-����l��Tže
'�Z�8�8k�aV��m�F������wI��I7
-�i����~���~���~}�F�Y;A�2��	��Π�q����@���P���B �^���W��f�ΔT!���
sF������.��
Jsѯ���z��Jr����И�k8��W\��+�e^_4� 1b� �,o�
��B��!�
�APw�}A"���N�Uq�SJ�xBrR9���
a�C���۴s%�Ime]�+�n���n�Yf����SV��)��)���
��!c�H�ɽ_��o��C���P%���
�I/�
֔J z�P*�5�ani��Ԛ����>Z��*��|��a9���8�fkz����.7q{�ʹ=���O
@�d�A��
(F���0��a�D
Y0�
��H ��R'u
��J���P���
-
;�-�ִ�WS���Xm�zN����f���+��
�2~��D�]nt��1���k%��~f�o�2�
�0~P�y]�܊�?����K��
-��
Չ��LM�eQ���k�j�\��r�U�[k�תK�mV����H�aы�LzqW�b�
1�C��O@��s0���
-�&�����߷ua�s�Q�O���
ԑ���Le����-Zy��
Uq���R+���
-�Yg�ԕ�[j�2Zk�kU��6�N�Q��t���.�bA&b�#�Vg���
L{�B���P��z�7
����C���F7��}���V3Gv�H�wV�e���U�+�mŲ�.�5���[�4�m���y�6k���R-�4���UN����<W�e���q��h�w�wϝ�}򯈀�+����N� �LR�b�Ц
)�skк�8r͘a3�$gR"��
FB��0�M�U�D�)���M*�W˦ҡ�=��?0�^??�ߞ�	8��&�6�
�U}�|kY
�� ��jNve~fI-�[����4�
�
}u���^����6$䥉+PI UA
-R��9(1�B�N�7׆K�/�v�o��������u�Q{�8�7#�Ng��&�eTd�֦�T7&�t6%e�6$g�եd�פf
�RyC�4��%��ІT�!KOJѿ��5h:������.����qƳ#^؉a��`o ����t=�\E���ˢ���
�IW�㊅
1ŷc
������&��W��
�J�U��
�HG�І��7��XjMv@��o��\�ԙs�y�����(���`���;�0Q����\~S\~r]Ji�(�*J(�
�V!諍.�9U0 ����4\Q,��x�\��6����\�MPi�
���P�S��ϯF,~��î�)Ӂ	o�[#d������^ΙK�ii7O�ĵ%G�d
��˪��m"Và�p�*�lHU2\](���+;�_"�n�.�P�-
�����KW�X_iz��h�V��_�F���
Z
�+Ǩ��bV
o ,)�7&�D����.~	��Ҳ���唎{��kb�F,��W
Zv�,���Ոɀ�6d�
W�6@ݾMЮ)�a`���cm��Y�m����s���͸;�<'z�<��'�I��nj�L
���E�sĥ~��$�B������ђ���f�X	G8V̩+�2�HA��:h��k{d�v��̍+I?�U�
\4P�|e�ۺ`o.z�+��'�?C�'����~|*l*�
c215`��#M�e��f&��>#�rH��������|j�x>�A2�
9�1P��R����o�<�݂x�.��NW��@��Ʋ�5΅�ʃ���vz!0$l�Ŝ��
�KH��H"N��_Ԥy=�H�z�g���04�A�y����,����Ey���٬,��G} ���"}�b�g}��OX��e��e�K�'!v�D	_�0Y��ǩo�"ȋ��ą����s�^����kJ86׍z��99���`���t2~@2ȓC�B
yvK�߿靐E�?)�ԯ��&X�׺��5�\��L^sv:����F"����e��d?�	ƿK	�\⇻�)�t{]u�e�5�y�n4nq2�u�e����I��
1�@�&d�	��t�G��e��ɍR����R�؞Z`n�v��b��, �S!O��"�������
-���Hu��
r��K�}*e:.װ�~��v�x�c��O�ѥ���$Z"��o��
i�eLMo��ʲ�@[�
F{�^
ؙ�Μ�����
�.�z�D{�@���
�,����D۵r��Z����
?��
���8�r�D��݁A�
b������fL6�lL
�0V;f��`�K���dp3% 
�	d
7���
l+G�q@�#[8ko
�G-��x
-�,�
=�j]��
�b�O��r��T�!H�4�d��T2���-�p�Sb��j ������'�t��C>
���
Z���M��ISs�?���Ç 
k
-��L���DF�r��$j�@�#H�$���C��!ױAU&46Aw�'�(���vG�U��Nkp��+����o5S�B��!J�b�
�D
}��Ӄ���P��*��C�D�}��qI�E�3� a�Q����*�q�G�
t7Z��#`&gV[��VpV0wE����Jz@٦

�}�}/D�І�
�����.�ݐ��r%�`U
0���j(�6
-�pUa/S
��1f�-����u�%o�/&��|E�@j�� �R�|�i���A���
-~����9�_�y��"�
�-c���>CzϐBT0�Bh2 at E��jp
�B� �e�(;`�uz�P/�R�
�e�@�����SWI-A+�v�w����>�o��/��e�<{�g��@|˚�]b=�{ǖ��
lMi2� 4k��p/
��7�0��D�'���^�'��
�Rʚ���B���ka~�mg}#��|%��#�3a&�����ϰ&�5���==-�:+Z�QԣuTD+�ʅ�u�Bf!��
�H�,�'$!�Ҡ("e��(U
(�L�x at e��(λO}�����s�7�i� �/l��>B�G<s�g5Ġ�f�m��>/`���X�/Ш[���
D��Մ.3�#6'�=�0�]�	���3ĉ�jқ�:��k�����c�i�!�i�{J���FӚ0#N�I at Z�
-��݀�������������xr �9{�"=q���H�{\v�[laSBz
YF���
-�Hz�1��|��
`�D>e�1�̦����X�
5�Q5P7y 7����@��?H�
����@O<
���qzܻ�,�\>�5�F}�)����b��_d���

��<	�y�`ۣ�pna�p�E?���t�ݦ,p�8�����9 ٹ��i�$��,~�'�<�=E���3��c�h/qǘc�Ӭ�*�h䥄g�x�=�?1�x��~�M\��!�_�;�_�[�������
8>
 �yȷ/�5�
�Yt ��A�c�|bI�o���#�e\���=�;�0��
c�Ñ͢G���V\_�͘>�؇�:�Cɹ�>q%�y?�h�]����� ����z�jPo�4L �	A f�~�	�'�J�8=���le����C�5�Q
��Q�I�^�M|or=��񁬊�@v�ܛ|�ܛ�,`�:j��p���!u�l�,���Ap#��@�䐏bv�/����f<���#�|�`l��	�\� �Qރ�R܎�V^��N9O�J��t��Q��'i=
-�G�,`Ow&���� i�נ�8
��`ڹ��} 3�
ѻ�k���J&��DD
�0�
�G�
��M�I�T:�
�wc;��
����rj���ޑnct�3:S
�])��l�G
�en G��
��`�2�w,�� o�o~g���1����Ag[��$�K����i�Py�R���T��'5kk���CW�l�Ƿi�Y��<V�*�ݙ�,��m��
-	^S u�W��̀�-� w�R�۽�C��W�a�#��A&RXo�H�0����H�eNNZ-�D[C��W��ӌ�x��P�n��r
�ln�6�ۮ�$t���i.�B
��S@�޽��� w�',��_V�)޷a����B���<�V33�N���"�&i��B��<�0��]n���M��fS.����kA,|���w��6-"hW;
P{�+$�w
-h�	V�o �7����m��؉=�O
��;��~1���#��+�	��4R�)i��$D},1�pTPj:«�d��ZL�f"�gԋ�
Q�^'r财�g}6pP��q2��
r�=���Y`�<�M�V�ggv��8���<���	܁?
-ȸZ+�Q���'5
-Ea�NsDfEL����ƪ�4ei�w�jis�Zڂ��v�J�ХK�4�
z[pQC���
8��
�m�����e�����
��.�[�Zuxˍ2��ߏ���2�Y|A!�,�֪5H��(�,��_��[V��E�h6)�-F��nP�Z3��mZg�o��+ȿ�
��S�����{ڻ3g�V�4w�n���K�W޹p���}�J	زc4Zq
��mː�T�JoD��|�D]ni�[Ū;Iz�I��bLJ����Ɋ6��@�PC��ɐ��ū��Sk<�+���n��װu��aNJƋ����[q���R(��X<c�(YuD��Y2
��\3�x:�e�j� w-��f�@ӂ�v�(ݑ��֦u�g5��
Y2l+��T���/.��zએ{O���;�ۗ_��߷�.lwi
."�,�d>��jl|��(9U��ѱr�����fr�%
5���0�3����o�'�
:��M�,��s&��[W8�n�R�)UK�]^6�a��֖
����6�X~%dg�El��|
AWIg)�E��
-�	��b��	�K�1��F|q
B̳(�V=���1�m�xC��Y����0��;�̂�c��&���ε�k�����\�,�����č��
�`�rlLj
��x��cW���ʴ|�Y
u��6��NQ��aK
:|a�6.����ݮ�X:ҝb�M�f��*�7�C��IC�<\:�������W{}��w�/<�ص���� SS�~Ս�����u���q��uDP�QT�(��b��I�l$$,D�*0�:ŒZ;N�Z��:n��ǵZP*���2�)�UdK����9}m^|^�������K.�7V����z��a�Z�������j�BK5}��F_�\c<�\������m�zG��i�af�ӛ����0�ܻ=��|��j|
4�쳨�Ǟ$M�W?l{�������I]voqf��"k���[ե�m+��U�n����zZ�h|��:�^E�h[��m[�?���<Y�<���
��
��id�kMn��s���Π1G_F��}�
��7^��g�Ī'��AQЖ��n-��h-ϥU�+
m+��
*��/�?)��(�^{�\��|������g�`
s��v�}Ε\��J�
��}��y�����*!dCOZDU��[�M�t��Y]��U����g(�֙�][�u��������j���xi�ڝ'��S ��](��U���N:��HӉQ��
9{Õ|��F
���
���`䔿ڸ!�m��2�8n�M�0˦M7��"�-_&��R��*:���6վK��^��<�`Lj7����x�^�[^g��X
�F����tƙ�it&Gﺐ�
�
�\�
��U��ɫ�T�4N>�Q��IT��"�b�ŋx���F���R.��p\��T��*�m?���;��1�t�e!W�r�Ή
��D��y�jx,k#�]�!Գ
Q>ňX���&�gk ���*�Y>c�Ȏc���d�%rQ�
��)�#5Ңq��+�Qh�G��3bw�F-!?�&�H#!�����Ej��Z�Q�q_��qY����_��iR���H
�
 [...]
��sp1n
�q�
��9fG���!�~%d͠3Y	/�RLt�F�kӡ�\Ob�
��IC�o2�� ��: Ʃ���:K��ayU���4c&�Ϝ���Bp,4?��
�#G�2�_%d�B����R�+>a����.|��
s��
���xF��=�qs@��
݄Y0�)։AX���ISQ��-~�b��Oqp�?��;��"s�;�T�R4HH6�•%���t�0
	�`�Hp\�"b4�G��
�v�n��M��- �1��
3Vw_,���
Q�1_������@?�	�`g��]!�gC����zzt�Ph
-á.��r=3��'C�M*${y�C� ��B�EXtY
�m	��R�w2���6�M�V�/z/钼�vH�?��i�3
�lhS�`�¨DFf(�Ь\ �_�ܜ�v
���CrH �1D�%�3O��
�;r,j��ߥ��h at a��Evy���7�;�S���0�	�A1���lz�,�
-��8��H��A�6	�M�PnK�|� ��bH�-��
�z9DW�UB𘂠�z'
�~٨
�]�Bf���oU��
�A�
%�@ǰ���l�r��2p`^
cI<�B���W(w��8 ��V�)%$u�WT5�!zJ
_�6� �+
�_(lt�rH�
e�<p F���c����G����<��e�a�r��
KQ��)����"�z��~G)�O�!��@zU
�}ݰ���.y��
�:���ڨA��T6�
z�p����tg��\`
-g#/�
����H
�B5����]
eE*L��o�@�C�^T�i�<���N?"��1,���V�a
��;���V���>�&�f�|U7h�� 2}�`t����06
-c�P��2A J�
��$7�?OC�j!L�0lSA�G��~Du��AYgV\7��?��Q��tR��6�?�I�:�?���K���
9���4d0
�\`�Q�r�$T�OC�l6Vh��%<X��ȪV´��a������=}��NU�m���3�|�ۣ��m׾�m��Y���~2���h��;�ٗw�X&9�4��,�5+��bu�֦M�ZI(V�Q�0qQj塰D�>o
e���Lp��q��__�ӫ��ڣ���I7�?������k��� ~�"�-�ց�j�W�u��Dd� !���I�
2	h�����QP�(T�hI �
ǭ{{���̋��yy~��y����$�A��'b*�3��7Em��J��O%\�OŚx4C����<H�2
-�e����z��v��A;�{ೀ���M�yK��P�a��,���`�����Bхߠ>
�
b'iݑ/���f�
F}�KF-�%�:v2�2v�f�A�i
:Oǡs=�_H��`��0��Z�:�*�J?���,�m:�����	20%��	��q�qC����hm�ݨ6foT?�'j�݆��4�9u�	NU��<��*��А^�	_b`4���0�6YA���P��2���
�4���]f��2�e\
w|D�
x�����~j&��T�x�X���p%�=�6�s���@4�j�
�r�ѐǓ
-)�
[�`b�c�1�`	i�,�p�<��f;/���_����
-|
��A;�s���T�!5஘���I	7X���-	eI�$-�>�CX?�\I
j(c����O3 �4#7�6��N�0
�������Zd�{�߽\���m�l�׷��m#š�C�����.9
�!ƶ��˜LV
���]�Q[�j���6,�K
e�D�
=�<Àd0��
�x�9h��@Z�jK���f�{�p��?�����p�j������w˓�S?�+�<ڕ
�ߡ�c�S�X�8�Z-P�K�j~!�B��l��0{R2Y:��=,V�G��r��
=/�mDP\s`
z��[k	��sB�f���jv,��t^<{���	��j]��7�w�Z�u�@�E
מ��V�ET�$����x�b%R��ν)S ���$�"�B��˸D�5ŕ�hڷx��HG��z�,߾ோ;�^5�Y�ovY��cS�%�]7+Î�j�~�jrXU�P�P��l�,S�.)��Du2qrg�H�\&餢�a�H8�,�	DO�7"�@����@��*�,��X�S�����i��y���}�-�z.��h�
um����ǟѨ�1y�H�J%e+�f�%�
b~j���ږʑ�!K�餈tX�HF�y�1_d��
�9��i�9%F��Wa`�F�����
���N֏o��������U��6�>\w1ҧ�"6T���U
�"O�e��!�<3�2%Q�*�f<�%��Ii#b�|TȖ�	8)
GjD́dtm���-��
��,_������tm���k�Ń�]_t_w]������|�`e�DAmLpf�V�"���tn��K��R��%q��)�y�I㲇%dՈ�znLHK���
-B���@
-�6�X���� ֬��6�c�7W�G��0}wv�]�:�����֋��5-a�9��A�ZR���N�V��
-�T��#��$�J�đ%�"\�hrL������ǟ7��J#�rn<�
����[���% /sڥ�Y�-x�g
~��5��=��?�
X���t,���S~g���Z����x�B��/sI$�4IŎ�� gj/�C����5z
����*4 ��F.!g�CȚ0
���-���E�m�-x�l�ۀ��l@�З�}p��Ɓ}�U��7�ܭ�>�"��Ϳ
{��IŒ�81�k�5��R�ji`����M��K���	vX��QdbF�0
��
�v��<���[�_o�7l@���陣U��eE��m�z�]~?h��n��/�$�%8����v��C�2��]�$���ow/���4��WԀ�W��K���կh!�A�b�;, å`��
-t�Y��
k�2�4��c��
��G��f��M��c��ݬ?�Q
��
�}#ف!�����'Gz6⼆�p��q^�o	�7�}�����:���Y0y!��`���X��NK��g
j�,e�UL��9or^!�p]/?��4��$B���Q.X=�㴞�0&���+��A�m���;���2�]�>����0�����Gz�b
L��;Z
hk� 
�,A�}kPd���k-��[me�{V�g]�1f=��Ϝt������{j�x�&��{���9����:����j��o�|�}�{��׉ϾGt���~�;���߁��p���F :0����Y��c�>:̓|�ޖ��y9�ӡ����7F�y:�-p.����]gQM�y�?		q�
-.,*  �l!!!{	I	�7�k
�KGw�KU��#-�X+:�u��A
=z�L[��8���
-B|潚��|�w�]=������hi�l�*5{�.]0���wp3�G��N
RqU���"֘[�> a�s�bOn
���"��)����{��>�G�6bڸ��-G�x}�H�Y��|HC4Є�aX(AQ���<��f`u|�$$c_R"����mJ
n�Ƣ/-H�'�<�<IQ�ϒ��(jOEm���־�V�U�M+E(݂�	�|��L�C4S�,r�pa
-�@qH*��tA<ֆ���E�<"�\����q+:
}ѡ@��9�FQ_^$�W)j�m��HQ�`Re�
g�
�|2

��2�������$�S� �cA3-��q�Έ&�"Q��5
�uv���en .�EW�\��A�G��
�%w���A�}��
�(h��i0u��^BӸ�f#��B#l�X� fF@>>
���a���@TN������q�
���G�����q��2͓�
$���ߡ(��2�)*%�`�8�z��
	d
��E!�;
q��L�
.}6D� �3�e|��4�|����E
s262'aq�h��/Ȣh���f3 �2���*��� (\���GA�i,�; <�As
-��R�u�
��t�:3���A��Ld>��
1�y���

-��J
�'�� J�C�ʀ�ÄF�
��KTaP�-��!��D��X
K��/l��d���AV'ɺ��.�g� Ivg�|���[x�bd=�xM��4d'ѡ`1�IgB'��^
 �9��p��GC�I<�ے!ٟ
-��t�Nf at x&�v.�Y�wg!�>Y��� ���/��y���B�	����t�&xC�Ȁ.�	��&E ����
�[��D(��@����/8�n�Bܖ�>��B�E<�����C���!�ρ��
ُ��Qx�� /(#hP�y#o1&�����BPPCU
�ꓠ�4
ʝ
�� =�G��BH�#�3���
�����
KG����R�<U@�@	��U���x��@/�Ҡ���1�k�
?8�`׆��
����0�`A�!
��\��P4� o�@z>9�� �&'}HN�J1&Q��O�n�=�[}K�Aݝ
��<Ϡ#
4��>��(:�qLT�}��å
-A�1���(�I�y
�-|�v��{8�TgP^R�W���h�ʟk�4O��w��y�����w�:�?�.<C>�)��4�½a#*�}P�2��3�L
�}*��Q�������hA�d��$�?�ҵj���}��������j��z�o������W
��˦QӅ�Q�9�g0��"7���x�&�����Xś�U�@|��e渱jGʰs)w�t��u�V�+�ne������E�c8��8��ᑾ�x_����~������aK�y�r�p��f.l���=��tГ|�{]Ċ:�&N�'��ؐ=�ա#��1�+m�W�U��]����G�F���&�
K��_�
-n�[n��Z��
�d(�0��[mmEC�S�C�-���_���z�l/�y�A���o�"����ؔ�-�Y#���z�Y��[����|���%��+���p�2\+9T�cqK�?�gK:-��;,�J/Y_8�Z4�h�
8N�J����)
,9��y���L~#�d
+ȷ�.��ͱLlK�2�ȟ9�(
���v�����mp�o��]_�J�SM��k{A�s_�%�Q�{k�7%�γ�����������fG��pY����eM��>��'( ���d�ȾWOz4̣a[4;Y��p��؛=��n������[�m�
.ѕ�+�
+��ۗn)��z��t�AG����d�9׉�+��e�U�|Y�y�+׾ʾ�ݮ~�.��
��'0�
�FfQC��5��&2�
����%��?�1��A�d���袻�[�~���mC�������?�h9�|{ɉ���Ǫ�]�]mK�:j�\����]���E����tm_�W��l�y8�yƟ�8����H%C�E�S��f_˖�
��88��9v!�5d�l!�Ҵ���eFi���K4�L��������������^���XY�A�@�����3A���������Z��6]M����D�j+���.;�
��f�w��9�&G�7�%��ƞgTF�.�8�M�<�m^�?�7���O�g�g9��9v:>$��,
-�%t��IIl�b�樒���I^�֥N��{��:���+�v�x�o��f�:4�
�kR��e	i�"anH^lYXVt/#��\Ԉ 5�=/%z*"9z&,9j649j>$)j�%�=�֓0�{��"_��B�4{Y��S�.u�E�p���@����
-�k%���Y�5_qO�f���Kf|��
��P�w�� �.�F
-�&�B�W��Lx��YN\�
;.v�%
-�#<���{�+���U���ͤ���Hߴ�z�rL���N����M~�jK���
-�O�D�dg%2�22YI�„)�x����䇑��	~d�7*a:<:~�7ǎ.�D��DaD�r����xY~nS�ћj�ᮽ�&ʷ�m�Z��_��s��2����P��"�wZ~ܙ������� ����*�d
8�ᇧOq#Rg�y)�
~�
[����&<p�H�,
�'
+�2��Ui�!
�{T�a�n�ޮ#�;ڭ5�]�������T�8���<.���)Je�
-sC9�ᬼ&
3����#/8g:"$s&,4c6��6�K]`���)K�������W���[
-��(�ݾ��=��oZm����b���ܦӖ�
��	u�151���$�<��,+�)��W��[�.ܿx&, ��̙ce͇��/���
b�3��]^6��H�<����}_��v�.W�g����A7��;=���4��i��q�^��b7&��g2��J���؞u�C=��ٞ5s�Se�!~�
������LQ ��!^�0ZE��&<�A�t�A��6J�#�ʯM7޳�ɼ�?��)��[
K�
���������~���Z�m���m=L�ko]���'./1=���^�ˁ�J����T*�-xVG�mT�E���b��T�m&W=Փ*6V���L~����^t�����{!V�~���
��g_��[o��So��Co��}�۞�~
���M������'.���!0�
�
��2�v����
M�iP�R
-*GUIE����W��S�c�~�Gm�3����t�p���������P���P���P���P����qW���'����æ�OO��?�
Z?� �
������~W�Q�z��ck �����w���wec�7S澵�
2~R'��
��A
c�C�c_;�e�ڎ[
k��|}��ś7V��}�6}���C�hq��z�E�e<'2������
P��/h�5%
�&5��hQ�tٰ�cJ�	u�	M�	��'&��&8zv1��t���Cf�5FG�w�L
O��
M����&ߢ��gh)�Q"�u ]-��M����2��� qIb�4�ܥ���%C�e�e+�eGu�e�-���Y`�X~��0]��e����h�T�����������h`���2��AÃ�"]�U 7��w�w rR^�N��/��:��Y�������߇e\�L��
��Uł8Ža��1�j
ƨ-0YS��a��^l�ٍ��w��]���hz �ڈ�{ r
$� ��
��IQ�䋪dwԤ����
�G#)34�6A;Y#t������ۇ�J{0ZYS7l�BUm�U��.�m8�Ig7m��[E��
PIt�{ � 
 �=���e�דlQ�l�_P��.���ш����zh-��$w����Ii!KZ2���_

�n�Z9U�߀�
-*���2~Z'���D�w	� �k �/ 
+ at h��׀9ʑ�Q�t7��Q��u)�����t��mEs1
�SCg�*zҔ1@|
��+�PB�%�b��,�H�b��
�I~�������ݦlm�#H�(
z�]T"�in%oFm��7�
E	
)�hD�GS�Z��ʠ3u
zQ%�I�!_��Ib�q(F�خ����<
-� �V�渶(.��@ �B� 	dO	 �D%���AFT8�+x�vpk�:�V;��z�U{�J
F�`Y���M�&<|��������GtN
-���Q�b؁ʹ'�

�8	3�V�CX�|��#�⌀
.`�]�OW��+�N��~n5|�w<���>�����
�`��
��A�
O��_
B��'=����q /n&��y�d,@؆%`mY����`�Y���n`
u���g=�w���4�{�@��7|I:�H��5
�?BH�I �t`{R��"�n>�
|��bf�/s/m!��?�삐OV"x���F`�'���!�,ɹ�
�
0z}��OX	҂A�g,�7��{Ɇ_g"D.�ǃ
-�Q�v��Gl���Y�MtBt�"�s��+]��*W�5�Fh+
!���:��i__�#�;?=�G�+b������� ��`>���7���ҁO=��3�@$�fA���b��"�h%�[W�WG���mtp:���f�}6 aי���
D� �@+��5z��q$X?�r'j"D���u�"֕
-��
��S g8@>
J�d��HJ[Q�+��<���:��
D�3q,����]b��k��,d�;2�{���!���8?D�s3�듀���U�HXA��P��AK�
-}�,�N�&-�*��unH2� ��_�x+l�ƴ�Ew���Æ�؃Q7��Q�9/�9}���p�ŀw3W�q>�&��!��?��{���ԯ��Z{d�>@V�#֊A�rAr��UU�=,7�J�$6�^�Z�^%�s^�[��%���*�7�!�q�+�C��;Q� 8/���DN&A�-��d_Ɠ|Ň����-֑{��@
w.

�lٲ�t�[����R[����"�WQ�T�;�����KRg��I�O�����{�[��7�c��!� �q�e
�#�C1�$WLh�b-���
-#�G��4�g�	��_4��egy?Y���H_κ���s[�+▲%��������kҞ�+�o.J{�I�E�eW@ܩ����j$���>đ|)�֑�����6�UT��N
-g��7G8���/yZ�\�ИN��n}���%�7�,ܫ��Q����=��V�!�Jy2������7ң��v�[��V-��@�g�_B��idg�'=���������6�M%sz_e��_-�
~6K]n�t^7
-r��
���9戞�����;�O���?O9$��
�w&�8�|[ٮ�]ٖ2�h�[�ͩ㲦Է�ƴwI
�����dg��Q at zlZh�R��jw��Z��OkCf>����VE��u��v�$�ٳ!�}*�$�\KlWv��#�Ir8}��`Z�j�Mk귚��}���#ꆵ���VE}Ƹ|{�[)!yD�m��H�@6o�<l&}���
ԭ��m��ݣF��yN��$,�P��}U���.��
+*�w����W��d�S6g
�4e��6d\Kٙ٫��N��
Q�d���s����qYU�DH$�[G�
d�Υ�‘2V���r�G6O�]m�5�
n6�;^�.�{vW��6g�?�h䷙6
-[
-+���e�y�U;
�jks?�լ����}���0�RiN�0��-�1�V�U��0.{$�m�J� �l޲�T͡
�p�<߽�����V��ԫ{���5�8���xt�hWf�lY��Wf6�nI�Y\#�-lTW�O�0v���Zn|�Z^0�3
i��M�qTU�?�(˷��y�����{)�L|2���8��k�
�݃�(7x�_h
�{�Y�����G�Ռ����F6Z
-����Ě�*ye�N�fSkʦ��Ԓ�4S���b�:S��T4�1��L��
�	� �a&�.&��������{�S�͠|�>�r�ǔ�m��ݭ�%��"���J�};���u����ʍb��Bf�\�.1�M),�,ո�LZ^ُĀ>Ӑ�X:�)(U�ƔLV���&�Bٜ�3(CU��沧�i�F�uh:�'ʿ��۝j�[W[Ģ��x��=rzSS
-�nW&��./fk�I�i�ViqU��X٬5X��9�S�Y��׺�-C�u���yTe�4�\�Ѫ��u�����MBXEA��� aIX�E at 0�qW
�z��Z�D�
-R�EAPAܵEܗ#n=3�v
-c�NUԞ
�,�g�g��|���~z��y�}?�ѐ�f���͂1=�ŧo�A���4ӵV+����ok2?�mW{$QRYk�+;��.�b����}���˶���S����"{qI�����yy%�����w��,��>{I�@��m�˶��\6��E�~����у*!ݮ3���Ft�mu�M原T�յh'l���y}�Oq���Oj�#
��Ǭ;�&a��)�*>K_X�?+w�᜜}m������d�}�=�@V^�`�O�2�w
�

Y���٧D����N���6��	u�1�ֳ.��3�&������s�Ւ"/j�T6慮;�T��nu��Ûf���=��,=������sӪo2/�
U���YeCs�w��F�Rև�D��"�_I�Uǧ
M
�����%S��,��\RU\�,=㰽C�Q�>�wݩy�'G,iY5-�yc\vSѬ�c{�SkR�N�o�
/
��Æ�/?R�>�*F���GRGC���o#zTFt���b=�����t�G_]ҡk�T�%�^
1��M�m�D����d+/d�/>�08����g6��;���>�'^�:1��U��>���>��f6#9�(�����T��Ѱ�臝Dw]������۽j/qTyÈ��M��{�\�]���ۑ�ފ�_q3�m��,��k
|��V��S�\�1�s�6��zڌ���1�יӣ� v�y�Ŵ#>�3�����D�]�!�h`�?���Utr�뮈���Ӗ����O}�����[�8�:���>��
����
��˼����&<ت�}�;h�����V����F��B
y�Cx�]DFvAu:�yD���gD7�
��#jnf���ʯ���Ӗ�"��kNkzż��r�� ��=Z���kCO�]JO�xV������cz>�F��ȵ=U��͊�t2�T��8��w(C��@u7�5�2��ω.��4
>��/�N�����͈V����/
y�/e���TF�Wfɯf�Ox�dחa3�/�N׷�!�o�c���.���܂��M
|{F����D��7��$�/!����5Z�!���Dul+Xvv�'��_�=7���-)�_�3�{p��~���j�Z��x�����Y4C���
-�UC�l��w��~�����d�5�
�IJ�A�lbY?
�h�GX�a��D��|K��#Q�;#J��Î7n:��Z(���3
-B�H�c?d��`��
��l.A��T
��VK\��_��0l��_�Lj*�P�5˿C��)�<�?�g�D(��5E@�SÝ
�� �j�
Q)f�1K�
-����X.���"[���$��X���
-Ϙ�
LG�b3Pr�h�-�O�rz���ż#�Q(L(���?&�|X
2��$��B�9A�9@��A˷A,�
-I|Kd��c��
kf�.0E���Bc����<����M����|=����H��U�
�`J�'W�
��›'�
��
-R�x�,���Q��
[9B6����'�2��q�c
��=/���J�Gp � P'D@�~�&P,6��:Kȋ��Yfσ��
���e
-�
��� �[�1<~b�8�c����!e���N��f5(�8��auhBPG	/�*����h"['�{�dxW���=��
 ocg_t�����N��:C���3pf���/F�a?�������/��C8�#"P��0!Bg��I5CH�xXAU8�v�/��_��
��=�߳�P|��]6"�3/ܠxnj0�|��r
-��;��A2BY
!�
"�8����@"�n��d3D�L@��I�l�E�v{�uDP�3�\�jv���
�KS������_�!	X�
-��@H
��+5<��B6��9��X��C�'���
-��+a
b2,1m�
�k� r�ỜV�К���K�i�����N�'Խ�#�מC��~
<WC�V����7>�E��pVCԿ�.��4���Y�EjE���( �"A��%���	��#@��#r�
A(�"H�M׫�X��VG+VW��Z�]�gߝ�/��g������|g���]�ך��$���i	��V�c�jD�0��!D�
-hzG�[���C�q
n�@=������_�\���r}A�s}F}���
-ns���[ x�
-ϫA�y9��*Φ9�|���f��9D�Y@��D�B(�
��K�����
���D��*�׌F�!�.��mz
<���vl��i�'�k�?~�1K��w���Zl�D�i&x�b�6S �����a�
[nb<���
$^�@`1��—�	��x!Js�C���)W�<G�nz�n��O���1�y�5�e�uz믬+[o�
z��|�}�	>?2a�4;N�a�1v���k
-�ZC狰o��R 
�#��
�
� ��~�H�{/px*ٽ�_�
-LJ�j�ٰb׻��ͷ�=o�:�~��y_#��!�|�\�q���w�|��
	��$|�Q>P�@
��)�w����u�s�W`���Qn2���#5h�����y��R��/��ף5n3Q�-߇�/�5��u�M
��
-�N	��:!�x\�$hB�6&�P(��APo8���.S��3�)mO��EH��d�����`�\�i�X��f6�iK��'E���d�
R��t�v�阽�'��;'�����
:>|$l*���������@�zg���!�U
4S��
� �V,�
�=v�����S^j�R�
-\�g
�[���ͨ�.�Ǭ=�"w9���9)�xOHK���U|%i�
�t�
D0���^�y�(�ewE�&:b�h�
�F	0$@��@�)��=�Į%�Ω�s�?A�

��şS~+[ov�l��Lq���ɥgr"
�2�.G�R<G��>�IZ�YEࡄ�c|;�+��#v�l���6Knsc�$�S�A
-�j)0��@7��b�-Ǯ���ȳC����c��S���S�f��z�3%쥓a�㹱.#��->�J
�;�,�3���*o&e=d}�0�6�ߐp]P���W%n�
8�r �r`�d�0���q�����-�=�-@���Ѝ}����M��>�*g./�.�q���<��J�ά
jkF�Q��Q����I>��L�'
꒮�O���+I�X�"�) �]��E��7�!�=*��n�F��g�f
����O���NT�
F*������=ERώ���\�>��fP陕�
}z;�D�/�*'D�ˡ��9a~�5i��(��akR�e
-�-D�}/�
-=˷D�u��z�|�o�.5-Bg�7�߿�f�6x�@
w�qo��]�GSI��:m�u~
�<��Y�S�Ѫ[xU�0'k,T�u!T��H�R}�����R�lu:�@�B��L
tOKA7*,Е�y8>�n�G߶a6޲�z�1hQo
ge�!̩�R�^[.��*K�ח�k�U�
M/+�(L�

U�~���P���^��^Z6��j`���0�p�X�W����w�T���
�h�u
:y�Mt�5��2��-��&bEK�h}]m�[UM�6]e�_Q�*P�+��K+���njQ�@�
ɵgCe��"y�;��B����� ;9S w!��
�!tC���}fh����@nj
���Ք��UO�����g���uUMbW]C�Vm��7ϐ���N�Աu����/�	��D��{�X�[~|p��L�[V�)���D��B���w��N���c=fh��

��r��Ͳ��������]�5��gm[�Gn˞�Y���ʆܠ��RzB�����N��Q��H�
~T���
-Ș
-�Ht@Ė��Z��Y���pـp�{
���C
|i�/C
C.�_���
�-���+��aN���n�݉[S���;���mŴݭՌ��V"��0G�<E
-�os�M�8����"�XQ��4�=�E�j9B�a����7j����O3�>�)j
s23
����^;B|�3$t�oL>,u��'{�
R�F�j�+E��^O?��dr�7��
N0����7]X!�@*Bw�]�A�d
Bc�
������_ݤ
��t��{�+<�sA��!�(�s�X亄#qΒѤ�Q�a�N��:�8�?�&l
-��C ����D�aI��)Te�Z=z�Sm�:�g\j�
�j�=
��.���Z7w����:V2ֱ. ��VD�
��ױ� ·߹���?��>����k��/���7�����ZT_ks�7�6�m����Dna-r�[�;~����c�x|���D_|J��������>�KˎEћ�ԂEG->�
���
v��8T)������N�в@]��n|�;)������T{s�%��35�q0Ͷ����m@���yW���
��5�;��d�d���&��Gy�S�-<
D���6z�<m
5��򩊐��ꈲ����Wζ7���V%�}0������֨�j��f�
�e|C�q�����H߱

�H��'D��j�d���V
&ZrR@�𢙝~4�
E��j~��"�t����K�\��������/��v.�dw��f�7D���Ǥ�k��r�{���
��<��sHL�I�SP�Ժ�h�����`S=�{lV
"Z�vЗ;x�~��&u���+�*���.���;ˣ�����]>�vc�_֍Yc�o [...]
8=�
Tx��V{����
.
�\�;vh�H5�mL¯����.��Cw����C
׏���ma3�>����^g�sX~����G��[B���Q(e>����*�
�
��M��C��ra�x�a��
�yFc��
xGa�w$xKp�'������
l`3�v�o�g�&_$*�B��M���#
|Ʉ@�CBZ((	*.�\,�\
�x��H���`� �X&c���	�ࠇW�!���fpU3�+�l�?����D�
"� �\"
�Hų:� �I�x
-C
=�q�?���/�8T��
��籎簝'�c�??g5��|����M����˾E��r�b�(xS�(b
-D��ZD��hĒT�	
�/�j!8���K�"f5S��dZ�m�$=m2]
-{�
-��-��HE�bfy"z���} ];ҏ|!��i�ү� ��9ꏨ��bD�2w�a1�x��d�]� � ��Ԡ���kyX
z� �LVG�'zB9�
q
���h(��
�F���|�?��b��2 ?ɜg��fn3�~_�r�
-B,��#dX�,�T
��<�I���i�
�b@o�����i^;oTo�"q�	���P#F¶ (wB�+�&�x0�
�U�&s/	�]�
ND�P��}�9�0�	<�T<�5<,��6�]�0N�a�h$�.�n�?�
��� h>�zG����P��A}����1�a�4{��W#��
�"�f2���ς�友����#;��� @v��
�Ȩ�A�K�H�?�0��q}�5�H����pvE��,��U���O��
ɯ)��cI
-�n �e at t�	1W͈�<�Y0*Y���-�C
S��ph(����	{�r��!{�Y����<�q������6G�O���g��Y�I-Gd��n[�����/�<��a��˂���;
�g3&�YHe�ϖrȗpp2.VO)��R��lO���s�h�pV���WC�K�rޑ���G�b���f��蟳�b��_�{��=�S���W���d
V��H<�U���6���@ud�������
e��D�*%��d*�=�'�
�U�x�x^h_�I�c���pM���+��c/���]�k��hoR��'��/%v��R��?T�١i�C{$��h�B�gX�8���$����^LUp�6�0�,
��yߜ��멚xm����F^,]}��*�\�{ʳ�?J<S�%鴳N��ح9�8�mu��
s��:��
04:a�]C�xvC_7rX�	lי@x1�0S�=�����J����>�1�Ҵʀ﫧���4O�m�bEۄ?+[+�M:V���Hi��P�v}��>��� [...]
-*2��2XP�H��TA�D �@(��J���ޔ ��A�B�6��=�������sf��κ�޽
������������{��b��
O��MbCx-�'���I?&s�>���XߎM�9#�s�d��kQ���5���n�B���N
y\8��	��
�<��;�
�?Q�B�+
y��#��p�!������u�N��x���ʶ��
[Ÿ�]
�X&w���g�������<%ݫ��:0�/<8S�6|����n�:9@틼H뉸A�x�h�|K�D~��F!ZS4����.y}
-
-���|&������t3�I�	��l}�#�fr+�Ȧ��0k�4�f,9�nD$s�&�
J�{�j<�b���1=�V���7�j�=`��~f����Y�G�j>�U�wQ1�����
�k	�����n����$o
<.������x:���rVȖQ�F�"���v�I��v$�5�
-Js���t0k�울	Ne�
NE�O
U�{�J�X��( Z� �0D]	
-� (��� ަ�i���0��E&p���J�ה�F�ߍ�yǷ
ʣl�2v�2��&%ݵI� �ť�3ɵ�D
K%�)^�U
-��
-�/�
-E�s
-��!�B�h`���/	�
{o.
-���c��2���{WT�K��E�V}���
9�{[�I
����
rU���:]M/�6�
%}
���_��7[��͖��7[�|�Ē�C��_�dD[	:����U����7��JH�u�!ܪ��5���*�5�L��� �Ne莖˜=j�С&�K�<�\�YH)ʨ�+d
��n���Qnz�
���1����!Y*b�RSv�1���0��x��� �{�J�.7�[�$��5���;	��ל���vU
���<�
u�����ST�b���t��<%7GEϒ׳dY����a�$�8�̯~�Lđd"�4
1�2D���� �
-��Xp�;O�눠kX�M�a�щԭ����q-�5ǷUWF�R���W�%
T�
�V�ze��R�kYE;')O�'̝��{���/!�s[����Y��)(��J����"���j&	p���k��
0hk�Z���1�i8f��
���
�.�Z�U��*+�{H˔Ԥ�j����
�<�����|���/_�|b
+.1��]���$�[�=��gp�{W#v�V���vYB{�>bc'ٸ���Q�9jU��#���'�!�@j��YR��.:S�%���񫚙'+|�*'8�8�|"*;R���%��S"�h5�[�K����L��q�����f`34�&��w3T�1L�z���-�#�6�-�.Y��(l���5+ȼ&�WdC#-������
n��
-V�a�#Fp
��V#ZX�+*_ͿE{�Wp�
��`����`��� �#6��ფ�!��l��y�� +�@�����N����{S
��s\»J�C:՞A�=���q��;�
��m��Aԣ͈zL�(Au�y�{�
oq�`w0������
@-vв�u������q��1����Q
��-q��/x�l#GN�

��*v:��s9��>�Վ��i�q�
\r��@�
 �o/"s;ٿ}5�2 �G ��p�s� 
g���N� k�dӻ	�iWR��X0�o3�9�j�U���m�W�;'2w
�(��������t
��ێLݒc��}
9�. �ra���
� �� 
ut
 4� ��|�$@�MH�3��v�;b�=IQ�>�as����7
��[
�M��Φ[sf
-��fjv�g:��`K��ږ:�d�u��
��Ȏ���1��{\E�+�W�w��A'�@?@ίXΟH�	 �m ��!��f[���B��ਞ��_l쫏^��'�1�)i���}�g��6K������y+w��Vn������|�8x�8�]�M�����
h��_ο����-��3�'����p����C�"�Hv���Y(��9���y�ѡ�Y&�/J�9�hZ��r����u3�W/�
����~���,�=A��}�ny���;P��
��g �D. ~��gЗL�{�(�m��#��� ��a��
!:�
5px�7�?��ՙ���Sa�20� �

��f`F��P��"JQ,X"q%��Uc	jt�
E��=��.Y{�u���ƵG"%(
-��!��
���;�O��}�}�'�~�$�~���0Ofh����#��v^��R��+��u��BW
e{;�
��F��;�m����_ x�(�6Q�}�اD��
��֍"�j)�]�5GPps�`|�(|H�?��-"���"��)bϏ߈5X/v�~�nH�>6J�-�߳�*�
.�C4��'����D�����D�
�8?��(

-
-��
А
:��H>0Z�ArCO�Y�
-y�JL�X R`��
Ev�%�����,�M4�����/q�-�T�{�c���DA�D �3
8Ӆ<�Ajt"�����@4�э$H%��ΊB+g�l��jٛ������?�-�Q
-�=�����9ߧ�ȓkpg.\�3���D�\�
�$�7��1#
g1,�e�|�/A�b|���}�~� �̂"F���M�414�b�C=A�l[�*�p�ªdp�Ͼg?Ƞ�"���cM
mdp�k7��
�a߁!\@�Y@���][ELA�,�o1:
���T�4V.�f)��A���CS��As���=��5�V;x�O�LO(��?��o
-
,�*�l!$F��
bf��/��o��Il�
�ErhW��v�n�����gGОc7�3����G
�:([tph�‘W���
!�s-FQ��^�w�M�'b�3�͓ x��	2��a�o�2�_��MJv(X��#0�bW
ax��bhpl6�wh2��w#�
P1��F��
��o�
���/ ���^����"�u��Ce���#|�=�s0/r�i�#L�l�S��ʹ�t����s��_�&�}���
�w�/�p�3���������
���
!*�s}t�$�K�z��x�g�[w1�˗!v�]kt��C���:�szk[���m��m��k��W�j�k���zV]g�I��V������
�[������M��t��:���\BO���$ 5J��b�L���+oJ,��I�CC�)�/��V�vY��"a��y�:�g	[ܟ��v
��a�i�	?z�Mx����}-
>�㡽�.�Cw&��]�mqm{w'�♯����E��^d��֬QSzɫ�ly]j��y�h�'��P=�9]}�G����K4w�V{�J��u#qg���|�&
�x��B�S��F�ӉПHD�1�v(	��C�
�jx�m�<oe������Rk�Qx�)���*~�/]� {��n�0����k�'{\N���b�N�S���K�НI��:�J�����
��s��W����Ǫ�
�m
-��S;B�!�󳔄
^�|j,�Qm~��xp���d鏟�W^�)T��?��L�	^����
�3Gw4s��&se��J����A������}"���C����v�����󓛁��ݐ���L���
����^;� ��Б����n�=*���ő•�I�e)O��
4\S3p\�C�u�s������[
����Н�7mϮ2o�Sc���ec�/�����a����}a^����
���Y��)},�QC����P�ӑNt�ċ.�2
gK�JO�譬��z`H���p�OU�_�w��-oV�߄m�]aސSiY��#�b���g��<�-�i�.�A��\D.�EĢ\�/�������+�
Tϳƃ1�#�[cty�;�-
����

���;��K��|�
�G�n)
��4�K����!k
�6��_lY9hM��-�%y���;�0�^̂�7���6o0����`D�

K{���~�y�1ϝw�
-t�TJ���ѹ	�t��(
.���
�S����˶�y��F��,�_3bBЪaSC��_2da䢢�����
w��-87��fܬ�W�_!zfl�:��Ӌ�
2��Q�P�ux��9��/��/etr���L�����]�췖e�6��լ--�]�Y�~��σ����d�e��yQs�/�<kXe���o��Z\?��j�������ˢ�
��EM)Fd{�#�@��p��>#�TFtf��NL�P�ɮ��+����( �}߆}f���DTDDY�aVePY�M�*�X�&F����M0.5�9�Ѵ1i�h���Ks����������޼[ą3r
�{�����
��ʏ2h��nڒ�۪1Sb_��ǯ���*Ҫ=�R�D�n���a_Y�9�����s����MF���""�,�MB��0R�߯i��P���Q�t	
&�V�X�)
�������w���j+�\ټw�I�l�徼T�ʜl~Yv��<��s��Q��q�;Gr�/+}�_�~�?#��_���
	��I�Q(MC��0
-`~'��4�T�?P�L)�<� �j0Rm�|Vw�ﲶ�ns�z�����5�;-�
�mK
-2��d��<�gnn�(3��[�=蛚u�?%k�?9�_r��>)�(N�BQj&
-S�(Xla���ᮔ�^����;���4�>#�80Pk =u�L{��Ӽ/xE}�Z��h�Bg./�c��$�1�8�%���#�p�0��U�$��M���K�]�O�=��O>�d(N�GQb.
-w�`1�J��D}���P:��} 'i�h`A�=�h�cZU��4���u��
�kbMeՉV9�i�Ҋ
~���-��F�X��_r�'N>�+��+D����8�E;
-Q�� ��B��`��4ԃs5ԃz�{����vH�[���C
��je-�ZEM�+�c���-$u)�)�Y����$�Tz�U7	�U�xm�
�����]��;��xs�6��pk
-bJ�s��� �S�
5��P�H3@/��*��Ʌ�.3��re�v�.+���k_��ٶ�0��Ӥ�{,w�d��h�9�
(w���辩�K�pB���r_�����:l�E����X��
z.��,^.�����V�ô6� T������~G���K5��=���Z)G��v����M�w�[n�̳�>\��Q缮��kD��{x���������v;��a�=��"�z�NϤB�
4�M C���	�r�f �h�
�a]�
��';m$��gx�F�����[�b��F��l
�6_7 ����o����7䴺���)�����A�U�輺���ɡ�QA5h 8A����z�v��V�,��Ns!e��L83	��������G����x*Ng��
���L�бB㐱�U�m�
�
-
���kp��o��o���ȱ�>^����A��wP~�1�?O �H��1Ł�i=�����3
L�L {��յ3��OǨ��ޥ�zZ���t�n�T����!��AC����ӷy���F�sh"�D3���\p-�Ds8I�?D�������M ���y`�%6�U"�� l�BgE�
b���� e�J�2��L^��U++��fMOe?���Y-�k7��g�]����e�w��+���b��
 G)���F����)����O+a�5�X�s\�3� �)�ς@x+�܊f<ndz�nK�.w�T�w�U��
Qu�����
����
��P�v5l>�֟��b�t�����R�k(��j/���˔?
�'��O D�T��
up~�
������	

����`�$
l�F����򙔱xV�2���e������ы�,��?�xO��{�*��Pu�A�o����_t��?��_��#��?�����%��7j`��X~�����|0�^��@0��WA��Nx絔��A�h�ie�ޞ`�og�?���hΓ�����|9�g|H�t��7 B� |����{`���'�
�
zh�%h�p�
4�40�p
p�X%�B0H��1B��o	��F��ʗR��Q>�=���
��X=�Q��[�L���Ʌ�Cy+)��hE�ˉH 	#[�!� `����|E~\BA�Y��p�����S� 8R��B�7��(� ˉ
-r�o�	��}bL�	�x�`B/Hb� �͇C�<��h�Ơ�3���̕A#�z�
j��A�M,�H`�Z&)&5��t�>2L��$����U�)}~D^��
����K�K��0h�Ƞ
��]�̝ACo�
�
�l`��r�I�$���
!��	2A��%r�|I�N���e�J�����vv
:�2hO������Z1�[�•�X���B�\RJj٨�B:	�Bw����,��\'���u}GEugq �S
F�A�"3� �u

-D�PAd�2��30�
 ���"�,��BK�5�ZWc��M�=�hbY�-��b'���s���u߻����}9(z�y'���V���&�q_� ������N�q%]e�v�^Hi
���h�d�e-r8hQ�A�:���'��h��E��� "���[|�}mq��B���L���b�?�ǖ( z�Ũ�����-�,����rw���(
e�}
�
��o��w��?$kxo%
�7���W�
������C���gҋ�_�w�?�=�߷{'�+E�
;
��oKQ�ܒ��(�[�'e8s21�E�3�f�N�Px�pz]�8o���W.Z�
���?����Y�̬�
�Y�����	
0��/��2���]�7\�
-�g����'\e��
-�/�����p�@w��$@/#@oZ�P/��^���z���~>+���]�}�A&����ݙ�;����U�'E��b��;��w�>��3�_�q������)�0�J�Ƨ(:�@��3��8]��z~@��I�w�}҆��<4� {����~ެ>��;��ܛs����\�Z&��U�ٳ��g��7
'���d�Y�>��=��x�����5�qχ&G<ޚ~�f�<p� ���h�
�=��#�)�ͥ�D�l/����|'�3ϝ�� �����K�����~����?�&��3:�����z���������3���ȔA���}������E�>���#z}�b��!����\  
�C
�a�	�Zd�C���_��E
y���
N68�=qh~��y&sL���?�ݢ?`�xO�n�>�A�]�g�w�d�-�Mw N��6]���V�@�A �`�Wal����-� ��pM9�G2p:ҋ},b>H�.��p ,ݨ?$���E��v/�6߹��r{�Z���6�A��[��K:��K7]������`��'�Q���k�Ա�O��/&���f~�e��%<��疈�JGT�؃q�����=ѱ�����{#4�=����]��7���nm���tۯ��6�lM�%YK�#٪�w͡hO��P���c��8� O� 7c���q>�_'��d�$8�,��d�_��۝�P�=>Ұ;.AԵ$�lSl�EGt�����m�M�ֈ6�e��Y�˩1��sC�9�z��:��N�(#5hW
�ұ0���
e���7� gRYp"�
�S'�g6�7c{g�7�'u�pKJ��Fu��=1Ŭ-![ܪ�Y�ĕ�6/Yn�"�UV�ѩ6�����̥2�+yy�]���7Li [...]
-���Íx�Ae

��� � �Z!��3��|gVg�lnG��^[΢	���D�Y	f
i�t�MuZ��<�ʾ$�ɱH��ѩ���I���I'ܴI7�r�/�Z52ĉȴI�0. x82���L�cT�e�} �
-�AO�)t�X
���6���ei��<�q}n�YuN��"[c]�)�g��d48楯erҺ䚴O�2Ӿ�����[F�
yF2�)3

3SQF
Fa텑��
-p:�z@��Q��V́�t�ڱ�J���q���
�
-U�bM˖&Y�gZ���m��ڜzGMv+���,O��vK�
���|��<wUk�%Y���Y蘒�������m��:��ȣ
P��R�
�9HG�$h�����i���9�����e��JK�'-K0_Z�n�-̝���e��R��8��7��v������grU
2�\t��E�-�r��td/$Q��8��
P�>ʟ��P�j�=�����V��ٵu���ZaI�BC]U�(�Re�S�*�,˶I+-��K�
�5;�w01E���]#�.���Bd�S�
c
-PF
F�
�9P���g?���\N� ��ay��4;�ʛfq��+�
�
�F�����uj���,�Ě��q��Ҙ�FYd��NʊmLXŠKh�����LX9:�����R�����X�U ��[<^H����}� ݍ �� ��kW
���J�8�
-�(8��������g�����6NZ�`�jN��m���z���N� ��?f`��af 
n�MP��EES�����k�ٺ��n�]6�e��y���Z(�*�X�
-��)J��Y��Y����ػ�ہΞ���;0
��}����'�MZ�B��׋�ǽ�2��-�c��$�)nJ�jG���%��W�?ō�'��=�v��pU��B`�������J��56<�ցYki3�d�
^S`����gꪉ~E+��߷bz�	+


�|NX��c�.��ts�ȥձK��,i�)X,1�$f�=bao�y-~�
�������K�U�^����
�)5cFi(
ޔ��mJצ���JG��x�i����qoM�nx$p̆��;��
.X�$lhIix^IUDnIcD�ܵ��Z"sVId��ގ�5���^���u+�7�r�~v�'�l3`Jy �*�qE��X���[Q�����sl�$���S}Fn�a
��)k�ֹ9[����V�̭�����3ʮ؇�-��%$}������0�=�5P�����-g�ť����ʁi\�&TwW�QX
�����J�(W���
wݣ�wy�
2d�f3]/����ӪK�R\;-�]�
��lI���6h�
�)�wH��p�8���_�����\ɞ�
:��P��;`�
y�V���C��Nd����Q7F�׍���j)�3u�����{&կ�r�o7$
<dH���_{�ؿF|���o�>1�T�(c��1�f`�6�ɝ��.`2Wû ù�f6h��X�t$
�G��<�gS
��F�cw�A�
�����UQ�˴��2-��Z-���~�ˣ�Q��;"���ij�r�o`�R���?����
PT���Y�@Ƈ��& �c
�O�!g�|&�_$#�%��;`?;}�MC��O"���h-���ݰ}�
���`;+��BgD�i#�3~��n`k/b݅
��F ��I�'��3@�9=.�a� k[,m�03��L�v����^�N���O�й ^�6Am?t��uނvU����*�3N5���?�ev
�SO 	��Hf�l�o|oa�������1:w4�;p��P���A����
��7�� �����-`�s̟ɹ���2;�ك?e�[��V��`�'`�
� �x@�7B�d��Nq�L9ćᇡ�
�7\�.,P.���W/��{���r����g��̎� 
X� >
̽��o����,v�$'e�h�B| �C��G����{"$(��C�� �i���J0�~O��
z��J��cl�r����}j�O�]�[��B�
	��9� �<�9���Sb(T�/�yf(ў���:-��T�D�A�����@'��/R'����y�N�[ߛ�3?�;nD$�_��}�š��<Z��$%�?(1΢�i>-&�¸��P9U�^��x��<~4^��.�0���#�;ߟi�%�G��\�������
��)P���a�I���������6R��e١���Ԫ�֏�
k�괶��M��M�6Ѯ�����Ab���N} ���:��F���9�Ur����ꧠǕ����iE�`_����P��K�u�f�T��
��:��k�A��+��i_��
!7��!�q6Tt-����?�� 	A�$��b@�k�"q $>�����ǫ�
P�
�����Z��%���vٱD��X�}�ب]t�i
;�֨�ڹ����S���+
�D��7Lj��:#�#ݢ{���-����T3$���8��8t%����|t$�ˉ��W�ӵ
��k��i-Η=>w��qڹ\w�Y���s��s�����s�y6%6{6&]�jH���`���T�$>5���@����| �q��4A�y��@�+#
Wӝ�t[Z�F⋴��d�ډ��
�S��5���?���gc�b��)+

)���yL�e�K�g�Mi4
Hm5�M��'U�vSU�X*i�I�X��gk�<OH�	]�~h��/�
���d|�������Ɯ�

�?�?x�c^u��j�_2��z��׬%>{�����YjveV����c��<dݕ��u{�U۶,�/˒�w��m��
��#��v��( �
����
_���aAh*H������QZ͈	�}S=�
>��5�	Sհ�|w
��c����e����my���U��W�o��5��+
�o"�	�Jb�Z����E�(� ��K�!@��k�� ��@ E�(��޸�j��u�nk�n����۱��vv���t����;�ad?����=s��9�s
�����߰NJbMH	k��)	^
ك{�x

�
����s%��'	
�0!n%��&�,%�^JR�/�5���|Ϲ�R����3���q��S�����։ة����PG�2{4�!�x�W�!�s΀���e$	��k�g�����|�¾����Ct�� +J\V卵WI��*9}V��8���=�0�M�TL$[�ƒۘ�I=!��C�C����Y�=�2�/�.�H�����]r³�	זDظ������T�
�u�Y�c繥�ΕA��t_����f�MM�tf<�T���Dz��#��DmZLU
<�lb�u��R�ܞT�K1#�T�
֡�)�*�[SkI%��p�^��u�
^oOq���
�<�╻���l/Xв�n38u�ԓ����c8;�{0K�o��e��=�[��s8�Ϛ6,hUO	���D
���z�������4�
�E8��ᷘ�?d`�A���{.�>v��<��g�T�F�0즎�Ї��yj�^]�w�!�S[�lϩ	m�n�6gu�4Caͤ�&s>�*�
Ie�#�Y�BCDH�YC��B� �>�9��Ή�װ{^.p!g
�0e
��b	�GP���
5&0z
-�ޝ�,��}`k~	�I_Z��ȭ�u�s��f털\;')�Y��h?�P��[x���J�$
 |���s�×j�ߢ�7
�A	��R�7��
-��`�L��R�ʢܺKe�M
-���
��"]`��Ȭ3V�V�s͆v~Y�QaI���H?+)�/n(��|+)�1"4� �#�U��cpу���.��
�{�F�������[���U���QyнŜ��X��[W�]_]j6��B�Jj9%�m|cq��P4*��Ht�+r��ޠ5~#���0��t������`���a�B�	8Y0�O0{�
��Ͳ��ny��\���V�QS���
-(��2U�XE�j�����/��-唞ה^�d�ޗd�����3MD�1A���J^�W%fA��=X��
��4��������B��y#45�Z��ѫ�
�ޥ��~E��@C]S_kͭi�f����!az�S��z;\Yu�:\Y��HUI�Tf"P�	_]Ax�<K���
����	sЊ3hA}�����`�o�ڎ
���(�2k�{�5ų�-�'�U�k)
�i.gi�,�����q@��0)Li8/Jn�-J�&J��G�l!��:�O�%��<�9<�3��38߈g�
-0�ЏX��F��� ��	�򞭔��7���z~����Rz�ز|5��靦 ��ZVj����n�&���Ƿ�q֛a2�Yۿ�q���Bx�̈́���XEna���̣��
s�
Ѓ4
0����El(
x�(�Ѵ�8zf���֟ᥴ�|G����V&�0�z{C���cz�9�{��H{�đ�<�H�Gj#��6�������_��]@��v����v`-�
��}4o�ZGd;Ġ��c����!����P��
�
�o�h�� �HO`�#8jx��g�:�y�_��AŠ
@������"f`
��=@���]� П H?p��
�N�Lo���H��K���Qe�
-ځ�
���<�h��#�i�t�|^w��������|�1���Γd��	d���:f��}�dž�,� ��T�D���H��&{���C̼ �
�a��n�vI!ʕ@��RR�pe�v��n�\��
��u�]C�[]3�W\�
[\_0����s�
��4K�7�%>k���C���?4
-`C�z'f�,@�
��w 
-;�kW� �j0�\Ž�-���nؾ$�mˉ�uY
[�u�M�e��W��/�ة��)Z���x�M���*�
��u���]x��p�N�A�{&q38��;���p;�@�5��7h~�D��@t[ �ۛ �N�D�n���^>p�W��
B�Cȃ��z�`���u�P��	�y���2��cc }8�ܻy3��i����t�u�`�
 ���� �cOx �������>����>���� ޏ�;x}~<?�
_|����^PQ]i
��o�

0�P,�$�51q�T�
-"* �D�����(Į
�ŵ�`Y#Q��	QcC�

֛�"9��s�p~��;̼�~߽�3�Hu1~
�}�|8sȼ{�¾g��
���O �Ӏ�
`}^�oZ�/頺���P\�t�-@n�*���
w�����j
g&p�!pS��|ƟT�d�'���3�! ���1��$�vp� 䋀�@q
�-5ِ�m�f�
��

�Gܔ<f;�p�{—��
��xv
-��	�������w�N��֟�5���'sv���/3�k��cߦ�T���"-�mK�@MC����
��n�*�)\��DZD
؂I�{��OY�����2�p�mfl�_ w��t��W��q�3���!�!�DX�
�&ƒZ7�"�^;��
\0���O�[/
�|�����Dݨ
���M�i6-�%���Q)�2:N��.����sbl'�q
ݙ�'�ۄ�H�ԛR��)4���"ZNŴ���^��Q�F^�^���oI}��.��҈%l�z�*������!�F4%Q:e�����E���b��+��v�w
�9�'��c�G��CzP��zD#�n�
�f�0kۡc-d���a�B�6����k���7�\�R��
u!j���L]�j�F<Vo�CU���;�J�>l�Fຕ@��
�Cq�
 �� \��֥)��������b�J��r:�ɣP-g�<
�<ܗ��\�;�Jܖ�ᦼU��p��8��^�E�'��	霽��:�'�8����^vMm <er�f-7g{��ܹ���������2d��0����j��ˆ|\2,�E�2�7��¸�{p��G�r�"
w}"��	�:�&,���7�B4SCx����ހ�y���w�ͨj��Mb�[�$�Ꞇs�#��8����L��\�G�T�J:�Aq�s���a�������[��z���%T�i��P���#|���
-�O�h�k+-^���#o#n4�¥f��K�`��[7��C�w���P�O��O���g��~�<�}>�-��,U��)Q��٬���j��i�f���M~/������-߿-4�˩ŸS
��۟*p���-lQ�犓�|P�: �Ma(����U��OU��ϰ�f�Rn1MPm6MW��f�7�
-l0�Ԭ7m�\k�eYb����׭V��h��
�%���? Z+j�s�������l�g�X��gz
j��~���:J[�EJ��,6PnLW�
�.	�)�l�ڜk��\�]n^b�Լ�f�y�\d��\h�,�7W��9��� aS����s�\
Nq�+��H�
-e�u��-
?�?;���w
-W�t��X�1Q��cJ�e
�j�tȴ*
-��O�Y4K�Th;7h�.?��~vP�}^P�}n�#���~z�Б]N-�:�3.m��K����vʺ {:+�=TFiXC��Eq�YZ�X
�,
-�Sv�fU6�z���Y_L��.4W�:�~F�rǜ�
��!{����v�z�iB�Џ�dO�����%���⹷����7u�bM7g��j����H��wP,��,��ΏL��떢��u�͌��ls�d�v�q������);|�a\�N�����w�Yo
_G=9���
7Y��#Y.�{{3~,���K�`E=����^&��W{��^�����Vo��c�vJ�4yR�p�	����}��ب<���Bcfd����m.#"�]�E�tɈzëғ�H�P�)�`e8p���v$p��������(����x���J�����O�2'>R=9�����$���A���_ٍ���Cf�	��=s
�c�;��eH��~��kZL�tN�r"}z�p���p�p���c�-<w���L�x��h��I�1����k����I91��:�oO˱�	ڬ�d9�ϗv#��tȈ�F?4n�!=��yp�
-�A��nɱ���^�.c��
ɱBO�u
�
��;��y�f��d�8X2��y?���܁n�I����6���`�q��Y�5��kG��/g�K��4�!=i�>��4CJb���e��6�%%
p�p�j\�&#���������}�������YI
�%���)֘�ꌉ��!;�_3�����T#R�4�b��
J�IOd���e
���7	1P���,,.��V�:,��U��H�A@��*��`-�k1X�b]Q��QD���#U�ѱ���rԊ��:��k+ڙs���@��w�����Ť��,��F/(�GFW�ύ��8;j�SxT��QW�c��(a>_�#�

����}x�k�����+��$�|dm���8��IZ�%BN�(If��4-y�YrR�"!1�ba�\eLB�Ut|�M�,�9���"V��6:���p
�kv
-���<r���X��������`�A�'�uH������^4?U��t[df8#=�U��1F���c�(}Z���`�����h՜�눔Ś��BmH����IF�I�
��
�']p����> A�>0^舶�K��
g�ų��f��]�
��
޹�>-�)9���;
�r=$���eѹ~�Ȝ�9�aّʰ����4���<M����W��3��2�O����/���/M触	��T��Ov=��~le�s�۲�s�r����)y@|�
-q�XP8QE�$󊼤��&��
��g�(�
�X��(�S���rm��j&/Y��]R��YrH�����{:�\���v>�$Khz��:��
�w=}�lIV��|���(f�Yb����.sFx�
��<%!e�3˦�˂��K���Q~�-'-�Vy�[M(Yc�^I��W��ؒS����ڎ]*l��H!)6=
g�;ؖm^�!�I.�I�����}*$��BP�#�� `�h���K��W�j�lҪP3��y�U
�UeXxUY���RzVnQyT�W�W���+��>j�����
-a�^��c�{�s��2�|s@�鎭 �W����U[`�
|7�q8���P3
�k�H��̐��	���Y �I���{�6�+�1n2w5�5w1���l�m��xk�:�VX�X�\s;�}F�Z:K+��* ���<����m�o�Ԫ�Y��G]�׏�[��\?�M�x�,i�+q1�K�6�H��VȆ�jdCL���N���2T+䃶�^7�τ��=�{
��tW�
-�M� Dofm������]2
kP�O

�3 C����
�w��ǀ�P�o��sc�6.C�}�$N��K
��E���%q��\�[H
v	����l�#�z
���,z�a���
�˞�u?0� ��
�&5�M:�����0h��`�<
�c��=F�`Ӓ�rX��B�z�\�U�3X
�>"$d3��8�2�;�s��
`�. ��������00�(лв]�:!�e�
-mv0o�
E�2
-�N����?���!k���� �vN�}'��5����) i{M�'܋����H�Dr�A����.�.�����iT
�����5/
Z�\���/�_\Jy��C�2�h/��`��pB�/�������뭐yO���3�3��O��W���:赦��;���X�_�*��8�kx!v�7\�[c�ی���@77�����,�]N����)��K�Ogͣp4��x0m�ځ���=�jz/��ȏ��I~"�r��~���T<�<<�E�W
��y 
~
-n:��-Z�U�����C@(�4�nO�y�i��<s	P�+��p�%���<!��_
OEl	s"�6,�q�q� U/�`�ŷ�V�o��!,�!d|
��EƑi�CRɇ����5�H6�I��#�89C��"�����?�aC�5{\UoE_�f AƐ)$��'�$��2RI֓��s��k��8����Ё�,�&�1�x���n��g.z�̅;�&�d6�#i���9�9�J�`5=��l��������
��3��
|�n�6?y��y�
�:-�а&Ē�(X�ȗ��'�H���e�U@�rz��YK���-�l�i`q���q�������
-G���#�֌C����cŚ(�CXxB���3�
<���=i,����)�A��?��p]V�k���*�W��p�l'.�}���V��w�L�.t�?�?�h�8�|��kD_��X2�=������/�#q_=ݪ���
�������eU.�����T+qV��UFt���z;:��qR݂6�N�����l��E#Ь����%����
��Z8��;���	?i���;��z�& g��ѩ]�]N�2�>�/�qC��.נ(�+����+��7&��F���,(,ȲܖEv�v���rY�˂+

"��.!xC�E��h�&Fmc��6�If:i:MS�M[�vڴ}z
���<�_��9��y�>|e
>X6�����e��7���pm��ŕO�K���\@��$�
d
��X�q��u,x�F�V��e���
-��*��U-�]��)�[kk�ݵMp=��{�������aj1d��r��r��r��_w�~k�o�7C��fC	�$r"�����C�kK��Gm�o
�����Wk�q�Kp/4
n���R�Z�
.G��R��Z�pP���9E;}V�C�)��g~֬�(�b�}Bq�}Lq�=���=�WΑH�H���둄�CH���W��
�ׇ�G1 �7r�}��G���͛`!:�)3aNi��(-�)��>����)w�f�
�i�^�Q�g2z�{8�8w<z�7���U~�Q~�?�_���\��_����6�|f~�F�dܳ�pύ��J

�V���8����	i0�`����dB�pB
{\��S�r��n�!��7
���O
��	�
-}�	�T�����{TDгD �ق�@
zN
�?
����1��D�NzN$��%L�$S)Y�XJ>}Hca
kl�!M
w0��7���ߟ�WЧ>(�U	�Qϊ�귙.�=�C�Ӟ�OQ[2	�$��<�%�b޿�{?�@ω��l��sc9�ʅ�49Lføv3�3���
�@fk����זs��5�ތF~OF����-�L�/jO���J[���>���})iN��ؕND�"BW�O��_��z�p}�b
�0��L
-&tRݱ���p@G��t�>�ի/`wg[�]�6^�g@ێ��֬�@wV?Ӓ��t3�Fݼ�^wK���ZV��w�#��ơ#"$�9�p��
�7 \G߷`�=� `
-c���i`�@�J0�C�1��)�Q��0��󊸞<+ߝ[В��r�E
9{�NÈ�a���ޒWޕ�
��m�'2��H1���D�>���O1w� W��9K ����(D}�7��
-�A�)
����i�N��3X�&{���m.,�5V�4�
-ZE5�=��!��8)������Ae�_�������H�S�GD����瘃[x��q�z���~\�__� z�_�Βh�l�V���iI�]�lvcI>�Yb�9Jl5�N���-�,�+̃�R�aY��LP��Z���I���Xn6i��H������;����
�\��>�b�<���aN��<�]&O�p[#�ٺ�j�jhg�����TW���ր�r����ETZ�)..
��-�Bˬ<�r%�h����h!��"A��b��3��:���_C�y���~
ρJ��Xڬ,pۤ�l�4V���:�rT'��UZ��*�m�����r��V-(�5�+w3��$F�,�zRn�.��֟"��+���	�=�g|�}w뿈�s��wj ���� mO
���
8
+��n=T;���L���4��.�m�+�9,<��
PP� ̫��rj���k�����2]�%���'ȟd�*"ɬ"�L;atv"�ٖx�}wW΋�u�
��D�Q�9 at Z�z�W������
-�rW�����6�t�BW
;�����d�����B]�
��aX��0#ImX��4ܗj��(IqqJ
aR�(���w�1�}
���	���
i�o{
�
7,�dP��*�=�P艁|�v*ϓA�x�,}k!;�����Z�������+Ը���if��<���$�1�-�%6Q��nF�w1��s�?�FߋV�q#������:(0v2�۵
r����n�
��խ�2�ut��H�yK�����6q�wu�U]��&ۺ�	c��c;�����0��cۈ`��7���γ
�q��Gv#M� ���0�����/��WC�/
R|J��A=�N%
�D��V�*Xq>';���(}��-�ü��gyQ�ۼ���xQ}��z	?j��X�x�c^��.�=�.�v�v)j��d�Ґ0�@��+w(�
R�V,��� Ư���\�2ZBm��6���^V��������
{��������N�r�1糨{�{�i'҈ߕ>�j�@k��� �<ɃȣP
]S!>	���k�jX?���7��vy at E}ea��Op�}P,�	����
-(�q]����ՠƂ��ADET,�NPX�
�h
{,G$1�qu]{�X�ۏ��������{����
�@�x�g��y��gΑڛ�%_�>�`�Q2l�]f(2C����/�)���멷4�y�����赌A.��| b3��8~�Z��9�P�	�rx�ë�;<+"�Q1�ír\�\��p�4é��U�p,�2!9����V�3y����LYǻH�?���R�O	VF�*�gS�݀c��j���u#
`WD�ak���26�1�Z�CcI�ڲ*K%���\�@]+��!��=��b
��ԝC݉�
Eݸr��6�����ԯ��_��Ƞ��AV� ��h�6#G��
�de��Y�PV:��
���S�^���
�
�jO-�Pwm���.�߃�k=�?�
���CIl�3�Yw�8ߕ��F6eل\d�i�kbR5љ�
&��+"�CV!��V`z�m��DQ7��� +�|
�;
��R����@.�
Wtl��l�]��>�
7� �L�b��|�I�I}g'�&w!��h!�y6��
�N�(�F{;Q׋��� ]# �D��u�Or��Lh�v�/��C��?�[7����l��O���
��1yI#_ҐW���������h� �
v<x����ռ�mּE����xD����3��=��桍�i<���,���`��!Pq��k�6@���k�A�?�	$��#�dYM6�RDJ�vRK�!��u�/��+~��xI��!쨭�Pp�W����;H����32�$�t��䐍du�r�
-��.����2i��.
�'��W��G�����
�ƙ�5���H?2�|B>�N"u��9R�kC��:k��%�2S��Vo���>�~���C����G��7�A8RW���m!�
-����Gz�j���XjMf|�tX@�Tjd�������s�"�@#�
�~��I�
�p�'��4q7F�� \��hK_h�ZG��9&��ۇ��G�x�}L��ԙ�0&���H���e��%�r�M���8O_���ŠS��	��8�t��Z%�#R����9��ST��hgG�8���A��'5�qU�˲�h�%�|:����bN+�qJ�'�98�̃UY�ê
-4�jpHՀ��&|�����W��2c�j�AxQ�eN�W^/'������7�~��}�6}pV7�lG��X
�����3�`?���`��8�n��s�W�u�2�:�A�C=�84a��T9�F��@Y��Bz��7ˈ�����n.yJ\��C��;N;t�Q��w
��ð��Թ�G��T{$a����L����敃*�|Tx��{J����
��Hf�Ki���
-IA3!�!�Z��=��k,���	`�;孁����Pg���}��� l��ʎcPR��(�b�dl	H��VJ�
�� �TX)��Iy�'e��~����L��Y�֐՝�F�R�K�0���3O�v���@ol�
��=P4 [����Gas�8O��gHy!s��!)�
!���!9��!�5!��U!��쐣���e�OKC�"#TțY�?���]���8i��G,=�c~��3X��P7l��a(�<�`�G`�q���8AZc�"[eL�eʳ����ƕ�L�FE�q�2ݸS���^�~E��X�(\(�I���<	�ԝ�n_>�|r�8n�����U���	�=���+�LXc�F�i��e%-7��e�&�2L��t�\E�)E�jZ�L1�S-�0�FlSϏ8��gj��1=��6	�,�Pe
�<��W{��>��s� �:��W|j
-{K���ھ>X���
X�?
-����#����e��&��5E�
��\�������F3+�P�yd�vf�>����6�#h�E	��(��)Tm(��O|ǧ�J�x��
�b�c����a�@OdFwƒ�0������XiQ�G����d�c����NR̎��L������N���N�γ�]��
m�M��V71��.!Fh�����*a`+�"�}�����c�������c�
�buX2��q�H�
��&̏(͍��͎)K�#���"q�4�!��S�R4��Vh���u�GEy�a��fav
.D�&�葨(�((�"���0�
̌��
(��q��h]\Q0.
cM�h��4rZ=&�Ic\km�m��&��A����;��8�}������}��yI�ir��j
I�j�I�4���j{���'�J�x�U�?3��~��F[�6�a���>�(Ѡ���Ԧ����*C�PnH
��t��$=WV�^
P�V��O�W�5�
��Mߡ���Y�g�M�Y�Hc֋*�^TZRE�S.q�a�Q��ؑl�ZV���u�d��D��9Tf�C�i*�L��i�PlJ����N�]��Y(_�Y��e���ƕj�q�&˸K���ΘqZ��qC���&#CT
�ҏ����}m��f`6���9�x%�R�uԘTf��bK0ʬcQb����BA�<!?;E�k͔:�92��)϶��-5J�e��h^�1�۵if�No�P�j��M5���g�*�ԛDe�IT�r�������,ځV��q#�SüTpM�9:ۆ��

-�c�
ӱ�1W�;�$9���J͎\y���a�V��Uz�:u��UM��6���6�vU���P��-��Ee��	�^z����o!�c.���*Z�zR����,�U#/o��
�4X���s�`r�I��,��鐥9������
ʄ<�j~�vu|�M\�IrY��@
�PT�<��xʟ���1�.'����`�!�<�N��Q��@X��#�$
&�]�0��	i�d!�e�$�r���ق�ry|I�"�d�2�x�jv�����Y�ߨf�S�*�1��	�>>d��b��Jx
�yh�I%)�{�rs� ��~0�AZy(R+‘R���9H�LT�
�I\E�4��L6��-�U�]ު�^�WY�>�J���"r���,�J������B�����2`y)PK�8�]L�WA߳H^�FB�@̯}
�a�瞂��hĺ�0ǝ"ĸ3��n�d��X宖Ns/���n�O�}M>���<���<��<�Z�G,!U�|��w������K�RE���C��Z ��ާA�������!�n
��&`������ ҳ Sy�_�X�)
��&z%<��=
�<�H�<�a�?H�Di�ˤ�W�d��T�<�p/.��$�H.����L�6��XE��Z��́�hƤ�ј�f"��Db�w�{�׈0�c���B�^a�� [...]
-�	��~�u
����@�����7hYGo��
ڥŠ�$;Fc at G8;#�\<өG��
��]
-���	�����<M�
hw=�n�];��G;�65+���P���`0���^�ہ�N`�
`�~��
j��Cp(�C����!�EA���e���a�qC��1}������C"?
���6j�e������6ր����v�1�.���Ao�8��]@8���B{|a#��hB��>��n~p��s�y����n��u��󘈿���+�2�7���ԝ�Xg
&Qs45��9�=@{��?0�#	pZM�����3�lF{��p�3��,?�gyٟ�!�a�{(p�m>/��
����.�d/`=�
f�C���70���ԧ�'����������J��"�H��5��K��\�~���¿ƍ�	��b^?En��D|B]k�4�
R�
C�I�
�X�=��
-(z������%�-�B��R�&k�O����m���?r
w���޸�p��0�>&��?<a����������;��QWw�}I����~���%���(��Ӌ�\�C
�9Y�M��FM�^�"��ċ
Xd���Oe��D���
�$�H$�'�NJH�#�I3YOZ�+���'��q��p������w��S
�����!��

"A$��!�%�$�X��,"KIYI�p�
�m�w
`7�
�pwp�:=L�
��������QC�@�����E8�&	��x
���:�pS��������8�V�g'���y},�q�gp
��*q�3|˙z���:�t̅�o�
��d,�J͹�"�Z��Q��U�x�.�i��k9W
��vn�|������S8��<F����8�Y��v�Ey�q��^
�] �[�Q at PNA�c9V؅v9v��Z�e9� �'�x�b�z�V,�x�h�ĚX�4��Sg�:��i��$�f:}�Em�d��g�}�?��<���=���?��5T-u'�@�D����Ok�%k�)"�����d>6�2�j4�h�G���L����A����I�þx�q�1�Gx������P���R*Ǎ�+�G�sM�ԝ��PS��20�l<@��
?F-5���A�ո�
��
��޸�5��Z���x
WX�wq�+0"<���⢤��MT�8UK�<�y�X>�Ʊ���s�
�qW\���
�%����u�W7�hZpYӉQ�
\��ň�v
��¸C8?�
΍��3
n�&<ĉI���d [...]
-��^�
�?�`���ST�!��|�:��lG��
�<v�q������2�k�
����p>0�����

�V�#ӝ84�ߛш3۱�j웹	C�v`p���>�ݳ�10�v��%����%U�'������8V?	�_L�Hj�ȹ
�{�<
�3&�̬)8>'�����$��r&���cp�{T`��:
5cgP'v�ö�~ak�
�?���|^�
�.l
-���>�/�څ��Cք|�/����@܎Fcy�G����9���� �2����
�]�ұcq6�-.���Rlw�/�#�	û�
�º�]bO�~qu�i�;�����X\�/�=R}F���4�����X��Lk��6c9�

�b r&�G/Ė
��$�W����|��ٱVW.��j�ձ��*]�إ[/v�I
�!�-���;*��ޕ�b�$7��Sj�U�=c������;�3Ҙ?����o��v�$�/��޸ذ,
-��X���n}���+�Ra��%��=�W�.���H�	��Ƅ��'��NQ��?Rj�j�Wr�^�\	�E
�kp���4r�iӊ
2��)�I�~<�'����y�NGWJ
VR�n0�͐/�
B��Bl4ԉ
C��6���
�r��U�e8�T.j*
w4e�ߓ(N�*;ST��<�����Uڍ�fր�g����_�&k
t���3m6:2B��СŘ�&�r4s��Hp�b��F�66IU�N�¸Q.3�TJ3jJ2��qo�؍5v�ߕ�
U~J�*ٟ��D�2j^� '�9�1�M���5�2��X�Ek�
4g��
�Y�9
��l��l��+�
-s�Xn�HNs�\bZ�8Lەb�~M��O�馏��[��K�դ*�,U&�5S�l�#��5/�G��i763����+�w.֧�<	
9S��G�%չ��MEe^�P��/8��bIn���uKŹmran�b�ݪX-�4y�3>�u�
˯��
������lU�'��
j^,�^��h�71�n��F�Ș�yP��"\ֹ��-B�-΂d�,NJ�`/(�
-�bAA�d��Hy�ղ�֯dۆ4f�i�,�5�L��}2��dZU%3_����S�1�1׫�=W̽H;��X�x:O#c�㳪��E�p�FI�B8�1���(r��Б-�
6!�Q"�ګ�
{�d�w�Y�>ey�&���&��
M��CMZ�MZ����r��4�;��ej�\���A�����+����X�Eq�
��挄���2r˲�S�/d��SY���l���N)ݹINu�VR��5���5I�4���)I%����)R�C���m�|��Gi�J��%�i"���ߋ� k�$�UN��j
r�!ۥ�ɕ�,��]]EB��LHu��W���� �]򲪣r|ը纯�U�U��T�
-U�+W���g�`�/��*���!m�M��VXE�]
�k�#���ݳ��Fz}����IE�DŽd���A��yZ�8�Z1�~�����SI��O�r�Y��S��ZU��!�ϸ�\�R㻤�Ž@�H5�
5����� �IFJ�d$�LEb�<�[ð�u	⽉��f`�ׂX.�o��m���B�w���{P
���޻bh�'bh�*�6�FU
{��'��Z��a�'�|/�����^@�,�
�%��#�k&�� jU8"W-EĪd���Ģn+ºK��u�G�|�q����X�YĖ�,�$��&ni����TUk_�p�
-"��$�D�ԒPJ����2��Uc�LU����jj�:J��ϕ�:��Gr#y�����<꒕�Ȭ
�g��*���]Fh�I#t�M#4�4B3`�i	M7-a�
�*t�fpY
Sa*��gC�~m��w��@�^dQ�bOE��*<7P�s#�)7Fay�
-�믐��
-�����
-̟���j�_�v�;�\y�)`��j�cmAv�3yf�.�f����N5`={e!�/�b򥈥Rpq�/�R�?�-	T at i�ڔ�ʿ4A~��kS>��jm��V�����ҾU^�#�_�W�OjY�Q�x?���Vv&g�����R�\)� �"�K�/�ʥ�k����%O��<

���X�p���1P�
o�m�$5q���Q �c���XF��Tޕe�)�
-SM�4PI����Yh��x>]B
�I��ϕR�)�51�Jj�I��b�۶2�1
oc ����R
P

���RC�k(b
�Wov�m7�)�
��
-�	��z�rj���E���
�o��TK�;$�]�++�>v
�۽
���c~�ǏZ��Z}-ͥ�b�b�� j�W��#0�G��
��i�%�o���FɺU���h�$��/5?(���G��	~
ŏc���0���$~�b 9E����Q�:�����_�|F^}�I�;l
5���wK������a�
M�ch�JV��0 ���E:�\:Ǣt�%�B{�
�K��u����L�/������� �gds2y
��4]�!���T�=A�OI.����? �H+��X���MXPܥ�����
���q���>g�A*K����c�����zM#�c��/�v?�>�>��~���_�zN�o�:p�t��p0��J���Sjc� �
�&C���0��&51I�I1�/�g��
ה_���q0 ބ10f�
X�P+`
��-���6�P���Ol����s
��&\w��V���6=�
�0�a&��~��j	���[��Z=��W�^�u_���:Rt�����z�m���e�.������4�+��k�4�xƠ��F
-)O��<�/�~v��VW%qm�wڡkڧ�:G�6�|"gֿl�"\��N�:u��[�ז�j�D����+D1�����x4�b��j6�������plVcw
v�R����+��4�g��SX>	ίu/`�@��hȉ+������f7r�� }�!�>�w�7%�,g�ҹ�Y���n!�K��kt��
�v��>
�	<�����Z����äŘ�
>��<�r�
jr�sqQ���A</��::o�1�
O�E%��=�h�G#{�P-�^9��ح=څ'p��S��[���m/`z��u���܂��Ϋߔ\�"�D��UG�*:�8�o�1��h$���M��	X�N>�KP_�
٤����4�*�3Z�zC�Ǫljjm3S/`�R
�
_Z�-��
-�N����!����M�h��o����n6\[�������b�6��R��\�wϑ�c�*=V��c��=?�j�CZ�yF+�n�����{�>�@<���iGK
����i��O��)r��N϶��
-ז���ѻ��Z�.G��Z�z�ִ��r��Z�3]+}fk���}���Ϯb?���j�ԿV�����r�(���E�	h�!��¤ϣxz��
ήA{�ցgկ�6��h��*�ku�x���/{��*�0L�
FkYljZ�1I��Z����
�+'�B��[�0x���Լ�k�
}��P�
�����~�+OQ� �f�×u��6�Py��V�WIH����Ra��Z�i��:����Z>N��Z����5/b��F*#r��#7i�{�YQǍԨ+ƌ�G��(�HyNd7x���
�g�{�=Ê6�Wvg�"7�
*�l��.a����n	ZЭ�����跔=Js�'jvL��bR53f���g̈Ya��T���2�c?5�b/ScSbM#�I̯\%��g�ˌ\}�2|)�)�e��n�E1>���=�*��U��)��@��=D���a
���)�f�n$[�I�
c�u��huX&��L�;by7�q����3�q�Fz��Wh�D{�o�͌
������	�q�ڽ]�i�V�K
4+>B�	 [...]
�1�g$��b>��
�������0��{	KHe�
K�"�I&�L2If�LB&�$$C!���"IT�BR,	�@�!�(}��c��V��V��c]
-B����_H��g�3s����9�|/>����X�$��E�
�Ґ���cU�8E5IsT��@U�-wd�ґ�
-G@�2#�Xa�:�Ŏ;�BG�Y��n�;�[y�c��q��9.YK
��$�_�m�q�g�����.j��]��L,k�c
�a�c��S�UU�
-��TE�<��'�,ݩ�ӣg����F�s�Q�3��L����w[���,��q+��'+�y��N��+��fNj?g�8�I�K+��M��u��J,�����T����y��]̈Qif��3�ȝ��;Kn���EF����k�\�m�ǽ��vo���[��V����r_�\���GF��9�Ʊ
�l�M�Ԁxꉧ��,'�r�`�fE�8;J�9SU�3GK=
��q��ɔϛ�\o@^o���1��Mf�g���<`9={�4�cV��y+�󱕒c�}�fCV?��8�+��/�n�-��xB�R�g��T�7\��c�_-�o�r}���'��w*��Q�?_n���0��#�����b&�w[I�^+��Z���\����x�m&����}$�=��o��%�PF<����/o������t��
��]�̂eR�
-d)=�WZ�X)��#��H
-����̈́�.sA�x>0�
�7��f|>���x�����h��A
,�B��
eVVQ�2�#�*�Rz�T���Vj�|��&)�ԥ�`��-
-V(!x�� �l��c�
�4o
2c�������ؒ���bی-�͸"ۈ+��c��/bO�~o�&�j`��<��H���i��X���1J���E�ӕP���	ZJU|([�C��
-���Jņn3�ڍ١�Y�����������3������l�1tzJٓЂ���R�}e��e�WJ���>�C5o�(�]��k�(��F���ӜU���ʥW�j֪"ͬ����F��nԴ�nM�=�ɵ�(z�ۚ\�1��6&��gJ�m<��h����|P�u <ش�����Z�Ճ4�>\3���	�i��7�Ѵ�xMmthJc���uC�2Mj�ӄ�6��i����i|�q�kzC����z[Qk`�mD���#hl#���Y�����y&-�)
�tS�4
��<D["4�e��o�����o�I�Zjlk�ƴzu]k��m���uնY�m{���F��WD��l�I��I��O�ݷ
-ߋ^
TB���:�^Z�V�ŲNoA���
�Ȏ��Ή���XX��.
��Ӱ�
-
�lPX�&]ݹC�;�誎3�~AWo�5�n����lo�l$ϵ�Y�P���F�u+k�Y�k�f`W��ѿ����X�5L��"5�k�̮I2�8�8 �y�w��Yh�$�M�][S�
��
�������λ�z��s)9�[��
��M�Lt��H㱉��T
-���K2v��W�����C3��d//���`�������N��'�����
@��~:�s
�5PB��wK)���w��D��Ҩ
i������pЂ�
v�q�8

'
&�#���a�ˁ����ea�R�#$p���K�����ȵ*5o3s@��;�\'�E�Q���?*
�E�7p
~ۇ)=I=�ӈ?5Jzz,�0�቙��ٳ
��K'��
��'���x�5�Wh��+�-"�l�M�g�����x4#�JÞ�̧�<'�9�=��?��Wь
�1�9� �e��2q���8ρ�
-�U&��. �ר�k�[�m���H�}��+iޯ��p#�
;9��<���K�2�����M�f�]j�>s�!&���E���
:�TK�Xܗ
�.S��
p�8.�j�k�a���R�3н��A�W�e�4��ހ��Rbc�‡�/�L�>e~>g�|�A��`����fN����m���
��h5@��8�
-q�
�P �`%��:X������>��q���B��x_�]}���%�~1�%� ޅ���&��V� #�7B��%B������70v�ޯ�ե�h�>�g^�}~����$%zEs���`@�}x�ËWbCa�ADA
�z��,E�L��
-F���e�;{�v0-[��nr��t�#��L�q�������j��h��8���Чm�>G��u���lꖀ��i�E�P�0'o��eX�׈�<q�L
/�����Y�Y�=��-s�\�yL��ǿoΆ$@��Ä�!�\�0`�
��c�m
6l�aCH ��%9H�PҜm%�Ҵ9�4R�4G��֩��i�V�Ȧ-�4���e���/	Қ����'������������)���'t���pg����Sx������x�
Ƭ�Z��Q������N���
��0���]�����s��?������u������
���]��
W��4����#={���Ԍ�O�J�5�*�:t�0�#4q�V��N|H��5��*}\�.��I\�\��΋x�N.��y^�s\�٧'�y� 3
1��n
S��4���[B�x�S+�k)��j���9�6��.j�Rc����sN�u��i��$�
��c\�Q��4W9s��f92�^�o���:	|�sk�L*�n45��9�
-�����+���9qJxpB�q|N^�3��s����qL͛��y�ph�yLο�
�`�
_a�o�'L����1u��4�tr����X>?L�����0?g�pj���J��U�^l��b���Px;�w�@x�#F�7b;&"�aw�Q�\r㑗�#��G~�-Q�X��M��7�����g����Q;�O-����SQ�p2"G#q$*���q`i9�-���2
v/k�ΘV����#��c�ak�6���X��.
#�/a8�6��
���`�����Cj~���c>1�1�������_��Cq��y,�$Ȱ31;Vc��JlYi��$+6%90���H���A�O�P�KL=�P�IS�A��&ze?�Z�#t�I� �%U�oW�9R2y���WP�~X�a��Jy;R��U���496�*�pz9֧�1�ڌ��v
d���?�}��ѓ�ݙ��C��M��7�!�
�Y�'K�G�=2%|�'�>K���L!��rl/���碗͙s1��
�
e�c [���Do�=9
�V8Px�Wt�S9��ڕ{�QN�Uy^�����	g#�?¡���3���m>�K�,;&Y����g�ɸl`\�*cї���y��Ÿ_�΂j�
-��(��[�
-OaZ
�p�6¥��jJ4��	�ꚰ�>���ªzB$a-��@�S�f����4�(c�CO#��	1.��a�V-EWQ|řh/΃�D���*���.m�������^4��aS�$��E���������0�� ���u��3J$a"?���J�E>��N�ś�i�^�����t!:�Q�%��,
�r\�pVh�E��
v�6�V�Z�k�`�n&�AaԾ&
��E��Q�������H���5咸Oͫz�4K�I���='=駛q��f
ܚ%pi��Q)CSU6�U�hԕêӣAgF����&} F� 
���F@����N�����Z��O��IB[%��*%q���X'{��j��}�񻋿���U��Z����LXj�`�-��P�:�FC#j
-�1tBo
Ag
��}Bc<!ʍ�2�
�6�F�
��ZI�k$Q6C�$nQ�m����C2J��_K}����v�o0��R
S�
-M�0��5�Ƭ��\
��
U'*-
�X�QnE�eB�Z��b�;���PY~%T�I�L�(�{��:�ۢ�&`aۊ^��q�5���,
Q[��x�2TY�Q�X mc4�z��L(�5Am��փb�0T�](�
���D��#���R(
�U�
��K��z�2I��A m�F�V�
l�t���6���9��IP;2P�P��Q�b�ENT�F8��w��Z�k
9�W��zY����~��o�;$d5K"���%q�e�I2AF��O|���쀡�}K���
Uk
-[P�&C~[6��
-��A��#�c���^��dz�a��0Vy�#�{2�� ���6	i��-aU�����-�8YO�i��ɞ���m���@�o>r:#�������w�#�K�
V�5H���A� 5Ї��f$&�"p���|��wH�d�ꓰb�	��|����
�.�&�
7P[��M���`븪oR�#�����$3�2���R$uHYjA\���,
����iD��"*�cD�At������H8��M��
�E�N
�Lm]'{� ���L�wX��ǿ *��p ʐ%D�qE��ׁ��
/B
���E
��yj
��Ml���`֓&����8�֪16Mn?H����}~�~�����=��~���_������Y⦎%��(	��)Dn�(�/WS�:���`ʖ��@Φ%r2m����K�ʡ�
���|���2�L��h�L�cx��,� W����<�$�R�k3`��\��r2����#s��͡jg�Q[� ٙ�ek�,3ƛ���vs�Z+�*�P�b [...]
-�S3`���V�j
eSˌ[ۑC�h��(�u�:.�:�.X�n0g�<��̙+
��[�F�_sa
-�S�yH1g`�^.�@��U�s��$����z�
4���fp�'E��g

�
-m=E�������'��������{�x�����K���4�b�X�94s�퉮�j�#��M�C�d�;�s���rÎ]ر;���ر;h�(|F�u��l��]p�w��r��߇
{�)�5���՜��� ����݌>�4��A�p�&�B��
��4��hΏ{H�c_N`G#�I#ů�K��u�X4�`�;�1�'-��c�ٮqu��x-t��ɞ�%�CR[��1Y~ւ��}8��6�9��4�.�Hb�U���(�M
����m™&>�v
~�f���ت�����n����c8!�;ݪu.4@�W�	����9|������
��-�M��
���yw�t�{���>S������ӆ�#��I�?
�{�Y�r��U�
�
-n GL_�M�%݁{ց

0�=&&OV�ۃA�
���c��Y�p
��

��d�r��Xw�@���0
�C̄9P
eP�`�~a��Y�̍;���ټ'��	�K=�=⭇�܁���uޔ������_�8
� 
�l4r�9�	s�c�x�
�Ǝi���
��)�>s�]��u� ~˯�|�
�|
��\�K�68�
ش����
��+�/�����c�Hg�i�?��
؂�.c�*�Z��k�l7��ң�49��Y}��]�Z��Z9���flA���
M��O��Ţ�:#�W��Ϛ��d����D<��/W��2v\Ž
Z�s��.�$����B���|��D�*Vޅ�p�نg�O�S�-�3�7��V8~$`�P]dO�)�㘁F֞��\�.f�2
���VG����r���!���e��~�dJV����9
�]��|�
��
_|�#�ht�����Y"
f��Q��;�c�^�أj�"G��&�A,��[Y�
�6�M�Y��
��߶i9�l�숗�Xu— ��N
��n��N�a������F��
[ȏ�2�
�d�2"���62� �P
�Y��]�n�@�y�r��������,��9lk��
�tŧ�dX�"�I���h$�1�4429����J��B�b����*_T�*�c1�����
-ۧ*oC��{���S���1���ڝ<�A	����<8�~Zg�ն�Z�f�V�
ղ��Z�n�j�MRu���j?Sf�9��/Q��b�9�j��&-p�-��Q;]T��-��Ԉ�����ɏ��>eo{g�)��Q~��h��A�N^Z�
��0U��i��EUUn�E
&h����er�U��|�w+W��r�m�
�]�w?�<������
��5����n��k�0�I�!�vß���WÕ_�n/���*�}��c�J;�U��
*�4X�;��<�1*�J�
�,�{�T��\��,P�O�f��ӌ�o���������v����?)��E�]�����C)�!��*m�U2�a��.mT��AE��5�k����)�7Vy~��7L9�ɚ�?^3��kz7����
P�� �2VkJ�6�
Ҥ�3J
��&=Uj�E�����7%��g���a�z<+Ŗ���7�fn��^	��� ��
���jz�M�9X�=G(��e�JSF�,������B�W(5x�&��k\�A�
yOcB�+%�F�XZ�(.E�Q�6XU�
�<+Ė|l�%69���i!]55��2{�+�w���
��>�4)l�&�MPjX�&���
/SJ�
-��ج�%E�҈���
���C�E#�\
�0�6�C9�,{rh�a�
�V�ᮚ�ɑ�J�쭉}�5��
5D㢒46j�R�'kt�Q����@#b�jx�F�
�OCcNjH���,
Q-�����נ�\Z�
Z#mP��G�jR��Rc<5>�_�b�5&.R)q��o���%jd�%ŧix|���4,ޤ��5��^JأNh`�'��P�-�?��<*���?we1 $�� n "�"�

�2�,�0Q��NHAA�(����M�q��Z5q�4զ�M���6mz���ĸ�&��ƚ�X���a�9����}�����"Ρ���l����X?m�
_f�K1�S�U����@Y��(/i�r�'+;� ���,�E&C�2
2��UZJ�RS�dH�PR�>%��RB�NJO���
%$�Hr����T�#,�g���=
3�
-��b��oe�Ȝ6R��pe�E+#=I�t���s�j���L��J26(��\��M���G�'�qA��;�Nw(��4�bS
:F�
�@�Q�U<�Cq���l6�)c�22�Pzf��L�J5M����T%e���U��
ř�4�lW�y���4ɼK���`�nkB�C�&���0#�Oa4A
̂�`�
0eIFs�f{Ȑ㣤�@%�VBn��rc59/Y�y��ɛ��M���DK�&XZaY�p��Y�)��
_+4ϡ�\�qh\�C�R,���r(�)�J�
�<zn�?e�&�{)��_���*
Ӥ�I�X����tEXs4�:M��
-�Y�jm��5ں]#�����
-�~��B:��wh��^�0�J�V�E7�Q)��ٓ�1jZM(�TD��‹5�d��J"Z��%�)�����,-SHi��J��T�j�����P�
����FC�C��
ڞ�� 
�lP
��fю�2��_"�gT;s�F�{id��B*�\���H=Y�@[�F��4�V"[��l
z��&_�V����vnjX�C��t8�-s�E4V@TCL�\F4#�lyE��_.�at
���s<�_�-�� =Q
�ǫ�ɷ&J>5IVc�w�U^56=VS��5��Y�!���r�>��>�<�
��e�k�z��P ��� ��
-)�il���u�O� y-��P�0yڇ��>���
+7{���4�>]�5�o_����p��S$��l�7�SO7=ϡ~�z&�j��"��9�Ff3��A��(h
�
�����ܚ�4��K}�i~�i<���[�dZ8�Z�L-P
�ky��g��ຈ�m�
��l��y�h�*^/�|�3Xs"k�ĚC�� �7IÚ%�%m���,�1ϵ�x���XE#�����
��C��
�N0�1Ҿ���C�� ��P���"p8iF�j��z��͚
�� �5J���c�{��J�����j}?���@�?6��f���	���p뤰;YT'�:��p�������p�
z��y�b�F�cI�7x��Z�Z+�o��w��^B�m���x�B<v��.�������c/�>P\���w���F�z�w>�{��pbGs֏�

��ŜC�9��V�M�(���g���U8 ���@xu��������q
?N�x���;�A�Equ����O�/����
Nj[9���W��<��F���^��W]ZG���Mg �_��p��b x���%7�Ҡ�Ï�
,\~��gw-�������/�M�CO���H���9���;b?��%�=�].���;�z���Çp�9����Ae��W�Kä/��
-M��
��y�"��
��uj��M�穀5��Z��z���a��qi����ȥ���g�7�`x����a
na�
����w4������'?P��_���
\c�
-���z��� 
� �a:̂�`�&h�6��5z���=�}�o���Ôx�$}��L�_�
�6o�p���9o��@���
`
DA
-dca�~P���:�۱߄�V��_����?���4z�"�J"����<}��t	K=|�Yx��C?���KWL|Y[0�Ϛ��2�cA���د�j����������~|ʴ�	S�ټ�T?�QJ�
z�9"�>��uqN�	��?�%w�ŗ̺7��5f�/��N��LN>V	1,�v��b{%Ө���;��[��|;�x�R>����<Z7t�H
C�u8
-���#>prWJU}���s_�D��щ��T�MNΨ@�Ə7𣋼������:~
ŏ�Z��u
[����8�}D|E��
�Bm'�|��.85�go�����-/���(t"ш�Z:�s�_��l���خ��|l6bs����ll�2�9=ق�
l��ds����
�ۮ�����"G�'�#��$:��D����
��b��]P��r����\l.`w,$
-ϓ��T�V���W��UD��̮�������r�]��9��� �]���;��A��1���B���9
�(��h���r4*Ѩ�f
,�R����y
ZDd�+�G#��r���"���pvrԾ�ѿ�+`�ܵ^��
Gk4:��ı�T-��T�iL\�����Y�n0˰/� �2,�� 3,3��1��
���$��v�c���xK�ʭk7�V�괪*�R��R�U~���V��.Q*�J��c;R������{����;G:����	r�q���+Y�Ȧc�n:�J�F�d)���ﱰ��G}��Vu���Wj폴�~U��e�Zr6�f_T=/�F�|T
g"S8�%�S[K8]ͱ��lsrx[�����}�嘽,�Lr f���Äc�e.v���L��g2�=&�> �1�����,�wvi9Tk���%�?k�5�t2Y$Dq"nG��9o��r�j8��`!�E8��\���� �I�L&�1��B(i����K����{S
H�9#�3�j���J��Cq'_vD���Syʝ�i%S
K�,'�r %�pj6�i�L�U1��������݌��2���ьQ�fL4-0�`�t�ݙ�2�y_�
d�������2����L�G�_d}>'.�z�i{X��d�U˜j�Ɍf*3��Y&�w�/������4�i'� [...]
-�Ū���I�W=����f�8��%��K�(-����޲Z��<�.z*<tU
���b�e�e�6�Z,��l�:M���񔊧�#|�
-�ğ�bF�k�
գ(Ǡ�Y��gI�[����LwU]�V��
tT��v�n��i�N�b[�a[�ѶA��6v�ר����� 
꬟Rm�v��B��CY�cbAL���7�c~�اz<�(�m;pפ�Q����gm%muvZ�Zh����G�}�F�~����'������&��������=U�S]g<���]�[�Q49ܠy ��; ��߫Z�US�=���8�RhmȢ�� GcM�5465�����䥮i�Z�86�<Վ�T9.`qܠ��e�G�:~GYӿ�Ay�AE��]i�,�{�Iߡ��bH�.
wiۦ���
CSs"
-Է�ao-������zlmmXۺ�n�S�6��9G��(��(q^����B�(p����R�jP��7tՋd��" |�#\��U�K���
Mm�l�4��l�:
-��`騥�����N�:�)��C�{�B�*��s����u�
�����
9�� �� �e��npS�?��uBX��!�'�Dk;4(>ֺ���"�t�QޓDY���
3%�R�=V
-=�x���z1{G��N��]a��92����������k�=���c`�~�5��3�t��
�
�RLrH��[�
(�m
$`
H#Ϸ�\_!9�
-�}u���e��1���ӿH��4)��$���(~I���$
�=��5���X�E�_Z#�_t	�^���}�Wt,RT�
�$k$S ��@:;���I
T�h$9�")�Obp/	�yvO�L\�Mb��&&��+�#r��r�C�|ǥ�Ġ�p�!
Ү��Zj����B��VCq$������Y��!6�BL���a�CSl

a��Td��o1��'"����lg�qHL��ݢէ9(�Ji+"�J_�1uBp:�ع��	D�S��bs�����Ma}�a�ܰn
�Byw�x
f�kf?T#������VJ٭�aH=A�a�+\��8�9�J�I_��4)�ҟ���MD
��Z��Y��XI׃(O
RS_US[�Ƕ�\���[U�\=%���=���@vP5,O8"�Y=��%]�6�mz�I0�H_�)K����0l>.�wR��
�)���Z��L�
-v�j�����5�!���/����C��p��'�V5�4X�ք�,(z�۩g���

C���|D�' z
"���9��&5x����
ZpT�%���
-vz'�5�7�`
B�cㆎS�}���&T��y�i�0(:5�
:�� H�tR��w��K����c���)�j<�)�^�x���rS��긭�����
M��z���[����
9�����5�Yi�Gcݲ�9�S
Ok�I7���e��.���5��ӍB
��2��{2��ce���e
�y��
(�K�k�]XXXv�]`9DPEEE-�}�3�Ѫ�68ƨ�ǚ&5UcըʹM���G϶&iL�L�9�l?�q��g~�e���}��y�G�㣍
Y���&�Fa���V��[O�?�r��&�4ݑ
�C�ƹ��ߢ�����ԩ�~�?�p� Ҫ���
'�K���i.�g����]��l 穋
L�h���ݷ�S
c
���)+����C7`?��vj�	��$��ur.�{�gx��hV.37������k
z���nP�7�I7��M�����;*�D
2f;y6�U�+�6�����S�|���}�.���U�����Xz�M�|��;��]j�
sr�E��5�zH]< �t9}���"�
v�@	��Z�3a,�tS��|
��=���t��������}M��>��|�������\�sOz��O���  B�VȆB}�24F�QG��@�����Ǘ����9
�3���Е��b�A�\�Ru���!u>}��p�?��^0zݣ׽C.����RC�('~�n��>��_~�fb/�%||�������%��
-�x
����6
�O�t���k?������S�n)�qG�>���H^�WB�ԟ�q
��sϨ�سu�������8�Mhl�����6���u��F��*�
��ާ<�k1N161
��){:&�2�l��Q|���#�&�x
��!Mg�M:���c��
�w�����/w�E�cj/�v��wz��YΗ:��Irq�\
�.+

v��*
-��aڃ����I���$bNgkbw%[�z\�h3n6i#�7P����P]�I��4ou.�w:����h?��K.vi ��nE�A�\��G{4�XK�IěN�����R�j5�*"� �/��rfu)�f)�O�U������p��-ql'�e��Z!�#�1�Ѱ��Ɍ�i
>V�c%>V�����2�e	�e�摍�ϯ�il�JfSQM�����4�9�αͷ�
h��f��
x�%{�Z1�p"ơ���4-�6�o,P���
-4j��T��mnq<��Me>������_x
��������
y-���5
�+8�{w��n}W0z�h%��K���dhVW�fv�Wc�!�޽LӺ�R��8M�I~�T�c�&�X���[U�s���<�1=/���g���j�j�b(G�ˋl�a5�ø�p
h��� ?��
�Y�C���i�f5�iJ_�&��U}�M
(Q]�H��Ѹ��8C5�
T
�FU�[U�W�o�<�=���ߏ�2p�Fq��Z#-�9��3#���gj�Ҕ��>(B��lQmp����֘~
��+��~e��_����U���C�,d���lְ��ڪ!�T
����~ �

������q���
>O���������

И�U�Ekt�I�"�2¡�9*P�J4<�B��cU��sh�l����+v*�pX^�9y�n)/�1ON"Cm	\e8�3���
�O�o��S���x���ʨ~*��Ԉ�x
���4&]�b�44֣!q�*��¸j��+�8K^���+ǸC.�!eǟQV���p;8��6���\E@#���$����#�R�S��A*��ЄX4�h�M
l�Q��P^S���U�5��mn�˼HY���L�.G"�\�i�'ބ���}O�0�t ���\{��L�8�g5G~/�K)^�&vWQb�
-�B48)J^K�<��Y��Mv)'9_��e�T(3�VΔi�H���g�f�&�����SJ�^��@��%w��M�.���rdž�P��2(��b�
������4 at n�Q.[��l��L͔3�#Gj�2R˕Nc��� [�\Y��(9�yY�(1��iW�S}Jj���nt�s�\�N-ک��r>�@���)��;���҃�i��
��
��V�gd(͑�TG�9�du�(�9Yg���dr�F	���w�AF��2:�)��SB�}ځγ�$�
�:P����^
����,�g�3���_�Yٲ�5(ۢ��t%gg���W�k�̮*�\�Jp5��f�uoQ��eE���ຬ(�]Eg����S
�Wg�ђL�1P%P �����R�]e����`Yr#��+s�Y�<��9���S�g��<���)�;S�2Ez7+��;�y�*�sIa����SDn[�X��,4&r����P
^p��V��,�o���4� P�!2W����d��U薡�P�E#Q4N�E�
--Z��E�'�̃�>�8�dY�]p9d�j
F�����Ev���Ǯ"��!�fR�zD�1j5�6�$�HӚ��1�Zs�L�5�Gڴ�4u�S�v���~��L�LJ=���}��}��}��J,}Z�җe-=/k�Mي�\!iZP[O��h�g
��J(�<�E{,�#��K�!�ʨ4+�iS�3E��L�8���
#�+W]EJr�ds���Z�W�,�͊w�Xf�Q�\g�.s%�k�=~�FG!�":�P
eP�idz�
UF��3�8��dw��
��$ٌ4Y�!J0F�b�W�1U�5劫���Ƨؚv��e<�H�yEg�
-_+�
TtuP��X\�~ �ZpA	��x�A{
��]�36:<RJ
3��HYL��Ze��5��P�w���*ʛ�Ho��y���	$�
R^Ɔ�p�`����}t��
-�����V@L��8�GTKC�
3��N�1��ϊP��X��1����}\�~u?��M�g���3g���!��0�C�1�����Ü`��v
.��tޗ�T�g�Yb�3��g����`6��F�����fc!�"� �]��7�f
��́v`�
0D.b8]�`��.�
Z��ЙM���"ׅ����ziX����dt�
$s�
���
�GJ˘+;hv:i4����ts���p]�f�.
u3gv��
�y�g/p9�|�
��G��� �R^'��Ĝ�C�x��Z�H�eR���&�4u\�!�c5~�!��c=~l�������uk�؈����q��C�}������ڠ|��S:N^��u�<j�U�\�>�~��ԏ0h.CM&
l�X��o���ӈ�`]~��񣇋��5顸{�	ٽ	��]��k4N�>��br�K	�$���B]�)f:[`��k�i8`o�g��g��~rr��9H}
�;¥{���Ev��$��
�9�P�,z�)Y�J\�B�c���U�?t-��=��7��������
L0�cQ�q��-��)�8ť|��<�B�$�$��!`=޺!�����\D���|�f)�x���R�����O�hX�ux3<�Ҫ_�;�
�

L
�Y����c��'��E�K�e
-�2A]�ؕKpS��9
��(b� lj�P!ݟ�+a�p:��+�5�
���pH�>�?c�t�$�`]��9���s�Mx�B���@w~DŽ
�q`�
-�a2�B5��
X X��Q�f��e���z���E�|�^&���W��T���_�?�xN���D��H�
x &@�Q��G�ՠ���oLNי�1�]e
-�?>Ǐ?�Y>c2���D�|��oI�9�d�
�8��8�>�//w�@<)�3��̤���N�L�
�?>ď�0՝��� ?���{�wg�RO�yN�9��%�x�%��cd�5^�� ����\���{%���e�3�)�/&�.lخ��ll��n应�w�E��Vو�v�ϓ:��^�<@��G!���������.���b(��?��h�Dcy���2�Ķ�uDڄ]?Sm+�_�qх�*�?J&v�����%��}� �
(n�C�
-�D�:\��fk�m�t��*�t��3z�s��<l�`ۉm�gb�I���
-�R
K9Һ�`�6��o֓�ul�����t��j������

3�
�I{��nYа���1������f���;����L�5b��J�q���a�����x�E�:�d'�ӁⲾ
u��#zo���Б��F�BWA�t�h
!�#����Z���х�G'~,#�O&Z�D���X�����\@m.�6��n��s
����;�w�ޯ]���{d�XN}v�&
��Qhdk�&�Q��,E��*x��
�h!#��#|�B���,֣������r/�!�4G���
Z�-�
-������u�T&b����V&ֳ��n���dt
-�)C�
-�Z2ш����%T�J� ��TO
�e�?<���
q[�Ƞ���}�Ǹ���X�Ƒ��`	������"�
mּ�6͍L���C4+�5F��7:G�1SUS��1��1����2b}r�.Rul��LT�i�*M��0
W����n��
�/G���$3����
[�kK
--��Ɵ&X��d�W�y���͈���Q2���c�$��@Ֆ2UY��ԩ2a�*�,a�J�4�K��ګ�ʷ~�|��!�{N`8��NZ�u\���>�7�]
���/��Rk3ɰZ嶥j�m�\���L
�ʤ�"i�ʒ�U��T��ZM8K�[T`�T�}���wj��9M���
�E�$�Qnr���v�J�
ˤ������3i�
��Ɨ��R�
-g�E)v��8T�:Lũ#5-u���&�0�P�i���єA^M
Ԭ����I_�	�ە��O��_���
��k���x
-�G�҂Ҋ.�
�
�`��+�ܔ9"T�0k�#Q�i*������7�e�y��G�(�
�A�uY`w�]`�e�]�]6��x�M0�xD��⠉��h���hԦ:���M��4��=�$�Τ�v�I
��۴�
;���^3
�7{���y��{���wi��J>S�����MM�,�)O�"�t�]�-��)���n~]6��p��D�o����}=׿%؃��
-M|���!�.��oNP�9M�1#U3&_���,UV�S�SE���嶶�i] �u���.�Xw��zH���b=�x��p�g�ي�lA�
S���!������|��(^UE�UY����\���QY�M�29m^����a�,�-��<ٗ�оY�.��e���|�9�)�-�0�pv�Ӎ�*��-�M0	&�]
���*�pĪ̑,Wi����*-5��,���T��RŮ:�&��5UW���2�7j�{���/h�����*�u]9��r���Fc3��e.�K�FB��|P	e��;GY�l�i*.�RQy��V�e�(���S��^&O�F{f)�ӡQ��]��FV>�L�+�y��>����F�G������
��� ����


�����*^����3T�͑�[�|o�F׸�[S�Q5�SӨ�|3��kW�o�2|ە�ۯ4�	
��\UZ
�FoT��Q=F��h.&�
�B��
-}/��P06F�k��[��
���y��o�H�CY�2u�LRz`��
�X��mJ<���q%�(�YI�{J��*�6�-h������ �Pe`G�Z�>�-o
�cB�2�)�f(=�
&����rkxȧ�PPɡf%��*!�BCC݊�S\�b�o+6����zn��ڌ5]��
���0P
p�]����W�>�mĤX�6&*%���p��¹J[4,���p��(.ܨ�0
/�6�&|�f�,4b�96Dx��5�ƌ �@=���|��mA{�D�'��R�b�45AC[R�@�p�D�T#E�M
aP��������<��0��i���BS��Bc���a<�}P�{{�
�$�7��e�h�6�u��grј��?�v6ʜ��M�����nc�ښ�
0�m�x�9c8����GX��f��H��⽓1[s�)��V�)m�
)n
�ql(	�".�ɣ=���å�M�����$w�c:<_��O&��
���(���ӧ ����&�⩒i�X�
tS�K�(k��Rˆp�p	[�eg%yt2'�9d�r��cN��/8&s-�[�ֳ���j�i'7�U���j�����C�m�^0}ƛ�nr��
]�"W4y� �&걙zt�G7��B
=��V6�,�Ԣ�����\�1o��v�aM]Q�D��:�����R�o
ig3�tt�:��~͍�[`+<���(f�"�$���<��G/r/~/
��~�
��[��׸�q��}p�Թ�Zj�^LR�
Z(
�D�TL�棆ˋk��ś���?x��0
�Ajr���f��-�8F�
cN���Gg��Z.�x�;\ qS�Y��S�;�Z{����\���������ٯ��_X�bS��@H
ؠAx^������q��4�[4ُz��q
-q�]��C��&�9�����x��
�1�~�c��I��2�7e��
8c�~��!|D�^ �K��K
��X�}4Y���+]$��>���#�I̯e'{ 5N�����1�bh�of�=Cc@~	�W�ad

0�����*�r�޸Ξq�M�&�����:$�fϼ�ɀ�
$`8dA>ؠ�A��d,�-��=���qB���~�#�M����]�[}�wu��O|ʯ~g�
�	��r��y�AX����z�Ea���� ����N�
-n�2.�S��Y4��y����y]����C4���b���9�eh����'�{�̻Ja,#t�Z\S	Z����!}����5}L
���>�U����3��	�xG;h�^��ms�{�V���3���]8
-�����Je|�I��NS���4
hT�O[��}?�#ĞI�y��bZg)�W�*7�e��ƻ�
�j���A�r��z��}��}Fw�����ㄧ
Sh��G�V4\ԭ��~b��
&�Tb� n�_��}�ث�
�ѫm����M-v�,�ϵ�'`|

�/�>g,��ƒ8B-^T*�G���_L|7�{٢����m���Ӊ9����:�w
[i��ɨ�
�F���ܤ��
`<
W�;k,���Ex��N�T2yg?��f�ۈ_F��t���A�7
-�Z��9
#�9N��Z֓I�:Y'���
-��\��9�y������v��2�È?�����#�����K����B�h&�t�0�U� �jg���BF5��׏��p�����6���X�f��
���Ʊ��ZtR���'�e
��]��o��
;v.�p�8q��Nl�p��9�
��&M��N�v-m�v�JW�rT+[�v
�h5���[�@�Q�ZXA\��1&
-

	����
-!:�'���������}���<_+�Qˌ7�ъF�Q4���$�M�,�c�]�O��x��a��YEVW����^e�N�{��{���J�;��Q��>��!���ctM���
:^FݏN�
t��f6R�;�I��h
a�
�:fm��M����E���Q��ڣ^C�"��)R�QX��
�s<���
-��uM!}*F��jT�����
tj"�W�5�=�d��Ʋ7k��
7,j�pV���7�P��E�,+�s_�ܴb�%4�J�{J�CvJ.���Y�m\)W�eʘ���&��+W*ߩd~��
-Z4Z�HAD�˜��*��@#S4�hт���k��"���6�P��
��:MAZ]ƴ��w�R�IJ���fa��	����X��<���1ٔ097�4dnҀ9�~s�b�}���kIi�eF˜�,
�
W�rFA�e�Y�*��]��� �Y�z�����J9ZM�
`
��<�ĉeȖ���"
X-������V�����(b
��֣.��:�c
-�7(hߡ��}
-�
Sk�j.����7�-}G���\�ܓ�<:�B� %�C��YXc��)O�/�;Qb�-�SO�Y�r��ʫ�Y�V��I��6+��^U�rD~ǤZ
[��ث&����xF
Njr;^����
���Ɋp��h����ƒ�8$�:j
�0.��k�QmR��D�5j�q*P� m�Zj�j�����9�F�fy����|Bu����|A5�WU�|
� qO�P�ٍ�Q4�`
�z�=�^�0��>�E���ü�^����P�.�Z\�jvW��]/�ۧ��v5�GT_?(�g\.�&9=���<O��sQ��*�|_����Wy=<M���ۅ%��� ����������<y�jh���T��Nn�W���ꚺT�SMӘ�|U�W���|'e�]P��+���'k���߲5�e��u�v�7�
؈MK6����B�x
�fh��ӼF���Z�r�����Fխ
U�[��U��S�Xe�)�;UxT���e	</s��2��
����J�����n����@?�@�ڠ�w�{����rͪ
�T
t�,�R)��C�zT��^/Kx�����%�_Q~�6����`ZEp���b����ǡ��]?���3D�OiZޙ#{�Q%�VY�ˠF��GőV�#�2E�e���(�Y�=ʋ<���"/)���L����+�
8B��h+��A�h�y
4�]�vU�XY��lY�
-d��e��T�Taԥ��O�Ѡrc�ʉ���VV
�0����ˀ��o��
-�U��Nڟ�`
 ���+/��hנ]�V�G%K�L��*�����ʐ(Sv�M�`�&�$���&0�	��F)~0C�0�^e�o��C#����Y;��]�#��U��
�bƒ
g)4O�$I-Y��@Oqئ��)X����`]�x)�k
-Ә�����$yҫ�o3h$a z���ʵ��5Џ��K�����f�mٓ��)����Ý�7́>�A6Á2���3|43
�#7�96��4U��_�.��4&ab1��۸z�s
V��W6t��-��ri�bA�L���"c+Ƕ�DOb�I�cN�9T�YPs46LJs;�0�c`w^�@�n��w�Uf	5�V�1!��a�5&9�f6�Ԍn�&<�V���
<��cw.�,㱗8��������@c
�<? x��Wx�[�Ǩ���
�)��`��v3֭㬁	����5��O7�XޔF|
4G!��Z�IO0/G(Ǝ2/Ljc�w�ds�M��X,ґ� s�	*�c�أ��`��wi�Go������X7n�
ڂ>�لn�ތ�c+Z�$
_-xI��L|�1y��y�uz�8��c�}���:�`?G�gi��s��y�Ǽ�O��&�� �
�ٷ�=0��ۃ>�9�g4Od�N�i8�)���<|
.[O��+�q�8���O^a���X\���ū�Ú���RZ#�u}��g�\�����"ӿ���3��0���+FH�a�
��W�
���M���q�����M�7��-:uq���Su_��qp?��a�`����ә>^�h^����� �;
�s�͌I�.��1���
����
�_�^�	�}���C~w��=u�e|�������>��r��,!݆���!y��tVL�
X1K�/�W�[�����e�2c�̦Z^�ً@'�~��y�y�_��=�ͫ
�O�8�v?;N
DZ���%���n;7�zI��m�vݺ6[E�֪]��
��B��ҁ(�	ʠ�*�k�T.��T`�@
��`��m��2���sQ�S>����w�{�y+8�!h�n�	X��
��_8�wp at 7)�8���2��}���]c�^e��� ��?��̫��
-<߅o�7�9���|
N��Fb-C�Oo�c���\#�Wp9/�|^�u��¹�|�<~K
��hM�^�#8��0lO1|�e�.�c
�_��
ރw�&��2�؉��_�3/�^P'�=�C�%��i��/pZO�~���|���1��!��}
-�"�zA�RB��L�y���,|>����O��s�yx��4c�$c�syy�0���;���G{�	�W�=���hϳ<��*w�n�Y6e6N��Y���]ad�Z�yN���8�K�΋e�T��/·df���
}?�ed��N�a���A{
�)tg�"֣=�S�q�y9���	�ܯ3�
-����O�Tn���a���w����j~���	m+���'�`�6��@;�v�a��hO����0y
$���>�f{;�{��n2��ŵSϰ�ހ��a<�_֜��B~�c7E�E]
��
��
��
T���K
�2/{��]B?��J��5h�g��I�8Z��r�s̜��y��)��u����&x"�<���参�
ǃ��-h�Qt���1����"���Eo��2K�n�B>@6�X=G�����Rf��f}��6C��<��o�'�G���q�։J�e�kC�}7Ƕ�a��1���1��1��-��4+f
�:O�l#�������
<�+xr
����d���8���rD�.�w-�
-�2k�9�s�9Y�޵��XE�N�f'�;VR+��	��8WY�\N�c��o5��R�T� #߯� ��"g�� ��~��m0�a�{�i	��g���XV�
�q��;��H�V"����/��4�gt6���覲���4�+���dg�dG�$~
->K�c�@�
Z�bK���I�~��hy�Y�E6�Vh��F��~
,	)��Y}E	���S�Q�iT]�I�Lk�i�S��;�,>�D�j+>�V�%��������%9��ib
"�6���N�&!�����ˀ�Xf�2e�z˪�c�U�9��9�Ty�:�;�Qޣe��JZV��2�V˼�
j�
Q��AE-��\R�rU!�u��9E�q�s
��m
o�hn��0��*��]7�t�
Ե�Ti�U)�C
�j��ꔴ��XS�ҤZ�n�i�cƄ��YE�y��
j0�*h|J���Tg�X>�E����:'?
'�n�݅=XK۳��|���ý49u�_;�-s)�(W�a��Q���V����+�TѦhEJg��ά�kpn��r��*�[yZ��srW^Ru�
pSngN5p�woc-u@[>C�
)�V���B.1W���ljtU(�r+R�W�:��긂��
-�����ܫ�uo���n�k�UsJ�5_���#9�ϫ�}��*�s:���Ļ�v|�O�A?t�
�bq�o&�F�xL
-y,j��+P[��Z��ޠ�M�y���u����7)��6U�>(g�9|'e�="���|��R�uޜ�p �-ĺ�V|e�:�^�$�Z���"��s��~�|�K�w���F�@�܁���rҪ
�d%��
�"#�O��	Y�_�%xQ��gT
xS� �J}NBw3��h�&h��ڡ�{�����P��a�\a���.UF|rFB����t�
�
�-:'kt�,�=2G�WY�!�D.�����5���Wi8�{��	�5سl�y��	�Cc�~��;7�zUS����r�
�cN1d�5�O��Qy|L��j��7�8�SE�c*����h�ct	��U���
-�9?�ހ�ڣس^�V>7C��Pǵ�Irag+Z
-e��ʖ�ʚpȒp���1�xi�E%ɔL��%�I$1ILY��(�	IpB'��P������o
�+h{��$�qh�~�\�r߅uc	�H��^"sʢ��!Sʩ%)�
-S
j���V�
`
����V�4NaRR�Rl�֝��Iّ�]hϠ�ņd���6h�3 /���/��<P�@�������M��M,�"ϰ�2�E�
�*���� &&C7�9ų�>LH/�S/9��t�5��H����u
��i࿏{�v�w�
�#�����A<��0��sqsc,��1�
|�rl7��mF1f#���+�>��i
�<>]��s��
����4�y%����lH*�P_���r�s�N0+8t&�ܧ�H�(�)^b���)<��v�;[�i[A�:A=A�8�m9d E������A����ĵ�$+"�o��<8����ߐ;�ݼ�l��dw���쒓�!� �SAn
-� G�@e"
-�JG�C�)��)R��Z��СPfl�ik�RA�Te�j�~���N��ξ�>���
���e`�.�ɐц��
?:񣛜���M�' �х��.;q
��+��\̎����
�
'���)'/a�����S�}��	0�Pc7�!g� 
��y�� ?QK9d���%�
.���� 5���u!�����}�0�kl����V���O)�^ތ6)��
�`�{`�5�=�0���XI}�Əu�a���K}���u\��kWr at n�zc�y�GY<�D^�%���-ći� �5�M�7�a��&X90��Os�� 6���&j��>괟d+�V곟Xl!y}K؟�6Sϟ����!�s=�U|R<�
�����/��hr�뭁H(!0�
XB��qa�C�*5�?�+8p�l�I�>�����|��	��L�}_c�uM;9`ͅ�9�����x7Z�}���� ��k
�-Ǹ(dD\,
�FN���
�?#'')�3q˥����|x���Cul���b����3׻�Z��>�W�]���y�D&�Qp
�$�
�U\0�!V�s��%���q���@�ϓ�s� ,QTg~)���!Ļ�<�jg�	۬������13 BM�� [
�I��> �����e�W�9�I���н�Fs�ƺFA}�p�C&k��@&0@>�r0
���u�-�y
s%�
��kT�m���r� � YWI���e����{1܏�-S׀�C���X�5�ȵ�G6(пјwU�H}�r���:~\e����������M�!
s?Σi�j��OZ��{���$U1�#�1J	]v[>�_���mpmu
}�)����'h��ЗQ*���
�8�fy
-��>��=��w��$��)
t��9Ïa|�$
���љ�Y�;�6�����f���_)������b�
�5خǶ��&b{�gb���x�
�O�)�5d��t;m�G/Q��'*;���������)p
��X��U�f{
&��wѺИ����P���n���.�N������Vjd
~����E�=�Kx�:\?דDt�O��`X	>��������-`��U�2��K��@	�+�\�g���Q�Q�����H/5�?����z
�OR��z��^N��l�߰�Ǩ��c~g��;h�$�
��i=��
��lYnl�	�W�P��:l7`{
�'�!��n��
-�n
_�%s�ŃtAz�����D��w�m��_P|�
�ت���]>�`�td��J�a���7�#u:��ID�Q��R-4�,M�GZYm�� �b�ÛV�͵�ǐy,�G���1�C,��E'9� '
�F;5:KQ���L����䥅�L�>��f2����H���6��l�����q�~+��9�3��=\�s
s���A�OǾ
�ٚ��5E^8BpD��J8j�����nV_����D�����*���P�#����
ĸ�c7|�8�V�3�p�w1���wG����6Q)pd‘G
n���Rx�੅�
�M؟Ld�4�H�R1è�:g(UW�^1DwA����ý��x���K�#>
6s���1�3:m���Ԑ`�ˀ)��𔰓��U
W
\�ᚈ�x�C����	v�~���nw��]�Al }����`��hi�`,�
Y̹��ß�I����)�&;U�����^U'�4$y��R�T�R����LPij���݊�.V8u��S_T(u�)G�9%�RQ�}��_��ι�_m�>�@�xV˻���JP�=Eՙ��a�2å�L��2�T�Y���rEm5�����W��EA{�������kߢ�^y��䶝U�����r
�F8����X�ʸ�
�HjF�Jޗ�O�����4�:���Vđ��,��Y�*�*U�� "�� �3�����X�|�W�F�\�~9���6> ��>`���b�:ɧ2��0ہZ��yVJ�)�7W�J�I*vf*��R��R�Y N@����9U*�!�k��]S���˵HN�Ze�^���+��쮳�
9�ALk�=�YH�I�;c �Q5�W�R���>
B��K�?/M�<�
-�*�ϗ'�'�;�<w�rݵr���LR�g�
�9<�e�l���2<?Q�������|�
lυk�1�
C@�"�S
�|�^PP�,w�My^C��\�������*�7T�o�
�f��3e��U�������Yɾ7��;�*�{G�ޘ
��� W�!��A
��yA������-��@��A��������
��-T��P��C-J
�ӆ�)1�B�&�a�a0�L
�bZ��N��0��uȣj~�@$�_@���u
ϝŃd�S��d�ʌ�*#�Uz$��H�R�ÔmTbt���(�"�I݉�À)��a���%�ى���>����A׃A��A���?L�
p�����ew�^�g���;���n�	�,$�$�\ T� ���
-����D��8V�^���Bq
�2��Z�N��6�#�2�Ң
��
��>��q���;���9����o��yn�'�[鐫�%g�+{ ]I�l%
-e
VP�!��d�"Z��� �"�8��<�<]��LpUq-��@�ԉh �ܛ_!�
-���c>
)�
$�Uc��֥�
&�S�a
-(��H�w#��)�<a�s2�9�C�>��q-���J��FP
��.�~1���͵�~L{�	��M�H��i�
4���
-J�G	l���l+@�5���c`��*�o�
>40E70�c�ۭ�
� +�W�/��p����dK��
,1!���a7���f�F3���bl����l
m�
��B&�xjG����؄��� �;@�� |�R�o.�����<���)��>
?:�c�m9�&'�4�^6O/����
��3�J��κ�s�ܺ�b��Cg\��o3@�j�i�y\g6��^g��8
���9�@/��}��o
��1DN��Q�C�b����wD�&�A�����z�kN#� 
�����-�:��Nc�nx
�_����`�=��'�d6���2�� !'#�FW�?���r&�e��R���
R�;㚅�ͬ���U�[�uv
~��&�v���6�IZF�
P�I
�`%XEn�E㮥>��yl�>7��
,f=F���5���\�3KT�h\��5����!��%�>��擤!s��`������1k���D���-
^[�c������s�X|��0��>��
�CMlFY}
�s
��$����A
�n–��Z�5d�||�X��`�5�?b
�ߝ%b���&&ϰo_`���a��M�<~���H{xy7����1��R�X���:�8{�WY����I��ň�%
@�#_&��A�%���WL����$��u��8�x�WX�Q>8B>�0uUJ
�&�^�p�Kd��|<a
�&iD�
-�ɷ��e
-�ׁ)Vޒ)V��p��˻�K4�w(�_��
���B�����S���4n;6Y��a�s����_����"����
xP�z^d�t�
-u
|L/�AN�Aù�#�����$^{Yz�<S�����U��)��� �[x30�I�PJ_e:F=��3��S��?)�(���G,�
�J�.���y�_� ?��`0���!ݴ�o4�-���2yV��0���~���o4���}6�{4���?��~�
���"~��:��8
��ܛ$�_���,�`x
pz��&C���k��*��2�����h�K�
����q�x��i�F��A�8E�8A�8��{?��'��i��~��y�X
ԟ�t��N�-�8xl������w�R:3�v�N����k��8Z���~
��^�i@�Gu>G�|Fw�UV�3�]����6�KD��_P�Lpo����Fp�*%���U~/N��
�)ڇ��GN���vSO����8��j�Q��v��85�mjd+~<L<��P6�A<�AT��N�ye�s
|
�+�E�ďX�`��8�M���Pei ����ZN˨�n
v���6�vh=5��Y�k��^�t�7V��VRy��0B���ږ�;
�K�[���Z�n��v���X0c�K{N9�.�v9+
b;B+m�v
vgSݴ�~�߁�T�Z�ڄWߣz�O弩��x@������j�X��l�f���a3�.|6@���b��rl5��]��m�*fc��J
�x�K��H��n2;���6�� s������tr��1��#�<*��]'�`;
db?�J,�~9���c�{���_Og���hgUmD����B�g��&�O���o��<O�2� :�w�E'�� '
�,8��(��� 
lF��v5�U�h7��2W�
-������t�0�P���q�5��;�@�H�1�q�(�N�{����Q@��S	�t��Ox��ZV1�j���TW��S��UE���_�m�^\[�Ɯ�$
-
�z�l��u��
�5�O}�
�8��!
d��
W!\��T���Fl��U"[�y�O���d��n�8����(G�F�>Ɵ9�D��!�Mǧ�)���;Lr+���j�OU�,U���*���.V_���ZUb�R�mP���*��Q��!�y7^��'�q~��&
��������>�@
��^�gU��cS�;Y))*wzT�0Tj���b{��
�*tT�(�Ѭ<g�r���q+˹Z����xJ~�!���ȗ|
�qm��2�˻�[�
�U�2�O%�${
*v�T����S�+Ky�<Mu�(�]�
wX��&ez:���W�gX>�j�-J���sH
�O�U�/�Zl���(����
"�Tr�
��O��%*�HV^�SSS����I�++5W����0*�7B�MJ3:e�K�1V�ml��xRS���4N�a\�ɑJ���b��1ǐ'� �A9�J@!���%7=A9�$e����(����ϗ���P&#}�����cr����?��8ʫ
-�o6��$�,��fw��I6�l~vIHBH�&@�J$
-�$�AkJJ�J��RZ�j���X��ZdZQ���t:0�V

�v�ږa�V;������0/��۽�=��s�}�o�
-|��ӷCy�d�}K���e+��
�{�y�3�����݌�s�lP⼫����`�M�2�|ey��*����
(!�Uh�+ت�`���>9�ò7��RN-�F
 �����6`|K�Zi�
-�����|A|�l�r�
:�)w�
r�(4K�P�
-�Q~�R�pB�p���N�ˆ�
/B׏܆hD��Ѳ!|���PN�c%|�a�#h�p���JF�0ߕ�K�<G�r�����rG�*��TP�V
���+�*��X
瓀�-� �c

-�-�[�� �1��!ʜ�ޅ���J� �x��]��%�oʀ�gO�&w�]E�<T�/��Ɠ-�Z�MT��D+`�J00%F �Q������(b
��'�h
|},늑���]�/���?���<�w�}Qܦ�Z�
u4�zX�;{�S$6ł:>ż�bxLq㤸S���n~ǐ�� Ѐ
(������%�������
�]%\a8��g��|�JH�l��H�Oq�4d�i

��X��6�5������|Ն�oexhE��0W�!��Д� ./�n{
y೎����Y|<���
�
��sc�Zl�ŏv��0�
��:r�� ��E�E��0��&���u���٦�0k�@3�������nI�k�%���e���
o!�y��a|��Hs�v��B�������!'K�A#KY�d>`�]�*Y� �� Ճr\t�u��L-�1G��l��k�� �Kx_
o��8I/9kA��!�h.\���c������ <�FV�x%�X�P�b����1����4"�sq}F
(�vx��g�U����m��xm�7�%��g�#rVZ���5�d
�c?��%DN�)�q63���c=
-qŴ���yּ#
3��6\��/5��������Q��
������%��,�iD e�	��$~l�6���[)��l&`�,�4�o�!��$>��2ꄯ����MS���~��w9Xeqrđ���&�f�������Nj�n��
�q/���X�6�,���a���o���������=puV?�&�k���y��G�C&g�
���3�d��L(9!�Qj� g�����ky?ۇ�G>-}����)��w�žk)�
-��!��#������6ko,c\Ɋ���A�(���f��C�~
��
�y�Cv��
&��ړ��{OK߹�F�*J������y�W��=烀%���
��qe�#3�p�H���\�΀���j�<9y��{�@�&�/|N:��gT
��"b�c�|'�k���u��4���
J��g-�_�-�_�_�߃?���[�m��rr��z��{ҿ��r��
GQ
-�-�@�t���%��"}�v�̨N�|S�
t�LF�8$P��3�\�P�E��M /3y^b}���"��3ɹ�#LV��9�����2l+C
-3l3�ԑ���)e�X��%�x?��<�>j�*��
-
-�-t��L4���&��qX�sh^�x_�xO�Nj�qJ�tR{�
L�(�������P��&˽�v�+p^�Z!��3��N�e�8�
q�Y�
�������S�q��u���
��s�a��(�C��2������M�~�]��
-�{mf�{�L��m�5��:'�`6�?�)�
=�|w��|_APŎ��L�籟.���L��i$_�y=B�z?
"
�k��z��DZ}���p_!B<DK�M`�2:~b��9^_�����#n����r�GL_�����Y��^.�=4����.r��ى;��v��
o'3��x��ll�y���`<g�����u͑�v�
*�49���9�T�
?n#/[��ne���
t����Lh�l�
-
�F����n$'�Dh�
�R-며���U`
���V�f�&�&L{����s(!lǰ]��v[a�`���^L��S
��7
-�U;M�ܧ�,����~x?
�,<f�ﲸ�U`�s%�v��X
S����jjcX~l��?�����m�nQ����p������J���U���=ŵ�[�}m�t��ڿ�
-6Z��0�jT�ql�A!vݠ�g?�#�����o�^vP�}Tʠ��N��AV�QQ��f�^�\N�\��Z]g���u�JËꘑ*F:t��J�3Қ�p�c?���R�l�B��M���fb���fsR0���$�<�7Af�����5��e%�"���H'#ݸ�� �(�'O�jl�c�I�xӀ��D���&�l-Y�����8K5��t�8��&\+7����c��H���T�û�H�>%��}'�]�
J�)��
�(<5�k�n
����t���b��#BŅ9!:N���w����p����CȎn��$���|_�)n�S�V��"xf���O�*x�l�y��x��H�%k7�
x�x�S�spd�;�I쯇o9r��8+�[@
-ԁ8�c�ҕ�h�C��|E�\
-;��{��Tn���������6�ٻ���4wX�܍*ɝ���yyr
��g�E�o����/��(�3�?�d�o�%3���$$`BH@���
��U��d���(Q�"��EED
-TP�M(�Ȗ��-��Z�"��"K��w�;=����
�4�s3_���s��g�}���ߖ6�(M@�rA�k&�Ь��%�vJ��^	;��
K���g�M@��	ú�Z|�
�u�9I<�9�v,�}��l�+팸�	O8:�C�_
�mk��<�b���$�J��.!�)A�-A�&�.~OHtO���H�ZsѴ��Ѫŭ�$N�V
��i�%M["V��x��sR��ܢ�x:�{u�>4� �gq�YBz�t��}N�}.ѽ
�z���D�Eģg�q�%��+ġ��~���Ţ��N��y}d8/a�Kb�rg��
�*bNE�} 
-A
�3A
���"�M�~��K��[4�[<~M�����
���[���[�%�V�A�[���r�Nj�?�����]༆��e�y |�1�G@(h�`�*��]�S�@�K�!M��>���b
G��s��)4
N��_�(|  �SC���,u%�7

�$��ђ4���ų
��`�6уv�-dw�C�a�آ
�ļb�1a1������1NS�aȤϋ� ��8!5F � -E�Sw'�:�{U�!�<�\>�y���0
���?�*>���⎤�3�&��C̙
"�,�\&57��K?�GӚ�
-�4J�C96g! -dSCI23!�rm�3��A��{�Z"���% �I�
��cfqdZ$-�*�
�<�|6xcw!^"�0�Å�("�q��k�N�Ƥ��5�!96"M�%�3��
C�s��o��#�:���2���������4�s�4�/���
�%���RLZ�Jk���M[����f���
-�ESjh���rٓ���\�gRG���������B
�%�xP�EWjI],-��V�I^T0�
��G����FZќ^IRkA#VN�,c.�'�Z�ϕ���W�:���g/�\��h��L1�$�i�RU�kku�RG[�bNڱ���E��AΚh˺���ن�TI�n}Rɻ�@S��3$�(����
�4�[f\��"��	h	/\4����D
�SGw��Ά�݊��+yލC�F�3��gD�v6gT��T� ��a[>u��
���������4UF��h���F��4�B@?�h�I|
b�aX_���Mb���H��������t��%�0>���B���S�
�.���z$�f*|ըj�@8�:F�F�0'�YP�y�H�`�pΪ����4���M
LH9:K��F�f���������� ��T{|���j��H���h#O S�4pu�d��d��������q'�q�m*i~R����R��B�7��
೛%l�jۛ
�Z�o�����Iq�@>CRM�}�jP�~D&�%�x������8�(���D�笚�|�9*Ŭ��v��h֘Ws/�w��QqN2��,����AI5F���(�SB�)RV�$��M����׍l�ux��U�y���d�.�/���(ǘn+��Д�<�np�5�K:ٔ� +�s�jU���dӨ��ݒjb��+�1'X�o#�M�����c[�:���>�ЬB�݆��j>��׍l[
�����{
T��3�8؂r�99��<��c��Bv�OU����d���
N�[����`(
���Y9�y�
-6izEq���e-Z^Yq�խ�暶U��_WݱS��v���7��٫w����8�v�C�
1r��1�7~¤�Sn�c�o��5�{gκo��s~?��.x�?.|��EO<�䩥˖�xz�3ϮZ��
k^Z�~�Ɨ7�y��m�n߱s�������[{���o����{�>��O���g���𑯎~����}���Ϝ=�ϟ.\J���������J�]I��YW��Q��dg+��/R�K��r��R�+��k��A��ݔ7)
nƃe�-ʅ��p��a�2b"NLUV܉w+3~�ܘ�
P~<�
y
G+K��<��+/b�:��&e�+8�f���M�y[�sP��>�|�
�
��T}�<:�I?(��)�.^J�
>�\ͻ%�~����_�_b2���lv�����ǣa�O���
�G8�#1<�\�|��LҚ�7?3'�
�t뮶;�f���[��m��q&O�6}ƽ�fϝ7��
[�x��e+��.j��[�ȤƟILiL�T*��N���h��j�~��o����'�G�~8��3gϞ;w
�?]�p�����ƶ��e����hbm���֮-;zW_�5����a��
3�Ж�����j�꩛����sӲ��Z�d���O���G.
54��PCC

54��PCC
�w
+����u
%^��]��/��9���	_ԏ�����-~k���w���e�
����ܝ�V�����O��Ѣ'�~�H�PG
�VF��ծ�=��Ͽ1���}C&|�w�w��>����/n{y�
/Mٵz�
o.���Ѳ{�_�d�'��װ�6R�k]�/�޳�̾�����{t�t� p|g��v�zf��fg�i;f��i�����N���д2/A� oF)�TLP.�� �
E�["-�����)'-�߶g�/������y�ޘᎀ�N"_�
-)�U�k�a�"a�>W�~�ՓĢ��
�?J!���&�v�e��zz���c��-̣>�$CkS�F��kCe\	��)�j3J�-)|��ʉ鱶
d(;���nZ���s�����>w�'C71}f�Dm<W�,�Q��d�uY�կ���b
�Oi�6 �
|� :���n\h���[��S��<Fǯ���%��wE:��!D|�%K���Xu���#	���?�װ
-�����}��~ϴ��v|�ʵ����M��4Yg`&_�`3�Ȓ;
-TEr-ZF�b��J�_
��6P���@ ��]T�n�m��=1�l3<q�Z��'J��7V�
�`��tH.]�*��G�S�¤�j|
VJ�[(�
�{V��5o�'���92z��ᴫ{˔�z؇"�
�����ȂD
��A��ز�z|9ZN��6P
-J!C��ճ�'׏���:ڴ�^tSM_C�Ƽ������
Dz�1$���$7��M��0-���,�6P���XP
�j���w摳�Z_8�l|�rE:��Nxc�����~T*�� v�2pFB6����Ŵ6 ޲
�v�eF`����5m�gw��8�Ȁ�Œ9�[y�ވ���X��DBGG<����3))���若[�زl^��ў=��Ǐ�SϞ�)v�����{7w�o��8�2�
-���bpO�8�">����X4	>J��6 ���3��O;F�.��
�^�h���
���W��}�F�]�υ�
-{��E����"�f(��/c�`�4���Ѭ����7�h�^!}w�>8�5��K�h�ʙH��AΡ �5�.-F\
|�{Gq�{���im=�/���Z��t��Up��
pdK*8�+��#�K����D0��
-�3� {���� ��7���1�7���@���A�����o���Pa��.
57�d0�~D�K2qH9�y���BCO�mHLU��1tՔl���2�"8���dX2,�
K�%��e(�
%6@d�u=
-�ם�����j����^A���\�ˎ�*����$�,!��2.�K
���Gv[��=����ZP
-$�A�=]����+�#��zw�^
�X�aF�*�b��Z*SR�D	�&^\��
��4��h`C�͏@v~'��x�<\�վ���A�G��i]8�^@(W�I��<�}I�X�A�-ed�YÍ�DV���a(�
e������
��Z�g:8�QCHz�,��I^���P�Q�%�x��I�-��0�2����,탡 2Ad��
j����k.s�[�g-���H�Q���$Xi}y�J&��E|���N�e2��
�@ZF��� ����O�
�A�F�#
zw��/؄9Ќ��ވ��0RYe�J($�9J;�C��`�M􂜇����}0� ��P��/69������&�I��l���됼:y���*LYT~?W at l�ͥt%��SY��Bf���a�C�*�Pn�;�ӑ��W�_�ހ��}��]���M��*��'�(�b��N)�%�O2�qbzȅ)}���^K���g
X
$'��mo
N�_u_q�
�

y�[�r=�P�"fU��dV���p
���=!�:qܴ.K�``�ZJ ������s�^�9
z�����5��-���&i	*ઑ�9u(I�#O���bD
QHnƖP
��VKE��2�j���Vwn���
'�\
G&���Ǽ����Բ֠�m0�NJ�\���ɰu�U���H
Z
�
%4Y�@�"� ��5P
��o�g�1i�p`䉳���ߦq/�����g����(M�Eɱ��Z�,��T"�V $�K�M� 2T��jA}��)���Ï
���9;g/�(��Ė>������Ȝ�f+Z��5�b�� 
m ����@9��� 2v~	j����l��̆�q���'G��%���7B�#~�̇��ސ��t&�
�n�磛#X���B�.�
��x��ю?�S�]1a<�u��톖)����/�W/�z�fn��N�cSG��q�(j�9,	ߏO
�%���Ɍ����j��1!��@��πt�/��,7�]i��u�䁇a\ŎU�q\�3:Z��:.g�
-8g��:
-ElA��,DBHHB�@¾�- 	�@�%1,	{ 	�E���"
-ZD���|���>^�‹��w���>��L�p�P
8:H��"���O�l at H�4�@D E> E�ߧ���h
�x
3�{
=�p��~�@��bI��b����)���y���`o%��6������5~)�
-}
�Oz
t�Gr(�
�y�������_
x�	�{�L|�@�m�T������+5s7*��N�
ȁ3GR�]
x��څ���)�
�|9x��^d\	\dy��b��.pP��d��m�k����k���m_� ��"8��'�q��*�����)�c {&��B��?P�|��5
-b�} ���\����hX�L3���5��j1|����%��/h`�?
�b��!4�
��У( 
���^@9�	�S��a��6������
���r��
��%'����P�b
5��A
�(�=�)|F����I�S|F�!�'����AcI�n#V���4j�Bkn



�{C.b�E
����aԞ���=�����a�g*"��t�
V�P*GhHL���f)��sU�Q�͚H��%����P�Y����~5�[y�6���V�!�zgkhpw��K

-L�y}\DM�3
�3�]W�����dk�i�jJ���$��#d=U$y��A�����
-�7B��-P����%P��_6�`
ׅ3�$����}N��+5A�IL�6�2�U�<C��TE.3�Q*{�Y���3�7 at 9b���*���� �>���`�#%�yWF�SE�
E[V\Ks2�[��nh`�Ա�Cb�x��.�
蕽�|Đ�
-Cű-����N�����V��>ߊ�=j���Vy&	����ޠ�e����=�����<S%�tX+�gJ�y�R���3!鱿A
bhv������W<���Z,�2<�_
)�*��4��6%��S�K3J2x&a�`8?A8�ͮ��bK
��� �� ���
1�8ZA�E�7]^
s�������̈́<c]DU���T�1��v�$?�P��
�g�G�S��Ӹ�i\���~1 �b�?Cbh��
4�Vo;/�/�<=��������h����JMm��^��V
-�z�E\� ����N�^禗p�$Fs���
%�A���A�h�SϷ�
zO��}�
��G���-��rc���)���.&xũ��œ�B��W>�ή0�ۯ��k@��G�
-*���h�����\���̰O����^LA�� m��(U�4�2fw���O'p���xa�0��|�YPa47(�t%��1� ��Ο;�
\0^��
vw���
vgԟ�g
�oB����� l�����;�e�^��cdUd���
���~�Pb07(��Pf�
G?���^��;87�rz����ĸ~�_|�)8Wх�����5�S����S���r�I���Td������C!b�@
��As�/��<�q�v����q���XMCA�R
F���ӯT�bkt-�#���sU���V%�U�}8Y���@������@yd���;f���ј���/�
Oy`��Q\Gg��Cٝ8	��P�&*)��&b�W�l
�M�@�fv��
#b�\MG6��l�O���?����w3.�}��CU(��&:����҇+au*�mDYD+�6��Z�Q�(��������~ʌ&s��P��cP|��M��
3�[�ǿ�3������E͋KA�IT�`

�9�IK0�s�
��^R��
��E��`J��2_m�
�M�67n����Ձ�/t�]w����I�}�Y�S����Խt�N��xh*w
ǼIH��
�N
�d�
�r0�� #��oH,B�S�}���ĈA���7��ar�����>�=s�߼t�D�[g���n�y�QA��A�$�L�N�'3	c�8�
FB�m}����.)u#=�g4��b�4~n�o�����U��c[������Q8�� ܾMYBy�͇�f�BHOI8�t�8�:K
-���
|�H�{�
��Ƞ�Ld�
T�}ū���o�ݸ\7�gMӫ�[e`��
��G�p=���ϡn��O�"��@E�d���Y�s�@�\4�yj��lf��lV����/�o��.�=ٴB�j�:
�*����n��%}�
���l��Nmg[������S�e���JK��n�/T^�����P@QQQ@@PA/]�,�Yi��n��m����������������y�Rؽ�
-��e��[
-���C�>
�yE@��)H;����a���#�s���sE�fK��ϖ��?��,���?_�V3|�~l����EfA��x8䌃���X�H��?B�� ���r��
_(�{
J��h3[��^^0_�S
�3`��
p^A�����kO����� �o� �t�7�$磐����dm���Ð��А
-P�+����6/�
-�f��^

G�p��1~��)��$�T1�|�RB���.���玦�T�M��
I����千�����.Yo�A��7�7�7��SC�kCɦ��C
��?��#4
w��PO���?�N���fo0��qZ�bNY��Ln���~(�VbOKm�k�Ze�u��8�M�B
̵����Օ�?��?��#Ȏ��,�kN�D�s�:#�:'�>V\�9Oe�
���t�̚R�2'��L�掞8�N��h�mנ镡1�!?mb#�~GP
qEfV

�	7UO$��K.�R+��
�\f�9�\cL��u%�u��M�Xy�
ߪoNhkG�W���F
5�A�k(�9���ԁ������Z��$)9��3�Ε���4��R���f�i��Nb]�6��*M�Z�I�nAӉ�W�2���v	�-�&Ġڷ
���6 �[�ɐiuL�
Ye�>�3��YK����@e����6r�U���/"4�
S�jb�
M�C
b�"5b�@
�����Ї�IUB�EI*w�:S�W���.+Է�[i�>9E�ߔ+�U�K�r7Se@p^*6���A��3�x��!�Y��!,�!*y�-�vAN��E�M&A���Cӫ�
���c��uԆnv��C���$e�^X_/.bm[rĠ������yb

�g� \����)�ƴ&}
I��Q�RV�������m��z;��hg���y�n4�6,
bhغ
;WB;b�>���t��
v�/��KWt�:A`jNm��g��\}CE���Ŵ�6N��Π7Ҥ}�4E��
1�1��1t"���/,�1��Aa��O�\4Fٴ�C
A���J�d��2�ȫ(��8
�Um�3��R
�HaD���� ذ$[��n+A�����?�
��
-
��cSΙ#
ͺ��vU�D֜�Zא��
)F�������/�
-(�F;�Lj!����
-14!��
-�r�f���ס�^w�������
Y���]1|�6�Q�HUU5gv�Ź=�uts��ԚSͳe׈2xRKFE�MP�8��1H�| Z�Og��k��1�
���5�zq4�`��.����dz�X�FPV(3�Kd��&Z/��a�s��b��P+�K�V���P��B���
�CǎOf�{�~4�������]=|�RP���IZ�-��`��
I-����|M�����)�z�圾�Ђ���x��M�E
�������os�
?�߻���Io���cA�����?c)ґ��]�쉗RtI��ZbA�e��򺣕E�HE�)B)2��*�����A��W�8/�1�����/o\��
#�=�s# �ǒ�F#�l{t%�/N�Փ %�	ʸ�tM���~����a�B4|}���M�G
�5
��qtl^��������4��4r�a������8���((>��
���'	�)
1�tIDIz��*5+�
��@}������;�X�p�gӻ�G\�^��k��m'�#����!_ٴ_D�TXr��R,-s4�A8K`��qq�Y��9UX[~M���6�®���QU�A��۠]��t�w
�\����ԮU�G��g<��<?x���_(�>6�`**9{".#u<��p�H��,���\x��;Jg��g�������h���j��_9L��q���4�ku�˽N�s�w��y(��ϗ��dyI���K���;�N��$�'s�OM�g�]/�
-��$^���y9h�:�жr�����L~�`�v�@���
	��( W6x���ϛ<{�q&: �YBH�Tl��������)�؇������Kc�����ǣ	����ڻt��K�_gaM�YǙ�q�ZG�u��ֺUjQ���V�n�����,�!�
�Bd!
K �,d�D��PZ��q�:Z�Z��g~�y�:��E/�����7\�ߙ���}E;�Y+ /W
��
-��C�A"��f�?�O� /8�עг�����V�:�sMx�
#��L]d�ƨ��ӯӌy����.��Z����rp_��O�F�����6
ߙ
a����^��
�c��P4�
���#�@94�p`���X(�^��<��|ͳ��º�<ض�
�J�smxoƒ�k��B��i�팄�Á���}��C��3Ȟ�P�'�{���$���N}�s]�����
-����݅T��f���
�V���;�pd}l
������I�m
�t����?�n;$T�Ǡ�C? ��E}����e� {,��k
�|7�(���^������^���B�|X�λ_�+�'QTy��Zs'��1��]�%��~"��0�����]�_��,p��
��/
��P�X���� � �/��O '7�'fi�w�Ԭ�u�Ӆܲ)���5��6����2]ɞH�iO���Jq>�
7
'8��́j�');�m{��k���&h
�ho'��'D�X_���A!NW1K�)��L��Y���[�Ff��Z��y
on��: L
��㆚�
��P�
5ۗ@��+ at t� =�	�
 �򆶤�YIV�S~AƷ��ST*e�\W;^��^'��c���F�:�/����n΢���w���t����@s[\d� ���FP�� E�t$�H3�>�eOs�J�0)�/(��k�
�h�@>�Ӭ
�n�
f��v��hN1�{�����vg�o�'���h9��_

��
��>�u6�EgZ�cin�=aq�W�u7h4�(�N~	=�"���l'h0SF�I7��21MG�M�l/
4d`��B�
mȠ8�4'<@s�gV
��;5�Q�9�Ts�
ny�����*�r��Q�(����FR�iھ�,
&#�{Zs�Jg�K�|�ݶ�� ۷��6@����|ftgB��&'=Te���H�[��H}�����U��{˚���6���˪���Zs�}�I/��S9�K
�� ��'h߷
-T7�����P���1!O
I��=��;s�c��Pc��ƪQ���m%�WY.��(�I���M���7����ـ������� A�d�
|L��g����GX"nJ�Vx�+�9�J�%rS}�Z�d5
LV%��TH��d���Hm�/6��%���^��A�fdP�]	=��{�}���-*�[[|�
SJј*�9(#6a�"��[�R��)����|����Υt9Xe*�\of�{{���8
�o@��eЅ
��փ�o�s{����Ȑ選�	
WtE�����i2�ȕMe*ic�A�fa<&�ZO��ki
*��QC���P�:g�Zd`"�<�A72�����`���/F�L]8�|ÖT4dHc`JB�FF��%%*��R�md`l�ʨ�k��JF��L�a4����g�!���MP��
�}ޝ��n���I�#���\�I��H(t�S�M�@� �Z�E�<	Y_'����lkW�On�:JT��
KI�I�lP�
,d�.92h��0�u/}ݾ
�t�ZX���i�������ڐ���s�M�J��LGk�6WJX}�"��P�b���y�

�Ѥw6�[�� ܺ:����y{�����G�=�~b��xH��kQI��q�F�ډ�s�B+GC�+K��U�b9#���2�� Sڲ�uAd�;������ ޺�ܗ�����<r�uz�������D��X��bbu��ȳd53MĎJ}��X[��S�L�P�-i�.
^�7���:g�zd�C����z��_-��?
�Zs���-w��yޘ
-
�0
o�C츚P%��R_;�!���Ȋ�]D
Y��K���lC��ɔh����$-�q6ଜ���@�e>�/zn߽����ʯ'm�y����t����Sq��ф������̚�t^����s��4{�g%w��Q5g,lm�E����ڬJg�d୛
����m������
?����g��z�������݋N��P��*��|3�I;��
!	R��ʼnC䖸
5m��ke��y����_goM�i
�#֊NǺ_��ъ�b�Z�Ԋ"�(�	D�	K�!
ـ� !!�@BB� 	���"ua��(nXQ���HU��^���h�?������ܿʪ�
�@������-g���{��~��o�٦�w7�i��aݯ�'�^�	E�Q��G����	���T
�Y���̂ȟ�Ea|1��Hx]&�����]�-E�"͚�`^?�e��ܡ�����aWtL
�m�qu�~���)~�?�;I �_�)�O�Ԅ��i�_hY�=�A.3���+�ݑq�+r�nW���-�n����/��^2���禰� [...]
-z*��)S��hS��es��
s��
-�����)[+�,vU%8Z��y�p�s�� 
�T z��;v6ُ�.3 �-#0l�
�&��.	���.

x�
���D�
���ꞏ�|c��es`�"5�^Y{�����JO�D�'"�E�5
2p!�8��� �;B� 
���q(���7�n���\���v{>F+,U�y�v.��5�ก
-.�I�-
-v�A��@��Dl ��
������8p
}!���������:
�.uXb��,15���(`ռb�Yȅ�K2��U�w
�ׇ���	���_ �yC�7^���R����
@�qX;� o�;�w
��]8�|�6s�\��F����V[�a��4��,�/� ��A��qp[��k=��;�\��ȯ� f�+�7�@��!H��26:C6�� pm� �m��l
��O �+8{��q�\ׁ��D!�P at r��ԣ�a��g
-B�dI�R��&�ԉ�q���MYϢ�hc�.Ɠ�ޜG��{a�87Ns���o��5d�X�݋�`�J#�o;���A�
��c�c�x�⇿��L��N�HV�<O��xF����62G��F���_��#��yCaC���[yh�����}!��D?�١u ���� ��(�� ���K�d&�̒�=KU�
'U�
Qjx#$�~�Yx/����h0�_|%|@t)� M�F
Ld�0�-�/$�m/��ߠ��	,�#]@��N����4��<����r�Uſ�P]8Ln�"�e�1]�}�}}���I;�"41� �7VP��
���@
�v���2���~o�i�E9�����ќ"΃,�`8U)
J�*�A�W
�Z��1]���
U]�K���WN�c�K�����j"�p��k����~X�
u{_��F�L�UB��	s#��0]"
L//�j��(��+$��7���
�S�ӭm"]V�Weh.�/X�m�kg❟A�/*����vPs
 [...]
g�
F3�Lc
�L�.�S�I�TS���<��F
|d�Hw�*��@��4 �7v���l�

�%�=T'�eY«�,��<���%�n���5g�
��ڦ���fmR[��z�A�ҭ-K�U��A�i�"��2�=��n�gM^�iS n�)<�q},��&�q�,]xQ̐ux*3�@gd����
-cuvu�&�ѤHom9�v�(�8_-ͼ�B�"ΆyP�����a)�!�f���Z=
��p㭡��є:
-�2E�)˖���*�����kX�F%��Tƨo�����3M"ZWM�M���,�����S(C
U�K������i����s�����໦���z2���*h�gʌ���0O��֗��e�
-��]k�[�F[� ���TN�M��A��Ag�����6W�鮣�//
w��
�ER�
$zGu��Y�.�-��*�\]Y���D i,�W��y:3?����i5�
z
�[�&����1T oe���м���g]l^u����m�;8h�=���Co��?�P�"ՖgW����K$��BQq#�Pn�	�f�����[����
~�Mx�Ab3Ԉ�n�����m�����#�Ǯ����

��F�4i�
-_���(�J���'�u���q<,2��Z�VP�\Q�JUd�}�=�5@ !a	;�D�HD���Ȏ������
V�X�� Et�>󞞹'�s1����{�����.b�X�ܛ�|�mz^y3-��9���D�^鮒d 
L���4T ���~����m��8d{�嘳�����@�_h[;�V'�(�����PJ�I��ki�)%�F��'�\��WT��on��u���wWI���e����U'���z���+�fjo�l���
/���c�}I�����6K ���m�+Ψ�U\�f\�V�����nF����e�o����ÅwE��*I���> ���fh:��֥��ݰ��˧֚�.����n�&���(���������袔[������1��Z�(�>D$h
��$���k��+{*%��KGu������S[��o�{d�<5mq|셽q�������j�?�?�gpzB9��(
��R
�F/oeV[�׃����Z�E�-M���]5���rI@�.i��'
�7��crk]:�_��Sz��p�؜�����q봋s��d
�

����2h�D��
���Ӌ�����>n�_��ҧ��ʫW\���[��1(�\Ax*�P�&
��e��~�Qa�ў���w��5�rr,��`
����)||�dh2e"� [...]
�֭]�,[����y���
-�)u�߃����
�'/RBHo�ƒ�H��g�����y��Q0��	��
-��L=��E�D��]
-D�I��(�
>݂�]�+��Q�[�W���_M��[�f��1��-���c�C\ÿDa��)��5:6`5��������\��,��+���E$�Eq�$���r�V���7�z߂jZ�'W
�ۄpN%�4X`�E�3@D�߅P Y �&(�����
�N��v��
�/���W�m�����
��FI,�ˣF���9"�/*J��~����
�?���*\8

�'C��|�� X
d}�5��1RL܁i��
��k�|s'Z8B����$1�"��۳	u�
��od����8��:;��r8�
 ���8
�����DC��+D�8C��N@;�)�/S�
�~����l��
�ZC�D�ݑA5�"�*{&#U�d8p@>�3Nl
�]80��
�{�`����
��
��m��a
�CVs��X@�s`
5�Qd�
3��c&�?.��n)T�C*בֿ��$��\�)��/�]���
N`��,w[���V6/S�W1���F@�g��
 JU�T�C��
����4��$��"1�� Bg
$�*A��H�P�
'
`�jAj�9H�7Z�
$d;A,
Q�^��j�C�>�Ak�6�*���8��$l�(|�g�<�59��jC�o�_j at nE��
Dio�K�� ���0W�,
`{k���X3�_�*��y���B��J�Z���J�EZ	n
���$/F.�D��>���y
;�5?�5�H�oC�IH>�,�
�1S��d{jC�<��, 5���uj
�S� h5�<��:y)�!j���@�Ky4@��ݿ4��$i�g�>�3M��M�$"
q������:��y�;�*C���a���Ӈ,���.1ҽ?'q��L�.�\�|Q�&����$NzE�s�eP�
�O����N��M%��O_�P��@<Ґ�� ��ֻ��<e��h@!Z��
�jY�u&�o5�C\�D.�S^GU$ͅ�`̐n1���������p��=����p��
�S�����4\:� ���9�
x�� �V��a
��d���Yˤ~Hg�/$���'�g�K�'�d=
i�N��%

���t=�n�?e5&S74�!i��
�HC
�������J
�9�@��ї����^�\Z�;=z���4C�1���O#�
-
��
FI�%��>aOЀ�~��9x,�&i<��4��А͛�l��G6�8<d��2K��^�QM�k �CE�u�:N�U�b�{ӪnE�D at .K��� !lH0B�L�ɞ
A�a����V��b9�*x�Z�����{��������s���?Ua^��W�^�S/OU�&=/����ԇDs(KPٗ.w����F�%���vB��1���.i�o�
3�)��� 	i�C�[���s1����ZО�̞��7�̯����Œ��L"i��J�'3؝�\A{�D�JP�[𵪦�uC�Uc�u)t��"��V�����o���Y
dϒ
\��k�p�����yW��icvR�5.M�ss
-�d��V¾[�6�
���ʺL��:�֐a�)�V���+�f�ę�L{�j�GJ6;o�
T
X
-ڣ����ƹ��o.yM�G`��bF)���B+�Do�S9&j����+3%*M�F�̹��g��E�� �[���W�>`��H�7K� ��
-�A��Nm��ta�Ls��)
���J�M���
-����
-
-���.�QY2%Y��")u"b����b����]
-q@�$�8�@��50���E�ڿ�����p�����������0̿b�����v9��Y�C���u�7D��r��V��,��8d��I6����Rr���<ĵ�H	i(ߴ ����׵G>��trÛV�
/,أO[C0L��]5���SI
��=��V��
E�
���fKt
��XBk����US�
j�OL�~Wi�_
����	鶅���	�^9k>���=�퓝�#�ۃ�͑Q��q�Mz
�ZA(VI�Xb>Y���ʙ,uIr-
��Rz����V]@�j
-齒B� �
� 
dW'`#g!��
ƽ���ß�o=��Uǹ���C;�|{Z#"[o]M��I��j��RE6�')�
oTWV�(
���V�X5�
֝�
�U�[�+�+����h(��\�A��j��|l>��m��/^�����7��K>���fs,�ؐ�'�N��YJdXʮK��2_��f	dz��h�
�F<ߪ!�z��A�=P�4��;A%r�@��Esw�]���k��ЙM?
_p��8�#,��-:Ym��+j�QY��ņ<
YK���
G�*�h�ez}��I�$�jp�^i�x�o\GJ�9���t[�i��v�O��=W�{����y��{7����Q�UmqY��d
-݄/�4�s�
-��b)��R$Ī8�V}�pKs�ة����U��� u_8�t�#Tov��������4�t���_�����6�=s�
�ꋈ�w]�`X
��Ҋs�dU������4a|S�$�$�E���#L���M����aT��
�!
LdN)�σ�M�~k�������c��K�_o}vvo�8�~,�x8<�⻘4j��������̒�by��Ɖ�_Qy�"�Z4���`k�0�m�z{�i��4����hހ������&ǁ���qܵy����	����9O�"n|�@
�F ���'gR�> ݈����6fY�M\d�2m&V�p73pp�,�g�n�W�A����8���vx2�
5���������c�/O�O����p�>D�962{"1>m"
��S^��gEYQ���ϸĐ�҂����z���6
-v|��y�l��@�j��G�r��
j`b�C����o�+
o=]�ޜ�����������3a�93W�g�C��3"㧉1��Ը��k�xI!/���)uJ�Tm��
s�E7
��C����j?E�X�z���f��?l^��s_)�����;��x����ً
ٳa'�f��K�����f`cf����K��ʂCgy!�$a�~W��������}g��{�e(]P�������;#
Q7��l����a��
-8��
-�����`�� ��x����d�( ��
y�B�r&�g���
����p�>����;~�`���}
���j�uB���R�*G!lu)���)�6<ק�i�x��
A;/CԞPH�
i� �=H����1�=�
bPz\ �Qoh�<-^���(��e��CUM-t��Z':�-"��%�,���X8�.
λ��� ی��-~����^��m灴�
\�qJw�֮� �ud�O�~�q���|�2�P�G(
��a�c>lpN��������j2[�Ke��8v
GEłH


"
��
BH)$$��{$!�H�*(( �X����.l�"(�3���{��9W�?p.���Y{�o���fF���0��
��� dI 
_���} ��R����b/�Wx"x�W���]�^�
�<�������|�s�8ųq��0}<
�N��b�8��!��
���cV x}�
s���<O86o7���	(G�s��
���
�
]��p0n�".��K'@22'0.@t��gC���:���u��m�t�vHzI��π/9ت#��;
-��
���!�:��	��.��񑈾�7შ���Q���l���uXk��@q������ 8���
�
2�.��y ���?M� ���*� {&0
a���5�5�sL�CTW�H䓘�����㞇
������R�L 
��� ��S��18�
@p�	����I�
-,�.`f�@�� ��h
����1\M�פ���ċ�_�ſ�mC�Dwaޠz����{�q"�&ޏF���
qH�� �-S��c�9����C�A�
8�=�����0�냁��obI�������u�1M��諸��6›�.b?�)�'��|?�UjG���o�� ��	���
�?N���S��}H�
A��	��� �uA�^�0�Kpt���Jˋ�B.B$T`��Τ���HN���&��6s�ރz��:��hG
��F�&\���ȈqHC�Y6қ"�� �tu�h�6�2�
���@@�e��	�̒G}��ߥ�G���?�մ7���W�-�����1��ۨǼ�Q����}���W䋱�D[��a�=����<�S@�6�{��9�n ]���
-����|����W�(�m���j��$2_�+�ϒj�=�
��7ewb�ʯ�t�[bs��{3��i��l�E q`��B����3@�{
��C�ag0���I�y�&K��<^R���K�e<"�ywqE�Τ*y{b��V�e�u�mus�]E���.�Iv
�9�Tҋt[@�@\m�5�@��;� �g�5,���z�y� ��C^��p..蕒�\�Jy�%`ܡ+8�
э�|�U|��%���ۤ����;��Ԟ�ޓU&?��zY'qϙ���@Zel�yeH��N�ι`�^:V|`������~�yI�ϴ��n)����0o�$��t��9ͤh$j�	�������)Wr+q�e)]�bB�Țړ]��˲P2��AzS�� ��
-<�@�%�e�׽+r*��볢C
R�
*�U��q�+���RH��s�����*riN9��$��XD�e��:5�}���k��m4d�O[i��A��K�F��
J���y�Hu��������6���(���̌�WˑJ�XUä+N/2X��L���<3�f��ڡϡݕ�h��Z��-�9А�"Z���y
-��=V��CM�����]�j�|��bCڬ؄#�ب�3kel^�P$-�*U֬\�9�j40���sf-�E�h�U1��
-�����g
HG
�+�@��_7	Y�@��Y��{�U�z���֧u�>w���[�1�,b]�Y���H���Le����l�Q�uҬ`�ZdY-IV�Q¾�gu�DY���@
��<	␋������
-��_�x:��[9p�ˣ�!��5Q�-e��'��&
-㤞�-Pq$F�D�k�
-��(���ܚ|
�9�ǻe��nkx�n1��P`
�#���|"Ȝ���̍�
������j�]�w��{M����E
�P�[[�L(�'1�F:רgK�j�J�P�ER��+.4�ŧ�3�M7�X�N-Kt_�>��k�DP"ga^c�'��q���q���K>˞^=�Sgs�ו��G���Ŝ*OJ)*J���S9ZS�X��W
-tr]�:ǐ�,ȣ+*,4EC>UuӜ��Х��K�e�"[ q`/�j�,
-�����I�g�M��k�@���76޺|t�Ŧ��ڳ1ѥ�|~y
-M_La˭L���Q�M-àͥ�XL$}�9U�Bȹn&�;t$�=)Y�-�0
���e�p�D��`����a�nj�{9v���Zk�g�oaG��Q�u�dC
��� g	K�v1[F?!RS
-�z��dH��4%Y��0��a�N����8�������u��)�H	��d�9�s
�8g�
�
[�lI�JŴ\u]I㚚�G�1�h�h��js�P��+]ռ��\��}�x���n�~����sDr�^���G{����TA�PI�
�=uz�:ڬ5>t�k���7��ͤ﾿Mw/uk�
zDs7�u�#)y��)�6YA�O9e;�푷T֦�P{@���!AsS����w�ZCRs��?
U
O>�R��j�&;����ߨ}�����M[����Z
-W��}�^�w��76��M��U���K,�Ց���=�8�RA��by������ڰ�s�ԁ��
��֫�	�u��TqZ�V��"���D
'�(�`A��^Iyݿ�20d�u���Q琯U�P�������i5w���["I^OjfƵ�<ɕ�awY9���*�����y�;z�Z����]���k^
wi�T���4��ل�ݔxwg	10dB���V��I۰�ՙ�!NG�|�=���x�a��~i��w�\p7?��W^��)��m,��m*��m+��w�4X��Ƌ��k/
TA�!G�Rpn	��.q�.qst��	[��q�3c>V�F
���n�=
R����R�L{��
e���"I�bw:C�/��8��hΎ��C
���B��h$3b�\�PpJ�x֮C�����y�K�2c�~�����q_vd��r�T�]��p���t��Inp����<!�I�ȍ�N�0Y{،�\��1~�dsR�d� �}�0b�(|��(ltT%4���4��_��+����g��Y���)���F��i���r��M�2�!s��:��ω}�� �27��,	e(�"������G���7EG.�C]�
_����5-��;�F���E
��K��xW�h_L9�Z�a�x/��wa�E|-�j��h�$$8r!��B�+Y
tn�E��v�xE�7'|��_��B���{Ax�R�9�躬N����5��_
��J�
-��ai&ܖI�m���UlDZ1�XK�u��ZO�
;rpl�@�}v;��nS0�q�) -��h��._�t�� Z;Ո�^
-�8�N�a�ZVh�a��
�Ep6�b�)�f1��D̊p�V� qURV@f�
+_}냊5^�Y�
��z��4[{།.���N!�n��Q=�A)��Z6�4�X��=&
�cຄ
-/�"���˼���6pͶBh��rwr,�"�����m�گ7���8���T:�M�� �Qm�
_��a�Ά�&
�:T���q�����e�_�!l�
��8��t����C`d��
��G��-
-�mPjb�jR�J�T�F\G
������ 2cdD�##a5ҥ�H�߈�*'��Bxr
-ې��
�e_p���s+ 	}�`>F�"�S�p�
},t�66
�!l"F���M�l��� �I�
��3Ff�9�X��!�A�N{H+��R���<!:�
�y?$���
��`�{C���T��3�#>ƍQg�S�����w�y�*�w�lHڨ�TG=��
��c��ps�dX"[��,G��\�Z�	�$7@t6�K�H�
��
-/����������i�m�>MK�H{
��
-D6XkB�A2]d� ����(�["O@~bN�{@��i� 9���Z� �F���?x���9���	ϙ��a�c<�M�
��c���y�*��K"ِ�^r��۬�"/c��cW�������Ȭ�>iǩ���F�9����ݬ��ۜ��{����1�H�H��@���?�������!i�&R�i#g�.���Q�i��@sTn�B����z!�<�y
���1v>��
eJ
�?�Vެ�#�Cb�h�w/e�=(}�z��,~L:���%|H�Şc��d�A at 6��}�Gn�R�Ũ�j�=˱�j�*�
��n_J2}���r�cf32gҎ�$M�I�ٔq���Q~��7���ל��G�᜻	�v�fOJ�s�E]�Y�*H�P�����k�P�N�����a�Z���n�Z����we���CI~�T~%c"��7*k�HN����T$�����K�c�͢ܧEw�/
�sG��x�vt�'��g��@B6$�7���ϰ&�5�o�T��#�G��
�:�� i)E�
�ed�� [...]
-�k0�
x��
���Q�bF
-��&��*�E	��jQQDkbaĠ8?R�9�Q_�3��kỵ@��`������ �ܦO��_,�Z�_�t86]�a�ɿe?����'#���a
<�R�N`V0epIt&����+�٤FI�7)��D�F��P^2�)�$9enUH4 ��q�!
�uL(�n�_�َ�+�;Wc��T�����]v�gGjx at c5�FȢ���LG�Ŧ	1����RI
-�.IN��迈��<	�E������d� ��^m��d��F�1�Pa��]�{f�펎��_
.�����h�"�&���%
J������L8Y��V���E1�F*dޑ	Y��b��S,A�
u-�3А��Gr�k���uA���K�[~�0z�d{d��څ�
-��
U�{}.ο2�HP%G�s%
F�(
�
�1/S��UJ�p��
��`������)
��F�V"�Ѐ�̥ɑ�����+O�����湖�vN�Yz��r�G}ú���M����dG��ҩ��X�\ʇ��@�.���KX�
-C�,�
��c	L�3��EGD��s��#9�h���h��>����dë�
c�V��[�L:�<��W޺^^
r�� 
��M&�31��\_.�s�)"�$WB�I)�
2��_F��	���0U8M_
 "X�� 	��
�=SvXk��Λ�����n�ky�^��ٖF+u��kQE�ov1����J̥��
-��������)
-11�8)<�^JH�'�H
F�'���阵�(�|x'ȑ,��Р����+��=�t'��n
������L}��eY��K^m�wZ%.DR�/��XJVlt��K�I����*q��$X�-	�b3'a\�t�Z 	���
�
�޹������
��/���}tzc����Z��OUw�Z�a�2�0Һ� AMx��B�.g�D�Ʊ	�b^HQz|��P觪���D~Śx�3N`�4}-�b�	�Q �_(Pf�Ziڍ��3BMh�����4�
1�w����~�
/y�-���`?v�@�$��P�\FpM"�O����.�c��/u��F�x����,��Z 
��m(��
5ۡ_;�@��
Ѓ�=���'�5ǩ�
[S���Rꠇ������
ݍ"v�;tbP;L��*�cZS��-,�5�zk�z����4M��=KF�V���)[ P��n2�Fz�CC�5�z����_�Z�~nf���:���j"
u��>��H�A
����������p��ѽ?��گ���i��4��T�޹(�΅p���U�&Pl��������}�k� j�ۯU5{j��ٮ�W��%/�{�z9��JԤ�#�)�-p���
����p�5���4�X'M!�����0�M��x�w[�^}�[�Z@�4�҆
��B�:t��a}�~~���
�o7����K�ha�]�9
��ڹ�y�e�|�e�<��o���=�p��㹺�Iܮ�gx:�z]���8����_�i�f����������V��{��Ps�T3���lE�.�.��$\������~ڲ���e���%�3�K��}�p�7�I��

��8K�e���J���J���J��݇f{��6�;X�����B�ECM�ZPՀ6T�у�>�@ [...]
-�5@;�
��
A���_��m@�%kPkj��~Cf���eK0���Jjn at A��((�g4�:�I��?|�kX�y�I*�x� ��$%���Rt���
�f��f�fjj��3Q*jS$�b������Z\�ua�b�'��q�(�����������\�}�������
Tp0��zS��s���(
2��A��
��h���B�mT�‰c4�탱�!�����]�~�^�
��q��D:�M"��!��#���M)���
X�ag�
-'�d��&�n,�D#fa$ȋ���O0�K!��G����>(��B��'j�����
�m6�s�+.\�I�9��M������D*��9�N`�

�
(�7����Fx�!�$�f���ツ�^��� k�x�]�����2_K,GT-t@�B{�,Z�����_��]��$���$��)\�N�a��8X�E=	�Ì �z�s���\2���N�l숄���^
��
RMVBd�2�eP�ڠ���fV��*`�u�}P\����\c�B瀿�
<��Jm�Qۂ��
�G0�ց~��Ӯ�^� �
7Pz<����^O$��B°7��y��i}>Ǎ�hc'|>�B'�:8��<

WC𼍑2�M�0,��؀�oN�X�ׂ��䣮�w��v�
�k����ʯ�H����H|�;�������č�������WH^:
�4
�.�x#=h�1��, -G�rR�:"����
`
q�'��y�q���~�= ��@$=� �&j��	ڐw	c!o&���
0	*��r4 ��b�Y�0C�FsȒ,!M[�t�=�N�U�"��)������3`^D��`0~폰I�𱤡-Y�I
�|�89H�
 #D�:��#e�DN3��a��fȎ\E�%�+�!_q�
�U��7x�w�܎ pN��}!
�k�H�)
-�'�c��-uh�&���W�؁�/1�(��"B`��p�����7Y����ke�9�⬐˶E������TxAT����GLr�o������
c�?��K���O~K�
R�S�S?�{i_��c�#:�u6ᐼJ�U��O���joS���p�
-��'r�"�
�R�q�ΐ1Qc���M#����)'����X���
�kF/�%m��G{�~B�?d�%�K����D�.�����
�v��X5
�u3Q�i��`sl��B�E|�q��볢0H+��z/��}+�K~�?H�
c�d��`v�1n
��O���
�?dh�=L-�6k�q�=N�ƙL�R�
-=d,�G��J�fb��	*`[�%���ƶ��h��>U^ذ�l�`����=�>��ԧ����ٝ�G���0od�g>��$�n�ޤ_��_I�\�2�s�)� �p��Fn��[lu4�v����?5�c5�vw�ֿ)�
eG�+
��˙�%5���oD��H��:2�p��~L�ξɹ��������Χ���}�⏰O��2t.��K����C	�7������:�y��,�
������T�z�d��V�G��[ʾ��=�VF����9��P�i�s.��)/�����w��"�`8�P#�~�
}b���C:1�J"�n!���ȼ����=�sS�bMs���F���])����c~.SPnrn(�W��%3������ʓ���N��cž�Q��[��������=�T��
�,�BBx�y���ɮ�ht�9��e��5h�p[Ԋ��˓v��ja̭J9�j��s��T�}�vi��.�|o���C�#���$
-�$��Z���-�����2�dA��C�.�q� ���{���'�i�:��
&�C
�D,{ږ���^������;2(+r9gJ�'
-*�GU�Y�s��[��eu-�Fv��A��dO�se}���N�6�V�
�	��i(&�A��;}�_;c䰛�p�����­�s������}�V�t�*��Y����IVe�˯W6嵨��~[T�s�d��Jiu���je�j��e��kq��@H[2YD�,%�!�i���AG�
�F��>s�:j��h��[i~W����#J:Q#g�W�	�*J�-e�ٍŻ�uM�j���*Ugi��rY����B�?u�z at Q�
���5B]���;s������k:�� ~�#-�����4)�A)�ԡ�Z�	�I	-���
-��*HDP��]
@?����8*��~�Yѳ��}���s��s��v�:
��
{�:,��{�����~'���Š�B�zj�Z���ƲԨ3�Y	����i%9ՙ�����
�p0W(��D/��D�)�췉���y�@4�!M?a{g6�-—KR�.��~��4�q��j4�h����^��\����:Y]�_^�+(.*N�/����g��d�����)��Œ��Ԍ���
񟱒@�:
�m�C����y�S�n��~c��+���
�ǯx��`���q��_��8ΩZAd���
-ё���TaiEfF�aj�Ŝ�¾�#E��%/���KiG
�$���I��;8����-88�
w�>\��/�~�e*=3rp��AO��^?۶�[cK8������!)��Lj��F��U���^Y��\Q��/?/�/��[>�_�L���RZbٛ$���8I ����r
ԫ⾶oý؁{q{nv�h�䘽��a�����^�k]g�O�hV��0q�ј���Ĵ��d������L^M�0�TW���õO��5Ki1�o�xU+q�@6�\E
T)�I}�QFˣ���{*�޴!��ݖ�17ݶa��
�L��jiO$3�#>$�M��r,�ȅ�#q��)�MU���2C�u
�6�d7�m\N	;��~��8I ���j�����<z<!�
>TD��fl���\��o�,jo:�
{�F�e�DzS{�“z�bb���#;
���W
�ק
j�HjNgv̦��_
�-�8���$�t�%d���i�F4;$��ݑFS��h䑎T��^Ŗ8��6����_p��&

������������ׄ�!�q쁊D���$���߁!c`V�7�61��=/�{5J�qP)�^^ ��>�;JB�f6��gdt��m�B�᱃F՜�A�Cƾ��,Ǵ�PO��hޝ����6wBš(����
����w�h�ñԉ9
mb%�~�c����PI _}8-��ۤН���
<�F=�Q�+
��߬�O�8�������)�4m�i��u�y
��(�<��4'
�+d1�*9��s\�\g���h��'ع���_l�{�$�2ZhBh���F�I�+�D�>/�οQ�������Kr�k{5��.���T���@�%�u�R�=w1щ�������X�E_��R�^K
>
KC
����
��/>�/�i���E��%�F��o��Zg��aAլ����
H�k��U�-ɫ���V��"W��CW9F��H�����Ք}��B[�Z�~�Z����
/9�}����)g�O�rv����e��N�����fB��8�2�Gu�R�bE�|� �|�#�5���l�YwT
[��`��w�i�}
����ӣ}x����=���{�ɏPc�M���e�C�0cy^a�[I2ކP_B-7:=�P�
��&\h��Ά80����d
��WP�h���
�'�
bp�N'��t�<��P�m�u�༮-t������0�y�'I7V�:V��y�D�8t
p|P�G�."�IL0�a��<
7y���+Д��_��*���bTm���ҷZA�V
(�f��M�Q��4L�_�nHt��
��	�#�Dd\(�Y�N�m"
In`!�
�2�Q��䬁"o�d
`n2��M&�`��� Pԇ�ͻ!��+iC��4+kB�Du����d- �_F(
-�
��T�n����R�����7X�5��7��Fp����.0d�!PF8�;!\v��j�@ndʩ�XNNȫ�I���C ����o�@+����!W2�hJ�Qf�:d� ����{R�v�O�>�/ }�hc{�6m���@]Ĭ� ��	P��e���t
�7�|� |����ϔA�$��� י
�T%���OX黀��
����>�]4�.#`\5ƨ	�L��Ϭ�_���9��,���P�-�R��
,?S�����@5�� "��Ib-a�d�V��p��'E��BP�>0O���]�QM^[�T��zYuQ����� � ��Ɛ9!		I�@�
@ �� �A@��(rUZ�P������E�
-*Ȱ�w�;�����9�]笇ظm�@�X�
 �o#D�� �/�����a��$v�l����a,�|��Fk ~�
`W�e�0�
��;xۜ��{!p	.��B
�
i+�n�	hk�rx
�[6����?nn��̀ Q�'q�-���[F�Ö�8ā�� h��=н
�����0�	D�
A�q1�O�#pR=���%�~�h��@m�
�3�@�	ҵ�@�<Ex�}��!�3��)j*t�o	��5`
 .��*{`�^������A8da
A�uI��D+ .i5p
�]������izK�$�T�J׎	�c�����g�����ȷĩ�${A��'���[�$4e�=p<�A�rȽ�Ŧy�
Y�=.������
-����4�/���qN�6KLM�(�)|��1L���҃
"_ǽ'=�zC|KxE��N����
-�i~���� ��h/y�kJ=
@��+H��
����p
�}F��@��-��af�G^��ANE�;V
���G�43�%�<�9�j�S�]�C�k����w�S����΀ȟ����	�� ��-0�
Bw{P�� ��
A��5��}�˴
�>�ez�$�|�e�[IZ؀ w�s����*�Cf���V�=zG�
�%v?��&��W�0���e�
�'�w�aO"��w6�x��� �

�	Æ9�
�<��c�X�^�O��;-��U�,�iBr��3p�F�m^�V�!�uv3�։ث��ˌ>~/�ϸ����n��l�$��;C8���
��T7[�ځ|�
��فa�䮛
��N�!�F���#{�4��
i�!�U��!��_�ٔ>���oA%��W���
�;�9-<þ$�`��O�Df�hl<�%n�|T QG����
�wN�::�>r�~�u�.��;Z�m�`�.�W&��<���AȍԄȾD
�W�A��3�JJb;D�|��I��o���K��I�yO�����%�^<A�Ok�3k 
�\!:_�:o���P�z�D�������[��
�ꮉ�w#���j�4�V�?����Vf�N$q[eqG��č�I��SV+�"�>��H>�J�����3*dS�
-�4��p�1:?��,�y��7����s������_��pyP�]y����W��~1G
yF���ԦЎ'XG���E��6�&�Z�,���L(�� %�;Hi�{I	2�+F,,�jB&)� &:W��n*J.���e��W��{;�i�4�IsȒ�����VI��T
|�(�0g��-�$Z�.�U��íN2	+TU�%��	iC
-�nE>rSiT��՟��՟�y�	z��
���߾�C�7u�27ۉZ���5/[|��ٲ��[��
Wj��ʙ�N���[�QM�*jm��U���-M-�4�cR�<7�U��>�4���2�_%di>
-35������L���A��,��t�y
]l����rx��O�g���wۂ_;�CO=aC�A�ֶ2��fS<�֨�T�hX%��B}�0/�D��=$ק
U�R:U�)?�R����H����ӎ1t��hk �uN������f�����	�G�kf���,�ںkyWS�:s-=�hU��R��*S�� �Y�����#0d
��e
���I�U��+*���"�0$N��%�ǘ��q�5���@�:g6��t1f��_��Km^t���?��p�#`���:�Ἇ7R�4ԲwVW	��e2ra���S���(�h��r+��F$!ˬ�e�����H�P<�3�Sd[X��1�5@�� ����c�bf�q�݉Ř�]K0��W����4��t���
���Qr��FVXY
_a���S��֗�pRK
q��b��\&-�O�+�=JA�]��4_8̗-,�q�i
��O��
-�1P�=�
f��<��^g̍K
v���;φ���ڻ�p;iSe
#���ݓ� &��ZJMr��`:/�2O_^*���y��Ni7�.���*���a^\��W<ƴH�=�;a�f�~.�a�l̽�s0�W�0}W��u��8�/l_�t.ҳ���Wl����:�j��� ~IH� �("��
;�BBB�@aG(���Vԩ#.�u�Sw
-�,�0Et ��VEq=�c=
���b��ʎϼ�O����;�~��������|}&G���P��n�j����'��Stbo~~́�����Ս����Ҵ껥?
eU��e��>6��
�S9�G��g?2ɃV���Env�K���7���r�k.
�^H
-��/u��sYq[[
7�s�bM�FuaӶ����9Y
��k�
-U�
E��
����┆�u�9��&��NMit����
���t�In�3 �.3��^9w�^Sǰ�V�Ց|��פ����Э3�7\X%X�Q"���L�{~�:�ܮ�Զʬ����y���m��dmC9����Te�Zl7$ch�I-��if�+�
�q�A��3$M��S���c�CV�����{n��
�Э	_}#/��zq|ε����I��JŕJ���*-��A#��HO�r��{��kJ�x�BrA7좑���ܭ����t�~�NZn2I�##r�ߒ
�w���Y���Q�۞�7<�{�<L
���Y���ȴ{�x)����}"I_�D�W%�5&��u������}��zR"�Xp"]~�$����ҤG���Hs���a���F��%z�_���	�_�r���|���2�U��^���~���AɃ�B���%�����h�`U,���숋}�;�&.v`��o��?O��]GH�O����#'o���LR9<�|5bO�r��ܬ
�W�
7/�򬳵b;�6�I��tSh
<eڵމ�-��N?���������#?G�k
��
9:�"�ݻ�v.��:�� �B!����B��^=��)�TL��m����Mz0�'��r'�Lӧ��S�������H�RmEӹ���bG�t�oz�K��^�ș�ܹ35
�M�᳝찹
�
v���	�.5�B�A�EB�"�DŽl� ��Po
��������B��
+Mg&��<J�h�����K=@±aI�۬�
 �8h�v�8c�N�-{?�p��o:��L��v���	�s���~B���B��e����2�
�
���#�0�Ƒ�ϋ��$

-��.B�Y >7�ú�
��{c���D�����f�k�n�NS
�2��K��R2LH.$
&zrX艨���Y?
-^��3C�� \�?bY>.�Ԉ�d#h�ݐk��y˰q���o�oLlq�d)jMlp��-:
�2�{��-O)zIH�8!J"����HX�>�--�t?x�9��g#��0�
��e�e:@����i��5�
!�e��96�̰�p�\�C��8���h��Շ�"	`Bʂ,�R�)��!*�B�k�� �;[����s@\�#��/�x7)�������{�4�<ǃ�.�f�q�q�!�cB��E�1�"S�T�,B�%W�"�=�U��^�jo�3�v��+�w)�n࿡��
�)
->�H���m�W] �f�{�!�և‡�� T\c�M�P�C�j1de6��C��
!>�Q�
D��Hhu���
«
���)�5�Qʤ�L
���� �@�J��M������
����0�&�j�Tً�����H��	�C��ָCR��6�� ��
Q�r�
q���	Z�لq�鄏�	�� gL�Qغ|�A�A��Cil2}
�
f�l�)2�HϠ�Y�
�_8!e�+�<�8��!������v�C�K��ľ��ā�I�p��1�\�h"G$���wH
-�.Hp�A�F�ڕ�Lw�8(Xa��hS�-��^��dlt�f�'��,��r�w6�&`FQ4%o�L::!�
�Az;���׈Qɛ�o%�Cҹ�7I{-G�K�+�
D�4ȝ��P�*��y��L�a5�%B
)mP���1o��L�6�Ɍ=~�i�ޫ����Ԇ�&7rG�Qo�1�I�yC���W�W�/dc��lL��g)�B�CBt���!ő�,��:飔�c}�!�"LPƷ�:��̚
��bϱ�M��r��6s_���`�k���c�N����8���MEqk�K��Xܪ� {H�
���� @ b�	��B�-@"D@�D�
-A�^��VP���ֶ�^�u������9ߞ3�������)�1�	ŌyD��>$
�< ������{��>p�}n0���	��1�[ n32��+�����$lw��}
���b�:������X�ۯQ���)G
�r���U`�0kq��&�L��x��O��������1�
�����Q

f#���@O[ a#����O}k�
Tm���=�0���}ډ���}�B��s"oףX��}i��$��6h�W��������ѰV�0�+�
-s�~�1��e<c�^�{�w�;���‡޶@2���|)ҷ����ld�9��
\�:�ز�s�W?� m�U�w�N�xL��yZe)~W#31�������ϫ��p��ݜvf'��eaO�γ��f�_�f�<�U�-"�,���@*2��̏Azo�h��	
�;��|��g��%ϋN����o����5�z�%E��O����Hs	]:�E\j�1[��&~7��7n���6~k����G@|m$��D� [`(2W�
-㐾�^�t�
hX��ݫ�=��)�p~\���i�)m讱
����H�^e�WB
-�]�Il�.����
cd5�N�ĩ[x� _/��WJ~	�����e�T!��r
�2�=H���@��F:�+�C���
-7�gU�Tu|�L)f�x��J.ǽ']�yA
�oV)��D
��K���1
ѕ�Ji=�,��?�',��
-uҧ��X�K��Str�G�Ð��H�S"2��(Z���l#�7�6��u{
��
]v�2��ξַr����e~�j�>9�X��E�T2K�����^Q�9A~�E�6fL��H������@�S@�V��@�((C�^�
-d�!�o5����n3�a�N����KǪ�]/�wt������9Q~uq���X��N-Q�1��J8y�j^NB�03�S�
?*��?g$����z���$��� �{�� � ��s����羚P?�l��l��e��w]O~{G��I�=V��kȉŔe&ti���r���:Nf���Q��J�8Y9$Q)�JRR^�������y�:�m�<$�H�X�
|�\^ԯs����v-�K.O���}ݪ��7�r�V��>���VA��N�fgf1�Ӌ�jMOu�^��>/NPJ�Է$��?�I��I��e��H\ �@�\�k�
�����X
-�:��G�.�5y�io�nm>K�W�g
�(��K�����ɔ4m#%'���]ƍϬ�f��e�iƴ$:�7�<�-3.�#%.
l�b$
�zo����b0[��=���\&:7�;�/�j;�E�	�����W_v����_�U*є(�ɧ��B-K^P•�Djω��^�H;)���ʋ*|˔|�J� ��d!���"���5. 7�
��Eg0ri=��{��v��U���M�-�ݥ�
��:�gv��_c����Ąr5-�4�uF��x�b����$�[�ܒ�\A�?LQ�G��l�2d����
�=��iv�'p�o���ٻǩ��ѕ��7���w��
�6q�i�D>�YP|]>�&�
Q�*4�q��
�����w���	
���m�������WB�-P��A��;�?��k�#�t ���{h5h����0ph����Uw�-������uHy^���/;,1����

-��0�i�dҌ�,���M6��ɍO�h�oht#$1�a�-0�	��p���F;0r�
�]�����m�3`
�fouw)
�^�
�l��w+{���/�J�#�E]���
J
˒B��'Q:*(�v#-��3�>�xJ÷�!�a�
�m�� ̝`�, ߷�A�
,�h�r��O-������i�
�<m<`��*a�|��7r$�]8$>~%�s0ɇv9-�t9�(�a�x�@!p`
�9���� l
���, n�0a�ߌ�����@����v�;�(��ݎ�[G�%��];��1M�ο��Þ
�Oʾ�\O<J����Y�1�
-� k��������5����o�k��z�2[���A , 4�P}���qy��9W�z��A1��
=�R�0x-�'�a[i;H���v�E5}�a ��"e"�}_"��	� $!�H�$h��bQ�tܦ�Z

��[-�8:��Wqj��v��T�TqÀ���n�|3s3���wr�s��{���S���|��Y���Y��ճ-%�gO���Q��v�@z�a��g(Uz�m����r����tG��w��NB6_a�5��d�Ս,��3k�ќ*k���*r�eUxXs��Dž�
�l��*(�Z��6�ɭk#e�-Q��]1��C��N���-���/|��/�C�-�5ұ����4�
!�.��_
��
�r'�C�̹C��ҡ��‰��Lݰz�z��
)񒏔{g�,�"��FWL�n�K��2��<��4��8~?0q�E`��k����� �?I�/��!���q$pg�1�Y�0��

�
T;ʡp�A�,�L!f���|R2�'��cVz��ɱ��5
���8�
�.�h�R�6���Do��<!+���&!�)�R7b ��E S�(v�8b��	 �OA�C"��ap����|�v�F�S����!��
�����5�8O]�����Y��+4����{��Fh�
�™(�����"���(V��ӑ��#�'
J���0�> %��(w�Ɓ����f�dl��fG��m�r�ޟ~�n��^BL�	Ѿ"4�	
I\��dL�C��pfb���c�!�Ń�5R�lOh��0��P¡E��
j9Nh�8b��#��M�N� �dB�B��gC�b��r�Dd9CV�I�;���h�d���F�
o۸�O������@p�꣞Sc>�����k��� ᳐E����N�C����P�@^ᆌE
���
�gސl�B�����@|��<�:��S!�
R�Ԩ/Do�/�G
�[1|l��
�h��f�;��
�U:A=�*�$(j=��'o��s��背f
2�N��/d
~�~C]��'�^ �O�a�M�)^� [...]
-
�|
:���a9���z�� [ 
gBƄ>�c8�i
�8�0�	�:W�=�7�9�>Э�vc 4ۂ�nA��P��Au,��l���ȗ��Q����!��ѿ)^E*�T��'*�
d#d@�G��4�L�X(
aaV4�D{�%1K튢|O��"��Ə��
y��%��~G�nw�v?Dsdڐ�T�
���߳���`F�������5�}�E�=
�z������ &L���`�dcn�=�
-'�\��y�0���.��+\2lZ
�b憘���g�M�Os�N��=ɪ�H�ӞK{��*���+��y&��O�����\�������0�TAt�L��i�/���v�NuĂ
�7�u�cżs����J>�?.\�0s�}��Իy���m��9,��?-��w�n�og\�?�]�
}oD��|$u�0�R�.`�������a�̥�S�������.��͇��=�/4���[��/��[�$����ɿ��(�*�n�)�1w�����Ǝ�K�N�w����=Rv�
�<[ �7E�)F��$��z��".�5��,u�L,��Xo?�T�4�8˽o�����Ґ���17*�f�hiH�R���R�F酒���EM�s�-�3�ԧL�4'L]�c�;ڣϳۋ�d
)�����!�J~r}�E����o�Y��{|
�_
�y�"űo����2������k�s���k.�_��Y�B|Ʋ.���͊c����/5�K���9P|>w�Ϲ�%�V�Ke�
d�Z n)��J [...]
-b}��_�`߻F�ܽR����|�~vL�U	�k��,��W����Ty�|�zߜ����_��);�����q��c�����2�i�@Vs%dM�}Q	ỐOs���ڷ��YVp���3?
c>���� t��F�}i�1�\Ci�������
�`��m�r��kU{*7iw��<狹_��(o3~n9��h�2m���:oH�Xն�f�>��L�0 ?I����8X�UA)ғ`B(�@�(� =j��j�A�@P�((�2눸z�Q�	3{f��{vV|��
����>_���Nn��MF
��*�1&�8��xx��ot~
|��N��Ό�ъ�X��Qu�TY�٭���9�.}|�gWF>U�VJoO��&51�/�'��&������Tſ
-�NZ
�� ��4D��#/�C
-��
�+2T�Vk��r��R����tLg����ve��뢰%1Gz
�;ry
�r)R~1�)�ܿ>��Y��ƪL�a������&�K���E���ļu��s��->��T��C"�{٘p#�W��7��
ư�nA��:hO6z�I�w
V��zE'�:J��
�<ZY����$K�_ɗ0��!��Nvq�`Xa�
n~�na�?C�3��/�F4�\���U�(|ɺ�r�pz�*у_Z��o2}�NfF��xDk���h���S!	��Uu�]��"Lv�/⓫
�rA����*fIvSHA����y%<�?���\�fg�����=0_��#�B'�-��͙���:xwj��6
X�ԅG];	��Úc��Z�;z�-/I"l[+c
�ʼnn��yd�0�VZT�WTX��7������p^�Mnz�<�'�;�_����"�Q1�*�
�P
����E�&|I��с�˦��nk�a��a_�	Syk�^ic�MC�c��	��4o�8�D����[*�,�c��ةE�aI���Ģ9nb�2'E�fz)b�J�?�RDU��p|M�$T�W<mՀ�
�0ק��&0�wP�j��A�����b��
��hq�%�)^�5�>9U���*���%�Ie��Q'Nt=��h��/��L�@��
-�T���P�![
�� �ד`�]

tk��
�5��]�R��wҗ]&ok��7��B�ۣ�K�q��-I
�M���<zJ������W�Š��bGWs���EV�e���1ck#���IUJ҂/�� O��0'S��^5�5H��#P
[�:���J�zm��c�.�a�/��
�c
�.�u嵧{'_���ƶTD77E4w�š��r��C�M�C›?D� ߨD�nFU(��(ƿ�`�oO�Rax� �qC�� ��
�iq7����\	;��w�>�7�9�'��LW����B�Ȏr�0y��L
,

-�M1e?0Y�~�rD���#CdU��V��&z	0��_�@�]=h����x�V�r⸁p��D0`ƿ�ޟ:es�Z���d����j��J��h�*d���AC1��b�)VO(�P���
�T��{�k���n��~�x{�o�eF�g�C��5�='ݼio�s�~�)wC,��D쏹
k5�t$��9ǐ����27��zO�1�7ml��36E���|blՋ6�<�ȕ~
W�N�P0-��
���7��HP5�	�#(^�C�}l���g��I�q��LO΅�s��d?8{ ��&`V`ǘ9�f�
�32g�̠��촋�������#�
:J���R%����n�+Wq�
���g�C5(~��/���r!���Z�
�����Ɯ%�	�Y���g�f~�������,��"/��|&��x6d�t��m�G��U����nߣCnO�6�p�`��s���Y9P�@�
-HU�Y�.B�� )RyL�����R�7*�71�[h���P�)���,SOe�Nwe�n��6s�e����w,�~^�p\����O��;�Cd���e�.|�-���{ �2�!aYb3������V�������]5�+
ꊟ��J���J����M�Wӌ�V�}(���������>o;�6kb�������6ە/����a+~*�p�<@���� �k:����>� �}�K��ې���
���_|4���kC�:(r�
:�k���!��T��
-5�C����^���pZ�>}�w ����
<H[����_ �H��h�
�\�~�:L:�
Iv�M�Q�"��
-ְD�{P��9J�ڍr�w�2�
�I�u�|��u���
&�9��+m������8�)@
�g)�k ��H��
E�	vȜ`����
���d�YT�g������;Av�5&@ �$$$6!�)6�7�,����E*n8R�A
[EQ�}k=ť�ӊ֭�Uq��3_ۙ�x�;�����}�sr
pig0
 b��ɴA$�
-�ZH�2E��1ʴ
�J� Y�e�c������'6�PT�9����I~�������(����“��F�p���
[83ؘǰ�'�

h�iC���z��u����%�i�cj����&�v&���O��N�߃�Ѓ�`�O
B
�J
�π_�.xz��ǂ6p����0��~b�8A\4��u�
�xg���3��O�>C�|��x\-��,��@�0��Y��ï� ��
�������{M�;H
3��)�W�;��=%��w�Ô/��x0�ȃ�&��|�<B��D��d�,H�:��τ(}��
 Xi��ct� `�)����$���
�����-
�?&^[�?i���	>����T��h�\H>��D����,�Ku ��	Y�
B�
!�2����m��@���½V
"�i
�Ekn��ٓ�W����B�_
a5
�W���\R'��H#��ݘ�ZX�c!F���](�#,��2S�֛C���M��ʆd�͔dp�G����#v�g�&�W�߉�ڏ�ux!�px.��S	l�H`�8�G!�ք`gr{Qv4b�gم���D�)t�0� 1&�*4�����
_c3�f�E��;�v�7�{�^��u~%;4���
�s�I�\I��>���{7s~���c
-��R�V$4���e�Pͦ�2��4/-��!E:��
>&����ϵ|3
So�"j����9O�=���w��60���
��G=��/xߑ���I����;����vM	�+�3	��"�	��
D[1�`�@*��&��
��
�D3>�+�ߤ�L_$������~YT�|?����V���.���z}nF��s#b�{=b�wUy�wTy���ߥ�7�
Q�>��
�v&��c�	a$7���d�;3,�!7�#���ў�L�	�{�g� c	�N�r�����Pչ_Kh���ȹ
���&v�߅���s1��D
<}Ip"���X�ˀ���|�ăs8�Ép'�4!��
�ι�t�l2K�
%��d�s��o��bɬ��&?�$���3��K/�w)���|�*Ι�������=G�
�
:P�u�i����㟈�&L�U�w(	��dx
��C�I�b��̀B�	�R2�
-{ƛ*W�I5G�neЌ�eJ�ѢD����Ng���N�˽����
^��w0�5�@r�p_R�hh�
ɠj_Ȁ꘴?�lw���w�}��K�o�p���[b�
RH~6�[EFV�Q��lƯuN�������V+�.��Y�*Ns:���v(���@Vo���?��,�r���=K�%}�;�;RC��
˷��W�$�V���Cؓ�/��
M�7&wУ��(#��Qo̩G������0�6�N�X'3<Yc}�"����۾�|����sk�}ٍ�
��E��6��d�~�ޯ�Zz �s�)e����/B;�E
Y�́_g.���`H�"�{�dd�:}�e�!u�Ō��Α�m3�u�Qb0Re�U��qhE��/�r����y�
���5u�6��rڥ
Y=�̾�V�>�Z����Ȗ�gaks&%�C�>���_GT䷫I�+&�gR�V�R�ZfQ�6�Q�mv��>��-"����{�9�צ��U���[^��RZ��*^�Q�$ސ�A�.o��9wGxS��#V�D5�\�j�}�\�?!m,DPS��O��;��!oQ�z�R�[3���~:�����7
��S�����o�h���U��ڻR��]���\Q�o+��/]%n.Y'k*ڤXU�MY [...]
e��Lm
8���Ȣ�TE�g�Ǚ3=a>����~��s����>9
-�f���?pf�ތ���=!)�B�3&�w��7-
�����:�í
�T~!3߷���1��
ײ��~\��bt�q�j��ZVWdx�,Ҭ�d���X�]~a����t���,����^��}w:��}.()�;x{�����B�r��%Fe�T�
A�:�']Hx�
�uE:����L8˄�M|�j2��$�Z%�������&E������Ź�;���i���
tK+��L)(�I:Z㟘�
��
�7�5�Qp|�o~	��^���B���D&���}
��8��jh�]π�4\n�AG�	��b�y�эWY�oP|&lm��M�95q��U;
�U��.�p�u<�c{i��G��~[�b�.n.�.zS��7�dAW��m�(W�I ?e���ϕ@:@��F
-�� :��@�yc��C̪ns�-9竟�j�s6��@}�pom����)Ҥ���	5�q'>Vn����T��Uy�?��? ���Ȫ���=���us5:����
r% �j � ��8Of��.-��lH��a�^t�tz/��Z}�=b]Z�f��x�
�;���:ƞ͒G7(���=�����:}B��|B�F�:�V7�^��:��{�N�x��
-�۵ W�:?y�O��^T]ׇ�^+F�5);�ǃ�ѽAO��ﺴ�4�B�U\�ۘ�{�>�ȔF|rT�^��^��v�=���#�}�#�mJ�6'jE��V������H�]r�.�;h�H�O2����pl`)

0��?�c��Wh���-K�j�э��c�ǚD�&Zn��*���Q��<������ZG�+
2�[2��Q���)'��9�O7��^F;uߑ.> g�_�E�̟d�+��?Ā���p���{߆���L3�N�p�p�~����;	ơwRL��2,��X��
-�km��
b��>�����E��
!T�*<M:���P�
Pq�` �RGذst9$��Q�F�1_�iF}��
	�

ٴ,hd�~�j�*_վ5^�\#U�Z7�WU��\�g&��L�匩�_ߘ:���Yl���,y� 
�����| ��bB�C6Č�`ӘD�	�q3dܓ�a<��7
��
ߢ�
��s��w
�^./zO6qr��D��tↁ����I��Y�p�����"w��
-p�@U/ɿ�.?y �!6>ք��!�>����8�^��L�I
�d����l�T,�q*�+�N׶�>��~�LW4Ӡg3s�'|:D����x����	ꩻ��D�a5�`� ɿ����� |
 �9�_����!(_�S�W"�y֑v�uc8��aڽ���԰y��e=�c��\���\
�t��m2��Y���Y�pO�'������-�B�a
��������-���|P�&(P�q%H��ђ�����BW�
=iS
`��0�F3
1��
-Ә+��{X��Y��2kY|�u�S�����}�.?�@���O �߁�2����`�`A�a��1
-�5��Z���JTP+Л^��4#h=��up��,��08XKt0����Ļ��7�5L�U$�;��x�
 �#��0�%�u���j�}4��d/K�
�P@領�F)�AWJ�)

�(�� �t"�� ��E�ƖF;�R!��"�Jh�`�8����� A���hy��ǵ���H�s��q��'�*.Z��o�ω7r��,�ɖX��D8��(�g����?�E,A�66���0G
��\� �Q�J\ �����Y� 
?ψ�r�ȝ�/j����:Y��B(�>\E
t�1Q��B�0M�Ʋ�!Y
�2���P����ͺ(��EQ�K
���
�
�g�ij�oĨ;K�����x�
,(��R�fB�Ҝ0�S�D%
݂5�%���;��_
�t�߸
Jkx(i Z�����G�>b���9<��J��/$/��%�&��Oߒ"o�
�?B����zQ��o��3��4
�oh""�� U�t	%����B 5�@B
��TY�X8�V�
;zг�c�X���<��?���~��y���qY�A�:5[��tMި
�D
`f/���^	4�>��
�z���
}�����z��3u�����<�
-q�z�������:O|I��~`��V=���.h�`� t
"�7�N
�qQTM�
ֆ���AH�
��$2�Ī3�l5�c� ~�[�>`��-c����5��Sf��e��~��	���#Ɯ�}Ƃٽ 0����L ��	Ƌ�B��F	cJ���j���H�}�1�@LIJ�Q�z#r�߇�zVM�#�����ٳ�n�'A���F���}x���iۻ������n����zЂ�L0X^� �W6���!`�`���U8ߐ ���4|�3���-��5�
��.!q
��1�GQk�G�,�7[�޸��V�N���a��{��r�q&��Ր�ΗB�;_
y�4
����F�=֧#��TX`̿6��M�{�W"H7B���d��]�沼5_g.}ʎ�{��f�k"��f|����*�k1�vW�Z
~޴��b�.��#��"��	�t?>�1>K�g�
���O.Q�x,�ŀ���^
�`3����8�x�ػ,�|�+>I�q������峜D���K����m�%�8��op��ks=���}2f�43J>}��p�Iʡ��^�~��3 [...]
-�� =/7A�*l	7�)��Y��Q�S��ɜ,�#��9eN�2$nc�z�?�Z��N��5���ӟ<Jݙt�֓tƿ;iֿ3��3�gW:xt���+
1��T�{ܥ:h�T�顇U���]�"k��X�Si��DQ���L��y���9B���"���Zr��қ�ͻ��Kݑ��֞~��J�b(�fZӟӕ����
 �e�;ƹ-�����{�B���抵�#��#Y�nKuь�
]���OI�:�����Lƅ�V#��`��iW^�[��ܙSOٞ�����k�2�����Pd
g�3/3�9��YR���\���=��;��@
���qݩ�D�����V
����wQ���-��:D\
�zwy�e���"�S��ح�@Ln��(-�M����~�>z
w,��;XýȒp��>�I����dY>�-���-�\!B�Eݔj�o�BW�h���N(�Ԏ�}��ɂW��D�+�,z*2m;�x���B�a����"4���hR~/C���)�;ªțf���c��?���] [...]
-�	n����OY	x����b ��- �;��j����p�:��D�U�ʎ0��\2�������ck�Y�,ͦ�&k�\�w�U��Eb�ʊ:������NFQ���� �_r*(��VP~�[��|���(B�0
�l5�g>B�U t]������*�щvut�c%�߱�0�N��kc,�l	3R5n^�Ԑb]���P+�u�H�<D5���ZoaU������0y��,�h*(Kt#�+~��U}�ͫ
-_��@&B/�nc�V����}�4�I@��Оn+�@��fw���m!��mѦ�-IVҦ
�*E�S�\�^R_����ڋ/SPy����Ҿ N�����,v�/�
�+���oV-P�e@�ʀ�=�������
-�N�����ً�o�.�3G��\5��RuZ����;6���'XT��m�ڲ
�����%�ܦ*
-��އӠ���;���d�qf��3Y������7�(l��Ѓr�f��nE�v��8������w�u
9��zk��WHw��{b�J�S��:���;�s�
ݳ���
U�Wj��7I�KKP��c����ʫ�X�
Z��/�%x&�	��=�
p������6�&z�����a��G5P��j
�W����:j�L8��r� !�
	��!�H Í	nA�x_�N=겻�Nm����ƻ��T<PT���
-��V�.`�j���-�>�d����|&3�e����#3�0���x��=��Kv�H����U�=k�
�i;m_
<e�*դ-��OزE�m��e8�i0���,�)<ۀ�
��C������	@-�?+��m��Z���I`u�'��6���@�pqu�����
�|�'�QU��޾Y���'W.
ȭX��޳.$�ܠN+�
O)?�/o����
K�m
-M-��2T��n� � 4}px;�� ;��� �?� �h���WX��ZtLÛT+�U�.)>��0�p�t�n.��>��'�n�_Zm�}�W���
-���>H[�4�@o��Ƥ��`���G�Lspf=�1Z��e _��L�Rs��`6�`a�(�����nQ��5��
����S�≧���
3��JӾ��U��_��z�k��;�q�olc�oLc��9a�9��1
�5Rk)�C:�{��P��W�X�����\(n���vW(hd��Dzs۵����
�DQ���:�8[�3.�O0�8ĵ}�ݶYٶG�1ֻ�5]ƶ��D��\"ΡK��Լ�����
-��� ��*�/=
0���"&\Bֿl!���:�!�#��ԑ��ufq:'��:�	�;#;?�����:�k�Xݵ�&��$�F�$��W�1h|
�~��z�
�=�}?����o����� ��?
 ����n��3b{˜��XFӛ̊�
�V��sB��s��>�)�K���k�
����~���ׅ���By�
�
��yV������?K�v���@��x ��D?���
Ÿ����B�G0�qL�d�0�%�c�
Mc{
���x�g���u
7�v����+{u�+}u�+5=�J��p��
_���A���_F�9 �\��w`l7@�0��Jt� t�T��a4F1n�ed��8��
Y�8�e�bI��e��I
���52@
�cs
�'��?2���5����P�@�
`
��EԔP�\���

��1l1
l0�1���LF��>�b���a�



���c�<iǚ� ���o��ܧݢ���  ��r�-�i�1:��E�� @?�X4�� &�
RD��F�
d�Ojށc
*
6S�P�B�6��p�+��
3�辘��+�g�K���.��
&'x��B��:=�&���������~
��X�BE$�9��E�i\�^�CϿ��s-��G�m�\�
U��
#M�<}�ܥ�
�!��7��[�G@����`8��3�`�z,Cu

ʦ1�p�>�/��j����w�JRC����,�Hn������!?
����۞
Fz0�E�Y�f�&���\TO�a�l>/�r�*�	Q���D�('U��
�DE���
-�尢��O�\�\�D���E� �M�‘0��Qn
ƹ2���8_B���X=�&�P3]�
�^"°O,ߨ�[�Ve�J��ڤ��
RU�UG�/T��g�s⧪+⇪n�}�Sq����[��{j���VwF@��/eP��`}��\��z�i=u\Ԏ�c|��p�<�˘�VtS�~U*~���Q�V�@d��o�}v�5uv���^��
ͥQw5����y2�F�k��H����Wɕ(���a����z{�tG�h.��
�R�0#�3���{��g�$i��n�u��D�;n�ݽ�����ov�%n���=N7c��o��K;bOI�Ƕˮ�ޖ]�}$�7,5ƣSk<:�O�Q����0����-�m�H�8&� ���d��հ�d'�
d�X�dY�I�gs3e�]�~�õ�5NW7HL4�\��r�A�׭][�ަm}^���9�U�3�~�fݐ{S"�6&��d2:�HF'��6�Q7���t�̓ М���ЏyT�b���q~��t��[]͙i{i�B����έ�\Υ���M�8�t���2�& [...]
-u6~3p:�����7���?�M$!�q6�OF�ƒ��5(n?�`�L<��h�;��$��g�/���坳��'9}��r���羜)�XL�x�s*}���H3�-�)�������䩠Q���a�#� {�����d_�O��4��{�`�{9�5(g��}/���go
-
�[�#|Yx �ˏ��Bq]c�@
ﴜ�q���=<�+��QyOfk}�2��G2)��m���
Z�1zW�
�3�~pGڳ`K���ΏA�
`�D$K��x[�.��9D@|"|'!�K�-|��
/�{��⣰��]�k��C���T�q��<��@�=�W��x�
n-�zNsP{V'�-k�y5s:�9c9Ԝ�q�)��0S�[�)Q�����C$��5��;�x�}�5��?�l`K�
~�q���C�BXRG�ͫ�;�P�]�d��C�>q�w�HE��Ӓ��ԫ|�9��0��������;�F�zx5�Oռ��Q�Q��B�g�C$kP��
 �|��sKM�gZ;���

�>�
���
��.=�w�$�e@�q��<;eb�6��tU�!�ŕ�FQ=�.��Q#����U"t�G�r�
V��M�N��|D�#2���f�o�+)�
�;�i	�Dok�vp���a�2�v\wz�`Y�s�:�P{q�G�2�ˬ��6��d:j��H343���!Z�HXi�\�:�!�$;�D��0u��t����
�[�8 ?^���|��
W�A�
,�
�9�a��i;d8��;�^�r�ji��&�������F��7�Q��*�Vnbh
-�CJdC�J�,K!�)��.R.�>�H�_�R��T
-DQ!�5(�{�A��W
�i��e$�J
�����/�����wwT_��Z���I�q��<�xu�اB��/Wk(�%�����R�"W�K��Y��{��O#��o�
T?1e�(��Q0dkP6�	�;�`͈���"v��&'3{�@�x�1��Z}�&�e��j��*���BtB�/�S��PTZ}����.+m
�h��D��z��W?�䫿����)*E��2D�� k�~[� O�p� Kf�]- �{`��t�R�m-��泎u��.U�il�R�л�ZJ*�R�%�Ɠ���@���M����Fd�>ae�������-�Q�(��w���=|����kXh�ރ�k�}tw
K���
fW�vzoUk���%��ƜyTe��7J|�
E��ueTam5-�hf��t�d֌��W�	�R��UXz͏���eDL�5��
����;h���ϴ�`��!@[�+�{}	�=L۪�_9�w^ܧ�Hr+�p�ڸ��V�w�U9)�EC�i6P3�&�����4�l�
�6m�&���l���bB��&�fBdk�*�=�[\����?ޅ�;`�@���
���I�v0ʾd �Qџ�\ЛvPԓ}��-<��zg]/&q:+ȩ

Tv{;-�}�
߾��ԾΈ��f�[�%X%�
�1~ּ���i%� wpϿэ;��h� 0L9�n�(h�(�T�m��i�x��p,م7�q0k�8}D�:��b�|��.
Z.
Q���<Ƽ����
8߇�/�!�ך?��
� V��������6OT�b�����7(\����7mǻu�!k�S���ԛ\7�l���YőK3Zϋ3�^���N��
�==}�3�F:5��tj�O�$:��@^�<�w��!���;�;�j���� ]����'pW	��D�����K����M���/nEx�Š��ܲ����S˭G��<���<"��<Y˯<Xw�z�� �":ʺ�K
�o�R� �?���� ��P~@�=T����Cʆ$o�@�&���E�ی����h�ɱ?��s�ِ��(v��0��hq��w	ݸ����y����+s
�1���~�j�`������K �x�5��'Hxf�~�g���-�l1��v4!z�!j;���ɰ	�چ�(�;:{��i7m��!���C��G{��w�5uoq ?��$� �� !�	j8*���,�ɢ�Vi
���
t���Z7����V\�֊Z�<l��":U�cQ�Td+�y���8���g&���{���{����l������ְ�{��o��hG����J�_C�K����Q~=@��� S9�o
>�b�nV���>h�����0�-
<��m[��8�u{\��<Y�9?Y�9�W���<���<�'�<���}+��[��G��6���_F�����_ ��D��
0�w�	�F��B
ڗrp��WZp~�
N]�cWؿ�ew*�����0�/Y�&֪�[ֲ�
+��J{_�݃�E����u���)��
�_����; � x5x<p��f�

��R�ݐl��A6�X�/H1$8
Ę�8D�)#�"�73Ƹ����H#�7c���/����_��_"~�0�����w�!�
�5��%J)�ơ
-�P��cԃ ���P�uB�!���4t��Р!5��g�?w$��=�!�_
��v �� �/ �� ,�1�t�ƔiB�jaPN��"�%^d2�$Ʉ6�1�F�t��rl
t�2��Π;q�1�gP�Ϣm8��$��9��sh���&I9�$դ�CI-9K.��L:X�xC�	�#�ZuD;R��
BYT&p��͡<�C�<��$�d+�+�>r�
#?��
Z_#�3�M/�e�Ȑ��o�e�wbp��8S-�]�Y��r�N��aU�y�,"_�M|Tn'U��ԐZ���\&M�a�Sހ��ׯ��T��%=���

O�z{�U
z9�g�IO�1!�E�4�1�C׹<t��s!5�H� 5[I�K	�4���ӂM��/�-��cA������
��3
-:ȟ���@=eOR l��A?ꉯ'�?}�r�O����T�">z.
銌������hԯ-�iw
{���=��k�	a�������C�,�C�R�D�NئC��

-G<z���Y�([� ��	�E�7��i=�b�AC��\A�O��k�B�+���/��w��L��w�<��1}�?d�D������UEԬ�]�@�iv��Y����BQ�鍦7ރ��`A�b�0)`�$B>��g���s���Y�g.��/1n�_n���������ߘ�7�wϰ_�d8"i4���6�[4�X\3<����oq�%�P|�ǝ�C�s��ɔ;e
�T3�(�#�j�nC��Lo�7��>
�嵄�

��3�7%_�������A_K�n�^
,��
Pi�s����c�
?��\�����t�N��� ��
B��`��hD�SE�oOu̐ &ʡ'Q
�<��8���H�1&��FT��ȅ�?G|&�^(=7�ت.�Dv6l��t�v�S!{lO�
VԆ���!����������a���P~`*Z��p�����ӄ�qt�L�:R͠��L�Cs��R|�I��_��Euq��ӱKO�,���^&?����u���-�Ñ���
�#�w�6�N�/►*♺2�jw*vE�ME4ʈ�hn
-�ҵ�Пƃ�L#�#�Z3�p'S�2'2�����h�����,��ď,��Q ;��mu\�ݾ�U{��w����+��ig�a����ˣ��l�ns�ۧ.���eqhW��D>F�� ` �}��l��A�
��mst��l�6+Bx4s��Pz�d�\���y�ʔŊ��B��b������5e	Λ�]7�w+��w_��cmB�KI"�K�PU��v�v4���
 t�6�L睦y
4,����B�8��,pc��7p5�aFr�D{�̔�=�jG����|Ŗ��6�\�!u�Si�z�)�k����N>�*�ve�]]q�+���aM�LtX��*b7�2�)�:��F[\�B:��qP��?�Y@���P���U/�bT5?F�37Y�-g�UYv�|cV��t�b��Y��k2�5��X�2}�ۗi�
�Ӿ�-K;�4�����N�ҌA����^6
�r��u�	К�H�W?�w�|��98�/�#j8��g�>	�̛f����M
�-K�e�Kr?R|���Z����9E���5.�f [...]
-���iՅ�g�$Y�(2m�y
-qAn�$/��I.ovɒk�ҳ{=R��d)��=�����uM�aND�����J���T�C
́�j@ك���`g�>:k��Q;�k���i�Z2E]�\PUnZV=CU�`Q�J�V����$Y�N��M.)��g')v�'(d�s�8�]ٚ��&�3��&I*`�F�ga�4g˨�}���=�@W�:�Eh[+�������W��V��(��D�����V�erی�"�ԒJiRqì5�M���
���h�'
*o{D���ZŜb����'z� |K}��jp�v�A���H{W�A����L��l�:O^U��niC�a����n�4�:vf�Gɖi�Y6I5�5��تz���v�����++�ET�u���
Q�O��L���9DU0�D�R�/i?�
WS
(���l�����
BԶ۠r�W�~>���oJn�
-㬖��u1��D���
���m��R�U�j����Nau�g}Pw�5�n�|�����5s
U3b7�
��%z��Ct�}���v�=7�[�*�J5Pjfq�o
��Ez��
S:B���L�6�ψiO3�ڐk���6��V
��*Y��%]ֺ�)���s`�7΁-�
�Z�òf&^��l'��~��L��	��!�߽�PvK'�^�e�.=ӑ�#Af�'����O�Џ�l�=R�-�4�+Y֕m�Yd�bk�u��f� M��_���Os�a��k�%[F�~����mf6�
�z�����
P��(�h�U��(��(�H�"y�5�������E�/��_��f�m
�7A�|o�i���=�3�z���j,}{����=e��{��g�����7�>=���
f>�yz��

��
��Lwo�T���y���#@��D
��rH��!O.tȇ<�Tg�`�n��J���8��T��y��ʦ�
4�.8�e���}��GO����������y
b"�����

�u����
��kh
+:
d
������lX��a
��uF�v����m �H���~��P��;_��7W[<�K[g��&CO�
#�����ٯ�<����~#p;�n'�p�c4�}�����S����
�
?K;�9��0��	�]������<^W|1�J ޹�y^Y�y����F�y�#�:.#��#��NW?�K�~��^y�w�4�'���K.N��毛�7R~�A���}XC���(��{���������THoX at zS
-Ǜ����C�p+��WC|;�wT����Y���,�
�,������3���3����nN����A�
�_z
����|J���>e�|��5�r���
�B�<�����x�
�G���hf����L{
�'�0yZL�A8�
�c<�
-���0~2��$�o��򏁜a�?O��
@�
([�@z��0����F=7��
3��������0z�
�׋��z9�cQ��-
�7��ö́
�1j��5򄌑�����+)?W
$��ïK��(ۍ�
(��
0�`�
-2=�1
�	�|f	���L<�B��_�!3z���3:�B����$Ք���D�(�+��;`.e��
���3e�э)߀z����]" &DD,�=q!^d1	!����5�.BC�NM�Ĵ[:8�e��1
O�M[�1� �	"8f��1�

3(%u��c[��K���M9AΒ��w�>���m�o0���8qLJ��8	��ƍc��
��Gg	����0��H
YG6�.����Y�c�
��\#'���+q/����?d�yTSW
���K¾� !/�@�	Z�*�,�ʾ�H�HXH�Ը����ТH݊�8
�m

�ک����^EN�w~�
�����N�������r���Oq�w¢)�^/
 �(s�Hl�Cb�� h&�M+� _�
�
��<����8�	��x���K����K�O >�
��N�c�t�f�'
��HbG���Z dAC�6�=��|Gw��ѽ�8}�|K� ��ߑ���g�cr�?F>�c�!S���M���A�\�=��iO�c��Og�#��SbH����5�|'.���5Ԙh�Z��z%�B��S�E]�3Q�Dt�
�
�NSEW���G�-��M1f����O����	u?�Ax��
�}aM>n�ۓ�������O��_�)��S
�'
z��R�C�*�}I
�d+�d����[�}̛�~�?$'�7$�XW<
�.z�6�0��s�;pv*f}
�p [...]
-�,�I�����K�`btV
�`����Y.u˻��w5��2�U�&�߽6]��n|ѳ���
��MF<M�y~oz���I�fC޿���Ʀ���76�#�
u�Am��a
��G�����������-��Ƽ��\%��9Z�y�%F��jM���0=����f�a�v�o}����O��O�Հ�)�c>׬���>����~?l�������������\�Ȃ�
��a
�h<������N�;�:
�-4�	���˘'�����כ
�[

0X�4[���>��a�߿���~�}�'l��_���o�
0��
'([wb+`�5�
0���@hl�FcY�q��e��F9�
�3Й� �ۨ(���֑p���<�
u�}��ֽ�K�{BVq�
-n��n��
���
-��+�og�Y^G�-�=�w[�k
�
��[?�0^�c���_�t-����
:�����a�q�F�be�=��-���V���؝�՜��v
k���
��No
��o	;(�
6�1�'ǖ�g���;����͑ض9
-�|�/�=��7S���Ѕt�>��L�C�O�!�l�/5�ѓc�;)մ31�bG�ں=���[n�[��
c�m\�L�_�&X����'\=�*�����

1���X� 쁭!
�Bwa��0��$Ѱ���ѡ
1���&��T�,ҨC�h�-Mfٚ��ޔ��$��7'V94%6ҫ�V�ovZ�C�,n�KC�QQ}܈�.��K]¸c]"��0��I��i<d ����^�y�`�
�"�!���rF�Y3�]�yT�"�՚g�Q�f�^�`�MWsVK��
i��S��Ɣ����amr�Ku���o��䳮��w]�SƄ�T�קa
��I8
-�����
�F������s��r-P�Z�v���s��-9!���E�k�)�rkCFg�\k�tq�C�����-s�L_',����Iw�K�]uҿ�Io���q�ɰ@���p'��؋i��qꞀٳ� ����Rc�viy�]+!�hf�-yA�&u��JU����t�YJN�2ϮJQ�P����d68�f4	�孢By��V��M#vϓ�t����E��
5
-��*08Lz
�пd����cE0��`� ]Eƨ���Z�?A-E3ɦ�@�Anܘo^��fU�δѫT�KT�ܒ�r�8�α k�P��I����R���(�ܳ�7ܳ�^�r���*�s�1/7;Lz>q
'� 
A��R�����
:J����m(sEM�^��ğ�P�и�(Ƭ� Ų\+g�j�m��܂�RZ�W#P�
BU�QV�W���-Su�=#�*x!�Tc'�
�jLޤQ8�'� 
•�\C�T"�	��	�R�FM.�P1�h��a�,	1�(�6-+I���d���,[MQ���P�SV	�
-�;ej׻ȵ��e�=nR�q�4�ew���8]���,X\�i���P��%�28Z��2��
����X��N��vQS�K髂X���&�	�Z��:�\�Q-Q�g�9(J+��F��u�i���W�I�cn����(Y��S�
 ��üIw��y����pB{�a4�ܷ
����7X��FU7��(o�E�42
�Í��b�rkS,�k�lE��V^U�M�*�U.$W4	*�\��ݢX�q��0�����4��k
�3 ��!��A4�(AD�q���p�U�֩�Z���
-X+ 
-8"8Kl��Uk+���.D���:��Z��u�}_�Z���?����y���}r��?h��
<Oz�w��pf&p�{������|Πe�I��SaNJ >L1+�'Ǫ�$�;LZ�_3~�P�ec�^:A?��i�Ö���8�g��~����&�h�;���+�Wƒ&�^��I�>��7A�R9���
��{��u{��d�*`}��¬4=f�15�����x/��j\j�ѫ;��|�v���
������G
��X��{E�wϔL���m���
n�5�l�����%���$
ݓ�W��o�����y?���8�lJeҁ�5��29�e�g�a�:_�_�q�ڋQ�q���=�C�8���9N�w��n�����X���ۚ�]2�xu��j��8�
�Q�
��gCl�s��4و<�+al܃��?/
�b��, q=0���D�Gcr5����04/��"�����~�}T�s��{�r�e����.�r���,�E�v�ܜ����GD����������7H}�z�
Q�I���;��q-������r�i�9����Ѩ��
}�>�mm��V
⭱��5^t��Wt�S�Y����Nq�̟���X���b�ߢm��_�6����*m�管;�k莿+��g�s����'� 
��v���}��8 ��
���.B�-
��8D�z �6P��F	�m���m���m���m��dۤ�}���h���ͮny�c�!�xP:շ��n+�9
-�d�	;�������H΢�l@��@������Ѻ��EA0[T
�V%=вdKƠE�4+�+J�D��u�I�U��>%�K��ſ+�
-����T���
�O���ﳿ&3{���_3�[�������_�
�
���wE
.�R�.uC�K�ɗ�������"�����ۡ�r��AWY
�E	]��
omb�j�/e�?f�SX�hf�?�� �
rh^�U�?�����mw���fp����ػ��> ���p���b��P٭P؋!�v��I����/��3x ���G�������@�� S`�
�
-����j'hj��X�U�5@��¨#񥤆���5��kx�k� ^��]zB/�Hf�����
,d~Љٖ�@�ˀ�O��&���|P��:�t^��;5�o
-��@]
��a��\��:$�d���w�X���<sc���Ϻ�W��� �[�����g�Cp�$�S���HO2R0EP<�EY�,��$�<D�ߐ���~�!}ȳ%�.�9
R�R
�hͥ%���2h��N�K�+*��t�~��I����M��ҟ���#�e�!��Xb?!
G	��,�r6}Bɔ�ȢM��v�>���NR]����%�����
-RJ<Q�I��
hB~l!���u?B�����3LH�{B�̤�)��
!����mY��p>�:�R�p����U�u~�ߜ%
�H���x���]��/d�����Ϧ�{̽� �j�
	��~�O�9�^�D�.U��e�纍�.O<��Ot��c�
��BT���Pw��k`w%�襸M��t�
�����l��V�GK��f��#d�<3#�K��w��a��5,Ն�!]�j��r�}�v�a��2
v�7�Ἰ�}[��S-.��R\�
-�@��!�nӀ\!Cu�~�a/Z�lE�Y`<
7"
���{���n\$n������
�q͸A�h�?�����J�	�ŀ2Ey�uŹf�)�4�S�6��b*�B:U�l�|�
��	2���������ۚ�0�#�Z�ŭ���	�i��4�UT��$�w�T�9S��i��̴MuڴWUb*P��ԅ�J����c��
������
~�
�2W
����:b\Q���q�}n�E�%
��󖱢�2YQj�PYl��:e^��Ɯ�>iNs8a�r8�.��h����v����O8
2��
0��|a���j��|�t�m����GF8BF�"x�Y����;��
��ը&(�n��1�P
�O|3Bq"z����Q�t8
�/ǃ�K��G�h�E����2
j���Ī}Eb�'
{��c\jl!�B�!�$K�@$6�Ib�ر@��
�8��X$vl'�
�Y&��v��L��=i�&�I:M��m���43��3��{�y�9��^�+b?uU�L�$�L�(��8/~�?b.����J�Ϥ��T���J�>
�F�I��
��l��
-|,���Ki� #
ޖ�_���LA��YB	e"�d�D�
�G_���vQ��
����e�
sI��Z���OKB����/yȝK��3��kFJ0��}�n�3�уL̽�{T����
-���r��r\��9��f�W��
9e�AEE�r�5����� ��z���!֜l�=+;ŝ�\��2��S�����	����cr��0G��Y)
kX��P�!�J��E��Bl� k�d��J'�+RR��D�.0����ԓy����	��5���
���L�G
�a�Ÿ!�5�G�h@�h@�DЯ$���a!�0���\̜��
/�񨻍�(#AḦ́˚Ͱ�y	�4i�ӥr�)uQ�L�6�Wl�zU�DQs���=\��
,�
+����
{����xw�/\����:
	>�ul��G<�>G~���=<��𞍄��r9
��8��	�z1iV�I��E
זƌ���3�SZ�
P���J\ܞ���x"�Y|RԡZ�oS�'���&��>Ij)�{|K	!hQ<��� �0�*������A�-3�^d� h��E����0cJ!M�����aCq�G_N��U�{ʭ�.m#۩m�v����4�B�fFԤYJh,]K���N�i~�ɦ�[���ڴ߮%�'�7؇�� [...]
-ӏ�J!@xU&��K���>zpu�6�͘7�9��o=Fl��c�
�61�]�A�SF���4[˩
�
-���ʪ�n�X�;��恸J�q��ʟp��|����&]ՇȗIz�"���C�G�/�_p�3��
u�
8mx��
8ل���ǚ��y��RH��G�"��^m��Q�lF����Y]g�Tֵ�L�}q��q��:����4��6�Z�G�H�X�#*�qe�_k%xa>�}� g�6ּ���: �:1wv��w
�Ҡ�Mζm�֖Ljn=Lnh�G�;
-��-����Ze��ij�g[���nAYè��>_b9Qe5���^R��s|�^���b;�Gxa��}x��&ּ��+�?�1s ��[ܮhhw���~�{I6W*�֕I�v�FVvǘ:˩��
-zy{-�����ns�[��
-[gD����<G(A�x�sB����<!@x���!��=��������0�
 
Gܽ�������[�f���
5�HU�R��Oa�-�*�-�)�1�������U����uy�J��8�{I(w�����E2�g�,׿��.�/w�l'�	���3r�,��{a`z`�Dl�e��x�����$��!�v$��ɏ(VG
�c
-����A;=g��%�
pd�)^�g�/=vE��'�
�� }�	/}��J�	��z�:�`
�?7�
��8^�`�f
-��T,�||������
(�I*�r�/���+�PNi#��*��&�b3&[iRoC���yة�5�A�[
��S�x�l�8�:8��0wp7z��wa
� u�O`f 0��N��IP8ς�@���2�
��!�< #�y䌀�"�7DH�-�i�����1�����߿JK�ߡ'����}G�w���Ef�rÍ
`��X��`b�u
��� �����dc!#�i�9H�����Њ�V�IW
-IV�䔕J��;eߊ+bop$rO�T��२]��Q;���v��.z�2��,�c�)!��+���}s � @��O�5b,+�<*_8��5e���
- ���wu콚/�$�'���!�
-�aG�J�
j#m
yH[C��C��/l�A޲�	y�������_!"�[{�e�_D��}d{��
 *P�t
 ' y
`�� ;oQ`뛌��]PQ]y��7}fPPi�
(�
���PP��%G]O,I�EWE#Qlh,A\l(6tQC46K�b�z����.�ݏ�wO�w��p�w���w
<���(v'
܋���H�>������dZ�$�E�,��,�si
�J����g����|XH�CBr<(d��s
r��뀯��hf'07��!�_��R�����:�W��Ɗ����2��B_}�(�VM��*
6U����	M�	�
Me����0?������;�ϋ���gns�e@�@�Ӏs%`�����-T�MP^q��7�W;A�T��(���ĉ�ff>X�x�kU@�c^_�� �c?��\��p/0��Q�z
:��U ��� �e@�+ �n:Ԥn���ZpC��͐7�݀��3��!��/��o)�ca�؉����?�DZ��ڏ��CK���sw�ُM�>��0U�﵀�&��Ѓ�
)yo
�c��������ܤ���Q}�E����.>o9����G윸�����x�~�Q` ���:�ϞWX��x�}�ͼ{�~��⦆��5i`M��󞬉�"��C��FQ�
��l�`��.~ �� �<_���
��@��]�Q
}F�i
-ͦ��Iٴ�6�6*��TL'���;<�wx���Pß-����l
�٦-��/����!�9M�J�%��rh
�S�a�޷
�q�%��Rճdo��6z�'D+7�l9�����/�6B�B��Ih��Z,����=�eB
3�2��X�'(ar9��
��!^����H����3DG�����z��p���t��s<l9
�a��4	��3�F=��@:^���\��'���WmB�� �T����~�mU5n�
��5jmjt�6�����2��� њ��.l�?�%��I$�?�K�Qxj����0
�
�����
�qǰ�
p˰7
�Pk؏�qT���!�ۿ��@�IHT� �ӍLMD{;���m���
^
�hp�g-{��e �;�m�1���j����)�N
q�i).9}�
Nkp�y�:�@��^T�
E��y�lyW*s})��
-鈛��݄�p#�?��(Iё��e=>1�E;w<��;
A��&W�
�E��8�>
U�Q�1�=�H?y,�NxdJ�<��2�u�Q�-R��.�����i������OeE�B��v�W��jz���/�+�/�
x����=�K{+�~�rK
NX���2Z*�L��-��!K��e�l�%]�ϒ%���#/����X
-�|�*
-}�)v�\Ul�Sl�}����M
�bc#�?4esZ
�4����tU���
��\q��/���Q��]�}��IE�cd�����O��Δﰦ)�[+�ZW(7[sU��ͪ����
�#���s�5�����oP�t�U]�*������60�>��k���t&T�� 
��Q
�?w����Q�=F*N�m

%�
4N�)h�"/����_���W�f�Wdkr6h�vج
�o�"�nY�o�̠6AB�m�А�c���̿���B$�Q��~<�)p0�
Ea
�W���
���HiC�x�ڰ��ܰъ��_(�{NV�
��^
���
-]d��L��k�$d�>=�H�(�aAh�a^�S}ZO�#��=�vn��4ݛ��jfWpj/�s'Ϡ?FJ��׀�7�G�bCdr#�H91�������Pf�
��蛤^�'Y��g����i���3l�z�2�	�h���8;��8�������R�}J_�#�6{�܎ ~f������췏��l��:l�v�ژȉ醕1aRVtYFt�b�aʅ������&-j����i�ّ���"�
)+�G�7N��i�q�4%�Cr�c��G	;ғ�=�F���� ��Y���c�P�'p��Fn����XoEF|��
�O� v�"-6Q�͠���hfL�ΈI�M����=ߐ
�e�
��41z��W�
����CR�[c�@a [�5{�砚}>�������)8��	
-|�`BV��
����`)-��,5!Z>���ʔ��U���L��M����
7]?1n�ݗ��bW����q\�>���r�{�c����
;ғm��|/�����#Y.��h=?g�o�ÌX<�5��/�e�����
��
�GAk���!�
�#@� 
A����z at T�Bt]O������Za��]��-3�um���n���~���L����
_�|���?��~���i����扫t�$���))2k���89ǹ0��Ւ�J��T�2k7�gk[=Lڃ�Y�S�L�^�&3iH��$���%Q�S�����{��
K��r�ٻ��>�5��`�:�d�1�U�K��k�R���$iAz�c~��97�⚣[�X��Vu���

����'4i��^�ԛ�4�#u�NpK�	J����?��sY�Ij�����e�C?��1���4�Lӱ��ظP\���!?k�Ԝ�s���r2�\�
V�A�Z���w��mꔌ����5I��^Z�
��Iz�-Y/(�b�k���ی�8���(b��q��1;�¬A�y<��/��
,���Ź9�$�9	RSv�,3��_nvI_^,י*�)�
nZc�:Ѹ�#��M��&�����x��`�D1̧���L����ڿ���bI��c���HQbQ��`
,��-�-�)�,Q�L�R}~�,=?�15/�99��U�W�H�]��������k���=O�yƘT/6
*��5
�a�pݝ�'
��恥�.���8Vr
Vb���k}9%�`*	BfI�H_�P�f���Z�I�W�ɖ�09%[\�K�Euʘ�-n�E{�#
;�E�<]UG��
Q(�"
ed����\�g��S���V�k�z�e���r9�*�a��GF�4�*CD)��⤊E�Ċx������L�ūr��*q�*��/,ۤ�_�[^v�-��,��-��*�TP�[�
-m� ��
t3��� �[k�7ֲ�!%u����NH��@r�Xh���v��或�E�c떈cj����
iDm�lA�
-����sk]C�[�WQ�T�YR3�YsW�Z�א�眧'J�#�o�n���
X� �L�m!�Q�%�#�41M�����pQD�"т�qx�N�hrm,���X!
n�w�ݰ�yf�a���^�
�̨��<c��<cY���<���:z@�-��[����}����,m"[\����mc0���lA�k
E�m!^�ŊBlI�Wm�,[�$�V&�޲�aZ�M:��lJK�,��#Y`�w��m�,`+�"8s�9?B�6����n�f�
(�	d�҃�@�^`n���J�n��,��쁘a����9x�
�i��0u�S�-쳊&�k�������O���/�Ƿ+��g��
��o�s���~��dܛ[�wq
��:hg��X�1� 0�0{��RL>�¤c>���	
�x�c&�;�b|G�:1�S�����Y�Q��1��
#:�����������A�s�9�����|�������

 ҩw
X��=|�}鄓���2�v����
��q��~	�� x�́GO4�=ˠ�5½�
-���P��B��E�E(z�<���(O=��޷��z�]ɸ-��w	"N !���
���t�;��<���
��J��i��7N}���7
��PH��I2$�9��CԿ����p���;�����7�q��BƝI��S������
��
0�"��@�!�tI�e���Ko4pe"
�WX�0��/�#�t�pL���.���#?�o0�5�w1c�b��z��x��;��~����~	�3
�' �M�J��p
�T,�=�/^`Q�|9��Y0�y������\t��$o�>r�|O~|F�!����Dϵg�/P�d�c��E]� c���An�ArKĂܑ���
l�X �� �Y,?`���/�G|��b‡h�E��E>{F)�[6S�Dϣ�
̘.c�	x�6o�>����&��w	-C�}1���<%�ă�=&�Y�E��y<�����N��
�>Cp
�m49q�42�,&�$�� Ud=�LZț�N�r��
����qO�?�/
�
-����z%q��x:�)$�D-�"d�%
d+�A�Pg?u�1��q
-��
�x����k������%w~���A�E?4���t�N"��|G҉�X�y��8�&>y;uvQ�
?� u�R�8�ۃo�>�?��pn�A��+r�7Fx@�q�nT
�\�9�C�41$���[���1�j�l��f�4�h���:�Ӆ/��u������<��;����H��T�}Pem�:�X5�$
�p
1$�$"B<��x-�J=pQ�깞�jkkն�V�c���uW����m;�
뻏��:��3���̛���~��۴�o�7(S�韮W���_'�}Ք%�CC�P>"�QmCT��oB
-~�Z���C�
�j����]�����
����FҊ��6\�l�U�~\�
�_��qQ�
�
�B�Y��OU"��1J����� F* �!�zR}��/��&4��� w�
|���kuW�a\Q�Ɨ����#.hV�s�|�يs�=���1|��
Nw�'#
��k"�uq���
�
b
���
$?��-2�z����p��۸�%W���b7;>��Ź�U8ӽ����z4�Þ�8ٳ'z���^m8�k��:�C�O�`�k�����O�]�"���_�ǘ�٧����1�-������O$.E������&�꟏Q�8�Ñ� EO���g`�
f_�BfO�r��2�lav
��lp��x�ix�m��7�1Fd7�w_A
B>
��'����

]��8\�Q�|L|4h��9�'�6{�6���`���ٮ�f:�S�-ڙL�v.�Y��ݤ]�n�nb�kwr���ܺ!g�5C��V��_>T�-È��G
<&�w銿6��Z�Y=��[|0,��Ga_�p�ҍ�6�	[tyجs0�t%�z��m��u�:vMl�*��[��/�m�[b�J���,ѝ�.�ݒ6�x,m!J�?���
-O��?���$�[F�M|@���380J�]��b�^��q��!ވ��,fM\�2��]
Wʶ�UqK�����i�B}��Y�HҤ_%��o����5�O��W�����̸��񢔐��O��%R�k�L����!jy{�Io$(�'ClH��&���$�%���IfQ��mN�pM���<C��c���6̔6$4�f&,�'��OK�!�O8��3\P�
(�$>�$�2BZ�
-��
�P
��)Ҟ�s�=�n#ڌ2��tŪ�h����1hNMa�f3sR����N���a��C��1,�36
-��K�5����e0��j��*`��
-��G11E٫�` �S�g�����~+�O�fz^��b�)K2��9s�G�1s
Ӑ�����c���
7_k*�ԘҐi��:�A�/�OL_��LoWU�P���Q����*�L��,Ch���>��rp:���>�i��B�z�eE6�l
�r��1�M4侍��>'������d[�P�����JY�Ҫ��2�
��ܤ�W(��6u�y��8�Ɠu��E����^�W�(�6ҜN`g!�XK-	�5?O�Y�=1#?��o�v����`��
��UyvΟ���-R�%(�Z�B�e�“�LU��Q��ݭqZ>�8,�;9,?�
y�™'ʝQxɷT��d�8��Gڳ�����X@~�*P`���ڢQ3a�6=�$��fb+
-rٲWZPėX}�5 +��	.k��a]��[׫m�]���NV�M�_j�UTXE�
�gܤ:�![G������-^��]4�:��u����&���r�D�����i�י�;�����

^��Q%��k�}��j_�
ooU��wj,��\�u��b�����3���^�

��w��Y� �G���r`���C��3��}Q�ye

��1L��ȸ�f����nowKlE~���F�/zGn)\��)\��*ܮ6���,��x�2�Js�� ��KtNR�S��*�4~�$�'���j�+텒�x|�Q䋃�7�q�2�	���t7���畖Kr�!Y�w���]���Q�{;Tiޣ�T�ď��Q�V"�_ <�3:�S
�P��4v�������N���O�~%��npUF�Q9�F����X�Ҙ��l�Ri�r*
��J�$�?I���R���F�*Er�Ve���*�I�X�P�T!*��E9!�{�:��;)��`�Tҝu�i
�/>���aB0�H�������1șld�B�Lf(�5�
\Z��O	N�$�I��2Cp�0��]
<��^P�U� ���T��$
-�Q��S���o��&�7
h"i4�L#�UOs
��:
��{�\?��a0�G!=���p:c
�0��66)�a
�~nL�>���\�yT��Ɵ��3,�
-ʦ0
�'�-Dk�$F��5
O46�5"�eE�
8���H�pj�%�����&*.��TӨ(1�>
-&������y�{������E���
-�9�^��٬Iθ�I���&9]h��Bm���^��]�u
�
KY�+Ǣ�V��w��dX�'���!-'
�Y�0�����0������g
#Y��T����:Ga�f)�r
-�/�lV&�TƜ�Ҙ�Xe\*T�%�R�=PC_7f1�&��y�e
Vr���� ��d�ia���=�����H����>}��BR�8�Ο,�$�}�o�ɽ��X{�
c?&�ؾ�c�~RĬ
�v��yw��R�@�Դ���`5�G�Qk�׋�W�I%
0��PCi4�K��+MA/�@�t
C�c4b
嘆HG�;r�X/us��
�����Rغv)�XH�k�����}/�q
�;�z�8���x���@�M�i3_�pz"©G�3�*�ViDhe
-B*"�r8�*Ǣk�$T͆U����[U}���V�<��B at _.��S
}�YԞ�qp
-5�Qod%0�0o��6 r'��Է�%�\:�+���2�A�v���k
<]S��ʄ�e��Ue]#9K�@U����
�{!�m����y�`<5��X:x�k���7 A�z��>�
��RS0�\$1θل�y�Y��<�n&� �;��|�&�y@�/�a�����r`:}�@����O��=@��@�A at w�:(�����_��h�
ʹ�8C;��2na�oa�i�&o��-\��
���?$O���9_H�g� ��F��W� �
���c��$��9�ϒ����j6@��Wz�BW6���
.�Ao�
������ʢw����^����Kr�����N`���'��N��f���nu�N�_����_�o��JV\Wp(y	��es̘|�A%��zp�v�ccp���>��&�7V
lc<�.=c6��$�z
�=�0��8�����WO]�
Թԩy��$�&ߓ��Bwp_��<�v
�1=H"a�,h�`1���0肉�g�0�P�B �D�D�*N�@�#3I�"����2RN��N�@��I<�7���>F;~�v���[�.�vB���-�ӎx�J���d"���%����"��SB�
ԩ�N
5j�{� �q���|�˿�C�?��N��?D_/����b"���Od
-�fRg>u��
�p6�Q��)����\s;SU�[��wh�W��p��}����+�\�D�� �Z��BӅ9	����H^!����M�?Ө3����m��&�SǎXC
56s�jn�ݸ�X|��8���%�:�U��j-��
�@o���X� �^�z��XH��o2�
L�7�7�Z��3�����X�
Ȧ�
-��󸮥F5*p��hf,Nc<�Gi�a����&
���U�nO�G;���<#pW��
-
.+���m�W��s�)hQ��窏pJ�'T98���Qu�KpH�nu5��uد9��
����:��P�#�"uO�
-�v"©
�A;����*<�
��h���?��p�{ �}���X
�N�!��pkg�I;��,��.V�U��OuEh��u�]����.�)l�����m�
-p�-/ XbEw
�(�K�e
��*\�y�>'���Y@*������o�1�zuAS�;hv�cG�bl
^��;�C�Q�	��T�6`s�Ql
-���n?J�p!���!��
"���'��,��Y��<���
8�}�h�HBm����cj"G�:r<�Q�Q�ʣ>Ħ�
l�Z��D����B�4z�T픊��51n�(�T{G�����U
HOi�c�{��W����T^o}�kd4�h��g7��P���i�h�2�X8
Pbx�
iuB�T��#�'�I��b9/a��2a��"a���xF�q�-EN�cEv���:Y��=��k�=ן��@�|��U���߶�^p�Ħ�X��cBI�Xc�զQ�7���4QZe���k�!�0}$-3-����r��P�e*S,1mU,65*�N*$�Pf�)盅"���J��C�ơ�q�s5�����>��}{`�%v��,iȵ��2��j/e[&IK-��Ŗ兖
y�%[�a�)�-%�y�j�ť��e
�y���ޙ{D
�K]
�q�D�pFf`��f�����D�
-5.�K�q-�5z�X��Tk��Ĝ4�mz�5m<96ij4Iۓd� 1��w�=�<��������/�*�&~,�$~#�$����h���������he��3x��9[/ �
��)�I?-�8�7��`�s�l�ِ'<kp
-��
q��J��4u��4�����]R����՟�+
o�z�WryjH"�>
�|�z�e�m�A6�G�#�����ulI�����1kLs�lJF�ɄU&��3-���X,V��U�ZM��I[a�(�w�
c��m<�+1�
Vl�
y�+6��"SH"���?�7�w��g����:x��u�H?6�#��<
M�Xm�E�%��4�X2�E�Z�
-�S,7{�2�
-�ۼZ[b~^*6o�]���B�e�Ka�?�����L�K�^��Z�e��}%�s����4���k�ah�E��I�٦���*�
�t�۲�m�Pj+Kl�b�ͫq���ֵR�u�l�����:��l�sm�/�Ԭ��k�Cz�����u��]˸9��D�q-빮�l-�#Q���W��
-eʔ$�#J�L�HY"8�X���r�]���+~)W�$/U~��Q��)ʅpEy'<[���!
����܃�Y����ż�1t7����|�ۊ��Q��B��Ru&����T��@�
j���:�\�L��5�
�IRԀ�Xݭ�R��Y���Vx��O^��YՐL��ܢߗ�u���J��@�o�/��K�} J�#Pd��c:�9��p��HG�#KP
���X&.q�5َ�,G��jo�2�;u���q.,�q3l��>�����P/�����^����0GO�4l��^\N�G�V�
G�3
-���w>�<�\��$丌X���]9�b�C��J�L�Wcq�Ҧ�6H&g�lt
ҥ�^ե���Ou��o�4gH꣰�+y|'��{������X���[�r

z��TB^i$��1�qO�➉ŞdyRa�X���,�|!�S$.�T�FO�&ͽNkpo�R�
r�����F��I��II��>�KB�^ޠg�S�@-��H �z��������dW
BV�HX+' �;
�<��)XTe��ʆ�U��VU(�eb��NL��,�n���
��{OKqޫ�)��ڸʐ6��'.��S�8\�>����8��4�ʕ�]
�
\��n �
��~
�OF�o
��}�H�Y��S��s	>�����Ź�͚پ����S�X�[�����hb�B��ڟ8�
t������f`���5�
���|?`��
�4Hn���X�<	�S1�?��$��0�o�
.f��0��f��i�������8�Y���c��c�
�1������Q����u@�fύ�C
PD�3I&s[�1�ef��ƌ�hLo��i�q�ڪ�3�fL	(�
(@L�
с<
؈	�=x*�)����`|�W��
�~���K����wQ{s+=��o�^�[��6 �Q1�L�Lj��ۢ0�m,&�M�S�X<���`*�30���`1Fk��Z��ن�;�aX�"��FԎG�=�a��֐��Q��e�۩�B�F�T'������%`�^ v�����>�ۣ0�}
�ڣ1�}�t�'i���;w,Ǡ�F
�؂��
h?���[?�
�
�C����Az
dݛX�'�$��b��_f�1G�
�	D��qrº����+RW,�]	�Lz?�]<X�j�z�bNt��x��|�M��=�|k��[=�tw yG��_ )����h�I�
;
>
�� ��|��d8pa
�D8�vs ��0��C���K77[7E.��
̹��3_�oI��
�}�^��3��v�i=�E�W��G���A� �
�a�:-� �Dr �:���0�������
3�G�_�l�����]�B���G�>Z�{#=�`��7����ԧ�_�_��	D�Q��ԾI�@�!�j����{����r ��a�C�я
 =��aO�p��a���Ȟߓ{��G{]E�
Y�bj���٬5����
{�����#����|D�c��1=�GO>
�g`�|C
�x���/y�=dO
��4��
r��j��b��E �20�*��;���o����!���"\>�'u�g�_���K�H�
���2�������kDT��}
**	��EZ��n��nh���YDQ�A@����B"2��b�M0�1��rRV&N�RV��8ff\*5qܢo~�T�����������{�=缤O~���l
d�!�H����u��'3�en��� ��D���ٍ��^ӉYD���d��d�"�d3�Av����t�S�"�oq?���x�W���?���"�

����~�
�1�
1�t�K����l�F3�`'5ڨq�s�s
��g�#>��mj�
O9z�<&�ȿ�?�eg7�N�
�&��qd�OT�@���E�ꬤF5j8s#5�P��{8g;���V��!}� �i�_2�:���2����G;C
5��ķQĝL%��_AԌ�3�s�Ө�C�Bj��F%5j��H�-������_�'�Q�B/��/�� }� �M�oq�~�$7� �
�/D��Ác�
��9}�r]*|=�c\|
ur�QD�UԨ�F-5>��V���9��w�d4��o鋫��˴��
���wi0Z�"��6�;ٙ0�eG'�\�;�k��B��q�5��J�N&gͣ��p
�y]U�
-��D���h���9��Y��ВS��G|��k
w�ql���C�y�e
����
����o$O�^17�����x�
��Ұ,\p��9�b�u,Ǚ�U85|z�6�S
�9�G��#�qGF^��Qߠ��1�]��
s�h��!ȓ�����x吻|��!�+�ȍ��p�y~���.��
��)�D�pM�1�lt�-C�[	:����jt�mD��6
to��O���$�x�m�
��}��qo�c<��6�WL7OfRߛ� 7�0
L.Ot�%wW􎝆��|�=^��	�����
���}��`��M.�k�:�-S��cJ
�O9��S��y�l�v
M�=D��+4x�B� y�4�����������O3
��:
-]�&��s6L���*���g��sf2�ϴa��R4{b�W��*��U��Y[Q?k�P7�S���+��}]��s_���\��u��S^���}�)����ZO.���;�
��v{{b��s��%�}4h�1��'
>Vl��D�o
j|�P�[�*��B�o��ηUX3��P>�G\=��X6rޏb�|Y,y�P<��\��{-��]�~�t���S��\ `�<Wl�?Mz�a�?��T��ӡ�ψ*?
*�ұ�/�~�j�R�̯B(�oJ�w�E������}bA�]iY�b~�<@����}��6�/G��d��&�8��o;蛦 g��G�B/�*h>*�a�R��J=ʔ�X�LA�Ҏ"e��BY$,W�
˔�b�r����+-]�--YtI��#e?!��,�C�G�߈.1��0�vƲ�1 -Zָ��.�	U�c�6��C}P�U�T:��(P��L��<U��TU �ʄlU����$�U�%[�)=�"-�"-��"5���.�#&���5��
����C�����4Ўʈa(w�ʈ)(��F����5�U둣�G�:Yj�`W�	6M�����4��U�*�h+�"�*,�_�(̑o$s�,Y�!�sG\�{��k3{
���|n�{
��kEG��0j"�^����m������`���� M�.��r��
-1Y�V���%�n����P�G�Q��o(���D��1
r���q�)jw���ge��g#߫���v,vF��qX���L�l� ��C���D�ހd}"�
��Ő-$�
	�r�d���
ۥؘvEL�i�!�B�w�Ȓa7xP�#����} ������v,5�@f�2�Ӑf�ո ��`X�j��#1΄����)�	�q�D��Fԛ�JѦ�
-��G�5]SD���2��X��{���sI,���βoW�Lj9.�]��Þ��7�$L�%a�#!1��p�%�`4kN��l��<!�\*j��b��YҘ�Kj�	E��sE��>y!E��_H�����^����X���<�j���
�#5Y�%�	�`J�c�/bS`H	�����D[��ZӅ(�RAc-"�Ub�u����B�Ǥ��+Rp�R��9����_���P�p��|�	l6�
-�
iG}�dc͝>
-1�c��x����@k[�H��b���[f�B�+��:q��#1��&.��헥��{R���h��2�q��<��3I��+�s��#k��v���x�a�>�Y�=�D��lvBP&-~�����,�"d���%�Ğ�X��VjI �5bԴ�c�1�Z�i�C��vZ3�\��o�1\r�{��y��{����lb�>Kz	�4&�Vq�.�]#�4"!R�hX�0�&>������'����dӀ��~��M}��̽������5G%]3G%>4G%��V��hd���e�T��>`
- 3��8�E<�gTJ�&;iH��bR�48%LS�h at j����T����6Q}Ҧ+:m��Ҳ����+���3m�),�)t�USh�Sh��d���Ar�Cc#����˰ 
Js��z��2������gکO��zguStV������_ٱ
-ώS��	
-˙�М��SP�E9k�S+��c�͹,�����2L����/���R��X�ݲ|އB���}��0��	����f�8*��]A�
-,
V at a��
��Zƨ�e�|,3�mIU7�"u����e�<-��\�Ga�<�X����|�"i
z˗З�Q�bjP"M�1+�X�
a��F�J�Ե�C]J}�U"ϲ(y�
�{�H����k��r)O�sy��)/�S�f9�
�C�y9�~#ǒ�r*az.nc[
5(�X��hda	�V�>���c�F�g��W�A+%��r�:���!����-;k�l�q�l}Q
�3dcMW���2U�P��
-#[y��L���@��^�R�E7�_W�?7Hq�؃�R�)`+�5�o�
k��Tg/S

��
|�!��adg,���@���PՑX
��uw\
����xº2�����s���/���)k�S
-܍>i��
ޖl�oaHa1��~R=Ci}_�
CP
������o���,^�Ç���<�OXI�-�A�	��Gh�Foz�<�^�Òs�dwT2G��vN�I�8E
�a�g0?�:Ǚg
-�hrM�@-�H���|
-�����/�:'����
��֣��?��<!9�׉���s����������E
�%o���*q|�`�	N3
�����sѼ��&�'����gS���y\��1)�
�OI
����ԾU�C�l'F
h��§p���Ĩ}�j�0,����]��o9-4�^�W
B-�I
�|�r�v�w������뇮;y:\���X�J��gp
�_۪�p��{f遭�=5�����b0�
)�T��@��63��8=��
/�0q�L�Y0r��C9�+l�����n�׿(���O=ҏ�����w�v���Wrnǥ=� �
#`<L�7 2a!�/�c�'�Dc=Pڦ�[uPt�s��3���?��v�V����Fk
��������"`<���g::Ih��;e��EEh���*֯`�M�����b�Fݤ�u��r[׈���>��<ŕ�l�d�l��l����j֟��%��hMFg&����9��G�E�q\#���d������G
�
�(�+t��|�+e���`؛����
�=�vE��Hr��sh�@
���:s��t4���C����j�Q�N�F�i-��
9�c<u�j5�Y#
-
�Էc�b��z���;��#�w!�`��sqQ����D�ʪo�1G'��
�8N
�!�#Z��kuX9�z�Z��{���K�B����A�S���y�[�x݈�:��5ud]hA>�֋]
DN��g
:��C�GaoA:���N
:K�(g�Jm�5���b>��
�i��-m��P՝
U��|�Ǵ��
���U�����l';���c��WC�(
�<D�l��v�vڽ�Z���n��dm�����
�ѡPV�bU;�U��&�wܭu��Z��;�r��r�G*u6���P�S<B�+��������� �'����I��N���U��	��~��2\�\Fk��
�r��
-��Z皠�n�Z�6_+��T�[�J��U�^�b�Z-�8����U�ק�ty�������k�şVۓV
ɵ�׈`������z-wV���6z���k��u���F���X�vQ%ݧh��
-�N��T-�Β�'_>���N�z��M����=�~W��O���2��|�u{�7W� �� � ?w1Ԅ��Z��Y�����?T�}�40VE�q*

�����
zM
�f*7h��+;8WY�E�Y�y!�
�GsC�+-�)%�)��a��_�ڸŵ7�+x(��0fl�#Yi�k�͊P-
��%,@�=#��� ����^���+e�O���iJ�WZx�R#2�
Q���>�����_�
-h- Z�E%�Hy!�@$� 	�$�BТm����������N�!��Z��ҭ�͵
{������3��n�u;�֞vN�Z���!�~��>��Ͻ��`͊�O= �S��&��'�,V��
iw�� �$���uL�s�������0��^5���K>[R��)�G{Z
-6�g�-=��X�a�ڌ
-��pŸQ��
?|�mX��
��
-o�^��:"�Y�D��X��\�f�!��U<ຒ�����X�`�d?���|���lΞ���H�)�E�k�Ӱ:;�9:�rLh�)GCN�9u�����]���Q��-\ʰ�Q�j�IY��̡�T�P/
*IT�80��Tf�?گ>����8�b
팣E�5�yhV-�O�

j����
Q��`e�
�<�y
��[���v���&*�w
��_�4#2��]Y��&��H�4c�O�79��rZM;렂
��Ʊ��	�_3
��9�j���&c�6.�N�
�:�t�p�Q�����æ_/��'EY�QZ�'�
�̆wd%��["�G���+��
���?X�u ;i����&
}6��0�(�
�Ӱ�9
�lT4�
-a+,����ƕ(5�`1��h�(.z^��ɊLC2�iTVh�#��H��Ec�[L��y�B�~'���Z$[��s���8ܦIp�f���
-�b�L�a5e��X���X��0��QR�Bq�*�[`4����(0z�Od:�y���c���/"ɴfI�����J�G�=L+���s�����3���Y&Pa����0�J�R�
si:�K�0��PTf��̊��ʽЗ?]y��X���}"�z\�lo�T����Be��(����me-�r
��A/�{"�z`-���]c,�M���b{,��KQhO������|�+��U�A[Y��J�*WC]���[�:��l�1�p�YU�D��+~����g9��� ۀ}M���.�G}\��fN*Kq�C0TGB_
]�"hj�!�&y5*��P9�P:+��Z�lW3�
�tu�
W�H�=*�gDj�U�O!wIB�
�F���s�/Qw�Z��ǀ'Ɇ5�y���0�(�Ȑ_�{��8���C��A�G�L�	�V��;�V߈�� Vx��2oR�/#�{Z$y� ���H��D�G��qK�U��(���=�C�$	�s[�*�e^
�O�o*2}QH��GZ�"țR�ڔ�M*,o6`Y���UHj�"ѿK�[�'���?�����m$4�CB���$�!�s����;ڹ��'�Z�g��[#cR3���	Hi�@R�
$��bi�,i]�G[Xܪ���		;�u�
�Fl�
�1��1m�an�%�
�¼��"�EB̺1�q�}����~��ux��@��s
`�3]�9 �;�v<���Y�휋G:㱠3�;���ż�
-�������
!2x��Ø�����cf�0k��}6J���s��l���O�\�<�N�DI�d	�%s��"*���\���$�����1#d��SC-�ڊɡ=��}
��c�ӟ��1�K��mc�q��[���g���<؎U�`
�4��
�H�v��f�'`Z�
L���p
&� �4Ba�����{y�����,�0
�`=��z���
-�bc��'.���.��v7u7R�j��<x���d�����L{�}h?�o?�p�l�����
�
���3��`!�3��
����n����pHB������\�}�C~�F
� �3�0��G��y
��
-�����da
C���8�8��M�/�
�#<hFXH�L�0�����o�M�	/���s+���<�^f
�9�ZF��!��0�0�g�~���?lJ�2�Ǜф�m�����(/�Q
p������a�AF����
��{��|�gn��8�N�_��I�fs	g�&�EMN����8�/�%6I�f��
���s� �_e
����K������Y`�9�ϓ�ɗ�[�3�M?j8�b�NS�,돚�Ԝ��q-.#�
�²b���G�w��2�)�
��&���8�o�M�-^|�x~��w���ͺ��I����3��s���G��ԍ���M}�c_�����3�I�B>#%L-[J������pm�c�r�����6��0��%&^��J�����I$�"��|�H���L����8��x˥^ȩ�I 	�@����@ 	� �\*""^��b�2T@�W=j��>gm��t��]�3�6�v[�����N��vݦs����T��|�?D�~���;��K
�N�H�#�H3i#ϑm���%��1|�I�1��G,�C�����y�|G
���3��y~�g_2��)ѐ,�O��"Ưg�F����Cld���b���O��aj��W�L�� ��#��>��[_0���o�6��9�aOƒ	#5	&�$�dP/�:
jT�ι_������72~�w1�N.�~�v�p���:��k��ߤ��0ڍ>$���<x�0z�
��oD2�D|�Z|	
k�F	��5��Z�o`�&|B7���q�ܲ�� W�8�_�U��m��/��-V��
-WțO!��S
�\�Qs2s
fN��KƟ�/~�l�Q@�RfV�_�ǻ���e���}��Ǜ��N؃>��%����q��αRg�r��r��
a�ga�������oj�^ԓ2�4j������Z����}\��
�q�>���)t�vpg���p/�/^�_ğY�op�j�G�7�0������8����=]���O͙x�ԓ3��I�<�87+]J�j��bf�@�F�Rc�n�)����C���\�v
�
V��{�k�4���W��y�?
��C~9��wy�D��)�B�8�%3���/
D����Q���U��^���j���M��
]c:�u�t�=���'�y�e����&���I���-`�S<��m^i���:����?_���
���|px\L��މR윤B��=�Vt�8��ǃN�2t�T�9�%h�]�g}���w6�vc��>��
G����c���h�"���x^�Q��y����1��H���}^���
�Y�:9?�"�� 56�qj66Lub�TZ��GK�B<�kW�)h
Vub�]X1����e��G��;���Kf	?�6��I�:�����E1g
~��
s�7ڧ�mF���eV
-����5�f4�`Up>V�.���X6��!�QҌ%!�X
�5���0�<�_Eu�g��x���G|L�w��
-��d*g
>��
�I��ǚl���)X>�#��"B���T�GP����\,�S�Es�a�jTϭC��FT�mCyT�G
@Y�̋ �Q�o�
-O��}�����؂
ձ�!�|�u�
iKd�煕Q~X=u1���cQl2�jP
kDe�
qN̏�,�
��Q��⟠H�n�
(��D��
-�•�
�>��.S�L�
�>{H�h��%��kS'�F�$
$���Ơ\*C�4�	z�$d�(�OB܉�(L\�|�2�d�p�:��F��8�7`O�9I�a�0��x��'29g��I���i�gk譞>�'�B>e�`���H!�[��B��IF��lp&9�H*F^r%��K����)�)w"KyU�Ȣ��(S���`����n�:ظv`�`볎>V�G-}�+Ǣ$�
�t(#�R����#O�
-�J�
�٪\�Rݰ��#+���F���¤�QsD��yUd�� _Ad�� ��s����6x�����:�ْ�>�����(�}�T"O

-�:��X5)�h�ĄLm6����KaL�A�n�6�tۑ�?
���Hc�N�A�F?�V'�.�����w��/����Z�����d=���F�. V}0,�9�ԋa�+`ԧ!Ð��
-}����Bk\�q=�L�H5
��|Q�4@�A�4	"� F��'��Aj?�xK1�#�M
Q��2�����g��L�d�L3�a���

�Y�t�
-Z��L
ԙyH�!�RU�2�d�"9k����^���>d�{|~y�0���B�c�{?�wp$�(�^ �J��5�ř��i���� h�!Pۢ�f�"Ֆ
U��lR��H�qC�Sy�R���H�o�Ծ��s�G�Bl�$v��a�3�#�{/u�+9�Tq/𹼜��<����\z1:EP�yC����YH΋D�#

-�
rGd�
$:m�:�!q�A�E�k-b]
����g��|A
#�% �9�i�?��wQ{�"��>�9*V�K!G���%�=
�B$��A���

�;��y�� ��@TQ	��`NQ#"�7#�xŠO!��m�9B�
!�H@���+9�~/�;9�_
-4��s]�QQXW
�e�u eߑE�=�-����f Q�(̸ �`T
0q�8Q�U
bզ�A�lVMM�`L�6
{b�CRc4�h�������o���w��{
xm�c�b-��fJ�M
�`�P��W��`Ř��Ք�hSE�(�4\������l�dZ��R��[��_����yE�`��o�جloCk�i�Y�Χ6B��}�3�U�XO�|)�uF�(<�K�9]����$*0��r��?w��rS�%/C�y���{I�y�dȫ�W�{�̻$C�2�0M�icv�E�F����C	� ��������]o�Ǻ����*_���c��%N�Ӑ$O��,�L�[��f)��e�\,{�d����39�oɥ�.�����߸H�\�y`[���t� C��H�H okG�[��j�V'k�\��r�v����:Z��u�
�$��M�ℵ�D�
���\���C��-i�
�`�|91��]%�^&*����YH�h�r���U6/�֙

4>6����V��v��
-�dά<Ȇ3D��$��ͭl��J��a�b��WS�2��m�zAWڄ�f�_��0'��xn����i�]�'�
�)�vba'��l�uPC!d��|�R��[Y���p����
�1�5��6��v)��4�0���wI
w���v ��j�Q�:jXG

��.@�Z.�Z�}-����K��b�����na�14���,��tt���N_tb������\�K���K��3�4@
o�/u��a���h�j�!j�6p��EN�c��$\bq�'-%��r?�=	��k�g�Y,zA����&Z������@��q��.�I����X��4i�Á=9] l�i��x��3�o�'3���#MF{���-� ~FK.�w�uN �Đ��v>Q�@$M1p2 u��1(}��\�����4�׸�7qț|�m‘��3�}�l�d�� �I�ƿ�>_{
�
[4�Ү�)���y�W�P(]���%|
��[��6��]?�>��F���C��#�c6�1��q��F�./�l� ~
�`0��)`�
(�b��J��zآ���~d�|����i�s���Y�;}�/���\��p�e�d��Z�
���AwH�0���Ŵ��}��k1�˰_�}�������-��
�:��5���5�u�]�|g��u
N� �����|�OC���x���̹7T�}
�c�
��ضa{�.0��.�S���0��I�
����v͏�C8	�Zנ������"�ZI�J��a/`߈����"ih�~1���/Ƕ
�����\M��?�
�Ч<~���b*-��a8�k�7刦��NƠ��A�Bc")��}�gc� �f�cߪ���^��N�������*�ȎSD�2����P�-�T+�nK�K���_�������ϡ1�L���4ʓI�g
�#?��EhX�����
rc�;Y�v��O^��}�5��1%�;J�U���<�f
�ȋc��Q���?=�IBg~�E#�ih���4�S�N1�ehTh���oֱ�5���HUD���R�n�|O��FI���7�c]O�;�99(o4�ыկٓ���p�>�h���i�#:���cFg1v��՜\;���
ke��ҧ.���]�:6k	�8�q�W:Dy��{�+�e� ��Pvw9��]��
�Ƨ�im��Z�q��
G��i�V9�h�s�V8��s��\
-��e�J]�*�T��N���u���A�2�_T��=z6k�\F�����X�ᷔ��a�w��͆����SUn�Z�
�
=�̣����U�9R%���3E���i��I�
�
�*4,�\�J�hX�|���~C9>�5��f��Sv��Vf�s������p��N����_Fъp��uQ��������7N
:���s���<�y]Fin��*�KU��t��ei�_�f���,�e�
-X���m2�Wz�J:��w4#������^o�c��Z�ן��཭���R�$��x�(0 at s����]��}5'd�f�
Ӭ���
MVF�TCӕ
6[3�
-5=|���W���F�jJ�Q�F~��Q�59����6>���h
@
h;��3�bʹvK��|�� �]9�ʎ
UVd�2���1��fF
֌��=Vi�)�=MS�f)�k�Rb�5)�\c7+9�Z��h|�����qݚy�����}�;����`s�آ��#;�E�Xo��jz\���kj|M�V��*%~�&u���nS5��Q�r5.a��t_���7�W=�hTb�F&6jd�ѳ����m
�/��
u���T@T at S���2�
0
�]`H�䲨1�
`y� ^�K$�Zf*h�Y�)=�Zֶɶ�v�:��k%�ִܓ����������?>����y��}��}��˚���ƎL�
��}%q4�bb\9\�0�
�-�_E��U
����G$+7ª��\eGڔY��Q5ʌ��5�E���J��Tjl�,����5����?N����ܛE
r��a
#NJ
�+��	q��-z�
-��)?z�r������X͎1*#&U��,��*-ήԸjY��
�R)��JNإ���2%�Șx~��)S� '��F�N��m���[�q8���8�G��E9�^�2LT�a���J3D)Ր KB��	�JI,Pr�\%ͪ�iV���'4˸Q���2�ː��.���;�� ��?�^���b���9�1�1�A��a�a�V٦�0�Q��G����%#�d��ɔ$cR�f%�*1�D	ɏȐR���fř��E[*��|	w��)�<@75؇�
����~
��gא�2jSH�d����d�8�̓d4*�<S	�,�oIU\j�bS��6_�i��ި��u
-�nW���fZ�Vh�<��))}�#�`/�ߎ��2z��3��2�G)�)�NVb5Y]�`�R�u���͘���(Eg$(*3E���Y���e�9�F�Y�5#k�B��Qp��
-�>���<o)8��O
(�^`���y�R��̳�1��μ�gyĘJ�
�#���
oE�LQxN��r�437N3r�4=Ϫ��|��SP~���55�U���K�+8�)s>�yS~�N�C@�S�K��o���ޖt/��*z�XlȤ,bI&�X�P�,��cR4Q�E
-*����(M+N���T���V�)�
-M�-Ճ%�4��CJ�ɧ䔼K>�yC�6�&35‹���JzY��Q΅Zz-����X҉oya�+�>J�
�+
�)��5�
�I�0=h��D{�&�3�SV$��_V�q�Ojly����ʳ��<��˳�:8�e�
��,�\��~Zʹ�4\�S����H�l�2�y
1�����!�P�&�JO���ոJ?��
�HyU%ʳ*Uc���Qe�{�"��n�[�F�V�KիU��F.�w�Z����V�mh�Ƞ�F΅ǩ����zr at L���I�����1Z�(7�T�:B���(G�F�e遺
����:
;л��X�_�m�Qg?��ߎ�����I�~%g#��=R��b����|J��
c��ʥ�UÛйM�����\��\<�l�F
-�H�-4���9xp�!̖�bhpj+�ވ�V���Jx���m�
H25��?��F���5
�m
[m
�m�����%��E��%��fn��WS��,b5:��.�_B�冴��O;�o-�W��e�9�7�6q&m��OI�0|�3.O�
�o�v�
0�na�`��� .��6t�#|NA��������s4�5�{��|��w9>k�1��>$mI���g�iໝ�S�Q;�v���M
��G'��$]���0�P���`�C@�uQ�N
w
�����+

-}��|7���[ً���O
-�FwJ�]��#y�‘���PR
���������a�#>
eԥ�8�
��t����4v7����1�q�z
��j��iW|?�<g>-/҃�
-܏�W�O�
��1xN��A^�S�I�AN�$'g����R��,�Y��
���h��m���y���׵�u/`ͅ�3�5�
b
���%��Ұ��>�Z����
҅�\��Opn��!���p�8>c���"5�ec���,�ý�K��K�f+�ų�`�����ߐ������o���O�!|����
z�-�Kp��\uC�ѫ��
�7Rn�Wos�ܦ��Hv���;��;�
������PeP
h�fh��(�M����EyEև������b�7:󺮢g�����Kp>���5�HCax�$�q`�\,<���u}��[���rl��w�q�8�%�����̾F
^F)^Bg~I� A��gX�>�?�Y�u
��!�y�aM���Z�����
��`{!��`{9��)E
����h̏Q����h�;�:��.�i�o�f��p^��'Ѻ�7/}���J3�G�����~1�`�9U�~
YK
m�@k6Ӣ?�ڵzGOѺ��ѩ�l�S��$�8A�Q�n<
��r_
w�_pY�X�;�|�r�"𓈏4���-��"el�
-ֱ���c�	��X�:
V;�؎��t����^��
*ׅ����5��
h����
9���$���
�	V,�a߆};�plՐ�Z|��	�-�]�����ɳ|k������yF�;l�ݘ؀���m����@��a
n_�L �b � ��-��M�&k��k�^�5�SWU�v��6Ҥj�Ti�ViӤ�ݴn��U�NC�����}�>�}��}.Wy����%z�"Y/��_{�O�b>
-ۻ��3>wi���J>EO
OUE79��𓣛
}��!\��+�q�~��F�6��e�������;K
�0������"�W���ҽ����M�y���ޑ��`���H�R���sxx/Yڱ�8]����c�~9��X�ze

Tt����OҢ���Q�B|�������c��29w��
x�z�����8�-��R�L��Sγ�hqy��i'Ooi=�l�f�f1����s��
����c�`4�!F�?�јop4V��c�:��W�y,=��|��`oŔ>1
���D�`1*��u���`6Ǝ��jL�z��a"Ώ�n
��h�F�0�pC	L��Ò{��_����CI"����%�M��{�M���l���b�dK� ��II�%�LTc,Q�cI%�:0,�APڀ!i
�H;0 �E�l�dcds�I^Ew�Ut����m�DG����{+�3����
w��L��YfV
�3�7C;���1"�#���#)
��/ՆC����Гք�6t�w�`z?:�G�Ϙ��2�іy�Yw��z
^�ω?�9�B���
x��6`���u��Kl�fi�q�'�
��L)��
�(��R�‚@v9��N�g�Ѧ�U�G��ޜ!4�L���E4�?��-x�o���	�s�@���Ïy����<����m��6���6(dᜡgm�G�J��*�*%��������V�@n
�rјۊ��.���>
u��Q��D��\���,���
Nݿ��{x�m����t
�M���c[:�o���C
�x�hd�j2q@�F�V��
��
�Z'�
-ܨ-�Z�K�g�1TΡR��av�+(7~@�����N<�_&�-7p�%~�X��	�R� u
d��
�h,L�G��z}j�T�p�p
�2Ԣ�؄
-c;
E즣(3�@�y6�uX-/���>��K�%�"�Y�����=r�`�w���
�p�s���:���T
�:��&9�&*M�p�
a7�Qn.C�ŅRKl�m����$��iX�ga�]�������GQ��"��}op
�K�
c�m�*q�-�$�
RG7u�2V<�U�5
�
��
�Y��f��j-B�͆b[,�n�K}0�u��l��
���ۯ@g��Ǐ�u���W�9D�($^#�
/c������H0�u���G'}�c��1f����I(���خ�ٞ�݀"G	�
��W4��2 ]� 
-�&��ZB���w��|j�'���,r����<G��������^��q��q���i��j诲�H��9�08��w�Q��A�2��Umu5򫛐W�GnMԵǡ�=���
P�}�u����W>�P֊�&�E��&�.w��m�
��
l��i�&��I�X9���㡭�BS����
�5�u�v۠�T!���ӆ�^(F��p
-��Ho����"��!R�䳈�=�%��.p$[;��x���u��w��I�������E덂�99�r(���ݬ�«C�ׂL�
��:��|H�u!�7
y�I$�lB�r
Җ�Hl�I-_�Y�̷�۴���?7�7��s,� ����i��jڥ�Z
�Qn 
Y�8���H��!ů�ܟ�d�2��pA�ф�� ;!	� !����3�
����O��q
�F�_|�g��|���
Af�Y��㼓#��VA}�FK=J�}�	io{eD$�
-	B�
�
-�
-
D
��!L`���0���!J���{��e7�#b�
ɽ6ɼ0�X�a,L�|�q��zJ�]
PSSm$;���8D'!b8��
-��-,F�I>�

d0�� �1�y7ȹf����{��5�"�I
q�
[�\9	���N�����98��<j���%"j:��Ùn������}H�WdBLl!p���!C���m�8�݉]^|v�c�w��G�x����K�zb�����%\D	��~�" '$D߱	,��[L"8[.�	[d�_d�]d�]�-�
t�B���F�d� {�����,J�&�Dl�a,.s�IJZeN�HڶΜ�Al�\�D
-!�{����\�	T���/�
�"�
;�
��
�&� 
-
-AW���F�&�%I�Ab�q\�
����ZkԘ�U��$�K�xHjcb��X�N�Ԧ9�{��,�޷|�{�������


+# 9Y�e�����4Pl
���X��&p
�?(�^�{1�O`b#=iuH�h�2ë�ϵ�+&n9̠���H<6�&�&t4��
-
F-4�fP3�h&�M4�����u���b�C���ɗ:Kf
<�pd4K�Ͱ	�͒�V��6�~
-0������r����C}�eHn
�
N�s���B:@<@A�_Ơ��}G�{|�|�>�|���_%~
�/
.�)
._��\Z�!�,8
]�u'0���B (5
w�N��
�FO3��朜�>��d�P�g���<��Y
�]��qp���
8����{��N��
�!d�†�Թ�^Z��>\Ҥ���}j�Ct����r�t��\�\�ȯ�k������K����8D�??8{=�<��<����w��rx\��O�
��&5�y�� v����h�}���q�����-�
t=��!��� P
F�j0��ؔ��f�/���T�d���V�
[�=��v
�]�������K�u�_}��K�7�펝ץc��+� XA��S
����Z�Q
vg�+t�B����-��l�7�?c�k�n���c��g�����X����>Nth��o���+|�������+{n�*	��^�k踂�?��t\B�{l��u�m���29�wt�t��"w�7�1p
�����y�����G\Vx��塿ۏa�
-��]��x:�
�k	%�
�^��i op���tDoq�>!;�p�
(cv;���i��	�w��|��-�8�8,����~>^���rlWa���د�����@�Z�=ZA�X�f8Z��_m&:-D���`�k�wp~
>s������
�z�K?�"�'f)X��~�v�c��N^��F[4E��т�&tl�2����!'���*,4�2�"�^��q�6�Q{�r��ר���_\1�a�#b��P
G
cᨆc2��p���Ӝ���
�.E����(>���;�����F��v��f��|��¤��n��
���3�a#<�H�#�8��
�
--F�"t<C},�\=�;�:�':�4��:�����S��p�Wh��������Ͼ�8��ֲm��;Vʛj�g�?&xlx���\�G�\t<�Q�T�S�Y��
^M�ӈ�T�5��M�!��m*�Sպ|��.�G�H;=�_:
����)DZ�H�������
�>��)��r�k�K��w�մ���Z�)�e��Z���T�m�j�����KU�}�*{lVEσ��F�]W��=�x���
���2���u�ndy>�у�����n����Oun�5�W�&��h�{�j�3T힫q
CU�1Bc=�U�9^�=����	�y.R��J�x�h���~K��m*�
*�qt<O3~
6�+W<Xma�`Z̕7/����L��Z/o��
�*o��z�j�w�ʽ���w��|�ԧP%>��S��>T�g���Y�B�*�ݨ|�V
�{Sy�+�����0w^����s�6�|���;��:rT�
-?O���j�_�J�#5�ߤb�*ꛪa}sT�w��+?�\C���o�������50h���v++��2��*3䞲B
��#����u
��
j��v��}��L��$7���T
��A*
2� (F����588C�B)7�P9!���_���)�
��t�2�1����RJ�q%�ڕ
���P
-x
�w�ۜC
�^_ ������
��IqD7��g�� C�"���De��(#<[���J��Ԉ
-�DNRR�l٣���Z�w�}L֘K�p(щCp��`�<�9���k6��d>��F�B��r�<�
�̨~J�2(-*F)Q�J��+):C�����
׀�r%���j���"�ǭ�ٴ]&��gzWq��2�
���}���6��1�d�Z�ʧyo":*�1
CБ�T������Cd3F*�'k\���T%��b.T��L��j���e�<�XK�b�*:ᨢ�����::��P+�������֣yé�Ԡ�

E�� r�f�.��S�_%Xe���l��)!Aq	Ɋ�f�h-Plb���)j��
�@��۶�`?�P���-^;�m�&�-�¸������z��8Z��2>�΁�kJJ%�<d��(� �-T1�(E�͊�������<�'�PX�XR�*4e�BRW(8u��R)0��ং�
�׉����ˣ苌�X���CK:J�7�8eS#vbbJwSt��"S��������v� Ey�a��f��]NE�1j��'�
KXuw=pD]P��h@���<�� [...]
-ˢs��h�o]!��l�0=r-,������R�e�����"�w���E9͊t&�d]���p�(��2dp�➮`w������"?�A��Ip]~�/�O�N�)�7��8OZ�5�,E�`�l"�$�\Fy�^3��$2O���d�5��T�'F��Dzz(���=, �g��B����5=�:����to9tq9�s�o���\�Y��{�\�W��m��!TWj����e(
U@!���C������r�x9��l�^��E�^^��Ǜ��MC75�"�k�C�OM�w%�U-a
�x����Ԁg#+���ޝ��H&r
���Q��ex�2��D��R��*��� �R�R>|�
`jK0��~�a||��}�X�z�f
��X��d/�,`0��o��JfJ�j��_5�����	����	�T��E��
-�WQ�%+ at 3��T.¤Vބ�;@_K�ڕ|VK���H�	���F�7�D`a��Lr��_hvȣ�<ȣ�<i���F�F6�w������h
�e
�s-��*
�*���1��2eX�I��3b3 I��s�m2<h~~�泙Ư�<Zȣ��pk{SFS�]��͖���5����e��ģ����*�Ro\9M�G-��mR��R�
�3���p�|�a����kG �A:@C|}��G�hcN��p[�E+�J���s������3�bƖ
��1�<OWb��
z����x

�o>���Q�"@�z�
cn^��N�VN�����$��)�I&��O���/\�T	�yp��ײ���
~
��
��h��
-x
�Nw�
8
^o�7h�:9Ϛ��Q�L3xm\� ��|�p�Z��+��>V�
4�X�9�np��
9�����
-�� �%p��b]7������9��E�|�F�k�.��=tq��ߣp_���	 ~ @�z�! 8�d�
-�%8�b&q�O����,���	�7�G���;��[�s}���F7�}
�#8� �>��oD�X�
�׏x�o��b����E�.!�}F
���'��W\�G��8�?#���}
-y
7{�//�x���8x����B�/��?���x��x��d!�]ʥ?��8
-��J
�q�q`��2ϓ�9�cʚ�v鷈�uX���i�<��^�^G����
~_�[��'22�8}@-��1/i��� ��z�]@�"b�#v9�1��:�:f�)d�̲�%�8
�)=�`��A��}`7x�#vL*%����x[f���E�A�>���N�lb��=��Ӊ�e��2��į�~�xV�a��v�];a�A-����63ڧam��F�n�f����:��i�y�Z
�G����1��c�W6�����!~>�g��b��E,C�
������%�F��3��QV
��
Xn��8ױ�wl=���>t�
��3�m�I����B�6�wh=�X�)p��1�b8�{�V�
��e5�����YЕ(�އq#�%��Y�/��>�`�ݍ.��F�(��$��
�p<
-G
-
68
��jȣZӴ�<�G��	���UJ�\	#��J��7�a�́{6h�^b{?�v�[�!�{8v������
-!J$�����D�
�@�2
�-D�ʂ�	�x�P���W���`��k�, at 9��G
�Y?�[�ԟ��0G�^��m���8r�К��.5~a��_\���0�A�
��O:�YT�	W*�N���.g���d
�m�$�VM�{Mn�+rޓ+����}�GXo|/������D�A]�U
�9fy�;kf��T�W���5-h�r�,�lSN�C��ݚ�;d�\�%��X�
��mh�#��aǕ~I�w���w��[��~
�8����:Z�ڲ��E�7*H��Fy�b�����=41��\���	�T�3f(�8NY�ɲGNWfd�2"+�
Y���&YM��j:.��,�/��>R�+�ц��hkk����nт�ҖQ�|�k�9T�(�ƛ�m�,S/�M���y�2̣d3[�n������\�F)%f��ĬШ���W#�^��w�h�

����8��ӂ�%m�h���Y��
y>��̠NSi���kTF��.���+�_���l#�
0
3� ΰ�l
-(0.�D4D�wq�;hc��9�&٬i�&VLlk��XS�i�&=i��Zcܲ��U�t��
��
�=�����}����kPq�QE!�
��0ԩ��,��+7l�F��SNx����1W�UJ3nU��K)��rF�7�r+%�.^��nr���n-d
��<Ffx<Bj��B'e1R�i�
-�A�7�)��
�M٦$e�Ҕi���QJ�,Sj�K)���~T�r%�7+)�)%��Dv�i%X���_J����"uw�w��&|m
#�2,�
�E�f�J�
�J�Q`�U�9@��a�0�f�(՜����1YrX
-4�R��؉J����ڨ�2��6�f�#k�+��;���+��˳[6����~v#��R���Gy����84R�^s�+�6T)�`9�aJ�F+�jS�-Yv[���_���dK��5�^��%��o�9�IE'��Ȥ��eE%}��$7�è���l�
-l�`��|n�K-<&�Fehek��V
���h��
�x�Iq�X��&�(6)G��"�$WȜ�����T$������N�;_T�����;�p�e���Nrn{ =N@�`!cp\��1��;�Y�d���T�9��0��P��,�3^�N��R��R(S�XE�NVxZ���(4}���?!C�g�	.ʐq�w�>����߂Y?=N���#�_<&0��ҧz����s�+&�OQA���1#RV�g&),3]�Y�
-�*հ�I2d�Pp�<�(0�C9��?�(8/���<39����A�M��֪��l�Ti&�Sy?����;�pM�gq�$*��r�kPHn����Ȑ����P`~���˿�̖�qHA�>+��#�C
*�B�
ܼg������9���G0���s%\*��(��E��Y�X�'bt��T���P%�b���_q�����q�-��OI��,W����Wҍ�1	%���g���حN�ՠ�:iV�4��x�
���i�|��U<}��/!㤀�A�+
Р2�|ˌ�)�h`y�����r�\�r�Y�X
-0�嘵r�CƠ�S�W��.j�B�����豉��4��/Ɩd�%���ӛ B�M�������
-��0wE�=�\
�.�BD.���"��c
'1!Mdb���6��1�;��-s8��K�pG`O+y
�
ɇK*�����a�@ȡ3$�x��
�\�
�\�5\t5\@5� ��!`u+�-M�_M;��"88Lu�m6{�������&P��
�\�����	�U
����jb�ib�h�[6ҋ�P� ���@/�D��G=������l�����y�C�2�����D��-�\X�:���`
-���X������X� �
G}��
��3�5ã9
p�5��X�ᲈ�XĢ.$��ml|��|��<���[\
-nm ��5��ʡ]�ֱ@!H]/Y�
��@�
&����
-�Vx�ҏVx�£���%����R�Z��q.|�j&�UL�+q4+�ZO�X�9Hf�F$�|�6K[� � ��w+�(����݋�����
�
<�����
d۹x���vzю��(���8�r�96����5�]@�:r��;zgA���K2>A�������b{����婋�t��}
����A=
�=
�=��u�h�
�$߽���V3u�"o%9Kɓ���FbvI9V���� ���#�=� u̐�ǜ�c at E�?e�
b(�E���a.�^z��
��C�U�>_��Z�>�QA�\�%!��Կ_p���5��5AG���y�1�~	���[�/�	
g����?�>�q��&8Ǣ�%�Yzq����]��9@��"g �5�7��<Ǽ�=f�
/΀w�9�Q|P���5�X������r���*���
��.�S�
�8��y����P

 ��q����
��-��M\�׸��p@�E~��
_�).�:
x�~B�>�G����"Q���U�mp�����A0�ҷ���x̯5��c�=��U����
�K��+<.�$���;�?�1?R�>@��k?���e�������x�
-^�?
ni 5�3|�5��ezqA#�_L�
-�^.��{�8
�3��w𗿂���8�#=�C=��:�n$�2�
��y
�?t�,���Y��?8��Vr�����E�r�?�أ��8�
G��:�rX���D���^��]M���2m���~��A�馲.�=
��ݠ���&�救GZ���q�+��YȑL�LV���8��D�D��RK�������X�%�_�"6�c�v�v'���i�P�6Դ��
� l _����+u��:�~��G-rE�.9
�Ϣ�B��1į �D�W��c���
Ğ�2� ���Y�N���y:
�߰Z_j%yWx�=�19��v�-����{�E'{�Cf�$��I�l��q��1���	�B�jrԑ��d�kL����7���6�`0`n&&`CbH '@B(�HB���[Fi.�K���@�%Y�e	(m�fi�6AZ�N]5mӺ}��m�6MӦM۪}ؤj�ڥ�4�G.S�	=z�?��y�9�9��『�w
f��
�8�����$7e�l�{�W��('ߡܿ�$x�q���Ö����8���	��1Ua�#��f<ߦg��3�q ;�������cX5�#Df��=�
��	��M��S��w)��h5�����졅p�$v1�i�L.x
-8K)gY�B�D�i���m��`���
��$���]v��>N�K<��n���'���2LY�%u	)tY��='�e��*�����\v/�<e�'O��7sKZ�ꄧK�{�lY��s���[Ȩv2���o�V�R�Z��
�˥���_��^�mOa�
�h������4���
��rx�܎\���j��Kmq�j�֦�iE㏪9ႚ��!����Ր� �
�
x��ږ����Y>�q~J�����	�M5�+ɢmI�ښ�Q{r�ڒ˵9%�M)aES՜USj�6���1m�"��Z�~D�
��XR(�j
?R��/�1~
-b����:m�:r�"8��+GS ����I�ږ��V�QQ�U��6��`(V��B�Z�7֫޸Qu�6�Mݪ5�R�i��3)�yNU�
-��V��UX>T��3S �����KH������'�bCط��E��ȓ&K�"�L�3�Tg�U�\�Z�_5���ZjUm�(h���ک��_��Q�gͪ,��m�Ub{S�����g;>S�#�{Lo��
&����Yg����{���(�C$;I!�Qk�,��ek�ͭ*[�*m媰W��^�2G�J
[���SI����3�9O� Q��sWޜ��������w�
�6�	�%��3���3�Icu�KZ~vl�F9�{��IW�3S�N�ʜ.���*��8'�"WH>�涩 �G�y���v?�<�U�<w�������+���\ޘr=1��Ht
ދ̳�[�p �3��h�
]H�Vr��|
!�)�*v[�sg���E��T��Y+�7"�w����*PN������(�"{�m�|�+��[֏e��� ��u
�
̲'����4�Gx���:�q�j2�#�%	�f(��,O�]y���-,���T._P9�z9�Z�(�i�JƕUrT֒K��_����L�_�\�O��
�g���|\
�e��-�#����m�'J�֓#�Ħ��䗥)�oR��*��)��+{i�l�3�4,kY营�_��}2Ú�2V�*C�ʨ�%�G|G�U��9�8�1�x�Y����:؁�fT���[�s
�Z�O��;�$G� [�YY���<Y>��ʬ����Q�5�`�
�Q�)-����[J��&���R��Vj0������vƟ^�Dw��;�X҃][�K>	�'������d�MSf�I��,kr@�
��ʨ�Vz(��P�RB=J
-)1<����G�C��
F%��-Ÿ*.����E8O#��wr'E�Xw3�n�y~i��jl���q0:�R��ި���F��
�()R��H��#��k�����/�� -�� �	�+`ތ���Y���tdw�������S<o�/u�(@||��Eܬ�Ÿ)Y)Q��4�(�%J!�r��$n�b%�Q�
� �ME��PԂZiF56� �c�
�yx�&F�)F��~�o���]̞���/
be�
�K�LR|'
m�	dI
4�^Ť��� �:0���'��)�~�M��v�[;~h���^r�c�6;A>N�����0��u�R�;���Hfb��M	���~f�/��w�
��_�ዾ�K�����ax���
���
e����"�'q�
!�a$
�|�:�x
�qb�M���G�#���a���{i�{�s��p�� �m�x
�A��Y�2`��͐���ѐb:
�	�}�0q8�k�]��A�(�n��bL4�n"�L���vLa�vL"�&i0��b�K4A<&��?åC)�{������1���ǎJ���w��
ցJ���9�>������c
;�c�ܘ������ɋ9.�
�?7Fҳ���B���_H�������x|
-�:;_ ���U�:G ;0�������\|��H��v,b�b
��,R�(2
$�y
{��8G^��~��;��?��o��س�Ei㗩���W��H*�_��%p
p
��Ǎ' 67��%�X�,�e
-�2�X&��8�ҫ��>_{���Ŵn���a�"�r܄���*�_��a�
�|n]������M�>�g�V�c�B~�P�W��
-I��ʊt�����9c/g�g�TW6\�ۏ�_ݛ�¸� �o�o=^I/�G��!�R6��\�{t��
Ɵ�6�%inmzK����4I�IKK�EZ.��E���\�1AA�Ƞ� �
�� ás��)�`�e2�q2&��s��ӝ�Y�iO����s~�/��<�������Yz�,��G���G��>ۇ��;�h
-{mf�5�*c?����,k�
���s�
5�����1#�ꋚ�
�b԰��> ���_�8?�@}^�Gn�x7��u6v�̀��/b at 2�(CAw6�ڦ�q-gҿ����������u7�g���8�?R<7�{�{B�G�e�E�R?.�������j���K��?�w�v�T����=:�u�ч踂��8��9,�C�%t���z
gz��@�{�཮kz
_����>���/�߈�M��_�p�귪һ�ܷt���ɜGG�8���qy�qa��6��W�qR���6��K��'H��z��
��0�v�]_�p|ܟ>��ݛ�����,�:��:���)��t
G�s��c8��8�#����8��Z��ܬ}�d/
��_�R@��m
!B��� #�_�y
\�����b�3�e�'�"֯�M�z���G<����S�q�������?_;���Wh���
���
-9�1��
%c��يP9��`-�	���ђ�o�c-��^,p9�=�R	���B�N<��Q�?��[92���t��d�n=L<��A��ȑ�]�Xe����\�h��E������x8z��'��m�H�2�G>
e��k=:
B��t5��J�R���=pt±�n����ѽ(\��S�ݰt�*�O��.r�����?��b�̘�C"�f��'���Q��~��m���m���I�G<�4�����v������PAo��� �ɠ�y�#�y�����n��s�mE��o
-����
�8�����,��� OU�B$�����P���]����*��,�����Od�_ 2��\�G�{?v�����X�-��s^tS�sd�+�\x
-�)��c�:����h�������_�P��
-~����/k$?�f�O��yF��>Oq�m��r��Ѻ�
!.s�Sc��>;\��䱧"���p᪇���pMd�pt�v����Z��f��^��w at d G�\��ȝ�� ���
-�-a4��u�AL&c�jHָA��9�ʂ�͞���*
P}LHu�ª
4Z5�����9���_'����`�K�0\RE�-U$Fp�+mw�����_�ղ����q���lI��&&c�qjHNQ8��:C�j�U���`b��+4$�JUI�
-$5ȗ4V���H�%o����U�q���O��xB��wU`��BSDE� �O��ƮG�� �m%�
#P1i����(��bP�ɨ!F��t��9�4y4�T*��R�j�����ܤbs�
-�
*H�W��5r[�)��\�ʱ\��zD�
���$#F���#ϯ�w泥��8�!7#kȍߚ�
-�Y��J-*���R�BK�
-�U�X�)�:Jn[�rm3�/T�}����R�c�����xG�i�3-»�����[���1n�Ō�s����JnFS'���R����*�U`��cO�۞�<{�r
%r9|�I
);�AY�㕙>MNg�ҝ+���*{�^�2^�5�M�l���
�����k����H��=S�l-~�@�
�F�����y2���4+�iS�ө̌\P���
-93�*=+�4L�={�l�]��< K�7���#��L�_�O�̔ z��vx75R�x�eXՅ|���v���ꤖz
P#����6(�e�3Ǣ��49\��#��L��*Y��e�k���.�{�L��ddHO��*�sLI�s�#>��|�o��
�#���c�`�;�3	mc��HrSCn|Ĥ����*� Y�|���vY<���TO��>�
-ke,�K)EmJ.����+�x�
��U\�Q���y
|�;�r���Ȼ
���� ��chiCG3#�t��2���7���^���R�L%V�J�e,u)� %�
VRYH	�2��*�ۡX��x�K^n"/����˴����2K��-p�g�]9�� ]m��	�
�jF_-CF2�֓b�$&�@��>��*-J�L����x_�b}^
�SH~��gC�� ��c�c
�~�c�U���E���p>4��q*=�N�s�����aXF�h����11��+)���`�b�

A� M
�h�P���i`��0MA
C��?��V��j�)x6����{�Lz�Ӑ����أ�VB�V7�q7
�������$�K%l\xa�0�
���t���\x
��
��
Ǹ�cB�Huh�c�C��걓z�CO�N0yy@�0���"�d��F\��1��R
��
��k�RivHM
dM4p��ġӄ�&��4���5Go�L�Lk�.K�hh�h
�k�\��ni)![�
�9�<tѓh��24����2��<��ù����.�ˍ(���ϐ��D
QA��`�	1�X<�i�1QH̡�
3&��Ĥi�f�vjb�N�1I�4c:�Iu��-lgZ'�<.����y��}��{�C<Vrc`k*c��.�rɗ��rQL.����i&�ԣM�<H���"
�\�ٜK
|b��ӣpoA2Mk��:���
�f[|v1���TR�&Nۉ$_
.CXL.q�W3U1U��JtQI.*9<�ԣ�VT ]�`�
�0�c�0͗1�����#�Z�	��2��hB� �x���D�*x�X 9S=q,'��ı�8�I
M��\�r�j�G-�e3�Z�$�s	F�!�a�
���V�_s3u@�5�� �7S��wv�d���p�)��
�
�8�F#�[#g�]4r�8�
$���7�	aj�aT�0կ�����&(���/��\�$^
�����?h��A���F>�<�� �h#;�?�;: ��6�����
�+X���y�#�t��p��
��30hs�1
���;��� 9��tG7��&�4�nrх���U]Gy�,�A����U���Epܳ���:^J�<�a�<2h6� �ƺ	�����gG��I '�M/u�E�賏F�G.�Y�
'�ṿ�����;
�1p�a0�p����{�Lߐ	{%�W@�Ca�!W��қ��O
�
c
*��r1@��� �_R����qpf��
L�tL��R��l`���u����t�
^ o$6hV�Ӑq�
�-��8.sf�p��>�rF�qخR�+�_W.0Y��
āt0R��οgj��s�;���������pH���}�A��#�
G�G�s�"^�@�� ������a��G�>|��T�p
��!X��4�T
|�p��Ʋ~k��g8��8�K8���G����<����
N�]<�E��D4 ��(�y}��Y���Z��Y��;b�6�� �ԮO���}�<�
-��n�-���qS���M�8��z
{���S�x�8Nk{�M)�(�3H�4�z�~=���1p
�p;��T���_+�}Xኁ'	�,�?u��
-��q�@>z�S'�u��/��
>�z��:=E;�

�N*ңn�<�7��U�#��`�
:�.�
�_�OR���ܠԍp���/���h=�k�!G��!�^7���Y����J�g��z\��h�����Dt�*��bn���
6���^
��489x,�؋�h2� G���
��M>:p��6��N
�v4����#ԥY
��E�f��U��R��0��we ����
�m���X��u���8#�
��t��e����D��
�t��2�!�U�e�/�Z"\B.j��(f��mV�]����O{�

j���ȭ7��\���~��t�� �\�χc
�9��)���2x�Y�ŮC-�Z@�泳R\	�,F}������9�(�48ĵ��5��x��W�:E�iU
5YJϨ�.&�j�$�
-���n1
�Bx��S����(fYj�C(�����i>'{��og������G;k�}+�l$n9�C�5���r��xx��K<��s�G��Ή��x*�j�]�r���~"}�nwUL%o� Nq�
O�*c
}��e;W�&�YC��%/��
P8�f�fc_1�)
���	k.\�p��� ��ṕg�����t���SO�Y:����o'��`��Q:9 -x��w3Ӑ���Q�z��>;\�p%�'/\�p
�k4\5�h�r��#{#PN.
-
�i��dgqe�d�����Y������1 at 3��z�MaL$?���
r2�
�C�&�X5>ȡ1A.�%jTP�FgiD�
�a!w+'t��C��V���:��7)5�C)�O(��
�1|!O�w�D�t
�.���X�m�)��1���PAN��O!��ǁ紆*�dT^�U��r
.eGx�����
�G�RZ�y�S�b��dS�<��J07*�����
��/)�|Q1���{�Z|z��x���-��k~�k��撧��f2�KmF�•i1)�
�Ts���8%���dɐ�2\	����(�Z(��L��%rF5(��.��춗e�]_�[����}��vƭ�I�����m3��l�4
�Lb
���
�	R�� �͢�(��b�%�e�*֖�[����m�%��TvG�l���F��òD�(S������/��t�N��𳛱��A
���4�8�6S��42��dS�w��F�8�r:
��v��,�3��木������Hf��\���R��W��~���M>��d�{�����<
=�Z�Q1��]!��2�Y��Q�,j�LN\�r�,���r���Ni��
�9~�L�SeL��Ȅ*W*,q�B=�9� �
-N��UH�O]p�w�L��,�X�ߕ|VLl���)�f
9�#'��CN��PEyL�xl2{�2y�eLJUD�0��(<e�BSf+ĻPA^
�����2�z6����$�����;�݊%k��� K=+��
NǦ���
G,�h6��GN
١���f��u�u}����-��m
�r��
-h
��Q`
�r��*�1n� �"ʘ�TT��W 1��h���
���۹�-s�n1N��M�O̘ۗ����������{��sE���H\��Gʐ��i(�
��P��,;V�e��
Yb /9
o��
C?��p6YMw̕��8Gm�7�;b��k�R�'��џ~z�I�ѩ�Y�i���i�?Ҿ;R�)�KZ�f���̰ef�2ݧ�Qj(5O���Y6�l�[�_�s���A^��-�//}>�-U3�Ui0��v�|:ɮL��1v�
-ͥB+�t��r�)��D]᥊y��
-ݸ�~0)\�*��ָɽ�û{��Xfm�հ����2��V��|�ߵ�=rů�Ĕ�T��M�T�۩��jE�Z��
W��j�^v�q��q�*�B�˄ΆKZ�[µo�5�c[��_�U�`�8,���G�� ��bK�^2ٓ:��hh�5�i|1�/j�Z�V<ji�V k�P��V�bi�l��lZ��sBcCMk
���U;.���n��X�G���j>XA>��ך��_���,N�7Ѧ
_\���[=_�i�u�`�x��D�@�yy��_�2%ʹ��x�
>r��؏{�Թr��`j�f>��+�T�e$9
`c���U:�
I
~�%���
�ٱ�/袁/��h��
_��s�)q��q��l��������� K�3[�j��
����M��L_�>���7\;ֲc��4��Q�kTT�((k�x��[��w
-�ሕ������Kk4��U��@���{.�J�1P╢
4�
�ŗqE��` �Ǝ���U�n�\���ɼE���i�]l����'$��{.�y����ǵ��1�Ja}���
�
�!����Ϛ�:mfG3m4�I3]4�E35q^��
'��$�;��i츎[�u�
�r@
-1�T��<ȸѹm�	��a���-��߉MKvǀz���(j-|�BL�9���~���3�p.�Q3
xԭ�G�n�߶d���N�;�|ܛ�}��6��'Ѷ$��3'�qR�<%&�4�S|qJ~�DzR�>���ދ�x/�9���f �|�ʸ'y��j=	
k�âٱ
]��0���!,�
�ڣp~����ӳ�q�0rN�<����Q��ٗc�;�ޥ��`|��<�\�����^�\e>����P��F<?W��O�cq|��x�
����i�o��r�M��_�a�{�	�u|	��=��&R��K���忚��6�����W$�dv��}������*�1?��X߶��i�{�#_��\��Y��3Nmc}�
���6�>��|d������)�]��;��_��_����
/����9�Գ
-�3���%�Ol�OI�'	�<!=��1�9��G�c���&�}/��>�3d,��mB��=�E;��bW8{�;�
-�,g_���^��U��*Ilt�B��t���l��	�x��������(����
�$�/����g����� �:{��'�iv��6�l`�����
g��v�;�����8hûC��������Q��O�)�͠s�'���I�=�.�
\�x�������
����
��)����9��)#+����y�J
���9���ۉ�xs'5��ۆ�
T�x>)�3�tSI���/
WB�)t~���-�v���k��~��ƻ�Fv��NZ��������M���s�Ep]��z>�Dk;��d�����dI8�,y�b�
i�|
EN
���b��W�V��f{�c��r�Vրco��5�(������X�e1/����s�SG	j+�G��Y�v������ꎣ7�b
%8�pTȊ*J��3�L<s�,r��X��y<3�/.��:j�M���o&�
8c$|(K�UV���u�#�%n�4���xzȂ�8�(�eY��O�L��f�d�'g��t��*jm�L��c�*R����o��	�]�;
-7i����]��Ɩ�q�Q�,�.n��/WO<}�
�S���2�c;�:q��&yb"
'�D5}V�d%Վ�=c(�B�U�����r��բ�����Ξ
F�5��T���2g�{��̞���@�%��
W9�*\�p��5�'��"�-�e]w�H�e��
�ϡ5N��k�Z�>�JY�–�ٲ�_h9��
-uk�<���q쨔+c��v��0��
�j
�k*�z�/jW�PY2����@�8~�R���5�3~ަ�

n�0^i���5Ə%F�9F�|2�fƥe��ƙ�W���~�5����U��b�S� ��'��RYo9Z��Rm
U��N���uo���ֺ��{={V
1��I=�L3�N���9)1�k���%��ҩ �����Q�2$���(�"�t
�ӦGQ��(L_=�7E���(�8��#/�|$2ގD��#�U��y��l�u�j��6��EW�m���lq�b}'6�t2"�s
����D��D���E]zG�.�Q�uX��::zdVEAfm�g]yY�#��1r���H�d�����|���8���Z���
#���_��y�)N��RlF��0�)N�EQnf��΍��yQ��3��F^��H�F�����;9rr�"��������L�.�Ñ�8��#-�*|��ָ
ߍV�k�Z;'}�^k�\ʖ9[C����k�(�)��=;EaAz�%�p�Fn���IAq���2�������Id"���AB�(�7Q\� �!	b���)D1��Q5
mQ㫚�ؾ����UZ�E�
JI'���n���[��z�^k�{���9{����w)�ʢ�c
a��eZ�2��R�[Xh�	s��q�����$z}&f��D�
U�Y�������[S�F���8� 0�*�\�L8������V[F�8�k'OaU�OX�
�u��s3�qahuaq��u�1v��te�u9�2_�<��;�}G2
��KB��#�� �&`T�q�&��I%�Yw���4v�6���NX�9
-
7ga�V^h�a,��ӽ)C"��G��`C��������A��N
�yb*��c�4Z�̲IhW�G��V
�L�gMb�g�Xޅ8
|�DIQ��Nh<)O���z�D�D�F(��73��@t�i��iN�i6���3OLf�1�;��CuI�م�Q��|��{
b	_��?Z�j`&�ޱ.v?._�Ə
�������ς��(3��8��яWҗ�>Tz.��?�����.��7�i<�
�%�oD,!`R�8��\�)����`.� .�j�ȥHB�@H
�1�%�폎�@T��
Xb��/&f:���.c�K4�#1�wsb��=�8|��L��f�Җ���xxC��Cx�t������	�$2N��(��mt
�5&j0�T?�Cp�mG2�a���E�
h
�9K(�U/0q&{���@�Ak ���
X�
=������	=���Y�&zfͺ
�u��Э�>H�V��^iPfPwމ��Ћ������������������lxH9,4�ٲ�5���f`�
,�x�8�08�!�q�M٠)]I���
l���"�1 [...]
���>[3�F�5�b(
�A�b${��i�z��з9�&� l^}�p"F;b2!�{as�E���
-D&�x�#�8j$,by�b!p,d�L�Y���]ّ!1���C�H�l�p��
��������\q
 .�������U%N�LH��-R��dch���
-�^��@�D����3Hv�gx�q�|�D�p��*�жhc��H� u�}��6�
�7j�ʌ�
-?R�#�3I�3<�� �P��S�,�>����� ؞�E�q�����\��=�-�R'6���;��9IA���zɆٜI6�|XdA�,@��W��־+Y?��[�ړ�C
�iB�F-����(�ӊ	�-A[(�
�����o�q@ j�	��ȡ^s8�
j$,A�E$�h�~?�Xhڊ����>�ǁ�-��•a�0|�!�St�+�R)5�D�@*zm�ah�C�F��nl�V7q�m�͐p�n�y�Qњ+�{��O�#Ok	��R�>����5y�]��Nb��s�0
�;P�^84~��E���J�c�
�i<r�g.��	�8��`�r���E	Kkےv��
�h��]\˹{��������W��*U�ר�
��n��z�6j�4�Y��Z��l۾CTtL��q�]�&t�ѳwb������������
M
�6bT��1cǍ�0qR��)S��e��YΞ3o��E9��|���e��X�z�ڿ��|��M��l�b��]��|�����?p�Б��rO�<u曳ߞ��� [...]
H��̿ DH�I:�A���D�0$I
�%�Ab��b$XdH02%��1M��d.�,��|$1Y(�$*����V	�N��RB�Obsp�KtNKx��
�� tEBtCbt�
H�~�0=�/HNL�.��\�}�y�

-� �)��.doF�X�^�Kh4ff��``i%Q ���JفDiG��:��
�"$`(�,�B`
\z
�B`�%��,%*)6�kB�^�I��
J�6j�����L������,�x�r�EVˆ��X��k	8QH
-�$Y�&y�(��ꕫ$��uҽy���ܽ{����!y?z���ߟ����������UQEUTQEUTQEUTQ��!�`�y�
�����bQEU����o����n��b��}S�V\+����e�:<=�c�o���*����oW���gֈ	�����W���G&��;��D�›&
N8:<�͂[��ߝ9�qt���O�	����
*Ʈ�*��Gr��~���\�13��Ǧ̏�.�K?j�a��`[ᖰ��=7%��¶�
-st�P"M8<�[^�R�6��+;
�k�
��k
��ke�U	�	�lY�j�9e�Ks��b"<��.��RE�?��<wx����c�c�e�0e�;����Q���_�/��j�n+;���P��|V��lLu��`�]�:kfp]�
V��"���C�]�C�b
w�Ê
��Qr�[�+� ,|j�w:����e�Un�3c����+:|�a톣�<5aUE��"Wv�M�qФ���>���l�)���%d�t�U��[�PY����#��Wq���€rF�t�Gz]����(9dj_8�`���]���భ�K�J7H��K�ws����ؗ1TT�..�(r�ۮ�����ѵ}
�4f�>�z��{�ϟ�ࣵ�L�A�����ϻsƌzf�zkfL��(�ք���C�
~�h?�j�}�CJ��3��E�%�/c_TV��J�*�p��T�_���xE���y\���_�^H�ڨ;Wi����
Y�A�"�ҭ[���l�!�I�v��^يR�9�$�V�d2���nq�y>��=/�����<�y�;�s�����+N��w	$�
ӟ��mWy0����\�*c���<0gל�uN��@�B����!���
���+��
G[Y��u�?R�
|�^��rr���H��/�
坑�������,�~$���K�]�Kn�`����l����=�Z�5�[7�q|g�Unr���"~��F�8�ߛ-cY����
đ\ೖ-K1�Es��� �)�`[����<pb !zٔ�������z�{t��@�E^�~˷Je}yU����-�#iږy��k��p��?���0Z/����j���,�bh��}��F�u���D��R�����%�H���2 ��
����� �v &� � �e��u	�Y�N N"�{B��^��{~ݾ�V
���>�>��zy�H�����]P�F(볫�ܤ;�dq��F��V	�Lk-��z�PߔJ��K{�w�W�y~��P�'C8�d,ߴ.����
�
�:���J�@7
�d�z�qF�@���`
�V�"��
 6X��  �#����#�
��	Z������e�W Ŕ����ԃ��N~�a�~�qfu��#E".�l�йy.�?Xϊ�
��;��m�
HK�=�`(tu4�G!g��n� ��_��:�� ^!��B@�� zh�C�L Z8�l�$@��
-��+ <j�e 2<�QQSS}?�4i�ǀ����(;�jv�,����_X��?�j�_�Xr)z��XK=A��T�h����0�B~[�)��ܦ�����bU�q OՆ��
Fv�
�S�����@���g��6��_8��1 �>� 
@
�e ��!� O� �����Ax
�C�8���~ⷎNs]=�/��I���֣�3ѡ��M*{q6l�j�K~!}
9Y�����m!���!��_�
7�Hl�ް�(��Qp�p��j�`�0G��Xs,D� `+�� ��
�/x�G �F�
@� ҚSШ
-�s�=�t��##URuM�T��������?|�����zq+[:����s����M�n�ִ�������䂹3���3�o�\P��7.��B ��<�L
0
-� wz B��F�1��2
-�Ȇ�� �DG�r�
<�6� X��`3
-���83�|6
�~!�]{=i���5�$��>�*�OE�t�O������1����o��,N�4����GO\ٞ~��pc݌
)��G�R��0X�
��
QA�l�(f�4�� ��M<�Aoc0 n�`��� ��"��0E��>���)h�@<׹L
"]�N��JY���s����
r�,�'��%����hݹv
-��� ݆/�U�)�
��|���J��n��P��W��
-�x ������k��F�E�Q��`0|�=t�[�
1x}� 
f�p��c3��A&��� �ŽpJ�� �~
��7%�1
�����,۰�PRN�D�,^�H�U
0u�����f>���
��7웻ñ]zQ��ZV�����q��6
S�
��d` �0��XA#����G�V�J�[�(���9
-R�
��WvH� o�^0�x�3�
 bx
-p`+gQ��(^���1�����ױ���>���9��ږ�騬��*�^���x���#qb ,Y2aHwc�VM�O�b�/f=-��ȁ/}	��-�
��`=���瀾�}��k��)���
-���4���`"��
C �!�)�p3 : �m� �u�@�X oQ�v� �����n�gn3����
��w
:s��+
*�����q���BV-
������M$Nre�O{�} v� �R`��
�8�3J�yM�O�4�)X� �ZG�y��Q�j{�<E�T ��I���v\�5�Y �8�F�a
���j5
�X���+�~6���yB���UX�D����C����j��*+�j�߯
�X��9�q�x;�aV�,�;�`g�\��L�Z����[�� �6�
zx�GP��k0���
ܢ���@+8MA\��Z ��T�����g����P ⚖ (�U Ͼ?�4
�;���Ic@�����S�l|Q�gV�e����O��H\����GI���s���}-:�l޸�-�P���
4T/�數H���1e
�N1��@
-���^�Sp��|�v:Q � h	 Z��1
-��VKȘ� �1�>DM
{��_�Y
����̸�Ӻ�|)�we��Uef�ᨈ�����.A�]��]��dci��I~\w���<����
8�/�t��
�P���g�+ ��e
>*7E`S# �
��3\�G��HpχH �n
aKS[��K
5�u�k;�mɶc���V�ރ	iE�HD������_+�߾U\�'�9GVXJ¬���9M�<~̨���փ �I+���q���ij�L9%��A�
��0p��cF"((�`�77 Q����#�' q��� h[:�-H,�n#*Z_YXO�
-=�V�y�!�p������
�LY���zY*K;�x2��}{"w��7�e�r
��"Iw�:G�S
y�\�V[�<�6'R��չ
n%�:溬'5�m���Dtb�Z����L\�&$
-��ܾ��~v���ן{��}߻�����<%E��&�g������IN�
��DH�J��
"�NƄdD�]�	Q�!�c�@
-�d	*��>7
�8P�W%

 \� h�`3�^l:�9�3��
c<��xWo67��!����ʺ���[�ЈZ��I���4�z{z?c�vT�g���C	|ޮ���X�.�qDh\�1�y�X��C>�M|; ��egA��� ��:܂�8XJ�[7X�I�|0|�����N�7
�����w[{�Ekv��c�JȬ�����i%J-��Q�#�u��|FB���ѵ�<~�ԠV�T�w<k�F�K�};�#9a�X!���ЭѨP5w�8G��ĥ�eb��5�@�
-ݡP�
-�`(d�B�
G $��8������&��{j?��S���
�p䴥��W5z��N�K6�
�V��i�|Q�Ah
����4�ݪ��(����d*��i��sZdD(k}P` ͏��Gg��墂t���5R�LT�c��+ʻ�#��
!� �
1M��e�+����ƅ
��xoBj�0�ǻ�8���O�U��N�������☤�"ţ���>�|���_�JvV��{J,�͓ɯ)��l/`�
���R|Vx��fm�
��96���pL1c����3Y0��ߜ,��/���N��P�[@��Q�t�+eK�T�e�9ۏ-p�
-�
Ȯ|BpW����$�
��%IH�O޿y���:�~0?_(g��D��,�rE}K�
cШ+)�J_*=��I,�?!�
4�
l=Å�[�P�ծ�=�Ğ�	[������ �}g���
OZO$o�!xL��=�5�dbBC��)		�O�մ�>�R�I�r�\���r"#;�@V�2[��k������c��lz��i5a#*�X�m�?�;�6�2.�#�:ĉ֙Li���������_ �8L+
endstream
endobj
96 0 obj
<</Intent 112 0 R/Name(Layer 1)/Type/OCG/Usage 113 0 R>>
endobj
112 0 obj
[/View/Design]
endobj
113 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 18.1)/Subtype/Artwork>>>>
endobj
95 0 obj
<</BaseFont/XPLHSB+Consolas-Bold/Encoding/WinAnsiEncoding/FirstChar 32/FontDescriptor 114 0 R/LastChar 116/Subtype/TrueType/Type/Font/Widths[550 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 550 0 550 0 550 550 550 0 550 0 0 550 0 550 550 550 0 0 550 550]>>
endobj
114 0 obj
<</Ascent 952/CapHeight 638/Descent -240/Flags 34/FontBBox[-133 -240 630 952]/FontFamily(Consolas)/FontFile2 115 0 R/FontName/XPLHSB+Consolas-Bold/FontStretch/Normal/FontWeight 700/ItalicAngle 0/StemV 124/Type/FontDescriptor/XHeight 496>>
endobj
115 0 obj
<</Filter/FlateDecode/Length 8457/Length1 17110>>stream
-H�ԖyxM����;�$11��9�
--j�Ɣ����"�� ��P��KʭYiͥ�)��sc�5��T�K�J
�9��9���>Ͻ��}���^{}k}{�k����E"aC�V�*T���A���8O���J�LO9K,`���;�S���r��
ګ���j@�@�2Q�ak�����Aբ�'�D�^JF�$
�g������.ٯ4��jybL�o���bƆ�Dz˧��/���O��V}\|�7��S��,lF/�;���u��q�
��H6�,"�M���;�a6�
-ڙ&��L������n":�ϭ:�c{Q+�Wq_�|���I |$�[1xk^
�q���OKC��DHWY�ZҚ���	����n
$�%}���h��X�/q��.򥬓

��0t�>�� +�!��tN�Bn�A^��[�GD!FE1��1Ғc����9��H�G���'>�L�$L�L�4L�'�����afc�b
�q0�Ks}J�<*�=�"

0_�[��X��H�z|��؃t��~��w
�~�C��Gx̉�E�K's��t��҉u�X֣
z�VY-e���n�&���e��IOمe����f�!=$Uvr ��]�@ � 
W�!����7�d��
�e�ta
c��8�#ُѲR�
-��*!��o�#���C,�>�)��-[�=[��a��Ә��Y�b�F���8�.)*�\��巕�
���}l�h[d;j�0Aƴ���fn3�Y�
0
fi��Yˬc64��Q�d3%�?�`�#�t`y�8|
�
y
E
�r�&�PGd������XU��X�Y�J!ٯY�z�&hֱ�u�m���oL
H
��Y��Bf1�tg��͚`&��x%k
G�Y#4+5+]O]�ܹ��,gg������}�=�>������]���2�d]
��C�3�d&�Ӫ��3�f�el�H��2�eL���&��O�i/�K�\���������{t�#�ZFm#�hhhF�����ht�+
�R�o�[���?m�u�tV��P�5Vw�q�lf�tdS��j-��+�9E��^FIO�K�,��P�u�vy�y%uz�H�G*��;�}�]e
z�O,��c$z��`��`�a��u�� �M�te�E��ʄ�J�
J��d-.)
��`�U�j	|��X�7���X�rX������
-��`
�cj`3jb
j!
U��b;jc�`'�b�a�:�+4�>��h��h�Ch��� G�LWqs
�1��q�·h�h�Sh��h���g���=:�
�!ݑ�\�(�p\C$�#?�n�7~A�Bn"������0O�O1�0��C��a��G��h$����N_�Ei,E�#������B�^uP
��Y��r��
-��*��:~˩��,��38���3��l��\��|.��\�E�����K��eL�Z~ã<������
��M��-L�6n���.��{��{��x��y�_�O�$O���GD �ߊ��I�.9$�d���Kr3����K��+��k���y���&o�6��.��>�W>�#���|§|������|�_
-HA�\a)��-&oH�S�!%�����򦔑 )+��-y[�K�(�H%�,5��T�*R]jȻR[�H}i �RO��{�P�H#�+4JU
�C��p#(��d����a�+ќ�{�	��;�p�� |�m՝�^#I,F�_W�j̤?kh�q��ئnد��\��&
�ؿb�s跋~��n(��\A���+�n>]>�3�+�Ǟ:{��]�5�{W�q����^� �]��<�{0������מdO���5w�2�.�^+D=�_=7�_x6I
���H�$7�f�I6W]�D)7�ͻ�Z3O�
��׈du�
-�A�Re�`�����w��ӕ8)�t�R¢����d���"�m��
�S�c���x�O�pH�p_+,l��n��ЁWj6�s�������=
|���J��J��ʼ�:��^�Oi���W�7��w���V�S���"�
q���)o_��t	�t}�ճ
��Y��u��d=%G�2~
�+g�T�	����>2]��)ig�Vӕ8���^�V�^KT���Y��F���6
�g�in�,
�b�����u��R��/�N(o-e^��3�窽�삎����������uܖ~�T��r^�1m�g�}�ml
g��s΋��O�@	��>��I1�쎰�Ɛ”NtJ�&M*:)M�d�iڴ�Ӵuڧ�&�f��M�,_��SUiUS��ӼJk�Fi{޻3����Xg�}~ϟ���>w�㌾od�0�����r�O��=C�ϖ��)��!ǞQ?�Y�=�N�
W�l��Q֝�St����a�?�3��xCҎ������H�,]�k���F�v�*�1�~܀E
�a����P���]P�AX�3sԸ7�q��(N�]�y��*>�_���׾���s�vlvf:=���#OON��ǒj"
;�DG�<5<tpp������U7�}M�Z�P�q�*�{�FaԮ�dF�r��d2>��h� ��P	��n*e
1i���'��TLIe[
��h�T"�;	"�\Z���D�h�X1�6� <@�B�!���DqFRi��r^�$�^�튓����
\nX�aE[�j��bc����x��m)V��t*��	1�

�
[�
�Ö��|FW�B���բ�2��E����(��<���7B�H���{? !/�v�Pi������
0�
D���yR��n$k!���	bK�v��_^#�
<��B!�˕����kiͤ%� �#�+�S.�87ʜ�c��V�l�gH��J�Xי� ][�:�!���
����Bn��g��$�0�6�Q%
%kŪ��@>�� VX��"����L $V���P��hm��L�Ң]j��%��L�t��"im�m�W8 ���#�����8EV���Iڔ�?OJ����Ӊ���*���ۅ�

-��	�0��vJ'�:� R~Hl�� YEc#��ET�],	��e>
g,����Ő
2?_�h�T��
� �}2������̡6I]J�pp��
-�A����ɱ\X����s����pr����*$��$�,�@)S���ڨ��
�L�iF��.��E����<kE�84`2"�kj�c�M�?�N��R�I&g��2�
"	�Dl�S�+}�\&a��d�H���g�[k
����W���0�AR�y2����k���
�ʇ&��l��
O�@��tA��g�
!��ϥ�LL/4OېR
�c(!1�Y��iȋ
-Bk�f �+bd`�2�Q�ș�P�8�l&��@�ː_�����js^_�gtv������QD92Z������R��I��Q�GM��pt�� 9l �3�t��Dl�!�LJŭ�Y-tG,�!�y��i�2��"<rc�x����tLc��p*�Cϖ
�H�V��J�H$

֋����@
�5 �N��T[э^('�Pv�f��6���>�k
L8��%�W	���DD a3�L��
-<�`�2dۆr3��� u�&���&/_�h1
��=.Z�	�bkw';�a�����%K ��<�w��R�� +�|����Do23�"�&/�XaN�
���p*
���wB���l@�-�L��"��������O��ЎOG;aw֘H܀�Fz�I���t�;�D=��;=��`������z!�
x��Ip[��5
-�Py��/���x��� 'BXS6�� ګ��e�
���:X����(�y7Z�	%�P�]�^	w�[�W6o{��Jo�z��7�5���
q��w��@'GH_o������?0�1ڶ�a??�y��kI�
��^J��F���o�d���7������`������?����ه�o���E��:����3���c��W�� ���6� �깭�?٪Q3�A߁s?�]khp�"����H��W���VCC��G܌dA朼,����:7�4
-D����(D
����
CĽ�X&z�E%������C-��vJ��\�;�X~�����j���A�i��������j;t����=G��~>�z�������wG��R����oh}�����9��PK�=���^9r����f`�`���	��.n���is"�Κ�Y'�=�9ZA��/k�XཱུEܳ�B�� �u�7C�|��|"2�q2��?�A�v�����ɲu�Qn��9��ٳ7^
;r��gs�F_;�85Ѳ�ȩ�46�[�6ƾu��s��>]'���uN��L�NG*�~t�ɭl:@Bm�Y����Q��Y���O�Շ��l���<��*��c/Y�Yp�ﲒ�R{��0D�k펐���`ݎCM
f�m��7�&W����h��,t�.�%�
ϝzcu�>�S��ϸ��=S$~Rm�o���W툽���x���o(#�p�K����c+��DԸ]G��S�<��ƅ|55{���5_��
-T�E���M%0[��M߽��P_����C]�޾+l޺Ţu��z,j�pu���_�Q^G|�ow�=�^x�^|��
k�c�}�mB]�|���l| A�K
+2��*(m(�("M�h�8��S	9J+DAj��D���
{�����c��6Q�o�ޛo�1���̛�fpl���+�Q�{�]Yq��������{_��vz[��v�9�*��əf�'�?�����0�>BĪ�;�aTH���>�n/M�~|\��Т��"��	�=*w��p�|�**
�dG�ڷ�F��**+4i2YNR�N�u2e��"���w5��ɩ-y��8��L��A?5�s
n�'�O�u�8ap�:�;�)i���
ScD��ʄĐ�fs��4/tf'$��~m&�ň"��D��ų��FdC���'��d��
��8W�ݺ��n�����W����Y�t�1&��L/�v�9e�]�8c۽�1o�KJ��F����ېR�
le�
UI
�nN1i
K�����+ۊ��CV⪶<GA��%������HgGM�кT�ftڝ��dYNl�ӲH���;�eQu�،��o�{%,�����,-����
`ᑸPcL�)�b�1E�c�"c���t��j�"�"N!F��S������ȢK17h3���a/T�k��2��>W,� �δ��"]yv{�+2ҕo��"����D��>)�*��<���ʳ��-��<�fr���Io��"�O7&�*�l
gӅ�Tj�\5ZGS
qͬ�]���E)���¤��N���,�˓�悵@#����Z���&dB� ЛD�)#�d�
�G_�Q�j�����


\�F�l{�
+Xt����E��#&�ioQw�߯�ĕU��T�U'��^�5���?��I�to8X7���X9bu,d\��*(�A7Q8E�U�Y���ƍ��(�^U!�|��Yx|��
]�0����ؕ���
�[��๝=�{K���<-yQ�
-[r�E�S��[]z���=o
�*�΅�O��h�+=�|z�.&���W
�u�8�ƌ.RZ�z�7�fV/�$E3�i���u�c�3��y,�:����9^����N��8O�
-)}0DOSs�|wBeܬ�[y3�R�
�Ӑ��-���~3\�V�{C�6ʇ~u`�J��ѿR�Mk
��
Gu�K����-4!Ɠ����Q��6.�
=��v�(�;�%����sB
��=*��\���C�\w�D(w6q���*�?���f�F2��yޙ�\�@V
��2�ժ�����m�X����[�]���:ݵ��M?\�z�1�[���7������a
-�}��0ݜ�p�M��^OQ皴����4s��a�-_=�3=)
-�2kc�Jgd�mS�K�T�)m�������t�}%��U��3����W�e���N�5d3�7H���ҧ
|G�)��
-�)aĿ����'U�3.k
Z/ܙ�%��I�����E,2�<�C�����Jɒ
-��0*���_���oRhBO`�2�s�U��3w�Vy��N`�B���_��v�F
~�^N�TO�4H%/
�3�\�j%'
��&��&̵������<p#p]!������By�
CNA�F�0�w�	��
-x�8�Ȯ�7�iP�m$�Y�sӂ�mG

�Jb��~�v�Q����Q+i����2��6���ňv�C8[%����9J8�B�G [�� 	�%��)
���>X���2�c�8`D	� �B�/�E9��!Z?`�C�=�l 	f�t(�Rz
�����X�>�����)ޟ�}�ROq��W,‹�p����a@�˘�i�Yz�
a'F�!�5��B
��
�`�\��;
-L3���^��n�.(Y�g�&���P��K�
��
-���FAc^q>���vX��E"9������;h+0w2-�V}\���~���( =wQ
-�ܠ[ `�/�D �c���.���c«�������(��
����
�%r������8� �Τ"���Z�3ĭ�
�r�XiCu��M����
nS�A��l=��
p�i�_X����/��b�?����%f����ȷ`��R���ث
���W��0C�)}���0���Й�t�fZ���t~�ކ��4
z��P�C�'p�r�ޏ��Dg��c�M�˰�[t_��4!���5F�jhc+���!pl'n{�'!���㬹��ax�����G@�p pOl�5.3���(U�9�
�
�#x�`��x	o_(�B�����T�3��$�ٴ�΢��h��-�C�����
a���(\���ˁ�����$<��
�e���{�+%\����%\$�����@�H��$�Jx�,	�<�Vz���Ai�L`Ux�7Su��‹�Z�
���6P:�u�r���6�YD}
oZV��-�`�.�>�,�+؎۰����-����͵bĊ~
vb�}���[�3�>|mG�CO��5�f����t [...]
-Wv�5��m[	�������dg�)ؙliM�����`���9yLS�����X]��b��=����i�?�nJ'S����R
�c��v�lOw�&S%��k){�:_wn1�����
-kkv�<������k⇾�?����+���?[�D۶�C�??�DV
�4*�G��n�0[���-�e�d�9�4|d���1n6�6����]	�6a�N�DY�1�8,
��ō��
q��p,�=fdbFW�p�V��1k]xA�6\o�1�cn�*^���ګ��8��~

�,s�8�p�5f��
UP	�9p ���
�aL�}�
�@�B��"°7�`2L��`"L��'��=`,��1 ��&|P
E�B(��0
-F���
.p�y�
�`(
�����v0�6������
|
_���|����	|
������=xށ��-xހ��5xvY�Y�x^���"� ��s�,<O�S�$<��c�(<;`;<
��� ����p�
w��pl�ۡ��mp+l�[�f�	z�F�
7���	,�
l����up-\W�Up%\��ep)\�Ep!l�n� ·��\8Ά��L8N���T8�*�+N����`-���X�?���G��U4C����Y�,��8�-�~
��_±�
��U8_�����t��`t@;
mp4
��
Z`$��‘�d$D#4@=���%��Ű�� 
��KE
�`�Z��wf����k�x1��D5
�<8�p ̅*+_��F%T@�r�s� �f�,�	3`?���4�
-�@9L�2(�����0	���0�Þ0����@ ��b(/B��Q0<�np�F�pȃ\��`(
�����v0��پSߪo���+���B}�>S��O���#���@�V��Ի�
��zK���P���ԫj�zE��^R;Ջ���zN=��QO��ԓ�	��zL=�
Q;�5�v��zH=�
P���Խ�
u��Kݩ�P���*���YanU�i�V�EݢnV7�^u�ڬnP׫M�R=#�03j��N]��QW��ԕ�
-u��L]�.Q��ԅj��V���yÏ2�U稳�Y�Lu�:]��NU����zՕWj��;�\�N�k1m�0]G������E�pY����.����w�7�s��;}�}���gF#>O����H�&N����S�!��)j(��z�v�7���:�+���o�ά���OY��d
-�
-�6�۳³�3(W�7yƌ�f��{
-��Aw�;�v����vgv��|���9�I��e��5�W���5���vmtm�$�>3�r�N{Ev������̙�q68
]�n�ݱ��>m��
c}��X(T�;���:3�vI�X�ˎ����5[<�dQ�a�[�cثf�$X?~�Z[��:�-�
6*WgVg����?;��%�S���P�e��`�B�6�B�/��C�T��_X��
����`*�-�E�x`������U� ��
endstream
endobj
99 0 obj
<</LastModified(D:20141222132804-06'00')/Private 116 0 R>>
endobj
116 0 obj
<</AIMetaData 117 0 R/AIPrivateData1 118 0 R/AIPrivateData10 119 0 R/AIPrivateData11 120 0 R/AIPrivateData12 121 0 R/AIPrivateData13 122 0 R/AIPrivateData14 123 0 R/AIPrivateData15 124 0 R/AIPrivateData16 125 0 R/AIPrivateData17 126 0 R/AIPrivateData18 127 0 R/AIPrivateData19 128 0 R/AIPrivateData2 129 0 R/AIPrivateData3 130 0 R/AIPrivateData4 131 0 R/AIPrivateData5 132 0 R/AIPrivateData6 133 0 R/AIPrivateData7 134 0 R/AIPrivateData8 135 0 R/AIPrivateData9 136 0 R/ContainerVersion 11/Crea [...]
endobj
117 0 obj
<</Length 1102>>stream
-%!PS-Adobe-3.0 
%%Creator: Adobe Illustrator(R) 17.0
%%AI8_CreatorVersion: 18.1.1
%%For: (Howard Butler) ()
%%Title: (front.ai)
%%CreationDate: 12/22/14 1:28 PM
%%Canvassize: 16383
%%BoundingBox: 3 -43 139 1
%%HiResBoundingBox: 3.55980782122515 -42.3042710950194 138.5107421875 0.12158203125
%%DocumentProcessColors: Cyan Magenta Yellow Black
%AI5_FileFormat 13.0
%AI12_BuildNumber: 446
%AI3_ColorUsage: Color
%AI7_ImageSettings: 0
%%CMYKProcessColor: 1 1 1 1 ([Registration])
%AI3_Cropmarks: 0 -45.3500000000004 141.73 0
%AI3_TemplateBox: 71.5 -23.5 71.5 -23.5
%AI3_TileBox: -307.135 -310.674999999999 426.865 265.325
%AI3_DocumentPreview: None
%AI5_ArtSize: 14400 14400
%AI5_RulerUnits: 1
%AI9_ColorModel: 2
%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0
%AI5_TargetResolution: 800
%AI5_NumLayers: 1
%AI9_OpenToView: -44 38.75 8 1866 1032 18 0 0 78 133 0 0 0 1 1 0 1 1 0 1
%AI5_OpenViewLayers: 7
%%PageOrigin:-235 -419
%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142
%AI9_Flatten: 1
%AI12_CMSettings: 00.MS
%%EndComments

endstream
endobj
118 0 obj
<</Length 6572>>stream
-%%BoundingBox: 3 -43 139 1
%%HiResBoundingBox: 3.55980782122515 -42.3042710950194 138.5107421875 0.12158203125
%AI7_Thumbnail: 128 40 8
%%BeginData: 6398 Hex Bytes
%0000330000660000990000CC0033000033330033660033990033CC0033FF
%0066000066330066660066990066CC0066FF009900009933009966009999
%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
%6666006666336666666666996666CC6666FF669900669933669966669999
%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
%9933009933339933669933999933CC9933FF996600996633996666996699
%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
%000011111111220000002200000022222222440000004400000044444444
%550000005500000055555555770000007700000077777777880000008800
%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
%524C45FDFCFFFD1FFFA8FFA8FD64FFA1A8FD15FFA859847D7D7DFD62FF7D
%A8A8A8FD13FFA87DAFAFAFA9847DFD25FF84FD047DA8FD13FF7EFD047DFD
%1DFFA8A8A8FF7DFD05FFA8FD0CFFA87DAF84AF84AF84847DFD24FF52F827
%F82752FD13FFF827F827F8A8FD1DFF7DA8A8A8FD04FFA8A8A8FD06FFA87D
%FFFFFF7DAFA9AF84AFA9AF8484FD24FF5227F827277DFD13FF27F8272727
%A8FD1EFF7DA8A8FFFFA87DA8A8A87DFD04FFA87DA87DFFA87D84AF84AF84
%AF84AF7DFF7D7DA8FD20FF7DF827F8277DFD13FF2727F827F8A8FD23FFA8
%A8A8FFA8A8A8FFFFFFA8A87DFFFFFF7DAFA9AFA9AFA9AF85A8A87E8484FD
%20FF52272027277DFD13FF2720272727A8FD23FFFD07A8FD04FFA8FD04FF
%7D7EAF84AF84AF85847DFF7D7D7DFD0BFF7D7D2727275253A8FD08FF7D52
%2727527DF827F8277DFD05FF7D7D2727F85252A8FD06FF2727F827F8A8FD
%1DFF7D847DFD04FFA8A8FFA8A8A8FD0AFF7D84AFA9AFA9AF7DFFFFFFA8FD
%0BFF5227F8272727F827277EFD05FFA82727F827277D53272727F87DFD04
%FF5227F8272727F827277DFD05FF272727F827A8FD1CFF5284848452FFFF
%FFA8A87DA8A8FD0BFFA87D7DA8848453A8FD0EFF2727F827F827F827F827
%F87DFFFFFFA8F827F827F827527DF827F82753FFFFFF5227F827F827F827
%F827F852FD04FF2027F827F8A8FD1CFF7DA9AFAFA87DFD11FFA8FFA8A883
%A87DFD0FFF7D272727202727272027272720FFFFFFFD04272027277D7D27
%2727207DFFFF7D272727202727272027272720A8FFFFFF2727272027A8FD
%1CFF59AF84AF7EA8FD06FFA87D7DA8A8FFFFFFA87D53595359537DA8FD10
%FF27F827F827F827F827F827F82752FF7D27F827F827F827537DF827F827
%59FFFF27F827F827F8272127F827F82752FFFFFF2727F827F8A8FD1CFF7D
%7DA9847DFD07FFA8A8FFA8A8FFFF7D59595A5A615A6136597DFD0EFFA827
%27F827277DFFFF5227F8272752FF7D2727F82727AFFFFF5227F827277DFF
%A82727F827277DFFFF5227F8272752FFFFFF27F8272727A8FD1CFFA87D7D
%7DA8FFA8FD05FF7DAFA8A87DFF7D5336FD075A365952FD0DFF7D27F827F8
%52FFFFFFA8F827F82727FF5227F827F87DFFFFFF52F827F8277DFF7D27F8
%27F827FFFFFFA8F827F82727FFFFFF2727F827F8A8FD20FFA87D7E597EA8
%FFFFA8A1A87DA8CF595A855A615A615A615A615A5A7DFD0CFFA827272027
%52FFFFFF522720272752FF7D2727202752FFFFA82727202727A8FFA82727
%2027277DFFFFA82720272752FFFFFF2720272727A8FD1FFF7D2F5A5A5A35
%597DFFFFA87DA8FF7D35FD0C5A53A8FD0BFF7D27F827F8537D27F827F827
%F82752FF7D27F827F827F827F827F827F827A8FFA827F827F827F82727A8
%2727F82727FFFFFF2727F827F8A8FD1EFF7D59615A615A615A597DFD05FF
%53615A605A615A605A615A605A6159A8FD0BFFA8F827272752842727F827
%2727F8FFFFFFFD0427F8272727F827272752FFFFFF7D272727F827272784
%272727F852FFFFFF272727F827A8FD1DFFA82EFD075A3659A8FFFFFFA859
%36FD0D5A7DFD0BFF7D27F827F8527D27F827F827F87DFFFFFFA8F827F827
%F827F827F82727FD05FF2727F827F82727A8F827F82727FFFFFF2027F827
%F8A8FD1DFF7D5A5A615A615A615A6159A8FFFFFFA859615A615A615A615A
%615A615A615A7EFD0BFFA82027272752A82727202727A8FD05FFA8272720
%272727202752FD07FF522720272727A82727272052FFFFFF2727272027A8
%FD1DFF7D35FD095A7DFFFFFFA8FD0F5A7DFD0BFF7D27F827F8527D272752
%52FD09FF7D52272727527DFD09FF7D53272727A8FD0527FFFFFFFD0527FD
%1EFF7D5A5A615A605A615A6153A8FD04FF53615A615A605A615A605A615A
%61367EFD0BFFA82727F82752FFA8FD0FFFA9FD3DFFA82FFD075A3659A8FF
%A8FFA85936FD0C5A597DFD0BFF7D27F827F852FD50FF7D36615A615A855A
%5A7DFFA8A87DFF7D5A5A615A615A615A615A615A5A53FD0CFFA827272027
%52FD50FFCF592F5A5A5A36597DFFFFA87DA8A8FF52FD0B5A2EA8FD0CFF7D
%27F827F852FD52FFA8597E597D7DFD04FFA8A8FFFFFF535A5A615A615A61
%5A5A2EA8FFFFA8FD0AFFA82027272752FD52FFCFCAA8FD0DFF53592F5A36
%5A2F5952A8CFA87D7D7DFD0BFFA8FFA8FD52FFA8A87DFD07FFA1A8A8A8FD
%04FFA8847D7E597EA2FFFFA8A8FFA8A8A8FD5FFFA87DA87DFD04FFA87DA8
%A8A87D7DA8FD0BFF7DFFFD04A8FD60FFA8A8FD04FFA87DFFA8AFA8FFA8A2
%FD0BFFA8A8FFA8A8A8FD66FF7DFD07A87DA8FD06FFA8FFFFFFA87D7DA87D
%FD5FFFA87D7E7DFFFFFFA8A8A8FFA8FFA8FFA8A8A8FFFFFFA87D535959FF
%FFFFA8A8A8FD1FFFFD05A8FD0FFF7DFD0EFFA97DFFFFFFA8A9FD16FF7E2E
%2F0D2F2EA8FFFF7DFD09A8FFFFA82F0D360D2F2EFD23FFA8527DFF7D27A8
%FD05FFA8FFFFFF7E7DA8FFA87DA8FFFFFFA8FFFFFFA8FD05FF7E277DFFA8
%7D7DFFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFA82E3630362F36
%52FFFD05A8FFFD05A8FFFF590D362F36302F59FD0DFFA852527DA852527D
%FF7D527DA852527DFD04FFA87D27A8FFFF27A8FF7D527DFFA8527DA87D27
%7DA87E28A8FF7D5252FF7E52527DFD05FF527DFFA827A8FFA85252A8A852
%59A87D5252A8A8527DFFA852537E532F0D362F360D2F7DFF7DFD07A87DFF
%FFCF2E362F360D360D53A8FFFFFFA8FD08FF7D52FF277E28FF287D277D27
%A828A827FD05FF52527DFFFF52A8A827FF52A8A87D27A8A852FFFFFF527D
%FF27A852A8527D52A8FD05FF527DFFFF527DFF527DFFFF2752277D527D52
%7D7D527DFF525252537E0D3630362F362F7EFFFF7DA8A8FFA8AF7DA8FFFF
%A85930362F36303653FFFFFF7DA8A8FD07FF7D527D52A8527D527D527DA8
%A852A852FD05FFA852FFFFA827A8A8527D52A8525252A8FF27A8FFA8277D
%FF52A852A87D277EFD06FF277DFFFF277DFF7D52A8A87D52A8A853A87D7D
%FF7D277D7D52A8A87D2F0D362F360D2FA8FFFFFF7D7D7DA87DA8FD04FF2E
%362F362F360D7DFFFFA8A87DA8FD08FF7D52A8A8277DA8FF7D7D7DFF7DFF
%7DFD05FFA87DFFFF7D7D53FF7D527DFF7D7D7DFFFF7D52FF7D7D52AF7DFF
%7DFF287D527DFD04FF7D7D52A87D7D52A8FF7D52FFA87D52FF7DA87DA87D
%7D7DFFFF7D52A8FF2E362F36303052FD07FFA8FD06FFA82E3630360D53A8
%FFFFFFA1A8FD0CFFA87DFD2BFF7D7D7DA8FD21FFA82E2F0D2F52FD10FFA8
%2E2F2E53A8FD13FFA8FD2FFFA8FD1EFFFF
%%EndData

endstream
endobj
119 0 obj
<</Length 65536>>stream
-@ޟk�����&|����a	�ZRɊ�����)�&�5 �հ�nͫ1��.a�L�_V!��Ee�=���l�=&���.�G)4��{��-�=�/�9�U��W���������^aَٝ��}
�z[C��r4'[Y>ݖ}���!�?��+<mM�=#�~������� E>�
7�l��&t���޼�a"�Fb኎V��x�ew���S���_
Ą�NN���[@<���}�mH>;�R���R�f}��κ��S	��'���q*�rP˄�9y_G�E�#2mV��q���LL�@.���"W
���Y�������
��1��V|k
П����?��A#W�,𺵝�fi�Z9��Iyo~����M�:�U���
I[�p��dA��:c�N�D�^%�����G�*�z^�8Y��ӭ���lʶ�\�f�T��)�K|֊�Z�hd���6tɞ��v3�J�����	-6뢿��Ɏ�
�sռ�ZА��h��/n"����nE����_�I��>b��D���Z3���d?$��-�_&��M'*sI�
-
�ޮ�_�(q��
�}���i%�lÆ,00b��Y��m�|�����:bׅ,�<��m�y8� �jȈ��6�k�t���̍��d���X������(X�rd����������
�_����%˚�7ӊ�G����)-�VM��>� d�������͡��y-���a��ee����+������P삪���3�
9W�����I��n}�����
-n�Ț�6-Ă:uـ�Y4�*Vm\��8���`#������w�ΖG�\5P���MC��?ZJ�����b$��O����j<���ٮ�h@�?�e]��?
��P��N�J�O)�	YX�7P��N-tW����W�tV<u�����	礍O�}��0:錁[p;��_a�W�1�@Gg��� þ{��=#�0��x3%-�mU�����ݐv�B̽�Ce�e��_�4�3
-���/ae�/��7'FEOL��Ǵ�'�i����DN�k��������Mi*>~�A

u�A� �nَ��2��qN�\;:��8l
UnN tt��)ڶ�+�ꆘEE]�9fkW�3„M
�2�Ĝk���8g
"F˨{=�V�xAV���x��fGe�q�>�
x�
�`s�ִiG�(��,��	i}���&Vm�
��a|IHO,XPb�!��vR����mgcW
������4(j���M�����9�U���2X̊�Q�m��m6��f��G��
'��f�Յ���9(b�A��eb
v�#�&��=���d������ :�^xaFZ�hۄ���ejd�� 8r�F,[
Ƥn91��h����CȄ��s�`�&|�Q���Ic�G�������,P~r�� ��������%
)w�H*��آ���\6͏������e�E���
rv�h��0�O��@W�
��]�C�:�uw��ҋc¢˳��/�p����ȱ���3���iiG�t/%qQ�K�w��
o+�������̀︉5
:H̼��u��r���w�x�m�f#팱�{^o��ֻ3ƣ����j��
�<�Q��!(��&�]�b*�ӊS~���n��ŷ$
�O(�'�j#��@��q+Nt���}����yX����?)�~
-������?L��\ܲ'm�����x����
5���-�~^^�8��{9�]r���D_���ʻrf����7��R��1�
}���5�K�֠
-�R�ߝ,	�
���BX嫛�yuq'���
�$<=>��cG���G>q�

!欰��	���u]S���&f����G
���}'�>L*޵�����1NvU����d��7S���Y]줸&rQ
-{�\Ē�!��θ�Q���%k�
��� ��Bb͌��Fr�s}9?���v쐴Yi1���1;N6�'���1U �?O��O��_��u?&�"`���jXƮ�
-Y�"24���&R�)82��D.ɱI�:rYŮX�q�V�"¢�Y��"�.�1I��M�@}
�R�Gx�y96��te�^����eY
��t \7�&����
�y����)q���

[��.
ԾmI���jD���&)X5��Ʃ�����E�2H̊
��n������Y�I�4<`s�#��/	�jÁ�٬�~볏����0A
�t��b
Np8?<ѿ�L��1bݎ�X��å��4Ջ�t
jn��JlB�[
��W�s�����K�u/f�
�|�5�;�ʹeR~�T91�����m�U?
*�ެ9�VXJ`��OZ�j���|b�� m:X�
7�x0���eR�:���������u;�zQ��^�`�-ܒ�ݰ��
�)'��;s}���v�'&�G�a�4E�[!A
>c�H)��~ z��9�݅�ֆ'vN�] Ʀ�i��FJ�:�N�}���>\������޵1Q�Guh���ӽ�oT��:j�CG71F�E=��&��o��������ܢO�)�a��
�$�9�K|�_�t�Y}
��x�[
sVEʸ�,~����{J���U�M���?Z�J���8Dʣ�{A���sZ��8������wS
ٗl��K
JTQ`�TP��򬧫.���� ��S
�/���[����J�^�<��=37HȡV%\��{���dk�R�#w
��-}�'
%�����)5��u���Eѿ��_<d�?3
�?���'�`�N3sn���צM������Ȅ
���;fJ���~xҮ[R#� e�<\
h��0q�^	"{QE,�/cYM��0�ևq�SP�:�1��1%2�i` �3�W�v�qT�Ǧ���h@�!wF��5f��]� �&��JGKMܲ�ὃ�xei����|7�lI
��P����ݡ�Z5�J&{ ��;_.����f\������������]3#R6m����
�	�� S��,G�c���:ɦ�f���������r�+�����g����A������{2�_�5�]R5E}
'6�Ԝ%5�rwD�Xձk�j|Z�������Z�����
;��dx:��fz17�<�� �G�s�ךw�%Ⱦ����l;�M;..s�����2T즋�K���D�쳟+�쥡�
�
�9���
3�����V<�"dM��߻9�7z��,�p)�}��݂�+�*j�E���t��
��.�5ٕ}QY�e'���0 at 3�w+ 4��q� �W����Y��d7��� *��l՞����
-�KJٚ�K�v�kFZݒ�Y?:�-��Q��Ȉi%��+�f��GB�

��!�����$N�QQ>����t_������QRJo3sߞV�S�<ڷ���0L-
�x�9��b���v@���2�Ïz�ͪ�_����G=�A6ͤ�y}7�!m��J��q5��ƘyY�=OK�E94�TOc�i"��ɮ��AjqSn��o���V��ʆ�<ђw��M�dD�>M˹w��鬅��`L�H�Kx}�Uqdž&�;�`��'��.�X)�T=>���;{@���gi9�'~x��o
2䳓\�5}@F���rR���ؔ�乖U�����SzJ��=
�m����?�J������Ǵ�؋���IE/Λ9�����~�t���v݈�U
,m����!����.�x9����g��
c�Ǡ��AHY�tq��AwóS�»���{[��*L^�T��s�ڸ�^.��_���e�y(�-'�h�R��KT��:�P�
������H�6�i�:�a�?�"����=_}�����lc7<�� !�ْ [...]
-��!���];o��N��9�u���:����N�S��6
-v���C7�jˎ�ܱbrw�<�4���
��#Ԃ
��Q5'����s
�9�Ԡ���Q��v
��-'����
��w|���1�^�(���m;��>Ыu
�i� ���� �4��u@�����>su��iV���"S�,���1
-48B�@F�J��
*N՚Y�z47cy��5Ӌ�0�ROS��rTƕIi��uo����Y5�xZIL[0���v&h���]02*w�8����Qxņ�4CS��nXw���
Ԍ��=o��-[�{ޣ~?��e�5V̴Z@T-khE�zJ����C���ՏV5�,��򡞔v��(�7&����'eM)�y�}�
W/{JE�<pӰ�,��5�A�.��+&z����Yq����L�4�Yl��6N�L�V=�쬼=+oz�!�\U���t�+n
��a1��~�"(��6�)��8���|��9jN�O���RV���-7�q^�L]5b*�M��Gg�w
��9U��i��4���S0,��
$�=Z3a*f�e�t�t���9ٙ=-������:l�Q��D��-n��	䨒C�����l��W4����
���s=Jh&$�ՙ��W�lD��Y�t�w����8�
ȹ������
��=��܂wON��=��9Jj������'�W
�����L̙}/
�>ƧO���=�Ȑ�Qw�W
�B`�#���0����S�8�%��QK��Wͼ�{N:��ݲ�j�d.鉅Ki���rI�S�
�[.��T�Y}/wQK������Yh����0<iNǬ
�W�koN97�z�0��4�]�tFZ�ho���bb挬���`�ţm�q�kRŪW�lEeL+#V���=�xՁΟF%Nc�5��
-|��}�n�H��0S��=4(����QcRK����G
��(_fx�/3\ᗣ�{J튅X��'�.ih��&h��nVN��D�I�KXv3�]�x^Y��&Ƚ0�S�j�N��r+
���/vF��1&f�N�����@�>Oԧ͍�G�a�&��Ȩ�~%2��Ϥo�R��~
-�[�9��j6��ܽ1b-�τ9�}H�Jް��f�
o�rhT�D*��񎓅<���z�s�%`�蹍KF6h��lX�U�Xi�=�m������
&.h}��}���
�O����9
�2d��t��-&��#�[�/�D��53�4̨��S5���!Bژ��<9H/^u��SJ���na���`���F�B��6i^��8Z�}/��
��5+�Kݤ���>�vR���M
99(��l�@/[w��N��.�>䥐[�j��o:HU!
�xa��W��,,ЪK(��
��
Z��_�z��	z��ZZƇ:q>���%GnjH�
Ϩ��G5p�,�Z�mnN�4�
-�̄���V�
1Ą��A
����l9nNQ����<��ğ�bR.o�	�NТ�Q�h��Bd�%+f.dIǬ�$e�{ё~)"jQG.W1���i�Zh{
�_@�/h	y�FF
�c6G[�
V.|�&"������;(���
�9-���
-�Y�c�6���u�yLE�cK�pkS�u�zR�_Z�h�%��t��U
�b�*$,;Z9k�"ު��
Y���6j���-��5+&;�E-���it��ńg\�fE��40��|̚�ٰ�5�:)�E�a���;���qa˦��r
���玓ڸ���GY�m�d$�L�!#�U��\��
���R�x�����/f���aX���Z��oN������u���W�jB�u�p���牆�]	����[%m
�:0H-�2ݮ�:Ӣ8�3�[.X���)iۉ*��k�]��I)�yP��<��{nlɖ�P������V���Ł~X亝ִ�,;y�������ć"�?@�޲a�z��mԚE#�y�#�S4g9z��WF��
��"�C|嚝
-Z�	�vQ�k����h.
3�fմ�E=�lVO)�3��s�6���S4���[�(q���?<жh态�*
���6d��e
N����y���3N�m�� _�榁�|l��=cg���L�M[q�Ì���rTފS@^6��7 nX����M��e
��k�[�\����m_�toRй�#BW��Z� �ONL�:������3۪�>�a�6Ӫ�<%����m{G�@F�|��W
�U,腰M���۔X4�2����>H츤9bN�����kv!cw��{{T꘵t��|ȚE���p��-�g�Ně�
�4���M��Uk�d�ãlz��kvJ�Ѽ4�
m����
-7��}�.�*��V��;^M+d���>�Ժ�)�Rzі]@��Ҋ���G�N�I�l�$ĸ{0���Y5�>fr��	�`��%��8�i->{j�D������le�FD��6b����M2٫
R��<�	7r!�S!���H_�3���t�C^
���<L�?
B���m�Äm��vl�v;:O<�.[5�5
����WӀ�Z6�q
9�`�RvaN��	3͑KX�D?蕳���1�l;(��@|^��*g)UA|t���u8�,;��� �s1{��-[�Kzf�B�MH
-ٸ���A��P��aLښ��r2Q�|��PS$��6m����.j�oZ���&�W=B��X�j����9
�ey91e^K.��
-Z&:t!OKW����t~a��m��	��16.0L)X�s� �����	����U:f�
-��u�1o�c'����6;,��U2a�888�����6X��
6{y���f 7�κ�K����g;�[�\�Ƹ�es�U�5צߙ)w
������P��C�\����(&��@� mW�=��o���
fj톇�Y�
#Ԛ����
-��Mѓ���57��J͆���
�ۿ/������hА��ܞ��g����!bp=��Q>ww�ײ?�:�5�*]t2�sB���R�:�!.Z��ASӇã���g��`�S�`�4�Ԍ�!a��_P ���t`��<ֶ��]5��j�� �ٰ�
�]
���I�\q���=���w|��C@	��E>9+�-a�zU�*.��\k]��e
����l��(;@�?�'�h`�M�D�>yK�����j�{�0�H_6�˗
���P	j'u=��
��Ps�M-�Y��3gmg��M�RD�� �aN/�M�r[�
�ho�Z��m
K�!]�p��ɜ֡��LU��lj�=u ��-_�Ț�ռ0D�]��J7G荻nJ���T�2@�!j
^6��rR����Φ�V�6�F��8�u'�1C��q�ͷ
"�Q��	}�GE,��KV�L亳�ua��h���۲<�vȢ�K���W�
�_
-�v�T=Z1�J��l҂�Xa��ܙ�mz}�o�nO��lx���
�0�fb��0<a���O�2�
��I`�s�N��� }\+��=�u�F!|��-�7�w�[ٙ���K����6���;�nڝm
\�q�͖N��c�^��؞�W��ŜIs_��H�f�ի�2�u��U���T�P�0��Yi�^L�1K֝��m_���D[�N@���aL�v@�ޙ��v:�[m�Ϙ7�
�
i�Įw��S
}��
-���p��F/9X��a>zk\$ٛ�mM�V�m��G �5��Ld��޽�����lҪ
_�5�.ޝ�aw'��M��4�%��(����m��sg�M[0ѪLJp)sr��4�t���X�2�k���t�lw\غ3Il���q+��Wًp�kp�n#R�"�PQx/'$��9��>*妛[h�\����I���ȭ
�z[
-��w!<�p�C�3!����d���gWpslJZ߫�Ȅ��.8���I�i;[v���M1o����
Uq_��ߛ���e�0�ؒŸ���7
ݲ
G�j�ѧ׈avY?���_i�6����d�a�U�k�5�G�N�{�<`��Y
-��R�VdI�Ie�G���jl�Q��rv�T/���~�?�\�Ѭ�m��-o��u��G:���ּ9#�bZ�I^2�*֝�
-��>�nje|01�O}��B��4����[0s&>&8"d���?fۍ���6F�E�S�Σ=Zvu��*�%z湌���v�͘;���������n	1uNI/	�k��OHI��~L�� �h�-�G�y32�k���D��zVՒ��\�����5;�(u���
-5F�&+��t�:e=`soo�Y�a�z���n3����I
�=s�w���
����Yt
(� �.9�
�^j
�!7��X�!�����#C�G7�o�������|E4�,}�k�\Ɓ�7�R+��W�ީĭ�3:!$h`�=,���fgJ�u��jJ���+�\⒯���S��n�A�Ui
詶ɺ��n�Y���B��
-�]��e]8�F��H�AL�ʈ��9֣ۘ�۝�lO���®/s���:���
����9�����>�e̻:���K;#5`h%�M�4��^83"b�X��lٴ�P
wl�z��c��i59��q
�a�W.
Gtq]ym4�{1F�t��JT1��z�8Rr\N�E���"�2��=�掶�A������w�;��-}"à�Y!���\I�8�OS���4	&���Ҧ�w�����!��u���iM���
��+�W�弿�e�����5g���X������s�^�P�
.�:0��n��=��#i޴0li]��&ۚI���* _�. _���<��i���Idz���F�E�����.%4d"J����	�z��/�����Fv���4RM���;�-���q�����ߠ��۞��Q��I��*P��� 7d��n�u��� �A�.j����ܽ�V٬K
bk%]J�0V���r)L��a�p��'�:�x-1���s2"鍳�+�J�[�eͨ��ACkJ�*X�� [...]
w�d�
r�����
pے�T3��dN
�`N���0�:�r
M�#�
�
-(�h
���^/�l;����9;�����an<YR�?Gmf��a��.ФIB����WFx��b�D�p�B�VO��S�J�UY�Nc����gd���d<������qs)�YE�q^:�zYv�<���!+R�o-j 9���&�T� ��N�[��
��9���.�f�۲��Vθ�D^��K��ɻ䥽���C=���
V&�JQ��L-��~f������X�'��Eg�Ъ�wʕ.v�l�-/Vc���
M�+��*���|^:�Tb
���L�ټR�/��®��9��m���L��{O�ў9����
-�ȰU���e��x!�&�/ s7RP�ct��&��K��oc����Jo��t\*/�=�W,9� �<����������FW�x��A/[qvIzAӸ�����J���3S�b�E"(3/j��W�
[-,����B�[~a���w�c��	
�9��)�Ɠ�_�>{Q���
黥m���X�y'�`V���;�%
G.�i�&RF^0˙
�b�P0�ǡ�?0	��,�p&�Q�G�����/oF��G��V���K���;
�)�qp��.�Y�-w�:�VMX�&M�ԋ���
�M]=+$I��U`K2���K$���*f�����Z�����?��a��9��w{(��^"㞂P~U���u��jљ��6Bo���L�a�W�
7jA��(�dDM�Ѕ�W�ǟ?/9�W"�-�����a����]���.�z�꣺��Q���y_�(�m
��t�L۸�N�T�[;��4�Le��@>��E���8�/Ee�3��ҟ��
���&�m
�Xd�����aw�qa���_AM��4��B,/�v���)�^%%ͮ�"%=>�}��,�Hh�Y�V�]�]��.&�~z���ؕ��a�g������y�$��ɻaw�
�nP]���<s�I�oi���e��U�1q�~��o�åMꄍN��ۨ�J�ԣ=}2?�K�ƣ
�2�x�}z���|��ٟUWw_�~Wu&#��GJR�_�yw�-슠E��w��9���T�O��xs1
��ٵ���3��3(?��k���(엿ބ=|�O
{�v�nvXj2�$��x��*w
v69�y��� WX��no%IJ�3���(*�΋I��?��
�K"
O���>�v3�&�O�.�+
{��8w��[��U�
���\�3uq�-�.���?�j/�
��|���E�y
����%'��P���*��&,:�q��{R��O�����"S�"�Dǟ���|�:
|U*����;[gm������_2��t��#?v?�t�tD<�D|vǯ�9�'
>{�t�S
-���,�?nd����۰�=�D��u�����?0X�']�h�Ik�3K��Mmt�� �#r�1$�j�t����
^�
�ш
�Y�h:�W(9�1�s2%��D��גÞ�W��^v�zڱ�Q��4l�])���ނ�X�2 �
QNw�P!�ݗ�.���*�\~�I4�ԓ��c����IŸ�D�~�t7���(�O��"b)a�
��=��K�2�̪s������Le#�
��D�:��1Yu����}��������
�e�g_���v��حg�a���{��E�DT��DV���<����/��vA�j
w|HP5gbT������OW�b��2)��l(#�2�B�{\*�$�sǣ�9�^E��?i����uذ�da����K�?��=����%���wQ���D�ț�s�FTꂁZ�T����i�mce\�T�6ވ	ܩFN\/�Υfw���,�y$�����c�.%��~���Lީ�	�ey��n]/v�*"
�zk��aX����(%��R���J��
ޯѩ��I��/<�=v��Waw^��F?�]��
�� �942�E��d��ș�AV�Z�lj��A��d,]���^���nFe�\:~�yvXv��Tf��טl��1��1Ɍ�u�;D����n\IO��ӃVZ����
��;E&m��Y����B,��C���G
�Ԫ.�N ���]���'�8'R
�4H�����
����;���h�A���`iN�6�:�m��viy�� K

L�#�1x�Sn�ooY��Ea�=�� �Ps��Â��1�c��aW�5�]rԋDaX|��T1�t�̲�T��Ekg��C^y���J��z*X��5�ލ�z����&˅�F��Em�/�.
�z�$��KH؍Ua����x�8��-:QP$>�#
���(��3*���};��Q����L��-�}��ر�e��T �O
-k%�j������[)�W
FBOG�Ž%��O&�_H�j��Dz�ڒ�
�Q}'d��j��2��Z�GM
��!��C駲$�2*[E�ȞRXʗp��AI���̊�;i�̻Y%��0�%
-̴~D0��<�*F��Vٵ�P�V���s�u��9!ϯ���1
-��i������-��3�a
��ھ�mݏ��r�q�Wqؓ�E
Ɨ��/�xn�Q�
�53M�=�ct�YE�����ޅ,���Q�o�i��m]*7U 
�%���`���Z���
-��Rv�����ΜO	��~5��G�B�c���'���f�N�-�[p��˨
���>�����^�[3|S4�8��|R
��J.���1	{1#������Ф[%6�Oc�/9����F��5�������@�:^�^��H�����
<�y�-
-�7S�e���i�g��֫(������k����<y���4�S�`���y�u����
:gQ�K[��3\Rl�E&(���!r@*/�vkJ�:M�
�6K�{
C��#1=���[�P/�|���ORJ�j

--q��G�t�H>.4�̛�С��n�A�o6��C�xggk,���
M6=�C[�u^���:�R����x���d�����㟊ZN%����ݨ8&8�{z|���uL�o�hР
[���|l��H;Q�'L���JmUL�]
eX�;Ns<폣2��.��:v�N~؛h��ɨ3E���aP�
E��,�/
�3
-Ȼ��T��cT-ZEh�NP�����h�z�՝sa׀�V,Ք���	®�4Z�+
LP�k���)�l���G9X�V�UX�����7������]f�}��ǵ�<����7h[�5mh��X�ՙ&�nO���I��k�
-
�w`�����-��L׵��}��d�Hg�өL��iqw� �q%H�@�� !	!�	
�$ăS��������{g}���:�Cr��y|� .�
S3$2���<�U�*�-6Ͻ#m+�Qv�M7>tg����{Ɩ�5U{�f�=r����'�]��B~�5(,�'b#�����2Bg���h�'0�dq�������خ���Y�bƼ�w��A�)0)
�[n����w�'T��n��P�����WT�>��i���Z�� W�+;�%��υ^��o���d�lc~����Y
&㼹�3K/�c���q���dT=�U�� ���U��[�F�G��:�%}�����3��@hu���:َ�:����:\���qF���U��468�u�UIm�v��d���*�d%ȧ��G�&�>�f�Z���ZJ�S�8����|�yG����neڵ�X����CS����)^�/�g�ݵJ9kBf��t#�4󞬟�-X��җg;�:QS�D��h
��d���P[�b�m��,Lғ�f:���Y����@WS�V ��J���"B��
f�
H�5�ei+�0Y_�
��ˇ�J�?������
_���9��0:k���~���Ct�����9˲��N�Ȭ]�Ҹ#aU
�ޟ,uN3�
-L�|�ceO�ݹ^B�|t�<�?G�j�}@�~?h���0�s�I��hmk
�G��%� w{�_�V3*�*&��PW�9y�$���H���<�7V�3!/ؐ�_�%u��Ů���&�f��1�ό�0#g��Izi
|���f�b��M
G[��O6���
��c
qhb`�:Z��4=oM��i�����u7x[۝���vm
סk���x��U�=�.ݐ��U���6�m��a��Y�vў��*�E�)���Q�
��M:�쐺��ڵl�YΫ2	��[D̎�U�<�N8
5�ɋT+G?�M��F��jQS�Q��XS5b6��NSK��f�KG���(9��:��v��`�G�]i��R��#��ʑڂE��3}|�tF<�
��C��ڱQ	C$
%�E-��Yf�m��շ�ؼ%�Eηf_��)��B_��E��ߓ�,�-��in��������RwՃ
Q}Ŗ�o�-
㢞�d:�;�N�L���2
-~b��ۤ���Yj֦��=�ο�ы��<����
����VP�&ʮeA�su�=m{0�q�g�c �_b�a���4��Q�Ӳ��bKB˲��U�,�)gK\��"��TPK�Lj�+����qj���&jC�,2OSs�"r�Sɬ
ΐ�I��)l�X��l��01jM���
�I�)�E��
z``@�JJ0״̯�%�|�E����2WF�%����~d�b?>�4JO\��煝h� om��mW�
[�:Z
*&�2]�f{(��GF��j����NM�#��9SZL�e�Q֑���F�|����o�����:X&��:��;�����,��;f�v
�#��y��OK-�kk1��
�@�s��S�cW���ix����g��
-N�� <d��*�`�'�-�j�R�o&Hi�T�OM�;�zdom���.q�g\�K�I3t��2gL!�x���/�l�g���,e.	��'���R\�foգ�v�]����F/�o�Rxh�%X�
����yW����6���WK�/},���_t�������/���#
u��睚��G�M��S�7���7�:
nm�U�<\�cN���܋<����y�l��}_�-�
/��ɹ�%�:Y��ϗ�����F�|}��
�̦��+���.��eе���S���"RⲈQ�g�
�躺̪F�EQ_�;ˇ�
ܚ�E6���$
����j��n�b{��KD� �?���|s����#f8&kR�Rj�e���=N�YA�������x����'�f���#=rRr���ߛ���Z2��V��������ņ��yr�}���e(���t�3����U�~m#�6Â�N��s��WE/�kH9����Ѳg{�
mO�-"rꑑ]}�e@�Jv�
��=�]�E>�ǽq�iE+����N�M����6�Ju�I�v!*l�#����k+�o��LR���ӿߙ�'�<�� %�!�I�
B�:��191�7KL�F<Wr/����sI��g���=����t�GN�qKI�>�b~�:m�.�^p��� ,es�D%����vI^��b
د���
�F�����u��)b�m��[O�.�R]�z��4>�:�I�hU�I�SG����;�x�w��@E)���M��g)Yn-n�z���¸��}1>�?�M�j���n��k\�T41��
m-��l��X�
�l��&{T�l�
�j�bⶅ�W'K����
-h1y^<� �-�&z��9�˂w�k
-[S��]!ͧ�g}�wM�=Әd��bE��N�b�e���Y�W3�,1Qgfա����!��u�䕹����p��?-�ƳU6�6�O��f��t�_�/<1a��1 �
��V��3W�V��.){u�,��_�Ua'K|��"��)���K�a��8��O<Zm����:~����^��
�����h���jP�����1��զ�ڻ�]yp6��e�lo��
��3�M�j巸ň��il�R�y+*�v��
�0�|���S� �e��:�y�;A�X�B>_��~�6��5��ŮYx��]�ECC���ﲯ�O�<r
�.Ƽ����XG�
�gQ���`�$"fc�*b��X'��C-
v�c��Sа���+;#���Őp��&ӯ�{�p�v*�3�4
m�c�����xKߖsk����Z���>𣏘���Fq��I|�Rs��3���&��N�c�_hν�k���<��U���1ɗ�\�GJ/tL�cwG������h�.��~\�(��2Jv��

�
��X�,!�6�|�C�Z��1���W�0�m
��?�77�൏������~���W�Îu��C5��''g8�T�����y�G97��>���
-Rڡ���<y��yd�!
)��P��pK a{�U/M��7����R�g�$
W7F�G�l��雭��Ȫ�=3����c�T�y�'���c�ǫ_�I��>

�US+v�+"7J����\�+�}��"ZŰ��iP�]Ry�%k(e��iп���C
�1Tv�1��9]4{��}.�6
uL�_:��1�z�@M�lV������}2\����}�*vg���k
-q�%T�WD����;��9
s` �{��D�
�5q�2J�_G-��C_
/� �1�W�x^-
�3�|���k�3��
-�מ���'
d��ZS��[~��!��-~әWh�÷�*_8��X�ǘ�E.eG
`���W��TTP at M-	f o��b�Rh�|w�cG����P��U`� &���<���Ir�}X�q�ӽ	L��G�#MS�e� .�H��YG0o}rR�_U��/�g��qy�Zh���#�Ǭ��
�Y��xo
����:A�O�WS��;
��e����a#̜���h�����RQ@��ߛ,�ڑ��jk�/;ø��!Z�r7�ᾐ�3�~�+D%�M���ƫ��z@���*_:��̵�׽�7A$���fz_p�:\��;�K���3�E��pI?�sޅ����y�ڒ.hj�.���
�_
)�k����ehͿs�HG��?''}+ee����0����e��GFʳ��7���
-	��i�%%拘?��/~�7���ѓ}ͧ!f��ҍ~b�N?*�Z扉�w���� ߎ�>5�X�*��.�Cm
�6>��.�e�x�oL�0È�	�ʏ���^�Z2�EF��
-�(�BD��0���`�C����x"z����'�G���h�`�z��(,d�}��v!�k��}�D�i�s
,|,����!
�Y@�4����{[�Y�
�%�N��"](��2������c����Uv�W�M�O 
�>��8����RTtmE���W�9�T����i��
!����KRB��Z^��� �5�N���AP��
-���\+��k��5.�K;ӯ��
Q�^#
�3EHv+�����x����k
�g#
���w�r��R/���4Xh��?Ǭ>�Ӫ�I>
�¯!��Ƞ=�`{���jOѭC���~�jj�OA���Ϳ�S�r�Jr�KFLv�aa���g�֤�3ԸYG�Y��!�m�7����ʯ�������R��01F�P��z/�m��)¾�.��؞��Bk���#�^.�T�G{�̢�!�
�������E��NQ�c�

�3
-z����i���7��	����
�����C]RT����v/���0>f��{�
��f/2�-e:Ŕ��d��>碬&�۝��;����V�ud���W�(�4�.w��K홗�
qf��tM���%��Sc#�)�d���L��
rO��N���8*r���$5����K���[E���挟���o�δ
���S/���=�V�m��Y�=�vt9D

��pCsu��Xԉ�}�@�Y�@/L=���p�?~�����R�8�c5
3+x}y�������+ޙ�yUR*-���5�<2��iu�-�{r��o(���!D���:8�\�1�'��f���@��9{�‡�]I���o�!����]�61%[�+��m�<;�6�T�J�
�՛zy���9/�G)7��
�cӍm�w��Ԫ##��&`�w��
�#�Ҋ����+"f�e����,��Y����&�������"<
-t��܏O���0쿀^�r˱��%6@��}v���Y�߸|�
2ZӘqi�C��o3�g+T��/�s
-����	r��.��G ��>���p3:^�2���6�e�ؽ�ܛ���׻#�0�
41�B$�efӔ]�$6(��Adڧ�N͑I���XF
o�jc�z�)����/��b�푖
;�2+�3�W
������=\pC��mo���3��nm�A��^�)��3NI2��#��aOT������*~��˭��w'�	�֊:A�����7J������gѱ@mF8&a� �>Zl+��/|�
5�>��X�I�hlz����������s��Ⴤ�o��AÀ�-�?5u�>AK��
���m����3~Z釿�ܔ�
-n�G�#;��(k�1u���k)�>AK��#,��z&d�_�`�wqk�2d_�NvM��z�]��pJ�1��һ����
!�NQson�!S /�5T�|{��}��Sy��M�0E��.�o��������_��/,6&���"�u��C5�r������3����!$�D�x�tU�R{�MS{���!�㴜��z�lM�n"'8F��=S����E�6���,w�?q��H�
�����Lj�J⥖���RKŝ������
n:�
�d�*�LM�f���Dz'�!=��ֻ��F��ӊB�[�m�CԵD����
7� �_=
j
G��AE:oa�=�A��l��g8��qj����w)%�{
��}�H�4��]u�v���{b���s�"�NJ�YN�U%/�g5/碆�~1��r�C�Iz���W�$�\Mm�%1����tM��+y�8De�l2	!ٯfB6z+�n�?5����V&���>���ǜ+��e1�:b�Jo�
�
2�d���d�]�� [...]
-��o�P����Z�.FǸe�8�\u�[^�x�1�1}�����C �蛣��@K+�()��:�F�o�>ѿ�}�C���1�+��n������Bܛ���+c��oF���P7�����jk��<
<��ɺx��#��ڶ
b���3n*���Ԗ}��^��J'�ζ�k+{�9����=]m/���Z|}o ��9��7v�ߜ���f�
新�u�:Jo�ع�Z 1?�`c��t�C͓��Qn��)f�o;�T}{��vx��z��k��ir�?�
��M���D҅w�]R��N�
��K
�7V�s�ZGK�eձ������3�����s���e �?}�7��)�| �^;��!��.L��S��_�CĄ������{
(d�7�=���1�W[0�j���-�AH��q�$C�s�B�Lu�W��ޟ�~�U��+�����Z:��xM�M�+ m�ੈ��7C)��EI)��KHY{�t�|;��|s�
�{�}mc�����G�
��	y
-E7���
P�A�q|�J{��̋���5�Q�.���b���4>IP��m�ȟw�P��:J��I
�
�Ro�| |J��G�E�MS�'�?
դ]5�Gl�V��"C�?�C����ۑo���E�v�g��Ƒ�bv�E!>��F{�C�(4�1
��Ͱ�
�Ʋ��G���
ſ���w���
,qN��^ T����[��n
`�~p�ߥ���Xn��m^�}{�%�K\���-�<	���g_�W��卤`&���ҧC'�Ő��2d��B
賹�ͧ�#�$�h��\��&�}f"W��V���@ۣY7���T��|m�GN�82?�b�դ�9��	Jf���v�!k����èg6!1�5LJoO��vDؘՏЧ��;�BL���6	.f���ur����֖!�kMSƯ���_w��!n19�D���HI���+����iz����'	5�;	-��1R�wS��8)?���c=2N�,/�RpN�S�*7�������n�Ϊ[�qR�
 ��~b��=9^!@�\j�>5��'�q�#�t}'��Jo��#M�>�O�Ob���
�k���1���Y�+������կ��
��0>�
�/��o���v�=п=�
DGoN���� V�^�ȈY�����/l��\55��b
�y��R��\����

a�_�e��۫�e�w���>t{����b/䅬��vUʓ�!��^<�S�N�5�Y���܇Ją>�+�������PIWʣn�M!(zz�������~i�s��乶>��I̫���.�Wł��#����^9$�
�;���\�
>
��إ���}ؤo�QI��;��G����_[��d�($�PE,9
f��9�tu��=���xu�y�v�p21a�>�������Ǣ���o+3�4C���G�+�
!�6\z�=��rk������mS�Ѐ��Z&��Sy�=G�9�jk\3��x��Վ�۫����RB�SN+T�U�.$�]��cR?/��
����:i�%��}~������8">`䲶DuՋ�O=j|��
&��-6�O3��i�\���
-L�Y׍]	�����]g�3���7�j��q�_V�5��������~=>kw
a
'�uJ):6l_BN��k2����^
�R�T��
��"�����)q�����Ǫ;��=}k�/���K�QĹ�W��}����X�Ex�Ĵ�)�[�;�>��e�rst�&�&9�\���􊦡𚩽�e��>���Nы�"B�����R{�M�
9�-��Y'pov&�o�{�ϴmUO�> ^�h���if��G|ȞP ۜ�l���F`/��m
V>v �䒒�u�ʽIh��82�'P�{��+��{�������8�?
*�N���2BI����"���@G-ٟEEkſ)j˯��K~�J���9B�u
-	p3��l���T�E�z�_
c~�p�.m
��yt��|S�Yp��(�m�Vt�yW���b"�m��w���9ߪZ����['�
Z�

l���>o�m��7��_�ss.� �	�Zȑ�T�ݟ}k�1��zG�ݭ���ۃ��tRp��0-�GY}qX@͂�j��r\��=��xM�v�5Us�mm+�����aE���&�I�O4�̍���-�����r��~,{�V������y�����z��SJ�
�Xն������ۋ�~Y�*��9�|�!ľ�"���
�S�O�������ih�y��CTP�b:B���-��W�bRƑ�v���=[���-3�V)U��⾈��㾔ٛ�I�Lc�ׇ��O���%�ݗ��N�5'K̆�	D�8;�U�,�s�V�e�M�I�q���K
�����o
�
�04���_\P���ͦ~�Ӵ|��.h౫�Ew
-mL :r����
����U���j6xk���8���rL�S��^��}s} ��zo�=��Qj�P�7��ϭ��7@�����#�� �1u�ܗ1���� ~{fh��d���SDLZj=ڟ&ey���Q����Q~}w��⑱�̃�gk�����Upb��G��SU�u�3C+�R��{��
/�~=�«�)pɪJL:�-
S�X��^�#����N�
d at E�9_��O�L�]���=�O@��Ą�=-����SpF�CBʹM��lc�'Gjr������
��e���
�;�e�ԍ!D�b;��j74ħ
-^dUX q�3��̓��A�
����i_ָ�?�9�S#���Ga/�3,蚐�]$$Z��E����ܣ�V���� �7ewrd��y����~�#/�Ir�7��§�L����,������s
��|�l��{�L���ĝ��ǖ����:.��`TKy�7
��4��u͑K�:���d�������{K=i���Gz|��Ǣ��!hꡆ������y8M?��L��2n�
��]�=�7��T�g^_�P�Г�F�c��)kʻ�l+
�*��(�e��5�w1=����;gFb��*�fq+��ܟ!����88�2T
���kU����k
=�ဇ���3n����3+��:�G�(1@��Ԥ�S��K^>+��C����}
1ϩ'埬0�~u���\Z�5��]���>b#we5gkl��xe�zo�Հ���-���Z��l�Y�*s��Ku|@�� x/s���"D�^�λ�?	
���^�R~Zjϸ�3yy�㢽z.�6C��̱+�GP/
��ޛ�xnlK�YU������+D��B#�
�����2z�c�S�5,�CJJ[� ~����]D�1�Rtͅ�n�T=���z'$l�
��N?2�'��	qq�A���6z
��Cm��Wn at k
����j�+g���@����_
��J�3��c�Y�3�
e�"�
-r�KJH� x.�f�x�f@���JA�Ŏ�k6*|g�r��⑱��ޑ�Q�+"�lO���~-��6	|�d�w���cW8�y�)�2��Z
�Ey�-�^UkӱA��j��=��lB�~�C��T�&���eO����^9�tNⒼ|�m
-
o�"�3��C
ym����	{�ڋ����o
TƟhQ�_6�U�K���������CMw_�Ÿ5���¥D%['�C��Ȭ��H	����KN��ln�:\`�Zɶ
)ό"徾f�(|������s�0q'
<恑�?Z���jf�u���5]
�6 z���=EI[�A�ؙ��%�(��
�+	��Id�� �1P;/u�*��Wm�>�o/��W�3�����.Q�>=��&CDYEȰ`ޖ�-UC�Um]�5�
�R�G��=Z�㼋
B/=��(�4tc�]�9J�Z��}�o�ܕ1s�j��M
�f~��5ѡ���)����-�6X�}	&y
�C-��>�Y�s����䢕^�í1h�����5A�G�"�E�7�)LԎ���rw������v�Ko�&�YNY
�2�,�ӳݳ@mOb�zf0qGjl�
��)����֓V�����J�o�X�/�c���
�Q��t���=$9��3W
�K�|k�E� �g��M�
7!�^'yGH�T���h�
-�ʸ�>��'�l�����
���f�	?�
��\�Z?��zW�����؄�yRa@�M3��� �/��^�C����~q�����H˪:RS
-��ꘝ�'���_t�	����L*R�!
��㢜��,��&�HˬrJ���@�@
�:fj��W�
�
%�{Bt�m�:�XI/9��	^%d���GG�]�~C�đ��s�p���{8�O?��)< ���`�燑Q�c����z�C�	+�ZGJ�n����+�f����6�=�{T�kV xH>����4�4�Hѽ]a��
6�|��84��&�1[��u��;]b����t��"r�C�]]G������n�
ʚ
-eK�ݵlԑ��<�3ɇz:�;�M�MV��f��2b���ȝn̿-o.
���Ȁ��<���Oسe.cOJLY
F���[���}<s5�n9��:*�e*"���.�C�/���L�����Ǫ��ۊ�Z�*���0�G�,��rc�P+����`��9�
-��€�,{b�Ƨ:�\�[#�o�X%S����.B��t=xw��r�a�
<n���m��r�������z*C�͠;���
.0���
>�Ś|B��H哭q�����8�S�8�,)�e�V
�r�S�$�)�1MNz�
�AE�>� x0�A�|罩��	8�����'rx���W�1-ӣ��
�����㒣cm�-�9��C_�e�耲����׆��ۓ�
����'FGm
Ÿ�+j�r/k�v����'�������m忍�S
�%�jz_��%"$kJn�9?n}�z��P�q�a2և���M���a/�c��B�� *\ѐ{ѯ�B�k��!H�zw�/
m9WlS����큚��W3*m2z᎘�i�k�9��*�
�9\vG^���B�rsk㝣!Η�8N9&�ԒSBJ�
-
-�h/쎖?ڛB���?:Б�O�XD��	�kQ�F.�<R��Дy�И���!��zWƍc%:�H[�_��E���/��_A�ܟ���$Ș�)�Id�k�&�9ǭ�t���#��咑�� ��s�C�K��1��ιn���Z�s|���CB�e�x�
<�",
q�P)�K<�W
�ˡ�����oڦjr|:
���Rf�`ݳ�����m�M�`�P6��*.�2��\�.�mc�hO
~�U#b?�q� /���Zw$5���]6)�|�#���1��������9 	?^m궨��ʖʛ��Ȁ�HF6���&
lR@Ǯ��RQ�OL
��Z�>�g�W��/,��͆�S����ə%�܂MQ+n}�_�3I�<]�`�����>o���i�q�
�hGB�p+�x
Uc+�w�eZ����*�%�L’�x��Vm�.�
v�<�[���xK�qn���O�76�}��&z�]
-}�3Qr�#CD
�h��F&�9��||�!��,6�!AD��<Z�ʺ�;�
�?��͆wFī��Z� ϲ3}��]
�3�H�O�@�������*k�X&)�k���
-9����Ur�/
+q��
����<��^e����I�	J�u
�n��u 
�7-+�{
��@EηL᣷&��ne-��}k��N��|�~�����+l�S�#��b"�BT�G^�pX�
]�N��<Z�ا0H'��'�1����Ib�u��В��n�i'�L�cml͸j
�x
-�C@V�Z큄
�AMv�%�E-w����-��pum��%�$���_�I(y^6f�*�=M�O"����~5vT�t �ki�:V'(�i��D�M�=qN�_8��d���x0�Xp�x_�
%w����rO���/�G�"}
-L�����;�ܒ��<�wu^

q�%
hy[���."�*�E8fPqgK
��0���4:�d�G
ȕ�9t�u�������K]y��K)yG�F��,�L%(�l����U��
-���*\@�a������JW���"J�b6bc����W���N�|f`^д&��O�cF>50�Dl	��mRd��
����@'������ӕ��-@����)_����):P�r�
-t�G
�^�{
M����~�9qy ������J>m�
-� �:��q����e�t��:5��о���y���jbٿmu
��jN֘
����Ք��x�ӵ�w�6�FM
��
-
����J������{U�̀
-
�W�8��� =�U�����zʾ�9}�~�qE+��`�<>���2�4������N�����8!��Ƙ���X���ms��l�
-�{^��$+�2�}�
p�}
��)�D����
Q=xKԆ�HZ	{bn�u��+$Ězʃ�h=��A���_����Gq{n�[U�rJ�.ȋar�����K�C�O�Uv@�fh�^%�Q2��c�������}��
��'�����M9��r���ӣ���'��D��Y��g�NYM��43O߆��/���X�
��"#�۲�,��_�
+�}|S��ҵ�=��G�
ij�v!<D�O�e����1�g]S�5�4.٭bC���ꦊ�S#ចF.ue\�$��qQBK�����G�C/
�ގ12�wT>��y��y^����W������=�[�4�r����4��W4e�|V�[��=^b�:���B�|jT�u���
~#����k���6��OA�s���E
�t���G��}�-���O�;rn9&+�� vT��C=}����hU�j�q��b
�"�U,| ?��B߸�r?��g�)G
,���ƶ�,݀�����T�J`�
&٣�)���H�$&1�'���qh
��X�D�-�0�^�} [...]
-~t2O��ok�ħu&�x�Z�u����F#
눀֮�9fpY�n���1ě�s����
5�&2ܫ'�����6���&&ѯ��-SȨ�<
�u�������x��٣mb8d�
�
��_tc���0��7
-^��,#��N�k�N-gg��'&&����^���d����IW��o8Y����9�#�$�HM�f_�	���,���� lJ!�U]y�M��/���M\W��
�2L)H�y���O�����ߗ�a���7�����	�h��;bZ����������240[�y��E&d�f0�.9�2B��
„XA��"xX@� ��xhld8��=�W�M
�X��&kk8���P�]�,(�9G����:��{&=�Z̾
���w��D;�
�$�힄��1���'F��%~
���l�[FLs��@�=\x�x�))
P�2��,���q��|A�R�bw�X蓑J�
��=��M+�U���R��V��|GA����=Us�3+��'*:�@G�؜@G>��n��zkj:���N�لC.�5�M?_�0�خo��V/X�&�ZʟxT
�	�F6�!A���%_�k���B�|Z��B.���$�ͺ
hn��
eu��Xŋ��g�;�S�N���̣���
�3�,
��jC�9�sjt�m
����6آ�W'^I0k.��H����{��g���'z\��Pɓ�e�`��su�2�W|�h��<
�E��y����H�MQ�y��ѣf"7��+=�7���;e�T��P �/�W�t��yհ�O��}%6so���Fg�m�,ң����x�X�f~�M�M[���Z�>�ۧ��5|��� �y�l �98��y�Zr��<��p���&��>B��Z*�i快�
o�����'Us�q16	-kOB�^�.�>Ǐ�F+H�����h���U�����I^�W��F��	
o�g��zɾ�ԗrQݞ���pU�_)�9fj�{S�D��]�V�A
9)���|Bt�4'��a��o�E����F�W�@۝f�:��:Ÿ8�p���9\�JO�
cKү�����
��B
/~�~{�aCL��/Q�GFb�G�I\��}�ԕz9x���rc�G]OtȰ�����'L�����@�
h�嫽�e��_���R��Zj���
-B�OAL?��+O�x�����':d��}�`w����X哹��{#؈k�Yh���Ӆ:����c�Q
5��U�0Iu��p��	򋟦�ᗝ�j��6��P���{�N��}%�9Z��xO,C�7�2o�茓6�|���.%fXD���պ�O��GF�H�˲�J�o
�_q�Ҁ�C
.47����m#ϣjf9�^5����D�+Q	N%2�9G��ꘐ��
�p����:د$f��%����=
�҇�85�l��gg���:R�l����� �Ł�

-�FlS�ћ"V����*��D5eꮒ����%
bX���oKm��g���ڦ�T
��~=����[%Ȉ],�o �}ެ����4�;C)�u�Y�l���w�m����BA�g*�w�/�n�� ����� >A�\r����
�ᯛ��?�)�C$�=]�rg��A��f�7���A��/����m����j�i;��'~=
��rn��)�Z&��c�sp��8��!�G�����
ٜ@�Z�����gY�!1~�������	>5q� G��e�"�zfX�v1.fWꨗ.I��
-s`�#
�eVY��푒�Niu�_Æ����|�����P�*��<��T�p�)E�#�!�ib��X�CSG�/^	:�7�M:V�
ύ��`��3�
�,9��2�ꔣ�8g =���
�	�^
��t����~
�R�*��AC at S�>20a��K�
a��c o�s��º���C=���
-
Xcl�_����*^�x�{S���:֑��kc
a�Њ�\�3�}2D����)p�V��s��e���x�Os)H�@/�����}	2�=Kz,Gݒ�x����
��
*&l�x�Bn@
Ԋ�����e
h��1p�CR�
�����
u��������ť��Xg��8��s���m1��khy��4�}
§��:��D�,*�h�8�~�'��gq�G�๶����i��
-[�I�m���Q@�!|�h�<X�s��]�~����?X�S� 7k9�}-�а�����ՙ6��
,����Qr%�������M�KV���@*�{U�,p�[ߙ��o�Rr���q��@��q�kl��"
�T��5����w��:�O�K�̢b<���d���˂�|��,f�I(����}Zg1v'���c��=���‚ؿ������}��ms��u!8�`��3�W%�L���q�B� kJ�y��]�^���M�,�+xU��:��XG���8��ݕ��,��
��-�h�4%�2����6V�,�� 
�Ԥ, �cmӤD��S���Ĵ
����!C�I�>=�`�3
-}��]P����2T�� �Q�4=3X[
��yjٙ���C�Y���g�S���B���S

v� d�j�y^<ag8��c��)FD
/2�n!�5�K
-���Ze�޿���'K�r���Z9�k��������}��!z��	'���?7��_��Ȁ�X�!ߞ�
O��6����
4꓁������?M-�'�F��]Z.zOU����8D����@�D
͑
-�

�#

pe�c�&��T����L�_���on
�<���.���W�A�g��5ɇ�f�钠��H.��I汲���KΙ�S�i��.��#
.p)���s��Q��}��Ľ������#�x�.h?\�3�s,P�z�Zʑ�^q�"f���T��"bk��Y�:�+�M�+u��_.t�I%;��8�xի/+,��:�fՐr��!�3L�gA ���G���k
Mgf^�k��4�9�Al�L
,�gln;Y4��Ԕ��2�|����Y[��!ukj�摪��BD��f}�KC.���E~=)߭��?��<x
��.�*�p��x�DG|Zg����C at o
��h�E6�4��E�Km�}�g謸�c������m��]�p
�^6�J��p��np
-#��7�����>�.ۯ���ڧ��>�7�
-�>�a�
���cS-ť���r��S�'f�m	kR�bR��
��<Nxc
�zfA#�����|�Oˁy�\�W�@�i���Ze���
���������n/uV�^�>�M�z�
�Q�G�w>1���<B0�@�K�*�\DE���(�^5��� �A�2/[Dz��&r�ۧ�
z�$�
�ȣaW���~=��pK��6]��)��v�B_�g�	�
�l��'8k�"%�
/q�68�6S�ȯ�5���N�#=>]�V��0�̢�( �A�Ra`�y�:�P[��3Y���c ��������
r�a�\���P�|f��.�&&��T|��RS󞄐
x�g~5
�U�A��>�~�����6P�g��`N�c�
8:��,��wd #���f|53�~=&gGT��&E'��5
-NV85zJ�VP�r鱱��u��z,s�����P�3��}��u��p-�B�갅~96��H���̣�̳�^MM�Q������7	4H�[�N�,21�k��?,̓��[m
-L���@�\:�k�dnKaa�Rd�
�駋�ɍj�}�<��1r������e��~
���H��9lҙ���bi�Rw���u�ʿvy�/ۀ����W���	���\*R��5���+�?\d�8���\�{����<��*��F'�H1�.

u����tY� �
�WM(ؗ�ƚ��uzu`��1�c�g���z���v销�*¯Ƥ��ӫ���S���{-76~Yml<Y�S ߓb
E�؛&&��\�_%���)s
g���
,��+,��Sa��*b�WE��d�Q��h��u���d��
-hi%@
���S.��U|�W�,��R}Jr6���N9�L��}Ym ֒��nM
ѧi�u)x�}99k_�K�C����o=JJ
���Q�3�<̫$f ���6MH����7G�
�夬����|
�.�ɴI	�


�5 z �3��&}u�jS��|
����Z�T�wײ�<*F�SA�r*In9�<�	w*(9'K<��
-�zs �w�T�C����{=�qn��S3�̜퓮������mٲ-ي�DEJ�(Qs� ��s��,KV�b�9�9�F#������3�u�އ����0Uú��BQ�D��[�
��֣��Ft�+�������C�nD�m���������ɏ���DMbr��5��P[+�6%?b���|�朗݀X�U9����u���]�o��c�ʜ��f�#b&Z�����vm�~���ڃ�Ɏ�pM�$�Lܶ�U�ʀV
-k;�nNt�-<n>`�Q�����l�1��t2��)�����'�ٗ��y-	-�$:A>�m���|v�E��MHY�7yv
�x墔G�@�f��nG��K#U?,�*ߛ�u
,hYUc7K�l�8L�A�!�l{�S;٭s�+���\���W������5���Y��(L:�"�-����$�J9(����H����+�.nS�����qC+�[��4�sq�����A�_R>�(�3�G�ɬ]�h;�
-�=����<N9d����^H�^����q
�qu���8D?�>�*N�x�k���E>c�P����:�R���y�"$��2v
��iڕ�!J>~O_ at K��2\�s�@+IX�mA��is�wme�#�����u��6zY�ͨ�y�
I;�z{F�J�E�ĨV��f����
Ӣ����^�)e�?���f�a݁��������
;b�^�����Չn�D���emkoyE��ȿXo�}�X�Mx�W��NP�<!���'�d�Y�%��oֵ��zq�Z��fC�Eoش0.([���_+�sod�ЃP��������i^}�(''\ꮕIA��[�ɥq�协�n1/����Ĭ����֒cFsm
��4�l�5�X /l�v1n4���K��PN�u�f�(n�qr�Q�7
O~
-N�
��;� nP��<R�:���S�	
�\p��d�̩�L�kV^SNg,������MĞ�����8j�P��nu���԰���W���.}	����h�g�?.�
-�9›����8j��}��i���<�;�����؛J�Ê?���F�Bf�R�Ne�/m����ܪ��|���1	ie��Ư�8MQ=��uI��a��cSϩ��z�a��)��
5Ҋ����K/Zm�rkP�Z�yzn�M'Z�d�#
l936�ŭ�K��Z�1�vji�^��{�Շx�����!j�P�c����*��>,�����?_o���.��aUy3����)�S^	/3��¼b��4��q��;���/��hE�L4�_��»��I'�m�+b~ps�iZ�����g�3{�%��ϨIJB-�Z�ή��Kok��:��͠%�"b�&h��kf^]@�qnc��D��iI9���K����ϖ��Ү'�%[
Ag��y!8]w`s���
p��������2b`�V�6�q2��oL��/#�W	�)^��~Á����U��p[cA��u��5hT�7�J��;A��Sj����g+���G�(E#�M��qqZ�63$o\7Ĵ��Q�Y���}�/Z��"��r��$���"��}�.���
5�8�#�y�;�ƙ������%��|�I~U��%��Tb�sū��S�Ok����Պ��Q�kc�ҨNA�qK:NEx�ri�E[�⋎#K�IǣQbP����/� [...]
-M�*6�(�>8E��'a���<ξ���[�����fԮ�MP

��~�>�>�0��k��vǯ�Ko������$�1�ʂ��
��
_�K.����O���Y
fN��~
-:�R��m]yݖ'_���a�,��G
*aܡV����WF��S>�
-�(d	��3�;�zET�.G�""��.���v��<2i�-����N�,!���
�d�yþ��]��H�+�
Ǣ��+��3-aW�c��È��˘KȎ��i��/2�)�?��˸ �����f�+�a�I���������0`V�$$d��9Ĵ�q���W��8
�=��)?�����N��Ѯ�?�_4���D���]~]u��,��VÑ��W
�d�pb`%X
6��b&&hJ>b⃗�-
�N����l��χ'��i����/bm��Ĥ�]�0��S��YDHYdԘ�_�4
��zn
b�a6!)j��������
{$�L��(h��^�0�t�|����$�j�."��&/i����_�[:�G���pO |Z���z>xnqL'!�5����Z�[��u��+�;�3x��6tqc%=f���F��vn[�J��9�z|�,jtf]�����;��b8?I�\'h���T��?�
�	�~�t���_7�����kQ�����(�jh�xns� >����+1c�����k�1ۍ��=�*>}_�ؕ	����!i}p\҄��,�(hXn;�w�������͘��^ҥRF����VL�[�$�{�I
�22�r"ndV�c	5=3�
��z��%��{{#&akx�y5<�g�6�
s�.��\O�;W���f�U~���ۥW��_s.���D&M1��mi�U�y�q(f��&��o�����	����ז��J�ξ�1k�t
�$�.
�0�|:uu�~qSC.L;X��>�(}�r�{P������݂���D���5a���^N�����ݐr�������O�K�z�.�q�()���؅486b�\Y�j9��:���[}G�[e�&�"�{�r���¤����(����q���y6j�0
�@��uܖ�G��0+G��U���I�����L�F\?F
����s�ZO�_�+���1��+
�
7S��Fڥ,�@Υo��CB]��Ͻh�v�i�כ�Z��:�՜GH��+�[3
-�#�u��͇"
'������,B
-����(���K�J�d,�«��I�~mH� F
���T;����	)
�
��*�F^-j�av#
-�np��Q����w_�O	30��
3�H!��isRP�9"�_�(��)�b�5���!�SS6
s�x�KD|��8U	;�$��9��ط��v_� f�R$��ljX�����yV���X�锝�~�����5����
�ZwD'jqޯ��w���I#�Z�.hOXM+���g�fohg75]̰VҲ2L�0�S����
b^H�@4�[��㌓Υ�
-j�Zf�ҫ���~k>��	:���	k�:b�e�i�x�+
�1<ѐ��+q��9%	G�*=7�7����{��/��p2�Wf�Ra�$��OpK�:%5����=��a�Yǝ�?�o���~��3�嚴��uʅi�\���nA����K�)?��:ļ�I;�Z����U��|�;�Z�3�O33�ޭom�p�u��۔I
X�
L��	��
�u������\�aIu��3X5��f�r�% G̬jЪW#Zfy�����	7�%a��/�j�~s�xn{V9ѳ�g^��}Z����3�#��
-��ߊ�z�7���
�8���ꕎ��
����A�O(�*fa5$�\:bc�/w

�U13�ys�p����
˭��1՘�r��
-�ӌ]LɹT��K�
�u�
ߘn\�Cϙ��Z��-���=�Pl�*�SЎ~���Q
�$<�tx�M�O˯�LR��&nն_*ܞ�K�N	5a�?�p00�(��6O;”S!H;�>���2°ߑi�儞^ӱ��Z^��;�y�ӆ_��/�
���ц��gU߮೾'$�AM7gm�W6��p*6J/���
-
�
�H�~��l/fS1��7��
����i򅅡�á)���X{^`�prs����H��M��2��C%I{��
�٧M��_w�o�v��У�	���4�4e左����t�Y��W>s߻�e`��d�Ȫ唍)Q��;n��	���N�ލ7���;���E_Z��>
��N�Ť��_��t�}�doB�V�vPJS���	FYDï�j���q�/fwl�u�vݹ��qѱ߭��?��P��o��M�/���W^��f�
��
Dm�s��z5i�2����K��'�sW�Dm
/�WސOm���}�5�€�R���2���S�M8x-I��3J:B^mp�qmc���
1����鹟��1���T��
-���LZ�����|罪��[%���IW������G�|D*�h9����$j��9�Y+�k{h�*�.�']���\����Z�1�z|m�����t�@8����rs<ʦ����x�Q���l��;fR6��NZEDG����9�,3�}/h��'E5�gj
�*2�r�1x�)��?�ط>M�+hX|K+4V�q�i�qµ�S�K;Y�
h���C�Y�*8i�Z6���;��~v>��
���9>-��wf�B
-b�7e
}�Q�F�첍���
��]}N8�� z�Ŭ�۔v�(I��sH�h���z90�v�t�
�:�IZ?n�tnN��}�v`�e㾥���.
���"Vqg�"j�����y�b��(��1ε�qam\���?��[��VU����#��x�tb04�S�Ǭ�ݳ��ʵ)am�$� �O@�ԯ5��<Tw`u��
�컕p�^��	���1)%���J��3�gW���
ܜ 

i���{	�&�!�M�
��� zf~�'<�||8bcJP�6&�^
�/<#
v�n�˘��DŽ���=��!e��f��ְ�~eu�|��1n ]N6�}������c�)Ny
-�j��	�ąwԳ��ڏ/>o9�j�EI#�,
�ey�חx*�4���W�Z�
-���ב3>
)��Q����z
�r�c6	)n��9�dx��N̿"
Yj:�XiUi�3��P6v�2`���$�	�F~��p�эю��iZ	�b6X���]a
���g����}�}�2���g�ݪ����$��r��b��Aݾ�!����MM�,�.�"�]|R�}p��G�LW�Nmk��
��Z�M�/G�BV��'�[O����)W�4�G�'��d�r%x#y�*hAl|r�/Q��BF�H)O�)eQ�#`u-⎠�S�9B:9��z�����<O�6�χMl�
�V�r�n�髰E��ΪzSV)3s��SԂ��׾��26!!e��̒�NAޜ� �B]򒮖�i/�,��e\bz����p��Zf	���%5��������oL��4{�ʞ��V�r�iYO�:i�.�4
�<.�}h�f�D)��y���3
-����O"p>���#P�c��I�尞W��+���I��#�e]�}ں?8I+�lb2f�1��뿴�w���X\
�^����-߿1R<0-k_��!&�1�(�Fx�@2^�$���>t?l��^�%Ms/�uڮ�?-=�<��5��Y�v
-H8?�����th�v��:Q������o�G�� }���*��C�+�'�k�/EՑ)~Sd��o8���W��և[E��ژY%^���y��^BAt��G�'�D��P|5�~j	r�4��V�(睷+��k��Svv]��i�yx��c���ʾ�yL<��b�#�.ns�@�
k��&���غ
<�rt�nL�kf_�΂ǣD4��	c���T�	����V������ʈ�� �K4��:�Ÿ�U�Zx
�K�V�)K��ͩ֓I�����
-<�
-jW�n	w�/�!j��V�����yX�EH�Y�~^uk{A}7j6��0��>V���F��m
-N�_^�>�6�y:�g��<Ju��s+�g�-����\�� h��X��ʨA�Ž�KDD�{3�Z"zZyfF(���Ͱ9/�>�e/���N
1#�﹛�JA���	څ�4��z��</��$t��-s�0c�vl�.�s�O��kǹ���ী�W�9�)iY%�3|�/
ۋ쎔�Y�:�vl�y�O�InU|Z�g\	O/��}�S^�t�a������p��qg� i�x�i;�2�o8�T��n;��\�d�
��
-�|y��G}O�����
�⟋*$�
�kU�-秝RvBO�����7�Ǘ>[yI�%:�"F��ҨIN��:�*Eubf���D�n;�䇦Eu[3}��f�7RPGq;�)��5c��6�	�iF���u��3rb��g�Bj�/��L�ڨVX�����S//���5�K޻Ur̤�,�!
_}W�=�9��7�3Ko��Cu~�m�5�x`�Q�9B-�v
i�����"v�$4�.��Ԃ��[6��z\�����ꧠ%��]��[�D
R��%���P�N^oy���›�_7��:Ԗ����P�=
�
Cf1�#)��%:�xp�Օ?�\���i��e�M
-���*�4�ⰞY�ڤ�ܬ�/7����w��<�>N��Xd4�&"z�6����(]�w��^���}F&����\�8�4B=�{�x���4
-:�]�����t�����
-��ʿ�=i?5�������Ȕ��g������[�O����~^��� U�6^3��������]zJ����]�����a^"�Z������oP�X��z��a��I�L�5H��V~����%
�4a������g<RΖ_H�{
�֞�z��į�nu���8�\�,"d-�欝ߒ�p��6�e��y
5u�N:ص��(y+oE�a�*����l�Z
4�
s�Z�Y�
� cV���IgFe�Hq^��'[�}�
�S.'�y�IN`�
-]��S
f�_�W�����c��o��Aů��L����RN.�f�w����y
%�Tu����/�p����L�vK١)J�쓲=+�+��Ny΢`g\JQ�ȫFmrf��+���
-;V���-���� �KY��-��:jQ���=��K���I���{��c�8��s4̖���WX���Y����?,ɻ3n�$	^;ia׭7�����7/|��
-�1�U�1�-�����X�I��[�p�%���+K���1����K�I+�6f`�,�nܷ��vo�M����@���k�!�k1��5�[RV�n+�Z���ϫʹ�[!M�M�
#Qj�Pr
�4��H�ZF1~�KtZ
>�]�9�|p�i����O���yewfF՝tK��~��[�v	�ٞۙY�`
4��dg��D�	Ĭ�&�}Q�oH'�.en^�ֵ䛻/�����Cۉ��\����0���+���x�,��
-���������G�	���C!�����{E<7,)���~
xU�,t����-�W�6
X
i?� .���-�!����A�0�T(�:�Pe��Ō
�E�������A�^�y���
-��!�qZ	h����;[^!#c��z����j8�Y�E3���2$8�X�_���뚃���!��������*v�i���N��DvZ�&��b7������Md��n";-v�i���N��DvZ�&��b7������Md��n";-v�i���N��DvZ�&��b7������Md��n";-v�i���N��DvZ�&��b7������Md��n";-v�i���N��DvZ�&��b7������Md��n";-v�i���N��DvZ�&��b7������Md��n";-v�i���N��DvZB��D��A�w{������O�/�7�ʱ6���v������m?���N!��n�����_
����=?W�ڙ{���#��A{��4
-�
Y���$}�g?
z
-
�
�sh������>9p��#?
9q���'�
=x�='�r��_�8~��Ǐ
���<��/?
;v�ȱ#�
<|d:t��Oǎ�<y����r:r�ɓ���<x����A���c�����'u��?����}�﩯���I���[r���>��%���_�x�+�-&<
�)������I�x�����O��|\N�W
��'8���[*'��i�s��=���/ ���	�?��'�ן'�
�8t���
���7|�w��S��?oωc������3
-�P���+ha��68ū	�8
q
�!�f֢fҕ��\7�*�6~
�q#^��%?8͸��"Fqf�1P��
�K��Fa>-
�VڵIq���l��p�
� :E-�OS
Q�JL�~*i��b�뷢���-��ത%0ƾ�9J�
�����쫨Fږ�(ys/��+o��	��%��<�>A�e�]��1
�*�d��5䋈�U��
��C�EL����Y�1�W�v
G���mwWW�&"%
��,c��rA�&lߘ�,�k=!���sJ�&9+���S
-��;i+�푄�!�ם��^�������P˱��W�d�EF_
j;6��v����+���,���.<ޞ9T��rfT�)���u�YBN�U�S�
6t�}cR�
�5c��n8��ʮ�8D4xPSVQg�����%1=�6��\�y5I+�za�������)+�"k�ж�rqƩ��'���
�c�b�v�(�g\
h��QX��[�L�e�]B]�2���FMR�,$�
��O&�Ϊo�<b&���N!%�t�M��	=�R�B����e�^x=���9����ۚp�Z#&Ƶ��U��D�ƮI9��K�H�D�/���SLM��̀�V��%_JX�m��߱���Ϩom��f}*5��R��Rz� l��v���J�ZC]}wӞ�gigw/fW0����
-��$k��iL:���L��sb:N%j�В���I����ɥ�UO���Lبe��Z�R�Ft�Ij��f�/�����W����I��oH�c�KI;��W�D=b���J(�I����8�+c��+���CLZ!�
O�*�F����X��Q
�0�%���!�5��Ӎ�zzBz迩�_�z�)�L*L��	�<�gW�
�ք]-�$�Ô�KϚ��xG8�j�Kj�%i��#n�7
u]���^�Ћ��E��n�[~s�O#ߢfꕔMH��r:j�3Q����s�l
-N�&�!��I#�8��5�
�֌[!��(TI�R5č��iAu�,jC�����K�+��~+�Z�U�Y𭂞Ъ9�q�����?�?,����P
���]����.�����
tZ؞v(��I�ə�E�_zY�U�@��4P
-0�̡�v	%�O��8q�K��W��b�ҡ8_ύ�Oݗ�C?��51-��p��V~c�Ω�89�i�*�ԧ,
-^�¨D��+ԂMLJ��̔C�J9������)xa��3*�M%ļ
-i�'� .)+u�������~�{�z$�W�I�u�I���̌�:>�'�QHSv~k��,G,�
7�$�VEm�gC&�y|j�P����]�t2+3
Fu�ͪ��(�6&'F)��8��2�Q�&zɦ�t.` �#	yk��>�,���o�Oyn�F�"	=n���,�M@��S<"&�!9�V�`N�sʹY/���E?��1����r�Q->�\�
w��v9���Q"N^��d�Oku?�O6�iW|����?�nXX�7��U� ��ӫ�6�N2�d�2^�/']��)���Isn�4�q1��s}���>κ6��Vn�D�g+o��?���Z�
�o��Y{W�]D/l|�&�ꮨUB]�� �X��Y;�!i��Ǘ޶�ߜ�_�Z�q�幧�k��"��ڸ�}
��.G�)׆;~1ެ���[�٘Q�2pk6�Z�n5
M�W�nN+j�T��;	x@��ξ)GwjU���9ieVe=��v*��qPKfa{Ҫ�D�����5��I��qc������߸���_�F��Ф�q}�����~.�v�Њ6���{
^�|�E�{U_�
6��Rv
�c�xz�e�/���
i+�$m�<��he��� ��Rg��Օ�(�[~�$ig�"�7�[!���Su%l���Eؖ��y
Rƶ�Y��!_͸;�B�u������'��^
O�n	{ۯ��mA՟�H��MLFlJA�B�&�"V��I`���'=�5����M{�¤W�\�P��+�#72s]��1�[辛�S��x{oC�q0�:�'�V�鄵�|��p$hh��'_Da�1��[�
v���T��+õ�Ŵ�Ƭ������F�*&E��Ƙ�]��ym�EԞ�)U�W�N.����g��/WwO�!a$]�Ҵ�^���:S^
q��7
��^в:
X�����L��E>�s�ak��n�r��$?#f	�����?@�J9p^[�H+M�X�	;�:ba\[�h�s?(�f�)�0�;�9�-Yz�y,8N9��s26fu��m�l�ƴS)I9��I�J�X�̸AА4�[S�Oж��_�ݬ�<8ίKZ at g-3�,�%`fV}΁O�S�bV~�:����$�Mh�W���=�4i�'
-3�Q��u)E�o�y���_������8�����攇&h#�ӡqzA\ϩD,�z���CkoП������
1ϡ6ffg� ^7g\�v9+	u�ZԢ-���!a%F��y1#� af�&�c&^]X+�
Lr˃�,�K��xǩ��M��C���Z~��;¡�7��1v��;��Ȑ�d�y�w���������	
�.mQ���h�X��tl�{nfa?��3��K�X��.8�q:�e\���I;"b�$h�8䂴K)�y�������׎9E$��k�l���]J��Z�
����t9�h;
�,����Z[
m=��8�����B�
j%�
7����XdT84aeW��w0����W��fd"�'�`>U��`�%$�mP
~)kN�ޚ��23Ra
-�gk��iƫR��zzq�)fm�ż�_��͈�i�10JP�T13��4��I�Y����8u��x1��d�o�FNm��-JڻU���O]J�$d�/��$
Ž���̬L�]�[�}��e��L���j�����y䰅U5?B=�8�,�x��|��8#�g<
-yp egT���c�M���g�.1#7�s�v��=7���/���X[��B��si
�2��3s�[��]#hn#�4j�D4����Y\^�ZyM-�p}JP����&1p�z҅�T�ѕR^`�_5K�˓�B��?a��IԤMB��U1#p��Z32K�Vv����‹�C	��}��ӓ§���%a�R�ȼ�>J;�1J���#
~�_߱���W��
�bG��g� ��6�}޸7<�.\�"�i��)���v*���)�k�)�k�%��<��
-Z�t���Qr�6�HЎ�-/��V�OG4���Z��š��c����v��ǔIŏ�8Uc���W����'U_n
�O/��i��a�6�p˪�� 32zx�ʰ�riSG�2� �Ĵ
�?@{D
�Z
[r^)���
�)���t ��Z���_&
=��vd�.hO�����$��
�3�c5nhI6�8��=����K��瘍���hD�t(�
k$_L98u)�����x�J�:{�'�^�@ġN�VfY�ʪ@����_�J��<\w�
uo�%�=J�֬R�~^ٳ5+���z�
�j9��
H��}�F���[�9�,3+�b���՘�ߖrH�I���s���B��$̜*��S�g� 6VU�@��:��Y�60KRn);�뻟�鹋OU�ZPtgf
��jHϋ�جT�p�'����xo�z����L��:
|���v��ՏB
����dR�t���MI
�.�'_�詅q
�Z��nD 
0��Ô���C)�Ġ�{�>x�}�U��z��Y��e�&�W
�#>A�"hI;�UQ}˩��o�G��� v/M*۝�)g�_��i�e����)2-n }T8�y���d=b��ܲM�(�
��	�Y(�fbA��|l�U�K��~��D�)�
S����0�wc���‹��{5_ަ
�;���Ĕ��`]���NG&:OG�i�"Ӵ��x�I�@+��I��&Fy�%aD��͉�S��6�
ҥ��xnc
|�tG����?[n\����׹��u��B:zQ`�z1��F�)�K#mG�O�~X
�\J����^
����R�6�����G�g��v
�K;���Ns�{�€�4p 2E��ŪL���-8�����wd��)-��G���:�͞�ӯ��rIfA�ǜ=���w 
����
��v5�f�]�w�㬒�W=�x8
)�5�d7����U���q
�8�bTe�\Bp2�
|�:�o!�/���/����0�J�D.�s$n�+�(�+��s���_*�%ɀf��(��J:%���K!L�N���O0�0[
2هe�����'���,�B|JP
-�7�RJQ���o�=N����)vUҁO:�5D-���W*H���_���)�9��:�43�T����o���w�)���S
fg���}�H��Jy�	��Ƹ
� �ͩ�ӨULL9�9���
��s����*�����:�&f�1����f^s���
L�y�E����:>�,	���F
<t�D8���ڗ�O���1�~*`��-k�u����ߩߗ0���:VYD�.�e_�'m�����1D���K�&��7&���K�͇7'���k���%tx
�Y���<������DI8���Y9���K����������W���
6�
V��^�׫�Z�l�����׀�y�����f����o���
��"�,�ȸDԴS�

Xi;�2T����Ꟗ��
��e֥��$���S�"zviD�,�
'�
-L��!fVe��kJX����%�]�E�����փ�{W���phs�x����gD'h���%��L�ΔE����ʴCƎ�%Q
xh�Y���5��
X8���ܸ
t��{0
u���h[������"���{�%�=����z�=�{KxzY�+b�]�F�Y���~��\x�>����t�_b4��ϺUʌ��z��{�<`��fVE�Ʃ���0ڴ?X��
hY�T ~��:X���]�y���S�o$�x�1���r	�i�y��	8-B���ܼ�����p2>�qr�v�L��31��Tc�y#&fY at Cɏ���8&;d�`|@C:�r�;�p|��Փ��嘇O�Z�+��=wq~�̪�gA�eger�' �<�5�{���[%K��M��W�
-�#'��E��J��
����v�5�G����IfA�+�p�ffUPǸ�ػ�Ygw_��o��a���S��:�W�l�z
�&vuHǼ}��ŵ��[Œ�E
�zV��q�ޕ�䳘CLL�ŧYe�I!0.m\|-)[
V�A_0?^�
n9��/]x[�/�%^@����ƿ���4�yDO��2�qbc�^�2�(�IkD˭���&W�c�"L�.����շ-G췋���+�1�FTG����	���F[E&[������6�iR6tp;�uf�R#R~x�� �o9�1�
-�V��m�

�OX�,�넍�MLK��"z�ͪ
�Eu�6�&X���U1
�
��j1�LJ���m��5��L&fQpQ���4KI�	4�SL��B�~F�X����#伄Y�L��C�BrX��
-�����y��Q(�6)�B�� V+d��V
75
�[Z��vJ1�f�dss��/fz~�z��1�(��"7#df�hU9?������{�k���I�Z^�'F ?�:ֵ��U�
x���Y���
5ӯF���lb�x�
-��s�]��w'�P0�%�㶥�
	�:7
�D_�
�ܞ����]j�	L��
q3�"a�b�.i at O��:΁c����>�]��z� M�\RF��sr�G�gR�u4�࣌�>
u
�_f�Għ���*������Fŧ�������1�2I�''
r6>I��嗡����s��ݚ�1���މ�9���KC���t�8�=���t(	��W�c{�y�e�"�@�2�U�R���INE�j)j�U'm*�'�q=�`]K�ߘ`a)=풰�����IA
j
�L��iY�ڤ�|ji�Mˡ�QR~ʢ����2�:UR|(
-��:�|p�]���jڪ����}	�	��
3*Y�^܊_W�i��^��ys�qd����%�+C��i9��J�EJ��)�k�ʿ�t��a�j^u�&�#&���5
�"��<������>�i<�q�%&g�.
�
^}�~:cWJ�.uxk	��1�%a��g=�&6^[ |
j��Rξ�a
������#��Zf)j�Ԡ&^S���$�R|a�"cn� ~i���
8�Q5qk��)���4`P�y�1�3�yz�}�7���q��3���(MZ�줥K�ϐ�K���ӂy�
�n{fF"؞�x��>@5�z������;㕰SN'zi{V}#���Gq��:iU	0��
���<@�0�J����ธM�Iغ������eu�}�
:�fd�m�����̌��p�qv)�_���a�d�[���$�m\�y�TI�J�PJ�S-'SV� ��8�T�#F^m�Z<��ss=�s��Y�\��ޟFm��a���[)��fEaOҳ���km�rE
�)l� �^@���,�a�;�8��&��
�u@� n
LsJ���I�Y��DM�#�_�����!�-��L���IZ�^)ܰ�
̎���v)0���LE]�
�V���ҫ�A��)�PI�N�x��}�&���5dPC���V�����w����5�Mʮ�da���>��M�7�Ɏ
	�i�)������i�\�vv)��4�w.��<�6B<�6ƺ���Hl���U�P.g���;!1e�,���f�I�_P#�%>f�Y���o��M
2��9���@�+�j-=m�9��T-<o=
�^�X��m��}��.9�qn��Xۑ��R^��6�,�8����ǡ$Y�����:�zl�m���)nE�.y~^{�-Au�7� ��]%�Xl�$hr�V�����?%&HWfq���FJ��z�I�g@�&�BB�ʩ��h>���^M9�E������9n>�p���
ϏXD�	�Z�ݹ�0)�CDLyD�WH�͉x�$�Kb�fԄ�Q�Zeʩ����7p,N��,`��9���GH�Y;
qm�����A�@�]b�������zЏ5�;2�H	�J�n�P�����na�#d�":j�7�M���_H�� [...]
-�>�=7��U���;/ߡ��� ��|�p��M��n�}rQ�;�Q)��R
~M�����6�|������Ӆ�
��AN��� ��ĜR
b�r"a��Q�>��oK8�-q�����K�d����FP��-�s�sޞ��9Un^"LzĴ�EΈ�%
!
�*n�t��m�[�{7�8��3��=����0��ӳ��>���PKV��EC‚OS�7QGww�."F�¶�Yи9�-_zK<�1�(�?o;6*����j�W��2/
u��1��'�������G�{P�>�c���l?��%�UʌYq��������ʿYy�x���=�!�����E���/@�1����G�8Ua=�$b�� n��Q�ެ���~Q�¼|2~�u�[7����Lj�	=hc��nT}��LJF,�M��A
΁�)~��f��K_�Fȗ��W&�+�E4��+��S�믢&A+�+1�ry��L@�(� 3B:ig�(g$
w��������8�
v1%��UF�rb��#[zZ�,go��om��o}XT
@�p�
Fm��y�gk�(�.��K�y
9���iߍw)�����%�	13�,b���&ѫؘ�:h����9� 
-�>�P�1�V(��;���qv��s�ٌ�����C����
�m��
-�I��#,�F,rA�,�
��	��=*~���t
��J���M����c
���
VS�//!� NvC��=���S��D5�#��M~M�������9U�2�WȃZjհ��>D��s� >E�}73���i��s\����QSNn���s/ɥ��W+�>钦�
�t+�3���~�2b�6oLъ�6N}T�(F���,��4h�
�9����h!��Ӽ2���[��̼���z91nV��gQ�eq����׆o����L�ͨYɌ�U܏xgߣ��f)��ʘ��`�
i� &lj�%Q�<Kc�(hH�Ą�AN�>�8������g�W�k�
�K욀�R�>ޑ7���@d�q-c�q��
�_�{��)A�ܫ�è��IІ�y�1
��p��;UÁ�I�]�KΧ�
�rj�6~kʮ��]]����4

k	'���~�3�J�3��M#�bV��ϨEBNhO�e젙^�2D<��T�4`f at G��X�0��q����ŧD�1��`x�r�W����ǕR�u�MР`Ͻ�������*�=�A�G
zl�-�|\/��N�4jR��� n�Rr�{v� ���:.�k?�oȴ����؄��[LG�{@>�w!�=r��kʅ��
��|�j_��-�=�_�-bU���
ؚ���}���-Q=�1J:P����pZ�^	/

�:ü���Fj���\pRT�st� 6N�Ѷ|}��.U<ܺ�W�a�֮j�%���
a��43L;��vI0�����
�vuO�%e��BH�.�{E<�9.i�1��\O8�n`>E�S���Je�'�N0��Ջ����W���ߕ�x��U`�=���\�r��w�z�id��jI����Ǩ�%�=�݅y�eq
�2���
�I8��O�B��ד��')_�}�- ���0�\�~^�J���lJ��p�`
-�2f�'�BЅ���_*�^P�|���kE}꾈QA�Zd�
=�|n�����|B/h�:"'�;��]���8p4j�Q�ZN��8�4Oix�s
�X&�Z~A<�
-�c&~]X�M!��v�
#?2ɫ��	?�JŸ�N��K;�
-�.���5��UEt����
Z4���&�r�6�݁���:O�<jػ�����;�Ѥ��C���M �(��{���nU\ǩ������2�D8�sR�7&��g:�r��NZ��Y�LXAO��l͉X�s\ʖ_�įUa�
U�z�9j�7��o=��D�����
/�~�?c�q�'���꾨M�]���}�0�}�9{�ag@�y&n�$���SLM8��1�6k_�,�����y�A�����3�V��v�%Y�%����泸��s�g��	gWW`�sm}�z
0�Z���%���o$���^�&��n!	up��@�|��A�
�V}�4��3���6ցA̍�1kkFH���D�L,Z��6<M/��a�1��R3���������R��H�#�<�eq����X\̧�Z���#�rn5~-���	)	ם	lN};�0N���
��;�ם��`o���:��]�5=�<7�{/�?f{�d�}���Q���-o���E%�4�%��ֻ����j0��S
��I�W>��m [...]
-�R����;AqwO����HB��	� Aڹ���w��yΗN�Y{������+��$:����Ls��5	.�l.���r���\v���gօ�SeV.�تSmf��tf�y��l��1i�H�
t	�X�&��YQ�A�A
ȄL�L��F6��
L�`�C(o�()�h�{�����ha�#
�� '��T��O�е�p�������	o�ͺc�
o0�$�f�)�S
�y}㧚�:Q��~
	�!{��3B?�16�	Ô(s��jg��z�a���K#���"��I�1��b6�0e��
z�ݝ����c%q$#�
��b&�������,��$!r�%�R? �A�=U1��f��С{�

ȭړQ����t0��ٗ���dT�R�<��
���4� �m�2b
�<��;�HN�9֐�)=�8%☱
��;�Gdz�@s�
b���p��ГGJƼ��/a�
br䑌G0k�#�%�r|��ۡ�k����{�ꢖ��������=ُ�#EA�T�39
u<EK5�S�@��Y�#Un�1��������YA�O
}� �
�1�?���_���C9:l{�7)`
�3 �����{�
ʑ��| !Ś,
�
�i��*A��tN���K�+,��
נD����##ݤx��-=�f���iSԤ#9)�0�[����`��E��l���i����Rtb�V�3٥�3�M� W�ky&�Pt�a �	�@
(`r~��֘�3~��ؿ��L���N�;ȕ�Cef�^�"��@��� �?��x��q2�f�O�cG������O�sk��+�	���\A;���k�����y,ZQ���`_I��L?��~Ή��
�ޢ�I���u�S��N� # �MaCևҝ��4�y��bJ�l
���0�
�����/���bm��_�zS��Lj�&9�О��s���+C/��n����#��Ibر
-`�V���"��v�>
�s�@�K���>�WmM��J[���9�D�!��a�1����GOţmuE��u�|:
�ǝ�9�)9Vחj���C��F���vb�q�w_���$sj��S
�a��hޓ4JYh0O�;�δ�_3T�?3��_Z&��
�dҐ������	bġ������x��arġ"��TMڄC:2�=��br�~��:��4
Lept�� }/>�Xƥ����})9^?
s�H�t
�|4��ݗ�pG
-&�@FJ<T�����_�\�Ya�.�,Yf�J�O���5��:�3OT ���*�i@���f9�Ӆ��#mN�y}�l����<���
���
o�Ls����I�
��dž���TQͩ���D�!�
g&o�s�#����tO�\�ے���[UE��@�
/
-
��4_�=l<�Dd�٧j8d��s gaOg�9�xdzT�QM�3��P��D(����|�P[.9�<�Ur�����r~�ق����2�l�����d�֊����]u�$&
��i'Z�2�إ
��~�b���/�b|��}���dzmG39GZ�@C�﫱�{J"�l.��4��y
����4��m'|>�x��C��G�
!�
s^f��(8��O�Bx&$�Q�#%����s��
�9O�}�f��_
��&-��#A�o��
���
+3� ��
���	�$�*>S�������9}��&Ǚ�Ӂ?E�K�ן��e.Ц@�1R����}6�	�񒪝�L��0��K�2
�&AN_�1�v�
B��*��@.%\�Q,�ɲ�L���c���}���6LbL੖��[�����gw<!�i�#9
�/g"7��Q�d 6�,󚍦
��
�����c%:tG��6���L�<�aC��t������u~�Dwf
��~�
��3/�|��I�H����G:�&��
%�-1
j�d�HJ�9�{����k]����t�C9��1�N�d�
��k&�⧖�2)+�i�
-F�Ѽޫ��ړ�	z15x��S��wl֖*�фН)L�ș��t��O` �bT�~?��o9���
S��%y�`�N�����bM���Z/�r`� ���B�#��{��y���
��-�gr����qv��-�HS�f��0-�8�r���%���B�t��KLjb�^�
ؗs�g�u3
ž�����J�A�Z\�ᴹ?���l)��t6����ϥܖ�E�������yM̗IMG&^�J
-��DE��iX��̱Y�g���5��svOB
_�;�����P��`
��uN��ln��l~�
���K3*9���
�e���#��j~�}���ޕq� x� �
 /�|ؙ*+�L�Up������qN4,��/�0�p����lN���#�s ><D>�r�5n��~��=�Ω8�.h<Ue�)��LSB�y
�ܿt8E�
HI�1>�$��ŵ��"��D�ԏ����ܤa�wd4�B'�.r�/yA屜��
�������m�&�1�l��=\
��lsB���#�]

�DEJ4�#�tC����g�u�_Ϥ"щ��҃�8�g�O5y�g ϔ���
-!{�� !�?B9R�/�����J�O�B!��8��R���
&����J�
MqY�J3~�0F�����b
r6fKBMؚb�mL1�׆)?Al?z�`�MJ.�l�C5��� 1`m�
�H���
{���e
��?�F����潵#MA��Ln%���c�7K�ؠ��4�3Mf��4
�k�E=�c��1�M�s��}��<|�6#��B��]�sE�&���*R�n�c �dTg��Ghq��Š}yi�Q�_a������u0-
l�d���mT�
h�F��9E�B�����Q�`�1���,�i��8%qe��'+�8R�t����
���+��~�����DE&�
���]e���\a�Q�]�6��mI�h����9MJ����oc}~O�_PW��rhgjz�QF����އ��@{�����i

���ʁ���&�`O�g �����}/3B�y=�h���fgÌR6�(�U\"�f(�
85�|��p<�j��w�i@۲���#%
8��AM2L�<�ټ@�s!#�4#�7ޟb����)��\�*�LPs�G �N�Y�� ��{0.
-i�k]i_�~N>�	;l�� 5bw,?kw4��/aIO��ԗ�io�s2���5-ʚmM���O���2�'�
���_3
��

��E� �'/���t�����I�H9�$ ��<� m-&�
�S�π�>���R:Լ�t���N�EǪ�����Ÿ3l��h���e�/�"p
�f�~�|>a��ցr^�A{
)q�F)�߼y�.n;TT����Ը��OA��
�y�1�_;��{��#�k���
06��g�aw����<�s��)������4#�;��s�
>�w'Pe#��yM��{
ϰ�o���4 ;@��Z�g�w����"�q�b`N�l��yQ�ɢ���bf��\f)ȑ�
Y忖2+N����i.mk�
�8�H�[���w��9&mA
��B�:��@��>Vgf� ߵ���3��ʍ�Ҿ}uIϑ6�txXs=�f�Թ�D��~n{�A����쨲�����w� 0�S��o>�r���ݙ��
��k���o���Jjʶ�#F�˨I��fd�o!��-ĂK=Te��]���T�!�ihiG*Jҁ�k�쓙̒
=}G	4�\a;�OP�B�Y�l9�00;#�0}?�w�c��ܿ [...]
�� �|GL���rN��&9Q
�p����;)��
�?����e�3��BG���@
뇨�>̈�Ir�/
����\���	#��z�?Q������Ib��6�8�L:U7�T�@S ^�<A�ڗ"����#6b_�H;Rf���D�'H��Ǫڠ�{�����
�}���q �
��?�#�h\����Vǂ�O9VcLr*��<¡�3���(x]����])�kk
�y�d N g��� פ*�(�#�̸�s�+0�yp�Z�w���DE'����i&M~��\���:��<)�p�(�'rr��l�
��kA��s!��zp՞L?��Ƽ����� ����(�dN��t6�
:�5��<��j�XCC
*h�;���=5�Ze�Ҩ.;��V��Gj&�PMIޗ�C�e�a������m
�#P['s��dz9-�P�!
iy
s_�I�_u ���䔝hrʌ�Pš��B���c��CϦi�裂�
�C�+��g�Y?g�l��9%�8E�9RR�r2`V��8��)?�4
�H�K�Ÿ�)I�A��r
�~��m��Ԉ��7L	�&삿��
���+ [...]
-J�q
�����B���'��	д� ��l̡�����	�&	=�\;;S<�� -bo�z���C���faN��GRZ"�@{s�注�u��9�̼�'c�������hsߍI��ڰdWxT�ĜN3pg`���20�����cW��;�2	g��20�Mv�1��Smv��
�kT�=
5y̏��C�^��Xc�!A��
_x�������#9q��	h�C�!
J�@�W����

:�$�g��ܕҠ�@Ko�Y�K}�@�4��(���
��-w����l�1��fߵ;F���P�%��i+���S�π�9�b�v��~l��~"�'�{LOf�ˎf�K��g��
� �).�@��쎓#�{�>/u�?/�#
�ho���Q)`�4B��P��qe�~����.O�\�q���W�P;�X��AF�Z'�c�1�j�,��J��� ��|f]?! �7#����%�8��Qz�f��|^Q�K
Ym�;��c�{>K
��>��ymv��j+�~�&��l
�v�
��8B:��V{�_�;�;�Ġ�q\�q���'��w�}�Uɯu=�@�;�p��?�t��}��K��7�t9� �
�)ћ}x���a���ږ�n�%��a�s4A�7�`}�c� �1t���?
�raG\���7�N��&��C[mO�[�}�E{�N₍R��5�9�4E�6���i>�#���A�qzʩB�8���*���f�2�C
��P�L!{`
R�8�A3J29�z�q�?�d����u�11d��u�
��dw��3D6�3��Q�п�u|�F�a�
�l
�%�i2�΀�<���c�$�)l��ՍuYk�7H��F�r����
�Q�J��%zot���Fq�'*&�8F�>�d����< �����v�&ؑp��2>I?N\O
����90�y7��ʨ��L3Pg
-6��d�
;��&l�ゖ���{�4��D%?5lҡ��x<��
j�=)%v
�f���:[���POt^l�yKr�-W�ҿ��?^� ��(Fy
L�C�)!���l;�eo����C�>�s�����ϔ����fm�;!$'�E��L�B3#`gD�[��l�QC���G8n��>m�&�#�̟o�r�N��y at O����F(�?�����
�֊��؀��h'z���6��+�T/u)쥦8�r�
��I�]h����=���{Ō���/�s��V��Z�Y�E���$ym��U�)����m���IZ��Ζ[��1W��]�K�2�]�ci��!\�� � �\��	�K-h��f���v�󑘞p"a�u�����J(�g��
���6����$�e�������Eaw���gRzo�b�N[›��d;�ϻ �
#���I.`B�a$�=���`�NW�Y�ʒ,g���jkS߬u#
O���S��A�{CLS
�I�F�c�o�kJ�*�H�L;��󀶥@��i����RG��f7��^J�Z)`�	�m��a� ����>�^��F�q��i�6��|Cڻ�z�C/5�������`]�c��|��/����[ҿL�G=����V׆sY�O�Y�O}�P{�цr�������:�:IY���*˱��ث�:�G�=a�q���|���� -b���=b�	�U|�>�
FP�[}H'=��~�5Z�WۑN�#P���}1~`����l��TY�ei���~l�㍀��� G�\㤐�=�NYiǻiJ�^���OĢh�.r���Ҹ'��;t�� ���r�i
-�4�Rꫬ"���*��f'�Qׇ�6��2���])�`D�A~lP����k@|��L���G�/�R��'�#	%a{�aDž����}s�m��b
��z;>P߇�0��� �cw�h� ��u��o�
���Mp;uY�
Y^⋥��b=��
-�y��y��y�i��Ht��Bڭ���:H>[�WF ���#��i�
������u�2n
��n�+R�-7!��AM>�[j�;/5�
g���6F=S���[nJq���+]���Q
\?Ĉ[nŻ�5�Jcʻ�^����9[�t��m����E����ZRl�:`�=i�>�WM=��`F����t�2>ٜK
M�V+���z�.[�(g
�k}9`���֎�j`
����a�B�k���:S�~�)K�\�K��u�}��Q�
XףI��_%��!��0�O�\C ?h�31�Ij���q
v|��VS
�t�4镶"����z��i�l���k�GmwS��[����ӕ	� ߾VA����ݎdBڎ���a>�
t��0�s�f?_��i�:�j�8�a�㒲(�r���>_�b�ܜ�^Q�tB~gBuK]��b�뤩&8����nM�@����
�7;1.�.�'÷�ܷ�nR���7�%��4�z'�m��q�h���kI^�}eq���䧱
�[U��p�
��HXi�|�V�ZMO|�)��Ӌ�;�d�h�`^�=�4�xA�V?'y�
��)�>]���>S�`)+�~���X,�������o�$���L�[�L��r"'��RC�}19���]	�%f�.w�}f*�m�����k��Ld��V�<ZmA~VW�
;Ꮊ^L�����ľ��3
-w^mM����|�(	��֑�0U�h��O�6)���!J�js��\m�ia��6���?P6[��7	!�g+Q�MxUI�suq��B5���$�� ��f����r�'}=J�ˎ��aE,4�,7#>N�ޟ̉���N�Lr�<x��J��f�/4�fj���%IOWk�_,���\�K��ބrPO|���
�y��nf�l
쭲 �2'�*7��*?��\-�U� �b��PG�Җ��ZnL�]mN�]jL�V�%?E�Q�$�X�@�-6 ]���>V�V5p��
-���B}�;5ВS�!����:��Mϭ�l�j�0~���5S��RQ�@Q�H���O�w��
��i��҆tX�v�1�V[�d5U�P�x�:�r{�w,�3�F٩��8o�{-�e)/���W�
ـ�j��Z�}��
�rs�����V$X�>�
-��ځ�� ��I:	k��{�X�E�'G3"nLf&X��b
�g�R�@�Wc}o����:m��1����t��w��w��~g���B�P�����'�z�^���w��?�d�\��//����
09�(��6:�A�
j�bC�;yI܃A��Q~�
qv��*��}�(��z��N?;a��
8_������$���&�-x�{{=����L�����I
���]�G�
-�����"�]����7��	d�.�c�3����OMy�c��{wtOʧ����81�4��m��
���8�<]I���@���Hx�,�y�P�bg���
��~��$��$	�����w���^��ƾԖ��^��{i
�FW���:�1&�7W�pn��)�S�;c7&rb
� �����ڄ���$��^�]�a�^����\mø^��@{>>/F�m��VU�>�
-�M��g���_��^�<�#�<�Nu�{����Kx$�eeA��j]��/�V��<�����.��9�W�����I ߾�4�l�ʡ��e)�d��$Y��r�6�27͌�_��7�h�s��O�J�m5�Ӏ��oeiij�v^�J#=P�e��J�]m'�����,5��-6��h+c_L�YL���TP�ԕ$ǥf��\
�NU�l�.K~))Hx2$�\����B�Ԍ�\i'�(���Dz�o�qB��f�ߗD<P}�x�֙��S�g�F��
�!@
F*��$y���b <x�������v]���>^���0-v�!�n��^S��LU�[��VK
~�&r�n.u!}��d� 9dp��a�P������f�
-��K�񼘧�[:�u�\mʇ����
n=�}�(M}5�H�Z�aF�u�XV��&���
f��4u�]�
j#�K|:�#����韆�/$��֋MԠ�����ש�Ͱ ���0��t��Xf�sZ��ũb�{[�^=��;�d�?�xA���q��?��6{��	\�hQ��j�׋�����
�t-�g8+�E9�~1��+�z'���Ŧ�Ŷ��.��$'�T�,�ż
�\
x��-�x�-���.�>�V#�F��D��;C��q.jw����\
�[�M��T& ]wW�b��D�V���	r,�"��+b/V'���žR}O��?$�dz�[}���.A�R+�u�	f����|*?��$'��Tnȝ�j�l3콺
�NYLv��AX)�a�5��o4?p[E���<<��
-����OWWc>�
��|�}���g�状�f0�<5��O����]��~n��n���a��eIVȵ>���n�����{!��U�����4�S���у�:W��Z^����w���hFԽV^�E������o�Z��#��O&sb_Is�
5���P����Lm�e� �U���j;�w���%�
Ԇ��<�Ɉ ���
�0��#_���{���W��g�џg��6���ϋ��O�R�U#��F��E���j� Ϻ�wR#��	
k�xW�ڡt4���D��?\��V�8ѳ��o���7���K�(��Z�Cf�SR��-����.jȸ��$�ﶼ(�i7���4���j}��Rm䗍>B�t�J�G��o�~R�
���|����� ;亮�U7����	|A
y~i��
!+Eʈ�3��k�!��rꋺ<鹺�|�&����Q]��ew(���#HZj�:���j+�,������?^��?,#��/��[,��O#+Hy*͏y��
-�^���3���dI�U	1�����q�muCv��{��l�:�+|oMf�^��nLץ)��>&y�-���v�S���N�-I6���4�o:��.k+��wG�Й�WMq���F��l}��Z
�e��b�	�0�=�'����χ��<$�(������U�Q��av�#X��n�Kv��5B�ۋ�z��*����ħ��q����}
�k[�$��A>j����=$@m
��
�8'�Qm&�c���V�ޘ��~�5F
-��	��(#��}g�7�#�)��r��	�
d�,��a/g+q��#y��z���$⁴$�BY�X[��z���8���"/���*�;�*,�$?��Tn�#�w�
�0�/e^��T��&��,��Vȧ����S���ڑ�y�&�z�
�Y��a^�
Y~�e#+⮷�ŹvZ��&�#��Zy�ߺ	��</�H��G���JG�W^ڷ[ܸwW6{Q
Mȏ��؇��
���'�1�ف7��!���.��
��P>�ia�B�s�[�@si+�^N�E�k�|�<�p�=S�`���z�ނ�8�g�(�+������ۏt6
!]7�S>H���F��N}����;YЅF��\u��j��j+�h�!~���Z����b-�e��
9W�q�w`|�;EO�%�B��ӿ�+#�G8H
�o�j��L
�� ?΢�qSS��b��3�

)�|�
{{i���3����5"
���L~
��}���C
-�w�e%1��UI7{�����|�a�!��\]:��Hgq~���:�{
#�E
%��r;�o83�q3�Z?'�z/+�n5�i;;�V^�rK����-H�����7��9mu�3MY���{�ӹj�1�Q�دW"�>;�%J�
(t<+�4�ԑߍ!���ז�[�����ط&�t$��6��S��ʒx�~�
�ϋ�U�n�������1v�
�0A�M���D�NE?��q�ZE�=ߎ

�N�f��N���Gn��{�7��ȿG<��
�T7�JU4a\�5韶zYq����ź��f��fg�
�m�u���:$�@Q�B� F^�}�ˋ���z�9���d���,�`
Ld��;E��v!l��ମL�T�D�
c�v3��!\/hKa��)��y)�f�h>
�t�:�Åv��UIn�iQ"��q�J�ם^>�8�G/5">nu1b׻X�r��,'��0?�n+�V#��L�{�-
�('�H�S�K�㟌g�ݔ�D�Yk�}��GM��\e�i�vG���6����q���1†k[���D1w&3����@ۏgGݗ�żZie�*ʐvsUX��V��Z+�e���FO1
�	�vzf����W���rJ�Ǩ�k��n��}x��A���%l��%+C;
e%���	���/[IN�ę
��"���<�����T�q
<(
{{e�}$R�'��QB�f�q�&��T���3U1����&�R�/�Q|�J�OG�������?_�%;ޚ,
}�*K��4�B�`.�:Xv{��N=
`l�V�k�)�v�6���0��lU���V^T���PA��n��։v���`=[�n�%�a�>�ZV�H^����xG������	�k�[�ة�mX���ķ���w��C̄�~f�~��s9_�l��
-��饲"�VV��~�2�c���
z.Ɏ|�T��e���GF)0���֝����qu��fe�mv�=����F�Co��"n��"��	|�.��z�$|�Lt�2�JA��#ܔ@��W��
�
�ӊr����sKZo�j����*|0�'cw����
e��N	����
d����6��r�O7$D��֛�U%����� �
��<��3a��꯬�8�dm�H�x/���m[���X��n �q�q2��|�����Nr�����(J|i^sYnD:(ʒ^O�">j�i~}�)�MĠ�ʂ4۵��z;�k��<ߔ�i�
-��RU
e��L]��
5*�|2&�~2!���^�q��fC�k�
�b؇��
����
�x�
-�������K-ȯ�C�ĝap�r����}	w��)�Md��a�J���Dž*�Gm�F��NXiaD��n*Kc_�uP��m�2n
����&YNא=AN��
gP�ޞ�G�+.6Ndgh��_F�#A�ߙ���{�<	p-�~�'?ۈ��|�~4��1�S�|���J���%
dĽ�c�������9�ٖ�M��@�m��=v;�N�������f�{�0�vG����]L�?���/G��u��,5�6�a|
-��t�[ٰ���,�lE�Keq��ǵn���
	�۽H��^j�L3�'
�tc�0�K?�L��$�n�{���P�ǼR��x�Ճ��V&�>�
�$|uh$}�2�s�5]��f�=�a�%��F7�k��
���l=-rO�'Z�eƨ+��fj�����;h^��z�
�2o�����cuCQ��7�L��!,w�\��1.��K�
���\�� o>X���L�҄����"��e���xɻ�4���؞��m�3��q���so�(�vo�����9iFp���
���u�|=V�x?��w'��K
Id���<�Xi����p��\/9���~W�
��Ӗ��u���qF1=i�f�ЂpX��ƙ�.�
�����ך៦+��,�����B���$��ǎ�oe/���e��@w^i@;�V$�5�H]
�*�F)%��h"�Y,5
-�:��Se�6�;�\�����sUP��&��v?#z���-)Oy�3�G�u�e!ۨN�zy�wj�����;]���E��
�#}��fA?���C)�/�&l�����V���g�
�X�^r�V����-�1�'rbuѼ��p��r}�Vc?^��ݖV��+�>wzx�q��k�q���b�.v'\B�o�3���̥N����
|��b�v ��C�G:,5��Wڈ>[�<�j-H\|o�
n��I
Z���
�{���a.|�
�%)��M��ꆸ��z�{���'��я�)���1�'�G�Ÿ�
o��i��.f�B⋼$�<��|�o���ٛM^mgƨ��������"t�P�
�L-�f,/�Y_����
����>�LV�!��E��!z��૭�~XlHy�Дd�6���K��5 �[0n�
\�� �g�1��pf�E;���
6��QO
#|�a"7ss8��5�������� ��J�N�þL���4�/�*#s��>[�|�*G�,��6��a���>|���XÏ�(L�tc��I7��:6�󳗇���v����E'�"	g:��
V�!�h�o�����!Q[
��N|9��\Y�DV�Ƥ��2��m��"��܂
qC?$D��y��m���&��������`����k.��4���I_f+Hߖj)>km�0ݰ�1��+�����n?��Łn�r`;#�� ;qs���Ft[i��,��~��g����$9�7�7[�q��m
�_�{9[C�]��&��ic�)φs��i�~[]<��xw�
�P�d���~��N}���/6b���"w����������T����|���d�k�RR©<�ȼ_�ёj�ؒj7׊�Z�!�L���Fȑ���s5�������&�L|
p�n#��V#�n7ⵢ
�)�At�x�*Hr�n����� �ӜV:a�u�����[bjK�Ǯ���z�Ps
�

-@
;l��~YoK��*
�����u���F��Z�/Ѐ_���;���|�j9pu��:D
-�M��[�šqI��`f��
1ۈrZj������w /w`��_�^�#"��(�ZY�d�-M�_j ��,�������F>]�f�$��FYv�Z>p��YQ	�
-{)��u�
c������	�2��}I^�"���j��8+��J��z.z{�OٙȠ��)�ޓv8��������k}\�}��Ғ���}� �;��y��A��(�m
�z�f�k+��]��#"�3��V�
d?s/�V/m������ ��o��"����VF�����f��ɚFl�q<�Ԡ(�\3��Hgy�	ݑ�Y���<ÔH�m'�
�\�u%G�j�,<�o X߉\�A���b7(I
-!_7�DJ��ެ
W:H��Å�}���va���H���t��q>�j�O��a�j�w�S�u�`��yl��ZN���y��nD|X顃y�n
�P:3ӴM� M
�I]N�2[��Җs='r)�3���7bbnNfRlWj3�Wjy�S�t�A6�R�I��wP�;3ӇK��~�ݷ����Z��e�w��3I��PKIv譅ʤ��N�tuF�d6�v���.�.�Ȉ�5�"�*�⧲r|��G
��jEf�Z� q��u����t����<�� 
�(K�
���V��f�J�ښ���R��BMt�\6]��X���X�h觍��{r�{�5+}��e�!�^7J�ޝ`1
���=EQ�n\D��%������� ��([Uqҳ�Z��Z�u����Á�7gBe
Ǚ�p}[	Mߖ�_�ㄌg�=z0� 
-v�
Kc���~N�B?+zm���=�A6��(�>|���6_�n�����naZ92�r
:�<���^Q�חE]h��V'Z��C�SU����=iN�� 'mc���7���=�#�<�Zo��BK�Wu%�j�f7�D
(��߮@D>
�l��){��Y�����r��J-�w�3�8S�K��M�Zi!��u��C��1N��2p(��~7���mg�0�\#�� )`�f�iA�@�-���(
�*��� ��(/��T1�CV�������~�~��J�hP
-s�fJM���=�E�eM�-ؖ������<׉�
-�}.��{�>���Wdd�%k}B�B#-�XRR{4��PRX��
����}���|�6��7(��F����6�O�\GO�UAL�++1����o�N_�E���8>yz�/ȵK ��
���s��O��.6�����Z�^ačV>�R�����O[���U����їq�t�s�@�s��
��.1���D8�����g��|)"�Q	:��P�v��
��ͅik)^���B� J^#
�Ϧ���0�*�;�ɩrB�.`==Χ8|:��� 
-��D��r!���s��^B��Y@�^>�@
ߞ�BEߙ�↬vf����9�hY
�eԲ�"?v,?í��R�O��DH��N%�m£�4`S�}O�����p�탻��7�A<^<9����Jz&.Ƹ ޠ�(XD���Yb$K���C	o:�i;㹢�VNT7~���z:���
��:��ve�s��/�|�.�Y�:����'�������"\��0��5���$��>r�B�s��t��r7?y���4^�p��d~��!��Hя��n��>\Lu�v���Cȫ��!�/
�g�߮"����9i�1qۣl�nL�����Ɋ\��F��=���9ʈST�َd&=�����%}�I�
-u�p��p���s���"9��OF��%0�
n��E��\�����pi���5*�n�e�:�3�XE5�a�
�-���+��
�J��l��t��*�������K�p��>��~����
�n_���u
�����.Q��"���
/K7F�V7�؏�Z�lƶ,;ge`I-h}��-f�n
�Q���ęz�@�#;-�	7�����+x�o�
�f%�Zt�����h��&�����fu7
-�ƫ
-�f6:�+)�B�����-��
���� ��ށ<�{r���G�q����;ٟ+GD\g�>6���$,����$m�V��[sh�%������K���
0�s�o��\}
	�}
�w�qz�bu�o���s��׏ W/]�x����͹�D�+�R�{q1�e/?��X��3X�w���
s�`�ѡa�b]\ �?C�ZZB�]�
���=���ǐoCn^�����E0�- `
��$?VU>k�فڎ<�h�0�+�iWN�<�A�Z|�"����.$:=h�
m����
hc
��oy�q��5���yv�/s, ���G��v��X�U16Hݜ�^Z
-8`���4,"N6r�;��oKpi�"�.��]�
!�o/�'�wnCl,�Bn\�
�����[W!���yx��y{�4��r/�c�#��r7�GS�z��&~��F����o �Wq��=�!�� �6� �� �nހXݺy~�:���+�K���s�
������PV��=��c����O�h{��z?-b���9RBz_�M��������{>��#���
ț[7!NO�@<_�q�yr�:���=��+W ��y~/�-�
�sS\D�<ۚ���]��9R��>�����D
��^7�asQ���� &n��ZA��݆|z��������/B���xz�.���? oo߁�����%Y�&<�mD|ۓ��s�
�:+O��M�t�ceu��ԫv�U3m]������-�ûso�o<9�
-���훐K`.o��~��t�@
-u�K^�p_�{�zE��
‹r&���t���|��p!�/�7G�w��^��b���
ȫO �6_.��c��`Q��)N�*̧�Q&tS,�i�2`��ܴ��¸��
�|���� �sH�s�Ύ�wO
@ރ���������br���朷��o�כU���]��7�&z����m���n���y�;ϩ��x�����O ��%$��lg
q���8�xyv�6�6xN+��o�ކ<�y���B
^�����
t��ZR�w�60���YCV|g>ˡ��y���3�r5���
u���
��}�%�3;�;�o�/!/�<�ܿv����� ;, ��!�����+�ܤ�a6TӌsVV�ج�#�݂ızn@[!�S>�h�����;+�g�ǐ@�w�@��������Bn�u
���C����y?��r�AwU�D��~f�|;�{��䦬$|�Uо5���j9�'و�kPO�s�_>C���!��� �@��pr��e�{��V���
�����չ�O�����[C��]�����򖘋���_
���c��$��^���	bkj�r
��?.�:| �~r��_�{`�o�?�<�sb��)$���wR���"���Fa�rwY��pA����;U����T0��C</�ټ��<��||j	y�{��+�.�C^�Z������
̡����!I
.���C^�o��
�3�
��D&c�?��4ZX0ݓ�k�g��/a}�>�gcbc�}�r���W��{����%�ː_�1b"�硣^ɫ����c
N����
�
y��
Y
u4�U%�������f?��N����
��`�#n4q���
�SuU�������
�&�|��y�c��Ӄ9��&ahW%ǩ9����DZ�Cc
���V�x��4���~�Wɑ��H!A��aa�qX��"n���8]��o!z���p���ڮ���;}����	�^�Nx�Y�P�W�%��_P�᷑Aq&{D_txk
yu���{��7�C��/�á*����%Y����b [...]
q���5��·��Y�B\�}:����|�G�����KDڳV杲��9��\�$o
-�{�|�4�P?���<Z ��5̢�
�DG_v���7����O�Bn\����z��`‰Vu|��.�Y�P�^
()���?�����k[���ڞ2h���8��8ffF�33X233�bFK�Y�dHڞ�����w�|�C0lii�9�{�9��K�jw�Xm{+�V�B/R1��Y�$��%�."[��N��G���_�}��E v���ˏ?��څ����
^�tf
�ʶ-vR�2j�[B��9���o-�%�Z�
-:D=�}+��fM��Wјˬ��oq�_�KK� }����=�v냷�|��<��ܗo������/.����|^ԋOٙg�=�.�G܁uI�+�
-��q����х����PMg�ř�<{�Q���AJs?/~����+�>x��ͿW�T}����EYv�?���_q ���
�Ce�]��e��h���29�>��*9����+�$�G(�������z{�����}�����Ԥ��=���ܽr����?�U~܉l�i�IL5�� 1
V��~=�k�
f����փ�L�ӵC��
�	l�O��a���8�`i��u�|2�%�"
Bf�_%`�
#r���ߥb��ȩ�w�,��nt"7���1Z�n����6��^���L�,���lo��,)+&e�c@~4
T��\��[����K�۳/�"eꁘ��M��v�x�֙�f��@�zq�#��Ư���zS&��]��/���K�~��b?�/��
��{C�.NX�DE�LtTǥ�T
��yJ�y
�vw�Qw��[��
�"��@�tt�l�w(S�ӓ��c>�'�~R
��
-z
����3~�h��+�$�el�[Jo���K�'�ܫ��߬��-o[�����ԋ���>��Ł��K���#C�8��Qz��Y�X�$�sO9DK���4�,r�=t�OMn	;�~}��O�7��
�DL�c'���HMN�pg
�.j�U2JL��f�ˋ?�������
�Y��x/�Y�[�,�ݍAz�mu��VM�#��3!��'b�_�n�,����Ľ	������[��,
��!�[� �i��qsu�S7�բ�$�j�i����Y@Or7dcЍ��l�<��&�@u\��\��f?�&BV�i;��7��j�X@ �hY�U'����{� wu�_�ǧ}�B���4C/�.-�&�녣�,匠aku����
-v���g}s�X�(nfrNv��!��+'V�5
ž�վ)�h�Nw�l��DC�y�a�k�lo�|e��Y@m���,K�t�<&�2
{�pIN1n��<v,C��v�������w¯��p�;
@�װْ���ͯ�������Ep�c
]Bd�c
��'rUJ���ЈQ��Q0ڂ
- �t#˜ax���;�t;�
�CJ(�^�&�"3v�Q�Vh<1tpêNNH��.�)��UGu�f�]�S�C��A�F7'(�b�r6|_Ć;ŝ���O��K�
�̃Y̛�9B��� � 8vV:��kݨ�en��,)�'d�E�<�W��!��sb����J,����Rj�K�l�/3�ªJX�g�lTP����p��
�C�h�]Ťﭢӝ"B�c
��2[M3�"���'������:2
��R��P��2jod��S
O�W�1n�2t
�L�ӻ꾑}��ԞbljO�C�\ �[���;�.�]F��)�#�qb���[#�ّ���Sj�:���0?Q
��Gt�!4�)������j%]��̦���\H��|b�(�h��H�1�~G�G��}�1�`��F�F�
#q�>f�w+�
���L���s���T
����6���+���t=#۳�����_�����yd���s(9��O��^�,a� '��L����
������� )~1�"�dB#rF������h�r˓ù�;������W��7gv&*�Gt�
��"�mNvȨ��֠<��
B*|g�����Rڑy�+����|��I�@m�K�mOԚ<2qyQ=��L��j{�~�����;�M3��3o���1��
��a�1�”��|����B�w����fp6(�
�G���ɐ������ج���;
	�T7��X;�rӱ��vo���*b]P���KPy5�5�$VŁ����eq��j"�69
��P�`r
Bt�G���V�q2�nv�E
�3A���b���]�m���}
-ds�ܸĪ~h_D���=ca��DP�?�3�ֱ�_���o� /��RI<[݃(��;H@Q��lR��U\��t�5&m�e�
*��1}נG�%i' Ͻ
-:,��`E�]=Qe5$��
,�����Ը�ˍh���x$t�WBn��(-a
p�t�O�� �k�\
��O�u$��j볽H���GL]Pڞ}j$!N7y
�g���eP
��[w��|��1����!#5���2���ֱ�q3
��!*Q�6��@ct��Q7��|2LADM��o�h~9�-��������b�a��C
-|�m��8�~�#��G���!s�]I�
Z�=ѝ��w;�����V;l �m�V�1�1��?n�E�
�c[�,[�(0��Z*8(Ǖ
,��>���Ւ!{��z�$4ٻ�+�ꩈ��Ŋ�	��l�A���(
(����h
ovO
�H�>8�D�o91&j6S�A	,w��}��eTClv�)����
�΂ol�WCJd�_
-+96�Pqs�i^���8�';�+~	��+E��
��
�L�������z�N��k�Vp޹�hxoa�}RlIDA�
Ȑ9���G摂+ac��6�
�ͫ��EL��as�G�F���b�F�
��c��KN�}�7�1 �	Z��8��H�3tbd�} ����
���t�m��[c_�-�
-�ȵ�N�Q�m�������S��	��x'�����}��o
 �pe�<�"���3�f[޼��b����l�
3m����
�p�!L�����48㝞�
-+�0����j�[����I�!5�d�vS��³�m���B6�#� |
-L�OK���Y.a[�s���G�)���6�ѯ�b%n�O�i�H`��ؽڞ�;U}ݱR}ǯ”jG�Y���1U�pB��\�OFm�)H5�
��
���O��'
endstream
endobj
120 0 obj
<</Length 65536>>stream
-髻�vi\��
Y:��٘�##��Ĉm86A;S-w�t�wާd ��F�F��*,������Ħ%x�+C�&�$zv����S�[N
]CGZ`�JD��|�#�@�M�
-:��@G'z�
��uq
�9q��%ĕ
�X��V�)n�p���~����վV��%jy
5�����6��P����qsǀ_C���Xwq�e� FԈ��Q�b���g��;�ĺ !��-����U�S��bbK|������C
i8��tb"�������

��)y�W���֐��;\�����^7$t�/v���ڙ��ܜA���R��o<R\u����5�����+dX�muNƶy��6�q����01�9dJPA�I�Du�a��Z.=���"z.f⏝�t����􆴤栚�
����Y��	��Hu쐉���P����
��]v�KJw#ޜ���]x��u��sx��w����P�yKO�����;�d�<��*���W�eR�����N�œh� ��
-}����ҫ���	�
h���۬Έ�
qKP�.	:/�FF՘��
Ui_B�u,q[�3�J�
-!/,$��Qi�YT�
x���t�5�ݝ(��Zm闐*��U�uj�c
_���H۝äyטu!�%��A�RU"��
󧀮��Y�Wė87����4���2_5��� ��~T��u�%6�hyQEK�G��Ҿ
-}e_�$y��z�*�'�#�����x
L�
-,s�
؛�;���cS�H�����k�
-h.���>	�M�00O���
(����M��72t�z��O�TBS]�����<b��"ŽN�96�L� ^/�p�J&" F̵?J)
�U\�<6﫽�7���^��.Xt2 hq���v��I����&**�%:��@�U|��c�����
�g�3
�#���[Yf���W�Y�+�Ԩ�;5:c*.%�f"�
-`���׺��+ش��q� � �X�?+?���S
���6�be1�PDm
꺆�=�
��:Vsu{���
�if�����oe���AL��fo�5��DB��4�J{2���A
�P�3�5p��$��/j�pN�Dh�@C�T$ w��#wjc1�Y�Ԩ�2�K��8	�xg���&��
9�?
� yA-��؄i�}�c,�cR B���AM� �b�#jj[\Cn�.�'y�l�v����<�J��Ii�!�$���9k��b1�N(ٝ��Ŧ}�ʿ�u �[��\w8y�;_w�6_{ss��ن����}1�v��sag
���N���&��mSȑ݅�G��_&�i�X�/λgaپ%|���庹�ꂱ��G����k�|�#�:�L9N�ys��3Мk>!��+e�BJ:$�$�{7�i��e�]�-IQ

�! v�BjbS@�ʏ�`Yq
4+�hO�[�}�;��$,g`C��i��
-�T��
-[�rtiP�-��Q��d�n����%d�f�k�lz���\��׎9�=��b"l����ג��yl���^!Q�ij� x�����"\�q��u*�%� �"B�еq�T�LyPNj��ut.��Y!)�X��Qc�h���tKp.!6�DM��2��(:�utF L
-�ɭ>	tx������i0�Q�#K�rR�����W�f�蝅E��-!u{�[��¾��ȵ��ҽM�	Q�A�ܻ���K�������*<�>��&�e���Zl��ϭS��w����M�`HM����_
�Q=����#��1�����:��	��8P���Yy�9~�;Tw׵����3��>�����=٦ӢFL}P��w�^�$5�N6�
�m�^%��<��8�?"l�� ���&y�������7�x�4Z}=�c0�z
��Ĥ
��D�
>���l$
�
���[�Mw�"\�uW�f��$#CaeOGL�!��ڀ���Y�f�ɉZ�<�WS�G�n9g����jo�xY�(8��:+�
��uíl���
��z���l0�1 �~�	:
BL���藽ih�	�� V��. �g�����
lz�
h�ͨ|�sU�&dj95�T���
�
-��*~�#�:�Ie���[���|�,|z6$aa\r��*$˹z�5U��i8�w�5eg�Z)(�9$E7�螈��ߨ�/��3�yV#x���h������1۷f�/�O5LԱ�K�K��eD�}�����Y�=qg�M\��/`S�D~��z�;V�p��W�R�}�\寻3E7��ض��
-��s�@���z�4+��i>��P1��
-L?�|g�301'��pJ�U�yD�g
��^��<�my��^5���Sj��f��;��&
�����K�`�Kg�w���T�|k�}��鱉��Ύ��ٙl~�ZlKݞ��i����%�JuM��C�D]*KG��&
����AR<BX�_
~
U"s� �z�Z�V�I�
j��{�S�Brt�}��;O5O�^����
,S0acϘO�@��� ^!����M��#s���*{
[T��]w߾�Z���0��<�-c����
xV��<�ڙk{��@�Mdl̄����Eau��X��1���� 
�P���z����XG�t�_Ik�X�[G�W��
*��^"7 �UE�l��<-���N��5�۝��M*֫@�;֑�
�7�s�T��Xk�lj
%���AUoOPɂ�多����(�e~1<cg��������d��P�=�48�1���>��`�M�\��
S<�]z
Rr�_
���'������A�����{s�������ӫ�1 
*���S+��-ڹ�/�����쯾l�\bToM�3��s�9���a2������w�՗d
%߯��?����8���*�l͂_ sù
-N
Jq�A	�bR��D�}ko�͸��J�4ۙ����f|�`�|n���[g|�$�;Vo��W�s���Ul�g�k_�g����L�����F�OM���BJ�MSW�c�,�U_�>�r2�
-���zWZ�y���Nud�
��&��gbvUꉁ��
-�^
��
�i�S��M�i�mU?{�ز�t��40~
��v
ǀs�;�ps���YWÃռ��~���~e
�v+�a	��pzA�e=��[=��+!�էsț��w�^ �j_��
�`2<��Z���
��Ea	,�>6P1
�zl�0�m��!��z|㑞�
S��b���-�<��-9g+��!r}B&hg��XD��6���uT�}��`�L�Yq�6���-��x
�2�G&65��C�u\�_ɀ�T��c�3����V���ߧ�yE���[�;Yw{��f@I
�ao
�u4��3��K�f2�ݖ`4�F����
-D�s

-<b+��o�I��K�� o��	?�aEt4D\G�:	�!��"h��
�qT�d
YFt�MAO��1�t��� ���<�
y
	,�#Öu\���!=����l�o��Z��6�V�������W|㟆��t�&��U|�6\q�1��T���^�����S�㉜�<2u�xĸB7��	<B�<ȂDN���ٶ|�����g
_}�ɢ
�b���!�wǛo[z*�
L6��Y@�,��~$���[D�D
. �Z��.���{k��e��e�G�n��uw��5	r����+�U���Sm�W�>��c��:
�#$W��Љ�E84
�Ku�e��`��܋�������
{�~�.��b��>��~{
�h	]�oZ��xe��)��q�b3$��7��϶�Ao�0p�!�#�z�n�*�k^�+�,+.m� 
-������3��e�d�,�js�s�%%&�B��'VtW_�K�ƴ,�{[�̑��:���8���p. 2N�4tXF��
.(���+\�u�LD*�vU�\yV�)���_u�p���B�,}v�C|���Y2��w�ϖ_3�3�4w�~�\���I'Et,�4��� ��w�k����RӃ�ΒT��O�Ĵ�
�]>��Lc������kL��+���ޛj���e=�|�	3�LLG���K[K�J�]��&�������Dj�o�^yך�{��@�t�
"z�[H*�(��{����*z����g���<����zƱ�R���3�����:Q���DÞ y}bb�����l���3S?�
�݈�)А��vK)��܀����D��?�غc at K�U��^
��@�;��+�ף!�����k�YҢ��-t�_C��e����߱�D�
�y�D?���	��Ѫ]��,�X�
5��g�T�\D��:
-Κ�
-~L�B��3�� ÿysd`3
F��!+��;�f�OL$��-⽍L8�D�
�4�s� �#j:r{Zl
J�9���B.2�`��Bt.�
E���D�̏��E�̲���k�eZ�w��5�p}o��o���)����}gmzp���t��ޚ���Y'�[F�o5?�z+��T8�19�%R�o殱?��ᰚ�b
��yk��m��"��n�6��%l������$�MXJkq,����!O����z��>�T>�d���k�P�̩�W��#��&�XEn6�� ��1�����g��ֱ���'pJ`E�����z&����
* ��&�
%�9K��sMwcj�-���I��UaUjB"T��(ig��������8,i�Zs�W����$��{�\�^�‚k؜�22�p��쨾����_rnի���I�M*n�W�����-I��D�����+h�����ˌ�k	�P�k���
�<<�W��9@�L6�6�n���~`���"*���[�
W~0���c��o
QU�<�1bf@� [...]
-1�~!�S%�<�"���-a�{��Z�9Vq�;��")�V�Z�]{s���21���������gJ^�bF�O˸�����ཞ���(�l�Su��6�����p�>_׾��ȹ
��
P�;+��Ӑ
	�4�"����N����X�5)-�S-?��͡��YLzgk�YЫ��M�f ���I�
���jAޏ�M?g�����
�?\eX�&z[_�6=�((��z��m6���A
��U9:/�"��,�}����O /������l
�\nN��~�x����)(��w#�ZEf�e���x�ea�jLY@)t�%jM:62��-ݓa�m��_Қq��������/"��π_�6H�=5m��� �]3�5>���Xkx
\o}�]e�M�>�1�?��*ׅf�n̴� ߁O�
�눠?l�����[���?y�4��<��X�51�� �kn{�Z^�e���s���M����{������-T��&�EM��C*\��M	�V�Yq�.#T��@�]넦#-��ZAe�
��蘮��5_��_rѽ����}��ؗڞ79�y�(ɍ��Ȩ����k8.���Bz����s��I�}�m��yTEžnvO
��S o"rB�w��>{�;�N6����y�-��7����5J�����~�ҟl����yR�w�P�}bv��� /:�/%�z�+om�e|��y�����a)�,nd��)ٞnz
�f
�����8ҠKܫM��n�֠��+����"^�Ok��C	��k�>�L�d�������F [...]
s�,�cb
��<؛���=�s��>2`�=–d�Zͽ�� :28���-�6�p߻����yT�<�6Q��e��������矎�%�q́2l�-��Ͽw�c�j
-do���e���h�e�D������M6+���BJeHIm?�������i�-����U���7�k�x��9^	��8{Vr���Pv�jn���x��#1>�_jF�5H��
���
-H
���g�9t�{S��{��Έ�>1@��+�LC�����߿����<
->�%$U���'z񝑎��H�aI���ٲ۞����ms�}ZA�K�B�L
�GV)��Uo�ZlO�E�}�/��Wå
��
*Rs at AM��I> b�>�|�p����h�O�5xa�
�z����"��+a��k�,�*Ӿ
-Oq
-�)>%27d��"��ɘqp=f�;��ΝZ�
�
.�ȍ�mZR�+s+(�~u�p��'/,�[���_���3�#uO�K�l�D۽�a���9A��
��`�Y����9���|�
�|�혞P 8p�R���
->#�d@
�\�
��8��׺d�,�:�(�k5�aa�J&<��[C�'zu����.!4�<�pug����6X��r����n�@ޑ��X'|�T\W�W��f}.a�?v��*�c���E��MϷF*o��
-/9*n
�a�Q=�r	�z���>2p�qs�ɤ
��0��rD�e���O֞�Uk}�֘bt�H;*~
|w����\�C������[��xڗ;Í��t,BT�"�T4 � �Z`�n~�꨼�%у��sJnM�c=����3�8b��8W�{�-�}���/.�0�*"����hm11�=�N�йb^�9|湠��ڝCHy�g�"d
�����I=�1�' �E�
��5Ru@�ez6��1
��'���N7޷π_
̴=L��rζ�������
-w05��RF�%�
�mT��9�S�"*do�1kk���m��ⱁ��8��9P��l�����k����8���~�aہ|���9V��Q\ѭӭ��csGw\Mms/A^X{�/��Y��j_���0O�S�|PJ@�3u�۳kwg�/ ��pw�
QS��M-����'�8VQ�%t�k�P�����_v~k�������f��I��
�LBҥ����s��
W}jƵ�Z𠸕���영Ǐ�:GFA�;k�J��;
�7S�~-"?h�V���J�,����g�T�'�K)%���������ߤ���

�����YB���)��3��Д����(ٸ�W
7`j<r�L!�
"�-��n�sl��
�W
Rya����E �nesNL|0FrT���M=G&AW�����2�FS�k�9�'$VĬփeR���ry
-Y��X{�ىַ�������)��El��fA���*�l���� 2��|�_܁=\@g8V at O�2�K���ND/
-kI`��
-?��	�m!=�.�E���j����*)Ȉ�Ű�ѹ����Ql�i^��Z}����|�<,y{
-�$��\�6<�bo�~��ɰM��w�����`��ɚ�{ˍ�<bD6��8�X�kio�
��9�w:gN�"��g���:4͹�rK	��iD
-�W#z+n�}2L�e��g3�1���Qȳ�M�ŷ�
-h�Qqk���c@��T(0������y�`!�H�N	�U! ]ߝ�F �N�P�i�P�4)Q�TEI�l
��K�H��>d�WW���4Z�� H�S���oi{�~bU��'���G����
���J|�]K�
�
�{+���
����u�$yg����|�[`<�#3�ұ	a

ײ�'*&�O+��
qb�AvfA��p� ��Cڞ������c�~H�&�7p��F"F�貀��Zj{�Z��t�=}w�ekO��\�M
����P�
�L���)d����$���v&[�O�t�;
�-nDU X�P`+€���0���=�'&.��ġ%��Lh�ϥ�6�DZoV(u�,#��
V��s��/d�ʧJf�=k�e�Z��$�B#�K���og�?�Kp5��N~H�#���u��W�
t��2"�#ƕ�,b�T����urKD��j��A9�OҔ��s���,BLϣG
<vX��
�x�c���[� �P|8��8�E�w��R��ʇ97��`�wio
-����|{k���-�G)���2���1B�e�6�
-���yx��8�`	�8��d���#�8d���:��V�p at OI�&�l1��6�đ�g>j�\�(�u��>]c^��d���b���
-|yTJ�u�"�7��.��~ܝi}�ڠ4��+/�:�o����հ�~�W���
-W��J�G��G
o*n�����
-�W䕓�O��l��1>�ͱ��ۚ��耷$5z�袝H������Dk��b[�k�-�P��_fW�<K����C��T�� V�e䆠��w+�P��R�Q0��a���%`���n�OJ�v.#��ڟ펂
��C�
"f��
��X�tv{��W���<���a0���l�
�@U�n���_+�}�ձ��̕6�v�i�K�̉��>2����w��w���{���|C�{�co	�k�Ƥ{�l�;ˠ�OK��_;�o6LCH
�ܚh��[#W��搜�=��[=���
��=�Ut����ʑ�
x�
�P���񪫉
���[��'�ydo�B�.;'�g�?��Sy�cF鵿
�>�Ⱦ�.����|bLAXK�
����F.���5
�
�uL�E�l`��*:��w&ɧ��Ŭ��mw����������GK��s�n�c�d�������:T���<<�:��رО|���|k���\T�A~)"�'��u��&+�r.����:���PHn��2���W8;�Á�c!��g���>ѓ�@Gx%��~��䈦��'���#ФiT�W#�o���c���=�o���	e[�m�w& O�Y߯��.�E�j���ܜ���
-��u5��J����7�bFt]X� ����R[�::,j�
�or;� �|d�_��������C`��S�����[���{�it� ,���U��^�F���r��3Ҿ2��^ߞnM��g��-�<�[�*��7ܲL5�:L�P�� ���:�Nz�!3��3�
I'��n�z�ZJ+0VPo��v�� x
W�ǵ��A9��#F��.�&i��.o����R㑅�e��k,s�젞ˏ�
�3�n9��
�N���
���.�]J�
���^�{j��
-(��r���b{�Z`_��F[��J�|���⇐(��a{��l�c�P�O�dO�Eؖh̀�$��;:�2l�W�(pJ[�
n���fk
��Ȳ���c�c�����j돝>qTMNh&P�HC
Yx�QCGϑ��U��a4hX+�
*�p���J�M�y�xװY�ub�_D(���Ӎŗ�]����ķ�������_��WVi���߬r����^w�bs4�mw�c�젊GrIi���E�[zf�FA�KA���=I>\Ee�:�.E����{(��-��{�����gO�����H�O?&������.9 ��%�
���\iM�/����NJ~���P�݃|����G������9�su�+����N����ڻ��7 ��u�����ED�W����)8#��!c f:E�<�@�ώ%r�k����=�7�����O�կ�0w6�t0�r˹
KG��l����(&ó�nۙjy��(<'יּf��=W�B
oN�*��.�[A��P�
׳���
ޑ��h�Р��Wb� [...]
-j��8��!�&���
���~��&DfMR
-ꇼ:�ݽ�
�b@,'�y�M��s.���2l	����ڻcȷ�lM�$ڦ�
p�G�/s�KAk�ΠR�pUa �V���s�⠺��r!=
��ut ���p��	�k����Ľ%bE@æ�%�:yg��	X��d֏��ڟ�܂�u5)����iԛ�]"pI�HA�
��ޤQc29�F5��<�+����`�)���1}�)#��e4��
a�����}!�no�X�
���Qm�:��om��'��Cl�_��jE�M7�C�g����IhUHƀ�W��9�ӽ���C՗쌯d��
㬆_���~��]+�̃�KS_�5�h���������5l��k��Q|Ꙁ�Ў��c
.yoWH�c
���Q#�i�C�o� �F��$��������^��*��p���KR>#�=���Ւ�]Afo��]�MU\Vue�0�x��"��KĴ
��/����ҿ�����K=���P��
-B*H��R�C�Z�Ө
-�r�g�|R\y\El��L��8��q�M\���
�M��؝�������_�H)�eo��=�v��[vA���n���eo��/x��?�Ӌ.YU�Y�/�
���
nN۞<����k�BD�[
�;Xkz�[DX��
-ɩȰ
-�`V��[*}�Xoy� ��J'
�6��x���V��;+�%n�d��(��!9�ƹ��؞�?�ϒ�\.s�cJ\��\k�4&��yr�O" ��կ�s���j�e�"f4�� ?2bA�<|�S��v����ȹu��9�q�.��)�
d�w	��k��m +�%�&p�7w�!�{˘b�&�6�x����p�%�ӈD=��W����`�S�ħ���݉�� N�y� �o+�����	�[���G���^�֬Rj/�6�}9������5W�����^9���!�晿�vU��7Y���Kw�P�v �uϝ�
�a5

3p9�h��V��i
�§��V�p����'t�
-�A
b^$�
�қ|*<�`\�d�
Y�5�����<Z2(l����:ar|�~
�
�����O��S���
3�g�C-�7{k/�zۮOPk~hJ���y|�m�2"]�QtN����6�xm��W���呚	�y�
4�=�¿l�ͅ!͌ѯ���}��VNG��$'t��:�t���>��շ���λ�Nw�2�Èdž
�-1���|�9O,7����J�ٗ�^lO7�ߞ�}�\Bd9پIݚo�'���O+Ur�o�m/��֠�
�ZNu䩁A�J���u�Ө[���7R1m�O
 �+���3M�\+���Ut^/"������	L�m������%� ,���=�b
�yq������R����4&G$	{�X��n���
.���ިy�X��S궦��� 6
.��
	�c3vd&�N�$ȉ��+a9
q{�;3�
�vt
��F��R�Q�ҽ���2\񋌝}fw��:�)��\St���XE-��~] _�SfDƄ
�b{����J;���f��L��M�ƈ��7�0�ĺ�M��S`�����`�C��o�>��LD|󽮣���T룈�PQ�ļ�+�!�
��\������u?��6���hKrˈu^�r���z����
�
�5

�1��T�CD*O�=�K����3���!��%t��m/��kyt�_�B?(�~T�+��WA�
L�[N��LtDOl�%����>��2z�鯽j�����|�
-�v���~��TQZ

-j�S�c��疵�o/T�
(�p�

�~����!w(l����HȀVx x�eH�b�!׵���r�:��p�i�o��J(�r�-������"ҿ�.Q�w����ϝ3��������}����Ul�a�:K��ųH%D�C�����
ߤ��z6ɯ⒜RaI�J�i�>�3�i�����C�?�O@YZo(��_[xg�s�7;
�\f��������D]	���6Usk����4!�+�x�M�,e���4�ڧk�����lD�~��Sm�l���.�~��^HIk��~������9q
-x���P
Q`K"t�}
�rs��WY7�� ���<��;�
-�}8/��G�T��8>C���)�SA��=
�L]w�M}g�ŀ���BRl�P����~�������#q
�s�%B��
�׻
��#3��=*5�_; e!�ʡ�����Pj�>l��������
!�V:X��%��?��O>�j�H�"������P�m �$�9 ��,��Rk�7�G��5����F::dd"F��ݎ��Q��z0C+������z6�7ݜ�mI:RŠ�

/
=EWf`/��5
-}6�ν�/����Y|)�'@�F|K\���7 
��p�.1�̭��D������j؄�M:��m
-;r��WuO��`��YR��)��O��_�����G��_m
5&EeT���T�Q~M�,�޹N�x,÷�(�J��^)������P��M&ա���#���
�o�w���-��O��y�<z��H�<m;�$"
BH�8�ۨ���?�`-�s�/�g:WZ
��6܎jP�9x!�qڼk�6�2�l
��aW�[A���e~x8~k�o���:��˶f�YF+�m��^���]9�l
X�ռ<޻-#l�a�:2j�~��h鞊��
~)�9$�7�e,H\���cRw���\3�*Sw��UL��jn��*~�U��_���86�/�a}*Z�}�ֱ�H�c�lkH�wf�K캛�����js����n	�fg��p	�Q��Z\mL���
-񕆁�;�3��#}��K�c
�5$'T
, _�ps{�*�A>�W}�Jn��XϬ諭��~��H�㿏B�?^�}
X�7�Z
�Gۓ+�^�;����bR4�W�5J~�����~o��vw��QDNGu]=�h��<*�
/��A������s� {���
-+`��������}t�B���#�5��-?�iK�`ݔ�2��uh
��� 5��y摙!��/B�$� 	Ɉ-Rv���S-�'Z6�M1,קĔդ���HDM��
L��*$�<
)ȍ1=~8{��W\�rr���v����ٶW��*A���������%�?yĥW
-N�H��nQ۫�
�[*�ȃ5t�KL��k;aw�I�q��h��#��4��g����+�Ϯ~<��;;����4(�
-b���
C_|2ؚ�mO�rN�
��^�/�|Вz�߇Bt{�z�
-J
-�	mv	��:��Զ��*
���:X�{��t���9�잌Y{N�{%�x�[$�1�Q���{�%�Ku_�͝x�{�n�=w�4�
Nս��zQ���38 
��ӊ��M���W_�X�������B��OL
g�S-w��
wym�>h��k��Y��i�EW
]��<KE�Ҋ�q#��x��>�&�2�Gz=q_=�咣JJSHD,�S*��-7���E̦;#��5�����忧aY_i�e�����[a_���²�2:(��D��&��핼#��
f�W��5�x���Q5��_Ao��;
�@f�6��ؗ���zd�r�e�cj6ѹF���ؤ��Ow���� ϭ�m�#�7�0��?Gg��f��mڙ�3ӎ�S����ҖB���
����'!��=@B�ܵ>?9��O�p��	ɝ;{/���^kݛ�C_/(5~
��Vz�B*�;�
��C����GS����~H�)�tOK��u3�m����0��֘�5>:��z�z�i�
�pX3ु��Y'
ܚ�/2���9+�
�}
-A�c�X5=!T�99�,|�b�֬������S���r�oԲ? 3�
�B_��qB��ڧ���
���
'��]�S^���<�c��͙�A��M�s�Cck^��г��w��;���5H'��Pe����������ui;��Ք��C��{�nxݎ,[�CR�T�4/��
����UtnT��z�IFع��s�c�F��,������g-�^D���kO>��N��I��E-4}͆.\5"K����
�uJ	O�v5ݞQ�sL����ڗ�=Ԣ�����JhV�s�/Y�aY�;
���w׏�w�����,���=]����a�n};��c
-k`��H��(1~���MK|_�9���̃)�CU��h��ATm{ѭ����5;�i3�����M	�E5��Xѩ��Y1^nե!h���gG���3�?���gC,�}+�� )�AL;�j�Pɿ1�}�C�YTw���7<�Ko
���-)*��{ %�"L��	�.�#�k
|���
����{qÎ�\�#җ����_E�����?3�^ⴿ��[n;������K���[nf�%31�������6J�Ҷ��;�������<Z��<�,y��oH�����|��~6q݊)ݶ@�>�P�nP��
\�a��
!�o:�e�1Mc͎M��d �N��>r1r3�sN���†�c�\
���pW��=�z\�pG
O��[�临��	AÍ�^��E�uZE�U`�NO�b�Vu��5,u�
M[���c6���U�bZ&�J�����!�C�i��躃Q
 ����˯�5���~��)ם��uGRTM��g��uwT�Y���ʻ[\m�����G�<ݠ�������A{w��N [...]
 ���b��ؙ})N
�kT����[wW
z}r����'?�qߺh����+.&j7� �zim�!p��^~eN�,����[vJ��2Ư�8L/?�Ge�4!
�������g����B���aN��IՓ����5ug����u�W}mF��d�Hl����d��L	
-.~����{
Yu���^S�'NK��L�}�d�+������k掤M[gچ
���t�
ӠKV\ي�\��a6��״��H�\���옠�J,��J o�[2N�w5?u�?׀O�����b����o��/8�d�A�|lbH\q+�l|�b�eϨA�v��� 
�d!TO* 	�H�9�fY½ ����

*�������� B�E��U;�m�)�9�IN&�&������'���ϏJ��E�A٫i��E
���Q:��8��d�M�r7��GPw7���l�Gg}��V~
c�}��5�l&���z�Jk�p[��D�ްhpFN��s~
h~̀�?���q�2b�\?g �����Q
�|�)�����֝Ь� �y
�"C7�4����h� 
������e�4N������W�:�m�X<JD���'
�<�uJ��p�J-��Snzƙ���FH�
?!���a��t򆛍vp��/[u_&قM?�z�ޚ���8qU�~L��C�#,��\��"����'X�/s<ŧ	�����E}��)e͝�PK���ި%4^�Qb�����]gs⦮�ɜ�
��x�:�U�u��Dmw���7nn�塶���-��Lؚ�c¦�Җ{�*��u3� 2��FO.�2-�H�t�JW,��E
�p�J�]u���c
����Zc�ӈ)�	p�[�\ڪ�X1%k�ס2~�zxl��G+���AB�鄻��:������&����v�ٰ�������v����?
�K�'����?{1����F�� +�7Y�����~oF����J�f?�3�*���;V���_a��0�g��-)k�Oʪ����WQ��~�m��́+:c���iǔ�
s[oX�e��ɟ����yϏ��k���ew�%��A�n�(�{������To��$}�ؘ���}�i<f�v���Xܭ��A
W��og���Ú=C��F����Ԙ�oZ{��nL풶%i^ٔ�h�H���v<4��<O�+�03�x��&�M�F�w��'��� s����>N_'Y�� 
5K7=��M7�� D����>���u�h+��ߌ=wɂ�Z2c*�M�Ҩ
-�Հv���O�\ζ��Z�P��b‚��1=D�
0
-/����!I+FjͶ�ܴ�ɭ 
�=��n�H�5�i�
-/��㷼����CL�}�!a
-j/�"o��}7��ˬ��A��栔���5�ٶ�
>i�	-,cl�-aÅ�^4#��|Ȓu/8gF��fن*���!�6L�����t�v�g���u����
'��%'�}�Im]0�V���/�]�� ��f��M
-��&�}��L�1:~'ĦE�����y�f�a�����k�> ��q��9iUgFy�gg[���c���Ѯ������)��q���6�F�G$5W�e��;^
��;\C�J��B2>�s�>D8��Q6e{�[sa�wF阽 ���ɫvRͪ�TU 3��
��ʋZ\�i��rE�2H�U�⊴��14�1�h(�G��v��
��:���^���II��q)�~��~���j#���gU�

��gzQ)n!�%�$�GRћS[D����do��~��c�Ϗ��+h��S
^:��z��T/��0��
S��
^v�T��x哋qy�N��=�|����x���GA���N�b�(��;?T'$,���&����:��|�ú�=m� /��r��5��8�[7�+v
�š�;6R����'�fB�
U�|R�^2-oJ
6$�� �wb7��nIq0rϋ�^|��GDȂ����%۩����g
-o
m��q��gd1$��Ȑ
U�fG����c��u
�<�i�6NŭX�1��<����H�u4W�I�Æϻ��%,�@	

-T���[T3jW���U+;��5F���E-2=�e3f��o�t�m7�@����3S��|
-3����Mo�����QB˒�=i�O���Y�J軘�4���C-
5>�ʼ��k~�jE�̘q%1&)]���g5зc$ط���[P�SrPҊ	��n�1���7�o�g�-�!cb6W������U��`�A�
a�?�h�����V���a&�����q��(�iǍ�X5�s�b�4�Kp��zЕ.)65 ���)	E���s�
��G3����ކ�c=�wg�갌S9�GH[6P���m n/)۟�Y���NH愦�aH��t�Eߌ�Ī�
-���!;:� �=�i\�>�nacӴd��Xw�ZL��
��`U^셤� n�<�6_�
����`����3���x;��U�����X�5s:��$�t$�tw�pw�=7p=c��
ЬM+�z=�NS����;oW������GϡI[
N�7?W��/I����$
~��(�����&]K�:�*����*��d����'9��
� a�i�X5I����
��G?Qɿ���'��T���>vŝ#�* �xͼ�}?0��?f����b<���rR\𗋒�WT/���K����4�|
%�
�b��(�*�2������fd��Y
��T�z��ݭ_
��{[fDᲪ-a�z�e�o$&^�p���^�q�<�5&/��0��4���8���/ݴ�eۙ�����
S�������
-X�i3)뚝X�`a�3}׉�\�B�fc�M.��8�Q�ac�Rh��Wۿ�E-�~�JiY7��&��w:D�\��#*X���!`��@�-���=y/DA�4lg�AYs� Nv��E=,;,��y��-�[^{i��j�o;b��T/hA�c<���oz�!��Z��}��c��NjZpڦ
]��a�D���,������M�����%Le�3A��k���6�d
gP>M��_gٽ��������&���N��?zq��A��ަ{�}mO��
��W��p�!%�pAK����FF��=��驸0!�����%Ϩ���=����ȷ�N6|r�b�[x:�]|��-8�b������w�,�N����S�rx�[��~X �aq?Ɉuog�F�9��B;��ꪁ\1����u�0�.G�:�/�љ3
���s�jR՚CȈ�YՆ�#)�[~e\Rrq^��dˍ�Y�P��C�+1h�b�b
_�lE���;_���=����
�V��� ��`!V�9Y�m/��f%7-Xi�#V�s������R [...]
����
ޗ��7L�l�`����] Q�LS�غW���\s�_&{
�����Y���w���9��ה���Z{;��i����y(q� ��v������0�+vd޾d�5E1��
��MgL#Zp1}|V^�RJ.(:�NN�4?[�R������}MOܤ��ä��!2�K�J�
���,�q-�p��%-�{���|������Ѷm��
+��C [����8�E;n6r*��cb�]��t���
�'����&D���|,Ғ���V���x	�[>L���u���	;����QQ�e=�xۇ�

 ��;��M'v�õ
Ν��Mˮ�Z�i�i,c;Ĥ�z���#ͨ!I�Xւ]�=J/y(ͣC�W#��'Q5�~�.�>������O��Sb��W_{�/
-x�qYǛ��^������h	S*\v�J(_rӀ�Fc�J��
e>�9]{#��</�ڗ쌖u/�e/H�O��svR���R�<���*Z��Ɗ�����zr���X6�Bg�����6�Ϊ
���6�Ϲ��7F���S���I%�xd�]�`L�	y2����`E���aY�&Lي�Ҽ�b"W|
L��K�}��W4�����@�����{��(�_��畝9���W�,$�Y��qp�ޮy����aI�é��W�rLָ
���$6lH�sZX֪Y�e��9�9��B
f����b�շ��7�K�*f��
~��W�Y�!k���O�+.�ٿ�yg��j�DĀg�FTŴ���-lM�
�Q�bv7�i�_w�JW
��Cg�n�cv"
ְ
-�*|z�&���-�?
L��q����jb97%".�:&��;<�**}y�xûg7G�]�؃#̊�9%"�9�@&��R�
ʔ�R3҇HXvP�c�P���C=e&U\v2k�.p�c:R� �⼝
x��@{�-�ɫdނ	W����W���e�T6i��Ҷ�N-�1���
��QNI,�
,����;�g���!J�
QG�oc"����do��iY��=O[������қ't��5?��1�Ĭy�>t���;�j�_�B����U/�d�
O�2�r�ܚ�JL��}�i�Jl�I��a28�Ť�.u�@������O�l��i����=/�qŁ+]4���E
8�{9� ,�����~^��ު�s��g.n��p�醛�l`�ޱs �vF��Qr�Mi� *�5
��n�Z��&
~��T<,'�ET��e{��!B�L�A!tÆQ�7�k��3vV	y�l�gl8��ӊ���Ւ
_���;>:���a�U?�>mb�.X�E�%j&V�䶽a��8��dS�6p}T �
-r���'�
�T�lG-;Ӷ\Ȓ-�n{<�ů�9�3�vF�˜���t��Q9!c\C�X��i�zb�O
5�HQ���de�X�\?�F��й�k�d�vc�{�ӥ|�a�Ϻ�
1H�>&<�cV�X(��>Jۆ�
-�1j.���ҲU�jE�lz���lEԌ)����Q
���qw"�C�}��
��χ�}g�}k�]]c�
tH�k�+I
i��i5���
�
�u�o�;27m�5;�qF���K�:Z�[� \���o3��f����?
ȔSd�٭�~�b'p�Fm��psV
l9�KV�,Ђ�V?���F�	�ռ�P>����Kg
T��h�1M
5`�W�ԦX�i�
��E���9?a�!��֠FN	��m�VS��3iQ��ߴ�]��Q5�P��<�j��%ԋ-^2�K"2�
OW�_S��W
��y'���f���٫:l�I�x�/�s�A�_s"
�M��%4we��>����:sϣ��mZh-[Nr�Nk�
�;V}D་�u0��>
w{�׵��c��t��s�Gj�
P �#tԶ�Y�b
�`	�:j����� o� w�G1�~4�j�_2Cr6|���`GZ��-uo��Zw�����aY�����?�[�vCx�FP�?�
-��t���T�iJd�<ݥ������-_{��^��5n���㲶�K&Dއ�m/����b����&U�j�TL
B�����	~ߢ�M]r���A��C�/�'��\��^%�K.Rü�ӱ>,�Uv�{��W<��?��Ƿ-;0uknp��Ź�
φ���Mo7/j���h�E�&J���X=ka�g
Ɯ��?eb5;�w�@�<$��3�b�U�d�U��Ƞ� ��a��/��o
�8��
�Z�ܶbVG��i7�m!@Cl��
j��\
S��W|\¢
_��'
�h��,�(m�!����X��
�����@�7���
-��+>|cp�>���M
�\
`�����~�;�Lw�>N���!�`�p��Q�k&4�ڨ���	%_&��%
<wNN�
��Ǥ
�j軝a.k�ͣ�v�n�ȼ3Iג�Zsp�Szf����A��|B�N]���m"ƪ�O�5�&n�s��ĺ�yini[��R~�k���
�V�R���W1��A}7hd��3��6D���|���N��~�
g�帚T=o�!}Ȅ�&uF[;��S����k~&jʀ)�ԡҖb"~���Y�u3�=|���R�{�4��0�uD��0w��XY��I=
��,��5{A
-t#�$,z��k�4�?Q��`�#��A�G���#��/���#��U[[ڼ�%aF��t*���
�T�!V��U�x"�	�C
	
zHRx��'܊i���^b�v,>G��i
�~ɂl;�=�2I�gq�,d�΍������ϻ�}�v
b���/�Xă���Y]��y32{�In�h�U�,�kO�i��MW��9M��yC��Mg�#cZk3�W�y��Q�z��&��rXL�O(p�sB�N��u���$}������?�f<pc���:ʥ-�2�fb颛	]�1ؚ���
��1]e�լ�
_�P�
Ը�1uCf�<pD-�MX5�Q��1	 �1;�Q�fT�v�
-�
r��vc�Mޟ�qoM��cܮͩn�֬��3�W�N09�2t�A����E
��*$d��y�cڮv;��l��qQ;�qc��\f��
R��0�s#��
S�'��[��b�� 6l���	���B��_���
^v�a�a�{�D���c�C[�v�����nټ��9���,��ͫ�LܼW�dk���<,u|��z�=����
Q�r'u�� ���:5,F��
s��~:j�Fi9<���
�t�/y��j*(�l]��c;V�`\�	I�K^.q�H))�)#+��ճ�e�u7��\�S)�Aa��������	�[M�j> ����3���Q34g�F�Y�КW\
섚�8n�#��"pDO*\�u�g,R�SĘ���GdДi
�e�$e�M�kP���4=�
���l
�Em=�)#�`�V�z
���b�}+��Y��;�:BѼ�\�顴���[>|Ӓ�
-��HE�VFۢ]@�P�C��k�vr󚇁X�3��>x�Em���
�bl����������	���T��h�u��;j��9��LK� X+ͻ$�5�P�bg�#2H����Ί
]�`�\���p-���� �%�
����H�
6b�Ak^����̝���=�B�.O?$�%�$��zX��!ʘ��4sh�kOXy�3�^ޜu����ȣ�U�5a�b7&��X�ߝ�vg�5�!&%f�U�&j��(��7A�n�1�9��9n�D=���q�2 ��z�UݽY*�4���S�`c��*�}ҡ�P�f',ܙ��,
S az{B�ݙ��w�=��	*9j�̝� J����q��7H���R#jL�ż���/
2i� ���ҽ)�kkRdY	
-�K�\�
[1�����ޭ�_o�0�~L���b7LF�
���mҀ-��[��"�v�׳f��62`L�Μ�������t�j��[�2v���c��q\�n��^�AU?�7�G�{�0U�<WMd?K!�j9eD�ʱw���{��SCҖ)��������23������0&6� ��S��JV�K%G��� 9O�"�D]s�H%ˆ��
��{�τ�Y8M���!
(0q�����|>�z
UY�����l��+����W��1��B,��u�!YkȠ�2I�Ztݲ"g�1��i��Uf�+��:9C��k���WC���P�iQ�V������j�Я&��S,�ᬐ�@
P��]bE��G����.���j��Ȍ�v��e���:�vں�ol4��P?����O��ms�.䬍�\�����ی��1��V�a��s�G�~q���Vi�#�q�+^��i���XD�Nz[PN-
-HqY�*J�R�u�|�ð
�D�hp�
s�����٠)��sD�o�2���
؂��
���3fjU at +j�*�H�@^����������Mv��f�7�ͽvZ~཰�� 0��9g��|l�|�K��1삗Ҳ
���cZb9@�\��X��E�M�
�C>l4:���y��L�d���ҳ�6ޥ����1u�jaw㴑ZrsQ��t���ذ3ɕ
��ڟ7#t��
��D�B��ԋ��%u��>�K��<a륍�e���T��25�-���z."b�ׄ4Ȭ��9�g���N�8����	���,��C����*S��%���,ohw��\��s�
�!�fMX��[7yXK)���;t�U=e�V,{��P�}}�[8����=��bQ�e�,�p
*a��d�k!Rv�NSS��}T�;,Lz���x���~.!��$���XP0:�-����k�A��oP3��[4���
�+�YR��C�>����6���!�6{���>���6WҜ�L��MM)�b]�<���gg5�g% [...]
�
�ӌ)�&��>�J/�7�{z

-	xƪ��Y���`��%z��	
�;�w�ғR�!��r
k�!���Q
L
-b�L��7�Z�w�u�g��	�F�0H%�*
/Y����+m�1��7i��=�C�$rS�or
��O,)������im/e�"�O*�Q
�bLI�Rq�|Z
ף��<����;���J4�ʆz̕I���R�� i�9xi��g*�a��K�WKsaWs�;NW���5����W枾��E��t�pcܶ��7L�ya3�3�I�!
Z�u԰ɆB.YW�%Z��=`��bu��TQ>���"��7n&�ݺ��xe)�7R�f��Ω� �mRʬK at Y�Q
�v�F�
X<��DPWIE�|i����4�б�7
�8"�m,��QE|P[��[��X]Pu�V������t��Cx�Nӻ��Wc\�;���<�ڟb�w�%�͉^�J�W5��n�ĠԠEU?S�Vקj�
�Qr�$S��چ��l���qkq;"u�
�n��h�Q���
�
�+� 	�g-��sP��<�����
ԉ�w����X���?�~	��p�����*��'��
�X��K�v��cvպ�P>�
-�%d�~)���	��":���`�u\��*�}�\s��ru������ߊ+�?�zRw�Za\Z*�{�qI"k[L��D:aⶏ� ~����z8���:8c6J�~��a?WP��SYe��յ�K���?y	9���¸'��G
���]�����ø��?TUp�@��DҬi'5�cc�ʮ�X[)�z�4W"��yD�.�Q�<�x1�dzC�j_�	�x$Dq������K	G_N��I���2y
�Dzb[�&�f�-�.��ȭ�D�
P�
V��_DId�Nqo�]ҷ���.`���

՜�!:�x��
-ډ�B�O�%賹�?<���Kar��>�<�G���֜W“�
�f9��AŐ
�?�r��je�)�e�R#P}
N�ohѝ~�p�����ŕ��
�������̸s���^����������x808�X5�s�=}S.�o��5�@�x`K�M���+I��5
Oy����Zy2�D�����#7�7ĽH�
IHg
9�1��t\I��'`��"�|�*�
bA���ZT��*L��3E�U^8��^V+8[ߦ;��f;��������#��&�ݾY�8

���ʸ�ǯ�]��uТ>�>�v�����s0�E��K�B��D���0�<n��
�^��)�iG���D�Ʀp'sa�M8Bw
K�=��� ��
�/�O���~�Lo�37�����Q����t�Y���l
T�T�=�Ԃ�*hT���G8��K��Ż��ˏ��~��y��[�q�RHq�����]/��ʀ
���b]�_���
d8�*�B��q{�ux�rN'm�Y;1|��;�^��݋��w�������^���.?i��=v��7��
<��ݍG���}m=�t��R�V�!�6	s�!��l}
�ZT�/� HB�5����_�[�?��H��O"��q�&�ڝ���T���q�o����3.!�{$>���k��)�S����x��iwO���K�[��\��1��Aa�߂1�7�~�O�
K)��U(:v�~]��g���3��'���z)/�ǟ_��}�*�v"��K�G^�A��D�Gzfl��]*�	(z����fS�� �l������	1r�6z����Gq����4���|��7�#g.d��{����>����#/^���Q��eD�mw4~�I����][*A��Ů�4�Fq�^"�Ľ׈#)9��鹼�'¿��zɑǯ`G��
�O&�]�Uw?s$��~<���K'9�Wb��h�: [...]
N�I���N�T<���f:]R�s��˶cnT��9�Ɠ�����
��
{�J;��@v,��vL{�DJ{� �V��q�gmT@@�MU�(�8�SFW(�(�/ S�
ժy��8
󹣉)�#O�q7��]���u��'�����j���s���b叹���˛��<e�E��³�R�O)j�㩲���,�d9�<��9q
 
_�js��U ���SH���ѧo�G~�+#�?�
I�c�x��8U]��0��f�|�N��(��!��0��3QE��fvRǞ�At�R
�?%f�ǧc�?}����>����)fo���_0��7r����qs^gXC�
U�z�V�j
�@�n_���F.ԁ]�_�rb�x��Â��Rj�OI�㏒�?$eP�hlR\áe��"��1%sƈ�Yr�Q;6aa�Z�L�L��#w��{��Pd�3$�����)lT�~�J������ߦc���3�e�1~/m�^��T^hCZ����7=,O�Ij /�����#'��H��~���Gj
-e�ߛ��\z_����4���PG�ǃb��p���ҸgI�#��q�����Q��xq)U�@�M�]hQ���=�cZx�Oz:l`T��&���>8Հ�ߨh&�<�kw��i5��S.���ղ���*�n?�]�U���q�G�
��J˅'�x�Kπ�r�D�]p�L"�
�b $��ј�4�LN�Zf�$��L������+����n'��O�
I/�
O��Ϊ�َ�=��\�C^Ĉ�4禷l���ۓ]�#61N�s�Ī�.
V��W��>��z܉Uܪl��W�}-��v=��~Bu�j�9�Bi�6_�d���݆~�A�9�1����Y
�8����eJ/S֫��
4�1��
MyB�=+l
���+���+��6
y�u<�\�{J���������;�p͝���O3J����I.J��rف�[�#61�`0
$� �+i$�G�Ahs�Q�Wk���
-��?�x�z���q��bs�ф,��mHa��K�ޯ4l�񐨽
�5�%V�Y��P2S�H����T�-��݅ 5���+e�_ަ���p�4��?`R�9N���[
^�`L#Fڟ;�׃r`���]g�+�R�`>	K����2�%
D_|u��rvn�Np�y8Fu

S^Fb�
��X!16چ�j�R��0�i]��B���
&L�_�Jpȹ�&���թaC2E��W_)�U0Y�a�.!�	C��Aae/�<i��W�V�7�����J.j
 n�������:(�c��g��-Z��0���ӝ̤�>Dl���;��=��fҏe�v��"~<!�}J	������ݿ�*�h�������
��{T�i���K.T��
�
-1��
N5�˖H$Y��q4M�F�	�d�C �}�U
����x�$�yb�7��5��!`�-6���.
����&���K6|U�H��w�A#�N%%�
24I�݀
��L2dk��5]BE*O��&���mX��V�:�({Đ:j�T�2�v��i�E
b�^���:G��k�!�<��H�N� �d1t�,Z�n��B-��V�2��rdC�����?�H���>�7`���~�^
>i���9��y��du�z ��Ħ�aue�ǜ�(>cw������j�[�C�jJ�ݦ���f+�VR�)Ja���]�l��
���-�&��j��e�
��m��W\��u�uo�K�7%�.��j=6y�F7T�D}�R�`�
-�|:(W��RK)�
-XO!$Nb�F�p�%ؠ�
��ۈo�-�1�A�<���Lb����ѫ��4�V���^���(򆄦�~��V�kl��i[��5�*I۲N �����.ᖏ�6����k��{>&c�O�N�)�~5��*!g�D���(P��mҾ
����T�*��
�O'�L98��n⒗�[�s�{!�c������'d�7#���fl���5md6D�݈a-�d��nj�E���]��_W��/������b���}�H-	�0iQ�������
ʇ �d�՚�d�x;m�|7c�6-,�ø�
��˼jj�C�U��
(�u���t�

Fy�H��c�X���!}��V�	{2�d҂q��{3����y�E3���HW���H{8`��
ʪ�%�7�}���B)s��1[
�ڻG �@|K�צЯ8�2���L5(8�|�0@��S˷�غm�i��
lx�a�_�
��
�&f� ��Аy:h����}�v6Ч%�Xe�d���.��
[x����!�v���OQ���,��1���
A�|�`;���#�h* �8d�)gcg�/�
���y�� � �,��U�NB匃���d3�.�j��]�S�sVBي�ذ�B�-聉�ʖ���طY�e��v?�q�A��h��斤E7�~�)@�r:P%"�򺕽N=�ȣļ���nv���:��
��,_��ԭy��4����������'ꦁ�
-f�[A)���Qk?�e�L�
��d`
�l�Ҍ5h�P��W=l��Np�{a&'�iz��J*��j�ڨe�i
:
b�H��UAތ�*��{�o/�Q32��T�H�G[6��cP4�%Dŭ�Z���
��U
$eÎʛ5 �u��3}-9��A^HΎ
Y��B��k~|Ü�ִ�
�}��Ehؘ�W,�:�m��Y{���=?�~��5��V���/cT�0	�e�ܹ�BUL�����W�jT�H?���W6gD��n\�a�U3����#e.��3����r��)
�xV��s#�kh|��#؆m7�p�i��0�ꢶ.�5�Jt�U1�����Z��� �#JL�E 
jD�
-Vє�����/;��u�`�3?Tx}��Y|0̦|
���(>���r���w�4����d��\p��S5��#)ͧ�
"؋9�y���X�a ����
/�fϏ���S@���?GX1_'5��a)����+��/aD��	��"�M
6?
��?�0Af���eK,�haYs
-`�Qs8�c۰b�]�B�
��fH�-(kDTxu���ͮV��irg���J�R�Y�К�6�WwBPs��*�:���`ω,�8B�\�`N��sFpن��4�n~49Xy+�[ruFVv�"���7M��g�.8E?NP�_���O�lђ��ͤ��JXTr5��{�q
�2��
#C?M����Q}�b6l
��ꊄE�ը�����8����T�v�ΈZ	U�^R���@�?#v�O����7�q� K
7`�VFEC
�x�Ä,��mKvj��	�y���4����AT
A�~]��konP9��_,��_1b�n��%�:xƶU��B�ͫ;���6rх=
���V
��iI��
3��Y��/^�6���r��k�PJ��w�A�DT����,
��0�>�vtf�z�-�~&fՊoX2���ЮS���k��+�
���h^y�`@d~%�}�cv݄�
(s^��|������fˁ.�ly1*���`�eLɁ��&X��?),�k����Lo���st�,'=��Ems궋
�
Df��Y�C����
Ih�
���<r�
-�T��OmY0���X��$��q����8��X��W��ei7���4el蚒>��i{N��5sQ��18`ߏ�8�[?�X�
���A�zh����Ŷ�9sw������FȻe
(cσ�_ֵ��+��	���X���ځo>x�������Yvd޶�ؼ`��

c[�D�-�t�I�wv��7��w�B��q٦�����;~
-x׍�Y��%�� �֎�
,��\����k��~	��Ț?�h�՜��p��#ulj(�g���:��E��
�Y{^:!淐-cg����ce,([�t��
�bǍ��wCs������?�:sf�����O��Jo��Ko����m�@X�B�����}/�uR�%�Q�y
T��h/��Š{�|��S�l�����WYY���%L�~
C�m��o��jл5/�i�#�O���8��l���2|�
��¶����;>dՉ�L�y{S\��v���ኲ���a
gG����mSK†�#9����|}�J(|`�6�qE{vl��@냹��;
����jЋ%-:gL��hB��t�� ��c���b���07��F��c��
�μ
�f%.�j�/+���ہ�݇s'[�f�&�kc������1@ .�㣃����6L
/w
��}/�|�	�\3 _��I1�#�� �Qy�/^
�*�:&.�<%�����%���'o� �œ�����S�η'���C��
v��s��d��v�~惃Ըc����ړ���#���~FڙQN�o�Š��lŢ��`!v����
{g檺�ź
-�|YӖ����%��5g�;��|�bS��w�])�&{�������^D՞Q~��a�C��tС����D��{#������e}
����?Go��fڮ}���[�
����Le�F��P���&b�݅����"�5@��;!	qj3�����=3���������w�y
T��wW�2��
��J���i��~|0X�`�u���ު��_��zn�TC�/����:��s\��l����ŚFJ�X&�	���=����ab��0���>ɥ�"�
-to�t����jW٥���G+\�Q��:��������T����^�Qτ���c��d�F_�u�
.����␲�'	�!�#��U��
h�5^�z�}e�WN�Ǭ`�&�%!dlu?0�V���U<��WGT$��04r����_#�{�|�WK*p��I�iX�� ,�>G��h�n5�bw�0�LC�c���	�*.vo
����m�������k�W����:����^y#=^%��mQ�Pd��E�
U޷L�‏q<���h�4!�-�Uy�
�G�(
� �
��Y���o
-��^�_���<�Np
M���nT�c�Wr0FK2���:
�{0�{��qK�\qv����/��h����S�'��'
-B��
-
PbS�&��뽈��g�

�>�^W7%�8Jy��0�_��x�B�<����?DŽ|��+N(�
eM��Xŝ�W�?�����'D��1��ߠn
�������#5Icؘ�a��N�����V��[�.ij�R��

-[zYx��_q�9KH7K�I3-����?Cs�G��
/��.�H�^Y����!痃~�C�<1m
�	f��mW��,�JOŭaZ�������E����g�z�!�䛁�
���#�<�$k�&Lp"�s���i��a�3�W���e���6z��{=5I��r�K<�]�I:�
̻��[|q���y��f�������^���!�-Mc��3�AV���W�Pݚ��� :�=υ�?A=�采m�/�i)���&bU� ���0M�
|:>ΩdUl"�
/�/�G a��ʻ�9t̑��P���XxW���'�դlPk%
%>co���vW�y�XiXPG(Vw@"*#.x4ԗ���/�<�S�O6�|�}e�O�tML-4�T΃s��k.|����a�Ym
�~��$��&E~�&}��
��F.��\_{�8YaS>o�6���|��Zh^��:㗭�«�5:ѩc��I)v���R5�j��Z�3?�x�$f�/��ҋ�3�4�z��
�q0>
�ʿH���d�[I*:Y�A�r�N_i�jg��>-��3ݧ	eF�k����Upѥ���e�\���b#
�F+�4mɧf��1в��a�_T^�<��M�Tqn�~}���;@���'Ǫ
-O�w�����	|�vٵ���������pJ�Gr�9�)�髹o32l�Ą�	��D�m��7	����q���7�������G>0#٦k��`ww��om�c�yg��	_ov�#�Ӝ"����=�~���=%��|��
���C
��G'��%����Y^�]�|jh�:�h��~��𽺹�����H�ȷNѳlӴ,� be���R�p��YA��c��j[r΀u�0N`bT-�?
�c��^g�G��h�ήw��=�>��.����(�z�a�xհ�N�ж`"��"��
-b�w

o
��_�,��MH��-&�Q 4�j�l����QJ�����9gBϫRҘ���k�9�_ǂY�11�̤oii׿��\��6���>�Z��"�t�.X����j|��H��Վ䳲�g���[�<�g���#��j�
���~9��!�Elw��
g<�J*L�aZ�~jo��3t/
-��5�*��Qē}��摊��ih�«�s��n%�xk���ʛ��L#�1��H�<6m
-��CL������^ζK�%�Kol�Bn�u��Q1���߄�
:F٘yf�mރ�v8������>���%���r�-s�~�g��fY?�O뵍v	,�`8�i�d ��9O��Q�n�H2�������;�����v)�pw�蒼6�[�(�3o�
l��"��NH�_�CT�J�
�GI+�^�'���^Դ�|݅������Y�ǿ�e;ͯ��7LO�$F�� �țJ.��
��E?-�U^��%*ڠ7�M���J�� %�4H|��Ɓڌ��!
߽�����p�
#�<^�ҙ~J�
��������S�o��Q�Iq_������~�����(3����O�~��	/�Ǖ
�����K��‹[���W�Wd���^�]P��e�|��OM.|RTtc�j��2�p�b'�ۧX��	B�u�;Pvd���r�8#��v7:�
Xz����No�m�pe�u����6��qr�7�~����xSrq��s?�����)?;ň�5�̧`Wn��i!
c휍NR�m�&�:Y��Оi����^�83���Xo�����"v�h��L�c�캱���fwɕ�7w,b�2#�Ѽ����ʙ������C+��E�M���K�W�7lf�}�Z��
��������ȍ��[�o
-ΛC��?ҷ����
�*j��ҋs���@��
d
�F�
�<��X������d
#fZ�i��S
���Ow��Nӓ�U}X�=ݝd>�ğ�]��A-
朣/�����~�	�~RsO)��<rb���]�䛇2V�i�����>#f��ύ�Nݜ�L��e�<��&�d��R�
-N�FW�ݍΒ�[����+S��?5�̿��.��_�\�[M�X�*�b�A'�ڃ��-_6Du>
!0@�Q�|�5�x�����k/�<*&�,���%�x�
&�.�$�A��t�|��x���c��֫b�;�I��:��&lt���<ϻ��]1#�OX~Nь||8#��!<ӿ):7D��j�
�/EC�������̔��sX��S>u
�j{�=>BߞyI���'Ë�SK�E?���\��Ū_���쫉��C�]m/<��Vr��y�:IHн)�4Ɉ�j��}�W�n)<����	^ޯ�ձ?
�cϭ��=�#�
-r����7JNӴC�#��щz�_���M����i(8����l@%�
��m�	���a���@?1�*���&��`�U��{��]_��sh�0���뻽 �t]�ԧ�~
{^;���>��\Է���}�č������k�	H�vW�������Ƥ�M��V��AI�w#���^
�f0��)t���X�lmG�%y[ѯ��Y���\ W�l�
�TdPN/q��K7�Q���o�(��,����������K�uUc���7%7� 9�������X_��X�01a��䢡-��R[������2N��ٟ$&7U>��
�ӟ��j�|jz1��䅗E��
i�W�N�F>qH5��Qv֏}��_�/a��]���At��;X����^;:��NB�o^
�=�~*�e�!�~��^|�2d�?2M�"[1�O5�'ZUB��%A�PrA�PpG�Q���"�:^�q�T�e�C�
'���90��gz`���&D�k�9�7}S�eCk��6q��?��ح1d¤(�ܾ�a�6RB3Y�
�J��hW?8��c�
T�ǭ�.5
}0��q+iel
-y�K���٪�C	$rg0��fo����k�)-xd�'4�EBM���E$��S�u��*|����VM�i��d�!w&��{���w��+�#�(;�z�!v����=<����b��>�es���椟����v1-;����)9Җ�s����IV�����)F�7S���(�ߌ�"�!���߃�sH�e���3�}��n��{r���Χ�7�
��~7SM��
=�(�KZ�|���
~w�y�<J��
�fh^��ta����"�
1�<���O�a�Q!r�=&|����zw�Օw���1O���~b�s�.=��_m���������9���{l��()����"�CB�ֵ��`x���Fg�/K-q��}��l���F at Q��<y�L�~NT�蓡�s�����𷕗�g�� �7��n/vUߗ�A/W���*��
�<��:g��;�y7���wî�s���k��&�\E����o*�{�aœ�{���{���{�����p������N9�z�}o���2E��\h�&�9�٠N�
��������$�տF��d^X}{b
A��V�������
we���j���lc"��Q�;=H���ę�����W��t�έ�Pҵ
�ˋ�P-3�
S�����_��
-��,�`G=�A�Wq�K����s��@hN���j�!$Z�Kn������:�u��b�2���.�������}\��
hx8���oM��}Y�x�����0*��p�'�0�o�w

-b�
��m
�-.��
�T
-�z���:O'��s-���ya
�ڭcR�z��*�z�D�
L 
�+������j"�äh�4=ӫ�!�h�N)5�ph��w���3K�3���z�W.�G)I˯*/�����5 ��iK:�mH<c��z煘����w�� 唒��	і	b��e�ﻣ�����	|�U&��Z��)�~]j����C<4��b�)o�����k�V`�2򍣄g{c�h}',L�����[�àJD؛���#��4!6G���C���ă��n���m�d������ʃ1���at�K��X�b䭴#�)�
~�d��8�O��'k [�M��z����m����ԫf�
���(�J~���8/�/��8E�0ϑR��h������#� ��Yq��
��?��F,�1ς
��C{z�
�&��^��z�\-r�
�x��/y�������
�0��8V~sw����`��y�L��]35	k}�p� �� �O�k��JJ�NO��
�Q���J���
�d�=�c�
�{���򃤾�G�E������k�9?L��n������貪
v_�Ru�x��Q^��������r�ߵ���9����v�d���J���7����i&«�bL����ˋ/�O/w�_��G?��?�$�~���*&��%�"�,1�p
��_��2Q���yԤ
�[D4X�_�bJ�_�M��1y�
T��2k�����C�O0s8�fU�P�w'�1�}U��X	��W%���"�4p�GQIü��it���M��y
�4<^ޜ|f�u�u�$�O��\�G"�o�G ��q�������
S�Q"�V���,���9r�U ��e����V�<�� !�:CL���#|R\�U��Yy�si����z�s�]f���lt����@�~��{��6�5KoJ�K8��l��Ek�E6))�2�f� '^@n
NR�
�R��]
�C�����09�!�o�����.�]ߒ��<?���k�u�0K�G��]������ְ�N9��&�$yd�
��I�qR�M,��iѻC�䠆���)�'
LXP�A�'�1{������{61)�`���M��1�G�e [...]
-�,t��?�	���G:�9K��D<0�p�k#<��{R��~{��w64�h�
v�%������Z>1��(
�*Z�ܒS
�=��<Tt�����&��܇~|��g��<�7���'�
�K�N�*���S~=��l�l̴0�e��n�g�ms�R�����z�}O֒p�Й~!�#V�5���w��w��i>%���PN��		ʞ��oqq�J�Ӽ��!l��Eѥ����ko+�<Y�U���J��9���EQ�Sƫ�
$Dᆵ��k˽ f����*�ʱ�\q�ʥ.�!⦅E�gh�6>�8
���+����[uK֔��BgY`��nV��ڢ�;bԩ��;��ҭ^�c1#��qz�����Ѱ��N͡��o�P
-�+l�[˨	.p��K˷Qq��X�;��}	z��c�
W>]���ţ��\��Z�ZC�U�#oI�嶙�`<2B&𽬵����ԓ�7��
���w��ͩ?�3��
T?�X�F�5�02
s�ʝ������{��?��Ӿ��2A�B%
-4�̡ycRf�[�*�
�:������LSҗ��n.�,=o���n
�R�-E?otV���p�u�������zЏ]f��!~�=�n`��=���Z���Lc�v�5}
-rN@��8�<��9��E�C�
��9CH
-hAf�{_[l�q鞧ئIɻ@ϥ���
-6<4�]�T����_M5{c�+��[���k~5�j���3FJ��t���1�}Џ�3�
�
j�VX����~l�j/!�!k�w�ۚ�&���Z���o�=���4MS
-צ�����;#���N� i�fY���)b�i
�`���4���:�� 9w�5��j6^�O��L�jr>m��D����ڻ�(��Ap(��Jz��
-e�դG+�ݳ���3�S��.b�6)���Vs�o�G�(��;#ȧS�g�O~5����.��a�C�Kp��!ǫ��
�]�)7��2�'1O�z!7B{a���:��������<��-#e�Б��o�ڹ�S��
r!F�~W�^v�=O��a�@F}60�.
��$AE'ЏC�vAo��Q�����P
-
��<��Ep.�I]����e�6�x��AV��
����������������eKT�a�K�(	2bƟ&Q�
.�p
-���P�>�����:L�RъW� 7����[z�kM�
.ik����8.jo������9����]6��������QNс��c��=��v����
-|ډ���)�4!ѡ���tï�w����/���S|�<����ы��Lh�
��W昫E v�ѷ�R7e��;	3��[}�{�uR�F�Y��+�梟�A�K"�tM
 �AR|7&��6Ƚ�gY�?
��n{T���
�����
���,�HGzJ�G�O�����/�]^�Ɔ�
-�OۥČ����U~��:������ԑZ]���
)hR����J!�:K�vɨ�~��:
��
���#�
��d���6��6�`a�<
-�X�G*�)�@����7��1
]Ǡ[�9��6�W�h�y�9b�o�Z��`�g�����!BƑ��k�@F�F*�ʮnv�_w�@n[�}zm����eM�m�	0�}��V{����k�#w\s��=�}2�� �e���yC$<2��~.�:
}��6��UƯ��e��5[dT�����Z/>ʯq�ͧaᜳ�T��k���Ӝ�F�dc�eiKQ�K�C{�|�WŬ.������49u�

���[l�]�q�Qs�Z��€����@y���
���^�]��S3�K������/���U���p�E.)��ظje���w���sȉ�i���;�Ib�E!@ٕM��	n鸠⬪��=Y�e�A
�� ��z��L3�x���X��[���vV�+Z W�q��-p8'�|�b�.-�ds����0�S�B:uu��qb�y��i�2*���8-yw�o������ 9��
�#��	�w>�D
�"�_ at o��+�x��H�
1�-�-bf�C�,�.�p6%�&�ƙF+n����`~�-i�zd/D��Z�Z-eg��k��3�ب��Ȼ[�+o����*2~��\Њ�����w���
��~�#$���f� �(J/Jٹ?l����A[Ϸ��2���
L"�� ���1��ԕ�5�
y��J<�X���_�}z�E�9�8"�!�D{�l��]i����Ĭ,�\#���U������W�ui?�7�^�
D�:瘨��:�U�K��Z�NQRUME�T
I��V�:G=^鮸�USJ�.٥� ܊��N@����6g��6���nH;�ޑy1 �f�Uu��
�SEK�)�����Y�c��:�`
��`
��6KͰ�	��o�Q/Q	��I(ٟ@���9��d���n��\���=o�����*�@��W�J�	�d��HY�MR�zb�>�:,rb����i���R��W��z�q
-�d�%���?Y�3�x�Qn�EY#$�#w�k�.�)�m�=�ց���@�}\�3�/u
�4��MQ3��[:L�̊�w������m%�9I��~��:"���fW^ϓ�V^Z�E?�� #�x4��G�hy���1
��������)f�!�ٓFͧ
.��fë�%��ߓrJ7���m��AQ��+�h��ǞX�o���:�i�M�_,JZ��=�>�,t�ۀ�������5J�Q�H�C${�D��vm�>�{�B�]��u`����n��
�ĭk�4���X��i������	�i@�,
�8��B��
��,>�2��\�)��ܑ}}�=����/�
Ͻ:v�S�(�ki̲7������ *�<Ʌgߴ�οi5Jq�c�.�����3�įe��3!�h�I�'n�-
-sV��[C�d�(=�8L�Q4g�܋|�7��6�+��c�G9vY-xi��-��k����������wG+<�U#$��Gj"
Rj>𰧇ӈ�l�#Û�߶Kn�@��M��1r��(���9�8N��(ş7x̠�����btm��l����d���W;�ýr64�ɼ*J��py����]EW�@W���#���������	|��`�c�8<�<������Y�
-z����
�n*�d
�~z0^~�:	�ocSvGp����������f�y�=�ז;ˮ-��|�3X��5�+<1��'k"����4!ޡz^�TrQ>�Ы$�oB���$�"�2Sl`���a��&���!ã�U:��ơ������

����~]��p�Y.o*:k'$���R�
��e�
��p�{B�g���Ֆ7[��n|�� 9i���m��ԉ8
}S��#o}��щ
=�=b�F'
J�n5\dV~��
�4�l�Lr(Ŧ~�
-���+��9籉ih��ĩmn<Tv�,�ђ�{�wo���6�a���t�dC��h�2�t�"�
-=�z�
s����Lu�>n�6�8l�
-�gSSK�!�h�������%>ͷ�B9@^9Zi{��=o�z�SN��ȱ	.)&�:��y6�2Q��!!e
i������!�
���s�����շ��
|Zf�� x�B�C��6���5��&E�S���y�P��؜m��N7���ec܂�A|��`�P�=����I��ڛ��mO���N��Ă2�(%n���Y�G뎱~���<�z�3H�<�T��5�ib�RG��~Z¹!��3�}y7���*3�C�f�S&D;d쪭��Ɖ�{�I轍��1�IPϬ
홸9AK>^�R�z������P�����
��>�J�%���|�
��iV�W�EY%�D�4:R�"����������
ag����n�����Z�y�e��d�}�iL�Iݜ��i��b���_W�S4CÏtl�}��Бyn����ۚ�SS��Sko�7
j!v��=���Q��[!��B�A at q+(%�#����&%�®yѺԇM�o��
pV�]��
�dP���Yx�KQ�c
������c�U
7�myL���qx [...]
�W`WR���i9.š��:5<��.ɣ�����
5�*�᠏�8�V0�S��?A�X}�x�9���+���:�a�C
-U����OkLJ at MY�����uo �ׇP�<

�w��wi�%�%ҩ!Uք�Ǜ�����V�a���(��Y�Y������;`hiq���	=�"F���_�<���t�ya�v*‚�Z�U����$
���61�s����XŽ�wɿhڢ�
.򉇡9���j�fwe�w
-��
䊿6٤���'���K]����I\W�k�i
�X֔��rg�
��9�%�|y8-B�1����V)�P����
uk��(�����g���ׄ�E&e�fpq6��2@���Åヌ\3O {�l�FB�O�ȶH�y���2|�G+�ۤ�������}W�p�
���y�*��
s�jq����lBp����S2w�j���iCĨ�ar�m�]�V�Жir�O���%�t�	z���ˤ�֩�{
%˧j�:U���ܔ�U�%����E.	��DK*j(%��2W��n'e�yf��|Ǧ�3s
�k�0#�⠜U�U3����H�;�ݍ!���f�^@8Z�|ZB�m�q���|٩o��Vߴ6�O��V�q��� Ȋ

k����֥�:���e��ú
Zi?=�Gqm�U���]�u
2L����vU���^
�*�\_�5��Z�f��?V�O@�y�
�,�"Eě�<���:�Μ��f�E������
-b摎\�
-��J���4�Z���Q|����_�D��~�m�����گ���O��j�U7�

-z��h�������V	!ͩ$��^�Q�JB�S�H����
��YC�6^�\6!�:�T�S�"�^�l��L*|��{d�{����V��S�[�>� �ة����/
}*Zᑞ�v+�p��Sh�b�.����n���l�� �/�������T��N�5M1���9�o��ωb�R5%��|eo��`����<&,tJ�����#Eݳ%�^r��SO)��~��z�51-3���qZ�M�+��� )%���|Bl�$?��~��'j҃
�B����?�ͳ�ߵ�	�����9B�Jg�E]k�ώYL�]�CH۪o/��D�<8�d䉁�����%.i�]�٥�������ˍuE=�"��
NU>	*q�'
<�O˂{U��ծ��^�i��T��2��RR�s���'g�լ��"�h���-��$��U�մ6�c��
Uޙk̺6����5
O�c�Vp�P�Ƕb}�P(N�g��D��g_���q�q�*� �kk^`$�^#��^�������;������]��ͺ��fx���v�49sw�Z��a��ůcB�jB�y���v�9�
)
�ڷ��bS��w&��y
�:�@r*�U~
}(�I���q�9J�Sͩ=Sc��̩d��2r���\��@�HX��n"�㌜���νYR�� 4l����f/�WK����"��7ouHPl�4Ѷ'�劎��ŷ���w�7-bD�O���k���
��(�Ød���RS�[Á9U��:r�ȭ��ܬ����ܻ?C/Tw o�y�7�������:�=���N:�kL��>�J9�45h��-�W?m������y�_�e�N�ɫ�쓅�Ƌox�x����q|�TS��O��o��o
���mp���{��;n
�V	P�y~�U�*�
%'l��B{;��,�z�KUO��x՛��k=��{#���Yn��9a�
��
��WŁ
-����쀳��8�
��,&���B9�m��S���jC�ȭv�r��#�؝�һ�iL�[ɫ��G�3O,@����
YFk>�y��K�l��^�9�	7N��7�*o.��>��ƺf��9��DWK
�5v�P2ݳ����B�UZ��:�
�ѐr�Jr��"
�0�[́��P�Bs�g��������
�i��*ED������sOV�x�����0�?�p�1Ƨ��5��	���؛
��~m{��0.�8�,y�]�.qIP�vP����=7O�"槵�����i��d�^,w��E�S��
"�X��5��jW����-rbd<�
)ϣ ���D^p}Z&qs�b��>�h�E�kM/���M��:np!���	fqYؗu61�g\
-�&�@vČb����M��s)�(��Yf��I���$���j�A,��Vf�%��ա���<Jb�i���rg�o���[
��q���wMğ|^���
�;���5�>
�fy��,J
ڪչ:�5�
��
��� �d7x��
a��?�j)%�P�*[�����[��g�iZ�� d�
��5�h���.2�V9-
�j���S_�s��ٚX�,2:�Eg
��.7�:�-M[bn��������\��(,�<���Y��8R���������<�
>o}��]�	�z��F�Av��<^!W�c�t(�(��W^/}c��I�)1�
�eu5n]
͡�
->|��;Z�h���(>�8IO�
�e9f1��z&�a�MA��
g��$Y��bˌ��$ff���D���OO)pih��3�ؽAx�\����6�߻}�7��FM���PmyԼ�P�
���ZR�s�&~wq��&l�8�&�8�||��"��#9�)A&���ܶ�B�XŨ��"i�'��f	�
5
X`V����:�4�*LS�' k������-��S��#��Ta����?6Y��k,�GE.�J���zrQp��!�g
���>h9��Yk~��R�렮�
�\�M%�
�k��#�g�	����O���(E���_-��,��Rӏ����5�q؃���K��w�E� �?t���V�� 5ŧmi:245u�r���5T~W֒|�:S��h�^�a��γ $���?s
q��ĸd���q����G^��|����[��s\H�z�C-ݯdA�rr�K�O3MA#����B�9��46����^.�I)�{c���᪇�V���u
Ө������;3
�c��ɽT/�
�.��k
��[�Zۂ��4��U��?�iED�t-/��M-��,+��8Qw��"~ڬ�?^5mW�Ҷ�n"�6��mJZ�[C+vk(v����$t
c�]l��!m���#
�a�G9^g�| o�V�L�"
�X䢿��6������K�9.
03�������q(�//QJ����o`�산�4��
4���ll�[A�z�q���N��
�҄fp �%+�TK�)���y^�u�=s�G��F1%�p�U�5Lz�5Xf��G���4"�K�G8d�j����R5���Z唆���u<�u�
ٛ�F�wW]6��^^y�e#��V9�Q%~���%۷($�f�z5�t�<�bM�
Ԡc�]�T��`=�CV�f�5�7��7���tJqɎ9f�Cɫ�ϱ����p{��i��U
-b��?��bZ!�x��3����4--`�MX�i��[�5��7��Cn-0*�f��[�(�㐀�R䙃�}4`r}*L��X�]P�
�ϡ=�'��-S�
_蹾y�3�<"pf���ILKs�E�#Cs��)�v�[��;�,X�"���r�
���~8+B��[f��i�g��*b�_KC���c�b��\��D�C�46�d��)�§z5���Y�Qs<JZY at W���.�
�Z�)���Wf�P�/�Q?���k2|j|�[��:�1+?/
�A=�TR���緔
��1�#�A��
-l�c��;Z5~�my�e_�f���8u��,���tjqY;ӈ�;��H��G�ύz��7��mz5�_o���%�����p�
%�6�O>^b�>�6t(^A��մ�?��M�v@��}�<�Iɩޘ�%�䔂�>h�s��Ƿ�F����;��Q��
��x��8T`���q	6%��d��������Tx(%�{tԪ�uƳ���zp13��w
*"��}ݣ��t+p�GzV��u�eT| ���rc���ƠADܓ�5��0IN��0����	�S
�5��C�g�}�����+.9>�.'g8���KB������7[�n�G�,5P�V4Ѭ�&�].B9e�2�
)�%�� =ϰJh���j8�"�Cˆڕud����6/�JiهRB����I��v�����rvaa�Q�c���	���4IJ�
���
���R�O���:�YJ�2M�R
J.̩y �ٮ���:�|�9�}
-8
r� t�lr��*n�C�.��Ӳ�2J�]N���EX��A��r���l��]0��޴����!
���,੝Yv�R!< ��-gT�CoG a�����,jy���������	��طX�r����t��u4�@+��ɥ|�hh���+=��6	���F�k\�]Z��<Yr�2	�)h�Cg
��jk9^-q� �~Yɥ���I��{}�{���?o��ܳI�yN���8@�n�=����y�%cV��\�������`�=�x�[��MR^�zoͣ��ܓ�zQ`�O��JC5�t�t�
�h��
m{
-j��U��V%����q���c
0�2
��W|Mќyfg��]n��zs�(�����Znp��
<������%|�yr��Y�vEM�F�SM+	��U��0��U���~5��8v����Ɇ�{��#�~|˔r�e��]fa��,	��	R�S�����:|�����J�,!i_LJ8��f�W�ؿ,��?�Y,�<2;�e&CG��ؤ�@��s0'!��1�,�'���+0ɦ)�����_� 
r~�m��g�AG��^���u�H*��J.��N�
�lq�V�x����W��
-,R�]ƭ�ϳK��W������D�.�ꭸg�F'��L���A{�-�6Y�
��	0�|2!�2����E.�.���[v�5�,�x
��@�-Y���׾�\�u�/��9穥�bB�����ذjo�]`���o��0;�B�AP�t�q�m�1!M-ο��`�c�nM�g��ֿ�ݢ��T�ܠ�R
rO�[�(Z��jD�,�a�`
a]
�#��4l��
-�8��S�`A
������k{���)��WUt\�`����ģeN
`��\�#

▱�Lc�؏z>��n�Ľȥ�#

J��

���x����!���Z�~W>O�z�ҭ7�w�Ĵ�
a�,���xp���ч
-W4��fƝ���)^�-��,F�5
�^@�����p�l
E�2F��9)���1>�$�E�B����*�����" ks/p�6�̷���x��剞�j��>:�8\
n�a��ך�-s��
��Z-�����[��	��9D�QB�V[ށ��<���~�|����	.s��(l�� l�����
�Z�μ����o�O?��;�֓u>�㖨�x�ǵɰ�K]�7�:K/
J�7�ܹ��+{��)G�
��\�_�t�_F�^�d
2�sr/�#�`�zZ���V���R�e����8�d	�_d���/��v:�:[�y�^}��OI�x6�2C�rH)�_��5~mM�CVq�6}�x�[|�1��J����,�3��
����2����"��̂�.�CqMb`�Z�a����h��`�rܡ�#Yu8�$;{��hJ?g+
s��3�Ӥ
��W�/�El�k+�b
ԫ`ì3�����[���൐.]-�`��u0�.��������+_6yt�t�4*���}���גO�k���|�9V�C� �,��B���01�e�g�y\(�9�0�E���(E$����Wҋ\���aD��0��q
��#�Bj�2AJ����
���*qi>6٭@�Y�U	�B�C������l�f_�e����2�lb|�_�\�;��]���,-˳�X�^l}�Yj}�1��,RB��ۂ��}��~
�d�������Yy�9Q�}��b

s���.�Y~�O���ӫo!�SԴ���� �{5
�i
�ť{4�|��T`W�
��z�o���$�f��	�'���5�пȧ{�4�OM*�h��.�x����z����
��ׄ�O��Oū	��� XW���3���� Gk|�i�Q�d��t`g��PW�]�
-��
�ph
���Z�s��^��]ru�
�o]S���;[���6i��67���f9�
�ݦw�%
�2K��
�G.u^��Jr) ��
�ș��_7���7���4�k�䞺.��k���=��
�;�
-�h�KC-�j) ��Z`y6�8���H�q�R�k���a�O�s�K�c��92��\rJ�k�Ux��"O�B�W�*;ұa>�"�c"�9X��Y�ӱ�
��د`< C9U\��$������s������:�&i�G
���<��&ѣ�I1��\����X�Y�^%�3!>!c�����W%��@�:�
Jޥn`x�u$�F@�h at n60�\�m��
-X6h`�|Zi��-�xs(���G ���=�9_��;\t�7�w'Xo�'M�͖wV

�w�Zx�
��5C�q�`l$�$\�_%"{5��-bj�y
��^pa�u���SjZ�h�_
�!�1˯
-�j�
z8��Z}���Jgگ^%
v����h��έaB�
-
֧o���8�S����(��R� =���	�چ�^�t.4�=����w�(9�yp��
�e���?JOv��֘Ĭ����
����Q�Ã1z�y�[斲��r.�(����G�{�B�	��8,�<��s*iE�e&�Ö����û� 8yp�x��$�t�YBJ��qi���?6��ϠoNV���:�����/������e.���^b����
-�d����f��

��FsgpE�,q�'�
j��!�Ǻ�Y��ՏN@�X��	�IL��
�ܯ�R�ܨk��}�Ȁ�3ϐs7��q�x���ˮ� @6�v)��x�m�y�yF�u
-��,6�(F�{���P~�C�� �vF�1�c���yV��P��ԺOG��h��@|^��}Y�N�����3\yco��m��qP������}�	�l��ǫ
�d]�,,�-EGy�ظ��^t�� ���:vep·�Ê��3!n6ťf�;�"�[�ı�7Ӽ**��c]@�]
-f�O�,�9�c����n�ι4�y�oCS�)��
4�	�X��]e�c�ئ���Ir���܋&�Y��h�<�  8�d�K=^2+\
Чr��^�7�s�ʲ����[���[~�dž����n��Z��Wxuk��M�=1P+O�oMY�<>��
 �5�����.�͍��+Gb�G�WS�LS���Ap�Ɖ�6yť�W�����?{��
�u
�����
�w����$�&p&�m@���E�	JT��)��` 
Q


-��f9v
'�m)�U,J")��D��DQ�(����|�xo��Ϝ2"fh@g�,���ޫ���~�ى������ś
�/�pq#�߁��6��k{�[/��]|zSǔO^���#�L�Ήw�˻{�.�}�v=���־��A��ڀ�]�l����oj_�{ꑵ��
{�^ux��+��oX=�o�l��]ܼػ�wɴ
-g�/k�|]w���+�Nn|.j˳=G״�`��&�垟L��=?��m����?��}�
��_�we��?�����~н�؛

�74]ܳz���+�?�%�=�^;�����|�֡ޥ��]����������@�~��/^���uj�ӝv�
��k����/_��OV��A�
�ҳ[�O�:�|���=-gvt� [��3�:�^;�o��~O���
.l�N=��{�X���/�|�̖��~3k�ᗧ����>8�������~z~��/
Z:�޲��<����w�z���������ꕝ�s/��^rqwW��&�����v�����1��w��o�53��n}���̄��O���k��ղ��W�<�-?���s�~�?=�?�>�����_'���z�_
Z����˯��I���K��ι������y�����}u�}'ַ�;��{��
�<�|�ھ��
;q�\���g�6��oE��=��}�o
r��4���
K
��eI�͝�OnZ:���5?���s���h
uonޱ��������^���ɍ��>{{�ÿ\<���K&�};��ǿ�Y�q����/MseO_ە�V?wa��/�ھ��؆���9K�z������?��b�u���o��ؼ"{j۪�K{W�_;��k�<O?�Zz�`;�߶xtɔ��e
8�!7���«�:g�ڐ���}��~��ߜX�л�����ۖ�
�w�'��x�%����1�_oy��Ϧ�����f�
�ul�k{�2g��g~��yu��q̅͋&\��:�Ļ����}ʙ��9g7�l=��Gϟ���t�����쉿Z�k��翝cb��
���l��㣟��3��ז�>��Y��;
�K���⮶'.�h����{O�����{�w{�w�ǿm���[�
g1��0f�����[z��g~|i�@���K\�?�;�����ƥ�N�k�t���q��4?|e!{�г�v��?����ܓ��t>yqW>}yW~��7����|������]�y���?��پ}��Lx�7
�/�<��ٝ [...]
7�tϻ������ަ+{��\���ֶGO��臗v����s6��+`��֟�b
���YTw�O���o���r�.�.��K_�ٻ���65�z�|�������ܤ�k
��oz�
��
��9�i���������s�z���/����3���}�naֹ��s�>{dα7��w���u��.z���za�s?>�����k�����ş��t�ŭ���[��}���u��S�Z.�]��=��Ɩ�Nmh�p��^��1
�<���w���8�nϓ���7��ީ�GF
����N��?y�0�[�b�w���N��o��ӛ�<vlm˃�~O�ߚy������W�����RօwsS���si�Ϟ�:�����~p�?RΑW����m��m�SN��rt
��6�=��g�go����9��y
�u-��_��q`i��-M���6�����v�g��y��_lX���K��W��9ϼ�+;��{����
��
���[��K��Nn��;�&e
��;�!�xe�������Á�O��w~����>>
|��������^w��9^�vӶ����<n�/f���͏���'��X�}���
yiֽ'ߞ�=�
���7{��g~~e�ț
��ֵ<zvG���|�

���o���g���O=x��+�7Z~nWς���-7>�_y�@���֩v�N9�;�tbOo��ξ���rO~�V���W3�������Ks'
���.�AYx��7�8�;�w�w�8�깫�Z���}�ݶ	7v/M}�����
����YtbKG���+Z�X�t+�S����_޿�kۦ�<�[t}ߒ{�}�����7u4^ܔ�}y�@�ܺ%O|����}�����X���ǯ����x��՗w�,��y�{����ޙ����[��g�����[�m+<u� ����Y�r��4�N�C'�w<zz�ҙ���̃�������̦�I�_^����_���re���]�<�ov����ǿ�r��`�.���S���9Ή
�R���}q�꾋;�]��[K'�
�s��@��������� �,z�҅��v�~bM���7{����ꓗ�^FosǓ���dP?^����ٛ�N��6\�ݛ����	}�k��c�?U>��
`߀_�qrӊ��o.}샗�'}���g���;��y�����N���5
��ۺf�۱���5K&�Z�t��-��7�5}��f���^�b�w�f��O �/��.:�N�C����������=]���-������,|h�O�|�Я���{V�]zoY�����緶>
-sz��
-��qᗠ'��}����g
~5���Z�ll~�¶E�|w�������y��-���l�
���ɭ�SNlnm8��s���K�_:��.�S;>�Ż
���
-ٛ�_x����q������^��6���θ��/&�
���}jc����h�O��x����Z���[��:>ymW�S�vt�;�>��kf8���~�Ԗ��W�[��������=�a�Nmn�|u>}l����3��j�yq_������K�sW`M��X��̖���
-}`+��y�s�̓
sNl�x��7�<prC�Sv�������zp��$����eǟ��9	���K��:���|��楳n�x�p}�@�-�
a�s.�hi���釟����.�~:�q��/��
?�����C���s���呮���;f[����E���wO?��ѩ�폝~�y��_L���+���/g�
��S�¸w���ї>��ѹ�Kg]��9�����ٍ3�{z�"�Ԇܤ�[�5��
�Jn��7�~o˳����_�s�m��
�pE����E�N�~`y�ھ��
[Z=���������m�Ϯ]�|v�
g�/o;�:u]��K��2Wv=�,�J-��,2O�m
wjC��[������V��U���{�λ�o��+�
�}m[~�
퍟�~ݺ%�����Uw��\?Xh��AO��ݳ�n*̹���-m�~�ۙ�pikK�
X�������/v��nν������?y#�詍��>z+?��k�Ή���x���/���ၾ[{�΀<9�nW��ͫ{��|f�G�is6�������ؒ�ꮧ{�X���ށ���Zǽ��<��I��;�f����O}��ks�w��E�_ݳ��K~�����S;
G9ru{ς���>}�����/����7O��{ h��]˻Oll��)�vt�<�����W��%�6�~�6�pq���ݽ�_���
{z[����g~(�k��9�l٭�������M�'o�=��,y����m=�/��O��C����8�ry��	�j�_��RJ?��oə
�
���xw�#�~������>��Ҏ|�??Z������{�|�)p�@_����{�7{��ֿ��
O���s��
�����֑e�Nll~�����K���n
����{��;Zgm
��d������6wM���g̯{������
�n}Phwҕ]�~�����/����������ֶ��Ǝ��7v�̿�'�������v�>zew��Kۛ
���k֑ߵ����3Nozq����/���|�CmSOn[`��ש�>�zv��
��~�J���������P��&�_���-�}��g�\�����u���Z���k�E��/li�p���?;�ˇ��1^ؑ
-kP1���Ή���
}�}��ϧ�ߏ��^������Ӿ�ɚG����e˯
�:�n��/M���ic.m�M��sE���+{On[:����
��������ɹ]��ckf�s�7�jO����ꮕ�[����}͗��5�����I�]��Ï~��M����?~��>	6̭�K��
���Ύ)7�����g�X�|��;�f������?��������ŧ��=~�?~�ꌿ�❔v��[{W�ܿ<bӒ�>y��9�}��ꞁ%�wu�:�����מ��ȫ���<�6�ց
�j~
��O��vnS�S���-��
d���I�w�ݿt���+�n
X1p��g�<|fk�K��[o��r�*�����|���q�{9�����ǿxk����S���W��{�@O��|���U�\>0�}�۟�=���+�����W�x
l��֧�?��ɽ�ce��=���,���_�x�<���G+�;�y��
�4��g�������ܳ;Z&�|Z����m7?[�ܲ����{�o�}�go<��5�O�|����n~�ܿ� [...]
�����7gR��\s���+�0����Ύ.�S

+�m�-dzpm`]���lGs>Ӆ��=�U(�
�),�u�G״1���7�+��txnWk�ҾTG/_۟m.����T']
C�W��1j�d[�
-e��.r�rMK2���\oW3�o|n�\[����BO�X��rT�=�h\Gw[j�^.��f�r��!G�|:\V��,�j<�� 
���[-b�Лo���t�3�N�Z�l��
���kV��4�z2��3K{a�'��]C�aWnz![H���X���3�
���e�!�P��ZWo�t!�Wf�[�
1d�rq�gzz;�����r$�W
]���Kk��R��(S��|���u�v
B�A��9�M���ә��Tw[6]>Z`5
H
6�"&��L>U���Ƨxð1OC��;ד-T�;wc
d%�;��&dZj�&.`�a���%���L\��$.ఈɖ|
-l�ɹl�(sˎ�$>`u��e���L|��L|�\�&>`�Zts���`4R|@p��g�2
��R͹�Q�!���A��Q�"�"%�}��Ѧ��A��`�V���Sh���˦p@�B����B�����ɦ�����h`��D����ᐋ��O�˂\KKO�08A�b��\��j.Sy��BK5��^�ʖ�ݙtoG*��@w�+�U>��o
zۼR$r]=��
 Y�qȑ,����7ߒJgd�m��nJ���
�ʔ�Ahk���tR�P9������o4Z4��UB�|�H�T�]�O�ӱ��X>
��^	.U�F[����w����v+	0ݝXef�ԉ�R0�<���
՞}�P�$�tX�i�N�R�P1�T�<(�9j/���@�l=�>H�!��9
����p��3AWG?�05�
,60�4N�r�(��a@$���:3��y目BG�]yH�b�8L�9)�o��L�<��R�8����#)<�z���
U��7k�IC.�1>��,/;^^�Vc�G��Fd��W��e�������| [...]
-�ۨ�iwV"ӆz��6���)�
5�����H�e�c4RX~����
e�f#�G@,T��m�w;(��z�u;h*��)��l�F�f�]�Ȅʶ"
�
��ꋾF��i*��F�+����P��N5����2
�3
�t%q���C�䴲�Dw�d��aSG�=�
�t�3�U���
y:�3�*;�<|�
-�E���W#E�k����W=�\��[�������r�X�
��qR��^�Q�B�lw|���1�v{��}�C��Z����⮖lGG%�k
ռ�-�\g����C�D��f����k�awJW&Uvq|:Ց��+��9p���6t���R �
�|Eҟ�z�l���|��S
|���S�l/b�~2��L
#w
C꣫l��J�{;{�	���z�
�\�rn�g(`Q�:57g
پ
-Vɿa�<�TW����K{TFv��:7)��2?/=��f��h��D�����t�U63��W����\������{K��™�+�)����Fr�L����(������pf�(��+�)�jO�$�3I�L���W8S���vQ>�
g�oJ�L�k9R,�]8S�rT��u�3�cT��^�Ό���)���N+�!ô�#�Ya�v�b��~%#g-��8�w
��e��M��-�*�/}M6y�LC����,iT�Y�>C�%b�=O"�ʒo�7Y���|"���ȷ%�
� 1��V��-���H�D�U.��-�n�tK��h�n��Ѣʒ�Lȕ��7/K�0QL�|���l�&J�(�!Z���.6c��UPo�c�Ͳo�i[S����
�e�*ۏ9��`>әl���IS~'�����Ӎ�\��'���;�I��k�ty:,i�r{􆳉K��9Ӓ��� �ugR�	���
C/�k��B��-�W�����w�9�P;�6$�l���*�Qx�dS'������T��(��
-gp�}|E\T�R.������y4�w�5��`s?�m
j�F�\��Z�v�Pv(��|Lڇ��C��dよ�#D�U��.q�����ü8���a��`����*ÀH*�-�uf
-�o�tU:r�wā�.�;G�N��I��T�����I�9�?
2�9"I��6�?'��$�<�M�h����>KrεI�9�9�yfi��’�s�s
J�T���[@�O��|��+7g[Zz{2
�.�Żʗ���Eh�-_�ꖄU���e::r��bӑmm+������l̢�
9��
F�J����e�Z��(
�%G�&!�$��Q`��+��%q��ñ=6�5��t�C330ζ���es
���|�yl.��,�� ��f��eG�S˳���AN�
.��~���.�L�RQ (pǰE&d��oD�7̵3�Mi�*x2@����LTc��nP�l�7CҿR,+K�o
�j4GSh
-L��
�R�0�v�`N�I�9I0'	�$��$�3T�a膃92�C1�$�!�$��sFB0g8�0�wG{dj��FnhjTn����ڃC��'�9�tOq��U�\(�iBҚ��;CU��.��C����������gF��)�}��
�
-
rK���h����h����5��n�&�l���ѢBGN!@�ܗt���q
�FMW�oV��m��\�7�ܡ�q��0u��M�l�.N*�8��O��K���]�ZZz2$�|��")7R$C�d7�2���0J�)�d�(�Ωt;
ղ8C�
9�8qU���6�\:��6WP
'�
�@�Q>Fm�Jj��ˇ�2�&��w����R�[e�b�v�p���`R��X��X-�2	�'�N��n&�I���d���OvI��Z�p��b���?��Lj
-|�
�B����ј�nɧ҅T��\��m"|s�k��4����ew�iJ�d
�g��f���[ב��
���+����
�Bz�@j�Kūgd;*��g�#�eW�v�vN~� ��-CO�e�$G�KT>FI3���}В�u��]<��$ݤ�F*�&���ʷ���K�G/i�t7e~٧<r�;4�a@%�
�]�$���7�v�T���Q��k�ʽܤG�0�	��ڨ�B� ��
-���
,/*�E��
�h�cuס��Ǩ�B+�i����6�3�?�_vy�H
�#�����0���Xe>`%Ėx���x��K�&^���m�&^`��1j���[�Vv���
�N7��L���
L���
L���

:M֨s+�(qK`9�n��\��5�*_�U�X��/�LF�8*�#�])*�P�V�j��I�ѡ�*�k�����k0:,K5�{��L����
u]t%Ǟ�^��j7	Z:�C����o�H����2(םJg
�� ��SX�Q~�B^=l<��9�X��S���8+1�YQxx���.�
wUȏ��w�����8zz�-�tfz:U�.
-�4�q沭o>(�!�E'ӗo�G�^Y�U�|�{O������m�
�€�ו���Eor$+<n|���JOQ�}at�lu�Z��� �_?��k�ݝ)��T�
�1�x�8�nFw�Ԛ�%M�XIR�.u
��r�Q�ݑg��ߗL����@w�+S����z-$5֊����C��6�Cp���!��1����U#n�i�YO��t׌��RD�\�iTVY߁�v�;��ht&
-����U�\([˷��I{u#2Hz>��9
���Bײ}��A�
��>,�caj*;X
a�i���g�
a�2��T>[h��Tp�G�B��l�~5Z�|K�hu
-�jנ�/L�A�E��/
:�4��	U'�JV�et�U��Y��7��G��Ҩo�{G���BGS��{�_�����N�!�;S�{���^9�U����
^`5}�ZM�W�)m�V�TT��/ؑ�O*��Qp�B+c4�LZ�T=GՕ�T{O�!	�
1NSF�6ẻ�\d���Hm�q�V�)ˊ��j
�ǥ�1݋���*�Ō �I�T�>Ñ�Iz}�[�
|��jT�9-��#�|5D_�e�
����x$�<Em���}Ve���=����+=m�	�QGl�N�V�� ��	�
?����6~�
U�®
-3򩮞��O��
��],�
4�;n$ئ�\Cb�&��$r���j�q

�;�rbRz��1��Vc�=�k�
�j���B���E�s]S������3�ٮ�j&w�3L���e�M���{&f�M ���j���s��K����X2g��8|Y��Z�vR�Zm3^>��N�z���Za�k���v��7��|H���/�� ��++��U
ϔ�^�=�V�w\���-��k�t���
x�]oi����V/,��������
S|��Y�s�*۰��:���

��^���Ŭw4W���[��"Ds
׫m�7����j�z϶\x�n��� �6
|�^oZ�@���Ewz��2
�����#�׻�QǤ���8{z��؎�S�՛&N��5\�Vw�

u<˫�Utk
f�^��Sbh�cD��m�p�=ˀ��m	�4x� �������{����[`�p� _M��
�^���h�e���#N����pF�����k�� �l
��e�`�<

��A:��
C� p=Ǵux�C ��H#@L'ܥ;���q5���Z�2�Mn��yo2��q	}�n�5a=�z�6M
��ؖ�O14��+,���5�Qh���]\7��&�х��y0R�_N
���΃�hL~�.p��޶��DI�
s��	�HKX�3�&O
-�f����A/�
a��FԻ�i"2 at 6��=�� ��M�� 8 6~\\�
�S
Tlj�0h
�!H�@O�n0'�2C�s���� �4
��=�r�=)&&� ����p\�PX0�p�@Z@�4
x�@�C!W���,�h�̳IXV�@����l#Z �@~���!�V�Ejph��H8���': 3 �i�.��kjH@m<xXӢ瘶�8HN�q�*x�0Q*����<@���
�a���/
��pM�� /�Q��t��`��2�
P�&H|�� `ml�.s
�3��Ԗ@n�W�7Кp
Ӥ�螉��0�^
3��Q$�L�fٲd��ڃ$c�0�vI� =P"�%�d��ӄ�� a����
-nsqu4��d �D!����,�_�mV
��M�+
��Ip��,A:F���q�@��$J"I�
-70
�����
ԋ�Q�Y�,�q
-
I�������
���Z) 1���S/\\��隒����L�}@�627Ҋ�;�+�&��A����G���܀Sg��sl`�F����l��g���!��)
��a��#��@��.=5#�$��KįilD �pQ|x¦?�.R!6�Z
���%�jck��L�)���
4"tA��B-��
-
 OtI���n�t�FF@��� ��dX��
��[]����@�
s�S���
��I8&�
~�\��`V<b;�V��F��
��<
8<\#e�`���(�
-
� -T3����R̤�]Q�,M��G�ܣ	����xUQ���+�x�Q�2-)?Z
-]�:�巇��fL
�R��ж�"&9V� c�
-�PE�&@ 1MG0�d1M�����(xA��ՁFK

F`<D�$��c��!Rr���6��
-_�y4� I
��@�i���R3�����r���-�/�6
ݥY�M�eXd�����	&.!	�Ng��
-��
V4=��a9d5Z��&@&���לld	���� XP 1E�� �P�yV`8��Jw��8��R
��
���ހ�VѽG�4_��tP!q�&#�6`��
-
Sy���f��y"历N�i�T�|�x�0�.$��W���Ԁ6� X4�
4}��E�"����6�id�n+�Bg�@d�
�Rt^N��wDE�2Q����Ց�
[�
� ��EF"+4�P�����c I�9`�l�Q\{���R�s6��K�>X�N�
�
�3�f+�5荙d�Ā�8+R:�b2�D)� 4K`�l葝m�$� V%���<�k�w����bg����
���р-O(%�!��]dX��H~�JWc (Y�+�� �䰁�at&�~5��-%�i\I�0i.�.��e:
�@̓f�^z�Q���&�$�
,�c̀گ~:�
ɟ�7���Лtbi��M��„��k

=?���5�
��=��e."-y��V̓aÒ�<�3j����Fx�nG�@�=ƣYgZC+�U"�
%9�.\�$:c/@>'�բP :1���A5д�`�^�@ �`��X����:��0�4"F�4����<�Lk����,�` �[�N��[�6�7�i�?��X�ֈ��
-��	{�sC�y���
 nbi�uրM�҂�� ��u�l~ŸɼCiA�f�]�i@��$�!S��Fb��5X���ȿ��0��\&	GZ�ȉޘ��5
�;
()��u�����eط� ;�� �  .x�p�
�;I��_-�=D�F
�a
-��
]���w��q��z;�n2>Ċ�;��SGх
-C��u�#�
��
�D���{¢GE�3ah�N����	ۦ�]�F�A�Z
�Ԛ��]r�x�>4CN>
�j�J��C�lAQ�]x
	fQ��P�1�d�@ɀB��Ir��):�ZĞ(���)L�4� T-$��(nku�"Xx�D�J��¡�4�
�.�h,�t
�A�7:*}�
#
G´�n�.�����b���r�%I���S ���\
� ��;	x��`�{
�҅(r^#G9�wv�Q�	29t�
�Xl��\��i��@�#�{4`qΑUQ��R��6!X��$��m���%z���h�
��H�jb!�X�5
��d F#�'q�8�h�0�%��-5��]'�L�t���r!�כ[rY� �e�\p[yǚt�`9
���vI��>=P�/SmD~?�;��Fm���¥H��j$��5]��،�f5]S"
����ED��HŒL���
*�(��� ~?�L��P���&F�EY�X�{���?� 0�
|Z��
{i6:QU�.���
Kk��'�D"g ‘ 
-��slà�)�1��A
�Q45-\
R��QOCM��K�aþ�x<:��F�i���2P&	��콱y�bh	��!�a��=<��C�ķ�pt4`

j�T�`F
z�iTu(t��Z�V�Ê8�b�=��+{fc�pu,��X2�
���R�seP���{��^�&����$�\�A�b�"L*���h���M�)�I�4����oS�/�z~.<��b��6����˳b Yw��
��h��S�SM����R-2�F4~��D�JCE��9Ƥ����baB��R��`Rk
1!
-�kX	�+�6ƶ;�ȳ���p[j��0�`��{%%��%�1���G�dd���Q� �m �,
-d�C���\B�
���K�!�KHb`���*�"Es-�	���
���h�:,�,)x@(��F��pPn��[�\
�"R�x�&Ei�tG�ZTz��06Y�2_�f��2�&݂
G/�A��Z0�
]�Bu�'�]&�f`�)�x���r5�N��C�2�MD���B��6�<G��+��@�(�"���5)r�$��=U�Q�J0�H

!%D4Jq�%�2:
}5�rd�<Z��T��U,��WC�,:�$
��hP
-�pi^l
-�É����|v7mG�|U_MɬV<�I2�y�9-�@8N�*��U"ݓ�m8]eY�@��(-tZ8�ž��Zoӣ���Xɸ��A���F�9JXȔ@,�Ei�h�+�
�dsJg|�i�>
�h�R���̉Le�%��=?&��PR<Zb
��7`�BG�s�[Pt
^�H3�)���

-��<��-U���S���.'�V���2��DK��bd� L2�/X���yXe��&�?B�DIO�}�z��)�G�S�Q�(
-���h�rf����t.R�9LÙR�љ��^l�Ӹ���6,)�d
-�
?�;(��
�!2
GF1�H� �}9�&E)�z���m���U.w=?��#qy�$δ�:���mmq�@K&���� �?C��`���#u�K�S
�;(7,)dm��d8YA�f��±4N[� P��\&;.y�d�MF���2u�h�6�XM�1Oה���
F':M�S�u1ǹQ�K�'��(�E���g��D��W1���)����wcIR�>W4R�*����[��'�b�Ne
۠������<�CB
�m
-H3p��0'i4
-�Jm��|ij(A31�
-�^C	�aM�֣�"dm���5�
��,V��t��D;�掦�Ӕ����
�'}�[�,N�����!L*6P��P�u�������w�ڼhJ:]�[�S�%�-5�&�R@�BbJהȷ���G3�
%���
m_M�Dn,���D���u���+M�	` h�a��a���Y ��ғ�[�`�Ԥ �Eab
-x��ӕ���|	�<�
���?�#ަ���<
-�	� iIM�G�Y&� L/��D|(*KӇ0�����A���4��8R�k<e�>�c���f�p7�0:2��O1����WN2qzd!�k[�tM�r�h�C,���!�x���#	|����t�%����%�ƙ
�9��M�T��8'��x�t�g��tZ�.
 �LR(�b*�����a��#ߖ"���〷��
4
-�ˠ�#d�c�s9��W3Þ�-Z\�0��`�WCͣ##�h�iLZ��#����3�I� �]���`�h�cm2��&"�LJ/"��Ua�SgPe��8q��1)%� 9|��"��W�-ᩏ-Nt�Hy��� �&��IL$$/��"�\�z� l�Fk/Xg��3b��
�J1X��P�jf�/
-��T
ZU"
ҡ
-��,U
�@�V��L��G��4�:x��.k'�ǣucpx;F,��$#�0�5� �Vl��p���CP��T�a�h���`EI��$Rv�"!R�+ވx���Ò�IY��S�mV͑�f��P�A)K
�
���zǜ#i�Yl-h�l�B%W��
�zv�GȐS�c�ØG,N�"%88��(J��EJU���0"�}5�Z�X�E�ʀ�4;�.�k�m��={[���Z���(n�|/�E
-
fL44)wc�Hz

�
[�m��
 L���},�ñ)M�
-
����)ˌ��u"��D+����fr%,d8�B�:Ӟ�%R���%�R�X1Pd	o�7�
���#�C'�i��}��u��#�J�rx
b
]L� ��2W�D����l����M��%V)��yfnty��4	b���I�x%(��Kc���:Ub�]����)�&�:��%ͱ�
�B �~��f
�@l*! $Y-Vq�)]񆔘��XãclR�o�!_�~S�r�o��Kd�1
�xr̅b����dڦЯ�l���%S3�t9��St+V�C��H�O�0�d����2�
���6ȁ���Ô�9�>P�
-,�a�
���i��)�<�˦��n�����D'J=��Udӕ�!���
-���J�bP���4''9�,��Dz��гF�Zc�v(Kn3�b�E(��&�+��@#��66W�*�R(XG
#��������&C7݁1��}��68�qdG@���@��(]Sj�Q�¨c�}B���mq2�9 �`;G��<�~`�s��v�="u\}5�:�P�WTP�T��"*Or4?.1�Oh+!9��\� �
D49�0�T]fI��"|�)�_6`�dHZ�2���S8���"UeѢ�hYZ�j�
ڃ��%d|�n��+]S�,Z*,&k���E��v�9p�
��u�yWK���+�v�����<G�!�RX��3:��T�L�':ָ�z�6-]�^������XB�;8TJȅ(��
���V�"T"MJ�P�
�/V�F5)�j�h5[�ލ֑�$W�m4
�'҈4���ldG���e~���44J8OK�&
qM��l�.�Wok�V�����E/EC�
����4jU�b�pHCM ���W�=��`E=M%H�*7��Q#%K;Wp*
��
-
-)t�m�F���jbo�r�H�\Cl�nS���N	NKzt����#�d�KE0�R�D�B��!V���H�Ɋ�l�ZK�
P�X7�<�S�X�NNK.*=�9:��GA
)���(1�~&��$�L�kަ8ql�H������j�q
-_���p)Ά�[\�VUEj�v�n��.]/�+Q���»"u[�ʮX�Wˏ8�g���)����2�z
�)V����P1G�'V�#/\�(�H4�:x�M�?d� "�:�W���'\�+q)US�Z&^Q��Hה���W]D+3��C��%� ry�\8�O�D���h���V�$K�����E�sV��2�*�t<I
Kes� p��ig]�	,�dc�M�+��'J#	4�oF�l�Rq�49��dBɔC81!�m8wh�P�ۑd�Q|R�����s�<B<�KIĒ�@5���YȠ��b۔;�{��h at 81��
@ġ�<$]���'Cm��8i�"q���pȌnb�hI��N5��4�Q$�%h�F�"Q"�H��D(&
 ��(����.@)�P5���e�P�o�:���(�=�?�m1隨��QS�9�8�1/e�`�� �J�o �}Ht��nf�
��b(�c�]"�a®j��su���Z+a�!�YD
�4Y�H���X���Δɖ�Y����Q�6lՑ��J�jQj3Ft�Ft;Gh��9�� �����h�B��ڶD����#,i��L�H�
�
�' ��V �lKj�.B7��
���X-�Q�
��2h
 RRУ����X�jb2ǭ,܉C���,<�)t�
]T��#3+ؓ�vQй�u����k�}j���W�ȼ�J*�Z=�Ҹ
�+�JG���e���
-�H�6�x@���&�0�X�c�r�IcQb�I#�+�5��
��mTS�W�<ӈ�\y�4�6	��as����-F��ă�'��6
�:[tT���<?�9�ĩMs�
-
�$�D�e+N.^i"���Ti�v�~ƥ�j��x	�̧)�i at Z�8\�H&
<$�ɡ	��n�ӑIJ��\~��r�	��
��Ur�R�P��I�œ����{k�̖=�t�2�¦�1`���Ҧ��.�9N��PG��)�hKڒ~��� d:��i�5�)>@��tCPm��C>�+6���@(�y<>H
X='���juy��
]��֐��}>�'@
)\�� �i����2�e`�� �Y^dH�RO��	P�L��A~J�.w�f@�P��|����Niv(�%����>��i�*�8�����a��eX�l�A�4�7�W��o,�N�c�b{'Q{��Cɮ�ѿq5�?�)�E�%�T�.u���G��!
�ȥ�ԩ��e�`OР���gy��H.
-
�j� +p���zlc�M�zt�t�����gs�%��i�Ձ��h�n�m�ad�������oi,�n�PlF%����ة~�,L�=�aԈ���;eK� �C��[�e�
�%���U�� �d�\��X�e8�1p��)AR� ^
�����н�u���ʡ�;VH4h(\�UDi�*�a$U�IլFd��
ܨ��Y��Q�����{.:��H-�*�W�A��Ѓ S���*����i���x"� ��G�����U�,�$�-��Q &p��H=�1�B�N��h+ʉw8��"U�ū�KJ�oFai4���zAc��,F�U�ܴ
-3���y���%v����r%��j�D�xl������W4�xm#�#��!y�p��g�i�Ad+Ɛv`����]��������N��!��Ҁl��rOc�2!������{_� KI3u������d+ɓ��̚1���/�Z�Y4���)�M冧%Z�>���ۙ�J2͵S��L�n�Ad�WwGյp{T�}c�5�&{�*���	�=�p
����-R��.�|.�`����E�I+~%��rj	�=��k�7�|�3�
[�6׶�S��LW�����x8Gz�,a�v|+1$tp!���~�:B�N���ck�w�`�qDg�FB`�C����u���
�C�1���Cބ��_�����薇p�ǧ/�ll�`a>ͳ���(�ׄ�� Z�
-!#>�6pDw�6
�rС�i�(��oð"U�X�� �m����E6���`1٘ߎ���Y-��ŗyTA��3\-��Ǐ�r��%\y��R�m�#a���_w�!A��
z��y�Q!C2�`$Tw����Lg�Rp>_i�o
�̞u��g�bк2�BC�5l&T\xW+��Wqh]d��;y��!z`TL�
p#<*�*��L`��$е��0��Eh��Y`p»�;{��=:��z-�=��
V�P��U�J��E���t��ᠣo�@J�
0]x��w�.�]�v��6�1N�]_i���&�
-U_*����� ���Q�����7�k���R?�,Ω>gR��&�].����b�7.C��.zw]�W��Rk ���Gd	�/c:k�R���K����4x�s at Nak�[CMH��b�xs�7���L�h5r��"��vpYC�b
-�vU.i�V�4���Xc�<���Y�ѬWz`���1�J!^����Ew�<�W)�c���Yԅ�u\
����uϸ�tcj�P��

���
3��-ci�����:��t��t{��|VN�a���\:��S;-�.��Z;�:ʠU
e�����
�uK��j�\!������TT O�	���
�
@
��
��Ժ�c��4�D�|H#A��CB豖U|l@cQ 5���4x���
Yr�c��G�W�E�yE�+���y���-HM�JU�5��<�̅A=�uS�D��P�Q�����
���ċ�aq�B
���=�2�Y��,�q�M��{t���_Vѐ�b�Z�BK�>��^fX�!��ãV4dwy�-Ą�Ix�
��a��lL��`�	'b}}
��/�
@�V��)�C	��!��o8��6U��4)L�����B�Q����E���g���p� ‘	+��
,���6������Ue�An��F~�=�.��U�\��jI��/
X���{�]]��	�F�pR�fwj
�e���ଋIκ�X�x޻cŒB�.����F�)L3Z1E4xl�?�mL
��1��r�8Z� �n�j:d��Q����cRP7#�6���O�Ei����"��B���!
ܠ�<�H'�t^�n}�Sd�8!��F@	�-S�'I �ڞ� t4��XW`�x���� T��?��P��@�FA��B�NO��K[5��+9 �F��4f��:���yh�NL 
��=
���K��t_ы���vh
1�[� ����d�Y�A��Vw�����e��r]�����]bO�v��gR��Wq�
j�c�5S�R�f�^0ܯ �֥*,��6_�]Ф}�7vlޅG���^Tǁ�Wh�r-�5��,ڮj`�'���7�Cǐ�P�	���X�M�ij�/\��a<���v���!AM�p�)�B��Q[����2jI�8�e �Sp0�ž��(~&������ݑ��=ot�y��8�݂f�5y�o�ARa�4v��M�t��G�
���P�*<=��.i��q\�Ϋ���6a�i�Q�Q$��Os1�l��m@�#4�!e:��ε�r���{&\q����b�fJ���ܤ%��Z��q:��m����Bp�F�{[(�	
-A��tx,<���92h
#ԇQȒ�w��{��"OoKug�wd�����
���u�_yI�G���X�I�B�mFn|�%�W��
+\��
�ǏK�{;��
-)
^���zó��,��Jn:�Ơ�k]:A�GhR[%�ˍ�ro&�&�w8dN�6��wM{�;�����v$$
endstream
endobj
121 0 obj
<</Length 65536>>stream
-	W6����t���O��:l@��9X�LMu�O�Kv�X`+F�k�-	k����t~N��A�`gdګ�[t��r�V|l-�]�M�,��?qRh�>� G�m��*.���
�Ⴁ;�ַ�&��nV�sn��
���t<Q��v\����
-g�� ���J��
-^�X���R�6�c̊�u�cA���,j�D-�pו�%�/��w?<٣6���3�.l�Cem���j��P2)�-��U�v�|:!N�\uԦEr�cɝ���r�k*����O:��*�Ä�L�

�������R9��!ۻ.��q��$l`�o�!��4P
. 5#瞫�s��Ľ�x��@q��3e/34�A	n��{�t�b.k�h�puKX�y�� Bw]�&(�q��g�Em�a�bژ��VL�N{r,��tK�yY��7,!��
-�t�#���lB�e�td-N#6�Ɖ�
o�Q�mn�"%o�U
��[mM�z��,�
��(FC�
Tj�;AgR�M)��_41(
\��^�|PW6����t�!�=�79�����R�q��s�3�X:�7�����"R���Վ�)S�$I���
-��7�괈�LWV��,��v<�dL�:c���iO���p�'ֽ��&�9M��%�<fQWM�t>PM�ۍi�La�����C�Hȉ�e�ZĞp����@,�)��`
I5�>DžBYl�Vw���<>�
�h	��
O��'y���j
O�ĺ�%k��0��m�|5
!�
ͤM
�q�,
'��s\����Y��]��<D�ֹ뀆U�(���'�l����l�����Ҝ�'d���I�O�
�u�B�ݻ����X����"V�mn+���,8m�)��{�(�/��1�B�1<�G����p+pt%q[
-�%l!�np�o�`T
Gh��.�.�5���n��K���!1�Kt����y�C�C����� ��<�m�ڎq� �t>b���1%�a9���H�[tF���0��I��i��=�
�a��A�#�Mc��Q��F:t��6��{q��GF�R�Ig�Q�[�D"�5�c�KF�iѦJ
��:�8��
-n(���G��&K�'
��4�#���J0ϡ�i��.MD�P�-R��ˠv5� ܳ
7�bwY؆]� ȴH���Q'�������[�t�i I���)e�cbf���H�$Kǒ�
-۔��BY�f8�Q3�]"t��grDZeQ�A��x��0�8��
:��Q
�"u���� 
�J	�o����ͽ:v/���Pr�Rqyz�w>��}(A
)dn.(����R&J|��m�mD�՞���Ɵv�"b�N��V
�'���TҩR�o�S�*bԀ�����`�7�w�`l
�Z�ތos�-�ɖ]3>i�fb����ZR�nAB��PuҖ���u���ǩ���N����.�`�Q�H�I?�n�.6
�>�K
G����:�G�mz���n�5$���iC5�etL�ȅҮ�9�4+=>F���=n�L穒rF��]�N)��;s;@>����#��
����
nN#�p�B�_*HmH�h��fz�T���a
����T��4��|����f�rv�S:���dH�
C�n�%�B"D�J�-ѤAe�>��2O~o<�n�DT:Z��ܒ
\
-:��R�)�aE�L��<.��!����*��# T�w:׆�R6�'-S6V�j�i4O��c�/O�sR���f
<7�#��19RS
l��I���e#2��qP�y��N���c�I�8N͑�[p�h8cז�4��)ƚ勸
���II��숏��U2�fwė�bY�RϥF��&O]����ܷ�f�8b�,dqWH<���>A6+b��6�a�#Z�ޱ}�)�E$A���&��j�
��p�!�U�\t�YV��sVǾl���=��f#?h�:K�:�ԇY\��;h�X.my���:�C�~Ԓ��6����i��O�6nR� V
Vö�^�]�[|P�
%���@�@L`�=ż3�LV��n�`P�s�ܚ =
-6�p��&�L�a��Ŷ8 :'�bM6E�
�UB�Ѵ≲�Pt,�+O�#{�3����iQ
/`�
FBE�G�j�뒍��T
[q�p c��˚�.[��z��B�g�O��A�o�|
j�Nm�,�A��t�N
��,1��$}����U��,��;"F-�T�t��c��L�Υ��=l,�q��x%S#��e�E5HW�T�jI��ϧgJt
�
�W�&2�Yʠ.-|j��;�a�1T���(���
��
��h��t���喋�dp�j��Ⱦ�P��R�{O
&���>��݅\8��@�
dWH�Y�_eC~K`=j�������B����jљ�����
#&D����8B:�������擄LG������������c�q[�O�Ř$�a�Vg��y$�u��U
�D
�<>�|�z��K���ż�
-k��!
��(.�ɖhg
�m�Rᰗ�A
�R&[ph�#����1�ĝRN*6�qؙy��̬�U�'�γ���
�W�f�Kv���Ի|���jP�)��3�t&��
�qS�jr�i\&�K!ze�b��ѻt>�J
�yo�	�(����*N��V��e�ImN,�#
-�8�܄�f#��$��tɚ�6
�7(�!��,
l^�w`x
f���5Ec�C�����t��
-ק�2
O��z�ԞN+���2�s�^d(���eԫ��ŒM���Qy
7s�UfO��cn�"c����c{b�����A���Z
-����Mq|tS��uˊͫ��.7���S�_�N��lg�T���v�=��B[�W7�#��̿7�������ִZ��is�����+��X�Z���J��Z��y�`�=�<M�,Ә�L�R�gB�أ��
~eת��:����:=�O]����O�
_��S]
?X�~]�:��
z0��`u_�itA���6����?X�~�����`�
��(.^�i��:��m�
-��zq�sB���O-�[q��Y�/�?����0����;�o�?��'
-Bu��'	/�M>�2��
˟�
�`:M
~���z�{D��2��\��;}AO`W�`RA�נc�'dZԿ�^(
y���FE"DG��6�ܮ���C���@-�BQ$o���j�:L��l	!�N�B�I�	�V�w�E��ڡ�My �1-y����k�
-9R�.F�m�|N)��� �A�[�S����
�a��N�g�:�!���hO��u���qs-�R:MF��ZX��\G�(���|.)c����%Bh��� �Bdk��<�B
��@�bTa��[�+%n0&�kIz�H���N�p-�!��rru ��k!t#������J��ɬ�C�
�q"�H�ia#hƞ�Δ��6�v�A&w�[}�m�W�yϮY/�*Lj�FY�"�&�Na
�nu� O>H���7�Þ��_�P��:�-,y��`MR�[��B�0ԒZD�f�:M��T,�Hh���+��n��͖ v�Hq\��bFWc���*�� �A>�"z
�>�O�ӗ����jk��V�T�4�d��Ds�I�� .z��^KxꝦ\�Őn��$�ʌj�/Ӹ/��
�?I��_j�Sn˧I W�� "H%7p��� ������\�b,��<>HQ�N��Β+C�љȩusU
�K"�cst��
^�6	�(�$o�@��l�a�An��/5�z�p�$`�r�� [...]
WW� �E��8YF���+��R�*t���:�|*h�q�n�fqf[J�P�7�d�P�"ж�ږ3D1K~��+�	�9aZ�k�ţ�;�p瓅�+���18��!��|I[�%�X|;�(q� n*(S��I��������Q����Ҥ��WH��率�z�Y�Q~��m*/24�1�D@��v	QeZR�g��
͝ɌR:$�h�ؖ\3ӷP%si�l�$�z�,r��'��@"`T*�";|�f��_��Vj<@�<%5�&W܄���`q���"�o����4�jSVc�+
�
-)	-e�+H{f�	�
-�L�F2vTv�\�d&e���O*� 3�|Xht����
��K4'�c�R
KM'$�e�<�" H,EM�OyQ�A�V
-��‡I��4
��SJ9`��PA�ir�w@��DI
�:�眠N6��&|3�����@#恉���a��5L��C?l�4*K�m5e�َoHI���
-�z
-|��;��*~�
�v��:+)��
56��A\�����xfP@�خƷ�
}L ;	�P>Ps]���Q*$�R�x�8�

��
�-A�U����(�";x�":��AXT
|

�Y�gIFlJG$�W ���՝�aj.M:�-<妬�
,��E��4�
t�}
-��َY�Ldظ���}�@��+ 3;�}R�t
�(rȊD���[�G@�TJ�X)
 ٺ��,5$|�7� �L
-Mrp
�d��#W�tdJ(���Q�A����ǻH	I>Ė�W�	A=�	
%���VBV��"(0)E�?yT�b��#KA�K��Т�y>ȗ�v�Lt��H
�lIW���r�@�rB�V�
x�H\3#H|�aY9nhJ�����}I�UԴ�ç�	dhk�
/l ���,��rqC��!/׌)�z �z-;�DOEg���F��	�S��"П;�����
.�?6�\�W���)�{��hc
�'
�D�E9QlR��h
�s
ԫ��4|��jYw��+~�
E[l�X��3xf��0��1U3~��Θ|�3���
v�G��*LΥTqT���1� ���\>|��Ʀln���a(�A��i�B�fdݚ���	��$M hZ��:C
�'m�DH1S�������TGPѳ*����2S��p�W�1E���Q�+ U�gM�Y�|��S
-䯋�E����D�)�]������/�J� ����D
�49�b��
~�J�(?A2Qc��q�f1���y����N�r�U
-F�O�n���1|
�C��D
-~%As5��3<9L��|P�8���An W �\
=� 2�n��)�jdu9U�F��$S0;�>Hy�^�2>(�A~�ɥ��D�b2x *S��ubp�L�2��gj��b�~�Ɣ�7��_��sYE���^��D�)�Kq�4�
-��
-���F�c�
�����-��OԘj�]?Q�n��b1���	 U�Ƭ7�ٵT*�} �]7 �<y��l
��C �(���D���1�V: j�=J���s~|�$��
`�\L��>�:��0�t.H�
�OC��q��4'�d:2��
�ȹ��KVVHej�b��z*Scɜ����KMĺ�?^�g�ė��%�l�)��t�j�t��u&
L� _pSE+#���P2)<Gq���f(�)�P��Ɂbf#FH:
&8X
-��
-$8�@J�	�B�+;L�-�
-�krۇHph����	�ZD��V��f����ݬ�2

�'G��7Y[j�ty�R=�p
@�PJ &N|���z�cH=�ХWA.�۳"#aB:k
-$�dS��ݫ(��r�UdJ"[��lU�d9���R�D<J�`�)C�A�����p�	�R>8j�h�
��`��+�@4��s���P��
�84_ s
��1x/Wk^�oB�]����$�
!�T���
E�
-�L��Ht� �x1ܤ+Q[Lr�E	�|!�.$�6��ߐ�d��-R�d��d!�Rf9
>R�@2�`
�b�N��u�*=bH U6�g@AʙR�x�<9�4��o5��*K�88.�"l��=P��;]ey'�[D����ƀ�	�/�4R�`4Q�`?ρ^K����}�<G�(X�<�!��m�D����C��
��}����L�
�X��@��� ������mS��.�s��Jt(H0��Ô}ǕCфo�<4Gio��L�mZ?Lʉ���[y���G�\��06�z-�5�
-�w�ûNH�
�Q]ar���J���
$:��`����4]�b�C�ƐJT{��S���Ք���>�x���*�Y6y	�ނ
1
�dC�z
2:
�|�@�A،i,֤3
��1d��������WӸ�(I�/��(�j�a��Mك�0ٰ�����M�=T�&9�
A��,��S|b�|��&>�wV�ϋ��)㡛�
S~��7�vCN�@
��ѐ!S�FL�{`�"�g��@��1*�0�'���	p��`���s�
-����Sؓ7KΛ#�E�t���1E'B|Af� B��r��h��ӇE�*���Cq��g6�5(չ=}��J^��<F�R�E��SĴo'x�Ku/�Wp=
%�:!7
�~^�B��r�>P�\�
��8/MS^LX�I
--������V�\k���p���0���a�JS�|z *�

L�zM iY�аFn�2�u�̲d/i�m�u+ ���f��u�����8�@o5�N=�����=��-q�P��U�(����E�=q͋��!�"
�)���r�#׷�`;���6��z�l
�D �����,��-@��V�2�N7B$���b
��z��0�aXMN�O�ś�����A��������R��� (8E�-g��]	���xfD��q�W��Lh
�

r�[[~���g�ɳ�wx��!-�C�*��-,ٜ��S�I/*� �WPA�Td�L �
v�ҕ�D��7PQ}Z�
%�d-Y���>�5�%��C7s* ` �YJC��OF��Q
-�8S�4�ؖi,��E`Q;�� =r�t�j�1"B]�mM
-�bh�Sb�m!�ІTY���4��'�R�
T
-58���)��	]
�?�&v��6�fDnv1�
~��H���=��!�&,�X �����X�V)�`�,�~	��ڋZA��E����b�"�by�I�%�T���� )0���uI��?�a�
G
�;ņ���A�ҴocAV�>�tUq&��!���Ĉ��ss������-MG��ټ8)A��ƮZ1 �d�|6��V��
��C�opS� �R�����'%�	��z�X�	-�!�%S1���E{�@>CEh
 �;]l��h!:�J��T�z1���Q��(B
-�"�tuxN�����>�J�	W�UO3��7�M�C+�P\ي.LP
����kF
H}EĠ������0>
O�Ŭ�),8��b�z
-��9	}A�
�&8���:Ʀ�
��9!�$� �A�0(�"
-�Q`P����_�.�4�[c���X��6�ո�����(�V��CX��aŊ;�U��CX��aŊ;�U��#|���.�V��aŊ;�+�V��aE�;�-�@?�+Kpq�(n�UEŠw�Dq��b�
Šw��(a��aŊ;�+�V���u���hqUX��aŊ;�+�V��aŊ;�+�V��aŊ;�+�V���u\�!�Xq��Jw+V�!�Xq�0Kw3Z�!�hq�0Kw3V�!�Xq����Lw3V�!��peq�0c�
Œw�Dq�{bB"�2c�
Œw3V�!�Xq���o��븸Ï	�yŒw3V�!�hq�0Kw3V�!�Xq�oM��aƊ;�pt�*j*�f��a���}�BkG������l����{�4�r�7\��>�?��i�p��&�d�����9���h$�F���!H�;i�s� }p���
���G��s�k��s� }p���
��ŹC�7�;��s� oq���
����C�� [...]
-��5
e���,�O�]�m�΂�Ew��
��ҭ;�E.��,t�ή�TwvuAu獡Pu�1dS'vL�Q�Qw���hlCwv��ԝ
kc�ή���Y�ԝͲ��
iǩ;��
��Y�����,�tg�z�ҝ�pCw��kCwFզ�
��3�J��
Etg�ܺ3n-��l��H��;o�H��;c�n����;�4ܺ3N֭;���,�Н
(6ug�R���c�L�ٱ���l9tgM0�X��y�
-����nt�D���1
ԝ]��:�
'v��q�֝q%ܺ����tg��ZS�ԝ7���.�1�ǍB�ɼ����[S���m���Qf��zr}Н
���ԝ]��ۦ��XU�>�?��$A�dS��,��;�e��Nݙ��D�v�Gd�����6����1
D��f���B�8�!*ԋ��
r��jZz�̘/�z3�căP�/�h�bEfMt�r��
pl�]AP1�
�)E�"k���2�p!��n^
�E���(�d�&�4g��L��[o6U ��ϫ&
O���<�H�Qd2�f��h��2�����ټ0�EKo�Y�h�u"�	�j3�� o��X��h��2�IYz3Қ��l6DKm�i�,��f���b�s]��/Zj3)�ښ�6��a"j�y5hb�T��ݩ�P���'

��]P��Ѓ�ai͊ɜDK�T�{V�Ӛ�"��5;
-M�Y�^��j�B_�A�QKkV ���Қ��`K
V�;3/�n2u�bߡ]�t�:�~���Қ�"��'Km�Y�*�����я�YfZ�6���(�R�e�$�,�Yf2�.��]��Ak�]d>��p����қe�[�"غc�X pSm�Y(?�Xj���T��-�]�5C�l\NM�e�,�YQ �f�2�J��.u��Tf����Q�U)�
���
-9sd4b�f�b>��
�bna'
f�֘Ƭ0��k�@�ч�1+D��TM��Qdk�V�hj�
-3��c�b�O"厬�$��mj̊�
��	;��1����n	ex�Ųi�<�8��Q�-�Y6���Ƽy�~Ԙ%�i�
.�:��Jt��q�#s���<o[R�
0�#=#-=�&�r�l��Rw�'��
�
-o��
-J��3�
`ɻ�=����xOֱc����
.�v���s�|R��ΐO��N,j��y	���1��c�YdΟ�3�_���t�69���ڼxg� ��F[�V8���M}��m�t[�Uz�ĩ䙅v�'v9B>)
G�����fM���}��M�%�˽�����N2۽�g��p��M
9����Z�>��x�"�{�]h��Q��
�u��\�u��nm�:�fs�B��a��2}茊\������!�xw�'�@q~t���e�g�'���������$NwYd��ʖ�n���ݡ�,I�

��❱�L�;W�'͔��X�!&��P?��̒@��`"�3����O����RL����"IY�6���@M��"dE��
�W,B��5����uc���e���o��U,�:�-ܻ[���a�65�o�U��
M	�ĵ÷�gg�K"�UAwm)���[
-�A�Kͪr���e��T�7��lo�B�
p�w
ϳ��1�Ұ��
3Y9O
�û�.rz�Y��w
/s�O�"��`�i�F�
-w�ӹ-9N�4lǖ���
����sT��Z<;�m{�N�'���R�+���t���0�ѹN�f�@`W��X�ـ�m҈� 3�8�DqF6�]�.q\X���՘}A`uj[�
�3���ulK�Ştmi�"���ͫ�˳ %�
^a��yA@� 9�,b���
EN1�.4�	�1[��M��!��)�X
}��s8�8p�
��®-�(t^�k;��
�:�ѯ���v�â�TB3X)�s
���E�
��äk�l��]�0�څ��(�ƉrI��ِ�Y�GWdTL.㒧YR4�0na�i��M��P`ۦK��9v�`j���/�d��oSq��Q�.ru�Bk�i2�m��frk�QW�M	�-���.

+�|pV����
��'�HP���A&��%��(T�]����r��
�Y�$n����.��E�م?��}p!4�5K�����ֽ��
��q�\f�#A�W��Zl5h
kV�
o�f�0"�s���.]
��,�0�,d����k��\�"�ŲekIyQ�<nRr��I��h�8
-���u�9��w���"m����
"A1�������z�]^v��q8iQ4-Ծj�Z�4V)-�в4���ے��-���8�
�;�����F�mt�s���n���M<�)����r ����=� ~!�R�e��1�I���N"���La
-�DV���7�k���
}�ơ�ۯ���AFVA0/�!�#��rNd%n<������h���7ѯ�<��N�N��\O���*3р��&=(tz[
-!v�9cg��B��3
� ����9��cd5�v�F`
��Q�6J��:1�$�ы�s���nH��ǨvM���Po6��RM�R�"+2�j$,���JH���L�B��h
e�9l+2m��b7���q�L�YE��[��%d��|j�F�lMB�置����k���Ê�N���&��tԝM_�	9AE��i��07
-Y�M{D`�Q4׸E���v n*"@�>�4Q#IHfXs9�jR �[]�2��2�M��^q0�7邥}qєu�:iJ4
R�u�
�M��yA�n�t)�;j=
�b�ؓ��lq���W�L�!ɼ�APVg���
k����.��h�n��P9�T퀶��Jf
F#{�h�$&H�I�T
����� �
$��L3U�9�����n�i.��7�42����xZ�˦'�ı#�s�
��0&�E-4\9F��LU�*s�
v�u�@���!f��8�Dk��g���y���}��4���*R�wuz� �HV^-�SE��Z�����OB��0'��	��$A b���n"Becqb��ЄLʂ�Y'}���m�����
-�nN���lT$�6��
O	
-�^�jM�k��ę\
�
�=l���aBIv3W�
-���
��͒e�-���y$O~�%X�%3�"K�V��B,�<Y0�"��L�H>����
^f�C�/���ۑǔ䤜�4x�5
�p��1�������?��3\�+���,m%*<�J,��y��ɲ�/��Qr7��d�N�}D�',p�_�٦�/s��=�!�1ȵ�S��m�1V���l|�s��gÜ��.�t��SX3e�N�}�=Teq�ӟl���
n�e�_���/y>��f�-����e�_=��-u�k&ǻ���e☪q��8�9�j��dǽ�l�wQ9���A-
� ��J�� �$6kyܹ�[*��
t��{ p��5v�&��D�q�e�ue����%]c��=�`�*�(�LU����Z w��ʤw�l�
 \�e������e�>��?B
?�2

�j��G�£�]��W���<�q�C������M@��l:���
�v�x6:g�듣�&
.*�X]�Q͇R�a��
-���m�β��ⵏ��� �1�͋2�!�]�d
0�C2)W��c�&a�UxY-|l�:�-U�R?��V�c��jW�F0EYMQe��~,u
�۪H[�؂��~��߃�@���+~׮�Q��s4��4|�2ꖞ�[�
����o����j�6�J�T���Q>6���>ْ'��ͿE���w[v�y�oٔ���O�`�>� �|X�Ov�9iK�-{{+%R�Î����~���Lj��]�o?$����
����}���|>��g������Ъ��:��b�����7�))�=��t��GҼX�V�b��u>[�j�͍�焂Dg��f�퍍��h`,)瀒K�_�q�X<�U��Io6�ތ�(���['n
��*�H��q<YGA$��9p$�tU�T��=��>$��
绫��WR�ո^
��F��
��/7�� k���oG���Vs�G�p��t@���N��l�J�
2���Cژp!�k�����]�!�����N`~#?2�WR�7 ���3 �Ѫ�<ʞ[i
-�IP�"GWhV�r�E&� �����6�V
��N�t��D��=�D�h���v��@�X����&�CY9$�p��F�
��:{r�V����Hx��(E��H�w�<B	&
�K9���(�$�
-D���1!��fFK���
=�A?�N����d��
-s� ��k>��7A
-���Ɓ��

D�`�"̊��t�P�L�<M.�Q�}
���4��Ū�@(��u�Iթ��0�",&^�6Bp*�Z�!N�~
-�I�c
���
}�`�R�=9%���#
,t�DY�dz�
���0J�Ęp-��]���_0�-�#:����hŃw��[e��^e<s"'8�q�M����Q2�!i�8?�:D��gFp����
-��
�E	f*�i=�{��&�"
-"{����*Ǯ?�2��/0��Jf
n�$�%D!c�|���
-X�n��Y
-s�kd�p"Ǡ���	Z��$0�
\.ȚK�
�=]�
ت}�"��^TH
�b+������hZG 8
�A&RV ��BX���
�$x�J���v���Pg@,!#S�to����*&���Z�[IEf)?�6�"Һ BHFXh	�:�
����H�N�A�Y|�UtY��Z����<Oj��LD���,����o� C�l�t^���*��̜ś�r�+���	���){�*p
Ԯ�H�Wi
N�@�
0)]h%��T�82�=XS���I
��\W���d�20m�V2
�&+4ӧ
1�I
0)�&5T��'í�L�TC*�e�>b&MQF&��� �P�t��7�*u��tY�g. ]��Yh�
��dp���
h��z�ͅ�A�y����Xi�d�("٩:&؄�"��H��^e��W�xZ
-{D<fd��R�D�d
��
S�}ܠ\��6�
L/A���59�JdGs,�l>�#%4ͅl�zy��x�Ȣ:
���9d~�D������T�׊ Y�9ܟVP���ax8�LU >U���Q҈~8�@��6ӿ�
!Dp)$��S�&��
�k�H5#�Û3b7a�b�:����
-xbh�E"�
��S"|10�0d!
��
-RE_ B��
s�q�ro�1�@8�0S2��+h;4��$����0�����N�T�N*���S�Q��U�0;�HGN!�4�+T�i�	
1C?0(���� ����8�@�e�d�
�Y�F���$���4�x����2�BGހ)¡1
�(��� ��P/ .�1�d3�80*"f�ߢ��H����Qš�b ��,�B���C4
��&�C��e�Vi
-oEb�c�
�C�?�fD,���  �sT��ѣ�DEy2
-��p�C�U၀ 1$��:8��A(���{�A
-d�`�b�$�ƭV!�#nS���Q!
>t��$T�

P����� ���7a+��V1�#툣1
H%	�Y�8���4Li���9z���:�4�Z5��`� �b��P.��*D���J�OlV�����^����H�# G�i��ܨ��-a���
-�`f7�I$���7�H�mJ�h�;��1 �f�c�6WǪC�9J��@�l]88�t��T
:D��0j]Cj�"�¡lJT��	R`���.�M���D�%c�
-����`f7p&/�:"
:g0���4&h��d}���*�:9Fa/�D��T�
�=��cE�
-�#�q���
-.�9,�2� �!)T��
� %BJ
8��!17N�G����
��[��'�:ڮ��]����T5�����i$\P�T�C��ΐ
-�1,:�+���nt��u��[Fo�sB��,"�Q�P��N2�
�NC�h
}�
Ua��t

-��"
-���'��:����uUp�U�;����xx|���P��>�Ɛ%*��Pqh��jX�!*�O��T�)"
*ɰk�%�t0�����v���H!�
,�\$��o
�#
C�hH@
������{�A6�K��mt }Bh
x��i��|�Kd�
�
�mW�b�D����4K��b��
-J?����#��hЎ!k,�
-�<p������~n�0p�f
j
��(E�b(o�
^��
@d��U
h�tw�
dIR��e��C�8*�ʜ�Ԇ�'I�C
G��$1�
���R��*�kQ�����(Z��W�y��(R`�O
�DHfdWA��cb; :Ѹ�
��	�T���[
��י�5�*Դ�L5����^J�#�t�뉉�d��҇���L hB3���`�
���u�

-
eD:FU�[
�^5RCd�� -D���<}�
8
��d�����,���� �p����f	/��J�����
���d���
��x�Y�J�8!
-P��0��LuB
з�G�"a���\��C�Q���|�yF���y�2;�8ةh��M
-
p&������؜bh��y�����$�%Pg�Y�5skQ�
}�NH��MD�}�E�2V��\�
��A�j��������Y�0FQ� �V�_��hw���2
�0
Z�F%#$K��b-
��A�ȒF���\�h��\h
41�g]a�l���A�}
"a�?}G
ہ�6�͘o����g7���^G	���:;=D�:�onU*G�,V"�	в��d�ʘL���Vh�Q�
�
t�Q��~h�F�f`�(5�lnXłI"x
-�	a��I`ԥ�%y�F6�B�:�PM
J���73z��V�W�ΆA
-��̠ʱ0�<�G;���#�,�%T�e��$�k����4���
���N6�V `�d��TZ�c�a�ݡ��4$��d�i �N�����3i�ꎐ8Z���F��<�dٌ�)Ҡ� �&
�O��*��`�$�1:{�J(����
>UAv�bijx`��Hˠ	XO�~j;���uS�2
�&NE����v#�ӧ�D!�i�x��XA3�F�h
��aw��A�B�;�p��G at s���}
X;PT�7�44/�4
� -R��
-Y)���P�]���<�~4�c�:
�`" P��	ɄlK�r��h��E����&�#+,S����9�u6�S�s- H@)`�A!�x[�+1FY��cD�[RD�􇜔<"CYH�ATI`��1Nh�‹ �:��
L�O�<��*���Y�A�ϡ�Kc<
T
0��
���%gT�� Btf�T0v�@mo��
&!i��h��(M[G$
�囦
2a^�#��t�:>J�qQÿ�op��:����coi8j�(j(��%��͍7
%M0&�H���Y"�y&gY�H�8��q��<�<�(q��N'D��Z m�8E4j�ąҨ��2x����H,\��Kn���(
9?ڲ8<�?��?����� �fa��
6lȋ,!�s�?t�u�i��d�pw��a2Sy3����KT8d�;(7o��k"|{���%1m��)q�Z��NtB$F��� /`vv�	�)8���
dW��I��ˤc��u�yu��gY�S�
-�xD��G�

��j�„
-�lh��l>���G�YivV���
�Bͳ,�7i^��Jcjc�	�>=	dt��QF�'��Y`�
8��D0Cg,kA6���y|U�1_�R�#ݡ�C%
���o�WmqF�N9��D��E:A#:�e��<�v�rP�cP�z�R$n4.\Tz�r
hw`�	IX�@n���&���K!�p�4�S��Dob�m/v�����

lT�� ���KpEv&9Qu*� �A���!���cfrv�)�p
�
-�Wƛ2�KA�А
j
�v��
8j��,"�C9Q4���K��
H�
-Dz��Q��Ԛ��8SDR��Dx�98
'xYl3
����
-��������#
�́m
-3�croΐ
a��
E��.��o��0��<�'(㽂�F5�
�K���]C
o��x'�6�@�jp	ɘ�*`��&:�^n��%S8�| �	���S����R�2_7�F���*�;w�E$z�A�j^���
@�^U0���H��t
_��, at z�k������'�'^������U*Nh�]%p�B[/�
�@ƫjT.���*NT�#�A���"Pup��o
�w��S�
��#ZG
-=���
�**Ͷ�2I
�0<$�+�L
����]	��U&
T,Iq��x�Nf � 1��2� �
�n_��gP���}�?A�`�2���b
�Q��C%_Ь �4��%�퀐,��A
�2�w�
�@d9���
-&�B��#K%!���y��`�A�n)��+�P�p���5���i��A��p��&	�lp?��:�
-�B
-F	ܹ�F;X�H	�p@݂�f1An�Dj*EoQ��G
-�*��K��|�������"
��z�6�Lq�9D  �n�I{@�D4��,��6 5�d�"�j%z��9y���l��0#.Xd0i�A�^	���-�#
���
.p7M���z6	�,
�$�

�2���J�
�Zh0+�M�% 2���$��q͎.��x�huGGW�0
-jI#$&�
|
~Bj�dcT�`��t���p� �
�y�N�@?H�Tv C��7#�#sӀ&���nاLI�!��U 7
�Z>m�W��J0�/��Wd�?�'��ěgp��
�
,�Z�DLѥ�o`�. љ^ *��1 d�.���S��Qs��Q`!�1숀X@���׃Xd#�
�B�~��т
,A��a����+�h#•(ޤC�N���@��1$HPE�x"�a
p��	��SB ���vPCE�@%jE�.f�'B!�U�f£�_P1A>�dž�)�JI`�PP��N5^�2$(��
-�Lnp��p�j��)O��ԃw�:B��L+6�WE$$�/��V���a.N"�!�9Bd&�
�}`� >x�(�q0
Jd:Z����h9���d^���#��	�
f
.z"���~
���
�]QE�V��.J����/�܏?5du 鐣�$R��Q�ͩŗg�QMN�=��8T�������	,<(<2���?�,�
#0G1�7
%,�����8��*bR=\���2��� ��=
���B
����p=� ^�fA	
�@�G��cZ�`���
\��C
�A�;[�Q5�-e4?YR&zw���}����piC/t�D��@����d�\`l1�����
�E��N�u�L��8\5L4M��� �����J�ы�
6��)Q��o�281��}	���x&��	��p��'c���G�lv��-W^��j�%8�H�����Z�0�
��*�̢G
J���3T�+!�v ������ʥ�+*
p92�"��%��1
7:c��(`���y�/	�=d0HC
����(FÑl���l�k�ӟM��t�Y�s�3�

�[�����J�q �4�Ȑ8	���h���XN��Fș
�
��4�q~v
-�ii1��H�`��O���Na_4��4^�{�;��`�3<��z9����c����~�u���ˢ;��
�F�
�Ȟ�*� �?�<�
���u
7��c�B������MPl�
�主�F��D��������	��dŇ�^b��?�&�cOГ4����R|�
�r
h ߰	7X~67A�mk˘�&��ѝ���BT.
-��)m@�w`p�O�J��y��){��'�"*(�ED�≤;�ُck�F=�1:�*��;@3��A'ٝ��f�E����
?�����3c�������Z�
;&�9�<`��!�7#x��~�n�b�����?R��\�S
;
*��d�

o�.��^�?k��1Jb��dž�Gn�m܊���8'{#��'�O�݉1�(a��2�0�Z��1S��o�x�/�������d���n
��h�1L`Q���WhG�����s��,���/'�G��g�fm
 �N\�����A��~

�
��?:�B���ml,w����_S�A�Ld:#�D�@�N�p�����p����ј`
�		��

- at KT�c 'D!7F��(���-TW�����.G}� f��z����g;�p��Xmi��Z�ތ������HZt
-���U��ψ@8������S�8��A6
�� �
9Ov��E��Y�9x�P���x��yv<~GG )�yp\
����E�@
�I
��祱
-��?��I!C�WÔ�	��H��jϓ#d�I<��B�k���

͟��i?�tz�
�B����!
t9w�?Ts�¬�}�6�

D}��5�/ؘ�.�l=
!!���Q`�����T
-"��pa������Ř�ҙ����/�7q��Z�=B�~�P 2�`d�Z�#
�6�7�
�g�Ѩ���r�
�O����湀)���+��E�$��h����w"�v�N8��_����&�yxU�� ��W\R#���d�� 
lB��Z��շ��o-��l���g�h�O��'�8��T�����<n��!$���E�3���AqN�J��H�����	����)�:��ǖ��
oh1��V
ri	�'Y�Bx��^�o?��d��!F�_
B����?J�o[;��?n���:ƗS���M��lM���A���tE�tp�5���O��%����o�|w���҆pT�Tg3/�l
�K$��Y��<���@H���L���
�>E����C�d�a2
M�A����t5�ߪ	0{^���yYb��D7�{��_;����S
v��<T�i���i�^�r8��.
-��; ���;�w��
S�鰉��g�'��K�E�x�-
O�X,Gp�︊\/�R5
��0K��~�m�v�/X�8��x:p�a�
� ��E-�`�4ϔy�d�8
to���
<vD���feA
g������ˮA���^������:�
[���	x��sv��/��?I
�-��%a���9��)�w4�}l��1�8�MF�6�
2��z��G��_b��Ѵ4M�5�'$��~wl�:%c�7�l8?Z�&�_��j����(���fr���^�Vݕ�}�L�q~ר�]���jka<�ɑ��V���F�݆���0
�PW�J0����� ��
��
�]�2U�d����7�E>���y�]��
��������<�����ov.��!��'$��xU�%�� ��gg�L�H�_��Ҫ@�G]���~�ğ,�O�-<�0��^��no��!� ��<>�
�&�d(?�?�����
��PDHI
-
E�0J�
7lt��T��;�>��r[�\D�O�Y&g�Q����T�\��o.���i�R��K;��C#50X8も
�-@�|mB��3�w�� =������c_�&�BCO�'
������m7
�ߦa��&�V��
�t����`�^��2��,��lC�WN��q�������2�i\��>���5��� _S��O����u��-��b�<�?�U�V��5��E$�T<�h���_^k���
3l�iض-��{B��o(
?����#���x����t�'�n���<Ӂ
���@KD9 >���ۡQdy����������,�)�
��7����(�wA����B�~���YO�X���1
������O7DQ�Z_8Ǘ�o]���
�
�{�|��(s]�
�^����� �$J`�B�<Y�9Z��d��Y
�h_���
nu�����dk�"���
�"w�!����[�7�B/����
�Ny;��R�@�l�
M�j���SĨ��E�@`
�i�Lt����ݽ���6�
h�ٻ�T��4�`���q@�Tp�l(ޜg�	���������_8Jn@
-�=]�18�*�k怑��0"%qQ��C�[e�z�:fa��n���
-�� s\D'���,҃�����[�C"�JЪ$�}�6��X�3
����ΉC�T�((0�AA`����Ā
Õ,P
����&J�!�.���4�xEk�k�f�t_8�����*[/P�w����H����1��JA�v��'
��=&O�~����(.��RΘ��Z� ��I�u�⩾���6
���yF�;��zN�
�BG�i�^�p~���kBG_^ m��,V�!��My��f��
�ҋ��������5&�ӥ�p�L%P��Ls�)К�Lu�� �ep��G�
!~2z�
&|2z�
�2z�
�}2z~L�ީl�Wt1z���Ţ
��n� ꆠ��[����؆��8���Ɏ��>R�1�y�(�Eq�����:ʖ*��%���珄����)e���o��?ܱ�"4�G�.?�
����{���
�DSA3������
��"��h ;���z"�&�3=
�'�iwE�
� !��Hd����s���h5��AL�t D�z���7Ƣg,��̈́H���g����"&ǻ�.$�2c�)�N�[�\a60�~<������s��Z-F���L=�,��4����G��˜R3�����a����/����M�	�K4
-
��O������,]���ؙΦ�w f<���;0cB����ꍦ ���17B
UcU�I|{~N�?h��CL�_b��?�$s�C��\��F?�廷:���
�믗����d

�.�`��3�l��%�?}_T!&��f(�
�t�����i�o�%���U�!���$*�`���l��
0��7W����X��he�Aѥo�nh���=�3!���Y��M�7[�c(g<��D�
M�gj����
J�.\ �����^�߾g�����C��k��	� ��7wޯ��_��2��l��Q�7��9���!L�Uw@��t
�8�(���
�,6����0�!v��C{ci��y4^�h}�.���+뱱pr��#K��g!
-ɸ#�Uo�]
 8|�>
��X���:���Y�TX�ćT�̊2g�#9�R1ƵY��U�-G0~�*�#㾻
-����Ks��.W���&bэ��b6�,�.uơ�dA4+Ÿ�����Ƴ�G��E0�*�,ʟ��?�0M�
���6{񊨉�iK�u��t�U��@l$����X�_
O��u�I
F�no4
�~��y���;5��Ym�����io�u��x4��c�W2��ڬ��H��.W�"�
5V����o�û�1�'������̇`��q~�E���9�D����W
���=�yc9�Tp
��C��7vq���j�^}�gO���r��˺�bxJ��z�Fe��I��
2^������'g���JSo-�
�O�
��X]
�
41���b�<�h�$h\Z��5�
������0�R���?W@\t|�����F��K'�
uk�����<UOu=��{�v�S4i���
Fl�)�x
�'��#�X4�`��(���r>cm��9�yw0�h�;
�j^$퉬W3�������s�l�_�I���Mg��!��̤F��w�r9����� t�w�����43�_�:"ۥK֢.S, e��< K������x��+]��
�f�Fw:ZI
�s
{�}��U"
�@�0�!Ux�@�i��{T]�9 �
Bu�~�M���p����
h�{��6{U�I
"�|��Mp1c<N��2��?[IOƯU�?�2��$��z���{�M��oTA��|�?�fa�?����I
V�ԡ���Q�;?���Kө�TwE��ܬ�
�t�Z��L�t�	��\K���t^
-q!�!X�C$�
��C��'_
TE�jC�؂ٗ?��S�B�J�u
�d~60-"��$	iy�������#wS
BMw�yt�������,�ax���m�+"¹���|k��#���&PjF���4�0҈��^�eKV��BK���=ܠ�y�o	)_�3B[�~�^iI�T�+P��օm��
�aI�>����Ҿ E��
�G��շЉ�('6eM��/��F���g(H'�<��;Ux&�����]�uj?[����n&
-���51|����/�ʼnF��Տo/K�J��˩&�}#�N߀|o ��墾��7=�m֖#b��-��[x�Ǫ&��mkX�u�
�F�I��M���	>���z �Ϟ�C�F��S�	8�l��[��n|�4ȉ�����
n�:��
"����$��j
�Q[0؁���y���m3��ԙ&��x�݃���qz�j�ض�DEb`_,�a��e六
K�
w��)���>�M��
��	��1EF�
��!v����()��@����Y<��~��d�.�^h�^٭�����ρ�H�����C}��؇EG(T�>�>10����qwG�ټ�jў�
p�%eTߵ'��k9>�z�M,��3��@BP���
@Z�
��F��B/!"�������M���hn&��M�Psfx���חЗ��`~�`�ڄ�hf[߄���9.��q��Ϲ��O7��M�Q�lK�g�#�4�ο������2���|�wji>�&�"8������:��W�ғ�
|v$���}q
���Ϳ2'�u4}�}l�x7��NA��u�/��-Q���w �
S����1�
�w [��X�0����*4��(�|�<�~�� l���QܶFK2QK��*k,��	��
�
M���}��	P�~�)
9n�_�5��h`7���
-�݁�0�� +P�dl"���R���_�!��m�ހZl��x#�
�e�п
����]b�z�p���5�x��  ``A����o���_pX~��0X.��%�^��.����6Z�Z$Y
�o�'������(
-�
K&U}��:��Լڰ
x���F�'��_UC�����f�6��_mK��/�7�	��
���!0��Y6�O�c�s�'��}!D؀3��j��+��1�=���iГ�����Wc\2�~��͛F�ZEҞ3D+�X���_]O�J
�C���7����=�D���]�Z����B
��
�ywj���ȴdD��tZ��P
-|�ݝ
��՞/�۾�'�k�Qh��F���%n����z�w==�>-^���i��o��o���n�)��{t���������/�]��qD}x�?�K���E9͓�|�5w�6n`,�����߻'
���:+�����@�2�OE�
	�I�����$_����OR�6�ß;��$�I[�u��>���p�g��xp
-�<
_��ɘ�>
-.ZB�;)����i��i��࿓�燋+��|��ո��y�b�e�
-���/�ѣ2�4�:��\��~K?=\D��y��a� ��6A�����8��=�����>��
����
��_��y#��r_[�7���a�7�k���p�T���}��Z�
*��tt��Ϗ����K���
=P��Qi�
���S�N��掏��7So;|c�{$\>��ă��T�����-Y�w�i9))�$����������:�����Ӑ���t�gŗ��sE
������V�H��]^޷ή������[��:���H 7}����V4�.�c��{�-��Y�v�=�����%3�u�&Xּ7F&v�J��Z�J�����2��H'�-Dnw|�vA.�N���l]S�2�+p��Q0��H1>����wg�R˟
���w���
y��o_�U��q�z�ϼ�N;��ڤY�ճ�]#p�zk�=��z=������d+�5ۇ��}{/��j�}��-�Kݥ����A�oܷSO�5=�F���7M���]�
;�~�$?�����i7y��{����k��;0�;���%�DJ��` [...]
-_���(Rx��Z;�߮
���jb���C�JJF�.e��#��q�/*u�z�͵zW~P����V�^Qo���S�����G
�g�x��\-�yϧ�J��4/.��(�z�x��ub���c>t�\ߏDRW�h4�:?'<�s{�Ʈ�
-�
s���xߛ�z��Ĵ]�'
���M(>���f��T�<L����t}��gd�>3
-s\6ur��
���\;�
-����U�UW*���j��+�V��bk�VK�n!_z=Nʩ�l�rpu�WZ/�DU���Ց(��P����z;�5�QOh����lR�[�!q�z�_�������:�
�6��j�w������3�/��|�#<��������`�%zQ{�4n��`���k
B������'����)7H��>���x.$&ϙa��V��˰�y��
�ܼ4��}�h�^�f��[H��w��
=LB�~n2���i�%�θ�Pr6z\��y.s�
�:�!$�8Z�����[G��ߓw��^nV��y¨��֟
��"�-
C>�_�^{��Ӯ���^���tO���v|�	�
�4.{��}'�^5���
����F���-��˷‹�Q�p˲�m�\*
��uS��<r�W�=�ͼ�J�I�Uzq99ۿ��Y}�t��j䩔���ON�V`����_��=
��:��3!#�������L�^��]���/����e��U��o�̮�߽����&i?�kѳ�d$�(��c�3�W|�Z||7j$
-��j2|4�'����Mb��R��@�>؜��s��
_����dʃ�A�ϵo���5-�h�Fy�W���	ߢ�=�r���:(�
s�҉�JOó��u�<U^gҡJ��2�*g�Nu,��Z>�6�a�ީ?'�َ��*r�$R�m�S��.ǧ�Pn��
�;������N���w�
-w�.�T
"�I��������N�_�}:=
>v�
)����^6r��K��f��;���H����|��e��}��KN���ku8��/F����xu+����߲�ph|��Əe19������`Z>�3.��>�o��:1ˁ����g��CaqQ�S��Xa�@�9(�wS�^�۰������C�o?,������,��^���0F��᪭T���r=��'�#w8:��+��W���
-�=	{������:xadw��Q� �?>
-���������N_�ܤT0�앶'�CE�����Ӛ�E���a)�����{���{?U.
-g�;>�=�©��ES
'GGZ?�����t�߮�֗��3yR��=�����C���0�]j�Z�r�뎯2��x���_߽�u#z�v�\4s���b�=���E�����9�zs5K��ڋ�~�eAĦ��F�}�
:�a*��E�}�.r�r渪�d�'޳��V
-dG���\"m�w��X��C����|�Wx�����|�m�]�R�o\y?R?(��EE�_O+�`t\��yu��ۯ���R=
*f�Lc؈(�jc}^�7k�|�%-��[�Iy��
���'�sg�w��z�w������ٍx�I>�b����a��<>=�ҝD���8�V��3�Y72H�$�ۛ�����&������hݶ�=�=��'��,�S���K�-�ӝܨ</�_#{]����}���x�L���δy~���'{�y�T����Hq�2o�X\�s����y�0����/�J�� ���^����:����K>�9V��9K����ӄ�t�-}��4�L7�������u^靶��vOi/�����7�>�c�}�;ͶV�zz�J!��e�jB�$��+�_J�T�\
T#ia�9�>�g���H�3�r�b���EL������U��]煋b$�y�
���g���X��D

��.&5�l����w���-wjrV�F�pJ����絖>�?e�����p�?
��B��<��Oۇ�Z� [...]
-B.�<
-6*g!r��嫉/;-�%�E��"}9�Jf�w��o
��[��~N4�
�~r���7�bN�
-����S#wt
�f;u尠L�l��{��^��Ec?�=*�w���.���m(��e���t]
��e��d�e�u#p]�d��¥O>�*�r≐C���!���&'�^y7�+��\��e�o��q��?^d�'���|v}^�
}:�,�/��|b_�/
������8���i�43L�e��'_�V���ͳ�a���JH��~�8��
��v#�e����}���l^�gjw|CL��Od��݋������\��N�){�
^��?>��sE��ܽ��\�eQ��	�<�;�J���Ry~�I>�^�g���|+�ݕv��~޸W#��#����j�te�.֫L,����WwG���� ����‚�;���U&�^��>׏{��x=3:�rwW�|�1h�g���u"w�M܆��p��f��i3�w|���qp�X��w�}_v�)�����\��q9�d�c���_v|��:z���������YA���5�^�
��L��`������Ũ�X�F����+��7"�.\#���R��d>7��ϲw�RZ�󇓧�A�Y��y��\O�N|���o�
-���
��Y��?˗���l�3�]�'
-j��}�[
�3���I�����W��b+4�
��|�-φ-�Wη��b�����8�s��u��H��B;���Zm߳���N��Pa���;���_�m/��rO�r|oU�k�t~�[����C��	�s�V��
�g�S4����χa� g�����[�O����O�C��~�߿��_�b#�z\�N%�M���5��[����[�a�0�
'/Z����Y>q��X��U=��x�U�td�4M<�9�Ap��O�/��S.4�|2ν훇�s�(oD�>�#�{�N�7i�s/�y=ͭ��w����Ii0Ի�N�v
]_e��}�?
�zw�JA����Sg������A/X����]n������៤f�=8&����s�|2U{.T�٧	?
�����v�͗��i�$;
�'���C�㝞�-
ovv�6����Kۗ�Ye
+�r��x�����y��t�ߟ'.�[���V9��2���^(U��+�v���u#7�R��Z�V�	N�{��g�R�\[=���G��S82.OT5U�[� [...]
-z�;>�޿�f곛�B���m?����
=�2������o���i��M_��w^�J�c�O��VV��
-���]=|+�95�
bՇA7��+�����+�D��5��F�,#rŧT����w�E!�*	���W�z����c~
:�{:�y���<�V�۾�=�'��z���χ����6/L�����Kh,����Y�e#���0x�?L�ӧ�����P�-�jU���E�P2����?J꡸��
&�>멕��ayX������Лo�pّ��-Wt��b�'
��6,�B�y����ʅA���'�Zj���>�
�^t���hkh�(y���$/�����w��8*��)�U�ow�d{P

3��󭨴"�|������JUnkJ#1~�������{��>�{g���lܾ��Se~.>d�B.�����g�B��/��x{�-��Q�j����u��:7yz�|x9 I)uE��:o���i�<�:=Oy��V�!^��T��ϖo��lyK�6�I��*x���[-��G��:�}k^'k��*L��A�����n2���<{���"vה3ї�TJ�o���oo��5�����<p�>	�	��Z����y|�� [...]
-z&�Ͻŋd�޽�˷x��$ZR=>˾5nw�����fRUNWjF�{�,z��D9��[���k��oR�-���fPHܥ��I(�c�����&�µó�~I~\*J��U>���5Bc��հ
Z��1)V�u����������,
��ں+����(���B7���G�����s@?,�����A}\9e��J�l}2^jei�X�W�{;���������A��|�;/�f�|	�;��At^�����e��׹��U�Fu|�>-�:��^0S~�6�=	u��
�6���u�|�xHK��\k��ܑ�<Ż���Ӈ\���*�N#''���׊oO8,��㻳�[��'�3��{{V����=�ϋ�r.��V;��[��(Z
�	Y2|��f~x�-�G
j{�AB$'�[���]Z
CU�Ͽ�������1p�nk�S�����|�ʦU�b����^*���
�!�r�*LwW��l�9�>��yᲞ���z� ���x��a��
�VO�"��O3��A�r5�]=Y�gN��`{�w�^iO��ya [...]
�*R��;��?�BB(F0�|1W*T��f�y�5��l��*�޲7��yY�
-��
�ҟ����h�ʗ�8�l��>2��
���
-�ëʱ�;�ċ���$$<&E��b<>����`^i���V�;,wG'�����T�i��b�M�kf/��ߜ�5֢υ2GZ�8Tj�'9x}��=����rut�zύ�rV��
��/�����L�x�j�q���Ŏ����^� *��~9�[O��U����9�pP
ݿ���d�G
�|Vjy�e�Y~n
�����A�� ,�ٗF=��Q�H}|j7v�;{n7�痙J�4{*�q��i/�wo�ٻe���|��(�*����CS��OC�B���Rn���yee����Fd�jfS�r8�G��p�`�R�׊����yiz�����wѽ��Nʧ˛���j�t�O/�O��TH�(�g3o����S�U�Q��s�8A�,~�>�
cǣLd?r�.?���?��3{��rc��Wjc�z�^e���}�W�u�:�\���J��˶���Z��x�q�������a�T�h�nYc�4�g�1�=������]�`,up7$C	
��+�Ǘ�Y�{
��I��=�1}Ok���yC��U����YvY;
dN������}q_;�Uc��y�q�8�����]|Ld���H�k^
nj�\|�
-Q
.��/�|u$4.�@|+2����Y��{)ҩ��e���މ�"�B%������]��w�ʗF�Tm�a����ޠ.�
�kY�
���V�
���� ��z��潹{0X]�v�o�e~tTK���e,_�fG���N�
�; 9A"����y)��t��>�WM��g|7����O9���
ݽ��͛F1<����L�wyt��#"�C%LI���m�X��
흿f�/-C;����^�������cw���i�D��w�9y{:|J&9>�<��o�WDZ�y�'_Gbr��U;N�{�^Rz�Kɩ�<Qlf�_����[2U�>W
-���(���i&O�=^�_s;�D�Yˤ��`�v�׋����^��8Vl
>^��N���۰��,u���o�$��wF��j�8H�咪?sQMp�'^>�9ؕ�ǹH^z�N��7}��ȍ��8;��σ����UA>�&�ɞ�)ƣ1�apPJ$��k��U��ȱ�=M�4���U�߼Q�J(L·��,�m�v�-2��)��c��Z}̜�=	�|�V��

�W��J�8?
��O�;��w|_�xg��\;>VG/�z�q\8�xբ0�˵b!y�p�ǿ$���J3>zlOR�쩞�M�/g���<����B���|\i���ʵ�
eyF�Ҋ>���L�$5
՗Ń�]d6�_uZ�X�@<�ku���,
�T����z���>��ޣ��2�P�^o����e��<7��ݯ��0�z��7�l�Tl>%�O�k�Q=�=

��ҕU#>��O�n�@�8��ǻ�Q���ջ�����oO/^��^
[���E�/�ť��)�^�xzZ??xY
\�O/�ݗL~y���:��F�n	_�/I !@ �9�
�r����y�;?�
�޵��-�rSB���d]_���IH
-yjIF�ɔ� 
�B��>� �^]��;���}�A.F�������
-JO�"�G�W�E%[���WE�#bə�it�U�b�15�Z���d���
V
�Y�мA���A�o�Y��P
��J?|�?�{�⭔�¶��_��
�+왼�K���3
���x�ϛ���nzi���&��[�
o��eS�
-#�UN	�6����\�(�.��U�
�Y�.M�za6�[V��~o: ��(&�S$þ'�:o��w~A�_f�rH�O�eۗmf!)3�J���`8ߤt�b��7?
>�-u�[H�t��&7��¾A��-{��_�R�(����`)�\#�xxo�����c��$���֪�6@� 7 i?�zQ>Y��@�.BV���5E=��{ǂ>A[UkX�ukRRn�RU��L��]�2��ӄ�t���{�[�
������ݻ�Y�B~��K��6c�V
LV
˃5�YH�E!�ڽ��E���_K�2�xЖD�q;o���6�tw���Dӽ$�qx[���{�!r��>�F2���W�+�3x3o�C�v{Q�Գ1�RP��D��n,��,n]���FU�+�=�&x�v�3���/5���e�jf�A��e��3>&�X
w�I\!�7���r/c���kI���<a��ŷ�*���ED�-M�:�'��T/b��G�;��
���4iV:����j>����؎r{�f�E�����(qHH���N��9�C�,ib�]�Du|�
b���!	�/ �o��s5��}
L	
�	�w���+�4#�?������^�Q�S�]�G��ë�Fm3)�����tp�*��+̮}@5	��6�'�N�p�|w i�`m��
-�(����"�	�뾶I�sf�т�o/頾10���g$���m�n��O=]S8�*_.��ފ�%�����2��kc:�xg�D]�r7�
J�e�sqp��
-����[ޓ�F�
-쁕�n�a]ae��V"9/HX�UP)m�)��N�P':���s�3�#�bˑ��o��e�&�RqS��;Wb���e���u��
`e:X\ec�FY�e<)��6p����TeL�J�=��C0u��|��gb�ihlE!�����%Y�u�*A[;�A�Ũ<"T
yp')H?�b	/\�&Ok�,�1l��w�ط75�b�
�.�U�Q�r�w��Pz�5�����f�K�M��^��w�
-|ZZ��a����+�B�)4{f�G��&�} !�k��%�'l����iBP�I��-:�h
$Ȫ#�V���	�
.�=�Q���$�^,�%Y��>�7e)��>��d��%�Ҥ��ó�m�L!RK��dԕ~S-y�Vߐ�����HS��Y���pҸ2���]2F��$�uP��~�J��$0q#�� U��x
GL �7Wg#P"Ї�#z��F�T��p\,���
���)��z7.��6�~���C�
XR�v`�z O�� �t6<g�w�Y
-dTT4��SL��*���X�U�^�M��KA�W��4ɕ����#��lK��}C�2]j�A}#�i}r��O�N~���V�I�=��I���*]Kz�fk6�fi��j2�vB͂UkVNjC�`D.W�U�71��̪��UEY
-^���e/e��#T����N��Z����t�0�Tiu�oD���Y�l�'*�j�X��c}�=%�O>�O�ʓ�Fu6��z�Ri
�fjL��׫)YAg��D�
}
_��`_
�7��S6I���Z��^�P����*
-u�����`E�
j�-?��=>F^���J�,�s�{�k0[(8�J]a[�Xͥ���lu)~���6���6��|=�Q�^�ʪ���:�y����W��lN.ϸ؀7�܌u��+M۾n%��>���R�6�������=�Z}�Qh�_��(8�O�1W�
=Z��Z2'� ).N�X�>ٯڣf�:��u���=E}�*ZX�o�ξ@˯�9�H� ����E�Ȫ9��wg�ϻ�vl��I�L���*��qXH
-�-`��Ys�sZ�;���6m��
f;���r��B�=��.��J�z;*2z*-n��1�g�J��Er+���
��إf�����#�D��ꔴ=u
-��zKr7c$�G���b|��-�<v����w;��s͔�Cp���C
��Z���� 
�����oC�
�)4l��!
�(��U���E��N��a���|��R�
ߒF�f��j]
(<�3�Y����u��`PB�2�L[�v��#�b���ez��
��9xe%���zS6z�/uH��g�!Y˹�1ߏ�Ga`O7+ב����C$�N�$�=b���wB������d��
��A�f�d�3L�
�� �KǪ��F ���?�[QM����bޕOw���8�x�Tt�D�_Pj���0*�8��DM���d��ɢw���=�k��
-��>�
��O�P�{��_EVy��3���<W.����W_�4�7|N/��l�6g�>�F��~��
۴��"�j�V	sm&��@Յ�ڕ��
*
�O�ob/h?�`[(�����' ���	�C�F�hKl�N[��E3��N
I�Z���͉��;/�/�.}}��\�R͖M����n~�p�S#�
k�*w]nL�?�s�ɼK���
-�ӵ
BX�i$Sd��LM=��B�(͢�4��@�𡬠eXЅ�$��c|<��m�����A'���|��Im���
3����m�ȟ���ŀ5@���p,���t�W�q3ne����B�&l�@0�3v0^���?�"�?ҷ��
�r9I��C[\��
oM��+}����k���Pe�j����:�R��;7jtk�����tj�P7L�	t���<���m�
�j��A�;R��B�%��u���t�۲�}���45OF�%B�����R�F�e(vo��g�
����ݚ�"�MM���S���{���!�s�垠@���
-�	���e�Ⱥvr@��2�����͋C���
b��*+�������=,K�\�{��“�U�6;��^6���f~��
-�V�|�����+�~��d�B3�l�YE�[u��4%��S&wM4�@	h�<����5	�em��%.L��4�ΟEw�K�R��=�E�`�85�i�݅^#
-��ݓr�\}�3/^���?;���?��W~ k��N	[�^_� .}�<3�<�<Vr�җ��}�M�F
5]{�X_ʹ��Ȍ��n$J]:��Ըέ���a�b]u=�:���uw6x �������a���Ҙ��`���<���<,�
1�����=���;�=���
�,��

�
~N��Z�l�u��XK���f�t
�f��G6n�X�-���e'h%�l�}mo}ȼr�F��IO��Xȳ�}}�cH� ����U�N4��y�V���)h��
�
��Ճ���+�
-�$c;{�Ԙ-VT|���
�;�>�*����e�T�跒�|�fμ�|
/�Q��r�����:��@�쨱:���/
"�%4O+g�ѻ�fHլ?X,���
�����A��h8�ѽ�R˵�����ѯ�K�7��Ǯ]p�np
A�9
C߮����xL�l$�OO�Kv������w��׎B��ǁn'
'~�x��\o/��kr�Q���r�r�0SiN�n�{�J8�*�
��=z=-���N��S
9��B'
��
����S���
6�Wx\)�9B������'��t�V�j�g/���YA߀:)��)?/�k2�A�|�\5E�A�	����V�U���^]��=�ڊ�
u찲���O1h�PM-@��ʮ<��s;���4d6�;OL벵�;�����A�|L}\�:�_�5�n^m��5q���7�Jr��y�zA!*+�k̬\���N�;c�
�
�R�^�^����ö��	mV��~����h�,�v9��,��m��m�Zu��&]k }{�{g;3~c�
�s����ʹ��,ο{�͈��w�T�a��$��R{Sc�l��f�չ2l#i��{�l���
-m��FWm<��\=��M�Ԭ��s�ČK�9?�,&���}�K�_�_� �}�����h�� ��_�,�Ō��}a��(Y3"!�����A���T�SG���w�P7_1� ;%���({����j�[t���<��
��ֹ�Z�v�8���+��=|y�/��9v�*=��o^�A�}2=�f:.+V�k
��Kl�0g�uu4+̂�5=�
���s�!�T���
���l����Ih��F+9�r=��P?ߏp[�]���z1�
|���o��5ӳ^���筛���3:G�fD��
��0���s#�
-Iw�x
ʦ\��AӺ�[�lG*Xx���-ůZ]���A���Xm�ӷ�
��� ����u&�
'zeߥ�������[��vM.;=�%�����
$�� �oz=���.���{�%J�R}���=��
3)�tQZ�_]�w�i~Jk�������%T��eH�.\%i<�+:\��!bR�l�;0���$�Ge�oM~Tg֭��\�y��$�k�'����M�����N{��?�:E~���duii(ƵN|��1��|f�k
-J=zKbĘ[��ѢM�I�(s��.��s�Uj/w��H
����G�W
d+�J�y�1��j<Q�K���,�j�2s#��^����l�r�{��h˹0һuL�*��$�5�{��E����wJ�����Ν+�Z��{z�b�Q3���u;QWe�
Yf:�N̕����~D� �_���Am�l�3!}�3�o�����+��;��s�-�Yӵ��UTXq�W��L�
Ft��%w��<�f�6�X�69H�^���������x��Vt������� �
�病�>#,�R�3�������,tGևrw�W
(�|���-6��Q�t��"�.-�v�hQk2ξ�LI|�=���-������T�1��]�s$�V�q���'�p6����V�E�e�t�ب�d�Bz
����y
ꯠ��g�
a��@G���U�S- O�RD��x�;Tj;��O�t���#����z�]����N=���l	���j�
�`�#�:�.�vw��ٝ�"�
� 
���aŒ^[_��mQp�q�8�@!�(��E	�-��K�@AҪ�P
�<zL�
-��Q���:�f���ʖ�,ޠj�����]�^�ݐ^%%����X3�VyR�rM�7��s�:�V�胚�u�[��v����B�:�[���vi�bD
��![ߴ\W=��
-�F�>��y�z',��,���mQ����R|��J0�#Ӥ���� #���$� �m(��=���	��x�%�#��6ڜ����v]r]'�~x�������_��+-~�
-f.��|�*����j++�Rc�pI���
#�
���
�
=��-<���N�������#7������#�h^��b�M�X���a������*�0z{�����*
ߦG0�6�V!zp.0�Y>��`?$��Z���lv\�"�+i�~�r��ȓ���'>4�G���g���R���;�/��8w5:�F�P�k�a�r���I���-K�uxc�Ϥ{��t�Q�@�[�
Lx�=?�ut��U��l�Β
-��@��,ĭz""��˴�ҝ�l���6�,8V�
��6�����j�-�=it�*�&I����vj�pC�{I��y� �;J��Q�S�W�qI���I#���9�e�-l|we��
+
-�Q`[�S1BD�jT$hnl5�?����d��V�.n�+�zA�V�,��N,���J��N���>��|1����\�;Td�5G�!ds��[���P��V۔�>5Xs���,�sa��[�H���U/�b�u���~����M���6�v"�:���DS�=K�#���Kc�ݥ�~؈
-�m(�����Ѳ��r���P�FJs�F�Iy��݂�Y��$Eѯ��#�9d ����Do�~狳Y�O	ba^A���Z0�ǎ}w���=���X#A���'uʱ[�G��)�����Xt���v2�t�뢆4��=�>�/e�~��*�ܶ	U���C,6A�rM�PP��t�Ը[,�U`�E��|��dJ�-�)Q¤D��
U��c�����MU�w�X�4<Qy���S����%�=srTX�|��P�O�0	���l�M%�T�*AOdi�_v~5�����]��� *
-�rݔb�"B�|�����WU���(?�խȫ��,��2)���gV���%M~,T]=�QS{2.������·͚lV�V�,���p���
-��f�
-v����ry�{��
sؑ,�q��{f�-g��zf
<:����ӮX��[��Gy���p|H��dyRkj���ض���*����52����?Ka
�\���S�ɵ���$<��/'V���ط���������Y�Ε���-��tD�����+��������c
-_
�2}N���ޚy�ݶž�
-mE��op p]�֘::����f�>�b�Qs����������U�Uz~;2U��(kO����fR����۩���`�ʥ7�@�^�����9I��������(���̒�
y��C��
s���v4_���vr���.�5~��6,�>}�=��
���&���W5k���Q�WK	U�vX{
(Md�/^k�pҶ��+f"�Ҋ�|�u8�wM-������Ni�W4ɇ���ua4����&��{᠓��o�^��J�=J��׉o�VKG��V{�E�P��L*�W��=��
9���*fR�
�o�Rca���}�%Fbr���^�I��'�f���5
�)�-e���@F{x���z�J �'`�4���
�v�8=mc\lO]�>N�i���{3��1��T�HN��V,���|�PD��R�����
�?iT��R[
�5ݥc�7 "P�%�+6�v���U
��d �ׅ��J�@�YkR��U���%��by�59��rK+^�?4b��Lm~�u!:�+Gũ��DG��.~��JϟmXLe��	u·nA��i>�Ud/s����h	eփ�p���zЫ�g�Pwm�AG���}y��f���	�
�'�!�� '��_~���cĽn���;F�o��f�'�{��-z��w�g�ؚ���}̢y��oQ�C���M#�O�>�}C�@�G��xv�a'��9��~lr��Ֆu�-�/��h�ɝ`w0.�j{�j�<���&��6�[���+W��R��/,l
r�"�,�m�Zw�ke�=���t�=#o�2��?I��)�U
#�u�P
�׆r�Vj�|[��tt(��
	�@��2Q؊�^��Ѯ-����:�F�5��
XͲ������o
�=jI�V�k�
�Q�٦��m
n� [...]
yZ���ט峟�D�|�j�1i�Ҹm66�v�/��ћg6{O�S��P4�����1H�]�ެ5�}��G�j���9
-���-�zʉi\����G;�����k����k}�	�x j�pla;���FޘѠ��Q�JR�y��f�-63��"�Ʌ
-��_	����k����3؊O~2�
-�(¶�
>��&�?�ZŞ�M��п�׷6kQX��~<B��w5F�Tp��Sѭ�i�Lag��e�Z��ww�<�y�]@Im�e3�a�
g�
s->��������J�Z�|�bAZM��i}�R������
��vU��C
u;T��
0X᎗�j�_�6�`�p[We6�fr2b�gEJִ�V��=ذ��<V�=��kc�S��Vfv:�;4�S;z�\�[�舓:P�klR��ǵ�(�_/Ҫ8��������M��L�/!���5�'���C��!����
���4�os
��F������� N
��Wح-�����N��ݩ:.u�ю
hz�t� q �-�?_�7��
��+����ԛU7�HXOm���S�v��.�\�"h2,���mMo��B�����|
x��{��9�)p���+�)�I�8
'60^@? e��Y�
D��sҤ��N�>�džxL�
��.OR
��PǦ�;�նa5]��
�g9pe��s�a���5�V�]r�ޡ[�P����ϋ��r�[��
E��|�ϒr�}x/�"յ>�6�J-®�W
A��� �eg�s�d�ao)gy���ڍ,$�A17rV����Ƙ���;��^����]�r��;��ML��h���f�����B��M��.L��`
����b��R�휜�
�W��4+
��ej������ Ne!M%m/��� ��+���墴׮��s
}������Z��eϗ{�N��V���~�V��V�,���:����{��{���xKZ%#���3 J�^k��
Ő� �
�!%L+d5�D����w�MY��u{�,��ֶ=�ra�x�
'��"f�U\�>[��<���:���/��ux �T]�}��=U������4��[���}�K\~�.��h�}�
�%��i[AJ�l���õv�d��&�h;+�y���)�X�.��^oѪ�۞�.7��T���朋���<��1��C��Xs
f�K�`4��M3����	��a���p��A�.?��k��WQ� ����y
��� c�'���3%
�^�kS��嗱*���r�9�yy���U/�
ۇ!Է��KW�
ؿ�>_hJ%����u�-Q��
2��g�͆Q<>��B�H���d����������I=G�s��
k�X�nm��>C�J钰�(�Z�e�����W�ݭ��O�������ֶ�}�w���"��3%�����d�i]���uX��*
-��]� ��:�M�
="`�}60���?M�9�V�g���)
�O\�p��2��dC�4{

�LX5��xi�Y�
-���k,#��ۈpq�
:J�+��&��X�ň+��d�[n�����V�Jr�sk���骟���4�l.���ӣ��?�������G�
�*���l
�%��ix=
��ypv�����,��Ԯ*��Q����|��Bv��d4l�
�,kjZuJ_|n1����܏^%�,{bq��
���?���\��!M��ގNd6�VI��*�,�4;�0t�1��7�n$��'P��7�x�jA{=�c��n���:�F����Ip�r�w�#�o�ݷ|Q� ��c��!� �|x95(�)N�U0B�nɞu�i�D�p<�Ӎ�������"� �۰#Ssn�eS�ڔ ��쒣֠O���~��B����&͜C�q�U@��$�g�
����x�0K�B�2Q�7�%{̺�xX�'
����
j�e�7��G��+-���l�#�/Hjv`)����.F(�Jͫ_�}W��Y/��5���~@=*b���X��ҍ����Qs1��+;;,�&�]�Nmk(�B�rY�;��R.�D�-α�|��? ? ��3�(�IM��
a�C��35���óG��jIs���ڷ�+T�4O.���@n=��/d1�<',WX���ެ�wt⦗
�
-\�1�\���LXѭVK�E��D��89��ݨ�-k�\��6��0*���k�,�V!Ϝ�B�6��
3QZ���{`?S3r�9a��U����w/�4��ap�n��T�����%����d����˶.`��D����
�6��67��>�z���n-�/�p�\-3����`��pH���~��ۈ_��#�o�J�(0dT��ڣ���xTg��g��3΅s�u/O��krEW�W�7��뺕�FY��_x#��
��Wޭ�.�Y ��~;s��qƊ��.^��޲c���)�f*
-���̗�E
���v.
~F��!:am��0��
i��ߋ7��'�7(����������*Dw�qd�U�}��x���i�<�k�!G��k5��8r�λ��n���b{��e�ޚS���>'Q��xB���K�,����;f\�4�F�����bps4�!�0�8	��I������2���nwU*�ccM
y�
��r�
��M���1�/��U�jo3���W�Q�
f�����/q"q�YO���Mx���a�f>"h@
�7�)
�������h���V���*���{Y�q���D��殩
%cVTB��	�r�e����U�^t�]K�
!�
-
P%dL
��ly9�Q�ѿ�5V�����䚬�ic��1*�Vڝ�2�@0��ٰ�i�D���%*�7��v�{�x�G~����>��q���_y�gv����VG�{q��D<��
��w�L��e�
���e
��ďag^f�cn|���8��
���<Uǟ�dn���00�q|4h��=�p�T��oC$��ru9:�I���e�&ߩ��
n��a�}gvS ��N
-0<^�TV�C��
�s/���a܈\��bcIm?FL�r�=�nñ�n�]��_��}+O|�
xtl�e���
�
�s����۹5�$�e�n
\G)~‘��x�n�GQ�|p� |X�š]�������~q�
-�bN���Y��k+6T��}{/'��c
� ���{L���a5I��5ED���,�;^m<Cyp��,�[���}��3
���t�b�r�Qvy�|ry�-O���,�1Z%z�J����M�=����J������#EZ��V3
�E�$�dK�٬Q�	�.�l�.�6���~�T]�����rP�˜�F	�c.��@9��/q	���D�+l)<I���
-����١Ƌo88��C,qW���Ŗ>A�խ�5�
-�f}��.���\-A7���i�Q�%�䠙t�ܑ��J
�͞����u�2@��Ȑ�Wͳ9
� q3�=�#�X3��2ϭ�R�����
J�ǰ�$��%��L_�q0Q
�,QrdH�eke�ע{�wj�ٹn�^� ����r\��7� O������6"�T:Mn{��7��R����KN(���xq������坆�",�?
�%�)��j�x�NQx-���Ysp
G��R��^XH�No��vW1
�k��9���Zy�3�Ѿ�2c��MO�
�/uۀ'}kU5{*A��#�
������mU��T�tN�S7.<O#�F�Rv&l!��?�P�{�7(��$�}�����
G5aa�l��c
-��yK����sZ
;t	�t�j!{~�
0H�δ�)�Z��f�Ҵ���
M=}LJѧf�TiZ�mjl���{)(�
-v`��P�/�(��i�UH�(���Vf
z�Be���Is
����h���2/�jVȗ>	TG!��>
�gU�fR�����N�ݻȩ�z
���=Ya�
Se%����������Di��'�^V3s0	yy;���b
U.�d�t����*�awd�7������'P
_�Z�Ay�_�����^��)l{�u5��L/)�u�
s
��r����L�E
)�jmb�>�
��:��k��Y���*�������0�C"Óe��j�
-��ǯ��+�$G̨���}�(D�W=��EM������r�
�[^}n��N�I��/���y�ߗa� z�	���oc����{�~��OU�ٕ
;���Ne�
��I�{�r[�57��
X0�,hc��C�|.�X�b�1���W�32��
�>�wЅ�&��>,���N+�f�c<l�G`&&�x�_D�e�;�#nz�*
��=*
񝆡&��W�ܠO�Z�eR��8M��(Ң���+J���(MI4���;R�ɗ����
p��R��b�զ��oM���,V���w�cӖ^����g�[�r��:P�����W�
o�����5�]U�u��˱�;:����(�n���M
�jT
�FL}O l�yB�hRlu�S����?{������9��������>�}5}�ztK���Ha�����e�U�{��Q
k� �^H9kO�r�H���6]S_���
~�>�H)b�m_����mC)nԢ
���Џ�/����dD���6h�/�fLg�1|Q*��F�������섔��d�a ����_�,5t��$qM���;f]�&�>�b�3v�c�97Y��Qǯ�ly�? ���N� �ܚ�ܢt����LO��;%~����fL{�(5�+��f��Cx�!�F��_�Tll�g�Ir+�Y���q��/�U	Ee�K?4��b�q�-��g��g�Ϛ���xLEy(���D?V'����d��U�_���A\�)}u1ګ� U�<��_��--=��n~K��P��?]}w,�J2��Q%�Uf2��y�n
���Z��5c04��@�
G�D:اq|��D�ʜ�H?7
�1f/"k���7k��7�����jxc=���>�A9�E�
]n�a���fG��W��F;����u�^��6��K��Ջ�b4�̈��~]�~<&��p�����+�~��1"��-�pD��o��\{�
-��]��X���y �Xݫ����Dǽ����76�+B������g��ڇ(D�^�� ���)r����sd��_�h}��
F-�{�����v�T< *q�Z-�� ���!ˑ�}Pݣ���)��ieĺ�[���v��n+�=�'�TM>P�#�u����`[_�J>��@X9���.�l�d
�$�}��5�5B��~-��;���jJ�D6[0P���+��^���
�ʥg;��K�
�wGzf�u�jd�"y�~��֬4	��4Z޲����YQ�+�+�s<���A8�T�|�f+W'�p�*��+Y�Go\��B�L�1��y�G���iWc�5��z�[�d`'4��hl�'�e��p�D�}���f�陉B��� }��,?�s����)��y�
ջ����X����Nc\2f�k��S+
�P��c�/H��]��~n-�s7N�����ݲM�M���6�J}s��ƈN{

,�e��� ��~�)�
�����Ap��o8оK��Ac��)#,��G�����7��\/
`��Q��ͽ�
>�GA}
���c��W780��҆�⃭;��읬<Eeew�y�c���}�|�������+
�U���>�ͷ��>~=m�M�
�|�k��sD! �:�E
����e�B9<w���ݟ”h
�Y�Sm]��D��g[? \@��
�Y%��P���_:�=QҬ
�M���5g-�M���)	j��C��7oW��>p�;iv��u&|��Zg�0�>�Ƙ���
�;|V
�HȚ�m�m�`��9k�2n(�m�����
��֤%�Z�kG������5�D�0wMӛ
��k,s�I
�^ �-J�-�׿(��62�ІLc;
Cj+3��-�z�A�
���i9:{V>��kqeE2���C��Y�
n��}Yn�>�aF=��f����ݲ�֛�cv�&<8�g
�`D�7��ww��#և�# �En��M�	�F]����
-T�`
pEy�Oa�zǨZ�:�����8���;�g�D��Hf!�v�E1�W%���ˣ����͙y�i�' ��;�
-��)
��.,+hlz��tP�w칌.≚�����n�i�-��Q.s�N�褮
�6f���'Y��0
%U�
-����kX#õ��?`����B�5~�z��sC�M���~��R��W����󗚋��e��D�V†��.x+�>P�v_�i� �L�a;~�PW� �����WA���58mL���
�P�
�A��\�Y�0}��%�ݤ����`���y�=���fD���Vp����)P�ޜ��_ؓ��k�'�~/��o��g�}r
9
�"�y�W{�
-��ZA�g�Z�Ey�+IJ�����i1vo���9�
9�r��n'��G�cn�}ͯ�(¯�]���c=[�3�ԋ�o���\L;�Q���sN
t��~@?��xMB��u�´w
ٿ�y���e�y7�tj]Y���>Ju�0�
�U�X�6�7�O��J�ܞ$n~S�Bmf� ���܏ah�͔�IJVM�[�؊�j4�I��p�f�9�O@�u���T54l/\!
c
�
�W_�庒4��!,[&ɖA�,ff633��U��}f����jۡRBdTV��\�N�$U*5>a�����_'2
-o���j�g�^�>�ؿ6ځѢPI��P����Ħ',S���F�`.U���ۆ����UI&Ƴ����m�
-���V%dsٝl�gi���b��%޷e݅�n���lO����-�3SϤf8���U��qL�
=����KV��-�j�,���'	3�8;
-r��c�M��d,}��Sk汢4���*!Q
��ިA)f�ί�π����W�Qϋ�K3ݶG�����5��S��E,���՝Ʉ	a�RWkg65{�xL:���_�
��=]�C]�T	쉷�}d/Q�F�g����!=���Ļ� 70/���iVֺ~WH>QI���t�̙�X�����H�ޡ
�
-v��||��A�
ij�������s��i8�q���lk�j�9��)�ܗ�H�
8BaG_�*���UG�b���Bq�+�,�3:�՟�7�����/j5�ÐP������x
n
-"=�i_o����
�n�u>0�]9,�ꌡEƦ��#�ϦgE�U�uP���Z����	5ܪ
LX�����
-�Z�)����9�|?՛?���n�Ͱ�|�J~Я�E
`^YK�
��|6���
E� 0��6���#��Q����ޒ�t���
-Oy?�93�R}'=�9%�h��.e�
�2�~��C^=���[?b��3�B��*rqzd|���?ȝ.()���Գ�9�
��w
_��&e��޾�yV�[�iI�
��b��Ǜ�v)ÛZ۸1�
�'b"��՚^N���51e4�j���r��&��\��XQHaX>M�$Wg�H5
�PK2q{O��q1Z]<�i�z�Q�Bc�|+�bew�Z]6��g �&ɰ2W�������J	��6.�6�qifY�&�w�T��En4*o6d��Is�0�
��Q���|_��ѷ�x�ML���kqA�i��q#��5���{nc̀z��ML�ys�H(��Ub��`���cb���d�
�����
B�������k��7��VҠh'�%�D
^��� �>� ���;��J]�t����h����A�P
�z�f�~��c*��*�4|�3Q�	�^g0-�S��
�f̲5�m
���L��3�N4"�B����NdC��ɠ�ۼ[qO��A�C#��#LO�g�����=n�-m [...]
n��g~

!�G2�=��p���e#���s]dK#&�L�<*�Y��Tʶg���M�þ9WGE��/�_+@��M�����k� �{4G+�V�B��ML��f�X�w�
���U̒�j���j�g5}
�$d��0{�O�G,]!\e��}���eY]�;��q����ݣ'6V���#b
sOc
��k8�
-�ۄϥ�h]������e��\�k���Uxu�J��2�QCb��R��!���@[���juhy@�a\&�i|�Gb�r{
�V�5Y�O� X�|�c�oN;m�
þy��N_�]��N����Ctu:��9����޼�*j�80]�+�xVն��h�~���)��c�1�mu^[�,��q��Ӛ1��,>��=�3kpV0z�3�Y�x�~�=,��YF7��[3��>�N�,��Y�/ÿ�Z��/�(�
-V�l�m?1����F�e+��1\�G�i�K��rY6���SSܶ���/��<���m
�� '>dؤ��Ƞ��tT>��
]
-�?�N�6�
-��;i��
D������bj��=X�)����x'-=w ����,�c���#�����@�V�(�7U�U���
��L<���Jx�E�ž�l�q�Uf֠����4�'��Ү��qp�ۂ���_ ��]��c��׽�@Τ�
�8^b=����H7���%�
k;��5Ǭ>��̳��� ����B�S��
�����'��s��^�{6�h9��EGr-y�PI^~̙�F����)����Ն�N*�������Q,a����S�
L
�;�$�1���748j��	9�"����-��g��h}����
-�!�G�ՙE7[�]��W��������J�_'�}z�迅�b����X*��W!;�(oA�=#����lh�P{���d��K���]� ��hX���+�
�he�~b��'���u�����z��65dg/+�Hß
�m֎�"�dMoe�_
�<Fm]
-;��0�ݬ���OX4vK۲��'����p�b+�j��)�kK�^��
	�bX9ؘu�?��6nW�WFm,�\��)�~$��+T�Yj7_	@x4�|���i�wM���x��4�y�K,��%
y�W��3
~��y+�^3�����^�+�6���ϸ��G�u�I�Ȟ)ض�gm�����B�.3��C�^d?&�;�4��9����n>&ړؿ@x?���<�	*��u��
�K������x�[�N�$1��F8:*�[��G�+lm�I������s����Y�J�y�;l��)�D�<Hf
-��м+�I�{�j�W��u�����i��T3[��zޱRGG�׉X�O#R�B��i"
�n�����Dh�_�����xս{+.Jj��ߣ��3�-���)5p^u[�܃W���hT���.��)g��K�B�Hs:��Kg�~������h!��˭d�[�P�|���3B�\�v|�^�����Z̸�w�Rk�!Q�.ZO{�
�����r��?��S��#�9�]�>lx�i��e���)�2QoU��=��"M�ܗ��K�s�+�ш�ڙ��}w���C)OJ:m�`h�@
-���f5���D�[�
Lo�
ii��i�#�#Ѿ�	S��G��W������>k^5_t5�~f�
�#��t�L�/qs1�9�F�;�h�F�鄳���Z�\�V�F� ���C�u��uq�|?m���'+)Q
2D��F	i�b�$W��\�wi��F!8�ڿ@*
��������R�Q?��IV(<k�d��
B�WZ��+y��b��zY�P�o�+��,6�yM�����@�0F
-��b��C���
�5�S//k�^�X�|.��������^Z
��ΐ�<��� 4��6�ꦴ��!�->h�z:Lb�c>�2��s�p�zc�m���Xl��9rX�8�����۾ԛ"cj���gZ�~�9�4�sa��	��֌@��$��X�6�ւ��Ѥ�.
;vwE��W�<��m"'Q��%�¹����_ ���3�~CP�@��5<��~rX�z�:�\���u��vxkk�ӈ�./Z�_ �B�ö�<ݿ!`����P_d��6������e�ַI)��

w��_�~��W�Y�r�y'����n�b��]{Ŷ��e���;�~�<pxo�Ʋl�@1��5����r�σ�y+ˈ��
-�C�^��#��m�b�Y�&
-�����x�ON�z�#��eÍ~=''j����@*cwq����4ʹs��[�x��=�Fl�?Ӂr{�>����AT�_�BQ�ٶ?y��ي�����#%|]9	�k��ƌU��0��̭s����#ߐ����ϯ�w�Z؜N��)GU����|bt
V�^�B3��n{�ܗ����V��
�~ʛ��@$,=�$���k�^�< �޸N���9YE�w�5�G��o
�xD�� �����$I)�m>�'I�M�̬gvq5N�M�Y��q k����SNl�-�6�`^�yG����?S�c�����P���bQn18�}&΍���
�>
�Hg���PX}�
�� jq�
�P.'�5������s���:��i��s���/��
ف�L�m����
�ą���Y.sϯ���a�
~y
�*a���a���FgYW˼N�E��/ �I5#�wˀ������[2����C��P��9x
��А��֛
���[
�y����s�y��
�̀dC��ax�=T���[�A���X�L
-��$��8N�DQF��0w��ưՔ�`��6��þ�)��%
�[D��]W�����(��؛j��?�����7����ti
���}�'P"
���EԳR����U�hX$�����
l��,��}�gƨ
áޅ7}�ju�J��3�*\�,��~��Y!���R��KF�V�����B��F��Hc���"�ꠠ��T�*VJY
-q�S�ǭ��q�o�mi�gZ7�,w�{�3�������L.8���L�O!!���cKG	+��[|U�^o�r���
����oFw���-��}&e�
�+
��=-�^������&�3;����~fS���­^/0��y��K��*����0���	z
��/l�/��2d��B��N��
�*D���6XS���]$}MS��4��q��a��p�YH��O}��	�J�<U�O��f
-_�IL��
-/2��Uy��އ$�F��.gE�AG����T�4
Ҭ��������h�s�oo ��
�hm�q;ݭ��iZL���q]Vڧ�vS�lU����\��~����������v�%oi��`��D[,"����
c<ե$Ͻ'����q��0黯��Y�{7������f����ҡP���`�&�<#�a皊(�$̨r��N%
�\��|?��3�V��p�_-�A}�S��8K���>^<�^��՘�0-_E�z>a�S�u��8��{�bE�־�q��h��j��[s97(����ۋ'rAL��o|�"T�aKh5>�Y��6��ZA;�����S}���)�P�<HR
-]���H[r�C5b��X8|�w �c2-C,O�@�q�5���-������C�$/gc^~\�� ��3���:�C�Y�
k��?}!�h*�w�Q����q
*����%k���*�A�(��!�������J�����Q���s�
�m�-z7iբJ��
�� bcy�!���)zחG��WF;�F3��C�L��j֧r� ���l�^ܖ�a*�_�m�KĹ�ђ���n/r�x1DSO�Q�T
<m��[���2�避?�;�d�Nj�����(ڛ���	>*)��H�����A6?�R���5A֫l`;�}��:��K��^!�m�+�$d���Zr#��\R"�(lc�i��&)��/�
-�$��b�$���+ �ٗ�V^���� ������9�
-G-���<^ߒ�~
(`��`
-A�Bg�? 
�6C���=u�m<�ۼ�D<�^�
hnT�#�v�:�B��y�T�<�)�I��ly�٤�q��/��,5�-l���0T�6�����m&sek�#nFaP#�󩦒޵�6Ʃ+-��1t�K
-_�b}������+�=q{t$o��t9�\A=~A��y��RsU��	�?ӴT�&��h�p
*�5�Z�������th;�ڔT�$~�W��f���JP¤dDL�a�Ѫ_����D�����'95
����:���;�'I��������7��L~6H[M�G�.������+�"��yK@
�W?�n�Zӳ�J�2�����{��^pU �eWӨ�p�jr�߬;�Li!е~����/y�C6��VT���+�7�.8W��9˩�Z�h��F���ّ��j��,c�os�ĵ<YjW���<���pV�Q������UV��.ݿL_5
Ƥ�*����e����OΉ;���v%3���+<�.�p�4��a���XC�;��3m�P��S�*���+�
$��x%�d�2�
�2#�OV������O��p�T��kP;���p�/3��EI�^c��Fr�`ĉz��p��b�=d���	n��T�9_�=HZg��A�>���`%�O��AK^dz]�H;�J׸�%��
�m�����|�6�K#K��(�c��{����U&

���e�׺�2��j& �O�G�X
����^%zk�9�/�ꛧ��wSV+�jt���;��-_%01���G��0 

�)8��Nz�\\JUx?���qs+�5�����
#z0f[�qIL��y��K0v�W�m�#�'��_��f���c�2���5X�8����l��y���>*��6�3f!Z��{�N���
4Y�rN�=}�X�v$��:����H'�&�=B��j5��?N�Q>ӜnB���mߐk����|y�>�㿒�j�nO�`�9���V��,!4&N{��k����2�L�8�YZ��j��m�v_}���ڃ�M�r�i����v �~e�+��ߠ��C�
-�D�l
	
�ӕ���Ua�/[;��
�
lY��
-E"�����	u��gW��ը
�VW�'5��>T�]�1��ҩ�
$z�߬�(E�Q at b*7��[U��ΔN��8��"�H{BH?�V!;�Q���
�:[C�t

�)�v��Һ�ܳ��
-�(۝�%B��~Ajԏ�͗�[�n.��1�k��\��h��J,�L�z���<�+���m�C�D�k�����d����gCR��1���{�� (���r�/�S_�4I�j�"����Uy��<�[��(zo
�h,���I�@�������Y{{LH�]
-�9�\��y�Y���86��硎����?l���U]iZ[sfn��j������P�d8j���m�؍�W�u��G��x��T�hx�����N`�9��:v�U����,80"�Ɗ0�(�#{�h�F�o�\I�8��ӳ`x��A�P���b
��
�T3w��f�|��w�d�o���z!q�G�b�dc�����9�4�=���#���B���km��u��d���
 ���=�A�jĨVe�ׯ��~o�8�!�H�.��}� ���&
-(�毩~��.sw��Ƹ��'��۰�P�
-���5X�%�>���P#�Dy��+���'%���ݒW��uAD����#sB��#������?�QǞ+��P��B ���ڌݦ���,�k9�c��N��AV�a�-
�R�LTs�
g�O^bTc"�uj����1���u69Sr������U+Erz�����BI�G�A'�յ�#O^N-W�w���R܃:�ʂ�Mʾ�gq����v|4���2H��N�GK�͌~e>kO�
k�bN�>���BɅ����bY9����۫��~@�Ho}��ߞ�+�kǻ��:m�{��V#���xլyxU��Ŀ�A�X�Ä�|F̋u5,Y�_�&7���{–/ȇ�罋� ��F�
뭴�o�
����
�qR�g.\U
v�U
?�o����@PW'�u|g;
-�Z�_�K
ߑ|k��ٞ��}�
�b-�_-��O�j�����w�>K��مn��X9"R��
-���c��U�xs
�u��Q}oW�M�^�5�St������ΜK�k��|��;W��4w����9O����D�^l�ܹ��S����Y��mG��54xVW0c3�^��
��Em�<-���°KU�N�(]�{�9��o���[g�,
lO�ɝ���w���
L�v��{�c����`��T˝B�g�%�\߿2_
���X�%��r'6~�'7���~��K���w�VԫE�\�Y_��b\�>��B��)N�c���PռU�]�K]��?�φ{Uj�&�
�Fa=.����-�N��!��n>Y6�Օ]�
7�? 
ecت�kE�ry]�u�2�#}_˕+��GD�r=��9��/�����^����l�~i�9:��
�Xl֯�b�[+��W
�
-��M�|��E��'A�ϲ�Qj�������o\�{�v�rv�;��x�s���o�۞��6�/�_ J�E�$\ͳXhˋ�2~�R0P��	^ڽq�6+�cL��^w
��TM�9�m+¹K�����Ev� z���TcwuY�^��~�bh���KGn�̏g�֖��D5�I�u��욏PP3q�J�呇]�LDz�����R�U�q����_�r���/��'�R�
�~&�L6�&��
����A�u�j�R���� t0�ǥ��ح�_����K8��sv�F����;�=1SE?�@�;���o^#���5Bg����Q�
{�܄?����n�[�w!���^���� lk:^9�����`�4It\�>쁔�
��EXʽ�����wj�Ф�J�Z��r	�yAӥ
zkT�U�����W��=>�ة~k���"�����I`�(ܒgσ]��?���KS+�I�Zn��]�:�_(�f�
p���@������@ z���/{`!�ٮ�/����Oi2}����^�
C
E�X"��F�?��y49
?-�$�?E��T)��?���V���*���{T{v8�6�1v!W&��
4�.yМ�������C��|ʞ����;�JV<S�@a����
y�.�aGO�Ahd�a#7�I�њ�fش�P�2��eG���8��z���|��󠑙���Ԟ�M@��b�
V���X:�x-��+Ynt�
~	�ey�Dv6�Fs�P�����Sx��
�w��J�jf�
>ڀ�����(k/�������^xmB��MQ�	�>eϋj�"T�%EY��^��f�F�9a���O��_
�~M���M�Y:�Է�Cg\2�������j���l�l'��>01
綰��G�
�i֞l��1:x���렭�&ܑV����W"T�T�����J�� �~����Bo��,m�Kk��['A�1�U)�O�[��w6�E�h��yur����(s{<��2�c:J�`M�.y�.r�?�i�|I�L%"�Q�V!8Tݘ��ט�l�F��ww�٫P�܂����u��G1��$�����W8��� �o�� �r*������1��r���t�QK�>�2�s#B�X���ET�
L�F^�3$*M�H�JCTY
-��WG@~�VC
n��o-�OE\���?�0A���B%eT�B��ы�M+�[1��'𒕣��
���a\.ě��J4��<h=[�j9���� �z’��;N���g��� }O����1����
[�0,3^��B]P����9
t�<���?��R|�˪<2���������?�}GXS{�݋���t��3�˭�m�Žcrs�ۍ�
E;rÞ���к,x���mܴ�Z�S� �y�><ъ<
��o�9�)�Y�
SAU��'ܫe�-����_�0�O<��[m�<���e#�Q_b*r3�p|�
d�����S�}Q�xv�۰��y���J﫱�����,f�ZTM�>u�d�K���j-�$v�轐�3C�( Y����
)!% -���dK�$M�O��f7�'"
�2���wZ4�������P'�
�µ��*x
-
gBzw|���^�8�f�HY��M>��h��Tr�z����t�UV��ܻz�V�j��sK��)���Χ����4 ��G
?��X㼋�f�
%�ȩ�s��Ӻ*wgk��&5�9�K����_�&�p-Mv�

��E��yL�vޱ+]h�
��BGj5_��c�_��Q�%s
{
t^����r ��~�0�a=��w
*�I���^sFLd�L�}�
-�
����1�� 6�Y3����s�vHrd������t����÷̵zӅ����*�Q���/�T��l���/L:ȭ��5�%��oM~8?�S[
W�Go�?�q9��v�9�d��
-�n�-o�s��plL��(� �g�ַ +G{�x���0>�@��i+���A�}~|�;�]����I�����
��4�%�cГ�v�NIy�qfzM����;���ۘ�k
�Z��6'�FP��C��5�X��]x���LdljJp��b����M�uR�n��,��hC�&��w����k�:���2�#X�t��s^��qB$�2�])�M�9����dL����#�9�-9j�����L_������%���Nݯ�Mym��<�4�	��DĻ���z*CUE}e�]/�-tV������Wag�Lφf�i
'�nV}k��D�9�xG���׬)�p���c<��μ��z���i
@L��tY�P�$A�X���ƹ�5e��/�[:t,ǩ\��U8���'B=����M�3�
�/�Vb��vo�XH|cQ�Ư�am�=*����5
����WZ���t�<�
���h@�
-zU�k�ܽKӌ;��M �%���Zp�O9-%�6�;'�:��
��\�CX-cU���
}����������J�,�
K*�J�VY����m��A��J��Io��i*���~��uQ���	���ĉ��=[Ѓ�
�� @�I2���`yF��9φ�6֑�>�wRN�
*��ȪLz�9��k�5j�Z�gT<����I��+/�^��Z�{�{�s�O
kh��"�J��Hܭ��Y��v͉\�d�:����Iұ~u�|�
h��CK:�_]
pl�7j�$�g�V{�	��2WY�Ͳ�:W�IG����ղ�$�q^����R���!�v�ەp^q_�
U��u�ɦ7lr}�M��Y랴%-�(�ޠ����mt�iS�l�-�
�A�w����A�[�iH��\�
Z�@��)̯�v)�d�}a�2]b^2H
k9�7�¼c�fcg)@�D:�5���l�~�V����/��s�lg:���ML*�a����s�O�ڃ4���ɣ���p�_�[@o�@$�^�Oi#Y��$���Ÿ���Q՘0 ���Xr�y���Ƥ�=l#d���O��������-�kq!�sR�7��;�P�c\FÒН]�@�#G�k
N������5��a�R�3��!�\ц8�m���~�}!>od����q�v��ej��Ҭ���o�ȘeCY�
�,�cc�"�
-�� ?
�MaڱPd/%�V��rR<Jݏt=�՟VK�%�Oچ�_�bW���A�8;؀ˉ�_��"?����n�
t�Г��͋�9���j��Z��qU\���\Bm��*=fm5�
	c�)K�C�5�������Mt�h8$�*��_�|�-4�A�G�=�{�:��݂8[�w؎�k�V�z!�_^Ӈ>�����3P�*`�tV�gZg�t�}d�+9�k:'6�xu1��X�\�_+�CU5�W+������l�-QM+ږ�C�p��l�ު�݉����iY���
	�
c���v�g�x�
�Z6ѳ��٢߱VGU��;5�Jnc��ԑfAmz�۸�

-��
�'H�j������*JD��Z��1ߌt$l��������Y �STU+�Ml�o�ף�W��}����	�1/�:�E�m�i��5�W���)��
-�bvg��l�&Ǹ�:�R���g�SUE����B�PN
��
�vO@�y�=�DR��>�m���k�^%r�~�<��4r�ʬ���il���Y��$6,���%�`OQE�ƻ,�V�z��~a�G���6�_uMYs���굊V}���m��)�X�/u��#p�R�����Y�q(�Z�wh�/��F��#L
-<�-�0c*��$��j�W���I�D��
g�/�5��)�� �W������1a݄�&c|j�#�2�l�o�Ta\�xpm�>����ru��f
{�^i�3�_�ϝݹ8�0������C�Em�[s��
�3|}�@��3P�})�'����W[�R=�v��@C��.�tW�saTn�W�9��n�����aU
�4�lJxlP(���Xk���u���
-9�\����?}7%
?>"�>eP��4���[3O���<���lN����Y��)����\��R�^��;���6-b�i��6/΁��
�5x��c�=�7�_+Y
K��f�.�(�%
ɞH�/�Y�a�v�|�^p�5x �}Dt/��7��~vR�X̍_ 
o���{��3���:����Bt���վ��T�rx�퉪
>�D���� ,��{ʼ�v���d�z,�h����c.�"�eٱ��#,�
X9������G!Xh�I�$��EN�hߚA��#qjk�NuP��NG�kU�ط)tyӔE�a�v�w��9���3�\4�+ݷrc޻.����E�t�;��a85ɽ2w��)�����U����أA#�S���w���b�[�DX}�\������os��ބ>�H����3�
�~���pc�kLN�[���C�n���}����A�e�7��O����O%�qݮS�&1z�K��&U�	gx�x�5<y��Ve;��9��D�÷���B9�и
-hJ�
c�+ߨ�1�n�k�
D�B80���5T��b�=Bǝen�ː7�>ٰ4���z��'�ߵ/
`�O��߰V��ͻ<2�2ð=(R��j_��dn;��]���$
�K3�)���!X� ԥWsP���#�C��IҺ�s"�A���$
-������hZ���.$k��˭&8�XA�?��c3]�X�Jv?
�"��aJIc�?�N�=�}\N��s"�
�M�ȥ�ohYعϋM�v�%o�&i��'�j��*
�ɭ_�;K���|�����j�K�R����Ž��C
i�\��i�s~�Ym�E:|r�������3�}���I�Y�MWG�^
ۅ� .�
-�(��$�ZE}����nq,B��J-��ܒ�٧�Lr�YK�b��:�n3�h�Įc������Y-��	lM0�������f/�ʵX��"8r?�i�cA�F�wk_ �֊D����ہ�����B�I�D׊�s��gZ�%3ft��)�9> -Xh�y2d�BV-��_8<�����f-�&p�[5ؗ���㷀<U�o~6f�
��X)
o}/�(JO������I��Wa�zF&W�q�3ˁsS���}R�(R
��b��
v:��β�H������7�ȭ��}��r�
I��Y�fJ"�h۔�Zp��]�
-.�$-��EX��1��J�
-a�����'u�w&�}��¸�)�i
D>
- �2�()q
D�> ʳ��&�����
:��0`�/`k(n��-Lf��lޚ�|r�W�U�¾�q���w�����
�rypF�5XFi�[u���0�!�
��pij���"���ܩ��X6��c��h��!Z/��� �r8
/5��o]K��କQp:�qvM � 3����r��h��u��3n������+�����:�ؕ�@z��~6�Lz����\�;۝��P$�}*
�<�H�l���~
�I���oP-
��K��"P����g�(������Z
�%6s��[۷�e��������~i"���Y��w�{gU�x��0'�eWE�5*T��c�~�
C�ê-U@n�+�:�s+�H�Ii�R���XB�k�T����hSl2	'K���@���-˥��!sk


�u���$��g��B�U�;Uy
�VYw��!@�y4�0pdR��r9S�E^��
�`�AF���?'��t.@*��
��
-z�zX��X�V����v�4�l����sKZ61��vW�ʚ雕'@�9m�c���K�_x��
-8�P7H��
Y��T
��]r��S��FU�)��S7�f��p���f�A�R��LӚ`�Nf�(zZ>_���n���&7�]��j�)����y�����mNc�%� f�>@�5�SP�a��Fu?��M��'��
-����f��“�M�����Ar*��T��k�o��U:�Y���R{T��[U�'��"�b�$�t�
��
�ۍ�t�?��c^��Rcx��=2���̨`�Cg��UK���0S�?�V�\?���b�uDF��}:�<%���I�)G�mvˢy�)cB���bWj.ټP�� ��߷>�?X )[hp�<
����z�OʤO"��&�Mtҷ?�_�r�;+K��d�E�"u��j�}��*�gGl���+(���_�
��M�'��պ|���Le����܎�
-���$��N���x/Ȁ�z�
��9��<�����Y̨��Dl�
(��у? òFM������H�C
��C��d�8��2X�&
��d���?<�Gw
?Yj��{��e��^���f!=�A�!��̱�h��)�,�
\�qϋ�w/�Y,@�k0�=��t�\�	�R���,�M"ΰ)K�
��$WrĬ�T
�K<b�����a� ��
-�ϴ�����ם>�)�W�� y{O��<w-��Q����
s'�U�f��:c�E�N>l�[�f�`�������R2�V�+7�
�[*ǂWx�ʋ\���/'v�n���p�Y��P��6凷�#���DM[* ��f%����E��C����4�֣��VԔ�e��J��Յ���q�J�MZ��V���E[�$�U|'�kЦ�{��J?$��h��ɻv��S��j�N�����N�
-�U
B��쁃x�����ڑ
(���-~����[�|
8t
|W<ݸ��4tN)=�h=�{���zz!X���#����|�%�*,�
�����dr|ʾd6��{���IU
��p��C-��h`f^<<�yX��Ю"3M�#�[8q�ۤ��Y����i�,ȋ����z�5�q`k�
-ދ��d�
66�9g�&��d_���=3���O��>h(I�Uk�J� �����0jzğ6�vi
4">?����
{���ޥ�P�AJ �[+�.�u�A��)�ݍr�����#�k���r����Y���p�ӡ�RG��X,�$*
0�,�HG��M�t9ͷ�ז۟Z��M��I�i��SB�

�^������G"u`�����~�������O��4�l<�J�s�)��I���
KO����'�ι)xS�C��
��z-���9B��ۻ,n�/��^+Nc�*�O��Sj�w�h��ّ�4j�D7nT�����#�w G�>�
��*j͋s�h�Wq9SW��ۭ�`�s*�4��ʟgI^�tS��j��d�$�\&u�g���ߣ��DI �Iqp^٪]y��5ѶVaFU�~D��|��k�{K�z�!˫w�}��G:Qݨ!
�C�o�= ���9C?��\�UT��s0���,��.�_�ӯ	��x�"��]�e�k�T���Uزfi��V���ճ�F���[�
-��)�6,t��۲��,�l��5�ٰ�pg"'�����3P�D�k+��
yĵ|�6b�E)������>]Du�����VT���uͧ�b�FA�I"';
-���J�]@�(���8�˛�ߒ
B�x}�~Ɋ7�E��:�J�z
�Q��i����ࣻ.��
�g������n(��-?��Z�`ᱠ&����r��#N�fT��,��Fu�.�
h�G�
�7O�T��^��a��4��8��Ë����j�
*��P�z��K��

5�g>5m�Z:�P�/�B)�5:E��>��p����N
'�/������k�n�W.�1ER�
-�����]ӊmz�?4��
?�+w��5G�MN�
W�}������ˢ�j�FTY�Z��4%���槸lhQ��Q����m��Ʀ�WV��?%R?����6pd����a�r����;��Ru�����d�9
i�On-q��G�
��'��:�K3�8�����Ex����4�nY��-�������1T�5�}r�2챸�����'R��
-�h�
.
n�/U��d"y;=�v҆����
lX��S0s�_N��D���O'o[�X���&��ߞT��U���s!��e]P}9`F��b�~ڗ�.��*�|,�k
Ĉ�<�\ه��q�+�lj������o�S?ޚ�� �X�D�C3�u�8Hm���0ߖ�g�{,�6��U�!?�y��ZD���<��ǧ�{��רuK
z_
�)
�l��G��I�3��=,��kI�[ ��V�tA�͚�٭-Ę�
p{�"H�S��>��S��`���J�z˷ȱ��ތW��s?�[wzJ����4���*qx|�U܇�`��:�w:p�|J�DS�m3�y�/���k��j��_v�
Z:#����wg��A[>�u.w��O�O�߫f,�*#2��7�5�ѧ9&��ں"51�Z�-S�T��n,���
��@J��h��%��Wv
�+�LX:�Nc�N�ס����^�����c��t���at�T�
�|�4��P|o�B��]���G
���\ր�l���62%{�Œ٫X�(��	�o�6�p���'�j�����
�[D}���Γ�j����8g�I����{�!����@47M ��۴�@�BfFR�����~�����V;�
Qk9,�
�UE汲�p>F�oS�
O�a
2~l��v�*8�V.�ۇ���Ӛ�\��E��ms�t����GK\�|=D���V�)�8FV�.&I.߷:
�j�:�q9�[�G��%���<g������mHn���	Zs։��
-�i5������
ŴY�T��s��qV��/�}��OJW�7�Iq�5C�k�)$�KG�br	G�;6��0Վ��`�v!V��Z/�F��g�3�vdR��Gd#��;�^F&m� 8�
��2���]ΌE��
����%,\+�l�F��(�ᤲu��3}���W�������K=�b�o�$�����"t�v�Y}�|�8��|�X{^5��=��S�m��9�4��p��cH���{�R�?P�"6AG^����E
�eUY6��%Ȓ��
^D�Ef7���d��i�P�����[`��3ښ�
�?�:Nu�I.�՚-�����
��,�^������r��k
-
�[m�7z�r����*���z�D��w?�����FL
-��������b�#��+dwe��C�ۑ
-6�s��-_:OZ�D���R�73�ǃ
�kH�
$���ܜmX��r|��PF9ǥ'F�}����|W�F�
0��@Y���E�I�Q�8���$�Ӛ���{�d��J ��p>��s^ZDÃ��Wwv�h�7SOe|�����E;���x� i=�}/6c����?Z���
���p�=X���%B`��m@���e.W���fU����L���Z��
�K�y�����X�a6��)��N�*��q[b�ޓ���XV}
կ�;a/���j�gW�6[��S�2�'���O��
B/�v���ao��o����ė�� �e���{�r�7b)����\ĭ�u�����+����2GyeGٚlU�|ʵ�Ad�q�~����b���(��
��2���g�l��
-�o���;l�����S8��ij��Cu>�@U�|�Kf�j���b���>ЇՐ��S
z�H��sB�l{��X3���9@~&��6��
4�6�`����w�&�[9��
\�Ԇ��r�
�omW�U%Iz���=ĕ�����X�M�
X:�%Em�k�lC�ʠ0A��F�����o+

k��`_�7v����և����#�o����潶�07km�
w�\��cHw}��׵���O�9Ym
���<�d�?P�P񪡴�7H?X4�������k��3n��sD���s籴�l,Oӗ�_��j_
-�-�YX��뼀��ϐ�l\m�}��
L�A`�X�)6\�z�
=bQ~�ö�'i!��PH6 `X]U����T7��j��
-�����<쿅<V��&ؑ[n�Y�.�r
����Xs�j�
-Gڠž�$����}+�c �gI���ݗ*���
H�
-�򆚶nЄ��&���:�م�UQ5hN<���o�Զ���K�x��]Y*�^����z@�
4�U�k�����U�N&4�[���y���z�r}i~c��Q]4v:0���Zw|l��jEW���x�D<���,�;����խ��h��׹��
��&~��Ԑ�[�)�(�V#�
�R�r-�8f�
{l�!��=�v�� u��
��S��w��%����0g���zL�U�(S�F�V?��2 (wOf΋��'�uƔ�_n��-^�?��I:
���X=��&�F�ߺx�H)yWD��s��ܿ�h4s��}
@#3�%NLN�V���u��
-a���xS�N��E���j�<�ӏĽa��2��Ic����1
�bo�#���
֘���4�C����9�L�v�ީ�ڕ�p1����F��D_�Oό�{j
-� ��mRN,�T���Bo����}d��f�x
-��N�=�TN��F}/��\On{��o�L�y��xM��#�*�otA�w�!��yH��aW~z
�Xw
?ͧJn�=S�{H
u��2�z��S��)�_������łݔ��)Ko��>/%�/!г3�#��t0
�T�f%�d��\� u�	�S�?YG������[2�Z+O�0ԫ�~ȷp����7��tO�߸,�5�e
�B��lP�3P5�
���^Vl�~y�9��{�c&��"�Y���PG[2�]��;
7o��
��m���N���Z�m�+�Ϣ�Z=��7�ڷ�\�bt�!jTx�����sl��6��D���:oآc�������av̡�*�
u�z������ƌ��@�{�77J�!��<����ό���pm�\qc�F
{a=NT��o8�
-҃��~z/�E�י��k`ʕ\�R���t�
-�Rz�7�(
�����qڇ�s%Ζ�具���l �����s��4�
c'F	��´��
����Ӫn��[�{6x��V�]���n�6_����A.�T����~�ma��92^9����ta#n�ЫXP_�NM2�3�-���<w_r�Ҫ�\�[�� %ǟ
_D����rUg?�7E�t��lo:ߕi��.6U{喙'���aùju)�pt������i!~@������B�ꪷ���j��i��(���DL'����ž0�1���A���!
-TȢ��A���?j������13�H^���6G�O�5�,5���Q
��+���'u�Ul���
���ҹ���ù�RB�ٹ
�]�����o�r�1���m�vX�q*�c�A�%o,P[�5����v���y�����~�ә��p�6�y�ox��CNߢ,h8_��U��H�����j��x��
- U�4���P��:���Jl��8~����s��Sr�@
�,��9�~ޫ�uBv��잽�V
_�yu���u$
5�ݝs����-#a�R�з �n��/��kU瞠ȥn��|��
h��
"��g1q���U�����\1������
�c?)˧���K�g�0g��<���1�Z+�n����-܅�pjK l)}��T����[[�?��'���\�;��>KMWŊګgv����zF"��U��%UD�
���.�����/{F�Q�:MtM�<�ٝL��S҃3lqoh���Y�W��Q�����)فv3�ϑ�1��#`l@����8f��,���Ѯ
2�� �7�i�
{f�V�1X���[Gi0}���,�sC<Ms��q�{���>+��K�5���l�r4ѿ
���EX��0�mP\�/���q�w�{�gl����/e�r���d���R�#��
-�%�B�2�*Lg{e_�_�r�c}��1j��Tql�,����4�1=V�ݤ_K�X�j���aY��6�`pc�Y����!�-<���)�)�"q�9
0j�k� Q�"�w��wdl{�pmhW��l�����2��q�����q�*�� �䳴(���� ����H���P
��x��f��E�NW��k�U��Hz����D.�d��4��=�'u�U�b�W����Ҙ�鉧PE�lT��T����-f�=*��;��b���?�v�%c�"�s�Gc
����n�0+����
�KSHG�
��R������
`{GR?�o�Sq��V�T_
\�!�i�
���vU��5iO���8xm�_}�]90o�)��Ct���h2�R����iw
�!���
-m�u�f
-�
�
����V_p��]4�m��k�@�Ec%�
��EWX�y|�H^_�Ō;;�Q�q�����
�p�d��%�gN`N�1�c�7�C��I��FA�Z�U��C��@}�k�<���y����0z�~�y^e���}2�
�&A�z�^Kg�!)h�mΠpx�^&�י��*y����睘�7)�%*��\Kw�<=���*�*����G��m�r%gu
�ND2��;(O����wq��j�6Ѫ��J���^Q�{�3��+��>����
-UNV�o�SCZ
�����N���?�P	M�~�o@�
�/-�	�
-xڲ��
6�ՙ3��ù*�_�T�v���y-��8����di��vaO
-䱙#�b��HC)��K4X�NR�A��!�Z��]�\���6�x���_�+{����ʹ��q���p����W����Q��a�����
,{*{�	s�
^+�~�V�3kb�/���=��VL�e�;,N�C�|���_ɊÂ�R�
-u΁�wb���x�-8���9���\�}9��'הi�C�j:=�
��ޮ�N�ړ^����O���%�g��6
*"�#?����ϓ5���p�n܎�c�6)��
�L��m�-YlܩT�q��+������X��S��<Ĉ�i�9�,��A��2��@��
,r
�cTQ%�!�? �Dc�MP��6�ܐ�?���4�cz��8QzӾ�j�
�G�(�����T	�"n�$g��&�����}6���#
*kE�V�`�籴�+����"�|7`Y7��&�O
(>���Jv?3�������P�u%=år���N���}�ln�j%یTΛ��KrJ�x�,j������ځI�����wUP��t�����rY7VS��+�VU�z9W�>��4�y���]���YD�[}Ƅ��,��h���a|��J^�+B��W�Y�&�*���kHy�l><?�f�T���
kc�ڑ{�s�1׊
n�@��(��*�ҿ�k�:�۳;J�{��Vg��M�(I�
-�����q�@�|�|��7��y��d��u�{ݽ�K��FR���g�zs2�D)ǎ6R�

V�f��v�?ɟ��7��O28��6���K��2DZ�j�X��]�SGV��sqL���t�*�
��|ǂ�^+�D\������P`�\r�>V�����6�g��ZD���x;���Y�5J�2��k>N?"ӿM�Qc�,�
�z	"w�\�1Bxc at RB�<k
-:�,�ǻ!	��|���\��~
���OeW���eކ[Sy;����L��V��k�4:�g� v��
Za��Z�JW{�d
�H��R��Do���2Sﯴ�[�����6�J���|l��'D��"=]
ZZ0�-y��a�k���V�I�֏ ���m��-�M=�]\�y/ɗ�1�EU�*	rI��6
-Ǚ��g��ұ�
�V17�v����߆t��b���I
��E��n'���mH�{���\��@�
����n2��~�s���j�����˳�w�M����.�຿���G��t`f\�l�l�Z
@ʆ��� +���a�n�
�'���7
��>�%�ӫ����<��� �
�rC�
���u7)�j��Z�Z��ʽAv����
���G�z;���/���sB��_0z]�wNpc���xZ}8�`j!�X}	q�E��(R�+ܜV'����w=9����
G����Z��<��p�GyW�?��4><@��?��Q�Dz܆~��4���`ߚ�U��׵KAi
^*��/oa�Ȃ�A�fd+&�M��	����W �_9���u���bu�I�����B�]�mM���e?DX+��N�����/��
��#n�To{�����"�)P��LïLRs0�������&�2�?dd|Q�'��^�j@�
����Ͽ~�~� @Y��,��.����J�!t�PiHP�.�J���,�r
-�M5L<�F��G�,΅���k�@,0%�7�PnY�bT)7
�=D[�M�ټ5��6;��Xɝް5�&�c�N���-P�n���?�w*�0����Z��Vɥh7��"�������ȧ�����?���h�hM:���x�����}�	�u<�'nH�eڕ���,[h���Y e����|S
Ȃ�5%N�)}d����X�����*�Bf�n'�)����o�u� �\�
o��0<��\�"p�Q�:���
-N;a�
�*Lݍ
endstream
endobj
122 0 obj
<</Length 65536>>stream
-&�S�
_���XLw<��?��x7*
{��
^�:2��aZ�Z�4�t���,��QQ�Һ�����3%�M��2;ӆ[w1�l>j���;U�$��*�5V��-Y
 x�n_:��f/
6��D�wO�ޖ�w

�vS���{�Y؟"`wPu=:����
�k:!,���RT8�	s�f�a׍��鳫l����.�
q��˝����� �o[������Q�W�g}_#r������bi�{lsM��*�yNm�S�O�	����v�L�x(�;ְ� gt�
�u�\���^j���ݞ�]�s���\͹ƶ�l��d�BJ��C&&�K��
-��;���3��V���֙w�m{���xl[�p�*�l�R����[��Y���K�4�'�-��h��oI�B�@=E��cy>�Ⴥ�-	������::�
�8{.=s��B�]R�E�����<���d����XP�����x�����!򡠭�X�?/�@�eFr}��N%���&�Zzc<̡�p�Sc;��qΩ�
]���x�gz�oJ��:��nl���a��{�hQ��lD�koc
��*�����Uq5 ����R�gCK�z�:�=F�
-�|=�_�P���3&��6��珉�5��V<oO��P�Y��j�<��|/2��
d�%���?�r�Af+�3B׍m;]o��1�l������rmg
Lo��&��!�����p<Vn���\�3�[
��@/\
�^km_�:~�G���.�~�}�5�g��k��
j/�8�>�9�����
�Z��W��.���꿄&��n;���rL��i��c���
-gL��Z���O\���>"Q�A��R�RZE��Yu���d�?#MtF�W���
�P]�[�;lK��p{�
����	?Q�c��V�~O�FY��)!,|��
�
U��^�:����D��c�n��}�f�
Mp�a���ZO4Vqш+Ov�
7�;�?
� n4DHOR��� ��S�����<�
�|�
�#�Y;:�6�5媐z),W�	<�}�<2�KU0�MZ�Zv�Y�zL��@?:P���T�^.�;���<{f�@~pq������kH�����KK���n
c�!�I�H��N����
B�
����@���}����|�y��t�Yŗ����4؇9Z
-3�2�����P��yPq�E
f�� 7�+h��,��Z�&=\���dG|�ד���;[�
��6y���):\
-2s����	�2�tr���l�M�R�6��Y�}]iG~\
ns
XtG���}��F�*�K��>�Ì~^�����A�5�K�jV�d
@�O���0,,�ͩ(O�P�S��CC��.u��Q��GYʷK��vÊ��j���խ]>֤��S�rX[0�h�ocq�afk��8/!N��4k�	ݜ�z:J�΃?z��m��H�]%���D 
��
{�Vl5q�`�N

.���Iu��u��
%|��M�X#׎��i�J�4��w�Bw����+���Z� ����LVP�Lb��@�
g�w������K�7�>�ŕQ�d`A��[O�bq"���N>i�]�����K
�ǻ�狶�_��]�zK����P#0�QO3'�m�g�j
���V
q� �Qr�fq�������̣��㝿$���3��$���2
7�x�����u0��q gx�D<+Y���@��������H#����Nj�Z��:k`�y�Z�cy='eZ�&su�L%�W�����l1Ӎ���E]���������+
/W�g
8Gi
g���V�e��[eit�vVġ [...]
�Q7���X*N)^eN�~]O��
�Xk����)��ui�,!��m\_�O��a�Ф��Q&��p��޸=�g�^��}��l�ٙ��.>��~f���t�F�ѫ
��]��,�'� w{����_Ш>#�w3��W�W#���{�'��";�Ni~i��_c�Th������K
N��V_N�� }{t�Iy���
���t�W��
��~��a��
��z����x�����jR/�W`�
�m6����
��K���0�a�v�vV{�_zy}��LJ�j���%
-�>^-f��
ӽ�O_a�ԏ��!�i>E�kk������g#P;�^
y���t��C���
�!��i�t����Rؐ��If/����)�
�v��}���w��Y�ݞ�;3G��0�
VZ����j>���T�� ���t6_���
-}4i}Ʋ`N�������%��	Y����2��ӭU��ռ�;��<��}�
�5�6���^�u�����>��A�n�5Q~Z
�
�a;>�{[�&7uO��z�.��vIc|ݺ�ζ���ݪ��XK��#���͑C�z=��V`A�ZI�%� �6�m�h�۵}�!�Kn�d��Jζ>>��5���R��
���U#����>�k��c������z7�
�w�PUr�r��i�;��`r��ޢ�O/'R%��֗�
�as|O
-�9!;zR����u4MaK�� E�Ū=���2'I,<�*��^єN8y����4�ks/ �I��&��u7RX;I�2�1~o�6	����s4
��VU�{qI
��Ջ«��i٦�.��(j�&f���ȴ������!��)�4��d�	o��t�0l#>�O�(KӱG�	�-
.��7lj[��M�bЖQ8���T�朏��K�6Q��Vs�X�u�Σ�g�������Y���בs�`
��g�_&�Jhe�y���yN��׻���W�����x��~�k��<3Y!]�n���
�
G6yv�c�`y����Һ�%F���c�C�Ýl5e�t��� ��"H��3n��pa����L���v(�_m�
?ptH�����
0HbQ�[��;	

�ks�@�DRD�
�>a�[wǖ�\M��v�����<���SsgYi�����j����EU��
Pڳf���
�R�kn'��"���,�:���?ָ�( �.}�
-����t+��N��nFf�4G>Zș��42���
�kӶu��$cR�0����?k�#�\K��{�â�6����
.�ib-
9C��2��S�m���;þq��U,����5(��ͭ����•��Z7����l��"�� �
�z��<�tKt0��uݚ���˗$"�aߪ���O�p�
�Yu�I��>x��A��@���z�e��VӢDn����-�ǭ�T3U#����k���V���,��;1�=ς��{8�p���̆)�ڝ^��^���ށ|�Vp�b&
;'��^�`ߡ�B���qDxi{��|{�/���Œ�m$���@�[D
���
bW�%�|�[0�KNRK�d89��}6Zx"aC�e�\y�c.xh�Z

𝋐��y��y��M�k�� ����:�����{Y�J��{'`+�k����"ʣVj�i
-ث�h�%)�k��ew�P�K����į������WX,�:]��!Z�n��U��g=��l�*��ublZ�5&d��rɴ0�
o��uW|�Z2b��m]���)YH�a����q7���
���W&�Ť�g�5��|�
��
+x:������vQF�d��Ge
-:m*z�;��
�n�椘��e�A�l�>	[3�u)y
-rp�@�ל��e�/jB�����{ZK�Xe��5-�>�g��º��N�|񹇣�%1o���Q�d�kVP�6`e�c��0�$�B٬Tk�$��ɨ3]��c	`Q�L
l's���y�*
o
cr��5n�=��b=S�'�}u��4��Fnɘ�㚄�BxF�r{�{"���iJ�M�
x��LP��,w��q���:�X�$��C�S��
U���z@��Ӆ���|p�r��@u'/�������]m�o���Ϸ�D��|��=�	,o2��pL$p���_yc '=
$�0����x�r�}o6V����~�8f?̰p��u�3����UK|6�h�t|�y��A0����0tY�����h�~�hS�>Q
O,�#�
c�>�
�� ���
��<����w�9���R�
�g��jc{��x{�9P3Q�����
+�S2���t�S�ꗊ
�cӥ�����2�c����:6aס�4-��=�O)��|3W���d� ���)�)� �
m�~{ �x���0�y�����Y�t�R���6�b�\u�\��
5���,A�#k�Dl7��j��#���+ML�;ê�$g�wV)7i��MT��z��/��Ri*�N��A <L�D��\��ȡ�
��Xn{P
-n�XL�w���t
��C����6�p�n�'�sl���C�3̕&+ge��4�׭
������~��5��9�O��6>�5��� ��$t��
�;��Q��@$�%V��
wXڈ���-��g�)eYl���yK;�u%�އb�Дo/�`ȥO�;��)�l`Ԏ2�l�g��G˟D�� ��
��8��#`�� �{�W
�s��/�$��aW��K��m�k��0�/�\����.���M�dգl=�HQr+j��
S%�����.5t���^�Mm����,���A�{�9¢��1���?��F���`Ab����o{.��^��V������K��c��8�v(��aٯB���Z�.E�ժ�1�s�x'q��dG�h���8�����a|��n��׉G�� �k��P��Ǣs
�t�XX4�����Ѕ'P
1��26>c͓_fZ��#�]�(�Q͂~���(��{�2A��	lޮ�n�ٹ~Q����x���ҩm�,���y~頍|�� ʁ��v���>U>��c��(6 ��@SoEK��o��#���S8{�@�i;ԯ?�0P��wu��[��s$�/��#�
��(`�#�]��k��?�`�bcc�B��SECI�<���Z
�A}��ya:	��Ĭã�%�0j*Nͽ_=��^�O�S��vr�e[�<��iQo:Í�(�u�z��b�5hjP_z��'�/oF����Ϗ:lu&��ؘ��n'-'�ijy7��K�d
��̦9Olb ���5��S�ܣ��xPd��v}����=��ƌr���U
�e)�]_��d=���ͧ�/����3le���j�<��r�N���~�~ǃ�h1�m/+��o��D��b����U

x $�y����O�{Z��H�d,�\r�9�M[�m\�6����RIkz������	x�{3�3�Av<GFR
����m���tר����5���2mt��6����ধ��k;�dꈱ�^��t�K�	��AIڿ�.��X?w�u��V�t`�q~`w���݊��xX-"�.m���9����
���
Ͻ����:h�
�r{���/����$�y
W�"ogZ�l�
�@,tڍ�i�}�S���T�l]v�̗�x
cYmd�u�Sh}���<�	ު)&�+�
��:Ѕ;'k͜'�q(��F
`���h��J�^����S�(,>_�za�k�I���m2=�c�:#;��t�$^���t.�G�ZMw��֯'�.�
b5×�)�D����%x�11�L*p��j����ഊgh� &�v��D����<�$�{�����p�C�?N��9�0��jj���׽����W</ o��9냇�u�F�5?
�cƚ}�ۨ�:8iz [�!�x���dU�=PA&v��D�[� ���ј;�}9XF��B���{��b�Ҟ����Ń>�:��c����W�(g��3��a
�
m&e&��+�,��jl#ƻ1�O�Fp��W7�٣�
-ۗED��K�Ռ���4O���mຟ3��^�*ֻ�ʼ�ͷ��+��-�B9��\&,�Ee����@
_+
���mn��&0f�Ucӧ����ܗî�{�;���L{����(W�
~��f�����	b��E�F�EA#�^���V)h:e����z��[DF�}A�<���,8��t���P4 ����ls:�g,��D.�-�R�#�����>V*Ȯ��d��m
h��ަy����
CD�k�V��"⌍�œz�㖹��Uq�!��[i՛͸�-� ���܄Q��z�!g��x1I�!-lQe��}�+���U+�M�V��E���S��*�t���չ"��p�w9"���~�#�F��hWQj~!<�a\��<�Q�w�/��T���}����p���uBWx��
v�
KݾW0�k_f�S��f�v
� }t�j���:R
�r�j�h��
��=
���
����q��ѹS,��r��5Yiݸ�u�1�Wt�&�����X�
9��`O��ͲkfL-4�V���熓R�+����6'P{���������dW7�q^/j�s��}�z�t]����Ӝ��m��y4��f��d�W���Sx^Xo��`�4�(��?�ϫv�W�����+%�YW�p�o��v�Ǩ��R�Q�HK>�

$tk
'��\j8��N��
��(P���l�G
���
-��s���WC͋c��o�}��
V�޲�P���_��
^$�IESH]��t������P滥���ҹ�/ɡي��e�q
Q�Z݌Wn�+�v���o0�
�vw:�J]sY7�����b�uԱx���Wu��xkT�����@[��+x�0�Q	E:�n��{��~s�=!p&u.&��u��J���Λ\
J�K	�k�W7��LjB~ڔ��*�}&��
J��b`fe�&kt�$q���`��_��2]^c�/�$g��!���;���l�>�s-
e�#��
֔s�OGY�d�w�����h?Sx��ʧ1j�5�6
��D��ްv8�W&-,>ʶ"�ڊ�	�em#5Z�m�=���"��Z�q����V�X�����`'iM$wIZ���4�[%�P�vꚳs_�f�:��wYՄ��7c��1�Џ�ײ��_�k}�
����;�����;�]m`��_��#[������:�ˑ}����	�w�oX
�G�noG���֍����Aق��X
ij]�>;�h��SS�2o9�����vW��6�����m�����Yp[.T0~N��hRAn�#���I0�V[g��
-Uv�����ӗ�IU其�P�;������
�zE6+�5�>�wz,.���.��He��g���e�=�N�z���]߷_e��i�
��}�]5�
)2�IQ_;O�@;j���޼
�ھ�
��:N%���l��������Y��GX{�����Z�:����:ص�����)>KS��s-iH�Oas��l�1G���
�K�î�{�;Ǩ� "��q�>�{��Lb�0
�2*2C���t�x�j��nrz]t�l6��P۰z�˃�9�Th�A��FYLc�j�eS�Ӫgg��Ǽ���1��򢕙^�M_#����'vZ@��5�K*����f(%M�o�cԅ�F����~7���W;�^�ZM~v�����N�ۍ��}
���@-���*�!no�ł���KT
-`
߲��R�m�����i}
-�E=�*:���%�4�`ە�g��O�ʙw�Pq�Wv�|���lg���hl8��]9W����JW����>��d�k�9y�$�
5O{B���/�ؗ����V飊:��_�&
DZ�u�34Xm�_>H����I��PR�
���׷Y
s�
����e�
8�h��2.�er%,'-��*al���j�U<n���̥��Q�`�T��-(�w�\�+'X{�M�}��ҭ�c���� w5�����UO�u��f��r�,��� �N�j��M�f�Ю���/-�/*�h��m���Y�M��Co�����`�Z�e[yLl�Ϯ<�/�V�9�(���[��g�(��\*����~�ž�ڨ�^f�}vjN���U7d_�_A��>�5�q���~�
-k<&?5=<CW8-Eg��>�f��l׿o��
+֪]d��/��ڜSMeQ}�R� �c�8*���w�H�*z��K���f�j�Ǔ�UN���H�P�䙛&f�C��#(�
��ڳ���я��W����/��=�
^H-8v�� ��W2s���'b��/�������{�闚ʑ�Wgg�6���-���d�p�[ڠb�?�I�������A�M	��&�e�Ft�;���
c|�X ��y�[���-��c�\�9B�\�w
۹:҈��n�uV��nV�2j߭�I�W�0p�v��>��ָ��D��2��v#�,��7��G�!�D~�M�S�����Ӄ�sp\�"��0���e�>��dwX��50s9�r��K4�^0h��זּ
[�v�S�c��{�ω�H+�J~��p���1>2����x�ҙAg.>����Q�Q![�'+�ԡ�,9thN�>�+EMy
���
-�br�K������n��_�S�(Na�<���"�ܭ�ZuU"$f3PC�y7T��v�.���h�in�
��^�8N��r���`��8++���˨�оr�1������絖6��N�R�
��ͪ5K۝8˘Q�q���ͳ\U�xz�ߡ��\~�Q�g��l�aP�LE�K���A��'
����Q�����P��,^��՘[c��e��*I�a���:�"=�I��t�~�@��.���o��f0��&܄?���
O��Iy��:�S,��ݮ볠r�D|��P���5w�w�W/��#�NF��b���1�
�>!�
7�d����t��1�VX|��)�����[G5KP��#���ڜ�T^'^=ksϩl)
-��0`�]�U ]J�P',v0}����(|ݼ�
͊=���1�R.�]�J�[3�W�3:�W��
*�|^:�i��
65��E
8��%L�u[2b�|���
�����֞ﷆ
���i�E�އAj��
-��4ͅ7���
��st	�����[�,���m�FS����wS�B�m
��
:5�N{���5��t[]�OԨ/����
��8`�ߣ�g`����1c�
��
?;Ҏ���H,�/�ݗQm��E3�L
�M�������q�;WJ�t�o?��@�c�;���͓^Svw
;����U`@+��Ϟ��wF�)^��%�cs9
��X�[]�J�VY���fͭ�l�mp�#
���3������2�k�(��O�a�
p~/z���;;���S'f���rk�	94�t��NZݻ�bխ�a5$��;�f��/[�L���hu�V��*[Yoc�\'�~����chF�ah��کd�xԭB`;���`-�#�Y�xM�Q������0��
�M�W)�T�<kٵ֥���8T߆� ���1(���k��6i;�:����_���q]�u����rY��?�#b���D֩vj"�G��;��ڷ����k�5aX?�r��`�|*K�g�v�I(

Fu
t�f�ev/�{��v��_
�@i�͢5奏kJF�Y�?�Cc�e�Vř,�
�?y�
���͐[�pQY+W�t�/~
�@r��v��z���AX��g��
N^Ε��|�jʞ��
lQWpMԆ
�������Q�+ы�+��E
��V�_�l3E���j��w�96��P� �5����
���p�]�p�`���ÍFgw��æb�
�Gb�1�ي�b� ��uE��~�&�t�����Ҿc��rױ�T�N���h�*�yf��^ӷ��x����[��C
�\�VS���;���N��yc�N���l����f�w/6��ó��9A����zķ�_-�I~�kP(�]�������������*J�
œ��T�ލ�o:e��
-
ml��Y���!jX�+ܳ`^n�3{���w��!-5�TW���#.��(pS廏3��,�7x}���FN����0(��
cސ�{����t,Kti_�m)�"N7O\J�YL1Ј��)�_�\qD�C_%]�.d�_;j9�5�ɪ�,_�6���}�Tj�NW���b崨$�7¨A
�qS����
�2��~S�W�=�9�����@\�3x:��f���T��D������Z�@�om��u�BI����.���u�&����s[�����������{��v�	|I��-�:�;{��Y/}
nn��l�9��[5>wdb}䕸a�"�6�uBD�qi���F�{�=��]{
�Ы
ݰ����.7��t7m�O��33�|���?��ɾ�sy�a5��j��ctFF�o
�T6ed��z���
�J/������l#K��%6���(/!
o�f�&c���[ ���45��N�`�d���������l�X�*�Ց��5Z�Z��ٹ�
���佪
kin1��o�B�./��5KL�`^�bt��M��E�1(Fߜ�B
-�H�f��󌹏��_�^
-���'Oͧ�m�"!������
�%yw>K�
Z���
��$I�!���t�O~UN^dQ���
WG�ߩk�Z�y�-5�
�a$�B���gC��c7��@�~QE���'g�1ݍt&w�鴋Z��fǓ�}��Uc�$Yu�+�i�
��x�)�,lv�y&���R��R�V�d����b�a�_`�wOS�N��s�]U'\��:�z4��tQx�)e`T�_�������ݿ
~۲`����m�+�Ky��$n˷�n�|�I
j1
L�Q3�W�
3i~!B��&�o�4�`�Y
n$���T5a�k؏Kc2Ǟ{��+�_��ViZ�<�
M�8;��_~���%ݴ׮�
��Fu
Pu�,�UXbnpn������}<l��֋���v���`���e���\����:��Q�1
A#��9j�W�?L��ho:u�m���+�d���k�O�[��1+�c�Z�)
��}+ �XV��HL9Sb�
��$�昼�._ZuCgɾ�%+��W�[odp���l�1����0GR��)����_G���g �F���(���X�Io2���k�T�³�>)�Q�1���w�]w��je?F�)���LU
��Y2��W��?��X�nf�X�u�OUK������W����[j)���:5?䆻��ќ��`��Ib
̴�"��3Se� >j6�&�	%��J�	-jc=5C�&��௪Eǔ%�&��)i��m �B>��
��%p�ڑZ
v������~�S�ݟ
6n�-A�]�U����_�]A�2��)S�y��m�l��+�w`aFY,
��z
9�dT
�m�M����-��}]����^��Rv>}ep��Hckx��ZY�!���
-�"Z85��Q2;���&u+"��t}�eX�k��|`�U��Bs���Ȅi-�֍�0ImbŠ�"%�~PϹ��
%|�	D�g*~���䡓�� �j���<E���G��{�?���$<�����=��ի?DJ/�+(n��/)���xXG��C����M"'zX2:��TͶ?nyN*7�t�<�|��*�Di� X}a�Ll��e^S,o��_f�[�q�Zd5�N��tb����tU�+�N��R+��XUJ�����“쭆g

���[室�>U}�����n�BUɰb�_�sR/��O#�{8�UP�*R���
-`PBTU�{sP��q�o�
�S&�nvٞ�U�4]y�q�H`�����
��Z&��A2
��ÍM#�V8�ht|�A��6����TWJ��ً��WpB�(D�����{�8�
���cw�
-;��������[Y���T����,w���i��c�Ѡ��xg-y(��ɴv
j;����7AGEog��[j���lxp>�
9�-
-s:��僓2�X}H�-{J�Z�� ��{��ܭ
%R(�/���

�[u4kK��1O�Z*�θi���IMۍwI��C5p�g���M��;l�
;F����w6ҩ7�zPj����j%�!J:CI_6��h=�<e��F>��=:��?��F
-�����"�)L��N���]l�t��tƜ�A`�R����Jպj
9�I�O
@��AV���3 ��|��	�U�Sz�q�N{;��~3�x�h5�PMY^s�NN�'�+X-�.(�_ ?�qB����R��Z��~����4�_3�
���Z��+�W�k��p��?�1uѢ�f	L�_c^�+#���@I�1��#�$�9�܊�
�I�n�v���"Xi}��jg:������8��`�mMn��r�$
�s򰴍��~e�tm*er�MMy�
Ls^SXm��ߔ�����[×����Ě���s�L#��x�U�ư15BqJ;��h
UXJ^�0����Գ�Q��T���.��A-�N�|i�F_�Z�����d����FL��EW��s���ƞ�E�>�J
�W���ʹ�qş2m����6<�ǏKF
�
-a9�K�g�ɽ[��҆��u,�xe��{{6 �|���bַ�A��Z����_7�E�g���O��D{���PC����8��	�K4�`�4Y���X������wE��V����z�GT�
#O>kh̜
��=MTto�����4T8�s�+~R-�jӉ�O��1W�"'N2�ˮ*�6�R�KÏ��
���I�B��ױ��|��H]�e�
=T�����q�kD���ٷ��h�o�%��1��67�_
ܣ�F�
�>
����h42~�l��dk*�B��?����N>�g����t����E
:vXn�B.�:�7k�U7�
��v�{����[Sۋ�y�ڨ��ʐ!�j��s�[��j�&�J��l��c�T�Oe��.�bht'�
�e�y�
]w���Kɶ�H���N��aѸ�[@�7�9.�m`�+SLo�@����
��@�u>/C��q?�fv�Iu|K�
��
�����~�mhM
צ����N4����_�Ͷ5���]v�z��?�`
{��c��#�[�k=�#)_e7��ή>�E�@������[O���[��ZA=?k��d�>0�^0����{q5V{H
�|���㳦a�4����p���Y/��?(��.f�&)��Hag�7#��A�x�)��
��v����������}[˧|�d[^�
ũ�b���U�
{�[����zu�a5�<U���AoI�ٛ�I�o����f�p+�G�߬����]罥�Tv�Y��?��s7�ꑸӃw��A�Q��%;�XpG���c������=�3.�p�&���a'� ۪�F���v�ߦ�����/F
�״�!��ȁ|�/��5�
�57�~����o�kei(�f;�2�z���Htd:
]u@�0p��!f�s_�u��O	Y5]�nE�иl�}K�
���=�u���ɩ��'�.�y�[�c��:em��3_�ר�s������8��gԚNN�Ǧa
-�t� (vPr��1�l��@�X���}���]�k���]9J4��A�}r�k�P�;��
7���
7f�z
:ٻ
b.�%���Z�s��;��Fr�s�z�sf��7��Տ��m����n��%�o��
Y�u
`x�w
��0�n�xT����om$ȿ�
jy�)s�9��0�zi:A�evPF��]��k�3nݾ,���ܒ�
�BS^1��٠�	_�m.(����,����Y�鞑%Ѻ�d]S�o��O�9dn�-I}��
� ��p�
��ӎ$�N��SO�td���]-�D+�aMW�ϫW��
�#���
��q|�U�!�M��^fH��&�i�O,�@�~{Ect�?m��ih�X�eS�����#m�s�hk'���dv�t���a
-�u1���lދ4�5V �����ÝNF#g]��%��:��xn2�{�]�L�/3��y��~�
-�B�#����i4� �]�yA�t��0����:;�����1Ni���hrָ^�b��eu�F����MB�;�uǻ׎��*sߨ���.�-m9>���
����&؋���j..��
/�B;~m�HA[�]zk#!d4�N3g
�k�:�	_^V<k"�1Rk��Je4W�t�����-{Ph�
���"��*Q�������DЛ[~ 
��e�W%�y��{/_z��o-���Ѫ�Q��$O��Y�q�I� >Q8y�6^�-UI�avEy�`��6���ES����{�5�䎬�6r�j�C���
&�q�n���Hs�T�Ci��}RFѺ���8|��U{
�
t�55�ʴ
��O�UU�I��k�
-i�����Ϧr�Jz��V��d�{�"i��;YW�"~-�i~���[�P5�C�g��������b��y��q��a��Z��^��d/,8!�-�YD�gzUd�\j{᣹A4k
"��f�ψtƦ��I��8���
��mZX�d�F|�˻J�bHv�꧝���W ��H*3��
�t/Gd9j��W�i}3�\nž�
-?���U#���������^��8�;;���X#hV[
'������|��e��k-�<�N��Kd��|=���=0��ES$��[#/iK�:�:3�M�����Y�.\@.6���y(��!_���[r�.N��x���@��.�����\(
9����:@ "IK.8�=��r��QQU��T��һD?�k�$�/��Ϭb�ǍE�K��{"o��U
ʘ�4sr�e+*J����=yM?�l��E퐿mtLG)�⸭�G���%�4^bU��ė��c�^r+u��sF6�ŀ��0� �����Y�ko�v
����;�b�\t�ѯ��
-R�ԏf[�	�h������O/�#�F�S�N�
-����v
��I6(�~
H��a�Ӱ
G��
T&��Q�*U��UȺ�Ü�:���K�1}I)�q�F~p�1�
-����`q
�]/�����A���EP

��S8䎵>;�˔�O{������.��~
���{�ް;��N��@o��
}q(p��-e��Fq���r?��
-Y���w��&O��m
��ܙ���~�<#r
�$�V����00�2�p�k�o�ٔV

-�c:���c��eU��������,�C���
��XN�
{�N7�˪��T[Po3|^.����:"���
��
~�J}<y�ŀD�k�&�^�����jz��Lm�caat2X�^����
=�_������))�d�Z
�vw%����F:z��*���L��T��$u��
��ۛH�z����2��hx]n&ʛ�Ͼ�^'���+��p��
l�/���u�����*�hB;v���-���nӹ�h�V�
��}���0�����V��Й%Q#���O�\o��Q�C�,���h����6��:_��r
�����sΣ�krU�Է|��h�˨������+�%�"xeJ�;���2m��A��vU�	�+f[��OǸ9�t�T��ިb��4$o�X�)���Mo��͟,�}7#��̆��6޻���t��FxI7�Y�B�}�5IrՆ���t�iSBUߜ�b���5�<��
-���a]���Wj�U��t��˶�xͿ:>�0�����
���wRXK�͆0�X�
-T�
�[{2<�ͳ���Uj�!�<��*Ɣ�h�Y�--�)���
��Uv;x�_ɺ�f^"�5F�߃�L5�Oq��7Ҍc&
-��7
P�s\W�q�
�x��~Q�;=���r ��|CҟĪ�����
A��i��� cXe�xL�` ��MUVV�����UyhWx1EH��1Q�4��^J�u>��QG�\�/%W'_���Lk��W9U���0U�mɘ p���03��D��:@�������g~�& �hG�l�&r|N�Z��Ǽ��0�%��r~i�GL�(�q�[͒a�-���F�ţq)<���y����u��y(r^�����@�~��̣�_)x���)d�mCK���^!�)U���4�6V��
�,�4QD‚l�����4��߼�G�+�����n�O�"v��)�
��W����߁��,Բ��^bٮx�ji#���NY'�kD�C<�cw(�Ԉ��}�7�����rf
�ƭ^2�4��j�����~���
��ۜ �
�ژg�����)�g�����)��p���v�YYZOlɯ���h�\�׌�/���Յ+�k���qW�Ȱ/~~G�v�AߩyQFN
��񵇐*_T�{%�#���?%�ɴ��)�v
-[���ț*�)���|��
-�9��u}Jx����k��k��m�	j�G�lŤ��LR���YE�d9B�4WJ
-�#
�k;�w�Bj-~ϑʋ���t"�>9�x�
ܕ�Vv�U��S�ky1�bN�,Yv�?[ƟǏ�}{�\
`xJ~�����ٖ��]�3�<Z:��*�y*���f�$o��E�g�PO�*�� 
�[ø���_���&
-�=$^{��ׯ&-qG���rK��{�t�Vy�-�7i�x���TL�Pk`��alE,�F�����a�Q���Jv�U���
v�>Ԗ�/Q&Sx[�o>��"���x��o���e�1}��j�9\#	Zi���(p[NZzVd
���H�
�<��|�3'��P֚U_:�3��O����:]}Q�^zm����?(�6.��A�01s�E��@U�gĔ�
Ѝ�gHtc[Su�a���–��l���յ���ʧ'K��)j��/�7rv~F���As}/�h�W5jHjn���2�ZKZo��HG�L�7j��,%�C%Pdc�i#�t����TG�3TOw
�"��&�Xݽ�]>�����
��C�{NL�¨+�qR�
z��^����rU�M�E���~:��
�9�W
���7�g���i��j!ћ�Z��]Q���.{c��
�;d~m�`1������
$�L0������|ҁ�w�mI�{�]O���\���M�`�����w�V��b�w��G�@#\٩�/�wV�-�����6&��lXβ��߱��&PU�4'�
���4P�]d�:q������:1��:������G�b
����FD�o����?spRh�
�^�g��ǣ����a�u���V���:�4Ok�P��<
-.f#N��灂��l��v)P���
gm:����x(�2�P����;��Ue%��^ۮ��C���"5��R�'�z�m¥���*�n��@�x},��f�Л
,#��Q���r��	ru��7ke��
�zK>^E1ɹ����
��%2J�u��k��I
-�|s.Ы��8(P6����Ĉ������օV-5��V�f���/Q��O��E���3�&�0��d�:�aA�E;ҧ��7�!�<�ê�<�f`��c�|p;�S���&6�e�B�cE�ނ>�^�y�c
�:Z�l��Z���o�.���mLh�u���w-d��	��׿׎�m���P��m�B[����_
-�v��}ܵ�{uZ�ӪP
�MG��3������x��j85�+Bj</xU�w�
-u<����j�wdM�OrO
-Z�d��Kv�W~���|�
��g�T_�Ʃ�
��ʙ�������4I:���9�,��̕��4
P
�͋�H������P#�x6"�E�@�5����
-gX��J�=�c�[�-��ϱvz抿Y�Us�_O�@5j;Nf}ϵg
ʈư<
֯��_3U;�q`�M8�moriۖ4%�
6��f���Em(|�
-dℱ��]\�
�#2��Z�c�	7����e����Jߙ�3
��zvsAdҺ�u�+>�=��WS�&*� ����t
-u}�:����.TB�%V<�I��/8eK���7
�R��Ψ�<_��P�M��⿽ڕY[W'�vo�����o1��[���y7��z�
�w���aj�2y��Mۼ9N�v���Ή�.�
߃�^R��i�W̳�V-n��Ec�5v��%.p��/>-���yC���L�&�x��u�
@^�3�����(�����؄��WZ��e��QZ9�	�,�l�!�7�`�O��g����v�ތ�Aޜ��d��!����/�àuR�
-��5�2:�-�)�;���MM�4&��b\�g�K�c
�3�
+S�6Һw֊��x����ǂ����i�i��z2���0-~�R�����E�Dޛu'��qp��
#��Q'�����S,�~�R�UǷ�#Z��F���J���P�J�I�f|��X7�.N�`�����g����M�zuR���� �:/)�
�
�]L[/isS����+����'�{��M��k|�)�HnmYJB�"{X�6kp=@K{(T���;-�V��
�S1W���'��ũ��J��/��F��l�
dzp�ƙ�w�����?��u�����Z�n��$��#g�
,1;��
_T��Yo�X='��wt�a�B �����^D�Dwa����A�ՇS'؋<^��
��"W|4���
�k|�PGҗ��pץ�f؆{��48�	n)��ݶ�A̺v�q��@�Hf
K���V���k�[�_q��
4r�#м�`��$�쐕0� 4��<p�V�$�G7��3�T�ߋa�����ۭ�^q�Q���`��;|��
�������Yӓ�qt���T�`��3F
+H߂e��G����<m���>�����{���Xu|?�̷2���a����\��t?��|2��=�� ���ֿ/p$��
.�2X�53��WT��筧X�)�G'�}�
�¾�6�B�cÂ?>J�k�%�~��R��Wq�n�ܛԗ���X
�m�6eޔZ��u�csE���Bz��Ķ���G�B�`��lYвŷ�?oF�-K)�9�ɟ_��ɦ6a��
�J�m����a$ei:�U
-M
-�Yt����^�K��.(QE�m:='J����"�����6���d�a~e�o]ư���j��Q۰[*�r����j��I*�$�sBVl7C�Ϥ�S��:
{z�����Y���Rux���+�*��z����쪎�y��{/�GC�R��~�
�=,*�IE�nj�E}J
z� ׊�2�њ�������W��E)(������DٙY+Ph�������@
���5��7~�=����W��
-��T
�_�)�@��? q
?���n���
X[`�\�g�r��E���/<}cy���D?�y�|_���7�yY#}�Z�]艼�����
Z�[�&D#�شA����/�G��)�p�pj�z0�c�G��|�QC�
-��֍������&"|�l]|�Хl.Z֤7Vr��ʜN�>�
�(�D��x����Žq�H� yi���_
�d�њ���&u�/~���ʧ��[�r������H�,pצ�0㞿�TSbu<�
-*���>y�ݡ����f�U����&�
�9'6�z��
-V����9�{̺�U�a=�<�=5�N+��w�:�x�Vj�����J�/mA����<:�=�/�	�����@�tn�>�q䴧P�;�ҏ��ld6gs���n�&훍h7�u��CۆGŠ)t���3}��I��eW|�8�m���|.��.h�#Ed����A
��V6�Ѽ����x��b�4lQ��8*��Ě>dľ1W5�56{P�o��>
a�<f룄?�����XwܹM�)���qt��*�����7/Ã��
-�0Ls�������w#
n}E
�&uL��Y�֩`�~�
TF�a�5��KnI�8b�ȧS�tg'�����ܧ�"?�#-�
-t	;�;�}G\��ӛK�����3yA��l����OF_��Pr�0��>�b1�^w�Y+
�N$�e��:s�0
U������ù���UT�DĴ�B{�5�"2���c�ȓ��/{��ġi�*�QEv�kG%[���]+�mjQ7T�/���
����%�qi=�
T�.����
�p�
H��R1�R���ba$
�ƚ����is���Zi2�f��f��
-h�y��>� Oo��y
��O~ګ
���ri��%wI�2��&L����.��a�h���tL|z�Qk������	Tp'�
-�j��'��|�
-t��ΌQ�o�Qr��z�MfP0fw�m�t�馑��^�X�
���
\{U���L �6�����r
����_����[�-������BȲeH�W�#ec��;C�u���g�+�r���J]Ō�I�o��hU.᎟
{�ܓ�,N�u��[�Gg�{�׭�jM2�9'X�mM�T��׻�]kob�?jW�Nt�BL�J��`O_�M<��k1p�	�a�SD��%8�#��*��w$��%��=OV
-��T��c�n
-�W��Z��=��
-��!����$��r�9����+(���Y��n���Ŋ��G�����RL��(�j�
?jǨ�����I=�̭g�� p�T6�p�<p��Wg{����$yU<_-��� m���K]�r�i���^H����I����i�R�_vZ�4����
-VZ at 6w_S�v��*5%�O���\���OF��/����}�F��1�
��¯�)�o��� ����ơ��ȒM�A/8׳�3S�D �yWſ[欫��T>
-%}%:Y!�<��?(�M�仼��
���77���
��as�-����h�������4��6�z��$��!a�]?n2w������ÝWS�OcQb7
�O'��u(j�
p׎�5[:Ӓ���*ѵi�n�7v��r~K�����s��ȫ�6
-��@x�QNQם�$�r��R7
�`	$����?h*6N
.|1
��
㈨�P{bW����Y/�E�
]e��?
@��<�DZ�x���U^l��#i�
 �X\����Ŷ��e��I�1
-�
�{�E�0���lQ|
G�`�|�st�Y�jA
�
�Q@@�9�`�9t��~?�W/��U����rc���Rc]����BSoV���(ٮ�� �EPo�R�
V����,�u�I�d��moAϕ5��]��Ծ�2\I�9[Zq��j��{�j��W2*���;4e��#pa�\A
��ۨq�Tr{f��"�>g


�*n�H�
� ���� j�����ʠ�K$���k�a�ٜ��l�n��#�
�?���Iu�	Ur�i�1��@�Q��j�Z���)���k�nl�I��NA����P������3 ��/����q)�og����'|
-B�LS��<h��P9z�V�m*�7ף�>�%��L�B�O��_]��l|��t�@l���^&
����6`�0R"E�~Kvr�[xx��dq��Ƞ�£��A���z�ps��JB�^m�����EZ
p鋂�4����0�є�ۦj�Ⱥ
r嚬t,a��C�A
z��W�cM�6�]����
�]r}�N{&t�f
�)^��4�2ݙ[�[��t��S�U|B��xf�e�c��ZF�
�bҋ!j7��0^�{���f�F�A:I
	����pQT�J�3Cyu2O������-�[K۵��j�4����
�|����w��66���Zs=��]�$�E�������M�#��I�n�������y,�k���]�
�(

�M#����[@!����&:�,杙�$ �|�*	2
㻝d�JO��9�2m�Z�6*�e٪���_�}�-h؇}&��
��q�!��q��[�KKBe�}���v`�?�g��X�`�(�kE�h���&��D�e̸_
�0fȶ���
�u����x�]��|� �.�d�"
-�}ǃ�њYo~K�F��c�x�#�P��� \0�RI�nr4���cl\�6I��Y�;+�7�$�Rύ~�~3�$_
�TM�N�I-Gv���ӹO�G4]�0Y�܏�+G��[�s�28�
z_��#kZ�;��e���� ��@� }U4H5~�����UOG�4��&�wN8�t_wu#(��*���Fx)J�lC�T����G���˃w��v�Z`���nV,voK���֍jj��ʷ��w�g�-T��ͮ��Ϙ��&���=�n��%��9
�>���
i�
�v�}!���������	'l�����vy�l��녅�K��][[C������Ȥ
Y��8
�X�w'�B�#���վ��
��`�6*DpT����p:7n�o�n�b�%,��ދ^�*F5�q�_�<���ef�4�^��ُ^[���
�p�F�}�X5���*��B��V�����84|�i�,��۸Pp�Iske5��ه���U�n�?�~�$�o�j�1�,
ޭFx�v�U�y��R������P�H�r�.���������-��Ɯ�E�O���
2�b.�
����:\IpdUJ��'����9�tk�k���.u��C%�	�Y�sx)��v�i�$L��~�
���ER�Y4#�,���ï�Dm�<�5|�D
��ķ�9Ye
-���쨺S��-����!�w��~�Z�G&NmkW�M(k�
n�Q8v�
�9
�w�q4J���i��`I0N^��6�s�k��'P�� s�^d���/pw�-��;^�2^�@
+ޯW����
�5d���OLφ{��8MZN�7���︱.����¸�R\���.5��)=�:�j.:����o�r�:D)�:.A�[�3����G�2�_\�c�\wl}-�*��4�+�B�$K���٩��T^d�]��^#��[�sGT;����R�J)��/݁q5�pXOo�S��OHӉ�L�����['f_�{[�[��
X�f��>�sI��
�z�䤙LA�
h��B�kT�}l{q8��[�
��8��r��;�r��b��`��%�0=r�њ3y
�������5����-��uT�>�A��X=,���p��c
��R�.d��a��Ҫ�v�������70��O�{�9�z�
n�zpt{��{�n)���y��4f
�V�-ԟNy,C
���ޘ5��Ŏ���y��?�S7��PR	��
T� ���Z!2�o��t7Sz{�
��uoX [...]
-�@��M�m8�_[���]����q� W�UG7� ��^�k�"m�
q>'(ӽ�E�|'pt�j�^^@d�mD�O\ڭ�
-}0�S��}����;s��O������.��`HF{��Z���2g���gnQ�I0B�sD��?|Kص�66�z�%���
��2Q�Ѷ	�~\V��=$�dO�7#W����9T�T���t�
Y�z�-�A��<�:���~����8sz1�
U�uT��l']��㗷�U��Xф�0ޅ D��q_Ú�SF�i�.�����6�
-�k��W�{�J__*䓫�Y��D	F�U0m���jY�v?�
��c>�v`�U�<?�V�T_+��!7�۴�_��ػz�Ni�>Eѝ�e�b��F�<��]�g�F�آ[wB�p
k㘒QZ.
��q��	
-��@��������#�̏�����H�7�� ��"�Z��z:�7�xу��_�ۜ��ȹݭۢu�Z?
!�`Y����cxG
-sӳ�]�r��=���m~+Ơw�߄f��v�Dx-*LI￘��>
BQ�`��䶈�2�p�\9Y���m3-gi�o������	��X�Us�ٚn�0�d�?,�rB�>ܽA�
To�#L-w߲����C�&���Ф��aP��Q�kp��B�KAu
����tc�ү����QU�o��6�{׵�>9*��0H��2^j�)m�O٤� ���Ko��\���E����
N�W|?egLt�7����ɇ�A�h���*NZ�a�^:��7[�!x[���1���L���%�Y
Q��:4`���wC=�17�v
��Ng.|����7m�.뻧b�'_��K+
�1R``��>x�h�55H�)
Ru��We���
+����u����k=�m5�V/�q��XB��g��y�2'�kݎB�ƹqh'�~#�/kΚ<�B0
�ͷ�X��(�{
���xZ��(�[�‰���b��� >�
U6
˭��H.X3=��y9�����a
�v�iR#����/V}�YS���t�8H����?x<��/�&���
8�
���ekR��� �2��`�˲+:p�x;r=�|%��u�w}����E���G�kM؛� f�i/�ͨ(���ۙ��JuAѤ=]>\bl���9�-�{'���0��b��������v����Uf����\?�aB�v�w'o��w�Jhp���w��4���*W�
�TUl,�3�
(�ʣ�r���ߑ�|Z�.Z'rZR
;�:Z$�O�W�s�\��'Kviƹ�.K�mM)
dO��8��^u��w�
-;��߉v<Ʋ��1�ͨ�Ϩ�A
[�žss ����F9b�7����y��u�a}
��W��o�c�nj7���8�nǼ���YV������6%�G�;�I�t�έ��\ FEVn���;¬�J��֫RB����k*m��ԩv�x
��5����x[�����]�J
-ڍPq)�ggܨ{.�N�[�'GO���tfo~�Em(4&|;�.z��$P�q(��{]���/wřrB�mo��en*s���2�!��S~\�~��ڐ��GR�5C1�۠s�RZ�S�5�E�M�s�>���V�%��Cr�an��D�	
BRPxyt��9�
B�<�:5��
_�ct8mTE荃��ݞ���{ڦ���t��87�O���١�
�RE��uJ[:����u�&ñ$���":�*�
-�_���땏
��QZ��)O ���gMM�ڭ��Pq���Me-#-Wkȡ�>��]{R����
�Z��[�d<[��
-
'Xz���r6�L���۩���l�H'�WI
UTgS4�C�'e8��{�X�V�(�%JVwg_y��}�2ը���� ���㇠1ږ	](�nw�tpS���q&��9�Vg�����*
�;��a5
�$�kVr-
�kE��v]�Ʈ?�g1�'[А�6���t��u���ɝ�wF^6L@��
c���Q��:8�W �"nQ�Ur�|ej��
������H�|s
���t���N�e�i�׮{M��S����r��:(�;�m��;q���a�4Z˛��T�VZ=?~_f��I�Ӌ�
X���puK�z�i�>�oI�䷰�O��=����
̗���41��Ni%��3�׬>����}�"��Su���HxФ$'k������M>BMryi�KKN�� ?��O�؁O�OB
HU�Y�](n.w
=m
/��
��_���3��v�ų�W�ˡc�N���S7�;CU
�)��y35�ՙ�X
ALϢ>���|�O�;���>���l�%z�JN ��v��|�j���c������
]�g�͂��
-�����O
j�g��A�sUp���e���¨�����D���إ��I�F�(��9��"K��y�
�{�a��11��w�Zч����d����>��r��W�
V雮�ɑ�1��]�
,�ü�ĝ9���5��f��8�t�u
��v(��sԿ����\8�
��X�{0Mɻ��7|¨K�8�yOl�hY���JR�g*b6�D|_���ș�}�!�w`٫�S�9��"����q��H����
���L;�K �x�w����h�꓍�|�xst�&���}
��5�8�qDb�'�Z����˲�{�E��)CZ�o���c�K�
-�0�����nY1�p���wV�v�\�w:ښ�	U'��!w\+��P*Ɏ�m�5<
�e����^c�����n��<Lֶ{[iQA�_*1��+
�`�&ml^YQ
��4�-�y�R��m���G���[?�٫",:KK�
-�֛y�:�cӊp��j�zU�����VR��k�o���֖~�ml��َ�Sy���j��O�|<OC<��B�E��J_Z�Y���z��(��,Tf��G�v�c�tL�b�&e
��:/�\�
s�slU�5�Y��ȍ��:Nږ]�y�|�{��U�Z�#���#���&��c�Ɨ�
B��4{|�ݢnC
-���CcU�+.j9<��?�M
JF��S

E��7�KC��nj�v���U�i\w�io4*2�C�w3l��v�0
s'�V��ɱ�|���3��Y�[0y�1��)�U)�]G�O�c��>��p���ژ;���,�4�_X	t�u���:W���3~�����/t/MϐZ�a��v2ߛ��&ď@;t��U�i�®a-���*��ҋn��D���x�����׿�S���܈��u���em��8
-���3�DCAv
��7��<�[�ᶿ�F�6�

�9�c�

g�����
6�}��d�6
� �^����U����S	����8֩|�#h��x�v!�S(Y_�7c��?l��o�h�t�>k��I�4�0��5��2�۵t}���
һ��B�MX�
f0�F��7�b���A~��o�9������@�9�a"��j[���-~x7c�mؒ98�˹�Y5fp��\��e*�����
ekـK:67nu��DJ#d�ԍ�ڥ��3�nݷ1����H{<��
�[C�.
V�bT���i�l�kݽ6O&{W;
-Ok���|���ξ�����"�%�9X�cl�pgM��˖_f����������ۖ
дԡ�������\���f�.���1�Ϙu�����e���Q9�^��E坾��
-Z!�Zh���6�}�7��b*q�@�O�J��i����Y-ց+���T�bu���L#.Pߋ���u�/��]-�Q�������m�!u�
w�fMo��}�Ӳ0I͢#��\ ���F�`x~�{W�T�ˊ6�
�r
!��Ts� �
-D(AM�24��M柷�aמ��H����->B:�,T6�j
��F4��|��G4�����aoU5�Ϫ�S�i�V�O�M͡w�î��IS	uɫS�ew��>��ˁ��N�cS-�i:�e�#:V���1K~
-���Ϥ0�������^=u�5�.U
.������r���F4[���� 
�ks�	���CrO
5�^۰���������9ǭ�~�����j0Ѯ0#�[�Se.����]�
w�bW�^g�)j�.�����9��n��f�{�Ni��%ј����+��lv�
�e�".\��]�p0��R^�)3Nj�so�y��l"��w�|-�8�����B�����x����Y�a3l�]��Y���.!�R���攟{d4u�94�g7g��{�O/��h׈���5pvͧ.�.�GD�T�i!l�gO�E���'�t�D�O
�w�6+�oP\��
������7�TW�
��U�����wdq�x��q���J�Bx�-@���O�W���9fhh�,}�5Q�#&C�Q���,�oeÂ�ԫL�~Oy���?��}�vOYc_$�_2�1z��h�+����{B|w�r�e��
�?�Z�RG��
=�
�>3$:�c����	
q1*eFӓ��K51�?��Q�W�1��$5��}�3jt�}��53�����~g�䫚�Q�jiSX��%��_��?('��n�Ѹ��fn"v�ً��]�t�h�"/��.='
n���L�,=����	G"nۯ��z�lE1��aؓ�q7:7ioH�j[��s����_1����`2ZA�Uܫާ���B�k���+���k��V8�Vΐ�L��^�#��jm�;`j�YY�!������
-+�uG�M	=�A�� ���W����c?f{�ѻn��
:����r*�gd(�1>�?h_	����=�r�}��#�w���M�Kͫ��F�$F�A���1�V�e1�������
����/ ��h[���
-/���)*
�ܥ�cj[�5��~c֛��iv7~I:,?2-��z.˥Z3~��Z�'���r5 *��b�H�6����
��iG{J1�:p���W6�PQn����*�X�����4R�u�{u�9BƁ��=�N��a����=ڋ ����UaV��
R��\Z�]y���\�b�n|{Dx^��~��}j�^�
d��[��YO1��ڄ��,fŶ�c��f�����u�i9����	��0Ǩ��Fw��
���낎�xS*-D��vg`�Q

��G�f��WD<
-
���
)���
&_����".�|�s���VpG��
�q�q�[�~4Xun��98��6�M&uGdO�_*�<�}��Ŀ���� 
y��m�O+&y�-�'���Df���N4����aߟ��;ѷ̑[ �^]C�����A����5�� ��
-��~D�g,�;<�
�j�	�!/�ċ�Y�y�0w��ǽ��7vh�k�^�O��p��׻�Y�Ja����GI��f��/�\{�^���M(ge
-O�|�3�ת�Ϧ$y*�͟k��(�`A|�a�< "�!W���Z��Er�3B�q���S��V��f�6=�2,���;)o?Z���BO���A@ Ŝ?��gƹ���V�M��!�?LdM+�<�u���KM���4kdǞgZ=
]��%99T �E�J���PJ��M��5�	J�`I�cK}f��� �ZU�
.�? �.�1�Tլ+&��#k��~ݜ���x�����i����Jk���%X��`}s=�.a����Cdz�bV�4����
-(����9��3�O����6_��}"M���[u���5p��ï}}������|pv�yo|�MLΠm�:���K��t��&����'�_��o
m��'�D:{��� �Q	~�
LI���@ѽ��tYo�M��In����=��k�z��=��k�]cŷ/!,��VxKo�l>a�l
�g�g���yo�}"{�����mf��,�=�s�Q��y�䰽��2��=k�����FU�V�
i��O5a<B��ݼ�R�G�F
-��t8t+�|�R�o�[�p��m�y�r��U>���`�B�z��X�4�a(}�
mM⹴�L�O�'��\��]���r�{0f����.�:O�d~�&��{d�6E�5�����A؆�͠l�d�K��n� u at 7Ro��_W}C���x��N��gA�Y
E��J�!��T����y��ɟ*{���vjﱣ�h|�j�on��ѝ�'h@��oȥ{��1����
<�ޤ�<(�7{X�qK��{�I����W ���G�.E�����]1�WF�t
��z�V~���
��]�:�24U ��j�̵Q���:Dh$�8�E��V�S2)���ː��z|dS$'�Ⱥ/My@߈�bϿe��{~^�d\t
���Q�3�����~�:n㴘��
W�تW����K��j׭�� |.!����(�8���aJ�Y	�K3�nTޫ���'0�~I���X
��
�)�72 
��
�-�˘y{�j��^<�ڜ|���w�},�E�m��pI�=
Gu!k�m�h�һ��ɧKC�����4Q�n�3�6�B�}�,����I��B񃋡
-��>��g��t����o�&a�f�L+�zz/���$JG}�fVi�1�����<
��<؊���C�o>~'�2
��dM� �Z��K�c{*�/�0��cn�^�+�[��-��t�>�t���
ڈ�ƍ��4\	g/g�X�,dj1�-�+ҫ[9��O�`d�M��6��1YG�ò.��
�dm���K8z"���b�
s�%����Pn�I�p�/��?Po�� J�
-uN�6e�k���ϗJb���Sس�
�Ja:ݳԙ��R2~��D�
Ŵ�=���7*!C���
$#�#G��~��3!�H~��N;bi���݂q�텢��7�:��F��MV�Z�2~�
qk�R��_A���~�8iw�I:�UZ��9��k@��6><�Μo�EåQ���x��oIi�7�[TKcЂj���Aw0
H�
-gh����ng�D�MU��ʆ} ����c���8

;|
���|���Z�5%��l9[�MVC��D��������:u;�����+��Y2]��'�!�t���s��}
;��ɛ*�o
5�
-C��]Y��(�X�EyS��D��
o>/�����$s�������9P��b*�_*}��1�U���:(	�c��h[3����f�{���3v��o�e6�H
�@��E����3WZ�YS
O���0���Ԥ=�Y`�/���u�h|��o�~>+����&U�<�'��.+�M��/���a0�hO�-E���G�a�r�͗l@����o�(�w2\���k��F����
-[&T�����U�)�^w�[�Я?�v�;���vh����̖_�"N�&�4oJ�aV5����OcO�n���w�T�š@��a�O��
�ߧ��`��;�"��ȥ
��#Z�>��%yƮ��:{͙)�o���Gn��g�
�ώ-E�:�)T*�o����H�!
-�o���5}�2�07��Q��ћ-���=3��w�2���һ�@t
)�n�,�����#��:�hD�u��SG��>eƥخ�]�v�֪�P��u
���׬L���z5�s����hݯ�ْ�Skc��:xϰ
�^6�4֊5�4���ݭ�Hù�
ѹ�l衶qn7�bȎ�7�>�~�]�\Y�V֌3	��pw����(�>�!�*�x=V/���{�wKf
�[��^��Κ8��)����!�NC�����]8]�]�rl�sJnWv�#1>t�	�o��m��N`����]tk�GA>1�1z{� 
�֬W
�Dx�]�5�G�Q�*�|7�k$i����kлt�)Ҽ���t9pXr_�F�|����Xa.
�N
�^)�m�<
��ں�T� UI�a8#���{�9���O�����`���U߱g�
&tEy��'*�}8層B>bw�\�@2NB��l�;��<���N�<^��}:�$-�#cD�&�Z�(S�IC)1�:UᲨ饍�U����E�c���)zb�뛍�>m4wǞ:��YQ"��������B�zc5掊�]������q�έ�J܈u܃
B),r-�u _���o�L�B͍�k��,�fdq
��F�%.�'\��5��I�O�5
�1��I~�歪9

IL��ƙxJr��枝�L2�o� h7�������vL�
�4��[�#���+�P�
d����������
#��A���vQ�f�kD��Hv�M�涡`����� k�\�v��,ϐx�(�_O��A��q"3�����w]�_M�����e��#o�S�� ,h1��� �ﺖ����X�<1L�]�r���k���ͼ.
�t�ޱ������.��
���t�fd�#��1�B�D���C8i�x=2���y�I�w�y���>{��̚���m�p
�{
'aZ�yf8�����?��e�)�ڷ��'K�j�l�/� ��΋�`��nD���Mg4�Sq�/�wl�eE͐,
�e�>?;o���^k��Z1ǘ3�_D����
�l���'�i�]L��G�:����O5S2�
8�}��]nYU��q��3�<j��s���)O�s䦾4㙔����ƙgM�"��]JS�u��u�׺���+]O�l
D�qE�ǻA��r32^C졁*P�5�Z,Y"l� `*���Y�ɱ-7��q�4��f1�ۙ�}�|����Nlytj{˸�M[��m����}�qܱ~�*ڛ�ac��
���
P����z6F+
E‡
���݄�B��ۆ����xg�
O;��~e���[�)��Ց��Â,:^� 
j���"�Q�K���
-9"vm�r�/p�������[�����N��Iu��Q��{�
����L�@3g���
8fPg�z�k1�Y٨t�J8��a�U�z
���R�?c�j��#��̣��`	��)<��Y���u���L�
�y��AH���UEl�B�W7�^�v}�����!�@�}6��#1^���f"�nL��M�w
s�_tW�n��1{�=���(ݪ$�
�ԋ�wܡ���[
���9���p��Xn���2~�tv��},ו��
-<c�Uiϝ5Ad��`�
a�~�?���
�!�Q�6��{���qO�gG�����v��V'�E3��N���<MVk��!u���q��穙��S�����?����E�N�����Q����[��TL��c�Mͳ��#9�c����`ڲ�v�Of쾙2*���i��n�
-#x�3������iJ����5�#���X@�Ϡn����^�B96S�Q�n�e�d�ǽ��!z�ҙ� ���
~�o׆�~��njB�$e�LHp5��max�t�"��U�����vVq�Q
��:�j㴬�J
o��7��=<i����[Ԗg�lKm%�Ot���b�C"�����foR���B�&���h�d;���[ו���-�D�F��]����_ w�?�a�x#�Yg��J��� '���
-��7��}pݱ*��O
rg?��{@��_�


_�]�|,�?�1����	{��LK�v�SA3��Ҏv#�J��/�CxޚT5�E���}w��ɧL�BV,5����^�
�'W]㦱mj�>�x� ]�M���_�tޗrI�%��%�DC�y��R(5�����C�kG<�
-�@i�K��:	�5c=�P.E
h���0
�N�P�ϋ>
�+}�� �^&C)ש!��w5�.^ǐI@����
&���o'ׄ:2R8����M5�#����ls���m���<.w��[��������S�{��e�t&v6��1�>�x�M��)�&�Qڗ�
��v?�
ƫ?�-��f��w���y߰�*��A���qEI �U{��=ZZ1�j��n��Ԣ���Zw���g��z������!P���햧[�G������z�#��>��]���rs�Ws':��݆xp~���	'�
��z怃κȜ鳯m.>�n���u�ͱT��|71��D���x��r	�W2Bz
�O��䅝����3�G�]`!��I�E߆ωQu��/�r�*?��y;�gz��ܿ�+�? �~���#�]��V���[�4��d�"V��p
-��NѾ��:�����O���
.����>��[Q)���m&���,��T<��S8�Բ5UYAuM��e�S��� ��o��',�t��)�NU�w����l�A�I�X\����o�bw��x��Wo䏩���|��w���7ܑ=ZGU,[�#��O=k��5�}�zG�e;7xZ1���z�t��nc������:U(x�K+�0H+��'R��Ʃ
�z Rh�x,Vr�VAu�3߶�y8z?�YFR�д^k�pal����a�8���
γ%�
�}��!�]v�ű����"p����n���_Q��
Bcm���gF;�lLx�n�r08E4��٪k�����@5���
�Y�‡緘=2<��Uƒ�G�$A�g'*���ɑN<=���ȁ�I��U� շ�|�?���y1K�bΙ#�<@
Kȸ�R}xh�La47���lL�x�pJC���g��PA�x(�)3��'���݋^a����3m�3��'��L�'vֿ%�iQ0��Խ+	i��l����T���$�|d��7ݠV6��v���J���ɛ*U��[���
��~+�%�3\9Cdh
��
�&w�c|^h�0��/v=�MƑ��
�&<���Fv�t-�p����x��(
�
��B]x�p�Գ�
��o��<

K3Wt�=�$5���C�y�Y��w�&���&+G��_����b�5��/�
�����
O�.���@�<
��-�\[��F}�˼�y�	�K�/���@)y8-�	�,,��k�u�*�_�?�rv����x�ls�.�����#]O.��k�Ŭ���	B��dž*'
xxU��<�O��&!�%�����UOmE[",��3
�V�};�fwL&�ӌ���ث�F����@�b,�t����FA
�y��ˆT���Iv�K:g�4~{�Сt!��Hiڽ]B�'�j���]xl^N��(ya����B��.�+k�2P
-{)�������W�`���񦮏�'��}�A�
�_9���p
}8{Lb�H����Ri?�~���5K��D4�s����� ���6/f�?�y�ߢ��P����w��Qs��XБ{����F�И�.�
o�
n���9󿇂^�Q�u6������c���Oo�7��������+�3��J�1u;��e˪�
�-�svK��8�
E��G��<��"��z=�M�#�>�)+]��>T�;
�)��`{�c�`������m﹵��m
_�ŝ
 9IE���?��?�����>��޹�\�O�F٤��Qc�%���a�����gO]@��R��
�-e
_i
->kx����NWY�w%�QI���uܩ�/*��lݾ*8�S��1֟�g!�������Ҳ�Vg�g��O�t��g�J1�'|��3�'u����Y�\�*�O�shܳ܋���Oo��LF�N��fY��9
�Ib�r����{eB�a���
-��הYV�
S�����lZx�#{ ��
��1�}rnk�j��e�)���P���'�J煃-t�蝜�/��{1�+�ՈF��X�ׅ"ˋD�O��������3�%KN��aR�r
=��
D�g
F�f�Q���td��˛64~��d�YQ�Lgt���lLv��g�˕s�)����D�w��������&#GB��?���Yi�)��p9�B��
��Y$�ʅԆ�)�]�Nܧ�n�2
��F�T�4�$@�=>��4i�Y�?s-4��䫌���C�� �4�J��eR�Y�:
fL����I,�$��An�]�|�9�|��I�Bߥ�h�V�/�LL�v��B���n;5j��wC��+ȇ�_`XU��m�K���v���9�7Ҏ?��F��9�;u?�ƋɈ����Q7W�A�p��o!�Ua:J�!���t֑)�
��fI��nd9UVq��1y��^�U2�z�7?v����2K������g#�U~&5e?�ۨj1קK�������/�j��a �R�X��B��y���2`�����k6����1S�3�˚��'%z{���,�'뻧I��G���V�@)�3��o�9��Z��s�W
��tP��;!����3g^
�D
�fu|4G-F��{q������[��,����ܸ���0��
uyp���}:�Q��vׄ~�?��{Yc���^��#¶���S�5�n� ����(7����f��GaTdF�,��ک1��F�hd�a�<W��)|F�%����9��yO�wg��u ��*����*=���/�|�Q�y�-% �{�fײ
�����TM޺��1�
�G����r�_�߼�J��4ޮ���k��-
(������1ݒ˽k�'�
��'�������2'~2�W���{WY�Y�۸�>x�z� �4�b�����l�+������Y�Хx�\�1�8f:͖M⃫>Mc~K�:Em�<n��F���]���.��^6H|I�6��u�&7�r ������voC���_fq���D0�?����Sĸ�?A0A��{S���Dr�u�P̼�֦�gH�&Y#@C�a�k��

ҋ��dt�sZ��,�_��
r��/	��`pd�v��
)Q칒�
*���`r���?����uh
-�|�JK
Y�
^�0D�����~
-
x8�l�H�e�);:`e�
!��H�
3g�Zx�:��k�z�t���k
=m/ֵ����Q�y�g��p�|6�o�:�Z���W.
��w�qo�B�������Eh�<�Jt���ڭ�`�g��i@�V�H���օaX�Q��8ijQ�c�J$���E}٠��%�YJ��7�dE!+2�a�Q�0kL���������,@�2�9�=^����bÞ�x��5�ۚ� :�z6q�f���
[�찡žV
-EE
N��,���ΖD���
�4�%70Z�?Uh^�Ԧ�d
a�mZ�p��B1�G���#�;��|�e�_A
y�;�B�hw�+���b.W�c��q��W_M��Srw`���b�|�7یc��n���
X=��d�bR�^Yd>�
O�R�;`�d���T�H��i�#yʴ@����
�W�,_�FZg�X�i
�c
7�x
_��d�RE5~���0�����L��*mbh
8�H$	K����Ă
y���I�jE��w_X�'r,��:�<ֱX���gЗ9�����GpD,�°�u�	@ܙ��~���޿��=�&�k��N��P�< �p��
�
a2h�i*hs(�ȰW�sLTo%�{��crf�{��p^Džh\~�pG��y��Zk�I�H<�	��]��nc%��
!^��H��@�͡
w���
|(�Ƭ��F(bc
F�>V��Q��5O�0�ت'N��G	y��w_J:C��,4o���
�NA)�U^��ڽ�ݖY��
ɫ ��y�̽��T_�(u4���
W�NXzg�p,���<����~S��x@��Dl�

xK8��}#_<֥^�
"��K�c
Z�viy�f[���E��ڭ��<< U��o�L�
����xZY6NI��?��N�b��
-:+
"bg^�
-2^p�ͩ�r<
-7�R�̱c������X��P[��7��F�0�=�@N��k|88�SZf�F�[�%H��u�Ņ[(g�ɥI<�0�^U�9���\��K���ͮ_cD�֕
-�)�����I�5괊�}����"�r�T�{�����U’��ҝ\kD�=	�$1{��O=�v8֖�f��	/��7���2��ښ#�=`.Y�����Ӏ����wd �
9��Kw�#)@_@k~���)7�J�<<	�N�J�ޣTg�GpG�ўH�!��ͼ(c���z=��{^Ek�J��%s���d��Ac���ϙT���l\j
�5٠���>s�X>���5jY���عŇ�9>�rIZ�DfD��ܳ|�v�YN<x�r]�>�
�Z��{.&ȪZVy�~n�x�沝���zO�(s��2nT�}0泡��6M

��'>��S'�e���e�ɩ�*��7qa���6�Ζ7-�k���ApWs�L��S�%�
�F��
��������紥��+����i�|]��y�MS�
-�V�r�HF��77�G%Wߑx����z�j���IJ��3v����G�^��r
ȳWe�:]�$
-cGB~
���ze�e���lkh�<D�HxUU
-���`_u��n*
N���^�8�Q��7�yo̗�O6"W>
.�w-hb:������<��'�"���s�.�����!7���}
�{�au-�
�kN��C�l-

Gˑ̗��PFsk�c�ʅ����Q� �]I{9A�.�
�-��U��O�RH��I�d��f��+���2,'�)H^��ɨ
�PDM� Wg�*x��q���ψ���^y��<Z�
=��
�9i��,Y�?�0��ƒT��R卵!��HE5��uQj�nqM�g��$���i�J��G�8����(
��չm�r�nP�}n=�9;hK��-���V�>��U�/�k�S��%��[Z��'
>x��z�;j��6K7|4��~��-��e�ij�B[us��a%�)��1Bs��>)w��"F2l,�D� �u��%
4�Ô>,4�
,���Z:��o�WkB}^k��������P�}�xvF���꼷��u���4Mr�
�̧���~����™G�p�S\���|�
-�.X��*�YNw�)S�x*�V}m��1aTǣ���E�j1>�%�,Y�j\z��_��c���|��� �"�4���Re���Uo�:���}�ן��h�<�(���0��2�m:c�څ�)@�Q�f>�ew����~{�Jz:�O�c�VkƄ+
-�;f�K

՜�����	L���y�T���	�Mn-���CA��s�*o](FЛx/�{����4�n�!�����ž=�׊�^w�&��>lxH^t�+�2�ˣS�$/�؇u��|��#�]��r+�
�����S_�<EL
K

����kB��~����1�H�[�T�˛��d ��@*
i����$V�|i֘|��M-&ػ�$r$W֘�!:���L�W���2�|-��I�O��E'+��
诂6��
��0����1mO��q�n����.����sN,����]��'pLo�Y:^X
0RT��.�ȺΓ
���0�p�.=�z�Z���	���H���3��hYu�< ���r]���Ͼr��	��g7���k���f�^S��WY�l�;.^�iS8y�,�y��:�
??�S��c�(r�O�1�����1�uށ���#�;���]'���m�Q���VD:e�C}ɌЇ�<=���L�_�V����l[��n�e��IݛKc!|h�W�;#u�u�<�p��F���_�6\��F8TT�
Α�W?�$���TL�T�D��!<����t��gBr�\]f�QB�
�=Y
-F�[/m�
*[�hS��
-��Q�-�9
EM}�^uLɝ�Z��9���|
��E@��ʑR��_�y�-ְ��1�]VF�ڥF���;WA���O�yt�/`a�J|cK��p
��P�*�%�N
5���h������[���p��4���ѧ�I���Y��V��q���,�m�h��A�@݂�H� Qx@�*�/\n�+
-k-Z�
F�
�	�g��ؙ�L��-�u�/ m#�,�]6��?|M��.Mo/���5�$�Mc��P����`̼�>V���F�_��h���=��U���%�1
]��Y��9�$:|���k�~�jߨZ�~o��ջ�=7
0��b	���[��B-f�
�n�7�>�>�B�_�[����ta�_$�%N����E���xh�0���I
����Y���g!��z����z�O�W�%�э�<J����W�继�yQA��k4%��
�C=Y)��Vk�
�dy���@�"��=4:��_ȃs��J��ٶ�NN:��w�WGUFӆdl�C�9m�ZZ�.S�^D�I�𮪵�^$T����gSP�Uk�XI�+�v�T�y�3Dr�N ����p.
̈́q�j���)9H���ιC�x���YPh񠷧��@�(����J�N���(<�b����Fy��
��ޘQV�`��%��KY����bZ��e��O�}�l`�/��~:�W��c�&��%���~��e��
ߦw�3$�`F��Ǖ�����Ƶ [...]
gί+Pw'm���*������u��gHZ" �"�r����y���c�^�yB �rE�#}�V�q
�Lz�@��x�+NƕO<��~��&g��<�q�v]{��O,���y���KX�;��V�*:~:&$�B�vPi�e��r]�wGFѲN������h
-�.��vi�/
�j_BP(�٬��� ۡ
���7�^a��ō�G�I�g�7��Rw� /&��k�Q
�6$ן�;4��?p��-� S;K�N��D�?�5c�	��b�y-"��ڃ���+��Fg�J"q�
p�ьE��HOj���/��+u޴ƣM�]a
� ^D��V
�[������Ԙ�V����g�x`
�V�8쇴l�T��&Ȥy宭ɚ
O�KةTk�1���ϲ>h~�;Y���TL&+3�V�w6��\�),Lw=��*7t��
Qx��7S����T�'"��u��Zã'���	6���vo�b�q�.@6���$%���	Uz�
9�Jt
ٖ���
x�%�h%�*�POG5��ʓ�yې��W�iV熯����V��9��vΧ�w�?�}N)*�Ƒ
P�j���
௘Y�,�*
'����T�
�Y�+e����Q��c��(�C�+ey�n�N�“*V
�c�����
 �������8���v�v#4���TI�����B��fׯ{ps��sJ�q?��^�ou�H�Þ��]� @�S��iG
K�G��
?�����T+r݉�K�D9�[N���\2YV��NX!c��fMR���dN��ۆ���G;,Q8���Tų�u���mP}����~C{��L��(X�=�'�y��rBG\�|^0�p�	���Q"_�ٕ{!���B�5�R�˱�k���/
x$�p�¬��4�^�[�
52X

�
5��i�3!��2���fï�qJ���a�\[����Q}�ջ
��pXz�%�:>Ƣ�Zg!=q[��kq7?gY��p&
Ÿ��N�������a{��؞���'y~fU�F��ޤ�I��4�A����yR&��<:�$ē%�A��xl��]��X��(\s>Y�����
��	�N{��Y�u"�E�B0?QnXAC��*�A��YV2+^9��Ѿ,�˾��[�1���P"��|���(	�W!

�7۸x
wbQ/��0�Ro7�6maͳشB�5�,�*�1
-
-?�bӍ11��;�7"\���S���jd�����
-f�iEY"�Xu�n�����
�Q(�
f
��[ _�����1
-����B�4Ԯ⌚Y\>|�Z�47]����, O�Q�:
�,&S%�3b7��
��<N�Ȯ�
��	�=m�B���G�lq>9�
9i%N^�PMo%\��
�
�
-y桇h�������n��yx�H%�Kwt"&<"��B���{�]
��h(�[��j�b�[�
�@\��Ws�O�>��Z
��PLV)_:=&-�B�K�-	�䘫/
-�)z������0������̠J��� "q<e/�I�
~XS�kc�7�F�5��xOz
�k�}L�(���H������m�T�U�����>yyt]���nk�I-Mha�z-�~��$�����P'�	��+�Th� ��
�
-4#�lo�y���d�>��0�7O
�,���J�p�*�1�£�G7��9!�R~YÖqr�ۡR�5gA(N+�G�\���`J;�;)+CT�
-�
�
���K�޵Z��T2��8$�oo�o�'Kb��j�	�BOf� ���Vb����&�`��-N��[lXjm�c�$��E��|o�AZ
&����G^���P�g��v����#�ҟ��:
c9�ՠ�"04+FDg�g
-�Q^��a;��S6<�%�P�
�>���>0�������>���s]D"a�8}�[�zҁ��a�	
��LC�z��= |�'"׫8͊�hM8 ����Y���N��r�*׊y
5��9��wj�{��n|6!6��~
M96&W����k�[6�sc�
�7�}$0�x��
|*I�ե|\k��
-��E��l� 4�0x����a�|ޚ�B#/������
Ӎ(�KQ����Sg�v���jա^���r�?H]�����&��*��kz`�`�0���$��Ƃc�|�k�����?s�Ե�e�X�RṠ�/�>��$�O�
�Px�PМ�T�������<I���e�n�%�ܔ*4nEl
���|�d���@lSĪ���Ӡ�̶6�׏>"��]�I�<��Y$�מ
)y���mQb6Q#�ڭ6p
-�햼���0��D��i�˽��
eء�~Si�֢�
�$l,cF�mT
J����{yRuj�iY
,5)� ٟ-���Q:��4�3k}4��~�`c��r ��cU;�L��@��ˣN?
lM��yWj,���מ�g���t�Ekd�!�
W��e�ћ�b��෴
�;��.^ٚP\���B�d��j� .��ѱ�˄o��x߷�^#�����ww�-�ı,�,
-
p����
��E]s�ںwu��P�hG�(
z�����]�R������F�6�H~`��WW!-7
IW)R�﷚�g#!la�WudQ�uq�h��
-�ېb����c>�&�m�T�;�cI��I`dk�|=
H�4j
ު�n��+�#�Gbx��󕓨�OI��>
a�4�f��WV�.�
9
mq��
��6���:m��"�|�[#�J� 5��
ơ|wl3Sk������g�v�xIW4�)��K�Gf��>
��X��VX"�'�	Yq�0���v"o�g�
��r�dQ
���⸌ە��Ӆ����A�Y��rVW�ik���Z�<8��P/��ۢYD,���X�
�
E�FpI�7�:�L����|�{\]n�kޑ[�
�C��)����W���5�UH_��Vl�V�R#vz����u�ͤ�����T��&�,�6wr�_�
R��4�*S�<?��B�\ykQ��k=��F</�V�)UzM����y�D�t�v�0�	�\����Sq/>!o.
�yy�|Z�C'�5"�
�(h�+���^m�]m*5������V����Q��y���꾜kɷN��F�b���
8G�{� ���ŖTuu��
z'
�TR��rԋ���Gҟ鴷1�1�MF�6a�uPǮx]P�D��)���iK�%��kK�ړ��"����`�u��W.��b.W+�����
��������)�ʉ/^��E	|hQ��S����;�b�B�Q�i6f\�oޛ��>K͖�cX;@Zj��6=ܹ��K«�I�

z+
Ui��Fa�~B��QVԝ�G+�T�D6D@�L7���2�6��$��o{���{
-wi�@��5��J
�E
�/�T�7g}E�xazf Y6d�5{vO_�Egu|/eҁ�CE���>u	��m���&�{��ۻ�N��>��Cm;�
iB���G��̞�;����zN�ϭ��[_��ë��=���k,,��k at n�Қߦ�
YU�nQ"�� ڋ۪�lP:��o��*��Q��vL�Vx���*V���ٍ��
u.`�8� ��oS�m>JŎ��N��w�}4�Kߦ
��JI�$�F�Q=��C�DB��@Kvȗ-q'͡
�����(���Tg��E�A���m��g*�@���LTI�V}��Nvg/Ԃ&���Mt>�?I.f3���Af��>�r�v�^�ef,%�v+i
�%G�\�
�
(�w���Q�Hܷ�O�'.�I��K>E�����W���;;��V�F�cǿۊ_�����Z1��c7�o��}��ܵѾף�x�ow�vP
�~~Von�>3=o^M.u���v�Eq�uk��)�%���݃��!�?j�Y�?A�
�e�?A�
�e�?A�O,��D������������[�/�3���W��X��n�/�7
����w
�k��_����O����
���������~�������}�{~�n���/�O��U�?���f��/�l�/�7
����f��.���fb���~���\F�~ע�:�~9%����O����n<�]��x���֛���b4���tav�rsm�_
��?oψ�;)��3{~���}�|�
�]�l��=��M|J���7ޭ޽ng�^��i	X1�My)�v�tH,��\tn���nH!���������)�W +����
6����S��֟n��&',�K��ːh��q~�s9���L�9��w��a�O��)�e�yb��1�;�k`b�lK�c�
'��LP��=�
�M���ծ~�.�C���*�d6X�.V�r
�����q���
�æ�������1v:��֝VN���
�9f�Ϥ�Y�����*��d��BS�x�����Y�X^f���_�:���ݐB�5���eU����ňOc��+��	։�+��C�Gr�j�p��x��"?����~���*��;�j3�W
�/�?�/������h>;�.�Wd�n�G�tQ�g�4�ô7���
2�Sx1�=��f6�ZGke��Y��=���8�,��/��_����B�=#�2�q~����U��5t�ޡ��`�T��������iYvJ];׽�͍�yF�୧2�X��ܰ�׹�5����.q���E�ywpJ�l�7�r�9^ d�L��������n
�H̶�W�z�%-��`�c��-
�?���??�/�B⽓B%�J[u%HK�����
��s��^q~��
;?���V��YL.�{��� +��H������,
ۺ2���/C֗�}!��$#*�z�ڭ7w�߆���|5�,/-�eO�ۦI�z��1yA?�W]
��4�3�1�z
��Ye_j�?�
�FH�c���r$=
�Oϴ dc%�[��㡸�����vE�������)W��[��֫3�j���<�U�+E^������i+_��I_�wޟ�
����|>F�3�`��T�]sZcA�<�����䀒����8$%�i@���U���_����-�޺��z���0��U���S̆�е;�zJjs7��%yeM i�ڢ��bU�BЦ:B�ou��P���&��_����2$V���(t��(-�K��8��e�
\24e¯����B�!� ��W*䛻L:�k�r�m�X�|)�0�+2���Y���OF����c�w�Ƥl3��hz���YY��K[��w�Ӟ��#�؍#3:��/�v��3��Wg:Od.�N�
E̅�o�/��!ޭJ
-��|
-V߇d9�{~�+]��E�)
 .�w�9�|E
y��@N[���7���ݗ���J���Y�r{�늰����Py|?�
N3����O�O�����2џ��o��R�'h~�Y�����c�L��+�����V���֞ٸ�{����o|����,�����V�M��d�/�7
�'}��#���A�
�������3�n>H�O�y��;�r�ߡh >F�]�v�g�ʉ��%q����m?73l�p��m����ʽ\.+�h>����槊
����˅eNB
-v��D/����eD�o0������Pv_?�
_ō�W�hkG�͈�'.�j<ָ��W����T!1����&�݆.�3M4�O��)��2�
�Fl<<l��祛�K׻�֧�%��w��b�����8���Y6�Sٶ����Ԃ�BV��i��@FT/gD���,�5�ϻ�2��6x���8��>�7�;h��~�͝��탹�6�Zp'�����nq)������Z6��ӯ��?�)x�W��h�O��{F�Q+\�h�
�
W~�	Xea�‡��/�U��z��&����������{�Cja���;���CU��=��45 �������k��6O�~2s�
ʇ��?x��
��
�=�n���N�6~��G�a9s���I;���ֆ����{F�������5��E�u�@Fԡ
-q
=���7��<���P������s���_�s��υF�O{��F�2;��jE�b���/CV�2�V��)��_�^
�~�9�i�y���a��k1\���
2u�+����z�=B�j��^病����\
���>�Y
�q�eH�������o_��?[��l��\T�5>=�r,�O���z��T�e����a�8�(z9���ݛJ��Ry4�����4!��O@֗������
ܼ�$w��+��E�*=�����s�.�,ͥ��s�m��"-�_�U8ߨ>��v��bRC�`SC*
F��ߙR2τ�g

-A=7��f����ܝD�eL�cEH�-:�XG�,i�вn/����ۍY���Yƥ�|K�tХ�t9�
-�h���=����?��̞��?!Y�-l{Ik��U���A7˓{(������A�ژ�Ṱ(ZfY
-�gW�6��q������rѤ���i��˟���eD�{fO[���-|�t|6�{@�i}S<��
cP�ٓ~7�5'����{�7�c�c�v�[*��2ة���T	�.�����%�ͦ��b'H�Wy�
�`s�~�w���z�^�]Ьָ�~
Wh
���B�u�2U
�&A��d©��&�[T�V��?Af��}�/A
-�r
-Yu*m�[���'),��K�(ZA�0���b��T��ʽ�]7.��e�Q�=IP�w5�e
�yi=�9�xmr�V�		��?lJ!�T�L�=��Eo����������z�
�%-�v�wN}lܦ:X�2��cy2~�%��Q	�4�{g����2*p����o�:�˯K*��h�=�޻��n��L^��ad��5Ӑ�s�,��]^�'Ei�W�oM!PdPh� NZY)ĝ�K�Sχ6�aם������՟��5-�oըPh��=���߉Ϛ��$iÚ`�n�\KL��r��>KA�^\7��Y��Yx|�'��3�mY`��
�SP����^}�=�=�<�l���xq���-i�9y[�j���
��
�o�;h�̸\
-i�#�':/�Δ
��yKO�)`�������
8�HڮVuq����A���<���P/R<<�2?�L�
�N&�
-'�YV�T��X��x^�Uo�&���f`o	�cxD�|<�����/������H��G�����5��4�l�F���
HY���a=)K�]m6�j��z~
����ڟ�q���}�m��M�1�A���}Ψ�:��=>	����׉��/����/�����c��N�'hf��^��O_~��?h~�Y�4���,�_T�W���f���/�O�4���^������+�ϫ����~������O�����<����y߈�Y���}72�~X�Mq�C��U��ڡ�-g���ps?��ƪ.Nn����L�����MV�k�e�����M�M4m�nj&Z9?�����z9��J��R?�ۨ�_��kz���Z��^����F�9m,/�8��;��.��]~�s�!Yr`��8̮�?�/���������sʈ����������
�Ω_g&G�i�A�L͝(��=?��׍��-������y[?��J.^��ג���\�����
~��~��5!#
-V����Q�/
��B)�\̨{�w���Y�|��;v���x�����x
;��
׵�D3���kE6ڥ��Hgۼ�
�/���?�DS���3�
0L����>�[�+���SL���"
�
�P��=O
7��|���c޶�(�t���c�Ë�a��d攏m��'�m�v����O��M����NA�
&��Έ�p���ι۬O����aU'�vR����T~n����	������r�hՈ�=�M��9F=���_�����ޙ���xψ�{�D_�_�U��ĵڭ{�bz
�o���<؁j�b����t'���p[9Z�^��~����+�Fɳ�i 7�iЬm��?�	��h�H%V
-��cw���goTbvY�/�r=#N���7F��g�]H��y�+�O���:����r~�����T���&�9_k��������+Q�4:$1�K�(�ƻ!޻(V�8Y��4�𞹛?�:Wwݜ��f�q�����r�$�1��t�)8�v굨]�v�����K��s.�ϱ������gH �����뱈^�[�a���Φ�F>���<��
]��2>��o���Fk3��
�;�ij��8�+�
-u�gn�������
��
?Q:���/7Rh��_�@y=R�S�m?�~܀�쥫��(w�����$"�Jl��i7��٭�9��z#%
5f�<�V��d�
�I��%��
�_����ψJ��u��^�Q�)�]q��sΈ�[� �lӢ�]��v~G���ە�Ʈ�^�Xƨ�8l~�)���X҈��w׾ࣷ�@
-z��4_=�\1�5M���՛��{�
��GO�L}�N�l�h,tͲm� �LY.��w�.�!<�%���ĒO��5
�z3��_�������2{2�8{�*Z�ʛ���)޾7(�_[+�
-�Ӈ4閭.��%���G�$�^�5����ӈ��~,d�S�Ҥ�9����,g
�w����<�Q�ˈ������:A�C��=�#�{�Z;�m���.��#l��fVs[ZcP�*�u���My�gUNC�֕��=
���®����o�_�����:�Ĵ���wr�8_�)�w�_�IB���f�d��v��5�C��D��GF�M-QIJUA^�V���XA*�k�Xv#A�J;9�H�w�Y쏚�R�&�അq�s>��˴�A�o��M�z2b{
{OC8oKSm
����
� uГ&ʸr�X�}�j�o�>�B}p yQ[�������͌���^�Dc�����G�<��t�
���
-$�3@�?if'�V��[S�<Ӗ'~�/��
,V�8,�|�"�K�h������o�q&�+�B��ye��(t��Hȏ�Jkl����0�/��9
GM�归/+�\t'y���%!��
-���*4�6x6��9j�Fm�d��)��S�J�?�/���@
-�׷ļ��荎W�}g?k����\C���s?U"kˤ�݈{	;	bp���6�z�N�����b�Z�2Ã��S���K@�Ө��ܘ(Q����;Z�ip�3���Z�
��)
��Q��(���.6��k�ʖ}Tt��۝�~_J!=Ʌ!��E$��T�BzU�J�~#+�0�ň}�u���>�o�{�[�*��#��&�Am��Nd��h)����4�`oǠqylSV���;d��Yc�	�jl��J��!�z�3�;\z�
R�������Y�0}oJ\��t�
1�-�
 ��!�'9+����,EoT��� ����G�P�[���L.�=�LaØt#��@��M٘Y��߰��J8���
(m
-���]��h�~>�a�Ox��0�u^�q��j�a�ٞI��
oT|_�{�1Oq;G�
�B��*���u�^�?��t]Qd[�O�C�`�}/
-"�" ���t���õs��['��ʪ[�|a~��1# f8���������:���o�K�� G���߰����]�oh&�,�
�O������z��O�4п
���,���	����K�k����������L@�r��Y�J�tz�(����?ƕb)�?��LAӲ7��N8y���s�oL
-Z
N�P1
fa��딶��ݾ|4��y��ӸBj����SR�Wӵ�o����8��[
?;$��=��T:��jٳӏ�Umv�\1�L?#��ޟ`�e������t�X�h
{q����!��G!:���8
�Z$���������� fy�����<��1
�ʪ{�ļ�C��v�Ε�'�eб�3vo�|ߤ����\����D9����r
߻�q�	����}��B���
�L>�_�gw����z4��Pk;�2�O醑8إn)/�4�w�>��.r2=?ﷳ�y���i�/OF�\r��:Z���l�K�!r>������8�
��es�
'����5���S�4]<L@��qS7t�/��c�v����N-��E.���y~6��5���z�=���!
o{�5|l5���V<oZ��.uG����
�߭?��E���S�=�?�x6}ۥg堰v:��
pG��
{�oK�N ��i�2���ET�z@����Ig�wU_�q�&�r�)��q��
�����DK`��0B��S�=	D���m�^��U�z��f|��[K�m��y|E
�&����Z�A��
1�*��M���
O�_�~�w�:����&v�դ�`J�_Ձj\�N������mp`xX�[\��5���%F��3��Z�[�G9w�w�����A;�+
�$	�uQga�P?��{��)�?C�ӷ~C\A���O���W�jo�>���w8�-��_I�(�3(��E�*ʼ���
c�ԍ=lK��V�]E�|q��)�@T
��:
���x���"�o�k?�7Q��2�q����SLݕG�
jBv�۵7��cW����vZb����w���
-[�6�#��{���O]E�fqX�e����yǮZg�o����I}����v���6�C������g�6}�/��y�жF��o�֕���"mDe)���(�f�"���/�
�Q�]8i,;��_v��O����}�W���d����	�] j����R�F�+7�#���i'�Ѳyi�6�-�ݴ��0?���ޏ8��o����Z-o�$��K�Čܓƨ�f���f�7�Z���>�����R\Kiv\3��HΕ*a������]2vv}jf���`4u�9)���un�g�Z)�,��pɼ���|l,���9�����v�����ė�M�J��9��ȱ�
߉�����b�����e��c2���
V��R�V�9ws�v��|�\��s�pZ�V�st�2W�}�i}y�k$�?}
��A�,��Ɵ[����FF$W� ,<�+B��=�¨q�n�ٺO�&?�I����+�o������'��<'j�Z/��|.LWuGy���7�����zrK5�ǵ�=9.>��{��Z�5Xh<߅ [...]
-g�=Y��A289���x:+�{��75�.��<]V
p��z�u�p@�'|�<?�k��D�'��VE�����q�H�bRyl]����ð�
-f�.+�����-�

-��#6�
�1=W���	��i��Y 8�7����߭qEQ].��[���<gR��%va6���U�5��Oi\,=y��+���ϓ\_��63��ЬtO�i��
�l�C(��TK'��
!��	0*G��kܴ���[�Ҿn<�n���L�J���=["��ͳ���F�\�
z2��T�?�.gy�B3��W���,)~�lMn�3�!�����o��E\y�@��'��)Y�v�i-2
XÇ�ٶ�[I�;~�n�YY�|~?q
�{V��3f$酏���c&CO/Ku���D�/
�>4-�
-҅���^%v�R��H@h �I��/GaA�Xg�����j
-o�ˋ��%�⹁.���Jf��z��c�B_1۝��Gu{�`�Y]�d|V"r͞�ǒ2�"��"2B+=����p*����n��K�n�	i���Q��6���&+
Q�?�4;��̩�\��R�
-����6A��D�wp1_[�J�X�,�c�My��
|����E����	�
��g��6�Ҫ��
��:�n��*�ԲŢ�<f��e>[�մv�Ie8����\�)���E�-V�᳆r�ak��	���"C����Pw0�Q��\~		�c{���F�F3;���6�rF����[���`�:;�zE
�	�'?�
-3�
�D�%���uV
ڌV�Q��@�7Z����1��0B�Fg�;������l��qYa�<�y
-���Y�YT(��ɬ>�a�������3=Dۍ ��#>ꕏ��)��LJ���5�"�-E#/~� �6�@Fw����Z����R\n?^1
��qy�@����ˌ��GD�b,^�,u�\]�:u�K��e"���ў��>P���M�~=�9⠟
O��9�
-7�z*�bhX�
����KH at _/�D��	��~C�����74��?��f�����ˁ���D�_
��f������N��AF��Y�-�CL&��� 4W
�����4ϛ͗f25�����tʉ���Ӊ���G���̀��S[��ۯ�K�},��˝	
-
u>./����@��Ʌ�cY�ĵu�6�
���)���I��Ikk���p:-ډ�x�8�P˰n�k�ƓИ���wIa�}?�����4����M@Z:��_5�NXzF]t�
��=ȑ�i�5fB8�򅱑KS8��'قt|o����4�˺q
�Mcf��Q�!�~q���g����;��?E�ӷ�2/� ܅$ 
D��+��)�P�g����-�
+���v�ekK8B�el�&�sz�������~���T��'cޚغ�k���h�5/و}�
-v�Q����u����O�L���~
-CA���t���W� ��N|;��0v\W�3V+��-��g���ɦ�
z}��z�j�ɟ݀���劙�d��꿎���*_�`h�_e��,���4z��4t�.�J0����Zk��_[c���;��be���d-Е`p�K�q9���
"R��0��Ԣ^��e[�7
�
�	�g��#��
�)c�FK��Y�������
K�@��z�
��W�O1�Gs�����Z�bx0����q��?&g(}?ŧ]��.�2�ȵ;�K��
����:~h��0���W��m�<�l�
|8��ӭ��x1�a=&��f�tz�������p���uRm��
u7.�T�l��\O�r
�-�;*
����]������^~	q����? i�c�����&xݟ�^-<
/ߺ�&	�Dg��
}�,y��^n�Ð��]��UxXe���M�N冷79�G��
-��J ��|	�
�}��O} ���<W�[6���z�����ɵ�ȭ,C�
v
���Y��
ƪ�ޜ��	��RO���w1جӐ{�'��磎̙������f#�����d>;$=|W��t���=�˵�e{^]��˫�\�3����Ȓ��չ
-�֙�<Cs1�{�+K�@0��:}yŜ�͊Q#	 ���~;��o�aj�2�B���A���̷q-�Ϧe��_J�F���Ć$n��
oq�
���tk%���D
Dr�Q�)O]�9�D�%�RCq�gy���
m�]$�ߎ/ڐ��G� �s%��b��7\�~u���R�=��Q�Ի#��c�P�5�����q����U
�)�W�#��nzK��We�_q�BR��㿚�48'ɝ�c#)qN�T�E'�Q
N&ۼ�Z�
'Y��'����m��m�
��
47��5�i�9Z��5t���1���9~�/gze����Hb�kR�
 ���q���~�N�m04+T\+�7q��;��0���
���9�b`���p��4$)~��H��y P��`��w�e�#Lz<�&�Aӛ�|�Xu��yF��旐��^�J
��/�-08�D\�:���������J9��i:N��
����BN{�Gt��p���}��쿩����Y��~�_}���>f�)�Ԫ��Sf7�
�������O�%
�N'��
��޼�d�<��l�[j㐻YME�@M��
�mt��ǭ�d �ߢ�ڙ�׃��V�p�~M�Y��5�O:K\���Z���R��dGSq������[�aB
-"9����g�hz������T>�%
GK�3-�
ީ,�F�6/�T��V�-��O���B&ݠ;&��`F�͚������]t ��|��
-�5u3����2a���q�����ʿ��4^m^<��$�AJ/��8?��c��е�}:`�4��-�x�|��L"�.F����n4��
?_*�k�Rt��_�-l�.�;uP\_���
-F�,岧+�X�� h
�4΋V���<����L����D¹2�4Z�=�l�[]"M�F�c
'��o}\���2�]��+G��x�ŗ�܌N¶�9�+��ʼn,���#�DEm��`�sgf7S�W�%�/�𩷼��_&ɡLf�]���r�0>j��8�/5pc[��:@WV��kex�F�y�^7
-���Gy|�Qő<��&��-$�a�]Ca
-��v�]s�/�g�{o;����h�
��>���0��Z<�E�$>��3	/��<6�!���OW�k^N�k#�1W��t$���*�zG*l�owIp�gS�*���zV�ꮙ�D��{U�G��X�s�S6n
-�/E}��� ���zEsOtyϼ�	�OߊkE�'GylU�M�H
-��*�O����y�[
s2ɔ�݌�SKm�Kb�	Kj�S�@�-�֖8���EX�jD
Qw9��U�sBf�
h�:�
��qmž�������p̫�1{�����g�
l�tP_Q��LH�7���P�\L�ؒ��g)K�ä��Pa�
P���a�������2
$&�گü�n��
W�
�]ir�p�PLjlZ��Āh�N�&���L@U(u�K��b��CP^~G���z��x�pv�����.�ȶM0���%�Z
W�Cm(�5��Z��H�o�^� ��/�	�p
�t�{�,ى���1�k$Q��Ύ$�-lWFޚTCv��D��
�ʑ�u<��
-X��A�}*G��uH�:bx,a1܇��->��p�q�,��~��<��}���B�F�F �6�M���[)Sǣ;s��Ȭ.��,�R��>ڜ���z����,�F�3��/g�̅V��A�?�R�/����9�?�����,�.�
��E����!�W��
��
�/��/�}��DC�J
8��(����撌:�"e�� [������5���b�%��+;Jnx[����������@�Y�h�3�zE�+�:2���̀)��%�0��cx�3 �0�A
-��k�f?�n��\��.kAv��{4� Q̥
�..�j���p�>?�挼K�����6J��_,���0�/M�;���B����â1���b���K|vmA:B at s�^H��p��D9���L\���3�
Χ�n5���y-�} [o+����C����l�p�߶��e�G�~��G��.���Q	G�w	�"���J1ot�(�J��ڌ����x����Ex��ee?�w���xN"u��ڷ�����y�ݜ
�1���c�y�{e�1w��Y�%�����lj�3i���q��܀��o	^F�Gk��n�W�Z�l{�wEݪ���1X�Ad����$k_ 1Ϥ��I�t��rW߰zz�5���W��y{<k�J���7$�?4�
��TaЕ2�����+��)�(��{ds��4��t���M
ukUz��`���DZ
D�k �Էf��=��)��/������`��c��1�
�\��e����>�J; c�œ�o ѷ<)�kW��
W\.z��q�.�V-<��]�� [...]
-H�|;�܅��ԯjq��W�gc(���B�
��D׳�
z�l�����6��|fT�,�����0 3�>y��[����2:*�]��۝���q�6@�Y�o���s�o�^	��s���g?��Ǹ�8����3�7�.�C���
ry�&a�sE�XX)��
��;�E���3u*<���rr=-�Rx�w�F,�kU����E|i~��%�CJ��� ��E\
s��z��gS�L�^�˽~�*l4�|����<<��u�����5J
��֍��<JI��{.n�'�V������[h&�y�<�	q9���&
o�E04�A\�֙�*n@:zO��B�	(�I�����jN�\�����t~���!��喙�r1��
�B��3�k������'�șdS��z���	�O���h9-~J���O}��S�8����{6{�{O��{P��3.�Tj6ޯ4O�Ŭy|¯�
b��ZI��:yv��Ϟp�	�/�1��D8]U�1Ǻ��g��p�~��\+��ȗ�=��,����Cx��>�o>�Ϧ��jW�̤]��Q�~@�m}
g�5������G�֔�
���V��:\�)�����|~�y�v5n)dO�_B\��@�~�-'��r�v@�q:��B%�
�
-�`�{n}��Jd?+�
��� :�;�F�
-��U$yv��!�]���f������z�Q��$�uz��F+F�OY�.�
	�g��mй�
-=��=��5>���P�3X^�0�M�Y?�
?h�`�ߖ�Bq#�Zq}��E
n
a���m^ȥQ�I!��L��!}��	=��,T��
��5��6<�
0���׷	�v\+m�'����a�����v�n�ylͤuR{��>�t�J
���~8���
ͱ�<�-�ܦ0�/�6
�>eh�G�
��7j�մ"=�U�.u��/!.�
:.��+�C|�Soٌk���!���k�c�{�ۉk5A�̤������gi��*�7M�j'��<Kτk�r}�:�)q
Fĩ뒼O_���=����؛��R��<!8b^��5/���p3�k�|�^�Ѳ���n�mw�
-�,)��� �k����\_s2�te�#�j�f��
�2����xo��g
���
�rx�~	q�G?w#UܸZٿ���+	t&�fH���
-y�עl��d
&d��7�2�J���V��s�}n��z
b�}&�$b�rD��+�Q�;x��1̪u�`1�Qq��<���廈��	�
-�����k'�p
���Q�
�����J8P��Vm
���-~�D��㶵ܖ����Yw���
'��F�Z��lWό�e��f���R�.��[����|	�����O�גq=������L[F��K��P��fJTxrR.{��fZ�-�7q���R�e�Lu/U�TÝ��`��5��b���Rxq��c�4T��R��:}E�J��J����ݩFe�	�e}g=��5�b�>�
-���0!�Ę��-�X8l�r#T����R�-���S��G{<37;���;6��ިs{��z?Uy^�6�A�
	��F\Y>xЕ�z߲�p���0���
Jr7�ȽFC4Q�_��.�
���|���tӘ�16QL~Mb��Ld��n<��4��&v��:�(���עO��Q+�d�7�[�.��
�����Q��%�ye#*ɽM:�"ߺo���*'U��r�
&s��tK���B[�c*|����Zc����j`�����~��_�
	h�
uҝ��.u�aϫݐ'�y��Zs����4����TA�M��w�0R�-��:_������qb�ĸ�!�ZyOQ�}�������;��	a�A;�p��+H,uv������?!�i���~�K�ů����!�7�ϝ�p�m8�
Y��r�W-	�J�be���c�~��Jw���Yٞ�G�
f`Cy#��H]� [����H�-��p5��!?�����[��K ��8n�'t�W��3��!p�,�Y�W�#bM{��O [...]
-�#�:�6g��>hg@��A�X�>U#��/��xϚ��,՟���p�K���+]} ��縞S�C��t0��^�`	��J���آB�=������I���Qr���X�~��=z�j��͚�d���e�f�����Vj����Jg���@�Y�o�K
����Y\*
��Ip
/a��m&28��m�q���-
-�b�ֶ� c�=�(#o�xr�1qiz8wK�{���ǵ͵�5w��ӝkjv0nvw]�m��~_�`��OE��	V��T��	��~C3�c�oh������K��������c9��6��
�j���_��x��Ѩ��Qn�
2�v�Ͼԣ2;ҵ�3څ�}�jKe�Z�2µ�e��*���<|~���W�����9N�.�E\B��G��K�ۉ�ť
�3����M
G�ǚ���\��ov D	�
оg��kmV�
o��9�j.�9W5)9l)�uꇜq�{M.
�ks�O�Z�6�|����'�qir��E,�W����]��ےq;|탃�9s��c?{�u��pt�5(E�S�	4
ir�Нٵ�Ȁոî
�i$
��ϝ���b��=��� r“.�
�����=��E\b�r\Z͖`h6�O��)T��
-��|3.�P�h�	��۟��V��h��i㍹3M�\hs渽�u�����5��z�t�6	���:�н��̚�@�Ҧ-�ГV��⇨�b��D=Ё����"�yZ� �:��}��X���]�&�	(ܾG�GO:]0���
���sgU��
VE�v嶶����
��9F�n��}����#��n�����H@h�Kr�_��D��%�q����8��J�=��
�G�~9|�\#/
�졸[�
�k��3�@9�����]N)V*��渝r�K��
ۼ
��~K@��R
R�.�O-m\2�U
���X��!�bqyqq�j�AM��C�
A�!&�k>��.���
�E���yJXoR'�k�
��fu&�H�[�wT1v�Q��^ת2�J`+/��]�u z��'ʟ��G���?E����R�0������i����ra�
�
�3�O�f
�Ƽ�F5�� �¦<=�Sgf�<��
���*��|������������1p�T�#ZN�����]ȟ��
-}Ώ?$�;�><]L�����;ᓭ�1)S;Y�[]gG��q
�����0��~�����׹2򛍗;�R8bqSmp�}/����#����S<8�ȷ��ۄgwW{�Ct�.��|��|�
��#�͛�⦤���c��
�i�-i at -嬱]y	7�.W�H�T�r0�V'��:���w&}�|��X�!��������T��p2O���ߟz�
-s9��J��Hh%c�����<��=n���
+g��B�+���l�۳!>�Bg
?f�u�-��),�9�On
�P���?/���fQ��[ ]���r�l<7�=�iAQ�
�V����&L�o�F_S��U�l)u�U���ߴ�tAD���p at 2`m��p���zr̕��|e� L:7���.�a�
�U�s�4Y������\���\�aAj�Ϲ���>n��z���<"�i��c�����ߛ���oC���X�̻Z^1�i�e��h黧���(����~;�S��@4� Qy���[��~m�S!$g)�c[�uym,Ϝ^�v�n�c���=>��F���<�Q��rx-ɕ�
ĮZ�²�j��9�c�.N1��|����%�]|�M�v�,��y�D�mļՉk-gzW�e at gR����Φ��S
=\�C��m-���$��k3�	��߹J>�٦7J-���e�
N@�L]n���gG�DͱFk2�M��w�r،a)���
ĕ�	4m��l�������3ZI�J�}�h/y�����k��Qk3�*=���΢u�c�^��.yu��
��i��m�g�Q�Vr�p:����<H��I�	�
��KUs�����5�R�ƣ�冡.Hύ�˾8QN�zs8n��[KS�����'/`���7���+�nռy���ӥW=��R��\�2iݐ>�>��#�����m��k~��0*�Y4r�����k�M�����`V
��`Μ��[ԣ�@���A�]]��'��oNl����h��\5s�^4ң��҃���$�tp��3~�xfR
��"������*:y1Ͻ����n�u��5�V�r� �Y����i��C�:��v��
�u�R�+~�[d���S�4uޑ=	��Kj��x?�'qmr/�d����?ŵ�M�ҩ? |���~!�B'.��&�BKL�Z����_l�o'u�a�*70]��̞.� �G3�H�d�[�}e9l�vs*��뛺��6��$�0���n���7�ʬ�6Z
C�TK
��}Ϳ���n\<>��չj�5���I��
4U�M��e�a)��[����
--e�S��{
a������-)t=��&��t$�H�
�$G�]<�����i�z	h��lV=q�p���".��>�yI�kE�p����ەU�ږ>T��~v�5I8�h��8,Pj���
f��w���%"���qZ�
�Z�9h.�G|?�
޸R~ؽ
� ��,� V�ϐ�~���o$��#��)��)
%,�~��Iee�+�kR�
X�f�m.���{\�yY��i�\aH�.Ƨ�S�g��[`�����Q�6/�{?�E�#�V7��6^Bf�A�E�.@����)
��B'�K̹
3��j�����$zyN,��KH��F����'�!��O
2�����Y�RK��F�?T��9�D�D�q�
[�p�
�4�1�� ��K�E\��F��T`�\��u��
;���2�
����s=��[f9�6sg0ƨ�T
���`4�	
�+�6�����:=�.W��Ɯ��+�IȨ�W��7<�R�d
�����O<��O����I>R5m�p��&b�j�*,���|�H
w��2rƨG	��޹@P�2�/z
[��6ږ��QO� C�9b�;/��
��3jp���`\Ö}}�����P��ضg��7}R�wa�F���^�]e��6�z�H@��C��:�/����ʽ
�<)�0�s�/j���ɑ����)dG.�Hڤ��Z}c1���6�Y\��J}��C�{�n�r	�[U��wq|�{v�qn�
--Epq��B�|�Ԭqq��	y�`$�]���]
�F��&�����8
���
�~�Uи���g�.��BǕ7��
-Q���o��ݩ��3��H@�
o�H�lF�1-�u�¾9�(�
0-�:�Iz7h�a[��G��� �
5
��OUk\o�L��!�t���v܍��4^'p�o۳�г�K�~�Dxa�yr"���]ą�ڏ
Q�3���k\�0��?��0p�rq��
�h8�r�zD��+}珇�M�Nj�CD:�@)
�W1��>M��s$����#i��7ڪ����ī[4��*J`
cw���
���74�?�����OD��	V��T��]
��;�*.5/n\:̀�ga�蟞 ��q�v�'	Nf+$���	D9�
��v'xQ�A�O4aw2HF���_>Y/�E{��~F�X^n3�
G|��\�,������_#.��0.��V\\�������1��c�^�	kq���
�p4�:to�m���p

�*�	���0Ha��G���������it {� ������u.���'-n
��cE�|�!znQ��0aUbxS��%" [T�K۶��d�g�zt3�|���n�l�����?t.��o�SO�wK�Dw�G�����
�|=oa�^�j�O��|
��Z�}q�� ��(�za
���T/����\x�1���g�y>#��gn|-�O�i�g���w�g
���푼�zy�(�'颹�M/�p�X��v>幔�]'��Ճ�������C[�cpNAWҷ���k?ʂ�"���:��m����8��K�I?J��2�`�k��|9�C�n���q��w�
a�r����nh���}ʫ)]���� [...]
-�"_��8d�|6]rgѢ��}i�G�3H�G�v!�a��Oz���

'�á�_mv�<T��f�Œ\���� 
3�����1�
6 ����W>O7E?��]ŕb��[�|S�/8G�H�ʖ�e-�
-��3�y<��Sai�D�k�h�j�:5;���z/�0y{�
A-�J^�
s��ݾ��4?���A�=�f+ ����s
���R��X!H��3����*���tK����*�5;I�pW��^���.9 at wi|9S��' v*��UmF��:��� ��g\
�A
/
- at s���JC�?��vm���������|1'���<�����z��n�}D����Ct?'��[�eׂjh|E�x�-_$
���u)	"=%�M��0M������'�q�*ѷl(q9h}��
�y^��y5F�]6E.̎���X�ѹٛ����S�<;�PԽ��}�v�R�����be^o�7^��KaQ��Q���U��J؃�%d6;������f��D�
B��oZwЙ�⧂u���k���pK���l���a�hN�Ǔε�烢���أ�*=���C7�e��f^K�G�LA�3�����|
-�w�WJ7q��w bތ�U
��4������n>���辆ƷL���e��_;�!�,�v��=v<nN�����:�cKf��#��讷x:ppB���y�+���j~��
-���l��K#D�	�
?DWe$.���cX�[\y���*N{�g��N�z��^T:)�3��6��
Rk���;M��.I�o�w��gL�<�5o�UL���*UX��A{q۫��^� 6����W\2:�?i��tS2��T^��ː��ps��;v�j����ʝj,
T�w��DU���V���a���:o8���H�
��{�B
�#G"4��|�n
���`��d��� .�w\zb������<���
�۪����+'vx�
�Skv}=�>�#gjSQ�t
-���&eqdB[�t�w+�^h�p����0��w�V8#ڥ7mHc����p�u��l
A�ٱSA�	��������@�
-���C=E�|1$M�汞ٿ�����ڋ>�*��n�*qJ��
-b�Da˜��t����mU�z
lƩX��Ӳa>�e)��j6ۥ��>����`jy~��K�i2���(��_��
-mܸ�$�]�]S

-ngth�)�64���<�
���<�Ŧ�Vkb��E�Y/�mAd�{O�����S_��
-oOZk�Fv�c�xP��vEd��4��C��K�
�



�
-�O�se7��h�=�igTE���=u�a����cHʷ�<K@"�
���/َ^]1;o��(d#N��:	������@d&�;%5Nϫ�1���d��������&\*.�p���j\=��(ҽK`��W�[;Gg����|�8��@]MU\��ۤ W�{[��b�K3��][N��O�mH"��v�ك��&NX��Q�.��j
����U
���|qI�g�d�q�
ך�vO���)}�}�'T�z������A�]9v6�����]�i��u�̪��U��Io����"�����̉~B���]���E��Q�S#'�1��6A.���׈KW'�_`a\�O��V2��{,l]�p��o�z��=<e�JoЯ��̫��Ec�
��#0_��M��EN������7�����
�us���P��԰�JՑhx�
��9=�������ƙl\�ؓ�V\/� O:)፜���2P��-��P~j��Xؗ
-
�+KT�5�p�ޛ�vD�\
'�E�t�ȢW�
��s��ӧF�a'�R�f����s���բxd����#.��2��G�c�`�
0,��Z�Yn�)tH@��i��s���:�]f
-�9)�FEe�Eb�BwL��#��MЕ6\�:tM@�Zn�$[�� ;
���]&��q���Q�����O���>;��=��J�^㲎���<85���Hθ��3n�f��A9�G{�X���]�e�z
�*	�b}\����ek0�a>���la�

r�� j5�>�t�~�J]{'C�zS���J�b�{>t:�@\-��`�@�	��l�8B��E����f�eg��Ŕ�l���䐿��h����)G�W_�
�Fc�
��q
A�
t0�0��{�Y�P�z�#&�
����8u���t+g#�\�V�
\����hY�搃3�ʏ�:X�Zm�a�)��s⢰�<n�pg�V(��� s��
m?�x�`��#���HwJ��S�S�N�gq
��:xw��O;��_tVML�4΄���p���������7�U���s�PB��I��0��Zaw����p~N
5����h=���k��2�{�}|���:�
F�~*T])�͚£{Y�����Tz.
��{Sm
ئ��d�A뮝��DFӖ4�̿�4�IE�Q��'%���V.bћ13�P�޹Z�<bx�02�
-�6
��1�>4Ы-{�*�u/���V#G��m��r���g�kvK"�^��
��T�ޫ9,=ҍ�%_l�P�P�R��d�@�NG����՞WM�J)�~@�:�\��z�~
-�a������؛5�jw��6�Y���Р�I�F-i|ÛO�J6ʧ�=o�����Un�F����D㱫gC� (�@�Yk
2l-�s 7�{~;.D��k\\�k@�;qᙜąI��
��!�����(Ǐ���~�/v!r�f5Zxv;E��޻�7st_16yofo�{#.	�@%�����w�?{��xr���g�*�
M���
Q���z�n\̄@s���(�\��0����*[��̋0 ɜE at 1 *�T��Q@[��m�{�Y��s��ˏ��9���i�a�
�v�\g ���ر��+�z
�i�Y��D"�N))+f=��N'�;�^\+mG�}w�F�=�GK���_u
-���! X�?��sVR�o�A�V��Zt�z|XlCf��L�n�$	
����:c@�jK��
�	���2xN�(�\�'2)�V��Ƭ�qM[@o<z��^t9|��_�Q�L���
--�}���p��g� `�/ � �F�3/�� ��
C0^�P�������	���U��P(�
^�ዋI$}KƷ���ح=�)
-�)5��䑤|�G�s�i�����EBsp�
;������/ ��
-�
߰k���K
����ɛH ro�:��u@��.���y�ТE?B����NJ��FGhGjI`	͍
�c:{���xt����&��]��ht
��/O�;F;����
p4��| Q�(@�s(4
 _^�w(�O�e�P�cyp\̓W^�Ar��l
�|\��Z�N��#Yw{�`�?�訂rŭ
Z��z�d�1*o�,�o�ǟt�"�7,�������Q	�m���5�w�o���(��i�V��
� ���	]�S2&Q����]oc��)ޙ�
چN�Y�݆]
���f�xj���}s{|:�6K��~���_ �e
--k)@
n

�(�]���r�e@>�e�����Z;���̆p��[�;	��<u
�h@�.�kqnT/�>�:=�u�\���������ζ8��n�})6
f�3J��������� �H��
(d��P�ϭi

-���
U-n۽��6N�=������:S���>���
�R���E}��!�[$�|�����톰-�S���;�2���D>Ga-H��_ ��p7�2��
l��=&��=���nۃC��M��<�mYG�Y��ʻ(����� ��w���	�.ؖ� �U�s�ѱ�h�m?7��鬒�/L���M
9
-������=�'���A>
٠`U^�CC��s
����
#���;�ypI�K�R�
Y
�?��5Ho7!���g���o�k��֧�LY��3sXXٌ�z��y#�GC}�[�5�Ʋ�ߵrV��`G��
z=P���C���[�%ݯ�x�/1D�o��^�<���h9�'��:�6n��
l�;�zzͶ�<$�ՙ��о*m2�1O�-}Y�9�C�{�Z�3K˸w� �S@�Y�/�����(��o2�?M��S�uB�:`YO��&�
->�B�m�W��mv��=7ֆHHo5���Qw/z�U��N��V��yYMecf������\R
����������_���7������.����%��(=� �����
?3�].{�k�͙m��9
�#��\O
�n��b��j��c�/��<Xx���@�
��c�R����A�=/�
-�8������C?�S����Ac*P*ah��8�>�ϥ�V��N� �}As�m���ΦϊZ����h"���О���2�\xq�Ux>��:)���`Ǖ�\�]���������ƿ����L�L'~o
�2���U
]S��h#��8?��a�j���i�Kk�u�n���jf�)��xdɩ��8I����)h���aɕ����r��<�=}��%�IB��Nj��[�_ �yxdUE�'c
�|A�O��l
6���!?��1�]()U<�P�.'�a�W�2n��6C�s��?���~��
���ס1k�*���Ǝ�e�q��$���'�X���z�_�2G6�g�%>��.�R�$���g�8'q���
|/	��
*Ǧ��/�����\�j:��e=����(5�i�^��$�?�b������?/��
�Ú�+aU؂w�_ N����#�}K~
���Jjr�ST��r��]��{������{ޱY�j���q*S+��?o��R(��O�2��U���_�
ݾ7�ͯ���ʸ�6+������"#A�>���9�|h��O{eC̻���p�
��?=$oE븵��Zi�u��0���y���R{P�s�-*q�y~r��Fa��
>�%k�|��%:`@M�� 9
-�ზ���ȫ'�o(b���5�51���o�B�j���9�7��nI)��<�Y��I� �:lUe����[�i��tEܪ�|Iq��
endstream
endobj
123 0 obj
<</Length 65536>>stream
-�/W8����L�z�s����窍��
-5n�
U� ��g��:$(O(��2N���-h��K�)�>4��[Ǖ�:��\_��
-�8nL,�>S�[*W���!W�ɗ�bw����`�`y.[�����1zD��g��"b
�F�=,�Fo����~��U ¿]@�ԋ���5W'�v��d�
��9�w-;e9�qx�(���օ�,
�rN�1�t�EQ�{e��������ˀ	|��-
-�
�JlqX��vtظF�"+�[R�,Y5��eQ�g��^@aAiR
� <1p��-�t����Nۡ��	�ʼn��ҡJ6��\�n�Y�"�1����+
_�Wd�V�?�=�^�ꏘ`�H�]r�nlF���c�n����X�}���hEv�@
���H�K�LT��d_��N��O���XlhV�����uW<��4���H���I�S|=���{,�d�*�yw�d��>�(�ֈV�Լk\�k�]5c�^Tzb��4'���_��U��+��P:oV�ş�N筡�#�`����Z⌞2S�Bӳ���t�
�8g
��!�
f7ō�=�w^E�
-nu:v��Zw_;oD}�{��<o�΀F�J������X;:9=7�䦟�?�����s����Ńk����Y'޹�{�^o)����� �
�۾X�/�c���K���D�Ju�0�Q h��.3K���
�:C-%��
�vND�n���ym����~�feߞ@t�������������`�e�@ݽk>O����d(O����F�k?��#�v�7�K���.���~5�O�|w��7��膖�B�m�f9��
�5�Y}
��ekn����T��xga��X����qOz��&��[�ɊBEˏi%����v*"��и
�Q/�ո�0\���f��u?^ާ\>�|_��;B��Y�?�`� �
�%��7���ᆪw�۰�:dg��X�jta��
x�(=0OF�g�Nn�<]��>?����u2��*ߎ��p�
v���c��ƀ^�g���ϦP^g�k�ek�|�9u4K�v�k�
Ծ�ּ�h2JU�����d����W��U���a��W�X���rbe;��]�F�"VO�p� [...]
��0�{���R����)U�S1�1�x��A�\��m�6����8�-�;�m�r�4]�5�
�u���iP�
>�j�CIw��
���nq�1r���A�ta<���&��|Zܶ�/ P5o )� ��o�m�0 �H
-����U|3��"	�^�
�,/ Ԑ�?R���	��[r�9�DA��*�\sX��J���7x��m���&9y5/���C

/�̺q�+�^�<~��-���Bo��h, .(tT�u�V
`b
�,�<@=E��� �
/ ��
���P貈A�L	��4^�D�_#�
B���)��VR��^�p���:�87���`��6�
h������� F�R �(��/~-�	y�{�;,@���О�P���B�ޮШIr$
�։׮�*�F^���S���IN��m�h��m�1�v����eF��b{
�V�dP��D6QQ� ��>P�Q������e kz:@/�
@�$ h5
@�SD^;�H���z��K����{O���<��&��d����.�Z��
�

��1�4���U����
-�}v
;�(M٧�G5@��3 &^
-��� �m
-`wc
��^�=��i$7�v��;`��5nb�~�ԟ�N=��?x�CN�n�D��q�>��`g:�\��ǎ�.}
l��
�>�Оn�
/`��Ɣ�?	��6�
 
	�Ӳ�[E ����j:�	�̆��;y���<�Y�O���̠��'��,Z���
L`$~˽�ޥL��h�ԽG2�n�|O� K�P�=�����
�X@c
��W�͂#�$i�j��^k�EL Ng����{ɵ!��J�yĵ����!Qs������_�
u���ah-�m at 9_�w��$�~���	nN�r�����o 0b��jW{��a��B��
-��}������
@֗�WaMI�J��뛨]
�ꪝ�ؽ��Tz� a�$�7t���x��S�^Eg>9�j�́>_�ݞK�=�7�8�[<�
g9�g �65F�>lq
��k��+ހ�@~|�Yc �y5_�H�%u�1��|q�H��e�V��hl���nq\.�&�O��
]�
��(
��J�=Вw�3�� ��R��O�Y̺�7���3�F
-]GPh�m��
�����-����kV�4�ƚ�F݊
-[��_�F��ܕ�B�R/� �:���ux��[ߩ���-"��X�Kvd���N��w9d8'B_k�jL�k(�k�g��-�ߊ�
-�V��\���o:���e"y��J��
�� �P7a����0�.�'
����NX�Hf��
-�
��ܙ��I_
-׉�U��X�]��sb��<�]��m��gG�m����x�e~
ʻ�
��t_R�Cc�[���q+ߎpM�λ
}궳��Ű��F��<t����(N�x��l�L��L�]?oF�~��g+lM�)֐�'���km���
u�,�� ����A��#f�Z̃�prA�3��u
-�D�|���7T�#�([�S:�JkwrL�S.��c
�j��+��
*�͸|��ym�^�棭Q��.�bk���֭��~������﵅˺���������{�H
�y
-��.(v�{���96>�i��^4�!޴V�*���x�[N7ߡ�������
�E�	�-���Ŗ�`��Ý��ٝ��:������b�Xה�;�*����h��πcȱ 
K��y��U�{֡���������
U}�>��\�'�|[s�E�u	j��57B�쬮�c���P3zkA�����vPm�ֳ�2�������sq߬��+�<����j���8��(��MYw��f�e��9�_s�K�o&�-�?�ko��I���eǥ�a"UVA��ԣS�R��Y�ay��rq~Tչ|Ik�&n|I)^R�y,�
+� �}��
?ȟ�vߗ?X�
-�Z*SV��o��q�[y�9�����i��mT����
���j�uy�*��fTQ?�]c�
;��O/�yQ��2#�89��^Z�~ѝR�&������]`H�>9�z�� �l@,�3����
(s���+�]�ْ�5���<o�^urޗs��}5Џ�
�M�~`��x���J�AsVU��)ߕ]���f[ab2�":���}1�ʛ!���$~�b�?`�+�?�=�q�{(��n�F�#���2�h#���Y���Z���r��)���jQT�?��.;�ғ�"���<_+�Y|-����aD���hט��5�g�<��%
������x߹����]���>�7���2(C�8�珁֞a�3?9<��h�yTvw�њ����/��V9R@�Sa�Ɋv#gF�U��׺�2�6rp�ė8��9ux���å]J�j�s��&�π�g�d�|���ܦŤ
;Bx���U3�<�`�
0��#�t�P<��k��j�X�\P��jZ�=d��퉉SM��
%�X�5F�C�
Uj7
l�p�+��F
-�
X��@r���F�
���
g����
-J6�Se�w�>u�ej�_����
W
˟۵rH_t�ߗ�[�ϭ7�^g�s!5q[<"
2'l|���Q������plf9���.�����m'�m{]�o�Y�K���?�I��N�|ъa�,�^r��?�GP��N�px(�]�
�A6P6A�b+�tP1K�(θKTŌ��u��U*=��~n�Ān�*}WЛ��@�� ��Il��3���ܙY�+����=,a� Lc�v�E�]I:l�v~����>Ge�Jƣv��� �'+}��ڀ�zJP���+տL��vN�C<V�54"3=Hm�?
��=2sn2���Gߜ`J��Һ���n�G�隹(�A8����W�o $����4 (5��\�׃`���ZH%��N	��͵�GGz�YY,.��F�c›�ۊ/�7�e��
�+��sK�O�9��������¯��ڹ;�^�ՆZ�[!��TJ�J$a8�>��
@>;gPD���ҩ�ށd÷�}n��n!�8C�tgks�)I�Vk3DIYb��mǪ�
�L�p��8�7��J�k����B��
-�f�b2\�;��nv��۽cˏJ'k��N�gw� �8�ׅ42����j͎�>m�W�=�^N��sW��6�c򺏋�ݠ��8��^��
f��åץ7=�,���t�fr�u�^�,�բ2#��pwOn�Z)�=F�a{�Km|~fZ������o���)�8 ��V��%'W�K��d��R�kĖA�[X��G�7�3kQ�]/�ц�ht=]�
ۜ�*���4o���]��Q7��ST�(
�*U�|u�mMzG�y�fզ$�v�
-�yBč��3��[+��l��[�� ��[�u��嵒ܕ��G%���''!��Z;;����ғ���D���^�^^���T.�:8������j��є�}�q/ �ѐ
�R�>�޶v��k�}��Ÿ��ؗb�s�����ﴞU��b���yw�&�]���@8W�/�h
s
�~�<�8���<���i��j at Zz�M;�蹭ҳ�oV?�kc���u}H�k/H��R�Z3����	_̈́
��.t�o�fG��
-�g�u�
�k$u%�xm9S\yӼǝ�Fp���n
��6�
�
�ѩ]��q� �D��_T뼴�f`(\�n�pk43�i��2Jm��WUk�8�L�+���^ީ�w�h�NWJ"]i�36�R��g�vYQ�4�m��OF����|����ϊ����sO������}��qk'�fx�F3�BꝜ���c!_�&�R5sm�*�j�S
7l�`tǥ�����
�� ��՜�|�
54
�:[��ʍ�W�^E(W���hM8�h����Aq���+̬��=W��ju����h|jU{ʸRw_�-J�2
㗒�Ʌ��&��ܻ0��l~9��&Q�����&^�^�X������
r�L�{�����$N,�h���,S� ����
��
r��9A.S\�L� q'{��+ at f� �t
-��U�R�j ��C��9��~aM�L&!mF��Q����z�������[��ri�1��7?��H c�6 at c

-�Wi��}(t�*|�6�*@bƂj%��oP��		�B�Lj5ZPfA���/�n�OR�r�n~�G�P�0��7�<)�䌥
r�
-}���
�6a`!#̔
�u�e���	�O�L�{Rk�mi ��P�r�j�w�6 1�(T;,A��.@�
	
-�WO�0��+K�ml�Bs���H�� ��'~�?��t(��
���=4f7
�w�xe"
�<��xX���] *�B�а8�e���n�P����@�
-��o�浭6�ߤ��D�v��
��ԍ`C�a����u��
-��Xsh��
-��ԇ���I/ㆷ������F ��
-X�^��2���V�B�%'�k{N>���^ػR~
-
���t[������ͼw'�:���d�s荷��pXw.�_�_��k
��s8���.-����	��}j�� k�}�^��$�y
Δ�̃�19�[RrZ�8(u�qu�Ţ;�բF�Ի��~ZE#��ڹz���zp����\e�+�},q���
������M�����ѷ^ �nphY��"��,���Tr��l͈�ׅ��?��S��z�%��{�	��N� aF��n9�!\����羵�Lv� y������� �
��
`��	�"t��� �������?�x@L�'X�R��N�Z�6�rj��
��>�6n^}��Pn����z'��r���K�J���`��F"�Y���a;t��R�N����F{M�
-��P�����g@����|�! װג���J���>�\�(��n%t+��m4�@H�r-�����«'����
f���?�Z��ﭱ��Ki���z�{�d4p�с�6c�c���i"��w �y���&[���@
� w�1ȗ���e��3I����#�֐���A�Ӭ^�E�sҼ4}x;2�;DI�{�G�����=��Ͷp�v�D�o�|�q
�eS�9c�{���*Fcuʴ*�ɹU� ��
��M��=��X�ҁ�^�y���9ֻ��ɬO$!N0��]����R��A���

-.��
-
֓�ّ[���%��m
���񌭕ƒ�������j�k��{W�E�/���Y�A�<� *~��M65�! eP�i���h�I
d{���S8�n���$�s�����3���U|;�̊^-��G'��ݕ��Ų�ɕ���(�(k�e�W'�y\
9cT���E���>�݂��V���'�d��{�0!<�

-e CX(T�ױ��9wOlo���xi.����
<�������q[$��M����XT��f��Z�`�6�e�����B
-���8?��n."u�m��=�_8�X�k�
�W ��A���&��mNW@���7}�E��l��_3�a����)�/�>Q@����"��5�v�
��!��c�ͯf��l�p����U�y�[Z(:]fxz��N�i�ӗ�2">?�=l.�
t�?�s��U�
p��T8��o��
�6�P�'�)���Zܦ,�]�Hes���n�'7>�7�u��
�
-���<J�G
?Eo~DRCZ;�-0��2nI��5�l���lrK��"�'�|�@���
-�m
�n�l�}��;K(ԗG�*�O�xv0	�Z"�X�Q�����
'~�Іp1w�y���vd,��K{�fi��R���)��Tu^X!m��L����Lg�ph� ���yA�4�)Y5�π��"�xp
�cPH���&�Qd��a��j�K�SLJ]���d����k�Z[�J�M�_�w��k����,#r���jL���(�f}����4~”��$��I�]�L�J+
A}��_����[g%
-m�[@n�	(���g����j��2F�gZ��}���nRVw҇�m��k���Г�Qȫګ
-������a�_-Dٙ�.�)u�V&�i�#"��H
K�����0<�S�6��/N}~��p!�
�#��W�I�Y���>����\ZG��¨�u�5�_Z�d�Y_�k����ړ�����
��n���v�JOLPʉ��)	8~n��l�OG%yt���d\����6����~�dp��
-��VP���A��@!�U����
-
yP�P
_<��ik�ⳡӛ*����Y5�cK3�v��L~��g鱦oS0�IOg��ξgx����e^
U�%=l��Al��A�b>�%�FՉ�
U��7� ���C�{
@�� P���{�����ȝ���=^uARf�=]���nu���啚���2�;�
��w?{���]�4
��l~FJa�
�&]����8z3s)���R"���w�3�T0��ׯ �A�C&N�@V߯��������r~OnɁ|������-��b+���#�^�.
-%Ҕ�T۝uw��$W�
�<J]�r+�#q���
�1n��G�r�7t�QdV���
�j���H��%�����
�B��6b*�
�3
>_^v����潃Z�Tm�"s���}w�8�<����6��9A[MG(��ݸ�.
�z�t�>����|'���$��j
f�����!�Sbi��+�4�M�~�?@,�&�Oַ��u�������*��yt1���-��>*e�3�RK�>��p:{�b2��P�7�z�v�T���l�z��r�t?�����E׺Z�wU��u�|%�6u��]6CWc�w ��9�@���&��a���N9�t�#}o��DZ�o�\966�W�����*)F���x2�p3�����@�i�
7nm{��<�S�0���F�»��[�VL��O��y�'��9���.����b��9�
��G>�&Mi��o�˦'3K
Kꦮ�\�,�C�/�ӊr���slO��t_(��<
����6�.8��V=�8���~�Y����o@��9�J���NO��,[��^6�h��	ֆAa�=�&�_g�eC5O�#5ޗ�঑hh���J���s
��Y�4d�#�f��6_��+=Z9����&}�
/z%��bB����h����b+�Z�Y�d{k����p2n����߃���M�E^�j�$wj�⢶�����Ko�y��̪���5� [...]
c,��h�O�a�.���SK
"̪�?�R�~��k�5�rJ���
z��V�4��W14+0�i��
V�|�^�fKk�d��V^��u��������?�E(��
e����y�i5f�Cɜ��`�k��e�aA�
H9՛���W���G��(�P߃MٶX#ƭY+5iΩǼq7��
���=������<U�Y+]���|�U��ʠ��*�X7 �����|��j�����$)'[���T� VO�z�1��`����䫿e��Lә\H��ó�_�w;�g��Qľo��
R�wrQ��
?���U����������q�h�+�X�JT�N���&��Y������a��&������t����9>��C����yR��ec'�t�3�x2o��ښ5&�fPn��.�.��
]���V\��f#�O��lI����ys���)�r�a��o��%?��M����d�~���|D�����ğ�8��z�آ_�c�rGT�}�E�f��TcI�l���?
Uܙ5.Xƣ�TۢR�ѴZ�Q� [...]
���-�=�@K�Ƚ�ȭ5�h���=�@�R m���idg��H�
���ҲA�����e«�le!z<�.���S��ߜ�w�<
���`$�� J��J߼-��� -�P(׮�
]��k�A��
����Q�uZ�ZW
@r�
-~�O�
�]�{Ɓ��#�-�E%ql��ЃEWy��r_�Y��&�ݸ��_�_�!AS��ݶ�ki��<8� ն<T� �� r��r���
�j[ \$ ��) A�+����>C�(3��t�e
j�kX��乗�d–�Q}��ݩ&ܜ�j�+ b�x��M�����4���4� ˧' u��"�	���wQd
�uж�
@\�G�^_d�l�di
�� ��J �Q�k(��'?;�����%�H���wj[��}:�
-df�~��U@�Y
��ӡ��8 ��r �<)���
`���yx�@ E�$�m�M�c�}��� �)�������o��|�??�Hy<I�N��(W�
-�׭��ud��-�R0*��K	�
�Q�2� !!��p�@S��0Z��7Jc���J��Pd���
�o���g��B�5V���A�{�����Q�� ѴX^�V��]���#��C���J�![���X@��o�ia���b3{7W��
-8|
-P���B��Z�|�$ �I,�ep9�
�/��=�ź�~O;	�带�;Q��{]��K?H���UC+mmBV;lo�+��rL	#g]���.u��b��6R�����
~�(oF	Ϳ���
ۼ&�'o��	p��<��ѻ� �/(�(���,$������}�
����T�,��
ھ
�
��~x=X��O��r)���<�o���/G=�d]�*��4C�vc��fC��ܣO��w�� �J�_��n��; D��'�Lp�L͖ϋ\��%Pv��
��!�F\�
-H[�/�O�tVa��u�u�=�ju�[��t�Z��
Ͷ���3��(fP.U���-�w��i
�W���I8���ʡ���w�����{MS�"�X�zlN�
��.���L�ٞS{0y
����K�\�x���
g��w�畵���֨�,M�NZ���aڭBu��vqM�<�*��F�����yC����Bc�"�1���i�%ᓞ>>�F	��[&a�:?���Hφ'�l��!�xn��#�Uu�j+�FXզ�w�c�ٳg��S4�犾���g����2y�B?q�>qPM��ȯ�]S�2�
�鶠�C9dP.���5�-��=;���Ip�9���c�56��,~�ji���D!����c�
19��o�Q���w��jb}��iHFe��u�XO���a�
-o�H|�^�3K6�I�
-�6�)�ւ
-ۜ��:x~ӡ�g�1��T��
	�>�֨�p��e��@K�Jw�rUނ��
h�h�(%0sn%^�XMW�!�=B_
;Mk�;�S�T
-
�Ɏ�e�
d\g�V��uJ���W|�LP�K�
m
 )�_�th)N�Cy�:F'�Fo��瞿�/⮤��y�޼j���vC��quI��1uc�q~�����m��25���
V��L�k�a~Hw�����ϥ��A��+ j�g /�P�ƒ2�. �Ӳ9U
yeX�sr}i֏}z��ti�-G���a�����zC
-u{U!���V���w��"�x��oe7Ar��(]��=�#��� ��#U��H�~���n
�<[���W ���B9
-
oG��ǫ\�{�!oE˟W�v���Bk{���h�E˝��F�6ڪ�
�?��!][}���_�
�:u�
^"��iJ��1[*��4�Nܴ�a�igX
'�2H���_D�������y~�b�������
�}�����E�����4c����$��l,���=��?�%��
-�}l�Ŧq�n~�1S;$�v
�
��7�|E�k]F�=�šu�W��)�b/F�� �� 
ck@�
-�w2�8�n�P(�����a��]�ڰ+�[6;�P	님Fs��]
-��yg(�V0嫵q�z��O�}�l
~"��uF��<���
���f<Yc�<?��y~��~}��E�}�/���!"_� r۹�B��6����h/:Y����?�i/�

�c	�͉[�Vuj3��:�,�.+"?�k�
ȏ���&�tuN�&���$lW
-��x�u��UX6G�KF�x�GrQ���}%
U�w lׅ2����5_A�i���p�.[���
���^.Mb�5�4�ky���ƐS��),�L<�oӚ"5��>���Ft�#��0>�J�H����✂�?�˝ڠ���A{a��N�ч
-��*s� �	2 |ɂ]s$juy�h&g��h��
�x�%�<�ݧ����ϔ�xB��L��.�.7�W��(��Yi�P�B�fiC l����������E�z}�p�4Z���Y��v�7D���R
�nR����W�/����Yٻ �ݮ��k�����cQ7v���0�Z�]��
�E�)l_]����<�U��v���l�2G��
�؉>��̭��%�r�����^���O}&E��i���"
-�=�{�
 ?�@`{w�'%�L�'��0�)͔⾙dmc�}�T$2��� ���RT$�Ԓ����MN
W6<?C�����.��eW�����s����u��݇)~n�B_�^����-sᕾ�Ȉ)���_�!L}M%�]Z�I7qW��q��=���F^b��7u+}OoP�|
�[�iej�v-��
_�'pa$��`�/f\�c��.z�Yq~�t�zxu�*JR�S����i�>�Δη��Ʀ���o�x�`�Ըc�3�`���≳����T}mj���Z��b��bYG�٩��Ea���U,i���
0�砿mj0���!;g��Ҋ�9��r�Y+�:�V��l��av��a��I�ʳ�:I�_����D��?�뾞�w���t�
�@�Z0T�ݳ�(��-d�:�
-�K,pwd�@z�!�$�A6=��c��g��yC��ˎlt��Pݗp��R�W��D{�c����U�vn��v��5:c�_q
&���a�ӑn�ڗ��z��5t�I���&�Σ!H�}y5
���pZ�d��Ԑ9t0n���z���`%�b���
u��hJ��H�ا��A��K����L�ɽ��S���HjvnN˸Y������|�ݢ�6<�
{Й�׊��L�(/.�.�J
5s�<�ޚ���n����`���}��f�@��fJ��
D�����Q�{�c'R�����-�396�;n��i���fcn���ߘ�ب~��ϯ�]i��d�Yi}�I=mV�8��7MH�*M��Q�wE,i
�����'
K1�Nϟ.x(H7�(Ŏw����
E��J�*��i�2�
e����~��[z�U[�
Q��G����b U���jf���p��)wULgL
]��)"��++�N�k��d����t�����6����.w��O�Ԭ���뼶�e�5|�"�lNE��J0�����n�����N��`�|���*���ɟ���
��d볨V�o]�Y{�n5Q�Q��)���+�!<��,��ǔ*
�{�4lq��7|����y^-�S;!j�QIMYc��3d�f�?�aO.Г.�<OY6=Q��j��
�g���cw�o�2�=7�G59
�*��
-W��=��~�t��t��g��و���0
-2W�J����
�����SZ��{ʶ�d|��x�Q�q?7�`�ܽ�l�]��&��vӛf���#����֌�$V�BV�'�Z�Nsz��u�z|�����&r*���-_�)�ӆu"���!n�Lr�
�L������в
L۠����c`#�;7m��l�n`�vp%��,��@G(��
r��`R�p�z�̗��_��z1�:�
-�ϲ��s�n�S�\����x*f��hN}BQ����!���#��~#�
�ѣ�LZ)�O|�}�
!
- K�%��Y`��ح�0
- ��]��`��a]�{�
Pa�h��4s
4#4 �һ ��C�<�3��K���9qd�yBLq�K �L ��l�U&��盋���� P�e�
-�YP��C���
�> 8��>���p`NsՎm�ֺ@���s� �Y(+5Z�8(�:h��4ͬ �@��
 �q������;�C�i��������4
�I��q ���@�jF�϶`�s�J� |�,�-���>����սB�/ РH� T�������Cݯ	@Ge���	qtJ�b�Jx#����ON�v���
-6o��c�m�~@7��3�X��F�)��%��M��R����|�<�n�B�I�Ϸ\�>�ߓlX�; �I����Nv������^����S��,
��T��}Qfn����Z�j��
 =M{���qf8���=#�@bS�9�fVD���w4q�����N!x���F�%��J'�Pm��Ԋ��I�_�Y,ή˸@��ϋ߸<«��/�U���+x�L�骭`0�ЗŒ/�`��T�
��(4"F��^&zE�k Ț@@�
@��#@���!�
-�k����铐q1�,>g�g
��H=�j���|0��$��^]|y[!�c��O�pSK�`_L�W��4.��A�j�{�}oj�[$�� �ǁ}�Կ��y�{����
� #����O�㳡����z��{��������["�ĭm�
-�u���L�9��O��@h�|��u��h����>ѹ
齎�����Ǿ�����.�;�s�o�}�C/Yr�bZ� r����5%�&[�q<F0�x<�]�δ��[jc��]���k�
P�,~͝_����y��7Nj�b}�Wy/)�^{����b
�+=}l
��	��<�$��|�8F���ҟ�/ ,���@�c@��* ���]�y|��M�˒���t��|I�[Wf�Pd�Av���x��
-��k��֞
-c~�^�D\�������́:��Iz;��D���ύ��P繞6�ȣJ�)�k�� �2
-er��O��[!�kG���0�הl
���u�Z7�C����K�]�S���=�!�nO�G
·�I���k>���
���������6�:�r��T��wl�h<�^-��%&���:÷>�K5N��N�W |Z�a{Ph��:����f�D�,�g���0=�W?\7/J5���|�	n�EO���k��+��<����ih�s'�YP�XܣH��"]2����
�O�j�0��e�ܖ%?���2�T/^�^��?ؿ� ���~�@5�+�����8�W

Ƚ[��p<A��h�W��Zn��?���7�U
��F�-4����6L,w6�x0�'{�u�m��B��,��2BW��ܹ�/����ߏ�Ჱf^�XK�
O���o x��dqP�{
2���[RV�_�f-L�C���=�5'�
-�S�P���n���,G6W&��o����W�
�,g��5��6����\��EZ{�NNK��-u���bJ��k38�7�;\ͺ�|\l�
-8
�}@�sP�`�$��2����
N���R��'�ᜒ
-��s
gK�]Y��xsxڌW�{e��3� ����TZ탧\-����"TҰ����<_�3I�7�`V���t�W�[�/`f��k�E2�hЖ���,�mgίJ=ݶ��5(Y���y77Cc�}�Z�lVG�b��E�
���j:l���0֍3?[�
b�!W߄����n�^���ι�}�Դ2Zd�Lr2m�k�^NN�s�]!��
8oj<�p�[� ���cz
`f
�{Y����i�� '�kkX� z�`�q����+�x�?��teAsF���_�3%�u��9��i�y�e�u/�s��d�S����N��lu'�s���Q:�@x� P����^[�Gr\za��oN�}k�Y&��k��cÞ׈u��ٵL�0RZ��v]o�v[۔J=�l8�\�4�Y	��.m�R̪[q���}
4����
�������aw�W�q��/�`��(T�C�osr���������\�؊]
���a�*B
�osr[���-��RնȰ�R��;�*#~
�cyqZ�3
��b�W��4�8:N�h�q[願��C1��`6
o��� ��!�NWd��AosYy����p�ta��ث}e�鼣�妋�*�1��,�r
nz+��V�>�1�=��˜�츂hͻ�I��1	�QV>�kv{���{�
��@��"����ʍq�9
-����
�ّ��d��68��x2'��Hg|,���6��,�Y�Y����]H��T�P��u��_jhuz��R>X����_G#��M���օJm�����of����R���_ɫu�uɺ|#�k-��7|y�P踠?^���c���vр?��
aO����
k
������~܁&`EL)ȓ���:%p��"�ط��L�;�3���
q����Ʒ��gS����;�m�$�e�
��K����i��5_�� �b{
2QǸ�
�;�Z��nIn������
pE
�cu=o�����+�L~�3�V"�6e��^��ǣì>��pFPԠ���ɨo�[�
w'�
�*
��[=�f�
���v�o6��_�v0��;���� }H�<ձt6�F�=n��>�g̖�*-�X�9�<�岢-ut�
�|��4Y�,L'�~,f�W�O��p������W���f�!�g�R�md�����k��奃��6�lG,����j˖٫ǖ���@&��~�@�)
���Õ����CۇpR6��as�*����+��8μV!O�9�"ao�8�ְauhQc�.�)$�{[e�p�����u�
�����o���M�W�(������a���M+iD
���5mJ�����Gݮ��[��C�h��q�x�ve
G�\�O'S�Ӆ�![�f/��2��O��B?f�!�έ�둥���O�fg:�s�қ��
j�1
:qZ�`{m�<"�t4��tDKmr��irA����4�!8�F��K��^E���%�9�$���.7��"�ʼ��g��ݗ9ڝM<
.����(�0��Z���g�q�K���x����Z��9w��~-�,o�����i�����橆�(�
A�*
-�m��z�����W���U:\��0�n��1�{�\2$�-�`�ϵv��{$���'ݜ�������p5�Gú��{�,��R
�l�\ɴ[a�¤t�i�k|�
��yc�u���
�s]�P�z�~�����З>��r��ti~��"��������K�,ȹ��k�Ȩbc��pB���FJ�����M4�{.h-�b?���(pe����n��4�5VT��̊Ma��
����;�ŷIςƉ�����m4��n�ִ���f��n�I�߽���/�
e#gS����kjA���\u���K�ɸ������Z��~���srX�;�뮱-۷��<�v�rm
[��k��q��?�z)P˴R��ڢ�T��[�2��Sw'��z�t�~�|�:�m���7�{��V�,l!�닪�ċ��(B�� ��It�in�̷;�ʳ�5�
�(-�T���s�4
-�w�W��+�J�GM�w��$5&*l\�t�Y�ܮ�2���?XI���%
��Wm ���X+�tY�X+�a]�^ދ
��s�;~H|ËFʴ�����MO=��St��
��z�7e
�.L��=�멇Vka�e������W��v�r�xd]KCz��n]M��3�=k����n?_%�Y���6�s������i�~���@��x
u�7i�;��* g�?TΝ�!�ڟ�apwC4'�q�
���x���<��q�Vy+Oڥ��q%����\R
}��U)8U%Q=W��v֘���zʇ�'2ޔ��
��[�]��
�]�%�d���+�dD�#���
-YfI
���2X1�o�UX�7�Ϛ��<�,qN*�i�)
�tqҨAIm��W�+���S6k��B&9�����(�*5��b�!�> ��J�=;�q2���
v��#��a��(d@�}
 �w��^��3��� 5Z[�n�@�	P�k �m q��ӵ�F9 ��� ��@�^
-�C �P,@�k
V �k
|`@�]����H�N&��'�����_����������Єd��)��q0$������q+
�����, r�9
-�I�؛����z�S�2 at z�}}��s �cq	
=A��dK��됅�(]�c�����$� 2;5�)�P�I��� sƷ:�z.�&�
`�$0�f zI��gE�maPJ �9� rGP��/T , ε�MA�P�ɖGϯ�(�=)��sI����2[ ���Z��oK�
��#(Tg�P���� �6V �b��m[ ��dրi4��W�r��[O��@���l� h�����d�[�O|B��k8/,��bt|�_��1���~G]�^����=�o���#V� ���E�	��U���ɖ�����}�ئ .<� ��: ���[�&��z�@po���ר~�bdb�|����~NQ��+�*�G8�揪{rn���D���Q����
nh��=4��r��� *��΂�
-Q���u�B�Dc|��}
N�~�w�CF�_�
���}Έ������Q���� P����+�/ݘf����D
V
E�T�vAѽ
}�~g��y:�}~��"k�_(���.��� �e
-=
;Њ�����ጷ��?B@��8 Nz�5�s�3���Ckiӻ�旷U���~������(�S�+�sd:���2��5����
p�ki!��4�x�a��^xwӂ{��8���>{������ڨ�R�:�/.����/ �Ҵ�Wƞ��{]��@�
9X(��d9
����:A��E
-��y漮'������I���F<��S0{��犛���c���
-qw�,8]w��&���R���n����� �(P�� bb������j[�yZ���~y<р�Yr5�~��ǍΥ�8	���a�����y^��q�=�i�;
���@
��>'N>;i�Pۀ:ֶ3�:ب���ijۣ���W�3�/?��u''���z�`���Uh�O"�$t���n�&�����S���V�OH9;�������k^g�m�2��#b���'/�����
b��ܢ�~S�
Ύ��vbJ)�M[Y�n>�v$�L�tq�T������|��-K���7�
�[_��]@�2����{l��O���.�0y�.a�{�k�����:{p�����mT�7�%6r����6���r2�i����$���z�	�l��Fz�/ťlφF�>
�:�
t�=.��{�X"��7 �[��&�?{Ũ-����=���
���:u�0��A��\޻�C>W�wG�mt�����b�.��}����S^��V]����j;�z�O��hNjxx'����2�:��h���W{5z��>��o�sQ��m�����
R6_���w4�N��>���q�8������폓|0���`
p��
k
-&12�,���Q3QIo,bm�ǵfڗ����@E?�GpӒB����
-���곙g�ę����
ph
 +g��kB5��d�X1I;��~��u�GJ��1�9
w*B����l԰��Pϑ��m�s����bI���k:��^GV�]CWH5kͳF���fb�{L��Sf:C
aZ�Ts[��p�U�7 �6 �� P��
-2��z6��2
+��L��+<��~vo`��
-'{S�<�ѨV��
7��zF7�`3
-�!����7w�;��
���X+9�W;��N��+�Ԭe9���U1A���`�^�
@pu(�"�zD���.o��mzѨ��G�YᘇkƎ���c����p]ؔ_���u&
pͩ��_��L��N�<��4Ѕ�|Ң��UbҮ8b�
_&V�&ݽ՞ �
� v��
Ї8(3��@�Nk?�݌n�E�{�%�H������z6�/�����Tg�]_�i�9��VI�@�}���M�Yy
-�\�]����y�	r��c<|��
�~2�b�

��8����� �7a�TŒ��ί3��8��G�۞��c�wv�Kn�pM5�8�_杞o4m+\ �O�
-U�3?��ج,���n���C�
t۞p�6�P
eFCc89�G�'A�� G�H�o�D�.��?����� N�ZP�x�h����F
5�H573����@1S9
l����S�hq;,�pQM�>?�ɬB�iYu	�I��6���x���F#�����D(�6P�얿;Z�/$.�/�ʀ��O��Ԑ����О']
�V>�GR���a�|(ŷ����֝�f�7�=*-��H���u��n�W�ΪT�)��G��)tҷ�1U
��m��&�����ש��_���{
-�V�,*�{V&�z��xa-����~ g���
��%�7o۬�zP�-�ya�V�ek\%ګHݍ
�TVg��_�3r�)
�,/s�]JuɄ�}�#o�C���J�V�g�g������ؙr�h���Z������C�Ëb�q������{
�׳{�E��U2.�	r��{��XJ�T�_�v���)���f���컽�E��V^QyOt�N�b�99�-�*��L�[Ov.�~�m6zh^ẇH����nՙLQ��/��N
vh'���N>��:V�pzǻA�<�=8;���tBm� 0[h��z�f�e
!K:�X՛���ʙ��7���3ޏ���<*|ޑ�2�נqfS}+�^o�smIw�e��)�c�\2����c�Fk��]��L��&�v
kk��VC\�w։6�X4��-�u��
1���� �)X�2�����|���2`���U�W����
��
-u�q�״t�wC�p)�v=��v�ݲ�άE�M����G���}k����jg�Z��g�jSm�7�`�0�{@c^=b?�J�&͚�y���1�&�A&
+S+ at g�RR����+n8�)e�H�z��-�r�^o�K7J�q7��|ذ�ü�}g.e�x:���B+Uj�3Z�&ں��(sk4��樱�gj����o���~昋9l�4C���
.�����_���>mw���	���}�j� Mq�3��'�h�>�69�X�Rg|ꔓJ���T�n���V�V� �f�]4�U�.����d�Yw�n���n�Q=;�T�������l|�ȥP{�V�������P.Q?���A8��m4�Z`X�����4��h����+R�����iљ�����ұ�b���-Nh��<W�4��V���^=��f�<�
���t���t)S�g��捎�~�C�\B�MJI�g������Hj�l/oR�
���9�[pݧ{Y�U�^/���
�O3�[�^�6-l1��j
6F�%Ԁ�O_�A��I��ֻ [...]
��͸���Lf<oL�٪.��:��|��Y�Z}�MU
7�V@=ר�����bN�2��\�W���;�Y��ffTF���7XY���D�U������G��;�>9�6
�XٲL�y�;�1�`�Pj
�FC\7;��X�,]��&�ŇV�/�����҉�nyC��2��>%�2EwLՋ��X(��� 
^�HƟ��vl�N����� �m���]�&

�?{nYw�g�bz�tiQ-*�8gq�>�&yZ�|����ق�rЩpș/��aT:(�i�z�b.�V�
���I`���
�{Nrh��KYC�t��b_�$��̬��9�֮�oXu5�-�,R�T�l�z.cmX��.�#TE1w��ۮ<j-yUY"�T��+���*z
%[8��|`3�|e�6`ZYc\�d�s�ϰ%fBq��Jn��E���'f�E
;���K
��y���,��y��EAG!.���hl��!vs�&-���8ď���9'u�+�LwA�N��l+�~ɰ����g��Bn���B
��=k]�'�3��|�b%27B�㾆Vs�
r�`�M; ��g�o i�.����:��՛Ⱥ&@,�
C �z����ǥ��L����e[�xZ =���3H3�
b ��M�����l
�c�Y.!�
Hw�����k_ ��`8����P�����j$�v �������8� ����t�
- at r-x�!��3�A��;m�w�+������+��� �
H�;2�q��S��K(ħ؝��x\9^⬷�S�D�c�O�@��-d���)5���YZ���
���
�-�P� ���y �Y���֘�aݾ����`��B��3أ�������:3q��4�{\���1[v.�
-S�ܣ;����@�ʔ��o
��I,�ݿ�cW C�.@��:��Jt0�Z>� y'3�x��� ۺ&�X�%�r��e/��'��4�{�n+�-u�t�o.v�#��T��y��Q"��h]�.Q;P�_\�4�U��5��;M���=������
0��lRI V�� Cߓ���s�*�o���2����;O�y~|��R�s!L��J}Tk|������
��V�2�RŶ���!�{����������t�\������?���7ږ�Б� �
 |`���
�
�3�+3��u�5&e:.����":�/��q�
¹-�cf8�"�R�G)ƅN~�����;&n^�
+^D��O!�w���8�u?<xKl��Z{�W T|� VkT���&��������S�	u�^q�B����{������QzYB�&L�=R��U��#������)��y:,�N�XI������G�}c��vt�����@��?
-{?��>�
��4j~�`(�6 �����A
��K2W��T�$����������ʫWS鋴���H�'�|N��s;�V%{ᾕ��vN��q�����}6�
HiX�g��p{m<�myMY�����v��z�/~���1�e����Rv �*�����󳻽�C7����՗��9l|P��
3
�˔�n�Ǿ�w�j)���B��������^��v[A��F����pI�i朶�.Ţ��f
s�������o ��@��S��[e�R ��_����ݙ�½}���g�pj�ԋ�&>�� WR��X#��6Y�����M{C?t�1���N��b�
uiY/}kn>���w�`}���ʣ
0�Y���Rz��eqE�F `�o رS��N�f�	
@]�������k1�i~��M�����1�]w�<��m�VSNlVHH�N��U
�o���`��g��U˥\��@OB�x\�:���y�
C�)�VK�k	�Ͼ��
)}��b�K����Ȥ+��Tw~���8�i��Ԛ�D��~�Cn�[��$�6�\'����i�V��
Lxb=bJ���KU�S<l!�~0��8���̟/Z���)Wcg2P�{�Vў1PvX0U��Y�BR��V�
���
-��j��仗q&?o�D�с1���l�^+
-�	0��*�Z:�;�������,Zgc�*
ô5\dz�E�*T4pÚZ'O��
��(�.�)Ķ����46�ǽ�L��/�|�g���]}���/ ��A�
� 2��8�<�7�=��)
Ѿy��Ǒ����S}�i�K��
�2�=u�:Or�lYQ֑�HZ���'ӚŸ������'���M
�y�9
�
-UA�N�)�Io}�ȵш�
��Hz��/ƿ��4��R�Gn
-/
-7���/J��?1�w�y����
�m�b�v\fj
��r%�r�q�Qo�ճ���7uK.^���O��c���6Tqz�%�L�&�����Rãtq��"s-"���ќ�׽��}PF���/ �W�^���2d��91
��z7�:f�z�0t�
k����ׅ�l��!OSo���f�BW��U�����<|�i�8 ��JϼV_�	3� �0Im>ޘ��Gf�1��j��6�
Ya�7ʿ4�Bg[��YwJ��!�t{��e	�_��$�j��
k��h��fmE_���H%y[
�w�l��5&
���������ɮ�O>V�8A
�1��7N���+j�0��a���:7
����pB��Z������[AOLAC\-!Ɍ�
�^`N��+Z�E�V�����G^t���:���s�=�����Q�;�YZV�7��!�
ޘ��Q�z��`Éx�
-�p�_]�
�ҡ0��Mb�����.AD�%M����� ~�¦�9"N�n��{��&P,���eɭ/�X�[|do���|~��Ƭ�,X�0�Y	���S�xw
���n�buJ
-ӂX
(���
T���e�_R�s��	ӏG]8����� }�Z���Z���)w����A�~o[����F�Ĝ�bU]�*����5~4�I5%���t!è�?u�'۴;J��(�1n•�A�������/���ɞ��tj/��]�٣D/�
��4��z�~�W@b�!�6af�3
����}9v
>��v�X)}:m0��@χ���[�YX��r��(R*u]N��`��
��k_�r8�{ո��`��;Ng{�(M�`
v&{]�ԛu�0>t�(ƻ�7�����
�/ r5�_eA<��I���$ެ���:v�*JEWc���E��R?�::ʵyyHt���
�T�ɓf-F>�6�%%�
����N��_�J�
��?
O<�.�9U:��s�!���n��;�-.[UV�=��.�����
�/gO�8~ǥ�k�<�b]^
�K�]�U[�}��T�2��+E� �.fCJ��ބt������BT��AC�Zp��S���z�O�NC����������J��2�~Yd��a�1�ho [...]
�db�?���^��
�������m�9�
J�v���c��a�Vy�^���>j�;Ԗ=
c
���`j�+{5��
�/�ѫ�B륓����I�=��U;��V�+7-d�6���
�y��1�1��6����z\���+g}����+9y4	���99�~�
-���h�˧����M�Sn���|�5;�|i�V��3�<�{+9�R��	�79��ll��Q�Ϣ��H���J�C�ܮJ�n�@�a��i�����`_��/����zB��N�v8N�^j#�-��7�X1tl��V�]���\�s��^W��Q�,
�lm��?X�1��
3������Q��HL�~<��z6�
���W�hT���:��`��R��e�t��-�d���cS4:��Z�o}��x�E�����h�*�i=h�f���>n\�unTW���N��2,�7�L2�LZ�)���q}���mC��\}��c��\tq}����*�-k��V��x)�U�B����F��J����s����/��u�/s��:��RO5���y���&���vө&T�r�r�6��ӡ�J����n��G�����<�M��

k�d߫��T�R���e�´��&N�
-S�d��}�e�Kw���ﵽ����y�m�y��E�(9�q3�����E�:7	4�m�Eksɛ-��
��e?
rG�i�P��j��=Kl�ƳB�>��V5��QI$cSi'��lwpPF6\����v	+b	�]�`Eh���KE!�4!�.��P�jݓR�G�3�o����<�[/97���|����t֘D�.?�3
�F\���t5�
���R�
�egq���Ì\<��E1[���2΅B���O}.�/�g��E��,�$�C�v����Z.�j�r�/�J:+�����}j7������|�)m���������Ԛ����jT�V,�}�~٬[�2��%�1�s�N� y#:�GL��\�s��
g��N�$��̴�U���6��|*�ݵ��nNI�=�H�e^�Ͽ���4�dt�d�Bw�ӑ����+��u�9�=�>/�^��(ke�pܗ��r,���P|����;z�4�����;��h4�i��9Ð�E�L�f���l]�'�{����qI0yX�`��Bc�,:�(��� [...]
c����&���]!^��BR��3	���v.�^�
ҚP�ɾ�=r
-҅�R/��C*�u� ���
����� R#N��To�قԘ���n�HM���Rbm�8���ڵ����ڋв��XOk_,�·�K�GA��f
 Ը
�i$�
����A�1
����u ���
�@
-d�?��Bm��������b��ދ�A@���3����
-��G���|A�|��BW��f�@ZM��BDr ���o�
�uo
���{/H��H�t���
�Z^��Z��ymqVA���@�)n �
�*L��'=A_{�R�]r�>O���1��=�l���U�^���h�H�p(ThC�W
���V ������P<6 �� 1'@F�4@�T 9�D$��&�`	��K��������o�x�B�qoO���bڠ
�ټ�Y��^	%G�jN�wD���v�g=L_��_ H���S�J�6�y�n
-4@�>��\_Ԙ� m
� %Q�u��8��;O�
��:%?橔�,��]���N���۳͝oM{r����󑨽�VCD� ��+�����W��b������T�vr��
-WP�s��#6�ܿ���9�T��y?�k4��q>��#k����nq���Z�l'Z�$�r���<D at A�&cD���
6p]����e2*�OA�h�ڢ!x�vAv��CrY�$�`G��'����:{
-j,���K�M�W�K���V���5X���
��9��`�i��y�v��9���w�,�?��D��
-�~�|.�%�l�ֶyvMB
��
xP��x�7>�]~�
����+ �S	�e�o�c��i�
px� ��J,����\햑M��o���X���UkƧ������SpMߩ�i�d�=��
v�9:��n�1;}����?�N����r�g6��6��2߷�7!�K
l���;}����{(T!3�rhh�n=|孡t�EG�P�%]�D�~��\@L�	�{����c_�����޻���N�*�+���v�՛���v6��*8zj%ۯ�k��;Xov����hb�B{=��{k�)�Vn�~�?�_�ƼB�a9�r脇Bo���\�Qo��^E��?5���K�%�H��~2��v%�<m+�#�������^��͠�:/Z݁V77�ƚ���B�0[�fb��]Ẅ)
i\�nݨ�RW�����MVW���_ ��M�5������Dܴ�0huoV��_O�\�-�
� �0Z)��t@*����25����[\��|+�ׇ�1���&�ʭ��R���4v
�2�zO�?�������Mi�̤���3�~
��
��
 ;f)�o�" �j���u��HD:�������q/r�Qk��0w^�*ٝEN����\��n�wXoyiV##̤�F��N�u&"��(j���P?��r9RT���T�r�9?X��|��y&�i}��Z�O�/ � �M�6nVݢ�Ū�9�/���%'u�ܮ�a5'�:6�)M�|��N-v���R���.{���z��@�1�f�L�:�JJEGJ!���|���f~Jf��~1��Ӵ�`�
�FU9�
YI+�o x�eҗ�3Jwr��a���N<��y
�z�
�7�i��ņI-����m���
�u��,̥ai
7�W{��Ws7��zz<����iY9\5�
�Ң��~0�
��b����Rx���LQ�
��;P�
-JѦ�����*�o.Q�G�K�����U�v�ͬ9���J
s0R2n&*���BԬ�����IW��e�Ǚ�~&a��t���d�i�p�+�'�Gםn)
-l
~�|TT�EdP&E�Y�	��랾�+��?_he���c'	�Rg yYs��+|�\.xO�.�
-���/�J�_�E�.��=м
-��8b��F��u+�����Cϖ��3��e�~6Zƭ_@�ɚ�]
�bp��{L���6u�qeM������21y�!:��V�]�y���I��˖ar����vB�����N����C6
�K�v�[ΎJ��w
�T�l�����j��.HD���r��k�%w��
N�Zi�MŅʫ�
-���2�%�̉U�V��#��*�EB�C|x�1(s5h��h3l�����嚏�&v*��~������ΡI)����)�}❟�Λ�i}T����;z�j�
�T�̇�kc��eg�d���֕��y!�H�%b!r-G(&���n����ӄm����Pm�����6�҇p�
8p�W
�/�?���Q6 �^%ds��8�5������]6�!7VF.��]L��$,i�nL��;��%���^���o�=y$
�aK��������Y�
��k�����<Ҩ��2N[�D���x�-���������o�%�V�֊�c���e� ��+�ݝ�Z}���:w�=��~�>t��f¾[SU{בS�?y�cR\!:+�CB�
0cϟ`9�sot�){�����@
�JQ��
-�`B��z��Q'�Q��ST,7�����`�|� �]�/���<z��
h���X��
k&nu+F����Q��KI60�1��k٘,2;��wi��EA`U�����|>B��~��ͺW
-��	9޲��0{�*��3��au����S����?`���{���0��|�@\�x	�X�i�c�+��
��I
��K~�NA�*�'�
��eKXr
o��Ƞ<����&O�%���
�U�<�ꓐ�p���.��o�����]9�U�2��/�?���굧��u�V�'ω�{[$�Ͳ��������r֨+�:��yN��w��r�S�5�����7F��I�È�O�k�
J���z�l���������
��}ý����v��BO~��!�P��j}�T�p�v�G�w+��G���
��
^/�-ΞMbEW÷.9ӻ;)�� ��'w��y)qՑ�T�? 3��0\.�TY���c�;!.ݶ�Gͪ3�Wʻ�
,G�B��PT[X��P��-Qϒ�7}�P�/���Գy�6g�mOֹ�Fv��zY*���t�	s�EA�1�o>�5�p�/a	�J�
A���Y�-�aӟ0x<��Ӟ����>h9��i�!ʸ,��<�F�5�d��
��o��X �ݪSCv�z�A0�\WI}vv8#w\���f�8w��KC�,�S�\�
-٘��M�Q��-��N{z�8�_?d���P�5�1�R{��H�X]	+�::z
�
Oȡ7O���^�ʟ�U��֕oI�mID��v�"W�\�/�H=_\���p��C��$
�eKh��ʄTX�/����T�
N�Ƨ�U�:H���X��
��ʎ1g6nc��E7:D!`���/TE$���*5�w����A�j��}x1��}�_a4�s0z=U�/Ϊ�a�?�W���Yv1p��&,O1Ɠ�+��׮^���
�I��Ͻ:���_h�g�Թ=Pn����I�ՉF
i�U�;ݴ��

O:=}6���a��S��	w
�*DZ^C�Z^Q;��i�n*�R� |�?8�z6^0�PU\��z`OJ�h�u]He�'
�
-�
���Q
�)����ݨ-L�����v��cg��;XaS����P��v�Ơ�{ƭ�ڞ����m�b���=�@C0
�F���F������K
����������~^,�7j�O��zT68
�f������l��s��!.�;w���<ۮ����T�Z~�
Z�����>Y۬��|�P����̄���ePo� [�e�{��W�9R��h~Y�,� R�}�2������Λ�?�W�c;�O*�P��"U��k)ðp��
�#{
!�:�PO�m�J�ڬ��h,H��$�q�ֽ�a�>�=���UL�S�޷Z"i
+�6S.��,O.m����z��I�rq�<cE!���v��f�ko%y����m>�ۧ�0�=�l"�h��p_H���u�R���]Ԧ���W�Ȭ��Q�xU��x[.>�C��?�%�]|Ez�'�S��,\�_�Tl>>1F^��C�u�������W�\�7��b��_d�t��dg���1#[��ܧ��Qud�v1���Y�z���J����+�tٟ��r�~�KPb
E�XJ�ɛ��L��z�p�,�|�W�|�>[��m%�f[�qK �7�2�(@�#!#� ��
 ���R@&?)p��x��~�Y���N�rs�|"IL>���|��:���%�&�I��1nf,{g"��)�|�V�	f4Ͱ�?����c�L>
-��bI^�W��O�D�O6��'d7�+)೟4�W37��j~!{������ZeR at 9�)�����m��x�w[��'��PƼ�q�'�{�����a���|
p��EI>�^�ܧ񬔊�G�[#�;D���'c��Ɖ����:
Jz�9�Ҝ��r�u�F�ӵ~�^�4רNS����o�}
-X�=����^O�l-�|���:�(g�KR���k��گ���y���YY���L�[8�[�r%�9d�qo?���ȑѲN�%͑�,��.��w
�y�YJ���VG��0�W�|��M�4��4'�o
��x�	���y�5��;��Ğ��&�U�0~Lă�h�o��|),��qoa<��f���l���%�
�J��zQ���@]��d1n�i�
e�E�?�[��M
E�L���$�[�E��K����<=1�����헋���Ǯz��W��M�X|�r�}��e4������
/Cgh���	�.�� <���I�
�G-�`�
�o��

�����'F3�f�a at Z���;����"��w�?�0mާ���s�K�qdusi�6�B�g��կ@�k�."�-��/
�?�Y�#��T��Ss,�Gu�
-Ȳ��%d�|Fp7 ���+�ޖ9�z�bvD��?6���-
-)X�)�ϾW/��o=y���a��g�P#"!��0��K ��C��N��y�.��!�z��YW���k�˺���p|��e at 5 9�_({;�ѦV
-�:��֕~�^鬮g����7x�i
�H�j�|�I�NT�^y�L�t��vG{xהh���n�+{>�e��*�E�~ Yv���c@�g�vM*�mɐ�M�7˛�lQ_�w�럛����wvv��Ug1�^ ����
9vs�v�i�i{�aSqT����nz�u�M�����RZiQ���w"��i]!U�fˡ�7<�ˆa��_��nx4�Ǧ������۴zY�L���>��C{2�.�z�t�H�
[;���6= 
k�B38c�ږˉ�՗
�Y�od�{�NAbd�iѰ[�zn؊-�X��7@�<��tq�z��v��M-�h_Mj�J��
6������������fr���`rb��J��o���ذ;��%��K��m/�/�"���Y���ћ^������R�e]���^
W
�˦�U����8/�
���ۊÖ�-��^�Xu��L;��l&I�l���<�qv�{�,��}0ԥ
-��NHmU�/�c]�oT7�1��7[#b<[�Bp�����򬈄�?dG�����b�\x��c���ӹ��
�h��/���w��漥�W]���أ{ط*ܒ6�"׸-�zc�@җ57����H�����c�<��o���|��

OكDM!)��B\Ԛ��?.)ru �7R��'YW6�1��.��z�?
��f�jt���o�h�\@�D�����Ak��jf�Cw�pS�s�Hϗ����9I�L�k�n�F|3��,�ۻ�M�F9���j�����N�H񥼗tu�H=�R�VG��K��>���kU��ķ���
�w+��mw��Y [...]
��QO^�Y�
��&͵)�n����0�(L�j/[

�6�NLq�N��5�yg��#�ۤH�#�X�|xI�u�n��z��^
-^u�?�U�eg��~uJ�f[*LkR�ה�w
�0�����H�����̳=z���g����6N�d��.�(��(+�Q�?Σh�$B:nߴ�$�Q#���i�L����������A�̮�n�2�֋��\���zv�JF�>�Ove��roЪM�c�]n�|���-�e�}�*��2��M���Q�0��Av�1�ܢ�`X��Ii=�����`,�̀Sf���򘪃ץAY�
3�W��ie{�θ'�L��	����P�]m�u�z��+��L�޳����gE��˦P��._��W��I�U��q'w��t,�����c�3m�)�c�y�������ɋ�������[���2� ���z(Y�g&�]
3��A��p�V�� ��G�U"zq�Q�|L�����W���r�
�
-��}��:�yu�2ˢ��6�0h ]m����#����n�*?܆�&C��Rk����CTX!�����i��Vˡ`g3�x2L)M8�c�����ǻ9Wa��e�e�g	�"x?���Q
-\�Vض
�F���˼��~7U��UX�AF'K��=�L
����V��:~v�
Q��}�~�"�~�Ĥj��ʫ��ί,7��#�
��v��ƣxV�"i��r��SS�dӴ'T

-�f�_/|m�?�+Mc-.�F�|�eg��$�bC�ɢ8?`lFH=���6{
D��9����{^Q�����m�:�%����?���Z���׫g���vL5����^bGJ����tEq]�..ܮ�3f
�Μ�GO��2��φ�]�1j����"���#,>���@o�f�!0�>v2���@
�C
��m�ZW̼�
�y �8�2�۴���
UϮM�a���P/ᨬv��h�-{��K#�1�l�$������o�t��Sx��A�!��<�pl�Ph
��
9�\��?����b`�AnP*u�hA���q�uϳzk�r���ѣ�_��vś���v6��/�e�= �g��[��g�KX���dN�1��O�0g���*;+7�`O
-3;
J���P�R����`�b��+�Q�}FH,��<az�-	>��wR=���Q�`ݣ�#�9t���ѝ�ۗ�?~��F��[��
7��B�"
Q�Ƴ3MY�4Qܬ-��	���G��w�ܟ�Y���akȯ�39�=��
�� �,b�
����֕h��
z�>Fđ0�����\��Kg*3�N��B:��s��hǢu������k
n
h�m�=g��k/5�H�f
Ӂ��o>��PY�c-�v�P
�Γ�r�P�o8����}��f?�;Z���^u
�ɮY�^jX��p���	<?�����;���$m�r��rI at m��Vв��k�V���/.s��̎�_�=�oM/�2�>���Ŏ����x���w.�Š�~��/�О�
r�&Y��H�D����NK��{9
?�ьK0B��5����J�ZT�7}��m�ʣ�����V�L��i�`��܀�G�%�%��[r��
Ý
��R�����A�񒯏�]o@H�E0�<m 2���%4k��޼�
�T�t&-O�.Z4��Z �?4�
7�
��.�{�5�x
׏ B��*�.MЫ����
�P5"�Quv����O��� ��`
��J�Iu[1���-͏t�.�K�@�����	FZܳ
- ��ܔ�J��<�k�V�WS�1U�mO��|�W�Z˩"qWy~T1F�w�ߦ*P�d��1�yٽ�e�\�1����u���F
w[1��t�J�*��bPѦ�����,�	�~'����v�Y%������͎`
�2���n ��w[�;����S���]��F����vsK�U}W�{�"��b�zB�qH�@�z��ƃ�
-�u�ZP�X��n� w�+:�?�1�Y>6�^t��<dz�TxB׺4V2!���V��;��O�]����
Dl��2#�{�m
���)���O�p�
e6/K�0��n>އA�W�>�!ׇ
O��5
-6
ho�/�W����2���!�A�H\p���2E�/��d��Q�܇}����F�y���J�n�Kkd�.��X�X�8mP�6h�v��x'��l���[0]����
U�8. i��K&�ɘ5�0+��C�z+��w��%ۖ>	�!�$�-�q��%��)��>�O�PH�w���W� yK6y��Y��kv�}���(c�dl��X�ܡ�W��n��}��M b5�8m��
-���-�{�D��C�ڃ����@3��d>߻|���|R(M>UJ>3��|��0��!y?$-y��n�>7�[����.&�K��A�3�h�a��� �8Ӗ��
��_
:��,
����AR+��%.�n���	��r>
�/�����o�������<�e�N>�B�z��\�G,��u�sF�L>0���6���j��C�����WQ
�왧������m�����\��8�$zv)2�A=L�Y-��|��6�?�����
f4�iai�<�
��\��R��S`�RS�m�	�6��=>�� zV���?�ܣ�WK?߼Ԭ�e{Ӿ��]�6]E��3G�
4&q�W�Q_��B`<��Z����j���+gn��+�
-�C�E��Y���l�K�<�-0C*���
���7�ڔ/�7
���jֽ�T�ی����D1�X=������tW�a��
�K��p
�>,{S��<�,�=��`|�i��~�狻g�-얖U�
�i�YxL蛽����y|����p��o�)D*uWmh
�/�lޏLџ���]f
�_]A��]���r�
��su�ONR�;^��xl{��ACxg��~ѡ��k�7�+���	�l6j��)g_��ian- �~��/i���i~��a���H
(�-/g]]�_�ǹ
�o��މ��]G�u�V!w:k���v@\��/���.�
���?`�Af��4��vj�-3�T6���@�
�ޗ�?Հ�J
K�w{Y��}�����!����<o�Yp�WZ����ն���8�0^r�BXp�l����cg��썷���J�L�#�Q7�-��T*��if�6��oAl����k�)9O��W� �!b�,�$�Ȳ?���.�/k4n'V�\~�����/Y��(-P�(
n�� �˿�
��_
t���Jx��GD��\��C�m�sje��pq��_��U��X���{P��l���}ϱ����bS[�a�+˜5:��f�l
L�z�.'9,0�����\�
�X�*�}1�Y����GZ�GaZ84�5���g�Q.��<W��Fݽ��oN[VRki�VѾ�e������8���^��
���5V��ē�hV뼻�(Y�~�ͮF�f���UZt�mx>זc���9�`l]�wy��kCA���fſd]]R�3����OW��{�ÃZ-vn
[n�t������=4������b�67�e������l�e�b�v��
��P�wi���ۅ��'����
7����ڌ>8�8�`��t����/E_BU���?�7����
�>
�t]
����f�B��n+w�w(����s�Y�jm/����S3�͈�
��5�
!sl�
t���)>�3�.�'��P�sP�q�
w
�H£'_��TV��Z�q���"����������/�&�.{9t}}�k��n�1�C�.y��;������}X��qdt�F:6㼞�`��y�M-s�Y��L�r�V���	�ʩ_W���3e�N����bm?�ǰӚ`��(&�抉�;�� w�r�C���(�����.�7�f��u;�gf����as-��{��T��fq{���Asu��Mgk�S��RE=�†Z���yy:�iI����q�I
-
���si=
-�U���ek1��2���ӗ��g��8�><���l�VnS�{	���c񟷰T����.G�|pt��
- ���Y{d�X�v}+�`Y����;W�%�]dҿ4pцڬP]E(�&?r�[.��1ǭ�%��%M�6
�������0B�
]9���m1Zl�rQ�p$���dl���z1^��:LJ���,|=+���M���Ҷ���]
 	�V��u����-x���Ɔ�z�
E�r�R�I��g��X�:�q�1 at GᲮ�ۅ�6�����
�#�K}
�v�����z	�
�
���b?��E
3�J�����b�O�
7P�|���V<1��Kt�cN�#��o���ZL���,�6�
+[u6� �
u����o�o�������w��̣��K��
�Ӭ��8�������Rކ�(���Md�,>C=x�3OtU
��
�Z2����<�
F���7�؞�<T��\�W�f���L�?҈ڈ��a�A_�E��bO��WB9�֢
L�����2��?��c����)���當����
�P
�x
-�)�ҋG�Gt���g�#�\7�#p�d-w�������U&1'ֺ/V.A��HJ�}4��@�w%@W�	��!���ɀd�Փ,�X�,v�����
�
-�	K���砹��5ͳXY��� ,gЛ��ۙq�>��J�2�oN]����>���F}l��,�W��8l��ѭr��zt\b���F=�KQm'}�����1r�چ�
��
-!6@!ö~@b� �/�!��l~�
z�v./K_�|4��)Śt�@{Z+#XU�����/
!+���mzK�X�x���xfT�1y4��o̠�Ih��
�G�r=[� ���Jv^��5�����[2�ֵ<�;!~����o�g��󷂰��/�>z՜ҹ���7�;�5��:��h��	Y�vE�Fg9�f"q���Y��ڣ����
h]��
-_<�MO��eE,��$#������`WS�/��>:,��W��W�a�h�6�h����71t��kx��׭c�35/��<K)��lO��,@�
�������^�#oPe��ݠ?V����nGna�DB�v��M4�~�G��@
��X�JdÉ��:+脒��CɾI�d���dy����{��îV�ճ
-�Xw�&�/L�Ϋ!�jv�����͋�Vb�;�>z��.��� �3�
ӕN��

`iM�{�!;�Z
-�

zr'�7�~����n{Z�ȓވ���v��#
�� 
� i��6�.?[�a#�V�7lBK���h�Y��m��Wn�i(��sx|�a%�ޞ�4��T���I����ɋT	�C��8�� �/�fy�aC��FW�^��N:�^�
�**r����w. t�L:���w�v���vZ�|�i����߳�s#��<���
J�d���?���D�
-)�=��:���lm
-����U�[�����#O�귊�޶����E��J�{��j�+J 
8�`->����n/^�G{�,:�E�+�l۬6�]{?���찚�o.,+յ�ې�AX���,Bw�4�"5b*��}b� X��A��t�ҢB���/�*[]C&��'���X�?tf�5�oz�½W��^��v+uu�E<Or
ؐ^�c�[����&u�L�)X6
��k������M�0����6����M��0���S�g(���Ѥ�O�[��{���vv@�{�����݁�7M�_;�k�B���zi�z?	�E�c+��nM���5Pm��V�E�,�
:fՎ�չ&�l�&Mi�&��ָ���q���Χm%�H$��){�t��
x�|���Ur��~����w⍭yO�J��oL�.�M�^G/t�\�Nj�v��Zӥ[
;�:˵n��jV�̛�v�R4��:4�3�r����Ԭ2�T]����0����,��g��X�>MU��·�zC�X����{m��:z��n�v�Ѩ���:�7h�C��0���\0*�s�
.�f�A�!���5
�T�����9���ã�nڥ"{	�����m@��I��I�N��
�-�XS�_���^�I�>D�!��CU׍l�2H*�
-��j��7�ŒN�
h�M�$,���R�V���r<TE�n
�/�h�<����"�B+\h�����n~n����G-] `)���20(�k`�����YD2"��_�ETղ�
-K��g)�7&q�b���h�OvXl��٧�|.O��&o%溿�{oz��F��T�T�k�U�ݯz3�u��7FH�Ed$
�7�)�c���S�������� ��6�sL��|�@3��?�m�6�����8A�7�
�V4�?/�J�l�
-� ���<���#�#��6�-�H�`M{ @t(Cn De��p�����`��(C�2.@ �M�D-e�@������ ��,d0�_�A�3�A򩴶�[��ɻ
f��N�&�e�K�ͭ������t�+I�#f����
�T���$II�P�ϒ�jƫ��T�P��.
�`;ޫ R�G�&��QѸ�~ G�}��gԨ���%f�Z�,�)�M>@i���C򞋷�M�ɻYj$�"�Oҫ���
&
3\m���NI�o�4c��8B��E�xD헷��^�K>��Xx�ڼ���H�k
��$��@w��+�ri�+��o
6��2�M�R�,d*��r�Y/__ɧZ/&�#�Jދu��_
|����t�$9>:���������)�g��g��j���H5뱪Ĵ������^�Zt�P?|M��p�Z>�>~\I���=z�%0#Hf�N�&�eo�]
-�����I>�X�n���$�H&�q�b'����?�i޺o�����vy!�j�q
}�g���'zd0Z��j���������H��{垷���$��l���":6WRx�2Lx���/)��f�
�,Е�Js��1���{��O?�%T�t����?�(Gf;�?��so=��,�#��[�6(7$������Õ��׋��o�����[�����(�{Gy::���=��:H{�K@,�s 
���}˧?dq�7�zr��Ns�'Hs;�x�9'οơQ�_*(��׍hКtC�>
\
W���n4�\P�T���Q��C�
���{�����~����n9R�Y,H��'��� ����eS���ڪ
���y\�o����̗�Yp�6���:͗�C�h�4?>>^P�|ޢX�Gx5͎�+x0�� k�Qm#���(vw�駿܋t�`�EiKߠ��#�f�B�M�d�5������T��

5W�x�z�W�p�l�wL���+�m�g�����]q��X���zqJ��K��ګ���.$���Yxf	�ޒ� [...]
'�
���}��jS6�w9��ے�-@��v�g��g�p)"�ұ^ >�<
7�}I��Oj9ח�z�Ⱦ�x�VH�Js�E��ۼc^��K>�cL<����:�-C��?�������y�.��ű��Ӧ{㏵V��Xլ�H{9)a�q
"����"�i�}B�|h���7{}Y�Zʱe�8�������ܲ��:d��t���ݍ���oB�k'f�=^��`�gSʮ�P~;

V
�
�Qump���(�,���ø`��"��Ew2�^�;��-��}@ɸf/��
iF��|���մ\��j��s*/�}����W���#_�����P����U1/�{n�����n�
`�>���c�k^
��
�lA�Bz)�g�
,�y�ch���G�9­0[�h��Ɣ����\�Z!�LnOE�`�����"b����
O�2�O��2ceM�ta~Y����!�	�q�!M|i:^��6��Wo�M�b��M��g\�b�-
���z�nW�g�6�̊#"�B|/Q�U7�
�6$_n`C��FO��69��Cq��&�h*�J��z,8�
	$-�R*�B�Y[~�>�%k�<��n���O��d[!�#��Lp7%��S��-S���1������n�S]+���Tk��~�w>+���&ñ����^7���Ab"h-���vc!ϿT�95lnۚ�86

�݆
��ӌ��e�e�����6
�w�0�g������4�
���VŘV�P�������걳�RW�|�9W�V`�!���L爛8�L���M��F*�>T�)T�GC�
�d�#�"��f��i��2c�Vi2��u9���Dz2���`�9M����Wџ�Cڵ���.��T�Ni��iC�o�l����jw������<��
	���dP �"�F;��o���������U&n�/���
�Y4�"7�^�9s��-��/F�7������e��k�9l�9<��t[�Z�j
�g��
̣X���� u���fd֙V��PQ��X�z�4y�eM�C�•˯�چ
�̞�V�,�e �+8U��Xu�:����t>3zP�}*]G*�D=*�*BF�}�~ZL�_BFH�u����񞉬���A6&��=|�F44��Ն�J
L��@zb*w>;�6� �ΗW��U���mx��XyA��,�ܘ{�0�R��ˈ@�wM���쫤~���5-&i]���e,g�w[��
-Ɂ��"D�#��]��Жp��2�[�j=�Mk�%���
��;��+B�
�}"[I�p�
3c%�����E����G��jט�[��r�[��� L2�9�
G�ay�f����1��x����d�e����9�C�
J�����
�a�	c���g�|sie@�V&o��ɢ�9�M��H���8��s��6��:���|�<6�E{��j�������"��
��I�'jLG�%K\�M�s›ä�7��K.������˱Ǿ�c1�=s_�m�ˏ�
j���k��j�y�H�|����T�C?�e�Ch8����H�<$�x�4�zoM�}
Uh�Y�ʗ!'�B�x ?
�u��`��~���}�>
~�~�h���H��z�%��eU��
-���'���n�,�%Oު3��b�&3�y�����#�y3������\
�7�5�����|��/R�NW)0?]���
�9bML�+D?
�s�3輔j��l�;������6l��
�]�	4

�hxWд{�~�2�u$h�GC��R+���
�sy����umbo�o����8���- ���j��s=j�Ir��pg�a5
�D3GX�����֩���y'��}��K�A<,�N]�9����}![Y��5�i`�
�`x�Vbl��?l�Vq���X�Y81�98���-*�e�*���'��2�R��y�J��(�\�E�> �~���Y�
�U]
 I��D��,��A?f匒q��c�(�l��&ik�+<
J����:'
�f�n���n�p�n�������c挞=�l/iN�w�i�!�&�j��ז�Xz
�A�~��փh
9|�Tj����O/ �w�C�٧��TG����Y����RY���:ga��N�ʅ	��M�l
-����D�7�d�7p#��#T7��U��-j�C)H���$We;|���B� +=�_��9���-7ytŖh���F�ѽ�s) ��V�Gg��6�����-
���#�J�^�h��
-<�e
-u��>M��������6
�
5
�"5��n�3
}�-ҩ��0�mr$c�����n^
�PN��2Xxi�2��
�
_aW�_������Pmt:�#
-ǧ
�Ze.��j�?
�4�\�&86����,T��R
׷�ԨsZ�R�D��֡�Fա�eR��;�����7Sf��E���v�6^��Mj
�Jxl��ņq�ܽ�O
ZC
�6�l�hҔ�o����6����$�(�[>;���e��h���E��j��*�n�ڞ�ɊV��*��u_��q���!t�/x��0�_
,I5-��r�]��
'n�
�j�q��e�I��^�+��L�Y�غ�%E��Q�WP�
-Ψ̓�(��((�N8�z�������
�σU�,2!�EV����k��t]۝Fa���8�*����. ��*
-��[�,�ӠSr��V�Ԥ��L����z�b���$�`�� I��Xi� �]� ��t!)74�b��9<��^����:�
�������`�m�@|' )B5���i@,��Mg]~@���7$3��D���
��6 V�f9��O�]���ZV.���a�X���)[͝��3_�q��;`Z{e�`Z�،��ѱ 
�kt�$��M��9
��Zō		�R����|x���qT�StU��M���ga
��}n����P���
�sO ��j	����/
�
����hr|h�Q h�I�4 � ���a��" �h�_�,e���%���v#����M|ϹP˱��
�*V��Kn�F�B�¾�]�.v7 �v��n7hsuh�q������S
`�
0l�̈��擝�`6�
�D0�0��X��l�R�*��E���M|�A�e�
-���Pm��[��]��i	9�dy c�����$�F�}V �27 #
v�0(� f�=fe �8d�+0��#
-`������<\���B[T��E��>��fzi����<,ӷ�9�.O��
-��/�5Kӷ�JӅ{LS���i�]�Xai*�
I�X��y��� ��2�Y�g��5eC��\V��3�

��C$E��I����zt�����Z�k whx��?���#
�g����] ǿ9�C�M_��&})�K�*�4���4�OY�[4
�ӻq����q?e������3���	���R���K�y�
��u/ӕk#�?�eT�k��O�3�Dk���(:=J��?����0K��`�O�
o��#J� wK_�Y>}ͿYp�̰�_�]���#c�Y�Ӈt���������l�Y����4�
���ڴ����
�Γ|�|zH4v�7{-q�}�$68
-MesX�T������K�q
-N�
&Y��Q�u�~��*}_�]���o��nZ�?A��7�u���
���u���9w5/�x��oE�=O6���<=s���H��
�礭��$W1���;�%�w�#=�>��
�"��"�
*��-���~��,�<_Y�ǫ��Xw����|r�<�5y<��u۝K���x�/x��)p���rD'
��Ir��z��r�����tͲ���}{�F>n�Ri�O�=Ʊ)M�V6۰����?��Ȝ���<[�(c�� ��@�0��O~�}r֩����x�.�]�pJ��%����'�}����]�aշ#�F㋷�c\f�Q%�#���7��
7\�3
�üvX*\K�.�Ux�����K~�y�h=�б?Y^��di�
���=d�qYx�����,�k��+W�Ww�4s�3rn'�A��o�d�5ag=��y�Zٯ
�Y(���z%��uq�a�nգV�ݡ��l��O����靦u�3E}�����rҭ���4`]�Iu7W�Y�л�
ޛ�!
I��r]�z�6��Q��&���gWE���͉���u�EL���>���%ߍV��;��{������9�aqT]N���98�y�͹o�)��z5
d�2
�-��X�s�PLg�`�����*�6��G��M�r}8EJ��_���ϯ��K��]bv�k��RD�
�{NXiק�'�m�Y����K�h��Yk�.���ͷ���}ށ�{i�8��,��L�ˌ����P)}�T��)�[��K>O�ѮfQ~�=v�^o�&������}��q�G�iNN
u���w��鵉n���B;�4I��
��5p�w�v��^��i9���tk���ݬ���h��L�r�Xz�j�M���͌�H�]*f��e?��
ߎ�E��=TQwXi�z����ky�w�B�d��
"r�d��P���UO���I�T�;y�/�3m�)A�:�z��
(}{jv$w2a��z,� [...]
+��:�S`�?pt� ��8�f�,�	�
�E����[:'�.��7z)l�xF��u���
�d�
�ۅ��p{���zJ�����L�9q�����x�huu���i�Udpl/�k �}�?Du�t�V�uz�f����g�J�3����QGs���?���P�=���ugD�
ǯkr��qG����`���v�8=z�	�������\W�
r8�&UkX}�� ��������{o`���7��o�)��?��l𦶨*��3�ݮ��&]��n�5/TT%eT�@ȪR�_�\
���YQۈN�
$��L�,�J5	���>�p��{�4�2�7bB�73���8�ل%i��ƥ6�z��6�Q]���jH;h<gܻ�g��sYU6��ȃD��#y�>�ect��'f at e3qüJ�C�������vȫayy�|k���g��W�FΏ���n:�'��(���^
�f}��H�z����ԭ
~@�3��5���w$���$��1Rb��Rj]����HI�iK��n�B�E
s���
S�E���
��?�jXq


qW.��Y�;�&�=;�

�6R=�38 �r�h�
b
Q=چ::�&r6����8U�-K�W#G�����筝�˛�O��
,��=@��l]�K�e'���Nz�a��J
-� �/���2#�f���5���w��}}:Q�
����������{X�=ܰ��b�i0��2���#+[������9�Fw��M"	�s�	t^
���F�`\��L�9߱�w�3S��ߙ��Y������ޣ
�J�
���cqT�0:�6�x
V�޸��Ko�?z�P��v��L����d�á ȭV��JX�j��1
���*��b��B4�
�n��fx[� �]
�6���gn���v1ZsG���_�/f��;��]��E~N	{\�*VnP|
{�|����M�	?���ɽ+^U
5�(Py�PҸx��in#
Oq�g5�=o�{O��Av�k��׃�<���UYa�����<�ba!=�0��؞�1�6����bK
������}�XGc
bJ5*eS�6��Y�

-M$�]�\�.?��;���ޔ�K~�o/�Ҝ�	��I
�35���>�i[ag
�f��f�+
��yfHTL�av��<�u��2�Ǩ]��&Eg(Y�1����%Z�=0q�wan��y�� �ҨF���X'��jq}�4f��t�Чx�P���\�r=�Ӂ�4p2��v�T��k��O{��;��$L{� ���
��u��ujzfX�odJ�!��z��
���9��_6E#�|r�]e���ˠ��_�R�-F���=Ru���G�m >r^,��� �s@��*���H{S�Hn
��\}��l?n�̩��
*c3�а�����|�ɵ��H,�Et�I�(�Ѐ�4���D�3�R�������B�v|�'�\���
�:w��0����^�ּ#�ؚ_y�$+��q��������{A�9�s,��o���r]�YÃ�
`��\xK�9���Լ�_ �u۲�u����
֭/�[��_~@lC��/���
�5�g'�ٱ:��$����U�?�XxW{
~�<g������-f�z�ƌ<��̢JOk�J�;�b�#O.6����|��#D�9�כ�/���A�5�)�6�'�
Ŷ�
���
�
[N
�.
2x��x�K]s����]�mv�f�Or�M�d{q��!�#��3ќ���C�mMq��H~nϔ�H
�,E�����;��Uc!bq�kX
ݍ���6G�$�FP�<���8�=WA7�Q[l���n��'m��Q�I��I�c��'z� }�j�\��
��W�ǃ��ڨ*7q���|9��+�]�C�	QL!��MV/ۭx�`�x��g\D�O9��
�!��(���0���|�d��p��}�=�~`ﲃaa�`�|L�d����E}ed}�
�/?����ڇ��9��q��h���MS+[JA& �ё�#׼N"���

��9r>�v��e3͏��|�\�f�j,�u��/�z#��8
�㬅�������J���e-�kڡ���j����jÚ
+	�+I��T��(��&6������n�0�$\��
4�S
E`���o�}�L?��X��5��{�錛��m���,k��Vh�X
 ��wC�\�$x��	?�
-�4��u�*�	��d��
��Tb�y��ڌ���jp�خ]�b�p*�#��u���d	3=S�O��
Y��ېiI�U�5��a��Ν�:�#֜�Q�5���M��VG�,=��qv�E�6+�5�+��d
����}A"�� Q��u4c�u
���K�L\6�詤mx����S��v��ݷ��E2�N�ZKu	��&��9��`�
Rc��f�*��'6cI�M"a=�:�*����Q2����J��x��{
/��Q���(!�9t4@�F0@� �1�DP�e8{�8H @�>$@��>@�� N](�f��/C�;����CV.��`��LdY�����ZQ�=���pWׂ�b��*v�V�ט�9��M�
Rv�� ȹ���{�I�����f�P��� �e�.@���
�����w�(�vG �7�
�b
��/F.���$�� ��R�A�|��
g�W��
O�}p��
-
�B�]��16���
P�1(ϟ��e{^ �
:'��:;4vz�F� =v 
�Y��=�A�E��0�)0���^43�!��{FP�Hj_��'d�1`(3��NAi^
ձ�'��n�^;t�c���
�&
����9�͹ 
�2�-�7��O���m񐝞�g����� �

��^�O�X� v��v/
 � ��!T
�k4V���|F��M}��8H_R��i�Ҵ��2n�4��Q������`PƬ��`�T �Q?u����(��sY��ϼ
����<��}����=D��{�j|n1�)޴���ٚ|5>c��X��K"��ov��.����#��w��O_�QKӗ���
�M��u�{΂+�2z�����k��G'�!��=l
�?�]9=Ʒ�No����jvѿ����p��K���ė�g
�Ag|S�Ov����]b%iZ$N�H������m	�,֒��O��?Ѿ�Q�j���ګ4�&����B���W�?�~��虸��
sm̏���s�/�򩟭­�׹�鮔�WI���0a���l��c~|��C��!3S���f����hW��ٓ�_����/� ���M��QJ��g�K����u�f����j�
�z�>R�k�d+�˥\?�r��2�8�2� ��p\�q�Xh��A2��>�Q־B�ήα������_1�
�hR�����
6L���K�:��?��s�K�A�F��`Y���/m�d��:O����U�����<���4ӴG�n򟣀q�A��ʾˡ�'�~
�����V��ħ�v��:�D�G���emf���a�O
�+����ik���|1|7�q5�.j�����"��'F�aa1�4������e5~��%�:$k�ӳo�I���CiRY���i
���6�N�KD�N�͜z�{���E���
�\�C��T�VkǔVe`�Zo��bA�Q�|c�
�$W)/�	G.�#/�m_rӞ$���i�K�yN����ȕ��A������	�	?�轶����=Ո:�̬^>��|
(�`��hU>掁�Vo�~	��~��{Ɋ-y#Y����@��6g��Nʆ�9#{.ZS��&�3�y� �"�g�~ۙU�
�~��9i��s�/`r���?�39�D>�
Xَ�ly�5t��!nUYB����i\��W��\��z1k�;���'��G6{B��x�t
-[�:_�bt^<&��AҬ
-��'�]����jӇi�U��$�q ����}W���B�0�Z�����8�hv��7�VUY��-�Ö�j�_0	��<�
�ٙ�׬��KK5�i=�w�~�{��ez��t���'g�P�`�G˺i���wU�FO{?3o<2�2s
����|��_^�*:�d�?��*�\/��2��K��:f���n�c����o��ƞj7lo0
����y�	>]y�4��������p2?��i�N.o�9�6=������?�+�7�n��SN�߇�t��/?�����n�e���pak]Ox��v���9�ZL��4$.N0�>�����1
� 9!�wۢ��2v��� r��r�Q0{�#�[��C�ƃx&�����B,��a�Ik�@K%�g��Y� ��n��U�^s�N+(��㨪
+J^��H]�|��M:�.�T:;�����{�25���z8bi���)
-9Zu����R�aeAi�^��k��.57�
����=+5N����t�ۗ4ʣ�h����q�ss�n!h�ԕ�����s�?��I�\(Z�v��b�5>��\��'��yo1��fz�lh�z��a7�dw�������9㔆��q�֛L���x�c�a��Z���ˮ+����Z�y�TPae��Y��P}��Vw���+Ƚi�)��6�
���
N�d�ų]�YW� �Q���B��m#�0�q
�(��Q�a����hv
-�!�֌1���)��՜$8�=l
-Z��v�~�����U�L�J�K�R��G�wr^2l�*��N�R+�5�,+q\&?�972ޭ���q7j?_L�䎭%�H+s
��)�oﲧ�}d���}��>����{�wo�~�y�����v�hKv���Ui#*�f�)��f �a*
Ç'!��N
�C�!��+&PX'��w���"���<�zƢ�K�/��W7�gC�V�o-��<k���J����wX��>�tV������޵%1�ufP�J,��Z���R3B6n
+%T[�����0�do.L������k��T���
�x~�x>\��|w����f(���w��]Z����Ѵ�y�<�|*�qG8�Ø^��#�i�l�t"-� N�b��R+�R^���ܬ�ai$<�~S"Q���y˝t
f��W��Y��]�{j�hK�̅����IgʅS񞑖��n4��
���%O����]j�\��|Kw��Y�z3��"4�j6���?SZ�ӕ3PՍ�W���&���[]אh=��m-������E~�������YO�s�}�*�����[��W]��+���g�*ta�
���¿��}r��4�\x�ؚ
�u�j��p�k�J~��` �ŀ��m^����L�L�붗
-�������:�n�
�0�x�5f�+m�i��.�m�&�5�
���m�C_x2�ӢL��U�6�Հ6��D�&}(���/Ls�����}k_%�՚Gl�<�`�w
x���Ǵ+��@�nc�
F3�V>“x�f^�u����
ă2^k���Kr�>�f{^f�Um�5�3�
�!�u�7j�S �4��l
��
(RA��E�z��̭ꗰ|x�Nߤ�qd�d�����'��W�L,���~߫4CxZ��y��E'w�F�����upK����iZ����P�m4�83�Y����4��{�T�'�s;^����B�C�@,�F�UR#���	>�E�S%]�˪�ڴ��ʑ�D��B—g�M|�.[+�0��n'��G����e_qzQ;�����6v�OVb���$��i
���}�����A!��L�1�?5���P
I���TU��Wq����
K�
-�~�8�4+_��;ܵ}w;لMs}.~�������I�����
.�-�l߱�̩�,t
-Ŵ�"g��5��
-�
j�
�-P"��m|U�(xq��7#�#
t[7��~�}�C�3n"�ߞV�!g����*!���_x�-�
m
1��Շ{q��98��/Y]x��r���z�&3PW��
R�"�H��ɶ�
��	a��H%\�U��}
�
�
�+
-kI
�N���6^��[�VkN>ߜ
W^s���9m��C�9Q7�/
�e�Y/�q�|U(�K�B��W�q�^8mWKP�1ӾF�W'��kW��1�+
,�Y#��9gt_ۧ? ��_�H�*V��m�.8G����м�A�I�w����M�
�'�x}�0��0���`�G\a^� �'W��8����Ǝ��W�F}���v+��4�AT�3vȗG����h�Uо)�*ʃ����1�������
qi�D.m�P/��B�� F��&�
����Y�_/:�Um�6n��t_�ni����긺E��o�-Tu�,�ev����!z`�LI�.�T<����nW�Z���� �Ҝ룇�F�[$U�`������9�˗ܴ^�0�uzqM+��ZuuxVwJ._5�X�
-_L�r��J�Y4��y�-��ϱt��|i*|����Z%%2�fc��h�K�w��e:/�$�zuH�!+]M:��
�l���0��yIzfc��b�lM�+����Ԛvք
-r»e���Kw��lq���.��i�>
�9L����^�U2kFz2ԑ�D�&��%�j�EQ�"Ԋ@(�f�k��L�%�����.>o����i/��k��
���k\3����i#�L5}���W���no߁�r����7�q7
�g�)t��Pe�]~�Y��-���=�
�S*��? pFs �� 6uA �$�
�Q��`J6�Ĕq��w
m�y�I��GU�M�|���=n��z��E���'f�^o`�'������Up=O�B��9d�� n�
�� v |�3�#�v/ R�
� � t�D��Z̸0 Q��  #���rٵ9��e@<SA/i -O�f����G1����tC���mQ����uV�:�	ա�D�7�X��@$���F�e
��,�Z���3� �|;$ʼR=ֲٸ�d\�,��
�q-��˽��9�7r
P�W
P5�P�J���f:�?k��E��^-�D���>�ݱs*C�j��˒�wmH2oゞC�z�� r���H� EN� %��2�
@���v�
��@�f��J��� �=�Ϯ��>o }�� }�J Sh�3�
���g�~Qg��=B9sx�S� ��b�h���:2G�����fњ��zP0�]�dn��囷���?+�M2 hW��� S*� �E� F�d�
�yZ
�RH`ţ���
`gX-�! �:�lH� 6Y?3>��LovH_�HK_EELS�Τi;����i��d��]ҴS�g
�?��T�d�uS}.˨��c�|uz�����=l�ֿ�ѳ
���0�i��v����j���K֨�Q�/2k���t�1_��H_�s�di��,�
�E�����f1V�
�7�z��
-.=��⾊��f���M���X[�զL������H{�%�z��0��E0��z��]�
NT�x$i�)&������%Z׎�U�2��1?��/���L�����7M;��+����Ne1��ۆ��t����o��$I�~Ӯ���x�K�B��,�ͳU(cg|��'���OTD��S�Ԅ݋�q�GǼ�L�Ț�0�����C����8Q�b<���1�=�ѥ)��s��Y�\��y&�4����Դ,е��z�}����q������
-�,�m�8.��s���A�l�����v1�6v���n�y��;��ecd�#���6w�an�S}:�}
-�{��^�*��_6��o,z��������HfLƢ�E����a׻�q����K-I׳�`��� 1w���oڛ8ّ��
��r����������YOk!P���
�'Wم�"���=	*�u�o�Y����*Ejy�_�H�юˢ����@����x-ܶK�<O�y���n�
���Q�h"���L�еD'
Z��ƈV���_���
l��G���{J �g~j��!�����8T�X727\�ܧ��9�1�p�w
qrA
��R����S:����֓{B4K\ƶ�u�
8��7p��w��<�Kf�5��X�WJ���u}�����Q'
����Y����v�

-�_�g�V�,Y�Z��U�WTt�_
n.Z}�~*�<j=��D+M��9m��ƗI������J��}��Ǣ
-v������d�<;�ZtG�0��A�Kz���bMjaw&
בM��D3��૱��fs�>-��뵞�<��U������]o
-Ӿ��&�m�OF*YעmY�X<�g��͗�n�R3�M\��7�}��{�X�z<͓�M����b�EA|���(�N�Y�{��=*97j΋�#9�$Ƕ�Co��0y�?YY<�����	�������h�X�Nc�<y����6Yj��9Ì�����h���ރ��UU-��{����lD��[\~�Cq{|F&���%��7�=��
�/��
L�
T���rú
�Ef����{�(f��fn̛#�.ڣl��
��<D�u��|�����r>
1�h�ec�o��y��zxkU�ؔ���-��M5��l���U
�����]����k_�Ͳn͟�����v�-0?x�l��~c���0�Y�,ڝ��r�YZ������@�d��i��{�E�>�9-eú� H[c��i�c��]�U͞��A���r8��z��z��E}�/�s��f�-Z؍�bN�R�
i�2;��0���1T�kn�
�R����F_Q-��ֲg�'�G�I��B�
-��k5��笮�
�>��
?U����0�(E�}��vJ�\ r�\�C�?��-3��h��<��R7����X�Y��&1I~�
V�z�?�hb�X�ѻvH�G��E}V��K��
���[�ʂ�5ĚZ4ܑ�&[G�b@�����IjR��/ ����&��q$�t8�:����C
ܦ� ���C���w{pom��:?3=��nz��~�L������h�H�ٛ��z�R-�;��+�+�XSK���t�3!o�GF�q9I:x�����xZ�++o�¤W�$i6;��.w
�ں3۬��ov�T�u
�<�ewj��z�:�޴���G_'7�
�Ʊ=*�'�������H��Ls_p����
�U-��T�^����Ţ
Ŭߗ�%�	��ǜn̺+��ݨ�$J�����[޾�v\�el>�
<>7Un!����/[2W�VFn^_��%43������b5Rh}2���,��(��mmh�����*�p�V���A�Nj�5�O��D<������TF:s�Awؚ(��� [...]
ޅ��weNa�6��҂S8蜡���v�������^�g
����y̯�`Xk�1�TU�ŴN�M-�H_��|6N�
ѓY܈��8
-���*P��3?�y��9e~q�|�J����:m����+S�,F!�m�+[�K̾Vb�}��d�	[�Qo�& Y��{H�l���lj�О.L��,1�e��'ba��ŝ���Z[-�I6މ&�j��h��`�Ъ�ڵm�}!'~��|ާ>�@T��ĠP�q��`\yr�_T�� �G��i\�zD!��3E#��M��H�Zi��d�!T�2�٨��S1o�/�8��t��C�r05�6��r|���{�/��"ئnt^��@���.Q;���v��\�0���
-�,�[���uAj1��J1Mv)ѣ�eH]�ڂ�ֿaGj>O>*c�|T'��q{�����_����Z��-9�Q���[`��U���&\�h}6RÐ���aEkߤ;�vE� FS�
#�w_P
n#�V\�ܱ�ara�K�
&�<�|˴��4z�IjB���9}�~_
��:l�}�6�"DbF�*���6�?���C�� ��k��
��)=o�>����bJ}	�F�
W��|�i�K��u'����
SV8��RĴt+�̓}��A��&�m6� ���F2�
%�
�&�
Uǽ�c��
�q����50yyֱ�ub�}������o7�-�?�d�7��v9�{��s�iſt9
>b�ͦ��58���˰�'0�s�K�yϤ��˥��⚢ZĞ�/:���)�&��6U�w��

�Hu+GST�&����? �
�*�;�Ud�����S��դy��򥮱�.��V�~<-���m�8Wv�[_$���^��k�-���e�s
�J%�dOL?���;��N����_9�R�x`��0 [...]
��F�5~b�wr�祢#�f�?���*I�)�n�8�
b$�|�[�¢��V�IsZ��M�����>4����`
�~Ϟex��8����XXup�\���2�)4��Zi{gk%���J�v֪J�V�{�/��Ҡ��c�����A^%'�`& em�m1[�'��C�y����!��/����'�eu���
�f���n��⋟ԡ�xQ�*%����V��
���
-U������+}��V��ì��:�2Z���R�Kϰ�Ȯ�+#�p/#S��ejGP6N
��V��iӓ���8��3��`��1�ȅ����Z���͹��
�U�o	�2 9��|���i
fS�>)c��t���d2NJ$�K��#-�3GA�
w ��L�-nB�-�/Ћ �.�jW��Z�/V!q���9�U�8˦E�
j9\�$ZT��}<\\�922�U���kl]6�d���Hi*�Z�'�%!�� ~P��|�6@�=�d엠��G �a/��`eu��
-K����5���k�$�߿��5�W;�h��\g��˗�ڽ��ȫF���,S��:�y�#���M�EzM&���"�J�H��Mr�\\Q��
&��m�dgi:m8q=0WP�`�]dXqFzнf\��
<d =�f �^
4�! ��Y u?6�.������`�m�1
-����ԽS����6�k�����z8��ʩf�%�����la�(P�c{EX2`3�N�A�W��!M�x ^�o�ed�
�3����\N�p
 oK � ǃ6�w�	�
L���b �-�6gJQ�<��
�ęZ\�
����=[�p1}M+������˪�z���w�K�����D�( D��e�� �c��?@�� �� ��@~
 s0
�խ�5��z���4 
Jٵ�
��Xm�)�hݩ�Ks^���Q/0t�z����zV�.�Ң2V�V�7��B��o� ƴoK�V�$� )���g"�\.@
� ��
@��@Moy��Z ]� Md�B
b�"�h�tb ��e8G � ~�|�RwB��ġ��#�T����������N�P-�b�G9��� rp7�I%��S��F�?�;�� �4w �9] �\|L+{�����ް^� ���B�`�> �L� X��g\�
�����%M]�MS.&��o&�R2�q��p�1IҴd��#T��m=4eW��,m�g^;ȏ���P�ڿ�-`|W�E�������f����׬͸^F9�sA�~���xƣ��t�x�d�X�D�l.�=�%}��@
�����]2ƃ����ݥN~u�x�;�xW�E��~�V��ׯ
�kc��/��N�fG�ݳU8����9:٥��D�%7q����0�#6��� �4��{���b~5��//��w�K���,L'���g,�����mQ{~Dc [...]
�#<Ώ7�>�C���!{���2t��v~����� �q
�\#
�~���Z����x�m�.G
H_\F�`a�[�����n^t���_��|�7�|#}�)�(�^�-��g?q���A�����Ȓ��
��Z�O�%�`�^��Ã�Ǘ������<l��<��(.���^��M�L����9/ޫ8�����0ӕ�P�-�Kt��B�0+�5��
����{!}�p$�Q���L
@�(3�����-lbt\ل.zMV���3]SUY���E�
-��҃t�
-��(�b�w���Fͱ��g=�ԏ
�'�L22�0���������ҭ2!�[v''t�Y�ƹ�����
u��"�
�V\o�C�8��Z�83c�����
J��
5w%8B]��^�w��a���Oa����)6@��b������&�y}�>{%�B��_<�6���*�P�e.
�I��;�9����>�|���7?T�_$��om�� � �0!Z/�F�!����ӯU4��
��G
-�$�|.�qJ�n��}��`�v�χU'P���?3���#��?�7��w�z���h�n�c�O�8k��x�ݬ�$-2�ы�G�|/?,M�mB����^6��
��*a�YT�~��n�	�����a?iv ���d����L|�e6~1ۜ��p�o��bf��-zk��zo�K囋�+���.<�Ez%�ԡ94ʫ��~�\\ߎ��\<����
X�F�?0R���e�ޜc���f���
�����
-���n�«�.?������W�V<�ݨG.Q��N{sh�"�qz��:��(��x�°uj~����A��
]�4����Nmn��@|�D�c=��n4@ӡ�o�Z��'Nw��
9

usX���|l7/盷c�o�=�_��XW��.V%[�^�>�6~ ��iZvLO�����{�j�V����dAw�7�o��eg"���
�V	�f8K>F�Fg�Z�(��|Y+
�Z�(�9m[�t=���]?�.[�7wh1�|u�S�e�`3g��	7��.�TZ]š>���ŗ��9�4'B��@������h���m�*��t��N���0>���rK,�h�0aW�[l]�y�ZIî�����I�
�J��v
��ڮsܞ�_�Ė�骙�����ov��W�O
>|s�E|ac�1�ak���u�|C;��m��߆jz��j�^�T���ǟ�W��4kDS��?8�b�<�������x�it�_���8���e��n,��U�m�ջl��w��
^�f�D"��"�i
ȕ��0{�k�~�k
�ͯv.�E�jF�zE����Q^iDo�n�G�H�v
E�
wxGT�-OHg��~�/���Re�6����s���Ig2���6�
�\�΃��UiK�Ph�N�\)�ml� 0*��@o���v���J�5�_T��z4
S<�`������尮�mj�j
�ȅ�;���O*�_�Jy5�a�Rg�2$��j�/ؔv��o6u�T�q`�ʾG(7�Ł/g�
�[�PaM4��W
��qW�y����l�x�z�5g�| g�ȦwQr��-O�+$C
����e��h���i��-3v��Q��HHh�>��:�c�uil3X��#���x
��1̢��K��O\����n�T�GٞmP3v�9��ON�{Y�s�#���q�=E>�G�3
-�JZ���d�T��r�]�Dt��֋�VʲP=8�����꾨
�����/�X�/�^T'�ԶN��7(�EQ
-�ow����5􎋁��M�ф�e��IE'Nj%���*G5b��+�PՔܣ�Ț���xIH~4���R��`/�.ū�vُPc�pݏx��_�;�m�Q�w��[��������ȼ>��<�2�7ܽX��bv�Lt�g�\�ѹm`F���n�����b�D���ZS�ɧ�|���#�FN��5j���D,R{¾�
e#Vuf��<���q�S��'
-<snV��
�
/4�a]��{�f�c��|�f�4d��ޜ���_lW��e)�������o���ȉZ�
��p ��	=jTI�8�=W$��%E�
�O[�?�z�)u�M��fLy�o��<:r���`��g�
���� �b��Jg
-t�K�n���#���D�z{�Ӻ���٢��������u��&���;���]ݚ�&<IZ��	%i��ٰ�$1�%k���3�U�e����h��\�x��ai̎$z����3��2������De��V-�A5��*��3r�o��e�f��֩f�8�m+��k�
ʫD��h�ҳSD���9�M�_��:��º%���A����
�b���q��yJ���3I�QC?`��:���E�6��EiC�L�L57�B�&[�#NV}B"�i�#�
H�
\�
_G�
.��K�8�/�Ғ ��
�
�=��;ry���C�Ԯ�.(� Ė�"���
�F�ln�h�Th�2t龗([��V�\rw�z���Gd��.���v �z�/>�w��J�?��Z.85�؎�/�~�ƛw�O��j��������&��2[�K�����*a�a+�� bوeR V.�=)�L�
�aʙ
#�b�L�:8N��T��6k�,|j��g$�E
~R������M/�a���Ju�\IF]��Pr [...]
c��T���T ���[{����
ϱ�H<�U�\+��V�jî�Q'ke
ob�_3��=���w��n �1T��r�B�뭑�G�ݖT�-�=��+s�`��_�V�n����mٱY}}|�y������̴�
'�v�^UR���,\{�y�2%�
V:�j
jE?
��*�\��:r< ��x!	}X�|f�Rw�:�����¬Z�/j��������'�7,j
���
�z:��sl	?��T��_k���(�����|�1���!�ѧ�1�a�"�DZŹ7�T��	�nX.�!��,�]�X�.���
�w-
��s��Buv%�`5F�*(u�0�/��>���3
筄K�V���V��k���t9����i��^���x���_��Zw�rg֬_�@c�-Rn�g�("��[��n�+�\jS M��baQ�b��?�����7ӏ�G{U�ʵ������>8��9 ��c�
 Ĵ�g�逘i@D� �" �Qv.`��) �h�>T�e;�^�ᣱ2�BY1 [...]
-�F���E���b��aH��[?Pv����R@�
�\Q�-
��o2����
�X͜2%7�J�|:��&`�a�E\o�Y�fN�۽���,�]�IH�:x޹��?�|����r��@
��Zj�I�2 ��G���7��7@�7%@'"���G�
L=�</zV�:Jt@��q霁�e�%RA��dS���J`/�	kL��r�wkʩ�b���D�Q�O|篞���4``�
�d�B�K�q�:`"��Lof��������mX����b�uKR��X��l�f81�����
�#��C���
�p^-
�w�"����[Q�%3ť�c�� ���
X�~��
��-��WOV*����/֖�Kd�s�G�"���p�t	�q<, >jQ��
����㟺
-/��Q �
���T��o>ˇ��ࢼGpPN��%gB�+l�)K����u��ͽ��7��+%/���t�������r�8����)���ԛ�3��A�T:% ������L�@xP |�*o �r~���g�_/iF�*��/%��^
-�dh�3���TF��gR2�g�n�mߔ�K����sǺm�s�o��
돺W�5����j��'�H��{w	���|���9B
���:�iX;
���^RDdj�*���J8\�a�^�@Ϥ(�
ڎ�������Z��H$=�X%%���
��'�n��9*)��e+�W���빝�r�ڭ?�/��~����v����W�i?ж�"�_lN͒�/�ӽF9���G	�s��7
���dv�ް�k|�E��%���9���Ӱ�\��V�<*���
f�(��Qqo>��iW�{�Mlk�6�	�
a�6����UT�v��5[����F��"�'����#�����^C�O����g���3o�f�{x�gA������T�Ǥ"�څw����z 
[h:Y��t�f6��*���+��8/���/�wi��E>���H\{����03d�+S��u'{�O<l�HN�NNm�/�^K�O
�?`��k=�Qz
��2�GzNi[K�<b�8��۸�
�����)��|�s���R�����F-��O'{_Njj�����5�^at�*#���P�����g��'���4
-��ُ���I�oNmu�t?��I\!����Lש6Y,_��n����\{4?3���S'�b�h�ɩi3	�������ژ9��(�|k�_cw8��`(>�Q���$�'��@�J�hi���B����W��
���Wxg�ۿ������nE��[[����g�.?�~���<����_(�Wb�h���fI��q8Qn��}�ôQ��S�s������K9��K-*G��w��v�`#Q���Yd�#R��{]׊]�s�ǣ���u|H���������Q�������
��_�<���;mM���`���7ܑ�Z�0W�fټ@X�����r�췦#�;���^n��B��s}3���w�!P:O	�:¤�>�(��f�O���׀�
5%ۥӴ�G���Pc��
��N���J*o�LF��[��g������
~��4T�
!�:j#�k�V�ڽ
	���!G�n?\
;������+�o� ���,z��6ԇ�\���T�6����w,�V��C�6�6� [_-�@aNc� [...]
-}O=R=?
׻�v�v�ʴ$ޱ�ϟćo�E��K{o�B/^�3������x�ɷN'
iQ�[s�`�:����G
u�z d�4G`0kJSpn�[�Ѭ�8�sEY�#��q,���J�����
BS��?
-�{��
-��Hc�
-ڷ�^Ѱ�`���܃��\�j&-�̝l�l
���Aÿ�B�H�##�5e"E�I�U�T�ƙ󹩙��h��gh4���@�'�w�Yҫ��ի�w�
�4�cy?�Ŏ젅k����h����j�u�˜�ݾ�n^իVT��mέ���\[�z�q~3j����RW��5_�ؽ�</��!O���r:����^ݥ��㈭g��v��Re��Ce*4ݸ

~��[Io�/�ϻ��y,r�\�KA��\�Fv�!
-�x����.�k��3�-�tSAϒ��o�\�����*�akxl`�4��@_�5*8h~/�h$7{��x�W�\i�u���"]y�p�)bv/�_�v���,nJ�^KN*呬
��?H*�d��j�I�ޤ�I�a]�\9�(^���[̢�����7��Z�`M���%��R�XLw�
K;�O#��WM�Xe�I�n<�
>-�WH]�!���|�ȉq�����H�0�$��&�t��rɠ�rE��q�G".G�̇�=,�[>�ԧ�9�N�
t�jW��
-'	i��̏�9Ӫ~`K/�^{\-��j�@����Z�:Ax��c�Ii��L���|�P\
��<�"S-��{�*Z��(�
��u
�;d���J�f��	��d,T�����s�`��ԕ����uܳg�N}�٪,��Y�n����@�
Vٮ[i�#�V�ᅠ y�ʍ�)�K[�O�P*vJCqEss��k턭�K�|B�L`�C��������Q=�ɼX}��;F��2c��Xt��H�����-y2���}�8|#������Y�dsE
��v>굍>+(�:\�'M�&v
�IFM��U��b�j�B�3=���#�
-ݒ��T]g&^=��k��w&��5��n���8�
r\g�a�L=�>YEe��K�}V�!ǵ��
��q����`��.�~�jf��`׭��P3*�[^���WC��7%�4�
R��c"*n���8���z���u��]�B�!���G<�
?wS�ׯ�O��wa6&o$+\e���]f�ח��>�R�ˌ���X�
�1q��`�[�eP����z
���-O��<�Z'��!t>Oy
-�Wɸ�/]�9�E�Rݯ8U�2����n$�6�k\��;
_���
�xП����1�o�ʌ���
�=]�dZ3[m�
-�����E�qi3�
�
���)�A
V���U`�n�
���$�Q�
*�g��T[<�ҕO������6�y���K8��6������
-��,&)�ی��{L�f���״v__�e��̏R���Z$7
�%��<!�E�FbK�#�"��ۍH�l��
�G��=���z<�[�Z�8�(�,����e`�x�	�ܻ�
��O�l�#|�d�r�e��m�I�B�Q��
=I�˞As�����#�����t:ځ������e‹�:~z_l<�C<H�)
Lpz{?��?��/��=�_�?���ַ���{�e~eoY��9����lU���¾ލ��Wz�o�h5�u
�T��"ȭ�d
�4��Rj��6�
���i�wxd�S/�^�7��C��cڷ��4Ȱ=�@U��%�1hVdVA�_}�����������=ly��B���!U!T*�\=X(O�>[���c��jNd+�+�ó�!�.���F�ΦC�t�k7���z�r����n5F�QU��V�O+�V�U=_��Y���M�KSo�=EFS���󨛅#��/�,�����r�9�A����o)� �P� }�<��_,x'Wj
WN�љ�q�4��xf���TE��T��R�2^slE��J����~ncڠa��g�5��E�ק��Xղ}x5ʘ�v�}9�F��F���Z�)(cX�����ѣ�zܜ�7G?3�1�F����h�ӻ�q���Mt�'
�F�/83�
+ߙp�t����)�D-�.��Z�\ޜx�~�rE�6�CNn"޴�Ap�0*��Du�G�J�����E�{y����(U2
?ʆ?��+�t���`�w-�\���2��^7��գŪ7�x�y����䞏�x��U�;8c�Qi_�L���Iַ�8��7(_����#�9�$�'���A�V��uaaҌ���Z at c��B�r C�f�+LsC���Ȥ �w��:���oم���-L�C�&���V竾A���0{O��~��wGq�W��
��W)�TGf���Z�NK��m���bۿ@ʺ�������^,�*H��
x� �m)�$�V
�^�܆%2�"g?:;��o�~�5P� 
�zQ�\� j
_5�� 5��d��V����z:ù-E����d{�p��8�D'b��q����F9�c�Z��(އ���
T0v�|9��� �/��X��+eX� ~G�
��a���
������=��_��sm��r�:�~ �'��lr
>)���.�ڬ5��%Ux\��Pg��O��%���N
�,rRD�%4_
�z\�W�<97? qv߀x/
�R�
-Yª��T�53]@�� ��9õ �f��&[�T.����
����
�1 k�Y悥���H^�1�~�(3�_4�P��d-����VZG.�V����
\@�n���P�< ��l
P��sd ��	��	�&#P�B�[���e�B�#�R�p�

րz	 ��"
�w� �c�3��9m��7�.��Uw�7��A|S+Ƈˤ�E�r  ]o�����GOw��g��\
��*�A��ܓ���)0����
f�� 3_��+�9~�9
B���#`>T)�]�����U �4C��}';�:����i�Ð�w��*<A�r0��J��B�:���d����m���m�!2`��X�Oe0�v#��}矚
��g�΀[�
�;s4�K�e��,���/���f�Q
x��|�I�'��tk����bN��׸ָ���rP��l2ͽ��?�olJ�������_�Qp�#��o�vr��p#V������|�@}�)����,�/R�B���K��
�l
&��Þ���K	��%T���|���b���k���gR�3��@�}f���an����$߰>�]�WɼֆD+
 ��D�]BH
��1;G�`wz9��I<
-���cB9��
��?��duf��(��"�
����f��k���^'�Y�������qz�
����
�%U�Ѕ�
�s�m��W3���hB�����i(
2��8���ܛϥ����p�N���$r�"봥��̱����uIB2T
-(�
�Z�C����!��u�ԝ���
3�g~�O��Vaq̷ߛ�=����|���y��r��?��<���O�ꢶ|�;f)�7i�p%k����:�}���W�-�71��7�_��D�x�Q�f��|J�
���]�`y��J}��Eu��ܐ�f�'�ZEX�]�eo)�O�EB�E����g|����t?���2ݨ��ԁ+���b�Imk�IPM�q ������{�~gp�Q�k����Z1���۟^��?��~�����:,Vn+~W�.�S��P�Du�=�������Q�ؼԘx%HONv�J
uǩW��!N��ѽÍFṁ�~{7_�4N��'�Os�g�
���h�LV���.�������ה
�Vǯ�
n��^w!��B��ټ̖uq4ur�b���!9Y�m�������������ѡ�pjq"8T�|n0Sq���f�RO��*���M���c{d��pf�:�-$o{��Q_�B��e>�I������=��oJm{�a�a�kvG�
����W]�x��2N�9�{g8�Q����`&
2�gr�Gt=�@��y������E��%8<��r�D���
�e
�ع�f�^Z��ab��`W~2_>����y�q�sj
�
p����]��a��U�ޟ��st�g�
i%�mY=�1|�9&NzcvP$�JTvn�~%΅=<�
�N�:�^�Ħ�^�Cg�piG�ˏ`�˟@.��t_���Ԟ�w\ۨC��Z	��������n�^����"��\����<�����/~E�-y����Z
-��6�c-R�h��V�;$��[��Q��_�ۛ~���4�O68AN�#_]����������x�}��������V����}�E��U��3�C��n��q��!4i�f��)��Y�\ٰ�
3����9���i���R�Nz�~'.*�F�.t��h�E��N���@)1z��6�P��UX�u��ք0l��(��4%�Gs��o�6��
�/�~k����������,ܜ�3���m,u32,��5�K?�o�NCwZ� ��+�b��-5=�f���Q.����l��B�$��-D����������
-�N��9�E;ln ���Ho�N�VS�΁�L
}��s�,�L����rK

����ͳ�E��x`ڡ\a5��;u��-Tj�{7���иv{^�nj:�b�)��ILkq�܉������Z�]��Z�t{u�`���ͷ�ȼIsW��1�\I2�qU7����뭊j��kY�0���|�v��Q�3���9��By|
�"8�'*�D�p�<z��]L�G%;�
���)ױ�V����t��Ehc�ֺ�������9ڪkss��_��&a}{Q�zUq3�i��K1���j��/��Ά��
\T*�7:U�����h�"˷#�sQ���H����]g(.��E49�ʰ�D����@D�6����
�-d���R�w��U�_�f����
��,�
;�������P��}�q~���3J�!�"Œ&�-ƒ���ɹk7����H���B\,K�
��HD�
"��*+`ZϬ~}��Ou��!�nj���L�Ymv��V.�����j;��9�ǚʙșf,���}q����S�O��%��[� �^YV���i�HZ���eᤉ��k�����
�D�I}�Xl�
���kG�O���I�y
-
�\:�w\:s�\:��?Pv���b���Ӡ��N2
�
�c�=
�Q
�~��%�U#G�qW�ke��Nr¾n�L��%8�gE�PF��Q��hp�}W��<q�	�z�8�i�v��@�<E�+.�L/\�`y�m�8����e>��l=(o�����z��`�]��
�t��_?�� �zO�[����Krߖ��s��N�[ڸOɝ"�˕�D;q��b�
B�u�3��8���`z%�+��kW��[
�	��C>
�A
����}b��.[�̈`���Y�
H耞4�Kz�
J�D
ez��]D�?�녏S�cTs
�%m��
����I���V���h�ٕP��ß{�)��QO��y�Wk#�#�T�5�Y<$�=-��Hc[�\
z
8-z2���*�/��Qj��E��n
e�{s�D�!�t�2��󓽶��_
��d�?�n�ry���tH�I%��h~�����9;\��
����:�;�u��Z��x>n� ����-cr�&IO��̃����Ґlj�2�ވ*�6kr]����+AHt���N�
b��-�ة�:��<+Ch�h+��&a������}�hN6
Ҩ�D�R9���'C�$�%}Uo�����ф}r��1;;FN')=eW/Z}�����!��8U��,�;2i�s�D�6�[�1����!i����~k��$�5k��sT��ϯ��2gq��,�D�&

�E0W�V�l˖1/��E���G~>%c���~�ZqY�=cEH3
-��h�@��y1�‘\_�i�{_S0��vQk�(�D�_T
'ǃV-UνZX�Lk�<8U��;W�Ȁ���|68�i\y�[�*�o3U~�ЫQ��Y�j�Q���p=����u�#���\So�Vr��KD����o'sz�Eǔy��Ilu[
���(w��{�ҕ���M�Tc3'�z�
٬�(�əSD[�w�ө
W�qE��}`��
*5��NT�@2=�@��X�FI��
�XC^�X2:[�)���Vs���U�|
I����Si��Uy�(�Μ���F�������UuP���wo}���ۻ"��B
�X6��局�
�5�V�_�uy5�?�My��@e4/��63aHK��m<�"ۀ���e���o���,5-���#�Ш(���\W�}�iwsfA����bgIVдv����'
l�e>
��] �-�f�o����et� ;�d1e��7KG����<+�mZ�B�إ��"}�<�a+�֮���|-;ϒ�����v"/L��,u��*2|
���_\��]�9�ޑ�Fs�wֹyUX�cL�|���'H��,J'��)�
endstream
endobj
124 0 obj
<</Length 65536>>stream
-�ש�*Ƚ�� CP*2�e����v�G�����C��s

Y���g�]<\���BB-��]
-_�� q|�!�{3��U�Y˓�k�|�U�'Z��:�WSy��
e{%�\���ml�q���f�����}T
-<o ?ho
-��`�j�.�)��s�
�^(Lh
+4n](�S%?�ל�����J��sͼ�ʕg��Z��QUP���I�W�l��E�z��*��Y�`�:�8yn����'���W�&��}��ly�͆�u9s���w�@�4�f� 
�un���
���`g6R�"�
T7sT��Z��!�@���2\V�zoey�
��.�T��TG5
-T;��aa6
��3�3xi
ٺr��T�>�/�*^�W�j��}�"�T�n��R��n�؀���<-��Z���������A�|��
� K�
��
p
V2ح
��DspV
�)'{E� �� ��xP{p�
��t�q�T�Mn����gȷLU�:�s�	��	��~y7j�J��<�R��
-%�/��-���
-�t��3�/@�VrRD��+��: 4�Л bR>g�À��u@̰ �"ڭ1�f�s
 �b�����
�~o���H�F�#M�P���<���H]޷K�ĺ�7,�Y0ڗ{�u�S@�
u�H�����/��$|a@je@ε 1��STU��
����K at i�P�����
��
st�$%1�&�,��z�����ά%�8����"y��h8ZI�X��
-%X��p��<��篞�Y`@m��_�~	P�)h*GZ�ꀶ���Ы�
�~�#���=`��0$Od����c���0
^�p� �j�
��2O=�2M�\�/4)��i5��J��]r���@�
l��M��?z�y� zY�SS���/�
�������
�����m��i��2��v
�/N�y�5
���pa�0��
��\u�a����m��X�ަ� ���V��L$<�
xR
���ۇ��K��n��oK�?�������
��J���}h	�[�������i����6��u}B.k�@���@`��
��tP
�ů>�����������Ϥؾ?fh���.tG��W�r�z}��>�Lz}>��}�6��%,L��ݘ���z���.�}Z4;&w8滃����r�-/�O��?�
b����C��o�7�k�C���������w�ȌoXX[�@�� ۦ�9]�Y�z���iX����5wT�g���![)���};�3��{e[��fe��ujW:kf�LW��W�eI,_!�,�l^��~�����RB5�ǬtEo��SKO��\R�%��j�:
��w̷��~ɠ���z�[
Ǜ���n��n����Zݝ�~Uv�嫽��
�{a�����A��R�2���(
�����
�<�*r��_:�
q�蒊��$���A;i���
�ZR.o�y�X���|y@\|�Gc�\�|�=�9
_ݙ�=�3$y�S��L��c<��"99�mB
��8$��u�ۂFs �����k
���RW�'��>����f�:�s��{$��֩&��V)Y(��b��?����ݦ�b��^G����#	��WƩ��c�0�������!�e�?+NDލ��
f
8���Ed�v��Ɓ^}�⢽�_�{
��{�+�	O����=��w
oX�<���i�����rX��ْ���^�I���qX�{�����WWZ�ߨ����t
���}��w�Ԛ�Ȃ�pc����;�޾�#{^u
'%�dz6�i��w�g=�D��
^�&
$����%����w�W�ѿ�#�kz����ڡ�\�a�o��
�6�_�����
f�Y�����v[��=;�“w�����ꦝ���n��=�];���^��7�r�'��
ئ�3�/��������[�z�ɘ�u���mB�؝�[����ť���ͥ��%����NJ
���S6:L ���'��u� �:�
%t�g]���ah�ߍ��l���0n�B4nß�ܳ����Xzt
��/��myc����!���d_��c����pJ���U�u�h
-��k�����{8B��i�{���7b�
���:�Cz�������e�'�O�6ڞ+
�[y��W~�T�%o-��{x�����9�Nq��4>���^�Z�
�86K���U�m�+W�xs�Z&$�z�"��ƾ[1JT�ׂ`��Mj!۩G,�a~��{'߭u^M��O�^�]����6Ϋ�����nk9��u�8��f��
ks���|�P�)
Ѧ��iϒS�c�B92��16�yoi���A_w��fiX�
Z��W%�ď��~�.T�-���i�h��(y�qt�ܨ�1�λ�����ȹ�K��
-x���m�0�����)*ϯ��/؜^��dj]�6w�n���蛢k����h{4�5w��'�2V�wi�He����W�����UA��-���&�0��"\W�?мY��Z]:=�x���a|�^m�6ߍϮ	J��j������a��U��ͯ�����I!��2��=�H�{��w��R��D�Z�))uU��ã;�%��& zH��]�
-�+�k�%��P,�ҷX\�h���i� ��M�Dov�pʶ�@/;�̛j�-�l���l1��k�o˳�v��+�L&�
-7�F�p�*�� �`���	y�68
tI��&5>C[�ۛ@4�o,�Jh
-݋�"�B}��T�~��W�^T�j�?�D�M�^�S�I�K��G�hS�f\�+�l��x�
1w2P�_i�I2Qϋ���sع2h�k�}a���Xi2s2�/�� �*�3)�ngVhF@�zE�[o��
�OS�}�
~��]�5��q���t�1�r�\��!T2D��@}f���u�g�G0�rn�lM���a+�����e�f6��Sy�q�HSt;� �����,�i��)
-�;�+�]X���e�_�p<q])ܥ�Ȭ%������1��[���7��-1�i2�
FlO���0&>ե

���(�B�
�mL{��K���0��	�
T��/�ة�~ 9w
�%�֎�ҫ50`,�n����Aʓ��[k�u�[��=��_T)�7e�y�=��ӭˈ�ʀ���5�T�Zyye:?�
-t~��H|��j�P�������_���v����'kI4��Z0
D��iS�+/���u�
�jk�����)Ir�����,�Y�Y��Pv�ַϟ���Kf��;z0f4�A�n`.2��Q^0
�� C��G&j��]�r��
l\~�Y0
�0[���i�K����"Q%V
	ڵ1��:�g*s�Da��)֚�W�@p�B��<�b�n+lLa1�X}jH��8������#�jszUv���`f.�~ߠL�
�mS
�yO���c���c��k�s|
$Gz_%�?b
ۨ��ڴ�qsIX
�����
�]o��>僝s�@yzPS���S�g�.wB��]Rx�=2��
�[��Nz�)��w����

Э�Օؠ�|Ok��vz�)�vC~��P�ۗ�Q1gdc!z�q",��I�ק@�P���d���U���c��U�
W��ǽ�c��"�l��ɰ��Y�^��e_�~Vb�0+q�Ķ���EG1��z0�Ze+��B�߂���^r��1�
k�
�U�qK
�W����X�؞��RC�D嘯��g����v��w���cO����EQe%�g�R��t���v���+oz�
y�Xy
m��mL�= '�~H��E�e[���s�
�.��Ν�cdg�@Gk��ާ�
-��r�$����
-�+��9���<�9>:��S_�ҞJ�k�$1]��d���QB҃<$�&c��~�v�Ը��R�XXR���AN�u���t�t��O���ENm���O��<��N�Ջ�Q�p%��3h�d���Z;����6�=)�������w%�<z�t��
��Vh��i8���zE}�۞��e�, at A�Z���1G���N��Y$ʸM��:W|m�
���SS'ĩ��Vx�N����*�k]�Q�t��7sP
�i
w
����p4���R��d*gV��Xԋ!_���YhV�g��PQڐQЍ뒞�
I
���b�L�q�/�'� |}#`<�YN로M^'[[iu�Hu�XsG
Sl��XT5��腄Θ�[X���_��g�Xʟ��{j�Y{l#��֫
-~��7B�2�%��
-T��p���btůQћ�K�X�+⦝�u��l]���<J,��BI���1����f���.ͧhZ���������w�aa�p�*������1L��:�M��AJ��m�b����n:E����eT�ϣ&��
1���'����]��I�Ԥ����@g�~�I�J횭�~��-�� x��!)�'�ޏxܸ0�-r��4���
By���|x}e�R�����d��8S����)"
����v�v��t�Oa�Zxs�ԛ��I����	�9_{�#��t�^w�l�i���^��|��<��&
�.��}��K�̢]��{���&��6'����
������:�
��>~�%euc
-�J�#@͒7��:��)������
.��I�z������?�7{%�S����ug{NS���
��<�GafY(�@�"{��I��Y��0��
X���A`9E���s2`��0��L6#�������/
��)z˚�
Y������-��Vr���G�nJ����ϘS��cLY�d����z�y�f�p�
�Se ��l�b7,o +�G���g�
X_gSD`KT9Šز���€
F:`�V��g	X��7�u���w;�eO:-�d�2����bn��81�\ؑK��y�^��9Clr8��Oo�5
���f)�5��p���
����'w�
�Mpۛ������p~�"=�ܣ���/��
���-N�tۺ��5�F�笕����&ew��%�5 �y�\a�3. �:��	��-D��t<�`xq��N �|� ?�_ڿ����7X�!���06�0 } �G] ,�e���W�]�
Vl���=B4��c0@�/E���n҆�D����`����
-p1��#@��Y����5n@��߽�No B��؂
b�f� ��/�$��ɺ������݃�i
-�&��TNv+ M; �z������7{i5N���|��ʠ-s7���^U��㬅��ZEPb�d�5�kM�3���ۯ
����)	e�o�Cui��7����
-j�J`/�^o@��I�lU;ū�[r �}�n{��ǩ	���צ_V�����)��
�N�53WK������ߓ�;�?����߯x�O��?2�?q��s�s�4f?Z7��j5K�/�V�]Ŭ"�@�"��tk<�}ƍ�ޯ��cX��A�������|�/Š�|ڙ�ӌ��*��ۂy��k��R��s�ޟ�o��̞��<�
�;��G<�
-�v�V�ux��`&ZyqvcK��Y�8����6ȴ�M�e�M
3*�
-
�]7kyk������X�k^�:�����Ѡ����0�R�a�|���)��ѱ�z�Ð�W� ��C
�s��9Y(�m�6�sK�^�M-��/����.f���챌�x6s��P���OW����ΡQ����^FWf蔓�׺jϖе|�f΍�
-9ޜyf��������=��m�){v��ka����չ�ǿ��
��!w�?�s4����
�~�3���ŋ
z��)����N�g&5bmD��\��cf��µ�`
JSl,_����������i}0��&��`�>��fb�i�#��bȒ�ܾd�{3q�}�k�$O�����Gn�.���Pz#a��8X�c6
�$f8Ү��p�U��g8�

p���+	}��Ei��-���_������
Hh����:�x�/�s}��3�!�qt(~�����cy�^F��y>C
�;"��� Иc�R��h�k=ӭ��x?H���NR�;
�p��CKHB�Z}�C
����Zk����kX���]��c<���l����bH}r1>�HQ3[PF=��
�R&7�4����c+[�{@��|Dv�Euڥ�ƲS��M����a�7N�p*���v�ݖoU�u�u�-�5f���IiZP�nD
_n8X�[�K�y
M�[mQ����Q��
P���n�/�5���1���zt(dɑv���}?�=
-�n��D�F|�d�}n�v[�
���U��A�l��(l|���iD�!j@�$�Dž۪��Ю��S
���n�U�P��
)�yA��������h
�ü�����-�_읣<_��]�$x&� �<�f��Mxt8�vh���KOGs��_�(�FP���
��E�Wk�V���jZ�R��_I��J������S	����σNT��t�����#����o�}��� ��0^Z�>��c8^��
%���b-y��d��k����v�f���.�I2�6�ca]���Mz�j�̏i�_+l���QA�r8�زR��R�d�%�]����(�V�Z�7���4,¥Ө�ݲ��˟�6�xĉd݊\�\�v��w�x��퇿>��O�ܡf|1�6��h������Zf�����Zղ�
-������ط�-lJ��v�G-��g2>T�LC���=�0[�b��<�����
,��y�
��e�2���=�~�7��sb��:d���*v�x趺�Ts����

KѓRD���Q�qKo���/�fZ]|��r�
�Kf�3�m-���CmX��ia�Ko%;��zWw�?.3�!�}�N�8�:�����"�����v���*���o���<�.���ق�	lNךh��h�jgb�n?c�
'�P�/"��*�]�Q��5���}/��ևe!.,���[��G�-w������&Jϋ�_�N{���7��n"�rON�r�c>�3G-Ɗ2-���͌ѥm�GP2і�2�L32��g��k~�9�JX-�y-YK#�V!^)&��~�	Z���#k�.���\�/}	:�����u�X
&�N����j�rΉQu�W.��+��
����,
-˴D(%��͸�y��c�1�kz�����zÈzP1t�V;�V̪��H��j��y*ק����J�w��{(
�D��
Jo��ۆRk�r�Ki�{.f���q�^�\V�����܈�9�nk��~̛^��K�41��u�or�g�������Ō���zL�U\m%�fsJGɗ^v�~�X���!4��D�ؔFS�-��z�j�HR�TNz�y�O�t�99�\�d� ʨ��_a������6�\.Ǥ�޾[2�s�l;��Wx;�Ŵݸ<�x�1U��x�J�8Q.��Y��O�~�2r�'��y���
it|��8ߒ2�&��~�
&"G����IDF{\D�Y��~�֗�|�p=�AW΃����F_ڏ��r�Nǜ#�����KzeyZ}�W����P��'T�:�;������nq/���E�-ƯD�4o�8�pZt3�""۹+�kH](ꭉ�}�#�Z��
`
-OыO1�_���{�_M�)Sڶ�zY[�eS�?�r�tȷ;�E�c��D3��(
Ӫ�̨�zj�]��]���pX�M0lH�|ܕ2�x(�B�����
t/��]��ZF��ɯ�ȗ�E���y�K���U���±=b�Fbo?`�j�
,-}�9`�h?j�Ɗ5�d7_o����6��9H�
M�UC�U���:�m�e��<ɮ8e�
������Q���p0�˳ޜ��I�%���U?�;E3˱�g�d�j��
-�k�9�&��F!+<}K���
���	�.����L�rfD�w7���ĺ{�<7g:�
��|��s��(�tQ�"Qw�X�maQ$|~]~�y*yո��u8�-��؉�f9ܰ"�srN{d&��p��(��N�q�H����w��RG/j��Y��
-�5:/��;�K��/��le�A�}�s�]�Q���_���Z?�r[ɕ���y���
��7O�K�㼙�6��*+�.-&��{���"���K���;Z_��ԫu�P#� �
�����&��Ng$|6~;q����Y����pN�I�"!�<t&����N�dm�
=�Ⱦ·�<
}��Z�0��+.��/6W����[�)��t�Z(� ����h����
Rp��ɖؐ��~"��"f�]�(�����
��
jx)�'8Y{\p��%�[A���
e���9�K�
Q��d�oډ{���m-���}���W��&ڧ"����V�<+���_I���KNE�H�@���$�H�Gd�_56K�,��8y��#��vJp��_2Y%
l�hX��0�l�SB�)N&ڮo��i>�bʡXC���E��ߴ��r<]s����#{_&|_~��-q6<W~�d�+���&O?Z�
e�����9|
_
ل�����ZͲ!��
-?���f�
z.l�h�ß%���u驋>�ּI�[ڽ��VC���B���)�Fz��˯y(A��u|1��h���n�<�l_�ȍ�P�$U�?�>�q3�_
�63
�
k��崳@�Z��b�@�ܣ��Nd��mc���_���L����Kr"��N�������>�
��L��m2�[@0?BJMs�
�
�tbl�p�I��T~7��8��6�2�sS�2�i�~����A���M�
���o�Z�s�b	ΐ�*4��P��df��4Sh!�LVR�?(u� �ږ�n)�U@��{Oqf)�}@�� ):�F��o̷30\`	�7l�j�$����P�JZȞ�=���'����+��a��#��큍��M[�R&�ċ�"�r
-������� JB�)
-�[P�Ħ�� ������P���
�8��,��{��U��'��ȏI��Y;C�V������W��Y����$�ڌ꣚�ᏼ/@�kP�f� �tum7RLC@��nh�X�h�R
�6TЅ�h�˧X�m׀αP���N4�o�X8����k����c�9�U
��?�7��FL((�
u�m,���eYG��R�"�a�w �k�Lf_O�n������c�؝`��-`B���R���g&���P̴8 L��Sl����
�
�.`��0-�L�5�h�&-�� -<�oЉ�(��n�1�V�1�����.2b.azWŸQ;C֍&`N|��\�F��b2l�5�^vn%�݇g�>/��
-8- ��v�n
p3M���찀K;�I��W�%�w�Q+p�T���
m��+�
��}do|=���vI�w�uz�)2�zh�Pƀ�O���<��c� 7��E\o=���x)�7�R���0ݶ����:�x�
�S
?@ }��H�N��s��'Q�z����Rq�~���J�dzbO�De��n��"�[�@�����'��=�_�	�{���u�@�@H�/ �!��M�'�� q��	��nی�����Y �fH�K�:��'��96_I]o���
G7�J�M� )���n��L�Dڍ��!}r;�ݶ_9rѿ�_H��������NѺd�����^���*�����5|���$�3�VXK��
-E��b�#Q�ʃ�٧
2録���6����
���"�W��
ҟ���J�+�����o��� c��^��	�Up��Ԣ���tZ�rZ�ā�,��z!�
�
�Q
:�8@�f!�yb�|Z����$�W��m�'�\y3��#B�����/ox���Ra��gɬƻ�8���:ɱ��u�
�0$�?�f��],6�d�6���
+����y���l��#�6��
-�q៌��u�����[W-�!
}G�/�����%�^΅���)���Y����`��A�P�3Jr>ڮui�Ir�ن�"�uE�kaA
V!A^��
-�\j{Z
��2?��c��
�
-��G�W�ϗ�?�c�]-�ͫ���[1�s㑿
��t�G���s�/1�I̦�f����i}����<��y$���_}���¼��W/��5��?��p4���":\	;�:>���X>
�QO�����s���
-��'f@�
��s�-�u�Y<��p�idfs(D�3��_b|�<&�{�L����M��C&!���̎z�Ai�2|�ch�?��3����V�����
���骇�
��'��R���I�A�&:��e���(~Ǹ�7��J�7�9���rѡ�q���4��v�ᳵ�
�2

"
���uO��?��/\p���׵���g7 H�I*Y�Scx<<4x:l
-y�}+f;Tf�֭i��=j
Ӵ8���?N#��a�!ƃ?������kw�^����ksƏCr�
>
��Ɠ��P�v,�;I�fujU
5�
-G��%�ۺu�A��iQ�9����2���D�4��{�AҸ��b�]��5V[7���)��n��U�
-+IG]Vj���ϝUa_z�|��z���p(B����k'�{��9m�ӎ���vW�������α
���ثut�rj�R�P÷�ru]�Ԫ�lU��S���a��ܧAS�@x��rh9��m��J��],騕�A��5}�t7�O"�)VZ�������䳓  �
z���nu$j8�:������㫤��S%�v�LpQ<�hڽ��}V(�oJ.�Ƃ^�٦�?c����[�-�Z+F�vXt�ոW�˂�Igo�j@�/]9��
w�]70�W70<ł�b6�
�d��!lgw+~�o�>Գ$9�V��R��;�a���]P����Գ•��
���D�bT�
E߀B
l��G��{1ޢ
�/�9�q�)�~P��
-�sXCs�V/���;���
.2�����VF#`++�JA�޷��J���@��U��	NA��?Jq��\�
�fz^��==
�N��&Co	�b��+wý.�z]�;{��
-�8�uZX�t�cK�/��f������p9gpzh�����񓕁|Ȝķ�N6��n��7���O���hP��
A>`
T/��Y}e�"*r�B�>�z�,z���&a���1���3pZ]ij_����,*��V��%� &ϜQ���lQk�xSVnȈ�H���T<c���Fv��$z�>:9�Xm[�|��#���V5,��P]�[�V��&���s7X�Co�&�M3߄��i/��#EǑ6
�V�n�զ��=+wL>7��>=������(�����LD/�6���AzĴ�=74�&Kj��U�8.��Ǻ)���T�J�Q��x�Ƚ�#���Gm�bF	�"����ݹl�A^,��vo�(���k}
-�����:gAй`�غd��`��e���{�H�t!ֶ/{�U���z ��
�T�{C���C)��T�[i����ѐ�q%����,Y|=+~�t��s"	��M�\5H�$�4c��7��'�}a�q�� zv�3�9P�����:&Ŧ�s���K��NM=Oc^Y=4æ*\Žr�ģD	�癢 ���ν{Y���i�7�	��?E1:9�iv�"�##aF������6���Ck�O�w��/B%t��
?�
��~���N�}��rR�f�U�(A7G���զ@V�(a)���V��ɽ=
�z�kJ/A�JV�%��f�
nDg�>�pz
-3AA��?�t�:_b�2O<VCn3Tw\�Ze�J��r
t�J`S$n
2���2��J���c��'��dֱ�w�(�ZQg���qWEW.�eZ�������}bI#c�H`<)�yh3o�
-خ#`'x�/�ܜ/��"�ޕ�$�t u��������g��r��dž9�i'�z�"�z�i
Ü
t���a�z4�Қ
-��,f��m����ܘ�w��`U�+w���b+��]�
�.J��*����	�D2�,'9|�%xR�W�J7��A8���8�z��{[�
�ub�Q�fN�
δ)Qb�[���>�]c��5\zQ����
�]���uBk������i�U
��G����kzQz�LK�� �݊�Ϟ�euK6�U���0��
`�=d�
^5�J<,v_y�l�͖�S��1m�StƌL��u
�t��?hM��}	?5X:e��&���
r|{<��}̑����gmC~�σ�p��k�/����c^��
��؜Oն���@���'��%e�#U(ڤ���mz�q��Jd��ʜ
���S����"�]?*�SEZ)�5xTbʜ/�S|]�H���}�$ԅ-"v�:�axL���_�e
-_�O�n��
��
8�����n�~˟3�*7�cc�2m��+V��s�������p	{�ك5`�s�e�[#}�g�j��)[�gVΓQ}\&
~���$tzt�8̎	�ɯ
�
�������J�DZ�f�:��E�
��K�v?��V^�66�l0�.�������-�tqn�mi�����Qì
�C�牱����S��p/0a��ҺIQ����)��e)�H[���n_��*���!N�N�l�zϲ���c�r�թk�ӿk�a��^B���mY�1�G�L#���N�
C�
�Q~�
�K���
�i��K��W�Vze*���¢��$1T�BlE��(s+%bV��x)������f+՛�힟<VQ%��i��
zʬ�h+A��T��Rl1�sʊ)F����=�P�?Y~��Qk���EԺ���Xv�V�s����iQ��
_<�_��{�U��wV�\�Dh<
�2������Ӱ'�m+�Q�m�y�n�7�
�X-Lэ��a����6�bz_�,4�6d�vf:֗�>�3�ғ2��4�L���lG��_��NVV�g:������mJ�P�A���{ܮ<�1��Q��T&���2vc���G��E�CzDO��L���fB��Ѕ"a]��󭑉U���3Π������
�M1��~�� ��Y�8}iV >(7>�.R�X�z�{cS�bM�H}�5�6%�p��R`[�Ȧ�-i��0U��Δ�l�#��q��5�"lu����0��NX),/E����DC���&�hf���I@�� Z�: Ү
!�D�H���Z�p������쌗5[v���T5��\��Vġ��k�H?��<i|_;c=�em
HF��B��f(g
-�@���)

�N�X� YA�y'+f?�x�j搢�I�` �kـ���
 =����O�� ���)*�oډY�v�I�ϔ��%{w�D)���L�#�t�\j�
�5�cuhJ
�Lv*���t��~��[P^�o���v5�N 5��)Z�oP� ��)��k?Qw�.�Mq�U�U�_�*D��V���;M��B������f�O�NE'8 Jh���*��j���Iہܑi� 9��z�~=�4˺)L�Z�
-�jz���
�:�, }�����؂i-ET�S
�\ �ڲ�>Ջ�>[@o,(�Y�p�v�8����,D��sbU��9:j+��gЯ�ZC-Ñ�)e�q�>�b0�A	0�* L�ZLi f�v ��
�8���}	X�7����
�C�~��O��b�cd�b�lؒ�qꀭ���{S�
��[�ݢ���g+��fb��#�ƽ�p�BT���0p
�����Q��{���~��� ���l���\�Z ��K 7IN�����>�܁|��SlK����
�+#�W�u�
�kv�Uol)�
-O��<�g���	�%��Tg�t�P��
��A
��n��;������?V�߽,��_��`��������@��I���b�b5}3�z���c�X/��XTg@��;�D bN/�ƹ�����ao���^���
j��^o�?���A�䏔���.�����E�鷍�ooN�uۢ�<�=��8yf�R|` ϧ���&�Gz�6��xm92�2zb�!�S�{}������c~�;��?���
���F8�q�����7����W�}/�@5�>P��%P���0�w/�XD���O��e	h->H����J��r�MF��aF(>>��x@~����<��}hyF��I�
�Gm��f�zG+�����^�X�gvh�G���&�Ը�nظ"���(�
-ə�����R;w���S������k]�ʡ�3��9rwW��
-��zͱ�Ƴ���V�w�,�����O�<�R�be�N��Z���U�S���e�fG�g��.���G���C=�4s_��7w4�Db|3� ���T�OjT�0aw����j����/�j��o�Cn�=h��CUh��a��T��˺	�����h5��#��f�Jr3t��o+bL�Y&7�a���]!ŨI!��U�>��dgԓ�����/��s|�������+�~\��)��������Еp�'w�x��8�ۛ�J�σ���Ufh�\���-�h4I\j

|j;��~�����}����5��
د��Z�qn���̝�-�
��1X�K��
H��$ՠ�I+�^���P�����1�����������׺z�bv�>��
jگ�שpcy����\�>�?�S��~�~���
>{�]ju�w��;��#��u
-���}ngvm��9�n�쭥��w�9Ґ��q��g:��Qt���R�Z��������E��j>��XW��o\�ꜟ���.��k���}v���ѩ�;�}��tR����S^�^Zڃ����7>�7
��q��ս,ת�+�[�)qP�=��5�R�`[�I��^�O��a"^�Rsq��@B�t�ߧ�m�J�y��AJ�b���{
c|��cGez��p
-�
X��[nֈr�
�ߛ:��
j>Aޫ�
-���U��MVس���,M������Y������P���AI��u�_�������JZ
�t.B�
.x<��S?_@�N�[t�W�'�-����,�
����mٱ�S�Y:�b���s��Ԣ0hJ�_%4��g3.݆񦤃��N�7�Bί�g�b�cX��D!�L�c8���u�����sแ�
\��� ���%�q��!J���k�#"��#���#b��}^^�/�#�z���i8�����$8���2%�%��)�l��Q�����,xT��-j����\}�����
��Υ��s>�n���v|;��	r��;눙,m���h+h����BN'6
��"kX��-��2��8���i�6�Pݘ��&���/��0���P���zaYZ��C���ٽT�˷�۱㮟Uץ.l>_S�9
�#|��}�ܞ
:�q�6�ƹ^�����qb=O��b
ۏ�e9TƌfB�t�Uބ��axQ�70��՗�}��{���m�uI۔�
mSf�)���
-�ͱ`�+
s5���^�+Ӻ��Q�A����
���~����trw�g��$.Z#nQ���eN�s��C�؄c*6f��2
-\qo`��E/I�NfD���1����㠠����QNPi����M��
Z�AI���<����q�4��5)���ⴰ �0�����m77�}Lk\d+�#x+�s�99������(t��oїO=�KC���V��mAo�U&�T�3�J��o;�o�W�$jE��p�Z9H�z�
��l4�A����t�1I�c�^DžC,��I|ϫ�'r[+�j�Z���1;����(X���3o�vl
��
\�qzY�3zI��l)�
Yj���*�۔�S�RS�ӥ%_C�/w
q"k���A�A��I&��������"7ua���m4F�����
0F��d����
�n��S3b���<�E�=�����{�?2�A`^:�k��"j�¨�3I��C2J�����e����
i�|��*��Xo�vk�!i3b^
�G
������A�1-s9j��3
��[�f
-�f![��6EI����Ż܋ޛ�GNj5�	��
?Y�
ɩjs>�0�h���fe�8�JCiΊ���CWJ��ؚ����N�E~�"U�g�6�n.�Z3��t�[��֪y�崍�
1�c�ˤÈe{M_����T��ǬG_4gÈ��P'�����l���I0����Y�X�+\�S�ULU�u���~����qV��,�
�0B�y�"p�z/�G�a
-�
6��Kl-Z�X���2G�OkK����q0;���he�g�{�bS}�kR��6'_���|�\�|�
!���շ�}u�+�ywW����F-�n,�fQ��j��i
٠�|z��і᪍
-X�x"��\p���8�,7>�L
:ˌ
�R\���eZy���}�R� �S��?����M��$E�
��D��\��BL����P����1�od��v���
rq�\>Xߚl35}
S���,��o)W�9a6��r(�\�Yg�z!�0�S�ӗ[Hҝ^�I����'P��B����&�Z$G7�N�z�.��11�"	�?������\Q5��xv�M����]�k6�*�xv\���{�*:�H]X� �C���9s�i{��)]T4��ӗ��*��+�Jp�
�~ML�4v?�;e
-�|����\
��t����E�h������[r�������v�]��-[��h��3
-�=��X5$�)�g�U
-c�F���)�M:ۯ��K��<��ͺƪ8�~eo�1�M)3��B1se����]���-jP���x�eH��ʂ��<i/u	�-OϮA�ɖ7�r��<�X�
-C��l,1v�?���
�Mr%�M�PB��5B�]t�A�PPH���TX"���?E�c�TY���}�+�LƮ�>�
y礯�ͱ�K2���� q2����r��>rA����bI�!��x�C0=�E+E��6�:*
-�>*��	;�#N)Qܮ �1��b3�{c}��
�u�Y�{���]�U��}�n�95��\�)�
��_�R��P
�dn����P�H��N02�-��$�����ϠGe���lD�رH'{��N���V\�
���W����Gq���
����d��L\��ɣ�U
9����������7��6Ckb�Y)Tφ���ϋ�nc�kY��H��C�(�������S�B�
@��B:�?�
6�-zS#%
���6��	?39Y�
b7`
� [��)�(�5-Ż�V�9��ڢ
-��Y�}c�sP���i+=-Ka�E}crI�����Q/
�H'�q�D�h�A�
?�
҅G<0F8dS%"��_�b1�3 Ϥ�=�i)v
�!����8�\�.�R|p�3��j�X��e@��4@�S�.��,�_:�5Qٶ���Y�M��X.�>ML���
-�G<�Kd���2U=����t�M:��&
٫		z��Ƞ��� ?��/�'�O�Lr:� ~67�z�y� ��L�r� ~
� O�-�wX�����|���O�6��h�*�iK�3���}=�JfT*Wl�Da�s٪���鐿z2�	x��	z�p@�^�Dm#��R�'L@�
������ޞ��� q�>)�
 �9'���� �u����N�$@LK
@tӿۅ+�8��#;nKy����Zߦ�ݬẠ���� =w�<��
lM
633^ �H��ҡe@�Ȱ��Փ����V�Eh
-4)N
@e�s�
((�6(�R��a_y����ז�
 W
`T��R���<Z�ÿ��Y���U����ɬ��YP�y���f(�� �<���ZPfMT16ո�S�}@
�
-���&��S�����\ST���A,r�AE0a�Y�	�r�R����~������YHX���� ��>��[(S_�[x��ԫ�-�
`����V,Ө��� ���d�����s=vz"�\��VhǮ:���X���f��J��d\���~��g��� [Kـ��_��>F�?�`���R� n:� w}�O:�X��)M�e�<mwC���s��� n�_���
/����Ws��\b6�D^�A��7:�W�
+��D�GZO���r�\�E��Go���j����p��;����O�C���
�&Bk�0oIJp����@x>�9K~�
�Mf�)��h�F>ȥYv)ȏ΄Y �>Y�
m,�m���2�&T.��x���?��5'��_>����7��^�
��f$�G�4T =�Q�˼�喘�2 ��k
H�fH��	H{�|i��A>��
;]�<��)�]�c��1İ�x�N�ߒ~
I%|lT���c��qHn�M�$��qjW(-]�3:�0����@M�@͐4P�C
��pT�}%`�X�|�?��
��]�=���-��Dh���E�
󋳓B�w��8A��4����o�bi|ݶ���or��o�X�}
�b�@�/�@���
���5�y�z�S���6�GH�v�+����o�'��G��u��`0�޲��%���%�6W~f/lι3�;y8
���?Tޓ�������%���V�O�̀;K��H����r�}|$/=s�����6�̏n��I���Za@�������ډ:�e��KjyP�3fd
�>��E��NZr[u[��ɛ��*�ǂY^Em���=���K��
�omZS��;˅���q�ܽ�|wͤ3��WĖ5	z��$解I*L��x�q&zESW��7<v��Op������{3����l�ڛMj?9�3��c�i��W���
yx~tx|�oj֢�o�*&L�<�L��ORw,=
����3�Ty4���<k��Z
�E�: wE��bپ�ˋ>�w��W3?�*���"�{�ZW�ji���*�<Ӌ��~�O=����~�i��צ����
-�q&@�\��u��3����w�ӭ����^�}A=���ݖD��[WQ:�3o��^�������enZ&F?h3ZcvsVZ
����0�c�zo�3Ǜ�D����

�s]l at z����;�w�^��n��:�V�v�{�h�[;��a��L0je�pڜY��i��	��c�!�k}��z�ma�]c-ԘlV��J��?s��P��r�?ܿ��5����[yK
����3�ֹ��_
:?�2���9���&��D�����}���
Iu� i�]�H��V�-ڮ�w���=��t�Q���N��ɏ�N<�U���Z
K���,�����P)Ϊl�hq�E�0"���"��*��2	O
���7_7��y��VR��2�Z�����궔h[�
�S�k����μ˃�	�
��Jc�"K&Vb�Ѻ.g��Z���T���r�;�u�VsJ2ӷw��g���?�1(_7�b^��xu���S^@p,�M$�kHjlԼ��Wf�*�ީT
d_�w��B�^���v��T���c9m�u�tpJ��b����ס��_6 Q�8��<�&p˟(������mQ6r]{�d����
��I֠��
`��k�
7�
sܜ���A����5�tWȡ���ߙ���,���w���t�}IsH�O��
��=2��_̗���V+cw,)^y�n��4�!
/,G�젰8d
b����0Ǖ��4Y��j���XbEN{�i6�hh-�=�c=|��R��%����=��/G��U86���ֽ<�a	"�U��~��FKM[mk���iS�u+��
<D�A�F|�0�
e���&mU2��Y�X|����z?��#�i�����h���ڍ�w�5
\?��^χY]��
�_?Z�\�i�����Z����fZ���;������ײ�^�:�6�-'�6�*�4sP�	�'63oMb��B��B�Ɉb�ҚQ��i�B
-VjwjSncR��WV\6����ׅ�}�]��Z'm��
��v?�H�f�V��P�l�*ƫ6��c�"O�))O��<�i#yR�[�H�$&�-�|�v�����
ΘP`*�U���|�2��
5�
A�����2N?կ�.\
�v�@M~|r���j�Q\UdzM�yi�a{>S��e#O<���{1HXRR�������
-��ba�?�qJ�DI/�r�DY^5V��TI����>7
KmM
37��tq�˩ë���D�<E��Z�b��碔���;�hU�Ue��T%���G���lo��P�Z��%���PBKمX��"�;��V0�^�e�PF
-|My.��y�c�y�(���yT
��뾬3t�P�A����Zv���̫�
f�����h�`���vR^��[ɠ۷�
!y*��
u����NB��,��dJ,�R�%��.�6W�g����1_+k��}��] N�i�����Y�]V-��L@� &`jy&`�
���E��ӻ�
v���S��l�����P�?ODMcQZ	7
L��H�������	cs��Z:@$	
*���zI�yc�s���䚓��I��ޘ\����.�3 ��eR�-C�]ݤ�ھIg^֊�Fћ�&�Igއ6���3Wݝ7qck
r�u�:A���ɪ���-��Ў�����^"9�nB���\��0��~q��q����]�Y���LP3tf�jYL*��t����NhS��h COj�UH���q{
һQ
�tw!��iҩ?(�
^ӊ�L��
��[�V��K	}DS�V�W at yJJK�G��l��a�����+�>{�V��!�c�=�
�zx,'�6K ��р2��^*PVo\��|8$�|nC:��N�m#6�U�(�z����
�� �[)|o25�O�I(�-4A/�{{�����)�!��ge
��&�����ya��ܟ]Yml��!�n�;o=ise�Ԝ�"ʺ�1r���X�"Y@�)_Qyb�t�DY��x_.��ܾ����;��*v�?��nO�F�x`�&�X�
��i_��\j����n̑:MZ��KUɊ('REB�w��H�oN~��
v��{/�ip���g���!O�`�7�9q0Qn�I�

��L4�:=eq���:�Nk��9�x�>&�fz5%�m	�@�	�x�5���*�]m�R���IE���k�3Y,�D�5��n����7~�8�s�k�������P�+5�grE���V=]�e�)�k�)�`�
-�aMUa11��?h��$�^�w\JAn�*њ�
�ǭ!�n$ )�����
�/s�G�*�����$��T��<����4m�E]�[�2E�����p�x<>_�5�)�̇�����K7rUD|b�ٟ�7���{�������}�v4�~�t,i		����ߛx�SP�Ü9���l
E
�	��n|߇r;̄`w�
�o���)
�yݺ-���l���h�/d�E:+�[{�
-ܜĹka���yӟ��Iٺs'I���Gxs�|c~���[{ �a
"?������q�L¦����i��R�B�j	x�K�4��ep8�᱄�#������ 
�� {�u�Oj�J)SD_���
jF�32z�e�G,�̓�3�
������,��~̽��?�_��eyC���	O������� �L��Q��� �=2>��R��r,ϸЍ���v��E|�f>{�/̇����N!�[7�9>GiF:4� Z;Jν�%R�d�����l�ҍ�J:��"r���vA�z7�w��>�
�|������+ �S<��Sc�� Q�����X�5 j�O�X�>]������
u�]ˌM{2�|�_WC{����ʑ�y_�plP�H:��(��pW�vq��/��"�<�NO
���ľz_��W
�4� R�J��Nұ<
@� �����eR��X�6 ����s�Ճ$�j":,ӻZy�w�v�Uf���|�	%�3�mDSK����ࢴ�Ї��(mFpNE�`._�l�#@N ���%o���o4@�HPi�;��J{m at e�y,��L4�� ����R���
-ˀ|-z�
�C0žfTԚ�P%'�b�[He�sM�� dI:ۢpqM������`���P�#��V
���5
��
�[�:>@=q
ЬiZ�:�v�:����?�`�h�� ډ
�9��NV_қq!@�R
-�4�
w�^E��ydj�R
�~�޺B��yT�Ɋ	�d�Xt@�4b�8
9�	WS��@�܅t�Q�w+;#�l����g�"`Z�`��.`��
0��!��
0[��e���mf.� � ����1`
-�G{���
-�LS��R��q��K2N�
R�p
-et�{<�[�� ׃
q!��ގ<#!��-�ĵS_lZ� v�m6@��S
3�U6�/�M�
�Cp=V\u� �N
�W�Wp��8���E���[j	iU�(۳)2�d�6�ɠC/��mpK�Aܫ]�<9A�	��kn���&#���%�_��w���s@0f,�&������;*ȳ6h{�ǒ���m6|�5jc�����
-�sv`�ݴ�#����T�DK$9ȉ�Cf�
�[��M���~I8"@jH
����Vb9��Hc�҄%��m U�S i��t����u�k>?���R�h�.�
W�:�<��oe�y_k�!�o������_����z������[�<|�m���(���ٍ%��ӏ�rK)@٣u��.{��'����Lcda���uu6Œ�0@��"����<������Qn��7^�;��/�M|�ߩi߼�M��I��f|��%�˙z�m]5�@g��Kz�Gh���m��Pb^Q��_p�Ҟ���
�F�x��{����%�?;��\��3v8<ybu|\����&f�c�~Н��v���ƽ�i�:
n����f�/�4#,�i%�����k�a������>�������2o���?�U�Aw����;p�
"򸖏ܞ�iܶ���M갑���r�����jz���Y�򋝕/,\��Ώ�Fs�o۽�t�M�]a�������

g�Cy4�u{#
)�F��J\�	�
[�)	Hʻ5���yF�G{~��7A��\gN��j&��KO
͗�`�Y�P�0�cE�����}��`4��$uc�qؕ�q�)�Y��F�������V����]��
��^] W] [...]
-!�HXm��Y
]��zv�s���J=���6t;����jx�Z��%ݜ�.�&�����n.n}]���%�ݮ�j�~��I�ئ�j]1���w�ΡJ�|ǽXE�J������~����Y)d6�W��u$�&��^�2��S]6-05�UmV'w�WsY{��\cN��zl��*�fA�-5$\�	3�������A6R�����s%�b�ɸE��[E�0
��q�m�>��ۻ��m���e�F���C�¸I>�'wn��&)��2���Y�
�&�r*Z6Jck�*�Ȧ_���i1Z��E��"�����ʷv2�κa}��X�
���mW�R?��=>
,�<��g,�-�Z��7��4<<g�m
�\&�
T���&�����%2���ORa�A3}�� �R8���O�쐊�b�Kە%�f?�r�X��|]_���k;�Z��ܒ��*w�=v���:�4�fE�5H�m��b��
-��N}93k\���U�^wwiG��i�5G�X8��v��>� �
�T�	ϛC���j%��S��z�n���J�t�6lN�);��J����/
7V�
�K��4�z=3����o�2�?���7O;�n�����X���A��+��5g�~�i�n�U]��S]��7�����J-��ck]�r����ajl뗲�b��M�R���
�p�4�aYD2�B�^�A�
�E����.�%ML�3�M�y;�˥�iT�����yO����`�����Wo[�v+=H	�'V4
S1�]C1��R1d�#�1˽+���h"eU鵻��V�V{��G��
j�hcs�P�&V���W�Q��rP�y�@�gaX ����h-;%h2�S�ۺ�R5�h*���W�~I1�U]�׮<n�ٔ�)�o��_!	���O�*z�/:9�(:��r-�N>ݩ�ϋy);F6�_�#q�e��3�G���֮��֔�����P�W�U5�ʓ,~ò ����T
���l6f�
ĵ"ͮǔd�`KB,�(.Y�!:��@ؤ�P��@����B<_��y���.wj�wܩ]ǸSǶb9ԫbמVڗZ[
��Kx�Q�W�Y9c��Ay��/%}���I�_�� [...]
-"���[�,�.���
�v����Ԏ���;��
'�{�ʯ�U�r�<�Y��Ke�ѣ�H�f�=�#y:ÙUjڬ��\&XQ0��H;�a$��
b�_kD�]��bň��+���n])�X�g�R��	w��?��5
�P�	����0
-Er��f��y�o
��l��m�dUv�a
���I����ίtF�<�O��PS��MS����ŵ�!��=��H��Ě
,���.SGq����.v��9vL�C�h�u��ˉ;=���
�Ӻ��	�a
H�J����uB�y�7.�-��[
��{L���� ixt��/��4��fpzO��r$��X��e�u�J%�_}w����Ƴ�3c�
��3Vw㛬��*&pM�}z
w��酶�s��F1��Ά�~!M	��˙���/+2y\N�=�_o�n��;'&��w���״I���@3ҫCK{;�d~����-�;�����(v
�,VT��)ۘP^�ы�N�V�=���b�d�I��nt
#=л!=�-!w���zz������14����+�
����}�ȼ�����ZI>2�{��f�����w��#>�K�9��k줯�X�u8b
��c�Z
�K)�my���PP��e���
_a��} :�m��f�������-��Nz��3�^s���M6���&�Q�T�S��y�q��� /l�'{��Wf�#=AN;jN4��1�
�A�3��O�X#�X���j��G��d
W��қ� ��9~q#
��i8���چ�ང���
�
@�>Ȃ��i4w����|���F�1��N!�2)����ُ���w?�`�ّ�JaMl���q��^��y4D��N�H��k~8��>����
��]�/܊
-lve�L���d2h�]�_�^�B�k�
��� �=��2�e�m�f�����������}yr���C0�V�JOz™ʧ7{�`
-���+�	�q���
-U��~E�#��#�����+�r�W,>
0��c�( s_6���
����`5�������
-��2i`f^��]0�k5uz�-5ݝ��
-:���D%b{��ɤK��/�/l����;�<�6�Yy�֨�l���s�f���B��k�
���
��
���b�p '�)�SJ!�Iര�e� 8� Gx'��`�I��͗�`��ő�w�VNɞ���M��lEX�b��
���~�E����F��I��
U������G�
G'��7�w����$|�� ~�S��E��b&�^�Ћ����||�ſƮY�\�|�� P�Ƕqp�-��Y�����8�����񃐲���F�罍�I��yB��N�Gh.=� ���@^W at pt ]QmB��p@�?, �K/˻
-��r�}I��Ĉcy��h�W�(�"@T�y at X�QJJ�e%�(S*vt�/�fBƅi�~Hr�>q�E�\~���O��+������u�K���' A�Hj
2
�,�
 'U	��}�[�K�K0�,w�%� 9變�g뀬�;@:O��
��ՋW�:()p�&�o�oMyv@�zVwQ��{�
�ߘ��/��
6X��w@��H�C��! � �F�����6�8��<y�� �t��\@��~,��Ώ���
a�r���{T�N�Z,�.�T���2�|gEW��~o��>)������JL�-adT( h �?E��ʃ<�c� T�#�,�?�`WP=s3��yy��Q0�J'��
0Yz�0LN��
��
[ ��
��@U at o)_�����~�D�y�*"U��X�;�iL5Yɜ�8���蟒�j�=�'����_����q�,`1� X�Sl���
��1�-�X�8���T���.`������Glg��;>+y,��g��w�}ѴA��H#j�P�4l����埢���/J���������ǁ����D��7�/\�_i{ p�
)�� 0y �
���w
�=b��
��|H���ʫ���"�4�

ɶ
T2������$\")%�"�-�	,��8pl������;?M|HC[ Rck��m ����^�
�@�
	H0� �����y�`�˳L�ʹ�=�s
�z�<pSp�O]��IJJ��_����Mo�O�?c���n�z^���q#
�
��Қ e�}�� J��<��(6u
-��9c�����c�^��D7�
-��m�O�E�O��M$����Î���&�߿�����L����$*!q�^��?F���t�]�5�ӗЂ�hK
�0J����r��������=�wk�Q�"���
��K���1���s'�z�ڏ�a��6�G����y���V��V�I�̀����x��JnW�@��$z䢄-\l���T������
���x���w���_$���|b]MBC�괿I�e�<.<
�7�r�i�k_�\���������U��—��Ly�ςY�rS�K���4��}u�o�ƬE���6�����LR�Us<��Q4�6#x��
�L֥MeP�wǤ���c����V��&�����f?h2�i��I�
-n�lo��<r<p.���c~7����t����$uu����G��:�ro�2�F�e�|ֶ�
��4�ߕ
-x��W�^��)?h�%M�έ{�tԗ�o2�]� �۝zˌ1I�j}�d��]��Jfd%��$�4�x��VAGQ7�G�0 �G��������\f�ޱ�8]�������:X�^�i�^A���?��h{M
Ŷ
�H��z�׮
�ɓ��\12�Ǯ�����G��O��@�e5>UVm�S�����:�?�����CG��V�pPݷ2��9˖�M
��\�N�~��u�����A��W�Ɯ�z��|d�������ݗ�t��J/�^�f�N9�)�����J�ry)��YX���h�o��o˂�&�Xj�����߇����ޱT:�uqqǗ��s�6\�m4\�a�*ݔ9��5�e�����T
���?O��a1Z=A�"�H޽��WE���QB;˪S���C�J��j�ꗎ>�~�����	`��'iKFώ%�o��8��!��y';0a��cݭW�װ���l�t�vh�umTpJ����������2�]E��}n����m��G��/V�,?,4��m>�r:ų���e
��^ϛ&�kf"Ydf��=c)2���������;�-߉����o���8A�IyqQ�j3��`�C�����9V�i���be��W�b�����f��渼�&�3���uw�j�"c	�&�C�Q�k{ء��1�
�|j7�3)7;��XX\�Go���F���`�םs"�T�/�o1򮦽k
%Kz���Xv`�Qs\����=E��`i��"I�#�B��J,����VsFIk;�ݰZL�鶛b>Æ~�.�z=w��^h���i��sSo�n��ʓQ5��(�)h(�fs�
Z6�
�Ò2�X3%�VɱX
��E�t��s��%�溌���2J��+�[<n)7u}���5���#��k�H(Ok-[�5���mm�j�Tɨմ�`?**��*��mK
7_Cٔťݫgi�;}$+��$8<Y�7q��7e��7�ɢ7�cLB�dT�w�"�
�
us�xs鸁�R
S�h��#��{�v_�I�����
*�M1�(����E��q��eS�(i�1Y�RK�O���&z��):���wT�S�'�r��@��3 [...]
-�q~7�0��߈<�>S�q��z�r9��X� �~P��o>X��(�v�d��Ui1�~dnw��e�+M֠�o�mӜ2�dTP�L��Wo���7�"叻�X�8[a
�k�\C6B�;�]�^��K�Ϻ�wB&g��\�8���1^�n��3�a�VYfz�$�h�w�~6�=�x
���z�=��تˣA��ƚ2?m�2oH��)�Z�b){>������>\��<m�
z���m����xn�\p�[;��pʼnZc�^��5�.��}��^.{ft�z���^H�o��6
$��5��
*[�(HC���YZ����J,#�%2�¼Y#�[�áa
eg+��kxL��ל�%��)���--v����
�%_��
��,=��-�X�$N��HL}�1z���Y���cM}�Ϟ��i��N�e�ru028pĊiD��1�4�m���~�{�C���8Ha5)UǸ�u�q�3���b��O��\Ǻ��
VS�#T�����F���d[G�9z��N��`�
nB�.����#jj�GT6l�P
-wf�B��It�\��hOѕO�k�o�
^�sN��2v��rX�֫���/�g���#h�S�PI�\TbGs�znT�E)ߴ�jŒ��j�2��oɓ�/ag��%�7�f����
]�	��!c�>i�j�D�L�(����^��S�!�v��Xͭ]�Z�����ꣶ�6W�
���
-*��E�H�F���%���G
��H	�@�rVg<�3�c���[+X�v͗�l���&p��YI���ʟ	����j�(��.�C��n}��=1�LQ_�<��$�h
)^Pi�y"��� �&�"�L3��ѹ s��d��w�4n�9Ȥ

D��"�p�L�C���J>MN(E�Z-�j
$�4��
��g�%j��pEg>ʜ�=�c���x��
-���

�����Z��q�3�v
H�oMd�p��`ډ`�r��7�ȐٰsH�`�����n �Wi���\,�
@�E�=�Hg3g>g0��
�ł'D���
	nC
-�V��'̛
7�Kj���Wێ�u�2 �{��3Ϩ��
AmM�rg�1�
�Sx�^ϡwy��&�m�G����c��A 2�q �Jf,�*@v�,��
 �9
�����
2x �M�iIX.%�'Yy
g*i���읯��&޹/�'
�0!(�
����
-룭뭏�;x��p4��o
-e��
���`�� �bi��@Ŝ	���LuP�z�r�T �d& e�7 at QH�ટ���DJ��"�]D��;qy�o빧f���tNl��w��k�� �4�2�
!����p������ ����^�W�{�z�5�J�ѣO �$I�L�x��O��2��|�	�
�����h��h/^��nF}vˢ�,j�*T�Q�����l��	{�Sֵ�&������;�*c�rN�P�(�5�ȸ�A0��n0ț��� �#w ���X:A,G 0��>���M��\n���f!���
��ZX����! &_�TC�����
�f�����Ӕ��`yړ�NuC�8�ag��
ݽ�
Uε�"3S(B����m
-�v� ؔ�7p����� .��<B�KK�����.Ʋ�\�� W���N8���q
-
 X�]����(C�_Q^8 ���m?�?��P���Hl���&�
-��k���v	�Rmʹ�
8B48A. ��m ^h~�%�����G\�
�U�XT,	|>����� ��� J0�#� ����~s�b����I��Tx��_��
���+u{�Pռ���t�kNy�Iee�˼������*.J��j*k�?�[@��# ��U% ļ�u���
������c�|H�h��f�dU����ƿAX
�b���@��a��-VR+.�{'�-����l��z�$�ղ�3<��#X���Z#;�@e�Q�q=�; ����嗘~�/:(��ʹh�j9@J�X�
�2�U,���"
(���S@����G�f ϯ��������!�M�������:!�9���l�}D:�))�ʭ�
����?����%�_�|
Ҁ��"�--�Y7�ۭ�j��n?�=�Ў �qR,�2��%��u�f.h����m#%�³�#��-��{��X�u?�+-�a�py�!�IQ���˓Qr�N̷;V�CL��
-��� �*��]�ګ6`=nK�����g �a�l� �� k��Ur$`a�L�I��pw���po�\��ص0$D�(���������o5_����	�]�ҀE�,`S��/���8�_x��>}�R[� �� ާ0���
-�'L	����F���� �R��s�����0t��3⯑ڠLr����I��_���r� �oZ¿�����ޯ�6���1j��Ҽ}�7��0�-I<�@"
= ���b���f�@,@N�4r4&

ܟ�*:�Z�����c�_�/���N�������opC�+�ӿ����5���t
-(��u�^�P6�5P:�(&E;׀�jo��">���s|��v[����r��&�䤚���5|��������+4!���m���Fۭ[z3�c�h�zK�<�@Wz��h^� �p������'�V��9 k� (
��c'd��.sw�_V�]���1qM�s�U�V�ց��=?
���<��vV�
�qu=��UԮ���/���ؙx%P_-\tp���u8kq=�5���z_l�(؄�&�w�/	-
.ׄ�^;���7~��ǵdN���)^]�Z��۵`�����u=������^�C�.
}�G;�~�f����ު>5U�>7HGq
v}m�y�h��
#x&5���
J�b�wY"�A{�����wdՕ��m�C^�2HܡIy�T:���/퇦-��D��ˉ1kCsz�̝i��T'��g
��(��C�lO�iY�Š�6V�]���3�¾wt��
�޺-����:���#�=0B+�f˄
���9M���lx�_h`g�W=���<y������~3Mi-<� [...]
�{�`Y�����إs���	M�x%3���Ԙ����X_�a�D߭��*��!��Ɯ��j]�F�߹!��x�6���q�`���."�4v�\1�0�⬜��C�W���]�SR��Ct��wCd`���h,$��[�Rf�����ŕ��*Ѫ�84q�FK�X��j,�f,�~,�Y�^���O�M/g��<o�������q�B����y���>�_P,���}*�4\d��.k0Rd��(e����
}
N��O�L�
vOfw��	�-2��+)���J�C���$Z���[�� 
�:KX�Z�����V�k����dF�AA�d
"�0í�6Ǖ��4��%3���/�� _a2�urJ
Fyc=�;F)=�d��R���M��c,�k"�?9�ݥ�E�
�
ȉa5,ژ��4)�̪(��
-GS��\,)�a*��fڑ&V�-
ƺ��%�R7�糝ڍ@?�f�I����^�̽. ݻ�//��*j�&�kK��S
�[}
�t��aUM��j�q�$�|��T��'5�n�
W����%��v��5ń��/	=�?ѯ#����Xr�. at EA�5��P�;)M����^�U���`�u�A��R
�
ɡ�]����,���#E�*/��-Y�x Y��]�2��d��Q,�_�]p�n�"���&�h�X_�/���Z�����U5��(��xT������`�w,$�*��IJ��a�Y�%Km�
�2�78ڢcD�*b�+��͹P�]O�� �[>d�-6ʼ[2�[
0�[�T����.�;=o��P5ߵ%el
-+�7�O���/�;�

c)�.�\�����`��������#�Xؓ褄����CX��P(�V$P���y������Y�r�50�zI+q�j���6g[�x�#�7���~��]��.��nڕ��K:++X��8˒�9�7�d�S��ڛ���d
��Sߊ����d��3�1���޵�	�"�,��Ke��
�����e�m�g[�򝕙v�܎
����$���HW݈e^�]�K����g�—�S�q�@�'ʂO�$Fl�)��lv85Dc�"�xrz��Jy�;[�Z���|�5f�1{yB��<���Y��^��;=3�~eKFasA��5=h-��!|*�?
�x7 �m��F�J����ʺ�~L"�y&<�޲k���޺�8���?��sQQl��W�E�`�9�
HRr6�����՟��jW�����J�cH���a�s_�֥����P��r�p�I��(����l_X�-%_�z|����
��2�
I��hDgڅ>��2��+) ��.
��\J�g���\րL�)��Z�����$R-Dh'�ur���]"mç�����aQ��}��ㇺ�������l���j�N��
��̱h��2/�V���	�ɴ�
2�ӳ�t�'RC��t�������䤭0��s�E��!\�ļ���e���^�`������W��Oo
����`��H#Hi���WH���H�3��i��h�yl�b�;�.%.̓
qHϑ���m�]�)��t�K���'���%��%��O�����x��@�L|�P||u�h�<;!�R��`O*���K)�5p����0��|�����!�]Q �Z�Ɍ�1&[Vb����k;�Z+s����|Yknq1G��r�P�7�'fX�K�
}25����4��	ۆ
L���_�*h<�M��POI�dX �
;�by�0�op-F%c7ŭ��3�5K&��m=�R� �i`%�y�'@.�o@���c�Js=ͧ��(�,�������
����#��ӂ�0)Yo�IMt���-��<���
 8��"�mEJ�`
;���
&�Z&����V灠`�̈�Xs�𢬑�E;Ħ ��`v#x�5���d(�3�X�Q�b���Ut�e��3j��
\x&+���Rc��_
-�}֫
-x��3�XgRqp�I�r{,��l���\�
9+�5��9v�ks�1׀�>6e��.��s�uMH�l
�u_PLne���+S:+ O ��w(��KP�+Ρ�C1‹���T'�c��?��"������g��Jy'�)%�fŸW"���ٶ����/ԺhAp���n1
y�5�>
�"��AB��b�/@0T7�P6��
�3�
�G��8
-���
-� �+
��iB1'\�8�ڶ��ߍ��*^r��of�vO�ȼ�ܔIN�Y2��.D�������ܫ�a�� ��ZU�B��Ap��!xjQ@0N��M]�9 9�LT��+�= &�sq�C0�G@
^+`ߘ� x����{W��)���{Ր얲�L�4Tұ�fI}6b�))K%��iG�[
�����E�z���ZD�B+��Y`%|(�w@���!��!Ŭ�5^~� �4�CH9J�yr�7 $=����!$�"!ػ���n���������8�]�s�5�̴(T�œ�w4�XSa*�� r�!���ue�E"��Q�a�\qi��z�B�ƣ���r*�@��$���*��B�m�_�}�' TB��B��
BV�vmk!`�T
��XuR_�o�7��l(������b����m�B*构�-
�.I7H�
���P<�a�xF�x�Aq�����(�
�
�
�
Aq��"4������P�i���6���7�����
��N��]��)������#��Z�}^����b
-��aͅy2�a�j'���k&*)
-U$�S j�@qB��C��ς%J�×���݃l2 2�ъ_֜�v+(A$8 �
&��eJ
:(���P���,�+|�9=���;�5��v����6b�}��
-�h�[`����! �T�"�G����P�bP��P�����j�3������6���P+\����AɎ6��Z��:%c'�w��qQ0

;�?�o�t8&3hۈ���̻C*ј��D2&~Ei_C���+JuA�RD4�^�!�`�]�߅RN}Da��[3���@)i]�RL{
���J��$�*w6�u����Љd���}���$��/�7또����1
7�
-��_�dp/�����v�y(�K���κP�ҧP�Nm��j-B���e�$e����2I����)\#X�Ai�]��MN�H��xk����Po��f�
M���ç�wt��/4�Z���
����U�q����|�;�|���ۇ���ʍLʍ
ʵ�(W�>�\	�C�Wbe�
e%փ��Eʎ�X�^粏��\���~pG�I���� 
}��z���f�wD��]����×%
���[t��RA��m۶��X�6�4T�rm����P!z3��I���nՅ�x�����{������m)�b�3��"Gؤ��<�K:�������ŷ��
J~���wb�^4�[jK�õm�Tng�P9�nB���J���V�0�,5�T*�K�,�l��(�2�
�c7{�A�K�
6)���?��7�;
}/��Nm߽�o��,�����=
��+�-�}/.�K�9�,Z��
��%XBU�*	��Z�P�����d�
-n8�T}��6�w�
-4�B�8����G��η��m�ц�-���f��[��m��p���F[�o��pŃ���H����lW��Pc#ġF�ц�7{Օ�
�O�������2�M|
W�#6�I�V�LJ�:�LW��w��9OB�D���wJ�a��������X����M����BO6:�����6�To5�]�ʸ&��K�X�-��b|��+�_zk6��c�3� ��+q�r�;T�>�i�tl���yɸ�]6����])q���Mj�a�+�Mc��}�0��!Z���x��;����3�����k���:܌}�o��������������w�A����v-�|Ϸ��Z����+�E�Ϟm��Z����+�E���/����Ո��y;�S���X��hR���iN�C���n�7s�
�V�.�\qM�z�}��W�AL��Z�Z����~�
�s��ۧR��M��0Ӫ�8<!�5��~LN+��I�gٓן�ps�P�;54��ns���
-�E��MA��r!�<Ӱ=�ӣ� [...]
��
OY�u��e0\��Y��=57���.��ƍ�,m���<:-��lYώ���I/a�2W�����
z3G=������P���]�i�O���d��j���]��M
-`6�mұ:�j������9%�g-pJ��c�ʺ�,��b!Fc
�;tʇ�%L����^Sv��3�S��ZU8{���7�#��g�c���&�Y�՟� v��K��BJ�U��O�}�hz��
��Ӄ�Iōi5
���U�/���&Q��J]�^`���nia���9	U�&\j�;O�pYܴ���ԝ�ڙ�49�F�v��Yk�`Vƚ-(u����TB���m��t��(��A���H1��S1yך�L^�bA߸h��>�#��T�|X�4�%+Mp>�&�4�\�Ǎ'%�w*��u�

�A��aLUo�ګ�%��y	�#|������� ����`���7������w������w�A���?�hu���s����K(K�>��h�*�| T�
�n
̪G��5}�̥ޕ��4���~&�Y^4ɕ�Z��96�V����m�'A?���W�e�G��ˠ?��O�~T�������
-�[���������~�{�-��c�Å�]��f�Å�Ա�
?A��l�ߘ��7T��~F�?\���X~�	�ʟ-��a�l���?�g�Å��c��W��:R�GLp�������^�4tP
 ���E�����bJ_1���8��@��E�
-@�X��/J	c�8k_�[�����{�Y"��v��{#�}@Kͭn�|4W�U^'W��z�_��@)1U�&�����$Ν�I@�`�Z�»F>3�)F��%|��r	����ն3���e�=��:F������Aw�g��`^+�ʝ��B܇��([���
-ՠm�$
t�<>!�X>��oy�Z�`v�+L}�U0�u�����+�t����S��/��u�����!K<d�x�۝��^�}b��#���i�#�V�j�λ��;�n
�\��FsL�S�
{&��^ÂN�r
=�u����֝?���3ϒ|��S͡�i�~K����r���aţՃW��x�ь�6�\N�CUT����4��qz�@�};���ʓ�^���qhx۶�L�?�)���9M�>+�yT�^�$�s��4�6��Ҍ��Ϫ�F���Ӕ�7�.�+3�/����ǎ�@]�m��0=�9��=�fZ�+�e�F� ��x��`�7O���R���W���Ψ
�MC���tX)��V��-�*ٌ0 [...]
-��Q�_�������F�g6�@�#���ž�{<��^�����f����
�h�$Դ��EZQ��V�pg���D�O��A�Z�����¢b�XKV��~N���Z��M�?I1��LN��k�C�L,i�)Mij�
[tO2�
n�M���gp�["�!=C�y����J����$�r��I	;���^�.��º��}��3�ג{J��Ur��$bMs�g<NR�cPi�7� ���C�_���~�-�f�W��F$i"sE���snc�ypG���a�E+F
N�t\8Ơ,������'�"�1'�FE�'$����Ujf	6U����H�IB�
���֞�vQ���@�v���
w2*�ߒ�V��f�Wv8U
�W��e�B�M�
�'~�D�S� :MvT��%1;T�1.e��q8�B�	�H�Nd��S�#'{W��p�Ƽ���Z�"�r�X����{A��O�^�yu�?i��8�5^o����UJn�	뾤�N8F�D�P��l�Y��=���-`\�H�S��;Io֢� [...]
i�u�d4�[y�kR���d#�}�EX'aE�N�vc��[�:�Ҙ��7XK�6(�q��v���Ф�Y��ⳍ�ֿ����
s����C��~�?��I*j�ϸ
-�L�d���2ľ<i no��V�bܰ
A�Ў0e�W!o{���>�E��M"���~B��~3��2�'����C���c�_�&�#����t��OP�?[����.��ʟ-�̒�l���?�'�����ϱ��¿1�j�C~����-�V�W�� ��=�?W���Z���m&Ą�`6+o��3�h�4��7��?��@]A��W :��^z�|�Z�>!�X��?�Y0��B�}xFh�2�y�?���Ϥ����S�x I��.�u��4���WOH
��o=~��
|�Ҍ�g�y�
� ~�R �~���@G��\�/��H<��M8�*m'�=f����X Nr�]0Ji_H�>�?� ܣ��P(��
-R3�#
����m�'���'^>�7��|]1�!ft	03r�G�$�19��_R~=�$�y
-�R��z��[�O��{����{N%�����D��{�K�I���
-�VN��
-
-I# �-?s%W~:Y��l����!��iH�$Q>w;�,�X��7x�
�nw�X�颋��O�"�x���	@��;g�'3Kky ] м
@��|f����`Q�a�̩0x��
C��vw=���S�2<�Hу`}��
?$^�y�x�{xO�Y�s�0%�� L�0�%��^� ��qqZ�ąl��<YEX'.�v7���vΓ����R�l@�6���D���ۨ/c��M 虝��c7�r�����(���ȯv3&�7/%Ng�$�.a0W����V�<��|��9�[,���{9_q�>
�G�St���x�
-8	�S �:�ك��/�LZ�Ԧ��X'��ia���ܙlG٪N߷�a���O֡���4!�D���qsN�/�0�߽�w��^�\�~g:q���\V� s����|Ml�e-b�^��Cט���Ƶ}e���B˵�EM.ށ8���s:��!��%���w�S*����{^,���� ��n ���4*�խ��r��Ba

-�|n^��E�m;�䅉�̑���=��8-�y���N�*c����B���m�O^o#�6��Eu�7�'e
�v�A�^CK�5�j$�wʸ}@s���G��ir�J�Ki���B�����I����S�(��ծz��^�z��6u0�h�(�z�Z�9I	�����
�I*`l�c
�ü�#="Y�J�
-q<���|

���Y�v:���&v?)�o;��M���V;�{��r�Eno
�(l`=z�@�I	K=�su�Tmv�r�L+IG����Bfg�(
�ܦ<�x�0�cʁA	�7�I��+gﵑ
��Ԝ���>�h@�������p
�Y���v�b��
��A�}Y&���H�pz�lw��0�7H�Xsk�(H�?
-p�_���
�Q�p�������IJF�}�Խ�ƃ�sD.���5��E��B���ǝ|�'﷤���B_ #�2x����6���+�vl�������s��mG
U��M�G�������6`�-4�hF�$�#e�-n�G�x9� ��Qx=����Ea-8�5~$����~/�i���W�2��Yx��0��Xf��}D��*A��=�2RU�\*&O{��2|�8�*�
k
$��8�m����������Go1O�"nb�#nT�KH\���n
:�b��
c�T�1W�aq��� )h��6&K�k2uИ_	�E�4�����oP���ע����
�
-����'��m7���qf�	
j�\�6��m�";�T	f�7F���+���%�ˡK�f��4i���de����z���Uy?��h��6�F�K�
�����e�=�x�=u���n� �
��J����~�,,�d��X������s\7*�r���\��Μ+]��4�� �����0����A�h���r}>��y����q�Kd�^��M�盲��\�q�l��G�Dz��gI�%.R/��Rt.٢t#
Q:�<q8�A�&�_��ˠ��3�_�&�#�*�
�e�O`����¿1�����ʱ��'�#����_���H����o̰���V��T���_��w_AA��d�AP����o)
��:b�s
 -�CШ��j����SZ��U�4ϑ^"jK}5w�b��E�	��7����*"M�!$+�?���7� ��		J��i j��6�ƌ|���I���Oe��ϒLT��w�Dj�H�]�G�a��(��zr&��/L.k�;��>{.	�I�ێ����
m; t�٫���*;�������MP���`�'
�o�%5�B�l�$�;g�vE�R���
���!�ڊ  4tt ���V����P�׏ܶ7��%i���jn扉$tf�&�֓����6��������	�g�?�@ �7�[���\��
��i���?�-x�
;��8��w�H&�B:���eax�N�ҋ+��������#�u���q�q� ߶�E"�R�@��
��� t��H/M
 �G��Kj�����%&�e �M8�G�ɝ

�+������U
h�N�iϡ����+����x�C�'�8Y�l��w�R �b�U]DS����Kn+��0��
-��A�AHB�Ř0W��)�r��-��E>�S�joScD<O"�?>�7y
O|��s�'5=P�,�s��Z�����-��sk�+���J�c�v�m;��1��%I��B@�w�%g���f��C�y�?l�=�[��+(%?U��j�< ]���T�I����VB�Xj�ü(���G�v�;��-{�d�
-�d��WIk�+q(o�_�GuF�_0�^�9=X�fb
-����;��:Em�C :��$%��!���K<��Gch�6r���r!��8"ރȗu�Ƚ8�%����o� ���ۃ J#��_ P.呎���F�{��|�\�e��w+�1�a|0��5�=���M#�ԉ�
���9U�oJT��S�l��_�r�U
��}|c�����vGO#�� ���h�p.�۳�~'���z���-I��7�<[	sP_�nノݰ�	�^o���+r������Tp
-��C����f�2֝�P�̪(�%]���t���#]��K�r���z&�ԎԴ�Չ#M�_�Ѓ�5��������s��w	�{�ސz�{��� ���۩�im�i`��s�(�W
�Q�qR��
����q��x�59�f�{�Hi�4�Dz��&��_�P�X���ۜ_
�\���mFJlc~�������f.��X`
d���Bn3��D��5��n;W`��9��X���aχI��-�-�
K4�4��Cf�_�����rM���<��~���L���3�UR��m!wV6��`3��׺��Æ,&vn�,+��i��7������l�%	U�T�{H���Z���g$<�x��Ŭ�+�M�?�V<a�+g�ZZiŠ
4Y��w-���%0Q�MJ�2�
�Q��v��]d"^{�il;(��ch'8k���A��%�:D/��njA�z=�����!�7Y1��
�ha�m/>�3Rcx��1;TȽg�ʏ�͆~1a�Hc�;#�-5 Ї_$�n������H�
-���WpX�vf
��ݰ�F��m��3��z�;�)c���
y�Jn�4�	�Ȳ��a�k�A�u|O�Q#F�����Q#�u ���N�g�A���11��*\46����t�$f.?ؓ8��
-���!��JXۏ�KfS��N�c�O/��\a�6`�6a�%���Eਙ�E���$�/_Ϟ~K�:]l��
��6A�W
�7�:�7
؃��Gu�B��T헽�zo�kd7�&�zܾr��YK
���_f��`q��
F�$��m�'ĸw� 7͞xt���y�@_M�q����
��V-��ɨ��{�.�9l/��J|��‰�{��3j��fuh��z��n�̴y��&���+��D�����kƗ�8T���Ơ6�(�a�N��h=�|y�WܢL��#,�);�
'B׻L�+�
����̮#���F�f|�d��

�l��H��++���%(ܒ��0*��?�6��/��R=�:j:�f�G��&]��ًZ�u.
-s�,��Q��]\Z2
WN��*���$q��%ؑ�I`��� ��0��
�.��f�e�O�_��'A?�	���
-�	��
����?#�.�_�����	^����	�����/�	��g
��X �p�V
-�s�Q޸"R�u�-�U#7���@�ɃV�KW��5G�͋�<{g��������V�,=��E�
ۖx�r�^��"�(���0I�ݟ@8~v�M�u	`
��LTu�Ă1�^4��FԞ�����
�U�Ǿ#?4ϖ����%	��,�
˖�Uɑ�Q�%F}�k�ʧ����A��y�8~��KP�d (S
A���:@�,���
/��[��ޔ��we�um�E-�O+w���u�*�Cf��5}���
,�a1�~R �jVfG3� -�W�Zy
�Zѭ	�����
-	�夫���WZ��'wqו��̖b�e�pDD^��V�x�'^���X�d�c;��?�� ��"(n���j
�)WuW�O�iL�]륒Æ�$�9��68.|��7i0���҆
1^�9´9�	I��y�ؓ��J��6����%���S������j��TJ?��bU�������n�T�0��@���C�:�'���M����)�#v��K���N����}W�:s�^'�]�?)�p�i[a�ߠ��@#k��8�xe
�ɕ�n[�涁4,�wq�}A��߯W>��4^\a��w���c�Aʦ��ӑ�7D0
{?��|��\��ߘ�L_0s�2
Ci�Le������,D�ޑ�>�m�
\!	?�sM���2��J��7}Z��
%߷j���'�ž���@3M ��y
-A��"�C)���w��)����>
�W�h��
-B����4�5���G��ʅ�;�9u�O
- ľb�K-P�­��;���@��x
��UMm� tR�ʱ���Y=.�}�c݁��ډ1�ђ�'����+:�~?;�z�xK���Y���!h���{
�ءd��DLJ��Z��*���B騣h���T�����f�
�͇_��h]���+�iƟDΥ��U�6�Z4?+�o;�
-JT[�����)
=�B�*|�Ci�(�'��)�(�:
�HH�qh4�C[6����T��9(xl���
n[�
N�r��@H �Kb��j��w*��QX
�a�8�/���WZT�!�w+B4xY��
�
��ݘ~R>QI�����1K����c����n����f��M"��v��|��_
Aۚ;=���
e�S<�3�Ml�hB��\�$�
��ӷ�w�k(|�vV�3
�M
2
)r��n�mU
��v2���B�������$LG�nFz
�1(�:���Uwz���=���[���D	�խ8;N

]�\��p~���
k�L*�*�D�����f�f¾��d��!��v꺿�O?)�p7J	`�
�9�nj�Q�)�M_�A��4&^�Q���~�����v��r�_����Y".~|��F���ׯ������}
K�ǐ]�tB��D������8@���� (?W����=7��8{�4a�_tgK=[�n��-��
��eD%��Z$
-����뷺� tN��qE��„^Ź9���%|xT���:3�
4*�ֹ|�������\ޚw�~�����[>.1[�{ 7�<�}i�4:엯vO)��o�>T��E2L3<�R���_��O�M��������
t�=�������������3��1�,?a`��n���Ĵ'�W�����݃�����?�����j<�}W�c���79߶�=�U����U�g���E�K�W~��f�Z�����j*�
�_�.��t	���[����G���&?�.9����.��3
	� _)7�g�_���i�wn~�SHp�߂@I�.�r��>�<q٭|��_�6Ζlo�;
�.�xcTXb;=�B��~���
-���Zº���T_�T2� �M2�b�8^�?)�N���m��Ġ��x�r;�ڢ���`s���&?cU��
o�:h6
����_�`��\<��e����TZF�w�ee�sj���ҹ�����Q�~�{~�ϕ�C����86�J��d3�2�Ȝz�`r]����Y�ǡ�<�2�SwN�
oF�^����2�U��u�I0$�	�`�I����3��E�����O�Y0��ʯ�b\���ٷf6�-�L6b�����V9��Yl��n���ܴsj��>�R���5�q�3GK
GIw|���2\�Z�0c՝aF�_�d��+'}�I����Q�+��v�
P��'���hJzVJ�/�E�c�簱���b4����
-���Q����mx��7��Я�R�uZJ�"�Z�Z��^=�:t=�r�w� ��TPX!c s-(��|�go���;6���\�p��̻��ϽvQ�g�l���F;'�
ŏjU;
�����-����Sg�
��B疎B�O�|.�[B��q�������A?�&$��	���o,����l�ߘ�������o,�\��l�,�1:�
-�傼�d ��w
-mQ"�b��.��^�G��V`�����:uR�g�����I�E4�>�\�A
�n
\��.}�o�
RW��?.A�N?��l� ���{�=��i���r��'*=TG����ɽ����VI����-�֌Fv_��4����[ j˕}�u�w��]�
}O�7����m��'=W���

-~���d�;F_�ԠmPi���׋bj\r���
�w�|V���R��b����
-�e ��-��	Wn=�!��
jw��s$i}V��ѯ�AAJPi� �#p����9��V�4�!�sd5�׵
-�3��m�����y�廻�d��=��]�"A~��ϯ7���`
��<�����<���su~c2�*��Gg�%S'���kr����N����Uἣ҉���ѩ���ݣg�W�\/R�g�t;�EX�{�������[���oA����
��Z�#�+�=g�g�X��sY�X��l1�i�\����������
ܽ�
�H��ժ
�+���Hz��a���I����h��%j�Iy? ��WP�	A����<�n�n������όf���W9��6��ˮ�i7������a�U�4W>?�0Rb�'k��败���+���+�J��YH?�#�I����W�j�_ϩ��9��BT���\�{	�+�
�}t/rݰq��,�oB����s�uw��9o�kϴ'���7������ ��0(\���s�"��v���O�r�bfR����Τ攓�z���}��gF>���EŪ���S�d�}��|
�駤�t�4J���K8R�濂J�����w��1q�wZ%3�y��s�	@� [...]
-o����w�Ĝ_2 t��5G+���m[
-��r��������.��n�l�WP~�Y�
f�G2E�
b�+*�BMKߓ�O�0fA��S��l"��$kW�����
��"���g	���p(�^gn)
<�B9)j�M\��%
����-mk>��V �P�
"7�
7'5mlN���AK���K��ӄ�pt��}�������
�YӔ]�0k�z���Z=/���KzHʢ���’��J�M�%����
��m�e�������4|C\�@�~�w ��~����v��Q�ڦ��>5��"��6�
�n��F�s'.%o�~��8�D���:�)
-��~��P1�]<cLi`c��>bt/00:j+�(a:�O��0
��;�s��������k�ey�Kb�+R���DwjF�IU�?F��
;o
�L����-g�
�Zr�� ����h��8��l��`��[�q�%�g����f���|/�;�΍�3]����*���x���(.
F�����uM��\�
_j�o)�_:ߢ,�1����[�
-���5��u��y�����X�]	���(���ԝJ������_��
:��:��_�z�˂#�ٖ�/Zڮ�*��.ur?���~�w�%��i��"�R��*���U���U|��]�D��� �� �M�c�zT��&�ӫS��^Ɔ<bf�)s�\z��e�Ԗ{��J[&��
-q�k�~Kl[ϑ]��(M�F�
����r���e�j�?.��
07��H*�~�J>���p�XG?�&����ao�Ca�3�!#u'8��,�"�J
bg!Lُ~�V�N�ݢ��-��Ja��*��ȥ���e:-	���C�	 � ��$�"�C�XY�O���N����>:l��F�V��n��%�,�y
-��4�pM��[m�[R�"�a�e�K�$�9��Z�,�ˎ\�8c�	���;��e@�L��8F;ֳ���-Y����J5T��
; ��D�kl��<sM`c���N��u!�<Xk/��|k�
�i|�f��*����Q������Iۇ
db�]�o�jI�՜��>f��a4�V2��
am�E
g�igx����f���Z�o�kV�2X�Yh�����23�G������n<�$b���m�b�g����!q�k�j��	'
�E��v�:y�Ɇ�_qL��tث:(�4��
-��œ�t]O-s�qz��+��e
e�動��35?�
����
-�-2/M��<a_��g%�|�>�ڱ� +�K��̳b~��
�|c�c�!w�:e�Uv�����0'ی5k�
-�t�x\&��ޙ�V[wE6��p:��1���G��
-F�z1%��kh`y���0
$�}�
-B��\Gj*4
���f�x&�[
���T�7���AN�&KN�b�
�{1v�Ӯ0J�uy����0+���T냵�5�u�_��Sr�~�_t�I�ێs�3�2�O'nK����phbq>�N�SiY��ь�X���g�#�����<�
�����{�O
(�_�)�wݡL�.�v��9��b tw���m)-����Iy?(����+/ӧ�Q&�Vr��9a
�Dž��^��CJL�Z>;<�lq�Ɍ���j���vYu��v�Ԩ#��I�_��;��`ٖǭu�M{t�6��-�:�\���\�,�
��E4Ƚ�I�[
���c����4��N�d�>�ug���z��
	᠝�Ӄ�ݚG
��G�T����#v֊���
�V����阯�P�P���M����w|O�
���A?!a������� �
�	��
����
?A��l�<֬��ג!�������*�5�&
�Y����
�f��k���<ꅖy������ 
�B��I�Y�R���tU����S�r͹�E�?$oP��l�<���|J�9
-�Im�1W�G�b<։ LJYY��i~k,S%U/��'�:�� O.
T��x�,����*���jEԯje���)$��$h
9ߓ����
-�~5ȟ�!��@�‹���N���8��،w�
����W�1����ᤥ]B?���Qu��Y���=��?���xV�˭�\��
0����I��w��;��yuZ{c�?MXG�rz�^r�T4{��֑��KCZGwU/�'mS4-�<_[�#�-�ʞN���Y�U�.
-�C]��)_�>�w at h;���ϑ��$~�3�Ov�옠�{�'�� �N`6�ƱK�b��6���M֋���m��Yu����^�M���^i���R�f7ٟ�O	Z_o��IHX:r9�1�Q"���yk]���BPm��Vx�*�ɜ�գ~��؜I
RG����9�UZ�Eu��s�[
-S�@�?���$g˻R
��>܄	4���=�);[�������
�?5�{;��@�d�lK��C3M�6:�܄�)��UvQG����#�o��wR�r%����T�p�vb�>c�4�~�&
-�I���: ���4�^_0_w�)t �9�8;�X��+A`q(aDǒw^��̗����q�m!v�Yj����^��I�q�Vm�bK��~Wmu�m�W���%��D���
-0�
-��>�z�›���!�ĥD (��
TZ��4�i�>c�W+�*��
W� ��W�u����-��Z}q��p�J簥���쮞J?{��i��C�3�� ?N�ꗟ{��^<�݋_Jv�pr��9�z+ݺgX�I�
����ʎ�<�{įR�*����ƭ�����RG���y2�н3'Sr���
���5|���/((|��4��d�_��
���(���i6Ws�<�����=]�Që�&��
]�wq�=~���[-��������T
-q��������[�'$�|�
-9�%��4 e�SP��~���
�h�r�2�㫼l�Suf�CJ/iM�R���j���;,�V�"��tP}r��}.�
+'
5'�I�'��4�C�G�'���^�	�U�`���mO�{}��hA%�P5�X��-��%�V�OW�"�)�A��qSl't�b�2~!l��mnS��-`.�����P7[Aa�`@�w Ts����v'��������H��%F���Q��=ۘy���Jp������
^2����S	k��F?�g���a�i)u4D̽Y�
-�A�_A��W��$(�����F����9��.sfR��)V<��S�L(B���W9�λm+q���H~�Z��ǭ�t������AG�CAwUD��������
Vm�g��g`6K���7]SUWv���{ľ�@PEi�����5��s��s�������Q��'!$OBԟ�L>�o�}��f�n�R��;�7�#N,G['�j�TE>�O�$٫ҩ�]� [...]
��V^�ǟwTTPY
/�����x�״���U��F}|s��f2X_��n��s���������#ۏK&���'���篞5�
�� W��

i��3�4�a��.,}���A�8����d�	�}tb�o���Y�Y��d��F�3��E��la�Y��[:3�,�sSU���q7�3�9��O���� &�PS'��t��k�*'iy�O�u��6�_��8��W�	�-����4����F>K_���o�k'%~����[d���M+:��I8۩�
S�?���
���`��:(��0���c]$G�e*O�\:�Өah�4d�ŢM4�+v��,��;^.d>���_�gJ��\X��[L���i�I���"�
2��r���`ѫ�=�0]�z�l�CbѼ��:��;�B��
-RW��tm#2X�~R�-;��`��;IzȽ��KR�9��C&�L��E�4�1�F��e#�9;]0����P) 
P�3K���֧�W�
����ֶ!�a�4Y�1R��~1ఈĒF�ݺ���wTehO��g�z}Ʈ������ZAiOV̢K�٣��
?lr0�̙���Q���I�
*��i�w:#��� l����uC�
-Cq��3�[���TI�X�
�l�ӻ��z�*[�C6�L����
���ev�n����.�vb
Qh�2<,������G�i�<
-*�Ͼ
-�a?(��pӃ���r�Q�7{]�'�F��r

F��
6�O#�7&�-k�x%��	�
�۪?B��e8��h��Z�`��b5���0�������}�?��(��y�߁�r����]h�2D!S	xh�8#����:6
�@�(LU�M^�N������� ��u�	:��G�~� ��P��~��dԯ{d�P��n%�G|�[��W݁���f��zq%�!w�rY��U��&�w��l�>��(��4rD�brX���
7GTո��˷=!�:�B���c�G��	Ś,�^��Wj$�Ll�hm{��u��`�S�
��F���p�
M����\^絹�ּ�s���GH�9��6IJh`H_�d����*�J�
�}<��]o��G��9�
F�^f4�t
0�w�%�v��+|!�ە�#�����]@C����
kS�ּv�M&�3���4ఇև�_�Y�λ�@�R��N�koT|>�&{Ov�����5ߙׯ��Y�6׾�����n�{�%�ߪ'�����r���
��g�ͭ
�t
%�A�ǞA�Hŏ�FÊ߽���_
ՙ�(U�]uV�%�૊��5�j��/�N�����]�:T,�:dC���5�"��>
fI]_��ӄ-�+�M8z�oE����ע?������K�k~J��Â�� �f�p �bUP:�������MśǢ
e*a/p��c�=Kgt�����@��Zyk����:�݃5���l��9]�'��_NfÍOt
>
�N��:�����
~ �&3O���@W���f
���
-b�?���q��f����O��X]��JB�B
�ȶ�ik�qo���=�Nٵq�,Y�T(�\��Ӿi���i�{`p��� .�Ѿ۟?�g�-< ����+l ���(��A�΋{�!�G��@��� S���-'�.^I���$�6�WwV.��O�
-4,h�e:šk��}�1�#��
F��C�c�D���
-X51 
��?5��:��+V˃cda5I�D{Q
-'���<}^���^�=,3[k
堣�?�Ή=�hܱ
oX�
.(���n'�?����������X8���dG�u�� (�|��G ���G�
�%��{~�<̲NFF����,W��`cg���r�D�h����,�C�X
Kgc��FE�DF��
�+�|�I�;=��ȑ
m� O?�_�)�h؇�Q�qE�5C(�b�1�K�prp������"X'�^d���?gAʗ�m���f>�'=j��(��wVT��L��f���6Փ�Z/��w�w�_��jڱ�X�֯/$&Z>�ܬ�/���|s'\�V���s
������ �L)<��2�B�~�e�����Nm�Q�|��,J�A�ț�_�B~��
 �
% ��?��
,�

Ew[��r
� ��^���W�%�']У���<�V�1�M����%��٨�5���D߳	ѡ���
�.�i800�iS�m�J#;�ei��� ���OF1�Ҡ�/È��V�

��I���g�=�����U�K��^Z�:i��B�ܼٙ�B��a�{J�?���m�c�H+��Y4��g���� Kˎ�~$��7x�?ŷ((WW�Y��g0�o��I���I�d4��D9��U���
;�[��
-�R39�|2.��a��?P*�������ˁ6�\i�V��Vz�U"7�*%��
�����
���ԟ��*����
-��PT-O�^~��&��hF�<g��N�F;�ꜷ���1���d,�F�Yk�e}�K�ڴ�
-�F�f�'�K�㰕����������)+�5Y�j�6��|rF4�L��.�A�����	�td�/��
�6��n_O�6=����FXS�Cw?��f)����Y"�Q
���ʘ�F�0b��ג�֢"A�
�^��(�k�xF���|8X�} +���
��F]��
Q����Ԙ>�UUr�jl�Sď������g��s��I
�r�e���8�ι�*�����7̮!
-���
������3(Z��|�����
`��0W���D'
S���*q����:���ڨ�RC_�E{�\����V���1�-���_D�i�ד���bO�k�'�B����"� *�\XsP���w鯠��5�z���=�������z5
��rI[K�G!��e��a��OZUX
�#2��bMT���b�d �� �u�kJ*NJ
-w{j��oe��B윤���(���B�
b]�
,f6���!ݐd<�]4��\�
�7|R�˻��Hx}y��z����6b����n����R�ْc�
I:0�u�eɺ��Z}����d�;�����P�ؙ?E�6�lʟ��CP!���A^�[��EБMz�U�fc|�:�bs����#�]5gRN:�]ן�
?o=g1E��W]����if=�ÜF�-���F��MHc��S���
`����

T�ey۪�rQ��q��
(
�|�������H�[R�p�K�L�8I/82=g��{���[O����\�9=�
}6���<�l����1�
-P
�r���P� ��[T�ϖ�G�]�Z
��p���9�;������Ϸ1&�(-ځ�.�i	��~�虩1�T��|:�3�8rSO��'������fL�9�O�h��������u��;����g�zT�R�j����O�ZБX
����
-��W�O�6�/�|9���}u���]v�R{sk�������i�a�����O�iI�ţ2�-��X������m~
-X�"�������2
n[���KO0bK�Q[n�'�������5ކ �h�кҋ۹�����|��*��rO��Ҥc�?�
9���1�Ҹ�V���~�h�}j�~!߇ �����F`��/�g� �K}�kV�
Bh8hnW�/� ��(rǍ"t��n�<�`O�
��W��`ƽF�i}ғV]����8&��hG5j��Rm�������yY_� _��`-S�}VXk���`m�6Z
��u��M%#
&��Ze�n�^r1�a�"s�cĝ��+ҖK����E�ă��y
��2�
N=��<�4�j~k�(T���^W�� ���t��[r��l�^�5E����/qTk&
׿����2�0��4̱������v��<�2�5��9w0�F�*݈*��{�/^d8BR��dCk���ѫ�
����wX�^�l��Ft$U�m���mh�}��Q���Z��` ���ch�ϱ��L���M��`�8���We�B	Z_P&�7�	�����w��n�Bt@�������A���#
=#"���9
����F�U6��dї
�k�>k��\@�ʴsC;tJZ�C;e�vI�)~X�W�`D�QuB<�C(/n����%Nr-8�Ǔb��OĮ7 �c��'��C�?�3
�w��+��„$�4� +1?���؟�sd��mr���	��_G��n��jq>M�6Q�x�L�
-N�F�0��{��w�Ѩߥ5��$1����Sb���Im�
m���˅_pxM�vI�s9S�U�`q�4��y
t��%Aө��
�$O	�͚��چ Ro
�����ҝ`¹��Kg^��4�������
�TK��l��^��N�4EJo5nG��Sl��p���
-�&+-��e0�O�v�9�d���,yS�2��z�i��5�İ3��&�xb��]ZBO���V�4ž�k�ұ!������R�NQ�(
o���k;���)@�lP��(
-�	��8] �"7�����[��<*��}k�
������°n8�������%_�O�Y�5���#t	�7��_^T�<m�=?IX��[�ͻ�A�
5�/|!�\�
?����_��@���[�h~!�עt�E^K��:���$pA1Y(��t\�����n�����%��^�k�����Lu/�h�7�Yk滷
-�c�{�
-$�/\��_w^u�6�*�� Ļ�`���]A�_���U蘅���9�����Б�@�rc at 1�Ow�yܗP4V�d9�I���<y)��aP
-��ϥP�
0�È��U<���>��i{^���a\�sì\
�9�Y�� 0-�u
��Y? (nP��{P3��W�>(��*(U�
(���ӵf�޸j���+V��w.�I�{���f���iΫ��p^9���f����]��#�s����گp�oZ�u>������ CY�|\���ٱ0��
(euPZtxPR���\ݾ�MⒻ�v��!�M�2�dz�'~e�b�:v��b]��c�v;tOs
��с�:�����fZO�r
��sh�Ls�9pǿ�������%��@�BPEMP���Oz����{S��;O�Cc��/E���0�)�;���re���'߆��u���O�;
�p�7}�v�
���t��f;K�/�aG%�� ���a:J
�s�}f��&@��°���M��]w�v%4..���Bf��C�w���r�gr�m����:�}q�T���l|;֎oo߹M��������隹�j? 
�ȇ��(
�(U�1@ӵ�'k�t^:�V�����q%��g���^�x�r��ҹ
���$��Ʀ��n
����|�D��zڥ��<SΎ"��6[��
�5���Ym��sP*��BQ���hv���@w�@�	P��R��ĉ����
w.�(
,܇��
M_�6%�?�h2�����$��1ЛW�y��ۃ��Zo�*:O�6�U�� jN`<�z��o�����'7
,(�G���~��LL&.XxB�Vpv����
��"$�t�������ݘ�B����s
t�"��HWN�S�
7���S���&K����6ٗ Pjs0��n	�x�܌�"���'�C {P��n��"@b�R��1>m]P͂}/�f���$'y�7�x��O���9���{N��#G�Ut�:*��z+K$�Y�ݚ��u������|@i ^�=�V -��O����gl��w�
0�c�.!7<%b�����X��e�g���YtR�]�r;do�1n�
�pķY���|=�۵��o��V$�>��d͖D=:�?���{
-�Ss��`(�ϛ ���賭�����d�ܞx�r���6�a��H�}�1њ���1*6e}�K��\bl(�?��q~+i~����-���,��\�VʭVco��B��(1*l2�I�yM��O����g��"��`{��
�d��|
��l�ܹpAw�ɫ
%Y�Yd��[���t�U��c!��5���Xq����h��
)ii����,W �?Ƨ��vP4�0��:���'(��
-��"�/P)����x��
��M?&ā3.�c��i}�b#�[/Fk���7qb!��U����Ax ��5�R��	�"�����Ks^�U���� ec�I�5������AeU9�^�����љ
��� N~�O
�ݘ�ΔLțVL��
���'m�uMM�dU�ͧ�Z��i�3Gau
������7���������)dƳI+�\��?����mT��q�N�9��y�O��ٶf۲�0:ݠ��.?o��e�%�}�ͯ�l�M�ejf�%� �5�`�+Vu�%׭KKN�h'ח
w�� J��yV�E�����r���aq3��
-�{�y�^��^����LK�S}_.�G�zE
��
���pY�j,5U��=���r� ]�gS�����1��1�݃\�	�dY�=�	@�\��U:�7�>D �
YPY*�G{�\'����z�t/U�b�����na�Q������k�%�eإ��-+�dŽ�&#�j�t�ˉ�򽸜�"?;�ʋ��]e��Z���Ɏ��
��|��&�nUX��Ϯ���s��j�Pot.�tyx�`��j
���㝻߾7�C.)n"�+�\�
a&�.?��Gl�xWۣ~57
�W�f�8W�<˭����O�ʋ��I��x� ����eP��I
U�
�3
f
�^A�,S��k��)
-���;,^��{V�E��G�����f^u���
-Z~�G��(5.�����
��Q"�
�+G��
=����V��Y�g? ,�������-?��O�8�
�s�p\���'qE4G����؅����E���l�O�l���2e���!��l�
Q�rn8��*�I��
-)��J�Q��ȃ�4�)��w�;�_��]���U�~�f�ٵ~g�������I�n�a,i���b��`��w]nx0�4�T��5�ִ�b]��F��n�o�1��+���T�����^�u��Oo�������S�}��`(��e��
��=X����9��I�$.��!7�ܶ͊QU��M������\6�9�W6����h��9�����5����*���~�K���)W"�q�����(�F
-q
�e��9� P0�|\㠢2Cw�A��,&irvqW2�Yk����b�.�L��
����
��X/̈́Q��^썪R����Ƅկ�Z��ИX��	�C�y|�g�W�G������
��(�	�ُ�;̓�y-���ld�Z�|I2}ǜU4���]�(���֙���x�N��
O�C+K���*�
߯{s�
![���j���[81�xx�H�z�p��3R��z�݃V! P>Gɳ�#'�I�>�p��>�
*���
�-߿
|v���y��J��T���
���Ż
���o}�����&��I1x�#���ԕ�F���ׄ��u���)�_Hg*8�N�p�� ~
u��2"$}�QVj���kx{�����X
:>ǜi\�5/�CS	��--�Bإ���[���}�8�㪽Q�jtM��u���̋�q�
�6�$�mL��VP����V������/��ӢVX�4��n�+~*�ä����"�v�
f��i'.�ƣ�t>8�>ߏ���0
���aj��&+��<h�)]'�6�
=��6�`�$h��bS��z�vT:
y|�7�����g�@?F<��و����P�/�G�7�2��sL���shO�4U��<�yq�՛��s�t��o�Ei����iK�1L3�N�f+5��h��?O䮮N�F�펝ڎ]\j�ܫa��B���� �[�k����,��e������)*�h��pT��D��
Ne���ɤ�N)<��@�`
kF�l���D�����:i�jo��֨r�RK��fuTú�Lԡ*�Vs\���
f+�
-+��
���=����ߊ[��{6�s~��c�ry�IA8
���� Od������g���6�ܫܾt[j�j|u��X{׻��_�zgtU8
�\�:��@�_G�w�G��<�i�|��q�˺i�R{b�
�ׄ���V��_� ڶ@��ʃ�b
-E��	�
-�D2�ȫ�
�O&������o���*�*}!qܘ����Ӿޟ
��+��%:��%&���*"
Z���������,�*A�8�Zְ����{��RU(p aD=� ��b
-
-H��ɂ�6��!!@���i�����Ľ���Xaq���W�u�W!EF��E$��F��
u<GI�^�w��߸��Gޢ��
�/���h�����(�P�<v@�^,��Q��€�W
�~>��Dh+�O[�̯&oQ�-��%�]7�Z3z	�^�M�Q
ơ����-?+̔0
h�c�
|�8�Gݱ���hZ��֜���|����A����t�ޏ
(8��
8�,����2�����{�7ҷ��(Ɲ�z�;X�
���'�Qs���r
U�2�6������B�����|;�T�Sn����L=.�M�� ��@�D�$���ꡠ�z,(L�	
-���E+��b?�>�@�݅G;
�n.zU�z�}��~w��Q
_�!7�����΂LG�c0��/_�y�����/-Ӫ���u��-���l�P��uTjR�2(H�(
-�OzY�@����R��}r�!�?��� ��TX����T/̴vԅ�	���MA�k�|��,E�[���&-�5-�7�<���㳽�q��v�d}��/��_ 
-+VӾ~���k]���#P�oUP��sP:�;PZl.O,U{��"�Jq�����f�
}�����Uw�2��e-���b��-�Bh��Ŵ��:��y}��
-����J����fpM�=@a������S�"��"�I�f��-Vh���@�nO��&�ͺ��{�
��U;��o2��C�?7[��U�+�/��s���n[�Ƨ���
��	�/��B���H
1Ku�n,�ұ�� ,� ��x�`+UPTe������Qq3����c��rc�}��\��$�V'�����s��j�#�W��ލ'��d�9�����M�mf��U{�[m��c��Q����˅o�B�
aX=(�5P|�@K�������v#���עP���_S�|��5�yx�/V�����3��v�����f�>����z�ѩ�n�Ho�I~�ޜ�ɕ",��,�Yn}���l֦�(�t�i]}Px�>;��:�5 at g��g� �x8��g�����������e�:��B�{5V(��Y�z�1:MHlf�k��X[؇ݎL몽k�J ��,���
Y��+"5��9��`�{�)� �^�>y���{@�
�ܼ��
�P3X:�u/�=�8�5��Ԟf�J�-��vT�h>�4�³shy	B'�
�=HcQE[�"_�j�d0^�jOVJ�F
�w��q,Ы�B�_�/@1w2`0�P�]��r֠�ze~��x�H��\?VNψ�}Ëh�tt��{�ZΚ��QMt����v�yտw���e�9]���J"��B
�v��x�\n4]�,j��κc�(V=�F�8I�`�
n��[�������� �W�n������u�0,�n/�m�[1a�5$�'
��]2��U;�zS�j�
���X�pK+G���2�Ra"0�ϛ\�P��2�
� ���x��6@�����`H\�,
%
Q��n	YGŬq
�O>_ܴy��@}�xw��{潩�ۄ�6�̊�:E+���08�!��"4��"TO4�!8#��7��/�sP�]�h
�
*0���'}7
6L�@%)��J����Ճ���x�᭧m9����eg^W��nk�*?V#���d5���0f��,�LX��͌�#A
�Cn-i��
�8��@��GFu �r7�}1.����"��֍d����"�@��T�l�����U8k��d����,s�zgI���g�~q�tW�lrO���<7bRQu��ߍ���`�y�d� E>a�"ݽ��u�}��>�#x���J>����b+���cO���	w��k}؃�OǓra��]
]���
�+V.�٢w��2��8v��*���;���Ӎ����f��՟��
	Q�g|!�P�dmhK at QW��|n0�䂊ƽn�z9
��E��Ƅ3}�8��XJ�,��T13د�
��\�I��Č5/l�����ב�p�2�&Xs���qۏ��z?�T��n��.9��||�d_���Fjs��l]x��נ���i_	�X,�
C_���n�X�N�mG����]P�ZI�
��Y�h�'Yԙ|68LV��=zqd402�$5��M�8L���՝
��v8 [...]
-�y7V��i`j�K�l�Rd�-���b�͔j��������}}���-1�|���<+��
J��'�8# ve�����>
C�N�J�L����Z;�
�aKyoQR*)��Б�9KO%nVK���˼i�ܮe��Y"$�
B��A�

n�5!�Y#��~�~�}���il�A���(�'
(I7 �w�U�="��R�5��9
��U�k�u)�P!Z�v�-t�%�5��hV'�3:Qr�	�ך�ɨ��ĭRy��"�����qΔ���%����M�
�A�^�����?����T`N�w~I^ly��� m���U]����� ��K\8���u����2�i�@��ex��s�ۜ�~�8Y�REǟ uq�A<z;v�륂{����ֽ�v��n\X��@��7fI�
�t�?�eytN{�`�ZXcv:��u�J�Սn-eZiZ��0��ۛ�em
�΢
����N
��A
�qm�_�)�NX��"$<��ޠH���p
!ݬ��;'mt�ɀ펚y��O
�
��@�w䋨��)P�����ܼ�ag=&�j:��
��7�}<gb���Tb��3�H�Y��
�-BMp|
-���0�u
��9�P:���h�絙�
��u���;f��p�e��:�7�����u_�vAV�mc�m9��+�7�Jg��-eT,�O��fwS��3��nK�GծqD�������x�"
-�̹U��/�V�W�m�ӝ��Z5g�iF�j6E$�4�f%�l�f�q#����
&�� �O~�-f#%��MD�z���9��̺�'j'1���t�[��|tV��<u:�]�匎-���Y".m�A=Z�w/��A�q;2�F7'u?�--g\W�E�@[J����y�=�J"���SԕwW8v��*$ߏ�6kS�h&bѓ�s��8D��~$�yB�e��mvM�w�5�jcwf�G&T����0X7�ف��$(s�Q��?��z��fb�Z1�$1����˅ol�Ӯ)����2�j-�n�2^��!RB
S��&���=u'��>�NQK�J��H���<�?y���Lh�V=�X���j�'	:�l�3��=V,��+���
�\I=�r%�D���N;��eYƸ�|_�䓙M�4k8��
Nv��v�@�;�y���z��ٴ�E:\��c��f��rS+�2�+�80�y�l�Ϫ�9"���
=�:rM�"3
?K�U(`ś�j��1�
 7�,A.�WA��M�
<�����{*����q���.�z�Ϸcg�z�x��%�w���K�̮Q|��v�I{��3?&q�~X���Qj%�;�K��=ѓ
Ô�Ѓ���~����p(Z�gYiE�T�� ���K
r"R 9��C[���:��cC��d��7t�f�)>��\�
yؽb�1
�$3}�f�pgW�V�:�U�,Oa��:�&���[�=@N
�@�>�Y�-�]g`o
�V�1Ƚ
���;�E��
�V��i�Nj
�<��,^N='�d�a^�Ǽ�l<J!�}����~��;{[���r1��^�·^6a�����q�{������(�oA�Y��MX�a�_yp�@
�bЕ!��5���
rH: Y��|N"y8�8��sq�f��y�$�\37�c�6w
F�[[͊�����z��A^w[<�����w�B�:9������uc�
9+�|o<y#a ����L�B[
V��k��8�\;{y�6Y�pf1�@e�x��n�^!��-p
��	�pr��e
-��U0u�-
Վ�
o�v�;ʧ쾼�=@.`����u�`� wږ@��|�B�k��@O³k�����W �(�жu}�����
����G�m߸	�{���8
-�y,N^��m߳�<��)D�N�v�
1Olre����� �'E�-���,*a���mA�lP��Ӡ�Vڠ��� ���A~�:=-�{��%�~���.�M�V�gM؏b��%У뽰᯲
j1�yAa6t���{�җ��,"�x��:�}��1�ط�
@>��`�;X��\:xP��.(N��
�Eq
-kam'��]���{$�ճU�5�l5��~��)��әE�=�u,�ؼd�+�m#�i��@3��F:,�
�?H��m���� ��
j�\&}PH���X�B�S��m򥬐E`�����Y���9'&�=���-�d���a���:�\��Hkc\��q5�l�r^;�B���(��z�����&��~��~!�J����퟾+g1 �������.|΃�����qm������BM��&�mu��q�8�_{f	�H�6��S�b�ࣷ��{���׆ʾ}Q�]2H3��;N��b<ް�
�{|f�XV:챇��
A!:6@)c�@鼾 -� ښ�?{d�t�

�-���v�wo�#��3�p��K>�m������@�]I\�l�:Y_����и�v�;�jݧ�
k�
-ﺔ�z����O�n� ����I�AM�-�釟=J��c�m��`��5�n��4�����8
EO��i繰�v*��'�y���;e���7ˉ��Ԏ��\-O!��f��r�ߗ�z�����_�2��/ϳE�l�e\C���F��y�xVQ��)\F�RJ

���p��n:

����"6���y
�D��\*E}c���~�j��6�Oe�����&%�)������ǟ���#� 
-%'�g�
�9��C��g[�<(�9�����8)\8�*���;�X>�N�?ٟ�
��>{ߎ�UB�gxq�eg=9گ����ֱ��@o�H)grux��U��u���� �ݗ�<5g�J��\mP���g���#����K
2�us(ʟ{om�J5����&���xeO���x}ow��j����ձ�R�SB,
�nOpF���dѶ��
-�o|!���?E��v���B����2.�!/侾o����/��a��V}n�o.�w�нn6�
�`Le��A���I�:
��崱�	�(K�J��½�/��._���|�po-.Υ�{��-	5�Ϸ���(��.(ג*(���
0$q#��\4���ŏ�
-���y}c��&��^Uop_˷K�J}'uXZ�����h�n�k?�
n]����A�rkD�p�CiAhMN���
-�
|�Gx�w� -F=X+���u�!��=N�z�<���=D�eO�1i\

�O-�s�=�
E��4�
ť�T����sN������~�I��m�?o����k1/{�d^;������
���7��SV���6@��< :��^6d�I�u-ƏN��-��M�݇	�x�F���B۠7bq4[�{evU�2p$�7*Y��j�6ϒ�9��F4����m��Y��h��j�1όs��pQ����j���S�F�����Oki��
-Cz�3�/�XWzF�Urg�;D^�<��k��F��S/�>%Bb$�]�G��n}1�)��da��q���葏�cIX�hṂ�p�}}�&��Ԟ>j���Q�=@�YU��������O���;N��5�ׁ�!w��'A/������[v9h*�j�'��S_X�!Gp��|R[0!i,�
	׆�?� ��=��|s�.�u�nnk�`�+�
-f�
-�Y��� �[PX)'Pڧޠ�l�O���%K���7s�����7�,��QNme��z��M�o-z�����S�R�˱G!��s��y|CM��՟��Tn�{�Y���I�m
_m�6R$�:n]W��
[P�]l�6�$���Ɵu�7��,ۃ�%�ƺ�`<��������AR֩}a�F߭4�I��S>(��5
�D�R��J&���"B��"V��\��^�ޭakI��Uc0�ͪ�$=,�
�`-tP4*�g�(j�:^Ϲޜ��x[B��1�����2�Ӣ�)۽��BDwE#�/��1�*�*�]���Jgx,-)j��pE��i8x׶�=0���[y<$�ǰK.�F����Z�F����
��
^�
�1 e���rϵg]
�a���H��u
턴z{7e����D��D�SZ��,������8aC��6)V�S�j�Ϳ���6�7��z)b�饦�E��潧�
�5���q5n���{�bV;�L]��q�����f�mu
��#��*�!�ۀ���H\]ʁ���Nn�۬n�o:1k&���.OUv�*)�
-p��%&=�
-�n֬���U|�����L��
bꬫO��/�G�t������3�
����і��}�����r�$g�.�Qj�8jK>�%u�hϳF��~!t��݇�J�EU&Bvғ����=T�Ό��mvZ�$�[5��j��ny���^��COv��ѩ��_���y��M��NXC�0��E���s�a�����e�(�C�(`����=LJA���������nu�SV=�5�B�S�����t]Qe	׽�qJ/؁
`��ؠ"(�
�(���z�'�5��g��ƪ/Y�O��E�i��i��Ճ�W�`u��88nIȰ���f%��刖��+�v�7�F�
8�!m��ܴ�ޫi��y6;�#8�|�
6RR��:a��b������~;x��c��j��m!J�i���TGU��+h.U��Y��ՙ���cBg[E�e[�d�;.~s}�!�o
/�ng�� U��W+��Ƀk�]5���
�
�
�;�vT��4o�'W��R
9�����{��0�]aߢ\��ר$�9W�K6k�nq7�݋�}���;_P�F�@����}�]gS�0Fn�_e�de�sg6-L�^�
��LOe=e)���踊�lM�ζ��ש���+W�U/���‚Ż���g),��&�"~�+�7F������9�3����'�������N��lv"��Vx ���T���A�
}����u�!�������D��
m�
�R5G��^_�K��ُ[^wcd]p��]�����?�����?IP<�1���ҏ�P���̼|g�y�2cM�����W�2MM*K�0��PĐe;��������0���Q���Uz�&���z�E.Y��L���;�B�2wYn����6�
:�2zwܣ����4c��&�	�Uڻ��o�$d>��*���� ���>>|1�=Y lm���@�e��Ko�a5�J���� �`z����n� �\� �X
��`b�Xq��E��.%M vVr|�V�܌[��s�]N�GM6=��|oj '�%�z9 <qQ@
�u~E���5�.�j�9�6�����)Ρچ
ՎOP�&�j���
-�n��X� �T�vd���e?�bݎg���
��p��f��2��~�^�@Tt(�jO ^�� ?G at T_8 �e��,� 1�~��SjM ����j@��
���w-
�8ߡ�1�_c.zE(�X�,h�*�=��CcP����!���z��� D˂fy�{qqg������)@ҧ �E�H��e��j�" �X
�Qi
�6�5ǰY��T{}��5�DC��2�v �
�/Rm~�g.*l��d�����BS��st~���� �jC���]�D�s�
-�@�a+#O
���
-���5�4
�q�
�6`
D�5��+���
�}��͑ G�Д�
4�O
^�[���B��e����r��Ay��4v녫zj����`��� tG������% ����%��(Jܯ`	��t���V��ZE	�l������j
 �i�[/�j�q�u�o:/�
�	�Vv�-}?DM�}&̛gS͌O��x�(VZ9���+ a�Pf%�2���
-U2�����R���� �8 o� �A��6��~��
���4E�W4����U�ϋ��
�g�����û� �����vPva������p�l�h�v~
�)B�4t�[ad�
�
����@-7����g��g�t�ЁjA�}�~)-,��c�K��R�y)F�7
��k�=��E޸��Νc
��پ��7n퍘�@O|R����> ����h�s�!F SiC/��
 ������ ���0fk�
-�>����x����#�����eѸ� �v7�x����N�q�f��
Z)��a����fa�
;���W��YX���+ �y
����f��G��Ԍ��~�d�:�\��ЫIJ�[�U!�O��j�C�W���p�5�fa���5
d�3�g�ʵ0)��ŭ
آ��=�)�*�?��
�V/���!R�,�Λ���>P虁B'�-� �������L 3�{�10ҋMؼT{T��]��D�vIgR�����%R��9)���Za�S;�"�]�\qz�h��u�ͤ�֩;m,s�_�xT1��5���~��Ў8zg�y��O��h��By�����yM&� �R��
iv�i0����6��ĵ{o���Ӈ!�!��]a����6��MR��5f���[W
6�
�#���
��kS�?5��+ Y���L��I/g�l����������]_�,�~,�	yG��<
��Ϻ����?��8I������?ҷf�imj���.��a6 ����_���L�:�0����
�Wdv)�:+;�'�+ ��G��fiJ�B�&�}C9�q}�D���z:�W�ޓ��*)%8&S
Q<�V����yS��kI� [...]
ʼ�|_J3��ةcN
-SEPsw%0����s��<��_�B�в�L
��t���S
�!���&��g�?��˒���Q{�A�v�>��[��X�l��
7�S�<f�����m�N�����:�Qi�$v��*�Jgs��#�І!D�W@�,��d� ��=�z�l�#�\��`ɬ�mc$�q"f���2�'g�pӎ��gv�z��A�Vy����":FR
�y�-
g����h�T*���0��ι1��gft׎p
��=q�
��xhOgf�>4u ��P茁B�E��"��͙�� ,>N�Tn���
��o6	�euV��%WNJ�����S:�+�8ik�8[���S��z71�P{�Pl��X�R�l�����ij��/�����6H�:煗��i�]�#���~�i�τ�8;�	��~:Qz}���2��V��.�Vi��Oq|����
���t<���b��ؗ{
�?Lߴ�~��
���%s� -V!�E�W@��1�xo�͊� G8��b2;y�]R2�`ç;��W��)'���"�F"5~YA����[%�X��Ls�PߕyeX��5U*u����5e���r`�S� [...]
�y|:tg%w(�L�D�R
���\Ce�l�@�����L���#vh��|�*�wo�)��l�����j���Ww���Ǎ�g�~������>F
�T%#JH�Ȯ9��:��[m9��m��e޸�F�d
�%g��v[����c
 �h�������o��Ә��z��=��o]�_��>�'a�F��ݩ"�Ca����%u)�����Sv�=�>

endstream
endobj
125 0 obj
<</Length 65536>>stream
-Ȱ����*��"^#���̴z�[�q=^:���3���(����b�@�&#���i��ZC�X� PÃ��sG˰j�W9�p{���D��f�5o�m����[�eR����h������~���so2���k/=:;�O���L5�
-_��׼T�w3]����kv���_�ݛS��e�1�d��E5�W�L��=TH8����\�:�
-:�5W�����a͎�\�@�0�O�1ӌ��Պ�|H�C�	�A'�KgR�����Џ�z5{�D�
1�VM���n��B���Z�D�s��c����?ؿ�2Q{qo���v��
n4�m�xZY_��ؚ'��M	Ϲ�b�T7f��^<z�Ah=�%�]�3[w
qZ#�	��^R_�פ��v�]$���
�>�3�T]˩Vݔ��$����$ b)/4��+ ��/.	^��y�=��F�5�y�m-��
-I��"�O&��L��9�%���f�m��i��������ԟ���V�$�� ��q�z��Ŋ��A9b�My�ҩ�\�:��6߮\0K��r�\���F+�{����]]��u���.�)I��l�55���5��׈|�h�-H�SRj�}M:��N;_7�Ͳ�j��(0�]z�dGwyf��+Am�.��M�d�u�e�5�����O��X�ӤRՑ�e.�
eN�U�|����3&���k�V�Y�RX�Z���5{Emi��#��vՠ��=�����J�{�����1jΐ�x�#���9����eɔ���ݿ��ߩ�nZ��x�.(��.Po	ɻ�-�	_)�|�W
ʃfe�n��B�N���yCf��
f08o�~9(,��{�츽�ݚ�Ʊa�<t�:�Xp��l�
�,�ڮ㗸zf+��ܶS�o�a�zz�<�I��QK|f������D
��\F91�����ag��X����R��F��ռ��UI���V0��r��UP���V����
-
�e鱉7�%
�V�^Q*���R�<����F
��N:j���A��ː��*cM
?S/��L���R�Gw�_���-/��"�3���� �׬z��͙L��N����<�!��6_��M7��2�ڻ<k��zQ*H��<�"�\�Y
����Y���}��Fw���  wf�C⠗%�յF(͂
-a- ^�_���~z\-�}�N��(�����
-�����#(L.��YRz�T�~�vR��һ@݋��e�F�
�D�
-���@w2k��R��\��{�LJU^$�e�CP�����Ϣ���d�����}B�V�`�_���X�*�8� �� +�v ���\��3"l^3V�����/�T�0�U+t�5�
z �����%
Pz )��!�"@
��g�
-UU�V�a����c��w��A��7�H�{��
ݞGPc�Y{�}jo�S
���;
�v{�jc 0<OC��
-�:kA�'xg%��WZ�18A��o�-�)�2�2@��6�(
��/�:?����2=9z�~�W 
�Pf/�2��*���w� \�|3���*\����,�ݽ+���`|�>��u�NkcE� ��[��J~& m�s��U��P�2�ׂ��s���ZZ1��� '�P��@S�Ph4Z@��	����� <� ��W �b`1��Z�y�u��7���`��X�a���@ɛ�k2
���
5#A�c��1��[��%e5��2��ӽs�Ư�Z� ���Bל�ļxR;��
��
��l���#�G:x��O�
¦������	�
`��`��Pp����$@O���������L�{ӊ��U��5R�OS�wa)��.�{�W@])(3"z '�	����u�d�L ���/H$�b��Bo Ї����i6�KV�YZl48B���
-�o��löAe���Ef�u
�w3j���иz6�D�d���b�þ�_�.o���8֧��CS�+ W��#�1��<��"��Q�($U��H����[/����
-��0�>���o1��U�[
Gq4
Q��֯��c�֎��wr��]x;��˿�B�{��}��� q���F2 ���~O� ��j)he7�d�񬊯cQ�'&L�^=G���x,x�
-�ij
����ݖ����"�ϯ��M;ٍy���^s7Y���wJ�*%��\�E����2Y�ـz7�A�i={ ����LN��T>/&Kg�~�T~L�a+�Wy�n~��ͺ|֑=u�~(�W�4�W�]�2�Y�w���5���۫L��F���8m����7�&)H��[*4%��h�� 겏A����OU����6�܃0)��C�m������fѩF�HiG��#�?`���蹰�;#n�O�quA��rSD�t����0nB�>U����Y��<�
���oXa�_+�e^G߳�I����3�RO@��,�T
�ۤx0�8)���Qr t�:0!Q���zNV���z5�S���D�Nf�ڇ����
�Jj{�^��nd*��$W�2'�rf���Y�C/�z����D� r"ϡ)�ȸ\��ږ�G
�����W���1y뭮a?��~Q(�Π��\$nf���r�T�������E�Pә�F;��5�]�-���E+�F���/keR�
�7��?ؿ���$@�hs�)OO [...]
-��ކ0�?|W�ff�K
-�ڥd�<��Q�Q�~8/��T&pN��x=h5����^�M#������X�\\�o޲f�0��`���,�C�
)Ї�:Ą�RS��c�0��.<�����`�>��,��D�0��
�tPzVSN�f���F�E���`.qP7N��w��l���:���򺢰�4i��s���Ba���PP8���z�01Gh�N��'�=�L�ُ
��,���4����g�-]#.�|>�k���+��Gp�l�e�!�;3>�*�r_q҇M��\Vn����T}����W{z�:ꭲS�.��+�5�!Z���f?�otT���2O
����|����d~��]�K���/�J�
+w�P6JӒ�Yl�S��J�f�m���Zy٧ep�\L3�������"5�1b
�O�Q�0�3�A�@��w)=HE��6H��Ϡ�ރzTyA��C�
H��'+F'��]$�z$
GF.���>�9
_rM��۶��A�-�zW���e|��ß)Dp��'
��:\J
f�6�r�{�۽S�0{}�����w�䯯~w�|���T�ߛ�����
ݒ����"A0�I��]�T�n]>a
dߗ�=K���+����-b�+���F�FcZrfG�w'c�+�{<���������vAɋV]f[�&���S����_��
_=zr|�zN�; a�@u�	���-`6���M�7
敞wZ��
��Ù&�]=�
v��)��d���y���d;�E�W��y�:M���K
ʕ��[��x���
8ÎuJn�)w����`�6x�ln����8����P��� � ���=_�>nx-��㪶?��0�/>��ۥU�uLPU [...]
?؟
 k/�n��:
���N��Z��M���(�ց��#Y`��%�eu��
���ըj���Ö2���l�Q&4}��u�YG<lcm� �fH�
/Е�p��ެ�i
#���w�I���=ڟg��+`ʫ�iV��⢹���|r����v�����d+!�n}��k���gC)li��
���t�>W����.xz�i]a�
���U�z�
��=cwkz�k���Ե]��2��֤��y�a�_g"y ����!�ver�q8���5rqwCQou]h����=�(�z�m1�c;����F�j�y���i��jcv:
m���é�f�z�S�b2�
��]�+����#E!ԐZ�h�k�B1�k��߹2}ݶ�E�R�F�	𤱫kr����u�֯ɋF�?6��v����pR�Ȩ͕
-���ʽ�v��}�ߑ�դ��E�1�ӇzEHB����h)�G� ����
W�'�
�wf���n�Pa՘�D��~�
-8W�Gכ����m$�S�3G�����7[m�/��c���\�֖��?�y���ŘR�U��6kA�C�[r+�z���Ƭ%�x'���P�0�4/�b���)վ�{U����䫙��zJ<��R�"��l��O���8��L��e�>�F'Z��qa^Հ���h��
�W����D��&�˴.�:��5�D�^7�w��b7��{���
��3�ʵX̔��^�f�E�[��ҝr��b��$��Q7�+�ד����x��6���]��y����N6'zܸ��aoU�բ���E�8v۫jԡ���*.t�Q�q��:�"��6�Sk߫z�㴢��vy&</%�_�#?�\�y�&fev햯�Z��a�P,��8g��W
V���
-cqz�00�ælRCGm醪��������;�jv��hݚP�S�,v��g�?�(�j{�:�L
8��
-�k�b0���7X$X9E���c�3
-�:yw

�6����>˟�߰]�Z��
�h���M|��^�ݻ������
Wiv[�����hP�;�Tpԧ��ų]	�顬7��V2;���g�	����I��w�j)���vn�4�l���Y�lܙ�K}��1���@ا_�Q
��
����b���<{嬓H�Nz��q��0�����6'(�t�z�z�
-�Қ%��K\��z,r�
�xx���1���^�
-)k��0���r��J|W�jB���,���I����B^[�ܭ�_aֽ�{���d(�?�/FqG��a�`W�Z
]���j�~�#L��QҜ��b,��PΙl�Z
�r�O����\���X��D���Q��'�B��o�p,lAdR���7O<��2��Y���
`�����������1��o7%���:
���B�oP^�+=�։�
�s�ϰQU�\�]�0�
Ц⅙znQ-V�0R��OB� wׅ4�E8IB
�R�h��T��0-p�E�7ݔe��e�� �AW ��u�����\�*@��
�aC�"�B�d��i��� H?$ۼ5� ��d@:a� �w� }X�Aځ�M�Zx �B�.����t�a R��^;�YH��4�d�� �����j���i<u������
�
��X�V��#�� :{H����w��+�\>
6�@���_�
��9��J)�>�i�E�0�UX�qR��Pޢ�)�|<Qc�~�� P�T�V�ա���y 0$3��� cn����Q
�]gP_�V� �6 
� �qi7k �.����)@��=�]r�h�ψM
��}5� �(T�V���+�m�&���� и
-e�E(s;�����c}��'nSO��j`-�	0
� z� �� ������Ηr
6!< [� �1����yA�3�?�j�%�	��!'Vo
rɆ��]Υ���ḈPCz���#��G���o
|�8� ��; ��f kϾ�+1������� U`p�ַ�Ji�,�����P��8ïd
"�DN�w�
O3�Z��k���<��\��x�˙�?ؿeh�6j4 ��e(�5��] �/�����,[/ܑ�*K����G& ���k
��C��4,�Nx���^y
� ]
��[���Fx\�P���A'J3Z������ �iݡ��V�п`�.M9�2߄�>D������
 b� �g�0|���xx� Nk�J�S�%�vr���w��O�Wρ�;=�T�
O�̽�G���x����ߺhT
z��Q�9wK�7���G�o Xo*Bl� �r2 *���l����\���2�: �� 
�����q	�`�Q�C<�֫ߊ������0��- [...]
-Lo?'��ɲk��]��)#���L|.��Ľ��gς�/��*R?���(e���t���;{���7�l+y���}"�"��[�xY�Sw�(l��� ��{N�
��2��ڵO0�q���H��x�Kwopp�J�b��sa�f�������z�y$��d�'���7�]X]�;N��ۊ��7�6���&����L/D	3�M�6��ۨ���|����w�	�P�Sh�z�atw2A��B�7!y
�3�^Jܭ�|o�w�SE��f�8I�����
���,�yl��(��[�N������7�,{V�����E1c��0K�E���f��i)yζ����#��(
�*)P��d��3����9붱�ZI6�5�zK��F4U���r|=n�Nr���vs��pZ��.��X�Z��#֜�̦g��<)z��V��l+x`�
��LϠ�&�a����o 8q�BU�3�Д��I��AG����'R�3̟�q��٤�'J���b�]���6)}���
߬��\��.�˲o޲��0���_�z3s�ζ��:�B�<���k�֞�0��������Dc����
���Jµ$@��c����jY/��������*_�Ei����8����θ<�Mz	�kRlϭl��ܒ��nw��i)���:9����t��.h����~�}n�1k_�l�����Qyo�_�����̡1�O��+��a>�ё+]�R��`����*��h����M�k��Q��if\-�Xv�z;�
f�|� [...]
^�
�Y=X}����K��7�I���x�&�bSX���d�Kl
Wn�˞�T��O��
�NBnW-�];�L��]yQ�,��wt�����ioy�h���4�
�?\d�dP?\�u�**:L��{������@E��UE��S�B��7����2��w�X�Nf���<�|.�'�dg
�6��]2_"L��W�[X]��eԫ�����h�T�3�E�ˑQ�v�w}�mM��ɬ��h҄��
��P�W�|^���}u��2G����
���o��]h�>�(�i�s�}����J�j�RϝjA;1zay(wWn�ִ'Q��uQ2@��u)zu�ن����J�Q�4�����
�R��O?�nd
-�n	<�n�C��HnÖ��=������J���ߟ�v�V��2z*�C�A�<К��9��p�q��gz[A��Ҝ,f.g��
�k���p�ڴ�QFµ7�m�eDӾ2���Ŧv2�ĭG��<3��Po�?���Y>sW��/Rl�^��nw�i����'p�
6�g�2�]�:��}?];z#�u�M1i��x#
0{5Z͂���)1š��9m�Sőx;��uQ�Ӝ1T��w�w�C�mo2z��cg�E(R�k���%��k��N{�O��:�.�v�
��7 �ݵ@&=��yQ=�W:��A8�6���ך�M7�)�
2[,�8��`Ʀ8If��	�pY$?��Jyй��}�O�
-����<��:�k�������R��6Xݯ
-b��g�F���6�4�8>��R�v������� ryk���S�7�Tv	c�
�y����/�},إ�8���F�31��n��v�p2]>#pt�A7E��Y�*�3~Cz}��Wv��6h)y�h2gsW�P#����t����Q"�Z4M��y�l�<r��4�VDr����i�z�
-?خ�4��(d��I��6Q1:vEљ&aLf��i�~��@Ϋ��=R�
�
-�*9T��k�Ѣ�O�1V�I���l��W
R)���U���7?��2��`�H����c�V:{��PqG�Y��N�	��W#3k;�Tƚ|改&4�4��0ݫk��`4�����Lzy���C�yZj�t�-߶��(�
v�tj���� _	�y��w�����
o
6U
-�ܫݠ�hP��v�>��������

6�s+��
�{'��LS�ܺ��Z�1��,�I�֧G���
�p�Vs
m��)�۵�_I���J��E�c��V��D�����mg��yQ=�n5�"?8�W*�u�._�JT.L at T���
-��J�N�����c��m�@�U�-!���%#�>�>�c�A�]����@q==]n�V�J;�b����o|=l�7P{�iB���:aT�)�W����WFi�X��W�2
�\�}�VIG>pF�
��9�����|?�����7��
gvK�B�.T)m����Ӄ�K�w�����IoVy��U�V���]�}n���B���}�W֮�Zϓ����@<���y�%*��X
���qz�=_�%'*�
��s��e:l��
�TT��m�u-����hou����
J�Qf}��œ΁�S�Əj�@987� +��|��X�4�]���iB����H�������j^8�7
���8)�q��2�����A(vn�~�i���p��*�%�ٴ��.��.������
�o��1�xL�~ԣ��
����$_NJw��t�v�ܜ�Hݪ/�5�ЭJ�T�^f�Ne�G�r%uq��l�~\m�"�ᦈG�c	~��+WH�����
-s;v�L��V��2~��x[2-��Y�u���r�ɜ�Ow͐�Hu��U^x{��t�c]�w�D� �x�����
�{�GY����8V�
-�RA)|�I��\�smg9�0r?���u��FO�̈
�<)R���%�pl�"�6���+��!��6�}����p@݄�,v�n�R���z;X��+��q*��݅�
�(剠@ݞ��e�d'�����Mg�y
-�Z
�!��+G(���p�FD<��l��t48�:Q�	�e�,r�{
D�d
���o�L/T0P�:T�N�Q��]֕q�s�]��l+�Z���`���Nƒ��M+�:36e�oR*�B�
�6�청�X���D�bD�@Z`E4U���PLի�(U�-�q��Ru��!��� r?Ү́�g��7 R'� ɔ� }� =�A��>A:ߥA�uA�H�!�V��t���s�5� ����eAJ��o�����%��^�/<���/ �΄ ]��_ؐ��
 Ѵ�7�{�sP�
-��&DIȤ77_ $uwA��^ m̳P�҅� �\�4
@�� ��$;
�>H�_��[�{w�}�������n_�]������-�<��k�7 d9�CS��ee�rM��]��P�s� �����MS )�� \�/
�w��|�q�o��@<(���,Ĭ	�Jn
-��C5h �z}uALU��;9��û
�,f���� ���Y^��<L �������Y����o����͕�V%���@*���$�L�ς(@0=�T 
�~���WxiP�C,���2��
�x"m��O��c�K�O�����k(���߼������s`����<b�>+@�:�J��(K� �t� �-#��� ��� �/koX/Fw�M/_^;A}}�ɍ)�T�]��8%2f�k,���H���F��o Hr(��.,����P�	�����x�N �4�����7ۣ�� ��c�&����P-~T��'�wr��K��/��'�͟�}|z��G̩��7+O�̓L�-�^����Txj�Ɨ��� М���ȟ�(N�: �#�_?+��
���4��O�u�
�6}
چ�"��%�[��9XX��z���Qd�b
�\>�@���
��jz
-Í�J�ɍ�~������c��ӆ�7 at SFEX�"�'8�Nn)t ���m�
���� ����KQ:��E�����x9܍�u�-����t���T�e7�S�Bp��}@j��:xڞ7}|�\]�Ү��S�/�;���m�c<;y��
-�u� ���?+�y
��z�^.��a���
�i����(Hҭn��<����
|�<�^/D/�����f?��|�M|�wk�P>5���}����{��~m
�|������1������`��� �
�,�W`M�ҡ��=�7��0�%y�􎍅C��R�
ra�?_�ʵ�ŚW�˰b(v{�G��q׻�?�7�ġ&{��?_��a�v7og��٘)&���+^IL�_������WG3���v�

�¦�J���W�����4 5�:�e�����oȣ�	����j�
w^*5�Mw��;RGN&��k-�wav��Ʌ�y<�ύP0P�N�sk{D�V��ye9����-�
�x�~���g�}�
���o X�
-��a�� �S
��>�fm��ǽ��n�����~���i��j��bN�*
�����J�ƭ�x�8��v�?�����ͷ��0Y�W
_\��ʢ�og&w(��ʭ��`�z*\:�vI�M�k����2�V]������fG�
��Wv����Gۆ=ﶿN�;�����C]�P���]9W6�ݻa#iCY
&M��%����]x�EQ�Of�dEF5o�b&�ꫡ��S���ڽ�7�����Z~m5�
-�l�v�
H9���el��?س���f~
Fo��z��
O
-
�})�}nV�&�"�5�

-��AZ��h�̙)�
��5�b���i�|�a�k<�419e��	�ԗ����l��a�Uv�q�inF�X���S(T��<|$@y-)'=�YȔԑ���'�$���v<�I6i���`���`�W/-��D4�Q�3��������������xІR.k�NjyIy4[��Q����R=
�������
���� \X@�v] ��_�p9��!ѺFn�v1���E�}�8���O;��k
-y��~��1c�."R��̾1#j��Ľ�#mT���5��v3|�g��K>%�ڹVP?Æ�~̌��Bj������Z��p�7�>t.�&A�<ۍ��ԼF͘�j�5���h�$�2ʡs�lC�Zjo�ZC��r
'
�d��rӣ�&�G�Oi�7�X�� �Xx+�q��=���9�?�9�ծ����9�����V?O�/�2
�FP�Q�1�yɱ�ww�&
��N!�5v�qy�A-w�R��eq�ê�i�wL������Xe\Z��ÅS�
8c��}g���V�/�|��<.�{�-��Uno���X)꡽Tԥh�
߷	�B5Sxrّ��K��>��uo9�p����M�l�uMW%s9��GSpr�
-j�)
�q-�Ef�(
��Z�ɫ[���kSQ<a��1v_
�*ۢ����$fL�$Q$)
-�s�,����)������3/���m7�*��Qҥ��Ƀ�4�Z[�(�X��qG?�S)B��n���]K̺ݛ�M���T����;ކKǷE��r��m+�S\�-���-�D'�٫������k5n���(�$_�[ۅ�W	��!xX֥|���SC���eސ�<�v8��o�<��n�[��&n����:
~��\
����!�Nr吻���~o3��Y��c��/�k����¿���;9�	��g��`y0�~|7�9�-�PrDu��T�u�ʷ�Nw)�.v|掠E�1��m)��j��:�Ry��6��ؙx^��I�O�t�
h/�pP��
��ڙM}V�h��yS�,�Y��Tz"h���9|6W�fo{�#h�g���Ōܘ�Eɽ1��%���ߔ�ʞG?�Pzޖ���#���2�<H�@é��#OLmҒ���o�^jܶ�K���V�����ۼ��즞�����$��MP�R���]4o�h0`���9}���E���g��
!�[���2�b��4������yȑ�c�N41d��B�M�i��{4e��Yt
�c|�״��$���ˠ5��s������o�L�_�s��Q���
��e�ƀ��w{�mi�.>W��"�t��:
r�n㖎��k� Tzh�{d�uV/p�ڗ�
T����k�h��l6�p�7g��0\���7GZ�F(��Ì�b?��zǑ%�@�~�
�͈~���1�$)L|�˫R��o�U/��*G�a,}
것�p j��M����
G_*���,���L�^��3���(�R��ѤT;�)�Z�4.�ƴT���Z�O�� +6��g��#v
��qѻ�w�x5f��U/��
���LLʘV��q,tVAk�k�q�p��Pol���C��[)#rJ���
-E糎L�Z쐧�v&
oX%
E5�^�k�6Y�1
\ƍKuh�`6�8o]?
-x����T�h�
-�w�vL�F�,
���8�.a�:�r���zG�]X`��0�i	�����V䲳�q��1�wjf�ѓ.�}�*��Y
3�ƈ�G
�
�ѵP�G�M���Ss7�¸愘�ol�*/)�k������[U1b|��Ŷ���M{���Zu�
	vW�x��'���g�ղ/5E��zOs(PXkҜ��
{���W5.��ج�n_�.�0꫊�!��G�]E	iT��ͷ���1�����L�.�_
�9�s��5(�'CxS{���MwZ�,�c����r�VH~0��0&� ��1CP��A�Ȇ:%:�u����flsY]�Z��� ���-�Z�Ɣ��I�LT���%�s�ˡ�ejP���RՃ�?�`��0=��/�Ǣ��4+��Y��k�n��B�~.�WE��<q���W+�T�Ĕ���
W�F�����YCN_�Zz�&�����4��tKu�^���\pz8T`�v-�S)��g~.��ln�-�YΉ̺�o����>�����i��D��u��e�2�m�u:�}�
��z�rε��ܪ�D�N%D��D
-g���-<w�r�)
�y��7sb���J�]�

�yhd�%���2zgZ˔p^�N{톝� 5�
;_%Nv,�~b������j8�3+2��[�Ы}z�*��I%�����̾kD�y����&�ms���0w�f^��%�0�
i��V8�U�z��B�;fh}�Z�B�$�!��ϲ�s��/�����ׅh��x��Rt�sF*A#��c�j�U���s2 qe��scJy_���|@�Y���rj�����i��u�����3������^]@<����,W!��H��
���D��������O�結�b���z��:�5�W�K�A��@Yo���,N��9N�]��j`1�[7N'%���i�Y ��85�O����	�Iq:�����
����醶�����u�y��(L����D
�O�hG<�u�$��c'А]%7�%P
C(߭|�%FU olp�$R� �1 .$��c�[e��
�l�e�@�;���2F���/�\��֞ P;M�r�Ԇ��y �p/$���MO��n8=�*�:�.	4�� �p&	d�	4���
 [...]
-����s��/x�0C"� r�HoYO�M�L�~��t����i���1��b���8+eX�f

N���Rm��
c	\�T�w�X��e���n�w�s�?�wsx����ш�U��t� 5��e�Z��x�-��	��6�3���y��x~� 7� �
� 
-N��)οO#�s� (�J�v,	|����y�GƝZ�y�4m�4��|��
�!�e���H�w�lm��u���ws���	)���	ھ	z,�
V�k��+R�}��]��
�2	�*�ͮ:	r���J/�q�Ln��n�������髸���I
-�`4N�	!��&V����s�
�q�7�W	M�'C�,�'hH{�dL~���OPz�}�&L`A���#�������}���(�D3g��:�D�y��YY2�Ȍ����+�5V��v�!3�Bw?<����B�@�ܿ���?���Ǻ�l��m/;�9��вׇ~����\�..Ec���$3�KIf���e�;�9��|�
ݷ��cB�͐
��]pP��Ž;��O��Ņ�EU���a�F�R<�O�X>62�N���^���]�*��]�X�-y�]'
ڕ���e�� ��>
���@o�J�1�T��
9����N/��zH�uu~~0u�u���u�l*m��g��l�D;LZW3x;��I�r/
O��2�;L̓|�=�����եSt�w.�-�u:�Xə�������/�=�	�[�L��
cU@���o�r�͓���]�w��

-J~s�?����V�
�X��~.A����[��P6����/k�&��ŪV1��]���Y|�~.Z��2gH�4�v�/�
����/���
?��S��{�H��zcKIf��&�-}�m�J��e�9jͭ��D�ƪ��n�7�G$/{
��[5��6%�L�nň�~��[��q"���p0Kǝ�u��U�;���>�sC��A%�ĥ�:�aa2�[{k�Á�[5���
P�Q.�T���
I1i$ٜ�J�ۢ�^�*�|
�v���0h�������(���l�Y��>�NrHLr*�悯�M�; ��=�tǹF�ک�_&�����2��\�m�&ۣL
�5v�Y������ZƘ EY"A��m��v =ɽԹm7,{��
��E��|e5^�|~��|Ƨ�l��N9��=%��$[���	h�rhM��:vk�iOK�oC��a$�mȒ�8g����
O��`�a����٭��|7�/lZ��-'x�P�>%2���R�T�Z�\��J!�w*�׷~}�t^��\�ʻ��M�ީD����:df\����1[�?r��a1۱ַ�n���,����\P���٣U��.54�=�3�K�G�����
pi6
-	����I�^��;�n��\
� p&�ϲ|i3�Q����Ũ�LU���y�脻�1i���N�6ZޏEk���&��a��ȃ�90FX֟������*���R{^gg|���x�����"�"��B1��u1VC�~բ(=����S���>+%�_��I�L/Z�����Y#;�����y8�~�t��-���(�Af`�١�Am��
R۽8{��):z��<hˠXЖ�l��k�1�i�^C�:������tH]��+Dђ-\*�}z�f�{��W�
��z�3����͝n�}�2taӟ��|m�����
v����V@�̰���g(���{��V��[A���d�Ut��(zv$*z
֕@�T%`?�T�Η�/@�0�I�������l�>�m�a�ףm����ex.���i��ܐ
�&�q�NSZX`�
/��u��?Q�uY����gu�NU4\Bi� %
����
�]sYLA.f�j<`�uo�^�+�MW� ����dN�"�*�k@"Ё�?����<���-}��W�u2է��g�3f��.h/�.YA��/w3 +�S�k�
����&[�Tu�**�����6
Qz�w���M�
67v���鸪�v^Ӿ"Q;M��,����Z�[x
���
	��˒y����@�����O���d
�n6��)l��
�oV��PHw��
�N_�-�#�x���k��K�׭t�z�mϲm�
k;Ol�Żؾش�$H�f��:D�=�[�dI�&�[�|�d��*��z3�5i������Y�)�=��<;nB��=$F�esf5�W�g1��*H�6˵���R)��n����|��v�WK�*[�[[�!�r��ھ~������&U�}K-9�E�DZ"&��/�\�7yO��B��S�K_���
)\��av�|��n�ݹ�Hc��9lRԀ~�@��
'�г��X���L��3�.�ٞ;�X�Ű�� �����r���m�3O�3g��g�O�3W�7а͟�@�����y���?u��
��<.��������rͽ-OW����0�P#�wD�z�0E%��P&������E�����Fo-�����Gp���*5�-���L�MJƽ�Ɲ=��;�J�k�m��~.�����l;$��{s9��B��..��h/
)ܚW��0��k�_��gת��ﰺbn6B�Yw4	B2f[ⷮ�{�+�d�GެV

y��L�b�fڧ�f�:
4K��+�����Bw��C/�@l
-�����/��F �G�?WN
}�v���k�f�	�Bv�A�+#aݩ�Z٩V�G��%2=������X#s���'�U.;
u�0<(�.�P�'�vA(�]�b(�~֩|dn���T",�&�{�C���Hꊧr֜��vt˭d3���B\
~��Γ�N�Gť�
8��ų��H�4��s	iy�NF
-!Q;�an)>,;"7	
���҈i��Y��-[������!���Ѹ��1<���p]+����X'�f�99�ޘ�|�ѹr�����P4����8�0
-��v�^�^�R�~0e�ɶ�X�Q�X0#��I3�!?�ܫW��dHYh.R�u����������d%�/�z�M�c!_���f���Y��N��d�U~���*�
�����+�J��X�W�9SI��җ�іo���>��^נ}e$��2=�-�P2��96�٨m���yIku����+)B8���	m6�J�S
-�Qo.��m�mu^>�Ȅ�U�L�U2;�&��EJlK4I�
���`|YS�\�XX�����5���8��
�`��[��Se4
M:+�j	�6�c�ڥ��E!���~�iPG�Vw�zR��^�=��^,���v
b7�ʇ
�˵��c��|�*U�L�h]��b��̋
�+<N
��X���X��ߩ_�U
�N���ϯ�X�7SF��t$5
	���%^��%�
�u��i�ZeuV]z�me3wϕ\��$��
*�
^�>��胑�g���c�U�\2�ss��!'�]�8��|�.��{{|;ޔp��V�˗M
�7��/&�9w�*��鷵�\	��ב���o�hn��B��XM#��dWE�(>� 1J.�R
ޯ�Tf�/0�������-'ֆQveO>�ֵ1<�Y�2z+��Ӛ��Jv8B�A6 at M}��r�F«�!�% ���a���ր���{�v�w�2�reؔ-Zk�/R��b�)��	]��[��ȶ��KJ/'V#+��!�0��	��;-

ft�%j*����;C���~�`��t�
89��V�8�i�!��J��{���1u_+u8~��է���4j�TV�;.�&v<���U�s���r�m�d3Me�CeJ�a��h=;��(�0Si� �At 

0� �)ē�w�v�X�,���X}��?h���g�꟧m��/�B�	��P9&�@�����8��8-��s\������G�]��w񇭆���W ���\�f*
������G�o��|Vx��r���}a��|�_���H���	�\}��}��w���}Dv�̓h�8��q�!b���A�"K?���=@}�h��ʀ6	�� %�\KC��ş8g��c@��?��=�����E�/�/2��^��j��"�$.M`�P�B�u�$p1a��r
&��2�+���1�w�7��'�!��q9�� ;.N'�w2��
pZĩC
^
�n� ,��6e-���^,�^��߀��Ϟ�R�������%�N�[�@gW��;�:���n�X�	\���.�Iy�Mɻ[�p���L'��oD�:�����8�	D���[�+ �H���
�o|��_y�h<�r��oC�� :
���~y� ��0�O$Aj4Ad���r�w�yC}��$�	|p�	<~
�q�9��x��R��*`5�^�֐e�k�{}���lŇ^�=��z�
���=�����aH�����]�����_1
UJ�������;�-�m��%zr��;+Av�2AT�� ��j��_�ޛ���n�K�@��q���D>?�.���0f��o��c$���d\/�9Ngoj(�N�6/r�28q�:���FW堩y�~���	���1p��2��cj	V
	?�=��	�(�r��^%
���F
��]|P(��,���,�y�ڿ�%���nȔ��+a��f���ek�ع
�c��v��W�����yd����H�f
i{
l�����.�� �!�`�w.���O�N���d0Ջe��_��΍��
-�{�
���
3��"�K~
7��+�O�=�
�S�

��:PV�Γ����!-WٮqB�(�"���~9ɫs͑V[j/���������SP�bܣ 8��d��wz�$��Ҟ��@
��۸-���_��s9,�{山�F��i��O���
�Aeז��v
�Z�,:P7j�5ׇ��_�Q�t]t� jA�y�
-��l���38�
-���e�=z��FJ�
(L:M0��鿱$#Y��_��e��4���ڱu�
[�s�#:�y9Y�:��q��Z�M��K�.gW�F�X��-z���^郬ν�h4����L8T�i�}��2T=
}�^�
��~u�95�՜��"���A��
I2�*�d��j��%�]��@�
N�qU�q��X�t ��ý�`�����7K[Y�=��~MKgs��g��
IQ�l𢷿�W,���72g8
��!�	)� �
�
g���is�-5�cf�	z}��5X<�!���{[M�[wQyC���lՋ��kX]�'�h�,H��-j�v*��g_������=m��s
w+N�6'd8��Ni:��!����
�D�o����Y���Z���M���f
Ek���n�I��
��T�+���1��O��s;NZF p��ƅ��F��������1қv���_`�{>V��͇���~{�_�=b'�eކ*p���.yK�5s{+�f��xu�"�%��
ΕGs`��b-�ƭ1���?u�L���3��5w=�X�̶��~�A{��"\��
���Zu�(9~�cW�חx˹�_�d�[�Ƭ�=؂ָ��R9��
3�r\�r15�s�q�[�Q>��c�.��
�٧3��}7��kۨ�\�@�"��#(J� ?\*�����ˁ3��>���:�ޯ�g��d�F:G���4_
-�
��;�8��qm<��9ܭNG
�Z���d^4,��q/��~��}�e
-=V�������et���_H
��/
.
˿H������'�c��Ȭrܯ��n[�ћ�yz��.�	�mh����mΫ���C�Ik�{�j#�im��5���
��޸��k?:���{���g?�OQF�&E��۹�ݝ5�6��}R�R�~I�ٙV��4#(��V��ϐ����
vyLݬo�g�|M����������û�:�
�2�����l�Rvocx�G��쑾A~�u/v�����C[e�T�B����)�X;wA*+z2��|dB��dM�Z`�,��&!��Z�I�x|��{�^�y� �m�9��͊�7���禳l
=�A��6�yh�1�%�U�RX{8�L�A��
�k�͆�
�8s]����g�����D>ye�{�5)
�Eɮ&c�| o����25ɮ���HY
-����?�f8�.��4r��v1ݭ-*�^|��l�g|���}�d�	���v�g�,M�և�.�I}v��������Se��Di����$W֯�� �H�U���o'd�o���j�����=����A���OD;~ϋ
��*�"ɬh�5&��G��V�
v+Zz��
B^L�T"tJ�	1 �W����ƆW&"�'ѧ�\��֗���eo�P9v�y�>���`��hm�?���a�+�h|dZ]�6Zݖ
��"Sl�m�"��C�bj�~0q�3
���'�j��#@n�a}����Lدg9���j{�
���i�����/0PDn�O�}j6t���@2��3��
-���H��~�k��v��^D,�V�*g��aB�}��~����,��]��,SԵXvg>���K/��C;���u�h7��w&ˍO�ҹ�H�3��؁9`io�(�õ���$1
_DŽ�C�M�&�b�&J')���|?��C�[J�>�k5�C�j�a�c��Ga�F��څ$��H�̆d����|����/BAz�>)�7�
-3+�N���v)͟���mlV�{��2�/<� K�a��U���G����ܘJ5ɍq�#طN�N���ZBO�}~�i�T��Ի	3L:�6�EAiN;�+��Ls�W�M?ɗ�	�&��~�?��\���s���q5)	�<���=s�YN�
�Y��74�Y_��@ъZ:V	���m�{t�;��3h�ݙ��b��r��J??�=n4i��f��d�r��lՄ�)
K4��J�Ưo���bT7*��,��>^�_�����9_����S=�g�ڋ�"��h�ݜ!����*O�J����̤җ�{�Y�c[�O1�/�\
y�Ԯs��ͳL��ex�:l���GKC6�]}��`�'K\d�3$.�#�4��Xl�|�A�h�A���5N]V͒z��3��K}ҕ��+�Y+��~+�
��'P�dqEuM���}`�`¥����.~�"��b�Fe>V����r���e�Ύ�U��1Y��Uc�u�a��|�Ԣ�=�E�~Z�3W}=�l�����F������קrΞUnm'0�,,�v����ni�!��V�+�Ŷ�����i�ʹ�{��Rʳ��
i��>��;��i~,��
F�z�Ӫ�z�_{�U���*O�iBwde�Y�+ssW�E����!:#2\�Œ[����_��\[�+:5|�
Fځ�@�pS�v6]txr�d䝡�3cR�Gd�����i���޸����OX��H�:C��*ll�J����k��n[��w��UJ��4��J���^�]3X�̝��9��@��_��vr� ��
��l����}K�^;�=d��"�)�)IV�Rc�s�ؼ�c~B�(��]|��s�\ʓA�t�%c|���L�X4�r��o�
U����8��J�%#��MEn��_1��!��'$�~|�/?؟�;�t��,��s=�t����o�d�A�p/$+6q/G7�)S��j�r9�6
-�j
o��Q
�

�k:y/�Z�>��k��Gv�%Sp��p��x�ə���e4�w��F;�*v*�X�8e�>3G�~�A~1�du��
~}O��5b���"��<�L0�I��W:�Q2H8_���B�[�ĜX���ըd�[��\�w���4�N��3:��n�'Z���*�ʰc2<?�'Z �
�~g�j�9�
�<��YG�ns�NX�\��9�Օ�#�񵸠SD�l�z������З
-�{�����
;-`��Q
�g�m�*κ0S�����du
poO����H���>�7��w��=6��R@�����������V:ƀsg�F
7�v���fYw�j�en�Y,��2�M��|H��u����0;�y���� �5@@R
�ٔ�%�
 oD�= ����>h+�j+��ǂG�ǂ��/┟?�t{����|Ʃ����zv
'�1���d�"�Ĥ�8�
5Nd
�W��9NZ��&9��X�(�  ��7���:�I������)���F�?L��oR�%P&Th
�����c�h�h�!p"�d
>N�'-Nn$8�m���;|���Q�p)�I�Ul0nnz�<�<�I�I �|�<3�� ��iğb���0��I�C<� ^	�#/m��)��6�o/�V�1r�5�4p�ğn�$�c&��X���8H�G� ���'��s��Vp<#3����4���Y��xm����?�jQ#�G=��Y85�a���W�8� �w>yFJq���qJ^�qJч8-Y�)ݡ8-���*`ڌS:i�i����\Ĉ�;�3
~u���9��6�N>�����~\9�z
S���b$�0�����@�K`��%Ы/$���H��	Tc�	��^(�����b������ҫ��� [...]
��zⅵ6JrI������{��=6I��2���(4_���}<�uO�O�&������Y�����ñ���
-�@�����c���]���^s'�ki��&�m&P6���&+�|�&�+-©U\؂ZXP���3D�ŗO�/	�]����D����A�w�1�L-��J+���/��C�v)�8w�L�
�.��~�7ƻE�:߮[����/��4�\�Q^���ܪb����g���RY�1��`s7�g�%�L�Oi����/�F�?xʇD�����%A�Q��m8�Q��{(�nY�]�f���s�U���i�����#��Ys��������.|m�����"�!��g.sw�y�>�<Z��t���S4��+�
ow�
��-���3�w��gvrϜ�/�q�7��e<>H�_���@�{�)���x)G�9�
�򹴽nK��hC��~.
-�R$𵑏k�P�r����ι�h�ZR}<������A��g���W8�O�_�"�E��N5P�ɨ����PZ���9�ώ>�:>��yl��A��
ݠ_���
	���,��wdr?إTy,����
�<݋��jshl�+
������9T����&�
-�P<�<�F�;qLTXLBV؏�$}7
6��]'3J
��!�-ky��?��y�7S^-2� �_��v��â%��S���%Ae(/��h�KpƗ��Yv���d�����`�U�'�
Vνgm�%��L+^���΍��Ƀ|k�W�bڠqFi<Y�ĺw���(�94
�maX\����i=�:n�
�~�F=#_�~�y|��|�� FJ��O�G���}�El�;���"���d�GHkSVN�Uch���of��	�²
��G!�4���]y�=�4i�&ȞՅ2���3�6<T���\�/�
��z
��)���^�I�1�r�'T���/
ҧ� ���R�u�^�S�������5{wpM��eG������F�-�Rݚe���_�gw���d���\qR-����X0��
{�|0��aƢ?V���v�P��=H�;B��`���Y��z�k0��?_u�e_��_u���M �aos\q����
n��f�������[0q�ud�Z��F�)Q�rtJ���
Y�m�HF�O*��
!O��Zk۷��~�?�.l�5���ۙʽ�
���1��|y�Z�<���ـ����P<�n{h��t��zx#�E왃�ʸ���l��9VǓWn�
C��}$IՏ���L��<ݟ<Q��]]}v8�қ��U���\Ѫ���/ZQ�b\�n�N7��]w��8whɗw�����/	���b�y8���b��f�|ģ�<�@�:ͫ
ս�>����
ǐ[X��H�l
��{X��a��b�i�
=��mճ��VV5%�XK>U�i�Z��R��a�Y裠ۍ�v\9��q5��`�F$��w�r�ٙxd�X6�
�@xг
�h�"�N����yb���z"����u-�	�K0������{�>���sU�
cZ�ˬ ��l�{M>�Fo��~6����t[HE1?��ȱ���r�b�"�|�s��ڙHL���,=G�K����
V���
����hZ�V�n�l�c�$9k� �Oh����A�ܵ7�fb��<c�
�����^`�
�ޖh���Ze�":ܜZ�ڜri�����Bު
e�zy
-�d��J���������Р�V�ߧK&�YWwlo��]P~0k�?����v��
�c��赜�m��C�L�/6׽ϳ�4a�T��fB[�N�ɃVV֦BA
|�ݼ��<S��Q��c�
&6�p��q���K�
�⾀�K�ٺ�����.�K�L
ks�D�n`/?yX�M�A�7���Z�=-_p��ik\�:�۾�b6�Ў�\
-�ycY;Wp���#�f�'�愫��-;M
L�BrL���L�v�0Ey1^����*��ml��/W�����a�Ŋ�
��M-���L
��qϰ��'N 1�t���AY���5�__t�7��$�W�^0���n�2-�*��5x��	\]'���F�9�Vs��W޽	e���@��yM�e>�A����4��r����(��S ��v̟�
�/�l�V�-��z
�b0����$�e%�D+���N���t%n����A$��n�WM�kx��v�fX��i
-# �NkFu���EO�T�C���Te="�a
dd>(�I%��&@��f5f����o��pd�cq��̳q�
v�J������ڬ���Ƶ����du����
���c��B���"�L�\��
�*��x*g5�hqN�͂���~���BՇ!4��D#��A�T��+ 7�Ŷ���M�]�7��|�'g�O��^j�.��(ې�l��Q�7C
g_��2���$s��h�m.�ޚ^k����O*
`��
�A3&�)ѩ=�
��Q�lUu���޵*���J2���\+���Tx��?��r~�Hgjw��x��]�^�N�d�Vg
f)�<!�8�e�u��+�
y
�*d���I"c�Ce5n��U}4��L6�ZS�A�uؖ+i9e+-�Ӊ�c9%2���|J�ͧ>*˭���}���^�?Xi�P�_�;��֫w�Ÿ�Ȼ�$���ԕ��H���Zea�`��S�s�5V�,\��&Hm�
�ꙥiՓ\:
0P�򎵃r~<J���z%�Z<B�8����m�9��/XR~X���]�!؇��a
���~�W�Mpé(S���N��/���1�+�@�V3,'^+T@<�u[.�q׍K��  [...]
4.�Vg]�0��C��X�^������F͢Ue�;���Qax�#�����eCo�~��T��b
��?����ee:h�����y�#0J��n�L��h�\���I���}c��'�q��
�q�)H��׭z�v(�6�8�F�mp�2T!��7 .ڻ�,o��^t
�1T��w ~{�Kf$ĥ�
�@|���Ő\�
=?��]v�k��J�����'�^�
-�P:�{�
R�4��7v��t�b$��8�<�s�o���	���&�7�m���c�'��yt�[�Ύҕ�w����L�F
�s�5 N~�,�p�hw�ƶ/����q$��牮"�s�DDQ.�_8��Z1Vn��p$���(u��g����?!����Y[��G��h����`�NA���uR�x�2 ������C�y0�8�� P�ǟ1��?�m'��1�g�k
�
I
�����q�Q �Hg18� �
`>�8�H��M�ؓq�-����r}
�o��R���Һ�T�C���
�Za���w�|
�d�?��F�8t�A�f
��.`:N�8�p[��
8�@��8��
-��e-��@p��g%���N������	�N(CP
�M�ۧ8�� Э5%P���6���C�)��8�LA�[�'���Q�j���{.�� l@��~�q�5b@,�7�
�� � �Io�{/jA��^���
��npC�*{����6q��"�=�ށ/�-�V{�}
��g�f�O��ş�/������RU��}}��F��H���E1`������g�o��
c����N
-,fM��w��%��e8^������{�����w%�H����%׀�x"�D��sW ��kDw�8�oW���%4w�m�������E
-��>t�am�/E���M뿵��O>�E=���a��W��'��B�,�\���bn�{�dt~U���cs�g����
-���eK��у��<;7������9O��0"o�'*.��)�¢_��)p���\��8n��ߊ�\�~��|���i� �G㩑���݄{
��|?�nٻ��
|��¬���u�"D�q����2��ډ�31?�#��'�*̏��f�W
�-Ԋz�{1�k��[�m�۔���ŷ�����ܼ�KsN>Hs�N��[�d�4�1�
�Ϧ2m��M{x�
 ~��)sv�9Z��k�թ�*G^�
�V��/q#���^6��^����[F%f��n R�yS�V�5{�=�C{p��K������o2��Y��՜ߝ]�/W�i^��i~
���2�_a��F�[%H����$[��vg�{��d�;�Ftvgڞ����vL^����]P
�
M�^�J�_Xs
���
�`^wo������$��:f8�:�lx�?�f�/��}�G�A�x��SZ��1㘷� #���A
-O
�y�/�8�Yޱ�%��
�@k��VV��^b��"e���Y^7����n?}�WƸ�8�?(9��ҳ?��`���6�q3�9�
=����B�l�ӗ����wv������=O�ٻGj~��o�R`!㠖;��f��`
�o�Z���%�^����s�p��ׄc�\�4W��xkX��ֵJ�Khn�߿5�rX�n|�8
RB�Ж�w��H��y�ӗ�b	Y��
_z�
-BW�����k���G��!&�~���.7"�p�U��/�ӽ���
-�5OjU\�m�,]a��]��
sFT�d�#CW����i�
q�XzBi�Ns�
g]Mu�ݽ
-"ݓ�N�Y������/�?����d��ߖq׎��|/+�.ON�`sK�M
�3����WVk�v�{���
��I.,[c�ft�V�[�s��h�P�,�s}�����|
VLգ��
-���.����\
#I�l 5��Q�Li/F-�>���서o��k���ś��Ĥ�Ȼ��g6��k쟝	���&�|��`O��m���nن��~;<��38��j�?�ћ�"��)��;F���L��%ѕZ����({�X������,�?7./s�/�/�/����ᅏ
�򢰤-�����оZ�qwY�+`�vi�1�9ָ
4CEk}��N
�+��.8��ZV�%В�+0����H<{Z�'I�w�7F at 0�&��1y�[1�����f�e�%�.��͗����q�Ś�Z�خk	��&mʍ�<����]�����ڙ��X֖z����^]G���u���#�$��Yn)�-
��� :��>�|���|�Η<�9�Y��JKz_m�L��7_�_�?� P;_�4���
X���=�@��6��T��f6�6z�y��xQX䂢�҅�Z�9�I���ST@�ν��ך3{��s��q��aK�Xa���M�����N��R�'ԛ^��E�1�گ��������C\C�å8+�B� [...]
-:�[6
���:I7]� �\NU7ڑ�"�Cf�&��]%��"��&�������ߍ����Q(^�]�:V�+?���㖲+�/;�JO��2'�R_����,B#Y�<	[x��-�E�h6^m\U?l�Ogy2Soc
�U��N��O�����'�?6�{=g"4�qQ��qi�u��i2r�������z�6����.{��ᳫ���i�y�u�=w���TQf�e[n#\��
�`\JK
h^|��=�P������~�Rz��t��wH������Y��W����p��ͧ^�i�� W��ͣ��W��Iu���W���0��y��ٵ*o3�F/�[4�F^�SfΤ()�!
,̧��
��˻s��h[]S}C'ꂔ����!�((N��j��1��9.�^Ig4cv��E�g��\�F�����e5�5�
�n����_.>Ƭo
�;ݳ�"
�jxc
;bNu���N�E�
�|�w�
X#�]g"1�i��!��M������e�7��|�Z�(��ڸt�u��q����������^�r�v4r'x��.�]�����/�����u�yFs%;%�$��r?�f��rh:���b9�C�#�7-���Wu
-Ñ=� �`���#ބ��|"�x�J�F�㨍A����)�
����d�������$�otb¨��0JI�\���8�u���Xs��B��גd
�Cv�1��tݥ�̋6E�e�Rj��S�-v��@f��deq�k�6Lz��
l;:.�3v��^�M,�S���D��a,@��x/��y�
ȳ���I
�c|9(�)gP����
�����������/��P��jB�T֜��*�n2q
��J/M�L&DT�T�����<��
-o|��*���=T�CdI~.�=zf,
x�Ұ`��A�
��L,J�=v�
��5<s�=��z��N���Z��g��ߛG����ցbz���y�
������I�B���ݏ�xӘްyO�a�ǥ���6���)�`5E�
�Z¹s��������u�O��nd��.��Μxڝ>8�C���@��N搞�mH;�&�y���R�t��h,���\��Q/-�3q�6G=h�
[�1�Uި�����j�
O�� �{��T>�W'�?�J�
�^�C���bv��^֫3@/E!
-�����m�|�Z��;�^�Z<�[��_6�nOo����]��[V����(��}�͋qv�p�q��M�Cݤ�ݎ) ��8��є�
z=���:���A��.�m��
mܶ�v����_:���Mi�4�˾�����FͰ����u>���=*ԛCV����V;m�
������W
����d����l�\L�*{O�r;�ǔ�RF������;+�c
�T������y�Yo9b�v
��Ҩ��Ή����F�.�[
T�S�y��*��v+�`�i�얭m�+[�w�Ô-��ث���un�/�
N1'����C��ٓf:I�O��Gt�>M$���~��J��T�6
;���`[A�nP�
K�����"%��"e�����wUc�jy	d�
-d��3X�X[S���
aT�Z5nR�Y8��A�������,��*|K鿅orR�Q
��.�9�j�܄ hTB��j��j�m�m��)n�5X�^a��E����nT��[@jx:�.`��
� ������0o ��2 �D| �0YD*�\���B=t���u��M�{�wr���J�{�l�R6�a���Z
�ɩ�)�=��]�u�l�W�Zg��=f����@�T@��&�b
-��y��`�y��Zз=��aXw� �g���J�
��/Ĥ�P��̦��i���C�O����J��:@]�D�
-�un�`dE`

s��v �����`����*
1�X� l�*ذZ0~10�H������: �&��wy��we���sU1&{
-v~��ۃ-a���t�Ü��!4
��j�fkC��ڭZ���:��@p�_��@��
@�����?J��RƬ�a@�Tm���l��⻬�������Y����K!����M�
�I�
�J�5�L�7h$	�0�d��2N�$!��Kl�I2iL2D!�=��{d���3����"��2�fF4LjHe��_KO�'����*�~_��l߫{�j�:[�ɻ@IJ5�,��"�Zg��,�f!Ckg��
��������d�𢡄^�t�dᵲ��ҵ
��X��8�v���/
��Q����ˇF���H>Ւ�|*�,���w
,�jIz�-�hѬ���6I��%�6}g����S�:��4C�iԊ�1��Ө�gb���$�x|(�^��}���`ϊ�X<B]?�D�
u�?ݏ������C�Q�^F�N>��Hޡ4�+�w�^�]7ۏ$��B�vN�o=��@��Q�����2�<�K�"��	f||����Uj��'#��Gx�G�a4�m(�o�b,]����B߇˲�;^�����/?�ǿ$�sw�QX&��]K>�E1
�eeM��$owpL�񕼛�b�.���7���W��e�,1���T4�3�.q���Cu#����z���/������2D�M�DZ�qW����'847� [...]
�d=��(4������A^߯6>�:��Й
o��
��x̬
�˾l"�O��<=�n�rI��������"�:�S���
��:�?_*���(R����ݫ8���6��^�#mw
V��F
p3�_�uՂ$��+��i:�Z�-������_~7�����Js����z�y�SWV��O&��~H
k^Qг�5{G�]��{��m��$ﭽ~���J���RC-�z��N׵12��C~��ͩbz���=���\��Jݞ��x�g��vN�mk���W�(���p����4��櫎��
&��\�*I_�M�>
j]:���u�UP,���Y���]x{�\��ފ����:+݅'��ܰ�����=�ٖ�oܷ)7n�榖�ʄ @�X1FkfY�|b�_
�#���涾�w�V[��,�9����Э���y��vغ�n�i�񏇡�uG��z��!�'���
-÷MP�5
�kf�c]��
-�2�r���!��B?WWWX��:�
�8�@zki��f�
(n�/��
-��~���o�i�*�nȜ��jL2��QB��b�Ү�������x�$梃C�e������q���q���Ѿ���
�./���fa?�b�XM�t���T�Ag�/祬�qG�WN�F=C��5��B�;���i
�8�6P�.��,���5ْ�5�>�����!�^q�����3l��<cr��|�<
�J?�1{F�p�|.P���;�Ki�C.M�/}��︼M
�\�5���	W<%��(�DE����(�DS�my�E����4��xw�����v�G��D
�y2o��±��|�lUrHg)X3B�5EA�o��0O��Ν�,T�#qQ6��K��z�\/BeI��b��p5QR�}x���9���~fb�<��+�*
n�ʫ_�/��߻	/zs����a>�sA0*�}e�
��;ٲ�1�a��7�ض��_/d��Uv����:�,�i�kyV�
$�^E%��
-7�+��W�a��f�W�y�9�r`�|�XҘlIS�v.S�)r��~�}$1�j%��yLD�2��Ev�ޘM�q���
8D�i�a��zK㼙���5)/Fs�?/L�Se[[���l뒸�Vb���b5�xc�fݰ��ϳS��z���0�	��Ce���������Z)S�wC��
"�����N���e4���ڛ�Z��h9Z�L4�K�bkپ���=�<�T�	)�
�K� �Du�S��Y? �$j뙍�C��]/\A�^lI9�*T���ܣ�0!��.N�4琋�q!|�#–�xI_Drq,_�?��.��ʩ5|(Apf(��h���C�?
�����
�b��rQ�phHR��oo��1��w��s�ű���
�rK?1��p�� ��$Z,OUB�~@�4���	g�_�R?6fB�=b�
W�"iv���ᶌ֡Υ;;����mt�K�b4��e�FrSk&�U
���{�)m&�q]�8�"�l�@�L-�<��
v.S�S�I�U*Lb��$��L����P���
_��&��k�
J��e
6Y~<��_f��חZR_����[��8ل�gn֘�h�#7o�Y�C��ԟ���C���16(�i�;�EZZzv��nޞ�ן�ԝ�q?�w�}	?D�q���6���Z�
�F
q��nT�|j���A�ja�q�!?b?7�a�q���rW�?|�[~o [...]
-���U�����~�&�az��!��!p�:W�.�$`��%����MvN���S�>8�9ŋ�eJˋҜ.\�9��1_��x�f��bD�R)��s�=A"��x���Jm
�pAG�r�b�=��k������B��}
�Rzf�V<�rq ^��ا�[��[v�
��=�Z�{
 ��]w�Q����?�_�],lϬ���C
��ef5Z���rJw��
��NsV��pԊ�S�m���w]h�
�%
A0����+
Wk[�߮3����>3��z��G��K��s�u���}�
e҂;�H`:
sLw:2���;����{#�Y��		.����Ti5g��+W�c)J�d^���~�����M gc��p҇�C0?��~��!�o��,����x�}��=��߹��S�_RH��z;�i�6:-ȭw�eϟ|���2Ӳ�e7:�:�ג��7d=�Ofs�9���R�6p�
U��缉5d\GPu���|��wB��F�b��
�s����|�t�L�=�4��
�N���6�����Р5v�{��R��L�?`#���}�
�O�F��F�
O�yeR�q���>��
Y��c ���xʻ�{�i��*��r����)K���l�����ۣ�`���A6���c�Ğ�ƶ^̓i5��
-��'Y�˰To�L�v�����zW/f�S�~��#�$z����W�������'�E�dX�l�����j�M������'.�ۄ��������3G9�荞�R���J"m�l9
V���+���x9��&�n�&u���J5-�o|�,9�m�4�Tǥ<82>N�;�/ERm����#� o/� ,��E�L��9-�����NL�o+=Q�t���w�T����`�z
�
-]pHu
���;��MqӨ]�vunjz�#��b�[�ŇSh0�:�5�y�@=3`�m at PxN-�\w'��}Vy Z#l��� h`�h;`p9A��]���X���b�n.UY���V$���45;��XT�T0�t�}��΃�.��_yn.v�X~?�ds�E�t��8ZL/��)8�ps��3t� p�\ੋ���xy^�F p@� �2� �� 8�f_�e%�`�!ۗ�F�֠$�u��
-�	���KZC�<���
��M�\;����*�HQ�]8�{Vn�DK v�����\o
 5� �� \3��';���(�V
@G�
-@��=#��|� ��� �k �ω j� ]�?N0���]��託��a�G���
���m�z��J�c9� [p��o��� ��v D
� rჿ��h�
�. *����y ��:�5gC �
�
v&0�Kg`�@�SW�ou�&�FC`�v��+�
���=�><.�WPw�aK��M�::��H�:��xp�
D-�+��B2�S�*�}��-�`z�����V10�)�b�ٶ��$p�?���N��T�h��,̊�O�&�Pv��o�51��(�o9Ily�$� d
�$�6�{�з`����Jhg��
2�k�5N�i%�1��ζ5��r�R���D����j�U��r�G��w�ғw��&����drY�0�a*Y���z��X;g1�@������J�1�!�����ӂ�S�&�52N�T)$���V�ū�u�EJ��}�"���8���g�n�'�{�f���E

-Y�zLcq�O��V&�ϸĿu�
��W��jT
\(�9������,�_~�{����
���I�Z�#
 �{Y���թ{��j��꽹)�xw묣��I�-�o=y��� ��Go�E�a��=HI�^�s���|�Ԍ?���u}mv�{��=$�~�U�.$�q;�\� ���6���k�^/O.��m��V�:cgc
��+3�k3��$�t�j�bk�I�����,;q��dXRv����{���[����k��s���Kw�9n�:�t�Z��sM��LO��q�Q]�����Q>�9�)~
��^���O�7
^jv/���p6;.�a�R�&��H>�~�|dUȢ�M��ʢ��B7?�B֬x��޳�ۻ��N��R�_����lO`4�)��������CT��DLx��b�.���
���۸r�����0k�`����g>WƸ���밿$����g$���.6(�=V�,x[J>�RyUr;�v����,)��+"�q7l���K��,]w�]#���^~k�j�N�v0f�A����
�_��&;��������&n��p�{-[�V7!$V�$�9�(`
�;q�_���%���f�Gk.^w�M<�أ]l����
G$�-�=Ύ�Sx̶��[
��mJ�f�f4���L��*\�C��^N��J��ꎾ��`U���+�Vmۆғ
,�U�TGf)�2K�P������^ܓ�"ܗ�څ�C抆7$����q�����+��R	�n���ʕ��ltDBdž��8o5��Y^��Ɲ�h�^���bX�&��enjŁYZ�rע�eM1��FSw?:�
��A�:<��d8��J��i.א�\Qo0<'��2�����o?�~n���tS&�qHc���cz��+�l���47q�-w��ad���h� ��a����6_��Y'
���pn���
[zwu�"!�o\�JQ�H9���B�w4��4��G��gg��L�����-���z�r~������
��,_�v@�!���L.͌� PueY���S��|5\ H�<���s�9u�5�H�2
��
�wV�ۺ�A<>u���q�	A�����nFHs[˸=����p�����5��U���?N*0{�/�Lf�z/�^C��'��Myj�d%an
�Bu�T
{�W�&�����r5T_�p
-��d��
Am�H�.Q
-�Ai0{-N�
-2(�n�1g���?`���/�z�\��c��l��j�Л����t>��˽�
��?5���u�9����
3JyK2{�5��^-1��{A�d����K���*�P�q��
q������{�X�_�M�2d�u�2��}A�H�_���^9��9�sZY6��]�U2H*�&9����=�j��,���2�ƞY�Y6�T*,
N�D��
'v��"�ۤ��*���
p�3y��U��z�"ςQ�`���w|��k�iREM(��T+g��`T�!_��w�ˣ[ت'^Ƙ-��"ލ�@�J�U��~��}�:.�q��z�|T*��u�S��OG�qE��Ej��y~��?*�j-6K��
�-�>ٕk���\X|S�B�B�(�?�wE�u��G�;ٗ��WP�
�!��r{AK�����M�X"���=u�j֏)�(^Xl��
̓C�J�|�.v�bA�~�G����p���NiKb����õb�����ıu�*��$o��H�� 41�A$��fc1k,��QAhe�(aM@�
LX������CS5ȵ�����
��+}�����c/�~�/�c ,η3� [...]
-:����v��zm?��E�#��Z%r�O6���?��hW�ģV�`���Q֑��F�@T
-�2*�0�e��.X�?�~9F�.l�}�X�i��ʸ���
T�:{�ex7��-;��>�OE�{4�>��?���	�T{b
$�pjL�<3.����4��v+v�
�|�5����@d��]��V)X'6�Oև���+B����
������Ӊu{��r,����/��
�����߲��vI����t��9��bÉ5��ǽ�	����}�����╨I�f�������%(����p���6Jzn��14Ď89�Hk��Ts�v
>�co���
������~]��}cƍ*��E�*��A|���0�i1�-I���	P�t�0���tӌ�m�M���,�f�M
;��k;W
U�W
-Y���X��#�y�
�tP�7��Ԯ��~�{�|����ƪ�/V�~�et�Ӂ��OV痀9+��>���#
�
��l��
����k�{�7	�&+8�֥Q��71ɐ�4}�QuW���ȣ�U�)t��#0����~8��M
e �"�Oi��Z�g� ȕ.�}��-���)=&��nuN����
�md_�a

��Oc�R�4��X�
��䚛�u��46�Dk
gפ�^�@@િ����~���Q��0������
�d���0֯��i�si�{u��+޺��s7h
�%�O_�m�.Im��?ۺ1m����֑��ۃ��x���wEZC[Ĥ�N�m�u�r\�-ܨ�
���g��Xt
/�YI��
���SC�5 d�=��CWtn�n{��w.
��QNV��G
Z|�L�E�6�V-�9� �4݂�m��Y`�k��?`���P���/�ZX�)gBE*K���D��i��c=OGz�:���;��7W���5(�ݓq�AC�Z�.5o�w�i�n�eJ�
ٽ5��
-4'�m�	�@���G����F���u�4��k�kZ��V�y���Hn����W�j�F@���{��^��z�5�,��}z">��
����cF�����k��^sA��[�M/|���ܙ�Z��T�ӇYU�^P�\٨r��qeA䊕Am���%V6�R�)���b��{�R���R�QJ�_���R	{_:%l�n��c�~Y�᭸��F�΄'X
��N�0)���ļN�8o�u����ГiM�R�ک|`+�K�,ё*��D���"�sA��� %��`���69@ֆƅn��C�����9�7)���*��o2�4��Z�[���e7�ߪ�B5��B[5Q^�#.�l��[x�t�|	o��	�E�K?��ag���Z�~�c����m�=2O��JH�[�1n����}����>�|��^�0�@?�1
��
这&���,0 �+0�i
��8��bά@^҄�_s����ޝq�>��t�
j��2�I=�U��zr�|Ba6*r��d��`�:؝U`p�,����36G`؅b`8r��PE�l|{�e�2tD����Pƛ�O� 
_�!0�+bFK����:7�H"A=yjH0[���^Dy��)רY߂���K�%��� sب�����2ꜽ@�Q �9��P7��� �C{ >HW ɽ> �g� 2P Y�D ٓk 9�1�<�
�<O2��#���6���ڷn�^~k����
�Sz1�b�q��p4���d�>�s���_*�T�pȗ��� ��� @�
 ,������W)]� �vc ��\6\x�
TP #;���|7�5
X�H v� ��U {Y`TAv��F�6�	5(Ø>*BÊQ�rK(ͯߍ�G�T���F�ɟ��wd�Am���u[�ĺ�]���L�
 ���@�UgͿ׶�kyo��'�~٠���CȎ:0��0B���k��@�*&�KIZ��ʊ-2c���Q�d\�2��$!ʹߒ]�����������
����U���� [...]
-����[�P�x�e�/� ��Y.���.7�ǡ޻�L��g|�v�uQ8̮��C��X;'��:c��:ZAY�����|5�G�MM�g/f��t����?N)�Y���$�E�M��
�5��N�~�e!ۭ�	Kr	�ړ����8(�o�;�.����(��U��#�J��\���n�}*j������q9�W �
�ix�|��!�ݢ��O����W�$�`�%p��o��jb=���V����òFm}�<&�I���Y��dv�F?fB^��4=[V��/^;w�s����^��0T�a���'�ݠK���}^�"�X�M; *���X�Ǜ�p8[OMI����ɯ���x�d ��F�,�DV�{�ɧS#��u�$�'oG�^�5�'l
�K�K����$r�����{�3�����6�r� p�fB	�
X6O�蓼g�uH}���ޡ\�{M��q�:����1+5}/V=gy��e�d�wj��پ���_�m��o=��M���c�i��E�P;H�<}E��ڟ���n�h�چ֛i�9
�<A��nt�-V7@�V�}�q��p����j'�Jbc�A��>��n�#�g��ylN���
��o���ӏ����]W;GNGS�9�)��ֺ��K�Y*�D���N��sᱮ���{����6�V��������n➵ay��ٮ�<f['��V�h��fN����B��d���؏�����T?M��.�.M�2o Z��]��Ӝ�v^�����P��:��|[q�s�_��'u�_rKe��Kqy;
]��n
��&���6��Kb/6^�
,����#��b�M��^�.= Q��CM�Y��x0�z1�k���tos4z}T�[��9
�*�X
+�URe���J\�(�e��.����}P�C���wnz�
����]���z�	������9�
�������v����)isn/�M�'
��c�9�:/]T�PHdz�����i�}��r��JuΉ�Qh���k��oDi���kpf��w���8��/���I_�Z_�m�
Vr��Nb�>���{�X6�帳��7�:O���ykj!�*��
�6�H���J�v^E��	�G��p����FN:3�c�K�J��8�j��b`
m>%1�eR�R��-Z��!Ce&b�3�u�l !Y��c?�/����h[���^�|��W��J�{e�,�d��%�7m�<�
k�}��ʔ׆"7{��<C>��ل�q�2ܳ�;y0k��g�C֦��sBWCyI�y>�x�S�8�R��Z��_�}.�
.���A�[�cq.�`�x��.b�n�G��R�G��]\Eh|��|���
�f�W:��0��U�b�B�gA��2��6�]~��k��e�|v��Q.mL��#��ϜT�ܓ�-�ٛ�/�/%�Gdi�����u �P�+s����{�t&��s��P(%%~�_��"�����\8��ϰ�rcH���\���Fq	zg���X�� ��i�\\���t�>�*H�$��J�+���JV�	��/})��R����݁/�N�YA��qƀ�Ӽ�B��!	MW�%�0*�3����YrW��ޫ�a�ע�갟��p� [...]
�]w�����
cpzpj���u�[�2k�>�>��` %� A1��0�z����^ϻ���?��=������Lⴺġ���(�ԏ�"�e�L9�#��@����(\o_��?9��\5���"�����
��o@�̧S�0<�Nx7�34Mu��0z�u�Z�hW(���
\G/�H��)��Έp�}-�����zTq��P
'���!��43'�vw+��ǭ(���]�˿
V��tt�&]<�B�pH�9�؋9d�������
�J�5� Zٻ�`c�tG���F�7��QG5
Z���U}2�5���
U�#-��|(�B9�R+��g��K��kiQB�d~�j���aO���M+q�CW܄��΁YU�0�����[���
�!w���&�~����i)��x)�i�L��%x9ד��B,�D�*�g�URB�Բ��.V}Y���e�wZԅg�	CX�
-ꮷ�����O���;�,W����%�͍jE��+��\*;�
��J���,yi�]�2W�3y�7y�H/�a����[E
��H�ōG4��0�+[b][)`T�.ז>�M��@Q���
-_2
Wie�_�L�.kN�}s.�!s;��,ߙ°���8KS�;C��i���R�6=�񒐏γ0� ��ݮ��6��
-Z�y�j�U��/����6 ����y�|)=�������nTR���[
l�>
~��
-���@�նFq
�B��}���>)F�����
З;�\0(9J(XA��48��e at z��ԙ�5�������Z�:���G��! �z�f��'���_
��ػt��Vnv�
iO=��x�6��(a*�AG>a]�/�:bu
8"��76_�
T|!�e��$
<�pz�ڜL�:v]c�{��zN*א6�
���l�jYY6�
f.���6�o����3BJ�f��d�������+�;��rN����ћ�5���9WNJ�)N�J�r��\��j�Ѥ�I�D
mK�g�-�k�$�
I�洔
t�z�J+�����!:��e��ի1�B9�@&�����B�^z���
��mU���r���O!3�#������|�3�v�$4W�y'7���N���T�m�>��wZ�))j���T��R�r���x�cQ�qpm�V {�נ����vi��r�� 
Y�[�`zL*��Lߨ f�	
/�	�`��6`ڧ+`:"
�� S�St�QT����S���x��#�(_
���
�� [...]
�d&�9�ǧ
������
-��
�k'�kFL0�S�@��'���+���I�˫�EC@!#-?��1u��<2�HC6xs�<�#���V.Ȋ�B
�bM��	.�Z��Z������P9;@h�] D�
���p �3{}{z�Z
H�SR��IЗ@2HeDR�c yz%���;���fT��+ȼ�N�y�����?cr4���r&�4�_HR��P�Q�Ǜ@��} �����}��w�Qp[�9��=���+�)r�R r�с�*m���(�
Je��9~�*x�(Á �Ѹ��YP�.]�X{�iy {�&D���'��2��/c�l��T[����'T�t�	J�֓�%��Xn����t��%���T�$�݁�i�
-������q�P��(��K
k����$h7�XO�4v�7���O2����~�����O�m��>ʏ�v֎���������A��;�q�^/����L�8�
�_t���V$�X;%��K���'��E�d#/�ѻd�5Kv��|�Jt
�=�5�~@u�p�����w�ۜ��ꅐ�X���5�\\ l>��y��6��>Q1i^���wk:�����:8x�I��{��|@V����ɺq˶�/�b������V��.D���%:�����A��7o��
�W��q�oo|pP��?�M=~JxҮ�W��};� d~V��6�T[��h}�������7��A��gztȞ:йp��o�Q\܄C�ݔ��E�}Hf�=��ݝq��j,&3���r�"Q�:�tzE�'�幾���¨��
�UO���@MΩ�fxħS�-�W��3�)���%U-ʄe����>��g������
>\��nj�Z
�=���첓����]�D�
U���J#��p6U�x��w�tn��i
y2|!�?�_xU��[����
��Ɋ.��!q�f���Y ��������m笢��*j�<�m-�幱���< σ��:��~�E_H����xf�ӹ�ߦ��
-&+�����9vs+9<8�
҇M4:+��E���:�
{�ѿ�,�����,y]��ɼfƍ��<`�{�A���9.�n9^H�
-�fa6�V��<���
ݯL���
��7&+k?<� 
�
�.Ei7�g��OuA�lϲ���翐 ���D���l����N����a����ɺ�^�+8{TJ�׮J.��Fh�W��.��5�����|�1�-��
o����#�uU���
���h
��L��6�rq�~%
�{Kuw�Y��Ǥ��a]��Ӱ������YN��E1�M>)0<��[q
-}}�3'�f]n������=Q�œ�7����}ߚbz��Lk<��6x]F��$�ZTy�����Y���o��;o��
l��t����Ѩ�Q�U�R���7߭x��[*]�[  ߃
����w�1?OߍZ���A�w�����=f��rv��6��W�I�To�[��a\Z5(
�~M�F�<�>�dv�6�v�P�о�]�-
{r�ٚ�ZZ�`zc���Ji�ל�ܤYa�]c�/��Bݺf�_�[�1ǡ�ݺ�I�:��O�r��z6�cJV��?��Q�Y����e1L-|�Qzv?7K�����l�����"�Kr^RI��ֻL3*\
-�L s

��6f
�A$��W�M�I�A��9,��:ھ"�m�='�AI,���#o
��K������/��r�RUu�ܦ����&��"_��x�w|�ʛ��c��G��td�{�{7kf
`�����uVZ���Wr�0�z�T��\���=h����XZ���:�['Ǧ>-ojSr����4V�s�^�����J���Mݿq��a�Z�;��gaN��s�ND�
��}vz�ڙi�o�_H;�\̖>�h
� �Ɗ/x�����7V��vq�o��Ӗ�+b�n�e�6�EA0a��jeG���D�Y�����j}\T�D�\v�:Z&�|R]�
LyrJp������?8p
�!u��R��.z#�j�{��ϑ��f�n���,U�u}�a4߮�ξgK���b����+j7*��Lm�k�� _5�SYW'b%��Bj�V��S]�E��ҥ3;���!_�A�W�S�QN������
�ϩP^o���u> A�œ�W��J��5���SG�w1B����Z`�xf�4
-k�j��.ΏSR�J}��*�˖�H'X�
�RU��Rw٬x�e�1҇��F׬�K�
�V�m�@;
a���УV��vy�&�3�M~,�S���_
�!��K
n�T�|!u��%k���9�k��ͩ��d�w`}V)�F�r���Ʃ�y�퀔|�Ø*t\�_S��kO��&�`�!��J���X�,����v�/D���&A|Q,�|��Q1�ۃ��o�
�J
�
;ʇJ�������z�ÆS�5���j�2U+S�*�
X妻���;4���Hz̟*ǒ�6���؃�7du�	
-��0�4�9�jՇle��by�\�\
7�����li�*�L���
?��Lx�`%=��86m�>��2�qS{s��t��ڊ������	���iZ6�G�\�iv�$n�A1 ��
B;���^th½�2�"�V����fq�/D�V�U�X�m�+�3��GW���9��"U�����I��؁ܣؾ��,S�;iϫ�`�P'
R�����]q,�1J�m�L�K����R��sŠ���w���E��jӵ=���p��ۣZ�ce
��/岲;����
S�bg6���+

RQ9�O����~Y��.�a�`�
������?���}0��;/b~�g��
�_����v��ZMŋ�yraJ�� �� S��]���ݯ����S��t�ԳRr%�vr��]�c?|I-y���D��;��L��sTsx
��q�s����USgg�Ƅ�}������;.]�\qv��� x�
�
���*G˕s!�Y�
v5o��%)�1z����ZbJ����ݩP�)�R�Nа+����x���=1��I7������^�)n�:*_���[Y�}f�Z�sZ
֠e�j!�)��ы
�e�[�Tf?�z�3�)h���곹��E]z?������<׋�2dU��(|���VNb7MZ�ő$<�׊�`�˿��>?�[^7vn2��8�L�l����fy�
�\����;���YP��$O�-G���y�5�1�<��-E��	f���;�g��&:ZR�4(��[�ݬ[-�m��aQ�
-]N�����O��Y���Ё��s�YckٍǬ�k��gl��1�������v���:��,� �<G�"�g�
ѫK�B���
-��х���
-���
-Nm
-��
��n>A2����hUS�d]���̬����^���rMW�fW��aD�a-���F')�p�@
�K��g�b�Y���������o�qカ���n��҂
-CkY(�
�̕�e:y��
��v����ӇjO�-��^<]�&P�k�
<6�Hr����M'�h
Ϊ�[�k��n먩�C�.
-��S삏�/�nXn�x0w�����D�ټ$-���
��^-�}<s�g�ҫn1K]>0<�M�6�&�#�k5�_$SX�J2��,�9�b/sjVY*��5r��6Y��?8�f2Z��9�# 

���Gj~��gm5o�اd��Ԛ
��c��j.?y,P̆+��a�峞^g�
4V2����d:
���r/};�t/�i����'�ʣA$j�Z=�Q�k��p�"HѭՓbHY"E���`W�|л'�����zpZ�kkĝ'5�4���IA�t�2_�Q
-�ԛ<)N�d~�8f��L�����3ޣ��r�'3��F���Y\)'X4��
�M�C�Tx�0�S����+S�%j�=� �(\@#x�G�!���m����zJ����u�������o�V����/�&熠@�ŏl���M� /
V`rD�c��GG.�AP攁��ͻ�tߢ=۫��
-�����1��}�; �ѥ }��OO�Ы�
��!��-���M0y|!��
�|���<B���o7���ס��
vm�
J0�J�W5� �b���,Zć$<?j����� s�
-	
,`%'�|����u�b�.`Yw
-X
:%�`���_�`K����l�[�g�U
(����{P�2��Uxщ�ڍ�I�72K��
h�´
SU�cn�]�H땆�oU�ѓ�(E�(��M.�P�q���-��j
H��������1��$^�~g��|$3ɖ�j�W�1�5��Nv����+�;j�a����J�Ŝ�2,l��M���F�y��XH48�!��h�z2ϥ��c1%��%�G��O=
����ڜ a���X ���=�Q� Ĺ�q�~�8�
 �m���gz�e^�bypZ��vf$0q_,e	Gb"�#���t��7�l,�SLū�SO��Ư
�������9|�Xa��ޠ5�@^�Bx��`^��
-�|d�@~aP�y(9t
€��]�%��+b���=�pi����
��Q�`LJ�|!��
x�D���?��4�,�����n�P��,P.=��h�`�*���m
B��F �@�R�K��`ݍc�,����Ϯ�-&���u�'��tЏ������v��$��	H�bq��p��,T!��N:�+
-�.��AO�J4�XE?��G�
�_|k��A��FXvo��~
���؏���� Uc%��ǻZ�
���}@�ܧ�pz7v�	T�9u�ߪg�v]�
t��=�UD��7�󡄬����a�G
�/���W��(��_L��Nm7>�

���hq��M�>�6�ۜX�oYoC_��^�l��rq
/�|P^�3
��s	k����;ު��Q\5�e7���M��磱�
-L�
���C��۹���nZ��O��ݟ�\>���!??�G����im��zp]���B�3=�
N�M.��;�B�����&vh7�n�X�ࣧ�v�te�e���ْ�%�
�
UF����
�>�՟����?���$��� ��c��궑�lY�<�AI<��x����Ts;�2�

��kb�	Wt4�.;�h����v!��<����r����{���h�gƋf�s��&��_�ؙ�b��.�1�c���?[�����q<W��f޷�
�����F���پn���B���/��#���wf
G)
-��>�
-��

��i��kLV�]{b���x[�1��硗�mCz�^G
����07ow>�5x��|���
�A�h�|�E��ą��{�[m��L�<&KNn�C����K�����Ƒ~N-gh?u�fG�x�-CPx0���m
ĨC�Ɋox�pq(^-��b9P
�=x
o���~Z�L�e���ͫص�=;�o�3���~�=t�]2��;����i�z������J]�~!'�]T��Wl
̇ͫeΞV��o�A;d��px���I�� ��נ�#��L��~zY�z&^�{�[��u),����mXP�K�b��tZ��j_�ѵ�
�h�
Ė�h��Q6��R6�7'�e�����c���֟�=z
���N��Հ��[��.�2��<ow;9/�%��Wz�I3ɵ_���F\�;�Z
JJ�F�}�Έ��X����"��\��֒���7'�p�4Th߈�ƻ�-�i�
-6-g����6_H� 
-�? ����eK
Us�]u��m��������A��Uh�.��VA�Y�w��B�ӎd���I+�[k�ݘ�=����S���B����i�X��}	�������Ug��xI�uoT^�}��;3)o�iε�p���cm���T���_\Q�7kBf���_�-,fAiCx��{7�G;�C�o3Gn��S����L��A�vKE�Z¶n~!\�[z֏~���v־�'�ݭ��~�V����3n�_����6��ε�3�VgǞY�p��ˊ����N}�F��#��h�6|�Io��6;���h��#��Bs�ܸ��~�*�1k9TM��['������(�[z����e�1S��&U��!+G�FvT�fv�VŢٰ��ve�T���.��jh��(�ַdeQ:��_
�/�^��<9�k���q�#��V��ͪű
��˻��M�OM[���gX���a�3ᄅ��Imr�V5TV�y�y�B�Y�����y����B�9޸2Ѧ�F�V����dP▙u�f���^�.�qS�'�.��Ez��f?���n�ߩy�š��~ޙ����'��|��]����Y�p�_
s�һ3�~"�ZR����t��c8���6��S�m�u��2Ir��T�t��s��ߣ��x�%
��`"v�]5��.��V4����:ݩ������Ɇ���da�4�x�[�����Z���f�
-R+�]��#�߹
-vp��w�,�~�oxqml0�pU����>ߊ���?=��C�)�[��#��3��R�cn�,J˫b�mJ�-�mym�3y�=�|!J�
&�z
-�Ow�
���+Ġ��-�UvT�9pi��g�
�M˅2�X�%���K��KB��.���aQ���B쭮U�o��xՉ��������#�,�k��F<�v��Ij���DlS������Dj�,~�&�p
-
��n�~�q�Q�*淞l��9%�jbZ��� �eﳥn�A�����x����~SOUf=mB='�
5�ɽ��3We)��
-6jed��Ҿ|W%j�;�ɚ&�1�����8��~���kM~pU�	�����L�����~a�ڴ&���6��i�
T�e0Y���`�A�8�X�>��y=5�I�T��F킭Vu��,��@��㙂���촞'���O�ٓQ��4	�c����wK��
�[^ѽ4��6�z��x��%@�d��D��c�с��V[{U��:\>S3'̓TٴvD�jGpQ��@Oݐ�-�euZ�&mE��SMv��L
ٞt�*c�Ku�����
렻�p�=R���0> J���UN��>��5;�$�5^U�5Ι�5VH�Nޙ_�S�Y�����P�?b�&��
;&O�Z�$�K�9E%9i�1Mژ�&����i�������
#M}[�s"��T �j�?��惱y��}qa��pp.ò�Yf��u��1L2Zҫ�
ЫQ�W�ӈ^MO!��m�-72��~49�,��h����{0���J����
Z�V�DH���K&�ōx�ڐp�ݬл���<+���D�W�U�
���!ϒ�~V��lz%ܙ��F��nC�uө]��Q
��� x�Gok�G�
�G��G�9��� A�^2W� ������*+N���e��n�KI(>A�Ps
�dw��3��n
s�Q��ϳ��ͱ)И��Pc��`0K��ܙ���d��P{rs��̛<qF�d{��ʔC���(��� q�B?���\

-�X�Ł���/4�h���,���:GF��qA ��#���f��wЃ�\�
�
:o� }�ڏw����&�"y:�&ɩA���C��'�
e[����U�8��U!���<�!n
��/GyX�
;�qC���ǃL������
-���rs���Ă�l���.�dZ���TA:aD�uj��Z��҅� �J��
(6��B
-j�B�߻.���b���f
z�
>
� O�A����	�5˩��<'svW)g����us�%�.�u-��u�� �m�Xa����}!�(ո����)�0���(�Ի�8P�
�@3��WS��c��enu4>��yðT�֓I:W@���n��
��f)֬e�ױ�i����a%i��<�[��d0�*�߉-Tn<�ȋ~PYK7ѾY
�}M��V��u�bMG�N��+��B�j�ֶ�e��(��K�U(����y����wA��;�)w/ٽ�
�~gE��
DYU�z>��GF祆�.X2�v+
Sx珰�a�H
�NB�J�$�|��
��t�
-Uk� ��| #�
��θ\?:��(=*����O�^Y>�-I6�5�N�R
-�
-����3{`[�tOM�Q o.py�|&Gɹ�w�NV�`džp�g�=\�Է9C�	Z+ at F�g�	ȠV��Nŀ�*��� K��_|��XW���
���q)�F�j_ݪ�o4T�2�x�4:���cx��E��2�JK��3)
8S��A3�ĀZ�R	Vi@��DC �ki ꍹ��G�l.�K0��T�x�hh34<�z\j�:l�:�䟡�lA���ʗ�e��f�ͣ\�D{���Q�&��_H�5b諗I#��D ��%��n���Q(��L�I �_r�)!*`�	��
��:M�=fZD��̢`�5`�
-�a��|f�<�q����t���sI�v�r�}!
��L�
�ċޗp���l{]���hM!i�$���o?
��)�� X/E~�Ɂ, v�� {XW �L;�#�>�x�F��&�K�T�:�������
���8�B%�
��`�)�<����K2&K������G���Ǥ��<�:n�
-�̓28�比�E�]�
-�Sw�8�����Z|;l ~w�VB Л-<���ް���
-N��Y�Ĝ% +u���7 �S
��-�*�O�R��
-��g>Y-��/2d��cWX�L8���iͷ��狀�@����qs��n�Ē��q����H���y�ii��L�"���
du0�餀ܮk@�Ԇ@
[��ayb)@�j��IYi��mv��ر_�I�O�ht�r�`�G��	�k�����I]�ՖE�_�w��}��[�ݑ'�$�/P�y
(��
T�o��L�'�	�P����a��w4���Q??�sݶo��q��%�O<¼� �� �	���c
��G�����m�����������n���'%�����#�
�=����ȴ%􃏶������������?�B��?�3��Շ�\�
�u7������ܺͩ|�m���S�+ޫm/γs��'z� W:�3�}:W&ѧ]?���;k��;
-�kbAٿm���~�Џ�����u�}Q��Q's�e���j]��<���A���曣O�"ǟ�����V1JGqiTn9���l���h������	�mv��6�T�~tٿX��Smѣ��G�m\
��A?[n�;A��wcUVn�F�r�re�|�l��I�GGq.�ʚ_��=����q;�s����<�[��^����Wny6SĒ�`��G��<�Lk�\I�E�h�#hr�rJ��NH�Ck6:ҿ��'�U|_��
��Ђʒ��!���s���[%�W
|�|!Kn�
q��
Zѻ��~
��T
'3#^-�s���fǷ��F��	>��cb��W�)���6F
�qW�D���w��~^��#��6*��u]�é�򣽾�뭜��
t�^���)z7��l��\��&+}DL��
��H
-f���&2F
bi����M��c
��xņA ���
�v�"h�����s����\���t���Y
�/$ׅ�~�p/����V��n�ƒ�"���$K��\�5'�x�
��dt���q>�S|���=�;<���l��
}t��{�2#��
^�W�]��M��u�i�s�n�}���@_H�{j�6B:��^��$H�|��Sj�Arq{�k��Z9����xǜ�
Uo�
qt�*�P<����
� 
-�vM��^6*M��Κ��֮�Ľu�xr7�0�%��X�L�����c|K��%/X��
�.�f�����~k��
�H���k
-Q�b����B��9>6�n��f�+��]�JCy��G��8nS�4����ӵ.�t�s�[�ny���GԒ���N3G/��\���j"�7f�&��42�q�Iu1-c:�M���]To<�k��9�ݮ�/CKx����e?zfv�b�9_�"��m/���b���?��/�K�:H��
�m�9�U���B�l5���iTsh�]v鉋=���T��Cd�s���u���v���[6�Y��Z2c>j�� 5����C-̕��R��y�ZF{�*:w{U4��q�ҋ��2yܧu�9�Rن�v�ZTKռ��?no�^�Ft��]�

�
���GI�}
��/��!o`ݶ�%��?㽩j�	 �U+��t
&�Z
���"�Jm���I
�)ۧ%j��a�h L�HJi� p���v������kx
�&}+:
a�,K�7�0�<��w��lO�{=!mw�
�꧆�9$w�V�v
�0�j���tl�+��
*����	!���W
JM��5�v�Wԙ��»(�eC��]��
w��i���wSh��h��;j���In`qXp����8��,��aq7��=\'�`
a
-|5S�7�
-��7����/���h柑A���ҩ�^J��}��0S�'��|Q{�:MmTG��.l��$Xj_�jh��j���`r�յ݄�[��p?��٬���Cw�y[��9��������w�]��V���O(c��Hͽ���Nտ�W�[�[����p���l�n�����]
3�AV�T��QSц�*�S*َ~�WBU��8�JP���!���y��T\
�0�����m�9h��Y��NE��U��Tu�4��9����:��/�\�/�G_����������[����<Ҡ�6S���VM��e>y��5�4��m�.�y�nK��I�'�pF��,��goZP�<��[
hHCa��
�c��y3Ш:��-պc�t
-IU�u5���XG]�=g� 8gu��(-�(��NY��[Mז-e�����&3Qr�����<I;�����G�Dfޭ	3��Mo���)��+N2�%/�VR�����{�|�B#5��n��7MD����!���Y�b�7��z�K��� ����=D-?�+nQ���uy�k_�\����]imF�=E�q��E� ܅�~������P�ea�s�@�r�V�8M���
��J�ZU��zsf��`ֹl;2��&cr!�)[�}�V�n�L����]�t5���:o��#{W�l
��N1'�-5fsY�*7C<�D]l����v��н�'��_��A6u�啞T�(?��T3UbKg��"���<�DDl1Qo2�'�`�h��mL��450��M;��m�mJV���J}Rʖ���֓����V�bΦ���
-��YjB��x� TdOdA��˼��.�ж��g�W�l�{�����K.u��XC��Y�LU�h�r�5i��X$��
N� �%��_�]�����`��!�/��k/"�V�O�ŏ���D�lq�a_je�=ț�t+5��Jl��{�o�n|��x�Y�7	hn��eN֌�� �g��f걨s0s�1ٖ��W� �q?�Q�S�)bxrI��HzffHzP��t���(�Šㄏ��m)�hZlڳ�ГY̒s��同�s���#�Q�uo+���W֗����Nk��-�JHrU��LM��L�qQ��<_������ץ�z0�H�&�����&�
љ�B!Y#X��$+�b�(H|�)��[���/�G�%�:qn?wȮiA�U�B��>���eb����[�r��eɦ�z��dr���7�gjG�_��F�
-y,�<��qi,�D�z6���
�Ћ
-2�:&� �l���z���
-� ��'/f:��u�x�%c2^\�6
��v�
��6ԬN
n�pk��M5�΂�Cy�V���[</og>X�;��_��z^��VY�)�/<҅K���
r�O�_�ȏ ��	Sڔ��i�E�Ñ�}�E���2��[��B�즘��(u��cY�nЅ�]�c+��k;�3�w�^F��w5�_��^Ч�m�
e�
X���
_�d���UE�(j^��	>��X�o�jsr�����["���z2���Bv�,�Y琩g	���4/�(C��K�
7����9�i�ڃ����"zCJV�*�(hfW��/�Q
G�
��e��)Eu]��ڭ��������Ƙ�܁���M!��>�5�:9�j��׋�Kڦ;K��-�޹ ��n��	��Vy��&�����
J
��� �E��xúN��N��Ð���[N�>�>�vk6�����F�!p��#H��C%�����;�\çBܮl�ipZ��}5ʴ����SD����]����v�3�S�
�2�M���\N�G�6���k4��p�~�H���B��Bm��7 at A�ؠ [...]
-
s�� &��J��UԂ�-�J
P/��� %m6���8�rp'A��,>H���m���eTR骫��|I��b%�"�r
��!�se�{�#�z�g��4���i�
hҸ Z��@7
�}#� �#�[O�gʀ~�<@��0hpLZ�&xk�~E>����=Т }�� �
\,�-ت��C�+�Bm��=IX�\��T�{�|~����ziXz ���� ��)�y��gS��(`B��J�<��K��eX	�j���.��%�������g� ���
80
��ޫ��&�� �X&�
0��ހʼnߚ(����Hr�V�&���1)��&� e�E�v�W�:��H�1K��������
-d��N�-W<T��
[��!���=�C8 �;\o�b��4� �f@(�	 T:�nek��
tIF˼7^��� d
��'�θ�m_Q-#��%$ʺTxޥ?
٬�?*�j˟����o�C���QL�b�4���n�
���H���/i���t����@Ə
 �; ɮxMv�JX�
-�K���'�&g������cn�����	�Jyr�����J�nԧ)������G��H����3���J�L�W@�_܀ʏ��}U<������Uf�@Ur�_%�~���{���f��'�??J����d�\���q�v	VݟǑ(>��9�z�9������>-���8��
�6�m�6f� ��Q�g�ǵ���0�?2m
���9���i�O��'���֖����o� [x@����\SX���E�
-�䜣�(&ń9�x���޳Ϝg�����
-�[ϪUe���E��(E����
-��>�f�[g2�vO{m���~#N�|;�9v�F� m�h���?)�+�~��ϥo�Uh�>�l��o��e�}��z�>����f��+R���z8����
��#;����i����ݻ��v�>��1[�
���kl�	W��/�
^2���+��>kq~�6֯0�;������-��#6��R>t�3���'&}�W�}���tM63����T��h��.ɨo�L/�E��w�w?ͥ��>�85}$25n5���2��R�f��xY̿�
�%�ز����+���n���~t��s;Wυ�!L/;cm�7�3�XU_�Բ�N�d��L�
�?}7��4�
�>r�����pT
{�Qc�)L:#r1�����ٗ�
O�0�XI��k�
]܈��{�����g]�ƅ��_�3�y:1��|g���^/si�
�Ʊӛ�a+��~/���^jq
���cȬB0�a�2A�/��d	C�����PYj��`cwc��u�	�
-ݜ��Ek�������p�<
��!4�s�-������Y�ÿ6
�Ek��Š?՚Ĝ���Ї����I9z4G�޻3����v�u�j
�6D��c�C���;<���������
� Z���Z�PҚ�n�mJ�U���A�=17�a@��ro���NP�
�Lf
��v�&o0
y��
-3�jq�k$z4�hϸ�x
"lgY�����9��Ǽ�90�V�Ia��QM�ƍHS�

��[�c݄:�Z\
�jr���
-��.��z�R�N�^�K�
-�o��F_�z����åb4��Τ3���ᛑ
�t8��pgU.�ڛy
bZ���kʙU2�oh�Y���Ӫ��l��Uغ?�9
?_v���
'U<
���?T����
�T�c�.Qn�C�,�R�[.���ں�`�vS��M��G���ԕ��/�

/O
r=�s�zd
�Z������L5�{xm����Br�?��Z.�`>J�*��Jmܴ�#�-{�YR�^�B��Ie?P�ng'�
̮ܗ�
]��x��v�ˬG�/L5�.���YT�+�,�H{=@
vR��`�_�bu���ʃ����7/)�p�N����w5��?�W�T׶���4��
+�T�2
`��r��Ta�����r�b�T
��Z��vaz��BqҞ8��h�O�jo.c��
-i�
���[�R��'�13��#o\gS��E��q����j&Q�
{�y������������|=�V��.Je}p���V��7�
����8gU�sZ��9
ʶ�\׭C�ұqnh��87�C�`ܸ���9L:E�go
�ݑ6��f�UC��-S7�/~�����X\G�{s�E��|yS�_�2�jKϳ~pG�Ū8��I1+��B�d�
���Q�c�:�K�jri�<�I�l�jѸ͌��m�Z?�����o�c]�ѭ6��w
��r�䂊jN����3?PJ<���U�����ꖶT���~�\�)�
&�u���
�ɕ^���r�:�/�b{�T��ޮ
K밻��
��X2F��b��
Y}�IJ�/���j#eͺc5
�
u�V�jn9])�
-tU�Uu��dR+�@R�u%�_�
*�q~r�cc���̒��ޞ�P��OS�(��Z9�Y�s\e��y�(��ǽ�kbs�EDc����������gݠo�]L��f�2�N'�k��"t\P�}E��wK�d��L����
����I�2"�=�B筷i$\i��	bG�:QR at U�����͸A��O��LY���"�+%�0���x�43�og�&������^-n��R~�1dY��(Y&7�)�}�$5�Y�O�}W

d"\cu'����?��G��ɽoh�
��#gj��Lִ�������1y}������nWN��.��T����
-��69�
��L7��P���HEַ���٭��S�B- ��͜�J#R<=��̳�(�؂pC�� W��J�1���
��3���dy�u��䷰�r���	�̡��fE�/��1
-��s X�>���w#tq�"2�!�^M�*mu���
(^�ٓ��=���R<���؆?ɓ��%2B7���|n���=���x�x0˔��+49+���I%^��}���> �Ыq�FYqE�E�ǃAW�IWrg�^)7c��]rGn���
wF��hTaeC���\��Kn�l͜*xg2����"�nSk&(Lm������#�S��"Jp����T��B0*�9
|4���2hћѕ��D�
�j��H
Y�B6��9ټ�$�܌
����׿���&�_Q˧�=�d�©����-�/z���(�;����V$ܡ\��ǐO�����蒝�܁-�*67d�rz�g�͝��5T���n�ı�Quc
PL&;&[gO�s��x�߷�ޫw&?�k�0�W*���_Jд4B���|�_5G�֨��E��Q[�n)C�v�ZN�o��&;����ץ�A�V�Y��}C{��Y�iR��~ j��_T}n�Sj��	�r$�9��UF�D�i��ގ�(
���q^�0���t�+�1ΏP{g��F5,-	Ȝ�UZ
w7o�J��y�Q
-k}�[⶞ҭG��������:��`l�e��P{��
H�3"��
!�
�ح�xT��ƒ@YĆ���e�]2�@��A���,?[=o�<Y�!c"8��C��Ud9�%J
Y���%:NkĽ_�����]���Q���;���g���%�
��v��~̴��l��$�b�1
b��~�NLd�2��N��|)�����
��XF*�Q�m��z���F���:d��+�堮�]�
�KA���-Cʲ�����+�
v�q���E�P�����q�*VQ/R�nl�w{>c�Ԑ�J���%E�A��B�
�nn���\=��~�
=�٣=�d[ ���E�K�c���a�U�{X�A=�B�k e^CQ��U-�?�[f@�����H	�_4��c��{��Ӧ�Y��ʡ���R
-y����in9�ן��BjL��
�z����m!dԳ|eބ��E�y���<�n
��=3W������XĴ����G�Vʅ�)X��;����p�eW �	(�b	,���B���R^��t�}�(�� L]>��$���J	;����;Ƹ�W���"�����
-(hA�nd��6J͕ZT�� �qa�`��6{OP�
��43���}q��Lpa��W >
� o/?�xG�^�/*]-+�]��rF�'�
!F�����P�U(���c1E�
3�
ҳ>|+i]H��az��Zi� �hL>3��X⭝�o@�3hWHp* -����	�)@�M���ă��P�qDkɗ�~Q�&�s$���?$#��f�I���6Wl^�ԩ�9 �\*��z�;���}.�Pj��� r2��F	�9� o
(":J�> e
��	��HL��@rFG�o���
�z�,�"�T��T�r��8��2��+��/�r�ٱ/;��+gE��w�a�>�@���
-
J�\������^g����ɳaҨschv���Y�}����tگ�}X€~�1��l
0����7 S�M �6��)	`�w0�%yO��O0Tz�Qz��񋢏�{���<�R�:
�پf�� �.1�p;����[�P;^���
���~��k��o� [...]
-$?����
�c$��5��y
p�,�
���/�[��h��
~s�r�P2��~ �}PD�+!���
b�2���_�?��(�
|g9ꏌ
+,ग़���|̖
�@�1��;��-;����B�L��. ���'��W���A2ĵ��H	�L d�B����O
���؆g6���ͫk�!���Ϭ�?���r��p�*���
-����#[@"c u�
�S/ d�� Yp�@���U,y/�L w���T
-�
�㵖�W�m��\��ΐ�-�i��J
���^9Y�E�����+�ۚ�j��m�
n�J����J����
M�Zn��
��C��HjǮ5�V@ݢ�{w� 4��-�d�5�垃�3��c�}�g�w��J�7%v~y<L4���&�	n��a���X۰�P�ap���X�F��w]��]z�1��Z<5rW��(����At����_@�W� �m��z���2�w��W�ZD���~�o2=������~f�.�?�
�.�kq� �H��]��tވ�\}���^��'f�֏��F�^e����{����ݐu�_S�߄��kuj<C��
����|�_|u����u�0��,]��+�yE�p�����^~/�Aj�>\��a�pg罺��wCb���L?���Qn�\���jY�6���}q�Ȏ�ũt���
-�!���
���Zi��p�~�5�~�����׺j/*�5S�S���cG~�&��(������Ԣ�.?��
�ޒ����_���{�g�ћ���p:���i:L���2����7�����#r-U�
-��@C氀��:��h���(�`������4p)OF�d��j�d'���]ί��8{Tn����Lb����/�)��6N���4l�=�u����E��t�V�����r��P������:p�g��h�w�������>��᾽ixۿz�ی���[���,Z�u�<S�dqwbw��2J��
6��?�p��pE|�����K��{�I��.<ngBn�Bd6�;^~´7���QGI`����l�N�x���ja�)�z�_�j�����{�-ܰ�fk�k�G��gR&�7��_�G:R�
��{u�
[V�&����ƍ��
:����0
��6k���J�]Sz\.�H�<Z
-�ԇ6���3��%�ݬ��{՟U�������͓�R�:��&���YX�����=p���J�-r��2Y�{ƭ��4�lo�'���:՟x�<�ƣ���;kՇfޭ�'wG����`۾��=�h��G��*vhl+>]�}g��2��O}G*��T��|����X�8�������<ꞗ�I���+��!DuV�Y:hj�KK��uS����w����ǥk
�U���깪Gt�ʦ>�*�i y�`mx��%v/�2�����
-Jr��Ƕ���]�n�ɭ�]4M+�ۑZp������ߘSJ�T'?.+��
�a:����g��z��-	�_�� ��\I_�%�2����"9.8^]z�\�X>�WY؜�R�z`�s��n�`$l$�8�b�Y�
-���Yȥ�]g�IM
��v���~ل~ǬZ�(�l}�mM.�ȸ'�&;��WT����ܺ���29���ꥶ�Z����Q��~�òh�S�E��n��O�E���r
sl��c:�%{mmt���
k׀+}&[�m�M��Y���bHy#��*c^{=��6�g�Q��4������͟�������hR%5̱�����|��}T�b,
{E�!Eh��
��9q0���� �X�[����6O�L>�3�U`E#̸��(�E=�
}��:��P �1�����ۧUx�2��/
-
-�k��e4�ʞ��~��S��l��7g��Zz��
p_�׶W��L[�K��̮���Z6�Xu~ ����f ?��u��
��o��ZI���� ;!����k��լ#{�<��|)
�+
��xX}K��DJԠh���M‚Dv�MƖ";��b:pb�b�{���[j��E����P��6��
__��s<��j6)ݰnӸɅ�!7+=]��ڈ
��L��$=�T
�)�����T����/�m��D��J�j�.Ѥ���p)r:�����ٴ�w��.��/�W�&�����ёh�B��/6��T�c;��JRNN5+-,n�
�;���j����j�G��\z����\A��N^C��L�oiǼ�R��=�9��K��p)
|A<�|Ot�?���7n�	y� K�
�ŀ
;�;.X�(
-��P<����.��]�_�TArG�ᰅq?iC���;��F�j�>�(��1���jfדv�W,�Uq#
��Ilyͧ���ЩMAR^4��&��T��`{�pi��v�YX9���dј�L)wz��1
£I��>0��Ax��n�~u6�J�'�
v<�W�:���@��ZGY�5���+R�V���W'��x(t6� u�=�{�.��0 �.W�1
7�z8g\�<�/��_��̌R�qӫ��	G;�!j�"E��u�|�n�_S��_Tk*���^�)f�y����O���Z�������Lz=_<)�'\�X��|�kY#�����3���K_v'6�
��06��Q�-�i&�dzyyh\&j��/�)J��~ �[i�un<,UB�'"Չ
�8�{��Tw)��9ûN���u�w���;z����
1P� ��k��ę�w�b���fml��auθ�֞^��
흧/����&	��yp��d/U�ܡ{��h��[��j3�3�=�_(���`�3�,.Om��>�Hu�p���2�p��4õ���;U��/5VP[�[�ϙ�Y�u�~�)�O��Q��߳
�
^c�&�K�cd�n�HN
?�%���<�
���*���K؋Y�1�Mϱ�8�Vđ(�����ޢ�FQ�	�2
�&q��b-�dn��C
KO�OJ;u�hӤ���v_l��6b�gs`X�WwǥjK�%�7�N\
-r at tr^������'��ث�<��"C��
,��K���
-m��|�^��"/?R�Xn�K
-�.s�f�C��GJ��/Zϖר�^v��n�:O��n���+|KM��e�� 
-�1h%�:"��%>8��������
,M������v_����n�Tt�Ǜw
��<R>$�k�z�z9Urdh����eU2��6�[
-�O��e�Dz��"�53ό�uGo�P�(9�{�=��(��w5��Ҁ��6�(�uj7
*�5�uq�?rP��|
*�W)��hwr~�?�Q�j�ݟ�6�h��(�Z�4|�V8
��,��tC�=(\wv��3pr�X(�h1�2���<��C2k�P�:xmM��r�>
zF�
�r���d���~v&�D}�\a�k�CW��:��
-�e�%4
�
�*OX�C�U����x��@
�nM&�. ��
2�S���V.�
#6);�f�R�fj2��R9��L���
c��������x�h��;��I`ՖG�\$��V'�du���^���33��
1`ʇr�<�6
<��Ut�
�ȪQ*f��
����e^�
7�~�
�ig
���k���u��T�
�4�%h* ��~��������n ��%/� O�� :̐�ڟ~�9H�_�� ����`���aκ4�c5ğް�Nl
��F^�E�.,1P1���4ܟV �7>���; {�F	�d�������r�M
-�H�H6 ��� G��S;`�Q`�L`�X�t&Q��E���H��9�����s��M
�#�;S���@�a�:�F�u�נH�+�D��{X� �
T
� �B
@�� ��
�yS~$�ga���l'8n �
�?(��fl�Z��� �ԋE|����
�z�5�����GM��^wE�ǻ	f��!�ca7+�x�� =6�`������X/�f=�k� I�ƀT�
�uy
�^p������؂�v��c����'+��Y(�� �V��iNӎ���d��r=/�<��b�y&����g�%RC�IVt�cH���4��D�W����<���1����V�P���(y4� @�f�[�ǣHz��\+�j�� �� 
"
@wS;@�S�Nhw���\ٝ"��{_�:k�f5����������~��5�^���'��9�����W�
��la�,�c [�i�
�=������
�	�����6�4`���۲g��r��n��~��F�V��b�
�D����}���ʑ~� (uKq��!���G@���
��
�A����ʸ�L����Wx��}
�2pzM�o�I����2	�]B� !�C@@0y}	�KrF𗭢������M,vr2���er�a�N�ø
d7.�����͕���������q��]��	E, ���'K�~ R���� m� H�z�ޣN9�m9
��\U �jM�c�����
--J���^����]�`.���t�G�O�.���?��j������ݯ����~�>�����~�[%���漀
-�$P��Ti< �Ӿ���ڋ?i�j4H�hV9��j�_���������P�.��MF�fĶ����D��g
2��.�Ar�\��}���{��7{�]gt��"���pp�(
u&��ڛ��7���
��jEǏ
�W��'0��W
�*���]�qt�3b
��׎�tɺ��u�}-���e�ڹ
ֶ�s�nS��js'fX��A�l
�I�=H�����Eg��_��K���/Ħ�j>�߯uu���ү
�q��J�ڬ�\�.��
�<�Z�F�k��^������A���Kfe�ۘ�͌?������S��ro�_����,���K�3���:}�Eo��>�e���.��p_C�?���GD����wc��/Kr{91=�z3�c�.]ӻt�����]mԐ[2G�_ˬ:{��9}73�Ը wK�2����"v�K+�c��x�#�r���Ӑ��A@��5��~(J���;^�
-m����5����W�?z2u��
lcB��@��ի�j���.���db_/���
��x}���kȬ��_��>D��W#���F�_����:�G%�� D��a������wۧ�b�<������~
�k+P&��uP���kȞRL�VէX����#G�d�
������DW��ޝv�KGͤWv�Qm�Ps�Y���l��>^;�Z�0�ڳuj��-�:F���B7�$7"C,��q�Y:ϸn��{-���L���v���|�}߸�999�ii�8Y��W�
6��|�iе_Q&Db/�ޔ4�M�=6h���:5"�ym�nS�G�F�F��{��f&��ӓxXsr�䳕�f��i�#[�^�h!Sٴ<���{��wI�k(�Ǽǩr`����L��Պ<(��=���P3]x@^����@��n�!�=4�g�\��W-���g;�w����܅*��+���
�}��<�N�ʧ����
�B����h�F����)���M"_*�w��7Nق���a7�������B�;�AZ"d
�ѧ������bqX�p>�lj��۷���\�K9����t��PIN�������!S|�b�h�c��^��B\y�
�
i8.��
��Y؞x���C�Z�h-ZT�P3��{4��<��� [...]
Sz�!�LKZ�r�i��$���
�E�s�f�����O���\��Ke��-J��w
XKƖEk��!��3�~��]$����?�+�|nm��Uk��኿�f(fL�)���Bb�����HՕ�Z�I54�����~�B�V���)��Q�f{//,1�@G�!.ow�o�o��o�>�粜̊�=����l��W�b��T�&”g����JA
�bCC�+�H�7*;]�������e����F�R�3!(�v�T�_���s(cym!U+Û�{P�X�N����Ȕ�p�K6y���HJ@���:�KN��<����5��+�Z�V҇��0�q
�bX�=����5��ZZ؍U{�Z�p�+�%qQ��z�K�
-�ؤ�I��:'K�⮊{�sE��
�@9L�m^��\!�
y���\ԴS��Ё�Ǽ}1���JpV�*-?ܦ�
-P����M�C=7�P��`W����T���񡫱G�Tx��
-��y9(�e
�O��f����x���Ml,��ȖUD66)~O��������������Ț��f\����(M�����f��/���[]��Tk�6(����!���l����DM��:%5���n���
b[�rO�:��xp���&C�H87� \�
w�|�^�x�B\���Ω<;�T
֒�>3��&����|�A4J�dju����i��|:�gzٷ�6S9���*\�|���֦G��P�yG��PM���%��,i�oh�a��y�QkT�;�^�l"�E�'\��8=2�\J��Yk�X���3������F���2�w]�
-���ν�Iz]��߈Hz�z��d�&k��/�u�*֧�,���P����G_=Y�Mw�\�ՒD�g�$r
S���M��p�*q��Vg�Š��H<b��l��ǖ�ݱ
��I/���Yj��)��r��]�a:
��N-	^l��N������x
�
�wZ~
-�
�4~Y4R
���ke2&J����T����O��R��`�ԗq��:����W9C�K�xr����Pd�A�� �剖��4V�bj�
�T��?Rd�~���!���A.	~�.�!nأ��c�{��� C��C�tF߾����L� ��ۖO�>�5}�@v}n���)�T���ѓ����{�bǷ���r5�^����C�T�D��m��7�
�aPC�
3"p�
!P��
 �y�`�����hr`��������4oS�|�n��lY�����w�,�E�̃���7��X�7��&Wz��*X�!���}A��\.)�L9�����ӺHQ!���D�V
-�P-U��o�r4�bO�0��)����p�@�{��
��ƍ�R�������8�*
.9|�`�m*����r�}���/1~�<�xF
-�I��2	�~�o*�@}^��.�X�I�FS!�(����
-tQ�~�ea��*��6ZE-�j�@(����t4�����3��VR�ս��*���������a�7g�<̕�%8�)[��/�p
-�Y��u�5V� =G��o0�er[�V�����;����[���D��J�
������[GG�������[�~����9b����5�֕�!K�O�e�r0���?t�܊P��� )��3��,�Q�rR8�E��uސ�u�S�$�μ������-�=��v�ڕ��B>*���i�lIÕ1�
}t��|�&�9�@�,�:|�yn=����u誏C(L
G��+Hڴo��Zd2ꑠ��V�J�g3��"�7�	{9W�q�Ϻթ8�}��|�U�W�P�r��
�j��/�þ?��]��
�Ơ�_"����{�����QNF_-1W}�
|?x(���Lt~���.������f�7���KM�`��Z�-pg�;ȻE$�]�R���9y~'x� /�q�s�9
-_|#O�#���c�~V*
g!^������u��5�5��h%B�W��E#�,wj��"
l�<$�OB��Z�P�t���A����HvT�	�[�J�3���|V2B�g
�J� (��@���X%�t���($'��$?���ߠ��>��7)njDҽ<
endstream
endobj
126 0 obj
<</Length 65536>>stream
-�D��|�E�
5Y�p�\V�sLqH9=��E��U��c3��X>]�6 �
��)�t��` fpD��0�m�b6 �a`��Mm��1�!�G�C����m
�ŴZ
�v׼��G
6��dP�7��+_ɗ�~)G������ymZf�0
`ӥ��#��)
.WN� �/�GO��1������
-�Ixw��� 
��	�G���$�[M��ppk�'_A� �ú�ڔ�`FF�T�7�1g׬�1��
{��a�K�l-{
�<X��^��^���l%[� R� ��'���L��*D�X�b@
�
@"����
H
�D
- u�
-Hn�q�|�H�" ����
 �S+�o��5�}P��y����7y�&����b�4c�_�f�쩏Pt�73�e�*�TҚZ$]>[�u�?���6�y?!� e[@U�'@��'�.~�X�KPw ���	&+ at C�
�
���4 �QMj9�jdN������J��g}?�����Vh^�N��p9�)o�.jٿz2����4���i��c�+��O��z��I}<�]
̶J6s� K�*�%��a��	���6'� �E��J
0�( ̵s�F8h�z�����~�W�&�7,G���Vq���4�J�0n��Өo{��p��?��_�����5�~s
�*�<��n��O������J�O�X>�
-n�	~'�
x�^�e O*��
-��hEs���a��FXt�u��ӥ���GO�6�$�\��,���长�ۯ\�����	�!�% 2H���$���O(�K�����H�&
$-��R�
ɣ0 U`W
�]�b�JO"Av��k��_ɸ��Փ5�o��i�_�3w����������m�o�y	��(�v(=YL*
��'�j€��@e�-P9$y�տ�կ-����_��wQ�o2B��]-
&(��m!�@G�$���X[u
-���{��Tn�6��+�.X�-���F�=���{�j�p-��
��C��N�N����L�s�����˿�ߌ�]�����4���hn-���K��������:�Y��
f�1H�򇫳$RR�#����������$8X{��W>�x.���8U�o��7f`�,��
�_�����,d���-�a+��O�R>�֙
������n�W��}T�
�zk,z
V�h7Z6��t ����wsi{������M��#;���g���H�k����2Ɩ��"����կk�������ߙ���}y���vg���fƼO��߾�e
ҋ ;�ͥu��j�4��
#Ü<�2�6� kD.�Ⱁ
9'�h����\iERs�{G�W�LqD/
����}��M��
��u��}��������~���a>��ZW��N��w9.>fձf���:�G��=
�l��x=Z��׿j<ä~��z��:�Q2��GH��&D�����z�m�ċ��a6�

[���5�Q�k����_�����د��A�k]=���2�m��%�C��R�ЃSi��
���ՍUCg���n�^�,
�j{Sn5��_m̡�k\uؼv�qSz��GT_74�:ԇV�ZOOcPK~t����H�w��U]&��zla^�.5��u�?��N�kR�����8�W���+tS�S�\y�֩._�׀}6���@�H)�
��f�f�)֜lE�g���h�X]V��G�k�M�۬����۫�����)�e��Rh�ђ
ge7r����KW��d�h?���
W�S�^���ӷ�TAR+|�ڠA�e3䭸>�փ<��>��Ϊ
^_W6�ީB
�o�ڧ˧p�-�	+]�'�$�NI]�>�ɍ
X/��]
�x��^���C�{x��;.�
�R�mO��'O�6��\l�
�f� �H^FԲ�T���\q]g�O�ڐ����Rj\].�Aŧ̪��z��R�eC7�2W��YqX�7��R;bϽ��rf�f�A����lu1��猵	W���O���%�a���8�ql�d�aV=F��Ja��d�����"�V���
�;w"hF�{
�j�
-m�Q�
�\
���
m��K�ࠗ�3�^��A����8(�6���"������Д�q)#�
-OC�Z�:
�uY��c)�F�EuXo�T�S5}��J����0u%KC%�Ԓ^�d
������#3\$5Ec�:�ʮ����T�)L�I�A[P���Ǧ��ٺ�e
ۢ,�1Y.���BP
�n�>��Io����Jӎ���t��U
�$P3V&�*�d�=Q��^��-�RM$a��v���ZeYii�i�~�à#f�6�-�Z�
��έaMH��]
�يz�ѱU��f�~�g�~{�M�^4��W����R��S&Wl�bc���F^d;'-

��g$"Lc�N�x���-��^�;2��P�3wo�(�
��Y�&�����ޅ�����h����d�>�߻�26r�۳e2T�#Ѱ4c�T����U��Ъ�de�Q�G�
k�
;i��R���ɘf3w��\d��F8ΰ��j������8$��h��+�`��i��1��1��ܼ���~��C���ČOƹ[|�B�$�)/��m1+��Vc1i�O�X�2b*�8T�e)����1q�J��J����VN"U�
�⯪��C���r�����w�z{�١�O������J
�}����4r�o(O�f(�a��
f��
)OI����֎���[P�G���҆S���H
��=6���7MY��3'6�Rd�)fM䯓���t��
Ǖ�iơ΁
��-;d͚9c⣻a�Vx���d��N�yj��x
-/G�߰�DR���h���� �`��$A|$�ّ8p�S�-���	�%09����
�*4�I�U�+��
\��9'�N�r7�q�
e9`R2�57��f�B�q��*��w����%�9��|IU(�@��Ɠ��,q?��8~�oZ��Is��/��B�$La�C����m���juq��R/�Y�,+�95�z���Jih�R������n�d�~� �Qi�2����:�U�uk_A_D�sT
�ń9gQL���!=מ��s�?c��6�Z`Q��Q�Tq�z["MC���)e��s��j��ƪ?�Ew��A�
�:rJ����Te��B`�f�YNj1�J툚19����q|>9��S�L���s+-�|�SQa׶��G�h
j�_�ې����_���YF�7N"r=Z��2#T�m�?9=�o��4/./�-���r�[쭫�ٞӘ�)t�g��(���*GCϝE�l�Na`���b�z�5,�x�A�lj\6� UB�<��������"N�F�ibE��s3�{rL�9”�Mm�	59C�M�$�������blo�1�T��e"vVb�S���.=��c:3I�i8�=S���E�H�$�a� �ګJ0����a��ݹ�󽷏���~`v'����*E�u�
��s��Ig�]�d�}Co���:jiF)�Xea�9.�x���w���!�X��DO�H��o����S�r�B��q�\��>��o��o�@T��'~8,q���T,��K�בǘ�W�Ӭ�h���0Y����O�g�Nu
diC
7G�Fk;7���ݕ��L ���B?����!Ǔ�&��
�
�Ig�
�ʷ�<��&r<	��Ď�D%�����c����`��s�
�‰+&��z-�d�˔�ȣ� }�
~PĈ��+7�>��G��Z�T�ƒ(�C�-rV��F�mQ��lF"7��P��2ש�x�E�
���I
-�8QMi
we���������T,�,�8a�a��vW����
-yR�3��K ~�MN{�

)����,�#B�OB��r\��H?������oFDz��&�9~��O4)�8�d�J�a�����,��,�R�kH՞�㢇�Kqh
-e%乔5dP���{���qů��Ёf�h��B9I݂e�v���YN"��<6�8/@\>@�� vt��;_�Q���]��"�L�e��7�^"YA�
#A�?(��r"U�#���*.F�ޮ�
�8g6g����QK�egr�b�7bY
 9aր܎��I$ ���F
�sc��]�L� ��# ��#��NÙW�|����Я]�WG�Ր
����庭�y9zn4j��$��^qX��
�S2�

��������P���UTC� ��c9� 5�DZ����Q,mP#1
ˣ
��< T�� �:��v��g�Dr�N�
W
-��
Y�����}�s�/�n�w�q��t� J
-��"�;b�7�@<@�;�,� Z�
@g�4�+��;Q
�S��x��݁��5>���|,�
�� ��
-�!#�ŵ]v�_)_Y at g�Lv �k��A�Km��C��<A"�evp^�ilH��âm`WUҿ<�4x�*`#�"�CY
�W#�&`���
3���j�=ǀ��_[���7��2����X>�\O/��6)�
v_��,0�I*�
��s��S������=k7���Q��~�8VQ�{i�]��0>q5Ŏ�S`��2��I�4�T��v�˓��&�`�85=\��\	 7��c��7�ۀ���X6k��cp���bg�4,����%{�ǀ�/��f��F��o�׆p�A�v�8ɭ2�kr.2a.E��s����
-�1��[o�H�oV��/����?f�?i[ �^ '���s�X�oR���@� 4g 4�,�J��
d���<F��[hѡ���NPҧ3s��׍�w�-$V�`�F���o!_��P��V�9����-5��q��\�
-�W�$�C �����e���z at ZQ+ 
W/ �:���
�*���u�Kz��&Io0E���
<�f�xb'�mM
I���#��;�7O�V�pb �����`i����P���O|¯��&�
i��x5TB=�}�_
gPv�PzS
(����r��B�凐+t��^�׍�K��G��)6K{А�y�߆�-*�'9�	;N,��$&�$��/�M�OKvM����*Э� ���Wڰ	�>�5���&�;p �.)�F��^�#�7\[ŧ
'�
�`��4Dt��7�T����?�;��II_�/C�-���7$���7����˴�m�M�)5��$�'0�

L���[��U� ��� s�π������r���%6��h�d#$�U2K�˥��d������,����Gd�bd-��sB�'\�sf]�f�w�;�Z7o�۵�E�y�A������dg���d�c�u�ZWgr$$8��c]����߽�R�XƭȚ�FO�]��+���m���Z{dNa�^.aF���y&:��,�4��&<N�`O+
W��b���n���٨���]��ALPrBk�������"��� ��+��[��`W�'�a�*i�Ю����9'�~*
�������Z�_ۄE��Q�p{�3��j(܇�O+�-3wx�Ƚ��܅��l�� [...]
-:v[�z���{Zn������$[o7�E�o�ʰ�*�gu�nj���Tc��ZW)��y�"�VN9
gz�N։��X�r�j�P�����Ϳ���f~z�������չ#
�/��es�涍y=4��W�
�]��Զ�Y=4�l��b%�4�����N��w;W��ǥ�/?�;�ﻮM��⤬���,�]�.%+��Ƚ���P~�����Ĥ
_�?���g�j=+
�4��ԭU�I����Z{v��F��t�%x[7��Ϯ��o�Iq
��*�+G��g�T;>�J@Γ!k�*��u�l٩��N6G���ͅ�pq�3Თ�A3
���tJ#$�
�W�=
�$�	v���P�q�0��厾(�R�)~��J^��B�~V�ڳ�w��۶�a���s����_�j�9d�a:�zv閕A��8m(��3"}_^��AA�
�̜msݦ�	����+��pʂ�|Ղ�)�~�+Ym�J��O�k��
K3�]�Q����
.�woM+Wi���Yi�X�Yό��p�-d:�{5�!���
p7m��
���m3���
2{kR��
�v7�	�Aͼr���OʆkԜ�vt�R���L���kU?,?#��a�>%22�o���^�kв4��N�p�����d�J���f]N?��w���v�ZK�M�5kR�YV�{�,8 at Jf^Fj&ve[�jj�
�q'���[�*��!�J�U�Oq�
N�Ѽ�P�d�)��]s�j5�<�
��*�i*}b�R��}�<��>
�6io,�a�ҩM�9�?m�i�q&�X3jwis�k������*k��Զ�IU�~>�>�+R�c������[j��*�BSXw�v��P���G�OJ1��.��aY�$k(M�K �z���Ԣ!���:��Vr|۫�Q4v�RD0�89�E�ͬ����}0�勒��nĥ��LՈ'��n�T�ˢ��X@�v!P]k]􌦴
E�{/TT�oy�3��+�:��md#�U�,C~>�A%�5"�e�����.�|�
�&s�k,L�5=��k)���=j%�{v�i�;H�@��n��r���H�b��
èP/Y������~�A�ZVo�6���6�<gcY��YJ~�g܂�2tC�Ҭ'��\�0���L,�ӝ�ٝ�B��#�>�<o�
�9˷�
7l{=AY����/l{;��!�^pR�l
!�J��/b�d�
�N=����P1R���N�cT?�!��UD���I1���HR��/妖"aզ%O��*�ͱ+l�KC� ��
z�׹†
��3�I7��]�e�g?��6��Ѵ��;�m�\�����9?g^ IR��@e��_\���[�I
-�]����h�ր����+���[��W���ǝ*��(�$��j��N���Z����'nC��E��V1O�l�~P�%�(���&
�c���9�Dor�rCc*;6��䒞7qr�)
�m����H~W��q��>:%Q��'ZFzE\�=��8�DŽ�"�G���B�Crgu�r-8P�k>4�.�ɰ�Er�G;�`�{�G��=*�l��0=�\4��_�U���A=���AE����%�9%�7�����^��$�Þv/U��?d�xZ�+�GZ�
eIKxd�®s��c����c��)�
�n�ƙ�٠���"0f���7���0�h�t��QӳԦ�VyL.�ٖ$r�+��3A�6^=��$�'X�Rb��<�5��
-���
�o����łZ\g��k�Z�f�Tc=��1M/^u9A*��H�
�s�k�S/V��L?���w	G��
!h�'�����)r�v�d�Z��M5he
�tT\�5{|�N���b�\S�$�.���h���vCU�b�*��m}0���i^��_�mH���O��F�U�۝.;N7|��.�qӇX���ŭ�g�b�տS:d��@IRڑD�s��AT��
-^[f�8_�԰@
-}�y���m���� Puh��ݾ�Ԭ0���
޸
->pI5۳x^�;��e��r'��L�_ݮ���*��;��5�H�a�i���8��}��
�M��!"Wh�N�?������yf��e!b2�H��h���h�b�Q���1�G�M� Ga-�m-d�� ���ϭ�za����a����Tr��-]���]��tR͆TR�Q6#�
-
-�a6��(�T��.�g"�ә��M��IDT��4��

��XD�GF'�>찈1o)�+���~�àMա���C��/A�u>v�x^�O
�S����)���x#5O$�f�Ddefn1���/dI��Z�����n"�����>���w*� �؞�/�
�����r���o�CaH at q�o$X�P
)B����eQ�Aub�, aba,V��-� !?@�@���̶������tNg
�Ԩ�P[�3X��
�t���$N}�
c�+����(��� B�)l���
�
����-��Y,׸L�XJ���B�, a�K����׀d�w@"
-��2~k
 񲯀x�5@��I|
��)�N6N�Ӕ׹���,*���+�R����2/�gi�_Q$u�0\��0�L0�� <
���� [

�82Y@�[2 _W
�o�K�K8�'���
-�9 at A\�Kza0���x0��gY��D2#L:���q�k�x�rQEZ����o���e��2<I�|�@o�
G�5�����ݳ�2�/T�Ҁ�O@�gP
$�G6
hdR4�ub)� ��2 ��h|T�۝꓅ u�d�_� 5/`�؋�=��"6�h�¦�8XT�u|�%ŤgRO%�&&�R�cQ_6��q��}">E	4<� ��@W� 莬z[� 
�
���
�j~�;
 ��b�^S��X�)�d�:`
r
�C ����G���#�ݘ�S�p1S��'m���+�k���8��j�.3�tSԏ�2<��"HR��	
�1d�Xu
0�a�-�y�˫����֖
`�8�� 
s>��?�Cv
��|�܍�|I�y/ v�n��:��f҉#���Q���K�g��\N����e�._�j�UFwA�OIy�ݲ���X��	�m��xp�w�xs1|Y�䞀��x��%>���*�CS�_�O�o)�O�}��"�����11<'��qoy5��1�����ZM�9P�|)@�V��L��
-IPr���u��8�_�6��%��u�$��	 �J,�<��FH2{ uŁD� �O�����8������_d��Z���`B/[���T;1)C����O�K�R뤞�>��r�/����&j��Lk@�
��Y/��(�\�#%����J
-��`5 �����
�:��]�
�
nV�9M��zM~C��hWY���(���Jo��~ɱ�g����ۿ��$a�}o�؜�%B��K
-�J#t؞ �G�6����jm��>Jҡwxs��x��7:���a<��0��SY�D	����_n�_nۿ�
I
�v�R��m�M�5�m�uۖ�0^��Dܻ\�%.���^i�,�&_����
�j�d
$�����d
2b��m
�X�a,��o@��P�l�٘�cΤ�VO[�|�o����jxa`w��Y��w�Q���&r�K���<�)T��`�/�� �� �OFl�f�/?'X����2�;ٔ&׃�-���֗�ڞ}lx"wx�AO�j=<�M�q�:��~k*�s���qӡ
k�
-�u�e&z�y:�'�6)n����S�J���59����4Y�~c��#
�������:Y2g�(�̡��z�����؄�Z��vf�:���u�ˉ�N�)����T{�a0���lz(����=~�q�X�{��G��4��+)/�]�������e��]�n[~$84	6��#���/�*���Oc?Zf.�e8����&�
r��$p��qX-�F��
F��@�C� ��F2oC��aM�W���k��U�m�[�?�N��]:ҝ��a?��
��W�w3�Aw�J���j���o���N�A���MF�LZץ>�t���$E����R�����1�e�[g��NP_�����m��ٵ��>�������iNr$фW����N}UC[u2�o��տ1��`$T*^/���ٽ��lu �;o	�*�qX�I��ګ`à�q©ݑ�k+�B�V�!/�;�74[|s���Mx�H5�x������R�V�K���+ժu�ժݮ_���I�c�6���%�)�_���6e�����)N�5)���+�g�Z�5��"wӴQ*P�ն�Kw��
O���Hvj�
-9�
�I�.��*Q���]
Њt/?��+�.��,\2�
-�s.�ژ''n].f)?U�W��B��o�U3j��+?�m��m�y>#�n9G�87��WG at l�����2�$Rb��$�AHhm�܄q#��JY}�
�0����Y)f	�^���V,�A!όf�U}�Γ��.�m��
s[_�C��t�'����f�4Ag�'f:9�H�W�B�w_m;��
{X
�-t�s���'�=cy|l[FA"�:b�>9
.I�q�U�%�*�Y|l�c�U�Qs�f ;��!���
�A6�Q1+}�Z&�H���H��}a������&�����޶��ٚ�w++
�_`�̫�db�^�p�g������Ej;��T�A�T%�YIJ9��vv�$P��Y"��NJ�K��\)�}�9Jw5+4.�A#<����
�F�=t���ٍTkR]ǟ��rWǂ�s���o�.�1\]�3?Km�&�|��~�

zݡP-Xf�+
�j�K��N��Q;�
�j«�j�|�v�u"?��^��#���+�
���:�-��'Q��tj�X���{��|a���e��:�
��R[���*�;�Fo[�g��.���s��ɸ��A�p]ꫝR�������U1�*[kY�U�(}��@��ۡ��6���[�X�øs=�:�3����e�1��ՠ[>���5��It
���'$��~��?�1�Ct�D�Zp�QMNa�F<�vV��<(+���ZF1����җUy�>۲��FҔҗRv�
-ą~">�yam�T(Aٮ@���31���u�*�}~�,
Z�g�Z'�IaY�ճm���3���$�r)��Ƶ�_��[	���usW���[�V��Xna�$��L\~�+��H��Ӥ�R�%���K(Y+��J�)�i ���@[���NZo��X���f�
�h����gn�/07�Ye���O��r���yF�V3�j*cayCMՖ��KLM���b雧<.�r��
-��6���l�-͐
-,��
-..	���/
-��J�{Z��������ܦ��Lo�^��=�\�'�Sk4�?�4=0[-�=���@�q��P�Y�M[�7�A���CN�����҉�W��
��� �?5(
��pq�0����
�E�p�s�6m�-�w �5�y
�Y���\�T7���˰�޶Ī����F����ܚ�j��T�ʴf&9����Č��X��,��
�$&�
��Vm+�s��'njk���az�5�Ei�V��4o���R|�

-�h����|�r�?8��P6���/��;/���;�I�4��<�H[�a�����D̒�����v!F�|FǷީ�W��;�K�
�E���=|����4$�W��?h�>��꾲�3��U����lME�U8{
ۣ���Å
fމ�"m�vl��ܧڕ����N�=l60ڶ�
��
%j2�p�C�O�j�b��u�����xe9D�#��>
W0!����Z��3�/b����z?~��6�rT7=�nJ�N�X���K���PR>`��
��Q��������O��;��=��= jJ"w*��^RQ`r��(�8bm�U�}���\��-�ب���x?bB�BhK
eT~�J�uHO~P�����Y�ڞ�Py�j���l���kO��k�뺕�oy��Q����]�_ܹ
��km
2}�8��㼣
��!�ʼn$�ݕ(�������]P
��E�Դ�
�-k��EL,�
��dG�R^����F��D��R� ��� �w�ͯ-�̻M�?ﴒd�쵼h[�f͍{K��[���$i�k� [...]
-ݙ�ʻЯ�|���qOjuC���
��Z�T�ޱ&ݏ0q��1� Qh[@y�m�
Ty�rH/}��-���><Ȼk��ޡ
��`V�f �Iu �UB��J�Ax
�҆W���"�8��f�"t%'�J����jR�
`��ν�n/�3�]�|y2G��%q<e��ùWz�I���Yኪ���c��[�0$�^Xxp���)64�
-.���M�S��g��"�C`f��Ո�
��
0��bq;ɖ��t���,�O���2$�x
Ni[o�
-tz�:���N8/�
-K�
�@�3b`�
�)�0��O>� ̛�0����|,]�>�e
�� {`N,�!�N�`g*˶��v�\tj�3�K������W���_�7wi���Z�=�>��������aq¤u�v҅#b�
-!
d�
-��
-����b)�,�Q#�R1��7�e��o �
�'����2xO� ^����H�i�M�ى�Y>��
Z���	��O�ũ�a��f���$��
�3�˗'
�3��Zb̜4u�
��(� g��7@8{5N�����XD]�ŲZ�a=A< Qܔ �NW�H�1@�ї���-�3}02�ά�F�a^�
w�����/�N���9��t��
�w�;&��
�^����C��g at t�
 ����  ��/O��$ �:�RW��� ���b�Y���l>�tr sJ��A� )" ɚ����'�/֪u
���P>�_�V��%
���_�MO|#�����0o�)���
`镮��K��st�
^��h\�+M
-o|
�kP
�T������ Ռ/'՜}�"�@�
P�E�R�?J����P����c���P�/ņ����D�;��ݛŒH���s�ď�b�v� �F�fw�
����-=>q)

����\�>�
�@k��kz2�0�Xj}@_O+@�ҷX����W��
����߆)
Х��3��>V���S-�0T_�'/d�L�fM}�RK��S<��TW��q& �)���W�%�����e�?�VrU����7��:�@r˷���z��;
���`����m�%��E���w������K�<������ww�H
m��7�t�\oe蜵I%�!��EKm%Tm
���?E1dV�_f�_p���&��ׁ˵ �n
o>��dO�_n_�_
���m=�g�-��7x� a����P]�ً���]>$+U&
u���ؘ�dLj�Ɵ&JJJ���Z�O�Ćn&i�_
po�
����$�7��&�4��@\w �D�kZ-$� 1�A|�����
���"~x�x��9U� Y=�^��.��^�("p}����un���B�D���;�O�
�
����_p�Xn�%[7�2ܹ@i>PJ�(�!�� -́
Tq ��5 �owi�M/�'V
Q����5�h!Sk���L�Ó��I���􆤊�
'Q	wM�Wf�7n�o�mBm���+�1�Zq���ۖ&4���
��
�h�Kh��	�X�1yj�$�{8M��A�}��\����7$%��H�붭u�}������$�6IIHv'K��I��&!��������%`\�K`�r0��)n���:���~?1��W6B��n�r��h�:Ų�'��O��<3�'��7��՞½<��V���!���+?�*�4U��{ќQ��&�� [...]
�moh~�3	F�,���}��6�S�e�gm��c5�R�u�)T��rT�>7"��?hbYu�:���DOp����_��8kV��ӕ74����ĺ	ψ}c���=ҏXpݥ�xm[m��C��%����iE�
�s�rǬ�K�q-W�3���gM��/��L���p-��7��]
-f~��󮾢��3�sk%&������{��K`w�b��K����6��my�U<)�;��Z�
^gO^ؑM��;t���g鞊Y�

�J�^���(��-yW�~W�w�\E]�V� ���c����z?.�CF#�P��M}�Owɪ�_��J�Y���(�V��V[�G׵�w���F~U���c�\E��w�1�T�9ts�X-�z�`�
e��l��dgˌ�l����rJ�%��-w
	�>G��&��f��KΜw����^;{�c5
��j����?��$7br��Lhm!Og�
�B6�
L&
���}�����h���{��a	O�6-�IM(YY^�Yp`{_��lwM���Uכ�>٤���)U��G��ם��
��тU��y%��
�j2��5����Wev�$h>���N�Q.�J��A
!��hMڶL at V����y��2�K6V�f�������T�x�)�
Y�aL;� -���˛MM�K=5\�'�F/��� ._�j݁���a|�d[���cv�>���5�m�$�O`Wc;��c�-��M�ҦJ�r5q�D�?�ʝ{�hy��������<g���x୆�KD�y����J�rt"-yؔ
ٖ2%�6�Ҥ��KY
Z��~��q���jz�
-n�_
-
�E����@�P[p�t�~u]�:�|���e�Ǖf9�)cЅ'��y�����\�<R��!|V
5������z��m!zK�
�HY�%��2?�8�eA�YM�^u[X�&��u~;�|��/���zs��e���f�c��zM��z��b�_I�A@��
x�9�Y{�ڲ�q
�'��Є�
u{*���	|����^r�Ã���@BZ�Y\��P�s���潗�#X��5����W!D掹x���
��ƶ�m��o��e��r�hч���Ew�Ip�^MD�^��K���r��ړ"�Yײ�U��|��'����ߧ�]�Uȳ���"1r�B).H(��ݗZ״�@cڙ��B�s���]�Éz	e/h�f[˵�*�G���,�W�
-�z]�
�
j
�7��	�YI&��'�XB�=Q���p4�?(�D\��F�Q~ӨV��'l��|t)s���
z�0Y���z�R}��rԚ;
�
�IN\��pbg�g/���*�݅�A��Hb����@s8�|�Tjl�l*����,K�Ht��Eb����e60�}3��j�r�j�#b�6��/��W4���b����i0����
.O��;��V�t�����kƎ���۞�笪Ug�m��1)�Y��MaG��m1�+5�G�1�0��$��@<�1qwZ�Ws)�x�����ݍGX<�1�
�hs��P)�ܠR���f�w߷��H��k�ա��O-^M�z�4/._�,���u�?qҊڲ�d�d|�1�#S��V�=�A��
���obM�qzO��b at b%�F��Ƈ {mߦ6,^��*v()Y�N�j�
QO0��t>$l�
-�ޣ2|o��y���H#�j_��,���j_4W�JJ�I����g�X�r^�=���a
����fzFM2И�g�!��GA�ʻ�
-\��v�<�
�,&�3Ǡ��-V�z4&�'��o�sN�b
�J�~��
6� 
�~�:�'�M�
ф��V�P�
-��A͊�vm蚖Yy�Ϡ"��"�>��_e��?yl�a���&ceF!04�o��߁�g��9vԗL�w�\Ψ�����B��+�ȵ:�1�Ga�nA#}4�������
�Y6��_& �D�X�\�͒h1�:҂������
-�c1��6d5�8�/��X]R���H<w��7
a�j9������V��F�as�t;�#�k�+�x�"�?��MJ
��db�Y�4n5�J��2�rdJw
- e�3�"3�h�ȳ�:�{��Am�h��sh�Ȅ�|��B&�ü)�H��뎚���ss��ݦ8{m�0�+��ֲ�@���
��
�nd�P�b��L�\A�}���@ t�K�|g��c�O�2n ]�<@GA	���
-�]T���X}Բ]���
-�Ӯ˫&O['F�>�;oԈձa��s�S�À�qG.ʅQ2�9^�.3���M�6ڛ!=���-���2k
0���*
c�笘:� ,KR���X.��t3��
`��`�-~y�)� &��)��GnĒm�_g���g���T��%#p��
1�hr�G]�D��bG������%֤n
��,�Ho�V���A!�a�A<R�k�d �4� {� ��H,9&��pJ��2m��V ����$��f\��zXp�����l;�w�Oz�2f���I
�|�7Uz1�`~�f(�D{��k����%z���i���˸?����%����f� �������򉥆Dz�<9��XZ.��H/�N|�E�)�t�o�
�O�!��l�Y�$�,��澞����("

X^<(�c�7��Y��3��O�_���G՛����mM��:>�� ��
��cy �� �џ���>���P@� &S�e��
��P��G
� �e��w�>1�G�h�@T�[@dO�T������8N�B�k�\�`���?�t
3�?��_�ox�+G	o����.>��WC��*��'7���7 ���H���J�¯&��k
�k���һ �*��3��_ǀ�_�c�* �j��u�ՋT���=�����lj���JT�^�y�<�����¿E����(�+8��B ���ͯ�w���R ���+~.���e�U��f�:u� m���;K@}����e->��O��a��|g���ep�n[�'�I�j8��:�y�7
�
Q¹�-�%��|h�f4H���	�� ƚX�b�D�`S����et,�}s
`B�����,�}Io���|ထ��o6u~��s>m0�fM"K�9�]�,�D��򪃀�L�˓�j���
�~ [...]
-����q� xY O
r����;�7��M
p�l��
	Iz����Zbu`�g)mS�lY�Aqi���~���<����P�-��_�mK���B���i�Η�27 �W߿����&���	�be���ŀ�y �k+ �O2��P&�j<J�
-�o�r?�M3�y�����i���&%%t�H'��%�U����n���n��7�V��o<B7
�h %]��a
@��e /N- ��/����NfR���Z�8���Ʒ�5�1M'<�
�����m���6�lH�mRȟ�����&���kr�rR=
��9X �&�@����V- �7�@+�8�Ȕ
���ƙ^jH1L���՝�%���''픴ηa~�IJ��m�8~��r�Pۯ�V���l�_��_`�j����	LsJSʦ�	�>0v�;0|� F������E��Ov�~~�p4���IFl�ٲ�mcq��۶�������.��Vk��b�&o[��ݘ�@��J��sQ��9�y��O��
s�
���fa}o�sI��-��0��
C������d�|�=���xf��,��������#��n[�R��\��i�;ߝW'���)sl���Ki���hW���OT�~����e5��e����;����8��lַ��y�IyɮS	o��3M6��b�P���	 [...]
-�8��8�����J�s:''��Iw�����Z�*�Vov-�Mm�Ҩ����To?v�7���HƟ-���0���v�jJ��u���-�=K��!�Сm��A��tR���(���_
-�~�v�^��ޡ�8�q�4�v#�)�
��
AGITh� �>g��ϯ�~9�zV�$��]�n��^���a���<�u�o)�TՕ���.]�)e��|[�{���&__l�*�,|y~�?�hX
-a�O���T���64C�`6
SW�8�sҡ�\q{�Bс.?�W'������Z���藝��L����_
�Ed����ԛ��W�$�}݄*}���\�<Y_��k<
-�0W�������(��1
�4
-=���j��i
-U�l�K"�=7�V��n6�hBj���ڬ��kf�;�ڪ.���N�n��띪�޻U��4�\s�2�
ce�J��V�\z��JI�0�R��܊����>�_���G�Qh�C�ka����.���
�V���$�v��v�
e+�
-��d�dB�Ak�}˒�y����{}T4;p�\�\��x���H>w����s~3����sD�
����e��c�Ⱥ���vE���*�,��� L���B�P1)W�f_VKz+
-�������x�
�p$
��
/���oFl:�ʤ�9g*�rr�P�ѯZ+�ΕN�G5�YS-�6v�L�Nz$�t�
�)��&SZOo��
-
a��kM>o�a���!���^�a�Ck�=ϔ�x����|+�]srn}ʺz���A�
:��6yB� >�I�H<��G�Mgbx"���LJ�����&�~��,%����bk	s��ȣ�	��F�F���(��7Ko�oV��Y����'B���B)��cՂ����i�NV���*y���K�g}����&�t�]R�jG�9Y�77~�0W���,��(%X�
-�|&)�A#Ϸ�r���FM�s��'7���3����J�2�3�)�ã,ϧ��
���t;��9��T�:�:��B���p&��o�i�;&˴�$jD
�+h+X��d	��v%�ݖ��v���o������p
�FYw�%خ�dX���9�U�IL�m��Q��3��#�_�|\�|j��5m��k�X�ڈ��)xs�h�ϵ0I� �adV�^��C�$�i��Fi˷�w��

�S�=���ʒc�ź���v{�兔
�+�s�eT��1I�y�/n/�G�9Jg�&��t\���� 1���"� �#e�1��V�"U��gT�AJ,
-�ݮ؞N2�:[�TJe��?�Ʌ
����;	�@���	��ؾ�`�Q�`r�
V��%�|aK�:xY�8�X�
���C<��X`�1�,!�rt���#��/S�IQ�fj7#	�t ��J�5OĜ� ���O|W�'!r�r?�V� Q,b�����K45���:��x)Uu�ck1�Qۤo=
�+������4>��g��~=��s3�—V�ܚob��~O-��U�`w
-˥���)R$ٚ%;�(� �{n:��q������R
�O5�aB��C��f
"&/�ʄy�
�u�d��>��φ�@ց�tx�9;�%};d����<���ql^�LbQ=7�E�"
ߒ���s
-� �qK��ၰE�FH�����;lE��㼄�7	�
=�w;t�kF��~O#���Er�}Erh�A��c�a��rQ���4ۦӓm%V6��x��l�L��[Ɵ$i��ѥ���U/qC
-��CR��C��?'�=}�����XxGN8��1�'��9(�(�
z~W�J

��&�c�!����3�Ѣ2M�7���|[�@��P`>��4&�*p��qb6
fW��7׹�.s)޷tnZ^ċ��LfUW�Ï���$�y	i�
p�܌��Nqnx1���-��
�b�i�^
-�+:"u���C!9����B�
-�g]`f���Ww���
@T^�@�x��f L��D��,֭F&L��(
�o��4\�m7q]�.bf��S7��M��
2<x�a��m�0��Lыe�許���fw�h����)�k�#Z�7P`
и_ (-) e�@��
����S�$�!��0�\
+�� ��d�W,�
o����`l/�t�Ylbo[X|��q]��p�5&d�9�ݞ9�6CL
:�83���z4(w��
-��>ڀ�g� U�+@�(������g
���K��� ��)
Ў3 h{�p���V�ϱT�3Q�J��{*W����fFzƍ?��&t�)kr4ȍ*i�h�]]?Yp!G�
�W8_@�]k5��
,�����
Bw
0�= ��|2
-�� FK�=�Q��b�7��L`5�]��8>�p�'��E�f��Jƒ
-3��S�r��Iލ�z�M�*	K�Q�d,)M	&K�q����~�C�:t�ȴ�O��V�,�� �
�6ѭ����8 ���	a��f/��fU�-�60�
���{�}
`ʮ
��I)һ����d]vH�9�__l��.�~���tC+)�lm���+S�?r6("t<� G�
E�[u)U!��� xܵ �zo.�:W��2EA� � Wz�����x���q�k��~�$��|q���A^��r��Ԅ���0ߛ�7�x�`�E���P�%9��=�c`�uQG�oz�|O�`�h�O )Ux{9o��Av��g@n@(�>^wD�ւp��<��K�H at 0� 0a
��l�i���r˞��R*ZH	B��#�3)����ʞ:�.�Vx�j��;Y��D݌�� ��3���� �s�&�]!A����kf0��䎒�Nšd
K at h�N
@� 
���&Hj�$0
@܂ ��2q��z|1��B�gw
��y�MO�����c������&��8[E�Lq	u�>i�i�l%m ��
��~���+@�W�	��� �
%5��#50r��M at I���
-P�$�-k9x>'t ���jM<���q�
��M&��"A��N╘�ST"v�=����H�c;�b�-�8�_)��G��ɵ�o���o.�F;b�V �;�q8�q��8����c�1/@l�H��q���\��=Ǎ�08ie>U�T��/�qz淐��	�3(\
�
bt�'@V�nH�+�o~�7��K*��o�;��c�~ju��hO�BXN �%׀6�
��
1 at K�2���
��$ ���v��a ��{PhWH3�1D�C�4jl��H%z}�>�G��.�J�
������Ǽ���_J8����+'�_׶g 8,}vM�^{�b�]dҀUBo��,7��'`I�
��ï�����sI���Ip��oP�͹�H嬠_}���)����eK��/?Հ��������	�z	��@� l
C:	i)���?ܯ�__S�oyc���o���z�����q��^"����Y�I����E����_��To�� 
���ߥ��)��\��
ӏڥ�%
Rj�a��2�=���$�.	��t
$�
H��1�X::;9���F�W�Tɣe����E�/6{X
R�O����a���'�C�mX#!L�팳_}�а-�=�]M���1"�� sc?�$f&�1��Ҷ�i�8��!�����w���X���
fK���_��w�B鋓
n�&����i��mV��O�헲��,��Q���X��� �po�050P�YPH�}P ��s��
Ƚ��|���	]���Ge
c~�nB6���h+� (���h�
�m�v��
��>�ћt-���#�\�b%y�T��I#�f�n_="���!�u�W-,\@��
-m�o�;}qB�\����3�!�?������"���0)���8v��D���ē_�=�j*G�Gv\���ܒ�u�ZQ�/bb��en��
��M�s��~Y�
�N��n�k�^�����Md��Br_���Rgڡ7ZmN�[��vhXm�`���+^�َ3�\�]�U:����������n֦ <�N%�^��wt�m�x3�
5������]�Y�xWff1!O�j}�m���đ�����c��ءva������m�r����<�iä�p��V=��(�$�����wL/� (��=IIS��u�z�Od�
�]��Ɯ��G*�^
/��z�����
-������x��(֚Wz�>��6�=@z�j�ֆF����[.�h��T���.C#/�#+����Ɓ�
;���� \o�s���ݲRx߬���� �
�%�V
Kw����^��t�њ썱��x�
iTFm�,��yt�k����U��h*LKD<��
��
�`�$	b�'��a1����*�ߥ�~���@�Fp�nBߵ
�N��y o[zMދ��UJ�~ى����ϓ����Z�A՝Ⴍ��.]s�h�ƽ2rU����$�
+��GVF�]������"�C��'�4
K���!�O��yM|��ԝ����	���R��c�
-!-B�:5�!�U�(�+S�VFվY�W
��5'v�iOܒ.��R�~��fNjU�.����
ͤ�~��7�-�o��z>}]�����3
�kC��v!9H��� ���z+=7)�T�a��{�ES���|��b�5�E中�U��_v�|+�S������4u����<��u�[��o�?2�H�2IjTH_v�Az���t�/����S�Y[��aw����5�(�
�Z�!�/N�f��r��x��ϙ�u������n�l�� Y�(RY>Zd2޲.d�x%��l�\z��?����S�2�Ry�<H���,YJf7��ո&�	K&��])��$��fO�Z]�ip%`�zVM��H�*�^m�!��!�0C�ڥ3��Ii��J�����K>]���$�^nI��|&K
-�|C	2��<#XZ>!4�
�1��U�H|
AF�c�-Nn
/�c�N�c�r�uw�ź{/˺����~(eh|W.�{����W��
/�M�
��*a�C�ƽ���65(��§�,�iϷ�w��p��jp��x��Z�خX��<�K0��*0�D&�V�����*>�L�Nҙ4֏�w%��t&�����d�
-s���;]2�����A&y
��F�r���֣�s�%>��yȺ�|�v�1��)���`��kŨRt�$irO_\�D��?��������g>�O����WZ1]�Nb�����o
�L�Y��e|M��8	�Z��[ ��W��
������LMgi/��-�VN�.�
��9Y�1}5:*=N�U:3I@�s�����qߣ�qM��x>���5�����:Vʊ;����)sf?�j�Q(�q����F
SH���l�wbc�DKFT��
Q��a��f��4��Z�
-�D~{�b�T�vO���oGck��&38`S:�
��}E��p�3t\��)_��.�$dgUwD-PO�Ц3��^�+
-ߐ
'} 	Y�[FD��lj����;j&���Lmuę\/���Ls��3�^&
�$�B#
��c���9�^#�GmvK`]s���s�
z
�'�²>��7x�Z���U�.���=ru��d����h@/mLl���hW�9G���>����V�
�4;o�%�vp�
֓�"&��=��#:h�(4E�h�O�h�@hrU�j��X*.�;&�G���k&]r�݅~rh%�g��*V~&T�vq;�:�+$ٓ��.Ѷ�]".�zD�R��{�4��:��FkA_bG�u��?c°�B�i=��g�r
d����G���`�ţ��Q��f�yT���:����:9�3C��NF���o�9���#^�ؼ^R��'��C�͖LHd���|� |g�X*�j�.�{]�O�CL�f4�<h��-��m�m�#�|
�>
�����
-xYuT��D�9�f� ���
D'�SC���������դ
%�U����Ngڋ�lp�Ƣ���.~�$�BHBK�����wq��!/
t0�tг~��6:@�qb����
�t�����r>�������e���Bp]H�e� �6� zu� z�� ���K��:"K�f�G ����zx̦'��{��)UoqR��
�R����S)uq���~��`	<PСzR
�HN�����i-��.��	�
@��� ���!l� ��� i�6��񓋧@��
 i�]O��Y����L����N��a���/%>f��#hA��{[��
��bG��
�(d��C��\�G�ʶ
�k��� p�#�\�@�<$z�z./��
@��2@��
-�{y�G��Nj ��� ��� �sE�g����'Vb�w1�myL�r�Ƌg���y��	�`�xg��b
�T�D����3�_����b� s6P��s��xA�k m1&��
Pս|<�/��t��T���<vZS� ��@��;@�[
�T��w��D��.lF�GX:����6fJ�I5�ɔ��ǕwU�4}�����./��<!#�z���b%�1�
-'� ]� }�4��y�lA����>��N ��j ��1��0�cz�t>m9/�=،Y��㱅�*�;8���0�;
��m���L
-��S��q#��m�8��zX��vБ�T����n�5̀<�
������ɏ���vsV|`>���'�A�{%
�,�؞�K��e��i`#���Y�\)�O��
:a2z���\��J�
r���Y��8_p�j�*:F�}$$�Qp�+��V�_v�
�
��[u
���\|�p n�G� ���?~���|�� �8 _j𼦦 �� ^�G��|�YN��).L�fOC��������V\��Z
�>�	6�c4K��苗�,�|`{^x�4xY� |`N~�� i
��
����1��zA�҂� �l®�m~x�< 1�3��_S@�X�9̻@�yr�}��2�Q6��
t!V��`�u�}���â���Κ�4:oX�M���ִ�2��%�T_�Iѹ�񓫏# ǩ ��7��P)�T\�B�6�TG���eA
�݇\w���{s@�

����H4oG�K.��E
a�ju^�;r��
��%�+J�he�_�
-M�/��R��L��忒o�o�
��:�+��P�����~�7��9�����*�C�8<�0+@
��f�e�� ��
'�}<̦�-k�
I#��'�)�=��(ʈ�/>�G�����O}�08Lr���	�n
��	h5�tk6t;� :5~x�	�W��E��T��<qdJ�.��D���o�~SԬ��j�p����y��t��OKK�lº�a�Y�k���}�t
SnC{��
 {6�
`��
��.�l�X�� �{� c����2
�f�w�$�'߱�b�4j��>�Z�~��w��'��BuB>a���"��һ_��Й�����y�� 
.�J�B:W r�~�؀�q��2"�nipڱ�^K�t�F��ːX�z��Fc���6�C6!�W�����l�Û���o)��|۰J·���O�
-�mKA���
-$-* I~���r
���S��q�%�/<�i��u��O�/�ɟ�}�(�CaB6!������?���Y������O���+,���
�=�
�m������
d�!JH�y��J7F�_e|�.�:�|-�
V���sC�>~r�ۆ��C+9�[Y۰HC��~K���#YX��w~o��(�;P��'PD��'���'@��J��
�A~_D@���������t����~
\�38mۜIJq㔥�����>��g��E�
�#�����d�[٥�LD2b��
z����ۢ#o�����+_�M���HS�g�K�BK��[Rc�4p���
W�^Z�4�^i�dis
c7��
�QՠΓ�O��S��\�J
bW
.��[�>���qn����
��nk
�nmM
�Y\��F|uV�����u*�{��4oT��0��
�G�������n?[��g��l�"؟����E���~D���Wۏ����j���[(CD��w6�!��QB�Ʌ���z �Y#Jn��D
E��G�1=m;6scfON�:
��˂���I<@�Tu~���ښ��b�i��~'g\!~,Q��_A1�ʢ`6�/ПԳV�i
�d���ۢ]��n�mUZ������NA/Q�I���.XTQ��i����
�c�$�&�QV�f��6�/BO���ѭϹ���U?*��nbm���z\o�MZ���Z�>D%s[N�f���%
f����r�rz����h�?��v���k�1�`��v�ye�.��K����a+�35�\�����
�~���r��:����g��Me�b
 [...]
-MϽt�1�?R���`�����Z�B��h�J=��<�3Zy��(�Ό�2}O��F��g'sj��ҽ����=P�O��@�c�+��8�!Ae�]�a���G"oO���rc�
&sP'�y|���M�7��s�I2�\�l\)���ԭ�~�}2�i�ܗ)�xT��^�o�qz�.��?[��g:�l#؟���U�`��7���X�
v�>u�B�7�a�ϳ�K>B�槾�vݲt?�;�rZ_����(yYF'i8C0�L�a��2K�:�φ�&���(���~��wЌ`?L�;�o��sҌ`�8�!M�_���?�Ά~m���-?1�!��/߫'���
����?�3�����y[~v����#=a�m��M[�������K����4?������m�=#�/������S���4#�/����#�D��=�+ m�A�u�gZE����,O����F���Vĉ�
퓾Ub
-p���;b`�/ޟf��m\�s��
�L�C��4.@�Q��
�g���\�AWW�d"u�[���
������H-O�j�R�
ב�v��3��gG���f'�
�y����9����Tu����ko�N��V��\O��y��fwF���S�n,��ׇtl4�ܱ��!���ynV�Jt�o�!�Ge��D��M���#�85�w�;X��J�jϕ�l9˜����`�6t��ڿ�Nwfݟ
!�0��"���W�����!��cR�f�j����w����ɴ���ʬ�zj�
k���F��PV������F����/O}��2Ձlˀ�U_� ����H[��jR��P�N�@�E0�C]�h��97F��K��,+zy�ֻ�R��f
�f6/�K�`y
-��E�ǻ�@�mjw=�,odA&�	Mn
ޏ���lf��֝���a��
�1T^�r��了t�D0�q#���t~:\-
if���<���>�=��W���
�iF^��
-�t5�
F�^��� K�G�uUT��N�Wxh��Xqr�g۽j��K�`�/!�2
|�X���<r�Q�ڎ�f�_ڼ�:ڰ��zoI5?���YiZ�C/?��J��l�.�Pi�6��zq�5D'?�ώܸ	��x��'��� _<
?v-�Nϸe��n��RԖ!;<��B�.��ycJ�:"$�}E�	�
WI��G~6�nЇ�&�}܆<�.��>T��}갧�kGs
e�K�J��0r��:�g�^���:$�Ge%s��OR	�F�h����!�}LJ� 
Ht�unVR
��K;|��ˇ�~��Dh3b
v� �́�CvԫCI�@�Jƣ}>�����
�3^|6�Q*�a�m����

���9�����f�ܣ��[K��Nw%�������j�ץ;r�׺��5�^Z�ڸ���pi��赉l�p���Dx
]��2�ѣ�|mh&���Rm�g&�&��
�{���gc����4���v�d:⫞�ŲN웵�n�X
��I����{?½�n{{���F�5
� g�΃
w3��	#���l]�v�N�%��bp�wdY�z��욍M��hP
-��KGt]�E`�
�T������T�M~ϗ�~~����X���
��x�-]z���
�K���
�ԨӇ�Xs{;��vݪ7\�jz1!�}{����N9`�u?`�
p��i���w�wUx\{1��bn3�S�;k�WN3_Zn�~a���j�f7���lA�u`?��	�x�{�`�����wЌ`?L����#D����+�#z~��K��m�a=#�/�׶����������]m�9zF�_
���'��4�?!�߫'\#����_m��
)�����4?��������#=#�/�ߴ��D�Y'�:�X�Ky%(�
���|�����:nX�����6Q�l�ov�����ص��ݍ`fm���M���
�����W��^
X�`
�I3
��jr�΁��ӏ	�U�d�]xɝf��ѱ�A�YF�cM��~�v�Y7ޜ|��K�i����g����_B�6���D�5��R�4m�
�.�pt��I�
]�k{}
�?�κ>�ζ�nr�]�@��y�y1/��m\�X	<_�	�~Ot���~@�Y�D��-H`��#W݌/��I�r�5�����vϫ���,+��c���P�d:�X��
��������W��3�6�{���M��L������
)�uf3�8��=���=�o��n���蜮��,��IYZ?Fč{
9�K�`���Y�+��؅+��F
�����K��Ʌi��Ө�
i0~��R�m�+��݌�M���0�·�]Fj����U��#����J��
��DS;6
-��������lr>ڴ�s���%�l�^�fE���q(Q���Y}
ۡ>���?����,��9w&��ρ��d�p�l��@��p-�L�g�;`��u;״�0J���ڿ�s��޴��5�/��P���öX&;J=1W�y��=D���P;��F4{�D� ]��G���>�Ҳ��M�\
�؇iroU����s�)
a�ɵ?�
;���e��Ԕ�b�v]rМ�޿8�!��/_��^� ���Q)&<�">�4}���({Nh�ԵЂ�O��"��,�Ez���1l�a�jض��B�+ Ŗ�T#X�����u
�I�sI�[YJ>r�7�5NO/�]�����@՜.^�����fx�AO��G�#�B�6�-��i�Xb	�Iɖ�}�����~D���P�
�u8*�G��[PSM�f~Խ(K����X�����_�Eܢ:���h��S���e���Q�5�b�=��m!ӧű�0�i��|fJ�3$zư�n��\N][ˌ�M�y۵�e�9��m��,D#�mT'�u=78eɞ>�0��e�%cG��*����o��	�1�d���	�>����.w���i�\.�,{��ԣ���������N#�����3�u�e�w��J|%��Fj�y���p
m ]�^�m���#�
��A�l�qaD�p�V��k�X-��ǒ�	ff,��1SH5�אn�� %�o������NI��x��Wc!���U��I {� ~�F~q�_K�C%>���Z,�jgJ3U���N
��!�T��齇�û"�����v���ħLޚ��7�T�ިw*A}����ܮ�~d�I�x�F��[^V5���/ [...]
-N]*
v�����:i��s���l�Q�F
�ıd�g&��
r����+w
�ȸ�.�w������,��Ʀ�H
jGt�2
Ԛۻ�j]�ո�]���	������
���UẪ�Gj>B��
Q�QbcY=+��Ι����y��v���(�Ӈr
�*
Uo�MU���\4�P�r%
ղo��e�,��
"؟

�
-�
-�
�tG�k���t�l���i�#�#��S��sB�Z�����#%��ݼ�,���ݔ��6�-.�8&����۷�gjG�Ҭ^�����������D��&\��(���~��w����g>�	���6�!������D�_��~q���-�$�!M8&����4?��������=#�/�����Ҍ`?5�Rޛ�\������
�O�f�Y_z�
x��5.%]q�x�����lN�UN�a�E����ņ��5?�7�d���F��yQ�j{�,e������C��h�0�9$�^A��|�K]���w���{���]ZtB?��co��C��Wn��q���qk5���V�N�K-�
���blVp�
f��c#��0o�z�>Nπ�
�?���E!�*~���X��8���b-R+;��
g��۰�
`9��fg?����S
�~~O�|��p�y�4ϛE $��'۶h�}c���n
��b��.�f�d���%��Vn�9�ם9.�6��:-�����h٘eM�;}�����<�G�f^�W��f
@�iP�+zob
����?�^��2�lyik;�7���cg�ي;�+�����f��\���
z�ɣ�ٍ˳�r
K����'��,��\=�
-�
-Q���
-��F>�EW�+4��Y�v�`


�8l��[e�}����<&�������xW��3\�bˡ�A���K���l"
-ivx�s$��D�O�-���
8��+üy:�o�k\������eY�/���2�Q��ϩ��
�O���7܈]w at 7
W�; �����W���
-�"	�N� ��
$:����qC=r�F�Y�����ɍ^�7�M��U^�_�
'
�㐇џf�� _�?O����8���j�W˫ŏ �*�LH3�'�&
�ʰ�ۥ*�yz�L�-�^Bu�FХ�I�ծ{��_7�{�\d��9��,ݹo'��c3"�z��m����^fiX��d�!�}{���7�u�Yap���ܨ��׷��eD�զܸƬ<\�y�<92q8�
�� ɲ����J��z���֠�x�����tv��1��c���B����(
�`��5
�J=vv��
�s�{)��o���8���Ўǭw��ɶq䖫i�O�cBxL�25�`��S�v���P�Oc��[[[����� ���W��
-�K2�@hn��Ʌ[��C
��ӭ�)�b�{rY߭��cm�͞>}4��8b
���^>};�x�%��,�ӹ*���R��
�D�?
��J��o��s�������ߖ��n�$zN4��û����m��yb���c�mv�AO+Vz�7��Q2#ɣJ��m�������!(Y
u;�?��;�_V�e!�	$Z�n~����o��>?�sw��A��s�����ٍL6��BM���Ś�~��;5m'�q���{���2�{\3���Fi1*4 at M+�l���\��C�!C���$���a��
���pN-���EeIMo-=;���۴�WG2��V�#��-�>��J�:D󑦨��t���B
��� ���ѿ��m����
exif��m�$���=w|���}���W�V5�Q1.[<��Q,�/B���
�F)���K��Z����@ﴄ4��k�O���%��!�}{��~
NA�n��t�GZ+�ma�
��m���U�T	��(pӪ��G��'�3��;��
��1�Iz�2���(�a� [...]
��χ�"���\��})�����N��l;�ت�ݔ�{Ye�'Hy���76▫��8]�
-�
T�6�U5ݮW~[�\4E���J���~Y+����@ۤ7�zI�郮��%M����#�u[�ؓF���f)�5({1�u�޶�����(�{�}��Z����
��0���ڐ)��!_|��ɢ)N2
�̲?}k�zi��~Q�z鼅�<�8|�
8
�>�� 
�A9{WE8s���Y<7U����
�c����a�J���Ur� ݛm/�������z/������翃�wЌ`?L�;hB�~��w����9z~��K�E��>��~q�C������W�9zF�_
��i�O
|H3����3Q9������8$Nԁ+�p�U+��&��M$`OJ�0�xE�j�$�S�c_IC�~C����bv��qi7��f�II�-U���
c
��0i� �/�y��0q����T7`�qHӋRp=�3}�dCXO�0��L�+��Ի#���'��|Nw�-j8�~vn�|���ӫ
����KY�
-����'7ݚ&�Y�
w�|%zs
-�$�����K��8�O��O�bO5����u�,%[�q�{M���2��ؘo��>4l�k�?ZG�U2��Y�f�l�Kq{��ΖA��濄�I�~�������<����4�S~�9�(�<�Ӻ����L�4�0�
�݂���h/7쩸X�
��31{yo2�EPA�FK�g��3g|�2���
�e�^1`*uH��v��d���|M���ǵG�n�
���ɑ	�k�4��2k�enm�֞ke/��0^��|�Oo3��\j��e�ev��A����D%	����#�8
���

-?BB��h�Ы0;��ʝ��!�vӣ��jd̎ˢc
̥
;�Iπ�d}_�ݴ,З��(��墬�K���|�9�@=���c���[�0��9���{���u�iz'����Aܱ%�����[8e��B�6$O�g��˙��q\�g�Q�L�#����"؟
�3�J4~�D�C��c��
��y�m�)�%�s	HW��\x�-��Y�
a�\�j[3�^�gm�˕5Sk�J�hi=)���d��{�
$>��s�`���®d�p���>�����a��c"7�򅮕��nc;��p�
��j�u�x!3�
�Y]�Γ�����f��a�\�� �&��m��"}B=��O�����3��O`��̴��-��ܚ5�y���
���z�
�uj������@�x���mV���X��S��rʴ7��?�����$j�_���
��o�@h^�ϴ(���{#qmuŻ�g}����&�}��*
{��ʮ6�l��It>
m���%?������`�	��i'����>��oD���J���X2f��s���,	��Q��S�6z��,�if�|Ϯ�<�����jU��V��m
-���~:锟}�V��J�MM�%�`��
-R��|t�$�<gR�a�KL�07���gA�+�bPo�\|�\z��q�-�Z���1!��G:=T�u�흪�7��,$C����_B���_�J8$:c5���@ ��G��7��
.
$#x�좽�ϼ�:��}�u6Y�L�
fp�m�w_;Rg!����{��dᝃ����.ʪ�Ʌ����1��h�
�2
>��E����e|�W���Dߟ.y�; 2[۞�-�����[�"����Eؠ�(�
���
�� �� v�B���0�����QU#׮��y`D���1�9A
�Φ���'k�ڰ���E
-�Ӧ5=�js<����36�M
�:j�a7����(��G����p�Rp�s2(�F�S��o��#�F�,�`�gݮ���0��
eUM���z�5o���,�.b�Y�����Ț��=r�1�hT�Ć`��3>���#Pt�2��(�:���}�aj��
Ǻ�w�ljֽ�{ωQ��t���Od{u&�u�?]p~��K�g�������g�)"�hb��O�[��ߪ�1��� E�.��`�|��B�����+�ܝ��ů���m�}0s����M6+cRU��]�����85�Jr��<?����J0,�Kѣ�0ӟ��u?��}�u�����3��3��������xz�9�2�����m'U��
�金\��Bb�h��l��	N
"��&��3��Xzk f�\$hN��S*���:R��g��RP��/��͊��뭭��I���j�s��3w2sy���v�/Au�\~�Nl�r� �
*x���?
�s��h�'�*LLc+�ݟ=�)��=��#@�8n����b6}�K3�CG*<�Fź�`tm�Ѳj���*��(�:N����;�9|�Hkpx?���y�����f����/z+������ P��K|����� �G��"
-ԅ
�����xU���ʬ�ݭ�ؔ���wK�fh�'��95)
o1Li�� cLv,zhj�8��[�����v�r����M���Q�������j��X�� 8��
������=[\V7���J�f���'b����a?;�'�(��0��ңo��и+�>����P��`7�D-;�j�����T��I
N�GX�6���t+��R��BV|ғD�=J�	���
'T��DGc��ݤo����#���)M5b-�
�s��!��^'q��1��
-��$�R����~�������3�w���=�靬W�"4��T�NoC�˵�9�
�>�K��eK����1���J���X'�9�"R������n�Ŷ>�)�fn'�1x+��oD��%|�ǿX�I����AaT�lS�!��`���9�օ!s^�@�pJ�"�՟^�#�Ȩ
�d������wF��hO*��56��N`\y�/:��Z ������֌χ�u�u������N��_ȿ����E��?���5a��w�[����Ն�y�����B��
��g�]4.�AAlBQ�E��wQ�Ek*�\Ӡغ6�ˬ�
�by�
^��
dN��oa�������>7k��k�nҬx�B��Q�.ݧ��z�u ���h�a}ڣ>(��0 �!()�(ٲ�i}Ź�R��B��C2>uIL�!V�˅X<ʻ�t�uj�5<\�k���/[�;[�t�n�d!68���>������7 �$R ˔�"��
-�����n
�����
JN�+�
 5�<v�
��X<*r���$��� ZV��W:X���tfԭe���s��W]��C��
~
 ����/ެ ���0^:�`*��q E7i�nX�\�$����{ꎞ��G��-8��E�
�V�Cv�lv���jc;u?�ͽ��gGXc��?�����: 6K���k�>g
����
�&��������L{ݬF�uo$��¹����O��+��+��w��K�H{��Z���].������U�I��[|!���E�
X���I

�0�t^ _�]Pn�
-���k�C����G>s&VNIv���t�^�����ϓ)Ssl��Y�~�y��7��s��ge��N���FUf�� �:��h~�IĮ!
J(�
o�_/��d{q��ZH����y�`8/<��B
�l
hƭ�ҏ�ѵ�99
zT⼧��]�
��,*�v����O�*�Z�:~e�8�3�|����+�I���~;R
�rog��N$G�kl
�벿 ��5�[n{\���F,yu�LU=׺ezB�mۙ�Ή]�TB\��F�g���_���.��(�B�a]�����͝�����u��
-_�U����S6����D�s��Nu��ȹ��g�'
�*FV���ക��x�i9CsI��k�x/.���
�k�FUPl������v�.
���R	�h��_a/Xռq:�
�e"^��xn�W�\��|?H��؞η��y�iopi��{�*��ڂs�EAu�Eᜇ5�}�%��(
듪~�-i���)P�u��D[��!F��3�
-?˽;�������jv�|�^��d[� �5��U?o�A���l�`���תq�� _ȟ
-���1����(��	����;b��W��|�-7��4g�L�06ˡ7��b�ۣU{�u��p����b��E=FS�a.��Zh�܊��h�G+��񟚻�u��>!���C���;�g٫�#ܴi�lv��J�ك\V��<+��
���-h�+	��j���4#��<K�J⌤i�_��? ��N��X���4x�`�r�̀Jw�F��[
t��r���v'��_'�_�������zNm�c��R�WO+qO��;�rTf��tGS�R&'��L���b2 at K�O��qE��o���n
-�se���Ya�}YQ|���N}:�^�'�m,��eP�P�Z����Nw�ﺢ85�|�y�����2< ����̸�U�p��������I��u	5��
C	
NGE�
yF�d
�b�� �%�*M��#yl�v7aڔ������7�.ʷf�ť3ɏZ�_̨6&�彴
6s��Pz!��B�T� ������AI~�k6����a��vݻ����e�]��
5�^�r���R�\_ti_[�D�*l5�:C�dm|e���۪t�-��
��u���+����U��/�
���b}����
g�Ay���\��xVto��/\
�����H
Sb+���JI�Hy9e7幜.�fOG9���
��3¾n�,�q)�Չ����0n�ϣG�tu�� �
���=Մ]s� ���0��m��
�Ƈ�kt�͵�4�`s��2,gWV+���:��7��L��$WۤS���lӒL�
"}����)Q�
-oR�a7����*�@q�ɁR��r�\>�5�I
���)ޢ�����|��i�R��M�zI����d3�L�a
�+Q�Z�

�K�b��ɋ�>[���
�ԝ9�=gt.�������5�4��<��ܩm�Q��ܐ�q0���=�
��?V���Ie3x�ϒ˰�7n�3�c'��G�C���	)n�d�
�g���_�܍���%CUS�'u���] ���<	Ĝ�wy�1=?
�:���/E8�l���p=�0^�^����iv6�֤ba�Z������n�6;��.åJ=����]A�<�Tm���{>�W�B��G߀㼁C�=x�ϵ�ҏ��NLd�5lŧ���pڂ��13�p��7��GJ�
S3q��
2dGg�V�`���LϨõ�ج������XDT�:}��&�� ����X,�����Nc}���w�tV��Z�^�l՟���hf1Tb"�
��������gX�����4_�-�7�jxQ)o��T\�^�:0�u��C��3�u�^H�j,3UC;�wu���e�;-�UC [...]
-5���]И>��M<	��
�t�V��`s"
-^�	΍
}�������{{<�{���r��XvNCb�
ތi����.
���
�R����|_~
-P�pأ�
����[SPLm
P�3iP|�z�x�䕬�J��V
�m�޾Ȗ?��=���c�Sb�����0]y�:�Qr��}^0���/�g�O��9�;� _���0gCP��2������g�(!�4��A�PJ
<h{�"�v�u�a�]�>q�Z�;�
�����}���W�2�-7i����!p.���i
�u�F�v����/��'l}5

-b�	[<�êL~f�q��S�f �=T�CP*�*����@��#�d����q���v>'���%&��
��]�����ܨz9>�Qo���!}�_�����5j-��m����n��j � %'ǕUT~�&�~�h�&
_S�.�0\�7��UN�?��]�J��ә�vw3]�
��Z����w����s�S|!�P8�Ptx��1��#�ں����>3?���c� ��38��{l�>�VDg2�-�
�o�2�o�QߝY���h��fS�r�?m�@Ը�N��[u�UVʤXZ��C�GPs<�`��wX����<Ys�h�7"�+�˜�*����.w)�p_IW�,-d[��By�>	�'�~q�����h>��T��9TNi�m9�[��B���/�OPx,#8��
��(*I
����
]�T���,���d��R�6m�+��U�ڰ���j51f�-��t^���������X���Y���CeY����9���r���>����%�����N�
���6ʓx�ZZ�ε����qٹ)#򾞽Xk�w��_��c�~^����t�r�h��r����v�'����W`��+�m��~	�)1
Mw���(��P32
�_��|`��&p]<��v��q]�l��b���	œ�&y\u�����P;���+W+`��33ڬ��t-����
��t���4ؙ��L���W� �n`}n/��^�.(���K�
�I�
�g�F��'�r��F��.-k���'�ĵ5nd��}VHt��Q!e�E��8��+�4,��aq��s&^��T����_·��ON�
	GQr;g��d��A%�ϟ]01?�/p�X�xK�5�*�c{Yh
���PK�UC����ZY��N����A��ϱ��p�\��
-�}
C��/`�>�]���*@�uчm���u���;ud�݅UK��F��.����,k�Ω����va�*k�R�屶i,�w�-��*)x��!�xZ�Bpc�}9r�/�o����3EO�-�� �y��S�,�
,���p�G{�|��
-Gy�������_il�����Bfo|qy����6��Ҟ�y�?=�
-�iXO�Do�K X� p�O��-�p=��-(�U%�֟�M��ƚ<:�Ӊ����6��ӓ����ʛ�!��+ۼ����\j�1~[�U���ۘ
d���u�]n��2暹����G���, �L:�$���v�9��%�Rjs�M��6�1���
f�N�g*u�=�i�>�e���H��07�Nl�'L!7e�/l|�o+�l<k���
]���MG�J��[|!U��h�X��}�|zPAټE�-����f��%�ޓ��3
s�����k�LT���\�'��"���f6����+�
�Wt$J�Ұ�a��NoF� �
-�v��09�% ����5��V��}�P�(���,e�A
�����Ӷ�����O��

�ձ������{\[�Q]x��M*�=nXg�F3H�%0t���B�C�$� 6� ���"(ݣl���2��������v��r��3u�N���
Q�f�l�)�I��̓=E
���=��d
��N�1z�Q����շ�n����Y�
��y�X�3��?��(��ŭ
p�>��R��V�����
f5��Ħ�
��;[s��!^�7�k��6��[~Nfy�5
-0�=PW�����~%A��4u�%�*���x9wz�Ye�sy�� ����]��rb1yv# w���)m.�ҵ
9eW�\�3�9���%#l��ԋڢ)W,!]k?�I	8ou
�q?�
�
-�o@�D�t^d�ʆ.����A}E���
����O'�f���	�6�=
<��
�BC��fdyWwiB�J
fu-�����~����`?�"�9^��m$ϊ�0��
�=�<&߾�t���2�&�껖�-���d��ݠ�������'�s��'14׻��Ϣ��ę�E�C
+
*3�qyigنW=!C���^�%�؍���
4�sbO���7zN�>��(�~���T�)�z+E�(�cd��U~	�t���a�)Y�"��n�9\���M.}��\(y\
-���Jzf1��D,�5�
��p�G��ќ�襼d�GvK�.8��0(o�T��^��A��9��ƏI(�
Xc�{���5�e�͌qy�|(^�yE)���s�J��d/��qʣ�3J�=ܓz8ȜVi8^��P��شڷ�^��(�Z�^��&�N�7'cm�"FP��!��~��0/o:?����X���Gb�_�lv��#�
����o���z��#"����o|O�W��N5�ҭ�!�>�$�F�x��
�KD�b�_HW��[]�8'������y�U��/�(����Lލ#i�'|dѾ�<zh���pj�!�^T�{5�bm��m�"�tjD�o��<������:��1����'���Ƃvк���ŷ�D
��L�V6��>
�ς��
+�Ye1vY^ϗ"�,��$��Mm�2���������E��r����lgTr��I�R�BZ���j�O�h��߬��A��]�ƒ��͔3���/�7,��\v�4~	p��S�@���|�������N���
��/��
#�Bcn��M�A�3��a�曎��~�����X5��
�-C�(+a}�վ��Ț4���}�l����Q�N?�4?{�)��/�_��@�
�ע?Є5��m�oM��;Q�
-�;�<&s �=	PP�
h�� ��0n�{߭?_�����v}��
� �ywc,�������<
�#ú{_u�-�<y�$m����t���z�m�|]F�ß��U�7@~|��&�O�r�P˓p����fk��v��	g`��
-�
�.���hڽ�
���[%&_HvBЦ���e[ﵨ
��V�\z
�mS�=n�hy��t<��T�)@^���Z�|�Q:���O�e�5�³
��a��T���s.��_�x+�:\%ң�S&>q+
%>V���n]d;Ӝ�5�ڜL�7�X:���p2�K1
-��� ��
�6��\�D[Loˠ؈\P��8(�_poE�>�&�E� ��Oc�0h�L�M9?Ѩ�>�-
i���.V���;=� �Y�F�4s���T2��6Q���U���
�
-��A15S~O\F�eP�W&��sGP�.���c���� 2��
���emMp���[
��"����Zͺ�m2<�����~|����:l{��S�����$
cd�}���`ae�UP�z!(
_UP3P"U3rNt�ln�B���
?�4� Dx��j/
ej��-�����Wv�N.�gM�8�k+u�%�W�ف;�=�d�
3����:�>'��Kv��E��
(U���R
��<�׎���]��xQ��wDA۱(�Ӝ�Rë<:
��������[�n��9�t���a�[��
3_,Tt�����M�_ȟ
-@�}�]�a�nA	��ݗJ��w�r��"jLWfH4��G�l��t��
2��N9vσ݉0��ut���RȎ�M�)
��s��.�
�KJ
-vL�e[
&r�p?ȿ�' ��o��hN�d�j�b��x����� rǣt����e�gt���
*���l
�y����cWɡ:^�byuE{��Y�������<����O����-c�H�9P"*���w>p'�3`�s��
��v�s�k�����P8ٷyQ_?D�@e���`��)�㼵�*)/��p���NT�銴��*�J���3��?�� �: o�^ߩ˰sǠ�
�>������st�4��4�
�
�� /%mܣVF�2�C�����v	SJ�YI^1�'oZ��Z���V	O
K�Am,
�N����t
����i�w��|��|[\8}�5�N�Nt���e�����#�Op
���1?�Z⡤w#u�Vp��&j��R#����Ź�`������-;K�&
��=��� �j
֧�y�����1"���_M�5
t����{�&}��b۽
�а�7
�:��~�o�/���H���Y2�|~qբ8��|>z�$�娑W�4� qy������蛄5z��@�r���y�e���V̳
Б<sgǮ~��m��{j���*�:+ۡ
�~��%����Ģ���\�W`\)4l�·/Hg��܌8�ؙ��4ĥ�S�y��B���z
���kϟgP^�p�<e�i���q戕�v�ܥe
-n���*����u�^a�_G!X)\�r
�ל^��l��,��b�te[��R�L�I���{������/���-ڠ0\$@�n7�J
-p�gϱ� H�#/
o��c�I!���N�@__4$�������}|��|�2T�Y��7�ߖ�����)=�Rcs��q��p�����e�ˠD��r��S|��Ú
-�c
-��F�9ls�I?h����ց���|�G�^׫�}�<Z�V�}]�'�*��c�p����k����
-ƅW�5����'C���m��a#鎆n#Ɍ*�J�� �y��j��운ʪxyvc��Y�����]f�9�X+d�h���W��ഡ�oC����?l�<y�]'F��s���
=
�2L�
-�Ƙ��h3o;���8b�8����/�O\0I��pR�!�
��j/�%�L����[���#�y>�g�ޤ����KE���~�*�.JN�B��pfL�u��˿
W��,�B�
֩}S:��Z}�Mh6 at 8Z���-�z�O���)oIP&���d5�<6/7m�z��y�u�{���l���z����r�,ĈU����}�D\<7H���S��dz���I� >ϼ�.���{3j�p<um��"�Ş�x3�bG�/}��-��K��m�
���!Z>�%�e
�6Z���]
-�}==gZ[�y1��,:KWkg���{Z�?�r|M��D�Z� W������lg�'|!U�
��6(ec
�]:�
i��	
-:�	��\զ=���1K,��`8If�g��r��y�z0�
���̲����FL��K�5�=�.�k7� �F�&���&����) ��=A�N�0w�}K'����)al6��LJJԖR��N,,+�"vY����fW�)��3�Pݚ� I
:c��+=��n_�
-1�`R�ުz�|:
�d��nj����~
-P\Ppk�=jW�ʹ�SiG�jv��
�������=%�`&��9�>���&�I�{k��,�R��=y���憞펇��9W�˚��
��v[~�[q�!^�V"vӨM$m��+|!U
-Jz��n`^=�t
��T�����r=~��Ŧ�V�)��.JD4|��� s2K�5Q��MX���$
����T����T2���0��6�
����H]K��>��{�"��[�l4}��|!����^��[���p��D L�wL�h3�
���n�ٷ+��֫�j��toCn�d|ؕI�>�!=��>���$�l)��f
u���{�gtP�����f�iwgj��ֺ�Kq��[*Tg�	�r�lS{��X���N��6�mjB*}J"�B!RgJ�cu3���1�u�A���m-�L{R��6��-��j�p�`��J�������@��'F�$��>���q~zs*��)�ǣx%Ƭ��/��)��s$��]��U:Ƭ�j[b�hc~�i�쨅Ge
��(.��ws����}cٟ�fzy��ǽ[�
nQ���?�Z-X�����.r�'0����LĂ~
����]���c=���#�޶�y�u[�æع���>��f�o�s���<J5et�����Q}_�nu?}Q�>��Ք]Wt�g�
-[�-
-�v�:�9�;�-Z@���

�v
-����d���
ȷ�@A�sҋ��О�hA�A�j4Anm�@�O�@���A�Rt���'�f�aMn��8q�C��~��;����-��?����?Є��ߊ�@�s>�/E���5�3��
��
��q��8�>}^�
��� ]
-�go	���3@��']l�MϪ4iw�mȀ�&59_ƅZ�y޷�u�L�J�T����/ݣm����Ƕ��[~. e(
-�O �( �E���(��
-&僂j����_��fx���
k�V���&@�^?>k�8.�]k�**�
-�-��$�Mp9x*.�n�Ν�|c|�9�xw�K�� P�p���V_�*�24�@��w�]_v@İ�Cy��B��
�ihªt�^<�A4G���@��ʩ�	^��:��S���96��c��&�ͣ��+��W_����M	��[PT��aD�$.�c�����S0� ��p�u���;��2��5�
�X7�n��gu�����e��֏X:^�g7���4��.O"�Y���5����0g%���1�~�ݴg4�ߠ�ޡh�O>�:���bz� �q;X��C۫=�b��hd�Y�d�,^FA�<�}�-HގK��Vz�\�p�/�q�5�K�=��i��\�<
-˙p�4���4�8�sIP�P��yh�>�b���dM�-Pl��&�h���0X��A�
˾��v�>s껌Oq�p��1��
SG��+��r����
���i:g��➚��19l�{�_����ZP��?�w��
<���`L E�a��5�q�;�⥴�j�v
7
��煮�h'�
S�V�,v��]�8�+ܶQ�K�Vr�����*�;0��9��uv#�_��t���
�? l�����sP����2���'u����'�BFn)����
$�����˾*h�^���EM�0+2eӨ�uc�U��ل���?���m���^~�OF��'�X��Sv{}q��-
-G�Ԇ]S�
��B����I\~ �C�_�s=�Ġ�P��}��_��m��oKk%��7�ӽ%��2_�BU�
b�k��$�ߧ��L
.�2���[|�n�YDo�x@��/�O �SvӅ
-��y�����t'�Ґ��R��F^�N���,��zCsJr�zoz�g��$0�� :U[ؓ�V�O
�k%�OW�j��bI����K�l/vӍ��G�Ж�H̩�r��? �c
�
?o����X�yU�{�>��w��[�g�*u�~�Ļ$�=$�<_�1v1'G�q�FWG����^+�"մ@��䶼�Ѝ����'����1�BV��=X
�T�
fH鈦�?�o�y��@���-�=P�DK�#w;��4�Q��g7�\��U}{����|n��ӂ,
 ��^/��:

��<�� 3���Z�/�[��lU:F��=O�))�"*]���B�����)LJc(E)�sk���v��\�D-��]O
~_�\`(�3�<��Q�b
���T--{�Ο����z��W;:�/i8�J��4�(ԅ�8�|b�Ȧ��G������+\��|4a}�}`x�-ߒ�$�~2X�N�
�2A�uni1�e�\Z��z{���N����ؽ�u�#���y��5n��wX����[p�$��z�G8^��I�V���v����\@�}�'S�î9�?i���
u�
���9�Zs����%�poi
-��J�wwyzH����po��V|~���}o��m^=8.���l��f��׵2ݽ���M���]5[�7zi���?�.�e���b�|K��B����
{t!��k��m��3��M�Z��;l��ȁ�خ{�*�l/ޥϛ��U�?�oz���o�6
-ﱱ�#�M�i��d���$s�6~ ���N�e�1
-��'ߒ��5au�F>�y�#�v�[��w��Z�c����M�%*�N���}�
�N�!؊��k�L=����\��\!p��q�GB!�����;��8^��Tor�3����B�a?���JGw �	�>e�x��
-�m?���.�6���մ9;����f�\��W���|m�BJ��v��26[{��ƨ�H�A at K�u�e�Hd���M��zi
�e���B����������.�	)	E��R������t�U�e�G����V3?�֎[�F*��:?o>����!�����JA�|'�ilL-�=��Lj��h�U�1�|D1�D�f�B�' ��i��G���T`�wG�M�_�?�����p�M�	#�
�ڱ�7UQ=�6�.�,�Vz8�טO��Ʉ[y�R�V*�aU�t`�[�
�.�n�K�)�2lT�\a��)"�:��? Ȼ�
��(	T
�k+.���S�^�+�j��5��H
{�~��m�W��}!��rh~?}
&V�㸪X��0g)���O����3���^o>̤z��֛��q�oѽ�_��3���
(�W�9;	���xA�C��ͅ��
��c����7O)m���C:W]�#�-��1-��-z�` V5�MK�
9š��u��Z�B��A at 6�Z�x�Z-��E"<�#�q8
~ �5�wPz�^Լ�2��V�l��0F֏��v�;�C�,O�ڰ�T���}�kS�g���C�Ɣ4`�djʠ���ώ�BU����G���$�B���:�}]wwe�U�<��|_� [�]sb�]�
-
c_c%u#=�>�;�뭺?�ׅ��X��K 
��{z���xѾ�}�Н�����i
=ťy��e���^
��<�"Bn�G4�݃u�ti����u�|�J��|4Ӯv��é����
5P��6i��լm����$ A�:��C�
��5�M���pf<(��ٸ��W�׈jԢyo�F�d��Ù�x�[�ZMc"պ�]F)����:F!+� �u)�����m�)
�#+�.��M�\ڌwJ"�^D
=��cO��o��4/�5��4_~%������ې�&�
�>�C���"u��]��=v3�Ž3�
��Jmk��|�
����pak�(��d?��������� I�>ks*̵��!���O
S�;�X�޸o�/�jD�u��>k_I�O��
"u�>��8Nv3��U�Ju۝����m%N[��u��_I
�n� ��Z`���8��
&��t�-6��)01����Ij���4k��
���"��TH���D?��]��a;#\��-q)�1�n�V���G�Ѵ�޽Y}����ػ���\=<���f��!,�؛�Tg�6����e;sp�� ��x�/�!����I�p���/��˸Dʸ=;���jO�S��7����ޮUm4S�f}ö�z'K35��G5� ��l����㮚�}������>���O�خG��򂭪s���g�n��M�_
2Z0��sT赁��r�U������*���PK� �\j$��}ru?y����V��9�d\;Y
5nH
�nɩ2>�b��m�uK<E0�� r5F��}�-��L��W���۴�� %�9��k$�]&<ȭ�=�1�;ȵ�1�eF�?�7E�5�&�*!	����zf
�jY��
-F�|S_�b���ƭ�����'�C���x�_��@�
���XY�
E�Y��\��<�#E��P%Q (��4!
-���@n�� 7�`���s�U��{0�
h�AV|A����|]EE�ބ�q�
�TS���Sq߇�O r�j��#��?'W�2�)�
�u�O�9�o�� O�!�g�@�Q�#]�5�@.�=����1X��*sxH�,H�@�D�x俥�8�mCQf�����u�SF���;'�? ȍf[(:�A�K� e�ih����4;��R�k&�Y�
]��;�Q�ZA۷	�z#��,m�eh�w�m< �2&��"
O�U�4G�����#I�ঢ�nVr����W�B�T r�|
r		֨Y�
Q�>�q8�8�'P�[GP�7 �b�����
@
�
-PvM����]�^����Hc
M��
:��6h�>t���?r�c�w7��/����~�̯?��=䋥Ovz�{vA�� �
P0�(pV�!�
T�r�[\�
��4��g��X��gE6�pq>N�z�
-ZYڴ�d��+����7��d!!����@NY�nZ�}N�>��n�IP0,	`Y��;V
-^�(H�,����
�������8\��`m��~t}4�����ꯇ�a;�ݴ5�:���~�K
�"o�l
{�d����(L
���
��
��g<iPT����@�#KA��'�z}�=��L1����;�԰Et.>���{�����s�7�ͅ��c*:0��
�9�-����B�ڹꊑ��
���3��mp��? ��
M�
C����c`�e���
�SW���S�����s��A\)~rc�ض���w�Y����M]��<7���ְ�y������S�J�� {�}�{�F�;����  ���
AQ�	E�>�ٍEl.�
 ����5� ���/�w�����u�kٻ��u�sF9�9����*����뮔�i_�т�I%���ɝQƃ#���
�v&�ݿ��}�M�"�S����Z��������Fnz�����i��KV�
��P�����|t{'�BJ֩L����ûZ[+>��L~�'���"u�dq��[����*��n*�� �����[�k�� [...]
5�:�~��
��*zF�S�-�f�
v6K|G�75�\ŇugE�����(��3 �?��k��ُ?o`���~m��*{���@��6
��`nq�ZY��<U�������������؛n)�,�WPaC' ����(�����
v���o����s��{�y�(�x�� #L2��x1Ͻ�`v��vSk��[+E�F�͌]�.�S�o
&���;ʎ$�*�0���|a.��O� {��o�g��]�u����sYe2��aS�ܥ�pX��V�^Z`���Yl�����G�8����ܩ�	
����Q|"�̊G�r�
�m�9��v�:H˪�c��� @ԟ�>#���~:���<�RA>
z/'۽� �D���ڲpnT��h%�z�6����Q�X�ﻧ�nNG��hog�
-��(�X�(���Iهiȕ�i�s
�X)���ɖ��D`�������/�9j�����-�Co`j��w�o�;
��Q���v��͠Nq��4��\'��'OY\�$��1��ш���_>,��z�6*��uP
��~l��A�r���ޣԏe��"�� D'^�y+m~rN}�[VA~�Ii=]>����v���K�n���.��F}�H��B�����Ӹ��q���F�[6-fs��[Pf��P\��7~��P��^��?Rz�V�z[�Jz�=3_��
���(8���:����BI-f	e�F����=a,vZH ��^>�"X�C��{��
��^g�;�=��d5�u����D�l�
u�YmU½����*q�T��[,���B���� i8ʼ=N�5�3�s�k�[��a�&w��au|�
�O8*eP�O����V�Y�YnL�F��*|�Yő�1j�V��I`m)����\��]�Wv3Y���U� !y0����OB��'e�;KR�t�]��ð���эa��;3������89�
>Phw(P%�� [...]
����B+�Ԉ=�V��N�U��&�.谳�
qu�
D�8��\j
��K�E>��?��
-�Re�X
-��q��Ƌ#���;�Ej���{��r�r�R�V�t�z��Q���f����@+k$r�� �� ��3$�k+��!LAv>���]߷iu�����&�7+����� h�]P�� �F��.���sO���Ω�\������0{�.����?ݧ)ml��Ț�S��^�Ҩ�T�o��ܝ�d]Jo�m����Q��
ל���ɞ����G�t��勍��'+_��
 �ր&�`�M�Z�h�!����wh�6T�Z���j�~`+�Vd��0sg)\~��랷���b�L����k��ɳ����ȡ���\�����d=嚓����A�q�kl���ܽ���K���
�\�z�rd���^����c�ޮ�H^�~��ԎI�T�6�]��\gm
-"�`��ʼݪ$C�{ƈ{��
�&
.��Jhq��I�Z�,� ��:��
�+1ߌJ�
�ey����Y�5CkS;��Y���)�vҝ�s�:)��z�Rm�#I�*.
�(/
�{�]6�m��
�@Z���6\r��sⲎ�n]��4��No���������N��f��ju
[��upgo��
|(T���!��BZ��͡zS
�O~d��x��]C���UŰ���c�i��j��>U�٦�:�2��-�F���6�l/[�]*|]�&���o�A�>?מn[h{�J�]��p�R�
�6�r/dT��U�g���0mũ�r/�����D�ʹ����iEn1�/�j~�D�)
����z�C�
�!�n}?Zu����4��
���|�U��w�4�뭼�ٚ���x�`3I��J��`�7͢,\n�[R�t�q���m����dI��O����.cq��3m�tU��}]��o�Ӥ����Ż
[N���}Et�v�c� U���|�l7��Ӫ:B
���̫a��렯e{G�.Ͻ��v4��J�[ܪ�-Xc��C � .�B���+�7�9����%~�j��Q�����s�r���e����i�.-�$
%�r�W� ��\p�Ӡ0*�Vq�ϒ>�6��؇����!4�N�i��M���F��u�vݳ��]����^�V���@�Oٕ�L�sP���J� E�엊�}�(��L(���h��b���O��������?���
��mV�{K�;ԁ�@S��vs)n��L�:��(���d�W
Q5�n�=*	41.J�dZ�
�E�x�W�V���{��
�ә��Ӎ.#IB�r*M��B�tt�@6�Z��s�w �ޘ �� ]����`�R���*�8e� �M� p(��9
�^����!#K�~�=@��
��
a� ��*@'h
��R���кj&D�d���Ȋ.������߻�%t� 4f� �v7��� ���\-�s곹;�^]
�
j 3�B{�
���C��#Ԛ< �b� }X�zb�"��`�I]�j;����[1%$֋��aTj[�gUj����{(38M����z���(����o�
�����\�`ݞ ��T��e���
��
/ ��`e8D�r6%�
@��
�6�����1eG�(,:�s	������~����+ &�@��l�ZI? ~]`�(�c
��B���� �S<���>�ko��v��aǰ��d
V:o����t��l&M;ֈd
�]{���ɣ�M9���0�������G�]��7>�|^y�p�a�
 ��	�
���@�^�?
-"�ǒ�
+:�^ ��Y��
�Z��o��>��^4�A����ѳ�[f7N�RIqBY(��
 ��>_�7
��
� �	r�y
��r����!�����	{��@<�P��l�,�(9,D���KA�����—�>�(��}����Z�0G�g��|5>�;u�`,�����	���\��!
#��[4��/�<���
z�U!
ru�
-�p Bv��B� �B������*r�L4l���|�K�1F6��S
��ؽ-�����;Zu��*m��<;��"��; ��@�����M��i�] a�d�,}gXO�g@�4�n#�eIy���
ݫ���y

q�r{p�-6��<�'oYկ\%g/��(3�Ѕo�ʓ&���
���Ʌ��ΧZ��(l�G{{e
V���;p-��z�
?. A'���|r"բ���}6
Ѽ�{�4'��ڠN��ro]ⳑ�gN�}:wd�|h�j�>%�-���k�O�A�>ʫ�{$zq�����ڶ�ׅ?�)����
�9(tYK}g��n@I����#��6M4�XTu�}
��
��/���F��:ċ���/��i�=��m����v頛�k_\ӟ���U͋�DZ�롰X�
n������$F�k��̓��)�$��t|�˨��F^R(��ы��Dzo=+�ü��
��Es�w�-!2�
�GAp�;�֒�ճ.ū�5D��3U[�6�_����
��������k��};�s�^�
5>�7�nGe�Y!X�zY�
�(|���޶��� � o�O�
-�ڋA��US]����3�h央�7�x�e[P6�N�u��U=qw�5�o�5c�]nZjT��h[+O�J��� �� 
R	�hr�B�-����;�ևB�~?1��*�
�����k
˓g֦*{�ԶTz�7�.�^~����\_f>��2���s���7�����й#aکZ�Ƥ~X�c7?)���`/�3���L�yz �{��i�������ڈ+����Jꇛ�=ŗQ�
<e at o5�V
-�����Rs�Jy���]WuzE)ñ��=q���ح�;��|"[�]��|�Q�H�����ps�R�hCu�7��^C��z��w�{�U��-S�+���l��m������3~�N��U�b�;���.�QkZa2�d��ʘ��m`�V�VC�߸X��X��S���2o��
i�+�����9��&��
 K���p$����K.ʹ5sr'Dp��׃���6��"A����
-�q��f!ua���M��۶�[��K��u���g��U���0_~�N��h�Fr������
-�&�S���iBoy[\�g���7ZD���=q�E��k�Y-RMl�
rn�W�;ѼW
��t�Pe����]�F��q�L��]1���4�O?�<�~���}n���
�+u���[>�!�h�ʁ<g�Z�����u�GO��y�;��!�O�K
�P��jLN�	��%vPj�k�9�iT�x�?�4��
Yڪs�4d[�i
N���1%!����_��9 ��A�m% �D�V|
-�5
x����g������oʛ�e���x����٨6�NޅffD
�[�6-wXD�|]�8��nY>��p�l(�מɧ��h�<��Q-��3]L%�C����9��x
(q��6� ���OA)����
��w$;�E΃|Zz�f�pCG���$}Ɲ��
������97��5F��벆��
EsQQ.�w�W.e&]��l{eyM�9���"�02Z� ]8e�(/I��g�������*���U�ܶG�Ow��B��;�?'[�^Ԥ�2oo!;��SL_�Ҥ��̂��3��P;���Q$.�v�Fuә�Ji�?I�5A�.�"����������vN��%:J"�x�Ϭ���.�v��"IG
z��๷f����Ֆ�,���D�t_�U=�09Lw���=*K3�;��Ӧ�=ٺ��
1��k�o�S�P⊸�t��; �z:І�����wr97�^|dN�z
-
r���Ǝ���_~�����tی{��yX�7���z`%��}�ٺ����)R*E���؝�Vٛ��_Z��8i��[��gcR ��A�
~�U�.�j�	�
��9
-��C
��S�n+�:�ӽ�R/��٫6
N���1gkk$e��G���Q���C����
W��*��E��aڇ�^kÓ�'��|b
�9��1_����,2�����
 w3�+�ѩ�54���`�b{?�ڱJ;5D�
�I�9`yG�k�輩N�i���Һ�QO�<�li��E�Ց��[؋&�f��<�2l3R��K�ɹ���5�#�s�A�K�ڬ�ҿ������;�7�pk�v�, {���j
-�ح�
-�';�Kд��3������T�ص�\;�p�.D���
�>�A��~�<���R��w�KӕQC�z��#
��
�u�
/�7����� Ԙ
ε���h����tM��f�+ye:K���D�)���>Y�׉v?W(�T˜���Mκ�d�wrH� ��iI��e����6���p�ǵ�e�W�!�쨾9�A]�T���Pl]�Fݺ���Gh`KuOt��4����	f�e�m��d8�7�x8��HC
SE=�h��x
�z�b�+���!����=�o=�Α���{�]m�iI&8D�J���m�w�H�A�䜙֎��\�S}��?����(�;�k*�a�\*RT�E��M�yK����j*c0 �$��$
ھܜL�֪�96��ZOl՗%�o��v�}��9���66R'l[5�k���N��Xc��}!_a��Ѹz��۪-�2U�[,����`Sr����gO�\
ov^iX���F'���S�*����2K,�h��-�
D��p'����<�+r���
�����H�N=��ļ�ZM�eK�P�}X��TD+'{�Xv�%_��� b�;<I���'q͏7���X�q��o��f��+7_ۙ$c�B͑��河9p�a��&��
X������W�՛�4�t��*H��9�Œ�Ծ��wGE��y?Ha3>�
r={�P�"��
8�x}B�]��>Qdrj�������'�굫��k~V9�C���[c7qȆNqR�[i��@��2O���@OvE����mt-��Q��ɇ���Z�<
�"�.c�@ݷu��ӦXr5�~�\�t�o̲gMD�){Dn��$#IY(��
-ϧ�"���B��N�l))U+��zڹ�R�d	�Ͱ�a��B/r�j��J���E݃T��f���������"v&��“�D��
��Q0��; ��
- at F���5�
��r���
`HϒR���-�t���<� � c�&@3A 0�*Or��� k�
��I
 ��.A�x�R�SrLNO�ב��_�b�?BQn	�^�S
�-
 �S�:*
��QV�x7����oYF\����U(�� J7�h{
���
-P��H�, $�p 	K
��ߦ?�w:�
�{%��,)2�r��A�>���E
-5�3��[���O�
�8�I�l�x k
`E�$
-�[V�.�%
=t�j�B� *8�:||�R+g ���'B (�T �F�����N��l��h�v������P�a�
� ��
�
�wv�b�7�T��h����
-,AрU��� �g�_�Y�-�r Pۅ}C�� ���@�_h�������e���o>o�l� �+��$w��g���+ �m�V�V%:����1��k���-�/t��y
p�� �S ���|r��D)g���+X{(y	{������ :vj	�+1e�f]�Y
��7�m�>��˘J��Z��w%
-x���C�݁+���0��^ �b��}��;� A�v �Ko�k^���KV�%[�$�͟����'�c�f����Լ��T�iS)��`r��������pcW�M��.4��~@�����f;
�o�G at H�A��
�=	��B;��e ���5{c}1�_g8~��2������.O�_����<H?w��֭���W�H�CY ��`83����=`���}
�_�@�F����2*P�+�9aZ9=+CH3��%ٯ�H�z�=)�|Z7x�G
�;�w�w�U]ݖob��QxE�{
ʹz���ʙ9��~q�����!k۠�7
-:�6�Ͱ�+�|�0� �%#��+�~g'.?X@����2����5d���E�����3DF���*ں襳s.p���r��
�y����7ѝ ?�[iU�n�����5ɿ1�z�V�j<���d
Ɵ������w>0H�P���^Rr�>�רi���"���\��#�p9�����.��p���U�y��p̈�f�&�� E�5�@���IX�p�ǻ��:����X�����M�W �ei �Ua��P��z �w& �h
��A\��O7���;
/���=s
� R�gV����-CnC�51�

-�+��g�<�^�`�q�u������[���9��<�D�<;څ¬�b�_�����t���B���a6����
D?rf�����Uˉ���i�Ck_��c�Ђ��v����yݛ]��ra#�E;��ue7rw�n��?��6c2CvZ*�%g4W�(-���m��a�T� �i�lJ1�E��3�㲕hϔ-�~��Ry�.�9����X ֗�=�U
� ��K���
ԟ��}������35�HwFF4�<�T0�ӋxR�c9����������?���	�>�������3

-�H��L+zy�

��fxa����&���޸l�I��O���k�FzL��[�s�J�^R��	�:��?N�r��He�δ�Q�x��|��GۤF�M
e��@44�}����Nbn�� � V�M'���yl�7���/#y<=�s���>8l�y������r໗ozz}D��~4r
����<
ؑ$O�C�fȖ����<y�֢[f�ʞ0�d���#|��Q�W l�����n�
����?W�Q��!��(��i���#�b=
�7�yvrZ��suO�!�޶$�ĽAz�2R�(�
ɡ��J=C�f�F$�l��}ӽ��<g�r"Ⴧ��N��
?����Xv ���$��JOހ�G̫���{o�6�2�~{�o������{�[s?��eV�
�D�E�L����z�<c
�E�4�gިTW���:j��8��V!��n.�����y,������2P��=��;�Yߒ� ��a��V�Q�l�<E�ͽ,u��]hث��_,��g=�ΰ��\+��PR�
_�	�f�~f�� [...]
YxiM��?��>�2��#����LV?����>���p`���.o�T
-Ŕ��x�p���I�Ok��v�:���-]
-���yw/�YZ_bu\CkQ^%�����^���z�{|T(��*T��Rԁ��p��A�q�Vi ���
-��P���+G���+r�UZ�~{3�MٴV^��Zq4���|��7W;�|�����}�
�R��[�
(�㒽p:(u�#�խF�!E�Ѧ{"�^9�O�,� ��}R�碻 �h����i8�m��m����<���L�r��B��^���$i6F�]oط͵YM����;�Hո������l���2.��F�$��I)�*z�����-#5�tJr�-9a�
- at 0}����a{�Y�v���1�w{� �jy�]����B?���u����$k��#�N�L�������(�8�TA��%�r�N�~"q;6�IK���&
u�[J{W��ZX�Eq�Έ�!��% ����94����Տ��v>OTbr����髌��wԣ�1�`�
ǔ[-�9'���;��c��
��.��s&��g��m��ؒ�Eb'jdbX�Z�z�m1�-�a�����nS�4�V�w�����_r�ۆ~���\����O����l@����剿
\ߓ��}^.�Q��w*��4��j����q�4V.���{b��F�ێ�
��vd>�zAJ�
-O��ˡ\m���^���/����
_��r��/�|������&��}��o�Vv������:����³;��_����c%����i�a�rڋ�65%
ﭞC
iI��s��N��V�����|�iN&>��ܐm|�%��8>������”�f�Gq�6'�~�?����R^�=��5���
-)-:
f�Pg���vV��z�J�h8j���z>J��F8�
-:R�+-5I,����
��x�a����s��F�K9U�! �^Z7�ޥ�~��
�끘�Y�-4��B�W�z��=��nk}���*k���e��S�
a�?�'�`�ǭ��������Io�J��.w?�zKB�H���h��������L��
�����ҩj�z�4j{��4B[մ�����S���G���8��^k�0n%�IunL����qn�㇬Wu��
�J%���1��\�HA�N�;*� B������Tь漯M9ϒW�`��8���$�Ej��*��XYc
�lQ���b��T�G�P���⯀�
�x��>�Si~�`y�}��m�
fܯ���My:��޸�����Q; �v��&
�l~0��̐|�C�� xA���l�N���s��l���F#��Z+U�^(Vꏶ]�?�rҟe ���bTZе鼻bΦ�8grM3��_q]�����}���$c\ 2�۾M{g��0Η#А��L��O���Y�W��Ŝ�D��[i`�A�U^���[���V
-�t��h�/Jl{�}�5�_�؏�)W$Q���1g3Y�x\"r"prWJ�4q�/i�j��|Z
rR����y^T�>[��;�7-�*
����
,�R�|J�K
޾ԡ
2۩0���P?-q'?�u���^�p�� *诘���7����3�{Z�>#�z���t4�Tm�G�ϧ�U�ku� C0�>�l��-'��=�/���Q�
����O*Y��~�ӡ���zy��`�SL:��K�ɹ����%_">��I|
��Wػ2�1��
h�^w�m�%\�z�O�|���E�N]�췏�>Rq+}vt�(1g� ���b�D��Z�.g+,��x�tT��%'D$>a�#�r���$=�ф�a2_
��]��P��FPMc?
� B�� ;� ic@n�
��}P�t��B ��W2��)@:00F��
 �
-�.�,�|sY�� {�`��R6����� {o�!
",��#S���&]�T���y�����?y[܁B{���h�Ǡ����Z ��	 �!��/@x	Bl�0� ���!�� ���X�w! 9���$8��x{��b�hU~@*s �o�O:��q�f�����"�2Q(?���h.�4�:�8�@�1	����m�
<X�j�[��� � M����(,ߔ��G�������jхb+ ǖ���o ��A����W:
�.��X� �^� �t 
�}�΋+�*���c�� 4#6 �aU�q��|`$`� �Z��L� �FA���O�Xyݻ/��t�������xV�W�W�G�"� ԰��
쟼�xt �yC�y�MV<�$�X� �o�
�V�j� Z�ÒRW
����_����8�xg���Ѡ��2*���͡��*�u
�վ�<��}�� Q(�M� }m��C�
�]� Wzi�]�m�pJ
�4�ζ��`\1з�&U�׵x_0�1����)=�_�Ip�.�9�J�J�YeZ�{��Z����m�[�'
-W�&��=ٿ���@�[�
��
�Pc	�9
,����2���.�w�	���!ٞ�w|�s�s�X~�5����>�
���ƕ'k.�	gn���v�PI��Q�p
��˾`v.�v$��~�x3����¯ ��,�^)k �2�d�����
S踈@�A
T@��Y|�·W�G�g��>^�$�M�jX�[6��]%�l������-.�I����
�J�G
�LP�'A��fG�,�Oq��6H_
y��~@�W`Y[��$A�
|�G Ƕ��u�1-
,�Nd+��1�ܮ?�=}뼯�Bq�\�}�=]��h���qG��
����2���n���"�ȥ
����v��j�ଓ%�:�Q��b��?�����S
�	���w�]m��0�r�i�9��/Y5���#eޖ7
o
C�r��R	I
�a��/	��eq��ev�d��_�+4�3Y
��<��r�b�X�{�7���:U���̲e}����gt����	�L&�����Iv�ィ�(
��8t�tŸ���b�O�cC��{!�ܷ�{?ِ�l:�t<ܿ� [...]
-��"0H綝N��g&ϧ��o���� �3͙'���s���
-]�@u�<
M�廤���^H�IJ���O6�e�
�`�n�\N���#w���g�x�NMM���3����9�q<��1w=M��n��.7|�t�^|.)��
�_mH�2-ʌp�D�(��N���wy�
��
����1U�{��S6�9
�43��u~�̾��\����9��V�9�S�
'-/k�!igr�ʨ�:�����9zn�Dz�1T8�
�E��E�+���$�o�����W�g@����#�����#B�rc��cT��i]�����%rM�9�V�3C^m��Y:L�&
�H-�n�=��f�{H�<	8g2���^ck�}`�3��9��o��yF���|��.tH=vNq	ۼ�
�T4���M�"�K���uY.m�����O_�2G˜��t<3;�3A���M�6�X#�M]�
����L� ���Ɂ=4���y����r�.��`\6?�qn�x�
-h�.�Y7M�5�
ls��'��lq2�2��ɧ�A�w�Xf֕a��J���B�4��p!���p���ǵ���
��cm���	��17H�o<>�·hQ��
A��TO��>_S@��J���C��+ v�� џY��P�sM
-<{\�5�~��
���cҟ���2 ��m�L�Sޘ���
��i3
�za^�sߨ�j�~,�C}�ؽ4�t3jW[������4�� ����>��b
Q?�_p"��-H
�C at r(���k)�n��9<%��a��ԟ0N
����*/�㒟
��4��fc
5E���|̌j�{��)��3��Q]��E��]�>��z&e�z�3��]�|�j�Ban�����
-��>�_Y1r
-�/�z�.��
?��
�nۂv��J?��r#t�n�Z
'^
ű譔����_�/v:��jq����W�u{'���3���;:e1ire+R}xR��W�w�6�W�7��
��
�9���ބ�Fd
���:��5��?_�o��
 ,h�"��W�Lھ���f�*n]Ũ�9�鷺��u��r�
�`S��%��:�|Ȋ�U�(f�+.��3'�KjXe��� M�	e�Z�njg�^Zٯ���=�^Ʀ��c����>��s�8��U�e�[�Vm�����������s�q��lϺ��g�y����m���=h���0m2'�me���u�D$�ŢX�
��P_�]Sw.��t�ٞ��l�aE�[ǖ��e>/���2�\�3�
94j��1�>\_������ �߳󫡔�I�=�x�:\nۻ�����y��9�E�\�`
,�6Uʁ��Ğ ����ȥW�g3O)G�)͝Z�k6uV^o",Uvҝ�F;{�g�	�'��e�B��}�MU#k��|=�b��F�D�?��K#A>~�6-�!�5^����^�
�9_�p�j�����i���\�+ at n~�/��m�J
#��=7�V�=U_
���V�a{�"3�+�Q��Ofy$}��c
�1�H���V�t��=v������2
�_yR�f-�B�{�?�E�e~�F�%�Fz��
.�l�
��q����ǻ��
y#�n�ᬶ�,���В���˳N�R��<]�
�
adr-:���e�7����q^ƻ��U�HG�&
r�v��=��Gff4���p��
��,���ݧ�1D��I���\7u�8�������Dž�	ǔ;�3��	
��J9?��0
-��Ys6�D#S~
�����R;��%��KZ���R`�y�5һ
_'�����3���7�i Q1��
kjk�b��w��;s��Ά����o
-���;�֢���>ťLf���68��TIb
v�1���}ٛ�ZASl�U%]/��v�}�"
��W�Q?dy�1%��zX���Ր�C�.߆f�P
�qر�]�U���\��J�(���i�a�ϕG�T
�
��@�Ζ&ݲ�B'��
�|;;����_E�2�V�^��$|<�
-�YA���2�K�Wn%JQc���;[!k�i�X˿
�-e
�:F�y}�+�*�/�|�UnJ�\�S�Z�Ž��۩����?��}��`tε�Jv"�g�y�R�j�U�'޽���%��"s���(�|ڝr�,y
�Boj';ubC�u���׸�.�J��v)�[��T��	�RQ*w��f<]�z�T �����h���hmf�+�̾�qR��ghO0�VJ/�m^?H7sb#q@�lۮ6�<�:s�D����z5&J�ջ{3*������)-5sQ�_Do�@D�
�5�Q~в�t��)��&5�m�([����P}���$��̯p�����)7�zH��qk���ˣ���V��U�P�h�g�n����%׊��(�\��b �ϵK��[�����vg;��n�/�քPM]p�a.5�9
�*�Y������9����5X�Їr=�W���-���q�E�VטEȖ����Ȅ��R<�hX���8����M�3��b�
� �h�g�XZ���
�8gʘ�D��~I	(���Ƞ����^f-5>f-���e�L�
-�E�5�E�߬�
��k �� $��
�ɿ�l@�3cPY.�@�T�A��� �y^@6U�A���@�(��
2�2GC�Sց�6�d�(��K��
xx�|��
Y��l��>�
@�)(T� i;k�ctH����٭����Y�3��n�<r���� [
��<Ȓi�I�kALU��0��C$���� �G������5@��.��[m�����/�3���;�,� ���=� �0
-�ƣ)�^�[��T��>���ˁ�A�' �tE���jn����AV#	����t��x�Id,�D�[�_��2�� �
-e�y�ť
�&q��o��$ r�4 2���� ��G�0�7a?˂lr�A�,�^�Uy
��!��
-
�=�>�r:��,�t+�_t��G��"�s���'s��v��_	{䖕�վ��hиw�8� :�� ��<@�
��� �� �� ��w*d�� "�8�4�D0H��y
�U�
�Kj�Ș
���
��ܐy��]�
׸�}����,�"�`��sz��-+ }��Ī��:؄� ��)

��C��+�7~O��E:!������
�����+�����Q����[M<� ��g��s�zk��u��1���µ3!ž4�~ls6��
-e���h��$ x�1T�� �\W������S�$�V>x���%
-�[��}VG>���n�Qo���l�K����nmt?���hp�C�貓����m��%�S�;aaǪ-e� �~�C��������鲢�׿}� d�y�	Q�AAP�������몮��z�\���|H����!4�
�{�E��k2�H�d��d�92�L+a�<�
r�2nd���h�w=J�7Sw?Wk�?�5-.Jav�k�G���`r	.=�|�2�E�����u2�zFJƱ�
̙t��C�g����O~l�5��.~�T!d����V�.�
-�'���\¾��gM:
�9�� Ԯv�߅9�q���r�H� x�냺�{ɺ}�-��7��X���I
!{��j���E���"�Ju�Y׌���������p���N����e&�
�Z�r�Tr#>���o�
QaO�M*G^�(��7��W�d����9a>8�6�����>�
��E��D�������U���&�l3��vئط9Hm�9���NYݿ�1��? i��b�Q 3��0�{oA���������R:���
����
��{0u��Ft�D9毒a���Z���
��n=\��mw��)��5�m'Gu�;y|��T��s1��f����8��p��"�
 =y��0�	Ȅ��͐�U���I�
���S%2
�+f��**M;�G�v���+XM�Sv�'�5�a�6����һM�3"oxn�Z�6�[W�zK[�����~�F%%��J�5��C���@U���7�Ι�B���%X�f��,���||��ו�Eo���2��W~p'?&���ˍ�Z�1��(	��m���sP���*v�U�
-U�c��٢�n��J
V��Ɉu���h�
ww�������~��? i� A�v�a����wSƺ�lN���$׾a�����K9n���oF�د#�4��
�u�'V/暋��
MFe
�Xg��+$U�d��+ܿ&�i-��Nܠ)僔(�j�Yf��m9}7�e�T=��hC�>�Lc(�
�@�����M�(Yn/W�y���D��:�S��R��O���)�7�qJk�Ȩ�e�P�B���ۮ��ږ�*}/�q�	
-Y�������?��fJ�E���X)���]����@�ZP�1;���|Ϸ���{y���1�ܨ�9�2O���-���
�
�*��A}�������
-SyǤ��$X���h���[�X���#��s0��A�'z!��S��\�>���Z����i�
�ǿ�����p}��.C�ü
-�
%Lcw��������K�]�X���=X�?�d���E��^
�-���=y_)�V��n*�\�+�������ge����p杍9�h�d��v�Ѹ�Pr�A-}�������sChC
vͶG��q�?�e=��ψҒ���4l558�v��l=r�o�[AMv庂��*�{�y��7a����W�`m9�0�"{�yl
���1�v�g�k��Җu��O��� ���
MY�����	��vw&�x�����u~�5�����̲�Ы-��
�c�h
WV�n�)	����KP��4�
i�q�]��U���+�=
�ǀ���7��
-5z�VũX�Y�yc���K��������-(�➍�(����v���tj�)gn�g���;�0���8	�]�@���2��? j�G�oϓ��G�9ť�2ð'W��xЕU��v�(����'�F����֜OTw��WIѣ�֑��+�o 1
�\�஧��='~��f�y
����ʦw�MΘ�0�n�u�H{��RY�4!��p�2~����S�u��!S���T�d�n�G+*9ַ�Ϯ���,
YSPMrwfl�����|�)�H%w`��	�q�5�p|{M
�T;v����)�msv*��k.Qa�39*��s_^���
�qh�ﻒ����2�9
�9m4���z9c�A�.��
���i�3�������C&�G�M9��wc�o���\�I��;
��)�k�\8�
�lco���c&U�z�G�(�*v"v+��\D��DB�C |�g���YM�j�zJ��k�{uD�������zPr��~������!W5����vP�wp^y���ڇ� �&I��C��Z�a�X� [...]
-Jwk�VɄ�Θ���2�vv��E�ݩ;x��aۿ!<��t��XX�]�����Nk����OMK��[�����FE����S�;�#o���}<#���eM���-�I��%ʥ��lB���w8Zv��jO?�[;�~�-�1��~g��vjO/ı=�R��p�8��q�r
{��l��
�m����)1^%��
�0�g��\`n��?}qK#+I�2Ln?��ep+�}�DȞ�!z�e��
ϛ�-u�6�LW-��ٷJ�̽�xl���\saU��B�ͅ �������ᔫ��V�R�n/�
��.w���@���k>ٗ�6�49UzT�Ԭٟ��!
�릯qޑ�Ww��C��M���!�B���fK�
F��{	�z�m4d]�-��՟�G��Y�Zׄd_�������f9�{��֖
-�
y��5���˽3���A������qe0�R�i�7u���_�]��N~28�K��o-�t�\&,҈��|�5�4� ׌zI��k��z_ݏ�a�*��U�*ͪ��Q�8��Ct��`N�<�i^�D!��]�<�יr����#1��
�γ�}#�xG�(�w�k�m
hCl�
\n6�̶�I������gnUK�$��W�O�\�z+�\xG\IU�R�z�u��bx,�Ei�
���d=<��ͽ�M�����V��Ǎ
��
�LM��7�-ÁN1N�ҧs�S���V�k�V*۪'vB�>���j	&
��aʮ*	�B"˥JJ����/�S����%�wK�t.	�FN�T�_�H��coeMu�@�ӿA��W$��&T8��pFn�m�ʶ�n_c
-��4�9�/��޼oȸ�E?��ǹ���|�Vfu>].�z�R�S��^.��W-��͜>����t
e�G�dү�D�����vw����~��^.]L�����
�'7�
ҭP�����2
endstream
endobj
127 0 obj
<</Length 65536>>stream
-k#[w|zeN�n#�k{4�6�~��¬��ծ�j
8��
�ޱ� S�%��m.�~i
dG��53i�
�q]{�]#�NsC(�busx�U�z~�A�6A4�x�m*��SJW����?��� 4�V:�7��$��
-b���2@�`�e�
-��h�'��!@bw?�A
��3@��
 
���0��(�� ���#��;]x�U��_���p��_��ͩ	���9�}�6�r �

-�*бB�p�s����:�F m���������CtRb��	~w�ԇ� �T��q���
��o��AxM�W7L���������^Q
�kC�ge���v�A��
�	n
�^� X�k��~ߐ���%@ͩqp*��E�j��O�o2�5 :�
!
+�
-}�8�@t��IzƯ�?^ٽt{����E�?��2ls����������
��L�%�84���,��f`�g0rk��� ^>�r�b�XJ�@ܾ�JÐRb���)'�69����|���N^q�^yD�T�
I;����7 48�����������Oz��>9s4�I_ �� ��[q�xv����<x�0}
 &��Į���;����Y��_9�Y>��Ί���?
p�x�l��
z��{S`0���vȄ�`�[
�H
-u�HW��������
-Ң��t6,�t�3��Z$���0�S�p^��>|����Y�^�x����ZH*�r���F�<z<�����N�ۖ	�ם�D�� ����qpJ���
� ?�����s ��B�
ҕ�Of0�O���0���w at t�H'�j2�Q�祖��C��v���h�
�н�7�cr{�
�6�����n�ֿ��G7���,�Ԥ��A����
�
�r�Ԋ���tv7��d~��h4%(�2�X#�ģ�}����g���2�4���r,���Ǔ��w}^Y܆���JٞNY�
�	��[>�*��oR'�E
-Y�����nj�d�K����'���q*o/?�1;Z���8���� �e��]�'xw�{�]��}k�5�
X<_���F�e��k�v�7�~�[��������|�檧�M�Ջ���$��	
$'ݹ$ǩt�'�r�gϥ�d���n��^.�wqh�_�ß_�Hk(T�F �
�Mߡ$���e0�G1wz��	���@)�"5�W��s��ı�#�� ���MR���{+��U�m�}��?�N�
03a��I^#���@o3��2�qk�/����w[�������|b]@|�1�$��݋�9t}����
�rd4��}���]�0��|��a5�
�: ��aIY�b�ݷވ�����a�������nb}����Pn�/�a��s��z��z��`��^
r�LE�
�|�Mh9�����:�56���
;�-7?\����l%tw���ɾG衬�E�I6������M
����d��b"蹷+o��k��~Жy3P�%Q[N1���#���EY����v�[�E��`�@zb7����������ϫ�K#~<"�v >z �9�8��aF�;R�{�m����%��w�ɽt7�6Z���L[���*
����a�[�
-�J9��՘�aK�|t��#W8�nW�����*�YQ���`��`}ޅ>�M䐗
r����z- ��d
�?M;��xw.�WJ~��f�l�Q3�>ny-e�u�9v�N��ʈ;^��uC]fV%Sb.���_��XZe*bɭ��L4�
7R���YR*�
�7������
�RS䆸
����
����ku���v�ZQ���Aк��l|1���E?�j��}#[nِ�M��Js�X:�3+������Z�y���ģ�\�
3suIO��b&
2vׄ;�V�GS�
��R-�!5�!QY6n��Y f۝K\l�g�n
O�ԙ=ԞCuO
��q0
�>G�1?�%%%)��d�)/s�sS* �\����|
��*��M8�p�����
ㆇې����$�Oޖ2��w�7@ʵAfs���ܕ��5=�a�\�|��jeiK;�0~1-e�������M}�)� 
]��vF�VAA\buQW�
�5K��ug��͕8�rٲ����̚ԛ���$K�k�]8��5����� ��@���?0m,N����S7��uǫw��CN��)��١�݄�:�(C6
��u�#�I��������k����Er�!�,!�&�p�Yq�9Sኾ��eܚy~�)��0�܊q���7 �l�A��
nv}\��/� ]�\(9��T׵[�z]�g�G����U[�Ԓ�|���:R��t)���<!��
�y/A�ܾ�UY�uF�g�<�N��B7r-��(�����R�ۯ�G�V�.^�j���o������0�{A�{G��)�	
�+-�WaT���ݖ�W��Mc [...]
�.u�d��-d�v���#ҕ0Xҩ��n�mmA���z�Ũ-.Ǔ��n>��.?N8�vO1�-wЭ��}����V�Hj�����z�Q��
�G�pxı��:7�1�B�c�ږƟ5#�hCR�F���y�Hg
W�^�~���~�{�q:
��n�
��S,�Ŭ�����e'lj��'v!�$��)`z5fݺ����x��vF�s9
Ό�0pcG{9�)�/�kfP���a�
-��S�.G���^X��*E3}�������13�R�_�Z��͕�n(��f��$$���V1e�.��f��}�63�x��)j�x�Ǹh����
�3�aa-x�Fx:�`��^T������[n/�"�"/�����#���.Q��u����(����8������Kvx�*~jE��.��]��k��9�v&��
?�ˤ_���Sx�f�������ÞR#�M�ߋ�6�M��%���%�
�%7訛�Ob��GbO=#��p��缻���A:��>�D�s���EO��O��
>��
�\�3�֐-i`>�:
���y�ڝ��8C����ע�������O�������릶�3�sj۞�n�����m��q�E��3:���/�i�)�]��u��������L��}Y
6����!玄'{��,S���i缄��d�5��1�RGa�����_
;W��^=rJ��!�+w(:�iO��u��j�P���B/&Z��i�*�b+�����9��T�m���]R$�fu [...]
j[�H�;�%�c�ܬطմ�iFj��-/��.�	���h^f�}�7�@7��^��G��n��C�-ߡ����y�5��g�{�����$�T��}2� D+͕
�
:$�${�jC��V��.U��X�d�]���z?xI@:Q1��t����}I�y�����ϗ��
�Z�8�
����9�
����U8:�S�ܼ8���lLi���ޔ�γ��ʟ��a5��U��_,��S+]6�V14�n���G�VF��5v'�t�V����ʎ��k�ҖHf�K�2�7GG#��+T̓O��$��O�W]�86����y�2{�i_i���vvj���U�8�Ym�
�ťT~3�b

D?x>v��\⽓�'�}��Z�g&�0G
��r�5��47*
�=��J��`����Z]L��V/�
�
8�� *�ۅsQ�H��͇�g�#�%�BmKO��4�2�܋�p;]d���YZ����:�޴M&
�t"
�F�tm��o9�@�.�4�^ѻ7z��H
�S)]��~k[O��E
-B_����
��BD�� �f��[+�&� J�[��r� QJ@��wWsw. ��,)u\�AJ��Aj[� 
�(��2�AjU�!�g�CRr)�P�]~�s�
-⡂����W�ﯿ ��<@��@��o�6hT| ��O�cd�x�=@�Tj�HyWH%�1��B�
��{$S�AL
�}R��	��0
qk$7�@������b$��h$c��x��
 1�9�p^��`�$����$��4
��I
����l1��A VV��1� ���= d�z�
 b
6�8�B�Z ��݀
(�~P7_*g�2���y�zƓ���!�*�? ȧ�
��JA
`����
�TO ؄�V� �j��+�� (������7>h��8�A��bth�� �0�=�T�|7I���m��g��qy��#ѦwQ��Qm16�j������?��I���ǡШ�x~;x3'�03 v�� Ӓ`t�\�a��C���17�S�ɤx��X�����,$���bO�k�ڊ�j�D�8Z=�oĸwQľ��u�O��'9�WS�ll�U`JT�⪵?��e�,��~�[����� u> Ǥ"��K��G��M,�YܺZ,D�W�w'��8x<r�;�3��G��w�8��@�^� ��Eh�
-z��e+ȉ�Ͻc����e�j�o�Ui ��P���u�wAcz1b���SAzS����\A:+�^�w+��UcBԣU
-

J��צ������Uowݱ��Y�҄����
-����	ӹT�[�{��>���^���=�������H��-���3�|��&�P��������1f�
zR�J}F�p���C�pC�x3<l�Ap�f���..A{�������{Q�iy�����vz���@8��6<�;?0׃j�{Ş獥]�6������ �A�N��: F��7?�&���M�x�!^
-���MF�
[�W��p����s��jn2
uO�57>��8��8Nk�p��y�)Ǟg��
-��۪���q/Bv�r��L0wen��hn��$�� �@
- ]YT�K�.��̬e�ͳzO���~d\ao<��ܧ;��Ñ3ѕ�1WT�O�m�/�Usn��*:�wj�_�I���$

#�o�#�-ſ��1�3�4y�z6|
-z��/�������唠Pa
�r�����w'A�uIM�GҕVשk�|�R�=�6��CC�
ΩJlW3���!���)�L=�4
ӽ���L�?��Y�>+Xˍ+��M�INk��yj�W�ڛ
i�Zf�էm^}��� {�� �k���
-�;G��1=�>�
}������\gA�Zb�~{*9S`�r�8Z��:�m�|l"m���НE����\c�w��uEzRZ��r�|x��|2�+Y?x���K�ovtٙ�}���0�2l��o��3.��LM&A6]�>k�E?��9	�{�<wCjp"V1�t*�>��;�3�C�H�b����sÃGj]�+i�1�Kj��k(�Z�'0�Z�z~iK���i���;�
�����t�W�b,��M�/~�?��,ˀ`AdD��W�b7toF�_d��p�U/�;���V�T���
w[/���Zt̫��L^��ˤ��:����TZ���/3�/�;�X���ł7
�fBa�EJ­�
.�6G/ĢN-Ė5Z�#�_����2M���D�w�U�/�l�/+G�4sNޘ��ƞ���7��KՋb�X׻ǣ�Q݋B�ϻ��֯�!����2�YEˋ@LZ�G󈎹y�-��Mqu���0�o(����85�w���\=���vN�Н�ī�]	.q;�J��>v����A�`��f
-}S�h��sj�\/9t������jച�K����f�`���p���y�	5���H8�3ڊ���FC����
�m)n�#���G�
��w�D�2윭ڍ�Wi��_wwo���C�冓�ԇ�ۡ�Ak��#jS
HA}u-UA�cE��5�(
�pQo��<�S>��i�c�?ơZ�æ�9���+���Ya9|�\z�d��ޘ9�K��o DӇ2E��l=w_$8���
�o{�L 
�?�j�8���^֍���iV1a���׵t��X-�
�3.�umx��6��F[��D��3��ӜK�pZ��<-�8O���Bm*��_�~�1�q����?�6��bׯ�<A<$[N

�ޙ%{��9ao��8��2?�d
N�4�Z,
E[kh�c��;���f��H1���
��>3���N�E�^f���),�����
-W�)]*e��
�=��\��
�0
��>���Q�|N�B�
BDxZ�\.�a��}�l�����i�-[W�Zr�/Jե,��{�J�=�7�;��>�?��iП$���NO�{�>�����ԛ���V
��~0F�Ril I���>�!n$���� >���X
b
8t`U^���
[��|�#wi��%��~��ޥ	e<��W�h2�#��ͱ4O��*7�Q�.��L@,oZ�&�$.U�T�ͣcC{F��9<h��0���d�0�i凇c�7��y���F�7$�[��E4��x3~
�3���Td8,ӫ���z�����RjŀYI��DGxU��<p�#�Ւ���7�����

-Τ˷|�?-Fc4~|���9;p�AcP�f�~9,�Pn��,��9�
-�&9pu�z��A����[)�����ˊ�:l��>ȇ�Kd=�p���K:���
�
-IѮ�Qt0�2��aJ�t1]e�����uj��X�X�F4G܇9�'}_=�ɫ
@o��G���t�b�RN���e{J��&�f�\����pK/X�K}��U���[�2��ՒqQ(!q��ص�B{��?6
-,��g�����N��]�Й����d7d��q0_a��x��f9�{�ܻ�%˥aǐ�ΰ�;v��"�1�{��6
d��i‘�{����B}P�4q_�&��&q�>6�T�C��-/�tXtm���r��
1�1HO�B��a��
ӓ1�����?�@�w7}ɯXdk�}.OHE�>� �ѼTnO��&��:F�Ck&����F�m���g���Y��:{�F�'�}q-]��gz^q���x�S{���lEn��E
M�2�y2�i#���IHŤ�+R���+�z��
��3�k��Z��Ѕ湿�5�,�	�P��&a�T�V#Ȱ����:����k�?��-�
n�+0|yF|\QI��9�\�L
?�'f��
�ʉ	��[v����߃z_��[c��Y�쥰	��2#�CFZ;WY�bcri
-s�Ր$;[�GX�.�5�ޚt�z�G��vh�b�ܫi�M�~��?�[���p��c
�PI�
�T�g��x��1"�LL:+���$����b��!k=���s
�]i��ѠU�G3Xcb�����ף�y����F6���;�Z�a��TQⰯ"�s���2�ʾ�&+c���^\��*���9KR�}������>1�Mu��&"��]�)�Km�-ڭ�e�*]
4��h��^����V
4R�Z�"���X�*vn����g��U�
g����ѲT<SR��עO�E�ʴ��i��
zu���Cyx^V(����b�=���6�
�+���µY�5m6ʶ�P ����M�֌r�YCt��;:W�L�����|�
{MkU_,���&c#/ߡ�W.��J9R���x�d�t/�ɫ�5�j+;
d�����~����
O�`l&D��d��h�j�[���·����w{�Qm�[�t�8��}w.��[I������ OT4�1b&�����'\ճ������
�8n��KU�iz�i���^�8-���D��/.�����]a{H�ly�0'��p=��4�c{k=oJYuR�3�A�4A��E[�Ei�*���ڬ���|a�
Uc+3i^��Q�xD\�47�G�e�|�
-A���˨<u�84��H��T��)]Cީ~�-��=|Q���E�]<��eۜ�Ov3��G�Ki[�Y�����
}��*���4����ُOPk��~�֪=K���IS<�
cF��-�w�'#�_�R�-�M��Ub@<A
-9�G7�o
B��I� D�iMAdѿ���=��E� Ҽ��&�p�@Z�*H��&H��C�ʨ��s�6��l�ɇS"�7�|�A	b�N>co�|(l
-� $�����gR8A�q�Y�r�DO���_ 5�L6�⦡L�
e��
-@���7��T' �D���� U[�����T�A@(����:�'"(�.
!I�:��(l����#>=�ϓ*�t@
-��/�y>M�,�,[b��e������P��
��r�52����$@�7�qC��A*��:H�
HI^�{/�� b4���P�Uր
!��d�
aT at J�lS���12E��./.������5��WHT$��
��0j ��@g
�9E��q���d�@ �� �;
�
-���Z�@P�w�u���ݛ��~�+O�'c�r�F��Yx���c����N�{�!�� ����t� ����F�›�w5���<2� 
���	����û*����~{$
���k���6����O>���-�q&Q�����,��;���F�
�a~���������?�_0!��g� ��5N�P~���g���hn	0�oL�. ���븷�ۥ��ح�
8�<�j��q�����_W��A��������H�~6
Z-�L߹��Z�E�`�Y�{S�S&�<��_��@��Na�_� O�3�
-�
��-7�i���ڿ
��b�H��r����-}¡t�;��u���C+��!Q������\)�����/��>�����xy��*�]z�=�W���Co��M��Ѯl���U���� k��>{(s��|��5�^�^s
,
��h�19Z��y����h�kH{�$ȓp�R�d�UO�T���i��
R����K�RzWvƩ�q����H���C��v�e��b��׻5�/M���������� ��0��#ࠝ��l k}��&�*'�G�R�QY������b��b�
-\�3�O�W�8������#�s������p�������o��7������|����n[��
D�z��v�{�im�s�_��4�L'���N�%@��w��0a��4j���
��&���s�0%7�/n��}g\�����D��.�w�&̛���j��K�0�pd����RX����
�z���%��g��]�_��z~�[�y�o��"R� ���B�
-�<��Pa�
2Ys����m�97��iz���c'<�`�oK�um��w�qw<=�{�f�>�l)�D�i�g7nٯl
-�kg=��X
��\���u幾����醢u���%��/`ħt+��? ��J��M ��^���?^�L���b�v�9��,权�k
���jl�ܮ7���"ַ4j�zn9�6�y����+}�I
-����U�ӻ�t1�+�o�Z�ö������Ejim��Xͥ�rkK8$T�(����
��6�����~���z]VA�h�{r��%~����}\9t�wB�n���Ă�L׮��Vn�)�
s���~�)�DVؠ�]N�d]��
Rt,�
t��d�\�]%��i�&�zU,>��/�� �O
-��t|=��0�Pѥ��?܏��]��
��'���)g~���7�,���
�ֵ�s�F���l���<��Wc5���p����%z_��VXT|�%�o�d��Iy�z!�y�sEU��q��(��Q�S�s�
���ae6���x{z��.}����h��ý����nK
��d��Ū�[� 1Q;�%'�Ui��F�rځv�����9>�,��]X���\9a�B�U�Mt܀�)���H�x�2g�{%���/�� v���_�f����e�ڋ�#�ڝ�<��k�t3���=�X\/�zS�<g(�rc�J;�\r;�R�{5m!�?��Zݝ�*��a�'gt�(���,��
�N*л`2�e�d�ۇ���E�`��l��/�����9�賊d���8��~a8���|�f��;�|���xo��$�>�G��O�0�!�)�SEF��j
ι�s��ox���9��>iݘã�f��q~V���霳�i�4ҧ��L/�iaVX�3�v���7�
�����A�2��[O|�+<\�R����γ [...]
�����x�o��v�D`m��0����T�oO߹��Ɏ'�u�a\s.��������i�>m���(����Nn��R� ��_3���~�Ip��׋����-�̵\0-Uoh�l������QtN�o>Yj���}r*M�̲�3y*���gM_���DY�.���x�̑ю
#��6�HC���q�K�v�%7N�>�������!�*�u*>�D+�o��y�~gN�4Q�
U�Vt�
-���}Ub1�߸� ���
-M��
I�%F�l�b̴V�t��U��1��?~k=g�,�_��{�aFb
��w��ri�?Î6`�ulpji�!���A������"�Ї��R�����i5W����kZ,�2���%�rlq9���s���SR'�tXa8K�L�(7�e�JO�і��7��Zc3J/K�0;���¬���<�%�êE�fy�w�Wے�	C�0�e�eZ&�s��7�y/U���E���O�w޺G�Y�o�����BE�[��=~_n?�cLih�1y�܎�g zԖ���q�gF4:X
g��
�jf߯H����g�%v2]��]��u@��%�t�.�k
�����#�t
�X����ɰz�\��Q�j��b_[t���
-7�l,�m�Y�]:&f�	�!Jr��F�ź?d�<=�W�~��_��c�~���O�ޡwfk�M�=>T����r�c=��w�Q��T���?8w{��a�z;�G�ۢtp��'{�騾oOZ����FX���A��,d��~-?�ќH����r�2�e�_'C��4f�n�*v��Ҧ3�N���o��h���vTo�S~��r��d���o�y!�E��"��?8����p���Y���

e
��|���s~�X.(��^#7��zJ�J;b6�yXIѠJ+(�cQ���t�}��L(�O�>Dy�R�R�$�^$E"��Ǻ�g_Ͼ~���eiu6M��iV�w~�즥
����"�"�eg���D��z�2X�Y��n�o-VG��`�ikA�֢��[����
��G��4atlo����]��⒫���SŢ9�y�[�6��Ge�W���ur0�x
_��Y1�f�,�[WK8�Xg
V��LJX@��4$�i���T
P�$N�jcW��ƮVv��N��B� [...]
�o�Ӓ_��N�O�I
<�e�ͱ]��Bl�,*Tg2���u��5�}<j|������f#���
�n��Q=wa��q���
-7�]=�([�d�Ye6��J�Q�˲�A�-���B8^�������ԁ��R;���b�*�U.���
!lN���F�>�����
��AQ��r�7��.V��Ws��T+���?e��5VN���ʋ��.=��l	�J�m�j�ɜ)����)dv����E�
��U���/-�7�(��1�Gǯ�_����(�B}?�_�������
�q8�}�n=�
#W���i#�*�ȖDV.��Ϫ��Z�z�Sȹ�%�}4�E�?��.�sb��@.VL!u�������g���V��>�	�]��uv�(��K����_,j1mM�&�����g,���'���Y��<V��$�Lfx�HW�^�i at C��nB�������0�U S�A���\��}������v*���6�o�At�DW
�qq򝵺x/���o¶���b�+}�D�*��.����(d2|��}�z��o��F����4�/a����ʉ��B.�O��A�fQge������"|�?Y��훃��D�&���^�o��
-H�9f
-�����R�$�,6k�@�n&�,:��S�jq�T��?�8�����ݽ�$�F1���i9N)�u㴹a 7�M�� �z�b�@��i?
�ܧ0@�������y��_|�d�S�K��2
�?�Ռ?�O?���I���u�^��8��� ��qjW��!������žqqz,�m��8q���6�%�w��v�̋��{���[��/�ҏ�L{��+_
�
�曡ˣ�@R���g�O�K��M������#n�o

��/-���Awj h� "�b��1��6`���F}[�6�DB��y�F��K,e�W���y^&��_�� P]1��4ɸ�����F�a*����@>�$мg&o^��dz'P�k�M
�	�U��o�Sg1��)1L\vo+�
��
q����{^�V5�A�ak{"�ϒxt
�G
����g
���,�����'����Lf��di� |�d̉�d&g;��[��q�x L��p2��Qd�E#^�^�Ƽ&��b�j%�=�9�|6�
#\,��c�	>wR�˷�Ti��
,������%V��H2�>J���d}$N`��$0n���Q��6d�l�IIV�m���v�܇yyM���9�>�����vޮ>ֽ}�����}�ޙ[z|
�~)#�2
�lmb������8�zs1㗳"=���o�������q��Z��_$١}#o^j��ɠ5��H��a����@y�j�}���u�	[0���#��m�
#�6��u���˥��xAW�����ˌ5=����D8���Lש��=�ǜ�m�jU킯����x�\�?���c�8�@��Q�oNT����ɘϜ���F�G���
�kR���뤼3�[�v�˸r=�a��&x��B�
��FŁ+��r�$�k�=�.�����t�
-���5a3��U��9%#�icS����"��%�y���P�$X񟙬�� u�)>;�O��	xJ%�մ˝׭�����lJ��PA�h�>&�������+�_P�
�H��і`��G�um����Ob
��A�톌��Њ���l����E�z �����g&�q�R���hF���y����{�Tu�*�9
�.c�{ӱ�h��
-�Q�5��o�������=������GC�[~7܅�����m���/w٨~��������_�gx�ts�/�_|��pb�(�����cw��wf=~���:G�0�G�s��Y��@����;R
��Kk��NQ��Pߺ~x�x'���*�P�o�������
#��zH�+<5gK
-�J}bE�iX�}.��o�ӿH�h��4��p�����+�x�B/r�Nl:?�
?��=�R
+��BCg�<�;�f+���f��$Uf��z���V�q�^��i��d�ra����|��C��K�\����w ��iv��Oj�~��"A��;������7��\�<|z�N���r6��'���
-���
��vH�ҮTӰ�4 )��Ȱ?�*���2魥%Tc�
-#����|����y9�ҌT��@y�3�ٮg��t����g�b[�L��_�� �U��4Amdo���rY����
M}��T~c)���� �$[�;��>@�k\���4?�s�
,� ;�C���`=��GC���3�o�M��O�ZT�t
\L�`&jY�q��҉'�O������s�
-�x���r����}T�����z`����|?��s��+/fO�QD�5Azť>7d���n�Hͽ��Jה�n��|���/��2W9��y��� 
ö�

��h4,5����<�:|� ぴ��<�"����9���|>��u,�f=��ڌ희[��D�koZ98X�/��Y
3ٲ<�[�,�?���{ӧ
-'o�*NH󪈽�����'
-�sCB����ste����罚�J*蝌���K�I�H>w�D��r�ܖ����!�������d$��ϯ6�V�_G��ei�'/%�of�o䥀�3%�����JL(����J��D��Zp���{���
}N��
�+r���)Z6��m8�h��ϡ��_�S5����N���ėL+��w&�?V�3,ζ�`3Wqd���O\e����S�V�s�Y)Mb�Z
a�
[��
�+�*%����2
�
�]�v���~]`	�D
�m|�R�/\���?�6��_D���
����/��=?��cw�9�v�E2SW&>Y��յrH��|�S_����
��ى����
W�q~�k� �"��
-�r�����h��x2׎�
ۅ��`GdB���rq&�7�_�t�2�S�9��l8�ͧ����^}�xus����-�5�
��in�Xo���l��>�؜������7κ7�O�p���TDj2r�Ò0�
^j�;�Eݣ�Uiϳ��Vh�z��ݷ>6%��O�w|ϱ��)='ϝ��>��*����/
�m������(򘵏��a ra����J%��T�_�<�SS����z!�}g�_ˁ��\ޣ1��
-UC��qZ垜�f߽=5��)˘!?�|vZS���u at O�����&%Ms��U\z2����y�{%4
��w��a߿������%j�zF15���6ʫ�\���D�a���)<F��&^N��g?>..ި
,C^�v�a���8B��l
F�lmJ0�"��
5�=���k0kR�t|!���v��Z���K��s�
I�0B�>=��O>q�
W���RӃ��=���6��z'��"(�8�@ALLR�ļ��F��l'H5�
��n�m
-�7K[�̀���'�~��wz�*գ녶@���젔��f�3����B�h��N�1�1"���eH�ZꝈe���Zg<�J
�f���8l��N{�]
���\O��4S��F^�!��y�y�/�U���MVG��`p	C
�I��*p�J��tg���;M�K6�3�צ���λ��Ž:�6Q��#D��ɡ3D�;`y�
p����gݵ��d��m�X�����XC���8�z����G"�2�!�EZ�gh6+
&����2U�{L��!=�Gk�!_8�v�f�J��iw�l���s���g�=^(G�{>_�T
���
�Z�nc���U�
�6ws��
�Ե��]���ڽ���^נ�ݞ҄]~A�C=�?�~e�o��1h���D�ST##��t�U���~#"�G-�sQ��q�f�}n׺��籺6UZ��>4�.6���
w�5;Kt{+�{#��{��na�W�Յ��lVh�_!Xk'7��r�?����X
rZuC���#ߌQ!��F��
��T�p�1�u\e{�^�ߞv��kq�u���V;_h5�#�i�=e֠j�}�xP�c~��͚L=sU��=����SP����.
����
��י�l,�S�Q��b\��,�,3��Hj-��D��-c��[
��jF�k�gn��N,���Cc�D�Q݄
��ÓG����X�*��m�L�^e�{f+�@W*�e����Z����<�]����¹�Nˁ��bh7���j|�)i�q�szw)1�:�;DΕk�
r
-�� 
5�w/V�ij^�&�n���Fe߉��\隀�Wn�?Q�Qar%�j5�/*��E)�[�U7I�
-����-��

�)�
����B�蟃�[����R��wW�q�(�ؓ��n5���Zjd*�\u���ң����<��&�хd:�
t �
-�(4Q�ky��z����9N��-�\n���˦>�U�2�7
Rd����B��_� K{!���h��'9�_�sjF���>.��vke&�:
�J
�z�j'� �BQ�m�y����ܰ���+RD.�PF��j��
n���d�H�Q�=8C|�-(>s<D#�
D��D%�D�� Q��8F������M��tͯ;���p���&�`�R!G4��"h_j��,���
)�C��f�47>�e�b�md��$,u*�
O�:ch� 8��x`/!�������ݑ������@���
U��$ڇh����)l56�h/B��R�.	
�٦�[�iWOҨZ�J
e�G&7��)R��(����N��Cq��{i1`/����+�ulb
-���<�� ۤ8���h��A\�e
���� Ca�����x���Ɨ���, 4��)N�q�l2qb��8�u�q"�B�б'��	؟�#N�X� �x6⤃�^`�`/	^���8!�o�
�F�
-��Z��/	�
�	D�n��{<⏰a��+NW78N�����iN��$8����\�=�	vzo<S����89�M I V@4��3�<�8��4֦V�=h��7	���.��I�"������¾P���ɥ��A�Of֌S�ҏS� �)Ǯ ����0Dn�ﱐw4N)�
- 1����8�+@��=�s}#r9~�x~����ӣ`�9I#�Yu��I]
-�
ʂ�|r�O�WDk5��y��
+�'���Go��g<��O��Ɵ
-jF�*N
��>U�
��d=�6G�����޹Ά���:�
-��A^e�q� �ǣmfﯮ����������0ە��m���?$�r-H2㶟d���5
-8A��+�d:�FEc*�6�����a�$P�c��9�|��X�|�N�A������rS��:�����n�-£@eJ�G�א��~a�h9�0
}|n����C.��:{��
WV$�
��b���I
�I���'Y>�I�UH��5�dN^/
D�Q�f׳�D���
��C���
g/�͜�ߒ���o�R�ܠh�Ҩp`��SW�P�%t�z��y�g�}���#㒲�q�p�8�U?v2x;��$�� �������������B�-%Y�o�
�y�Գ��Xܝbf�-�rr�����&�u-=����*�	�³����s�eN��,�[fXw)X#
}�~��~9��<���q�X��x[�����7&�_���${����"�W�7u��&���	�.��`V�ChR
�y���JN�6ʝ��{����c������#�]�غ�va�|
N�9�wMԚA��>�齜k(f�,9�>���?�t�`��紺k�8����I�`���džM� E雼��w�jC!�6�|g��*�f�xE)��2�8
F9��s?�ؚEGik
�����}sy9
�(�����w�+��Y��7�`�4�q���
-�wݜ�w���mSY���릲��?$0쁢\�^���{4E]p,���q~P��rC$�����q�Y�u�B�j���l@��.�}=͝y=�Sm08(������k;ꜽ�Y�>6�{�Q�N���#��A�
�^��S�p�|[�������[n�����hCď�
׿��//&�Ks�Q=�pU���}����<���������)
Qm��;�����Ɲ�x�;���=V�~�V2�f�$��
-�=���4T��ܪh�dz�x1�Bs���u�X��ls�Y�g����z�
8ӽ��S]
|��h���SNJ�n�{�l���G$Z���^��3��=��
�����ѥ:�W�@-c$
,)!
�JE7�
%��n�'w��N�2w7�x>&�%�3�=i:@�R
?��� ��8Rm����(=�
��myˠ��&���
�����a;��!�8[�#ꭁ����'��ҧ’ƍ��Dl��4)I����]q^V�
izc�Y�͜Ys�{L� �'/��䉚�+�����;MTf�|9~���[/õ�u}q��'��VG璓�Ɂ�g����6��dN�Յ��W��?@�Mc�v���X,�E.��+�k[�&9�e��>·���V�n�w�:��t:f�N}�

i
gxš�ΘY��__�_~��E�������˭w0܁�����2�?��Hg��f���v
-�%U)?�ն��`�|]
��P.��t^������V0�O;g�=� ���Z���
>�$�
q������Y�υ�X(�Y]��Q������1_
>o�|y<GGr��xi�����h+u���m=CgTE��W�DQ���2|5w�{��M���k��;�). Ȅd�E�G������蠺�Q��O����I
���E�1�0�n�6�A�
X��I�
J��ax
�֗�^�����C<��3��=���׾85�3�ߝ�LoӔ(jw
�e�k.���/��(5�������-�E��2��}
��68
n�DŽ҈��*��C�(�
���y�����,>��,����*�
�'��s�6kr�]�/~�g��<���
����9̝�b�(a�璃�����Z����)
��q���N��/q?UKEwB١/f;�p�kL�Q�Le�r�Y�k�rc8gk��S�2�>W���e��X{L�*@�>x��ΆK&�,�U6����d~1��5�r�"�A�j-��0N��;�V�v���-�@l,����
-7�Z
-�L�[]�@��
[�捄��.�e�����P��<��/�E��A�y0̧�0�ey��_��~�a'=��t�9ZS~�>��V����L�S�/���*>�7�İ/ٹ��⁢sQG�J�4Zo$��p&��\jG�,t!n���	t��c�ُ������
��:蝄�燍�Sn �2��10�i�z}�m�{��c�+�k-��7]��&]~���i]4{�g��'`�q����2��v��jB��h%�(m0y0Ze�lo�lu[a��]��}ќ�Q~�����%
;1"�8���Y��z5�
`���b���e���]Y��=cI����uA���B��?�y�nU��5�+�_����:��jV��V���[n�><_o'������l=[T�=�O�jc�\"F�9�
�.���[O�=��A������<�z.)���fj�_�	�q
�M�rw<,�!�y�bsI'Ļb�>LC��]����[=o�2�4S#r�6���M���WY�-�3�EO��Rit�>��M�U~���=ew [...]
- 
��,4��~&�o�~*��T����K��Rb~:�C�����S�&1Ԧ<3l��~���^���i�Ÿ�E���r;�n��HF�"��
t��p�<k;H���B;���W;g�1vzI�v�|0��q
�L������N}��Ւ������N�k�
Ui���� %��\��b�W�.4=�rc
-4�
�yhkݷ^>�U8�|����\ܱ�z��ҕZ�dr4V��bK�\6��ٿ6��ڼs�Qsq[l�
G���B[횷���phY�i el�wu�C��bR�Lg�c��3Qw�޼̱�@�e�J���]��4�ύ�
&���6�x.�~*���n��ץ]�e_X�C-yP)56�7^'Uht+�Z��񹾓kH}7��:��6u�s�:�7��0��v��
r�:��T�s��BZ=�c��,��ֺl��7zu^�=�S�ä]m"y����FgE��p4n-��|����4;6ޕ�� �ӻ�ݓ\=�i5k��<�A�����SE'�Le{\�	
�2��ʨ�����æ3�i��*\��Cd>ه�� w�}��T��u]�uS��댡V���[
>��}�]�jM���Z-'{��WV��@�<s[9M#�"�[A�����V��,C�d�$�Zh�P|<д�8�lq��Ŷ}Њ����B�ö5��3y^
-�z<����ِ�!Z�_
m�$�*����[m��
	+�i�(�n�U�^��d�@r�&�6ʠ [...]
ƠE�̄�O���W�#�B�uO�ڡԈ�Wc~/�z�G3���\�zL9yr���X����5�n�[rາzeo
��mI#��g�f~�Y>�.�
��\��NU
PW#�?(c$���1�Ϝt.�Z|*a=���N�ҭW��G�:
�����Y������Ɇ���
-��,7�]9���Zf]��{"�}@,Bd�_�#D� -C���B�c��(�
-!*�l at Ty�$.DU*��w񋤢�J,����ԸQ�O$MO��+��ک�VK�<S|U��Z�0W,Z7x���sn�2D�ɂ
sunL ��{	4D=k<`.Ct6cBty@t�� �������n��x�h�\@4U4� :��b��	S^
@��{�}����/h��Գs����|��B*�K�	� ���
�[0��P���[�0Z�G�?Y��ٶ��	��;U�w����%�A9�g���昻z���u��u�O�b��2��vq2Ԝ8�;A
��$��A	p%�x .�x���xm�m
 �
`� <�8��Y@� X��n
I
�-x����X�C1u
-��/`/�럝xp P�>��2W+N�g'N��0N�a6N
-�j
��I�@Mc
���@�0��3`<�8V��E��2S��3���nk#�?�p����8��"�!��\��K
�?ğX�
v�	���s������7�
�8E
$N�|#Nv
'�5��Ea	�
�}��8W#��X� ^9ND��1}]o�q]F\�?��z1xV���	���;���wXO��I��@��k��m��(��e�*8��WD�tJ7�������_t�{,��)�� ΔK��`VJ�H����
�P���F�i�U"��s�!�����*
�no
t�H{�
R~z�C�T��ᛃ�[��X[�h*�	����^	��3�ǑK�gtjǟ6�g��qd��yT�e�W��5��I��~�
�s���?����P��}���N�����Ŕ� �P6�cv��
���ּ���˹�+x��9�E�)�$�]��>��^��~�d����d��g�zP}�K0�3�n<��r�wU����U\�$�
�^e����s,}�
���Z,
-�E�H�7������af��P
���NG]��#<f\�P�86w�
��
���dF1�L�A��k�dQ�
����c6k@�I
gCl���I�,����Bڽ�~ߓ�6���3{z
-o��c��ݬ煉�ϣ�i���d��〥 �pT*�p��!-�>����1��`b�e<���/�̽�|��h�8�YI��x��јM��9�e����~����3���Ǝ��v%G_-���v�="�%c�����rz(�Ǖ5�v{_=Y�F���y�
��.sYc=;6����h���jټ{��
}�˕��/[��kH����d���d#�~
����ό�W�}�8��*��Y7��.>8��s�1:��C֚u�^�-�����N�
"�����:�6��4U-�<�wl�w�m+���9
Z�2�)j��ٯ�a� k�9i�ll�"�n��o��$���k��;�V>�x�f_#7�����
*w��/��7;�-ғ��ѡ�
�`I)� ;�UZ[�2%6������H�f�ZgAU��wk�P��&�eT�`ˮ��P�[��T4��R��d��C�.�����������n�gn�y��#}�Z��pn�ǡ��|����a���x��G��Gd}
w�5���j����/��QP4)��}��T
-�|�>�a#.�
����`=/����*����_$pEq���aސ��zm�?q���

�<xn��W�2(�
� +�˭���M
;�{@\W�s�|۹TI�Vz�����úlc׎�No��(HF�W�e�:��3��^f���.�Ao�������)�z~��,�_�?���Ӻ_���c�XX�}�ݷ�}S�����8�
��Ks�6����5��]��*}w�/XKe^��?��}�Y�
J�Tk5��çw�7��
��d-nT�}

�jv��4��c�|Lƺ�_}Q���_|��+�w����������� ����f%€p��;Z����4�uX4�Uw�[(�U�.�qg/��ӼE�T{��Y���ee������p�M��trl�=~����#l?�q�������?���
� �pr��^�Z`�r�H;%�t~,
��|�1�]Jh�f������zժ��ɶ�b� �Oe��,�b|դ�jc�Z��i�{��;l��N�&c�*��lR.�8���kv��v�/����^�36-
g\4
�$Y�6�<�D�}��� 8���a�(!
��02�}s�#+��z�WM�jPa��׆����<Z
�y���f��`5]�>!�%���
3O��G���9��'H(N�</����Zx����,r��Wٰ��e8E��S��leΆ�.`�H\���wֵ�n�a97���:7a��v7�Ĩ���
-V at 9��Q2�%�
�3"'�7��E��c�7FO��Ȟ�Rq|��
Js7cVc�͌`;��6������a4>�a4��$�I��2
lf���A��u�tu,Ղ�~M}
��涻~�䪲��<�f
-�|�n�ڭ
WN��� ���l�ܔ���;�t��|լ�C�]������N1��R�4 �N��.܀��
�?P�Vi��>�q���\M�{�,}�2:�� ��_�Y��NZEW~?H0���H2�`kr�cŚ|*��4���E���%��X��y~,�2}����kp�����=����`Y�
<T=H}����#N���K�D�ӓI���
7�8��I����Y}o�=��M����ȹb�Muj�_�h'Nq�Q�W�\32]���"��|?Q�0�t	
�*���s5i؂rk�
�4������@�[7n}������!�+N�
�!E]r�)U���FJ͐�_�m�&�c >����/����j8�������~lp�nJ��I�i��o����pf�/c\�
$�U!����Q
к�2fvg��dv�
�ܵW�qO��e��dU%����>NѨ��p[���u˶���/t��)�"vW�~�߅�	�=�&]�fZQ���U
.�W���ä&��kT��w^ڵ?��Y,q+�a7�h�5f̻*��٪���W*q6]�u�٧�΃\
�Ow�KDdl��C�����
-0 >��x/����Lq
{��DA��S�rW�G+^0CK��ә���S��[bR;kV�|M�
-��wty�4B�J���G�y���3zB{7N�|��!�A�$�ź�%�b at l�N��
��â�a��m3�U��\.?H�O��0V8�?i۵��e����(k3~�hؚo�`5Y��='�&Fw��k�Q��β;�rgr��_�
��82K��t@�AҧZX~DvXꪻ���ü�ް�3����u�Q�(�v��0�}�Z�Mkٚ��ת}
�V�<e[5�[���e��� 穵1(X˭��kjB��dzR�)vEnݫ�-� 3��1�E�#W�Ó�i�n�^�H� z�����0Ƒ�Y�
�ۦ�7�]�@�?�Upؒ�
��L�M�~e+�%7���m��\��)S���X���q=ⷣ?�������Z}�By�5Qq~+5�)���5D�O�N��/���$��+�JX��<j��)�
�n�]
�]l�b,V����ER���Fk���~�A=�V>uj1(��灪�ՎT�v��O_���?�U�q�*��*�����7��je���B|���<1�������2�i�e}��R��z}lvV���A֯F�~�_=j�:}�:uh�fj&�5&F��#����g�*�\-��Q����r�y9��j����_��m�4su�T�OG�]�`���LL������op}��t�Q���#�Z�ݮ�d�؜�N�n[���X�˵�u/��ϧ�[L�4��R�����{Y(*
-�(��
���Z �
-����n�V����Z���t>�)�|�Lżޣ�P_/n�
"�2_ܼ�e�!�����z�-��
��L��>sxsx5��{�ڏ�S
-F̾�m��<sp��C�v�
��W�{�����Tg � q������j}
\��>/�<�R��6J����u�We�*�E�����b���,]K�i�X
	2WaX�w{�)��f�V�]�+�堏j���J���j���
+
)�Cַ6�z�6�?s����L�?�Bk
t	B�F^B�]sn�y
"n�	D܋6D<�ԅ�D�[����aQ]��
���&�Ys.ѽ9�ǻYrYł�n@��">�Aq5:��{�h#��z�k㕕i'�	u1�HW��sB�;���2)B]��A��Bd�� �Z!�F�{�!r|
C�(�!r�&���T�DZ����ӛ�.�i���A�w�d���&�Zg�EZ�>��g�o>�%zH�.�2��ʆ�Z������n@�b�,2y8��� 
-�� ��J��&DY���x	��� ����sz�u��͎6P��h���h�&��,�5����>�-0�RG�w��,f�Ȗ9�ep�o]��mJ�n���'W��p�0��O�DQ��T3
���z}�@��m����
~�w�Md��i��m~go�S�j�����ig�~��^�u
'�e
�|5��=p~�1C��ǃ� 0�.��l����X��O@��1�D �2��
�>`���[�xW������#
��Q�����S��8��4���S�\��Q���l@���|��0`U��'C4�� ��'�̟���@x9@�1�շQ�w�}��EV������������
-������/�G��
-� Zs
��P�� lFz���)��7�v�
��8����PO+W� �x��A����ۻ柑U
'�c�˼
-K��
GG�Y��������
��G��;��������E�9����T����i�=/��Q�9����8�;�8�j�8�n�8i�H���wgkC����̃]d=
�(_�دb�xz���^^�GX��ջe�K�X�Ey�^o�Q,Z���:u�A��a�m��:^�����U��<Կ)�g~X����s�Ӑ��t"Gq���8S�U�����y�M�9�
���
Fa�t�
��uy�����B�=a�F�K��*� u0�
-���=�O�6���
�}᝻΃�~
��{q�� �{tPI�)����,���5��A�#(o+x[��|�Q%	}��>��-z{��j���X���I�m�W[�GW]O=O��?�W�(��|��{`ۧ6�������W��^����`q8����`VW�i��,~/�qtW��@ϙ�,�E�)ɻ$�ٙ��qÎ�CY#��n�~t}�
-u6�fl
7�b�ԩˮ��@5�I�f�h
8���Ķ\U����� ���:����ev?���?���ٱ��*K=��
���h�(+�!��[ �$m�N2��}���&���c%�r��.�e�֧���]���^�� ��*��)e����V�V��%����
i.V�ߣ���j�
}��NN���V��֓��p�vh[�[�g��c6۔��tS��/?���?���w���u�k�j�����T�Y�9� (�`�	E����9w���>�A��H9b�gu�1�9���1�������A�`bӝ��2�)u>�n�]�&a�]O�~�0q�z
������j�c��ƙ�h�
F���h>V�Q)ӗ��pe��������kT����dt`���W���ng���C����s=zf�wp���~X�	ak>al�͍��J�Wc�m�n��tfz���k���
+S?���h��Q���j�H�݀�z�Yt�6�\
@�
���"��9�mnLm2��Y�����5Û<RT��H��� [...]
-���g��
���
���bk�,����%�׌�Q?�4��z���6a�F�aql﷠���C�W3
-���R��j^6xƝ�?����m�Lxơ)
np�p
�g:hۍog�F��+S�f��r>��+���ИU���g�F�U1�b�v�	�6�3�~�f��GT�=
-*�����/�݂�3Y����˼���#
v�
 U�  3?�/�̰~�J�-
 米h;�
���a�
��+��o�%p�;��U�5�zw��in6�R|���c���T�p��a�>���5�A�S�]�3
���?����:��X�*暰"a^�O�F��`2L*�T �aw&����9D6���AM���U� 
a��b��t��G�;��(T��+�
-M�
��
>5I$L\Mے���PHW�A�.�
a{�3��U`?�?�~q
 �t��o�/sq*��1yJ��?_��=�\(^^�wh�,������k���_
����ɸj�ĭ�(t��娝L�� ���C�$�ۍ�(VU�$��^�?�
�vJ6w���WU��
w�g���/.��
n�/$	�«"�t�v�JvQ�:��2�OWe�S���y�j���K���oJ%�XPm�ȼ���:�����X+:3�G{;�E1�~�s�CZl
��&��N
�W�"�\+��68�b�F}�"�8S��p��O�w��=��A
�^u�(��?RϿ6
.=

-�:�\��g��(Si���Ғ�f���60�
-{���v����r�&��`����m�a��ʐ�ӓ�ь�DtK@��
P���$=���/�_̬��O��� ����"|�Dw=�R�N �@�6�.
��}W)
����"BB��R�
`�V� ���U���f��`Ό�p:�tn#�)
�Ta��ɥMI�eɥ݇Rl	�p��`�8(c�]��Z����
B�N�t��\w+�l��3�����Q#���J�,β�޽%��E��l	����‰���^d�Re^��d��tH��2�Ab���)� �Q�@l�l��&������ܛ��P'���>�E���ݑ+:�o<�eɍE7C�

-Ee��3�#�.�p�Υ�ۉ���
��y;ֹ�0��$3$�w�J}K�&
���A�G�*��	�0�
�
.o�!��x�^ic��aP��aP��`�0��P�<��������
��r�n��/�s����=��Q��n)��g ��ӊw ����a��Pa�[��0

��2KS
M��Ҝ���r�^��GA^bZ;cP4����W�4���iį����\7?���4:H���_��-��uF	��X5��bg���F�x����e#��e�y7k��9��iy�09�R�
~�I�@!7H�$���M����eaι�w�;C�
u at HK{��۶3
�
|ϙ	E���.^
��Y
Ε���i�_|�ub���ʸ\фa��`�i�F���>�ns�6S=r��tʀ�ʔZ>�+�"
-7R[�� �D�8�q+���
z1����CD���@�q�E2�b���WH��cP��V�ln������f�V;��� �l�;�����M�ZA
�uMr����۷��C
��4�p��ľ޾���lF��ᗬ���cq���P�Σ�X����H�H��
-�|֡yrs�k�t�\e��}��>�����
��.�a�e/�M��r˶�h�V�H˦#���0{�e�}���жYS�F��
y�* �I�]�ϖ��|�'? �C�
x�w/pAZ���a.A�ju7
��L���;��iB�m>~�J��<@�M�1*4�di���� C~� =�� 
-R?}��>9��m��L.jt�\{.��ek�D�{��Y6�Ĥ!��xN!y�p;�ݟ���bնK�k�B�[S�-d?i6�%�c����	�5�v��vVgߙSmΈ����u�+Q��J�9�*�T���Z���
-�b,�ś�䃃�?��$�a��W�'�
�Uw
E6X�ܨ}�
��v�:_ޏ��mnQ[�̩&�޳VJ���z\hTU
-C����Wv��H}M�/O��l��w���?`�V��_�%��+�`����c�D~1jCM{���n�����K-o�)z�^��

[�
)��}�\г&��F5�3����ҲK�Q-<*�֮���[�g2� GU
�l2•-d���ۗ(�^�[
t�Up�,(<΃
8{�8��88[��?�q��̴�jF3�!�ŠF��a�n�B8�B��@�9m�&e�Q�2.�ʶ(;�wsk�[h��~0ʩ��4W�>�ٝۺd{��������9.+p����T�p�IK�1�/ nM: \�T ��[ ��',œ��S�
�~����RCe
��"�3]��,�ޝ��^�����
-jX���Q����̬���TL`�o
 ���)�@��@��
@�  �J@�c@��K� W���)�+ ��)
�<�F�F�
��?zZ8ID��H������\߀
{5}4"dt�6
�E	�i~&�#�U��3�:�]PV �� t�h�� �V;X���*R0z�0��l lc�l�zX
")N&�ݽ���D �	�)�/~@�� E2{
��]p��D��p�� ���k�j&�"%5���pf15��*}�.80��#�bKy���� ��B
�8�pcY����N�
(g�YDo�����9��Ec�� ����J0R
�/���t4��sh�(_�
� ���T�z�
�onA�Q��'[H�G�Ŗ �]w >˥�ݛ'������ �S �͏j����R(Z����9dp7���dd����P����v�H^5v��r]+yz�^�,u9I(QM1w����S̮I´������~�����R؍�����$b.H [...]
-�k����m�N�7%
nU_���km������U})i��b��D!5S�R<��La��1�����O;�y9�ۭ��H�
��Q�޹}o/Z�Y,���;:ܔx}�U��}�_���H��K;zk����Ъ?;Ŋ��'�J���w�2�ׅ�Ӿ�H�3��
R��L:���(I|�W�d?'�
��ċf���E�Vu+�{Փ�|9�u�b�u���w�����������ѯ�n�w?
�� �G�U��Gk'���vM��[�:�
hi~�G�%4�3�kPH�6#�&�R�k��<�F�<��&!���
-�XBE��c��SʖOq����f�=��;�oo��`Y��+@ڞ���N�ۃ�j��?�7����^�
����ZQP_<�7m1�^��A�>lRk熒Z[a��(����t
\Nj�t|/��ຟ��q�tk��4T�ӑj6��-��-G��Vc6��~v�oZ�kgm)wtu��������K�f��x�M�}���W�{1U��ꕷ0=�k����?x��x�!�A}� [...]
;
{v9=e�ôÇ׉�\=�{e�
�mR
?���
��1@��!�����Y�����J1X򴂀�{Y ]�S
��mდ^�~��dj�g��1��[�
á��+ɬ�9����C��\慙׊�Y�L�Ų|i�p�~�KwLi���
����ۑ��N���� x�w��ՙf�=�$�m	
7�V�ޠ�p�3xT���d���bVPsQ��۩kQ{
��3#K��0D�}E�m�$@+_9��Y����E�
m���{\��v�3�+5�Ϯ�p��������ͻﶻ�p`���8����q���~��O�@�y�h
�&ǘNO���Ұ??U����J�E�*�@�]~��EnI��U3�~S���sdu�9���R�o��a��'����~�f`���u�5�.�
�]��n�RѲޛ�g1��Č���̯[۾TK���^{jkT���m�׸�T�]
����Ds�]6 at A��LW������d�?M�[e3�0b!�*��H��1�w@&����qX���5o}йKv#����>lM�6m���A\�D�_��Pc��훢�kZ�L7o�V�6FW
6׀�]�������'#I!��D�Vko������-9�-S���|q3k3����*h�
�N
�S�I�A&ξF����Xf5h���|?^+�E��FE�J3F�z7�z-��떹S��`a��C���*�^���%�)����~�.�.L^`�-
YN�E�+e�!V�x]�����������%�^bQ�]����.~�����
γ� ��C;�@kS8��~%�3���V�.����#�C�H��o�
-u��rXk�d��8�p&qUeb�g��m��v�����J��M�,���2w�2
�l���/��*�߸͈�+3�ƋQk
~q��zO�Y�n��f�y��~<��k��y ���h}�)�l�R��+*�3B�%'��3Y�f���s{�?,�!��v��a���J�+=Q�z=��G�q�
L��7>�P�⣎��)�,�׍gf�3�L����U����<
��w;�h��T��Xz���Yy;��
�ZA��ZM*yrG�Z8,�7��(��m�R@ξ
-�N�EG����1C
�y:xX]�^4:+W�)�
���M��+���
-8��aҤ��B�)µF��܁�Kc1{ڥ��n�t |�l�#%�vr���K�,�k�LQh�_u�dm�2�
\�ЬǼ&��=�,�<z��s:����x��o�
�$���������R��Ur�5*���{

�T��!
���l����R*�
�
9�:.?R��ԕgY-�������"��+�c�59���;6Y�	 ƿ���

�[���Cp0$� ٓe:H]�Y�I����%)��e�MԤ��A���/~�-�������s�@�U	j{v�,;#g̊_9ix9��3�k�


-
-F�%u��u#���A̰x[/2cU��SC��l�Ʃ��Ta��i��͹Ml������7��;Ya�h�����8���O�b�kȤ�A�����"͚�
=�tn�h�;�2U;�
�~�S�|���������\��
�W+�%f.
�����i� j��B[�J d�GS�vE�P��xK��u<��[��@�_F
H"���K#����@���<ڽ_�Xe��^Wc: �gl؟�;�A�,�H�zN�u�E�4��S[ck�d��0gt>;:Pbo{O{lu���b���v�o�f	��V���7H at odž��
�EFw�
�
�D�[

-CˁBϹ��;V�3�N�L���
i���w1�
�_
���%�a$���g�9
nW�z����}:�b��2G�\��	Y=��կ��u_��
����U1�tP��1$��Y���ڇ',4��s}��`K`�tp�n�([��̜�� WHQ(vK6����H��I�Dѣ^{N�ޫ�څi�aXXT���&6����b`���#�o��7��n����
v�;�]�,2F�2��̼}�M�4��/RWz%fg�@�Nmf�{1�k7�J�u�Z�։�<�uB��֩�/���=w��ŧ0N@v�q�� ����������@��
c��KZX�\��F��rB��6
ְ f����t&Cs"�����]1d�[��^����
��n�o٭Rм)��V�@�a��ƨ�R�N��S�1��
-��f���$�-������#�.�
�8צF#ۼ���1�n5פ�_�0ԏ
8���nu<�uz����������f�wk],��r��B
���8��&V���O9�G�
w���G���2x��j�Y��r-?{�k�� ���A�#��x��JC˧$'�E��>�'�����v���ĝ^ą-~m��z�6�:{~*�NgQn�5�hPu�k #�O��m�m߯u���T.�vڮ�;Q���T��
��i�Ro(ϲaƍr�;�ʭ�rWn���X:l�t�a��NU�HOk]hӆCH���H���\��I��� {��[����X��΁�lcN�40Q/��A��|�?`���7�K������U�z�R1n�;E4��BB����c�1��`P4��I��t�����惨[�^�_�\RV��
-f�RbR X2�s���
�C�
��{h]�Gmh&��H�j���J����?���{��Y o�3�=N�_��:�B��

��[J[8'W�����C7�5���ޚe3F�Gd��d�:u���[9[�*�dGuժa��?'&)o�F�'�\����,�U�;\nU�m�yO9�������kQʇ�
���
Oʹ���=� ��S$
 ��s� @"�H�� Hb�?�si�CEo �U��@�| �X��F���.��w?�9eE�p5^mz=8��i��\_�����T���8��F�
i5�����j�x VT%Ť��8H�;�	 O�M����\@�s
@2
 ՜�b�����zK� �q?H���"C�p�/���'�Z�Y
-f�1�F�}�`ySH�Hr;�E�8/_��_x�pq
��D{ Ҋ 1b
@�y@�
�`8��c	�
r P}� hT)h<���I)���`�} 0- _gR܇ &Dg �G- 3u%���B�Nt:S�-x�.�8�*��l���7I�
sͰ��
�TA/c�'�ED@�a���m
`�W `Te
-`2�I�
���x~8>-x�	��(D����:D�Q�֌��] B�VR��O
��N��N!G�B-�7)�D�]����ͫ�iۧ�}��K
�t�
-���_��z�o��W��̕��n�5"�;@0��n
W��u�H��m��wgݿ���ߧ��[���=��ɇr�XU:I����>�"XIBף�s�0�L
-���%	

�%��)� V�&����/.݄XwV��Qչ�K�����ls`jh����	QIB^����S��85SK�L�S¡�b	���o�-�����ajY5L�<�L���'uR���Q}W����V,^	:.

��e_I��#����?H����6�
�(�3��ɳ��=JN:)"����&.����_
|�L��yL���U�۝�xѼ�c�

�]�oJ\��R�z��U��ˑb.�v�{����r��*{�*;������o��#q���8�͵��?2�:g�N��Y�#Ib�hja�����n

Y��ŋ���;t�V
��kcĵ/����/�H���͝b��N^1Џ�ZGb7���v�����>�/�5����~��BQ�4�-um�_�9K�A�Z��̩�SQ(y�D<yz:����I"+���كX<4�k�;��
�[�b�x:&�.�om�:Ї}n�]���^V�k|����Agӈ���,���E^�+h{�-�fa���zA�ep>���<;�2�O���O-�v�O^� M�U>�˳���C&5y.<rz[��Z�L��C��^˽}d��:j���\
צ[Y�
�-�@����}��+�٧�����?��Jk�m4Z�B6*+�^���iX;��i�=kL,���

-�a7̦P���ɻ����փ����h8^iQ�^D�Œ���8��4 ���/�+���K����J�9X��3A)��rW]F
ڇ��L�95�NnrnL*���n.�&$���(��+�F��y�|fZC��6�% ����!
�{�s�&C�g�^=f�bv?�#��`�n�s��X�{ ?�@3Z��z��@괵��Ğ�?`��g��r�1��B�
c+�
2?+x����Eu_��Z�[�
�UW���SG������e��
Gm�
��������	�3����:�j���re=�U���qX�W�v����pg�
��<�0�U�
��
-=⽖8��]��T�S������m��|p�w��t��dg �2��V�aY����$Zcԙ�S��0s7�ڟ�f�/�R�_H���/
BI�.7N�%�V	
y6Hf�x����lڙ��p�
�G?��>��-]�4�h�Ɣ�֜#�[I�
DUd{��
���;�|+C�&=v�y����3VU�nTz7���v����z�vʧ�ek*hgc��vk
~k��x�yj�h�ւ��|�d��$ޒ��P���F���
�0�/�f�
���w�oX4A&'O��?�N�~���b.4�ڹX=}���CR��m�k��� v]P�|RQ)P��;�(D��o
�I���n�(
J���W�So�jI�"�j2����H�oO_��dG��7w���73�����ͽ`��\��k?;�q��H�G��
� �񤬪X�i*Ɍ���,R+��Ifj�|]�[	'.&�(��C��sN,�W�2b
�/.hx���ԋb�\�w����1Z�N{���^4Mk2nz?�Yh4#c`�^�@ƺya͹���
5
�2�jH�ɤ�y��4�X�T�Ɩ���'bY�mu�?���)�{�'�f ����q'������q����
jWd�gF��c?��b�6�ˏV�L�i�i����5k�w^ㅆT�'o�

-�= �Խ��HwK�p]5�����ǃ42���i���0�N��떮W���A��`�L��鞙�+
0�����3�1���X`ia�!�p�n�t�	^&8Z��ӽ@Ã�zp���|��Z
n�=���W
�
�]� ��$a�>DyCg�m�+�>Wፋ���H
⬽M��V(��kl1��F|
>����hj�v�V�����3����+�1x~�|��JYn1gd(L�Cm
)����9ρ׳�V�&B��zr:(
-�ؽt���`(��X�l���.|??�sg8(�Y�O�,Z�v�����*
-t��
:���W�l(06^�|�Hߨd�ؐ�2�$ER|���&����&�\1ph�t�_�j�3����ɔT(���S
�I�VUDeD8B�!��Δ%g��=W�W��Oft�? ���%:��t=��*OA)���X�W+BY�
��2�Ừ,��^Z�z��A�����P3�܂&$
�G�)��^�T���ڰ��
ץ���
�y�z48�{��}�΀WZ3ijq�'t��!��"N�S��Z%���!K�I��X�wfc�7�J�'c��-��	Q���
-�^��
k�.���_��FF�۫����p�$���[��|1Z��\aPk�u��*�zc>=�?��
Ј�1�K*��{�����"���2���S&j,��{�
��J�0Gu���E���;�"�]�4�����I�x�����C�����e�}%B�{@���]��]��
-c�t���Ki�5�jM(;5iz���U��
�ԜY>�BkG'�v9>p��;
�|J�E��u#(��8d(L��3��XO0���i��N<s<��2v��e/���t�b�f���in!��f��-��N�f���E����dK+q˃}�'
�jK�\^�
Y�7*��~(���K�
�Xw���
�Q$��Q�TC�Y��"���O�(��b~�v����
�ڸ[�˧n��������/fM|@�i ���5HP�j-4�W$V'Xv-

u�yg<�2�����W���1�j��-�(�=#��jnBI
~W��{V�6g�����|{'��fS�(Vo��ގ��q�v�C��
��ӡ��n�F�~�~�p 	�XĻ`��N���l^��[w�g���Dyt�]d�q`(z�a��ix"WT����V ��l�뾻n�r���չ�b��7��4�Z��Ul�:�6/�hՄ�դ�֭F
��F���lm�����$�Ѯd��2~C6�4����k�~+Iϗ�4�qx����)ְ<�`&	��
�xg�w���>�:�+��S*l��n�ϩe��G+57�
h�j��Hc؟���5g��sY
���M}�Yc������Y������L�
�ΈP�7bn�Fo�l�9�J�s�gBN��[l �ى�*�i�L
i�B6�a�h#�3
��փ!���8r�gSߪ����V����e���7+�
<�(��^�>�zy���v�ږ��p���|���$C���K��b��[�{S
����/�	���=��)�aYZ�{�m�+�Ab�v��0Ѫd:T��YK���ݯ�! [...]
��
�*fB�-�ݎ�o���
ҵbw��M�UDV'��P�0�5���{���� ��|@��<�����R C��@\� ��F�9y:�Č��ɹb�1�␞�C�K��Gn�H�>���V�*e\�*�F[�!vV
����w�%��(�g]���#]Sk�a���q��~��g�{(��b9ó��"�*7������-�^�'Kp��{�ԓ�4�r�:-�t��蔞o�S� @'�@'랁v|x��ɧQN�[63Y�_�rF�d�C����;��ɪ3�IlE-���u� gj�U�8�e
�J�b�]�����"�d?`����:�t:�Zv����
��x
�E���$Ŷ��V�ª5uA:*!k
�ývh��/5 #��
�ɏM�iDA�*?i��.}�
-T��A��1�F�@ �;F(<Q �E �1: ���p�� ���
�l;�ڼ
�:Χ�{ �� l�e �G��1 ���/�M��2�E�>�YE��P~t^5���/`Oy�4A;7_H{�MR.�j�̇7Nͭ�D�tZ<�6�����H����B�v�
H�d��H"�˔ �K?:ô�	�
�@�z
@O�
-���
@WW @�G@�b�
��ꐂv�9Fo2���
- �e�����v�$)���0��+W�9#�Ɨ�ѓ�:m�f� :ytү~[�� �2v f� �j��5�T<�	
p?k �"���} ����w��"^� �!� ��_��u�1�Io�ة�ղ�i�����%��t��ˠ5̶�p���_���m����#�����v_�ԻU �s 1�k q���C��SӖ���0 �j�ɶE���b�g��Y�$�b,I�#�W[����F����+�%	����N����A����z����-��ߧ�_�HH��?��/"�Z��V��cR�ϿZ�?�b�����?9��t��ٳS3O���Q�sr����|��F`�)���F��'#���m�%N��QB̓�cRJ�z��ܣz�p�Pz����+*
8o�<\�#
��${mL�ˑ���^�Ϗ�3���A�MI���Km wHj!�I�
�%
�*8�y�1��ۼGU
��{,�'��K�!ߔ��_w�a^�d�^��x|1���|aO�3� .'��d���������98�Wgx�T�������T���t�}��ڨ����T�#���c���{Tg��������������z]:CѮ~�
-��1�w�x$�;�0i
�C�<
-{�k�����mz�w�>��y�^��+'��q_���צ�%z��_$�jO;5�L�y��$�I�;�f�ۭwnͧs�q������L�=������r�C�lv
�t�*��i��
n�#7H���(�rʣ�2ւ�=�ͅ��"�s�����
�-��1�@
�J�}+TK�fX][������RCä���{-5��J��r����1��!ۣ��x�ȍ�~s?�=��e��{��Y
����:�g�u4��*Z��}T�^.��~��N�e��M�<1�d'��}6��mo
o^�1�����|?�
>�s��m�H^��$/��܅�Z��
���~`�'/x��-z�V�����K�k瓅ќ�
G�H#Cu"s�}�R�Mc`L���	��t�p4����z��sG
��>��[�j��9Gڷ��;x��u�`�q늟
�&��]<wQJ�hw/"b����B��̨��*���?��f��1���԰�����b��1�ڨ?N\��H�0b7su8����b;�V�W�U��������ϭd�oo
�yPIw�f7����Jҭ�"��i���
��ngcWsu3N+����c	
��y!�	���5�XL���G���x�/j���u�,zU���
������ޚv��E�c9�l�Z���C���{
�L��z��
Z��؍1���(�䵧�G��7�_�W!���M�~���x�w6g�_��
�M~3��$PcL<"c��
�[�&3����AG^����m�?�1p�Z {o��1��g��/
��L6���o���7��֗�n�KW��p�Z�
"Z���ԁn�{2�)Cp���-G
�q��|�pV��I�6���^���#��fXS'�d8H�4�ƣ�̜n�}�(���]x���Y��ZHCo�xW;C2�u=�Uϡ�"㓣������1;9h.^2uƚi,2
C�r�
�Wqޯ\>8�b;s��<���E��ŭ��^�w
 Rn7����=2Q�q9���zK6�I�4VF���42��=6����I�iP�x��kg�G��t�r0
:2�n1)��X)ߩ������2[
-��|�Ҡ��*
��1�
/<}�
1���~��
��_��b-����	N]�~���y��:��cZ
���*��^CVd�ڶKa�$�|���A�߇�1�ăٌ����.Մ����E��i���"�8,΄�S���XGx�X��$�����F
/
`��Ci��˜w���z�
2��>�
-���F�
Č���‹�M�D��xd�5��)Z�'��.�2N�5�.�>���^dܩ������k��p/�0�&�3���']��d��i@�|K�ό�i��K�?��A��
�5d�\��)�w�_Q���ý3��9��g(gV��D��TR�S�X,{=C�
-ѐ�˻�S��㒳�
{5�3
_�;sw�K�E��P�4U�	�$
-�6 ��
�)P�Y̬Zd1{u�嬷N�l�bn���{�]��Y:.3m�W&n�F��p���`O@{�W,��n|���	���4>��nA��
�b~g�"$2é��_���)�w�3��IM/W�������E�����"*,4÷��
׎J
�[Z���e
-r�����b5��Q+�+�����L������h�5G
Y6�������)�Y�κ�L`F��N�ԓCS��O��gH��$�p�@�9�Ng�
��%��zvq��d���1�>���[���i���\����u��|a�����K�a;!DB�1_�A������e�^�:h�U�:�
-�|jrPYh3#�с��t�.��}r

S�,e��ڝ�b ;|{.\q݆_�!f�X���K�N���ԑ�:	w�8"��+�	���3�Լ��@:��X���ݴ?��%��{�y������8��;Ci�C,�7-�>jT�]��<�ɒ��%��Dգ
\
->�[v��̬���$���Hl��?���!'
��ēB�e��&�����H���0�&�t�o ��l�ʴ'd�T
�O8�"m�m���f
j�F���HT�
���?5U��
�>�n�L�{\@c��Y�L
4�˭�NȆ(�+䞟
LZ��g���I�R�&G�s)v�[����1�-�d��,rBg񮤑x��n�-�
Q�vn9<�?Y�|md,�2�����V�
ʾ`
P�y
�)g��t�U��Z�L�]Sxd��{������k
S at evM5�
-��wWhJ�µudD�ۛ��nk$�j�S�������>:��ڽ���}}�E7�
i_j���K�C3VάrÇ����
i�;O����jy^�𫶨Ôq��
�` v���(�����
v�}pݑ/�c��I[��������[ƻ�4���j��ڢ�=,���� 7�
6n�m�����c��d\
u�u�]��+6w���5���u�6��C���z�5U�pk�� J$)9EP
��0aN���o��^�]��nm�SJ����5jT��f����#�dz�`j�_��,���O0���FP��
��F���n0g��aϜY�Έm�ob����5O
�Z��G����wrL�r�T:�(;��� �y�LyB߫��N)P������K���Vd3~zj����i*j�*�h:��hqG���N0~�I)��۳Y�{�]�
���K����Ք%��
?o�L�,1Ku5����m���y�f\�g3&�g3�3�f(k�-��G�I���̷g�{��W}�\�T*-�X�����$��^Z�&���S�`���Rx
'㒈"f��@���<��;���1�~6���̖Bv���zd(o��
��8��V��0!
�k�A�W��„1�		���Y?r
�3�>�V�"��U�pw�[����-A�NGѫ�#8�[gE��~�$Ѭ3cӸw}`8��(��"�-��2z��=�G0Tٹ
�ً�H�����
�s%x,�����`(�fa�%5`c���,�`xt�,�};מ=w��qi����L�h�>V ���:h��^O�J����
u�S�ך�n�K�W�4�Z�ax�e`S�2p����S�G��,h��Rn駱Tz-��
�E�g [...]
%\��)�p�*_1���͸,�Jc�ƸZ���:�Y �&��< �b��U��
-�s�6�\v
��5�Sޛ�S�3�1�!�qN���
w��_Q�$"&LO��{
�i};�=��ң�t	�䘸xi*ȸ��{e*tjO
2��>�[�F����� �ro�����Z� )�;i�L��8
��ǟrtK�?���_g_1�x��<�?�rs��y��]��Ҏ�zB���6A��v/
-���t�~��IX <�"��b,M ү2U����-�= ֟3 ��#g�4]��)���x
�@<�Y �u����[�щ�7
ʵ�T�*TY�QO���q(���"0��:�a&N9��fӖv�ۡ	�L�GO�R�
�D� �A���&��nH���3��G����ܔ�@���Ў����>�ߺ%�H��j@J>PD)���bDV�O9�}.�����{h�G��iG&�A��ar�'�p�T��~��_r)�~��?>`��Up�0�D�ݦB����
-�P� �iI�sM���ʧ
�ZSh�N��_
��]c�H�u�v�w|]J�<+�"���������.��Jt<��p�;m���Vr�S�m�?�6q�&��4���6�n���[Oޗ�@'�Ы�W�9���ۄ�;AN�c��a�:��a��U]K�g�o��G�K�����6�������x�F�?%�7(�cX���/
O�mt*>�U����jd��B�߭���ƚ(��si�x>���&�������n�By�ᐅ��y�����v��B�����X�����{H��;�W�
n��]�]��K]jܾ��A��L_�I<lҤ|'$v���
��DQ�S1�ğ
-q	3F����6�� �?c���S涠��
o���s9)��|�_j�T�
�R�37I�Ng�j��9����7ۜFO����}�rs)� �c�����BO�w�h�ܺP��a��|�Pܤ��ƍ#�1
-��3{�
c�Y�[���o��\ל������̍��I
��QY"�(Ȣ��S�`#����0{���k�.o��+��û�nbhu�������R9�x��c�����j�x�jQ|黍i���2q��%�R���3���ͬ� /U�>��-�lwK����
&kn>�뱕��W˛��/�����m�io�s�v�g���ΐ
xHhS�+�]�:�л�u�dNȸɦ2c�x��έ-��G�}>]���ǭ�[+�z����I
=N�O�{�#�2��t]s�4��9@\�%����0
�Mi�
�nh��麰oO�ٱ?�c��8r.�1�{mF>������<�J<�
��>#`
-�b4�fb�K��_��[Yq�x�!�}Lr.~ه���>׎�	�����
�Q~8\�2�p��}�3��^B|D�'�"�
G$��[�
��{<$���1�]
��
��Gf��W�ڋ��d�tv��a��yf����
n_:�ݑ
�?<S���4}��k��:�UW�
oZh.�4h���>�m�o��n"�`�!��DB��Y)����U2�Wv7=I�/I��E��f�e�U��}��z�N�3m=Rʾ՟^�7�P�|�Q�Dg���ɶ1W��F�����
�D�IE��v�	�/x���6�rs8�������l��ˁ)���`���P0�V��u��LG������j�ݖY�5�(��}�TsT0�fjVQ�iihy��Xk�R��7�ty^wJ�Np*Z�M�b5���*�+��?�?h��h>�h�ǖo�{�e{�f"��p�r� ����]a��v�6:��r���=�~+H���c^(
-;�ɧ�����u�u7�!�]����р�F�U��)�螷%ϕ���������w�E�r%�':��ۙ�
+{��
#c���T�6ml��۞~��u;
�� ;<����1�
7Z�-7
E�ࡂ�62����fmT�_��j�Q[���
|
�/�ݝ�
u��*����>WcK/��b���]���F?�ki9iХ,�z��
���s���9L��
����%�:z>��~,V�I�^�[~�۷Z���7��
W'e�z\�M�r��[�����pw+)��.��Ͼ
��.��B%�T9ֳŭ0���`
�z<�<t:�ؓ���7���{W(w
�9�/�dO fQ(����k�'��iG�/ڭBƴ�
O<�ҕ�%�h��<�Jj�*�-�������5�
�
�
wU�3��:lzg���O��x!���P�(k��d]1�4�3�`m�C�
���h����ir�'	6�@�6�95�W�[�I�}��
����xKJ.֢�Sp��
�@Y���OS(�A%W�Q-�H{� [...]
-�}�\PY�n<Oy�ȉ�� Pk�/��|�D�p����<�/n-V/��r�����z��~��eOW�J��3��,ǷCv*z�����I��?����y��
�U��#�򕅭cڃMeg
-��ϑ���V
����tZ�S#W�
~ma���^I5v���_�*rJi�%Ն��T�jʱW+�qQ��!�j���(�_p�(���D��S�]��ݳ1�ڟ�|᭙^�&�2��D),jJo1e
�'��T2��rb�D�9}�4,=s�
�*�u�j�z_�ߘ������r�
/��Қ<��d���8�ܒ��C�NR�	R�>���
�1���T?�<��e�:�B��|t%hrlC�鲱[�\�If�l��l��0j
��W
�C(��!�g��UǑ�Q&d��a���Ԕ��J�3�O��0��&�����
� ���U�
�$��{\���<��c�S+��0S�UO̿O��V��.@��Yv����*
��
-Gn0��m�_�������hp׳s�Qk)�z�K�������-t�:�Yrׅ\Y!���}iЏg���݊���*
��'X^������������vȹ����~Q���|7�}��S f�E(��Q����Ҭ��m]��f��^1:�BP��
ޜ>Uo
=�v��e2��VYip+Ȓ�k⧸(�c������1�����7=�

<��n�
-
��Z�q\�u}��u~Wfw-���*F�&�
�	�u�^�O{r\޼-�8��n8���Z3�/mW7&�L�$��ȷp}�rY�%�kôXP�ӂP�󺀦
-����|��n��p뗸�ȼ
�����2E�d���c�vʣ/b'
+i�^�h��,�����������

e�G:��j�+�G�+ln\��e�ȷ͇�%Of���
ICuq��t�9�I����9a8��}l�g�,s)4���cZ�n���;e�N��.C���JiʼF�^ZHG�
�%�
��9t>�ZG
�5^���
e��>��0�����U��ȅ��]�U�?>��'/(]BE�s�{��l��dZ�7���b��J
�MwTZ�-M�ᥫԀ����/
�5X)X�
��v!,<�xc9Y�:��XԿg��>���f;[z�c����m�Aň�_K�;C���|�T�p�,6��
����ZS2e��D2�Z�����r��^�J�^�i
G0	�!�	���u�WKم�ld�7�g�3˸P=�E��^�r,N��6�� �
��
Ƹ�԰&�zX��m,b�V���
_����Fk��
-T��p-W����R� �YF�ro�4�x�)�	3i�Uz]	�ž2��q͐����}�@��(��LE�h^�X�f+襙o�
>���l�{��B�ʝB�Wӂ_#���	
ʰ�I
~��6�N����{�'.#�O�T�
���^{�W��[I���	��5�ʩv)�Ss��-%���P[�v��	�wD��D�!

�
�Q`�
��A�u8u0��%=�f�4|Iߠy����g:�Z5�f*{%V)��ɔCf�Ԫ��!���3L��V�d��V�U
���V����J�%� �ׅu�4�`���Y���@]�z����K��
=��j�Rn��J����zw� F9+�)v�U05�19F�P��~��`o C��Y�L:���� }?	ڳh!y��jO�JV�;�����9��&K�ws�R�5�K7kQ�e$f��#�ޯ�4�⫟ti�z���~v��Q�a��x��
�"`W�B�w�k���p��o���
�>`g�#`�o
-��L
��`
#�6��$�rC
gg1�f��ԝ~��S>j����J[|���K����B�F�2�xO(x��ph-wa��No���t
=áb
x��
�P��� o����[�-f@�1
��U���ĸ< �[
-��}��c��+���+*_+L"*f��
��AF��k��.���L�#
4��
�	�S����A���@(���
������ ���)' �g�\M"O�b�@6ŞD�;�Vz��
�4�""��	z�O>��4��3���Э�y>GO��og�δ���c^K���_-�Ր�8����n�\������K@�5 a
H> i�^9C=�̯ �+���d���� �:*�ۚ �ׁ���)1�GT6T�E.
-��~��1��L��l�
2�塩-WN;�o�4E"@�WE���Xn�
�R�+���v(�j
�)�j�s�AA@]]���u�ԋ2�5uZ����x@#�
Ш:
4ETcl��GlSq]TG��U|	l;��U4˴��
�G�4��.�V��?�j�趉�|9��������+ڬ�:�^mJ@�*.�AXr��r�L99��s��Ov�v۪��U���V��A����M{>��g]MvK�'�z5��ݲ�m�h�����x�j���m�l�
�g���Sѩ��
��nv�!sY�ȴ��v!�sb�M�У��&�r�?�j��&H<�
1Y��8��E8|���w��<�#/������c��J��=$3����;��7�T���v}uun��S���
��sr�/������Ǽ�OJl��
���:����ʴ���9	�����u�/��\?ƨy�[[�~�#%�-�ȁ�NV�z�3�H��37�Փ���'q��=��DO�ۈ�ݨ�D
��{�Gz�c�O|����5U0�ߩ+��.~����
��#}&"h�Gh~s��#nN��
�|%�~�B�������
�.� S�
�T�x���u���sg�5�%F��C���b�X�+0��Yi٣ec�lV��~�u�Ɠ����
�S�8C��.,T������@���ip�w���������t��Y�����u��Z1JzB8�s�S_ޜ[k��n�E�܂�X؍�Pw7�Y�h=C��!,���tm��)���	�Q�q�j�����~�#�2_o]��(xt*y����s������\ja{G��a�EV۵T^��yX�*���Y������Y(cth�|<q��<���	����f�j�ε�;�kc��~�즂@b�`��hb^�Ex �����Y����®K��.���]��'��[ibw�4�K�z:Lc�u�c{�MS�E@��Y(*~���dgыq3C�G>E\�=�x����>�
�w&�
��#a��-���×R�
��\����k
:�;~�_L���s��ʳ��ElKM�j�g�
�A7���H_��Yh�����=��}~�H���
=~����GG�Y~x�7JA 4��Y��Ii�+Íy��Z��n�?v�t��7�w�|�CmI���^x [j	��I�7�h��B8la�@�jT_@\)�+2T�m�A��G5�s���#*C�潺�?��Y;�W���z)�Z��м�}�v�n5�
��vۗ��j��<hi�t�7���B{�,N���pk�����đz6Ǒ�-p�e
-���ZsO<�w�`�u��	;]F-V
�]�2ȇ݊�
��
3��b����Q���Tu4|-o~���98g�*M������u
�v[��C�~mۏ�/���Uψ�)<oݸ�>;��p�O}��'�$*zq!�G'�*m�i��!��Y�a#^K/�A�Y�7���k�Q91 ��<
�kt�G_E��M�VNp����I��zw2��n�W��Rw����j����ҭJ�G{��43*hfV����.��FA�,��
\� (]t�E�H�kתO��bj׳yd���b6�úɏf���
%]��|n\'~J���{�
��o٣��߻Rc�+5�`>�<ҎZ}�\�	��$��3J.ڨ��Z*�M���L�XMw�־ԙZ
l�6����lI����U��)m��%�~^t
��w�f�L�ͰN~x4���R��]�͈1}���oYyP
��.�~:휲�x�ʑk��b��<�[{�%I�K��M7+O����n5zs�<�VS���+���zj`<64���.�����G�w:�ߙln�.
9��7sq���n��myZ�m�t�z7�a�a��4�C���>y}��}v��ͥS��
��aw�<�n���N�"5<|,vzFM!zR����ƣK���2���¨䍌Uϧ6���vV��%?�|A�ck����̉�VWS�eYSwh1Twl
Qkg#�����/��z�E��S�����q�=��Y��=����Z��99瞵�A�nq�s*\���x�b*���X��tnz�9�_�u��HGV�{�8:n�������Su'ͷj
��*=�aJ�L)
-w)9�y
-�1��/��_��ߨ�B3��
���]\��>�����h�V�Ack�j����U��(�>�g�GӇ�Ǎ'{P\��1H��4���%��\� ��v1���fQ�ocW��[[i���³�J>�Vq5.K��� �TER�I �r�C|�Ü�2ĺ�����:#�_���m
%wZ��
��e�
�m�^
g�Ւ̗�ܶ_p��H����փ��;��6�Ҝ^8���e��2���eYj�<鞏�R"撺�N�٥��IaE0:�I�����L�����ո`"��&ʳ:=�{`h>{��Ὁ� �X5��sT����3�:fi[YR���޹���hU(�W�/樴��C���)�C7p��lQR���3
I���LѢ8��jb�nvD�<��d�
8U{�
D�W�1��r���ȭ *�XT��e�����X&t&W��Ӿ��=�\�qo��C���mZ�햊�tB���W�y�
_�������q�HZ��w&���U�ST�&�����
p�yFm�Ms�c�ۖ�<���e��`�%�ֲ�K�:;�Иp, [...]
-�$�x\cw�3��
aT^쎘"lmw X����>&bY��ޕ"}6ZU�'�]Z�33���)����ؗ��$�d>-���O���@}�ɀ��	��M�~�D���֬D�1���N&�}�jN���+��*�(�\t�!�����9MW+�Y{G���h�%Zl���4՛n%J-�
�
-2ת�H l&���
�B�L�����jQɢ�3͢�i&�Z��-N�v��픲�ub�Iw;^��������9�����a�㷍Bj��t�7'������3��c�S�\mA�&�
���G
�Ob�=!��
���lv���l����52�E)�d���\�7N)3ۿr%�1�F�XX���F(�T&_��q
-����� 
�܁Z�(�ip��������|�l�?>��rJK�B\�L��/
��,����6��;�ۆ��k��Ʃ������0���1.�v����EEN^ ���t;yQ�	?�� 

���s
Q�G�j��)���x�6����p���Pn����Ӏ�|�r0
�B+��y#��q=�ɬ��^�)*����
r��.H�N�n���3p��)p�m8'v����
����%]���
��VBa�!��*���y)
����t̆X��<����Q�T�Ⱥ�f��ro4�8[
�]��gv��#�x�_0��!�B�E�,��i8�;B�����/�h&��4
B*��v�U@)� �i(�
���&��]�8��J�f�n�W����
�䩟�����>��	��hs�sҔ�ұ��:]�
,sY��e�{S�<Ig
#h����
�-��О�qL:��Wp�AO�*�ey1�S@��g@�l��� t���eǯ�m�l��l'���P���:W�\�
槔��vUl�ͨ�bn�o3����'J��!����
�����=`�� �x
�+���R1�L��찐��T �ƺ1�+���3Ƒ�3YYϼ�	`N�'`�Z0��Ia��;
x��ԇte]��E�ǯ�
}٨}c>+v���["KÏ���
���)�7^*U3�w������[l�ϋk� ��g �0�]p���y��8ܢx�� W�u�����GpՋ	��g
�u�Q�6�5���b�Ζ��ˑ�䁹��-7d��c#ɕ��|SF�b�N��T4}�+�?���
���+�U��1
 ��wzC
m�̀Ц/1�8|[B����MG@�
	 �e 4
{ xm�6�+*�u�0��v��#�^������T	�_|��~)�Q)�9�8 p�l�
-������
�[Q�@��M �L���$�< �[� ���4�3@��E �!����[��?E �W�ۣ�
H�		�����Vf�����MF�ڎ� :$��Y���Ĝ��Ƽ��6$�ף�k 
�	�����_wN��F@��P����i�]ja�j�Y�k @��&P��a��
��
ԅW� �sM)
�w�Ï^��
-��x� {�ЕT�(�����F�趉�VZ���
����w�H���;�V�� Щ
	�jT�{�n���36�i���b
^@94�a����&�g����o��d�����d#$)����_�@��_A��$��|��{���1Ό^csCPM�V�ݑVgv���ӿM����Y�$��C��Mv���&�g"�����0�$�!5��'�,�
�&���*��XU�{H4rwk����
��*7�8�]�¬yu���e�\F:x��Q�?����:�ȑ<�*��Q�A��V��V���D��i�T"�%n[��':�Qy�Ӯ�#���ڬV���?\	�?�k�̍v�ɇv��V����r'DAv�
>�(0�sq�O7	
����
lv��YG�
���+���F�D|g
̍WOM���#�&x�a��g��:�	�����$N��/8zڛ���n����Ov
�5�:/s�����:��Ú[畟��[U�,���,�&��-̡~W�Y�.
-�(���k��-r�s+T�/xR'��8jd�?�����?9�t<���%җ��ފ'�[��6�O�Ys����9��x�s�ie�9���z�z�ȁ����t�.
�)1'�I
gV�&�
F�z��*4�2x�3�@����`E�Bz�
@3��cb����O!|]��u8����w�nyl��q��m�xV�pn���̺gO����S"DRz	��f!F>�a�7�#
���ۿ��~��c
/�1]�Ӣ�[��Q_�W��(�:w���v[��R��>�7�������
w�����
���r�:w��B�C�
��)1�U�M��F�̡<ۙ�
�7~90^��_L����"o=<���n�JuvU
-��)9�G����9/�}��k��
����^30^������->����E��b�r;_p��V�f��fk�
�Nj|�y�r'��Q
�
�	��9?0
m��(�Fw]�U:uª�Q����=h�Wg��)μ�
�u3ȵ���3i���}4B; 
d���e����
�Ո�Q�֥�_���m6������o���E�kN'���,
��v������
Ow���2��
�G�)�g
�e��={7�t|�K��s_|3��4o�&���θ
��6��کm�BPsoW�E�Y�;��
�.�=����+�a��h���J��o��jw^Na̞�K�
O\.t������R��6���ht�;� mJ=W��gܰ��Y?�C7�j��)P�a�VmQ�\mt)�=!��
-e�v:�u�jի��n��w�r~=	�)����8��
�)��-��*\Ԣ\k��V�?C�i�a�(���
�9yH�ʉ�<�q0�v��'m�2ȭ\k�{�_�׶�x�f'�ٹzث��h��ש��Z�=
�4��Bi
���kE�5o~�EB���Z�=�袼1�e�jr�+Rh�X� ����Ø����{�9A��s�.惪c���
M��^�&Ѻ�5����;Si�׏�]L��>����-Dkk��u.-�ڻ��|�H,���ʯy����i~��y�)�2��
����7Ty4���!�+k���2�r�.���sik��g�Ћ��Ӌ��ř0,��:�*���	�^��u}�@ݦu���t&>�
f^�Ii�)e����=[�G�w��/��?HԸ�
a�c�Ϳܲ���˹<h��\��sr�ѹ��
-�PG��Z[6�7��+-�o5�Zjj��lTJ�)�*���ٮ�_?���g����M�]~B�ڠ�^F�ո��+�%xǣ� n޼9+�iii�K�}~�.^��V���b����K�
�cً�-o���U�x&�n^��)�qO�*��Ҹ�'��a�T2$��>\Y8O��t�֍�pm�`F��eD�]�dg
�����+]��ۇ��;��S5��(��� �
�|~x
s�t��K�%�V�+>;W
-�[KF�bʡ\b/Ӓ��)ȧΫ"�-�-�Ho"u�σ�E >SON
��,I��D�
\�5/�M�?�4rM2�{�6��2hbШ�λ�
�&og�G�<�C�#�c�Vc��Ufjͬl�üW}���
��rۿ���� ���%��k�������	���4��g��P)���"I�1�*V�<� �`ran�\,��_��/�#�zN�lՄۣT�|�B�|�Ӆ��>��9Qw�(�!5��:��ű��zi�,>K�C
0'%�.|�F0E(���7&@�~��
_�
+
��
�bS��
\F����b���e�}�˰K=����]����"
-/�Ǎ�,�W��T����6S�l
��^>��“��t[���s7��9f�>�G$��UHC�C��6ɣ�\��T�+��
-�q�
vC��{�o�^���r
��㱒a��7��4�i
�i@
-��Z������QZ�U
ӓ}U��O�e{��,��F�S�{ժmi!K�GO̅�@(,�?���|q;�}�ܒ�������2Cb7y1�V�5�%�S���R6�P�-���L�C�hA\b��ӨN�Ӣ�2��:�CP��Q��(e���/���&I,���s��l��˙���d�Pmw#��?�]�b!v��'l���X��E��2�3��0�atkAдP6d�ʏ���\
q�2-�ȇu�Hm�O��K&Fb� �����#�xW�JR�bj0z�
�:���-��6kQ�(��)��F�~��B0Ѩ\���_���8#.��;��/���]�6�����Rׁ~��z�E>�~�
�;��)H �%O��*a��Av:)m�V
Ne�/d�G���#;�+3�Ae�뮔E𩜵���{"�K;=e���^U�Qy�������2&f���#�����$93d�)ݡ��f�
�
-=R��c��/�C�a̠+5T�
�:��N!�Y7-SN��
>�; ���8q]G`1����(X�1�e�:��خ��81��$L���[
���\?5��;*���#�|���v~7�x�`)τ>3�,�"�H���l���3�c��)��i&�/��M�w������E���(O`L˕У��+%�y#<��3�R��H;Q��n��>U�#Ҵ�#R��C~����O���I �k��vNO"�ڭ�3g��s솤(������^�����fKm���/�z|t|�5���C�
-қ�3���>�\�c��pp?r
XkF��;oMң����j�tJ���}@S�=�L���O��;1=\ܤ�CBm�eA#*�����
p�g*�$
Xk*�4�A���_tk�8S|�;�X�}���ڰ�6��9��G�����(
q����0d��Lj���=/;`����0�m�s�@�Z������y
-\QH��3��X��oJOw���XI
������ܦ�p��fj�҄H�R
�	�:f܃=G/��/
t�iw�O�OZ�=,������ Y�_ �`S1:$ ����~��l���# +6H�2 i��0�ۖ�w <~���m4��=&�~�%
Lm_~��;z��p
	�aǞ�4��R��LX;kD{�gi
��`۟
uNbl�:�m
�
���q� uQ��PH]�&���P;��}��lcj���p@����T�TMЬ��l�s̢?��E�L(�������Ɓt�z摣��Og�n)��J����Q�FS�5�]r!`Lu���ыb,.���c�H�

��hWb\{�)U����� ��
���Ub0�R��� �7NΒJ�%�;������6ZW�!��p�ЯqM'2Oc
'
#)�A�����s�%
��;ǰ�1| ����! �6���p�c2\F=}+��;�T/؛��]8��`6*�.�U�aȡ��fLe�:pQ-�����ީ���[��f�\&��Sź�%Or�F
-p�����&!�_H��_�Ҁw��;��I�����Z_ ���c�$��N���O��cZ���x\��#�+*o���\��֢S�F�3o�۳��Y��0�0�������H�	�
���)�%���KO�@T�% ��:w�Hig$��D�$ �����
-H���#L ��HY8�Ŕ.+-��K�N^G	����}bC���~Q/��
-%��d����\�ȿ�mb�M�/�!�q������g@�+�����	�}�����w���+P�T��+n��KP3H��7>��_������콃�d63��9�͍MО��_p��~�7��m��G|���&
-��o�nK���h�~h����t�4zq�zc�����
��@8�[#����O�h��gf�l�u|�햕m�ȁt��#��g ��O}~?>ed�?�
�}@U�r���x;����
�f���l���u5�j7uT���Օ
7I����
�'�&��'�D�&n�d[�$axz����W�U
���}ӷ�nx+�\�B6%�Y�S�ʅ��9�U:gn��|x�8��}tT64�>�z�
��8ka4YڟlM��*��x������7����
���
���e'��s����ـ���zƽ�QY|�Q���҇1��
�f��[���T�:4����Һ�����q�+q�\�=v�$Fڟv}z;=�i���	��z�_C���n���s��g�q�O���
��[��5l
������U}��ռud��������ۣ�͵å��������O�9΍�w�΃U{`�
x�O���E��dW�5&�.7��/�
S4��uU�<>�ѓ�Y��'�NW�O�����x��G���]�����V1�E at k�ܸ���zP|��Ye�.`���a�ɮD�&�r�M����u�=��`����٭n��?ƹS*.���,�N��mο�
�=������|�X���(��w��"}
�kq�������5ofݸo�*=��,b>���vt�������Ӈށ~OC_�`��с�&�~hd�>�B���J����<�Tն�}uC�$)�`B	�9���?���s�}���-��z�0�h�h}Y��V��8�p���?o�A��'���b��j��m]E^��{v�}�ncT�
O����Z���<zdO��R�\
���ɒ�}�Y�3P�j{l�~<+pq���~D.�I˥�e�o�ې?r��h�@�jO?V���Q�H�?O?
��l��

�H��Y]��~��W�6]'��U�Į�_8���u;�������	���!{zf�2�����ɴ��=
-����[̺*����ҹj�ʽ�x]ݭ7��k�i����NY�wV��.���Uv��m���\nP�Sq�r�ي��ʱ��jf}p��(y/N�J�aP����=..[s8�[)�f�n�Ґۥ��G���zY���2�z���jB�
�Μ�b�
W'w
���k�Ɯ.I=V��K�rj_*�PO5��
�U��:�Fvb�_��m�'��x
c%�Q����\���`l��e�����*��ŚRԾ���kz8����l���yNi�������K��m#S�7uJV��9U���|s�pY=�	��{p=${�2��>0���W��*�V�X	-���5�|�
-�
q.4�&l
��`��m�v�oݨt>J���v�/,�gd=�	�a_���=?9�_5�Y��&�
��TmS
����
퓪��9�]hm��Rgs��XD+�)��8Y�;W��f��
L�
�j���j>�f~>{�����_����i�<e��i�H�˱>�o��
-��cU�n1�6���ݢXi�Lڪ�Y6���u�[Te'�uĵW��L�">m��4�xl� ���˕}�8����\g��9�<��e���Y�G�LU/ΝH���f_����g�ZEIE%�_%��]�
Wl��S4�]����ՋQ+D����Wt�Q��|M<��r���Ks�:,2�mdJ=-�+�\?�Us��mm
�O��>u�ޥtd�B5�@i
��.�%=���J�fwh*n�HV|����ZHg�h#�g���-�w�[X�N�s1���uo at i������jxV-[t����Ђ�i�>w`92�M+��
|Tk���8Мij��6�U�K�Ra驸7;��� �
����WV>WѼܒ�5YN�mj�%�_����������qv/��4� ���bo�e������$7���z��l�a�T|H.��C��䳗BPXNr�C��3˨��E_����Ґ���aܙg�L#����*ߓ�_�JLZ�]u\Ҭ:/�2#M�
Ѳ�
�-1�.���yp�I�S}l�S�槹)���|!�}�
Juә��$A��dž�Ml��kYQ�iw�[n���1|��\��ֶ�z��z�Y�EB�u ��]dF��s�U�wbi���l�S�F"I
�TE�����,���5���E�r�ʄ�H�*��{s��6‘ʚ�HfJs����?j�^ܴ���=v����r���u��ɢ��yC�,t�҈��jr�1�}Tk7�~a�
��+��X�O�?m!;� [...]
�$wQ����B�-:�VI*1�x�vh����
]�3�ݐ�4���፸��R�	F���HVr'��b
�b�"9,�]�ѩ>C"�k���U�uٌ+��6���^�Kaޘ/^�r��_���7<������m�кUª鋕�������+�Z�#�~�ߢm��Ȏ��+/�Έ�&R�uP����j�J���cw��^��/	
�E	z�2��Am�t� �/Z7\���ۯoW]lk��:+ۍ[���<���N�ج6(���#�c}�8�xN���ʙCiWD�q݂ۙ��`Ԁ��=N?t��I�"m\�����
�/�����*A�R*3Q۠�.� _Z0�WR�������F�%?������on�]�����-�|�s��YP��.�Ť�́x�`Ot':N�ic�;o^G"
�ӯxQ��)�����B�y,�f��(�}
�Q�`��8+%Xـ�8
@L� :����D�S �?�"H�K"xҀ����XA��5��p���In�����f��
�B5���
�\H�X�17?�"��ه
�P����J>����`r �����w �c�J�� y��	�C@��W@��
 Ǵȶ�d����/�e�A�Yh����xݯe"m��^{�+'���5	�'ZB�*TW����L6)��\�jC�\��Oy���(��MP
&�������{�v��RO
�t� h
-t�e�7�QT�k� �i���$ j�/&(Z��r{�OU���^
-�xm��l_
���\����%�����^�z�}�D�����s�!`&����ɷ
|� 9&L��%����>!��
*�L�\� �7M��_H^2 at 3�	�~�s�X� F
�Ѵ��
�M,���)l�.�K!�������fͬ�
-l�+0��Um���Q~��vqJՐ�
-p ^ ,'�V߭Oz���@.��G'��
\
�Wi����
�L
����p��

����g\�
8��|���d/Ἦ����Q_�A�Im��3�xJma�y֙\5��#s�Dg`xX)�\ �π��W������x��C(�ou�
-�l��O�����'�a#A�|:��6@
-8D��^'���˰�Xj��ȭbv����X�cq��w�2Q��ZF����xa�3�Oޅ c) �z�uj�������?ܯ�k) vi������+4�d-@*�@jbX�uH^;�^���>YRh{@������T�\�|�?������Ȣ4`���'6���1�r6=W���1|w�������~�?�>
-�W8����M���.�N/+� } � E�j@��y��e�_��

@	㬉v����Gi���
���qn�7���mF��N�
����=dcmY��7�'x��w����#�@��+�����m�p�u����hO� t����ej	

����	]�ǵ��?�������G�}��f�7����'r�����F�va�t�l�>���=�tZ�A��m�	�ݬ���q�b���Tn3�Bv�����o?�o
-�W���������_���x��+/�l���o[/b��������N��Z�_���,��-;o�E��t��i�׳�ăA�8�̾u�&��!F���Q�w�����\��,�-��� ����4�
��q�oO��˺������`q��R�^�Y�,9�v�_��x��õ��G���5j����v�S�-R�
�N��d��Z��Wz��`|��	vYe
3����?�L�P��@�d�3剕R�Z����ʡ�RL���Pɺ]���zj�����T�^_��]~�3[�'��F�)K/��}�`Ѱ8�Iי=\�6�ns:���������3�
��a�
U��~����!�|���o��޵U
�������v
tރ�뛿���>�+
aF<O��Ce���R����Ԧ�.]�L��iR���c���F�X�
݌B<�a��:��CF���
���3�����V���w�����
:���^�c��eU�"r��&k�y�Ŝ�u�e�ː��_ҫ=}���'bHmf<���#�~���gJXn
-�Ǽ�6�!%D���]��O:�]��9|�FF�)v�c3�Uqjmj\����9.�Oe%HV�?�zU��?G��f�u�Խ5�e�6�5��kX��u�����
VL������H��nZ�z����[�=֋��I빈\�V�%�j�R�N�����cEx��2�
 ͛���n�p������,]�:T�/{��	
F͕�꾽�W�w�^	
Z6�ܮ�p��?�Q.��+���0�*#�a�[>Eu����F��gk�\�!���k�B��V���|Mh����@浜��b}Y�9ur_��6�߬1g?�zY��W�{rɇ�jQ�n��
-�O�����^eۤ�vi܌{%K�Jȅ(�_lQQ���J)
1��:��ڞ
-}*�%�B��'5�rm%&�mܙ}�׫��Rs�ݫ�I�t�ﱊ�<��8w���$;�\����#o���dCk�V�)�f^�ka�`^�fw�¦K�
�	?��eӳ���7�4����${�񲀆�ػV:�u����MJN �y۹��nTs�P�r���rl�#�[0���V76tr�ueɒ�k6�Sε3��qB���+l�[��ZO��m
-��̷�A/w�
�\��<�g�J=�Y4rt{n��R*����٠Ž~�����zV���V.hS:�
�3�K�V�j`V�e�n�v!=�y�Wn�W���i�����zu4Efu͟��W>�K��{��sZ�f�SJ��FΫ匔0���3Ԧ�9�J��EC�&��/oS��ŹJL.@%�DF%v
�ݚ8�ۨ�
�Z�>��ĵo���8�Ԅ��\68{�
��9��]3�U��o�;^�n/�9m�}�83R��Z�^x�wmj�o�N�
��ZᦒJ�R�R��u�I��٦�o�<?I�dz���r0���`S~&�1ڞ�^j
Eq=���� ��h��f��*���jO*�yqsϴL�����	����]��磡�,�0R���j�U&*�VVJ�W�+L.�d��
d��5#�X���gE����-�$I�u���
�,
-��5���U4�b�/��5�"�NrUF�6l��/5����BX&���KDl/
"��s��#�MQ�\���)����ͬ�ǭ,���0�������3� Ŏ~�V�b�5�`�(B��bQ0��/�Em�OR�o�,�ix
�iF'>�E�d��=
����z�%�b�Om�ݒ�^�;*� ���b��:��;�g
��U�z�Y���r8�t��I�3
�ɫ��=9}��X��+��l�B��<�	odx�=๹y2�2m78|w���e�L�4�'�KS�>����&�E__6&mJ	��z
}/�j�뇸iTz���N�*���6�����Nw�‰nNj�sC�q~N�^I(@ê�
o��/e�->sL��y�N�r��r_������@���՘��2\5���,w�����nϦ��iCh���_�7}�B�3��4fg�^��w�d+�zպhE�
-x[|iU'�d�9h�5R?6�KT͋�FK�'Q�Q��se_,q�X�����d�b+f��y���̒i<����d��'��id�K<v�H�:��
��}�D�N�d��(\������RH�ݵڅi�;�~��w[���:-�
'O*��,jj����h�Xeޯ��
JX�cM��]a��Ӯv/0M-�G�p��ȵh	�z��o��e��SQd<���ϐ��S$��eo�
�k�%��c���8;��	ȹ>��
z�'���ܬ�:�~�
�
�^5��̺TF��j5���G��9s��'�c_��W[c�`��'x�ђ=�SWlgSJuWM�/�,쓝;�&�iyL��ޚ��+�?g�4
r��Hpd�
��/�0Gܧ0
���M0�0{b����Z����0y���6��3V��c'�y�Ԩ|j}yhk���^@�'-��U�kk�|
t�4ҺF���"1h�+��-t�G�x�
q�,-�
59cN�0\��?0�|�
�*�̖>�3��ʰ���a��a�=�̖w(e{��	e��n��Kk֭�� ������)W��!�+���h�}V�0�0I��6*[�jgw
-an�,n
�L�Kz	s���ǝ ]Y�
J�_�̶"�2
��̰�;�
&5
�m�""֝���[&í8ׇ�[��#"e<1-ߣ �V�	�gMJ=
��+�>햶��
n0fc%�z:r�ޅ����R�HгD�v�,6!Z��rf�����,Y�qe����HH
�_�Q��ct
_��
�2;
�.�J�^Y��
�A���������:�^�p���{��R���m|�3Z46���+��
��eJ��}�V��M:�E�nL96�Gԣ�.�}��z����%�r8j
r	�6�I7�@�Q�3
�i�٭�7A\�|TA H9�?p���l0K�:�
;�ii
`:_v�X$h]�t߾����ye��q�?��������P��G���5\�Y�+��
��(m�\d�{2V
���JΖj,�}O������)��VR����)�8�Ot� �t�>pB,%�%�%'�SU
-�p��c
������
�WP�5N�:��ו<������H�v�+Ucq��JI�8�7w��6VT_Pzxy�id�4]�ۛ��NP.������,?�		k at 0�-AKg�V �:#���[���	���
�M	NP���8�7�|���)φ�$����N#�Op��ʦ���t�#(m��
��
-������������ i at N��ԑ�
$�w)\�����7 %�N04 )�͏�K=怤g)@"�d��B
G��S��g�����
��������+��Q�E}eUߞH6
�7Y�dw�$�H��y�%{I�iP���`�*Z�	.�l��8Ak��yT#�$X	�jV�G
('��\D��M@ɠ(Z� 
-�(	
���X��i�
-��OV�F��h8���
�F�*'A]����
k*�=�)!�t�1�`ݮ��As����g�
��wLF	�S@����b�)� ǩ��RK� ��� �F����*��Β?�AL2�O��z������;�.
�׽Y����I�B�x��<����q���/��i+�}<��0�i䤰i��s� \'�
�.�
��N�� �M��� vR�vʾ?�����O~�����$���j�.��;�B�%����5Țñ�ʅ]�<d�K�p����i�[\��{�p� ��~��m�/��W�e�w����K
-��� �=R?+	V]�Ϝ=�{�L��	����p� |k������er+A?p�0�'ck�
-x�Bc�i�#�c�ɇHD�1�A�{1�G6ެ�@��o �
�G����a��sE��~���
-D�]���'@<�w &W ߯
-χ9׫
7��u����>d���3W���򪦦"��c&?+�p��$o[
��>������v�5��6p������&|ӯ���׆�����iYL遬~ف�� [�i ��v��@v� �&�Wn�d'�Η���i6��FQ����Z�z^7T���¿��
�g�ݶ���=����Ɵ䄯x���~����
�P�
4��M�U��D���~����m�\�����L3�����oT�I����7����iA�5ږɇ>�q�w�%��v�*C�6&W�
qW�댽yW, �e)	�J�B���\���>�DO
t�O�$����k]�<��}��+���Я��i��c����Ա����v�R�./K>�^Ȱ>�o��i���'�?HCh�
��:ę%��7�^_��݀yX;�����E�7��9[���c�)
��P�O
-��
���I�O/��s���܊�9v��!sވ�왉�c���a7�w��o�\.��$��^�D�ɥ�#�b���҃_���~m�*u��4��=�|z����t 7��X�d@cN_FK�M��j?i_���Z�>��_���W�g��!���݀Hn��'��d��^���B�O����p3}ߓ��sK�����鴊c��ۣ��WG��o
]���b�
x�j�?����[V��S�Y��?�O�,������o��xV�����pߢV����Bz��
j������Q
����
M��^%Y�
��f�w������z�&��)'!�����o*�h*݁�*�
�l;F�d�R�,܈\���OBOԏ!y��\W�k�6��|��eF��ѯ�u�,�_���'/=p/Ϻ�;7���1�_�jO9h��;+
�+6�I�ߊ�)ݍ�7jm�ܬ�l�e�q����x
BI���X|��S��n��7ߣ:�4���;�rY�-�az���o��d�u�7�e]uU+YldS�-���y��J�$Q [...]
da�]�T{��k��U���m|o_c.�{�S�\	s�)_G�^��K�y��c�E�~o.�a7辇�[�p�eb��K%�
 %�C���
���O�zj{i��ֽa!Qrs
<�ԫt��m�M�Ɯ��%��ʩ�4*ҫY(_��]V���t�N�~ϧ�=(�G��
�K�A�Y3�Z���j�^$_�Ca30�
�\ӡ����6ݞ����@\	Fgļب�X���0L�w-L��p1�/�ʨ�rش�_ޫ�ٖUp:;���{�M����VB�7��f�4oa��\\��Q$o�Up5�n��ad
-�f�K�1/�]$W�lN��N��%�2����g�/f��
���
�|Lw|pe��xy�<��=�5�wT����t͞g�h-,!�\�r�ҰXs�"y)�
-�Rۛ�n�dz�ϟ��;FH�:�9[s�ck�A�%}�l�?�n�6
Zg�*<q-��mu��/�9�?�b� -��s��v�g�%Lw��u�
�R������]��j^_8��Y/�^�̟�R3/W�Q.�{�S����+X����Crz����M�7�e���+EA�7QN����B�ʃ�v	�Y��e���,�G�9��|����,��;:�[�z��
�A���6K����G�QQ���]|���/�M����v0�9�����p*�k�� P��A����@%��L�
�I���E�m��[��ܴ|f�,�
Y��Pl);۵Ż_ފ��^�*/�&����_�:
]��+���F+(J~^^�
�1��������a���VB�+P���L޺�2�Z�
��Z�
-=X����&φ
��POTG���H�dg!�'�^씖wQ�2��MN��K�M����E{1���⦗���c������/��x
�I~�
�����Z��t6%�.�.�bc8�۬�0�7�W+���mV5A�88Y�KQ���"����
Q��u�iB��H܎��,��X=���}8�
�7u�
-��,�-��M�uc\}'2n.�a����lz�_$�X�]�cf��n�Pn:�c�.��
�H�2H

Av<��k�y+f��	/������H o��X�<2��ܬ�9�ۗ��]z�)K�Ֆ٬���k(�*�,���
--T�u&��*,%wZ-*|X[�x�/��޴y�S �VmT_�!�1k3�?��73c�7Z��m���J"4o9y�sj<��.��f^c)�b2�w�̸�u�ak��>������:�
��	��W�@�"�&�G�����\9�
-D�0�3�!�+vKj���8Ĩ�
-���O��5w�x���^v&ذ��?v��>�me��+�����L)vU�Hf��>>X��gi:I�0~kԹ����P�+���b�%�UtFjr�H<o�ћj
�†|x6c��zl�)2��i�����|��`���m��{Ɍ|k�[^�{�.¥�6�4U�t��<��k
'��a��7�<:Z�
�m0�|�p��4y{�<���R+_�ċDl�w�D.n��KY�	>B�
^86^�Tڑ��.�1t��
-�P�l"(q�jhE���E0�`�񰍷J���M�\����q �+�:c�.���"�+���j��0n��8p�"W٠
���a-��2A�.&K�F����/"
�H
��R�ٹ`�.F�Zq�;J��Y�8#��
�O�i��4���+Ȟ�N3��X
f�A�;&3I�~]�j�
-T�M������1�����|��#1���f�e��GHG�L���0���%P��rM��
ʙM��g�d
�t�
d�\��G�Q���5��M8��9,��,�X	��e���>�ʛ�E�����H��F�†��,�|�GY657l/��ͼ���
�PaScqM'�o��3����{�f6�-�q��ai*��wj�U�A>�����Ce˵���R&
��ٴ�5虻M c�> c�iP�:�S��i5�n���3�fһ���F\}�-���-,�4
-
�/��K	!/�-%C{ܺ�q�ֳ�#�K�CW#C�C�턀[ܐNp�`�M���(��f2i�e
=w�
���N(U��|*}_;�d�z Ϗv���(�d+Ag&�b�m+�\	���^�
-����|^�9
�N��U��N�U��w�Iq"6
-8�΋��b�pD
�t
�?0�'���(���HKSp���i�
-:�� �@�! ���
��Z���@��Ё�IpYt�4�[6��>�g�� �`
�yd�
G��W�7����!i�3�<ՆGt|���U�K�[�(���t7+���4a�}(� ��|����YX��tc�������S�w�Պd�EZ���s0w�X�������
�.������#��
x�����ߗ��@�
}��p`E�5����vb5�� �E`��ݥ�����x|� �N�	d�j9��x�%h��� ��8�}Txy�x���)�^ ��{���
���p
1��p�j~�����e�
-��ܳԐ}	Rq[Ms�3~���z�W�0��Z��~*����!%�t@,��^����`� b�4���	 F�Q "N1	�@���Mh{��� !
���Z �!�h��sr���_�{�Ɵ4`����
/d��T��
-�O�|&�V4C�چ��v����$�c%�W�]@>��?���k ȧ�L0��H =�8�y�ˀ\���\�n�
U8@���l��+m��^�\��ݿ-���&4����S,�<���Zg�_���Kt���R��ϿM��|����	�q�B7Ac�`2t5}H�m
(@,#��	h%��i�����eZ��G
�.��u�T�
-��6�u�Z˼-�]����%;���yr�5��I�𻤬 ����~Z��{�M?���~��;~��;;,�l���`9�`,�Ul�f�1`��0�,X�� s~��Ҁ��N�I�:���y�9���d���J,[:^���3�0(k
endstream
endobj
128 0 obj
<</Length 49347>>stream
-d2�Ї!x(�/�d ,�_��s��Qp�/|UݹrIP�0��B(���x����yl5<^�>%p��Hp��pw���h}#
>+�g�䬭~��Q6=܄���ej��TLlI$占�:X��� ���x���W��f�����`�	�mX@�V���y/
DYр��b 2��l:�9��Qzy�V4���hå�b�}�۲
]4��L	
�"�ry
����N?��j�k����
��'�������~��Prj����5�yp� y5��|�
���)�o
�]�佖��PFr�X=(}�	{l�aL����#����Y�A�����m��m��
_|ܯ��o봿��Z��)t
Tuj����Jc
���h�~���J{�@��[�eC�
�_���!���OS�o2�7#���5��	
�Aut��nc�Eݐ����XT��N�,EμT.9�QJ���“��㩰]
�{?��M:(��7����ZW?���b��x~������8��_�CӼ�h2�TNP����ɩ�|,�aj�9\���A��/���x���
��
�A�gR�m���l�{Z^����rӔ��P#X��l1���ʴ�ȁo
-¯
*]"�O���=��MKK�N��8���vS��j��Xk;�
��R/�6�,����XcbX0�V�h�l���!��;@����\Oƪt� ��k�BtTE���%��`_�$3��c���i��Ud�_�O������r���ǻ��K٘.���r"��\Y���ws����Qz<�������2"�;t3Ma��;��#"��Gf?dFv��-�=�
�����

tށ��Sۂ����i%����o��������F��7|�kO|{=��
����d,��c�ۭ
7�xX5�TuЋ9g��J֪3P�m�Ƕ�R�mdd>cɁh��ਊ��֦Vc>O��Zr��|ʫ��C_y��kn���t�7N�jB����׵�bǫ�ׇ�A3�5�ܹ���I�"�Cf"�ZW��9���I�Ù��Ѳ�[��R����A	�PTb�I]_y��k����h
-ʦ	M�c�ŠwwV��.�
S�*�Pj�Pqj̭W=���ɕӰ����rl��_��k��؁6"
�/��k]�
�y�\|�
-NM��\F��V"��|�i�-Ml ��:D.�ח�L\'��]�x�j�9U/[*�N�]	�֨|

��c2?:FrK��
mC�I�4nZ�r���,��Q�����Ui�O7��ѓO��d���Kk�8� �3OO��Ƹ�Z��r��mѱ���*
^��B�8�f�j*&�n1f��,�3Plh��>,z\�f�Y�����+V�H���苂�Oo�~�a� Gz�4�
�a��J�B�21�|1o���6�zZ�,�
�GC߻޼ge��
ח�GT�D7Y�W���v
C�oJ�Qi\9�J�漶
����#���4q|�
���澇b����i�IyI�C��r��jC����{������j%+�q|�k�v��;ݯ���i�gQj�7���{�th�j�S�W��t�1�Y�d;����J�<n���}��Q�4h��r�9��sq�9˩hgmt+��0��E���n��d
Bj�U�TG�T�y��j>7Q(�p�n&-6�ڃ0�:�2Ae�e��f�v�;��h���?p��o�7
��J���a={��]��[�ּ&'�塀�t�[�L���J�ɰUm�
��@C�f[u�f_���T���*�Y�Y�z}�����b���$�=l)\Ub�}m��1ʈ�|[�Ww���b [���,�RKd��
�[��j�h

S†�2�m�}`��h(����X	�5�q��Ee%�4�j��٭V.e�E�**��K�X:�۞���T�-��خXW�y�^;�	)�-��%��a���&w)͕��g��Ҝ&0��4S]�z9̍k�L)�{�ޜ���M�pEsZg;3f&EV;��,#u5D���Q�F<%d�Q�%qR�ؑ�;2�E�[~`�%��B��BJA~��z|a�ϸ)>�q�5x�
�@���Ag�e��ԉǔ�7c@���C�'��	SW��;��ͨ�����\�2F��&�nh9/��%�R��yq�rF��hNF���7�I��#«yE����#�J�;$pS
�r6��8t�/��j��V�~����>S׉C����nV�0�ӚD�m��
g@^	�NF�|��ʹ.%��1%U�Q�f�
��
9��ļ\��
�W���d�����smU��*M&G� �������X8(K�ɬ�r�a�P�w�e�n��%��0.u"�
-��	%��=���,�<ѕk6��3]��Y�����������f�_�+͇^�B�7\�����(ʞ
��e�]>�T�z�~t���6�e�4�Al�ſ&:���㐢��3C��IPҚMf1�ZW�d�x&�<f�1��[��!�6��nZ��Q��Y�$�2�s@�p(c�b`��5����o���	��<�+����V���#4]8=���@6FZ���8(��m��33f܅�B�� ���M��Dt;�L�-MNZ" ����\�q�5n��"�Ŭ}~�e���F�9�D��:�YY�0S��]�:	|�&(^f�M�(��
���
Ɔu��=g��O�(�&_Z���B�}]si�:U7
�W�d�yy�p�}%�-i�"�Hu��	c�>�!&��t����\�1��b�R��b�)^@�M����A�Y
��L�V�dh��!�}d ��"\��B��!�a��Ŀ_"��D�0���ڴT�e���pT��;J<�R:^��ܑ〯	c�i����.��\+~b�%~�P*�D�[B	�C3�W���3��/e��<��L%A��4n�	�u�
`�

�
/���D�U:R�h����`��
���oea(�a���]�V����
x��%{1�W��/қ�r���zlz�54-�y��a�X�>Qbs�e��=C� �hiJbr`�>�{
Xg�89H0
�/o�V���+��(Pg�k��Ba�z�Z:��
ҫH�,�~��a
�f����[��k۱�W��	�sʹ��X{�5Ց�[�
-�"B�;�B���{�᤯��j�����g��{
�)�"	��sh|�A����j�㴡0w+'����tL��/
���:��:�����k�#�k-�î^F�Zd���ù�v5��&�� x�-�R:��8��V�'�� �o@
�
D�<�ԅߕ�	�s�Y�'�q0�݃��L��z�]�O~��+�,Ԭ6mI�������`&ђ���
-����Z��}�7�����>�����>�6U
��,�f�2 
X��d���
-ȰYd15dV@ �y�G�9eT
��Ay3���[���U��+���"�Hc
�,l�(=t��R�����
-����t@^E�
0���P4�� �t@	%
b�@�@��
���ЯB�#��Pr�JQ̏���b at 1�%��	(tV��Gb�E<��4��v�i}���*_ȴ7���hJ4J�N��R�R��-�!3���O=�y&i8�����N �9B�8
hD!r:��4J!��ih,{�xЀ�7
@=Ru@
�-ē�R��^
_e��
-��
���$L��_�q�)�i�K�;o��}L|*��p%b��N�DmݗK�ͷ�9
K at H�A�*r�YC6d�9l������G�����
(�s�PY�CЛ��_t�O�[8 :n��;w�)ޯ��/pz�ɶ�N9E��c^��N�(��I�ry�#g�O��g�hR�,�'E�M]��S�K& �K�e�wSl��ʼnD0��
 K`ID̳] ��}���|�C���`"�
�����M��Þ��\ю�
[w
�S$q���W{�Oj�C���x�%
������V�p�r���>�R���B�z�KQK��
pBC��3t�
8�� 
���t��
VS�.���
-�������N���d��l%��
'چ�bY�ڐ
o6�S"h"/���寧�4��zT�8V!^
�o�.Dn��`7�=� �d"~�d �M�w���� ���/o��o.p�W���38yF��
-�Jݼ7��$F�x?X
��������x:�� 
?i�.6���6�Xn�����?0�B
F@�cs V�-D�� Z
b�1
�Xt��G�5��b�D�� �%W���?s=ަ���к��X�ц']�����-M�fᎻ��
l�p���w���s<�K����?;����
��*w �"ȅ�䠔r�� V�br6���` d;��2,��züRJ^�q[ڧc^�u2oEr�D2ܼ)��Q8�)�P>������/�6j�������Mo�>~����ty�F�~|���	�b$�Lbs�V��v	�딗 �-� Q��:������C&55�󣩨�^��)ӡ�孈g�
�O0�~�����ݯN�����~�����l� �F��@Ǵ9� �8�@7�p�4��4��L�ү=q�;e�6�3L(�W�+�@k���=�(�%%�1 �Qm�7|̾��-rs�"��U�(��o��	_���X
�߀�5$`�~ �bv�f�V+�Vٚ ���	�/�ퟲ^D�d#��Gr���
9`ܮ3�x]��,vY&��N������)i�ʻd
On�=ֱEp��.Ճ�d��r��
��@�`۱>����/���~���D�~ [...]
-qk:����`Fׁ�]}��-}\�>:��7h����u�sO�?�>R��d�f�2Y?�:�
ZKe�k�[�Л%w�d��^�q��ލBdq
F��1��λ*v���k��ke����@�v���Mޖf'�;�qz鵉���)��\����6�SC<rt=���7^�S�z�'��U��w~�y}��;���
�Z���AL�R}mS�z�v��j�A�����@����̰��g�͐.����m��ܡ
˙s]9����VA��V���ϩwSw�2�|���e��ΣY4�"_
�em�Bm\��V�pߓB���������5E����C�XW�DF7�^�kD�/�c��j��kW[��Ə����o'�
\'��+.�sn�L,���;ʹ��2r'%�ொ�Z?����
*O8���
��ʶ
-�c���n�ߘ�XW]id[��׎��[�*,�n�ty���z��j�	
�5<U\�|-{D��L��B!K7�<_Oy9�����Y3���\�y�`�������w�N5?(L;�qi=�|��j^����BʆV&����M&ru:#a��Sq���e��ԅ��γ����_Z���/�Ҡ��0�W���n����]����C�O맼K�oyt9x�<��z�r��|y�f�����s5�vF|����R�4��i��-R���;�M�w��R�8Jc�8	
$ߧ�����O�m2?P�����}�������T�W���a�2c�)Z�U9��ʹq�ƞ/��첊�3�ƫ�ﯱ��R
7�u�4i
gϩ�T}��)�6����{�IWnI�x�ٞnԬY�7��d�n��g�\���f�{���Q�r��Z�h�wY�֬ꠒE��Rq�
�y�g}�+gr
[KeÄ�Έ�S:}ꏳ�븕OYd+t��V9�^�j�Ai�N��A�
�˱M��skָn-��>��C���P'�(�J���5��~P��� [...]
-�Ƴ�GO{���i��ASǢ�|�B-�L����r���3e����#;��DN�E�
W2�M�2�n�z&e.ۙ�ɽRyc�/�(]������co��N��D���Z�n��jI9<ѭN����9�}]��Nn7YJ(0"�^狞cDp���9��ֳr��%��!
���?��
��9�O7��� Ċ��
-�M�46=���#��'hu��5�Qt�z�:�ed3�'�
N�S��@9¦�_Cˤ6�7mܥya%�\u$���b�/D~ޢD���E�m���b?�8\rN5��&�l�1acC>�ay��•�q�
���[��v���,�z#���g�#	.����
Օl1��
7�d���H�6H�K���E�+
-�h&lo�E��
-�i��հ
���EЧ\c����<��\4��ul��Kׯ_J�t��K��$Zp�� ?M"�l��|���❶��D�k^���n�Tp�q�s�=����c�-*�I@��9#;�Q��Z7��|��
-x���qM�pƺ�c������1��2it8d�Ia���c�b���K�Zk�zA��ȹ?x%���2
���K�yZN�cc3�c�5��Y��CO�t�"l� 
-3�(T�ę?w�&� w��p���x�>8Xl'Cfp6)�e�_�v��C���0x��,*R�}'G�F��5�AѮ���G���ޕ�n놵䬘-/k�X/�R���D.��kF+>�)d^m�l��pC%��v�kF��Kw���x�_m8Sno��qxd�Z�¼����p&�8�s*=:�Rt��
hµT~۝Rt����{���0�!6�{�'"�p%"K��Lr�M�����o�n&Û�R
-�ף�ͻ�p[Yz�d��Ur�Po�dbػ�2S����:���p�
P{�
-W|tv.�i���At 5K
i�Gq��7�\F�<�=oUb�wFD�΄ć
���.
w�M<�Ox"�2�_/��נ��^N�7����l����&�WVF����]r�;�ͽ�/k�w���Hk@�y���N���=O]Q��Z���}K�%�
�y��X���c-ќ5	����>!U�U<�JC<1
�s���Na��SGo��
�5�*�_�"����o�'#��]&xWӧ�����#���hq�RӺ�Y
^a�\۔D&��MN{1�)�����"��tAD������!��'~�^Mt8\w
;��
�(�˘!�>z{�����v-$�S*B�W?8��U�C^�[�=ka���QC/^�������+�Z!ө��j���87�O]4���v -�LS�:c
��<�'���Ə�q����g���_'�°��Jb�Ѩq��Xk�=�]��gJH�<�"HSڀ̣� �g� ��q	�!\��y�M�ԯ�f`\n������
.gi�+#0i��z�%��6.��@C�l,��+�Ŧ̺��Q��9 [...]
%��e��V�p_"W� �[�f��FY4�����_pd�f���T�� ���

31�$�V�*��C^���f�!�.AF�׫�3���'���Q�# ����d!�* �x�X�x q���J$�#�m��]���?�(1���e'�G�V�d=|��ʯ� ד��i+)R��V��.�@hLN�Bӛg�̩�RŵG�v�|G2�}��~d��I$;�"OBL%@vq
���8� �s'Wxx���nf ٠��,
ྈq ��_e�Z�^�lZ�L�U�%��W-�`�����p�M�6n��%1[�c)��kܻ:��K�bLJ�b�mE����U�	�a
 ��D!�$��GP%A�(�!�E at ENb������rP��(�8TʁG�����}�Ѳ��ޣ����~]�%�^�ԻYHg�Ӗ
&�#��"o��D�N�:K�z>�e�����u	u�!��ܟ߀�#�{,����<�
�?s�����@l��;@�Й@tV-�s at K+����}��^`
�����׬>����b�j�p㔢n�w2�(�g��^&
^
4�
�:F��`��E{�/���f%f|H|M�
�k
.Ki�(�85 SIO!vg��i0�LjRL�����?&E���7d���'W!�f�zAh��C+g���<
�"deşy4
M���k�]&�P)p��t�)��h����=E�p7
1�v����*�
`��`G��#��9<�}
�n��
��[l
-�V�_3p�т]���u>z'&�P�T�Ҍ��C��P�h������h#|s��%3��G�m���vd��_0��� j�p�C�����	D� xY� O
U��n x�

��p&�� �Yu ���o.0��
��g�zo�v��w��wd��F:Q����j�1f���p�S,�@X� 
�/��O|����'
�X�z�������!�,�uk�S���xM�=�Pi��}سBj�T4�zM�Z��]�2���s�^WdCLE~p�<������t��+�������̀4
z_��v1���M��V�~�&���+H�eH��H������i��>=#�c����

-R딷�U�ɑm���rr��@�l��,���n�_����%���;~c@�"�1	�;��'��
$H  N6HP�P��P�xȆ��㚴���3����4��FS�q��L';�Jay�~���U��b��oZŸ̆?J�7�?��?:��N�#
�6����*"
����̀V#)��	��(���Fqn��Q��!���Z�2������C
��}�X����� ���>�?
-�3�#�~��S�
�F�̬�f�s�����q
���
���	�^�	�~t�_(��D�oY���w2¨vg�;�/&י�Y\�J{	N��y���?�Yl���ʫ
��t?j�.}�zK�`��ھ�>��;��;�*��D3�[���]EDI�M�O2��v�_����?�/�-��8�ܲ��p���zި+��t{��5S��]:Wܥ�jy�=
-�M��4�\w�ZE`�]�3��R�N'�:�Xί�N-�x.��B���`&c;�O���ӓ�|��ۼ��̲���ZW?>��k?��s鬮�Z��'��~;��n��|�O�
m^�f�R���c���
Y��d�`��k�B�J����
#J.
���)�����!�����5'�λG
&�co9�����������̫_9�ۼ�
�MX�2��˗�)ZS*�E7F!xw���4�7j�׶�M�<��ݮ6�/��>ղ�٫��&H�C&Dk��0-z6�K��76�g�!
'�F�nt'�k��U-Dt�n�����&
����U(�
Ͷc�i~t��
:Pj�g�wj���
��O��A�k.s���-j冸	��X
-�B�����jeX�6K�����[��h
+�L�^A�K�/��g��� _�N�VQ���;��8Ea<
���~�ɫ��)�F!Н��C;}�l��ڣ��O�z,
AM;U�O���T���Pq��'|5g��y.�l�--K���Bq�E񜫄�Qh�N�h����rW;�1Ş���`�pn�ѝ�D���Y��Y��_��G��Ư�v(Nd���9��}�ׯu�z�'�wO^�=����e]ܔK��x��C�܃��µ�
	)���ُ�G�R~�G�<���ܸ	�n�y��,f��k=���QF|��n�nP7���tݷ�i��^_�j�n_|�u��^�C -z�?~2"��Eܵ�l^�Y�6�z�\�F�倆�`�vޥ&����F�,��<��[e���>�]&�̦��e�������\�t=�R���,F�+q�[,���n�N�	i�D�s`��u�����&^��
k֗/cf;=[�V!w�j�U�
�(7��7Z�U>,���l�%�7+ur�0��r
3p�XJ�b��1 [...]
���p�Er%7I�>��j�n�j��5�ݷn�H2glF�!��J��_�
�pr�௳\O��� �>�H

�q?靣�E���֣�?+� 7.f6T6�ۡ��QIw
���|��v�

�S��8�|���E���
�C��^ώ��C���
��vZx7M�ڸz�b	Ւ�\�qBۉn��O8�TUޏv������v�k,���b݋{Q���B�z�~�f1p�g�����`�ښզ��l5Yc�
xCBYߏj�� *�v�uҚ�4��u5
TKX��ݥ�pH_4����.�;;\&��I�� �Y 1���*Ȉ�ť�Eg
l�F<�&��0f���~+��
:�\;rkN>��lO2a�-�mH`������S�.�o��
4�-;d‘=V�<Qq�H�ǭȔ=���f�q^�Sײ�
�m1��3a3���(0i~�Y$�������o��9!sgp����A�6����AO��d=�J�v	�D��{�y�yɬ'%,�C�z��<Զb^N4;*n�?�^�:I��~�|߅��(cb�(S?��g&�M� ���	��èʝ3�!���~�/qֺ��
�#��
L���LJ�]&��-�9L����(/�3�X��X!u�^��Z�yI���k%�0���h&��4�%��|�l�U���p-H�ގ?���jߞܹG�F(М��"�n
ֶ'�E�Ez*t:��6�sK:�qj�ިTn�(*+OɅd3�E��|S�N2�4?5˜y��+�%��jx�J^i�6�R����
-�qR?-
^M��<m�wb�`�H��rj��3�α
��Q��KR�L3�^
�GH��3�L�`S�C&OQ�y�
PiF��͓X�}Ν�!�vcB��
�$E�ԧ��74d��G��
E�#��'�W�nk�O���095^es{�u�TUnIäe=	��s�/aĤ
�!=J��4�&�4�YQy|����~�
�F� �eI��׈���l!&D�<�+U��Wj��+���j�l�M;v"����l����bbrtJ���%��g
-�����N����̗ԚY��9�}��ʤP_N���,�f�
yDL�G.��$�>��ʔX/�k�T�� v/B4h
-��y��v.��r�����#���ҁE[R�"��B�S����k<�j��<_���t)ѣ��9%�<3�l��_Ӏ^.�e��2NWP_�����
�{c'�[G���N�Lm at l�w�k�>����z��K��W��'vj�I��4eL��)��K�ezH�s�#�ߦ�`�;�-m�`0A

x*Ss�m�aVI$S<�M�0
Xrn�NQ���~�����Ѱg�sA��c/�К�w
������d�ᒄ
��?�=<�����N�z�[bz.{D[� �`Q�6Ñ�KK�3I�(O��6��n �� k†b�k`m�	q� V12Uw�
-�MyE��v~]�%��e�X
Ieb�`���7�ɢ��c_�_=[8˾��MՆkb�ӏ�}��Z�!���FH/uZ )�O��x+D��� {���Q p��B�� gz�zI8� ���, 8.�#�O��RT>	��S(�_pNT��{���>�\�����;N�Ռ���-W��VE�q��"7�|��wx
ÌSe��eb
-2����
�
-[%� o�	 ��D��� ���3��xo��_�|�Aި���rL@�t\��
&{�ܯ8f�	���igF�V�V��LN��}I�Fe�sN�@�#����]��y��% R� �4���
D�
1zBG?=F�
�%
�L&��M ��� �9 l� q
B��H<�_e��
�e9
-�c��|F�u�������u���PE��od��{!�0�!����6��=B�o�� �n� )w���'�����C���H��!VM@����$:P��>�#wu�G���+}��r�:��������\����.X5������w	�z�u�
q�)����*��F`��"�o����p� ���O@��D���' �H�!�%@>]���/�6�<V���}���֩Ȳ9��K�
��[��4�]�f��&�ܠT�։�,��}�i;�0x�8��
-�h�
��
- �~�h�� tb
-2k
�`�Q[�4�.�Q0!V��\�zb6��<j�� ��5˵�K�UKh�
-�=@��u�1
C��t�E���-��Fg^���7�QY+���g{,ő�}!�����CG���/)Ld��T
0�MF�0e��L?{*�3�@,[�~�
@�w@���ה�
z�|~����t��`'T��Ni?���}nq�e��u���5������[���-Gt��ć2�	Y_�M�.y���������X�� 
�p�C�r�
-`�tb����%^	���"`^�9`N���\��h�����ÁG�
-��l��7��J���8:�y9�
^��ZҖ=�2�1�Y�<��w���v��_�5�
��p]·H� :M���OvW-�Wci�Cxx�W�Ѷ�39p���}'�k��w�������u707�r��
-��?��}�"�B�Gs�F
��'?��㯸�?�
�}_�����)�&� r����8�@0�
D�
I��U��
����a�_������s;vֹl�Lb�\�T��›e�o�6��M����
���m�Un�_�7@|<����{Ό�$���H���q�@�*�dc$�B\}�@BP�zW� �6S�a�N�	�o��eE
�TF�N����28�=������%�~C������Qu?������n@�N8Pl��Ur�
P�P|g�B�JZ)ŕ7@�"P�V'=�Nf���ni��,J��(Ů��L��5��������_���_���:�'��f6$��Cn��1�VS ^�K@=�>���POY��LhHxY�w[���<2��{�&͔�j��t�C�8�,�����_��z_��?>�����'����/�[0��͝J��T��	G`<)� �K`�
0�+ �e;�_��l�H����l1{g��m̈�k~G�/\��?���O��i~<�N�6��-bs�?��u�\m����Evh�Lm�g�8�ڤo�e
��8~�_h������
|�a����ʡ�t���Я�x#�"z	v�s<9�t0'G}7������S�����<��5�����8�N�B[�y��ijG�i̒�Mg:PO�����'D=���q3�F���K�x�

-��^��D���������SO��'��[��X{5����ofJ4Y�^�t��n������J�<��xf�ޣe���.����}A�Z��u�S{�X�c�g��T�k��λ�/w��N�=v���,�^Z��5CaU�ʴ�(�n�A���Ǻ�GO�6�+�.��Οuy4=�^��|�t
o�`�,ɨw���nW=�;�����q�+�����EO'��2�:6���ڈ�ճ!n/h=�_t�Tg�국�U�U�c
�+�
���+��eO �_��W��7w�k]�,����PV�i�B�h��ȿ��G��;h�ʹf�%�\z3��]�
��d������>��=�n2*��w=�
�z��N�vy���Ģ;�|n�*-�ͱ����E�*1alEFPO-��u
�
-����Ru���uu�t;���0��>G�_9�7w5b�]���Ǫyݞ*�^�Z
g��h�HD�J��^-�E�TJ��
�������]J�}�
-�В��Á�/���~#��An
Q�
q�==_]��e+��r�p��
<�7p�w?Ip���k�Qh�to�Dw���V��]�LL8O.�<7��� ���q����>���w��!?���<���9��^9b�@=_n�
}
r�PJ�Mk�e���q��3�>�մNƣT�p=:��O}��r2�5�~}��M����>�
��[C\%ְ��o�@�
*��q�ǠZ�rv)�qx���]%&v�̦�kg����'wcWy_��{\�u�O�r���X��N7��{��IW�����L���Z����>���n�5y|�06���w�v2L�Kc;6�U��ܔI��-F�[*\;e/?�I�+��_�nlw�i
���E�i�[�r��Z/$%7J�{'�DZװ��ױf�h������nr��Ɉ��K�OZOо��Í��B���*��ڪڎji|�ѳk�D��pT��<
<�l�;�2(�.n�wۈ�]V6��o'�O�Av�;S��Nl�K}�(fh]t�{�l#J�S���
{��'H���
BU��ն�*�F�Ǿ�J8��E4)Bq͆.�{X {����H���$���Tm|��ZB�QY�L<�O�(8l���F>��c��G<��.�����It;����$���=���T��.����”ŏ�D�<V��ԕAmi+�v���ֻ {�K�~�#1hm&.����SYJ�,���N��
���*�?h!�Yl-S�Z����U��^< �S��n�r����쮸���gF2�Y����y��Vϋ'��N'�}�W�/��eϬ��Y��I�ӣ��pȋaf�6ӳ%D>���~���6���4��q��^�'�m5KYֲ�
k�E�y���4��W{6!�Y���yt��C{��VL���k��}M�Թ��M���k�
����q�K��|!.?�Ux���\q'HT���A��'�ޛ�GS�ӥ
�^���Z��f
�v�q�[�~��
�o(�au�O��Ny~�LyUY��^�nTMʌ�GZ��g�
-�
x��}�f��� }�r�i��+Y�E4�dO����br2��0�����7k}έ'?8ۚ��寷L�|<1N�CB�iw_i,^[Ta}�
�dAK�9����QԮ%���������L����
�b�/*��ے{,�O�Ǭ��O�vԮ'ɥ��hZ��	T)]�E5\	r�8�±�<���Imz��{4��FԤ�ͩ\2�Q�y!��B���{^���bg��#���j8����e8O���&ª����;,vtT�7#hj�dX���[��9sB�E���[����a��ԧua/���dq�ַ|-,Y�2��x�n��W�F��ɦ�
b�ΆDq�X�a��񝜾��ט���[Ǝa�b5�X��{q�6��;j����G��t<q��#�
G ��ڨ�唗ZR/�3���8Y�g���N�'d�f��������k��BviL�z�3��s�Yt����%Ω���3�+d��p��u!��Xݬ�Z��b�h3�)�6r�JH2}�7�8�tE� J�2 efC��K��&U� [...]
�"Rm��j��K�!.�H����;� �
|��hD� m�{ mW� ��v�<@���5�����(�Q�	�m���4�rr������L��܊b����wAE�[R�kQ�'K�������g�6�@[
�Z�jȣ	�H��l����e3���
@ϧ@/�� {
`h6O
!�7xͩJ #��Hs�W�Sg}�4��o-���}��=K�v�rsr�fmI�bWo
�enV9[j�7ŦA�BƩ9!��
��N]���M�vu�%ϟ����V��byXUG!��j�я 6�L 6d� kl kvK k5� +�E���T� d�%5�A�D�_�qf0�W_���j{�H�F�-O뉉3(H�%�ܣ��"S��"�Z��6B�ֵ2%�
pBj���V}����np��w)p�~�d�
J�o���p�Z8����q
`�r����A���y*��|0��l�Q��W	K.�ًy
'ګ�wV�}�\�
vp��T���
-�
�[̬t&J>��@�C�_fc���S��
-��Q�
�\�o�:�:�]���'��
�E��g�7r�a�Y���]�Z,��U(���ln3iٙ�'�]yJ}�v����T
��
-����8
E�YRZ�O\�
�(��s@��	 �
-�Z�+@��5 j��G��un
�� 1�ѐ�yMw�C":����;�H��p�Y@�~=R:�J�m���|��t�->��{WE;ZM�g_wTr��JKhn1��&&%�#obe��ֽ3���������������	�rd�zC�i�E���B�>q�b󹇗LG
 u3HCRdQ@�.<��W�ϰF���/dwE�s�L��R�"Hf#�}��n��Y��
�[����f>�%�=
�����[2�ڳz�ʾ j���Qx�X}P�#��aB
���:�x([��oPʺ(�
�!mxV�S
�miVl�	�J
-�\���={�b��"+eW�&��&�C��2s�yz4���+� ma=J`��H�
�q{zxzv�{�̉*KC���\
-��*� Q�w
j��
�5�f�
-h)�4%��:mx��>�����\��[Ys��`:���(2��_ES��pv��M�&p��	R���<
����� �Mؿm��ԉM��
�ʀ�U�LH
������1G�`�<��𹷚)�Z�Io.�ї`Du
-�����3�7�N�\;�y��U/˺FbcJ��
�%F3J9Hu<y$���s��?P�~<�\�n�?
�Jl�
���{p
]
Z����WV��� ��;���-9���װ3VL���M^ZJp>����}����!:	��18�]�'�0'x/�5���*�
� ���u)�F���@���y�h��K
�cc1��m�7
�n���|~��t
->G���f�_,�6�[�;B��c9�T�$ �JW���fc$p���m��7�Qp�kz��'�|���!w vu��>
�j��V��/�� f�*��Di�����<�a���,�A�t^�� ����m�{[�!�N���F�{�%�~�w�k��7��l��ꋯ��'�w��A���
S��@^�@
Fo ���ǵ�'Mȝg)MǙ�e���y8��a��l�	C���#q��
����'��OH�g6�GE�����'
�7��~%���ܿ�wO;��7
P�E Tc����j=*֍+u�m�%;̰�G�}'�������?���������������l�(���l�
-�e�~�n�5��KS`0��l}<C�1f���i�T����n( �E�ê�F�(�gG�.nXz�:��3�5���	5@���	Iy��j	/J�4��ö�w�a�5�[���h�\��w�k
4L��L{�{�<r{U������[�Ep
��
eMnz��3�V�`v���
�n�n�~�f�J����5��mgH���hxͯ&I��M�RÜ��ny�W��|�}o2볺KDq���1�Hp~����|�.�2�����������~���o���k?����{��o���w�������O{���
m�'������^���wG�� `x��om�wvL
��p���O
�f)Ma0��>}��څ傿�(�K�T��R�Ґ*	≎U�<k�̔��Eu�V�d����
��BaWn�=ȹ/Pi��Yc�Yz�|♃k)��6�t��,�`��'�n���CGʹh�O8R��١{v��ͅ:��y����V�dZ����*���e�bE������Q&R�㾂_'��i��
��UZl�`�b&�a��|3‶}m��ތG�C]�������t�t)�t�:��;2_�
ɰ{�
���_�I�
-�KI�3����������w��$9E|R�
*ОԷ���\���i�ް�
�.�FMZ��Y�
z���isuHSw�s���ϐ-[�Ki��ک��;2������)�����mr��w���X���u�+��F����b�
<>#��.�l���J
I为<^�p/�F���޻��#���r�3(�۬/���݂᤻쎑tg
t	����yJ��B�[H"�X���bM��`���m?���
L�~�6��gh�O[�.,�v��ϰ
t1��J
�_=o��{�P���y@I���g*���41ϫ
z}��.�=�i�nL�X��X��g@;r�}�Y�高��kνF|����^
�vi~�8�o��anS���>/�|+ ��y�#���>>O���*4�t;�he���H�]�,�p����Hݧf�fu�率xɧj��3��]��
~��&
����������,/�	�y:IF�
�y�������{�)���W�=�
��3��34979���ڿ*ۀ3���vfN��3
��R����TR	w\{�5�C��t��lG@@D?O���DPQ�K�wSQ�����Tk����"�S�A�ץ��I�/�_,�X~��b�����/�_,�X~��b�����/�_,�ci
���%�R����57�S)����/�_,ԇ#�Jig?���Cv�|ּ�>G�Z���.��p�N�X��I
�6�k��b������þ��|����2dzע���A��[�<C��T�
X�\b�r)�"-�e{�r�N*ӘVL��G���\2�
i��9�CK�踤������/����ށ��V
O$��]"�}D+�����ct�M�gc��.��f9;ͅ��>>&���$�
����K�03U���"#��� �ߩ8쬼�	���"�\o
����5;�
-Ή�����Z��R~��� �VK����g����wY_�X~����lf��u�b/�x���w\�Cm�K
��
��Ur�h�f�P'���\7i�6nEz
˗���5"�8.�1՗
f�	���5�/�Q�oƒÚ�d�Wpq�@�f����z���,�
�N�
�]��d-z>�ͦMc���IA~L�l;��&�_�I��t�#���N�7��V�/�_,�
,�K�Z
~Ԅ���@+�]���hG

Jo�:/E��*��BK���g��g#ɞ ��:kA�Q5��[-V
-�J�J�~ů�b����+~�v�Bԩ
'__r��)�h����7�e�!���	;#_�u�i��)�3�j__6��խ��b �T��@h��d����AT�-n�2yö�
	���U�O��cX�ʊzEu���������ba}8��Q�kr��ڡ��%���$�.D[��I�p��8F�V�6y�~
`kSN�1��bg5��+�BJ�Qޟ/�~B��`u�oC4��B�O9:�UI��c%
�� ��/B�t
-�ې�*f�t>�
�b��J9 Bg
��g��"Q�B��P�
�	ya���K��ƏQ�X���ח
1�2�+OG�}�c�`UR��N��>�V{0�
b�x�+����ڪhx��Ç�/����ba��Y��=òN�*s����
�nm
�̾�nK#�&�Y
Ov��).-!p�4;k���h�	�l$..��y��T��ߛK*� \�>!
-^0
jCᡰ��TB0��/�Ƶ<;sZ4Z)�
-lIlf\�+�&�\[�3����
R�f��z��N�;K�Do���z=� ������d��l�L�ȍ���v�����7:̠
X�-]+�DJy�fZ*�����X��X�q�~)�fh-�l7J尫Nyny�y��*��1����+ 
��v�
sX��WG$�A��L1^�p�"Z�ɑ�����Ѕ�"��'�A,jrE����B������
�7�G<C
~�±���gCV����w����D6��������]J��7�� �a�j��)��*�v�����>�
(�
�Y�
�3�;{2j�Ks��
�-��ẌLӑJ�
/����י��z����
�3cJ}�{f�{��a�n�2$R܅��L�Rh�.[���9x!d1����d3
~���2��7c�>�;sT�U�zB���2̬��{o���c��_T5�
-�U�JI	i�0l�з6s�B�l�"7,�5B���6D�
���MS��v��Z%��&���˿n:[?#>4z���%�?�B��f~�<+��I.��DS�XT7����2�+�[�.��-Z	�B�D�B"�����
w��O>����#�=,(�ɰ00�����n�&_�
�H(�m���'\��}���H'��}��>��x�� �"�����c�ё�����`T���5[�͛ B�FȆ+��O�Cy��(T| �Vu�}n	�Xe��Ο�D����#���a)���fJ/��
}X��X
4Н+qΡ�&��SzQw5�풠
<J*���;����&_u&m\^�F<�k�Q
�;��P�U���(�r���K�
�l�y�N'S�a5��QQ��_�o~��

�\�F\����2�ْ]���ھ�����X7�fH�g$R�R��4Q'�Ώ6"ƕ�C�:I7__p�/��~f{��Au�|s�p)`l�f��r%h-o��@�Ը�/��2�K���Q��x��������(yƣ/A��T
-[��B���
�\���U�Q�Vs����HIQ�i�H�+^��Y�Y5	&
��>�F��G
d�
����s����:�<��(C���T�4hY��A8r�Á�X,;�����+|c�c~�p
�1ۗ�c���)��j�Y1&O�ȻR?b���@�T�#�𼜅�*x5�	���èG=Nƃ)'Ł�1‮�#��81-
tF\�j�$ق�t�nH��<3Sl(v���;6�����
�����V�
�Q�%�TJ/w
���&-�V	:B��
$ �4�8砪���`�����Q;@���
�
-93J"W�v�:ٗ�St}�ܺ�T�F��}5e�%T���B�Pov{�F�9D5�6�������k�����H�V�en��fKp��
7�{0��\��^,�K�$'�zr�"]`�Y"�q����&7%�&y,�ad3�<SL�E]�R�I���d{~	�b@���/���S��2ƍR*�W��.'�)�-��@�(��%B�(�8�q5	V�
���s�n���sB�qDr��j��<4�X��P�6)��\�Foª�XW8)	�EIJ{s����tR4�y�r��Q�C��
-�PW/e4<��=���K��#�8
c����8���z����~� 1�7w�+d�����`�� �`��Aᒉ&� 
�iDKrވ�ymM	ϗ2'7��#��R�OZqS���<�����~�/�Mue'|�XD��خ ISw(���nRN�,7v�P�"�{Sab��.�8f
)b�D��8>��&��!�a
��cߏ���i�8��6�rP�����O�ff�D��<k�i�Fp��f���RW�s���H��=I��v$�=Ϲ(���6���Z<{b��k<�w�„i�R�k������
-h5��n��xG����	<��ǂ�g����C�qڛm��s{(;k4V�F��X0���*/r�1ԩp'arh|l0u�QIziU}�)-ʇ+�sø�S��_�b>��2��\��
'H	�(�C���b#L�lB{e{����`�#�b0�`
/i�
8��ݒ��㹔IOHC�Q�f�Q
u�`fe{���֔'�a�J��Y	��Lmݰ_�b$e�l�n�A�Z�r9��@ A>֔ ��2
ܓ�6�@;9��=�b(aaZF:��CR�9HJ��V})
��n�7��M�P�u�}25jS���+�����cͶ�$-C�E�Jc���$��9j	ʼn#d�=�I��>C�]�X��u��g�o��9����umnn��@�>n�
2�ߔ����+�:��4w2�P
�P�Cخ�EԔ�� �Jz?���R�
-��3׺�@��bl3w_�aJ��9a���uA�/�8�]W at e竵�$UlO��v:�|q���O�i�	�r�.�7)�{��q��V��7�O�)7:�NHI�U��׃4br�y�jƊx�ŕ�����q��I��A�
�#�p�=�z�E�7�׿=�ʹeU
���ggx�X�VO����OF�
q��~�:
�V�Y�.B�'��ֶ�~U����^S:�Cr�T�l�H���T�>G]U����N�#!��Oٽ�e�~�W(9�
-w)Mxza��{mp 1��͡z����

��b��'j�('�Η�:ٲ�`7�@�Y�ف�g�"#����
2�N̸"���]��7'H���'*d	V��.�z;AIC^�]c`:�������qUS��/�)s��
-��EMvTM~�`b���~�W�by��Ӂt�������6L�
�W����0%Cܖ���@u��fo���FN�/�V�R�N0΅���r�&Hpje�;Jy���ؚ�ae�~y��0S�*�U�n
��P� �|��Ub;.��a���ڍC�K����E��Ѵ�s�3T�y�
`(��-�L�]z�kמ��nS�s��?I��fƓ��P�c��Q�*6v�\�
-v�
Ⲹ��Ү�yV� �)�i��9�ɐĬ._Mg�6����w퇆������������x��K�)��oMZ�͍�K�J)]ڋ��u
g��o�5>ٶ��ZD�焢�!�r���:N.P�U���9�P��5�չa
孛��QR�
6�#�
�gs�\�)E� �kb��]W��9N�ϼ2��<���M\J�CV�$I�ux�K�=�$$CB��8 ����W��Μt|���%ԃV�{%���F8��~�� e�5[\��<NB��8Ĭ��9�r��U���1G+=y�1��ub�|�����_�v|��G�˧�ۻ����*�l;f%���<n�~ȭ�rE�Wz�;�ǝ@�u�q���E�ZP
����
Q���PqF)�ŕ�3OmPRD�5A���
-UcJ�yFZ:���cqC�_j��ߵ�eom9�Lk98�$'O�U�KZ��������
 �bn�Z��AL�dD�� ����?�'z�٦��]���j���
-�ur����Z�
�yL|��Ϥ�-
��\úݏ�
_�w�_,M,��d�
�*g/�x��4Gv�!�ŭ�Qw
]�5���	�R�"��?B����
 
�l��&�^}\^Q2� �i��w5�3�~|j*
IOǦ���'�
4�2�,���M�Qr���jC_|��35t�0�i�N�Yw�i�V9'Y��S�.���\�o�˶�rLt�J�)C:9�mg;I
o�Sw��V�5��*|�_|5�b��b�7��y�6�!��E��&���7\1��QO>牷ž������
��+9�F4����CP0�Oy�����M�

-TCD�R��n�6㖺R�M�x<®h"u�a�2�&B��&I�ixۓ8�9�$;��Ǝ�Ôv��bB�1�����צ�-����uh[�H	�X�x��I����w��Z�
-�i��Yԓn~p��Ԅ:��\��kϕ��ێ�	+����X��h/�?�-��,/��7�W�'�`��=�B��w��>8O*�[��4K�+��O
-���s�
�7��g 'v,�q<�Q�{
-�t�Z�ԙ`���3\u�ڧ�8��=�
�};�3)�q6`W�S&"O����ID
��F�a�l�Bʚc�Szқ���SX���S[�k�Y^�[V
vM�ŗ�*>ł�6��6t:O�^0�r�g�p
�
-�c�T���:����MXN>gh������i�:�2$�
쩮�_OL:�L�z�3�@�؛�a-C3n2��΁�W�!ʄ�� ����]���T
�"Cv.
~+�Ӕ��D5�^%W'�,
�sVn**�G��	����}�׺S��'��'�
o���Ȭ�~���)�\���
&'v�Ȑ�ڴnL�qY�.Q��3P�b��0#t9�?f��b����¢��WU?��t�ϩ�8�<u'��"?���"I{��e��
�
n>{m��_
�u��#�T~��霜`n�%\�LWn�r
%�;��VϢ ����v�-���lM�P��K_a���D�ދ[��8�h3&̤�hv��i��b�-�{KK��ض'OҠ�X�{��ҎM�p�3���mLx��&
j����
-���_m�X~��C���IrZ�~t3�bG���>>�A߅v2���[�^���M����²�A�{���d�(��FO��܌�z$�%!�NnG5B©1NN�ɇP���<�+��N٘繶w
�W��'�#S�8U	�]�g�9� �e�6����v���6w���6?�P>��������V�
�V�9d_
�3{
�P���J���埃��l.��q��|��ձQ�?[�l�d�[#���Vn{J�rz�G�k/�����K�--d�ZMk�f�k��
�Y�|�,6N�{�kX�Wm�Z(�����0(bʹz��T����}/tBǭ���<Z�f�t�[K�6��S�4K���J���b�}��D����/�_,�X�WGU���C�>����q���r�v�T� �ʅ�U�9J�`ɨj���w
�i�k��
�U������,N(9���ug���(���&���@j3�FFS��D�9��:}��2��kˉ���3�?�;�
���Y
;��Q�R�v����q���ɏzm��l�R*���g��/�_,=,��s���6�]-z�^:o�U���f�l�D�I�m�K� t=��s��"P���˕��:nmW�CO��^�A���GH�&C*�؜s����v�F�q)>
#nu��K�N��+��/��4��ɯ"r9o��X�?��/�k���ߠ
��h#i��O|?�ng�˟�i?_mf��H�M
����cN��������
]�F�����1G��t���&��
>������
h|������h���.���<��Q�&���*g=�p*��z2�����M>|�N\xšw#�]�a��g|�b���o҇���
>g�f���[��%�H�sa�}V���I�d�,8�r�6�����I^⟽��cD#�}�
IW/KC��q����h�2$>�2c^`*�g�j���Z��FJo���k���M[C
E��69���X�pP��罦+�	oZ�yty�-]

�
Cu|b�
����I�]>����
|S��iZ
5�?U��Q�#��M�2��5LGY[�>��
�:4�c�:
�]��FF��M&�5��2$�%�ق�G��J5���it��4Ɠ���U�G�]ؗY�d����#��fk�}f��#�r���-r��-���r�8�g�
@6�f�jڰ�w3���Z���E7�Җ
A;��ci���@=�3��tש
�b���ߘv�ֱ�G�
�0��S��S�u6��
�S0��9���lLs������#��:'��	�	(D��i;�����73�%���Đfm[�`�0C0�@���"@�i���g�O��� ^1꠰�F�̽�G,�@6�ى�
�h|@�:>;��Ύ�s��?
�9{L�FU�9����� �-'�HI5�GjV�����V�w��Dk��ID�Z�2����)u���>>�&�=ؑ�T���
A�2$1�Q{+��O�e���7C�
�
��L�
5D��>��́��~�9��
�W-
�X�X��IlE�	:����vQDj�˕KJ�L��~���I��hZE�t�V<3\�>�bKg��c~}|v:�ج��;B��N�\22�X���7qȩYS<����ON��z�f#�~4���7fɎ�xl�m“g�э3�|�v^r�N4USX}�!��b<�Ff U�%�
�{�{no��&�zI
c���X���ylu^9��4vKV�2�z��7󪷀�+:���@���!]| 9fO��>yL���07�Z�0פ��Z~�7j��p�[2�o�wr
�`��No
��Փ�����A6#R0���
�M��9���ʣ���ԛ"�vu'Ch"��|����X�X�0�
�:>�h��=����|I
���
��c�zJ�>|�f�4���`M�hm T,7c�T�`�i#�F�hx[��S849lR�g�)#�O8t�S8��~G6���Ht��Lp���t�C+�=ܘa.GgWDz�m|L�X�2���2�|k�o�0�7�"
-���
��z1�]�n/~�o:O�x���
���=�]��}��&�1�b9$�݃��p,�8���72�i��
�%�9 ��Bt�&���V��(`Ĩ,�m6��.s���m ��������Q=>�:)�����2�$=;��
J?r
c�D����`M1��DX���@G����N
r��
��X93��X�s�
��)!F@~���zJ�`ZϖEG����T�kb$Io�7r��
��X�1��J�&��������p�AR %��N
sVI�A�d%�X��;|
2 }��c!f�x������ ����w��x�d�E�[ːX�W��u���1 8
r�����C�O��y"�He���2{`m�Z#����Z�$�� �%����\ˈ\j��+�
�F+u�ʌ*�:A�
-�V��
!
R}[��f�Y<�`�F���麂֔�����Z�!� �
�� C��
�Jѹ=�

�t,��,R�U��%�Mrf-��{��ͨ��
�� ݭ
#�X�uJ��2,P��1GJS6\�I�q}d*��I?�q�z�H�Yz2ճ:�N������Q�m�I�v�
�vq�
 0��ޛe���j^��`I&�1R߶Y]qcH��!tc�B��H
�)���� ��t�}�-� ���h
�\��
v��Џ(5���=@��L�'YN���/����l
��V�Ė�v̼
-��\1�İE�`ٛ�!
$
}J)�� �M	�9r�S���!�B
$���J�
�,
�?S��uԳ�ec`@S>
=�d�5�xŠY��<lY��`)�K����yݐ�fc<n�M$����<�����k!�r���^�'vס�l����Q���vMr�h�cio
��m#�r�������c��՘k}
��\v|x��l�����[~Ƚ�`r0����	̠)]�
@�/�<녞�~tm
�� �;�n0�H-H����,>
���
w1
-��u��!�
oj��/�V �q)g�.F���'������=�
3�^�3���� �B��dOU��? j���`�}u���$�:6
-��Z����6@��`�G�z�2ޥ3ہ!C<|?Z1�{�ڍ{��$r���Q�_�ꌨ�c����{i
�ܻ +ו6><��X
�vOυ(�ʧ��Ѹ7�,	z�y	:3׸�25�����}��9�.F���3
��U���o�����Y�y�:��(	�
8�6o�n�A��1��=Z��:�ԕs w�i;�c����T)�y\���"�m�tP��&mw�X�;�m;Sl��M�Ĵ�N�L��u|�١�#�	�2gW�߬�l-�x�w56���B�� ����Z|.C�>�8‘nbR��X��\ k P=
-��\hDj�0dC���y�6|2z��R�����9��
�
M�!������
((u|�[��H���L�B
>�&��8W׈{|X�,�J���c5�шk�

�e�K[ ��+�r��l�9X/�3�-�þ���
��
h�r��z�FD�t:>r�t�q���ౙs
��G��ƭtcV�
-{��
1a4	�YE��D`�����#�Z��]�slȟ�^
9C�V2V�5Bw��I�/.�jҍ�'�R�޴^8�W��恕qm&��>�
�S�h
-��eU�y|���]ރ)ԡ����� ��l]ׯS!������s`j�d��5�����*��#���L$���Kb
�ke�7o�u#��Z�X,��
l��RQ�"G
-�۟
$��c�
P���cq���
��z֑D-��T
�0���b�M�F0���θCkw�,`VRh
�M�Wnv���,��\2Q{[QO>�I#��<��bY�
��H��|�
��n���N0\�M	L����kq�
��]�D�m˔�4�-L�ӭ��Y��i��/��K
-��p�q�������3>�d6�~�xr�lv
-�
�Z/`��Q��3ijY��Tլ�OX�Z��(n���_3;x$u"G<=� 
��)� mz(KM�lZҒ�@~�Zj�a�2 s��r=j&l
��α
��4�6�VG����;�
-#��7�>\��F<ˏ����U
9؁pi�a[�c�"��o�8Ë���X��
-��&
/�H�����(a��r
�k����<�AAba
;�
b �ۂX���U7��h2Sh2g#�eQO���8�X�7�Ot�ߝ�]� Ε5>�&?�H���e}�5���
����PE�3J�';�������VmЉ�q�u5Ȏ S"�!}3ϤA
�93u�H�.�������Yc�m�0���l�C�db��?���&R
椵hu*ѭ��IӔ©��ƕ����Ҵ�G._�X�T�u+wCq�����
����p�ćy�#���
-�X~�S�O�M�p{��Ib�O�������h�VD�5m���1��*��L�h��,`4��n(��Ĕ�T�t�#���i���a�_����6�&'�l�n AM�M������K<����4M�E6�-�%.���9s�8Wy��i��{RN�C#e� 쐓��.�3�
��&�,~���I�[華��o��5f��w�K)0���?�s���͡���������df`Y����������<����ng
-�}�k4{���5G����
 �.=j�Ϻ�"���񙿯xL���`�����0;��Z���]0�R)|p��fVc
�9	F!%��0(��9l\�>4��k�q-Ҍ/
�Kz��Mf�wiRNQS� �B�G��e��#����?_�Lנ�y�x*�Il���W��oK��y:qwOM���8ܛF�Ѥ���$!���:��0e���q,Y���w�<�?k����7R
-
-
���6}n�ҐZVD
:���_Ф%�����LѮ
��sCg�[�MfH�ƟK��(������9K
�+@��Q���[�
-�`*�

������ ��C�	@�q��TN���":{�]�yG�e��'��^����Q
�h��\���|��G at 6>X���<Bl	8�syY����՝�.>��
���M���z�kɫ�Џd;:�c�a�&1�*��b�V��Ќ�
/k,w8��m3�
c�%����nF�� �dd<�atG1�[����� �fF��c�
3�
��<�I"xj{7����T����AǼ���1:�QMk��u�PÉ@}���t�\a_�x��b��:���6G�}d�?:GB�i#���W��v�%�[��ޯn��0 /JS�+?0CM��d��G2�՞�әY-�5c�cMȍQ�r7
�<��	�5��nfQKl%�j ��c
Sw�����`l@ݯ���s�Xl���~��x����3-nN��dz?�8��t��g��~�'�������j��Pm�`:�˃����
!w�n~6]]�*��~s��{l���|3�\f�ى�

���4-�kv:��/g�,����~��۬b��a3�? 
-l�њ:a����٬Fg���
��ӈ��x�lV�����zv�"�!�k
�����p���m\���6���2;���e�
mF�	� ��`�dO"
)�w���jg���,�/��d�Φ
\f0ݧ��z���`m�t��ft����Ӕ��X)�F��i�[��!��y�:�A����n�����4�9��hN�-'{0�ˍ�����V0�Uh4�a�F�&���7����@�&��t 3���,yZM����ZP�&���S��9v����]O�?����m��Y��L��ߟWi���C88\ ��F��x�Y]�#<o��I(6 �k��v��6�������)����<���]��K�)x�!�ȗ�V���[��#c at C�e�W!Y�l<t����V�:zP��x�����
{���F�y��̷^#&��Wh	�|����^�$|S:!���~�<�3>r�E�	�&�]V^ˆ!%����ֵ�
n��2m�_��V[�Fs�Z,/�)~�8�� =��.�ޟֹ��[�U����?|���r�o�y��Y����ݥ [...]
��o�
�R
�J%X}����������g�峷�ɀ��ߵ�	T�&��ub)^|/;i/��8�
-�d|{J�:�)T|�]���8 ���YdrڏG���?`�}�J�F�֤w���ri�YM�wR+m��A-����e�#���������z��.��@�f�
5�o� ���
+�{獵����
J��������B"Z��3B�M�n��DE
ߦ�f1��fK_�'�I��"��1����$IX]

Ho�b� EoJ at r���aD(�+�%�׍�e
��cO����Mi[�qo{�� Gvd��?o	V�s�V��p�I�`�6����w<�v�y����!�%::���l���2�Y�N��W7kPt{��97V�S�\[����.�ٟ�l>�n.�6	���Ͽ��ݟ��_��G�?����Ht
����Δʄ4�

A�O&�������-qF.y5	n1F׊����_݁����!���ϊ0�F6#�����~�v{�N��{�
�ū���Ķ���������n���$Y�ON���M�nB5hQ7��N�8I�'Z
��g��j ��nb��
�Ku�Y
`XIaz$�ص|K
-����b��7������O�~�Y������(
��-{z
-�� 
-6�
�ݞ�*��ͨ5
C�!��1�!o4���f���^��A���x೅j�h|�I�S�J`�c������8�r�q����iK����gEn��rdf�Qv
*�
h��yLW����<�R|m�A[�ms;;�m��m#�O��`;���I�|I�eH4aM��Z(=��-�h��bSu;~GP$�G�ө�0���'?�b�V��	��m����d=o��]y,G�xDn�h
�طYӂ���
SLn�xZph�-�_�~���R���L�M$��g��5a���lZ^�=��M�#�،G��T$��"�aٍ
֪+��ω�
Zj��T����¶H�c���X�Y����Q_yt$x���kT�F�(�O��
ف#�V=<=H}v㻚U�i� Q-;=�t�>�
7 ��j&���L� ֝�5}�9�!����Ae߹s��JE�l�j�d#�&-��2��"�-�))\�
�R���,B:>�͆&?�BT��69R��=+��(�X!�T���5���u-�oR��!=]�^�
�ˇ2�o����H�J��7� m`x-Zf!X��*�)��^�I�>'�T����B䭟>&�
��긳�h��E^��9��U)�%��5���+�!�Z�q�@
-�Ph{�^c\@�
8�Ӆ�i�X+"u��U
!-�h)�~��t���HK��m�r��5������B��R���H�����T��
ʣ��C���2�}��:����	 m0|_��#M���lY ������Sj�ܴ$�&>�8��
-�YF	��9HS��
q
�
�u
�cͥ
=
-iۨe���0�:�H�(�ۖ]�wiI�M+��\{��EZ��R�H���@��
V�
��c���9
�y��ҫ� �j�Y>�¨!:�8���
~�9��6
�}�H��Y�
ihg���X�X��
- M�a�)Ƌ�����`^�h?�\T �덆~���j�E
-(R0/�~k 8��,�]!�c�D.Ώ�[�K9M +�%�N��B:��XLc��6�HqI2e��t��0�e!�!gE1�=��0@8����6J!]{�,�ȼ� 7rk�mI3�CK�I��HD��vՂQ���J i�ž�D��D"
i(�c��(�dSyc�RE��p����ԉ(�T
- ��YH��hqI!��M��~��5�T��B�\�I`��s�'vU�B�b
��[����ӫZn�n���]̮Lt��߶�N`1�WO�%,�/&ȧ
]� Xra��x������BO#Xn�u
-=�ayy�M<�!<�Xq���=����E�iŪ
����A��	���Z��
X]~4�?�˱�Ur�T
-`i���9����
�XCBOsXS�=-`Mg"v��y	�(]=��?�^��x���z�s���A�֯�lBo���s�x:8YL��C����3���������
=�Z�eEF��do)��+A�Mu��gV����������S�$��2�UԦ���#rS*
$��e������O�S���֠�V �i(��
-�I@+o%�OГR}r�ܐv�&
\W���Z����o
��&�XԜ5Э�!������ �>T�4�1H�9h�t�Ϝw�4�0o]!ot�x����Ҽ
-�u������-1��Ia�JF�J",
���#u,����Gjo���*𩙥�Qh)�X:H�j
윑�!RB�A�I��6֩Z�| %��;R��P��ݐ&7
�*�һ>f��
c��$�����:�P��`!�+�+cVH��VA���/�j�Ӈ>�
��=F�.�[�H�N�BJXI��N1BZ�̪ҋR�o�:��#�WVK�$�����v�a�������Lg��.4�+��5���AChp�p�Q���a
Z���X��]��Ny�
W�aATh��`I�����x5LL}Ɓ �����F&�Q��
�'m?�h��==�z	��F��Q��1���24��-��9I0���B}��=I
Rkgy���
-�1x�;
�rԼ����dK
v��ҽ�@��J~P��H��L��N������w|%�
�!s|�G���=9/8���
��[�IS�o|��$�6L˂
���"�����
�
�l�?[���A��2�+
�[�g�#@���OQ��2��9>�Aw�s�
-���Ǵ爞6z`L,�ž7	8�$����e�
��X�B\�F/���zC�v⃢
�6�]���J����J�t�ZȒ�	�Ε��	
ͨ�1+���i�#��TN���G�&Gſ��	lv^7�DH~�l	�Ձ�C���y2�f���5&*n�	and�w�6�ilv����s_ɤ��
l|��Y�n;2��,ߍ�G	c~�_x��N���
����ѻL�
-,�.C��k4�lB��y��]`|LH)�F�T��=3�
��L]�A�-졃ݭW�)�9S�v���8>�#�
F��`T������-�9*h�$�*���7&��;MZF*MJp[���O���ȟ+0��u��O&:e�v<�N�{#�KJ���1y6@ϵJT�P>���3(��I�?j,���hP�b�f������ sC$�`sͱ�6�=��^�ܫ�b,��*�(���s	
Y��5��

-!��EZ�B��"%��ߠS�|%%*��
-v��+����M\��� �W
ev�c�-R6�/��u�dS{B��I�Ad,,��i`|
���+��<�
�떰+�o҄��
yP��6�
���K�,��q-C��8�d�=��`�
�lЛ�4���tӳ���0��N.U|�1ȣK��AJɝ��E). Hޗ�X�" X:�gZ� �Šy��8�6џi
-�5+{�ˇ��E��2>���
.�3��M,��Ǒ�hߋ��aqA'<W"�z��Y�z089�&.�o3L0Ҟz�l*�B!�C"�K�f�K�fY�k�!
�(x�r��%?�E���B�Z�54r^�88�
�
����H��
����x@�=���	Y2W�!���ÿ�@�8^��k2��F�JV�{��t�[��Ti[���o;�4B��!+�g&{��Bu��p��Aң�eo��+BD~
��
~�_B����u�ڑY����u�-˙�����< ��� ��_��<���!  Y��MZ��.
����W�c'�e50�^C;��b�7�g��f#
�]����ߘ	�,m%�w��U����_$�[0>�{Q&C����gM�e��}�^Bod�~<*�ۣC�B
� ���G 3����$
�-��q��V�'
�3>:�޶��~%�W��I9U[�ϡ��BW@�$0]
:�D�y��8�&ѪS�1w1�V�M�Pw�F�b�?A�$H�g��K�����(^�,��~x�ƞ��!�Ph62G��x�3˨��b�����"~]�9a�#!�����`h)T��*��ѳ���oRD����x������˛r[
A!�:ߗ"f��|b�]�ع}೦_R��Y{5�J��pX�� r����^

-<�~���#
x$�:��ؐ ��#���.ػ�H�4�wÑ"'����
Y_��c����X{!��'y7�$FS<��B`/��|s
-���E!���Dޏ���b �ww�.��8����v����=�ca��{!甇Ά�Q�n(�R'V��rvC��E+Bh/��x�{�<��
�W�k�R�	
b>R��

/i��<q~`o��"4��IwK�^�S�b/�`&R����)���u]��Gt�򐖜NIP5Yے5�jY�9�?Y�Hk�mK�2��
�����\ޞy���6�0A9D�奀z�w�Cb����OxWr[b�-	L at n�ϏX)>,=��i`$�%a�0�"d�({
�l�������L�y+Lq��4F��rzM�
U�/C�Z���q
�$�AG�b?ΡϠ#�TyC
�G
_��wr��3�l���ݗo�c%�,�N<��-��
::�l��s�
�t�l��ЉgБ�	?ϡϠ#O�C'�A��O�;9t̀d�< ��$���:�
��`�d�K��&t
>Eg���
�ڍ�=���$dۖ4Rb�%��u�L�d:���㜍�i�0�Ē�x�����D�=[���	�HȜ�<>���D�ui��&J;�ܩg�+Q~�F��K��;�O��{:_�5�iٵR�A�<�W��h'��
�����>�R�n�&�I
�!O��$z��7I���%�=
�I"
+ [...]
-����
-A�.�;��������C"9�t�(^:~���ÙU�/��3"�-o��&p�1Ѡ��2�$I�N��;ԉiRpgcd�I�s_��/����2N$����I
���NM�	&��i�/�:%_��$h���=�����G���9�/��<���(�s`Ol����L��g�?��[^&|z�
�=���b�� c:~�+"�@'F�ӓ�I�l����f
=�],_N��:K=7��<�΋��*+�ػ��v��
��Z*�4,v��L
��Y�
c�xczS��3L0������C�	'��ϒ��48 ���a��X(�6~bg���
��ěc��#3}�S��4��fA
eDq#����}�Y
���^�x@'������L����
��;49��%�<3tI&1��%�
�K7�ѩ��'>�
;�N2�^�Ȱ�$�G&pa{d`J��
�5����#cSy�*���Vz��$�##{
ȷͼ!�
�y��GF�}JD�<2����~
 ��Ȱ�{��'�I���[B�HHϑ%a����p�>�C��,gY���r��'n5�mp�g���咐:*�ް,�_^����N|h2	+4��{È�a�W'ps�kyuBB��]<˫�n,#mˊ�ݞ�����.P��,�\�
-[2R�>G��'FQڙ��pB��{���w��X>��5��|8z��##���p߉P}=��z��;�Y��{��d��ޔG��JI��Q>
;�&Q����4��-�p�g|Ҏu���2����$�\�+�v��Ib"(�yη������+��	Y�5��Ƴٗ�i<
@�!O��8ǾU�"���̺��?዁��
�͆��/�Q�ذ��Ka97N��'��HM�
�/�1��d�3kQ�6
{�6�Do5�†
� ���W�$6�����s6l����#Q�'���\�H�R�o ��D��$�O3RG����R	�|gFj����d�~
ߐ�jQߒ�
-�%#��yF*��T��&l
�Q�]O�_c1�ȥ�"AFw
�͆��
�o���Ѷ��J*
�.��T�W��~*
W�?�
v��T8;�Gp�<��U��j�+���}��w��%��Q����B��ۀ�����fѓŎ�׌p2uAޤôٗ

9'n�`Υ��Z�k�a6z�d��'7��ĺ��J
�Ca�7{��c�a��\d�*,S���Ɓ\��Y�h�Ҕ��~�i�����~+�v1�1;p`���EmF���Nś�鑡kq��Z�d���S��wv֨���rqڱ��ʰ��>Ē��FA�
u��vN%#1����Kv�;��&��6�+��X"yg~yO��Z9\�!eg�|�z�>V�
_��?坵���-0F,
;٭�ΰC���X�H4�.�y��J�.2JA����.D^T,�N��լY��j$��n�xש�v2��.*gR *���v��`M�܄\�
U�ƺ�mT�򴈙T"!�BlI�e�qn{!��]����x�ױ
-��ط��ha�\���
_���|o%9��{�
W�(^φ���v��+�0��DJ�������Xרq@�$�V>/6"<>F
+�]j�NA�RgD*�y}���l��H����Υ#��3���z.ݷ�0��t|v �{c6������t|C��<��l:� �{��۲�$�u��l:	^�7d��A��\߻!D,��/��?F�'�t|�4�uޗM�g7�{�;���r���v6
_.
;g���t|�t��\}+����w6
�ft?Mx[6
_�x�a~�MǗK'Z1�[�tB��{���@qNx�M�ŎTyW6��)&%�N2�~�M�e����n���K�4���l:>��/�ͦ��	

{���tBqJ�ͦ�^ߛM�7 �۳��f���yk6�3�R�
/e����ߛM�7 �;���R���-�)dž�3'yG�bp������2�R����v��zu���ի�V'�]H���ʶzf�a:-�&Ë-���
��=�D+q�8��DڋU�{V���%£(�)av~�K��x�Y�trJ�0��M� [...]
�

(�U �|+���Kܻ_���N���i9�����gI�3N 0I%�������%	3���OJb^�;��y
I�D�ƞe�S~���
cE�|73���
-���U0��
?���^��.%���:���p~|�KB��-$��%20�G$d�XU�
�^��
l�>p�o,���Pb��'������r��Ɔ��^�ƿW�7��1�*���R��|�����R�퇑\����TL	#1���
-w��j��8~3��!ǀr�$%]zb�EA��w۾�XkQH�����3��LB��7$�6ŽYRc�8�I�e��	8?O�m>����vNp�H�<��k&x�k`�T]|�1!q&.Ȇ�����D�b-�iLR��4�1�yǹ�Ob�
����Nn�7��`�&����O��n���$!�π�+�$���z��WtJ��~Q1$�ؘs�J����mM�•�^�q���﬇��
�����y��u5��
�Q|O�k��t�$�R^k �
-��YQ��m�
A������ޠ#���w�OΝO'�EE%�e<m��W�a�ab������g��<��ԩY���1R�Ng
rb䉳�)�^>�_�̇;]�&v
q2r��f]��:���z
��vG,���´_X��BU�ڒL��NY�id�ͽ[�JC�LM;+�3�|8w*xTm�#e����2D��]@����s*U����@
-���H¡?ۅ�&�aC�
�̴��P�I
iN#��t���pa���{�cVg�z�5�Xg��Ү���F��Sy�'Zŧ�
Kj�Q�$L�����
7��v��:��IPF>6:A��
�HA�9��\��^Ŭ���}|2$R��'��Y�Lj�/�����.��,`�p��x�j�q$Z�E�'�/�"�N��U������kYi�M���֓�(�g�=p|Ocҟ���,`��
qZ�]�fc�%IM|)JK�_|"U���pcc�Šv&���;L��u�/�`���u� �
�P��։���ʟ����k��)�Ϯ�&r E
�2)>a����N�r�L����_��k�1fЈ�{�3�
������ﳑ�6�����?R�-"Q7/: ���'v��N;�q��}`��a;���J�n�ۤ��L|/�����9Vc�{
��g~�)��=��qF�����jT3lj����S9�ּ����/�3xOԑ��:?��L���N�|U��b� ���%Q�i.�+{ϝ#$(����(&���H��(՘��&-
Pj��O� ������,)
Pj��GY�Rs ��wϲ �� J��*8C�r Eb$dJ���c%H�9�������6$|�&�X��ꅢ|?��&�(-��X���,���|L/�D��rQ>A9�֢|̓��VQ>��Q���3��*�����ҋ�=9߇��]ug�7��
-\�wC}��w�ҫ�� ��Q�O<+���P������	����~�U���)=��'�n�����g���4�v7�p]��+ߔ
���'��_��'^Տϲ�N]��fr�V�O��@T��Ty���x���+������y]��hU?Vu�o���
����~���u�c�[�O�{	�����ot��؋u�B���~4��Gu��C�d/�bu�^���~]�Gt_U����c���"\�ﵺ~BPh���Γ�	�u~^�O<
�u
ͷ���[j�X�����'���Z]��'�o��'
p��\��������������
-�n���~�������,4ZU���t���z|��{x@!���P׏/��a��5���~�X�����σ�.�w��q•U��3�������"Ǿ_�O�6��~AѪ~���{�2
ވ����������u�x�_4Ş���~�n��i]?Q�:+�������#C�S�O\��ͬ�F]?�4ɇC�g���f�>����dx�
�[���g�J�����Z2<ӧ���~��9��~,,߮��bCVU?�
�n]?�@�[=��9m?���C���<ѫ�}�oɤ��]v���~�U��Y���y��'x���u�hXx��qrE�Y�OH�Rvd�u��b)}��u��T���(~���xB�S��%!��+�Ӻ~�U���߭�'�90����av��h����@�
숏��w���^3۵
~����-F$.2�Ӂ���S�=؞��2��$ 2�)P#�.v�\݀Q/f��)XY��&bq7�VMP'��|���V��ȇA-�� ���Z�M�ψ�<z
~_�m���{,���{e�����l9���UK�=F,�. [...]
�T�)����!Լ٥�3L'�ɍѶ�V��"��"H(F'���q=bC_w:����u-�ߦ	cx4���$�%���Y�w�a檜�<»�B3�9�I,c��k@�������&&�0J�
����>mhQZUY:%.j��_�ˍfMf��媸�,Gu�0�-#7��v[�Brc�6���VJ�?*�HGG7���Jxj���)�,���[��8�Aؗ�����ּ|�
,�b�G¬��k��xצ�l/�5��?�H�R�>gz�F
-��;皣�`���j��O#�g�N� R����
��Hc��>w�d��
��[�@��ZPl7�u3�7�Q�*Cpm*���1d|���u����D���s4|�6:D)�$�:0aJ
��k��ۯaýyߒ�{�����w��̤�dN1�6��3'�V[���C ��O�
->\;�g�x3W=�bJ9� h�����;�-�c
-�l�`m�ڎ�+�Ne�Q��N��٫�@��v�D`�E�6�o���cK'^�n�J7�޿�R$�1��,�
K�b~7X ��=��g=�E�j�0�te�Zd��M�c�v�}b�Xu���j6C��J��gz�C�S7\bڂ�*&H*X9�'V
-������_Փߢ
[
-�*m`
���7j��
l�@6�}�&x�̟[C< �#Z�QM>���
Y�������~�ώ�>��-TǡN8�
c�<򫽋������ǖGy�VT�
���iO9�c]b�K�
��]DO~K|d
�7Z�/
�
�Fۆ�?��6��ϑs-���l
S�&=�.ʤ���W���J��p��3 R�O�h"��?��~�-?B�E��"��+�]��
)��R��(/��$���L���+�ayTF �����4��4Ai�%�d7������7v
@(���C�	4.�[�5�� :��p�f>�

���'�8A��A&��
z�ah�R.F��� +G�gڌ9���C��e�!��3�=-�H�.ȩK��P�M�` f�Ը�}�&
-�6aI
�0� >\�Tl����#%^�B�
�@~R0���	R�i�O�e�NN�Jʀ}�
�EN����ˬc�:�(��"���(�f�
Nz�TO�Qa�:����N���O��y����y,&,��	v�s�
-��!ж�>�	{�i\�M�%iP"�ۼr��:�\ş�xۿ{��}Lj��jb�M�]�t
-Lh�
�:�?K��Dsk�6�?I��L�o ��k2 ��tZ��JVWw���J�*��7��\g��y��.�A8�8M�$~��� U�mY8(
�ڌ�ƪ�F]�ϵ`.�
:��QO��V����S�`"%
�u̞{�o����UN^VU1�N�nh6Q3���ķ��o��dx�B۰�
-��fE�ە
-�
��{s���O�_{g��6�,�'�;�$�E�}!�}M @	K��!
k�9��s��V�$K�d�͹w&�t�
c[�Vw��������#`�;�
-/+���~��7���bN
w��q�	����^f
�
��(a���G����E*�X���M)��,P���N�1�-%�n���׾K�x*(����H����f��1=�,�kb�T��*����
-�������V�������$l�z�"T��IT77�
-�)QK�Kh��ݔ�$2p
�V���{k��$ܞ���}��~vO(F`�k�R��z.Fp<K����+��1H�
I�F2�#��^41��{1f&/��Fu�'���E��
�6Y]�9m�tݩ1����C�淳w
�ʉ�nc�Qw�6��#��6�P}���6���@m,�����؃�4��6�d��6�찃��HVm�	�t�`����1%�'���n=>�(�C�Q�k��F'��Hc�#Y���B�k1�
-
��e�o�z�CË_�[odvwܞ��S��h�*]
Zo�.���C����r4�.i�Y��i��7�Kb@*H���l~��%�
5'��_��Ʌ���3��뭯c����
}u}���3��5��E_����j�k[����5�+�O��UG�^
o7���}�&��ڎW��7K�n�ީ��tՇ	�m1�
v��L�h<Y?�Bb�b
M�+hF����Ѫ�74Ζ��!ᡛC/�^tX��g�,���]$�á�:4��";��Mh�ٻ
D�����we��辁e��^>�?D��86��g�E�*�ټ�tv
-�S
-*,�Nv5��?�]n\z��*�W���'�G�� y
>���8���i7X���
A���8�A��^���9�l}��q
us�������+LG��|m1��N�f�C�O���LJ�
�k�o� mŘY/���-�%����7��q*X���Z����ط�gY
�
-�y���
g)�/�
vu�
wʞ��GU��Z�n������U���v"�1�X�/�YZ}u��
-噠��3��X뎴�
]����zt�6GC���E%����,�81��Pl�lNщ�ZÍ|Fٷ�խл�w�wG��+� k���A���������(]Y1��}���GA�o	]�Xx������O�����5X����
�o��c�k
�V��X^&���Q��ϯcK]�K��o�-
��
6<����
�F����;u��]>�^�!��N)
?�Xf�'6�4F
�|�X8[
-L�0D]E�QJV���B��h���`@
--W�
���
�i{5�fڋ��������bQ|X�F�BT�)7o�Ɵ�9��{6��vX(ά���
-Ƌ�M�kb1�F��ЧO������p�����%ښ3�wGlS�:^l���/�|�1
�B�9�u=���P|t at z�Hz;�?�ܳ���e�؟�Aƣ�ph�G��n�E�akSm�_M;�ZG��*3o��I�����l���ރ��9=E�����q�º�ap�������I
-��_x:<_Δ���B瘙�q8�suz�
PZ��:��;���P��s�_
�KjO�c��|c�
�Υת�=gO�WTۍˑ��-�i�uxy2U!lq�:yu����{Nc����{Vd߾
M�>
c���)
���==�� 
MN�׽��6��z�V��Ĵ�f�fd�|YRbゎ]��:�sBᐲV>_�]b���c�4iX�B
�G�ACӣl�Z'�6�������h�ٶK�/?4�'\�:��߇
}@z���Յ>�
���t,K.�
�ΗԻ
}@z�����=�=u>��.�
�b_.�
�X�}��t�e�م>�=���م>�
��

w���GT�r8z��+#�RP��`Vy��FB��-�����W�	�}�t������[7�GA�;"
�&G~F�7;�Rǁ�`lz�s#�
-�-=� �c�]V=?����u�n��/� �������e�8n�K��>����Э
�K�^�C�+{q9��z�N�Z������z��:�aD�'�1�����V4����A$ �V�v�
���ʼn���g�`(#���x�����f�����/�)���(ݽ��,7��O�_�ś��U���Mz幝��5#�՛Z�s���n5�p0G�m:��a~�]�X}��me�;ٟ
�~���~h8�/��g�;C#�w��u?�V^
-ӕ��<�~2�06}�P��S�-Z��H��=+%��:>bh��P�N�c�v��r������3�M�Uq�~�`�����v��p��qO}X��p����ڛe��bk��,?~s�~=�r�y��ܪ:m3 �� ����Q#ظn���8R	��K?�'q
_�ݦ�
� ��f؝��O4�ջ�C��_�ݺx�X���BI��˭@��;�?Z���тY�kc���ںg"y�X�[��
�
g�
4q�K�n�OI��;�–IlY9-l��IN�I0��,��h�
g>����6�9=C�n�B@���
w|�&`ʍ>��{	����m;L����ţ'�^��ɻ2ń�p��P
��Ĭ?韍�mU��/�_ډdk��ѱ\x��V������Z���o�)�[��+G�
^
-;��Ηj[KE��
���و��yԼ>�D�gt��|	�g�������r�������|�ћꋛ���'��$�$��\)|Շ)�T]���{�~���g��q
zx"��/^�/���d�%T�vu�S\�%����63Bt`F�,.�2
�r�Sx����T�3}��1Z��O,)�q&�7��~����o���Liyyi�	��+I꧓ʁ55�
�� 9F�:�dK�3�P����=<�����/�??;�˘�b*7og��ƻ����&\x;�l_}�-
�{�ΣY��2D��(�+�t��O���
�V�O���
S(�)�+��
�y((>9/I-�dɐ)�ߴy�F���W
�C�/d�#�������Xg|Ycjf'����q?�E�
���=]z ��ݽ���%,Mm�	lw8�]�mI��^M���p�������5��\E�Ѵ�����
�e|�'�����h[��J
\��7��5rՊ|r�����7���@�����z�#�)$����&Tp�৑
-&i�h
�pP;���~|�7񳥄�d���4�*8H� r��8ݜ���*Sb%��Kjb<
��r�?��ia���N�[�3��0@<�� �VHFg�\�dk�-�y�X�
�
�S�

��ҙ������#(3
-��6����ߦۏ��:��-zU�V�.+���b��J$1���-�������&[�Q�Wqduc�ڶJ�k���'*�,��/�ܺzr۹~rs�:Y���Г����'�����
���i#+
�Ij��b�T�q��Zm�t�=�a��|J
�-�_�Tfﵱ�#���M*�|�Ol����.$�)�ht������n���<
�|����}��������Ӟ�� ɶ$�?��#y��hR�e��8��/:?c�<�n>Z���Nvv�LN~p���P�k�勶��_FK�VG��)��F�ۑ�Q��׽0Dkco3�@�AlM)�1�r��� 0 �����[
�����+X0
�]�u)��,����yԾ�rz!vB
%=G�k������\t�cu��Vގ&|���B1�r.�'.%����p46��u,�u��u�����J����ߖ�9w�-V
=>h��ú�߄N��Y<��S|ݥ��3p�n
������>�%L��+o=V˷�)}y��eq��2��X�H�P|J���ȥXzg��YY�
�Z\��
�|�{0�k�#Y�{y�2l^���l&���f��
�ͧ��ٟ�z��V�O�4�d�|z̦���:���SM�$ª��8x;q�����/I��&<��3�ӑg��
�ĥ�!~8p�m�,F&�+ՓO�����:��%i�i��6�j�X�DŽ����T�ѧZ쑭���_"����<Z����?O��X��Q
\���ɝ&�V�$Z8Uh�
|��qte_!��Ty��.��_l�n�Tw����Ž&E)��199-`]
�͊p�g4خ��֗�߾�|Ÿ
-w�_-w�g�������o0�wqF���i<&�}��<,Ѻ�Zۈ�NZkw;|-m�i�7��Tr
][ˮa

~

J8z�1
��W`t\�X���%N;���������6:3O��kIGf�X�_v���[�'��������z�@����_m=ʌǤ�/]?-�8Y�������
-œ�\��x^m��\W��I�ioc}wmћ�N�7�d���4\*�
��y����{�z�>����b�!E��'��Y��}�\�׮k�_�z��M�w�ye�o�y^�<�ܝ_�9�n��
-������{�x���j���'R+(o���})�>Z�&<����	�����Fv>��,4�f�6�{����Ѭ7L���]�O�z�����.OT�����}�~&:�hTRR�痵F�:�m�]7������
\
��K����M�?���H��v~
�N^�_��n+U��r�5T]X�^��
U��q��O%���P��닻j�>�lT���4�&���ꍉ_������a5X�O�뿰9O��ݞ�U������Ŀ�
%.���w��
-�\�(G/��������e�T^�9�/��*��O	o;�;�o�v�����2�K�*��
�f胚y�`8��q~�tYG��R��-�Y�}��P�e���	g�X>N|��"�د��c[CH���Z��t�.%~^�}��.��.��y�����s?���qs{W�j�����
��8��!��S���i����w<�~�� Cdl� �J���`�hDf�����\��"��W���G
-�o�F����Y�d���Z��d�F�x����>�7a|�`X��Z)���2d(�5�
-c!5��TXf���h"�7Zp�\B�<�}y�Kj�"���V�*-@
FȬt�%��0-���MJ��P𤔌�!g
/4�LI/��Sw���$Lg��S
�RM�LZ���<^M��飃-��pBx�p��N�-y�t�O�
�o
�s����ߌ���T�|��̻�ӄ�M�.f�Q���}����\����OQ���e����������������
0E�U�����r4��
!�q��$ c_��W�蒯"N�@��L*#(%DYM$`p`K	�,���&�� }�h�뮲�$R7�FC״Ty�7�)���
��(&B+�6��F5�V@
x�D�@�8i�`��oYBT� � ��Q�Ngf2D:
�J	Q��
-0
�
-��sC�8��� ��
���ҺI	�5��L5�;�
�s
�18��
�s
�18��?���}N� �F�Z)pˁ�(��K����7a}b�Ѡxc�a
-�6KH *E3 at v��(m���j4@;�+�B����(��U at g��
�j*]h�
h��"+
�A(�XE�2��M�HG��Q)!�s�	�X�Jz�� �2�vu
��f�*%�Ji'%��q*7=�Ux+s���6��獷�gDjI�z��x���[)|/�^B��`�
����xk 
��9����@R
��P�	7����R��TDq
��a�Ą�L�q�R@!�%��5� ~
-�*@?�bk9	�hb� �2�Q�Tp.�2��=]P�i�f
-�CA���
�
-�"$��@�h;2 m�*�g|�E? ��'���*�%d�8+-# v�R�J2e��J��.B�"(Di����JJ
Y�&�T�{� h�%�S��
�H�m(���zXn
?0Dfm �P^%�-�>F��i��ZpB	`X�\	�@}X
\1�R��6��+-�=W�ƀ�8T�af��Y#FE�P$�(�;�9�i�]Z��P5F�.�0*����� ��mN�9u�������0��ˆ����S��>a�=s��`M���n #ߠ�0��>����Q�̆���b(�u�iF��0{$�
��)�X�3
�H�Mp
p? 2�z�!�̥TZ��`��ު��4�� 
���
0$��)@*Fô��5�-BcJp��D
-�8"dAf��	�l� �8AvO�&-�*<*-$}e`�
��
^:3�
ஆ�C6��J�T
i处2�#3=�T�e�e-fN�9���\(�R���@eN�<�2�} ]�WL��G��5�?�r�1@���W�9�>A�4\��Rh 'd[��	A-У��f�a�H&��Tqd۴�@%�I�Q�
-�I� P[j��R��J%e � g�y
]������?-–"��CRL� �i�<���7+/"�er+�:���ta�4�;�n�
��Ԋ��
W%J� ئ4�N'��T^z��>�6
-��6'�gN�L�0���h('�'�R�Ë\��|
��d�8�e���0������cq�@r\�
-�70O4� *�V��e�9`��D��5Di�8��&T�2T
"`6f��b0����K[�!R-`(�b
G�ƥ����-�-9�'e�I�t
-���Q>!�� }�[�֑�^�Y 2��f*%R-���ʨ���<^S=C.���6��
r�9����g����Ann�
r��
� ��,����p���2�`�[i�2��} 0�]�\S��5ܥ(�
'��6b�m�f�xJ������ύ5�dSX�� Rj�� �Q'b��I��\H
�5�3�r(�2D��C�bD,��g�P�\�
��3(gFf2D:
帻C��0U�G�B��R�	�
�
�kB��2�D0ƸS7)���S�顦z�a�MN�9
�4��i8_(�|h8_(��h8_(7
S�[��v��,p�
ܧ�08���
!�I�A��
�Wy� M)ƕ��щ(�k�
ԋ �p�X-Նq�!	�&�Jm\?�b@����bв3r�!�Y�j!CH��R���i���	�i).���Ru�@���I���q*7��U��*H�9����k�9���������B�	Lr���qZ��kͭ����N
-�0a��VP�bQ�kb
ny�[�>�=��%�Q���Rm�Z'j�
nW�%�D�5
�J����V(b	�=i%�[@�$�1M0&��h�*.@�Q�NRy��N�L��F�*������56,��,aO���	J�q=X�t8fF��wI�/z�6�0�P�E�[�I%�v[���
���P1�T
VJ
�q6_�?N-��2���(�+|P��̞��-D�
��������
-�&F�07P`�)�.^�VA�&�{ܒ"ؼ8S�h�t �
�-
H‚�5Ѵ��
��rJQ��9v���\�;���aw���3��|k���w0Bay�)��SBI q7 at 9��c
�
#
P�8|f�r�a
̗�M at b
 ���Wx�5<ؾ@�g��
F����jaB�%L���n
n�a�`V�
~�T$d���0��m��	E��� T�C!]��U$�;�s 
�JpܸM�O4ة7K� ���tK�������h7���G��h
��D� ��	��Dž��M�ȢV�G�H��s�pX;ⴁ��
-��G9���]E@�Jj�ٕ��`>
�p���
�OF�^U��	�^v�`��b?�~pB_����Ew]��P�

-� �
Z`q��yN�9��d��yN�9��d��90��HeM�� .|`Z<� ����
�
 i)�3������Q.9��Z4}rN%p?�3�X<�
��[[f0��X! ���
g;ƃ,(б.�"%ĄO��TL��
2r�!�Y*xTZ�A9���p�Tβޑ�
f8Xp
��Q����
wh'�NZǝ�顮z�X�Gu��C�3���8�g��qt�b������J:�|<0C
b�� 3!�5��'0B���DJ��3�=�Z3�ZA��IX�i��Q�3ъ�p�0I�|6�h�
	�
�ǔ�Y�<�Csa�c���(�{P����
����L����(�.c�r. 3J���ҊI'�Ro:3�WS����et9������5�J~F��G%?+~ͣ��W�Z(f�VH4�R�v�K1����9��Ҹ!E,�(�\Q�
�F�
-�%�?(�,nDf9�
P�e0Qt��1#�9�ΉD��x���2�#�n�w
0��Z�(�F��@�PH<�A
l���3�94t�ex<3��+��Y�
-�b��V��T@~h���	�w3�����s#E�t sPH�V��H��G1�
܄�#�
-!
�pmn�����h]`���L �B!1
�)PA�A
�hšHx����(��r��-
��k9�
TbE`u
��X;*�
T
�Rȏ�2[�}�����[� x
��M1Tv*�s
�q�<?��z��"�*�T�S�3��<4�Qy
�<����.�"��
��owl0�;�ŭ~ �t�< j2���v+6�Y+*�6o�|`R������d�)��6��d�z�M�P���)_�RA���	���4�
�`2�-`<`%�e��
-D�-Ѥ���]Dy�6�q�@�na�ѵ�q���g,. $F���]�`����<�K:�ǂ�1l�6���?M
N�B	�cX1�u��Ef���X��o<ؚh���"�m`fP -��%(dFRw
�a-X�͐��0b���%W�@�

-���`f�H
��e�	�n���S��t�����YH�t8T8f�Yj����G.��^��9��\�sy��9��\�s�����h\��L�B�f҅S�oƬBr���0K�hG_YT�J7-�@rʚ���@�H���~0x\�[(�3Dܺ;*����d�Aѝ2�2�b����"��3�)�^�`�_��� 0�5���w^*3\���&
7"�3�SeJ�T
iݤ�Ik�33=�T���#l���
a�g��y��3B�<�c0��}�o���
7{ԝM������Q�m��ZAy#%o�K�����7�@Կ��\��y�5n�o��j_o��]�p/[�o�w���rZ����
ϭ�u�2�s����	E ^y�Q��^�n@�}�4׮k�_����M�w�
j	n�W.�+w���›B���
Ź5y�t][Ǧ:1Q(�*g�O�
- U�pvW�Oݫ\_�4+��-\���;xVݻ�q�7��D�����r�����
endstream
endobj
129 0 obj
<</Length 65536>>stream
-%AI12_CompressedDatax���
��&�����{��+�H����]�
ͱ-�%{ܧcBQ&KR��,v���~��}
@^���"�>�hV�����`a�o�������/N_����Ű�w�?���������/v�������������;�=N:�2~�O�������7_�Lܛ������g����W��v��o��������77��}w��������y����{|e쉵'���6�~�K�p��OW�����
�8��݇7�n�|����a��
;3L;>����������S�C��Zo<N���w6�~��!�郳&����m?�q��^_�y�������ޝ���ݿ�bw��՛�/���7W��������p{��K.1R�z����Շw_�����޼���z��pw�ju򯮯_]�z�%�_�o/on�1ׯ�����,�_������_}x��k��s#?
��W��;�+^�����헯������c��H.��/���Y�������o���b�z���;�߽}}u�G^�������f֙}v}:����oo�в.��˳�5����9/�>�̀/�����sv�����g�|�R������_ݽ�N�uz���DD��}�7}� �߾��~4����ݫ��/vv����J�I���N������������eK����/�~��_
����7���N��s; /b�����o�φa~�Y�M��x�r��5�5V�����o�|�I%��)-���߼Z�;X<Q��a�cZ5c&�Ovz�'iAˆ-c�}�'i0���_��s�=����/��X.޼ [...]
-|��>}7�.���o�����?ܽ�~�{�^������?]��ē�W7�������=�>9{y������������'�z�
t}�U9�;��|�U:�J�vr���
�����_N��s��Wr����rewr�.�^]z=_z�n�ιY�s3��Fnߝܥs�ҹw�s��s�ҫ|H�~H�~XN�N>�羺������Wx��듗��w��o9�w�/I�'�p{{�����=g��'���՛W��,�
s��^���{�#���'`���
N�;̏ۿ�{�����Ӌ��ށ�������y}���rR����oN^�?��y��w����ƭn�\���W�^~���+|������q��������//o�^˯����W��`��;�7�5�뽽~}!����47o9�wo�^^����8�Ė�wqrGy�
-�tr�Z�'��)���?�=����᫛?ݐ@�I���_�߾��J+z���N�Tv����ܮ;����'���s�^�@d��}���w��
�8��wށD����^�~?M�q1��E��/��_������/�I_���Zݯ���t�o��]���W\) ����i!^_��'�C��iW/eC�-�vtw�Ç7�_�x}{��=�!�O^^��
���~��;��E
-
�
-��x����ݷ��_��;Y>>YNH"��7����f�����o~|{��n�D�-���'ۓ���fF�	 �p����W��c<�y�
6��Wۜ� '�K
b��Gg��n�ysu����N0�ׂ>N��߽����w|O���������_�:3��
�ܝ����[\��S<9��f����m��o���Y���[l�o�����n�=I�ߌܧ)�S�kPeV���� �_�~�W�r���o���~���)���|����;�x���[`��	��t~y�>]#��
- �?�O����s����3ή��E�ݼl=������w�x$ ���r�����~)��z��W����xÿ�3~t��ׯv_�����Ep@�7�����'�>`�[�?����9
�?a�Փ7��
�v�Y�����޿��7x���~�R_/��=�������W�W�R�����5
�^*}��o���-P̻y
ҟ
��3�>{�k
-��y�z!��'��xxy{��� ������wNJUȧo�t}{�v��yO��՛��j�!�u��ܐ'^���Cw��A:�®�������ܽ~K������^˨˙_�7��k��������Û���Bq	���ϕ�����ϻ��~vw B���?���?u�q��3���p�����D���8$eu�yh�P�q��o;��n}'�x��
�����<eL�a~u����r��V�v>
��?��G����q���pv8?\
.��3sfφ3w��ƳpϦ�ӳ��󳋳���ܜ���ܝ���<�������p~v~~~q~y�_�
{1t��_��"��q����ѭ~�g�A^L����t����ࢋ>�1��x�,�Njx9�����&?�S�h�8���t>]L����9��é;���i8��������;=?�8�<�s�����0
�!
����&4<�;�Ƈ�5�&�~ڣ��Ck��!S3�aN��p6��%�8��w�
.�ɝ��;�\�K,���;��胏~����0�
9��hF;��8�a��4����
st1^�>�`�\�a
!�0��pg���p�h��Ct�v���8�q��8�8�1�8����p8
���_���?�،خ����������F�<���.lE�
i�-{>[��?��شl]#6q<�?��<��z⧸�3���RVFc�M�o�>�S�c�g�9f��6���3
Z�h�D�rsj�Ӝs��%���ޏ����0
2� 
r�`
��b�[�[
�je��ޙ��
r�?
�\>|>���#
;�3�>� ��Z��q8��^(����N� �y!��/�Tj�Q����r�r�|D9�|���a>�:�$<�7�E�x�gM�D
-=m��~24kA�A
-�&H�7P`�N����at�>��|_�S��#�[�9���i}㧜��܏<��٢/�ظ�!�V�|�<�+����kW0���sP�����}�>��v���
8�{�;<k(P���������]�o��v���� ��y�T�����ź���`^�a�}����_Ѽ��$��I�Y�߾ys�z������*4>�t�]!y�r�|899���	���#�a3T���8�
��xLr�|9F9�
.�
�k��x�� ���Obk�r��#=#�Lr�|9F9�
N�!
ݩpv�;
=���&ᡓH] A
y�	ٹ��;��qJ`�{�׹\*W��9@�0�
H�3L�)nNG�T�oGz��
���p�0�	�% �x`�ʄ
|���
sy��G���A�XȽ
�� �
�|
-��F (����݃�_ _�a�O��"p���},f\�p|v��9^��V#�����z���砌C��� 1���$
 S��!e. nϰ����x�Pv�b�'^��>�*C�c��x/�Dg#jc�s��&�hZ_P:�#�Y�
]�%6��y�6�L�]�%g��y\���'6���Gl�SPwH4k��#��N�.ًt� 
�O�md��[.���B2jP
�2��
�NS���
�{���NC�. \w�[�~��ɮY���N����ه�Vg|��O9;�(�4�4E���:n�x���}S
-�1 (y{Du��160�����8u�Ƒ:��4�@"��лa�[��W���C��j_w��hqŁ�̪��4�k���Nec���EFGI ��|�P�XJ�ɉ^b��,�.�xq&r

�AEQ���UXVH���BW]��_`I�Q�%1f;��^t��,��9P�Q�%�F�&�
�M�M
E\rg�3N;H:ʺ$�(�ģ��'r/I�sA?A
S��A�8/�
l'dۋ8L�\��AƔ�b͒�щ�h���,#)%����첰�yo��3�[�Ϣ�"�n!�i��DI�Tl�i!-��+�X*��� �(�	�MF�b�H&�(&*Z��0I�	E�DA�^0#�b/萨� 00
-����z�t��N����)��T'��	T'D�	T'��	T'
aFPO�
�Ȱ�_��������p��S����_����8����8̇ �.��L�%��������.f���nT�J��t�Ͳ�4[̳q6^��H�-�e;W2A��m>[�Λl=�b�tb�Lǘ-�A��防u�T,��8˖��l������G^���X�2��;3j_F�uf
��r,���>X,�k+�;am$�j�`Z�����
��Z��x"Wq�M�����>7M���12��6�%��A�8.�
�~����\-�%留n�� ���=��<�4��!��~G����D���s���<몏�h\S�q�+�M�_p�[�|�S��ޥl6�
�x���_�>���
�b�O&� N���ʎ��Օ�]���J
����W�{���{:��c��%ة@�3q 
_vt�	���J�+6
-����t�Cv�}���+�^G�:t�p�:��>Ņčŕ6�;�T\j���ٻy1���9j
I隋�g�	�;~m�ٚa���ْҭ�'E%Uq�8�0٢��&3�Y�O/\]s����9�E�]��,
o-��?��p��/G�
[�#�#6��ut󯧏
ڄ����1w��p
�S�6j�O��x�6�5�����put����Q
�SO��~*��Q?�J����kXZ�

��y��!I�3�|0z鰎_����/�ϛ��s�T͋`^�r�ό<�D 
>y~�I�>y|9�F|ʞ}*�x��<��
�}Ob��4���
�[2�����ǎg�t�O�a<��,��,�^��(�"��S�����<M���V��5i�	���~�J
��Y�
��0� k�u�.���=�s.��ǥp�^��N\�ɽ�%yaK���rc1������
�j
����P����V��(�X�:Hj��(�g3�zPg[ŧ[���[��];ا���ҩ9Þf�*~��h��?Uk�gS�[�&�D�9Nf�[�/�ȧ_#�`�(5���D	E*�|;�7�{[��ϸ&=��k�r
�����MH�s.�8]|l��#���J� ��x
-2�0
�r ��;�D�AltF*;��.���
-%U
HQ�'R�'%u�7 at EX/R�ԓ��r�ʔ�I"'y\�q����E�E5,
-�lb���
�
-<�3���
$��\�j.3X2}��	f��C����
-z:�w�\0ԅ�z�7
N85�pl/��G�]EAXS�)�G�OS���,�RX_?� �8�t
��$$��%���qPLA��1����8,G����1!�;\�V%�̃�}��V��w$�+v�Ov|�au��ĉ!��v��̒d�!3%	�Wl�B�� �)������� �(钜K�;��"�x[T�Zqب
ݣ1�ZqXT��m��̻Bh��e at 6C1�1�}-�k��:�
-�r3w[�
G���!�3a8i�_v�����
zhs �ˇ��`����X�/��P�98�l�9_
ks�
Ut��j�2�	g�
�:�eȔ��f�ͣ� �����$���
��N�47��st�;�?�
s��
=�u	��|�Hq�0�@3��F�SN�K�iƝvnF���Y�*/O���A�؄��������j �;��g7�g7�g7�:�����n�g
�������?����
��N�\2;���iq?-.��Z
Q�s&_qG��:�E7�"/7��~
�Y��MU
U>�fwU��Y������aNe<���.� �~1�t|�|
+����*6����9�rZ�_��m�0g9��|������,���t^���
��i��i�!wIɏ3�>t+E�"c悑��Yg+��۴�˕�fK~I�Oi�I�[�E�[��$A�����Nf��tI�l�:W)uӬԝ�n��
]C����)��E<I���soQ��Z�(ċ�2+��<��
|��ݍ����63�
��
��q������������'�<od������XD�,gd�&?C
����~�\���h݃��g\�q��iQ�hQ�Ţ���	ǃ�����<v
~����G[�'m�W�n�U4��16��8���Y�Ɔ�բw}
�GK1���, e������e��)+��{}��?mlP�ʬ�?��m�Q� 5'��mR��IA�j�Te�jڣ�%*B�
-!lK ��R�@��RꎕW노KF�!'�MݜP��<=�J&-���s�^I�+){KҞ��u�����[���\��7��us_+��h
ߺ�6���2�~R5�9�o�_�Fk%�}?r��%S%��Nn��񔓅��}�$
�`���
���6<�܏b�Y�ĚM\I����Z�ZKa�8`\r�
��j�>��2��z�}��~=�
�)����Jw����"*�#T�wO,�b�*r�+�lj�t�2*u!�RJ%�ʍ�TYUY�n1��R�/�+
w)
�*�2s�nS{e]��
[���`��S�P�͖�m��Y`צ��2?��?|�x���=	�l��CG���|� �f��G��y�N�)�ۤ�u��&q|I
/��K�xI /)�Ӫ��\�`G�x���
B�JK�3W/�XI���R� 
�N�E�,���
��
J���`0�r<W19I��u
.6�
�zqU�`��͕
s�q7�������9�xUod[W�*ҩJ!UI�F��5�{tG
z<dB}�nGw4�����a?ٳ
=�g]�q�_;�[V������;��a,���A��y��cWYx�}��
<f�w�y'�	��~c�Y9����mL<k#��̳6���~��t�/������
7~v�wG����~�ݯ��&G�Y���CXL�t/�_F1�1���"x
LЪtM�L�jo[�m갵��=��>[=�i�
��Cnjj�g�	]<vt���>.��_[_]]4�v��;q٥R`Ǫ	4�"s
6����h
=�)''�U?IO�HΥ��É<{1Y=��\:l0�v-p�¬Y�2�?��T���T&|��̎E{��M���"74�n����b��u7�ua����z�{WU3
����G����kp�a��`�v(Z#W�;�V�}�O�z���k�
?
ԥC����Vtq���AmmH[��A\�˪d
Y�2��*k{�������IVk���C��
�`XT.��B�
�~괧��Y�QM]+N�?M��GD|���n��L��<�Y���O;���c�"�O?�l�RvOᏵwt�b\i'S�^��EKY�y�.��*
���b*��N�(��w���U���l*_�����)�A���(`M:��DH+!T�1m��N�8��M��������{?a�79%{P����:�
�V_�T�L
Kc�˵�Y�cA��<�}�T��y��Gk7vO/ޘj7n�r�p��[*��ʼQmJ/�܉�<׸<�M8B�t��Y`r��˹��a.{g׀��!۶��QO�KR? �Ŗ�sQ�rP.�ьAz"�o� [...]
-g�� ������	0�`>'�|N��� ��`��Ό��k�k>��$�Q�K��*�:s~�xҡJ�uM_���4������Y��*}~��f�w�K/ͭygFh�@1�݊!�s�݅)&��6��1�Y�&x�[E��=j�
-y㗭�7����).
1�֭5+,l at Wk2����C�
۞~�p���d�ڎ�J[�֤�ԕ�����o�C��:�W�sM=[ڙ�:�z9τ�5(�I9
��9谄

f¹�VB�
���
�\���,K�$=�j�IK�q?�5_W�ee����M�
��	V�s
�q<��Sa

[Y�P���
�2kR趔�A�����
�B�\�
`
k��U���l���Z�}�?�Fz������E��Y
���l��l��ՙ�������ko3���\���4M�8n��;�epF�U�~
�Ŗ<�ԧ/"�������
�mVa �c|�Kѓ/�8|�
�ç�g�!
��qP���΍& �*�(���
��}��r���b�!�.�bY<ON�nF at kU��Nl*CGԡ�e
~>Fj5ŭ�PW��6zȫVQV�(+i� �V"�:J;-��r�
-�cй-�@>�Ƭp>+�k!����F��%�.;�cv�
-
=')T�Q�4�)�X�7�k�c(hE
Yĕ1�S�0�#Ht��&R��
e!k"�V,�M�i��$[��Y����h���Dx�
����n�v�@��\�;QV4ߦ�#��{"�2+�ZƄ-^�ғ�ɹ�~�F�I��bq�y���#!����|�G�f��H��WJ����r ��}����o����.��X�6�˦v�
əZ�4]
Q;jW�E
�X�,f�V�l�
 ZE->���͹��ѵD/.�u�:�w
Ǹ�d,��%���3���8{�O���%�����x�=��o�#�0�ݜJ�N(�
��1�[��|<��=�e�Өs���i�=���{�ms���Ey숥-���_��p�s����
��Q��~Q�s�(3k���
k�k�5t�ݲx]���-
��59_�
XQڮ����R�~+u�����i�۬T-Vr8��]e鬲��t�N*�
*%���j��j���n(���c�K�]6N����}t꣏��V��>��}� ������)�I���wt��!��}t��V*ϸf�Qś}�M�h�R��{��
_�fO�y78���m۬4��^pW�������B�����Qo�84��a�,ZqZ��UIcK�XZyZ�~Z�����z�ꩺ}��*�術RXK>�x��Ny�
��n�_���p{���͟k煤ʝ�4�)���9=�ϩqg9-.�8�����	wV��:I��R�%�z)�w.�N��]�����j^���
J �����	�����+I�s�T�k)!��bt�*Fx^]��ld.��U#�Ռ�JF
-�=�b�6j˴�U��R
�ge�
%c|�����������7߿x����ݯ��!}�����߀�/�no���ŗ�vƍ{vԛFp�ѹ�1
:��4�������� wn�
�
-_�T�������������G��������)��r�o��߽JW��ܲ~��Q��8�����uV�/Zz�����࿓����7/��ܽ���q��0�������g�_����������o�)X�o������7�/��|��������}�*�.iw�,�F�b��1�L
{l�4'C�� B���F}� d-N�Aw����|�ֿ3��L�O�G3@ �
����;
�`�\;���!�WEl5^Ec��;��>b���d��<�)�
�'���
z(8#2 0�7��u ��������"y+(��=W�	��Yn
�Nn3��&0:�M>qN��g
V
�ج�+.���0&����~�;�W�
�0E�4��)�Z��
-'ٽ�_��48@����t����
{0�`���q 
=&8��g�=��
6�@#2/���
�m��5y��Mz�
g���U��}&��Iޗ��&�q˜�$��
46f
�t�t=��Y�&�
-���ʀۀ�1
���1o�`���U0C`�T��I k��{:�0�q�K1$jp}!!V~�C�
��m �
>�G�g��
�N�]I�&#aՂ��9���m^aM����Ƒw4B��4�A��	���C����
��Y�
�g(+�\�?&`��^�I��B�9x��8 IpxH
�,t�=}%у!��=�����8��.�	$��"(rX.���pm�`�
�9@	v�.�k5�>�|@��$[�ˏ9�H�`
���T�
�IC��A# WN�ƌ��%�
l"hŒ؞=��b��x�c�l��@C"a8	�8�
{ �
@��`a ��.�����Ƃ�!y8ρ��ƾ�t���&�����l
-��!����H�N ֊�G�L�	T��q
΃I\ɺ@��wpH5`3pC�3���o�4���z
Y©�*�8b�NxP/�+�QljLp�
-�4N��H������aO�?���Q�
������˓�d��
_���I��Ԁ���=7 H|�݋��$������A[е�9|�7g�<*9#�z���'�2�=рwYc�Ƞo��@X�	M:~�1�C&
-�|�>�cc±x���
f��`��g9L�;Ō��cٰ�q"C��uLp%�8��#A�}�$
��������
�� r� �8j>��,͜�:��q��u !!��
-
S<+��?��H��MWC�bw�̗;�Hu�:L�D�
���!
���D�WqPdd��
-����䑀�	8�D��

}'���� ���0
��
�^4p��nH>��A1�w/ �
�
�jєB����C �ʘ��k�55�
-�#m���/쀭��0p��^`������"�'PY{����{�E�����	�`������`<;2Zl�H�4�~O>�O�q1n��� '�'X,���U�!CFC�'��X,
-#y
��\
�۽ -�p��m #x��ha�=
����PX�����O86<G�� �o�q�>�i�GLip�	F=
� �d����Ww�u��_���q��
����\_�������_p��gg�_�����_��2r�~u���oO���ŋ|��G ����6�߿*�m?}����|����|��������A�|.��D@�f�l���p3�����pE�T ��,�
b
`��BC���t�ہ�;�W��#���"Hs���=�W��D�U�=ہo�<�n�� ,A]�v�R
�h�
P���vP�p��nW_&
-�p;�"�`�6rW���u���A�t[J���|�a೰k��w����*�&�:�r�H.�z�d� 1�N;�؊S
,.�S�N�\������C�mH�S�XuNi�G+h����/
���Ƽ�4c�a��
��
��P�B;�9�ö������I��C�dt{X,1�X8N\@��:B��|�n��d=�B7�P~ �ӫ8�e .Ȣ�0M��I.�"���R���K'<�;�	�ڞ�T�3�`b����eF�4����Q	=�
��
F���q.)�
h6��=ʔ&
����%�	�
-�w�q�)�����
\S�:C��)�
h�V�t;�/O�� L
����'
P5��	�
-�B�դA���܎|m�L� ��X
�c��(Uq+,9���
-l�`�U0��%'nC�	n��s����f�����v&�O
� �E�s�x/��x�bi@������,.8�!�#*|�kb�P���ys������qC�]�e�~����X�j���C��U|Ȓ�;�8�}^  �]E�[DH
-��z
�+J}�A1ɂ����_��-q*�
�#�~
�6�����~�w��xǦ��h�2i��eGj�_��@S��@>�
�w�iGh�8P9`9c|�]^G�>���dē��	�)R=�Hꄜ��'���	����<�P9��	�X.8�38`2+`�n��G1DP*�O�
����'-�	�
��&�
�e3ͺ	`��)��胝@6D͘
�lr<��܀=����?XxK��W���0���8β�-�ձ0���Ց�'�(�	������`�E�E��>�	�-�Kg����
��a�6	.��z
��(���Ka5�b>TX:�a��\�@)�54
@
h���+"�|�2� �Hm�<���At�S�J=jt��/p��@ƎA�P�^��F�'�	Z�ȡB��
�5N=ƀ�����zy	ܖ�(����3/{�3�nh�I2�$��Q�q��.�F+�Ȏ4�L�.4��� �|Y8��T�?8��0�

�R�0��
V}�
�9��ȁn��4�[N�B�2{Z�@w`� �:�8�&�B$ [...]
��͠��f`�
�q.-
˾ǎ�m
-�B
���P��P6&��HN����
-�2?e�x��4��xq��<�k [��N�e���u��]���Ms��r�G�6,�TA
#cj����-=m�̐Sg~�!U
�>�7\Jޜ��7�NWx����`��pC>��<��L�5����`�
铭$���¡=픀�$�n��� {:_h�t�̢�:��
-8+�Ex𩁶FZ5動ȁ\�q�K�9�TAE+>�_�q�E���c��@�����ʊ3���q���b��,��X�-�k������md�'�0|s�o��,�}A�` cÌh
v�M�{0�8��
�p��J�)ha(A �s�(�wp`���O�~3�!�b�Q&�vI�
-��魱�6��t
�ٸla;��)?��
#��
oA�l���H��$

�3�H�S������53vT_�����T��i6�K�Tْ��f�60��>2xF�A>f��u /��\A��Y��ܥ4(�7
eA��7��@��*k��/@^��A^��@��[O��)_i!� 2
�����Vb t�,�	{BZ3�@tz%ў�@ZEU�./^d�_a�`qp����b�f��ӎ�q�qw,oQ��u"�c$��m=�sC`F��z]�G�x8�E�m�yE�`�}��-��p����٬��*L<����Y�nm��h��>c��uӃ��Ѓ	TꊚF�
�>�4ᆍn�߀���
@߅L'$�!�-��O���P�v������e#
&�qt�
�.V
ro,x��v7Z��
u,f�[Z��X����%I;gS�E�1��_
-g)�pv6���
�4D�a6Q t��Ol�2
ѷ��'8����ě�,-)�%�@E��@�;ȴ�YK]U�a�
�h1����Fi���q�(u�aN��B�#Cb6=/��
.:}յm0�
Vu ���
8	L{2�X�zL4����H�ԭ��(�Ǹ�֘���M�Z��E���4���F�� *�G�
b����
B��

g4�ZJ���5�8�`��b"#��1���F�A�>���3v�	;�x�kh2��{:w�L�u r�Nӑ�Cl5lk/l�������R+�
BZ�� ��\��A
���D#��%{�
㈢�h�8/�l����(�Ϡv=}�f���1����-KlӉV?�Հ��'�"=@��
-ٳ����L
&�CG�Fέ&Ԏ{�e2�
�h��Z
:���O�����AK|�e
&M
� �ׁ7eʨ)l����
��
VĉW��L�������3��m�/��^o
����cvjw����p��f����
��t�8o��f'�Ok	f��]atI}���@
ëPz�ۅ�7
�x�k�O���L*�E������5���Gك20�cO}���v��R1[C�6�y�v5��
�
4�OqK�ˆ�3��M"���)	A�
UW:d��
V
eV6R	���t�5�y���<��:P竄���	Q�7�ƛ�	*	j����@��Ǟ����4����1�e�a��Q8_<��<���|+x�3F$�8�N{�&O�r
G
R8�h��
�ˑ�۸P`f
���a 
՘5�Gq3��i������z6A���
�
n���Љ���fW6�l��Fl�]
�M��5�e��)�Ií/0�B��������+�K� ��h|�!��!��:^�kF&L2���4G����QÝ���X'�_l��g��
�18< ��^��j˄�<.�M��:�e���F�'�@
w�y3�!���E��T�Fqb
�C`��Z�gԺ
�!��Ę䙩֪ Y
W��李bj됮�&�������g��pD�L�_�CNf��~%�S:%�V�ɞh/{e�Y��dŒ�},�vJk����PQt�J�'��� Ok��M��$�3N�
-���
���35�!jc#E
?��� �BS��$�IH8�%��v�X����c1���faq
����
:<���g8���Afb4�Nُpc�3'����2���a�����e0���X� ?����w�
	��f �6��
[�2��,=����9��DJ��)C
�
�D��(�2��D��<���6h\R��'��ٚ��"	1A
|�6H��0�30�.��ʄ��YX=�I�7
�6h�)gh�4����kcq�, at A�BE(����b=R
)'C���W"D�L�)ث��6�g�POܪL̉�SL�Qi
���O��g��o3
x��9�D]�4��H6�ڠ.0�J$�gt�occ�glf
-d
�2�ڔ/q�
���֗�@�c��%�2�ʉ��O�Ũ�i��T�H�N�S�q�`�	F �e�e�v{X�*�$����
N�@��,&�Da���P�v�!�J�=&�4�Bܥ��

Dfg���=
e,mG�p햂�7&N��OڛJv
 <1	 ��r�շ�
��E�������?=�����"�ñ��rL*�(��&M�gE��;Zӱ�6��Ǫ-U{rծT��#�{�F.�A��[Q^�&{RNo�政\���do�Y�W�Z���W!Mɡ"
-j�c���
-ɧ j	�C'j�/ֲ[�kԢ_Ez(��E�0Dř(8S"S
- Ra,M���`S�3����&�S1;
-G�(��<UH��g����{U����ת���.qO
-��h���B��
����.����:��S��
-/S��>����*u�D�)E��k���;��������ЛgUj�
-6T{����U���K
!�l:Ҳe�Hљ����8��Dŀ6M0*�T�rT�2���+#��tU6($��X*ƶiS!�ʚ��{�EN	�,{*Ƹ����bPT!�-s�
-�.�LB���%�iD����-��w+3�
-
-oY�UDy1%�!����W&l��
�*`^�U�}�����I_E�o��h:��SBe&(džJlh:HT^���܊�5�s4Z.��X�Y"-��*W���蘣
d�U�&�*Yb&���^��:e ��>������'�b�}�ʁ�Ӑ:o,
7��#�Yi!2��hw�`H��!���\�83�U�u�dj�bZ$ ��-0U�q��P�1�uhkab���)�f
-�1>�Lﵿ4�a�9�=-o��"F4U.�X��Z}U���O�}�j ���esj������-����$�y����]�D�m�H���+�,�����jo� ������S���)Km�x52M�Qmó�8/��[a���֛�} ј�?9[j���#��T���E
�2Jc�!)��ԳJ�>C�
A�'Py���0ϔ��@_�2�ud�
-=�+Z]N�F2
Rz�Hօz�8�ک����[��h�
����;b!fŃ �ߙ�rd�u����ƀ]4�\L�Ò�C��E�n���.Nl�$	_٥6ѰWQۗ+1zJ��ѫG����� �h=W�Q���b<ڜE�=��������7`20�T,9�3�T耦A� ��V�R�]�)6a�%:Z����׸O=��]
[���5�n���$�—�J��K�B+�b/��&0�G<���t�V�$Tf��ga���,��;
�1d�i�O�� }fv������~�zk둴X��u5�5�Z�C��j��4h����/��I�E]sg��ol*����^Z���jyNMo��^6�>y
�4�SI2�-���0P���U���92we�b�������1[9 qX��|)F�@E��

�
��
R�@��z?�5M�P^d*D�
��H�
#�I�03����"Ѳ�a`YCGy�
-��INk&�.�Қ8�((����ź�8k��8���3 �5
��B�=c�؈�YE@��N	)rz�c��z����>� �LM�fH5Y�#Y�
����և
�Ū+�Kj}z�I1.
-���1�'(���6+����4��TB����3�+�5�kB8����`����0查=DuN&VW΂�{�vģ6
-'�X��5E�H
�)�گ�H���t��и`C�)�_!�hj� ��2�
�Ŵf��=Z�<T�!�f��(���LTY[�³�D� x$�ZT�}��Q�_!@|�-Ijj��q{> �D���c.p���R�8�o���w����)�JkO�5�֮w��ՕCZ:
��z��Cm�y�p��^�tQq*���A)`d�����xI=�h��[�TS�ű��
�=ѷ�A2���n�VS��a^Y5\B���B���1�%��a���3��[��Q�:��,Ց��$��GԳ�e��)1d�U����w[.�7@��0�Mw��{�bQ��b9�z3L��B�m�^���3�EmC�0��G�j�O'X G~����Ē="�+n���f�?ր+Q�5�Z.����I6_N1�zl�a�i)l~=�Z8�K�L��ZP��@
����Ь)R
ߦB��x�?���
tk�jXR����"k�
-,���ᇮ]n�em���O)(D��c�q,,Eb�������#t��1���

KG
=� m���Ϊ���m��[�f3ѭ�7z��l�� 
��<XW�M���#���5�Rp��gm@˒��
������䊴
-���B�V��K���	��LP
:*�I	4�BI��7�O�&:D�Xz��
XU��22^'HM2�d�9Vbt��+�O�b��d�!KZ�oƙ~��^1j3��I��\2��@����*��\Ί��<��%a��_cL+�v�Dk6K��(��\1�B"xkB`X0�����Qj�����p���L
N
-�#�?};���@�,���@�
���T��F,:W
-;u�I,�'�*�"$啗XM�1�D�Rґy d��̤-��c`.V{(��y��������x�PG+�>j̣�e#H��[��,E"�Y��+)5G{�X�t��<��r=��#��S�dε�&�9��
�
g���aޤ��$5�'i�bf(��JH9���j,���<�����^0�#}��$�ּ�P�	��sAv�U��z�(��&��īw�
-�4�R&��j�J��/�0�xwZ_-��0=�y,M(��>P�Dg:���-�2�7 �0�1��燑B��
B
d��a��%Y��j�����Ɍ���
��
����Z����j)Ǔ�إ�&L���X� �Їq~�����q���@��шu+@;���|ʊ��>o�3�f��Uh�S���� X�E[37t�A)��
b'4ħ�<s��D!�LJ"�ڈ�XN�:!�7? ���������$o0H)� ��bZq��c@hɴ"dK�tN}��d��nh��2�bR���E8
��d�����<ޱX��A
�^e1=`z�L8+LI_ާ��D
���F4d��2q��8��
�i}X&�!P�

�
�ԥ�"�a/�Ό.[O>�)�b���tL~�TÄũ�����
�=�M2b�0�<D�H2U�Ȃ�
���=�2!����Œ���۸(��
��HL�~0�?���C����
�X���ש�
�%�{��x��\R�p�ƃ�"�R-�*�C˘(��S�'uln��Oɒ�%�fJ�a�ؠ'���,.�T�ْ%(�E���`fM�=�G
2�\�:�8D�j.9�K@�v���ԛT�K���c�9����ۨ�yUs��S������[t��xM�
	P�Zn��-�Q���w���������W�18�%@Y�s�*�
D��bת�MH��2�Z$c���M˧*�r�4, ����s��5�O�#�F��_��e��A�.��$.�u���Qn��&�_���qk��5
��aTR�t�kyf��m���j�£Y�:���ا)ɺ�zmYG=�v�kӓe3�i�y�*wm�O�u�k��-�� r�]��2���$` (]��F�c���uu�k��
�"�o#*
c�%@�.r�����/�a
�Q"��悡��*ל=j���m��5����Hr��\[�����RĹlU��>3��QHA�����N,��(v���{�B�xU�'�g��53��c�M�zmi6��z��j�=�y���Z͖��i�
,.�΀�A2��.e��(�ݖ�3Ffb�+� Ȱ2�\9Ь�2��i���g��c�F���3+rb<�Ds��זK��P1��׬э�W���
)}{
��Խ
$B8�e�jp�<��B��8�\�cvly�_C-�D���5�3I��@x�ҷ��,�UBz�0���e��!�	�n`#y&f۷� )�ebl[�
l�<"R��?��
s�$Z�3-��w��FRLc%���F�8-A�O
�64iZ2J'�.G������6�p�����:���
U�Q�ѳ�`c��`�09�
=u
�1Xwb�����V
+����ij�-R�����T,�4�V-l��&SOn�ja#�W�:ǡ2��na#9J�6JH[3���
����l��J���P��	��u�(9�<��8����:
-���OO+�����5
>���c
S��6�*��)���5.�T,�$I[U��T��ь�U���81'z��x�_
�ŁFu��+�
0�$IQ���>tb��tqy�T�����O
�`[#����}j
�
���yOl�mڎ
��
��g01�VR
-D�z2ʟ����s�4��g��$�@Y��d� 5X�R��_C�Vz�
X���`V at f�4`h6
گ!X�����Q���k�:I���6~
a�2���[��g�'��ګ��#(�J���@L�`,�f�^����rnW^ЍW�0�JV\���WC�*�I�,M���gZ
�"��k�$� �ʌi�F�5漀M�T�jPSc�	jj�ٛ���is2�Ӷ�L�rȳ
Ltګ�lИ�=�&*��x|k�d���|�O�i$|�
�6��MA�>�gc/.�|�a�5���
i��̆h�g
̳��d��c<
-F�P�1�ʧx3�?4�n�3#��?�����V���"�b~�+��
��C��
-"�S�=��A´������`��\\$��a'`��/�=�RmJV��A����r,3(���a.�I)N�3�G+#���3�U��&�cb+�0�d�2�d[�\v?L~Sܓ�K
- �������"��ܥ+��
�&C&Q�
�Rn�U7�Tš�z,�˚
-ģq�f��T�U-TAw#M$��e��d�@�>up4s�U���mh%c��L�H�n�6@�W-�]K��I���
��@K�߶����H)��Z�r�Y�/5�����0�SO 3:1e�U�Vp��
n=̥q��Hu�[1.�a�\�27�»D���U�!5-�r�}��(��M��'X:�v-`%SK)a�ˤ�AfѥT���65+�S���|z+��'�BDŽ	��`2�N)�,H����t�
֪�L�
�|'�Vcjs)�L�'=K�/��.��&,A ���� 4't	0�R
��C��3i9יV_��R�/�n�n���q���Y'D�_`1�aS
[�0'�"
���������#���.�]>+U�E[�9� �(u��j|6��#����9ui��2�.
aX4aP
%��#-)�L�Aw!WX�aU�\
-5лǦ����s=t*A����JR��N
-KDd%@u�F
�R>��7�X��>�˱��ݶ��
-QG�D��T�
/oN+:ߜi���<Stْ�,bS~��B	�3(Θ�h=Y�认p�[�ro�^j�Qt���"/�"&zz �RP�LVT:�_ϭYJ�S'���I�eeօ�)�~W�-�b�Gi�(}��%������L�/,`�٦t.�|��)3�W�5k�X��b+bL��6�
��b8Ƚ�B�:Y���S�'p[Rt�[-��X��4��^�𑒡�G�,�ZZ:�����zM�} �X�nN���R����Y:�ƥ5�@�
��؏�&⻐m-=c���C�
�~HhQ:a��!�
�n�v�����a��S�(]7
��
�
���͗�t�b�(}Ԙ @6�=d��&QE-?�����L~�2n��y�|���WmGD���E��Pr��-��&F8�$�3�8l�q91��Qd�cK��!!)�mW��f-�����sS��%�'5�I���ܙ|�r�z_�e�U�K)�c�2
��vAJ���oީ�r
	0�d���I
"�
�i���Ƙ��|�]7B���@�a��
G�/�4����kh�2�z%Y>G��
-�Օ�g��|A�%_9�
��	l���!1܌��x3⫅0yV�
�ɰY�k2ݧ
-I�&a�g990��͛�U���c
!�z'2-���e׊Ԝ��M
�3֬ i�
�`�
~1� ����w����>�i˟�V\9)-
f^�6�nZ�J�Ms�;���ܵ4�&�~\��u庘J�/L㴰�Ћ�ٶKs4��7:���QR�!��eЮ���
-R�h����Ӹ����|���)(�~.)a^�-�=i�o��yӆ�Z�اSѢ�
�aN��-@ںM���,$�5!��Z�@
y���#Xe5	'q�=/c3JB|��:.��Z��ÍR?�TbV ��\EpNƏ�
-��
��������i쐻A/` �
Fr�
�d���G��*|��wZ��~�ƴ��3f�
���&s�f�̺B#������[�m���`�0���*�]о;J�
-��"@mu��d}fQ:-gm�i�B+==�a�?z��w���m�"����Y���ӽE~M3�
1�L���x�#�6�2�ɰ�S�53�t��-��@���j
�>��	NR����ڥH��2�
Di��	��YIe�~�3+�QJSڍ�
�Q�37M���ۥW�KL`�{{ZV�>Jg�������+��`�n��+v��mcG�]�lP:�X��JEp�4��u,:6Vzۥ�e6��N+�4ŖdG\����S�ֽ��b͑1D�m�7!�+�!
B�S���]f��&�����jv��ܰt"a7w���$|�Y��0d�Qod�P�#�J���X;�T:���Ҍ�F"#kB���?����
ib�hu%џ$
�*"�o���J3�r?���E�����U=�y��Fyjt{�2�u�y��<��
iyu�L
��G�nTᤙ��K�N[��f2W���~�U���i��;Mլ*[R���۷Y,k�(��*�@��|�Y�+�U��"UL,�M���tղ��2g�K6 [...]
-Ǩ��
-���3pjTpK�THM�T@�Y�R���}*��Jk6�h��l�U��,���E���F
-WK��k��Z%S�Yu�բo���JKiVUJ��"��#U�6�T�2�E�REp�����V�]�g��
K�^�M6{V(e�T�J��0���f}�
�E����� g��]D9��K�夣��Y�oWxN��n/QL��t6'l
-Rg���b]
u�يѪ�=�<r���4R��Vv�f�oe�Q�Ë!G
/V�V��l R�΋!IIW�f�ue�REۋ���yW��f��bQS5�
�.S_�Z��񯮘�͆U����جү앪ȿ2u�� �@�l*�̫�9�6��
��F	��z�ʠ�c�*Ct����c��(�zuFsD�,53��^�nm�?�J��`^��͠ɣvQ��Ly8jb�]#��k�Js��n��j��޼�?���+o��9j��5��Ͳjϗb}�i����X���)���}��a[TԎE%q�'2K(�l�5���Ţ���Uy[�bxv��2[9s��W��&XP�d5����nB��V�H9�3��
�Mإ��
-�)Ay*.��BE���Eh��P�
��Q
-#� ��V
-���

��؏��P��h�#�h%�|��qʗ��Tǽh%��i+kuЍV��p�����;�Y��Z�i�Rj��u���O

��zf�4�QZ�Q������:,�mר�ʴ}�H�&�:�mm��1pʬ���i(��5
J*BO٣��>e���-;�
-0��i*2���T<c�h��!��O�O*�`
}ٴ,֡��.��>�ISŌ�
�*�XQKd�2��x֕�V�*����U&a~�4(��]e�V��ł�
�vo}ym5/���ή���fz���:��v� ��ZJ`^�#�����BK`���F#rV��=3Sl�?b��+3��)6ZCX�*J:��ӎK#+Q0��n��[���Re`9�i�^!��p<^dJ�P"�J��
qB�
U ���*��	�۽�
����z^
-W(����4;�,�"C6I2�- �k��~N��_���a
[�[�S�j�8�3����O��-�"�������j��
�5�'��$����l�v�遌Jl,���;�Q���
�z����BWg����u�u.�Id�F��;M"�>�܉����t7h��I���IB��ÖD��U5{�uE|=�Ve}=!�>jR�*�G�dY at Iɭ蚝�/��
��Z6�ϛ
�_�ڙ��c�o<W��h��Ϫ�,P�
V�`���5�wl5| �
Q�y6�n�'O�~�#�r�>
��Ӷ���juۏȦ�
���;c��q ���hA57L��
c�鿩�5�\7i(�WmW�K�����_΃��H=S5��4�j �,��v
-�u��Jk��>������Y�� ��3A�U������y��sd�
-=Қ0�m�ZB�u�n�P���A��0�F�t��ڞ ط��S�6�S�r[�V;�w�U!��8�z��fMT(���T*	{H��RQ���(^�ºp}R捻�
�Hc=ຐ>�$%�
 ����Iug����)׮�����խ ��Se<<ۅF;�=�.4u#&�V[��tujR]
�m?5��
4��+�,�
-2�bt��
-�1��b�ֻ�
�6%�,��-5
=��acb�f3=YM/�%dZXe�
����j,�n�<0h���o��V�9�*ӑv
rWߠ�aH��V���[�i���T'h�̡T�c�K�:�m�������86�n=�&�}��Άqh0)�sqx��AL���F�Z�D?~U����z�V%w=��"������^��
-��.r_H�.�_�Q�Ⱦl]�_Qs]�_m�u� ��Jk��zS��(�Pz#(�R�)(��j����|Q���(v�|KŖ�h3G�����IUbD��EjY�HkR���ƔxU�Y�s���pW�D���`�V��b�
-�����q
)��C�����q�9
��פ�X,6
-�
-s�dU�V�a,u�iT�2
�Ji8U��Tl�����Hl#P�eMxUو�et�d)�Cg=.�ߖ^�
-�^�8k�5�^��e
K�gF(��caJ�tn���5bb;��-6M�D
-n�
mT���pU�ڐT���/�u���}A���p���8 ���
Ɛ� }]�9��_d&��N�I�
vH���
��s��D-�5�7VL��E9ᘍ�v,Lrp`�Ñr׆�At��
 �F�kq�M��\�-�w�>�Dy�mK��EU�_��\�
@�찞��|��˺�^�V%e��UAfM
-uMgMQ��К0�Ӛ��:�zo��]�-�oSoR�*�^o)35#��ԓ�8Ssm
-cSK�x���[�T�x��V��k�?&
��X�Z�>�
�c�_o�Tu�3P�e���W
���z),
��:s�3�X=؊_&'��A
H01�����Ĩ�H
-�&���
A�qy�h��J��42��6Z�t��Z8BEN��4���#snb�z1v��1��,z�z���n��b�G�'���C[�?�#ȗ'y֋
=�e).����
u���A}#�<[ˉ�'�
A��|&NM`
�jĂd b<�aC�IK]3�g�J�J�&�1�4���h�����!�6u���F� ���Ƌ�'�<Iu�}<X�3� ��
$Q�R �3�����s�}\� �=l�T{�6%��i
��-��0�w�xr���E]��7(2bb8�Ș)�8Hb���=c���
~lv�y�������d9N���Ckv�����
Ze5��Q:EƘ��G����
�ɆX:��hu����F�12�����^
I�B!:�W��~��������s���'��
���= 3-6�%M
�0�ײ��M2
��~�A����e�&F���
	
l�~�Ȓ���A�hd�{��X
-a��1����T؂BT��R��'+OfN�L�3$͛
��k�{�ԋ�0�}�
�
�6̽�]L�򶬼�J��	ccH ��E
̐wRC�wr���xa�8y��(}�?k
�-�Gg���&U�e'�f�N
#SlFmswAܟ1��!3��4#�pL�t�5A����
=��
��x
��3\f�S��� �!@�RO���p��
�:̀2� C���}�*A
-�B��Z��8ݱ�d�
h|��®����b�e�w�C�����xNHC+�����Ҝ#m�6��4�coBZC'6!�AjR)�B��:��qsu�\
�

��I�,�D[�P&�qE
7�"�,9G�&
/�	
1<k$�R���S
��De��(1O
����)T�X�ڳ�7�`d�-�%
-��ǖ` 5��Ӯ,K
s���8��:��=c�<��
L$��ߘ��Jر��"���c�-K0X�$#���Ϭ�5
�`�7Ï����CgXNd�:�iآ��� �إ�),����6�B�,�J�������cq4�+��
��n���,��â�!��v1�#F���X���p����T��Z1P��H�[����M��e�	QB	b�b�~�Rw���c.8
�N���*�Qլep�8&]�E�=C�� V��N��EG6j�a���L��3��k��P6��D�?���	��a��ޞ�[�O��(��Pߤ-���"��'� 
*m��Q��3M^d���c�֐�G���������bZ��Y1�2.-�_4�����4�W�f1TvC�s$�
��V14�C�
C`U�ڒYG�2��+1��^J�Z��� NL�
�Ô��Ϭ[�1�wd�ˤ��s��
Ԃ,�F�Zr;�K0�N�b�c,0��
����R�J��g����
�����|l�$jo�%X�ԓy`�eN��|"ơsϲ�%c���l���n
lՑ�'YpVgQ>��9,~/��K]�_T��H\�%4�������ՠE�����{�m�p��8��>�Ӳ
[ш��'�+V�Q���$�:
iQF�K�� �m����{�ӧlI��?
,Co�wHu��bd:Ci�<�/!����cz X��ȗ 
���
�(ђ눯��SX�˸@?'�m��w`��-�N���~
�~��tnH50����{<�$�l !7lȕ:Z{ZF�l8ٌl
bJ�����ۘ�b+���`�pZ�p�17c��6��eؤ�
-)_�@<����b{hng�(B�.1-�3�8��2
-
�/�H��8b��P��+�8��4h��@���Ro;Ǥ#�-�20�
-��U�I�7L
�Ǿ����Yx�� B��Y�AT�T���U���5��<�R(�Ǽ�Yخ"Y�Y�0c�'�0h4c�1��R�p�3G#�	D
�e����}�<��4H��X�
;���	�#��0il�Q�onrp��I�;�`&wA��F�$K�0�B�(l�1K�+.�Wq��֯8�g;B[7�P��={Z�~��ܚL�
J�(fz0’�Ep�g�%�q��$��@Yb{u�'Ṁd�k.�3I25�˶a�8J�F�ٔQ:���0��ڔ�F��
�r���
Ys��ۜRI
-����\�ٮ,�E
q��
J�h%,+�4wMX@�y/�9L��̡j=�]b(��cY�@����8	���V,�L[
-R�[�<-�|� �Q�`a��ρ<f���
_j�Q��w��
�(�i`���+9P�����4�*C����R�6(MVP�آ�Y�
6@��(�Q�R�u"��?F
E�^����)
-s�K�id��&e�M�Ü#���]pFL�&K�2
Y��
q�Y:]�u���8���
�d�0.��/鐲b]M�^ ;�MqL
@�g�Pn.�%9O¢0O@
-�9yQ��0NHQP��N�D���A��j$�\)1�
Na��u(f��=]f�����
�v�ף���1�8��.C�
߀*#����T�S�̰N�_��-�<M���4�G��#
C�N��}~=�z�-$��)t,bȔ��^��v&����&H��^�@D'tF¤EY���3���`
��H�"1�2,�"9
(ȴ2Th��9�t�Iy�B�Q{d�,)t�R�!��>w��#�I�c�*eS/�˦��x��$]9Z͝LV��4��(1 dKf��ԗKs1�1��	J!pL��2��b�,���Z��]p5;�q<��R2&ۑ�9�B�U�MR�
ܔQ��k?@ݰ�f[���.�沾&ay跁6x�N�R�)z�r&��WQg���Ϫ��=h�a«PE
���U<m b�i.S��P�Mksּ'X��V����kR���W���
� Nϖ�rQo�����=3�mh�	yP��Ač��ճ4qђ�ڴ��v�S
-EHlW�=
Y?b�242�S�
-:t�}��b��3#[�6�f[ޥl�m�QD����hb醀�
A�P/-�h�#�r�͊i0L����I�K��C��I�mb$�
H�ZM	"�%)r��µ�D�Q�[
��ej��f|Ǟ0zz�pԦT�;�.i�P����I3��k��ُ
�1i\�z[�����"&��d�& �ȁ��5��;�5źc:�Y<����L�)h�C�')g0F`��V�Ml��j}�>VZ,��52h�8��0�9��H��1)Ȱh]Q���
G�U���2�EYǬ�ҞF��ͱEU��a��S��Dq!ّ4��Q�l���TA,�֫���䍝���XK�~�R`"S��4h�!�:�Q3?��up�E�O��h\Cw�
S�#S����)f��O� �T�<��,�B�@�<+a��B��6mk����h���Z�����/tي�P:)9~r��eNjjh�
��4'K���V�IbG<������j=���i(t�H;8e
�1t�>�@:l����x�A����"��C��oX7
Г�{qn
��@W�� >��YY[hP�-�٬y��4�5�It,�������s#&0=�j����ז'��
��Qۀ�)�B�=@��2���LǕ��3,��3w���]��i7Җ<�kL7�@�_[�W��=
N���>���I��@ӹ�������Ņnh[C=c�����6UϺ
\))fG�2�c
C�Y�
-�T�oXs
�&�ߜu{y at e
�=���Nk�|lؓ)�yc~�b�[���ihA�ڣ2aS(�P
��i+x�DaL�(��1�>A(;��c$=@���K�Z~�P���<
zj��PL$X�Ϟޔ[�7
�����ʼnV?2�m�-W��Kr�P�C�rrF��
(�{vah�_8�
x��7�u����
m��}j^
a
�M�n�HJ�
�O2˙1�y9򳧜��3	Y��_���;g�ar�+�c�[��{�|c�/�n'�� �Y˄_Zb\��dEsL�� � o`�u�։�
�X:zH�	��H�#�}L������	��>֦-�S
����l�6��dL��
�uDT,B͘Jd�
ՙ�e
-nf<�X���IBnx�Dxf(��
oB��2�� �T���XD�"�em8.)��ҷ
1s!Վc�4˸�A�)�X����±	%��HD
�%�z	@L�@�G<��a{s;�.1�ĩ
ғ�"zLq��)/�S2�I��L�ZMmj��0DU��z�����6��j�W������Vz���‘���&0�Xj�������S��"\ǎ�M8����5�;� #
D	�{Y��z�8���Ȣ�#�[��K�!0:��7����y+D�yo�=���,Bw�� ���X����g��O�qD�l(����cdȐ}�Y
PsO>`
Lӱ�)h�� �m��hE#��j:�R�mG)��Ƿ���������G���VK�:+����F�Cd�_�~U��q�r��0x7k�!蘋n�Zӧarl�F�:�a�#�9Z��v�
��HMa�J�;�O����p�@��$Rh�I�w ?:��e��"<���q�H�ݑU�hd��p�@��m���jH��f']�/�*a0
X27��F#8��`�5�T,��ܓ�Ё{҈*[�I�
H��K��:�R�봶16*�҄ie;惄5j4�z&A0|�!�������ы�+G�(hNN(�!�#b��=��f�T
)�&p�L]�,��
�g9~g�n8)�m
-��K(t��8V��R����}C�����1AZ}�֠d���9�ĉ;��9��9�C��6��x�5��V��J.-�}��W_��S��V
u4�`�)�(�W�Q�Π~��*Y��y�7:8���;?%"Pz�����ڒ�lg�d�,��]0��ܭL)�n
�|T&	�}� yf�6l�[	'�,cW���@B�L#6����NYx�{ �<m�q,o�>�3�"?�6�8O�"W[�
jbP
-kG��N�91$M�'���˿�^9��0�-'3��O�'y�Q	ʩ�i�
;'�2�"v�">�>�
��Ym�s,9�\�̫�o\[y�H.��%�PVFЦ�>�Όtm�t#�W3:��:��Ɉ*1�@��R�@M�J�(�+ϐ:�
q�;]m�u�
 ��S&`�tb�V�"wʒ
�@J)�QشY��i��X�D���ۮ�
�_���E� P��!�L� ld�f�y�M�1aA$)�
?��.�y���N��{eߗy�f���)��@Cd�N �E��\y%��h�U���<s@�ڻ���g%���=$�vL�!Up�jG��
-�
ĶR��T�"�Ũ�<�N�|

�	,�h[���r㳣
���?�x���Y�"����|�^,7L������;�,ו��
���������-Â�!�`�yL�n�����7f�Z1�X�Ԗ���bsW��kD�ۘc�����jX��p
���ӌo�jv|�-��Q��P�k��\��\K�=s�����^wyo)6(,��׺"o^�]��tky���
-�Kq�R��n'��f-���Ey
-�R�͈#
NM^"�;aF�O��|"jL��/ONm-
�=�+��m>�R��	e�p+q����j��||�k�����~� #�g�
>�Ο�X�o"
´
����8���V�FX���Ί~���!`O��0,�=*@a֝.�i�f9�8ۭ6 y–
@@�f0Do,D@ �PL�F4���TU����m xm�v ���f�0k[G$`߂Cs��/Pwo<���
~X��_.��>a�!��0�4  �{��I���
��ou�
�3��7(�v��t'@j�7�5�,��}�v
�:7Daq�.���֨���rE)o��g�snP�
F���ͨ%<���/�m~ ���YV,{�UDL�&��x��.	@��r	��m�&4�P�-X�H�ք]*t6�ɬ�
�a��b�M
�!+>Bf/6��2���$$C�ʚ�
-0�Lgh�	�Ѕs�Z�ޝ]~vm���ݻQh���mJ94)������ۡ]j�$mW!�
��<}��ڦ�C�X(���Pp�k��E<Ϭ{���P2	�w��Kh�
�����|b/�t4n��j��+fK	Jϊ?ͳV-������
�dղ�ŰA�w
K�����f��'|4s�;��P�;��P۰ۡ�r[ݳ
��
-����X"��I�_��jaro����T+�U�뀇E7'=��JU�W�"�(�ʽ�Q!ڣ����z(�W"5����
+�n�
���V�y�*r���
�d-h޾��0
��Z`WM�>k�~��k�?N�
d ̶y&l@/�y����
-��+oE_|�
̃�
��M��l�z��B=�u2�v �ya�f!���PO�k�SFY��M]7��F':���'̭�(�(�{��<$a]ё��0�`[v��u0���Hz�ӟ�eR%5�7w���ٺ>\8O|AלE��
��~�<?����[|@P'�Z���s��0�܌2ԮMR�&� ���poF
�Ti�/��dv�
���r8����;	�4�@:�V�}����-\C#�?aDq�i��u��e�I{�6
��d<�#��r���%�x��%�{��c|~�x��e�*�����y����1�-'��z�k�Y:�냼xg��d��Ɖ^
<ea��蟚�9�`\?�]}:� ��;��x_�����fK���*��eھ�uU-ӎ>�`��
�ʧ�D��$/ ]&�0v#.�t��6?_�����~?��mP�p��In���0���QH�}n� �L��Qa����	���Y�K
���k��
��Lf�H}��rF��K�Pv
q�ra�m�]����N2.z(�]��l�gZnH+x�iRI��
-���d���^
�,�鱭�.�#
c���l*�`8w^��]8��<Yq��R!�ؔUHI�4��ʩb�O��FŞ��C�&���<�1r�c}X�vj"/@<Z�:�k&򖅥�Ae;�iD��p8�l
��gC���g��p�b�'h>Q�
����W���^��o1�	�.�T�]�8�,M�79IE��
-^���$U�K�Ae�
4s�5��.
	
�NU_��
-��r,ٯ�,|E����')������G�Ì�_���#�df[�@l�1�I�3��>���=�,�?^g�����-
�bv�%h����m
g�wfa?'yU�UM��:���
՟�7
m������cU�c1���9dijX�2|<�n

H#�A�H����n�o�x�Tv��lG8����{!Krb��� r|?���M��A'�?��"�Д X�"fx����؅7�3J3��A��%N�3$�l���|��51*	�6��~H�HtܑhQ�A�ɐ5����d�� �D�d�+� ,,U��n���:)4���H�2�Z�*�":
=�,�=ԧ���/aۨd'� �D
?l?@��:�5G�ګ�}��6�Y6�x+�~�}���Ǐ���n;�}�ь,�/Z�u
-D���A�0�31�e2G������
*��R���[��SYw�/�v>�؝��% �;m�
�HaZ�|	_!e��&�h,���%��ܤYg�I�$�]_�ȣq�<m��t�N�&y�Sa
��
-(b���ڱЬk��Qg:��B�8���
'�e �ߣ�;�ۯSBB�0�/x�&�.�o�I����_i�C�="�S�.1�og܊�<�r��Y��T��%J���:����hi����J�N����Hn�(_
��@3���#ܢ}�^5�$g�Y��Nۿl���d ���RG�P�tw���x���~�1��dG!�
��RWt*����+�&WJ���%j��I$�
l�!���L�����)� �=*oYh
-N��TQ 5)����
D�W�S<�:m6�D4#�C��U=
�ֵ�4н�B�
	?h��A�a�2�cթҷ#�
��|��1U�0
st�l8�8��1;�x�' '��z�1��6#����
�D'��y���U�폾���eP�I�q��b�-Q�rh���7�\�Ԇ�~�6�
-���<Ěi=9�e���V,����#���~%�.���
����d��Yz-�0(N�
�6
����;K�
-ȕ}b؋!����ϙ$[Y(��M3�i��t�4̀�/�s�y���Haj���<���$]�&��3A�PZ�G}M~��3ٕ*t۸@d��bW:�
-mћKd��?���wσ!��ؖ�|*�
:7@ {�gu�#1����k��e�*�*��!�	�Ȋ�����y�&UV�H
���x�>u���q���z�H�
f��=KUO����Q�m*����[ǝ�j�Š="Y�cI>���*䤫��#��0�����;u�ʥf
3; ���ҙ�{�P�p�cp�A��3U�7gJ�-{������"�I��u�G
�� �o~���1�����Y�|��n���7���Ξ��c�UJ�ƶP��7g�;Jo�x���!Ui
�8v���!���:�W�$Y�Ҷ�� @�`*z!&�����hc`s����4��h����i�v9��y'uNZ'pU����
44�qe���392U)��I��7B�R��"9��Y^��	�LN�F���B%	�&�t�7|a
��e�����Ir���rm3�@P*���T����4W�]ذ��
�����t�'���GXd����2^y]��'Xw��&֝&��u��~���6�0?�� [...]
-D>�W|
�C𸒰b���
��H��|�:���y9Y5 at 5Hۈ�6��%��2���6%@[��M�5�R���D��/t��
����i�2�+!���aHuW@�R[�`Ot!������ �0�
��D�S�ȶБ\'VJ
P�Ur{��o�Ȑ[cK��
b˵χ�n��T��8���
1Ps]&	J%�W���i&��1�
U�f�ǁI��إI4��VT��ɒ�%�D��Ջ�I*ņ.a�4�?�_O�JQ���n��'�\��=�KlQL��K�B�IPOq��C�"�e���
� �i�����Q���
�����aVH̋<`������
�,�/�����
�W�9��Щ�FFˠ�'�r��z�šAu����	����޵��󜰱Y�i��Lo���/8@�L58g*��h{��_�8XÕf�?�	���)�e��'�U���=�`��v{�X�:q�M��hހ�U��R���M%P��\�AKޘ����
��U7&�
�&�i[[
�Z,�Xl�����΍�:���p[
-RY�t�_���%b{�%��Y
-��v���:��\�S�3nlL�y��J]�EJPjg��
KZ��Dmc�N2�C����v��6=�9ޱ]�'e�H�8v�
7�̚�'���\)��֢���
�u���u��ύ�N��\�5ʭ��K���Ceo�T��B�N� j���f	 L� ``�[��{��Q�R��͢τ<�M���G�6����פ�M�G�g�__`����,:�o�����/�F�;�k��µJ�?�K��Z���y��!E
��i��O�)g���x�R�1]_��\�����wO��>얹�ğ�]�ÄZ@:+Ձ\��]����� 	Q�39
^A+�v�>�鰤��nҠV��F
ʮTU�v�]���;N����|�
]iCg��$D���Tv��B�ro^��T{��!)���FP���'d#�o�����!��7P�T�*��(��P�
��o���2Ts}T����
И.~��n>7ڥ��Dž<�.�hˡ�-��e���,^h�Ȩuշ�P���%)�F��\Iw�(��]��dDL!l8d��.l�q�J����:I�پ�P�}�n�tZ
->-��^;)��o����
����;��4�
ph6�t
䡫A��
�to�⤦[����]�`, �|��t-/�4E����S��ʕ��$ar�B�p�{!�0�5��Ay�.}�*-�-D*U�GrIX�v�(���;�E
����#KSo�
-XQ��YO�ںMtꭠq-�lo������R�J�o
��Nߡ��E������=�I��j^��]j{���6��h9r�p�"Ƒ�����	
'�`�@�JRS6���g?=m.�do�l17Ф�8�/�Z�O��n���S�P/���ɽ�\6A�/Z�,t�5egR�� �p�$��/z6�`��C���OM�	77x_�� �أ���t�s5�k����z�ڻ3㿝*ت@�� ��*U
�BQ\��m��	�d;���KK��b�E
n��i�8V<�IoO@
*�y~R]]ܖՅ�:�p��ׇm���@
�W"""\�����M	���#m�
���%)����
:
�B:��%?#
fl� �jĔ�JP�O�Y�p&�DO\�TA+ZAV#_
��y̛G��LCS�؞�����G ���7|��J}@-Z1�ZrܶV�q�&Q1P�c
��N�6���曑!�@.��9<�*v�m���'�^/�5��m�[��k\ih�6�\�$dN��:�� �tc��B
�a�Fm@	�8�"�.�V
7?�5��r���Z󶪁�f�
���gq���=�;i�3ҧ���`ǟϤ�Ȓ��*qh��w�
s��/yR:�R�eC�
- ������<&Y�.j��O��4��T$D� ��ue�������[4�
��#���
��h�[��#5K�A
�T
lٙ�u�p�)�*�
5Q��R �]
ya�+_��.'/��[� ��M�t�feg�pH�BtdN�T`)(� U?\��T2Λ
E�u�c
�n
��8^��%��0�px
�=Я	�|�(�}�| ��?�o���q����K�/W�
;�$����a��cW����D>�
;'��n������^
ud�Am�s�n�@!�1��Ⱥf:@+��W�K?p��J*^��9
�D�W�
e"[#��R,+�;G-�m��G
{�gS_AE��=�t�'h]��)s-n:���̞s�#��I�V��yD/����N�[���=�i�7�`��z�@t)�����Ε4��J�|
θ
J�"Aiy�o�t^�`ԶC�}��_��V[���^@`�
�C�����ˀ��J���`�@�(�?�����
-M��{cӠ��3��Q7s?��'�
-�
����/+Q���~EX>��yu�!
Guꆨ]��.R�6�\Ԇ�!=��r2I���]�/J)!�]i�~B�e�g�q��C�I��_�lX
g��ܰ��~��m���_�پ�����D%
���W������JM�kc��<u�+)O�`{�[O��
�R�c�ԛ�<���F��λ,td �VG�{����ރ��J�
�����Q��N���<�����N���.�s8X��.�=%�
��e��n�i�����r��?|����DM�@%���O�8��-kp�9��P���	��uF7]�`���'��;�
^.���l���n�����0/�]���F�\u^G���(i`J��f [=m��DRdK@��u�5Q� ����x��p��Z
v>�:�$u2�M�a�v�p�]�zqؙ���Ή |u��1B\t����.�>�u ���ފta��7;>e8l�Z��;�.h�.�=m
vH�,���t5:(��N}U\W����
vf�Qj��-:��@I�e��?^��
�Z�m
������4w�n���W���z��a)�h�1���mA�EF%ԁ �

�i�u`�u��]˿�kc�%�̭��(\�F��u�>�}��b�w�m˿�C���A���X��>;
-��@�?��_�y��`��}�� O	��ؿ��/����=h"jX��-�w�r
s_�e��!�*hSY���k��<uS��!�q�
�y&��(�g����k�
-vT�b��{$m�l���������<���B0���	�������	��\��J0��/�ސ�i��xy�|I%�53�����[*�����7�*j��,� ���s��
-C I�yWJ�:0ί���2��?��`���� I���ց����u���-�q������C˻'�3�„ɶ�����p�l�&n���
3��@=�%��9d�'����nYؐ	�y.ظ�d��G~J��^�?�{J����
��
j�'�3�<P�uv�#����n�6����
��wx�尿3�a��� �y��ޠ�Ե>D�|ƴ����� �T���d���\�!���eBG��io�$ٟ�Z_u��2��<��Vࠁ$�;�ۍ� �u8[�ԅ�� DN�(�:�䒾��/	�,�+i!I,Ik|
7
-	p�X)B%�F#&��?]�<J�	p
��x��(��}&<��+'�$�1N�=N�Wf�
kF<��΢�7�/�4s]�jc
��z߾��T��<x�G$:
"��<x&6,@I�������pq|�������^��+�
�1� �,��!lV����_�y
�:�TbJ
/���ے88����C��^�}��i�	��g�r�~��#�'2�L�}���d�mB���޺me�`t�%�ϴ�@��ֵ�������M�Z�x��v+8�]����?�']���]���?/�|��ˀȲ�<
�S)��Z�"Nh�6�}Fʀ�Ȩ��?.��G>�S�t:�8���`�	.X��Ի�]��!�#�j�����y��%��9a��Ȋ�$���y�=E���< �[ۚ07Y=�zB�vLh�EИ��
-�Cj��v��J�>�		z���P��cn=˒� ss���	�Z���"�p��MD`�X..`��Q��*��I�9tK͐r�\�f����Ibq���f�}�Kr�z�K*�L(���W�L�\4��� �
�
3S�
�c7Q�
��h
I13���2)����ogt��$�NDU�Ёܰ���fM.�OE'}J��W3��
�
Vn�
%Xi|��G��gr��#�$�.B5Z�!�)%&ᔜ-�.��b@���[�\f���)���
�� ��s��p��c^�	D�e�|�qїUh3"�@�)
~k�ھ����W�`���\߱=��l�X�^�BGR���@�O�"��(�=��7%��M�i��.� 5KZN�K'h��+t:^ys�!byڈ���S��*9}��倧y�\B�W}~"�m����)����8���H��)��y�0j��y�_�+b�>7�@
��Aa���)�7�@70
��
-�9yM Β�@nzhL�
XdH��$·
�Y%��Xw��8�<�Q'WY�\eez�G����I����i.{)M��#V��v����l�I
�
�&�ޢ����4�M:z!���"�N6
Om��mhz�Z2�����hS=
|^qF�`X����NN��]�'wgK��h�B+|X�&��BwmO
L�W�x����%�@
-R��)�MI���
�n77����:jD	�A^S� 58.dwͷ�0
���Ю�X�M#X[���.�����������eJ��}�7�V(-���'s�p� A���R��ۙ8��%���&r����M�T2l�V�y���fD.���liKُ��5���v23�bv{ضE�
-�0�TܺXYd�a�WW�m�*
���
V���s��ݷǤ�� �(X[nC�'`�j�%U��@�=�
K�=�0���d��JR%��Ft�Ģx7��q��&��$�d�R-�K�ʦ�æo
œ�8�T?ظ�p]L8��#T{��n#'~cm�� 

.
-�W}��~
-�@wM�(�9Co�y	
���%����G�>
���(+���t�M�B
ڦ^�+Е
9N����bڄ����$���NN�0�
>@���$��hI�;��
6�o-�#ϗh�ƳJ�c��.u��
pn��(��5�2mB�fҢ6�!>��9[���K�f�����&�o�#\���}[�\�(�g$u�:�!9�����͐�]|�䓍D��\I#Ȯ�
-�|M��S��t�~B₯8�)��Z�tI�C�I Kjٵ>
I�F��a?�R�
�Z���ͭ�f»9
-x�\2���<�G��n4k
v	�A
"P�`}�4eS%�s�>�O�GRd���8X��ͼۋ�31�YP�<6?�"CRΗ��͕È퍇Q���&�7ھ�{n��6������5�(6R�
e���&j�)�z����lNh|��$l3��њ�	,LdH���
�mD/"��J���E�C���9~qm"�kou��R���D���ʀ�$��B�Z��lL���A���H�q�S�����q�ttI9l3�������g׍�2#
-�FTr�fO�
�F:���썆
����IĊ����ؿ.1\�b��/��3
���A���Ih���
-H<��B��\��n
-�������"�O�x6q�k���E	�rEߢ�6m��F�P׈� ����������!���H�)qx�xh��<�R;[���\m
-0z)W�M��J
vJ�Wt�H
�Plʢ�z���2+`%����Yg�ms��0���L\V>�f�‚�����fҰ7щD7�
��v1Ӈ�[ݧ d�ȅ�.4]�*�)�^�ظ����|�:�!k����<��k�5��A3"����E�xm��
��S�CM_ �,M�O�a�["
�?�x`��Qw���A��BT*�P�M�

�kw6�:Xm�L_ބ����ت��!�d�&��BH#�R`W��
-a�H-P�\����dDGH�%t���p
XkY��&����
B���Kg�c���vwi�Q��T����
-�ޚvlA���3l�^*�O�$���
-��R
��,<x�mz�"����U��c����."��k�
Éz��e�2f�ߺ��l�
��x=�K[Ԑ���
��
D���9�:�q�����D*g

��JE1I�����Mg�-�>K����

������eS�P�H�l�� L�-�u�
S�bP�XS�� ���^((�S�� �XX*�*5f�A�'�
�y-f��):�)��ϖ�u]@)v��^����r��J�y�ٯ)Ϣc�Pi�p~!�X���Rd�jG�~�NBls[���Yk
��S0�M}��	��7
�I4(��z(���MGpPY�`7� �kG���XQ�w
-.	DJ���*�(C����zh�k
�
�� qQ#	���Ӝ1M��%R(H\š[���7̃��ZA�4���^Urw�Ds]��bm��#س*������-�
-�����
-݅-x\�R]W��
�8cz�}z�ͷJ£F�W��ݡ����l/���J���^��Ro��<u!�ۄ ��5��,�.߈�\�~h!�V�
Bצ�m��vz�!D�����v6��yl
��
�a�-4���P.WXĻk��m>�Q�

�iT�Dl��fo���<�49t��,PP�
J��F�>���z�xCҰ���
V�>,�����3�K�ɀ+��×3z�������1<P��ag��z�x�
��󂖉�8wQe 	`����k��nOj�A�rZ�e%
ݟj�A�8.F�sh�=�尨i^!���]oo$lT��;"
-�j@��y���l�a���u ~kf-���Z��;IeHnR���zQy�P-Hd�ƽ�@7�gR�C}g�EM�()�������
G��x0��"�i�kۦ�
|\����J.:�h^FKb� '�0��5�<�hȵ�����K>�N�S�:��=3���uR	~m"����Ŏ�
-E������T�*{; ;d�\�D���꯽lO�
�*�����>���hg��)>�Ճ"T=�
2]g�e��̐�sLF��_���͡宵��n�Bn�}ˋOI�:��|>
��҈h�l`�u�nA%ycF�r����|8�bt����k��L����z�㚧\c`
h�Bl12"�o�T��{G!���,�;z�a�$	��v���C�e���<�=ð�i����
��0�#�%nܜg�P�!P�G�	}7�5kV�r�cXl�Ŭ�&��O�kXN=C���{J��>�S{���|!3 
He�:���g�Rho�
l�jw�������P��pFtJ1E�­�@���#�|J�����������a��*�o�	�im5��3�]�G��<�&�
�#x�;a#��昶�j�ʢ��q������P,�� 1�ƅ��E?4��
�q�����J=Xڐ���.I@��4�l��_�Y�R�����OLΚ��fh�Ͱ�\gLk:��鴟�g��DB*��A�P~	)Vv+����^�L-#�ȾC��Do���^@|
�AH�ي��('&��USΈ^�Aْ�fE*��4�
�5.�
����sv1� �V�^�\wK�e�V�[󎢧D���dV��S�� ��K���N}�@��
-��vD61
��J�J�4�:�Z�PC�"��Y
�z�v'棡�j*���
)NJ�%]y�<��6&>"m�T�O�MZ: �j9�V�p(�%���݉���H].�����s[,Ƈ��N�!pP�����V��
��{,%85r��2���J
�%x��k�CE�
�J��;���V�2����uS�d�6���.�^�K
/
d���2k]U�s�z�d͛�
-���,�N}5<p��>�f���`Вa��nΛu���Y����l��>
n��������7����4K
�����TY�aƭ�8iW�~�`���V<�c�4�v�TȺ�W`I�>@���-a�
-��ݭH�� ;���>a����v�B�V��K���Ч��
-ȩ���U�������w � ��޺�<� �
^L��m����� �
Y�n
�Zx;�������ow ����ep���.38��
��
���`† R��NJq݆0+B� �
�T���²8j��`8�w�
4~y
X#����y3j	�o8w��o�>�_1�1���0�mJ#����H�ϬJ���2�r;�!�N
�~�]V)�%`C;��^�f�m�+6U�I�ؘ�&�b�Ǜ4^�Y����d�$��mFrit	y��*r����mj5t��l���s�w��.
;��<r�VZsѱ�i�ӎ=Skn<�]��zh�ڦ�CX���N��B;�v��x��b��֪Gl��UOb��Z��
k%'6�*BmJ�@Ҽ�T���bV;4�:%?Lߺ�}j[�bF���|}���R��r
�DI�r[���^�+�!5*.�6�_��ǻ���~�q��!~9��Zu�]��+�����enᵚ�#��*�X�S	]I���ڔ@�)s�BG�g���<ԓ�,ݮ�ϲ�㝬��Dk����ͬ��{]���	�e-��O�V�3cW��k�ɹb�
�a�ZY1q�����~y&o~�&\i�n���D�i���FK��I:sj�(�k����u�hn�w�W�J
�%�Y���_G�"O"���aƈ��9WEv�
-���+w�#�T��pv?��Y./W,n�zfIJ�6�6�����9�F�y|���D� )�G���#��G�O[|"$��Md�"�+7���+� �P��9�Қ3�U�/ 3����:@"B?�{�
�y������� <������w�y�����Dr�ڦ�7�?�< m�x]
�z�v�L��m���ԣ4l�}q�����������k�T�s)G$�Yl6��R�.I��u��!����YF
�U=?Թ���_�&B�_�AT@�F0'ո\��
�xe
��
J(�eY��F��h����%�%��e���,�o��41(�6 L9�y8�Uj	`p�y�"���[Aα��z�6���Z����Wˤ�\p
����ݶAoEE�z�Y���P&EL�62浽>A�j�tQ�<?����o�y|��-|�
�%ؤG�yٽ�3J��d��
��+�4Y|X��p��F�KMZ�!cjħ6 O3
fzb��ꉶDҶ;
O�$�"�Y��'����ຕj�X���f��ޥ�b1���'�>;�l�:\`,9y�y��j�6?(�p@�؂���[��������_T�C��D��`>f�q�� ���y��,���LtӼb��'�27#ȃ}R�_Δ}9�[����+xo7w������,����6���7��I$����W<'�=���S�e���f���eaӑF"�����iQYb1��_5ee�&-��z�A������;���(Eɵ��O[�Rn'�����P
��;�w�ww%ʄ�c���)l�F��L}���M�wB���
�C���-��L�>��UVn�̽8CyF5GT߻EA��]�|wx6���s�^�2<�nU�^qJU5���� �;0,�!�
���f�
'�����A1�\i4�s�<�>2��ԙK����v��з�B�WJ���G�NWZ?�.Њ��Rc�f��YR�\$���]��KuK�E�{�=?8lb���<�kvp��

���)�
�
l���u�"-$L��׮]I�+
�P�� >�O�<Zo�Ѱ�W����o܄$E*�^v,ܽ��ɗJV��6��;_�y�<�;{��A�-<����w�����6(|�Պݓb5��),i�����;��"	�AXl��
v}��Nκ|�'}�k����1�����o��0=��!�
)K�R��`��5�����?"�`4NJ|��OaT�_
�re"�|â��ޑt����Ӌ��j��O����h����x��f���h�<��F3�͕�~âh�W��R��E3���,���wI�,���>�h���D3��o5)}`ԼI��f`��i:=}`�
��3��oi4=��<���N3��o�4=}��
��N3��o�4O}��\y����W�D���ԯt���>�i��-�f`�t�7K�͢������2z��,Ԁ�
6;OS�^�&�Ĉ��l�W�&61i
=joQ�b�y�"�s����f�1tT}e�Q���96����(�rF�x����
(ٜ+�S�(�J���nP{�+�>���2e_S�\�_ag\e_-Z���1�����ܛ������r˾Bz���6^6���K�}M�-�ozϠ�*
/��vS0�F�Wp	Û>�F�LY�����
���y�f��VZ�Ⱦf�oڶB�����+�B�l�'��|��m^3K7A
���ygAc罷��Kl@�c��b�Z�ai|��{#���o�5�a�@Ww���^ֆ<I��{�J�����hz��ò?�1��AͶ;��f��H�n�T@%���.�ІM4|�j�Ƃk*	6�N �m'���Vּ�/{�)
��J��b�۲������{��2�����l�R�J
=e����
�_Gn*j��,_TO\-_TO\-_PO�Z���,߭�
�TOܚ� ��\�O��\TMܙ��|�j�V��`�|�����`�4wA?qg�~�j�~�b�|���E����E��ՖE
ŝ������������ʊ;k�Wk5W{��B�J����#��[4-jx�X<�.`{y�T��VX��
��W{w�,9(,ZP7�y���~����+��^�i��`���# �SX��F`��ѓM}E^Pʯ���Aby�W���!��P�r��ym�P����{��k���NvL}�����Eiٱ�>�A_#\6�c������C,O[�1�{(��={���l6����k�Vn̶
q<��l{챑�I��ړ
�-�1�O�.n�����W�1Z��x�9*��7���{�Fm�҇
�
��b�6�M�p��۬��X��&��Bwm��pI��
��c�Uky^�|_=6jc�婔V̓�y9ZH�jc"P_���^� [...]
O�c�P��	��Q��c�$ԽIPxP
����M.��UǶ�䋌�N��G��'�����on},��#��X6Q�(�y�
����E1K��
���4�Ws�����l�9��ؔm,z����|����R {
����3<!=��;.�c��
�ޝ'�ؠ?Xs�"I� )���c� �Qg�@���	�,�s=�tK�fc�
 �S��`Ƹ�VZ
�T�0d��
@H��
��-MM]+�i�o�
^ߥ�j~Yh9��
-�թ"�t{
�^՛ pd�Dz���4/�����0�r��xqx	������
��~�4��uDT����矽	�\��F�ͩ7��dNS����'��G�zS
-��)�AMy��S	l
���c~���P��cw)&�o_;��;��sy
����������
JP�Rݿ~�%�,`ͩo>#�
��t[ny�
-v
�&
���Ό2�,ya�~�s33qE���+�z3���:�m��� J7��|
g۶�KO��
-�/���*z��Dީ}�T��29)*ω���N	����
8
-��жԹG�n�@���ګ��l�
�uv4�Gt
����,k8�4˚�t��:˒c�I{ 2�erS�s6��[���UtNd�@����6�����~�*�k�Lx�a��~���Ov�0=��fv��v��q�_��G��.gU���Iġ���t��^<��j+��`|H}�U^qCP!7�7�z[T@�
=:�W�0C��1��tb~JB�4��:�P�Ӗc
yު,�ȷ�E1���v�9�b>�ߊȋ+�7	:\�9c�=�B��MM�~!Q�P~���NT����Q
P�'٩�AӘ�9
��%� R�Rޓ�����T�5S�O�&�>��Ns��m�����<��V�Q
h{���۬l��c�1
�ȂҀ	�Ͳ~�E��]�/�I�1�j�b5���=x�B>^i����l�[��*��WvLP��6��E���u�h2��T6'R��
�U�>|i .zx'�ܶ�0�~��?�y�~��4EJ��7c|S#�w+�9G��hN���%\e;-*«&�7���U� [...]
-��A�6
�t���0&��j^
-��g7��SÒ)b�Yq�ѯx���
���|fQ��6x�F-�ֹqe�c�a'ʸ8�*����~K2	;���S�>T���˹�x�/!4 ̚�
�8
�}���
 ����)ޒU��	n����3iV��ԩ$��D�
�9�=r��7�_
�K2-���3[��՗�lef	�f���[k%��
���er�ɧ�fa�8�a���R��E��
\ x]{�0��ޅ!��k�E<]o�ܧ&v\{�J*�S��ۯxΨ�����S$O��ъJ8�RtHA'\�JMi��

-
��żjZ(��U��agu!�2YTu��N�S* ��p*��n��{��u^��{�;�.L���ÝӍ�Aݕqf��$C��V'�<<��3w�&���
�.A�\]T"�%e�K����W��$=�|vKf�V��҆�͚��@�2��2�
�#Bڠz0C͑`&�}b�� ?��'HrN�	�5�Т
-��y���CW�4I3�Rs	i�5Hi�
�DD}��U<�j��i&7�)����AR��>@-Hj=�k�8��
�NMr��nX��2{���j�^+�Y�7��[h\�s,_Md` �����'&K
!xs�!��nN�^���,��f��TH�&��`�6(����1�
gɄ��t�76-��v�u�8��
���4����ض�:l�0x�"z�wp����3
IxO���}�m�;�M{���`&��PpR���J��DZ��
o��>L�3W1W�r<f��;�-�٦J���0�HZ�R B��L6
q��BG�\S���K'1
[��'�˗���,��,�,���Y�\N
�GlȾ�Z�$kvq���_�:�zg�B�E���
�S��P�&A*���N�VH���gzf���N#C������:�o�\�PR�NV�汝:��$Աg����&;Ƥjߒ�3��ɱ�&j{����e ���(����Bم��3�!CgV��76-�*L�W�O��&���l׬�[���-~fn��uDC����Q(ң��>�ZF�
�c�M̰{��hݳm����,�
�*����'��/�=p��x�M8�&�".(bn�<ϫ�&v'�/.*b�Ή�뎥�(jhf:��V���Sd�ox��=�Ya_�|HL�<��m'Hj�dΙ�IE��P:��\���ʈ]s���S1���B�cR�5��U�I�ӽq[�yW��D��K
*��S=���
!����D�㾏��.3��+��f��j&I,.�Q�d�C�U�޼�3�..)���#G�}�j+�d�"�,�d��ݱe ���T�6� [...]
Y��>�46��B*A^��͜7� Wޢ�J�]:�H*C��n	��(�e횗�o�����
 ���@�����5+G��A�Ϧ��=J��e
+`�֝��~�=TŁ����S�G��3��
�����?CH��
����
���0�xm��TR7��::(co�PcUk�j)!˒@�bc)b��pc�կ|�hߕ��8���}�N�2�&a�7B
-�fR~rd3��{?h��j�F�k輢f��h���&s����;(6/�&e�8����Զ
�;��׆6S��-����!���-�����	��U�M�m
r=ױu�a��n��L!�B[���tk�k�aE�#і���NrU)��ȳ?�`,
U��ˆm0F�X��!������	�`@#w�&&�l
�
��������
؄�aP���Ԥ>p�N�[��5������$�Un��R��
�7;��<�mv~����N���o(tL`NJBe���#S�<�uulrt}k�U��;9�ج-�
ĹI����W�X�94b��M���� 4qeH��
sKD�HL�l��Y�I�7ɬs
-�0�M��F��YNS��r���h�=2wӍ\ܚ룏�*e�*<꼉5��I��0s���Qu�f4�ew�|ɇ�S�!R
�Tq����iv
-�$m�л�@�t�l���C
�*K�
-	4�=%M�ag�.�}�_y<�߇:�Ϙ/?�B�M���O�c�n湧|>�kc2��* �أ�����q��V�d�?9�� �\��A�
���y���$�^�;m���1/��<����y�eR~���'������JlӦ;4�
��b�׷�Z�P��	�f�'i����D�e�G�È�+��)��V�c@*�6�?��6���`��m

� �|c�� t���n�y�i]�(�W�0,cҰ���RI��u&N�$ƣ[kf�?���mu�՗�P8��0	@��}ٖa�/��!l}+ H�-�����Mф�֤���u�̇�#Ti5��W�[dܬ���pK�D���ٶ:��Uݞ�.K�OO;8
-<�
I�<Q�8��u���y��V�]�����y�ų9��z���f*��!IPU���J8���&���@�/��s��^oЅ�Q,B�g�W)
߀�@�@��� 8
\�s�C�E�u�|���Ѯ0#D~C�1/��"��_؜���؋�Ɂ��y-W�
�ܶ�'v��7�D�
�.����+�%��f�� ��J��?�+����	��P����m�{��ؽ�{�ߛ;���s
�%���<�
M�!��R�w���p
Y��
�wϚ�O$�|1q~7�xAM̸�6}D!������6�|�-��Yj�����Vc�9-�m���f�*�8(L�nOak�P������4܀
�{�:�o�AS�
�pK�PD@��f���N\G�p�ld�
b��B�/�#�
9\� \
-���	�
9�6ؚz�IO~]S���@��IZ|C�zk�%�n���N��lG����1�{�P����	�-���z쩠
��
F|��哳�9���i�b:�JBkW
AF^����w
WAk
|
��QK<��-
Y�A/��v�,&!�a�!v=��J
��B>�)�/܌ I�E��ܿ����e��'u9�
B݂Z
�8�!�dW�%ꔴ�t�C$�vHV�B����F��03V�KqG�(���di�����glv�q6d x0�ȧ�A:̃Y��p���]�B}xqP`�V��2�
b&P
�ؠ�՚z����Xo�[x�I
��>�Ȁ�ؗ;сZU
d��n����e
X�X�;�"
 ʸh �?vgaD��j
���3r�$�� c�s<NQ���p֝��*
���Mn6�IMJ%��T�r'��ޠu
-!di���o�}�C�[g�� e'�C�O�r�Ś��$��i��lL!`(p[�t+2spГ��1(ߙ�7�;hJ vB��	�CP��z�^�2��W`ϝk�K�6��*C13�\�b`,K�A�� Ok��M�
-N�΃�� E�Ji�,�.׊.gO3�K2V�䰑�� ��r�q!��r�l�Ï
-i`�B�"H����s�⮪x[(�����3l��KD
�ؒ�h0����� K2
}�%�^}		u�D �e�
�!/���f\CVrn�KV���g�[
��Yd�X�
-�S�sd�J4uXf��ꪱ��I����^���b�0f�G�O�5�T�'


栵�Ӏ
-���w9�
-�R=��Y+P�^ˆ�3�Q�ݬU��~�����Yj{��.E�ǜXK��)��&��\˛qv�e��*Y˭q��۸`���~�/��m�%��,�������/��þJ��]7��æ
��6c
-ޚ��
��0S [K��8F��ձ��7($��'Y-~��l݅ o	�F��?%@m�87�<� �	�Ԋںbz
� _
-.`�AW��
�*��+,+����8�'xWt�W���R|��8����[
V��>�Xw!2�X������}0R+�0c+2qԭ �
��/��O�5�]P�1T^����{���@��@�.���jcb���<Ɗ���CV�p̫�qHͬ��m�gb���P at K��[oS�
�Z+�;$�"j|�O
��
��5����|`�чtb���	���KZ�] 3��ּhh>�fUCCH���!��'�Y�Ѕrȡ��:���m�:t��Lw�@	I��Dzͱ������72���f[ �;�~;���Cl$��-Jvm^�
-��,k�C��+�#2��ʉ\0}Nʮ�
��K�
����2�ע
��"��ج�=�q� �a���֊�,E�wUKq��&y����'wT�Z���r��ox�pݎ��_kY
��KL�^CÕ�ټ1Z
�W��%��X��$�A8�USە�
?_K���kU�q�k-��ۧ\+��
��]?��~��Zy��}W�
�g-��	
-�a
�-3��`-M�u�ִ?n��9V1C��C|�
��?��K��m��3D�g�	�ORq��E`ޮ�	��-����'x��=�7�-4h���ܿ�E�}F���)�1q���vrU귓5�-��~?^�uᠯR
7�\���>}ק�o
FH:�>���M
�L4%�l�
X&jb6�~�tЌ��vk*�_Z �R݌����/��%69rG����Á�~?����(X+
����
�F
��9D��k&�m��^1��H�)H�����̾9�|w��y㟟>
�'�v�+蠣Z�:��
-�73�8�v�OQx�a�c�:�ᰪ�����+_e�������7k�q��o�O�l
ラu^/S�/	�_n^����#Y��E��
�؍�������?�����}~������G��R���u҉�W�h�K6�O�e� ��1�\�g	o.��;�����*F��_΄�� $H��CD���CYL�|�Z*��,~D"Ƅk=U�d��9�6I��BDݿ<��,8��,(2&���I��G����g�xB�@�I�����@X
��T	@-
F�9��+)-��m@<B�b��&�퇇�>z�
 �N$>�{g��ͨ1�N=;Ъ��l[J�b��|���: �SW�t(ȢFApA�(
�4��,�H��-�͐u�W�F�I�� ���>e�<�ԉ!��6�Wu�i�
A������SP�5�
-��9��
rxX��%{Nr��'hM��,�w���y
@�D��	�/
{�N��7�kT�ʋ� ����Ł7�����1�p�*
�\
s��ZQs!Ⱥ����ofd��;���ϳ��ys{��[}gqT�:q�%
Ľ���A|�o�¡e-��]�ȋ�e��
-g�,�f��M�?l.
-�(>�J7���
-�g���PLI"ݿ��!�^'c������] �l'�����w��.҈�U,E���.��9�o4��M���a.��FH~��w�<"�aH[��
-SzdU���C�$,
�y*�rR\`�[
PҢx�^�ʄ�hxXףOw�
: ��������9�~�6{���k��
0Y�N���[;)lw�<�n%��'
-���B�>���P�D08�
6+L�`��3+��0?�^'�m÷�"X�{U�!,��ۅ
|��?|���F�C�
��];��K�KUk���S
1B����6�7���G��dtu�S�^�":
B%����	�

�'��A
-[-�b
-v&�E���7���t�U)�$���:����!�YU����ch�h�1_�Gd�N[�Y�Tm�u`B��^QE<h�i�j�?��G¡��&;gk�|���T]踝�a��uш��h���u�1��(p�rAU >9���1>x����kH-7�
�8��a;P9g��Iz���h����$0��Y�˞�U�4����EOG�܌�	MT$y��%�xM�
�
k'����ǡ�n()�|B��΃�I�;F�C]i
-Σx�h�0��W�P��ͫt[�`BJ��e#����_"����!��)�aƦ��zv0�
f4���F���v���dH���ʖ��xɇ�\�EZ�;j?��_
-=5QFvoq�7svM�$�9���"}:�1��dԩ\a���(�AT�k�}�
�$j.�M�ƪjc�j#_�^ht_�&��s �����Sۦ���x!�F����LJ��z����c	��jk�0��_z�ˡ����Lױ�s���B�C?O*YӐ
XBu(I$6i�
M���@�=]�����o��p�\Sv��,,�PE��6�n?R���zN��9�<�Z� bEH�npu�x¤K���l:xGO�B
�&b������$��vp�V8�F�MFU��
��eˡL��M�4O��
-������dC� �Ǒ��̫p�\�T o 
�?U�5��{r��*�omι� 6�
@�J�9��"��ܢ���:�\�|7F'N��D5���]\<�E
�"��>F�V>D�n�?9�Yv�j%c~���(�q�E4�ڧ�RE�Me�p�PE��&�NI���j_E��)l��y�� ��m��A�;T�Wn2�~uQ%[Sp���� T�N%��jF�fUjɸr� ��*�،�
%���7��]���
����X�_�H�?)@��nj*Q�9��p�5hJ�M�
!����<������ӷ?�W�����|��]�����q����w��KVϼ��b��O�"�x�W��D��Ut�u��*WI`���C[�������F�B��64���'!Q�+O2{�l@�\n�=�=� ����( 
��
�CD6]���u��“
���@�}�ܷk��E������b�E���8`�=�T:إ�	8��[u���D�X�A���i��>͙g�����5r�O��X��R��h�&�,�Bm����fu�THt��H"I��j��C;M�6�Ȅ����,�C��n"����(���^�f^a��
H� ()E��wq
-ɶ���E͇*���F�G'e�]�ļ�S�[��eB�G4�5wZ�?��}�.!:x\�%������n�������yj�>�z�������jj u���,�a���4{���g����/�pL��4I�(̻�}d�'A)����#�&<o2�w�r9��>�y���^�
�)nl�K@\|&G��������F�r��vDZ+�K��UX�D��~s��p�s푅[��1uΓ�<�*�<MЦ�y:����nG����:?���l
w
�L+��8��ؗ������y�߯����uY�
��{� ss����������>e��l��fR��9�͸ǯ��C[q�F�d��˟��������?�˟���w���O���~�W���������0�O��U7����v��	��g����ߘ���O���|6����ir�˟���8������o���?��/������������GCO��D
�������_����_�쇿��A!��;�O�����������O���g>0�������'���O���|���B�{��������}tZ������0��)��Iٗ�����~����+���
�⻿{�������������?��o毾������?����^�g���������������/�����?�����?�ћ�.t&��-��/�*�
-�<5K� ]���'�	
G�/������?z�V�}@;����l����?��KN/���������/��N�����RS�z��ݨ�`��◍�^�W_���/��~��.������o^�+�z�ߔ�6�m�����~4>4=�
�`(�z
'���<�99A�{�6�+�����@��_��X�N(5��-&�4ө��_�2e,�7r����j��Y>��j�
'�jb���
E
� �[�߀���ms�$��� ��XB4��oC�>•�Ns1����\ތv;D@���
Re
#d�*D>�$#p5|�d�u,�T�w�G�6-�m��j�49��
-�WD	�Qj��AM�| ����=r���S$�q�
�ڬ�A��P��X��N@] _�]��������^h�~���q'��6�
9!��I��G�uu�S�K�r���u�YG�;q~� $�Jޙ�OU
�0�A��ă�̿�C�B�?�*��e3�*
P&�Kk�x��CA��@
5���eWiv��]�
���.Š��η�D
-���
�1Oߝ
-Ox��(}?��<�u4�
J�Q�x�R�����,]����u�ޜZXv��C��[�M[�������};�y��:o::&@ A6�r.�;����hF��/�r�_k9����T��p��W28�.g��
Hd�b���G�/��9è��`��S�2O��bBFT�.��/�7�Mf2z-^�쉘�����ja
M��9hI0�HG�-��,6�x �@>��
�HP^��މ�n[���'��sh��*��c3cҫ�ΰ�vU��w?
Y�q���L6�%i�WZG�?
���ޥ��'up�U�Q�������4�&
-�D�
-�a��2�&d�I�:q�z
�w*/F
�	 ��
�M���LY�X Z'
*���pZ�Z�4 ��bk�f�#�� [5���![m^��4��S�7�
�W�d�ajX�ME�z���1C��"�W������_�cP¨&+be�
�������'ZJ���p؂����QZ'6
-.S��-��0�hD��

���0��Ѕ��S��+�N�Q�"�-��f�N:��
�Ca��5u�Nw�h�GHCt�,�]�
���)�;�S4'�<E�RA���uI��.J�&���ysP	]	�
�O�^U�ep�����G�֊F�
-9M�">= �A�ֳ;\��w�7o
�"A5\
Z��_�)���/
���;�Vu��m�xr���c�����mF���D�0�FH
�F$5���O;�A����5��
-"��+
�4F%�+%����e��08�3XFP	��.4�a at S7/��` <ޓ�1k˦�B9GaUŵ��N����@1Iv�lI�F/3e���L�-��e�t�$
D���iX�SS
iS��@N�7�������Rv�͈�f�������T��vp�U�:�Fҋ��1s�n��
-�I�@�|?͛���:f�4CJ}_@�d%]Y1�k
��Ӕ�5�T�3#4�;�Ԭ�}�hs!Ƹ�~!�0�E?���	�N�����.>�ک�
�E���r�\Q?����;GsF��O	��Tr�� 5%�NR��As���
�E	��7G2����z��Y�v�|
4�d�l�%��[j��!����
�L�����%n�Y`!���mWݳ��Ĵޟ��cɯ�wܠ
��,��~���fwi篒�
-�
Χ���nn3RM��R3%x[����	ز
�+�~�O��WZRv�H�KE���>�*|�9�rH���g��
-R.�`<�G��5ͫ?&.]<%���2Q�
t�T�R&��HB6���֨Y�LK��&HG����y at Hhlt�iFj0���N����	�@Vk,D�ty��}���끎��17�p����= 8���?+�?pIn�M7�B���;{�Sة�Io~$E��R�d	�K�{����|���Ix9l<��+в��S�[�����D2���OM
*
��~�� ����C�0
�H�wr}�K_���Zɩ��
4���p^:p�r�q��O�G]
��9+.}|�d�5��
�`p��2p���:v@�?&�r�
�!<����!-��,����m�q��"�}��u3�H����m�U ��Bm��`N�B>�
���O�
�o�0��$��W��ڤ=ա^��f�~���Y� x�h8���kZ~vN*3�OCì�ӑ]
��2�ND��[́��ToD�S&#
[!&�F����.y_n?Ig)Fq�k�־˷m:�e��� >b�"���ԃ���u׾�
*ڝ�'k>��
-4�
8`
Ђ
����w����>l}�z$�Cf]�}�Z����/�)�<�
�2�+åԈ[:�mf<~��E�nlJGinP���� ;�u��K�l�`Ϻ�rv�	��H؈0�
�z�o��%s
"��賦m���}b����L�Y���	��ԯ�c�j����p�p�*��t
�?ݘf ?I^�	hui�:
�]��d��R�s�נg��(�
�$��†�d�\��)�ZX$:�
-,���)�&H)�!�v�X��RDHDF�i��]n@@A��Y��{r
�?Ǡ
��ɢ���k�%V����9T�c�S�r{=]��&�x��7�`�x��>O�G5��Q�O����R�f�ɷ�)�'{P�$��~801^��z:�1�nI$'.����(
�ʺ���h�-�_G�p��i�����S�t(������|ÃP�6K{
�:�z{��O�oU^;E6/N��T��m#��."���� ���(N�3N��G
��s���`kn�Ӡ,�_��*"�p�ܢ����t�>ą���Q��O
ݔ�b� g�E�v�Z^�����-�;�#N)���9"���x��g[?7P
��>�zE	��:I�
ќĮѥ+0P��v�ǁ�˓/��8����O3
�"
<	}��]uPV� �\pӡ"��L�uJ�ئ	3�]
�b!�2o��F�py����RT����T� {�-��`�Y���!�
�ɯ#a�H�������*�%����j�E�p��[⪄�/ҳg/��sa`��?]"�u0Ɩ�����9�˙�Z�����P7�䮍G������SlL�N��vh����PR.�B���${^8@[S���z� W��N�pwH����G�.��9lTg�ׁ{�z��\J�1�(�P:l.������W��2���A�BM(��>�Q)�@�b�@�#�rA�a��� x9xq-?~E����t��vakm�u�-4.�x&(�oG8m����m:F�����<���묗;�h/I��~@{���fARڽ
]�4�@"d��Ck�ũ��gV���Ƭd�7V"�M���C��'
���Nalgk��	���}���S)O,�Mɷ���D̤?�
Ų�y
����`<$�7���`#%�Oo�;�ܝ(��#�
-�4�J�t�шo�A��+��
D�g$B��n!?��
��&��<��I�MviB�&�ͧ�qgT
8�ֳG��g} H�^�
Y��Up
uֹ;���m�z�	��
��.tO�Js����M$�o��D�8� fi�  ���*���LJ}��
�� *�����k)�ඟ6�SYIR��<�b���WR��LAt���)a�l
>ߩ[��DD��d|Dr�-R��[x
��~�A�O詠��&s�
-e���}�e�&�"����$q�C*ꃞ���ٶ]���7��əIͣ�4���'.7!�mRDŽl�e5���JM��6y�
�3I��wi�@����L#����C-�t�
�y��D��%qW3�DL�,Ls��~�T���뀸;��h����G��,CsP��(!
IZD� IT�2c2\�/��q w����r@
�~�S�w��M�We?
�	2d��El��w��\�Im#���{�������R]\D�:���
}΂4��0VBtD]�mN	Z#�F
�c�1��t�(��Ě�� E��Ϥ
���v�p$�U/~�:*IO3#v�&�ө,rB0�|I��c�������
"��5g�pH	�^*�U%�������7�og���Ph֬���ը�h��,ӂV��!���K��3]�
��k�W���w>�C\l��f�HbQ �L� �=|
���V�� �}Va&t�u���F�H�LW�u$f^v
�)I��'�_(r3��/a��Tf�&���H��)�$^�Xf�?5lz��0�R�V�8/.�N�S�΍ݛ����_�R��DY�q%[����y;Y?��1�,&<o�ϫ��/ �p�&���H�&Z˳%���N/�H��J���-/<�0S�uׁ�
M @f��5��>�+�Je�q�
��C���_W���G��8a?��}�6��o�
-�xxB�3	
T'b���Q�]�&�|�m������ߺ��
-�O
-@���
j?��>>�\�y���Ls�$��ե�;�-��^$�K����
<��3�����/��%݆F��ҽ�Z��=��x�LD�]��f�q- ���{^w
�i�E�*npq�һx�b��#k�)���1'�G�wp����/�1�9O�$����ᒖ*
��Fu
��p �����
5I[mjvf8����h�nK�Ni��9��R�
�B8�|����NF��`ݒ
*p!�;��s�0@|�i�)�9� �雲7�s[:��#?����~F��F�3�$P�ba��hl>�?�A�g� �6 S��S�/�$H�u�(�@=��fdF�"����˚{��%ʩ����^��ǏԴ�f�Y$�F�}�p�?k���^ga��ų�.͚��r��S�j ��a!�$���>��y��=�Ҿ9/d���D�%�U�U�j4��"�i�̶��BO
��ogyVz�I����
��ɐ��=
�0RF����8����yz��@�z
-i�
-A' ��.r:�	�
��$5����h-�"(?\�5F4������׫�4;��stC�h!Ɂx_�mXg��Qh�2�I'�l�'����	ͳ�k�G(��^�$
�v
8��t4�奷����t6ᶓ��s�q���Me����J�F��1��.����(�
X� �k\H@��S֚�3��
R�
Ҧ
#>OW�&&y��h8�(����L8� �;.H/���-�c�9z����
-G+z�
�p����\�ō
�
.H9�:�_���O��P����Z�}.��T�	�;͵�ĭ�
E&��_w�K�*�v�"�c�h��첤��8 ��1�hX)��\H>�mO"y9ܥdi�Dž|۽��2:��
-O��0�!f ��f�fo6�T.�Ԥcd��L�o�/4�����Fx�V]Q�>����H�(Id�b�$
�8b��K�z*��QԂ\ҦfA�h�$�@�K6I�v�\�D���]!:� �vM�
<
Y���,���.S��s+�i�I�迺�%j$$,�;��m""l���%��IZ�i�'�s���)�'!j��
�� �K�N�>#I�B��ꔆ F^I��Y$i����ʃ��#ȧ�#��
#�n޴�Π�?��5�|�
"$�&h%U��k"��k�� ���
�WZ�"��_ f�ö�@��z�I.�K����M�-���`U�
T���^�xnG;�D��Gxl�l�VC��Uif=5Js��ԇƃ �IxP�gH�m����Z�)���y@�ѯ'MF�gƈ�b�
�17�j�cj0�QWv�?����{��;U����,�-Uј��yIܰ�B��G� <@�����O#�]5������=Ϙ

�N)��
��t؄�G�[R�
1P5�a�s�`
NIa,��
G�ż
��^��j
�������E
h
- sj�!q��հyE7�f�?��!��k��ij}8+B��!$Z�V����N�5>$G�$Qs�݈;�1N��27�眭/�U�u��TՉ!d�:b���ʮ�zs��P�սĦ�*�P��|� �����  U�O�q��
-lSf�� �j�e���K;�
uO���Z�G�D
��
�F�KR>d��S�
��IlB
Y��k��}�EwO~!^��@2�0�9k�an	���e;�bO�V��
-�Ը���J_So>!����;��:*�p:�Ÿ=
�<�0 .gi��%�
4��
P��tz�n
@5���>c�p��=pZ���b�V�5)���76I��s�����pHqd	5�iE�®����6�Tg<��.��Lj���
��s��i$T]BN4X�Ǩ�|87�z���7�^�@�{�Tִ͡�k#qB$��5)�H
m�Rv�=p�Ǭ���Q��Sc�M
���p�����FJ�l�-
M�<��,�P���)$�$��'h3m�8���j���$B���>��-�硪IA��<�u��
����u�d�r�d��v�%�\�q!&SY��
�S�A��0���o^�r�d�S��󂚷�;����J��9Hyc>�~	2�!X�:U
-��N�&�-�a�v]B�)��b��r50�ׅM�#���� v�&�b��R 
-���$Me�7�g@�c��a���Q�K��,ѩ@!���M��7��]�Q�\u��(^8
���!0$I 
 ��j��*&�=�\E��Λn�L�����?S�8��J	�d���%=k:.,l��8�]N��* 1�\6�p�l�q�,��޼�,�T��ٛ���:fQ�q
��� ;�
�S#� ���fH⩉���s�P�r��ps�nH#��8/�F�0��cN��N<�b,>�pE���a ���d�;�D���w�	u.��7g;��M�+�&Nz!�i\4�7����W
ҟFF�}��UB/�:�
S`KC�ZL(�P'�D�Z�(,
��9F����"2��ω;��4>��z� ��T�+��@����]���/,
�V�R��i%>�_HJs�e&�
U����� �)��(#�'�9n3�|N�����U,�rB�A�|g75	�"��q�&SF�e
-v�"�����CY�EU��
 b:���Q3#v���]�=�u��	�
Υg����q'p�`r1�`���Hl��@�}�<��篳OK�j����]U��E.��{��A�y J�g�[v ��Z����zy\m�\q��bM��j��'���N��c�LX���Ȍq��r
V����%.O���j�V^PN��䖊@��2?%���*��>�ܾ��c�Y|a�ID�l��M�P�ݳ��ޒ��O�DE`� ��j!1:|�E�K��*K$��
-z,��>
H$E�*�f����f�q&���U��I�+�:��P����pk��Q� ��•+z��b�611)*mm�:=��
�A��]���+���r��t�d�'N ���i��DM����KH�Sp�>7��
��I�pS�R-���MKϔ$
��hG�
�d�c ����s
�H�D��D��^S�3��U�q��7�������ƃ��)��� ?/��?|������O��}��������������{����BP�m��Wv at P>`A���,L�
ت������~������.���'��d6���}�`�*��bf�4@`�z�
٩. F8z�'?����o���Ң�r�

���0�k��n��h�1w|ٙ��xuZ�
(U�,��]6��$l�HB�q���d-vH�*󇏾��VVO����71Z0

Q��B���
~a�۶G�Ô�	��[�U�#���v���M�',����(�Zv6�7�P�|N�#B
����|�g��s���L=�hԽ=YJi�f�+����p���`�o���B�~���P�r���O%��{I&ca��L���#	�B����y��H��e9JϩzS_L�H�0K���"p@�=O�=�,�æ�
����3��z��\
-3@/~��+�4�c?+��"��=��H9����'��aX
�'�제
-�J`�f��L@}*���=@(B�,�?�����:�aa8������n��i!�
��%N�{e$�w/H{ыL��Cl/��X5�m��ƾy
O�
z,�]�P~n�(i|r���ث
������Fy����P?�z�0yk�L�ڣ_
ft
,Q+�D0>��P9mxM؋k��,�q�
�<�t�LV��\諆�z�	�0�zƈ��� ���,��AN�{݀�J"
���,���K�Fʎ� P9�`d���&���p
-3��L�#u�$
�
�y|n8��7g����*��aBLU�(Y�%Bʙ
�\�_�a���覉�a[�4�<�>r}{����S
�R�Ը��p�w�@��{y�g
Y�'��w�}�����ݽ�aI~|�v�����u�kQ"��$�g
��gw����V����aw�$�/ꍯ$�h{�K�ɽ$�{�ꗓ>���ܸV�i��]@
;I�K�B,�bހ�
-���G;%!��b�ѧ�݀6M��ů�b"-�UnFIX�l���j�dW���b���<�Ov��$��u큗gٵ+Gfus99L�HX����
���#{
Y�%qAQB)o
�?����M����a������(�j���ϼ���. ��8-\� Ie�.�
�qi�c�C��y�f�8�����S
ܗYɝ�v�_�8CZ0+Ȳc���/] 
�Z�#k�ɠ��>i^U��e���!D[&ۍ�o��r, ��,adD�f��^��"��*�`댶6�
�f��(w��\��1
@,.8m�J��_�־�jb�z'�z
-�hs�x0�(�u�9�G@���1�|�˻{������t��s�$
���a~n�1�!

d7\25ht�`*�g�q� <��^�+��!\
��K�NA2�əb�uE,�c��r������&��T����~��lB�‡#�))��n��
-v�b�8�
Г;
b�>��8W#�`�B]�A��� 
�6���~���Q2�q�ܜ� ���t���x��0���8�1�s�0�rz�ݩ:�>K��X">[l
-���
<��/<3�X�-{@@��
-�y�@@5��:a��q�4a�LK��~��0G��p,y�(�%x7$�rO�#�=����x���M!.�Aؕ��d�%��s@]goC!�Z
Z�K��)��x�� ������^
t$�K�2j��xa�� �n
d�<���!�w
�!�>���)�}�p�T1�Lqz�P4����e���:�6�`,���`�i�d
8�US�E���ij��q��
-'O�Y�,Ӳ�n(�ga�G�3@/\���@pH�2����TrA!��+��ӡ�9�X�(S����&1lq��%�~��7��~�u-�`d�V 4$�E.zve�9Z>b�oG}+[W"Ǐq6���<@9B�\� �^�q*�#�x��?��ɪ�R��/d�D�i5[��
�]
%��
�	�~4�T{5�
�g�Jz	&��a�����4�tQ��H�@�W2�Ù�ث��bx�in
����9���Z�/x\z3����U��! 
-k'�D#
���
 J��z���I�Z�ݨ;�D�o�K%ݽt���P(w��uP�m�0��92_�'DȓI���HR@۽L�I��5x
�
�R��0+�$C�-ɤ�޿TZ���h"�܉�����3�a�P��P�x8���Q ��y�(\J�t
~� ��`� ��G�
-%w%��= ��
��F䕩!��g��r�I�F�')��1���!u��a�`�s���E�BEڀ� ���
��Z�m�Zc�|?
�
-ğ�(K�n�����X�~����`��a�B�@�{8���T��=���9�
��h��)k�rb"�v�j�f��#�����&g\[߈8
�E>Z��
m�c ���$
C0@NU=C-�RrH�L����#P�_�XYj��Q��RoL�$������Q���o1������T����va6j�G��)E�}���9
*BVh��Fر���+�=
�,wLYl���+p�����4x�
����aX�໇�b[P�&	.�o
eF�d
4���HI��p���HbDQ!��T�T��{��D �	��і�|%�7'S�f�	1���tBU�d��t��Z,�zr'��E
������
���,�_թ��:�ܷ�L���0A�,T{i8�}.�E�6��T���c�T6뀪��D��eu�Bro�	���(��??�4j�e���oj�i����"��
a2�h����2Rt;�
��Q�eﭒ��^�|I
�-��^��
�	
5�X���Y�.NF����z�u��߷��)9���E��

-"\3��/h��|m��4��
f�d���k=���$<^
��Pܛ*2���(r �w�T�Du��X|�
�${�s�
Z�
�c�=�]z@�
l�U�h�'b�����^�O�%������г��(�1��#��LN�aĵ�y��F$XEz�
��>y�1CL��t�=�#w���.=�H/ŌK��e�v���MU�fB�����@kQ�bUn
-cfq&K����A�NI��E��W��&�<�����	ꟽ
�U�f*i�I:�y��%��W�/�w��kD�s����^@���Y�����6;
:`�׬v�a��z�o�q�hi���1�b���
��؎6`��겄�w ���W�%ۖ�~4_�F��gª�l�^�]���Ƣ�8��{q�
&+�~�X����V8!�G (
ȉ	V
y�2��
�y%���S%��; �z�?�
9@�/�ū�t�i�9t�f'��B
-ʉjR]����Ā�<C�{/R0l�ϟ+
-R��+d��gI��G�Q��#&d��m�(,�u4ک3^4�U����H&�o�I�'��=�X��`�u:0Y'kﭪ'(D�q�bzi�P
$�W>U8/Q[���Ϛ�b»JHg�ɂ��L52
|�sS�E֖��q�����m��2 {D�
-�Sʋ)�T��v�`WD��ȡW
-��
�ݢ"
|�b�X���0�k�)�(:�
�C,�Y��8~
-
-
-
�����jV�t���a&�?�RIV&
Bk� X����ʗE�v
-<г`��Wջ�!��ފ��8E��
T��F�3Y����L���U��+���N��Ԕ"p�8S�jہN�GZ+�y�B�z 
G�������'`v$P��|�T�Q���
:I9�\$^�i +OҊ�����������p��u�pK�6N~33��A<�������}\,�w`������ݾ�I�j���Eƅ�_�yV&e��JʍX��8���k9�j:�]��a�Hj��ڃ�s�&��G�h�G
-����2�?~hq��l�y`Hճ��r
�e�
<P��a��#���k�T�zT�
$�9�M�1
T|X�n�lٸ
BM�,2�O���t�U{���v
�Z��v�GJar��
�܇s�v����k�$��Š����#��W�2�I�%z+������6
�kY�=y#&��ܑ��
�O�k2�����2��]zj�rF��L�{l�!��ݢ�
Q
-z-��'���`5��n�$L��
s�\iW��1�K(DD��Tq�N�L�}j��(3- s=#�U
���~������;�^
A��ĸ��b�ͮ�y-��"H&��ڍ��h`��1I��L� ۉg
�<Jj�u�@4}�qN#k
��R�.�B���#q"��G�sE���l,�y��2��C�fj�~�$�]�Q��,.	��=����}"���Y�
�IՊd��]A]��l$,�Q��B�P^;�,
�$t;1dQ���XQ'��S
BZ�$�>Ξ*����UYr���d/�ս�c�{.���8�4DF&� ����dj��x�8��(���2$�nG
���!9q���Q�*3�w���

-��?'
ȔjR�C�:ʗ�����Bf^z6V
s���ia�N�9��,��C�3��2���y��A�6�1J��@0DZǎ��S�W����:�^z�r~|
���I�*o����
�Q�8��ܡ�Rn�#•.��G��V�R(��%TzLe����==��7u��BE�p�* ��
f�P:�������Gb
�r�|��Rr.�w�ÈcZ����&�u&/|�鑓�(3��#���JܓZ�DJ���SU�p��
W�=��p�}̄D."�î�J��ѕf8NC�&�]6����F�L? ����'l�RqX
G��j@��t�$Y$�͍�rR���n��RdV֟��46��"^C� E�,`���Q��g���`	��
Ș
O����Y�@�oG�;���3��-H�����?!yĠ�G�u/r�PDK�TQ�`��j,������-��)����Eb���q��g�RVx��D�/?g:W0!uD�k���3�s��.�F픐�(l .�8=J�
}��Ʉ���䗼\�� [...]
h�q]VP���u$W��	�H-�p��e�	����L���_+̺
n�J�
��_j/$w=̌^�b�(��ԏG at hܴDR��hn���o�_
-b�
�a)!D>�>a�Z�:<
���N
];^d������E

)x�hH�m:�P�Τ^�����v�Q�	�0ؚj���eR�s�"��Ԕ���a��>�!�"�[k�!��Du;����}Φ�����"���z�
݁ Q"��'�8����b5U8��V��ލ0р���XB��z����EX��}�Ў���Ԧ��wg;'Gƪz�%�`�ɛ$�V8c��� 
�,�n��\�*����D�Q��
-�
�=���"*e):�zg�
��+<�J#�u��;N��za�Wx嶢N���#-
IL���i�� 2�ph����q�RE*�J��jQ*�U��o�����ba��W�	�G�
����f)��<�@N����W��
�|���#����Iv�s�f�
�mp�ܓXv{ZN�O�-��"��p^

-�j�,�����Y at CYH�N9QϬw+L��A��֬4���`��뷇
�xT����7��F��*���
-z��T
-��'� �+
z���bz��)��Lo��d(���F@�>x9˕眅��
�����&Y����+�]Gl]X<͌Z-s�b�[��>��P}����C��������].�'�O�-t�

�Z8�"B��
��"��������9�T3��
�ܲ�=Wu R�H\S�&����
-�毦�k. �~��h�"�{��8�������P�L��O��n�S�^F��R=L�]�a
6���j�p�#.�m�)���Z�eD��_�
��s4���[[>k�^"��%�Cp��T,�\B"�|.
endstream
endobj
130 0 obj
<</Length 65536>>stream
-8�h���� *o�V�P��__ӏ�z�W��6���Xf	I|e�i ��
�QG�ʥ3B��q��¦�hJE��8�ډ
�K]�˺
���&R�
��q�+������'(۔���3OJg�@�	z	G�>OQ*��}id?;�!��� 

s�/=�E�=�s4\��g�}�H�u���'�o
?��Fp_�'���^G�eZ�&)��`
-gTNR���}a�a
O�w‚d.sfxT�踴�
���'
42�(z��/4P
�<$�().��
�%	�;8i�ŃM��ȏ�s	��Z���O|���
�(������'���%�YBTU\���
�SJPj�!�+��{u&�vk��qf�ff�TK^�Be��Q�bKW��^���^$C���X���0r��p%
���'�?Ta��_Fdzk"��
q�P
�Б��7P��i�ʀV��o
�VV�*G�p�}؏A"�G�	�ŨX7�E((�@��@Q�#��%'&���ᢒ���P����4T����c��Φ�s�5m��
!K�8_�x��w��
6,��
ɡ:��h(a|6����+lӏ��U�9Xdi2W)Z3Ut��D�VY�\��C��
Vu{��+�HT������Ϸ
s�1UKJaO��.�� �� �i6��Z�C���1y��9u?_*��^!>J`Vlx�q���!�w����q��!Y��v�s�2p�2�~�
Ƿ�\� E�	
��3Y��g���CR �@���?Q`�ϐ
���4�i��
-�3EHwL`�l^�e�,�g=����"�@,t��k?
P�v�<U�
g;_�$�	ƫtr����$��CG��$�񹀾X
6�z�MIk���H�ow1��#��'
- #0�S��Z��
�Q��H
-H�J�[A�<�t�ƛ��O�Y��׌<���{�s�8���
-�>=��G�L����Y�
��NH�ύ*��������
�wG"'�ʣ*b��
�Q�+�b���p�D��O|S�%f
��E����� �$�"]`j.Y�"w���Q��4)���(!���$���<8�D����������g�D6�X�w�z�4�S�s�]�{�S��̅$���`)=e�~�E��/��{�$��K�_Nn6�=w�̿9΁]
"�
�b�d�>F����
f��;~�d�֞��]�o��ѡ
w��.
t���⤃Zz
Z��Θ�L-��Ǐ)W�+R�r�B�Ì��ю<�#tc�e���T{�73�B�
��� �X�������5�QM�\�v�!.FA�׋yi@桨QD� ��	���.�
a��¡��;7kM�Io�
-���4��z�����<��^�(�|�ϭ�&�"o�{���8����
-�_>���ڸ����~�6�R��ͩ���|�@ɩQs�/�K�筗�2���I��3�p����cq���
-�����Dp��B�Q'�Qx�kA7d3�����H� Ek^�z{�B����9}X�������am,������%h��/"%�o���7�
/���҈���y��j��G���w;��z���4���O1
�tD�*��~ڧt�9��l(��F�/p
-B/��5d�@�
�y�C+����
��Yi��*c�wX�uȕ�|��
��t��2
g4(�GU�<�c|�����/�u�
-��Š��&	L"2[��#E5�P�\ş��~���|a;\�@���(ǥx�Ǡ��Q,"

	I±.�A��؍��4֞��m
l ����,��
�;����m�`��^i�B�vZ�2$3���Sx��$L%@�?G��
�
a�ǘ���阨g��#
|t��vsG���
)5�,`
��vZ=���g9�^��
�X��(����+����
��2�wD䚜{�&��R��t�<����[�VdbPbC�5��0XH,4�bHH6�GHэX��U�<�������;z9s �AYTd���O5LM��*��A�D9����<2�?ݔ�L!{�s=LZ�E�
�J:t�Ӭ\��,�@:�IV��-'�=z=���,���6�C!t}0fF),��)'�o=�
F��?��41���,��zU�WW�G���|� ���O�>�@��
x�� e�a@
-�k
� ���ѫ��k'�>p��*�(&G��E������^�0�&(�H&jy��d�_
^�W_�ۈd2In��s��dF�~��h�у
S8�\����/�IV�3+\;��E�9@������ۖ(�
WzB�|W 8;��T3�0
�1=+ˢ
2�#�y����b<Q�-�7��Q�W ��W�Xu�K�
����0�(v3
b��:�[�;l��[w��]/jvS��:�E��.@K�W�����a�oE�
$�_6���^���"��@�:&!�g������}*�̹���"pk�����+jA�a�ʊ�@K���%�+\A!P�<m!�dfJh�����˟RO�T��:0������
-��rd�j2���:A��]r�
ݼ�������¼^H�.��׈�+FI\���Pj��Mc��
���֡��9�[/��<]�%�א�B�B�j
�n�t2�����B�{��
q�Ѝo
-���|{� .ħ�c�YP�"��A��.`CΈ�ډf2���U��7��RA�A(�YH�dT��{���"��KZ�}?���a&��X
T;8[����H,;�˳m�g����$p
*<d�|�T�`cW
�$#�U��b��z���� ���8W�
HF��TKKe��OQ����M~A�Y�un(5c74ˆ��'iHtW�n�� )�W�
a�F�h���j���ھ<��O
�X����i^?��A^E^pG�*k�C*~�����S����*��{P��At��!���:�\z�<'6��|�5�k2��C9
N���0�LYQ?�%qؘ� ���T<d���G�ƣi�
-i�;!
�> ��}T���*?;ꀲ��@�
-Hr�DbC(�^�K��ĔN��*��.c���P��#��ƒ�Z���*�]�ǎ^����Бx����齆>�9QD�s8���J8a
���Gl�,=.���m�
�@V�>�ɧ���"�G�Q�~xڦ��t΄�M�%Ti?3���A����b=��Ƙ����
-�_���<,��[i{94h ,)���ԉ�E�~��x��+�ҡ�QU~�ng�I��A6�
�N�_��ʐU1�,��P|�V
-=�ȣ�@ԈV���|����/����TozH���_�����c��Hk�
�{�o�Ư�t�dn�p{�/P,<c`�@$�z����
��|8��^���|J�p�Ԯ��*����?ަ���CԌ��JMl K�V ������ 6J���Q����$���"f�W�[�?�!����H�@eM�!�x��A�>
-�Z��h"=&+p����'کF��o'
6��<�1�=U?=f�H��cFpyу�
���"O�C�!)&I�S,�v�~~\�D7�� �k��O�@�k�O�q:�Г������_�� �2ӹ�Ddo1������O�U��:*S�aC���W��һ�KG�����f���ᬥsv�D!&�")�s�>�z �<�~	U�Au��78eR����q�`M
-A�
N@���q����9�ݦҠB΀���^���H�j�
i�qt�{��?of���Ӑk�d:�
�|�	�mJ���U:@]��L������J�Ўq>T�����:vHRM�F m8t���P�*P6�{@#�P����Σ�L��
����P]E����*���W���@,[�3
C�a�^��ͣeOtA�x�#��,ܯ*2#�Ι���϶e
qhL2)W��E
C#F4

��
CW��2�k|&�ꙇ$|({��I�#c����'��h�D�S˿��px�~j8�B����U�Q�(����YQU�
(D���[M���၆��p�g��
6a��)-b{Tye{q�
�c����'����Dҳ
�wK���	�U:�h^�Z��LR��
�Z��h侀
-<?��}K&XCeO�����I���Ϩ\L���Ǒ̞A��<'����sf����L���{������i\O`;I�[�]� 	ƖƤyξ��}=����YL�3�io	�M蟿�9��YN!��P{�ړ�c�ha7�1��n,�pS2��N�漅��q=�C�Da��^�w�C\ m�v)����o��$��{Pn6[��
��;T�
qN�g'��OJ����ڦ�W�P"m֕3]!$��#�k��uFޑn��aev�T�ԟ�
���	�4b@#����`m�&F�_G\�NeQ��<����)r���(�Fj@�o>ė?*��AYxM(# XB�3{��!� v����6�JbZ�?@8zm
-roߤU��xش�Ol��6֤xW�
��Ё�%�H�I(	Ɗ�����A)��|
��b�0uA�[��n��ҀV_��h���|�)�1b��p6T�o�
0��oq�\�G	����T0�_�-x:
�N����������$]�H���
B�����AP�bD��J�K^9��n��~
�dd
-
p���ѨCT q���ڿ~���v���xE
����]uQ~1 �,n��Z'~Y���{v��e��o�Z����D��!�
<9a���>�rL?˾�G���/#[��a����!Yay�&�4�F�BU?��!�t�
<��yM��}�8�k*�M�q�6y�2�
��-`��f��J���g��8T9
��G�j��
� �2l�\a��AfP݆��B�����|����B��j������@^ܨL
-<�ʒ>��Q�ٮ1DŽh��X �!ų�$�"o��y��r��wĿ�k�0IkxIjj�§L�@��T`�#

�)�Ԣ8���Q{ػ6�����kC;t�8���
-�R҂hW<ŝ���T���F_~��X����F�� G�@�5C��ϧ|��
P���@#U1�1J��tT�܂�tA"��
T��a¨O��
C�UN����e��v����p�~o�+�W���W
1w��zNi��j�ÕX۵�	���t�'}���A[T�9� ��S$�{�`�Ѹu7�n:�a��a�{HJ��!�$
-X���yk@��:�}m�PmE���f�
x�!���)O�>`xz��2B��z�?n�����*���=
��o��ָ��С�cJ*�|��Q�x*���P|��h�Z��-��R�+ at cحL9Pb�F��j��U$��W��ɘ
��T�d/d��{Q�!e�NJD��Qa�Rj����h+�����C�}Ϯ�*
�?�iU�[�1^
n�XԠ�C����ԋ��._��C�	@G��̷��K�
��(�Ts���
M����b�8j1g�-v�2��C��`X�� òB�*���dϤ�noI?�c
�mWM���_~K��d�_%��K�<�������g|����?�ۯ�,����������������?����_~�_����/�O�������~���������o����'�����������ۧ���{^W�gx��+�ރl������G}Ã��|(�VX	D��Y�h�g����m��DTHa�}l`�`C�K�#�[�A���l!,B`
-J�8H�dW�Lᤡ#f�(�v�b� ��L�2������ 
��ܝ�3�>�̽}��G{�C�P]�;آG"_� e����I\>��G�
�
-k�c�
-Hd��1�K�����*IBzL"�ZyG�h�c�'�-��V
i8�#�M�
ʱ�7���R�
-E����|�޷B��k��uґp��|Pޭ�8I��W�=��0�+�rU��(�,)���<
��J�8�r
���&�-��x���
��Os
-K�3\�;��u�c��|}�>��t;I:��G'Tw�Ƅt� �]�

���nj�#v���ں�~+���y
�9U��:�.�l�8 $T�c�Myպ3c�
@�cwH!�@�rv�:A�5
�,��J
u��m��x�1�2M����0���s�����K��<�ﬣ��E�[0!ۨܿ�����
-F>��4�E=�<���*��(q�V̇��T�
|m�;B#���'����g�w��7<
�iOX��u��֣
���֘��8z�%\����w|�Xd�3���@	MGu83
i��<U��|t{d9)���{B0zT�tr�B�GArzt�
ݐ��le��
;��J+5Ғ{�t,�"����߀V#< �Z �{��&��K���k/ഃR:�`�yO9�Ҭ���H
��|���x<�F���
��>0�ͼ�o�Q`�7@�h$�f%�����
�
�N ���Z	v9��A���;tPE �#����0�A�ٷ��Uo#0'�ͨ��ۮ�t�05.f��ݻp ��1;E��|^�`<�ު���u���JF����l\I���qb� 5i��FW:���Œ�
�`�X�	a:���R�
"V
e�jsA-)�2}�Ix�ɢ
x�%��X���U���	S����
N�9l�p

��:8�A�
�{�{I��"X�,b��'��Y�6�
-D8}ė��� �ʘ�9�W#�������yUyN� s
-��T�D���� 4-H�MQ��\p�92
l
���t;�v
�Y��q	
-9{���B[/��SN)�
�5�
�$�#���JyHG�}�<���Ր
Y�!�kCS-�I�
�
��w�ưW��?�U��e�
���=(�
�=:'С�h�͡�
�<�s��A����@#��}�%؛��vX%�{b%	��<�
w��	
f�Y?���"����ɤ���ܳG%��"*
M.��;���0��GO~ϼ���!�}��6���j0:����=�N���$)�m�u2X����`_H����0���pH�]5T� �D�����QG�z�%�l�'�� ?r����,d4ds�&߄z�>W�Cx[ μ�a�05���_���KUb�)�9Y��P�-�J�z���U��F���K��Ӡb
F� ��r�g�ѹqSvc�ŧ	�?��������
݉�sw�B��\p�쯋��G�ǼA�銇݆� � �T��|~�9E}���aK��=~�K�۸�!��#�ԉ��{���^LH�V�� ��;��U��}�X㢄�ʁ��*r�e����%G����,�Z�#>�3�g�?�؃�+�O�!�H̏�
��Wg�7B�
��t6<�
���:���s��wwt�<�� ��{xSU�/�k8>�5�9�S-yo]���$UF�{o7��A��bM(r3��WC\]�.\�_ߪ-���& ���]�}���ı���������*� �7����d�Z|-y5�e՘'�1��8z|	�B�T�ŏFœb�'1^4��6>!?6+4 ,~զFL264T��;�E�V��?�Z����c~D������N Ȕ�@���C!Fٗ��|T�7���eX�cEM���~2{���݆x-kP�*�s>���l'8��G}kP9�P��%�}8M���Ww�C���`9B�� [...]
�
-Zx�=Q���kA4G�I�3�Hd'-*�
�GJ���һ)�W
3tO����ܙ����c�"h�u�Ac/@�l�$(a-�J/�����
-�,#jڐ
'�R^�S1݃�!L� D3��c
P
�P��W��ɷ�؍
!c�u���*�
L�ޏ�r>�*���ا(�8�)�j.D
��"̈́�
l_
���>��i
+�
@��L�x��m�`�^�i�W�MM�0�'$�ʧ�k��1��o)�pPyCK�(�� ,��Z�Y���"Xk��dvU4� ���E0+��k����0���
-���(EA��wE0��yrC�u�7�&��Sț�h"r穙;��s�"�
�9h�:
Ki�G
�c���G�T�Y����<TG��J��.x��C/b�5��PI
]�!��� ,������
�$5�%M��"H	
����c@�#���'0򣴪�r��8��+���
8�B
-sǼl%k
 �����1l��	"Z1�9�h�Un��nA�$�C]p
�,�_��Ĭs�~�#�0<�*Y��
6�ϱ�C��
o
�vG�5���Z*Z�핛���O�ގ�T�InCD�G'4�>��~
04T��\�{|k�)���p_W ]*	�'��8
'٤lR����n������
ҳ9ɝ��aٞ����z����[��p4���	�=3�kx_�V��pk��T��Q^�yi�j�}c]O��F�4��$�x
-��Ȫhv��x�k��Oa�mDQs��X:|�j��*��O6���WcīA.�6ĭ
��g�p��1@ő ��ހiޥ��5
�GU�s�n.��X��z��7H�ކ��]\�`&���D�2yo�
A���[��E4�*U�2��y� P�L���my5�!xt�v����8�f%��
-��)d���_U�fH�1w����Q̮�V
�ۧЍ��t�7��q�v�5��3�)�0�>?�~n
3���JwU*�r��k���Wp	w�sC��d]�c��[пަԓan��
�1s��+˄Íl�BC��������4��u#4J�`��sJ
��� �
��%z��{��!�,G�����oaD�B��2�|n�[����k�D[(bIZ7��
m,�[��jۥ&{ű>S��F`u4�p�CbH�)�	`��������ᄅ%ņ�c�7��a�ç5
$2�k�>!ژbk?�ŦB���m�䟏�� ����
�������6!L�ր���w��5��
��������ތ2���/iȆ)���'�Gp�pq��	və�(t�T�>8��A�
�4�)L)�r�*N�`/ ���i	�Q�G�����S$�p��{A��5�Ѵ��9����P��K�G�o��9�&�Y����F=۩���PA?� ~�H:
-�q�
-�Y&�Jl��o ���7��؝
�Pl���A��������*�~��nkL9���մ7�a��_�ET=R���B���.ĵ�[�S�m�i#�n��Iu>�mh��	��疢1@��H�-2��\��7{7��ʒ!l�Z	�
�);�_
�����(a� j�z��F�q�h]��Z���t�A��c
-�8��ǚ����
���hS�E���1����́�����X
r��؅�y���
-�8�+�w�4�bjs
�y�ќwh��{7��hTD�cAŽg\Pn��$	
- �,kBO��J2-��pk�z �+�*
�$�8�|R-����;ϰ�Y�7�����K��|C��
����|i��r�#u�5_ ]�!R�F7�z�T1
28�
-�t$�3���dPƌ
-�t�:�g���:�?Hm��rYfd�e��t
No��Zk&]X�?(����Q�i����!���uz�~5��=f4e��'0袋�=Ex�C��y���+<3����G�8�5LHs
���7XY�:��ƣ>�/����g�ռC-ܡ�٥?>��X7$Ϯ��lX��QQ;�;
lĜ��D
�9Nc��U�n0�o��Z=�����,�F�6�8��<:�5ג�^�*�V0�kg��q& ؜	a�k�_��
����[�)x���I�����N	���#h�
 N�Ժ�gC�T���
-K�F����.�v��PF��D|�B����
�ʹ���@�ɷ��09�>X-S�<Ka���&�ݿ��2h��
B3�Q:���.�\!�)AjB��_z�cJ1<{�P	��8먗�8�֖��͡\<�����z��J�7�r��@	[և�`@�h��L
-�H�x�#�������5�
���z��2�J(�IhA
��o�3� ��$��^%"i;�u���׉\ˋ>;3.�<9 �<{,7�K�
=pw�Äј
H6U��P�a�� ��ac�8H�X�!�F��PĢOHF
�����.=
_
� ��'�o�zRE�{�b���>����c}�f_:�l��WݑqM�\�	e�*�q>���'��*�ݯ=~9%���0���/����I�tɝ�f���jz~P�^f+eI�=�K�wZ�&7^"+��{C�_�#~u��o�����H���k!	�–��>�ԔPD�wz�QЏp���KI-z��)�gz����Z[��
�̱Ǥ�d?z�*2u��L�^�K��PA�����ǁ�EL�2���
n��, T�tXś�
ey�!��2$PU|F�H�S�0ͷc��
�ڝ��ݽ�Mb�!BkO/����Vʉt�o�0UX^�N��v��M� �����/'�QB�i�o�3L
[���/��{P(}�.j�M�r�kH��S��n��V�����
�(�a
-.s��
���-���Z����~�W��z�&�֑$_L
� F������v_�1z5x
���P;ܸ�Q%��,��
���
�1ϙ
7DA.{JvL�����f�g��=��<W
��[C܈=�H;RH�Д@�3K���r�+xν�3-�o
���!�
-p8
�N�N��P`v����k�|�ʓ[?�^o���M�-q]s��<��u
�ԧF nZѴd�#��J}�[���S1PR���Qz0|�
��;�	j��Ԓ����+p�.w7K
�=�nEN��%��fO|Z��
�YSc�a����
"ny���鋾�jz�-e2��[*�/G�Ν
��[�Chg6
՞�G���
��;W~=�D��3��{j J����
8��Z�e������i�_���aULhh��4$��M�evW�#�PU.!?�]��aoӯO��*��M(*=Q�
����g� ��Ry�H�QE���y����G�b�
-��
��T[�������8��gl})p^
�r ��p�;�Zr`m�� ie�ڰ��{�Q��
���
��1�
.٘	�
��r� V�8y����'��G�`F��_�p�
Q�N��aȉ�
��[�,Ǻ\��8�x�n^�a
P,������s=�Z��וAp~��Mv��'3�t g+4
הY���Y����|�)�8E�1/=�ѩ
ͺ��Tź
 �!��^���;,0����P�7%�|H/�����$�}�P̯=��͑%��
�>�o���������G�eV�i�AD�Lҙ"�)#�
QR&/I2W���TD����2��
 :����I�t
[
-��9A��fB��k�fl�YwR�')U��DOq
����0��� �2%	4w�tJ1���8�U�~
u���T��Q��5ٳm����= �~�8R�32
�]�7���ߪ{�j
�AW:ڍ�=Xs��"h_gho(���
+��K��k�a/�p?�*?����s��8h���Vݔ*
�b^�_Ż\@���w����#í
�]b=�J��?6��:�R?��#׆�E�J%��7d4<M�h;	^�*w@
���1�
E�|�P���)�հ8"�8rw
x#P�hZ
-ñ��iq���t�[w�xTuB�w�U?K��HM9C
�>�����e�YY��� �;B�
dHIN�}�=^��-l\���<���@�-.�z at 3�B@�P��f�?�Z�r����
`?o*K5o*:��0
���4_�*�[��\��W���.wF��u�:��!�S��GP�w�i)� 
-H��O\1��=2q6��i�H1
����"�K,(X�pi�D�82�'<sr�S_� ��r~�:ƃ"���ʶ�
1<ɥ.%�
-a���&f7K|�_W?�(
ae�^$
j|ú�>n�ᘽ�i
��
]3�n�'��Kv�
S�H&���P�iGNj�_;hRT3H�e3�������,�yZ��/)�
b�x�G ��B�0@��
��A�J�q�<���>� QC���̾Hl�>
-b3�gYG^

�
>
�nIYW���5���i����IZ>�QS�e�gZ�����)g,�����Q�v��
h݋O�I��Q�g��/q�+������aE�N����Z���
,P	$�=�ۆt�e��X� ���&�w�ӭs�
�	�*3-�
-$=::*Hx*rZI��8�ڠ�^�g��T�����&�F���8�]z4黀�u"]����>�c0jIh �$[9^�b���ߪ�[3��IA�
-�����<�8�_p
k��ϜQ�Q�Ǟ\�
-�J�@w�"I~���Nt��EH
�G�`���=�:����c@��Vp^¯ה��g�Gp{��)I2���{�V�3��8Y���J��;�(:�wp�)�­�)}=�	�tRHp�tgbR+@���\�y0��;J��b���&�����?�
)]�rfgJB0��q>੬��
N�_AF�/����Z3��f%1��^f��#�h�(jf!:
��+G?�B]�1PX��F��߹Gz�+@� {
-mr*R��\̈��`i�h��R_���`�
Μ
O��Fh��Բ�܍�;��s?T�9�ٰ�6�u��iq�`�0�#����n��5t��TΪaG�4�+Y�t�3�@�diL��1M�6�VVRe�m�+���(�;�I-��9��k��!ǁ��)x��b��0��}��k�≡,��^ f
��>�f[@+�Ovq�lO$�@:�W�'΀�� �
����}ҙt�%ݾ���>vn"EN���'&�8���ߚ��S��!�`e���t�
-�#9�|s� �0�3hYB+,fcE��K2"� �l#t��k�V�F�xO+H~���	b%�U$Ћ���F�ɂ����=�_p���a
6��n#������'��)��,`4`I�u��<�ho6��StǘjI��~P#�Kd�QHesxBW����-�B�BB��L����5��=
�@O�����7
��`��>�V�:}&,I�=r'�|z!nK����Κv�
����(a��gc2�8�\�G�G;�
�9K�ճp//n��5)���
	ze�=��;���T�
�.D0�*�
�\Ş{8���<_I��6
 ��M�,�Pva�a�A
�?���#��E}
-�Y�]	ZУ)�zYv� y�Y@���|���o-��{������U����lU)
L�w{���p0�5�^ë�)-0�pe��Q�=��=�A2��d'XzȕnQ���:;
:��W�ʌSE��MW==�z:64ĺ[�����hP�֋�
�]�
-���
zBco��u���[��
J� ��!�_!�>֫Lëlb�5���-p'�Df�U;�x�]
-�(� ��`����ܝ
&�^��
�-�
B�f�t{ă
%��`M�hN*2�G8=��A��*bQWg�Q�[�i�B�O��lh|�ت�yD����i��g@����E��M^V	`��7W�

cE�Ďi�*�V�P�5f�w�Q���Z�^�TE�Ȇ�;���ϣ�$�c��
-�/dx��0�
f�v���2����0E%Ơ����I�Pa�̱sT��-�yH1 �F�\}j�<)N�ί"��Uϗ������9��}�N
C��j)�V�h`U�롪6(�
��=5��&�r���b�4H����O��=���dAV�ʦ����<�pi?
W������@=D��D�
#TJ�
��#��f:�J�~���2�w�bv֔n��� �����RAh�M�a#�\�
X��9`�ͩ���(�:ͫ�t�`���Z���#g0Q��2
�L�ţ
�>��A������DXş�����
]
�
- at P�܆��5�U��u0�
�
@�Pg��x�)S��+�0��R"2���v�H��2!{z���$g˵�
@GH��}�%(�]�����!(�������΃�\+B"ً�6����ㄌ�	0�]�������
�g��,r�p�C�1��@���H�ؗ=�R#��\�K���
y����"��q	�I�(R]��k$��F|�ĜW��?���{ �����aS�: )iæ���;�Ƴ�C"T������7�x�]���{�p
?@4[� ��X� �G��[ ��G�z�x�-�4
�2�T*��>%iD��Ʀ
m��\|ͱ�<�|@��4
�
�0{jQ�j{�M��Kb�quGJ���
j�@
�Bvm�ˎ��8�>{	l���%	�_CDL��!
W��6|쒰�.7��Qj�k1�Bߨ�
�����s��<���6ņ+J���p{D#),�\�
��� �mqS"6�����RG�
"�T'Ov�u`�� 7&M��XX���XKd�!4I��Z�;"��j���'��d����&d$�Aii��Ž��:�50��e拭F(�
���,���.=�
�d/����W���iÅ��7�z��e�*�{�9`��	�D~��k�LD�#�������ɼvHIa�~����������2ЈL�[Q�"��!��N��*0V֝3���� �f��dL�QC߃��d�ڏ`����.�J�e�
��
���T_yI
�l�Xst��0��8&2!!
Ȅ�2���]�"�! QS�W#?�1t�C���Q�� q�l~!_��r,�l�>���<�}!�{M1�ѯ�3T�_*�+���$_d

^�;
�
�{]4�7�
�r�_�)A��ގ~e
��rÞ�r�����e�J�R�rS?�).�5�`�L�{���S�qvh ӱB�Ry�p�;ɦI�j�i���.xϣ
�tB&	*�����R���o�p|�C^�%�$�:��e�9� S�峑�� [...]
{Xn��}v ��_�r�y�
�CѷH���.�V{�f�ȡ^��m&@�5� I�(���1ЕpՅ�ld�BE��?��ԏ{����h�yll��E9�,s��@",
-ߐ� YQl��{��ޗ�!��#tc��VQ�B��/�d�g�A��GCD-�׭�&
���ם�Rd�Î9���0��$l�=#
-�e�o�����)_ ��%ҩa�n09�II���N���d�u�O��M-S�#����B��
� �}?:$H.��F
 �K��t|�!���J��|h��y����%/�-Z�F$>m$sJ��|{����yT㱁��+��w]/iN�W�HW޺D%�����<�@-�#�(�yG���sU-��
T����h���F�_U������)
-�46	��
-��'7Bѩ	�D�]���E����� Zd.��(�
R�#5ُ�XH�'ۛ<4����
-<b�'�z��7�ZD�3LV����%�,�vō�=Y
�����Y���Z�
~�[Zuc
n���(9|���֥@ϟ
�5�
3瀮��,"�#3�p�$N]W�L�fHϒn��z4D�-Jms�Nd�|�+#n���%� #�uw�,t�r�����;
'��
9��7��&%H�2KKb#>�	
`J}zf�Pqq�����c�	���|c��A���|xDHr�h#x����V�^�
f��v��!��!��:=�kJ�>O���+����pe(�S��@X�
�Yu��P
v���n��cĵ���D��vjr�9��ٽ@ u���*iv��U��u��I'ɠc
!
8�&�q��e����6@�A�Y�9R�/��LJ<�nT��KJŠ��I�x,�^��ʃ�^�r
X�=
��%�0�LA�E��z/i�e�0+��F�Ƅ�`��
-t�os\��ɢ�k�o�V;�ƶ�
RB��7ݸ_��4���p�_�)�M��C
�J%iE��A6�A�lV���~ѱ������3^�����B�{-��\�Y�ayHh�NoR8�r�&"h�,���y���
%D
e�d
��!��1�s,�K�1���K��+�8�@���ߛC��2?�#Kd9��,���@Th�=�9P!�H��|�~
-����	u�T0�y�4~z
�͘��;���PD�눭SO�^��;K#)+��~�d���cMD��w��C���\��I``R��S�	أp6�i+�z�
8_���|5U����C�"w韲��^�o:�^j�9�|-Nt���qBgOF
m` 
�����2�zH3�r��� �C���
���E��N`�d ����zN�Kl))(:��q��]����ؾW4y��
YmR<�Xߥ�dEF�C�z�2U:`��}��:�߮'hS�;�
-��
�|�
-�#T���>&�
�p�Pg��6�TK1�qt%�j���u	^!��s��C �q��\u�A���:ޔQ�ouӜ�A�?4���@_0U���^`�W����Ѝ:��8a>B�]�~�2$=BXM��)��
�gR�)^���&'
-T�POT'-+�W ������rF���e�>�J�T�ӊ��<�X�V at L�¦H���[�2x+V�}
�oR��@cH��
������bK�;��O��tR;��r���R'�u�X>��kP8q2�������!�Fص�P�A�`ѫ�p/ɞO1���~<����\
2!���)�����.��΀jR�h��ĥ`u�1#	
-8�)���LGD��í�v��@鳸3(�����X1��{�S
sF
-(7�_�
L.�sR'��JDZ�� ��
uH�}�T�
⤉b�Xqd�}
S��#2�ٻ1ݕ݊�u��}8xBBc	w-x�'��
����n��
/Y�}��6)Wh�1�;�+��
�Tn3E�K�W>�%�w
�j�܂A��_񫨊@����w7�tA�)�GR�>�kY���
��~�4%��o7T�Ni`f���X�|
-��UW��DP�;7��Q����!��lzt8d ��l�3�&��p8jH�$��P #�Ed/��@ 3�M0�v���'Hss�:�0����H%#Q
��.�{5�81�tj�0�IP�J'��i}��
"F,us*_˜��l@�I�:Jb, )�@�ݕ@w��-!��(�
��t�e��P
%&ŒSX�y�D�r�q��QZS2�*b5�VO̊
D"�']M!ʥ�
G��'Xv(
t��h85
J���CFSC�ݠ�W
-S��H�����B��^�r�ZO�l���}-:T�.��sǨ��뮀U�b��[#���U	�B�
-�P�V��p�
�� c�`�:�_�"#�N�*J���2��J2����'�I�����i$��	��GBC��@Y��πZ � m�!Woc
-=�I�E
�u���yZ m��oMs^�߆�i������u&!Z���	�a�Q������1
�&`� ��.���3ۂ�
�v���JN��&�e� ���,�}|NJ{�����,�<�yh���􉍕����ey[E9j�`S�Q����K
���5��qY���O��D�a���.�5�~/8�!������|���	9����Ĩ�B�-^,T�E��Xb��`G"���-�8
-n�y���\56�g	�0���=
0�Y
(;��_�79���H	#��̄t����I��G����L�
-Դ�
�ѐ���LBZH{�����$aXZ��Y�
\ˢt >�9R ���K$���Gǽd�t�N�j��W�lZ q�$�x'A;r}�ܸ;[�������<�s�\�4%�P�(H`M at o�
���g �|�mR��xp��h��n=��8��
= 
-8]	1|A�A�����ҨҘr��z���B2���(ы�L/�
�����a���
-�_����[�ۡ�)#u_VK;:�A�Hl�}���Y�D��h��@h����L��磣����
�~�ze����e���3e��B�h�%.UQ�M�'��\����1���AEq
[��_�d�%:���N�Fgw��G
- P#�{*#��3�6� .�{
�̈�6%d.6;��Y�
-���Y��Īv/�{�x� ,X՘����I|��w6q�_
-��C�A��tf��B��
�]�y��6:L�A��������Gw��p��f����U��≴�@*���T��Y1�k�ɴM������#|����piZch �X���#���1�ƾQ��5�o�t�����
�Ϙ�?ߘ
J�(��Ȱ�����#r��������V��K�3؂�h�5�������
i9�=ɶ�^+0U�����~�ߐ�'6�/�eH[�AE����|B�J
-�p�"�h
G�fʡ��?��o���7^%;�E��\�r��8�@��k�I��s
N�n�D̆�&?��� p�U��!���䎘{e��
-K�P0��_����f��޳̨�2ѪVAY�b�ս���"s!fO�c��<�Zᙕ��i}���EC�$%�|�γ,����㴪�c��6�����1�w~�����h���p�|�O?aH#�)��u����IG+�>�iz/NEO��]
|@<���{�z at jԹ�̖����f&Q��
�>9b<�:f�/��"�XEN��'�}��B>ʋom9V���
��m����%��˒��u%��Ƙк�A��L��nF~�����NH F�̕M(&Q��	��ژ
�k$�T�OA:
{���6���	�htŴ\��
��^�|�J�w��fZ%T�^�y����H�%vbxb=���n�if����`��}�~����H.��\C&
��5'�ۮ��c�E�5V4
�&���Q�֌l�><F� �	���?_;�.;
6�R�r�H�0,��Ka+�>�PYZ	Æ
�Q84�
l؞ʆT}��T��~�J�T��融��9����03i ��N�qm%޼���"m�P Oa|�L9	>IJt���|j�v��T� :2�y�,2�$
�OAn�� ��CoA��yb�
����!�����0����S�xID$��b�"������:�L�,�?�
�nz���8�w��,�Se��[���?o�������j���Q֮����Zq���T�f,�@���
&�Z���";Gl�f뇈P8�J�{�L�]m �6\�/J�^
���^ ��	��{�2�{�F��1W ��9�'�A-41���,
נ��7R)h=+��~r
�Ch?'7���1�'cA{DA�{Y���Qpr%h�S�Qt��?`�ÉDEU��{��O�������@��#�(S� pl��f1��?��
-A�t���잩!\�-υD.���y*q4����<�^���y�k�l`�D�N�L�͝�)�ɸZ��m����m��f0d�(���dM;���Pf#�	IL{5�HP&�ҹ��l1�2��

�L��T
l�B�.p��g�
S4zIue���)oXƯ�4 at o�
8vw��(���U�?�	ƫ2rL��0��c��Hq<�x��PqQ�2v J�2�:�x4Jr��A��o=b�[Ny#'�o��)7
�
�`ũ��͋���
��>�1����J��u
�H�=�7���Yi�����ф�Bީg2�j��x&|}_g����=���N6��^j�^x��P=`s�y]5 ���;�/��
SY`"Ƽu��g�H*Y�Q�6
�F*��ҍ�L��B���β�Z���X
���^�
4�Db9�I�� ��B'�
-?��=�o�����ˀ�W?��
-l��{�
--��ת<~���G��]����/'�*�;� %48ߎs�T{hR��Z�
��>m��%yy���R��z�k�z�
-�K�Ʉs�)�K
-�7�(B
>*J
-�Ո�uƼ'��
�.����Ȓ�a�$҄���1r���'dPr�I)�E��(ZA��
-P=�t?l��gE�c2d��=F�3�,���U�,wO�ǥ��x��`D��vn�P
a��OMb߹zLB��-(>���a1K
�?w>��
.u��y����4
Xp���(4v�ap�3��y��c���J<���F?*>U�'��>_ �4�
-��|)��Ҟ��/VPp��>�
8�a�3� ��K��W��Yu]�54��C�� ���H����9�^*�_������4�������3��mft0|������p��
�DJXC�'�/�����p
A!�|Q��d9:S�4�
��-�|]�8���^�u�u?�)�n���i�j{f��81�1��ChE�;�^��=
�T�@k�i��J��J
�a��)��|̓�
w�t��
k�
�u�>�
f�&�홥��BM�fx���d����pý�
9R�!r!���C��rs�^��EɘƷ�
����ao֜g���^!�ݭ4�mǥ��=۷Cݶ�5Gy-U(
:'*;�(?���B/���1ۋՎ^Z!�������r&��ˑe���� �x���ZZ��9�_�����
b��.*"T<�ɞI�i����7*��~ b�d���0Q�.bk�|C�f
�S��Zk���د|�������0�5�M{M.�,,���<��F�Ф�X����kc�1���g��i�\���-�D
Χ�
-�1�9�T�#�p{(�lEIL����:�z�s=�ZhPBa��^�����!&�9xM�_�d:�>�b�:��5�
Zp���@�{�p�Ey��9I�|�Qn<2A=އ27i/��ݽ
 �EM35�90��!�Ye
��w���8
-)��H_�o�Gr���R0�"�cE! ����״'�-"���(
��3��U�J�@
�̊;��s/���KeFR�Q�b�%��T�p;N�qz<׬�*z|m�$Yȱ�� �����0� ��������/ww�e���2e�w%�Mgګ��8	�o�L
�
-础����
	|C�z
����#���
�q�*�ǘI���BFDO���
4SQ�}��w��ω���~��<��]
u���	4��(�c�
��^V?�#��B7W�G�8O�JSaj$5�
5?`K�Z{�z���G\@&r(	f��ށ��@�����9z�����x
����L�a{�	AK�Z���Ϫ�a���LF9,"�s�˶`(P�{�8�
���,�:��N�OW >@�5YR?�Jb[���:��S�3���%��-5�p����l�����'�
V�#������L �ቁ�j����sA�
-���8���
Vﴍ�"���^�
a4az
O*�U�a%/'i������b
@6g�=�kZ�7伟��D"�{�
ˁ&�c˷=�+�|�nt�\�g�ᬢΈV$�Iև��R
۔��9jyӑ����g�ݽ��{���P?��q�T������Z�h*�h
E�=7B ���ugI�K,�F��5�B���nB=
���j�0�{��؎v?��󸚴�^C���$���)p�C���1ہWEnp�u�RD�
��8Q�h,��<-h
(�� �:"�f��Ť@&(��"`r/e=ބ�߇� �(�G�D�
HCo��G��}�[*���3��]���N��;o����̈4 ��`�>�A̧7xͅ�_SwG��=)�����1�Ө
-�H��~e�dw{�����
,5�B�љ�˳^'�
����
�nC��)B���K�ɬ-�LP�㙔�L�顈jC.�7Wl�w�����7�N�UW�
�?e�Qg5�̬_���&�1�R�/g��ǽ��!��Q�f�l
j<ߩ�#��|�I���>6����4�16I�l�U��Ofe_��i�g�
�"qK3OJQ�ye{SOg��d�7q�,���P���y���,
īO�L��x��˭m��>�N��y�%���M5}�,��[�oȷ^{1Qe
�i\��_�/��{Җ*�i�
���o�a�?�}�p�������
-[.�O
-v�r�p� ��@!Y�˞P�I
-���-P#�z��W�IX7Š@�0�xo=��䈜�߾�E��]�����Q��u�
,
s^J���Ŀ|-SDWv*�t�q�i�s�a��=�nj
{q;=��Qn�8z�{��]�{uS7��<�=sDZ-?� ƒ"���
�|�!`��
R܎�3�K )$��`)у"3tx�?u���4�HA��
-†Q�1��M
^�NJ�wO�>�+JƳ
-e-7
M|��ߺ
A��*Y�r(I�`�z%K�Ql�s�3CI~� 4�&�
�8z` |�C
kN�����r�?]��9/'[F��+9�$#�
�{
Jp�d8���
\�}i]��ϗ�q	몴��*��J� bJ��:�LQ��>�֖Y�خ
��~��ڀ��^3{՝2��F{¥=�Z�R��V���-&s���AM��l�
�>&���J�UB0&��)���g8ܩg�	�́�
H�9���� =|lW	�:w��Xe���ą��h����(��r�4�Ac�� ?�C3h�]Ć^ $��K����B+�3P!"$a��\
D�#;2&2���mp�7��I�zL���૩!4CKcx���ׯ�Kx����;.�E���ۍ
-@�ر�m=��$���B$j�u?L	ZX
-�8ldCcq'{���o9aǶP�8\"�O1t��y0���	T�7�wV�}��
q��'E
-(�X��������۷�|�#
�i���19
L��3V1���s�
-�L�~
�y�w��a���:$F at 3x���C�������,�p������%����M����(��M�g�o�gg��T�GH���Z����x�4
��$�ƅ
�
?<
E�'�pS�$T�s�E�}�ڐY�����̖8�����*�G�i�m{
-������AA�8H��
q^,�/;
�W?-W����&@�J���Z�d��!���H����h���-EFn�(�%�{x�_'�����,.��E�J�ʖO�~����
-4v�x�����*w߳���H����PH$?�Bb/W
��Ύ!��,���f�G�>�
�*xV��|�^���������SU���7�!ZG�#�'��g�yT��� C!�t�J�|�������uߤ�[��O
��[m�Z�Ҽ�
zձ�9�
�J�`ā
-�R_��*S�*	�yɵ���s��c��u��R�
�?{:���l�(֟U���1���^
1M�H株~~��'9�����[�&����
����.�c�{����
�f�
��[ϳ��_��=�@�Tu�2"2B!-��� �@���B���O�p�v��ƫ�X��fI��@��@��GQ����jx�v�a� o��֞���
-��]�T�������`���1�,��
y{��_
-���r��
������(���)U��%SZ���	Ug�A�*�YL�H=6gD<�p(�W
-b ��	G��q�� ����%�#������bF����ܗ��K
4��j�Gx�Kyo[�:��aG˹=���H��R��ۑ�
1eoDT
)��u���y�v��%�����'�����[�z��@��l�m.P�Q�
-���M��
m�=�ŀ�ya����y
�d�K�qK��y;ܣ8ا����΂L�/p =��	�l_ZG&R���

�Q��� I�����Z�ʒĴaJ�
n�俘
4;�{x�
-�3���x�f�^.]
�R!9�����϶J�tU��>ǀ��]�m��j�xR�)^�'D�����ɻކ�}������[��L�H��3i-p}v<�����`G�K��"�����ߝs=N=�n
2��u'/��a��:��Sc�K+bf� {oy�!E�k�����=k/0��)��̞�hKN
��*
@)������T?7�vde�
�����ͦ��	�:QT		׫z6�^EŸ�	�g�j8�L��)�fmF����-�@�	�<��U�uQ�q914�DMIՠf�U��������������[���_�A����TI���'�
��#"�Л_
ku�NVg}|���%O"6{^��C�iJ��:����9
gHj�1W�b�P5
-�:y�F�
��
0���:0aG��	q�=쇢V��^�v���9{�(5t�4=�_Ǿ��Hi��:��<X–�O
-�?���c|�������~�����ǟ�����?����_����ǟ�����_~���ӏ?���������?����������8���������?��}�_\��_a8�W�����1��+~��ǹ�L�>��d�����bcv?��KAL`�h�f6N�
��@�D���O(�㪄vq�O�%4f�Dt�эxE�o�̽���Y?2����2�~�hhO4(�J���h'{G� }� �~>RC���?(�6�%����s�:��J��0Fz�p
�Hʠؠ�,,�L���M���;��b
r���
-�e�wv��΋|�&��R;�H�
�R���Ŧ,̇�{�u
�K���� ��"i���j� +�0���
k���9������=�5��������S�q�04yH
ķ�A{X~d��<���J\�� �m�C3�Mܾy���ÓƵ���3c���*�
-yp97Ⱦ��Z��
�m
�t�M�~PH�0�h�7M.����� ��n%o�bai�x���
�2 
D�fmh/��y�Z��	)0=6xx��Pr��*#��<3���X��Y�r�:?�����xK�3���~9��������?썀k�0���5��^�I����W���4���6Vz�:�J�
E������E�8l�$ן|����ޘ��1�2�G_
���,�>&���:���V$�<�|>T���˰�3#�k�?�Q�ɗ�
�����E$��@�HLPϥ�Z��
a։c,k=A�s0�02�K.�����k����@�y7Eʙy�|D%e���)��zBdV
-�f( V��)�h��hcW��V~����5)_4b��g����z�^��a���c֨
��ي5
z��u��AdE���
|>���V�`�;
���,+Cl���i]��d�1QW
��R9Z��S������l&�����S����͑� � �

�G�25
�i��Bbh�
S�K��%c>!|��qw��3��@�>`��6J���=�A��.
-����&��:EĀ>~��9��
-4E�v
ȉ�}�EF{���s�i.s}GeZ`n
-�Q���:��:x�]R��U]���
�Y���L;�
��4�%�=����C�"�������zh��@��z_
��A����H4�5{/��<
-
M$O�=Pw�x�
����l�eϊK=����>Tcp�Ȍr��b �F�0gDž��~ 1
��_z	~��
V���
�R���3��f�0�}=���B��r87ܽᨆ
	
(Xp8(�4�v�&I��C@� 6��!
�_)� y)�.>���7^~
LTY1�=��*ȱ�����5
Q'
-X~QZub��jp��(S|�\DkJ�*Td�Ġ�䆇��
���S�!�L�>
-�!^q��@h�M�Ϝ�f��W�OÊ	ѡ�y at J��4BT�D7�š�
#�@�j4�W��j�@����,鼣����r2ů�D�)�>vgM�~2�mܿ�4�X�|}�C��vy}����վ�ɞ~c�l?��0�J�w!�_6>k�$�ᢏJ�|�+5F>黡6����
�%
��ܱ��*��?������r)��q�S[?EI��w��9�a���>���rI�)��p;��/�����PwΡ�x�6�zx�3I�7B/@�HvS�>5&~`~��Ve�q�Pcl�[����0ɝ�����<U*�Dc
&�x�.So&�
����
u
-�gb!u
ͼ�:��7	�謪lP�G=J:H�
�M�z�~�46JcO���y+
;�$�b��6�Zy�|v�PFؽ��Ft*e��ʲ4i ����A��
P���L
��~�g�\G�"ZLK
NJ$�[Lr_δ7z��1�
[!	
���nA-����
�rY�<�,����d��p���5�퐁v�7y�3p���Y�bTTՕ+U+sؠ��a�6���h(���hd�F܄Տm��oW��Y�/V��z
�
�)=���
�%����v��t����~A�̪C܍t�0~.v�E�P ;{5��H�[�U�3m��ɝ"�w��H�V���1�hj@�1�<N�����f�OJ�h�����E��q�e����-)�2Lґ�eF����DN�cA�&}<K��!��Ht1�#���@F��:�t?7 ׸[��mP�AU�(\����!�Lq�	C1Ј��a�/z��,���(�'���8�wR�v�6qp8re��_��:�3��rv4
7a�������Ej���3aa����+��
�r|��#uZ���xA-�O�xH)�
¢
	\���
�r�/eFJ���7R��*ȆQ���WBDH����e��G��p�?���Ȯ�5v��kE�h}�@f8�=�[㊪� ��w`��0��p�|(
췚��~~�`W�9A[_Z�bkS��Tj�8�wÄ�A�t��֪�p=�T����
�.�a��M�	ɚ��k��&���QM۞H������#,*�ld 
.
�h�Ëo���/W,~RC���J�AT"���F=װ�1W�
�_�
�F�����V	��0�ۍ��{��z�8�7T�B�Ž5�b�������t
n%�x^
�	dx��t���G9�� �=��o
��{�>7��D�:+mDQml
�� w������%�}�ep4ml����O���sw۟UǕ1γ���m�<�R+�J���?Gw�%�y������M��0�z\��1(��
	��p�0�N�C����
z�M��šau�j�P\"׫N{����n�fL�*����1mx�/|��(.��x�C�[�������F����
�@9޿cj�ܪ,{܏�=��i��Lp�|k ���/|ndZ=!��>�m��#x
��q��Ƌ����M��	X


�ن!ΰaJ}���#)
ڮ2M�Gp�b>�QN���GC�b7$t�=��1~Xe�)66q8�y�=,v
-�t���m\ok��
��W
9\�~��_46�"��{K����z�����R�V�hx���xL��ժ�
A1��'—�K��,�A�c�T[ۯJ��
-h웘��g^n������T�� ��Q��vۦL`	�2A\��-�v	Y�
-������)�s#\5eBYx;��V�K�AjJ�P_�$
yC���OQ'��	���O�Xr�;
@�`rY0�ѐV'�O

�К؞���&�I�P�Ut�̱�i���ss׸
0��p��~'��T�t��CIJ�c���w���h���h0t�:����}
-c 7�^[�B�"<�
���Ͻ�?
-���;
o��i�k݌w�\���T(�͊��>bí�A��y6�t�Cp|�Y9��4�q�`��y�
țMq7
��A��j�y�-8�����b�"
zΚ�����-;(��LCSM���4s��8��ƀo,J�{%!
z�!}�~r���N���m&�&&vR{�Z�����!�o��EqX5̥��I(��̨
-61,�9�
cR]��.�e<��Q��o
-8�q�k��
I�R�sJ�{9�'t��
[�fV�4�
h�ԩ��Hz~��
�OX2�
H
؃m =(�Ɖ
�zk����W'M	+CW'/'���u��q8'o:bHFC`*P8Hj���5f:�΁���Z=�7p
�@
��?շ��� ������0=��@��D~��!��;�$X:����K�
n�w�W�n6�Ӵ΁��Ϣ��;�B��k�k���מ
-7'�
���
D41_��
��������>�zr
-Z��x�.��J��J0ij
)0����
-(Eԏ�p�r�G�ʫ����Xu<	$$�"� l7)ER5������N��l��I���*�
��r�{��o
 ���1-
���s/ �Қ
-@窦�Բ���M����W�����|�{�x\,I�N�����8>v^�4ĝ�Kk&6� �z�h�ǖ�(.|�+���~��>JN.��$A�����}s1ЍI}8��햫�f	I_�*�
"�b�c�$�#�^��䘼,��*S �Q"��#�5ΙJ�X(}��ep��"�����d�(Z
!ѷRl�#ʘ��[t:

�(�.��	����B�B��B���ƚ[M��9�8HMlN��j�'�ii}
S,��E�-��xk�'�Γ}���{_�ޚ�]����
��#&��:���
�����O�֌!~)��o����JHiO�@ �2���p� �7��
-(�EeM�%n�����-ԩICb����CR�
I���z넲l?��EE"��1b4ݫ��1���<3qµ
�u�`ޑ���z�܀�U0�굳2�]�z at U8N?ފd��f�f���[A�)}�)�<�
�BN�'(�
Gp��!U �P�ю;$oHJj���H;��:����t�)�\��~��'�o�l��$`/���U���`�!�����k
�cD�
-�_-%�i��@	�ʿ�7���>e��h���k�\b�z������}4��z}��C9�K/�
7
�lC��;�w4ĸ�����=^3B�
��qxb+�Gw�R�Y�#{���kq�����v���
-'�=��
8X+�G��b���B51�sd�9Fb��~����ݮIcŚ�X�=D��ȝ�\�`�83�=%G	�PG�"l1Õ
-$bd��
�=��ĉ ���`�)�C��hC
��#�Iz��	����Ǒҍ!���s/j�1J�E7�'2�׺jI�%	��\o�;����
��lpQhϑ:7�F_�
P���CY�b?N<#L
؇�!Y�H�t��
`�%��lk�̳G�9���X at M%b��e&o(�0�k���W)��o�:��h�!���G�s@; jg�~5��S�q��T^{p��x���I
�[�)Ý�7>�9�ǧ8�8�P]��~�&q���Dw��E���?Y6}(�E�)��y܆����-eq��5 �����7.��	�h;"B�"F>B�
-+�E�3~4T����|�d�	�	�KԊ��D�I�/>v�Kn���Ʃ��g�&Ǫ�v{�-�l���Q6k��8�^�c�|���h~h�b٠<���
��ܡ�7�b�W
��U��/z�[����F��+��m��_땰��#��:��
���֒7N���@�n��/z|^E"����
�J�X�qI=&Z[�
�-e��EX�ѐ:;Z�ek�-����\y?��
�phC�� P^�kg �UB����F�:���j�2�?�1P-P���@y�I�Z�(�ֱֽ�$���,�� ���̱���

-f�Ud��z9 ��7�a�
V*Ho�u��j�m�g����G��'���-�Z�t��{P���
-�|j���V�P�M&���C 5W�'��JFq����� �C�I�C�E!���cb�����.�A��;�!Cl��ϐCU�aI��U��7A�|���To����J�?�R�ȫV��$��%�����z�ȏ}{�O�.p�m�@�T6)
-�#7����8�L {�r��uk(ؕ�!X
��r`DS��@
-�U�3۰{��Ϙ�p���߯��d�
-�8�v����i��&���9�u~��>!e��}茤 -�E��@!q�Ι�����`*��۹�퀀yu�:4
oO��a�a����֎ p��hG*���-���<U'r����c����hw<�7J�Dh����}e)vm,r���P�U�.�׍ɡx�KZ۷ Q��K4�.S�-v�(VX��]�0{
�kh��%6
��n��(�td�����^$��:Q��
��i�с+��8�(��|s�����8{Hm�מq
��$�k��L�F�����J  w�y��h#���@;�^/�7x��c�V.�:{o����ؔ�G��
��V�
BM�=�b+\�} �
���l��ݥ�
�”�������z��r����Ù��E'�!o����VEh�ˠ
[ě���h��Z��è�]�.:ǂO��*Y��W���S�+
 ~�TӵD�v@�R��7S``y�Ai^�ac��Q[t
p�z�
�B7�0=���l�Lv�I�8'P������� ?�
/�a/	H�Д��Gy�Q���Ӎ
-`�a˚�����W�
3�2�.����#����N�
�W�E�2��B4��ܫc�
�B&� �hs���! ���v
ʂ��
-�=dpV�:<%��~{�WX��V�t#���GP�j@ͧ��B�A�e�"�<
�-��B�ArU��gbU�{�� ����jlP�֧1���i�vr�p�����l(��iGA0XJ����:;U���Ɂ=�@)b?G���VA��kB�X
u��Z�u���b�C!�T
F��T�߻���PD��}����G���swA�rwG���ܣ��
�$D`��]�b�
D�3c�ےEzS��k�'��
-� �[
��z'�ft��|Q9;,wK�k!�v~p�V(��	$Rtď�oJ�����'xQq�D*�))�p���'r��n�4'��W����L���zL( 8K���)�G�&8����}BH�����w���W����f���#�	y�N�IՐ���Y�q���-��������#4�gV�O,�Cg��=ˁ$��
��"�I830�'���W�
-���� GFT���Ӹ���꩝����DѼ��$����@�/k$�cQo�	�&CfQ��l}@�`�zxFr�F%��}�0A�EM8���|����2O�~
-��f`����d�^8��R0�@>P���r�j9�a�,t��@b.A&� D��
�+ioVû��
-����CRꧏ�A�:�F���p���]c���Ƴ��&���B�������X�
͈�����o8�A<5���ޒ*�DF�O�8�� 
Vm\���')�����ڌJS�]�P�,�e0DF#K*"����[��QaI�ؗu�]�z�|
������)
-P����F`�^
��L�b!�����0xKt`
-�V�wp���d�=cف�^��)E�U
&n�i$�CFeBg9��v����y����\�
���x1j2b�4V��x��� �]����L00�$'BO�5� ?�B�
2�{�:
-(�l�s�ow��
"����F5�9�ڶn>�)'���<�K<j i"�wr��0n{(H�R���J7�*G�7�Pr)i�0#��o
-9��;�A!<k�ԥD2��S5p{;pM��IA�
3�+B�
����*k�����c��3!>�
�P�}��@?���z�{
-db?�ا� ����Z&)��ߚ|�L>{�d�k�_CR̜�D>��
�Cu�Bz��lOߵz-+��;X�y˚2�@	��T�^(i
�dy
K�S�yvl�=��)pH�8��uKN��%�+
-p�EڑS��U<�v�O���<^�1�WP�_
-g�DY�4\;+�jTX�ye�;�
�R�C���dIJ��k�*^X&����*�!�s�Hd�e�a
�v"�=#�d�����T��Б=��`v��p��d� H�+�fs�A+�rb���I
--r�D])¨�K^f`A�d#�P��%
>�5�R�~�ʊ3j�|��`
!u�%
�
Q�z�佞j
�����8)�~���*n��Gb �%Q����
d�I�-���w ]&�e](�����&)�/��}��Y|b�U.���%�
���杕,y=!
l
��������ڲ-˫*���-��(r_�{U��"�ت
��ܧ������
�3��m
���T����z�[����ؗ�e-�W�~i=�WP}�m������`�d4��e�����z�x�u5�˭}H1a
a����k��c�jE��Y;��4���ID�~��D��>"!�2 z�����Bݟ��Ʃ	��=
�O�-��~��.�~�����o��ߤ����y+��u�2�R����~��ת��5�[
��0}�zb��TU
I*`�I��^hr�
�0�vI��W&��Wa���!vBb�H��zS
����ppu8�{�>͔+t
za���+=ˣ
ƃ�5�2�
�5���Ƞ(�;B
�� ���^%�-ŀ
�N4����̒i�
�p��E� �/곐�G�[�j%��)��N���eUS8�@��74\�_�cK�T��$�ᶥ
����$A�`Yn��1k=�C�N��V ȉ��nY~�,@LӘ�^�%�f"y�{?��pKZ�"�XM�
���3�ȲY���6c�;B�X��M��
h:B�Y�m�;K"SC�x�u�
�#~�
`~3s/��
�|�M� ��u8��B�V�D���#�:�|�2�[
�
1G��m
��
'�פ叢*G����V��k?�">
-m���L�,�̈Z�Ѯ@,�
V��8F)��$��p�%�
��}�I�t����>��h�k1�/9}�=䉒�'7���S
-��w{BT�p�Pvڥ]�c�x�W�!Ѷ���~
m�
X�  h�$P��hIc]y*�����w�
-f��������8/�󕻽o%D����\�n�a�
��YvE�5��:e39��
.}�9��ef&W�t�����
R{L�&XQ�DgU��XL����g��_�\`Np
-�����K�["?�r��DSqS��o�^
���u�
-���8i�)FH��ʹ%�-r"�a��32���@�.�CH��k���]�!��/
q�ҬQ�Hx[1��,��
(X5�]�{�b��JE����� ڟ��>��9�a�Kx�\!�d��{q���p"���==�5��]���>#?0z��!.6�F��*J��>)�^]X a&��-�	a���M�`�Z3E�����:�{g,��b�P�*
h�uC�q��N¹��hJ�.���H���
�f���pJJ�#���AFla`g9a
N�)��!�T1Ɏ�4~�޾>GI,�:eOu��g��iU�mK�:43��\�e4�o.u�졅,I���$v�q�KS�����9�#���
(��C�����
-�t�!h�h��52;`7��!�%�T���X�Vxn�,�zz��cX�ڱ��Ҏs&�mlJ
$u�94�m&ݤƕh'��-��,�i�iQf�-]��[��|
�O��^�C�Z=<F7�6y���Ot=E�
{)�)c��B�:�\�a�J��
��z �-�GW0��D,g�$�L�y,l���	�P'�����C$�
�O%���8�S����`$BM�%T���$��`�<3����p{b7��~�j�pJ7^���������;ܦ��jl$�7��&��/:7�8T�`t�2S��F ��;a��0DY'�C�۔/�P��t4��
��-��F�/X�b�#7�
b����x}�~��XԉQDH+s���ɋ�T�N�B�i8�G�Ú>j98fȊYG����)��+2׍�&Τ�5	'~��BZu�g?V=
���羈�^/�7�
-G���ق@�1�;
yp�Є�ÉW��D%@��
-6q��SD��2��W~


	�T���JI�\Q��
'T �D�H-c� �}��dCW^) ����6�E�V�HFNT�m�Jd=|
-	�0�Z5�P�
-���=�W7qؽf�4С��"&ޙHH�l���
= ��u��p�;�]d��E��N�6�[� ��5/*Q�������̭yi�2��V��P�ޏ�@�edB +ř,u�8
��n���h�i�KI�Rh'" �y�|=p*
- ?�K1
-%U8�
>�Ml�M����;2��]��4�i2��Ɉt�8�
�
$��#X��o)^���,����k�E� )̿f$vzN�D�T���G�ԓ�ץ!��I�'����5�$BFF-	
-�ku�MH���L�Q
����ѣ� �yRP��A��y��N�Ȟ�Y��όß���v1�K�0l"�ZA�C�
hxO�I4N�7����&���p��je
71I�x|9����ٳy��$���{�1
�n��.#���!�#��tD���5�}� ������2�Uޖ�Č�a�>.
��^�� IFf3�͑2��ˊB�!uꑓN0�b~d�l���p�iz����
2�n
%ꑲ �Nѧ}�|Ѣ8v��ɦ���
u��p�)=7��W�i�����7\
-#*���s�e�F
�F��!=��Ժ.%���=�E�$w��nz9ۥf"�>�$S:�3�#z8���
Յ
�j�3洪�yOx@���z`�;6u��}�p,�,������~D��
-��8	'd]Uة�Br��1�����U!x��� V�
ǭ�}�(̃DbU
:稹�~֚ ��PY�@G@�n�"�܃��>�4v>��4|Ϟ��Y&'��3#�a)�E���2Ҩ5x�5V�&�c� �,�

t\EN�S?Җ���M�n����a�ɑ�W���X�EDЂ�B���_�
����
�`Jr� �pq#����;0�ڰ���n���ݖ�I��~p�[�3q��x�:V��	g
ʴ�[�57�����ju-�;��J`\z��P�&�ꁥ���RD'aa�x�^��!�T<F;
�
��Jv��;��n9���ba:�I,���E(g�Uz	��g�!"�r��
o��#C>�V5d�X����p!E��ds�|1���I��u&�T�$����\�����2t�r��-��O�P{���_�M
�:�@\A��]��Ҧz����R&��=v�Ò:ͨ��e>B��
�J�W:d� ��n�M���?�
i
-u/�X�*{:۲kV��c
i��=��e]�?#"�Ѓɡ{u`as�g��٘�k�*L��s[�~o�7L ���~��9�j{AA�R���k\��H���l�5���EN�6)D�=`ҡ��>]�8P�������n�H1�Z�1��rN'��'�����w'�
�{�q��QE#�� ���\�a��@�����KԠlh�4_� 9Q�&�0`��+$��Bh�U�>��>��:���EL��6�K������W�z4׵9&w
6	ӣ�/��5�J��{�b����-ޡ�J��
�<B�"�(�,u�Bqb
S(��ւ	𧹴��Q�IzH�򵞃Q�z��dF���o?�\
	��T�E����R���q`u
-)oG}1�ֻ��	2��י��P֍vC�~F]�v�
-f�� *T�	�в�2f�,[������p-A[P�o���oi!"�
�_�j�x�K;��а��g}=f�)̚�k7�=�`
��
g�Ħ3��Ob���$�Y"/EQ}(lgfL���զ�!X)����;�|�W:��#?dT�+����c5�(�:N���?[?�裪vBV<p}d�F.f
)������@)��+�R(w���
�<�g ��~�J��,ɻ�
�k�>�K9��-�rͬQ|�+J�� 
��U��,n+����Qz�ܢ����[���_5��W
�W�\�_����F|du5 /A�3�CwY�k�{-3��{	�B��ߝL�
�Z���aDf!|2n�y��p���gD�Ӎ�BQ��)�8-0Ʉ1CG��X���=0fHKŭ�7a�Z��Ь���z��&T���ӭmy*�oTw���DŽ'eS�c/�!:�f�Í�?�����M��?��C��e�X��]�dv�c�W'ژoKlQ�er�5Ef�+��3PI=���$Q��
���p��hE�2@~��-Q�
i�q�����l�a���ꄿ�$#�C�^�(,�@6K�}NIC�<i��	#m�� �A��(������h�p`��U%�41GcJ����-�hS�i��R���Щ��̽`�Qd=

Eq\jJ�Gc1AS�a��D~k�
r�N�s,B3>�T)DR�)j����@
:��<.���Ӊo����䠗�I� �a�
|a
�VT��
/m0�vyi����@TI�
� ��i0D�
��S�����n|J�J��[���֔��ܴb��\ݤ�[�0�z�5F<]�q�B�η�z�{� ����l<ZT
-�
X��+�
t�y}T���Z�zȔ�)���_<�ύ
D
�)`v
-N{!F�rզ�v
-��׀�i�z��$��:�j�o? 
( �7�N�������A���
-�
<�[0���K�pG�s}�*$�
9�; ���
�Y
`�<���q��Jx�{��h���&GՊ>P+)�/
�!q��͢-�}��
�#��m�WCl�S��f�ݷR:�u$-��瓔���� ���H��T�W�œ���� �����$e8P�T��Y"�P�S
W�q9M����/�JS�Cq����)��<0VP.�$h�߱%�u�;�,�[EF�<�v:&�u4=">b9�v at U�����1�h�[�;q�l
N!4�
��)yy5y
���>��G���[���
A�������łf
�{X�mo�A�~T��U�UT*%�=��!&�����|^d���
�����D�:�Y�Xy�(� ~�uUW����F9�݌p$������l
-�
П�f���Xј�R��a�R#my��Z����j�Kt&
����%���Pp���ٜ�*p�ed��[b��]��ޭ�	R%��O>�0Y�R�{h���w4s���kD��!-@�� %�G�>@Ԛ�G5
>-��V�@V 
��mM����9K�25QjzF�:�H
-�G��[�i�ZG�l�F>go^!:h��C�I
�2B�
@ �Qd&���#��~*��-~|�%�Y*�Z`A�@ݐ�8��<u{�%n8��@K��W;�L͝�Uh��/i�*|�RHs�

�(=�_��ȬA�T���J��d �E:J��|If� �F�W� 8 PS��ї��͔8W�]��9_��+&	�NS �!����f_*/�D��yQ2;$��a�G�z�
�ӭP
��UF�X����4yG��AS~GG��V%g���[��ih��|O4W����O!{O���UI^���Pf�
-;�V�A>�h��i��S�ߟĩ,J�ʕz��K:b
-;Y�
���̜��ݥ��F����$ly��15VQ�2�� 
-�����Sbv�g
� ���
�Y%= �C*E>�&��#�R5�24m0�J��O����R܋
+�׉P���G�G/Ȗ
G�ʒ~�1��/�ІŸ,ę�	��鷝q���/Z��B�
�
�� ����-W�o��6��z�py��ԟ�^�қ=�i�{u�{V�Q	
Q	}���"�=���S��A�[���a�k���l�����@�5
-�t��[/�H���;���%
0���
�)�A�Kf������@��*�[�E�4+���>~D�FJ3��Vt"�I��t��h����
�gb31Û-Կл�	r����&
A/�
-�2��j�8Xl&L$�U�Hd
�
-�������.p&��|��p�' v�ީY?ϑ{4+I�k�F��,�=r���Ȁx\�
7l{�L�ݒ��D=
e�zH�
l���8QV�n|ԟA)P+ �����p<�]

I���Q�UYv�{(j�>�ۑq�yQ�Q��B�Z�����
v�������.��F�
{��~=F�-��rv?�s�P"O�\���W�FK�Ԭ�	3�Z���3뇰ّ���d>���FAܓ�H	*���
��֝!kP��b tm)q{��9�%��r
-��]�wE"���n��fy���4t#\�/H�p3�
Π>�˦
��ޯ�Y�C��%`�{�ƺ�R�*g	O�������W�̪��!����7�� iz��p�b�Ӱ��g��H��A�Fm���ӃU^��<�����@��
a�r
n@\�M'Ka:0Tk-ȯL�DL��1E�裡���[g�h>v�%
>�8
l���M-r��e� ���2= �C4�+��
f�u��֝��o��.��JBf��-�)vI9���Ҝ����
ӂ��eATh
-و�qd���|�
��YA_�o����&��c��Z�u
���p���-ԋqn����z���L$;vL���G#���Y�a�����U�(�S(mx�L�}B�晄�������<��/�2�Qѯ��Q�1u%s1]?���Y!��%9������ĥ�h�O�_���dM#z�N�
yR�Z�}vZ�=��p}ݱFQ��1��„u_�	oU�x%2�
0+���6D��Pw����&7~��qx�k�ܕ
�R��w
�����/��4Rw�8�f@7b>��sJ�D�����V�~�-�@�.`�
-������`�/�P΃��m&��A��D�v�
y��^�sMr���ppA���޶�{�BR=Rf� �S�X�h'V� ������O
�Vy�@�븅6�@�-C��f����w
A���'��_5���s͖b�
�~��U���᪡c';{�J��``PL�v�cשJ�%� Q�3��B�
� ������5��5_�d;�pdoG�zY�`�GX����uX�r��
AEF&%6Ԉ�:�l(��l���}yk���Cǂ+����Fᣡh/<���ƜF��j5�~w׽���v!"	��}cW�.�5��\D�z�HY��[��U�G��zx�
���n�1�y�uj�SZ���q8
vܡ��0oX�qw���oU������G0�J�k3,USk��m���y�B���n��(=$Q�2�X�'}V���NL�Wb������(� �w�\���<�"fD{�HU�ئ�<���ߨ��<�Ÿt�B����@o,.�S��o6
L>���?��Pt\>e9�H|����
_M�� uB�ܓdя�
��ݫ�z����Ě��9���+�CO�1
T��
��qxz�أJG�[ ��WēNv8{Qmf�+�H��DF9D�����.���Hq4�!�g Ջ�ʁl~k������ګv~���P̈́����Sb���!���IF�B^��$���'_�:vʷO:�y#B��yz��ˆ=��a|�=�=ӱ�۽Ԕ�3��LQ^1o`�d�#�]��
_��NKC�

-Q{h^?> ���>B_Ɂ��6�w�R�#��;�Х��%܅TRAr�\ի���~_S�}x]�J���H��݈�B�:����
K�~�cJנE��i"i�
- Uy.��=tM��N�
�
�������
-
i9��Y'X�`�g�K&��?r���^7��VcF�N�\q^'��Λ��pL�RF໥�!��X~�2����=�Dw���z7�/J���k���۲j$Ep�z+���8�o=����b:z���QH�vi�͂X(�Ni@)����
�y��-�u��O�*X�$2�;��Ђ��I ��t���v�Q�~��Ѣ*��&w_�:�u�Q]i�+� ;	
:^�v>�����#�b�
��
_p�p���7��C���p|�;X�c �*�A��p�]�z�EO��Է��H/�u����_1��>A{�@|��Ƿ�
��ݰ>����݈��8�e���5-��L8���}�

�,�=��&8�fD,�[6�{����<�f�
�2f��]� nC���&��K)��[�S`
N�z��
$àj>'���tg���� 
�C�;�`s�w`�pe�4*�/�����j�����������e$̓D�%���C��=�GH��K
�d�^)����f>�+e�b��ϯ��~�6C�!�8.��3-բ�ع�
�p}t����A$ܻT�G5�l��B��2�V�f� '\��,���GF�8� �����o�U��'\q�W�
9*b�\�4�%��{��S��Q�u���;һ���#nۉ,޾�0)�:�x��z�ł�(y�{�8�q?7�L�\V��!ʢY���+/�m�e�'�ƫ1 ��MFR��-���C%L�x$?��#�7 ѓ##��*��+�@?'l��3?���z\��
Q��t�q�&Cf�
�}�$��MS�S�s�{�y���֏� �$�<��#��$�i؋��;}E�PP��\���{0'�!�
�ܰ��B"x��� �2�� ��P�q��ӯ.
�s��
-5�-�0�%,.���]�~&1��G�����O�\kH:����������h�Q�
A`ĵ�ݞo��&�c*
�du��?b����_4^�.jPI��
�sBzw�8G�q���7K����}|	��J�ޔ$6O�JX�r�͹�j�Τ)Sv�Q��
��0%���(.}{>'�
-�z]�Bٰ�s���u
p�ɧ��BT!\>�/"��[q�2�=\9����U���{��hq��M�H���?!�Ҋ ��=��\��ի�kvт�ʺ�*Ȁ݆x�G��v^-'g���Y�sX�����(q��P	z��Z�i;��A�"w�뺋��w���
V�Ѷ$0�!
$��q��4�%�qD�5��{3
��|�z�:�}�)���|���x
�Z���
�C 	?7�P̒�"�}�R}������
-So
-�]���զr��5
	�"`b6LY\�m7�ܚF+�
O��B��yj��
0۟yo��S��LvD�T�)dj�0���oA����/m�ύ+���E����N��5�b ����_
��Y�|CtC�68	�.����`��)�0����=��c��
b#��w�����$N��P"�ģe�
t����|
)�g:��ݗ���~���r��� ��^!#8���N2��]׏ �G�
�����?7�w.�Y���d��_� <_62�	�g��
�%�����TaR줸����Q��N�	�7yϧF��!�7���tV� ���
P�%m
�z���]�{LJ���S(u3r>"c��.�~^+���
}r9w��Ȥ�5�4�L�Hf�E|C��K�1Ph����YpC}���Z9.t��HAh$�-����B�u}��,�K"��D���~H�{����������~���㯟,������������~��������??�����?�����?���~�O���������9N��7���������i������W�N���������Q_���(�8"����W�
|��@2$�.�&�����=H�h�Hƪ���� �
]�_̅�[Q�B��N��{�A at Y��d�Vvn;����

-yG�
֬��z�C�&Mk�̅�Q,_{��!$��`ư47�IJB9�	��fL)�PF� � %�Q�sx���Q��]�d�,����8(=���
�5Mg�)f��+z�?��:�y+A��[����
'ۏ[`ֽ����
��F"�Z��Nu
������Z�T֩��7����
��u`>s-i+���
��u���<���;_y��"
�H*y�
�|X��Dց�W��8`�P��qR��f(t1�B�&y~[x��e�݁��$�k��G�:��'
�����Ћ�0z��î��Ӱ�c��E� ^7
 
�
�#���zO ��^���K�[Jv����0��� ����W me��9b���QΎ.�f�t�qtED�H�����  !h�Ǯv��Q@���U+��������^cZ}�
'��������vT�e�{����J�E��W
S� P5`5�_F�$��^�Q���}.��P�+_|

F�~����.S�%,
-l(� j'4�ٝ!CB��S�w�^�f0z���K�B��U�8 
������� (/�%E
>��G(E�Nv��
-�^2�H(�����EQ3.�Q>��,G;�j����>���M�Jv�i�h�}��P'g^Q�'_�
lH5L�	k�U�s$�Y��_~ѣ�m�
��J���B
�Z��dxxb����|���@��Aެ*r�>�
b�|�c����~����Q
wYO���1z��j�j����g���� t�| ��a
����_H�>QyEJ z��☢VJ�-�
�,�A#
�)�L�ʾc���Z���@�H=1;VB=�N~-3�Z���R�x0�MϴE*���N�
���ݜ��ٽ24%���Z�y
�c̢%v�*��f���=0��޾ŵ�}��Y;�BғH��S�UL[Ԣ@�p|P(���O��
�1L�q��(,�ҬU���=<��Ȏ����i�����N�ut/f)���t4JIF:�
��j�2����G��J:=��B[ �11e1���׍���֨��^�k�
��߯�~�I
-���PR"�����95��
-�(A7�

¹WD#y{���K'{s���v#���h�
V�����wb���=c�V�Ї
�=�3�Q!H�c�܇��:����Ñ^���d���ؽuΔQ=�
T��_.{�wq,�5��u���k����uxk���
-����2�c����$�o��A#5�'�%���V��{�
Hxӽ
l����h���i�!݃-�l�Ǹ*k�[�p��C%�V6���n
�y?��{�^���(`�=
h�%3�&
���,"�'�@�0`�\z
^-�I<ʕ�\ŴV1|^bd75 pكG�
�؃���Q��<��
-y�tO�ĸ�[�#��lqET��ņ��|I���ϑ|����x^�������h�CS ٚ?�^-QBQ�׉�D��]2�at��D�
u�S$_�����+A���3�
���7�b��n�5%��%cb���zH�7d��ac��߼2J{����=p4[`S3�W�ـ���
-�B
Y
-rȁ��b;�ŽI�O=<A����(�Ǒ�Sۉ
ZY(
��-<!2��M�ϒ�3����Q�`�Q
=�k
�9���>A_���Ww1%RB`�F?(p�Ǹ��Cd�����!���|b���ٶ�
�!;�~
q z�t��\�i�9<�,ӑ9�;_<{]�V��4�A��щ0��.�AYh�uv��_��P�-!�q�
?�<�PP�!�6�����D�^��
-�E�y�~4���{��;Ql8p���^�M�8��\�hy4��í	-��2
��-��R]
��	{��NҤ�8�f��藽�/
�A+�u�H
ݔ�綮`���	�:�<aD�l$������I����
��i�>*�{�#�⾔q
u����r�
v2��t^j��$��ط���{�)
JE�RE�}!��D��5%n�M���� ����m
��q�@����*�l	o
�ۇ��ł|A����֣�r���Z����Jb�i�y ��pkdO�KY�st�̂�
�_D��{�ȦP1Rd��p��8`�L�&�
�J��
2]�
t�B^��){~�
�oH�pBL�+�JH�~��V"��,CNѐjm�Yѥo�m�dk�[�t��)��8؃������^4:
)���P5Һ��>��z,�
���+���^�������=90d�] ����D�	�D�"G��}(H��7vO2G��^$/v/dGB ͕���E&�8y/kY�,']
-�.jJ��LI%]w��7���ǖ���+������oo鱣����/G�8S]YZ��C�p�s6�4�F$��z�C�����#J6��.����#�j���z

#9����'C8��)��(B�=
wg�Cczʻή��x��(a�#ʧ�үDw7ҵX�k�� �p��r���	�:U
~���#��d`�ϸ�4 at _}|"A'�Z�X��J��ir��z8�C"��qmG�ٕ�NK$��+�}H�{�t������}�D��&i��cĶDe�<���%�Ιƍ��c�C����
�f���
�)��\a�i���D���
-ƕW��+�������O�d��J��
b"|������,�-�b�H�����m2�.��J��_�|��Q>��9Ay���2�����	�ڱ��X!��.#�j�I���\V�C�WJ�
�pzXK��+-S�
؃�a�#A������q����y
��9����m���X=. ���w�_�9��A�kHY�@:�B��}����a1q?�ʻ͸D�{�/z(�8_O◍P/&�gD�Mf�0�By�J(GpI�:Fe�;���qw��ؾj�U��I�=b
;��&<TȽ5EL�e�<c�k]����x����
����
YK�lH����q����lp��f?��+�$s���'aO�
0W�vPw�엎T'5ֶJ���/z�5ZT�����cp���?����GW�W� �\`�Qŧ��3x
 ic�u\�e?�{4�B�{�1
�� @���*
-l���.��x뀆�@����z�E�a�6��
-S
ڟC��~ڤ�#�Cl�
䗮�
w�
6_��οS�
<���v��-��ZJq�h� c��M���	k*�źt��LA
L^�Wc���]��/7	����U3�%���J�e�s�@#=0.y�ɒ'պ����`�au�xC�
ה��`
7��C�pz�"�R�o���:��MXt1�� ������O�|tj1Po��LCr�=�`۷��$���a�R��2q[}�B-�s6�*(.}��
-���RS�;�L�3���
-�])��Mbb� d�w�_�w�"��t��ݓ�}�:	���
��+$J�eą6W�#��E��C0@�>��^�@��/%qH\�#Y�1i������
-���4s�~��Zپ~�q_��
֡
��N�k��I�&􏹔�����{㞪՛���
=y_�	�{8�8�vLE�U�Z0�Z���ldג�o��S��c]
-70�C��q*ɴ��'‰���ĸc��=+��B�&
�AW�|�I㈙�f��Z�:�I�"��t|f�kf;�5���5z�i
-��G��0WqR����GAU�v|�~K�����=`5�㚙v�(�%u|;R�<$q���
u��K.�%e%�	��JQ0-�`��=b[��d�[��q��6ef�.�K����{���T����^?�jG��6}����.���OHo3����'텕��>���Aiz|�s��r�����K��}9`_ =v������-��	�����븱$vL]^Qd��$�������[3�C��pw�6oB�!X���q %H7%0��
�������Y[8vN)2��2/%���|���j6��g�������؁Q" 
—�C�DX�O�,�^x�h
����[U9
-���`.�
5�$��p��T�L�D=\���^�"0��{:��<�me]M��9�@���>�J��ڌ���W�x���[R��9!����u��{��ח��u/���z���bm|�܎��{�$�������
�
R
��e�A�Ƣ|�KA���(9�=�4 a���#���Z��.�2��fq��<��˷�,+y�Ů�Y�˾Vp# �w�U�OPI���S�V��F糽��$R�9�EqPԾ��)	�}g�{�dO��<�X�Uؚe�`�nΈF1�\�Q���
$������I
@z�=Z�0�j�����{&������q	'��*��qj�'z�v���ߵ��6�sݔ�
��
�4L�M��y�7�Fp�ڍ�A5
�1LvB��n��_
W[
1<&Ψ;����j�
�����
��J��S��1�X��ko7�y�Se#�;�@�2�����/�4V��U��s""������j�)��Y���	ɊI�
:
��{|�
��a�K/%�`�F��	[�1�]N����d�y�T�s]����<PU��RnI��g��"ϓ��`�khgN_]�iS=��&[����N��7*��|
LRa��4�N��jV����lmL
V%=2b ���;�0� PpYBo��#m�FO 9�_�@#F�9
-J�
��"f݇�M��5TjG���{j;�?��V�F<ю�
�����G�'!2Ί��Q��)V(�� �q��$PΦ�^�w�Fv�^�`&Qɠ�qzdV{:�+�4
N-�y��
��$ ��o�י��XE8�����`TB|�o�n�~�a���!�{�^~�;O�>l���HS/W�
ޠLJ�L���/Y��+
��!��=v%i�GM�N��^�J���6�gO�D�yc\P��7�
l+����{d��^�B��tځ��
-t�уXD~�D��r"P�� �ᥑ��
��"
Y+��z=�����Kt&�w�
-�ڱX�^M���1�'׽�͋������v����C�C�P��CC�x�&
-
9*3�"%��0�k<�!7¦_|i����
���ܶ9#;T\H�d2-r
��z���������gFe�?���F~u�H���g��q��
�z�s�U���ؠ��H����^c��N��3"�_C �������M
y�1�fr����A/�H:Y�A2a
:�
2R�t ��i���Ёj���"����D���yjo�G�:=�N/]��=04�j�%z���=X�wj���Z_g2qĤ��'= e�.5�#DSFqˏ�hbd3L�
�޹�w�i�s��v� K@� ��R(�<���x���!�b�����Z�����\�<׻�|�����)P��#�3�{�� �e�	��:��q�E�p��!��!5��qdId�D�� `�<�� <.u�)F@�4�C�p�|xo�o_��4{P$����ދ
-��A�7S@����MQ�u;�O��
-A@���vghY��B�y�B�@0#��*�Z��u*z����j��<Se��=��g��q��
B�R�
-�
̰

@�xf��{�L쪹�h�X���K����X5�Q*҅�9vt����H�/�*K�]��mU�s�"q��
-�Oz��r�RE`��q)��}�;o*�;����
�?Q~�����q��$�?��*+
����_�����l~і����-�� �>91ˈ�?Xo��o+�z�2���:�&+
B
��G�:�sIe�q�$��LˆT
Z���SR�����*;����ic�L']��ucG2�t����p����H%�� t����{���O�
����
H&��\C��������Ϥ�d>���4Q�����[�K�2˻S
-�P!UD��#*��=��	�z[׽��/z �]!�{��{ep
!�\DI�{h��8������U�(zD4 �[�s�u�)f����/�s�*�
S�Ԋ§�߲Xdh�]d��xsə��2u �y{�Bt�JP�
��I��}3� �Oɢn��_AQz ��ON�o��3�B0���+8"S��nL������7y�=�1o{�Ч��*��N���T�#6��
�@�J� l�Ǽw�.;���'j��"E��P)���V��[�����B���J?h?��_�:r_p�0�4ʝ��X�~�H@��p���
�;�!���
� w�gZ�MG�w��M
lF^������
�(��ы��b�X�ۃTE�!����Y��)%M�x�Ȁ44~�4wyW���5ж�����ž��1��E�
a�I=�ie����)��c����#�U(3B2ګɗ���7�2�\�����x�<x�]l6PL����/w���2f���ߝˁ��{�C�;��<�k�Ȋ�{q^f|F�����"!�E���dB7�HA����Jj��, 
��Qk��wL+�2��wDû#h1Q����ݟA�#eJ�����
�sT�.B���J���9��Ͻ�+�ٰ�!8l��)r8e5�2	���
Þp�G�QIJ5�%��E�ζ"҈�H��Y�hN@�H�IU��
�Λ�<MA�p�^၎
~
-I@#����>;�EHE�=�H@���G��u(l!��3�ߟ�6Z�
�N>�z�G��`V:d/�z �P��	h�
}]��?
e�	
}��}���O��k�8&_y��ʫ��>�aÿw�I`_�����>�.0

.
(��JA�@���zJ]T��:%� :/)�`@��;u-��
iEa� ������@���|�
���say��32%Y�������e:� 
-����A$��Hq
2��D���C�
-��Nj'E�b�p{��=��><�\�� r
$���2PN~�E8X7�l7
�}-�a��U�XE]Y�W,5�Ez�2/�U�g�rb�{ǽ�w#4������V�Q�t���s&44c_�>�Tk:�:�^�-������
�Q�����S6�A��ӂӴ
-)�st�T�ۡ)���b:dĉ
;P��?Ƞt��;xL�E����L�c�(f��+��O����e<@��
�AD�
��=��@:JP�
�H#�mM"�
-
���<�F�*X%b#,��kS�^j�?�OE��KD��Bn��V��@ޘ��|�}��
c�
�Nn-��a�NV��{�H}�b�*�M*��aiؿ��F:���,�F
-
Y S\��' ��	уյhvb�zĺ��
@�9�
�����l�����e at I�.�r O3�A�N��)����g
;���_�y���a�R.�{͌} ��R�,c���w�Ď<�,` !�(�)�;�j���%��䀜.	�
-�b^�o���++�4��,g
ٲ��a�� 
�R:�d޸��C�B[3]~fa�GA�>�4���G�����',b�&ٚTl�Z�.l����$C���m*F$��@
����@yw�¢��$d�|+N���š�J��K]��+��۳��5N�f�
R3UϚ��,�� |�C��GКd$�׉
G`�Vٹ/1�'Mc�"�8"�!Y s�_����j/O��a?y���
-����m��m�v�Z��~�r��D�Ȳ�s�H��
��x�^�t
 >V񻫑pU�g_kZ��N�0S�g�+�YU=���Hz&
gb����"���Vax����p���>�N�'��
���qPk��Z8C0��y��<q��A������T���{��3�pL�|O}y���
&�9�8 ƴ�
7��yNd��q��e��^2�U 
v"�N'R
Nߏp0���W�
��gtx
C�P��Sw�~�a	�
�u.m����8�:_�
�:
-I�D��[O
7#���
�0�'$�߰�J�t�"���5�
	��'G��%'"��[̈��*W:.}{�� fjO�'��CƢS�f���h#�nb���I����Y
-6�� 	3�u������>��b�>��*1�/��X�[�9z���o��
�� �f�
n���uX'�`0�aQ!b_��?�#�T	]�t����	����3�%
-��>J4� C��x�L!
��xu6<ݣq
-�ρ�@��iό�����)V��x���S�l�#�s� G�_�!O�I1�3���Sӹ�݁�3�-��I������	�'13�*gNᾎUG�.	~�T��1�[�B:�tK��B�B�5G0-����{jɁ$�e���DA!�{ީY�mG)�H�E'�_~�s�/����G��ң85�,�T�4��;C��y�k�8��v�b⩅�/a�Y� {wh�y=>�U����
�85-Qdž˴�ޖ���帯�
S�蝏�u�e�4�R���Ǐ��+If
-�
�)L�ݙ?,����(���"�O��
 �������&�
g ��q 
�
h���=�)�L�T'�]��sRJ�+��T|�EZ"�
��H	d#� PQ��ׂ��:n`L��h�L��~�R$-G���R3ڛ K 1X�c��PS`H�  (K�:_�@�j�0�&$�0Gz"�l�t[b�%4".�<���"�M�@���u/�W��]'�
� P�����W�8���x�
�#T�D�{��CcDz���C�x�io��Eځ^l?
ƭǙ�u?&hr��
9�
�ӶE��	�W��Y'–{
"�qpj	�G+$���l�<uM�z�� �FOTⴖ �,f3��՜ ��謤qp|��&x�Va�
4�1�a���C�!�x�I)6� -A���&`�����"R׫"��r�(�TE�٤O��l���
>�{�}?�9A��Q ��s��\�v6i!$��P@�NC|y�%J��c��Ch+�PLH���w�d
�{R���D�?���v��
��D
�=GU��Ϟ_L���[�y��8��]�A��

��I���� %f0!Z8ck̼����=̓��� <//.��e%8w
u1��TQ�a�0���N���E�M��dQ��	���Um���/��T���%!
E�i(�����@E���䪓�9gRm�t�
��
�x�Q����QP\c�*
h��+�
�h��m�Ы�~�[*N�CL���^�G����k�0����W�$��eNQӈ
,�dG�;EH�"I�w�bv�" �͋(Wi*���<ꏄ�֜N�g�@ �Y��ߣ��3#~�?u�
m +�
ZQ�9�}`�Z�k	��
�s(R�7R��Â"�|tNe-{
�ܕ�KLJj&i������BJ	����
����e�H�-%�(1ز�
���
��h�� z���:G�s
�
f[f��sP�3:��2i2w�e�|��A`
��oU4 at -F?s�@Ǖ
,�q\����w*�\�z�G#��
���$�w
m��*�.�������D�L�����<�BcG,FP8�u�Z�C/� T���j�3�����ه����
%���n�1����^Z���iX`!�D��'`�G �sW˲!9/�59�⩕=���	�� LR���|D�+ ��ݯ����L��`$Ƶ�*�+N!���T��1�㥐DKgV��,���W�k���71 �Ł)����i�>�W6� 0��壚N��A6�n��^2/C�U�d�� �+�C

�9�gh�+D����e [...]
-�!��B�C�)�
��l0����I,����ѣ��yM�"K
�x��u��#�4kz��J��L]�
!�T�&�
��v���e��z�%�
Al����ƅ���~-XB�$:�y�?0�(i*!R�BL�"�i��x�~�/����g
�: �TZȠ��~24�	����^�h�P	#X>��y#4�m���v����0O�=�H�����Lp	(��%�|�GdV��� �
-'
Bo=���캢S:f-f����*U=�@_�^!�G9�\Q�[�<`�1: נ��
-�zɁ�$aV��|�A=��p#@��%�by�ǾH���1��4�9��KOtBr�y�y�1Ϋd�}w�3�` T����m�{$k!?|�$
��;
e����4�u0��[��A�4j��k��"�#�U))
\M!�P������E�2y0{�beu��2���$� �yj����c����xi��(�
���N܍��Kob]��?r�o7�{d�:��0�Z垈�$uR����X�{rR��j�0A&�*4��1����
�׸�=j�L<=�S���u{��
��
R���R�K�h%Jd��8ё���_}$�
-�8�)
� ��ȱT �`;��g:����dY,xA�xG��v�+��Y���\�,��-L�ďާr at u��M�q™�8
����4���
��i
!P }:�����ze���V�Dq?�Ee'&�}˦AT�Q�kp��
�=v�RK��z� ���z�>�Na@�Pq��|aو2PtP��M������q���'��
��xdSݟ�Ţ�
����s���(��=G�J�uܗhI7��
n�����4�{T(K�6���3`�U��6۰��<�X�Cf��A
-��P���M����2��@��]�U���:w�g,
HɵҶ�
9	����v�!5��Hz}zz��E�k���=B�b�D����%�	��#�3V���)P8tx���C)4<�S�b��JjʼnR\�{w��E�3(�tІ!;�/!�
J138��[U1/f}��1YnI�����
=GH���9��ʅ������ܛZR��'ڍ�
rp	�[
-%<�(��$(GTY)�
|)��W�KG�
-�C	��L�#�(�aaR�
���T�K`q�q����]�"sB���4�f���-z �ȄB(rY �%k7�I������O�ґ�|�H�t6ӣB.��!cK
-�|�':�&TF{{�fҊ�����<�/ �ӑ��%���Y��ґX�!�pwd�A�A1��H�D�
UJ��=�	�ېW7w���ڙ)r�0��Ĭ
��SAFT]z�bKx�2�(+?�݄�0�~�X�����Wn�&�yל|�����[\��O8�;`�lP�hpXP[GT�u�X�BD�u��C�
'S�F���(V�M
� ]0F+�{>��B-��v��BQ38Ͱ����
`�
��2��g݈TY6��3�<��d��9K������
N�D� PD)ˁG��֗��@o���o
�M���X>��f��9F�f����w�"���!93\�1�pM��I�g�����>' �A|M�����N-8a��ܣm�� GG�>	@)=�_�����蜌)K��!�R�C#D��\����?��OX�V���4����
��+��m�
gD8�����ڻ�ڲd�yO�w8MY
:##"#�i
C 
��jB�X� ������G�}j�E
�*� �
+sμD��Q��	+�k�&�^���Lڸ#�|E�m�
��
(]�JF��.E9��'�ʗeG�:m{�dK8 b�w#�
�ur
���'5U�W�D�6%g�E8�9�i�:�P4M�}�q"Qc#��C����P�
���|��0���ۘr[Ԅh�oD��ݝ ���k$i at T��+� ��#�����%p;$�蘸��k�G�.6}y^�
�bU�7H\V@
(�4�dO2��<�N���WUl�y���>���
-M�M�P����>!�T۷�8(���a�-a��L���i��i�>��q�[t+��7_��ei �g�@h�Ԋr�j�e-8 �w�ؑ���7 {f*�Z�o�:Y��z#�
��
�^(����m���)�n�s�~��B@��v٨G9�(�
�Hbڣ�'#��U��M�̿�|
1~����S}0���q����������T��U|� ����������Q���
-}�X�)^�6��x#HrpSD}�ԅ���\yz��\�� �{iM �I)���y�)c��f�D�KC�җ�Ґ㈋�����Ӳۈ̏���|
RR�0
�p� jb^r QG4��~<FA1:�q�o��c��*��v���f�]�A�
-^�{I�庳�4mn�
��ȱh(��8��H�(���o*��+��xI?@��v��w�p���Ft�b$��w���14�3�Y8>;sُ�Na�g!��R̻����t��L���]\�C&	�~�v=�oM�P�=�O]ƛ�h�=��2�@*��Fi�p��E���x-�tH���#8HL��uq�"�����^1�;�'8H��*���
��=���cR�g��*�|pG��!�d�{���
-_^3�{g(�$7K�!''73@�h�6�Љ�Bl묱G��~��3���mC������[5#FE
��˚�J��tte���.�*��:�q1�*b8��b�9�ЪɈdaQ.!"�O�_#xu��U��p(σ���uE�
D �q���y�V�G%X��Q�*�.��ߴ�0�X.�u�R�A�R�bN!���uԕa�ŔCw�^��"ny!/����
Y2Gs���N��>Y܄+�$ﳒ�~�*�Ґ��
��i)�
J��R?٬�(,�Z<X�7n{"��s
E�%��$b�p��S��ʺ'z��U=
H�u~eS�t؂v33��0����5�*

��m�����ǀm<�oơ��]��4��4W���ĥ���R����l\!7u��UC��I(o�������#ѻ�Tp��E\i"��r�•���]Q��2�xE����� ��sRsu��(�˕b��$�^�P�1hbD�W2��.֯�'
1)R$䈌��)��	`�.����j[\�X�y�"+����-6!*�0�t�
��0ʀ4��G.�o��
G��d� �t�#	�«`I�?\���K��� �.~��0[�^bUi� ��|:$�0{i|��+�re
�ߝ����[_B�gl�W��at��� "���8�bm��QQ��Umr�O�3�aj�oz6���I�5*#��,LͰw*/(�N�"���h��,\�qE`��+N��Xr�X�
-{��h��
L���N*ܢ�
�J�fw�a0hF�ֹd�
�߱� z�
���;��ɍ��4j��<jKW4#�‰@9���;��♞P.�e�Yr��/�d��W�[�*˄�G^Ҍ$��
������UT�ةJ�_H[�#9nu�^��KH��)�/(�	� ��*SB��i���g$�."1���H�͡��L��}&�wu��L�v�&��E��U�P�
-@[5�/��M���L>A���
�p8�oDT��fL��fn'��
��"���y��*c�N$�H��Y�E ���+
X�j�,'�J����i�ɖ���3Dz��/�d�Na�6	T��리h
^<�3@���$4<�\�r6(�?pj[�i-���ׯ�%��`a����r�d?�o�;-^Բ�����q�.f��L�5��N}j�z����*�Qė1��xY6q
�ķ��T���͎��ID}��Ag����E� 
!zDE�_����+���e6C+؈;@Q��]��K�q:%��খ$=Q�j����.��Sq84�Emq�Vs�ʽL�}{����@�hH��ɤ�5�I�e��r�
�^R�W�t�����Ay���Z��j��y٪b���w,����P��@1
�9�# ����k��0+Q�pD�4�o�Upg��w�DlD����dv�(:� dƑ~���P��0`E'^)�'�
-`�� �ߑ�鰒w�b�pG�^}?o�* Uw�
R�g���Y�0*�Ng���
-
�%��D�u�W�����u��'��\B|����c5H�z�`�����=$�T��
�)��In��O�o�S���MR٩�6�F�i�
E'I_����wNj�u��[��B������v]�>��/I	WƢ�f_���B.��G��j  ��I@����Y��3�.�S|	��N	9�"� g�l������=�]
-fv^/h_3���
z�����i�0d�5	��V'��nBt���)yi�
��

��_�x�A��eC��?<�3W*o������P��>`�W�A^�iգ���I)��}�⠀ �s�<6^v�DD5�Fk8J���>�i�A
�'����&
����������/|�������Q�yiFg ƾ
��b�(�ϥ�ª�3HΞ��v����Maez �S�@�*ᦆY��b��
XT��uӢ��>t��)��h��%p�eh_N�'q��AL0�~2�Oz�<��b
�1&�`x�(��%g�!<F�12.n,@��L�vT���$֩h0�4PT�~b`ԟB�4�4����"7;#z
�
���ͷ����"@�PQ��%�xM��-�)�n��0�I����ȍW�J-�\������
�#p�
�,��D+���w�*�#�$��i2�O���s�iN͔�s�+���l�v��칏(xJ}f���S�����d;��$���A�A�o)BI�����mT僄�](�/�mRV [...]
-���!,OՒ;�
h
���"�r�XǾ��v�؎.Ƽ�I*P׷A%M�~�<���
h���
̚�"����>B!���L���ot����al��7�"�!
�G�3`?�
��g�=ͷ Z"l��z���
h�-��"U
# U�!T�Q�?�
d�ޖ&Ceք��P[W9e
�+�[�>!Uɟ���ȫ��k�ćhp����	�^�5\�3N]1�
��e��,ĵR�M0kw"�1�0
~��|�Ĭ���
4}��
}G�
-O�)�	�3�
�_�A�D�(o�ץg;����,��E���T+r�`Z^���??�qwŤS�j�|F�%+܋
-]˫���
to�5�b�M�]aVr��*�WD�af1�>>�������K12��Nۆ-��C�OO�g�	DPG�I�����#��γ�A��Ǖ��iٸ���j�h)��B��r$Ki��<i� ���fԶ;�U �)�~�%�RЗ����M�@V��I3�fzt���LM�4}߷���U9f������5L7���
��qŪ&�R��}K8�ӑ(�d�Ըg"����^<�!��wF&���
����!`��U»3�
�i�������� ��㮶�be1��%8�)M
C�D
s��,D)è�J#��x
��b��J���oZ@����?��v�2Ͽ�e/��V<���`XS�kt��
�7 �Yw�j��E+1r�B>�����	GUS�b-�:~�E?���
[\���{��r閂1�T���pu�c"�_�C��V��d#g�ƒ����^g+�
J�W|c�?WJ��6�>�$��h7!���&^#���
-�z)�F27���~�3�
Ih0瀷nD�
���l���z��6�M��j���P�^k8���6�������1s%j��R����rA�U
-����M_���8�r
��1%���V�;0�qw"��GW:� �0�z"�d��s�4����
:ԏ����W���
���@[��=�D�
-xݞr#�
-�M�n��y�-��G0	ᕸς���/͟��/�LUqO��D�Dmr, �Ћ	>�
0���%4����8���QR~\�R�;����_���
�]- A�tTo�Nt���Q&���m���^4���,
��/
-F�aH�<����(
8���JhR��`���C�U�溃��}D��z20�Bh���jyp�WH�r��6{�Q��4�
1���P�"�V��u��7l�U�S�}��͵�*�{"���r����
�"K��)���b>a�e2�)]�>h�9�躀qUy"p/K��K��l�S܎_�2gT'>��_U"x�
�L�c�K�^��׽����
��ی�����m��c�
�(�3"��$���t�kWR��
w�{�Y?|.p���O�Q���!p�	F~�
�VF3`��gm���\6�?׼$�5����q
-�yQ �|�I? �W�����iQ��#
-o,G{�k=��������6��e^���%�5i�
{u�{��DF��C���)�M&�ʴm@؈Ь&K
-HQ��eE6[q�9j�W'���A[E��9�q��H+yE(��=?6X��h�
h9(��}��z\!!������XMq�[�����kis�Q,սkc�So��(w�`Iֵ�v�wy��D0��'�|�o��gQ{m�QL����M�Զlb��':��  �ep�_B��QX�2�y�q�z��H��*�2���$72��h����e��\�	Q�]��?wZ5�`6�'�k?=
�/m�
�������^Ri�S�+t�[��U��GJ�KE:S�@��tU��N��Y������+�
��Zy��q�=��k���>
.1G�]�`�]��ãe�:���Eȗ�f�?~�7b��f:g��%a�g�-DD��9>�����˺Pdԝ?G%�a��ĹFr˱j�vj3�tAiݩI�Ѧj*E���DӠˆ�;(��Nu�1#L�>y���b0�G��_�B���\f�>hP��R��k�
���c��^�*
|L�"�r����w­;��,���pf�]RFK�o���p^ݠ�b�<G������>q�� ��~���W�c�	{"en��D����%9w�w��D�i�
-�H"�c�	.�H��������w�i/n}����w$7IL��.�~c�L
-0.�Jgd0��gSygG�n;��Q7�M&�E
�{�v��E�>X0z+,�S2�O�pT� �
=�5����F ʻ��>_��
��
�VK��� rG	@�l��Ϭ���{�7Œ�P����	t��L�A5���j5�S��:�
���^N���^��	�K�8�-�x6324ZX�����R
���= ݫ�"�A��s��UQ�K5���lL�v�d�[;�S���Zf�
���]@���{����VB�͖��J��.���0��FB��;g��<������!�8s	��-C8O�]�БZr�h�Au`��<Uخ�|F��?�
-�G���e��O1����cH�"�D耩�ڻR|���Kwh�K�y�-�a�B�
XC?���"�SV6��ˈ�]�J�4��ՠq'H�(�s|�f�'
�  ��"��T�<̇���Ȋ��L�|9v�����'kȩ��TTH����x�a
ޮ��j/%h�SH�*@�c�{�_Z7�z�$O��Ey-�Z��h�0vT�*�	��xr_�#�iL��|;��\�� ��\�;zwp�P/q�b��0(;~`e
��9�L
"#"O3mn~G;*A���|ǘ��
�r9�=bk@��$��*q�?�E��E��gDnɈ�P�,��$����!�@w:�(�%2�4~��8��B�ʁ}F�E��=���S�p!���&CA���j���e
�H�#"׌�{���*]
��x���M>���I�>
?�P�\/ �/��bȵ����ڴr`�ۘ��́�E�ʲQ��i�x~�x�Oh����s�p
$�$��
��
-��1
?EX?�x��g��V}B�d
�%d��ɒ�Y�t�MO�������l���O�^���!"��`,��q^�O���ͷƑ|���Y/.m����	
�
-�e��cl���h`"��O
���wm�B/5�N�d���z��x��E3Q��=H�=9������
 ܭ�K���*��DA�)%���l.V�W��E�}��)12�K{!�T��L�X
z霾	�3��
-�ϯ,�+I�ϣ_�=JyS��Ǧ��ja��R���S���B�?��N�|:&�I
iL�B��?E��C"$�&���g�K��̚·�ȝN#���ɭ�M &v����
-B�z�нtx���aD����z����o�.��~����Y玜�#���
-9��T���Z����@��ن`#�0�6؅ѭW��6��/a����A>hn�����R?tF?T�C�C=�>�x:�4�?��#ER�-
����5�D�����r�!���4&BtP({���jߒ��T�����z�������;���.�b(�V�Mz�����E��{ğ�!��ઔ7�~�k���ѕ
=2h"k;�5���=~
b7�Z
O�R����p\�lT�F1���7w�&���Ŵ��a�!F�t
�"㇚�^��
��MKM#jl�P������<�E5&�Q+i����ҙ�f �>L)�S���A���}D�c��\��8����hb�*�_�
�1WF��ޭ�
���
����&�$WD��F���R��8��.��*���X��7��8t����F�&"�E�>B��š1��
�jˑ3��-���w<i[�@�5���9�.�ד�H���e�~�=�f*����7������*�l�I1�.�k(����2�D�ξ�E�EM���g��ح��'��D�'��N�#u��0Q�0m=b�P
���(P
�Ԋ
8by�q� =h/�d��븺�^61�LQ�y*
�;#'`D�Q�L��r�=�V�6pёb$wI��%2����
)I�R�7⯯�g
	�dw�bO��'�rtp�ҪYr��ǻ�r���hD�Ӿ8�0��|�)�ѻyG4Fy�Z�RP6�����G)��z��v�� ���V��]��ETi�8��|
������Q�_x�C�XX�=$!�
-��tc`����s�'�*+N}��p��k�~�sg~�
�Q58
-�Zȍ���=�1��ql��p)�_vg�"�8� �%�:�*� �8��4&^E�L�r��"�B�˟��� 
�]�m(��k��������
�c���y��_�	b�Kz����x(�jS�U�<"�ns����"J��P45�!���1�uY��[R��*b��7?�?W��=
b�E�$�>�]G��"�rQ��Jj�|��U����t�����V���ȗٗw1���Oj��7��u�{��a^5"��:EZ���Ry���ޑ��q���&d Q�Zs"T(3�k3r��f�������� ���^�T���m�E'
��o��~D(
A�G+8)��(t3iFt��|x�����i��<��FB��7ȵ�+|ԳZ��@ ?�Σ �w��Lv�pz���N+j/�(*�z�V(5j��	�q�
+6�V���y�^��R���������'5�IO��^�0!��<�D�����h�˞��̰,ٿ�>iQV*�P�Md�>!�ѐF�M�;��c~}]w�j��_��N��U��
�U��SC�����.���������sLKtP!�g'@��#��8s������r�c�o�,��'��_�G��7�nG [...]
-ʵ�i��m"B
H#}k@O=%y
���{�:�����¹�=�3�Z��+�����c�nQ^��4��*�����1
n�S��!��r�� )
�{?�
-s|�@�A����&��5�Xì��se��d,S�r��4�ʵ�Dz���kP|��R������|���ʟЌ|�B���F�����p�,
�p>�}Nv��]SI��{�
���&�S����}O�)��W�N �<��g�(!�{'�\�}��F�|HoW�~��D at R��-���Sy��l��Έ@w��پ֦���ʈ� };m��9L��y��(<������j��/q�1m�bW�h��4�u3�`p
�;���rw/z�_|���%@��y��Fim����W�{�g^9�d��Təb�_w��"V%����!`;ȣH;�p
����VLf�`�.��N�'�"ࡩ��X�*��m3v"�;�C]�����7��%��v
���
$���Q���*�Z���v
=*���0�B�b��XeLE{�5f^����0�1�ʎP�W`�B������I
-�g��\K�����R\ќ|��g�f<�S�����K�飌|1t���oz��mr
/ک��~k����W&z�r����� 1�8`�@y�G���a��g Oc+l_AW
-�
Q�_�kҫ�ub���FZ�|� $�0��-᱕m�_�/�s;�G}�=<)���*]!�*͍�
-�sEz���F�Қ��L^/�q�$_鷨Y� ��^�8�'�*�^�#�Ί 9�?#r��e�kx���
�(>"�U�~{Rd�VJ+*�����B�}U0ZPkDu�v
N�`	�m}�'�1���/
�	S���9�DNd�G�6?#p�X��\�]��/�nt.�qg��?��e!`�f�U��t{���)�v�*�d���N�QeU�8[
=r �S=ų"�a
�H�s�Mk�{Tk1g�P(
y�s�������(=۞{|���U�3��-q�{�&!_l㴮S�b�Q[
�}KiuD��q*|7)�*�+�+��
�a
$����kۏ	��I1�!�Ʒ�_�zH�
��M(��m�:~h�å
A}�P_� w�(����=�x ξ/����~�ž�񂚂場���
�,�!�zQ��*�
-px?@��)�#p(�}?dç#���S�\�_5l��QT�}i�?H5�D��l�J���
�W�_����ԹD��5�o�ݙ2��~��c ���!���O����;p���'�����\����������O�~����������?������������?�ݿ�������?�ݟ��������O��?���������_rҟ��������������}���r��7�Հ������c��?w~�*��U�G�OQ�ׁ�����H�ݿ�|�����u� �kD`����C�

���RI�uQr�GD�j
-���>�����"|���j	�?l�0����<K��
����x�� �a�x�ؙR�c��ײ�S9�}
��
�<u�H��O�a���E�R'��G��[".�H��w��V��@:1�Ǡ=��	�;��?S*�
E�\���g���Ԫb��G�r�m�x
}������	�& �hh�W';��
�������>_��2	���Z�&҉�A	��_��OCz�����bh�%��Թ0./��ó|�@Dg��>A�sݡ�
U\�1QX*$�
�v�X��q�
��?V>�z��t��!O�g+��Q����	EK�H�Cs6Y�{����!ҥ_�
l��O_��9&v� Et���Ɲ��������AA��y��D��X�������A������`��L~
-:
�$�Gr�x��2m;g��?�F����s�B
~?G$ X �n�q<,e>~��P��]���';���+� @$C���lOLE�6�4�z}V���5��9��Ƿ9ΰhjE�k�Mz�
-=�,�د(z�85ɍ��L
$�ӳt���0�;@�H@?�@�L�x��@����S�;��B�P��d;2.��
��>��<죄�q�
[��)bZH���%ߣH�.�;��l��A���h5K���5������I��y֌U�F��ߏb����I��5�s���`R��?=�Q4�Z��%@'#{�&�r��
+0l�D�
��J)�ɗ�d�Z/��#����:�~������^�nʍ�2�4‡�\Ao���{�
C?�v�J��Q��wX�#�zZ�qR��Q�MC��
/�N��.�g��K+F"ȩev��H�DD��)g�
��D��(��[�3�lgl�>0�gy�
�>�֑;� �X��I
f_�.�->Ө�\�Oǡ�-R{�
1�,w��,���:IWS
�B�\�Q�� F����(
y����0�?�:�x!u�W��)؛,���-�]��k
�
8�lzBk���Y��	x��-
���WxY�7����s�޶�\���T+>@i���d4���x��$`�EX�d��î��k��f�u�����ǐ��������iB�����:>%D08Jc~"�
*��lj[ָ��)�
 mlM_ [...]
-�>`��
)�\C5�%	����r5]�o�,��v&;�%��w�O�N	�gk:O�Ʃ\�a��TQx�J�f��3���ax��a��4�d�� ؊7���*��C�Q���u#JA�ܵFyϯ��"H�w�-_b�͓���#ǿkX��ڴ���P��U��r�
-��_�-��G�
�T�!(��="J
��_���p
_S���k��
�V}E*
/�G�`�u�E&
�M�w���
���Ӂd���h��!})�=T�����F��lt��,���
���D�j]V���/��c&�9'~e=���N��
-v at fw�Z�����S�펺�
ӯŒ��a��E���F���Bj^��3`
�c�  V�T�ʫ�9c���2��o�A�1���
Z
��	�3}D��`*�_�[a��ih�B

G=ؠ�|��9���3"�)Ʃ��'Zl���e�Ŗi��iI��1*p ��[��������Hoe� ��K<�^��X��uڄ1����障��M�(q�ؖ�o�����(Z坥|�M��g��
�Uf���)e�Y��
8؎��r-����8D
lW�Ag���Ι����RQ���ƅ5neR��|��)܅���R��s�F�(���*;ܟ�6�!�
W �@o���D� �; �S�r`�^,�q
r���
�p���U�����g���\�z
��j�ܑ�P���"y=a����(Xt��h�� c(����T�g����\�f���i�
�*�S�F\�:�P��쇖� �vR>
�����.�K��LZ��]#��|
%���Q�@uh����q�7&���ʐ"���ę�oS�_��G3��g�z��O
-�N��R�
�n@`����sZ����+�y
CZ�6T�
��O��Nа�`�Qm����.t'�.ӈx(C�:Ň�7w|
��9�p��@�k��
 �ˠ5B��x��X�pF?������
���G+��'�E���'SHZ{)�30 ����s����
���� ���
��ܟɚ�E�S�hT��,��B��
Wc� M����g�;�q�Uz(��)��"c���#���(GR�s3_\C��[^�J-P�D�o
��x�S�q�djv�4~�W���Q
=>�d�<X;1.ŇQ�?�P��@�rHԛ�hm�|kjD�:��H*
-�G�6d���
6���W�u��ح���
��ﮨϾ�\��A_s$Sk�A�8
Opj
�c���!8�ao�tp��.z�h������h'QD!tkT~S��2a:��ӽ��Z.Y�� jp�L��G�
d��u������+�{����44;������!���
��
-q����Ɍ�Άo.�=Lh�C`ʈQ�Hm�CX�s}݉��	&�
z
��lS#^�F���2A�&d���
*"�[���
��
t���q ѣ�����`-E�uR�R#&�Lǣk�w ���hZ>=��h�{��A�
rFC*�]�^1��!���
	�U�Gd�I��T�����8h�x��k1Wlk�5����~F|����_F)���+��'v�:GcsDP$(U:;�(b�&`�e@��'��
�zA,ߎ"HaG���E%���#�y���SzO��{�h*_���w3؊�}Ā��ꄤ9E���v�M��r��3�0��B�
�)��r.y�3H�G����"�W��M�b���SK�KP�3�/D�~;K@
��	�(�N-�pNh{�p�B���{"��M��;Q�<:����@AԴ�'"��ׁz&����~R�
ѥ��I��o�;#+�51�CZ�Г
��v�8b���m[��i �ۮ1Է�ܤ�f����A�̫%A�e�~gdf~F
1JFu�+���o�@[�6�X��,�IE&f�J�\���	�}~�<�j
-�b�4f	-��1��?�y��p��Oz?F�����=�
��X���>W��c�l'}��Fuo��Rw:��ݐ�3�}5�
D���?
�'
��F�A� 7���:�gaw��9�G
e���y�}����fvqD���۝�<�������E��;�cD��y
m�U g06*
����Su �����ojq�"zJ�4~�r�vE��S�C� Xg6�]��V�ȸ����u&��v
IA`��bk|��'�����
�8��s����}8ġE=E�]1��.�I`���=��aT�LZ��������
*j~F$�h�CIgh
�p
�.�z��h��$�j=�ſG�-rZ�����~�х�b_I�i��۲��q�� 
-�,�]>V�5�U���&k���L�X�������c�
}_��?i�=d�S-��u\7���#ZSv�N8o�k^_O��z+����S�
-:�At"h��/Y6�s�zzݹ�t�v�K�{����
��
�^
-S|� #Fcb�|��s�Ϩ�ɉi•�� I(��\�B�a+M
,��
�k��$�w���aW
-��Z���{&j:Q��V?>
ֽ�!�c&y
��"�z�
ƿ���|m���
�2k�oL��g�	�H_r����o~�i�B(\���0�Jv4m����qf�EѢh�G�O{�G*'�=��*�'��{�GPC{�x�.PuQ�Ġ���]1V�P9�̴�kw�w��+�d<�GF
�U+�6��#�ظ�4������r��5��xʱ�Z4�$|g��˃�CȜd�s�����Գv���_�Qs��C��-;ϕr��b�pJ���q���aD39Շ�.0P���6ɐK���ߥ��}��QO���
endstream
endobj
131 0 obj
<</Length 65536>>stream
-� b����9�Lz$��&ӹݻ~�O����(g�b��e{��&�f03*�ҍ̙8=kOg���
-����@_Ц)O�x>
/�{�kw�����I���δ㯢�����]�}�q�ɣx�
�lC�àc���'<��Z��c���m�������^�F.}�4
4�e��
�ڢ
����J��S�� O횉R�tG]�cc���u����R�����`��GX|�M�'�{f
M�c˃<��,4΃-����HܧWpE}}���d��W�<N�1�bGZ�՝�����_]Œ�����	�I��qm�bP;�3��4�S��(�e��
-�
-OP �<��F]�r`:�n����$����j��j�K�^��A-�
��1'b�����L&��
���b\����&�<�
S��<%�'a�-�Ic����J�|�jFotE�D�L]��
�M��	T�#
-u���(�D!AT�#�6e�
�z�k$�p���9�/�<��x�>&��
�(B1��;P��t
䨆�-��喙���s?7�X!o#����d$s~;�u&,��U"����ƺgZ�$e'�.cn�����1t��b�j %�W`
{2����q�s���<:����D�8��MOxP~5z^8���*b���ڼw�<q�j��Ot�`)
���jUic��@W�! *Ù�p>�������G�N1t*�xA�BY�V�e��iȗX���\ٖ������ز_��%���#���
C�0�&�'D44 +�)�{N���"r�.��
r]k?����C6��N��(��~
- at 2��4���F�Mǿ�E�/;�}��l{T��O�N���ͬ��6��u��S�x�֍
��xw�P��� �ϳ"@�u��\��3�k��4��:�Y�b��/���]o� {��dqGX�Ήb�[ܙ!P1_�&Q6��Ky��P�+p���_�
�
����c�B�B����{Dn�����8kr�a�N�
-���UP{Y�>#�@�z}�Q���a�����-���p
51T��~�-=اF�� p���k�C�h(��P
"U ��?�t�e��%>LI�+ٞ�E��Dy10<�
���ݟ"Գ�g[�D�QX���L!���
(��	��Z�d�]Oh��䣈^7y�
��
Tr�RE�#�_���
������Q��3��
��s��~��}�G���K�D�����A���
Nv��TN��Q�
󶨹2�$�X�
o
-��A��ԗ�
�h��#=�����l!U���G>?D�w�m_��~�gfɪ ���.�Z����xg��W$e�KSq�{ğ+YR!�[��?
g��1A�ƣb�r� �D�~�@�{|��}��E�1&�C�D\|f at 6��w��r����-�k%��ގ��qT[d����Sg=p+1�qw��h|���#����&
-61Q��Bܗ�H?As�)8�H3b��s&s��m�)����q�[���V�j�����A��ܣV�F���~���N�
-��`t�1F���69�~	�Fƭ�(:�d�@�Lmq[�^~�NěM���]WjNiJ}��
H�@��
sU	p�8-��;��b;����
g��H�Q��,�R|ߏ3CF�I� ��HRF�$?�V��l�$H��o�����]\�h�*���8
-�M�7�r5��1Y�����Nj�%oeU7��>C��1�%��%1zd褍R�� ��]�0����y>�wZ�'�?�ϣhB�bB}���r^2&RW�޻���zqUߣ�X>�ih%���U��.i�u�sц,ר�Ѿ�t]
~�M6���>s=l�
&֭����.��1 �?�0�(���h&@��k�p� d��n�ҭ��P3&" �
�h͝yz�a����_�S�?Վb�*P
-BvF�|�"�����b�g8
��3�7�����kŝXX麾؎P�`;��-3F
$��3"'X�
�����q�k.x��X����Pi9�S��e.�����w�� U��3�o��d��sI��w�/��c���\�8��(�}��??E� ��b�	��G��]� �䎉����,ˆ
�	������ڳ�4��N!��|(׶⍞6җ#��r@{����}SN��{b�rh�fQf��p����O�&�t�hQ�/�R�t=��~G�����C����Q�F*� \�&�\!8�+�
{A��"T���$�$b��(*�2PZ�n�k�><�3Uᆮ���R�doYrP�]Ͱc�B�|d����X$��z !ݱ�� �g2WD)c��ϔf��qP=�k{�꘳�(t�!
�
�>"@�0��J4|�h�)ݭ�#�� l����<0�z]��cد�uF|G��]�Y�f��'�O�;(�1�g��I�!֨�o��{�R�?��
������5H
���D�܅h��(1 at DŖ�u"�m
I��
�^*"��"n�	�9Q��98s
۠��ޡ
ˋi)��
ϱ���褒z�f�4ciX�g�
�o�(n9
yTȕl�(�Q�I�JG��l�D#~�� �G�0�"��@��������9_S�����=~� eK���g�B
\M�1�o%B�
��G��`x�;�1���O�5
%���Fa�d�m�γ.��>��q�N(m�4%�Q#)��j��
�����V�ŢT`�PQb���e<��a��B��
JN�8����v�c�SZ���I]���v�Xq����@	,�^bi�3����T�]�*��
-���i��k�++�`Q:sՁ^���ßjp�c/>��x�������p�{�����R�ײ˴��.�FE,��
�P�S�+B��}�7�fK��H�=����
��7eE��
�S�
-��@[���E"]�
-�v�I���K��iF�~:S�
3
�8��_���!5���'�ئ��L!
Z���T�gMg^w,L�t�Z@�P��Gf�R����^�$��i�
1�=l��M���\�^�_�&�/�b�ƨB�o��?0���C���<l���>�]�Bu'f1
-8�2�}�#D
�,#h3v�t#Zq��8��<(�9�y_e� �r;��f��A���3Q61�o���?d�T3��w�
s���DO�'V@^�,�G;
�l���΃�����
7W8�1�
a��ۋ�FF|��ܠE�h2���f6	 �甗yg�Eö�@���IM���xu����
�v�^~:{�Aՙ'������lǙ�i��|%j��`��|�.����π��G �^���F�����ל���5
�� �`5�V8H�*�0������r{]� �M��[��4�H��z8�	j"[TN�����G��~>���k���T� �Sq^7��
,�~q
n�i7ù+g��w�,
-<l�D�*W���:�/˕�WrkHo�m��1�<�ZX�
����	F����\rh��:
y)phf��K^G�]M�C���g�K��п.D\�q��S�+���p_!_��0�뽊�1o�:ܺ���%���//󞑼G7��.��ʌ�J͝,}��S5��;�?���yߏ�KHj�}�_fdH�P�}��U�yڠ`3��
g�{�p�a���hߕ�T<!j��Q
'���D�/&�����v2��χ���0?[4 X��*
�0
E
R�� |p^*G0��3e�	&Ҹ����W�)��]0�]��A
rGs�����E���W���~�`�CE 97�P�!�󌊦6�(a2<���
�_�h�Ja;?�Z:Fό|_[��>^�C1�p��EBί��
M����
؛�M���s��|�Р��W6^~���D�*�_�Y���pdQ <�)��PbΘ��LPb�5���Xd�>������Ev�-��ؔ� x^�M,w��^��@�]�!%{
���rAOâq3FX�j	�S�����+���
�a
-�f	A�jZG���.����%���菫`z K��Ý�3�	�#�Ҕ@���5��`w��B1�s�)��ƭ
T�y.Q�9ð
-Bp驾z VΫ������0�^h�-1�1P[
Մ>�
��`��$��j�
-F���@�SD�	�/���8����,�ִj
Ѩ�Dq���5����;Yѓ7��l���|�>^
#�GT�v�� ��
�oA�n(��&�u^D�l4ԖA�9D+�Z�2��׉(ن��|
E7�p3':������l�%&EB�l�Ft4����/5,S��a�\B�5`,9l��4��BA�1�Ds6��e�J�/�M�u1�����������*��mf
4G^v� ^�΄�[8�[��u͋z.�Nmwj4mT���b�w�A��A��XF�w�L�
$zI�=�B�aUG�a=�Ƚ�E<W\����
i��8���T��*���bs���������?U����J7�
:O��Xl���k��
���G��8��'��!�����?�Gmu6�D�r��t�\t
�Qյ=����������<-
_�	eQX'�}K!̚F!,���
�S}}����u��"	����5j�xU;Yh���>
��\�E���L�o�L�bg
w0`��03�f���'G
��y��=�v�tNԧ�T�7�p�f�
���J�ۿ7Fr���X6|�f
P�^�;��ʀ"��H�显�duza�
}����0���xi̠�h������LZ�4++6�N��_6��&�BM�j�?�.Gt�J�U�q&
yǁ!Q�&i��
�%���5�T�
�C�f���n,��Z��P���Z�0�v�W{ڄ]��T�A��D�Pk� /�~2q"SJc�J��+Uu�~�/y���N�y2ԫR�
�1�\�Q`�
M|~�g͈Z�2����]	y������v��
��g��މ������ZT<���]�@y����<�tZi������n�/j��%�#� ����y��>��#v��D/�$��?���5k�
-Lq����[:��4�
E�+v0��	��8�E��Sek�L����n���q�5%��� M��F���\�Q��u�Q�D���DZѩ��]�
���
�"�Z����L6�����`!�/��X��x�8�my��$�/��i�8�`�J
�V b
�Һ
����`�W���lq6�P�wl$D�SI�с+�z�L�n�+�iF;�� l���	l[0�'�,���cld^}�B+E�
f�>
�����9-� ��*A$�'(��"*b���^&!�
���P�}�
9����!�*j�N�u1��s�Q����#�וE�#�3��X�����rBĤ��޴�N��.����ȩ]@"�v��Nh=�ˮ�ɓ
��B�#
�v�^:��M��c&��=��
r��$$>~���_
< ��#y%ҡ�$��'���b��y��}�I�/��#v�gD}@�#
��:k���vS)��a��x4�!�X
�q���
Y6�E ^\	�7ѧ>���j��;`{G`�)5��lU��N���h?�j��
e~]f�w���A���2�XGǾE���%���[
ADIrx���jL�L3�ȑ
�Z��Pf9ɝ�����3����u�;ҁ�B3�g���L��N$Y5��
.�o���L��(�(0K�i
E�h��L�!��
VP!���������ⶩ��P`���c�)̍V�6ZAzZ�g���)���� �ϋ-�;"!b)@���x,]vr���
{ř���Sut:[�R��@3�=Q���*m�l?�A�:Q��5�N�����Eƺ���cM�/�̝yD��\
�'�b8t��q�R��iˇ�5i<%
�¶B`�p"����[��
��r��D��J'O[WX|�.dwLJ���P�D��(Y� $���]�o�*:����;Hs�ܳ
��<�&4d9��4x�����e/���u��_��U�� �fڃ�9v��OQ��"W�/��;iƎ�+��ǾbW��e"ȿ��>� [...]
-���G ������@׸hp�;�������c�t��^\5���
�T�,6^�ڗ��/3��=�z���I�r$��i'�?q�KK򨉪�Ѭ��� �߄C�&	
9���8�?�6�Ǔ���u�̺�\�ZO�l�K5k3e[/�A�
VH���
-�-�s;"nfh�*�9+�!
GD.y�DC��D��d����9X��Q�
�4=9Oԝ���A^��	zZڨ�k��u"���b+C_�{�T���x� �+�yy`z�-��vPT��&�I���kr�"r������ƃ�BFa.Dç��1{B:�6

�%�(�'c�
-S'�ˌ�ld���*�Bj�����w2�Zm
w�4A@P�l2(H6U���j�,ԛnv=����=�@)�bT��NƄI��J��]��;����;����B�
z13O(ʐ�B~b��L0v�@JD���]��涃��/���t�*�t�
;�M���8��[�ɐ^�h�7��\׭�Z-p�Tݻ�}�;�9�w�5��<����Ι�m���:ҍt^F������J��pA��.�8��V��:�
v0<�}����ف
-I��A��>!1����z�� ��-FT�z�VG~���G���z���b��QK��U��F�7�f3j<�Y�P���A{����u&r/��-��u�?�J��
;�2�P��t�_��@ƌT4�|Yv�Ѩ�14��r�s
���Y:=�>9��Q����;�w�ìfB�'��0]婂s�Q�g��o�:�µC�E%&_4�Z�f at D�d�T#x�Q��Q�o/�›Q�]�"R�=����
L&H��.p�
-`_$`?x_g</Ԏؕ���W�p)p�U �.QW�V 
�4+�3i���	�
���Z������=�EV���G:�*l����	��ƾ��I����N�-a�n����Ze��c�<tE=�wA�螢�J�������j�����%n�
��9��ƌ츜��;-���|��#���X��?�Hsɿ��&v֛C�sʴ�ְW�tj����{y����>h��t��ڃ�δ�xŭ�V�M¡��C�clH�(��M] ���c�J0��+�>tC�æH뽤
���3�7{�%F��
%�罀D�u^
 C��SB��� ����p�-
������6Q����'
�b1ʼ�]� �^޿2N������x�*+����ͻ<N���rv�NsP����B�L@ې�/�����w��Uatt4|\D�
����
�+����n89ѻA;
�݆��\a=+�xƟ���Ӓ�E�y,-
B�r�k�<"?��,qF�,cL�؏�!��ˡP�^Ol��?���dP�D�(^ѿ��K�
-Q�t��kZ�w��v�5�L�N�ݎ;�V;���?��({�*��e_f�s�{�P�f4�z��9�h�`c޲t8(n<R#s<�ٹ��1L���Q��
gA_1�]�
'U���a�
_L�w�
�#	+�( ~O���1�·2���O��y^��Ly
wnҝ8���E���
��h�}�X"�<���W��FH���|zg�
-g���1�Z!�K��L�>��	��ݞ��d#�\�{q���x�`���Az�@�� $��N�+��u����Gye
���ǙG�ԧ~��aR+�^n&�&tV�0�[��.�u�R�={�EҀ�i�����To��'��
g�Y��
n&�RM�f�{��UO�d`�EfJ��;�:�
-�J WQ���NF�\\`0]�����g҃�Z�3il�λ�Nvma' �M�%+OE:��J�9�)' ��L�^o&�
��m4�4-���€V�y'�_
�$�P�J����h]i�*a3�
-�������E!�݁��=^:R��.\Q+�H>3\dm�I
S<Zd�Ǧ�m��V��,�z�!f�!w�3\�JF���9����=\h���@�'M�`W�"2�n�
WN�ԗ8=i	�odn�?@���?�ӥ8���f������h��KR��䬪����!S��8�a!�o��ӧ�w�HW?�&�^z����ɲΪލ7����gf�k�#�F�S�	F\O����}?��
-}�Ɇ�G�l��RW��H��8��RD�D�#�0��Y�
�=�8
��ʔ9&�3&�s=���
�R�i;�e@���306)���V�m
k���)6�j��	A�	�S�^*.�+��%�O\��I lq�
�RhRh<�`o�/��L����#}�N
�"�
�I^�t��H[��+��xt�t�sHÍ�wTŏ魲�-��Y�q�E`�~�Y:"d�[1�9�������P�	@�K��7�k�R���	��K[�Q�d	ۻ}UW��
�h�|������H���֯Wε8��*��@��]�����l!􀥺b�E
��9�~�z�:���}�Xr>�.�Rn�L�|�hWHU�����H;�N0���-4�����fdw����%��H)<JP'��ݥLF>->�<�/K@����BW�%�����B��X�[��%���!ʐ9�*
�h����xo
-r����"p����%k��޺�l�Xpş�,`?o���AX���L�3���2FxK��]�E&E���YB���'��/W��������6O��/�3m)���h�[B��:lz�b�#��6���FY�iw�k��?�cSg�񈊨~X8�o����k dhq'��I����֝��։���YBĈl�P1�V�[iu�-�7eZp�^2�
��
EC�
s!� �z�!
H
*
�*�DKQk�W�t����F#�v�Tl�*Q�� ��Q�������XB#�=�Q�����y@��Sm������Q<�D����*�6r��n?:0Mc��+����]wGP~��!�����/�&���{���W!|;hk����L��L��r�o�(��Rús��
�aI!��t��d߳
}�
px!W���>�[����xQ�l�6�H�����#p�G�c�XO�!��݃�L�K�ș r҇TF��UR��X�Q~�^���.��\!�����bEe(
#0[�#�V�������̸����D�"'H�w�u
��%��[щ�q,�	HP���jX��'�����Dh�:$ k2E�~���-�t��^$�*���?��u*U�tN��-#�{���0�V8�������B\�?����~ǫ���w�ɍ�Ќ#*]&�m��F��6
���R��7*Y���po�הM
��r�k��}����s/$F5&�5	���-�i���
-���xM�߿�'�����_���w�z�
��wM25rZ�{��5k�B�sA�Y(��[�t<W�;6ed�����w�C� �@ڷh��w��X��1���`��,	�BJ{]�ö/
-7rDUWvp�/�
�m%F3�Qg4�II���B���?QSiWT~g��w�9p�#��l�����39Y�\`���]��+`|X�� ����l
'
�L�mF��M��i*�2glH�(k<¸Ua����ܚ�ѥ�v�
 7�����u�2�O�E�~�QЄ!��")�D�1�wo)D FR������9g��
|�h�V��Jm�8U,�J-�5ᝇd����ggY���c��뵃��ː�I`�/����ѣ�y>��de% ����y{C�]������eeYp����)�kN 2�Of�O��.�#_Ep�*������2Ӄ`�+�V�Y״A�L��Dba� ��a�{
�J{S
B򴹄mzF�-�$�
�Y�~�Xo��VY*I|@]�;�
�`
��Ղ,}��@�3������p{:�g�7�1�2��
��|{�'h�������
h2��l�&�%�K�CO�sE�T��ϐ$�h�NOA�p�����~u;nD�5����2
��D5<������xͅe����1߿�qBN e`"N�I ���?m�:Nr"�
��
�

P�����U�j� � ��v#^Χi"׶�>�X����
��C�Y�,�Pb�!G^�L̑�41N8x
牚K�iND�����Sǡ���+z��+Lo�q
�!H�����u|��f�2��a��S���0 �
����H��\�~�zt��v&��ڹ��Ƌ�-�Z��ogk���U�����>fi\�6�E�݈���oU�/���������7��I�
5�{�4���.����?g�DD�W�DY/v�K� >�N:9z�G}9�FQ����2}ex
y��
=l�8yF�9�Q5�R�="}�p�?>��A��K��L�[m�G
-��*$������������v�?�Q�#w(,Sn�)!��I)y��_ń6�g΢���H�l�3Ph1�
�j
-b
̈́f����Rd�D��E�0ʿ�7O�}I�%
=�

-�k
-�
-X�$��y�����*fIn�f�>��<�J�I7\�w��
%��w_0�D�1a�8�{U���ju�ϕtBA���ŷ�f�=���3Z��U���'l��!}a�<�u�H4/���8�ͅ���x���<2�Lgz
�2 ��&�.�l�C34�^k�ѱ�:x�����-�J
�+F�e��
�<a�M��t�yf��H��"t�q�>g��bv++��E�S�3��Ӯn/��]�Yw�Vid�
D���tvs,$��-V���,�#��J�e�W�$�`Gf���m�._�[A�� ����0�+��2K԰�pg��Ƚ���d0���;�
�4�[M�떠ݣ�G=�#�� n�Lg�;"��R�_�f^�b�I� ��
��>`�.�+2��Y1�=�O
���	h_�թ�Bnש�������'�=�a���e6u�pV�r!U�#"-��ơ���q��T�@�q����ɰ�^e�2��M��fbr�Ҵ<�D84��!���M�*6e�G���8�̙���KO{��8"�W7��V!b����Qf��*8���ډz�
g��À6�fXt:!�{�v�;h�<_6W3�c(�L!�C��uMSG���`@��v�I焖�
�æV��
4
x��=Վ�c�VM9PY4�
B����͡|��2�������
-���|DO�n�2,�����
��)���;�*�gğk ���^5��L��)�
��w!]��6�W�Q��y8�|D��v�p�`{�5?��
-�1�k�eJ����4ʂq9p�l|O��k!�zu_]��`W4"ô}׹�����[gD��EsE<Q�=.d�թ��֢�<B���ZG��
6Q6�&~�v:���ƛ��"����i��3����Y�\59ܗ������ϧ�GD1NO��w5�
N�O�o�k?�kyV�
�����Q<���A.�������̃�+Q��C�_����
"�K��3��:�&MHա�V���#�mW�;�@8_%�u�/��3�34�P`�^��7`
�( *u<
诤g��-k���3Q�!��(.
�p�X;��x�]�����w��~��.Ԩ��J� �JǞ���
�m�]gd��
-�޶�h��.
/�����v�������a
�U�5�)�1X���
-��־��h������
^�h�0���;��K������t��j^�kI���i�k�|� �Q|�F�1bCl
Jdg|Q�{>��*7�
-4��d�Y
Q�ⳳ���`?��k�́���ҽmL��}�-:�e\�c\�*��cg�0+N�
-���(M��C��z�|��RG^�����.Oa��;�̝T�3	�9˗�uu^�!r�U����}�Ȥ�<�� =�AW���N�`��
{����
-�f��z�ۂ�,�W�J�eE㞆��d@�2�.n˞���ڴq�V�� ��%XsM�^.Hs~��aA��m:���� J�Ό�ܑ���w��D�z5Z
�Y����Q��S���;�e��"5#�MV�
�Zq��
��V4����3��$��e�Q�S
j
��Fkgm^�ޞ�
-��`Ŀg�����
����NgRC�m���V"<�	6�Y���g VIG@&��T�VE��hDt���P��
jS9����=Hו��q�
������I!���0^�mT�gɯ]W
���9�.�Y����"��ҡ<'�0�
�t���Ǐ��da\n�0(��~�S���`\�Le03f��8ֶ�s�HVWE<��ٻV|�P�lz�wL
-��Jl��	OǮi�CTg\��ɸ�8*�mרz3��u@�w�D�����
�_���
-�>���TFs~�
�"H�����n�>]z����^(���3m3V3�����Z���˷~�b�-!�� j�w�:È‹
�X0b�;|uB��W�uK���������=Gg
��
�A�d*�3�t�0��9���1�c�~Y��t>�j!#�]��DP�!B�����55��L��_h���k)xq�V*�s"T�X�0�=���Su��0�1_(��_D�+�c���
��uW�4�'�
�?����Ԍ��S��g�D� �W��3
-�T/�D���fe���jܕ��GY���s2u&0���g�'�+�L�:���� ���z\���/;�/#^�.*Dpr�oQ�#B~�~
�r�咮 ���j�ѣ %�}�7
�
��E�oh��P5{����(؞rv�c�U�p�a�bSs��Wc�	m�{W�h��]H�o�|V�<����`�o&�8�"�ӝ���k7B�:W/���ڝi�1+��wbo]=�
���j�R������|\��z�P�j��
�z}p���5u�/��'Ξq��q�8�6�#�t�+\<�AM=�
Gd
��@�)e�E����!7g�]�Ś�*-�H���8FTs�y�+�9�!��}nU�p:T}n�]F�q�_��8-�I`�>�mHzɕ���V����4���hA�"5���?�F
-��L�d��_ia�J/�-p~�㖉4ȥ���ξ�5g�u>���t
���ဏ/9ݡ1����VCī"�z	��j�ʃL�\Ul�7^z�w替��ʙ��"Ø~{�7�)wE�ىA{�
i�T
0�hg
&/���Q��T�e�B���3��v�1g ��h�����RtF�U��`k��Ɏ�
B,2����:R]+)N�]^�+�D
-v"c�q��n��Z�@7"��žet���a�
?p��:Z�LV۳��,�����qʝπ?�S���>����a������)g�1QβJ~F��G~�bC�K�
�ݗW*s�,ly����.
�
�ژ�g
͟j���l�Ln�ß�p^=b��.�����z2_?c�|L�X�:ƜQ�)�׽�����>VXg�f ��WD��
����N���ǟ�+m$
�@�}P��
���(�q�!9ţk���dT���y!2郞���v�po}*bU�^!G�
��>A.שO��Yc�N3=�9'8Β5�1mNciK�3����z�D�*����e�$v��5S����ؼO�L��)�G#n�~�b���5Z�x[���_�o��oQ��߄K��ǜ]�C�Yu���s*��|��5J��*R��u��wƊ�¦fGM
Ca��@�#(v�8!�_&7�d�
�%��2��]�Rc�DtJ��"�u"1`T�q���e��e�z;�����
W���<��@�����OGz؎I�m�$�+�y�h}��
�;'�$�sJL���W�~��������cW�ר戍�Q*�U��VܷH�w�
�
-�}�
��T[�%�`!�']� �+��O�C�Q
I4���2ޡg*F��J�#�ۭ(&lJde���6���x�:z�$�]��6
-Qb�!���yG �0¦,�
-�~ً�-Gi�Ns��?��h�|G:�
��;G/ioD�O#|�ڥ�����^�3ll̐�
�5&/(`��=���p��U�[�
��9#�^  �+�#�O-��(X;Ja8af��pt�Eq!
R祒~��
-5̂����m;�4�� #���'��〉�LK��cś3���L�
-��e�۬�b�
��̙��U��}�
�1�_����wh���ǵm{
��0˴�V�D�̀��i馀������8�Z�2��ۭ�zC@�����jQ���o=�����7iPS���A�H��w���=!�����T�}8.�KP�
5��0�&�� N��i5[	��k�^Pe]�������<2|{�n>�\���Ι:�d����t�:����Gh�H���~��X at 2�"pR�r�]���\I�Bik
����'���R�Gn�;m
-Lv��擶!�����/�zR���on
���ވa�Y�U�MZ���85w\�fC��p�__�]�dM��Y��XU�-���y
x�+�-v<���������8π>ߗk�
�e
-�u�"��3�q�W"�{��{����S_�t5��oT�y|pKd܋݋��eB��^oмߣ�IdҠ�Ɠ[�R�8שgF��%EE�5^٧Y����H�Z�c�G��"�*��}������1�x
Ѷ~�ˉ��$jEL4��n� �E_�L4�,����֋Wp�zaq
����E/{���q�u���w�e7s���� T}�;
-��
�,��谕��_ǿ��I![̞?���~lă���RqיABB�Kex��qC�m|���
>�Q�j
<4�+'��ʠ���#�"���o��oJk�u7u�X�m�lC��a�.�60�~Z�����]�*Ѧ(�p
D}�"�C��<�Д$#ُ�~n^�oQ��
����yoq��A���E�]@�8|��ZB���X�]?
&+sS9�-
:A��GN]?��
����j�{V'@j�C����
�&�F
-��"/���,9�Y�RpĈ��1�O�Z�F�0�feDi�i���q��Y(P#���m�h�.Z 4���:��v�_o����8mo���f�`N�G7�l� ��T0�
�����%f�d��VC�+Cs�YǠKMC�;����F�]������ψ<S��gH[��@K����K��;`7�>΢�P�褘�7^v��=]��*o70wH!
i��&�+P��f
j/	���@�u �|�t��	��}D�[%]O�}�xQ��	�� /A�`����D|=�{s�������J
ɗ���a��g@{������:���;��U:S��*>�"�B�+�Aϔ�=��p�N���.�[R?�!
�2�Qb�w�m�ų���/Q��
P޵�#��T��P�����
�($�g˟/�2��N�0�?E$�
��� O�5hk��I�Uk��|�
-��V[��� m�訪C_8ҿ
�� ^[����rc���R��yF�r���.���O��E>����C@�D��CE6]��x�n.D�W�b�O}���
"��&Q�����ϓ��<v0���g`���&�c60�^���
ǒ����]��/�n�,���Y�������VWE
-24��Vls���*
-
�%d���
K��q�x25�ΊP�
-|����&3�
��*�%���-�yg��: �|�����O����
-���fW��8Ͼ��
�P��8�3kh� 6���!P2 ���w>Od�>gu�B Ž*���:+32���aU0�\�Ѿ�_'�Sr`�襩��9�F�U��0?����^�ì�@���2.^ s�
-i�������%MUtMs��
C4k$����Q�@.��	�B��80u��;
RP-wiG{#0]�꾲 ���{~���� rt����y(u˗&!Vx��[�q �A{؏��8�=���<��&�k��� ��Sfq�Y��A���a��a
S�ВI����S�
9���G��-��
1?ʵ��V�i��_�'����̓%���/)������c|�տ�����_,������������_�����������������������������������������E�י������{0�
�?+n����R¿I�*VL��c
�_�~P]4��k��y��AF�LDX����|r8B�¨]�/���bHgbQÖ�A�Y(k:�
V�Q��ǘ������8О8��}9\&?�N#�
.`�n�I��Rm�se5�< j7Xʇ�匳�2p���¸���5)��T��BTC���rO���=3�
��h$���I�(,�;������l��N
�1;rᣖ
�D+He�U��X�/��J9�����(bD� J;�������,o�
5�N|j���L�I"�޴09��K@��rq0��q��A��B="�3&���n�jK�\��u��d
"/��_��%��N|ث�	��lC��I�}U���>k��Ϗ%� >��;�
lQ�eǖ\��y�
F�����t���@`����Xo귍��5�[jT�m�
����j�ݯ�f�
�jw��OգLꛥ
�'tT��6vP���O�Ȧ
`}���ZOU���w�
���x�q�$�X�C,Bc�=��� Jw�.��{��<��ܲ�9F��LMH? tc��W���_�W��T����(L��XVlU�R+O5}
)��+�;]�x)��~:z��
h���ʲsl��I�������}Ef���ά×^��gΠб
�~&&�q�M{&���-�
c�}���� C��ԇ��X����"`!,;�	�B�(h��#o(��~Pc�� 6�)�=��H4���u(C����	\+�oB��)n/A��悰
c-€>��
�
��!���i�R7�cIX]�>/�73	f�
.?���~c�B�N�1:q9�B!=��Rh���;	�x�98ī�3�r��;�J at I4�
w
-́.!ooo����^P�Cx{
ab�؛�z{F<�\�
U��(
��ZGJ%C�\	�����)߿�#���*r�ޤ9A��`cDP�&��'"�6P��:�q%x�<�
�<y=��f�2�N��P�87%�����������K��Ff��U�8o���c����V
�5���ڠ
�
�=�S�ڝ�-C=�#_��g��x��\f�a�ס�O����������p�bUg�QTq|]�
1���d_x"�mCDA���J
���Vh�@;� _�:�m0#΅,a�x�z���8݄��~”Ղ�ھ�d���O�?�7�*�ݱ����Ԗ�4 at P��������B��~�q�
���[��_����gY
��̅ �0x����Y|����
VWsd��D�^�f�<��������
f�ݫ�r���JtK��:͟�ܱm��C#�8�#��f��آp��ŝ�d�G@wZz��*Rݓoz��+���� �-�
�ngF
����i���Y�


�4�ZB|ȍ;wQb�߿�@<����i���~�
p�Fx�v�~Mهd��~����
�歱��]�^�)$���XW*5$|q:0�=�q�S���V��3��xj���p._O���q4���8@a���9�=X*�:�)

k���S���6�R���b�s���ڪ�Y��
 @�q ���^�
-��
��(:>��@V+3$-���,ꘇ����m�����|(D��J�+����Xm�~��3��	
%��*
ꫡH~e�h˳UŵdE��
-�,�[�CP�|�v|�x�s�yڄ����u@�*�5&O�:��Li���ZxsRĉ�}j:nM]�?
�U
?���v���ƻHh�����;����B�=(���P��/�;2��H at n��~=d�9��*F:
 �1�V�mD���{0���P�|���wy��.

~���e�b
Ur�;DI}�0��H�^��$��QGW�Rf�UUOzL��1�o�Z畊��;,F��m�;�=U��@�O ��K'�
Ւ¾8�
�:O��;⋂�bU�%�
-��F���`[��T���l=�/��4�1Ӥ6i�E��F���
�1f
��gM���y��
�!�a ��\�
i�_\ �X�
�/�
-�M_���o�r���#�XC-w��|���j}3aM�XH�n�Jl�z��I�S�~(�h��|%����������&c�4���G,�W�Z~	�f�(2�LF�3�� /���*hШ-n\g�����[�2"�%B~�����Β��m^3I��m�՟�
-�I���"�s\	+
� F7(���o9
ews
d�w���J�I,y��
��t��`?���b�t
��z�1yA��j�1��.ڽ�
-��j��^GO���%�F���~�у�N�3�kR���K��]�����7�8� +X/Ӄ����tf��Q��:JEu9��ĺE�柳��i�4��[�e��?Ξ�{���K9)�
�R)��
��դ���D���5N�]0R�i��j�����z����1�bqqq:G�`3A���b~���6_?į���d39��`��3HU�UE5=+��*�����4��h0�Zv��~�I���"L*4��
����ܚ�����ñU�0�K*��-8[\4�ܼ4.��A\l���&����d�{D�
��T�q9��(~��9U�
v���ئ�2?D|�y����(%O�'u*E��R�E�!��)�R]b
Y:�&6Zt���Fh������~���'P1
��Z���bi���[ -}��0���{�x	�'��ȶ�0�g
�|��W
-#i*$EHa1��{�
m�m�
mp�>�f)
���x��=ʜ����dN�nD�7�h�$DT!�����F$%�3���=�E�Av�KÔADKG���>("P��B{�b��F��h�vOS��\lB�7z��v*Q�B�-�
{�iT
���RUM��%&��b�S)�x{�����=M����ƨ�����v<
0�7۶� ��U@��R�+B[��Ha��b���-�(c��bڍ���_��G���|?
�j�
f��KX�΁�!l%�f��qs
�#>��3$� q~��(�/�=�������N�����x�3e�����������|�tWpb�0���M��gv>EFU���=*
������q�
{�颢 zdK�Dd���="�SFנ2����yHF��\
�����ȄG��+�aH7���p�>��p�
�0�p]
��S��L��B��yoW-~��霃� ����1��_T�cL�K�f������!=nѪ!��·���3H#A���(�Ws�����$s��
-
�
��"_� 2�㦆2XS��"�h<5�H�>�㝡����ѩ�
��_GD�P#y�
����o
�
HH����Y�q�:�2�0�t%0����t�_:0��g�
�������oj:��eD(����r+!��d�U
�����Du��yjL�Ԟ��Yx����Ȃ`lY�G�i���Ka��
�a��~���*?8.�q\1	3-�yp�Jq�,l}>D 	�ΰ�;��J�Q9
亸�؄�B�i����,
H
ͭ���k��
|2�`��Z�G5��rC�-�V�s��ϳ���G�pOe;!�,�Q��+�ɏC�b	�SZ:H���h^�ը
��
x�{����I�G���s��R˶U�v����N�a���"��'.ۧ�O��[�2�(	\�2<�@�>7�s����%���X�7۱��V����-�
��(s�m�����?2^X��i�}Bw���L4$$In�X����c�l:�㋀�
(��h���= �E�,�F��/+��:`+S+��
�P����9Q-��t57@��@F���g 5�S'�o�w�ME(��`+_���Y {
h� ��l
-xOWC��-z�>>�����VQ�� 
8�$R�R(����
!� ��ߝ�B��"R��W���{�ǻ��s�W�Kv:{�����px,�
���^B[�����6/�
�X�2�b�J�߇�=�pq`(\�
O}ו$
�����`����S�9D����'��J�e�t�\غ: 
Z
x$���.���` ӷ�s$�=�V}=�/`���1
��E����UA�	
	7ʐ	����ˏ+��R��upRx��0!|�%�Wlψj:K4Z2�h��~�NoE�(�ҨC��������&v	0�eB�  JNL��P{	��ʈЅH��fܔ��=�eo���
-�p�b[�v����CI�S���²���E�/N�
6��gG ���R�is/������5���E �'�AG�G)���=I*��{ހ�3�
����+<�s��|��2��Q�)��SБ� �Ĥ��������
����,.���h�Ǫ vթ�
-��٢��^u2�w�p|=�B�И:[�l����!�Ǡ�Hy<q��Z�/dY�	ؿ�Hه◦�r߅�UQ��'0���|��"9��#O��t�V ��_
 }�8����)
-��'�#*�V9~Q�9�N����ڀ�ņ� }3��*�p��#�_�߅� TS��y��T�&y��$���q�ߕ�~���QX�����8Y�n�}D����ƙ}0�Ԡ������m!b�t����<�3����BX�I�����0N�D��(Zp˫؂}�%�cZ<�l��Q�&F�q�Ь��9kf����o��?��
(�^42؉��aB;���!=���S�xct��;�uĬq�~�4D� �(�ڸ
��A�)�\-b��-�~� �2�PF�t=��ے��/��(�\��h@�
�6��f8B�ڔ�vԐl�gg���Yb l
s��
������<0K�-~��9��BZ� �"
��g����Q��C�
w��s�3n�92��률N	�1�J�~{ Lv)pe�?
Ha�.�' �'�t�QC:$h
`M�+�'�>@(������\���bX�\YH��^�J|P��
��c��D�K�r;�h"y���u�{~�#��'��R���?�PO+�QM�(��᭳�Z|��?����K�p�lm��Ê�ߏ+��J{�	��g�͜�x������VvG���JlJ!��Q'b�/i47����E:������.�WI75���0蘺z�"�
-�Ԧr��[(_5�L��S�T
=p|O!ɶ�4Y�9���~�'�*��JP�zp�Tʫ
�3��{.~
����ϟr�ف��
I}0����~��L~�I���[�k�h�@�����[��O�M
-�l�u������Z<��fK5=�h���H�
2�B���Q��
- Q�/1�s4�8�\�
�A��gMS�<m'%}��|nx����vŤK���L+X�i2Q��9��3����L��g��� ~��v�����aY��'�F`|S����$�{� ��ca䷻n|�R0DgB�����JfFϺ¥+�K�~��
��~�%�i�\��V� M�
E�* 8����\�i��y`яn��Czޡ0?�Z`,�k�Zp���E<�+Li�h���>C0`�l �d��������:��
B
ʹ������#�eg��Lܯ� �!������
���<'o������B�Ї��	�G���5�d8�n��6��=���.?B�{����$���I~�q
Myf�O���t��xks�>ˌ�#�!eU�r#׋B_X��_
@|�^�]��_p�M�j���,z.	
��g�ߨ Ɍ�vېJ7bk�
�9�̱����d����v�o�R{��)�._��_�.�*(�:���@
��VF'�
�)IJt5[_k4�M�e������ꂽ��i��Ϧ��4>��� �мHb��k�?��.Ŀ����GT�GaG,Z��l��LG�Q��w(�D�9l��C���P �Y�������JQt��|t��?��N��{P!��
-��
%��IA
�f�)
�&x�
�
��)��
���-����������A��S%��+�ua,C�
�?��{����Hk�
 S\�Dڈ�־ܘ�QO�H-���<:�c�gC������#զ�I���l߂Z(��b�Ry�),
�m�`�Z�
¦���Vis

d< k�[��G�1Q}Z6�hx���+�E�V՟�o]��D�w�a�e�Kra}t��
	��tO�6�x�?�(a
r�Q�	7)�OԷ�)���8�זQ����UQreo)~�#����d1����h��
�^�3���,vd����t��B�a�&;�.؂��f:X8�ܺ��3O��k�a���d[�'c1�m?�(�a�A2��*�s���h�W��AT-G
0MhfS�	�TT
�1�3
i�
�CQ!����}P�8�v�He^�ۥ��
�[�'�v
>��b(}4aAH���I.�YΪ;�����'8�X:$ #�1.ޮ	6
s����B�=� F;��c�V)2�wm��
}?y�e����kTA��P�a�!(c~,�z�%��j
6�c���U����P
QV�M��
-XMX�װ\���VMq �?��7�1
-i
���a�#%�Ϫ�tM�
"���8�O�WtW	k3��\�&1B*qtR9O��
%�<k>�->�'e� #=�6�W���8b%2�9�m��l\d����
g:|4�|a�6B~ch_��p���V��xZD��ըz*5�7ib5�.��Z�����LI}PB
�a
E�_�ͣ �K�@_b
�ҵ@�;��@�����L���W�Z+�8���������RC
p!����9�L#(_�?�0��
�@O���=�U_���,�������j\�]�P���
-��$�a^�d�#t��++`|�����b6}1}SI	D��
-K<�"��J����O�
T���`��,>eKG0ў�� �p�
�1`CȢ�-����
�v�?�KV���A�<M����j>b����,T�w*
-�+ы�Jr�+�li`�;�1
-f	�E��l?`¡�t

�:�AV3
F��jjy�N(ؑ�N���{�P�I��3�>��!�uP��qJ<��3�����ҺOi+�t){ۋ��d	/afV��I`�j�M��+
�8#0�""4���|�U�&�M����o=®��e�v���uؐ�퇱�s+��f���}��.�K::
����l�r���C5�xW�uI*�?4�xi:NRN
E�ub��*"	�䣤��� �0)��9R�ϱZV�Ւ�6Ղ��O�!�:�d�HҌ$G5g8� �P����߄�e�Hh������ԨD�B���b��Ǔ���}���0=�$�g�
x�.��
l�z��l_'�[(k�4����y�̑�<�
B��L�
�pe�I����%�A�x����� � +��D<Il:@�������b��
-tK�
-
�A���u�g
}��a9�s6>�	Z]���]�0�k�
y���FGZʔ���Q
VH`�>��ס�
p�f���*
-���O��m�1��q�7
1�ة�h�CQ����1\  5$�RF��3kY�'}�
(g��V��w�Ld�)8�;�n�Q,�|%
��>
x������S5��e����=�A-��`.h�v�|�
ռsA�-6�B�,��[�0���hV^Hυhޑ��#���X�K��:���k�
D�!�L�RR���b� ���Ҫ-/0�����ߓ����� �^c��#���,3�JɊ��[�x�p�)��Y�l����Yt6����5�Kγ��Am����O)pb�,�n�T�P��/���(9��]�T�c���o�4��J:��z��l�
����$�F(�Y5L!1y�=ҿ���H��o�'5�
��u(%�~�.��
;i�q@�=�U�nُ��(�C�lLhe�;��9�/0�'0�ts�Q.m V�
˄�9	��	ehmy���a��ˁP�PH��㹕EdFA���^�Q��3 d�/y�3�	H�3XY�=i�%�X�y�&���2b��t��>q2sZ@���
+]S�
v
�*�k���}P�ja��ԈS�|nw,Cz�t�i}:�9 Na� =�J�6�x
��@�-
�@F��~%��������8`���,�|Ch\F(@�5 }~*T��=��i��s��vx�O��ۼ*�(ܟ�*4֫�S?���g���7L���
���#LգFu{]H�������"��E��DP
- ���Dc�H��ۇ�ʪ�q+h���0b^��R

<��D�
2N�Hc%�+�~\����F
A��j������쟎��#ūjQ��t"�N7Z��R�j����᠟��M�8mNa")�

�mƬ�
����Ύ�B��}�sz#%]�e
�Nq�t�Os�Q�گ9���E��E"a�+$�PPP8L�rEz���ԣESNd-|_��D��5��EۥS��)�d ����|!G{�^��$�� d
me�Ѷ,Vk�E,��k�
KKpTOl��*��ak!�Hݤa��6~�>.�������4	��|N�	���[�ġw�����B
O�Q� 5yN�f"e��=�ۑ,S�X�C�Xg��"Zu�>��
��#cpu����ɄY�'G��z/[2fzu<�{
���A�����MO2�(E�y�,
T��^O���&�c��
 �C�×d)���+�����
5�9��$ܭC�w�)����� ��MoB=P
d�%��6\�t�#� Sqj�]IAh��o�e�4��2���"���6�S1BPB^�M!�k
[�_,��fv�ۿ䯲/{�fH��
�ة(�����f!�x��p����^�
vI+��qƇD�z
re'f���~r�H����=�*~��N��@��z�}(�a���!E�����-���x���Nc��[a�
�	p3H�� 	�7l��6��TX�d��8 /9�#b��YҕȔC߬��
}OY��Ɏ��=�õ��D��
-)�)�	�
���"<��C��K�ô+G�
V�b�����C!�];<C����
��IE����_�@��4
����
��8X\
��'�좃k+���̞<�}@�Um��q����Y�%U8
���
��6�
-��
 6���9�pV�L�
d�f���hRCE%�="HA�&x
v
�Q�?�7�l����Hj�B<��������MTf`��ov�e����U�a�LW���̐YM��aKN� \�u������
9�(oǰ��-u䠠��&�j�m�
���V,ҙX��"������>x3qo�^a@ �͒�t_hV�(TXs�@����%N^�U��
-�3�"�<��I���Rn/�;�Yl-r ���Ue���
-�}/_����bMP�%��N���k�x�*�r�*��bC0
��ro'^{�
l�y)��M�[F�m�rj}��
�b
Q`����!#�����قq�����6^�a(*���}%k��鰊��
r-u��c�"�uV5
Z�bZ]C�
�#gҜ��"
������,�`�7�9m��!�� պ:��
-���xvA�/1��Ҟ�Ĵj
��ҝ)G!%��,�Ϫ
��	�{;������!�Q�>��]��ǃ�)"��5w�
-B�%ѽ�
j� ���O�
�:�,����C�P`kKHۿ�����-������	CeLlj�lթ�˂]
-���d�b����Kd��t�F�$4�����$��|��c�*��%(��ķ6H/g}��h�
vA�.��� P��D�q\5�6 3��͝�ȇ8�:�����7�i5"\��SaQ�
��5 �B��l����dʪ��
���:
���?�ӆ
����u�Z�
V@�AK�V(�����K)l
WD]�v��h�]���1R���9�+���*u��RXy�i>򚃙8]�౒��P�i���2��6�w���e>�����T[v:�j�x�[�H����x�+ݿ�P����zXA
=G~0}�y�i�d*�O1�Q���y�8p����^��P�?�:3�"t��ʡ��8�/�DQ�_�A�fsle�d��8�h�Q[p����O�H���7�
���܈-wc�:��g�:��zK8����yE�g�@��u��#�x�4���7�,�
�(v��	�O G�zj���
0�w�C���(�}���%m)pۡ|���E���H%
�`�{�.p�@>E�km�k���T�h������Q�1��UC����J�qp[K�ͤ�~����
nj�6�����
M�L"F�#+��B���\AhP�$��0+I� qHM�:�Ѡ��È���0 �S� wSQ�� B%�c^ o��A
����ԋ�G��}erx%d�z���,QG�r�f��
^�]{
���>V3qY��6��c�$R�L2��ރ�Xs�Ϋ���"U�>�T�fl0l�*���h�<�4U�t)�����k���>�*E%U;Qc{xU�A�r�w�$;��
�mE�V�w`�ӷ�*�SC�9g*��=�
-�ϑ���l�YT
-��<�µ"�M)�%F�qR.P1Q��%��J�5�c3��1C�`O�
�:��ݪ���s �`ؙ��5���1�
Z�'�~��L��ΐz�\
3���(rF�'��@�v�9"��L�s�� n
L@
-��(@a�w/d�y6�-�,����Q^鴠Yd\��Ѣ��Z��
�Y�2�F\�kd�9�홋;DGf�P�	���X�t�i_)6�p8熫�
��uw����*
�c�g�8:�o�����=5�uI��
�
-
r"B��FD�G���;
�[��/��
-1��I��H5��ù��u�����
Pe�qU�w	�b��
�ƲO��BD�CD�k1�����9�_�g	;_��I?�0H�6x�2��a���s/c�꾤�W
z�b���� X

J�JLOt���f�
q�4�4�/ӈĆ�t����x%5c��?�8V�A�W�=��>:�����Ew���>����č�K��+�
�(�f������O�x��+��3:�\�����eԒ�3ޘ�5w�G����
D'�^oY�Gg�T��
��NПF�3�����F%ȐHVH�\��!���Q/�T��S8��R$�����&�X
-���c��
S<�P��b~����B�aY�>>��=a�~:�d�}����7���v
��8T?^�F�_�~�!F��t"�!slE'��HE��3���Ͷ����~*XR��o!�0�:���H�d1��ĭ0=t�4>�׽�����](�7�I(Mٙ�sAugX�	��8M��;�
�' ��d]B0����'�����V�D_i$�l��z�
�-�h�2�ؽ�<�c�z)?}�L
-ۻ�v�m8k�ֽ�����Fs�1D��"S���䢒
֮=7ɷ�9Tw�9C����F"#�o�f�c��#j6f�<�C�v����HR���j���z�Y��	�I����$�G��b�;\��֬��kI%
-Qř��]��f��BQN#"���j\��Z���q��
-ڽR�5�
e	%1��W��c��$��_�<���h�S�e�jT*�Ϣ^瞛Ѷ�}�F���\ia��t��tG�dt�
������ڝ�w��F�]V�Nɴ���
�1�$0�=.�]O�{$�(����{Ȫ0m9�d��!��gDx� '��T�-ANu��8�VP�AXOSXG��u,�\�yj�d` rsŸ-�!ێ���.`�P(XpE���8��HZ��o�P���Ò
E/

�^�H�pdp�~�T{o��s�]��DQbc����[��Bd|�g�d=:A՞&��TJ����y�(�V�
�蔚��!�q
�kU��xt����f�u���8]5$��{\�`&Wq�8�։��}�Hal�uG
�]�T�s��Xݴ�,�l����V"[@{�B��b�����̄�zT -D���l��N�m�z�?�����
hX0+bVi��Pm
-�E�i^fd0)���p�h�:�q�Q��f������
�aʵ����"9я�2��T-�7]�,�C�[�V�F>.0�%�F���SG�@�=���F�p�R1�a0��awRh���Ⱦ�]��P)�G�B*XB��= �Ć�X����4�m�j
�͋����d�W��:�ď?�
z�8���F8"1'1� 0���
���G�#�2��Wz�"�^�z;�U[}�Mm�l���X�p7*���E�]�*lTM�����
p��Wٞ�i����0P���I��Y�t� ��~g:��y�x]@

���%��J���`,���֭��k��D�����!B�o3��H�r������VHu
E�9�V
+U�
ʮ����~p1f;*ݭ,�\D>��բ쾯��JFv�N�����th����.1��ا
��?
�lѱ-�4[�6��+l	�>�c����f.�;��rQ��)�#�&�Qq���c{����/h$*�b�6��<�#A��=�GDo/��{�
܌��
-���6K�6��ʡԨ4��f�
�G�\����O�En�B�i�3���9J�,�{����R�Yr�y��K�%H���e*�K[m[ޘ�P4)7��*�N�ds^U�C
,+۵����n
� �Ԟl���&�-J-�InXȄҨE̺������;�}��\���A���ޛX
H�#c?5�`�
�a]"�m�9�AqM�N}����lY�ዾPJ��F%q��QMka9'`��F A����J�U�+�@5k�SD�
���pU��@E@?�8U�����)�*��k7���� �jt� 
�

-y'�
-�`>�P����Ř
-�#(�t�.�ȵBs٦!;s��Y����R�K(}6�h v>9�d
->Pq8��Z����ݾu��R����D
�%�M���u��'����
2��P�2Syũ�㝞�Y�&�
��`�E��D�S-R�F��8����bNl ���� Ir!�n(&�(,l�u�e��ս�ﶹP�|��*��L׃���@zQ�'���c"X�*!�KJ:=Ombi&�,�#��[jO!�vƂ_o53��ׅ�. �(j��X�k���2Cݺ
�G���VsoD�إ76h�{�-�㺄H�sJ��1[tw�l�s#F��FǶQ�$	��IKl��{�v�ꀯ[K�ȁ ��wo�
E�l�'|�ٓiH�΅X�yfTOB�u
7�Ny Ŀ
�m��:�a&��l|�Ϥ�:f�����ӑY�%(2{ δյ
Ay�=�qgm�Є�1
��s�(��v$�8��<��x] ���{\ �Ʉ~�
-� ~P|�1����X&[8`��p��!��.֧��

�Kg	�a��_������GCXY�
���8��_Ex�f
����!LJ�b�s�j�y~4b 
 ���"D����[TZ�ZcCOO
��^� e
��D�4aW��d'�5=���[P,^hԬ_|*����|"kl-k�PV���U|4���^��V��^�ݑ��:������CX=H�`E����l5ve;b�~&�V
���X��Դ����M�e+����
�ѭW
Cf�]�N��t����1u��|9�$��j��:c��
��Kf��APKAP;��Q���.�����4XOdFt4��Kៈ&P5!�'���~�_�8~;f��ơS�	�
4ԣ���{��!�ߵj
-Г�q��{�{^�֣�$C�^���M��� X
c�X+=��K`ا����B�k
Q��3�%`f� �:R~>��a�fE
-u��[&��Ue��*Q���{ߘ���5y�)Zq�~��-��|�P#B� 3����9 ׌7�r�;��T*A�/ד@'YS��
��QQ��[
'��%
H� ���="�@�튩t�x
�v֣�݊�$*�{�r�w�ٻ����wHX���#�K���	2"DQ�8�EŔ�X@#eR
���V�����4�LC��\e�k�]/�PO�ӑ.7�qA�J��
n2���ޱs
-�)=rn�E���I��
����ȣ�1�fX&L>�B�>P +��f
O9O{""u
-E���P/S\I����n�<���vkp#Je�X���i���\ǵV�
-/�R�MJ��6�8z[�YУȖ*����.���pR3������.-���'��M�#�����Ggٜ�� ]�u����3���
-�ӧv���Z�:��M��%�qi3�b���_����
5K����ϦBD����r�^‚�ؾP����
-c����~˱�
��sP�XS��#̆M7 2�prA�9@�=��UQ>�j��N1�5.u���&��=l–�ۆ�>��O�?�%�F�ش���Ӽ\�g{��g�%���
RzD�KP�RG���>Щ|���H�D����—��$D �O�m�r�GK�ۗ�yB�r�	8̳�^BQ�
π���9�^;���rZ���(�.�S	�<��3��F��&ԴN)��8?R��ذ2��="�E�t>k���"=i��qW��F�j��Rx
�z�6V�)���NS�?�Y$���Q�$�S�������Ў1.�	@،+� �B�3<��#"�*�����JS#F�#�
*R��pC���z�<����kDth>X�J����;��}&4�(^)��y��0)Z�
���
p].�p�ٴ����Y}�e�#
��*J{�EC��9AX{�N��B����a�5{��B��}�ؼ��{��X�)������į�q�ٿ���gܮ�~)mf|���if��+����� �١���[L�_��� ��n@Q�3���6�G!�,��Q��ڵ`����A���C��r���~5�#jo����ȊN�p�)u� ((�+
D�^v����B������K>����p���R�� #<�E�	�
�0�0+�'](.*c���s�3A�~Tt� �!��3W�8yg�"߮�t���[ [...]
-èX�WLbO �b�s@}<ꕔ� 4ճ�聶��iC��h�@?�~R6Vֽ���T
�%�x��,NF&B�d��wb�(

-R/����g�
ܿ#��?�Ss�(` j���ֿckT(rMKN�!O�)���:��(kI��R���‚�3�&�q
-x�ˬ����@����c[a�#�S�J
-t˒��W������#�:7_lמ(�,q`
�xMΟȞ��|j�{�
-S��~����1�ن��m�x��
j9���`[qP�"8�p�9]Ul>��\n"0�).��z�M�8�!p�G=���԰��<�_z%��~�������A�$j at q@��s=�I�
3���s��<��ļO�$C�*��v��
�)���9�i�:��WaI<糱���uN�Z	
����H��S<8��
�;���s��)'
-U㭁ſF0��#P/*��<�k����	Ò�96�4��Tz��!I�Vu��@	Ħ�Su�q��'�8�W�*S�:K-����Ȁ/�v����}��)�)c�k�=3����p�֐;���%v��G�:ơ���1X!�G����w���&�����)k��w�Ii�6
Q�Yߏ�L��Ǎ�U{�e�cZӇ������r����.�Y?�p�
��
-�~?�3a���`(�=gam)֝��p P`j�C��r�h$�HP�B��ſ���*�#B弇���

ԟr|JlE���O���|ROX��7%9���1x��դ��C��gWDu)96Y��2o���^	���ΰ�@9�3}?�o鼛� ���w%��ď9�{��3	�6�pPg�A]�=8|dsU�a
@BCU�t��a'#ꌢ2��S�;p %z@�� �+�z���T�׃$�V�P��]�O�f8ѳF5���O�o1ζ�ɳ,�M���Um� ��&��)ה-�� ��
��J���I_U@례F]�n	��w�����]�;<�G���20�h�df�oE�1[�Տ4��g�E�9f)��ء��3U�=]�-
-�[�F����@3��~෷�0�� ��ޣ���w4E�q����/�G|��ߢ��f��ǰ�_��h�A�I����G#�
�1���q�����)�i
�
xhN�v��DE�A�8*�p���JI�Ȁ���ai�
-�؁��2J��D��={O
Q������zvȱ�_���|�����<�2J
-��")��8+H�{���8�L�����Z0���|��,�R�<Bn��መ'B�z��DX�ȡ�G��q�c����|�|L��0�:
�ǀ�P4�, �mfb#؞1��"��(^M�J���;�e�Y���$o'â��"vh�a�x�-�<C��:����=:s�8����m*|�s{�d�u
�5A]C��s�W`�u��Y�5 #$�i��C���	-Ey(�x
�}�d��9��K���U^X�H�N��@�/�0b>E(��jIS�
��q�k0 ��E�V�p�m�]��)ɢ��Uc�뺲K�ChC�q�ym{�3���e�Z��l���#kOч�k�: �~���#���� Ӽ�f���p�kE�C�	l\��P�o
X�
���kc�D�!+4�3�ִ����*jƍ��
-j����hm�$�ڽ��.�}�S��^f�<��w�Rb[4<�jQH,�F
?E\^�{�"u9e$"�ΒX��IqZ���dsԐR��QV1ϛ`���~�j׎(�("B�
-�^a���
B�a�*���wt��J=� ���z
�s�B:���$k�\���9_h8�N��X)Yߥ�&*|g6/6H���q�w��#
-�M���MF	gc% ����Ck@
-_�ޔ� ������;e�jr�
Hv-. �_���*����@Ft����9"���L~�<��Ѯ���2�������r���"�Eh�Ղl�f��!
-�f��pt�*��+��v
�wV_�������'�M
�G��=	���
u,���
'"�)��~� 0�:�����'����.��{X�
x
��R�FS&+���x
-tjY�jF5��&/�#"�/L�c�H�y>��1 ��"3�E�T��c_#�AH�e��J�K	�A�v��u��
�~�h8
���a���/��ls�<�P*��>��^���|kDK �v�Yy���ev<D�8H�v�n&��E�o�
�
 ����2�:�����m5֛Q�0=
��^r�����a�
^�T�z>���J�{D<�CS}����,�Sy�2�f��*i=���
�l�*�oQ�؝IT�}΍���q��t �
�` u
-&�y�r?�,(=��
8�G�G[O<�@^���G��
-��r����e
	�
�J�B5�#M�ɐ �G�����{D_�A@!��6�zQ�n��A�KZ
��JH:��P9�C��5f4��d�B�v|������8^�Ȭ
|��!��"
����d�8 ʗ&]ZGTP24������#�
-�в�T��$ZT`h�jH�T�)e���'��|]S��0Xw���F������>�
@���&{ �����h�M�=�(��hۡ�W�Y��KW$�Io
�3��pS�G�����0�8�"$�,96��g���jk�%{h�4/E�[ԛ�*��$_s�Xs���d�x
�<}
���
�%4!N0�ۇ���0$o�@�/�=.`�}�S�ȨBMZ/`��.3�3�ϕ`Q
���GJ	�jxKb� �6�r#����u�#���ّ���Q��w�U���h��<�xBIL�G>
��~��C1d^�^,�w��W��+e��6�{��е�,���
ԯ0X���.<�
+�f�h_ �#�n�
Օ'�)�-��&��F����h�GĘ:Jpo_-T�;�T1�yrk���T����_��Cu�_�o�l�xs`�!
~�����:H^8,�������l3��Ր�bT���I��X
~>��$�N?b*T�����������#�*��P����)v�qfܑ��H��?�&��=�D\��o�R��<YC��BV
!��t�p^E#LO$rb�T��xTEc��M�"Ktv��_GH:b��
׸��	x�	Eo��_`D��KTp'��B���J��,
�'�h�=�c�)?��_QP at Uz���e�$����hy4�@[���te� �G�|

u5�
�P�V�A#`�T������oQ�I�>����Y)^(�
���P� �jă�c���ÊL��*Gߣ:��s���`�W�pO1�
-�"��υ|�1��r�QeE�$s��	{��̞_��o�0S�� lM4�й�Xq�J��W�E���
.}S�cb&�tA���©�p)a+�(����c{�(��3�^U�Ղ���K
��`�c���m��oQ�;����Ƕz1�z�Nb% ��5M�A��}����ѵ�k=�\a:�; �;7�,+
�
���苕� �)i���v����g
-�-u��%�	�7�H��'&�u4�
rv��Aq��P�N�����f���>���)�G�P�
8F�
-�
��l�Ǣ�L"��r Wf��'��^Yyq���߰�W��>!h�
y�^<Z`0�dRu�97p �H�^�z�L��_����H���4�?�d	���K�����h�|�տ�����_,������������_�����������������������������������������~���������������K����
�	���� �_f����R�Í�p�/ c�|5v!����;��<Q{Z��~1�ߢ�����=5�W�
�̈��T#�ri��(��a���046��p�{�o�D�Xx���ۊ(*�A���$X�
=��(�O ;�C+Yw�ta)�E{�/��Ixg7#���(Kj����M���8�5�D�?!s�,�l� �KD

�2h����Q�8SfD��
-Vq�=�lI����šy�����S�@R���[4gŎუ�^�[�f��v({ƌڀ���(��E�/�cë)��A�
��cQ�í
�m"ط0Ce1��>q<)e��4�'�SMh�x�;^�;AF/yDƳޠ$3Y��ɜ
-�p���+=EX
e&�Nc֛(�NL(5�(~��f�x�q��w�~���'0$�.TJ���ç#JQ_����7���F/�}��
u��s0
��q�+�=����e���Ǝ!s�C���iD� E�E�-Q!TJ�`~
��k��{��|A0��>Ӯ�
-�"�`A?�x��?G ��ϻ�uW��AO�¼�1FUU�Ԁ �� �ëދ�4��s};��ӂV>|�
-�
O���X���ݒF:�glKOe�չ�!>��*(pp��
�PD=��F�].�~�
3�
S5y+)�=�}E�%"��&�����M��z&���it�����v�;
؏?���C!b�Q4�Ѻ��2��B�aR���A�F� )Bu�&���h3!a�$�E<n`&��J��(&���R�$2�[���=������#l8�.<x�u|<��"b�)f��D�$F�c����/�-4�$^>��{lB�X���@|F��f*{;�<�wz
iVq�9��
�(��@H�E��3��z��*�d�̵U�<���?�����Ȧ/ā��[�^�40���;�;	J
-x#��Ž��`П�9$��2Pr�xS�B������s�_�@׀�'�| &K�
-f	 7{�݊}0Z��b�(Q�EҼ�w��!̱�7��H�
�y2�(�Go^i	�� ���y��ej�Ol]
-�yJ^�9�<%��+c�8O��ʗ�;
H"��b�P�5gbJ6g�3����f�A�m��P��"&exŻL���1S9
V����^��Z�C�����
F5��c�VN
{w���W?�Z
k���`���,��g�����m�؛�LV�g��g�,q~� "r>=4�[#Q����K藞i�O�m

�(+1�{�a���[�
���`a�y]7���A���g�M
-�
/�3Dq��,Bx͓8 at J�֖Sx�nF����J "^��bZO���,ٹ_\zR,�=S��0�b��
�+�V��oA!�V�ΚX��"�|
89,��Y0��}��3��J��*�0�k�&�

����D��4�({j���[AD�LC�6"
q�!�
�C�&JԶ�

-�6�h��x(��ȯ-e$Ф(
W���e�F3��
��zC~>/�Ί\��
#�
�P5	^]+X�D��N���
r�f,�
gy
g(r蚴h�k�@%�,�V��y�9hNzO�-���)����  ���F��aSn;$P�qX}��
}�{!�!e^Hk��{�c�<u���>@�݄b{Oy���zi�;�ڷ�H,�݄�kn�4�x�"J�S�ԔgXms��17*��o�

-�B��^r�=<gx?H
��R��5���&Hت!q��Q�|Z�:���\�g�m�5 ="4HW�1Ώ(J�:˰^7{�3Ƴ��\�,W۬;��qj��=IC�b�LR��t�y�`��
�����i�7<I32Y�Z \�]��%�Y,�0�~VѫƗp��p
�@a�T�<?c�=jr�) �=.�/�����@y2�N�LU�v�+Օ���- �B͋/�$g���F
f�����B�
������]��۱�֙��ю�
�Į�aL!
n/	z�-*I[�|N��*��	��=!��Ԁƺ(
=p�9�ҵ�c9�����g<
Xw�4��P_[($V���Rق�_N�`����;8`;
-R��jMb��
w*ԋ�v?BUU�ZZ� �}F� V�5��d��aX�x������S��E�t�joQ�PL�?���
�9�����Q�R�s at A����
w
��"��Bw\
���y��Y�)(QS��xM�|�{�:���A���{��]�
ͤ}
����}P�m�r��]�%6�M~�='![Uש�Οµ�@�~����	 lT�q4�o#��^�
�����g�K��bǸ���nV�VV�`����&3��NT�Ip�w����'�q~Swϸ���E��sض�'V������bs#֕�礁���
-�w�Qa�rB+��6c��DT�.�(z�Du��v��$F�##����'Q���߁�'�s����0���ܻ �.�_���L���ۧ�zg��
ρbf�r�Q�BC�~ȭ�B5ÊPQU�VI6K�ī�@�0�2!`�W�'<����)�,gu5/Hiv:�%�.�ZR�N�����
Ώ��*y
-��+�-�`�u�+d�RV�It6�̑{�זͪ�cM����ي6s+nZ��F�<kYC�`�j͕�u����<��#��I�a���	S�9��d�7���CC{xT�c��\�|"3T�
-��z�
]���M :�m�@�'��{�tA@��|5��H�S�NLJ���&a�b
����8󸩫���
M�e@���1�5e|O
:�!���P�ޫp�p{�w�F�dv�{�c;�+Qv�Ru�k Ff�ui ��
-;�0�}7���i��j��DžR,Fra8����O����q��q���EH�Ȑ���3��'^�H��i�ǁ�T�
-Y�fB������#����|?���	+�����ԁ�|5�
�i�=팰c%��1�io^	����
-��y�V�

v�ܽG���E��2LG�iXM���v_,�=s��<�$��r��*���Yr:
-�n
ɔ&]�.
�y�F��J���XV���W�l���c�lN
5~����^Wv"'�h^��
Zܣ��
\���›C�I�1H+�"��`E����Lzh�c�w�(�B)t���۫췷�@)j�kh��
�2�:���"@
A	N�Γ{��� ` e@
-�
-=n^��喇,��
�
^~��ow���c�5�i>�d
-��@KK,v�P�\H�u�'R;�b�I���{S�>Wz�<���g�D�P��yL���b�[�ch�#�����K�6;�g"
-<��yt�u%��#�"
-Er��4��
�X�DT3�q!�Qd���J�5��]�WB/���')F�R(��IV�`
2"�B(F<.3��1��~T�m7'�WB�~�8əŵ�7��*f����>
�ÄP�]�ߣZ��4J�T+�"X�sd"u�n�I &�eL5K������+&Z���i���Z�`1��[OG�="$��e���L�ׄ�~4;z�[���2:����c�㶶�
q�Ѩ"]�߃,�6�Q��T�1	y���+L�P]�9�GAf��߲3�����P;�!��,�A
>����G��*C��7{�p�JA
�Ů�������xb���먘�/��t��
����s�8螟}r�~
݌
1����of�~��K��:�),���֛GF)Q�A� ��
� ��Q/"Ҵ�vx���C��XF at a2b��M��3a\A0�Gɉ�$n��;AH-JZ���>�
�5U� Z%���"bM[v�Hl����<�y���A�!�G]DgL�"�a�
�^�\��Qh9��xMSb��]��@;�*0��[�NX��#-P�Э&�ڽ9`��
 ��� �^=M���T��_
�8���
ȬX����Pt��w*p]�v�K6ɕU6�{@��2����e�Lݢ��Fo^GszM�N��
??��
�Ht��GY
�����
[k|@���7B9�j|��(

㌬6ul��^�-n�h��/�
s~
x
ߝ�1|
��O��b3��#a|���t�A�@A1΋��ք�l ̺�Dޏ�e:⬲dx��̫�\�vHt��غ��
��H������ޖ���9��%߂(�Ӎ���
1�(Mˎ�Q}���@�EQߔ{�HKD�a��!�ؗ�av��.
	63����`"�&8 �cM�
-��} ��9��+��I<���<�<�$?t��j�uڦF5�Xėb���s!:�6���(Њp�W
����l��j9)�ΚHQ��)�
��
-�E���sl�,hXa����@�Q{b
S�ʔlie��а?�*fDXu�9="ƍha��%
����$��/�X�S'�m?$Y�0�{���j�[�kT��4
r|� �
-Wg���Ȍ�4�ي s
�>���a��� � ��/�!6���x�K at cc���j(C{V�T��r "�@�3�6N>�^zW�o=��nG��m��h��Ŗ6]t՞��jF� p=U`1�I��u,��fC��
�f�,:�c�V �PO$j�JG�
�3�ڲ�rd(�a�
,�Dװrn�0�܃���L��R���'eB��x�^֨Q?|��NTm��1v�a��
^I}3Jԕ
-�/���b�� ���9/2����|?��6,�(˅~җ��Mۻۧ;�ϙ�� 
Q�}���
Y��ED�($.x��g��:�8q� �ĕ���M�V6�� H:1.���_�'��}����	q�T҈������=�U�hp�� I
-"�GD��+�#���5���q%Q�	Z��R�%˯�������[6���Zhb:x����^T�ҡ6H�-M5�!Q�iA�=9~���#U&���E�
���p�0�kWJ�8.]~�u
-|�`-
d��Q�+�m$�R:�:QO������}�n6��=�,浜�S�ʼn+��y��[$yo����
ȂX�!u�D�����T�!�}���������z�m�w������91�0��~�d��~�ē�n�}'u�c� fH�ݷ�Gq>���g��J���x-�x^�Ļ�<��=��<�vn)�Df-F=0+�q��]����~0�:�{y���\d�G�
�h���o���؃	�����އ����}�����Z�&_�B?��H�6H�?]3+IQ�_��3����/ke �x��q�� Ath���g=�� 5�{�Cü��]�։��wg:��;n
���,q7�a���[���qh<Tج9x�;�U��	 ��r*��B�@�Ta��T���c}����@��<����6e�FG��s}�i�[��~���R��ٱ}���r���v�Ex�E�Q4g
�r�s����i!��C
�>��w�H�n��ۃ��3Q� �x;�(��HO��J�
-1G�G�Ў�
�
v�Ze�B�|�Kb�t��S��t���SUOi|���LᏋ�x�B_� U�0%�Œ��}_l������cCO��%�C�M��{�����te���6���C��ѝ ך����挶`
-�W�����droRa:z
NKĠ1��D��B�.G�{j�Ņ�E����6+�B4��%�~~9X�#�Ö�Y�l��p�
V�-��O�A �d�j��*�>�8}�$��@�
-!�P�w9�O�;��p;�"~{����0�P���v
�),>Y�˴T����[o(��:�W�  
-�EnTؖ����!����7�xQ��N����{�kR��4�;R
�u�b�q�r�Uڛ��t�@�
��<���߮{��-������prwG �Z�qv+��1υ�nP壌�.�뎠Q�PLۧ	G��
-"Q)�f�!�}���
 pOpݴ��	����2�
i���0D{S�@DF�~t�d�{�^S�+�iR�E�
�x��C�n�ޢ�ޢ��E��j��3���`qs�]�Yl��2�o1�ZL2{7��
?
Ї�
-29`�� �L�Ht!���sH%�Hw�A��	
�,�> �{�\���s�p��i��
5�D�X��H��W�a.�q�B\j�z��� Q*C܍J7�̱�-0� I*�="�P��6�
&�=�*�+ƭ��L/����~�@5M0�w���hr
��1,���
�JX1��t��<�{H?#"��u{<����1�9`�ʃ�����aF&�S���v�
�
L��x��(���@|��AW�Q���^A������
n˲l�{���M��d��tk�V��@���_���
����o���]>V�ȉ���1b�t}D>

��*��ޓf��1;���o�O����="�U�L�� ?�g
�4�����Zs��C��f�Q�(�scAg�C���s;p4��
�]t�Y
��wݫ$H�
9o�3���^�=�4����^���@�E�%F����iA�>�jT[U�+7�腓@G�[�Ow�#�:)���Y�F:i����d1y���
�<Gr�=
-1
I83�H��mZ
N\��v�;sTRb�*0T'�'_�B
�	e;,��tA���]�1�B��������L�f��o�
-
���!-�
� �\ͳk�j�=�;�tB�$.�B$�����x�{��~O��ʞ/_b�9m���%�-& i	(�I	B��D�I�ݯ�
}�%
mOx/��O�jt��4zT���}� �BO��v{[oQ�
[�ir�7���u'Pܚ��N���D{`�����;�ޫŴ@<���Ѥv�a��c�7>��2&̖��?���@A����
	�W�s� '�F�4��ٙ���w�O�!tO�|��o�‚���T�� sg#�Pܭ}!O�f[X��(�Nݮ���̃x!���
)�M�
-�ctb(ER:@��=[
wq��bF
-�F��CB߶�({�`p��f��Va4�s	�2U}{L�[��(i2�2�T��<�A�7v����X���h���4�<�eQ-�
�w<�is  �_x��煔�J���C�"��y�'=���@  �P�S��OQ�,h�,������� d���ٟ?) �����K��=�(�9[;3�ݼ3Wם���5TY�*M҈:�4
1#g�Ȟ�GXT��h�1�*�
c�f6� %+�{���q�=�9�$M
�
��n����ɒ�2�9���=�`�
q ������qFqR��ȝ����Ԩ�1�xBo��{$�j
-���ٕp�؜�Q��L�p�4'L��T��Zs��4f�Z-���ݟ�%⒠�];�r��Cy�b�m��zj
->��e�B�Ȉ=9�+�h��T�CDC�<�z���
 �H��Y�qE�N����'�9�ْ��a� �n�H[ߥ�0�P�ơ��	���-���!ύ�_�0`醎27��da���@�N�W.�a���6�R Q�F�>�M�u���u���l��
��!}����|u��_�Ѽ�'����Aa0�W�L����ʟqks�w�h���4A�SUzAUۊQ��B�unh�RAaL��0a
��J{�
X�_��a���
���ʡL�
+ �����tE�`H�g�����g.�h��+���|~�
�����B�x�-Ϝ;S,j�,�[uZ�"��@$
�ί��)�Ϫ����9�
.�M��hS�Бq���[�
�
*�L&p��q��w:.����^[�$�U�Etu֖k��f�#���gU�}��x�g���5&�
W�x
C�1S��z�Di�LF p(�#���X�U�'�V�=�_��f�4��:~�}�y�
�ىc����}�
�O�pX�ǁ�[#
%,<슈���x�:�9!�t��y���V�B��ƃ!u��C�\��7q4��l1%FZ��yS��.0��s�A|	���ɡu`�yo�FT��fϝF�uͦ<
��Cd�͛Ī\��H��I���*U��iK+i��΢`N)ص<��)�Ge&��'��u Y�
�%�gjC�Q�P2f�@����qj #���n��@
~m�]ñ
6���a>PЊ=R��Ȑ��Oe����
h�,����kDDQ�P�
�4�)v����(ׁ
-�w��GKY�8K�#’��T.���uV��8&9tm]���:<+'��|�� �n�@�"�?�ϧ�K�֑�k�����"�:�ߗ��G��b�F����Y#[��r�\Op��|H'���An���<ێ\@�7� J
u˦UQ"���yq%sAX5���+h�L��I�&.���^�#�GL��V�
w3��#o��ـr}vh"��h���wK�{;�b�
tB|'z$Җ0�m�p�\��#�'	��o����Q����ݣ���^ʁ�/
æ�aկb�X�X�Ř ���Җ�w���3�y�ޡ'�PÅ#z�0P�M_uQ�,%=�4ה�H�Ì� �<,+D�=%"� ,��
>�C� 	��:�3C�e�Bp�R
�-(
-�N��a�5��e�##���p���v�W;�B��
MhJ��X�6[�xP�a�IF$�v�=ĻƂŻ��P�y+�������f��B"�R����]4d�ʚ����ԧԗzx
-�P��q5Ȑ��q!�ܒ ϸ�D�
�s�����P#�8�G��ݮ8޽� ��
��?� ���)�7Ÿ�ey{��4
�t�'U�&w��W
��S�,p>�o�U�)b5�|Q�&{����t�r��}EY��+;5�}�{\+E+��]���
�ۗ
-f;�	���S��X�ɍ� �쉝��]ѫsU�AT΢6-�d��a�D<�!	\9r/4��)�ߥ���E�f&� �
�l R�Ma�y��5�&�x�>'�^}�b
�PyNl��~��!�
�`;�n�C��~\ d�q�*�ɽ����t����5I��O���Xtw��ٴb�����ԝ��v����u��b�
�m��h'�
�c~'FC��*�1IMȶ�2�4,�9|��k۽o�
��L��c�%�5]_#r��iqU��ذ�������JT�9��1i��€���_Wx��#cN؊-����Y�O��B�*C�g]�]
dG�x�|)�C�y���Ե�ۡ��")nQ)����},B��y�G���l��
$�-+�:��� ,D�������k���
-T�^ ,
��G#�\v�ΆXn�H�	��0 ;�2�gI&Y�cI���|^p�"��j��&}�vn����N����0J��C�*�����ߚ|�j�EC!,�t��o,�蘁���Ϻ!0�v�@���v��U:bW5$?�c��Z����3�!\��+0⼝�;A��v��1�{����

�LCQ��z
(J$%<��K�k:���I�	�y��5ٓJ���PhEm���H�T����
��0)�IrV����=�ϭJ
W
����4
-*E��(�%���j�P�T���
�v�XmD
-gF�Èv%F�#
�I�h�wܐˎ+�\QB�r��7_2�?�R�9[���D/�6 ����~�P=����� ���p�z�����9}�
QE��&�!-�H�)��Ad;5��&���9�2�.��*~BX^��h�!Ǡ���S�+�Z���V���=۹�Q�͈j�
ؚ������+'�̒�p=BK��>T�N�D���?��m�z%=ϻ��:t|���a��$�`��@d�" w�z��8��sLiA@�!���o�

dշy7_gZb�)'C_y���I�� J��+
����&��R��"�[��o�$x�M>!
�L��
�)��5��ﷂr8���_�XwMJ�k��g
���^�r�0��I-�UIUP�B5��M��i�2"n�@l��|�{}��g��>^��1��q�V4�o55{�c5uߐ�e���� H�~��D
-�
{*��7��W8��et7
kYO��Z3gʦ�X�h���"��c
}�
�+��Fv%R��M<�Z��O�jc# vZ�

�uTƨ�^�%�~��x(*���z��CH�U�����}�����P� �ӣ@V�*�&W+�
-&vK�@���q e��"1�
ql�r���_g{(G�*JC��_��=�k^��	l�Ԧlߣ-`�Ҙ+��2
	3���g�jQ���
 �g��[��У�l3��o��L��=�)ޛ�Ld��%��s"�����c��3��X�������vR�"V�X
����pQv���
�K�zZ��AD5V��)�������T�J�e�������r������os�q�)	�y�g�A���"y�Q�"��9EW��9�+��a@_"��������
��& f�
�%�R�`��k�9��>���
��s��l�=>���RF]�׏�gi9B8hs�����A
-W>�`@�
����,�X�/���ר"x��
�_jL�q��v)�%)�i���Σ�@�j]��i4��Q�ʛ#~�&7Z� �������>���*$lr����^�1�g"��!ѡ��K�_'��G�n�.9��=&ԝ	)����f�-�DV릲+htG�d��;l�z��L��X����v�
6�:�}Uf�+�h�gqPU�U��ISZS�NQ*�Ԕ0�
R~
*��y������&LS� @��.#�g�QK�M�� �.	�
�� `-R!��U��i_g������^qᗻ��5�Gus�Z=_m���7� aKNt�b��x'=���y({T�ax��S䝍�0�
ė4���\
$Ȟ��v;Κp?G!H�~U �M�0�j-G�OG��<B+t���T��&�E�=�IQ�
Y�j���� G��2�b�_���7�=���ڗA�Jj��>ݙ8�b����
�B�yGql��<���:)�ΫyD����P߼������O[=�
-�R�똬�>Y��j��E����0dwQ�DD&
-_���V���9�<:(;)x~w
^�}�y
Y��z%��E�
�#��
��x�`�
r4$Jx�W9�%4��4ڽ��dVGM
U�tOͻ��Z���S��d�ih
5˸Pǭ�ǭs;�	�}i�V�ె
-IJ+��H
8,�x���I
F��Ԅ�/!-W���N�T��Wq�]�E@�|z�W
@�K����!
-H��k�5��;�ZדZ�(��!�^o��n�C�#
�Cmcxx��u�l�TC
����U��tiv�N'!—��PJ��a�3���P�賖�T�xガ�*=Uc�MVN�"��}{˾�\uu��ƹ�B � _V����_��cgn�*�	i���Z�Y )|0X�a:^=x,3'��i�~N����� .,x0I˪o��
Stё�=��
I�uԱ�P�
I�+ݒ|��S4�C�j���H�
�Ɵ�����S����~�p:��:�����E������:����f|v�����jQ���7��8���EX`0s�x���Ϳ"S,A��9J� �4_
v-��
7
������֬$�
-{Бf^��S.Ň
�
AT��O�}
<$��3��2K�JP
5��p��6�,�I��KU�n��F������a
��t9b�QM�q�
�|"
;��q��nhT-���1�<t3��SY#�$
5~���<��`��
-w��`Ϛ�v��!�8j��b^^Bmk"����)�oKqd0�N�$l��_�
Y$�KXnY
����)�OE:��V�a��[��1�X��,�
UI�
H7ȳkLxc� �Y3;�=%:=�i�`Sa8��;�^��y��Lە�?
���=?q���/��YtuII�=��2%��Փ,#J���2�X�o0u=za�O�[���v�S����>�ǣ

��kNН��aQ��=��W��ю���?��0��O�u:I *v�;�A�Ն��['�8ƪ�48CW��������M��A�X���)��2��a�}e�D)OC����4Q�X�T�#�n!����)����5��
��v"��%���=���g
�W��m�
�D
�$O1ʵ�G�'��4َy���_!�-v_��{�
1ӹ�z���
�
g�\�[=�.��1��g%"�D����
;�}\2蓶��UtD�,�"3�=tj/ٚ�Y�z-!�M�����۴5ɚ�#�'S0M~ރ�)�Q�G��a̘���n���z
a�"1���FOP`K�[fc���,!�Q!�
��\��dj^Z� ���Ll�c�*3�Q
� "�����I1�Zr�CtXh�`�8�
��
M@�+����

?��3a�.#�v�b0���f����Q�Q�gj�}+�3B����0���ˋ`����5	w;�,ƈ3
-E��1�P�e����>~T���������އ$>C7;�z�lua
S�<�X4L���裈r"
z�c������z_�DdL�\ם<�X�CQ��
t�z>�,^�]�x�K�Ѳ
-ϙ�J/�C'5�#;ґ=D��,���@�Q�qL�d���{t�0�+�g�j
���3K%k�:���Z*~U	�,�*�<4�xU�����ɑߝ0	t-
.{
�5 %T����@��*P�
-˃u���I�{�t�G�z���+�Ҳ�&�;T*7�(�WBZ��Su$��A

-�x��֝�k$pn��~m�</�ܬ�^uG�T����%�:�{Nt9�6Q(�_iQ�[�\�h�2 �ը��=�9|��
wM��
�452��$4��HQ])@7[�i��^��TSe4y�;���+J��~�!���X]���>�gտ�
�� ��㼪FT�څ K�XN7.%'@�W�R8�m��lR~ѤmU�i萊��|#�C_DI3P�j
-	Ο�W
����8G����������s/����2kU��6J�q����5��m��1Q2��^�}=���u���}&G��m�5�x>9L
-ˁx���iKY*���|
��?�
��~���Ȝ(��RF�0���(�]Z+2���e=u�B��;m����:셟0Q�µ=FIl,Q��6�nG1��;�;b�e=źv����M��2
W��ƻ���GZ � �
֛��� ѡꙞ0�Ln�{�rO��/�`��<\�*�&�+V��O1Ƚî���1q��<�P���ڴ�D����`�p��ES����N���F%���� {�ZC��C'�&4�S0��L~%�Gџf#���zL��4?�`�����!`��80�?�.L�����\�
���*��&YX�hr���r��|~$���D�D���4��K:�?��Í�N��p�a��XBZd���K�ݟ�I�da6������L���z at a�����TC�x\��<�����Qcx�~<��#ݎT{���
���Q�+�-�����y��{
��|	w��bV���;�qZO����`��q,(�zW�
oHכ
��������aI��4*_g&�
H [...]
,�/�{�g%��[Ȣ[��jƨ@�N� ��>^
-�6�jƥ@�r�ܸ�����bO)�cI5y����StY�k�]L_ at h��^E��
����
-��4�4��d�	<�=+�T
{'���e'�����E+�.�2E���z�� ��<Y�1���*\��`�ÿCXr�Zl���
-���h!GN*�px���m`/Y�#?�<Z��b�/�㷝�&k ESxd_���
-
-�ک�
�zގ &T=c����@)�@����>�A� ���;|RJK&�(�/��;΃���Q�j�*6��� N+�+�2J��{����D/
~S��?i8�fO�
5��!�}z2��r��w�F����Ċ���<�]m9=�ɘc?�@���.nϖV
�p\G��	��ª-��	f(!�NI+-ѡ&s�{
�D�^�#	`7W���0�}���
�9
��x{��
o����������������
B�<-V�Qq��Sy9 9��ƫ�(����ߊ~�R��:����=V=�c���!�Σ�r�1P9|1T�Ӂ��?z
'ڌV���_�
��#R�3�3&���#a��`zMP��'���������cx�}�����n�E(�
[=<+�}�L��u�#u�ey

4r��_�|�GN�橄 ڿ�+]�J��
�/V.t��
=�8\gM0+z
�v$�vrs��9hC~��wT��\��4�����o
��wW�\�,o"�x��c(2G��T|���Î*�K鑻��j��/:��|�� [���@
����#h%������{�1}��0x~���k�i	"e�'K$YR�P�I�x�i
���M27S;�.�"�3~Y�0�h��N�?��БP�gS5���w��<����
0*pl�Z� a�����^�P�&}����cFx�i;��P���A,C@
-
5Q�����F�����ьc�
5�SY
�������V;H3��ހ0s�|�}T	�D�S��G�(�aٝkI�Ϣ30p~�`F��7L�����]�a=�
nP�7�"�����0��H"�>#<�Q
�Qr.���
J�
�$H�|�Z��~X���t

��|n�L�4��
jF}���\�t�U�ޟ<,�`@E��2���W�렡�_,*���Vr����g�8��W�s24��| ��Dw���B� �����J�6��ND�����ȊS7ͳ��e��xoG��
->�u����Q��)�x���
��A��

Q��{!�U��sd�)<�iE�WJ@��0�??��"���&ߣ�]���\S�*'ƹ���x2�}*�>EZI���N�A
�e�NxZ��:�c5�
�n����?|�ó�� �U����I �v
���g*W<t'ޛ��
���wd�$ jq>�(��F] 
�������j�
���`
��L�"�
��X��k1��j1e�?C�'=��e�\�zܽ&�P�
fWA�� �Q�JB���f��#H�^<ag󿏌^��;^%��G퇼T�y$�08wv)�8�o�1�R������a���N}h�j0@�3]q�>֝ב"@}��G�!���W�E�wy�`�Ȅ?!j��
-`��r�LJ
�)t��(�g��&_���Q�@؈g��_�,�ٖ
�6��C.��H��U
CG�;I!�&G�\�s��:Jz��t�gq���Uˋg(���3*�.Sהi�d�`��H���,��.�Ù�#z(���σ\�zq��
�
��3�1�0����c
�� Ă�TjD�r�S>a"�8���}4��z(M��܎�/��Tc��N����v��2��pV��}�c��kZ�
���o���{�P���kh\9�ۇFj��5֍�h��Rߒ���tQ�ϿMmg��-,����7*ƤD]-m_w_���y]�fdh[L�FA���

x��D�'Z�#��\\	n��t�c�S���j�EVc���CL)��_��cQJ,G��Ȍ�
-�����he�B�jy~��W�O��T&�ʸU�:�9ћ�(ȍ���՜�B�ieP4��ߝ�]�6�T=0��Rs
-
-���L�=�z�Nu�|�@E�u���2�6�N�
T����v�i;Σ	�õ��%��Y���<!��<y����v�%1�8-`�F4�J�*�� �m)��
Kg��Q�P)���҆
-�Hш�Dm��+�Ͱ�E
������U
��c�?��͵b
�{"�槓�ۈ(�����JD��{��z�|
]
Z���\9�%�"�D�d�<����쯙ޣѫbR�21-S ���D���#��bI���~ z��P�����
�o
�FF)S����j7vbT�#@ W�:4Q
-g2f[�L��>w�?"��wՏ�(�V�����b�P��
�
L�[-M?
��}�2�a�Y�>�h��Z'����
��䛖\K��fh�~0��
9�F(�m�DA�v�~D��;��s��(W{��|U3#�֙H
��E�7����+�B_���w��
+�
яެ�K
A��^\�B�A���HЬ�3E����:��aԼ�9S��%�ȥ2���2�Ļ�Fw�^��ǡ�
7
��N��
�c
���͌wN~��
-
s���G
��m+�˯�#�:(�R@$�M�m󝄖�@3���
L%���{V��`{����>�X�
-l�X�<�����>�K2�3��:�'�O��Y�9Z] z�Gh,Ўv���5܅y=g� 
G��@~ꨆ��`���
��*.�]��r�f�o��
������2�	v�8�kGQZU��;��!����L�Z
DWv��g�Y�e�8*��� }%h��>Fa_�DʦE����
�%
-
C=��k�r�#B�21�h+n��/r�[�/C�Qw�
�O.�@9��U�r�6�
};ڊoE? �K�/bW�G}�f�K='�5P9�a,�D�#�QJ�׬�(u�TÍn����6��;�}Z��k@ɱ�^�Ux��}�r[�r�:�-Υ+?G���U>��������B|�����[]��0>��m����H>�a��##z;�s5�@	��D$k
wO6�
;�} ]�i��pt�w�kdl*�}��\�-l��h�i���u(�
�Q��5�g�OK��5ˮ�x8e���A0�o��(}
-P^^�b��B
��7��<�f
��F&rlG�wՙ�@��J��ܠ�qQE5y��QPK3�[�"u$�2���b���쯄.�n�
�^@�QO��/<דE
�e�
��ꪵ�䃋[A&��
��w�_���{�d#�CŸxw}d��S�h#�j����~6��d#�_�}��u���tdi����A���k��1���3L�?���W����E�t�D�}�\�)�,t��.�x���_~�x�=ԊO�����X'MGT�oi q�(�����D��X\2F�Gx���ߣ4�
�9V���Lko��z#f"d�k���<|��t�܊'�c�[t�{�@�V�Y�^μ3+}�ޱO�%�c^�XN?�aLn�
���,�6Es�K'����f0���{��e��"�X��?�&
<z+6C�5d����M�x�
�{��`E
�����H[��Cל�w��f7����ev�'�Tu�C�z�h����Vw�	SM����>�+�-#U9�F�nG�{=�l�
v�z^lt�3�}�b5+\q�YHf��w��Q��k�L!�<�����_e����
V�b4Y�-h���H���rGD��(�������Qz���Eki�I�#�o��T��I�
0�;V���'�]14�}�G�\�v�#�G�Bѡ�U�8
-@���Gu���H���M���Uak��?�seB�+?��\,�?�����O�
☐���;�
; �b{�tt�fX�& ����� ];�G��Nq�,���q�>�z��em�-b���i�)��) �}���������{�Q"ۙ�]���H�
."]�/�
KU��j?D�� �
����p�W�����[�J�5��Ep);
�Ü�-��݃��z��%��"kCj-v5�{A���s�P]mI'mr���A�-����nG-����zߪ�㈚S��%S�t0RDF�9�Jp�ec��UZQ�����v
��&O���=�bl�
�- ;���i���O(]^�O����ăyeE �(�^�.
-��PgL�g
�s��(
m��~	�_@̶��
"V�;=f�����#2k�����G��
?9�� �W:�J޾b�������R'�6V���5-䨏=
�u
-�]�o�#V�
��<k~��_d
��4B�Y�#

8g��2va������T�>�$
�ZΤ/��"j=���†�p�?��<������G
S4

�9�3������,=$cnI�'Jy���`�Q1�:�@(�!�)�'�
�m���n/�^:K�5��q�C����ɸ�+�^�2e5�͵��6�gğ�)�n���
��q�x����+)b�@��������A�m�'�Ow��>k�r��
-�|��@��L�����,����_5��Jj��ԗj�	�T{9���h����g�[�Ҵ�=9�
��V�߾L?��z�倏ƚ��w����[�����C�6S����lͳ3�(���,�E��c0HR��>�����!H�����&��'b%b��D+Bc� �&�<_
M�
Ԕ�#
�:4�;��+},�Q�^�wJ����:�г��_��cl���*�PRݙ� b	UHi2�/�`���9��|�#��4iR&0�<AyE��z�!�{��>����~����}vlU�g�>H;��	\e����)€��݇°��M�"��QSH�p> +��qB|��c�����;�F�����ŏ�"���7���߹~���\V�"��K�d��m}b�9�Q�b�2��?6yQ�����t�=�4�'�������|*K9���0�-)��#����]����}%2�wr����<�q1��猸j;������\��
-�q�j9��d%Yh�
)^( U��yRO� !�`Z��$?�7�1�!�ll�\���s"1i-;4]�)�8j&��xgz����j��aǨ�\}�8C#sۆ�r�T㖴l<��am
C��N��xUֱ
�2@��ːB�> �(Y�	�;r��?�# *��G�Jt#����}
�E�Hd5yC
�/���#�G^��bӢ억�SS`ofD���|�Qj�@�Ҫ�(�
3�ASB��7���fA�YǍ�A%Gj�_�-���,�:
��
�Ӓ�J*+d��MڪU]
h�ˁ�ICk�%�2���
圿��d�,�g�kO�f�!�lg��׻�
b�FI_��q�
�UW#�f�kX�q(�]�{Xc���e�
�HG
��#5�,����i�Ȟ`�&z��"���J_N�w�8@����V�]70X�������")05�j�orWH�T<�ڱ�
���3|�ԃ��Q1�Y?��Ɲ�Z1bL�î��#
(TR�"��G�z��ܗ��e��7z�V��yc�p������?�jD����{
+�	&��Yˌ�Ȓ����V>4Y���=x&���h��X*ɻj��6Q
�!>��� 3���康��*
-�%�ķ�uhM�#��\����Ag�&�������}�9�4G�~I���ʄ��e���#��
s�r�:ѭ{�u�tQٴ�&鉔��b0wu�
G�
g
d>��F��i���t��GqJ8�]�ۆ
��Ճ���1�:p��e�@�4u�o��qD���a�Wj�(����(mj�JK����
��&�/�2u�x����Pu�P8֫�6�Sp����b�
x��9z0���g"�?	 ��D�;�r�
��+��
�~�N��Y�߸_)���G�����A&����Qա��̀��BY慴�{hU���ƍ�F'��_U����C�*��?��4�5���4��j:��8�՚n��(
�7������ ��(��(�}���� r(���4 �A�Z�	��|��f��C7�
-� �a�㡢�~�3�k��K_
<��qೂ
]�
�����^f#ś���A��ʹЊZ�� dGB��>R|x\40�‡�
�㚙���/��D|	qT��;#�֍�8zӨ��|���G�
S�z��T﷩�����eK��sa
z��jS��
#VX
��5�~��`�z��$A
-��]��3����Bt�I�8�p�j�@Sm���:t�*�ψ
�w�P�=�ǁ
��eu��vj
�PXa%�6
-w:�!�����E>%���*�+��5�c�'�o>.�>�����-�Ǟ�t0r��8̝�cH�q��ƨ�E�S9�Yz�vr\���1��V�%���=Q�������R	���8��#풮�_/��������Z֋�W���?կ��D�Q��C���/���J _�E⃴B�:m�
��Y ��(�4�N�0d��
�k���)Q*
�	��yt�"��^zRhe�S���h$�',[{��9�V���d���5��ǧ��6Շ"��	��_���
�WG�N+x�K��l�=�&�^�3�� \�$�~��{��Q<fF�g���Bħ�hǧ�]�2`v'����3���a�;�u�c�`��^B�0wh�J9�Ӂ(y���X���%05���;��'j�Q��\��	-�ji� �a����x���i�e 2i
�/����EՑ�؇)���vŃ�e�f�U���3
?�;��:�K��ӏ����I�
-M����r��.�V�He��T>w��G�u+�
{��9���1
uPG��+aa����۹���8f��|?jX�����[$�{�,�E0�/U���D���5#���n�u�U����_���}�wyb��`k�I(�54Q��R{Q
-�
�
ʫ��z:Ȃ 
����� �
�4��ɦ<K��R�P.����~�B��񢘂݀�GU�=
-���ڕԘi�;�
-������/�j|}Ȇ�^}�0�u�I�p	�&�ڋ�^5
)�I��1�{Tyf>p������iMN�.�]@
-/�ω��P<���ػe��?��k����������.L������������_�w�����?}����?����߿������o����o��������������?�����������������������_sҟ�����������?��>�_\��u����S�����{�K�����h�7Z֏W ��<���N�8Dڝ���QU�5�`�u��?
��A�l�RM���y���"^�G	1Z���o����*e�#��;����K8��;�N"_�Լ�6��`�j�&
�
��1�׷�E�}˙�����˙�<��G�u��2��Υʮ}����;�2�D����u'����h��6Q�4�t�����(�R����PlW4?vȾ�z<��T2v{�Z��v� �~dtTx�a��=U'Lv�PC8u�w���چ����Vz?( =#(��� �wpr�
-R�.��{��׏��m�n����0��R[:rZ� S����A;PȿQ<y<m5�'�M���
�hZ���Wh7`5ȿK���@��(��l�"��`t
��0��(����0r�X��˯
p
���\*W���.����9�
�
Ԭ�V�4�.�kU
c����m��a��[���]`�2���
��t��XU���

��0D��H�N����\��/��߃��/k\Dr�ay��f?�Op1v�J�����u~~�	��NS��Փ
}�ٷx� 

f/N�
q�H�~�^wU?�?1�K�k�,5���L�=�;��iϢY�����>��%M�k|���t
u
��Ce�
cxRE"�ߦ;�&�y�$b@
-(��ķs�!�
��
��I�s8(�'�4飄�A��T���1tƾ���M>���p-���W��?(�)� �]宽�`XX���C�0��τ$
6�����8RPЫf��]���1��!���#��!+~�xd�-�6q���������q���W�E��a��eB�`P�W�B=��pj �~#�I�
���
�(2_�H����	��
��R
����]�Gh����
,G�o��G��e����f"�M���҂�9����0�	��׌��0�qT3��u���͗_�kD��EhX=�f�u$�����9ǣ\x[�.�%F�����Td��fwۂ���$c������f�1��>��!���v�ԧQ��
��M<���<�$O�|������2��*�ƴ��u3�
-�;3
T���u��b�Z(�k�dQZ �˻D�ހ6=(#>�\_{���g�"�^��چ�`�
-xf at -��
���f�sS����r|%1��(�ݠ����m�ȅ?݄�ry�[#b��5B�
�
� ��@��<}
-�SZ��ГU����D݉��*�w�հ��;&C,�If��i�ꔐ-�KL7{�q��G��ƨ�m�>�.�X{D#/}L)��+Bݭy(�L�GaՎgOa�VR����A�N���JjX�Ί~B�\����Q�~�C�UI�u��M�����8��̛hO���x
z~DK�
s��K(a�^O�� �+���EV�U��KI��-
a�oZ�0L���X�R�!��?zE�tި�� �~�
mT�
� wF���ߝ(�}���uևu?ƕ��Z�����asw&�v
�Uä��/./�s&b��ϻͶ

P34O���2��ODWPm_���a��k�H�}zU+C��]X �т��qQ^�ߪ�.1���<.��������R���
-�[D�"xp���.��iM�#}���"t
�=�EDٯ�d��䑧i���^7/�����@>��B
-���
E���J@�]��ZL����N��g��Q�j�"��<>�_�r��e�I ���L@�����T����<hi"
CG�
-���d�BY�������h���t�7_aXS����k���
�r�����i��"x���|g^���o3�oi�k
������ff˱}޳�}D���
]�jK��{�==��h?裷�O�=���ni��}���\u�~�噙��h�v�nq
��g@��
��gU�Co��iE�$Z�%�p��b8hŒL�^��3��t'E�f	D(�h@�1�+2�
?��sp� �?=-�ꠧKD�:�=�~9�5*.��2��8PA
lV ����x;��F4y>���@n��H{�z
�b���V,'��ڢ"�Ą�[�"r,{M�!�9��l8o����h
?
-P=^0�E|�J
-C�1

XvA�w܋q��="�U
=��]l��qh�����O��>��"Аe?%���Ct9�q�G�y�o�I,���:��]��A-�����*�h����?��C�oe
�??��ɝ\NLF)}��
՝�lk!��G"I��9k ׈�����!����J�髴�

3$�/�����r�_t�13����`���uQэ/g��~�X����N�0
*e���	
-+�uI��X�a��|!�w��%����(ת^Ӯ&u��.
��|<o�+
C�ۀ�%S�;�޻��ؼ.9n��3-.9]ې<��c���ΈK�;�{.��Cܳ~*sfk3�9�ΖZ^>ĺN�|X��o�ae���M��Բ�?N��D�C];�S�� �J3�{��C�%${�%,�'naQ�\�
�G�	J�v���}Kh:$lN�An#.J�ބtGŀt�)c�/�2�ܕ�cO�&��*��3͞��b���$A�b
��Ξϛ\QN�l���^�
-
X է"����
�
- ���]�r��M�
 A�똟���B�i:��
tR^���Q^+�6W]O0m��2����n��IЊy����c6΋1���8�a_ڷs@�oN���5_rS��?F�֨������C�p�dB�|z�X,�A�M���;]�r�k��<�5�"j��eW�.36����5������~�Ӯ�χ�>�:%�߅e����
���ґ���;�g��亾~�����K�"�AC�r����n�ۨ5OƷ
��o���r�vz Q��p�^T�ح�
-�r��Hö&�Lr����
����i_"!��J#Ni���gZ�0���ma���K�jJ9��d퇈
=���)P��8���#C�bQ��
P�n�g�_½���/b�R~⥌�L̏��FM��#rm����;
�M���Տ���W2���+'x |�? E�wyQ~�`T[$>��w��=J
� �!�Ns��y8�����G]
��ψ�y�6Rh�
��_
g�MbGP�G3��k�Ż>`���^�A��+�Yp�RD�Q�r^�Cˆ
��K
�Gm
�O��Z��̾x"�I��C�d�ڕ���9�,��-�)!u�vz
Z�FWbo���aFJIZ�7J�T"���;v
ܳ�-��ƈ2�Q�R0KE|V�<o:>�N�gD~�@��󮻃昳$I�O3)��9*�ڝ�������
-l8��cq��B'A΀��Q�؍�d����gC�ӥ>����<���?�r�ݭ�j'�CX�_�2C9g�� �f���zP_�Ѫ�t����A�d)�@h�� R?#�w4-BD|�h�_
k/D����R��?[bɠ�
j����Q+>Hꖣ���A�ȩ��<�}�Y�����i��{Dn٭�	0T�"?�C�r)���j?��8�ٓ<�
-V��I�e~]%i_ޅ�>��V
�lW�a<����f�ʩ$�R�ļs
�j���=g��Jb����
&�l��q�����N�n|��{�1�<�Qu��&
���^�¢�hz �)�	�n!�BP4�H1%\��y~F$�(�BM�s}
ݠ$��N�8i��Y~���	H�1�/�P�m��YI��[V
-f@� ��*�/;�_�"�x�1�o�8�'�<L�g�m�y��a� s�"���'�}h�v���ꡋ/��
�
-r�U��-�1����ү�S���)�4���#���$X�@��ӵë��:�W�Q��l@<�ٸ{~ '�
1�<O�G���q��c���0N�Y�Y�S��u
M����C;y�gf�_���J�ic,De
�ׂK�5�M����c�i'��&�8nz��h;�z�s��e��7�4Z�O�z�x�{�ź���~�i��Xn|?�52��	
�EBj�}K���7��QQ�����ǹ%��r)�[��WŻR�I�s#B#���Ybc�x�L�z�	
��N�
G6��s
5�
-��\H�ҍ��⼡�7��sMܠd�1�>�"UA��8`��G�Y�B�s�}���_��ͤ�������B_@[�S��
�/�沙P�f��έ�]za5[�>�TP��s�e$�q�J���F��
�!"��:�&
�

�
"��5M7I8���لB1�D�a[�E:剅�s�"s������H�KE�i���8E�Q���|�C���/
H��q��`g���7H�N���:0���G]J7���Q�o�i͙�u5�US�Y�ǝ�8b���CI^
'��/P�}�#E�^=2��?�D�B&�$h�
9��o�a5E���Sv3��D�jw���1����"3b�+Ϭm
-�M��G�����[SM�R�j�R��`�O��gj�i�Og��� P|�`M��
-�]����
y~��"�#g���*�,�n?��!g�H�� i�۸e?���=5��i���4�=#n�
���:')Ղ��:�ǀ6	+*ϱ�g(��{��xe��𙁍�L�>�D��Qb�
���tqD����#٥�{6"���s��/l��*��Hc^�l��1����?�E:1�Ie|��t܆v�O9�P�+
��<"��ri���|�~P�6��v��
�C�B��z4S �
Y��-u����k�A�
}�H�(C	���b��O�1x�*sn4u/�Qqq��wz����9�<j�E���톒��/�"�y��b* ̞�
�
-�[e��k�u�<8����Lp�8�P�&T(����<Ѳ���T��@U{؅ǡȕ�ڪs
�|�W89�����p��B��y?�S�
�Nv ��
��u\e�hHG��ae8��ǿ�5�)�}��*�/	��?��Z4�~�C�g8N��e�Z�/�I����~����;bo!�a}^�2�E���*�=�B*܏����7�߽]���J������ĿL��(杮ȣ1�չ��d^<�'��]�
L��۱Z���
R�ߴf���h"�
‚$�!N�a���5Ŕ���Nz��ƨ4��Zi<��Mqۂ�e,k�1c��0��_Ձ-�����֞/{�(w�$�([CS`?��߽e���.5��x,�i��V�9�<���?#��|K�>�u<YC
sx)ʰ8�S�=������`�>�(A��lyLW��u.��,���ҥ�u!�Ͻ�Pѷ�?���[~�DA=T�
-�ʰ��N33vyPJGX�ÊĒ��z(2ࠖH/f��4ĕ�@2i���mS�v=��Ŭv�u)"��"��
�T3�z��r8
-�P��|����i�
-��<��s!�fM��!`����;"*�9����_gr���Y
	$�I#%+�̍�����(������c[x����z�O���
@�D
/�d�-f��v��.y9wa��i5n0���gȚD��ݯ��_D�T�?t�����5I�A��늒,k�
->�����:��p��c�T �/B��8��}�@��A��hM�hM
-Ղ޵��7��@� 8�빀8Q� �c��
�@Z��ܔa�~
d[n�/����K?�ʲ������ŏ��s�{n���MT�Y�O]^!2�Q)�,술AK�J�p'\ 
�9���3��4Bg�E�v�:SV�3zS�
>Î�ʹb���l
U2�1� P�@�V -c>+��
f�b$�"��wo���o��Z��gy�I�H@
�`�0�C�#�:w���|
R"w�H�[�H�?�6^�@��*�DP�~x�i��8Z�:o%��
e�
�w�)�~�bv�V< �q�.;��0o�����(��\H8`pkjZ��4�y��5j�0��!�+MzRT
��[�1�`g��2"9�1�d
'�# MI�)��J���D���~���:в*x���f�� ,�J�
�l`�<���_�o�n}�LQOl
���\$��}-;�"� �/�x
%��*���)m�0�x�iM=�����P�1s�>�s{l�	v)GE\�
�ܴ����(���
!�x2��e��DE��K!K�ͦ���m��K���_B��*�hx��`J�]|��"Nz3g����~�C 
-��1��L%�@Y��vea�po�`}����!��^}?̴�����
����8;� ��|�S�>@U
?w
-�d
��JF���G�y�uzp;*x��h�}����z�,��%3s`6��ݾQUo�,�
�x�����ψ!^�ukoL� ~D��ErO�g��|X
�M+'�MV��a�P�]`���B+t�~^��м�T�h1��|���#>��t��Gao/�a��rQ�5
t0C$���H�|���`�L�Z2�%�����ӅӤ�G���Z`^h�6�
-Q��r��j̱ׄɞg}ސ���h�
��
���
0,68ˣ�3y^�~+y@��:A&?��UD�+�	4U��g�2�D�xG�Jj�Q~������)�J'��CP������bG�+��·�81
������3�\ԯn��yE7�>�
� 3�:g$����k
�Y�D4x�UO9ӻ�Q7��H
��$䠶��!��J������'��c�AV�&*nY�s|\x��T��z���iH{�K3�~��Æ��*R5ǰ����J
-��	oa��b5�$ZG1Hc
�0Fc�Ds���
�],M?
�K���`�J���t4d]��
-0?fn
y���e*c
tBw����d����������E?%{Pe�
�V"���J��H
W	g
(r���峑��O�Jx�
uB~|0�ٕ�L�<��
��M��D��Q��l���*��Ч��J�Ji~��@mk�AT�|t���>��y�JF�X�2��f��H�9ҏ*��0�G|gE%�I*�cS��;���;w
D�P`㱆8"%X��		��ʒD)Qj��&��ƪJ\~��>(C��ʸ����^�7s3�:j�F���e�i���p�'b��>H �T|S�D�����Ĩ�Ⱥ�� v�w�}�ۮq�E����/�
Tʎ�x�}0:�h]ɻ�ZʾX��3(h��4�3�%�u�I
\]0��1�Qo)�R�.�<��cx��I����h~d#�`SA��֍�CΫe>��م�*��s��ׄZ�4���i$� 5��~N&���a]ê�����3�b~W�����?0�b*�x;�V_Psq$
-\�QK��E
4��B��0�1�����
���<Pޖ3��?����� bu�
Q�b�:
s
�>"&@�
"t��Cd��[՜p85 ��u=�
�R�5.��b[�6�.�<<��F��Jx&[`� ����Iį�
�f�
d~gt��
G�J�0�ߝQMd�
V�j��Rt�잟
�Z�w|�W��/��5��8�ܔ�(Lݙ7L�5�'�W{��D"��DŽG��$Nз��=���$��1P�ې��n�x�Y/y��� R�U�
���}�4r �E����������: ����r�Of�Γ@s��;��{�b]��P��$	�	?�ҵ{���
���C(��s!z׃�0*/����fN�݇X/��Y�-�rIY�r���
ve;�J
$Jz:���z
j��W��M����6���v�NZ�j����7
-
]�x���
�ƛ�@V6�)_�҈'��2
4C�m��؊�2t�!��w
�z�����k[�����uB��:M~U	{�M��W
�ӆ��>���>Y���L����&jo��������}�{�,�:�&�(��(z�$n��)�|��h����e
:c��z��
��돸��w2
-��!=�������滎��h�LD$��뀨U�ef�~�(���oӊW^����(A<Vl��\��G�J�y�iEn\?2J
W�����L 8��T�1�Z#��\ʣ�	�K�4��G%��L�
�,��Z���Ϊ �� O��|fi�(�ޢ��H�TC�� 㥫����#��aK�yD���fD���W���B
-�D`|�'Ŝ��d����x2��Q"�	@�7����X�� Ƌ
��)p�#ݩ��E�����1��':��
�['�>�VEi�ޥԼJԄ8:�)�j���6�{��t�p��*�
-��S��D��A���:�HW at 1v��
����N�����y��n at Lg
-I�a��j���b��eT��w�
-��9j�U�R

�I2v��J.�PDŽ��]��c����|��b��+�P�ı
I�{$�
���@8}����"� �
�t����(�u�U���;&է1]�(��ػ���`2�8,�8L���%�P�c��4¼��4"����q/kIl���( �r��O�a�~���5#�3�P��v6E@e�:eA��r��n#�B��z��J��z��Ƽ��ys"X/�x�U�}�	Czy(�{�h���ߧm�Ҷ7�������юO�q����5��il���
ݮ�/Ѩ���e�8�t�j�n+hq��LɪV"���;�W Fܝ��^Mo��5
�����>XT���h29�@"��P?��
v���i��	<�=)#.�G����F�kߨ?�:W¹��	_Bz,OyN�*���i�;�PQrS�E�Tl�� z�
o��Цa��P�[iʀ=�.E��Po�f�ϣº�����Y����<v�|�S`s��e>�c
�H+U��
-��G��bQ��V��Q
�fT�
�a���sV~*����"X �ߵ�Q��5#Ї�_	�F�}� ^v��S��\Sʼn0�K���^�
��̝�ӳ?vW.LT[�3�"�7>�����,�}1.���q�VR�e��
�@����x%�
�b
�"g
��!W����A�U���.����G�#mM���2�k�/�X椗i���hE���sOs�g9��[5�����D��
��.-���<�v
�L;�eNp��l�ԥt��d�|U-�^�MZ�x��X�������B�]�-���Q�7�Ō�I�*Cp+Ǒ�vz��/�n���
-��.!��`��#w�1�3�
�2�FKv�U�seɁw\���O
y��j�E��Aq�H.x��.���K��ɮ�
-���"��;Ԓ�#�oQ"�I����T����_U�}@�X��<��ͮe�q�d�e������]$W&AA#�ٝ��
D	38:
-�5��S��fYS1!��w��o�k
~�”�&R�� �< q��W
���<i�K���'�%*��
/���f��`�Ғq
R8���L�e�G'%Q at m��1��H
u�)j�܇d�|�c��
��#x~�i�C_�_u<��&��>W��V˙L��������;EBua2A:ͣ�q����9O��?�e	$T�
-���~#��������0�rD;����l
��
�AD�*��,>bۨ��*�`{<���c�#���LYI�#�ͼ�ee�z�< �E��Y��Ԣ��O%@�
�ӎv�
J��/$�(�w��_�Y��B&8d|^d��p��>L�c`��>��.+H�%�-5Ȑ~��ȹ�׭Z}��mPIy�ۓ�ͫi�er�S
;���
 >C�_��+d-�_ΐL'MA�J3{�l�jG�أ������L<��(y��a�'�Y��8�[��]@w��SJ�󳋷�^�p�g!����
 <Z%4T��B
!h,b"ױlc,:$t��
� �̓Yw�7ק'>�����g�7Q�l��3G�6F����b�yb#
F*��b�[x�Q*C�ڽ�ғo���{p����HiqYU���U	��?�X
04ֳ� ����.�������+
�O�H
���N����.�g?��8+�����ݖ&�é)($Y��=J-
-�b�:��w� �woS���k��Dk~� {�|�s
-����M����Tx����_hx��	�?��t@��F��9gꤢ�G+v�Qܒ�F��ux���,_#����,iN���ߺ�F=N�F�<�z�b��*���]�;\�X��5�e�Ȧ���[(���w��f�i-9\�M@V��'^��bT��?GK��m��4�Q|pG�o%��!�_f����
endstream
endobj
132 0 obj
<</Length 65536>>stream
-�OG��%4u�w�Q�aY�ȧ���_�Qo�M43�}V��m:�qʷ>&=>Ĉ�RD!lvG
]�,΃��Mz�����œ��n�_/��x�����s�
-��+b�
(��d�ʻ��Y��
-�5���1tx5�+�w����|���<�O@�Ԏ��^�y��6���E?���1����4s�!���|5+W���b4-�a�U~�x�˓�Q�S��v1�*�iYg
�쏾D�9����Fw���si�	˶��̧��V�4i���	��u8���X��v_�[��;p63:R�@ݢ 9�/�u�@�}�X
��&��%4�.x.Q;�bWLύ��,���|EC>'�R�9jv�vt'�鴯3	e�Qݦ#�N�y�_;�PU5j[b���p�
���:/��r��^߫(�wň�W�x�69
-�`�F��+Z��Hv	�rJЩh�|�+���d�|[��
��GU�
:���H
�k�� ��
�<w�P�V$�.v�7���@aU=Xl��С� O����ʓ�hop���
-��w��SC�>}�
�����>�C=��0
�4�x
�/-���E=�f
�jD�fw	8�����6#���;
-�k���P*�?���
J>ע��V�	 -�˧�of�1�B���u"�ٜ��#<�ɾ��{9	y�[�
v|�9#��8�����Dz�&��?P֎��N8�$
�b���V�UF�	;"�E����0X#��
�����kŃ�|��Ӟ���/����M0|���߇~����Z
��	Wx�<2WԜ���ϔ�n�/�����݇�ʩ��YC�NƄ
��`�u
��z
O�6_�g���tZl ��z6��iC�y �Lg��Ӄ���k�]�Q8�y����C�����I��(�*8>����+���%�q+d�+䙩�
-��}"�6� gxK��J��mp���m(P�7�����5�H9Ƚ
���˰n��-}��k�����:lutL���q!ֶ~��<=?�:�h
�U+z�;��g at G6�Xy�;��� �hǯSa���
.�����c���0�aב�6b���u&�(4����+�C�u&�.V
.o�$�L`�F�A[Ѷ8VQ�fr1r)�҇��D�\,FF�y�?��h�s�"��=�&�
-� ~4Pet�
P�
�k��,eE)DCΉ
-E
�x<����`��9�v(}3Fט��H�R�����
S�
-�mzWLL��H���
]��D"������k� F���&�F�.��e��]�����ܒ��y��S<z�
�"�`a�M���w��ח���E�

r��q����;Ud�����yS^��$@���yT���?5Fz���,��!�֦�'�.��b��WWʻ;������W^l�ޗ~�O�����/���7Wp���#-tɶ���
�
��d�c��ٻj�Y�@&�iC
I X�nwK��:03��v�����<괍�� ܹoN·�+j
쓃��
j�G�KP)l~�e�دh�iJ4��RB�t�P3>,�I�+�V|PD��?c��?��?#���p����)ʡ�
��FnL=�8��
-eI�i��q'�_���bq�@
�1
-��7�'Q���V��$�RC� ���ۛ>
p]ԜS��[�����
-�@]�2��LW4���h�
ȡ�##�  �W.E�c� U���y��P��آ����dޠ�q�&h4�0b�4��
��Q!��nC�Ef�)25e%c�wņ�q��%�X��d��\��g at y ;lJd�"կ<���-�'J�/�ء�F���H?����La��t���\���Zy��(�D�v(�Ӷ
:L��P����?8�U�
rw��Ί
� �1����-ee�r��� �u����]���uL��j�T�BR�79�Ȩ~���ɀ(]�Y��������<�OZ��Vi���^/���������k�<
-���
���L�_��Q.�oY/�ž{Fk�
V(_B֗
C������9�
�h���{��V��L�A�Ҁ�a�"!@h2޲�9QwµQ^EΫGt��8�t��ݺ�a��|��;���0��J.�CP�3���$�s���[�Q3�)��O���q��gh���(�6|3���o&�.���'7�	�y�f�%��^-y&U��CB
6h�ky��V��pZ�O!z��}�*~��q�I���6`�C �� �l�,?8��T�8y7������]G���J�m��ҧuB4HT���w���Zj����jðN�]�i,V�ln��~m�
xը�G�b�
!�,,}���
��*
�v
��`��pX�By��Xb4��
�u�X�M�~�ɂ�f���a�̷,RW�����k	���� ��(�Rs��ρ� 
務�b�
�ʏ�&�T6t:(���3T�U���Q�����S��:�
-�g5,�-6����=�
-�\TQ%B���G�L�Fs
�C���-��4
�c.
Z����tq�
��D�$Z6��
1�[�q�D�Sn)J$������4�	�����
@������}��-�	��H��ä�
� 
!_�H��M7F�s�����kO+S��ꕌ��)
d/�ȳ�&�VZ+"��+GM��6tƻ���mHI��~�F��f�r��­����=�氓�v��P�_w�D�C�
�7��ЍR;�(�j\���j�>��@p�`�P0�w�
W��ak�r�`�J
/Q���KW�`/�T�	5�o��k�4���I�5P���Y�EЙ�$ե/�<���!
���(��&��RJ�.���
$=����!#R4$	~���:��
��
�i�%P�!��|דU
z�PR����yה~F遺
��C���e䐪otaG�;ǢsFs|"�\c����F���9��- �����z,KޅJKD�-�
-K|	U��l�[��Z �Ǯ���O�����8�+
-�btk ���^���n��[=�\���̉��̼~3�
#�`�:���Lk
��}�K��8@�������⓵
�|�K�v[��d �ǗL�LU��c�OTq
�1�������4��˖;N���!�ī�fq��D�u��G��g�u27_�dO �
]�2 at 6�k��j����I�r������������R����@]�T��r�������S��w
�ȁ���	�,H5-V�tqno �ԋ|_��a���a��
���Υ
�~�v�	"0���Mq
�l��LxiW��p�<*	b��U��u�<X�.���*,7;s
�n?C�ĥ/�� ���_G��)����.:
�@��|
`�Z���
���
�0�J�0�R��_+=?c��W!���u�v�v3���������r�=�
�>�ש�Б�_]x�=�
��3F`�L
v�&{%�tI9hNڑ�)���Tm
$��O�0�{�D��B�

u��D�,T�KqlyVk2[��-.�`-u@ه*[�~qC���w�u]λ���׌�Q�0v��!\�:��p
-Y)�
�v[��J�7�
 �8K�������Ҥ�+
�
Z�5�bK��v�v������V���>NO����іw)䶇͂��$�
i�t�J�|$��*z-GD�qVi0
c�
p>�*�2�B���T�
-
�`
���̓Ǘ��M�}���)���(�g�<���y��q�a&�
�&��������O���
�F������
-3
-~�\[췛r��NPVM�?��� �G-�U�����{�ށ���|��h���XO���TN!�E�
�gE0����jGq�Й�>������wG�S],�k��VUu�!�k�7����t��2Ӑ���Ǹr
%����Y/����
4��
�Bj�x
X@�P�	v��-����1�ת��p"�w��Ǫ������J��m��сc�VѼ�� �fp�!�V��
֡#��T���T�<��(F���
J�$lZ{>=�$O�)�K
�R&_(M��aO2 ��*�Xbv[��l
f�@{
�|i>7X"r�1>��Gg_{�=�ΕE���DP���<hr2�x�IZ�3�C�K;���
�QX����'�����~A���7���jX]�RNb����/U�]�3/�X�6K�����[���C���ͦʶ�~}s	z&ܟ&
%99�w�
���	���
-D3����
X�A_�F5��|
X ��� �0���!�4�A]l
�XJ�g�@�r��O��!�^~�b����z�����:}ihe.�艙�����S���P� J}�3�p���^7�k����%y��[F��o�3�#?t�Odn�=�zN�A
�2������-nT{�0�}���js5^
N4H��J;3;�P��YB��%J/aa�#<Nڍ���1Z�[��~ '�^���(Gް����� �a�4mn�
��\

�
����}"ډ8��^cC��3���쒋9=352|����O�G<|[����ܔ���BC��aX�s�JS�&c�3�k�E�ѻ�!n�Y%3o�h��c `c
��� 	�Ba!�T�Q����_��7u���d
��|��YU�#vu��`B}�*�w�w�0��
�����A�r+�;kK��ME9
��<�ˡ7@�G��d^���w
-�>��Ұ�M�	h������#��F�
�LJV������f㛱{�3E�Ls
-�%�y�����e��f�(
�y�{[ǞO)�*)��i�1<�N��������˘��l�3N(�|	�
-lK�0GUz����B���w�����������x`��x�0NRvuT_^(�W��?+�h�:ʖz�#KF��K׶k£̙��_r&�7�]/�����(I�F]��섈��R�
-s�#�
��ڴ{&Y�
�z}U�e؀��8�܎��WU�G\͹�� hIfG��P8cNb���(�%���Y�����+;q�
m�R�
��

O9���+�����w"�j/�UM�GJ]�_�	+n2�����(�
�
?L�����!VS����#Ƙ��ɜ
�ʜ�dx�
Y�/�d�HL��zN�nvf�r[ܽ� ��gR��^��q�Ka�w�#��h�[��4]�^R��J!�^�?�_Q�%����Q�7��k4�r��'!�u�C`̈�%]�
�
��@�Q�OW�#��1�|��_<Ɖ� 
%ad�cF�8�_���,#��[1���OQ����������{Qy$8r:t��"�{�4�
/P����}�������R=�P^���a&��3��}�ܖ���nƈx�a
��
!���
�� ����N\G��w�	\�{dy at C�V֩��ͮ����	"�fv�u�8��d�3AS�K �L�GDZ]�E�߉�ׯiX&P��Ý��Htf؁�j[�(�9+���.@!�����.ʸ~ �);��U����o}��h���A�N�IԵ�����fj�\�#Hj�Z�p
-��=j���|�U�>�t	gj�_���)Vt=�;q�R?#�|"��\h����q���Dn ��."�>����z
�
��Wu�3�W��,Z^�3����i'�Q���{!��y����V�x%�A���P�� [�㌺����
-�ՙ���GGTՓ{���
G�E��梛�u& L����p��Qs�I9�ݾ
�53 b�A
��R�롏��ӗ�9��x�)3��僻�NL�2:ܷ�&~��=�����{���6�_7�Ϩ뀀�ZTϽ6��ȱ骊����J~������`����
�����ۉ�����}�vnr�ױ�#
-jӘoREi�)��N�H����)G	�h�e��Nd@�c�ֆ�
����a���2��2"���q`j��Yy2�9Dz�}�dN b4M*��
Ei�;ذ��
h5)A�<��gJ̊�n�ȇ��r���َ�ҳ��[="SUS�(�QV���}
�Ĵ�J���qg�l�5s�եZ�Y�j���a�BZ�Y"�����U���N^G�𖌛�_~�`��h��φ'����I=3��tT�/������\7�d"FY/�
��
�OF?˚��c.`�֪������Ov��D�"	���>�-���΁
ܫ�����NkA�Ύ|��ّk�&�[E���>p2:b,N�ѿQ�]1�]�U�����cgz�Y-.:��H�67���`�86�wČ,̈C�/M��RC�;/�1�q��F���t�%� �O�6p��un����y9�HT�?�k�"������1��K�������-�k�8��趃�X��8jB������̠� �7��
-`���z��mz�罽���/H^�ّ@4^-��`nr�W�U]�����Z��K�#�Df�=�l�o}��w���+vD{FA�$���a�"j�Oc���`i��E��v����@�N��
-œ�L\lh�x}���`�0j�g�
!�K�#�IHL�^=u�։�ٕ~
�%Rgz0�
-dlϬh���$q�Y�=c�~tq@�ܿ�d��0��y!8L���
Q�����U�
�_扸��öf�4����
M	U�jV=��n�a�
Ks`֞�[�W��0�q��2U錍Y�{Z#n����'�y��^!��.v,y
ϕ1�rŷ�0�[�'��̇�"04�z�\��/�
�3�o��<!�'˲��-!7��|��VM<�����E�V �X��'3��F��hfU����P'(>gj�=�}��N:��~�
-����֔�Y�!�V(Ze�NjW��{�Ծ��w�so�\�'�D�*�i���n5x�iL�:Z2U�H��xH��ל�Ams2ތ����Pn����#v��!!g�r��<���_e�
	f�k"�
�&�`
J�Jv8�XQ�e�8e����I��4]h�gDN�bD�f�I<Q�N�7���?�d"
-s���1`���x��%�:�}D�l�F�mF���?`�_c��a�!y���e�=��	�
�WP�}�t
}����������j�
�`4�<�G
mhf\��;׫e�Bp�wN[g��/�"�6�b(�>#�7�zg��x���	�d:<�J�
%�.�?FPD�D#�Wo�	�{�(���]��<bs���8�ʹ�����F�g��}��w=($�t�|
��P[�8	W��pa"ծ�Cى��%�
���eP=���J��
K��f8G�|P!'�“w�U�(
-x|?F|?��>sŪnG	]���t��W���e	�U��JO5���C��9
��W��G��|	 �-�Y��T�dM�Yd=�eUN`�E�X�ٸjA�ѯ������D+�#J��`��*�*�����#��k��6�?�4q�
-�t�1!
�B�f=E0����&�-�'������
GX�
8���ƫ��
-�0�N � '�N �� �j"pA�:A�Hc��k��
��)��3�G�����������>6D��8�%��r��ZU��~�� ��(��vi��5�Ha��L�|�g�t�'o��u��
��:J������%����F<>���t��q�����JUЯ#ۉP��55�sFZٖȍ�cz����?�E�j�p���X���!a��R�t\�9����qz"�~�x���lE����=�B'�� ���������=�xш�����ܸ�	��8�A�c$}�����;{�
{x�Z�p � �����'�U������X���&��9E�����$GݹoX3�mϬcDo���U
�-ƿ��|g}D��i#�v���
���-�5����Bۤ
-�|�0G�Gjq����z
]ɮ
����!�aE�ގJ�ωX�e�:�� �ODy�ܕ�+d�a{G��u��whKW��az]j7��T�,����%ܒ� ݏI�����졞
- -��ҩ|-P�J0�����#�q��(�<����fL�D(���2
0�EE �8-kȺ����M�U��M�����k��xb
F�^J�n�)^jG�>BĮ��9���*`�\����q]�/��f��zl���o?FhMv�����\�?k�k[r��=�a��P)χKi�ܖ��-6$�0
-4YꦭbTI�޾��#"��k�]�@�;G�
c�Cfd����}��%�VL$qG1�γIU�&��E�WSL��xR2�@`[,ٌƌw�!�=�{N�諠s��nSO��	J|
�,
-�ɘ=�8�T�ld8o�&���z��=C�N|3�ua��
��A�g%0{\�T�q�p�HQ
�%����]	By�l�4#W��S��o
WZ�;
-7��Y�Gg[�2�c��`O�Kr�
<j�:"%l��^	�V2N
=d�
�)
%d�Xz���!��՞�\�h��"
��	1��U t^s�_+[�Q�^6��	�����O����\�z�R l�j����"��!��dBY��S�X���
L���='�o��M2 �0��'��\VI&��
�N]�(* ^p�E#1��W�T��~OAz`���B�:*�2K>N�
��S��#���T�3��LھJ<�#
Wb+�`�1��-�xx���.��u��
�rB���GC[9
);SS1�qc1���JSoӘ�p�4
-dVV7ʮ��܆2�y�(�P`�T���u�v�
-�Q�&N��
�X�TQ��]L
- at 5��
|
��I<�O�@�	��(�C�V�Ƨ�����5����a�~`؁p��x�ׅ�_���s^�i�s&�D
-���
薌B�k�{{��g�l��8�a:o��/`K��
_�}�d�%M���dk2
���~X���0N�������>Z at Y9���6�Q3�!E%n_�����
,��_�&ܯ���{�Z_
-s����R��&�{iM�;P��K��*�U�Mŧ���~�̞���5B8���v��MĊ�\�?��S��
���	N�f��
�_g"�*jX�>԰���^��k\,�*ua'D��c/�� �B�;m0�l%
M�ݤ��$E�5,�;+�,�k3���b9���\���_亟z�n�B�	\�z��rc:"s
9��H�Ȅu	@
��$���L`�"�
Y�2�1����E���|-7"CL���:̬aP������T�sMu�Q�����1�-�PK��6Ș�?��TF���偼�GGUI'  �� 5&�JM���
���6��"	^-5��n�;�0��OJ|�c��e�k�ǃP�H�i���Ǵ%bw���@�A|%y!M���/{�2̱*�>��q��!W��O�K+�� �H"����C���T���0x��.
v�qV|7��s����z���2*�OS
I�9K�r�����a�+,�2|P3�
��]����p2~u)�+;�� 5a y�4.<
� ����Up�V^!� (8�J�
_U��1:����
g�!4#��LZe��@5�di�|���5��LQ�������3aeT
~�F�P�
�z�a�D�pZ���`\��u�;�|��w"%XDu�)1�lf�E��&yXT �o=��W�e
a(��^�ӳYd�-�@��A!��S��k��b�c��ts.πL�I���L
-CL��VwgrN�5bPC5s�*5BEI�Xr	�����M�q���ĘL�[�/T��	GbƁpd���2O!=0�gjL�t& }������8��T⪎�]��Δ_u
-k�C1PV:A�R��
��KA���	T��T����-aJ�f<\��,
BFP֨�L��{	���?*3�m�Τ	�z� ���hL	
�DM2B�yMc�װ?��ew|��ϡ��47��Dh/wAt>�*�ʆ�dR�(���rK_���M{�

�?���/o��U���ܭj��E*#��O�I.v�N�W�t� �uޅO'“_t�f��$�/���c��z�a7�[ԇ�h���T���q��"
&#ʜ4痞�R���vSVѷB�%p�"��^ey�����6��2���=2
 �g�	��O�E�E�}ف�K`��e{䉾��Э`y�hI'����A�I	�`��
�\"�ļ�`�H�ʒ�ʬ�i�
�)���gJÇ�{ �:������jA��^(�(��Z9$�$��ޡ"@�B�2
�
-�٢�����	�.

�!;R�L.��*&��Ң�K��
-���Pr���BK.oK���]ߡw{>�9.�C���-U������C>4$O*x\q
��?�������0�s$8(A
�N�KD7�݀4G;߬n��4��!o}
Tu�+��
a2�FW&��8d�E��iD�Ɇ�q �A�^�:�Y�!)ʹ}H�YKD�R�������O��~'�����ZM�%-�{�
)'U�&]
�YA�
I�<
��
�a]�o?���c"�D��*��
,�R��S��?~}��x��?}�������۟��?��۟��_��/�����ۿ��o�旿��~��|��?}�W��͏���?���줯�����w���_{N����{?������;?f��,�Q/�&Π�<%������{;������<.YarKR}��Rꛔ��Ș�	�C6�;�[��N��&�w9Y��h*f�o�A�:�%��yN������y��� ��0�q�m;@0�p
-:���8l��$�r��F�NЃrɖ1��m�
226: �V
hM!�/�-�d��r��$����-w��JP����i�
��ɓώ:���#D�4���b�f��7a��%Z�$�|�Ǖ Q�4x2j
B9
�����oV
�g�JOr
� ��,��w��BGwF�ڈ!'��.��Du��}��:`,���꜃��F�MF��4�
-��� PU����4��h�u�ibbBYǁ�,��VI
Iu-�%�)�O�6�%�&�g�F���wq����@����ݐ{��S��8e�AYh
QA�B�u��$����Q:�_
�U���,@>��n�P�Z�
���l��Z[����B�K��|X�V�;�,�
u ��NJ�>�H�6�
�?�s����1�2�x`�ҳ�#�Ȍ6�<���{��7�A�7e���w�
-4�
ɣ8��� �R�%$��]��9�D��-��G��}�`
S>��9V�}��`z�V$�淜|.��"�f>
#$=C Z;��˾�,v�OJ��ccv&
›���t!�&�P-c4I�U%�(��O�6�T?0s�+L�ل�U3�]��B: W�+� Un�`(�\
��z�Ww���x�R>|�s�$�[ ��^-F�i��艑�U?�3� m���A�j�d?�K���PҲu"B����g_���f�:su��/v�ٳ�
-v��Ȉa�v��� ���\"��g�
-��{M�}�&V�!��Rf�Jg�)���8�]d�ϒ!h�0����]�"js]���lj��qT�6
��a��/(���
|�������0h;�E1�	�#�98S�Ê3��!�ɈR���
t k�崽�Ä�ʉ�W�s�H�p�`�D	��ڗ@�L<��ño#&\桟Pb�y��¼�fH!u����?5dmM
��
"J��-J����=H��[��F���k��ܩ

�;S_�#% �RST<�X��G�ʅG�����PR1�P�ٙ�8
`:�Q�
p�=
-^�
����A�2J�
�R�ĝg٥:���y���59U���𻲛�
�3�"�+���g>�O�φ��h���d��D�V�[���jIz(s��Bq�UqZ~�8z��وeYB4�BWT��8SVX2 �X!�M/�2�R�nP�F����GBe�r)ޣ	l�
{z M�u&��q&��-	e��
-DeV��"nk��ֲ�A��b�+r	Jm== $�G����=��5�[���@n_����SA��m��4E�a5�a�4�XV���*3o
e[|"�A
��?$A��@���,��J�nX��lb���4t�G
-Vu`K�
��6�����ʨ��h�}Ila�z�1P�R��U�҅LWo�Q%;�����:���s�D���l2�Q�@�
�ьND�Ji�������%�A��M	r�h\M3�42�E[����y����(e� Ӓ�Gq
{���
��ܶ"�6n�PYh!^��>��P�cY�W��-�����%��q�H=s72��I�Tac����ca6+
-E�ẉknwHk�Q�u�P��H�|�@����R3���Ƥ�������`?��ۜ�_T%�:5�E�2޵o�����q�=��	�n��l�aa�D�D�
���WS��/�ā��ǃ-����y� 0=,7�e�
��}
�`C���?�m�٦�n�Un��lb�l�M瑑 o�T|���*��
z@v��&�^^<�M at +W0�L93=`\-��-�
P��CbIw��3Eg �|H	�%�-i^���'�"T�W}j�FE�Jf�� ��:K�	@�*ì���ў� XPeg���T��ƟX	���A=��z���4 ���,�%z�t��CcB.��IY�B��d롏>�RD�)�9t�e
�׮��9�S���܆'�jQX��,fm���-"*1��d,� .5���'i>;�&��R�MT��=Yw���d/I�@��ĸ-�?�LG 
�X��XZ�%��#V1jQ��N+b+.�P�y�b�� ��ᐟ�3:n�v!U�jHtu�Hz'1�	{`�L��@�fם4��
J��@@�>�
g2�,ӣ
�Y�
`��=|�ŢO���a0%+�}ؙ�Ե,���W��F[��hV՚20p
-��KdsW�-I���9Č3ᩩB{5�<��]V�5��2��$�_�~
�h�
��p�@�<��&��ֽΛ/ILo�4'Q*۔۾\(��U�k��_U����1>���AW�@I�9L�^�F՞�R�ּm�����
�J�eX\�~�p�\�cx�v�%�2=2.��"x�
�iIm���R��@��I84�K�;�4`\?��x�$2gX�#OL�匎�
$��h��z.����&<�0m�y�×!i#�l��	��\����k�Q.���Lś��������	�
R99�W��q
-H&�?�G����bQ��
fH��$��M�����϶]�or�89S
Ԧ�aJkvE%ӳ@NVXS�<h���
�m Ԑ`1�X�z�L�=u��]�H@ ;�`��{|	����>U
-(M>�G���٣�H����"�\���}v��v��_QR{�_4�AY
1�����I(�
֨��DL����AG^c����c/!*X
��X%cM
����.
z�M
9 B
-�:Zh��C�o�/�o%��b�%Ay<:�Ǧ�oK�,!<��œi��H��Z=AF
-��n3������,�d�O�􀧭
f�{�>6$�"�A��m�(LvY��Dd(�4
��
�S� \D
����A�������/�8*� ��
7�
;�#s
-�R����L^\��&�����
0"�}�ݾ�2�;�{�5�z��?�YO��R�ԊYB}�a� q���#����d(c
-�l���
:��4��g-���=얁��uC}d��P���$+�bڴ� �N&���n����KB�g��$�)SA��x+ǃ�6y{�
��S�>?r�nN$�
�SU���;b�1���A䟛�	*�g�����^��O$c�f*絷o�sX��� z��
-��_7s�~�5{�}"IK/�E�8�&�#�Q$ȧ�{t��<�
���g8�
����F��h7gf9�4��(��ئ
-��̏
E�!*H���iub1<�\���v'�
�	}�L�~y�jpO���X�g
1M�᎟���(2>/a�³�	(}�
5yk\��1�'
��S��}|<`х)U
-��
���ݾ��֛�\T� �`0{��M��]��[��%}r���@,
9B�f���}C��*cQ�1ڒy1�S�ĭ��K��'��t�Z�N�e3�3�
-Q�=a,³gҴ
s�@": e��Ș�l
6�z��;�:�ts�3�h�N���鑤_}z(ے���q._��� �qz\�&���I7oV
�|�3�m��D�tT�3�  T�_t >RU� ��{�%{9��p��
-8SQ������'�J<�U�����n�3����\��[�{뚴��,&�C[!��lI��D�	9�
-(�qg�YzżxJ� ?���j�l�d�h�>DR����%�w`=u�U�s����6߸����ϡJ@
?�)�� ����E�c/�8��wޥ� �2,�����47�nu����D��AǬZ�k2$�T���Ai���g?�%	l�b��
"pIJ ��*�P�H�2�V�N
-PQ��`�&�^��c�P
 t���*#�r�ɹT�L�fp�‘�_��O������i3�e'���z �����2]�ίh�_ y��J�m�����-@��f�h��\!�(�I�(oV{2c
-#���z'�c��D2�
-ɿi8�����֝��<��6���\�[p/��N,��m�E)�œ`IV�Ny����$�U��I��|8y8�I�U0

���MTO �f!*�]�Ȣ��U�ME�\�PA1���YPX����>d
�p���,?����X�u
))�+G�O�i��H�b���
-iџ\2�ۢ�J~�|��ٽ�Ж�|���?S�Hg�X����d%-�����j�%`?q*s�g	xw���P����ՖLP�
�@6�i(˦"+�qUl��*�۸X4����=�,32!�`�@��@#��ƌ�i��N�[(��ݸ�)�M�8M����wGK��ԓ
�"�Dk%4d�I�@�0K�O��=Zv&��Ș}��+H/%^�z��|�� �ҿ�x�1�tY\H ��
F�$~
>%@'�7d�sK!�W�P��.���,
����\�XN�
IM٬U� �y�ѱ�����K
7$���Q�I�~��A���X��K
�(c���KavP]:�Z�)���v{e�x�fg��u�=^vI��� �
-�宨��e���P�D!M����h��R2ڧ|@J0��x��7����=(*Y�Bri����y%H� f�ޱ(`����S���AW
B	�� �$w��(�#߅e��4���@��
�s�֌��
�q�b�A��c�\9��
�GuK<|�X��Þ+\Mf�|؋q�~,M�‰�5_e���,�l�j��Au}�&�����Tn�6�Ys�/Tw;K����#ה�L���L��:V�A�*�̭��
(� L���E[r���x;��
~�b��]��#��^���z$���3�=�DYx^�KJn�
����F�)�H��@)�ֺ'R�K�i\V�L����R���	���l�����8P�vQh��Þ·��y
l��n, at V��5����,/z�=h�
H�[-"���x�oב�z��8%%�@Tɤ���ï
Ť��������̂!�oq��^u�9B���p&S�F�����l��2x|s<�	Qc���rʢ�gDR�;H�Jrn/�?unp�)Kr���	�C'/�l<lQ !H�K�w�_��)�m�۠?��,W�k��z�sɠY��������W=L�|����L��R�j 5S
Y�f�W`���ܡв|�L^:[R� [...]
-W��ݓX��_y�U�<t���O��w�tϤ��q0
c
�IzT��dBmń�X�eK��=
�
-��ܨ$�4bXvw�ǝ6D3���a8X湐�1
-�^����������
�[:�G�N$:�
 �]"˩�J���̦�B�����g+�1ƉR�CV3�4�I���*�>�V3!f�`�Q 6�#a��Ģ����
��8ߝ
1y�H�;�b'J$�f���+f���z�FmΗr;R��&>���ۂ��{IO�7ӓ$����\��{���ra��b�Y�]�Ruy>
÷��"c䤩��m
���@�}I����͑Ѡ�����%1.���E<;20-�

-���$�)���QXj�(L�¿�b��N�	وL
�8�O�1L6z:ة\
�(�t!
ّ{�\�`�SfS��<\A�k�
-j�9�@ ��>��"�� r ��c" �k��3��k+�{l�D�S1���j�pSτ�(;����WC۝s�D�I����ܞl��z�"A7
-_�L��$��u��jdw�0��Aa���k�I\@ Vӭ'�Gp�s%�e���H���� �"d���"X�-���f�J�%fdf�����v��LۼIя	/��e�UcZY�,���8�v�дq�}���{�j��avjo��
?I�x�/�l��żd���R�'�i�4N[�1�����&���ਤ��z<-"����
�b�1B��4�%���Y�-�	�T�ۃYˎ�.��6LN 
m�f�R��m�x0����L��^Ɗ�A�״�e�|��5��1
-nX�N�^�������G�"���0�+Y��$4qJ��6#1�":M�b��a �&
m�$�t4<J���@8'�%ēm��z���8�l�y
d�m,�w�P�/z��M�'�E��W2�	��!V�T�&iޥs�����l�y�Sw]A�Əj��[nZan\�}uɲ
u{��*�ix��B��K�90W��D�|&f���)����y��k�U��)[��1�~d�0Y�����,��r���GT<���u�oԣ
-3��%ٯ�ܕ����
-�p
-�c�
CyQ�10�) �Fy �tE���Q�lJ�M��:$O��Z������KOҧ�����Y� ��o�V>��Y�ӡ�
��C�z�
-/`�[�m�ޝ�n%@w-� ��fI���Q����k�K�O]�U�_��Y�����-2����l"'ě,Mpի�
����W$�%
D(��|���+�T�i��,���[¾ۖ
��'�W�$
��>µdz�[�p��/xM�=Ж�2��L�P�v	@@S�|o�2���<�
��F�0�
���nۤh��˓��0I"+�aA�7	7&�S]����P�Alt at Z�h
�b~f�T� h��"~�:���A�jvvs�Aw���#���L�15N�	rL �(+�b�g2&�L�b��3�����*Q�7j��B;�Q� ��8�6ۥ.U
��
*<x�sr4��_�.�=Փ+��P����
�&H��� ]4pբ
�x���`a?�b�6*f4]&&�Z�n�
ي��^��'�?L��t�WXpas"�,SS
n�@�c;v�q{Xq!#�F�{M���K{5v�d�Q��y��"� ��	T�X�A���
$2��\Y=���c���	t>'�(�-�
k٭�E/1/�ఐ�zTR���,p&�
�܈l
�"�2y����aCԝ�.�c��E�L�*�oZ4�i�"�A
-:��-�)3Z<�&�3���с/�ug���γ~��
G���qz`�
:8���<�J�c^wQR$�d��Ư����DW�5�3`�`׉dJ܉�P�(hY0g|ܻ�V
�6�a�R�4G�=��9�b�sv�<Y��B�$���IA��7�j��t�<o�����qz��H����� (2c��:?�5)a�!�NSA�WR
/a�Y�
\� �jb�a,�+jr�Qy\�$u@�U�N�H?�
1#%���-E
-�
�	�pn
#h�� Y��J��'��x�Az��j6��QT�W$���2�C!�v?6�|g1ĕ��H�>����
�=�Oi�=�0�r��ŀ`Ib�ˊ	�{�}J�I_���)$�NG�Y�G ��b����6��sY8���@u
LK�4Q�,:j
vE�s���9�~>���x&�?ȋؐ��{5M�oؓ�'����&�~6QE�^�rD'۹!P�o�ΐ#�%����o��a1��A�Hu���A5�[�_p�O3
�9]�:
-�}zTa�N<,N���<�	��h/׳QQ����P�|��(6*�Όzv��z���J��]n�R.��V
B�i�{���M�
�B&�L�ڡ�5��?j��8�6�Q�oӆ�r_h"�t��qP��X�Qn�Х,���~�
-A�'����Д}f�X$��H
*�%S%�
U/���\>vVtX��t��zR~��̝��ä��T�
<3<���s��G��M�l�+������Sm���n��f.�~�T��D�KD��y��L����9w�L
��\���SdӼ �����ȧ?�W��Ȯ��� ����
~oB��(D��$2+cdvU����+�{�`LS����f
XI�L�9�G6��W����279����4C
�<�P ,Έ �$�Ew��&"[�U�DO�f!��\���ǐ��%
��k�?��An!�Y���3!��nvc?���0YL(a���f�:H��
$i��k+^���
����,���޺�p��b�Xœ��ՙɸ�h掑�
�E
����́-�bX{��L�8{q$t5��J���QT��Ҡ^�5�"�L��,`�x92�L�q$5$D�@NJx�J'�xb�oj?���s Ǎ.��3l�w�k�ܝ�+�)(OeЭ�p�Ns�1&;��fE����0�̥!o\zR��3Z�h	B	
(t����b�IOCs3	1+9����)' �͗Y􂕎��
���FU����&���2�{��!�18�ޣQ]�����$.���%����@t�������ƥj� E�b?%:}��#V��,��;�Ƕ�I�
@�=���lf��
#�;F,T�c��
�!�.����խfXXa��(�$큹�����AU��6�
!/�`ҳ&�z;�:��>�R�ҟJy����%ê2� ��el�'(v�j���
�-�A~����r�-?�#���7*����J�;�$s���I��
��
-$k�;��u�>�a
\s3F�b�Y�a�3��3#pZ+� cU����V
-�:I�a��HK��$i�A���C"|�<��A^U���D���bIw��@�f��d�?_����eF�4�
�E��4�'?��᩶m�����l���:�U"o��Y"�$Ǵ���6e1+�ua۰4<5�6����G�o�H��Y��@H�_���P�HQE�����d��E(ٯ�\�Έ��—}���Oh��K����nj���R��jY�E��Vwv�����鍲�8âԉl��'Χ@��c�2��=��](��M�SD��R��$R�Tɨ.K��о�J%�3����u��Ué��HT�I}�m��R͏[������qҶ�Z$КeN��	LO�+	6�U�&P��
���ryV�D*Y�d�b��b'�D�x	�6�ы��6�|bs�n�ׁ%�S0Nv at J�s�^��6;F��f;²�e��80�kغ�HyO
���t�(�U���"���P��+2A�sq\��B�
�a���D8,cdzX�j8v*���$�
�
y\�ITN��$�Z��L*
$uZ'8a�/��bƔ@ǃ$ [...]
-8�N5Sb��)
-~�XFL�&Õߋ�O�ݿ`'9�P�*(��e��3
�>�){r�] !(BE���0#c6$/���
�qtm���LI[��	�r;6k�y�ԋ�=��(�k�����w�A��OCc���=�:����M�����P9������
��PA��7PA��/��F����
y����I��^ t%Y��@���|ԈQ4�
M��5��}�)k�:
�Ɯ�
-��
��Ԏ��y�>
q�(�S��Á1�&����Z+79�����K���Q��g��qa�<bHԞ�}.�>1y��9ퟹdM��+�{�+����JY��%Yܝ�\!_ґTߘ���r��NV
n'D(Ԝ��	�]
��
�i)�40|qGf�)�ك��c[��4]�ld3��{���L!B@��Ζ%�i�o��T*�طKB<|�S���$o��g�uN$�
,��pYp:� ���!5[\�t&�J�7&�^��X�?��!&3�
��`O�ɮ
I?͒P��wRH�!pb�pL6���-b�e��FI���j,P�����\T2"�gg+M�؞�$?��Eۮx��ɠ͕h�,�D���5�n~�xV2B�9�h���w�sA�	�5dD��ow��dD�
a8���B+�.�3�@�(��.-�kᣥ
-M��߸e;�I�T�k�B߬-��w�{Z1�L�'Zg��H8л�mI����W��J�Y�rj�u��Ħ����pj�l�	h��ߪ�P&D�t����^U��Z�p{$l9���zv#Æ�>.f�S�m�49v�M�L��Np��EJ�
lԚ K�X�9Z����r :��1Ov�f�ǔ4��O��15��� p�������?���c�?��
-�
�
���+AW���R���
,����ͣ��
@F &�
�
-�-�!Ӏ�Ù6�BWtvi��r�7J�3����rQ2xSӤ��v5��j������x�=Zj��Ҙ��K�
-,�A����]�����bR�,u��̠��|�*D�>+�#!�
�D�Y-��2Ϧ�&
�����R����[���}�<�[(��2��6h?�4�9�md��TV��K3Oj��K��
D=Y at 5�6�����m���9�(�
� ���7�����b�PLN|.��Cu�'T�20�_��#���w[xA�;�o�1b{����I��R���/T~=3N2��Oq�
-"ꪒ��gM'���t�.�u/�iz�}�8��	�	H�d��{ @�Ͻ=N at U����ZD�'R�h����zHss!JkW��q
��4"�
y��
��[fYWtĖ
C�I�Lź�!�@�
-�j"�'�A���������H2�G�o>yH�(}�)`���>��]S�
Y�	���Krv$~��
I�����,{��be.2���y�^��A���|	{�6r����8�/0;�%6Pw��G���
�Y)	B�l��"l|
�bi3�}�Te�Lɀ)�dڝ�o�Pk��
0�U��l���O�O�g�e=V,�|@3}fi�Vgh�'6�_��
�����S��LP�
�|r�c����X��z���
ʚ
VY��[�&�-��
-:bㄅ
uHr�x�l�g:)i�
o�ؙ\�~>î�8
��"���#9(�X��W˿ {�c����g�
�T^=D��1s���L&Ű[��&�^|ZFh5�j�U�q�d�ҋ��#�z�X�Ո"�Lԡ�ؚ��p���j3jhA�c�4�KTp�V�
��es�e$,ӑ�6�WH`�"1��X�
��P�vM.�Ж/E��繙l�Z��#,�z�˨�XO�c���H�
�r�}0�F�;Y�����;�$}��3�>���^�@�q�ٛc�>̎��X�K���: ���Um�߳��芠��L|�e�L �����A���VT�Ĉ!�Kd`����tT/����I��Ħr����B�i�V��}À0��@�Db�	��_֥��f/@�MH9G�����ig�fLx�Sl��Ϙ��+b��V!
�Ql�x%�n��!�,�Kۗ"��o�J�
����'B at t��� ���ApF�)@K�}X���L5��z���JR���g� Q�N�y�n��R��6
�1
-`j�OK�fl��'�E"]!�g/�̻�����yc�%�"a)�&zJ���������[hӆ`7c=eJ��t����8�H�~e\�~�ه�0N`+˙�� D�F���6E��|�5M'Z�e,uz��r:�P4F�!)�٬�U���\�,�Bղ�� k�DҦ��)!hu�ka�����8w{^^uu��ѡ��W,�\�$��d��f�(oׇ�.�
[@oL|�����_�m@�U��:蜩�N"��j�A�3�1
�l�
 w_m�.�RL9A�y�����PL���/�/���3�1�K��=��eA|܂z6Ɍ�X�#9 yNS?Pq�Jv�6�HMsh���Q��8���܋�
,�=�eiMM��2K�]U3�����ũ��a�0��}�d�0���N/�8�*���?`f�bj��S���Y! )E�ag�Z2��w;�c����*(@�l��uZ"�&]YQ�c)�<�`�0�lT]l_���k(7lg��-�Tϙ�T
� "�t��06��ʹ [...]
-�-y�i
��
��q�
-'I�ib
���b.�g(/G(�[V�0���
�� �6��ty�fq>�o��̌����Hi~��+�X�p���k0��q$+�3��[5��))#z.���'��
��eqK8���4���4QT�Q7��v�`\�%,
��fIJ�L$�� �%�-�jL�`+�"����jEo8iT��0����+����Ԗu8��i���`�R�Y�zs�p/
Gx����̟�
�
-H�s0x�v�
-м�Wpl�#�I�`��=���PBk[�l�4͜
b��N<��U=D�����=��4r%�fl�\N��O��\�
�W�
�:PBh�$�%���C�Z� ��0�'և�D�N!4�5q�+�E��n�%��u��(t)
-�

 �,p6�_#n�A�Q^�vmM�b!�V�K
��\�WP�*5-Bd�d����i
'ی(*%ʓm�M�\�*�^�5Г>?MK#���*kt^#g3[';$6o�Y�>��%ҥ�R.�`iF/�4������L�qD��ki��˸'�3�I +p9&:F�rM	)A �*2^�U�(*+
S*�O�����'Y��])8r-�x�ɷg
 D��K�Ii�H.���>��
�
�P`ªP��ғ���*	~�1�.
��u�x�9�DE/�r0f��j�p��r�P�DG��<+
F
-����E�6^
-y� e�q:	�Cj
{
>��8���W�o�V\���
xK�#H|����b����G����Pm(%Ն&�j��SY5�������B�ѷ�� �*�+

�\@.x^��
�:du讒s>5$���N�I3,�I�I~�!a�&m:d���ᛉ=UuV�;"�k�%bL��� X*�%b�TEĹ��P�e���9�-;�llw�5㜜��‡��
^t���J�Esl�Us��<޾
-?�cb���W�>���~�A���c��3�.B��򆔋��h�o�{���쏝ċ�
b�$l�2
:�e�
�б���ؿ�$�dh��EY�� _�g��!��^�YЧ�PhˈyK�[U�ɮ�B���l��'�O��VQՋ�^�Mj�ڄ�9S�2���"�5�贐պI%"$A� _k�"0�"}�e� �5Y��)k{�Cq�G��7�a?i�&U��� G&�1}�E�X��d�	��ʻ��>�*��3�ê9#�|��l���
�V&��$��
�%EY���:�
�U
�rj�g�k���G#��ر{Nڋ�W
�1��-� Iv*r��J�I�Uo'Y��
	4e�����m#�%�gwA�_Q�
-d��(�zaMuA,��Dx�	�w��!�(�KV38QH�^��{c�gr�v�%獕1=*�L���$o0����]����
��O;����-F��F
D��R��f,�0����!KGi"/9!`3�O
L��=t�%�}xs��U���y����|M*
����n0�X��LϽ�Vk�ףeXz±h��Tv��;�~����عʣ�� (q�U���U6��
}�3[PǸ�(�9�,jnyrш���p���&
<
"2D�T���
4����K��N���aH�j��q&%�N�]�2zS_�0`�R4ٲ* �}�XO�0���Z��H�
�Q�+���\�
�ܚ���g�Jz�����#7�a�?���Ɩ�.X�
~���3����tb�
]?��6�!�zT�p�#��X�2sS�Ͳ0��B�:�?�B>������l�)��Hg|��T/$�
|4]��:���s���%�|�H1��
�zH�'�)]P�j	,$
����l��
�X
$ [...]
�,�4J�g��*Q#�+߯�&���
,-'�NmѤ���l<�*�e�?����M ���=,�Wf��r
vv�F�YN.�T%���jѱD�U�`
��,-����{�n�
�p0x�L�PQ�DL��g�d���2���^?f��6�N_Ӡ,�<�̟�`N0ת{�m�����hs`{�&(�� ��-��
�YƜ�Β;Te�l
��!�X�#&�2���0}Ӱ�ZU����7U���O���o�ș$�*|��I�姇 +q&�� ҅t9�����B,�O `f+b�Ы�b!�=�o8=f�uS� خ�%�v��1��"��eV��e���"A�R��&�O�m���L
E6OP��G$y@�
�r
n���Y#�A��1��fV at Y]�Ŏ��h���R���/�4)

-��vː
-ev ;$I���Y�/�
��L�gF0hBd�C�MF��T��MUr
ݨI�L��n|:Wi�p�%��[
��?C

P���M at uz���4y[��f
B���~��[H���羋O�o�?�Lp��䀰1ٳrB�	�+,`�!��7
-oOz�
�W����m�QA4��E��Er�K*�\7��}
��������"J ��G��b��
-��4*ɣ�d��<�L^X۝//��vp�t�� ^J��-ު�z����$!��ׯ����Y\,߱T6"
- 
>��MQ��g-R�{��
��	��12' �ȌO�M���
�j�J7�����F�2EU:^$$w3w�
�U������
Q=L%�j
�ۣG{����e� �҇4
p�N6�m��3a��8pN�I�W=�#R����e��4�7/�2!�W7�<�rF��G�v
����5�؝	�7�wIDtE9�Sb�Ա�c���*Jb[ :�b�-x�'��X9���  �&�J8V>��Fu���2h(
-��eԋn��9��xjM����2U����W^̐�F,e��%��5����!
�j����v�A�W�
��~1�a��-�n4˙ϔ\�H��
lHE+���Ё��|ONh+e`H7��(�R�|U
��C���
~
�%J�R�K�
�H�~
Ⱥ5���B���%7�#��Q%DM�a��@l
_��QZ�C9�h���#r�f���
~vMV���|�&w�s������{8�n)Q�BϽ��v�%��wr�PЦTȚ�b$kaf\�e�L�빃�U���#��iP
�8u�RCU>ҝ���bRd64�^�
E�d��T
� 5�}o*|΁�I#�
ҝ���)vuR���<g���;��B�
wхG�r��!��I�*G]y�����kx/�z���₶��Re��Ll�$J%�(�X��5M�n��ZXQ���(h+e�Uq6�L����P�r�$��
����m�E U���[�T�ҏǁ Dy`��U�@����St
-r at 1����0��E(N�����}�:Q��n�>LB4Q�фF�z�b���agR*m�zTcI��@��_��m��z��G�3��$�I8��
՚�޷B����N�wt:�:"�������ۣj
g�.�
d+~����--a.� r�i��]�Ԡ:r�it7̦��e�s&��R��� �6�Ч)�I�
�6]NӔ����1��
�fX�u
\`��wו�p�7�
�C�yyM,�&��,���/���	�v��^�c$N9���Z�m���̳B��G�}0�PN�ᐣ�Q
� ���hl�"�V�
�N�?���l�
d^i~@X�5,��@�qP$A3�!^�|,����~�6VVR;\���9`5�3�{����\CDEj0��W�
��8�<I�/
 �x�I+#�>�QE��W�,�L@F���Jd��
 ���8�$�I�i�E�38E�"���"�G+�\0|�m��Z\����Y�I|fG�|q�+��H��R�
�!A�����>0N
�&V
���C�h��% �㩠}�J�2����|�(�R0
�����r@�-2�!���g�F�E�U�`r��{�/;I�|��9�
+���)ˌ��@ү���Ωi��c�f����� Љ��:̒8��sX��Y�S��,�o�BUϱ.���L��
jh oG�^��.���� - U�6��t@\�p�^���,1�y뼣�WC�k
#
�����셌+
v
_
�S�T�H'��8H��Y�\H�������6̦��CsJ
�vS��b�M�2�/Y����C�A������/�
-�{�)�F���,�mg�
-�4
�EǑ�j H�:sMj������
��������*�/��̖4 Q)0�))Ӝ�
���q�iC� �Ȏm�۝>��MI���[30��7�8AB��!JU��/���'�Nj�&{�}]m��ճ��� ���t~�+�l��&J �ع\қ����Σe�1	ԃ�0��nZ�R�"�_UE�0b���B���(�l���.�8�f�� f�`��v7!`�9�UR,
��t�.�6�=��W�;�|��� �� X�@�`��

��L�<��8��(�
Buta;Y��	
-	L��BE�*2�r��l�]�=R�9��X&����daR��ЁMp����Q~�p�Z� �GĚ��Y[Hʼn
-��=��ʊ_Q}SI��ӡ

�lX2�@< �XЈ��4��]�)�����|h�qp�M
�QUK�_?I�w���6�
�#uP�v����$�q�W
01'&�l�Ww�0ݞ):�'�cD��Ö|�Z��0wh�J
M��
v�*
-�~��l��~����X�I
}qՆ���S�W��s�V����p@��u̅�5�� E�$y[~(��P�noN��nx�w���-A�8;��B ^�K�"��Ԧ��RZEԓ��@�a<��D���:���
G�6U(D̉8�f�l��
-�?
�7�
ۆޠz/�\f�\Lٝ�����?�k�
-���U���x��w�|h8"T3(T�
�؜*i�|!n�eL�1�Goq��=��2=��
2yF�C��e�$�Z5��8:Ty
��R�Ċ�Aɤ�Ԇ��$���4�j�`��
p�Ƭ�$�"bzgh��Cz����V�B�_nv�ؠ<
�%2E�9\���-L1�=��
!�G��H:��H�5L�a�����_�E~g��gQ�r;�d�"(=��(r�D�T��E�zg���Ey��������q�0
U�HV�3� 1�a�S���1��1�u������\,b<�X�6W�w��!S-���B�"����Z-
-)�h�W=�!�-Y��ܝ	=�
�u�����
��%*&6����e��X���@ǚ����N���O�.t��86\q���-�6X��9
-�>�(�W/��&�>��&8��Y��~O�J\Б3[�;
�\�YE�,�S:{J

-AU�?H�G�	JPM�,�a.u�syڟ+�%��9��ԨP��f
^2�+;=Lg
-zW
-��n
Q��K2?�͌�R���6���Ro\ 
O<p���)�2~JJ�R~���z�@�b�g�X=zu�b���W@�:�(�q�/
E�-vh5��@%W�[���y�
-PUo9{j��@ ���AM�
ن��;(ZD
-�߄��� 
�*��69
Ĭ�4=d9����ʝYCP�"0�qCD3���0���FY,�?���%
-C���F�E
\s
-?[&y�X�a���+Tªv��!�����<�bdd��?���"7�-��{a� $
-(��uY5
\����M;��<ż��Q�e$�?���Z�bY���l
$ �4N�F��-%/������z���}�����r+ ɬ�ʼDM �����Q�1p�r��,�
�C
��A�AS�
Ew�,
�h�!�
�l��
-�
m
-aPg���p���pM�EȲ=Sw�
��
����RI���81j�׫�f j;�c���2EG�<���üW��a�2�b���3�s{�a��#��?���$ۧ�f��Z誀y����F���SF�3�J�ү��u�D�(�r>f
���rwA�2�{ D6h���`��fT"\V���f��.��CY��G@#dKO.��#Z	�qhe�0�s��=J7�P���^�(�E|� �n��#��r��1�n�
&�!��&ˢ\?�i:k{
3Y7�"�Xل�̅~��=f�qJϦ�>U�����5M=X�i�1��!�����G�� �?�@��� �`ztM��?=��/Q ��I at Z��yh{����"�8o
+�2¤"�F.5�,[>�B��m���D�/��&��,��J#
��<��?�ihš�=����b�#
B�O�'pg�Y~�1���i
-GV)���>�S�Tf���0�6v`�@CV�
�=^��O
�!�sW�Qy
����U�
Bk�eh�1��>�x��h�	I
�7��C���[/tSqo��f�KmZd��(TIY�|�`�K�+
D' R��։
�5�u�)�!�4��5!�����ͱK!���^�qי`o���o�V
6F)��Q}��|`f����߭��	O'-Ii�W0B��R)ɼ)�$��Y̒��.�ye
�=�r	��?�Z欌���c����\E�55�Ba�X��#{�և�	��B4p�A�Ox5�OKn��Ҹ
�oL�F���ZP���
�/
ܞ�f�����y�ʟ4)��
z(5�������f"�ԇ:�w���<�
B2h˔6�a�
� f�o��%X�T�G���L��
b�����9�k���G��i>|[�o�/�v��(&̵3�$�J�,��M��`� �

$��&7 at W%`����UrR�J��L�'2�J��� =�!�8���R�C,Č�3�[<df����;�d2�fߖ�4�ed0�k��d1�x�)Z)C�7�ƙ>���R/�@��q
+)�%Q���Q�)D��`w��sK8,��#n��
P�If�\����7�ؔ�����e��bO�a1l��8
�tY���׉�?��ls��lŪ�|��P��T����R��"���DJ2�w��w�!6��珲!��
-
��п<W.�Ģ�W�H�5!��[3~Q�T��p,�]��l,�y���=��`
{ZA5�S/Ld%C��*]3�!�b�fs��- a����y�F�.e�]�:�a����*���^��h�;s�t���
-i�"'|�_�tR�γ�3�d/��.�fu.�CQz݄������(�t�'Ԩ�E�`Թ%�e�
m4��uK����_X���1=�d���
��WR�
�W�h�D���Es"G�@���.�/����Bi��f���DcX��>����n�B��KФϓC���8�?&�G�ۯ�n������=�V��הd���O����~���������'�������������ۿ��o~��~����O��կ������;;�����~��/���ߞS|qq�g� ����}��/�?����������~���~����w�a㶷?������7��������
��ï
C��MS
���3���9��������?6z��o�M�_��o���]�������w�~����^�O_����o�����箁�s~�o���w?���?�O?����w?����|�����/��~�W����%��������o����?�����̚���~N���/���8���_��_���8��������_��?�Ez�����_�N�����Ͽ��B�����?�����o��o����'������_�ٙtN(EZ�"oߟ�*���j��eY~�ڟ���6���>���®(���>$yɆ�Ǚ�u�VHZ�h4���
(�/�sr)�Zs�������la� �@�x:��_���
'p�F�
\�/�4K4���Rc{X�����A>���3\-�f�����{[#�#kLg��f'\5��U}�� ���A(�w��mW�B�g?]���R�tS��
A������m"�+p>w��!gWAy�n��R����H��x���l�w�����L0W4� x#V|�X����R���_썻�h
� [...]
-�s�yb��IF���g+*X>S���������2��R��{s�ьjϛ5���6��_4�[��+\&�5ǐ�o���ٖ��o�dO��@.оH��//�q�NW��PC�ŗJz��|_fol1�|
��C�w��ޣ&|_��Wͫ<�}�زy:���a��u�}6�}�͆��9�Ig�ʞʬ��c���~�&���o�"V3��7k�%��y� k�wA�'`��>͹� �%��Oi>fϊ�g
�ˊ+`[룪ld3幵/B<���^�ケJ��^ܹ�*J��(������6|6�����|��w��
->�g���
��x�I�,_L�2+k��

-`�8�t�?� ���qӾ�?������w�
����������!X{��_9!Ho&���I�$�-�7���Fk����5EW�`��p]�I f|�l�;	P�y���N0�W�VD��W�w�W����
-��
-�>2?�{o��=H�>��o&�L�ZA����;��"���f��n�ſ���_�{���km���ƕ��*߉3�nY�ĝ�i����L
j����Cz:��dz���u������[&M4S�|49�cΓu�M�u�;�mo�¡O 5��������8��"�S�,�;]�m��NJ��{�;�QǍQ}"k
��"���D��/l���t�H
1��R?~_���
�+�{e'֋P(&����"/����� ��M=�>�S| �C�������o �e����3�e���s����?\���=�)��>�q���;n$r%ޗ���pod+-
�E����u��+�fG�+�yg.�x/��� �0)��]ȈJ�?`��
)�X��|�r��>�1�?y�K�/��������$�
�����7�N�7�䓫�
�D�h3����+c�
�7
-ߏ/��+��K�w/�o,T���Q���/CI-V�uߦ��E>�'>�~���ǽi���r����"�F��=斘\�O5ik,��C���s�
�����X�n_�f�?�Y�)����E�hd�c�����7��c
�+�^&�.9ͽ�U��{�~Ȣ�6M6�1h��>�ߞ5N��Ti�_�e����|��[n�.�G��-d��zLN���h��R��Ua��c�1�|{�l�}&���r	�{����޶�ڊ�w�˒ư�
S�
��<L�6�x�����ϲ��뺍O�t�r��zzy\֗?���T��Q���V��s�n��4�p����G����تF��2�\�k��F�1��!�F
��?()Ⱋ c��������5o�eG��_�f���P�|X�)
-������|m���V���n*�?�LWԸ���}�}�-�7��
�nR~���c�Q�Dx/l�;=���7>��1�]n�O����$~�=
�����Ph��D ��=���qcd:�~�w�<C�;���x[�����f�����
|({}�T^<دN
����cN3���/��wy
�+Pa���
�E��~sA�U[�6ZB<�
-bבm͠�}֊������\X�;�e��U_a��m1���I�E ՝=��v��	#
��%��w{��?
l�w���!���O[�"��7�f
y(w�g�+�dL3��β�
	�G��
wX4Ȏڎ5�Z�k�7���־��bM'P�0
\�/�dL>{s���/�YX�
DOь�_�W����λ�q�/.��g�������v̻�?&'m+?�
��� �#��k���aP[
���s�?
b��
j�JW
�$�K��F��r�Ȫ�Hf���R��F�l�S���q?�	[$s%A�k��-�� {[�O�"�����X����b\:
J�M��H��@
tTެ�E)��6n/�O��k�� �}iػ&�
��q�S�>/��/x���s�g�`�-ǰ��Z���
2��8#0_���&��=���,n�@���ƺS���S�v�F�3�
�~��_%Qh4Q �-
-#[���n��bݚ����z������e@�񦴨H�<,�VG�	��:�m�{�eȻ�mX��Ű1�@
��#�!
O�����8R$4e�c�g��t�$�V �W�����<�;/
��B��c��,B���	�w|��^��`�bܛR
@��FXg��
�&m�u�
�?P�M�n\�}I4�H�����t�|�t��V��/��	��o�-���z�H<f���O�^)dl�3^
�Gs[w
UEK�SȲ����hQ+��
�j��J���:���}/.��L>�� �շ�4����#˓3�,�'��WoL��A5�M���5�M9+���OD0/w
�
|�#�(�����}�ǟ^����
	I9��h��
�^l�qF�}z~�F[�=�$�.�6��;���fF�Vfz��
0!��Y���h���k�ƈU�Ky����)�w �=�qG�i��|����
Y����r�����;�E6��ҿW��!���J�
e̻={������(�ɽ��YVR���Ii�D�;��#���s�Os��4 �߾ ����
-
��/0f��
$*�tTkܞ:�!�ן�gUT/�{oP .5���0��
-[į�W�D
��؋������0����\
DAs��D���*�{�XV4fۍ��<Sm'捞E��r�����/�
ƭ��9�h��F٥�=�����ע��ќ� �R�֣��
j���u�t$�m�흷
����Ը����
�E"����{Y4N��}g�|:�C���Z܁4�XR����B�Ճu�R6
ɇ͖}%�|��$�������	����:��1�X=�C�$0jQDx&���<S��e�+C�sj8�h�\����h.��#֩��6���ƅ�H).n�`/�G<�1Vdd1ۿ�k���������㕝iz��%�?�Vn�e$r��׎��x[�ǖ�+;�T�}�U����9�o
��C���z��nbI3�>�
��'��w���U+y|�f3�3�iF'���U9N�}\L
�����
�1 at 5d�vH�֞��%�U��@ �{�{��[������;�w�FV��2�>��PG\�l�
A�����A��וs��*��'�
-h�;�x�;C4W�UiN�Ŵ5�
��x�W��������c�d�&��=-{:�ޅf�8k���/�oB
-<����Q��a
KJ��5#ۊ���x �L��f��-E�����$�1�'R$�a�@|�R��8b	4
-�s��@�����҂a}3�G���w��}0�<���g$��h@,N�
�-�Џ�����w8*`�;O�[���"La68od�E��̀��r��@}�a���,ƀ��
ڰ*X-�a�S4�[vӢ��Qk�_ƟB�(����M/�_�Ct�e!wn
��
����{X�qx�����(��̩�&8FbWsk�z"��~]<��K9Zy�ZQf���W:���(���.�n�
HƜ�X��.��gW}Bٻ�&�jdNqM�w
ؔ�q���"e~䎚zU�
qc_'�b�������s���w6W��|#�]b�Y���ˎ_0lg�
C�:�hf�8���ָ������ӛ���uݔ\�I����g���~<A�t�7_�
ᥰ��\���Xjzs�El��s��P��HK��tW/.��H7E�B�=k�'ޗO��Dh��������o��#����O�����o�ʕ��|���
��6⾬
0.�Ű��~��I��0~C���ɣؑ�Q��1n�?LA!7��7A�5�~{HD [...]
��jsD*Ǹ���/"F�u֘[l�J�Y����&՛6B"r�x��W%j@� =���&�
�/wF����
d�_L�?�t�Z	���c��V|����*��eЬ��n=}�C��|vwZ�M)�J���ֈ����ѿ�;@1"��,�����=6*7����F���S �-�q�Wg�Q9�g�
}�=`���h���
-�®@?PZJ�c~ԅv�ey�
c���8"b�8�%�yd�_��h*� �DݤF�w� l�v6�k�xcX�n2C��"�@��Ѱ/٪�4�b���?{�GA=y(6�
"�f��1#w��r�P����{1s�Qs���B�q)t�^�;F�����
3��
1@�ٛ��\7�z��^�<W��⍾+�E��b���kZ�cX����f�
�⌥5`g�ZKDX���YҴ�=y�x�2
S�Eh4�����_��;�|�
�3��i�q�U�^�y?��!��
��Z/��(�h����ć�"r��F��ݑG�w��fi&���z �D�~��S�&X���;�
#���r��X{�m�)J;5�X�u|J� �FK[h�{
�P�%�����d��`���+3�X��|
 p��ٵݾ3�/�2�Ҏ����0�r�$6���T;�e	A�;�NoL7�.>!�k
�I`����P��t�=����z��U��h�p���Иb���W����t���!��
�Ur�
Uû�H+�`z�-{�Ezd��!C�Qw_��e�ݚ��q��m���}�!1���N
P V�~�p4����F�YK���;
��T�xD��2x��V
�n.$[F�/֘��u������-���S� ��d_�pr�}�;�Ac"�����`
-uAz��rLD��
}�!����f���3_:���6���ҥ�//�w���}�Tpm�w�W�F���d�Ƥ����e���ڏ�0/�T0����|w�@�M�h2{0�#�Mc$[�e`����
��V���k���
P�gCi,�*�O��L�a����Oo0j�pC.Ÿ�9b ��;j[�Vqߕ�bS����&���5D�]$z��U�p���C�^[�XЯ�П�+��zC�B��b\f�^�5�
T+(�[
ŏ��D2۳Lr��逭gDmJ�}��6���=L
�����N�p���Lv����
-������az8ָ
��1�'Oh�7�b3沩W�682�r鹵-j�k�j�;��+L6�4
�HP���
�耪�7~���.*,�xm�EX��F�	
L4��o]Dr�]������6
}�+u�/^e�S��1Kj��5�D{2B��lﱨ~��Z���	����ָf j��ݬ@����R�eU��/�1�-_����y�a��̡�bѠ���
l<a�c �
�?\�E�4b�[%�{�ח0y^�
fO�W>�N��7_�N����׈�o�מ�3�3f�0���1�)௽�(�^��]]�;ބ��s4�@|���|�UO*
����"�}
��/���gO���[J���^�m���4W��e��go��� _�K��2���ƭ1 �LU�f=͎u�Ξ
�(w��`��#��@ID�xsh��:jlAP=p)w��Yq^V4JM���ȯ�;���� �WA�Z+�l
�rh͜��X3�l�Eչ�}f�x�c-96�5����?M�V)y�mu� ����W
kK+�"Wqm�Rq~��������8���i����m��5 at l����}^�i
-��/�7�h�+������b=o^f>h�%.��2z�K
�����#��.��M'��^��l��$�t��~�� �|��'�:�y�xi���.�L��6^ЫH$�
-��^���h�:��V��j� ��
�����!�����Y}��V��
����6C�ģ�d��:��m��d��UC}i=��r:
zB��|h�8��,�F-����H�����3x
��Ƒ�C* �����5��k@ �&��r�7\=Ag�ͳď(��I���W�B��=�#ղzZ�
-ل�����l�O�}��>�thn�n�"0�
��
%#f�(g�9��fT.�����(ol�
uskxʅ3�˝�{�����=uir����@���1'Ϩ�	�aw�)��+�-�9N.�~��=
-��>�e��?S���֌�)ʁ�AH���-w�z��)Ʃ� ��i>j{
�P��_��mD������W���ʊP�=~���!��G�3���,
IP\��xԿc?�L�&��'�G��ԭi�M8ʖ��A�} i��J���o����;
��.n��`2^�wx�d�
��k��b�ł������� Y��(�`,���]�>�G,'�	g�8�4F�[��81&"-����q$�_��m7ok=΅|��r�����������Ϋ56�.Ƿ�;Z�v��|�y?�b5�����r�/�}/A�	��
]N����s
;�)�.Z-džK�;��@RwW";G3��������v��W
�3z���zkD�k������y�
d���1bUm�~�ҿO�:	���|B h�=��'i���֕�
~��f���ߛ�y�]]���r�]E�`����(�)�
�s�`V�e[�de1� r�2#���@�U��
���
��̚\�ھ8�������{�bjsOH!���+ [...]
�P��Bx)d�¼K	�V%�*�6� �"�J�9����QE�|�9��GR
-��~]}�Kn�޷�ϲ�C��
�d�J��HX�*��[�42Ki� I���-�S������\[��*�BS��QB�
���
]UR�y�#�**���=�/��[�R&mDH'DiAX^Ii4Ś�gˊ5u�PZ����cِ�E��)c�
 s	�����H)�@[�2VAXQI����YttYl�|��ЂrT1�=*�"�I_F�r�#)�e!s	+h�[�/�K>YA
�0��@(��X����@���ޞ�X�4Xg�#`������TU4�ާB��E�:�$]l�I�^���*
�~�
3Y̼��+df!���U�_ <���!�����wQ9�+ݓ�/�a�gY1f�
2�-@�#1�$�� }�D%��)��'ò��g*�g�Gè�y�G�LУe�!��9�
fj;1h-O�,�%)L����=!���
� ?���y��

-L
�
�y*���-"1�A����
�R����@ $+&̰*
-�#���T����e������BLV�%T�/��o�4o���B����0� ��ta%0)=��r��J��|�Rz)
�R]���Q���B$,���ˁ�k�E��Q�>$.aR'�T��A�[D��˟�=���ȃF��B�%�.3����=!���HV8� #�*K�����,5��E.Y��y!�����bL:]��}�
�*:�0SJ��AE&��'ZHXNg�΂Ha��XycG�*����)+/<K9�X�����|n8���
-b2��ҬԈWUUR����c0*��RvѣL�Y�Ӕ���.�f/��"�!
ڂ�c[Zp�#q��H�i���bҡ��<y�
+����S.d��� �e,�4
LfAQ��<� �B� �H��eà\6�IF!2�4ĕT\"����z'Z�y�i�T�I%��
-&��O�L�RJ��R����N�f�O�����H�_%L
-
��VSQ[y�d�T>L!&	�T�8�W�[��xM�> %�S!OUeU���2�) c�򿯤
�,*?��‰/
��d�[��%Ϣ,
h�T�pE�`2+�$�QYq�
-�ĉ�6.�;�,DD��$&�2j�3�x�Ѓ�F�TI����O"�qy!�Y8Fx���$O�h�[FurAI�,(+��o)���g��H*ֿ*o�et����ϭd�5H�Cl&�
-L�U��4�)��2�LU��Լ�B{�1ꤏ�f��h�]I�TI�kaY�
:­��j��* HNK%E�t�>�����g{��%td-yJPh�������tP*n�g��]-����c��lSKE����S
�dR�Ņjz�T�:��<�ˇ��'K�+��/���M&�P!��� $��
K�w�P�@9(K�>�������I"]I'PːIW�.-
� q����V]��Q��<�]���;aP�t>L��.W.�
-D�5
ѳ>a�
�查�S��0� ����dLb���|�N~r����{��F
�Bȕ@�,o�**�
�rZ���AW�`Q��ѓ���D��r�*��EU�AB꼋E��A�‰4��J;��h��6���b
�|z���[A��#1�X��g �M-���HH1�#�L�
�
0� N�P*E�*�Ũܫ{+�k�QIU�����B,:E��6�ȇTJi*�_Sb�8�+B����A��yoQ����eU>��QA�EC��]S�2jGUP��=�̅�%$�BYK��!�����ph�iG%���\��Q�M��R��L:{�2����R�L�j�P�����W�hS���r�!a;��LG_Uȍg���
K�E[8�E���<�'�,�7XF�_ at Z��zY!0�,�PRF� �.�PB�@W^WЀ�
-�Db���
-��;�
-N�2>Om���AƭX.oZeT��G*)m%���;RZI�w�PK
��R��P��s�>+:��˨9��,*�b�vf�+ox�B��
/e�S����)[Fe�#!Ŧ�jҟ]Ni�*j�0��Bu�N���U�cyɋu*YT
�F鮊B���}1�|���I�}Y> =I�
`�бӬ|�*u�@�t at 5+J��r�2H!�<`QI��YV��R*G�l�V��V	
-ՠ�!�X�tz� �rO*�f�
)[IF\~]��siКt�R^AB���?*b�J�0�>\8+
����P(���k��A�t(gR����J��*+�y(��+_��UQ�qS�"��Ta>&�E���B�dW
���VR���\�
-}�Π�bY1�!��~��,�y^?���I��I(�:z")E��r���*��W���t�X��HV)]�Eأ�V�2���O��,�s�l��aZ�/s'��t
�I
-��&r�
�2:��B����:����(Q&u��RFi,2D��K'�O)1
x_A�����=�q:����$5�T s�0��<hTT�#!	
5
�A�O�E�|�<5�$B-��xe9]���Uߓ�E
-�,A2����,տR��-�I&�t�=�.��
�%IW)-�f�K)kN���eTA�7�756���Cz
�����՜��^*I�D.E���U �E����@�*:!���D�[Ig,:#�P5PI9/��?}?����+�o�)g�	�'c��샊J��d��ENK���Q4��D��thB�
�r枛��~�_Œ������9t�|�Q�,�*\���%��j���
%,^_�tu
[Z���>��.ʑ�2E%�

D����~G�I_iI"}j�)�1:x�F�ʯ/T;x?��QN�K�\����c.�@B�4��)�R��ץ��)TZ�FB�K1�(ᏺO}�
-s'���B�T�P	�#sQ
-�
J�:�Ag�h&�5V)
@�ud �@�J���I���*�h[��[PF���"a�_QJ�J���)t��*B�4�}G*����J
���
�P����=[�QF�@'�b��V,U^�*J�Fu�$�ԙ�2�rf!��Jw����
-S(H�Π)g�Y�T�`�$Z&���Rp��Q��d��7�Ϊ�a�K}��a�ä�͋�&���,���R��
<�ʋ
��Q
:5ʢ6,��~��h�H��'�
5O��;��T9v2�:�%K
T�|#�DUҕ�
-u�E1E��0�Lѕˠ���+�Bs{��Ș��L��7M��UQ�Y%Գ�t>"y��
�ƣ��q�����A��n�C��U�[8EI.��&]���]�{�Y~���Q�ۅRB����L*䰜�ۈ�>�9�TatP#T��B� .Vf�����h�^UE归��ԜVVQs�ą�(T������
-%�dK%ғ�T��R&�ړ�Q,V`�dNBYуU�i(�'Ƀ�����*VQQ�$Dy
-
����3�i�L�\��/�N+����
����2�i,�T���`��.;RH�/P-:���a�y�Rҥ8˘��Ř����������AݪSU</^�Q<��i�
-���<�)�(1}]�/���
���xGx1�
�u���"���A�?�.��8�.�P�ϭQ�B�JV>G��ӧ����2�ruV� Q�jᔈ��[|��_W����S�����n�2���f
-+_���۠�����snD1upY�O��
)��PQJy4(OKٞ ���@!�v����=@��-���������������'�o��m���h�7��g���
�JQ�]If
�t2��VI>��(���U'G��zo?+,6��?�
-�%��B@��Q�eo���ͧ�󞄎��Fz
��z�4z/�q��I�����ޭd�J�������c��'o��.G�B'��u ��BPYS�225���L�E�
-Q`�X��
g���?�›Hw\%y/}~��R�t-��h�k�Q���d�z83e�|�4
-�Rt
���S�|���A?|�p��[-
-Ѓ�b��t�?��@�vFap��#S�_mőBS�b ���$�֊o�+��X�_����w�y��1B��Ҳ�<
*��V������)������M�A���8|�?��
G� j��*��^���-)�[���U6�®$�V���F��u�������f��Y�r
��%h��W

-�,%�Bd�����e(��^��9%�+2���M0��	:�,�NM�c�Z�j�yQ�v
P�^��g
z+/&-[qP~��� 
����/G�D{Te~|+�'ޤ��~!!��@y~V���:)d��-LP��,�E��
햣�=r�	��d$ �l%��+�#�Y�k�\o��N-Eo��w�"O��~
6�W�~�]����?�.4�d1�~j�DL��B�bJL����2$�@Xt��L�_��������x������.!3�YhdP�fe�
����Xȣ�7��f~V��	d����]�y�'�ߗ������V�����
{�χ�ռ��C��O��T�V+2�,�����EnN���o�BFI9���i�_�_P�
�W3*ɞ�D���;d�w+���
+�Y�VӉ�=��h�
a|��۞Q6lN��o�I��I3�6`������Mt6c^�4b�����
؜�ؚ��$�=�C'��q|^�
_P�Fm��]/x5�n~�H|f�[��W�ه�S���i���;��� ���b�
�����n;�Ӛ��'����m?驊M��OL�Oa3�δ�([�-<�➴6aW�o��~�z������?�fاp��||�}(� �K��}�G/M�$��s������{�ج�i�o6�]���Uў���i�^�p)��&�����`l<b�ԤlzQ|N��2p��k;��A��8|�w��W�5���7g~����,5';�[u�C����l�f�;/n����N[��u��
���p6��Fg%��9y#fװ	�I��Z��f�按�6�n������OO�)n�xT<�㦝�ބUR�T���
[�������ST��������i��l֥�����נ�`N^>�
|��2�0*1�I�9/8�1�=�1J�UB"�S'���YAm�N˟1��?fW����Z"��e�,����+�)����)z�6���<�h��;���gv��>�V�{���Gڑ��:"6��]t�+��.���G���L��K��N{�ܔ[-ܘ�\�eM8䝸O޳���,Z.��{�!��-�v-ê�޴����KzL�mXk�o����
�n���y����y��I��%�wg�:���I�a
/�����噐^�]4
���ބ�{�p��NΩ�
���$�f���r�g��#�!S�%�ؚ�?��n��O�GSnˠɈ})��.a�Lل�w0WA�|�*9��	����1����#���S���X#N�,�TvG�8G"��Û����I�� �
ܚ��7�Y
��� ��I��'l�ڭy�m��#��bVM��C·Ͼi�������T��Ԭ���jz�6y���^o�#��ޤCݳ5ݹ����X{t����{"�Rv�N=s녘� NA�p�A�r�xI��)��?Ixdmi��#�7�s�S�cT��F����iE}ʮ��`�mN�}�컳��>�������6���Y�ds���wm\���/�mx�aL��ND���OF�����_a��n�c�oNvU-~y�=�]��)+�`��9����=)��p.U/�4H�Y���~�(���a-H2�����e8��l����J�%g�u�S�B�%M���p������� K9��������i�i�N��Ui��H�e�m[5]�#s��xРM�4��O+J� [...]
}�\��~�h�q�&��WG]��Lx�Z:���	�e�Z��W/��}}��g�J>����NI6��IҦ�{,�[/'`l�E�X�+�~=��W�゙l~/��;��y�H�����;��ӹ���ᛵ���E�;�I���_'#�zuʧ���j
̝6�7j���({_?
x=.:�mSun8��#'���]�Q�a�缃�Q������߼���ȼ�
�#7巘�N
��8� t�SڒuK�S6α����g���[���:
�����_w���`䱺!>#>���
�Ns�z�S�p��??���8���ݲJϯ=ig�?hf%��N~If��c�w�kODx�/�=f�i'
ʶ�SX�
�}ts���
nM®�N9-�Ȃ�wsBی-�٩E���������x�z/4�:���ٚT��~ <�~���
�cl�wl�a�{�/N�r���?گ��{苶
-ܮ�A��=��������WM8z?�]�3�Kֶ	�
�Ro.h6�F�NX�I��
I�7�ߠʡ�2�.E{ʡ�̹���=Z��OX�`���{�m�7�$&ë́shp{�{j{�k_֯�
����F2�4�R��.�"x!��r�N�0	������Ēy�X4A�2T
_�p�m�]�=r1�l� ��Ձk�e˥Lp�
-�=	��G��aή��O6�ͥ�֎}�.�Q���G��\�" nŽ����
:����Æ��f%-Y��ŸS�Y���l�Ƥ[֙t��3!�	��)�˹�[����o`0��R>^
��͆d�頌��O�[y'7��/�AW�G�������\�tKeG�+n��O�@F�>�
�
��`�:�x5	��%��G
�ӯ&:��?����9G2�k�돤�Ͼ�-�
�|�qK�3.a}�+m�]��kԤ���ۤH:�¸Uќ��;���St�����t��Ɣpւ�=b����
���Ǥ��
��S��p��G��S�n�&dg���伨&e7���Kу����{�}�-�~�
o��-����	Ħ%�[�C�8n����%�iS��ƫ�؟CC`��)��-b�ۏ��gq��<�붌t�[/J���
����EIW��$2߽/��9��
jR��c6Y����qcRZ�9.�})<�9���ڽ��6�c����/�+������/:y��~z��w�K�>�yͿ&�d��� '<FՋi��輦g�?x)
�1�����j~�����mN�|�9+8�˚�N�%l���G� |F].`6��V�>Y7�U�'��fܥ�ɺ��,�e�#8�
�Oy:?ܜ��5؎�8���;J�'z>�|�f�`xk%k9n��%]:aҡ�b`CNq
xje��|Q��Cz

2
¾K��}q���V��l��,�t�E�2
�ggi��L�dI{T��y�ɜW-�	�e��J�[T����+bTc��bv1�U�Ҋ�
�wI1G�!�#mς��^�4D���{����i�F�pi�ؿ�W֞�({vV-�2K:
�(�:t3�$��؇a��1��.���
���G܏�>
����.
;�y&`���n�Y��R��qk��'�	�Z�[
��F���K����Dx���m��w����	��\�g�-��&/�#
��D5Q+�pd�k��[ވ9e���#���[�#�m�A��J���7�:X/
��ۘ���ڵ���#�������\�&]NtNZ[ `�
�-kRN������W��a$f�ݻ����[��󫷭ܣ��׏y�=���b������Kb�ؗ�5��S���龏_�~z���K�Z�ٞ��&M�{	��i�1I{����?�����(���~�p*:^��Z^?f�
	ؑ���ü5m��}��� >����
�'CG���Z��6�<n�ԭ=�`�ު��կ��r���[{��p�Q߾ [...]
-nگ�Oy���X��Wn�<�C0vlܭ�N���o�5�ܢ�7����\{"�y��fE��,l�
���l+c{0��P�#iL{�}��N�	��wh,����
]��a�F��3��l�/�&�j�������O'!F�Β��f�8���U斵�L��x�e�;4J�F��ˏ��˹e�.����0����q��3��Sn
/�
���= \���K�@/} |�D�%�۶�b^�:jWtn[��i�V�	
��.^˭�vV
�%� 
����_�j>�D�����;o�Z�&SE
�
\Ʌ�#�
�5���k ]ٚrHc�샑y�:��$A��/ҡ
��=F��M
�xp���e��KK��?�����I��%�W���`�q�������<p��տ�t��Ic��磕o�Y�Y���I��52�n|td�n�{+��#PO��Y�����n��9���
�Z�ʞ�9��gw:�
�Sua^���C�G�y���t���xw��
ﻯ���+���uFw�w�)]����Td����D��i���4���xoU�ʫ������i�F��\���`s�����\���q���=��?=������& ��	�z0p�9���i��
�Hd�s�٣�R�׍�|�9�<��}n���p�z����[u�������{=e�xo���{Xt%/	z 2Ł�D�R.E7��v�W	�`�{2`�
-o{�2:�=�]
�fO���	�^�YU�q��������򞤋w*�f�~����E�٠e4��}Ҏ�W����pVq�N�
��)��.�v�@O����g�r���c���&m��oۅ5۰W�l�c�Ǿ���������
k���4�l�E� [...]
����KڈF!��a�0�`ʄC\��hA&k�:Dg3A��
D�h�,�9��G�`G��E��X��3�����x` �g�.�G�`��o� ~�l� �
wܴ>��!�T����ʒ��]
k�VE/�1S&4�)`;K
�M̡�@��]��J7��_�*Q�3t!�5�`>�݈��ٺ>zv��-}u��&�?ذ��Ϩ�5���j��VU[tNt&2#�Y{,>��>g_��w�
����W���k�����
�1�'��ۘnx72���
oa$��ҋ�g>��n3�Rп�Sxn����ߨ�'���t
����oŀwDg=�������
���pȚ1����~q��;Ͽ��
؁�6&��0��'�Sq	��;v�գN�M��~v��o5�~6�GR��c��#��Ȭ���x����I��\�-kM8`
M
�q�A���[^>�(�^?��^��b�?����䜢{'��$f��{��<�	�N
�	�����K�~�dg�4��4=������X)7؞�����}�x*���C�S��1��
-
t3���0�
�2�3DP%��D-�f����
-Y����x�(�,�y�L����o2f���Е$|�uc�.:sI�g�>n}/�$V�a���0��	Mq�F�H�	��~�<�S�����
-��;s+jyfI<X#Ʉ�ʤWڙpK���i��1��ؐz
0o�&<�1�9�	O'�N��D1��3���=��<O�̓�^���;�zcvi��/�%˅,`��N������,!�d
H�M�4�Y"{%l0�}�������
�F1��g��;��c�3"<�Uf��)��H�va���T�m�d��q��-:cv=
�6�xe�%kB�`�&�ߚ��|�9�;�����aԭ�y9/��}��΋���
5{c�o|Zt&6���׶<�Ns��CS'�
!�}�^�^�z����پ��
8�W�򗰜C�>���O��\{�?��
�3��Ȭ���c��	���'�c�����7���^�r��~q��
�G
6�?���
g���� �ֽ/�n}�w0��	 wúnƝZnd����T�����������;�{��G�=#<�S��.5� ݗ
���_Ը5�ʈ��;�N�~cBt�g]lN։��p��,:)� <�z������m!�0H1����k�1`&����%��͢
��F�a�<}�ޗ��Dh�s̭do� �">�t��ĊV�/��6�A�
-���6�0�6nkf�

��n�ɤ_x>
:7��bq��l`�Fo���-*��e^].,| ��9g��A�D�I��˄t���9��GԸ
�:R�0��-j矊g�r��^-�
u�
-\�O��fB
-
��!ig�P�cE�p��ۨ�W&p���8A<�9n�M8
�۬ݘ�;�9׳p���\'��W���J�^�}ZA&<x�Y;�F~����Lx�
p�
��EY_��e�	ٸ�['� �fÀ����2<���dBzuʣ'���v{�������]�Y���]��%m�'���=P�ۘ
P�W�3��R
�"�r'���
�^�
w�z0�N�M�t�<��鹘ӢŜC����	��<���Y΁�	�1ܡ�>�hs�s(>�h��F"��ƴ��դ�v
�ҋ�����������
t�פ�Ao``�^>n+y~��tsJx�p�4i��p�mbNӉ/Eؼ���b3}��ݩ����-�E&8�yM����/ﶳ�N-?�в��#����z���<�^-�'\:~��fV�A �����L6�>>u��Rl�-5;����v����f�Fm�gn��}J6'�Ҧl ��%�� 
�Y5�i���މWߵ�a�QGYbVX�-H�c6Yk���$���¬C'� ��%��3�)���Q��|�!oM�މ/%@�
_�ޫ����5"4p1	� 
=�T������)�^�r�5Y�
ٰF�%�x@ܜ]�vg5��偫�O-�]�`M�/
^�]4
d�qګ�� /�.Y.��#�=��SN�wk�0��1���&�o2��=8<s$	�Y��\{>�i9!>��=;�:�.���F2�jI�8�k6&<��F co&��:Y6���"�4�R>�6���lN�W��:E�w�K�k�Dd
������^;�<x#�1�kR�Ә��7�o` �7�c�Y1�bi�]�k[�b0N�
�vй1��)
c�
�~�
]��	
�"
��;6�%5Y�y b�H^M�ڣ��
��7l�MF�W$�z�MX�r�wd}ި\s�.=��5p�N�����?YU
�sxhk�"ߜմ
���T`���W/�o2#
�9�?������/�˫�S��al�n�&
ckN�O~v��o6'{&\�֧����fU��ԄO� �fC�c�nϫ{���x��������/{Kc�<���
�xƍ|wʾ�C޾z��7+_��� m� �Y����_�m�Sl��p�<�Rs��/�70�}����I�ꭎ��pf
Z�.`�7!��>=�qi��'���3�c�Ee���3^��
�qX�lP+|�y9�Q�z���)�٨[�
-~���W_K�����;�
9�I�q�I����yͿ��
�Eb��D®�yv�]����m����VSneW�)i\�hc��rO�=�ףΡ��]��=���� lXG��O:T��y�">w�z�f�
U_:�⧃JnnY%{�L����Z���abn���i�I�
\D�8�3���c�,[.%?��=��-n7˓V� ���hm�
��
��594����OxM��V
'�����u@�	�������m�6��tX��,+x�h�|c_l���Nzג
-WB�ǧ쏻T]�-�O�Mٍ��iM��Ӿ�1�;0�
��vV��ܲq�� �÷�^�;G.Ĝ&Y:00�Y��Y
�.
X)�d�-�}���{�_���.
�t?����
_&BzU�;0v�Z�i��h�X���Ɇ��ɗ�k_�N�_Y����zBܫ�%�ZIġ�����}�-�Lx��q��+�Υ]:Q�5rqs�"{>.9�
��,�Fr+e*��%
zAܮ�ٚ���m���
�N��w�
H�v���G g�N�(6/:�t����n����c���!=w����U}Q��3jW��OKk���X
q��,{�:�kw�5;AZ�2�i�%�{=�Z꾶��\�Y�6f�4m͉j_����5l©�Dg���7'�+V���͋[-%�����|��k��v������J.
-j��m�wU%���G����N�%�x�Toƒr6�b
y��T�'����O94�M���v��W��Ѳ��ϧ1� ��
���)�Y���_ه��j����)��Ɂ��M�
�^�>�^��):�]����Ot�1#��Agl�i{�
zA�s�A�7�y�38G�í�Dfe碳���uP��`I�^���
���S�(�i* h�:{���,h����w͹��������- [...]
-��
��鸸z���}d���������.5?��͊ހ?�tȺ��-�8�M��wsA\����G�`��h��@�N
��e���3�o�c_‧`���a
p	%'�7����f��gOT�a��7��\H�F�˦A�#�\ؠߜ��=�
�}rvp$��|�i�;|)
����B��͊���Jۖ��\�ͮ��/�ya
�>�o:��ő�ٰ��J�֦x�R.IStVp2閶e���20�8���S��^�6-;6��Ίi(������m����v?	�,꒷?
��~����	Iknq�R�nF�&)���{��ݘ]ˁ9;�Ds�����-��k}V\
�������	��+fճ�_�T���g�t�@>��%���Α��=���jz?2!8�q�$I��y(?�[2nN)ڗ��01+p+�����b3�j���ߙ���_fΖ�B�+�NIC�%�H�
���l�}]�g�K�g�*_�m�m�Ϋ!%=�
��v�����94�`��n�x�ίy���IG��ܘ㟀�ؐX�(��YtR��Ru��4]�oڙ�s�/��F-�|w�j/��}
�1!�&�=�1���
{vO�I|^�üm�fE
&Eܡ���Y��0���'=G�w��crZ+�	]K���i����2�B-!z��w�����/�������%}W
��>�8M��Fw�#;��p��=:/=�\��`N
?
��g�
(	�
��LB�k
�#�'��7'U
9��`�%iƽ*�Nh�3�o6%�ý���l҆�3�ꧏ��m��Ň�ON��~�^���2�i�1��kkN|f�N_�����L<8x!����
f<dI��lH+=!X}���X~&4��π�J/�~C,YFq# �?�k�
����w���/g���|�_b�����x�r��
�si��l�6�O�L�dp�B*8�U:4|�+��?

�[ެ�Mph�eT�Gn�M
K���9U�	�p��'֪vW
Ȟ�Y+�
G
��C�Y��.?h���#�'�yE3�#v�S�nV%����Fcv
g{VR�>.<��f{Zr:	�������W�U6�l�����ؼ�ukFٰz_p 2);��_��~I�F8� 
<JFx,�.�9e�挬.2'=����,��7��z�.��`�_?��`�f�;Ͽl����.Vj��G/G�	�
�Y��9�0��$��9�w�Iں>�y��k�M%��*Ӟ�+)ǀ!i�
N�S0?;�*��V��
-w�R�+�0������71���������?��~��ޏ�-�Q�N��Xt���	����wp8�Q�n��~�q''	����H[b6�m�ᑄ]�Gg��Ӳs��Ϟ?i*Y���]�^�\�b
��K�Ľ�na���>Kx��I������<M ��9̪�{�b�;z
���	�@�_ُy��;��r!Y��?�9[���]ܔ	
^L��q���~�kԢ�E%/��a��c�
����4��F�y�l
�/�8�e
-��6�dШ��U�K���@/�3��$p�� �CFX�:p$Qί�&��m̃�q)9	��	|�r%
�^56k�*
D���m�m�c���N��ռ�6�8t=����f�'c���[ܞ	���t���V��^��__1�e�y:��&}JΖ�}<
���ˆ�Wީ���͝�&����x@�p�8��y6lʄ,��ߜ[�i�ai_�í\�!�j1��7����q��s�	�Q�M�b�0����t���9QM�=�u��㲚��5�I�7;~Qc��9��ə?�~[�������D�cA�Gz�a�!��tk8ȿ���g|��
���
�(fV|&e7+�&�Mk3�s(����?�~�R������I��6� :�淪{�S���|p�WۏZ��
O���K܀-��1��'9;6���G킳�w��}k����|֯�f��t�[bv
�֗�E��b��Ig�Q�%m��
�L�<L��Nj�[5]�O��S��ش�
�ꉠ�%'�f
�]0>�蜾?�0����[�G�3]�'q����_�eg�*>��t��p�%I�6�-��Ox�M8:�\�q���c7b�O'q������9���p�:�
�
�[�7`������x�\O��,L;A��
-�S
Ω���m7$nKy�5�v��ݠ"&Х�߇�5�%i�
��i��|�q}�룤�`J���G}Z�Ϡ��
�uڸ�}2퓴�~Ew: ��?|����
E斶�
����_�z���W�ܣX�<�ZR�px&
�2�>sN�
�j�X
��]
�6
k���a�
*�v��0���ݕ�ȟ���Sﮨ��n��8�a��M�,�[>� P��3�\"��̒Z�
��?�k�Sny������.�]
�X��NI�
�
�K�<�b�>qK�|2�W�,����
���1����������bnn�����NY��UҰt����swaf<�֤����|v��o6�t|��6�=j��.���z�k1Ÿi�*;�>�;�5��q�.�!����F˦[P���Y��`�S�[�߬��w��)e�e|��DgY|��P���u���g��|X_���7d<���
�@1^�E��G7甽��	k6���#)���E
׭�/H�љd©b�<]�8��e
��Ҟ7���ݰ�������֘��D�&�M9��ȴ�36��ΈkS��Cـ��F����%�a�*�ݚ������`n�fs�w|�	�4��Jr�"�7n�t�ۘl/%�ϸۤM:t<ܫdc.Qs�'nM��
�KZ��q0
-�%@W�}�X�O{�rA�%�q��ʻ ���4����m<<t�gs!�����ͲR�fY��ۻ�o̞wc���ns�[��9i�ś�����]P�m/hz�ge��3��
�n�eV��L�/�J�#����#���W�L$N#�Ԉ�NI=�Qq��ơ�U��X��'†�?�$l�58�^_H��;R�����˹����<}�[5���Z%P�����K�x�y�/O?O��M�_ڕ	
���?{���ּ�:�w?��
N���������]|�4��5
-,(�I��1��7�<�y:d�0>`;�L/�t�3M,
x'p���a<`2¾@��{c,��SgF
|S�~ܧ�y�<~�ih
f��ܒ޼�j�������DO%`~-�3�a�����0���v\�yG?��[��7w?��S�5#n@���O����6�&�2h��S�oX���O�'.
��(�3���'�s�I�9�k
-x��{t��ì�߸
k!���%�f=�������P\v�F��9�

[��<��ڣ"lM.h��
'�Q���^��Kq�M�4�|6��=�
蓿�*���}:beJ�gȂ���[Mx�=Q������V���ļF��b�~�`{��t��6���ʼn�6�jn�k�*oI;�2�˷rޡ
1����Dwū���nMw�Ky�iu�Ɣ�� ���8xc',�O�@��])��+���>�@̣lY�M��/fF
���� <Zp:���a�����U�!k%�
��]
��[���nq#�S�a^�(�K���J��w�I˻O�h:�aܷ�`Gc�ᑨ���q�;`g���z�udzYY-
�x7�(
2���a(���
-
^H�F�����oYyǓ
�<�2���Ă����&��L�ygS!vi"�l�Nvi�R��γ�;��:s�� �C>Q��t@Ύ�{>	��4���*���j�_��w��fc�׳=U)���� �P��

]'���"�F��A�SA�,�����
kY<�;��,�x~˩aG]6��.�
�PxX�?0�
��¦�ݰN�	�x(.8
:>��ifi���^��
�8�*��;���;4�\h�F64v+�������F5����[҉9E�q+�d�1`N8/}��`�G
f�֜�/��p�0��J
q��V��y(n���}Fx���i���i�b����s�Jnl1��k�6�jmN�K�B�Cd����B������n�}��Wm9�ٜ	�T[�7p�I�
�|����~Fx��$�3�7 ��>1�Y��i�}�v&l4w�>�x~���~��׮�M��n�*�C�[�Ix
�-����9iӆ[ٵ�V��������� %�*vڧ��5R��צ��_M�N9���g����A���I��?�
Egkxp�kbq�3���*�ͳ'ܓ˷��rA�
R�wWU�ܲR��M�h��
����/d�&
��
�����Q��H�/jڴ	��0O��I�zV֐r^���\}���@<8�1��/,d0�����Y��	��;X��\20t

XX���e����=*^z�邤�Ŕ�!���.?@���ӱ�����ՁO�!%�Ͳ�b�a�?x1�aK-_x�^}e��6�Zv:���	�Zw������]�D�}�}X#���	��1z��x�'����3ҩ`��i�+X�S;���|zE
lA��Q�ˢь��`Y�i��ԝ	��'�ыS~��Y�-��ڊ�/R
&iܪ�.� ۪�(�����ĥaO*�!�2�b0﬚FӋC�qҭ�I���U0W�)�^	{�<�-M��{����Ꝯ�W��?��.�"bSsצ����с�܀2�P��wmx6�^���g�&�n�<��]3k}BҒtY��I��=���Q�e}y��]�gO�5�s�vt��v)�1� �9�,� lmק��9��٠N�9�-蜉�A��zQ�;|��_φ,v��s�h��G�+ᵀ���n��(?aNR��~���?�}����}
�Cf�c_�x�-�����qJ�4"t�
s�IrX��p* �E���I}�����.GT��#�
�&���v
G1N��
��Ϊ�aԦh���B>���$��[�
� �Xs��z�_����?U)2~'PKvV̗3O�WrO-�2˖��FwV��>��Ȭ��XH+ۘ�{<����|y�38����xa�,`r�kR�`xW�70�\O���'��ၫI�h?����'�z5a�m۾�F��9"������@{#�Uй�˲a�
�`�p���
��� ��}E\>银o[�G��Ǔ.i�%��_W-�߄�0Zi�o�}���l@#�e]�_Ҋ!~
֪3�����;�̳|�
�O؛F#†Y�-DP��̊k�&DǢs��`^��r��Fgx�����Svu�ָ���C�Ǜ��v�z`Xu��6v�&k��e��f�v�tj�7���ܨS��Ą�(!�Z>�R��綠ݨUR�p*�7��?��|�P||c�w$��F�E��
⺵)щ�io�.�г=�۠��#VI�ר�q��i���v��/^=5E�Fyl����Z [...]
-6�ո���c����j��!c��tp�+b�r�X�swVD�o�/���x�
9���e�lw�`�Y
�p����etzfx
��e��K1�j`�mڇ�R�A�9r.�5Cn�v��&����W�
�+�b����}���y<<�Y
�x@�N$mI�t�eP�ݟNF}��
����,M,���.YG*��a������c.�9�8t-
��p��)�F��K{$݄l
-��\H��	j$���vV/Mg_�>�=
����U���<���[\��$-�G�:�icA�O���gA� ���~�]A?��nMq>y~���Ճ�����<�Ů��Hjb3��Q�o[��O^��a�����g�4��p��.iKʡhK�/O'�gRY�Rv�f
�y=;�4�Sn�2aUw�feu��(�CT��Df�G��x6&9�7��^<
{���/n�
�Zy�b��c6љ�)�A�g~���7����m~®F�|�&o�Z��f���\���yq�愴:�0�� ͂~NفO8d͑)���q�G�)�ǸS\�V?ըra�*iWuoO���
��
��i��q�I�����'e��v�
��/i��L�MT��ٗ�og�ξ
�JH�#�uyh��|c�_V�\Xޗ�J�
�S[S��i�QGq��M2�iS��S>5'�5lY�?�/N�
�V�w"n�����6f�ƽ|�<��݀��q+:p���`o�
�"�tv٠ϡ�=����������ˤlx9� ;�Sr�!/��&��������O�N��\X)ȡ�2�g&8x��=�
^�,�	�,Ҷm��MC ��B�
2
d��F< iO���q��9	�J�O���
j,8�9ؒ+�E?��|��QF���m��kVUdzq�s�b�30�>#kx~��<
P
�ψwE�5�IS
� jUw�x���N��!ܪ��4�(���
�3��
Řf�ዃW�_2�4�M�<���0��]�}�����~��޲�)�!t����QK桠|\���
ښ�}�����_sʶ&��^��/�LpF�u�
�>Y����е�y�M��"S�C(g}�f����8��&����ֽ�궢���A���{
!�{OH!	���		!���C'!��-��s�{��C���a
}g֬����Yk�*pq?�ȹ�@]�ih�f)>�>_�6IM6��NԴl��ߏ�b����f���7��zmvC�m����"�]�������R�q��x��&\�R�S�X�)f���*%&��a��!�]j�gJطcY��39"��
>廖�e��v�^�*&�8
-�0�;W���P��՘�il����b��#/�e�KM��L�L���X�#	�
*�8�4M�|N4���Yl�ż��%�sįEb�}N��sq�x4���

��e
��<��U:®�v���&$�k�)�=%�m�>�F\�ʩsB�UM˺�e�~�e at OU�8��ك��| F�'0�V ��N��O���_::���0Q��@�9����'�Aj����E�2�ߋl��4��BML�T-L���}
-Rҙ��q�`C��e��3��
-��<I�:����4ظ�2�Ӕ��L�߀�����
-�z
-x��96�r�K��H��RN��$�:��ۿ9��@)��
:���,���]��EJ���x0�9��"�϶��?�,�%R��
̏u�l��c�f
�Յ���#��S�� .�ђo� |��e����"#���-
-r�~��5�	>SRr�z at X�����ؘ�����{��4=��Ng����
-��V��
�ǟ�yX����HFI2p�e
-�o��|�5�
-
j��y�]����j�O� ���) ���v��l�����^?��h�i
�ś'X�!J�Z3��z��4�
1�I1�c�x]M�#1.�BKϳ��1 Σ
#p��Qt�u�m#�2B�jW��|-��1���f��v�

ÿ���w�녺^�JC.��ClJl�Y΃۔<80V�6>f�{0��3�a�~ji���c�Z�s�HI'rr
-��ci鷣Q��q����G�/\�l}���׿癨35.�`����f1����� W���E?f�P 'd��˱��ȓ����U�q���e���M��p(A��k�^����G��Iɿ�_K,ԙ��ȷ�gJ���X?����r oK9��DKͲ�1q��E^f	�ѓ��qb�� :�,���k8H�Cb�2|�u�s4��?
��l�@���{
�a��OR���:���s�T�$�
n���#ń_j٥6���
�|���t�l��YG��{}şv��n��0��Qd��
�Ս�pRt8��Yi�x-5��m�"��	��Q�s�. �?�S�
|Ա��m����*�u	x�
 �"�x��5��_�c��S5� #�R[V������& [r_�4�:�Na��
���"
�~��,�|<�*2��B��߬6�_hY����͹/N�J�Z\���%�Z�$� �}�О�\ߙ��,F�[e�(�ܮ_�\��<n��3m@}
�)i�uD���_6:J\w�^�#���
��
9�X�
?�a�-��.��܎"���"���p	6:�Bˀ ܟs��f �f��㈯���k-�o�
���Ӣ��Xq[����]��{ݘ���O� !x��i�YƉ� W��}���-j��8>l���Fo�;�0����z�
�q0<0	�A��0.h��U��8��j�%���`Q�M�)5L0��4�R���{0�
�{B�@���$2�\�����zy0�
8%D�'H��Ib��p��e
�m���dp����/��{�����,pI�Z�
,p5�@<,RD�edpm��⏧��cp�s}��*3��%�����
R�f [...]
��6�"-�|$.�<C���};S��p���å���/ ϟΕ�,Z�`���Q�i���s���Ì(�a�>��q�u��/��['�)?���Z�s��Mi�q��u�#�i�1��p��w����x���k�K=V�ӍCE�{2_��%8���oC~�>�Hx0�Ov��@�

�W����\v�P�W�o圸��;[�0���i�d�
I����oCp�ź����َ[]%
Cİ����'#��c	=mw��ٍ�Yk,|i��{�ۖ�b�-�6
"}ך
-^�&��sM5�$adl���VjS�T&?X�JsX�Iu�����:.�Ãw{i��V軃��q�? ���y�d=Zm�s8�
-��G_�x�b�R��� g�v�J<� /�X���;�p���3H��H+0�Q~��09r��v�.��r]�smU�����"#���z2K���Q��!�mw ���B���4������].�
-T��K\���5I�Q�u-�-Eo��K?�ُ���v8�;��- at m������R/}{����(��q
iQ�&EY�u�
cϖg:L�
�'5���g���
���t�����01@}z�>�h
�X��|��xs{s {s���h��7L_i.zs<E��N�"O��k��~Q�G��U�>]��{)��: ��u��`��)�V)%i���c�1����vO�͸���}�	��C��t��C��L��$���>�ǝ�sE >s^�
݀�yr&�C��B�J7>�@LM=�UUŴ����W����'����JB��C_��z��Ź_���?�[3�ϧ�Q�*8�{�|N���:B��Y�XNM;��':.i���oGx���_�4f;��y�+�iں��9ޏ~[k��5/�m��æ��
��;
�y�oIv���}{��d�ゞX�1ٿ �i�����}\lHq\�Ox4]
�2�y#"�n]ޗ�AT�zw�;9'ᶄ�xSJO���g?���o��CnM
-�"��j����W;��
uY�g+�
����
-v��Ir�
?�y/1ٹ
v�0J��q� �qs�6���
uWs
�c��/�b��pas�ؠ�Nj��TY!�o�~ا�V��VKѻ���gs�,G}+曜{�RUl�G��>��y���݃��w���`>r^���W�1N�a���ކt7�Pc�c�0�(���P��� �#��lM��Le��vJ�Z����
�\m����@����P
-�;Q�7��q�����1R�r=�yZ�� c��ӈҞ�צ?[mJy(.�&�:�R#
��
8���e�\s����9� >x9Ɋ�3B����������]E�9�z���7X�ٙ�h��~��������
-��I�G�-7�]w���kM��:��@���Ug�����m�}9&F���~��?_n��� D
J�v�5-J��7��]i���4�z
���4_]�r����ܮ]%>*^ޛ��ǽAJ�bu��V7�o��I��qX�+|�ю�<-,xMM�t}��#�H)+鑘��4'��RM��6��YZ�1�M�ԧ����]�k(�hW�7z(�*Q��qR��qB���OL
�ko�(po4���:��\e�?�\�^o�[%;���qGߚ�Lߘ��~��{��
<���e9���
y��Řa_z`��=��;�_^�փΒ	�\�Z�</gH9���Ӟ��U�~�:��jSїK%�z�1,2v�q���������
-^/��<��LrX�J~t���n
�>���z�4�g*��
����%�۰�#���oNWd�$�)n�Z��/��)^��rNğRJ�-}#샢���O���U�-c�,힄
q]Ŏ�9'J�+�GޖP����y�a�Q!��
�c��0��p��^�����gS̔;������'#�,ǂ���M�r>�c"�Y/f+s��Wf>���	t׵���W6{�]yi���qN�1|��0Ж/ �k��/Լ�;Øo׺`�Wռ�6B“.B�; K	[]��[����P_��>��0���p���v��¿ :jS�����c��3�Z\��\�zw�;EY���8fegm�`�[�6ڡ����;=h�)a�Kb��Ô���	J�Nq{�2�a�>륄
uo�<ⱱ/�}�'�ۑ
��1v��șV [�yr�	�n��tk󇂕|�:��*���ʄ7���7vh�
�(ey�#Uy�CCɷ�A䷵���k���[�%�W�a�k�%�N�B�Y�+������Է續���V�y_�q��Z�qO[1q�� �,�f����|M��If½���?�^Wf
]		o [...]
-�]k�y8[r[+����[���_�HS��3��ЃAT�i���A_޻���b��M}{��S5
��]�ސ�zo ��W
s8�
-����D�.6A߱S�\o(�p:Up��d^8~�&��j]����s AW����'�]_탅�RW�r�!�y�!�QF�k��N\��$��X�C
)��l �Q?���<�p��,W'����ze�&�I+��.��M�M��~n�rs��骬�2^�+y9�e���v��s���m�Qc�ӟ�7&;��d9�[���z��5�7�Р?;aa�Wa��j
-^,V�<_o����Z��z����;��**
��L��k���ς�m
/���]�q���7'��B
�e���8��1j���A|� 5�n+��7	>�|č�b�?&���
�%~� e�
��R|�� �{�5�i�!�q�)��LU�����`���l�\U~�
�/5u���-�-�s�;
-��T�?�G�)�:l��{1"���q��Z�����@���p:�:W"B�$E_���4��@����$f�w���]�A��q
�x4%7�a�

t4NM������Fh����8:��.�J�;G[$%k
�.�l��o+]H��^l����8�H��X��D�
-=��&�3>0R�nl���g�K�%�����$ǝ����\ر��d����_�uz���ҝ~F�N?�w����vo	��Aښ�ϛ���nzʛnr�˃1R�J��,e�ܝb'ݛd�<
���
ce�/� C��>�
-|���c��������+��zK��ZS���. c�)��
�[~��N
-"�
���?���p{_Yp{����� ��"���c��*s�~-p�?�X�>f�&�q�1�E�MzD�~s��$��R3<DU���t���L`N�J��GbD�l}֫6t��N|���6AQ�
���%�D��0�J�w�>-5�;/6e��*���At�Jw��e��k����}2�?���/G@�]�-	8�6y�pw���Ԉ��d:�a"�\��q,!��=_��>S�5���1>l��֑�ژ�T��y,�'�ꅇ\�7ü��)��W[����
ZT/���1��\U�������:�;�~'�\��4�? ��L�sL̼�V��Be�S7󱌙�PJ�z�ق�2��J�[���5���y/t��
��`_,rZ�l+2d��8�T]��ņ���޻�#5�T?�	�d?��>�lCy�*2��Wg�3��S�[�۝��b��6�8�
1�Ҋ�U,�U�*��9 �*�����iJ�!�y��	6.�D��9S�S-Rz�B
*P)*�`��(�ڂ�#��Za�ݽ���S��f�S
����j@��n��{1Y?����:�T�O4Ka��ݩ�+nnvf�����?[_�zo�
��~��ܛbE��!|��C�8[��ڒ�>@L��?
g�{�)x�)-
��t��?��ۓ�T��x�����'�
�HY[�kUP�Ũ�Ŧ��[ݹ
�ž;}��Ҟ/u��0
�Հ?�{��{C��C [��,��(&LYU�&�fy 8,�)��)F�M�)��r��j
)����J{��BG�癎���q\����z�"��~���Hi�m
-�p�!�.�ČCI��8#��VWi蹆Ul��"�>���ӂt� ����r�������
!Íc�����t�鄉�F�A����7�}� ����ىK�ģ��
v�2]
c�ģqNљ��p���F�A�X���4��MC�ޫ�9.
��� ���9���������.����Vt�Mb\��>�v�u:]l��� ^���
@�]�d��6�7�0>��o��\��-��7z���!j����}��x{����p�m#F
���v!>#`�?s߮6d:
�R
b
��wAƋiA֋A�S:�D�o�`��`_Lc�8m3֯������Q���a�߱�Yp�
��<�K��ca��V�[g*8�Z�Z꛾
�ۉ�ַ�?YGY��az�7��Js���qr<��O����JN�c]U��F7)���3U9���s6�!�L74\�T����~SWd 5��hFyg���Z��YZ�����5e=������i��ds���oe���l�����.�h2��=�(.�T�<�"��O�
���8Ք�t�i/'���f����{H��.����U��E �W�?�W��.U"�V{�ە��'j~�]	+��N���ID��$%cs�-��W�D�4���Ƃ�ô�'S��7˭��V��_[�����71?�YA� ��;@�%�<��)��3V�3\�s$AG�H������f�i��IF�Z{��fw�����4N��{(E�/8�}���h���}%Qg:F�YJ�?����7�,=ŋ|2L
ytdsE=4d���0����D���h�q �3���*�x��k���V
��G�~�X��~�,�Z|���]|���l�����^�p��]=t:C��~��P��}���|��x$�$ ~4.f{���J{�TQ�}2Z�����c#�BK+��y��}
��\�܅C%5wg���p��g�=���p���il�MN�>��`�2V��+iwT�?߂�
�~��V;�=���k]�~�]�ö́����T��^���[��R�i���HR�`�.��v'��`t<E��&F͵�;Qr�bl�rK��(%��$'�Q7.�^\��nj�d
η	}K#{����𥖒o�a�6z���=i��m���,=�$%Yd|�m���;�H���y>A��-e'��,�y܅�.f�:�w�zuP�I9�����1r2�װ

q�d@�$�C%*�X+��*���<}>���{�`�K9.�X����C��!�
��h�$f��&j뒞,��z��D��
{����f�efUY��6�2W�n�m�*��}���r^�j��/�yX�hـN橫�^L�
�ST�i������Ԙ�ښ�ag�
�7��6OV��c�����/�C�$ g�V91���a��i�:���<��Q��<��`M
-d�`U	�%e�c���/{�E
�����rL�m�;L��0:�&�&���ѻ�_U��1z�
)
�u�/��\��L�Ь��[5l�V�GRJ�N7�c�1�m��mc��އ���Z.4I	i[��ϫ��O���H���z$ǧe�ģ��������oe��ZƏt5�2��&p} �ͪ��$�o�)��TL�m���@�'�{J?�w��
�~�ҙ�b�9�ïA�Ţ�f�G51�b���D+�۔|�m�5�2R�i�k}��6Bҳi6�u��b�o��m��{�ч��T���8�qq�@����)N�y�
�L�a'j
Ƭ`��䴃QB�a��?��l��������� ���	�V�q�W����U��nuc
���!j�tM�+U�c�k���DeG����B����Wk]P�\���.�g8����X�/���j3�LՄ1.�}$��j31����z����q���0�s{i�Ӿ�0K�Ԥ������ݬ�T#����8<�x��p�
�XV��~�
1�F�E>�-
��k��k� ./4�a���*΢�#-Z.�4Ł
Nr��:8Q�����A��F!_V��
��b�Z%��3uu�Z3�߶hY'*
��\�QJJ0�	�F%1�:�BX��
��V��
}0AK�@�cc�
-Ծ��8&tg�mw y�0�K>���蛡^����sm9Ӫ.C���c�U/�F��\U��B��P�K��]� �kjS�.u���N�a?�3�h�s-෗s�u{��nt�}������ �86�X�%�̔S���" �'r6t���ߕ��ޗ�����̲�x�o����eZ�u�#�W	#M�Q�q�
uS-����W�j
'�ڿŷH9��!F�~?3
�汛ð��
���,��Il���>�)��U6�/�v
�1��
��<��cMX}�(��Ljq��'�zH��zE��';� ׋Q	RD�a�s$'~_�s�:b���á�`'&
���M���?�
�
XE�)�I�%���*ڵ^�
Zpw
{��fE
�V�Q_7GЁk�/)
������+�Y������V귭Nv���,b���Y�vu ��`VHv7�gz8)�
�@
�.$��ĵ�
��DՈ���F
-����G����9S	�
M`������
�n�qv�FWy�l�}���V��o+O�V��;Dy���h��|��w5�

�y�Ch?�8=�&P�������"g��[�>�iO�
����f���2w����]	�h�n4����xIK@[G�����'Kj�yDT�ݏ�����jY�3L��r���r}�U'�͵z,������lU��+�H�Ն�W{=0��AD�e��u"e�MCB�B-��U�fm��F�q��d]E�3��Η������i!ek���;��:TrK���I��M�-�
Ƈ�t�|�M��/T<�Q�/nE���Ee�_��F���ן�D���ү�.���|�X�y�X�z6_)2+��G
-z�٬Px��.�9��ɒ���"����f?�s{�_�sh�g8��O�eEgSu"�Xf��b��
�k�ݜ♪"W�0!�p�gS2!'���c%"AY�T�	���E�h�*���J�s����x��|�� 9\�I���4
���R�B3�k�
�a�)��Jg���
-���f���F�Ё���܏>�V�Z��k5]�lҶ�i�y�Б��$��].�
/��e���j��s�=?g�z�յ
M��,�ż^��
endstream
endobj
133 0 obj
<</Length 65536>>stream
-xw��Ɲ/��6��}�TE
�k/��a;��/QA�����J��dxx��_��|���k ��~}u~x�������io��
-��s��2�鹚.���f�gY-�ä �r�
�܉/yPɺ��I�
��K��R���;/-�=.�7rz�o�_\@��o�6ó�7���*EH��V�QR���#�ݤ��!^�R7?i����KE�j�#
�@��SR�a"¯��\��F\��� �|�����woA��
A�o����nW:�Y�6:˒�b�4U�ޙ�z)�� ���kr�k�C�X��8��A|��1
-�m�|я)z�ͺ
�����1������7/��R#n�0
_i���n�N���mP�!�/em��]1��DW%�agJ��O�8ȗ�B�G���<[J��®a���~|w��'%��)�������co�f�s��
)aW������u �B[i��Z��L��� \{�Y΢�ȇ��/סaW�\�@�
�B�<��H
s�$$��s�}��c

n���N <{bJ�U�Ş��)f
=w���]-,|>[��"~��O�
��r��{�}
��:)1�Ozr�
���B]�]I��tz�&/��� 5ɢP���]1�`s ����CE͵��V�h�s
����R�6T��N"�#P+��y)7iq7�����x���p�}���.(?���	AQȏeaӿ69"�4>km �Kך��b�E?^��4� .�&�Ąc-z��"����aD^�
�(NzQ�
�WU^�-\L��|�ۢ��	V�c9?�~ ��Kϯ��hhM�q�];
����Y�{�0:��z�x�|�.���G�W��n��
���_�PWP^�וVx�=mE��V`�c�F��Ü$E� j�����w[ ͸��M�����
-�UgP��(�������(��k�����7��"��
��JuA��f�gmC��I.��t%��J'ZQ���Q��
-a7Q)�Wr��A)�_A~..�W���<y
-{�
��� zp��o ��ׁv�y;9��q�Mʆ8�v��X	��j���?Q��lţ��0�M�]fV굂 �+	��AY^_@��^��OA�O
A���xt�.���~�����/@����5�(ϝ)L�Q�I\�~�o4@�,�W	���j�[#��5#�2*�
-2�� E�� y<s }r|
��&���@��=�'���zx��lsч�IL��x�����މ���E�6Q�z�C+}X
��&�_+	��z��>��;>�{p���>���{�7o�n\���<����秿)E~gZ�b���6#���	@�@������u#�s3��;>2�j��7���#Ї�@�/^�"޾��>���{ ��O@�n��]�
�
�^�gw++�����ukDٗ�W�յ&��9�NW6"�raNUȌ{���OB�D���>>q �<w�zz������5^>|
�}����#2*�w1��EW��zk 
p6����ͯ<_U�e���ܜ�^r���n��x7�B}������F��������@M� �����0���N�p�F�^#�����
3N�F�N
-���7��҇t�Mz�:>#�$6�7��
W
߽z��ˇ�@ E}�v���}��|�� �v�},ج�c�尥��bUO]�H]�
������Ę+���+A� ��@��#�����W�����#P��OW��]�$�<�ĥ:Mp
?�
��I�Z�����U��	�.�;7��Oj�G���?�<�A��A�oށ^=t 9 ��
-p�� �@��'���=P��w DX�fx���z\�����$/���5L�
ک�4��*x��*
�/BV��O�ǧ ��<
�\ނ�>r=�� �
����#�
��(�� fv�u��Ơ(+4�X��!l�Jg�'������
-����G��|j�Ǣ��߂=\A_]�A	�
��Ϟ}�'��ᅢ�88�
�u���(���j���k���ǫ
��#og��5D
]��[h�
qp�z؄p�]pD���o_A�^^�O�G�g���]=�y�'�/.�����.(��ݕ���c�
w��Ur� (;Yp��y$��
�=AIPԗ��7�>נ�A�B���%���z`��7 
>��1�᭿@O�vx�
z��)���%(?$�wbJ��t=�oc��q i
�j�W{i1�=���nJp;��)*9�Z�7�O�
A�/]@N@�>����{�7 ��y���C��A�ϜA���Wk I���n�
�b�	k���8ӌ��=UI����nHE�Q���w��[���+��<����;� ݺ�;����>��
��e�oW����Q�A��l��an�X-�}���=^+
-�r];�g]�j�%6��42�6v���?X�7UۇX���L4��MU��@�3��V��6�x� ?e��
8T����=�Qh�Z$�Y����#9�߇���&ed�%&'�e��:ua1^���
�9a���sg�aPW����,�D-yy����GV�S�ա���;��"yh�r^�"1�OHx�u_7wл'��Z~r~���t��~֎!z�E+�̘=	��0U�?���.
���ԇ���>��D����q�j�,�89(��ۏ�W w:����
��s5�'�jzx�UHR�

�����A
1�+�I
Ģ�aδ�����:�L��@S�׎�54%��D碬��!�޿��y�"����^���ߺ��r
�wd�\{��v�Z
�(o�ߙ�C�AV�4��[������S�0VC�j`b_�%����S���y���Cн?��;���B~å�
;i���#5eFe�(g�
�	yg���k��+U�;j.Z;H�R����pi�[H�W��5;�>.3�nijڽ0�?|�Ey������&E]���w���'
Y�$k����Q��Z��T%� ��̴b<z����TyGyR-�K��3���FvD����;��z�~	����ZNB�CR|�ݬ���
p�}!���G��4b�N	��t�],W4���?�3i�d���jSYÚjg��RЏ�9D}����	�
�D'^������)(9��*6/���e��_�@�O�c��\�y�'�S���f{���1QOZ�cEϴ��DŽ�����zGj{���3�L?��2���
�\�ߗ�a��j�y�]u�P�d [...]
��m�����.ۙ�"��r�����
Ś�f�vd@��룉���+B�Y,��RȽV
楬�*}s��lV6�ؔM
6U��x�O<��NgE
�t%wc����E��
��NT�V���T��i���EGK���5v��>z���7� ��[�3��
)}�WuU�l��tSQ�0*X��
ۓ�26�Q_�br�߫
�>m}
�!%%iGxi��\���ʨѶ�
q{kN���m�����
-?kZ9������a����v�e�X*��su�G��������ź��@<�e�d�T��-oE|�w0‡��bq��9p���ꦄ6A��PmE@[y�Ǧ�j��n�Ud��S�,7����OV�ħk�ö������jO��_��� ����G���a��5�eqO��Pm���
>3�I�la >�G�wUvwb&�+�C��uY%�:+��kYT��3-�3��ԏ�#v���S�t`L+N�B�k��%��&�y�yg�����͞
k���A�
q���5q3�@�TeR
)�ØuU�Ý���_�}�u�6�B�T�|�NH�R�#���HE_e�d{E���.i���
h@�ƻx��fⲘ��2J�^"��
`�Yt"��� �ڃ��?�	��['9�됟�7t�����J�!�
�&(����/
�!wO��x�t9}_BI5H	1���#%�U#�6�Ŝ,T�
�y���l��l�Mr1��y�\]w��a��L඘�)!f^�}�Rt<]#�������f������})�PUVl�nl1M�	�J�@%�m�����u��s$�e���;䈍Az쮤�|8��5�݉:����9�L<�
-���2Ӕ}�����mSs�}V
kՖ��e��_�7�/<��dk�xGjѪ��5*�E&U}ž�W�)&Go�I�2z��%ɨ����i��U�#E��x�n�<����y��C�rl��0�͢�%�X��6O
�F��n��m;Zl���6�oO��n�;{�����az�ʨ������\��1/�}_r�w��]~�}
�#
���㑬�Uu ���C���#��ѡ��X��
=�r��Z�7>,�Ð��Wu�.�*�Jf����*G���׭n
9[�n6iI�ӥ���������.��Ux.��"�f���� -�B��#s��mR�!m������6�!T��!Z�`c�5B�����/�|�2J� �4~�X�r��ğL�C���Qt�y��s��cNT<�咐w<�%퍕��x�w�=�kH��G8�s�Of��FliCq𾲌|�֢:������p���@�0អ2��I����Y�{�T�#k��}�ɋEQ�需	�
lK�
�k����W�aY.�[����v�g���E��:��3��ir�EAJ�-��
.��s���T�2`Uv
ZU�}mK�m���"��
�)q�-%
�rr�lw�י���1j�q�o�fZ5�\���t�eÏ5��s���۔��-b;.��<�4
�/''�KI	�
-Z��%�M&����\�y:��oUW�������bo��g��~�桗�X���|�|��\}籶�۪ij=R�q����{!�{��=	=S^�����MS�L Ce
�}O��YR�q���Ԫ!A��j[�E̙n��I��
k+�O������2��]�3��ۓ"��E���*�]c��R��UdV�K�u@�q�Gj
-�1~�QV�����x�������с 
S/t�B��c����\Q	�n�T�.WZ���%���Σ��N���~_Ʉ��#5~<[N9_����[�k_��t��9�'A~��
�穅GJrʉ�9_.�Ulı}�MQ�����rh65-g��u��u(� O�j�lK5
{f�uUT���������fy��U��x����/��g
�M�Ս�
�՗�@m�O��)CYU�̝���`���zk�Y���&��se�������ދ����	�jNu]�#���zvdL�
�}�V�}��fs�*�&n����
����)6t�9�YW��p�+��MCH5+���L��RM��.c\�dT1��u�f95Ӥ &oK�����X���8_�]n�Kf�k{9)N���_+����q���Z���=1�g�=���y����f�p'�5m�K
��Zɨ���&��R���"/����v���^����t��/�����Y�} �\�� �o���]]���X��`��f%E
J�1;C���bo�$.�������ߗ+jOg8������#���eQS�m�LȎ�5P�k���l��٬�,����~����}��d��p�Vrx')�q��sNT~��cMS\(P����cV1�6�����cW�R�� ��R�P)���iG*l�Y��3H�bH�����%ef-��ŒSB��RÐ}��C9e������������
�ir�L;��j*�l�����5"ꑲ��H�,8��E���d������䍅� �3�g‹��Ɵ�|���}�Rt9�(���xZ�
܏冡#
�7Ƀ�u�"���ܨ���l��(��uԤ$$��'���}����t�3
���|m��
�n
>e{�3�\�f'�_�sI��`.�h�糌b�{>���y�X���*�8�B����s}��SS�i|o�� +	;]�B/V��
~�
ٞ�g�/U6�u\
p/4�w3�)��'Z|��
>�d��7�Jv�r�<�����4�
�hT3��ԣib��<��|��	��~�ZȰ鄬�|��EF��
1k�;�y��yCS��b��M
����$�¾�
�t��K?� C���~B��6|W��8TP��y�c
��x���6�,>[��9ۨh�\�\��3����AB�UM/�?A�;�qOt"��
�z�X��C_;�sK�`�a[����նy�b�����:T2
�ѳ��3(�ճY��)j��MA�AQ���G8��#�i*j��xd��՚�R��l��q0N�
��y+���oc�_�*?u���3$�O��Gr��a,��XH;�Zt,̯���('&�$���z�%�
+��{����QQ�^Y�y��t,e��#���f	�w11�`�ٝ�� F�����AJ�URV�/��o��#7ɑ�	~�M�+�i8���g���|���לϕY��q0IIޑ"
2&P�Uէ�
�9Xfmu��lM����t�.	<�"��Ę��1tࡂY�$)+X'����:�
-�վ����2�
��F<�������
5
�Z�Y�I�?�H����r
�ӆ�[RQ�PU]q��8h��i0��l�SE�	7L�#�3
 �1�w��F	��r���;���f���>�2EJ�D�[�"���4DI��Յ���F��?{գ�O#X /h]�~��
�:],#�֪[w���1-��՝��;��U���ma��
!ok
�ҏ������O�y���5g�"���������f�ӟ�S"��
Qs�!L�g�QW���hh�?V���7U�W�y
�++�Zgk�Η��eԼ�΂���7�* �-1q�f��!d�bm򓩲��[���E&ުBE
�#�.L��Dem�d�':]�S������3 ��B�U�6�!
M3�)C�,�?���?W�e�:ZI75��B*��z��窝�Y�
)��2�N��`S/��mTv
���@�,5OYu5նi
�D[�8ױJLc�@�J@�i�����"NW����)-�&&%�tB]�@-Z$��AtH%�Ny��
��G2V��:`s��m}����@��E��)2xP��*M�[_;x�,(p
��
��H8a����Z�!�� '� 6�h���T�a�.�y�&��|UƓŪ�ơb�#	=Kӎ
-/�p�ՏIx$e�|�M�E�h��$*r�/�ARx:ˡY�
4�]
������'�ظs
&ΦFFn
�}7{a��*
�6��w�.|
1�r��s��C-*R�UCI?�"���g��.[��$]{i�z��X�*4�qa�����w&��\j�%�3,���_.��?��`_��p��>���eԴ�6��$e$��Mؓ��G��=_�ӭF�INζ��%f#�HBJ�:Φ`�ڿ	=���.�w�.U�������݇��r�
���~�V֜ �dղ�G��
 ˜���s-{(ǧ
L2M*&�r����5sתZ��s�%6-2�8���$� �|$%�[e�l�)ά`� �fV�
-ĸ��Ad��
��*��)9�����7H.��ZlZ6�HEL1L��>� ���?֞����9z�4������33��LI��>��i�{����T���{�]l���&��*EĚd����ܜ�.��ޫ�����Z���\�<���]�Y�Z�Td��nv���O��]
���Qh�K�+?3��N�t�[�U!3
��H�����*���:��� �����G�

- ۟�{?o
-z�Ⱦ
-��5^�R�W�ط�d�5|���E=��H�e
��Lg~6�����NC?�
�^��I|������v��
�j.�HN.��)U�y\�g��u�tL������EZ�v�m���_�T�O�$�&��o*|�3��Y�ym�{e�%U�D
�Ŝ
��u���*�.6e?��e�����, 晁'����]���N�sf��+�At�m�����P�r.����B ��rϣ�m���1v��ؐk߰�B��K�X��R�3[�l��D�
���������lLA>*��ܗb���s�
Ow�+��&�7��/7F���W��`�R�X`խ�"���ϖY��������$<
���1H�bSq0>��ϓ��k~@��L��7�+��?s	A�,�E�6G���ո�
�7�H�v�+�s�d�*���LF�˳L�k�_mL"R�,�)�/lR�y�C':��#w���r~�C]k�#�"��
0ˁ��ů�� [/ߙDD��*
����N���'j�,�U�'z.�g�<2j��Pu�}�6v}�<�8T��-
�j
>54v�RZOV�@�_�B}�S�u/B?��47�G�šw�X�[L+;�_�zj��&�2	��
G����;�T�O���R1������V�Wѡ'zA۱�uxg��=�����JK���V��	7��C]����a�k�l]O�7�k�;��#=w�G��5�l�*Ps,P�W��L�{��<���5}O���
���p+�~-�vjnhߓ�ҽ
-D��2ͳ�/��8�
!"Χ��O�z�O֛F��4ܞ
�a�G%�L�?m��b�K�2�P]�����U
��ʶV����-�K�L􁂐�^D$n
�<]���9~m���@#�Cuo-�?t��ƫ߻��9#-yO�s��0�L�w�o��ȹX��Y����4,vk
�;U��h���S�@
�?Z���L
>��4!��
~��Qr��V��&d��
R�䬲�q@�c�lc����Β����+��_{���o
�+
��ص1h8��Ol��X�_� 9c�\�>~ej+
>Z"�=�6Ƌ����_���_͝ŏ]sДc ߟ(H�Yd����e

�ť;��i�)B��("lg��
�_׋
-շ މ������w�9T�/�-"����&]��AB�f��Ӡ��
-r������ENq쩖����O����Uq����=q7̓�:E���L��0�eݫn�9�js�2x���Ks��oT��;�Bi;,�A?&���2�q[���4V��p�/k�YD������5-��;�Yfie;��D���-��<
�l���EG��hi��.�D�e}^��2r�!T
k�Շ
-|�!��\S��m�7,��w�d�4���A�Z��q.1&�1�N�Lb�wF`V�
-��}�h��
�s���;�sh~��d�Gw+��}%��D�o�4
-v95{�m
.E}o�Z�]�enU�\�/���c�៬S寗��3�(��k�}*T�k��W�L��À��B/�]hҎ��[��ŀ��V�ȣ:
�$�W�Jw,����!��+,汱wŷ���75t��
�>
�K54�]�H�!�)�'8e�|�
-�����;Ztx�
�K�M�O#>��J
κY�W�9O�׶W$؅�4]s�MsO�c�8t��ze���������
u�ohu.�
@~
��]Q}�S��
��g#�c�$���U9�	%'�l��,.y{����@�sck�Ý!P��$*f�������	
�;��7u�Yi.��k+}�ҘCӔs���)�k6'1�kC0�yl�E�{
��\]�y���$2��1��o[�[᳜"J��r�f� f|��9
yo�ʸ1�?g�y�6P�F�
-z�'d����]bz�z�[!&�gz�����~/"�]���%]�O������@>���2���o-�i.|�*�4t=�
-��"��5�ծ�k�#��<2h�e�:�&�
.����&���-rr
�ٜ/���c-�;����&��g*:�'��gH��嬢w�
��
��@ι<���]B)�����2u?�
�elϐ��>������e��:����
-�t���
Mi�l3��V�6k�����>����5x�Sz�֔{UIJ:�D��y�3�ީ�P�����_���OM�n
W�P�S.vW��IŠ�v�BF�t��5!��*��]�|�r�_��Z��7��u"�' i�[�9�@N���~��g^W2R~�F|�n��Ϳh�׬���X�=Bf�#�`i􉞎;��T�����|\b��j����Pa�j�!�V����<J:�P�$j��m��� ,q�D�x���2
r��4q`�9���n�q|m_De�1%'F޽̨wȨ�˂�-!~��s���,�k�^b��%��AOT��{�ir�m
-��Ґy�Мy+P
A�I��0�{��ӱ�òJ�u�������Cq�'C����_���*�tw�*�6�L8P1P볰
]w��9��P�r�-¤�pg����>���yB�4+��%nQ�g�^�7�KY�|��_��5
�Yiͻ+��a��>�44���񆞒 �`�+c_ի���w{ o
)���yl�UH��jh������SQ����?��
-�� ���%&�Y��TM3����OJ[�𨭑�P)��~(�'nч�F��W����in�3|��s��Ҩ%�Zב}��-)��?摯r������ M`���W:s�O4,ʙ�����"��9Kp;㠗�*:�뚠�X�"��>%
�K�й�Ð��������{�iZi�,���4�1C)q����9\�w��;��P4�wT}�a�W
} �r�%���pAے�xg
��@B
kX��^��U
6�L
-0�GN(ݛE&�'� _%����~�T�ү�3_�k
-
��?k���`g��u��5������٥3
 �L#�'����
/�	�ɒ���[������
��Uq��yJ�WƂz$�ʁ��y���9T���<1����'
-b�WWpfb0hy~#㧅}^��}*t��8����M�v|K ��)��
��7��^C���z���u�'����˹�ћs�ԓs߫��>X�Wm�@�<+��Í����Kn�?��
���W�ej�Z|���㜬��'j޻� 9fQ��#eA�Q�#9��.D�
!�=s،}	:
`�W�Y�[�`�%bɖ�Rh�J�U,�[�+�i�^58&�8�֥
��N�4
�������%~yԱ�Gx��	g
�����
-V�e5�"H3�K�W��i �p�
7t�?��D�4K��Eݘ���
���
���Pu�g
��5Q��2��pJ�.	v #
�j?����i۳n['�q_
M]gz>�%Xl��s��as�"�S%�t�<�u„��������,>kc��-�ߔ�s/�h�W���L�Ӥ��#u1k5����������Ǜ�>
�ECG
�0І1p��#��#����mv q�2Q��2zk�8\
��lb�4t�S���WR ':~Ӟ�i��<HJO>��]\�.b
�&4դ]�D?��<X��:�%%U�g�^��o������	�NJI�_�q�ڶ���>��9��D���g�#�b`�|JB�g	�~�$�zl�e��P�O-���Aޯu�>詎=�Kx�O~Vз������QQ�YT�O�/8TR�N�l�O���,�gYE s-�D��X�/Ɩ!��R�=R��$�h��*���u/K�G��.19p��v��cA����[eA���0�|M��
$qk�음���bma���X��Ѻ�3��CG+$������i� [...]
-x
�ױ���v���}@���P�� 7��/s���C��D�xm�_IƝ��
���g��
,��fQ�Qx��&J߇[��3A>��2��Nc���-��b���2�'fS����ҳ¥���2�|�ӵ��?VZ?�.����b�t
 �cs�G�BO��y�2���<^��:fA!���9X�m/��\��ߙ�V�J���v��qT�O]�a߶WF}K�x��%v�

#���k���=�M�.ҫ��\�\M��';h������r]��z�+�PY;#������~%���Ĥ����쒡� f�
,�ު{�=Z�vk�qO��qK�y;�ؤ�֪�yT�o{���#-�VՙyW�A�S4���=��t�ɀ��i�`��OO~��/���s��V8E�(�\i�G0�
-�i����jOL(���4�
"�<X���]�@L˹�Pv��6�}
�h
�1�®X�qU~�~k�:��_���Wr�4Xp�-����a�5|�ED-�W��NW������$����O%+��jG��<&uO¬�����\
-�&����ஊ�?Aޜ[$���b��O��]N�M^����6����o���g�?��%�ZX�m�赾;妡'�ʗ���}CלS.��E��3Ccߩ�I��c`���*��6~w,��s�2��:�ånl�/������c�|��ymn���C�]��qo�Gۙ'dz��j��8��ؒe�:dw���n_�}�
"+pG�U�pg�R�'a�-s�d�
:�2����`1.*m_K�hڇu]����Sc���������?y~`��� K*��9�ʭj`�Π�$��	yj�~���^[�-o�R���!�=����F��� �3Ū؞&��<�9Qn�(}~�!Vx�
�-���I�U>���Q0�bl�{	�
-�聆Pf�!�m���@���e6֫`!|*����@��S��.���*n�""l
��
1��K�3u0

�2r��yb�Eyc�cEG��\�v�;�
���_�Zג}�1
-[�-zjhϺk�,|zb�g�5آm!"vw�r��1��L��*�zl`}�^v,!3�C%�]���=9��5Ϭ9��	��}
�wAlN�_m�=�v�]����5�Z�@'�"�~��
-9^a��l⾒�A�!�e�F�_+���m
��d�mR ��Xâ~ѷ}
����fQ�[c�W.I`����FD�D��@�����Ef�o�qLb��i7�	I7�KL��8:S�Ϲ�X@��ydd�N�,�)�4
��9r�G�c9��er�K
-O�
�ze�F�־	��%��3
lO��6'�����'Rf�]�84޿�L=^��$����䵁�7��;'Z*�H��l�C"��
-nO��v�=�
-A�qu�?u��L�8;�M>���Z�􉡡�HE�u��MmwU��;�e�or;
#��E$Ƴ�:|��:�R�6Ga�N}�9�J9PQa�U6����!����D��`�#f��,u��\�ʹ�Ď��ڑsw{��+���C�	RA���qh����̀�	�#
�_�q�|�����X�����>�����
������
jB�z
�q��u�)$Y'�Rj�Wߴ��VJ��`
�|�#fiLji����ä�k�S��}{������#-�Թ�ad�u�Y�6�V�H��)|�m_�� �B
���F��e�pO��F`����{�o
<�76�x����"���X��T�Yd��L��$l�aT��u��k����}����m
-�t��Xp�3K�7U��D%]�
%�p���D�
$�+�D:D/V�>5j���kͣ^-�v_C(����^5�ĽL��)��
�iYĤY��Gq��>D�k�]�ƃ��1�	x��0"bQP��W���(<ag
-�h
�}�G�l��c�C�Ϸ��>8�)�?�W��>J�J� 9��e�i�4P/RM��jK���l���)��8����၆�>�s9.6��W𧌕~i���{_��_�]9O�r2D�,|ڇ��|��GM����^;
�r6jg��g�0k䍐Ǜcج j�.3`�IXD������� ���ުw���/�C�W񷙈�H+b�Fr��[��
_|�+|r�6Q��]N���Pa�� }�-�������E�������Fm��nL���A
8��ѷ���ٔS%����-�Ԅ���|�ǧ ����n��W7p}Aˡ�A����b|�H�&߳K�
k����H��C4-�L��Zs�+������O�uow�Qqb~��!L�C5Qg:X{�C�:�#�� ��r�o���lh
:���gz.�8�Yb�>�}v%�Z3��4C-2�¢��g��)���E�
-VA��`Y!�����|�
�ry���[�/=Q7	��|�K�gY�c�v��q�E|��.]�yn���4�V��T�]�D�$�(�4
/�D�&
j�
����Y�=��D������Ɵ&���w�0�G>�&5��?�Q�w����
��׺+��驷����Ӽ�[�Ĵ{�~\�	���	DԎ�#�����?���r���M�G��
���'L:]c��̂�cS������SA*�7t��u{�r�X!�z��	~)��:��Z�.�c�ʿ�9ZiS�f8E�dM%O� �.�	n at W{T��_�\���;!o[*�
��Gf~�KA,�/����u�k,�߱.9��*ƥ�
A��W��$W9�����4}G���������
�\mܮ�1�)�s����ȇN9��*&:d�J��Mp�Y0���)gB5=���B`
tm#�KJ)�M��v��>l�A�mNԧXX5�fx<�(���pe��(�ЗtUەtsm�2\�Y
��Y�ѽ ��k�ݰ>�J[�=w,�����S#s���qI
^
-i/����3Q���i�b�
#���C�l�Z���y�T�W3�r_KZ���(E
�z��;Yk�=5�͜���YL�������hh������@��@}w���.�{�Dc�V*|��c��r���Wnѓ�yA�v׼=g��d[f	�El�OM,�H�':����<�_m����0�6�)�e��
,�?���,�k�K�]d�ms���~f��Uq����9!:��w�Wk
�G����iZS/����oM "L�uﬓuQ��
�k��Q
-�r�-E&�a����(ys�%A�e�TU�g#��P� {Rx➤6�#��
��!�6����J���ɬe �$�� ?{�<��rs�K��za#�
���Kr^��~d��֊���vt��1�����`}� 2��<=��{�P�\�V�����K�fP䞔Gt+i�GZ�P�)�i��]�3�jZ�{�����VyM� /;f���
���cX�0䥾�򩮧:�<���G]�3�t�0��#��~�%f�C{������QB�%1/��!��

�l�@�S�p���@
�
�_����*�7�Ȏ%&�)i����Dgk�6��Z������1����������KT�s��9Y�n/��6
-�rH�U�FN�E�)5�#R�����8�Ya�=ƱD�t �sd�y�͝{�͍)�̫l�
i��t
�
9�~}���&d�O�2-s�
}�9��O-���r£@�XEu��c�w�����\�4
�� _�N

M{2\ޞ
�i�����i�ҷ.)*�@��5�3
�ø�{*.���E��`&�_GG�m~mC뱦��W�Q>9�ԧnl��Y��'!��y�ߛ�%{�I9�b�s���̹�i.�g�#�w@�~
Ǥ\Xj,x0KϺ3�J�4OL�l�({l�ť.wԾ0��S�J>�.����)G��1����.�TX��>^�;�N�5e��.�Aږ��9���k�|�W���֒w�,�򮒋B$�?;gh+��,b��T�[�ΰ��Ĭ
�\n��CJ	;��]�rg��%kʽ��Xpo���@]�¿̈́�S
�tw��G���
-��斉����H�g��Ձ�x�����i[@��:���
-)�v1
��^�^ ���,2輠��o����;�৶ix� 2��!X쥍>l�s�S�1
~3�̺��Td�����߭��������X�\@gy�
�M;[��
܁�p ���QR��Z�V�

��1Kٚ�x��~��Q+���.x�=e
4�2�*1uօQq{��.��n�9	׬c��C5%�)e���>��
�Z���,��������l�������"T�5�~G}�ͳ���Cc��!`ˁ~�[�!�ih�[�����T��im
�M�
�k�"B�
x��t�i
�+�� �_�%U��#s��־����0���f�
-��T,Ğ�s�{�w�9�-!�г̡Z$�򥦚����k���[��?���?W:Kc��y#�OW�
��#
u�t�*�vh�P|*t�}:�G�YG�Ʈm�MB��c���H��\j��!N�9|�� wm���[Ӥ�Cc���Ч��z���
�ol�W3�̀^�\��-4������V�Z4C��}��%��a�[CUOֻK��9�d�����[�O.�CPy�>�Jڙ�E��AA��'�#��-����9\*���s��>B�5��{g���I�R[��>1Z�:
�4�NX'���J�s���^��EFɣYr�]`�
crc~!��U�
NڛA�����1�S6�\
E�9?���*$��^�
-�
ռm�M�`�绅���Xz��g�+�v�Uo�s��~%
|�a�]R|���T��o��_3���9VS�桂'���ϷfЩ��+S��G[C�����W����J~��Ĉ����~��<�f��}[�.~�.��j�)
Y�[4���\��9D�,�"4}g�
зH�Bм�DC���J��(|K�j�G{�n41�^-��&�'�ዩ��	>���=2X����K�R�
&q}j#g ��o�*���5#�ث���
�=O�J>Z����
�2�P0���8�� 'F2�xo�[$j)x6�L}z��4�qI��#�P�bTٞg�Is�Q�Bf��A|J��D}��46�4��2#���P�V)ws�ǖi��ŭկg�E�]���JcK`o#'˝rJ��O��+��xe7"ܩl`���Jg�ew�*�~�
�y{��w�6�@�(��&_�
���lsa��*�z��1�
�

�l��0�le�OEG
jy\�(,CDϺ����I�s`�6���⠒Qo�"���2 at .%�#��
�rڎ�=�_7���j
-�g��݁:aK�<M?�:��O�
-�9O+�o���>lv�����Yi�}<H+�
-�
��!�u� kȾ!ee\4�Um�V>s����*F���OT�’�Ro�`���_
չ�$����������ck��7�P��]}y��.�@F)ߛ�$XLjI�
�;mk��Ej�
9�:�6A*0t@^i��nX����#U����؄����,3��k�!҆҇�
�<��2Vy���xe��
|�BE�i��=	"�6	�+pE�t�_:��낮3-����Q��L}��,&�
{CH+x�1��1�T/7d]]�&]��wA���&�IwV۪C��Yw�_���FoUԁ$�a���iX�Z?$dw��C\��:[�ڽH-_��Xb��<�XGD���crf"ן�H0���\���l`s�

'�澀���T�_�+r��D{
-�8)�6G`McؼQZf��9��u�=I�~6I�y 觤
h���Qd��,:��H'�ȸ��H��:0��:���J��`5��a��Q\ʾ�A���dZ�AH���4d=��y{ %
(ȕ����nL�k�R�ZDg��^�:����zf�F8d��=9
�Q����
-�����N�#*:�����`�rA���_�6���W���	1I��Ն_j��!�������m�n	bc

K
�K��
hH`W�
��P�򍣐�
euC�O{+<�U��X��j��ò)�5V9
l[�|��s��2�'
�=
-�4J@}Y�4��������52ʣ�g� Zxg�>I�Y�ft��1Ϫ؝$$;j���~�M���.��Yd��=!�bs�1OM��6Z�aS=
�do�ܠ��;����cLj���S4���-��
�׏V���Cv+yd���(lDǴV�\���V
.Ҫ׻+��
��5v�<Q�
-.���
��O��4��Ŏڸ�^9�6PW�%�Ǜ�K�N�R���.*�-Bx�(�2:/"��
9���ۭb��Q����
-[b
�z%oɼ�=^
����� b_i.I�jh<4���Xr ��z0��	X�jO�3Y
�q*��.��
�n{��.�[S/:bk����u����7�ID�JKI��)��GO�_"T�Kq9�*bi��
0�O����궒`�8p
��׾��6O�^�׻���c��[4Z���G�F
)�G��&构Z��a�*��iʺ�d�ޗ�ʤ]��Ġ�%��(s?2��Q�l���9`ӯ�ٳD{�lĺ�&Q�K�e�$Y|P�����
���fC�w��9y=J�}K}v�
�Ϧ�A�F���c�c<�2Y�m�~0
-�a���������W+�;��G\	�{��CN>Ǿ��w(���Z�W����9ijU��u6���?|{�䙪5����.l���p�S{I�wm�a�:+�.�uWE�e4��$2o�� H�ʽb��y,�%F��IP{RbH�k4򡑊�_eѬJ|���i����f��p��׵��;�|���
�<�=[%�����nh�e�2����s���n)"�6~�5V�ܿ�.���?�/�\
�ڽ9^�m���=��Y�ޘA'��ӓ~u�U��
��;���4_s/��F+?����z�
{��
ս���K� ����3�qn-�7p�_̀-[�5���Y��Ȩ<��돤|�� 6v�m��[j��b�~U�r�T
-
-�8y���[k�$��R�k,bT�u
����)&���l��2���`rA�%M{Yڱ�m�!!�n�B�w�����H�/;T�
�D�"m'���(��X����d�R��D,ޙD}�C��!v���Q��,t'��Y�\ro
-}���ݿ�`Q?N�/R��j;����.�(�޿��;�b ^��*YW'�a?i��h{�/o�V�=X�C�+ͭ�NX��:�3`/�����V�?[D��Ut�OO��T=���J�x{nw�=]a�e��W�;Z'feK�I�K��?Ku�� ]sU�s���
�
�t��㑐��e$���rq{
{��� -�,��\
-l�WE��bl�=P1`�Zig�YjؗS�5T��8��ZPxG�M��
�xy
k{�6�Z����
�
_�~�X��3`�{Rh�S�u,�F�+p��Ҡ�v@��aR��#uS�O���N�'�/�˜3�uC����_T-��-��Y
�؏L�>�L�y�����
-haX�O]51�[���/q�,�KBb
]�86��]�>��ݙ�D�4�Z��k��
5��E� ��?+�mk��0�ǫ-C������6��
���}�(�Tu�E�T��o�"�
���$�:Z
�;\
��_��@�Fm��XX�r���`k
����")��)D��B��E؏?�2�[��/uC�/���u�E��O�S�s�q˂��� �0��GZ��H�.=Y�pNM��L±���W?T�(~��@�w�S
um�'����
,Ћޚ���՟~k(��y�|a��oo�>ʳ�+�L�2vg�){2ģl���$�CT�ԐqE�J���S��9�J�Xx�'n9�֯j`
,s�
1*�%��s
�
�Ŝ�لC�d�#(9���a��do�{���Œ�ꉶ
�1�
ۙf�(+�/�ro��r���Ty(H�P�b��6a�
� J��	N䜣����.
��Z!o�� a{���c5
v83 g���~^��=5�1�ר�*�DK;���N,S��B(�?a3_
h9�&}��2h����"=�wf޳s�Ļ�L"�����'������7L��=	�Bӕw�vAHxyQ�
���`�;�"�X�È%�ϳ���{���}�aS�<��6Jߚ�T�N��t�8#��.+�#���
�<�
k���7���(xY�V [...]
�Ǖ��>�/a�<r<du��X��\@,R�r��B�o/y�O����P �
Bƞ���f���=�ݹ1X�U-���񻊖��z+���K���疿�v
-����x}��p�s?��妼`�HA��<����ۦ �s,��
z�g�����{
�B�o��Į|e�{�Q��
'/�_چ�wJ68HBͽ��f��6g?�q�o�QC/��d?�ՎyF�e���5
�
.y�*y�=���)���*Qi>
|��S�"B�g
�t����e�t���'F����u.	>�
hZ�5�]KM,�4%��
y!��>GN9�Ӎ�yx,��������u/mBf�j{��I��%!�w�ޟ7�V��ރ��
�B�c��B�ec1�>ū���>��q�|�.`V)�P
-hm4ڣ��
hi�C=h���|��Pa�~)o*�=��=�h
uJ��;��Q[��O�C����"�FP�ĽH*m�eݪ�q~��oSJe
IY1����S懣e�hE�`[��`��^����j��5@����W�2v�Qp�/+���w��ܰK���{
�է"B�-9���Q�q�m+~���#�_I��.0�Y��TE?=R�pmr[O�$�e����p�]���ә���)��f�9�
��
������TjbR�����7���o	�i��?#S����]�����ɚxco�{UK�D�/��W��Q�:���{d�e���dz�u�t�S��ر�A�$�絉��ЗͦI�"��ԙu�F#
�s�O��$���y�
?1`�V	,�.��vg�[C��r^�'��{��y
'��]Z�g_�!�^l�I<�J
�v�Xd�
i,{�%���5�~�$F��H���qt�o[��0yOٓh��+͠��J�h�
ٝ�Z�&ڤ\ܾ�C��Y��!X���ws����F��8*V�T|s�������,6��Z:������uE�+��o(���U�3P
�G$[�a�����
��f�GHL?��
�
Yk͸y<��[� �
cu�� �,����hM��B�G�\}�K���cR|rF�o����Hy�z�u�[�i+�?���a
��<��
-n�U]k�] �}�t����	�W���h���L�"�k8���{A���~�5A��3�Z�Yp��O�v<��zc���ǡ�*B�O��Z�)Ŧx�}
���݆�/�6��	ۙ"�-����灚�$�0,Ծ��uJ�
�-4	��!9�͏�̐�`��W�@��>h�}�G�]�B�����v��*��@åZg��2Aѓ�ֲ'�^�k���;[k=�q�
��!�VX�;BB�m�V�-bU�
 o���B�r���,j
-���@���q��K��h���Ӵ\��?v�_
�H��&&�)A&
�0':2�HKG��,�u�V��P�lu��oK���*�R��v��֩�w�I�k 
��1a�����~[�)ޓ�r���e�?4��j����+��+Q�Gz6}O��/
-��[E��S�եD; ��ET�MB*�(	U_�CN5�;L/|Yq��#��t�q���
��.��߬��<��ߚ��U�����Ĵ%�z_R
�*ٜ�����K��Kf�E�욮���y
.���M���ym�X�@�zh�[�j�;���!D���{�<\�Z$���1I����m��.�at
|�����s���U	��e�>O-X�{;�K�����w�ИE��K���ˡO������.H�矫��W�m9A�Ƭ���s�F�.-��n������S
v"'T�;K��8�7U�O��C�~�W��_s����y���_\�G������5��F_���2���,��oL����M��p�1z�ɿ/����A�^Z �\�
 ��.��RcYďԴ7ߩ�J���'��!�~l-�𫘒|i����m
o��J�
-K#��I5�e>m_N*�n�W�̴��En�@C
�3{� �����s�� �s�:�<2B�e
�=
-�؝��r/��K,�i�6Iʼ�>��Q4#��������'[�E!��r�GjR
2tF��ә����0�[3�\���%���T��uv㑞Iv.a��*R�
�[�<��2G(�Βr�ư�[��}��xY��qp�yf�e���3�To
�&�����P2o�c.�ãl3��"
�lҭbc<�F���FtH� ���1\��-'Uz�,�!���d�_����<����9�Q�rn��	L�������
1:�H�"'Q	����=)�xw��V`s�rX��d]�U���)�p��P�#q��fz�d�]^�ٮ`��
GF&�"!��J���r�MD.<�n�ukش=����*�ll����2�ul�W�gm	)�@��9z�Nz����a�S�j�>U4��KXE�4�_]��؜�'�Q�+�uA澆µ����>j��8>��UrOךw}{���_�DxU�ʭh��$<�d�����а��gx�Y(����]a|ߧm�����Z�}�V�5�MX�|&ޜ$e_�ǖ]�$��Ͼ'f���}7��� [...]
-�m��z���PxK�λN�x�}a���=����Ww��b�O���觧ߘځy�(�=T�Xۖu[H�:�X��Q��sΙ���it�$)�����_I�
(�(�
�`��;T�XL����Ub���ޘF�r�à�ն���~x���88v��z���_[��tu;6C�Q�h��F/0n�(62��Vj��2h�z��Q^����;�� �
��U2�DG }^e�l��
�a�lO�S��4�s�*$D_���o�׆ZƠ�;#�x�Ljw�Sj����EM��IV��89kwhل�!t�e
-��Y�6Gp�=�������zn��$4�%�NǡxW(`�|]Ԟ�R���6F�1��� ��ۦpY;CU/�͉w�S�av&e}��0I�]L�ߘ@F�u4��u���q�k��(�,4�)A�I�-��_��݇:����¯!#�R|�_�a���#-
��c-�Ģ-�}��r?�M_WY���+#�g�)��L}�P������P�M��j���
�dz�6���w&@/�G���=�A�Nȓ�^������K��N3�7��*�,�uo
��L��h��|��~u��]�O�e���
���$��e�x�m<pmao� ��	N�b{��aby�7{���: ��˘��79+����?����.p�>�Z�o-BB�MD-ٜ�E
�:P
-���p��[� ��I�id�KD-v�6 at J�
�c�͵/��})
��C�?_�~3�O�=C+����Fx�`D֧s����	񓔢�����PS#��Kx�Olܛ�qa?7��_
DU�DeƝ�D�'��`��e��,1��aT�Oc���
-~�c�
�H�_�L|�����G_
ܖ-�c�	��{o�ȸ"e$\�C�'ȹ���痻@9G+������*^������A/�5���yc��I+�t�<��o���`�
&�:V�?�qϖ��F�m�x򃔖t�	p!?��qBZ��2����d|Y%���\��6y����$.���h��AR��ԧ�s���
Ԝg;���}	��:��� ����;T��'�4�Ȍ�qR!�~�����=��g��kb�0q7H���9��{j
��\�~���q�>-h0�W�a8�4����`W�J��#��͕1���09'���P�S�"��*B��$�#�C�;B��C-��.B��B��: /w'aq�|�O�"��
���

�D�_x�cRN�L�#K�u���y��?Y�0����
~�_[�^��P���m����r$'Ulּ[�o�ֆl
׿���p�#A���̝IZ��R#�>é�L���
�7�]7wGP��c���N�{s6�%�MC5����-�W�����YD�GN��*y,���I7���FG��
���
�[��
<����q��{ s�J��
��{�iz��81}�������3�O\�S	��m�ӊ
�m
�ϊ���Q�����]97�ǪB�2R�s�Yc
�����Y�c
_f��ׇa�=�/�'�1��U>�ilؙ�;$<�G.`8DtЎ�U����K�1�N�۵1z�f��6� {,$�ݟ!"^����.l�Z�������U�p]zyYPy�Zt�����$"�B`݌����9Z�Ėo�ۨ�>\t,傄U���>Y��0R�6�i\�Z �o����
}�_Z�ֶ�3ɔ$�̤Oz1=1FcKb��wT��"�#EA��n��{Ob2g�s�y���>��!l�׺
-��Z,�LT#�/��b�WnZ�b���[r/)`q?u�}�Y���۸�:̯�5�������!"�ǫ:�'K��Q��fT�ϴ��':�?����B������X%v
�?��������+V򹖊�?��%a���8H��3�찓�G���A2�\��o�؇������ �ɉIq�s
�(�6��OJ֛�A:l��A�7/�jO���9�O�q�fz��I�/��rr��s���m��y4I#�����6xꐤ<TCH;3��d`�b�d���㴢�h�\��(
]�/{:�W�Y��'~�������[CM�ܰ�蔗�}-U��pY��<��(��7H�oyP�����,P�G��fB��g�̗�lD��d���t��߫B���]_G�e���
7����DM�}�0 K��F/���N\����Ѧ�+6}��jX�0��M�m��M;�MD��ׇ������?���S
5��f��^�t��:��I��<H�|
���
�� 7g������m|ꂳ�u\+�_rtv<涅��c�d
�[NdƎ
���l�N:x��������&�Uc�i;1��D[v螇K]�q����;nrՖ���[���6Ak��4.����me�����mOS�hO��u�i�<���󀾩��ҡ�G�6�>m�r��.v�H3*x���`�lS`K.z�p��Tq*֬����R�t7>
�I��R~S�ӯ���ϋp�5�oe3䢩~bj�L.\r2�M쪠�Q�;�!��Z��H�:�

KVv�V�7�@OYsVj颍^�7r����Y�Ɗ�V���E-�p�@)���'�z0���{.�Ѫ�9".h �^u0����o�zI��Jf�POs���9kRE�8��pG,��9�E�,�
-V,�U���5?��U�zE]��h���
�(�3�h�Ԓ��)i�{�e��LT�Q�~/�O�d�Ĭ��E����~I��Ʒ��q>y�N���Q��P)�fl���w|�|Ǎ̚UU<��?����7��G�9�F>,\M*}�f��M�KoL���R�{��[�����E=�h�,Du�rn���o
U|�ݜ�n����3:D�.�cv<�`?,���4(��-��N�������@ �����<
����yr��ó+�C���
ͽ��SM|�-�
{z��Y�ѧ�t�P&j�ƨ>��� ���c?e�ݲs�
/��cjI�蚵�b�C�g�-�aq�&lƂ�X�`�V�m��^�l����)���F%�1ts�u�a^
���g˚�W�FDҬ�Y�G/��֘|~��><؇�8�Y�tZV�h����2��fV̈́����m�m
s��ܤ�U�pюN�ꯋX5Ó���U7&oڈN�2�Ҵ|�KeSڕ}�z�LoX���A
����!>c\G;Zj��X�/���/�\����{nJՊ���h �,hiE�V�X7�͌�����ǁ����[�%�����
����.�
'�F�-{d�_�
1�{�L즓��a��9
+��IY��E�
i���Z�G�
���!
-�0 at A
M�����
'&go�X�g¬�nY���aGgN+j_��KR�.�w<,�q��q檗Ϛ6p����E
�6h��W�4�� z4�a�4Ӄn����mk��9�r�ǣ�ڨ��V|β
�����my�I�V��a!4b���,e3rb򼖜3�!��ɟ���U��9��x��o��6j�$e-�9��UL�pIs:|���p����^���Gj8>��$��F��e=��Θ��
:d�Àyؠ� /-�pūf\ަ�T�l#�M9�~Rj�ƪ_�
-�;�־�\�%���q��,�km��eLӁ�
-j�
-L�KZ�xZ��}?�n��=�n[�7-�5+�jF�
-��%H
������vm
7��xnge���Ɵ�a��l�	`g���Q9o�a���2�%+V.tAϬ�S��ݘ��
�v^O.
S1r�{i�3:F��0�Z��u��U3���͡A��E�9��	sū�ԍ�����vȬ�[=Ҋ�]T�27��u�qXE�㊯r�R~�$�.Hy���%��To��U�l�. ,�[9kC��U
�lg֯���7�d�U�ٱYˆ��%2}e��0�!d2��p�'7M��-;�fe�n�h��
J���Q����=����es����z���������!n�˄/�	��=��y
�b�ȅxE����c�����_��WE,�i
j�Hoc�H7$ao��[w�����W~Y���w���)��$�ƈ�{�.
�Y�	5���T���t��0� oy�Y[���m�`�X��%U�� ϗ
���Qdχ+�rJ���L
�l��T4�
�Zw�v&�]��fƒ���
��B�_ ~o9p�Y%�Kj弙׸>(�V6f��*�W\dȊ��\�� ˶��5'�~��':���bT⦻U42+fh9�z錁R:kb�fm"���C8e���E�&eO��'��r �~�.��%�tw��8
o��
4
���8͈��<��e�W��i'��cb6Fٴ
id���)й+
>y�B*� tÊ�^�A�:dsTԳ>֮^�杌��Q�lo�߱5J��xHU#}ď�
-b����U_S�_3��f�mGӭ��'��Q�h�xȐ�P6�&��eA� ��K�&��%:}N
�
�@�Ƥ��*䇝A>w�)`��vn��36I˒�]��SZN����ׁ|=��',YX
��6���K�5�L�
���9)���ҜRH��^x�ۈ@��k�Y�JU˞�����0�m����&�U�6F�^����t�B����f\E-����.l���)af X+�拿����׼
ܔ�)kR�K\L������ie/���U��f��ƙ��ARݐ�铱f�B�&��H#m�� �Б>y��A�
2�ʃI�hc�	�
jm�
�4

�'
”�Z ���ڨUݫ)�[-Zy�A5_M)�8� �������Xo�+O8���ݔ�m ��zZ���R�d�B�ϞMRч�\����
Z�@���+�N��S�5m`�
Ҳ�K9eP�>(��4~�7bS���-�jk*j� 騉�S�ޛ�ս۴:�Z� ^�
-���Պ���
-p��r'��9
�hg��r�o�/�H�HE��?�FR��P�pu��\f�'���E'�h�5/����-X_�g�V���y�9;7nn�
��� P�f�zX'�
"�2P�A=.kш���1P�#|κ�K�j���t8�����1~��Tk�֬Ȱ3+�ߝ��V}4䜍
-hH9
��,&'7�g\�]ٶ���c�Vj�� 
�2��]���Abc��9�l�
WՆ�� �m�TnxY��	^۷�V�q^���[v�P�~�s��l��K���\�qw��-��}[c��y1k#�-z(5��
⼝X�dixx|��/�}t��
����PR�'5�Zg/?_P_rf�
��7�gm{Y�U
�����5@�l�0����6��Uʀ&_)��vr�L�
��;�R㒛O���
G�l���2�Tp�
ηV�=X�2�#��f���ǟ	ϛ�Փ*!xT�R��${۪��ȴE
�hb֬8x�	�j\�Eն�Zj���?c�rf�m�3�aH���V�kg
�f�A�p�ʱ�u~�(e.�{AKsJ��Z�T��#��
2� �o�v��ܬƠ��3���l��u�>J͖�T�dg�4ԜY3�h�&��QQ��M+�f��Ƭ{9�u��`�MhHYc�6�r
����~}{��\t5�x��u��5hl!��9ɦNQ��@t�!����+����-�V,��-����ʻ���@�l{��kc�K]v5c�l̚%+�`ΈHX=�
巸��q)<z���
V���t���Z�=a f̝�9so�����*/�<��6&Ī
 �wg�,�3���Q
�ْI�|c�Oߛ� ��M�9��3n�]��o�~��#1�:+�[;S��WwG����b��Y���m�v�w��ޝ	~�� 
��g�'�;�R�n�ó5��͈�9&i�C��k<��dw5!�jJ]zxy��Yp��F
fkL(ݛ�8�&�L+#"�� �?c!�;��呶�-����O�I��&���h�O�펋6Rˤ��=g��m�����
?����c|�\�=E#
γ�WGĵ!>{g�E�;&h�'6���o�x�����⭝fT�<]Ei~���gUr����fm���v����Sj��7�:�[
-�|�� �|8֮���+>
yDK�u*�َ~9��= �
��I�[�u��xĭ�^r�ī(�+l�,�;U���b�����u��N���[���яi�p��n��-w���Fu����V�*˱w�0C����g�YY�fm���L'֑
�J��:@��\�'�p������
��S\���H�S�U8� W����ٚ;kf�M鱟,��u�����V���2�[�ħ�݌� �4�O��[��
v�%`�D��3mf���.T��ds��
-z�[����!������I���
�u��m�΂��9>)1e��^�h]���/#�z�Y3jb�O�Yr�s�f�^�R	��
��'�`�� ^?s��(�
�ՙ�X�H�o��(�Ȼ ���j�\˴tX�N+����Q�h~���D�Y�iK�f켏O�4삛^�>�@�^b��D,x������^��&�{��n�<Q�SF3Ȳ���<Dp�"����r����jZ/�.9���Az�E�ܙ�K����'��� ��2�%.��w�b��Љ3�%�־.�C�Y3a�d�[e"����U�2�)��G�|L�D���)+.ys�K���
ޝ�m��{ɗY^�a����*G����묠ow��Y�ssގ�	Kw����2aj%,���z��K�ޙ`q\��)�h�%n������<�K��L
-�l���!%\o���'�ʞ�U�*�1����@@I�A@��Ԫ���*CB�ʲ�������AC+zm��;��U��z�&��Q�0��q�T2����4m�Eh���j���B�LӶK{��T��
���^���5_@���*im�k�
��pGߌED�*8yvy7D�m@�enlo�+d��I��-
G�D8� d�3(M��|�p>���$�OO�����Cfd�YZ}O���pI�a�B��0�xk_�71�����n�>^BUGu�z�je�*mGg�O!�͘�1Ӏ���[�䶽WEυ��G���_�hx´\�]�I[7�;�"�cШ���kVD��X�|ƫ�p�5l�T��/ĩ��2�J�x̨LZz�#�����XZu�y9����.�m�QnX���N��IšT��Zј

;�σx4|�F�r
�
ݭ��n�Q�S��a,�HFk8œ�z�C
I�,r�M���;��;iI��2�W+s�OX�[cGW�Ϥ�M::x��n[p�*���
�Q��TC�	�η��i�l>M�ç���M�'����rљ�L�Y9��?�
	�s�8��<�����`WH��-R��CD_q53�&Bٔ�V�3+:���ӣ*���2�
�2!G�"�߳��?5A�1U���K(�ʲ�sӠ�K�J�6A*n�	XQ��V�F�G�hԝk~�j�%�㼖�s���)N�δļ9�i[���J�#�~�N��+$��nN{����Fӧ�Ʌ�d�P�`�kɰ�2���-��Ծ?.V�{Zv��C��ew���|�<K���6(�"��k���?r�p?%~�����=�[����xȟw�x	��(}����׵�e���U�t�z�fH*�!�`
M��O�n$�	#�1��[��
a��m�ZS%�UZ�~T�}>�H�sh(�����ʏP��D4V�7�+
�t��oӵ��z���cvM��ٳQH���F�լ��_
��ϕ����t�
-{?q�^vH�;쉗�I!7��C~=�<$2���"�xh�m]�4e����y�	Ve
H�>P��w簙�h"����_�`����\��Ix�"#�p�͂\�/�nF���VtHZT���
�=B55��n�L��g���n�$�>��f�h�e#8�l���o�t����
�V�#M�0F�(�(�
VQ���,�kE
�Jz��g�ˎ+��E�gv���5%:���^d�Mo�U�9�=>$O�/��_�k�nVի�����a��?<^|*�Xx6����'/�!��%�\���&�z�ڣ�𷸓X��yO��gVw�
vtM9�H�^֬V�Z�{f	4�tz=�~;6�������?`),U�N˓���#�ă��!���QI��
T��
Ç䁬��7��Ӛ�ϔbE��]�:���駤:�e(i�(��6[B��{e�+͵j��RB<�O���z%:�წ�����o��:u/�޽��Z�Տ)���T�MMk�!o�X��O��ri�zA�Gg�4��2��PW�<���ך���tT���	%�=�Px�30����7��Ӊ璓j.�'��S��˖lB����4j��
K%C<��o���%�C���g�3�?$�S���1�֋_.�y��6��r�^VH�'�)Q�\ٮy�

���,����Pډ�Αr�p9
�\
-o��C�Q�KIy������|H"�����ǻDjȭ�ʐ߁k]�_��52�q���Hԏe���m�|�B��H8s6�d���3��@��"�d4
��^
<�[k?�'=�4���mP��G�!�	��ޑBn<m���J柈H���
�Td<�

�U�@�:��h�q�^s�Oo{�`h#�\o
�i�AFI����Y�d��|��<�yx��?�e
-N������Ȑ�KB
FaB.�,=�
����u�Xt�Y��m�"�k�}0�Нʐ.������bX5f�f
j�Ve���驘DΩ�����1'.��)�I8���K�SOD���@��ޓQ(�-Ȉ;��fwJ4�m�yX�����A�KO��~z�s">M�CR�������|/��˷���"�(!��B��5��Ta=�Y��
A
��XJ]]��a�ju�s�b����N��m+�T��_
1\�+�8��
���KO�~Vr?�6�����1M'_$0O�͒�̬�\��Ǟ7����^�}@�
��+f-
�OAHP�/xt�+v�hE<�c,��)S��!�}
-���9'^EB
<�
����:\H�'Aȝ��.�B���5\�/�5��5��R�2w�ɥϛ�)A�Уl�����K���B
m8�;q��_/�8Χd����+x��^ŐN���)�?bN�g4���9S�����w�f�B�F�]%��m}~�c��,�MF0���ᚫ	�ͿF��NE$5�x14����^��}Q
������ߚ`�����z�VN��	~5%}XE�p�Y9��
m=�PF���>����Ys�z������ϳB���?e�����zK�9�㏪j�]"^�T��y3�OO��Ӗ�4p��CM��u&9;Y.kK��!���
����^���G�U���	�_����1&�p2!�s2���{~��zB�'k�K�x�wp]9���R��ƴuc�['�w��@
RS�X�e
-݉�H�͏9�g_'�~z�w�i����懄��N�'�C�=�
�
pԋDAH|����z�2˙mR9Z��
�c�x��jP�.V�
A�`�w�ӽQTC�y^�`��3�K+�|�NAȵ��!_BCn�V�\���y"5Kx2�P|���~��i/�50���JC.Ҭ��{�&G�l�) �����3�e(Ó�*韕
�W�1���e�WF�~����H��J(j��R�����	g
�z�ܘ!Ct�ɪ��2�'[z�,�D��)h�PYґR*[��L�?���_"���ھЌ�ֻ�E�{�Ŭ;p��-�i�A2�Q�BU�n at V��u�uRĜ��3���Κ�mSڐ�Q�l$�:E���r�P
��T>�3,��U=7��E
�������>�N���
_��G!v�V)e�Q>Z���i��RӽVeRG̜RW�Y���ׇ��K;M�3�$*�/�"
�?��so�p�wʐ��Y��│;q���� 6������#�-��^��r�I��-x�^+1�b�Z��*�$�b�؞��Y�qD�c8V��
-������[L�Rz
�v%����M�K
�Q�I����3����.*�7"���7��J�TқI%0�6��W�‰�F�'��Nz+5��
�z
���R��6i�y\u�B����u��6*ho�X�?�/�p`�����CS�W��������1�Q��d�BY��X�a)�puQ8r�c8F� ��z�#�"�i��S��՛�/�T��:b��C��I�
��
�;k�����N�I�k5
4�>DGGk
���
C�<���%v\�If�L�o�52
}*����<�
[~J(m=�U��B�uu��]k밊���`K\钝 �eS�]m��
A�D"IiU�㙒`)��B������o3��/��<q�n^��hĉ��Ч
A�p�<���{g���&��	%�͒�T�3*��B̈�_�/�E���%�Np��Z �T�eZP�X� �hRi��L��M
�wC��`Km��~u��@O���

�ڱ{~Vӷ9:���l��Y�`LG͵�{����`�i���T��TEg[rOwW���P)S�!�}�Tj(��w{���mG��4�
��|Լ��]�s���E+�zm��Xp�\"�G�Z��&'ts�oH����<Z�!���xPG�� ����8B�-��b���0|l�
ĵ+��V��<7�ٵ1DiXq@?�{pu{�-ʽ)�{q�s�e�w�5}�^Ee[�._�;
-e���HBo���r�	����J�+8�ݡ�a�V	aD�O��FX(��.Z�
-G���-6fhGiZ����r�ZR�TvT�Z��"EF��P�-2��:�s�@���4�/�,kD�
���?�"���!3*B漚T���7�L䤑^�U5�%�dC)ަ׋���
iW��]�h���
0�F
-�������%������Fy�ρf�]8!+~���/	YSjbʴ�S0�b�y�6aӸ����5���)
�4b�Ck_K�C��0�g�j���6ΦKn����>t޶�.z��3�C|�13�|=�yO�n�$DiXn#�&o)Vu��Z�S�,udS�2�B�D4��H��t�4��U�!����'�f�[���>�u�)�,Ie��ZZ��m�36
ЌY���쾽
aS�a�2;�
�UQ����wN��D�Vc�U����-a
/��W�)�$���:�en�	��."��=�[���M���\�)*��8"b�Kre��#�<?��5nm��
P��2b�AB|k�3M��`�O_
P�����/A��h���<�-���~�}��}SΔ��m�&L�;�;cB��`�p�+���8�5�v�A*����glB�K&���VG؄U/�4g&��(��L���>zVY�r���>+6m
��%W��h5�c�X��$U��E8�����ho�Ne�]��q)�bܺ��aga�Ł���u���ˬ���T���f
L2_�;�g%��	^G�Ʉ9�b���7�᰹��зC
��֠��i,�~���S+�6��t�J�X��	��
^P]�vD�ymDR�aV]���(�1ҊI\�0Kzj�l?��p[�=G��E
�,h‡������[���H[��(��n��^P��.��/VM��
+.cV��Ԑs��tզ�=B�
��i;l���{0D�_�*������x�v/�$ �_�li���@��
������!JmЈ�X�3!Gc
�w?y4FCl:pE��ȸ�^��I.~��nFG,����t��M'��8Cz����m���~F��zZ�|7������S������34
r���rۉ=�kZ�?HG�:u
:hR�O�P�fP�c���1�]@ٔ0n!G�m
�
-nΔ�����/���u�~A_�~�/�ގ�{0�L�:���- R|=Ι�B����8����f�����@���M%Sv1)`�2=>�ֆ��3�j֭��5Kx�Ҙ��Ƃ����}/

-\O�5�z�Z5�E���>\�פ
�1{CT�����	�wU�>��q��4�	�Tʜ�>nύ
���$T�X�1�f���~*��
��傦
�eߙ;�0�־�u���5M��L҉�&r�_M�?�����`��]�'D��
n�����g{vl��!:b�D �x7��
�zVU�b��8�ߙwgFVp�߁&����M�D����
ڷ�v����%m��ɶ�����;�����MУy^��
�e����*���[�ai,�WE�(��ՠWG�x�_�Ć����;h&����
�����v����wk��Xq��&u��q
�`e��o���>���
,Ȓ�Q�?DE
#�
�.L��!\ٷ%�c������`��t[O�y�c �kП�M���~l�
-;�����r��3q��6&jE�˜�4��1b�?��E�
t��@�� 횰��I=�������G0�k��G
}��6�eϷm��]7�v��iZ5�*����Oh��T��Ae���^�+K�� {4���,�0�_�ɐC/�r�I.߰@�畵�'��.�`�l�������6��
�Ӕ�>y݀JZS�GL�s.�v�9�Y:
<gA�M��R�.�$l;h��^l��2�W�z]�{`C&�Y�����n�*�̖�����u8H���a��M�
6kۄJ�s�F�=3��q��lO��
Mu졳>q���f̉�6��{�E^Jݡ�K�q5�6�LxP�LZ՗Dn�j�w�踭a.��X�@?��˚��q�1Q�
sM̮����
���vU�Lٰb3����2�`�P{ A�l��
<a�ޘ�?|����Y�l:�	�#B᎗�ubA�&Hܺ��jnL�q�27m��U�ü��Ց��>Ă�М]GM���,hKcŽ
���8��m�-j�.�){n�[��
����&혠��uKX܆_��$��;�����+>;i�����Ws]������Y�q�O�ɫfxJ��1c��T�?�?
-4~
���m
��nT�q���Ic˂ʜ�-y����G~���i���aGL����
�I^���B��)o�Ϣn��;ntɗQBݮ�P��!�W�D��d�`o�߾d;�®y�� ?_QV�\;�ѱ7&��2C�m����7���k^�ߝ1�
_
�U;FbΞ��?�S�l���т���
-�4�Ok�{1!mx�ob���pq�,޲��
�.
�Ύ�3��@d��h�kh�r?�鲲�ɾ�>��x�dm�LoE�Dw�N�a�����>r���*"؛~uQ�{w�P�fdžN�w�
-w��5]��
+�p��U
<.(�{��;�-Yw��
oM�*B���ǝ���W���-
����yٌ�;3��9��ĝ
�e��kN�}N[璀cz�I�mԪ
SS���!nIQ�4 J��e'^楜��6�ՍY
�{^7B�v���UU]�z��e5$VCO��
�:�I�{����&��:����_�쌽��G|�!3?�1%{6L�q�Ö��ش���аH
{C�����u�R>�Ѕs����ݕ�W���
�����m��XQV��ro{*��R�?B�7���(j�|"�~a���

��
��.�\��?n:��yd��T�y$r�ؘ��#U�qe����3=��&��oOt���6AB.�߭�A�kƊ����¯
l��#���N��>�������u34뛟�۱5�l�`W��_�k�a�H��AJ����r���͡
��Y�R��=
,u�� lm�"n��4lK[�Ջ([R�EMu�<�2Ƞ
�(��!D.a��
-*���vD���h߇+]PU��:��x���$���%5,�EOH
B��ձ{Ct�q��$	~4��<�j�OtؾO�
�/�h�>
�_ց�����\7A� 
#
�Q�� 3L�O�.Lš
:p㊎g U��MS�둎ܫ�⒛s}�כ:R�� 2q������\���$�i�uUU=[��
�~�i.�2�{��ɀ-+��{6T��
����g����孊��iHZ��c�{��}u��
��Ч�P7��ԫ�Nڇ3����J�}U
-b�_�x��#�ҿFQ���+�ҧ��˓œ��rػ�>|�xG�
5�â�!zI]���i�YQA"�$�����a���)iCdW��S�ڤ3.j��@k��ey�]+,e�O0�
-
��?:��Ǐ��\mI<�'�fg^[��_}q��� 
��'�:$̽w4�T;!+}��$�6��~s0R냾�u���Ŏ��p��@�e5"{]�o�2!suĨ�
ė��ߜ��d���A�o��32dƢ�>�t�Q�
�vCV
 �*�����o/���c����3����w���
rRΙ	q�Z�I���O��Ǣ�.j�A*[P|��}=/�z
�-y��.~��0�DM哊�H-%���	��y���4�����֔�kj���g����o~|�G��p��8�o?�Ň� j���Ә���}�ʸ��)z~4
+�ް���<pcj�=M��{��޵4&�
 
ؚqO���Ԛ�>�^��Bf�՟��y��;E��s_�����.�Qg�����= ����6P�T/��_���ѹ{6t�7:o
�ұ��ks��GSX��0
��E$m;�=o���(���S�����u5(f�/;4В|���=���
;�y_�e
U��C��{�0��Ad�|_��II���C�qf���c͂��s��f�ro�QY�NL֖��i��X
(>(L�`�}�uY���lk)�=�/���^
�W��Q

-T̢
�c�]��z���Eo�����c��?F�)�+@w-��o.Fî�X0�W�rˀK�2�?n��6u%O�,��E%蹃����^p}�F��T���ׄ-�j^o��߭��wU>��JB���g�ꢶM��M6-��{�ae]��cN/v�ݛ�����u��NX%�_���mC�[�(����᜕�񜯹�R�m�C�4bӷL��]#�=�O9���T�o��g5�7��x���}����xyi�oh��N_SW<
�$_���<[Q�E�t�ܛ�({}������1��5%�~w�g
:�>,kA/���n���RH��ٌ��s��5���+���zS�ϫ���9~�7g�}n�� 1Z|�YLr�/ؤП�
�?/��N����Wǀn�2���7�ݿ��V���&��8���*�a?�/���Z�5���������E(�1�����hqa��h)�MԔ
���
[c�pK��/���/À���\�M]�v�T�aT�vUGL���A̩+�Otd]_UW��(!o�U�Q;���%#4IO9�Ώ���m[c�Lo�Ù
��y`��
�1��z �a���'�Ҹ4;�����j��_
��[
���Y7����_ >�IK_���
��5M�l[�q+��۫�e�K
-PĮ�*��U��92��J$�"~�K��|��K�۲mC�-(�o��q��W<>�nN{��O�1J������x��_���}3�ՁS�{ޞ�4/ϻ5(�9�y�C_Cę)e�1&㬉RzQ�M�S£�d�O]���NV�#��qa��%
&�-,{���\ݶ��W����J��}kC
P�Q��� �>
kɿ�a |���������\n�>�$�:�ʼ ��Ø��M/"�~UP���^�8�� >�,�2�t
��I
9��	Y�K
3ﶉ�wkN���s�S/��7}����3��1���p=#�� �Å`Oy���!iK�H�66��`i�&p삢�>��bf�8-.�v����!ृ}�/�{����ʟo�+_��I�Ȩ3��6�z1�QxK	�xY^yn��ty�P
��W��M(��A�q at 7w4"���������x�����
,�U=�����amZ�ًj蛅>L���fG[
�,/x0�]xo���麁X�nf��+���
�L\�D{m���{�/(�7�R�h�5������_�mF��v�
Lw�<�����?��Ƚ��<�O+x="��s�

~�#]ܢ[vj�E �_=�zY�����	x�@7詤!��e
<m݄�P��.��^��]���	�p���d7��
�LJ|�J����Px׎-t��[)	ל��?ܴ�

Z�<�R��|:�ц��|�ؔ�g\2� �O���לp�I��e]W��Y"b݂H�w+g�ʟ�H
-��IJ–{˓ ��o͹?ՙu��H�}�t���ަ�.�hT(:���=�`~
�e
 j�P9�����`�O��x�5CC춥�Þ
��m�$���+�1��������go*8��C/�dǁ����
g����
����G+��n���0�*�԰�#
�W��q�(�1?��9��u��*|���
%��g�
��Bo�Q�m'�����
Q��6нy54��R�h���]���٤(�ʔ���JO͋M=��pG�m=.��)18b�H.���.�������
-*c�+c�Nt�_�i�ԬkZb���d�왨��IIm�*d�Oż�ٹW]�4vm�9~ͻ�[&|�g at clꠀ����soMvd_[V�߶@↥5OX�oN��bv�9֖�����[��O��W����>�z�}wV�J��և����_�>�сƒ])a���^N����Vrd.�0�75��C'�j׎��3C>��b64���^e
���v	��7��R�Sn�������:ra
��آ���w&§�FTƊ�	4"�|6�+�h�z997&;
-~�Ю
�3*(����ghU�8!*���_��{X�N�	S/. �fIO䖿����������>l�󉣭��]��R��t�D�ب�+zl� !��>tʵ�Vp�l�͒�.|�
�䕾�E���b�������r�5<�܌��Ѻ���z��U]m�:朑S��!�ը�^v�M7;��H{q�loi�����ߣ��O�
Zxܶ�0�

~���i�9��7�_�ug�P��?A|Ü�棞�yu� I]�qP�3Y�����|
�k�ʰ
K]��(��
�e��T�b����`��3K#`*6�o6,��yeƣٞ�{^\��
�c�d
�{p<�łN9��泏�8tK m���_>�U
:'���F&l�5�z|ʢ�1v���٘toI
}�
��U#,vBR|{��*��_�~������˞��K��m&��Mk\4�2m���3�Ƥ%}S������pƈO<ߏ�:�ż9�|�}I��c�[iY��s�6-�ҹ^d��= ��v��p���β
-�
-�_�|�m�|tp�����gs��k��
-R�`[�.��/�fƚ
����l�)�Z�b/$|NVzo����D'��E��
�nBO��"���eNZzo���� �d��!fv ��ה	`E�

2c��|�ߒpnF�u-����ܗ�xKW��u�����#[j>��3�_�����u�Ҧ;�O��\��ݝ�x2�U��",�[��������Ė
y�y�֪����GFlԹn�S��ӫH
�>�j�;'
܂g
��������{Ƣ^V����sn�H�S����կ֍�,�;�m��;vxP'q��'ݍ��;����ռP�nN��#��uI
�ʤ�.d����nJ�
;$ʾTA���������fV�
)���΂G;ǟ��Q)C��c����͈�Uyq�(�ڸ0��I��Um�����Ě�����
���xN�
�e�ů�
-�L�?ܝlK�iB$m���f�M5"�܂
�����u�
�4@G��Zs#�ϦU������	�V=�q���9CD�'H&�g�D�����d7���/,�kb��(_[��At��0
�e��d�[ 
^�8�Wp{���_��BDo��i�>r���i׆N����;�#����E�fR�����ŀ.���巧;+��)@�	��񗶔��C
2�^�$�Y��E�ݵ!S6���u
<n�5���@Uج
��kL�tR�^A�U;�π���B_��5<nW�T��Cdڋ
�E�����m.gy �~Q�="?��T<��־:�2`�zb�D'<|Eͭ�
����і�?���O�~�2��>��+���+���=7݅˞�<p�r��b�S�v���..fB��d�^��bR?��Ї+ڰ��x���
��.V��e#2u͎�����[�}����KmHJ_�!c�))�f���w
M��#���Ǚ��ڰU=����g���5�]�(wK�K
�*��u�%Z[��)y���{TG��ݪ��垹��T_Y���uI�'�k+�xPy��;��wצ�)���e��;����]9>鼅Uq�&�|��
wm��aQ�
��oFrʟ.^�]���ƫxT�� 91��M������ew�Y��9onWWweeUVT%gFfFd08�03�-[����
fr�Y�,&˲,3H��e"2��g���Q��;w�ռ��ƫ�w,-Y�Gҳ��g���s~����_�ʿ��h�٣�վW�Xv����+9��I"��a�CM)��J�}Pr�����^���A��'��c)���Iy)�:4M��
��Y�
m�Tb҃Zr��9���/]�Ԣ�WVb�wL4Ď���
��k�6�
e��i{�ݲ5E+X#ܶ��^fg~����i[�+��2i13��6��
��|�9����!��_�3��
eW�_M��O:ƚn�����^�
DΙB���X�z
��g׈�
-����ޚg�T�^
:r�]	��s�Y��5zT|�J�k����_��Y�q�������T�h{�t�7é�O0J_�/l�n���J-�)�n�k�֝�rs���
vkG�%q�ȹ��M�(%�|rz{�Z�a�yd���
:�G��l
P�R~��[�����Ǎ݅����5���*�%_y�X���B�K���ID	��M>%��-�f�B����r�{\3���Z���ttPI-K�X����p��n��AN9�Z.���y[���W��?'�uN0��C���~�وJ������aj������iz�:��!%�/�Cݞ}�h}
-O�+��yMk@�yd\XP/a&ד4>Ce򫮙��
����6/n`|�Ċ�>ĥ�)
|a�OXxK����όr�?O�{4{v֯�@���F�D�Rt�C�\���rZ*���0���
���v��5K<��
�2���rr��.ڱ�
-&̯Bg��םY{�p2���3
줨�{���=Â����
����yPrAѝy����ۨ��ёjl/jN�����\b@�G�T�� "�_�\|�O�D*���1ɯ_��]7ܯ�~������瀞��9M�)j����;�����߲�G�������^ٷ��;�<*�q�@i�[y��w��IQ���S�����9 K_{W{�­�7�ӊ��L���iy�.��_\}qu���S��2N����qfΗ#�;�)I%A
�%b�b���
-��Z��Pz&&f�@-mX�C��ޓ�h_R7����>s}�9����ˠ������B{��ȧ,Ky
�$�`3�
-b�{�
/1��Q�,O+��
����#.k���l~X����-��Z!Χ��S�"��߼�
s�	�{k���~�gʶ�?*%E at _����#�ޘ�U��+��	��qFeX�C8'���S��q�2ʖ��y���->�����q��ٻ-�_�������Ab��[Ĺ���۞��qM �؇�=@k�U�Ҩ�����]�	����!9��7E̎�f�m^[\�� �F`�^�$笁|.�)�����+:���}T�}s}}yi�U�iý�-�1J�[
&g&��
h�u�a��{����/�79�D��Id��f}CL�*z�|�{]Q}��`Y,����A��אS�Ij�¤ �V�pv�_��O&D:GhŮab�o��g�en�bn8��!}+}��Rfz��f}��0>�g��iΌi0���h�L���~��%-�nn˄x��Q�g��
-L��PcJ`]O�9A�zI���[�l�[�z6�A5�nu�:!��Ť��W�����\�w�D��3��!�1	I
�as�^�2�M]x�99�����
wq}X��c�3����\�9��a{�r���
�*EX�c�9����3�b�i�=�ȴ3����RT��(�jr��50���5_jZ˾
-(����Ry��&�f���}��+�����>v��ᒮ��')��Kug��
��aYҶ���8���-����gw��ޞ��.�z�Z���~� L���k�_BN��ï�t��-t>��x��Q���|�� ��i�g���_o���`f������!n��8��3
b{�p�;�ψ��	
�"9�
��,���:�
-~���ޚ�l�k~t
�3�rF͎�Ք���)��{�b`���{e�v}��9oG__~�� X'w}�U���Q�U�7�T��
-���B�����
-���=ȅO��Y�m���	j�����'
���3�'Ǎ�ꠒP��;���qA��W��iQ�1��T��
Q1�]�;�гsO*�i۲��+'���T���:5���暦������
uM&�?�\qt�9E�L�wv��@;N�nm
���W�
-v]\#!�\����� �v��/�6�w	v�A-�Q��rRaXN��ڰ9Á{�i�~ba���s�"����m���i�U�ɀ�9!%l�����'t0i��N����T�
��ל�l<�JF'4��=>�9M+9X���f.���&�Rg���}T���y��%I�SAkR�4����K�!
�
ֱ�iB�}��
-��R�}��XG�����~%
�
-�!
�16�!�X���IJ����\K9<{�I�WN+�H饀w��Z&䃅�
-������
�7�sA
3�����ҧ��5?��7�w��Y
9j��X�2����
�A� �U�
-��0.�n���*!ʣ�d����F���k��o����6��y1���SȌ��
��S�
��\��=ϋ[�ϚSTݐA���M\n�&� -��דk��7�]�����H��U�:B�pLS��zfs�*�l��s����1z�@� }T�(h`C��;o�`�o
!A�h:�l<�!o���R�v����JV}h��wk�en.�>�xj�m��[�i.��/qN��
�蹫Ì2��R�5�K[y�<��������su{�gn��z	ec�^jy?i���� =��wĜ��=h:�
%��뾓q����
zvW�&p��E�w?n�!o�".n�n��'�Ϳ�\�i/�K@̈́Gg���w-)��%�L�˾�� R�R쭐�RPq��Rv��8��!� �T|�}y}���GYk�g3�y߯�!���,T��*p��nK�	j����
M{��}���FPW�_5�i��13��Wq�6I���黊������=�/�'E�E�����d}MLUuW�����
�x{y�=���5��5��➦��B��).�*���Rj�>?��
���IB�ro�ɕ޲o
c-�w��苍�m)2�9��Z�OqK1y	�Hr�&y�T�*�������j6�j�O�h؜�g{�)��y�&k[Χ�j�St at 2�J!im �jyZ���[��q�%�
-��� `���2>�yo}�V�u?�O��_�Ψ;��ݫ��_�h�?]z�r=j�z��l�+z����A�5��
|zHϧ�|jP��:@r+������	V�6���<���c
,�?��	y�m'��-
��F�m}���avq|V@ mO���
���,�N5�f}�Q��y�
�@���XX���ys
��>��	I�Ċ�c��Ị{�8���(�&�8 �

|�.9_��1	��>Tw�+E�F�������"f�/
���N�8'P7���N[����x���?��R�ݐ���S2k��Z����ïY�6^]�C�;�x���=k3O{6�
��aF��K�SOٱ)Vֿ+��*��qS�d}�o�����
-���9�C����mUW��� ��7
��KO?�VHI�\!�^b�zb4��wt�J>�>��؟�����<��҉ȶ>|�� �WF� 5,u{q�;�|�������3~�A�N��0���.uc�R�9B-
-j�5�|V��%8�Q�
���\~�t�C�
��[��������&
i���
i���-������B�d����Q��	F�o�pg�z�3�r
�3�3<j��	��������1Ғ�5�p�5����
�3t��~������>�(��n8ayV����j4�?��J�9�ĂD��se�����m��y���\R�+V� �JT���s
-��c�m��3�c��ؼ��ӛ}r\�f�y���O*�ݞdTD

��iV����s�13�d����V:<�.@��ׄnL�����ˣ���W��}���W�Wܓ���A�
;�F��aRz� a�\�� ��}��-#�,Hl�ռ�(i��wt� M�-���/'��&����fpY^Yr�%F�O�ձ�~�z�
=��y���{�K���S�E� df��9>/����>�<@���J��(
��[��c
\�G�/wkiu��_h���x�/<'����(/�+��{/~��M�F�)��A%.�/��q�a3���p�B/y�䢸���=I�XꇟU=(�Bә��櫖3; �[8� � !���Uuq
S�ݣ��������g�*ݫyxi�
}m��5!���U��n����o��oI����G�`+��	k��[����!j�� 9}�Yc��������!/9P�W��7�&�P�R�qM��瞴\�g~�OK��ƻ�S�Y&��}�U�S��^������(�}�������k1#�99g��(=��F���c����'=:�h�*)%�o���4����ڍ1n��>���$�2��\R|�s}�x��
���o
����jri�S���pn�5� �
������3����ϴ]E_�Lj�
%�e�q�UWSJ��Ay���'E_
0���
s�/���,<o:�Պp�w�[���?�
5�
�DԨQD���Ԁ�Z�2�H�liW�=��=s�p�3]��g�{d��Cq�ܞ��U� [...]
-=jtc��U�s�*Z�O�G/㳃:j}bA�
-jY���1��`~�O
D��(���qi�v:fd4�}�gh��%G�L���@����F���i�����u3h��C���Ն��H���]��,I:�s\J@ˀ���ӂFVˁ���e���۫��8��"�82����^������������o<3��.)�l}���5N�q�#��F[.n7^����Rw��c��vr��������̥W��C���0S]␗&[�)�T�0����G�N���B�~-����*:
>�<k8���e�
lOJ�؛�.�U����Y�ڞ����c���+�iZqD���\�§�e��{z��;|��[�	�(�jP�l$��


��Q�5�r�� �B�[F+Y�<���'�4$�%gVt�E�φ�
-1~[�����!��8�
�hmskk����OJ[
��v�9u-휤�5|�GJ)p�#o��w�� ��k��BPE-k:x>MO� /�SMO�ō~J�_J�K��
1
�pS��K�ϛc�z�
���
��Y�Wy;䄲���&��1%�%�e6-
�n�_��-�A�uu��Bb��'���b��0ap?����[h�\ d){�z�z
hŠ��sN�2�[s���g|꜄�ܵ�@���zy
��4w���W��Z�o���
=8�jHD�,m��}�4�3�y�4
���ޕ c.�•ڇa��2D�C͇�͈`�aNф�.��\Z��D�cE(
�HEq�>�#V���;�衅���!B��U퉈��
�;X�|����8b��O+�8нŶ���^z��2���;�ӊo\Rb�OM��E8��SCjb�O��ڵ���
-B�V���ǵ?l�#R�jZ���&���K,KZ�B��-2%`�y���p샽��Ϙ��V���A�A]�5����p��[e�`�ͽh9��i�J�������;�s�eo�zRUr�t�
��dk�U:�������5�9�ue���,`2����U���y
uuk����t-���o̯���z���b/45��d9�İ�z�[ʯ���!^��������c�۟�����(� f��t�1^�
l�'f�{���rb�����
=9�Nc�<*>Bv����s쭨�9�03��«�gϾ(�|�I����c��V����r�'���������
����h}�xF�O?1��}zf�CF��͐K�3�ˆ��
��<
-r�s��픲kC��΍�������	7��O��?��¸�U ڶ�֏M�T�J�wN`�V{K��_�����q,`�{]���,�c�	�c��m���=
��ڻ��V����L|j����1I)Z�gĭ��m�
�K
��Vz
�������aSw�[��X
�Tx��<����S����d��t��Z��r[���8�Ĭ��
�ٰ��R�c����-)2���8�t���l}�\n}�t������Ő�I
#��$��Q^��_X�)���TO�n�>��X^ԝr�#��*|�k� �ϛ�V�]!h��uvt\�OC�ܜ@��E\	��
{K�֏�]o6�U�'�ӛ����Ŏ��l}t0�@���o�������{�{T�]������iQ��Ogg�������A
-+[�=cU��Gj~��9���G��E��ot<���3���k(��}��
�Q��%cW�
Q2��Y�ɹ�$�Niʯi#{4���!��װ�����ӼڵAJ��K�5h���
��	H�FU{ g9F���)^�c�xgc��Q���g}J�>ُ���4�9������k�
P�[�{Q
�L'�ǖ�+�!L恑Oܛs<*F��{l��%c����ܣ�c�	�
�!'��W'
bR
�o�Z����YDL�
s�5��ԑK}jJu|��� #����3�����3h�l�Ÿ����O�.�d��	�
��e�y
�����ŭ�y
hcBn@���m�T� {3aQM+/��dq cs�U���
��/E��x�
�]]y�x*������DM�{�Z�b�_��ޞ@��L!��+S������?�t�S�EX��sM�˃*+s,����ֳHK��\�Dӕ��R���� 4��5��b���Ff:����qHQ#��W�n%�:ά��{���|�Z��X��IL�k�1�[@
b�t�z�417�M����T���cЫ�g�_[_5�j�Ůǡ�`�n͗����R�,a�
�6k�m� �T��.�g֩�����+����ћ�vc�ߡ'����fHO��%Ǫ��ӥ�wwy�tss�^1�83�� �����,
�R�+@��x
�w}�V�_C,�Nc�x����zt���!Kg���ݹ<Ϋݚ`T����j���l
��;�a��*/oV���̠�s���ފ�o��m�����/�{
�Zj ڥ�hg��ڔ�U�Pv)�|_��{�e��[�A��������J�.� �1A�X�\Yq�6D��9��_�{�;�1S
�a�[E-y9�>F�v�
j�S�z�8��1N�r������J��^�=����?��|�g��ڻ�S!��1vq2��Z~Kr�č̆
=��'�d�
"..����!NǤl#�Ƶ<Dh�\
�P*|Rd�zo���k
u#:�Azf���ibNPˆDM��d����̘��h��_Z�,�p��g�~�9�,�����%�~\bc�蠆R咢o�)�1hC���
�W
-O��sQ�X��q��q���Z�ԭⶔb�� �squk z	��Ԉ�Z��ogG�"��
�iZ��\+/�<3�������޺����� &��S
-��S�j[-7��;�czC@��Y�o8�����k��j|�Ѳ���4��a���k��[�wsۯ�fo�4]�j�2);�·a���� ����f1#�f7���R���o�h��2P>y���|GWb�U
x��-�֭�3�����yԄ���TSˍ�Ȕ�).�k��
̵	�`��f[�х���e��m�p�F9eڷ�+S=�~C�����;�\�JŨ�
mNOXؤ�%qێ�ѤG-�/���Z
D]�/�=t��u
�&��VzT��0'��9���3|�{��
7�Q�6>u������
-ϋX�Y>0
2:�CX�;��
-���r

03�`U���
�0l$A�*P��uׄ�SX
����u��
-�j�9���V�	֯�����o8M~]r
.$:'aG��
�J ۞�7�fM[�܊�AZ��8�p[ήY
 �\���o$���u�_#@x������t�ϋ@�r��_#>�5Ã����l��?�7�0�~�>LI���j#��csNxVDN��
|3X�1i
��N�O�i��� 9b}^��f�7���o
#�|2|�W��P��]
�	q
�+��'�c�?�d�k�i�5�4.+�Qw��%�]���G�B�]
-�a��;
P#A��26�A��������S���Ql�㐨�Z
�����ز���>�|a
�c�srN󱶦o���p����
"
pf�j?1�>N��+%ĸ��{k��
X�|@ł��l�j��옥��[��؞� ��;��P����-	hH=
��
-�s�̡t�������I\vb��36/��t�ڰ��
T�J�jz}���=�	y`��^����z�!�� ��6���*�����ꀌP�0��,"F��'�Դ�H��-u;skyh�t�
-�����
��k�o?lH��g�>�\K��e!}z|��$���$������o�F�qŏ���6=z�u=�_�#ZBe@
8\N-v�	9;s,��Z��#ȏ-���
Q��*�[�BQ��g��ܖ�Qz�[I���V��_6:_�g9��I@�[
->lIz�VE�
+���e�O�3�j&a��4n�l�!��U�2rE�@�&lll�$�^�oOu՜�jH�_6،�z#��čl莉��뙍�`��b��طvt�����>�ŭ1J�G!����`�br]�i	<�}��V}�1X�_I(�()�>%�bwN������`��;f�a�V
��ꀪ��u�<J	ʧ�����|��^
-�y�KJ/��	���vЖ�W�i�[)~u��=#�o��%�2b�J?��}�p˫`T�ϕ����o!���"��
�1r�� ���{虀�Z��t���,��Vl�$�z�<�O� gk�B�{��A\*�4���d[����5<�Wɩs��K\
-j�GI/[
�_w�0�bf51��.�)��>Rw�5��6��
P��݀�V�9Us�)Q�%�6�tfsr�/���ʚ����5�<�xX�E��քg[�� q�Ȁ
��MQ��`�G�_l�
-�9󯉩n)��`�����\s���윀�_l�쑣�v@�	��ܐ����D�=���*L�[����va�a�ߖ�B.���r�ZD�}O.i�]��
��_�j��HeA>38/
���>ce ����2>��se�&�%�$Q���o��b:\�k����P�����{�*Z��Q�q��Aび7�'|\ Lm��W�՜Pu�uuW�<
t�x�x(��q����y�����)lO�j
c���@g�I:#�L�OK�M��K�mt(�亸-������U�O�E/�ȧ$a
��!C�9 ��,l
`�w�9os����pq�{K|~��lvL�7�ə�3���<
��S��q��v� K�z`2���������M�E�p2V�b�8!;yM�G�ͱO at .��������*P�4��>��e}S���`���,�r�J�?����fB��e
m��# ��U|�OA�tJ��
��3é�M���Dũ_~�x�5�ΎYMa3
2vw�O�;d�����S��QV�F���q剥7�' [...]
-�A����Ql�[��xub|d���.��-�nnNӊ\�]�E-k�e1=��怂Yr->��P�Ӏ��ʍa�uO�\����q`�S���Ͱ����(�
7��֜X�m�����4�t�7�1

�HmlNH�[��P�^y�͸�	(���a=���a�40ˣ�� .m�%A�����H���z��:MO�q�݂���l�D��>���qR~r
a�4�>�xlV�^|�JQuV~3�J?���������k�8�NL�E���]
��aI���"�l+��+����o��8�8��?y�_ˀ5l���Pjؽ���vk�����;֮	#ӑJ�t��@K�{�Y3u��,t=t�AM4r�;
b�[2C:ح�	W�%���ۛR2$j�~t�����t�M�  x�������W�T��\�Ӄ�ogyUt�WG룰U@�ު�'a���%�;6>ϭ��̽�95����m)�poIē����>֒�0m<�V2� ��^C
-���'�e����^���
;fzCX���
�?�A��
@K�y��,���X�
:�5
M;�0Zs�5���
 �V8�H�^����cr���
nyӥP�>.
�; ��5"�g��o��
�Kꀔ\�
�*�7ê\x�ta{
�5��v�𐑃:��½�V�KՊw�qJ6�o�:
��ם�
-]��B��߼�#���͛�����sM�3lo�O�
�/��B�
bʖ�^�%�T{��@��
�t
m
�$��iշ�ijy�(�$lb�#�>��]�5����m��}Ŏ	����'g��xM �8A�N)�"���=RfEDͨ��
-��6�W7�q�A%�)�����䜥א�k}MCj|~X��	���.4�1E��j;�AcW�C��ZzW�OF.��X��qB�
����^����5M/�v��=�s=���6�SF̟{^y���.#�㓝S��
���v�G.�x��¨
W�csl/�~�}6B�s��
rck��?�Sq
����	�#n���A
�¯'Wz4��������Ki%�IbVbQҶ� Ef����k��A
�*j�aw�
�%l]�l�=
"�U�
-k���A���~
��e��M�}::$� `ڧ����„�L��[š�'х��y.=h&W�.t�
(UK�j����WCg�_�w��.�Vf�/�iwt������s��k�/Bs|�s�R�6�1�����h�_E�:�.n� ���Zh��[�Qvg��p�mk���������'��i�A� �@.��h�!=hBvT�,�AlN�n;��t�9�/gV��
��,�h�ظ�^�WRK�3쪸��LEĐ�]7p`a
�1j`!vf����U6���*:�#NMD'����ixM�c���g
?����]3�99�oc�MB������a2�L �iY�Ȇy4l�,̒�Z��+Y���X8������� �@�
j	��mg����NH
�n63��-��� ���
��|ϓ����m� �
h�2�
&sm���⛼�>�ߠ�tƖ�_�t|t���"x�X��)Z�o
-��"'�#	%���
�8���gV~���[���ZzM䂈69��� 3�iQ
�i{�f}^������Bj:l���<>��б >6�
��eƍ����%-��V{�
���{� _?��Asww@υ��R�
h?-��9�(�b���b�}�]��W�}����!��aF�c�W�q�!%�9N�[x�N	iEl��X�c���Sӫ�bwY(�[�>	�څ�@O�b���NtHɹn%>w���(�
�q��vt��[�����z
��z��s/w|`{��ޔ��u�.��M,�Y��]�b�At�GHX����K��0��gZ�$@��&H��1��)jCDǣ���z�ln܌.wLQʖ�)��A㽗
�Y�_�l�[�w��"�f���	��Ӹ;�㈔��ќԏAm��
������0�z}��	�[�wA��
� �T����|+��U�O�	�v)!{u������?��Z����҃.�ÒD�aY"ڱr��u�Ӱ��
�T�ңZF������x�8�1�9��B�5� 
.ׯe7��l@����t�C!*f�� g�U�����3r;f%ƻ�U��S���j���K�@9�
iy8��u�9��Id{��g{Z��
�g
w+<ì�NM��h;V+:�Ã���2j#fB�O]�7S}�1�p:X`��.��
�r+i5�wU?-�U�qKawfZ3��:P[sm�ث[RF%`�΀��by	9����Ǹ�T�g�"Z�>��_�m6B�p+۩~���>Aș�*�|R����qjN
p at T	��`�i\�Y@�yH��Z�9Tyv����v%>�A����:Z>2
r�O��
ĕ���5e�UX�J̪�iFYd���
��r?ᖢ��G��Ɵ�j���
�f�&��"ⶌY�W���n�O��ٚ�g�=������s��/�X�ߝo�Y���E1g��c����������Bt��!�IƳMrׯa'�D��.���[n����c9���O�~N�� u܏�%�#Fݧn�E�
¨��uoQ���f�C00�K�Zv��8:��
�:�UK*jծ����ȡ�Yi-
 [...]
-.����ݽ ^���NFe���#/��X�1Қ"&9:KGmM��{5�ڐ�
sO"o�^U|g|�u
lS�3K(�qyQPO��|��|�ho��կc7Z�7��?,���+�ߗ^~�a�G��,�|X��w,
T��嘚���e~9�}rqkv�#'f���ڏKB��e�p�" F����.{�� ��	7a�pv- >ۂ�J��(�E
�,���zU�ڵ1l����ۣ؜�
�j���W��=�ַL��Uv2�S�ʕ7�ۡ)rap�������Rx��zo��
3�����
�ܽ�ӷ�

-|��x��
��+E��H�7�2T��$&׭��|�6Nl�M�ks��0����l
c��@;�ud0FɕN�G��H���V�S`2�/���>/��3
��Ѫ�:1�5ë�
c�z�w,Oa']#�;֧U?k;
-�7�
�ͽk��Zv�� ��e�Ɉ��;G���J�2Je@ɆU�����ݐ��vI�w柖~=ͻ���Aȵ��C�ѡ�����*���q�5)�+m�
�EfFM�ҸYH��ܳ�����+<'f:fx��AJ�}�%E&��%�Y�{��½e>ko��A�"dF�X-�y!#��}JV�WF)wI��>
6g�K�_�z�Xy8iW2�}Zu����Ml�k
�my^{������ԯ�ף��[���Z�>nt��|\r
�}��h�ڨY@����H�w�4��
��j��!���;{6r��*��V�S
��k@˳�W�_%�I�&�w��jr��"
{�*�u>����-9�
����Y�j�=w?狙��?/��>��  ��i�%���~��
v�5�,?��Y�ZC@	4�$<%f�@wM��\��o`5Y�1W�o��,��π����*�t����۸���
ݟ�{oG�J�i蕮qȹշ
'
�ȫA9)/�����y
!>�C��	�;@��"�
"3fĔ$�h�`LJv����
�� �c����@�i�y�]�&>&b�!��]��\��k
S@K�inCX�NO��f}�Q�V����\#д� �
,v�Lݝ+��
�!�3�@� =q�C/m�7^pL#ң���#��^
1	).��=ɪ�j���^�=�r�-C^���q0�"Zf}P���)�y[���Z�<���R]�F�f8�N)�nk�W�އ�b}�I*�����}l�U�ل�T�ga��jr�c���9��y��+��g�è�FU�N�����
-��cČ�>T�F�혒X�Q*�@�lM$�����90�(��p���46p
~o��۷��A
:ߧ$�GMLXhV�
��?w+Z)
����!�U�8�Z�D��]``vm
bd�޲r��$�fl^����Э	�5��fHA*ۙ��~���?�
-��F6ͮ��%�}�
�ۖ�>إ�g�V�!�
�M:�`m�mz�xzu
[t��H2��C،�ކ3ީ�s����
��z��ywc��S�/
-������(�7=*8`{B�S	��-G��/�[�C&NKt���_��Z����P1*��l����x�|�WŨvO�n���;iyTzj����xޯ�'�A��z����?����J[w�$$����b��,
�qA�ڛ�"f£��y��[�N ���V|��ή�Xy`c ����}sWwXɬ
��eQ�1��B2r�ڻ���˟�<->
R�J�|��B{G�āoNB//�+��'�?����,؞E@�����`����4�$�I)1�#��5�����
�
7���|�=��WN�ߙ��wfE����
̹�w�J�
�Ur�}��k��Q�PN�1���G
]��IV9� �=�P���g�.�@���F|q��@W����گ7�c��I���V�Z8�d}LX�8�ON�ݙ�ab>:��	t�c��`���7���^��5�*^���
��3lh@���߻���P���	xJPGo����<�4
�Q5��us���L���� ��&����!
RB��I�a�(a�7�Y��-�g�W����5K��;6τ���"Ц��
-|r
G�GP's�ݮv��)0
!��fEt�,�LS����/���~
�&��5�%�ji�
5!7l��ƌ�&����	�)#��{~3n�Vzރ:��UR�����%>+�%V-<�;������|JL�/km�?�w<
j�0�$��c����
30�^9��>Q�����i(U��֎�Ů��{\��|jbEb���M�B��(�Q

��acVc�i��j	hHU{�\>Њ��e��F�xTԒ�Q�
���
1�)�K]�6!�
r�����Q��A]G������Ո��������
-��.���Q:�>�|.
-�Gɪu�%>���2��-.��
���6:&�7�CrfmX!@��)��l��U���֜co� ������������DH�j�5�jš��Ae�Y�qӧ`��"�K��¨�o:������[�I�T�8
ȅ��<��v�*f�Z��P�1Tzb�]��A���t6���bb(YSe������1uwV»&�<ӄl����a���厇	Ga3
��`;I|��c#C
-J�sp��\�벸-:ˀ�ٸ��%!�g6U\Hbp��X�9X�sL�/���&��K[#�T��L�>��R��(�ȧl#�M�˗�	��iJ�{�����%�cE��`�� ��f�eau'a��
SU
��LpK�-y%aj��Y�ZcsBʖ����
M�$�� �ۚ�_]i>�1�t�1���0w܍Y�+�sb�OI-I摄���7_���*��;��+��B+��Mb�GI)�k���Y!�`����JǓ`g����I�Q����am�a�"f
����_�� _ҡ�\�>,��I�O�S7'�Y�}�/��q
�q�R��
��3��Yd��۪�{Q)A�
0���3m_
3������b�����&��u]��e��s
-�Y���`�����3���2$����&���y��⥁�1
����H����7l 4h�)T�s�ٓ�/��#�7�%eT�-��D�q�wL
k�~|���w���S�iB澁��7r`�fvˮ�ٸ;K(ڙ�d���;�9z���}�W�W�o�[�>��	;��*����܋�/<#��=Ck��>%��2�K�FEXƩ� j��<�r�L(�ʰ�|rF%�]mQ��#b�J�g�7YL��1���נ&���e���Q�ͭaJ�/�l����"������_�<��qY$޵
-�B�Jo�q�p�ɘ�Qu`����[y^
�.6+����<޳u?
-��h�D�鍁��>.3ajeX�x��ccf>��j���y&(�g���>����܃�?y���0�B�
��H�<X��w�Y[q��q#�q{���;�w�G9��8H��Q
-8���P�On)�&��sm܏�b�GE.ޜ¦��BB�,$�M̆��Z�>�|zc��䁕X��� c�
M
[��R�cZ~K�r��R
�Ӂ�g�
�K�V�0�SN�hy�ج�p��*L��F
έ��$�{	*����%�I���U�n�7�ٵr��Z;���:�V!3�<ߪ���M휝��'{+
��@39�[.:-jhe��w�;���nF��k��~uK��3�S�0�|@�H
���^����_P�9��E{�C;�{ê�K����los>,��;'
�v�^
�fNJ>۞d�V��z��_��l�tK�}��cu5j9�+����Zr�1T��E���eI�
`���gyU���;�ӈ�������]r��CӤ2�����h{��ƥ�Ͳ[@{�-�E��*u�@-���i���/�9_9��/�����1���;���
9r��ȑ�fG�
6;r�ّ#�͎
9lv��a�#G�
9r��ȑ�fG�
6;r�ّ#�͎
9lv��a�#G�
9r��ȑ�fG�
6;r�ّ#�͎
9lv��a�#G�
9r��ȑ�fG�
6;r�ّ#�͎
9lv��a�#G�
9r��ȑ�fG�
6;r�ّ#�͎ [...]
��ű?���$�R6��G�pI
:�-:~
�u��k�/��P���s��`��l�Do�bPTܙ�����������%�7����P\���������}��NG�p�㿽{
�}�ʕ�g>�|<< ���Ox�)�����AD�E	��
�
O�|��8���qlr��O.��\�|<-�F�qxq95�b��|]�?�N��|.���?_��=���y���{��܋ߚ��D����?s��l��g��~r)�'ap��M��!�@�_��9�$����C�o\����r�x��+�S�_7����~&����s��9��5�)i�����}�''O���� �u<���+��@��-��@cF	5����Jn�w�U�Q3��FFӮ��3��J|aXO�ϲ[b3�e5;e�l��R�aTDu|�QD�$�F�
-���Yɩi�r~�c�^�6��w���3ļ���Ӓ�C*��IH
-
<��;�^���#��������2�̈�^S
-	c+ku�ZbeVE
����-Cް�5_
-)�;j}X�ύ�h�q3�3'fF�����ZTSK
��Ԙ�	�hmoO��p-�%j�V1'2�E����1x�g��fT���������+K�|ﺳ����g� ����2�2+���i;�if�e1333(D�ef�A�X
-fsp�8��j������kɒ�����<�g�}��Y��#=�em�V���&er>ϋ�6_4�}�I���փ�Y\�[�
©欍�\zP���Ӗo�GZ��>��,9�y>C%a����Š�YR�:�
ңW`>cO�j����iEKlR܂{zz�z�r.AC�+gËE��݈UX�1sK3I]b^x%k�b.~��h͗�o~ \�ʂ[��
hy�V�œl�3OoMpJrN�
���q
�rl�u.
cD�<2�V 
%kk�[i��+������*ȰZ]X0A��O�$��u���cN�e��)�
��TB�'�F��6�+nKٹW2~%
��rnA-�Up�~�s�a^���O��<
-^��.ٞg�G��v�/��
��o���=x�BXo�Ccҡ�Ĭ��8u��_Ϋ�%��P�M28������
��*����A
g��
-�0��3RKq���YX�:�l��w

h$��FU��MX@ҍ�Y娗U�u1/�̬s�Ӭ��k�?��Ϧ��z�M
�L?��~46�;�y`,Cz
��0/��2K0;��:"�O��
-��'Gק�g3^}�
�xrF\�٠F\:q�%�L���R�q��eqTv%�6��n�)a���i�1k�8�;��0;�,b�W$,���Uֆx��Uٹ=�<������
S3���y^)iUve��Q��j�
-z�;�Tt%f��������ʿ��%�-��]���P�V��5�n�s��9�I���[��-�*�Q�
��dPC��Uڔ���`y;
-���
]}Q���^��s��?�_i9ȼQ���z�������7��}��1N���K)+�����_��K>Dge��W+�Ow�
}x�V��}�Y�1+�,Z�{�"ԣd"��1�w#�A2���<*Ԃ06
���>��l�f�EU�9Q5�4�
aC�'l ݂jd^�@8�b�ɭ�YX��^���N�U<«�>����sn�8iUvdl:����V���œ_�'�Ω^�Dm���o_���G�7�ŞDD��G�W��xȠVEx$m��W�s�O���|�U�v�
O�;NRG��^%+��uj0�*�������y~{��g�&��C����_�L�9�;f����~*�T2v��w�w�DX��>
z�JN��)�89�i��#O
���`
d�h�}F
�ӈ
-!	�+rI>$��>%�p	�y�syg�k4 
��:"��s>q��tӷ�S�_nM7~���/�_4
�}��c��OI�msl�~�:�z�~ӧ�i�|@-&#�v�>�NU
�T��Z�{e�[o���&��vy{�%j��/���K�yҩ�}&S�%h\{U�����RY
�#


i���9Ɂ1 Mq��
-
a#fg^��t
Z}����
�bڥ�O�..>��fs�{"5����	��,��Y�ͱ�m�*����q<cSv'�����;��3�2��a
-���
j�O���o�u�9��s�
A�G
|�_�����s�)��;>�jDmf�6m��~�s�מ���]��8�F�LL+��Fy�v^qN$^���s�
�c�_�_�`�Y�W�[���
�
*A�{�vt�yӏ���Ӥ�]J:�O�nv9u\A
�
j��2�A�f7�Vb
A]�h�E�V�z▶bNY{ѣ��Uq����� �r>�}!1Y�=2-n$]����u99�q�P
-�"Z�?�����J�s+9�N� / n+���r�/��L�a��zɐF����9օ�
-��P~�p^�垛�E�|��:�w
jҖ�è��(��<�6�[�S�_�a0����%mdPЌ��%������X�g�yaS�w��
ʺ�Mܔ�
�s
q{�)�̇uz<�`����������ǔ�*���]F�9�������9/�d��.�Y����~S�?ժ�H�9��
q��
->A㮏q	�L9�4�&꿋t����]���M��[�rr�lN��-�d�1�\>psv獨t�E���$�d�#j̻y5y��w��H�NI�z��G/͹4��UڈYmĻ�����s.��U}���cN�,��5����igq��襎���3.I�p���q
�&1%.G�%59
�
sP�
-s+P��
���K���w�>^�>��{b��TfVX��b���a
MLr�f-ª�S�yѶo�%���|\��E-)+���U�
A-�uK�����1�
�i��B��E�
��~.e�<��1�"nڞ�����ش�">ɇ��]�Ov
�~��u|��Gt^R��c��KơĄ���k��Ԩ�t�i�g�k�~
�W�g�,�'�Z	���שc�-ʮ݀�Z�#6�yl�Eه�c���g���繗2�
9
�K��^������ �-���N�'��\�F�-�*xT��e��-/�1o���t���
%8���x���T��]��
Z�[�j9됴��j^Ωf�ࡈKP���!�8�d��G�r<�Q�a�	�b��hY7�BD%�]�w��|T%#�v��Cz#u�]��))��݈B\��EŨ\@�
)+���8U�q��[%(xU|�-�G��3�W�Z �Iڄu)k�
����~��:z	q+(�_�'nE����e����ZM�{��;�,�q
��V"bF�ɯ^z�:�2�;���xw$bT)��t��p+QG������&�I��[��nᡞ"d���>'#}wS0���_&f'H'��PK�����!e����V���\�a�ū/�G]���<��֌�>a��'�Zn�*�A,����o�c3���C�X�f�
=�x��P�n%3mUgl�vօ��W���;3���Ϻ�!��=��DPG�;8�I+�|�ƻ�5�>�=�9y�q@����|-��'dRG��k�~Iz�v|�}�U��
O�>MN
�A�D9x_�� ��9ڏ���͘�M��~L�uC\ҶM��ik�qj8ؑ���a�s�����#�y��Ѷ&z���}��+®�d���퉶}�Ok>Z~\����l�2�.��
�a�����s�.�� ��{9�	����
3�L���S�� {���:J[�!)�HYD at JǼ�0ք��s�kꅱc�
i'�ռ]TJ�Qqw>�oڞ��ޞ��
��]Ri�.�Pg��|��
0��q��
-�	�������^��z�w��^Ł	�P�i�<��W��N2��a���4h���j!ԩvt��K:��JV\T)��� �"�e��;@�n����B�g���Q�"
����J�	���y�좯o� = Y��8�ՠKG �\ʹ��I+�<��)�i{��+%*A>�w�5ݤ�V�]����\4�o$�2|A�D�����w򡡑�+�[�d��t�a���ň��:@�k
�U���@+�1��>ca�NYX�N��+hʁ����D�ꋬW�H��Ǧ�_�ƾ.h�i'����⃜s��WsN�G�)�����Ӗ�#k�U_{S��:h�괮���yl�Y�̼�
�cM�*kN�*���E_�|���o��r��|2
-ʄ�s2/"�ٴ����H凫#��e��ԧn�1�e,�ڴ4�w{����o<�j�r�y�̩�>Cf�
�)���$�hj��hz�}>5�>���9ge��-��Y;���+�)
�dg��H|�
�~>i��؞�
>�u�r�����
��wC�.�	Y�̹�e�Iͱϥf��Vߴ��=��r�
�<<���{��+Ss̳�cM_-?��[|�q|�U����C�+t���[`a�Jvt 5Ä�ů���N��VJWIȲ��]y�W�N�9%�y��
hu�f�<�+d@��/+$��ԏ�{
-P�x@ҕs�/��k�_��3�/-�������ڊ>A
��Vq�/g���ϭ�GD
E�I20� ��缐	�Zq<)f�\L:xeI蕄�q�����5���T�-j
ňJ����:��O�F\�~�� N�#��p�0��j�/k���e��
��2N�9� ��שP��
F!!da�w�q
-�1/uܹ�1��W�C*)�jɈN�_�ꊠ�#
�U>�3���?��

<ƃ=�~��B�0P �� 	��RǬ
-��
`Aঝ�KA#|Z��º�C �My���>�
lg�@��8��]���Cܒ���c3p]9��^��+�`>)��B���;�����G%ܞ�<�J�����
��h�
��[�f~yjNP�=.8O
�~����(��nX�ڜ�]ܞ�@^⮎���3��ul��˔�i_|�ib�jH���
-�k���\��U-�T�%p�����w�U�)�L �ï��*�xc�u��G�A:ō(\��X�w�/k?]{Q�	��)�3ĦyP��+H��3>������ц�}w/����n�/!^=	y�
O
}���R󼒝I���4�D���"<�f�	54�+�=ZQ�!i�k��w��m��ط3J;���]�,��
j�9���n©��F
�U
Rvni�	ri!��.��bNa�
-�l�
�$�.0x�|롌�QB���x��0
�vKQ�f�N��0�.�2�r2$�e��&�Y�/�%�":#u|9�Q� ~qQ��v�������A�U2�{=��>��Wf�º
�����S�%ň�]����'���_��
xH����|�F�|�gh$�_J#���A%tZ��$��%�$� �
���*Y�'jG<B�u�� V�ع��Cjp`ޔ�W
�c�J�yWJ��j~4>6G?Ix%�|?1���F�%��e���`�I�K~�x� �WXPk�N�����
=D@�&�g�0�JD�bq{�&���Q�+��ٗ![�x��%#����۸_)L;x�q3�r�c0|=}Y��%m��_'�7�T�̸�
�
$킚��w)	|�b_��KZ�����Ȼ6,�R���O�_0��^#6M;���g��
�IU��
e�Ƙ�
���n=v���
���W
���i�Qd@���	��>OY8��'�~�
�\ �&mzNٖ�Un���&�����
�YP�[$��Z�{�����H�A�&�̹���'�c��R�m�m��`��I�i­�wB]7�.+5G?��i�&gi=�w�ϑ.�i����
-쓜�dͲ&ܭ`��}Ő�C��	s�YҞs�5�)~	�gu�,nG��:�*��A��jk�����Ưq���;�"Ԯbb
�3��,huo�`c� f疭�a
F
j
zd��
�+�ڜK�!�T*<��Amr��V��@��j�ˮ���:�g=̒\�W[ �-. _DM�
�>x
<(��>+Fe��"��j`���D�YRk��Z^>���@?�f��˯��.�|�#nI;8�ӐYnm�>��
-�&C}7�a)�Zɰ����
J�hPڽm���թ���)
22�x���A%┶�
�*f�����N ��I_��wyק`oR�@�p�������g֤�gj
-8� xB
��
����iԑ��E���G�C�Q�#H��z
��=
je>�Q`^��:N�����с��/zo�F���H�l@ز5�9�:�����(����<p��J�����'��<�w�>5��D�Ѓ�5,�eT��^#�փ?A�[�g�晧��xp��C����4�LvZZ���S�FnlVݶ9-�؁ZZٺog�~�pj��
�	;h�O���E��6�[�_{ݶ?>ûL��J��ۇ@�E��vܦ�E������X
)���X�ש)�)Ԣ�\��q�e�¥��*F��<���������\-�!�jN�^3�h#!Sd�O���>���~��kڏڨ��`�!�������hޣS�Fdk%�1p��q�
-A��=9�*鄯�zr�}i�E��7m�y^j֢vqsXfg�s>���T�� ��4��~���8���j���	�
�R4��]}��n����7�p�P2A
-2z֥�&C�7@U�K#��e2C!��!a+
4���|T)�[�zjv�
���6 /���E�=��R@���"��ނq���� Wc.��(0ύ�
��z<���>8|_ƭ"n�*�6�lݘ\B=ҮݨZ�u�ˊ�?U?p�ϠC���S��I`2<��J�
�j!�
��U)'�,>��3�RK���I�ј����6`m�`9��Q\4�)�?�%�3�������
,�Sd�YQ�r���
�ֶ��f`��6Y+h�i�%l(�B�ᡗ�p� ���-6+,+
=)�R�9-oM���
��b���)ύ�\@�J�y��s;�l��7��Fyנ��j	���!?Y�m���7a1J���fҫW�>�
|���;R�h�2>�9��Ue
=��ג��
�5�
��+
0VPs2�:��e�'��ӈ[Լ�~�7ɡ��_#%}-�ի�E���C�oh?oN�/.?�ޟ�B��Wg��
j�NF#���呚O�
��
��ZS�c���~������4�l
��V0s�9�_��[}��]rNX�����(�tީ�
�
���5��E5����s�
�Eś�ҼO%x
<5�,�TB�s��t���WM_�fD�i�Z
z����cQ)j

څ�P���y�V��K�}��>
-�8�>2E��8]�/?e�T��ݤè���yd
�KX�4ղog�u���J�z�S%�^{�S�XG�C��9�݈�(͚o�B�Z.�ӈ��C�d��\�vU��eU!G��$� �1j�#|ze1�3Di1��*
-��o��dP�ɸ��Ql�;
��U�E
U[�K}�[��]M�&lj:��k��Jf��$b��i>"�
IK�ί$"2V~Q�Ń:-��wH[S
�t׈� +Q��ѳny����+X�C'��*�p�QC�M�����6��.���E]/�n�-��2p3�꿚q��D��?��{'�8�� V��p/.�?������7�_�/�
�������}�dX#/�|�z�^H%�ִ���ٮw���oOoXo>^�5I6�f8X���T�G%L9e��m��<�v�+i�ze
9꾴[����Cq�Q�6),)�L������R�lĩ�f
ʮ�YT��+��l�v�pçۣ–�(䟀�8�wi�
���ӚO�s���څQ�����5��ӓ��ii��=�6�̊*V_�mOr�y��
�_|o�%�l7��jYLB�"n^��T�~������⯨Uؐ0�+6�w
�-J�R�6~e�p|���ғ�O֟6}z�y���{����W��+��BFK[��IK��9�4���}Zp��ޮh�xH �I [...]
-��w���@��^��B�߬W%X��F�
-��
�}�=
�
�'�Vp��,i�(䓸Sܱ^�rj�q��;nT ^zT�d��t�!�R�|��I�A���S�c�3��dD	YB����D�g`s^�Z���B�
B6�MFz����¢�=�+F���<�zL}��ܼ�?�?�����#}����S���.�Y�OԲ���猲���Ⱥ�O�:�#�;{t�h��BD�KYE-�3�
�[ؐ���<��p/	���1�������\�=+.������/)��YiI���uh99೴[Һ2�y�w�������v�xi�^�N�\�{,�Nԡbœ]�P^�
n1�VE�μ�4m�Afi�ؤ��]ё�j�G]��
N����K�z�C�%Am��<�5�ux�Q�7�)G-̹U�Ԙ�J�֫��H[G�~@�����v�!n���K���?�7~���z*,��ד.a]�-i#<Zi1`0���Sɹ���
?m���{��.#�®
�tΡ���ϨSIO�$<jA��)[�
˙�j43f�\�Z�ClFY�b����y[Ƭ�>i�A\��o��:�~�j�#��)2���Rk
Y��W��Y�������]�O;�ҬS�,R�"<���Ջ]�ou��}nV��
��̹et"���
�w�.B2��-�`�~�8�;ǵ�ϋ��W9��ь�꽔K��g`7j��>�=�ִET��)�P��C����RLB�A�ᡁ9���6ֹ�)։������1���F�'g����
�
�e�o�Eus�ҕq��]A���O".�<!�C��FS֯d<Ҏ�YP�8B;�3�l�4��"޾!<�5�ac?��
-a�t��<��Y���C:=��8�.":�\0��
��|H�$�����#;6^��<�<�x��8�����<�*�:yU�OF/Tap�HX�υz�b��GD��
endstream
endobj
134 0 obj
<</Length 65536>>stream
-�2���xPc|��ѓ��q�N�� �<H�Wf\�N�#.�v�#*�޲��3
u�
�R6-;�T3�-������oX'��ꈁ@v�:
r�L<u���ya��$�
0OYrVx%ޱ>F?����?=/k��%��9qe�"kN���_sO���U�Բ_T
-��I`@�Qb�k�Bv�I�em�9qu�,�JL�N����yI
���(v�ߚ�>}����ú��;`���^��ڛ �(+xL���G�5
k�fjݙS��w
+�X��
�Cf����^ǜ=ڜC�C\�S0?��r�ޢ����*�e�c��OQ�1�3�$c�wl����������1�
�	<`�K�բ
�����s�q�%�3�!^Yw��},kg�El�ҧ`!^QS�����G
uo6>+�����M4|�]���O�, �P{
r�kO��kOQ����w���^�e�
�BB��8
��
܂z}�@B2:�5���.�K����s�A�P��� 
�r������a	
u�.l���=9�)���^��GD�b�jI�s��N����
o�A�y��
d�S+��:�U�2����k1
�[�D�7��E��lP�C|��+xV�
<Dq'��m����;q�A�iV���
-�k�t#/���;n
���C��N�l�jT����D���~0QJ��R��˘	�"R��EmϦ�}����`w��4�h���
-
-��>��{���76P���E����hY/���IFrA�#
}Y����u2ĭ�C�	�=h�Gܾ5K?7��jߓC�ޚ��畠�P��7�~}�Ǽ�9Q�����7�7|����&��R:�ԋ����(����nPL���
���P�4�f^P�9
��iY�������1Z���X���YԲ2������_���[�ٙ�/�%&�4�A�'��n�-�Cm��!������=���[�8R�Qb�
z�[[HYJ#����CɆ�z��ɐ�����\��[Ԕ�ke�������L��Z�
�	imvFݝ�U��^n
�7e]�V�cPR���I�5t�f� sp�Vƹ�\�
x�˙��לS֞�
-*q��K�^��r*�7�ǫE����7

Iy�2��;��i�7x2���I��-k��Po��ǀ�n���x�]=��]��wCR���`^����e/,h������u%���ɠ
��Z��
*��[؂:���O΄�P�c�8�
h��pﭴ_�K���,� U��~F	���i'��� #�ޜWځzD͸�_��sʶf��nγΣa� ����=D��
��N|	l5HFM7
-сg�Uj-���
hHJ�]���8az���
P���j�ޒBu+Y
e��Z���ƾ�_���@�7�z���kdT��/(��0�v�\�mq��qa��!���.x����+`}�Zj�j�ԵD
}Ԟ��_Дr@�
j介�#-�$��S���B4t(�a�n�v
ɹ�]Ե�X�u
#��9
kz0�6�����_����I|��x�«'�
-���[^
�3��OXŵ;��
������
��GtƸ�[�0ھ���P`�K�ޙl?yP������bvAKޯ�ŧ�f-�3j�^@-��U~�ُY8uy�������6j���)
�|�,��|�+C�0ߓ
�0��Y�2�Gڝ���{��K΀y��rJ���m{QQ�ۨ�c/"c�E�|"�oθ�2v^�R1S���̴�+='��|�g
-A
����S�
4�m��"1����'�G��O�/&&8WH�JX
��9��>1�~86ݺ��k�=zUΩf�>u�1�����T���)
�%�6�A+���FjM{^ŐΘ�8�!��$
�c]������
��ޡ�g�a��%����vQ��::N��k��ͷ
���Xe)��Ix�
����>�6m��$m��yq��\穬W���
�mȖH`�)|G���`�9�w`>�H at P95�d]��+g��޽e��\ё �������	jp�ݲa�[N
��\�.�
�z�60^\�
�

*����j��/
1
�c�t���#�B��֮�wMX���Gҹff��Q�
��
�/��(�hHܕ
��3~^wq��
�I�DT�ޙk8�C�,Շ��A����K=��`!�V�:%|&�(:�v��y�
߇��\���{�
�޲��hRNƅ�T�O��*ү�@�Ue��*�.e��kE���݀�rs��뮃�9A
�?
�)=焬o�+�Vl
-�'mMBر2��Lq/"��{)�Q��S�''DU�i^ꀚ�\�=�8���
-�9�{P
�SEC�
�6
>� 	�F���AoV�B��<������ߒv��Ҫq�����h;�k��
w���=ԚM�eׁ"��?�e"�ϸ��2� ��!s+Q7���J��.^�Ց�IN��(�{Kځ_��F�sYܩ��]¦��Hܡ`��P[VI�4���O��ޫ;�|{����X㗉��ØW#ܞU4�f�u$0�^�tg7"�~�a���I;j��o��x܄U� Y~�ԩI�-Z���+)����]�p
-�jmj��]/,��Ԛ�GP���4�'����Y�ˁ)�&��\�P�'aܓ6
��ɔq�����g]�G�g��
�`զh[�Wࡡ��Q6�ӣ!mo�oƂ��D����a"ȫMX�s^������J���:�㔧]��\�]����aצ���#���k���վ���ڐ�kG �g�5Q�/"(ad
ݧI��D)��]Ő��ˢB��U���JI�l��+ߚ���Hڨ{(�7�xP�D���ȅ�G����
\7R�������eUxw4�3��'\JFڭd�����SP�B)�a�@O1�3X��{�"je>$gS��	�x�s�v~��naI��Q��5�!A1��Rk܈K	�dýw
-������j�g�'<:�J�_�<�v�ů�Z9%��ǀ��=L�
��� K�մ�S�*��!� �ӖG�{�u{����W���r.��xW �[+��&�2V
����� �6k�߭�B����Y�t|�����ʿn<j9Tt
��Z�����zM!���X��%}:E�3��A
�~���~��g�y>��Avf����<����=��
�Q�s~J��Lī�%
*f֫`Ɯ���Gֱ푶l�	+valw!��>9���ŨRD���
���,�2��UR���
&`�ƜCA'����
|LF��BnԂ��IЛ�	V���Ő��9{�rQqQ&xKݛ^R)���h at -�
5��#��V���C��x$�7��,��k���u��Ꝝ����C��נ��u�a��
L����L&�?4��n�s��!4�Ӣ�,��-��^9����ڄ��3���{�


��ފ+�c�%ӝ�r�m",�]4
��H�4��߱c�Wǐ��Ʀ]͎�T
"(��
�wC�Ν9��=�D����%���N�-�O��lM�OƦ��Q{1���|��+h�
3~�4
^P��Ʃ}/Q��Z�%�eQ�V��)���
�jX@ŃlF'<�v��f��
̦e��δM
l�`Q{�q��C��PYzRJ�ղ�ְ�� �Z-�8�wa�5v�:9�� ��Ƞ�jqзB�g ��6�<�<����XǏ��-�['M���QE�2Г6��rN�KIG
2��d���EX�w�U{aC�‹�;S¦�ۨ��"��^T)+FŴ�HyY��euBR7+[���[ڊ:���ٕ���*��l��"pt!���.Iu�����94���o�
��*��Ww�
-I�ɼD���S�����1j1⁼M=�`Vo���g����j�Ÿ@݇����|����Z	���/�8a~%���
s��.�zz�����Z�ܙ֤��?�.�f]J{�5���W�,z��kqj�S�П���]V�ו��]����3�&�OȞdT�E�F�@;����5��)��ȥ����*��K�����zq�x3�h�5b�]�j��_�аJ
������`�͌_+I{M�Ddp��*�@`rԧW�A�)�+�����o!�����8
鹑�
K�#��'�ݜҲ��'���3�������
�
\V�h5��+h�ؗ��w���(0�� ��s~Qk�J;���/�ܢ�
��.��F40*��A�~ ~t�T
-�!q
6�T>����q8�t���<�W_ABo�t@[Ȑ����%���fq
�K��ǜ���
�lr�ws(:���;c���qΩݐF
� �G �1�vq}�!�����-�ԺQƭb�]j�9'��	I��������%������%�YDUk���1���
�
��V�,���MP�=ÿ��ճ�^�Ϭ�v���ɂ�����]�N��1h��f�u���q~Cڡ�dlZ֮�h�Ǣ���E%�N훃
���Q�0+0��j/$��_���
{�L�
��>�tb.a
���&gY������\� _�B��rNn%��V�>VE�-���z-	^@�������?<,y?�h;��"I�p�V��{
䅜G-ȇ�*`0�:
�����j������$��~�
�.x��%��>
��N����<xu/
�����#�(��]Ui�qN��lN����9���a(�nO�FL�
����dT��]ⷾ�W�ǭ�{uE�lbQ!�[�w�{=���hz~r
��w�!/e ��T�
��X��#a�i�K��A��
�i�OܙrH[2A�Z�=?�e�#}w��u<(c`AaK�˸�skY�����p
��_�{L.�{�nqT��ZJ��!�P��P���̇zo"N�
-
(��^4�+�$}�)����R
-��w�����Wz��FU
-��N�+l@<��/lB��&��M�����
-�)�p*< ��s�Aasb�yrm����Q���9'W�2e�e�9��4�_b�ur�U��#-_�>���tq�I��	sJ[�Y�
-b�cNq�uf�ui����ṭ�!VE{f^\
������
�|b�}*6�<��V���/l�3g���i+�B�:c��̰N�|\�����]�A

-�yj�4���Ӊ��Ø�W��*�S�҂S�
Y� ��9 O8ō�ι�$�Xj�q
w	j�"rȧJy1���
��䬠4g���.Q��Dہ��M�e��U�C'�VA�}�O�D�z�ίN�v
F,��Bfߍ�n��w�Å�<��u	>c�?���bDB#|�F�ƹ���'�:U��'�$L��
c~����ΣY�
-�4S���y[3⊌�{�q ��*��rf�#m�]�F`	`o��z�Z�.,j5E���[A�7T��Y&���n�
�p8��˘���]���21�">K?�v1�#2n��_י��H�B�4��jT���,��$�O��C���B�(��5:<(l%��Z�'h��{��0D֯U���{�%��Q9��qYR��.qSXz�*o[�\B\�C���ogN\����#TpI�g*w�-ܲdR̫⦭���	iE8�
Cz���,�<�d]��S�B�1�GM7���.Y\�{R�1'<*6�R1�6A��xǁ��]V^uL�0�P���VJ�t�wϡP�㺩�
�3�)������
3&�x�_���X�S3���Q��姭��oV�i�I�g�����]�[zN;���\��º,�u�,��瞡�WLL�K7^p���%5[�ܳ�O�������l��E���-�.<��z�%�Gd�[�:�e]��F��̼���}	����S��[c�s�{-���/vEf��̴��� [...]
-�w&9g��о���[6^�|�1R�iv�y���󬳈�}1;ϻ��{:7�jϙU�]E��*�2s���7|x?���ھ�kߟ23Τ
�ˈ�Z�5�����z&f�zǫ�P�������J1�����(��<
-��J�f��L��ԥ�!6�q��yI5�w�Y[z�s!N�=Xy�k��Cc��q�%i��"5+�LؤM���=xa�k�Ǻ�1� fqC1��)B�$=J.b�4#����<�$��ut�hߌ�rfNT��Q�$�Um�]مX�;�3�oG2f��|@FG,�j�!o'�?Q���_-N��JFέ�'l�zޕ��}��;�;��
s�߆��O����S��P��!ic��Mюe
b�/���ݐ��y�dX��B��KX��Y}�=�p���1����g_�G�/;,�� �dA?+�4���f���ׂ�
�XG3��:�Zl�w��*Y�X�h�~x���b��]�C
&C�jT.?�^L�k�[����I����bS�?�&��'�-�s�ǩ��L(��~S?��9��V`�+�'�0�O�qNl���_y����+���ŝ1E��s����OB�Z>�z�9�5*8��Jt�6P���Q�)�*��Ms�A��]�}p�%�H|Lp66�?�3ɻ����k��/I�z�!n��lm�{� [...]
9�䞍O��m������{�a�ߗ�t|����cvBT��dm�݉9���$����
)�dΪ�J�Ϯ�t�h�� z���K�ѕ�
_-?n�b�Q�7�/�G"�ۿXx�:}Һ9����b}�
n�t��`�v�&����F��S���7�3�yjo�AG4�
0=
��
N 
$��5F�l��
N�
�e�9��
��q�{6����f݇�u��X)�G��s
)�N�8t¤EѺ��s<4��������?�	.�*|���4xG�
��r��sY�AxX%)`��1�!���?G�5|�3J�)>�>C=�E4�Kٝ��V%�>�Ӣr��,>�������c���/��sv� w
-�3�Y���
-�sԞۗ�W
�l��\JL2O"VY
hmjV\	�">��y�5��ڳ�o�7����o����ٕNJ

�8���<`
X�C�v�)���=ڷ[#�#����1��y�IIE����k��g�߅�:m���iM�o�wھY{�}8	=	~p~u�sd�9�����o<��k����Z{�z$1��Z��d��Ĭ�n��8ń�O[��L�Od'��V�e��絗�3;c������H�ױ��?$�;&&��
w��_�����#�n�����g����h�&6N;���C_'&�S���W݇�sZf�ܧڙ�u.?�^|(8���.t���G
_�G9g33���׬c�C�B�y(�
CRÂZ��Z�<w��ʘY��1m��fS�r���O��ݪ�K�F�;m��i���#��
���\vVR�|#*�z��i��P�n�_�o�
j����8�։SVe�6��3pYj�yjc����ǝ���[?�\�|\v�_�Cum�pO,=l�|�y�w�ếص忷k�~����է�á��#Ӛ�?�h�~��m�0
>��]�e
��qO�5��:��y�
��r��8d�f�.n�e
ߦ<n�q|�I����?��5|������E�f�	̦�q�6��b�
���y�z㇡��S��C�y�~:9.�@l���)e��Sh3�p�V��fmɯ'�g�%z��#���}�8g��2�vt7̮��7~�=����h�V�'��K�[}��Y�*��C�O;U��UѶ�Zp6z���ǝ�.=h���s�=�P͟7Fh�w�?�j��O0�`
)��Z�sN^U��ud�E��w+��
_~o�u�AϭƯ�S�j§'g��[�\|X�����^
-���������o�rK�[�K?���s40��q�Z�G������>�V_��k����p�}b\R��P�o��+���\{����j�
�5X����s��_ͫ*>N���$�H˗��G��������o˷k>�z����3����ƿ&&t�_��FV���
�`������
�({o�aӧSڲ?x���.?����j�t�i���۾^}����f��6C���
�|�8��v47��&�-�qѥ���c�g?.?��&,�Z����ײ��g�S�qk㥮~mDx:z�����?������W������&�[PO;o��_�n�.?m�:r��s�p��΁K�ޯ�(9�8Oz5ҌYѶ��}��������>��n���'��W��|�<��Ġ6�F�?�?��>r��
�[O�n�朎�ii[3��SŢ�e�ƺ�<i�W��al�����O6}��|�M�g�{���4p��k�IO_��'D%�a���S��_����>��sde�w���o�)����tz���/]���gm3���;T��I���@������ZT]^y���w��O���_�5������x�����TT}��y<5�h�~#����˥���=ПõF
4��2�Җ�	����{tmT\����m�J*�W��:!8�/c���~�����
���Yx�prs�n߼���
ݪ� k��I�u���OOӏc6^�P�����M�O�4��]���
�7��
��|�����쌰�z���~�߂�5G�A~�}bJ�?�^�}�����������}��E�w8G�+��UC on���/=n��s���C�~o�_������ô#�q�~߿n<c�
-=h�tZ}���HJ~5.��of]�oDžg��%�ؿMJ~�8���k�U|���e��Z�gGo�{֞���(/�DŽ�ܿ��j���q��_me_�i�����RW��RZ�hqw	� !�D ��K $!	$�4F�v�;���y/�Yt�]7'��qo���'=�(
-�e
&���y��帶T��b�.�T��./��:0a�
-t�V;9f_�* �-��
���
~��T�^_��T'�t14��
�ۥ��s~���A�؇��]�o�6�WC����Rc�+�;��G�_m�{Z��і\�e�g
(���+�dh�~;[��2S��x���҆0�B6;a^����+M�w��J~��vDԕAb�
� 2�<B�Z�?�f>�1��L	S��U�=]nH{i���I�1.��H�}`0}��N��`�6�)�/'Q����w��_���_���٦�"��n@��
���s��u3��<���g
+��Ӓ!N!�h�b#�m���P�q�
��K/�8�%�-�}�fW�W� >r���cV
~��X�~�i��2�}ִ0��N��R�m��ԣ谅�9q�ˍ�b��s��(�����Uy���Ņ�7:�����O*n������k��/ӂ�7��O��� �;���2J�W��	w�r���@���Ҁ�t�Tm���e]]��ERA\�"E���oG	�OFqI��;|�͝� ��O�1d�B��2��ӝ�N��qM [...]
�_O�<�VHsȘy�1.�8�
��z��俙��~��H|0_���PM���~Yi.��TG����-�A߬6�|\mA�
�����^��}䜒��w97�O97�O;⪔u�P�8Y~S��j����1J���zg�qYŌ��&ݖQ#o���nouz�7!.�	�c����mR��f7��BM�S9=�V/2��Ty��!v�K~�?�������(��lE�����g}ذ��v]�(�pa�+�u?7�}/9��2��6
� m)���Ҝ�B͍�5�������F����w��X���@|�h/�d@|��[l�������^��������]	)�8�
��`B���K�I�=�I\��x?�Jt����af�F*p����Zk����Յ�
R_���$ſs���������
��/lj?�̕G<��$x���l2l�Z?��)#f8�l�
�����b��l�_���;��2�$:JZ������v%M߈��,O{�*��o�-�3���V�
ެ4��lt�|Yn������
*��[`�G,7�4��
�����\�q]��O�Q�.F�g�L��.|9W��l�
�� �/Z������z\�[L�����!�%
�IiG at n�I�|WZ��ϊBnh��w׺K����/x?N�bb-N���;X��ԓ�~�5����횡5��PM�w�������Fn�G[?�;�o��������䯗�
-#\'�e��d ^8n�*��rM�3S��P��6������&�_^Y �T��r�.��J]���z�1��=���m��}%n��c���A at F�4[��t�wkQ
w�=�c�*�H|�؄M�
n`l�r�
�LWf>�qs^)ʡ�H)�6��٧j1w��
��O{:W��Ԕ���T�a�
0]y+.
-��
�
-
���1_��l��V��$�|��Q�i��]Xr�����b
<�_=�i-���Y�Չ �Y�����P_y�GO{��˅r܇�~ll9�vsѷ?Ʊa
a#����5F
�a
-�g�g�|�n�b3���|���]�uY.

�/f*��O2��Ms��{?*K�o7�� �%��k�o �r� <����݌8�q/��55��zW�� -��� &�?
��=1�
h�y�e��ʲ�x�׹:���ZD�L��yWBo�alv{Y����!d�*�є���-�`�(9y�{g�
��<DI��D��"���<��t$�c�$p�-�Չ�Y���R�k�
���L�����=�!B�������+k�Ĩq��8%񦚗��q�
�݇	ۗ��Ʊ����7+�>v)�t���Ջ���-���]���`MU���Nj��Nb�K�!F%�y.�%ߖ3�LГ
�R_�02=��ű_���j��?�5�(�;�	�9CGΫզD������
@�P�2������_]
��G (Y+�{<W�(殒xc�������P`��я����9��z&�>����JwY��}��$>$G���^�x���}:���
c�x+�	�ql�MR2[���r�
�`k
?)� ���6BJ;Pb����O

i��2_:'�E���K�%�
��R�Nw�'� ��.)�j��RwI�U���)j�ܬ�z��	v�K*��|Eދ�qb�?s崳gW‡�Fx��
l�J[�����'^��qj��nX�%C#��4BL֊
_m�����(?���F�a7t�YO�j�ߟ�bh��Lp`'�
�����f��sW��n���'*N�#=�����r�	��<,,]l����*�2'�}����W�?��A�:���fx���8�P͂�
�C
�0��1b�M�(5
���Yg9O�[�ZQƓ9q�{�5y���k�
�k
�GX��?,��aJ᱊�u�%��@�
-�w��~��k2�
�'�D
Lb��������oB)���d\��:��>�F~{�?���~s�<偱�t���~�؍��=�#��P��S���ݙ�f^xm�=��/-�x�����7;�Ĩ�z�K5'�����V���.B��ٚ���My�W��Ib����4��I.�@JI86�!�G��=��r�jR
m�~1�3j�����IR�U��o������l,������פ>[�(���?�U�?��A;�+�-����aT��2�}����a����g��r�T��-�,�� n���o ?�[j-�Է~�i+�
�dJ�	ot��gƮ"?�Pi�
<E��h�����QZ�������)F�}
a(�6%J�7�O{0�O{$�F�4E������ׇ�0�,t	�[m��ZA��!x�C���s��
 ������D O\��
>{ ��<BL���
��#�3�
6�bb�J
�<���
(�Y��~��=�.��
u����H�K
ĀCu�p_ [...]
-�f �.��—�k-�o������b�+�]l*����1
�cd5�����K��AB��>�4�
��|3
����y�\��b
 $�%�"@��O��_L�3_��3
�� ���.T�\
���H9Fӈ�o�\n/��sF���8X濯�������.�$����Z猈m
����!�
-��v���	��9��3R�圄{K��ﬣ�8`ݟ�q���G�ʂ�k������T�_
\���M8���;���v���E�@
�>�D��j. ��m��c6�0Ẇ�g[��O����z��;DItH�y��w2F���1&v_�,�,���Ԟ}~()
ڗ����o��uB
N���ԗc�𿖚3�MU�}
礼^m��t����A����}��z��7Z
�-�%?V��o�3�n��y�O���O���pQBX��ɚ�Ƚ)Z��>�� %��v�9��rK���s�
�'��?�O! ������+�!�׺�?n���n
�|��##-#��\>l�ӏ4b�e����Z��Y�-�%���#o[���}=�=ۃ�+�r���S��HK+�K�q�Q���������ǃ䐇@6��-
-�G?2��c
2!nW&���ؐ�j�
۟%�صT�S�����
��fz
)Yh�${�b� ��[O;�?��B������
ΐ �т�g��泹J��t9�6NJ4�h\��!���hAT�s0\�qJ8�}-�DC)0A��a��qV��w�Jr�V_��u���Zk�ǝ��OG��=9�x�����[C���a~�\�
໿�{��� 柭t���u �q�w�	).�>n�U�ɟo*�4�Kz8Ί�7W��n�
�k�/
ޗS37�?uͅ��
�U��\lJr
&ݞ`�>���Ս	���IN����6�E]��}�U4�9�TC�s�бk�`�ծ�W�k����Z'��7]��
���Td?#��!eƿ�`E?�@�\�0C̵�z���
J�qO�}��b��Г)vف�V�3�*��u_%�G���.l4��v����
-Lܾ��S�k
����qQ�	6�2FN��$>�o*�6K�	f	1�@Ł
�Xv�tk
�ӡ�nu�6
9�,�vO�}C�
mU�����9%
��\�8�����)'Cw�h�۽0�������y���1;#�,���`�e-7�~5`��9���{
�]�O��W��{):r��ޝ�A����*>ѡ�"�l���u����v��U����ѠV����{Rt���W�]%�w��ޒ2 P���X�A�T
-�*�1Y�jn���:a���y�3�P��A|�j6���r�����^�e���8���+q)66�"�$�fظNN�/��]�0�r�o�i�D&
�1�
-Z��95 V��u	)=���
-
�7S�dR�p���/�
��6���,����7�|�{�_y2/�Z�C�O;���>��{J^ٞ�]d�%��S�Vz��-�ħ�L�W�@=����[k��m���]�(�09ũ�ٴ
�"�y�w(g��ǘ`�z��쓌|���jƅ��HQ�vF
&�FT�a�
��G��1r,#�BC75V'�����G�'Dؕr�tU�+U%��j;6�1�F��
-Y�1t�vw��Jk櫕���{
-f�4_��|��D��x�惿-7"��$ƍp�>�A�o/7���]��=�_d-��,��
�G�J�g3�#5!}�)��f'#�"���2S4��� �?��E���=���>,6�"t-�������w��q�8�ˋ����Z7�I��uh�p���ڕ�!�	��&�0�
�:F��v�!_�]�jb�8��Gj1k��

x@��>J恊
�5��"%�[�8���e�9k:͚�f�d9�4FI�����IZ�yd�(*tk �݇�<T�i����ڂ׆�"oc/>�XSNw�Ye�=�hue�K�8-�XWYy�	�RL����b�s�:��B[v��4�
��]%O�~w��� ��ց�����{KwGљ�j�`���dx/8P0�vz����q�e���2n��\}��]Vw����
���m��:NK5��z�^S�c���YF	1���;��b� -��KO�y�� �5�{�-�ss
�1F����
-N��Nj�m�s���L�$
|0ǡ�Z����<�>�W
�XR
�8\�� >���^��7I�b��l��Xp���8��������Il�y����)ߕUQ�#����/`��)pW-���=��H�.X������ch�c��i�b&.�"��!�V�`_�R
-p�U<����-�	��Ġ�f��F;3��̊��$~�]�Cfݛ=�]��.v�|
%h��x�*�{�I��[A��
�u���P��m��&��
�x}��N�|����9��Z�(O�<��h+5�cKy���fl��
+�dXҳ*���*ȷr�H�(5}O�';�Z��*1ˡ���
-=T��'�6~�z#��Y���H�� �5�S���;
��`��d��>x��>��}HX��
���-�vN�2g��������
��O�5|^h�zy!ɩ�–���u�v�������>�@����jf�z�0uo���7,Ƙ��IZQ�s��
/��5��iiC��ۖ�3�JN��t9�d�O�SpJ���[�%��ƈq'*.�2�+n.K�֍ȸ�PI�<i�=�	I۽��

�o�1
�d���x���h�Bh�d�&�yG����M8�c�%�ۃ��+m`��^��f?.�������?�zY�G��}D��h&���(���*�z'�x����<�����b��t��4�x_Y��=g��1t��j*�1�����z9a�x;Cذ�~b����s�[�q�]�a���oD{/��?�5d~\j��9^�U�^���{�z�$�g-����jD���&��JU��2��)�����~�o�y��@Ǟ.�
N+�2^�v9�]}��_��&�Di�BK�����V5:�x�EX�Æ��pR&�(߻)%�[q�7��Ia�C�(	�������Û��W.�\o�	����b·�rN��N?6�%.��
-�aVSs�:�_卤/�j��	>��
��
[rOɼ��I�
�����P���'75�
-56�bZ��__�b��^l�e=�G$=Q
-�[}�$�8
j�"F:	?��
��D����MF�jŖ=��]e&�\BE�_,��v�q��~��w)��
�߁�^��B�=��/��3����,!|W^�ܚ �ݤ� �Z�����CG����~lɣνы*|�P�y�(�����G��wo��߾��H��>D/x��C� t�r�H���iH��
-�k/�VV�}ܖP�����!f�8��
9- at zh(_5��T��v	
t9���ET��URL�B�ߟ���}
�fb��r斌�-EGlK�o�i�@�)A�j��L@�c��u�3�
�"�CC�^.
-
�������
P��gi	a�qIo%�� C2g�sNs1 ��z����⠏t<�}����Q�<�����T��*�n�}�^��^ �D]FE�]&$��JM����R��Ҽ?]Aņުʍ���ONtL�I�i}[��_�C�X� �n� ~�Z��K=�p]��LT���u�
�� j� 7�
--5�Z���?\��z
�
ܸz}�6(/���1~aȯEA���B�46s�/�[�
�q�Ġ��Ef�%���I|���^dSq�;f�� ������_�ҢnV��_�D��
�!,�vc$>R�2^�0�x5��+
X瀁��
-�'B�]��\*���{��޹�=�s���CЫGwA׮�	zv�&(��5(7��B3,�F���XK�w��P�6hn��8���9TA�������_a�^�F�\s��sP��;(�������-P�7 ��@7�\E| j9��q~���F�M]�	Nѓ�
-�6v�d-'��B~�*�^C$�\������
���5�՝��o���^=}u} �w�/� ��_��u� �����s�Cʄ<_n�~7
0�
�b�T/n���ՌE>m��\P���̔K���⽾�2����|�A�<@�O\@o��xx�6��?� ��{�|/@���?�j^[rT�E�JX(�2�h��^hT�q�}��Q1��
]|���p	���xh 
�t{�����#��+�@w��zs���yB?�^��E<�m,�h�@������qQ���/�
8�1�m��~5
|
w�$<�����=���>���� ��wAo��ݻv
t�����Ϯ��y�R����3O�E{3|�O�Gٮ����O�P��4� �ёb#�/fz��<>}���(��;`��^ܾr{����uХ�������Ȍ�����B��b��Z�;)���2Ӕ���
�k%<�!5ؓ�
?��@
���=s�zz
-\���ˠ�{���t��_ �A��J���5yo6�`�Gst̿������ e孎r������j��n��£�s�󏄯�/|��9P! �xpt8�{@}'~v�F�^�'��\脅Y䥑�|X�m3��>Yp����Mϻ�I�#���G���{���C���/@??�]§fݩG�_M��A���o�)خ�
c�Ѕ��bUWM�PMy@��̸�Ȅ�
e��҃@�_<}^a�A�߽��/`O
�b�|�����RRȽvL�����J?%^�ITU�?O�пO5��:Y��
��*,�!:/�j��'(�����=������t8�� �{�@7��
-r�q��=�,,�z#,���j����I�^a������@�V�f_��ިD���ef\���
z����3/������@�
���ܾz����;\@??{��Y���[�$���b�W��K텟,
-J�a��?��a}���\
-b����
���sP��g��ӧ�
_���O�����7�><vE{�^���r���h�
�+��n��n
�C�ڰ~�Vr� 󪋉{!�An�#�/$�}%x{��?{�<\��n^�
zr���A__���ݼ��mP���
Y!�n�p�=
JFɡ��:X�s�����
#�O֖�U��T!�B�B.�}�J��`�t����� 8|
-��#���7A��u|�
������KP^H����ӵ$��>^�i�IhSU���)��]���NҏVj�DRĥ�OoA����|^���{��u w at o,޾z����8C�go at nO��
-�\��$�э���Տ���"�ڟcbvg�My�8US�&����7h�d|���
b>y{�
�|�t�򟠧7n�����S�k�,���]�f��#2�/t�k�\g9)#��Q1�g�Z�M渵a)O;H��b�%:��VQd�ut2�.5v��U+��)��n�n�5�v�D;����b�tM��dV��K
kc
T�>w��^bҵ�}ڀ��s	�ű�w!1�7陷�I	�))�
h��T-+�0@�_�.���E���
��a�&.�4P��p2�N
"F
�.���")o����r�B�3/��{��?�
��c��{O@����)�৭(���^���I�����"�iB�^�EȔ�吸k�<�Ǹ�����v�"3^ӊ0����/}{�zp��
��^{�~|�v1�[�Ŵ�ԋ���+\X�!.��R9Į���'��$u�V
�U��͈���j�f��x��!^H�?/�̼���G��7(�k���;���;���!���0Z)έ���>�g���0,��ڭ1
��e���-��Ql~��nďTQ�������yQI�S��.{���}Н��@�{�RC����@]�)�q�CU,��UfQв�u��r����p��qK�Aj�I?U���.�M���
R􀜕}��q�4%�Nط��|?x�~���b~\L�y9��HZ�U��UVG	5
�#��j�U^A2+��[���f�g}7=nm���h+O��C]0i1W��}�dE����H��t���K�׷�s$�%�ΌK�L� �ﺸ��z�w9?��Rgi�ɢ��x�' �a�h�V [...]
-�RVQ��>�@�+���
u{�j��4��g���
-�� 3u���s}�[�=V�X
�,T�W�*;�'ۚ2��c䵵Q"�� 
�Z�T�!m�K���{ŕ�������*�E�G[&9НqF�Z'�EBL�g�Nr0ã��`"֤�D�7���0�X�s��%[�ڜ]Gƺ�q��*�c�8�/S������bÐ Ϫ ��4����Ү�i��ַ��6�
�״��p�5�()�qB���쓢�>����d��`�`O��
�-�r��jQ`Ky�GC��k���cU�,�L���z���ڃ���J������ބm���Q1�VF(�Z@���?U�������EIW��@u�T5|f��2��
�|p� ��lGM�V�i����
-�sV��ϢP���#

�5��4
#�Fxy&��
-�)mi����"l
Rb6���z>@��5�I|0��ɚ
i�u�@�m�ة^qኤ�a�l��U
H���hue���!ȷ���l�Y�7ǀ�hyv���1Y_�V�'{*�'ZE���Dy
'L�WW���j��z��09ja��ԇ�sh�t���Y�B~7��~��]3��kS
��u�5�&U�
-x��1R����k]q��9�7]N5��R�R\�q
�Ӧ�:I�ޛ���j��[�T��m�
͵���յ-�kLS\�q���6�
-ڔ����Y�W(:���OW	�T�@�G3��Yj�q��lU�����v'jN��dR�1�2>�$�b;�+ٶqJ�e�
��G�X��l�7�o/�hj{��9"����lR~�ᔈ�+?�!VQ{6�"?���8��h��U�;ɂ����^��ts_Sɵ��x����2Y+�UՊ�
-nɺ��!!D�d�4�)�2Ƀ���R�;+���
��J̀}��j5æ�B�
-t�� �ݡ�$�Z���|�E)���U����z�5����-����
e-{q��4,�՘
%r�gbO��3���=2�y�}mS�|��Kp.V� ���tޏ�DK-:�3��)f�I�+��~<h��!2Ϡ�
��*ʖ��%9b��#t�}�뇎č��p���x�Uw�T�aQ3
-��9�|�
p��l�cZ@�
�e�v�}v�,��lm�Z6L�~�6����E&�h㔀���d�
-2�-
Q�&�
͋��Ԩ�9,�&��l
#C�rZ��u���O�}
��3R�ݟ�y�=���.��$/��Йp0[Y��3�u�?�J�h�Iu���iY�Hiи ��dE��]"��ze�m��K�2+H��^�'�Bѡ�Ox�!���Zr>-�|v,��
+�;�:�<������q�s���ib�c���3\�9X������P���Tv�;U�=MS��4�ġ���$��Ŧ��V1c����LS��q�
g� �9�i�)r�]�O<�0a�S��c���[��sM�s
�,
-��i*ب &��x�$%GՔ�.�x�Z�j?�k�u�Ŭ]))�4R�c�����ݦ�"GE��y>;C��#]m�����9��lS�0��Y�7�!�;����qj�����f��+� �X'z>�|���,!�2V��
��9E�
骛��B�L'2`W�A�k*�4յ�S�=�dk
�#���
�3��s��*8��
-F�]�,��{���mj�Q��aF֡��s��ږ��7�A 
SN���$<���(� �sL���KM���q�\M�MW׾���5*�P�$%Ӧ���g�I�
l��lWv���=�e����_K���9r�MIL>�� Nj�l��Y�>l]X�?����ٔ=5%{�
�]���J��C]U��BU�����,�=4Ԏ�6���k�\�k��ߟ���I�<��Ģ#���x^\����V���;��t��p��[C`ϭ���3
��
�څ��;FN?Ա����������&��^$oLq[Ɩ�/�tm��`�
y6K)9ӟ�lfa�
-t�fov��@a�Vl�3��s�k���v�ۛ¥�'��st��BU��&}T�jQ�Qg��Q����;�Oڔb��1�S���%~��F��4+��f'��&��/���IR�����P��w$E�Z���E��k\�!�o�S���������n��O�L��v'����ƑBo���MQ�]�E.w�s�:�y'���3}9�|�}
j�G���{�E����
�QF�y�i�⣷ʾ�
�8'0Q� 
�[O-��P.:[UΰQ����gK p9ӡ&g�M�![L�F_I��K�棹�F�� 㘠e{˾:%����r�]!Ĩ����T��
D�o��|_�C��9E@�B,RB�]E��i��f%"�ISY��E��X��MML���Qv&�,-
5I ��Ib������C���ㅺ��>�V�;AI�H�A��y��y���Č�֢/�
���ږs�?%$۔�B���o��Dؕ��������)�
� lg
��'K��Wy�=|�'���J
�%^�k�n�6���Lp��Z�pwJ\nQqq@}֟����:���%��'8��mS������#-��l���dX�6ys���\c��y�w:�!�ς9�Q
-�gi�����Rr��|9��e��$�G��شcC��Sr�4
�3�j���
��E'�T��OdR0!�cԌㅊF���>
�����>���
6�h�~0C�
d$�H9�����H��2��Ƨ[���4>�h�Vr�X� �]�Y-��i��y
�l�Vz2��\�L{>H��2%�zs2C��M�����D����:�h
�f����������1t��8"�:I�;������}]E��\��h���hM�p�
-�\�ص<�j?.ԩ���D5�c�g����}�㒏�+���~o��f��N
��x�e�9_߷��!�Jz���
4�����]6��:��<�B�`#\z�����U����DY��`އ��
ץڬ��mE�M���Q�;A��ݽzީ���[[N<�! |�N�)��#���g���֡e��^+�:�3�>ɬ $:4��C
1{_�����4
KvzY9�Qj⾔�f�G��?����%�S?�k�3�Y�+�9���\�8��8NI[�F��#w�x{2n��eQ�sϱw:�8�
�5Ǻr +R�M���q\�YFj�R|8����a׈+g���fh�3-6�P]d�ƒw$���d�u�ѷ�ؔ"��lu��p|�<�ߥ�'/�c�j�O
}��|u롾��9Cɷ�Q	��G��'�-��9��sJD���U�ˆ�������]�;��g�HQ��	d�s�
�<Z�� 6�2N�?���<��ьX�?��:䄴�~x�s�Yh��H�w7:�"�k�f��
�0��p��Z�i@-vyγ�{+��m%��$���ך��_����7D-��)h9��r7F`ߖz˼wFI�ۣ���i.�ל��hZ�<��N5p~Rd�lmړQR�ݭr�5���jq�[���������l����r��2V�s���x���*#�.��[k�=T9m���{�Vf
���W'=����o���O��X�
-i�� �0ɩ�
�`�+<������7��G ���_�4��
�`���Â��_���K<֡�R�I}��Bd�^mT�^>�nrK
-�w�"�3��yb��*��gyL �p�Nm�xo��8аʎ����xЮ�O�i�}[i�D��
�&��RJ�����^�fj�1NM_�G���"o�'y�s zk�1
-�����`��.���
-}�{^(ؔ����熁��
�����r �P'�����o��;��i��!��@WK:�6L�[n(��P��\_��l�2��|e�=�@�7�85s���~���&e�N��{S
��
�;��\���h
/	:�eS
J�.���u��I���c-*vO
����wC}�U\��LC�U�|
>�t��}��9T�
�)�*�����g��7�q���҄�.����Q`�`Œ��_���;���O5��ƹ��ꅜ�@V8�{b��D:�c������ojm�E0+��
l|��<�Ꜣ�*�YN��.�e��		�^��M2Kϟ	=��
�k�*�,
-r�YJJ��A�j8�w�G���f+� Nrj0��Uzd�5{�a��
-l�I���U�!��ʚ�9R��{��s����i�9,pg��<���~ؤ�8����;F��O�r��fWQ�ML�N?<b�G]�P��l�[����߫u�'��M{&Ҧ�'��4�� �kꏱ3NLږ�Ӎ���v}#���*烩��\�e
B��d���^D�MI*��*�;[��D�S�M�(
�͊|��EB�?kl��-o������������۟��[�W�
�SJ�4����"�������\ޡNTy:�c�̳hv-q����^��
\d
A��t@?�d���Ar����iS�6�O�V
���j:ءfY�Iq�q�y��e ��>BN=��
-7۠
�^��j;�C)���Dߜ����%�Ͷ��������$�Z'x�# o�̊+�Rb��*��F*�
�CP���s^ <�(:J]�����i,���|{d��'�z�13���Ӽ��jN꽹�l@ò���q?M#�̾�<��/.y)~O��D��ߒ cM��+�i��[�]w'`���Ұ)q�۽IB�?��9Т�_�@���#�V
rk�-�ぜQd���+�����iy�S��eWPs�#�НAt P+�[}�_�U���
�냤p�C �o
���C<�;s?ن��;�9��{S�OfHeS,��8&��{�$b
C�
.�OV��#@�
Z&Z�Q�m����g@�0)h���P�>�2�
��+	V�R��k��;��|'�Yt5��"!P�[����&ț�����!x�y �3X�w:/ �lU�C�D��C�Ce�k��K]����R��g
����TK���l���_�
j����rD��.��u��6�
-�O��'�7��Y��"��
"���1�
���z��&q__�n�p����@V�Ӱ��u'
��[c���1R�SSY阭�ߔ��������?�1v���*�G|k�/�L�S����y<�P�I�ל�
;�qL���JE;����
-ѵA<���4�
c�b�
Ε��V+�wոD�&iW�Mp�ȹ�z��0���װ�g+-�ӵ���EiW�M2�㢶����p��^���ۨINMDŽs���9U��W��f���)J�]��6t�yhEq׻J��61� ��]�o;
 
����b_����S��L��k���l��ݡmJ.�	���*|���o{��X+��Έ� e
ϲp���"��L#���֒ϋ
y���?���y+��5���d�~b��
����o�{��H$a'�jE�i� Z$b�J"8{7��$9�f��k�%��u`�c
>��П�aZ}S͍��ژ��6��;��t�1J�?u��7;��`���h
!'�
Q�6{1[�h_����V��|
滔��>_]�}g��P��K��Wg1w
c�~��%��hЯY��<ō��vS��
?���w���ӹˆ������-�����o�RR��(!���_�g;g�[���Z�,teF߬.�zQ#Jza�Q��QQo�	�
�r��09Y'���	2�)w���8�?u5�ρ:F�HX�^b�u��+�8�����@����#N�XأY�tN����Qz�����GS��# gنJ|
u�Ow�3_
+�	6)��Ѓ
7a#m�8�8>ag��s��?[��a��$�2�F��c�G:��5
�鬐m�������yQ����r[·�j�lS�]3�)'%�wA���s�
Rd��

a
*��G�,4'���� �^�
hpY69<̩�&��Q�OR�ȍ6"fk�V�Y~����l��,
��R��h��b��K���'K���������å��}=��:�<��|C�U���*I��Y!�d�=�Hx�X��T�i�	b�y���{�]�a^�cr�۟s��(�01A_��ڒ��8P�'�?�	���f=;S�p'��V99���nK���	\�9&~/������ٺ��qJ��b9s[B���A~_�(�\��y���bą�g>c$y�q��a�q?��s_�Vg=��忙g>�Ue���x ��>H�^�B�^D�+#����
9o�!Wdԟ������Y�*ed���g3��_�g�T`
)�]nJz:H����^�(���B��s
-�����	6d�
�m��|���
$�������b�#E+�����k-���	8{@F��-��Ug{Y���r�
Ӳ_.�bSNtt�bS��zO�'��#)2
��
�X�C �k�>����f���V���q�����>T�i�K�&�+Y�QZ�s5/�cT�[nE���i$��;
-F�� ��rC��v*is������"%����>:�XWY�ٗ�A_}g�*�i��k�C?�-��pR}��wG�q�#�X��_W��O�bn�h��73_�))��툸�������~E�?�Dlt}���k.�|M���r4K����W�9F)!��ʚ�s�?��2�Di����~O�	 #l��S`���Ԭ⍎�:Q�iNܝ�����%+��()I��
A�07��rg~��<�t��l����3
S��o-�d�
꘨�
�2Ʉl��
�lđ�K9���������4�$&ˡ%����uV-� ��0+��r\��
!�t�C�k9H��	��VVl
s�':�|
ޑ�������#���v��F���:B����Q��O�����BP� �aGF���yF�>H�=��H�Ŝ���б�2������Ѣ/�Qlԁ��[������s��T�;R��v)!��
#榌
su{��:��|��|p��
wGHq+M�7ڋ>�$���ڌ�ja���6��_��* [...]
�du��4����;��sx!4z�'��jw�kW�͠�6gw�X�1�
-,��W�$_��W/Y�
~��@tԪ} ^��9�)z��#��w���xĠ��Lc>9���y����
�[���@�
��3w�t�)���A�|R�a�ɥ�2Z�C�(��q0~-�0dDf
����T�����>^b� ^��[

�
+b
]�#�M��8뙆�,4�]�p2����C�f�����7wf�Hs{ţq����Iѿ���I�	�Ȩ�n
�DY��j�8���^%��!vU��]�{����5��s

�����yI(�)�}��d��\��T6�5���_�0	!%|f�>�pN�W'�9J~�%3�w^�+8�K97II��:T��}��^��snN�W��0�W#u��šG����ܧ_-<�W����X�3��k�p$�����521^1GK�
-
-�e�O�ފ{Jf�I�8��rg��>��~	��{[?4	�u�OI�rOU���g��z�+/��wJZ*��␊G6�@߭��^���##�;O��̦�����<.cWK.
h�$�&-���
Z2\��'��Y�,��U��!��?����]��z��"
��$�T��}-����Ňt����.�)�k}��a}�4
��4��P�C��td���kU����e��w>5|�6I+���{����}��3UQ�Yh��$i�����
��
V�^xs����pm
p
R������}sZ�4�����W����=
��.�>0�Ai
`�eO�plHE(�?'��u	_�ԥ�9�k��#
w�
�����
-���M���Ptߡ"�j;!�ݳdСA�qOa�V���p�v�UF���y$����h
���Ӏy*
-hh���1{�
����6ё! ����
#�}���a����d�(,jOK%|^n8Z��fw�\�=�Ip
#߭
�b�z�Qra�
� ���4)s����$.|�?�����1F-ٞ"W��S��}b�$�'/
|�_I)��?Z�M:����w�ݏ!%��`��w|�}�6�ț�@,��pчz\�g�5z�Aĺ��	2^ٕ9a���z͖��з��b�ꨊ���*�[z��sӯ9�A�9
Kz��� >#(gV�+�y�h��+��
��e	-��]}m��E�������!г�Q�=-�����<\���٧�f���3ު}�1
{�>
��-�������i|�����,&���Ixځ�ӵg]�4'�2u�&$\
B}�
�@cL�
�?��VD�g��;4�+�Rp�k�,"� `��4�(�@Lx�-#���
�
*��_y��YqK��=/*�:����
�$�F�Q����YB���^�>Ri魼k�)�a�/��W��|]�q��B�CJ/��0j����م-�
-x��趖�~���w���`�,v#_�4|�&�޲�
�O~
��<!'���c��
��K�[�N��,�x��kW�u������e[zlB亦�_,u�^1w����"j�1w�x�b�[J-�l��96�)_Y�-�:��%l�<��T���.h���r.zI�pheSw5�� �����#���⼧?n���YRV at K�	��s:1��-9�j"���om���
̠���pt
Uw6'hE�
-�1�Mq�`�
Ө8���`�wLL䮱u`�cv�u���2��"}���O�
0��e�%����^�׉�[Sذ>ygi�<����5�.ڻ+޸$�TK?,b���~k�
�1,oNp*7&Ii[ ��վ���=�7�+@ܐ�˶��Z�h�uN>�?�I�|�H*w�P)�YlN��ꎞ�j8���o=
��ul�Ժ��xsO՝�aT�k�۔q!�ݴxk+�,�<UQK/̒�N���k�J�R~Up+_{��E�ޚ�M9�<c�����G�����GGfd��_�!A}ܚƧ
���̡�Y���=��L�@�}��6i[M)�Ͳ���
ɡ�g�,��1�����[�����W�ׇ�1+c��nT��]��
\�K��2�8H�x�,�P�
����ߖpN�Хrk���
�ץ�/�cx�k��>~�S��~	H�NT�KJ.�����	ۗ�kC�L�g
�.�_
%%_γ�k��,�0��g��C��8�qX�@��5�x[3�ҀF���X��zj�O�L[�~����
�� [...]
-���D�8���(<fg�X��L�� V~oA��7	�K������/�֩p�/���LG�
�̠�P�1��
#�����^	��9F�T��������Jr�)g�c�
9�4BN�$�
�$\ܘ@��x�]
��k �
��e�y@
�c�s�:��Q�<BI�M�\s��

�&d�+d�_V
�xI\���� �,5�.�7�/��A
��#E�e5}RJq@΅nNR�\�AL���ڔK�Є�ݵ�N��b~� $�7�^
L�
-d
���1�gֆI%~���5�KrNA"�*�{�����*'d���
-�p�q8h��v�����4`K�z&a[C��.r�9.�1�?J�Z�A��P�,<
lfP��t�!c샨h��쎠*��ad��>�6 {�Ŧ��"?Zʞ�OV���ѩ�?zk?([J 9��u�a�8\/�@�r�kK�"�]�u)
%��2����ή��=X��|*|���𶊓qF�������K
���j*D�.zԃJ8{�[��@ ���^;#�j.fs���R���z���|�.���5���,�s

�k��'�҇x��bw��VL���;g���S����
-(+�ևr�
nr��~/(zp�5V��-^붆T�"�}�-�������d����nH�bV��"W�j���<���
Z�
\ڱ�C���N��:}l%֭�@�n�S����14w�D��Qܴo�w�<�_F,�����t��D�8;��Ty��
�5W�pA�}}���{���� &^&̺>���au �y�E�b!��E@�N
�	E!@g����sp_���K��%>�0|-3�f�>��Qc�#|��Wܳt#bd��ǣu����őNa��`Y	�͎���R!��09���Xvdh洞d�2�ϲ.�#åoN��rb��!C�y☥�w���=�&8��)@1�9x:0^ܑ�K�7
-Y{&!/d�����GK|a�o��
`�Ir��!is�A.��[���7i��c�q}}���V�d��ꁌ���R�wR��G/9��R/!�
-@��*fS�۔@^�u)_�$��[��϶��k}W�H��
���m��Ck�؞��5���R�o�
7��>���F���nW�
-���r�:f��䚹���a�{��^=�+��j(}��XW�%�]
�
-Zb�w���n���7U�ڵl���\�s�穵�+

���>5
�2V��vX���V{�������7��и�	X�{�%�eN�n��2�
���;e�"��V4rI
5ᘣ�{�l����]��bːx�S�J]�����ڷk=��kcu��9TڈL�G_�VEmρb�=�L
�WVF��i�K��K?��Y�qE�L�|�G�D
[���-T��Rm�OY�L�x�����ͱ��_m<Ѻ�n
�'z5<�K��?������I��U;:D�J?(�7C+H�5;���J��e�hI��ƥY۪n
.� 
g�,���Wr'�a����J�Mp��n�
�N�+�<�J���+������{�vB_�p��r
Ӥ
�
�2�˃:J�Ѣ@|hi
�[��
-pp�f.�+#��iYx@пX8T��Oڒs��!l���&�T�l��pB�-�
����h[G�
cs�kg���1T�����s�6�P�B�f�Y>)�(�fA�Jt�O�Hp�Bcԍi��řg�Ց_,t�GK�l+�I�
-Xl@O=X B�m���{�R�5ܓ��Bo+h�a~j�]}c�O% ���C��S��3jA�^t��ʄ��Vl���`��|��.��r~��q�?G*���1�̌>b�U#���R@�k�	����р]b3�Կ�B�:�
� /Zڦ������ڶ���B�-uW=Z쪉�
�
-ڑ1�ܬ��)V�{�~A�vf�
�ܚ�>�
&���	
-����3�ͱ�U=�
V=�
-����@��`�z?o6+w�
�g�
�*��!}���%h�C��BB�x�=���@^#���
-=�y:�+�e��C�
�%7V��1
����kt(qe�QTj�(����

l���y�iU
�w�■��}[�X�P2ʃ�z������1�f�٧h�+N�}���!�.���R���~waGMB4�\����}�z���s���.�mf
���c��a[E��V��\Jh–
�n){�Sb
-v�D|�(��4H����s�^m���haf��-2��a˞I�|h���\LH���
2�7�
�w���VP@���m�R���\�
9�;�J\lϽnl,�a�$�A�
ť���/�5�̾6�I=3KN?ki+��&���`O���ԠVHu+�u�
\ځ�y$�X��V�*
@�����lMcSU
9׃sDЮ��3|�#%f.6W��~�����7rN�jq���'�-19>ǯ����L�4n����>���ur�����)[Ր��B}�
{/$
-�E�H��E\��l���S�'���5������AbS�w��#��L�
:c����SB+s�8}+��p����������on���&��}��_Ϭ���S<�� ��,;��|C�=�2J�R�zy�Z��m{��2�
6;�fa�\��e���L"�p��� �k�-��p�ybwY�0
-��������%�CP��\�F&t 3nh��q�1N���6B��?�]uZJ�t��K��
E�heWI$���o�1d_���sH@��ђ�v�e��L��\c�bR��7��b�|�7��[���[��^��pM�c�*B
�FhyC��^L™�p
�6��@��JI.��V3��alܖ�X�~e�RcE�u"ΎA��1���������t
Զ����&�fy�u	�(���

-z�|�Y?2��0&�[g�m� ��B{Y��*��{�w�H�
� ݽ�d�[h��[�
�Qb����c�T��R�q���>=�RQ�
*&�
0Gh��	��
Rz��$�x��92���]��ՆX�o�1��l�^\�c��5�
:���4%;*6�3EHr�""���;K��yI�T���}ܪ?b�������)L��8��R+螭����P��x�C�
!
�h�
�����b at A 
�Snu�{��q� �
��M{��u�h%���S���3��n�+9���4��:0W�qyq��3��jj'oOaRWz
���nhS/
�_�� �� ��_��W�3@_5�OYۘ~I3)�"�
�Y;ں�-I�K�LU䞖>2��>%��@K������7����_�uI�;4�ඁ�k�%O֧�ib������x{7��RK�U�0��$9����߄����g�\�rK�s��_�u�E,w��ۇ M,ť{�h�
):�#�gl΀� �
҈w����T��[��G:g��A=��V9h��\Jd
-�D_��=_�D��""'�B$��}g�Z��%�P��j&��n����X�5
-�
��0FK�9����c�Y�:�ȵ����/L�DF
. G*j��.-�X�T�x���賽aȣ�S�s<D@ţ�e��m	<�=
-M��0Ev��~b��ձ���I|��cDǮO`��RJ��:\�-˭$�Țk^L���4
M������F NVxմ� �o�V�8`���	�N�;�Vĵ�0ʦ���Z��o�z��F_ٝ�
,iW�*���\����ӍE��\�������:�8�UD���>�tLԾI��
#2���K��w>�X�gw���
�0'i�8�eՙ'(i��,�OKBl��y�˼�CK������p�*��	YX�N�<)��
y��|�ӎF���2J��۝È�k����-��Z`��e@��k����9�NT�r.+9��m=��6��
�����:VݎNH�
#RjӮ�`k����/��}�}s�ȑ�/:0sha�X����j�sKc�.��f�h��D�9�څ~mj�{$�W_V�k��(��6�scc�e���>T���_��%A��
㘪��2V���Ync�k�O���C#T� �3T��:泉M�V�R]���=
�xG���k����]����w
�tc��=U��1��hA�,a�]���ٺj
�E����g ��]\���1d�喚�Ab����W���]
��kd�s�q��5^��#+{ᜮ|��+V�j3�@lܚ@&
.��Gf"��L�|�R뎭�_�L��k?~1sy���h��'�/{:bOK(�LA�[���x�׆�#��aF�=uc�c�4&g���x��{
�Oɻ*��E�at��46���$���#3��`�X�k&���L�'�/|����ʩ��"bmÄ�
�H����v����Q>�_e�Z���U��w5�*����R'�o�V�cs���/�+n��T?v�`�
�b[� 
��,�ҧ�
�W���	?����
�s�Z�{��U	��ä��κ�\�o=�wgZ��.�+#��A�~i��Z$�_G�8e�B�<
��qp�F
-��ǫ"��T��0䭾���� ����@��qN-�ƿ�㸴t�S� ��BN�}
Um�}��a at CAY�I��+�����!3
w�B�4��M@
oN�%�۫�ݲ�.`zf9�[�dK��49��nX�=�q�O�OoK�kc��Yz���Ẹ���æ��eȴ�iB����q�\t�;� �Y;�3����2
2�~���R֓%�ظ��K����}9���Yy{����}�a���.zFџV�I�
Ї�m��+A5�+�S"l�e�&���ɧ,}�
d�0�*6?���j���7�e{�zq���:|�e����)���hEĎ�Yۅ���Bci���πf?ВKwՄ��
.�1�x��}�j�����\#d��Oqj7��y�@��vc���HI���͠���EϿ񎣒�J
-��Ȥ�yRՎ��{�#������d�(�oh)}藅��h�v��rlc����]&lޡ_��u#�_;��4��Ae{[A/���u�06d_1�����ʎ���{߉K���g`al��k��j'�	`�/��90� �\�]M�	�pK�)_W \d�v���E6��5QwP��_���f��E�=���g3 �C51�p����zgjι5�|��J�m7.�>)�ٯRN��}#q�H	��� ��*b�[N,�h���9FeP�#��y���,�_v���"y���H�c]s�UCGm�5�� <���wߵ�D�h��9��Y
��b�7�����{
-N�y�,��cI>:w[�)�V�ˁ8 at 9\aP�-t��2���2����O�㵟��Z��+��>=��5Y3;���y��qJ�:�qg��d��y�g�=��JT�k
-�j}��ɞ
[�_��G-$������5�,�����yE����'���_�#�/���	���'
���~9�`e�ꭥ���Jw�}Kw��́�ׁif�W@�}Ya�Cf&�oba��|�6�-M��F�ȯd���YU*n݁RH\��\m#ĺ�y%KM�'���_u���Zq�
/��F\��J!�?/$��L�C�Ip΢��1xe��
���B��W�Z��<���2�QP�V���$��]
���@,��a����bS;���0�����
��h�ݙ'�l�c> ��}��QތyՎ*97M]
�g66�ޘ�Ş�}��
D̏������c��Z�SS
y�_��N�+q ��4��
c䨟��	�M])g׆+_��3�{
���vD��6�
`/���%�?'���u2��2�$�F&-uU?���������~��!
��А�P�5
��qr
*�ɀK:�3�H�Ȩ����{�1Lr at J-���2
-\n at A��QQ�J^��A��c�h	P@�L�i�A
��R߽�c!�M
��42_~���U�騭Q���蚒�~����6ᏍX,���p��O}���r�/�]n+��
-�G�
,vGC ��fs��S�

�!5��5Q��3O,�N!�
��+C�7���
6a2oe���c/:��:��!H�wjJ��j:���~�Ɲm���4�/x0',���{���~ޒ��I���iHt�H�9�<�,�6]���9�-�c�D���?\nط6�o�(�l
-�>�P�G@�rM�D8$���ֲ��èx�$6�1�r��m
V�[�-y���b6��@,�y6�̽�ޏ�_zCN��m����G)��OK��K�A�Ł�gB���'���4�L]�^�s�Ԙ}�+�yP=;XĖ
-�x���yC6���g����=

�3G)��ҋ[�j��q at O���';k>�&*~��2�^Ppc{�.&0G(rL"2�����*$���
�G
-��e��q�N-w���Nb��t
�����Ӊػz
1 ä�d�7I�]K/�#����.i_ǣ�f�%�Z
uW+f9�h9��^h�~:/�~`j�<\
DGmN�J���7圼+����]��<tO+*~��
K�� cD���������S�H/����
y�> �ڞ��?40��3j��6�g���ձ����B�
�1�GK��C2��r]+(�V���|��]��#�el�T�[i-�&g����|�t��q��
-dƸ��9�,���]���U;�oα�NIH�Nߝ��W���i(�<A.}}i����߫��p���F.}WC�wK`1K��4��@����_�T4�w�� ?:F����b�y� ��B[U�_��͉��}2 F����o�l�0
-D�c�z}��i���>��k#H�N
-.o��<2b�{
-��&dm�8��a�Gu#�}��:Mɼ�R���yv��������d�sU8��¥�ڸ���'!q���A}��S�r7$��]2Xڎ��q�x�����h��>���e���#�b��
�D]+\��
-���D(��k?���j"dy��#�|@,�rr/��"�o-}�O)��)��T�_
@<�/y��8-�
3���D�� �HJ��]�H���
h�޲ǽ����/�� ����{�6X�D#̻�o��*�؝G�
���#K��#=�yj�G��
�
�!���=G-rKp	�q�����m���j�~��G��$�}���)�yg�����Ɯ�*~��z䙅��[��3˂9�q����਍�ҧ���'��O�����
�0��Z!�+%�f��GBŞ
-��W"�e،#�֧ �� M
�f�o��㘤�Y�!O����g��'v��=��0f�,�䒾���K�.Yn��?���4��NЛ�����.���>�6�,"���t�����(�o
�#l6�TR����1��cZt��@�/Q����/��H�枚gꆊ�ؼϫ��^�hs�.f}��>�MT�����E�rJY#!�����'��.�L%J>-��]U
-"��Yo�
���X䚧A�ůΏ��^�i�	��@�T����<�t]��S�j�i77gɅ輨3�̘��9�#CLM�7'�1��

~�R��[[�=-��9�gG���W
��@G!���o>Z� 
e�V�����>[D-^3����l��C�J�K�Ks�#?��*�T?Y���)yoF�>�a���C ����Kw�]S��>T�/�������/xf�	�
-t�c�6�ez�y�x�]��ȡ�� �$�簤�e
��ZøSN�ͷ��
�0ȇv~��
-��g�|Y�"��x�S��t�h��)R��@�;� 疊����6��W
-��ș9��Hy��I'0I�ΐ����k#��_�@˸�m�����?�R��c����aH����A<��FЇC-�|��B�f����"��O�1��n5�
@�J��������c�l�b>.6�\�s
�I)?O�N�t`��"��II��M��K��k���;��(*�ً�2ܴ֗��#v�ؕ	9�0�'{�*b�9���,��_���=*�3Rm물�֡��
�F���~�����d��m.5�fՅ�
�CJ�wM1��c�*cK��qL�c��g)��i���ˮ�샱���xr��楩���"����qs�	��U�A76�c��
i�tS[�����.)&�>
-ԑ*BF�1K+�!#ݳ��o����
-ZB:6bs���o.����]�gfQ̃�H�
�U��<�&��_y����GBV�o}��K

���
x�[.`l����Il��Wt�,l�5���ib�J\�`������"��
->�4
,��
��#�W:g蕛R�k�Q�!�Tϊ!��͸�����>�������W��IB�9sk�à��s��$#��͏m��g�:
-�����*�ɻ:\��"{`b�}j�9Ǩ�U>^�'���8s�LC�4��M	��s��5yģ��~\:#�{l���VF�%�JL�,;����x��\v��Y���[�jG�):X�2�UB�\�}�)ŕ[��>-��3�u�1�.�8�%U��!
��Afѳ��?�ݵZ���-�p��-	���p�}� ��u�[=N��b&��ji5;��h�DE�ڤ��]���Q��O�x�[al��w*qŵX��=ଋ���[�-�;�N�C��w�i
@��0���|rJ�k��5��ڐ2��J~wQ$�y�u)�=�H�A���׋9�Yz�Jo�	B�o��O����(���U��|p������
�h@�?13.,���3�g_
�ƝE�0��tF�-��M~��zWEԑ�Tik/{��e\�	>��
y�mO����~���Hyz�ů.�+(EB�g��\�!?�i����.{i�-��l��Aȋ;�N�]N�>7�M;3Gʽ�$�ܞ%��ə�����/�34�=�q�0s�~ [...]
:�5S�~u
�	�ٛ8l[㜩��
�O��P��
���aP��T]����� ���qJ�e{?.Nӈ��d�^�+
�Gx�+ 
��yT��p
��VAÞ�M\����晵>�p�D�~�s���T�<>ۯ�T���u̒�
3�"�4%o}�q}

����
�Ţ��GpͲ�
Sm�ͱ�:� =e��z��ue�x�>��qM�Kr&�ؤ_��
��m
��QAN)6ku�ʯ�T

�>���MT���2	��.nWE��E7�p��Y�gm�U�2l恑C��c`��JJ��
>ٯ��zՈT�x�;����r�^�0�G�`�����[���[�c w
X�\��Z��`C6���.)��x�q�o�2v��/�f�KC��%>�p�K
���u	-��w8�
�I�g�(�i
�U�Z�4"�M���B}�{?���1q���X{��#*Z�m�^��o��
�7��/m�׽�ӱQA
�j}
-
�6�L<Z5�E��!+��`<JrAp�K
-���'� d����YF��>q���Z\te��s�_~�Y��c/2熌Ux�
��:����W�t�?����[��&���o��y�eNY;j��;+|�k?2�7-��VP�p�e�"|T���r#dd�;��լ
U<p���Y����@��y����������'W�!&G��҅x����%#�!��_bd���(��?���G��k�Aq�g���
�ӣo���<�U<���ojɾ*!ǜ�/���0��	�Tm��$6s��v��\�vOKA�j��
�pGN��(�/cĜZ�(�p��J	�/�õ��AP�rKU�F/2*
bs�Q�K��z���Az���il�&���s��+RZ�վ�{
���
-�b�-�2&���M���
�` ���y��8Z$��,�)�Yt&�0�6Ƒi;J�;�N��bO˨�7�{a��x��!�=Հ�啹��niyc�S�>J���' Z6qu ��1AL�
)kC��.X��V���%~��8��O
p�"�\��
��1�ZZݮI(X
F�>� doT?54&]wN�D���T�
%`�<��R�:�~����|�v?K(X�Ǹ���^)�R\zHO�v$��J}���=#�Va{�<�=0q��&&�!'��%>��E���2�q�@U�B�1�����W]ߙ');ɟt-�Wkôls��� ����}���Uuo�
��>$(Y�Y�i��IV�Zx�v_�=�p�K�,:˭@&Yƪ��zk��.
-�>�'�*6ԧ�"�:.eo���p�e4��¶�rHQ�^�rc����傢+]Ȅm���U욛�}�܅V̇Q|�9}C�9~�[]��CBJsI�k�� D/��E�;_�~��W�bl�g���K� ;��Q��q�F�3S+"zG�����:�OVzj^�S�N1
-嗢(1C�CT���ue�ͽ��qZ�A��o�i��IH|�O|����Q?�
-N�c*�`��O
-JcN�R�.s
-��2E��u�
�� &��B�%���k�\�뭋C'��W��ݯf~ӑ��sM��Ծ��e�W�ϯ�`
,c�<P³��P��
��Nk[�S� �zݛ����������:F�bT|�\w��Ir�C�
.�9�ܙ����+>Lѣ��T>�A�H��
p� ��QRz䡞F�jc��.S��4�<�
�2��tu�ye��C?%�����F��9z���~T�P�
GǯJ�̻�5P��-�S���̍QJ�~i[�̊m)
�!f[;�q��˔���
��?�
@�V�j^����{<f���
4�X
%��ڒ`R�z���ƪ��Qp��qs��Q@\_G*�
� x���f�D���آ�n���6ȳ�qD�o�XRsH�f���Ma�g��S�ٴ�%6鉶#��ί���
-�X�+\��Ua�_��n��T�����&h:PS*�����]���ݰ����כ��o�)�0#ks�Q�3_�vO�
�Kw�
s{�eKGᕭ!L�}���o'������B�u �Z/�:kjʹ�g^pM��jFmP+�M���1�'� 6֧��:���<x`��L�W�J��cK�Κ�pO2
WG��ݨ(
���zw���Ab� [...]
N����S�u�
��g%��*k�+z�m��S
-NiD��}��y����p��1�o�Z�6��U�6��C�.���*�
$fm�䶾1��"��nH܉Qt��
���1Famv̯/���Gs凋ۓ�ĥƜ�&A�y)��	f���C?��� w:�	�O/����T����l�Hٓ��
Jn�o���5Gh�����''�Y�}12p�z�@C9�j?
`���>��>��?�-EO&��/��o�0M�|ҳ9�>����^샾�+��?'ɱ���e/�OO�����{>�����L�]�#S

�w'ȩ'�\:�����W�e��������Α�Gw������A��x�o U�s"~�&?�]�X
��(�~Y�������k0����n2X�6��\��1,��
��B>��ˏlm���d�u�LȲ�����j�
��p���xs
��1�vN��*B������T�çy�Z��2��>x�:�Ј�@�C_,�ݒ�r/��^i�yᔲaڶ�G�nPĞ�:�3`G&&���f��ل�Yf��8-kC.fl�ڛ�%
P���>���d传���#W�U���
T	�+ /�A�3���Լ�q����
-J��֬�!�����l\PM��kHş�L�g
�4��
Rt�Bk�}��А�L}��^9�S�1{
-8�w
����6�I
��
�<� 0�}c��$oʉ��:�1ϪY��5t�"�G���Φpߌ�	j�������ݵɿa�..�ֽ��5�^�Vf���PR֥������ץ��>�hI�2Pa.%6
�
��9
ثf�CF6�6M�\�c�l�Ye!c��!{
`
�
��[f��4=�>BL��ᢦD�[2A�}��al)�7MM��d��^hA�Y�fX�99�>a��O�i
���阄c
��)%d�J0�[Ӥ|��U�V��.��\?o���5y{�H�[{*�.��߰վ�P�.
�ROixe�
��ʙ�h�9����g
_��]so��d����� )y����V�:dm
���ˏWx�����:Z�h��u	���
5�8�ϛ#^�QK�{d�2[K����k:n��^�9}cY��������&m��c��h�|�䨢}����`��rB�KN,�O��w �	�E�"
����Ҙ��J
-�?����m�ߋ�R �~4���Xl+~��'d�y�}U��
>��˦���L#�fk>�[S/��1?�Y8�2�*5t�"�r6(
�]��|`�_���
��_��9I)Z�`��
/�	+��4,d����"�=�Oߜ��o��.uk�S��k�u�tC�0��h�}�G�1I�]����s���w��:�)`��n�K�}��b} ���U���[p?4��k9�U)��2A��h���>ɣ���5Ă-6me��-E&���B��k��Ư�R%��gä�
�J&h[ʬܞcT�L��
�A�^�dU*k"���C����&�?
��Sӫ]rJ��4%{S�,ܒq��=�7�!z�s��
<�֗\�t?X�~�g�]�|��b�L
-��ω*�
llh����X�]
��O��`�&�1��Meg�~��o
���9�����7���*|�D��V�C
�j��ɫ��(�$6q[�Ͱ
�_��o
2j����.&\��
���sm�Ȧ�ݒq��3�J��	
���e>/h��e�w���o���'=:sU�(w���S�x������&س��+Ϝ�9�.�R�6$��	r�� -qy�U��6p�z��
�f}���>��uH� 
1+l����IbZxNv�|���=
-@�ꨵ�>^�2d�1�>�4�/�ϲJ�l[�Fhx�WV���%���\��Zᔓ
�gH��jʺ�
uk��As�@���CN�9
-��]w{'ډ&I=X;����=���_�{��\��	Q��K�ɰ��9r�}�	�4؁��ޫ�y_W�> ǭW<Qp�OO�?���']��	�N膌]�1+­I�1N �����)N��5�܃�4���nL�
-G�9
��<�$X �
h��Ir�[�9�34֯+�5e�"m�k�: ƱA�i�
�:) �P1[C�
�
�ګ��-�2�ZE�ɿ���9�ij�����|c�����{n9�lCQO�R7�=��[��8
�k��u�y(��Y�Q�3���h�
���3k
�
*�!��w�Yد�=s
�OǬsk��
%�.�A��zq`���g������
j�����5p	-�)%g-�a"7&�3��zW�X�`���)��O�#կ
3��m
���_o�}
--�	^%���z�ԛqg�"�`	��c�b��-=k��f� ��2�(>\i�>�5��4�����&4��]#�:��V,�ž8�q��&*,�#�������!��e�BK?2ҫb�-
�[!ۡ�Ɔ����ί@��+	�Z%Y%�jC*���[���2��Ѯy̥e��Z*�)'�{T
�K)���^�[0�>uS��
��>��ޘf�ا�%��<Ī����joX��(��q���>��@��
�W�c�R�U2�;F{��'d6��g��͒
��ţc��&
ͽ���Tlئ���6�.
=�.��8��qiĴ-�p���Z�%��n�X0���ϻ�6�164o�ؐ���7�,n��(��Zm
�|0
Q�ឫ:諽i���M~lk9���D͡p/C��<,,��	�֧�>MKDZ�E�Ŧ��!b�}���κW��踠^,���;
M]C��.�htHEp�\�_��+�Q�u�藖!�'��[�%k�ݝ~����#R=*zy�_���`��l����Z����Q��k�<�F6J��>n�u\\�ke'�{Y~���2�,�l���hǼY
e�l���n|�� �}
��9Z��P���<Z>ae��i� �; ��6�ܚ&�s����}j61����T�a��8���
-�VI=���Nݜf���,�Oۚ�<z��z��UԼ�� �����k�8|�؀+q�`�?Go��Fھӕ��[w��N)Nqw�,Ĉ{ Xp$�H�%J�'�����[����>���7�0s]�y�d�<��es���3��Z�5�GD�,)t{^�	@'�
-���P�⳥�x
�]3�
�KI/��R�V��ʋw�ϧi5Ǔ
����K�
�yk��+\4����ؘ�a6yu��z4Τ}P0/��X
�&l�;�ښu=!�%�
- �_��04dA�ᾨ(�6 :�Z� ^���Y��
ɚ���p��2�D��%wo����ѥ\
i��s_�+cn���[�֖���ڕQ~j���l�G-l��\���,� _����o�41
M�IM֩jC�
��N��=��JG�&��
�
-ԹK�K]
�e�ژ����M[q��H?��6��44oM4�nϴ
�̷���[����mtԂ�
-v���NYs����X�|�v������:�KG+�a`�FX8��V�:�Dn�5�N���'%e^6@{��[�:��TS�ץ6�ż�
+
�j�C�:z�����	�O��a���z8�&ؙh�-Zj��zb沅
-]�'-H�+ڪ/��;z�'�^�[���W9Ŵ�i���o�bW�_�¦
�4��Z�p�ZF��3�����c�6�]�fq
�	��W����=

w4�s��
����SJFθ�.��Ê���*����&�Z�3�c
}��F�
����լ�iI
d\�Z`��Y;K?��P��Z
-xY]
]n"NI�K&�}�qy'�)��-k[�s��yC'kN�Pe�"g���yUO�C�
�Xsgkʒ��5�S���g��ݵ3ʚ�%mQ����`�Ys���8״a��v�(�rz���Q�o�Bw,����)���kX�˺v����0�^�b[G�n�X�Mk=~�R
_f�O�ȩ�6�1��\��?r�3v�i�e!o�R�޴����ZI���8uo{��`'lq�ӱa��X��Ý<D����͚��cc�]
-R������[�}�l��N��m�5�VM��}-tEG�^BF�_�
on5qa�=��ymwèT��P4��]�:p�)
9��e/h���6Vr]a��)E3qk�C�`��\�v�M�9^� j6Z�,�mf
LQQ�d��Q?���L|�����V�s4�ޢ����vO���]�o$zN���mZz����=G;o��{e���r��w�:��{���n����� �Ԙ���z���q�~Z�SBH�zxu��Y2�!���0;-=3���N��X�pe��yNK�]4֢W�:{w�����6`�׭�
�����';��=�i1mAM-�ut�:��{ݥ�C&d��y3�;C'/�u��1I�f��L�p�ݶ7I��w2�k֮��.�—�u��@�0IBm����#�%B��א�k��v7��z�f��۠�e�ۚ=Ԍ�7��q�]�=G�p��D�32�↴�!F�
�	�=�
$�����nݳt�m[�Q
�R���H�џ�j�&ț�SZ�L\^��RZ����W�e�J����	y�(�#Խ��a�|\!iU��dm�tW��ZmR�@��Չ�B�8�TN~E��t��ރ8~��e����q
6��:�Y�4�\d��:ۅ6Qg�p�l��X{�2�5�3Jl쒖\�ii�_�z\ށԶ1�hkI�ǹ�l
3=@�\j��k��+&6���.�6שz�f˄�9�n�أekW�}�6OՂ�($៙y��Y]7k��޹j��
2�m=���F�
-�u
-��
9��Ǧ�II9�6v������k��(ۑvIKɌ��h�؄^20���O�b��;�5�A��]����η�*u\n�N(��rUuC���nrD��ߋ\�u�W,��E[3uаKfF���f���Z��j�f��R�7����� �rۅ��&q0��{��깇�d?)�/�A(��t���*ٰc3ny��f�D-ޛn�\̾:��Pn;�j��
���n���fQ���BN�N��B�����:^�Yȅ[�b��'i6
-9�1y3Ʃ&�ǥ��5��=ڧ�r�G�g�����)6�t�����`��^��{�y�l�-؟���t40�ݝSZn���?�n#;�m�AF�����7UW�dfT��USG��x�ns��c��T3i��[�j�o�A�1��4X3��ʠ,`$��0�2���p"�ǽL}F+i��P$�
F_���=uT�R��l��
�tB�ߢ��Ţ!�P4��Ù�5���ty��E
շB�
�9�
.o�k
	�d�p�Qa"�
�x
	b]�;�6,�ҝ�n����n�g��JW���X>׆ma
�5��>���N�dU
ːL%H���(� Y��1�_޽Ϻ��$����� I������j����5y;c�B��"��O��*#94i at o
?PΓ�Ȼ{Sm"|N#�Pr4|~����������MeL���DԬPڰ��i��
M�
�N[��n��m�9�b�$��=��6;L�ؗbk;&�D�im˘�*hl
���^��>�.NF��XUג2;��XQs��uY.=w���h��
ʚM2
�4؏Vqے��
�C��lA�P
�3e�D�����=q
lU� 
,�">�JB?O�����Rs�8���m
��K��EM���Mˀn[2��g��d�P
¢�T5��Yn�+Қ��f�&O0��@*
�
-ۯ����������07��!���i��W}��p��S1��a��3�L�L��X0���4"�B�b��K�{:%)=ݚ��zEd
Q��E�%�h!%Y�o��
-��o3a�@���	�E�캀��6��]@�Ȥ��d
�%��M�g
l��L}��,G�=ի_�
��rZƌ
�X�qD����Y� T&��-�8IK{�V���&NjZ���
��d�h���6(Uݢ+�[��j�X�`)6�*�}L� ^ƽ����%:
�{zrÕ�|�o��n_�����57��zL�KEWg�C��N��bӐA)��{:�v�ÕIo9̢4l����b��O�p�;	�z��܇����s��3r{~���=��
E�	�?�O@
j�p���R5WM(ZV��i`��T�7[XÚ@Qg=��u�S��~���^H�ffs/{�#.=vOs�
-�^�����
���+��|����6�����):{�g
͸K#Q'n�������`���l^Nf���͓�4՗Z�`P
e��=��`���$�OO��@W���R���K��Vi�K���U]
v��\�I
z�V���8�qdW���ӷF��]"�5'��C�MT} �l�*ʭ�� 
�{Q&�^R
���#�L
�v�
-S�$�K1�@\��4�Wj�"�0��oC5�8 at 8��gH��II�Ľ�6�[\&�����Ǐy�3�Z��������}�v�I��$�҃7�nށ�����~��l�H{F��f�PV%�Q*��u����٤�ó�(�/=�/G�c���H���A���}��_(�R@
�҃W%n�^x�L����*�#:A�A�!�Qt�'�0S��	�
��o���s>��vDU�������*eJ+�w�"�?��s���`�ׯR�>���n<�s�|����=��Lr?"���W&$

;�E+�
]�S���#
�I%�ܢP�j�l���/t�8FF�t��~U��y)��h����0ؿ菤$ҵ�譤�
wQ+�`E߂_0ס��"rW����1��o�-#;<RK�W#�)?D'Q�
�v{����-��
n��47��}�T��X�e&I�Q�%[��Uf~c�^2@�
��ޱBr�j"�vŻ���(D[��d���w
�!�����cP4��W��
�X�^f�}�A����_z�����}�۩�2���y-�~A��k���$�`�P�K�'��r`#�2�
W#3{~~Ju��
���M�[p�҇ ����Un/��nq͗|cZ~xĸ�Yw�*�ݓ0k�n�n��j�����L���'��J�����92�����Ο_�/t��]�CD
���kO��~�����e��� �ۭ'�K~_�װ8e��o��*���	m;C.��[�	̞U����]�*�؟��G��kofd�\���
�����̥;c��yA�^},r��(�_ �:��ΣR_�k&L�ג�ˑe7v�gb����1?ǁEw�~y�����!&���Op͏w�3/}
-D_� >�
��=� ��#\�-�]N)5���;{9Z�i��<�#Y��
����Y2�s-Y?�
'�^�V�ng���|����KХg�n/���^zB�<C?{F��
���9�D{N��������Za�AyÄ��h^˄�D�(����f��'S;S�̕O��?��Y����!8���� �۫wen�o��ùyŲݞ�~��Q��+�Q�ߒ���9P��
�8c���X��ĻԴ
�����=���>
-j����G�ʱS/ hǣ�����]?���p�@��s�����n�
����KH�
-(�ܦ���
-D��[�!:tC�T>�e>ɜ�*D��G�5�

O��C��G��_�}v{�Y
-�����?	��/®�
-�\HZг�)5iTBI6K���:��a�6K,�1��Q<,�?
Lj���WS�R��I	M��J�54�y��T�罗t��O
0�攤�
��5���
�j!+N��L�*�'�qt�7�����Lo�J$���(���/�)$��sTJ���٬Ye=�r�⇕X�
:������Q�W�-4��:qLZ
fV�#��<pw����g.�m1G���O"�ۮ�D���!w�/
���K�^g�y��.yG��
|(s�
p�g4�-2��Kn�����
�.��&k"-"��+O"Qa�ܑ�:�L1���
��},������%��z�y�ۃyn�?�ܞx��}���������sVN��d����+o^�,X2ЊU�8?��&��T����j;�I]�p�\hZ�.���aq�~F�,����� ���a�K1M��r;o����"˼���X������a
ƺ�����t+߮�"IeFv׀�V�3������=�n��(��+x$��HȭuOɫ{�`�+k
!�ZM at c�$T1�+2*��Er��Y?��f̫�N9!�.cf�;�q�^Qn/���"
 Ԋ�"�Zﴒ�'�I�^R{�����p��Ȝ�����9ؑ� �蛬��Zmf�t�a�I��
-Rʌ��U�+ܴ77:�]t�b��#�њy�J�h8�v!�7�� 5|7�P��K��K܌s{�
-`3�x��Jl�oG+/�*j/�1�.]+ެ�s4���T��穊:9Ƽ�C�I�#��"��w%pѳ���?Cbpw�2��Wr?�3剆�a�\-Z2����ƌ�W��A�c�
-_���P%c{8���^{��2�YM����{�&$�_A��
�^���X�<��A�!�(K��>�KO��J����aLڢ���"$Yy� ��9G��2e��'�����8����E �����x�����y~��Ȏޞ��>~�@���,V�\�~궥�|4�į���zܡ�ﵨ�|�z�-S���ma�u�1��R��M\N�퐸����~����
��)2�釈��_�@m�R��7+����q�I�k�4Un[��a
h�@�쌳���N�@?;���ķ�'�
Wg
@��+HƷ�ɵ��>O���E��O0�җؚ?r�M�p�G#U��ყ���)1�EK�w)�E��̘��p����(J9\#��G��hK:xrpk�(�͑%л�)���rD�;���d���}�������
s껰�:���eV��|={BA�0(�4�ZѪR�e��\	�;A�����K�	T�<���+�AzzT9}fR���2��B�]5>�*F΂��8܌]64 -��e
�tc���6ʮ�1�3,ʶr9 [...]
�b7-���V��
Ǽ<�;h�
-��2A
_4P�٧�j��X��Tr�5�jFa�è,�GZq�g�)�[��u
�������R��X�r�H9Ny|B�Uc�����]�)��(�.�����EɂU.�]U �UVj�ˬ�\�� �rU��3u4��v�X�sbʢ�\t`�gm[kQ�C�<��1Wáǩ:ɑz��]<0X��ӗ(�bGعfy7�"�A������m�s
i��L>o�?q66�[jr�xy��
���!bꌔ?��/vj�0#���i}
aR�I�)A�
U�bv�SY�NК1,�U23�e�h���~�$�
X�Ƕ��������Y2|N�,]���-��Iu
�.��6K�zak���?��:�R'�#�
T�֗@
xK$��`�zB�$�
���^O�Vܶm�6����!r�������9x�	�=
K
��9/
}H_�X��
�.�V��-Um|;�R��[V��V
-�]#a�O[Z���B�^,%;��E93g�L,�5� ��ښy~�SC�#kG�=���Ø����T��R
w{l���8��7�k��
�5<R��C
-�	��#j6��lf�;i���ƎSW3�|��y2��9�e'Nb��
_0�$��غ:�z
{���ڛhi�
ikٰ�i����
�li���h����[P�&
o��J_c׭L򂆒�f��c������O�#�����w�VJɂ�^䔢"\Ce��FrѤ�
pz�@'=�l��u�&1!Ĭh�5vgL��y�|��n9�oر
-7L�ԣ�Z��b���<Ƕ?���2���<���9�ᨆ�
Vv�T�n�\�hȴ��Q!��
-6hDGJ^�jj9p�7����c-)�8y��Ғ�Zf��6L��YQ�
-�_F;s�
�E��u���}��7@�����t��u
-�Ǚ�MUY��~I
-�\W#"�t��y&EF�x9�W���vdF$�
c�v��GvRņ�\�`�-]��_�>���D��sW���[è��b���\th����������	&����:��#��q����)>*pZ���sk����%.mA���6�
-/fH�!"��Ց
��ω�}f���)-c~�&����>�x��B)9��w�؋\���z}�Y��`�����).w~
9�+���!��bBԤ�
5&�5��Ȩ)�\᪡�e�D�XR}Y���i�G#����V�Wg���bΔ��4X�g��
���X
�5�E!��Av�{j-�f�����n�X�ZdY[��gƂ�8С��'<s6 �N+Y��#G�2^�)���Lс���
�VN�ގ�"��)zÁ�^���f
� �;0c��
�#��5
,dU��8q�0��h�
,�ޙ�|�b����˾���,�7� M�)Y)-�|�Y���G����j��4d=��+�p`�f���%5�o�~���go������4?��ћ�|�����NB�gk����k?�W�L1�_�̧���+�/ӝi�
���]�^'���b�`w��:��b���4�m�վ���[��̉R�������x��IR�߳��ݱ:�KC�_7Ӫ��纆g���	s�H.�V��&���N����k�T�X��\�1��vZ��wj'!�MЙ
W�u�}x�_�jG�K�?��LIL��"gn�jbwոԥl�:#�����
����Z��2˩
-�¤����ǖ����b;�AK���M�����`�~À6d9o�)��w�ȸ}3���ZOXא�W���='�o"�-��ue�Ϣ8���G�2DȒw:J�<������--,nQ\�3�W�~Y����gO���F;�ϖ��aEܦ
-
�!���H�;ߝ�p���c
��%6�P�puy�;L���	����EA�Ϧ�:�H��;Сb]�2�ᆴ["t̕
5!��DC��
����
Y	�==6uW��90�
-Ƅ�����WsD��Kc�d���Ɗ�$bc(=��D
�Њ�=�Rˏ-
�=Scݖ�ᒣb֕�~�&h���3Z�s)�2X�	_�*+����s�h�p��@C�u_�M�,�ge�JT����k�B�T��bٹ�
��c��T��CCu̿����3�5��
n$
����Y�}#���
��"b�5�1{&tʶ
����/J���
Ԛ�,��
-K��&
_dAk���
���
�_gXl��*pE��?0�Q��E�(�1{JX̞�$.�]��ö���=#	thD%�� U|���N����=i�W�����^/
-�<��D��6M��k���C3��p�u��9���7�Ui�ft��̕o�u�
-:e����e��P��&���r{�$bk�;-��o����馮\-�����]G
m�N��3�䟎���Ē=
�n A���3�]+��Y���K"��5q񧍋9:���2ٻ���-eu��
�l�����|:�0K��H�:b�\��~�%q��U	�oe�8�U�9�S��P͂�4�X�����4�ܲ���N4�<�D&���*X�� ���8�ݡ�"��x�;Y:�/
-�� �T�ub%���(��_?���(�Ŗ��O_�th����q�
-�=

�p�u"�%,�������]9OgxE
.�m/,�ƚ
�#C�;�R�jpaW�!(1aWǛ�
��n,���L
Hs�XO+�S�6eUa+�����w++��hS��Ɏ��jb:u	8�͡ʰ=
2n]R�9P�*�
�1�
paW\h��cMMgf"d�7��Xk�������F��
�rb���193
vLu�m}
��1:���\u`'��oF�0:��V�� *�8�-~�.��Ʌ'FD��P���ٙ���_����1r�+�������N.�6VG:��$�i+#�4��ui�ߦ�=|��c
zF�[�T��
UG
�ȥ�f\��� p�?�}�/�������*
ZS��7��O���3
6��1|�g)�
-<'�����R�:����-<b}��gS��VU���P+�̈́�E~���	��Y��@Eā������,
-[��v��gVd��� `����t�I=�Qa�vdƾ�<jC
	p� ޻d�
�{hÁ�$%��&1e ��O��������ਫ਼l�
Mi聝Q{:Y��6MF��c��g�����f;T���l�6
-�ZU@�
-?m�aa ���&h�e�jx�	Stl�̸܋
`�
��.��θ?ڑ�dAP鳭 g����e����5&jC������ ,p���to�
xjd�WE��=:��T���@$7�ӿ[KB�,U1�
-D�l�33��x��&�TX�ak��1�����
~����x+d���H�7O
x��cX��qt���"bMz?ݑzw�%���
4%�GOv��ْ�—EU�+Ҋ�5YUȚ��w�~1�U�)%$��T���~�,*��b�e>r�e�X������ZD��)�� 
}��"�]��
oK�7�}�ˆ�6�Jy�&�|>
F�� :B����ޒ�~>A(���J0��ɉ3��_�/��Ӣ�7 N]�_�"�6���
5*CA
-�SE�tc��}������J����x��e^E���s'�k��ZS|+N���t�
�dCQ[� "�zs�.
s�o
�
����!�� ��;� ����tsY\
p8L.X| -�Y�|t���lJ�>}���P8-*��S�����'�Tؾ� r�K�
m�O6��;��
�!_
�RK{���޼��
T�
�
�ZΑ�:aY���՗�xS���|�m���
-��
�1e��e0�=M���VGo

ؖ�.��xyC]�(��u�WCc��g�������b?+)�p�J�����I��w�=f�`��SD�
���SsM����	��/�g���Q<|Y���52�����qF���P���7��A���5�����{�
�ʓ|������*8� ��;1��T� ��4'��������~2r�Yp��Ĺ���ft����E�l�J}�
?��D����_a�'{��'Z
��4�
Y@��]%
.2`I�Y�Bm��۳}%��e��mEu�K��j�=��xK��E���
��Ĭ�W���vT��
5"bKQ국�w���.����oُv�$�\ɧE!�kU��QW�
@>,��u	�bb�
nU��}��jRֶ
-����X�RoikB�X��O��"r����7���|�S
���:ړ�Y��t��k�Ƽ[CT���z��6iG�I���w���zR"PG
�*��_�7����UQbmJ��%�
-�:iCZ�~�>��,'�Ú��w���>�]�sn���Tt�&ڑ���ʀ��Ҡs3"�x�<|U����yp��{*�n��`1�.r�t�/��{���W����5﫢���~24�y�� ���9>�*&��7l��/Ҫ�_W�S0�s�!����M�A��
h�S[u�4��tW�=#��U��ב渻�*l������R����H?5
�TW_�=9��7==���kY
-
��W'��f�<
����o��o��
)(pW]>ޑx_A��wh��^���N}�.-�ZW��J*����V�`1<D�uV��O@/'��s���������}�Q����* ��glj�C,��w&{Ҽ�o�D�6�+���ŜBG[�s[C�㯓d�)�g�
����t�l�F�g�Q�����IҞ����������#SY�(xc8���s�_
��b����к���\g=31���*z{�ܘ���A�3A�Lp���VJ陕Tx��|>�`r ~�<F�,
-3���C��|�����ʌ�:��|UM�\�`�Ĉ�^�{SC�3c]�=3��dK�&��R��֐~W�NZ�#�ň/���0�66e�> ンhͺ��|���!�����m
��B��}�.��7��2>2췱�_�fA.>䃳#�� >�js���`ϟ���S<�'Em�35=�邨2`�#���H���H{bcg=
��\�-
�<� �V2�^��o��
��U1;rd��!sCO�VCB�Dy/-2/B��qi�\���c�K�����y�6$���şL��krT���~[�{�u�<�"�
-�~�&�c��J��py'fb�
��^~�'k'�q�1;���me���=���=�ղ��q|�wG}ݶ�&mY
-�_`"7E��{�<�Ua��yn��d7����T��aV�t���_�L\�TW����q��.pk�}3֖��ޑ�zG�/���d�s��f{�����q
-��vg<^_�O��kI8��>63P��ܧZ�m �?=�*�
-^Un�����T��\�!7՘d	.�+��nq�e56�
��i.$pI��l�
�O�����N������o
5ꁑ
w�LO�e�'�:2!�� ��}5�o�����!B���|G�4>9�O[c�U#=�ME~ؿ�I�M-2��L*��+�0�������Z�� ��hK9ӛz��V��C
-4՗ᆳ)�<oi?kn��
��d�
-x��U�oA^�w8J�~�i
8������]-4��P�����<M��1\���] �c�?
�u{l���
#c��u������iN{}��K*\��������Ћ��/c�Y��a��P!��Y�g{�?�$���{X��['�Z�.P�K�j����gF֗��֔[����S�`�E),�֚�f^P��~�nϼ7Ӓ�x�깭�G�vg<S�����QrlM���;�+(i�š�Eա���!>
2d����@NJ{�<��i/��
��S�������+㞳���*���

���Ɨ� c[�G���#��twڃUq��]me�h�]]����悐}�sNtfy,�����t�.�v�3p���.X�U9:�� 9�z�!�y�� {��⽜�/��Qw�/2���
Z���R\��c#�d߀�:�T����l�*� {�l��xfj�z�Q��TR�� �����T��	�s���������W����kJx����XS�Sg��Z��x�;��)������qv�S`�_
	�u	"b�=穣%閳%.菉���K��YQ"�
-���
-	��<Pub�f8=ޖ��Ċ{1��.�oOO�XSbS�I75��m����J�q��d/����l/�ʁ�<:
!��$�*J�-)"��\{��Mq���@�Ϻ�,��4��P}~䶕�\��#���'fV������y>�{[��{
Y��YbI��
&A L�Ãx_VÃ�lLy4֐���N}������jA�P2S*6���L��q\ၭ*rCU쵥-9
����j=��׆�B-�����)ߜ��-]���
�(N~3ߟ�~dŕ��1j���#3�.�X�5��hNlL䱑�h���2B�a��u)*j���.*��ˊ���ޒ�`�),h���C��)N޳U~��W���[/	`~��Ļ�ƨ�+B���
-�|n�W/��)����s��%!�T�ycue}} 
pE����D���«
-��R�t��;s���d��x�w�uC^�w=_��#��s�PA�6L�pC�������1���F:�>L�U~9�4274��
,dWI��
ҡ��J�
�}���r����~[jj����
�
���B�}�;��H3��<�*d~# � XwgO�J
m���h��6�I}�l
-��*H}��(�;��m�
-�Vh�53��GS��0<q�;��T[���>�9nѻ���Oږ�E��.�~y��6��Z���+	^�O{3�
�ƅ��<L
�c]U�\}������G�}��P��y0��i�
�)�}�q�9��\<�+���~�
B��9sW�L�3 ��:	sp
�q���讈�7�	���L�!~���%qq̉	���"��L-[WV�����$�
²�E
�dT��.垂
}c�7���Ž
:��y1�[�yS�LY�yL�'?�l�|8��}�./�9�z�J�:9��v
�Գ��t;�fG�ܔ伛�1ݙ�j[����㳆k��H��זx���'�g#ض�2z�
��ޖ���}���E
���.Em�DOɇ=3"�9�?.
-�?
d�_3��}
<��K~<�ykU	
54e�:�>����kN���Lj�:k k
- ��G�+�d��xl��n
ab��5�[J 㤥^�dܩ	���!g/I��&&lu
5�Q�l���}A~5�u�Ί��#��
�+��J޹z�^g&Zپ
�%�o*acmϗK��`�uEu�����[XY��o���7D��}9!{W�Lsv�u��<;0`2v����A��eYU����Z�~����	_V���z�k҆��Az�k ��z��f<t�
�m���Fǜ؈�k��5Iy聾7ۇK�j��2�e<PBo�Q�O�,Զ�3%���9�w䘄@�
�p�[��KCΣa豩.���*aÀ�]��܌��6���j�U99�OT��!j��9���0�m����b����k]��>�4����>X���쓶�ģ����ha,hU��fI���%���7h]T��@S1#(�V�R�tm����Ky>^�`�#���_��{�i��/f�
-�1׵u9�Gf2��V����G���<����9D�hj�zam�|�7�)�|ye��qn�%�ug��d����5�ݟ���k��12�S=o���?���Ɨ
�ȕ��sܔmɷ'���
�?�I��t�#n��z_�V!b�Ĭc
"fKY� ���T
�*Žl�{Oi0���U��SKU���2��xM�IRժ
gm.�P�S�o�	�k���%euȬ��SF�x"�G���V%�O�j�
$��`Y��}oU]���F�?.
-n]]nj��3ޙ䱡,�rb�%:�%���~���_�o�����Xe�6-�v���z;7�H
!��O�
-\��0�k�@\b����-/�?��"�U�!S�)�f�3�g�
-^��և�)s�r�Uq��� ���?2�v �qv�zhI�W�{ ����
=2fS^�e[��v���n)��{ø�]=1�b����xE����R��%g:�5%�
��]�U��jb$?���sV�؄پʏg�t���`�T�����:2� o�)G���4��>���Щ����R醢*dY
~�1X칣BƮ)��\d���C����
-����S3�|
�ޣ��/e�ߏM��-
&}��
-"nNP2�^�i�����t��#�`	w�z����]�I�q�"��L���fh���R�_Gq��:x����kUC.��R�g��h;�䝂�v�"�h����D/�7vEV�}j�"�&��YE�<�[-=��
����@և����͓1���� �{
��oc,���Z��I
��\
�<��n���qf�!w���jzʳM%*~g_�c��
Z�^V�Xے=�M�
��'g���"{�7�cIPwb!�M��}3�to���?��®jiO7Ԕ�Ł*��֬g�uI�gz@ =�ul!lj�I�����,�}#�xI
^��mI}�"�ޝ�Hq�6�}�&�LJ���g[L���:vU	[� ~!x��譱!��8'��0�\B�F֧E�`�R[��'�.���p����;�&D�����A�ز�ҷG��SDԡ
Wq>NB \����͊�����mM��
-nYR8ۗ��h[v�`0�fX��1
-jAK���\x�ʈ##<ཤ����K�2����[�論�϶�����;ˢb��j�V���%�(���
-�M��
x����4���ib&��,��x=s�"oL�O?�26EՁ�*lƉ�\��F�O�@�L��>�P`S��X[S��9N�{��>�v�N4Z��
h��kRx�����8�jKW�=�Y��|����rf&������j���؀�������f��\۪�Uii��0&cG��^�\OK�~l&�\��
Ntd?\WT�/ˠ^S܂��-Y�NmĢ:vQ�����<��r�e����}�5��`SIm���)aU�t?<h�Ȯ�7�4����Z`0NG���R�g�f]�ΜQS�|f�{)%��ݔ�$m����C��uyUĪ�"`C?��bfĨ���R�龪𱮒WaĹ�"�9Tљ	�w�<��-:��h[zlׂ��:�/�1VĬ��u��_/ށ
Bg�!����q�/4v��S�G|�8D�r_M�{�>����[�R�r��ZX��8�t<JF����fR����RV��__��Z�c��9U��eT����`�R|hD&���f�����tb#���Βc�yO�I�O�� [...]
-S
��^�����ڊ�AR֚����j[V
�������㾏 �/zjC
�ܳ֡��%
������짳�l��AX����͆/�x�dSO��30J�2֒z�֐xsi �q]U� (��N̲�dn�[���ki�-��@M�����ʠk-`�k:B��5�ݑ�V1�+y?ە�����8)ȯc�#Su����~5��,��[GO���G$����S+��Ԍ��
�
]��wv�߶�E��g@� ��mj-{3Ńm�0�ƚ�S+�h[}1�
�ԑϦ�&��TCÎЎCU�k�*�uI�ϙ�����D�I`;�|NRr4�%>�sO��oS ���N
��CM�1�
��DȘ�<hv ��u�������K
?���^�s�=��ns�P'cL�����H[EЎ����ovr�� �~�"�?0T'���~Z
���$�k�I�� V�Za	�����������������g6nk
-����3��A�v&�x��9!��uձ��Meľ�o��)�3^蛲�L��#��؊�O��M҈kjT촰��"K�d����{�=CMʮ����3��I\ّ�7�+��|8!U�)qOz���M�f�\(��c�%�N��g����@�85a�~4F����R�/�߯*q�fZٮ���� ��i�{�.d�KYY$ĞzxG
���\ה��Z��g�um'S�Z;����vֵ�d�D�>KeZ����̙�wI �����h-uQ��Сw�³iqE��^@�o*1�@σ 
�
裔# ��F	�|�5y��� ��w�j��c=4�Ѐ�;4��7U��=>��I��Xѩ;����AЛ%~�5IɧCm}Ց����f at g��E6uC�J\SU���
��7�ƴ{V��
@םٙ�&e���c��H���)�G�u�|�Q c,�ܧzb�uWO����u�m,qV��~Y��~Z
�q���S�
-�aVڭC
��l�AX{�v'�
oM��./���V�Qɇfbẖ���"$m���fJ���^�ﮯ��9���%.
�7�˾O�R����
����бֆ��VVԵ1�횼�w�
z{lC�;Ȩ3���̨8�!D�I����wm��[�]�OόU���Z�4
hnʸ�ߧ�aTҖ
�3T
�&�|^�����j�
�"KwUP[Y��;Zt�?@�\�9����N]�x����7���M3��ޫ+�,K}:]]�+�uV��4ʬT���
�
�{�= �MJ)��6���� �
�̪�s�Ž+��9/�r
��q3G$�;��k�����fM�����9�m�,�`c�%koU�4D�'.)�N���k�8��/g€^���h����B�<�&��~R�c�.r������%��A)��1��6=m�����S;S��>"/m��A]z7��ۜ���mO
3�6��rI�������Iʭ?�_u_�Z��nH{�˃�_[^!��
-��4\jHͥ�\rP�E;�Iim1co��4�f�٤���_��콏�F>�����+c�z��=��is�Y��p`�	QcOozmpx��T�������iZ�g�_�J���$L
t�J�ܞ�l����ZB{rM(��`sF �
<���=JnEN�I	ׯʬ��lu�@�n�6���!��JFKT��v��o
_���度�-?՟2=�<��ypܡ��nH���I鍙u-��f�
�^�<m���
Q��o�?
�Xz:�='�n���X_�O��?�e��2��_������O�95�5�T��sJW��Eۣ���a�-Y����_�o
-N�g�!LNHJ��'�Z�Wy��HPKsU�*?y�<�����������Kv�D�{l���w�R
jX��
�w���i�_W�7��� )���c���QL���b{�\
T�V�����s�!ni�����,��v��<��
-IY
NR�k6�[o�
�~���on������Z��e���i��	\����+�qh�s
��(��7ͣ��]@s^��}
_;ǻ�w�[ϸ'!�S�;#�|����%��9��u��j,?�~gz���y����]��%l}��"$�"����
>߫�+��9���X�k�޷�ߓ"
-��a�]����������ޜ���zPM��-bJ����ٞ�cxR���
�6���w��Ҿ�O
���)�9 ��9�P��q|
�y&tk��
�
<]��U�_⮯�'�_v^ޛ!��4"vP��o�����yA��
Բk#Ы����\y@�h�����8n�
�N���)�_���1$%���0ޅL�%Z�O�/ٕ?����Zhz?
���{�)��/p*�"�
td��"��|N�x���,kJP��GFj��!~�^�Ƭl�G���SR�#n�Z��>l�Q�f&�
�J�|��_�y��|RrEP���_@�'�����&�.z��qumw��o���=(�Tї���ݧ �M,l p��Z����Y�Y^��Q�a�RJr��
E�y����Q7f��;ӂ��1N��{\�:��Ρ����l��bs��6q�1}��3�o�
%�m����2�h��~	=��~�9����
}g���
-Q�B��I����۟Q�����懘���|�1˨�-
��eV��P���]�
�
�W^֜tMu\�i��5��BP����G���b�>yQ#��+%U����[yՑ힣4mM�kU�����0�BJ�=�-p� �k�W~j�_��s��_΃�GX��{�g�?!K#r!�9ϒ��>����N%)�����s�$��G��^z�}^�ߑװ�yh��I��ô�?>G]��iF��Z�w��U
-0�7��!VşT�:�drT+��
|r at FnZ��� m�3�<����7��K�U'��*�,`j�	�!|w
Zꗡ��ǻ.�ghXHœ���j�t�B����|�"�.���&p�JŃ��f�s_�T}�5�y% �3(ew�U\L�$����ۘ㵭N	�7�
��3�7=
� �һ�∎�?�K�g��
�0�|��ҵ5
+�J�w�2J�O�E��a
�*rK��c������L�8X0W?�S�4�}k��fy
�h9��:��=8����Q��`��۷2�Q%	pm
-�5���<m��6��Ա�!
�WS�BF*ܧ"�E����]$�٤���G�j�Z&��ջ/������嚣����Y���zK��۷���$���7޵��i�T�
�zs�|{g�T�7��辰;�v��c�g�{9���y��L��w���w������BӐ��0��~�������'��_t^�,��
S�.�_�
��+�}�6=k=�_���/<{�;#�m�on
㮻��^���9�(S�}�U}�;��
��TDT�u���{�ؼ�����o���x���s~%(gm$ �5�k�V�3�}޷�+
����J��ۺ�ko���o�r/�������gc�e!vw��Za�cf6ƽD.�C��L�JV�7V�I��Y�%�!�	+�X�
��=�r�݃“���A�"��p|�A�0���M��H
�9rsRMl���M at 7��_t}�=Io�.1�
π�}�Y�m�N:�tn�☔�
R�;죘��!gW�� ���CZ>>n��j|��,�,i��{=}�a\�t��Wʣ� W
j��4&^|�����?�f�7S6j�[Z񟦄������w]�6�qa�m�9�ï�T��G��
{��
z�?π~���'A΅d�*��k��s!K�e�U>-h�������X��C2By\Cj����ko��DM<j����2�+־l�.�e ���
l�H�{G4T��)5!�+��#���H��e󳦯LOk�p��K|rb=�_�#�
��}2XA��@�.�*v��N�<n�f{��S:|&�'�*;�R�kxV at 7�$��p����ܧͬHi�)� �yxP�a�>��"r
�5ǮwL3��?v�
��\�������+�s�%o�yRY�O:>�1ͨܙfT�6|�(��[E_����l�o94Y���
�����Iĕ�����M ^��0�,�W�Ò�����,�1\�B��8�po���Y�{�U�_�bnM�n}��_v'P�1�D�S [...]
-��x�u6��/6?+�J3X�o�yt�Gƅ-��>��ΉʹP����hH�^9�P�c�'�'%�d����$b������ٝ��c+�:.:�fBC
-z��E��9n��
�ŧ��8�E�%b��TQ2;cz.��L,u�
-]ș�j�ok
}us��̢��w����%lB~\'恱m�
�oxe|�O&����7��V~=J��q��O�Sh�������
4���i
#N�.���]g��;����W_��0�1
��4
<tΐ�7&��q��7��3�0�#J|�s����۲O=��Rp<dX70��衭O�j���{���q�"6rwU�^F���>%�;�N�k_R1!>9X&U&4�攁�ۙc��_ �W%l��6�5�w
�L/O�_�_���k��c���X����s}Ե	J��I�u�sH����\S���
[�ˆ�? �y{Y�v,�:�ƾ���
�)(u����[��5�5m�?l��ښ��+��Om�p��+���?:0��َk[/
����~m{������U�&H����"�����큝'>4�aiw�g����x��A#��鿽2����+�dK����������"K7�C�T
x@�Gx�x]�f��(�}�V��Y�yX���A�=D���mE^��9�9B��;�i�!ݶ��]u�q)ؐ��G 5��t�s����48��[#�
���7�y�'E�ԙy�t��]�#���w�g�3�€�۽�q�9M��xlz��E�>�r�i�������Yۓ�������*?�Mcr������ڐ�	10ǾYry`�Z�6	���M�,�Rt~PE���I
q={4F@Ɇ�-q:B������7(b"j6�1
��^�]wN�s�6�N�9��ejMXEo=0s���P�Ή���e��tHT!�D���
c�oO33�Գ�j��!r= 
v�!W�~j�!�1��O�:co�\r�տLk؝F���ŠA�U��O[^�����%e�L��g�5A�#y`�s�j�>���
T�־!}_T'��t
��j9whc�Z�/c������)z�O=xwO>�������A��Q-�� fHEm����D����z�A9��1�u��䯖�
��
-
1���8d�&�6~���;��2��a
��
-
|W�C��\�[��e�>s�.�2���oM艹��1�q�I#
�7�z3�&7�2�*�s���]
&�ܞ�VF
V��B%�|V��e��
�[J�c������i�\�_�G�z��9Q5�"jg��7���Nq�v�i
�l��L�8��Q�9���Yݥ����Wi���y�^�s
����(��
-�?ul����]�0����2�2�1�m�W��uɱ�nr.	�v�Ũ�FL�*Ex��ݚ&�o��.��8���ڞ��l
s+��tL�� u��'#W\�sL�
]S�F�,��1�(wN�
-\��a-�ί����bs7�C�IE�X���ƛ�B F
�̊Ll���L�ĵ�ք�X�[D�o��.��B��'����
�_�+9���"� �����o�N�F�ϸ�ףzܳD,ٛ������љ��}�
3�
��kUG����L����Uq��S�
bz|�;}`e"�
-R�{��Вb::��+�%D�wz#�f#�a���8�8��p ���S�1;R!fm�p�5��3�u�Ivd�ܐP�2#J��V�<�4as�{0㐋�o�^y�|fF���@�_�Iy��Yf��=�NX=�7���4�ր
S�:�zvy��/�ٶ+q#�;�"ubXǧ�l��s��]B��/�
w�;.n�v_i�����aX'by9���)���3;BRR�W�6�r.s���,�O��B����͛c����K�f9i�2����[x��,�����=� ȑ�^̍Z{���N�6N����q�ga�����1K�@8��JFkޞ��K���}��'a{4�
���~XA\��{
�ɩ��1�"�yd��0ȓd�
��é�%.|o	W70)�����a���f#��b���G�
�ᆰ׹��U?��ڻȁ ��:X�K���⇵�v�
�e#���_$
-)f՝���Ys��;�?��=7 ��<A��}
�\���Wez�ۣF3j��d<���ͽ��ؙb׮�P����e�����a����]�
��ky~���W�`�e~�O�K�+$`�Uvs��kD�E��8����]�
w|c~
-=�#e�V+�QM��cF+�3=@C*|�o	
pu�bл�j��X�Q0 ��-�+>�
���1Z��s����Ȼ�h�ʹ]�EfC@��x@
��ԝtL6|�^�^u�C�z�1Q���Xx�Yktc�Z5�I�9�u�l�
b
��=�g��t\G�ܜe5�N�o 
o���
�Eh^ڀ�+�śc��7@<�~άi>���k�Zμ׷�^�����>��vLQK�R>n�ؙ&�Z�\@ƀ���v0'
@�3c���{�^�������@�.9[Pj#j*�5.�`�E
-��՛��
3�¤U�3�(!�)�`te�������l|ȱ
-�O����t�sΑ��7�m�V�yP�*
+q
�\ER��<0	h1-�S"�����1�e�A�<2L�W��ƭ"������-�=��ʧa�2���
�O��X��]Y�A^�<=���o�}W܈!�nӣw[���U>7����@�/�+�qE	#����D���ۀ����o
�u� l��
rv���hOJ���������~
-�Y����K��y�;������a�2L��
�����JZ�>���z����d���bmPC�Jژ蠎�����5��x֫ ��b҂���4�ev%tlD\MoK����$��[$��AD��x�=���$���̇�}�`�b�����>���_l�4~��J=RR�OJ�M�Õ��+�����
-*� �>�{�����ev�o�X�_�V</s�Q�*>~��
�R��Y

���
-����j���hmy�1���.�j�~U��!�G�W|ˤr��[
��a�5���Ӂre�$�
h�
���1C��s >5� �6�(e�w�K�L6�i0�����ړ��ty��f��ҽL.�H�իc�k�%Zu�  '�,��U͗���ܳЫc�K9�b��yV��
>+
-��һ6�;No����/��necL�Ŧ4�c�{9���a��P�`+4ȁ���Q��
��JoH��2���ޛc4
��?JY9T�B�U�d�����s�#��<����5!��
R�aq���\�/C��- s6�@��V���u���9R�O.���+{!W?zC-?�_ftGd����v�0�;����aXvX��9�]�W��i�������:
y�BE�T�R�Lә�������{�2J�ܣ�n9�
�6rq�@S����7�������>�)
�
��@�y5
�Dv�$��,B�)�l�{�F\�s��L
-��
Q_�L��)�M�yt��m�e^W�/nDI­�n̵�l�[rE���pI�O�Dnu.�n8�v���I�$����ħ`c>l'�\nXK�t��
����w�(�3���a��t/�+�j�dȜ�S���yZ�F'
j8+˄
-��0�L�G�.rL�_
+	�
����5�Yd��U���#m��zb]�Bj9�;�\�U%e���De�.�2��5G,�,s�<K�fp������U��X-���λg��-�#l`#C�����΅>�� �[�\�������u��_�|�_b�^j
�qg�Ӥ{���~��5���#RJ�o�Ҽ5�/v~���6�ڜg�m�
��1z}\� 9b�ֱ=���[f�{UBl�,�u,��W'p7��)��_��"���ꘚ�xOg`�^�R�Ȯy���iu[c�k�̽�E��ٝ�Vo��n��\HL�E �qs�u�w�o;.x�WB
-T
�Mx��F�:�3�	q4�m�b�͸��
Xf�8�p�i-�|��p.��P7�awp�A7�I��޻^)�Y1XqB~��k�������
zvg�P��#�7�lI
��̕7�,Y_�3����^A���4Z^5��9�ȍ����O�8�C;�s�&�.ӛֆH��_���0�)l�?s�_I�
-*��}3�jؽ����S�Z���	K�������a�`{�;ko���I�	k�C�"��Z66a
�
RAr�:LiT��v/�nm�ۣ�����1i��W1
��j8�����0��t|����
�8ŏ�
|��u�`��c�WE�	����i4�h�������9BY�.�,V~�9�}'n��>�8�_,4xd��m����==�$����S�11-�5a���U��퉖��%d^X������YP�KD�h�Ȑ���]7L��1��\
-���Z�,�»@�>��P5�Ȼ�v~o����aVy����B��,J\sț~9�ݽ��
�<
-t6�U�o�Qg}�q~w
-U�Q�SV:4�e!σ�J�P�JLt��X�$�r�
>G�W��c��\`	W�!��ɸ�[�B�ꔰs{���� �Yl��U穵a�%�]p�FH�Y�V�,�<�{`�_Oz����
�s�cxZ��g�\�
-II�����'^d6y
endstream
endobj
135 0 obj
<</Length 65536>>stream
-�������y��9�����$��2N�9Vh
�
�6(=s�ڈ���_•�
�r���W��0�A)�#�\�"�O�6�w\ɱ%a�( C���n;g�E^e7���q�a
-�oj��-�|
���)��_L
���o�z>ug�Z�K����q�Q���u-�K������4�GT\�kV�0��=�=ά�,�P�ElYT���.��l/:����y�����y���iJ��`�ǀ��Tt�c
��ǖU�Z��X�Q���
v�(�8�(��|ArEԓ��=�RS�a%�!���Gu
t��`2i�|`�
<�
-��>#�ࢢ
6�5 �V�u���q+���T�*jhgB� ��O���#!3�4RV���2�����o����E}����ۺ�};��w��'?�,��
����1d�\󤪍Q�u���o�ǻ
-�2|
��q
>�[�}�#?��!���v�X�y�����
W�Y�p�{�' V�B ��*J]HM�WU3��g���1�\s���Yb��^�2��?�9�+Lt�@m�Kɕ�%f}\Á'�|H�l�kX�����0`	=T2Z�f�WFs�j���� �P>�cusS��[�"�*e�`� ���
F\�ړX֢
-�*��& ��:�eB<
-&�,�ʐ��K�a������Q�7@�4@{�E8���
R��!�T�l��":l��"4�
�l��B���u���.s���`�Ρ w��-�no
7\XyU|��ԓ��}�G�����w��p�YF��R�E�ޛ���-�(D��j�k�R�
C_�?������K�Jjc`AD��!~�w���)Q�cwv���3��Cr*$a|
7��*F�O�ń��<�{�q-�1��}#�"7xA��<|j����>]//h��P�2�ʿ�OI�pMӪ�FiE�E!�1ŬY{���c����Qĥ�1Z�s��X`u��
������R
-� &�;�,�.�'�6DM
Xj�ϋ��>	�z���O��Hlޟ:
�#�ٓbKRF
-��
-�s �&i��Ǵb��m��!����u�ů���K�l�Q;�������nr��H��?��E����KZؔ��M����*v��/'A���	�����YrkD�!��"���[Lv܀�qΒ��C���w�����
��
ܬ�/�w��\�/k<n`����w
��=�
-�i��Tf�ߵ�_�޲�a6����Aܛ�
��˂*B�>ȁ��{hq�F
�1�+\��~�]˷{��WbrtՁ��=�����"A��F ���C�
�A)&/��5$�lx
�sT����2�))���2�
-�
���꓋�e۳�O
)����������a�5�e�)�����Y��6���׈�0�	)9��յ��jڛ��N��mO��r�s�Lbr�K�(ЩI=���Q3
�5��5E
�j���o��s��Th���W�=x�'�4Z���m�}��9Hn�@�z���;�1�9Z
�j}9������5��U������()]�iD��=�qB������
Ӹ����Of�E��7E.�
���5	4�<�v���Ŵ
�_F��
�;�5T��gr9�g!���/#�~I@Ʌ����3ۃ�Ғ:�

�ah%z��<�:b���[
��,KZ��=m�[T��4�m|vP-��.�r1�+
`����il��i��G��
�~
-r�%e�폙��Ԋ��0�}
����������)�
����$�D&�m��~3�&4�:�.�*
8\�0\��R����j.�"���At?��Q}�^JD+�Gu=��P��v�C�� �Ҡ��y�&F�,l at Ci\�* #ק,L��
-���P�#*B��h��y��k���yu���ڻ��wơy�GП=	��㰺�
b)hp��ނx%f�;�Ub�����R:":1��"v��׼
-zSHÄ���o�^�~�}\�1ئ9��UĴ��(��iw`����_�l����N���O�����X����C��*
���	
�y9&g����j�b�e�x���Q�E�"�0��7}���V������h3�t\�,�����L"v�$b�L >���J��,�#
-buHNi��M�肕w
�w'�EI#��9�q����{G�����+�fuk��B�IJ�,�d�M�y)��Ǜo�N&
\|�*��������2�hs���o	]�C�x��7�wvfPw��"�O�Ê{x)���y�q�]W���pp簊r�X�Z��z�i�I
��QZ|˨|ˏ�Z�W}홇ތ�(
~��^�lO��lo�������ql��i��JI�׺�����s�
\L@�l��t����>�ÊSF\�g	W��@�
H��A�TݻRs��9d��i�_�9�~�;�~5��PDDŽT�.��]3�zǘ�m�'B�w��RL�
���>)
-�'e����?lҝK
����1��垃g��e�Y�x����*��^�{3��#�;n��B*
�'e�zH5�9l�O�.I�ل���ɵ�3)����4DuLT\DŽ��P���M�5����Lc����w=�~��5�xe��Ƈ���A-��#���D��ܮ)j�����f�`@��t/@�]��W�
�ܠ������=94�9�
-�<cm�ef���>s����k�W�u� ����k�bw9-�ϴD���l�-���O��y��k8���<�ձ5A(��o�|�
�{
^s`2R&Jk@
-8�
4+�au�t"Z�(�5�������e�i0����3	+LԾ���j�]�ƻ�*15��ֹ��Ϯ�n=�
�_	.��
-�}�+e���z2a����r��vL��L)m 'E	���*
jo��a�y�H����S .��vi�긨����t�#���
�b�s��9Z�{����R3�Y��+���4�����]7> 
=X�
�t}k��F��5�Ң�� >��꺸3�v�9ˋ��>��
xUlTD�'����FmT�C������K{
�k>�N
�^DIo	J��el��</� 7e���!�nP#�K��
�yg�S��
s���9^���؅��l>��j�&�/'V8�y`�:�JL�wrmm��c
q-�D�O������|��$>�="{k��VL�/��Hu~�[v�3���o��,�k�٠����g
]t
6����[��Y��k�::$��a†�����$�[̍�Q��T�ը�Д��P)
�S�w �n��o���W��ڙF\u�"o��	�	3����a����2)�:��#��~�����!�Ϛί
��E�7����qt��e۩�)t���#iH#�o���޶��ζ���"n�7��'�<��T�%��<�aS�&&ڳ
��A���U������}�P
��0�cuG�L쾝'NYؤ�
-W���z&�c࠼Z.�+�5��`n��n>izT���mG��y���yj{�͑���Ư����z�:>.��������z⃕�H����(��^���؋��<'n��M��u6,m��
�a)�9,#WGe̶���-�6��~��\���ӊ!9�2i�������ݞ�d}S��o��\\�+�70 iR�;���@���7�3 &���Er�_�h��L���q
�Qj��A�y	%	=��
H�'�_kQg7�p���
�W�u���s��lϲ �Z�E�nT�/ڞa� �J����
-��Z�/c��
��<�3��Z��z������p<9�!eba2�1i�\S�\�"�NB�A�4\dF�{��7���F)� ~t�+aw������Ns`��XD����dg����44+����4=��ib�o��
U�pQ9��qs�S�Ղ����a�m�Þ�s��
-LO�	���I�-m�A�
��
�����7��AčY̘�	+q�`Ls����:���N&�}�%f��(!h<\@�.��`ޥ�����:�����ƀ���߫��y�;a
�)�et ]�
с:����-Ao�Ml����;P�{�RRž�G�`�2�J|��q�魗5'V_U~哢J~��y�aS�,�dC\3�
-0�
)
�3��wy���l�
*ק �'�b��J���=n0n>9�6if�����纮$t�����
�9蘅GK�9
i��>����(:X��l�v��\�9A��.�:#Z.i���,i㳼 �wE�eJ
�반�K�C�D��CM/;��#/��
�`�Du�ێ�γQP�<RF��"��'�TXeb�}����EE&��6�4����Bh��^��|�
-�����k����W���<����r����J
,�d��
�ư��RP�|ƿ
��[����[�z�V�3�qV�_�����'}����8 
E�����)m2S&>5���o�V}���S��zp�
�
�j!>���
�ژ��I���Vº�aW=�B�2��p��O���IGa�+nb@-�uJń��Iծq������
-{�zZ{�����Y������ۓz����푖�cJl�ϖ
aB-��ó���3�m��'��>i~c�Y�:���̓��f�%,l�?���C� x�[�V��VR�'��g�$m_L��>\�rR��I[z�1#����+���ʊd�� ��3
��9�yfk��s
-��4H��,ϥQ��퓒+38�T������
�_�_���\���z>���uB�GJ��+�u1=�z��s�`M�$�3��[��;Q���sжw����-a�/�L��Ԯ_�
|Fw:f���3����0�䪸���`&5��*
��4l\/����j�-"+��
ysye����1����~j��0Q?o%�l��1=�YS m�Wx,��J�������g�Eԝ_6x��-A�G����|3q���G�_�}o�\����{���cG��%9�6�e����p����V>�����[�е�o�+�����8��~���n�k8�}-
�o`v���
W�У
-bjdn�Hmݚ��8&8�~����U�����%V��^U�5���z�	�iM�>�ɛ~We�
-�6��j8�/m&�%
�r�:ǷH����:���
����U��3�1F4���3����J�������g3�m0p)3��+o<�=]�����a�§��p�ko�N8�OƤ�����6�9^�9������i������tN���n<�[��N���C��AL�E�
\����)3
\���x�pR&����A����
�ȿ��h�uk<�/�¾�E̋�
�R�v�;/L2�~cxT�eZǂ��hU@���=����9�M�3���
����+�g��!5�4�q
�5�$Wo�u��m=y`��
Zh W�]�k�>��B2NgL��N� v�H5a5�~FӁY�=���qP�]�Ē����y�����h9�=�2��Kp�
t>�rori�]��[C
�S�Æ�/���������Vuǯ�e%�����$�À3�Q9�䍨FL���
�6��1�6�~yw����\c]�J؍�[���iJ��G�U��� m{0� �7,k�蚨�����@
楌"����O+���Ӽ�?��0[�V��fߋ��\�g�;�1�q�9�� [...]
R!�M/��*��CDC�p��V������<�p�{�8{�
�ؤ���
ƣ��q�+�5�^����oS���=(��9�r�?�h�������}�_ٱ#G͎
9jv��Q�cG��
;r��ؑ�fǎ
5;v�ٱ#G͎
9jv��Q�cG��
;r��ؑ�fǎ
5;v�ٱ#G͎
9jv��Q�cG��
;r��ؑ�fǎ
5;v�ٱ#G͎
9jv��Q�cG��
;r��ؑ�fǎ
5;v�ٱ#G͎
9jv��Q�cG��
;r��ؑ�fǎ
5;v�ٱ#G͎
9jv��Q�cG��
;r��ؑ�fǎ
5;v�ٱ#G͎
9jv��Q3����=������*��F|�^���Šk0��F��a~T��I��B&���bhTSp"��҅�WO\l� �'N��'�F'�
�
-~لB�1�O�����.��:q������q)��kYW�g]�t���7��d]�|�fv���7�\?Ae]�q�Jv��뗳��]��_7"g��ƕ��n��v��e�ѵ뙽��dgݸ�u�?7�/�����
�Q�Gԏ>�y����m��B�G���\Vƹ_ǯ�@�����0`D���{�m�>�X��P�;5
U'�k?������߉��U�笛����>q�R։�K�3#����#sJ�s����Ɖ���n�z�WOd����ɓ��d&rNܸv�r�G��=�buŴ"rX!"���V���#�u��������`*�RlYXMi��1��
P2:]
�B�2�·D����ȄV@�iD԰����]�~Y�ui]���
�nc[������e|ILI����:>!�y�8�}��_�'�.�=sԊ�Yt�.�C };�H��I���V�X!W:&��
��+E�.��;&;/��ت����b�DU�����N�������rr�s�
���?Xz{�z&�duG5j�"dE�l�{�X�=	���`
�ڸZH	�y����Cc�~�
�3���k�~�}ݗ���kq9�%�`�Zqg
-vm�u�I��cre{���<"�АT	�A�>$g��4<l��Í�$}~e/�+�!���<�0����AFu����C |R�AE�����T
R0[}2ZMX�h��(͛S�g
3헓:Rþ�G8��i��
s����+�Z1;f��x�*�_c��p�)��1��2R�}��bL�Ä4l�OI�O��k��I+�����q�4�Pa5�<���Ƶ����X���g��&6*f�C#F4�&Մ4�������-I#��6���z�"i���.٣ T�e�҈�	K���C+�����p���
I��+�k�D����f����{�~k1��g)���)S�@� b%�\B���fzYG��θ��H���'$�5ƴ<B�|�I�"d�W���՞�������u1#�)��U���"�V����%�8�
��3=�1%�qL�g�\7�����cV:n�4E��ʸ�ܒ����+i��9l�c�P
2r1�3�|��!�1�3�:6"(Ǖd�b��Y�b�D��}1}�O�o	 [...]
�$����pO�r��CN�'��K����\�R�a5�k����L�!gA.��Z.ҷ
�����{����_�Գ�	��3�1���Ћhq����T+SF$idB��`U�7�� ��A%�ӿ�j�k8��?�:w{�����o����z'DĈLB����A�n����s��LL�-��	%�f�^�U��_Ŗو�Q��.�o��)�d{����[W� kF=f��"������
�%�S
%j�A,��+��+��q�g5�%$�7F���ٙ2���&Z{JOm��X�I��ג�
-|E�bA�Ť�|r�(�$MbN��?Ջ~%
R��1};a��+<Z�̧$A�gr!j�CW��.�OB��풧����I��'�*y��Ó���I�ԓ�ZLQڂ�N��MA=4ߧ�d��Ō<|`NXCm��ȍi+�9m���ոR��fD����9�>
��98��X�'���(1�Q-{�:�� ��!f��OZ��,�^�<bXO�
i��A=
���e�r�`
�)��?a��&!}��D�c��L��Ą�GL�h�1Y��96Jz#!3�,�*�51���\
mgv;�T������A���M��N��?�=
��L��W�'�����E�Hمܸ��L��0w����o�F6jw�T�;O)��90��޵0X��c�X���0L��A
�cg��;�d���Hz�:
�5Oc 0EG��7�:�j\�g	��=�}no�X
ԉ��yr��;�y�(�v`���Rk�
-Bypw�5���z����6?��|Jz�{����T�Ո
]��Р1
�9r'> �()�݇Ic_oL'�F�lH\Gnڷ��h���Ci��
�Ix�]�w�TBl\��t�v_��(���a�MZ�
͈q�En���po�x�7AȏI	e��s�WU_�
w��<o�f�$;��S� ��s�ܝ���yDQJG�NiQ	=�.ӫ�
��%ԁ����*
�����y���8�XY���Y�q-v`2~1�I���C+�*mA����.E
)�@�_���/�s�-<��H��͞���O��ب^̊ ����Q��
?�V������Z���j�@�&d�m\�S�/�r�az����;��{��.y��
<�GK��A<'���Ft����W	����9�����	MY�]	�2e����pL����:�Mަ,�:.&�bt��Զ���j9��'a�R� ������#Qs_��#�̈́ڔ�ذ��@%m
\Ԉ��S*=
-V�s`������?������Ѳ��&jǡ	[����`^p)��˘E,5�Wj#zJg�@jhI5�X��e�w;�p%i˳�z���w
W�6�;�zrs�D�$�ΔI�K��$qC+���JVG\Ʌ&�?�!#��5~�g�ŵ�g�X�
�. C'4��c�o���1!���8g�q7�F]D�l�*(�qM��0�>�g!cf1gc�c}���c�p{c�t{w�TZ���w<3�\�<�8��5F��v�4�5N�90 �0n�CJ�혞ܐ0P[ ^C�f�!%�"��pA�X��#:LI@��	�p�
�6�=�f��e�6�"��;OyI���#o�'��y�P�c2f�s���f��e�Iʝ��zk�����?��T�ED�hKiE̔Q�qdz�+x�CK��}0
)"ok��+�t��ed�WF�i2�v8舚ՙ6
-Y)�Xp`��5��03	�1:zr��'샱<0��������]��Ԏ����Y��2���D��A�D@,�5LHT/ G�|
�Ј��|'a�3��'�U'�"�%Vz�A^܏���
��<\I���*���s�6�.m�dz����rh�2�
��*���2�%�:8UHCm��L���}#�����bZ��޽�_Ek
(�8qC_O�,�g�.E�<l
Կ���
1�����g�5� x������Rc��
7nj��};��R�6f�y[������_�!��i�H�8�4�b��k��]�v��)3�t���<a뻗��?�[���w_��ZǺ�����SZr�E�L�K
��T�s�(�A%�8 ��t�P��b:F�GF(�]b���=~��Uқ#
-L�w	z�1���,1�>vg_b{]����q=�I=�ӛB*P�����\�Q[������Ȭ����`��Of��k��~%�4�"W���ݳ�B�$�*~淓Բ�#�btT&†�(��et�
���D穵�Γ�Ej
�5z
78s`LT���]�;.���A)*/�cA]rF��,����;�mL
��v����n�e���)�幁�?럵�M�{�a5��=��
j�Hz뷸�����ʶ�{��M�T�XkҸ{H��3
��.8��$��m�
w�} �~���V���q�af���������k�����_��[��_��^�&��x�19iG�E at 3bFr&d���i���)��-%
4�OJ ���Q�
-mI�8�|w��!F,
\��
-c
�=~2������&d��}�pNVU�N+Y���Ybd|�ֶ|��?�RK���s�������*�݈�Q1q�1�����ASmc��g�6��	|P�

5ӭ�e,lL���E�B�
A��6d1�V�pgF*�0'�ٙr�B~�=k�\�
5�6D�
mQ{�`�Qݒ��b3|f��//ld�#F5d����8� d�_��]�
-y&9���n+I��&)ߣᠷ�Դ�EH���ŝ5��sUv�%ձ%�G����P�7C&��?�ٚ�>,(ڀ�x
-���
Տy}� �
�]$�LW ZY�2
���;�ib�OKN��%Ђ���e����g���|�㚺߭����H
-9�ԑ�C@��ɫ-�#�
)-5Rs=Ө�K}9?/
�
^�^
�bL���so1缓�Lȏy%��=�/>Jrv����,<��!�337 ����s2�}Z�C�{ϣ,;�Е��b��o�W4	�����iF�G	��>��8���WC[��DŽ�����Ul��R�økk�q�}�8)�5\u9�$�y�q�}jJV�,���))#�W]ch�
���)���a���W���|�m~��+�j�ƪ
j!
M�l��'HI�q����Yӛ�c+��!�9/�W%-�=A���_r|�3��kc���|+��?mOʮ| �$@�c�,ZNH���f�]�B�����?��B��9�3I� ��{���Crz�"���착�>l�m�C}�-�ʀ������-�ec���)VFe��,O��e���Q�����ӒRBfJn���H�NF-�������2�Q��'mN�nk���+[j�8F��D}E�`wV"O8�\`/A
�-���%
�$���,�F����a�0;�"��K���yIM��,�j�I�s�"0�q�T�3
� [...]
�,��a������9�]��,ϲ�������|����C�6�e
X�B��1�+�ZVq�s�uj�;�����C���s�
�>jx�13�5q0^���徢#���-u���F-�B
	A�G�{瞦g�'�)ø�����
-'b`���PC�Դ�A�
h�%+�忙�R�^�8�ч��x�:��`v�bA a&5�*����z�4j��jJ�G
ri�"d����6����]�4p���1
-u2��L�.z5���vԶ�,5��ݜ h3�&�dm%drf�ƣ�̴�Y��%v
R��rУ���,���"����"�Ƭ5MQk�� ��u�GC������'ܠ%	�w9�'A#� h��mR��$�A6�lՍa��
1s�Q+�U@��Mltb�ώ�� 
1��01�~|]ĉ +zՔT�00�[M�ܜ �����~D��"�4~sw+bdW���Q��&b��V6ng^,��Դ"��Q4Ł��3"q���!>�3�d$yu�"E�g�v��D��YXh����d#��S��&�B���
u4���+����GC�uMQR�"n���)�e�i+����u
-ɕ^=�уm5=ok���
|�!=�M��"�c�U�L�������o��|��(��o���
Ul
K�
2W�eh�
������K�{��x&�w�Ȁ&F�6!
-}�&�.W^Z�'?��k$�	A�{���>H��5BI�
"?Oѳ���•
�Y�㔯��*�C�����1�a���A�i�h9x��nc�t'�Q��1P��a������
+�50�:���:��m��g{���▄�|R�/a㑣Z��T�i�
��ě#���\�

�b����0h�_E�YE_]�->V
�a��T
	!�T3���?f$�N1������d,
��5"j�^�"h��'_��t|rtN(
;%R�MJ�.�l
��Q�H������W|BJ�B͏��&f�/�5O��:x5�Jؚ�&�\j|���p���y0��MQ��Y"k��Z^�.�A?\S��V�
z
��iA�̣!�z �l���U��������=��9�����ڙ�򯕃
Z9U�J䙾RQ��x$
� b�+���Ë}z�_�)���i�m�T�M�0Z�T��g�5�	���3��a��s�<�s{�g"�:���U��Ё<u�/�da���'f%2��5��<X�6>
�	bv1?dӑgiߡ.�5<�2a�m�q6�G
�O|F����b?gs���>
�g���_��˭m7�M�����ʠID
�d��]^�W��A�B��*Bz���4���$����AX+$G��k�p�7�)
����
-�渨|u�����܍:�1��
�J�
w"j�Z�L�<4��2X��Ro�Y�55��	"��:?d[�� 
VIi�i~9�����\���~���{�p;8-�,�a.�t��EtBr at +���	I��Y�^�~�\�ʋ�E��f�_
�Lᝬ��
-8��?�(9T!y���A6\�G�Y��\��¸YQ�Z6s�a3��0��V=
�	9.��"��������%G]����Ԍ���T�J��2���[�
�Zu2 �K��g�)��{
53ynxz�
�4
-55��MO���֨��9 ��
ݧ�WEm�O@�!��
��q�
q���1Pa+�8�dbbNgw��	��r�jZ�T�h�)����I�H /��(�#��� �=��!��6�0��^8�AY�"�D�{��>�^����€��uiL�Z�'
��
���
u����>��3�f��\�7>�tco��-"V�.`�"�f��Bf�Э%d��P�#:'fnj��
-��U�QkC
�x��lͳ�c�.�t�ƃ������:d����A���L��]d�mF,��8m��(��;A
�(c�5�'���1{u�^%�|s���ȫ�jcu����ܚ�����nÓ��E,�RS�VFII�R�af�
yW.	�E�hj�
�I�+��j��lפ�4j�	�&	|�
��y�
-9�	�}�3ǫ�����<cP�06�L����㆑g]wgr�V��뙥
oqW��5<�=~�,�DMrI�(nO�{�.�`/��
ηW���0 ��r���1�v��F�l�|Wޡ��y�*&�
9f�#��Zw�I�(�^
�<��p�˽�ߔ�ڞ`��w����G��
-�����f1�qf������dQ��5-f�? �C
�6!���2Z~~���{���1�x���S�o�i����
8��AƋ�$�Sjz������w�\�_ï\��_�N�>u�4��
�Ր�[��1
-�F�NoLS#Ɔ6���ޭ��G��H� 6��!���*����z��WK(a#�������>,
-��/�yA
%z0hPH�%��d������Y��~�U�D�\�WW���mX#g�RJP#�#��3W�U���&k�T"��$�)�{�-�����91�
4�˶մ숃K��r)a�T47�ti8(�A��U�l���1sq>=�ؒ
5�!���T�
-q�\�6U�&��ڝ9� 1+���O���p.
�>]}�W'cE������g����`%���Y�g���4\��	��?��aۣ^���5d�k��ż8�w�*��ڄ,dMK����qŭM���e�����RL�G �Q�&!+`2�Z.����H��F��l��ȭ ץ�"ZH_��R���)	[M�ά�>1'��|�_+��4�ʭ)f�O-�ZS1�ږ���}��]'�KM=pv]X'�y�i�3�y��'�i�c�}�{{"S͏���j����h�h��S�1��Z��^\�$:��y��w3vl2��YQ�S����6Rz��z���WY?����)Z��;��� �	�>-�y�5��8בuh���7[/��Kƍ=�Ṽ]K�[`|~��%!�y������
1-`d�[_
���IJ���G�I�Fv������fH+ ��T��9���!>�}1
4BPrP�n���5�2~����qk �pq��<Z��s`�t�m8bk��9刯x�����	JV4ckJX�Q�)!㓾����X��C���'�'Y9�I1֭�-vKj��
{uˎ����Y�	3d�xtU7!{��UB�� 9
~�8�hz�7�Fl��Q{��K WWx57:rFP-"�e�	���YbV���e�0�U����az���~#���C���!���}z>9��͜X�|�Ҳ*��K�Z1ǥ�U�T�,��O�
�?ɑ>݁c�DS{���7���0���
Zi�!�,�%L�∭�auRL\
��C�4B6yuT7E
�
�YY
�4ᐈ]���~ѝ#�ɚz����&�i�T�(�{�7v"��a�E���e3o�/;�g�
����u�ʼnj�K[-�;�_�
b�[�,[#=�E�IJJ��,��F��b0�a�u�NDڂ\�>���3'����Yp���i1֧���g
=�0��hzZ|�5�(M8�y4R�G#c��w:�=�|LP#$��%	
~
��n)���4��U �����
-�R�׽����~���L2��
0 y����"$�
W^�}]�{��
3�����g�'T�R�5�Uy&��l���V�w���l+�EV���LTg_H���u���]
1H8	�\
6W�ޞ(�m{���Zw��	
)#�dTn�pw	7
-�
�
-p�	��ADwi��}��)�(
-��9EN�Z,�\ߴ���}c�rBف:��9����T6�t���l��$j����5��b��oZD
-�$B�ZB�he
�VHH �"
���ճC���0g�
�
i;��ր���X�� ���}|F�*�μ'�yǿ��Q��'`~��54�p�d���v���
೰���L3�*AeP'"G�
T�&`E!��¶�W��u1ii�x�5�+H�kzFq��#���G-r�2ܚ�U��f�LP��w��|���t˯�
�������]Q�3
�^�bk��9ۅ��1,(E43l�i���v�<lW�GlRi�.d�NP��y
��̘M*��$
�+�l��(��
���M,�!�[�6TT��$�~���
�>��L����a1ӧ��DL\
x�0���d[uS���:b�{�p�p|��U��0'�E!C��R����xrc�ҫ�a�.p!�2��v�%��I�k�A��έ��<Za}��5ۇ:�5@���C
����|9�y�

Ԉۓ���aj0O��8#= ޱ܏���{�3�-�م��l�4�tk�[0�K��
e��nq����B�bE�
-	d�j���5��uO1s���7����IvAH#f�"�^�6Tu�����R{�WoŹ�$��Q�F�& ;r�y�X-�M1�|SȺ393����0��G�~��t)b�}
�VK1կ���ٙ��vg��
���U�u5���qgP��4�txռ����3��Ч

���g��a��Σ1W��<�O��5��aSM��ȭڜ���S��U����O��%^5p���ޯ��k��qV�
�li��7����&� \��u
u�L�:�����Mr��(#}��x
40=
-�߫��<��f���
���2P������
ࠄ�U4�
�&s��4���9�����1lAr
����v66��>X���y{��sC�� �_�Y�
Vۆ<�IEn73���̏�� ���f�.�Z� #�
�ymstF�%��OF³��>���7!��j��j��mw���
v���̥�KV�Y	gm[
y��<��+���;J^�@G�l��\ZwC�M-���9Yc�!`G�f��%li�#6�(2+�^ՒR�u�v��F��5ma��Bz�\]
�"�P���d�91+D
L��H�.!D
|ztF,����|Z6��r�z)ꍎ�A
X�q�]�-Ï�{҈Hkì
Ϥ �j�f�B+���C���ߦ}���h ��Ї�V�BrJ�   �;V.ffU� GB=�x�}0��̐F�Y��O0r��g+}����K���e�6yu at I�
-�h�>%0��_��9��K�q{��Tr|�̩
-��A-/��T&�S�l���=ە�k
�Aɏ[8�8��Zv�W# Am�ǜ�ƨ�^4`�t��a=�$f�pcvy]j2�̧Tlq�}c�*�86R�6Z�O�F�
r�]0>dϔ�WՈ�9�>%>�3Qq5
<6���׀���)��a����X�$`$g���B&j��H/
-#צ��]nC]����̫:65��LENy���U�S1
-�Po~s�<l�k��ׇ���ӝ�l���GM������㠕���e!#>c[CL�j$��UZ���!����Q���#&
�B��T���E"
�k�<f!u�,����N��gƧĎ�����XA�-uO�Ym�ȩ��a#-ߧ&g��W^[�$��卡>+
����������V�Qg͓���m
jYˋ8�򠍃ݙ�V�80`jw��^!�;�"��
�
u˞�#܄Z��u[f
%`�A�0� �+
E�bYl��	���
S'��o�su��r�;�U���=����Dܨ]"�!���!{fz�[y�*����!��%�[l��Y��Cǁ��V��!����6��б*�c�P2
-f�p�b�.�`��(
h�׷��/�$r
��LS
#F>q�����5)��m)Y���[�U7�jF���*\J�L�tPY+
tB��0���U������!5�,fP]#��i��8�G�"bm�gv��
M�
bF%��细ˑ=^'�����)n�j5ï��
�H
-i��8�q
�*��Y�\���xx��Gn-ؙU��dV~p2*v
\Ү�G��h�^
.٫�f�tB�{\����*=�	s7n��had�ÌX���gm��qa]KG� �FH����Q����
-9
�pk}esu6
-�
6Ȅ��6q�A=�8d�������!wwFZ����+d���O
-�����M��Y`
�M�
-��Č���v�>C�gv���9��,��a�C�i*nnN�ۜ,;��R3�J>!bh~�6���d��[��TmL�
-7&0�}F�hS/�C��[�;C�w�i��Z��|F��'�#HN�	�>
#/h��Ni��H�a��VjA��
f�%P��[�*�hӆ@��3�-����K
��yic�!��|Z���Q�/�7��P�"d��-̊��Y���8Xumk���7�1KS�{d��Lû�Lcw�)�
;���U�
�fjUb��E�.SDa|�;�#N�hc��\r'd���p�*�B_ u)��h�;E��U*�s�B�
͜�0/����f��|NbF,ߝW<�8�b��`s��0�0j����r|jJNP�!DtՏ���;E-�f�Ro���	z�?
�).�����	�z��؏�چ
������<�Z^��\τ�=���Rs��)��c���q쵸�\�
���
-�~�\
��4GL5
Q�5d_v z#�$$�
�ҡW��	�%��M"
-y����� ]�N3
�z��Y��uW�K���g�ˌ���n%����kȔ젞�5�+=:jq���o�7�O
X�s����$
-�s�K�Ǻt����K�'��P[JvID[SӶt&L�M^5%s}sq�����8�J�(f���K7�xQ`�]gͳ
1���!�����^#���dA�o�[��(–	�hJ��@H	C��̱��y����7�=��6t%�Db��^4s�A����w�����*9�0$@oøo���#55^M]�G���O��
|�n� �/��勓������l�KeA��6`�i	Yk�"�zD�["Vj����0`�su��N�k#�zM�L���p��Cvdأ��b}W|��Q
�vg��+� ��������Ț(�W����4Uw�f���*6
��Y>���
ŻN� �Y����6Yy9d`�#�P o��V� h�m��Խ��4���q�lB��, ��29Բ�<���q�
��[:ޣ�AD��)A�Bn�a	Ku}�VݘpȪw
"A��#!��#��!C���L�����Q,�����	����q�u�1a�}�7v�-5M	SM}� �#��������h�>%9%����u [...]
1�4 ��¶�7Qg�sȍ�v^�fq��2���|¦��y��y
31˥@�M�	��u�Eā
�s���M������r�xd�B+r��y>�'�U&^�d�tM��'�~s�3$��rQ �+h�HC��#6䬚���+hk�
-Xk��v�$�q��5
<n�"N�S�xy�[��7>
[[�����Bcb��Yb��i��%��7G�
���f���:4����<YU�H�:!>b�T��i�;6fc�xo2��W�;�������nН�aܭ�Q�혅�N�E<�/b�J��T�)�f1�^�@�Ƒ}/N�
Yύ�u�O�G�u�J�QLY�T�f����O-E��dL����X��|"��?l擣�!H����D�"nbN"ߙ�5D���q���
A��1Jy0W
!��
=�}�[��K��k�]���W\ ~.
�
��O\cfy��=S�܀���]�
�8�:�f��42�]^=�����$�W�c�8=��pN��էg�-�3\Sr�=�砂
-�sRvP
l���T��pt�&bu��:S�
ǧ�b��樥�-nW4�8�l��������!��7)�cD,��6r�#w�wum+l&��u��uȘ�Qw���ٯ��a���0N!���\߆9F��a
�u!+�
-Y�ܘ`���"fZ�OOL�iy���L��6�6��=NNy}
�sg^?P=jN����2�&�ȞQ'r
�<b퀚۝��X��_�qb!f�3v��-���Ă�56�x5R�3_ݶ��x�˃v!ks��	~\�ֵz���XSq4v�>6!
&�d��UQ��0W����m~˓ဵe0�~�
��c��e��\
����
&���m�n�z
�W��.�;$b����UQ�6���
��� �O
H����m%��[�{�3K?�Ȫ�3�h���X�!����+𣶸U at O�Xa
�4��c��s*Z�&6�m�m���ޔJ6���Dm
�{���5B{�b���y���!--�3A��=N}��1[Ìԍ~�
� ���M���G�G ��}jV�O�*����Έ�Ⱥ�W/$zt"�>'zT+eDuBrXϫB޷��Q2��:.fs���4�LY�?�
#%���,�4-k[E�]�%o��Hsݤ��}���A|��n%�p�$��∉�U��~�:H+�h�l�JB�1)��*
}�@��qȾ9�ԭq&�3+�����x��z��B�Fˀ~)�Yؘ��Q�P�lj�S�Ҹ�ѻ��0��2����R��fJN�D�
-�9a�L/@��ԴB˫�,�)�y5�W!�>�"9� ����䅀AD��$B`�`u"�?*j��E�L��"J��F#�4�e�u���e
]՝M�v�̩��g!���k0!39��ݝE�gx��05is�|���˛c�	�"����Y�㨓Mܙ��>�+f�dnj�hvd��ڝ�(v�kہ����=�
��\����X��%/d5�
���6d��a��$�9`m�����!
��pʼV�Z�
���6
v�=����V.>de����^����z�-�k�1a��lݛ茬֧g���j�!� �r"��A�B�pֶ�l��~�\��]؈�����S�Cv~�&` 5��?�/7
$���8�|�?L��(��ya3�$h���fm��䐹�-�
'
[@�l<r��(�#�Z��m�wy��|k��;���NP
z���F��Vz*�,w�
]�(<Ց3�zfIH�)�@~��~=3�eE�\�w�S���:);d�q�J>�;��u�"�}�2�S�
�������( [...]
-x	����0������l�1
7���-�+��7�ʉh�,�m!d�?��w�DT�r=�W�Өs ��8j�D������ 1�1��93�`c#&F�_EN�#ߏ��B�O
�I
�6z
2�	!�`K���SQ�#Zv)�;n���6���j(�a25k��#�
��U
,�-d#��"���Y�8�\������(����Ⱦ��^�6l�h�G�\B��!%`�?88�����������.%�\/���j���qGMK�)��Hfa�m����=�V�0.Q�C����X�2P35?l��"��!`�Y���_��<�9y专K�}N���X%����J^��0=ٯ�o���6&XK��
+�~Fr�g���	�4dR<J~��'+�� ��x8�8�~PKLk)�1-�
�csִ��5O�u��L]G
�<b��:!���g�
V�[�<��Su~k
���7K8�T��}(���zd����閵
��������n�y��{����G�5߉:bo��v�����.r���ZB�{���#?i>�k��`c�r�_qk����|�=��[��[������C�f���W�W��|Uvx�u��n��$%%��d�
U^\�<�xU�d������_�'Y_����%G����������/lW��b��Ք���1L�;߁��7�+[�.�u���o�p/�f�&���Ӥ��Ij�� �N`R�L	�a��
�x'�e�4�>�啞�k���)�]�����!kW�"�sl�@�E��A��1J��� �����$���W�p��_#
埦���h�pNi^8��N���d,�V!pM�s�^eP�-�L����%5m�{q��x���3��r��S#*N��f
~^!�5��U�7�	W�S���MV��
5(�iv������l�������S��lϘ�l{TX
T
*�J
jc�zw} �;Ez�pq�ifnP�CG�?�PO���&pk��^L�R����n%)�;~�wd�y [...]
-X#
����+�o[�䛫�g:�N��P�t�n���1�X���
��_�&__�'��0�
-�]�#��+9����$��{��ίv�����6�hw6��,/Q't�%��A�#V�gK]U����m�:����������8)ycTR�5.������$-v��/�#^\�!^
+�E1-�҅�K?BOu�2ҡ�ooV^X�.9������z��� ���9㫥Β�:
�;INYF��]��F_�Ix�9h�oR�
-i�xЄ<ߤ��=.#��r��/+�YZK�ϼ�8�h/�eu {)��T�!�C���L��":b��JnI�-���H�a=�"���m�>�����5I|�؋�mc <z����K{��pyc����@C�\Ô{�!j�z/�����������:*~]zC��bf��Y>{k���&���G�#%�
-(�[�
]�
ꆜ�Oˏ��I��T
�S~t�5���n�U�S�љW���'��~A������}x�5�
�'گb!������ݣ������Ido�\���`?���0������FWչ�
��$z�[P
-+��5�?�M�^6��h~R�g���x?�~��
�
-�)c{��Z�!߰�T
�<*�Q)���OO�����Gx�k���W���3O���)n`��~�E����
/�m�a/��Iw�{�"1ˣTm�rr��>�G������:m�92����{���ZBkE�c�[>)-b��=���

�q��z��[Ä[~%�
�?�=�ʆڿ���_��Ş[z[y��ZzP__|p��}o�
���
����s
���f�aO.wR�ͼ��\�"]���ۄ\�fgm�R�{)7�bN�_

U<�|T���Y��Ko��lCO��_�"_]|G�4���Jg�O���_/�E]�U.���S�ʭqN��{�
�	�;Q�z�p7}���3�s�-��]^���觧l
�
�v�Nl���l
V����h{SyzL���r'��^LGji�m���e�nb�mᮺ������G�)�=U}�o�N�1*�̿eܙm�_w�������]q��G��
c����5b�O��ɐ�߰@֧�֪ �%G�\�O�,�(!��D� ���䨭�p��I�adz�
��?/�Ɵ݀1��&���9�̔���Kk���ϋ~����\�o��|#����JA�:r�3p�{�p{�����Y�K�ã�����nn.ؿ�E�9׎:��┩�`�Z���Z���Q���N��K��Qq�7c�/4�%?z�g\��}�k�~�m8�ˋ]�˫����y7 K��լ��>�u��F�7�:PǴ��ߘ�0ׁ=;][r��Zu3��8r��{�
/ˏ��hk)��=D��pP���;ۃ�
-���qsDP6׉m&_���
���|6ĸ�W瓢��G%�_���]�*��c'n�Z�C�\�+��*8��M�b��������<��
-�J~�R/���9����ɹW���������_�ž�>�]�d^r
�C�Z�Zj�{������#�ϳ�3���Y�Ŝ7���
a�FLb��8#k�
��l{Ώ���=݌K}�;��.n�;)i{f���/�%_����>B��?en)?4*z��^�ʹ��n
�s����냼��҅�wUg
M��hj��μ����v�Ia��{v�� 's��z���x��R�o�����Ӽ�k�+ά�ŝ�>.�ikH��M�K���3��G͍_�k��m���ci��3�^rxD����\um�5������Rg���w�';ˏ�[���_ZZ����o,t`�&$t�0�ls����K�}va�
�W+���)m/�w�j/7k�-���`
q�[Z��Ÿ�|Qv��T�����{e]�w��_m�3נ�6pW����W�m�;�N8^�
1�d~�mH���2{���~�(�x���k���ߵp��-vT�ZA<�wz���[�M� =ejs��pi���7dz��+�'�ꌯVz�w6'$ص1a�K+$"�ҫ">X ���e}�Q����}���|aj)9𒘴��7p�z/閡���!f�G]��u��������|u��z��up{���5D��A��K��Iٽ�T5��
�
���M��+E��^f�k���Ё���R��$�)q��ʚ�o^T���0?g���
��h}��<�}l�9hn5�gK���W�G�|��r�V�
�+ʵ�>V�WUW�����7�4D���~��O�b���r���3���j_��I��ڲ�M��z&��{Pg=��!5+���GY�>���V���紋�g�_
O�~2���0ߎ:�cd*��N����-yW#:��������WK��W��r���Up�?��}F�������\�'ݘ{�:fx��Wߜ������ڼ�[�W?m*<�����۶W��GEɟ
�S>�<%��� ��'݄��S>���῕Ҭ��PӖ�3����5��{�ՙ_�	R?
b$�}B���kZ�/�o�k���pXT�
 �G���+��OL����%]���:�3�K�Mm-���
���a)������ٶ��3������o�չ{
m�
�|�As]������lt��gۉg
ϫN;^�ώJ����$맍
Q�r';��wb�=+i��zs�a�
��Bg�q���������ڌ�mϘW��i��Q�Ͼ�:ii)�om-;�m,�q\^��
���w1
|���p [...]
-z0������ch���`��޿�sn|&�=��aQ���+�����k𽷨���G�k�,v��^]{�ߋ�ؤ-��5JO[2=�:2��p���◙Ug _�T���ly	��v��.�
s[�1M}���'�g:�wV�9gMW�~��{�܊>b~
L�K�i|\r\W_�o�i�Q�/1g'$��
���2S
���3�(
-����=Ʀ�}�g�Sӊ����1<�}O�3�O���~�Ӣ�ό
�[��
����W������$]�����J_-��μ7Q]|����M/5m�8��g}���\x����]t|�������-b���C�kMJn��і���%{����'�˪����'G�e���2JP%�y��Iko����'��+�ٞ�W޴�r��G����5=X��ܳ�^�l��?ly�:
����j�氠h�_R���r}�-���i�CC�����=���/=�̂�w�Sֶ�_͏�WԵUGL��lO0�؞�μ��Pp��楞q��1֗�s#��
�\����?��>v��k(9P���?����~v��0���L�>�V�}:̹�� ��s�Q�Iї?�_��/:E���N�[��8���gcS��#��un�eJ���{Q���?�ϴ$���.��ɚ�5���u�9�wRn���_b~�/g{������
�߭�P�����-�ߠ7NX�
-~��<�W����D���II�ާ��_R�C/%ϼğ�yQy|�
��B'��	�H'���:���X���u�i��k}̬�w�[�=��ȚZHIN	�ɩ�W9�DŽ�߭�J��݂ܙv�eSk�/�g�����ϵΏ(2��R�����|���LS�o�����؜�o�q�3���W+oRN,�g_X���ߖ
q
3r\�-,�'M�ч{���$�m�����{�5F�7X�|��v����,���qY֗�_,w`.,��]���
�>)90�
-s��
}��
s�3��o
JJ�/Y�
-�9���a?�������S�k�=����`�"�2���Oא��/����+���_���#-���S���z����
afy!�����>K�BSs������ט
-����w��j&?X��/��_Y�*=����Y�/}̳9��
�L�K��*/�

X�DߙyS��څ�6�����[�y���Â��y����gL�o�~hlH��Ҕ��R'��g���4��V���)%��_,o�7W���M���
-~�>��;̹��� �{L�[�o�Kp�cr��{�Ȩ�5
��N���T����ܟ6�i����ߘZ))kݏ�s
�,�ԁ���%?�����13�<'�&�%�7�$mKַ�������
��?/�S/M7�
�/�����*�mC񏆺��m�K*���4��~;�����[ܹ��������ԄK��傕^̹�W��^��0G'D�_���w򲾺{|���
��|Ky��z�i[�������{��?����~ƥO�{1E������ %g�-���-�;�����Dž?���~�'�{Z������:̭O[q��Y����[{g��
�K�볾� ��h�se�����;�o׺�Y1cM��(#{�	2�e���o
{}} uZ����T3�ʰ��׵>^�|'���ˊ�+oqW�.ۀ����{�O�����ҧ�>[h������=��p}��p���e�l`.[�g��`]���/q'��I�G�{��Y����
t�o��Iɓ-ٿp3�����qO]_yb����Ii�޹�eG��o�w�on�R�(�-y�/J�l
J+�:���:��g;*NϾ� � [...]
-�z��
�Q�Wޕ
��+?����sy�OB�mV̿��[���r��!��������ƃ�N�
�k�k}r�R��|C�j}^��Ғ��R��� '���U����}f�����G�4�uo��}�5�����n~����V�\
�_���
w�=$��O��Ug6�9�k��B[���6��	q�Wü�/9��������Օ�6�5]C�)]M�*Eƿ���_�v�Oo��s4m�����˞I!n��t��Quf����>ɯtt/O���(
-�q>������FW�wx�='�Ԋ=9��x~�=���{ҵ�w��k�l�o�OqM�1
-��=����-�-����Uȼ�#��a�
�%�;���
���[�Wƫ���0U�Ň�Ӯ�]�������}#�[�T�2�,�$\��f
�x�517��2jN�g���1��4�*〡��G�y�C*	�Hӌ:��͸gh)�7)N�l��_��s���/}�iJ���Z���IK�G_����u�;&a�ٙ��Y���;�o�O̷
56e|5�uj�(��������1f�j���qѱ�W�.uU��{StLߔ���e�����/�
%�
�+
�(�W![l���g��7�늏�s�>,��m�p
�&D�s0�s�eGV�W�}:d~�:��:�~^zk����'J9����~�������[#Uɾ)گ�e�`.�ro}2��o�_�1@���{v�&����=S򬯆%I���oO6]T_����Q��Su�
�;�
uT�H��=��_���}�k)<�	�+ο���G_��Vֵ��Lg��-u�R��R���
���Hpw��@�$$�]�#!Hۙy�����;y~8W�����k�rd-T"�Ol���1���:�Op�2�|
-.Ƨf�7��_,�����a���������� ��41^
%ok�;ׁ��T
<j
�.AE��ߵ
�N��e�V ��t+�{��)��
�������k.����M������.c&j��1	��K�qQ�l�e�e���2T �g�����k��d��]
��#-/��$/󶁗q�����
-��ᦺ�7�.J׈��\
|��7� ���`�'����U��q�Q�F�p���m2�����6����ۍv�����aZ�u��.g%\�k�~�=����b�wQ�L���[��E 1��Ss	?f�L����N������n�G�0
����~���B�k˃�2.j�nlȼ��_���
-����!R�K��Sps
NВ�x��h��^�:X��	xf{�aT���"�#�������u���2`���;c����3j��^JY)�[�_쩩�i��W��^TKR��jk�ù��N�Y)����޼��o�qB�� &JP
r^Y�������"��y�f��
ͷ��w��Mm�N�M���C��_
-�׋K]�O�G�>���sHᑶ\�.�W{��>��g�d-���Z�,
��$�#�n�`�
3�9Ճ�+�zz~���OO)uʰq�Qd�e
�xi9;�� ��e/�͕��_��W���ׄ c�b�L�\�g&�{�9N=���gcz�QW�k3}*ҥ�}jz�>��_f|�[Q�-)���
���5���� �-|sh�n>4��{�\�CJH��p\��8.���ʌ��;,B�%,�g����#n
�m
��J9�w�UĜ��Ҡ�Ȼ���'��Y/|�Ȥ
1ko���Mвׇh�ü<S�5���[{aV[��������d�}l�D��ǥ\��c�mKX��Me/�9I����
��ԇk�,�_<rr�� �����W�*ߖ #g���	!gǙ��;Q��F��Z�$��נ>4TD����SS�?L��
!�5��]�.x�ؕz�?�f*d{
����L��ÔTCe��1��S2z��qF���z�%S$��uYƌ��Շ������.��2+�*J��v[����d�ZH���.w��
��^x�@�yd����[�o�aL�k�Yb#&�j�N7A��b�U���Y�>��T3 �c��.cu�{�iȭb�o�@^��o�2o�6�t�IY O�jĩ����Kn9��>F���-�8S�~k�9���0>fs���
�l#���fț�T"�gin6��a���Ť8��7�M���L2�v%<�]�٭��]*6�*AG/w���-z��_�j[���1RJ��g���Ȑ�^ [...]

�g�j!٥���
-u����/��y�
�%��1�=��_�\�]�I]m�x=�
}�5��t�0):�6�Jp��NV�[N޻��a
-i��4��W	-jF��"d����[��
��"!��?���E�1T5Y
�r��bG�õ���s�)�͍)O~��D����Y��4ش}��ګ�wT��
9��6LI��'E-���Z0�7&�7�z�����Ԍ��ڊ��Յ��
&��՜
-����</�O?�ʙ���5N/�j�����T�S-Ø0�!jk��т�;�?^k������!Z�m�]��M�5�K
�vb���B�� 1n���Z~�؎�q�1�?��c
��]�Кyw���厂���C�Lצ�%�]��e���
-��7��$ƌ�*
ׁ���7b������9F��6�_�
A#�2lꡁZ����g���uҒm�z�b/=E�Ͽ���>L��1rܕ	F��٦�c
&�Sy��0�ܯ)!kG���4�*)���
~i��źtd�K�B��L��8��^%�
��\#����7��L51��Rl�O#f,tQ�
�q����U��fU�d�x�gSa�S�
-�lM�UW�lUr�1R�j4dk�VR��5�-������}��]
�b�-{>W[xo��8h�����R�F�|<Z#J�c�R���"ѾY(ؖ��7���϶j�S
δe�N�K~ ��O��M��M�S�:�t���^�g�(2ӣa�.ѭd�^�UЋ7{����������� S}�3�$�_���[��
����P�*��.�A������Ŝ_��j�����wɘ��J�V/5
��1+�%���� S[f��82fu� ^�C��+�f�۶�9��-JJ��Ģ�X���y��l,���UI-8cwQ�b�d��z	,�"������

-|��,���S*L
�O���x�(6ѣ���'��[#����@*ޒ��z�.%Ÿv��_�(�?;�,��,�EZ����+C𐅾�7V	X�*�CQIؐ�K��i	�����f���vz�r3#� ¿��~;�Ϻ0��Z����.f�t
)DI��[�cw$��u	�L]�x3݂��R�֭
1
-,����XsC�=�0��F[�3�(=k���6%�.�Q�j�_�Z�i�~Q�V� wZP5�&�4��Om����Av�� ��s��������!�Z�p)��ME�ռ���m����F�rge�R#��Fge�R3/e��
���N��:L��郖^���;�ek�Џ���An-&s�@������fk{�z
��T�r��$�
In5�|�8_Wxw��$p���k���
��s5=x�Y��3\O��,��$�0��S�f8l�lM��$��*��mȩ��*V�g��۟��w,�� :l�����>n_͆٤����?�a�gD�H�Hk�oB@�腼_� ��
C�OW��MW7�L���^�P��|S|�G��훘��񲰍��O
mOWzK^��c�jKb/����y��^F�O^#p��͸��.R�GR�Y�d�DEO�����QL쎊
-�N�K=��x���u)3��r7�W[S�ϑM� ͵�_�t6��9���֏_n'|ײ��h�ŏ��p��Fd�LK�SC擹���{s
�ϕz寥��
�5�[���=3M������y:nM���˾on˹oW cf���YQ����GL��X�������X���DϴDߟ�N��A���2p+}��
V����Tv��Z���;:�뱲�OG�_����ݹ|t��qP���@�o]<�Ox�����ُ��{�M����Y5�
m�����z��d��3�@�jG�]�3�D�$�~;Ž�9R���;5�$9��1|ڗc�o�b�>8�X�u�
�t]%���ђlRF�r>r��1�Θ��$ʅ��n"�n+��r��zr�qDD�Ѣb"��R�O�?
�z��H����@ao�
-��
i�f^^jg$�$�]^E_���݄�) �gZ��'��a#4��n�|?�����݋(��P�y�8���g7���?

-p�(-%�!j�]]
<�
�w���1S�Vlj�RU�=ِ�J�zoi��!eA�˙�;�|�s=�AÆ�j*�?CO�v
r"������Ob�O�">�6[���h�$
�6r����
2bC
t�w���n&���&���c̊����[��ȋ%aoN�|�ӽ УK�@_�<JI�v�
��@��	Y��x��r�$��yKBMߔ��Z�g��Zr�lGi��_xs�
-�� �~��K:U��͑��G1Q'�O�B� 'E��}<�ލ#iA/N"b��T�Ɲ��'&��<�sRHݐ��W���
VG`ߍ��
R��
�~B���:Վ�<b�
?7�$%5�Ϩ�GǮ��;�*�]:ut��YP�����xE_���Ya
-ܓ�̅�� }s���9�cVZ� ���Jl�GG-v�Y�M	=e�VTCÅ���iQ�E����?��
~uJP}m��xE�ɸ�܇J��̩�?�``A�* �ƣVr�!,�$�0�xaT$(��3��k�A�Ν=�rt��yП'�<s��
(7$�Hsy�9�0�֞���2RK�C�� 3Q���>TI|^��=�+N?I�I=^��ȷgw�X�J|�����6��3���Ao��:y����O����25"^�� �Y��'+���ژQ�ZVp;�x�QX�',9�Hvh((��{Ч{�@wϝ��z���-Л�K�
�~
�@�?���m�5���dt��v���Z���m�č�(����-ĵD�Yjf���/��Ŀz
�
z�{��
x��>0�Ϟ�v������� q����^���6
"aa����� 5�hK��L��GŸg���3�����G�a� x�gP��۠�7.�^\�:�Oйߏ��_<�	�Oؓ�������X��+��o-RL�b;��|������X]^p
-w�,�
(��KP�G��kA�.�=�x
t��9Ѕ?��<~�8�2 ���׏���|:
}ZX�c�}F
�v91m���ǾnD�/#�#CGF�
z

-�|���P��۠���y?�}�
�镫�K�:~��&p��ׁ Zf�]-��� �%m;5�B���Z���ꡏ�Y%"h�9\j0'aG�?{
-z~���� З�wA7���9qt8Ɲ�W@�N�zv�2���of�=}M��վ��>���roA ^�1�GY��n|���h�]�h�{^S�s
��X›�G� Ǹ��W �_� :	�� �_>A"Žc�����,�f�C"��y������E
��Or>�:=�88&�X��G��=��흋�A�n�}��865�\=zW)ć̷�߹�����\
�̌�J�]59C5��*�?p�qG�	�G*b���	��}�ؾ={z��.�n�sr��ő�O���^hG���
-�,�⍝���j�Km
������(�Հ�_�B�.#�����*��9�ÃG��/�.����'W.�.\ ���P��s��w
�*�%��X���X�
-[��-�1�̽�\I�C

P	��CT^tJ��8���8��%����{@���v���C�����g/�n�p��
�@�_>Q�bO(��V%�Ъ�, �̵��)H��Rv�d#n���
-��V�s,��S��{�@�/A�o� ���~=� �x�
��� PtЇ�1�^�,H�2߆���)��#��ذ�6�Gs+�� u����-,�-�?���=(!(���y�
���'@�������7���.�>��YP��GG���;;��t�he�f
�;�cyLl�K�(_#�+k!u��U����o_���yJ
-|��5�E �/�~����_]��4�*0�'�o�n_�zp��5�7lr��Z§�>N�E�$p����ݤ��.J����J.�K�8
���ōk��w������_@^�= r���w���5
�y���-Pax��*p�nX�������
�*������5y%qK[S�$ �y����ܓ���c��Ϗļx�M(��m�_'~�8u8�u��7@���Lz��9+����h��⋾!+�0�J�&���oG���D��64�F��H
��A�@�G���L.9O�-?�Ϩ��W�TLw������J��|Ωj�m�F���D��9�cm�*��.&�����o4`8O����������S��̳ؤ������$"H[�H_
��/uC^�b"��J��JL[
��ώ4���P!<�\
,捻F
�.��d�I�K	9��3O|xzt�<�WA�.\%}9AJ-�ъ����
��:�ћRv�U.D[ƅșN��r�
��S�A?�
-�����gUD�=J1�Jҗ���
>��3�
�o�A�/�
�xr4-<�(81�$�����r���թ��X��`�����U{&Q͎A,�h�9���ҁ��x
{�(3�ϯo�

�x�
���3���΁b�|=�.�F�`�v����x�/
�54���v}��o�	.�6��X
�O�a4����*rP
yS\v)/*�Dʗ��_^}r�6�A��8z|+�
�Rr��č[
�b�T�
-����1�پ����q�q]Â��	�ս��.�~�
.�D��>���8
II=��]��
?}�
z4����?
���A��Lԑ–��mY5}[^I�*إ료lC3⥹��4^MT�q��%�Pi1�z{2+"�wxF™���?^ݿz�������K�q�g3�NP
-J���ȇ]l�[m=⽜�ue��eVX�7���0׮���jъ��&o��&�/�s����푈�W��oQ�����џ�O��
����Qdn�U��{
J�L��%�"<:�id
6�MM��Y��.����zhQ�f��>�q'���b[
lm���>�Hޞ��:Tb�U!@o�8%�I1�ijU;�U
�IrS��X4܊�
[Rqa��U���z���9��IX�.��G;�s
�ž��>j�OɁ���r�+v�`[�*w��U�]�VM]�B��P��r~�����-̙�+�v7�����
���1qTX�I�=����5#w&*Ei+C
x���jG�P����{&9X���۝0w&+YK�ԙ���!v�Ƙ6? *R�W��:�mM�Һ�ymmԸ��i����i�͐5�%��8A�bQ�D=dEYE��xH��U�)��/u���$����$^��8��X��uC���zV�Pc��ᖖlIksv

�ƪ
���t�����̰�����!~޶�������J��X�蘪o�O5�z�k��;E-�L�R���(Es�
E%|����J;�,/��%n�o�q?
T
?�p����W�M��EI��6٣�����ŵ����B��YT�7�00a�jZ��)V🢙�]���6�_U<+骚�.�v��
̔�&zH����觪�v�xke�n���8Q�vO	X��
-���pE>
�>��\
�G��p�,r1XSʜ��m����bV� wUe� E�e%^��ee�G�'�Z��6a��W\� i�Y�
"��OXDDkD�ׇ���f8�Õf���)yN=����Bge�PeOe�x�0v��&Q����ꫫP�v��c��Y	5qn�53���C~t�T�����A��ڨ�z�m
-���ө����+�ۀ6�
#�)jK�ԕ~=�s�;�\򖔐b�a�����
* W���I�kWok�n
�wS�2��E�o�k�͊k,Z6rKI�\B��I0�+Rl��M��dG]�.��g ��N�K����m5�tg���>^�w����Z��,�*�{R�tHI�Ab�z>b��
�!m���hbc��6"(Y�&8d��]��a��{�U�
�Z����
���t�����8��#�B�d%ݣ�

֭���)kvu�pK�.[��V%�(�9mk��hSrʧ{9����g³P3����X�p��`��1X�̥B%�����<�M�'[
�u=+��ֵɖ�UM{����9;H��,˪Q�*x�LG��C3�����J
D����Գq�YQ
���z�=�}=���LG���b��Y�����>��՝��ʊy5gNN/˹0��_��~�7#n��p�3��{�F�\u�MC+4�7
�.���L�k����d,vC��U
��Tm�R������� ,�8��ZVґ[Z>}S'b��3
�
� '����M>
"�+/s�ʿ��ÜrJ�O�Ax�l��
��1�p�#e6��_.���4֥=Tr"�-w�{�D��a
]VW��b�}
M�=�H��g��G !R~�9ee�
���cE�혩�h,�*P���i�p�ȣ8S�*��[r^���t�r9��ځM`
�)�;-ํ,��D)ޙ�g�����aȇ����?W�ͻ��>���߭n�q隺v&e.)�"!��6���V�3�:K��ʞm��l�8�$�Э%�8�D��^��Rr���ۛnQ홚$�
؟峭��->aK���V�r�M��&�1�~�V��z�1�.#$ZFJ�Z%���;4l���x���vs��3ֶ{t��nmC�C�Aͷg=Z�n�?oJ��jT���e�WR�
b�yTO��)\�m�8d�=��[����Mۓ��
lװ�
]%׫����V2v���ad�
�7-x
"��c�,�]A+r��e
=0�F֡! z��:L���7tz���
I���Ax��)�z|�[	��a���
-+�}���b��\�|o�^j3մ;�u�v}u햊ZbS�2
V�g�K؛a��wC��q�;EG�L8�9t���X�Pᓽ:
-xo��t��
�A��.ry��3I;R�b콹�-cBw�U
;3Um�Zj�{^P��\;�sY��?+\�y6�c�T,I�=f|��,n؛��+���}@lqv��<00`n51c}� p�?��_
�����1b�����,r�{����EQ�MO-�7�<]FWxfk��'��	X��������@�Ȅ����́�/�zJ�MN/65���W%_\��y��Ť8����7S�:=�JD�TX��rͨSA̰+�Ik2t�� <Ʈ%U���jVke�)qu739�2�.�5��9��t����Ra�7%��fZ��oɊ#�ؼ]���ZV�w���3S׽���lJB�}��s
�ak�(�*�E��&lu����Nf�z=o_W�|h���} �RT�V?��ROi�F�y�\_��2JK��"�e�����w��o�㨨 �2���]�
-g�ջ&�'�v���"f�4Ĭ�I*x]��Y�+��5'n��j�J>�5N���x�`b'�8�B��4���q��6z`�?��G�A��b V�6.۩�Bwt|ꦲ�.��\o�H��x�m���S
jd�S����*�,��m%>}UF͜��}�������mf'��$А��'[�y/���
Ck���X�o��ů=Zѡb94�|�8*©�&��Ӯ�)�
����7����U��\�p����C3���D�,w��r)���u-�9�.v���V̵�� >��yL?��U��n������g��CSu����6P���X��:��;0�p�^0�FR������*#f�Os����B�
mU����4����&)�co�e�v����y2�`�#�(��1r��Le�S�B�B�?w�o�w
��Щ>:�k �Ғ��X�/���d�T��`�`ӷ5��$6�g����V6 q�k��);z>�p�C=��@�
�̥δ[��W'�¨��J��$��1LLt*��n�8�4*�"�~]���ń��!�7���m%1�7�&x��"���z��(�-Tu���
��笰Ʃ���1an
9��uk
�g��z�kd}Ӣ���c?W�u;j�[G-ݛo1����6U
ض�Z��2�����.�i��"h��^�Uɀՠ#���#o��
-���3^��>��x�9#`�6��Z[�K�(&j@��������5�@]I����
8 O�)Eq�u$��?fԏ�.=
�k�[�5��66ɪ�%�t��]
>ۣ��l��o

�6{9�Qr�GFIs�`#����N)�c�/y�ҙu�*�~q*�9k��\��Q�%%����#W���1N���lG�D��\�
�~ �f���")�2NHZ�b"�T �E�]�
h�S'�NUU(%�zt⮦,d[��)A|�
��l+i`s;6ԡҼSյ
=�����ߥ�&���Bj�ח�P�խ��:�����  ��r(�n�[<�:-IYeBH�E��(bo���TUg����SE����#�&��(i��0���`��<��� �{�
�K�K[����"���8 at H<��Q�?K5C�n����qZ
���X�lgq��4�� n�P1!	)�����.����*l��5~ˮ��:R�n��"hs��1�
ߝd#��U�I}W�A�5����ߦjӮ�"ϯs ���q�
h��\ZR�9��%��p��v���	F�{��eo��g{��;ߞ�p������i3T�/�b{ �u�:骜wq��<�`��v�a��Qh(��In����	)��`w�L��'���> �vM|��y
-b���9&� �0�^3��c���9�a��Ie�İ+�.X���F��y?v���2�'�<�m@�
L��Y�l�Lq�ayg�n}�xg�
��{zZ�}bW����w
ͨȟ�b�O�,��H�;\�z{�S'�.)9}����y��x��c�V�1 ��2P�lq���l��}Eo�3-������[��Ŀ���fy\ oK�@��
��2���?�oB�|��!�
ä����'35���U�7M��Ӣ�
���w)9S�
-
Ϗx�W/"��CF/�+9�
-
��R��qX�RO���,dw�Ir�(p ��;:J�K�M�N"c���

4ru���Jw���M�14�lk�n�&
L�w��b����Ҷ�ؘ�QL�Tc���aL�����U�ɣ�Z%�o[���ۀ��M�tԲ=ͯ�9f�'��uO��Q� �����1��Ě���*��	r�е{�
�[K)�+�Yn5��9A�rHq	 _��(��3��S"����mwFTeS��2B�Z샎�3�N�1UY�0ɭ��;
�>�e�zO�Dn+Щ9&î��̢�����]5���|fJَi���
-g�B�ؤ�P�
� e��p�N%%�
��SMʷHPq�����C���
���wc�~.�I�gEM;::ܡ�&[�4 ���~k⏶)�'mH��[Rj������*籥�q���u� �,�‚
*B�EA����kƃ�:t�MU�Ū��t8�+�{�I�k)y3]����#<3�5^@�.�[��Z}�$Ȏ��_�j�-�g���5
-E�
��4����`��L��E*
���[#�o

%/-���Ab�����P�6{���>�����4��m)!�%��k
�m���bꞜQ��V���[��^�\%����G����~�>JL�j)��
ڒP�
�=΁��|�{J\�%�g˫R�� R>t�jW�q�<��(�(��lS�;]cY ;��K'6��C�1��oLr��kX�L�l�òo:���jf7�y��kG9)��(�x��]��c-Rȗ��{�-�����!�7�8���W�7�{�zd�s
��2��l�#�^���J[���Vl��@zQ���1��s�:é �l���6���X�]�W�>#f�5H��
x��!���v�����ᒠ���+����
�
-����KQ�@ܻ�d��"vw_��H�� �r��HcGi�� *�g��aQPr�a�c�h���z_��0塹6�[N�w��k��ٝ
-�X/\D}Ylߟ�J��
��[�#7�?
L�?[U�R���]�_�C�K݅���8U��R�݇3��=]���ڃY&���w{
�-C�;�o�ZL��������QD�s�Q������
5.ms�ҏ
-��F~頦�\��=��v���]ƿ
x�

v0-�۟��^�ƭ�R�:��5US�&c��!�g��>:F�k�%o�%�( Ob��+>�Ʊ){�4�o[�kD�zt��c�DŽ�_�d�{�误�6��-):�e`��ZfŮ��8\���k0�n-*�>�Np����f
y��1��
-������Y��A'mI1Q�Ȉ�~D�SM)��~4���ܺ�q�d]�[�Ey��|����jI�N9*z�+�^wy����bs�kk,d�
�n�ȇ��g���5>��&�9<���脻��5�.
�P��n��6F����C����|�� d��7�����	���YFHɋ�e/g�����?�
��:i1N�
k?����1�>�絮��Ƽ;���+fҙVؗߖ;�E6����
��S��V��
-�3��ܥβ����g{j*���l�?�� ���
f�1��c
�����ޒ����7��_
B��1as��֋
-^�F~���׵b>Nנ����Ϧ�K�o��`
-a�-9�?�k
��>Z�i{�$��
��My�OzzZ��
?4�xvY��SQ��T
9۝�d�%2`�3������1�K\�Ư�1݆�0W+�E�F�ѧ���
�	�n;'H��������^=W�6LL6��w���KF~�y��~̳ߌ5᷀8FlJ����!R�S�ĸ&�
2旙
-;01о)>�������WO��I��Fr�OK��>�1T�a�.��f{�=:�!�@�{0�[C�H�8.�&�&l⾯� >MUe?^l+�jS2a~<w8��i
cWǂL	�N-�3I�
L
�<Sbц�Wn��58��L�=�-'$�t�_-��>s���;rd��P��8��Lsҝ34��q�W��rȡ��t�E� >	�n�7:���a�7��R�r���s�SL��	�$�[�I�M b��!�w�8����)Ϭ�vw��qw���c���@[�Q1�nH�V ��U�L���� ��Q(؛5�5<�c
g
A}3��=��2̉�JL{���

e
�'���[��l
�}�
�L�M�f�<T30�ӕ��rb�
�W?n����dN����IqSu�������Y.}CB�]끿_�(
���y��U�zy6�ͼIKz~̫�71��soOUg�0��ߟg�0Ve,�>�o�� .z�
䠀
h�}��g
��/v��D=9A�~�#Ǘz���m-ۧ�C
\�@� �T�=�0ߔtc����|Gy�BG�[sm�#�0�Ч��w�3�K��wø俘��@��w��H	�,}�hE6�
}z����<�tma��:��m(��LS��aJ���Vtʾ�
-�mJ��ғ�¥��nJJC,�ea>5�
xbMM�c9/������Z���7�����}�ϖAt�
�Q1����[N�{ר 3ߊ�4AM�$�&�S�r����7�r7�Ik�Ԝ�O�����_��b��������fQ�����QpЏY�;���R�6ƒ/�ߦ��g$�m��Y�J�:I�9��D��ژy�PEʝn����9&,y���@��v�4�.4���S�	�曢�<���aZΖ
�����槉��{�Z�
�|�����:�'�
�dnM�
-m2j�W�(]�(}c&_�dŝA}:1 {|�~mKR��M~�0;��|g�׃i&����i.��
�g����~f�%�鮑��1pp6%
�.%&�&�0��M��\�w�Px h��It�[��r鉐���<�n[O.|s�6���rLʎ�w0�":�,�ME��E���,�Q�����i8�3�:B�]l/y����
��-C訩���3��7����ˀ�pJ��&
gK���
�c��~�tl��4�k����H#�b�7F�_[F�Q^

�$A����}��(�L��ixX�
� ���	Z��	b�RR�'󁚟��5�,���������tH`aS�w4��ˋm%o~+��R�������EAsm�AKͥ���ڛ�goI��[�Ԍ�g�����xt���
m�w�3oz�c���9L�7V�����Ex�̲�ad�j��R �WW�'?�ӟ=��+�~r������V�z0I+57�4B^���I�o����rI	9? O`Q S�ӟ
9���*���:J᾿������_ [...]
-FQ4�A��#]'��ȳ+��/�d���|яy����J��s�N�谹��%�v���v9,�Ԑ
�[R�߀~�V�ɓ
��#�$�LØo�y��%�3^
�ޖ�ܚ0ߒvϭ��z���k��`��ط\3�s����+�����
�KG-�x���`F��f��).���#�����S���[��a�[���]�Ϯ1|Ҏ� h� ���ChX59ou���9����q0�IB�LjLr���۞	���S�8@/R��������}C���M ��I`�SU�׵��K��������uog���i,|>���r� ��,c~?=N�<��U��,�@?l�b���,�C�CxU�,��"�:V��T�rkk 
�k���ǴP�PZ��i[�Ir��iN�S�D����
b��,,u��ޒS����J~a���~Q�H���<���^
�$\]-t��
-Ӯ�٩�F��OV��~���ڛbag��>��^���	~-�m �l�_m���� :|
�s�����m1cg�90
���Ȉ����Jf�)�(��ls���>|TUy�u�ק�-v�G�Nt()E���7:q�ͺ��gxi�N(iq��#�xT<�����J[�;��^~`d������aS<��\���$维\��(&ޭ��
^�_��!�|Xhο�R~���0��Yq��t�U���Y�IZ񁁋���.=<eKh���3��k��ˣ�U��d?s*ʣ�tp,0�?�	r�Z/�c����b�� ��cS}�Վ�Ǯ��`����}��Y�^�=�#���_^�+
\� ���MQ �.��oN�KM+74��V2�Ι�)�|��̫[�9?p{��GE(�[4Ưi|�G
O8\�T������Y@�N�ဎKۙ$f���R
�U�O6U��fH�UJ.�7�8�Ql�rK�ͭ�����ņ�۶at�g��^<��p�G�8:
��l��V
|��5s���vm�#= ����
#� [...]
-���5ŧ;���mi�����S��ƙ���(�{f
����
���7} ��j��}=.�&)y�1P�C|��⿏��&������
->B__���gSQ����c�G�܄ۛ FK>\��~qv���3�}Jb�k�<d�%���ۍaZ��
��������^5&e����Fٛ�I|Ώy6s���{g�
-�h�W����ZoŻ�^�7�8.ͩ$f�K�1����RL�Y�,~�D��5&���~?oj�z�K�~�q�X�cL]�Dd��?W�
��������mYY�e,��Kh�)���ܦ`�d'���
�*r��h����8#�Jev𩶊�k�~H�b_Y0� �ʖ�P����W�J?ε�ʹ�ݝ�̺�T�|�5�����M=gGˀ
�
-k�Y��
��������+�
�����x��]jnE��h�4`M�+��Ϛ��tAޞ���~ױ�Ϲ��q���k�h�e�—�-���_�5m���ԟflޡ	�f�y3�
0�w��Be��L�ضF$�ʨ�?f�m�F6姙�ۛ�{�7�2�NJ���$hpĵV9훮�ڟgS�Zb����!hH:�(��v���.%%�&��.
���N�:K�=��7:s�o���s��R��ptMEׇh�v�9�����lJPa"̡�$옘H����gn���������	*����`�oВ��L��^��U�7F�~�y��|���A�~m���e7�Y�z���e�_\��+*[��FH��
\�~^
���`��k��|��Y�ш�.-�5�Op�1� 
��FR�U���H���^�;z.ޭ�<: ��,��W��
j�!"gڊ
.��B,���q.d��9�����ļTQ�J��4��'چ��
��3
-.��m��=�^��\�z�6P��|�>�e0���
2e׈�YF�oH�q�&k����r��3,���65:i�+�C��k()�ܧi�7�M �Z(
Z�ϹojH��
{wa��0��jEE�[n)~�?�%���I&���M�H��)}3Y�s��9N�Т�կ��
���ڮ�����"�D���9�g�$S3�EF���{w�Yᓳ�
)b�%ȅ	7�I17�j6v����]�M`<D��q��
�!�^c%oc����
-8��,�OO-v(��+=�A���/�o���,}�()3��� 2ee�/ae>U�3�X�a�w'���jz�W�����.t��]lK�}`���L|�Z?$d�/���@��٦�G[�%!�,�@>5�N����̷m���?�Ff*k�t�
-�0��|]�
� 6`����+�ƙ
X�\	sM�v��J�JZ�J/�3�S߮�c�::�3�e����e[l�ee
#�.��,5d,4��Vs�/�6��Y낽q���.x�R�|}���&���!���#A����)�g���+��fq����Q��s|��

�4���&B��@�1�u�RnlSs��IJz������u9/�)ɑ�:�^���)�>rB39�^7����!D؎���jyD����g��o�_Ѝݚ`�m�j�l%~q�o� f�h��0!��^ C�����Eb`���)o��sZ\�3��n-.�6^b
/
w�(9.9�|}�������d?h��^�,�~�q��$��!�ʌ8�KB�
�5bb.��r��J�� .zk�ѭ�|���/�S�T��
-�*����^��V�c$z
�t����3	v-
�5sٛr\����(�h�
���;����&��qI�d�R7*D.�((
->�ڋ�Z�G/vU٤ظ�~d�\W~��H�m9:�G�T;�.�)���_�U���z�R��_[R���H�6%�`�
��9zﷴ��wΜ�g25�I2�Lʤ�j���{�]A�wP�W�H�*M��R�d��9�>��!���������
k���=
�yhg��Zt�s��-#金R��P����}ŷb:b��^qk�#��1�nq3
-����j�,�_蘈
�4���t���k���= 'z��h��
�e������������'݈�
)WN~b�~����ԧ�Ƌo�Ee��w��T��*8]��MV��
W��� }�-�������G��{Z��$��W$�N���9X̝e~w��=43I�

�]d��|�{�}u����6���
����c�Z�]V
��"��Z��{FTY\�
I��Cs�W g߷t�_t����o.s
-/��W�M�=ޔ �܂
c��_����?�h��N<�І� buN\���t�.�3vM
�G�h콝��`gӎ���7� �2P�-#����k�Ah��Y}{�=�{-�2I�(��,+my��F� _��d���?�6���
���

�$�,�S�
-T��
<-�–��b�
=�w����=
_�o&4o/��D�M�Q%$X/����X��}+��kf`��\����M̭�7�?�/�
�dnL�^�xuW�^]�4��O�y|x�JO�
w�
5�7
���
��a|�E�0&�@��tG���!m}��k�ы�����%�.�@�BN|'Lx�s>x��G.��Cн
ĕ��P�o��Yx~
��ˑ�O=H�n����5���$<y���wG_�ok�W!�q�UyQ+����X���� ]
7b��lyd	[��m}��jx���J=\qT����E[K�n
��討(0y�1ȋ�e�-��
�hu�=��S�tu��1
���i�rT�
��IR��c Ft�ڀ�P֒�-L\Xǀ���ڈ��
���J�3������T
�C�mHڞ�
�>Y�n�( y',�P��W��|Kٔ��:m��:�lxa�z��[�:���{�����K}Mw�**�S4��ID
�ۊ���{Rʽ/����ژnx���Iѹ�qtFDϢ|t�����
��*��ݰc�f�G��Ge�ʸ�ټ���
���{���v�(���q�4\>�� 
y��/��6Ru%1���|�݇x�=-h�
 ^�Xe�*i�g O�cW���^z����_�gPE�\^T�.�5�k����c���
�_��.3P�
LZD�)�7�Ѐ� t2�Q��b�e\��0=G���$���Y���<
����U^��rN��+/��;^�F۞fڒ�L4XT�-��I�:ZkLϊ���EP��3��%~���lc�G'�6Z�4��-58%��d.c[��$��g���gb&���R����m��L�����u
B_�#�
�d��q�
��ω��O9�����2����h{���/�Լ�1%�:�d#Vƨy#�“�ΦW[>f������n���3S@�el�!�;\�� ^>r�,�ۻ��žM��]��{���[�����qTY/,���Y�Gl�V��Z��\�����.��
���e�Tp��
 �/�D9Gn9%
�6�-��&@g�����"͎�A
/�!���k�ps��f2Xk�.���}
�kؒ}��Y<��Dn��Pyk3����	XrXMl<r�:�T�s�#{���x��e2na��K��0�;��x��ٻe��5��m��}h�?�x�q
��;O*tK�J�_�+��<#���WWˋ�;:\G\�(���x'����+.�����H�� _�;x�--�tK
/j@雊�\�d��Q�g�]S�r��z��f��ڭ�7��Ժo�"��\�':����&bW�B�
�k�u����cKMh��}K�y��H(�)񥑅�
[o�Kg�E�!��5�)T��K���
��ߧ�'񹧜=�׃
�
S��k��m�Cj��2�t�Mn�]!
���x�T{��2[+,����6�Y���`�rl�M�py��
Q��OU����ʤ��y��r���*tQL�ȉ����yP�{��I�����j�y\�VX�۲���w��9�s}�+�����m�����{q
��/ N����� [...]
-�;n�PWg�پ��'q
�����<K��]4tAR�ӌjWo�})"����?ɱoϙYg�MIfB3P�Ĭ|�}h��z`���61p�@��1�jv��5G�TR̎o����ȅ�z�S�}�v�
8{��-'�y�$���s��S�\%��7�H?�
kIئq
�59�,��t��2uS����޽@h�N����<Ǝ�C߱А{+���2�ی��-3�m.�>)�"nb��jrݒtoVpf��7O�N�˽5��
��ȷ�����Cqht�
-�r�$�v����\"�b

��=�`$�&��cFMtxPK��k���9v�. ����u�9B偳i�1d�w
���7�] �1��=�^\SRk�¦�~�
�.��jGK���1��)h�o�񆷿�������Sz~���[ʍS��k_��Gdm�@_ٻ��y��o��7����܌�09�>�{e��!ܛ3q5�)n
��gBK��
3�y��w��8
�2�;��7�$��Մd���A�c������W�Q%����}g�l�ښGd���~�H*.:�OO���ž:-%����6����
w�3~t�P�bRnW��94�
-v
�Y���G!YCҾ�rl�c�l�����_��?���<l��v��L�x��o�I����9|��_f�eW}c�4� ��]\v����y��q˃���?]���3��3+_��
��_hN��X�ʍ(I�a9�0���mȚ�����w�,Q�\�_^��'-M
-,��l� nt���V8���4 �O�`�
�rh�ŵЬ} ��,k��L�XG����rYx~�ǖoN�^��ߜ�&�^R�<K�~ퟢ֯NP����6�����#���I�8 ^;h at Wʻ�o��sn}�
-��Z6!�dA�Z9�@�nI!i�)PnT����K.�b�o�N�����ŮQt�GO��"2rB��8<я� ��V)D��ٕO�za����+Q��ɺ��T�m����-|��(2����"b�1�2J���wqC��
/�Y����g��;*���N��y�
��+L�C
(��~ �uσ

ov�Ԏ+�휀�˩�����Q�����y��X��
@
4��
����ZSԀ�n( %+,�s��ת`$1�*b&��(�X�O���2��
���_;z>%�H�J�oL@����\_���,_�Ԝnzs�i\���
<C�+�U����3�xm}��vL����Hk�1r��	軶��_zz�
wL��iD}��<v�y�)�
�Er�8���:��Jo[���T�5��L�\�'VQ�-��W
��Zp�P��i}`�,��/��7>��>
-J�� #'���߸���kx5WVz��z���ȂmkI�[2bˇe2⃕��Rwd[�����
5���6
-�^~�+�������g�����T���W)����(:�3�|��+<�$g���~ݳ�aY�����K���
��du�1yO��0���
�{����L���a`��aLE�s��嫀ظ9
K?����,�ȁo��"��w�1=,'�j{���d
�y�c{�P�_��d�S��rT\ղ�Ϭ�C_�&ѥ��k�βہD�
���
��2�����
(��+����dڱ��?v1�|��
۸��5�
Tt8Q�B�~\e<S��&{G������SMϔ���,�
-/�$��{|垞ؠ��\���^D���
-Y�m|h��cu��v@~��tL�̡�/�F6=�̡G�����C
xN����D�#@�4�Jߟ�e��?�����8����W~���=���� �R�RLG�Hh
(���%$jd��,��h��W��ʜ��L=�Wlc
o��9���
-0�1;�4�A
�%h�2v�ֶ�{g*n�����%�{�ӿ� ���DD\+� ���\{���!7�H�jyx�Q�9��r��n,�
g|=Ԗ��<�-)�~m��H��.8ў�-G�ĕ�wۉ{�
-X����:�}3�������]���������
-�c��"�

bP#�K�TQC���^tお����c}���
�������V�	O�߮��rM������Q���Q
,�#��5K��e
���s���_
-K�`5����vBF̸���H�o�w��}`DW;��
-~Y�������
t��a��:�/�p���
��=
�$�D����V@��]���Eg�1�?��m����u<v
"_�Fp�K��?DM�'>��td-wUߴ�~��a�;K��

��Ȉ�I̿����W}�,��S$>����"�t�����]Vdɑ��?����
�0����m����&�&�><}�-��sf~��
-�V�W��%�������i�0<���������D~�/QZ�:f�W
-�Tp2~
�A��t>h��vlt���N��op�/]�m}8A-�
-͹}:��g�bZ}��Ɂɖ�GzX���UTty��K��� *�:���wrF�

zhõ
Z0���8�"ZlqH�-
���
%�~[���X�+4쿽L�Gv���d�m��輹���$������������[������徖Y���.�ʯ�%�I�@
ˌ*��[jD��_
�‘�B<p�1;+
J�@�-
��qʹ�=^��
��Q1siq=1��a����
�!���Mx���3�c����|�c�dÝ}���莎��*��-
������SM��_�_�Y�E&�m�Bҝ=�w�yUgb*\�{��s��{���s����Xۓ���O@�}tS�*&f�!�
l�_
��]�
��ЛwT��C-��P�Ů��߬�`RB�*{��:�;#���⊖UzFϯ��=�Ɋ-q1Q�W ���-`
!QCR�:�)���n�_��t��
��sa5�fu�bS
-M������#�bK������ݜ@�YDÀ/���I��%|��
�5nz�poT"��ގ��HM�'�-��gQ)_
�=�l���
�� �~[�nyb
jK�L�����4(�W05z~��i��Y����;�6Q�xo�
-�_�z��k�ȼ������
�����aW�U�:X�}�����w���_m� ��#-����oN�����jn��2ڑAs�
-b����Zd���cJT^\�*��	�;ZB����Ӻ���{3�h���
-�գ˷�DПN���=�2
��%A˳

���B�؜��6�+~װsOB^�G���>	N�V	��Տo���b_��#`�[ț��&����1��R �v at l�P�!���,��������%lmd
�j���<���Us�
���ٕ���yg���ߌ�&�#d|�#Z��_}��S�攳K�Jn��ԫ'?iys�M9
ꝃ��Xh}�k���jT�k��YhK����	0ž鎌���>Z�;p�fޯ��7�#�D�1������R�+cw��Չ���
2�?��<0ќ�)�{��z��g"�'�@,l��H-��E믾�"�}?ۑ������r���yg���{���{\�z�RN�f�9Y{��_t��Yx-"-��T�;�!k�WX����}C:��¦%�W?0sH�zrӎ�P]$W��-7l¶;JF��APƉ����*_}3{���Svqk�=9��T����
��--�5n��̈́��
�����E���qe��jd��od`� ��t4�G�3��q�]T���/-��
xd
-�����
Y���X�g`�
|Z`�T�4������񆵻���|c�Vm�_R1J�-R�o�
����5��{�a�%�ޝ�mɻ���Ρ�[&~�U����o�����Ց�
-=H��1�¶�oT����
T�G7y�@�
ۡ�GVX
��������ߌ�
��YY�a9*o}�ᚻ��w�����_�3/|:�Ͷ�7íy@�I��5��R��-}�����?Jq�~2w���;Z�$�"u���P|�����w����$�e�0�{zLiH
-N���n�Y��n���>�ތkIЈ]����'Ai:a�C)6�=���rO�󘚊R�ks� Fc������dP�jh���o��n���p�k�0�N�~ݜ���؂�<��?�)�R0Z��7�Φk�	l�!�����K��s�º���,��������TA�����?
�x}1��(^��>*�9;&2"�e1�vn��[����&�杨������ӿ���L����=�cjc���;K�ʸۺ2њVb��@,20�ώ4%}�]}�r���r\��_y~
��+v��OgH�?SK�|5	�9m�n�1�?)�?xE�v
��=�I��]����7��_�I��%���7������`�G6��)�|d(�D�
-����%v��#o)�!)*=0�z�����v��-�[V��Ϭ��'f�55�䔁]t��YtU�N9/#'�\�*�
WКË4����铴<_�T�
�V�Y-��6��6 rw����
��J��c=�n_
ɋi�%[
-dޱ��UcK=��X�=�$d��H%��ֻV�2b�	��~�Z��3g�Vu���v/(�W�t7\�A���_}�����'���?��W���V�$�f
�{�9��
�r��S��Q<-�Ėm6�*4���AR�
-h�J�
؉P at S�����˸z�P�=�����,��ê`"��WlL�'�$��1d��]{}�#딅_q#�"�tb
-kN�{b�
RT�j����T���n�}�p��Cs����H t��_��9O��8 ju��������N��9�6����'Q���z�h׈o�v_�C'�.��OqխO==ŗ�
�����R�t�KVcʭC#��5���N��gkn�JJ/D5mo?8y∖���_1�J�|p��àm=�&(E�f`��#��W�����\Bɳo�ٷ�\�{
���
(�9X���Uqu�#�[FɃ��i�ò��-5<�/ky�k�zK$y���{6y�Q�<	�98��
-���5�L at E -��&�)�#/��J�7��>�a�4$��懴���y\�o����StY�z�[l��3�N�pJO��E?��J~�2�Bd���
_q���v_P��KRޥ��
|9��uǻ�L!_}�h}����y��rg��#
h"�n�`o�sĊ���ٱ��!
l��H�e�f��q
SҚ7�olªs&f��R̻o�?������?�q��X9��߽}��7F���S
��
�-��Kޞ��{�����w���=�p�-�?w�����6t徺�]x����Zl8�QXFd�rG��:,kO�*:Ҷ��]
�}�����<�20�n���.� ^~9
{��"���zv�i����^[�`/�Z2N�t6?�v�=���<aa�]ZlJ���V�zc��?ǀ��dkO�U�D㣠
��;y�m���Zh�"��5K
--�2����s�#�5ҡ��\�����?����}��@�BJ&8���U]5��
-���ט��ߏ@��.�5�t
AޅT
ʦ�
��!�������p��&�eZ~�%Q�
�`��m=����5qhc��zRCXA����R\^p�R�.g4.�[D��]S��w�<���v����s���
��7�Ր
�����(%-o�~�ͼwd$ ?�蔈��gD�ۈ�C+
�1�%�Qɫ��2
-����Sv�B�ꑹRȳ�,�Ip��!��l����_ �|�Umi%��Zf��Q���������;Dš�I��r�*~�ـ
U���E
Ȫ��5%�BdՄʸ���:,b�%Ԋ{�/�瞓#~�&?r�3�+6�-���׭c-�]s��R�9�>w�@j�Q7�����_����
K̊�jz�OZV�[7��G�|����>��f�������M�t���r30	z�!�
c
/�Ԓ

I{zTE(	.��6��rjMH�A��x܈����9�+�6��1�Z$����
�b2�לּ��($�k9���(��Tҍ��td=�������w�ܼ�vq�5����2�+n��/':ޞT1+�#�n��{~���{zknYy猜�?
����P��d��o9%��=�I�㳟m�a��]���$�	�+���'j
���.j�u1%�?���AE(�y
�sR�+>m����/�	H''�/�&�>��,���`�ޠ��
�v�kQ���w'��7�s���|cv at Z���D 훸�

���U�zxAP��ju
�N�ٛ8l�
���t4*�Ƶ��LK��D��������t{�s�!sg�zGQ��Nx�
��YTw�'��Y [...]
))աEJ�o
����p[ǯ87C(:5����Z���0�袂V~�����𗟋:y�S{�>�Lw���%��aּ�����|����Gߍ�ҾW��O8U7�"�s� �V
y�)N��R��Dlռ6^w�?�t�5Pqe����G��j/�3j~s���ج�߻�M���
-\�oRd�YJ��/*��$��Oj��)�)���g�?�������Ǟ��cu׭���R|�	A���':�}�oK[�C��r.ZE���
螞��Ȉ�;*l��X�u%�Ǖ���!�J��|�h+�H�RV�
I�ð���"6�ZިX9g{��|擐����|K(34
IQ�3��I/\
)�v�
~������
Z���g��Ø��]0�Ўm��B�
�pMW��"<`���g`9;
-$2ϑ�R~Rs/���I�IH��8&=4/DlN�jB󜶐\�_�a4�����3�t@�f��!_�g�Y�%.am
S0 N?#���8��;7g o�:��l,��2�ſؖ�e ��Y���	x*�#M CÂ���ƻ���
����!9*�+#LRR�V���m�G/`���2��
\��E� #�Q��&b˟����\ut�X�o!v�4X��<v���Vv�JE�U��=+�y`g�?:�¿V��eBӶ�P
��f�r
!����
;K�
-M?��Q
{�6A*t
t<Y���٘n��
oy`
h�f�m��
�Tهy�ARZ`�V����
���h{^��԰L�t�
�p�=�|"����:&l��$�ۻF�V�S���L�&��##�%ׯ���Rt��Sqn ��UOk�Zz��Z�r7��:�g�������y��r�rr��,�� /WFړ �]j�j��e�_blVx����" ;�G�l��|��
}��a ͉:���;��GS�w��)��t��q�fG�ۯF�k�p
��gH��9e�?%��&��?�i��Ħ=��W���(��
� ��:��1�WF��o�1)�-�S�� R�5��<��_��+������
��\����:��Y����������_4��_|��2�4��)��	S_S��2�u������FN����'���~&C�|�:�/�Խ��.���s���1� 0	N�Y����^ϓ_^���RC��-p���wS�ܤ#��N�s�о�G�D�wJ���3��_�m�G	�w�oO�(Y������
�;jLE`��
-(-����X{���M����ק���l�P�䴖�
[���΢�~%�_��$"�s
T�
i~�%��X�]+
h0�E
k(05�����>
��u6�nN�<ױ��l��܊���7�6f �
z�!mzz`%�Brd�� 䩭����
4-��V����6��
�PX	όj��6:齝�������e
>�������d~X����
��p5�ؼ�x8]�:B��(�w���� ��O��dc��ٱ��j��l�Pjw���<��?�{�
����-���W~ns
��$�z1O=C�WQ5�=1�
NY��N����

�q
�m��al[yB�4�E�L�x��t���E�C�h��"���-�96��%��bh�Z�:��[�xnd���l�!�fzGڟ�Eg֧(�a���Y喢=�1Pva�����d����P
Y��<cЧA �?Z9
��krl�W��|e |o}���[�kda�,��"�*���:>-,�6m���iN�z����E<vORK,J�"z]�o�4�︫�C����in1�U��f�]�A֜2�.M�+/2
-�|5ӑ�c�ܜ�t��R�Wpa�
-1Y=�I�f��fT�O�\��4?t��_sO$z�^D�ĺ���nX�, U�	ʱ
Qek��Sg���Д/[S���g|���t�>M)o+L��ѹ?տ>�5˰w]�r2~�#
~E-�����'T�֫����?eV>���A������ɚ;+���f���u7>5
-+��A)�;'��?�h��ޛH�C=�)0��z
��;v��/�7��Wܙc�?lyu��r��]
W�;|�з:^��Ћ�h�7�1�O��;Z�Xv�'%���_
�ЇU��{��c���T�w�ګ���^)*U��t��s�y�A����W�񪫁ɚ[�ceWZn�/�����揘W�.��
2�������'xo�vMdXL�(�R5'�o�B{�q��n���]	����^ձ�G�ߐP� k��
-�Y�.���ôt��9�/��1�Z���
��3�ZLپY�WT�s�jf�_�hr��^GT���Ј�@߃
�����_�;��q�6?
��`CO�-�`��}-���D[���:e�DǬ-R+WfH�*>eC�۵"���^��^��+�%�rT��_��s����m-�8����D)95������ߨ	i?8�
���9����L"S�u�Ƙ
W��AE~pRq�Vr�_�Y
�B��z\�u� �bC�j6b_OhI̝��e�@�D ��Y at dĭlFh��^�;K��!�6T���2�_�5/�!���;����uaeWbn��,1�3�}`�/�mYߍ#sά
�� ~�	�
�V�!��'	�|rR�_� yY�>9�vg�M:��:w�DpP��4C�_�j��-�:ҳ��_SR�6U��]K���p`����聺M)�ls�\��fGP��y-����!):�"���@|wFC/�cY
{�
%�&E�n�a���"�����N&cC��[�"�6p�A�9�a��z [...]
-���
�Q�ݭM�GT���
-[����8f���&�����T'�8����`���!`��!������S|��Sy�4�),yz��ۧ�fb��
�衃�
.6�qtg�U���ٳ�P�e
�=O�6��*zS"6I���?N�)��w5��F`�Pa��T����*��ww�4X����<4%����X �n��Ġ��+`�v)y��~�cvJ�]�ϑ��y�@.��
�m|�u���3j�h5t�g�`�=�!^��oy�ˮ�.��bzU�lvΒK�.uk��
�5!=�lS��qO�>�a�dyH�*�Ȑin&[ʯ�7��>���6mɩ�[JJ}�D�\L����9Z���9i��$y��#Gp����#7U���BᆔZ��`�lC���qr~`^[
U�;*o�M6>��
O��li��s���J^��m3
���@G�4�U��Zuho��+[_&��
M�IB)uL"R

Z�LF
8���N"dߊm�Ң
-w�	� ?�W'`�sȌ-52�3���1}�W+v }��g"=�C���>ӳ�iݐ�@�
-F�OF����]�~��ڶpi>Yu�,<v�~2l�QWU�ڀ[��H�i��1=�h��[B
��<Ԇ�^�2ץ�B�,�ݲ���2M+�
��\��A>�ɺ)��~�_�X�Z�¤��as{�gaSv �
V��HlK���h���V%�g#���*�"�*�����t��U}n�K�ELEH�)��u��'�:&��|*&(d�
]c��z~��8��w�?^����b�RA�a
����t�3��~L��y��}+�,�lό*��a%��;��K�ೌ�WZ��O7g0
-�Չ�;jf�Os�7'�Й�c�y����7�/�Pkr" 䒠�٘gԭMs
C�$�0���<��6E/Z
��x���2�M�����& ǴD͝��ӱ���^�a���2-�Y'{��s�&KWG��8&/�$5F4���)J�Sq�Ә��u _�_ ;��/uf��
-�R�j������
6
�!#P3@�%2�cu�UԺ��X ���9A��<��ct���=�<��h��y谒�5R�Cz2h]Co�X��^����Q+
�J��綞Һk����LL���m��+#���Yzݺ�6�@W���7�}uw־�l|�����f�h{�e�vw���h�������+�u��-Y;V"r�"
ZS��Lf�s�Ry��^8�tN
8褘�ӷ�����=
�1n ֭
���P�V"x׈����U{�w'SR�ʝ�����ڶ�n�t����[�����O ~�4�D����Ұ.�GL����<�`���	
4P�
P�j�Z
-(������&1"-���d�:�
�p}�V�] W�.���*kM�+t/p��"r�sqb�!�+�`༪���ʈ�
-ٱp�+�C��0����Iw�<q�HǬ,Rh���h��
#�eeQ�z&\F�>gG�|Ҧ�X�pCPM��T�74p�*��z���h]Ko�[Eû+�ޘ� 
ꉍ�1�k�8!͕��j�5������Q��tM
��=+O���b�
�j�4�Ʒ �E���.�Կ��Y���8F )���ǫS��m��
-�;�]q�Ϋ����y����vK�u�Ύ��^�#�8��_�l�Tt�B�����K����a-�61/M�~���]�`���*��t�z�i�<��v�����L�0�,����sԲ9a�uu/����j]!@�I�1�[�
�?JR���2rHa���f1i~@�G
]����XRCK,xTG��0X!��<�ːuB��9�$�T ��г7�ջ|��&m.�;�&�O�`b��m�����'n
��O�'6��B
-pں�%�;���
h�M%k��L��N��<p�g�=iC
-K���
���Q\Gn���7O��L����hp���{y���o�8h������Hֵ��
� ��y�J'~P�:��z]�~VSA1=R�J}�mI��{�4�Z�.��>��<�8�ZQ ^�LVd�o*��RB@tY�s���6G*߶�;��=�Sg� ��� ���OFm�;��e>ÿ��:e�M-�	0X��g���
%����A��#&
}M�ìȻЎ�.�W&�:�$�|zzyN�s,�`��}��M�(n�#�>;b���\ꞷWss�[6~g��5[-l�
-'w�l^�H����ՎYb�c��&�2���S�����y�-��SR�L4t�����(
�c���M��\�j�6�"7l��]'���F�"�/ l�BZ&"n��z��YB�
F����ع�{+]c1[��ѱ��o��͡e6a]M(�+�^
$���U��ݾ�wΧ`�9&(9�YA�v�_" U�0���vM|f��Ą��D�~�-�$b���M0���ӵ��~�-�`�W�
��~�_�';�ie�qf����e��q@�?t5e_ٔ�i;�`��%oy?���"��5%���w��ə���><{SA��\d45<�s�߸2?H�J��)�`Sщ�.��W��,���f
���L�ZV�����qͨ����ۘ��n�����O��p�#�7u��lЮ����{�:��1�}���u)�2�Dk�1��czb�_M9f)��rxS)�:ljﬢ�KQ%�9��BE
llDπ�5�V�,1��yL'&����ٴ���\�U�
DD/���:	�
v��(�4�
Y���:�8�dC
ð��κ�A�2fd}s�5��}��ᾣs8��9�e�PK\�_�h�+	�k����D�!+�si��釽\U�r���h�9~�7a��k;��|@�&
Pv�r����8���-�xj
��;�nŎ�k:be� ��t-�k����]'
���״b��r�Ϸ4*
��]�#}�ၺɮ��IA�ۥ��Zwe�Q���ŭ���v�趓��7�`[v6��l��
;�^}�I���
9k����M\Q�����L��c
-�.�p��Bm�0����ل���>M�ս��$~��U��׵
D��=�:�l�"�
��U�c�bvV�3QG��5�/X[$����3q��w�΢��z�,6sUGj���ăufO�B'��|ֶ�S�ctm��v
4l��#�L���R�r@����L��������)	�<��VvRz�������83+�
u�����:AG恭g~�.��<�EJ+�Np
-4����
D"��ׁ��bP�s���zqW����-�
�=u*�H�o蝔7�'Dӯb*J�9Mi}�
H�tCS!�ȼM*�i%��Ł�Z��p�un�s��e�k�P=��2��g���1���9���JX9�V�b�zo5��
f4C.������f��6��n�01+$�I���u����މF�@WѪ�Q�Ggl(�5=�
��*w(��/
�-��T.���&��5Y'zU�C���=�h⣷[�rk	Qv���&�h���e�dT,�w$��p_�G�ˊE�5l��
�����IZ�`]�v�>L�v���ӄ��Q��/�	kJ.�=/�0O	�
̺
-���5Z?�+�Wg�[�3�)��D5�[��
��CCMJ���Z`���^��kq��qt�cM�C���u#��0솎��Б@K���
�j:>vy~atiV%1��FՒ��!�$M��xI'
�¶��Ƃ��j��"�N��=��_��l��H��a���K��s��&#h�6�=����_�,J�j�c���@�S1�XQ�t�!�~t�
��k%}X���r,������]
�߲�.�xzU����S�w��8��X������'�Wc;.6;b���
��N�P�����\�":]T�
�Գ$dm;��%L�{_
X�Ĭ���r�ح�!W��؆��q��2g\l��q
E"��s1z��a*m�.+�ϥ������
�F�>�Tnm0_�#�_
����a˨aM?:mS����'�e0��
-����Qg
J�ҷ
-��Y%�i։��óPi��j��~�&*_T�`��f��B��';�X�NP�3�����r�W!����j�xvh�C2�C��B�,�K�>�k��	Wڄ,u.7����t������tė7o������O�4|K�$MqtuK}�Ѐ_�����Y���EF�l�H�c�Me:i�9�L:,m������^�x�mq�O>:�2��~1N��#���S�5����H�9U��r���Kh
*e]��,��(ܵuI��9���,k���dR H���&b�l\�R�-S��c��djS�񑾧��J�m�)���
���}L���7K-�
Òݓ<�~f��4;�X�A,
u���r^ʆGJ�ze}}�f:f�&ĸ�#�g�
E��Y]	�bI�bvz���<䙆"�M��L�;�o\
�4��M��6t��<:�.��
���"�����R�
-���B>Y����u̝���(�c|�_H��+)�\��ꋊ��v��A:?U=�ZQ��V5"Zp�K�-�k�
-j�Q>.��[���LU�wO����k��7L��
ד��P^5���h�$߮)��(ʆ��ʯ<���6&`&M�gEcD���@��7�dg��y�&�s��۞>y�9�
-Z&=�>�E;�771�
��
b���
�l�
�b$¾�)��b�3W1��^�w��~�ފx|]�%P�/�OX��5_�^�&��M��C��B[�~*��|��
-�Wa.�DQ���מ�>��R��O��U�������1�ӝk����ʉ�%�z~j��/���t���*�+!q�2�x�
T���x��eB��E����[�%�����Z{��Y�ݎN�c;vw���t���
" "Hc���`�̪����������|���:n����~�my�麓�����'����T��H8�˶�iČB޿�ok���`���x�l�zpH[]ڹT at ._�'r�ܡ�cOR�~���
������釿��1��3�z��
���'��/��9�� ~�˩�G����6��-�kh��*昰
<�2��R�K+/
bq��$A�Zlm�\zO���9X���^f�������;�WA	��[�ITG&��9ڢ�,�G��暭�2ꁱmh�(�Q�*���'im�S���L[�6��c��P3�P+	����l�gaN����_
-3��	?����=54˱�۟���2�O���_z�q*��w�o���c$V�πh%��d�KX�ȑ̛�"%<?C�ss˽��[w+���'w�ã��O^&;�E�n<� w�
-��@���zz�l㨸c��ڹ8^I4Ⱥ��"cCK�
-�_��XDV�������F�9$�5!��_��N.P��
���O�`��t�
��/E�s>C�*lȖ�4�O

-R&���nR{���y%�S;YLW9f�7>.DK���ʇ���]>e�x�8��S�������\��7



�n@��'�q��:}*���x���[�9��r<_߳k����jQz��cT��
�;{�g���w�JjI
��"qfr�It�+��,ȯ���D���h��Ĩtǁ���MU
}UWF

`��(����4z�J�=�ފH�|����7���{�����
�;�;D�
���O
S
�bH7,���E6�[1�ު�h�9 T�j:&
�u[	��M/
wƹ�����o0�!,��]|r���Q<�W�P����
��rp�&:|����K�W~a탮fE�f���l�XUu�M);�GD����
N�T"�>�<k���Tߊ�h��%��p�5����CP��k ��
��'��?��Ot�w�Kn�F���z���=~I�ڰ<^Sj�,�)i��}K*
�8ƄSR^�O>�"RZ~�Km��K���W�w᱂�&�޸�2���[�/��9���8�	����~�J���zͭ�J�fe��yZ�X2,��U����[^�
�)��S�/Q��WP��^zV��ਊ���-?�|��x�,��'��ɭ����������^�n.����賭`��u�
m����
j�Fp�ϱ����?~
-�܈H��.:��{� ���
3nx�n���	�:<s;��2n���L��~'�g:ڔ �P'ac�]d]�0)ղ���%6�y;�P��c�������<��?<{���������
��
���=�􇀔��a�8δ[U�lfo��
�����(� 3r��Ľ�D���~*�۴��lz��~�+�	��wA7>�3
�>!

?B��9x��:��a|�����7��t�ωËl����Za����dm�
gQ���fhg�`|C���i!�Ÿ�DQ��BH3����w�RZ���������s0�ƝG1��
��T�cp$�7P:��Q�E[Q�1%�]���|s�
��u>�S�KL{�%O"S�~	�c��f��sڍ�nvx��仔�����/�-#E��~֪��0#�&N�8I:qY��� ��g
-+h���J�>�(�g��W�� }��␒Y�c��������!̟Bb�`�,z�����oz�$vY�J�T�!��jҼ���/���nNl�W��Z��h�1/*W�ci?��D�"9�����
��!2�⇸�����9�34U���i�Ԧ�ۥ�MM
Ϣ*N��ꤍ���npk����[�,��E!���i
����~t
��p��� ���}��W�WT��SW��#��ܣj
"�t?�)�8e�T�h�~M��0=D��`?���"��R�e�/�]�R��r�e���%�������7YO��:���:�t.tx�"��'�x#>����_��b?mOK�\����A��4�с
l�(��bط�y9��b���/��䟲`�Ϡ��'E�����'��q?���oD�Wߌ�i~W��aK���1�}:�Yފ]Ք!��+�
��fe
K,�Զ
����'A�rY ����-� 0�s�}�I�
o�sJ
�s���� t�:�X:�_U'
-�uj�]8�����i�X�q�W���aF�Y"�6��vw
�t��׉��x��+��2(��S ��ga7>��nFd�܍ ��˦�^��2��ťʌN�D�aL�]����p�-�`�\S5�l�K�#�m"#���
��M��KW`��7���G)�?�sG���^��
'�͈���/��&����p�@#�@��[���:�pۨt�I$��z���m���&u��ZDcI>��O0��똬�߃�i3�_C�]���u�8wjX1�����7e��n9N���eU�a!���7��,}���>.���(��}@��W�����d��[
I��������`ʾN�E��X�c3=o���&�ǯ���n����&[.
�$"R_�@vw�pn[�2��R�O��|�S��H��4f�oMm{DSG{pKgo�`��JY��
�}2%�oiI�+�܌��C��
S
�J�}��ֆЊ�7
-G���?�f�>�-�!6����M��"2��
Ϯ�1�p;%��f�=;;��Z�XÄ��o��6�i�M5r0UΝ�6�{j������s��6
�Vf�'�unE,�ǀ��;��$�x�6��;�p�K
��lp�
<�߹�+

k�ϋ9I�B�ߦ��g�	
-��u�IYM�`;߷�O
-o��@Z�Dz������ap}�@dm�$��bHF3�P�jG
-�۽�]�
g

���]�YU
�h��q�ZR��Fy��JE�������
-i�\1ė�u��Z�:�c{�:����n�
��'���˳;u��%gH�n!{/�K�W�5���ꆺ��o�{o�q�;�j��DmŢ��D/k@
wq"�*�/�k)�[z��yd1s�	U���#4Ga�]��zU�^V�*�j
-m���GW�::��\��86fWOC
��
��t
CZe�X�G�
�6wJ3{�����v�!
�jzAӳ���Th�g<�:�U�Mь�1'E����l%��ۍ1F�� +{v�7-o!�%�0���@/nCi��������Ɓ��&yNW�<_�!C�v!
=]��6�g�6�
O�7
�K��"f�]x��(�7�FJr
����6~���
�����C���qKm�z�6G7܊�K�񋪞�
CwSW��1԰���+�f�*�zr�|w��l���3eQ̊[�U at gG(����U
cn��g�V���0��Z�+I��X_}���3!dLIQ���}m�ؑ����H�8
Gm�/I	aˣ���G����)�fIY�N$HW���:z������ľ
�Й[��a�?2ٍoK�ۃ�DIM�=1}��)sJaþq`lGS[�1��?3�7\�4]g�c�&�A�4m��ԝ���"�V�Z�Zm��cz�xNE�N�
co�(�Wu��^����P̞���ֆه:f���97��Wz�_����
Mq��P�IyEa#
����>�
)�M�t΍U�x	�ݬPy+`�_eR�",�5%�Y
־T�tn��\)�MQA�t��,���H�_�1��-�fUw���6]׸oj��1��v��
#�>��[Ssr�Uu�%mw����o�,gZ
��('k[˅n�S�և��V�H�c��u�Iqp�Y��[U�
g��p�2dC�.�S7� N/l��4��pY�V��I��'4��EmvE]�ڟ��;_�<02
-v�Ԕ��R��Z���J��>_�jє�4�����i�'F���\�
-�K+�$ʒA�S*U�Z�i��d���;�������u�O'�r�Vİ�JA֋�JԺ���)��
�L4�8δ�ߐ��[F������A^������l���rJ�ڕ#�օ�u1�ݪ�G�ђV��d	'��r'2��I6�D�O��SSǩ�'fVю�
]U�·
�׹��G��L��s���a{�ĸ#3���.<6s��z�U]���P����|��8-gi�:�K
X�"�]��e)+kUFK]�R��5�����|��pq�*�����K���E1/}e�
��d�\�F��C
�:�4��TB��
P�RxAHO���
�"��Q^����Y!#rN�H�7c&*�%����-uSݮ�U�.+��֗�hS�OLU%s�]W���s�
���!X�MSJ96WU
O�W!kjFޢ��=�j/�Kj �f�謁
�;V^��d at 6��i6
|d���
%X�z���@��`k�����2D��
������s�����B��y~��
��� �f��:Pz�����;�ML��6xk~6ã|]�q��8ss�����/v
)�%նPšSp2gļ�˕��
.j����|#���2��r'��HM�<3��L��:�Ū
�����WD���\癎�7��Y���e���TZ��BY����l^��Zmѝ�U5oþ,4���i�xc,�<�c`/ת�����E.��������{���5Q���@����r��6����$�8�,+��r�:
�x�q�x�e�x���`�\��a����9)3k{��o��Ҳ�������7��c3�|1͡��Y�S-ta��_m6����;
Hi	 ��7�_˘i�mrvƮ�
s����R��D��Ł"_%?�ّ��*%mKi�Km� �%�LG�9Փӷ��~�ڄ�u�
?hK2>�=]^�u�ڑdX�K~�'�w;Tb�:>��P������2���	ٵ
б��b��{�	�ܶ�=Z��ץ���	�����5��=%6vM��^�D�l�p_T��^��D3������_�+'E|��
��f=[��w^��.�Ʃ��om
!"��ؕ^j���
�և��
.9Qc�ƈ1�~��xe��R�o
-F���ʲS�;��910�65�PA�>Ҳ�'��q����9"+=�=	<�TSu����_M�!�zΉ��:�W�mڪ�=M)�2L����|��X�t	�`��f��ö$ؘ#-�pK��2۔�8ݘ�hE�NJ��j���cH���7FM:4p�rb҉����ecT��=9>�X]
��,��2`���ǫ�Ǔuu6C	ή���
-t�m
-��iI��*|�U�
[#>_�p�'&*�ĀM��#N����ő65%��\e��by�e�)%�
��8@��d�h�
mS`cօ(�M	.tOIϱiX�c
1�V�W3��l���Ҟ�~�?��jg����L���+�.p8�Q|�e�8�X�@
�𙗳���X�
-�z�#�_�\��P&8P��z�f��B�Z"�rF �����G`�{#�6lG' �/T��e��-VTΔ��|�MG�;�b��&̦��jĶPU{�XӲ�������> q�B=v��訋c���
ʑ�{��Й.�{]Q�o��l��Q�6�J;cf.��\W{�օ0�-�ws��0݂r�o�|>V���+i_,>C�j���#oM�$?�"$�T��
96hk�%��t<Vz��ΝD�,���w���<3��gFN��0��қ�dc ��
�gS��u�l��#-�� 
��X��PK?�
ЋoL�)o�[�_-v:�tA>v`C�n
q�|�Lu�QZ�oC��_e��[SթόU�wW����6Hp/6�ᩊ�)��L��@��lc���<��Duܝ���7�
-fΆ�8e
xͻ#�P�!�*B��yo��!��ħ]X��,}��?'��/tL�bG�����'

!O�5�
#1�LG�;RQ��g8
h���2⟓|�Y6��̂�oF�8)��H�^
��-uA?Z�
�M�.8��G�>��B����W��BW�_��'�E#�O��~�f6��d�h��dS��m���8�wW���>�XFZ�C�Dh����##n���7D��=��
����@o����-9<p[��)
83P�/�Լ?'��,qgF"x�/�yw�r5SYmS1����p� �{W�ܗ�C.LܢS
��[�w�%$ k�
endstream
endobj
136 0 obj
<</Length 65536>>stream
-�9X~��ůvey�
�n�<���B��(��+���$���S3!�n at E�( ���ס��pb��
i�u���
	�
��B)�n`c6�PA��Y���#sI��\Y��6�r��\�j<�oU}]j��?����.sK
-�[,��U`C
c�L�r 3��c-��TK��h9��8t_�lM2є�r��/egX��Q�]H7����-�D�H�u�\���s
��*���
\��F���
�H��Zrڞ��M�K�f�_�1�R|�R��Bdž��Ӳ�E@���;+���>����vv}>����`>��{�j:��I*��)�D_�-�,4�<Z�K{�я
��G͵"?쉉a��MqQ��-B�,���εx�����N�����ߴ���
o��A��c��
%>r�:˩u��:�]���jH{<Uu[_u{�<��v?���8>v�Rz�/�t��ir��QD��U�N�}\�{6���|w����p��Pqؖ���+�c�t)��w9�㮩���r[�#=1�@��]�&&mtE�g��u9���Б�r�o����=Y��Z@/w��E�>|�rG�����7;��Mq�G��w���җ��X�xoC��?
g�
>#���an�޼��\�oT�1
-��ܤ;V5�l���� ��5��rG
v;*p=V���f�p}c������?g��s#!	���}q��0��ҙ�bW��v9��2����
�^��(��JJ�Y���⨝!��
E��;���|��ɞO~RWex�g�K�c��C}
�ȇ
-��-?��Z�&1�
v^��}�g��^-�<R���u��K��㟮�g��\���t��0!�P# 
�/�J���ȥ�9A/���7�R�g�c�g���d��}O�B����Ӥ�##1�XO��6K_��k}9n
mYo��\����3ӵf�����;�_
�H)�Jʁ��/��X�
-�LuQ�Gia�l
P��:0^���M5���J������>@
-��'��3
,u�\�\о�8�ҟ�4�{o�.��� ��]����
-0v+k����@N�?P����p�}iާ#%$dCv/K��.�z~�b��{`
k��-��@Q�=q]�~���C��ԇ]��_W:Q��
-V澜�`@y��R�+���nt�;.t��9/PQn(�y��c
С
0Ә�PW
v{�~�X��vo�
�����P�D�|8D��T�rvDEc��[��Msu�C`�����`Cu�ݽaL�׉;�BSE�㥶4�mq��rW��|k�����eW�T>�H�3W���ၗ:|��8*lk�1ۖ�܅
�ӎ���L���:�j
�e�������fo�����UI��4���R=�'�]:x�
y���35��G1&䧭>�)���Ax0$���󝐠 �~n,N�g~Xh�z�)�rk�����&��UNM���n��*���Y`�C�,����i�?��qw���bD�MU
?Q����D+<� ���w��
1(�P�6Ք�Dʊz|�'g���_�[S�[�P�m!�oKT�o��n�`���qw�3}��rҡ�8{�7��r����rd��X�߸��QT��"��\{���X���48��
�s
-g��+S^\ͱ�� ��Aޣ�ĻS<�_K%�JH�(��u0�ws �c�E�h��Y��5-�(����^T�k������C9c]��Z[�{K���tU	�g�8���6pй��0�
-�G!�O�l��3����k��L���v��ׇ��mQX
�DI����m��Q�B��b7�E[��ZS��X+H�7WW�vSB����7V�=9T����p���x

-Ԧ���
�������{r��Ғv�������OT���F�2]�|����~�_/!����P� K/�u�)��=�V
���z��JN���n���4㵂��ju �?ݔ�)�0۔��X��b�
�[<����%d�b�ݷ�x�I1�Ä��FƎ��������\�� 1t����҅�9�����}�'�ӎ��m_
�ЖD�
&��v�o�=`����WBl��~�����Gv9�����{�c,wc��+�/m�F�r!�@Z�/+�iL{=ۘ��z���m��l���!����Q"v�~��\��,���lǹV�ˮ���
�����=�:��>߂�4p�����;N��|�l�xmn�z��
���W��NK
y.+
P�嶂�K��/����iYޓuiϖ;!^����2畚� ���@�{o�0AE�������aB�mI�	�
-J���p�<���.h�M5����.H����Q�{��t���̀��Ԭَ|�1n�S
?����r_Ϗ���grA�w:�Q�4��#U_��PN4>;�wcU�-
���]i^�?+,®�}�cA�;
\�۲]W��<�z
���iH{�ؑ�俛l汑���s�EE\N�5^N�T��,(=��� 
�K��]
��
Op�_�O
t�
r�D�
���*t�i� �t�}�hy���H�Ⱥ��S=�6N��_֡
�ܕ�b�I}���rZB?
-�7�/\�L�f>���<@
�QW��`�
��"�Gˮ���M�f,%
���[�7٘�ZS���L}�����G��`�516�X��a��(��w]h�x�X��b��/ÅO����т~^l��
�p������r�H9��j�!w�C�̷B�W%�0!/��0+���1�Ԙ�ڈ��
��/1�G%�GSy���NnB92�v
"�΁�;4ƾ
x��LS����ԧ[��w�Jt�D;�SY����`;�9��3��{ �ӕ��T�
��v�݅>�l�aRԣ�>b�r#��N��M
-��t�y�6��3TD>�^gZ��y�^��i�N5�]M�<E��GP�{�`���-鯵u�Ϛ0��D��G�� �����/���Qj�r'<P����7BJږ1���P����W�
`gCEڋ�����
��iS�Y���~{�a��"|�|c�������u�w�e��N��?X�ͦ
UY��zH������3#5
�����̏��ط��O�B��T��m5y��x��
��� �_�D�m
-Q^s
/M5Ƚt�
���Ć[D� 9'�r{�1�î�;�J������#y�>aML
-7�g�ԕ��L������A~N
-�Yb�ׇ��,���!^7��窒�OV&���Mys ���o

�*A���O6���
U�:��|�Vpd�D�ȡ�{JT����jy�����
A�)��^�s��R
-��
-���`�5a҇��,�
v9YB��(� G��\g�(�q��ќ�S
+��q�H������"7��y� �d�
iq�B�u��)�
��:�
�o�}��
󺚩m����}X_}U�#}U��~�ס��t��o(Hɪ�'���ћ2F��4��-�zԝA��o���ܘ��ݘP���;�Oyx=�h_����v ��΀�V�����7["R� ��nb���>^��i���v#�w��a+�xS3�u���\_%��G�H���2.�`����E{�v�
�����w ��������5��t#|~^m9.��7Հ?��b�W��}�d +bڔĤ���;3�����R��V�>��K�x ��^�x$cw�o="��Z����Lu�}
��Ԛ�|�!��j'��rW��N���.�ma��Ȩw����y�r�}
�֓�a���
�ts��U��)�z
-|��xe��7
b��܏Y�G#9�{���k�^صl�b7�}�
�yw�x�C!զ�'u:ӕ���8��֢�Ǔ�w!+��B/�wK��^B�ϴĜ���:.�*C��SZDh��~d�Z7�db�hY�c);��|G���{+��8s
��t���(!�ڟ�И�t�.��r[�K�0����}
1�V�t�&�\\礛K����]Q������
͉N�
-B��9^Z�RLH��ލ��s���������Q��QN�t�ٮB�%2�d�ǶHK���0W����2��o
���U6�E
-ڮ�e�v'��h���%C������ͩn6z<A'�O��-0�W�dȶ������&|��`�������&�9�J�]ENؓ'�{��	��Zz��(;k]L
?�
-�[C�ȹ���K
���`'S]�sy��!6�t��^h�}�t </�<�]E����J�
�oև`�+�`g��8j_Ãjs���3��6�\����ڇY�RB�lK�Ǚ���GjJ�����5���!�M�A�
��.���ϗnC�ʜ��{m�+�+C�
� !�2 ���Of�-��
�Ӂ�}fdlK`��"Tȑ����IK�oD8��ҟ�!w���;g�r⾶�2?@�Q�d?8�ğ���H��+
-�Wf?/�Ж�<�!��	1[�(���y_��ʯ
<�lȣ�rg��p��fg��NV����)DzZe�S}M�]]�X�����
��s1�Wm
��TЖ$�ú(�E��
��@� ��h�(|�/�K�Ky8 �'�k��zR�Zw򛩊��KMq�,���k�`w�(&�z�n?=���,��D�F\��v.j�1������':�⡪.����!N��
��ܚ�v����|�*��BG��C
9{�$�1���;���}
~jd��C�^�]�o��
̵�^�G}^i!�?h�{�ڗ�c�����1|�
�ڟ�+-�?���	��vx��O�处s=&�L�N�:E��ca���XCM����rgO��n����e��K}��F�K!=�ݞ�t9M#_ΰʗ���"N��-*�ߛ%�Y84����z8՜�#��rf�&�����Q�~���[��<M���="t�?�q�'����#G�@]z�Ji��q6�PǁX�8��Q|��0��L��ؗ���;�_/��;.u�;�Ǚ��j�r�}KX��?����N��� kf[s�����V�!A_�U�!zw��˾�5S��'#%��i9�*f��
��&ЋM1Ʀ������s�LV�?���]����$�m���)��/u��.���c#߮%g
(ё'l<�-#w�	�rd���>H��4qQ'ZRʷ):��Ă�H1�B�!�����-�'u��^��
�%Z��|���s
�
h�ּwR�/�ZF��%m��
%>v�<��Xh�y
i�?d���Pł����<��6d����;���k�����}5A+����V�pϭQ6lQ�)^�%D�ka�����׹G�u�#-	�o̦�un��/�+��YEK��J~�]	����L�?f	Y��)s}�� �����������s��os4ȑ�1��i�;����#
�3�
-~��]1�`�;PSr��
`/��

I��p�����xй	��ԑ���=ӳp�ZҮ��m|���ю
��䥿�Qpr�1~�����_,��\=�y�g��Ui�4��^v
�.���8Mԥ��3B
�5%;~� �����>x����zo��u�)��AB�������S�QS��l�-��0�.F����L�59+߮/-���9�=09-��05�]�O:11��3��=#1m�DJ��g�ʹ��)
��<��4�1vl*��_9�
QA�Rg�ӓ	*�h���d��v�C\U��F��
:�D�K x/q���m]��kM{�'�y��?�b��4&<��z�y������ljN��@��.࿷���'�c�i�b�
- }������\獩�i�JF��@q�]NM?ӳ�
-R�\;��tC΋
)5eUH�1Vg>Zn+t���R3�g��э�9Rҳ�Ÿ��^����7�	�Ax[%�χ��<��/tL�]�kj�N���ϧjz�}ya4����b��p��qJ����๊�x�TDŽ]�k*3�M7e=�J��6$�����u�N�Ffᦔ�&!�_�o
h9V	p�(o�()�H��ߕ�A�
-.x��Ѓ
�ij��ں�
s%��Ւ�s!�*�|�t�?X��E�+�ss�_�U<��09q_�����c�Ø�-i���(.��\JYS���
����X��� ��P���2��b� 6�f�\����y{*
�PO͹��#4E�[C ��1T���w GH���;*Z���U-gS
܉���&F��<Q�|�Y�2���u.�Y�P�
���N'���)
�P�����[d��
���YXk�Ը�6�dž�
�)):�@�5��-	���	�
�3#����0����W���D���
J���G&\�U�
ܒ�|��ց�Җg=5��<;�~��nǧ��0p�i.����F���^�p�W�����bOS-���T_����,���UA��l�
������*��c����F/|h �>��~Gl�7��
(Y���A�ߟ������f��MX�}Y
�n�
]�Z��m�'?���}k�0����E�C��m9#�p
�mIq�mv�+��f§]�Ԏa3���`�K]9/V��^-ug9�
a���Ԭ�Fz���]'צ.��%x�.徱2��� ��*G���!���!�'�������Gv%t��
)x`��օ�]v�=ƈ����tb�-v�\�Z�^�\��Y�j��y�-�[B\{ �s3�.ua���iU��
3qn`�먙�#�
Q��lK�cY�/65!��,m=��|7.p��t�!��X�����g`o���wG����++Ԁv
�m�1~V��B�ȹ2v

ln�Ya�O&Z��涡ss��<�&b��&g�ܰ5΄L���q�W�e�])��*.p��}�ҕ�|�t�,�x6)���aN������J�C
-P_�l�
�:��)�
����Mr�W��_�쎑��^�f��s6~_�0ݞ����l�=���+��]
9_S��n��8��,`��X�3k+��J�}�F��v%1�n���*�ߪ�3���
ԉ��:5�A����s<涂�Џ��R>��k���Ǧ&'*)ɀ�͸0����ѐ':Z�\7�}��zbb)8�/;
-=o��g�[,p;Pc�ϧل����
�Vf�ȡ��~2��ڴ��]
��<�->vW�C
�+kRv�0���B��� �C��K@�"���ܬ���C!�b���l����V५;�Zz6�b}[�
- -Vud&d�
�XD����O�r׆�a;c��3��b���
�D���ve�8��A���Q�	�G'
�u���0�o{�E��c��T��?V�c��|Ԯ��h��sOg9�)�@�	��>���<��<���M�`WQ�X�D�I�);*b¶
h�E���|0T�>֗��; t݅Y@ܔR��:`����"J�>\ԣن|�)!Z_��J�L�ci/t��\��Wc���
�e�/b���`q�e�3�[�7^�z�XO�]L�0V��^K�I��S�X��^6%:�TGL:�1
�JF憜�������8����J���4��xe�k�
bWӑ��J��*l�PK�#�Ce�Cy��M!���0�g�
���Hʾ�a�t,�����l��_
�w5W%�7W�=2���_jIxu��$�J�
ݸ ]u�}��y
��$��T��0���}0F��W�
-����d�/JR�_@�\�9�y�(NY��v��ؑA��Xp� }�)�z�)ợ��uq�ׁ�(��
_����eW�O76�^[��)Gz
�P����5��<
#�^���6ť�9�!v�+M8�D�ï���Z3�/��?n�!�v
2��E.
�Ϋ�ʺ�r��Ru�UA�w@>�+
�e��)#�^��],T��k�8�ڂ�
=���&8�S3�rb�N�
��AZ*�r��ls�����o󴢿�ٴ�Wʛ�fy��=O��Y��2V�u�%� {C�H���k���-+��R+�k�N~�����)Y#Ԅ��*�M[Q�
��

}�H*ؒ�#6$�I<����b�
->����|a�l��^"�<��D��t=�������n
�8۔Ȁ
#=�b��Ņ>>�
x�6V
�;��_���8ג�ً���?+�5�L�]K˺�ky x��A��B+�gC��ݑ��[c���㭵[�
-캄�؉�4U��`�
���B�K���lȫ�sB~�
�:Ȉ��Fn������G=�
씧����S-%}}l�%jJP ����
7�>�؎~������W�
Ҿ�OXb��E�69
ఀ=��6V�=��|U���H`����*!��
a6%�ĭaR‰����2�~9�*ޕ �'������Іoڠ^�Zf��&;5�R7Dy�s�q��;3����(d&�������
�P����=a���0,bG�
-S��=�h��
x��^t��2���04`{8�e_�ؗc����0Ss������;����RS����r���
<ׄ�G�،o3L��E�`�O�f3Ԕ��l䙁�q�'�Y�`�-2rk�;Z�u��Z�|ڐa".���3�����m
�ܖ�3�δ���SP��'*x{c�<me�c�0.�XK�9�b��Y�����c��3�������U)5y���YH���*�>P��.'���ʪE)-uI�=��N&YH��kU���T�	�F:�r�^�粠�j���h�=&��� g�jI��qL�Mu��DͶ��*��mݳ}�ȹ
�+�7p��S7��JI�9�Sߖ����l�I��籯fk�

p/9?�š���_kiӟ����E�ЀM=0�s�g����?��g�\��<i���|]��μ���v-)�D�	?R�C�e�0@φ�J
=mJB•�������
�\t
	O
��������x��
{
h�S3g�U1wF�y���7"��McE�ݝ!d���X�2VGYWT��G���v���8h
��A���
`�'nH� i}��H
a[���"�n�	��m��3Z.[]0��>���yM���
�
jK������G?%�� 9��f_��iZ������d����i����﷤��VY��rW��<��r�^p=3qEJ�x
t�oj�iJ��	����۴Ĥ�
��rO~�����)c���QN{
-F�����Wb#v(����'s��/v�~Gz.bE�L2�幮t����%�;b��^�@F
��Tw�X���*�Ej9��f���*��j��<
�̴$<Q#����G�_l��`3�1S}��Af�]SS�뱎O��䓯fx�c
)�"��n�Ҫg�M���}����7�ϊ=TaR/f�D�{c��#]Q��p����'�(CK�c]�K�,`gfW�ү����9�
I�ЛC�#�%M7��ٕ�
�y�e��8������ʺu%�*��G��S��u!�ˡ�:���>�|���{���z��w�'n��cmZl�MGα�8�U	6��D���ȥ��&��
���ӝ
xSJ-��=W�����Ԃ��U;���p1C+������H']���&�wGqI��K��/'S,��
���L�>�� �&�b�_�uEPq1�"
���aT��$
��$��՚����j������&��^
�Y��I�?���<���e} �v9YB�W�S6�I��rbԁ
�k�B= [...]
-���%��lg�硪��*/-�k�u壩��7ז�r���
������eST쿯b�m�R���
o�9��Q�'c��s��\dB��(6�@%@�P�V��^�`�
)��D���x6Q��UQS��Pw��8���+>P��,��Ζ��w�c`�}5-��T�t1�&�iJ�{ʢ�?����yf���.)
-�
!�.��E��53���A�*��g�PI�ۗ#����0��?r?ё�
l���B�m����
$f
)I9�̄�K)�M	��d�\�8=g�
��ʌ��r���:�m
��K-zj��
a��
��A
PoUU��<��
�pf�%
��[��Y+��s��rQT
���ش\�%�O&8��L�Xi�3uy��]��K|`](9�Ԙ��w��
^צAGX�=,��n��95�
-/��JW����6���
���o@ϝ�0�V	$xW��s ��|Ȃ��0�ϹΚ
�6AC����;���&���&\��/��b�K9]�j^*����v:��� ��{���ϕ���	
-��ɩ�&f��e6

�҇�o�~5ך�b_����	��*�{�C:���:x�Kt�8q{�q�9��� <��'��'x���V�VCq�T/��x����F�?��v���
@r������x�f�d\MrP�z.lW�ʰ�0Rf;�N���g�J�KmY櫥v�g��yR�uN:.�:BO�
�'O�f�P
�6TFݙxeC��x�½QdG�ϰ+��2�϶8���X6P/�/f�b��c�/�
k*黣%��aJ䁒�s8��T����b�e��[��O��I��.�*�vS9}S�N���/DžY�
]�Ը����W�Q�lc�C
���~�nG]�90 ��fh��	b�M����H~<�������\E�MWF�UG��^�Iߦ8�33vj��:A������\�����"D��	IG���s#��r��?��v��JF����rs�1XࢮHt(�v4���R	�j��
�-hi
h��Hv
�;�\�Oz=D�;L�{�/G
��ji��g⦅��4��v�{���S��R�R [...]
Z~Z�ExW�2�Y��ݭiJ��8�Z�!
ȹe�	�;�%�n�w�XzQ�Y at A��C�M��~���<�i
*�y>� 9���%
\��"�o}է�V���~蚚�Y⍘�

�ٰ�"�6c���,t��,�����8�.�z�:Gnp��9n�����i�ɘ��
�#�TIp�q^�㵰u}v��4N�T=h�`~
+������$�j\����"
� |^_�b7�I��pDDž�4���)�qę��ޙ�����CO�f���c�����[>�u�];��9����7y�����;���3�
�p��
n��߶_�z�=�W��&�O��o�&j�s���������������F�<���]��
-�}D�CF4BT`A��g����\��f��B�v~#iٞ���9���{ޡO;�
]}K��3�k[yK����pn
�{LÅ���Q-���ޓ�gx-[�Ē��0�G��O�~R�Kbzh
y��9n��[d����|��҈���}�:�5E��
���vf�
����O�[Ŝ����y�-Z��\s����z�����$<C(K*�-Y���k
��VG��
y����\�� >��^���u!5�%mf���ƈh�0��'f���j1.��"6g`�|�
[S����v
��Ho�똝�v
�c���<�dk��Tt��7��Hy	���7�
�S�V���9m�YTI ���{�٥�����%��s�A�$a��U ;Ë���)��
�
�X�j��;�O
�m ޾��"l���f�
Q�+
����z��vs{��LTGi�8���C�I���2A
y}k�����CJ9İ���+��˓�֐~tį
��"TX��؞Ɣ��07Fv?�A옎��#�Lh����Q5�fs���Q�
Oz�E5r�=t?�&FZ���;���H�q��rG#@m��h���#��m���D��������ǡg�
���rLOm
A��

�n�xߐ.�O�k'a�`2N!'��cfڧ�7�9�GBF)?�!V�0%�9dqR��ɀ��
���I^����������Y{;��v��������
���Ȟ䗄�M���V3�E֟�n���ܥ�:c��9eU"��,�|^��%���<�mkAԷ�(�D
RzP+!�T�����;�7��w�+����7���
�2�X�
�*j-�嫛���IA����cs�U�5I��=�>7R��:z��
�d���RR�ϋ�k�������	v
[Q-�ʙ��ٙѓC
-̵�����k��@�c��ǐg�Z
"�@�Ik(��Y��u�m����7���4s��r��Xղ��&V/������6��� תO:o�ن�O1��%���H��u�
6v��FG5�f�,�8c���LL�
g�
���,�RN�E��9t{�:z?e�� ���k��
���ty{
qv�M�)�'
-jKF?�NhEP+;��h������y;�}���E��Ӓk�	h��!� �a��^�n��Ãi��@�@pe�ם?,���7�u6me���Ri�$"�MBF���5���̕�"�t�}ϩ�w�gb!%��7I8��>8g3jvOLI�
/*6�z.,��8}ϱg�e�R1��-�yj����ʛ��;��u�Y�jj���hy��
-�#V�0
-r$f��΁��W$��$\�8�^��pffq!l��r
ǡ^V*F��x�լ�M*xIJ���t at -�{_�}��u>������
�5��6T��8ȓ,�
������_ ��-lT�ŧf\
|
�]Ċ��8�i�I3��"
�R��{�*x0��9��B�_�8¸��
T��l���%ꇰrN���=j���1������#*Z#�lX;�
�% o8=a
�À۝�J�I���W	`;
�.߂�gc�۸�V�>I��Q�[�oȗ����o��/@���:	)� �����j�����E V�����	�[�u���.���}i����!����[��G�%�vNY%��YD�z��t����"�R �`p��Rq:�`= w;
��v�u�7���q�}㷡y|YP�j
��}�%�� ��6
ݜh��7?盃�
��n$�"j�=�����4�"iR6ga6gڏE�Hc�k�c &��K����3�V�8����U���-���[�:�{b�c�g����?nO����u}
����U�3�.�&^ܜ�W��b�24�1E�	���)��`MZ�g�l÷���Μ	�	ޞ"@�� 9[ѐz:������P":|��x���i\i�)L�����װz�*R]TM�Hd�]��r���s뗞�}Ƿf��;�K���q��Q%�*�%�D�	5Y�w�&b��|BHMkI@�o��c�3��\
�p�A3�vJ�{+����$�6�u!�R�kYȐ
_�<�8�<���<=m��o�mW������˄k�A�+�'�����p�Ư �e�,|ae��^�W-��Úh��
�ֲPw��jn�{�^�WR���1������q37	�e�`oC2�_	3&bG�+]��_��Y��c�a�68 t�0�"7�̓�Z_���FM��g���������U�]���i#�/c��zfW���\^p��)��tO������F`Q�(YQ�"��pN����Y��޶~V*JJUH�h�YE�=���]�|8e�a�V;����j��$�Th��R�+‹�:��U�YzUF'$
`.%����PK)a��ؿ ����kw�eK�ѧ6'	��EF#x_��+���wȳ�EJ5�睛�ҕ7��}�E橵Y�| b����i5���A5�> �le�V�x�<�y��t�z!4W~%��^_P�i�-�k}��ꀒ^�
�-0�S5k�`=O>�|���o~ne
q:� [...]
jkk�,eG�Į��u�{�&zۮ�G-��b���g�E�,�u�=t/������&ھٞ�>����t@��΀ZӋ�1=�6�hy���*�5�<�x�9��n�z�u���RBj���\; ;��sz���"�?�"�G���c@���ݘ�_[z��7s	���>�S̙�K��:e��I at -8訔W�n�~�]�ќ{�֪��6{��O͠�|��|¾hj
����k�P�o���b��o�A�
<�Dn�&�
b
�)⿮
�VB��D��9��
-+�������۠u�][��>�/nBK!����8���9���n>��6j��<����14��U�['W�4\���蛬�Ϗ��[s�ҵI���Zm���}�
쯱پdmR��
]���J�@��\l�"�ǡXY$�lMJ���Tزͩ�Sq-�>a�"�JA��հ9�.v<m�|�mױ��ܔwP:v]䞴�о���r
hLlT��
-қ�g��E^W`���ߗ5
-��������o]�0�z�.:f
���ޚ�p�Eb{�U��
-�t��k�ӎ��
�f�K@��n���L?aO��u>뛄��Z���M˷��)�@���q����pϘ��^�9b�ѳ>���/���:1>a�l*8��q���9Z���nQ+�j}JOm��7��lX���$��9��Mkc���0�f\ǁ������.��|XJ�G�q������='���1
�*�Md��ł:Җ�
-Ii4�����r���,�;6�%y����rw6b��W�#N��j�:!m
�g]#A%�]3ZsD=R���ވJDr����1I������
Y��)���~�*R
6�q�u�ӥ��r�6���-ؚD��t\d�($�l<žG��[Iv�mK�)��_Ώ	p����0t�_��jظ�](5�V��C�5���}�q�1t'k� R:Rm\�������?��H��Ҍs���D#�q��_��`�q�2i&���+���c�G��F�N..�y�2�Y|����KO�������;=����I�ɏ[�{q��6j~Y2�u	Xy�d ������V�O��Z��3K��{D<�h�W��7�6&b�ţ~t0��ER����W̫G����/)��2�;3zg\�/_�8X at _� ���	3��HX]��o��Ү�џ�B=੕`�+��mܞ!���{N&�ǔ�N�=�vA
��
-��%q�X UlϢ/�՜n�ԁYru�l�������Sω�I̍��֞s2�1#
x
lG)�uR�O%�oOpj�^�U���m���,�|��*��߻�(Fx'Ž�������௹��
[z?
>
6�)
-z͆��P���l"��35�[Өb����sԆ�QLɺĂ-�?���4��f��xk
-{e�e�Q�3�GU�
s�(�۳�ƨZB�2jFKx�P��Q��}v}
w1���$���8���s���W='cj|E\�+�������[3IJ�v�5ɶfq7<��
͓�B��$��G���<�"l�7��5Q�\
1�މZG�E-2��<��������k	
��=#AYğX�n($��_��㚂
-l�맞��տ~O+�������ba��S��+c:&|s
Q
��WFu�ư���0�#Z7n��7gi����Y�D�qJD	�����q-�%��7'M<l�sg"�����u������1I� ��Q��_�

���i���9�s>���D�
�Τ�E*�YL%�w���\z�Bn�9�#�EF��I۟�8�o,��~��{���-��a�Y!=YX�1f哶�(u+���O��Z~�WV� mO[8ș���{��\˻y����

k;���v���ߋ[�~r
y��
-B
`yXGk�驀�J�z6��
�����,��|#�`6������fc�zGXI�
/���
2kcJvG����5̮���Ș�����7�{�*:X#NkB'�F�
-ix=�	�eãίB
-j]���&��2V�$ړ�7bnDu��& ��>ad�6�,�ژZ�
+Y�q
������^ۗ@�tG
@{�%��v��J�1����la"&|�_��Z6e�`
-��q��;�|0>�9
�������7-'�Oˏ��z�z2��
�����P}Z��au�ghu��u�,�$|iB#��t�#ۓ�ʭ1�y�ݦϝ�[>��<���& $�P	��s���ALK�8=;S�K�Ǖ��?��}LM�e
���v�4�cu�T|\�8  ���6�Z#����:jK�`�( 漷^��2
���ሞ
/R��
`��̞�)F��;FYX!�lN��^�~�9����;��1F��8�#2��)y��IZ���(��AL�7�Ê��	WCjzK��B�BA�6� f� >	t+�z{�t��,��_���Yi�}���
�&���R�k��
�����u�#��廗��?���d
���g`$��r�G)�D���Y���pIIPc#&B��B��,������xg�ڙ����[����-膭J��5��%�Z�x맀�� ܬ6�f��|��%?��l�M�;�+Y�D��^�?F��������W<c���6&f��@��
��TY 9�k���
~�* n�J���~����+����)5�n����y$�=�D�qp��u�s���<�RT����2Z2F.2�9i����م��]DKY�
�fX��
�%؈v�X��4BT�(��f�U�ָ�ՙ2r���nyR��
���[o����0��iy�����Wp��ӂ�	J��a��6�X����)	tj�̣e
"V���|�jm	
�>��8Zh9�5�y,�@�2 I��<�+i������j��?
+�Zh�@O���z�5�=�1�hZm0����~����S�Wi
�!o�ZZ�����
-��{�5�r�V	�7�e
CU������Z�: �ukh�9���E at HyȰ�ڴ�����׍_fag�f:m��$a�G�|d
`Yh�ĕ����)���@+1����	�,r���P�(�������I5�r�Jn-��ܨ^Dܙgև�RbP9�i�8S�kև����k���~�g �;r����M�͹���}�>�ۻ�;�a"�&�7�j!:i�K2P<�$#a
�'<�
}��J���<��
���������H~;m��N�z��0ʅI�L�w���ewA
`" K�Zv�ޒX��s��
pպ��ڜs��{n%��'t��w}��������#Z��M�ѥ�M�l��_>R���ẹ����Q���S�/�� �J��;yϨ���6�d
-�j�H�I�䤙�ژB�j�m1�F^q=i�����O�>�3�&eĕ'A=�[��]�L��˥a
����k�����
�����~������ޒD��qP���)5�;��և}g6�w��x;PK�zf۾G�����9���0B��,R�"���ln�&��l >���J	���,��r}LMk
�Xm+��=vƱeY+�ok���U�7�P��yAoP9�؞a5-=E^�͐��3����
'��s���h:����|8a�
�Ki[������3�l]pU
�E^�ϣnnLcn��RH'㤬2A�%�@�a\z�W�1�)��
בA�����q%�EFc�ĆgM���"��ǚ�
����/'t���NL�-�:�'�U���C�Q�{|��a�7Zy��ѪOÀs�,|\D����;����hB�(�Y	��B���Q���*)!��5��ѾYt��a��x����
t��������}@?VoOs�7�D]K?�.g�O����I�.mR� {r��
Cq�����C���To��_��"��}�9����P���Yy���M�LXY�i���	�!%�38Oi���KClE��%�C?e��No*-!
�%ibc�&6�7�)�=n;c�_|c
-W��
	(���g�r���K�k�/�F>�#[0]bB5nז��i��Y�|4�!�����g����%Q-�$�"w�.�~5���
�
������
3Y3�}'�%�&7�,��P�_|
���
-^�3
I5�-2��z������y�rlg� x.�gm�Ta�������+�9dîM���h�%� �𢔁ӗ3I9�\6�z
�1g-O��lO:��Y�q�M�u�1��4��
-֑[����Л|��?,?�<��y6� �'5��
�/g��f
:c�3��Ŵ����zʈ��Zi] '%���:�?��ĉ�������
qY�Kg���$�<���o}��u�۶f /�e4�渝q� 
�����+����SԳ��ﻴ0t�-��������
�Θ^�H~�H��dߩ�ɮ[s��I����m�NP��$LB�O!D�L��Z&��������#χT��i�{	-�#���-��7ƑW�jt�'��]��[�l���7�xͫ�pg
`����,����'��gM�Ƽ���5[s��`�z�Z\uP;�����1����9
�N�84�
-���kK�P�^�_I)�Ui
�)
x���[_앸��
g�n��Ö]�ϻY���E�j�!%�!ib�bf.n��ؿ(�8_�.��C�ݞ�;�4��rN&�bfz����i��]�
��}S�s����"�>c��>�������M��P��>�<
yۿ�
-v��������	
�M:�`�=������$�zw��2f3��a�����.8���L5i���:�8cp�&�Oo�㫣.-mcc���
h{BͶ~nG��Z�@�c&N���<i����u�愁�5��
4��A��?��������^ݷ�=U>���z:����X}��˰Q�,,Ɇ�&!!c`v���3
����f.2k� j}P-��POA\!�������ش�b �v>�`�+��q�>�bw��BTl�\���k���?/=�9S�j�v>��
��M
��t�i��߆f;��������������� y�(P�|� &g�7
-juX��H[�l���i
Q��^�����ϘEӃ�/���V���3,�W�M����}���"��<�+���!��4�p N�%��|v�ͣ^�Yp�[dQ`Jз��ߥh���K��4���Ԗ�����c�&�lO�JB
-�͌��I�hH��З���� �,�
�EԠJ�ߘd�x^V���#
쾈[��u��L���:zg� ��L��Cs��F at H���g�˓��?�Kʿ�!_Y>�u<��,��A˗q�:k�w�

�������oX�7}�}����H�)����3aq-��iq|����d�:8�[`w,�#]�Qbo$t����K��%�mN��k(�=�p/aPKk
-�	7�&Z[�����;au�/�/�/�m\����KP�eA%���0�=|VRKlv�o�n�I����?����+�����GQ-�=M��ؒ31{Sf_P��ޜj��=�)	i(�Y�T^p�O ���R�v6&8ix��l�D�Hڸ踝�M9�
XӘ��ѐ��^.pEɮ���uQ�*j��8�$���M���g�Q�%���̓���P�);��|;�P�:�
ܼV�����;m��L���7gzH��P���
-FmHE������������Y;�kk
-q~�5�dL�l�/
-�9JMx[�x��ZZ������ ��s�qy at w�1a� Ӳ:sZk\�s:�l�>���
Zd4D�"�O�z�Ѽ1��f��W+Ϻ��f���x 
%���� ��-��s6!=�!T��������ͷ�
�96�F�bb
���Ɣ��˘���V����s���"�k�;��W~7
�(na��m,X�B at _�tldl�R��
�yr�G�X�43��..���bzfgT��������v|����?8d�^��x���5��
t
��{���qvuH)#�L��c���9J��X�����$��x�����>��s��A���E���SܺO�<�5
���4eR6�	��}E	�<	�zS��{�_��akQ���GR��ʤU�
)���d�������滚?z��������f!���Mbf at I�
k�M)����$�]�?H�
b���
�f�("%�<��%쇄�G�˚x�
���o^�h��"B�ss}q}�x��
-�Z��q0�vJ�{�_e��fd��Y��/PEQ�
1��o�gd���1�������)�aE,��*���,tO���O�s
8@�U�$|�w��+��)07?��{k"Y@�����:e������?n
���Za�?��e�nB�_R�F��%�,�9�2�<\"�
S絕�7�z���ﶦھ
��
<d�ȁ,����ٕ3�3f̍�
]���;�&ś����,����ل���
�������Y�=�<o��<�qWgD��K렺�h��sZ�@���IM
�:8�-)M �dI��b��뛿v=��O��v/�T����<�jy�pyc�R���F��+,B�Nh	�[��OU��\ѾW$�9����|�Eӑͱ֣)%�y�(���R^P�jO��Լ}�~�5|/f⢷�����i=��]Ϛ��=��N��Ǧ,|���l$g�`�
-����-GU��X�T�Kp�=;
�0�#�iwI���.
�;��4��i#�kg������,��>ϛ8��,��o�ߵ��?��
x|�*����쀊\�>���
	Y���61;cZj��Xﱵw�Gw
Ć=�*�:�
|-��������	`������g���%�]�D�u[A��hy��Y@�uJ�Y�z����U�Z�w/�E>���Z�4�������^�|�sp��+���W6�v�I��V� /l�d��
���3m+0žy�A�L[FnE�v\z����
HwW��au�a��?o��
�h��|4��)Z��Gʹ�aQ�u�]�޸����xݟ\���h��9�D��<���
������;���U���:���
�뿸9�sbku6j9X+��{\�
-t�	TE�&���+�偆����'UP_�焁���z��
-�����
�
p�[�d�\\J����Q�y�:
T2�
�y���y�S�Lw�~�5�q������C��=����Б�f��
4;t�١#�
9hv��A�CG�
:r��Б�f��
4;t�١#�
9hv��A�CG�
:r��Б�f��
4;t�١#�
9hv��A�CG�
:r��Б�f��
4;t�١#�
9hv��A�CG�
:r��Б�f��
4;t�١#�
9hv��A�CG�
:r��Б�f��
4;t�١#�
9hv��A�CG�
:r��Б�f��
4;t�2�?�5
���~u�h
[��>���hi�yxފ�pq�O?9�8U�斓0\��b����N�<s�ȩV
�z����<v:��&Ht�bE�}w�8��
-�>9}����_��}r�R��K'�^�x�™����.
�Tt���sgϟ�x���3�/
��?�t���ӗ/^�p�⥳�P�N�/��^�|���N�;�� ����ŢK�������
��?2&�'�O�>�����#Ǿ;���I����Kм��y
b3�
�����p`N����u��({�W�����9s�;0K�`�@�>����v�H-��
^
):}��H_��#Xh�Vh�gNC#��̝�Xt�ⅿ=����]�
�������_���߇��2�"h��G%��+�۟�8��
-�
-�O�'��q|w����Hw�'}�'~	���<�e�ϟ��R\:����"���S������7���KG΁]�e��@o<��ѣ�

-��#�Ο9s���5���j\#!������#�f�č����ڙ2�j�J|U\Ok����)��Ѳz��	��EJMh�ј������2H�q� �q��f`�Mw����iz��|���<�@,�/+RZRML���6	I1Ý�Q����AqpQ�����g���Y�A�zBA�K)���Q�Z~K��
g6'
���scg
yas��TL���ب
q%�fRGkK[�،U�L�
q5�>���n�c.�T��}��@���%����AD�:Ĝ����)�����4�Fd�ј֋iq� ]�}BxJ5$��0g�Ǻ��x��yh��|Z���hE��QDޘD�_y�yt�5���;����m߆�P�����NL���15�+e�s?m�����RF�)���

��
��&zw��#���5�0	-�-����4�ΐ��ױ:�&Z��d�����g�&JK�, �9���M�M�5ٚ!��̒k�F)7e��J]@I���9�:xԜG�OX�
����TJ/��
\|HKmιE�’�~�ɧf
\|��% [...]
-Y������L�q
��!9�墂P3!I�L����<�9o����3	'c��.
jԝ�2z�66*�q2�=15�5e����i���w���l(�`cfbS�Jl��u5�§ 6��\p<��G�ò�j(���z�+	�R+�0�.�4��`�VZ[BK�M�
P�#p<vX�hݜŗlΓ�cV>n}-��jI�@���������	�<����'�
I��`�<4Ҁ�[@\�k�W2\EZ�-O�i�!
�5����(��|S���W��|��TqZE��i踞�79p�W�ǰ@.b�F>:��(�x_��t�7)�&k�"3&19eSSf	=
Ɣ1Ki�����h�ȵ9+
����y������V)�3���9�i���ǖ���
�����r���ค�P��9�͝1�+O�������_�T�j"Zj�쭲э��)��E�vP���}^�����_������P�X��J�)�����^��Pg@����9��EH��Ȼ�����䳞�S1[�Jf[����Y�y�;g��%T��Q�J)�I
�&o�`��rv!5kѲ6)/�M�%��V����Y�͸$´[�Hڅ�,�s(�&�=�wry~6�?�.>�z���W~j2�sJ�Y
�5S��F\Yށ�ϻ�mQ3�ZH��5�KY�$����ޞ�Q[�NJ{�A��	��y�儎�+X�>�u�}���a=�ޯ�]hq�I� ��
�	�(�摡fY�ݱ��֓�U@��ɍ1#�>j� �P�	'�
-��sȇ26�4c3
.6��k<v��%glr���N��F�<T�*HX�l��Y�+����P;�ޓ��]��(z�Gt��XO�(��_Mq����?��R�9���ޣQ�&��r
1?m�36>	��p�!�"f����LSJw�h�a=01��Gk?�|O��e�]��P�D��o�z{��ۈ�
�HL;�Q���=Gs 0���-X=i=�*����>�ܿ@���$��9j��K��w��~g\IoHjH��E���)�ݽ��m���tLH�������O��K��u9�20�S w`�G��F�f��)���4rai�����Bu�֙�.*m�
":!&8/�I��������?����_,w+m���UlZJ)��;��R�8�zh�t-�$U����;��}�����/�Oa3!=��7�-�x�{!4�*˙H�9#�F�Lj�1A}���u

�:��=�H���;� o2	o��l a��\ĮE��hR����='�.��T��N'���ix(�!օ�������*�;�̤��O����
	���4I�I�v��J�rK�sށ�K�M���-%�* �
-ȑ���;`���:���,��w
? ��Ș��Q
�8eB�$L�Am�٠^
5���5H[����
�9�}�6g#�F\ڜ��6�b�lw^�
�w�&>.�c������Hy��[*˸��4������y��I��P�*���Ɯ��Rp�0Y����k�ZRm@���ZXa�˲H��56%iat%�\x�F�ٳ�k� ?#�
!�}�rH�!�:Rc�L�MX(�#�a{
Q�x����KBE��h�?ͬ_Ü�n�-̞��ڞ�1a3�7g�
-��Ay�"�$Mbj\��Ik���/��Al����{����]i#�Y:N�@i�����{�
-5��b&6l�iҵ4���<�)�b�'5�ƴj�LiN�9�]�[�;��js�t}�5����4��h͓n�	%�9ry\�hM�ݞ1x��{
-���aP��i;�b���Ԗ������̰�ii)���r}��@&L���U
��Jc`{L��
-��]�98GyI�	Ρ�����'1R*v���h�=�bh�^�5A���ԯ���V��_�?7�1�fu�v�*�m.R��z�1t� �#�D]]k���TǷ�EtIPE���FB<lB���[Ŝ�]*�u
�����Y����K�X=3]�I0��VJS���N[%AE�W�v�f@�m��φ��%{�_|X�H>�XI�X�ذ�YDME���	�-�N�%d�W�2^/�
2n�ȋ�i;7�X��{��޲H��
-�Y�?{K�/�.�
j�Րkwm|ڞ�����^
=�d!#ZJ}
-p����
-5�̙��UH˘])#�f���/�z�1:#�A^�2(��EL��T�,��@���X�	+��*�_�r��?�/�1=�
�q{�Ji+xX���ֶ2M��6C-�;G
����+`�q�@�BiIz����ޙ�_����]���k�V�5t/��6�ys�
��>����3R[w
"v~Y~?��;�έ�5F���Y�3Q[@-�J�X}�bg��Ҍ��z	%�e�'4������4�8��n���
�����P��f�f!�f��t��U1
�1m�w���Vߠ�*>j�>4������a-�2����̐��fȥ�	�9>����W�>1'�&U||�V]�^���6�{l�u�Ѱ��p����Μ�4 �DU]'cꞓQ5�BT���0q��jV��
�t�H�
�{.6�[wH�-�(1W�*ܵ�I�����_�u�����q=��7
/Z}�������W_�}�ė�Nc�IE����\�g��� 3�Vr��a
�ү&�
ii ���]� �ղ:!l�uqp���y��uppi+��`���o�֡a0w����J;����]/
�w�z}*\�o����9|�ÊP�a�ڛ2�������J�au��Y+�+k�b�N+S����_!�� Nq5Q�"&ZK��F�<|Z�-dA�#���"F�)�-IeV�C{KB�����u ]b9g����z�sߟ)x��.�E�%>3��_{��Fd�j�" ��F�@ - at Hm �� =S�4���ZRe�&�G

DXK��:��{䧂w��4foU2�_�PR
ZOn���,		;�D�џ��>��NƋ!�t�g���g`4� ��-M�	��/mdv�4����X7�Vzo`A�y�i�}g,n���z>��C#��.I�Q#��������=H�&��>B
���������_٘l�fc���&��u�e{M���u.��7�؞�r�"��
��*��a�W^w������l���1CM@�~FBu€-�ja��޵�i�
�T\�C�lB���jL��j���͡.�����<������)E��&D��<�.2�+��cJ�����"�"8���Ԓ�\e\Oi�����R�G_	. �Z�*�j�u�
���b͏�4ޭ������s��)#�BjrU`�x3�$UD	��ӈ���]�oM*Ӏ�ŠF�ZZKDI(ߞ��a�u۟�3�k���H?q=� \`%)	p �@ �EkM�9(����怖u
��!n��jrmTE,O����=m!7�
bA~���؆F3��[��4��"�׬Nt}럣�\�[I'��3�6:
�x����T7�j�vJ[��D���9n?KYG�'�@Z%��I
�:l�6�A����*0F���D��
-����d`�#��%��V�J�&K���	�
���<)�}�foU$��!���*�9��_5Aʂ�-إ”�ٕ
%�A
�q�{
-pʄ�ޖ�B��Y=Q#�%�rr
�$�J���.��#dPG�y�T�[��
�\�^f���x������}`���*��2z��o�/`JR&>6k� ���L� ����� =&˻��N
�&fQ���
,X\��
-,�qix��u�Ԉ-
��q��cz����/�^���7��в�6��.���?[
vKhy����Q�}3�J����%�{�$��[,�VP�}
-z-�K��)����x`������(8�[�PC1$���r�
?����`|	�u�]����?��i��y����7t�wh-��M_m��?�ga#sFVO
-�sg�������c�_�:P
-�PP�R
:o�s6*���4���d�1ۓ�?l��<��E��=�
j���#*j�w%��_Oh�Y
�/a1�H��X$̤�ݻ5?m{\�۝qd�{���TR�A�9ł$ę�|L�(e�ri�*�G���hh�K
!coI602���{��
��s .�P{T�c|mn���x��
C�vsR �A��Ґ�1���!7�\<j�N�1K��ľG*��<�:����@X��| �_pȤy�Н�s�A�ֺ+j���̌N?��3}�# Kv=
R�#� =AHYi�)�;���6
h#Q�5x;���v6�|�)���ll��
-��_�
,`��Bn��D$,
P�E�,�1=�Ԑ�
�=�)�$�F�Ԇ��V-0>����Z٘4�?�ʺ�⌓��[K
KC����_��) �WX�3n�3{K�F�:d�,�97��D�##�`!�:F+��bV:�'�m
�c�I�s�E~U�c�.`D
Զ��R��
�
�����
�j�\���u?RC�2ffuCx���CjjM��<�*�bò5jᡷ4�z�󾣛c�k+P`��iM1�����	���d��_��N��N]�:�},�–�
@���	9��
�ns}�7E���$Q� 
Q1[|3���<�.<K�ʨ��
�kk����A�n�C��ћR��S�����3�E
�6Tqp:�
�,kQ F���ɘ�ĈW^�9����p9�,
��hT�}�Jjm\��͘��
��]��sкB꾢���H�d��<��϶���H�Y�-�%0)����(W�&z�g�j�(a��BB� ĥ�3����,I��b���Ҹ6�/NDԜ{�甅�+��B�H���܊P��J� 6)Y�D�v�X-���渾�L�/�[�I�� 0ww	�
�Џ��n=�u�y���R
ˤ�]
�z;XCz�%��YB�&�syy���T��VZ�>�낛OKYX���\�%d�c�u��� �rޟȹF
��
B���Ϲ��,����RNƧ�KE��
�Y׀
�*��=q�%a��3�a@�-
�����l��ѻ6>�M��51cR��gqԙ,t
�y�Y�s���u𿼗��BurY"�j\�"�� G����5\X�,�y������P�p���
�����~��;��
?�;��y���I~k`q��u>�����J8	Ӄw�sK�v�m��C�l"Z�%�e��	���2Ʌ)Ӱ<m���r\C(�QJ}�Ԫ�QH�����p3��t�t�G#�rJ`Q�Vp�� �6���gp�Y���GYV��&B�NS��m��NoL���u9�L�5
�$��M���NJKi�p�RL����������yBiJ#@mN�.l��?�5	�I��*�'��ZyV����jV{�,"'��֨��
�1�zD�y,���]\�{6�����p}�����$o�
-
v��ւ����ؙ�	���sbf!@ǥ�\�6� �$�l��~���O���)
�#�g� ��+ȕ!�

Fuh P_z#P>��Q
�3;���Y�;1�Ks �r�;�3�����{�nh���q�s
?�(L���q at P ���03.F�I�)x���W��_
|�T�
���/
�����.=k1v_�_���:GS��:m�q2
�sO
���,�I��8�_�,�?Iz����u���w�]ŴM�@�&m��㘙ٖm13��b;fff1�Af[��d�i�>��x�����\�A���=�o<��=*ǫ�nޚc�̐�|jz��
-������٣
�	<���؇��z.��Ħ|�X�(�uB�C�N��=
*��#]]WH+;��l��6�`^-^�h
<6��~e�O������
0�<��je�Gh�m��w�q:�2���F����c0��ƚ���~��T^q�K�*�Γ����r��Mޝe9e5u��q��m֡n��y
����3��:X0��U5�4�wE���K�M��@~�0�}ʪJ���f[d�4BvH�g_��<*�'Đ�\�s��
vFi��9P�`l�j!���9F �����.�f�"<*J�F?�o��	z����!����9��,��������1����!��C�p-�c����
TЊ,���ֻ3�I)E�c,�Y��so�f�G��U,����h��͞�ۇ
�
K_���1Lđ�C�X��[
�qJ�����:dQ��!�H�!�x
� ���!>G��?���_u�QҜj.��Ur{����[��?�V
�GJ>�+�hۓ/����A�y䬲�a���U�P� ��W3J<Jr��L�݃ELBPS��TVV;�lt@��
�2`#�:� ��^�Y��KM-
�0A [...]
-bۀ\D�Jx�\Ăj�d�
-�VE�ﯚ���K�H�V�ۓ���!����qd�я�L�OM+<�ӂf�h��|����&�9�\*�]����=:ҭb� ���t,�_.����e���U���a���d���	*A�ǻU$p/5�neu�K)�
��G���Gk�CA�J�N^�l䳶��M��<�	F=��f���1d�1������F��Ru�?��/yc�}�ݑ4�X�+h�
�8�
!��P�j١`��:��x�4�GC+rk%^h]Z�%�U���%1uk�
6VԞ�	���l����z<�[�.�/Q2�26|OJ�)s/
?�������]P�eb�j_���L��
"f�y*�T��Ӕ���L�S΀9����yJ�����4>J�{8Ɍ=�?�I>1
-�Z��@�zT���������_�u��ⓐs�K�ԝ��ǁe6*���Rb��a�L�����K�}�w���o;ȯN��Kc>����z�2�SB�8\.y�c�J��3��R��O0�P�<�OC+ޟC�ٛB��+�8�� ��g���堼��y�� 	����9Z��!���*��}�9���-O�ͻP	t�e:h�t��Ő��d��җ�|j h�}�wJyx��i̯�m�h*jݐw�Yh�"5ݹ�C8$��A��r
��T�xb.o�sCX���7ೝJ�k�=�
Rfk�~//l�
-��G��ھ���	���K\�W^%.�'�b��BR at Q���5�&���wk�� `+�׭�6�I�+}�WG��*h�% �
��[�
!�Y��} ��Ԓ-��n�3�6))գa�@��?��>=��U�1ڮ���
�o�]�S��@� ��l�%h���4���.�0�S�,�#� �|������5a�A����1�܈+�Ŋj����
-�ԫ�j82Wu�L�}���N�������'k�d��ap[R��\('�����c3O�P
-��1~9׹����)�ǀ{C�������{�\�
���yj
-���'��ʣu�+�p��p��8/�3��V�1]�X�!�m�\^)op��\H�K� �,�J}r<��)v�ׁ�
-�]�*9X$%:e�l�Y�]Rz�G�*qIx(ew�����7{K�9t��K�,�
�7]�l�;��c�t�撽*�1NK
-K+�9z��`�=�d+
�S
]
�DIK��¼���P��(l�?T���*ZqPͧ��"Q at W��p!���bɓ�����rlrh�\v EFx�|F�O�FO(
��$�
��=�x�]rC at 3�K�8P��
���^S��,�{�Y�Zb�Hz��Qӯ~}8-�t��6	��6�}� c�
�k�97����2���9N��T�n
��"Ԁ�W�M�E�����;�!�+��*2�g�|�
���]��!��:��`E|+oȸ6׏xu��\�v�Rruy�Ɋ���Y at M+r.SҼRv�O��
�c#��
�,`����ߗb��f0�m��찦�«"��L쉩�-�	= ��ɨ9�2J��!qcq(c!WƱo<J;`��
��mW�u
�KM/�/�R�����f�u
MU}��L��Q 86qh@'�)V��$-��(�? rWp��7�*�	@{��y�d}M���P������j�|�V�[�~
�mQ��Iq+�A-	�����1	�^cy��X�
4U���t�>l������@���su'��� �J��Y�Q3 �ˎ�
�G
�3���3��
R>֩�����kcE���7�ez
�#�d'�\��<�
�sч��ԃiB`���yr�x��8��V?�s����r�i�eF�}��mſu�R���s�rXG� �
E
i�|�]�
K�b�5ñDI�Oa^ ��i�~9��bw��{S��+�y����/�FK
�kkx4ho`GƱ�Bt�)��ș�%h��╕�
k1����w at fz�T��+��^9��Q���d�I��FA���h�*������|��q����%c��M߳
�n�{	/5�����ʩ�Rv@�9�?
x���mE�GÀ[��/�2t�G��iY����nSVU{�<
�6k���ۀ�mM��Y��q㣖�>\�u�z�چ>�g��6�V$�Β���0o�&�@�w)DL���ޣ�i���ȧg }J�	࠰�Z�� cm�W�rR��
����6��r
�x����M4�O���
���p
��
ɧa�|���+�]~�j� �y��C�D�N��]f
����,�P�)� �*�
-21�gb< �Y��Ψh��i&�&~�6�	
-���xVeS�q'�1�l�j>ͧ�i�)E��erjx���z�V4
�W௽w�̀�Ttd��)������6�� ��
k��lZ���xu
�]��
����|W�M�Uu�l�͆�*Z.ą�c]y���c����$����k\v�LA�5�T�%萙E
-���UQ�[�F�T�G%`�z#A{�|j*lo
�ζDL�@���\��45ٹ�z
j�͉��s�E'�N�\��'��3�{�
q����tL!�B9ūf����y���� ��P���,�R�r}����@N�����\���]�~4�ʽb�WJLqK �KXp�\�5�X��É��~��C::<�"e���L��^�]�-�.�Ӝr|��`��,
�>�XO�
C����l,����Qm�H*��^%2:������#��*jdR�[�.9��g��p�<�(��g���|��V�Q�ؐv���9�xH����疠��
%��':&Z�*0���Pq����x5�T�7����ѐr�ڴ�~С��q�k[]��mm;�T����
���n)9; �ͣ+�U�!���_���d�/<1�Q!->ӯA'����M�B��|(�$��|f� Z
-��Ak�lr at E.�)�YA-
�B��R�K��/�*[�:���3��|+\�[���ȅ=�4h z��j
-���^
�ħ�4�,�
��7_�bw�3�j��,j �L��~�ghSN
lUZ�h:^��?�
-�����HG��	��8��3���^�	�g��qY�Y
P���1�kP+i~��ʮc�` �7tB���
���h�E��PYKٷ�k�=��U]���O�W}\�
���2�yGе�EUО���<i�1O�D �����h.%%��>|wl tȥ�$�͗>�*�eе
H�٫���
�#��#
�������g]�
��d�*~�]&�5,�e��-!3�
�Kh�P��1�E�+���
��7
�65>su
v�'�� {�
��4챹3���p�-��Tx�cl3���eĻch���K���]��g��/㲏4l�OIʲMC{�n8�QѶ%|w��쑁�=]�3��P�U��n)%Z��(�(�

-:`gj��J�+䒏f��
-�4
\Jd�KFH�+9h�<��9H�~m�c�	���=����R�}��
({}j!�6���O�B*9l�нJR�}��:[t?�9�r�
-.6�e�|*b�_G*��(�W9����
-'�,n�X���X
�i��W�(��8�@���J ���WٌcK�@�\�
-�φM<ޟ�l�k
�kt�[^�ں�uͺX� ��M�IvHX蠺���P�q��RFᡔ
?X��
,��uk\�J���ң����
mj=��(�=�Z0)�T#��V�3}&�xEP����V)H���
\�"���|P��Ac��onQ����V��5#l�L�-�ڠ���X����� �_�,���FE�_G�
�)%Gf<�2���I�
�2>ѣ��n-�#�о�՚��j�p`EX0��>#��k��txx��=h�C`|�wtW�܃���;A���
��P]
-Ao�
�pYG��(d at G/�<��:6
��#�>�U��E�4�x*�:S�0?'��@���e�t���*��ښ'zq%�ͥ[�e�
�lh:ȧH�d}���Q�9�M�ыA8��"f�
ic�cI�p.p`�S�t�,!�'5r��
�s
��X���j��� </���j+jB�נ}�^�A	:��L(�ꌹ:Ɖ����a#��0�^
q t͵L�	�����М�q��A���Z���䐠�y�ZCƧ�T�Đ�V�T�z9����^��YfS?��k�\狁�3l
-¦$�� ���,�CjKB�***��}ame�K�Oٟ)}�;�w�>_�̯���Y�9fv0�Ǖ��3
�
��J�Zz���Չ�]�.��,_lpC[�� G�
jt| ���:
wl��ݠV<ڪ��k5��u.ϭ&��tt�O�$
�h��ka2S�W��mL�a�`���#.yU�S��ǭ|?|��P�#mJYś��Ԁ�~���m}F~�WW��7T�MՐ�7
�,��հi���n�
-
�2�2\Z\�S�����i~�?�a&�Y=x�Z�p
��d�j�h�+:����͉��4�Pn9<"�#�>aS��Բ��I�s������
-�
լKAH�[,{�Wӊ�5�7���3T��V��C�5�.p�~#��ѱq�Pj��<P�x��=���+�(������<���䰰��:l,�
����\����������u�V+ێ��yl��!R�̡Cs�
%�
6&l�l=6��
�+��ڊ�Z���A��K~5�Ss�\|PQ.�(��"�C!bؗ����9c
42Ia�3N����m
iX8�<.ֺ@HY
�5
ibx��9^
���@&b�/��ͅ�
q�'湥��<��j_�/;݅��J����e�Ao4Bޱ��#
41��i
i,/�N���
�9�#_������V7
��������FJ��3.�so�
�W�7���v9�ְ�V%תf��酻
��0�' ���LTPǡ�W����������GR\Z֑�^T>�+g!���hm-`��	�T������
�ٜ�į
�<
����¤���?���u
Z���t����B1��:��㡵�� tfx�OO̵��n�<!oo���Wֵz5M�
]M+����
��g�
� �b��**<��A��y�k����|���p�0�2�q
\~*%�m�1�]��ր�q
�{
oԎ��+ZÖ�A�ǚ�>�У��w�Ze���q���iW��Z�
T�@����'Fr��&�#�D�}���M
h�
9�tgo��:�z{����&.</L����g׺t<�xA�����D�|n��Oɧ��,�G�*�hx$��C �
T�`�S
��~��▰J�R*`[��бp!�!P�=I����:_tb�W�|��^5���ƉF�ϪƯ�1@�e��
�k�@��&�/,�%wv�K
~.
�t���ٟ��:�kʝK�
���%��2��t�}�29�H.�|4��W��

̐�*1�H/�A�~\a3�+T�6���V�9EK�-�������^��A>Ǧ���%�L���
}l��|JZ>��ҁ��Gڪ������$�;Yaќ
-t
�Gp�/�V
<�K��Aކ�',�3vG���&Qo:l�G����!�

�~mm�_�.�d� ��q���Dh}<c�_V]Y�7������9��-�#f�U�8���	��j��c}e=��� ��iET}�牅��&8e�|]_�ShN�A�
��@n��@;@�}����b���`ҏ�t�E>Y5
m�އ7��Gk�&P#'�򖏛�֣u��g�P�ˤ��UCU�Kǧ95�As� ��:������BV� �8�˫+�v�[<��i��q2`.o�

�cp�AY�ʻ�;��
�z�Nm�¡/�\�
�_��h.�c3��_��Uu��g����Tey��Rt(AD:$�X��R�Ǫ��-��?�<0
�_/����Q˱�M
-�%=���c3�u�"nthi�
`����7�
�����t�c��l�!�8���
����}����\�F
�b�rV�}��p0�}e�Ľ=1�aYA�# ���2j�[N�5����eA�F.�Tr�sN��B@)9���	�~���)!gz��R�2%}k��=N���a��
-|�c��z(%e�����B��0���XٓC�?n��	9�D+��E������$��;I�u�4���9ъE�Y7����BCB��@%��)�>�T������$�?���/�_gˆɠ_r��R������1��%F���a �o L|U2����U��B:|z@�I���%��^ ��ze�
}g�Y}W��.y�s�cCPW��>U���W�%
�
�`��1���B:BfPCٞ��ki0�w}:�d]�ɤB�
a�"�
���#�Y�Z�R���9�
�ݓMg'��iB�u��,�������AcMwhM�>�BÜ��� �#->�HC�����-|񉥲
pPxu
M?Z���1RK�@^r��< �&���*���0����u��>+d�"�Zj�CN/t����u
C�r�\��_(��\�ՠ��*>˭�0��5��	��:Z��	�
-+�*j���&�\:�/'��i��Ģ�Je󑱲٣q�z6�-DPC.
i�� 
���#�
�����0�]3�(o=Y���J}r�GM�
���>
)hV�U���u�-�@S �qz�]F&��@.�ϡ�l
���
C>�
��C=v-��]
�X'��}�fg����`���ޜK!%.%������ �n)!�#%���ܐ�Q�Z�g;�y(�R@�
��s-R3l�йb�k���X�E��o�����yz��$1fw��-�D;%��k���r0��Pu��l�ɾ�7~_��y�,�<�'��;%��B�3���y�LJ��P�|� �
}��A�PP�
s���i�K�
�U at I��hf�|�f��\�W�,=�'%z�����A%%�`����@���YjzP.������?�i�
}2b�s��g��� ���+�B��|����&�c��锰��j�y
).�>���
7�O
d�#��~��~

�����n)>)��@��Ps	{s�T�
���@�!�~40�Gjzq at I�,؛C�΢B���k|^Z�S�������?@�n�*!�a�S|T�@���0x���h���j�G�q*Q�a3����u
+�C����G+<�GeJ�!x>6h�d
0.!#�C���5� ` u������+��­�|��v�%�V�����u6é���ޗ0�7�Iq
eu�GS^u�@��E>
-X��g(w9���V�I��)a�lO�S�'�D�L�c
�S`�
-|ʑ�V�1=Z�h�T4A��ժ�c0�A5�Sr�N))mo����hك��C�
�
������A����9�<�
-��yg���1����Ճ~h�!�l#:f0�9z������芩9�����
s�wЙu��OX@<v��b�
-r�Եk��}0��W�OQw�p�
��̽I|�f/�}�	��
���*���Yxy�����0�g�S�w��
o��=t,�]Rl�GFH�����IQ����l�ĸ��U�R�K�W�yأ���Yċ�
�䓐3�q�,��;�f��p�͝����ytd at F�q/b"=��X�"!�`�]���K
X@�A��Y��V���=�ӝ��[{���%�;�
��QBsW�\�爠����9���h�4h=�#�
k�t��Yv��# ��<ʳLHt/��=%��5��l�G*�zb�m���3�|rF�sc��
$�ĭ1��q�
�%�er�c�������1Q��r��8���8��g��6
-�� C��l�g�V�Y$&{	��	̋��}s��%�9�.<���d�2��Yt0Ex�?�z�Z��
�H�2%�'g�B�?}���:.�	���`��*
�.%�'$9$��s<�C{��*J�&:2�e��u��0���{(��o� ^��T�k��#��א�B&�o��]Jr������j澥��|���NQUxa{���1��c�e�@?=d�O�K�Αͣ�7�#��yJ6��u��.�ac����u��/�s 6r���B䔈ٖz�c��ݛ��OS�@�����X�a��
-��௠�L�
�tՀ�� �H���҉�cǽ�
B�����!D�
�b�Y���C쒱����0���)�2B���d��?�{��s���(���C����qR�u�q0M��w�P��?Z�Ss�>��߅�c�
~c����g��g��}
w0ˇ���p�J�s���A�í���󀄖{�`�٠��3��,9	����ɲG���Ww
-�m�+��5����'�՗'�d�\���m�g�s?+�~�h�{�]�sP@2݋B���?��2u�\�7\X�.�j�*�}w��HI/99
��;�")1��Â�%a�@��攎�|V@�(	��m)nP�	5þ���
-�s0<z���;J���G?=������H�!Q�i|�m��?�|�;���U��zo�ͭ
�#�%�� k���/�lӘ7��9R���]f��1X�HV�~v�C�U�0��FO�uKO�UK7���0����j'�!蓢�qv��sG���֍���R���
���Yj�����"��J$�y,/`�a�4�
��}�� ����s�
z���p�|��_gO����tM�g�3�XH�=���j:��#��YE�#�W�ƒ_�
��$���㤸OMM���;l�x���RIP��w f�
G>V�f�1��^:C<�Mc�Ag��z
թd���t;���YJ
-�9"k�𻦶�+�=�;�!r�W�'���9���Ԑr�О�aģ�n䃽\�}��#a��r�S�@����
�"
l���24�����u����ÊYm�=�t`
ltb
��"nm�^��#n�
b�[G��V�+܋�_�i��	j��(��f�mSw��Yq�׳��
��7����AO?��
�=�
�>Y�Ȼ�ӗ���9�������9n��83ӵ�-��ӳ��p� &��+��B�vO�ޮ�e��B>�&�;'�ۧ����E7���{�ɒ��i�ccO��9a�W�}��OT<TK���+�C�7����)�s�k�4)�p��;�^��KU��YA���
��Ez�Ҏ�ml.�`�.�n�E��(�{���9���C	1$����58�sqA
�S��ۤ\���Zo�UcK�ySS�esk�o�V�oݨ�`̬�(�<-�p��7�y�7�zlj����o����;��W��ꐰK���΀�

�;c�;�=��W:����~�d����>��� ��zWѕ��������2~�w2~�����_7�0ό
�糼��x���+��9���f	1c��q�[p
O7�Ow'����3_�,Y�Q���0��!��A�Z�-�����Qא{v�q�2�����/�q��n����;�����36�sL�rz��q8I/�Hkk�3���>�f�3cK��%~�WS�ȿ�4�^P5����E��,~qb��X'�n���
+��}IV��fo��^	)��y����JX�[��ȕ���=���;
~��'���g��D<0�!���S�ئ�I~5
���WAHw,�=�ʻ�֖���1���h�CuKލ�rFPˣ
ΓSw���u��S�ŝ&?����Oq���O��!n��^��/�.X:P�u�ŗf�1ߌ^}���o���ۧX9���TK/��� ���.�Gye��Վқ�ן.rR/:�h��K��J'澡���NWί����K���#���b� �KՂ�	F�j7쪮6�[]e�7���S���Sk]��g�ɧ����nZ�����V_񍝁��}��tͅ����􍹿^m�"^x�$�4��:I��ž}���Sz� XR]�x�w��(#u����:Y���l
�#V�
/i�r~��e��T%�<-���:MJ��t0�|�=�x�
���Wx��QpEݘ�&�Ǖ��
�s�萆Gw-���&��ϵ07]��-��yd/�
蕫���׮IR���� ��v_�
sk�
�'����wFq�>bo�S`Sp0P�tI11�'���_�Ź�Uՙ?I���j�/v`�N������?�}���93E��t�i&��f�w�N��A�]Sѯ�3�X�.�9}�K��Ea�WҊ�5�9秹ѧ�&gx$\��(%�6II��-��i��i����/�kIE����L��/���_9fX�����
ص�6���?�Ι;
�����5I/ܙ�u��[c�d���jg������e��������?�������Y��}�;�}w���_Ɩ���e�;�
pO�}�,�_JH
ʹ��Yj�[�':�<�����܊�i�����1󬥫�{��"�˽�u��64f>*E|S���0�����˻CY��͉�,�ٗ<K��V��l��� �͝q����kꆤӪ���_�*3�4"�Y�s��;����΂˳ܸ�'h�Nғ>[d~3I��|��)Q�ר�g�&�޲��ַa��2��+SNI�S��c'|9E��� �L71�lG��/������ܟr|��M;��]|c���(��'���
�׊J���vj��
� ����^�����
��E�UUY?)�3N�[0�fY�_uU%�>>���

S�ֺ0��m����Y��/tM��
�ps��hq��;CԨ���aԣ́�[}���mY��k�O�*�0�R�ڈO6/�:��
ͅ�����E9g�Q��
$�|�9�~�=B����].�85�N�j�<�Gem�O����w�J���OS#N�r�Ӵ�թ���Y?=8?Ŋ�b���+~��Ls.��Y[�ŷ6�����ZiϹ
-���fo�Y�o6�Qv)��6KJ�
�m�_�t��ޗ������-iu�y�-�@
��Utwk��k)�&��?�m*���G�؝d�C��\���F?⡮vE�
0�(���}�ueu���%Wݐgt��_�����)���O�WW]X��?V7��/�Ni�
-ΛZQ���y�q�?Q7 �
�EL��#E�k����&���Cᕃɲ'
6u�>�R��'���k;c�dS%r�<��QR���S��دƈ����_�lc8���8:ʧ��>���ݙ���/>]���ܒ���1�9�s��buޭYQ�5Ǽ�r��y\�^?��V얥�䚱-py�kC:cZ�qE�\t�+#e��ޚuv�#�7Mu�e�����y�#-gX�ٹ;����!�KK?��C�EuM�Ee�)uU�w�EJ�� 춡�즮��LV	��m�]46��n���7$�;������f&�s��J

�3����?��,��&)���a����_,���/�ó;���pR�� ��d�
���<��iz����_�w���~�z��'JqI�R�ܟ�?^�.�MS���
3�^�O���?
q3N�=���Y�ob�.Vd��Wf]VV���ÿ����(��V�R/��S.�Rc~��Gm
�����q�В}n��� ���t�n�m�u�!�B�e�Kq�
���e׷P6����M�+}�'��?���Us7�.��W{c�������KhN�/��d�cg��9N�ϻ���0;c�
�T�\������f��z��8�<1��?)q�l�D������S�����w_)�o��鉿�ٕ�h�h�Ͽb�&��@�Ѓ<�}�<BN�l ��9V�W�Q�c�
6r�2�WJ��Z�h��&��ya�w
˜o�{Km�#Z
-.��/�v��ַ��ZK9�Ť�I~�f?找%���5��-���{�3�K����c
&��&�
�4�ڢ�ʚ�3S̸��
�����W	q��n����1B�c����e����5�[y���%���Mݥ��I��[������Q��
�o��\6���>F����5�s����Y��ؐsq���S�;�za���u��P���2;��'
Eov�q�[�
�jj�~�ץ����r.b��&/*J�|�O�����zp��.I!���!��4�՗�	b�c��ܟb�
���s"�e�
d��򚬟�x�_h��^k��źLL��L�Qی��~�Z��j��..We���g�2+�]�$_Zm�fy��+=�(Ec�O���Ӻ挳����6�O�k
-�.~��v�k�*�|EM�9uU����_%���3~�t_��#������x���:d±J��-}��Yrm�����7�;UM�>f��ﮟ��j�o+���>j̗-���{��C����P����'�o��>�<���}�I|��qOߒ���!��}�9YU��9V�7˼ğ6{P/�J�|ٌ��KMV��_�uz0�����:��^�Og��N�t��`D��7�K=�T��g�i���@�y�A<w�#^�O�U6�_^�G=����c�[��/�:Jn��#�
�����N�|�?��&-�b��肿�
���u�_�Gё�Q�J?*(�։ҧ���_<�l�
�7]��J7��,/��#�cc���i�+�26n�1�wF���Zɑ����/
-N��^���҇{}8IL�O�cT��
��&e뽌��^�õޒ�kݥ���%5Y�W��;�I�v���o�����g'I_ΰ��b&}?LI9?�ʸ��B�*���ٳ_��?��7?�e,�
�L�s��_��	�
�ϯu��1KI�f=�,��/�(IZ
���2�Q��󜧟O�
|�ٗ��:��
�G� �̺T�{0��Rפ��5�\��%|G���o�~�4�_.T�^w.31�qL�.��>r
�R^��������oO��`��*
-A��]���:�qiӥo����kާ�U��8o�ck��/t����S��J�Fw�����kc�w�A��u�>�
���b� ?Sӈ�9�M?݃����2���9&�2|�
-�ޘ�5"�����r/��~������}�
�?�&ؽ�r�����vj�������F��?WTe����ܟ}�܆|���=�<�f��u���7��1����*�~\�?�L�v��q~��n{��L�B|��)����9''��L�n�v�:KK�� _�ZJ�:9ȍa�Ks/��e�����*3b�.�2����\���#�H�QY�yy{���mF�Zk�<�
"��
¾������Xx�"�T\���U/�����˔�]�ygq�i\�c�''['��fԳ�����|��6����?%�7_n�����L�|j��d�� ��g�ݘ��R@�����%|��$쉥3�����+홗�R>0|������09Rݘ~����
��]�_v��|+�K:�oν`�#&V�^|;�L���
������Id�f�
KW�UM]����E�7��������k

��(��c������V;�on
�<\�ɽ��K9��(y<Č�NQ��܅}�1��
��}�U�:�y=_�wu��q�a�}��{0�ȶ/p����\�*��3Tv��%]k�
U[�mY[���Q\�7���"��fW�ݡ�W�x�{�
�H�i���Go>_�({�^b�
L��n
 �/U$}�,J=�$J�~�u~s���bm�cqޓ�V����+
������Rq�wC��"F~�l̹f���z��v\�'>�)#�Yүl����G�E�Y!���Go
��o��m���!vo�잾1낪:�'�uOJ.Ʊ���
���:�O����
"��.���
.��\.za�-}�
t�#/go�ܫog�ѿ'>1}�����]��\������������麢����u�%7vI�{#Ĉ�!������[C�`<�/��O���������//���-�2��D�?���_;&X��.�e��ވ'i�>n�?������e��?n"
�3�

��.;��%x,�O_Yo�Up7'hɆ6�#��=K;���~�6���
������5e]�
%ǂ뾾,��v�����������T�kAH�k�\��Kr,74xdBcw٣Ŋ4PC)���_�� ���9��V�po�3ά��_�֩@�<��%XǸ����KӬ������6bu�����VP{ø7�1ij�2�]|�e �\'�S�%�M9?�x�]Kƥ��ܛ��
�ּ��f������V�R�
���ւK���o��`=�z�7������%me�Y��\]^�}�Q�h��m��Ì(�WmK�e��ԋ�I�;e[�1Aܙ�9r!�ׇ}�ǟ�r_~k���}}����`���	t��)
<��V{�i.I�hg�� [...]
�,q�yF��D��yT̡DL?\�`l��s�]�(���l������b'���=������ÄH��3N���%��n.��=F��
#G;xp�L�9X���c�Y��6y�m����V��:'��8�m)�i��e��Y�N97Ï;e�����Y�^�#Mc�Y}K������f��Tig���o)��9�K }�j�%&Ak
+]�ח���F�3��8\�b����n�Sۂ�l�磶��Q�����E7-��vg1Qv�
 ok��>�Mp̢#-}�q�G课�d>�K?�^�aݲ*��B�:W���ܟ�$�w�o�s��Z`�L��hc>"���&	)�������a|��<!y��3��ߗq	���{���_o3hnU�辴�bk�[
�<3���$�W4"��%�͕S����.�iޚ�]e��
y���3/�ړϩ���DU
��F
�u���QV�:$�t�� a���
3�6�i��
�����٨���F�v�(��B|��J|��E��
�&��})��� [...]
-�a��\S��BU�Mc;>�:�E���ql�����5�CG�M���чy��O;;J��q��~~Q�_߄���0�C��P�����{����֋�G��l
�ZBF�MS|2f�k���iN����Jڙi{��q�Y����"�
��~?�I�M�
��@x!(������WAy�>K Z^�l{
���]xskc�БV	�7�-ܝ��Cu���
?��?�.��oJ8�����6ALw-Vs
]�(�����h�>�k
bg��3K�ݙ'���,�U[׹-ilٞ���i��}�g���(�
��
�Q̫��#K&¹(b��K���
.����l���!Ӷ�A�{�Q�Ui�w&�nEU�GUQ�;����?ж��X�M��i�z�\����{{Ӵ\Es�%���nx���PR�uf�����(6�p�GvȄT�
��{�c�]��S|gI��4'��i~����ԫ�e��g�Au�9JK���q��@�N0R�me����>]E�ғweg�
�ŷNrKv����T���+���֬;ʶ�kS���qJ��S�V6���m�P�,�����%��7���j��<B����a��0�i����d�h�*nk�=��ڟ%���M�@(;
-~ߝ��m��{�5��A���!@ų34��R
銔G�6AE_��}�Q���8�������Nз�
�
����w�'i�9��g+)�1q���o�$?3�P���#�-���*�mq����3����7����]�$u��

u�(&ް�Ւ��ĥ
������օ���!N��
ׂ��z�AQ����m��i���+H7L
�'�:����T[|��<G]^9������WvZ�y�������Qz�}VD�-���9�Yf����ڂ(�Gs�(}���`��651_Z:+�M-�dS��F?A�u��:߇,�A#��;*/]�E>Z�-�c["d8eL�[[�����ؤ"�������
��>\ׂ��o(�e�
vc���:B�pL������Z������p#�>\���f'J+��
Lqk|���wsYLY�a�Zf�����e!ɳ,"�gye�A�������qr�g��ڙ�� R>�F����F�FZ�]��Ko�sG���q\�G]��V׶����s��9z�K.J�$��K؝*}e,zlh˿��
���O���Ŝj���,��
}�[i�wj��n�[�
-U�-P���{�ݍwwĝwHQ���g����#���a��\d��>�#��sL��B���g��V�1��]�H�Xj��^���Q�ۣ�h��\�����d�2��[�����o�ʚJo�li��f��	h��!䏵~l�r;.\�,z��=3�aB
�p������
����s��ͱ?W꥿��L"t�loEж��t�4���:�橘�1p��.�-�ю
}0����
-귧Xe}�����]?�
�G��&�dY�LK���ԧ�
-x��,
�҇
^�a$I��	�WZQ��x�	�##��(
�r,��?�����΁.�>	�9����+ǰqΈ�>��Ȩ�昔�
L�YA�Rv ߉qo����'9��C4��vd�e~A�p`���ǘ�QǪ�S~c&G�&F����{����xcyƝzH�-�j���`��/waÖ;1A̴�NV���Ս�>hEV\�*(:CML:	

9^���1FT�INr�il����

}���&(��mP�W�c���kK���#���Or!�n\���֪LU;x���׍(�ԏ,�>�C��#��za�7��/�|:�w�:���
�����S�B�
"�?P�A� � �ΒQN	j�
��+�e�9�7�%�gi��6�(�%��﫸�.쓂	y�T{����$<"�Tԋ��a!_�ࢾ�Ƅ~�m�
㒓�v�г��S��
<tc
��M�	F�����&~��ޏ�+|���wy9aW��ߝ*������>��W/��?�s���j;*��++`���RR�
*&b��1r��.֡d�=zΦ$f�v��Rp������ʜ��y��
+���.*�,��)L\�bB�i`�'��>����4,:�|Uv��~|�]���T|��3w�4ۑ�iu�o����B�mȏS���-����h�
 V.r�O�����x����?� ��gO�
^� ����qN���Yn��+t�C�L_����4Ǿ؟�]~�Y`�(>nG��u��EV9�9F�]$H��!���{���s���?��.�|}s��ys�]�J��܇H��̪��
���#�O[�ŗ���������a��7~�'7/��^� zv����K�?N��s�
(��!(;��Xsy�E5?��kד�
CȀ�Az���>T�Q��>�)J=M�J>Y
����@��%��ez
-xr�{�<(��#��gw at gO��>b���c�܈?�ao�ueO&E�T��gsm�i-�k;��_�$1�XfP(��GЗ�A.�}�q���]�;����g� �@�~?��,��M��'DԂ���ȏ����Q!\�Ɗ��4#��[P��
��
����_�žy
J��y��}����M�#`>�]� ���	ЃK�sb�D�����Y��,jX��@���F����-9��Ə
-1~����Ը���c�� h�7P��=���WA/o^]:����'A�����'��ϩ��Ы����IX��h�{�*b�
�v��y�y�E(�R]�w
s�4$���5(��S�W at O/_�^�zt�"���N�<�?�{����['d��/
5��o�W:�
�G�!��bG�OY�DŽ*��oa��a�!�"������v
���eP��{��'O�y��w�"���
��?��<~t8^��W Jz�eu-����`k�UhST�w�\��(5EV~��(��S/b�C�9	>��
zq�*��
P�����Ο:�
���렳�~�]���6F����y��W��3MF��ƪ�[�	�E���QF��,�?
aV<
�@^�g]BD���{���s�w��������A����
�w�k?PYh�It�s3��?,Ⲱ�INy%�q3��
-��1��25�dAT‰�/^�~��
-0���\=�}���Itr��z����
�o�~�+Iy65
�<�.��Ȼj��j�_� ����
��E
���<�����m�[`���
���`�~��(���c�|O��_nG$��3�/�b���o�j�ke
����
�I+�ۀ�ިBb��sr��y
-�}���)�������y�����U���ˠs������v�)��Gܟ�������^R�r=����
�"�@}*�2��
�
-`�P�i�B߼=�y
���77���=|zr�t��e�]`�|����&(��
9#���
yl����rJ�� <p���EBH]�`�zh1�5�UH��¸�A�}A�žz
zq�60�g@��
����ʹ��g7|@����G�y{�2/��|*tGL�^A�����ڐ�
��otă.*�
���B^hȱ��Aq�����o@/|n�Ν<����|� �{�
�|�<�@��O�e|�pa����.���

��,��fb�jZ��8.VZ[�XR�y[-�V���ɔw@	�^�|t��+����60��AW�<�������{�n�|}�r���N�����}Y�c��&�xVy�p��i�"�j;qA�Ē[��Г�/�^޾	z�!���+g���"�1���������՝G ��wA�!Aǫ
-�OtCb�X�GD�\�V����
-��&��o)k��D<�0��[�}y"�ՋcQ/� s�zu�
��S��n�=
��ٝ۠��Z&��|���zQI{:�Q�i���2�F�	�F����ռ�n<÷
I�݁c<B(��Ie�²��'_"f�_��E��{*������ڦ�k<�MW-��jK�J����8�F
�"��S�!P�j0�v��K����D�\*��>�IM��N��@IJ���������l�Rwٛ�AT�YQIݔ	)����ّ�f�̇&^�����ƴ
k˜P�clv�Պ��3!�>��=�q	�����o���O��n����5��ԹNr��3�,�#M�|�� +�M��.��c��|1��~hc���𔇤"����ؓ�� = ���"�o_��^8
�!�xJH�������CL��6�w���d�dإL�Gͫڛ�8�B�IY�RՔ
�5��軅��|��D��?(����}?Х?/���}?�,�I*C�v3��9�����ER_�>�*�n�)6�2ŮX
��P�vn�Hѿ�
��**���p*)0�x�/@��b�
-���gw_���cO ��o��1�CU4��Va��2]z.�3_?�� lu�	�
��.�Ew1��0�삢����K���
eI�|����g/@��?���
�

?��˱���3p��T
!xy�
�US�ŕ8��Y�>J��6�^��1K��xI;�]|�u&�������C��Χ��y��>��c�����W�c�/��ĝ"�\�B�O�����z�G1'��\gY��,�no���a����5k�+�*����������=���c��ހ�D�r#�NF~�z�ͣ[�������Ig�P�X���~>tK̆��
�M��mʛ�6 �6YG^����P"�͘�#\ȳN\��Ŷ��@s}���=UM�ʄt������m*!�6�*���*|S�,3)x�)�$cC�'�P���M;=L���[��/��
-�G;�s
�ž��>r�Gʂx���k*i;2J޶�Qn����K�F͊��5	�!����b7=~���5�[W��n,R�qe==�����Q~]p'��W]Vp��?U)HYj��d
UNYC�S^�u�X�]=
����NU%ci��<Ӂ_b�o�
 ��By{u���1W�֔>Q�
%����䳾
��M�i�ƺ�
˿W(��/[�V�,2�"eoNPR�:!�,c�Կ���v�,��"tI��W1���_�+Ç[Z2�Z�3��H�6F��>A{T��V�L��-Y
��lK0�V5��a���5�V]}����w�X�~x@��\l�"$-O`"$�/%m���Z"#�,���v��!����2P����f�h`
�L61�ǚyU�|w���i���7��j�A��ڄUK�l�)9
#�h
��fv������_U4;�U��.UvC���&j@����H_Yg;l��2F=�I_��D:t<�߳<��3l�GM���"–����#�
�XH֔47A�4ta���V' �ʸ;@;?ʈ�j�edh�G���Z
-Dm�he��pa��b�6v\�� ,R!���>T�ao��=\i68�)�
9)Ǧ�W�l�,�L�l�GO5�ċ[?d}u���f�=;F���G�
`�����
�$� 滠�F`A�6j&\�6��t]�M]]i�W�m�9���Ԗ��+�~aW�B:Ul��.�,BEn�#í2 W��L���5���
-��;]��3�2�?]��֘�L�����4
XCE�L�3 �Pt8]�s���Ny=��b����K����m9�ĩ�oڙ��:d<�I�A�Mq&qݡЭ�T� >j���O�ژhb���hlc��6�+^�#�YE�
-��O�{{�U�
N�����=%
�P��v����U�9��w�*�.��iUp�uu�EZ�ۑ��$�ҕ1l��&�4EL���[��rc/+y�S�g��L�jl:
-��4��X`��#7���2D��
_hSq��蜮n��zV���k���UE{����>;H����-���2F��@E�O�.�527X��:�V%1צab
�� ���q�zD�bѡ�
-w(�E&=OR
��*�~>���,�;�
S��2r֜�Z�,fCv�޺��C�a��瞩lݛo�{�;,
-J!��
#����ڪ�`����'�-v����h`���u���В�ti �@E,K��-%����{�iO憱0��F=Fa�G���[E��ׇ��61)ӣd�v�L��
���30�#��6�s_/�'��ץ<��Bo.wf}��	j
�
���$hKF�z��{z�Щ�!�G�&����Q�w$���A�u��k�1/�,����&��<�[�!8S�:ַd����m�e��
���8l:n���8�
��4�ȩ¦ۥ����Ok�%o��ݚ�>����!o����*Z�]BH6��g�J_oK�i�Β�ڦR��|�e�P��
J|�M���US�]JR�
w{���tӘ7�g�L����%��m�0��RB��)�o���h���=���Pi;"\�i��y����v��	�
�
�s�o!�=��v���ӡlh��Y�����k��6��6'�i�jD����#�$9D�7p�ޞV{:L�e�(`�=�C�)�諛�U<���uG���ԕ�]uu�[YIsʩ�����M8d����j\/�lKe;J�MF-ui�9�3�VЃ�/�aJ�[���ґac�_V�@>&�k��)8��@F
��+�}�ەB��\�xo�~�2]�n�׵�h�k�d�b���nU0�]:6no����[�֭��<Ә��9d��4>�*�&�I{�l�MN�py����������3O'8���.�GC#�[D��U
Ι��M%9�1ϫu/׎�\v�g�-<�gr\Ӥ����W.��c6���nC��`���-�X�-
���և�^��g?sk)��R�b,hg
���Ӑ�E6{oUؽ�(h�h�E��$߅ad�k��k}��g���
���o�f�!�ǭ�f~�
(
tkH%1�h�1���*��bG���d��S��轙�V�"u��c��a��5�6	>mG�NX!f�Q;JB��
��`�Vd�	���>�Id�9�*ť�*�Yv*vs���Lk�-QQ�����mGɨ�5V��f꺷�
�E�Kٙ��f�,��5R�oA"�^��dL�|'={������m>4�)�>��	D�V?��RO�+?�����i��l
Ƅm�Б�6J�;&G �2��Yf�g��n-
�X��ֹ V���
-|�SE.XCD������6{�kmR.�>I���x�CE
�����P4cC�1�77z �?�<�K���E@�XD�L��
v���Mi
U I��T�oq�2.Ҫ�&[���
mU��
-�mK���"r�l�E̥���
x�oK���IB�e

�ҝ�|k4�M�MӶ��xT�-^
�R��V�Ъ �&�6:�۟v
�LR��
�vڞ��ݟ�����b��y�\��4�l���]BG
��
X�L��$�Ȧ�v�B�E�D�Yh�н<�#C�y�x{v[����ѐJ���������ĵ��Ӎ�~�QL��4����'���H%��|f>m��&����Mbp�Y�L�[nP zJlW��7��ޙ�J�
���y"�`��7I�k�Ĵ���F��� ΅��b_�!�
�U#�=Zd��=HI�)bd��y�
a�-h�E�N�V���*t�g�T�7[� �]�Y�%95\ʡ�E>4������Δ���7����G�ZR�S��o
��mRo�2�cD��&�ߗ�������qx��$t[����8��X��WV;��<
U]�%~��"�:˯�iX��~T�CA���D��F�iy�]
���g�=FA��r���Un�SK.q��%{�-�c}ߦ�ٖ���Y����L��w�J��^���p��R�z�v���_��ϮɊ����g��i>s���ڊ^�FQ��'܌O��#�y%駆�=�b <�'Y%E_�#iO�6P�^��k(�_K�]j���L�]�Ir���.:ks�5�+��e�F��.)�:���C�&��c�(S�Ό{�1p�MB�Z��e;&h%[���d�J?6lg���b�:�t�EB�����t���k��l�+RM����	T�y�
IJ@��0�A�������PK*>� �݊Ҁm8ps
�}s�-���AV�����ui���o�.	:q�P
��܇�;0V��
Uu-!צ���a�@C
 ���uZ�`���B�ȅ��{3���骺
@;ټ=UD��$4̡�>���>�
�L�s�k;���
-�.%
icR���_
Rj�y
?�����Q�����6�ÀNC�-p]�� $`����m���
��
��4FH�ϒ���ea�������q[�zT��H����
-��Q\��(:ĭb��U
��V���~"�]mʭQ\إ�|�5�qv�c�0�]I(9�c1�Z���L���ܘ�9t�-{��=�S�����'K�y��r��͐������wcu�
1-��joy쁑�t�!a�Qp��	
�fW�I�3L��H�{���
��?�4�{4O�9����
�
�k`�٬�s,�[C(��_7tA2.6J~�{��]|���-<���-�{��ݥcQ�؝i;4UB��	�U�*�4�ҝp�����6�XhF��T	y
)�dWDHu�ab�ۋ|m@,�'��+���m����W�� �Z�(��o+�~�y~�] �����㮉�y��ػ�e�-W��r�@�;�
Y,�0A�q�{?��	���������b�J���d�5Teޙ��0
-/[J>X'���VHHn�ߟ���gV�dG�B;�
讒\�3		[�In�(
p�������T���rt®
-
���E;����O+�ş\r&Ωm��V� ݂N8P�2�rb�]�Is(q)�bt��(*Dט�pu�i-�[�*��S��c�[�eo����%
�ɥ{Z�W_�
<�O�+x�lO""
~�x�)|����	�,��6��yV@��YD��T�#�f8��R�)�:���:�)��y�	u�<����=#��H�f.a��I͈��E&�*�vLr�)�V	�l�2�
-rOM�oK��&1*mGN.80j�뭙� h�9�fx
�R�
f��
-�`� Z&`AV:�1E���Dۤ��]��lrB�i
��uiY��1b
.����nt��ź��YA�SM�Z��D����Q�ߚ���lN`6��[�|0vCc�;CU�3S��Js��,�:E�Z�|��p�G����%�m�8����0�,��r8�)�k�N�Q�rf�J>z�G�f*kvm�(l��"h�	eN5$j��荱-�K�d��|���E�7�H6
r�Hg�\$c\�5���Q��4�O�ħ�[X�VIk�KY[��r�{
-r�]A)ڞ���'(�ZH� *�6�O��
-�ڊ_�z����^���W��sƪ�7��]K��������$b�mO� 
 ���	+�D�LqU���
X�!��v Vwd^\ 4�(<B!H��m*��n,}���p�ԉN4������*V�%#�� ��;�	T�i�����y���qV��[N	k�P��c�h�DY�Bw�CcK���dy��P��0�S�)�
�=�x�m��i �o�#�F���J[��]1��2�/�"�y�c>Ұ�j
�&!fm� �7�߀X�^�+{+���ç��9�
��<��:|����Fg�K�p��f�˕�d�}-�bWI��L b�@�ۥĂ�qX�{[��HF{ �k�p}G��� "�3��
��$!e/ ���ё�h�z_i�����P���!��: Ͳ���q�< �����M�檒�9��!������F.�g�*�2*t���y�"d�;�o�+��M��+U�}8#l��֥���=���������"x�M
��V��l �n����l��������V8嘔�AH�J?"d�
�ANy�>Bź [...]
-N5
r`����v���c��q��@`��ԯ�hy���o3����#����w�c� O���+>Y&�I{F
-�cD���d��[s�[�W�k�w��i����o+x�5�L�k��^�f�+�w�x���3������n��<�s�i�Å��RU�{���Q �&P��е~X�MNʛ�6�
�I���֡d#\rr�G�D�*	�61"r�+煆sm����bs�[s$`�
�a�ȇ�<?S�'�
��S������Ad܃CcM�]��ZeL�্X�j�獡�{.kG�g�������9|�1�B�bk��ن�3u��M�̜�NJ���w��x�~l���m�����1羬2��=�|+$��|�eL�]�|���4	qH�E	�br�Rg��|]�ߞ����4[��z��E�S0c�/6f?��Cb��?P�
-�Ɛ��ƂG���@�.~{�9D�Y�E|]�2{�׵�>kE�\?cu���qD�Ϲ+"���r�.���>~�
)8�Q���$_l��91';�p���;�.
�L��v'<7���,vf?���7F1��=��5
�C[���j���o�y����q5?�m��[�xԎ	{��a
׆�za�=7����tID�~�����&�.ǰ�1Z�z/6r{��g��Q�)\�K��e C�iH��K;��~�������	E�zb�G�O� >�:T�i�.��f{��=2�*b�-��B���a�IL�e
�9�	_�}�Ue>[l+�n��!^<�kY�}#��V3�:
ݦdœ**��ȯr鄂
1�|GS�`UV�w���1.q����R{��]
q��[C��4ˆ�3�	��f(؟
¶]5*�*�p(��	��t ��*�D��~ ��l{�����#�tt8���
2T�e
-��_�ѭc1��Zu�Ya�{���=W��2 \��!͓�(@7�oK��2\�C�cYo���y{����C�Nbc�#������g]�Y�7�)��M�D���q���Ŗ��[������S����ڌ;�rj�XY�-�'Y ~�r��=�J����9gq���+y�=A�9�eS7�p�k=Џ+
%��j���w�]
D���P^�ؕ��������{��ۆ��G:a�m}U��R[�
����
b"�`@�؀��L�s���Ŏ�G��裏��w\bl�K�gm�(�
9��P�&
�ȥ�푲O�M	���N�w��/tT�7�?�f�{���Iz�R;��0&�Oz�?��o"B�MS.R҄m�F�[j)
�g��p
�X��J_���2�8Ӕ�h��y����'�g�n���� ћc%���`��u�XQ��L�I}�Ѳ9��{������>�7� 2�HMǸd4�()񮂕��>�Cͷ¾L�S���/J(Y����;�
ٯ6�`	k�䬴/w�>���#��􂪵��gA�ř��+����YyW�f�0��7B�^��M~�G�/�
.~�P�zCE�:+'���ژ��PF�6�Cb���?�/
-x
-��KK��v���c.7���C�
-��ё.C���0%kK�I�kVP�s����H��M�}�/���D�� r���5�ȷ�ȩ�
-Z�jG�;=?�sq��� ���)Z�ͭ�Ҥ7�-�̨����t�!�ׇF6�� �g����r~�%�׭�œZ�"��O���*:ģg�5����� ZbO�LqHv
��`�j`w�[��!���|��f1*ɩ��
�1�6
j�Q
�A��0���s���<
-�:N�1��ۋ}����#��2BW�xk�:���y{��	h��4��%a�W���{�=j&��H��Z #-R���܍Ѣ��QdĮ��Z����}ι����(8h��½)JԹ)|ԙ�	B�+������>B/���,4>_m/zm
��j��+x��ۊ�
�+���𙖜g��smE�K�%w ����fnM`c���i�T��3/lq���3my��2�/6���u���9���W?��„���ҭax�j�W�8�n֗?z�������n�K|��JanЁ�RbhH�i,{{�s4�|���/��}�ux���kL�;г(G��*���jR��������_�ƣ�#�Z4�XD����R��n1�9�N��.
Xn�{e��}�������Z�|��Rr,�<�c
�A�mt!��9~
E_~���J�
��R��E\��I{��S�s���׳6
,o��:Œ}��\v!wg
i
@��*��蘮�WA��8!�;���!t���.9>c�����`�'�2ɭ�'��Agzf M3��X@���P?���̃9o�z�^o�=00�5�l���;d,�]B+� G��~:�Uzz�va�5����X��<Wp4�`��
�������]jt�j����#�DO7d��P����e\������>�1�0�Yj�����&���R|�[S|�[R
:���]
�hm��]�+�,�
�\�_��Jom�=
aW�
= ^�5,�(5���
�s�cc�
�C�(���B�z�YzK���r�0:t�
��>�MpJ�q����� 
+'�NR27'i�N5
eS�2\zx�C[�����1
54��H� z�$�O������-��6= p�2	�U��R��jy��=�hz��?:���l�Lc��AL�c��sZa�5=��$9��FWI�O��: ��9�Nؖ2�V	�+#d��*B��y���n
 �~�T5
�|��b��/�c���b:U��7
����N�0.����Rw�ۭ1|��9Y�����S��h�ו�<�
L�R܍�
p�BG�%?冘��p��|����O@���{:z���!���9��"�����@��͡��@�O���g�w�tԶ��TQ�
���Ix�R{�3)=��Vwy�9�w�QU
w���o���@��RR�y��Z����yN��))%��,��C��+���V�aWA-?�31�.q�f�$���m�c�wU�\��M�
E�:$��C�Kzk�ZEe��s�����E<9�OzvbV���oe
CE�d�
��Rt�ec]jl�]M��k�<���b����r)(k=�~6Iy䁞� �U |��6E�]�|�N����T�P�} {6]_�n�#�}��c�<|g�,r�3t�)����.�ޗ�j�


���;��#������9�v9�\ې�p[JG�f�t��-0����W�å�]2\��ۢ�~��.%4�p�U��R+:��ag-j�B
��T�3�n�K�y����2b�����<A,��
-X�Qt�rKڝ����恂��
��,�����\<��p�g�$2��L��R|�rX���v=M�� �s�h�
�F���X��y�9q���[E�
��t
�# ov�Ĭ�1T�f/��J&�؆�*�g<��*
�#$�SΏ`����=\lB��
 g�
v�Bo���aD���v
�j���'�^,�G^�Ն^��;�b��

�߱�K=�� oz ,s+��}
&�2V�vc���u
��4�
����L���SK6$\����y?*쏦¯'�
�NP|���q�6���Z���Z76�!�y��T�xy�\K�)֏�Ô��p�W+[��+v娤���7����*l��<����bz��U�N4
dWC���ZoŇ�^ȏ�IL�M�O[�Fij��M�b.�@b��I�������K�-�zq�w{��.�<&n�
��c�=�뿫L��4�`[Td�}k� @G�x{�[$�" �w&	�n5�fG�-v<�k�4IK�^���l[E�MsY�b_�WF���[�"��
-]�+�<�^�t�-��|g�]���ӯYۭ�7E�,��>�����į�hI�����*V��ن�G���
	���
-��Rr)��PW�s��
-^��*{ZL�]͌�h�����٤��
-�_�3�c�k�~��t��4,�4����
�3�s��Be�s�i|[!�E��aۡ�I�i``�T�"��"|�/���xa�_K��VXk��
ce��<����g9 on
�!î
R_����h��D��\bW�����S�v�3��F[�C�8"�{
G�T�d}���#a�7���[���1D�I
�*Qq�i:|W_��14Mx����su�Gs��_�\
��s���ZR�O�(�E6u%sc��'���^�7�<��So.��2
�b�:+�ζ7���k����!V��!vЃ+�o���<zb�
���Ij^�R�v%�5����Q� 
@v��<�
m�@'{{�:5l�C�B��@~ko����,��ʹ>Y�E�����VJ�|#b��ZFι1AL��f>W6���E���
>ZFə��%�
5��,�_Z�^��'�7
f�8��'��ج�aD��6f��؛fbgY����e�
�0ו��*G�(Hy�	f�G�6��m���2P�ܟ�h�!�f/����
H�� :�vq����Mtk�D��� ��"�%����SUf��g�ۃ��7In��c=���X���<�wLc��վR��{��0݌�n3w��V�+<b&�5A/�
b���������9�ҏN��SnY�P� 
"��X��E���]}%gc��cW�Xۓ���\d��cWz��7{!��オ�L}�	z£�x�� 6w���+e��7�C��S��}9�xWB���E/t��_lK�w0M%�Ms9k�e�}�O�Ҟ�6�=�.�{��md2�������/��Ff*k�Դ
-�0��|]�}5/�g�?��?+�ƙ
H�XPl��v��Nؤ���^�7���_�G�쪩0�,����{דK��Б�aL�y���䭳Ԑ�ДrO��<ېr�
��!��溠RA⭵~H�S��9���
����iX����L�{�J�AX�s�~����
��7CEش��4.ۢ%di��?�	I����Y[�)5�zC����'�İK[��/-�Ĥ�>b\31�a7)���,�)�`w�
����7��ݖ���5ńZ�ռ�>R��>�4��p*����'��@,�{��=4
-��)n���g���7
-�=&ޡĤ[&�̓%!V)�.f�����$��ݨ�����[���g[���ꋃ.
᢮�3���(�U����++��l���1���-�쐕ZD�wu�d��
1Kh����^�4�©'仴�T��c��q;J*j��fn�1q�C�룸Bc"�:�.�NzǃNpLb��nD�X���W���j/<b}��U�o�@Ǭ��C�r_��}�#c�|����?�u9� �s-W�
z�Ej	�&om�	X�im���z��@�>�ճ�{F.�*æεe<��⯈iI۠_��R^��af�6D��@�ٵ40~����y�`����i&	�\!,{�҇M���[Cݣa��a޺�*jĹ����֢�����ߟ\�r�Y$"�҂�՞������׿�2}O�r?�w�S��$l��a�����5����J����)_N
Z����< ƃܟᰝ:ѥc���lʡ�E�w����*	y8��.��}Y��� ��pjk���J�K/��LW
-�*�6��4iW�I��aq�ኯ�x ����k
-
��zk���xI�W��}ͽ�ݨ�I~��.��ߗ�ʃ�

��9bŞ�	`u�]��t>�p�K������:4��GF.c�{�b��}f�D߁

��?�k�M�s^�Cc.��Y�����󵀖
.��`�
@.5�b�����I��*�S�'Z���,��-����dض��<��W5��ڜ�����n-��!/�n�Y� q�x1z6ѣ�3��|�K����#���[�� ���у�\���W�?�|t<��*��?�P�j���w�
{G�K}>�K��N�{`l�%��ge �>
	^.��P@�.��lp�����-v=�{M�t���
-
-:��k�3�z�+�JR>�����Iw{�1�����ۻ]A�pK�y[}Ƞ���{3M�wVz�͓ԢQN�YU��S	h]
�`|�]�˰���r|���샸����
�{o�_gU3�b|�
>\`q ~�Z���I\�B�S� �%�h[�I^���?-w��U$��+�6D��N��>J����伭IR�EF)t����ۜ��m+�}
4piXC]���*��FPa���/+meW�1[S�rQ5<��pk�����T������MQ>
}��T���Ɯ�)x��+�ʥqT�����EL����
Α1�Fp�U��f����a��?�
-C~-r*W��q3=؈m%��s�I��\u�������N5,j����u��e�K�r
�`�~�p�n��(���ab�
-�8��|[l�x�ґ�����\�Є��BW[P�4���S���-���Y�g�i�N4�8�9�I�
#�[��D����P�J
<��\u�{V��ұ0�3l��$.٭b`�A�9�"[5\†�]j�W��3c'Y�
-~�
F��v��*����MY�W曳
� �;���A��:�O��(���&EFYŰp�Dy��:��\�puk����9*٢"��H�;���v$fO�/��
��Y���'�4�#��x��Cţ�j�k�2
~�ЃN��
-����<iG&���_��GǬ��*��;��;���'��wmS���).j��
߁O�"�.ܑ�6�bo�P�1`�]z$����Vn�1���Y^�>������ƚ���aX���7��������=��Fx�M;�m��m�A���W�̰K3�iϗz�z	1W&y�=��L���:
-_�u�����PS���tOW���J�3,�E΄lKj�.M��h�_��Rˁ�����z{l�
L���n������!��n�1�+�����
�� ��\�?ǩޔbr��1=O�Yv�u,�]��X�B
�;{3�:�tu㎦Z�)��9TB�^Xwd���+�ХQJ��0+si���9NH1��~!�������
����+Q)["p�R_�Gcs�í)\ꪈ�\
�� ��t8SY�#å�Ȑ�&iy��di�b_����k����33��q?v�\�?��b����Len
�?ǯsOW���+�n�RpPn@����*���ؖ3;R10/Нq\�c��b�"�m�!"
�)���Y��H�
eQ��11��ŒGc�{��+ĸ�s
y�Mc�XMC���vt�C�'��t讎Mٛ��s�5f�`���~h��:FV�|�1�/ޝ�i�>c�
������V��񸘕v����
1��険� ��l��bmt�i�<x�#��F�������rsޛ�QB��*��N��`���+�s�u�3�Y$T
0�yo�
-T�_ N��X3�y.w��}4�W
-����Q
 3MS�xCc��aJ�y����W|�_�
|vV����LU������xD���.Xȕ�6l��(�b����3鶼*��|����q������X���)t�]�@��ٴ�Y.����b`5�ئĦ�U��B��ޮ�ї�`1�C�Ҋ*A�
-o��?P�@�7X9��è�˭%_/��>ZN�ͭ���
-%m�����p�<�(�k�
a�y�����as�����X�(BEwQ�
6@��
-�
z��<@,{�y�v�5�@�l2\*���⪼7��+
]�A��)��f[DH7�YA/��Eo
�]@�/��J���)u%˩�1�zzw�_m�ܦf!vT,�M�2�1�!��2�uSB͗W���'��EE�Yl�{,�%>�5��
!�z��S��=�7
��Y:�3G����"�G�I{3¦�ia�IB�x�cZ5L�IF�ݔ�˶��2
-k �nZQ�WGHY��f�k�M�o���6�QX��2���_\���MU�j��}�x5�.X�SƄ[Fq��~��ծ"ߥ��
-N�%/�n���w߫ A^�
�(*j}h�/~��V��S�js0��6���ri
��F�i�����Q��}�,��vj��A���c���#��� �S�B�y
��
-� f�<
#����9&5�
1�����Ҩ�QT�B{����������g��7�Iaw�:����?�TD\�o��ۆk	.1wO
Ot��Q�E��ㅟ�*|遞��J�{*R�3���\�/#����@�2|W��_���c�ׇ��OW��aK��ƺ�*~�b�źR�
������"v�svV�Ŗܷ�-%aK=�'a⶧(y2�"�į��-ҥT;�����~k3��~ig*3��t:�Nݕ���R����%���+$@�!B<� �\ܩ����>�x��/�o	GH������:ע"�\�����Â�02dh��� �8E'����,
� ����?�p
�ǡy�vh��wGH+:t�� <2�$e�\�
-<?t⊗U�h9&�� 9���!j����V=������� �O�_Ʊ�_$�!��+.L�����������H�f�W�l趝M�2!+74��U(sӄ,�0
-n��ҟ�
6.h1�S���"va�2
�刣~l9�6\������S�n�)j��
�6q�j�A���m�+��
-c��$��a��g�S+�ʛ��s�5�,�U��1�S����^L���'W~ҷ�$�dQǹ���܊�����&~�M������m��^��B?lz��)A��
G�u�I. ����!bƒ�^���C�L���I��K����hv��(�qo���:�6�/�J�Pٯ�u
-��j�Q���5/ix4)��9&?�V\���� >�yH�H���٘��gzk.*j�m>~qӛw�<�[Mkʸqj��>wף���Y��ʯS
�g?�|�

J��_��U
{a��)g�N��B'���ԩn�[_[�S
����Q�pe�X��h|�m)�Ԁ?��k_��W�Y� �F�	����m����
�B'�T�?~��@;vr��0������ lX��+���'�t׊���8󿳂��> �;�勊��U]s֢
�%F�_�P���c�f��x���͔Կ �8'���c�zsR\.���*zu=l��6f�z�a`I!-4~Z����|�f�x
�W�޲P���M� 6.����_�8�?��������e�[���Y��Q>��DK
�R�.l��1�]���N�2/�~�Rb
-Ԝ����g!=2OM�{�&���S꾝	4~ɬ��G%~
�_�$�W?����vߏ����0kGu�4ڏ9�pF��Q`�w
|��#���2.��s�.�@�6B龓Tc�Uܝ��?l���T�T���Ϊ{s��g!8z�N��pP�ۣ\���T���0�Ǹ�u;�#n��
xN��̤⣾G�~��� ����LJ��jЩ�?���qMP
~��1�TQl@��o���!�xm��t3��^b��Q?^;�rӎ/
-(�<
����	c\AȅC�\���	6s�E�
Ԇ���5{S����ɶ��R��L�E�]�J����ir�	�]��9��Y��j:���5�zY�O
t�
�	��z�ɿ�6ŝ�#��oh(���l%��Es܎��mF��
�4�2���
_?.^I(y�>D%
LI
�~{��')�=/����VlB�F��k�I�:׉�=�P�g%�����N�c'��|�WreM�H�S�3�u��w���8hࣾ�6XҌ���5�����g���IP�S�kb
��
&%?��b��`T(����S
�}�h͹���
-�uҚ�����Z�����������P���l��9�A���n�3{k�.d��Al��-
�i�X�.x�T*z��2­��VsVX�����:�Z��+*��m����kvm��/nB���;���]�F��O�LG�0D=�ft��`�뽣�]>T�?���ԣ���6�S�ر�VJ�Q��LW�m�(��� �Ʈ
[i��ؐ����o�t�3�~6'=l��Q~�
�6l;X�Y
(��M�{�J�g��q:zw�A�g��3���� 
-�_+h��.�
ճ���
�����!���T�|���U�>���F��3��^�nd��:�����
���r�q�6����U
�h���-���;N6���&|����3����¾ ���,�n˻1���^I*�/�$��^�ᄸ�����?�%��v*dQ�(
�?�2
.�ȥ@
K�4!�7���
���/�T�a��ݝdRC.*l������)��|��pZس�a��Gy�m?�h�)��$26�H q<��]͜޲�SWt

ʚ�
T���x��
~��o
s�+ZZ�b&��.��C%�v�R_WV�Y�$:j���ˮlY�Eӊ��@o����G����KMo���� ��c����Ӱ[>:���a�;�b�Uv��l��]
�泝�������a��:���
-v�D+�
����[p�%(�og^q
-����æn��.(hB&�
��
��Mģ��9%6GîzB*�𗷽2�˔X�f%V�) �5��}'���(��Ѝ*�0�K}�
/���/�6)�K��cd���lI��ć'��xK2�^vQO��yT��m)�=��=�����^h�/Z|�@
-�=������Sy�gԧ��mh�W�NA��A��_���K��
����`����	��De� ���
ѹ�7D�����$�l�K��}N.��;>;���6����@{&l��hb�=��R
�r~w��f"Ս��>\D�nI�[ftֶ��m%6�ډ
6v��EYC��Q6�u�X�S��&��	{��t衏I\�SG�
Q�r�_V�>�
-Jn�8��@>]����^T�c�U�.��g£�'���w? �ܰA�׭��538v׉֖
-�ri��j!�~
	�
L��Ps���r]��g_�C���n�xҊ̾�u�)"�� "���1愃�|�A�0�ï]��
m��WG8E�ͼ���5�?<�l$@g���%}c� Z�S���}S�
��O�%^�'oY�/���Sm�o�b�%^��i�+�V��Ã�Gw{œ9<qM�J�߇�q˲�
Ҳ7�NrQ�ba�K-��B?
-����b�C�3��_��O�N�s�e
/�j^��Q�;�bϮ�Q��͉
A�]_K��uM��m[���㨊��l�����
�/�~���(�|��횉E�Jɸ���鹙Y���|VR�����9,�O����Ps̶[�B�����
;�q�ŧ
��֌��~�%3�����Zdꁛ���d�A���}�mB�m���5�R�GTи�,���M\&��ؤ}��
ґ� �=&�}1"�}�ko|2'C�_���]��;f�u5��dw� =t�K_LK�ɞ^X
�.�BgCփ�a28�[��#�z0���0��~C��e�=<:3�`BEM�g,��o~��4�Տ,�:���e�X�n�
'83��y��c���Y��5���nZhi���NcRn
W#ޝٱ²Լ�W���kS}��
+���Ux�L�����hˇ����o7-d��
J({��J{�?s
�Ѽ��^e߉-\Հc&ڊ�:Y�7�ݮ����>ٶ���fL�T�
���\�%'7��XG��-+
mT
�����
��{�I۶BS�CuoԵ/�Ξ
�?��vRtmY�HZ3�rVu�����ab6N+P񎖺��
-\���}Y\���#�����٢�
-|����P<!m�V<�w�x/���M+<QS�j����P�!;��=���:�����2�>������1���6���<��
LSq���-Kӧ�t��8�hLY3��6�X�b�_�<�^�����_���@ğ攽>�&�_��=��f\�qAO���snj��6@;K+�I���8U�¥_\V5���<w�
-�yD�O�����X�?G�5 
|�wm�T�f�Uo�pq{n>e�L*Yՠ�Bjt�4�W����
M)��
����7�u�
Z)\�����vN�aJ�_c�yw�M��5

TC��c.��/��_�
�?_�������q!3��ԆC��n�l�_�ت;$k�-�0����R�6���@��ټ9"b�䂩��6vƹaR�Y���m`� cf�eW=-M/W4�����GjT���𓒺wgm5�f�Q����%�B�ϼ�&d�q�WTȄ�aD�W�
�D�F,�Z��
��vQA�>*�p�45�p
Wy0����ֿt��
,�
-��	�VBɒ�9fA�H�
@%�9�����
^A��-
����w}ҋ�#������O=oa�ݰ�§�9Q�=L��1e�
”F\RQ2��;��
z��i?�s����tr�.89w�
�bD�����1���ܶ=7��ךG����S��'q���3
�w\�ꐙސy��6��g7��yN��	"48T�tNVxk�֔�=���iH
#���_p���}T;
�q+V4茐�i�����@��
!�Xu���Ԙ���6Oՠ�@O�;wkɃ>x�ôW?
S/�
7$mX��ᆨ=�[m�oӝv`͔_t*�'>�|�D��3/R�,D�Hga��i*��,���4�x0�)�1I�}�c !+4{�N�[����?8�yw�촿�
�O3JL��[����w^�/8/��F���4L(y8��.�|s��u�>ЫSj��_�i7�T��,(�;�+w
endstream
endobj
7 0 obj
<</Intent 24 0 R/Name(Layer 1)/Type/OCG/Usage 25 0 R>>
endobj
52 0 obj
<</Intent 68 0 R/Name(Layer 1)/Type/OCG/Usage 69 0 R>>
endobj
68 0 obj
[/View/Design]
endobj
69 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 18.1)/Subtype/Artwork>>>>
endobj
24 0 obj
[/View/Design]
endobj
25 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 18.1)/Subtype/Artwork>>>>
endobj
97 0 obj
[96 0 R]
endobj
137 0 obj
<</CreationDate(D:20141222131647-06'00')/Creator(Adobe Illustrator CC 2014 \(Macintosh\))/ModDate(D:20141222132804-06'00')/Producer(Adobe PDF library 10.01)/Title(Print)>>
endobj
xref
0 138
0000000004 65535 f
-0000000016 00000 n
-0000000173 00000 n
-0000049677 00000 n
-0000000005 00000 f
-0000000006 00000 f
-0000000008 00000 f
-0001627780 00000 n
-0000000010 00000 f
-0000049728 00000 n
-0000000011 00000 f
-0000000012 00000 f
-0000000013 00000 f
-0000000014 00000 f
-0000000015 00000 f
-0000000016 00000 f
-0000000017 00000 f
-0000000018 00000 f
-0000000019 00000 f
-0000000020 00000 f
-0000000021 00000 f
-0000000022 00000 f
-0000000023 00000 f
-0000000026 00000 f
-0001628037 00000 n
-0001628068 00000 n
-0000000027 00000 f
-0000000028 00000 f
-0000000029 00000 f
-0000000030 00000 f
-0000000031 00000 f
-0000000032 00000 f
-0000000033 00000 f
-0000000034 00000 f
-0000000035 00000 f
-0000000036 00000 f
-0000000037 00000 f
-0000000038 00000 f
-0000000039 00000 f
-0000000040 00000 f
-0000000041 00000 f
-0000000042 00000 f
-0000000043 00000 f
-0000000044 00000 f
-0000000045 00000 f
-0000000046 00000 f
-0000000047 00000 f
-0000000048 00000 f
-0000000049 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0001627850 00000 n
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0001627921 00000 n
-0001627952 00000 n
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000000000 00000 f
-0000052875 00000 n
-0000445780 00000 n
-0000445589 00000 n
-0001628153 00000 n
-0000050157 00000 n
-0000454934 00000 n
-0000055718 00000 n
-0000055604 00000 n
-0000052117 00000 n
-0000051357 00000 n
-0000051553 00000 n
-0000051603 00000 n
-0000052375 00000 n
-0000052438 00000 n
-0000052812 00000 n
-0000053071 00000 n
-0000053326 00000 n
-0000055755 00000 n
-0000445662 00000 n
-0000445694 00000 n
-0000446136 00000 n
-0000446392 00000 n
-0000455009 00000 n
-0000455589 00000 n
-0000456743 00000 n
-0000463367 00000 n
-0000528956 00000 n
-0000594545 00000 n
-0000660134 00000 n
-0000725723 00000 n
-0000791312 00000 n
-0000856901 00000 n
-0000922490 00000 n
-0000988079 00000 n
-0001053668 00000 n
-0001103068 00000 n
-0001168657 00000 n
-0001234246 00000 n
-0001299835 00000 n
-0001365424 00000 n
-0001431013 00000 n
-0001496602 00000 n
-0001562191 00000 n
-0001628178 00000 n
-trailer
<</Size 138/Root 1 0 R/Info 137 0 R/ID[<E382E854B58F4B9FB2FF3D8911270784><90640200519A4C229778C04F7C76E654>]>>
startxref
1628367
%%EOF
\ No newline at end of file
diff --git a/doc/api/cpp/algorthm.rst b/doc/api/cpp/algorthm.rst
new file mode 100644
index 0000000..5102c95
--- /dev/null
+++ b/doc/api/cpp/algorthm.rst
@@ -0,0 +1,15 @@
+.. _cpp-pdal-algorithm
+
+.. index:: Algorithm
+
+******************************************************************************
+:cpp:namespace:`pdal::Algorithm`
+******************************************************************************
+
+:cpp:namespace:`pdal::Algorithm` is a set of functions to present a more
+  straightforward API for some common library algorithms.  .
+
+.. doxygennamespace:: pdal::Algorithm
+   :members:
+   :undoc-members:
+
diff --git a/doc/api/cpp/bounds.rst b/doc/api/cpp/bounds.rst
index f9b2e6e..afabc8e 100644
--- a/doc/api/cpp/bounds.rst
+++ b/doc/api/cpp/bounds.rst
@@ -4,6 +4,7 @@
 :cpp:class:`pdal::BOX2D`
 ******************************************************************************
 
+
 .. doxygenclass:: pdal::BOX2D
    :members:
    :undoc-members:
@@ -11,3 +12,4 @@
 .. doxygenclass:: pdal::BOX3D
    :members:
    :undoc-members:
+
diff --git a/doc/api/cpp/charbuf.rst b/doc/api/cpp/charbuf.rst
new file mode 100644
index 0000000..c93e5d5
--- /dev/null
+++ b/doc/api/cpp/charbuf.rst
@@ -0,0 +1,12 @@
+.. _cpp-pdal-charbuf:
+
+******************************************************************************
+:cpp:class:`pdal::Charbuf`
+******************************************************************************
+
+
+.. doxygenclass:: pdal::Charbuf
+   :members:
+   :undoc-members:
+
+
diff --git a/doc/api/cpp/dimension.rst b/doc/api/cpp/dimension.rst
index e0ceeb4..a5547df 100644
--- a/doc/api/cpp/dimension.rst
+++ b/doc/api/cpp/dimension.rst
@@ -1,17 +1,8 @@
 .. _cpp-pdal-dimension:
 
 ******************************************************************************
-pdal::Dimension
+``pdal::Dimension``
 ******************************************************************************
 
-.. doxygenfunction:: pdal::Dimension::description
-
-.. doxygenfunction:: pdal::Dimension::id
-
-.. doxygenfunction:: pdal::Dimension::name
-
-.. doxygenfunction:: pdal::Dimension::defaultType
-
-.. doxygenfunction:: pdal::Dimension::interpretationName
-
-.. doxygenfunction:: pdal::Dimension::type
+.. doxygennamespace:: pdal::Dimension
+    :undoc-members:
diff --git a/doc/api/cpp/extractor.rst b/doc/api/cpp/extractor.rst
new file mode 100644
index 0000000..31f3e15
--- /dev/null
+++ b/doc/api/cpp/extractor.rst
@@ -0,0 +1,12 @@
+.. _cpp-pdal-extractor:
+
+******************************************************************************
+:cpp:class:`pdal::Extractor`
+******************************************************************************
+
+
+.. doxygenclass:: pdal::Extractor
+   :members:
+   :undoc-members:
+
+
diff --git a/doc/api/cpp/fileutils.rst b/doc/api/cpp/fileutils.rst
new file mode 100644
index 0000000..eff6422
--- /dev/null
+++ b/doc/api/cpp/fileutils.rst
@@ -0,0 +1,8 @@
+.. _cpp-pdal-fileutils:
+
+******************************************************************************
+``pdal::FileUtils``
+******************************************************************************
+
+.. doxygennamespace:: pdal::FileUtils
+
diff --git a/doc/api/cpp/index.rst b/doc/api/cpp/index.rst
index 254955f..7880fe9 100644
--- a/doc/api/cpp/index.rst
+++ b/doc/api/cpp/index.rst
@@ -4,18 +4,25 @@
 C++ API
 ******************************************************************************
 
-
 .. toctree::
    :maxdepth: 2
 
-   dimension
+   algorithm
    bounds
+   charbuf
+   dimension
+   extractor
+   fileutils
    filter
+   istream
    log
    metadata
    options
-   pointview
    pointtable
+   pointview
+   programargs
    reader
    stage
+   stagefactory
+   utils
    writer
diff --git a/doc/api/cpp/istream.rst b/doc/api/cpp/istream.rst
new file mode 100644
index 0000000..122d00a
--- /dev/null
+++ b/doc/api/cpp/istream.rst
@@ -0,0 +1,11 @@
+.. _cpp-pdal-istream:
+
+******************************************************************************
+:cpp:class:`pdal::IStream`
+******************************************************************************
+
+.. doxygenclass:: pdal::IStream
+   :members:
+   :undoc-members:
+
+
diff --git a/doc/api/cpp/programargs.rst b/doc/api/cpp/programargs.rst
new file mode 100644
index 0000000..463759c
--- /dev/null
+++ b/doc/api/cpp/programargs.rst
@@ -0,0 +1,12 @@
+.. _cpp-pdal-programargs:
+
+******************************************************************************
+:cpp:class:`pdal::ProgramArgs`
+******************************************************************************
+
+
+.. doxygenclass:: pdal::ProgramArgs
+   :members:
+   :undoc-members:
+
+
diff --git a/doc/api/cpp/stagefactory.rst b/doc/api/cpp/stagefactory.rst
new file mode 100644
index 0000000..7f367bc
--- /dev/null
+++ b/doc/api/cpp/stagefactory.rst
@@ -0,0 +1,9 @@
+.. _cpp-pdal-stagefactory:
+
+******************************************************************************
+:cpp:class:`pdal::StageFactory`
+******************************************************************************
+
+.. doxygenclass:: pdal::StageFactory
+   :members:
+   :undoc-members:
diff --git a/doc/api/cpp/utils.rst b/doc/api/cpp/utils.rst
new file mode 100644
index 0000000..3873d9a
--- /dev/null
+++ b/doc/api/cpp/utils.rst
@@ -0,0 +1,14 @@
+.. _cpp-pdal-utils
+
+.. index:: Utils
+
+******************************************************************************
+``pdal::Utils``
+******************************************************************************
+
+:cpp:namespace:`pdal::Utils` is a set of utility functions.
+
+.. doxygennamespace:: pdal::Utils
+   :members:
+   :undoc-members:
+
diff --git a/doc/apps.rst b/doc/apps.rst
index 5ae3592..558efca 100644
--- a/doc/apps.rst
+++ b/doc/apps.rst
@@ -6,15 +6,17 @@ Applications
 
 :Author: Howard Butler
 :Contact: howard at hobu.co
-:Date: 6/1/2015
+:Date: 03/13/2016
 
 PDAL contains consists of a single application, called ``pdal``. The ``pdal``
 application currently has the following subcommands:
 
 * :ref:`delta <delta_command>`
+* :ref:`density <density_command>`
 * :ref:`diff <diff_command>`
 * :ref:`ground <ground_command>`
 * :ref:`info <info_command>`
+* :ref:`merge <merge_command>`
 * :ref:`pcl <pcl_command>`
 * :ref:`pipeline <pipeline_command>`
 * :ref:`random <random_command>`
@@ -118,6 +120,20 @@ Example 2:
     5,0.00,0.00,0.00
     ....
 
+.. _density_command:
+
+density command
+--------------------------------------------------------------------------------
+
+The density command produces a tessellated hexagonal OGR layer from the
+output of :ref:`filters.hexbin`.
+
+::
+
+    --input, -i        input point cloud file name
+    --output, -o       output vector data source
+    --lyr_name         OGR layer name to write into datasource
+    --driver, -f       OGR driver name to use
 
 .. _diff_command:
 
@@ -326,6 +342,28 @@ Example 2:
           ...
 
 
+.. _merge_command:
+
+merge command
+------------------------------------------------------------------------------
+
+The ``merge`` command will combine input files into a single output file.
+
+
+::
+
+    $ pdal merge <input> ... <output>
+
+::
+
+    --files [-f] arg  Non-positional argument to specify filenames.  The last
+      file listed is taken to be the output file.
+
+This command provides simple merging of files.  It provides no facility for
+filtering, reprojection, etc.  The file type of the input files may be
+different from one another and different from that of the output file.
+
+
 .. _pcl_command:
 
 pcl command
diff --git a/doc/community.rst b/doc/community.rst
index 3bfe967..50eeede 100644
--- a/doc/community.rst
+++ b/doc/community.rst
@@ -45,6 +45,9 @@ take contributions in all forms, and we welcome those who are willing to roll
 up their sleeves and start filing tickets, pushing code, generating builds, and
 answering questions.
 
+There is also a public Gitter chat room integrated with the `GitHub`_ repository
+and available at https://gitter.im/PDAL/PDAL or Gitter client.
+
 .. seealso::
 
     :ref:`development_index` provides more information on how the PDAL software
diff --git a/doc/compilation/dependencies.rst b/doc/compilation/dependencies.rst
index 4892375..ff00dbb 100644
--- a/doc/compilation/dependencies.rst
+++ b/doc/compilation/dependencies.rst
@@ -17,34 +17,6 @@ plugin architecture that loads them at runtime.
 Required Dependencies
 ------------------------------------------------------------------------------
 
-Boost
-..............................................................................
-
-PDAL attempts to constrain its code-love for Boost and not always try to use the
-latest and the greatest, but the instinct is hard to control. Specifically, PDAL
-takes advantage of a number of late-version features in boost::accumulators for
-statistics filtering, and as of this writing, it should be assumed that the
-minimum version required for Boost is 1.55. Other versions less than that may
-work with some minor modifications or ``#ifdef``'ing, but the PDAL developers
-currently track rather late versions of Boost.
-
-
-Packages Used
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-An list includes:
-
-* Accumulators
-* Filesystem
-* Program Options
-* Property Tree
-* IO Streams
-* System
-* String Algorithms
-* UUID
-
-
-
 GDAL
 ..............................................................................
 
diff --git a/doc/compilation/index.rst b/doc/compilation/index.rst
index e79d330..cb1c627 100644
--- a/doc/compilation/index.rst
+++ b/doc/compilation/index.rst
@@ -12,6 +12,11 @@ build.
     :ref:`download` contains links to installable binaries for Windows, OSX, and
     RHEL Linux systems.
 
+.. seealso::
+    :ref:`docker` describes how to use `Docker <http://docker.io>`__  to
+    get going with PDAL very quickly. This method is likely the fastest way
+    to start using PDAL, especially if you just wish to use the :ref:`apps`.
+
 Contents:
 
 .. toctree::
@@ -20,4 +25,5 @@ Contents:
    unix
    windows
    dependencies
+   python
 
diff --git a/doc/compilation/python.rst b/doc/compilation/python.rst
new file mode 100644
index 0000000..e1645fc
--- /dev/null
+++ b/doc/compilation/python.rst
@@ -0,0 +1,35 @@
+.. _python_installation:
+
+********************************************************************
+Python installation
+********************************************************************
+
+Beginning in PDAL 1.0.0, a Python extension to execute pipelines
+and read its output as a numpy array is available.
+
+To install it need to compile and install :ref:`PDAL <building>` and
+then install the PDAL Python extension
+
+Install from local
+-------------------------
+In the source code of PDAL there is a ``python`` folder, you have to enter
+there and run ::
+
+    python setup.py build
+    # this should be run as administrator/super user
+    python setup.py install
+
+Install from repository
+--------------------------
+The second method to install the PDAL Python extension is to use `pip`_
+or `easy_install`_, you have to run the command as administrator. ::
+
+    pip install PDAL
+
+.. note::
+
+    To install pip please read
+    `here <https://pip.pypa.io/en/stable/installing/>`_
+
+.. _`pip`: https://pip.pypa.io/en/stable/
+.. _`easy_install`: https://pypi.python.org/pypi/setuptools
diff --git a/doc/compilation/unix.rst b/doc/compilation/unix.rst
index 5ee9b97..4c607c4 100644
--- a/doc/compilation/unix.rst
+++ b/doc/compilation/unix.rst
@@ -25,7 +25,7 @@ PDAL is known to compile on Linux 2.6's of various flavors and OSX with XCode.
 
 .. seealso::
 
-    :ref:`vagrant` contains an automated way to build PDAL and all of
+    :ref:`docker` contains an automated way to build PDAL and all of
     its dependencies.
 
 .. note::
@@ -315,5 +315,4 @@ configure your :ref:`dependencies`.
 .. _`Autoconf`: http://www.gnu.org/software/autoconf/
 .. _`LLVM`: http://llvm.org/
 .. _`OSGeo4W`: http://trac.osgeo.org/osgeo4w/
-.. _`Boost`: http://www.boost.org/
 
diff --git a/doc/compilation/windows.rst b/doc/compilation/windows.rst
index fc742f3..13df4e0 100644
--- a/doc/compilation/windows.rst
+++ b/doc/compilation/windows.rst
@@ -16,8 +16,8 @@ Building Under Windows
 
 .. seealso::
 
-    :ref:`vagrant` contains an automated way to build PDAL and all of
-    its dependencies on Unix. If you just want to apply PDAL commandline
+    :ref:`docker` describes a way to get a PDAL build and all of
+    its dependencies. If you just want to apply PDAL commandline
     operations to data, this mechanism is likely to be much faster than
     compiling your own.
 
@@ -63,8 +63,7 @@ Basic Build Steps
 ------------------------------------------------------------------------------
 
 Most users can use this procedure to build PDAL on Windows. We satisfy all
-dependencies using OSGeo4W and use the Boost subset that is included with the
-library.
+dependencies using OSGeo4W.
 
 0. If you plan to use LAZ support (compressed LAS), get the LASzip source code
 and build it (http://www.laszip.org). Add the directory with laszip.dll to
@@ -168,7 +167,6 @@ situations (including x64 support) where using OSGeo4W is inadequate.
    following external libraries. You'll need to get them and build them (or
    perhaps, download prebuilt binary packages).
 
-  - Boost (get version 1.4.8 or later from http://boost.org) [ required ]
   - GDAL (get version 1.6 or later from http://gdal.org) [ optional ]
   - LASZip (get version 1.0.1 or later from http://laszip.org) [ optional ]
   - libxml2 (http://libxml2.org) [ optional ]
@@ -177,53 +175,9 @@ situations (including x64 support) where using OSGeo4W is inadequate.
   - libtiff (optional)
   - libgeotiff (optional)
 
-  One option for all dependencies except Boost is OSGeo4W (free, win32
+  One option for all dependencies is OSGeo4W (free, win32
   installer, no x64 -- see "Basic Build Steps"_ above).
 
-  Boost Build Notes
-
-  Options for Boost include might include BoostPro (free win32 installer, no
-  x64) or the internal "BCP'ed" extract in PDAL. We say "might" because PDAL
-  requires Boost version 1.48 or later and at this writing that's not supported
-  by BoostPro. If you need to build Boost from source, the following notes will
-  be helpful.
-
-  Boost libraries include an "ABI" description as part of the name.
-  For example
-  ::
-
-
-      "libboost_filesystem-vc100-mt-gd-1_48.lib"
-                                    ^^  This is the <abi-tag>
-
-  <abi-tag> - This is a string of one or more characters. For us, the characters of interest are s, g, d.
-
-
-      s - indicates that the library is statically linked to the C++ Standard Library and Runtime Library.
-
-      g - indicates that the debug versions of the standard and runtime support libraries are linked against. On a typical Windows installation you will get a debug version of the runtime libraries to link against, but this need not be the case on Unix boxes.
-
-      d - indicates all debug symbols are available in the library, no inlining and optimization has been done while building the code.
-
-  This is particularly important on Windows. Unlike other platforms, CRT
-  configuration (debug vs release and statically linked vs shared dll), needs to
-  match you PDAL configuration.
-
-  After you get the Boost archive (source) from http://www.boost.org from the
-  root of the boost distribution run "bootstrap.bat" and then "b2" with the
-  appropriate options.
-
-  Our default release configuration uses /MD, so you want the release shared CRT, like "libboost_filesystem-vc100-mt-1_48.lib"::
-
-     c:\utils\boost_1_48_0>.\bootstrap.bat
-     c:\utils\boost_1_48_0>.\b2 variant=release link=static threading=multi runtime-link=shared stage
-
-  Our default debug configuration uses /MDd, so you want the debug shared CRT, like "libboost_filesystem-vc100-mt-gd-1_48.lib"::
-
-     c:\utils\boost_1_48_0>.\bootstrap.bat
-     c:\utils\boost_1_48_0>.\b2 variant=debug link=static threading=multi runtime-link=shared stage
-
-  Finally, we've seen problems with b2.exe if the path includes some paths that are quoted ("c:\\Program Files (x86)\\doxygen\\bin").  You can unquote or remove them from the %PATH% while building Boost.
 
 2. Having staged the above libs, you need to specify where they are by editing
    the appropriate lines in the "config.bat" file. Each dependency has a short
@@ -270,5 +224,4 @@ Troubleshooting
 * libtiff.dll errors - double check that other versions of the lib are not on the path. For example, ArcGIS installs a version of libtiff that is not compatible.
 * "ERROR 4: Unable to open EPSG support file gcs.csv" or GDAL_DATA variable errors - Set GDAL_DATA system variable to ``C:\OSGeo4W\share\gdal``
 * PROJ errors - Set PROJ_LIB system variable to ``C:\OSGeo4W\share\proj``
-* link failures due to _ITERATOR_DEBUG_LEVEL mismatches between (external) boost and PDAL.  Most likely problem is that you are mixing Release and Debug libs (e.g. PDAL is debug but Boost is release).  You can also set _ITERATOR_DEBUG_LEVEL=0 as in Project Pages / Configuration Properties / C,C++ / Preprocessor / Preprocessor Definitions.
 
diff --git a/doc/conf.py b/doc/conf.py
index 0231f2a..0351643 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -380,7 +380,13 @@ breathe_diagram = {
 pdf_documents = [
     ('index', u'PDAL-'+release, u'PDAL Documentation', u'Howard Butler\\Michael Gerlek\\The PDAL Development Team'),
 ]
-pdf_stylesheets = ['sphinx','kerning','a4']
+pdf_stylesheets = ['pdal']
 pdf_break_level = 3
-pdf_toc_depth = 5
-pdf_default_dpi = 144
+pdf_use_coverpage = True
+pdf_breakside = 'any'
+pdf_toc_depth = 3
+pdf_default_dpi = 200
+pdf_style_path = ['.' ]
+pdf_fit_mode="shrink"
+pdf_use_numbered_links = True
+pdf_fit_background_mode="scale"
diff --git a/doc/contributors.rst b/doc/contributors.rst
new file mode 100644
index 0000000..bcbcb01
--- /dev/null
+++ b/doc/contributors.rst
@@ -0,0 +1,86 @@
+.. _contributors:
+
+******************************************************************************
+Contributors
+******************************************************************************
+
+:Author: Howard Butler
+:Contact: howard at hobu.co
+:Date: 12/29/2015
+
+Numerous organizations, companies, and individuals have contributed time,
+money, and code to build PDAL up into a highly capable software package.
+Without these contributions, PDAL would not progress as quickly, and its
+quality wouldn't be as high. The development team is proud of the software, and
+it collectively represents years of experiences doing point cloud data
+management. We hope you'll find it useful too.
+
+This page is to recognize these contributors and their contributions. Thanks.
+
+Engineering Contributors
+--------------------------------------------------------------------------------
+
+.. image:: https://hobu.co/theme/images/hobulogo.png
+    :target: http://hobu.co
+
+`Hobu`_ is the primary company behind the design, testing, development, and
+distribution of PDAL. Two Hobu team members primarily interact with PDAL.
+`Howard Butler`_ founded the project, and he provides project leadership and
+software development.  `Andrew Bell`_ has contributed design, refactoring, and
+new feature development of PDAL over the past couple of years.
+
+.. _`Howard Butler`: https://github.com/hobu
+.. _`Andrew Bell`: https://github.com/abellgithub
+.. _`Hobu`: http://hobu.co
+
+
+.. image:: http://radiantblue.com/wp-content/uploads/2015/12/logo1.png
+    :target: http://radiantblue.com
+
+`Michael Gerlek`_ from `RadiantBlue`_ helped bootstrap PDAL by providing its
+first design, basic primitive objects, and first :ref:`stage <stage_index>`
+implementations.
+
+.. _`Michael Gerlek`: http://github.com/mpgerlek
+
+
+`Bradley Chambers`_ from `RadiantBlue`_ has contributed numerous features and
+capabilities to the PDAL project, including :ref:`Poisson sampling
+<dart-throwing-tutorial>`, :ref:`Progressive Morphological Filters <pcl_ground>`, and
+:ref:`PCL Visualizer <writers.pclvisualizer>`. He is also a prolific
+:ref:`tutorial` writer, and he maintains the :ref:`Windows builds <download>`
+for the project.
+
+.. _`Bradley Chambers`: https://github.com/chambbj
+.. _`RadiantBlue`: http://radiantblue.com/
+
+
+Funding Contributors
+--------------------------------------------------------------------------------
+
+.. image:: ./rsgis_logo.png
+    :target: http://www.erdc.usace.army.mil/Locations/CRREL.aspx
+
+The US Army Corps of Engineers Remote Sensing / GIS Center of Expertise at
+`CRREL`_ sponsors development of PDAL for its use in point cloud data
+management systems. `CRREL`_'s `GRiD`_ project manages LiDAR and point cloud
+data for a multitude of U.S. Army Corps missions. Find out more about GRiD in
+this `LiDAR Magazine article`_.
+
+.. image:: ./nsf1.gif
+    :target: http://www.nsf.gov
+
+.. image:: ./uoh.png
+    :target: http://www.uh.edu
+
+`NSF <http://www.nsf.gov>`_, in collaboration with `Dr. Craig Glennie
+<http://www.cive.uh.edu/faculty/glennie>`_ at the `University of Houston
+<http://www.uh.edu>`_ supports PDAL with funding support to develop and enhance
+statistical methods, transformation operations, tutorial and example
+development, and `PCL <http://pointclouds.org>`_ integration.
+
+
+.. _`GRiD`: http://lidar.io/about.html
+.. _`LiDAR Magazine article`: http://www.lidarmag.com/content/view/11343/198/
+.. _`CRREL`: http://www.erdc.usace.army.mil/Locations/CRREL.aspx
+
diff --git a/doc/development/conventions.rst b/doc/development/conventions.rst
index 8511bf6..006d994 100644
--- a/doc/development/conventions.rst
+++ b/doc/development/conventions.rst
@@ -102,7 +102,7 @@ Layout/Organization of Source Tree
   #include "support.hpp"
 
 * #include lines should be grouped and arranged in this order: C++/std headers,
-  3rd-party headers (e.g. gdal or boost), pdal headers, local headers.  The
+  3rd-party headers (e.g. gdal), pdal headers, local headers.  The
   pdal headers may be further grouped by subdirectory, e.g. drivers/liblas,
   filters, etc.
 
diff --git a/doc/docbuild/Dockerfile b/doc/docbuild/Dockerfile
index 475441d..a2a3cee 100644
--- a/doc/docbuild/Dockerfile
+++ b/doc/docbuild/Dockerfile
@@ -7,7 +7,8 @@ RUN apt-get install -y cmake libjpeg8-dev zlib1g-dev texlive-latex-base texlive-
 RUN apt-get install -y git
 RUN apt-get install -y graphviz
 
-RUN pip install Sphinx rst2pdf breathe sphinx_bootstrap_theme awscli
+RUN pip install Sphinx breathe sphinx_bootstrap_theme awscli matplotlib
+RUN pip install --upgrade https://github.com/hobu/rst2pdf/zipball/master
 
 RUN useradd pdal
 RUN mkdir /home/pdal&& chown -R pdal: /home/pdal
diff --git a/doc/download.rst b/doc/download.rst
index a79978e..0207ba0 100644
--- a/doc/download.rst
+++ b/doc/download.rst
@@ -5,22 +5,31 @@ Download
 ******************************************************************************
 
 
+.. contents::
+   :depth: 3
+   :backlinks: none
+
+
 Current Release(s)
 ------------------------------------------------------------------------------
 
-* **2015-09-11** `PDAL-1.0.1-src.tar.gz`_ (`md5`_)
+* **2015-11-25** `PDAL-1.1.0-src.tar.gz`_ `Release Notes`_ (`md5`_)
 
-.. _`PDAL-1.0.1-src.tar.gz`: http://download.osgeo.org/pdal/PDAL-1.0.1-src.tar.gz
-.. _`md5`: http://download.osgeo.org/pdal/PDAL-1.0.1-src.tar.gz.md5
+.. _`Release Notes`: https://github.com/PDAL/PDAL/releases/tag/1.1.0
+
+.. _`PDAL-1.1.0-src.tar.gz`: http://download.osgeo.org/pdal/PDAL-1.1.0-src.tar.gz
+.. _`md5`: http://download.osgeo.org/pdal/PDAL-1.1.0-src.tar.gz.md5
 .. _`DebianGIS`: http://wiki.debian.org/DebianGis
 
 
 Past Releases
 ------------------------------------------------------------------------------
 
-* **2015-09-10** `PDAL-1.0.0-src.tar.gz`_
 
-.. _`PDAL-1.0.0-src.tar.gz`: http://download.osgeo.org/pdal/PDAL-1.0.0-src.tar.gz
+* **2015-09-11** `PDAL-1.0.1-src.tar.gz`_ (`md5`_)
+
+.. _`PDAL-1.0.1-src.tar.gz`: http://download.osgeo.org/pdal/PDAL-1.0.1-src.tar.gz
+
 
 
 .. _source:
@@ -39,10 +48,21 @@ You can obtain a copy of the active source code by issuing the following command
 Binaries
 ------------------------------------------------------------------------------
 
+Docker
+................................................................................
+
+The fastest way to get going with PDAL is to use the Docker build. See the
+tutorial at :ref:`docker` for more information.
+
+::
+
+    docker pull pdal/pdal:1.2
+
+
 Windows
 ................................................................................
 
-A 1.0.1 release of PDAL is available via `OSGeo4W`_. It is only 64-bit at this
+A 1.1.0 release of PDAL is available via `OSGeo4W`_. It is only 64-bit at this
 time.
 
 RPMs
@@ -50,10 +70,11 @@ RPMs
 
 RPMs for PDAL are available at http://pdal.s3-website-us-east-1.amazonaws.com/rpms/
 
-.. _`OSGeo4W`: http://trac.osgeo.org/osgeo4w/
-
-
-.. _`DebianGIS`: http://wiki.debian.org/DebianGis
+Debian
+................................................................................
 
+Debian packages are now available on `Debian Unstable`_.
 
+.. _`OSGeo4W`: http://trac.osgeo.org/osgeo4w/
+.. _`Debian Unstable`: https://tracker.debian.org/pkg/pdal
 .. _`LASzip`: http://laszip.org
diff --git a/doc/index.rst b/doc/index.rst
index 8f3167f..40fd38b 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -30,23 +30,22 @@ Documentation
    community
    stages/index
    tutorial/index
-   vagrant
+   tutorial/docker
    pipeline
    faq
    development/index
    api/index
    metadata
+   contributors
    copyright
 
 
 Developers and Sponsorship
-------------------------------------------------------------------------------
+================================================================================
 
 PDAL is developed by `Howard Butler`_, `Michael Gerlek`_, `Andrew Bell`_,
-`Brad Chambers`_ and `others`_.
-
-PDAL's development is supported in coordination with efforts by the `U.S. Army
-Cold Regions Research and Engineering Laboratory`_.
+`Brad Chambers`_ and `others`_. Find out more about who contributes to
+PDAL at :ref:`contributors`.
 
 
 .. note::
diff --git a/doc/json_pipeline_specification.rst b/doc/json_pipeline_specification.rst
new file mode 100644
index 0000000..6c14908
--- /dev/null
+++ b/doc/json_pipeline_specification.rst
@@ -0,0 +1,343 @@
+.. _json_pipeline_specification:
+
+======================================
+Draft PDAL JSON Pipeline Specification
+======================================
+
+:Authors:
+    Bradley J. Chambers,
+    Connor Manning,
+    Andrew Bell,
+    Howard Butler
+
+:Revision: 0.1
+:Date: 22 December 2015
+
+The PDAL JSON specification is a point cloud processing pipeline interchange
+format based on JavaScript Object Notation (JSON).
+
+.. sectnum::
+.. contents::
+   :depth: 4
+   :backlinks: none
+
+============
+Introduction
+============
+
+A PDAL JSON object represents a processing pipeline.
+
+A complete PDAL JSON data structure is always an object (in JSON terms). In PDAL
+JSON, an object consists of a collection of name/value pairs -- also called
+members. For each member, the name is always a string. Member values are either
+a string, number, object, array or one of the literals: "true", "false", and
+"null". An array consists of elements where each element is a value as
+described above.
+
+Examples
+--------
+
+A simple PDAL pipeline, inferring the appropriate drivers for the reader and
+writer from filenames, and able to be specified as a set of sequential steps:
+
+.. code-block:: json
+
+  {
+      "pipeline":[
+          "input.las",
+          {
+              "type":"crop",
+              "bounds":"([0,100],[0,100])"
+          },
+          "output.bpf"
+      ]
+  }
+
+A more complex PDAL pipeline, that reprojects the stage tagged ``A1``, merges
+the result with ``B``, and writes the merged output with the ``points2grid``
+plugin.:
+
+.. code-block:: json
+
+  {
+      "pipeline":[
+          {
+              "filename":"A.las",
+              "spatialreference":"EPSG:26916"
+          },
+          {
+              "type":"filters.reprojection",
+              "in_srs":"EPSG:26916",
+              "out_srs":"EPSG:4326",
+              "tag":"A2"
+          },
+          {
+              "filename":"B.las",
+              "tag":"B"
+          },
+          {
+              "type":"filters.merge",
+              "tag":"merged",
+              "inputs":[
+                  "A2",
+                  "B"
+              ]
+          },
+          {
+              "type":"writers.p2g",
+              "filename":"output.tif"
+          }
+      ]
+  }
+
+Definitions
+-----------
+
+* JavaScript Object Notation (JSON), and the terms object, name, value, array,
+  and number, are defined in IETF RTC 4627, at
+  http://www.ietf.org/rfc/rfc4627.txt.
+
+* The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
+  "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this documention are to
+  be interpreted as described in IETF RFC 2119, at
+  http://www.ietf.org/rfc/rfc2119.txt.
+
+=====================
+PDAL Pipeline Objects
+=====================
+
+PDAL JSON pipelines always consist of a single object. This object (referred to
+as the PDAL JSON object below) represents a processing pipeline.
+
+* The PDAL JSON object may have any number of members (name/value pairs).
+
+* The PDAL JSON object must have a :ref:`pipeline_array`.
+
+.. _pipeline_array:
+
+Pipeline Array
+--------------
+
+* The pipeline array may have any number of string or :ref:`stage_object`
+  elements.
+
+* String elements shall be interpreted as filenames. PDAL will attempt to infer
+  the proper driver from the file extension and position in the array. A writer
+  stage will only be created if the string is the final element in the array.
+
+.. _stage_object:
+
+Stage Objects
+-------------
+
+For more on PDAL stages and their options, check the PDAL documentation on
+`Readers, Writers, and Filters <http://www.pdal.io/stages/index.html>`_.
+
+* A stage object may have a member with the name ``tag`` whose value is a
+  string. The purpose of the tag is to cross-reference this stage within other
+  stages. Each ``tag`` must be unique.
+
+* A stage object may have a member with the name ``inputs`` whose value is an
+  array of strings. Each element in the array is the tag of another stage to be
+  set as input to the current stage.
+
+* Reader stages will disregard the ``inputs`` member.
+
+* If ``inputs`` is not specified for the first non-reader stage, all reader
+  stages leading up to the current stage will be used as inputs.
+
+* If ``inputs`` is not specified for any subsequent non-reader stages, the
+  previous stage in the array will be used as input.
+
+* A ``tag`` mentioned in another stage's ``inputs``  must have been previously
+  defined in the ``pipeline`` array.
+
+* A reader or writer stage object may have a member with the name ``type`` whose
+  value is a string. The ``type`` must specify a valid PDAL reader or writer
+  name.
+
+* A filter stage object must have a member with the name ``type`` whose value is
+  a string. The ``type`` must specify a valid PDAL filter name.
+
+* A stage object may have additional members with names corresponding to
+  stage-specific option names and their respective values.
+
+Filename Globbing
+-----------------
+
+* A filename may contain the wildcard character ``*`` to match any string of
+  characters. This can be useful if working with multiple input files in a
+  directory (e.g., merging all files).
+
+=================
+Extended Examples
+=================
+
+BPF to LAS
+----------
+
+The following pipeline converts the input file from BPF to LAS, inferring both
+the reader and writer type, and setting a number of options on the writer stage.
+
+.. code-block:: json
+
+  {
+      "pipeline":[
+          "utm15.bpf",
+          {
+              "filename":"out2.las",
+              "scale_x":0.01,
+              "offset_x":311898.23,
+              "scale_y":0.01,
+              "offset_y":4703909.84,
+              "scale_z":0.01,
+              "offset_z":7.385474
+          }
+      ]
+  }
+
+Python HAG
+----------
+
+In our next example, the reader and writer types are once again inferred. After
+reading the input file, the ferry filter is used to copy the Z dimension into a
+new height above ground (HAG) dimension. Next, the programmable filter is used
+with a python script to compute height above ground values by comparing the Z
+values to a surface model. These height above ground values are then written
+back into the Z dimension for further analysis.
+
+.. code-block:: json
+
+  {
+      "pipeline":[
+          "autzen.las",
+          {
+              "type":"ferry",
+              "dimensions":"Z=HAG"
+          },
+          {
+              "type":"programmable",
+              "script":"hag.py",
+              "function":"filter",
+              "module":"anything"
+          },
+          "autzen-hag.las"
+      ]
+  }
+
+DTM
+---
+
+A common task is to create a digital terrain model (DTM) from the input point
+cloud. This pipeline infers the reader type, applies an approximate ground
+segmentation filter, and then creates the DTM using the Points2Grid writer with
+only the ground returns.
+
+.. code-block:: json
+
+  {
+      "pipeline":[
+          "autzen-full.las",
+          {
+              "type":"ground",
+              "approximate":true,
+              "max_window_size":33,
+              "slope":1.0,
+              "max_distance":2.5,
+              "initial_distance":0.15,
+              "cell_size":1.0,
+              "extract":true,
+              "classify":false
+          },
+          {
+              "type":"p2g",
+              "filename":"autzen-surface.tif",
+              "output_type":"min",
+              "output_format":"tif",
+              "grid_dist_x":1.0,
+              "grid_dist_y":1.0
+          }
+      ]
+  }
+
+Decimate & Colorize
+-------------------
+
+This example still infers the reader and writer types while applying options on
+both. The pipeline decimates the input LAS file by keeping every other point,
+and then colorizes the points using the provided raster image. The output is
+written as ASCII text.
+
+.. code-block:: json
+
+  {
+      "pipeline":[
+          {
+              "filename":"1.2-with-color.las",
+              "spatialreference":"EPSG:2993"
+          },
+          {
+              "type":"decimation",
+              "step":2,
+              "offset":1
+          },
+          {
+              "type":"colorization",
+              "raster":"autzen.tif",
+              "dimensions":"Red:1:1, Green:2:1, Blue:3:1"
+          },
+          {
+              "filename":"junk.txt",
+              "delimiter":",",
+              "write_header":false
+          }
+      ]
+  }
+
+Merge & Reproject
+-----------------
+
+Our first example with multiple readers, this pipeline infers the reader types,
+and assigns spatial reference information to each. Next, the merge filter merges
+points from all previous readers, and the reprojection filter reprojects data to
+the specified output spatial reference system.
+
+.. code-block:: json
+
+  {
+      "pipeline":[
+          {
+              "filename":"1.2-with-color.las",
+              "spatialreference":"EPSG:2027"
+          },
+          {
+              "filename":"1.2-with-color.las",
+              "spatialreference":"EPSG:2027"
+          },
+          {
+              "type":"merge"
+          },
+          {
+              "type":"reprojection",
+              "out_srs":"EPSG:2028"
+          }
+      ]
+  }
+
+Globbed Inputs
+--------------
+
+Finally, we capture another merge pipeline demonstrating the ability to glob
+multiple input LAS files from a given directory.
+
+.. code-block:: json
+
+  {
+      "pipeline":[
+          "/path/to/data/*.las",
+          {
+              "type":"merge"
+          },
+          "output.las"
+      ]
+  }
diff --git a/doc/metadata.rst b/doc/metadata.rst
index 7882f5c..6fd9029 100644
--- a/doc/metadata.rst
+++ b/doc/metadata.rst
@@ -10,8 +10,7 @@ Metadata
 
 Metadata is an important component of any data processing story. PDAL attempts
 to allow users to operate with metadata in a relatively free-form way, with
-its main Metadata utility, :cpp:class:`pdal::Metadata`, being a lightly
-wrapped `boost::property_tree`_.
+its main Metadata utility, :cpp:class:`pdal::Metadata`.
 
 The basic structure of a :cpp:class:`pdal::Metadata` instance is the following
 tree structure:
@@ -34,8 +33,7 @@ tree structure:
 Metadata Types
 ------------------------------------------------------------------------------
 
-:cpp:class:`pdal::Metadata` instances are essentially a specially-organized
-boost::property_tree, and as such, require that any classes that are added
+:cpp:class:`pdal::Metadata` instances require that any classes that are added
 to them be copy-constructable and have an ostream<< operator for them.  While
 these constraints mean they are all serializable to strings,
 :cpp:class:`pdal::Metadata` also keeps an explicit type variable, `type` for
@@ -227,5 +225,3 @@ little bit flatter...
         </Metadata>
       </Metadata>
     </Reader>
-
-.. _`boost::property_tree`: http://www.boost.org/doc/libs/release/libs/property_tree/
diff --git a/doc/nsf1.gif b/doc/nsf1.gif
new file mode 100644
index 0000000..182a6aa
Binary files /dev/null and b/doc/nsf1.gif differ
diff --git a/doc/pdal.style b/doc/pdal.style
new file mode 100644
index 0000000..3153f3c
--- /dev/null
+++ b/doc/pdal.style
@@ -0,0 +1,344 @@
+pageSetup:
+    margin-bottom: 8mm
+    margin-left: 12mm
+    margin-right: 12mm
+    margin-top: 8mm
+
+styles:
+    admonition:
+        backColor: #EEFFCC
+        borderColor: #AACC99
+        borderPadding: 8
+        borderWidth: 0.5
+        commands: []
+                [VALIGN, [0, 0], [-1, -1], TOP]
+        spaceAfter: 6
+        spaceBefore: 12
+
+    admonition-heading:
+        backColor: null
+        borderColor: null
+        borderPadding: 0
+        borderWidth: 0
+        leftIndent: 0
+        parent: heading3
+        textColor: black
+
+    admonition-title:
+        backColor: null
+        borderColor: null
+        borderPadding: 0
+        borderWidth: 0
+        leftIndent: 0
+        parent: heading3
+
+    member:
+        parent: admonition-title
+    function:
+        parent: admonition-title
+    file:
+        parent: admonition-title
+
+    seealso-heading:
+        parent: admonition-title
+
+    attribute: parent: bodytext
+    author:
+        alignment: TA_CENTER
+        fontName: stdSansBold
+        fontSize: 120%
+        parent: bodytext
+
+    centered:
+        alignment: TA_CENTER
+        fontName: stdBold
+        parent: bodytext
+
+    class: parent: bodytext
+    code:
+        allowOrphans: false
+        allowWidows: false
+        backColor: #EEFFCC
+        borderColor: #AACC99
+        borderPadding: [6, 0, 0, 4]
+        borderWidth: 0.3
+        spaceBefore: 0
+
+    confval: parent: bodytext
+    data: parent: bodytext
+    kbd: parent: bodytext
+    desc: {parent: bodytext, spaceBefore: 6}
+    descclassname: {fontName: stdMono, parent: literal}
+    descname: {fontName: stdMonoBold, parent: literal}
+    descparameter: {fontName: stdMono, parent: literal}
+    desctype: {fontName: stdMono, parent: literal}
+    directive: parent: bodytext
+    exception: parent: bodytext
+    heading:
+        backColor: #F2F2F2
+        borderColor: #CCCCCC
+        borderPadding: [6, 0, 0, 10]
+        borderWidth: 0.3
+        fontName: stdSansBold
+        fontSize: 10
+        leading: 10
+        leftIndent: 0
+        spaceBefore: 16
+        textColor: #20435C
+
+    heading1: fontSize: 200%
+    heading2: fontSize: 160%
+    heading3: fontSize: 140%
+    heading4: fontSize: 120%
+    heading5: fontSize: 110%
+    heading6: fontSize: 100%
+    hlist:
+        alignment: TA_CENTER
+        commands: []
+                [VALIGN, [0, 0], [-1, -1], TOP]
+        parent: normal
+        spaceAfter: 0
+        spaceBefore: 6
+
+    method: {fontName: stdSansBold, parent: bodytext}
+    note:
+        backColor: #EEEEEE
+        borderColor: #CCCCCC
+        parent: admonition
+
+    optional: {fontName: stdMonoBold, parent: literal}
+    pygments-bp: {parent: code, textColor: #007020}
+    pygments-c: {parent: code, textColor: #808080}
+    pygments-c1: {parent: code, textColor: #808080}
+    pygments-cm: {parent: code, textColor: #808080}
+    pygments-cp: {parent: code, textColor: #507090}
+    pygments-cs:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #cc0000
+
+    pygments-err:
+        backColor: #F0A0A0
+        parent: code
+        textColor: #F00000
+
+    pygments-gd: {parent: code, textColor: #A00000}
+    pygments-ge: {fontName: stdMonoItalic, parent: code}
+    pygments-gh:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #000080
+
+    pygments-gi: {parent: code, textColor: #00A000}
+    pygments-go: {parent: code, textColor: #808080}
+    pygments-gp:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #c65d09
+
+    pygments-gr: {parent: code, textColor: #FF0000}
+    pygments-gs: {fontName: stdMonoBold, parent: code}
+    pygments-gt: {parent: code, textColor: #0040D0}
+    pygments-gu:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #800080
+
+    pygments-hll: {backColor: #ffffcc, parent: code}
+    pygments-il:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #0000D0
+
+    pygments-k:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #008000
+
+    pygments-kc:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #008000
+
+    pygments-kd:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #008000
+
+    pygments-kn:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #008000
+
+    pygments-kp:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #003080
+
+    pygments-kr:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #008000
+
+    pygments-kt:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #303090
+
+    pygments-m:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #6000E0
+
+    pygments-mf:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #6000E0
+
+    pygments-mh:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #005080
+
+    pygments-mi:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #0000D0
+
+    pygments-mo:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #4000E0
+
+    pygments-n-identifier: parent: code
+    pygments-na: {parent: code, textColor: #0000C0}
+    pygments-nb: {parent: code, textColor: #007020}
+    pygments-nc:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #B00060
+
+    pygments-nd:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #505050
+
+    pygments-ne:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #F00000
+
+    pygments-nf:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #0060B0
+
+    pygments-ni:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #800000
+
+    pygments-nl:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #907000
+
+    pygments-nn:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #0e84b5
+
+    pygments-no:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #003060
+
+    pygments-nt: {parent: code, textColor: #007000}
+    pygments-nv: {parent: code, textColor: #906030}
+    pygments-o: {parent: code, textColor: #303030}
+    pygments-ow:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #000000
+
+    pygments-s: {backColor: #fff0f0, parent: code}
+    pygments-s1: {backColor: #fff0f0, parent: code}
+    pygments-s2: {backColor: #fff0f0, parent: code}
+    pygments-sb: {backColor: #fff0f0, parent: code}
+    pygments-sc: {parent: code, textColor: #0040D0}
+    pygments-sd: {parent: code, textColor: #D04020}
+    pygments-se:
+        backColor: #fff0f0
+        fontName: stdMonoBold
+        parent: code
+        textColor: #606060
+
+    pygments-sh: {backColor: #fff0f0, parent: code}
+    pygments-si: {backColor: #e0e0e0, parent: code}
+    pygments-sr:
+        backColor: #fff0ff
+        parent: code
+        textColor: #000000
+
+    pygments-ss: {parent: code, textColor: #A06000}
+    pygments-sx:
+        backColor: #fff0f0
+        parent: code
+        textColor: #D02000
+
+    pygments-vc: {parent: code, textColor: #306090}
+    pygments-vg:
+        fontName: stdMonoBold
+        parent: code
+        textColor: #d07000
+
+    pygments-vi: {parent: code, textColor: #3030B0}
+    pygments-w: {parent: code, textColor: #bbbbbb}
+    returns: parent: bodytext
+    role: parent: bodytext
+    seealso:
+        backColor: #FFFFCC
+        borderColor: #FFFF66
+        parent: admonition
+
+    sidebar:
+        backColor: #EEFFCC
+        borderColor: #AACC99
+        borderPadding: 8
+        borderWidth: 0.5
+        spaceAfter: 6
+        spaceBefore: 12
+
+    sidebar-subtitle:
+        backColor: null
+        borderColor: null
+        borderPadding: 0
+        borderWidth: 0
+        leftIndent: 0
+        parent: heading4
+        spaceBefore: 0
+
+    sidebar-title:
+        backColor: null
+        borderColor: null
+        borderPadding: 0
+        borderWidth: 0
+        leftIndent: 0
+        parent: heading3
+
+    table-heading: {borderWidth: 0, parent: heading}
+
+    todo-node:
+        backColor: #FFFFFF
+        borderColor: #CCCCCC
+        parent: admonition
+
+    versionmodified: {fontName: stdItalic, parent: bodytext}
+
+    warning:
+        backColor: #FFE4E4
+        borderColor: #FF6666
+        parent: admonition
+
+    xref: {fontName: stdMonoBold, parent: code}
+
diff --git a/doc/pipeline.rst b/doc/pipeline.rst
index 4478dbe..9cc9388 100644
--- a/doc/pipeline.rst
+++ b/doc/pipeline.rst
@@ -6,7 +6,7 @@ Pipeline
 
 :Author: Howard Butler
 :Contact: howard at hobu.co
-:Date: 12/26/2014
+:Date: 03/22/2016
 
 Pipelines are the operative construct in PDAL -- you must construct pipelines
 to perform data translation operations, filter data, or simply to provide data
@@ -14,21 +14,29 @@ to an endpoint. This document describes some features and background of PDAL
 Pipelines and give some examples you can use to execute translation
 operations.
 
-Playing Dolls
-------------------------------------------------------------------------------
+.. seealso::
+
+    :ref:`pipeline_command` is used to invoke JSON pipeline operations
+    via the command line.
+
 
-A `Pipeline` is composed as a set of `Matryoshka dolls`_, with the outside
-or largest doll being the final endpoint of the pipeline, and the inner-most
-doll being the starting point. Each "doll" in the set represents a
-:cpp:class:`pdal::Stage` with its subsequent operations happening at that
-point as data are pulled through the pipeline from the starting point to
-end point.
+.. warning::
 
-There are two primary building blocks in PDAL, :cpp:class:`pdal::Stage` and
+    As of PDAL 1.2, `JSON`_ is now the preferred specification language
+    for PDAL pipelines. XML read support is still available at 1.2, but
+    JSON is preferred.
+
+.. _`JSON`: http://www.json.org/
+
+Composing pipelines
+------------------------------------------------------------------------------
+
+A `Pipeline` is composed as an array of :cpp:class:`pdal::Stage` , with the
+first stage at the beginning and the last at the end.  There are two primary
+building blocks in PDAL, :cpp:class:`pdal::Stage` and
 :cpp:class:`pdal::PointView`. :cpp:class:`pdal::Reader`,
 :cpp:class:`pdal::Writer`, and :cpp:class:`pdal::Filter` are all subclasses of
-:cpp:class:`pdal::Stage` that provide the concrete dolls for the Matryoshka
-set.
+:cpp:class:`pdal::Stage`.
 
 :cpp:class:`pdal::PointView` is the substrate that flows between stages in a
 pipeline and transfers the actual data as it moves through the pipeline. A
@@ -38,58 +46,50 @@ actual channels that are stored in the :cpp:class:`pdal::PointView`.
 
 PDAL provides four types of stages -- :cpp:class:`pdal::Reader`,
 :cpp:class:`pdal::Writer`, :cpp:class:`pdal::Filter`, and
-:cpp:class:`pdal::MultiFilter` -- with the latter being hardly used at this
-point. A Reader is a producer of data, a Writer is a consumer of data, and a
-Filter is an actor on data.
+:cpp:class:`pdal::MultiFilter` -- with the latter being hardly used (just
+:ref:`filters.merge`) at this point. A Reader is a producer of data, a Writer
+is a consumer of data, and a Filter is an actor on data.
 
 .. note::
 
-   As a consumer, you are generally not supposed to worry about the underlying storage of the
-   PointView, but there might be times when you simply just "want the data."
-   In those situations, you can use the :cpp:class:`pdal::PointView::getBytes`
-   method to stream out the raw storage.
+   As a C++ API consumer, you are generally not supposed to worry about the underlying
+   storage of the PointView, but there might be times when you simply just
+   "want the data." In those situations, you can use the
+   :cpp:func:`pdal::PointView::getBytes` method to stream out the raw storage.
 
-.. _`Matryoshka dolls`: http://en.wikipedia.org/wiki/Matryoshka_doll
 
-A Basic Example
+Usage
 ------------------------------------------------------------------------------
 
 While pipeline objects are manipulable through C++ objects, the other, more
-convenient way is through an XML syntax. The XML syntax mirrors the Matryoshka
+convenient way is through an JSON syntax. The JSON syntax mirrors the
 arrangement of the Pipeline, with options and auxiliary metadata added on a
 per-stage basis.
 
 We have two use cases specifically in mind:
 
-    * a command-line application that reads an XML file to allow a user to
-      easily construct arbitrary writer pipelines, as opposed to having to
-      build applications custom to individual needs with arbitrary options,
-      filters, etc.
-
-    * a user can provide XML for a reader pipeline, construct it via a simple
-      call to the PipelineManager API, and then use the Stage read() function
-      to perform the read and then do any processing of the points.  This style
-      of operation is very appropriate for using PDAL from within environments
-      like Python where the focus is on just getting the points, as opposed to
-      complex pipeline construction.
-
-Let's start with the following basic example:
-
-::
-
-    <?xml version="1.0" encoding="utf-8"?>
-    <Pipeline version="1.0">
-        <Writer type="writers.las">
-            <Option name="filename">
-                output.las
-            </Option>
-            <Reader type="readers.las">
-                <Option name="filename">
-                    ./path/to/my/file.las
-                </Option>
-            </Reader>
-        </Writer>
-    </Pipeline>
+* a :ref:`command-line <pipeline_command>` application that reads an JSON
+  file to allow a user to easily construct arbitrary writer pipelines, as
+  opposed to having to build applications custom to individual needs with
+  arbitrary options, filters, etc.
+
+* a user can provide JSON for a reader pipeline, construct it via a simple call
+  to the PipelineManager API, and then use the :cpp:func:`pdal::Stage::read()`
+  function to perform the read and then do any processing of the points.  This
+  style of operation is very appropriate for using PDAL from within
+  environments like Python where the focus is on just getting the points, as
+  opposed to complex pipeline construction.
+
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "/path/to/my/file/input.las",
+        "output.las"
+      ]
+    }
+
 
 .. note::
 
@@ -97,18 +97,6 @@ Let's start with the following basic example:
     test suite pipeline files that provide an excellent example of the
     currently possible operations.
 
-Pipeline textual description
-..............................................................................
-
-The first element, Pipeline, tells us what we are and gives a version number.
-Next, we have the Writer element, and provides the `type` of writer stage
-that we are going to have as the endpoint of our pipeline (see more about this
-in `Stage Types`_). After that, we have an Option element, which provides the
-filename that the Writer is going to use when outputting the file. Then we
-have the final doll in our Matryoshka set, the Reader, which has a stage
-type of `readers.las` with its own Option giving a filename to use
-to read the file.
-
 
 Stage Types
 ..............................................................................
@@ -129,116 +117,39 @@ PDAL. Readers follow the pattern of :ref:`readers.las` or
 .. note::
 
     Issuing the command ``pdal info --options`` will list all available
-    stages and their options.
+    stages and their options. See :ref:`info_command` for more.
 
 Options
 ------------------------------------------------------------------------------
 
 Options are the mechanism that PDAL uses to inform :cpp:class:`pdal::Stage`
-entities how to process data. A stage option can itself have options, going
-on ad infinitum. The following example sorts the data using a `Morton
-ordering`_ using :ref:`filters.mortonorder` and writes out a `LASzip`_ file as the result.
+entities how to process data. The following example sorts the data using a
+`Morton ordering`_ using :ref:`filters.mortonorder` and writes out a `LASzip`_
+file as the result. We use options to define the ``compression`` function
+for the :ref:`writers.las` :cpp:class:`pdal::Stage`.
 
 .. _`LASzip`: http://www.laszip.org
 .. _`Morton ordering`: http://en.wikipedia.org/wiki/Z-order_curve
-::
-
-    <?xml version="1.0"?>
-    <Pipeline version="1.0">
-        <Writer type="writers.las">
-            <Option name="filename">
-                compressed.laz
-            </Option>
-            <Option name="compression">
-                true
-            </Option>
-            <Filter type="filters.mortonorder">
-                <Reader type="readers.las">
-                    <Option name="filename">
-                        uncompressed.las
-                    </Option>
-                </Reader>
-            </Filter>
-        </Writer>
-    </Pipeline>
 
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "uncompressed.las",
+        {
+          "type":"filters.mortonorder"
+        }
+        {
+          "type":"writers.las",
+          "filename":"compressed.laz",
+          "compression":"true"
+        }
+      ]
+    }
 
-.. note::
 
-    :ref:`metadata` is quite similar to `Options`_ except that Option/Options
-    instances are used to denote an action to be done during a stage rather
-    than simply a data value to be set or fetched.  PDAL is indeed still hazy
-    here and there is ample room to clean this up, but the general gestalt is
-    that you use Options to tell a Stage what to do, and you use Metadata to
-    set a value or data member for something related to a stage.
 
 Syntax Specification
 ------------------------------------------------------------------------------
 
-
-* <Pipeline>
-    * this is the root element for all pipeline xml
-    * mandatory
-    * child elements:
-        * exactly one of the following four:
-            * <Writer> element, for writer pipelines
-            * <Reader> or <Filter> or <MultiFilter> element, for reader
-              pipelines
-    * attributes:
-        * the "version" attribute must appear exactly once; the value of this
-          attribute shall be the string "1.0"
-
-* <Writer> :cpp:class:`pdal::Writer`
-    * indicates a writer stage
-    * child elements:
-        * zero or more <Option> elements
-        * exactly one <Reader> or <Filter> or <MultiFilter> element
-    * attributes:
-        * the "type" attribute must appear exactly once; the value of this
-          attribute shall be the string corresponding to the name of
-          the Writer stage type, e.g. "writers.las"
-
-* <Reader> :cpp:class:`pdal::Reader`
-    * indicates a reader stage
-    * child elements:
-        * zero or more <Option> elements
-    * attributes:
-        * the "type" attribute must appear exactly once; the value of this
-          attribute shall be the string corresponding to the name of
-          the Reader stage type, e.g. "readers.las"
-
-* <Filter> :cpp:class:`pdal::Filter`
-    * indicates a filter stage
-    * child elements:
-        * zero or more <Option> elements
-        * exactly one <Reader> or <Filter> or <MultiFilter> element
-    * attributes:
-        * the "type" attribute must appear exactly once; the value of this
-          attribute shall be the string corresponding to the name of
-          the filter stage type, e.g. "filters.crop"
-
-* <MultiFilter> :cpp:class:`pdal::MultiFilter`
-    * indicates a multifilter stage (filter than takes >1 input stage)
-    * child elements:
-        * zero or more <Option> elements
-        * one or more <Reader> or <Filter> or <MultiFilter> elements
-
-    * attributes:
-        * the "type" attribute must appear exactly once; the value of this
-          attribute shall be the string corresponding to the name of
-          the MultiFilter stage type, e.g. "filter.mosaic"
-
-* <Option> :cpp:class:`pdal::Option`
-    * indicates an option parameter to the pipeline stage
-    * may only be a child of a <Reader>, <Writer>, <Filter>, or <MultiFilter>
-      element
-    * attributes:
-        * the "name" attribute must appear exactly once; the value of this
-          attribute shall be the name of the option, e.g. "filename"
-    * any number of recursively-defined <Option> elements
-    * content:
-        * the content of the element shall be the string representing the
-          value of the option, e.g. "input.las"
-
-
-
+See :ref:`json_pipeline_specification` for more detail
diff --git a/doc/rsgis_logo.png b/doc/rsgis_logo.png
new file mode 100644
index 0000000..3052303
Binary files /dev/null and b/doc/rsgis_logo.png differ
diff --git a/doc/stages/filters.attribute.rst b/doc/stages/filters.attribute.rst
index 0e468be..b70cf61 100644
--- a/doc/stages/filters.attribute.rst
+++ b/doc/stages/filters.attribute.rst
@@ -37,38 +37,25 @@ In this scenario, we are altering the attributes of the dimension
 have their classification to match the 'CLS' field associated with that
 feature.
 
-.. code-block:: xml
-
-    <?xml version="2.0" encoding="utf-8"?>
-    <Pipeline version="1.0">
-        <Writer type="writers.las">
-            <Option name="filename">
-                attributed.las
-            </Option>
-            <Option name="forward">
-                all
-            </Option>
-            <Filter type="filters.attribute">
-                <Option name="dimension">
-                    Classification
-                </Option>
-                <Option name="datasource">
-                    ./test/data/autzen/attributes.shp
-                </Option>
-                <Option name="layer">
-                    attributes
-                </Option>
-                <Option name="column">
-                    CLS
-                </Option>
-                <Reader type="readers.las">
-                    <Option name="filename">
-                        ../autzen/autzen-dd.las
-                    </Option>
-                </Reader>
-            </Filter>
-        </Writer>
-    </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "autzen-dd.las",
+        {
+          "type":"filters.attribute",
+          "dimension":"Classification",
+          "datasource":"attributes.shp",
+          "layer":"attributes",
+          "column":"CLS"
+        },
+        {
+          "filename":"attributed.las",
+          "scale_x":0.0000001,
+          "scale_y":0.0000001
+        }
+      ]
+    }
 
 Example 2
 ---------
@@ -76,35 +63,25 @@ Example 2
 This pipeline sets the PointSourceId of all points from 'autzen-dd.las'
 to the value '26'.
 
-.. code-block:: xml
-
-    <?xml version="2.0" encoding="utf-8"?>
-    <Pipeline version="1.0">
-        <Writer type="writers.las">
-            <Option name="filename">
-                attributed.las
-            </Option>
-            <Option name="forward">
-                all
-            </Option>
-            <Filter type="filters.attribute">
-                <Option name="dimension">
-                    PointSourceId
-                </Option>
-                <Option name="value">
-                    26
-                </Option>
-                <Option name="datasource">
-                    ./test/data/autzen/attributes.shp
-                </Option>
-                <Reader type="readers.las">
-                    <Option name="filename">
-                        ../autzen/autzen-dd.las
-                    </Option>
-                </Reader>
-            </Filter>
-        </Writer>
-    </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "autzen-dd.las",
+        {
+          "type":"filters.attribute",
+          "dimension":"PointSourceId",
+          "value":26
+        },
+        {
+          "filename":"attributed.las",
+          "scale_x":0.0000001,
+          "scale_y":0.0000001
+        }
+      ]
+    }
+
+
 
 Example 3
 --------------------------------------------------------------------------------
@@ -114,38 +91,23 @@ This example sets the Intensity attribute to ``CLS`` values read from the
 
 .. _`OGR SQL`: http://www.gdal.org/ogr_sql_sqlite.html
 
-.. code-block:: xml
-
-    <?xml version="2.0" encoding="utf-8"?>
-    <Pipeline version="1.0">
-        <Writer type="writers.las">
-            <Option name="filename">
-                attributed.las
-            </Option>
-            <Option name="forward">
-                all
-            </Option>
-            <Filter type="filters.attribute">
-                <Option name="dimension">
-                    Intensity
-                </Option>
-                <Option name="datasource">
-                    ./test/data/autzen/attributes.shp
-                </Option>
-                <Option name="query">
-                    SELECT CLS FROM attributes where cls != 6
-                </Option>
-                <Option name="column">
-                    CLS
-                </Option>
-                <Reader type="readers.las">
-                    <Option name="filename">
-                        ../autzen/autzen-dd.las
-                    </Option>
-                </Reader>
-            </Filter>
-        </Writer>
-    </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "autzen-dd.las",
+        {
+          "type":"filters.attribute",
+          "dimension":"Intensity",
+          "datasource":"attributes.shp",
+          "query":"SELECT CLS FROM attributes where cls!=6",
+          "column":"CLS"
+        },
+        {
+          "filename":"attributed.las",
+        }
+      ]
+    }
 
 Options
 -------
diff --git a/doc/stages/filters.chipper.rst b/doc/stages/filters.chipper.rst
index 0fb44b8..4d42c1d 100644
--- a/doc/stages/filters.chipper.rst
+++ b/doc/stages/filters.chipper.rst
@@ -7,9 +7,14 @@ The chipper filter takes a single large point cloud and converts it into a set
 of smaller clouds, or chips. The chips are all spatially contiguous and
 non-overlapping, so the result is a an irregular tiling of the input data.
 
+.. note::
+
+    Each chip will have approximately, but not exactly, the ``capacity`` point
+    count specified.
+
 .. seealso::
 
-    :ref:`split_command` utilizes the :ref:`filters.chipper` to split
+    The :ref:`split_command` utilizes the :ref:`filters.chipper` to split
     data by capacity.
 
 .. figure:: filters.chipper.img1.png
@@ -32,20 +37,21 @@ data segmented into smaller blocks).
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.pgpointcloud">
-      <Option name="connection">dbname='lidar' user='user'</Option>
-      <Filter type="filters.chipper">
-        <Option name="capacity">400</Option>
-        <Reader type="readers.las">
-            <Option name="filename">example.las</Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "example.las",
+        {
+          "type":"filters.chipper",
+          "capacity":"400",
+        },
+        {
+          "type":"writers.pgpointcloud",
+          "connection":"dbname='lidar' user='user'"
+        }
+      ]
+    }
 
 Options
 -------
diff --git a/doc/stages/filters.colorization.rst b/doc/stages/filters.colorization.rst
index cffcd69..0cbde65 100644
--- a/doc/stages/filters.colorization.rst
+++ b/doc/stages/filters.colorization.rst
@@ -3,7 +3,10 @@
 filters.colorization
 ====================
 
-The colorization filter populates dimensions in the point buffer using input values read from a raster file. Commonly this is used to add Red/Green/Blue values to points from an aerial photograph of an area. However, any band can be read from the raster and applied to any dimension name desired.
+The colorization filter populates dimensions in the point buffer using input
+values read from a raster file. Commonly this is used to add Red/Green/Blue
+values to points from an aerial photograph of an area. However, any band can be
+read from the raster and applied to any dimension name desired.
 
 .. figure:: filters.colorization.img1.jpg
     :scale: 50 %
@@ -11,26 +14,32 @@ The colorization filter populates dimensions in the point buffer using input val
 
     After colorization, points take on the colors provided by the input image
 
-The bands of the raster to apply to each are selected using the "band" option, and the values of the band may be scaled before being written to the dimension. If the band range is 0-1, for example, it might make sense to scale by 256 to fit into a traditional 1-byte color value range.
+.. note::
 
-.. code-block:: xml
+    `GDAL`_ is used to read the color information and any GDAL-readable
+    `supported format`_ can be read.
 
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">colorized.las</Option>
-      <Filter type="filters.colorization">
-        <Option name="dimensions">
-          Red:1:1.0, Blue, Green::256.0
-        </Option>
-        <Option name="raster">aerial.tif</Option>
-        <Reader type="readers.las">
-          <Option name="filename">uncolored.las</Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+.. _GDAL: http://www.gdal.org
+.. _`supported format`: www.gdal.org/formats_list.html
 
+The bands of the raster to apply to each are selected using the "band" option,
+and the values of the band may be scaled before being written to the dimension.
+If the band range is 0-1, for example, it might make sense to scale by 256 to
+fit into a traditional 1-byte color value range.
+
+.. code-block:: json
+
+  {
+    "pipeline":[
+      "uncolored.las",
+      {
+        "type":"filters.colorization",
+        "dimensions":"Red:1:1.0, Blue, Green::256.0",
+        "raster":"aerial.tif"
+      },
+      "colorized.las"
+    ]
+  }
 
 Considerations
 --------------------------------------------------------------------------------
@@ -47,20 +56,18 @@ Consider a striped TIFF file of 286mb:
 
     -rw-r-----@  1 hobu  staff   286M Oct 29 16:58 orth-striped.tif
 
-::
+.. code-block:: json
 
-    <?xml version="1.0" encoding="utf-8"?>
-    <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">coloured-striped.las</Option>
-      <Filter type="filters.colorization">
-        <Option name="raster">orth-striped.tif</Option>
-        <Reader type="readers.las">
-          <Option name="filename">colourless.laz</Option>
-        </Reader>
-      </Filter>
-    </Writer>
-    </Pipeline>
+  {
+    "pipeline":[
+      "colourless.laz",
+      {
+        "type":"filters.colorization",
+        "raster":"orth-striped.tif"
+      },
+      "coloured-striped.las"
+    ]
+  }
 
 Simple application of the :ref:`filters.colorization` using the striped `TIFF`_
 with a 268mb :ref:`readers.las` file will take nearly 1:54.
@@ -69,7 +76,7 @@ with a 268mb :ref:`readers.las` file will take nearly 1:54.
 
 ::
 
-    [hobu at pyro knudsen (master)]$ time ~/dev/git/pdal/bin/pdal pipeline -i striped.xml
+    [hobu at pyro knudsen (master)]$ time ~/dev/git/pdal/bin/pdal pipeline -i striped.json
 
     real	1m53.477s
     user	1m20.018s
@@ -82,7 +89,7 @@ dramatically speeds up the color fetching:
 ::
 
     [hobu at pyro knudsen (master)]$ export GDAL_CACHEMAX=500
-    [hobu at pyro knudsen (master)]$ time ~/dev/git/pdal/bin/pdal pipeline striped.xml
+    [hobu at pyro knudsen (master)]$ time ~/dev/git/pdal/bin/pdal pipeline striped.json
 
     real	0m19.034s
     user	0m15.557s
@@ -102,5 +109,3 @@ dimensions
   begin at 1 and increment from the band number of the previous dimension.
   If not supplied, the scaling factor is 1.0.
   [Default: "Red:1:1.0, Green:2:1.0, Blue:3:1.0"]
-
-.. _GDAL: http://gdal.org
diff --git a/doc/stages/filters.crop.rst b/doc/stages/filters.crop.rst
index d9a1e42..08da208 100644
--- a/doc/stages/filters.crop.rst
+++ b/doc/stages/filters.crop.rst
@@ -12,37 +12,34 @@ set for each input crop region.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">
-        file-cropped.las
-      </Option>
-      <Filter type="filters.crop">
-        <Option name="bounds">
-          ([0,1000000],[0,1000000])
-        </Option>
-        <Reader type="readers.las">
-          <Option name="filename">
-            file-input.las
-          </Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "file-input.las",
+        {
+          "type":"filters.crop",
+          "bounds":"bounds",
+          "count":"([0,1000000],[0,1000000])"
+        },
+        {
+          "type":"writers.las",
+          "filename":"file-cropped.las"
+        }
+      ]
+    }
+
 
 
 Options
 -------
 
 bounds
-  The extent of the clipping rectangle, expressed in a string, eg: *([xmin, xmax], [ymin, ymax])*
-  
+  The extent of the clipping rectangle, expressed in a string, eg: *([xmin, xmax], [ymin, ymax])*  This option can be specified more than once.
+
 polygon
-  The clipping polygon, expressed in a well-known text string, eg: *POLYGON((0 0, 5000 10000, 10000 0, 0 0))* 
-  
+  The clipping polygon, expressed in a well-known text string, eg: *POLYGON((0 0, 5000 10000, 10000 0, 0 0))*  This option can be specified more than once.
+
 outside
   Invert the cropping logic and only take points **outside** the cropping bounds or polygon. [Default: **false**]
-  
+
diff --git a/doc/stages/filters.dartsample.rst b/doc/stages/filters.dartsample.rst
index ddff730..e739880 100644
--- a/doc/stages/filters.dartsample.rst
+++ b/doc/stages/filters.dartsample.rst
@@ -1,10 +1,16 @@
-.. _filters.dartthrowing:
+.. _filters.dartsample:
 
 ===============================================================================
-filters.dartthrowing
+filters.dartsample
 ===============================================================================
 
-The practice of performing Poisson sampling via "Dart Throwing" was introduced in the mid-1980's by [Cook1986]_ and [Dippe1985]_, and has been applied to point clouds in other software [Mesh2009]_. Our implementation is a brute force approach that randomly selects points from the input ``PointView``, adding them to the output ``PointView`` subject to the minimum distance constraint (the ``radius``). The full layout (i.e., the dimensions) of the input ``PointView`` is kept in tact (the sa [...]
+The practice of performing Poisson sampling via "Dart Throwing" was introduced
+in the mid-1980's by [Cook1986]_ and [Dippe1985]_, and has been applied to
+point clouds in other software [Mesh2009]_. Our implementation is a brute force
+approach that randomly selects points from the input ``PointView``, adding them
+to the output ``PointView`` subject to the minimum distance constraint (the
+``radius``). The full layout (i.e., the dimensions) of the input ``PointView``
+is kept in tact (the same cannot be said for :ref:`filters.voxelgrid`).
 
 .. seealso::
 
diff --git a/doc/stages/filters.decimation.rst b/doc/stages/filters.decimation.rst
index c6c8f77..6706d2e 100644
--- a/doc/stages/filters.decimation.rst
+++ b/doc/stages/filters.decimation.rst
@@ -3,10 +3,7 @@
 filters.decimation
 ==================
 
-The decimation filter takes a stream of points and steps through it, taking
-only every Nth point. With a step of 2, the filter takes every second point,
-for a reduction of 50%. With a step of 10, the filter takes every tenth point,
-for a reduction of 90%.
+The decimation filter retains every Nth point from an input point view.
 
 Example
 -------
@@ -34,7 +31,13 @@ Options
 -------
 
 step
-  How many points to skip between each sample point? A step of 1 will skip no point, and leave the stream unchanged. A step of 100 will reduce the stream by 99%. [Default: **1**]
+  Number of points to skip between each sample point.  A step of 1 will skip
+  no points.  A step of 2 will skip every other point.  A step of 100 will
+  reduce the input by ~99%. [Default: 1]
 
 offset
-  Start sampling with what point? [Default: **0**]
+  Point index to start sampling.  Point indexes start at 0.  [Default: 0]
+
+limit
+  Point index at which sampling should stop (exclusive).  [Default: No limit]
+
diff --git a/doc/stages/filters.divider.rst b/doc/stages/filters.divider.rst
index 636f04e..61409f5 100644
--- a/doc/stages/filters.divider.rst
+++ b/doc/stages/filters.divider.rst
@@ -18,20 +18,21 @@ Example
 
 This pipeline will create 10 output files from the input file readers.las.
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">out_#.las</Option>
-      <Filter type="filters.divider">
-        <Option name="count">10</Option>
-        <Reader type="readers.las">
-            <Option name="filename">example.las</Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "example.las",
+        {
+          "type":"filters.divider",
+          "count":"10"
+        },
+        {
+          "type":"writers.las",
+          "filename":"out_#.las"
+        }
+      ]
+    }
 
 Options
 -------
@@ -51,5 +52,5 @@ capacity
 
 .. warning::
 
-    You must specify exactly one of either 'count' or 'capacity'.
+    You must specify exactly one of either ``count`` or ``capacity``.
 
diff --git a/doc/stages/filters.ferry.rst b/doc/stages/filters.ferry.rst
index b9acfb5..c391ed5 100644
--- a/doc/stages/filters.ferry.rst
+++ b/doc/stages/filters.ferry.rst
@@ -20,40 +20,32 @@ stashing the pre-projection X and Y values into the
 `StatePlaneX` and `StatePlaneY` dimensions. Future
 processing, can then operate on these data.
 
-.. code-block:: xml
-
-    <?xml version="1.0" encoding="utf-8"?>
-    <Pipeline version="1.0">
-        <Writer type="writers.las">
-            <Option name="filename">
-                colorized.las
-            </Option>
-            <Filter type="filters.reprojection">
-                <Option name="out_srs">
-                    EPSG:4326+4326
-                </Option>
-                <Option name="scale_x">
-                    0.0000001
-                </Option>
-                <Option name="scale_y">
-                    0.0000001
-                </Option>
-                <Filter type="filters.ferry">
-                    <Option name="dimensions">
-                        X = StatePlaneX, Y=StatePlaneY
-                    </Option>
-                    <Reader type="readers.las">
-                        <Option name="filename">
-                            ../las/1.2-with-color.las
-                        </Option>
-                        <Option name="spatialreference">
-                            EPSG:2993
-                        </Option>
-                    </Reader>
-                </Filter>
-            </Filter>
-        </Writer>
-    </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "uncompressed.las",
+        {
+          "type":"readers.las",
+          "spatialreference":"EPSG:2993",
+          "filename":"../las/1.2-with-color.las"
+        },
+        {
+          "type":"filters.ferry",
+          "dimensions":"X = StatePlaneX, Y=StatePlaneY"
+        },
+        {
+          "type":"filters.reprojection",
+          "out_srs":"EPSG:4326+4326"
+        },
+        {
+          "type":"writers.las",
+          "scale_x":"0.0000001",
+          "scale_y":"0.0000001",
+          "filename":"colorized.las"
+        }
+      ]
+    }
 
 Options
 -------
diff --git a/doc/stages/filters.greedyprojection.rst b/doc/stages/filters.greedyprojection.rst
index 7482a99..2ae8939 100644
--- a/doc/stages/filters.greedyprojection.rst
+++ b/doc/stages/filters.greedyprojection.rst
@@ -1,6 +1,5 @@
 .. _filters.greedyprojection:
 
-===============================================================================
 filters.greedyprojection
 ===============================================================================
 
@@ -14,6 +13,25 @@ densities.
 
 .. _`PCL`: http://www.pointclouds.org
 
+Example
+-------
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "input.las",
+        {
+          "type":"filters.greedyprojection"
+        },
+        {
+          "type":"writers.las",
+          "filename":"output.las"
+        }
+      ]
+    }
+
+
 Options
 -------------------------------------------------------------------------------
 
diff --git a/doc/stages/filters.gridprojection.rst b/doc/stages/filters.gridprojection.rst
index 783c0b7..ace1c27 100644
--- a/doc/stages/filters.gridprojection.rst
+++ b/doc/stages/filters.gridprojection.rst
@@ -14,6 +14,25 @@ described in [Li2010]_.
 
 .. _`PCL`: http://www.pointclouds.org
 
+Example
+-------------------------------------------------------------------------------
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "input.las",
+        {
+          "type":"filters.gridprojection"
+        },
+        {
+          "type":"writers.las",
+          "filename":"output.las"
+        }
+      ]
+    }
+
+
 Options
 -------------------------------------------------------------------------------
 
diff --git a/doc/stages/filters.ground.rst b/doc/stages/filters.ground.rst
index 25ff08f..20f3daa 100644
--- a/doc/stages/filters.ground.rst
+++ b/doc/stages/filters.ground.rst
@@ -1,6 +1,5 @@
 .. _filters.ground:
 
-===============================================================================
 filters.ground
 ===============================================================================
 
@@ -14,6 +13,25 @@ ProgressiveMorphologicalFilter is an implementation of the method described in
 
 .. _`PCL`: http://www.pointclouds.org
 
+
+Example
+-------
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "input.las",
+        {
+          "type":"filters.ground"
+        },
+        {
+          "type":"writers.las",
+          "filename":"output.las"
+        }
+      ]
+    }
+
 Options
 -------------------------------------------------------------------------------
 
diff --git a/doc/stages/filters.height.rst b/doc/stages/filters.height.rst
index 19136cd..9d482a9 100644
--- a/doc/stages/filters.height.rst
+++ b/doc/stages/filters.height.rst
@@ -1,10 +1,34 @@
 .. _filters.height:
 
-===============================================================================
 filters.height
 ===============================================================================
 
-The Height filter takes as input a point cloud with a Classification dimension, with ground points assigned the classification label of 2 (per LAS specification). It returns a point cloud with a new dimension ``Height`` that contains the normalized height value.
+The Height filter takes as input a point cloud with a Classification dimension,
+with ground points assigned the classification label of 2 (per LAS
+specification). It returns a point cloud with a new dimension ``HeightAboveGround`` that
+contains the normalized height value.
+
+Example
+-------
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "input.las",
+        {
+          "type":"filters.height"
+        },
+        {
+          "type":"filters.ferry",
+          "dimensions":"Z = HeightAboveGround",
+        },
+        {
+          "type":"writers.las",
+          "filename":"output.las"
+        }
+      ]
+    }
 
 Options
 -------------------------------------------------------------------------------
diff --git a/doc/stages/filters.hexbin.rst b/doc/stages/filters.hexbin.rst
index 7f420fd..e2cb2a5 100644
--- a/doc/stages/filters.hexbin.rst
+++ b/doc/stages/filters.hexbin.rst
@@ -15,62 +15,118 @@ The hexbin filter reads a point stream and writes out a metadata record that con
 
 ::
 
-    $ pdal hexbin-pipeline.xml --pipeline-serialization hexbin-out.xml
+    $ pdal pipeline hexbin-pipeline.json --pipeline-serialization hexbin-out.json
 
 After running with the pipeline serialization option, the output file looks like this:
 
-.. code-block:: xml
-
-  <PointView>
-    <Metadata name="pointbuffer" type="blank">
-      <Metadata name="filters.hexbin" type="blank">
-        <Metadata name="edge_size" type="double">
-          0.002218331916495204
-        </Metadata>
-        <Metadata name="threshold" type="nonNegativeInteger">
-          15
-        </Metadata>
-        <Metadata name="sample_size" type="nonNegativeInteger">
-          5000
-        </Metadata>
-        <Metadata name="boundary" type="string">
-          MULTIPOLYGON (((
-          -80.8466 35.2183, -80.8460 35.2194,
-          -80.8447 35.2194, -80.8441 35.2205,
-          -80.8428 35.2205, -80.8421 35.2216,
-          ...
-          -80.8498 35.2194, -80.8486 35.2194,
-          -80.8479 35.2183, -80.8466 35.2183
-          )))
-        </Metadata>
-      </Metadata>
-    </Metadata>
-  </PointView>
+.. code-block:: json
+
+  {
+    "pipeline":
+    [
+      {
+        "execution_metadata":
+        {
+          "comp_spatialreference": "",
+          "compressed": false,
+          "count": 1065,
+          "creation_doy": 0,
+          "creation_year": 0,
+          "dataformat_id": 3,
+          "dataoffset": 229,
+          "filesource_id": 0,
+          "global_encoding": 0,
+          "global_encoding_base64": "AAA=",
+          "header_size": 227,
+          "major_version": 1,
+          "maxx": 638982.55,
+          "maxy": 853535.43,
+          "maxz": 586.38,
+          "minor_version": 2,
+          "minx": 635619.85,
+          "miny": 848899.7,
+          "minz": 406.59,
+          "offset_x": 0,
+          "offset_y": 0,
+          "offset_z": 0,
+          "project_id": "00000000-0000-0000-0000-000000000000",
+          "scale_x": 0.01,
+          "scale_y": 0.01,
+          "scale_z": 0.01,
+          "software_id": "TerraScan",
+          "spatialreference": "",
+          "srs":
+          {
+            "compoundwkt": "",
+            "horizontal": "",
+            "isgeocentric": false,
+            "isgeographic": false,
+            "prettycompoundwkt": "",
+            "prettywkt": "",
+            "proj4": "",
+            "units":
+            {
+              "horizontal": "",
+              "vertical": ""
+            },
+            "vertical": "",
+            "wkt": ""
+          },
+          "system_id": ""
+        },
+        "filename": "1.2-with-color.las",
+        "tag": "readers.las1",
+        "type": "readers.las"
+      },
+      {
+        "execution_metadata":
+        {
+          "area": 40981005.83,
+          "boundary": "MULTIPOLYGON (((636019.34031678 847308.55730142, 639990.93904966 850748.06269858, 638998.03936644 855907.32079433, 633040.64126713 852467.81539716, 636019.34031678 847308.55730142)))",
+          "density": 2.598764912e-05,
+          "edge_length": 0,
+          "estimated_edge": 3439.505397,
+          "hex_offsets": "MULTIPOINT (0 0, -992.9 1719.75, 0 3439.51, 1985.8 3439.51, 2978.7 1719.75, 1985.8 0)",
+          "sample_size": 5000,
+          "threshold": 10
+        },
+        "inputs":
+        [
+          "readers.las1"
+        ],
+        "tag": "filters.hexbin1",
+        "threshold": "10",
+        "type": "filters.hexbin"
+      },
+      {
+        "filename": "file-output.las",
+        "inputs":
+        [
+          "filters.hexbin1"
+        ],
+        "tag": "writers.las1",
+        "type": "writers.las"
+      }
+    ]
+  }
 
 In addition, if you have defined a writer you will have the usual point data output file.
 
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">
-        file-output.las
-      </Option>
-      <Filter type="filters.hexbin">
-        <Option name="threshold">10</Option>
-        <Reader type="readers.las">
-          <Option name="filename">
-            file-input.las
-          </Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
 
+  {
+    "pipeline":[
+      "1.2-with-color.las",
+      {
+        "type":"filters.hexbin",
+        "threshold":10
+      },
+      "file-output.las"
+    ]
+  }
 
 Options
 -------
@@ -88,14 +144,3 @@ threshold
 
 precision
   Coordinate precision to use in writing out the well-known text of the boundary polygon. [Default: **8**]
-
-
-
-
-
-
-
-
-
-
-
diff --git a/doc/stages/filters.merge.rst b/doc/stages/filters.merge.rst
index 08ea7b3..d6c51c2 100644
--- a/doc/stages/filters.merge.rst
+++ b/doc/stages/filters.merge.rst
@@ -12,31 +12,26 @@ common.
 Example
 -------
 
-.. code-block:: xml
+.. code-block:: json
 
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">
-        merged.las
-      </Option>
-      <Filter type="filters.merge">
-        <Reader type="readers.las">
-          <Option name="filename">
-            file1.las
-          </Option>
-        </Reader>
-        <Reader type="readers.las">
-          <Option name="filename">
-            file2.las
-          </Option>
-        </Reader>
-        <Reader type="readers.bpf">
-          <Option name="filename">
-            file3.bpf
-          </Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+    {
+      "pipeline": [
+        {
+          "filename": "/Users/hobu/dev/git/pdal/test/data/las/1.2-with-color.las",
+          "tag": "A"
+        },
+        {
+          "filename": "/Users/hobu/dev/git/pdal/test/data/las/1.2-with-color.las",
+          "tag": "B"
+        },
+        {
+          "type": "filters.merge",
+          "inputs": ["A", "B"]
+        },
+        {
+          "type": "writers.las",
+          "filename": "output.las"
+        }
+      ]
+    }
 
diff --git a/doc/stages/filters.mortonorder.rst b/doc/stages/filters.mortonorder.rst
index 60e8e4b..3f09ca4 100644
--- a/doc/stages/filters.mortonorder.rst
+++ b/doc/stages/filters.mortonorder.rst
@@ -10,24 +10,21 @@ Sorts the XY data using `Morton ordering`_.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">
-        sorted.las
-      </Option>
-      <Filter type="filters.mortonorder">
-        <Reader type="readers.las">
-          <Option name="filename">
-            unsorted.las
-          </Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
-
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "uncompressed.las",
+        {
+          "type":"filters.mortonorder"
+        },
+        {
+          "type":"writers.las",
+          "filename":"compressed.laz",
+          "compression":"true"
+        }
+      ]
+    }
 
 
 Notes
diff --git a/doc/stages/filters.movingleastsquares.rst b/doc/stages/filters.movingleastsquares.rst
index ef829e3..8c09235 100644
--- a/doc/stages/filters.movingleastsquares.rst
+++ b/doc/stages/filters.movingleastsquares.rst
@@ -16,6 +16,26 @@ on the parametric fit.
 
 .. _`PCL`: http://www.pointclouds.org
 
+Example
+-------------------------------------------------------------------------------
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "input.las",
+        {
+          "type":"filters.movingleastsquares"
+        },
+        {
+          "type":"writers.las",
+          "filename":"output.las"
+        }
+      ]
+    }
+
+
+
 Options
 -------------------------------------------------------------------------------
 
diff --git a/doc/stages/filters.poisson.rst b/doc/stages/filters.poisson.rst
index 3326448..fa99fa2 100644
--- a/doc/stages/filters.poisson.rst
+++ b/doc/stages/filters.poisson.rst
@@ -13,6 +13,27 @@ Poisson is an implementation of the method described in [Kazhdan2006]_.
 
 .. _`PCL`: http://www.pointclouds.org
 
+Example
+-------------------------------------------------------------------------------
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "dense.las",
+        {
+          "type":"filters.poisson",
+          "depth":"8",
+          "point_weight":"4"
+        },
+        {
+          "type":"writers.las",
+          "filename":"thinned.las",
+        }
+      ]
+    }
+
+
 Options
 -------------------------------------------------------------------------------
 
diff --git a/doc/stages/filters.predicate.rst b/doc/stages/filters.predicate.rst
index 707375e..a6a9345 100644
--- a/doc/stages/filters.predicate.rst
+++ b/doc/stages/filters.predicate.rst
@@ -50,47 +50,29 @@ classified 1 or 2 to be dropped from the point stream.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">
-        file-cropped.las
-      </Option>
-      <Filter type="filters.predicate">
-      <Option name="function">filter</Option>
-      <Option name="module">anything</Option>
-      <Option name="source">
 
-  import numpy as np
-
-  def filter(ins,outs):
-     cls = ins['Classification']
-
-     keep_classes = [1,2]
-
-     # Use the first test for our base array.
-     keep = np.equal(cls, keep_classes[0])
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "file-input.las",
+        {
+          "type":"filters.ground"
+        },
+        {
+          "type":"filters.predicate",
+          "script":"filter_pdal.py",
+          "function":"filter",
+          "module":"anything"
+        },
+        {
+          "type":"writers.las",
+          "filename":"file-filtered.las"
+        }
+      ]
+    }
 
-     # For 1:n, test each predicate and join back
-     # to our existing predicate array
-     for k in range(1,len(keep_classes)):
-         t = np.equal(cls, keep_classes[k])
-         keep = keep + t
-
-     outs['Mask'] = keep
-     return True
 
-          </Option>
-          <Reader type="readers.las">
-            <Option name="filename">
-              file-input.las
-            </Option>
-          </Reader>
-        </Filter>
-      </Writer>
-    </Pipeline>
 
 
 Options
diff --git a/doc/stages/filters.programmable.rst b/doc/stages/filters.programmable.rst
index 9230332..0c47073 100644
--- a/doc/stages/filters.programmable.rst
+++ b/doc/stages/filters.programmable.rst
@@ -36,26 +36,27 @@ To filter points based on a `Python`_ function, use the
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">
-        file-filtered.las
-      </Option>
-      <Filter type="filters.programmable">
-        <Option name="script">multiply_z.py</Option>
-        <Option name="function">multiply_z</Option>
-        <Option name="module">anything</Option>  
-        <Reader type="readers.las">
-          <Option name="filename">
-            file-input.las
-          </Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "file-input.las",
+        {
+          "type":"filters.ground"
+        },
+        {
+          "type":"filters.programmable",
+          "script":"multiply_z.py",
+          "function":"multiply_z",
+          "module":"anything"
+        },
+        {
+          "type":"writers.las",
+          "filename":"file-filtered.las"
+        }
+      ]
+    }
 
 The XML pipeline file referenced the external `multiply_z.py` `Python`_ script,
 which scales up the Z coordinate by a factor of 10.
diff --git a/doc/stages/filters.radiusoutlier.rst b/doc/stages/filters.radiusoutlier.rst
index 65c553e..706f7b7 100644
--- a/doc/stages/filters.radiusoutlier.rst
+++ b/doc/stages/filters.radiusoutlier.rst
@@ -15,6 +15,26 @@ radius can be changed using ``radius``.
 
 .. _`PCL`: http://www.pointclouds.org
 
+Example
+-------------------------------------------------------------------------------
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "input.las",
+        {
+          "type":"filters.radiusoutlier",
+          "min_neighbors":"4"
+        },
+        {
+          "type":"writers.las",
+          "filename":"output.las"
+        }
+      ]
+    }
+
+
 Options
 -------------------------------------------------------------------------------
 
diff --git a/doc/stages/filters.randomize.rst b/doc/stages/filters.randomize.rst
index 8f0b818..f036c1b 100644
--- a/doc/stages/filters.randomize.rst
+++ b/doc/stages/filters.randomize.rst
@@ -8,21 +8,19 @@ The randomize filter reorders the points in a point view randomly.
 Example
 -------
 
-.. code-block:: xml
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "input.las",
+        {
+          "type":"filters.randomize"
+        },
+        {
+          "type":"writers.las",
+          "filename":"output.las"
+        }
+      ]
+    }
 
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">
-        randomized.las
-      </Option>
-      <Filter type="filters.randomize">
-        <Reader type="readers.las">
-          <Option name="filename">
-            unsorted.las
-          </Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
 
diff --git a/doc/stages/filters.range.rst b/doc/stages/filters.range.rst
index f55c714..5f7fcdb 100644
--- a/doc/stages/filters.range.rst
+++ b/doc/stages/filters.range.rst
@@ -12,26 +12,23 @@ Pipeline Example
 This example passes through all points whose Z value is in the range [0,100]
 and whose classification equals 2 (corresponding to ground in LAS).
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">
-        filtered.las
-      </Option>
-      <Filter type="filters.range">
-        <Option name="limits">
-          Z[0:100],Classification[2:2]
-        </Option>
-        <Reader type="readers.las">
-          <Option name="filename">
-            input.las
-          </Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "input.las",
+        {
+          "type":"filters.range",
+          "limits":"Z[0:100],Classification[2:2]"
+        },
+        {
+          "type":"writers.las",
+          "filename":"filtered.las"
+        }
+      ]
+    }
+
 
 Command-line Example
 --------------------
diff --git a/doc/stages/filters.reprojection.rst b/doc/stages/filters.reprojection.rst
index 2fe986f..5ce61ca 100644
--- a/doc/stages/filters.reprojection.rst
+++ b/doc/stages/filters.reprojection.rst
@@ -24,29 +24,36 @@ if you want to preserve the old coordinates for future processing, use a
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-    <Option name="filename">example-geog.las</Option>
-    <Option name="scale_x">0.0000001</Option>
-    <Option name="scale_y">0.0000001</Option>
-    <Option name="scale_z">0.1</Option>
-    <Option name="offset_x">-100</Option>
-    <Option name="offset_y">40</Option>
-    <Option name="offset_z">0</Option>
-    <Option name="spatialreference">EPSG:4326</Option>
-      <Filter type="filters.reprojection">
-        <Option name="in_srs">EPSG:26916</Option>
-        <Option name="out_srs">EPSG:4326</Option>
-        <Reader type="readers.las">
-          <Option name="filename">example-utm.las</Option>
-          <Option name="spatialreference">EPSG:26916</Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "filename":"input.las",
+          "type":"readers.las",
+          "spatialreference":"EPSG:26916"
+        },
+        {
+          "type":"filters.range",
+          "limits":"Z[0:100],Classification[2:2]"
+        },
+        {
+          "type":"filters.reprojection",
+          "in_srs":"EPSG:26916",
+          "out_srs":"EPSG:4326"
+        },
+        {
+          "type":"writers.las",
+          "scale_x":"0.0000001",
+          "scale_y":"0.0000001",
+          "scale_z":"0.01",
+          "offset_x":"auto",
+          "offset_y":"auto",
+          "offset_z":"auto",
+          "filename":"example-geog.las"
+        }
+      ]
+    }
 
 Options
 -------
diff --git a/doc/stages/filters.splitter.rst b/doc/stages/filters.splitter.rst
index 91ac6c9..6c5fc98 100644
--- a/doc/stages/filters.splitter.rst
+++ b/doc/stages/filters.splitter.rst
@@ -17,22 +17,23 @@ data segmented into smaller blocks).
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.pgpointcloud">
-      <Option name="connection">dbname='lidar' user='user'</Option>
-      <Filter type="filters.chipper">
-        <Option name="length">100</Option>
-        <Option name="origin_x">638900.0</Option>
-        <Option name="origin_y">835500.0</Option>
-        <Reader type="readers.las">
-            <Option name="filename">example.las</Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "input.las",
+        {
+          "type":"filters.splitter",
+          "length":"100",
+          "origin_x":"638900.0",
+          "origin_y":"835500.0"
+        },
+        {
+          "type":"writers.pgpointcloud",
+          "connection":"dbname='lidar' user='user'"
+        }
+      ]
+    }
 
 Options
 -------
diff --git a/doc/stages/filters.statisticaloutlier.rst b/doc/stages/filters.statisticaloutlier.rst
index 39d6f20..adf5aa3 100644
--- a/doc/stages/filters.statisticaloutlier.rst
+++ b/doc/stages/filters.statisticaloutlier.rst
@@ -1,22 +1,20 @@
 .. _filters.statisticaloutlier:
 
-===============================================================================
 filters.statisticaloutlier
-===============================================================================
+-------------------------------------------------------------------------------
 
 The Statistical Outlier filter passes data through the Point Cloud Library
 (`PCL`_) StatisticalOutlierRemoval algorithm.
 
-StatisticalOutlierRemoval uses point neighborhood statistics to filter outlier
-data. The algorithm iterates through the entire input twice. During the first
-iteration it will compute the average distance that each point has to its
-nearest k neighbors. The value of k can be set using ``mean_k``. Next, the mean
-and standard deviation of all these distances are computed in order to determine
-a distance threshold. The distance threshold will be equal to:
-:math:`mean + stddev_{mult} * stddev`. The multiplier for the standard deviation
-can be set using ``multiplier``. During the next iteration the points will be
-classified as inlier or outlier if their average neighbor distance is below or
-above this threshold respectively.
+``filters.statisticaloutlier`` uses point neighborhood statistics to filter
+outlier data. The algorithm iterates through the entire input twice. The first
+iteration is used to calculate the average of the distances from each point :math:`i`
+to its :math:`k` nearest neighbors or  :math:`AD_{i}`.  The second iteration is used to
+identify outliers based on the distribution of :math:`AD_{i}` values.  Points with an
+average neighbor distance greater than the mean plus 2 standard deviations are
+classified as outliers.  The value of :math:`k` can be set using :math:`\tt mean\_k`. By
+default, the distance threshold is set to :math:`\overline{AD}_{i} + 2 \hat{\sigma}`,
+but a value other than 2 can be chosen using :math:`\tt  multiplier`.
 
 .. figure:: filters.statisticaloutlier.img1.png
     :scale: 70 %
@@ -37,8 +35,29 @@ See [Rusu2008]_ for more information.
 
 .. _`PCL`: http://www.pointclouds.org
 
+Example
+................................................................................
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "input.las",
+        {
+          "type":"filters.statisticaloutlier",
+          "mean_k":"12",
+          "multiplier":"2.2"
+        },
+        {
+          "type":"writers.las",
+          "filename":"output.las"
+        }
+      ]
+    }
+
+
 Options
--------------------------------------------------------------------------------
+................................................................................
 
 mean_k
   Mean number of neighbors. [Default: **8**]
diff --git a/doc/stages/filters.stats.rst b/doc/stages/filters.stats.rst
index cf64244..df8b4a9 100644
--- a/doc/stages/filters.stats.rst
+++ b/doc/stages/filters.stats.rst
@@ -11,28 +11,26 @@ The output of the stats filter is metadata that can be stored by writers or
 used through the PDAL API.  Output from the stats filter can also be
 quickly obtained in JSON format by using the command ``pdal info --stats``.
 
-Example
--------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">
-        sorted.las
-      </Option>
-      <Filter type="filters.stats">
-        <Option name="dimensions">X,Y,Z,Classification</Option>
-        <Option name="enumerate">Classification</Option>
-        <Reader type="readers.las">
-          <Option name="filename">
-            unsorted.las
-          </Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+Example
+................................................................................
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "input.las",
+        {
+          "type":"filters.stats",
+          "dimensions":"X,Y,Z,Classification",
+          "enumerate":"Classification"
+        },
+        {
+          "type":"writers.las",
+          "filename":"output.las"
+        }
+      ]
+    }
 
 
 Options
diff --git a/doc/stages/filters.transformation.rst b/doc/stages/filters.transformation.rst
index 0aeea79..1198b6d 100644
--- a/doc/stages/filters.transformation.rst
+++ b/doc/stages/filters.transformation.rst
@@ -20,29 +20,22 @@ Example
 
 This example rotates the points around the z-axis while translating them.
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">
-        transformed.las
-      </Option>
-      <Filter type="filters.transformation">
-        <Option name="matrix">
-          0 -1  0  1
-          1  0  0  2
-          0  0  1  3
-          0  0  0  1
-        </Option>
-        <Reader type="readers.las">
-          <Option name="filename">
-            untransformed.las
-          </Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "untransformed.las",
+        {
+          "type":"filters.transformation",
+          "matrix":"0 -1  0  1  1  0  0  2  0  0  1  3  0  0  0  1",
+        },
+        {
+          "type":"writers.las",
+          "filename":"transformed.las"
+        }
+      ]
+    }
+
 
 
 Options
diff --git a/doc/stages/filters.voxelgrid.rst b/doc/stages/filters.voxelgrid.rst
index 4924653..649e5e8 100644
--- a/doc/stages/filters.voxelgrid.rst
+++ b/doc/stages/filters.voxelgrid.rst
@@ -15,6 +15,26 @@ approximated (i.e., *downsampled*) with their centroid. This approach is a bit
 slower than approximating them with the center of the voxel, but it represents
 the underlying surface more accurately.
 
+Example
+-------
+
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "untransformed.las",
+        {
+          "type":"filters.voxelgrid"
+        },
+        {
+          "type":"writers.las",
+          "filename":"transformed.las"
+        }
+      ]
+    }
+
+
 .. seealso::
 
     :ref:`filters.decimation` does simple every-other-X -style decimation.
diff --git a/doc/stages/readers.bpf.rst b/doc/stages/readers.bpf.rst
index e6f5863..fbf745b 100644
--- a/doc/stages/readers.bpf.rst
+++ b/doc/stages/readers.bpf.rst
@@ -19,17 +19,18 @@ be metadata and is UTF-encoded and added to the reader's metadata.
 Example
 ------------------------------------------------------------------------------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.text">
-      <Option name="filename">outputfile.txt</Option>
-      <Reader type="readers.bpf">
-        <Option name="filename">inputfile.bpf</Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "inputfile.bpf",
+        {
+          "type":"writers.text",
+          "filename":"outputfile.txt"
+        }
+      ]
+    }
+
 
 Options
 ------------------------------------------------------------------------------
diff --git a/doc/stages/readers.faux.rst b/doc/stages/readers.faux.rst
index 8626765..61b5920 100644
--- a/doc/stages/readers.faux.rst
+++ b/doc/stages/readers.faux.rst
@@ -9,19 +9,22 @@ file or database, but generates synthetic data to feed into the pipeline.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.text">
-      <Option name="filename">outputfile.txt</Option>
-      <Reader type="readers.faux">
-        <Option name="bounds">([0,1000000],[0,1000000],[0,100])</Option>
-        <Option name="num_points">10000</Option>
-        <Option name="mode">random</Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.faux",
+          "bounds":"([0,1000000],[0,1000000],[0,100])",
+          "num_points":"10000",
+          "mode":"random"
+        },
+        {
+          "type":"writers.text",
+          "filename":"outputfile.txt"
+        }
+      ]
+    }
 
 
 Options
@@ -33,7 +36,7 @@ bounds
 
 num_points
   How many synthetic points to generate before finishing? [Required]
- 
+
 mean_x|y|z
   Mean value in the x, y, or z dimension respectively. (Normal mode only)
   [Default: 0]
@@ -48,4 +51,4 @@ mode
   within the bounds), "uniform" (uniformly distributed within bounds), or
   "normal" (normal distribution with given mean and standard deviation).
   [Required]
-  
+
diff --git a/doc/stages/readers.gdal.rst b/doc/stages/readers.gdal.rst
index 69f7f94..6325d0a 100644
--- a/doc/stages/readers.gdal.rst
+++ b/doc/stages/readers.gdal.rst
@@ -24,21 +24,22 @@ that are center pixel, and each band is represented by "band-1", "band-2", or
 Basic Example
 --------------------------------------------------------------------------------
 
-.. code-block:: xml
-
-    <?xml version="1.0"?>
-    <Pipeline version="1.0">
-        <Writer type="writers.text">
-            <Option name="filename">
-                out.asc
-            </Option>
-            <Reader type="readers.gdal">
-                <Option name="filename">
-                    /Users/hobu/dev/git/pdal/test/data/autzen/autzen.jpg
-                </Option>
-            </Reader>
-        </Writer>
-    </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.gdal",
+          "filename":"./pdal/test/data/autzen/autzen.jpg"
+        },
+        {
+          "type":"writers.text",
+          "filename":"outputfile.txt"
+        }
+      ]
+    }
+
+
 
 LAS Example
 --------------------------------------------------------------------------------
@@ -47,26 +48,25 @@ The following example writes a JPG as an `ASPRS LAS`_ file.
 
 .. _`ASPRS LAS`: http://www.asprs.org/Committee-General/LASer-LAS-File-Format-Exchange-Activities.html
 
-.. code-block:: xml
-
-    <?xml version="1.0"?>
-    <Pipeline version="1.0">
-        <Writer type="writers.las">
-            <Option name="filename">
-                out.las
-            </Option>
-            <Filter type="filters.ferry">
-               <Option name="dimensions">
-                    Red=band-1, Green=band-2, Blue=band-3
-                </Option>
-            <Reader type="readers.gdal">
-                <Option name="filename">
-                    /Users/hobu/dev/git/pdal/test/data/autzen/autzen.jpg
-                </Option>
-            </Reader>
-        </Filter>
-        </Writer>
-    </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.gdal",
+          "filename":"./pdal/test/data/autzen/autzen.jpg"
+        },
+        {
+          "type":"filters.ferry"
+          "dimensions":"band-1=Red, band-2=Green, band-3=Blue",
+        },
+        {
+          "type":"writers.text",
+          "filename":"outputfile.txt"
+        }
+      ]
+    }
+
 
 
 Options
diff --git a/doc/stages/readers.geowave.rst b/doc/stages/readers.geowave.rst
index c6dab35..d4bdabe 100644
--- a/doc/stages/readers.geowave.rst
+++ b/doc/stages/readers.geowave.rst
@@ -12,25 +12,30 @@ configuring the GeoWave plugin can be found `here`_.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.text">
-      <Option name="filename">outputfile.txt</Option>
-      <Reader type="readers.geowave">
-        <Option name="zookeeper_url">zookeeper1:2181,zookeeper2:2181,zookeeper3:2181</Option>
-        <Option name="instance_name">GeoWave</Option>
-        <Option name="username">user</Option>
-        <Option name="password">pass</Option>
-        <Option name="table_namespace">PDAL_Table</Option>
-        <Option name="feature_type_name">PDAL_Point</Option>
-        <Option name="data_adapter">FeatureCollectionDataAdapter</Option>
-        <Option name="points_per_entry">5000u</Option>
-        <Option name="bounds">([0,1000000],[0,1000000],[0,100])</Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.geowave",
+          "zookeeper_url":"zookeeper1:2181,zookeeper2:2181,zookeeper3:2181",
+          "instance_name":"GeoWave",
+          "username":"user",
+          "password":"pass",
+          "table_namespace":"PDAL_Table",
+          "feature_type_name":"PDAL_Point",
+          "data_adapter":"FeatureCollectionDataAdapter",
+          "points_per_entry":"5000u",
+          "bounds":"([0,1000000],[0,1000000],[0,100])",
+          "filename":"./pdal/test/data/autzen/autzen.jpg"
+        },
+        {
+          "type":"writers.text",
+          "filename":"outputfile.txt"
+        }
+      ]
+    }
+
 
 
 Options
diff --git a/doc/stages/readers.greyhound.rst b/doc/stages/readers.greyhound.rst
index d3ff780..59c9497 100644
--- a/doc/stages/readers.greyhound.rst
+++ b/doc/stages/readers.greyhound.rst
@@ -8,19 +8,21 @@ The **Greyhound Reader** allows you to read point data from a `Greyhound`_ serve
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.text">
-      <Option name="filename">output.txt</Option>
-      <Option name="spatialreference">EPSG:26910</Option>
-      <Reader type="readers.greyhound">
-        <Option name="url">greyhound.organization.com:8080</Option>
-        <Option name="pipeline_id">a87d0a50e03a880c75e9f872c925f984</Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.greyhound",
+          "url":"data.greyhound.io/resource/autzen"
+        },
+        {
+          "type":"writers.text",
+          "filename":"outputfile.txt"
+        }
+      ]
+    }
+
 
 Options
 -------
@@ -28,8 +30,6 @@ Options
 url
   Greyhound server URL string. [Required]
 
-pipeline_id
-  Greyhound pipelineId to read. [Required]
 
 
 .. _Greyhound: https://github.com/hobu/greyhound
diff --git a/doc/stages/readers.ilvis2.rst b/doc/stages/readers.ilvis2.rst
index 5144fb5..ad18e39 100644
--- a/doc/stages/readers.ilvis2.rst
+++ b/doc/stages/readers.ilvis2.rst
@@ -14,19 +14,21 @@ for more information
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">output.las</Option>
-      <Reader type="readers.ilvis2">
-        <Option name="filename">
-          ILVIS2_GL2009_0414_R1401_042504.TXT
-        </Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.ilvis2",
+          "filename":"ILVIS2_GL2009_0414_R1401_042504.TXT",
+          "metadata":"ILVIS2_GL2009_0414_R1401_042504.xml"
+        },
+        {
+          "type":"writers.las",
+          "filename":"outputfile.las"
+        }
+      ]
+    }
 
 Options
 -------
@@ -37,3 +39,6 @@ filename
 mapping
   Which ILVIS2 field type to map to X, Y, Z dimensions
   'LOW', 'CENTROID', or 'HIGH' ['CENTROID']
+
+metadata
+  XML metadata file to coincidentally read [Optional]
diff --git a/doc/stages/readers.las.rst b/doc/stages/readers.las.rst
index 5c58879..565a3b0 100644
--- a/doc/stages/readers.las.rst
+++ b/doc/stages/readers.las.rst
@@ -48,17 +48,20 @@ the two supported decompressors, `LASzip`_ or `LAZperf`_.  See the
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.text">
-      <Option name="filename">outputfile.txt</Option>
-      <Reader type="readers.las">
-        <Option name="filename">inputfile.las</Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.las",
+          "filename":"inputfile.las"
+        },
+        {
+          "type":"writers.text",
+          "filename":"outputfile.txt",
+        }
+      ]
+    }
 
 Options
 -------
diff --git a/doc/stages/readers.mrsid.rst b/doc/stages/readers.mrsid.rst
index 8bedd37..819c4bd 100644
--- a/doc/stages/readers.mrsid.rst
+++ b/doc/stages/readers.mrsid.rst
@@ -9,17 +9,20 @@ decompress and read data.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">outputfile.las</Option>
-      <Reader type="readers.mrsid">
-        <Option name="filename">myfile.sid</Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.mrsid",
+          "filename":"myfile.sid"
+        },
+        {
+          "type":"writers.las",
+          "filename":"outputfile.las"
+        }
+      ]
+    }
 
 
 Options
diff --git a/doc/stages/readers.nitf.rst b/doc/stages/readers.nitf.rst
index 87130e4..c30b936 100644
--- a/doc/stages/readers.nitf.rst
+++ b/doc/stages/readers.nitf.rst
@@ -3,7 +3,7 @@
 readers.nitf
 ============
 
-The `NITF`_ format is used primarily by the US Department of Defence and
+The `NITF`_ format is used primarily by the US Department of Defense and
 supports many kinds of data inside a generic wrapper. The `NITF 2.1`_ version
 added support for LIDAR point cloud data, and the **NITF file reader** supports
 reading that data, if the NITF file supports it.
@@ -17,23 +17,28 @@ The dimensions produced by the reader match exactly to the LAS dimension names
 and types for convenience in file format transformation.
 
 .. note::
-    
-    Only LAS or LAZ data may be stored in the LIDARA segment
+
+    Only LAS or LAZ data may be stored in the LIDARA segment. PDAL uses
+    the :ref:`readers.las` and :ref:`writers.las` :ref:`stages <stage_index>`
+    to actually read and write the data.
 
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">outputfile.las</Option>
-      <Reader type="readers.nitf">
-        <Option name="filename">mynitf.nitf</Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.nitf",
+          "filename":"mynitf.nitf"
+        },
+        {
+          "type":"writers.las",
+          "filename":"outputfile.las"
+        }
+      ]
+    }
 
 
 Options
diff --git a/doc/stages/readers.oci.rst b/doc/stages/readers.oci.rst
index eb75c89..702e465 100644
--- a/doc/stages/readers.oci.rst
+++ b/doc/stages/readers.oci.rst
@@ -9,46 +9,37 @@ The OCI reader is used to read data from `Oracle point cloud`_ databases.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">outputfile.las</Option>
-      <Reader type="readers.oci">
-        <Option name="query">
-          SELECT 
-            l."OBJ_ID", l."BLK_ID", l."BLK_EXTENT", 
-            l."BLK_DOMAIN", l."PCBLK_MIN_RES", 
-            l."PCBLK_MAX_RES", l."NUM_POINTS",
-            l."NUM_UNSORTED_POINTS", l."PT_SORT_DIM", 
-            l."POINTS", b.cloud
-          FROM AUTZEN_BLOCKS l, AUTZEN_CLOUD b
-          WHERE l.obj_id = b.id and l.obj_id in (1,2)
-          ORDER BY l.obj_id
-        </Option>
-        <Option name="connection">
-          grid/grid at localhost/orcl
-        </Option>
-        <Option name="populate_pointsourceid">
-          true
-        </Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.oci",
+          "query":"SELECT \r\n            l.\"OBJ_ID\", l.\"BLK_ID\", l.\"BLK_EXTENT\", \r\n            l.\"BLK_DOMAIN\", l.\"PCBLK_MIN_RES\", \r\n            l.\"PCBLK_MAX_RES\", l.\"NUM_POINTS\",\r\n            l.\"NUM_UNSORTED_POINTS\", l.\"PT_SORT_DIM\", \r\n            l.\"POINTS\", b.cloud\r\n          FROM AUTZEN_BLOCKS l, AUTZEN_CLOUD b\r\n          WHERE l.obj_id = b.id and l.obj_id in (1,2)\r\n          ORDER BY l.obj_id",
+          "connection":"grid/grid at localhost/orcl",
+          "populate_pointsourceid":"true"
+        },
+        {
+          "type":"writers.las",
+          "filename":"outputfile.las"
+        }
+      ]
+    }
+
 
 
 Options
 -------
 
 connection
-  Oracle connection string to connect to database, in the form "user/pass at host/instance" [Required] 
+  Oracle connection string to connect to database, in the form "user/pass at host/instance" [Required]
 
 query
   SELECT statement that returns an SDO_PC object as its first and only queried item [Required]
-  
+
 spatialreference
-  Spatial reference system of the data being read. E.g. "EPSG:26910".  
+  Spatial reference system of the data being read. E.g. "EPSG:26910".
 
 xml_schema_dump
   Filename to dump the XML schema to.
diff --git a/doc/stages/readers.optech.rst b/doc/stages/readers.optech.rst
index 700edd8..606aa34 100644
--- a/doc/stages/readers.optech.rst
+++ b/doc/stages/readers.optech.rst
@@ -10,20 +10,24 @@ These files contain scan angles, ranges, IMU and GNSS information, and boresight
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.text">
-      <Option name="filename">outputfile.txt</Option>
-      <Reader type="readers.optech">
-        <Option name="filename">inputfile.csd</Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.optech",
+          "filename":"input.csd"
+        },
+        {
+          "type":"writers.text",
+          "filename":"outputfile.txt"
+        }
+      ]
+    }
+
 
 Options
 -------
 
 filename
-  csd file to read [Required] 
+  csd file to read [Required]
diff --git a/doc/stages/readers.pcd.rst b/doc/stages/readers.pcd.rst
index 101ad52..6030074 100644
--- a/doc/stages/readers.pcd.rst
+++ b/doc/stages/readers.pcd.rst
@@ -1,7 +1,9 @@
 .. _readers.pcd:
 
+******************************************************************************
 readers.pcd
-===========
+******************************************************************************
+
 
 The **PCD Reader** supports reading from `Point Cloud Data (PCD)`_ formatted
 files, which are used by the `Point Cloud Library (PCL)`_.
@@ -9,26 +11,29 @@ files, which are used by the `Point Cloud Library (PCL)`_.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.text">
-      <Option name="filename">outputfile.txt</Option>
-      <Reader type="readers.pcd">
-        <Option name="filename">inputfile.pcd</Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.pcd",
+          "filename":"inputfile.pcd"
+        },
+        {
+          "type":"writers.text",
+          "filename":"outputfile.txt"
+        }
+      ]
+    }
 
 Options
 -------
 
 filename
-  PCD file to read [Required] 
+  PCD file to read [Required]
 
 
 
 .. _Point Cloud Data (PCD): http://pointclouds.org/documentation/tutorials/pcd_file_format.php
 .. _Point Cloud Library (PCL): http://pointclouds.org
-  
+
diff --git a/doc/stages/readers.pgpointcloud.rst b/doc/stages/readers.pgpointcloud.rst
index 0502d56..41d5e57 100644
--- a/doc/stages/readers.pgpointcloud.rst
+++ b/doc/stages/readers.pgpointcloud.rst
@@ -10,33 +10,34 @@ The reader pulls patches from a table, potentially sub-setting the query on the
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.text">
-      <Option name="filename">output.txt</Option>
-      <Option name="spatialreference">EPSG:26910</Option>
-      <Reader type="readers.pgpointcloud">
-        <Option name="connection">dbname='lidar' user='user'</Option>
-        <Option name="table">lidar</Option>
-        <Option name="column">pa</Option>
-        <Option name="spatialreference">EPSG:26910</Option>
-        <Option name="where">
-          PC_Intersects(pa, ST_MakeEnvelope(560037.36, 5114846.45, 562667.31, 5118943.24, 26910))
-        </Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.pgpointcloud",
+          "connection":"dbname='lidar' user='user'",
+          "table":"lidar",
+          "column":"pa",
+          "spatialreference":"EPSG:26910",
+          "where":"PC_Intersects(pa, ST_MakeEnvelope(560037.36, 5114846.45, 562667.31, 5118943.24, 26910))",
+        },
+        {
+          "type":"writers.text",
+          "filename":"output.txt"
+        }
+      ]
+    }
+
 
 Options
 -------
 
 connection
-  PostgreSQL connection string. In the form *"host=hostname dbname=database user=username password=pw port=5432"* [Required] 
+  PostgreSQL connection string. In the form *"host=hostname dbname=database user=username password=pw port=5432"* [Required]
 
 table
-  Database table to read from. [Required] 
+  Database table to read from. [Required]
 
 schema
   Database schema to read from. [Default: **public**]
diff --git a/doc/stages/readers.ply.rst b/doc/stages/readers.ply.rst
index 14af230..bac3a48 100644
--- a/doc/stages/readers.ply.rst
+++ b/doc/stages/readers.ply.rst
@@ -12,17 +12,21 @@ The ply reader can read ASCII and binary ply files.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.text">
-      <Option name="filename">outputfile.txt</Option>
-      <Reader type="readers.ply">
-        <Option name="filename">inputfile.ply</Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.ply",
+          "filename":"inputfile.ply"
+        },
+        {
+          "type":"writers.text",
+          "filename":"outputfile.txt"
+        }
+      ]
+    }
+
 
 Options
 -------
diff --git a/doc/stages/readers.qfit.rst b/doc/stages/readers.qfit.rst
index 213e0c6..9644cab 100644
--- a/doc/stages/readers.qfit.rst
+++ b/doc/stages/readers.qfit.rst
@@ -3,31 +3,29 @@
 readers.qfit
 ============
 
-The **QFIT reader** read from files in the `QFIT format`_ originated for the Airborne Topographic Mapper (ATM) project at NASA Goddard Space Flight Center.
+The **QFIT reader** read from files in the `QFIT format`_ originated for the
+Airborne Topographic Mapper (ATM) project at NASA Goddard Space Flight Center.
 
 
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">output.las</Option>
-      <Reader type="readers.qfit">
-        <Option name="filename">
-          qfitfile.qi
-        </Option>
-        <Option name="flip_coordinates">
-          false
-        </Option>
-        <Option name="scale_z">
-          1.0
-        </Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.qfit",
+          "filename":"inputfile.qi",
+          "flip_coordinates":"false",
+          "scale_z":"1.0"
+        },
+        {
+          "type":"writers.las",
+          "filename":"outputfile.las"
+        }
+      ]
+    }
 
 Options
 -------
@@ -36,11 +34,11 @@ filename
   File to read from [Required]
 
 flip_coordinates
-  Flip coordinates from 0-360 to -180-180 [Default: **true**] 
+  Flip coordinates from 0-360 to -180-180 [Default: **true**]
 
 scale_z
-  Z scale. Use 0.001 to go from mm to m. [Default: **1**] 
-  
+  Z scale. Use 0.001 to go from mm to m. [Default: **1**]
+
 little_endian
   Are data in little endian format? This should be automatically detected by the driver.
 
diff --git a/doc/stages/readers.rxp.rst b/doc/stages/readers.rxp.rst
index d749dc8..d397534 100644
--- a/doc/stages/readers.rxp.rst
+++ b/doc/stages/readers.rxp.rst
@@ -27,37 +27,8 @@ Example
 This example rescales the points, given in the scanner's own coordinate system, to values that can be written to a las file.
 Only points with a valid gps time, as determined by a pps pulse, are read from the rxp, since the ``sync_to_pps`` option is "true".
 
-.. code-block:: xml
-
-    <?xml version="1.0" encoding="utf-8"?>
-    <Pipeline version="1.0">
-        <Writer type="writers.las">
-            <Option name="filename">output.las</Option>
-            <Option name="discard_high_return_numbers">true</Option>
-            <Filter type="filters.scaling">
-                <Option name="dimension">
-                    X
-                    <Options>
-                        <Option name="scale">0.001</Option>
-                        <Option name="offset">0</Option>
-                    </Options>
-                </Option>
-                <Option name="dimension">
-                    Y
-                    <Options>
-                        <Option name="scale">0.001</Option>
-                        <Option name="offset">0</Option>
-                    </Options>
-                </Option>
-                <Option name="dimension">
-                    Z
-                    <Options>
-                        <Option name="scale">0.001</Option>
-                        <Option name="offset">0</Option>
-                    </Options>
-                </Option>
-                <Filter type="filters.programmable">
-                    <Option name="source">
+.. code-block:: python
+
     import numpy
     def reflectance_to_intensity(ins, outs):
         ref = ins["Reflectance"]
@@ -65,29 +36,42 @@ Only points with a valid gps time, as determined by a pps pulse, are read from t
         max = numpy.amax(ref)
         outs["Intensity"] = (65535 * (ref - min) / (max - min)).astype(numpy.uint16)
         return True
-                    </Option>
-                    <Option name="function">reflectance_to_intensity</Option>
-                    <Option name="module">pyrxp</Option>
-                    <Option name="add_dimension">Intensity</Option>
-                    <Reader type="readers.rxp">
-                        <Option name="filename">120304_204030.rxp</Option>
-                        <Option name="sync_to_pps">true</Option>
-                    </Reader>
-                </Filter>
-            </Filter>
-        </Writer>
-    </Pipeline>
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.rxp",
+          "filename":"120304_204030.rxp",
+          "sync_to_pps":"true"
+        },
+        {
+          "type":"filters.programmable",
+          "source":"filter_rxp.py",
+          "function":"reflectance_to_intensity",
+          "add_dimension":"Intensity",
+          "module":"filter_rxp",
+        },
+        {
+          "type":"writers.las",
+          "filename":"outputfile.las"
+          "discard_high_return_numbers":"true"
+        }
+      ]
+    }
+
 
 A few things to note:
 
-- We use a ``filters.programmable`` to remap Reflectance values to Intensity values, scaling them so the entire range of Reflectance values fit into the Intensity field.
+- We use a :ref:`filters.programmable` to remap Reflectance values to Intensity values, scaling them so the entire range of Reflectance values fit into the Intensity field.
   This is analogous to the "Export reflectance as intensity" option in RiSCAN Pro.
   You could also explicitly set the minimum and maximum Reflectance values as you would in RiSCAN Pro using the same programmable filter.
   You could also use "Amplitude" instead of "Reflectance".
   If you do not need Intensity values in your output file, you can delete the programmable filter.
-- We set the ``discard_high_return_numbers`` option to ``true`` on the las writer.
+- We set the ``discard_high_return_numbers`` option to ``true`` on the :ref:`writers.las`.
   RXP files can contain more returns per shot than is supported by las, and so we need to explicitly tell the las writer to ignore those high return number points.
-  You could also use ``filters.predicate`` to filter those points earlier in the pipeline, or modify the return values with a ``filters.programmable``.
+  You could also use :ref:`filters.predicate` to filter those points earlier in the pipeline, or modify the return values with a :ref:`filters.programmable`.
 
 
 Options
diff --git a/doc/stages/readers.sqlite.rst b/doc/stages/readers.sqlite.rst
index f2ac849..3679ad2 100644
--- a/doc/stages/readers.sqlite.rst
+++ b/doc/stages/readers.sqlite.rst
@@ -3,45 +3,40 @@
 readers.sqlite
 ====================
 
-The `SQLite`_ point cloud reader allows you to 
-read data stored in a SQLite database using a scheme that 
-PDAL wrote using the :ref:`writers.sqlite` writer. Much like 
-the :ref:`writers.oci` and :ref:`writers.pgpointcloud`, the 
-SQLite driver stores data in tables that contain rows of 
+The `SQLite`_ point cloud reader allows you to
+read data stored in a SQLite database using a scheme that
+PDAL wrote using the :ref:`writers.sqlite` writer. Much like
+the :ref:`writers.oci` and :ref:`writers.pgpointcloud`, the
+SQLite driver stores data in tables that contain rows of
 patches. Each patch contains a number of spatially contiguous points
 
 
 Example
 -------
 
-.. code-block:: xml
-
-    <?xml version="1.0" encoding="utf-8"?>
-    <Pipeline version="1.0">
-        <Writer type="writers.las">
-            <Option name="filename">
-                output.las
-            </Option>
-            <Reader type="readers.sqlite">
-                <Option name="query">
-                    SELECT b.schema, l.cloud, l.block_id, l.num_points, l.bbox, l.extent, l.points, b.cloud
-                      FROM simple_blocks l, simple_cloud b
-                     WHERE l.cloud = b.cloud and l.cloud in (1)
-                    order by l.cloud
-                </Option>
-                <Option name="connection">
-                    /Users/hobu/dev/git/pdal/test/data/thedata.sqlite
-                </Option>
-            </Reader>
-        </Writer>
-    </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.sqlite",
+          "connection":"inputfile.sqlite",
+          "query":"SELECT b.schema, l.cloud, l.block_id, l.num_points, l.bbox, l.extent, l.points, b.cloud\r\n                      FROM simple_blocks l, simple_cloud b\r\n                     WHERE l.cloud = b.cloud and l.cloud in (1)\r\n                    order by l.cloud"
+        },
+        {
+          "type":"writers.las",
+          "filename":"outputfile.las"
+        }
+      ]
+    }
+
 
 
 Options
 -------
 
 query
-  SQL statement that selects a schema XML, cloud id, bbox, and extent [Required] 
+  SQL statement that selects a schema XML, cloud id, bbox, and extent [Required]
 
 spatialreference
   The spatial reference to use for the points. Over-rides the value read from the database.
diff --git a/doc/stages/readers.text.rst b/doc/stages/readers.text.rst
new file mode 100644
index 0000000..977d92a
--- /dev/null
+++ b/doc/stages/readers.text.rst
@@ -0,0 +1,65 @@
+.. _readers.text:
+
+readers.text
+============
+
+The **text reader** reads data from ASCII text files.  Each point is
+represented in the file as a single line.  Each line is expected to be divided
+into a number of fields by a separator.  Each field represents a value for
+a point's dimension.  Each value needs to be `formatted`_ properly for
+C++ language double-precision values.
+
+The text reader expects a header line to 1) indicate the separator character
+for the fields and 2) name the dimension for each field in the points.  Any
+single non-alphanumeric character can be used as a separator.
+Each line in the file must contain the same number of fields as indicated by
+dimension names in the header.  Spaces are generally ignored in the input
+unless used as a separator.  When a space character is used as a separator,
+any number of consecutive spaces are treated as single space.
+
+Blank lines after the header line are ignored.
+
+Example Input File
+------------------
+
+This input file contains X, Y and Z value for 10 points.
+
+::
+
+    X,Y,Z
+    289814.15,4320978.61,170.76
+    289814.64,4320978.84,170.76
+    289815.12,4320979.06,170.75
+    289815.60,4320979.28,170.74
+    289816.08,4320979.50,170.68
+    289816.56,4320979.71,170.66
+    289817.03,4320979.92,170.63
+    289817.53,4320980.16,170.62
+    289818.01,4320980.38,170.61
+    289818.50,4320980.59,170.58
+
+Example Pipeline
+----------------
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.qfit",
+          "filename":"inputfile.txt"
+        },
+        {
+          "type":"writers.text",
+          "filename":"outputfile.txt"
+        }
+      ]
+    }
+
+Options
+-------
+
+filename
+  text file to read [Required]
+
+.. _formatted: http://en.cppreference.com/w/cpp/string/basic_string/stof
diff --git a/doc/stages/readers.tindex.rst b/doc/stages/readers.tindex.rst
index 10d7530..906f3fe 100644
--- a/doc/stages/readers.tindex.rst
+++ b/doc/stages/readers.tindex.rst
@@ -35,39 +35,27 @@ Given a tile index that was generated with the following scenario:
 Use the following :ref:`pipeline` example to read and automatically
 merge the data.
 
-.. code-block:: xml
-
-    <?xml version="1.0"?>
-    <Pipeline version="1.0">
-        <Writer type="writers.las">
-            <Option name="filename">
-                out.las
-            </Option>
-            <Reader type="readers.tindex">
-                <Option name="sql">
-                    SELECT * from pdal
-                </Option>
-               <Option name="filter_srs">
-                    +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +units=ft +no_defs
-                </Option>
-               <Option name="merge">
-                   true
-                </Option>
-                <Option name="filename">
-                    /Users/hobu/dev/git/pdal/test/temp/index.sqlite
-                </Option>
-                <Option name="where">
-                    location LIKE '%nteresting.las%'
-                </Option>
-                <Option name="boundary">
-                    ([635629.85, 638982.55], [848999.70 , 853535.43])
-                </Option>
-                <Option name="polygon">
-                    POLYGON ((635629.85000000 848999.70000000, 635629.85000000 853535.43000000, 638982.55000000 853535.43000000, 638982.55000000 848999.70000000, 635629.85000000 848999.70000000))
-                </Option>
-            </Reader>
-        </Writer>
-    </Pipeline>
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.tindex",
+          "sql":"SELECT * from pdal",
+          "filter_srs":"+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +units=ft +no_defs",
+          "merge":"true",
+          "filename":"index.sqlite",
+          "where":"location LIKE \'%nteresting.las%\'",
+          "boundary":"([635629.85, 638982.55], [848999.70 , 853535.43])",
+          "polygon":"POLYGON ((635629.85000000 848999.70000000, 635629.85000000 853535.43000000, 638982.55000000 853535.43000000, 638982.55000000 848999.70000000, 635629.85000000 848999.70000000))"
+        },
+        {
+          "type":"writers.las",
+          "filename":"outputfile.las"
+        }
+      ]
+    }
 
 
 Options
diff --git a/doc/stages/writers.bpf.rst b/doc/stages/writers.bpf.rst
index 2e01816..3935fbf 100644
--- a/doc/stages/writers.bpf.rst
+++ b/doc/stages/writers.bpf.rst
@@ -10,21 +10,21 @@ only supports writing of version 3 BPF format files.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.bpf">
-      <Option name="filename">
-        outputfile.bpf
-      </Option>
-      <Reader type="readers.las">
-        <Option name="filename">
-          inputfile.las
-        </Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.",s
+          "filename":"inputfile.las"
+        },
+        {
+          "type":"writers.bpf",
+          "filename":"outputfile.bpf"
+        }
+      ]
+    }
 
 Options
 -------
diff --git a/doc/stages/writers.derivative.rst b/doc/stages/writers.derivative.rst
index 8997a57..73b5afb 100644
--- a/doc/stages/writers.derivative.rst
+++ b/doc/stages/writers.derivative.rst
@@ -5,33 +5,36 @@ writers.derivative
 
 The **Derivative Writer** supports writing of primary topographic attributes.
 
+
+.. note::
+    This driver uses `GDAL`_ to write the data. Only the `GeoTIFF`_ driver
+    is supported at this time.
+
+.. _`GDAL`: http://gdal.org
+.. _`GeoTiff`: http://www.gdal.org/frmt_gtiff.html
+
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.derivative">
-      <Option name="filename">
-        outputfile.tiff
-      </Option>
-      <Option name="primitive_type">
-        slope_d8
-      </Option>
-      <Reader type="readers.las">
-        <Option name="filename">
-          inputfile.las
-        </Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        "inputfile.las",
+        {
+          "type":"writers.derivative",
+          "filename":"outputfile.tiff",
+          "primitive_type":"slope_d8"
+        }
+      ]
+    }
+
 
 Options
 -------
 
 filename
-  GeoTiff file to write.  [Required]
+  `GeoTiff`_ file to write.  [Required]
 
 primitive_type
   Topographic attribute to compute.  [Default: slope_d8]
diff --git a/doc/stages/writers.geowave.rst b/doc/stages/writers.geowave.rst
index 7e5031b..a7ed431 100644
--- a/doc/stages/writers.geowave.rst
+++ b/doc/stages/writers.geowave.rst
@@ -13,29 +13,30 @@ configuring the GeoWave plugin can be found `here`_.
 Example
 --------------------------------------------------------------------------------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.geowave">
-      <Option name="zookeeper_url">zookeeper1:2181,zookeeper2:2181,zookeeper3:2181</Option>
-      <Option name="instance_name">GeoWave</Option>
-      <Option name="username">user</Option>
-      <Option name="password">pass</Option>
-      <Option name="table_namespace">PDAL_Table</Option>
-      <Option name="feature_type_name">PDAL_Point</Option>
-      <Option name="data_adapter">FeatureCollectionDataAdapter</Option>
-      <Option name="points_per_entry">5000u</Option>
-      <Filter type="filters.reprojection">
-        <Option name="out_srs">EPSG:4326</Option>
-        <Reader type="readers.qfit">
-          <Option name="filename">qfitfile.qi</Option>
-          <Option name="flip_coordinates">false</Option>
-          <Option name="scale_z">1.0</Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.qfit",
+          "filename":"inputfile.qi",
+          "flip_coordinates":"false",
+          "scale_z":"1.0"
+        },
+        {
+          "type":"writers.geowave",
+          "zookeeper_url":"zookeeper1:2181,zookeeper2:2181,zookeeper3:2181",
+          "instance_name":"GeoWave",
+          "username":"user",
+          "password":"pass",
+          "table_namespace":"PDAL_Table",
+          "feature_type_name":"PDAL_Point",
+          "data_adapter":"FeatureCollectionDataAdapter",
+          "points_per_entry":"5000u"
+        }
+      ]
+    }
 
 Options
 -------
diff --git a/doc/stages/writers.las.rst b/doc/stages/writers.las.rst
index acc982b..44027f4 100644
--- a/doc/stages/writers.las.rst
+++ b/doc/stages/writers.las.rst
@@ -6,27 +6,29 @@ writers.las
 The **LAS Writer** supports writing to `LAS format`_ files, the standard
 interchange file format for LIDAR data.
 
-IMPORTANT NOTE: Scale/offset are not preserved from an input LAS file.  See
-below for information on the scale/offset options and the 'forward' option.
+.. warning::
+
+    Scale/offset are not preserved from an input LAS file.  See below for
+    information on the scale/offset options and the 'forward' option.
 
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.las">
-      <Option name="filename">
-        outputfile.las
-      </Option>
-      <Reader type="readers.las">
-        <Option name="filename">
-          inputfile.las
-        </Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.las",
+          "filename":"inputfile.las"
+        },
+        {
+          "type":"writers.las",
+          "filename":"outputfile.las"
+        }
+      ]
+    }
+
 
 Options
 -------
@@ -72,7 +74,7 @@ forward
 
 minor_version
   All LAS files are version 1, but the minor version (0 - 4) can be specified
-  with this option. [Default: 3]
+  with this option. [Default: 2]
 
 software_id
   String identifying the software that created this LAS file.
diff --git a/doc/stages/writers.matlab.rst b/doc/stages/writers.matlab.rst
index 4b9eb0b..453f8a7 100644
--- a/doc/stages/writers.matlab.rst
+++ b/doc/stages/writers.matlab.rst
@@ -12,24 +12,21 @@ Note that this output array can get very large very quickly.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.matlab">
-      <Option name="filename">
-        outputfile.mat
-      </Option>
-      <Option name="output_dims">
-        X,Y,Z,Intensity
-      </Option>
-      <Reader type="readers.las">
-        <Option name="filename">
-          inputfile.las
-        </Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.las",
+          "filename":"inputfile.las"
+        },
+        {
+          "type":"writers.matlab",
+          "output_dims":"X,Y,Z,Intensity",
+          "filename":"outputfile.mat"
+        }
+      ]
+    }
 
 Options
 -------
diff --git a/doc/stages/writers.nitf.rst b/doc/stages/writers.nitf.rst
index 9171eab..e91f703 100644
--- a/doc/stages/writers.nitf.rst
+++ b/doc/stages/writers.nitf.rst
@@ -4,25 +4,62 @@ writers.nitf
 ============
 
 The `NITF`_ format is a US Department of Defense format for the transmission
-of imagery.  It supports various formats inside a generic wrapper.  However,
-the PDAL NITF writer only supports LAS/LAZ data.
+of imagery.  It supports various formats inside a generic wrapper.
+
+.. note::
+
+    LAS inside of NITF is widely supported by software that uses NITF
+    for point cloud storage, and LAZ is supported by some softwares.
+    No other content type beyond those two is widely supported as
+    of January of 2016.
 
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.nitf">
-      <Option name="filename">mynitf.nitf</Option>
-      <Option name="oname">James Alexander</Option>
-      <Option name="ophone">646-322-3123</Option>
-      <Reader type="readers.las">
-        <Option name="filename">inputfile.las</Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+**Example One**
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.las",
+          "filename":"inputfile.las"
+        },
+        {
+          "type":"writers.nitf",
+          "compression":"laszip",
+          "idatim":"20160102220000",
+          "forward":"all",
+          "acftb":"SENSOR_ID:LIDAR,SENSOR_ID_TYPE:LILN",
+          "filename":"outputfile.ntf"
+        }
+      ]
+    }
+
+
+
+**Example Two**
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.las",
+          "filename":"inputfile.las"
+        },
+        {
+          "type":"writers.nitf",
+          "compression":"laszip",
+          "idatim":"20160102220000",
+          "forward":"all",
+          "acftb":"SENSOR_ID:LIDAR,SENSOR_ID_TYPE:LILN",
+          "aimidb":"ACQUISITION_DATE:20160102235900",
+          "filename":"outputfile.ntf"
+        }
+      ]
+    }
 
 
 Options
@@ -40,7 +77,7 @@ filename
 
 clevel
   File complexity level (2 characters) [Default: **03**]
-  
+
 stype
   Standard type (4 characters) [Default: **BF01**]
 
@@ -66,7 +103,8 @@ fsclsy
   File classification system (2 characters) [Default: <spaces>]
 
 idatim
-  Image date and time (format: 'CCYYMMDDhhmmss') [Default: <spaces>]
+  Image date and time (format: 'CCYYMMDDhhmmss'). Required.
+  [Default: AIMIDB.ACQUISITION_DATE if set or <spaces>]
 
 iid2
   Image identifier 2 (80 characters) [Default: <spaces>]
@@ -76,11 +114,14 @@ fscltx
 
 aimidb
   Comma separated list of name/value pairs to complete the AIMIDB
-  (Additional Image ID) TRE record (format name:value) [Default: None]
+  (Additional Image ID) TRE record (format name:value).
+  Required: ACQUISITION_DATE, will default to IDATIM value.
+  [Default: NITF defaults]
 
 acftb
   Comma separated list of name/value pairs to complete the ACFTB
-  (Aircraft Information) TRE record (format name:value) [Default: None]
+  (Aircraft Information) TRE record (format name:value). Required:
+  SENSOR_ID, SENSOR_ID_TYPE [Default: NITF defaults]
 
 
 .. _NITF: http://en.wikipedia.org/wiki/National_Imagery_Transmission_Format
diff --git a/doc/stages/writers.null.rst b/doc/stages/writers.null.rst
index bf11c95..206e299 100644
--- a/doc/stages/writers.null.rst
+++ b/doc/stages/writers.null.rst
@@ -9,18 +9,22 @@ a **null writer**.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.null">
-      <Filter type="filters.hexbin">
-        <Reader type="readers.las">
-          <Option name="filename">simple.las</Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.las",
+          "filename":"inputfile.las"
+        },
+        {
+          "type":"filters.hexbin"
+        },
+        {
+          "type":"writers.null",
+        }
+      ]
+    }
 
 When used with an option that forces metadata output, like
 --pipeline-serialization, this pipeline will create a hex boundary for
diff --git a/doc/stages/writers.oci.rst b/doc/stages/writers.oci.rst
index b68f662..ac34089 100644
--- a/doc/stages/writers.oci.rst
+++ b/doc/stages/writers.oci.rst
@@ -9,61 +9,26 @@ The OCI writer is used to write data to `Oracle point cloud`_ databases.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.oci">
-      <Option name="connection">
-        lidar/lidar at oracle.hobu.biz/lidar
-      </Option>
-      <Option name="base_table_name">
-        QFIT_CLOUD
-      </Option>
-      <Option name="block_table_name">
-        QFIT_BLOCKS
-      </Option>
-      <Option name="cloud_column_name">
-        CLOUD
-      </Option>
-      <Option name="is3d">
-        false
-      </Option>
-      <Option name="solid">
-        false
-      </Option>
-      <Option name="overwrite">
-        false
-      </Option>
-      <Option name="srid">
-        4269
-      </Option>
-      <Option name="capacity">
-        5000
-      </Option>
-      <Option name="stream_output_precision">
-        8
-      </Option>
-      <Filter type="filters.chipper">
-        <Option name="capacity">
-          5000
-        </Option>
-        <Filter type="filters.cache">
-          <Option name="max_cache_blocks">
-            1
-          </Option>
-          <Option name="cache_block_size">
-            50000000
-          </Option>
-          <Reader type="readers.las">
-            <Option name="filename">
-              file.las
-            </Option>
-          </Reader>
-        </Filter>
-      </Filter>
-    </Writer>
-  </Pipeline>
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.las",
+          "filename":"inputfile.las"
+        },
+        {
+          "type":"writers.oci",
+          "connection":"grid/grid at localhost/orcl",
+          "block_table_name":"QFIT_BLOCKS",
+          "base_table_name":"QFIT_CLOUD",
+          "cloud_column_name":"CLOUD",
+          "srid":"4269",
+          "capacity":"5000"
+        }
+      ]
+    }
 
 
 
@@ -84,17 +49,17 @@ overwrite
 
 verbose
   Wipe the block table and recreate it before loading data  [Default: **false**]
-  
+
 srid
   The Oracle numerical SRID value to use for PC_EXTENT, BLK_EXTENT, and indexing  [Default: **0**]
-  
+
 capacity
   The block capacity or maximum number of points a block can contain  [Default: **0**]
 
 stream_output_precision
   The number of digits past the decimal place for outputting floats/doubles to streams. This is used for creating the SDO_PC object and adding the index entry to the USER_SDO_GEOM_METADATA for the block table  [Default: **8**]
 
-cloud_id 
+cloud_id
   The point cloud id that links the point cloud object to the entries in the block table.  [Default: **-1**]
 
 block_table_name
@@ -102,10 +67,10 @@ block_table_name
 
 block_table_partition_column
   The column name for which 'block_table_partition_value' will be placed in the 'block_table_name'
-  
+
 block_table_partition_value
   Integer value to use to assing partition IDs in the block table. Used in conjunction with 'block_table_partition_column'  [Default: **0**]
-  
+
 base_table_name
   The name of the table which will contain the SDO_PC object [Default: **hobu**]
 
@@ -114,13 +79,13 @@ cloud_column_name
 
 base_table_aux_columns
   Quoted, comma-separated list of columns to add to the SQL that gets executed as part of the point cloud insertion into the 'base_table_name' table
-  
+
 base_table_aux_values
   Quoted, comma-separated values that correspond to 'base_table_aux_columns', entries that will get inserted as part of the creation of the SDO_PC entry in the 'base_table_name' table
 
 base_table_boundary_column
   The SDO_GEOMETRY column in 'base_table_name' in which to insert the WKT in 'base_table_boundary_wkt' representing a boundary for the SDO_PC object. Note this is not the same as the 'base_table_bounds', which is just a bounding box that is placed on the SDO_PC object itself.
-  
+
 base_table_boundary_wkt
   WKT, in the form of a string or a file location, to insert into the SDO_GEOMTRY column defined by 'base_table_boundary_column'
 
@@ -141,13 +106,13 @@ pc_id
 
 pack_ignored_fields
   Pack ignored dimensions out of the data buffer that is written [Default: **true**]
-  
+
 do_trace
   turn on server-side binds/waits tracing -- needs ALTER SESSION privs [Default: **false**]
-  
+
 stream_chunks
   Stream block data chunk-wise by the DB's chunk size rather than as an entire blob" [Default: **false**]
-  
+
 blob_chunk_count
   When streaming, the number of chunks per write to use [Default: **16**]
 
diff --git a/doc/stages/writers.p2g.rst b/doc/stages/writers.p2g.rst
index 2443dba..65a54e5 100644
--- a/doc/stages/writers.p2g.rst
+++ b/doc/stages/writers.p2g.rst
@@ -23,49 +23,29 @@ possible to generate all grid variants in one pass.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.p2g">
-      <Option name="grid_dist_x">
-        6.0
-      </Option>
-      <Option name="grid_dist_y">
-        6.0
-      </Option>
-      <Option name="radius">
-        8.4852813742385713
-      </Option>
-      <Option name="filename">
-        autzen_grid
-      </Option>
-      <Option name="output_type">
-        min
-      </Option>
-      <Option name="output_type">
-        max
-      </Option>
-      <Option name="output_type">
-        mean
-      </Option>
-      <Option name="output_type">
-        idw
-      </Option>
-      <Option name="output_type">
-        den
-      </Option>
-      <Option name="output_format">
-        grid
-      </Option>
-      <Reader type="readers.las">
-        <Option name="filename">
-            .a./1.2-with-color.las
-        </Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
-
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.las",
+          "filename":"inputfile.las"
+        },
+        {
+          "type":"writers.p2g",
+          "grid_dist_x":"6.0",
+          "grid_dist_y":"6.0",
+          "radius":"8.4852813742385713",
+          "filename":"autzen_grid",
+          "output_type":"min",
+          "output_type":"max",
+          "output_type":"mean",
+          "output_type":"idw",
+          "output_type":"den",
+          "output_format":"den",
+        }
+      ]
+    }
 Options
 -------
 
diff --git a/doc/stages/writers.pcd.rst b/doc/stages/writers.pcd.rst
index 3889ef3..289b62e 100644
--- a/doc/stages/writers.pcd.rst
+++ b/doc/stages/writers.pcd.rst
@@ -13,30 +13,32 @@ binary-compressed format.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.pcd">
-      <Option name="filename">outputfile.pcd</Option>
-      
-      <Reader type="readers.pcd">
-        <Option name="filename">inputfile.pcd</Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.pcd",
+          "filename":"inputfile.pcd"
+        },
+        {
+          "type":"writers.pcd",
+          "filename":"outputfile.pcd"
+        }
+      ]
+    }
 
 Options
 -------
 
 filename
-  PCD file to write [Required] 
+  PCD file to write [Required]
 
 compression
   Apply compression to the PCD file? [Default: false]
-  
+
 
 
 .. _Point Cloud Data (PCD): http://pointclouds.org/documentation/tutorials/pcd_file_format.php
 .. _Point Cloud Library (PCL): http://pointclouds.org
- 
+
diff --git a/doc/stages/writers.pgpointcloud.rst b/doc/stages/writers.pgpointcloud.rst
index c6e9099..beb192d 100644
--- a/doc/stages/writers.pgpointcloud.rst
+++ b/doc/stages/writers.pgpointcloud.rst
@@ -12,55 +12,58 @@ In order to create patches of the right size, the Pointcloud writer should be pr
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.pgpointcloud">
-      <Option name="connection">
-        host='localhost' dbname='lidar' user='pramsey'
-      </Option>
-      <Option name="table">example</Option>
-      <Option name="compression">dimensional</Option>
-      <Option name="srid">26916</Option>
-      <Filter type="filters.chipper">
-        <Option name="capacity">400</Option>
-        <Reader type="readers.las">
-            <Option name="filename">example.las</Option>
-            <Option name="spatialreference">EPSG:26916</Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.las",
+          "filename":"inputfile.las",
+          "spatialreference":"EPSG:26916"
+        },
+        {
+          "type":"filters.chipper",
+          "capacity":400
+        }
+        {
+          "type":"writers.pgpointcloud",
+          "connection":"host=\'localhost\' dbname=\'lidar\' user=\'pramsey\'",
+          "table":"example",
+          "compression":"dimensional",
+          "srid":"26916"
+        }
+      ]
+    }
 
 Options
 -------
 
 connection
-  PostgreSQL connection string. In the form *"host=hostname dbname=database user=username password=pw port=5432"* [Required] 
+  PostgreSQL connection string. In the form *"host=hostname dbname=database user=username password=pw port=5432"* [Required]
 
 table
-  Database table to write to. [Required] 
+  Database table to write to. [Required]
 
 schema
   Database schema to write to. [Default: **public**]
 
 column
   Table column to put patches into. [Default: **pa**]
-  
+
 compression
   Patch compression type to use. [Default: **dimensional**]
-  
+
   * **none** applies no compression
   * **dimensional** applies dynamic compression to each dimension separately
   * **ght** applies a "geohash tree" compression by sorting the points into a prefix tree
-  
+
 overwrite
   To drop the table before writing set to 'true'. To append to the table set to 'false'. [Default: **true**]
 
 srid
   Spatial reference ID (relative to the `spatial_ref_sys` table in PostGIS) to store with the point cloud schema. [Default: **4326**]
-  
+
 pcid
   An optional existing PCID to use for the point cloud schema. If specified, the schema must be present. If not specified, a match will still be looked for, or a new schema will be inserted.
 
@@ -69,7 +72,7 @@ pre_sql
 
 post_sql
   Optional SQL to execute *after* running the translation. If the value references a file, the file is read and any SQL inside is executed. Otherwise the value is executed as SQL itself.
-  
+
 scale_x, scale_y, scale_z / offset_x, offset_y, offset_z
   If ANY of these options are specified the X, Y and Z dimensions are adjusted
   by subtracting the offset and then dividing the values by the specified
diff --git a/doc/stages/writers.ply.rst b/doc/stages/writers.ply.rst
index 325195e..cc0e93b 100644
--- a/doc/stages/writers.ply.rst
+++ b/doc/stages/writers.ply.rst
@@ -19,28 +19,33 @@ You can choose from:
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.ply">
-      <Option name="filename">outputfile.ply</Option>
-      <Option name="storage_mode">little endian</Option>
-      <Reader type="readers.las">
-        <Option name="filename">inputfile.las</Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.pcd",
+          "filename":"inputfile.pcd"
+        },
+        {
+          "type":"writers.ply",
+          "storage_mode":"little endian",
+          "filename":"outputfile.ply"
+        }
+      ]
+    }
+
 
 Options
 -------
 
 filename
-  ply file to write [Required] 
+  ply file to write [Required]
 
 storage_mode
   Type of ply file to write [default: host-ordered binary]
-  
+
 
 .. _polygon file format: http://paulbourke.net/dataformats/ply/
 .. _rply library: http://w3.impa.br/~diego/software/rply/
diff --git a/doc/stages/writers.rialto.rst b/doc/stages/writers.rialto.rst
index 1034c37..5b6ad9e 100644
--- a/doc/stages/writers.rialto.rst
+++ b/doc/stages/writers.rialto.rst
@@ -9,22 +9,26 @@ tiles <http://lists.osgeo.org/pipermail/pointdown/2015-February/000001.html>`__.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.rialto">
-      <Option name="filename">output.ria</Option>
-      <Option name="max_levels">18</Option>
-      <Option name="overwrite">true</Option>
-      <Filter type="filters.reprojection">
-        <Option name="out_srs">EPSG:4326</Option>
-        <Reader type="readers.las">
-          <Option name="filename">input.las</Option>
-        </Reader>
-      </Filter>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.las",
+          "filename":"inputfile.las"
+        },
+        {
+          "type":"filters.reprojection",
+          "out_srs":"EPSG:4326"
+        }
+        {
+          "type":"writers.rialto",
+          "max_levels":"18",
+          "overwrite":"true",
+          "filename":"outputfile.ria"
+        }
+      ]
+    }
 
 Options
 -------
@@ -41,4 +45,4 @@ max_levels
 
 overwrite
   Delete the target directory prior to writing results? [Default: false]
-  
+
diff --git a/doc/stages/writers.sqlite.rst b/doc/stages/writers.sqlite.rst
index 5dca0b7..d04e2eb 100644
--- a/doc/stages/writers.sqlite.rst
+++ b/doc/stages/writers.sqlite.rst
@@ -3,47 +3,36 @@
 writers.sqlite
 ====================
 
-The `SQLite`_ driver outputs point cloud data into a PDAL-sepecific scheme 
-that matches the approach of :ref:`readers.pgpointcloud` and :ref:`readers.oci`. 
+The `SQLite`_ driver outputs point cloud data into a PDAL-sepecific scheme
+that matches the approach of :ref:`readers.pgpointcloud` and :ref:`readers.oci`.
 
 Example
 -------
 
-.. code-block:: xml
-
-    <?xml version="1.0" encoding="utf-8"?>
-    <Pipeline version="1.0">
-        <Writer type="writers.sqlite">
-            <Option name="connection">
-                output.sqlite
-            </Option>
-            <Option name="cloud_table_name">
-                SIMPLE_CLOUD
-            </Option>
-            <Option name="pre_sql"/>
-            <Option name="post_sql"/>
-            <Option name="block_table_name">
-                SIMPLE_BLOCKS
-            </Option>
-            <Option name="cloud_column_name">
-                CLOUD
-            </Option>
-      
-            <Filter type="filters.chipper">
-                <Option name="capacity">
-                    50
-                </Option>
-                <Reader type="readers.las">
-                    <Option name="filename">
-                        latlon.las
-                    </Option>
-                    <Option name="spatialreference">
-                        EPSG:4326
-                    </Option>
-                </Reader>
-            </Filter>
-        </Writer>
-    </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.las",
+          "filename":"inputfile.las"
+        },
+        {
+          "type":"filters.chipper",
+          "capacity":50
+        }
+        {
+          "type":"writers.sqlite",
+          "connection":"output.sqlite",
+          "cloud_table_name":"SIMPLE_CLOUD",
+          "pre_sql":"",
+          "post_sql":"",
+          "block_table_name":"SIMPLE_BLOCKS",
+          "cloud_column_name":"CLOUD",
+          "filename":"outputfile.pcd"
+        }
+      ]
+    }
 
 
 
@@ -51,7 +40,7 @@ Options
 -------
 
 connection
-  SQLite filename [Required] 
+  SQLite filename [Required]
 
 cloud_table_name
   Name of table to store cloud (file) information [Required]
@@ -73,7 +62,7 @@ pre_sql
 
 post_sql
   Optional SQL to execute *after* running the translation. If the value references a file, the file is read and any SQL inside is executed. Otherwise the value is executed as SQL itself.
-  
+
 scale_x, scale_y, scale_z / offset_x, offset_y, offset_z
   If ANY of these options are specified the X, Y and Z dimensions are adjusted
   by subtracting the offset and then dividing the values by the specified
diff --git a/doc/stages/writers.text.rst b/doc/stages/writers.text.rst
index a8a4e32..0f9da9f 100644
--- a/doc/stages/writers.text.rst
+++ b/doc/stages/writers.text.rst
@@ -11,22 +11,23 @@ supports both `GeoJSON`_ and `CSV`_ output.
 Example
 -------
 
-.. code-block:: xml
-
-  <?xml version="1.0" encoding="utf-8"?>
-  <Pipeline version="1.0">
-    <Writer type="writers.text">
-      <Option name="filename">output.js</Option>
-      <Option name="format">geojson</Option>
-      <Option name="order">X,Y,Z</Option>
-      <Option name="keep_unspecified">false</Option>
-      <Reader type="readers.qfit">
-        <Option name="filename">qfitfile.qi</Option>
-        <Option name="flip_coordinates">false</Option>
-        <Option name="scale_z">1.0</Option>
-      </Reader>
-    </Writer>
-  </Pipeline>
+.. code-block:: json
+
+    {
+      "pipeline":[
+        {
+          "type":"readers.las",
+          "filename":"inputfile.las"
+        },
+        {
+          "type":"writers.text",
+          "format":"geojson",
+          "order":"X,Y,Z",
+          "keep_unspecified":"false",
+          "filename":"outputfile.txt"
+        }
+      ]
+    }
 
 Options
 -------
diff --git a/doc/tutorial/clipping-with-shapefile.rst b/doc/tutorial/clipping-with-shapefile.rst
index cdf3f6a..29e6943 100644
--- a/doc/tutorial/clipping-with-shapefile.rst
+++ b/doc/tutorial/clipping-with-shapefile.rst
@@ -112,44 +112,25 @@ Pipeline
 A PDAL :ref:`pipeline` is how you define a set of actions to happen to data
 as they are read, filtered, and written.
 
-.. code-block:: xml
-
-    <?xml version="2.0" encoding="utf-8"?>
-    <Pipeline version="1.0">
-        <Writer type="writers.las">
-            <Option name="filename">
-                output.las
-            </Option>
-            <Filter type="filters.range">
-                <Option name="limits">
-                   Classification[5:5]
-                 </Option>
-                <Filter type="filters.attribute">
-                    <Option name="dimension">
-                        Classification
-                    </Option>
-                    <Option name="datasource">
-                        attributes.vrt
-                    </Option>
-                    <Option name="layer">
-                        OGRGeoJSON
-                    </Option>
-                    <Option name="column">
-                        CLS
-                    </Option>
-                    <Reader type="readers.las">
-                        <Option name="filename">
-                            autzen.laz
-                        </Option>
-                    </Reader>
-                </Filter>
-            </Filter>
-        </Writer>
-    </Pipeline>
-
-
-:ref:`Pipeline <pipeline>` files are read inside-out, so we will start with the
-:ref:`readers.las` and move up until we hit the :ref:`writers.las`.
+.. code-block:: json
+
+  {
+    "pipeline":[
+      "autzen.laz",
+      {
+        "type":"filters.attribute",
+        "dimension":"Classification",
+        "datasource":"attributes.vrt",
+        "layer":"OGRGeoJSON",
+        "column":"CLS"
+      },
+      {
+        "type":"filters.range",
+        "limits":"Classification[5:5]"
+      },
+      "output.las"
+    ]
+  }
 
 * :ref:`readers.las`: Define a reader that can read `ASPRS LAS`_ or `LASzip`_
   data.
@@ -173,14 +154,14 @@ as they are read, filtered, and written.
 Processing
 -------------------------------------------------------------------------------
 
-1) Save the pipeline to a file called ``shape-clip.xml`` in the same directory as
+1) Save the pipeline to a file called ``shape-clip.json`` in the same directory as
    your ``attributes.json`` and ``autzen.laz`` files.
 
 2) Call ``pdal pipeline`` on the :ref:`pipeline`.
 
     ::
 
-        $ pdal pipeline shape-clip.xml
+        $ pdal pipeline shape-clip.json
 
 3) Visualize ``output.las`` in an environment capable of viewing it. http://plas.io
    or `CloudCompare`_ should do the trick.
diff --git a/doc/tutorial/dart-throwing.rst b/doc/tutorial/dart-throwing.rst
index 5ada621..98cc23c 100644
--- a/doc/tutorial/dart-throwing.rst
+++ b/doc/tutorial/dart-throwing.rst
@@ -1,4 +1,4 @@
-.. dart-throwing:
+.. _dart-throwing-tutorial:
 
 ===============================================================
 Performing Poisson Sampling of Point Clouds Using Dart Throwing
@@ -9,35 +9,60 @@ Performing Poisson Sampling of Point Clouds Using Dart Throwing
 :Date: 11/13/2015
 
 
-This tutorial will describe the creation of a new filter for sampling point cloud data, :ref:`filters.dartsample`.
+This tutorial will describe the creation of a new filter for sampling point
+cloud data, :ref:`filters.dartsample`.
 
 Introduction
 -------------------------------------------------------------------------------
 
-Sampling of point cloud data can be advantageous for a number of reasons. It can be used with care to create a lower resolution version of the point cloud for visualization, or to accelerate processing of derivative products at a coarser resolution. "Duplicate" points can be removed by subsampling. And the effects of overlapping and uneven scan patterns can be removed by sampling.
+Sampling of point cloud data can be advantageous for a number of reasons. It
+can be used with care to create a lower resolution version of the point cloud
+for visualization, or to accelerate processing of derivative products at a
+coarser resolution. "Duplicate" points can be removed by subsampling. And the
+effects of overlapping and uneven scan patterns can be removed by sampling.
 
 Approach
 -------------------------------------------------------------------------------
 
-We have chosen to implement the dart throwing filter as a PCL filter. The reason for this is simple. While it is often the case that we want to create a filter that can be included as stage in a PDAL pipeline, there are other, more primitive filters, that we may wish to reuse within another filter. While we may not want to subsample our point cloud, thus discarding points from our output ``PointView``, we may be perfectly content to subsample the data as a transient representation of the [...]
-
-Our implementation is a no frills, brute force approach (there are more advanced methods that have been published over the years).
-
-We begin by creating a random permutation of the input ``PointView`` indices. The first point in this randomized set is appended to the output ``PointView`` and its associated octree. For the remaining points in the input cloud, we first test to see if there is a neighbor in the output cloud within the specified ``radius``. If so, we discard the point. If not, it too is added to the output ``PointView`` and octree.
+We have chosen to implement the dart throwing filter as a PCL filter. The
+reason for this is simple. While it is often the case that we want to create a
+filter that can be included as stage in a PDAL pipeline, there are other, more
+primitive filters, that we may wish to reuse within another filter. While we
+may not want to subsample our point cloud, thus discarding points from our
+output ``PointView``, we may be perfectly content to subsample the data as a
+transient representation of the data within a filter - for example, to compute
+a coarse estimate of ground returns on 10% of the data to accelerate detection
+of buildings at full resolution.
+
+Our implementation is a no frills, brute force approach (there are more
+advanced methods that have been published over the years).
+
+We begin by creating a random permutation of the input ``PointView`` indices.
+The first point in this randomized set is appended to the output ``PointView``
+and its associated octree. For the remaining points in the input cloud, we
+first test to see if there is a neighbor in the output cloud within the
+specified ``radius``. If so, we discard the point. If not, it too is added to
+the output ``PointView`` and octree.
 
 That's it! It's really that simple.
 
 Example #1
 -------------------------------------------------------------------------------
 
-We will again be working with the autzen dataset. The dart sampling filter is easily invoked via the PDAL ``translate`` command. Here, we enforce a minimum distance of three feet.
+We will again be working with the autzen dataset. The dart sampling filter is
+easily invoked via the PDAL ``translate`` command. Here, we enforce a minimum
+distance of three feet.
 
 ::
 
     $ pdal translate autzen.laz autzen-dart-sampled.laz dartsample \
     --filters.dartsample.radius=3
 
-For comparison, we will process autzen using both :ref:`filters.decimation`, with a step size of 6, and :ref:`filters.voxelgrid`, with a leaf size of 4.5 feet in X, Y, and Z, to arrive at a subsampled point cloud of roughly 1.6 million points, which closely approximates the number of points returned in our dart sampling run.
+For comparison, we will process autzen using both :ref:`filters.decimation`,
+with a step size of 6, and :ref:`filters.voxelgrid`, with a leaf size of 4.5
+feet in X, Y, and Z, to arrive at a subsampled point cloud of roughly 1.6
+million points, which closely approximates the number of points returned in our
+dart sampling run.
 
 ::
 
@@ -49,29 +74,55 @@ For comparison, we will process autzen using both :ref:`filters.decimation`, wit
     $ pdal translate autzen.laz autzen-voxelgrid-sampled.laz voxelgrid \
     --filters.voxelgrid.leaf_x=4.5 --filters.voxelgrid.leaf_y=4.5 --filters.voxelgrid.leaf_z=4.5
 
-First, we inspect a fixture located in the middle of an open field, displaying the original point cloud, Poisson (dart sampled), voxel grid, and randomly sampled results in clockwise order from top-left.
+First, we inspect a fixture located in the middle of an open field, displaying
+the original point cloud, Poisson (dart sampled), voxel grid, and randomly
+sampled results in clockwise order from top-left.
 
 .. image:: subsample-ex1.png
    :height: 400px
 
-The Poisson and voxel gridded clouds both appear to do a good job retaining key elements of the structure, while significantly reducing the number of points allocated to the ground plane. The randomly sampled cloud however, exhibits the opposite behavior, noticeably degrading the structure, while heavily sampling the ground. This is not an unexpected result, as both the Poisson and voxel grid approaches take the data and its distribution into account during the subsampling process, while [...]
+The Poisson and voxel gridded clouds both appear to do a good job retaining key
+elements of the structure, while significantly reducing the number of points
+allocated to the ground plane. The randomly sampled cloud however, exhibits the
+opposite behavior, noticeably degrading the structure, while heavily sampling
+the ground. This is not an unexpected result, as both the Poisson and voxel
+grid approaches take the data and its distribution into account during the
+subsampling process, while random sampling considers only point order (keep
+every N-th point).
 
-The second example shows a very similar result, this time with a set of point pylons and power lines. The random sampling approach severely degrades the structures in the scene, while the Poisson and voxel grid techniques both preserve signal.
+The second example shows a very similar result, this time with a set of point
+pylons and power lines. The random sampling approach severely degrades the
+structures in the scene, while the Poisson and voxel grid techniques both
+preserve signal.
 
 .. image:: subsample-ex2.png
    :height: 400px
 
-In the next example, we can see that there is an increased number of points in a scan overlap region. This is not uncommon, as data collectors strive to avoid gaps in coverage and overlap datasets to aid in registration of multiple passes. The appearance of these denser regions can be distracting to the eye, and the Poisson and voxel grid subsampling method can both be used to make the collected points appear more uniform by culling those points that are very near other other points. The [...]
+In the next example, we can see that there is an increased number of points in
+a scan overlap region. This is not uncommon, as data collectors strive to avoid
+gaps in coverage and overlap datasets to aid in registration of multiple
+passes. The appearance of these denser regions can be distracting to the eye,
+and the Poisson and voxel grid subsampling method can both be used to make the
+collected points appear more uniform by culling those points that are very near
+other other points. The random sampling method preserves this artifact.
 
 .. image:: subsample-ex3.png
    :height: 400px
 
-In this top-down view of a football stadium, we again see that the random sampling technique preserves (and perhaps even accentuates) scan pattern and overlap artifacts. It also introduces a side effect to the voxel grid approach, an aliasing of the data, seen as staircasing in the sloping surfaces of the stadium.
+In this top-down view of a football stadium, we again see that the random
+sampling technique preserves (and perhaps even accentuates) scan pattern and
+overlap artifacts. It also introduces a side effect to the voxel grid approach,
+an aliasing of the data, seen as staircasing in the sloping surfaces of the
+stadium.
 
 .. image:: subsample-ex4.png
    :height: 400px
 
-Our last example once again demonstrates each of the issues we have identified. The random sampling result eliminates a majority of points from each of the towers and highlights a scan overlap region. The voxel grid method results in ringing in the sloped terrain. The Poisson approach preserves a good amount of detail in the original signal and does not introduce any visual artifacts.
+Our last example once again demonstrates each of the issues we have identified.
+The random sampling result eliminates a majority of points from each of the
+towers and highlights a scan overlap region. The voxel grid method results in
+ringing in the sloped terrain. The Poisson approach preserves a good amount of
+detail in the original signal and does not introduce any visual artifacts.
 
 .. image:: subsample-ex5.png
    :height: 400px
diff --git a/doc/tutorial/docker-print-one.png b/doc/tutorial/docker-print-one.png
new file mode 100644
index 0000000..278250f
Binary files /dev/null and b/doc/tutorial/docker-print-one.png differ
diff --git a/doc/tutorial/docker-quickstart-env.png b/doc/tutorial/docker-quickstart-env.png
new file mode 100644
index 0000000..39a34a5
Binary files /dev/null and b/doc/tutorial/docker-quickstart-env.png differ
diff --git a/doc/tutorial/docker-quickstart-terminal.png b/doc/tutorial/docker-quickstart-terminal.png
new file mode 100644
index 0000000..0a5624a
Binary files /dev/null and b/doc/tutorial/docker-quickstart-terminal.png differ
diff --git a/doc/tutorial/docker.rst b/doc/tutorial/docker.rst
new file mode 100644
index 0000000..2cbbe0d
--- /dev/null
+++ b/doc/tutorial/docker.rst
@@ -0,0 +1,196 @@
+.. _docker:
+
+******************************************************************************
+Docker
+******************************************************************************
+
+:Author: Howard Butler
+:Contact: howard at hobu.co
+:Date: 01/07/2015
+
+.. index:: Docker
+
+Introduction
+------------------------------------------------------------------------------
+
+It's a giant pain to build everything yourself. To make it simpler to use PDAL, a
+build based on `Docker`_ is also available. This document describes how
+to use it to operate on your own data.
+
+
+.. seealso::
+    The `What is Docker <https://www.docker.com/what-docker>`__ document describes
+    in more detail what exactly Docker is. Think of it as a virtualization platform
+    that doesn't have to be "built" every time from scratch like a Vagrant build would.
+
+Getting Started
+------------------------------------------------------------------------------
+
+Install `Docker Toolbox`_.
+................................................................................
+
+Docker starting documentation can be found at the following links. Read through
+them a bit for your platform so you have an idea what to expect.
+
+* `Windows <http://docs.docker.com/windows/started/>`__
+* `OSX <http://docs.docker.com/mac/started/>`__
+* `Linux <http://docs.docker.com/linux/started/>`__
+
+.. _`Docker Toolbox`: https://www.docker.com/docker-toolbox
+
+.. note::
+
+    This tutorial will assume you are running on Windows, but the same commands should
+    work in OSX or Linux too -- though definition of file paths might provide
+    a significant difference.
+
+Run Docker Quickstart Terminal
+................................................................................
+
+`Docker`_ is most easily accessed using a terminal window that it configures
+with environment variables and such. Double-click on the "Docker Quickstart Terminal"
+link on your desktop (Windows) or run the "Docker Quickstart Terminal" application
+(Mac).
+
+After some text scrolls by, you should see something like the following image
+:
+
+.. image:: docker-quickstart-terminal.png
+
+To be sure Docker is working correctly and everything is happy,
+issue the following command and confirm that it reports similar information:
+
+::
+
+    docker-machine env default
+
+.. image:: docker-quickstart-env.png
+
+Fetch PDAL Image
+................................................................................
+
+The PDAL image provides a recent ``master`` branch build of PDAL. It is pushed
+to `Docker Hub`_ periodically by the PDAL developers. We need to pull it
+locally so we can use it to run PDAL commands. Once it is pulled, we
+don't have to pull it again unless we want to refresh it for
+whatever reason.
+
+::
+
+    docker pull pdal/pdal
+
+.. note::
+
+    Other PDAL versions are provided at the same `Docker Hub`_ location,
+    with an expected tag name (ie ``pdal/1.1``, or ``pdal/1.x``) for
+    major PDAL versions. The PDAL Docker hub location at
+    https://hub.docker.com/u/pdal/ has images and more information
+    on this topic.
+
+.. _`Docker Hub`: http://hub.docker.com
+
+Fetch Sample Data
+................................................................................
+
+We need some sample data to play with, so we're going to download
+the ``autzen.laz`` file to your ``C:/Users/Howard`` drive. Inside the
+Quickstart Terminal, issue the following ``curl`` command:
+
+::
+
+    curl -O http://www.liblas.org/samples/autzen/autzen.laz
+
+.. note::
+
+    That's a capital Oh, not a zero.
+
+List the directory to be sure that it was downloaded
+
+::
+
+    ls *.laz
+
+Print the first point
+................................................................................
+
+To test that we have a working system, we will print out the values of the
+very first point of ``autzen.laz``.
+
+::
+
+    docker run -v //c/Users/Howard:/data pdal/pdal pdal info //data/autzen.laz -p 0
+
+Here's a summary of what's going on with that command invocation
+
+1. ``docker``: We are running PDAL within the context of docker, so all of our
+   commands will start with the ``docker`` command.
+
+2. ``run``: Tells docker we're going to run an image
+
+3. ``-v //c/Users/Howard:/data``: Maps our home directory to a directory called
+   ``/data`` inside the container.
+
+   .. note::
+
+       The double slash, ``//c/Users/Howard`` instead of just ``/c/Users/Howard``
+       is because MSYS on Windows eats the first slash. See
+       https://github.com/docker/docker/issues/12751 for a ticket describing
+       this pain point in more detail. You do not need double slashes
+       if you are using OSX or Linux as your Docker container host.
+
+   .. seealso::
+
+       The `Docker Volume <https://docs.docker.com/engine/userguide/dockervolumes/>`__
+       document describes mounting volumes in more detail.
+
+4. ``pdal/pdal``: This is the Docker image we are going to run. We fetched it
+   with the command above. If it were not already fetched, Docker would attempt
+   to fetch it when we run this command.
+
+5. ``pdal``: We're finally going to run the ``pdal`` command :)
+
+6. ``info``: We want to run :ref:`info_command` on the data
+
+7. ``//data/autzen.laz``: The ``pdal`` command is now running in the context of
+   our container, which we mounted a ``/data`` directory in with the volume
+   mount operation in Step #3. Our ``autzen.laz`` file resides there.
+
+   .. note::
+
+        The same note about the double slash described in Step #3 applies here
+        as well.
+
+.. image:: docker-print-one.png
+
+
+What you get
+------------------------------------------------------------------------------
+
+The  configuration that PDAL provides contains nearly
+every possible feature except for `Oracle Point Cloud`_ support. Things it
+includes are:
+
+* :ref:`filters.hexbin`
+* :ref:`filters.reprojection`
+* :ref:`readers.nitf` and :ref:`writers.nitf`
+* `LASzip`_ support in :ref:`readers.las` and :ref:`writers.las`
+* Interpolation with `Points2Grid`_ using :ref:`writers.p2g`
+* Python manipulation using :ref:`filters.predicate` and :ref:`filters.programmable`
+* `PCL`_ support via :ref:`filters.pclblock`, :ref:`readers.pcd`,
+  :ref:`writers.pcd`, :ref:`ground_command`, and :ref:`pcl_command`
+* :ref:`writers.geowave`
+
+Head to :ref:`pipeline` for more information on using PDAL pipelines. Two pipelines
+are provided in ``/home/vagrant`` that are used to load the ``st-helens-small.las``
+file into `pgpointcloud`_.
+
+.. _`Points2Grid`: https://github.com/CRREL/points2grid
+.. _`Oracle Point Cloud`: http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_pc_pkg_ref.htm
+.. _`pgpointcloud`: https://github.com/pramsey/pointcloud
+
+.. _`LASzip`: http://laszip.org
+.. _`VirtualBox`: https://www.virtualbox.org/
+.. _`GDAL`: http://gdal.org
+.. _`MapServer`: http://mapserver.org
+.. _`Mapnik`: http://mapnik.org
+.. _`PCL`: http://www.pointclouds.org
diff --git a/doc/tutorial/index.rst b/doc/tutorial/index.rst
index 16b8986..772a723 100644
--- a/doc/tutorial/index.rst
+++ b/doc/tutorial/index.rst
@@ -24,6 +24,7 @@ Using PDAL
 
    reading
    writing
+   docker
    pcl_block_tutorial
    pcl_ground
    clipping-with-shapefile
diff --git a/doc/tutorial/overview.rst b/doc/tutorial/overview.rst
index 86b412b..9edac09 100644
--- a/doc/tutorial/overview.rst
+++ b/doc/tutorial/overview.rst
@@ -16,7 +16,7 @@ PDAL provides an API that can be used by programmers for integration into their
 own projects or to allow extension of existing capabilities.
 
 
-.. _the-pdal-model::
+.. _the-pdal-model:
 
 The PDAL model
 --------------------------------------------------------------------------------
@@ -343,7 +343,7 @@ point_count_t read(PointViewPtr view, point_count_t count)
     read.
 
 
-.. _implementing-a-filter::
+.. _implementing-a-filter:
 
 Implementing a Filter
 ................................................................................
diff --git a/doc/tutorial/pcl_block_tutorial.rst b/doc/tutorial/pcl_block_tutorial.rst
index 3d61eac..395071a 100644
--- a/doc/tutorial/pcl_block_tutorial.rst
+++ b/doc/tutorial/pcl_block_tutorial.rst
@@ -34,8 +34,8 @@ Quick Start
 
 .. note::
 
-    Instructions for getting started with PDAL using Vagrant and VirtualBox can
-    be found in the :ref:`vagrant` document.
+    Instructions for getting started with PDAL using :ref:`docker` also
+    include built-in PCL support.
 
 PDAL's Vagrant configuration now includes the PCL Block and all necessary
 dependencies. Assuming you've got Vagrant all set up, once you checkout the PDAL
@@ -79,43 +79,31 @@ The :ref:`filters.pclblock` is implemented as a PDAL filter stage and as such is
 easily accessed via the PDAL pipeline. It accepts a single, required option -
 the name of the `JSON`_ file describing the PCL Block.
 
-A sample pipeline XML which reads/writes LAS and has a single PCL Block filter
+A sample pipeline JSON which reads/writes LAS and has a single PCL Block filter
 is shown below.
 
-.. code-block:: xml
-
-    <?xml version="1.0" encoding="utf-8"?>
-    <Pipeline version="1.0">
-        <Writer type="writers.las">
-            <Option name="filename">
-                ../../../temp/foo.las
-            </Option>
-            <Filter type="filters.pclblock">
-                <Option name="filename">
-                    ./passthrough.json
-                </Option>
-                <Reader type="readers.las">
-                    <Option name="filename">
-                        ../../autzen/autzen-point-format-3.las
-                    </Option>
-                </Reader>
-            </Filter>
-        </Writer>
-    </Pipeline>
+.. code-block:: json
 
+  {
+    "pipeline":[
+      "autzen-point-format-3.las",
+      {
+        "type":"filters.pclblock",
+        "filename":"passthrough.json"
+      },
+      "foo.las"
+    ]
+  }
 
 And is run from the command line thusly.
 
 ::
 
-    $ cd pdal # your PDAL source tree
-    $ cd test/data
-    $ ../../bin/pdal pipeline -i filters/pcl/passthrough.xml -v4
+    $ pdal pipeline passthrough.json
 
 This simple pipeline reads the input LAS (``autzen-point-format-3.las``), passes
 it through the PCL Block (``passthrough.json``), and writes the output LAS
-(``foo.las``). Note that the file paths are interpreted relative to the
-directory containing the XML file.
+(``foo.las``).
 
 When run, it should produce output similar to this:
 
@@ -147,7 +135,7 @@ PDAL PCL kernel
 ------------------------------------------------------------------------------
 
 For users that would like to bypass the creation (and subsequent modification)
-of the pipeline XML for every file they wish to process, there is another
+of the pipeline JSON for every file they wish to process, there is another
 option: the ``pdal pcl`` command.
 
 ::
@@ -166,7 +154,7 @@ the command is
     $ pdal pcl -i <input cloud> -p <PCL Block JSON> -o <output cloud>
 
 where the JSON file specified with ``-p`` is the same file that would be
-embedded in the pipeline XML file. This can be useful when the pipeline does not
+embedded in the pipeline JSON file. This can be useful when the pipeline does not
 change frequently, but the input/output filenames do.
 
 For example, the above `pdal pipeline` example can be written with `pdal pcl`
diff --git a/doc/tutorial/reading.rst b/doc/tutorial/reading.rst
index fbbf81e..8b221a8 100644
--- a/doc/tutorial/reading.rst
+++ b/doc/tutorial/reading.rst
@@ -162,7 +162,7 @@ topic.
     The :ref:`pipeline_command` document contains detailed examples and background
     information.
 
-The :ref:`pipeline_command` PDAL utility is one that takes in a ``.xml`` file
+The :ref:`pipeline_command` PDAL utility is one that takes in a ``.json`` file
 containing :ref:`pipeline <pipeline_command>` description that defines a PDAL
 processing pipeline. Options can be given at each :cpp:class:`pdal::Stage` of
 the pipeline to affect different aspects of the processing pipeline, and
@@ -172,24 +172,17 @@ effects.
 Simple conversion
 ..............................................................................
 
-The following `XML`_ document defines a :ref:`pipeline` that takes the ``file.las``
+The following `JSON`_ document defines a :ref:`pipeline` that takes the ``file.las``
 `ASPRS LAS`_ file and converts it to a new file called ``output.las``.
 
-::
+.. code-block:: json
 
-    <?xml version="1.0" encoding="utf-8"?>
-    <Pipeline version="1.0">
-        <Writer type="writers.las">
-            <Option name="filename">
-                output.las
-            </Option>
-            <Reader type="readers.las">
-                <Option name="filename">
-                    ./path/to/my/file.las
-                </Option>
-            </Reader>
-        </Writer>
-    </Pipeline>
+  {
+    "pipeline":[
+      "file.las",
+      "output.las"
+    ]
+  }
 
 Loop a directory and filter it through a pipeline
 ................................................................................
@@ -199,10 +192,9 @@ a pipeline, substituting the input and output as it goes.
 
 ::
 
-    ls *.las | cut -d. -f1 | xargs -P20 -I{} pdal pipeline -i /path/to/proj.xml --readers.las.filename={}.las --writers.las.filename=output/{}.laz
+    ls *.las | cut -d. -f1 | xargs -P20 -I{} pdal pipeline -i /path/to/proj.json --readers.las.filename={}.las --writers.las.filename=output/{}.laz
 
 .. _`JSON`: http://www.json.org/
-.. _`XML`: http://en.wikipedia.org/wiki/XML
 .. _`UUID`: http://en.wikipedia.org/wiki/Universally_unique_identifier
 .. _`interesting.las`: https://github.com/PDAL/PDAL/blob/master/test/data/interesting.las?raw=true
 .. _`ASPRS LAS`: http://www.asprs.org/a/society/committees/standards/lidar_exchange_format.html
diff --git a/doc/tutorial/writing-filter.rst b/doc/tutorial/writing-filter.rst
index 8167401..0e9d026 100644
--- a/doc/tutorial/writing-filter.rst
+++ b/doc/tutorial/writing-filter.rst
@@ -13,7 +13,8 @@ PDAL can be extended through the development of filter functions.
 
 .. seealso::
 
-    For more on filters and their role in PDAL, please refer to :ref:`the-pdal-model` and :ref:`implementing-a-filter`.
+    For more on filters and their role in PDAL, please refer to
+    :ref:`overview`.
 
 Every filter stage in PDAL is implemented as a plugin (sometimes referred to as a "driver"). Filters native to PDAL, such as :ref:`filters.ferry`, are implemented as _static_ filters and are statically linked into the PDAL library. Filters that require extra/optional dependencies, or are external to the core PDAL codebase altogether, such as :ref:`filters.ground`, are implemented as _shared_ filters, and are built as individual shared libraries, discoverable by PDAL at runtime.
 
diff --git a/doc/tutorial/writing-kernel.rst b/doc/tutorial/writing-kernel.rst
index 5a466ff..e004ef7 100644
--- a/doc/tutorial/writing-kernel.rst
+++ b/doc/tutorial/writing-kernel.rst
@@ -19,8 +19,10 @@ First, we provide a full listing of the kernel header.
 
 .. literalinclude:: ../../examples/writing-kernel/MyKernel.hpp
    :language: cpp
+   :linenos:
 
-As with other plugins, the MyKernel class needs to have the following three methods declared for the plugin interface to be satisfied:
+As with other plugins, the MyKernel class needs to have the following three
+methods declared for the plugin interface to be satisfied:
 
 .. literalinclude:: ../../examples/writing-kernel/MyKernel.hpp
    :language: cpp
@@ -34,6 +36,7 @@ Again, we start with a full listing of the kernel source.
 
 .. literalinclude:: ../../examples/writing-kernel/MyKernel.cpp
    :language: cpp
+   :linenos:
 
 In your kernel implementation, you will use a macro defined in pdal_macros.
 This macro registers the plugin with the Kernel factory. It is
@@ -41,60 +44,62 @@ only required by plugins.
 
 .. literalinclude:: ../../examples/writing-kernel/MyKernel.cpp
    :language: cpp
-   :lines: 23-29
+   :lines: 25-26
 
-A static plugin macro can also be used to integrate the kernel with the main code.
-This will not be described here.  Using this as a shared plugin will be described later.
+.. note::
 
-To build up a processing pipeline in this
-example, we need to create two objects: the
-PointTable and the StageFactory. The latter is
-used to create the various stages that will be
-used within the kernel.
+    A static plugin macro can also be used to integrate the kernel with the
+    main code.  This will not be described here.  Using this as a shared plugin
+    will be described later.
+
+To build up a processing pipeline in this example, we need to create two
+objects: the :cpp:class:`pdal::PointTable` and the
+:cpp:class:`pdal::StageFactory`. The latter is used to create the various
+stages that will be used within the kernel.
 
 .. literalinclude:: ../../examples/writing-kernel/MyKernel.cpp
    :language: cpp
-   :lines: 60
+   :lines: 39-40
 
-The Reader is created from the StageFactory, and
-is specified by the stage name, in this case an
-LAS reader. For brevity, we provide the reader a
-single option, the filename of the file to be
-read.
+The :cpp:class:`pdal::Reader` is created from the
+:cpp:class:`pdal::StageFactory`, and is specified by the stage name, in this
+case an LAS reader. For brevity, we provide the reader a single option, the
+filename of the file to be read.
 
 .. literalinclude:: ../../examples/writing-kernel/MyKernel.cpp
    :language: cpp
-   :lines: 62-65
+   :lines: 42-45
 
-The Filter is also created from the StageFactory.
-Here, we create a decimation filter that will
-pass every tenth point to subsequent stages. We
-also specify the input to this stage, which is
-the reader.
+The :cpp:class:`pdal::Filter` is also created from the
+:cpp:class:`pdal::StageFactory`.  Here, we create a decimation filter that will
+pass every tenth point to subsequent stages. We also specify the input to this
+stage, which is the reader.
 
 .. literalinclude:: ../../examples/writing-kernel/MyKernel.cpp
    :language: cpp
-   :lines: 67-71
+   :lines: 47-51
 
-Finally, the Writer is created from the
-StageFactory. This text writer, takes as input
-the previous stage (the decimation filter) and
-the output filename as its sole option.
+Finally, the :cpp:class:`pdal::Writer` is created from the
+:cpp:class:`pdal::StageFactory`. This :ref:`writers.text`, takes as input the previous
+stage (the :ref:`filters.decimation`) and the output filename as its sole option.
 
 .. literalinclude:: ../../examples/writing-kernel/MyKernel.cpp
    :language: cpp
-   :lines: 73-77
+   :lines: 53-57
 
-The final two steps are to prepare and execute
-the pipeline. This is achieved by calling prepare
-and execute on the final stage.
+The final two steps are to prepare and execute the pipeline. This is achieved
+by calling prepare and execute on the final stage.
 
 .. literalinclude:: ../../examples/writing-kernel/MyKernel.cpp
    :language: cpp
-   :lines: 78-79
+   :lines: 58-59
 
-When compiled, a dynamic library file will be created; in this case, ``libpdal_plugin_kernel_mykernel.dylib``
+When compiled, a dynamic library file will be created; in this case,
+``libpdal_plugin_kernel_mykernel.dylib``
 
-Put this file in whatever directory ``PDAL_DRIVER_PATH`` is pointing to.  Then, if you run ``pdal --help``, you should see ``mykernel`` listed in the possible commands.
+Put this file in whatever directory ``PDAL_DRIVER_PATH`` is pointing to.  Then,
+if you run ``pdal --help``, you should see ``mykernel`` listed in the possible
+commands.
 
-To run this kernel, you would use ``pdal mykernel -i <input las file> -o <output text file>``.
+To run this kernel, you would use ``pdal mykernel -i <input las file> -o
+<output text file>``.
diff --git a/doc/tutorial/writing-reader.rst b/doc/tutorial/writing-reader.rst
index b0448b6..ca1883a 100644
--- a/doc/tutorial/writing-reader.rst
+++ b/doc/tutorial/writing-reader.rst
@@ -201,12 +201,12 @@ readers.myreader.
 
 To test the reader, we will put it into a pipeline and output a text file.
 
-Please download the `pipeline-myreader.xml`_ and `test-reader-input.txt`_ files.
+Please download the `pipeline-myreader.json`_ and `test-reader-input.txt`_ files.
 
 In the directory with those two files, run
-``pdal pipeline pipeline-myreader.xml``.  You should have an output file
+``pdal pipeline pipeline-myreader.json``.  You should have an output file
 called ``output.txt``, which will have the same data as in the input file,
 except in a CSV style format, and with the Z values scaled by .001.
 
-.. _`pipeline-myreader.xml`: https://github.com/PDAL/PDAL/blob/master/examples/writing-reader/pipeline-myreader.xml?raw=true
+.. _`pipeline-myreader.json`: https://github.com/PDAL/PDAL/blob/master/examples/writing-reader/pipeline-myreader.json?raw=true
 .. _`test-reader-input.txt`: https://github.com/PDAL/PDAL/blob/master/examples/writing-reader/test-reader-input.txt?raw=true
diff --git a/doc/tutorial/writing-writer.rst b/doc/tutorial/writing-writer.rst
index e93c4c2..1216b92 100644
--- a/doc/tutorial/writing-writer.rst
+++ b/doc/tutorial/writing-writer.rst
@@ -147,7 +147,7 @@ Compiling and Usage
 To compile this reader, we will use cmake.  Here is the CMakeLists.txt file we
 will use for this process:
 
-.. literalinclude:: ../../examples/writing-writer/CMakeLists.text
+.. literalinclude:: ../../examples/writing-writer/CMakeLists.txt
 
 If this file is in the directory with the MyWriter.hpp and MyWriter.cpp files,
 simply run ``cmake .`` followed by ``make``.  This will generate a file called
@@ -159,13 +159,13 @@ writers.mywriter.
 
 To test the writer, we will put it into a pipeline and read in a LAS file and
 covert it to our output format.  For this example, use `interesting.las`_, and
-run it through `pipeline-mywriter.xml`_.
+run it through `pipeline-mywriter.json`_.
 
 If those files are in the same directory, you would just run the command
-``pdal pipeline pipeline-mywriter.xml``, and it will generate an output file
+``pdal pipeline pipeline-mywriter.json``, and it will generate an output file
 called output.txt, which will be in the proper format.  From there, if you
 wanted, you could run that output file through the MyReader that was created
 in the previous tutorial, as well.
 
 .. _`interesting.las`: https://github.com/PDAL/PDAL/blob/master/test/data/interesting.las?raw=true
-.. _`pipeline_mywriter.xml`: https://github.com/PDAL/PDAL/blob/master/examples/writing-writer/pipeline-mywriter.xml?raw=true
\ No newline at end of file
+.. _`pipeline_mywriter.json`: https://github.com/PDAL/PDAL/blob/master/examples/writing-writer/pipeline-mywriter.json?raw=true
diff --git a/doc/uoh.png b/doc/uoh.png
new file mode 100644
index 0000000..ca05544
Binary files /dev/null and b/doc/uoh.png differ
diff --git a/doc/vagrant.rst b/doc/vagrant.rst
deleted file mode 100644
index f23e5af..0000000
--- a/doc/vagrant.rst
+++ /dev/null
@@ -1,141 +0,0 @@
-.. _vagrant:
-
-******************************************************************************
-Vagrant
-******************************************************************************
-
-:Author: Howard Butler
-:Contact: howard at hobu.co
-:Date: 10/27/2015
-
-.. index:: Vagrant
-
-Introduction
-------------------------------------------------------------------------------
-
-Because of PDAL's relatively short lifespan, there are not so many
-distributions and packaging solutions that have it available. This means that
-prospective users of PDAL are pretty much on their own to build up PDAL and use
-it. Folks who've climbed this mountain with other well-entangled software like
-`GDAL`_, `MapServer`_, or `Mapnik`_ should be able to manage the compilation
-challenges listed in the full set of dependencies in :ref:`building_unix`.
-
-For everyone else, suffering all of the compilation challenges, including
-at least three different build systems is simply too much. "Give me a
-binary and be done with it," they might ask, and for them, there is an
-answer. Surrender the requirement of running PDAL in your own customized
-system for the buildout of PDAL on a known quantity -- a pre-configured
-virtual machine.
-
-Installation
-------------------------------------------------------------------------------
-
-.. note::
-
-    This document assumes you are starting with a basic Macintosh system
-    because this is the only system the author assumes people could
-    ever want to run :). This document has not been tested on any other
-    platforms, but it is expected that things should work if you're
-    starting from Windows or some Linux.
-
-`Vagrant`_ is configuration management for virtual machines. Its focus is
-on reproducibility of configuration. The idea is to codify the configuration
-using simple text files, press a button, and out spits a fully configured
-virtual machine with the specified options. And for the most part, this is
-what actually happens.
-
-`Vagrant`_ is simply the configuration management software, however. `VirtualBox`_
-is the virtual machine container. These two tools are used in concert,
-and both are required to complete this tutorial.
-
-1) Download and install `VirtualBox <https://www.virtualbox.org/wiki/Downloads>`__.
-2) Download and install `Vagrant <http://downloads.vagrantup.com/>`__.
-3) Clone PDAL to your environment:
-
-    ::
-
-        $ git clone https://github.com/PDAL/PDAL.git
-
-4) Execute the vagrant configuration:
-
-    ::
-
-        vagrant up
-
-5) Wait ...
-6) Wait ...
-7) Wait ...
-8) Look for the following when it's all done:
-
-    ::
-
-        vagrant at pdal-development:~$ pdal info --input readpgpointcloud.xml -p 0
-        {
-            "X": "560974.95000000007",
-            "Y": "5115235.6900000004",
-            "Z": "1881.71",
-            "Intensity": "0",
-            "ReturnNumber": "0",
-            "NumberOfReturns": "0",
-            "ScanDirectionFlag": "0",
-            "EdgeOfFlightLine": "0",
-            "Classification": "2",
-            "ScanAngleRank": "0",
-            "UserData": "0",
-            "PointSourceId": "21",
-            "Time": "0",
-            "Red": "248",
-            "Green": "250",
-            "Blue": "246",
-            "PointID": "772536",
-            "BlockID": "0"
-        }
-
-9) Start playing around:
-
-    ::
-
-        $ vagrant ssh
-        $ pdal
-
-        ------------------------------------------------------------------------------------------
-        pdal (PDAL 0.9.9 (b632df) with GeoTIFF 1.4.0 GDAL 1.11dev LASzip 2.1.0 System )
-        ------------------------------------------------------------------------------------------
-          available actions:
-             - info
-             - pipeline
-             - query
-             - translate
-
-What you get
-------------------------------------------------------------------------------
-
-The `Vagrant`_ configuration that PDAL provides contains nearly
-every possible feature except for `Oracle Point Cloud`_ support. Things it
-includes are:
-
-* Full `pgpointcloud`_ support including example database
-* :ref:`filters.hexbin`
-* :ref:`filters.reprojection`
-* :ref:`readers.nitf` and :ref:`writers.nitf`
-* `LASzip`_ support in :ref:`readers.las` and :ref:`writers.las`
-* Interpolation with `Points2Grid`_ using :ref:`writers.p2g`
-* Python manipulation using :ref:`filters.predicate` and :ref:`filters.programmable`
-* `PCL`_ support via :ref:`filters.pclblock`, :ref:`readers.pcd`,
-  :ref:`writers.pcd`, :ref:`ground_command`, and :ref:`pcl_command`
-* :ref:`writers.geowave`
-
-Head to :ref:`pipeline` for more information on using PDAL pipelines. Two pipelines
-are provided in ``/home/vagrant`` that are used to load the ``st-helens-small.las``
-file into `pgpointcloud`_.
-
-.. _`Points2Grid`: https://github.com/CRREL/points2grid
-.. _`Oracle Point Cloud`: http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_pc_pkg_ref.htm
-.. _`pgpointcloud`: https://github.com/pramsey/pointcloud
-
-.. _`LASzip`: http://laszip.org
-.. _`VirtualBox`: https://www.virtualbox.org/
-.. _`GDAL`: http://gdal.org
-.. _`MapServer`: http://mapserver.org
-.. _`Mapnik`: http://mapnik.org
-.. _`PCL`: http://www.pointclouds.org
diff --git a/examples/writing-kernel/MyKernel.cpp b/examples/writing-kernel/MyKernel.cpp
index 7a7430f..7d61937 100644
--- a/examples/writing-kernel/MyKernel.cpp
+++ b/examples/writing-kernel/MyKernel.cpp
@@ -2,12 +2,9 @@
 
 #include "MyKernel.hpp"
 
-#include <boost/program_options.hpp>
-
 #include <pdal/Filter.hpp>
 #include <pdal/Kernel.hpp>
 #include <pdal/KernelFactory.hpp>
-#include <pdal/KernelSupport.hpp>
 #include <pdal/Options.hpp>
 #include <pdal/pdal_macros.hpp>
 #include <pdal/StageFactory.hpp>
@@ -16,7 +13,6 @@
 #include <memory>
 #include <string>
 
-namespace po = boost::program_options;
 
 namespace pdal {
 
@@ -27,31 +23,15 @@ namespace pdal {
   };
 
   CREATE_SHARED_PLUGIN(1, 0, MyKernel, Kernel, s_info);
-
   std::string MyKernel::getName() const { return s_info.name; }
 
   MyKernel::MyKernel() : Kernel()
   {}
 
-  void MyKernel::validateSwitches()
-  {
-    if (m_input_file == "")
-      throw pdal::app_usage_error("--input/-i required");
-    if (m_output_file == "")
-      throw pdal::app_usage_error("--output/-o required");
-  }
-
-  void MyKernel::addSwitches()
+  void MyKernel::addSwitches(ProgramArgs& args)
   {
-    po::options_description* options = new po::options_description("file options");
-    options->add_options()
-    ("input,i", po::value<std::string>(&m_input_file)->default_value(""), "input file name")
-    ("output,o", po::value<std::string>(&m_output_file)->default_value(""), "output file name")
-    ;
-
-    addSwitchSet(options);
-    addPositionalSwitch("input", 1);
-    addPositionalSwitch("output", 1);
+      args.add("input,i", "Input filename", m_input_file).setPositional();
+      args.add("output,o", "Output filename", m_output_file).setPositional();
   }
 
   int MyKernel::execute()
diff --git a/examples/writing-kernel/MyKernel.hpp b/examples/writing-kernel/MyKernel.hpp
index 1ba5a7a..48901cd 100644
--- a/examples/writing-kernel/MyKernel.hpp
+++ b/examples/writing-kernel/MyKernel.hpp
@@ -10,21 +10,20 @@
 namespace pdal
 {
 
-  class PDAL_DLL MyKernel : public Kernel
-  {
-  public:
+class PDAL_DLL MyKernel : public Kernel
+{
+public:
     static void * create();
     static int32_t destroy(void *);
     std::string getName() const;
     int execute(); // override
 
-  private:
+private:
     MyKernel();
-    void validateSwitches();
-    void addSwitches();
+    void addSwitches(ProgramArgs& args);
 
     std::string m_input_file;
     std::string m_output_file;
-  };
+};
 
 } // namespace pdal
diff --git a/examples/writing-reader/MyReader.cpp b/examples/writing-reader/MyReader.cpp
index 91a486f..4735b54 100644
--- a/examples/writing-reader/MyReader.cpp
+++ b/examples/writing-reader/MyReader.cpp
@@ -1,6 +1,7 @@
 // MyReader.cpp
 
 #include "MyReader.hpp"
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/examples/writing-reader/pipeline-myreader.json b/examples/writing-reader/pipeline-myreader.json
new file mode 100644
index 0000000..5f11af5
--- /dev/null
+++ b/examples/writing-reader/pipeline-myreader.json
@@ -0,0 +1,10 @@
+{
+  "pipeline":[
+    {
+      "type":"readers.myreader",
+      "filename":"test-reader-input.txt",
+      "z_scale":0.001
+    },
+    "output.txt"
+  ]
+}
diff --git a/examples/writing-reader/pipeline-myreader.xml b/examples/writing-reader/pipeline-myreader.xml
deleted file mode 100644
index 5ac244b..0000000
--- a/examples/writing-reader/pipeline-myreader.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="2.0" encoding="utf-8"?>
-<Pipeline version="1.0">
-  <Writer type="writers.text">
-    <Option name="filename">
-      output.txt
-    </Option>
-    <Reader type="readers.myreader">
-      <Option name="filename">
-        test-reader-input.txt
-      </Option>
-      <Option name="z_scale">
-        .001
-      </Option>
-    </Reader>
-  </Writer>
-</Pipeline>
diff --git a/examples/writing-writer/MyWriter.cpp b/examples/writing-writer/MyWriter.cpp
index a344991..261febd 100644
--- a/examples/writing-writer/MyWriter.cpp
+++ b/examples/writing-writer/MyWriter.cpp
@@ -1,6 +1,7 @@
 // MyWriter.cpp
 
 #include "MyWriter.hpp"
+#include <pdal/pdal_macros.hpp>
 
 #include <boost/program_options.hpp>
 
diff --git a/examples/writing-writer/pipeline-mywriter.json b/examples/writing-writer/pipeline-mywriter.json
new file mode 100644
index 0000000..c7fe7f9
--- /dev/null
+++ b/examples/writing-writer/pipeline-mywriter.json
@@ -0,0 +1,11 @@
+{
+  "pipeline":[
+    "interesting.las",
+    {
+      "type":"writers.mywriter",
+      "filename":"output.txt",
+      "datafield":"Intensity",
+      "precision":0
+    }
+  ]
+}
diff --git a/examples/writing-writer/pipeline-mywriter.xml b/examples/writing-writer/pipeline-mywriter.xml
deleted file mode 100644
index 20d913b..0000000
--- a/examples/writing-writer/pipeline-mywriter.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="2.0" encoding="utf-8"?>
-<Pipeline version="1.0">
-  <Writer type="writers.mywriter">
-    <Option name="filename">
-      output.txt
-    </Option>
-    <Option name="datafield">
-      Intensity
-    </Option>
-    <Option name="precision">
-      0
-    </Option>
-    <Reader type="readers.las">
-      <Option name="filename">
-        interesting.las
-      </Option>
-    </Reader>
-  </Writer>
-</Pipeline>
diff --git a/examples/writing/tutorial.cpp b/examples/writing/tutorial.cpp
index 584b3fe..5a9ea62 100644
--- a/examples/writing/tutorial.cpp
+++ b/examples/writing/tutorial.cpp
@@ -7,37 +7,26 @@
 
 #include <vector>
 
-struct Point
+void fillView(pdal::PointViewPtr view)
 {
-    double x;
-    double y;
-    double z;
-};
-
-std::vector<Point> getMyData()
-{
-    std::vector<Point> output;
-    Point p;
+    struct Point
+    {
+        double x;
+        double y;
+        double z;
+    };
 
     for (int i = 0; i < 1000; ++i)
     {
+        Point p;
+
         p.x = -93.0 + i*0.001;
         p.y = 42.0 + i*0.001;
         p.z = 106.0 + i;
-        output.push_back(p);
-    }
-    return output;
-}
 
-
-void fillView(pdal::PointViewPtr view, std::vector<Point> const& data)
-{
-    for (int i = 0; i < data.size(); ++i)
-    {
-        Point const& pt = data[i];
-        view->setField<double>(pdal::Dimension::Id::X, i, pt.x);
-        view->setField<double>(pdal::Dimension::Id::Y, i, pt.y);
-        view->setField<double>(pdal::Dimension::Id::Z, i, pt.z);
+        view->setField(pdal::Dimension::Id::X, i, p.x);
+        view->setField(pdal::Dimension::Id::Y, i, p.y);
+        view->setField(pdal::Dimension::Id::Z, i, p.z);
     }
 }
 
@@ -54,21 +43,21 @@ int main(int argc, char* argv[])
     table.layout()->registerDim(Dimension::Id::Y);
     table.layout()->registerDim(Dimension::Id::Z);
 
-    {
-        PointViewPtr view(new PointView(table));
+    PointViewPtr view(new PointView(table));
 
-        std::vector<Point> data = getMyData();
-        fillView(view, data);
+    fillView(view);
 
-        BufferReader *reader = new BufferReader();
-        reader->addView(view);
+    BufferReader reader;
+    reader.addView(view);
 
-        StageFactory factory;
-        Stage *writer = factory.createStage("writers.las");
+    StageFactory factory;
 
-        writer->setInput(*reader);
-        writer->setOptions(options);
-        writer->prepare(table);
-        writer->execute(table);
-    }
+    // Set second argument to 'true' to let factory take ownership of
+    // stage and facilitate clean up.
+    Stage *writer = factory.createStage("writers.las");
+
+    writer->setInput(reader);
+    writer->setOptions(options);
+    writer->prepare(table);
+    writer->execute(table);
 }
diff --git a/filters/CMakeLists.txt b/filters/CMakeLists.txt
index 5756f60..eb28e9c 100644
--- a/filters/CMakeLists.txt
+++ b/filters/CMakeLists.txt
@@ -1,3 +1,4 @@
+add_subdirectory(attribute)
 add_subdirectory(chipper)
 add_subdirectory(colorization)
 add_subdirectory(crop)
@@ -12,6 +13,7 @@ add_subdirectory(reprojection)
 add_subdirectory(sort)
 add_subdirectory(splitter)
 add_subdirectory(stats)
+add_subdirectory(streamcallback)
 add_subdirectory(transformation)
 
 set(PDAL_TARGET_OBJECTS ${PDAL_TARGET_OBJECTS} PARENT_SCOPE)
diff --git a/filters/attribute/AttributeFilter.cpp b/filters/attribute/AttributeFilter.cpp
new file mode 100644
index 0000000..1c262cf
--- /dev/null
+++ b/filters/attribute/AttributeFilter.cpp
@@ -0,0 +1,254 @@
+/******************************************************************************
+* Copyright (c) 2014, Howard Butler, howard at hobu.co
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include "AttributeFilter.hpp"
+
+#include <memory>
+#include <vector>
+
+#include <pdal/GDALUtils.hpp>
+#include <pdal/pdal_macros.hpp>
+#include <pdal/Polygon.hpp>
+#include <pdal/QuadIndex.hpp>
+#include <pdal/StageFactory.hpp>
+
+namespace pdal
+{
+
+static PluginInfo const s_info = PluginInfo(
+    "filters.attribute",
+    "Assign values for a dimension using a specified value, \n" \
+        "an OGR-readable data source, or an OGR SQL query.",
+    "http://pdal.io/stages/filters.attribute.html" );
+
+CREATE_STATIC_PLUGIN(1, 0, AttributeFilter, Filter, s_info)
+
+struct OGRDataSourceDeleter
+{
+    template <typename T>
+    void operator()(T* ptr)
+    {
+        if (ptr)
+            ::OGR_DS_Destroy(ptr);
+    }
+};
+
+struct OGRFeatureDeleter
+{
+    template <typename T>
+    void operator()(T* ptr)
+    {
+        if (ptr)
+            ::OGR_F_Destroy(ptr);
+    }
+};
+
+
+void AttributeFilter::initialize()
+{
+    gdal::registerDrivers();
+}
+
+
+Options AttributeFilter::getDefaultOptions()
+{
+    Options options;
+
+    options.add("dimension", "Classification");
+    options.add("datasource", "source");
+
+    return options;
+}
+
+
+void AttributeFilter::processOptions(const Options& options)
+{
+    if (!options.hasOption("dimension"))
+    {
+        std::ostringstream oss;
+        oss << getName() << ": option 'dimension' must be specified.";
+        throw pdal_error(oss.str());
+    }
+    if (options.hasOption("value") && options.hasOption("datasource"))
+    {
+        std::ostringstream oss;
+        oss << getName() << ": options 'value' and 'datasource' mutually "
+            "exclusive.";
+        throw pdal_error(oss.str());
+    }
+    if (!options.hasOption("value") && !options.hasOption("datasource"))
+    {
+        std::ostringstream oss;
+        oss << getName() << ": Either option 'value' or 'datasource' must "
+            "be specified.";
+        throw pdal_error(oss.str());
+    }
+
+    std::string ops[] = { "column", "query", "layer" };
+    for (auto& op : ops)
+    {
+        if (options.hasOption("value") && options.hasOption(op))
+        {
+            std::ostringstream oss;
+            oss << getName() << ": option 'op' invalid with option 'value'.";
+            throw pdal_error(oss.str());
+        }
+    }
+
+    m_dimName = options.getValueOrDefault<std::string>("dimension");
+    m_value = options.getValueOrDefault<double>("value",
+        std::numeric_limits<double>::quiet_NaN());
+    m_datasource = options.getValueOrDefault<std::string>("datasource");
+    m_column = options.getValueOrDefault<std::string>("column");
+    m_query = options.getValueOrDefault<std::string>("query");
+    m_layer = options.getValueOrDefault<std::string>("layer");
+}
+
+
+void AttributeFilter::prepared(PointTableRef table)
+{
+    m_dim = table.layout()->findDim(m_dimName);
+    if (m_dim == Dimension::Id::Unknown)
+    {
+        std::ostringstream oss;
+        oss << getName() << ": Dimension '" << m_dimName << "' not found.";
+        throw pdal_error(oss.str());
+    }
+}
+
+
+void AttributeFilter::ready(PointTableRef table)
+{
+    if (m_value != m_value)
+    {
+        m_ds = OGRDSPtr(OGROpen(m_datasource.c_str(), 0, 0),
+            OGRDataSourceDeleter());
+        if (!m_ds)
+        {
+            std::ostringstream oss;
+            oss << getName() << ": Unable to open data source '" <<
+                    m_datasource << "'";
+            throw pdal_error(oss.str());
+        }
+    }
+}
+
+
+void AttributeFilter::UpdateGEOSBuffer(PointView& view)
+{
+    QuadIndex idx(view);
+
+    if (m_layer.size())
+        m_lyr = OGR_DS_GetLayerByName(m_ds.get(), m_layer.c_str());
+    else if (m_query.size())
+        m_lyr = OGR_DS_ExecuteSQL(m_ds.get(), m_query.c_str(), 0, 0);
+    else
+        m_lyr = OGR_DS_GetLayer(m_ds.get(), 0);
+
+    if (!m_lyr)
+    {
+        std::ostringstream oss;
+        oss << getName() << ": Unable to select layer '" << m_layer << "'";
+        throw pdal_error(oss.str());
+    }
+
+    OGRFeaturePtr feature = OGRFeaturePtr(OGR_L_GetNextFeature(m_lyr),
+        OGRFeatureDeleter());
+
+    int field_index(1); // default to first column if nothing was set
+    if (m_column.size())
+    {
+        field_index = OGR_F_GetFieldIndex(feature.get(), m_column.c_str());
+        if (field_index == -1)
+        {
+            std::ostringstream oss;
+            oss << getName() << ": No column name '" << m_column <<
+                "' was found.";
+            throw pdal_error(oss.str());
+        }
+    }
+
+    while (feature)
+    {
+        OGRGeometryH geom = OGR_F_GetGeometryRef(feature.get());
+        OGRwkbGeometryType t = OGR_G_GetGeometryType(geom);
+        int32_t fieldVal = OGR_F_GetFieldAsInteger(feature.get(), field_index);
+
+        if (!(t == wkbPolygon ||
+            t == wkbMultiPolygon ||
+            t == wkbPolygon25D ||
+            t == wkbMultiPolygon25D))
+        {
+            std::ostringstream oss;
+            oss << getName() << ": Geometry is not Polygon or MultiPolygon!";
+            throw pdal::pdal_error(oss.str());
+        }
+
+        pdal::Polygon p(geom, view.spatialReference(),
+            geos::ErrorHandler::get());
+
+        // Compute a total bounds for the geometry. Query the QuadTree to
+        // find out the points that are inside the bbox. Then test each
+        // point in the bbox against the prepared geometry.
+        BOX3D box = p.bounds();
+        std::vector<PointId> ids = idx.getPoints(box);
+
+
+        for (const auto& i : ids)
+        {
+            PointRef ref(view, i);
+            if (p.covers(ref))
+                view.setField(m_dim, i, fieldVal);
+        }
+        feature = OGRFeaturePtr(OGR_L_GetNextFeature(m_lyr),
+            OGRFeatureDeleter());
+    }
+}
+
+
+void AttributeFilter::filter(PointView& view)
+{
+    if (m_value == m_value)
+        for (PointId i = 0; i < view.size(); ++i)
+            view.setField(m_dim, i, m_value);
+    else
+        UpdateGEOSBuffer(view);
+}
+
+
+void AttributeFilter::done(PointTableRef /*table*/)
+{
+}
+
+} // namespace pdal
diff --git a/filters/attribute/AttributeFilter.hpp b/filters/attribute/AttributeFilter.hpp
new file mode 100644
index 0000000..b33ed26
--- /dev/null
+++ b/filters/attribute/AttributeFilter.hpp
@@ -0,0 +1,103 @@
+/******************************************************************************
+* Copyright (c) 2014, Howard Butler <hobu.inc at gmail.com>
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#pragma once
+
+#include <pdal/plugin.hpp>
+#include <pdal/Filter.hpp>
+
+#include <map>
+#include <memory>
+#include <string>
+
+extern "C" int32_t AttributeFilter_ExitFunc();
+extern "C" PF_ExitFunc AttributeFilter_InitPlugin();
+
+typedef struct GEOSContextHandle_HS *GEOSContextHandle_t;
+
+typedef void *OGRLayerH;
+
+
+namespace pdal
+{
+
+namespace gdal
+{
+    class ErrorHandler;
+}
+
+typedef std::shared_ptr<void> OGRDSPtr;
+typedef std::shared_ptr<void> OGRFeaturePtr;
+typedef std::shared_ptr<void> OGRGeometryPtr;
+
+class PDAL_DLL AttributeFilter : public Filter
+{
+public:
+    AttributeFilter() : Filter(), m_ds(0), m_lyr(0)
+    {}
+
+    static void * create();
+    static int32_t destroy(void *);
+    std::string getName() const { return "filters.attribute"; }
+
+    Options getDefaultOptions();
+
+private:
+    virtual void initialize();
+    virtual void processOptions(const Options&);
+    virtual void prepared(PointTableRef table);
+    virtual void ready(PointTableRef table);
+    virtual void filter(PointView& view);
+    virtual void done(PointTableRef table);
+
+    AttributeFilter& operator=(const AttributeFilter&); // not implemented
+    AttributeFilter(const AttributeFilter&); // not implemented
+
+    typedef std::shared_ptr<void> OGRDSPtr;
+
+    OGRDSPtr m_ds;
+    OGRLayerH m_lyr;
+    std::string m_dimName;
+    double m_value;
+    std::string m_datasource;
+    std::string m_column;
+    std::string m_query;
+    std::string m_layer;
+    Dimension::Id::Enum m_dim;
+
+    void UpdateGEOSBuffer(PointView& view);
+
+};
+
+} // namespace pdal
diff --git a/filters/attribute/CMakeLists.txt b/filters/attribute/CMakeLists.txt
new file mode 100644
index 0000000..788761a
--- /dev/null
+++ b/filters/attribute/CMakeLists.txt
@@ -0,0 +1,9 @@
+#
+# Attribute filter CMake configuration
+#
+
+set(srcs AttributeFilter.cpp)
+set(incs AttributeFilter.hpp)
+
+PDAL_ADD_DRIVER(filter attribute "${srcs}" "${incs}" objects)
+set(PDAL_TARGET_OBJECTS ${PDAL_TARGET_OBJECTS} ${objects} PARENT_SCOPE)
diff --git a/filters/chipper/ChipperFilter.cpp b/filters/chipper/ChipperFilter.cpp
index debadb0..934cb51 100644
--- a/filters/chipper/ChipperFilter.cpp
+++ b/filters/chipper/ChipperFilter.cpp
@@ -66,6 +66,8 @@ from the narrow array so that the approriate extrema of the block can
 be stored.
 **/
 
+#include <pdal/pdal_macros.hpp>
+
 namespace pdal
 {
 
diff --git a/filters/chipper/ChipperFilter.hpp b/filters/chipper/ChipperFilter.hpp
index 363b4b9..38aefbf 100644
--- a/filters/chipper/ChipperFilter.hpp
+++ b/filters/chipper/ChipperFilter.hpp
@@ -41,9 +41,9 @@
 
 #pragma once
 
+#include <pdal/plugin.hpp>
 #include <pdal/Filter.hpp>
 #include <pdal/PointView.hpp>
-
 #include <vector>
 
 extern "C" int32_t ChipperFilter_ExitFunc();
diff --git a/filters/colorization/ColorizationFilter.cpp b/filters/colorization/ColorizationFilter.cpp
index 57747f8..ccfab76 100644
--- a/filters/colorization/ColorizationFilter.cpp
+++ b/filters/colorization/ColorizationFilter.cpp
@@ -34,8 +34,8 @@
 
 #include "ColorizationFilter.hpp"
 
-#include <pdal/GlobalEnvironment.hpp>
 #include <pdal/PointView.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <gdal.h>
 #include <ogr_spatialref.h>
@@ -57,7 +57,7 @@ std::string ColorizationFilter::getName() const { return s_info.name; }
 
 void ColorizationFilter::initialize()
 {
-    GlobalEnvironment::get().initializeGDAL(log());
+    gdal::registerDrivers();
 }
 
 
@@ -90,9 +90,9 @@ ColorizationFilter::BandInfo parseDim(const std::string& dim,
         count = Utils::extract(dim, pos, (int(*)(int))std::isspace);
         pos += count;
 
-        count = Utils::extract(dim, pos, (int(*)(int))std::isalpha);
+        count = Dimension::extractName(dim, pos);
         if (count == 0)
-           throw std::string("No dimension name.");
+           throw std::string("No dimension name provided.");
         name = dim.substr(pos, count);
         pos += count;
 
@@ -126,8 +126,13 @@ ColorizationFilter::BandInfo parseDim(const std::string& dim,
         pos += count;
 
         if (pos != dim.size())
-            throw std::string("Invalid characters following dimension "
-                "specification.");
+        {
+            std::ostringstream oss;
+
+            oss << "Invalid character '" << dim[pos] <<
+                "' following dimension specification.";
+            throw pdal_error(oss.str());
+        }
     }
     catch (std::string s)
     {
@@ -177,31 +182,55 @@ void ColorizationFilter::addDimensions(PointLayoutPtr layout)
 
 void ColorizationFilter::ready(PointTableRef table)
 {
-    m_raster =
-        std::unique_ptr<gdal::Raster>(new gdal::Raster(m_rasterFilename));
-    m_raster->open();
+    using namespace gdal;
+
+    m_raster.reset(new gdal::Raster(m_rasterFilename));
+
+    GDALError::Enum error = m_raster->open();
+    if (error != GDALError::None)
+    {
+        if (error == GDALError::NoTransform ||
+            error == GDALError::NotInvertible)
+        {
+            log()->get(LogLevel::Warning) << getName() << ": " <<
+                m_raster->errorMsg() << std::endl;
+        }
+        else
+        {
+            throw pdal_error(getName() + ": " + m_raster->errorMsg());
+        }
+    }
 }
 
 
-void ColorizationFilter::filter(PointView& view)
+bool ColorizationFilter::processOne(PointRef& point)
 {
-    std::vector<double> data;
+    static std::vector<double> data;
 
-    for (PointId idx = 0; idx < view.size(); ++idx)
-    {
-        double x = view.getFieldAs<double>(Dimension::Id::X, idx);
-        double y = view.getFieldAs<double>(Dimension::Id::Y, idx);
-
-        if (!m_raster->read(x, y, data))
-            continue;
+    double x = point.getFieldAs<double>(Dimension::Id::X);
+    double y = point.getFieldAs<double>(Dimension::Id::Y);
 
+    if (m_raster->read(x, y, data) == gdal::GDALError::None)
+    {
         int i(0);
         for (auto bi = m_bands.begin(); bi != m_bands.end(); ++bi)
         {
             BandInfo& b = *bi;
-            view.setField(b.m_dim, idx, data[i] * b.m_scale);
+            point.setField(b.m_dim, data[i] * b.m_scale);
             ++i;
         }
+        return true;
+    }
+    return false;
+}
+
+void ColorizationFilter::filter(PointView& view)
+{
+    PointRef point = view.point(0);
+    for (PointId idx = 0; idx < view.size(); ++idx)
+    {
+        point.setPointId(idx);
+        processOne(point);
     }
 }
 
diff --git a/filters/colorization/ColorizationFilter.hpp b/filters/colorization/ColorizationFilter.hpp
index ea4e686..5ecaea8 100644
--- a/filters/colorization/ColorizationFilter.hpp
+++ b/filters/colorization/ColorizationFilter.hpp
@@ -34,10 +34,9 @@
 
 #pragma once
 
+#include <pdal/plugin.hpp>
 #include <pdal/Filter.hpp>
 
-#include <boost/array.hpp>
-
 #include <gdal.h>
 #include <ogr_spatialref.h>
 #include <pdal/GDALUtils.hpp>
@@ -87,6 +86,7 @@ private:
     virtual void processOptions(const Options&);
     virtual void addDimensions(PointLayoutPtr layout);
     virtual void ready(PointTableRef table);
+    virtual bool processOne(PointRef& point);
     virtual void filter(PointView& view);
 
     std::string m_rasterFilename;
diff --git a/filters/crop/CropFilter.cpp b/filters/crop/CropFilter.cpp
index 0e1d18f..ffc40a9 100644
--- a/filters/crop/CropFilter.cpp
+++ b/filters/crop/CropFilter.cpp
@@ -38,7 +38,8 @@
 
 #include <pdal/PointView.hpp>
 #include <pdal/StageFactory.hpp>
-#include <pdal/GDALUtils.hpp>
+#include <pdal/Polygon.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <sstream>
 #include <cstdarg>
@@ -55,42 +56,9 @@ CREATE_STATIC_PLUGIN(1, 0, CropFilter, Filter, s_info)
 
 std::string CropFilter::getName() const { return s_info.name; }
 
-#ifdef PDAL_HAVE_GEOS
-namespace geos
-{
-
-static void _GEOSErrorHandler(const char *fmt, ...)
-{
-    va_list args;
-
-    va_start(args, fmt);
-    char buf[1024];
-
-    vsnprintf(buf, sizeof(buf), fmt, args);
-
-    va_end(args);
-}
-
-static void _GEOSWarningHandler(const char *fmt, ...)
-{
-    va_list args;
-
-    char buf[1024];
-    vsnprintf(buf, sizeof(buf), fmt, args);
-    std::cout << "GEOS warning: " << buf << std::endl;
-
-    va_end(args);
-}
-
-} // geos
-#endif
-
 CropFilter::CropFilter() : pdal::Filter()
 {
     m_cropOutside = false;
-#ifdef PDAL_HAVE_GEOS
-    m_geosEnvironment = 0;
-#endif
 }
 
 
@@ -98,11 +66,12 @@ void CropFilter::processOptions(const Options& options)
 {
     m_cropOutside = options.getValueOrDefault<bool>("outside", false);
     m_assignedSrs = options.getValueOrDefault<SpatialReference>("a_srs");
+
     try
     {
         m_bounds = options.getValues<BOX2D>("bounds");
     }
-    catch (boost::bad_lexical_cast)
+    catch (Option::cant_convert)
     {
         try
         {
@@ -110,130 +79,80 @@ void CropFilter::processOptions(const Options& options)
             for (auto& i: b3d)
                 m_bounds.push_back(i.to2d());
         }
-        catch (boost::bad_lexical_cast)
+        catch (Option::cant_convert)
         {
             std::ostringstream oss;
-            oss << "Invalid bounds for " << getName() << ".  "
+            oss << getName() << ": Invalid bounds provided as option.  "
                 "Format: '([xmin,xmax],[ymin,ymax])'.";
             throw pdal_error(oss.str());
         }
     }
 
-    m_polys = options.getValues<std::string>("polygon");
-#ifdef PDAL_HAVE_GEOS
+    try
+    {
+        m_polys = options.getValues<Polygon>("polygon");
+    }
+    catch (Option::cant_convert)
+    {
+        std::ostringstream oss;
+        oss << getName() << ": Invalid polygon specification as option.  "
+            "Must be valid GeoJSON/WTK";
+        throw pdal_error(oss.str());
+    }
     if (m_polys.size())
     {
         m_geoms.clear();
-        if (!m_geosEnvironment)
-        {
-            m_geosEnvironment = initGEOS_r(pdal::geos::_GEOSWarningHandler,
-                pdal::geos::_GEOSErrorHandler);
-        }
-        for (std::string poly : m_polys)
+        for (Polygon& poly : m_polys)
         {
             GeomPkg g;
 
             // Throws if invalid.
-            g.m_geom = validatePolygon(poly);
+            poly.valid();
+            if (!m_assignedSrs.empty())
+                poly.setSpatialReference(m_assignedSrs);
+            g.m_geom = poly;
             m_geoms.push_back(g);
         }
     }
-#else
-    if (m_polys.size())
-    {
-        std::ostringstream oss;
-
-        oss << "Can't specify polygons for " << getName() <<
-            " without PDAL built with GEOS.";
-        throw pdal_error(oss.str());
-    }
-#endif
 }
 
 
-#ifdef PDAL_HAVE_GEOS
-GEOSGeometry *CropFilter::validatePolygon(const std::string& poly)
+Options CropFilter::getDefaultOptions()
 {
-    GEOSGeometry *geom = GEOSGeomFromWKT_r(m_geosEnvironment, poly.c_str());
-    if (!geom)
-    {
-        std::ostringstream oss;
-        oss << "Invalid polygon specification for " << getName() <<
-            ": " << poly << ".";
-        throw pdal_error(oss.str());
-    }
-
-    int gtype = GEOSGeomTypeId_r(m_geosEnvironment, geom);
-    if (gtype != GEOS_POLYGON && gtype != GEOS_MULTIPOLYGON)
-    {
-        std::ostringstream oss;
-        oss << "Invalid polygon type for " << getName() << ": " <<
-            poly << ".  Must be POLYGON or MULTIPOLYGON.";
-        throw pdal_error(oss.str());
-    }
-
-    if (!GEOSisValid_r(m_geosEnvironment, geom))
-    {
-        char *reason = GEOSisValidReason_r(m_geosEnvironment, geom);
-        std::ostringstream oss;
-        oss << "WKT representation of (multi)polygon '" << poly <<
-            "' invalid: " << reason << ".";
-        GEOSFree_r(m_geosEnvironment, reason);
-        throw pdal_error(oss.str());
-    }
-    return geom;
-}
-
+    Options options;
+    options.add("bounds", BOX2D(), "bounds to crop to");
+    options.add("a_srs", "", "Assign coordinate system to polygon");
+    options.add("polygon", std::string(""), "WKT or GeoJSON Polygon/MultiPolygon string to "
+        "use to filter points");
+    options.add("inside", true, "Keep points that are inside or outside "
+        "the given polygon");
 
-void CropFilter::preparePolygon(GeomPkg& g, const SpatialReference& to)
-{
-    char* out_wkt = GEOSGeomToWKT_r(m_geosEnvironment, g.m_geom);
-    std::string poly(out_wkt);
-    poly = transformWkt(poly, m_assignedSrs, to);
-    log()->get(LogLevel::Debug2) << "Ingested WKT for filters.crop: " <<
-        poly << std::endl;
-    GEOSFree_r(m_geosEnvironment, out_wkt);
-
-    // Store transformed geometry.
-    g.m_geomXform = GEOSGeomFromWKT_r(m_geosEnvironment, poly.c_str());
-    g.m_prepGeom = GEOSPrepare_r(m_geosEnvironment, g.m_geom);
-    if (!g.m_prepGeom)
-        throw pdal_error("unable to prepare geometry for index-accelerated "
-            "intersection");
+    return options;
 }
 
 
-void CropFilter::freePolygon(GeomPkg& g, bool freeBase)
+void CropFilter::ready(PointTableRef table)
 {
-    if (g.m_geom && freeBase)
-    {
-        GEOSGeom_destroy_r(m_geosEnvironment, g.m_geom);
-        g.m_geom = NULL;
-    }
-    if (g.m_prepGeom)
-    {
-        GEOSPreparedGeom_destroy_r(m_geosEnvironment, g.m_prepGeom);
-        g.m_prepGeom = NULL;
-    }
-    if (g.m_geomXform)
+    for (auto& geom : m_geoms)
     {
-        GEOSGeom_destroy_r(m_geosEnvironment, g.m_geomXform);
-        g.m_geomXform = NULL;
+        // If we already overrode the SRS, use that instead
+        if (m_assignedSrs.empty())
+            geom.m_geom.setSpatialReference(table.anySpatialReference());
     }
 }
-#endif
 
 
-Options CropFilter::getDefaultOptions()
+bool CropFilter::processOne(PointRef& point)
 {
-    Options options;
-    options.add("bounds", BOX2D(), "bounds to crop to");
-    options.add("polygon", std::string(""), "WKT POLYGON() string to "
-        "use to filter points");
-    options.add("inside", true, "Keep points that are inside or outside "
-        "the given polygon");
+    for (auto& geom : m_geoms)
+        if (!crop(point, geom))
+            return false;
 
-    return options;
+    for (auto& box : m_bounds)
+        if (!crop(point, box))
+            return false;
+
+    return true;
 }
 
 
@@ -249,15 +168,13 @@ PointViewSet CropFilter::run(PointViewPtr view)
         return viewSet;
     }
 
-#ifdef PDAL_HAVE_GEOS
     for (auto& geom : m_geoms)
     {
         // If this is the first time through or the SRS has changed,
         // prepare the crop polygon.
-        if (!geom.m_prepGeom || srs != m_lastSrs)
+        if (srs != m_lastSrs)
         {
-            freePolygon(geom, false);
-            preparePolygon(geom, srs);
+            geom.m_geom.transform(srs);
         }
 
         PointViewPtr outView = view->makeNew();
@@ -265,7 +182,7 @@ PointViewSet CropFilter::run(PointViewPtr view)
         viewSet.insert(outView);
     }
     m_lastSrs = srs;
-#endif
+
     for (auto& box : m_bounds)
     {
         PointViewPtr outView = view->makeNew();
@@ -276,81 +193,47 @@ PointViewSet CropFilter::run(PointViewPtr view)
 }
 
 
+bool CropFilter::crop(PointRef& point, const BOX2D& box)
+{
+    double x = point.getFieldAs<double>(Dimension::Id::X);
+    double y = point.getFieldAs<double>(Dimension::Id::Y);
+
+    // Return true if we're keeping a point.
+    return (m_cropOutside != box.contains(x, y));
+}
+
+
 void CropFilter::crop(const BOX2D& box, PointView& input, PointView& output)
 {
+    PointRef point = input.point(0);
     for (PointId idx = 0; idx < input.size(); ++idx)
     {
-        double x = input.getFieldAs<double>(Dimension::Id::X, idx);
-        double y = input.getFieldAs<double>(Dimension::Id::Y, idx);
-
-        bool contained = box.contains(x, y);
-        if (m_cropOutside != box.contains(x, y))
+        point.setPointId(idx);
+        if (crop(point, box))
             output.appendPoint(input, idx);
     }
 }
 
-
-#ifdef PDAL_HAVE_GEOS
-GEOSGeometry *CropFilter::createPoint(double x, double y, double z)
+bool CropFilter::crop(PointRef& point, const GeomPkg& g)
 {
-    // precise filtering based on the geometry
-    GEOSCoordSequence* coords = GEOSCoordSeq_create_r(m_geosEnvironment, 1, 3);
-    if (!coords)
-        throw pdal_error("Unable to allocate coordinate sequence");
-
-    if (!GEOSCoordSeq_setX_r(m_geosEnvironment, coords, 0, x))
-        throw pdal_error("unable to set x for coordinate sequence");
-    if (!GEOSCoordSeq_setY_r(m_geosEnvironment, coords, 0, y))
-        throw pdal_error("unable to set y for coordinate sequence");
-    if (!GEOSCoordSeq_setZ_r(m_geosEnvironment, coords, 0, z))
-        throw pdal_error("unable to set z for coordinate sequence");
-    GEOSGeometry* p = GEOSGeom_createPoint_r(m_geosEnvironment, coords);
-    if (!p)
-        throw pdal_error("unable to allocate candidate test point");
-    return p;
+    bool covers = g.m_geom.covers(point);
+    bool keep = (m_cropOutside != covers);
+    return keep;
 }
 
-
 void CropFilter::crop(const GeomPkg& g, PointView& input, PointView& output)
 {
-    bool logOutput = (log()->getLevel() > LogLevel::Debug4);
-    if (logOutput)
-        log()->floatPrecision(8);
-
+    PointRef point = input.point(0);
     for (PointId idx = 0; idx < input.size(); ++idx)
     {
-        double x = input.getFieldAs<double>(Dimension::Id::X, idx);
-        double y = input.getFieldAs<double>(Dimension::Id::Y, idx);
-        double z = input.getFieldAs<double>(Dimension::Id::Z, idx);
-
-        if (logOutput)
-        {
-            log()->floatPrecision(10);
-            log()->get(LogLevel::Debug5) << "input: " << x << " y: " << y <<
-                " z: " << z << std::endl;
-        }
-
-        GEOSGeometry *p = createPoint(x, y, z);
-        bool covers = (bool)(GEOSPreparedCovers_r(m_geosEnvironment,
-            g.m_prepGeom, p));
-        if (m_cropOutside != covers)
+        point.setPointId(idx);
+        bool covers = g.m_geom.covers(point);
+        bool keep = (m_cropOutside != covers);
+        if (keep)
             output.appendPoint(input, idx);
-        GEOSGeom_destroy_r(m_geosEnvironment, p);
     }
 }
-#endif
 
 
-void CropFilter::done(PointTableRef /*table*/)
-{
-#ifdef PDAL_HAVE_GEOS
-    for (auto& g : m_geoms)
-        freePolygon(g, true);
-    m_geoms.clear();
-    if (m_geosEnvironment)
-        finishGEOS_r(m_geosEnvironment);
-    m_geosEnvironment = 0;
-#endif
-}
 
 } // namespace pdal
diff --git a/filters/crop/CropFilter.hpp b/filters/crop/CropFilter.hpp
index b6f6644..dcd9e7a 100644
--- a/filters/crop/CropFilter.hpp
+++ b/filters/crop/CropFilter.hpp
@@ -35,10 +35,8 @@
 #pragma once
 
 #include <pdal/Filter.hpp>
-
-#ifdef PDAL_HAVE_GEOS
-#include <geos_c.h>
-#endif
+#include <pdal/Polygon.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t CropFilter_ExitFunc();
 extern "C" PF_ExitFunc CropFilter_InitPlugin();
@@ -62,41 +60,29 @@ public:
 private:
     std::vector<BOX2D> m_bounds;
     bool m_cropOutside;
-    StringList m_polys;
+    std::vector<Polygon> m_polys;
     SpatialReference m_assignedSrs;
     SpatialReference m_lastSrs;
 
-#ifndef PDAL_HAVE_GEOS
-    typedef void *GEOSContextHandle_t;
-    typedef void GEOSGeometry;
-    typedef void GEOSPreparedGeometry;
-#endif
-
-	GEOSContextHandle_t m_geosEnvironment;
     struct GeomPkg
     {
-        GeomPkg() : m_geom(NULL), m_geomXform(NULL), m_prepGeom(NULL)
+        GeomPkg()
         {}
 
-        GEOSGeometry *m_geom;
-        GEOSGeometry *m_geomXform;
-        const GEOSPreparedGeometry *m_prepGeom;
+        Polygon m_geom;
+        Polygon m_geomXform;
     };
 
     std::vector<GeomPkg> m_geoms;
 
     virtual void processOptions(const Options& options);
+    virtual void ready(PointTableRef table);
+    virtual bool processOne(PointRef& point);
     virtual PointViewSet run(PointViewPtr view);
-    virtual void done(PointTableRef table);
+    bool crop(PointRef& point, const BOX2D& box);
     void crop(const BOX2D& box, PointView& input, PointView& output);
+    bool crop(PointRef& point, const GeomPkg& g);
     void crop(const GeomPkg& g, PointView& input, PointView& output);
-#ifdef PDAL_HAVE_GEOS
-    GEOSGeometry *validatePolygon(const std::string& poly);
-    void preparePolygon(GeomPkg& g, const SpatialReference& to);
-    void freePolygon(GeomPkg& g, bool freeBase);
-    BOX2D computeBounds(GEOSGeometry const *geometry);
-    GEOSGeometry *createPoint(double x, double y, double z);
-#endif
 
     CropFilter& operator=(const CropFilter&); // not implemented
     CropFilter(const CropFilter&); // not implemented
diff --git a/filters/decimation/DecimationFilter.cpp b/filters/decimation/DecimationFilter.cpp
index fd8e51d..96b36b2 100644
--- a/filters/decimation/DecimationFilter.cpp
+++ b/filters/decimation/DecimationFilter.cpp
@@ -35,6 +35,7 @@
 #include "DecimationFilter.hpp"
 
 #include <pdal/PointView.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -52,7 +53,8 @@ void DecimationFilter::processOptions(const Options& options)
 {
     m_step = options.getValueOrDefault<uint32_t>("step", 1);
     m_offset = options.getValueOrDefault<uint32_t>("offset", 0);
-    m_limit = options.getValueOrDefault<point_count_t>("limit", 0);
+    m_limit = options.getValueOrDefault<point_count_t>("limit",
+        std::numeric_limits<point_count_t>::max());
 }
 
 
@@ -66,9 +68,21 @@ PointViewSet DecimationFilter::run(PointViewPtr inView)
 }
 
 
+bool DecimationFilter::processOne(PointRef& point)
+{
+    bool keep = true;
+    if (m_index < m_offset || m_index >= m_limit)
+        keep = false;
+    else if ((m_index - m_offset) % m_step != 0)
+        keep = false;
+    m_index++;
+    return keep;
+}
+
+
 void DecimationFilter::decimate(PointView& input, PointView& output)
 {
-    PointId last_idx = (m_limit > 0) ? m_limit : input.size();
+    PointId last_idx = std::min(m_limit, input.size());
     for (PointId idx = m_offset; idx < last_idx; idx += m_step)
         output.appendPoint(input, idx);
 }
diff --git a/filters/decimation/DecimationFilter.hpp b/filters/decimation/DecimationFilter.hpp
index b96c819..4ca13ab 100644
--- a/filters/decimation/DecimationFilter.hpp
+++ b/filters/decimation/DecimationFilter.hpp
@@ -35,6 +35,7 @@
 #pragma once
 
 #include <pdal/Filter.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t DecimationFilter_ExitFunc();
 extern "C" PF_ExitFunc DecimationFilter_InitPlugin();
@@ -57,8 +58,12 @@ private:
     uint32_t m_step;
     uint32_t m_offset;
     point_count_t m_limit;
+    PointId m_index;
 
     virtual void processOptions(const Options& options);
+    void ready(PointTableRef table)
+        { m_index = 0; }
+    bool processOne(PointRef& point);
     PointViewSet run(PointViewPtr view);
     void decimate(PointView& input, PointView& output);
 
diff --git a/filters/divider/DividerFilter.cpp b/filters/divider/DividerFilter.cpp
index 56d6d1d..3fe18d2 100644
--- a/filters/divider/DividerFilter.cpp
+++ b/filters/divider/DividerFilter.cpp
@@ -32,6 +32,7 @@
  ****************************************************************************/
 
 #include "DividerFilter.hpp"
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/filters/divider/DividerFilter.hpp b/filters/divider/DividerFilter.hpp
index fad46b9..2ad0546 100644
--- a/filters/divider/DividerFilter.hpp
+++ b/filters/divider/DividerFilter.hpp
@@ -34,9 +34,10 @@
 #pragma once
 
 #include <pdal/Filter.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t DividerFilter_ExitFunc();
-extern "C" PF_ExitFunc DividefFilter_InitPlugin();
+extern "C" PF_ExitFunc DividerFilter_InitPlugin();
 
 namespace pdal
 {
diff --git a/filters/ferry/FerryFilter.cpp b/filters/ferry/FerryFilter.cpp
index 8811ee3..60caed2 100644
--- a/filters/ferry/FerryFilter.cpp
+++ b/filters/ferry/FerryFilter.cpp
@@ -35,6 +35,7 @@
 #include "FerryFilter.hpp"
 
 #include <pdal/pdal_export.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -122,15 +123,24 @@ void FerryFilter::ready(PointTableRef table)
 }
 
 
+bool FerryFilter::processOne(PointRef& point)
+{
+    for (const auto& dim_par : m_dimensions_map)
+    {
+        double v = point.getFieldAs<double>(dim_par.first);
+        point.setField(dim_par.second, v);
+    }
+    return true;
+}
+
+
 void FerryFilter::filter(PointView& view)
 {
+    PointRef point(view, 0);
     for (PointId id = 0; id < view.size(); ++id)
     {
-        for (const auto& dim_par : m_dimensions_map)
-        {
-            double v = view.getFieldAs<double>(dim_par.first, id);
-            view.setField(dim_par.second, id, v);
-        }
+        point.setPointId(id);
+        processOne(point);
     }
 }
 
diff --git a/filters/ferry/FerryFilter.hpp b/filters/ferry/FerryFilter.hpp
index b733b91..a417c48 100644
--- a/filters/ferry/FerryFilter.hpp
+++ b/filters/ferry/FerryFilter.hpp
@@ -35,6 +35,7 @@
 #pragma once
 
 #include <pdal/Filter.hpp>
+#include <pdal/plugin.hpp>
 
 #include <map>
 #include <string>
@@ -62,6 +63,7 @@ private:
     virtual void addDimensions(PointLayoutPtr layout);
     virtual void prepared(PointTableRef table);
     virtual void ready(PointTableRef table);
+    virtual bool processOne(PointRef& point);
     virtual void filter(PointView& view);
 
     FerryFilter& operator=(const FerryFilter&); // not implemented
diff --git a/filters/merge/MergeFilter.cpp b/filters/merge/MergeFilter.cpp
index 41251eb..5367d6d 100644
--- a/filters/merge/MergeFilter.cpp
+++ b/filters/merge/MergeFilter.cpp
@@ -33,6 +33,7 @@
  ****************************************************************************/
 
 #include "MergeFilter.hpp"
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/filters/merge/MergeFilter.hpp b/filters/merge/MergeFilter.hpp
index d1311be..a73b2c2 100644
--- a/filters/merge/MergeFilter.hpp
+++ b/filters/merge/MergeFilter.hpp
@@ -35,6 +35,7 @@
 #pragma once
 
 #include <pdal/Filter.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t MergeFilter_ExitFunc();
 extern "C" PF_ExitFunc MergeFilter_InitPlugin();
@@ -56,6 +57,8 @@ private:
     PointViewPtr m_view;
 
     virtual void ready(PointTableRef table);
+    virtual bool processOne(PointRef& point)
+        { return true; }
     virtual PointViewSet run(PointViewPtr in);
 
     MergeFilter& operator=(const MergeFilter&); // not implemented
diff --git a/filters/mortonorder/MortonOrderFilter.cpp b/filters/mortonorder/MortonOrderFilter.cpp
index 0f72fa6..e687da5 100644
--- a/filters/mortonorder/MortonOrderFilter.cpp
+++ b/filters/mortonorder/MortonOrderFilter.cpp
@@ -33,7 +33,9 @@
  ****************************************************************************/
 
 #include "MortonOrderFilter.hpp"
+#include <pdal/pdal_macros.hpp>
 
+#include <climits>
 #include <iostream>
 #include <limits>
 #include <map>
diff --git a/filters/mortonorder/MortonOrderFilter.hpp b/filters/mortonorder/MortonOrderFilter.hpp
index e8e192a..4192fff 100644
--- a/filters/mortonorder/MortonOrderFilter.hpp
+++ b/filters/mortonorder/MortonOrderFilter.hpp
@@ -35,6 +35,7 @@
 #pragma once
 
 #include <pdal/Filter.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t MortonOrderFilter_ExitFunc();
 extern "C" PF_ExitFunc MortonOrderFilter_InitPlugin();
diff --git a/filters/randomize/RandomizeFilter.cpp b/filters/randomize/RandomizeFilter.cpp
index b310355..08d0801 100644
--- a/filters/randomize/RandomizeFilter.cpp
+++ b/filters/randomize/RandomizeFilter.cpp
@@ -32,6 +32,7 @@
  ****************************************************************************/
 
 #include "RandomizeFilter.hpp"
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/filters/randomize/RandomizeFilter.hpp b/filters/randomize/RandomizeFilter.hpp
index f632237..fdef60f 100644
--- a/filters/randomize/RandomizeFilter.hpp
+++ b/filters/randomize/RandomizeFilter.hpp
@@ -36,6 +36,7 @@
 
 #include <pdal/Filter.hpp>
 #include <pdal/PointViewIter.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t RandomizeFilter_ExitFunc();
 extern "C" PF_ExitFunc RandomizeFilter_InitPlugin();
diff --git a/filters/range/RangeFilter.cpp b/filters/range/RangeFilter.cpp
index 74e10be..34e0989 100644
--- a/filters/range/RangeFilter.cpp
+++ b/filters/range/RangeFilter.cpp
@@ -35,6 +35,7 @@
 #include "RangeFilter.hpp"
 
 #include <pdal/util/Utils.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <cctype>
 #include <limits>
@@ -60,7 +61,7 @@ namespace
 {
 
 RangeFilter::Range parseRange(const std::string& r)
-{ 
+{
     std::string::size_type pos, count;
     bool ilb = true;
     bool iub = true;
@@ -180,6 +181,7 @@ void RangeFilter::prepared(PointTableRef table)
     std::sort(m_range_list.begin(), m_range_list.end());
 }
 
+
 // Determine if a point passes a single range.
 bool RangeFilter::dimensionPasses(double v, const Range& r) const
 {
@@ -196,7 +198,7 @@ bool RangeFilter::dimensionPasses(double v, const Range& r) const
 // as ORs between ranges of the same dimension and ANDs between ranges
 // of different dimensions.  This is simple logic, but is probably the most
 // common case.
-bool RangeFilter::pointPasses(PointView *view, PointId idx) const
+bool RangeFilter::processOne(PointRef& point)
 {
     Dimension::Id::Enum lastId = m_range_list.front().m_id;
     bool passes = false;
@@ -216,8 +218,7 @@ bool RangeFilter::pointPasses(PointView *view, PointId idx) const
         // a new dimension.
         else if (passes)
             continue;
-        double v = view->getFieldAs<double>(r.m_id, idx);
-        passes = dimensionPasses(v, r);
+        passes = dimensionPasses(point.getFieldAs<double>(r.m_id), r);
     }
     return passes;
 }
@@ -232,11 +233,15 @@ PointViewSet RangeFilter::run(PointViewPtr inView)
     PointViewPtr outView = inView->makeNew();
 
     for (PointId i = 0; i < inView->size(); ++i)
-        if (pointPasses(inView.get(), i))
+    {
+        PointRef point = inView->point(i);
+        if (processOne(point))
             outView->appendPoint(*inView, i);
+    }
 
     viewSet.insert(outView);
     return viewSet;
 }
 
-} // pdal
+} // namespace pdal
+
diff --git a/filters/range/RangeFilter.hpp b/filters/range/RangeFilter.hpp
index b0eec6a..48792fa 100644
--- a/filters/range/RangeFilter.hpp
+++ b/filters/range/RangeFilter.hpp
@@ -35,6 +35,7 @@
 #pragma once
 
 #include <pdal/Filter.hpp>
+#include <pdal/plugin.hpp>
 
 #include <memory>
 #include <map>
@@ -92,9 +93,9 @@ private:
 
     virtual void processOptions(const Options&options);
     virtual void prepared(PointTableRef table);
+    virtual bool processOne(PointRef& point);
     virtual PointViewSet run(PointViewPtr view);
     bool dimensionPasses(double v, const Range& r) const;
-    bool pointPasses(PointView *view, PointId idx) const;
 
     RangeFilter& operator=(const RangeFilter&); // not implemented
     RangeFilter(const RangeFilter&); // not implemented
diff --git a/filters/reprojection/ReprojectionFilter.cpp b/filters/reprojection/ReprojectionFilter.cpp
index ff8083f..09f1100 100644
--- a/filters/reprojection/ReprojectionFilter.cpp
+++ b/filters/reprojection/ReprojectionFilter.cpp
@@ -35,7 +35,7 @@
 #include "ReprojectionFilter.hpp"
 
 #include <pdal/PointView.hpp>
-#include <pdal/GlobalEnvironment.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <gdal.h>
 #include <ogr_spatialref.h>
@@ -111,8 +111,6 @@ void ReprojectionFilter::processOptions(const Options& options)
 
 void ReprojectionFilter::initialize()
 {
-    GlobalEnvironment::get().initializeGDAL(log(), isDebug());
-
     m_out_ref_ptr = OSRNewSpatialReference(0);
 
     int result = OSRSetFromUserInput(m_out_ref_ptr,
@@ -128,11 +126,18 @@ void ReprojectionFilter::initialize()
 }
 
 
-void ReprojectionFilter::createTransform(PointView *view)
+void ReprojectionFilter::ready(PointTableRef table)
+{
+    if (!table.supportsView())
+        createTransform(table.anySpatialReference());
+}
+
+
+void ReprojectionFilter::createTransform(const SpatialReference& srsSRS)
 {
     if (m_inferInputSRS)
     {
-        m_inSRS = view->spatialReference();
+        m_inSRS = srsSRS;
         if (m_inSRS.empty())
         {
             std::ostringstream oss;
@@ -196,23 +201,14 @@ PointViewSet ReprojectionFilter::run(PointViewPtr view)
     PointViewSet viewSet;
     PointViewPtr outView = view->makeNew();
 
-    createTransform(view.get());
-
-    double x, y, z;
+    createTransform(view->spatialReference());
 
+    PointRef point(*view, 0);
     for (PointId id = 0; id < view->size(); ++id)
     {
-        x = view->getFieldAs<double>(Dimension::Id::X, id);
-        y = view->getFieldAs<double>(Dimension::Id::Y, id);
-        z = view->getFieldAs<double>(Dimension::Id::Z, id);
-
-        if (transform(x, y, z))
-        {
-            view->setField(Dimension::Id::X, id, x);
-            view->setField(Dimension::Id::Y, id, y);
-            view->setField(Dimension::Id::Z, id, z);
+        point.setPointId(id);
+        if (processOne(point))
             outView->appendPoint(*view, id);
-        }
     }
 
     viewSet.insert(outView);
@@ -223,23 +219,24 @@ PointViewSet ReprojectionFilter::run(PointViewPtr view)
 }
 
 
-void ReprojectionFilter::filter(PointView& view)
+bool ReprojectionFilter::processOne(PointRef& point)
 {
-    double x, y, z;
+    double x(point.getFieldAs<double>(Dimension::Id::X));
+    double y(point.getFieldAs<double>(Dimension::Id::Y));
+    double z(point.getFieldAs<double>(Dimension::Id::Z));
 
-    for (PointId id = 0; id < view.size(); ++id)
+    if (OCTTransform(m_transform_ptr, 1, &x, &y, &z))
     {
-        x = view.getFieldAs<double>(Dimension::Id::X, id);
-        y = view.getFieldAs<double>(Dimension::Id::Y, id);
-        z = view.getFieldAs<double>(Dimension::Id::Z, id);
+        point.setField(Dimension::Id::X, x);
+        point.setField(Dimension::Id::Y, y);
+        point.setField(Dimension::Id::Z, z);
 
-        OCTTransform(m_transform_ptr, 1, &x, &y, &z);
-
-        view.setField(Dimension::Id::X, id, x);
-        view.setField(Dimension::Id::Y, id, y);
-        view.setField(Dimension::Id::Z, id, z);
+        return true;
+    }
+    else
+    {
+        return false;
     }
 }
 
-
 } // namespace pdal
diff --git a/filters/reprojection/ReprojectionFilter.hpp b/filters/reprojection/ReprojectionFilter.hpp
index a860646..3cbf6b3 100644
--- a/filters/reprojection/ReprojectionFilter.hpp
+++ b/filters/reprojection/ReprojectionFilter.hpp
@@ -34,6 +34,7 @@
 
 #pragma once
 
+#include <pdal/plugin.hpp>
 #include <pdal/Filter.hpp>
 
 #include <memory>
@@ -62,11 +63,12 @@ public:
 private:
     virtual void processOptions(const Options& options);
     virtual void initialize();
+    virtual void ready(PointTableRef table);
     virtual PointViewSet run(PointViewPtr view);
-    virtual void filter(PointView& view);
+    virtual bool processOne(PointRef& point);
 
     void updateBounds();
-    void createTransform(PointView *view);
+    void createTransform(const SpatialReference& srs);
     bool transform(double& x, double& y, double& z);
 
     SpatialReference m_inSRS;
diff --git a/filters/sort/SortFilter.cpp b/filters/sort/SortFilter.cpp
index 17f32f3..95408b7 100644
--- a/filters/sort/SortFilter.cpp
+++ b/filters/sort/SortFilter.cpp
@@ -33,6 +33,7 @@
  ****************************************************************************/
 
 #include "SortFilter.hpp"
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/filters/sort/SortFilter.hpp b/filters/sort/SortFilter.hpp
index 7ec16c5..f9ca4e3 100644
--- a/filters/sort/SortFilter.hpp
+++ b/filters/sort/SortFilter.hpp
@@ -36,6 +36,7 @@
 
 #include <pdal/Filter.hpp>
 #include <pdal/PointViewIter.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t SortFilter_ExitFunc();
 extern "C" PF_ExitFunc SortFilter_InitPlugin();
@@ -70,7 +71,7 @@ private:
         if (m_dim == Dimension::Id::Unknown)
             return;
 
-        auto cmp = [this](const PointRef& p1, const PointRef& p2)
+        auto cmp = [this](const PointIdxRef& p1, const PointIdxRef& p2)
             { return p1.compare(m_dim, p2); };
 
         std::sort(view.begin(), view.end(), cmp);
diff --git a/filters/splitter/SplitterFilter.hpp b/filters/splitter/SplitterFilter.hpp
index 17486f0..e9a29a7 100644
--- a/filters/splitter/SplitterFilter.hpp
+++ b/filters/splitter/SplitterFilter.hpp
@@ -35,6 +35,7 @@
 #pragma once
 
 #include <pdal/Filter.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t SplitterFilter_ExitFunc();
 extern "C" PF_ExitFunc SplitterFilter_InitPlugin();
diff --git a/filters/stats/StatsFilter.cpp b/filters/stats/StatsFilter.cpp
index bd7f551..30e3399 100644
--- a/filters/stats/StatsFilter.cpp
+++ b/filters/stats/StatsFilter.cpp
@@ -38,8 +38,9 @@
 
 #include <pdal/pdal_export.hpp>
 #include <pdal/Options.hpp>
+#include <pdal/Polygon.hpp>
 #include <pdal/PDALUtils.hpp>
-#include <pdal/util/Utils.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -80,23 +81,32 @@ void Summary::extractMetadata(MetadataNode &m) const
 
 using namespace stats;
 
+bool StatsFilter::processOne(PointRef& point)
+{
+    for (auto p = m_stats.begin(); p != m_stats.end(); ++p)
+    {
+        Dimension::Id::Enum d = p->first;
+        Summary& c = p->second;
+        c.insert(point.getFieldAs<double>(d));
+    }
+    return true;
+}
+
+
 void StatsFilter::filter(PointView& view)
 {
+    PointRef point(view, 0);
     for (PointId idx = 0; idx < view.size(); ++idx)
     {
-        for (auto p = m_stats.begin(); p != m_stats.end(); ++p)
-        {
-            Dimension::Id::Enum d = p->first;
-            Summary& c = p->second;
-            c.insert(view.getFieldAs<double>(d, idx));
-        }
+        point.setPointId(idx);
+        processOne(point);
     }
 }
 
 
 void StatsFilter::done(PointTableRef table)
 {
-    extractMetadata();
+    extractMetadata(table);
 }
 
 
@@ -111,8 +121,8 @@ void StatsFilter::processOptions(const Options& options)
 void StatsFilter::prepared(PointTableRef table)
 {
     PointLayoutPtr layout(table.layout());
-
     std::unordered_map<std::string, Summary::EnumType> dims;
+    std::ostream& out = log()->get(LogLevel::Warning);
 
     // Add dimensions to the list.
     if (m_dimNames.empty())
@@ -125,12 +135,8 @@ void StatsFilter::prepared(PointTableRef table)
         for (auto& s : m_dimNames)
         {
             if (layout->findDim(s) == Dimension::Id::Unknown)
-            {
-                std::ostringstream out;
-                out << "Dimension '" << s << "' listed in --dimensions option "
-                   "does not exist.  Ignoring.";
-                Utils::printError(out.str());
-            }
+                out << "Dimension '" << s << "' listed in --dimensions "
+                    "option does not exist.  Ignoring." << std::endl;
             else
                 dims[s] = Summary::NoEnum;
         }
@@ -140,12 +146,8 @@ void StatsFilter::prepared(PointTableRef table)
     for (auto& s : m_enums)
     {
         if (dims.find(s) == dims.end())
-        {
-            std::ostringstream out;
             out << "Dimension '" << s << "' listed in --enumerate option "
-                "does not exist.  Ignoring.";
-            Utils::printError(out.str());
-        }
+                "does not exist.  Ignoring." << std::endl;
         else
             dims[s] = Summary::Enumerate;
     }
@@ -154,12 +156,8 @@ void StatsFilter::prepared(PointTableRef table)
     for (auto& s : m_counts)
     {
         if (dims.find(s) == dims.end())
-        {
-            std::ostringstream out;
             out << "Dimension '" << s << "' listed in --count option "
-                "does not exist.  Ignoring.";
-            Utils::printError(out.str());
-        }
+                "does not exist.  Ignoring." << std::endl;
         else
             dims[s] = Summary::Count;
     }
@@ -169,9 +167,9 @@ void StatsFilter::prepared(PointTableRef table)
         m_stats.insert(std::make_pair(layout->findDim(dv.first),
             Summary(dv.first, dv.second)));
 }
-    
 
-void StatsFilter::extractMetadata()
+
+void StatsFilter::extractMetadata(PointTableRef table)
 {
     uint32_t position(0);
 
@@ -183,6 +181,41 @@ void StatsFilter::extractMetadata()
         t.add("position", position++);
         s.extractMetadata(t);
     }
+
+    // If we have X, Y, & Z dims, output bboxes
+    auto xs = m_stats.find(Dimension::Id::X);
+    auto ys = m_stats.find(Dimension::Id::Y);
+    auto zs = m_stats.find(Dimension::Id::Z);
+    if (xs != m_stats.end() &&
+        ys != m_stats.end() &&
+        zs != m_stats.end())
+    {
+        BOX3D box(xs->second.minimum(), ys->second.minimum(), zs->second.minimum(),
+                  xs->second.maximum(), ys->second.maximum(), zs->second.maximum());
+        pdal::Polygon p(box);
+
+        MetadataNode mbox = Utils::toMetadata(box);
+        MetadataNode box_metadata = m_metadata.add("bbox");
+        MetadataNode metadata = box_metadata.add("native");
+        MetadataNode boundary = metadata.add("boundary", p.json());
+        MetadataNode bbox = metadata.add(mbox);
+        SpatialReference ref = table.anySpatialReference();
+        // if we don't get an SRS from the PointTableRef,
+        // we won't add another metadata node
+        if (!ref.empty())
+        {
+            p.setSpatialReference(ref);
+            SpatialReference epsg4326("EPSG:4326");
+            pdal::Polygon pdd = p.transform(epsg4326);
+            BOX3D ddbox = pdd.bounds();
+            MetadataNode epsg_4326_box = Utils::toMetadata(ddbox);
+            MetadataNode dddbox = box_metadata.add("EPSG:4326");
+            dddbox.add(epsg_4326_box);
+            MetadataNode ddboundary = dddbox.add("boundary", pdd.json());
+
+
+        }
+    }
 }
 
 
diff --git a/filters/stats/StatsFilter.hpp b/filters/stats/StatsFilter.hpp
index 6ec4d94..f435113 100644
--- a/filters/stats/StatsFilter.hpp
+++ b/filters/stats/StatsFilter.hpp
@@ -35,6 +35,7 @@
 #pragma once
 
 #include <pdal/Filter.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t StatsFilter_ExitFunc();
 extern "C" PF_ExitFunc StatsFilter_InitPlugin();
@@ -125,10 +126,11 @@ private:
     StatsFilter& operator=(const StatsFilter&); // not implemented
     StatsFilter(const StatsFilter&); // not implemented
     virtual void processOptions(const Options& options);
+    virtual bool processOne(PointRef& point);
     virtual void prepared(PointTableRef table);
     virtual void done(PointTableRef table);
     virtual void filter(PointView& view);
-    void extractMetadata();
+    void extractMetadata(PointTableRef table);
 
     StringList m_dimNames;
     StringList m_enums;
diff --git a/filters/streamcallback/CMakeLists.txt b/filters/streamcallback/CMakeLists.txt
new file mode 100644
index 0000000..7ca05f0
--- /dev/null
+++ b/filters/streamcallback/CMakeLists.txt
@@ -0,0 +1,10 @@
+#
+# StreamCallback filter CMake configuration
+#
+
+set(srcs StreamCallbackFilter.cpp)
+
+set(incs StreamCallbackFilter.hpp)
+
+PDAL_ADD_DRIVER(filter streamcallback "${srcs}" "${incs}" objects)
+set(PDAL_TARGET_OBJECTS ${PDAL_TARGET_OBJECTS} ${objects} PARENT_SCOPE)
diff --git a/filters/streamcallback/StreamCallbackFilter.cpp b/filters/streamcallback/StreamCallbackFilter.cpp
new file mode 100644
index 0000000..af0f9b0
--- /dev/null
+++ b/filters/streamcallback/StreamCallbackFilter.cpp
@@ -0,0 +1,48 @@
+/******************************************************************************
+* Copyright (c) 2015, Hobu Inc. (info at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include "StreamCallbackFilter.hpp"
+#include <pdal/pdal_macros.hpp>
+
+namespace pdal
+{
+
+static PluginInfo const s_info = PluginInfo(
+    "filters.streamcallback",
+    "Provide a hook for a simple point-by-point callback.",
+    "" );
+
+CREATE_STATIC_PLUGIN(1, 0, StreamCallbackFilter, Filter, s_info)
+
+} // namespace pdal
diff --git a/filters/streamcallback/StreamCallbackFilter.hpp b/filters/streamcallback/StreamCallbackFilter.hpp
new file mode 100644
index 0000000..97ab9c5
--- /dev/null
+++ b/filters/streamcallback/StreamCallbackFilter.hpp
@@ -0,0 +1,78 @@
+/******************************************************************************
+* Copyright (c) 2015, Hobu Inc. (info at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#pragma once
+
+#include <pdal/Filter.hpp>
+#include <pdal/plugin.hpp>
+
+#include <functional>
+
+extern "C" int32_t StreamCallbackFilter_ExitFunc();
+extern "C" PF_ExitFunc StreamCallbackFilter_InitPlugin();
+
+namespace pdal
+{
+
+class PDAL_DLL StreamCallbackFilter : public Filter
+{
+public:
+    static void * create();
+    static int32_t destroy(void *);
+    std::string getName() const
+        { return "filters.streamcallback"; }
+
+    StreamCallbackFilter()
+    {}
+
+    typedef std::function<bool(PointRef&)> CallbackFunc;
+    void setCallback(CallbackFunc cb)
+        { m_callback = cb; }
+
+private:
+    virtual bool processOne(PointRef& point)
+    {
+        if (m_callback)
+            return m_callback(point);
+        return false;
+    }
+
+    CallbackFunc m_callback;
+
+    StreamCallbackFilter&
+        operator=(const StreamCallbackFilter&); // not implemented
+    StreamCallbackFilter(const StreamCallbackFilter&); // not implemented
+};
+
+} // namespace pdal
diff --git a/filters/transformation/TransformationFilter.cpp b/filters/transformation/TransformationFilter.cpp
index 5df43db..3532d70 100644
--- a/filters/transformation/TransformationFilter.cpp
+++ b/filters/transformation/TransformationFilter.cpp
@@ -35,6 +35,7 @@
 #include "TransformationFilter.hpp"
 
 #include <pdal/pdal_export.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <sstream>
 
@@ -90,22 +91,31 @@ void TransformationFilter::processOptions(const Options& options)
 }
 
 
-void TransformationFilter::filter(PointView& view)
+bool TransformationFilter::processOne(PointRef& point)
 {
-    for (PointId idx = 0; idx < view.size(); ++idx)
-    {
-        double x = view.getFieldAs<double>(Dimension::Id::X, idx);
-        double y = view.getFieldAs<double>(Dimension::Id::Y, idx);
-        double z = view.getFieldAs<double>(Dimension::Id::Z, idx);
+    double x = point.getFieldAs<double>(Dimension::Id::X);
+    double y = point.getFieldAs<double>(Dimension::Id::Y);
+    double z = point.getFieldAs<double>(Dimension::Id::Z);
+
+    point.setField(Dimension::Id::X,
+        x * m_matrix[0] + y * m_matrix[1] + z * m_matrix[2] + m_matrix[3]);
+
+    point.setField(Dimension::Id::Y,
+        x * m_matrix[4] + y * m_matrix[5] + z * m_matrix[6] + m_matrix[7]);
 
-        view.setField(Dimension::Id::X, idx,
-            x * m_matrix[0] + y * m_matrix[1] + z * m_matrix[2] + m_matrix[3]);
+    point.setField(Dimension::Id::Z,
+        x * m_matrix[8] + y * m_matrix[9] + z * m_matrix[10] + m_matrix[11]);
+    return true;
+}
 
-        view.setField(Dimension::Id::Y, idx,
-            x * m_matrix[4] + y * m_matrix[5] + z * m_matrix[6] + m_matrix[7]);
 
-        view.setField(Dimension::Id::Z, idx,
-            x * m_matrix[8] + y * m_matrix[9] + z * m_matrix[10] + m_matrix[11]);
+void TransformationFilter::filter(PointView& view)
+{
+    PointRef point(view, 0);
+    for (PointId idx = 0; idx < view.size(); ++idx)
+    {
+        point.setPointId(idx);
+        processOne(point);
     }
 }
 
diff --git a/filters/transformation/TransformationFilter.hpp b/filters/transformation/TransformationFilter.hpp
index 5c44e57..b0614ad 100644
--- a/filters/transformation/TransformationFilter.hpp
+++ b/filters/transformation/TransformationFilter.hpp
@@ -39,6 +39,7 @@
 
 #include <pdal/Filter.hpp>
 #include <pdal/pdal_export.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t TransformationFilter_ExitFunc();
 extern "C" PF_ExitFunc TransformationFilter_InitPlugin();
@@ -68,6 +69,7 @@ private:
     TransformationFilter& operator=(const TransformationFilter&); // not implemented
     TransformationFilter(const TransformationFilter&); // not implemented
     virtual void processOptions(const Options& options);
+    virtual bool processOne(PointRef& point);
     virtual void filter(PointView& view);
 
     TransformationMatrix m_matrix;
diff --git a/include/pdal/Compression.hpp b/include/pdal/Compression.hpp
index 03f17f0..720d732 100644
--- a/include/pdal/Compression.hpp
+++ b/include/pdal/Compression.hpp
@@ -34,7 +34,6 @@
 #pragma once
 
 #include <pdal/pdal_internal.hpp>
-#include <boost/algorithm/string.hpp>
 
 #ifdef PDAL_HAVE_LAZPERF
 #include <laz-perf/common/common.hpp>
@@ -139,7 +138,9 @@ public:
     {}
 
     void putBytes(const unsigned char *b, size_t len)
-        { m_buf.insert(m_buf.end(), (CTYPE *)b, (CTYPE *)(b + len)); }
+    {
+        m_buf.insert(m_buf.end(), (const CTYPE *)b, (const CTYPE *)(b + len));
+    }
     void putByte(const unsigned char b)
         {   m_buf.push_back((CTYPE)b); }
     unsigned char getByte()
diff --git a/include/pdal/Dimension.hpp b/include/pdal/Dimension.hpp
index 7f98498..b98225a 100644
--- a/include/pdal/Dimension.hpp
+++ b/include/pdal/Dimension.hpp
@@ -38,9 +38,8 @@
 #include <string>
 #include <vector>
 
-#include <boost/algorithm/string.hpp>
-
 #include <pdal/pdal_internal.hpp>
+#include <pdal/util/Utils.hpp>
 
 //NOTE: How to add a predefined dimension.
 //
@@ -184,7 +183,19 @@ enum Enum
     EchoRange,
     ScanChannel,
     Infrared,
-    HeightAboveGround
+    HeightAboveGround,
+    ClassFlags,
+    LvisLfid,
+    ShotNumber,
+    LongitudeCentroid,
+    LatitudeCentroid,
+    ElevationCentroid,
+    LongitudeLow,
+    LatitudeLow,
+    ElevationLow,
+    LongitudeHigh,
+    LatitudeHigh,
+    ElevationHigh
 };
 } // namespace Id
 typedef std::vector<Id::Enum> IdList;
@@ -249,7 +260,7 @@ inline std::string description(Id::Enum id)
     case Id::GpsTime:
         return "GPS time that the point was acquired";
     case Id::InternalTime:
-        return "Scanner's internal time when the point was aquired, in seconds";
+        return "Scanner's internal time when the point was acquired, in seconds";
     case Id::OffsetTime:
         return "Milliseconds from first acquired point";
     case Id::IsPpsLocked:
@@ -321,6 +332,37 @@ inline std::string description(Id::Enum id)
         return "Near Infrared";
     case Id::HeightAboveGround:
         return "Height above ground";
+    case Id::ClassFlags:
+        return "Classification Flags";
+    case Id::LvisLfid:
+        return "LVIS file ID, includes date and time of collection and "
+            "file number.  The second through sixth values represent "
+            "modified Julian date of collection.";
+    case Id::ShotNumber:
+        return "Laser shot assigned during collection.";
+    case Id::LongitudeCentroid:
+        return "Refers to the centroid longitude of the corresponding "
+            "LVIS Level-1B waveform.";
+    case Id::LatitudeCentroid:
+        return "Refers to the centroid latitude of the corresponding "
+            "LVIS Level-1B waveform.";
+    case Id::ElevationCentroid:
+        return "Refers to the centroid elevation of the corresponding "
+            "LVIS Level-1B waveform.";
+    case Id::LongitudeLow:
+        return "Longitude of the lowest detected mode within the waveform.";
+    case Id::LatitudeLow:
+        return "Latitude of the lowest detected mode within the waveform.";
+    case Id::ElevationLow:
+        return "Mean Elevation of the lowest detected mode within the "
+            "waveform.";
+    case Id::LongitudeHigh:
+        return "Longitude of the highest detected mode within the waveform.";
+    case Id::LatitudeHigh:
+        return "Latitude of the highest detected mode within the waveform.";
+    case Id::ElevationHigh:
+        return "Mean Elevation of the highest detected mode within the "
+            "waveform.";
     case Id::Unknown:
         return "";
     }
@@ -334,7 +376,8 @@ inline std::string description(Id::Enum id)
 ///    if the name doesn't map to a predefined dimension.
 inline Id::Enum id(std::string s)
 {
-    boost::to_upper(s);
+    s = Utils::toupper(s);
+
     if (s == "X")
         return Id::X;
     else if (s == "Y")
@@ -437,6 +480,30 @@ inline Id::Enum id(std::string s)
         return Id::Infrared;
     else if (s == "HEIGHTABOVEGROUND")
         return Id::HeightAboveGround;
+    else if (s == "CLASSFLAGS")
+        return Id::ClassFlags;
+    else if (s == "LVIS_LFID" || s == "LVISLFID")
+        return Id::LvisLfid;
+    else if (s == "SHOTNUMBER")
+        return Id::ShotNumber;
+    else if (s == "LONGITUDE_CENTROID" || s == "LONGITUDECENTROID")
+        return Id::LongitudeCentroid;
+    else if (s == "LATITUDE_CENTROID" || s == "LATITUDECENTROID")
+        return Id::LatitudeCentroid;
+    else if (s == "ELEVATION_CENTROID" || s == "ELEVATIONCENTROID")
+        return Id::ElevationCentroid;
+    else if (s == "LONGITUDE_LOW" || s == "LONGITUDELOW")
+        return Id::LongitudeLow;
+    else if (s == "LATITUDE_LOW" || s == "LATITUDELOW")
+        return Id::LatitudeLow;
+    else if (s == "ELEVATION_LOW" || s == "ELEVATIONLOW")
+        return Id::ElevationLow;
+    else if (s == "LONGITUDE_HIGH" || s == "LONGITUDEHIGH")
+        return Id::LongitudeHigh;
+    else if (s == "LATITUDE_HIGH" || s == "LATITUDEHIGH")
+        return Id::LatitudeHigh;
+    else if (s == "ELEVATION_HIGH" || s == "ELEVATIONHIGH")
+        return Id::ElevationHigh;
     return Id::Unknown;
 }
 
@@ -549,6 +616,30 @@ inline std::string name(Id::Enum id)
         return "Infrared";
     case Id::HeightAboveGround:
         return "HeightAboveGround";
+    case Id::ClassFlags:
+        return "ClassFlags";
+    case Id::LvisLfid:
+        return "LVIS_LFID";
+    case Id::ShotNumber:
+        return "SHOTNUMBER";
+    case Id::LongitudeCentroid:
+        return "LONGITUDE_CENTROID";
+    case Id::LatitudeCentroid:
+        return "LATITUDE_CENTROID";
+    case Id::ElevationCentroid:
+        return "ELEVATION_CENTROID";
+    case Id::LongitudeLow:
+        return "LONGITUDE_LOW";
+    case Id::LatitudeLow:
+        return "LATITUDE_LOW";
+    case Id::ElevationLow:
+        return "ELEVATION_LOW";
+    case Id::LongitudeHigh:
+        return "LONGITUDE_HIGH";
+    case Id::LatitudeHigh:
+        return "LATITUDE_HIGH";
+    case Id::ElevationHigh:
+        return "ELEVATION_HIGH";
     case Id::Unknown:
         return "";
     }
@@ -668,6 +759,30 @@ inline Type::Enum defaultType(Id::Enum id)
         return Unsigned16;
     case Id::HeightAboveGround:
         return Double;
+    case Id::ClassFlags:
+        return Unsigned8;
+    case Id::LvisLfid:
+        return Unsigned64;
+    case Id::ShotNumber:
+        return Unsigned64;
+    case Id::LongitudeCentroid:
+        return Double;
+    case Id::LatitudeCentroid:
+        return Double;
+    case Id::ElevationCentroid:
+        return Double;
+    case Id::LongitudeLow:
+        return Double;
+    case Id::LatitudeLow:
+        return Double;
+    case Id::ElevationLow:
+        return Double;
+    case Id::LongitudeHigh:
+        return Double;
+    case Id::LatitudeHigh:
+        return Double;
+    case Id::ElevationHigh:
+        return Double;
     case Id::Unknown:
         throw pdal_error("No type for undefined dimension ID.");
     }
@@ -709,11 +824,11 @@ inline std::string interpretationName(Type::Enum dimtype)
 
 
 /// Get the type corresponding to a type name.
-/// \param[in] s  Name of type.
+/// \param s  Name of type.
 /// \return  Corresponding type enumeration value.
 inline Type::Enum type(std::string s)
 {
-    boost::to_lower(s);
+    s = Utils::tolower(s);
 
     if (s == "int8_t" || s == "int8")
        return Type::Signed8;
@@ -738,6 +853,23 @@ inline Type::Enum type(std::string s)
     return Type::None;
 }
 
+
+/// Extract a dimension name of a string.  Dimension names start with an alpha
+/// and continue with numbers or underscores.
+/// \param s  String from which to extract dimension name.
+/// \param p  Position at which to start extracting.
+/// \return  Number of characters in the extracted name.
+inline std::size_t extractName(const std::string& s, std::string::size_type p)
+{
+    if (!std::isalpha(s[p++]))
+        return 0;
+    auto isvalid = [](int c)
+    {
+        return std::isalpha(c) || std::isdigit(c) || c == '_';
+    };
+    return Utils::extract(s, p, isvalid) + 1;
+}
+
 class Detail
 {
 public:
@@ -769,7 +901,7 @@ public:
         { return Dimension::base(m_type); }
 
 private:
-    Id::Enum m_id; 
+    Id::Enum m_id;
     int m_offset;
     Type::Enum m_type;
 };
diff --git a/include/pdal/Filter.hpp b/include/pdal/Filter.hpp
index b83f0ce..7ac159d 100644
--- a/include/pdal/Filter.hpp
+++ b/include/pdal/Filter.hpp
@@ -34,8 +34,6 @@
 
 #pragma once
 
-#include <pdal/pdal_internal.hpp>
-
 #include <pdal/Stage.hpp>
 
 namespace pdal
@@ -43,25 +41,15 @@ namespace pdal
 
 class Filter;
 
-//
-// supported options:
-//   <uint32>id
-//   <bool>debug
-//   <uint32>verbose
-//
-
 class FilterWrapper;
 
 class PDAL_DLL Filter : public Stage
 {
     friend class FilterWrapper;
 public:
-    Filter() : Stage()
+    Filter()
         {}
 
-    // for xml serializion of pipelines
-    virtual boost::property_tree::ptree serializePipeline() const;
-
 private:
     virtual PointViewSet run(PointViewPtr view)
     {
diff --git a/include/pdal/FlexWriter.hpp b/include/pdal/FlexWriter.hpp
index 8c287d9..0efcfdf 100644
--- a/include/pdal/FlexWriter.hpp
+++ b/include/pdal/FlexWriter.hpp
@@ -42,9 +42,20 @@ namespace pdal
 class PDAL_DLL FlexWriter : public Writer
 {
 protected:
-    FlexWriter() : m_hashPos(std::string::npos), m_filenum(1)
+    FlexWriter() : m_filenum(1)
     {}
 
+    void validateFilename(PointTableRef table)
+    {
+        if (!table.supportsView() && (m_hashPos != std::string::npos))
+        {
+            std::ostringstream oss;
+            oss << getName() << ": Can't write with template-based "
+                "filename using streaming point table.";
+            throw oss.str();
+        }
+    }
+
 private:
     virtual void writerProcessOptions(const Options& options)
     {
@@ -55,24 +66,7 @@ private:
             oss << "Can't write with " << getName() << " without filename.";
             throw pdal_error(oss.str());
         }
-        std::string::size_type suffixPos = m_filename.find_last_of('.');
-        m_hashPos = m_filename.find_first_of('#');
-        if (m_hashPos != std::string::npos)
-        {
-            if (m_hashPos > suffixPos)
-            {
-                throw pdal_error("File number placeholder ('#') is not "
-                    "allowed in filename suffix.");
-            }
-            if (m_filename.find_first_of('#', m_hashPos + 1) !=
-                std::string::npos)
-            {
-                std::ostringstream oss;
-                oss << getName() << " filename specification can only contain "
-                    "a single '#' placeholder.";
-                throw pdal_error(oss.str());
-            }
-        }
+        handleFilenameTemplate();
     }
 
     std::string generateFilename()
@@ -105,6 +99,11 @@ private:
         }
     }
 
+    // This essentially moves ready() and done() into write(), which means
+    // that they get executed once for each view.  The check for m_hashPos
+    // is a test to see if the filename specification is a template.  If it's
+    // not a template, ready() and done() are taken care of in the ready()
+    // and done() functions in this class.
     virtual void write(const PointViewPtr view) final
     {
         if (m_hashPos != std::string::npos)
@@ -135,7 +134,6 @@ private:
     virtual void doneFile()
     {}
 
-    std::string::size_type m_hashPos;
     size_t m_filenum;
 
     FlexWriter& operator=(const FlexWriter&); // not implemented
diff --git a/include/pdal/GDALUtils.hpp b/include/pdal/GDALUtils.hpp
index eb5a128..9f8e9a0 100644
--- a/include/pdal/GDALUtils.hpp
+++ b/include/pdal/GDALUtils.hpp
@@ -39,12 +39,10 @@
 
 #include <pdal/Log.hpp>
 
+#include <array>
+#include <functional>
 #include <sstream>
 #include <vector>
-#include <array>
-
-#include <boost/function.hpp>
-#include <boost/bind.hpp>
 
 #include <cpl_port.h>
 #include <gdal.h>
@@ -61,6 +59,9 @@ class SpatialReference;
 namespace gdal
 {
 
+PDAL_DLL void registerDrivers();
+PDAL_DLL void unregisterDrivers();
+
 typedef std::shared_ptr<void> RefPtr;
 
 class SpatialRef
@@ -167,56 +168,151 @@ private:
     RefPtr m_ref;
 };
 
+
 class PDAL_DLL ErrorHandler
 {
 public:
+    class ExceptionSuspender
+    {
+    public:
+        ExceptionSuspender()
+        {
+            doThrow = get().willThrow();
+            get().setThrow(false);
+        }
+        ~ExceptionSuspender()
+        {
+            get().setThrow(doThrow);
+        }
 
-    ErrorHandler(bool isDebug, pdal::LogPtr log);
-    ~ErrorHandler();
+    private:
+        bool doThrow;
+    };
 
-    static void CPL_STDCALL trampoline(::CPLErr code, int num, char const* msg)
-    {
-        ErrorHandler* debug =
-            static_cast<ErrorHandler*>(CPLGetErrorHandlerUserData());
-        if (!debug)
-            return;
+    /**
+      Get the singleton error handler.
 
-        // if (!debug->m_log->get()) return;
-        debug->m_gdal_callback(code, num, msg);
-    }
+      \return  Reference to the error handler.
+    */
+    static ErrorHandler& get();
+
+    /**
+      Set the log and debug state of the error handler.  This is
+      a convenience and is equivalent to calling setLog() and setDebug().
+
+      \param log  Log to write to.
+      \param doDebug  Debug state of the error handler.
+    */
+    void set(LogPtr log, bool doDebug);
+
+    /**
+      Set the log, debug and throw states of the error handler.  This is
+      a convenience and is equivalent to calling setLog(), setDebug() and
+      setThrow().
+
+      \param log  Log to write to.
+      \param doDebug  Debug state of the error handler.
+      \param doThrow  Whether failures/fatals should cause an exception.
+    */
+    void set(LogPtr log, bool doDebug, bool doThrow);
+
+    /**
+      Set whether failures and fatal errors should be logged or cause an
+      exception.
+
+      \param doThrow  Whether failures/fatals should cause exceptions.
+    */
+    void setThrow(bool doThrow);
+
+    /**
+      Determine if the handler will throw exceptions on failures and fatal
+      errors.
+
+      \return  Whether failures/fatals will cause exceptions.
+    */
+    bool willThrow() const;
+
+    /**
+      Set the log to which error/debug messages should be written.
 
-    void log(::CPLErr code, int num, char const* msg);
-    void error(::CPLErr code, int num, char const* msg);
+      \param log  Log to write to.
+    */
+    void setLog(LogPtr log);
 
-    inline LogPtr getLogger() const { return m_log; }
-    inline void setLogger(LogPtr logger) { m_log = logger; }
+    /**
+      Set the debug state of the error handler.  Setting to true will also
+      set the environment variable CPL_DEBUG to "ON".  This will force GDAL
+      to emit debug error messages which will be logged by this handler.
+
+      \param doDebug  Whether we're setting or clearing the debug state.
+    */
+    void setDebug(bool doDebug);
+
+    /**
+      Get the last error and clear the error last error value.
+
+      \return  The last error number.
+    */
+    int errorNum();
+
+private:
+    ErrorHandler();
+
+    void handle(::CPLErr level, int num, const char *msg);
 
 private:
-    boost::function<void(CPLErr, int, char const*)> m_gdal_callback;
-    bool m_isDebug;
+    bool m_debug;
     pdal::LogPtr m_log;
+    bool m_throw;
+    int m_errorNum;
+    bool m_cplSet;
+
+    static ErrorHandler m_instance;
 };
 
-class PDAL_DLL Raster
 
+namespace GDALError
+{
+
+enum Enum
+{
+    None,
+    NotOpen,
+    CantOpen,
+    NoData,
+    InvalidBand,
+    NoTransform,
+    NotInvertible,
+    CantReadBlock
+};
+
+} // namespace GDALError
+
+class PDAL_DLL Raster
 {
 
 public:
     Raster(const std::string& filename);
     ~Raster();
-    bool open();
+    GDALError::Enum open();
     void close();
 
-    bool read(double x, double y, std::vector<double>& data);
+    GDALError::Enum read(double x, double y, std::vector<double>& data);
     std::vector<pdal::Dimension::Type::Enum> getPDALDimensionTypes() const
-    {
-        return m_types;
-    }
-    bool readBand(std::vector<uint8_t>& band, int nBand);
+       { return m_types; }
+    /**
+      Read a raster band (layer) into a vector.
 
-    void pixelToCoord(int column, int row, std::array<double, 2>& output) const;
+      \param band  Vector into which data will be read.  The vector will
+        be resized appropriately to hold the data.
+      \param nBand  Band number to read.  Band numbers start at 1.
+    */
+    GDALError::Enum readBand(std::vector<uint8_t>& band, int nBand);
 
+    void pixelToCoord(int column, int row, std::array<double, 2>& output) const;
     SpatialReference getSpatialRef() const;
+    std::string errorMsg() const
+        { return m_errorMsg; }
 
     std::string m_filename;
 
@@ -226,23 +322,17 @@ public:
     int m_raster_x_size;
     int m_raster_y_size;
 
-    int m_block_x;
-    int m_block_y;
-
-    size_t m_size;
     int m_band_count;
-    std::vector<pdal::Dimension::Type::Enum> m_types;
+    mutable std::vector<pdal::Dimension::Type::Enum> m_types;
     std::vector<std::array<double, 2>> m_block_sizes;
 
     GDALDatasetH m_ds;
+    std::string m_errorMsg;
 
 private:
     bool getPixelAndLinePosition(double x, double y,
-                                 std::array<double, 6> const& inverse,
-                                 int32_t& pixel, int32_t& line);
-    std::vector<pdal::Dimension::Type::Enum> computePDALDimensionTypes() const;
-    std::vector<std::array<int, 2>> fetchGDALBlockSizes() const;
-
+        int32_t& pixel, int32_t& line);
+    GDALError::Enum computePDALDimensionTypes();
 };
 
 } // namespace gdal
diff --git a/include/pdal/GEOSUtils.hpp b/include/pdal/GEOSUtils.hpp
new file mode 100644
index 0000000..e9d1540
--- /dev/null
+++ b/include/pdal/GEOSUtils.hpp
@@ -0,0 +1,107 @@
+/******************************************************************************
+* Copyright (c) 2015, Hobu Inc. (info at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+#pragma once
+
+#include <memory>
+
+#include <geos_c.h>
+
+#include <pdal/pdal_types.hpp>
+#include <pdal/Log.hpp>
+
+namespace pdal
+{
+
+namespace geos
+{
+
+class PDAL_DLL ErrorHandler
+{
+public:
+    ~ErrorHandler();
+
+    /**
+      Get the singleton error handler.
+
+      \return  Reference to the error handler.
+    */
+    static ErrorHandler& get();
+
+    /**
+      Set the log and debug state of the error handler.  This is a convenience
+      and is equivalent to calling setLog() and setDebug().
+
+      \param log  Log to write to.
+      \param doDebug  Debug state of the error handler.
+    */
+    void set(LogPtr log, bool doDebug);
+
+    /**
+      Set the log to which error/debug messages should be written.
+
+      \param log  Log to write to.
+    */
+    void setLog(LogPtr log);
+
+    /**
+      Set the debug state of the error handler.  If the error handler is set
+      to debug, output is logged instead of causing an exception.
+
+      \param debug  The debug state of the error handler.
+    */
+    void setDebug(bool debug);
+    
+    /**
+      Get the GEOS context handle.
+
+      \return  The GEOS context handle.
+    */
+    GEOSContextHandle_t ctx() const;
+
+private:
+    ErrorHandler();
+
+    void handle(const char *msg, bool notice);
+    static void vaErrorCb(const char *msg, ...);
+    static void vaNoticeCb(const char *msg, ...);
+
+    GEOSContextHandle_t m_ctx;
+    bool m_debug;
+    LogPtr m_log;
+    static std::unique_ptr<ErrorHandler> m_instance;
+};
+
+} // namespace geos
+} // namespace pdal
+
diff --git a/include/pdal/Geometry.hpp b/include/pdal/Geometry.hpp
deleted file mode 100644
index 319bbbb..0000000
--- a/include/pdal/Geometry.hpp
+++ /dev/null
@@ -1,146 +0,0 @@
-/******************************************************************************
-* Copyright (c) 2015, Hobu Inc. (info at hobu.co)
-*
-* 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 in
-*       the documentation and/or other materials provided
-*       with the distribution.
-*     * Neither the name of Hobu, Inc. nor the
-*       names of its contributors may be used to endorse or promote
-*       products derived from this software without specific prior
-*       written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-* OF SUCH DAMAGE.
-****************************************************************************/
-
-#include <pdal/pdal_types.hpp>
-
-#include <cstdarg>
-
-#ifdef PDAL_HAVE_GEOS
-#include <geos_c.h>
-#endif
-
-#pragma once
-
-namespace pdal
-{
-
-#ifdef PDAL_HAVE_GEOS
-namespace
-{
-
-static GEOSContextHandle_t s_environment(NULL);
-static int s_contextCnt(0);
-
-static void GEOSErrorHandler(const char *fmt, ...)
-{
-    va_list args;
-
-    va_start(args, fmt);
-    char buf[1024];
-
-    vsnprintf(buf, sizeof(buf), fmt, args);
-    std::cout << "GEOS error: " << buf << std::endl;
-
-    va_end(args);
-}
-
-static void GEOSWarningHandler(const char *fmt, ...)
-{
-    va_list args;
-
-    char buf[1024];
-    vsnprintf(buf, sizeof(buf), fmt, args);
-    std::cout << "GEOS warning: " << buf << std::endl;
-
-    va_end(args);
-}
-
-static GEOSContextHandle_t init()
-{
-    if (s_contextCnt == 0)
-        s_environment = initGEOS_r(GEOSWarningHandler, GEOSErrorHandler);
-    s_contextCnt++;
-    return s_environment;
-}
-
-static void finish()
-{
-    s_contextCnt--;
-    if (s_contextCnt == 0)
-        finishGEOS_r(s_environment);
-}
-
-} // Unnamed namespace
-
-namespace Geometry
-{
-
-static std::string smoothPolygon(const std::string& wkt, double tolerance)
-{
-    GEOSContextHandle_t env = init();
-
-    GEOSGeometry *geom = GEOSGeomFromWKT_r(env, wkt.c_str());
-    if (!geom)
-        return "";
-
-    GEOSGeometry *smoothed = GEOSTopologyPreserveSimplify_r(env, geom,
-        tolerance);
-    if (!smoothed)
-        return "";
-    char *smoothedWkt = GEOSGeomToWKT_r(env, smoothed);
-    std::string outWkt(smoothedWkt);
-    GEOSFree_r(env, smoothedWkt);
-    GEOSGeom_destroy_r(env, geom);
-    GEOSGeom_destroy_r(env, smoothed);
-    finish();
-    return outWkt;
-}
-
-static double computeArea(const std::string& wkt)
-{
-    GEOSContextHandle_t env = init();
-
-    GEOSGeometry *geom = GEOSGeomFromWKT_r(env, wkt.c_str());
-    if (!geom)
-        return 0.0;
-
-    double output(0.0);
-    int er = GEOSArea_r(env, geom, &output);
-    GEOSGeom_destroy_r(env, geom);
-    finish();
-    return output;
-}
-#else
-
-static std::string smoothPolygon(const std::string& wkt, double tolerance)
-{
-    throw pdal_error("Can't call smoothPolygon.  PDAL not built with GEOS.");
-}
-
-#endif
-
-} // namespace Geometry
-
-} // namespace pdal
-
diff --git a/include/pdal/GlobalEnvironment.hpp b/include/pdal/GlobalEnvironment.hpp
deleted file mode 100644
index dd5b290..0000000
--- a/include/pdal/GlobalEnvironment.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/******************************************************************************
-* Copyright (c) 2012, Michael P. Gerlek (mpg at flaxen.com)
-*
-* 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 in
-*       the documentation and/or other materials provided
-*       with the distribution.
-*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
-*       names of its contributors may be used to endorse or promote
-*       products derived from this software without specific prior
-*       written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-* OF SUCH DAMAGE.
-****************************************************************************/
-
-#pragma once
-
-#include <pdal/pdal_internal.hpp>
-#include <pdal/Log.hpp>
-
-#include <mutex>
-#include <memory>
-
-namespace pdal
-{
-namespace gdal
-{
-class ErrorHandler;
-}
-
-class PDAL_DLL GlobalEnvironment
-{
-public:
-    static GlobalEnvironment& get();
-    static void startup();
-    static void shutdown();
-
-    void initializeGDAL(LogPtr log, bool bGDALDebugOutput = false);
-
-private:
-    GlobalEnvironment();
-    ~GlobalEnvironment();
-
-    std::unique_ptr<gdal::ErrorHandler> m_gdalDebug;
-
-    GlobalEnvironment(const GlobalEnvironment&); // nope
-    GlobalEnvironment& operator=(const GlobalEnvironment&); // nope
-};
-
-} // namespace pdal
-
diff --git a/include/pdal/Kernel.hpp b/include/pdal/Kernel.hpp
index 8b03f7f..92520e4 100644
--- a/include/pdal/Kernel.hpp
+++ b/include/pdal/Kernel.hpp
@@ -34,18 +34,6 @@
 
 #pragma once
 
-#include <pdal/KernelSupport.hpp>
-#include <pdal/pdal_export.hpp>
-
-#ifdef PDAL_COMPILER_MSVC
-#  pragma warning(push)
-#  pragma warning(disable: 4512)  // assignment operator could not be generated
-#endif
-#include <boost/program_options.hpp>
-#ifdef PDAL_COMPILER_MSVC
-#  pragma warning(pop)
-#endif
-
 #include <cstdint>
 #include <iosfwd>
 #include <map>
@@ -53,7 +41,8 @@
 #include <string>
 #include <vector>
 
-namespace po = boost::program_options;
+#include <pdal/StageFactory.hpp>
+#include <pdal/util/ProgramArgs.hpp>
 
 namespace pdal
 {
@@ -71,8 +60,11 @@ typedef std::shared_ptr<PointView> PointViewPtr;
 //
 class PDAL_DLL Kernel
 {
+    FRIEND_TEST(KernelTest, parseOption);
+
 public:
-    virtual ~Kernel();
+    virtual ~Kernel()
+    {}
 
     // call this, to start the machine
     int run(int argc, const char* argv[], const std::string& appName);
@@ -86,35 +78,25 @@ public:
 protected:
     // this is protected; your derived class ctor will be the public entry point
     Kernel();
+    Stage& createStage(const std::string& name);
     Stage& makeReader(const std::string& inputFile);
     Stage& makeWriter(const std::string& outputFile, Stage& parent);
 
 public:
-    // implement this, with calls to addOptionSet()
-    virtual void addSwitches() {}
+    virtual void addSwitches(ProgramArgs& args)
+    {}
 
     // implement this, to do sanity checking of cmd line
     // will throw if the user gave us bad options
-    virtual void validateSwitches() {}
+    virtual void validateSwitches(ProgramArgs& args)
+    {}
 
     // implement this, to do your actual work
     // it will be wrapped in a global catch try/block for you
     virtual int execute() = 0;
 
-    void addSwitchSet(po::options_description* options);
-    void addHiddenSwitchSet(po::options_description* options);
-    void addPositionalSwitch(const char* name, int max_count);
     void setCommonOptions(Options &options);
 
-    void setProgressShellCommand(std::vector<std::string> const& command)
-    {
-        m_heartbeat_shell_command = command;
-    }
-    std::vector<std::string> getProgressShellCommand()
-    {
-        return m_heartbeat_shell_command;
-    }
-
     const Options& extraStageOptions(const std::string& stage)
     {
         static Options nullOpts;
@@ -139,55 +121,42 @@ public:
     }
 
 protected:
-    Stage& ownStage(Stage *s)
-    {
-        m_stages.push_back(std::unique_ptr<Stage>(s));
-        return *s;
-    }
-    bool argumentExists(const std::string& name)
-        { return (bool)m_variablesMap.count(name); }
-    bool argumentSpecified(const std::string& name);
 
     bool m_usestdin;
-    int m_argc;
-    const char** m_argv;
     Log m_log;
 
 private:
-    int innerRun();
-    void parseSwitches();
-    void outputHelp();
+    int innerRun(ProgramArgs& args);
+    void outputHelp(ProgramArgs& args);
     void outputVersion();
-    void addBasicSwitchSet();
+    void addBasicSwitches(ProgramArgs& args);
     void collectExtraOptions();
 
-    int do_switches();
-    int do_startup();
-    int do_execution();
-    int do_shutdown();
+    void doSwitches(int argc, const char *argv[], ProgramArgs& args);
+    int doStartup();
+    int doExecution(ProgramArgs& args);
+    int doShutdown();
+
+    static bool test_parseOption(std::string o, std::string& stage,
+        std::string& option, std::string& value);
 
     bool m_isDebug;
     uint32_t m_verboseLevel;
     bool m_showHelp;
-    std::string m_showOptions;
+    bool m_showOptions;
     bool m_showVersion;
     bool m_showTime;
     std::string m_appName;
     bool m_hardCoreDebug;
-    std::vector<std::string> m_heartbeat_shell_command;
     bool m_reportDebug;
     std::string m_scales;
     std::string m_offsets;
     bool m_visualize;
     std::string m_label;
 
-    std::vector<po::options_description*> m_public_options;
-    std::vector<po::options_description*> m_hidden_options;
-    po::positional_options_description m_positionalOptions;
-    po::variables_map m_variablesMap;
     std::vector<std::string> m_extra_options;
     std::map<std::string, Options> m_extraStageOptions;
-    std::vector<std::unique_ptr<Stage>> m_stages;
+    StageFactory m_factory;
 
     Kernel& operator=(const Kernel&); // not implemented
     Kernel(const Kernel&); // not implemented
diff --git a/include/pdal/KernelFactory.hpp b/include/pdal/KernelFactory.hpp
index 018ac93..8ff7b66 100644
--- a/include/pdal/KernelFactory.hpp
+++ b/include/pdal/KernelFactory.hpp
@@ -60,9 +60,6 @@ public:
     KernelFactory(bool no_plugins=true);
     virtual ~KernelFactory() {};
 
-    static std::unique_ptr<Kernel> createKernel(std::string const& kernel_name);
-    static std::vector<std::string> getKernelNames();
-
 private:
     KernelFactory& operator=(const KernelFactory&); // not implemented
     KernelFactory(const KernelFactory&); // not implemented
diff --git a/include/pdal/KernelSupport.hpp b/include/pdal/KernelSupport.hpp
deleted file mode 100644
index ece49c4..0000000
--- a/include/pdal/KernelSupport.hpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/******************************************************************************
-* Copyright (c) 2011, Michael P. Gerlek (mpg at flaxen.com)
-*
-* 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 in
-*       the documentation and/or other materials provided
-*       with the distribution.
-*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
-*       names of its contributors may be used to endorse or promote
-*       products derived from this software without specific prior
-*       written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-* OF SUCH DAMAGE.
-****************************************************************************/
-
-#pragma once
-
-#include <string>
-
-#include <pdal/Options.hpp>
-#include <pdal/Stage.hpp>
-#include <pdal/UserCallback.hpp>
-#include <pdal/PipelineManager.hpp>
-
-namespace pdal
-{
-
-class app_usage_error : public pdal::pdal_error
-{
-public:
-    inline app_usage_error(std::string const& msg)
-        : pdal_error(msg)
-    {}
-};
-
-
-class app_runtime_error : public pdal::pdal_error
-{
-public:
-    inline app_runtime_error(std::string const& msg)
-        : pdal_error(msg)
-    {}
-};
-
-
-// this is a static class with some helper functions the cmd line apps need
-class PDAL_DLL KernelSupport
-{
-public:
-    // makes a writer, from just the filename and some other
-    // options (and the input stage)
-    static PipelineManagerPtr makePipeline(const std::string& filename);
-
-private:
-    KernelSupport& operator=(const KernelSupport&); // not implemented
-    KernelSupport(const KernelSupport&); // not implemented
-};
-
-
-class PDAL_DLL PercentageCallback : public pdal::UserCallback
-{
-public:
-    PercentageCallback(double major = 10.0, double minor = 2.0);
-    virtual void callback();
-
-protected:
-    double m_lastMajorPerc;
-    double m_lastMinorPerc;
-    bool m_done;
-};
-
-
-class PDAL_DLL HeartbeatCallback : public pdal::UserCallback
-{
-public:
-    virtual void callback()
-        { std::cerr << "."; }
-};
-
-
-class PDAL_DLL ShellScriptCallback : public PercentageCallback
-{
-public:
-    ShellScriptCallback(const std::vector<std::string>& command);
-    virtual void callback();
-
-private:
-    std::string m_command;
-};
-
-} // namespace pdal
diff --git a/include/pdal/Metadata.hpp b/include/pdal/Metadata.hpp
index 18cab83..5f1666e 100644
--- a/include/pdal/Metadata.hpp
+++ b/include/pdal/Metadata.hpp
@@ -36,12 +36,9 @@
 
 #include <pdal/pdal_internal.hpp>
 
-#include <boost/uuid/uuid.hpp>
-#include <boost/uuid/uuid_io.hpp>
-
 #include <pdal/util/Bounds.hpp>
 #include <pdal/util/Utils.hpp>
-#include <pdal/SpatialReference.hpp>
+#include <pdal/util/Uuid.hpp>
 
 #include <map>
 #include <memory>
@@ -51,6 +48,8 @@
 namespace pdal
 {
 
+class SpatialReference;
+
 namespace MetadataType
 {
 enum Enum
@@ -68,7 +67,7 @@ typedef std::vector<MetadataNodeImplPtr> MetadataImplList;
 typedef std::map<std::string, MetadataImplList> MetadataSubnodes;
 typedef std::vector<MetadataNode> MetadataNodeList;
 
-class MetadataNodeImpl
+class PDAL_DLL MetadataNodeImpl
 {
     friend class MetadataNode;
 
@@ -242,11 +241,7 @@ inline void MetadataNodeImpl::setValue<double>(const double& d)
 }
 
 template <>
-inline void MetadataNodeImpl::setValue(const SpatialReference& ref)
-{
-    m_type = "spatialreference";
-    m_value = Utils::toString(ref);
-}
+void PDAL_DLL MetadataNodeImpl::setValue(const SpatialReference& ref);
 
 template <>
 inline void MetadataNodeImpl::setValue(const BOX3D& b)
@@ -333,10 +328,10 @@ inline void MetadataNodeImpl::setValue(const long long& l)
 }
 
 template <>
-inline void MetadataNodeImpl::setValue(const boost::uuids::uuid& u)
+inline void MetadataNodeImpl::setValue(const Uuid& u)
 {
     m_type = "uuid";
-    m_value = Utils::toString(u);
+    m_value = u.toString();
 }
 
 
@@ -361,7 +356,7 @@ public:
     MetadataNode addList(const std::string& name)
         { return MetadataNode(m_impl->addList(name)); }
 
-    MetadataNode clone(const std::string& name)
+    MetadataNode clone(const std::string& name) const
     {
         MetadataNode node;
         node.m_impl.reset(new MetadataNodeImpl(*m_impl));
@@ -491,15 +486,19 @@ public:
 
     std::string jsonValue() const
     {
-        std::string val;
+        if (m_impl->m_type == "json")
+            return value();
+
+        std::string v(Utils::escapeJSON(value()));
         if (m_impl->m_type == "string" || m_impl->m_type == "base64Binary" ||
             m_impl->m_type == "uuid")
         {
             std::string val("\"");
-            val += escapeQuotes(value()) + "\"";
+            val += escapeQuotes(v) + "\"";
             return val;
         }
-        return value();
+
+        return v;
     }
 
     std::string description() const
@@ -678,7 +677,7 @@ public:
     MetadataNode getNode() const
         { return m_root; }
 
-    inline static std::string inferType(const std::string& val);
+    static std::string PDAL_DLL inferType(const std::string& val);
 private:
     MetadataNode m_root;
     MetadataNode m_private;
@@ -686,64 +685,6 @@ private:
 };
 typedef std::shared_ptr<Metadata> MetadataPtr;
 
-inline std::string Metadata::inferType(const std::string& val)
-{
-    size_t pos;
-
-    long l = 0;
-    try
-    {
-        pos = 0;
-        l = std::stol(val, &pos);
-    }
-    catch (std::invalid_argument)
-    {}
-    if (pos == val.length())
-        return (l < 0 ? "nonNegativeInteger" : "integer");
-
-    try
-    {
-        pos = 0;
-        std::stod(val, &pos);
-    }
-    catch(std::invalid_argument)
-    {}
-
-    if (pos == val.length())
-        return "double";
-
-    BOX2D b2d;
-    std::istringstream iss1(val);
-    iss1 >> b2d;
-    if (iss1.good())
-        return "bounds";
-
-    BOX3D b3d;
-    std::istringstream iss2(val);
-    iss2 >> b3d;
-    if (iss2.good())
-        return "bounds";
-
-    if (val == "true" || val == "false")
-        return "boolean";
-
-    try
-    {
-        SpatialReference s(val);
-        return "spatialreference";
-    }
-    catch (pdal_error&)
-    {
-    }
-
-    boost::uuids::uuid uuid;
-    std::istringstream iss3(val);
-    iss3 >> uuid;
-    if (iss3.good())
-        return "uuid";
-
-    return "string";
-}
 
 } // namespace pdal
 
diff --git a/include/pdal/Options.hpp b/include/pdal/Options.hpp
index 4b0ecde..337733b 100644
--- a/include/pdal/Options.hpp
+++ b/include/pdal/Options.hpp
@@ -38,10 +38,6 @@
 #include <pdal/Metadata.hpp>
 #include <pdal/util/Utils.hpp>
 
-#include <boost/property_tree/ptree.hpp>
-#include <boost/lexical_cast.hpp>
-#include <boost/optional.hpp>
-
 #include <map>
 #include <memory>
 #include <vector>
@@ -60,14 +56,8 @@ typedef std::multimap<std::string, Option> map_t;
 /*!
     \verbatim embed:rst
      An Option is just a record with three fields: name, value, and description.
-     The value is stored as a string, and we rely on boost::lexical_cast to do the
-     serialization magic for us.  This means that an object you insert as an option
-     value must satisfay the requirements for being lexically-castable:
-        - copy ctor
-        - operator=
-        - operator>>
-        - operator<<
-
+     The value is stored as a string.
+      
      Dumped as XML, it looks like this although of course that's not valid
      XML, since it has no single root element.
 
@@ -98,6 +88,18 @@ public:
         {}
     };
 
+    class cant_convert : public pdal_error
+    {
+    public:
+        cant_convert(const std::string& name, const std::string& value,
+            const std::string& type) :
+            pdal_error(std::string("Can't convert option '") + name +
+              "' with value '" + value + "' to type '" + type + "'.")
+        {}
+        cant_convert(const std::string& msg) : pdal_error(msg)
+        {}
+    };
+
 /// @name Constructors
 
     Option()
@@ -109,18 +111,9 @@ public:
             std::string const& description = "") :
         m_name(name), m_description(description)
     {
-        try
-        {
-            setValue<T>(value);
-        }
-        catch (boost::bad_lexical_cast)
-        {
-        }
+        setValue<T>(value);
     }
 
-    /// Construct from an existing boost::property_tree
-    Option(const boost::property_tree::ptree& tree);
-
     /// Equality operator
     bool operator==(const Option& rhs) const
     {
@@ -176,7 +169,7 @@ public:
         return m_description;
     }
 
-    /// @return the value of the Option as casted by boost::lexical_cast
+    /// @return the value of the Option.
     template<typename T>
     T getValue() const
     {
@@ -185,36 +178,25 @@ public:
         return t;
     }
 
-    /// sets the value of the Option to T after boost::lexical_cast'ing
-    /// it to a std::string
+    /// sets the value of the Option to T converted to a string.
     template<typename T> void setValue(const T& value)
     {
-        m_value = boost::lexical_cast<std::string>(value);
+        std::ostringstream oss;
+        oss << value;
+        m_value = oss.str();
     }
 
-/// @name pdal::Options access
-
-    /*! \return a boost::optional-wrapped const& of the Options set for this Option.
-    \verbatim embed:rst
-
-    .. note::
-
-            An Option may have an Options map of of
-            infinite depth (Option->Options->Option->Options...)
-    \endverbatim
-    */
-
     bool empty() const;
 
 #if defined(PDAL_COMPILER_MSVC)
     /// explicit specialization to insert a bool as "true" and "false" rather
-    /// than "0" or "1" (which is what lexical_cast would do)
+    /// than "0" or "1".
     template<> void setValue(const bool& value)
     {
         m_value = value ? "true" : "false";
     }
 
-    /// explicit specialization to insert a string so no lexical_cast happens
+    /// explicit specialization to insert a string so no stream is necessary.
     template<> void setValue(const std::string& value)
     {
         m_value = value;
@@ -232,7 +214,11 @@ private:
     template <typename T>
     void getValue(T& t) const
     {
-        t = boost::lexical_cast<T>(m_value);
+        std::istringstream iss(m_value);
+
+        iss >> t;
+        if (iss.fail())
+            throw cant_convert(m_name, m_value, Utils::typeidName<T>());
     }
 
     void getValue(StringList& values) const
@@ -249,21 +235,35 @@ private:
         else if (m_value == "false")
             value = false;
         else
-            value = boost::lexical_cast<bool>(m_value);
+        {
+            std::istringstream iss(m_value);
+
+            iss >> value;
+            if (iss.fail())
+                throw cant_convert(m_name, m_value, "bool");
+        }
     }
 
-    /// Avoid lexical cast.
     void getValue(std::string& value) const
-        { value = m_value; }
+        { value = m_value; } 
 
     void getValue(char& value)
-        { value = (char)std::stoi(m_value); }
+    {
+        if (!Utils::fromString(m_value, value))
+            throw cant_convert(m_name, m_value, "char");
+    }
 
     void getValue(unsigned char& value) const
-        { value = (unsigned char)std::stoi(m_value); }
+    {
+        if (!Utils::fromString(m_value, value))
+            throw cant_convert(m_name, m_value, "unsigned char");
+    }
 
     void getValue(signed char& value) const
-        { value = (signed char)std::stoi(m_value); }
+    {
+        if (!Utils::fromString(m_value, value))
+            throw cant_convert(m_name, m_value, "signed char");
+    }
 };
 
 
@@ -271,10 +271,10 @@ private:
 #if !defined(PDAL_COMPILER_VC10)
 
 /// explicit specialization to insert a bool as "true" and "false" rather
-/// than "0" or "1" (which is what lexical_cast would do)
+/// than "0" or "1".
 template<> void Option::setValue(const bool& value);
 
-/// explicit specialization to insert a string so no lexical_cast happens
+/// explicit specialization to insert a string.
 template<> void Option::setValue(const std::string& value);
 #endif
 
@@ -332,35 +332,16 @@ public:
 
     Options(const Option&);
 
-    Options(const boost::property_tree::ptree& tree);
-
     // add an option
     void add(const Option& option);
 
     // if option name not present, just returns
     void remove(const Option& option);
 
-    MetadataNode toMetadata() const
-    {
-        MetadataNode cur("options");
-        std::vector<Option> optList = getOptions();
-        for (auto oi = optList.begin(); oi != optList.end(); ++oi)
-        {
-            Option& opt = *oi;
-            opt.toMetadata(cur);
-        }
-        return cur;
-    }
-
     void toMetadata(MetadataNode& parent) const
     {
-        MetadataNode cur = parent.add("options");
-        std::vector<Option> optList = getOptions();
-        for (auto oi = optList.begin(); oi != optList.end(); ++oi)
-        {
-            Option& opt = *oi;
-            opt.toMetadata(cur);
-        }
+        for (auto o : getOptions())
+            o.toMetadata(parent);
     }
 
     // add an option (shortcut version, bypass need for an Option object)
@@ -403,10 +384,16 @@ public:
     // get value of an option, or throw not_found if option not present
     template<typename T> T getValueOrThrow(std::string const& name) const
     {
-        const Option& opt = getOption(name);  // might throw
+        const Option& opt = getOption(name);  // might throw Option::not_found
         return opt.getValue<T>();
     }
 
+    std::string getValueOrDefault(std::string const& name,
+        const std::string& defaultValue) const
+    {
+        return getValueOrDefault<std::string>(name, defaultValue);
+    }
+
     // get value of an option, or use given default if option not present
     template<typename T>
     T getValueOrDefault(std::string const& name, const T& defaultValue) const
@@ -415,7 +402,8 @@ public:
 
         try
         {
-            const Option& opt = getOption(name);  // might throw
+            // might throw Option::not_found
+            const Option& opt = getOption(name);
             result = opt.getValue<T>();
         }
         catch (Option::not_found)
@@ -456,8 +444,6 @@ public:
     // returns true iff the option name is valid
     bool hasOption(std::string const& name) const;
 
-    void dump() const;
-
     std::vector<Option> getOptions(std::string const& name="") const;
 
 
diff --git a/include/pdal/PDALUtils.hpp b/include/pdal/PDALUtils.hpp
index bd92d1c..799cbb9 100644
--- a/include/pdal/PDALUtils.hpp
+++ b/include/pdal/PDALUtils.hpp
@@ -35,17 +35,18 @@
 #pragma once
 
 #include <pdal/Metadata.hpp>
-#include <boost/property_tree/json_parser.hpp>
-#include <boost/algorithm/string.hpp>
 #include <pdal/Dimension.hpp>
 #include <pdal/pdal_defines.h>
 #include <pdal/pdal_export.hpp>
 #include <pdal/PointTable.hpp>
 #include <pdal/PointView.hpp>
 #include <pdal/Options.hpp>
+#include <pdal/util/Inserter.hpp>
+#include <pdal/util/Extractor.hpp>
 
-#ifndef _WIN32
+#ifndef WIN32
 #include <sys/fcntl.h>
+#include <unistd.h>
 #endif
 
 namespace pdal
@@ -103,43 +104,127 @@ inline double toDouble(const Everything& e, Dimension::Type::Enum type)
     return d;
 }
 
-using namespace boost::property_tree;
-
-inline ptree toPTree(MetadataNode const& node)
+inline Everything extractDim(Extractor& ext, Dimension::Type::Enum type)
 {
-    typedef ptree::path_type path;
+    using namespace Dimension::Type;
+
+    Everything e;
+    switch (type)
+    {
+        case Unsigned8:
+            ext >> e.u8;
+            break;
+        case Unsigned16:
+            ext >> e.u16;
+            break;
+        case Unsigned32:
+            ext >> e.u32;
+            break;
+        case Unsigned64:
+            ext >> e.u64;
+            break;
+        case Signed8:
+            ext >> e.s8;
+            break;
+        case Signed16:
+            ext >> e.s16;
+            break;
+        case Signed32:
+            ext >> e.s32;
+            break;
+        case Signed64:
+            ext >> e.s64;
+            break;
+        case Float:
+            ext >> e.f;
+            break;
+        case Double:
+            ext >> e.d;
+            break;
+        case None:
+            break;
+    }
+    return e;
+}
 
-    ptree tree;
-    tree.put("name", node.name());
-    tree.put("description", node.description());
-    tree.put("type", node.type());
-    tree.put("value", node.value());
+inline void insertDim(Inserter& ins, Dimension::Type::Enum type,
+    const Everything& e)
+{
+    using namespace Dimension::Type;
 
-    MetadataNodeList children = node.children();
-    for (auto n = children.begin(); n != children.end(); ++n)
+    switch (type)
     {
-        ptree pnode = toPTree(*n);
-        if (node.kind() == MetadataType::Array)
-        {
-            boost::optional<ptree&> opt =
-                tree.get_child_optional(path(node.name(), '/'));
-            if (opt)
-                opt->push_back(std::make_pair("", pnode));
-            else
-            {
-                tree.push_back(ptree::value_type(node.name(), ptree()));
-                auto& p = tree.get_child(path(node.name(), '/'));
-                p.push_back(std::make_pair("", pnode));
-
-            }
-        }
-        else if (node.name().size())
-            tree.push_back(std::make_pair(node.name(), pnode));
+        case Unsigned8:
+            ins << e.u8;
+            break;
+        case Unsigned16:
+            ins << e.u16;
+            break;
+        case Unsigned32:
+            ins << e.u32;
+            break;
+        case Unsigned64:
+            ins << e.u64;
+            break;
+        case Signed8:
+            ins << e.s8;
+            break;
+        case Signed16:
+            ins << e.s16;
+            break;
+        case Signed32:
+            ins << e.s32;
+            break;
+        case Signed64:
+            ins << e.s64;
+            break;
+        case Float:
+            ins << e.f;
+            break;
+        case Double:
+            ins << e.d;
+            break;
+        case None:
+            break;
     }
-    return tree;
 }
 
 
+// inline ptree toPTree(MetadataNode const& node)
+// {
+//     typedef ptree::path_type path;
+//
+//     ptree tree;
+//     tree.put("name", node.name());
+//     tree.put("description", node.description());
+//     tree.put("type", node.type());
+//     tree.put("value", node.value());
+//
+//     MetadataNodeList children = node.children();
+//     for (auto n = children.begin(); n != children.end(); ++n)
+//     {
+//         ptree pnode = toPTree(*n);
+//         if (node.kind() == MetadataType::Array)
+//         {
+//             pdalboost::optional<ptree&> opt =
+//                 tree.get_child_optional(path(node.name(), '/'));
+//             if (opt)
+//                 opt->push_back(std::make_pair("", pnode));
+//             else
+//             {
+//                 tree.push_back(ptree::value_type(node.name(), ptree()));
+//                 auto& p = tree.get_child(path(node.name(), '/'));
+//                 p.push_back(std::make_pair("", pnode));
+//
+//             }
+//         }
+//         else if (node.name().size())
+//             tree.push_back(std::make_pair(node.name(), pnode));
+//     }
+//     return tree;
+// }
+//
+
 inline MetadataNode toMetadata(PointTableRef table)
 {
     const PointLayoutPtr layout(table.layout());
@@ -178,91 +263,134 @@ inline MetadataNode toMetadata(const PointViewPtr view)
     return node;
 }
 
-/// Outputs a string-based boost::property_tree::ptree representation
-/// of the BOX3D instance
-inline ptree toPTree(const BOX3D& bounds)
+inline MetadataNode toMetadata(const SpatialReference& ref)
 {
-    ptree tree;
-    ptree x;
-    ptree y;
-    ptree z;
+    MetadataNode root("srs");
+    root.add("horizontal", ref.getHorizontal());
+    root.add("vertical", ref.getVertical());
+    root.add("isgeographic", ref.isGeographic());
+    root.add("isgeocentric", ref.isGeocentric());
+    root.add("proj4", ref.getProj4());
+    root.add("prettywkt", ref.getWKT(SpatialReference::eHorizontalOnly, true));
+    root.add("wkt", ref.getWKT(SpatialReference::eHorizontalOnly, false));
+    root.add("compoundwkt", ref.getWKT(SpatialReference::eCompoundOK, false));
+    root.add("prettycompoundwkt", ref.getWKT(SpatialReference::eCompoundOK, true));
+
+    MetadataNode units = root.add("units");
+    units.add("vertical", ref.getVerticalUnits());
+    units.add("horizontal", ref.getVerticalUnits());
 
-    x.add("minimum", bounds.minx);
-    x.add("maximum", bounds.maxx);
-    tree.add_child("0", x);
-
-    y.add("minimum", bounds.miny);
-    y.add("maximum", bounds.maxy);
-    tree.add_child("1", y);
-
-    z.add("minimum", bounds.minz);
-    z.add("maximum", bounds.maxz);
-    tree.add_child("2", z);
-
-    return tree;
+    return root;
 }
 
-/// Outputs a string-based boost::property_tree::ptree representation
-/// of the BOX2D instance
-inline ptree toPTree(const BOX2D& bounds)
-{
-    ptree tree;
-    ptree x;
-    ptree y;
-    ptree z;
-
-    x.add("minimum", bounds.minx);
-    x.add("maximum", bounds.maxx);
-    tree.add_child("0", x);
 
-    y.add("minimum", bounds.miny);
-    y.add("maximum", bounds.maxy);
-    tree.add_child("1", y);
-
-    return tree;
-}
-
-ptree toPTree(const Options& options);
-inline ptree toPTree(const Option& option)
+inline MetadataNode toMetadata(const BOX2D& bounds)
 {
-    ptree t;
-    t.put("Name", option.getName());
-    t.put("Value", option.getValue<std::string>());
-    if (option.getDescription() != "")
-        t.put("Description", option.getDescription());
-
-    return t;
+    MetadataNode output("bbox");
+    output.add("minx", bounds.minx);
+    output.add("miny", bounds.miny);
+    output.add("maxx", bounds.maxx);
+    output.add("maxy", bounds.maxy);
+    return output;
 }
 
-
-inline ptree toPTree(const Options& options)
+inline MetadataNode toMetadata(const BOX3D& bounds)
 {
-    ptree tree;
-    std::vector<Option> opts = options.getOptions();
-    for (auto citer = opts.begin(); citer != opts.end(); ++citer)
-    {
-        const Option& option = *citer;
-        ptree subtree = toPTree(option);
-        tree.add_child("Option", subtree);
-    }
-    return tree;
+    MetadataNode output("bbox");
+    output.add("minx", bounds.minx);
+    output.add("miny", bounds.miny);
+    output.add("minz", bounds.minz);
+    output.add("maxx", bounds.maxx);
+    output.add("maxy", bounds.maxy);
+    output.add("maxz", bounds.maxz);
+    return output;
 }
 
-
-
-inline ptree toPTree(const SpatialReference& ref)
-{
-    ptree srs;
-
-    srs.put("proj4", ref.getProj4());
-    srs.put("prettywkt", ref.getWKT(SpatialReference::eHorizontalOnly, true));
-    srs.put("wkt", ref.getWKT(SpatialReference::eHorizontalOnly, false));
-    srs.put("compoundwkt", ref.getWKT(SpatialReference::eCompoundOK, false));
-    srs.put("prettycompoundwkt", ref.getWKT(SpatialReference::eCompoundOK,
-       true));
-
-    return srs;
-}
+/// Outputs a string-based boost::property_tree::ptree representation
+/// of the BOX3D instance
+// inline ptree toPTree(const BOX3D& bounds)
+// {
+//     ptree tree;
+//     ptree x;
+//     ptree y;
+//     ptree z;
+//
+//     x.add("minimum", bounds.minx);
+//     x.add("maximum", bounds.maxx);
+//     tree.add_child("0", x);
+//
+//     y.add("minimum", bounds.miny);
+//     y.add("maximum", bounds.maxy);
+//     tree.add_child("1", y);
+//
+//     z.add("minimum", bounds.minz);
+//     z.add("maximum", bounds.maxz);
+//     tree.add_child("2", z);
+//
+//     return tree;
+// }
+//
+// /// Outputs a string-based pdalboost::property_tree::ptree representation
+// /// of the BOX2D instance
+// inline ptree toPTree(const BOX2D& bounds)
+// {
+//     ptree tree;
+//     ptree x;
+//     ptree y;
+//     ptree z;
+//
+//     x.add("minimum", bounds.minx);
+//     x.add("maximum", bounds.maxx);
+//     tree.add_child("0", x);
+//
+//     y.add("minimum", bounds.miny);
+//     y.add("maximum", bounds.maxy);
+//     tree.add_child("1", y);
+//
+//     return tree;
+// }
+//
+// ptree toPTree(const Options& options);
+// inline ptree toPTree(const Option& option)
+// {
+//     ptree t;
+//     t.put("Name", option.getName());
+//     t.put("Value", option.getValue<std::string>());
+//     if (option.getDescription() != "")
+//         t.put("Description", option.getDescription());
+//
+//     return t;
+// }
+//
+//
+// inline ptree toPTree(const Options& options)
+// {
+//     ptree tree;
+//     std::vector<Option> opts = options.getOptions();
+//     for (auto citer = opts.begin(); citer != opts.end(); ++citer)
+//     {
+//         const Option& option = *citer;
+//         ptree subtree = toPTree(option);
+//         tree.add_child("Option", subtree);
+//     }
+//     return tree;
+// }
+//
+//
+//
+// inline ptree toPTree(const SpatialReference& ref)
+// {
+//     ptree srs;
+//
+//     srs.put("proj4", ref.getProj4());
+//     srs.put("prettywkt", ref.getWKT(SpatialReference::eHorizontalOnly, true));
+//     srs.put("wkt", ref.getWKT(SpatialReference::eHorizontalOnly, false));
+//     srs.put("compoundwkt", ref.getWKT(SpatialReference::eCompoundOK, false));
+//     srs.put("prettycompoundwkt", ref.getWKT(SpatialReference::eCompoundOK,
+//        true));
+//
+//     return srs;
+// }
 
 inline int openProgress(const std::string& filename)
 {
diff --git a/include/pdal/PipelineManager.hpp b/include/pdal/PipelineManager.hpp
index 286fbf3..4b20a16 100644
--- a/include/pdal/PipelineManager.hpp
+++ b/include/pdal/PipelineManager.hpp
@@ -60,6 +60,9 @@ public:
             m_progressFd(progressFd)
         {}
 
+    void readPipeline(std::istream& input);
+    void readPipeline(const std::string& filename);
+
     // Use these to manually add stages into the pipeline manager.
     Stage& addReader(const std::string& type);
     Stage& addFilter(const std::string& type);
@@ -69,9 +72,9 @@ public:
     bool isWriterPipeline() const
         { return (bool)getStage(); }
 
-    // return the pipeline reader endpoint (or NULL, if not a reader pipeline)
+    // return the pipeline reader endpoint (or nullptr, if not a reader pipeline)
     Stage* getStage() const
-        { return m_stages.empty() ? NULL : m_stages.back().get(); }
+        { return m_stages.empty() ? nullptr : m_stages.back(); }
 
     void prepare() const;
     point_count_t execute();
@@ -93,8 +96,7 @@ private:
 
     PointViewSet m_viewSet;
 
-    typedef std::vector<std::unique_ptr<Stage> > StagePtrList;
-    StagePtrList m_stages;
+    std::vector<Stage*> m_stages; // stage observer, never owner
     int m_progressFd;
 
     PipelineManager& operator=(const PipelineManager&); // not implemented
diff --git a/include/pdal/PipelineReader.hpp b/include/pdal/PipelineReader.hpp
deleted file mode 100644
index 5cbfe90..0000000
--- a/include/pdal/PipelineReader.hpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/******************************************************************************
-* Copyright (c) 2011, Michael P. Gerlek (mpg at flaxen.com)
-*
-* 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 in
-*       the documentation and/or other materials provided
-*       with the distribution.
-*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
-*       names of its contributors may be used to endorse or promote
-*       products derived from this software without specific prior
-*       written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-* OF SUCH DAMAGE.
-****************************************************************************/
-
-#pragma once
-
-#include <pdal/pdal_internal.hpp>
-#include <pdal/StageFactory.hpp>
-
-#include <vector>
-#include <string>
-
-
-namespace pdal
-{
-
-class Options;
-class PipelineManager;
-
-class PDAL_DLL PipelineReader
-{
-private:
-    class StageParserContext;
-
-public:
-    PipelineReader(PipelineManager&, bool debug=false,
-        uint32_t verbose = 0);
-
-    // Use this to fill in a pipeline manager with an XML file that
-    // contains a <Writer> as the last pipeline stage.
-    //
-    // returns true iff the xml file is a writer pipeline (otherwise it is
-    // assumed to be a reader pipeline)
-    bool readPipeline(const std::string& filename);
-    bool readPipeline(std::istream& input);
-
-private:
-    typedef std::map<std::string, std::string> map_t;
-
-    bool parseElement_Pipeline(const boost::property_tree::ptree&);
-    Stage *parseElement_anystage(const std::string& name,
-        const boost::property_tree::ptree& subtree);
-    Stage *parseElement_Reader(const boost::property_tree::ptree& tree);
-    Stage *parseElement_Filter(const boost::property_tree::ptree& tree);
-    Stage *parseElement_Writer(const boost::property_tree::ptree& tree);
-    Option parseElement_Option(const boost::property_tree::ptree& tree);
-    void collect_attributes(map_t& attrs,
-        const boost::property_tree::ptree& tree);
-    void parse_attributes(map_t& attrs,
-        const boost::property_tree::ptree& tree);
-
-private:
-    PipelineManager& m_manager;
-    bool m_isDebug;
-    uint32_t m_verboseLevel;
-    Options m_baseOptions;
-    std::string m_inputXmlFile;
-
-    PipelineReader& operator=(const PipelineReader&); // not implemented
-    PipelineReader(const PipelineReader&); // not implemented
-};
-
-} // namespace pdal
-
diff --git a/include/pdal/PipelineWriter.hpp b/include/pdal/PipelineWriter.hpp
index 9ca8c44..8fe262b 100644
--- a/include/pdal/PipelineWriter.hpp
+++ b/include/pdal/PipelineWriter.hpp
@@ -35,42 +35,21 @@
 #pragma once
 
 #include <pdal/pdal_internal.hpp>
-#include <pdal/Options.hpp>
-#include <pdal/Metadata.hpp>
 
+#include <map>
 #include <string>
 
-#include <boost/property_tree/ptree.hpp>
-
 namespace pdal
 {
 
-class PipelineManager;
+class Stage;
 
-class PDAL_DLL PipelineWriter
+namespace PipelineWriter
 {
-public:
-    PipelineWriter(const PipelineManager& manager) : m_manager(manager)
-        {}
-
-    void writePipeline(const std::string& filename) const;
-    void writePipeline(std::ostream& strm) const;
-
-    static void write_option_ptree(boost::property_tree::ptree& tree,
-        const Options& opts);
-
-    static void writeMetadata(boost::property_tree::ptree& tree,
-        const MetadataNode& input);
-    static void writeMetadata(boost::property_tree::ptree& tree,
-        const MetadataNodeList& input);
-
-    static boost::property_tree::ptree getMetadataEntry(
-        const MetadataNode& input);
-private:
-    const PipelineManager& m_manager;
+    typedef std::map<const Stage *, std::string> TagMap;
 
-    PipelineWriter& operator=(const PipelineWriter&); // not implemented
-    PipelineWriter(const PipelineWriter&); // not implemented
+    PDAL_DLL void writePipeline(Stage *s, const std::string& filename);
+    PDAL_DLL void writePipeline(Stage *s, std::ostream& strm);
 };
 
 } // namespace pdal
diff --git a/include/pdal/PluginManager.hpp b/include/pdal/PluginManager.hpp
index 7a736e8..15339c9 100644
--- a/include/pdal/PluginManager.hpp
+++ b/include/pdal/PluginManager.hpp
@@ -39,11 +39,12 @@
 
 #pragma once
 
-#include <pdal/pdal_export.hpp>
+#include <pdal/pdal_internal.hpp>
 #include <pdal/plugin.hpp>
 
 #include <map>
 #include <memory>
+#include <mutex>
 #include <string>
 #include <vector>
 
@@ -56,40 +57,44 @@ class DynamicLibrary;
  * I think PluginManager can eventually be a private header, only accessible
  * through the factories, but we'll leave it as public for now.
  */
+
 class PDAL_DLL PluginManager
 {
     typedef std::shared_ptr<DynamicLibrary> DynLibPtr;
-    typedef std::map<std::string, std::shared_ptr<DynamicLibrary>>
-        DynamicLibraryMap;
+    typedef std::map<std::string, DynLibPtr> DynamicLibraryMap;
     typedef std::vector<PF_ExitFunc> ExitFuncVec;
-    typedef std::vector<PF_RegisterParams> RegistrationVec;
+    typedef std::map<std::string, PF_RegisterParams> RegistrationInfoMap;
 
 public:
-    typedef std::map<std::string, PF_RegisterParams> RegistrationMap;
-
-    static PluginManager & getInstance();
+    PluginManager();
+    ~PluginManager();
 
-    // Returns true if initialization was successful.
+    static std::string description(const std::string& name);
+    static std::string link(const std::string& name);
+    static bool registerObject(const std::string& name,
+        const PF_RegisterParams *params);
     static bool initializePlugin(PF_InitFunc initFunc);
-
-    void loadAll(PF_PluginType type);
-    void loadAll(const std::string & pluginDirectory, PF_PluginType type);
-    bool loadPlugin(const std::string & pluginFilename);
-
-    void * createObject(const std::string & objectType);
-
-    static bool registerObject(const std::string& objectType,
-        const PF_RegisterParams* params);
-    const RegistrationMap& getRegistrationMap();
+    static bool loadPlugin(const std::string& pluginFilename);
+    static void loadAll(int type);
+    static void *createObject(const std::string& objectType);
+    static StringList names(int typeMask);
 
 private:
-    PluginManager();
-    ~PluginManager();
-
     // These functions return true if successful.
     bool shutdown();
     bool guessLoadByPath(const std::string & driverName);
     bool loadByPath(const std::string & path, PF_PluginType type);
+    bool libraryLoaded(const std::string& path);
+    void loadAll(const std::string& pluginDirectory, int type);
+    bool l_initializePlugin(PF_InitFunc initFunc);
+    void *l_createObject(const std::string& objectType);
+    bool l_registerObject(const std::string& name,
+        const PF_RegisterParams *params);
+    bool l_loadPlugin(const std::string& pluginFilename);
+    void l_loadAll(int type);
+    StringList l_names(int typeMask);
+    std::string l_description(const std::string& name);
+    std::string l_link(const std::string& name);
 
     DynamicLibrary *loadLibrary(const std::string& path,
         std::string& errorString);
@@ -97,8 +102,8 @@ private:
     PF_PluginAPI_Version m_version;
     DynamicLibraryMap m_dynamicLibraryMap;
     ExitFuncVec m_exitFuncVec;
-    RegistrationMap m_tempExactMatchMap;
-    RegistrationMap m_exactMatchMap;
+    RegistrationInfoMap m_plugins;
+    std::mutex m_mutex;
 
     // Disable copy/assignment.
     PluginManager(const PluginManager&);
diff --git a/include/pdal/PointContainer.hpp b/include/pdal/PointContainer.hpp
new file mode 100644
index 0000000..ce691f8
--- /dev/null
+++ b/include/pdal/PointContainer.hpp
@@ -0,0 +1,58 @@
+/******************************************************************************
+* Copyright (c) 2015, Hobu 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#pragma once
+
+#include <pdal/pdal_types.hpp>
+#include <pdal/Dimension.hpp>
+#include <pdal/PointLayout.hpp>
+
+namespace pdal
+{
+
+class PDAL_DLL PointContainer
+{
+    friend class PointTable;
+    friend class PointView;
+    friend class PointRef;
+private:
+    virtual void setFieldInternal(Dimension::Id::Enum dim, PointId idx,
+        const void *val) = 0;
+    virtual void getFieldInternal(Dimension::Id::Enum dim, PointId idx,
+        void *val) const = 0;
+public:
+    virtual PointLayoutPtr layout() const = 0;
+};
+
+} // namespace pdal
diff --git a/include/pdal/PointLayout.hpp b/include/pdal/PointLayout.hpp
index b80df48..43f256f 100644
--- a/include/pdal/PointLayout.hpp
+++ b/include/pdal/PointLayout.hpp
@@ -47,60 +47,188 @@ namespace pdal
 class PDAL_DLL PointLayout
 {
 public:
+    /**
+      Default constructor.
+    */
     PointLayout();
     virtual ~PointLayout() {}
 
+    /**
+      Mark a layout as finalized.  Dimensions can't be added to a finalized
+      PointLayout.
+    */
     void finalize();
 
+    /**
+      Determine if the PointLayout is finalized.
+
+      \return  Whether the PointLayout is finalized.
+    */
+    bool finalized() const
+        { return m_finalized; }
+
+    /**
+      Register a vector of dimensions.
+
+      \param ids  Vector of IDs to register.
+    */
     void registerDims(std::vector<Dimension::Id::Enum> ids);
+
+    /**
+      Register a list of dimensions.
+
+      \param id  Pointer to list of IDs to register.  The last ID in the list
+        must have the value Unknown.
+    */
     void registerDims(Dimension::Id::Enum *id);
+
+    /**
+      Register use of a standard dimension (declare that a point will contain
+      data for this dimension).  Use the default type for the dimension.
+
+      \param id  ID of dimension to be registered.
+    */
     void registerDim(Dimension::Id::Enum id);
 
-    // Register the dimension with the requested type if it hasn't already
-    // been registered with a "larger" type.  If the type of the dimension
-    // is already larger, this does nothing.
+    /**
+      Register use of a standard dimension (declare that a point will contain
+      data for this dimension) if it hasn't already been registered with a
+      "larger" type.  It the dimension already exists with a larger type, this
+      does nothing.
+
+      \param id  ID of dimension to be registered.
+      \param type  Minimum type to assign to the dimension.
+    */
     void registerDim(Dimension::Id::Enum id, Dimension::Type::Enum type);
 
-    // The type and size are REQUESTS, not absolutes.  If someone else
-    // has already registered with the same name, you get the existing
-    // dimension size/type.
-    Dimension::Id::Enum assignDim(
-            const std::string& name,
-            Dimension::Type::Enum type);
+    /**
+      Assign a non-existing (proprietary) dimension with the given name and
+      type.  No check is made to see if the dimension exists as a standard
+      (non-propietary) dimension.  If the dimension has already been
+      assigned as a proprietary dimension, update the type but use the
+      existing Id.  If the dimension has already been assigned with a 
+      larger type, this does nothing.
+
+      \param name  Name of the proprietary dimension to add.
+      \param type  Minimum type to assign to the dimension.
+      \return  ID of the new or existing dimension, or Unknown on failure.
+    */
+    Dimension::Id::Enum assignDim( const std::string& name,
+        Dimension::Type::Enum type);
+
+    /**
+      Register a dimension if one already exists with the given name using the
+      provided type.  If the dimension doesn't already exist, create it.
+
+      \param name  Name of the dimension to register or assign.
+      \param type  Requested type of the dimension.  Dimension will at least
+        accomodate values of this type.
+      \return  ID of dimension registered or assigned.
+    */
+    Dimension::Id::Enum registerOrAssignDim(const std::string name,
+        Dimension::Type::Enum type);
+
+    /**
+      Get a list of DimType objects that define the layout.
+
+      \return  A list of DimType objects.
+    */
+    DimTypeList dimTypes() const;
 
-    Dimension::Id::Enum registerOrAssignDim(
-            const std::string name,
-            Dimension::Type::Enum type);
+    /**
+      Get a DimType structure for a named dimension.
 
-    DimTypeList dimTypes() const;
+      \param name  Name of the dimension
+      \return  A DimType associated with the named dimension.  Returns a
+        DimType with an Unknown ID if the dimension isn't part of the layout.
+    */
     DimType findDimType(const std::string& name) const;
+
+    /**
+      Get the ID of a dimension (standard or proprietary) given its name.
+
+      \param name  Name of the dimension.
+      \return  ID of the dimension or Unknown.
+    */
     Dimension::Id::Enum findDim(const std::string& name) const;
+
+    /**
+      Get the ID of a proprietary dimension given its name.
+
+      \param name  Name of the dimension.
+      \return  ID of the dimension or Unknown.
+    */
     Dimension::Id::Enum findProprietaryDim(const std::string& name) const;
+
+    /**
+      Get the name of a dimension give its ID.  A dimension may have more
+      than one name.  The first one associated with the ID is returned.
+
+      \param id  ID of the dimension.
+      \return  A name associated with the dimension, or a NULL string.
+    */
     std::string dimName(Dimension::Id::Enum id) const;
 
-    // @return whether or not the PointLayout contains a given id
+    /**
+      Determine if the PointLayout uses the dimension with the given ID.
+      
+      \param id  ID of the dimension to check.
+      \return \c true if the layout uses the dimension, \c false otherwise.
+    */
     bool hasDim(Dimension::Id::Enum id) const;
 
-    // @return reference to vector of currently used dimensions
+    /**
+      Get a reference to vector of the IDs of currently used dimensions.
+
+      \return  Vector of IDs of dimensions that are part of the layout.
+    */
     const Dimension::IdList& dims() const;
 
-    // @return the current type for a given id
+    /**
+      Get the type of a dimension.
+      
+      \param id  ID of the dimension.
+      \return  Type of the dimension.
+    */
     Dimension::Type::Enum dimType(Dimension::Id::Enum id) const;
 
-    // @return the current size in bytes of the dimension
-    //         with the given id.
+    /**
+      Get the current size in bytes of the dimension.
+      
+      \param id  ID of the dimension.
+      \return  Size of the dimension in bytes.
+    */
     size_t dimSize(Dimension::Id::Enum id) const;
+
+    /**
+      Get the offset of the dimension in the layout.
+
+      \param id  ID of the dimension.
+      \return  Offset of the dimension in bytes.
+    */
     size_t dimOffset(Dimension::Id::Enum id) const;
+
+    /**
+      Get number of bytes that make up a point.  Returns the sum of the dimSize
+      for all dimensions in the layout.
+
+      \return  Size of a point in bytes.
+    */
     size_t pointSize() const;
 
+    /**
+      Get a pointer to a dimension's detail information.
+
+      \param id  ID of the dimension.
+      \return  A pointer a dimension's detail.
+    */
     const Dimension::Detail *dimDetail(Dimension::Id::Enum id) const;
 
 private:
     virtual bool update(Dimension::Detail dd, const std::string& name);
 
-    Dimension::Type::Enum resolveType(
-            Dimension::Type::Enum t1,
-            Dimension::Type::Enum t2);
+    Dimension::Type::Enum resolveType( Dimension::Type::Enum t1,
+        Dimension::Type::Enum t2);
 
 protected:
     std::vector<Dimension::Detail> m_detail;
diff --git a/include/pdal/PointRef.hpp b/include/pdal/PointRef.hpp
new file mode 100644
index 0000000..8e43b4c
--- /dev/null
+++ b/include/pdal/PointRef.hpp
@@ -0,0 +1,284 @@
+/******************************************************************************
+* Copyright (c) 2015, Hobu 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#pragma once
+
+#include <pdal/PointContainer.hpp>
+#include <pdal/PointLayout.hpp>
+#include <pdal/util/Utils.hpp>
+
+namespace pdal
+{
+
+class PDAL_DLL PointRef
+{
+public:
+    PointRef(PointContainer& container, PointId idx) :
+        m_container(container), m_layout(*container.layout()), m_idx(idx)
+    {}
+
+    bool hasDim(Dimension::Id::Enum dim) const
+    { return m_layout.hasDim(dim); }
+
+    template<class T>
+    T getFieldAs(Dimension::Id::Enum dim) const
+    {
+        T val(0);
+        bool success = true;
+        Everything e;
+        Dimension::Type::Enum type = m_layout.dimDetail(dim)->type();
+
+        m_container.getFieldInternal(dim, m_idx, &e);
+        switch (type)
+        {
+        case Dimension::Type::Unsigned8:
+            success = Utils::numericCast(e.u8, val);
+            break;
+        case Dimension::Type::Unsigned16:
+            success = Utils::numericCast(e.u16, val);
+            break;
+        case Dimension::Type::Unsigned32:
+            success = Utils::numericCast(e.u32, val);
+            break;
+        case Dimension::Type::Unsigned64:
+            success = Utils::numericCast(e.u64, val);
+            break;
+        case Dimension::Type::Signed8:
+            success = Utils::numericCast(e.s8, val);
+            break;
+        case Dimension::Type::Signed16:
+            success = Utils::numericCast(e.s16, val);
+            break;
+        case Dimension::Type::Signed32:
+            success = Utils::numericCast(e.s32, val);
+            break;
+        case Dimension::Type::Signed64:
+            success = Utils::numericCast(e.s64, val);
+            break;
+        case Dimension::Type::Float:
+            success = Utils::numericCast(e.f, val);
+            break;
+        case Dimension::Type::Double:
+            success = Utils::numericCast(e.d, val);
+            break;
+        case Dimension::Type::None:
+            val = 0;
+            break;
+        }
+        if (!success)
+        {
+            std::ostringstream oss;
+            oss << "Unable to fetch data and convert as requested: ";
+            oss << Dimension::name(dim) << ":" <<
+                Dimension::interpretationName(type) <<
+                "(" << (double)val << ") -> " << Utils::typeidName<T>();
+            throw pdal_error(oss.str());
+        }
+        return val;
+    }
+
+    template<typename T>
+    void setField(Dimension::Id::Enum dim, T val)
+    {
+        Dimension::Type::Enum type = m_layout.dimDetail(dim)->type();
+        Everything e;
+        bool success = false;
+
+        switch (type)
+        {
+        case Dimension::Type::Unsigned8:
+            success = Utils::numericCast(val, e.u8);
+            break;
+        case Dimension::Type::Unsigned16:
+            success = Utils::numericCast(val, e.u16);
+            break;
+        case Dimension::Type::Unsigned32:
+            success = Utils::numericCast(val, e.u32);
+            break;
+        case Dimension::Type::Unsigned64:
+            success = Utils::numericCast(val, e.u64);
+            break;
+        case Dimension::Type::Signed8:
+            success = Utils::numericCast(val, e.s8);
+            break;
+        case Dimension::Type::Signed16:
+            success = Utils::numericCast(val, e.s16);
+            break;
+        case Dimension::Type::Signed32:
+            success = Utils::numericCast(val, e.s32);
+            break;
+        case Dimension::Type::Signed64:
+            success = Utils::numericCast(val, e.s64);
+            break;
+        case Dimension::Type::Float:
+            success = Utils::numericCast(val, e.f);
+            break;
+        case Dimension::Type::Double:
+            success = Utils::numericCast(val, e.d);
+            break;
+        case Dimension::Type::None:
+            break;
+        }
+        if (success)
+            m_container.setFieldInternal(dim, m_idx, &e);
+    }
+
+    void setPointId(PointId idx)
+        { m_idx = idx; }
+    inline void getField(char *val, Dimension::Id::Enum d,
+        Dimension::Type::Enum type) const;
+    inline void setField(Dimension::Id::Enum dim,
+        Dimension::Type::Enum type, const void *val);
+
+    /// Fill a buffer with point data specified by the dimension list.
+    /// \param[in] dims  List of dimensions/types to retrieve.
+    /// \param[in] idx   Index of point to get.
+    /// \param[in] buf   Pointer to buffer to fill.
+    void getPackedData(const DimTypeList& dims, char *buf) const
+    {
+        for (auto di = dims.begin(); di != dims.end(); ++di)
+        {
+            getField(buf, di->m_id, di->m_type);
+            buf += Dimension::size(di->m_type);
+        }
+    }
+
+    /// Load the point buffer from memory whose arrangement is specified
+    /// by the dimension list.
+    /// \param[in] dims  Dimension/types of data in packed order
+    /// \param[in] idx   Index of point to write.
+    /// \param[in] buf   Packed data buffer.
+    void setPackedData(const DimTypeList& dims, const char *buf)
+    {
+        for (auto di = dims.begin(); di != dims.end(); ++di)
+        {
+            setField(di->m_id, di->m_type, (const void *)buf);
+            buf += Dimension::size(di->m_type);
+        }
+    }
+
+
+private:
+    PointContainer& m_container;
+    PointLayout& m_layout;
+    PointId m_idx;
+};
+
+inline void PointRef::getField(char *val, Dimension::Id::Enum d,
+    Dimension::Type::Enum type) const
+{
+    Everything e;
+
+    switch (type)
+    {
+    case Dimension::Type::Float:
+        e.f = getFieldAs<float>(d);
+        break;
+    case Dimension::Type::Double:
+        e.d = getFieldAs<double>(d);
+        break;
+    case Dimension::Type::Signed8:
+        e.s8 = getFieldAs<int8_t>(d);
+        break;
+    case Dimension::Type::Signed16:
+        e.s16 = getFieldAs<int16_t>(d);
+        break;
+    case Dimension::Type::Signed32:
+        e.s32 = getFieldAs<int32_t>(d);
+        break;
+    case Dimension::Type::Signed64:
+        e.s64 = getFieldAs<int64_t>(d);
+        break;
+    case Dimension::Type::Unsigned8:
+        e.u8 = getFieldAs<uint8_t>(d);
+        break;
+    case Dimension::Type::Unsigned16:
+        e.u16 = getFieldAs<uint16_t>(d);
+        break;
+    case Dimension::Type::Unsigned32:
+        e.u32 = getFieldAs<uint32_t>(d);
+        break;
+    case Dimension::Type::Unsigned64:
+        e.u64 = getFieldAs<uint64_t>(d);
+        break;
+    case Dimension::Type::None:
+        break;
+    }
+    memcpy(val, &e, Dimension::size(type));
+}
+
+inline void PointRef::setField(Dimension::Id::Enum dim,
+    Dimension::Type::Enum type, const void *val)
+{
+    Everything e;
+
+    memcpy(&e, val, Dimension::size(type));
+    switch (type)
+    {
+        case Dimension::Type::Float:
+            setField(dim, e.f);
+            break;
+        case Dimension::Type::Double:
+            setField(dim, e.d);
+            break;
+        case Dimension::Type::Signed8:
+            setField(dim, e.s8);
+            break;
+        case Dimension::Type::Signed16:
+            setField(dim, e.s16);
+            break;
+        case Dimension::Type::Signed32:
+            setField(dim, e.s32);
+            break;
+        case Dimension::Type::Signed64:
+            setField(dim, e.s64);
+            break;
+        case Dimension::Type::Unsigned8:
+            setField(dim, e.u8);
+            break;
+        case Dimension::Type::Unsigned16:
+            setField(dim, e.u16);
+            break;
+        case Dimension::Type::Unsigned32:
+            setField(dim, e.u32);
+            break;
+        case Dimension::Type::Unsigned64:
+            setField(dim, e.u64);
+            break;
+        case Dimension::Type::None:
+            break;
+    }
+}
+
+} // namespace pdal
diff --git a/include/pdal/PointTable.hpp b/include/pdal/PointTable.hpp
index ca83771..d19c3ef 100644
--- a/include/pdal/PointTable.hpp
+++ b/include/pdal/PointTable.hpp
@@ -37,30 +37,42 @@
 #include <set>
 #include <vector>
 
+#include "pdal/SpatialReference.hpp"
 #include "pdal/Dimension.hpp"
+#include "pdal/PointContainer.hpp"
 #include "pdal/PointLayout.hpp"
 #include "pdal/Metadata.hpp"
 
 namespace pdal
 {
 
-class PDAL_DLL BasePointTable
+class PDAL_DLL BasePointTable : public PointContainer
 {
     friend class PointView;
 
+protected:
+    BasePointTable(PointLayout& layout) : m_metadata(new Metadata()),
+        m_layoutRef(layout)
+    {}
+
 public:
-    BasePointTable() : m_metadata(new Metadata())
-        {}
     virtual ~BasePointTable()
         {}
 
-public:
     // Layout operations.
-    virtual PointLayoutPtr layout() const = 0;
+    virtual PointLayoutPtr layout() const
+        { return &m_layoutRef; }
 
     // Metadata operations.
     MetadataNode metadata()
         { return m_metadata->getNode(); }
+    virtual void finalize()
+        { m_layoutRef.finalize(); }
+    void setSpatialReference(const SpatialReference& srs)
+    {
+        clearSpatialReferences();
+        addSpatialReference(srs);
+    }
     void clearSpatialReferences()
         { m_spatialRefs.clear(); }
     void addSpatialReference(const SpatialReference& srs)
@@ -77,61 +89,134 @@ public:
         return m_spatialRefs.size() ?
             *m_spatialRefs.begin() : SpatialReference();
     }
+    virtual bool supportsView() const
+        { return false; }
 
     MetadataNode privateMetadata(const std::string& name);
 
 private:
     // Point data operations.
     virtual PointId addPoint() = 0;
+
+protected:
     virtual char *getPoint(PointId idx) = 0;
-    virtual void setField(const Dimension::Detail *d, PointId idx,
-        const void *value) = 0;
-    virtual void getField(const Dimension::Detail *d, PointId idx,
-        void *value) = 0;
 
 protected:
     MetadataPtr m_metadata;
     std::set<SpatialReference> m_spatialRefs;
+    PointLayout& m_layoutRef;
 };
 typedef BasePointTable& PointTableRef;
 typedef BasePointTable const & ConstPointTableRef;
 
+class PDAL_DLL SimplePointTable : public BasePointTable
+{
+
+protected:
+    SimplePointTable(PointLayout& layout) : BasePointTable(layout)
+        {}
+
+protected:
+    std::size_t pointsToBytes(point_count_t numPts) const
+        { return m_layoutRef.pointSize() * numPts; }
+
+private:
+    virtual void setFieldInternal(Dimension::Id::Enum id, PointId idx,
+        const void *value);
+    virtual void getFieldInternal(Dimension::Id::Enum id, PointId idx,
+        void *value) const;
+
+    // The number of points in each memory block.
+    char *getDimension(const Dimension::Detail *d, PointId idx)
+        { return getPoint(idx) + d->offset(); }
+
+    const char *getDimension(const Dimension::Detail *d, PointId idx) const
+    {
+        SimplePointTable *ncThis = const_cast<SimplePointTable *>(this);
+        return ncThis->getPoint(idx) + d->offset();
+    }
+};
 
 // This provides a context for processing a set of points and allows the library
 // to be used to process multiple point sets simultaneously.
-class PDAL_DLL PointTable : public BasePointTable
+class PDAL_DLL PointTable : public SimplePointTable
 {
 private:
     // Point storage.
     std::vector<char *> m_blocks;
     point_count_t m_numPts;
-    std::unique_ptr<PointLayout> m_layout;
+    static const point_count_t m_blockPtCnt = 65536;
 
 public:
-    PointTable() : m_numPts(0), m_layout(new PointLayout())
+    PointTable() : SimplePointTable(m_layout), m_numPts(0)
         {}
     virtual ~PointTable();
+    virtual bool supportsView() const
+        { return true; }
 
-    virtual PointLayoutPtr layout() const
-        { return m_layout.get(); }
+protected:
+    virtual char *getPoint(PointId idx);
 
 private:
     // Point data operations.
     virtual PointId addPoint();
-    virtual char *getPoint(PointId idx);
-    virtual void setField(const Dimension::Detail *d, PointId idx,
-        const void *value);
-    virtual void getField(const Dimension::Detail *d, PointId idx,
-        void *value);
 
-    // The number of points in each memory block.
-    static const point_count_t m_blockPtCnt = 65536;
+    PointLayout m_layout;
+};
 
-    char *getDimension(const Dimension::Detail *d, PointId idx)
-        { return getPoint(idx) + d->offset(); }
+/// A StreamPointTable must provide storage for point data up to its capacity.
+/// It must implement getPoint() which returns a pointer to a buffer of
+/// sufficient size to contain a point's data.  The minimum size required
+/// is constant and can be determined by calling pointsToBytes(1) in the
+/// finalize() method.
+class PDAL_DLL StreamPointTable : public SimplePointTable
+{
+protected:
+    StreamPointTable(PointLayout& layout) : SimplePointTable(layout)
+    {}
 
-    std::size_t pointsToBytes(point_count_t numPts)
-        { return m_layout->pointSize() * numPts; }
+public:
+    /// Called when a new point should be added.  Probably a no-op for
+    /// streaming.
+    virtual PointId addPoint()
+    { return 0; }
+    /// Called when execute() is started.  Typically used to set buffer size
+    /// when all dimensions are known.
+    virtual void finalize()
+    {}
+    /// Called when the contents of StreamPointTable have been consumed and
+    /// the point data will be potentially overwritten.
+    virtual void reset()
+    {}
+    virtual point_count_t capacity() const = 0;
+};
+
+class PDAL_DLL FixedPointTable : public StreamPointTable
+{
+public:
+    FixedPointTable(point_count_t capacity) : StreamPointTable(m_layout),
+        m_capacity(capacity)
+    {}
+
+    virtual void finalize()
+    {
+        if (!m_layout.finalized())
+        {
+            BasePointTable::finalize();
+            m_buf.resize(pointsToBytes(m_capacity + 1));
+        }
+    }
+
+    point_count_t capacity() const
+        { return m_capacity; }
+protected:
+    virtual char *getPoint(PointId idx)
+        { return m_buf.data() + pointsToBytes(idx); }
+
+private:
+    std::vector<char> m_buf;
+    point_count_t m_capacity;
+    PointLayout m_layout;
 };
 
 } //namespace
diff --git a/include/pdal/PointView.hpp b/include/pdal/PointView.hpp
index 390a816..76ceb87 100644
--- a/include/pdal/PointView.hpp
+++ b/include/pdal/PointView.hpp
@@ -36,7 +36,9 @@
 
 #include <pdal/util/Bounds.hpp>
 #include <pdal/pdal_internal.hpp>
+#include <pdal/PointContainer.hpp>
 #include <pdal/PointLayout.hpp>
+#include <pdal/PointRef.hpp>
 #include <pdal/PointTable.hpp>
 
 #include <memory>
@@ -63,25 +65,14 @@ class PointViewIter;
 typedef std::shared_ptr<PointView> PointViewPtr;
 typedef std::set<PointViewPtr, PointViewLess> PointViewSet;
 
-class PDAL_DLL PointView
+class PDAL_DLL PointView : public PointContainer
 {
     friend class plang::BufferedInvocation;
-    friend class PointRef;
+    friend class PointIdxRef;
     friend struct PointViewLess;
 public:
-    PointView(PointTableRef pointTable) : m_pointTable(pointTable),
-        m_size(0), m_id(0)
-    {
-        static int lastId = 0;
-        m_id = ++lastId;
-    }
-
-    PointView(PointTableRef pointTable, const SpatialReference& srs) :
-        m_pointTable(pointTable), m_size(0), m_id(0), m_spatialReference(srs)
-    {
-        static int lastId = 0;
-        m_id = ++lastId;
-    }
+	PointView(PointTableRef pointTable);
+	PointView(PointTableRef pointTable, const SpatialReference& srs);
 
     virtual ~PointView()
     {}
@@ -117,6 +108,9 @@ public:
         return PointViewPtr( new PointView(m_pointTable, m_spatialReference));
     }
 
+    PointRef point(PointId id)
+        { return PointRef(*this, id); }
+
     template<class T>
     T getFieldAs(Dimension::Id::Enum dim, PointId pointIndex) const;
 
@@ -137,7 +131,7 @@ public:
 
     bool compare(Dimension::Id::Enum dim, PointId id1, PointId id2)
     {
-        const Dimension::Detail *dd = m_pointTable.layout()->dimDetail(dim);
+        const Dimension::Detail *dd = layout()->dimDetail(dim);
 
         switch (dd->type())
         {
@@ -200,19 +194,19 @@ public:
 
     void dump(std::ostream& ostr) const;
     bool hasDim(Dimension::Id::Enum id) const
-        { return m_pointTable.layout()->hasDim(id); }
+        { return layout()->hasDim(id); }
     std::string dimName(Dimension::Id::Enum id) const
-        { return m_pointTable.layout()->dimName(id); }
+        { return layout()->dimName(id); }
     Dimension::IdList dims() const
-        { return m_pointTable.layout()->dims(); }
+        { return layout()->dims(); }
     std::size_t pointSize() const
-        { return m_pointTable.layout()->pointSize(); }
+        { return layout()->pointSize(); }
     std::size_t dimSize(Dimension::Id::Enum id) const
-        { return m_pointTable.layout()->dimSize(id); }
+        { return layout()->dimSize(id); }
     Dimension::Type::Enum dimType(Dimension::Id::Enum id) const
-     { return m_pointTable.layout()->dimType(id);}
+         { return layout()->dimType(id);}
     DimTypeList dimTypes() const
-        { return m_pointTable.layout()->dimTypes(); }
+        { return layout()->dimTypes(); }
     PointLayoutPtr layout() const
         { return m_pointTable.layout(); }
     void setSpatialReference(const SpatialReference& spatialRef)
@@ -273,15 +267,19 @@ protected:
     SpatialReference m_spatialReference;
 
 private:
+    static int m_lastId;
+
     template<typename T_IN, typename T_OUT>
     bool convertAndSet(Dimension::Id::Enum dim, PointId idx, T_IN in);
 
-    inline void setFieldInternal(Dimension::Id::Enum dim, PointId pointIndex,
-        const void *value);
+    virtual void setFieldInternal(Dimension::Id::Enum dim, PointId idx,
+        const void *buf);
+    virtual void getFieldInternal(Dimension::Id::Enum dim, PointId idx,
+        void *buf) const
+    { m_pointTable.getFieldInternal(dim, m_index[idx], buf); }
+
     template<class T>
     T getFieldInternal(Dimension::Id::Enum dim, PointId pointIndex) const;
-    inline void getFieldInternal(Dimension::Id::Enum dim, PointId pointIndex,
-        void *value) const;
     inline PointId getTemp(PointId id);
     void freeTemp(PointId id)
         { m_temps.push(id); }
@@ -394,7 +392,7 @@ inline T PointView::getFieldAs(Dimension::Id::Enum dim,
 {
     assert(pointIndex < m_size);
     T retval;
-    const Dimension::Detail *dd = m_pointTable.layout()->dimDetail(dim);
+    const Dimension::Detail *dd = layout()->dimDetail(dim);
     double val;
 
     switch (dd->type())
@@ -464,7 +462,7 @@ bool PointView::convertAndSet(Dimension::Id::Enum dim, PointId idx, T_IN in)
 template<typename T>
 void PointView::setField(Dimension::Id::Enum dim, PointId idx, T val)
 {
-    const Dimension::Detail *dd = m_pointTable.layout()->dimDetail(dim);
+    const Dimension::Detail *dd = layout()->dimDetail(dim);
 
     bool ok = true;
     switch (dd->type())
@@ -514,27 +512,19 @@ void PointView::setField(Dimension::Id::Enum dim, PointId idx, T val)
     }
 }
 
-
-inline void PointView::getFieldInternal(Dimension::Id::Enum dim,
-    PointId id, void *buf) const
-{
-    m_pointTable.getField(m_pointTable.layout()->dimDetail(dim),
-        m_index[id], buf);
-}
-
-
-inline void PointView::setFieldInternal(Dimension::Id::Enum dim,
-    PointId id, const void *value)
+/**
+void PointView::setFieldInternal(Dimension::Id::Enum dim, PointId idx,
+    const void *value)
 {
     PointId rawId = 0;
-    if (id == size())
+    if (idx == size())
     {
         rawId = m_pointTable.addPoint();
         m_index.push_back(rawId);
         m_size++;
         assert(m_temps.empty());
     }
-    else if (id > size())
+    else if (idx > size())
     {
         std::cerr << "Point index must increment.\n";
         //error - throw?
@@ -542,12 +532,11 @@ inline void PointView::setFieldInternal(Dimension::Id::Enum dim,
     }
     else
     {
-        rawId = m_index[id];
+        rawId = m_index[idx];
     }
-    m_pointTable.setField(m_pointTable.layout()->dimDetail(dim),
-        rawId, value);
+    m_pointTable.setFieldInternal(dim, rawId, value);
 }
-
+**/
 
 inline void PointView::appendPoint(const PointView& buffer, PointId id)
 {
diff --git a/include/pdal/PointViewIter.hpp b/include/pdal/PointViewIter.hpp
index 9974fed..e097f1c 100644
--- a/include/pdal/PointViewIter.hpp
+++ b/include/pdal/PointViewIter.hpp
@@ -41,7 +41,7 @@
 namespace pdal
 {
 
-class PointRef
+class PointIdxRef
 {
 private:
     PointView *m_buf;
@@ -49,24 +49,24 @@ private:
     bool m_tmp;
 
 public:
-    PointRef() : m_buf(NULL), m_id(0), m_tmp(false)
+    PointIdxRef() : m_buf(NULL), m_id(0), m_tmp(false)
     {}
-    PointRef(const PointRef& r) : m_buf(r.m_buf)
+    PointIdxRef(const PointIdxRef& r) : m_buf(r.m_buf)
     {
         m_id = m_buf->getTemp(r.m_id);
         m_tmp = true;
     }
-    // This is the ctor used to make a PointRef from an iterator.
-    PointRef(PointView *buf, PointId id) : m_buf(buf), m_id(id), m_tmp(false)
+    // This is the ctor used to make a PointIdxRef from an iterator.
+    PointIdxRef(PointView *buf, PointId id) : m_buf(buf), m_id(id), m_tmp(false)
     {}
 
-    ~PointRef()
+    ~PointIdxRef()
     {
         if (m_tmp)
             m_buf->freeTemp(m_id);
     }
 
-    PointRef& operator=(const PointRef& r)
+    PointIdxRef& operator=(const PointIdxRef& r)
     {
         assert(m_buf == NULL || r.m_buf == m_buf);
         if (!m_buf)
@@ -80,10 +80,10 @@ public:
         return *this;
     }
 
-    bool compare(Dimension::Id::Enum dim, const PointRef& p) const
+    bool compare(Dimension::Id::Enum dim, const PointIdxRef& p) const
         { return m_buf->compare(dim, m_id, p.m_id); }
 
-    void swap(PointRef& p)
+    void swap(PointIdxRef& p)
     {
         PointId id = m_buf->m_index[m_id];
         m_buf->m_index[m_id] = p.m_buf->m_index[p.m_id];
@@ -91,13 +91,13 @@ public:
     }
 };
 
-inline void swap(PointRef && p1, PointRef && p2)
+inline void swap(PointIdxRef && p1, PointIdxRef && p2)
 {
     p1.swap(p2);
 }
 
 class PointViewIter :
-    public std::iterator<std::random_access_iterator_tag, PointRef,
+    public std::iterator<std::random_access_iterator_tag, PointIdxRef,
         point_count_t>
 {
 protected:
@@ -106,11 +106,11 @@ protected:
 
 public:
     typedef std::random_access_iterator_tag iterator_category;
-    typedef std::iterator<iterator_category, PointRef>::value_type
+    typedef std::iterator<iterator_category, PointIdxRef>::value_type
             value_type;
-    typedef std::iterator<iterator_category, PointRef>::difference_type
+    typedef std::iterator<iterator_category, PointIdxRef>::difference_type
             difference_type;
-    typedef PointRef reference;
+    typedef PointIdxRef reference;
     typedef void * pointer;
 
 
@@ -148,12 +148,12 @@ public:
     bool operator>(const PointViewIter& i)
         { return m_id > i.m_id; }
 
-    PointRef operator*() const
-        { return PointRef(m_buf, m_id); }
+    PointIdxRef operator*() const
+        { return PointIdxRef(m_buf, m_id); }
     pointer operator->() const
         { return NULL; }
-    PointRef operator[](const difference_type& /*n*/) const
-        { return PointRef(m_buf, m_id); }
+    PointIdxRef operator[](const difference_type& /*n*/) const
+        { return PointIdxRef(m_buf, m_id); }
 };
 
 } // namespace pdal
diff --git a/include/pdal/Polygon.hpp b/include/pdal/Polygon.hpp
new file mode 100644
index 0000000..b5c6854
--- /dev/null
+++ b/include/pdal/Polygon.hpp
@@ -0,0 +1,129 @@
+/******************************************************************************
+* Copyright (c) 2016, Howard Butler (howard at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+#pragma once
+
+#include <pdal/GDALUtils.hpp>
+#include <pdal/GEOSUtils.hpp>
+#include <pdal/Log.hpp>
+#include <pdal/PointRef.hpp>
+#include <pdal/SpatialReference.hpp>
+#include <pdal/util/Bounds.hpp>
+
+#include <geos_c.h>
+
+namespace pdal
+{
+
+namespace geos { class ErrorHandler; }
+
+class PDAL_DLL Polygon
+{
+public:
+    Polygon();
+    Polygon(const std::string& wkt_or_json,
+           SpatialReference ref = SpatialReference(),
+           geos::ErrorHandler& handler = geos::ErrorHandler::get());
+    Polygon(const BOX2D&);
+    Polygon(const BOX3D&);
+    Polygon(const Polygon&);
+    Polygon(GEOSGeometry* g, const SpatialReference& srs,
+        geos::ErrorHandler& ctx);
+    Polygon(OGRGeometryH g, const SpatialReference& srs,
+        geos::ErrorHandler& ctx);
+    Polygon& operator=(const Polygon&);
+private:
+    Polygon(const std::string& wkt_or_json, SpatialReference ref,
+        GEOSContextHandle_t ctx);
+    Polygon(GEOSGeometry* g, const SpatialReference& srs,
+        GEOSContextHandle_t ctx);
+
+public:
+    ~Polygon();
+    void update(const std::string& wkt_or_json,
+        SpatialReference ref = SpatialReference());
+
+    void setSpatialReference( const SpatialReference& ref)
+        { m_srs = ref; }
+
+    const SpatialReference& getSpatialReference() const
+        { return m_srs; }
+
+    Polygon transform(const SpatialReference& ref) const;
+
+    bool equals(const Polygon& other, double tolerance=0.0001) const;
+    bool operator==(const Polygon& other) const;
+    bool operator!=(const Polygon& other) const;
+    bool operator<(const Polygon& other) const
+        { return wkt() < other.wkt(); }
+
+    Polygon simplify(double distance_tolerance, double area_tolerance) const;
+    double area() const;
+
+    bool covers(PointRef& ref) const;
+    bool equal(const Polygon& p) const;
+
+    bool valid() const;
+    std::string validReason() const;
+
+    std::string wkt(double precision=8, bool bOutputZ=false) const;
+    std::string json(double precision=8) const;
+
+    BOX3D bounds() const;
+
+    operator bool () const
+        { return m_geom != NULL; }
+
+private:
+    void initializeFromBounds(const BOX3D& b);
+    GEOSGeometry *m_geom;
+    const GEOSPreparedGeometry *m_prepGeom;
+
+    SpatialReference m_srs;
+    GEOSContextHandle_t m_ctx;
+
+    void prepare();
+
+    friend PDAL_DLL std::ostream& operator<<(std::ostream& ostr,
+        const Polygon& p);
+    friend PDAL_DLL std::istream& operator>>(std::istream& istr,
+        Polygon& p);
+};
+
+
+PDAL_DLL std::ostream& operator<<(std::ostream& ostr,
+    const Polygon& p);
+PDAL_DLL std::istream& operator>>(std::istream& istr, Polygon& p);
+
+} // namespace pdal
+
diff --git a/include/pdal/Reader.hpp b/include/pdal/Reader.hpp
index 1e8b42b..8325a10 100644
--- a/include/pdal/Reader.hpp
+++ b/include/pdal/Reader.hpp
@@ -37,6 +37,8 @@
 #include <pdal/Stage.hpp>
 #include <pdal/Options.hpp>
 
+#include <functional>
+
 namespace pdal
 {
 
@@ -71,7 +73,6 @@ private:
     virtual void readerProcessOptions(const Options& options);
     virtual point_count_t read(PointViewPtr /*view*/, point_count_t /*num*/)
         { return 0; }
-    virtual boost::property_tree::ptree serializePipeline() const;
 };
 
 } // namespace pdal
diff --git a/include/pdal/SpatialReference.hpp b/include/pdal/SpatialReference.hpp
index d890fbb..d7e5265 100644
--- a/include/pdal/SpatialReference.hpp
+++ b/include/pdal/SpatialReference.hpp
@@ -40,6 +40,7 @@ namespace pdal
 {
 
 class PDAL_DLL BOX3D;
+class PDAL_DLL MetadataNode;
 
 /// A SpatialReference defines a model of the earth that is used to describe
 /// the location of points.
@@ -58,31 +59,66 @@ class PDAL_DLL SpatialReference
 public:
     enum WKTModeFlag
     {
-        eHorizontalOnly = 1,
-        eCompoundOK = 2
+        eHorizontalOnly = 1,  ///<  Only Consider horizontal SRS.
+        eCompoundOK = 2       ///<  Consider horizontal and vertical SRS
     };
 
-    /// Default constructor.
+    /**
+      Constructor.  Create an empty SRS.
+    */
     SpatialReference()
     {}
 
-    // calls setFromUserInput() with the given string
-    SpatialReference(const std::string& userInput);
+    /**
+      Construct a spatial reference from well-known text.
 
+      \param wkt  Well-known text from which to construct SRS.
+    */
+    SpatialReference(const std::string& wkt);
+
+    /**
+      Determine if this spatial reference is the same as another.
+
+      \param other  SRS to compare with this one.
+      \return  \c true if the SRSs match
+    */
     bool equals(const SpatialReference& other) const;
+
+    /**
+      See \ref equals.
+    */
     bool operator==(const SpatialReference& other) const;
+
+    /**
+      Determine if this spatial reference is different from another.
+
+      \param other  SRS to compare with this one.
+      \return \c true if the SRSs don't match.
+    */
     bool operator!=(const SpatialReference& other) const;
+
+    /**
+       Determine if the well-known text representation of this SRS is
+       lexographically less than that of another.
+
+       \param other  SRS to compare with this one.
+       \return  \c true if this SRS is lexographically less.
+    */
     bool operator<(const SpatialReference& other) const
         { return m_wkt < other.m_wkt; }
 
-    // Returns true iff the object doesn't contain a valid srs.
-    // (this is a cleaner way of saying "getWKT() == "")
+    /**
+      Returns true iff the object doesn't contain a valid srs.
+
+      \return  Whether the SRS is empty.
+    */
     bool empty() const;
 
 
     // Returns true of OSR can validate the SRS
     bool valid() const;
 
+    // (this is a cleaner way of saying "getWKT() == "")
     /// Returns the OGC WKT describing Spatial Reference System.
     /// If GDAL is linked, it uses GDAL's operations and methods to determine
     /// the WKT.  If GDAL is not linked, no WKT is returned.
@@ -93,8 +129,6 @@ public:
     /// available.
     std::string getWKT(WKTModeFlag mode_flag = eHorizontalOnly) const;
     std::string getWKT(WKTModeFlag mode_flag, bool pretty) const;
-    std::string getRawWKT() const
-        { return m_wkt; }
 
     /// Sets the SRS using GDAL's OGC WKT. If GDAL is not linked, this
     /// operation has no effect.
@@ -116,7 +150,9 @@ public:
     std::string getProj4() const;
 
     std::string getHorizontal() const;
+    std::string getHorizontalUnits() const;
     std::string getVertical() const;
+    std::string getVerticalUnits() const;
 
     /// Sets the Proj.4 string describing the Spatial Reference System.
     /// If GDAL is linked, it uses GDAL's operations and methods to determine
@@ -127,9 +163,12 @@ public:
     void setProj4(std::string const& v);
 
     void dump() const;
+    MetadataNode toMetadata() const;
 
     bool isGeographic() const;
+    bool isGeocentric() const;
     int computeUTMZone(const BOX3D& box) const;
+
     const std::string& getName() const;
     static int calculateZone(double lon, double lat);
 
diff --git a/include/pdal/Stage.hpp b/include/pdal/Stage.hpp
index 7d8282c..c5c5b4d 100644
--- a/include/pdal/Stage.hpp
+++ b/include/pdal/Stage.hpp
@@ -34,30 +34,39 @@
 
 #pragma once
 
+#include <list>
+
 #include <pdal/pdal_internal.hpp>
-#include <pdal/plugin.hpp>
 
 #include <pdal/Dimension.hpp>
 #include <pdal/Log.hpp>
 #include <pdal/Metadata.hpp>
 #include <pdal/Options.hpp>
+#include <pdal/PipelineWriter.hpp>
 #include <pdal/PointTable.hpp>
+#include <pdal/PointRef.hpp>
 #include <pdal/PointView.hpp>
 #include <pdal/QuickInfo.hpp>
 #include <pdal/SpatialReference.hpp>
-#include <pdal/UserCallback.hpp>
-
-#include <boost/property_tree/ptree.hpp>
 
 namespace pdal
 {
 
-class Iterator;
 class StageRunner;
 class StageWrapper;
 
+/**
+  A stage performs the actual processing in PDAL.  Stages may read data,
+  modify or filter read data, create metadata or write processed data.
+
+  Stages are linked with setInput() into a pipeline.  The pipeline is
+  run with by calling in sequence \ref prepare() and \ref execute() on the
+  stage at the end of the pipeline.  PipelineManager can also be used to
+  create and run a pipeline.
+*/
 class PDAL_DLL Stage
 {
+    FRIEND_TEST(OptionsTest, conditional);
     friend class StageWrapper;
     friend class StageRunner;
 public:
@@ -65,74 +74,205 @@ public:
     virtual ~Stage()
         {}
 
+    /**
+      Add a stage to the input list of this stage.
+
+      \param input  Stage to use as input.
+    */
     void setInput(Stage& input)
         { m_inputs.push_back(&input); }
 
+    /**
+      Set a file descriptor to which progress information should be written.
+
+      \param fd  Progress file descriptor.
+    */
     void setProgressFd(int fd)
         { m_progressFd = fd; }
 
-    QuickInfo preview()
-    {
-        l_processOptions(m_options);
-        processOptions(m_options);
-        return inspect();
-    }
+    /**
+      Retrieve some basic point information without reading all data when
+      possible.  Usually implemented only by Readers.
+    */
+    QuickInfo preview();
+
+    /**
+      Prepare a stage for execution.  This function needs to be called on the
+      terminal stage of a pipeline (linked set of stages) before \ref execute
+      can be called.  Prepare recurses through all input stages.
+
+      \param table  PointTable being used for stage pipeline.
+    */
     void prepare(PointTableRef table);
+
+    /**
+      Execute a prepared pipeline (linked set of stages).
+
+      This performs the action associated with the stage by executing the
+      \ref run function of each stage in depth first order.  Each stage is run
+      to completion (all points are processed) before the next stages is run.o
+
+      \param table  Point table being used for stage pipeline.  This must be
+        the same \ref table used in the \ref prepare function.
+    */
     PointViewSet execute(PointTableRef table);
 
-    void setSpatialReference(SpatialReference const&);
+    /**
+      Execute a prepared pipeline (linked set of stages) in streaming mode.
+
+      This performs the action associated with the stage by executing the
+      \ref processOne function of each stage in depth first order.  Points
+      are processed up to the capacity of the provided StreamPointTable.
+      Not all stages support streaming mode and an exception will be thrown
+      when attempting to \ref execute an unsupported stage.
+
+      Streaming points can reduce memory consumption, but may limit access
+      to algorithms that need to operate on full point sets.
+
+      \param table  Streming point table used for stage pipeline.  This must be
+        the same \ref table used in the \ref prepare function.
+
+    */
+    void execute(StreamPointTable& table);
+
+    /**
+      Set the spatial reference of a stage.
+
+      Set the spatial reference that will override that being carried by the
+      PointView being processed.  This is usually used when reprojecting data
+      to a new spatial reference.  The stage spatial reference will be carried
+      by PointViews processes by this stage to subsequent stages.
+
+      \param srs  Spatial reference to set.
+    */
+    void setSpatialReference(SpatialReference const& srs);
+
+    /**
+      Get the spatial reference of the stage.
+
+      Get the spatial reference that will override that being carried by the
+      PointView being processed.  This is usually used when reprojecting data
+      to a new spatial reference.  The stage spatial reference will be carried
+      by PointViews processes by this stage to subsequent stages.
+
+      \return  The stage's spatial reference.
+    */
     const SpatialReference& getSpatialReference() const;
-    const Options& getOptions() const
-        { return m_options; }
+
+    /**
+      Set a stage's options.
+
+      Set the options on a stage, clearing all previously set options.
+
+      \param options  Options to set.
+    */
     void setOptions(Options options)
         { m_options = options; }
+
+    /**
+      Add options if an option with the same name doesn't already exist on
+      the stage.
+
+      \param opts  Options to add.
+    */
     void addConditionalOptions(const Options& opts);
+
+    /**
+      Add options to the existing option set.
+
+      \param opts  Options to add.
+    */
     void addOptions(const Options& opts)
     {
         for (const auto& o : opts.getOptions())
             m_options.add(o);
     }
+
+    /**
+      Remove options from a stage's option set.
+
+      \param opts  Options to remove.
+    */
     void removeOptions(const Options& opts)
     {
         for (const auto& o : opts.getOptions())
             m_options.remove(o);
     }
-    virtual boost::property_tree::ptree serializePipeline() const = 0;
+
+    /**
+      Return the stage's log pointer.
+
+      \return  Log pointer.
+    */
     virtual LogPtr log() const
         { return m_log; }
+
+    /**
+      Determine whether the stage is in debug mode or not.
+
+      \return  The stage's debug state.
+    */
     bool isDebug() const
-        {
-            return m_options.getValueOrDefault<bool>("debug", false);
-        }
-    bool isVerbose() const
-        { return (getVerboseLevel() != 0 ); }
-    uint32_t getVerboseLevel() const
-        {
-            return m_options.getValueOrDefault<uint32_t>("verbose", 0);
-        }
+        { return m_options.getValueOrDefault<bool>("debug", false); }
+
+    /**
+      Return the name of a stage.
+
+      \return  The stage's name.
+    */
     virtual std::string getName() const = 0;
+
+    /**
+      Return the tag name of a stage.
+
+      The tag name is used when writing a JSON pipeline.  It is generally
+      the same as the stage name, but a number is appended to maintain
+      uniqueness when stages appear more than once in a pipeline.
+      the same as
+
+      \return  The tag's name.
+    */
+    virtual std::string tagName() const
+        { return getName(); }
+
+    /**
+      Return a list of the stage's inputs.
+
+      \return  A vector pointers to input stages.
+    **/
     const std::vector<Stage*>& getInputs() const
         { return m_inputs; }
-    std::vector<Stage *> findStage(std::string name);
+
+    /**
+      Return the stage's accepted options.
+
+      \return  The options that a stage handles.
+    */
     virtual Options getDefaultOptions()
         { return Options(); }
-    static Dimension::IdList getDefaultDimensions()
-        { return Dimension::IdList(); }
-    static std::string s_getPluginVersion()
-        { return std::string(); }
 
-    inline MetadataNode getMetadata() const
+    /**
+      Get the stage's metadata node.
+
+      \return  Stage's metadata.
+    */
+    MetadataNode getMetadata() const
         { return m_metadata; }
 
-    /// Sets the UserCallback to manage progress/cancel operations
-    void setUserCallback(UserCallback* userCallback)
-        { m_callback.reset(userCallback); }
+    /**
+      Serialize a stage by inserting apporpritate data into the provided
+      MetadataNode.  Used to dump a pipeline specification in a portable
+      format.
+
+      \param root  Node to which a stages meatdata should be added.
+      \param tags  Pipeline writer's current list of stage tags.
+    */
+    void serialize(MetadataNode root, PipelineWriter::TagMap& tags) const;
 
 protected:
-    std::unique_ptr<UserCallback> m_callback;
-    Options m_options;
-    MetadataNode m_metadata;
-    int m_progressFd;
+    Options m_options;          ///< Stage's options.
+    MetadataNode m_metadata;    ///< Stage's metadata.
+    int m_progressFd;           ///< Descriptor for progress info.
 
     void setSpatialReference(MetadataNode& m, SpatialReference const&);
 
@@ -146,7 +286,14 @@ private:
     Stage& operator=(const Stage&); // not implemented
     Stage(const Stage&); // not implemented
     void Construct();
+
     void l_processOptions(const Options& options);
+
+    /**
+      Process options.  Implement in subclass.
+
+      \param options  Options to process.
+    */
     virtual void processOptions(const Options& /*options*/)
         {}
     virtual void readerProcessOptions(const Options& /*options*/)
@@ -154,27 +301,100 @@ private:
     virtual void writerProcessOptions(const Options& /*options*/)
         {}
     void l_initialize(PointTableRef table);
+
+    /**
+      Get basic metadata (avoids reading points).  Implement in subclass.
+
+      \return  QuickInfo data.
+    */
     virtual QuickInfo inspect()
         { return QuickInfo(); }
+
+    /**
+      Initialize stage after options have been processed.  Implement in
+      subclass.  If you don't require the \ref table argument, you
+      can implement the version of this function that takes no arguments
+      instead of this function.
+
+      \param table  PointTable associated with pipeline.
+    */
     virtual void initialize(PointTableRef /*table*/)
         { initialize(); }
+
+    /**
+      Initialize stage after options have been processed.  Implement in
+      subclass.
+    */
     virtual void initialize()
         {}
+
+    /**
+      Add dimensions to a layout.
+
+      \param layout  Point layout.
+    */
     virtual void addDimensions(PointLayoutPtr /*layout*/)
         {}
+
+    /**
+      Functions called after dimensions have been added.  Implement in
+      subclass.
+
+      \param table  PointTable associated with pipeline.
+    */
     virtual void prepared(PointTableRef /*table*/)
         {}
+
+    /**
+      First part of the execute step.  Called after all stages have been
+      prepared.  Implement in subclass.
+
+      \param table  PointTable associated with the pipeline.
+    */
     virtual void ready(PointTableRef /*table*/)
         {}
-    virtual void done(PointTableRef /*table*/)
-        {}
+
+    /**
+      Process a single point (streaming mode).  Implement in sublcass.
+
+      \param point  Point to process.
+      \return  Readers return false when no more points are to be read.
+        Filters return false if a point is to be filtered-out (not passed
+        to subsequent stages).
+    */
+    virtual bool processOne(PointRef& /*point*/)
+    {
+        std::ostringstream oss;
+        oss << "Point streaming not supported for stage " << getName() << ".";
+        throw pdal_error(oss.str());
+    }
+
+    /**
+      Process all points in a view.  Implement in subclass.
+
+      \param view  PointView to process.
+    */
     virtual PointViewSet run(PointViewPtr /*view*/)
     {
         std::cerr << "Can't run stage = " << getName() << "!\n";
         return PointViewSet();
     }
-};
 
-PDAL_DLL std::ostream& operator<<(std::ostream& ostr, const Stage&);
+    /**
+      Called after all point views have been processed.  Implement in subclass.
+
+      \param table  PointTable associated with pipeline.
+    */
+    virtual void done(PointTableRef /*table*/)
+        {}
+
+    void execute(StreamPointTable& table, std::list<Stage *>& stages);
+
+    /*
+      Test hook.
+    */
+    const Options& getOptions() const
+        { return m_options; }
+};
 
 } // namespace pdal
diff --git a/include/pdal/StageFactory.hpp b/include/pdal/StageFactory.hpp
index 38deadd..021fd21 100644
--- a/include/pdal/StageFactory.hpp
+++ b/include/pdal/StageFactory.hpp
@@ -38,56 +38,83 @@
 #include <pdal/Stage.hpp>
 
 #include <map>
+#include <mutex>
 #include <string>
 #include <vector>
 
-
 namespace pdal
 {
 
 class Options;
 
+/**
+  This class provides a mechanism for creating Stage objects given a driver
+  name.  Creates stages are owned by the factory and destroyed when the
+  factory is destroyed.  Stages can be explicitly destroyed with destroyStage()
+  if desired.
 
-// This class provides a mechanism for creating Stage objects using only a
-// string (the stage type name) and an Options block.
-//
-// We keep a list of (stage type name, creation function) pairs, which
-// acts as a registry of creator functions.  The list is initialized with
-// the core stages we know about (I wish C++ had anonymous functions.).
-// We allow the user to add his own "external" drivers to the registry list
-// as well.
-//
-// We use 4 different functions for each kind of operation, since we have
-// 4 types of derived classes from Stage and they all have slightly different
-// parameters.  That makes it kinda messy.
-
+  \note  Stage creation is thread-safe.
+*/
 class PDAL_DLL StageFactory
 {
 public:
+    /**
+      Create a stage factory.
+
+      \param no_plugins  Don't load plugins or allowed them to be created
+        with this factory.
+    */
     StageFactory(bool no_plugins = true);
 
-    // infer the driver to use based on filename extension
-    // returns "" if no driver found
+    /**
+      Infer the reader to use based on filename extension.
+
+      \return  Driver name or empty string if no reader can be inferred from
+        the filename.
+    */
     static std::string inferReaderDriver(const std::string& filename);
 
-    // infer the driver to use based on filename extension
-    // returns "" if no driver found
+    /**
+      Infer the writer to use based on filename extension.
+
+      \return  Driver name or empty string if no writer can be inferred from
+        the filename.
+    */
     static std::string inferWriterDriver(const std::string& filename);
 
-    // modify options based upon expectations implicit in a given filename
-    // e.g. output files ending in .laz should be compressed
+    /**
+      modify options based upon expectations implicit in a given filename.
+      e.g. output files ending in .laz should be compressed
+
+      \param filename  Name of file for which options should be inferred.
+      \return  Inferred options.
+    */  
     static pdal::Options inferWriterOptionsChanges(const std::string& filename);
 
-    Stage *createStage(const std::string& type, bool ownStage = false);
+    /**
+      Create a stage and return a pointer to the created stage.
+      The factory takes ownership of any successfully created stage.
+
+      \param stage_name  Type of stage to by created.
+      \return  Pointer to created stage.
+    */
+    Stage *createStage(const std::string& type);
+
+    /**
+      Destroy a stage created by this factory.  This doesn't need to be
+      called unless you specifically want to destroy a stage as all stages
+      are destroyed when the factory is destroyed.
 
-    StringList getStageNames() const;
-    std::map<std::string, std::string> getStageMap() const;
+      \param stage  Pointer to stage to destroy.
+    */
+    void destroyStage(Stage *stage);
 
 private:
     StageFactory& operator=(const StageFactory&); // not implemented
     StageFactory(const StageFactory&); // not implemented
 
     std::vector<std::unique_ptr<Stage>> m_ownedStages;
+    std::mutex m_mutex;
 };
 
 } // namespace pdal
diff --git a/include/pdal/StageWrapper.hpp b/include/pdal/StageWrapper.hpp
index 62ec7ac..38e4cc2 100644
--- a/include/pdal/StageWrapper.hpp
+++ b/include/pdal/StageWrapper.hpp
@@ -11,10 +11,10 @@ namespace pdal
 class StageWrapper
 {
 public:
-    static void initialize(std::shared_ptr<Stage> s, PointTableRef table)
+    static void initialize(Stage& s, PointTableRef table)
     {
-        s->l_initialize(table);
-        s->initialize();
+        s.l_initialize(table);
+        s.initialize();
     }
     static void processOptions(Stage& s, const Options& options)
         { s.processOptions(options); }
diff --git a/include/pdal/UserCallback.hpp b/include/pdal/UserCallback.hpp
deleted file mode 100644
index 9ab8c65..0000000
--- a/include/pdal/UserCallback.hpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/******************************************************************************
-* Copyright (c) 2011, Michael P. Gerlek (mpg at flaxen.com)
-*
-* 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 in
-*       the documentation and/or other materials provided
-*       with the distribution.
-*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
-*       names of its contributors may be used to endorse or promote
-*       products derived from this software without specific prior
-*       written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-* OF SUCH DAMAGE.
-****************************************************************************/
-
-#pragma once
-
-#include <pdal/pdal_internal.hpp>
-
-namespace pdal
-{
-
-// This is the base class used for out-of-band interactions
-// between the executing pipeline and the main app:
-//   - recording and reporting a "hearbeat"
-//   - recording and reporting percent-complete
-//   - requesting the pipeline to be interrupted
-//
-// (The heartbeat feature can be used when the pipeline can't report
-// a meaningful percentage complete value, e.g. when the number of
-// points being processed is not a prioi known.)
-//
-// Apps should override the callback() function as desired.
-//
-class PDAL_DLL UserCallback
-{
-public:
-    class interrupted : public pdal_error
-    {
-    public:
-        interrupted() : pdal_error("UserCallback: interrupted by user")
-            {}
-    };
-
-    UserCallback() : m_percentComplete(0.0), m_interruptFlag(false),
-        m_heartbeats(0), m_total(1)
-    {}
-
-    void setTotal(point_count_t total)
-        { m_total = std::max((point_count_t)1, total); }
-
-    // The pipeline calls this to report the percentage progress, check for
-    // interrupts, and call the user's callback function.
-    //
-    // returns true if everything is okay, or false if an interrupt has
-    // been requested
-    void invoke(point_count_t count)
-    {
-        m_percentComplete = 100.0 * count / m_total;
-        invoke();
-    }
-
-    // The pipeline calls this to report the progress in an indeterminate way,
-    // check for interrupts, and call the user's callback function.
-    //
-    // This is same as the check(double) function, except it doesn't record
-    // a percent-complete value.
-    //
-    // returns true if everything is okay, or false if an interrupt has
-    // been requested
-    //
-    void invoke()
-    {
-        ++m_heartbeats;
-        callback();
-        if (m_interruptFlag)
-            throw interrupted();
-    }
-
-    // This will be called by the pipeline (via check()) at various times
-    // during the execution. Applications should override this to perform
-    // any desired actions.
-    //
-    // Examples of things you might do here include printing the percent done,
-    // printing a '.' representing a heartbeat, checking some external condition
-    // to raise the interrupt flag, etc.
-    virtual void callback()
-    {}
-
-    double getPercentComplete() const
-        { return m_percentComplete; }
-
-    inline uint64_t getHeartbeats() const
-        { return m_heartbeats; }
-
-protected:
-    void setInterruptFlag(bool value)
-        { m_interruptFlag = value; }
-
-private:
-    double m_percentComplete;  // in range [0..100]
-    bool m_interruptFlag; // true iff user would like the pipeline to abort
-    uint64_t m_heartbeats; // number of times the check routine has been called
-    point_count_t m_total;
-};
-
-} // namespace pdal
-
diff --git a/include/pdal/Writer.hpp b/include/pdal/Writer.hpp
index af61a56..9753aa3 100644
--- a/include/pdal/Writer.hpp
+++ b/include/pdal/Writer.hpp
@@ -34,44 +34,54 @@
 
 #pragma once
 
-#include <pdal/pdal_internal.hpp>
 #include <pdal/Options.hpp>
 #include <pdal/PointView.hpp>
 #include <pdal/Stage.hpp>
 
-#include <string>
-
 namespace pdal
 {
 
 class Writer;
-
 class UserCallback;
 
-/// End-stage consumer of PDAL pipeline
+/**
+  A Writer is a terminal stage for a PDAL pipeline.  It usually writes output
+  to a file, but this isn't a requirement.  The class provides support for
+  some operations common for producing point output.
+*/
 class PDAL_DLL Writer : public Stage
 {
     friend class WriterWrapper;
     friend class FlexWriter;
 
 public:
-    /// Constructs an end-stage consumer of a pipeline of data -- a writer
-    Writer()
+    /**
+      Construct a writer.
+    */
+    Writer() : m_hashPos(std::string::npos)
         {}
 
-    /// Serialize the pipeline to a boost::property_tree::ptree
-    /// @return boost::property_tree::ptree with xml attributes
-    virtual boost::property_tree::ptree serializePipeline() const;
-
 protected:
-    std::string m_filename;
-    XForm m_xXform;
-    XForm m_yXform;
-    XForm m_zXform;
-    StringList m_outputDims;
+    std::string m_filename;  ///< Output filename
+    XForm m_xXform;          ///< X-dimension transform (scale/offset)
+    XForm m_yXform;          ///< Y-dimension transform (scale/offset)
+    XForm m_zXform;          ///< Z-dimension transform (scale/offset)
+    StringList m_outputDims; ///< List of dimensions to write
+    std::string::size_type m_hashPos;
 
+    /**
+      Compute an automatic scale/offset for points in the PointView.
+
+      \param view  PointView on which scale should be computed.
+    */
     virtual void setAutoXForm(const PointViewPtr view);
 
+    /**
+      Locate template placeholder ('#') and validate filename with respect
+      to placeholder.
+    */
+    void handleFilenameTemplate();
+
 private:
     virtual PointViewSet run(PointViewPtr view)
     {
@@ -81,6 +91,11 @@ private:
         return viewSet;
     }
     virtual void writerProcessOptions(const Options& options);
+
+    /**
+      Write the point in a PointView.  This is a simplification of the
+      \ref run() interface for convenience.  Impelment in subclass if desired.
+    */
     virtual void write(const PointViewPtr /*view*/)
         { std::cerr << "Can't write with stage = " << getName() << "!\n"; }
 
diff --git a/include/pdal/pdal_internal.hpp b/include/pdal/pdal_internal.hpp
index a7728e2..0138e4a 100644
--- a/include/pdal/pdal_internal.hpp
+++ b/include/pdal/pdal_internal.hpp
@@ -41,9 +41,13 @@
 #include <pdal/pdal_export.hpp>
 #include <pdal/pdal_defines.h>
 #include <pdal/pdal_types.hpp>
-#include <pdal/pdal_macros.hpp>
 
-#include <boost/version.hpp>
+// This is an extraction from the gtest header.  It allows us to make test
+// functions friends of classes without including the gtest headers.
+#ifndef FRIEND_TEST
+#define FRIEND_TEST(test_case_name, test_name)\
+friend class test_case_name##_##test_name##_Test
+#endif
 
 // See http://stackoverflow.com/questions/1814548/boostsystem-category-defined-but-not-used
 #ifndef BOOST_SYSTEM_NO_DEPRECATED
diff --git a/include/pdal/pdal_macros.hpp b/include/pdal/pdal_macros.hpp
index 2a88a6f..9830d5f 100644
--- a/include/pdal/pdal_macros.hpp
+++ b/include/pdal/pdal_macros.hpp
@@ -38,16 +38,18 @@
 #include <pdal/plugin.hpp>
 #include <pdal/PluginManager.hpp>
 
-namespace {
+namespace pdal
+{
 
-typedef struct PluginInfo {
+struct PluginInfo
+{
     std::string name;
     std::string description;
     std::string link;
     PluginInfo(const std::string& n, const std::string& d, const std::string& l)
       : name(n), description(d), link(l)
     {}
-} PluginInfo;
+};
 
 }
 
diff --git a/include/pdal/pdal_types.hpp b/include/pdal/pdal_types.hpp
index b520b28..4de65a1 100644
--- a/include/pdal/pdal_types.hpp
+++ b/include/pdal/pdal_types.hpp
@@ -40,8 +40,6 @@
 #include <string>
 #include <vector>
 
-#include <pdal/pdal_internal.hpp>
-
 namespace pdal
 {
 
diff --git a/include/pdal/plang/Redirector.hpp b/include/pdal/plang/Redirector.hpp
index f669af4..60ef65a 100644
--- a/include/pdal/plang/Redirector.hpp
+++ b/include/pdal/plang/Redirector.hpp
@@ -10,14 +10,14 @@
 
 #pragma once
 
+#include <functional>
+
 #include <Python.h>
+
 #undef toupper
 #undef tolower
 #undef isspace
 
-#include <boost/function.hpp>
-#include <boost/bind.hpp>
-
 namespace pdal
 {
 namespace plang
@@ -35,10 +35,11 @@ public:
     void set_stdout(std::ostream* ostr);
     void reset_stdout();
 
-    typedef boost::function<void(std::string)> stdout_write_type;
+    typedef std::function<void(std::string)> stdout_write_type;
+    typedef std::function<void()> stdout_flush_type;
 
 private:
-    void set_stdout(stdout_write_type write);
+    void set_stdout(stdout_write_type write, stdout_flush_type flush);
 
     // Internal state
     PyObject* m_stdout;
diff --git a/include/pdal/plugin.hpp b/include/pdal/plugin.hpp
index b46b3a9..c299989 100644
--- a/include/pdal/plugin.hpp
+++ b/include/pdal/plugin.hpp
@@ -49,13 +49,11 @@
 extern "C" {
 #endif
 
-typedef enum PF_PluginType
-{
-    PF_PluginType_Kernel,
-    PF_PluginType_Reader,
-    PF_PluginType_Filter,
-    PF_PluginType_Writer
-} PF_PluginType;
+const int PF_PluginType_Kernel = 1;
+const int PF_PluginType_Reader = 2;
+const int PF_PluginType_Filter = 4;
+const int PF_PluginType_Writer = 8;
+typedef int PF_PluginType;
 
 typedef struct PF_PluginAPI_Version
 {
diff --git a/include/pdal/util/Algorithm.hpp b/include/pdal/util/Algorithm.hpp
index 0e92ff0..79782e1 100644
--- a/include/pdal/util/Algorithm.hpp
+++ b/include/pdal/util/Algorithm.hpp
@@ -35,6 +35,8 @@
 #pragma once
 
 #include <algorithm>
+#include <map>
+#include <vector>
 
 namespace pdal
 {
@@ -42,31 +44,55 @@ namespace pdal
 namespace Utils
 {
 
+/**
+  Determine if a container contains a value.
+
+  \param cont  Container.
+  \param val  Value.
+  \return \c true if the value is in the container, \c false otherwise.
+*/
 template<typename CONTAINER, typename VALUE>
 bool contains(const CONTAINER& cont, const VALUE& val)
 {
     return std::find(cont.begin(), cont.end(), val) != cont.end();
 }
 
+/**
+  Determine if a map contains a key.
 
+  \param c  Map.
+  \param v  Key value.
+  \return \c true if the value is in the container, \c false otherwise.
+*/
 template<typename KEY, typename VALUE>
 bool contains(const std::map<KEY, VALUE>& c, const KEY& v)
 {
     return c.find(v) != c.end();
 }
 
+/**
+  Remove all instances of a value from a container.
 
-template<typename TYPE, typename VALUE>
-void remove(std::vector<TYPE>& v, const VALUE& val)
+  \param cont  Container.
+  \param v  Value to remove.
+*/
+template<typename CONTAINER, typename VALUE>
+void remove(CONTAINER& cont, const VALUE& val)
 {
-    v.erase(std::remove(v.begin(), v.end(), val), v.end());
+    cont.erase(std::remove(cont.begin(), cont.end(), val), cont.end());
 }
 
 
-template<typename TYPE, typename PREDICATE>
-void remove_if(std::vector<TYPE>& v, PREDICATE p)
+/**
+  Remove all instances matching a unary predicate from a container.
+
+  \param cont  Container.
+  \param p  Predicate indicating whether a value should be removed.
+*/
+template<typename CONTAINER, typename PREDICATE>
+void remove_if(CONTAINER& cont, PREDICATE p)
 {
-    v.erase(std::remove_if(v.begin(), v.end(), p), v.end());
+    cont.erase(std::remove_if(cont.begin(), cont.end(), p), cont.end());
 }
 
 } // namespace Utils
diff --git a/include/pdal/util/Bounds.hpp b/include/pdal/util/Bounds.hpp
index 9a10bd1..5f15ab5 100644
--- a/include/pdal/util/Bounds.hpp
+++ b/include/pdal/util/Bounds.hpp
@@ -37,31 +37,14 @@
 #include <cstdint>
 #include <sstream>
 
-#ifndef PDAL_DLL
-#if defined(_WIN32)
-#   define PDAL_DLL   __declspec(dllexport)
-#else
-#  if defined(USE_GCC_VISIBILITY_FLAG)
-#    define PDAL_DLL     __attribute__ ((visibility("default")))
-#  else
-#    define PDAL_DLL
-#  endif
-#endif
-#endif
+#include "pdal_util_export.hpp"
 
 namespace pdal
 {
 
-/*!
-    \verbatim embed:rst
-
-    Bounds is for manipulating n-dimensional ranges of data.  Typically
-    used for defining the spatial extents of XYZ data, this class can also be
-    used for defining bounds of other dimensions.
-
-    \endverbatim
+/**
+  BOX2D represents a two-dimensional box with double-precision bounds.
 */
-
 class PDAL_DLL BOX2D
 {
 protected:
@@ -69,51 +52,109 @@ protected:
     static const double HIGHEST;
 
 public:
-    double minx;
-    double maxx;
-    double miny;
-    double maxy;
-
+    double minx;  ///< Minimum X value.
+    double maxx;  ///< Maximum X value.
+    double miny;  ///< Minimum Y value.
+    double maxy;  ///< Maximum Y value.
+
+    /**
+      Construct an "empty" bounds box.
+    */
     BOX2D()
         { clear(); }
 
-    BOX2D(const BOX2D& box) :
-        minx(box.minx), maxx(box.maxx), miny(box.miny), maxy(box.maxy)
-    {}
+    /**
+      Construct and initialize a bounds box.
 
+      \param minx  Minimum X value.
+      \param miny  Minimum Y value.
+      \param maxx  Maximum X value.
+      \param maxy  Maximum Y value.
+    */
     BOX2D(double minx, double miny, double maxx, double maxy) :
         minx(minx), maxx(maxx), miny(miny), maxy(maxy)
     {}
 
+    /**
+      Determine whether a bounds box has any bounds set (is in a state
+      as if default-constructed).
+
+      \return  Whether the bounds box is empty.
+    */
     bool empty() const;
+
+    /**
+      Clear the bounds box to an empty state.
+    */
     void clear();
+
+    /**
+      Expand the bounds of the box if a value is less than the current
+      minimum or greater than the current maximum.  If the bounds box is
+      currently empty, both minimum and maximum box bounds will be set to
+      the provided value.
+
+      \param x  X dimension value.
+      \param y  Y dimension value.
+    */
     void grow(double x, double y);
 
+    /**
+      Determine if a bounds box contains a point.
+
+      \param x  X dimension value.
+      \param y  Y dimension value.
+      \return  Whether both dimensions are equal to or less than the maximum
+        box values and equal to or more than the minimum box values.
+    */
     bool contains(double x, double y) const
         { return minx <= x && x <= maxx && miny <= y && y <= maxy; }
 
-    bool contains(const BOX2D& other) const
-    {
-        return minx <= other.minx && other.maxx <= maxx &&
-            miny <= other.miny && other.maxy <= maxy;
-    }
+    /**
+      Determine if the bounds of this box are the same as that of another
+      box.  Empty bounds boxes are always equal.
 
+      \param other  Bounds box to check for equality.
+      \return \c true if the provided box has equal limits to this box,
+        \c false otherwise.
+    */
     bool equal(const BOX2D& other) const
     {
         return  minx == other.minx && maxx == other.maxx &&
             miny == other.miny && maxy == other.maxy;
     }
 
-    bool operator==(BOX2D const& rhs) const
+    /**
+      Determine if the bounds of this box are the same as that of another
+      box.  Empty bounds boxes are always equal.
+
+      \param other  Bounds box to check for equality.
+      \return \c true if the provided box has equal limits to this box,
+        \c false otherwise.
+    */
+    bool operator==(BOX2D const& other) const
     {
-        return equal(rhs);
+        return equal(other);
     }
 
-    bool operator!=(BOX2D const& rhs) const
+    /**
+      Determine if the bounds of this box are different from that of another
+      box.  Empty bounds boxes are never unequal.
+
+      \param other  Bounds box to check for inequality.
+      \return \c true if the provided box has limits different from this box,
+        \c false otherwise.
+    */
+    bool operator!=(BOX2D const& other) const
     {
-        return (!equal(rhs));
+        return (!equal(other));
     }
 
+    /**
+      Expand this box to contain another box.
+
+      \param other  Box that this box should contain.
+    */
     void grow(const BOX2D& other)
     {
         if (other.minx < minx) minx = other.minx;
@@ -123,15 +164,12 @@ public:
         if (other.maxy > maxy) maxy = other.maxy;
     }
 
-    void clip(double x, double y)
-    {
-        if (x > minx) minx = x;
-        if (x < maxx) maxx = x;
-
-        if (y > maxy) miny = y;
-        if (y < maxy) maxy = y;
-    }
+    /**
+      Clip this bounds box by another so it will be contained by the
+      other box.
 
+      \param other  Clipping box for this box.
+    */
     void clip(const BOX2D& other)
     {
         if (other.minx > minx) minx = other.minx;
@@ -141,12 +179,38 @@ public:
         if (other.maxy < maxy) maxy = other.maxy;
     }
 
+    /**
+      Determine if another bounds box is contained in this bounds box.
+      Equal limits are considered to be contained.
+
+      \param other  Bounds box to check for containment.
+      \return  \c true if the provided box is contained in this box,
+        \c false otherwise.
+    **/
+    bool contains(const BOX2D& other) const
+    {
+        return minx <= other.minx && maxx >= other.maxx &&
+            miny <= other.miny && maxy >= other.maxy;
+    }
+
+    /**
+      Determine if another box overlaps this box.
+
+      \param other  Box to test for overlap.
+      \return  Whether the provided box overlaps this box.
+    */
     bool overlaps(const BOX2D& other)
     {
         return minx <= other.maxx && maxx >= other.minx &&
             miny <= other.maxy && maxy >= other.miny;
     }
 
+    /**
+      Convert this box to a string suitable for use in SQLite.
+
+      \param precision  Precision for output [default: 8]
+      \return  String format of this box.
+    */
     std::string toBox(uint32_t precision = 8) const
     {
         std::stringstream oss;
@@ -160,15 +224,23 @@ public:
         return oss.str();
     }
 
+    /**
+      Convert this box to a well-known text string.
+
+      \param precision  Precision for output [default: 8]
+      \return  String format of this box.
+    */
     std::string toWKT(uint32_t precision = 8) const
     {
+        if (empty())
+            return std::string();
+
         std::stringstream oss;
 
         oss.precision(precision);
         oss.setf(std::ios_base::fixed, std::ios_base::floatfield);
 
         oss << "POLYGON ((";
-
         oss << minx << " " << miny << ", ";
         oss << minx << " " << maxy << ", ";
         oss << maxx << " " << maxy << ", ";
@@ -179,10 +251,37 @@ public:
         return oss.str();
     }
 
-    /// Returns a staticly-allocated Bounds extent that represents infinity
+    /**
+      Convert this box to a GeoJSON text string.
+
+      \param precision  Precision for output [default: 8]
+      \return  String format of this box.
+    */
+    std::string toGeoJSON(uint32_t precision = 8) const
+    {
+        if (empty())
+            return std::string();
+
+        std::stringstream oss;
+
+        oss.precision(precision);
+        oss.setf(std::ios_base::fixed, std::ios_base::floatfield);
+        oss << "{\"bbox\":[" << minx << ", " << miny << ", " <<
+            maxx <<  "," << maxy << "]}";
+        return oss.str();
+    }
+
+    /**
+      Return a staticly-allocated Bounds extent that represents infinity
+
+      \return  A bounds box with infinite bounds,
+    */
     static const BOX2D& getDefaultSpatialExtent();
 };
 
+/**
+  BOX3D represents a three-dimensional box with double-precision bounds.
+*/
 class PDAL_DLL BOX3D : private BOX2D
 {
 public:
@@ -190,52 +289,134 @@ public:
     using BOX2D::maxx;
     using BOX2D::miny;
     using BOX2D::maxy;
-    double minz;
-    double maxz;
+    double minz;   ///< Minimum Z value.
+    double maxz;   ///< Maximum Z value.
 
+    /**
+      Clear the bounds box to an empty state.
+    */
     BOX3D()
        { clear(); }
 
+/**
     BOX3D(const BOX3D& box) :
         BOX2D(box), minz(box.minz), maxz(box.maxz)
     {}
-
+**/
+
+    /**
+      Construct and initialize a bounds box.
+
+      \param minx  Minimum X value.
+      \param miny  Minimum Y value.
+      \param minx  Minimum Z value.
+      \param maxx  Maximum X value.
+      \param maxy  Maximum Y value.
+      \param maxz  Maximum Z value.
+    */
     BOX3D(double minx, double miny, double minz, double maxx, double maxy,
         double maxz) : BOX2D(minx, miny, maxx, maxy), minz(minz), maxz(maxz)
     {}
 
+    /**
+      Determine whether a bounds box has any bounds set (is in a state
+      as if default-constructed).
 
+      \return  Whether the bounds box is empty.
+    */
     bool empty() const;
+
+    /**
+      Expand the bounds of the box if a value is less than the current
+      minimum or greater than the current maximum.  If the bounds box is
+      currently empty, both minimum and maximum box bounds will be set to
+      the provided value.
+
+      \param x  X dimension value.
+      \param y  Y dimension value.
+      \param z  Z dimension value.
+    */
     void grow(double x, double y, double z);
+
+    /**
+      Clear the bounds box to an empty state.
+    */
     void clear();
 
+
+    /**
+      Determine if a bounds box contains a point.
+
+      \param x  X dimension value.
+      \param y  Y dimension value.
+      \param z  Z dimension value.
+      \return  Whether both dimensions are equal to or less than the maximum
+        box values and equal to or more than the minimum box values.
+    */
     bool contains(double x, double y, double z) const
     {
         return BOX2D::contains(x, y) && minz <= z && z <= maxz;
     }
 
+    /**
+      Determine if another bounds box is contained in this bounds box.
+      Equal limits are considered to be contained.
+
+      \param other  Bounds box to check for containment.
+      \return  \c true if the provided box is contained in this box,
+        \c false otherwise.
+    **/
     bool contains(const BOX3D& other) const
     {
         return BOX2D::contains(other) &&
             minz <= other.minz && other.maxz <= maxz;
     }
 
+    /**
+      Determine if the bounds of this box are the same as that of another
+      box.  Empty bounds boxes are always equal.
+
+      \param other  Bounds box to check for equality.
+      \return \c true if the provided box has equal limits to this box,
+        \c false otherwise.
+    */
     bool equal(const BOX3D& other) const
     {
         return  BOX2D::contains(other) &&
             minz == other.minz && maxz == other.maxz;
     }
 
+    /**
+      Determine if the bounds of this box are the same as that of another
+      box.  Empty bounds boxes are always equal.
+
+      \param other  Bounds box to check for equality.
+      \return \c true if the provided box has equal limits to this box,
+        \c false otherwise.
+    */
     bool operator==(BOX3D const& rhs) const
     {
         return equal(rhs);
     }
 
+    /**
+      Determine if the bounds of this box are different from that of another
+      box.  Empty bounds boxes are never unequal.
+
+      \param other  Bounds box to check for inequality.
+      \return \c true if the provided box has limits different from this box,
+        \c false otherwise.
+    */
     bool operator!=(BOX3D const& rhs) const
     {
         return (!equal(rhs));
     }
 
+    /**
+      Expand this box to contain another box.
+
+      \param other  Box that this box should contain.
+    */
     void grow(const BOX3D& other)
     {
         BOX2D::grow(other);
@@ -243,13 +424,12 @@ public:
         if (other.maxz > maxz) maxz = other.maxz;
     }
 
-    void clip(double x, double y, double z)
-    {
-        BOX2D::clip(x, y);
-        if (z > maxz) minz = z;
-        if (z < maxz) maxz = z;
-    }
+    /**
+      Clip this bounds box by another so it will be contained by the
+      other box.
 
+      \param other  Clipping box for this box.
+    */
     void clip(const BOX3D& other)
     {
         BOX2D::clip(other);
@@ -257,16 +437,34 @@ public:
         if (other.maxz > maxz) maxz = other.maxz;
     }
 
+    /**
+      Determine if another box overlaps this box.
+
+      \param other  Box to test for overlap.
+      \return  Whether the provided box overlaps this box.
+    */
     bool overlaps(const BOX3D& other)
     {
         return BOX2D::overlaps(other) &&
            minz <= other.maxz && maxz >= other.minz;
     }
 
+    /**
+      Convert this box to 2-dimensional bounding box.
+
+      \return  Bounding box with Z dimension stripped.
+    */
     BOX2D to2d() const
     {
         return *this;
     }
+
+    /**
+      Convert this box to a string suitable for use in SQLite.
+
+      \param precision  Precision for output [default: 8]
+      \return  String format of this box.
+    */
     std::string toBox(uint32_t precision = 8) const
     {
         std::stringstream oss;
@@ -279,8 +477,17 @@ public:
         return oss.str();
     }
 
+    /**
+      Convert this box to a well-known text string.
+      
+      \param precision  Precision for output [default: 8]
+      \return  String format of this box.
+    */
     std::string toWKT(uint32_t precision = 8) const
     {
+        if (empty())
+            return std::string();
+
         std::stringstream oss;
 
         oss.precision(precision);
@@ -330,10 +537,20 @@ public:
         return oss.str();
     }
 
-    /// Returns a staticly-allocated Bounds extent that represents infinity
+    /**
+      Return a staticly-allocated Bounds extent that represents infinity
+
+      \return  A bounds box with infinite bounds,
+    */
     static const BOX3D& getDefaultSpatialExtent();
 };
 
+/**
+  Write a 2D bounds box to a stream in a format used by PDAL options.
+
+  \param ostr  Stream to write to.
+  \param bounds  Box to write.
+*/
 inline std::ostream& operator << (std::ostream& ostr, const BOX2D& bounds)
 {
     if (bounds.empty())
@@ -352,6 +569,12 @@ inline std::ostream& operator << (std::ostream& ostr, const BOX2D& bounds)
     return ostr;
 }
 
+/**
+  Write a 3D bounds box to a stream in a format used by PDAL options.
+
+  \param ostr  Stream to write to.
+  \param bounds  Box to write.
+*/
 inline std::ostream& operator << (std::ostream& ostr, const BOX3D& bounds)
 {
     if (bounds.empty())
@@ -371,7 +594,20 @@ inline std::ostream& operator << (std::ostream& ostr, const BOX3D& bounds)
     return ostr;
 }
 
+/**
+  Read a 2D bounds box from a stream in a format provided by PDAL options.
+
+  \param istr  Stream to read from.
+  \param bounds  Bounds box to populate.
+*/
 extern PDAL_DLL std::istream& operator>>(std::istream& istr, BOX2D& bounds);
+
+/**
+  Read a 3D bounds box from a stream in a format provided by PDAL options.
+
+  \param istr  Stream to read from.
+  \param bounds  Bounds box to populate.
+*/
 extern PDAL_DLL std::istream& operator>>(std::istream& istr, BOX3D& bounds);
 
 } // namespace pdal
diff --git a/include/pdal/util/Charbuf.hpp b/include/pdal/util/Charbuf.hpp
index 9807851..b982814 100644
--- a/include/pdal/util/Charbuf.hpp
+++ b/include/pdal/util/Charbuf.hpp
@@ -34,40 +34,89 @@
 
 #pragma once
 
-#include <pdal/pdal_export.hpp>
 #include <streambuf>
 #include <iostream>
 #include <vector>
 
+#include "pdal_util_export.hpp"
+
 namespace pdal
 {
 
-// Turns a vector into a streambuf.
-class PDAL_DLL Charbuf : public std::streambuf
+/**
+  Allow a data buffer to be used at a std::streambuf.
+*/
+class Charbuf : public std::streambuf
 {
 public:
-    Charbuf() : m_bufOffset(0)
+    /**
+      Construct an empty Charbuf.
+    */
+    PDAL_DLL Charbuf() : m_bufOffset(0)
         {}
-    Charbuf (std::vector<char>& v, pos_type bufOffset = 0)
+
+    /**
+      Construct a Charbuf that wraps a byte vector.
+
+      \param v  Byte vector to back streambuf.
+      \param bufOffset  Offset in vector (ignore bytes before offset).
+    */
+    PDAL_DLL Charbuf (std::vector<char>& v, pos_type bufOffset = 0)
         { initialize(v.data(), v.size(), bufOffset); }
-    Charbuf (char *buf, size_t count, pos_type bufOffset = 0)
+
+    /**
+      Construct a Charbuf that wraps a byte buffer.
+
+      \param buf  Buffer to back streambuf.
+      \param count  Size of buffer.
+      \param bufOffset  Offset in vector (ignore bytes before offset).
+    */
+    PDAL_DLL Charbuf (char *buf, size_t count, pos_type bufOffset = 0)
         { initialize(buf, count, bufOffset); }
 
-    void initialize(char *buf, size_t count, pos_type bufOffset = 0);
+    /**
+      Set a buffer to back a Charbuf.
+
+      \param buf  Buffer to back streambuf.
+      \param count  Size of buffer.
+      \param bufOffset  Offset in vector (ignore bytes before offset).
+    */
+    PDAL_DLL void initialize(char *buf, size_t count, pos_type bufOffset = 0);
 
 protected:
-    std::ios::pos_type seekpos(std::ios::pos_type pos,
+    /**
+      Seek to a position in the buffer.
+
+      \param pos  Position to seek to.
+      \param which  I/O mode [default: rw]
+      \return  Current position adjusted for buffer offset.
+    */
+    PDAL_DLL std::ios::pos_type seekpos(std::ios::pos_type pos,
         std::ios_base::openmode which = std::ios_base::in | std::ios_base::out);
-    std::ios::pos_type seekoff(std::ios::off_type off,
+
+    /**
+      Seek to a position based on an offset from a position.
+
+      \param off  Offset from current position.
+      \param dir  Offset basis (beg, cur or end)
+      \param which  I/O mode [default: rw]
+      \return  Current position adjusted for buffer offset.
+    */
+    PDAL_DLL std::ios::pos_type seekoff(std::ios::off_type off,
         std::ios_base::seekdir dir,
         std::ios_base::openmode which = std::ios_base::in | std::ios_base::out);
 
 private:
-    // The offset allows one to use offsets when seeking that refer not to
-    // the positions in the backing vector, but to some other reference point.
+    /**
+      Offset that allows one to seek to positions not based on the beginning
+      of the backing vector, but to some other reference point.
+    */
     std::ios::pos_type m_bufOffset;
-    // For the put pointer, it seems we need the beginning of the buffer
-    // in order to deal with offsets.
+
+    /**
+      For the put pointer, it seems we need the beginning of the buffer
+      in order to deal with offsets.
+    */
     char *m_buf;
 };
 
diff --git a/include/pdal/util/Endian.hpp b/include/pdal/util/Endian.hpp
deleted file mode 100644
index 66eacc7..0000000
--- a/include/pdal/util/Endian.hpp
+++ /dev/null
@@ -1,110 +0,0 @@
-// Stolen from libLAS' endian.hpp
-/******************************************************************************
- * $Id$
- *
- * Project:  libLAS - http://liblas.org - A BSD library for LAS format data.
- * Purpose:  Endian macros
- * Author:   Mateusz Loskot, mateusz at loskot.net
- *
- * This file has been stolen from <boost/endian.hpp> and
- * modified for libLAS purposes.
- *
- * (C) Copyright Mateusz Loskot 2007, mateusz at loskot.net
- * (C) Copyright Caleb Epstein 2005
- * (C) Copyright John Maddock 2006
- * Distributed under the Boost  Software License, Version 1.0.
- * (See accompanying file LICENSE_1_0.txt or copy at
- * http://www.boost.org/LICENSE_1_0.txt)
- *
- * Revision History
- * 06 Feb 2006 - Initial Revision
- * 09 Nov 2006 - fixed variant and version bits for v4 guids
- * 13 Nov 2006 - added serialization
- * 17 Nov 2006 - added name-based guid creation
- * 20 Nov 2006 - add fixes for gcc (from Tim Blechmann)
- * 07 Mar 2007 - converted to header only
- * 20 Jan 2008 - removed dependency of Boost and modified for libLAS (by Mateusz Loskot)
- ******************************************************************************
- *
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation.  Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose.  It is provided "as is" without express or implied warranty.
- *
- *
- *
- * Copyright notice reproduced from <boost/detail/limits.hpp>, from
- * which this code was originally taken.
- *
- * Modified by Caleb Epstein to use <endian.h> with GNU libc and to
- * defined the BOOST_ENDIAN macro.
- ****************************************************************************/
-
-#pragma once
-
-# define SWAP_BE_TO_LE(p) \
-    do { \
-        char* first = static_cast<char*>(static_cast<void*>(&p)); \
-        char* last = first + sizeof(p) - 1; \
-        for(; first < last; ++first, --last) { \
-            char const x = *last; \
-            *last = *first; \
-            *first = x; \
-        }} while(false)
-
-# define SWAP_LE_TO_BE(p) \
-    do { \
-        char* first = static_cast<char*>(static_cast<void*>(&p)); \
-        char* last = first + sizeof(p) - 1; \
-        for(; first < last; ++first, --last) { \
-            char const x = *last; \
-            *last = *first; \
-            *first = x; \
-        }} while(false)
-
-# define SWAP_BE_TO_LE_N(p, n) \
-    do { \
-        char* first = static_cast<char*>(static_cast<void*>(&p)); \
-        char* last = first + n - 1; \
-        for(; first < last; ++first, --last) { \
-            char const x = *last; \
-            *last = *first; \
-            *first = x; \
-        }} while(false)
-
-# define SWAP_LE_TO_BE_N(p, n) \
-    do { \
-        char* first = static_cast<char*>(static_cast<void*>(&p)); \
-        char* last = first + n - 1; \
-        for(; first < last; ++first, --last) { \
-            char const x = *last; \
-            *last = *first; \
-            *first = x; \
-        }} while(false)
-
-# define SWAP_ENDIANNESS(p) \
-    do { \
-        char* first = static_cast<char*>(static_cast<void*>(&p)); \
-        char* last = first + sizeof(p) - 1; \
-        for(; first < last; ++first, --last) { \
-            char const x = *last; \
-            *last = *first; \
-            *first = x; \
-        }} while(false)
-
-
-# define SWAP_ENDIANNESS_N(p, n) \
-    do { \
-        char* first = static_cast<char*>(static_cast<void*>(&p)); \
-        char* last = first + n - 1; \
-        for(; first < last; ++first, --last) { \
-            char const x = *last; \
-            *last = *first; \
-            *first = x; \
-        }} while(false)
diff --git a/include/pdal/util/Extractor.hpp b/include/pdal/util/Extractor.hpp
index 9014f2b..05e4e8b 100644
--- a/include/pdal/util/Extractor.hpp
+++ b/include/pdal/util/Extractor.hpp
@@ -34,34 +34,77 @@
 
 #pragma once
 
-#include <pdal/Dimension.hpp>
-#include <pdal/pdal_macros.hpp>
-
+#include "pdal_util_export.hpp"
 #include "portable_endian.hpp"
 
 namespace pdal
 {
 
-/// Stream wrapper for input of binary data from a buffer.
+/**
+  Buffer wrapper for input of binary data from a buffer.
+*/
 class PDAL_DLL Extractor
 {
 public:
+    /**
+      Construct an extractor to operate on a buffer.
+
+      \param buf  Buffer to extract from.
+      \param size  Buffer size.
+    */
     Extractor(const char *buf, std::size_t size) : m_eback(buf),
         m_egptr(buf + size), m_gptr(buf)
     {}
 
 public:
+    /**
+      Determine if the buffer is good.
+
+      \return  Whether the buffer is good.
+    */
     operator bool ()
         { return good(); }
+
+    /**
+      Seek to a position in the buffer.
+
+      \param pos  Position to seek in buffer.
+    */
     void seek(std::size_t pos)
         { m_gptr = m_eback + pos; }
+
+    /**
+      Advance buffer position.
+
+      \param cnt  Number of bytes to skip in buffer.
+    */
     void skip(std::size_t cnt)
         { m_gptr += cnt; }
+
+    /**
+      Return the get position of buffer.
+
+      \return  Get position.
+    */
     size_t position() const
         { return m_gptr - m_eback; }
+
+    /**
+      Determine whether the extractor is good (the get pointer is in the
+      buffer).
+
+      \return  Whether the get pointer is valid.
+    */
     bool good() const
         { return m_gptr < m_egptr; }
 
+    /**
+      Extract a string of a particular size from the buffer.  Trim trailing
+      null bytes.
+
+      \param s  String to extract to.
+      \param size  Number of bytes to extract from buffer into string.
+    */
     void get(std::string& s, size_t size)
     {
         s = std::string(m_gptr, size);
@@ -79,101 +122,116 @@ public:
         s.resize(size + 1);
     }
 
+    /**
+      Extract data to char vector.  Vector must be sized to indicate
+      number of bytes to extract.
+
+      \param buf  Vector to which bytes should be extracted.
+    */
     void get(std::vector<char>& buf)
     {
         memcpy((char *)buf.data(), m_gptr, buf.size());
         m_gptr += buf.size();
     }
 
+    /**
+      Extract data to unsigned char vector.  Vector must be sized to
+      indicate number of bytes to extract.
+
+      \param buf  Vector to which bytes should be extracted.
+    */
     void get(std::vector<unsigned char>& buf)
     {
         memcpy((char *)buf.data(), m_gptr, buf.size());
         m_gptr += buf.size();
     }
 
+    /**
+      Extract data into a provided buffer.
+
+      \param buf  Pointer to buffer to which bytes should be extracted.
+      \param size  Number of bytes to extract.
+    */
     void get(char *buf, size_t size)
     {
         memcpy(buf, m_gptr, size);
         m_gptr += size;
     }
 
+    /**
+      Extract data into a provided unsigned buffer.
+
+      \param buf  Pointer to buffer to which bytes should be extracted.
+      \param size  Number of bytes to extract.
+    */
     void get(unsigned char *buf, size_t size)
     {
         memcpy(buf, m_gptr, size);
         m_gptr += size;
     }
 
+    virtual Extractor& operator >> (uint8_t& v) = 0;
+    virtual Extractor& operator >> (int8_t& v) = 0;
+    virtual Extractor& operator >> (uint16_t& v) = 0;
+    virtual Extractor& operator >> (int16_t& v) = 0;
+    virtual Extractor& operator >> (uint32_t& v) = 0;
+    virtual Extractor& operator >> (int32_t& v) = 0;
+    virtual Extractor& operator >> (uint64_t& v) = 0;
+    virtual Extractor& operator >> (int64_t& v) = 0;
+    virtual Extractor& operator >> (float& v) = 0;
+    virtual Extractor& operator >> (double& v) = 0;
+
 protected:
-    // Beginning of the buffer (names come from std::streambuf)
-    const char *m_eback;
-    // End of the buffer.
-    const char *m_egptr;
-    // Current get location.
-    const char *m_gptr;
+    const char *m_eback;  ///< Start of the buffer (name from std::streambuf)
+    const char *m_egptr;  ///< End of the buffer.
+    const char *m_gptr;   ///< Current get position.
 };
 
-/// Stream wrapper for input of binary data that converts from little-endian
-/// to host ordering.
+/**
+  Wrapper extraction of little-endian data from a buffer to host ordering.
+*/
 class PDAL_DLL LeExtractor : public Extractor
 {
 public:
+    /**
+      Construct extractor for a buffer.
+
+      \param buf  Buffer from which to extract.
+      \param size  Size of buffer.
+    */
     LeExtractor(const char *buf, std::size_t size) : Extractor(buf, size)
     {}
 
-    using Extractor::get;
-    void get(Dimension::Type::Enum type, Everything& e)
-    {
-        using namespace Dimension::Type;
-
-        switch (type)
-        {
-        case Unsigned8:
-            *this >> e.u8;
-            break;
-        case Unsigned16:
-            *this >> e.u16;
-            break;
-        case Unsigned32:
-            *this >> e.u32;
-            break;
-        case Unsigned64:
-            *this >> e.u64;
-            break;
-        case Signed8:
-            *this >> e.s8;
-            break;
-        case Signed16:
-            *this >> e.s16;
-            break;
-        case Signed32:
-            *this >> e.s32;
-            break;
-        case Signed64:
-            *this >> e.s64;
-            break;
-        case Float:
-            *this >> e.f;
-            break;
-        case Double:
-            *this >> e.d;
-            break;
-        case None:
-            break;
-        }
-    }
+    /**
+      Extract an unsigned byte from a buffer.
 
+      \param v  Unsigned byte to extract to.
+      \return  This extractor.
+    */
     LeExtractor& operator >> (uint8_t& v)
     {
         v = *(const uint8_t *)m_gptr++;
         return *this;
     }
 
+    /**
+      Extract a byte from a buffer.
+
+      \param v  Byte to extract to.
+      \return  This extractor.
+    */
     LeExtractor& operator >> (int8_t& v)
     {
         v = *(const int8_t *)m_gptr++;
         return *this;
     }
 
+    /**
+      Extract an unsgined short from a buffer.
+
+      \param v  Short to extract to.
+      \return  This extractor.
+    */
     LeExtractor& operator >> (uint16_t& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
@@ -182,6 +240,12 @@ public:
         return *this;
     }
 
+    /**
+      Extract a short from a buffer.
+
+      \param v  Short to extract to.
+      \return  This extractor.
+    */
     LeExtractor& operator >> (int16_t& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
@@ -190,6 +254,12 @@ public:
         return *this;
     }
 
+    /**
+      Extract an unsigned int from a buffer.
+
+      \param v  Unsigned int to extract to.
+      \return  This extractor.
+    */
     LeExtractor& operator >> (uint32_t& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
@@ -198,6 +268,12 @@ public:
         return *this;
     }
 
+    /**
+      Extract an int from a buffer.
+
+      \param v  int to extract to.
+      \return  This extractor.
+    */
     LeExtractor& operator >> (int32_t& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
@@ -206,6 +282,12 @@ public:
         return *this;
     }
 
+    /**
+      Extract an unsigned long int from a buffer.
+
+      \param v  unsigned long int to extract to.
+      \return  This extractor.
+    */
     LeExtractor& operator >> (uint64_t& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
@@ -214,6 +296,12 @@ public:
         return *this;
     }
 
+    /**
+      Extract a long int from a buffer.
+
+      \param v  long int to extract to.
+      \return  This extractor.
+    */
     LeExtractor& operator >> (int64_t& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
@@ -222,103 +310,276 @@ public:
         return *this;
     }
 
+    /**
+      Extract a float from a buffer.
+
+      \param v  float to extract to.
+      \return  This extractor.
+    */
     LeExtractor& operator >> (float& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
         uint32_t tmp = le32toh(*(uint32_t *)(&v));
-        std::memcpy(&v, &tmp, sizeof(tmp));
+        memcpy(&v, &tmp, sizeof(tmp));
         m_gptr += sizeof(v);
         return *this;
     }
 
+    /**
+      Extract a double from a buffer.
+
+      \param v  double to extract to.
+      \return  This extractor.
+    */
     LeExtractor& operator >> (double& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
         uint64_t tmp = le64toh(*(uint64_t *)(&v));
-        std::memcpy(&v, &tmp, sizeof(tmp));
+        memcpy(&v, &tmp, sizeof(tmp));
+        m_gptr += sizeof(v);
+        return *this;
+    }
+};
+
+
+/**
+  Wrapper extraction of big-endian data from a buffer to host ordering.
+*/
+class PDAL_DLL BeExtractor : public Extractor
+{
+public:
+    /**
+      Construct extractor for a buffer.
+
+      \param buf  Buffer from which to extract.
+      \param size  Size of buffer.
+    */
+    BeExtractor(const char *buf, std::size_t size) : Extractor(buf, size)
+    {}
+
+    /**
+      Extract an unsigned byte from a buffer.
+
+      \param v  unsigned byte to extract to.
+      \return  This extractor.
+    */
+    BeExtractor& operator >> (uint8_t& v)
+    {
+        v = *(const uint8_t *)m_gptr++;
+        return *this;
+    }
+
+    /**
+      Extract a byte from a buffer.
+
+      \param v  byte to extract to.
+      \return  This extractor.
+    */
+    BeExtractor& operator >> (int8_t& v)
+    {
+        v = *(const int8_t *)m_gptr++;
+        return *this;
+    }
+
+    /**
+      Extract an unsigned short from a buffer.
+
+      \param v  unsigned short to extract to.
+      \return  This extractor.
+    */
+    BeExtractor& operator >> (uint16_t& v)
+    {
+        memcpy(&v, m_gptr, sizeof(v));
+        v = be16toh(v);
+        m_gptr += sizeof(v);
+        return *this;
+    }
+
+    /**
+      Extract a short from a buffer.
+
+      \param v  short to extract to.
+      \return  This extractor.
+    */
+    BeExtractor& operator >> (int16_t& v)
+    {
+        memcpy(&v, m_gptr, sizeof(v));
+        v = (int16_t)be16toh((uint16_t)v);
+        m_gptr += sizeof(v);
+        return *this;
+    }
+
+    /**
+      Extract an unsigned int from a buffer.
+
+      \param v  unsigned int to extract to.
+      \return  This extractor.
+    */
+    BeExtractor& operator >> (uint32_t& v)
+    {
+        memcpy(&v, m_gptr, sizeof(v));
+        v = be32toh(v);
+        m_gptr += sizeof(v);
+        return *this;
+    }
+
+    /**
+      Extract an int from a buffer.
+
+      \param v  int to extract to.
+      \return  This extractor.
+    */
+    BeExtractor& operator >> (int32_t& v)
+    {
+        memcpy(&v, m_gptr, sizeof(v));
+        v = (int32_t)be32toh((uint32_t)v);
+        m_gptr += sizeof(v);
+        return *this;
+    }
+
+    /**
+      Extract an unsigned long int from a buffer.
+
+      \param v  unsigned long int to extract to.
+      \return  This extractor.
+    */
+    BeExtractor& operator >> (uint64_t& v)
+    {
+        memcpy(&v, m_gptr, sizeof(v));
+        v = be64toh(v);
+        m_gptr += sizeof(v);
+        return *this;
+    }
+
+    /**
+      Extract a long int from a buffer.
+
+      \param v  long int to extract to.
+      \return  This extractor.
+    */
+    BeExtractor& operator >> (int64_t& v)
+    {
+        memcpy(&v, m_gptr, sizeof(v));
+        v = (int64_t)be64toh((uint64_t)v);
+        m_gptr += sizeof(v);
+        return *this;
+    }
+
+    /**
+      Extract a float from a buffer.
+
+      \param v  float to extract to.
+      \return  This extractor.
+    */
+    BeExtractor& operator >> (float& v)
+    {
+        memcpy(&v, m_gptr, sizeof(v));
+        uint32_t tmp = be32toh(*(uint32_t *)(&v));
+        memcpy(&v, &tmp, sizeof(tmp));
+        m_gptr += sizeof(v);
+        return *this;
+    }
+
+    /**
+      Extract a double from a buffer.
+
+      \param v  double to extract to.
+      \return  This extractor.
+    */
+    BeExtractor& operator >> (double& v)
+    {
+        memcpy(&v, m_gptr, sizeof(v));
+        uint64_t tmp = be64toh(*(uint64_t *)(&v));
+        memcpy(&v, &tmp, sizeof(tmp));
         m_gptr += sizeof(v);
         return *this;
     }
 };
 
 
-/// Stream wrapper for input of binary data that converts from little-endian
-/// to host ordering.
+/**
+  Wrapper extraction of data from a buffer to host ordering.  Endianness of
+  buffered data can be specified at run-time.
+*/
 class PDAL_DLL SwitchableExtractor : public Extractor
 {
 public:
     static const bool DefaultIsLittleEndian = true;
 
+    /**
+      Construct extractor for a buffer.
+
+      \param buf  Buffer to extract from.
+      \param size  Buffer size.
+    */
     SwitchableExtractor(const char* buf, std::size_t size)
         : Extractor(buf, size)
         , m_isLittleEndian(DefaultIsLittleEndian)
-    {
-    }
+    {}
+
+    /**
+      Construct extractor for a buffer.
 
+      \param buf  Buffer to extract from.
+      \param size  Buffer size.
+      \param isLittleEndian  \c true if the extractor converts from little
+        endian byte order
+    */
     SwitchableExtractor(const char* buf, std::size_t size, bool isLittleEndian)
         : Extractor(buf, size)
         , m_isLittleEndian(isLittleEndian)
-    {
-    }
+    {}
 
-    bool isLittleEndian() const { return m_isLittleEndian; }
-    void switchToLittleEndian() { m_isLittleEndian = true; }
-    void switchToBigEndian() { m_isLittleEndian = false; }
+    /**
+      Returns whether the extractor converts from little endian.
 
-    using Extractor::get;
-    void get(Dimension::Type::Enum type, Everything& e)
-    {
-        using namespace Dimension::Type;
+      \return  \c true if the extractor converts from little endian.
+    */
+    bool isLittleEndian() const
+        { return m_isLittleEndian; }
 
-        switch (type)
-        {
-        case Unsigned8:
-            *this >> e.u8;
-            break;
-        case Unsigned16:
-            *this >> e.u16;
-            break;
-        case Unsigned32:
-            *this >> e.u32;
-            break;
-        case Unsigned64:
-            *this >> e.u64;
-            break;
-        case Signed8:
-            *this >> e.s8;
-            break;
-        case Signed16:
-            *this >> e.s16;
-            break;
-        case Signed32:
-            *this >> e.s32;
-            break;
-        case Signed64:
-            *this >> e.s64;
-            break;
-        case Float:
-            *this >> e.f;
-            break;
-        case Double:
-            *this >> e.d;
-            break;
-        case None:
-            break;
-        }
-    }
+    /**
+      Set to convert from little endian.
+    */
+    void switchToLittleEndian()
+        { m_isLittleEndian = true; }
+
+    /**
+      Set to convert from big endian.
+    */
+    void switchToBigEndian()
+        { m_isLittleEndian = false; }
 
+    /**
+      Extract an unsigned byte from a buffer.
+
+      \param v  unsigned byte to extract to.
+      \return  This extractor.
+    */
     SwitchableExtractor& operator>>(uint8_t& v)
     {
         v = *(const uint8_t*)m_gptr++;
         return *this;
     }
 
+    /**
+      Extract a byte from a buffer.
+
+      \param v  byte to extract to.
+      \return  This extractor.
+    */
     SwitchableExtractor& operator>>(int8_t& v)
     {
         v = *(const int8_t*)m_gptr++;
         return *this;
     }
 
+    /**
+      Extract an unsigned short from a buffer.
+
+      \param v  unsigned short to extract to.
+      \return  This extractor.
+    */
     SwitchableExtractor& operator>>(uint16_t& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
@@ -327,6 +588,12 @@ public:
         return *this;
     }
 
+    /**
+      Extract a short from a buffer.
+
+      \param v  short to extract to.
+      \return  This extractor.
+    */
     SwitchableExtractor& operator>>(int16_t& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
@@ -336,6 +603,12 @@ public:
         return *this;
     }
 
+    /**
+      Extract an unsigned int from a buffer.
+
+      \param v  unsigned int to extract to.
+      \return  This extractor.
+    */
     SwitchableExtractor& operator>>(uint32_t& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
@@ -344,6 +617,12 @@ public:
         return *this;
     }
 
+    /**
+      Extract an int from a buffer.
+
+      \param v  int to extract to.
+      \return  This extractor.
+    */
     SwitchableExtractor& operator>>(int32_t& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
@@ -353,6 +632,12 @@ public:
         return *this;
     }
 
+    /**
+      Extract an unsigned long from a buffer.
+
+      \param v  unsigned long to extract to.
+      \return  This extractor.
+    */
     SwitchableExtractor& operator>>(uint64_t& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
@@ -361,6 +646,12 @@ public:
         return *this;
     }
 
+    /**
+      Extract a long from a buffer.
+
+      \param v  long to extract to.
+      \return  This extractor.
+    */
     SwitchableExtractor& operator>>(int64_t& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
@@ -370,22 +661,34 @@ public:
         return *this;
     }
 
+    /**
+      Extract a float from a buffer.
+
+      \param v  float to extract to.
+      \return  This extractor.
+    */
     SwitchableExtractor& operator>>(float& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
         uint32_t tmp = isLittleEndian() ? le32toh(*(uint32_t*)(&v))
                                         : be32toh(*(uint32_t*)(&v));
-        std::memcpy(&v, &tmp, sizeof(tmp));
+        memcpy(&v, &tmp, sizeof(tmp));
         m_gptr += sizeof(v);
         return *this;
     }
 
+    /**
+      Extract a double from a buffer.
+
+      \param v  double to extract to.
+      \return  This extractor.
+    */
     SwitchableExtractor& operator>>(double& v)
     {
         memcpy(&v, m_gptr, sizeof(v));
         uint64_t tmp = isLittleEndian() ? le64toh(*(uint64_t*)(&v))
                                         : be64toh(*(uint64_t*)(&v));
-        std::memcpy(&v, &tmp, sizeof(tmp));
+        memcpy(&v, &tmp, sizeof(tmp));
         m_gptr += sizeof(v);
         return *this;
     }
@@ -394,5 +697,5 @@ private:
     bool m_isLittleEndian;
 };
 
-
 } // namespace pdal
+
diff --git a/include/pdal/util/FileUtils.hpp b/include/pdal/util/FileUtils.hpp
index 2150ac3..acb5ba3 100644
--- a/include/pdal/util/FileUtils.hpp
+++ b/include/pdal/util/FileUtils.hpp
@@ -34,6 +34,8 @@
 
 #pragma once
 
+#include <pdal/pdal_internal.hpp>
+
 #include <cassert>
 #include <cmath>
 #include <cstdint>
@@ -42,86 +44,205 @@
 #include <stdexcept>
 #include <string>
 
-#ifndef PDAL_DLL
-#if defined(_WIN32)
-#   define PDAL_DLL   __declspec(dllexport)
-#else
-#  if defined(USE_GCC_VISIBILITY_FLAG)
-#    define PDAL_DLL     __attribute__ ((visibility("default")))
-#  else
-#    define PDAL_DLL
-#  endif
-#endif
-#endif
+#include "pdal_util_export.hpp"
 
 namespace pdal
 {
 
-// this is a static class -- do not instantiate]
-class PDAL_DLL FileUtils
+namespace FileUtils
 {
-public:
-    // open existing file for reading
-    static std::istream* openFile(std::string const& filename,
+    /**
+      Open an existing file for reading.
+
+      \param filename  Filename.
+      \param asBinary  Read as binary file (don't convert /r/n to /n)
+      \return  Pointer to opened stream.
+    */
+    PDAL_DLL std::istream* openFile(std::string const& filename,
         bool asBinary=true);
 
-    // open new file for writing
-    static std::ostream* createFile(std::string const& filename,
+    /**
+      Create a file and open for writing.
+
+      \param filename  Filename.
+      \param asBinary  Write as binary file (don't convert /n to /r/n)
+      \return  Point to opened stream.
+    */
+    PDAL_DLL std::ostream* createFile(std::string const& filename,
         bool asBinary=true);
 
-    static bool directoryExists(std::string const& dirname);
-    static bool createDirectory(std::string const& dirname);
-    static void deleteDirectory(std::string const& dirname);
+    /**
+      Determine if a directory exists.
+
+      \param dirname  Name of directory.
+      \return  Whether a directory exists.
+    */
+    PDAL_DLL bool directoryExists(const std::string& dirname);
+
+    /**
+      Create a directory.
+
+      \param dirname  Directory name.
+      \return  Whether the directory was created.
+    */
+    PDAL_DLL bool createDirectory(const std::string& dirname);
+
+    /**
+      Delete a directory and its contents.
+
+      \param dirname  Directory name.
+    */
+    PDAL_DLL void deleteDirectory(const std::string& dirname);
+
+    /**
+      List the contents of a directory.
+
+      \param dirname  Name of directory to list.
+      \return  List of entries in the directory.
+    */
+    PDAL_DLL StringList directoryList(const std::string& dirname);
+
+    /**
+      Close a file created with createFile.
+
+      \param ofs  Pointer to stream to close.
+    */
+    PDAL_DLL void closeFile(std::ostream* ofs);
+
+    /**
+      Close a file created with openFile.
 
-    static void closeFile(std::ostream* ofs);
-    static void closeFile(std::istream* ifs);
+      \param ifs  Pointer to stream to close.
+    */
+    PDAL_DLL void closeFile(std::istream* ifs);
 
-    static bool deleteFile(const std::string& filename);
-    static void renameFile(const std::string& dest, const std::string& src);
-    static bool fileExists(const std::string& filename);
-    static uintmax_t fileSize(const std::string& filename);
+    /**
+      Delete a file.
 
-    // reads a file into a text string for you
-    static std::string readFileIntoString(const std::string& filename);
+      \param filename  Name of file to delete.
+      \return  \c true if successful, \c false otherwise
+    */
+    PDAL_DLL bool deleteFile(const std::string& filename);
 
-    // return current working dir
-    // the result will always have a trailing '/'
-    static std::string getcwd();
+    /**
+      Rename a file.
 
-    // return the file component of the given path,
-    // e.g. "d:/foo/bar/a.c" -> "a.c"
-    static std::string getFilename(const std::string& path);
+      \param dest  Desired filename.
+      \param src   Source filename.
+    */
+    PDAL_DLL void renameFile(const std::string& dest, const std::string& src);
 
-    // return the directory component of the given path,
-    // e.g. "d:/foo/bar/a.c" -> "d:/foo/bar"
-    // the result will always have a trailing '/'
-    static std::string getDirectory(const std::string& path);
+    /**
+      Determine if a file exists.
 
-    // returns true iff the path is not relative
-    static bool isAbsolutePath(const std::string& path);
+      \param  Filename.
+      \return  Whether the file exists.
+    */
+    PDAL_DLL bool fileExists(const std::string& filename);
 
-    // if the filename is an absolute path, just return it
-    // otherwise, make it absolute (relative to current working dir)
-    // and return that
-    static std::string toAbsolutePath(const std::string& filename);
+    /**
+      Get the size of a file.
 
-    // if the filename is an absolute path, just return it
-    // otherwise, make it absolute (relative to base dir) and return that
-    //
-    // note: if base dir is not absolute, first make it absolute via
-    // toAbsolutePath(base)
-    static std::string toAbsolutePath(const std::string& filename,
+      \param filename  Filename.
+      \return  Size of file.
+    */
+    PDAL_DLL uintmax_t fileSize(const std::string& filename);
+
+    /**
+      Read a file into a string.
+
+      \param filename  Filename.
+      \return  File contents as a string
+    */
+    PDAL_DLL std::string readFileIntoString(const std::string& filename);
+
+    /**
+      Get the current working directory with trailing separator.
+
+      \return  The current working directory.
+    */
+    PDAL_DLL std::string getcwd();
+
+    /**
+      Return the file component of the given path,
+      e.g. "d:/foo/bar/a.c" -> "a.c"
+
+      \param path  Path from which to extract file component.
+      \return  File part of path.
+    */
+    PDAL_DLL std::string getFilename(const std::string& path);
+
+    /**
+      Return the directory component of the given path,
+      e.g. "d:/foo/bar/a.c" -> "d:/foo/bar/"
+
+      \param path  Path from which to extract directory component.
+      \return  Directory part of path.
+    */
+    PDAL_DLL std::string getDirectory(const std::string& path);
+
+    /**
+      Determine if the path is an absolute path.
+
+      \param path  Path to test.
+      \return  Whether the path is absolute.
+    */
+    PDAL_DLL bool isAbsolutePath(const std::string& path);
+
+    /**
+      Determine if path is a directory.
+
+      \param path  Directory to check.
+      \return  Whether the path represents a directory.
+    */
+    PDAL_DLL bool isDirectory(const std::string& path);
+
+    /**
+      If the filename is an absolute path, just return it otherwise,
+      make it absolute (relative to current working dir) and return it.
+
+      \param filename  Name of file to convert to absolute path.
+      \return  Absolute version of provided filename.
+    */
+    PDAL_DLL std::string toAbsolutePath(const std::string& filename);
+
+    /**
+      If the filename is an absolute path, just return it otherwise,
+      make it absolute (relative to base dir) and return that.
+
+      \param filename  Name of file to convert to absolute path.
+      \param base  Base name to use.
+      \return  Absolute version of provided filename relative to base.
+    */
+    PDAL_DLL std::string toAbsolutePath(const std::string& filename,
         const std::string base);
     
-    static std::string readFileAsString(std::string const& filename);
-    static void fileTimes(const std::string& filename, struct tm *createTime,
+    /**
+      Get the file creation and modification times.
+
+      \param filename  Filename.
+      \param createTime  Pointer to creation time structure.
+      \param modTime  Pointer to modification time structure.
+    */
+    PDAL_DLL void fileTimes(const std::string& filename, struct tm *createTime,
         struct tm *modTime);
 
-private:
-    static std::string addTrailingSlash(std::string path);
+    /**
+      Return the extension of the filename, including the separator (.).
+
+      \param path  File path from which to extract extension.
+      \return  Extension of filename.
+    */
+    PDAL_DLL std::string extension(const std::string& path);
+
+    /**
+      Return the filename stripped of the extension.  . and .. are returned
+      unchanged.
 
-    FileUtils& operator=(const FileUtils&); // not implemented
-    FileUtils(const FileUtils&); // not implemented;
-};
+      \param path  File path from which to extract file stem.
+      \return  Stem of filename.
+    */
+    PDAL_DLL std::string stem(const std::string& path);
+}
 
 } // namespace pdal
diff --git a/include/pdal/util/Georeference.hpp b/include/pdal/util/Georeference.hpp
index 983a4c1..b156f61 100644
--- a/include/pdal/util/Georeference.hpp
+++ b/include/pdal/util/Georeference.hpp
@@ -34,14 +34,13 @@
 
 #pragma once
 
-#include <pdal/pdal_export.hpp>
+#include "pdal_util_export.hpp"
 
 namespace pdal
 {
 namespace georeference
 {
 
-
 struct Xyz
 {
     Xyz(double x, double y, double z)
@@ -83,10 +82,11 @@ inline RotationMatrix createIdentityMatrix()
     return RotationMatrix(1, 0, 0, 0, 1, 0, 0, 0, 1);
 }
 
-
 // Returns Latitude, Longitude, Height triplet with angles in radians
 PDAL_DLL Xyz georeferenceWgs84(double range, double scanAngle,
                       const RotationMatrix& boresightMatrix,
                       const RotationMatrix& imuMatrix, const Xyz& gpsPoint);
-}
-}
+
+} // namespace georeference
+} // namespace pdal
+
diff --git a/include/pdal/util/IStream.hpp b/include/pdal/util/IStream.hpp
index e008ff5..731510b 100644
--- a/include/pdal/util/IStream.hpp
+++ b/include/pdal/util/IStream.hpp
@@ -43,29 +43,53 @@
 #include <vector>
 #include <cstring>
 
-#include <pdal/pdal_export.hpp>
-
 #include "portable_endian.hpp"
+#include "pdal_util_export.hpp"
 
 namespace pdal
 {
 
 class IStreamMarker;
 
-/// Stream wrapper for input of binary data.
-class PDAL_DLL IStream
+/**
+  Stream wrapper for input of binary data.
+*/
+class IStream
 {
 public:
-    IStream() : m_stream(NULL), m_fstream(NULL)
+    /**
+      Default constructor.
+    */
+    PDAL_DLL IStream() : m_stream(NULL), m_fstream(NULL)
         {}
-    IStream(const std::string& filename) : m_stream(NULL), m_fstream(NULL)
-        { open(filename); }
-    IStream(std::istream *stream) : m_stream(stream), m_fstream(NULL)
+
+    /**
+      Construct an IStream from a filename.
+
+      \param filename  File from which to read.
+    */
+    PDAL_DLL IStream(const std::string& filename) :
+        m_stream(NULL), m_fstream(NULL)
+    { open(filename); }
+
+    /**
+      Construct an IStream from an input stream pointer.
+
+      \param stream  Stream from which to read.
+    */
+    PDAL_DLL IStream(std::istream *stream) : m_stream(stream), m_fstream(NULL)
         {}
-    ~IStream()
+
+    PDAL_DLL ~IStream()
         { delete m_fstream; }
 
-    int open(const std::string& filename)
+    /**
+      Open a file to extract.
+
+      \param filename  Filename.
+      \return  -1 if a stream is already assigned, 0 otherwise.
+    */
+    PDAL_DLL int open(const std::string& filename)
     {
         if (m_stream)
              return -1;
@@ -73,26 +97,93 @@ public:
             std::ios_base::in | std::ios_base::binary);
         return 0;
     }
-    operator bool ()
+
+    /**
+      Close the underlying stream.
+    */
+    PDAL_DLL void close()
+    {
+        delete m_fstream;
+        m_fstream = NULL;
+        m_stream = NULL;
+    }
+
+    /**
+      Return the state of the stream.
+
+      \return  The state of the underlying stream.
+    */
+    PDAL_DLL operator bool ()
         { return (bool)(*m_stream); }
-    void seek(std::streampos pos)
+
+    /**
+      Seek to a position in the underlying stream.
+
+      \param pos  Position to seek to,
+    */
+    PDAL_DLL void seek(std::streampos pos)
         { m_stream->seekg(pos, std::istream::beg); }
-    void seek(std::streampos pos, std::ios_base::seekdir way)
-        { m_stream->seekg(pos, way); }
-    void skip(std::streamoff offset)
+
+
+    /**
+      Seek to an offset from a specified position.
+
+      \param off  Offset.
+      \param way  Absolute position for offset (beg, end or cur)
+    */
+    PDAL_DLL void seek(std::streampos off, std::ios_base::seekdir way)
+        { m_stream->seekg(off, way); }
+
+    /**
+      Skip relative to the current position.
+
+      \param offset  Offset from the current position.
+    */
+    PDAL_DLL void skip(std::streamoff offset)
         { m_stream->seekg(offset, std::istream::cur); }
-    std::streampos position() const
+
+    /**
+      Determine the position of the get pointer.
+
+      \return  Current get position.
+    */
+    PDAL_DLL std::streampos position() const
         { return m_stream->tellg(); }
-    bool good() const
+
+    /**
+      Determine if the underlying stream is good.
+
+      \return  Whether the underlying stream is good.
+    */
+    PDAL_DLL bool good() const
         { return m_stream->good(); }
-    std::istream *stream()
+
+    /**
+      Fetch a pointer to the underlying stream.
+
+      \return  Pointer to the underlying stream.
+    */
+    PDAL_DLL std::istream *stream()
         { return m_stream; }
-    void pushStream(std::istream *strm)
+
+    /**
+      Temporarily push a stream to read from.
+
+      \param strm  New stream to read from.
+    */
+    PDAL_DLL void pushStream(std::istream *strm)
     {
         m_streams.push(m_stream);
         m_stream = strm;
     }
-    std::istream *popStream()
+
+    /**
+      Pop the current stream and return it.  The last stream on the stack
+      cannot be popped.
+
+      \return  Pointer to the popped stream.
+    */
+    PDAL_DLL std::istream *popStream()
     {
         // Can't pop the last stream for now.
         if (m_streams.empty())
@@ -103,7 +194,13 @@ public:
         return strm;
     }
 
-    void get(std::string& s, size_t size)
+    /**
+      Fetch data from the stream into a string.
+
+      \param s  String to fill.
+      \param size  Number of bytes to extract.
+    */
+    PDAL_DLL void get(std::string& s, size_t size)
     {
         // Could do this by appending to a string with a stream, but this
         // is probably fast enough for now (there's only a simple increment
@@ -114,94 +211,187 @@ public:
         s = buf.get();
     }
 
-    void get(std::vector<char>& buf)
+    /**
+      Fetch data from the stream into a vector of char.
+
+      \param buf  Buffer to fill.
+    */
+    PDAL_DLL void get(std::vector<char>& buf)
         { m_stream->read(&buf[0], buf.size()); }
 
-    void get(std::vector<unsigned char>& buf)
+    /**
+      Fetch data from the stream into a vector of unsigned char.
+
+      \param buf  Buffer to fill.
+    */
+    PDAL_DLL void get(std::vector<unsigned char>& buf)
         { m_stream->read((char *)&buf[0], buf.size()); }
 
-    void get(char *buf, size_t size)
+    /**
+      Fetch data from the stream into the specified buffer of char.
+
+      \param buf  Buffer to fill.
+      \param size  Number of bytes to extract.
+    */
+    PDAL_DLL void get(char *buf, size_t size)
         { m_stream->read(buf, size); }
 
-    void get(unsigned char *buf, size_t size)
+    /**
+      Fetch data from the stream into the specified buffer of unsigned char.
+
+      \param buf  Buffer to fill.
+      \param size  Number of bytes to extract.
+    */
+    PDAL_DLL void get(unsigned char *buf, size_t size)
         { m_stream->read((char *)buf, size); }
 
 protected:
     std::istream *m_stream;
-    std::istream *m_fstream; // Dup of above to facilitate cleanup.
+    std::ifstream *m_fstream; // Dup of above to facilitate cleanup.
 
 private:
     std::stack<std::istream *> m_streams;
 	IStream(const IStream&);
 };
 
-/// Stream wrapper for input of binary data that converts from little-endian
-/// to host ordering.
+/**
+  Stream wrapper for input of binary data that converts from little-endian
+  to host ordering.
+*/
 class ILeStream : public IStream
 {
 public:
-    ILeStream()
+    /**
+      Default constructor.
+    */
+    PDAL_DLL ILeStream()
     {}
-    ILeStream(const std::string& filename) : IStream(filename)
+
+    /**
+      Constructor that opens the file and maps it to a stream.
+
+      \param filename  Filename.
+    */
+    PDAL_DLL ILeStream(const std::string& filename) : IStream(filename)
     {}
-    ILeStream(std::istream *stream) : IStream(stream)
+
+    /**
+      Constructor that maps to a provided stream.
+
+      \param stream  Stream to extract from.
+    */
+    PDAL_DLL ILeStream(std::istream *stream) : IStream(stream)
     {}
 
-    ILeStream& operator >> (uint8_t& v)
+    /**
+      Extract an unsigned byte from the stream.
+
+      \param v  unsigned byte to populate
+      \return  This stream.
+    */
+    PDAL_DLL ILeStream& operator >> (uint8_t& v)
     {
         v = (uint8_t)m_stream->get();
         return *this;
     }
 
-    ILeStream& operator >> (int8_t& v)
+    /**
+      Extract an unsigned byte from the stream.
+
+      \param v  unsigned byte to populate
+      \return  This stream.
+    */
+    PDAL_DLL ILeStream& operator >> (int8_t& v)
     {
         v = (int8_t)m_stream->get();
         return *this;
     }
 
-    ILeStream& operator >> (uint16_t& v)
+    /**
+      Extract an unsigned short from the stream.
+
+      \param v  unsigned short to populate
+      \return  This stream.
+    */
+    PDAL_DLL ILeStream& operator >> (uint16_t& v)
     {
         m_stream->read((char *)&v, sizeof(v));
         v = le16toh(v);
         return *this;
     }
 
-    ILeStream& operator >> (int16_t& v)
+    /**
+      Extract an short from the stream.
+
+      \param v  short to populate
+      \return  This stream.
+    */
+    PDAL_DLL ILeStream& operator >> (int16_t& v)
     {
         m_stream->read((char *)&v, sizeof(v));
         v = (int16_t)le16toh((uint16_t)v);
         return *this;
     }
 
-    ILeStream& operator >> (uint32_t& v)
+    /**
+      Extract an unsigned int from the stream.
+
+      \param v  unsigned int to populate
+      \return  This stream.
+    */
+    PDAL_DLL ILeStream& operator >> (uint32_t& v)
     {
         m_stream->read((char *)&v, sizeof(v));
         v = le32toh(v);
         return *this;
     }
 
-    ILeStream& operator >> (int32_t& v)
+    /**
+      Extract an int from the stream.
+
+      \param v  int to populate
+      \return  This stream.
+    */
+    PDAL_DLL ILeStream& operator >> (int32_t& v)
     {
         m_stream->read((char *)&v, sizeof(v));
         v = (int32_t)le32toh((uint32_t)v);
         return *this;
     }
 
-    ILeStream& operator >> (uint64_t& v)
+    /**
+      Extract an unsigned long int from the stream.
+
+      \param v  unsigned long int to populate
+      \return  This stream.
+    */
+    PDAL_DLL ILeStream& operator >> (uint64_t& v)
     {
         m_stream->read((char *)&v, sizeof(v));
         v = le64toh(v);
         return *this;
     }
 
-    ILeStream& operator >> (int64_t& v)
+    /**
+      Extract a long int from the stream.
+
+      \param v  long int to populate
+      \return  This stream.
+    */
+    PDAL_DLL ILeStream& operator >> (int64_t& v)
     {
         m_stream->read((char *)&v, sizeof(v));
         v = (int64_t)le64toh((uint64_t)v);
         return *this;
     }
 
-    ILeStream& operator >> (float& v)
+    /**
+      Extract a float from the stream.
+
+      \param v  float to populate
+      \return  This stream.
+    */
+    PDAL_DLL ILeStream& operator >> (float& v)
     {
         m_stream->read((char *)&v, sizeof(v));
         uint32_t tmp = le32toh(*(uint32_t *)(&v));
@@ -209,7 +399,13 @@ public:
         return *this;
     }
 
-    ILeStream& operator >> (double& v)
+    /**
+      Extract a double from the stream.
+
+      \param v  double to populate
+      \return  This stream.
+    */
+    PDAL_DLL ILeStream& operator >> (double& v)
     {
         m_stream->read((char *)&v, sizeof(v));
         uint64_t tmp = le64toh(*(uint64_t *)(&v));
@@ -219,53 +415,56 @@ public:
 };
 
 
-/// Stream wrapper for input of binary data that converts from
-/// either little-endian or big-endian to host ordering,
-/// depending on object settings
+/**
+  Stream wrapper for input of binary data that converts from either
+  little-endian or big-endian to host ordering, depending on object
+  settings.
+*/
 class ISwitchableStream : public IStream
 {
 public:
     static const bool DefaultIsLittleEndian = true;
 
-    ISwitchableStream()
-        : m_isLittleEndian(DefaultIsLittleEndian)
-    {
-    }
-    ISwitchableStream(const std::string& filename)
+    PDAL_DLL ISwitchableStream() : m_isLittleEndian(DefaultIsLittleEndian)
+    {}
+
+    PDAL_DLL ISwitchableStream(const std::string& filename)
         : IStream(filename)
         , m_isLittleEndian(DefaultIsLittleEndian)
-    {
-    }
-    ISwitchableStream(std::istream* stream)
+    {}
+    
+    PDAL_DLL ISwitchableStream(std::istream* stream)
         : IStream(stream)
         , m_isLittleEndian(DefaultIsLittleEndian)
-    {
-    }
+    {}
 
-    bool isLittleEndian() const { return m_isLittleEndian; }
-    void switchToLittleEndian() { m_isLittleEndian = true; }
-    void switchToBigEndian() { m_isLittleEndian = false; }
+    PDAL_DLL bool isLittleEndian() const
+        { return m_isLittleEndian; }
+    PDAL_DLL void switchToLittleEndian()
+        { m_isLittleEndian = true; }
+    PDAL_DLL void switchToBigEndian()
+        { m_isLittleEndian = false; }
 
-    ISwitchableStream& operator>>(uint8_t& v)
+    PDAL_DLL ISwitchableStream& operator>>(uint8_t& v)
     {
         v = (uint8_t)m_stream->get();
         return *this;
     }
 
-    ISwitchableStream& operator>>(int8_t& v)
+    PDAL_DLL ISwitchableStream& operator>>(int8_t& v)
     {
         v = (int8_t)m_stream->get();
         return *this;
     }
 
-    ISwitchableStream& operator>>(uint16_t& v)
+    PDAL_DLL ISwitchableStream& operator>>(uint16_t& v)
     {
         m_stream->read((char*)&v, sizeof(v));
         v = isLittleEndian() ? le16toh(v) : be16toh(v);
         return *this;
     }
 
-    ISwitchableStream& operator>>(int16_t& v)
+    PDAL_DLL ISwitchableStream& operator>>(int16_t& v)
     {
         m_stream->read((char*)&v, sizeof(v));
         v = isLittleEndian() ? (int16_t)le16toh((uint16_t)v)
@@ -273,14 +472,14 @@ public:
         return *this;
     }
 
-    ISwitchableStream& operator>>(uint32_t& v)
+    PDAL_DLL ISwitchableStream& operator>>(uint32_t& v)
     {
         m_stream->read((char*)&v, sizeof(v));
         v = isLittleEndian() ? le32toh(v) : be32toh(v);
         return *this;
     }
 
-    ISwitchableStream& operator>>(int32_t& v)
+    PDAL_DLL ISwitchableStream& operator>>(int32_t& v)
     {
         m_stream->read((char*)&v, sizeof(v));
         v = isLittleEndian() ? (int32_t)le32toh((uint32_t)v)
@@ -288,14 +487,14 @@ public:
         return *this;
     }
 
-    ISwitchableStream& operator>>(uint64_t& v)
+    PDAL_DLL ISwitchableStream& operator>>(uint64_t& v)
     {
         m_stream->read((char*)&v, sizeof(v));
         v = isLittleEndian() ? le64toh(v) : be64toh(v);
         return *this;
     }
 
-    ISwitchableStream& operator>>(int64_t& v)
+    PDAL_DLL ISwitchableStream& operator>>(int64_t& v)
     {
         m_stream->read((char*)&v, sizeof(v));
         v = isLittleEndian() ? (int64_t)le64toh((uint64_t)v)
@@ -303,7 +502,7 @@ public:
         return *this;
     }
 
-    ISwitchableStream& operator>>(float& v)
+    PDAL_DLL ISwitchableStream& operator>>(float& v)
     {
         m_stream->read((char*)&v, sizeof(v));
         uint32_t tmp = isLittleEndian() ? le32toh(*(uint32_t*)(&v))
@@ -312,7 +511,7 @@ public:
         return *this;
     }
 
-    ISwitchableStream& operator>>(double& v)
+    PDAL_DLL ISwitchableStream& operator>>(double& v)
     {
         m_stream->read((char*)&v, sizeof(v));
         uint64_t tmp = isLittleEndian() ? be64toh(*(uint64_t*)(&v))
@@ -330,10 +529,10 @@ private:
 class IStreamMarker
 {
 public:
-    IStreamMarker(IStream& stream) : m_stream(stream)
+    PDAL_DLL IStreamMarker(IStream& stream) : m_stream(stream)
         { m_pos = m_stream.position(); }
 
-    void rewind()
+    PDAL_DLL void rewind()
         { m_stream.seek(m_pos); }
 
 private:
diff --git a/include/pdal/util/Inserter.hpp b/include/pdal/util/Inserter.hpp
index bb481c0..f7c6c34 100644
--- a/include/pdal/util/Inserter.hpp
+++ b/include/pdal/util/Inserter.hpp
@@ -34,6 +34,7 @@
 #pragma once
 
 #include "portable_endian.hpp"
+#include "pdal_util_export.hpp"
 
 namespace pdal
 {
@@ -82,6 +83,17 @@ public:
     }
     std::size_t position() const
         { return m_pptr - m_pbase; }
+
+    virtual Inserter& operator << (uint8_t v) = 0;
+    virtual Inserter& operator << (int8_t v) = 0;
+    virtual Inserter& operator << (uint16_t v) = 0;
+    virtual Inserter& operator << (int16_t v) = 0;
+    virtual Inserter& operator << (uint32_t v) = 0;
+    virtual Inserter& operator << (int32_t v) = 0;
+    virtual Inserter& operator << (uint64_t v) = 0;
+    virtual Inserter& operator << (int64_t v) = 0;
+    virtual Inserter& operator << (float v) = 0;
+    virtual Inserter& operator << (double v) = 0;
 };
 
 /// Stream wrapper for output of binary data that converts from host ordering
@@ -94,48 +106,6 @@ public:
     LeInserter(unsigned char *buf, std::size_t size) : Inserter(buf, size)
     {}
 
-    using Inserter::put;
-    void put(Dimension::Type::Enum type, const Everything& e)
-    {
-       using namespace Dimension::Type;
-
-        switch (type)
-        {
-        case Unsigned8:
-            *this << e.u8;
-            break;
-        case Unsigned16:
-            *this << e.u16;
-            break;
-        case Unsigned32:
-            *this << e.u32;
-            break;
-        case Unsigned64:
-            *this << e.u64;
-            break;
-        case Signed8:
-            *this << e.s8;
-            break;
-        case Signed16:
-            *this << e.s16;
-            break;
-        case Signed32:
-            *this << e.s32;
-            break;
-        case Signed64:
-            *this << e.s64;
-            break;
-        case Float:
-            *this << e.f;
-            break;
-        case Double:
-            *this << e.d;
-            break;
-        case None:
-            break;
-        }
-    }
-
     LeInserter& operator << (uint8_t v)
     {
         *m_pptr++ = (char)v;
@@ -227,4 +197,106 @@ public:
     }
 };
 
+
+/// Stream wrapper for output of binary data that converts from host ordering
+/// to big endian format
+class PDAL_DLL BeInserter : public Inserter
+{
+public:
+    BeInserter(char *buf, std::size_t size) : Inserter(buf, size)
+    {}
+    BeInserter(unsigned char *buf, std::size_t size) : Inserter(buf, size)
+    {}
+
+    BeInserter& operator << (uint8_t v)
+    {
+        *m_pptr++ = (char)v;
+        return *this;
+    }
+
+    BeInserter& operator << (int8_t v)
+    {
+        *m_pptr++ = v;
+        return *this;
+    }
+
+    BeInserter& operator << (uint16_t v)
+    {
+        v = htobe16(v);
+        memcpy(m_pptr, &v, sizeof(v));
+        m_pptr += sizeof(v);
+        return *this;
+    }
+
+    BeInserter& operator << (int16_t v)
+    {
+        v = (int16_t)htobe16((uint16_t)v);
+        memcpy(m_pptr, &v, sizeof(v));
+        m_pptr += sizeof(v);
+        return *this;
+    }
+
+    BeInserter& operator << (uint32_t v)
+    {
+        v = htobe32(v);
+        memcpy(m_pptr, &v, sizeof(v));
+        m_pptr += sizeof(v);
+        return *this;
+    }
+
+    BeInserter& operator << (int32_t v)
+    {
+        v = (int32_t)htobe32((uint32_t)v);
+        memcpy(m_pptr, &v, sizeof(v));
+        m_pptr += sizeof(v);
+        return *this;
+    }
+
+    BeInserter& operator << (uint64_t v)
+    {
+        v = htobe64(v);
+        memcpy(m_pptr, &v, sizeof(v));
+        m_pptr += sizeof(v);
+        return *this;
+    }
+
+    BeInserter& operator << (int64_t v)
+    {
+        v = (int64_t)htobe64((uint64_t)v);
+        memcpy(m_pptr, &v, sizeof(v));
+        m_pptr += sizeof(v);
+        return *this;
+    }
+
+    BeInserter& operator << (float v)
+    {
+        union
+        {
+            float f;
+            uint32_t u;
+        } uu;
+
+        uu.f = v;
+        uu.u = htobe32(uu.u);
+        memcpy(m_pptr, &uu.f, sizeof(uu.f));
+        m_pptr += sizeof(uu.f);
+        return *this;
+    }
+
+    BeInserter& operator << (double v)
+    {
+        union
+        {
+            double d;
+            uint64_t u;
+        } uu;
+
+        uu.d = v;
+        uu.u = htobe64(uu.u);
+        memcpy(m_pptr, &uu.d, sizeof(uu.d));
+        m_pptr += sizeof(uu.d);
+        return *this;
+    }
+};
+
 } // namespace pdal
diff --git a/include/pdal/util/OStream.hpp b/include/pdal/util/OStream.hpp
index f288e8a..9b2fc3b 100644
--- a/include/pdal/util/OStream.hpp
+++ b/include/pdal/util/OStream.hpp
@@ -40,26 +40,26 @@
 #include <cstring>
 #include <stack>
 
-#include <pdal/pdal_internal.hpp>
-
 #include "portable_endian.hpp"
+#include "pdal_util_export.hpp"
 
 namespace pdal
 {
 
-class PDAL_DLL OStream
+class OStream
 {
 public:
-    OStream() : m_stream(NULL), m_fstream(NULL)
+    PDAL_DLL OStream() : m_stream(NULL), m_fstream(NULL)
         {}
-    OStream(const std::string& filename) : m_stream(NULL), m_fstream(NULL)
+    PDAL_DLL OStream(const std::string& filename) :
+            m_stream(NULL), m_fstream(NULL)
         { open(filename); }
-    OStream(std::ostream *stream) : m_stream(stream), m_fstream(NULL)
+    PDAL_DLL OStream(std::ostream *stream) : m_stream(stream), m_fstream(NULL)
         {}
-    ~OStream()
+    PDAL_DLL ~OStream()
         { delete m_fstream; }
 
-    int open(const std::string& filename)
+    PDAL_DLL int open(const std::string& filename)
     {
         if (m_stream)
             return -1;
@@ -67,39 +67,41 @@ public:
             std::ios_base::out | std::ios_base::binary);
         return 0;
     }
-    void close()
+    PDAL_DLL void close()
     {
         flush();
         delete m_fstream;
         m_fstream = NULL;
         m_stream = NULL;
     }
-    void flush()
+    PDAL_DLL bool isOpen() const
+        { return (bool)m_stream; }
+    PDAL_DLL void flush()
         { m_stream->flush(); }
-    operator bool ()
+    PDAL_DLL operator bool ()
         { return (bool)(*m_stream); }
-    void seek(std::streampos pos)
+    PDAL_DLL void seek(std::streampos pos)
         { m_stream->seekp(pos, std::ostream::beg); }
-    void put(const std::string& s)
+    PDAL_DLL void put(const std::string& s)
         { put(s, s.size()); }
-    void put(const std::string& s, size_t len)
+    PDAL_DLL void put(const std::string& s, size_t len)
     {
         std::string os = s;
         os.resize(len);
         m_stream->write(os.c_str(), len);
     }
-    void put(const char *c, size_t len)
+    PDAL_DLL void put(const char *c, size_t len)
         { m_stream->write(c, len); }
-    void put(const unsigned char *c, size_t len)
+    PDAL_DLL void put(const unsigned char *c, size_t len)
         { m_stream->write((const char *)c, len); }
-    std::streampos position() const
+    PDAL_DLL std::streampos position() const
         { return m_stream->tellp(); }
-    void pushStream(std::ostream *strm)
+    PDAL_DLL void pushStream(std::ostream *strm)
     {
         m_streams.push(m_stream);
         m_stream = strm;
     }
-    std::ostream *popStream()
+    PDAL_DLL std::ostream *popStream()
     {
         // Can't pop the last stream for now.
         if (m_streams.empty())
@@ -121,71 +123,71 @@ private:
 
 /// Stream wrapper for output of binary data that converts from host ordering
 /// to little endian format
-class PDAL_DLL OLeStream : public OStream
+class OLeStream : public OStream
 {
 public:
-    OLeStream()
+    PDAL_DLL OLeStream()
     {}
-    OLeStream(const std::string& filename) : OStream(filename)
+    PDAL_DLL OLeStream(const std::string& filename) : OStream(filename)
     {}
-    OLeStream(std::ostream *stream) : OStream(stream)
+    PDAL_DLL OLeStream(std::ostream *stream) : OStream(stream)
     {}
 
-    OLeStream& operator << (uint8_t v)
+    PDAL_DLL OLeStream& operator << (uint8_t v)
     {
         m_stream->put((char)v);
         return *this;
     }
 
-    OLeStream& operator << (int8_t v)
+    PDAL_DLL OLeStream& operator << (int8_t v)
     {
         m_stream->put((char)v);
         return *this;
     }
 
-    OLeStream& operator << (uint16_t v)
+    PDAL_DLL OLeStream& operator << (uint16_t v)
     {
         v = htole16(v);
         m_stream->write((char *)&v, sizeof(v));
         return *this;
     }
 
-    OLeStream& operator << (int16_t v)
+    PDAL_DLL OLeStream& operator << (int16_t v)
     {
         v = (int16_t)htole16((uint16_t)v);
         m_stream->write((char *)&v, sizeof(v));
         return *this;
     }
 
-    OLeStream& operator << (uint32_t v)
+    PDAL_DLL OLeStream& operator << (uint32_t v)
     {
         v = htole32(v);
         m_stream->write((char *)&v, sizeof(v));
         return *this;
     }
 
-    OLeStream& operator << (int32_t v)
+    PDAL_DLL OLeStream& operator << (int32_t v)
     {
         v = (int32_t)htole32((uint32_t)v);
         m_stream->write((char *)&v, sizeof(v));
         return *this;
     }
 
-    OLeStream& operator << (uint64_t v)
+    PDAL_DLL OLeStream& operator << (uint64_t v)
     {
         v = htole64(v);
         m_stream->write((char *)&v, sizeof(v));
         return *this;
     }
 
-    OLeStream& operator << (int64_t v)
+    PDAL_DLL OLeStream& operator << (int64_t v)
     {
         v = (int64_t)htole64((uint64_t)v);
         m_stream->write((char *)&v, sizeof(v));
         return *this;
     }
 
-    OLeStream& operator << (float v)
+    PDAL_DLL OLeStream& operator << (float v)
     {
         uint32_t tmp(0);
         std::memcpy(&tmp, &v, sizeof(v));
@@ -194,7 +196,7 @@ public:
         return *this;
     }
 
-    OLeStream& operator << (double v)
+    PDAL_DLL OLeStream& operator << (double v)
     {
         uint64_t tmp(0);
         std::memcpy(&tmp, &v, sizeof(v));
@@ -208,12 +210,17 @@ public:
 class OStreamMarker
 {
 public:
-    OStreamMarker(OStream& stream) : m_stream(stream)
-        { m_pos = m_stream.position(); }
+    PDAL_DLL OStreamMarker(OStream& stream) : m_stream(stream)
+    {
+        if (m_stream.isOpen())
+            m_pos = m_stream.position();
+        else
+            m_pos = 0;
+    }
 
-    void mark()
+    PDAL_DLL void mark()
         { m_pos = m_stream.position(); }
-    void rewind()
+    PDAL_DLL void rewind()
         { m_stream.seek(m_pos); }
 
 private:
diff --git a/include/pdal/util/ProgramArgs.hpp b/include/pdal/util/ProgramArgs.hpp
new file mode 100644
index 0000000..27b7e02
--- /dev/null
+++ b/include/pdal/util/ProgramArgs.hpp
@@ -0,0 +1,1101 @@
+/******************************************************************************
+* Copyright (c) 2016, Hobu Inc., hobu at hobu.co
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+****************************************************************************/
+
+#pragma once
+
+#include <deque>
+#include <map>
+#include <memory>
+
+#include <pdal/util/Utils.hpp>
+
+namespace pdal
+{
+
+class arg_error
+{
+public:
+    arg_error(const std::string& error) : m_error(error)
+    {}
+
+    std::string m_error;
+};
+
+
+/**
+   Description of an argument that can be parsed by \class ProgramArgs.
+
+   Stores information about each argument including the required "longname",
+   an optional single-character shortname, a description, and an indicator
+   of the positional-type of the argument.
+*/
+class Arg
+{
+public:
+/**
+  Positional type.  Either None, Optional or Required.
+*/
+enum class PosType
+{
+    None,       ///< Not positional
+    Required,   ///< Required positional
+    Optional    ///< Optional positional
+};
+
+protected:
+    /**
+      Constructor.
+
+      \param longname  Name of argument specified on command line with "--"
+        prefix.
+      \param shortname  Optional name of argument specified on command
+        line with "-" prefix.
+      \param description  Argument description.
+    */
+    Arg(const std::string& longname, const std::string& shortname,
+        const std::string& description) : m_longname(longname),
+        m_shortname(shortname), m_description(description), m_set(false),
+        m_hidden(false), m_positional(PosType::None)
+    {}
+
+public:
+    /**
+      Indicate that the argument shouldn't be shown in help text.
+
+      \param hidden  Whether the argument should be hidden or not
+        [default: true].
+      \return  A reference to this \class Arg, to allow the function
+        call to be chained.
+    */
+    Arg& setHidden(bool hidden = true)
+    {
+        m_hidden = true;
+        return *this;
+    }
+    /**
+      Indicate that the argument is positional.
+
+      Positional arguments may be specified on the command line without
+      any argument name.  Such arguments are required to be specified
+      either with the argument name as a normal option or positionally.
+      Missing positional arguments will raise an exception when the
+      command line is parsed
+    */
+    virtual Arg& setPositional()
+    {
+        m_positional = PosType::Required;
+        return *this;
+    }
+    /**
+      Indicate that the argument is positional and optional.
+
+      Positional arguments may be specified on the command line without
+      any argument name.  Optional positional arguments must be added to
+      \class ProgramArgs after any non-optional arguments.  If optional
+      positional arguments are not found, no exception is raised when
+      the command line is parsed.
+    */
+    virtual Arg& setOptionalPositional()
+    {
+        m_positional = PosType::Optional;
+        return *this;
+    }
+    /**
+      Return whether the argument was set during command-line parsing.
+    */
+    bool set() const
+        { return m_set; }
+
+public:
+    /**
+      Return whether an option needs a value to be valid.  Generally true
+      for all options not bound to boolean values.
+      \note  Not intended to be called from user code.
+    */
+    virtual bool needsValue() const
+        { return true; }
+
+    /**
+      Set a an argument's value from a string.
+
+      Throws an arg_error exception if \a s can't be converted to
+      the argument's type.
+      \note  Not intended to be called from user code.
+
+      \param s  Value to set.
+    */
+    virtual void setValue(const std::string& s) = 0;
+
+    /**
+      Reset the argument's state.
+
+      Set the internal state of the argument and it's referenced variable
+      as if no command-line parsing had occurred.
+      \note  For testing.  Not intended to be called from user code.
+    */
+    virtual void reset() = 0;
+
+    /**
+      Set the argument's value from the positional list.
+      \note  Not intended to be called from user code.
+
+      \param posList  The list of positional strings specified on the command
+        line.
+      \return  The number of positional strings consumed by this argument.
+    */
+    virtual size_t assignPositional(const std::deque<std::string> posList)
+        { return 0; }
+
+    /**
+      Returns the positional type of the argument.
+      \note  Not intended to be called from user code.
+    */
+    PosType positional() const
+        { return m_positional; }
+
+    /**
+      Returns whether the argument is hidden or not.
+      \note  Not intended to be called from user code.
+    */
+    bool hidden() const
+        { return m_hidden; }
+
+    /**
+      Returns the description of the argument.
+      \note  Not intended to be called from user code.
+      \return  Argument description.
+    */
+    std::string description() const
+        { return m_description; }
+
+    /**
+      Returns the longname of the argument.
+      \note  Not intended to be called from user code.
+      \return  Argument long name.
+    */
+    std::string longname() const
+        { return m_longname; }
+
+    /**
+      Returns text indicating the longname and shortname of the option
+      suitable for displaying in help information.
+      \note  Not intended to be called from user code.
+    */
+    std::string nameDescrip() const
+    {
+        std::string s("--");
+        s += m_longname;
+        if (m_shortname.size())
+            s += ", -" + m_shortname;
+        return s;
+    }
+    /**
+      Returns text indicating the name of the option suitable for displaying
+      in "usage" text.
+      \note  Not intended to be called from user code.
+    */
+    std::string commandLine() const
+    {
+        std::string s;
+        if (m_positional == PosType::Required)
+            s =  m_longname;
+        else if (m_positional == PosType::Optional)
+            s += '[' + m_longname + ']';
+        return s;
+    }
+
+protected:
+    std::string m_longname;
+    std::string m_shortname;
+    std::string m_description;
+    std::string m_rawVal;
+    bool m_set;
+    bool m_hidden;
+    PosType m_positional;
+};
+
+/**
+  Description of an argument.  Boolean arguments and vector (list-based)
+  arguments are handled separately.
+*/
+template <typename T>
+class TArg : public Arg
+{
+public:
+    /**
+      Constructor.
+
+      \param longname  Name of argument specified on command line with "--"
+        prefix.
+      \param shortname  Optional name of argument specified on command
+        line with "-" prefix.
+      \param description  Argument description.
+      \param variable  Variable to which the value of the argument should
+        be bound.
+      \param def  Default value to be assigned to the bound variable.
+    */
+    TArg(const std::string& longname, const std::string& shortname,
+        const std::string& description, T& variable, T def) :
+        Arg(longname, shortname, description), m_var(variable),
+        m_defaultVal(def)
+    { m_var = m_defaultVal; }
+
+    /**
+      Set a an argument's value from a string.
+
+      Throws an arg_error exception if \a s can't be converted to
+      the argument's type.  Values must be provided for with the
+      option name.
+      \note  Not intended to be called from user code.
+
+      \param s  Value to set.
+    */
+    virtual void setValue(const std::string& s)
+    {
+        if (s.size() && s[0] == '-')
+        {
+            std::stringstream oss;
+            oss << "Argument '" << m_longname << "' needs a value and none "
+                "was provided.";
+            throw arg_error(oss.str());
+        }
+        m_rawVal = s;
+        if (!Utils::fromString(s, m_var))
+        {
+            std::ostringstream oss;
+            oss << "Invalid value for argument '" << m_longname << "'.";
+            throw arg_error(oss.str());
+        }
+        m_set = true;
+    }
+
+    /**
+      Reset the argument's state.
+
+      Set the interval state of the argument and it's referenced variable
+      as if no command-line parsing had occurred.
+      \note  For testing.  Not intended to be called from user code.
+    */
+    virtual void reset()
+    {
+        m_var = m_defaultVal;
+        m_set = false;
+        m_hidden = false;
+    }
+
+    /**
+      Set the argument's value from the positional list.
+
+      If no value is provided for a required positional option, an arg_error
+      exception is thrown.
+      \note  Not intended to be called from user code.
+
+      \param posList  The list of positional strings specified on the command
+        line.
+      \return  The number of positional strings consumed by this argument
+        (always 0 or 1).
+    */
+    virtual size_t assignPositional(const std::deque<std::string> posList)
+    {
+        if (m_positional == PosType::None || m_set)
+            return 0;
+
+        if (posList.empty())
+        {
+            if (m_positional == PosType::Required)
+            {
+                std::ostringstream oss;
+
+                oss << "Missing value for positional argument '" <<
+                    m_longname << "'.";
+                throw arg_error(oss.str());
+            }
+            else
+                return 0;
+        }
+        setValue(posList.front());
+        return 1;
+    }
+
+private:
+    T& m_var;
+    T m_defaultVal;
+};
+
+/**
+  Description of a boolean argument.  Boolean arguments don't take values.
+  Setting a boolean argument inverts its default value.  Boolean arguments
+  are normally 'false' by default.
+*/
+template <>
+class TArg<bool> : public Arg
+{
+public:
+    /**
+      Constructor for boolean arguments.
+
+      \param longname  Name of argument specified on command line with "--"
+        prefix.
+      \param shortname  Optional name of argument specified on command
+        line with "-" prefix.
+      \param description  Argument description.
+      \param variable  bool variable to which the value of the argument should
+        be bound.
+      \param def  Default value to be assigned to the bound variable.
+    */
+    TArg(const std::string& longname, const std::string& shortname,
+        const std::string& description, bool& variable, bool def) :
+        Arg(longname, shortname, description), m_val(variable),
+        m_defaultVal(def)
+    { m_val = m_defaultVal; }
+
+    /**
+      Return whether an option needs a value to be valid.
+
+      \return false  Boolean values don't need a value.
+      \note  Not intended to be called from user code.
+    */
+    virtual bool needsValue() const
+        { return false; }
+
+    /**
+      Set a an argument's value from a string.
+
+      \note  The string argument is ingored.  The value that is set is 'true'
+        if the variable's default value is 'false', and vice-versa.
+      \note  Not intended to be called from user code.
+
+      \param s  Value to set [ignored].
+    */
+    virtual void setValue(const std::string& s)
+    {
+        if (s.size() && s[0] == '-')
+        {
+            std::stringstream oss;
+            oss << "Argument '" << m_longname << "' needs a value and none "
+                "was provided.";
+            throw arg_error(oss.str());
+        }
+        m_val = !m_defaultVal;
+        m_set = true;
+    }
+
+    /**
+      Reset the argument's state.
+
+      Set the internal state of the argument and it's referenced variable
+      as if no command-line parsing had occurred.
+      \note  For testing.  Not intended to be called from user code.
+    */
+    virtual void reset()
+    {
+        m_val = m_defaultVal;
+        m_set = false;
+        m_hidden = false;
+    }
+
+    /**
+      Indicate that the argument is positional.
+
+      Throws an exception to indicate that boolean arguments can't
+      positional.
+    */
+    virtual Arg& setPositional()
+    {
+        std::ostringstream oss;
+        oss << "Boolean argument '" << m_longname << "' can't be positional.";
+        throw arg_error(oss.str());
+        return *this;
+    }
+
+    /**
+      Indicate that the argument is positional and optional.
+
+      Throws an exception to indicate that boolean arguments can't
+      positional.
+    */
+    virtual Arg& setOptionalPositional()
+    {
+        std::ostringstream oss;
+        oss << "Boolean argument '" << m_longname << "' can't be positional.";
+        throw arg_error(oss.str());
+        return *this;
+    }
+
+private:
+    bool& m_val;
+    bool m_defaultVal;
+};
+
+/**
+  Description of a list-based (vector) argument.  List-based arguments can
+  be specified multiple times, taking multiple values.  List-based
+  arguments are necessarily bound to variables that are vectors.
+  \note  Doesn't properly support list-based boolean values.
+*/
+template <typename T>
+class VArg : public Arg
+{
+public:
+    /**
+      Constructor.
+
+      \param longname  Name of argument specified on command line with "--"
+        prefix.
+      \param shortname  Optional name of argument specified on command
+        line with "-" prefix.
+      \param description  Argument description.
+      \param variable  Variable to which the argument value(s) should be bound.
+    */
+    VArg(const std::string& longname, const std::string& shortname,
+        const std::string& description, std::vector<T>& variable) :
+        Arg(longname, shortname, description), m_var(variable)
+    {}
+
+    /**
+      Set a an argument's value from a string.
+
+      Throws an arg_error exception if \a s can't be converted to
+      the argument's type.
+      \note  Not intended to be called from user code.
+
+      \param s  Value to set.
+    */
+    virtual void setValue(const std::string& s)
+    {
+        if (s.size() && s[0] == '-')
+        {
+            std::stringstream oss;
+            oss << "Argument '" << m_longname << "' needs a value and none "
+                "was provided.";
+            throw arg_error(oss.str());
+        }
+        m_rawVal = s;
+        T var;
+        if (!Utils::fromString(s, var))
+        {
+            std::ostringstream oss;
+            oss << "Invalid value for argument '" << m_longname << "'.";
+            throw arg_error(oss.str());
+        }
+        m_var.push_back(var);
+        m_set = true;
+    }
+
+    /**
+      Reset the argument's state.
+
+      Set the internal state of the argument and it's referenced variable
+      as if no command-line parsing had occurred.
+      \note  For testing.  Not intended to be called from user code.
+    */
+    virtual void reset()
+    {
+        m_var.clear();
+        m_set = false;
+        m_hidden = false;
+    }
+
+    /**
+      Set the argument's value from the positional list.
+
+      List-based arguments consume ALL positional arguments until
+      one is found that can't be converted to the type of the bound variable.
+      \note  Not intended to be called from user code.
+
+      \param posList  The list of positional strings specified on the command
+        line.
+      \return  The number of positional strings consumed by this argument.
+    */
+    virtual size_t assignPositional(const std::deque<std::string> posList)
+    {
+        if (m_positional == PosType::None || m_set)
+            return 0;
+
+        size_t cnt;
+        for (cnt = 0; cnt < posList.size(); ++cnt)
+            try
+            {
+                setValue(posList[cnt]);
+            }
+            catch (arg_error&)
+            {
+                break;
+            }
+        if (cnt == 0 && m_positional == Arg::PosType::Required)
+        {
+            std::ostringstream oss;
+
+            oss << "Missing value for positional argument '" <<
+                m_longname << "'.";
+            throw arg_error(oss.str());
+        }
+        return cnt;
+    }
+
+private:
+    std::vector<T>& m_var;
+};
+
+/**
+  Parses command lines, provides validation and stores found values in
+  bound variables.  Add arguments with \ref add.  When all arguments
+  have been added, use \ref parse to validate command line and assign
+  values to variables bound with \ref add.
+*/
+class ProgramArgs
+{
+public:
+    /**
+      Add a string argument to the list of arguments.
+
+      \param name  Name of argument.  Argument names are specified as
+        "longname[,shortname]", where shortname is an optional one-character
+        abbreviation.
+      \param description  Description of the argument.
+      \param var  Reference to variable to bind to argument.
+      \param def  Default value of argument.
+      \return  Reference to the new argument.
+    */
+    Arg& add(const std::string& name, const std::string description,
+        std::string& var, std::string def)
+    {
+        return add<std::string>(name, description, var, def);
+    }
+
+    /**
+      Add a list-based (vector) string argument
+
+      \param name  Name of argument.  Argument names are specified as
+        "longname[,shortname]", where shortname is an optional one-character
+        abbreviation.
+      \param description  Description of the argument.
+      \param var  Reference to variable to bind to argument.
+      \return  Reference to the new argument.
+    */
+    Arg& add(const std::string& name, const std::string& description,
+        std::vector<std::string>& var)
+    {
+        return add<std::string>(name, description, var);
+    }
+
+    /**
+      Return whether the argument (as specified by it's longname) had
+      its value set during parsing.
+    */
+    bool set(const std::string& name) const
+    {
+        Arg *arg = findLongArg(name);
+        if (arg)
+            return arg->set();
+        return false;
+    }
+
+    /**
+      Add a list-based (vector) argument.
+
+      \param name  Name of argument.  Argument names are specified as
+        "longname[,shortname]", where shortname is an optional one-character
+        abbreviation.
+      \param description  Description of the argument.
+      \param var  Reference to variable to bind to argument.
+      \return  Reference to the new argument.
+    */
+    template<typename T>
+    Arg& add(const std::string& name, const std::string& description,
+        std::vector<T>& var)
+    {
+        std::string longname, shortname;
+        splitName(name, longname, shortname);
+
+        Arg *arg = new VArg<T>(longname, shortname, description, var);
+        addLongArg(longname, arg);
+        addShortArg(shortname, arg);
+        m_args.push_back(std::unique_ptr<Arg>(arg));
+        return *arg;
+    }
+
+    /**
+      Add an argument to the list of arguments.
+
+      \param name  Name of argument.  Argument names are specified as
+        "longname[,shortname]", where shortname is an optional one-character
+        abbreviation.
+      \param description  Description of the argument.
+      \param var  Reference to variable to bind to argument.
+      \param def  Default value of argument.  If not specified, a
+        default-constructed value is used.
+      \return  Reference to the new argument.
+    */
+    template<typename T>
+    Arg& add(const std::string& name, const std::string description, T& var,
+        T def = T())
+    {
+        std::string longname, shortname;
+        splitName(name, longname, shortname);
+
+        Arg *arg = new TArg<T>(longname, shortname, description, var, def);
+        addLongArg(longname, arg);
+        addShortArg(shortname, arg);
+        m_args.push_back(std::unique_ptr<Arg>(arg));
+        return *arg;
+    }
+
+    /**
+      Parse a command line as specified by its argument list.  Parsing
+      validates the argument vector and assigns values to variables bound
+      to added arguments.
+
+      \param argc  Number of entries in the argument list.
+      \param argv  List of strings that constitute the argument list.
+    */
+    void parse(int argc, char *argv[])
+    {
+        std::vector<std::string> s;
+        for (size_t i = 0; i < (size_t)argc; ++i)
+            s.push_back(argv[i]);
+        parse(s);
+    }
+
+    /**
+      Parse a command line as specified by its argument vector.  No validation
+      occurs and no exceptions are raised, but assignments are made
+      to bound variables where possible.
+
+      \param argc  Number of entries in the argument list.
+      \param argv  List of strings that constitute the argument list.
+    */
+    void parseSimple(int argc, char *argv[])
+    {
+        std::vector<std::string> s;
+        for (size_t i = 0; i < (size_t)argc; ++i)
+            s.push_back(argv[i]);
+        parseSimple(s);
+    }
+
+    /**
+      Parse a command line as specified by its argument vector.  No validation
+      occurs and no exceptions are raised, but assignments are made
+      to bound variables where possible.
+
+      \param s  List of strings that constitute the argument list.
+    */
+    void parseSimple(std::vector<std::string>& s)
+    {
+        m_positional.clear();
+        for (size_t i = 0; i < s.size();)
+        {
+            std::string& arg = s[i];
+            // This may be the value, or it may not.  We're passing it along
+            // just in case.  If there is no value, pass along "-" to make
+            // clear that there is none.
+            std::string value((i != s.size() - 1) ? s[i + 1] : "-");
+            try
+            {
+                i += parseArg(arg, value);
+            }
+            catch (arg_error& )
+            {
+                i++;
+            }
+        }
+    }
+
+    /**
+      Parse a command line as specified by its argument list.  Parsing
+      validates the argument vector and assigns values to variables bound
+      to added arguments.
+
+      \param s  List of strings that constitute the argument list.
+    */
+    void parse(std::vector<std::string>& s)
+    {
+        m_positional.clear();
+        validate();
+
+        for (size_t i = 0; i < s.size();)
+        {
+            std::string& arg = s[i];
+            // This may be the value, or it may not.  We're passing it along
+            // just in case.  If there is no value, pass along "-" to make
+            // clear that there is none.
+            std::string value((i != s.size() - 1) ? s[i + 1] : "-");
+            i += parseArg(arg, value);
+        }
+
+        // Go through things looking for matches.
+        for (auto ai = m_args.begin(); ai != m_args.end(); ++ai)
+        {
+            Arg *arg = ai->get();
+            size_t cnt = arg->assignPositional(m_positional);
+            while (cnt--)
+                m_positional.pop_front();
+        }
+    }
+
+    /**
+      Reset the state of all arguments and bound variables as if no parsing
+      had occurred.
+    */
+    void reset()
+    {
+        for (auto ai = m_args.begin(); ai != m_args.end(); ++ai)
+            (*ai)->reset();
+    }
+
+    /**
+      Return a string suitable for use in a "usage" line for display to
+      users as help.
+    */
+    std::string commandLine() const
+    {
+        std::string s;
+
+        for (auto ai = m_args.begin(); ai != m_args.end(); ++ai)
+        {
+            Arg *a = ai->get();
+
+            if (a->hidden())
+                continue;
+            std::string o = a->commandLine();
+            if (o.size())
+                s += o + " ";
+        }
+        if (s.size())
+            s = s.substr(0, s.size() - 1);
+        return s;
+    }
+
+    /**
+      Write a formatted description of arguments to an output stream.
+
+      Write a list of the names and descriptions of arguments suitable for
+      display as help information.
+
+      \param out  Stream to which output should be written.
+      \param indent  Number of characters to indent all text.
+      \param totalWidth  Total width to assume for formatting output.
+        Typically this is the width of a terminal window.
+    */
+    void dump(std::ostream& out, size_t indent, size_t totalWidth)
+    {
+        size_t namelen = 0;
+        std::vector<std::pair<std::string, std::string>> info;
+
+        for (auto ai = m_args.begin(); ai != m_args.end(); ++ai)
+        {
+            Arg *a = ai->get();
+            if (a->hidden())
+                continue;
+
+            std::string nameDescrip = a->nameDescrip();
+
+            info.push_back(std::make_pair(nameDescrip, a->description()));
+            namelen = std::max(namelen, nameDescrip.size());
+        }
+        size_t secondIndent = indent + 4;
+        int postNameSpacing = 2;
+        size_t leadlen = namelen + indent + postNameSpacing;
+        size_t firstlen = totalWidth - leadlen - 1;
+        size_t secondLen = totalWidth - secondIndent - 1;
+
+        bool skipfirst = (firstlen < 10);
+        if (skipfirst)
+            firstlen = secondLen;
+
+        for (auto i : info)
+        {
+            StringList descrip = Utils::wordWrap(i.second, secondLen, firstlen);
+
+            std::string name = i.first;
+            out << std::string(indent, ' ');
+            if (skipfirst)
+                out << name << std::endl;
+            else
+            {
+                name.resize(namelen, ' ');
+                out << name << std::string(postNameSpacing, ' ') <<
+                    descrip[0] << std::endl;
+            }
+            for (size_t i = 1; i < descrip.size(); ++i)
+                out << std::string(secondIndent, ' ') <<
+                    descrip[i] << std::endl;
+        }
+    }
+
+private:
+    /*
+      Split an argument name into longname and shortname.
+
+      \param name  Name of argument specified as "longname[,shortname]".
+      \param[out] longname  Parsed longname.
+      \param[out] shortname  Parsed shortname.
+    */
+    void splitName(const std::string& name, std::string& longname,
+        std::string& shortname)
+    {
+        // Arg names must be specified as "longname[,shortname]" where
+        // shortname is a single character.
+        std::vector<std::string> s = Utils::split(name, ',');
+        if (s.size() > 2)
+            throw arg_error("Invalid program argument specification");
+        if (s.size() == 2 && s[1].size() != 1)
+            throw arg_error("Short argument not specified as single character");
+        if (s.empty())
+            throw arg_error("No program argument provided.");
+        if (s.size() == 1)
+            s.push_back("");
+        longname = s[0];
+        shortname = s[1];
+    }
+
+    /*
+      Add an argument to the list of arguments based on its longname.
+
+      \param name  Argument longname.
+      \param arg   Pointer to argument.
+    */
+    void addLongArg(const std::string& name, Arg *arg)
+    {
+        if (name.empty())
+            return;
+        if (findLongArg(name))
+        {
+            std::ostringstream oss;
+
+            oss << "Argument --" << name << " already exists.";
+            throw arg_error(oss.str());
+        }
+        m_longargs[name] = arg;
+    }
+
+    /*
+      Add an argument to the list of arguments based on its shortname.
+
+      \param name  Argument shortname.
+      \param arg   Pointer to argument.
+    */
+    void addShortArg(const std::string& name, Arg *arg)
+    {
+        if (name.empty())
+            return;
+        if (findShortArg(name[0]))
+        {
+            std::ostringstream oss;
+
+            oss << "Argument -" << name << " already exists.";
+            throw arg_error(oss.str());
+        }
+        m_shortargs[name] = arg;
+    }
+
+    /*
+      Find an argument given its longname.
+
+      \param s  Longname of argument.
+      \return  Pointer to matching argument, or NULL if none was found.
+    */
+    Arg *findLongArg(const std::string& s) const
+    {
+        auto si = m_longargs.find(s);
+        if (si != m_longargs.end())
+            return si->second;
+        return NULL;
+    }
+
+    /*
+      Find an argument given its shortname.
+
+      \param c  Shortnamn of argument.
+      \return  Pointer to matching argument, or NULL if none was found.
+    */
+    Arg *findShortArg(char c) const
+    {
+        std::string s(1, c);
+        auto si = m_shortargs.find(s);
+        if (si != m_shortargs.end())
+            return si->second;
+        return NULL;
+    }
+
+    /*
+      Parse a string-specified argument name and value into its argument.
+
+      \param arg  Name of argument specified on command line.
+      \param value  Potential value assigned to argument.
+      \return  Number of strings consumed (1 for positional arguments or
+        arguments that don't take values or 2 otherwise).
+    */
+    int parseArg(std::string& arg, std::string value)
+    {
+        if (arg.size() > 1 && arg[0] == '-' && arg[1] == '-')
+            return parseLongArg(arg, value);
+        else if (arg.size() && arg[0] == '-')
+            return parseShortArg(arg, value);
+        m_positional.push_back(arg);
+        return 1;
+    }
+
+    /*
+      Parse an argument specified as a long argument (prefixed with "--")
+      Long arguments with values can be specified as
+      "--name=value" or "--name value".
+
+      \param name  Name of argument specified on command line.
+      \param value  Potential value assigned to argument.
+      \return  Number of strings consumed (1 for positional arguments or
+        arguments that don't take values or 2 otherwise).
+    */
+    int parseLongArg(std::string name, std::string value)
+    {
+        bool attachedValue = false;
+
+        if (name.size() == 2)
+            throw arg_error("No argument found following '--'.");
+
+        name = name.substr(2);
+
+        std::size_t pos = name.find_first_of("=");
+        if (pos != std::string::npos)
+        {
+            if (pos < name.size() + 1)
+            {
+                value = name.substr(pos + 1);
+                name = name.substr(0, pos);
+                attachedValue = true;
+            }
+        }
+        Arg *arg = findLongArg(name);
+        if (!arg)
+        {
+            std::ostringstream oss;
+            oss << "Unexpected argument '" << name << "'.";
+            throw arg_error(oss.str());
+        }
+
+        if (!arg->needsValue())
+        {
+            if (attachedValue)
+            {
+                std::ostringstream oss;
+                oss << "Value '" << value << "' provided for argument '" <<
+                    name << "' when none is expected.";
+                throw arg_error(oss.str());
+            }
+            arg->setValue("true");
+            return 1;
+        }
+
+        arg->setValue(value);
+        return (attachedValue ? 1 : 2);
+    }
+
+    /*
+      Parse an argument specified as a short argument (prefixed with "-")
+      Short arguments with values are specified as "-name value".
+
+      \param name  Name of argument specified on command line.
+      \param value  Potential value assigned to argument.
+      \return  Number of strings consumed (1 for positional arguments or
+        arguments that don't take values or 2 otherwise).
+    */
+    int parseShortArg(std::string& name, std::string value)
+    {
+        int cnt = 1;
+
+        if (name.size() == 1)
+            throw arg_error("No argument found following '-'.");
+
+        Arg *arg = findShortArg(name[1]);
+        if (!arg)
+        {
+            std::ostringstream oss;
+            oss << "Unexpected argument '-" << name[1] << "'.";
+            throw arg_error(oss.str());
+        }
+
+        if (arg->needsValue())
+        {
+            if (name.size() == 2)
+            {
+                arg->setValue(value);
+                cnt = 2;
+            }
+            else
+            {
+                std::ostringstream oss;
+
+                oss << "Short option '" << name[1] << "' expects value "
+                    "but appears in option group '" << name << "'.";
+                throw arg_error(oss.str());
+            }
+        }
+        else
+            arg->setValue("true");
+
+        // If we were specifying a bunch of short options in a group
+        // (like -tswq), then rebuild the option name without the
+        // processed value ('t' in the example), and set cnt to 0 to
+        // say that the argument hasn't been consumed.
+        if (name.size() > 2)
+        {
+            name = std::string(1, '-') + name.substr(2);
+            cnt = 0;
+        }
+        return cnt;
+    }
+
+    /*
+      Make sure we don't have any required positional args after
+      non-required positional args.
+    */
+    void validate()
+    {
+        bool opt = false;
+        for (auto ai = m_args.begin(); ai != m_args.end(); ++ai)
+        {
+            Arg *arg = ai->get();
+            if (arg->positional() == Arg::PosType::Optional)
+                opt = true;
+            if (opt && (arg->positional() == Arg::PosType::Required))
+            {
+                std::ostringstream oss;
+                oss << "Found required positional argument '" <<
+                    arg->longname() << "' after optional positional argument.";
+                throw arg_error(oss.str());
+            }
+        }
+    }
+
+    std::vector<std::unique_ptr<Arg>> m_args;  /// Storage for arguments
+    std::map<std::string, Arg *> m_shortargs;  /// Map from shortname to args
+    std::map<std::string, Arg *> m_longargs;  /// Map from longname to args
+
+    /*
+      Contains remaining arguments after positional argument have been
+      processed.
+    */
+    std::deque<std::string> m_positional;
+};
+
+} // namespace pdal
+
diff --git a/include/pdal/util/Utils.hpp b/include/pdal/util/Utils.hpp
index c8b7639..598f9f4 100644
--- a/include/pdal/util/Utils.hpp
+++ b/include/pdal/util/Utils.hpp
@@ -34,8 +34,6 @@
 
 #pragma once
 
-#include <pdal/pdal_internal.hpp>
-
 #include <algorithm>
 #include <string>
 #include <cassert>
@@ -48,86 +46,81 @@
 #include <limits>
 #include <cstring>
 #include <sstream>
+#include <typeinfo>
 #include <vector>
 #include <map>
+#include <cstdint>
 
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/lexical_cast.hpp>
+#include "pdal_util_export.hpp"
 
 namespace pdal
 {
 
 namespace Utils
 {
+    /**
+      Set a seed for random number generation.
+
+      \param seed  Seed value.
+    */
     PDAL_DLL void random_seed(unsigned int seed);
-    PDAL_DLL double random(double minimum, double maximum);
-    PDAL_DLL double uniform(const double& minimum=0.0f,
-        const double& maximum=1.0f, uint32_t seed=0);
-    PDAL_DLL double normal(const double& mean=0.0f, const double& sigma=1.0f,
-        uint32_t seed=0);
-
-    // compares two values to within a given tolerance
-    // the value |tolerance| is compared to |actual - expected|
-    template<class T>
-    bool compare_approx(const T& actual, const T& expected, const T& tolerance)
-    {
-        double diff = std::abs((double)actual - (double)expected);
-        return diff <= std::abs((double) tolerance);
-    }
 
-    // compares two values to within the datatype's epsilon
-    template<class T>
-    bool compare_distance(const T& actual, const T& expected)
-    {
-        const T epsilon = std::numeric_limits<T>::epsilon();
-        return compare_approx<T>(actual, expected, epsilon);
-    }
+    /**
+      Generate a random value in the range [minimum, maximum].
 
-    // From http://stackoverflow.com/questions/485525/round-for-float-in-c
-    inline double sround(double r)
-        { return (r > 0.0) ? floor(r + 0.5) : ceil(r - 0.5); }
+      \param minimum  Lower value of range for random number generation.
+      \param maximum  Upper value of range for random number generation.
+    */
+    PDAL_DLL double random(double minimum, double maximum);
 
-    inline std::vector<uint8_t>
-    hex_string_to_binary(std::string const& source)
+    /**
+      Generate values in a uniform distribution in the range [minimum, maximum]
+      using the provided seed value.
+
+      \param double  Lower value of range for random number generation.
+      \param double  Upper value of range for random number generation.
+      \param seed    Seed value for random number generation.
+    */
+    PDAL_DLL double uniform(const double& minimum, const double& maximum,
+        uint32_t seed);
+    /**
+      Generate values in a normal distribution in the range [minimum, maximum]
+      using the provided seed value.
+
+      \param double  Lower value of range for random number generation.
+      \param double  Upper value of range for random number generation.
+      \param seed    Seed value for random number generation.
+    */
+    PDAL_DLL double normal(const double& mean, const double& sigma,
+        uint32_t seed);
+
+    /**
+      Determine if two values are within a particular range of each other.
+
+      \param v1  First value to compare.
+      \param v2  Second value to compare.
+      \param tolerance  Maximum difference between \ref v1 and \ref v2
+    */
+    PDAL_DLL inline bool compare_approx(double v1, double v2, double tolerance)
     {
-        // Stolen from http://stackoverflow.com/questions/7363774/  ...
-        //    c-converting-binary-data-to-a-hex-string-and-back
-        static int nibbles[] =
-            { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0,
-              10, 11, 12, 13, 14, 15 };
-        std::vector<unsigned char> retval;
-        for (auto it = source.begin(); it < source.end(); it += 2) {
-            unsigned char v = 0;
-            if (::isxdigit(*it))
-                v = (unsigned char)nibbles[::toupper(*it) - '0'] << 4;
-            if (it + 1 < source.end() && ::isxdigit(*(it + 1)))
-                v += (unsigned char)nibbles[::toupper(*(it + 1)) - '0'];
-            retval.push_back(v);
-        }
-        return retval;
+        double diff = std::abs(v1 - v2);
+        return diff <= std::abs(tolerance);
     }
 
-    inline void binary_to_hex_stream(unsigned char* source,
-        std::ostream& destination, int start, int end )
-    {
-        static char syms[] = "0123456789ABCDEF";
-        for (int i = start; i != end; i++)
-            destination << syms[((source[i] >> 4) & 0xf)] <<
-                           syms[source[i] & 0xf];
-    }
+    /**
+      Round double value to nearest integral value.
 
-    inline std::string binary_to_hex_string(
-        const std::vector<unsigned char>& source)
-    {
-        static char syms[] = "0123456789ABCDEF";
-        std::stringstream ss;
-        for (std::vector<unsigned char>::const_iterator it = source.begin();
-                it != source.end(); it++)
-            ss << syms[((*it >> 4) & 0xf)] << syms[*it & 0xf];
+      \param r  Value to round
+      \return  Rounded value
+    */
+    inline double sround(double r)
+        { return (r > 0.0) ? floor(r + 0.5) : ceil(r - 0.5); }
 
-        return ss.str();
-    }
+    /**
+      Convert a string to lowercase.
 
+      \return  Converted string.
+    **/
     inline std::string tolower(const std::string& s)
     {
         std::string out;
@@ -136,6 +129,11 @@ namespace Utils
         return out;
     }
 
+    /**
+      Convert a string to uppercase.
+
+      \return  Converted string.
+    */
     inline std::string toupper(const std::string& s)
     {
         std::string out;
@@ -144,6 +142,13 @@ namespace Utils
         return out;
     }
 
+    /**
+      Compare strings in a case-insensitive manner.
+
+      \param s  First string to compare.
+      \param s2  Second string to compare.
+      \return  Whether the strings are equal.
+    */
     inline bool iequals(const std::string& s, const std::string& s2)
     {
         if (s.length() != s2.length())
@@ -154,6 +159,13 @@ namespace Utils
         return true;
     }
 
+    /**
+      Determine if a string starts with a particular prefix.
+
+      \param s  String to check for prefix.
+      \param prefix  Prefix to search for.
+      \return  Whether the string begins with the prefix.
+    */
     inline bool startsWith(const std::string& s, const std::string& prefix)
     {
         if (prefix.size() > s.size())
@@ -161,6 +173,14 @@ namespace Utils
         return (strncmp(prefix.data(), s.data(), prefix.size()) == 0);
     }
 
+    /**
+      Generate a checksum that is the integer sum of the values of the bytes
+      in a buffer.
+
+      \param buf  Pointer to buffer.
+      \param size  Size of buffer.
+      \return  Generated checksum.
+    */
     inline int cksum(char *buf, size_t size)
     {
         int i = 0;
@@ -169,49 +189,211 @@ namespace Utils
         return i;
     }
 
-    PDAL_DLL void *registerPlugin(void *stageFactoryPtr,
-        std::string const& filename, std::string const& registerMethodName,
-        std::string const& versionMethodName);
+    /**
+      Fetch the value of an environment variable.
+
+      \param name  Name of environment varaible.
+      \param name  Value of the environemnt variable if it exists, empty
+        otherwise.
+      \return  0 on success, -1 on failure
+    */
+    PDAL_DLL int getenv(std::string const& name, std::string& val);
+
+    /**
+      Set the value of an environment variable.
+
+      \param env  Name of environment variable.
+      \param val  Value of environment variable.
+      \return  0 on success, -1 on failure
+    */
+    PDAL_DLL int setenv(const std::string& env, const std::string& val);
 
-    PDAL_DLL char *getenv(const char *env);
-    PDAL_DLL std::string getenv(std::string const& name);
-    PDAL_DLL int putenv(const char *env);
+    /**
+      Clear the value of an environment variable.
 
-    // aid to operator>> parsers
+      \param env  Name of the environment variable to clear.
+      \return  0 on success, -1 on failure
+    */
+    PDAL_DLL int unsetenv(const std::string& env);
+
+    /**
+      Skip stream input until a non-space character is found.
+
+      \param s  Stream to process.
+    */
     PDAL_DLL void eatwhitespace(std::istream& s);
+
+    /**
+      Remove whitspace from the beginning of a string.
+
+      \param s  String to be trimmed.
+    */
     PDAL_DLL void trimLeading(std::string& s);
+
+    /**
+      Remove whitspace from the end of a string.
+
+      \param s  String to be trimmed.
+    */
     PDAL_DLL void trimTrailing(std::string& s);
+
+    /**
+      Remove whitespace from the beginning and end of a string.
+
+      \param s  String to be trimmed.
+    */
     inline void trim(std::string& s)
     {
         trimLeading(s);
         trimTrailing(s);
     }
-    // if char found, eats it and returns true; otherwise, don't eat it and
-    // then return false
+
+    /**
+      If specified character is at the current stream position, advance the
+      stream position by 1.
+
+      \param s  Stream to insect.
+      \param x  Character to check for.
+      \return \c true if the character is at the current stream position,
+        \c false otherwise.
+    */
     PDAL_DLL bool eatcharacter(std::istream& s, char x);
-    PDAL_DLL uint32_t getStreamPrecision(double scale);
-    PDAL_DLL void *getDLLSymbol(std::string const& library,
-        std::string const& name);
+
+    /**
+      Convert a buffer to a string using base64 encoding.
+
+      \param buf  Pointer to buffer to encode.
+      \param size  Size of buffer.
+      \return  Encoded buffer.
+    */
     PDAL_DLL std::string base64_encode(const unsigned char *buf, size_t size);
+
+    /**
+      Convert a buffer to a string using base64 encoding.
+
+      \param bytes  Pointer to buffer to encode.
+      \return  Encoded buffer.
+    */
     inline std::string base64_encode(std::vector<uint8_t> const& bytes)
         { return base64_encode(bytes.data(), bytes.size()); }
+
+    /**
+      Decode a base64-encoded string into a buffer.
+
+      \param input  String to decode.
+      \return  Buffer containing decoded string.
+    */
     PDAL_DLL std::vector<uint8_t>
     base64_decode(std::string const& input);
 
+    /**
+      Start a process to run a command and open a pipe to which input can
+      be written and from which output can be read.
+
+      \param command  Command to run in subprocess.
+      \mode  Either 'r', 'w' or 'r+' to specify if the pipe should be opened
+        as read-only, write-only or read-write.
+      \return  Pointer to FILE for input/output from the subprocess.
+    */
     PDAL_DLL FILE* portable_popen(const std::string& command,
         const std::string& mode);
+    /**
+      Close file opened with \ref portable_popen.
+
+      \param fp  Pointer to file to close.
+      \return  0 on success, -1 on failure.
+    */
     PDAL_DLL int portable_pclose(FILE* fp);
+
+    /**
+      Create a subprocess and set the standard output of the command into the
+      provided output string.
+
+      \param cmd  Command to run.
+      \param output  String to which output from the command should be written,
+    */
     PDAL_DLL int run_shell_command(const std::string& cmd, std::string& output);
-    PDAL_DLL std::string replaceAll(std::string result,
-        const std::string& replaceWhat, const std::string& replaceWithWhat);
-    PDAL_DLL StringList wordWrap(std::string const& inputString,
-        size_t lineLength);
+
+    /**
+      Replace all instances of one string found in the input with another value.
+
+      \param input  Input string to modify.
+      \param replaceWhat  Token to locate in input string.
+      \param replaceWithWhat  Replacement for found tokens.
+      \return  Modified version of input string.
+    */
+    PDAL_DLL std::string replaceAll(std::string input,
+        const std::string& replaceWhat , const std::string& replaceWithWhat);
+
+    /**
+      Break a string into a list of strings to not exceed a specified length.
+      The first string can optionally have a maximum length other than that
+      of the rest of the strings.
+
+      \param inputString  String to split into substrings.
+      \param lineLength  Maximum length of substrings.
+      \param firstLength  When non-zero, the maximum length of the first
+        substring.  When zero, the first firstLength is assigned the value
+        provided in lineLength.
+      \return  List of substrings generated from the input string.
+    */
+    PDAL_DLL std::vector<std::string> wordWrap(std::string const& inputString,
+        size_t lineLength, size_t firstLength = 0);
+
+    /**
+      Add escape characters or otherwise transform an input string so as to
+      be a valid JSON string.
+
+      \param s  Input string.
+      \return  Valid JSON version of input string.
+    */
     PDAL_DLL std::string escapeJSON(const std::string &s);
+
+    /**
+      Demangle a C++ symbol into readable form.
+
+      \param s  String to demangle.
+      \return  Demangled symbol.
+    */
     PDAL_DLL std::string demangle(const std::string& s);
+
+    /**
+      Return the screen width of an associated tty.
+
+      \return  The tty screen width or 80 if on Windows or it can't be
+        determined.
+    */
     PDAL_DLL int screenWidth();
+
+    /**
+      Escape non-printing characters by using standard notation (i.e. \n)
+      or hex notation (\x10) as as necessary.
+
+      \param s  String to modify.
+      \return  Copy of input string with non-printing characters converted
+        to printable notation.
+    */
     PDAL_DLL std::string escapeNonprinting(const std::string& s);
+
+    /**
+      Convert an input buffer to a hexadecimal string representation similar
+      to the output of the UNIX command 'od'.  This is mostly used as an
+      occasional debugging aid.
+
+      \param buf  Point to buffer to dump.
+      \param count  Size of buffer.
+      \return  Buffer converted to hex string.
+    */
     PDAL_DLL std::string hexDump(const char *buf, size_t count);
 
+    /**
+      Count the number of characters in a string that meet a predicate.
+
+      \param s  String in which to start counting characters.
+      \param p  Position in input string at which to start counting.
+      \param pred  Unary predicte that tests a character.
+      \return  Then number of characters matching the predicate.
+    */
     template<typename PREDICATE>
     PDAL_DLL std::string::size_type
     extract(const std::string& s, std::string::size_type p, PREDICATE pred)
@@ -222,12 +404,15 @@ namespace Utils
         return count;
     }
 
-    /// Split a string into substrings.  Characters matching the predicate are
-    ///   discarded.
-    /// \param[in] s  String to split.
-    /// \param[in] p  Predicate returns true if a char in a string is a split
-    ///   location.
-    /// \return  Vector of substrings.
+    /**
+      Split a string into substrings based on a predicate.  Characters
+      matching the predicate are discarded.
+
+      \param s  String to split.
+      \param p  Unary predicate that returns true to indicate that a character
+        is a split location.
+      \return  Substrings.
+    */
     template<typename PREDICATE>
     PDAL_DLL std::vector<std::string> split(const std::string& s, PREDICATE p)
     {
@@ -236,23 +421,31 @@ namespace Utils
         if (s.empty())
             return result;
 
-        auto it = s.begin();
-        decltype(it) endIt;
+        auto it = s.cbegin();
+        auto const end = s.cend();
+        decltype(it) nextIt;
         do
         {
-            endIt = std::find_if(it, s.end(), p);
-            result.push_back(std::string(it, endIt));
-            it = endIt + 1;
-        } while (endIt != s.end());
+            nextIt = std::find_if(it, end, p);
+            result.push_back(std::string(it, nextIt));
+
+            // Avoid advancing the iterator past the end to avoid UB.
+            if (nextIt != end)
+                it = nextIt + 1;
+        } while (nextIt != end);
+
         return result;
     }
 
-    /// Split a string into substrings.  Characters matching the predicate are
-    ///   discarded, as are empty strings otherwise produced by split().
-    /// \param[in] s  String to split.
-    /// \param[in] p  Predicate returns true if a char in a string is a split
-    ///   location.
-    /// \return  Vector of substrings.
+    /**
+      Split a string into substrings.  Characters matching the predicate are
+      discarded, as are empty strings otherwise produced by \ref split().
+
+      \param s  String to split.
+      \param p  Predicate returns true if a char in a string is a split
+        location.
+      \return  Vector of substrings.
+    */
     template<typename PREDICATE>
     PDAL_DLL std::vector<std::string> split2(const std::string& s, PREDICATE p)
     {
@@ -261,18 +454,31 @@ namespace Utils
         if (s.empty())
             return result;
 
-        auto it = s.begin();
-        decltype(it) endIt;
+        auto it = s.cbegin();
+        auto const end = s.cend();
+        decltype(it) nextIt;
         do
         {
-            endIt = std::find_if(it, s.end(), p);
-            if (it != endIt)
-                result.push_back(std::string(it, endIt));
-            it = endIt + 1;
-        } while (endIt != s.end());
+            nextIt = std::find_if(it, end, p);
+            if (it != nextIt)
+                result.push_back(std::string(it, nextIt));
+
+            // Avoid advancing the iterator past the end to avoid UB.
+            if (nextIt != end)
+                it = nextIt + 1;
+        } while (nextIt != end);
+
         return result;
     }
 
+    /**
+      Split a string into substrings based a splitting character.  The
+      splitting characters are discarded.
+
+      \param s  String to split.
+      \param p  Character indicating split positions.
+      \return  Substrings.
+    */
     inline PDAL_DLL std::vector<std::string>
     split(const std::string& s, char tChar)
     {
@@ -280,7 +486,15 @@ namespace Utils
         return split(s, pred);
     }
 
+    /**
+      Split a string into substrings based a splitting character.  The
+      splitting characters are discarded as are empty strings otherwise
+      produced by \ref split().
 
+      \param s  String to split.
+      \param p  Character indicating split positions.
+      \return  Substrings.
+    */
     inline PDAL_DLL std::vector<std::string>
     split2(const std::string& s, char tChar)
     {
@@ -288,6 +502,12 @@ namespace Utils
         return split2(s, pred);
     }
 
+    /**
+      Return a string representation of a type specified by the template
+      argument.
+
+      \return  String representation of the type.
+    */
     template<typename T>
     std::string typeidName()
         { return Utils::demangle(typeid(T).name()); }
@@ -302,10 +522,13 @@ namespace Utils
         std::streambuf *m_buf;
     };
 
-    /// Redirect a stream to some other stream.
-    /// \param[in] out   Stream to redirect.
-    /// \param[in] dst   Destination stream.
-    /// \return  Context for stream restoration (see restore()).
+    /**
+      Redirect a stream to some other stream.
+
+      \param out   Stream to redirect.
+      \param dst   Destination stream.
+      \return  Context for stream restoration (see \ref restore()).
+    */
     inline RedirectStream redirect(std::ostream& out, std::ostream& dst)
     {
         RedirectStream redir;
@@ -316,11 +539,13 @@ namespace Utils
         return redir;
     }
 
+    /**
+      Redirect a stream to some file, by default /dev/null.
 
-    /// Redirect a stream to some file, by default /dev/null.
-    /// \param[in] out   Stream to redirect.
-    /// \param[in] file  Name of file where stream should be redirected.
-    /// \return  Context for stream restoration (see restore()).
+      \param out   Stream to redirect.
+      \param file  Name of file where stream should be redirected.
+      \return  Context for stream restoration (see \ref restore()).
+    */
     inline RedirectStream redirect(std::ostream& out,
         const std::string& file = "/dev/null")
     {
@@ -332,10 +557,13 @@ namespace Utils
         return redir;
     }
 
-    /// Restore a stream redirected with redirect().
-    /// \param[in] out  Stream to be restored.
-    /// \param[in] redir RedirectStream returned from corresponding
-    /// redirect() call.
+    /**
+      Restore a stream redirected with redirect().
+
+      \param out  Stream to be restored.
+      \param redir RedirectStream returned from corresponding
+        \ref redirect() call.
+    */
     inline void restore(std::ostream& out, RedirectStream redir)
     {
         out.rdbuf(redir.m_buf);
@@ -350,10 +578,14 @@ namespace Utils
     //  has the advantage of not requiring an exception to indicate an error.
     //  We should investigate incorporating a version of boost::numeric_cast
     //  that avoids the exception for an error.
-    // Determine whether a value of a given input type may be safely
-    // statically casted to the given output type without over/underflow.  If
-    // the output type is integral, inRange() will determine whether the
-    // rounded input value, rather than truncated, may be safely converted.
+    /**
+      Determine whether a double value may be safely converted to the given
+      output type without over/underflow.  If the output type is integral the
+      input will be rounded before being tested.
+
+      \param in  Value to range test.
+      \return  Whether value can be safely converted to template type.
+    */
     template<typename T_OUT>
     bool inRange(double in)
     {
@@ -367,6 +599,15 @@ namespace Utils
             in <= static_cast<double>(std::numeric_limits<T_OUT>::max()));
     }
 
+    /**
+      Determine whether a value may be safely converted to the given
+      output type without over/underflow.  If the output type is integral and
+      different from the input time, the value will be rounded before being
+      tested.
+
+      \param in  Value to range test.
+      \return  Whether value can be safely converted to template type.
+    */
     template<typename T_IN, typename T_OUT>
     bool inRange(T_IN in)
     {
@@ -374,6 +615,16 @@ namespace Utils
             inRange<T_OUT>(static_cast<double>(in));
     }
 
+    /**
+      Convert a numeric value from one type to another.  Floating point
+      values are rounded to the nearest integer before a conversion is
+      attempted.
+
+      \param in  Value to convert.
+      \param out  Converted value.
+      \return  \c true if the conversion was successful, \c false if the
+        datatypes/input value don't allow conversion.
+    */
     template<typename T_IN, typename T_OUT>
     bool numericCast(T_IN in, T_OUT& out)
     {
@@ -394,6 +645,12 @@ namespace Utils
         return false;
     }
 
+    /**
+      Convert a value to its string representation by writing to a stringstream.
+
+      \param from  Value to convert.
+      \return  String representation.
+    */
     template<typename T>
     std::string toString(const T& from)
     {
@@ -402,6 +659,12 @@ namespace Utils
         return oss.str();
     }
 
+    /**
+      Convert a double to string with a precision of 10 decimal places.
+
+      \param from  Value to convert.
+      \return  String representation of numeric value.
+    */
     inline std::string toString(double from)
     {
         std::ostringstream oss;
@@ -409,6 +672,12 @@ namespace Utils
         return oss.str();
     }
 
+    /**
+      Convert a float to string with a precision of 10 decimal places.
+
+      \param from  Value to convert.
+      \return  String representation of numeric value.
+    */
     inline std::string toString(float from)
     {
         std::ostringstream oss;
@@ -416,50 +685,127 @@ namespace Utils
         return oss.str();
     }
 
+    /**
+      Convert a long long int to string.
+
+      \param from  Value to convert.
+      \return  String representation of numeric value.
+    */
     inline std::string toString(long long from)
         { return std::to_string(from); }
 
+    /**
+      Convert an unsigned long long int to string.
+
+      \param from  Value to convert.
+      \return  String representation of numeric value.
+    */
     inline std::string toString(unsigned long from)
         { return std::to_string(from); }
 
+    /**
+      Convert a long int to string.
+
+      \param from  Value to convert.
+      \return  String representation of numeric value.
+    */
     inline std::string toString(long from)
         { return std::to_string(from); }
 
+    /**
+      Convert an unsigned int to string.
+
+      \param from  Value to convert.
+      \return  String representation of numeric value.
+    */
     inline std::string toString(unsigned int from)
         { return std::to_string(from); }
 
+    /**
+      Convert an int to string.
+
+      \param from  Value to convert.
+      \return  String representation of numeric value.
+    */
     inline std::string toString(int from)
         { return std::to_string(from); }
 
+    /**
+      Convert an unsigned short to string.
+
+      \param from  Value to convert.
+      \return  String representation of numeric value.
+    */
     inline std::string toString(unsigned short from)
         { return std::to_string((int)from); }
 
+    /**
+      Convert a short int to string.
+
+      \param from  Value to convert.
+      \return  String representation of numeric value.
+    */
     inline std::string toString(short from)
         { return std::to_string((int)from); }
 
+    /**
+      Convert a char (treated as numeric) to string.
+
+      \param from  Value to convert.
+      \return  String representation of numeric value.
+    */
     inline std::string toString(char from)
         { return std::to_string((int)from); }
 
+    /**
+      Convert an unsigned char (treated as numeric) to string.
+
+      \param from  Value to convert.
+      \return  String representation of numeric value.
+    */
     inline std::string toString(unsigned char from)
         { return std::to_string((int)from); }
 
+    /**
+      Convert a signed char (treated as numeric) to string.
+
+      \param from  Value to convert.
+      \return  String representation of numeric value.
+    */
     inline std::string toString(signed char from)
         { return std::to_string((int)from); }
 
+    /**
+      Convert a string to a value by reading from a string stream.
+
+      \param from  String to convert.
+      \param to  Converted value.
+      \return  \c true if the conversion was successful, \c false otherwise.
+    */
     template<typename T>
     bool fromString(const std::string& from, T& to)
     {
-        try
-        {
-            to = boost::lexical_cast<T>(from);
-        }
-        catch (boost::bad_lexical_cast&)
-        {
-            return false;
-        }
+        std::istringstream iss(from);
+
+        iss >> to;
+        return !iss.fail();
+    }
+
+    // Optimization of above.
+    template<>
+    inline bool fromString(const std::string& from, std::string& to)
+    {
+        to = from;
         return true;
     }
 
+    /**
+      Convert a numeric string to a char numeric value.
+
+      \parm s  String to convert.
+      \param to  Converted numeric value.
+      \return  \c true if the conversion was successful, \c false otherwise.
+    */
     template<>
     inline bool fromString<char>(const std::string& s, char& to)
     {
@@ -473,6 +819,13 @@ namespace Utils
         return false;
     }
 
+    /**
+      Convert a numeric string to an unsigned char numeric value.
+
+      \parm s  String to convert.
+      \param to  Converted numeric value.
+      \return  \c true if the conversion was successful, \c false otherwise.
+    */
     template<>
     inline bool fromString<unsigned char>(const std::string& s,
         unsigned char& to)
@@ -487,6 +840,13 @@ namespace Utils
         return false;
     }
 
+    /**
+      Convert a numeric string to a signed char numeric value.
+
+      \parm s  String to convert.
+      \param to  Converted numeric value.
+      \return  \c true if the conversion was successful, \c false otherwise.
+    */
     template<>
     inline bool fromString<signed char>(const std::string& s, signed char& to)
     {
diff --git a/include/pdal/util/Uuid.hpp b/include/pdal/util/Uuid.hpp
new file mode 100644
index 0000000..8b7b4a3
--- /dev/null
+++ b/include/pdal/util/Uuid.hpp
@@ -0,0 +1,240 @@
+/******************************************************************************
+* Copyright (c) 2014, Hobu Inc., hobu at hobu.co
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+ * Copyright (C) 1996, 1997 Theodore Ts'o.
+ *
+ * %Begin-Header%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, and the entire permission notice in its entirety,
+ *    including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+ * WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ * %End-Header%
+****************************************************************************/
+
+// This is a C++ification of the libuuid code, less the code that actually
+// creates UUIDs, which is most of it and we don't need at this time.
+
+#pragma once
+
+#include <cstdint>
+#include <string>
+
+#include "pdal_util_export.hpp"
+
+#include "Inserter.hpp"
+#include "Extractor.hpp"
+
+#ifdef PDAL_COMPILER_MSVC
+#  pragma warning(push)
+#  pragma warning(disable: 4267 4244)  // ignore conversion warnings
+#endif
+
+
+namespace pdal
+{
+
+#pragma pack(push)
+#pragma pack(1)
+struct uuid
+{
+    uint32_t time_low;
+    uint16_t time_mid;
+    uint16_t time_hi_and_version;
+    uint16_t clock_seq;
+    uint8_t node[6];
+};
+#pragma pack(pop)
+
+inline bool operator < (const uuid& u1, const uuid& u2)
+{
+    if (u1.time_low != u2.time_low)
+        return u1.time_low < u2.time_low;
+    if (u1.time_mid != u2.time_mid)
+        return u1.time_mid < u2.time_mid;
+    if (u1.time_hi_and_version != u2.time_hi_and_version)
+        return u1.time_hi_and_version < u2.time_hi_and_version;
+    for (size_t i = 0; i < sizeof(u1.node); ++i)
+        if (u1.node[i] != u2.node[i])
+            return u1.node[i] < u2.node[i];
+    return false;
+}
+
+class PDAL_DLL Uuid
+{
+    friend inline bool operator < (const Uuid& u1, const Uuid& u2);
+public:
+    Uuid()
+        { clear(); }
+    Uuid(const char *c)
+        { unpack(c); }
+    Uuid(const std::string& s)
+        { parse(s); }
+
+    void clear()
+        { memset(&m_data, 0, sizeof(m_data)); }
+
+    void unpack(const char *c)
+    {
+        BeExtractor e(c, 10);
+
+        e >> m_data.time_low >> m_data.time_mid >>
+            m_data.time_hi_and_version >> m_data.clock_seq;
+        c += 10;
+        std::copy(c, c + 6, m_data.node);
+    }
+
+    void pack(char *c) const
+    {
+        BeInserter i(c, 10);
+
+        i << m_data.time_low << m_data.time_mid <<
+            m_data.time_hi_and_version << m_data.clock_seq;
+        c += 10;
+        std::copy(m_data.node, m_data.node + 6, c);
+    }
+
+    bool parse(const std::string& s)
+    {
+        if (s.length() != 36)
+            return false;
+
+        // Format validation.
+        const char *cp = s.data();
+        for (size_t i = 0; i < 36; i++) {
+            if ((i == 8) || (i == 13) || (i == 18) || (i == 23))
+            {
+                if (*cp != '-')
+                    return false;
+            }
+            else if (!isxdigit(*cp))
+                return false;
+            ++cp;
+        }
+
+        cp = s.data();
+        m_data.time_low = strtoul(cp, NULL, 16);
+        m_data.time_mid = (uint16_t)strtoul(cp + 9, NULL, 16);
+        m_data.time_hi_and_version = (uint16_t)strtoul(cp + 14, NULL, 16);
+        m_data.clock_seq = (uint16_t)strtoul(cp + 19, NULL, 16);
+
+        // Extract bytes as pairs of hex digits.
+        cp = s.data() + 24;
+        char buf[3];
+        buf[2] = 0;
+        for (size_t i = 0; i < 6; i++) {
+            buf[0] = *cp++;
+            buf[1] = *cp++;
+            m_data.node[i] = (uint8_t)strtoul(buf, NULL, 16);
+        }
+        return true;
+    }
+
+    std::string unparse() const
+    {
+        std::vector<char> buf(36 + 1);
+        const char fmt[] = "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X";
+
+        // TODO: use snprintf after switch to C++11
+        sprintf(buf.data(), fmt,
+            m_data.time_low, m_data.time_mid, m_data.time_hi_and_version,
+            m_data.clock_seq >> 8, m_data.clock_seq & 0xFF,
+            m_data.node[0], m_data.node[1], m_data.node[2],
+            m_data.node[3], m_data.node[4], m_data.node[5]);
+        return std::string(buf.data());
+    }
+
+    std::string toString() const
+        { return unparse(); }
+
+    bool empty() const
+    { return isNull(); }
+
+    bool isNull() const
+    {
+        const char *c = (const char *)&m_data;
+        for (size_t i = 0; i < sizeof(m_data); ++i)
+            if (*c++ != 0)
+                return false;
+        return true;
+    }
+
+/**
+    // Sadly, MS doesn't do constexpr.
+    static constexpr size_t size()
+        { return sizeof(m_data); }
+**/
+    static const int size = sizeof(uuid);
+
+private:
+    uuid m_data;
+};
+
+inline bool operator == (const Uuid& u1, const Uuid& u2)
+{
+    return !(u1 < u2) && !(u2 < u1);
+}
+
+inline bool operator < (const Uuid& u1, const Uuid& u2)
+{
+    return u1.m_data < u2.m_data;
+}
+
+inline std::ostream& operator << (std::ostream& out, const Uuid& u)
+{
+    out << u.toString();
+    return out;
+}
+
+inline std::istream& operator >> (std::istream& in, Uuid& u)
+{
+    std::string s;
+    in >> s;
+    if (!u.parse(s))
+        in.setstate(std::ios::failbit);
+    return in;
+}
+
+} // namespace pdal
+
+#ifdef PDAL_COMPILER_MSVC
+#  pragma warning(pop)
+#endif
+
diff --git a/include/pdal/util/pdal_util_export.hpp b/include/pdal/util/pdal_util_export.hpp
new file mode 100644
index 0000000..2816916
--- /dev/null
+++ b/include/pdal/util/pdal_util_export.hpp
@@ -0,0 +1,51 @@
+/******************************************************************************
+ * Copyright (c) 2010, Howard Butler
+ *
+ * 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 in
+ *       the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of the Martin Isenburg or Iowa Department
+ *       of Natural Resources nor the names of its contributors may be
+ *       used to endorse or promote products derived from this software
+ *       without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ ****************************************************************************/
+
+// This eliminates the need to include pdal base includes in code for the Util
+// library.
+
+#pragma once
+
+#ifndef PDAL_DLL
+#if defined(_WIN32)
+#   define PDAL_DLL   __declspec(dllexport)
+#else
+#  if defined(USE_GCC_VISIBILITY_FLAG)
+#    define PDAL_DLL     __attribute__ ((visibility("default")))
+#  else
+#    define PDAL_DLL
+#  endif
+#endif
+#endif
+
diff --git a/include/pdal/util/portable_endian.hpp b/include/pdal/util/portable_endian.hpp
index 7a5fa21..b8d294e 100644
--- a/include/pdal/util/portable_endian.hpp
+++ b/include/pdal/util/portable_endian.hpp
@@ -41,23 +41,14 @@
 #   define __PDP_ENDIAN    PDP_ENDIAN
 **/
             
-#elif defined(__OpenBSD__)
-             
-#   include <sys/endian.h>
-              
-#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)
-               
+#elif defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)
+
 #   include <sys/endian.h>
-                
-#   define be16toh betoh16
-#   define le16toh letoh16
-                 
-#   define be32toh betoh32
-#   define le32toh letoh32
-                  
-#   define be64toh betoh64
-#   define le64toh letoh64
-                   
+
+#elif defined(__FreeBSD_kernel__)
+     
+#   include <endian.h>
+      
 #elif defined(__WINDOWS__)
                     
 #   include <winsock2.h>
diff --git a/io/CMakeLists.txt b/io/CMakeLists.txt
index e198fd8..096ae5d 100644
--- a/io/CMakeLists.txt
+++ b/io/CMakeLists.txt
@@ -1,4 +1,5 @@
 add_subdirectory(bpf)
+add_subdirectory(buffer)
 add_subdirectory(derivative)
 add_subdirectory(faux)
 add_subdirectory(ilvis2)
diff --git a/io/bpf/BpfCompressor.cpp b/io/bpf/BpfCompressor.cpp
index a7ad226..df2eadd 100644
--- a/io/bpf/BpfCompressor.cpp
+++ b/io/bpf/BpfCompressor.cpp
@@ -69,7 +69,7 @@ void BpfCompressor::startBlock()
 void BpfCompressor::compress()
 {
     // Note our position so that we know how much we've written.
-    std::size_t rawWritten = m_out.position();
+    uint32_t rawWritten = (uint32_t)m_out.position();
 
     // Pop our temp stream so that we can write the real output file.
     m_out.popStream();
diff --git a/io/bpf/BpfHeader.cpp b/io/bpf/BpfHeader.cpp
index 0632dc6..57a2d93 100644
--- a/io/bpf/BpfHeader.cpp
+++ b/io/bpf/BpfHeader.cpp
@@ -34,8 +34,6 @@
 
 #include <iostream>
 
-#include <boost/lexical_cast.hpp>
-
 #include <pdal/util/IStream.hpp>
 #include <pdal/util/OStream.hpp>
 
@@ -92,7 +90,7 @@ bool BpfHeader::readV3(ILeStream& stream)
         return false;
 
     stream.get(m_ver, 4);
-    m_version = boost::lexical_cast<int32_t>(m_ver);
+    Utils::fromString(m_ver, m_version);
 
     uint8_t numDim;
     stream >> m_len >> numDim >> interleave >> m_compression >>
@@ -326,7 +324,7 @@ bool BpfUlemFile::write(OLeStream& stream)
     stream << m_len;
     stream.put(m_filename, 32);
 
-    std::ifstream in(m_filespec);
+    std::ifstream in(m_filespec, std::ios::binary);
     uint32_t len = m_len;
 
     const uint32_t MAX_BLOCKSIZE = 1000000;
diff --git a/io/bpf/BpfReader.cpp b/io/bpf/BpfReader.cpp
index 7ddb45f..db413b6 100644
--- a/io/bpf/BpfReader.cpp
+++ b/io/bpf/BpfReader.cpp
@@ -34,10 +34,13 @@
 
 #include "BpfReader.hpp"
 
+#include <climits>
+
 #include <zlib.h>
 
 #include <pdal/Options.hpp>
 #include <pdal/pdal_export.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -114,9 +117,9 @@ void BpfReader::initialize()
     uint32_t zone(abs(m_header.m_coordId));
     std::string code("");
     if (m_header.m_coordId > 0)
-        code = "EPSG:326" + boost::lexical_cast<std::string>(zone);
+        code = "EPSG:326" + Utils::toString(zone);
     else
-        code = "EPSG:327" + boost::lexical_cast<std::string>(zone);
+        code = "EPSG:327" + Utils::toString(zone);
     SpatialReference srs(code);
     setSpatialReference(srs);
 
@@ -137,9 +140,13 @@ void BpfReader::initialize()
     // Fast forward file to end of header as reported by base header.
     std::streampos pos = m_stream.position();
     if (pos > m_header.m_len)
-        throw pdal_error("BPF Header length exceeded that reported by file.");
-    else if (pos < m_header.m_len)
-        m_stream.seek(m_header.m_len);
+    {
+        std::ostringstream oss;
+        oss << getName() << ": BPF Header length exceeded that reported by "
+            "file.";
+        throw pdal_error(oss.str());
+    }
+    m_stream.close();
 }
 
 
@@ -179,8 +186,11 @@ bool BpfReader::readUlemFiles()
 {
     BpfUlemFile file;
     while (file.read(m_stream))
-        m_metadata.addEncoded(file.m_filename,
+    {
+        MetadataNode m = m_metadata.add("bundled_file");
+        m.addEncoded(file.m_filename,
             (const unsigned char *)file.m_buf.data(), file.m_len);
+    }
     return (bool)m_stream;
 }
 
@@ -217,6 +227,8 @@ bool BpfReader::readPolarData()
 
 void BpfReader::ready(PointTableRef)
 {
+    m_stream.open(m_filename);
+    m_stream.seek(m_header.m_len);
     m_index = 0;
     m_start = m_stream.position();
     if (m_header.m_compression)
@@ -238,6 +250,25 @@ void BpfReader::ready(PointTableRef)
 void BpfReader::done(PointTableRef)
 {
      delete m_stream.popStream();
+     m_stream.close();
+}
+
+
+bool BpfReader::processOne(PointRef& point)
+{
+    switch (m_header.m_pointFormat)
+    {
+    case BpfFormat::PointMajor:
+        readPointMajor(point);
+        break;
+    case BpfFormat::DimMajor:
+        readDimMajor(point);
+        break;
+    case BpfFormat::ByteMajor:
+        readByteMajor(point);
+        break;
+    }
+    return !eof() && (m_index < m_count);
 }
 
 
@@ -251,8 +282,6 @@ point_count_t BpfReader::read(PointViewPtr data, point_count_t count)
         return readDimMajor(data, count);
     case BpfFormat::ByteMajor:
         return readByteMajor(data, count);
-    default:
-        break;
     }
     return 0;
 }
@@ -282,9 +311,38 @@ bool BpfReader::eof()
 }
 
 
-point_count_t BpfReader::readPointMajor(PointViewPtr data, point_count_t count)
+void BpfReader::readPointMajor(PointRef& point)
 {
-    PointId nextId = data->size();
+    double x(0), y(0), z(0);
+
+    seekPointMajor(m_index);
+    for (size_t dim = 0; dim < m_dims.size(); ++dim)
+    {
+        float f;
+
+        m_stream >> f;
+        double d = f + m_dims[dim].m_offset;
+        if (m_dims[dim].m_id == Dimension::Id::X)
+            x = d;
+        else if (m_dims[dim].m_id == Dimension::Id::Y)
+            y = d;
+        else if (m_dims[dim].m_id == Dimension::Id::Z)
+            z = d;
+        else
+            point.setField(m_dims[dim].m_id, d);
+    }
+
+    m_header.m_xform.apply(x, y, z);
+    point.setField(Dimension::Id::X, x);
+    point.setField(Dimension::Id::Y, y);
+    point.setField(Dimension::Id::Z, z);
+    m_index++;
+}
+
+
+point_count_t BpfReader::readPointMajor(PointViewPtr view, point_count_t count)
+{
+    PointId nextId = view->size();
     PointId idx = m_index;
     point_count_t numRead = 0;
     seekPointMajor(idx);
@@ -295,20 +353,19 @@ point_count_t BpfReader::readPointMajor(PointViewPtr data, point_count_t count)
             float f;
 
             m_stream >> f;
-            data->setField(m_dims[d].m_id, nextId, f + m_dims[d].m_offset);
+            view->setField(m_dims[d].m_id, nextId, f + m_dims[d].m_offset);
         }
 
         // Transformation only applies to X, Y and Z
-        double x = data->getFieldAs<double>(Dimension::Id::X, nextId);
-        double y = data->getFieldAs<double>(Dimension::Id::Y, nextId);
-        double z = data->getFieldAs<double>(Dimension::Id::Z, nextId);
+        double x = view->getFieldAs<double>(Dimension::Id::X, nextId);
+        double y = view->getFieldAs<double>(Dimension::Id::Y, nextId);
+        double z = view->getFieldAs<double>(Dimension::Id::Z, nextId);
         m_header.m_xform.apply(x, y, z);
-        data->setField(Dimension::Id::X, nextId, x);
-        data->setField(Dimension::Id::Y, nextId, y);
-        data->setField(Dimension::Id::Z, nextId, z);
-
+        view->setField(Dimension::Id::X, nextId, x);
+        view->setField(Dimension::Id::Y, nextId, y);
+        view->setField(Dimension::Id::Z, nextId, z);
         if (m_cb)
-            m_cb(*data, nextId);
+            m_cb(*view, nextId);
 
         idx++;
         numRead++;
@@ -318,6 +375,38 @@ point_count_t BpfReader::readPointMajor(PointViewPtr data, point_count_t count)
     return numRead;
 }
 
+
+// This isn't lovely as we have to seek for each dimension access.
+void BpfReader::readDimMajor(PointRef& point)
+{
+    double x(0), y(0), z(0);
+
+    for (size_t dim = 0; dim < m_dims.size(); ++dim)
+    {
+        seekDimMajor(dim, m_index);
+
+        float f;
+        m_stream >> f;
+        double d = f + m_dims[dim].m_offset;
+        if (m_dims[dim].m_id == Dimension::Id::X)
+            x = d;
+        else if (m_dims[dim].m_id == Dimension::Id::Y)
+            y = d;
+        else if (m_dims[dim].m_id == Dimension::Id::Z)
+            z = d;
+        else
+            point.setField(m_dims[dim].m_id, d);
+    }
+
+    // Transformation only applies to X, Y and Z
+    m_header.m_xform.apply(x, y, z);
+    point.setField(Dimension::Id::X, x);
+    point.setField(Dimension::Id::Y, y);
+    point.setField(Dimension::Id::Z, z);
+    m_index++;
+}
+
+
 point_count_t BpfReader::readDimMajor(PointViewPtr data, point_count_t count)
 {
     PointId idx(0);
@@ -357,13 +446,54 @@ point_count_t BpfReader::readDimMajor(PointViewPtr data, point_count_t count)
     return numRead;
 }
 
+
+void BpfReader::readByteMajor(PointRef& point)
+{
+    // We need a temp buffer for the point data
+    union uu
+    {
+        float f;
+        uint32_t u32;
+    } u;
+    double x(0), y(0), z(0);
+    uint8_t u8;
+
+    for (size_t dim = 0; dim < m_dims.size(); ++dim)
+    {
+        u.u32 = 0;
+        for (size_t b = 0; b < sizeof(float); ++b)
+        {
+            seekByteMajor(dim, b, m_index);
+
+            m_stream >> u8;
+            u.u32 |= ((uint32_t)u8 << (b * CHAR_BIT));
+        }
+        double d = u.f + m_dims[dim].m_offset;
+        if (m_dims[dim].m_id == Dimension::Id::X)
+            x = d;
+        else if (m_dims[dim].m_id == Dimension::Id::Y)
+            y = d;
+        else if (m_dims[dim].m_id == Dimension::Id::Z)
+            z = d;
+        else
+            point.setField(m_dims[dim].m_id, d);
+    }
+
+    m_header.m_xform.apply(x, y, z);
+    point.setField(Dimension::Id::X, x);
+    point.setField(Dimension::Id::Y, y);
+    point.setField(Dimension::Id::Z, z);
+    m_index++;
+}
+
+
 point_count_t BpfReader::readByteMajor(PointViewPtr data, point_count_t count)
 {
     PointId idx(0);
     PointId startId = data->size();
     point_count_t numRead = 0;
 
-    // We need a temp buffer for the point data->
+    // We need a temp buffer for the point data
     union uu
     {
         float f;
@@ -445,7 +575,8 @@ void BpfReader::seekByteMajor(size_t dimIdx, size_t byteIdx, PointId ptIdx)
 }
 
 
-int BpfReader::inflate(char *buf, size_t insize, char *outbuf, size_t outsize)
+int BpfReader::inflate(char *buf, uint32_t insize,
+    char *outbuf, uint32_t outsize)
 {
    if (insize == 0)
         return 0;
diff --git a/io/bpf/BpfReader.hpp b/io/bpf/BpfReader.hpp
index 051ea8a..50c5725 100644
--- a/io/bpf/BpfReader.hpp
+++ b/io/bpf/BpfReader.hpp
@@ -43,6 +43,7 @@
 #include <pdal/util/Charbuf.hpp>
 #include <pdal/util/IStream.hpp>
 #include <pdal/pdal_export.hpp>
+#include <pdal/plugin.hpp>
 
 #include "BpfHeader.hpp"
 
@@ -86,20 +87,25 @@ private:
     virtual void initialize();
     virtual void addDimensions(PointLayoutPtr Layout);
     virtual void ready(PointTableRef table);
+    virtual bool processOne(PointRef& point);
     virtual point_count_t read(PointViewPtr data, point_count_t num);
     virtual void done(PointTableRef table);
-    virtual bool eof();
+
 
     bool readUlemData();
     bool readUlemFiles();
     bool readHeaderExtraData();
     bool readPolarData();
+    void readPointMajor(PointRef& point);
     point_count_t readPointMajor(PointViewPtr data, point_count_t count);
+    void readDimMajor(PointRef& point);
     point_count_t readDimMajor(PointViewPtr data, point_count_t count);
+    void readByteMajor(PointRef& point);
     point_count_t readByteMajor(PointViewPtr data, point_count_t count);
     size_t readBlock(std::vector<char>& outBuf, size_t index);
+    bool eof();
 
-    int inflate(char *inbuf, size_t insize, char *outbuf, size_t outsize);
+    int inflate(char *inbuf, uint32_t insize, char *outbuf, uint32_t outsize);
 
     void seekPointMajor(PointId ptIdx);
     void seekDimMajor(size_t dimIdx, PointId ptIdx);
diff --git a/io/bpf/BpfWriter.cpp b/io/bpf/BpfWriter.cpp
index b153939..ef45508 100644
--- a/io/bpf/BpfWriter.cpp
+++ b/io/bpf/BpfWriter.cpp
@@ -34,12 +34,15 @@
 
 #include "BpfWriter.hpp"
 
+#include <climits>
+
 #include <pdal/Options.hpp>
 #include <pdal/pdal_export.hpp>
 
 #include <zlib.h>
 
 #include "BpfCompressor.hpp"
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/io/bpf/BpfWriter.hpp b/io/bpf/BpfWriter.hpp
index 70099de..d03a0a3 100644
--- a/io/bpf/BpfWriter.hpp
+++ b/io/bpf/BpfWriter.hpp
@@ -42,6 +42,7 @@
 #include <pdal/pdal_export.hpp>
 #include <pdal/FlexWriter.hpp>
 #include <pdal/util/OStream.hpp>
+#include <pdal/plugin.hpp>
 
 #include <vector>
 
diff --git a/include/pdal/BufferReader.hpp b/io/buffer/BufferReader.hpp
similarity index 100%
rename from include/pdal/BufferReader.hpp
rename to io/buffer/BufferReader.hpp
diff --git a/io/buffer/CMakeLists.txt b/io/buffer/CMakeLists.txt
new file mode 100644
index 0000000..d9158fc
--- /dev/null
+++ b/io/buffer/CMakeLists.txt
@@ -0,0 +1,15 @@
+#
+# Buffer driver CMake configuration
+#
+
+#
+# Buffer Reader
+#
+
+set(incs
+    BufferReader.hpp
+)
+
+install(FILES ${incs} DESTINATION "${PDAL_INCLUDE_INSTALL_DIR}")
+set(PDAL_TARGET_OBJECTS ${PDAL_TARGET_OBJECTS} ${objects} PARENT_SCOPE)
+
diff --git a/io/derivative/DerivativeWriter.cpp b/io/derivative/DerivativeWriter.cpp
index a70ae39..53bd998 100644
--- a/io/derivative/DerivativeWriter.cpp
+++ b/io/derivative/DerivativeWriter.cpp
@@ -36,8 +36,10 @@
 
 #include <pdal/PointView.hpp>
 #include <pdal/util/Utils.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <algorithm>
+#include <cfloat>
 #include <cmath>
 #include <iostream>
 #include <limits>
@@ -45,6 +47,7 @@
 #include <boost/filesystem.hpp>
 
 #include "gdal_priv.h" // For File I/O
+#include "gdal_version.h" // For version info
 #include "ogr_spatialref.h"  //For Geographic Information/Transformations
 
 namespace pdal
@@ -64,7 +67,7 @@ std::string DerivativeWriter::getName() const
 const double c_pi = 3.14159265358979323846; /*!< PI value */
 const float c_background = FLT_MIN;
 
-DerivativeWriter::DerivativeWriter() : m_primitive_type(0)
+DerivativeWriter::DerivativeWriter()
 {
     GDALAllRegister();
 }
@@ -74,14 +77,10 @@ void DerivativeWriter::processOptions(const Options& ops)
 {
     m_GRID_DIST_X = ops.getValueOrDefault<double>("grid_dist_x", 15.0);
     m_GRID_DIST_Y = ops.getValueOrDefault<double>("grid_dist_y", 15.0);
-}
-
-
-void DerivativeWriter::initialize()
-{
+    handleFilenameTemplate();
 
     // maybe we eventually introduce an option to do more than slope
-    //std::vector<Option> types = options.getOptions("output_type");
+    //std::vector<Option> types = ops.getOptions("output_type");
 
     //if (!types.size())
     //    m_outputTypes = OUTPUT_TYPE_ALL;
@@ -103,36 +102,67 @@ void DerivativeWriter::initialize()
     //            m_outputTypes = OUTPUT_TYPE_ALL;
     //    }
     //}
-    std::string primitive_type =
-        getOptions().getValueOrDefault<std::string>("primitive_type", "slope_d8");
-
-    if (Utils::iequals(primitive_type, "slope_d8"))
-        m_primitive_type = SLOPE_D8;
-    else if (Utils::iequals(primitive_type, "slope_fd"))
-        m_primitive_type = SLOPE_FD;
-    else if (Utils::iequals(primitive_type, "aspect_d8"))
-        m_primitive_type = ASPECT_D8;
-    else if (Utils::iequals(primitive_type, "aspect_fd"))
-        m_primitive_type = ASPECT_FD;
-    else if (Utils::iequals(primitive_type, "hillshade"))
-        m_primitive_type = HILLSHADE;
-    else if (Utils::iequals(primitive_type, "contour_curvature"))
-        m_primitive_type = CONTOUR_CURVATURE;
-    else if (Utils::iequals(primitive_type, "profile_curvature"))
-        m_primitive_type = PROFILE_CURVATURE;
-    else if (Utils::iequals(primitive_type, "tangential_curvature"))
-        m_primitive_type = TANGENTIAL_CURVATURE;
-    else if (Utils::iequals(primitive_type, "total_curvature"))
-        m_primitive_type = TOTAL_CURVATURE;
-    else if (Utils::iequals(primitive_type, "catchment_area"))
-        m_primitive_type = CATCHMENT_AREA;
-    else
+
+    std::map<std::string, PrimitiveType> primtypes;
+    primtypes["slope_d8"] = SLOPE_D8;
+    primtypes["slope_fd"] = SLOPE_FD;
+    primtypes["aspect_d8"] = ASPECT_D8;
+    primtypes["aspect_fd"] = ASPECT_FD;
+    primtypes["hillshade"] = HILLSHADE;
+    primtypes["contour_curvature"] = CONTOUR_CURVATURE;
+    primtypes["profile_curvature"] = PROFILE_CURVATURE;
+    primtypes["tangential_curvature"] = TANGENTIAL_CURVATURE;
+    primtypes["total_curvature"] = TOTAL_CURVATURE;
+    primtypes["catchment_area"] = CATCHMENT_AREA;
+
+    std::string primTypes = ops.getValueOrDefault("primitive_type", "slope_d8");
+    StringList types = Utils::split2(primTypes, ',');
+
+    if (m_hashPos == std::string::npos && types.size() > 1)
     {
         std::ostringstream oss;
-        oss << "Unrecognized primitive type " << primitive_type;
-        throw pdal_error(oss.str().c_str());
+
+        oss << getName() << ": No template placeholder ('#') found in "
+            "filename '" << m_filename << "' when one is required with "
+            "multiple primitive types.";
+        throw pdal_error(oss.str());
     }
 
+    for (std::string os : types)
+    {
+        Utils::trim(os);
+        std::string s = Utils::tolower(os);
+        auto pi = primtypes.find(s);
+        if (pi == primtypes.end())
+        {
+            std::ostringstream oss;
+            oss << getName() << ": Unrecognized primitive type '" << os <<
+                "'.";
+            throw pdal_error(oss.str());
+        }
+        TypeOutput to;
+        to.m_type = pi->second;
+        to.m_filename = generateFilename(pi->first) ;
+        m_primitiveTypes.push_back(to);
+    }
+}
+
+
+std::string
+DerivativeWriter::generateFilename(const std::string& primName) const
+{
+    // We've already checked during argument parsing that we have a valid
+    // template placeholder (#) if necessary.
+    std::string filename = m_filename;
+    if (m_hashPos != std::string::npos)
+        filename.replace(m_hashPos, 1, primName);
+    return filename;
+}
+
+
+void DerivativeWriter::initialize()
+{
+
     setBounds(BOX2D());
 }
 
@@ -148,7 +178,8 @@ Options DerivativeWriter::getDefaultOptions()
     return options;
 }
 
-double DerivativeWriter::GetNeighbor(Eigen::MatrixXd* data, int row, int col, Direction d)
+double DerivativeWriter::GetNeighbor(Eigen::MatrixXd* data, int row, int col,
+    Direction d)
 {
     double val;
     switch (d)
@@ -184,6 +215,7 @@ double DerivativeWriter::GetNeighbor(Eigen::MatrixXd* data, int row, int col, Di
     return val;
 }
 
+
 double DerivativeWriter::determineSlopeFD(Eigen::MatrixXd* data, int row,
         int col, double postSpacing, double valueToIgnore)
 {
@@ -233,6 +265,7 @@ double DerivativeWriter::determineSlopeFD(Eigen::MatrixXd* data, int row,
     return tSlopeValDegree;
 }
 
+
 double DerivativeWriter::determineSlopeD8(Eigen::MatrixXd* data, int row,
         int col, double postSpacing, double valueToIgnore)
 {
@@ -254,13 +287,14 @@ double DerivativeWriter::determineSlopeD8(Eigen::MatrixXd* data, int row,
     double southeast = GetNeighbor(data, row, col, SOUTHEAST);
     double southwest = GetNeighbor(data, row, col, SOUTHWEST);
 
-    auto checkVal =
-        [val, &tSlopeVal, valueToIgnore, postSpacing](double neighbor, double phi)
+    auto checkVal = [val, &tSlopeVal, valueToIgnore, postSpacing]
+        (double neighbor, double phi)
     {
         if (neighbor != valueToIgnore)
         {
             neighbor = (val - neighbor) / (postSpacing * phi);
-            if (std::fabs(neighbor) > std::fabs(tSlopeVal) || tSlopeVal == valueToIgnore)
+            if ((std::fabs(neighbor) > std::fabs(tSlopeVal)) ||
+                (tSlopeVal == valueToIgnore))
                 tSlopeVal = neighbor;
         }
     };
@@ -322,6 +356,7 @@ double DerivativeWriter::determineAspectFD(Eigen::MatrixXd* data, int row,
     return 180.0 - std::atan(zY/zX) + 90.0 * (zX / std::fabs(zX));
 }
 
+
 double DerivativeWriter::determineAspectD8(Eigen::MatrixXd* data, int row,
         int col, double postSpacing)
 {
@@ -330,7 +365,7 @@ double DerivativeWriter::determineAspectD8(Eigen::MatrixXd* data, int row,
     double tH = postSpacing;
     double tVal, tN, tS, tE, tW, tNW, tNE, tSW, tSE, nextTVal;
     double tSlopeVal = std::numeric_limits<double>::max(), tSlopeValDegree;
-    int tNextY, tNextX;
+//     int tNextY, tNextX;
     unsigned int j = 0;
 
     tVal = (*data)(row, col);
@@ -968,11 +1003,11 @@ GDALDataset* DerivativeWriter::createFloat32GTIFF(std::string filename,
         {
             char **papszOptions = NULL;
 
-            boost::filesystem::path p(filename);
+            pdalboost::filesystem::path p(filename);
             p.replace_extension(".tif");
             GDALDataset *dataset;
             dataset = tpDriver->Create(p.string().c_str(), cols, rows, 1,
-                                       GDT_Float32, papszOptions);
+                GDT_Float32, papszOptions);
 
             BOX2D& extent = getBounds();
 
@@ -999,7 +1034,8 @@ GDALDataset* DerivativeWriter::createFloat32GTIFF(std::string filename,
 
 
 void DerivativeWriter::writeSlope(Eigen::MatrixXd* tDemData,
-                                  const PointViewPtr data, SlopeMethod method)
+        const PointViewPtr data, PrimitiveType method,
+        const std::string& filename)
 {
     BOX2D& extent = getBounds();
 
@@ -1007,7 +1043,7 @@ void DerivativeWriter::writeSlope(Eigen::MatrixXd* tDemData,
     double tPostSpacing = std::max(m_GRID_DIST_X, m_GRID_DIST_Y);
 
     GDALDataset *mpDstDS;
-    mpDstDS = createFloat32GTIFF(m_filename, m_GRID_SIZE_X, m_GRID_SIZE_Y);
+    mpDstDS = createFloat32GTIFF(filename, m_GRID_SIZE_X, m_GRID_SIZE_Y);
 
     // if we have a valid file
     if (mpDstDS)
@@ -1034,17 +1070,20 @@ void DerivativeWriter::writeSlope(Eigen::MatrixXd* tDemData,
                 //Compute Slope Value
                 switch (method)
                 {
-                    case SD8:
+                    case SLOPE_D8:
                         tSlopeValDegree = (float)determineSlopeD8(tDemData,
                                           tYOut, tXOut, tPostSpacing,
                                           c_background);
                         break;
 
-                    case SFD:
+                    case SLOPE_FD:
                         tSlopeValDegree = (double)determineSlopeFD(tDemData,
                                           tYOut, tXOut, tPostSpacing,
                                           c_background);
                         break;
+                    default:
+                        assert(false);
+                        return;
                 }
 
                 poRasterData[(tYIn * m_GRID_SIZE_X) + tXIn] =
@@ -1060,9 +1099,20 @@ void DerivativeWriter::writeSlope(Eigen::MatrixXd* tDemData,
             tBand->SetNoDataValue((double)c_background);
 
             if (m_GRID_SIZE_X > 0 && m_GRID_SIZE_Y > 0)
+// #define STR_HELPER(x) #x
+// #define STR(x) STR_HELPER(x)
+//
+// #pragma message "content of GDAL_VERSION_MAJOR:" STR(GDAL_VERSION_MAJOR)
+#if GDAL_VERSION_MAJOR <= 1
                 tBand->RasterIO(GF_Write, 0, 0, m_GRID_SIZE_X, m_GRID_SIZE_Y,
                                 poRasterData, m_GRID_SIZE_X, m_GRID_SIZE_Y,
                                 GDT_Float32, 0, 0);
+#else
+
+                int ret = tBand->RasterIO(GF_Write, 0, 0, m_GRID_SIZE_X, m_GRID_SIZE_Y,
+                                          poRasterData, m_GRID_SIZE_X, m_GRID_SIZE_Y,
+                                          GDT_Float32, 0, 0, 0);
+#endif
         }
 
         GDALClose((GDALDatasetH) mpDstDS);
@@ -1073,7 +1123,7 @@ void DerivativeWriter::writeSlope(Eigen::MatrixXd* tDemData,
 
 
 void DerivativeWriter::writeAspect(Eigen::MatrixXd* tDemData,
-                                   const PointViewPtr data, AspectMethod method)
+    const PointViewPtr data, PrimitiveType method, const std::string& filename)
 {
     BOX2D& extent = getBounds();
 
@@ -1081,7 +1131,7 @@ void DerivativeWriter::writeAspect(Eigen::MatrixXd* tDemData,
     double tPostSpacing = std::max(m_GRID_DIST_X, m_GRID_DIST_Y);
 
     GDALDataset *mpDstDS;
-    mpDstDS = createFloat32GTIFF(m_filename, m_GRID_SIZE_X, m_GRID_SIZE_Y);
+    mpDstDS = createFloat32GTIFF(filename, m_GRID_SIZE_X, m_GRID_SIZE_Y);
 
     // if we have a valid file
     if (mpDstDS)
@@ -1108,21 +1158,24 @@ void DerivativeWriter::writeAspect(Eigen::MatrixXd* tDemData,
                 //Compute Aspect Value
                 switch (method)
                 {
-                    case AD8:
+                    case ASPECT_D8:
                         tSlopeValDegree = (float)determineAspectD8(tDemData,
                                           tYOut, tXOut, tPostSpacing);
                         break;
-
-                    case SFD:
+                    case ASPECT_FD:
                         tSlopeValDegree = (float)determineAspectFD(tDemData,
-                                          tYOut, tXOut, tPostSpacing, c_background);
+                                tYOut, tXOut, tPostSpacing, c_background);
                         break;
+                    default:
+                        assert(false);
+                        return;
                 }
 
                 if (tSlopeValDegree == std::numeric_limits<double>::max())
                     poRasterData[(tYIn * m_GRID_SIZE_X) + tXIn] = c_background;
                 else
-                    poRasterData[(tYIn * m_GRID_SIZE_X) + tXIn] = tSlopeValDegree;
+                    poRasterData[(tYIn * m_GRID_SIZE_X) + tXIn] =
+                        tSlopeValDegree;
             }
         }
 
@@ -1134,9 +1187,15 @@ void DerivativeWriter::writeAspect(Eigen::MatrixXd* tDemData,
             tBand->SetNoDataValue((double)c_background);
 
             if (m_GRID_SIZE_X > 0 && m_GRID_SIZE_Y > 0)
+#if GDAL_VERSION_MAJOR <= 1
                 tBand->RasterIO(GF_Write, 0, 0, m_GRID_SIZE_X, m_GRID_SIZE_Y,
                                 poRasterData, m_GRID_SIZE_X, m_GRID_SIZE_Y,
                                 GDT_Float32, 0, 0);
+#else
+                int ret = tBand->RasterIO(GF_Write, 0, 0, m_GRID_SIZE_X, m_GRID_SIZE_Y,
+                                          poRasterData, m_GRID_SIZE_X, m_GRID_SIZE_Y,
+                                          GDT_Float32, 0, 0, 0);
+#endif
         }
 
         GDALClose((GDALDatasetH) mpDstDS);
@@ -1147,7 +1206,7 @@ void DerivativeWriter::writeAspect(Eigen::MatrixXd* tDemData,
 
 
 void DerivativeWriter::writeCatchmentArea(Eigen::MatrixXd* tDemData,
-        const PointViewPtr data)
+        const PointViewPtr data, const std::string& filename)
 {
     Eigen::MatrixXd area(m_GRID_SIZE_Y, m_GRID_SIZE_X);
     area.setZero();
@@ -1158,7 +1217,7 @@ void DerivativeWriter::writeCatchmentArea(Eigen::MatrixXd* tDemData,
     double tPostSpacing = std::max(m_GRID_DIST_X, m_GRID_DIST_Y);
 
     GDALDataset *mpDstDS;
-    mpDstDS = createFloat32GTIFF(m_filename, m_GRID_SIZE_X, m_GRID_SIZE_Y);
+    mpDstDS = createFloat32GTIFF(filename, m_GRID_SIZE_X, m_GRID_SIZE_Y);
 
     // if we have a valid file
     if (mpDstDS)
@@ -1214,9 +1273,15 @@ void DerivativeWriter::writeCatchmentArea(Eigen::MatrixXd* tDemData,
             tBand->SetNoDataValue((double)c_background);
 
             if (m_GRID_SIZE_X > 0 && m_GRID_SIZE_Y > 0)
+#if GDAL_VERSION_MAJOR <= 1
                 tBand->RasterIO(GF_Write, 0, 0, m_GRID_SIZE_X, m_GRID_SIZE_Y,
                                 poRasterData, m_GRID_SIZE_X, m_GRID_SIZE_Y,
                                 GDT_Float32, 0, 0);
+#else
+                int ret = tBand->RasterIO(GF_Write, 0, 0, m_GRID_SIZE_X, m_GRID_SIZE_Y,
+                                          poRasterData, m_GRID_SIZE_X, m_GRID_SIZE_Y,
+                                          GDT_Float32, 0, 0, 0);
+#endif
         }
 
         GDALClose((GDALDatasetH) mpDstDS);
@@ -1290,7 +1355,7 @@ void DerivativeWriter::writeCatchmentArea(Eigen::MatrixXd* tDemData,
 
 
 void DerivativeWriter::writeHillshade(Eigen::MatrixXd* tDemData,
-                                      const PointViewPtr data)
+    const PointViewPtr data, const std::string& filename)
 {
     BOX2D& extent = getBounds();
 
@@ -1298,7 +1363,7 @@ void DerivativeWriter::writeHillshade(Eigen::MatrixXd* tDemData,
     double tPostSpacing = std::max(m_GRID_DIST_X, m_GRID_DIST_Y);
 
     GDALDataset *mpDstDS;
-    mpDstDS = createFloat32GTIFF(m_filename, m_GRID_SIZE_X, m_GRID_SIZE_Y);
+    mpDstDS = createFloat32GTIFF(filename, m_GRID_SIZE_X, m_GRID_SIZE_Y);
 
     // if we have a valid file
     if (mpDstDS)
@@ -1358,9 +1423,16 @@ void DerivativeWriter::writeHillshade(Eigen::MatrixXd* tDemData,
             tBand->SetNoDataValue((double)c_background);
 
             if (m_GRID_SIZE_X > 0 && m_GRID_SIZE_Y > 0)
+#if GDAL_VERSION_MAJOR <= 1
                 tBand->RasterIO(GF_Write, 0, 0, m_GRID_SIZE_X, m_GRID_SIZE_Y,
                                 poRasterData, m_GRID_SIZE_X, m_GRID_SIZE_Y,
                                 GDT_Float32, 0, 0);
+#else
+
+                int ret = tBand->RasterIO(GF_Write, 0, 0, m_GRID_SIZE_X, m_GRID_SIZE_Y,
+                                          poRasterData, m_GRID_SIZE_X, m_GRID_SIZE_Y,
+                                          GDT_Float32, 0, 0, 0);
+#endif
         }
 
         GDALClose((GDALDatasetH) mpDstDS);
@@ -1371,9 +1443,8 @@ void DerivativeWriter::writeHillshade(Eigen::MatrixXd* tDemData,
 
 
 void DerivativeWriter::writeCurvature(Eigen::MatrixXd* tDemData,
-                                      const PointViewPtr data,
-                                      CurvatureType curveType,
-                                      double valueToIgnore)
+    const PointViewPtr data, PrimitiveType curveType, double valueToIgnore,
+    const std::string& filename)
 {
     BOX2D& extent = getBounds();
 
@@ -1381,85 +1452,99 @@ void DerivativeWriter::writeCurvature(Eigen::MatrixXd* tDemData,
     double tPostSpacing = std::max(m_GRID_DIST_X, m_GRID_DIST_Y);
 
     GDALDataset *mpDstDS;
-    mpDstDS = createFloat32GTIFF(m_filename, m_GRID_SIZE_X, m_GRID_SIZE_Y);
+    mpDstDS = createFloat32GTIFF(filename, m_GRID_SIZE_X, m_GRID_SIZE_Y);
 
     // if we have a valid file
-    if (mpDstDS)
+    if (!mpDstDS)
+        return;
+
+    // loop over the raster and determine max slope at each location
+    int tXStart = 1, tXEnd = m_GRID_SIZE_X - 1;
+    int tYStart = 1, tYEnd = m_GRID_SIZE_Y - 1;
+    std::vector<float> poRasterData(m_GRID_SIZE_X * m_GRID_SIZE_Y);
+    for (uint32_t i=0; i<m_GRID_SIZE_X*m_GRID_SIZE_Y; i++)
     {
-        // loop over the raster and determine max slope at each location
-        int tXStart = 1, tXEnd = m_GRID_SIZE_X - 1;
-        int tYStart = 1, tYEnd = m_GRID_SIZE_Y - 1;
-        float *poRasterData = new float[m_GRID_SIZE_X*m_GRID_SIZE_Y];
-        for (uint32_t i=0; i<m_GRID_SIZE_X*m_GRID_SIZE_Y; i++)
-        {
-            poRasterData[i] = c_background;
-        }
+        poRasterData[i] = c_background;
+    }
 
-        #pragma omp parallel for
-        for (int tXOut = tXStart; tXOut < tXEnd; tXOut++)
+#pragma omp parallel for
+    for (int tXOut = tXStart; tXOut < tXEnd; tXOut++)
+    {
+        int tXIn = tXOut;
+        for (int tYOut = tYStart; tYOut < tYEnd; tYOut++)
         {
-            int tXIn = tXOut;
-            for (int tYOut = tYStart; tYOut < tYEnd; tYOut++)
-            {
-                int tYIn = tYOut;
-
-                double curve(0);
+            int tYIn = tYOut;
 
-                //Compute Slope Value
-                switch (curveType)
-                {
-                    case CONTOUR:
-                        curve = determineContourCurvature(tDemData,
-                                                          tYOut, tXOut,
-                                                          tPostSpacing,
-                                                          c_background);
-                        break;
+            double curve(0);
 
-                    case PROFILE:
-                        curve = determineProfileCurvature(tDemData,
-                                                          tYOut, tXOut,
-                                                          tPostSpacing,
-                                                          c_background);
-                        break;
+            //Compute Slope Value
+            switch (curveType)
+            {
+                case CONTOUR_CURVATURE:
+                    curve = determineContourCurvature(tDemData,
+                            tYOut, tXOut,
+                            tPostSpacing,
+                            c_background);
+                    break;
 
-                    case TANGENTIAL:
-                        curve = determineTangentialCurvature(tDemData,
-                                                             tYOut, tXOut,
-                                                             tPostSpacing,
-                                                             c_background);
-                        break;
+                case PROFILE_CURVATURE:
+                    curve = determineProfileCurvature(tDemData,
+                            tYOut, tXOut,
+                            tPostSpacing,
+                            c_background);
+                    break;
 
-                    case TOTAL:
-                        curve = determineTotalCurvature(tDemData,
-                                                        tYOut, tXOut,
-                                                        tPostSpacing,
-                                                        c_background);
-                        break;
-                }
+                case TANGENTIAL_CURVATURE:
+                    curve = determineTangentialCurvature(tDemData,
+                            tYOut, tXOut,
+                            tPostSpacing,
+                            c_background);
+                    break;
 
-                poRasterData[(tYOut * m_GRID_SIZE_X) + tXOut] = static_cast<float>(curve);
+                case TOTAL_CURVATURE:
+                    curve = determineTotalCurvature(tDemData,
+                            tYOut, tXOut,
+                            tPostSpacing,
+                            c_background);
+                    break;
+                default:
+                    assert(false);
+                    return;
             }
+
+            poRasterData[(tYOut * m_GRID_SIZE_X) + tXOut] =
+                static_cast<float>(curve);
         }
+    }
 
-        //stretchData(poRasterData);
+    //stretchData(poRasterData);
 
-        // write the data
-        if (poRasterData)
-        {
-            GDALRasterBand *tBand = mpDstDS->GetRasterBand(1);
+    // write the data
+    GDALRasterBand *tBand = mpDstDS->GetRasterBand(1);
 
-            tBand->SetNoDataValue((double)c_background);
-
-            if (m_GRID_SIZE_X > 0 && m_GRID_SIZE_Y > 0)
-                tBand->RasterIO(GF_Write, 0, 0, m_GRID_SIZE_X, m_GRID_SIZE_Y,
-                                poRasterData, m_GRID_SIZE_X, m_GRID_SIZE_Y,
-                                GDT_Float32, 0, 0);
-        }
+    tBand->SetNoDataValue((double)c_background);
 
-        GDALClose((GDALDatasetH) mpDstDS);
+    if (m_GRID_SIZE_X > 0 && m_GRID_SIZE_Y > 0)
+    {
+        int ret;
+#if GDAL_VERSION_MAJOR <= 1
+        ret = tBand->RasterIO(GF_Write, 0, 0, m_GRID_SIZE_X, m_GRID_SIZE_Y,
+                poRasterData.data(), m_GRID_SIZE_X, m_GRID_SIZE_Y,
+                GDT_Float32, 0, 0);
+#else
+        ret = tBand->RasterIO(GF_Write, 0, 0, m_GRID_SIZE_X, m_GRID_SIZE_Y,
+            poRasterData.data(), m_GRID_SIZE_X, m_GRID_SIZE_Y,
+            GDT_Float32, 0, 0, 0);
+#endif
+        if (ret != CE_None)
+        {
+            std::ostringstream oss;
 
-        delete [] poRasterData;
+            oss << getName() << ": Error reading raster IO.";
+            throw pdal_error(oss.str());
+        }
     }
+    GDALClose((GDALDatasetH) mpDstDS);
 }
 
 
@@ -1470,12 +1555,16 @@ void DerivativeWriter::write(const PointViewPtr data)
 
     // calculate grid based off bounds and post spacing
     calculateGridSizes();
-    log()->get(LogLevel::Debug2) << "X grid size: " << m_GRID_SIZE_X << std::endl;
-    log()->get(LogLevel::Debug2) << "Y grid size: " << m_GRID_SIZE_Y << std::endl;
+    log()->get(LogLevel::Debug2) << "X grid size: " <<
+        m_GRID_SIZE_X << std::endl;
+    log()->get(LogLevel::Debug2) << "Y grid size: " <<
+        m_GRID_SIZE_Y << std::endl;
 
     log()->floatPrecision(6);
-    log()->get(LogLevel::Debug2) << "X grid distance: " << m_GRID_DIST_X << std::endl;
-    log()->get(LogLevel::Debug2) << "Y grid distance: " << m_GRID_DIST_Y << std::endl;
+    log()->get(LogLevel::Debug2) << "X grid distance: " <<
+        m_GRID_DIST_X << std::endl;
+    log()->get(LogLevel::Debug2) << "Y grid distance: " <<
+        m_GRID_DIST_Y << std::endl;
     log()->clearFloat();
 
     BOX2D& extent = getBounds();
@@ -1596,61 +1685,45 @@ void DerivativeWriter::write(const PointViewPtr data)
         }
     };
 
-    bool* prevSetCols = new bool[m_GRID_SIZE_X];
-    bool* curSetCols = new bool[m_GRID_SIZE_X];
-
-    for (uint32_t y = 1; y < m_GRID_SIZE_Y; ++y)
     {
-        CleanRasterScanLine(tDemData, tDemData.row(1), m_GRID_SIZE_X, y,
-                            prevSetCols, curSetCols);
-        memcpy(prevSetCols, curSetCols, m_GRID_SIZE_X);
-        memset(curSetCols, 0, m_GRID_SIZE_X);
-    }
+        std::unique_ptr<bool> prevSetCols(new bool[m_GRID_SIZE_X]);
+        std::unique_ptr<bool> curSetCols(new bool[m_GRID_SIZE_X]);
 
-    delete[] prevSetCols;
-    delete[] curSetCols;
+        for (uint32_t y = 1; y < m_GRID_SIZE_Y-1; ++y)
+        {
+            CleanRasterScanLine(tDemData, tDemData.row(1), m_GRID_SIZE_X, y,
+                prevSetCols.get(), curSetCols.get());
+            memcpy(prevSetCols.get(), curSetCols.get(), m_GRID_SIZE_X);
+            memset(curSetCols.get(), 0, m_GRID_SIZE_X);
+        }
+    }
 
-    switch (m_primitive_type)
+    for (TypeOutput& to : m_primitiveTypes)
     {
+        switch (to.m_type)
+        {
         case SLOPE_D8:
-            writeSlope(&tDemData, data, SD8);
-            break;
-
         case SLOPE_FD:
-            writeSlope(&tDemData, data, SFD);
+            writeSlope(&tDemData, data, to.m_type, to.m_filename);
             break;
-
         case ASPECT_D8:
-            writeAspect(&tDemData, data, AD8);
-            break;
-
         case ASPECT_FD:
-            writeAspect(&tDemData, data, AFD);
+            writeAspect(&tDemData, data, to.m_type, to.m_filename);
             break;
-
         case HILLSHADE:
-            writeHillshade(&tDemData, data);
+            writeHillshade(&tDemData, data, to.m_filename);
             break;
-
         case CONTOUR_CURVATURE:
-            writeCurvature(&tDemData, data, CONTOUR, c_background);
-            break;
-
         case PROFILE_CURVATURE:
-            writeCurvature(&tDemData, data, PROFILE, c_background);
-            break;
-
         case TANGENTIAL_CURVATURE:
-            writeCurvature(&tDemData, data, TANGENTIAL, c_background);
-            break;
-
         case TOTAL_CURVATURE:
-            writeCurvature(&tDemData, data, TOTAL, c_background);
+            writeCurvature(&tDemData, data, to.m_type, c_background,
+                to.m_filename);
             break;
-
         case CATCHMENT_AREA:
-            writeCatchmentArea(&tDemData, data);
+            writeCatchmentArea(&tDemData, data, to.m_filename);
             break;
+        }
     }
 }
 
diff --git a/io/derivative/DerivativeWriter.hpp b/io/derivative/DerivativeWriter.hpp
index e97acf3..5c16fd8 100644
--- a/io/derivative/DerivativeWriter.hpp
+++ b/io/derivative/DerivativeWriter.hpp
@@ -35,6 +35,7 @@
 #pragma once
 
 #include <pdal/Writer.hpp>
+#include <pdal/plugin.hpp>
 
 #include <Eigen/Core>
 
@@ -52,18 +53,6 @@ class BOX2D;
 
 class PDAL_DLL DerivativeWriter : public Writer
 {
-    enum SlopeMethod
-    {
-        SD8,
-        SFD
-    };
-
-    enum AspectMethod
-    {
-        AD8,
-        AFD
-    };
-
     enum PrimitiveType
     {
         SLOPE_D8,
@@ -78,14 +67,6 @@ class PDAL_DLL DerivativeWriter : public Writer
         CATCHMENT_AREA
     };
 
-    enum CurvatureType
-    {
-        CONTOUR,
-        PROFILE,
-        TANGENTIAL,
-        TOTAL
-    };
-
     enum Direction
     {
         NORTH,
@@ -98,6 +79,12 @@ class PDAL_DLL DerivativeWriter : public Writer
         SOUTHWEST
     };
 
+    struct TypeOutput
+    {
+        PrimitiveType m_type;
+        std::string m_filename;
+    };
+
 public:
     static void * create();
     static int32_t destroy(void *);
@@ -122,6 +109,7 @@ private:
         return m_bounds;
     }
 
+    std::string generateFilename(const std::string& primName) const;
     void calculateGridSizes();
     double determineSlopeFD(Eigen::MatrixXd* data, int row, int col,
                             double postSpacing, double valueToIgnore);
@@ -146,13 +134,16 @@ private:
                               double postSpacing);
     double GetNeighbor(Eigen::MatrixXd* data, int row, int col, Direction d);
     void writeSlope(Eigen::MatrixXd* dem, const PointViewPtr cloud,
-                    SlopeMethod method=SD8);
+        PrimitiveType method, const std::string& filename);
     void writeAspect(Eigen::MatrixXd* dem, const PointViewPtr cloud,
-                     AspectMethod method=AD8);
-    void writeCatchmentArea(Eigen::MatrixXd* dem, const PointViewPtr cloud);
-    void writeHillshade(Eigen::MatrixXd* dem, const PointViewPtr cloud);
+        PrimitiveType method, const std::string& filename);
+    void writeCatchmentArea(Eigen::MatrixXd* dem, const PointViewPtr cloud,
+        const std::string& filename);
+    void writeHillshade(Eigen::MatrixXd* dem, const PointViewPtr cloud,
+        const std::string& filename);
     void writeCurvature(Eigen::MatrixXd* dem, const PointViewPtr cloud,
-                        CurvatureType curveType, double valueToIgnore);
+        PrimitiveType curveType, double valueToIgnore,
+        const std::string& filename);
     GDALDataset* createFloat32GTIFF(std::string filename, int cols, int rows);
     void stretchData(float *data);
 
@@ -161,7 +152,7 @@ private:
     uint32_t m_GRID_SIZE_Y;
     double m_GRID_DIST_X;
     double m_GRID_DIST_Y;
-    unsigned int m_primitive_type;
+    std::vector<TypeOutput> m_primitiveTypes;
     BOX2D m_bounds;
     SpatialReference m_inSRS;
 
diff --git a/io/faux/FauxReader.cpp b/io/faux/FauxReader.cpp
index be4dc9c..f522d6c 100644
--- a/io/faux/FauxReader.cpp
+++ b/io/faux/FauxReader.cpp
@@ -36,8 +36,7 @@
 
 #include <pdal/Options.hpp>
 #include <pdal/PointView.hpp>
-
-#include <boost/algorithm/string.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <ctime>
 
@@ -86,7 +85,7 @@ void FauxReader::processOptions(const Options& options)
         bounds = options.getValueOrDefault<BOX3D>("bounds",
             BOX3D(0, 0, 0, 1, 1, 1));
     }
-    catch (boost::bad_lexical_cast)
+    catch (Option::cant_convert)
     {
         std::string s = options.getValueOrDefault<std::string>("bounds");
 
@@ -127,8 +126,21 @@ void FauxReader::processOptions(const Options& options)
             "[0,10].";
         throw pdal_error(oss.str());
     }
+    if (m_count > 1)
+    {
+        m_delX = (m_maxX - m_minX) / (m_count - 1);
+        m_delY = (m_maxY - m_minY) / (m_count - 1);
+        m_delZ = (m_maxZ - m_minZ) / (m_count - 1);
+    }
+    else
+    {
+        m_delX = 0;
+        m_delY = 0;
+        m_delZ = 0;
+    }
 }
 
+
 Options FauxReader::getDefaultOptions()
 {
     Options options;
@@ -160,71 +172,75 @@ Dimension::IdList FauxReader::getDefaultDimensions()
     return ids;
 }
 
+void FauxReader::ready(PointTableRef /*table*/)
+{
+    m_returnNum = 1;
+    m_time = 0;
+    m_seed = (uint32_t)std::time(NULL);
+    m_index = 0;
+}
 
-point_count_t FauxReader::read(PointViewPtr view, point_count_t count)
+
+bool FauxReader::processOne(PointRef& point)
 {
-    const double numDeltas = (double)count - 1.0;
-    double delX(0), delY(0), delZ(0);
-    if (numDeltas)
+    double x(0);
+    double y(0);
+    double z(0);
+
+    if (m_index >= m_count)
+        return false;
+
+    switch (m_mode)
     {
-        delX = (m_maxX - m_minX) / numDeltas;
-        delY = (m_maxY - m_minY) / numDeltas;
-        delZ = (m_maxZ - m_minZ) / numDeltas;
+    case Random:
+        x = Utils::random(m_minX, m_maxX);
+        y = Utils::random(m_minY, m_maxY);
+        z = Utils::random(m_minZ, m_maxZ);
+        break;
+    case Constant:
+        x = m_minX;
+        y = m_minY;
+        z = m_minZ;
+        break;
+    case Ramp:
+        x = m_minX + m_delX * m_index;
+        y = m_minY + m_delY * m_index;
+        z = m_minZ + m_delZ * m_index;
+        break;
+    case Uniform:
+        x = Utils::uniform(m_minX, m_maxX, m_seed++);
+        y = Utils::uniform(m_minY, m_maxY, m_seed++);
+        z = Utils::uniform(m_minZ, m_maxZ, m_seed++);
+        break;
+    case Normal:
+        x = Utils::normal(m_mean_x, m_stdev_x, m_seed++);
+        y = Utils::normal(m_mean_y, m_stdev_y, m_seed++);
+        z = Utils::normal(m_mean_z, m_stdev_z, m_seed++);
+        break;
     }
 
-    log()->get(LogLevel::Debug5) << "Reading a point view of " <<
-        count << " points." << std::endl;
+    point.setField(Dimension::Id::X, x);
+    point.setField(Dimension::Id::Y, y);
+    point.setField(Dimension::Id::Z, z);
+    point.setField(Dimension::Id::OffsetTime, m_time++);
+    if (m_numReturns > 0)
+    {
+        point.setField(Dimension::Id::ReturnNumber, m_returnNum);
+        point.setField(Dimension::Id::NumberOfReturns, m_numReturns);
+        m_returnNum = (m_returnNum % m_numReturns) + 1;
+    }
+    m_index++;
+    return true;
+}
 
-    uint32_t seed = static_cast<uint32_t>(std::time(NULL));
 
+point_count_t FauxReader::read(PointViewPtr view, point_count_t count)
+{
     for (PointId idx = 0; idx < count; ++idx)
     {
-        double x;
-        double y;
-        double z;
-        switch (m_mode)
-        {
-            case Random:
-                x = Utils::random(m_minX, m_maxX);
-                y = Utils::random(m_minY, m_maxY);
-                z = Utils::random(m_minZ, m_maxZ);
-                break;
-            case Constant:
-                x = m_minX;
-                y = m_minY;
-                z = m_minZ;
-                break;
-            case Ramp:
-                x = m_minX + delX * idx;
-                y = m_minY + delY * idx;
-                z = m_minZ + delZ * idx;
-                break;
-            case Uniform:
-                x = Utils::uniform(m_minX, m_maxX, seed++);
-                y = Utils::uniform(m_minY, m_maxY, seed++);
-                z = Utils::uniform(m_minZ, m_maxZ, seed++);
-                break;
-            case Normal:
-                x = Utils::normal(m_mean_x, m_stdev_x, seed++);
-                y = Utils::normal(m_mean_y, m_stdev_y, seed++);
-                z = Utils::normal(m_mean_z, m_stdev_z, seed++);
-                break;
-            default:
-                throw pdal_error("invalid mode in FauxReader");
-                break;
-        }
-
-        view->setField(Dimension::Id::X, idx, x);
-        view->setField(Dimension::Id::Y, idx, y);
-        view->setField(Dimension::Id::Z, idx, z);
-        view->setField(Dimension::Id::OffsetTime, idx, m_time++);
-        if (m_numReturns > 0)
-        {
-            view->setField(Dimension::Id::ReturnNumber, idx, m_returnNum);
-            view->setField(Dimension::Id::NumberOfReturns, idx, m_numReturns);
-            m_returnNum = (m_returnNum % m_numReturns) + 1;
-        }
-
+        PointRef point = view->point(idx);
+        if (!processOne(point))
+            break;
         if (m_cb)
             m_cb(*view, idx);
     }
diff --git a/io/faux/FauxReader.hpp b/io/faux/FauxReader.hpp
index f2d229e..a6b5960 100644
--- a/io/faux/FauxReader.hpp
+++ b/io/faux/FauxReader.hpp
@@ -34,6 +34,7 @@
 
 #pragma once
 
+#include <pdal/plugin.hpp>
 #include <pdal/Reader.hpp>
 
 extern "C" int32_t FauxReader_ExitFunc();
@@ -106,17 +107,19 @@ private:
     double m_stdev_x;
     double m_stdev_y;
     double m_stdev_z;
+    double m_delX;
+    double m_delY;
+    double m_delZ;
     uint64_t m_time;
     int m_numReturns;
     int m_returnNum;
+    point_count_t m_index;
+    uint32_t m_seed;
 
     virtual void processOptions(const Options& options);
     virtual void addDimensions(PointLayoutPtr layout);
-    virtual void ready(PointTableRef table)
-    {
-        m_returnNum = 1;
-        m_time = 0;
-    }
+    virtual void ready(PointTableRef table);
+    virtual bool processOne(PointRef& point);
     virtual point_count_t read(PointViewPtr view, point_count_t count);
     virtual bool eof()
         { return false; }
diff --git a/io/gdal/GDALReader.cpp b/io/gdal/GDALReader.cpp
index 2f3ff40..dca7372 100644
--- a/io/gdal/GDALReader.cpp
+++ b/io/gdal/GDALReader.cpp
@@ -35,11 +35,10 @@
 #include "GDALReader.hpp"
 
 #include <sstream>
-#include <algorithm>
-
 
+#include <pdal/GDALUtils.hpp>
 #include <pdal/PointView.hpp>
-#include <pdal/GlobalEnvironment.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -66,20 +65,15 @@ GDALReader::GDALReader()
 
 void GDALReader::initialize()
 {
-    GlobalEnvironment::get().initializeGDAL(log());
-    if (!m_raster)
-        m_raster = std::unique_ptr<gdal::Raster>(new gdal::Raster(m_filename));
+    gdal::registerDrivers();
+    m_raster.reset(new gdal::Raster(m_filename));
 
     m_raster->open();
     setSpatialReference(m_raster->getSpatialRef());
     m_count = m_raster->m_raster_x_size * m_raster->m_raster_y_size;
-
+    m_raster->close();
 }
 
-void GDALReader::processOptions(const Options& options)
-{
-
-}
 
 QuickInfo GDALReader::inspect()
 {
@@ -93,25 +87,22 @@ QuickInfo GDALReader::inspect()
     m_raster->open();
 
     qi.m_pointCount = m_raster->m_raster_x_size * m_raster->m_raster_y_size;
-//     qi.m_bounds = m_lasHeader.getBounds();
+    // qi.m_bounds = ???;
     qi.m_srs = m_raster->getSpatialRef();
     qi.m_valid = true;
 
-
     return qi;
 }
 
 
 void GDALReader::addDimensions(PointLayoutPtr layout)
 {
-    int nBands = m_raster->m_band_count;
-
     layout->registerDim(pdal::Dimension::Id::X);
     layout->registerDim(pdal::Dimension::Id::Y);
-    for (int i=0; i < nBands; ++i)
+    for (int i = 0; i < m_raster->m_band_count; ++i)
     {
         std::ostringstream oss;
-        oss << "band-" << i+1;
+        oss << "band-" << (i + 1);
         layout->registerOrAssignDim(oss.str(), Dimension::Type::Double);
     }
 }
@@ -120,20 +111,9 @@ void GDALReader::addDimensions(PointLayoutPtr layout)
 void GDALReader::ready(PointTableRef table)
 {
     m_index = 0;
-
-
+    m_raster->open();
 }
 
-template<typename T>
-double convert(uint8_t*p)
-{
-    double output;
-
-    T t;
-    std::copy(p, p + sizeof(t), (uint8_t*)&t);
-    output = static_cast<double>(t);
-    return output;
-}
 
 point_count_t GDALReader::read(PointViewPtr view, point_count_t num)
 {
@@ -143,9 +123,9 @@ point_count_t GDALReader::read(PointViewPtr view, point_count_t num)
     std::array<double, 2> coords;
     for (int row = 0; row < m_raster->m_raster_y_size; ++row)
     {
-        for(int col = 0; col < m_raster->m_raster_x_size; ++col)
+        for (int col = 0; col < m_raster->m_raster_x_size; ++col)
         {
-            m_raster->pixelToCoord(row, col, coords);
+            m_raster->pixelToCoord(col, row, coords);
             view->setField(Dimension::Id::X, nextId, coords[0]);
             view->setField(Dimension::Id::Y, nextId, coords[1]);
             nextId++;
@@ -153,47 +133,24 @@ point_count_t GDALReader::read(PointViewPtr view, point_count_t num)
     }
 
     std::vector<uint8_t> band;
-    std::vector<pdal::Dimension::Type::Enum> band_types = m_raster->getPDALDimensionTypes();
+    std::vector<Dimension::Type::Enum> band_types =
+        m_raster->getPDALDimensionTypes();
+
     for (int b = 0; b < m_raster->m_band_count; ++b)
     {
         // Bands count from 1
-        // read up the band's bytes into an array,
-        // convert them from GDAL native types into
-        // doubles, and stuff them into the view
-        m_raster->readBand(band, b+1);
+        m_raster->readBand(band, b + 1);
         std::stringstream oss;
-        oss << "band-" << b+1;
-        log()->get(LogLevel::Info) << "Read band '" << oss.str() <<"'" << std::endl;
-        pdal::Dimension::Id::Enum d = view->layout()->findProprietaryDim(oss.str());
-        size_t dimSize = pdal::Dimension::size(band_types[b]); // count from 0
+        oss << "band-" << (b + 1);
+        log()->get(LogLevel::Info) << "Read band '" << oss.str() << "'" <<
+            std::endl;
 
+        Dimension::Id::Enum d = view->layout()->findDim(oss.str());
+        size_t dimSize = Dimension::size(band_types[b]);
         uint8_t* p = band.data();
         for (point_count_t i = 0; i < count; ++i)
         {
-
-            if (band_types[b] == pdal::Dimension::Type::Float ||
-                band_types[b] == pdal::Dimension::Type::Double )
-            {
-                if (dimSize == 4)
-                    view->setField(d, i, convert<float>(p));
-                else
-                    view->setField(d, i, convert<double>(p));
-            }
-            else
-            {
-                if (dimSize == 1)
-                {
-                    view->setField(d, i, convert<uint8_t>(p));
-                }
-                else if (dimSize == 2)
-                {
-                    view->setField(d, i, convert<uint16_t>(p));
-                }
-                else if (dimSize == 4)
-                {
-                    view->setField(d, i, convert<uint32_t>(p));
-                }
-            }
+            view->setField(d, band_types[b], i, p);
             p = p + dimSize;
         }
     }
@@ -201,5 +158,5 @@ point_count_t GDALReader::read(PointViewPtr view, point_count_t num)
     return view->size();
 }
 
+} // namespace pdal
 
-}
diff --git a/io/gdal/GDALReader.hpp b/io/gdal/GDALReader.hpp
index 5221f85..339fec7 100644
--- a/io/gdal/GDALReader.hpp
+++ b/io/gdal/GDALReader.hpp
@@ -40,8 +40,8 @@
 #include <pdal/Dimension.hpp>
 #include <pdal/Reader.hpp>
 #include <pdal/StageFactory.hpp>
-
 #include <pdal/GDALUtils.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t GDALReader_ExitFunc();
 extern "C" PF_ExitFunc GDALReader_InitPlugin();
@@ -69,9 +69,10 @@ public:
 private:
     virtual void initialize();
     virtual void addDimensions(PointLayoutPtr layout);
-    virtual void processOptions(const Options&);
     virtual void ready(PointTableRef table);
     virtual point_count_t read(PointViewPtr view, point_count_t num);
+    virtual void done(PointTableRef table)
+        { m_raster->close(); }
     virtual QuickInfo inspect();
 
     std::unique_ptr<gdal::Raster> m_raster;
diff --git a/io/ilvis2/CMakeLists.txt b/io/ilvis2/CMakeLists.txt
index 0fe903c..f343808 100644
--- a/io/ilvis2/CMakeLists.txt
+++ b/io/ilvis2/CMakeLists.txt
@@ -15,6 +15,11 @@ set(incs
     Ilvis2Reader.hpp
 )
 
+if (PDAL_HAVE_LIBXML2)
+    list(APPEND srcs Ilvis2MetadataReader.cpp)
+    list(APPEND incs Ilvis2MetadataReader.hpp)
+endif()
+
 PDAL_ADD_DRIVER(reader ilvis2 "${srcs}" "${incs}" reader_objs)
 set(objs ${objs} ${reader_objs})
 
diff --git a/io/ilvis2/Ilvis2MetadataReader.cpp b/io/ilvis2/Ilvis2MetadataReader.cpp
new file mode 100644
index 0000000..e4fe7b7
--- /dev/null
+++ b/io/ilvis2/Ilvis2MetadataReader.cpp
@@ -0,0 +1,688 @@
+/******************************************************************************
+* Copyright (c) 2015, Howard Butler (howard at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include "Ilvis2MetadataReader.hpp"
+
+namespace pdal
+{
+
+void Ilvis2MetadataReader::readMetadataFile(std::string filename, MetadataNode* m)
+{
+    xmlDocPtr doc;
+    xmlNodePtr node;
+
+    doc = xmlReadFile(filename.c_str(), NULL, 0);
+    if (doc == NULL)
+    {
+        return;
+    }
+
+    node = xmlDocGetRootElement(doc);
+
+    parseGranuleMetaDataFile(node, m);
+
+    xmlCleanupParser();
+    xmlMemoryDump();
+}
+
+
+void Ilvis2MetadataReader::parseGranuleMetaDataFile(xmlNodePtr node, MetadataNode* m)
+{
+    assertElementIs(node, "GranuleMetaDataFile");
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    assertElementIs(child, "DTDVersion");
+    m->add<float>("DTDVersion", extractDouble(child));
+
+    child = getNextElementNode(child);
+    assertElementIs(child, "DataCenterId");
+    m->add("DataCenterID", extractString(child));
+
+    child = getNextElementNode(child);
+    assertElementIs(child, "GranuleURMetaData");
+    parseGranuleURMetaData(child, m);
+
+    child = getNextElementNode(child);
+    assertEndOfElements(child);
+}
+
+void Ilvis2MetadataReader::parseGranuleURMetaData(xmlNodePtr node, MetadataNode* m)
+{
+    assertElementIs(node, "GranuleURMetaData");
+
+    xmlNodePtr child, subchild;
+
+    child = getFirstChildElementNode(node);
+    assertElementIs(child, "GranuleUR");
+    m->add("GranuleUR", extractString(child));
+
+    child = getNextElementNode(child);
+    assertElementIs(child, "DbID");
+    m->add<long>("DbID", extractLong(child));
+
+    child = getNextElementNode(child);
+    assertElementIs(child, "InsertTime");
+    m->add("InsertTime", extractString(child));
+
+    child = getNextElementNode(child);
+    assertElementIs(child, "LastUpdate");
+    m->add("LastUpdate", extractString(child));
+
+    child = getNextElementNode(child);
+    if (nodeElementIs(child, "CollectionMetaData"))
+    {
+        parseCollectionMetaData(child, m);
+        child = getNextElementNode(child);
+    }
+
+    if (nodeElementIs(child, "DataFiles"))
+    {
+        parseDataFiles(child, m);
+        child = getNextElementNode(child);
+    }
+
+    if (nodeElementIs(child, "ECSDataGranule"))
+    {
+        parseECSDataGranule(child, m);
+        child = getNextElementNode(child);
+    }
+
+    if (nodeElementIs(child, "RangeDateTime"))
+    {
+        parseRangeDateTime(child, m);
+        child = getNextElementNode(child);
+    }
+
+    if (nodeElementIs(child, "SpatialDomainContainer"))
+    {
+        parseSpatialDomainContainer(child, m);
+        child = getNextElementNode(child);
+    }
+
+    while (nodeElementIs(child, "Platform"))
+    {
+        MetadataNode plat = m->addList("Platform");
+        parsePlatform(child, &plat);
+        child = getNextElementNode(child);
+    }
+
+    while (nodeElementIs(child, "Campaign"))
+    {
+        parseCampaign(child, m);
+        child = getNextElementNode(child);
+    }
+
+    if (nodeElementIs(child, "PSAs"))
+    {
+        parsePSAs(child, m);
+        child = getNextElementNode(child);
+    }
+
+    if (nodeElementIs(child, "BrowseProduct"))
+    {
+        parseXXProduct("Browse", child, m);
+        child = getNextElementNode(child);
+    }
+
+    if (nodeElementIs(child, "PHProduct"))
+    {
+        parseXXProduct("PH", child, m);
+        child = getNextElementNode(child);
+    }
+
+    if (nodeElementIs(child, "QAProduct"))
+    {
+        parseXXProduct("QA", child, m);
+        child = getNextElementNode(child);
+    }
+
+    if (nodeElementIs(child, "MPProduct"))
+    {
+        parseXXProduct("MP", child, m);
+        child = getNextElementNode(child);
+    }
+
+    assertEndOfElements(child);
+}
+
+
+void Ilvis2MetadataReader::parseCollectionMetaData(xmlNodePtr node, MetadataNode * m)
+{
+    assertElementIs(node, "CollectionMetaData");
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    assertElementIs(child, "ShortName");
+    m->add("CollectionShortName", extractString(child));
+
+    child = getNextElementNode(child);
+    assertElementIs(child, "VersionID");
+    m->add("CollectionVersionID", extractInt(child));
+
+    child = getNextElementNode(child);
+    assertEndOfElements(child);
+}
+
+
+void Ilvis2MetadataReader::parseDataFiles(xmlNodePtr node, MetadataNode * m)
+{
+    assertElementIs(node, "DataFiles");
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    assertElementIs(child, "DataFileContainer");
+
+    while(nodeElementIs(child, "DataFileContainer"))
+    {
+        MetadataNode n = m->addList("DataFile");
+        parseDataFileContainer(child, &n);
+        child = getNextElementNode(child);
+    }
+
+    assertEndOfElements(child);
+}
+
+
+void Ilvis2MetadataReader::parseDataFileContainer(xmlNodePtr node, MetadataNode * m)
+{
+    assertElementIs(node, "DataFileContainer");
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    assertElementIs(child, "DistributedFileName");
+    m->add("DistributedFileName", extractString(child));
+
+    child = getNextElementNode(child);
+    assertElementIs(child, "FileSize");
+    m->add("FileSize", extractInt(child));
+
+    child = getNextElementNode(child);
+    if (nodeElementIs(child, "ChecksumType"))
+    {
+        m->add("ChecksumType", extractString(child));
+        child = getNextElementNode(child);
+    }
+
+    if (nodeElementIs(child, "Checksum"))
+    {
+        m->add("Checksum", extractString(child));
+        child = getNextElementNode(child);
+    }
+
+    if (nodeElementIs(child, "ChecksumOrigin"))
+    {
+        m->add("ChecksumOrigin", extractString(child));
+        child = getNextElementNode(child);
+    }
+
+    assertEndOfElements(child);
+}
+
+
+void Ilvis2MetadataReader::parseECSDataGranule(xmlNodePtr node, MetadataNode * m)
+{
+    assertElementIs(node, "ECSDataGranule");
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    if (nodeElementIs(child, "SizeMBECSDataGranule"))
+    {
+        m->add("SizeMBECSDataGranule", extractDouble(child));
+        child = getNextElementNode(child);
+    }
+
+    assertElementIs(child, "LocalGranuleID");
+    m->add("LocalGranuleID", extractString(child));
+
+    child = getNextElementNode(child);
+    if (nodeElementIs(child, "ProductionDateTime"))
+    {
+        m->add("ProductionDateTime", extractString(child));
+        child = getNextElementNode(child);
+    }
+
+    assertElementIs(child, "LocalVersionID");
+    m->add("LocalVersionID", extractString(child));
+
+    child = getNextElementNode(child);
+    assertEndOfElements(child);
+}
+
+
+void Ilvis2MetadataReader::parseRangeDateTime(xmlNodePtr node, MetadataNode * m)
+{
+    assertElementIs(node, "RangeDateTime");
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    assertElementIs(child, "RangeEndingTime");
+    m->add("RangeEndingTime", extractString(child));
+
+    child = getNextElementNode(child);
+    assertElementIs(child, "RangeEndingDate");
+    m->add("RangeEndingDate", extractString(child));
+
+    child = getNextElementNode(child);
+    assertElementIs(child, "RangeBeginningTime");
+    m->add("RangeBeginningTime", extractString(child));
+
+    child = getNextElementNode(child);
+    assertElementIs(child, "RangeBeginningDate");
+    m->add("RangeBeginningDate", extractString(child));
+
+    child = getNextElementNode(child);
+    assertEndOfElements(child);
+}
+
+
+void Ilvis2MetadataReader::parseSpatialDomainContainer(xmlNodePtr node, MetadataNode * m)
+{
+    assertElementIs(node, "SpatialDomainContainer");
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    if (nodeElementIs(child, "HorizontalSpatialDomainContainer"))
+    {
+        xmlNodePtr subChild = getFirstChildElementNode(child);
+        assertElementIs(subChild, "GPolygon");
+        parseGPolygon(subChild, m);
+
+        child = getNextElementNode(child);
+    }
+
+    assertEndOfElements(child);
+}
+
+
+void Ilvis2MetadataReader::parseGPolygon(xmlNodePtr node, MetadataNode * m)
+{
+    assertElementIs(node, "GPolygon");
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    assertElementIs(child, "Boundary");
+
+    // The number of boundaries is essentially the number of sub-polygons
+    int numBoundaries = countChildElements(node, "Boundary");
+    std::vector<GEOSGeom> poly(numBoundaries); // size shall never change
+    GEOSGeom fullPoly;
+    int polyNum = 0;
+
+    initGEOS(NULL, NULL);
+
+    while (nodeElementIs(child, "Boundary"))
+    {
+        // There must be at least 3 points to be valid per the schema.
+        int numPoints = countChildElements(child, "Point");
+        if (numPoints < 3)
+        {
+            std::ostringstream oss;
+            oss << "Found a polygon boundary with less than 3 points, " <<
+                "invalid for this schema";
+            throw pdal_error(oss.str());
+        }
+
+        GEOSCoordSeq points = GEOSCoordSeq_create(numPoints + 1, 2);
+        xmlNodePtr bdChild = getFirstChildElementNode(child);
+        int ptNum = 0;
+
+        while (nodeElementIs(bdChild, "Point"))
+        {
+            xmlNodePtr ptChild = getFirstChildElementNode(bdChild);
+            assertElementIs(ptChild, "PointLongitude");
+            double ptLon = extractDouble(ptChild);
+
+            ptChild = getNextElementNode(ptChild);
+            assertElementIs(ptChild, "PointLatitude");
+            double ptLat = extractDouble(ptChild);
+
+            ptChild = getNextElementNode(ptChild);
+            assertEndOfElements(ptChild);
+
+            GEOSCoordSeq_setX(points, ptNum, ptLon);
+            GEOSCoordSeq_setY(points, ptNum, ptLat);
+
+            // In the file, the loop is not closed; GEOS requires polygons
+            // to be closed, so we'll do it ourselves.
+            if (ptNum == 0)
+            {
+                GEOSCoordSeq_setX(points, numPoints, ptLon);
+                GEOSCoordSeq_setY(points, numPoints, ptLat);
+            }
+
+            ptNum += 1;
+            bdChild = getNextElementNode(bdChild);
+        }
+
+        GEOSGeom ring = GEOSGeom_createLinearRing(points);
+        poly[polyNum] = GEOSGeom_createPolygon(ring, NULL, 0);
+
+        polyNum += 1;
+        child = getNextElementNode(child);
+    }
+
+    assertEndOfElements(child);
+
+    // If only one sub-polygon, just make a POLYGON WKT, else make it a MULTIPOLYGON
+    if (numBoundaries > 1)
+    {
+        fullPoly = GEOSGeom_createCollection(
+                GEOS_MULTIPOLYGON, poly.data(), numBoundaries);
+    }
+    else
+    {
+        fullPoly = poly[0];
+    }
+    GEOSWKTWriter * writer = GEOSWKTWriter_create();
+    GEOSWKTWriter_setRoundingPrecision(writer, 5);
+
+    std::string polyStr = GEOSWKTWriter_write(writer, fullPoly);
+
+    m->add("ConvexHull", polyStr);
+
+    finishGEOS();
+}
+
+
+void Ilvis2MetadataReader::parsePlatform(xmlNodePtr node, MetadataNode * m)
+{
+    assertElementIs(node, "Platform");
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    assertElementIs(child, "PlatformShortName");
+
+    m->add("PlatformShortName", extractString(child));
+
+    child = getNextElementNode(child);
+    while(nodeElementIs(child, "Instrument"))
+    {
+        MetadataNode inst = m->addList("Instrument");
+        parseInstrument(child, &inst);
+        child = getNextElementNode(child);
+    }
+
+    assertEndOfElements(child);
+}
+
+
+void Ilvis2MetadataReader::parseInstrument(xmlNodePtr node, MetadataNode * m)
+{
+    assertElementIs(node, "Instrument");
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    assertElementIs(child, "InstrumentShortName");
+    m->add("InstrumentShortName", extractString(child));
+
+    child = getNextElementNode(child);
+
+    while (nodeElementIs(child, "Sensor"))
+    {
+        MetadataNode sens = m->addList("Sensor");
+        parseSensor(child, &sens);
+        child = getNextElementNode(child);
+    }
+
+    while (nodeElementIs(child, "OperationMode"))
+    {
+        m->addList("OperationMode", extractString(child));
+        child = getNextElementNode(child);
+    }
+
+    assertEndOfElements(child);
+}
+
+
+void Ilvis2MetadataReader::parseSensor(xmlNodePtr node, MetadataNode * m)
+{
+    assertElementIs(node, "Sensor");
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    assertElementIs(child, "SensorShortName");
+    m->add("SensorShortName", extractString(child));
+
+    child = getNextElementNode(child);
+    while (nodeElementIs(child, "SensorCharacteristic"))
+    {
+        MetadataNode n = m->addList("SensorCharacteristic");
+        parseSensorCharacteristic(child, &n);
+        child = getNextElementNode(child);
+    }
+
+    assertEndOfElements(child);
+}
+
+
+void Ilvis2MetadataReader::parseSensorCharacteristic(xmlNodePtr node, MetadataNode * m)
+{
+    assertElementIs(node, "SensorCharacteristic");
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    assertElementIs(child, "SensorCharacteristicName");
+    m->add("CharacteristicName", extractString(child));
+
+    child = getNextElementNode(child);
+    assertElementIs(child, "SensorCharacteristicValue");
+    m->add("CharacteristicValue", extractString(child));
+
+    child = getNextElementNode(child);
+    assertEndOfElements(child);
+}
+
+
+void Ilvis2MetadataReader::parseCampaign(xmlNodePtr node, MetadataNode * m)
+{
+    assertElementIs(node, "Campaign");
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    assertElementIs(child, "CampaignShortName");
+    std::string cName = extractString(child);
+    m->addList("Campaign", cName);
+
+    child = getNextElementNode(child);
+    assertEndOfElements(child);
+}
+
+
+void Ilvis2MetadataReader::parsePSAs(xmlNodePtr node, MetadataNode * m)
+{
+    assertElementIs(node, "PSAs");
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    while (nodeElementIs(child, "PSA"))
+    {
+        MetadataNode n = m->addList("PSA");
+        parsePSA(child, &n);
+        child = getNextElementNode(child);
+    }
+
+    assertEndOfElements(child);
+}
+
+
+void Ilvis2MetadataReader::parsePSA(xmlNodePtr node, MetadataNode * m)
+{
+    assertElementIs(node, "PSA");
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    assertElementIs(child, "PSAName");
+    m->add("PSAName", extractString(child));
+
+    child = getNextElementNode(child);
+    while (nodeElementIs(child, "PSAValue"))
+    {
+        m->addList("PSAValue", extractString(child));
+        child = getNextElementNode(child);
+    }
+
+    assertEndOfElements(child);
+}
+
+
+// Since the Browse, PH, QA, and MP product nodes have the same structure
+// just differing prefixes, they can share this code.
+void Ilvis2MetadataReader::parseXXProduct(std::string type, xmlNodePtr node, MetadataNode * m)
+{
+    std::string fullBase = type + "Product";
+    std::string fullSub = type + "GranuleId";
+    std::string mdName = type + "ProductGranuleId";
+
+    assertElementIs(node, fullBase);
+
+    xmlNodePtr child = getFirstChildElementNode(node);
+    while (nodeElementIs(child, fullSub))
+    {
+        m->addList(mdName, extractString(child));
+        child = getNextElementNode(child);
+    }
+
+    assertEndOfElements(child);
+}
+
+
+// BEGIN PRIVATE METHODS
+
+
+std::string Ilvis2MetadataReader::extractString(xmlNodePtr node)
+{
+    std::string nodeStr((char*)node->children->content);
+    return nodeStr;
+}
+
+double Ilvis2MetadataReader::extractDouble(xmlNodePtr node)
+{
+    return atof((char*)node->children->content);
+}
+
+int Ilvis2MetadataReader::extractInt(xmlNodePtr node)
+{
+    return atoi((char*)node->children->content);
+}
+
+long Ilvis2MetadataReader::extractLong(xmlNodePtr node)
+{
+    return atol((char*)node->children->content);
+}
+
+
+// private
+
+// Skip all non-element nodes, just get the next element node.
+xmlNodePtr Ilvis2MetadataReader::getNextElementNode(xmlNodePtr node)
+{
+    node = node->next;
+    while (node && node->type != XML_ELEMENT_NODE)
+    {
+        node = node->next;
+    }
+
+    return node;
+}
+
+// Skip all non-element child nodes, get the first element child node
+xmlNodePtr Ilvis2MetadataReader::getFirstChildElementNode(xmlNodePtr node)
+{
+    xmlNodePtr child = node->children;
+    if (!child)
+    {
+        return NULL;
+    }
+    else if (child->type == XML_ELEMENT_NODE)
+    {
+        return child;
+    }
+    else
+    {
+        return getNextElementNode(child);
+    }
+}
+
+// Verifies the name of the node matches what's expected
+bool Ilvis2MetadataReader::nodeElementIs(xmlNodePtr node, std::string expected)
+{
+    if (!node)
+    {
+        return false;
+    }
+
+    return xmlStrcmp(node->name,
+            reinterpret_cast<const xmlChar*>(expected.c_str())) == 0;
+}
+
+// Throws an error if the next element is not what it expects
+void Ilvis2MetadataReader::assertElementIs(xmlNodePtr node, std::string expected)
+{
+    if (!node || !nodeElementIs(node, expected))
+    {
+        errWrongElement(node, expected);
+    }
+}
+
+// Throws an error if the node is not null
+void Ilvis2MetadataReader::assertEndOfElements(xmlNodePtr node)
+{
+    if (node)
+    {
+        errExpectedEnd(node);
+    }
+}
+
+// Counts the number of child element nodes with a given name
+int Ilvis2MetadataReader::countChildElements(xmlNodePtr node, std::string childName)
+{
+    xmlNodePtr child = getFirstChildElementNode(node);
+    int ctr = 0;
+
+    while (child)
+    {
+        if (nodeElementIs(child, childName))
+        {
+            ctr += 1;
+        }
+        child = getNextElementNode(child);
+    }
+
+    return ctr;
+}
+
+
+// Errors used when a file doesn't match the schema.
+void Ilvis2MetadataReader::errWrongElement(xmlNodePtr node, std::string expected)
+{
+    std::ostringstream oss;
+    oss << "Expected element '" << expected << "', found '" << node->name << "'";
+    throw pdal_error(oss.str());
+}
+
+void Ilvis2MetadataReader::errExpectedEnd(xmlNodePtr node)
+{
+    std::ostringstream oss;
+    oss << "Expected to find no more elements, found '" << node->name << "'";
+    throw pdal_error(oss.str());
+}
+
+} // namespace pdal
+
diff --git a/io/ilvis2/Ilvis2MetadataReader.hpp b/io/ilvis2/Ilvis2MetadataReader.hpp
new file mode 100644
index 0000000..928cbaf
--- /dev/null
+++ b/io/ilvis2/Ilvis2MetadataReader.hpp
@@ -0,0 +1,107 @@
+/******************************************************************************
+* Copyright (c) 2015, Howard Butler (howard at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#pragma once
+
+#include <pdal/Metadata.hpp>
+
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+#include <geos_c.h>
+#include <string>
+#include <iostream>
+#include <stdlib.h>
+
+namespace pdal
+{
+
+class PDAL_DLL Ilvis2MetadataReader
+{
+public:
+    void readMetadataFile(std::string filename, MetadataNode* m);
+
+protected:
+    // These methods are written to parse specific nodes.  It doesn't
+    // do full validation, but does check to make sure things are in
+    // the order it expects them to be in.
+
+    void parseGranuleMetaDataFile(xmlNodePtr node, MetadataNode* m);
+    void parseGranuleURMetaData(xmlNodePtr node, MetadataNode* m);
+    void parseCollectionMetaData(xmlNodePtr node, MetadataNode* m);
+    void parseDataFiles(xmlNodePtr node, MetadataNode* m);
+    void parseDataFileContainer(xmlNodePtr node, MetadataNode* m);
+    void parseECSDataGranule(xmlNodePtr node, MetadataNode* m);
+    void parseRangeDateTime(xmlNodePtr node, MetadataNode* m);
+
+    void parsePlatform(xmlNodePtr node, MetadataNode* m);
+    void parseInstrument(xmlNodePtr node, MetadataNode* m);
+    void parseSensor(xmlNodePtr node, MetadataNode* m);
+    void parseSensorCharacteristic(xmlNodePtr node, MetadataNode* m);
+    void parseCampaign(xmlNodePtr node, MetadataNode* m);
+    void parsePSAs(xmlNodePtr node, MetadataNode* m);
+    void parsePSA(xmlNodePtr node, MetadataNode* m);
+    void parseXXProduct(std::string type, xmlNodePtr node, MetadataNode* m);
+
+    void parseSpatialDomainContainer(xmlNodePtr node, MetadataNode* m);
+    void parseGPolygon(xmlNodePtr node, MetadataNode* m);
+    void parseBoundary(xmlNodePtr node, MetadataNode* m);
+    void parsePoint(xmlNodePtr node, MetadataNode* m);
+
+private:
+    // These private methods are mostly helper functions for proessing
+    // the heirarchy and contents of the various XML node objects that
+    // are returned by libxml.
+
+    std::string extractString(xmlNodePtr node);
+    double extractDouble(xmlNodePtr node);
+    int extractInt(xmlNodePtr node);
+    long extractLong(xmlNodePtr node);
+
+    // These two methods are useful to help ignore "empty" text nodes
+    // caused by indentation, etc.  These will simply grab the actual
+    // element nodes directly.
+    // Note that due to the way LIBXML parses things, a child points
+    // to its own siblings; the parent only points to the first child.
+    xmlNodePtr getNextElementNode(xmlNodePtr node);
+    xmlNodePtr getFirstChildElementNode(xmlNodePtr node);
+
+    bool nodeElementIs(xmlNodePtr node, std::string expected);
+    void assertElementIs(xmlNodePtr node, std::string expected);
+    void assertEndOfElements(xmlNodePtr node);
+    int countChildElements(xmlNodePtr node, std::string childName);
+    void errWrongElement(xmlNodePtr node, std::string expected);
+    void errExpectedEnd(xmlNodePtr node);
+};
+
+}
\ No newline at end of file
diff --git a/io/ilvis2/Ilvis2Reader.cpp b/io/ilvis2/Ilvis2Reader.cpp
index c4f1b3f..fb3a0b9 100644
--- a/io/ilvis2/Ilvis2Reader.cpp
+++ b/io/ilvis2/Ilvis2Reader.cpp
@@ -33,7 +33,11 @@
 ****************************************************************************/
 
 #include "Ilvis2Reader.hpp"
+#include <pdal/util/FileUtils.hpp>
+#include <pdal/pdal_macros.hpp>
+
 #include <algorithm>
+#include <cmath>
 
 namespace pdal
 {
@@ -50,37 +54,60 @@ std::string Ilvis2Reader::getName() const { return s_info.name; }
 Options Ilvis2Reader::getDefaultOptions()
 {
     Options options;
-    Option mapping("mapping", "LOW");
-    options.add(mapping);
+    options.add("mapping", "all", "The point to extract from the shot: "
+        "low, high, or all.  'all' creates 1 or 2 points per shot, "
+        "depending on if LOW and HIGH are the same.");
+    options.add("filename", "", "The file to read from");
+    options.add("metadata", "", "The metadata file to read from");
+
     return options;
 }
 
 void Ilvis2Reader::processOptions(const Options& options)
 {
-    m_convert = options.getValueOrDefault<std::string>("mapping", "CENTROID");
+    std::string mapping =
+        options.getValueOrDefault<std::string>("mapping", "all");
+    mapping = Utils::toupper(mapping);
+    m_mapping = parser.parseMapping(mapping);
+    if (m_mapping == INVALID)
+    {
+        std::ostringstream oss;
+        oss << "Invalid value for option for mapping: '" <<
+            mapping << "'.  Value values are 'low', 'high' and 'all'.";
+        throw pdal_error(oss.str());
+    }
+
+    m_metadataFile =
+        options.getValueOrDefault<std::string>("metadata", "");
+    if (!m_metadataFile.empty() && ! FileUtils::fileExists(m_metadataFile))
+    {
+        std::ostringstream oss;
+        oss << "Invalid metadata file: '" << m_metadataFile << "'";
+        throw pdal_error(oss.str());
+    }
 }
 
 void Ilvis2Reader::addDimensions(PointLayoutPtr layout)
 {
-    using namespace pdal::Dimension::Type;
-    layout->registerOrAssignDim("LVIS_LFID", Unsigned64);
-    layout->registerOrAssignDim("SHOTNUMBER", Unsigned64);
-    layout->registerDim(pdal::Dimension::Id::GpsTime);
-    layout->registerOrAssignDim("LONGITUDE_CENTROID", Double);
-    layout->registerOrAssignDim("LATITUDE_CENTROID", Double);
-    layout->registerOrAssignDim("ELEVATION_CENTROID", Double);
-    layout->registerOrAssignDim("LONGITUDE_LOW", Double);
-    layout->registerOrAssignDim("LATITUDE_LOW", Double);
-    layout->registerOrAssignDim("ELEVATION_LOW", Double);
-    layout->registerOrAssignDim("LONGITUDE_HIGH", Double);
-    layout->registerOrAssignDim("LATITUDE_HIGH", Double);
-    layout->registerOrAssignDim("ELEVATION_HIGH", Double);
-    layout->registerDim(pdal::Dimension::Id::X);
-    layout->registerDim(pdal::Dimension::Id::Y);
-    layout->registerDim(pdal::Dimension::Id::Z);
+    layout->registerDim(Dimension::Id::LvisLfid);
+    layout->registerDim(Dimension::Id::ShotNumber);
+    layout->registerDim(Dimension::Id::GpsTime);
+    layout->registerDim(Dimension::Id::LongitudeCentroid);
+    layout->registerDim(Dimension::Id::LatitudeCentroid);
+    layout->registerDim(Dimension::Id::ElevationCentroid);
+    layout->registerDim(Dimension::Id::LongitudeLow);
+    layout->registerDim(Dimension::Id::LatitudeLow);
+    layout->registerDim(Dimension::Id::ElevationLow);
+    layout->registerDim(Dimension::Id::LongitudeHigh);
+    layout->registerDim(Dimension::Id::LatitudeHigh);
+    layout->registerDim(Dimension::Id::ElevationHigh);
+    layout->registerDim(Dimension::Id::X);
+    layout->registerDim(Dimension::Id::Y);
+    layout->registerDim(Dimension::Id::Z);
 }
 
-pdal::Dimension::IdList Ilvis2Reader::getDefaultDimensions()
+
+Dimension::IdList Ilvis2Reader::getDefaultDimensions()
 {
     using namespace pdal::Dimension;
     Dimension::IdList ids;
@@ -92,134 +119,181 @@ pdal::Dimension::IdList Ilvis2Reader::getDefaultDimensions()
     return ids;
 }
 
-void Ilvis2Reader::ready(PointTableRef)
-{
-    m_stream.reset(new ILeStream(m_filename));
 
-    SpatialReference ref("EPSG:4385");
-    setSpatialReference(ref);
+void Ilvis2Reader::initialize(PointTableRef)
+{
+    // Data are WGS84 (4326) with ITRF2000 datum (6656)
+    // See http://nsidc.org/data/docs/daac/icebridge/ilvis2/index.html for
+    // background
+    SpatialReference ref("EPSG:4326");
+    setSpatialReference(m_metadata, ref);
 }
 
+
 template <typename T>
 T convert(const StringList& s, const std::string& name, size_t fieldno)
 {
     T output;
-    bool bConverted = Utils::fromString(s[fieldno], output);
-    if (!bConverted)
+    if (!Utils::fromString(s[fieldno], output))
     {
         std::stringstream oss;
-        oss << "Unable to convert " << name << ", " << s[fieldno] << ", to double";
+        oss << "Unable to convert " << name << ", " << s[fieldno] <<
+            ", to double";
         throw pdal_error(oss.str());
     }
 
     return output;
 }
 
+
+// If longitude between 0-180, just return it, degrees east; if between 180
+// and 360, subtract 360 to get negative value.
+double Ilvis2Reader::convertLongitude(double longitude)
+{
+    longitude = fmod(longitude, 360.0);
+    if (longitude <= -180)
+        longitude += 360;
+    else if (longitude > 180)
+        longitude -= 360;
+    return longitude;
+}
+
+
+void Ilvis2Reader::readPoint(PointRef& point, StringList s,
+    std::string pointMap)
+{
+    point.setField(pdal::Dimension::Id::LvisLfid,
+        convert<unsigned>(s, "LVIS_LFID", 0));
+    point.setField(pdal::Dimension::Id::ShotNumber,
+        convert<unsigned>(s, "SHOTNUMBER", 1));
+    point.setField(pdal::Dimension::Id::GpsTime,
+        convert<double>(s, "GPSTIME", 2));
+    point.setField(pdal::Dimension::Id::LongitudeCentroid,
+        convertLongitude(convert<double>(s, "LONGITUDE_CENTROID", 3)));
+    point.setField(pdal::Dimension::Id::LatitudeCentroid,
+        convert<double>(s, "LATITUDE_CENTROID", 4));
+    point.setField(pdal::Dimension::Id::ElevationCentroid,
+        convert<double>(s, "ELEVATION_CENTROID", 5));
+    point.setField(pdal::Dimension::Id::LongitudeLow,
+        convertLongitude(convert<double>(s, "LONGITUDE_LOW", 6)));
+    point.setField(pdal::Dimension::Id::LatitudeLow,
+        convert<double>(s, "LATITUDE_LOW", 7));
+    point.setField(pdal::Dimension::Id::ElevationLow,
+        convert<double>(s, "ELEVATION_LOW", 8));
+    point.setField(pdal::Dimension::Id::LongitudeHigh,
+        convertLongitude(convert<double>(s, "LONGITUDE_HIGH", 9)));
+    point.setField(pdal::Dimension::Id::LatitudeHigh,
+        convert<double>(s, "LATITUDE_HIGH", 10));
+    point.setField(pdal::Dimension::Id::ElevationHigh,
+        convert<double>(s, "ELEVATION_HIGH", 11));
+
+    double x, y, z;
+    pdal::Dimension::Id::Enum xd, yd, zd;
+
+    xd = m_layout->findDim("LONGITUDE_" + pointMap);
+    yd = m_layout->findDim("LATITUDE_" + pointMap);
+    zd = m_layout->findDim("ELEVATION_" + pointMap);
+
+    x = point.getFieldAs<double>(xd);
+    y = point.getFieldAs<double>(yd);
+    z = point.getFieldAs<double>(zd);
+
+    point.setField(pdal::Dimension::Id::X, x);
+    point.setField(pdal::Dimension::Id::Y, y);
+    point.setField(pdal::Dimension::Id::Z, z);
+}
+
+
+void Ilvis2Reader::ready(PointTableRef table)
+{
+    static const int HeaderSize = 2;
+    std::string line;
+
+    m_lineNum = 0;
+    m_stream.open(m_filename);
+    m_layout = table.layout();
+    m_resample = false;
+    for (size_t i = 0; i < HeaderSize; ++i)
+    {
+        std::getline(m_stream, line);
+        m_lineNum++;
+    }
+}
+
+
+bool Ilvis2Reader::processOne(PointRef& point)
+{
+    std::string line;
+
+// Format:
+// LVIS_LFID SHOTNUMBER TIME LONGITUDE_CENTROID LATITUDE_CENTROID ELEVATION_CENTROID LONGITUDE_LOW LATITUDE_LOW ELEVATION_LOW LONGITUDE_HIGH LATITUDE_HIGH ELEVATION_HIGH
+
+    // This handles the second time through for this data line when we have
+    // an "ALL" mapping and the high and low elevations are different.
+    if (m_resample)
+    {
+        readPoint(point, m_fields, "HIGH");
+        m_resample = false;
+        return true;
+    }
+
+    if (!std::getline(m_stream, line))
+        return false;
+    m_fields = Utils::split2(line, ' ');
+    if (m_fields.size() != 12)
+    {
+        std::stringstream oss;
+        oss << getName() << ": Invalid format for line " << m_lineNum <<
+            ".  Expected 12 fields, got " << m_fields.size() << ".";
+        throw pdal_error(oss.str());
+    }
+
+    double low_elev = convert<double>(m_fields, "ELEVATION_LOW", 8);
+    double high_elev = convert<double>(m_fields, "ELEVATION_HIGH", 11);
+
+    // write LOW point if specified, or for ALL
+    if (m_mapping == LOW || m_mapping == ALL)
+    {
+        readPoint(point, m_fields, "LOW");
+        // If we have ALL mapping and the high elevation is different
+        // from that of the low elevation, we'll a second point with the
+        // high elevation.
+        if (m_mapping == ALL && (low_elev != high_elev))
+            m_resample = true;
+    }
+    else if (m_mapping == HIGH)
+        readPoint(point, m_fields, "HIGH");
+    return true;
+}
+
+
 point_count_t Ilvis2Reader::read(PointViewPtr view, point_count_t count)
 {
-    PointLayoutPtr layout = view->layout();
-    PointId nextId = view->size();
-    PointId idx = m_index;
+    PointId idx = view->size();
     point_count_t numRead = 0;
 
-    // do any skipping to get to our m_index position;
-    m_stream.reset(new ILeStream(m_filename));
-
-    size_t HEADERSIZE(2);
-    size_t skip_lines(std::max(HEADERSIZE, (size_t)m_index));
-    size_t line_no(1);
-    for (std::string line; std::getline(*m_stream->stream(), line); line_no++)
+    PointRef point = PointRef(*view, 0);
+    while (numRead < count)
     {
-        if (line_no <= skip_lines)
-        {
-            continue;
-        }
-
-        StringList s = Utils::split2(line, ' ');
-//        # LVIS_LFID SHOTNUMBER TIME LONGITUDE_CENTROID LATITUDE_CENTROID ELEVATION_CENTROID LONGITUDE_LOW LATITUDE_LOW ELEVATION_LOW LONGITUDE_HIGH LATITUDE_HIGH ELEVATION_HIGH
-        unsigned long u64(0);
-        if (s.size() != 12)
-        {
-            std::stringstream oss;
-            oss << "Unable to split proper number of fields. Expected 12, got " << s.size();
-            throw pdal_error(oss.str());
-        }
-
-        std::string name("LVIS_LFID");
-        view->setField(layout->findProprietaryDim(name), nextId, convert<unsigned int>(s, name, 0));
-
-        name = "SHOTNUMBER";
-        view->setField(layout->findProprietaryDim(name), nextId, convert<unsigned int>(s, name, 1));
-
-        view->setField(pdal::Dimension::Id::GpsTime, nextId, convert<double>(s, name, 2));
-
-        name = "LONGITUDE_CENTROID";
-        view->setField(layout->findProprietaryDim(name), nextId, convert<double>(s, name, 3) - 180.0);
-
-        name = "LATITUDE_CENTROID";
-        view->setField(layout->findProprietaryDim(name), nextId, convert<double>(s, name, 4));
-
-        name = "ELEVATION_CENTROID";
-        view->setField(layout->findProprietaryDim(name), nextId, convert<double>(s, name, 5));
-
-        name = "LONGITUDE_LOW";
-        view->setField(layout->findProprietaryDim(name), nextId, convert<double>(s, name, 6) - 180.0);
-
-        name = "LATITUDE_LOW";
-        view->setField(layout->findProprietaryDim(name), nextId, convert<double>(s, name, 7));
-
-        name = "ELEVATION_LOW";
-        view->setField(layout->findProprietaryDim(name), nextId, convert<double>(s, name, 8));
-
-        name = "LONGITUDE_HIGH";
-        view->setField(layout->findProprietaryDim(name), nextId, convert<double>(s, name, 9) - 180.0);
-
-        name = "LATITUDE_HIGH";
-        view->setField(layout->findProprietaryDim(name), nextId, convert<double>(s, name, 10));
-
-        name = "ELEVATION_HIGH";
-        view->setField(layout->findProprietaryDim(name), nextId, convert<double>(s, name, 11));
-
-        double x, y, z;
-        pdal::Dimension::Id::Enum xd, yd, zd;
-        if (Utils::iequals(m_convert, "HIGH"))
-        {
-            xd = layout->findProprietaryDim("LONGITUDE_HIGH");
-            yd = layout->findProprietaryDim("LATITUDE_HIGH");
-            zd = layout->findProprietaryDim("ELEVATION_HIGH");
-
-        } else if (Utils::iequals(m_convert, "LOW"))
-        {
-            xd = layout->findProprietaryDim("LONGITUDE_LOW");
-            yd = layout->findProprietaryDim("LATITUDE_LOW");
-            zd = layout->findProprietaryDim("ELEVATION_LOW");
-
-        } else
-        {
-            xd = layout->findProprietaryDim("LONGITUDE_CENTROID");
-            yd = layout->findProprietaryDim("LATITUDE_CENTROID");
-            zd = layout->findProprietaryDim("ELEVATION_CENTROID");
-
-        }
-
-        x = view->getFieldAs<double>(xd, nextId);
-        y = view->getFieldAs<double>(yd, nextId);
-        z = view->getFieldAs<double>(zd, nextId);
-
-        view->setField(pdal::Dimension::Id::X, nextId, x);
-        view->setField(pdal::Dimension::Id::Y, nextId, y);
-        view->setField(pdal::Dimension::Id::Z, nextId, z);
-        nextId++;
+        point.setPointId(idx++);
+        if (!processOne(point))
+            break;
         if (m_cb)
-            m_cb(*view, nextId);
+            m_cb(*view, idx);
+        numRead++;
     }
-    m_index = nextId;
-    numRead = nextId;
+
     return numRead;
 }
 
+void Ilvis2Reader::done(PointTableRef table)
+{
+    if (!m_metadataFile.empty())
+    {
+        m_mdReader.readMetadataFile(m_metadataFile, &m_metadata);
+    }
 
-
-
+}
 
 } // namespace pdal
+
diff --git a/io/ilvis2/Ilvis2Reader.hpp b/io/ilvis2/Ilvis2Reader.hpp
index fb1c274..076508f 100644
--- a/io/ilvis2/Ilvis2Reader.hpp
+++ b/io/ilvis2/Ilvis2Reader.hpp
@@ -32,12 +32,24 @@
 * OF SUCH DAMAGE.
 ****************************************************************************/
 
-#pragma once
-
 #include <pdal/PointView.hpp>
 #include <pdal/Reader.hpp>
 #include <pdal/util/IStream.hpp>
+#include <pdal/plugin.hpp>
+#include <map>
 
+#ifndef PDAL_HAVE_LIBXML2
+namespace pdal
+{
+  class Ilvis2MetadataReader
+  {
+  public:
+      inline void readMetadataFile(std::string filename, pdal::MetadataNode* m) {};
+  };
+}
+#else
+    #include "Ilvis2MetadataReader.hpp"
+#endif
 
 extern "C" int32_t Ilvis2Reader_ExitFunc();
 extern "C" PF_ExitFunc Ilvis2Reader_InitPlugin();
@@ -47,7 +59,31 @@ namespace pdal
 class PDAL_DLL Ilvis2Reader : public pdal::Reader
 {
 public:
-    Ilvis2Reader() : Reader(), m_index(0), m_convert("CENTROID")
+    enum IlvisMappingType
+    {
+      INVALID,
+      LOW,
+      HIGH,
+      ALL
+    };
+
+    class MappingParser
+    {
+      std::map<std::string, IlvisMappingType> mappingMap;
+
+      public:
+        MappingParser()
+        {
+            mappingMap["LOW"] = LOW;
+            mappingMap["HIGH"] = HIGH;
+            mappingMap["ALL"] = ALL;
+        }
+
+        IlvisMappingType parseMapping(const std::string &value)
+        { return mappingMap[value]; }
+    };
+
+    Ilvis2Reader() : Reader(), m_mapping(ALL)
         {}
 
     static void * create();
@@ -59,15 +95,28 @@ public:
 
 
 private:
-    std::unique_ptr<ILeStream> m_stream;
-    point_count_t m_index;
-    std::string m_convert;
+    std::ifstream m_stream;
+    MappingParser parser;
+    IlvisMappingType m_mapping;
+    StringList m_fields;
+    size_t m_lineNum;
+    bool m_resample;
+    PointLayoutPtr m_layout;
+    std::string m_metadataFile;
+    Ilvis2MetadataReader m_mdReader;
 
     virtual void addDimensions(PointLayoutPtr layout);
     virtual void processOptions(const Options& options);
+    virtual void initialize(PointTableRef table);
     virtual void ready(PointTableRef table);
+    virtual void done(PointTableRef table);
+    virtual bool processOne(PointRef& point);
     virtual point_count_t read(PointViewPtr view, point_count_t count);
 
+    virtual void readPoint(PointRef& point, StringList s, std::string pointMap);
+
+    double convertLongitude(double longitude);
+
 };
 
 
diff --git a/io/las/GeotiffSupport.cpp b/io/las/GeotiffSupport.cpp
index c06e896..e4d0edf 100644
--- a/io/las/GeotiffSupport.cpp
+++ b/io/las/GeotiffSupport.cpp
@@ -34,21 +34,31 @@
 
 #include "GeotiffSupport.hpp"
 
+#include <sstream>
+
 // GDAL
 #include <geo_normalize.h>
 #include <ogr_spatialref.h>
 
-#include <sstream>
+// See http://lists.osgeo.org/pipermail/gdal-dev/2013-November/037429.html
+#define CPL_SERV_H_INCLUDED
+
+#include <geo_simpletags.h>
+#include <cpl_conv.h>
 
 PDAL_C_START
-#ifdef __geotiff_h_
 
-char PDAL_DLL * GTIFGetOGISDefn(GTIF*, GTIFDefn*);
-int PDAL_DLL GTIFSetFromOGISDefn(GTIF*, const char*);
+// These functions are available from GDAL, but they
+// aren't exported.
+char CPL_DLL * GTIFGetOGISDefn(GTIF*, GTIFDefn*);
+int CPL_DLL GTIFSetFromOGISDefn(GTIF*, const char*);
 
-#endif // defined __geotiff_h_
 PDAL_C_END
 
+#include <pdal/GDALUtils.hpp>
+
+struct StTiff : public ST_TIFF
+{};
 
 namespace pdal
 {
@@ -87,28 +97,46 @@ void GeotiffSupport::resetTags()
         m_gtiff = 0;
     }
 
-    m_tiff = ST_Create();
+    m_tiff = (StTiff *)ST_Create();
 
     return;
 }
 
 
-int GeotiffSupport::setKey(int tag, void *data, int size, int type)
+bool GeotiffSupport::setShortKeys(int tag, void *data, int size)
 {
-    int count;
-    switch (type)
+    // Make sure struct is 16 bytes.
+#pragma pack(push)
+#pragma pack(1)
+    struct ShortKeyHeader
     {
-    case STT_SHORT:
-        count = size / sizeof(short);
-        break;
-    case STT_DOUBLE:
-        count = size / sizeof(double);
-        break;
-    default:
-        count = size; 
-        break;
-    }
-    return ST_SetKey(m_tiff, tag, count, type, data);
+        uint16_t dirVersion;
+        uint16_t keyRev;
+        uint16_t minorRev;
+        uint16_t numKeys;
+    };
+#pragma pack(pop)
+
+    ShortKeyHeader *header = (ShortKeyHeader *)data;
+    int declaredSize = (header->numKeys + 1) * 4;
+    if (size < declaredSize)
+        return false;
+    ST_SetKey(m_tiff, tag, (1 + header->numKeys) * 4, STT_SHORT, data);
+    return true;
+}
+
+
+bool GeotiffSupport::setDoubleKeys(int tag, void *data, int size)
+{
+    ST_SetKey(m_tiff, tag, size / sizeof(double), STT_DOUBLE, data);
+    return true;
+}
+
+
+bool GeotiffSupport::setAsciiKeys(int tag, void *data, int size)
+{
+    ST_SetKey(m_tiff, tag, size, STT_ASCII, data);
+    return true;
 }
 
 
@@ -123,6 +151,7 @@ size_t GeotiffSupport::getKey(int tag, int *count, void **data_ptr) const
 
     if (m_tiff == 0)
         return 0;
+
     if (!ST_GetKey(m_tiff, tag, count, &st_type, data_ptr))
         return 0;
 
@@ -140,8 +169,8 @@ void GeotiffSupport::setTags()
 {
     m_gtiff = GTIFNewSimpleTags(m_tiff);
     if (!m_gtiff)
-        throw std::runtime_error("The geotiff keys could not be read from VLR records");
-    return;
+        throw std::runtime_error("The geotiff keys could not be read "
+            "from VLR records");
 }
 
 
@@ -150,21 +179,20 @@ std::string GeotiffSupport::getWkt(bool horizOnly, bool pretty) const
     GTIFDefn sGTIFDefn;
     char* pszWKT = 0;
 
+    gdal::ErrorHandler::ExceptionSuspender suspender;
+
     if (!m_gtiff)
-    {
         return std::string();
-    }
 
     if (!GTIFGetDefn(m_gtiff, &sGTIFDefn))
-    {
         return std::string();
-    }
 
     pszWKT = GTIFGetOGISDefn(m_gtiff, &sGTIFDefn);
 
     if (pretty)
     {
-        OGRSpatialReference* poSRS = (OGRSpatialReference*) OSRNewSpatialReference(NULL);
+        OGRSpatialReference* poSRS =
+            (OGRSpatialReference*) OSRNewSpatialReference(NULL);
         char *pszOrigWKT = pszWKT;
         poSRS->importFromWkt(&pszOrigWKT);
 
@@ -179,7 +207,8 @@ std::string GeotiffSupport::getWkt(bool horizOnly, bool pretty) const
             && horizOnly
             && strstr(pszWKT,"COMPD_CS") != NULL)
     {
-        OGRSpatialReference* poSRS = (OGRSpatialReference*) OSRNewSpatialReference(NULL);
+        OGRSpatialReference* poSRS =
+            (OGRSpatialReference*) OSRNewSpatialReference(NULL);
         char *pszOrigWKT = pszWKT;
         poSRS->importFromWkt(&pszOrigWKT);
 
@@ -223,29 +252,27 @@ void GeotiffSupport::rebuildGTIF()
         m_gtiff = 0;
     }
 
-    m_tiff = ST_Create();
+    m_tiff = (StTiff *)ST_Create();
 
     // (here it used to read in the VLRs)
 
     m_gtiff = GTIFNewSimpleTags(m_tiff);
     if (!m_gtiff)
-        throw std::runtime_error("The geotiff keys could not be read from VLR records");
-
-    return;
+        throw std::runtime_error("The geotiff keys could not be read from "
+            "VLR records");
 }
 
 
 void GeotiffSupport::setWkt(const std::string& v)
 {
     if (!m_gtiff)
-    {
         rebuildGTIF();
-    }
 
     if (v == "")
-    {
         return;
-    }
+
+    if (!GTIFSetFromOGISDefn(m_gtiff, v.c_str()))
+        throw std::invalid_argument("could not set m_gtiff from WKT");
 
     int ret = 0;
     ret = GTIFSetFromOGISDefn(m_gtiff, v.c_str());
diff --git a/io/las/GeotiffSupport.hpp b/io/las/GeotiffSupport.hpp
index a63c147..e27092d 100644
--- a/io/las/GeotiffSupport.hpp
+++ b/io/las/GeotiffSupport.hpp
@@ -36,26 +36,19 @@
 
 #include <pdal/pdal_internal.hpp>
 
+// GDAL
+#include <geo_normalize.h>
+#include <ogr_spatialref.h>
+
 // See http://lists.osgeo.org/pipermail/gdal-dev/2013-November/037429.html
 #define CPL_SERV_H_INCLUDED
 
-
-#ifdef PDAL_HAVE_LIBGEOTIFF
-#include <geo_simpletags.h>
-#include <cpl_conv.h>
-#endif
-
-// Fake out the compiler if we don't have libgeotiff includes already
-#if !defined(__geotiff_h_)
-typedef struct GTIFS *GTIF;
-#endif
-#if !defined(__geo_simpletags_h_)
-typedef struct ST_TIFFS *ST_TIFF;
-#endif
-
 #include <string>
 #include <stdexcept>
 
+struct GTIFS;
+struct StTiff;
+
 namespace pdal
 {
 
@@ -65,9 +58,11 @@ public:
     GeotiffSupport() : m_gtiff(0), m_tiff(0)
     {}
     ~GeotiffSupport();
-    
+
     void resetTags();
-    int setKey(int tag, void *data, int size, int type);
+    bool setShortKeys(int tag, void *data, int size);
+    bool setDoubleKeys(int tag, void *data, int size);
+    bool setAsciiKeys(int tag, void *data, int size);
     size_t getKey(int tag, int *count, void **data_ptr) const;
     void setTags();
 
@@ -79,8 +74,8 @@ public:
 private:
     void rebuildGTIF();
 
-    GTIF* m_gtiff;
-    ST_TIFF* m_tiff;
+    GTIF *m_gtiff;
+    StTiff *m_tiff;
 };
 
 } // namespace pdal
diff --git a/io/las/HeaderVal.hpp b/io/las/HeaderVal.hpp
index db1bbc6..0d46811 100644
--- a/io/las/HeaderVal.hpp
+++ b/io/las/HeaderVal.hpp
@@ -33,6 +33,8 @@
 
 #pragma once
 
+#include <pdal/util/Uuid.hpp>
+
 namespace pdal
 {
 
@@ -40,7 +42,6 @@ template <typename T>
 class BaseHeaderVal
 {
 protected:
-//    std::string m_name;
     T m_val;
     T m_defVal;
     bool m_forward;
@@ -116,19 +117,19 @@ public:
         { return m_valSet ? m_val : m_defVal; }
 };
 
-class UuidHeaderVal : public BaseHeaderVal<boost::uuids::uuid>
+class UuidHeaderVal : public BaseHeaderVal<Uuid>
 {
 public:
-    typedef boost::uuids::uuid type;
+    typedef Uuid type;
 
-    bool setVal(boost::uuids::uuid val)
+    bool setVal(Uuid val)
     {
         m_valSet = true;
         m_val = val;
         return true;
     }
 
-    boost::uuids::uuid val()
+    Uuid val()
         { return m_valSet ? m_val : m_defVal; }
 };
 
diff --git a/io/las/LasHeader.cpp b/io/las/LasHeader.cpp
index b136abe..f6d7395 100644
--- a/io/las/LasHeader.cpp
+++ b/io/las/LasHeader.cpp
@@ -35,14 +35,15 @@
 
 #include "LasHeader.hpp"
 
-#include <boost/uuid/uuid_generators.hpp>
-#include <boost/uuid/uuid_io.hpp>
-
 #include <pdal/util/Utils.hpp>
 #include <pdal/pdal_config.hpp>
 
 #include "SummaryData.hpp"
 
+#ifdef PDAL_HAVE_LIBGEOTIFF
+#include "GeotiffSupport.hpp"
+#endif
+
 namespace pdal
 {
 
@@ -97,13 +98,13 @@ void LasHeader::setSummary(const SummaryData& summary)
 
 void LasHeader::setScale(double x, double y, double z)
 {
-    if (Utils::compare_distance(0.0, x))
+    if (x == 0)
         throw std::invalid_argument("X scale of 0.0 is invalid!");
 
-    if (Utils::compare_distance(0.0, y))
+    if (y == 0)
         throw std::invalid_argument("Y scale of 0.0 is invalid!");
 
-    if (Utils::compare_distance(0.0, z))
+    if (z == 0)
         throw std::invalid_argument("Z scale of 0.0 is invalid!");
 
     m_scales[0] = x;
@@ -157,43 +158,21 @@ bool LasHeader::valid() const
 }
 
 
-void LasHeader::get(ILeStream& in, boost::uuids::uuid& uuid)
+void LasHeader::get(ILeStream& in, Uuid& uuid)
 {
-    union
-    {
-        char buf[16];
-        struct
-        {
-            uint32_t uidPart1;
-            uint16_t uidPart2;
-            uint16_t uidPart3;
-            char uidPart4[8];
-        };
-    } u;
-
-    in >> u.uidPart1 >> u.uidPart2 >> u.uidPart3;
-    in.get(u.uidPart4, sizeof(u.uidPart4));
-    memcpy(uuid.data, u.buf, sizeof(u.buf));
+    char buf[uuid.size];
+
+    in.get(buf, uuid.size);
+    uuid.unpack(buf);
 }
 
 
-void LasHeader::put(OLeStream& out, boost::uuids::uuid uuid)
+void LasHeader::put(OLeStream& out, Uuid uuid)
 {
-    union
-    {
-        char buf[16];
-        struct
-        {
-            uint32_t uidPart1;
-            uint16_t uidPart2;
-            uint16_t uidPart3;
-            char uidPart4[8];
-        };
-    } u;
-
-    memcpy(u.buf, uuid.data, sizeof(u.buf));
-    out << u.uidPart1 << u.uidPart2 << u.uidPart3;
-    out.put(u.uidPart4, sizeof(u.uidPart4));
+    char buf[uuid.size];
+
+    uuid.pack(buf);
+    out.put(buf, uuid.size);
 }
 
 
@@ -206,9 +185,7 @@ Dimension::IdList LasHeader::usedDims() const
         Id::ScanDirectionFlag, Id::EdgeOfFlightLine, Id::Classification,
         Id::UserData, Id::ScanAngleRank, Id::PointSourceId };
 
-    // This mess is because MSVC doesn't support initializer lists.
-    Dimension::IdList ids;
-    std::copy(std::begin(dims), std::end(dims), std::back_inserter(ids));
+    Dimension::IdList ids(std::begin(dims), std::end(dims));
 
     if (hasTime())
         ids.push_back(Id::GpsTime);
@@ -224,6 +201,118 @@ Dimension::IdList LasHeader::usedDims() const
     return ids;
 }
 
+void LasHeader::setSrs()
+{
+    bool useWkt = false;
+
+    if (incompatibleSrs())
+    {
+        m_log->get(LogLevel::Error) << "Invalid SRS specification.  "
+            "GeoTiff not allowed with point formats 6 - 10." << std::endl;
+    }
+    else if (findVlr(TRANSFORM_USER_ID, WKT_RECORD_ID) &&
+        findVlr(TRANSFORM_USER_ID, GEOTIFF_DIRECTORY_RECORD_ID))
+    {
+        m_log->get(LogLevel::Debug) << "File contains both "
+            "WKT and GeoTiff VLRs which is disallowed." << std::endl;
+    }
+    else
+        useWkt = (m_versionMinor >= 4);
+
+    return useWkt ? setSrsFromWkt() : setSrsFromGeotiff();
+}
+
+
+VariableLengthRecord *LasHeader::findVlr(const std::string& userId,
+    uint16_t recordId)
+{
+    for (auto vi = m_vlrs.begin(); vi != m_vlrs.end(); ++vi)
+    {
+        VariableLengthRecord& vlr = *vi;
+        if (vlr.matches(userId, recordId))
+            return &vlr;
+    }
+    return NULL;
+}
+
+
+void LasHeader::setSrsFromWkt()
+{
+    VariableLengthRecord *vlr = findVlr(TRANSFORM_USER_ID, WKT_RECORD_ID);
+    if (!vlr)
+        vlr = findVlr(LIBLAS_USER_ID, WKT_RECORD_ID);
+    if (!vlr || vlr->dataLen() == 0)
+        return;
+
+    // There is supposed to be a NULL byte at the end of the data,
+    // but sometimes there isn't because some people don't follow the
+    // rules.  If there is a NULL byte, don't stick it in the
+    // wkt string.
+    size_t len = vlr->dataLen();
+    const char *c = vlr->data() + len - 1;
+    if (*c == 0)
+        len--;
+    m_srs.setWKT(std::string(vlr->data(), len));
+}
+
+
+void LasHeader::setSrsFromGeotiff()
+{
+#ifdef PDAL_HAVE_LIBGEOTIFF
+
+// These are defined in geo_simpletags.h
+// We're not including that file because it includes
+// geotiff.h, which includes a ton of other stuff
+// that might conflict with the messy libgeotiff/GDAL
+// symbol mess
+
+#define STT_SHORT   1
+#define STT_DOUBLE  2
+#define STT_ASCII   3
+
+    GeotiffSupport geotiff;
+    geotiff.resetTags();
+
+    VariableLengthRecord *vlr;
+
+    vlr = findVlr(TRANSFORM_USER_ID, GEOTIFF_DIRECTORY_RECORD_ID);
+    // We must have a directory entry.
+    if (!vlr)
+        return;
+    if (!geotiff.setShortKeys(vlr->recordId(), (void *)vlr->data(),
+        (int)vlr->dataLen()))
+    {
+        std::ostringstream oss;
+
+        oss << "Invalid GeoTIFF directory record.  Can't "
+            "interpret spatial reference.";
+        throw pdal_error(oss.str());
+    }
+
+    vlr = findVlr(TRANSFORM_USER_ID, GEOTIFF_DOUBLES_RECORD_ID);
+    if (vlr)
+        geotiff.setDoubleKeys(vlr->recordId(), (void *)vlr->data(),
+            (int)vlr->dataLen());
+    vlr = findVlr(TRANSFORM_USER_ID, GEOTIFF_ASCII_RECORD_ID);
+    if (vlr)
+        geotiff.setAsciiKeys(vlr->recordId(), (void *)vlr->data(),
+            (int)vlr->dataLen());
+
+    geotiff.setTags();
+    std::string wkt(geotiff.getWkt(false, false));
+    if (wkt.size())
+        m_srs.setFromUserInput(geotiff.getWkt(false, false));
+
+    m_log->get(LogLevel::Debug5) << "GeoTIFF keys: " << geotiff.getText() <<
+        std::endl;
+#else
+    if (findVlr(TRANSFORM_USER_ID, GEOTIFF_DIRECTORY_RECORD_ID))
+        m_log->get(LogLevel::Error) << "Can't decode LAS GeoTiff VLR to "
+            "SRS - PDAL not built with GeoTiff." << std::endl;
+#endif
+}
+
+
 ILeStream& operator>>(ILeStream& in, LasHeader& h)
 {
     uint8_t versionMajor;
@@ -233,10 +322,11 @@ ILeStream& operator>>(ILeStream& in, LasHeader& h)
     in.get(h.m_fileSig, 4);
     if (!Utils::iequals(h.m_fileSig, "LASF"))
     {
-        throw pdal::pdal_error("File signature is not 'LASF', is this an LAS/LAZ file?");
+        throw pdal::pdal_error("File signature is not 'LASF', "
+            "is this an LAS/LAZ file?");
     }
     in >> h.m_sourceId >> h.m_globalEncoding;
-    LasHeader::get(in, h.m_projectGuid);
+    LasHeader::get(in, h.m_projectUuid);
     in >> versionMajor >> h.m_versionMinor;
     in.get(h.m_systemId, 32);
 
@@ -279,6 +369,28 @@ ILeStream& operator>>(ILeStream& in, LasHeader& h)
             in >> h.m_pointCountByReturn[i];
     }
 
+    // Read regular VLRs.
+    in.seek(h.m_vlrOffset);
+    for (size_t i = 0; i < h.m_vlrCount; ++i)
+    {
+        VariableLengthRecord r;
+        in >> r;
+        h.m_vlrs.push_back(std::move(r));
+    }
+
+    // Read extended VLRs.
+    if (h.versionAtLeast(1, 4))
+    {
+        in.seek(h.m_eVlrOffset);
+        for (size_t i = 0; i < h.m_eVlrCount; ++i)
+        {
+            ExtVariableLengthRecord r;
+            in >> r;
+            h.m_vlrs.push_back(std::move(r));
+        }
+    }
+    h.setSrs();
+
     return in;
 }
 
@@ -287,7 +399,7 @@ OLeStream& operator<<(OLeStream& out, const LasHeader& h)
 {
     uint32_t legacyPointCount = 0;
     if (h.m_pointCount <= (std::numeric_limits<uint32_t>::max)())
-        legacyPointCount = h.m_pointCount;
+        legacyPointCount = (uint32_t)h.m_pointCount;
 
     out.put(h.m_fileSig, 4);
     if (h.versionEquals(1, 0))
@@ -296,7 +408,7 @@ OLeStream& operator<<(OLeStream& out, const LasHeader& h)
         out << h.m_sourceId << (uint16_t)0;
     else
         out << h.m_sourceId << h.m_globalEncoding;
-    LasHeader::put(out, h.m_projectGuid);
+    LasHeader::put(out, h.m_projectUuid);
     out << (uint8_t)1 << h.m_versionMinor;
     out.put(h.m_systemId, 32);
     out.put(h.m_softwareId, 32);
@@ -340,7 +452,7 @@ std::ostream& operator<<(std::ostream& out, const LasHeader& h)
     out << "File signature: " << h.m_fileSig << "\n";
     out << "File source ID: " << h.m_sourceId << "\n";
     out << "Global encoding: " << h.m_globalEncoding << "\n";
-    out << "Project GUID: " << h.m_projectGuid << "\n";
+    out << "Project UUID: " << h.m_projectUuid << "\n";
     out << "System ID: " << h.m_systemId << "\n";
     out << "Software ID: " << h.m_softwareId << "\n";
     out << "Creation DOY: " << h.m_createDOY << "\n";
diff --git a/io/las/LasHeader.hpp b/io/las/LasHeader.hpp
index 88f1def..881c36a 100644
--- a/io/las/LasHeader.hpp
+++ b/io/las/LasHeader.hpp
@@ -38,11 +38,10 @@
 #include <array>
 #include <vector>
 
-#include <boost/uuid/uuid.hpp>
-#include <boost/property_tree/ptree.hpp>
-
 #include <pdal/Dimension.hpp>
+#include <pdal/Log.hpp>
 #include <pdal/util/Bounds.hpp>
+#include <pdal/util/Uuid.hpp>
 #include <pdal/pdal_config.hpp>
 #include <pdal/gitsha.h>
 
@@ -97,13 +96,13 @@ public:
         { m_globalEncoding = globalEncoding; }
 
     /// Get project identifier.
-    /// \return Global Unique Identifier as an instance of liblas::guid class.
-    boost::uuids::uuid projectId() const
-        { return m_projectGuid; }
+    /// \return UUID
+    Uuid projectId() const
+        { return m_projectUuid; }
 
     /// Set project identifier.
-    void setProjectId(boost::uuids::uuid const& v)
-        { m_projectGuid = v; }
+    void setProjectId(const Uuid& v)
+        { m_projectUuid = v; }
 
     /// Get the LAS major version.
     /// \return  LAS major version
@@ -365,15 +364,21 @@ public:
         { m_eVlrCount = count; }
     uint32_t eVlrCount() const
         { return m_eVlrCount; }
-
     std::string const& compressionInfo() const
         { return m_compressionInfo; }
     void setCompressionInfo(std::string const& info)
         { m_compressionInfo = info; }
+    SpatialReference srs() const
+        { return m_srs; }
 
     void setSummary(const SummaryData& summary);
     bool valid() const;
     Dimension::IdList usedDims() const;
+    VariableLengthRecord *findVlr(const std::string& userId, uint16_t recordId);
+    void setLog(LogPtr log)
+        { m_log = log; }
+    const VlrList& vlrs() const
+        { return m_vlrs; }
 
     friend ILeStream& operator>>(ILeStream&, LasHeader& h);
     friend OLeStream& operator<<(OLeStream&, const LasHeader& h);
@@ -383,7 +388,7 @@ private:
     std::string m_fileSig;
     uint16_t m_sourceId;
     uint16_t m_globalEncoding;
-    boost::uuids::uuid m_projectGuid;
+    Uuid m_projectUuid;
     uint8_t m_versionMinor;
     std::string m_systemId;
     std::string m_softwareId;
@@ -403,9 +408,17 @@ private:
     uint32_t m_eVlrCount;
     BOX3D m_bounds;
     std::string m_compressionInfo;
+    LogPtr m_log;
+    SpatialReference m_srs;
+    VlrList m_vlrs;
+    VlrList m_eVlrs;
+
+    void setSrs();
+    void setSrsFromWkt();
+    void setSrsFromGeotiff();
 
-    static void get(ILeStream& in, boost::uuids::uuid& uuid);
-    static void put(OLeStream& in, boost::uuids::uuid uuid);
+    static void get(ILeStream& in, Uuid& uuid);
+    static void put(OLeStream& in, Uuid uuid);
 };
 
 } // namespace pdal
diff --git a/io/las/LasReader.cpp b/io/las/LasReader.cpp
index 47ceaac..49b9f0b 100644
--- a/io/las/LasReader.cpp
+++ b/io/las/LasReader.cpp
@@ -44,8 +44,11 @@
 #include <pdal/util/Extractor.hpp>
 #include <pdal/util/FileUtils.hpp>
 #include <pdal/util/IStream.hpp>
+#include <pdal/pdal_macros.hpp>
 
+#ifdef PDAL_HAVE_LIBGEOTIFF
 #include "GeotiffSupport.hpp"
+#endif
 #include "LasHeader.hpp"
 #include "VariableLengthRecord.hpp"
 #include "ZipPoint.hpp"
@@ -116,9 +119,9 @@ QuickInfo LasReader::inspect()
     Dimension::IdList dims = layout->dims();
     for (auto di = dims.begin(); di != dims.end(); ++di)
         qi.m_dimNames.push_back(layout->dimName(*di));
-    if (!Utils::numericCast(m_lasHeader.pointCount(), qi.m_pointCount))
+    if (!Utils::numericCast(m_header.pointCount(), qi.m_pointCount))
         qi.m_pointCount = std::numeric_limits<point_count_t>::max();
-    qi.m_bounds = m_lasHeader.getBounds();
+    qi.m_bounds = m_header.getBounds();
     qi.m_srs = getSpatialReference();
     qi.m_valid = true;
 
@@ -130,62 +133,57 @@ QuickInfo LasReader::inspect()
 
 void LasReader::initializeLocal(PointTableRef table, MetadataNode& m)
 {
-    if (m_initialized)
-        return;
-    m_istream = createStream();
+    m_error.setLog(log());
+    m_header.setLog(log());
+    createStream();
 
-    m_istream->seekg(0);
-    ILeStream in(m_istream);
-    in >> m_lasHeader;
+    std::istream *stream(m_streamIf->m_istream);
 
-    if (!m_lasHeader.pointFormatSupported())
+    stream->seekg(0);
+    ILeStream in(stream);
+    try
+    {
+        in >> m_header;
+    }
+    catch (pdal_error e)
     {
         std::ostringstream oss;
-        oss << "Unsupported LAS input point format: " <<
-            (int)m_lasHeader.pointFormat() << ".";
-       throw pdal_error(oss.str());
+
+        oss << getName() << e.what();
+        throw pdal_error(oss.str());
     }
 
-    // We need to read the VLRs in initialize() because they may contain an
-    // extra-bytes VLR that is needed to determine dimensions.
-    m_istream->seekg(m_lasHeader.vlrOffset());
-    for (size_t i = 0; i < m_lasHeader.vlrCount(); ++i)
+    if (!m_header.pointFormatSupported())
     {
-        VariableLengthRecord r;
-        in >> r;
-        m_vlrs.push_back(std::move(r));
+        std::ostringstream oss;
+        oss << "Unsupported LAS input point format: " <<
+            (int)m_header.pointFormat() << ".";
+       throw pdal_error(oss.str());
     }
 
-    if (m_lasHeader.versionAtLeast(1, 4))
-    {
-        m_istream->seekg(m_lasHeader.eVlrOffset());
-        for (size_t i = 0; i < m_lasHeader.eVlrCount(); ++i)
-        {
-            ExtVariableLengthRecord r;
-            in >> r;
-            m_vlrs.push_back(std::move(r));
-        }
+    if (m_header.versionAtLeast(1, 4))
         readExtraBytesVlr();
-    }
-    fixupVlrs();
-    setSrsFromVlrs(m);
+    setSrs(m);
     MetadataNode forward = table.privateMetadata("lasforward");
     extractHeaderMetadata(forward, m);
     extractVlrMetadata(forward, m);
 
-    m_initialized = true;
+    m_streamIf.reset();
 }
 
 
 void LasReader::ready(PointTableRef table)
 {
+    createStream();
+    std::istream *stream(m_streamIf->m_istream);
+
     m_index = 0;
-    if (m_lasHeader.compressed())
+    if (m_header.compressed())
     {
 #ifdef PDAL_HAVE_LASZIP
         if (m_compression == "LASZIP")
         {
-            VariableLengthRecord *vlr = findVlr(LASZIP_USER_ID,
+            VariableLengthRecord *vlr = m_header.findVlr(LASZIP_USER_ID,
                 LASZIP_RECORD_ID);
             m_zipPoint.reset(new ZipPoint(vlr));
 
@@ -193,11 +191,11 @@ void LasReader::ready(PointTableRef table)
             {
                 m_unzipper.reset(new LASunzipper());
 
-                m_istream->seekg(m_lasHeader.pointOffset(), std::ios::beg);
+                stream->seekg(m_header.pointOffset(), std::ios::beg);
 
                 // Once we open the zipper, don't touch the stream until the
                 // zipper is closed or bad things happen.
-                if (!m_unzipper->open(*m_istream, m_zipPoint->GetZipper()))
+                if (!m_unzipper->open(*stream, m_zipPoint->GetZipper()))
                 {
                     std::ostringstream oss;
                     const char* err = m_unzipper->get_error();
@@ -213,10 +211,11 @@ void LasReader::ready(PointTableRef table)
 #ifdef PDAL_HAVE_LAZPERF
         if (m_compression == "LAZPERF")
         {
-            VariableLengthRecord *vlr = findVlr(LASZIP_USER_ID,
+            VariableLengthRecord *vlr = m_header.findVlr(LASZIP_USER_ID,
                 LASZIP_RECORD_ID);
-            m_decompressor.reset(new LazPerfVlrDecompressor(*m_istream,
-                vlr->data(), m_lasHeader.pointOffset()));
+            m_decompressor.reset(new LazPerfVlrDecompressor(*stream,
+                vlr->data(), m_header.pointOffset()));
+            m_decompressorBuf.resize(m_decompressor->pointSize());
         }
 #endif
 
@@ -225,8 +224,8 @@ void LasReader::ready(PointTableRef table)
             "LAZperf decompression library.");
 #endif
     }
-    m_error.setLog(log());
-
+    else
+        stream->seekg(m_header.pointOffset());
 }
 
 
@@ -265,134 +264,102 @@ void addForwardMetadata(MetadataNode& forward, MetadataNode& m,
 
 void LasReader::extractHeaderMetadata(MetadataNode& forward, MetadataNode& m)
 {
-    m.add<bool>("compressed", m_lasHeader.compressed(),
+    m.add<bool>("compressed", m_header.compressed(),
         "true if this LAS file is compressed");
 
-    addForwardMetadata(forward, m, "major_version", m_lasHeader.versionMajor(),
+    addForwardMetadata(forward, m, "major_version", m_header.versionMajor(),
         "The major LAS version for the file, always 1 for now");
-    addForwardMetadata(forward, m, "minor_version", m_lasHeader.versionMinor(),
+    addForwardMetadata(forward, m, "minor_version", m_header.versionMinor(),
         "The minor LAS version for the file");
-    addForwardMetadata(forward, m, "dataformat_id", m_lasHeader.pointFormat(),
+    addForwardMetadata(forward, m, "dataformat_id", m_header.pointFormat(),
         "LAS Point Data Format");
-    if (m_lasHeader.versionAtLeast(1, 1))
+    if (m_header.versionAtLeast(1, 1))
         addForwardMetadata(forward, m, "filesource_id",
-            m_lasHeader.fileSourceId(), "File Source ID (Flight Line Number "
+            m_header.fileSourceId(), "File Source ID (Flight Line Number "
             "if this file was derived from an original flight line).");
-    if (m_lasHeader.versionAtLeast(1, 2))
+    if (m_header.versionAtLeast(1, 2))
     {
         // For some reason we've written global encoding as a base 64
         // encoded value in the past.  In an effort to standardize things,
         // I'm writing this as a special value, and will also write
         // global_encoding like we write all other header metadata.
-        uint16_t globalEncoding = m_lasHeader.globalEncoding();
+        uint16_t globalEncoding = m_header.globalEncoding();
         m.addEncoded("global_encoding_base64", (uint8_t *)&globalEncoding,
             sizeof(globalEncoding),
             "Global Encoding: general property bit field.");
 
         addForwardMetadata(forward, m, "global_encoding",
-            m_lasHeader.globalEncoding(),
+            m_header.globalEncoding(),
             "Global Encoding: general property bit field.");
     }
 
-    addForwardMetadata(forward, m, "project_id", m_lasHeader.projectId(),
+    addForwardMetadata(forward, m, "project_id", m_header.projectId(),
         "Project ID.");
-    addForwardMetadata(forward, m, "system_id", m_lasHeader.systemId());
-    addForwardMetadata(forward, m, "software_id", m_lasHeader.softwareId(),
+    addForwardMetadata(forward, m, "system_id", m_header.systemId());
+    addForwardMetadata(forward, m, "software_id", m_header.softwareId(),
         "Generating software description.");
-    addForwardMetadata(forward, m, "creation_doy", m_lasHeader.creationDOY(),
+    addForwardMetadata(forward, m, "creation_doy", m_header.creationDOY(),
         "Day, expressed as an unsigned short, on which this file was created. "
         "Day is computed as the Greenwich Mean Time (GMT) day. January 1 is "
         "considered day 1.");
-    addForwardMetadata(forward, m, "creation_year", m_lasHeader.creationYear(),
+    addForwardMetadata(forward, m, "creation_year", m_header.creationYear(),
         "The year, expressed as a four digit number, in which the file was "
         "created.");
-    addForwardMetadata(forward, m, "scale_x", m_lasHeader.scaleX(),
+    addForwardMetadata(forward, m, "scale_x", m_header.scaleX(),
         "The scale factor for X values.");
-    addForwardMetadata(forward, m, "scale_y", m_lasHeader.scaleY(),
+    addForwardMetadata(forward, m, "scale_y", m_header.scaleY(),
         "The scale factor for Y values.");
-    addForwardMetadata(forward, m, "scale_z", m_lasHeader.scaleZ(),
+    addForwardMetadata(forward, m, "scale_z", m_header.scaleZ(),
         "The scale factor for Z values.");
-    addForwardMetadata(forward, m, "offset_x", m_lasHeader.offsetX(),
+    addForwardMetadata(forward, m, "offset_x", m_header.offsetX(),
         "The offset for X values.");
-    addForwardMetadata(forward, m, "offset_y", m_lasHeader.offsetY(),
+    addForwardMetadata(forward, m, "offset_y", m_header.offsetY(),
         "The offset for Y values.");
-    addForwardMetadata(forward, m, "offset_z", m_lasHeader.offsetZ(),
+    addForwardMetadata(forward, m, "offset_z", m_header.offsetZ(),
         "The offset for Z values.");
 
-    m.add("header_size", m_lasHeader.vlrOffset(),
+    m.add("header_size", m_header.vlrOffset(),
         "The size, in bytes, of the header block, including any extension "
         "by specific software.");
-    m.add("dataoffset", m_lasHeader.pointOffset(),
+    m.add("dataoffset", m_header.pointOffset(),
         "The actual number of bytes from the beginning of the file to the "
         "first field of the first point record data field. This data offset "
         "must be updated if any software adds data from the Public Header "
         "Block or adds/removes data to/from the Variable Length Records.");
-    m.add<double>("minx", m_lasHeader.minX(),
+    m.add<double>("minx", m_header.minX(),
         "The max and min data fields are the actual unscaled extents of the "
         "LAS point file data, specified in the coordinate system of the LAS "
         "data.");
-    m.add<double>("miny", m_lasHeader.minY(),
+    m.add<double>("miny", m_header.minY(),
         "The max and min data fields are the actual unscaled extents of the "
         "LAS point file data, specified in the coordinate system of the LAS "
         "data.");
-    m.add<double>("minz", m_lasHeader.minZ(),
+    m.add<double>("minz", m_header.minZ(),
         "The max and min data fields are the actual unscaled extents of the "
         "LAS point file data, specified in the coordinate system of the LAS "
         "data.");
-    m.add<double>("maxx", m_lasHeader.maxX(),
+    m.add<double>("maxx", m_header.maxX(),
         "The max and min data fields are the actual unscaled extents of the "
         "LAS point file data, specified in the coordinate system of the LAS "
         "data.");
-    m.add<double>("maxy", m_lasHeader.maxY(),
+    m.add<double>("maxy", m_header.maxY(),
         "The max and min data fields are the actual unscaled extents of the "
         "LAS point file data, specified in the coordinate system of the LAS "
         "data.");
-    m.add<double>("maxz", m_lasHeader.maxZ(),
+    m.add<double>("maxz", m_header.maxZ(),
         "The max and min data fields are the actual unscaled extents of the "
         "LAS point file data, specified in the coordinate system of the LAS "
         "data.");
     m.add<uint32_t>("count",
-        m_lasHeader.pointCount(), "This field contains the total "
+        m_header.pointCount(), "This field contains the total "
         "number of point records within the file.");
 }
 
 
-void LasReader::fixupVlrs()
-{
-    const size_t KEY_SIZE = 8;
-    char zeros[8] = {};
-
-    // There is currently only one fixup - for the geotiff directory VLR.
-    VariableLengthRecord *vlr =
-        findVlr(TRANSFORM_USER_ID, GEOTIFF_DIRECTORY_RECORD_ID);
-    if (vlr)
-    {
-        while (vlr->dataLen() > 8)
-        {
-            // If the key at the end has a zero value, remove it
-            // by resizing the array and decrementing the size.
-            char *testPos = const_cast<char *>(
-                vlr->data() + vlr->dataLen() - KEY_SIZE);
-            if (memcmp(zeros, testPos, KEY_SIZE))
-                break;
-            uint16_t size;
-            vlr->setDataLen(vlr->dataLen() - 8);
-
-            // Reduce the size of the data by one.  The size field is
-            // at offset 6 from the beginning of the data.
-            memcpy((void *)&size, vlr->data() + 6, 2);
-            size = le16toh(size);
-            size--;
-            size = htole16(size);
-            memcpy((void *)(vlr->data()  + 6), &size, 2);
-        }
-    }
-}
-
-
 void LasReader::readExtraBytesVlr()
 {
-    VariableLengthRecord *vlr = findVlr(SPEC_USER_ID, EXTRA_BYTES_RECORD_ID);
+    VariableLengthRecord *vlr = m_header.findVlr(SPEC_USER_ID,
+        EXTRA_BYTES_RECORD_ID);
     if (!vlr)
         return;
     const char *pos = vlr->data();
@@ -428,134 +395,30 @@ void LasReader::readExtraBytesVlr()
 }
 
 
-void LasReader::setSrsFromVlrs(MetadataNode& m)
+void LasReader::setSrs(MetadataNode& m)
 {
     // If the user is already overriding this by setting it on the stage, we'll
     // take their overridden value
     SpatialReference srs = getSpatialReference();
 
     if (srs.getWKT(pdal::SpatialReference::eCompoundOK).empty())
-        srs = getSrsFromVlrs();
+        srs = m_header.srs();
     setSpatialReference(m, srs);
 }
 
 
-SpatialReference LasReader::getSrsFromVlrs()
-{
-    bool useWkt = false;
-
-    if (m_lasHeader.incompatibleSrs())
-    {
-        log()->get(LogLevel::Error) << getName() <<
-            ": Invalid SRS specification.  GeoTiff not "
-            "allowed with point formats 6 - 10." << std::endl;
-    }
-    else if (findVlr(TRANSFORM_USER_ID, WKT_RECORD_ID) &&
-        findVlr(TRANSFORM_USER_ID, GEOTIFF_DIRECTORY_RECORD_ID))
-    {
-        log()->get(LogLevel::Error) << getName() << ": File contains both "
-            "WKT and GeoTiff VLRs which is disallowed." << std::endl;
-    }
-    else
-        useWkt = (m_lasHeader.versionMinor() >= 4);
-
-    return useWkt ? getSrsFromWktVlr() : getSrsFromGeotiffVlr();
-}
-
-
-VariableLengthRecord *LasReader::findVlr(const std::string& userId,
-    uint16_t recordId)
-{
-    for (auto vi = m_vlrs.begin(); vi != m_vlrs.end(); ++vi)
-    {
-        VariableLengthRecord& vlr = *vi;
-        if (vlr.matches(userId, recordId))
-            return &vlr;
-    }
-    return NULL;
-}
-
-
-SpatialReference LasReader::getSrsFromWktVlr()
-{
-    SpatialReference srs;
-
-    VariableLengthRecord *vlr = findVlr(TRANSFORM_USER_ID, WKT_RECORD_ID);
-    if (!vlr)
-        vlr = findVlr(LIBLAS_USER_ID, WKT_RECORD_ID);
-    if (!vlr || vlr->dataLen() == 0)
-        return srs;
-
-    // There is supposed to be a NULL byte at the end of the data,
-    // but sometimes there isn't because some people don't follow the
-    // rules.  If there is a NULL byte, don't stick it in the
-    // wkt string.
-    size_t len = vlr->dataLen();
-    const char *c = vlr->data() + len - 1;
-    if (*c == 0)
-        len--;
-    std::string wkt(vlr->data(), len);
-
-    srs.setWKT(wkt);
-    return srs;
-}
-
-
-SpatialReference LasReader::getSrsFromGeotiffVlr()
-{
-    SpatialReference srs;
-
-#ifdef PDAL_HAVE_LIBGEOTIFF
-    GeotiffSupport geotiff;
-    geotiff.resetTags();
-
-    VariableLengthRecord *vlr;
-
-    vlr = findVlr(TRANSFORM_USER_ID, GEOTIFF_DIRECTORY_RECORD_ID);
-    // We must have a directory entry.
-    if (!vlr)
-        return srs;
-    geotiff.setKey(vlr->recordId(), (void *)vlr->data(), vlr->dataLen(),
-        STT_SHORT);
-
-    vlr = findVlr(TRANSFORM_USER_ID, GEOTIFF_DOUBLES_RECORD_ID);
-    if (vlr)
-        geotiff.setKey(vlr->recordId(), (void *)vlr->data(), vlr->dataLen(),
-            STT_DOUBLE);
-    vlr = findVlr(TRANSFORM_USER_ID, GEOTIFF_ASCII_RECORD_ID);
-    if (vlr)
-        geotiff.setKey(vlr->recordId(), (void *)vlr->data(), vlr->dataLen(),
-            STT_ASCII);
-
-    geotiff.setTags();
-    std::string wkt(geotiff.getWkt(false, false));
-    if (wkt.size())
-        srs.setFromUserInput(geotiff.getWkt(false, false));
-
-    log()->get(LogLevel::Debug5) << "GeoTIFF keys: " << geotiff.getText() << std::endl;
-#else
-    if (findVlr(TRANSFORM_USER_ID, GEOTIFF_DIRECTORY_RECORD_ID))
-        log()->get(LogLevel::Error) << getName() <<
-            ": Can't decode LAS GeoTiff VLR to SRS - PDAL not built "
-            "with GeoTiff." << std::endl;
-#endif
-    return srs;
-}
-
-
 void LasReader::extractVlrMetadata(MetadataNode& forward, MetadataNode& m)
 {
     static const size_t DATA_LEN_MAX = 1000000;
 
     int i = 0;
-    for (auto vi = m_vlrs.begin(); vi != m_vlrs.end(); ++vi, ++i)
+    for (auto vlr : m_header.vlrs())
     {
-        const VariableLengthRecord& vlr = *vi;
         if (vlr.dataLen() > DATA_LEN_MAX)
             continue;
 
         std::ostringstream name;
-        name << "vlr_" << i;
+        name << "vlr_" << i++;
         MetadataNode vlrNode = m.addEncoded(name.str(),
             (const uint8_t *)vlr.data(), vlr.dataLen(), vlr.description());
 
@@ -592,18 +455,21 @@ void LasReader::addDimensions(PointLayoutPtr layout)
     layout->registerDim(Id::UserData, Type::Unsigned8);
     layout->registerDim(Id::PointSourceId, Type::Unsigned16);
 
-    if (m_lasHeader.hasTime())
+    if (m_header.hasTime())
         layout->registerDim(Id::GpsTime, Type::Double);
-    if (m_lasHeader.hasColor())
+    if (m_header.hasColor())
     {
         layout->registerDim(Id::Red, Type::Unsigned16);
         layout->registerDim(Id::Green, Type::Unsigned16);
         layout->registerDim(Id::Blue, Type::Unsigned16);
     }
-    if (m_lasHeader.hasInfrared())
+    if (m_header.hasInfrared())
         layout->registerDim(Id::Infrared);
-    if (m_lasHeader.versionAtLeast(1, 4))
+    if (m_header.versionAtLeast(1, 4))
+    {
         layout->registerDim(Id::ScanChannel);
+        layout->registerDim(Id::ClassFlags);
+    }
 
     for (auto& dim : m_extraDims)
     {
@@ -617,60 +483,88 @@ void LasReader::addDimensions(PointLayoutPtr layout)
 }
 
 
-point_count_t LasReader::read(PointViewPtr view, point_count_t count)
+bool LasReader::processOne(PointRef& point)
 {
-    size_t pointByteCount = m_lasHeader.pointLen();
-    count = std::min(count, getNumPoints() - m_index);
+    if (m_index >= getNumPoints())
+        return false;
 
-    PointId i = 0;
-    if (m_lasHeader.compressed())
+    size_t pointLen = m_header.pointLen();
+
+    if (m_header.compressed())
     {
 #ifdef PDAL_HAVE_LASZIP
         if (m_compression == "LASZIP")
         {
-            for (i = 0; i < count; i++)
+            if (!m_unzipper->read(m_zipPoint->m_lz_point))
             {
-                if (!m_unzipper->read(m_zipPoint->m_lz_point))
-                {
-                    std::string error = "Error reading compressed point data: ";
-                    const char* err = m_unzipper->get_error();
-                    if (!err)
-                        err = "(unknown error)";
-                    error += err;
-                    throw pdal_error(error);
-                }
-                loadPoint(*view.get(),
-                    (char *)m_zipPoint->m_lz_point_data.data(), pointByteCount);
+                std::string error = "Error reading compressed point data: ";
+                const char* err = m_unzipper->get_error();
+                if (!err)
+                    err = "(unknown error)";
+                error += err;
+                throw pdal_error(error);
             }
+            loadPoint(point, (char *)m_zipPoint->m_lz_point_data.data(),
+                pointLen);
         }
 #endif
 
 #ifdef PDAL_HAVE_LAZPERF
         if (m_compression == "LAZPERF")
         {
-            assert(pointByteCount == m_decompressor->pointSize());
+            m_decompressor->decompress(m_decompressorBuf.data());
+            loadPoint(point, m_decompressorBuf.data(), pointLen);
+        }
+#endif
+#if !defined(PDAL_HAVE_LAZPERF) && !defined(PDAL_HAVE_LASZIP)
+        throw pdal_error("Can't read compressed file without LASzip or "
+            "LAZperf decompression library.");
+#endif
+    } // compression
+    else
+    {
+        std::vector<char> buf(m_header.pointLen());
 
-            std::vector<char> ptBuf(m_decompressor->pointSize());
+        m_streamIf->m_istream->read(buf.data(), pointLen);
+        loadPoint(point, buf.data(), pointLen);
+    }
+    m_index++;
+    return true;
+}
+
+
+point_count_t LasReader::read(PointViewPtr view, point_count_t count)
+{
+    size_t pointLen = m_header.pointLen();
+    count = std::min(count, getNumPoints() - m_index);
+
+    PointId i = 0;
+    if (m_header.compressed())
+    {
+#if defined(PDAL_HAVE_LAZPERF) || defined(PDAL_HAVE_LASZIP)
+        if (m_compression == "LASZIP" || m_compression == "LAZPERF")
+        {
             for (i = 0; i < count; i++)
             {
-                m_decompressor->decompress(ptBuf.data());
-                loadPoint(*view.get(), ptBuf.data(), pointByteCount);
+                PointRef point = view->point(i);
+                PointId id = view->size();
+                processOne(point);
+                if (m_cb)
+                    m_cb(*view, id);
             }
         }
-#endif
-#if !defined(PDAL_HAVE_LAZPERF) && !defined(PDAL_HAVE_LASZIP)
+#else
         throw pdal_error("Can't read compressed file without LASzip or "
             "LAZperf decompression library.");
 #endif
     }
     else
     {
-        m_istream->seekg(m_lasHeader.pointOffset());
         point_count_t remaining = count;
 
         // Make a buffer at most a meg.
         size_t bufsize = std::min<size_t>((point_count_t)1000000,
-            count * pointByteCount);
+            count * pointLen);
         std::vector<char> buf(bufsize);
         try
         {
@@ -681,8 +575,12 @@ point_count_t LasReader::read(PointViewPtr view, point_count_t count)
                 char *pos = buf.data();
                 while (blockPoints--)
                 {
-                    loadPoint(*view.get(), pos, pointByteCount);
-                    pos += pointByteCount;
+                    PointId id = view->size();
+                    PointRef point = view->point(id);
+                    loadPoint(point, pos, pointLen);
+                    if (m_cb)
+                        m_cb(*view, id);
+                    pos += pointLen;
                     i++;
                 }
             } while (remaining);
@@ -700,44 +598,44 @@ point_count_t LasReader::read(PointViewPtr view, point_count_t count)
 point_count_t LasReader::readFileBlock(std::vector<char>& buf,
     point_count_t maxpoints)
 {
-    size_t ptLen = m_lasHeader.pointLen();
+    std::istream *stream(m_streamIf->m_istream);
+
+    size_t ptLen = m_header.pointLen();
     point_count_t blockpoints = buf.size() / ptLen;
 
     blockpoints = std::min(maxpoints, blockpoints);
-    if (m_istream->eof())
+    if (stream->eof())
         throw invalid_stream("stream is done");
 
-    m_istream->read(buf.data(), blockpoints * ptLen);
-    if (m_istream->gcount() != (std::streamsize)(blockpoints * ptLen))
+    stream->read(buf.data(), blockpoints * ptLen);
+    if (stream->gcount() != (std::streamsize)(blockpoints * ptLen))
     {
         // we read fewer bytes than we asked for
         // because the file was either truncated
         // or the header is bunk.
-        blockpoints = m_istream->gcount() / ptLen;
+        blockpoints = stream->gcount() / ptLen;
     }
     return blockpoints;
 }
 
 
-void LasReader::loadPoint(PointView& data, char *buf, size_t bufsize)
+void LasReader::loadPoint(PointRef& point, char *buf, size_t bufsize)
 {
-    if (m_lasHeader.has14Format())
-        loadPointV14(data, buf, bufsize);
+    if (m_header.has14Format())
+        loadPointV14(point, buf, bufsize);
     else
-        loadPointV10(data, buf, bufsize);
+        loadPointV10(point, buf, bufsize);
 }
 
 
-void LasReader::loadPointV10(PointView& data, char *buf, size_t bufsize)
+void LasReader::loadPointV10(PointRef& point, char *buf, size_t bufsize)
 {
     LeExtractor istream(buf, bufsize);
 
-    PointId nextId = data.size();
-
     int32_t xi, yi, zi;
     istream >> xi >> yi >> zi;
 
-    const LasHeader& h = m_lasHeader;
+    const LasHeader& h = m_header;
 
     double x = xi * h.scaleX() + h.offsetX();
     double y = yi * h.scaleY() + h.offsetY();
@@ -764,51 +662,48 @@ void LasReader::loadPointV10(PointView& data, char *buf, size_t bufsize)
     if (numReturns == 0 || numReturns > 5)
         m_error.numReturnsWarning(numReturns);
 
-    data.setField(Dimension::Id::X, nextId, x);
-    data.setField(Dimension::Id::Y, nextId, y);
-    data.setField(Dimension::Id::Z, nextId, z);
-    data.setField(Dimension::Id::Intensity, nextId, intensity);
-    data.setField(Dimension::Id::ReturnNumber, nextId, returnNum);
-    data.setField(Dimension::Id::NumberOfReturns, nextId, numReturns);
-    data.setField(Dimension::Id::ScanDirectionFlag, nextId, scanDirFlag);
-    data.setField(Dimension::Id::EdgeOfFlightLine, nextId, flight);
-    data.setField(Dimension::Id::Classification, nextId, classification);
-    data.setField(Dimension::Id::ScanAngleRank, nextId, scanAngleRank);
-    data.setField(Dimension::Id::UserData, nextId, user);
-    data.setField(Dimension::Id::PointSourceId, nextId, pointSourceId);
+    point.setField(Dimension::Id::X, x);
+    point.setField(Dimension::Id::Y, y);
+    point.setField(Dimension::Id::Z, z);
+    point.setField(Dimension::Id::Intensity, intensity);
+    point.setField(Dimension::Id::ReturnNumber, returnNum);
+    point.setField(Dimension::Id::NumberOfReturns, numReturns);
+    point.setField(Dimension::Id::ScanDirectionFlag, scanDirFlag);
+    point.setField(Dimension::Id::EdgeOfFlightLine, flight);
+    point.setField(Dimension::Id::Classification, classification);
+    point.setField(Dimension::Id::ScanAngleRank, scanAngleRank);
+    point.setField(Dimension::Id::UserData, user);
+    point.setField(Dimension::Id::PointSourceId, pointSourceId);
 
     if (h.hasTime())
     {
         double time;
         istream >> time;
-        data.setField(Dimension::Id::GpsTime, nextId, time);
+        point.setField(Dimension::Id::GpsTime, time);
     }
 
     if (h.hasColor())
     {
         uint16_t red, green, blue;
         istream >> red >> green >> blue;
-        data.setField(Dimension::Id::Red, nextId, red);
-        data.setField(Dimension::Id::Green, nextId, green);
-        data.setField(Dimension::Id::Blue, nextId, blue);
+        point.setField(Dimension::Id::Red, red);
+        point.setField(Dimension::Id::Green, green);
+        point.setField(Dimension::Id::Blue, blue);
     }
 
     if (m_extraDims.size())
-        loadExtraDims(istream, data, nextId);
-    if (m_cb)
-        m_cb(data, nextId);
+        loadExtraDims(istream, point);
+
 }
 
-void LasReader::loadPointV14(PointView& data, char *buf, size_t bufsize)
+void LasReader::loadPointV14(PointRef& point, char *buf, size_t bufsize)
 {
     LeExtractor istream(buf, bufsize);
 
-    PointId nextId = data.size();
-
     int32_t xi, yi, zi;
     istream >> xi >> yi >> zi;
 
-    const LasHeader& h = m_lasHeader;
+    const LasHeader& h = m_header;
 
     double x = xi * h.scaleX() + h.offsetX();
     double y = yi * h.scaleY() + h.offsetY();
@@ -833,29 +728,29 @@ void LasReader::loadPointV14(PointView& data, char *buf, size_t bufsize)
     uint8_t scanDirFlag = (flags >> 6) & 0x01;
     uint8_t flight = (flags >> 7) & 0x01;
 
-    //ABELL - Need to do something with the classFlags;
-    data.setField(Dimension::Id::X, nextId, x);
-    data.setField(Dimension::Id::Y, nextId, y);
-    data.setField(Dimension::Id::Z, nextId, z);
-    data.setField(Dimension::Id::Intensity, nextId, intensity);
-    data.setField(Dimension::Id::ReturnNumber, nextId, returnNum);
-    data.setField(Dimension::Id::NumberOfReturns, nextId, numReturns);
-    data.setField(Dimension::Id::ScanChannel, nextId, scanChannel);
-    data.setField(Dimension::Id::ScanDirectionFlag, nextId, scanDirFlag);
-    data.setField(Dimension::Id::EdgeOfFlightLine, nextId, flight);
-    data.setField(Dimension::Id::Classification, nextId, classification);
-    data.setField(Dimension::Id::ScanAngleRank, nextId, scanAngle * .006);
-    data.setField(Dimension::Id::UserData, nextId, user);
-    data.setField(Dimension::Id::PointSourceId, nextId, pointSourceId);
-    data.setField(Dimension::Id::GpsTime, nextId, gpsTime);
+    point.setField(Dimension::Id::X, x);
+    point.setField(Dimension::Id::Y, y);
+    point.setField(Dimension::Id::Z, z);
+    point.setField(Dimension::Id::Intensity, intensity);
+    point.setField(Dimension::Id::ReturnNumber, returnNum);
+    point.setField(Dimension::Id::NumberOfReturns, numReturns);
+    point.setField(Dimension::Id::ClassFlags, classFlags);
+    point.setField(Dimension::Id::ScanChannel, scanChannel);
+    point.setField(Dimension::Id::ScanDirectionFlag, scanDirFlag);
+    point.setField(Dimension::Id::EdgeOfFlightLine, flight);
+    point.setField(Dimension::Id::Classification, classification);
+    point.setField(Dimension::Id::ScanAngleRank, scanAngle * .006);
+    point.setField(Dimension::Id::UserData, user);
+    point.setField(Dimension::Id::PointSourceId, pointSourceId);
+    point.setField(Dimension::Id::GpsTime, gpsTime);
 
     if (h.hasColor())
     {
         uint16_t red, green, blue;
         istream >> red >> green >> blue;
-        data.setField(Dimension::Id::Red, nextId, red);
-        data.setField(Dimension::Id::Green, nextId, green);
-        data.setField(Dimension::Id::Blue, nextId, blue);
+        point.setField(Dimension::Id::Red, red);
+        point.setField(Dimension::Id::Green, green);
+        point.setField(Dimension::Id::Blue, blue);
     }
 
     if (h.hasInfrared())
@@ -863,18 +758,16 @@ void LasReader::loadPointV14(PointView& data, char *buf, size_t bufsize)
         uint16_t nearInfraRed;
 
         istream >> nearInfraRed;
-        data.setField(Dimension::Id::Infrared, nextId, nearInfraRed);
+        point.setField(Dimension::Id::Infrared, nearInfraRed);
     }
 
     if (m_extraDims.size())
-        loadExtraDims(istream, data, nextId);
+        loadExtraDims(istream, point);
 }
 
 
-void LasReader::loadExtraDims(LeExtractor& istream, PointView& data,
-    PointId nextId)
+void LasReader::loadExtraDims(LeExtractor& istream, PointRef& point)
 {
-    Everything e;
     for (auto& dim : m_extraDims)
     {
         // Dimension type of None is undefined and unprocessed
@@ -884,17 +777,16 @@ void LasReader::loadExtraDims(LeExtractor& istream, PointView& data,
             continue;
         }
 
-        istream.get(dim.m_dimType.m_type, e);
-
+        Everything e = Utils::extractDim(istream, dim.m_dimType.m_type);
         if (dim.m_dimType.m_xform.nonstandard())
         {
             double d = Utils::toDouble(e, dim.m_dimType.m_type);
             d = d * dim.m_dimType.m_xform.m_scale +
                 dim.m_dimType.m_xform.m_offset;
-            data.setField(dim.m_dimType.m_id, nextId, d);
+            point.setField(dim.m_dimType.m_id, d);
         }
         else
-            data.setField(dim.m_dimType.m_id, dim.m_dimType.m_type, nextId, &e);
+            point.setField(dim.m_dimType.m_id, dim.m_dimType.m_type, &e);
     }
 }
 
@@ -905,8 +797,7 @@ void LasReader::done(PointTableRef)
     m_zipPoint.reset();
     m_unzipper.reset();
 #endif
-    destroyStream();
-    m_initialized = false;
+    m_streamIf.reset();
 }
 
 } // namespace pdal
diff --git a/io/las/LasReader.hpp b/io/las/LasReader.hpp
index 857ba7d..3dbf2fe 100644
--- a/io/las/LasReader.hpp
+++ b/io/las/LasReader.hpp
@@ -35,6 +35,7 @@
 #pragma once
 
 #include <pdal/pdal_export.hpp>
+#include <pdal/plugin.hpp>
 #include <pdal/Compression.hpp>
 #include <pdal/Reader.hpp>
 
@@ -56,57 +57,66 @@ class PointDimensions;
 
 class PDAL_DLL LasReader : public pdal::Reader
 {
+protected:
+    class LasStreamIf
+    {
+    protected:
+        LasStreamIf()
+        {}
+
+    public:
+        LasStreamIf(const std::string& filename)
+            { m_istream = FileUtils::openFile(filename); }
+
+        ~LasStreamIf()
+        {
+            if (m_istream)
+                FileUtils::closeFile(m_istream);
+        }
+
+        std::istream *m_istream;
+    };
+
     friend class NitfReader;
 public:
-    LasReader() : pdal::Reader(), m_index(0), m_istream(NULL),
-        m_initialized(false)
+    LasReader() : pdal::Reader(), m_index(0)
         {}
 
-    virtual ~LasReader()
-        {  destroyStream(); }
-
     static void * create();
     static int32_t destroy(void *);
     std::string getName() const;
     Options getDefaultOptions();
 
     const LasHeader& header() const
-        { return m_lasHeader; }
+        { return m_header; }
     point_count_t getNumPoints() const
-        { return m_lasHeader.pointCount(); }
+        { return m_header.pointCount(); }
 
 protected:
-    virtual std::istream *createStream()
+    virtual void createStream()
     {
-        m_istream = FileUtils::openFile(m_filename);
-        if (!m_istream)
+        if (m_streamIf)
+            std::cerr << "Attempt to create stream twice!\n";
+        m_streamIf.reset(new LasStreamIf(m_filename));
+        if (!m_streamIf->m_istream)
         {
             std::ostringstream oss;
             oss << "Unable to create open stream for '"
                 << m_filename <<"' with error '" << strerror(errno) <<"'";
             throw pdal_error(oss.str());
         }
-        return m_istream;
-    }
-    virtual void destroyStream()
-    {
-        if (m_istream && m_initialized)
-        {
-            FileUtils::closeFile(m_istream);
-            m_istream = NULL;
-            m_initialized = false;
-        }
     }
 
+    std::unique_ptr<LasStreamIf> m_streamIf;
+
 private:
     LasError m_error;
-    LasHeader m_lasHeader;
+    LasHeader m_header;
     std::unique_ptr<ZipPoint> m_zipPoint;
     std::unique_ptr<LASunzipper> m_unzipper;
     std::unique_ptr<LazPerfVlrDecompressor> m_decompressor;
+    std::vector<char> m_decompressorBuf;
     point_count_t m_index;
-    std::istream* m_istream;
-    VlrList m_vlrs;
     std::vector<ExtraDim> m_extraDims;
     std::string m_compression;
 
@@ -115,33 +125,27 @@ private:
         { initializeLocal(table, m_metadata); }
     virtual void initializeLocal(PointTableRef table, MetadataNode& m);
     virtual void addDimensions(PointLayoutPtr layout);
-    void fixupVlrs();
-    VariableLengthRecord *findVlr(const std::string& userId, uint16_t recordId);
-    void setSrsFromVlrs(MetadataNode& m);
-    void readExtraBytesVlr();
-    SpatialReference getSrsFromVlrs();
-    SpatialReference getSrsFromWktVlr();
-    SpatialReference getSrsFromGeotiffVlr();
-    void extractHeaderMetadata(MetadataNode& forward, MetadataNode& m);
-    void extractVlrMetadata(MetadataNode& forward, MetadataNode& m);
     virtual QuickInfo inspect();
     virtual void ready(PointTableRef table);
     virtual point_count_t read(PointViewPtr view, point_count_t count);
+    virtual bool processOne(PointRef& point);
     virtual void done(PointTableRef table);
     virtual bool eof()
         { return m_index >= getNumPoints(); }
-    void loadPoint(PointView& data, char *buf, size_t bufsize);
-    void loadPointV10(PointView& data, char *buf, size_t bufsize);
-    void loadPointV14(PointView& data, char *buf, size_t bufsize);
-    void loadExtraDims(LeExtractor& istream, PointView& data, PointId nextId);
-    point_count_t readFileBlock(
-            std::vector<char>& buf,
-            point_count_t maxPoints);
+
+    void setSrs(MetadataNode& m);
+    void readExtraBytesVlr();
+    void extractHeaderMetadata(MetadataNode& forward, MetadataNode& m);
+    void extractVlrMetadata(MetadataNode& forward, MetadataNode& m);
+    void loadPoint(PointRef& point, char *buf, size_t bufsize);
+    void loadPointV10(PointRef& point, char *buf, size_t bufsize);
+    void loadPointV14(PointRef& point, char *buf, size_t bufsize);
+    void loadExtraDims(LeExtractor& istream, PointRef& data);
+    point_count_t readFileBlock(std::vector<char>& buf,
+        point_count_t maxPoints);
 
     LasReader& operator=(const LasReader&); // not implemented
     LasReader(const LasReader&); // not implemented
-    bool m_initialized;
-    bool m_skipWktVLR;
 };
 
 } // namespace pdal
diff --git a/io/las/LasWriter.cpp b/io/las/LasWriter.cpp
index c1bb645..7a0b91f 100644
--- a/io/las/LasWriter.cpp
+++ b/io/las/LasWriter.cpp
@@ -34,8 +34,6 @@
 
 #include "LasWriter.hpp"
 
-#include <type_traits>
-#include <boost/uuid/uuid_generators.hpp>
 #include <iostream>
 
 #include <pdal/Compression.hpp>
@@ -45,8 +43,11 @@
 #include <pdal/util/Inserter.hpp>
 #include <pdal/util/OStream.hpp>
 #include <pdal/util/Utils.hpp>
+#include <pdal/pdal_macros.hpp>
 
+#ifdef PDAL_HAVE_LIBGEOTIFF
 #include "GeotiffSupport.hpp"
+#endif
 #include "ZipPoint.hpp"
 
 namespace pdal
@@ -157,6 +158,8 @@ void LasWriter::processOptions(const Options& options)
 
 void LasWriter::prepared(PointTableRef table)
 {
+    FlexWriter::validateFilename(table);
+
     PointLayoutPtr layout = table.layout();
 
     // If we've asked for all dimensions, add to extraDims all dimensions
@@ -318,13 +321,14 @@ void LasWriter::prepOutput(std::ostream *outStream, const SpatialReference& srs)
     // Use stage SRS if provided.
     m_srs = getSpatialReference().empty() ? srs : getSpatialReference();
 
+    handleHeaderForwards(m_forwardMetadata);
+
     // Filling the header here gives the VLR functions below easy access to
     // the version information and so on.
     fillHeader();
 
     // Spatial reference can potentially change for multiple output files.
     setVlrsFromSpatialRef();
-    handleHeaderForwards(m_forwardMetadata);
     setVlrsFromMetadata(m_forwardMetadata);
 
     m_summaryData.reset(new SummaryData());
@@ -355,6 +359,10 @@ void LasWriter::prepOutput(std::ostream *outStream, const SpatialReference& srs)
     if (m_compression == LasCompression::LasZip)
         openCompression();
 
+    // Set the point buffer size here in case we're using the streaming
+    // interface.
+    m_pointBuf.resize(m_lasHeader.pointLen());
+
     m_error.setLog(log());
 }
 
@@ -382,7 +390,7 @@ MetadataNode LasWriter::findVlrMetadata(MetadataNode node,
             return n.name() == "user_id" &&
                 n.value() == userId;
         };
-        return (boost::algorithm::istarts_with(n.name(), "vlr") &&
+        return (Utils::startsWith(n.name(), "vlr") &&
             !n.findChild(recPred).empty() &&
             !n.findChild(userPred).empty());
     };
@@ -494,7 +502,7 @@ bool LasWriter::addWktVlr()
     std::vector<uint8_t> wktBytes(wkt.begin(), wkt.end());
     // This tacks a NULL to the end of the data, which is required by the spec.
     wktBytes.resize(wktBytes.size() + 1, 0);
-    addVlr(TRANSFORM_USER_ID, WKT_RECORD_ID, "OGC Tranformation Record",
+    addVlr(TRANSFORM_USER_ID, WKT_RECORD_ID, "OGC Transformation Record",
         wktBytes);
 
     // The data in the vector gets moved to the VLR, so we have to recreate it.
@@ -701,6 +709,24 @@ void LasWriter::openCompression()
 }
 
 
+bool LasWriter::processOne(PointRef& point)
+{
+    //ABELL - Need to do something about auto offset.
+    LeInserter ostream(m_pointBuf.data(), m_pointBuf.size());
+
+    if (!fillPointBuf(point, ostream))
+        return false;
+
+    if (m_compression == LasCompression::LasZip)
+        writeLasZipBuf(m_pointBuf.data(), m_lasHeader.pointLen(), 1);
+    else if (m_compression == LasCompression::LazPerf)
+        writeLazPerfBuf(m_pointBuf.data(), m_lasHeader.pointLen(), 1);
+    else
+        m_ostream->write(m_pointBuf.data(), m_lasHeader.pointLen());
+    return true;
+}
+
+
 void LasWriter::writeView(const PointViewPtr view)
 {
     Utils::writeProgress(m_progressFd, "READYVIEW",
@@ -710,7 +736,7 @@ void LasWriter::writeView(const PointViewPtr view)
     size_t pointLen = m_lasHeader.pointLen();
 
     // Make a buffer of at most a meg.
-    std::vector<char> buf(std::min((size_t)1000000, pointLen * view->size()));
+    m_pointBuf.resize(std::min((size_t)1000000, pointLen * view->size()));
 
     const PointView& viewRef(*view.get());
 
@@ -718,16 +744,16 @@ void LasWriter::writeView(const PointViewPtr view)
     PointId idx = 0;
     while (remaining)
     {
-        point_count_t filled = fillWriteBuf(viewRef, idx, buf);
+        point_count_t filled = fillWriteBuf(viewRef, idx, m_pointBuf);
         idx += filled;
         remaining -= filled;
 
         if (m_compression == LasCompression::LasZip)
-            writeLasZipBuf(buf.data(), pointLen, filled);
+            writeLasZipBuf(m_pointBuf.data(), pointLen, filled);
         else if (m_compression == LasCompression::LazPerf)
-            writeLazPerfBuf(buf.data(), pointLen, filled);
+            writeLazPerfBuf(m_pointBuf.data(), pointLen, filled);
         else
-            m_ostream->write(buf.data(), filled * pointLen);
+            m_ostream->write(m_pointBuf.data(), filled * pointLen);
     }
     Utils::writeProgress(m_progressFd, "DONEVIEW",
         std::to_string(view->size()));
@@ -768,184 +794,151 @@ void LasWriter::writeLazPerfBuf(char *pos, size_t pointLen,
 }
 
 
-point_count_t LasWriter::fillWriteBuf(const PointView& view,
-    PointId startId, std::vector<char>& buf)
+bool LasWriter::fillPointBuf(PointRef& point, LeInserter& ostream)
 {
-    point_count_t blocksize = buf.size() / m_lasHeader.pointLen();
-    blocksize = std::min(blocksize, view.size() - startId);
-
     bool has14Format = m_lasHeader.has14Format();
     bool hasColor = m_lasHeader.hasColor();
     bool hasTime = m_lasHeader.hasTime();
     bool hasInfrared = m_lasHeader.hasInfrared();
-
-    PointId lastId = startId + blocksize;
     static const size_t maxReturnCount = m_lasHeader.maxReturnCount();
-    LeInserter ostream(buf.data(), buf.size());
-    for (PointId idx = startId; idx < lastId; idx++)
-    {
-        // we always write the base fields
-        using namespace Dimension;
 
-        uint8_t returnNumber(1);
-        uint8_t numberOfReturns(1);
-        if (view.hasDim(Id::ReturnNumber))
-        {
-            returnNumber = view.getFieldAs<uint8_t>(Id::ReturnNumber, idx);
-            if (returnNumber < 1 || returnNumber > maxReturnCount)
-                m_error.returnNumWarning(returnNumber);
-        }
-        if (view.hasDim(Id::NumberOfReturns))
-            numberOfReturns = view.getFieldAs<uint8_t>(
-                Id::NumberOfReturns, idx);
-        if (numberOfReturns == 0)
-            m_error.numReturnsWarning(0);
-        if (numberOfReturns > maxReturnCount)
+    // we always write the base fields
+    using namespace Dimension;
+
+    uint8_t returnNumber(1);
+    uint8_t numberOfReturns(1);
+    if (point.hasDim(Id::ReturnNumber))
+    {
+        returnNumber = point.getFieldAs<uint8_t>(Id::ReturnNumber);
+        if (returnNumber < 1 || returnNumber > maxReturnCount)
+            m_error.returnNumWarning(returnNumber);
+    }
+    if (point.hasDim(Id::NumberOfReturns))
+        numberOfReturns = point.getFieldAs<uint8_t>(Id::NumberOfReturns);
+    if (numberOfReturns == 0)
+        m_error.numReturnsWarning(0);
+    if (numberOfReturns > maxReturnCount)
+    {
+        if (m_discardHighReturnNumbers)
         {
-            if (m_discardHighReturnNumbers)
-            {
-                // If this return number is too high, pitch the point.
-                if (returnNumber > maxReturnCount)
-                    continue;
-                numberOfReturns = maxReturnCount;
-            }
-            else
-                m_error.numReturnsWarning(numberOfReturns);
+            // If this return number is too high, pitch the point.
+            if (returnNumber > maxReturnCount)
+                return false;
+            numberOfReturns = maxReturnCount;
         }
+        else
+            m_error.numReturnsWarning(numberOfReturns);
+    }
 
-        double xOrig = view.getFieldAs<double>(Id::X, idx);
-        double yOrig = view.getFieldAs<double>(Id::Y, idx);
-        double zOrig = view.getFieldAs<double>(Id::Z, idx);
+    double xOrig = point.getFieldAs<double>(Id::X);
+    double yOrig = point.getFieldAs<double>(Id::Y);
+    double zOrig = point.getFieldAs<double>(Id::Z);
 
-        double x = (xOrig - m_xXform.m_offset) / m_xXform.m_scale;
-        double y = (yOrig - m_yXform.m_offset) / m_yXform.m_scale;
-        double z = (zOrig - m_zXform.m_offset) / m_zXform.m_scale;
+    double x = (xOrig - m_xXform.m_offset) / m_xXform.m_scale;
+    double y = (yOrig - m_yXform.m_offset) / m_yXform.m_scale;
+    double z = (zOrig - m_zXform.m_offset) / m_zXform.m_scale;
 
-        auto converter = [this](double d, Dimension::Id::Enum dim) -> int32_t
-        {
-            int32_t i;
-
-            if (!Utils::numericCast(d, i))
-            {
-                std::ostringstream oss;
-                oss << "Unable to convert scaled value (" << d << ") to "
-                    "int32 for dimension '" << Dimension::name(dim) <<
-                    "' when writing LAS/LAZ file " << m_curFilename << ".";
-                throw pdal_error(oss.str());
-            }
-            return i;
-        };
+    auto converter = [this](double d, Dimension::Id::Enum dim) -> int32_t
+    {
+        int32_t i;
 
-        ostream << converter(x, Id::X);
-        ostream << converter(y, Id::Y);
-        ostream << converter(z, Id::Z);
+        if (!Utils::numericCast(d, i))
+        {
+            std::ostringstream oss;
+            oss << "Unable to convert scaled value (" << d << ") to "
+                "int32 for dimension '" << Dimension::name(dim) <<
+                "' when writing LAS/LAZ file " << m_curFilename << ".";
+            throw pdal_error(oss.str());
+        }
+        return i;
+    };
 
-        uint16_t intensity = 0;
-        if (view.hasDim(Id::Intensity))
-            intensity = view.getFieldAs<uint16_t>(Id::Intensity, idx);
-        ostream << intensity;
+    ostream << converter(x, Id::X);
+    ostream << converter(y, Id::Y);
+    ostream << converter(z, Id::Z);
 
-        uint8_t scanChannel(0);
-        if (view.hasDim(Id::ScanChannel))
-            scanChannel = view.getFieldAs<uint8_t>(Id::ScanChannel, idx);
+    ostream << point.getFieldAs<uint16_t>(Id::Intensity);
 
-        uint8_t scanDirectionFlag(0);
-        if (view.hasDim(Id::ScanDirectionFlag))
-            scanDirectionFlag = view.getFieldAs<uint8_t>(
-                Id::ScanDirectionFlag, idx);
+    uint8_t scanChannel = point.getFieldAs<uint8_t>(Id::ScanChannel);
+    uint8_t scanDirectionFlag =
+        point.getFieldAs<uint8_t>(Id::ScanDirectionFlag);
+    uint8_t edgeOfFlightLine =
+        point.getFieldAs<uint8_t>(Id::EdgeOfFlightLine);
 
-        uint8_t edgeOfFlightLine(0);
-        if (view.hasDim(Id::EdgeOfFlightLine))
-            edgeOfFlightLine = view.getFieldAs<uint8_t>(
-                Id::EdgeOfFlightLine, idx);
+    if (has14Format)
+    {
+        uint8_t bits = returnNumber | (numberOfReturns << 4);
+        ostream << bits;
+
+        uint8_t classFlags = point.getFieldAs<uint8_t>(Id::ClassFlags);
+        bits = (classFlags & 0x0F) |
+            ((scanChannel & 0x03) << 4) |
+            ((scanDirectionFlag & 0x01) << 6) |
+            ((edgeOfFlightLine & 0x01) << 7);
+        ostream << bits;
+    }
+    else
+    {
+        uint8_t bits = returnNumber | (numberOfReturns << 3) |
+            (scanDirectionFlag << 6) | (edgeOfFlightLine << 7);
+        ostream << bits;
+    }
 
-        if (has14Format)
-        {
-            uint8_t bits = returnNumber | (numberOfReturns << 4);
-            ostream << bits;
-            bits = (scanChannel << 4) | (scanDirectionFlag << 6) |
-                (edgeOfFlightLine << 7);
-            ostream << bits;
-        }
-        else
-        {
-            uint8_t bits = returnNumber | (numberOfReturns << 3) |
-                (scanDirectionFlag << 6) | (edgeOfFlightLine << 7);
-            ostream << bits;
-        }
+    ostream << point.getFieldAs<uint8_t>(Id::Classification);
 
-        uint8_t classification = 0;
-        if (view.hasDim(Id::Classification))
-            classification = view.getFieldAs<uint8_t>(Id::Classification, idx);
-        ostream << classification;
+    uint8_t userData = point.getFieldAs<uint8_t>(Id::UserData);
+    if (has14Format)
+    {
+         int16_t scanAngleRank =
+             point.getFieldAs<float>(Id::ScanAngleRank) / .006;
+         ostream << userData << scanAngleRank;
+    }
+    else
+    {
+        int8_t scanAngleRank = point.getFieldAs<int8_t>(Id::ScanAngleRank);
+        ostream << scanAngleRank << userData;
+    }
 
-        uint8_t userData = 0;
-        if (view.hasDim(Id::UserData))
-            userData = view.getFieldAs<uint8_t>(Id::UserData, idx);
-        if (has14Format)
-        {
-            int16_t scanAngleRank = 0;
-            if (view.hasDim(Id::ScanAngleRank))
-                scanAngleRank =
-                    view.getFieldAs<float>(Id::ScanAngleRank, idx) / .006;
-            ostream << userData << scanAngleRank;
-        }
-        else
-        {
-            int8_t scanAngleRank = 0;
-            if (view.hasDim(Id::ScanAngleRank))
-                scanAngleRank = view.getFieldAs<int8_t>(Id::ScanAngleRank, idx);
+    ostream << point.getFieldAs<uint16_t>(Id::PointSourceId);
 
-            ostream << scanAngleRank << userData;
-        }
+    if (hasTime)
+        ostream << point.getFieldAs<double>(Id::GpsTime);
 
-        uint16_t pointSourceId = 0;
-        if (view.hasDim(Id::PointSourceId))
-            pointSourceId = view.getFieldAs<uint16_t>(Id::PointSourceId, idx);
-        ostream << pointSourceId;
+    if (hasColor)
+    {
+        ostream << point.getFieldAs<uint16_t>(Id::Red);
+        ostream << point.getFieldAs<uint16_t>(Id::Green);
+        ostream << point.getFieldAs<uint16_t>(Id::Blue);
+    }
 
-        if (hasTime)
-        {
-            double t = 0.0;
-            if (view.hasDim(Id::GpsTime))
-                t = view.getFieldAs<double>(Id::GpsTime, idx);
-            ostream << t;
-        }
+    if (hasInfrared)
+        ostream << point.getFieldAs<uint16_t>(Id::Infrared);
 
-        if (hasColor)
-        {
-            uint16_t red = 0;
-            uint16_t green = 0;
-            uint16_t blue = 0;
-            if (view.hasDim(Id::Red))
-                red = view.getFieldAs<uint16_t>(Id::Red, idx);
-            if (view.hasDim(Id::Green))
-                green = view.getFieldAs<uint16_t>(Id::Green, idx);
-            if (view.hasDim(Id::Blue))
-                blue = view.getFieldAs<uint16_t>(Id::Blue, idx);
-
-            ostream << red << green << blue;
-        }
+    Everything e;
+    for (auto& dim : m_extraDims)
+    {
+        point.getField((char *)&e, dim.m_dimType.m_id, dim.m_dimType.m_type);
+        Utils::insertDim(ostream, dim.m_dimType.m_type, e);
+    }
 
-        if (hasInfrared)
-        {
-            uint16_t nearInfraRed = 0;
+    m_summaryData->addPoint(xOrig, yOrig, zOrig, returnNumber);
+    return true;
+}
 
-            if (view.hasDim(Id::Infrared))
-                nearInfraRed = view.getFieldAs<uint16_t>(Id::Infrared, idx);
-            ostream << nearInfraRed;
-        }
 
-        Everything e;
-        for (auto& dim : m_extraDims)
-        {
-            view.getField((char *)&e, dim.m_dimType.m_id,
-                dim.m_dimType.m_type, idx);
-            ostream.put(dim.m_dimType.m_type, e);
-        }
+point_count_t LasWriter::fillWriteBuf(const PointView& view,
+    PointId startId, std::vector<char>& buf)
+{
+    point_count_t blocksize = buf.size() / m_lasHeader.pointLen();
+    blocksize = std::min(blocksize, view.size() - startId);
+    PointId lastId = startId + blocksize;
 
-        using namespace Dimension;
-        m_summaryData->addPoint(xOrig, yOrig, zOrig, returnNumber);
+    LeInserter ostream(buf.data(), buf.size());
+    PointRef point = (const_cast<PointView&>(view)).point(0);
+    for (PointId idx = startId; idx < lastId; idx++)
+    {
+        point.setPointId(idx);
+        fillPointBuf(point, ostream);
     }
     return blocksize;
 }
diff --git a/io/las/LasWriter.hpp b/io/las/LasWriter.hpp
index 83981d5..0d7edf0 100644
--- a/io/las/LasWriter.hpp
+++ b/io/las/LasWriter.hpp
@@ -36,6 +36,7 @@
 
 #include <pdal/Compression.hpp>
 #include <pdal/FlexWriter.hpp>
+#include <pdal/plugin.hpp>
 
 #include "HeaderVal.hpp"
 #include "LasError.hpp"
@@ -49,6 +50,7 @@ extern "C" PF_ExitFunc LasWriter_InitPlugin();
 
 namespace pdal
 {
+class LeInserter;
 class LasTester;
 class NitfWriter;
 class GeotiffSupport;
@@ -99,6 +101,7 @@ private:
     std::set<std::string> m_forwards;
     bool m_forwardVlrs;
     LasCompression::Enum m_compression;
+    std::vector<char> m_pointBuf;
 
     NumHeaderVal<uint8_t, 1, 1> m_majorVersion;
     NumHeaderVal<uint8_t, 1, 4> m_minorVersion;
@@ -106,7 +109,7 @@ private:
     // MSVC doesn't see numeric_limits::max() as constexpr do doesn't allow
     // it as defaults for templates.  Remove when possible.
     NumHeaderVal<uint16_t, 0, 65535> m_filesourceId;
-    NumHeaderVal<uint16_t, 0, 15> m_globalEncoding;
+    NumHeaderVal<uint16_t, 0, 31> m_globalEncoding;
     UuidHeaderVal m_projectId;
     StringHeaderVal<32> m_systemId;
     StringHeaderVal<32> m_softwareId;
@@ -128,6 +131,7 @@ private:
     virtual void readyFile(const std::string& filename,
         const SpatialReference& srs);
     virtual void writeView(const PointViewPtr view);
+    virtual bool processOne(PointRef& point);
     virtual void doneFile();
 
     void fillForwardList(const Options& options);
@@ -137,6 +141,7 @@ private:
         const MetadataNode& base);
     void handleHeaderForwards(MetadataNode& forward);
     void fillHeader();
+    bool fillPointBuf(PointRef& point, LeInserter& ostream);
     point_count_t fillWriteBuf(const PointView& view, PointId startId,
         std::vector<char>& buf);
     void writeLasZipBuf(char *data, size_t pointLen, point_count_t numPts);
diff --git a/io/las/ZipPoint.cpp b/io/las/ZipPoint.cpp
index 247328d..f843d1b 100644
--- a/io/las/ZipPoint.cpp
+++ b/io/las/ZipPoint.cpp
@@ -49,7 +49,8 @@ namespace pdal
 ZipPoint::ZipPoint(VariableLengthRecord *vlr) :
     m_zip(new LASzip()), m_lz_point(NULL), m_lz_point_size(0)
 {
-    if (!vlr || !m_zip->unpack((unsigned char *)vlr->data(), vlr->dataLen()))
+    if (!vlr || !m_zip->unpack((unsigned char *)vlr->data(),
+        (int)vlr->dataLen()))
     {
         std::ostringstream oss;
         const char* err = m_zip->get_error();
diff --git a/io/null/NullWriter.cpp b/io/null/NullWriter.cpp
index 327b918..234b892 100644
--- a/io/null/NullWriter.cpp
+++ b/io/null/NullWriter.cpp
@@ -1,4 +1,5 @@
 #include "NullWriter.hpp"
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/io/null/NullWriter.hpp b/io/null/NullWriter.hpp
index 7ba0111..b8779f6 100644
--- a/io/null/NullWriter.hpp
+++ b/io/null/NullWriter.hpp
@@ -35,7 +35,7 @@
 #pragma once
 
 #include <pdal/pdal_export.hpp>
-
+#include <pdal/plugin.hpp>
 #include <pdal/Writer.hpp>
 
 extern "C" int32_t NullWriter_ExitFunc();
diff --git a/io/optech/OptechReader.cpp b/io/optech/OptechReader.cpp
index 0543680..326e596 100644
--- a/io/optech/OptechReader.cpp
+++ b/io/optech/OptechReader.cpp
@@ -41,6 +41,7 @@
 
 #include <pdal/SpatialReference.hpp>
 #include <pdal/StageFactory.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/io/optech/OptechReader.hpp b/io/optech/OptechReader.hpp
index ec98ae9..38399c4 100644
--- a/io/optech/OptechReader.hpp
+++ b/io/optech/OptechReader.hpp
@@ -42,6 +42,7 @@
 #include <pdal/util/Georeference.hpp>
 #include <pdal/util/IStream.hpp>
 #include <pdal/pdal_export.hpp>
+#include <pdal/plugin.hpp>
 
 #include "OptechCommon.hpp"
 
diff --git a/io/ply/PlyReader.cpp b/io/ply/PlyReader.cpp
index 4022c02..e6bfbfe 100644
--- a/io/ply/PlyReader.cpp
+++ b/io/ply/PlyReader.cpp
@@ -37,6 +37,7 @@
 #include <sstream>
 
 #include <pdal/PointView.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/io/ply/PlyReader.hpp b/io/ply/PlyReader.hpp
index 32e6452..8c4b576 100644
--- a/io/ply/PlyReader.hpp
+++ b/io/ply/PlyReader.hpp
@@ -41,7 +41,7 @@
 #include <pdal/Dimension.hpp>
 #include <pdal/Reader.hpp>
 #include <pdal/StageFactory.hpp>
-
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t PlyReader_ExitFunc();
 extern "C" PF_ExitFunc PlyReader_InitPlugin();
diff --git a/io/ply/PlyWriter.cpp b/io/ply/PlyWriter.cpp
index 9f63438..3232965 100644
--- a/io/ply/PlyWriter.cpp
+++ b/io/ply/PlyWriter.cpp
@@ -36,6 +36,7 @@
 
 #include <sstream>
 
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/io/ply/PlyWriter.hpp b/io/ply/PlyWriter.hpp
index 4881366..6fbd384 100644
--- a/io/ply/PlyWriter.hpp
+++ b/io/ply/PlyWriter.hpp
@@ -36,7 +36,7 @@
 
 #include <pdal/PointView.hpp>
 #include <pdal/Writer.hpp>
-
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t PlyWriter_ExitFunc();
 extern "C" PF_ExitFunc PlyWriter_InitPlugin();
diff --git a/io/qfit/QfitReader.cpp b/io/qfit/QfitReader.cpp
index 0dd8777..22277de 100644
--- a/io/qfit/QfitReader.cpp
+++ b/io/qfit/QfitReader.cpp
@@ -169,6 +169,7 @@ Word #       Content
 #include <pdal/PointView.hpp>
 #include <pdal/util/Extractor.hpp>
 #include <pdal/util/portable_endian.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <algorithm>
 #include <map>
diff --git a/io/qfit/QfitReader.hpp b/io/qfit/QfitReader.hpp
index d895874..8b901f7 100644
--- a/io/qfit/QfitReader.hpp
+++ b/io/qfit/QfitReader.hpp
@@ -40,6 +40,7 @@
 #include <pdal/Reader.hpp>
 #include <pdal/Options.hpp>
 #include <pdal/util/IStream.hpp>
+#include <pdal/plugin.hpp>
 
 
 extern "C" int32_t QfitReader_ExitFunc();
diff --git a/io/sbet/SbetReader.cpp b/io/sbet/SbetReader.cpp
index 1a005c0..fe6dacd 100644
--- a/io/sbet/SbetReader.cpp
+++ b/io/sbet/SbetReader.cpp
@@ -32,8 +32,12 @@
 * OF SUCH DAMAGE.
 ****************************************************************************/
 
+#include <pdal/PointRef.hpp>
+
 #include "SbetReader.hpp"
 
+#include <pdal/pdal_macros.hpp>
+
 namespace pdal
 {
 
@@ -68,6 +72,21 @@ void SbetReader::ready(PointTableRef)
     m_numPts = fileSize / pointSize;
     m_index = 0;
     m_stream.reset(new ILeStream(m_filename));
+    m_dims = fileDimensions();
+    seek(m_index);
+}
+
+
+bool SbetReader::processOne(PointRef& point)
+{
+    for (auto di = m_dims.begin(); di != m_dims.end(); ++di)
+    {
+        double d;
+        *m_stream >> d;
+        Dimension::Id::Enum dim = *di;
+        point.setField(dim, d);
+    }
+    return (m_stream->good());
 }
 
 
@@ -77,17 +96,10 @@ point_count_t SbetReader::read(PointViewPtr view, point_count_t count)
     PointId idx = m_index;
     point_count_t numRead = 0;
     seek(idx);
-    Dimension::IdList dims = getDefaultDimensions();
     while (numRead < count && idx < m_numPts)
     {
-        for (auto di = dims.begin(); di != dims.end(); ++di)
-        {
-            double d;
-            *m_stream >> d;
-            Dimension::Id::Enum dim = *di;
-            view->setField(dim, nextId, d);
-        }
-
+        PointRef point = view->point(nextId);
+        processOne(point);
         if (m_cb)
             m_cb(*view, nextId);
 
diff --git a/io/sbet/SbetReader.hpp b/io/sbet/SbetReader.hpp
index 656c37e..ee721e2 100644
--- a/io/sbet/SbetReader.hpp
+++ b/io/sbet/SbetReader.hpp
@@ -37,6 +37,7 @@
 #include <pdal/PointView.hpp>
 #include <pdal/Reader.hpp>
 #include <pdal/util/IStream.hpp>
+#include <pdal/plugin.hpp>
 
 #include "SbetCommon.hpp"
 
@@ -65,7 +66,9 @@ private:
     // Number of points in the file.
     point_count_t m_numPts;
     point_count_t m_index;
+    Dimension::IdList m_dims;
 
+    virtual bool processOne(PointRef& point);
     virtual void addDimensions(PointLayoutPtr layout);
     virtual void ready(PointTableRef table);
     virtual point_count_t read(PointViewPtr view, point_count_t count);
diff --git a/io/sbet/SbetWriter.cpp b/io/sbet/SbetWriter.cpp
index 8af0a87..e5d2663 100644
--- a/io/sbet/SbetWriter.cpp
+++ b/io/sbet/SbetWriter.cpp
@@ -35,6 +35,7 @@
 #include "SbetWriter.hpp"
 
 #include <pdal/PointView.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -62,9 +63,6 @@ void SbetWriter::ready(PointTableRef)
 
 void SbetWriter::write(const PointViewPtr view)
 {
-    m_callback->setTotal(view->size());
-    m_callback->invoke(0);
-
     Dimension::IdList dims = getDefaultDimensions();
     for (PointId idx = 0; idx < view->size(); ++idx)
     {
@@ -75,10 +73,7 @@ void SbetWriter::write(const PointViewPtr view)
             *m_stream << (view->hasDim(dim) ?
                 view->getFieldAs<double>(dim, idx) : 0.0);
         }
-        if (idx % 100 == 0)
-            m_callback->invoke(idx + 1);
     }
-    m_callback->invoke(view->size());
 }
 
 } // namespace pdal
diff --git a/io/sbet/SbetWriter.hpp b/io/sbet/SbetWriter.hpp
index 75b1443..c97b727 100644
--- a/io/sbet/SbetWriter.hpp
+++ b/io/sbet/SbetWriter.hpp
@@ -34,6 +34,7 @@
 
 #pragma once
 
+#include <pdal/plugin.hpp>
 #include <pdal/util/OStream.hpp>
 #include <pdal/Writer.hpp>
 
diff --git a/io/terrasolid/TerrasolidReader.cpp b/io/terrasolid/TerrasolidReader.cpp
index 87a5dd4..8264d97 100644
--- a/io/terrasolid/TerrasolidReader.cpp
+++ b/io/terrasolid/TerrasolidReader.cpp
@@ -36,6 +36,7 @@
 
 #include <pdal/PointView.hpp>
 #include <pdal/util/Extractor.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <map>
 
diff --git a/io/terrasolid/TerrasolidReader.hpp b/io/terrasolid/TerrasolidReader.hpp
index f4b2add..853e1aa 100644
--- a/io/terrasolid/TerrasolidReader.hpp
+++ b/io/terrasolid/TerrasolidReader.hpp
@@ -37,6 +37,7 @@
 #include <pdal/Options.hpp>
 #include <pdal/Reader.hpp>
 #include <pdal/util/IStream.hpp>
+#include <pdal/plugin.hpp>
 
 #include <memory>
 #include <vector>
diff --git a/io/text/CMakeLists.txt b/io/text/CMakeLists.txt
index 61f6b1b..6f7e112 100644
--- a/io/text/CMakeLists.txt
+++ b/io/text/CMakeLists.txt
@@ -2,14 +2,13 @@
 # Text driver CMake configuration
 #
 
-#
-# Text Writer
-#
 set(srcs
+    TextReader.cpp
     TextWriter.cpp
 )
 
 set(incs
+    TextReader.hpp
     TextWriter.hpp
 )
 
diff --git a/io/text/TextReader.cpp b/io/text/TextReader.cpp
new file mode 100644
index 0000000..4257f3c
--- /dev/null
+++ b/io/text/TextReader.cpp
@@ -0,0 +1,176 @@
+/******************************************************************************
+* Copyright (c) 2016, Hobu Inc., info at hobu.co
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/util/Algorithm.hpp>
+#include <pdal/util/FileUtils.hpp>
+
+#include "TextReader.hpp"
+
+#include <pdal/pdal_macros.hpp>
+
+namespace pdal
+{
+
+static PluginInfo const s_info = PluginInfo(
+    "readers.text",
+    "Text Reader",
+    "http://pdal.io/stages/readers.text.html" );
+
+CREATE_STATIC_PLUGIN(1, 0, TextReader, Reader, s_info)
+
+std::string TextReader::getName() const { return s_info.name; }
+
+void TextReader::initialize(PointTableRef table)
+{
+    m_istream = FileUtils::openFile(m_filename);
+    if (!m_istream)
+    {
+        std::ostringstream oss;
+        oss << getName() << ": Unable to open text file '" <<
+            m_filename << "'.";
+        throw pdal_error(oss.str());
+    }
+
+    std::string buf;
+    std::getline(*m_istream, buf);
+
+    auto isspecial = [](char c)
+        { return (!std::isalnum(c) && c != ' '); };
+
+    // Scan string for some character not a number, space or letter.
+    for (size_t i = 0; i < buf.size(); ++i)
+        if (isspecial(buf[i]))
+        {
+            m_separator = buf[i];
+            break;
+        }
+
+    if (m_separator != ' ')
+    {
+        Utils::remove(buf, ' ');
+        m_dimNames = Utils::split(buf, m_separator);
+    }
+    else
+        m_dimNames = Utils::split2(buf, m_separator);
+    FileUtils::closeFile(m_istream);
+}
+
+
+void TextReader::addDimensions(PointLayoutPtr layout)
+{
+    for (auto name : m_dimNames)
+    {
+        Dimension::Id::Enum id = layout->registerOrAssignDim(name,
+            Dimension::Type::Double);
+        m_dims.push_back(id);
+    }
+}
+
+
+void TextReader::ready(PointTableRef table)
+{
+    m_istream = FileUtils::openFile(m_filename);
+    if (!m_istream)
+    {
+        std::ostringstream oss;
+        oss << getName() << ": Unable to open text file '" <<
+            m_filename << "'.";
+        throw pdal_error(oss.str());
+    }
+
+    // Skip header line.
+    std::string buf;
+    std::getline(*m_istream, buf);
+}
+
+
+point_count_t TextReader::read(PointViewPtr view, point_count_t numPts)
+{
+    PointId idx = view->size();
+
+    point_count_t cnt = 0;
+    size_t line = 1;
+    while (m_istream->good() && cnt < numPts)
+    {
+        std::string buf;
+        StringList fields;
+
+        std::getline(*m_istream, buf);
+        line++;
+        if (buf.empty())
+            continue;
+        if (m_separator != ' ')
+        {
+            Utils::remove(buf, ' ');
+            fields = Utils::split(buf, m_separator);
+        }
+        else
+            fields = Utils::split2(buf, m_separator);
+        if (fields.size() != m_dims.size())
+        {
+            log()->get(LogLevel::Error) << "Line " << line <<
+               " in '" << m_filename << "' contains " << fields.size() <<
+               " fields when " << m_dims.size() << " were expected.  "
+               "Ignoring." << std::endl;
+            continue;
+        }
+
+        double d;
+        for (size_t i = 0; i < fields.size(); ++i)
+        {
+            if (!Utils::fromString(fields[i], d))
+            {
+                log()->get(LogLevel::Error) << "Can't convert "
+                    "field '" << fields[i] << "' to numeric value on line " <<
+                    line << " in '" << m_filename << "'.  Setting to 0." <<
+                    std::endl;
+                d = 0;
+            }
+            view->setField(m_dims[i], idx, d);
+        }
+        cnt++;
+        idx++;
+    }
+    return cnt;
+}
+
+
+void TextReader::done(PointTableRef table)
+{
+    FileUtils::closeFile(m_istream);
+}
+
+
+} // namespace pdal
+
diff --git a/io/text/TextReader.hpp b/io/text/TextReader.hpp
new file mode 100644
index 0000000..5b18cfe
--- /dev/null
+++ b/io/text/TextReader.hpp
@@ -0,0 +1,104 @@
+/******************************************************************************
+* Copyright (c) 2016, Hobu Inc. (info at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#pragma once
+
+#include <istream>
+
+#include <pdal/Reader.hpp>
+#include <pdal/plugin.hpp>
+
+extern "C" int32_t TextReader_ExitFunc();
+extern "C" PF_ExitFunc TextReader_InitPlugin();
+
+namespace pdal
+{
+
+class PDAL_DLL TextReader : public Reader
+{
+public:
+    static void * create();
+    static int32_t destroy(void *);
+    std::string getName() const;
+
+    TextReader() : m_separator(' '), m_istream(NULL)
+    {}
+
+private:
+    /**
+      Initialize the reader by opening the file and reading the header line.
+      Closes the file on completion.
+
+      \param table  Point table being initialized.
+    */
+    virtual void initialize(PointTableRef table);
+
+    /**
+      Add dimensions found in the header line to the layout.
+
+      \param layout  Layout to which the dimenions are added.
+    */
+    virtual void addDimensions(PointLayoutPtr layout);
+
+    /**
+      Reopen the file in preparation for reading.
+
+      \param table  Point table to make ready.
+    */
+    virtual void ready(PointTableRef table);
+
+    /**
+      Read up to numPts points into the \ref view.
+
+      \param view  PointView in which to insert point data.
+      \param numPts  Maximum number of points to read.
+      \return  Number of points read.
+    */
+    virtual point_count_t read(PointViewPtr view, point_count_t numPts);
+
+    /**
+      Close input file.
+
+      \param table  PointTable we're done with.
+    */
+    virtual void done(PointTableRef table);
+
+private:
+    char m_separator;
+    std::istream *m_istream;
+    StringList m_dimNames;
+    Dimension::IdList m_dims;
+};
+
+} // namespace pdal
diff --git a/io/text/TextWriter.cpp b/io/text/TextWriter.cpp
index 4e7fec6..dfb8bd6 100644
--- a/io/text/TextWriter.cpp
+++ b/io/text/TextWriter.cpp
@@ -37,13 +37,12 @@
 #include <pdal/pdal_export.hpp>
 #include <pdal/PointView.hpp>
 #include <pdal/util/Algorithm.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <algorithm>
 #include <iostream>
 #include <map>
 
-#include <boost/tokenizer.hpp>
-
 namespace pdal
 {
 
@@ -118,23 +117,22 @@ void TextWriter::ready(PointTableRef table)
     m_stream->precision(m_precision);
     *m_stream << std::fixed;
 
-    typedef boost::tokenizer<boost::char_separator<char>> tokenizer;
-
     // Find the dimensions listed and put them on the id list.
-    boost::char_separator<char> separator(",");
-    boost::erase_all(m_dimOrder, " "); // Wipe off spaces
-    tokenizer sdims(m_dimOrder, separator);
-    for (tokenizer::iterator ti = sdims.begin(); ti != sdims.end(); ++ti)
+    StringList dimNames = Utils::split2(m_dimOrder, ',');
+    for (std::string dim : dimNames)
     {
-        Dimension::Id::Enum d = table.layout()->findDim(*ti);
+        Utils::trim(dim);
+        Dimension::Id::Enum d = table.layout()->findDim(dim);
         if (d == Dimension::Id::Unknown)
         {
             std::ostringstream oss;
-            oss << "Dimension not found with name '" << *ti <<"'";
+            oss << getName() << ": Dimension not found with name '" <<
+                dim << "'.";
             throw pdal_error(oss.str());
         }
         m_dims.push_back(d);
     }
+
     // Add the rest of the dimensions to the list if we're doing that.
     // Yes, this isn't efficient when, but it's simple.
     if (m_dimOrder.empty() || m_writeAllDims)
diff --git a/io/text/TextWriter.hpp b/io/text/TextWriter.hpp
index 00ca9b9..5bedd44 100644
--- a/io/text/TextWriter.hpp
+++ b/io/text/TextWriter.hpp
@@ -38,6 +38,7 @@
 #include <pdal/StageFactory.hpp>
 #include <pdal/util/FileUtils.hpp>
 #include <pdal/Writer.hpp>
+#include <pdal/plugin.hpp>
 
 #include <memory>
 #include <vector>
diff --git a/io/tindex/TIndexReader.cpp b/io/tindex/TIndexReader.cpp
index b67d0a6..850b409 100644
--- a/io/tindex/TIndexReader.cpp
+++ b/io/tindex/TIndexReader.cpp
@@ -34,8 +34,7 @@
 
 #include "TIndexReader.hpp"
 #include <pdal/GDALUtils.hpp>
-
-
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -71,6 +70,7 @@ Options TIndexReader::getDefaultOptions()
     return options;
 }
 
+
 TIndexReader::FieldIndexes TIndexReader::getFields()
 {
     FieldIndexes indexes;
@@ -104,7 +104,6 @@ TIndexReader::FieldIndexes TIndexReader::getFields()
 }
 
 
-
 std::vector<TIndexReader::FileInfo> TIndexReader::getFiles()
 {
     std::vector<TIndexReader::FileInfo> output;
@@ -130,32 +129,32 @@ std::vector<TIndexReader::FileInfo> TIndexReader::getFiles()
 
     return output;
 }
-void TIndexReader::initialize()
-{
-    GlobalEnvironment::get().initializeGDAL(log(), isDebug());
-}
+
 
 void TIndexReader::processOptions(const Options& options)
 {
     m_layerName = options.getValueOrDefault<std::string>("lyr_name", "pdal");
-    m_srsColumnName = options.getValueOrDefault<std::string>("srs_column", "srs");
-    m_tileIndexColumnName = options.getValueOrDefault<std::string>("tindex_name", "location");
+    m_srsColumnName = options.getValueOrDefault<std::string>("srs_column",
+        "srs");
+    m_tileIndexColumnName =
+        options.getValueOrDefault<std::string>("tindex_name", "location");
     m_sql = options.getValueOrDefault<std::string>("sql", "");
 
-    m_wkt = options.getValueOrDefault<std::string>("wkt", "");
     BOX2D boundary = options.getValueOrDefault<BOX2D>("boundary", BOX2D());
-    if (!boundary.empty())
-    {
-        m_wkt = boundary.toWKT();
-    }
-    m_tgtSrsString = options.getValueOrDefault<std::string>("t_srs", "EPSG:4326");
-    m_filterSRS = options.getValueOrDefault<std::string>("filter_srs", "");
-    m_attributeFilter = options.getValueOrDefault<std::string>("where", "");
+    m_wkt = boundary.toWKT();
+    if (m_wkt.empty())
+        m_wkt = options.getValueOrDefault<std::string>("wkt");
+
+    m_tgtSrsString = options.getValueOrDefault<std::string>("t_srs",
+        "EPSG:4326");
+    m_filterSRS = options.getValueOrDefault<std::string>("filter_srs");
+    m_attributeFilter = options.getValueOrDefault<std::string>("where");
     m_dialect = options.getValueOrDefault<std::string>("dialect", "OGRSQL");
 
     m_out_ref.reset(new gdal::SpatialRef());
 }
 
+
 void TIndexReader::addDimensions(PointLayoutPtr layout)
 {
     using namespace pdal::Dimension::Type;
@@ -164,19 +163,19 @@ void TIndexReader::addDimensions(PointLayoutPtr layout)
     layout->registerDim(pdal::Dimension::Id::Z);
 }
 
+
 pdal::Dimension::IdList TIndexReader::getDefaultDimensions()
 {
-    using namespace pdal::Dimension;
-    Dimension::IdList ids;
-
-    return ids;
+    return Dimension::IdList();
 }
 
-void TIndexReader::ready(PointTableRef table)
+
+void TIndexReader::initialize()
 {
-    log()->get(LogLevel::Debug) << "Opening file "
-                                << m_filename <<std::endl;
+    log()->get(LogLevel::Debug) << "Opening file " << m_filename <<
+        std::endl;
 
+    gdal::registerDrivers();
     m_dataset = OGROpen(m_filename.c_str(), FALSE, NULL);
     if (!m_dataset)
     {
@@ -188,21 +187,18 @@ void TIndexReader::ready(PointTableRef table)
     OGRGeometryH geometry(0);
     if (m_sql.size())
     {
-        m_layer = OGR_DS_ExecuteSQL(m_dataset,
-                                    m_sql.c_str(),
-                                    geometry,
-                                    m_dialect.c_str());
-    } else
+        m_layer = OGR_DS_ExecuteSQL(m_dataset, m_sql.c_str(), geometry,
+            m_dialect.c_str());
+    }
+    else
     {
-        m_layer = OGR_DS_GetLayerByName(m_dataset,
-                                        m_layerName.c_str());
+        m_layer = OGR_DS_GetLayerByName(m_dataset, m_layerName.c_str());
     }
     if (!m_layer)
     {
         std::stringstream oss;
-        oss << "unable to open layer '"
-            << m_layerName << "' from OGR datasource '"
-            << m_filename << "'";
+        oss << getName() << ": Unable to open layer '" << m_layerName <<
+            "' from OGR datasource '" << m_filename << "'";
         throw pdal::pdal_error(oss.str());
     }
 
@@ -215,8 +211,7 @@ void TIndexReader::ready(PointTableRef table)
     else
         m_out_ref.reset(new gdal::SpatialRef(m_out_ref->wkt()));
 
-    SpatialReference pdal_ref(m_out_ref->wkt());
-    setSpatialReference(pdal_ref);
+    setSpatialReference(SpatialReference(m_out_ref->wkt()));
 
     std::unique_ptr<gdal::Geometry> wkt_g;
 
@@ -241,31 +236,30 @@ void TIndexReader::ready(PointTableRef table)
 
     if (m_attributeFilter.size())
     {
-        OGRErr err = OGR_L_SetAttributeFilter(m_layer, m_attributeFilter.c_str());
+        OGRErr err = OGR_L_SetAttributeFilter(m_layer,
+            m_attributeFilter.c_str());
         if (err != OGRERR_NONE)
         {
             std::stringstream oss;
-            oss << "unable to set attribute filter '"
+            oss << getName() << ": Unable to set attribute filter '"
                 << m_attributeFilter << "' for OGR datasource '"
                 << m_filename << "'";
             throw pdal::pdal_error(oss.str());
         }
     }
 
-    m_files = getFiles();
-
     Options cropOptions;
     if (m_wkt.size())
         cropOptions.add("polygon", m_wkt);
 
-    for (auto f : m_files)
+    for (auto f : getFiles())
     {
         log()->get(LogLevel::Debug) << "Adding file "
                                     << f.m_filename
                                     << " to merge filter" <<std::endl;
-        Stage *premerge = NULL;
+
         std::string driver = m_factory.inferReaderDriver(f.m_filename);
-        Stage *reader = m_factory.createStage(driver, true);
+        Stage *reader = m_factory.createStage(driver);
         if (!reader)
         {
             std::stringstream out;
@@ -276,12 +270,12 @@ void TIndexReader::ready(PointTableRef table)
         Options readerOptions;
         readerOptions.add("filename", f.m_filename);
         reader->setOptions(readerOptions);
-        premerge = reader;
+        Stage *premerge = reader;
 
         if (m_tgtSrsString != f.m_srs &&
             (m_tgtSrsString.size() && f.m_srs.size()))
         {
-            Stage *repro = m_factory.createStage("filters.reprojection", true);
+            Stage *repro = m_factory.createStage("filters.reprojection");
             repro->setInput(*reader);
             Options reproOptions;
             reproOptions.add("out_srs", m_tgtSrsString);
@@ -293,11 +287,11 @@ void TIndexReader::ready(PointTableRef table)
             premerge = repro;
         }
 
-        // WKT is set, even if we're using a bounding box for filtering, so
+        // WKT is set even if we're using a bounding box for filtering, so
         // can be used as a test here.
         if (!m_wkt.empty())
         {
-            Stage *crop = m_factory.createStage("filters.crop", true);
+            Stage *crop = m_factory.createStage("filters.crop");
             crop->setOptions(cropOptions);
             crop->setInput(*premerge);
             log()->get(LogLevel::Debug3) << "Cropping data with wkt '"
@@ -308,20 +302,6 @@ void TIndexReader::ready(PointTableRef table)
         m_merge.setInput(*premerge);
     }
 
-    m_table = table;
-
-}
-
-PointViewSet TIndexReader::run(PointViewPtr view)
-{
-    m_merge.prepare(m_table);
-    PointViewSet output = m_merge.execute(m_table);
-    return output;
-}
-
-TIndexReader::~TIndexReader()
-{
-    if (!m_dataset) return;
     if (m_sql.size())
     {
         // We were created with OGR_DS_ExecuteSQL which needs to have
@@ -332,12 +312,22 @@ TIndexReader::~TIndexReader()
     {
         OGR_DS_Destroy(m_dataset);
     }
-
     m_layer = 0;
     m_dataset = 0;
+}
 
+
+void TIndexReader::ready(PointTableRef table)
+{
+    m_merge.prepare(table);
+    m_pvSet = m_merge.execute(table);
 }
 
 
+PointViewSet TIndexReader::run(PointViewPtr)
+{
+    return m_pvSet;
+}
 
 } // namespace pdal
+
diff --git a/io/tindex/TIndexReader.hpp b/io/tindex/TIndexReader.hpp
index 435fc20..58d333b 100644
--- a/io/tindex/TIndexReader.hpp
+++ b/io/tindex/TIndexReader.hpp
@@ -36,10 +36,10 @@
 
 #include <pdal/PointView.hpp>
 #include <pdal/Reader.hpp>
-#include <pdal/GlobalEnvironment.hpp>
 #include <merge/MergeFilter.hpp>
 #include <pdal/StageFactory.hpp>
 #include <pdal/GDALUtils.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t TIndexReader_ExitFunc();
 extern "C" PF_ExitFunc TIndexReader_InitPlugin();
@@ -66,15 +66,9 @@ class PDAL_DLL TIndexReader : public pdal::Reader
     };
 
 public:
-    TIndexReader()
-        : Reader()
-        , m_dataset(0)
-        , m_layer(0)
-        , m_tablePtr(new PointTable())
-        , m_table(*m_tablePtr)
+    TIndexReader() : m_dataset(NULL) , m_layer(NULL)
         {}
 
-    ~TIndexReader();
     static void * create();
     static int32_t destroy(void *);
     std::string getName() const;
@@ -86,12 +80,10 @@ private:
 
     virtual void addDimensions(PointLayoutPtr layout);
     virtual void processOptions(const Options& options);
-    virtual void ready(PointTableRef table);
-    virtual PointViewSet run(PointViewPtr /*view*/);
-
     virtual void initialize();
+    virtual void ready(PointTableRef table);
+    virtual PointViewSet run(PointViewPtr view);
 
-    std::vector<FileInfo> m_files;
     std::string m_layerName;
     std::string m_driverName;
     std::string m_tileIndexColumnName;
@@ -108,14 +100,12 @@ private:
     void *m_dataset;
     void *m_layer;
 
-    std::unique_ptr<PointTable> m_tablePtr;
-    PointTableRef m_table;
     StageFactory m_factory;
     MergeFilter m_merge;
+    PointViewSet m_pvSet;
 
     std::vector<FileInfo> getFiles();
     FieldIndexes getFields();
-
 };
 
 
diff --git a/kernels/delta/DeltaKernel.cpp b/kernels/delta/DeltaKernel.cpp
index 28c61ad..063f121 100644
--- a/kernels/delta/DeltaKernel.cpp
+++ b/kernels/delta/DeltaKernel.cpp
@@ -35,6 +35,7 @@
 #include "DeltaKernel.hpp"
 
 #include <pdal/PDALUtils.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -52,39 +53,19 @@ DeltaKernel::DeltaKernel() : m_3d(true), m_detail(false), m_allDims(false)
 {}
 
 
-void DeltaKernel::addSwitches()
+void DeltaKernel::addSwitches(ProgramArgs& args)
 {
-    namespace po = boost::program_options;
-
-    po::options_description* file_options =
-        new po::options_description("file options");
-
-    file_options->add_options()
-        ("source", po::value<std::string>(&m_sourceFile),
-         "source file name")
-        ("candidate", po::value<std::string>(&m_candidateFile),
-         "candidate file name")
-        ("output", po::value<std::string>(&m_outputFile),
-         "output file name")
-        ("2d", po::value<bool>(&m_3d)->zero_tokens()->implicit_value(false),
-         "only 2D comparisons/indexing")
-        ("detail",
-         po::value<bool>(&m_detail)->zero_tokens()->implicit_value(true),
-         "Output deltas per-point")
-        ("alldims",
-         po::value<bool>(&m_allDims)->zero_tokens()->implicit_value(true),
-         "Compute diffs for all dimensions (not just X,Y,Z)");
-    addSwitchSet(file_options);
-
-    po::options_description* processing_options =
-        new po::options_description("processing options");
-
-    processing_options->add_options();
-    addSwitchSet(processing_options);
-
-    addPositionalSwitch("source", 1);
-    addPositionalSwitch("candidate", 2);
-    addPositionalSwitch("output", 3);
+    Arg& src = args.add("source", "source file name", m_sourceFile);
+    src.setPositional();
+    Arg& candidate = args.add("candidate", "candidate file name",
+        m_candidateFile);
+    candidate.setPositional();
+    Arg& output = args.add("output", "output file name", m_outputFile);
+    output.setPositional();
+    args.add("2d", "only 2D comparisons/indexing", m_3d, true);
+    args.add("detail", "Output deltas per-point", m_detail);
+    args.add("alldims", "Compute diffs for all dimensions (not just X,Y,Z)",
+        m_allDims);
 }
 
 
diff --git a/kernels/delta/DeltaKernel.hpp b/kernels/delta/DeltaKernel.hpp
index 499cde0..076fb83 100644
--- a/kernels/delta/DeltaKernel.hpp
+++ b/kernels/delta/DeltaKernel.hpp
@@ -39,6 +39,7 @@
 #include <pdal/KDIndex.hpp>
 #include <pdal/Kernel.hpp>
 #include <pdal/PointView.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t DeltaKernel_ExitFunc();
 extern "C" PF_ExitFunc DeltaKernel_InitPlugin();
@@ -75,7 +76,7 @@ public:
 
 private:
     DeltaKernel();
-    void addSwitches();
+    void addSwitches(ProgramArgs& args);
     PointViewPtr loadSet(const std::string& filename, PointTable& table);
     MetadataNode dump(PointViewPtr& srcView, PointViewPtr& candView,
         KD3Index& index, DimIndexMap& dims);
diff --git a/kernels/diff/DiffKernel.cpp b/kernels/diff/DiffKernel.cpp
index 04d03fd..d54b98f 100644
--- a/kernels/diff/DiffKernel.cpp
+++ b/kernels/diff/DiffKernel.cpp
@@ -38,12 +38,8 @@
 
 #include <pdal/PDALUtils.hpp>
 #include <pdal/PointView.hpp>
+#include <pdal/pdal_macros.hpp>
 
-#include <boost/program_options.hpp>
-#include <boost/property_tree/json_parser.hpp>
-#include <boost/property_tree/xml_parser.hpp>
-
-using boost::property_tree::ptree;
 
 namespace pdal
 {
@@ -57,43 +53,18 @@ CREATE_STATIC_PLUGIN(1, 0, DiffKernel, Kernel, s_info)
 
 std::string DiffKernel::getName() const { return s_info.name; }
 
-void DiffKernel::validateSwitches()
+void DiffKernel::addSwitches(ProgramArgs& args)
 {
-    if (!m_sourceFile.size())
-        throw app_runtime_error("No source file given!");
-    if (!m_candidateFile.size())
-        throw app_runtime_error("No candidate file given!");
-}
-
-
-void DiffKernel::addSwitches()
-{
-    namespace po = boost::program_options;
-
-    po::options_description* file_options =
-        new po::options_description("file options");
-
-    file_options->add_options()
-        ("source", po::value<std::string>(&m_sourceFile), "source file name")
-        ("candidate", po::value<std::string>(&m_candidateFile),
-            "candidate file name")
-    ;
-
-    addSwitchSet(file_options);
-    po::options_description* processing_options =
-        new po::options_description("processing options");
-
-    processing_options->add_options();
-
-    addSwitchSet(processing_options);
-
-    addPositionalSwitch("source", 1);
-    addPositionalSwitch("candidate", 2);
+    Arg& source = args.add("source", "Source filename", m_sourceFile);
+    source.setPositional();
+    Arg& candidate = args.add("candidate", "Candidate filename",
+        m_candidateFile);
+    candidate.setPositional();
 }
 
 
 void DiffKernel::checkPoints(const PointView& source_data,
-    const PointView& candidate_data, ptree& errors)
+    const PointView& candidate_data, MetadataNode errors)
 {
     uint32_t MAX_BADBYTES(20);
     uint32_t badbytes(0);
@@ -122,7 +93,7 @@ void DiffKernel::checkPoints(const PointView& source_data,
 
                 oss << "Point " << idx << " differs for dimension \"" <<
                     Dimension::name(sd) << "\" for source and candidate";
-                errors.put<std::string>("data.error", oss.str());
+                errors.add("data.error", oss.str());
                 badbytes++;
             }
         }
@@ -146,7 +117,7 @@ int DiffKernel::execute()
     source.prepare(sourceTable);
     PointViewSet sourceSet = source.execute(sourceTable);
 
-    ptree errors;
+    MetadataNode errors;
 
     PointTable candidateTable;
     Options candidateOptions;
@@ -168,9 +139,9 @@ int DiffKernel::execute()
         std::ostringstream oss;
 
         oss << "Source and candidate files do not have the same point count";
-        errors.put("count.error", oss.str());
-        errors.put("count.candidate", candidateView->size());
-        errors.put("count.source", sourceView->size());
+        errors.add("count.error", oss.str());
+        errors.add("count.candidate", candidateView->size());
+        errors.add("count.source", sourceView->size());
     }
 
     MetadataNode source_metadata = sourceTable.metadata();
@@ -180,10 +151,9 @@ int DiffKernel::execute()
         std::ostringstream oss;
 
         oss << "Source and candidate files do not have the same metadata count";
-        errors.put("metadata.error", oss.str());
-        errors.put_child("metadata.source", Utils::toPTree(source_metadata));
-        errors.put_child("metadata.candidate",
-            Utils::toPTree(candidate_metadata));
+        errors.add("metadata.error", oss.str());
+        errors.add(source_metadata);
+        errors.add(candidate_metadata);
     }
 
     if (candidateTable.layout()->dims().size() !=
@@ -193,28 +163,28 @@ int DiffKernel::execute()
 
         oss << "Source and candidate files do not have the same "
             "number of dimensions";
-        errors.put<std::string>("schema.error", oss.str());
+//         errors.put<std::string>("schema.error", oss.str());
         //Need to "ptree" the PointTable dimension list in some way
         // errors.put_child("schema.source", sourceTable.schema()->toPTree());
         // errors.put_child("schema.candidate",
         //     candidateTable.schema()->toPTree());
     }
 
-    if (errors.size())
-    {
-        write_json(std::cout, errors);
-        return 1;
-    }
-    else
+//     if (errors.size())
+//     {
+//         write_json(std::cout, errors);
+//         return 1;
+//     }
+//     else
     {
         // If we made it this far with no errors, now we'll
         // check the points.
-        checkPoints(*sourceView, *candidateView, errors);
-        if (errors.size())
-        {
-            write_json(std::cout, errors);
-            return 1;
-        }
+//         checkPoints(*sourceView, *candidateView, errors);
+//         if (errors.size())
+//         {
+//             write_json(std::cout, errors);
+//             return 1;
+//         }
     }
     return 0;
 }
diff --git a/kernels/diff/DiffKernel.hpp b/kernels/diff/DiffKernel.hpp
index f2e55c7..229e72b 100644
--- a/kernels/diff/DiffKernel.hpp
+++ b/kernels/diff/DiffKernel.hpp
@@ -37,8 +37,7 @@
 #include <pdal/Kernel.hpp>
 #include <pdal/Stage.hpp>
 #include <pdal/util/FileUtils.hpp>
-
-#include <boost/property_tree/ptree.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t DiffKernel_ExitFunc();
 extern "C" PF_ExitFunc DiffKernel_InitPlugin();
@@ -58,12 +57,10 @@ public:
 
 
 private:
-    void addSwitches(); // overrride
-    void validateSwitches(); // overrride
+    virtual void addSwitches(ProgramArgs& args);
 
     void checkPoints(const PointView& source_data,
-        const PointView& candidate_data,
-        boost::property_tree::ptree& errors);
+        const PointView& candidate_data, MetadataNode errors);
     std::string m_sourceFile;
     std::string m_candidateFile;
 };
diff --git a/kernels/info/InfoKernel.cpp b/kernels/info/InfoKernel.cpp
index 7a952a5..d3c709b 100644
--- a/kernels/info/InfoKernel.cpp
+++ b/kernels/info/InfoKernel.cpp
@@ -40,11 +40,11 @@
 #include <pdal/PipelineWriter.hpp>
 #include <pdal/PDALUtils.hpp>
 #include <pdal/pdal_config.hpp>
+#include <pdal/StageFactory.hpp>
 #ifdef PDAL_HAVE_LIBXML2
 #include <pdal/XMLSchema.hpp>
 #endif
-
-#include <boost/program_options.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -70,7 +70,7 @@ InfoKernel::InfoKernel()
 {}
 
 
-void InfoKernel::validateSwitches()
+void InfoKernel::validateSwitches(ProgramArgs& args)
 {
     int functions = 0;
 
@@ -122,64 +122,30 @@ void InfoKernel::validateSwitches()
 }
 
 
-void InfoKernel::addSwitches()
+void InfoKernel::addSwitches(ProgramArgs& args)
 {
-    namespace po = boost::program_options;
-
-    po::options_description* file_options =
-        new po::options_description("file options");
-
-    file_options->add_options()
-        ("input,i", po::value<std::string>(&m_inputFile)->default_value(""),
-         "input file name")
-        ;
-
-    addSwitchSet(file_options);
-
-    po::options_description* processing_options =
-        new po::options_description("processing options");
-
-    processing_options->add_options()
-        ("all",
-         po::value<bool>(&m_showAll)->zero_tokens()->implicit_value(true),
-         "dump statistics, schema and metadata")
-        ("point,p", po::value<std::string >(&m_pointIndexes), "point to dump")
-        ("query", po::value< std::string>(&m_queryPoint),
+    args.add("input,i", "input file name", m_inputFile).setOptionalPositional();
+    args.add("all", "dump statistics, schema and metadata", m_showAll);
+    args.add("point,p", "point to dump\n--point=\"1-5,10,100-200\"",
+        m_pointIndexes);
+    args.add("query",
          "Return points in order of distance from the specified "
          "location (2D or 3D)\n"
-         "--query Xcoord,Ycoord[,Zcoord][/count]")
-        ("stats",
-         po::value<bool>(&m_showStats)->zero_tokens()->implicit_value(true),
-         "dump stats on all points (reads entire dataset)")
-        ("boundary",
-         po::value<bool>(&m_boundary)->zero_tokens()->implicit_value(true),
-         "compute a hexagonal hull/boundary of dataset")
-        ("dimensions", po::value<std::string >(&m_dimensions),
-         "dimensions on which to compute statistics")
-        ("schema",
-         po::value<bool>(&m_showSchema)->zero_tokens()->implicit_value(true),
-         "dump the schema")
-        ("pipeline-serialization",
-         po::value<std::string>(&m_pipelineFile)->default_value(""), "")
-        ("summary",
-         po::value<bool>(&m_showSummary)->zero_tokens()->implicit_value(true),
-        "dump summary of the info")
-        ("metadata",
-         po::value<bool>(&m_showMetadata)->zero_tokens()->implicit_value(true),
-        "dump file metadata info")
-        ;
-
-    po::options_description* hidden =
-        new po::options_description("Hidden options");
-    hidden->add_options()
-        ("pointcloudschema",
-         po::value<std::string>(&m_PointCloudSchemaOutput),
-        "dump PointCloudSchema XML output")
-            ;
-
-    addSwitchSet(processing_options);
-    addHiddenSwitchSet(hidden);
-    addPositionalSwitch("input", 1);
+         "--query Xcoord,Ycoord[,Zcoord][/count]",
+         m_queryPoint);
+    args.add("stats", "dump stats on all points (reads entire dataset)",
+        m_showStats);
+    args.add("boundary", "compute a hexagonal hull/boundary of dataset",
+        m_boundary);
+    args.add("dimensions", "dimensions on which to compute statistics",
+        m_dimensions);
+    args.add("schema", "dump the schema", m_showSchema);
+    args.add("pipeline-serialization", "Output file for pipeline serialization",
+         m_pipelineFile);
+    args.add("summary", "dump summary of the info", m_showSummary);
+    args.add("metadata", "dump file metadata info", m_showMetadata);
+    args.add("pointcloudschema", "dump PointCloudSchema XML output",
+        m_PointCloudSchemaOutput).setHidden();
 }
 
 // Support for parsing point numbers.  Points can be specified singly or as
@@ -190,14 +156,11 @@ using namespace std;
 
 uint32_t parseInt(const string& s)
 {
-    try
-    {
-        return boost::lexical_cast<uint32_t>(s);
-    }
-    catch (boost::bad_lexical_cast)
-    {
-        throw app_runtime_error(string("Invalid integer: ") + s);
-    }
+    uint32_t i;
+
+    if (!Utils::fromString(s, i))
+        throw pdal_error(string("Invalid integer: ") + s);
+    return i;
 }
 
 
@@ -206,7 +169,7 @@ void addRange(const string& begin, const string& end, vector<PointId>& points)
     PointId low = parseInt(begin);
     PointId high = parseInt(end);
     if (low > high)
-        throw app_runtime_error(string("Range invalid: ") + begin + "-" + end);
+        throw pdal_error(string("Range invalid: ") + begin + "-" + end);
     while (low <= high)
         points.push_back(low++);
 }
@@ -228,7 +191,7 @@ vector<PointId> getListOfPoints(std::string p)
         else if (limits.size() == 2)
             addRange(limits[0], limits[1], output);
         else
-            throw app_runtime_error(string("Invalid point range: ") + s);
+            throw pdal_error(string("Invalid point range: ") + s);
     }
     return output;
 }
@@ -266,6 +229,8 @@ MetadataNode InfoKernel::dumpSummary(const QuickInfo& qi)
     MetadataNode summary;
     summary.add("num_points", qi.m_pointCount);
     summary.add("spatial_reference", qi.m_srs.getWKT());
+    MetadataNode srs = pdal::Utils::toMetadata(qi.m_srs);
+    summary.add(srs);
     MetadataNode bounds = summary.add("bounds");
     MetadataNode x = bounds.add("X");
     x.add("min", qi.m_bounds.minx);
@@ -291,38 +256,69 @@ MetadataNode InfoKernel::dumpSummary(const QuickInfo& qi)
 }
 
 
-void InfoKernel::setup(const std::string& filename)
+PipelineManagerPtr InfoKernel::makePipeline(const std::string& filename,
+    bool noPoints)
 {
-    Options readerOptions;
-
-    readerOptions.add("filename", filename);
-    if (!m_needPoints)
-        readerOptions.add("count", 0);
+    if (!pdal::FileUtils::fileExists(filename))
+        throw pdal_error("File not found: " + filename);
 
-    m_manager = KernelSupport::makePipeline(filename);
-    m_reader = m_manager->getStage();
-    Stage *stage = m_reader;
+    PipelineManagerPtr output(new PipelineManager);
 
-    if (m_dimensions.size())
-        m_options.add("dimensions", m_dimensions, "List of dimensions");
+    if (filename == "STDIN")
+    {
+        output->readPipeline(std::cin);
+    }
+    else if (FileUtils::extension(filename) == ".xml" ||
+        FileUtils::extension(filename) == ".json")
+    {
+        output->readPipeline(filename);
+    }
+    else
+    {
+        StageFactory factory;
+        std::string driver = factory.inferReaderDriver(filename);
+
+        if (driver.empty())
+            throw pdal_error("Cannot determine input file type of " + filename);
+        Stage& reader = output->addReader(driver);
+        Options ro;
+        ro.add("filename", filename);
+        if (noPoints)
+            ro.add("count", 0);
+        reader.setOptions(ro);
+        m_reader = &reader;
+    }
+    return output;
+}
 
-    Options options = m_options + readerOptions;
-    m_reader->setOptions(options);
+void InfoKernel::setup(const std::string& filename)
+{
+    m_manager = makePipeline(filename, !m_needPoints);
+    Stage *stage = m_manager->getStage();
 
     if (m_showStats)
     {
         m_statsStage = &(m_manager->addFilter("filters.stats"));
-        m_statsStage->setOptions(options);
+        if (m_dimensions.size())
+        {
+            Options ops;
+            ops.add("dimensions", m_dimensions);
+            m_statsStage->addOptions(ops);
+        }
+
         m_statsStage->setInput(*stage);
         stage = m_statsStage;
     }
     if (m_boundary)
     {
         m_hexbinStage = &(m_manager->addFilter("filters.hexbin"));
-        m_hexbinStage->setOptions(options);
+        if (!m_hexbinStage) {
+            throw pdal_error("Unable to compute boundary -- "
+                "http://github.com/hobu/hexer is not linked. "
+                "See the \"boundary\" member in \"stats\" for a coarse "
+                "bounding box");
+        }
         m_hexbinStage->setInput(*stage);
-        stage = m_hexbinStage;
-        Options readerOptions;
     }
 }
 
@@ -376,7 +372,7 @@ void InfoKernel::dump(MetadataNode& root)
         root.add(m_statsStage->getMetadata().clone("stats"));
 
     if (m_pipelineFile.size() > 0)
-        PipelineWriter(*m_manager).writePipeline(m_pipelineFile);
+        PipelineWriter::writePipeline(m_manager->getStage(), m_pipelineFile);
 
     if (m_pointIndexes.size())
     {
@@ -384,14 +380,26 @@ void InfoKernel::dump(MetadataNode& root)
         assert(viewSet.size() == 1);
         root.add(dumpPoints(*viewSet.begin()).clone("points"));
     }
+
     if (m_queryPoint.size())
     {
         PointViewSet viewSet = m_manager->views();
         assert(viewSet.size() == 1);
         root.add(dumpQuery(*viewSet.begin()));
     }
+
     if (m_showMetadata)
-        root.add(m_reader->getMetadata().clone("metadata"));
+    {
+        // If we have a reader cached, this means we
+        // weren't reading a pipeline file directly. In that
+        // case, use the metadata from the reader (old behavior).
+        // Otherwise, return the full metadata of the entire pipeline
+        if (m_reader)
+            root.add(m_reader->getMetadata().clone("metadata"));
+        else
+            root.add(m_manager->getMetadata().clone("metadata"));
+    }
+
     if (m_boundary)
     {
         PointViewSet viewSet = m_manager->views();
@@ -429,10 +437,14 @@ MetadataNode InfoKernel::dumpQuery(PointViewPtr inView) const
     std::vector<std::string> tokens = Utils::split2(location, seps);
     std::vector<double> values;
     for (auto ti = tokens.begin(); ti != tokens.end(); ++ti)
-        values.push_back(boost::lexical_cast<double>(*ti));
+    {
+        double d;
+        if (Utils::fromString(*ti, d))
+            values.push_back(d);
+    }
 
     if (values.size() != 2 && values.size() != 3)
-        throw app_runtime_error("--points must be two or three values");
+        throw pdal_error("--points must be two or three values");
 
     PointViewPtr outView = inView->makeNew();
 
diff --git a/kernels/info/InfoKernel.hpp b/kernels/info/InfoKernel.hpp
index 38acf8d..7fa5c4b 100644
--- a/kernels/info/InfoKernel.hpp
+++ b/kernels/info/InfoKernel.hpp
@@ -35,20 +35,16 @@
 #pragma once
 
 #include <pdal/Kernel.hpp>
-#include <pdal/KernelSupport.hpp>
+#include <pdal/PipelineManager.hpp>
 #include <pdal/PointView.hpp>
 #include <pdal/Stage.hpp>
 #include <pdal/util/FileUtils.hpp>
+#include <pdal/plugin.hpp>
 
 #ifdef __clang__
 #pragma GCC diagnostic ignored "-Wtautological-constant-out-of-range-compare"
 #endif
 
-#include <boost/property_tree/json_parser.hpp>
-#include <boost/tokenizer.hpp>
-
-typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
-
 extern "C" int32_t InfoKernel_ExitFunc();
 extern "C" PF_ExitFunc InfoKernel_InitPlugin();
 
@@ -74,8 +70,8 @@ public:
 
 private:
     InfoKernel();
-    void addSwitches(); // overrride
-    void validateSwitches(); // overrride
+    void addSwitches(ProgramArgs& args);
+    void validateSwitches(ProgramArgs& args);
 
     void dump(MetadataNode& root);
     MetadataNode dumpPoints(PointViewPtr inView) const;
@@ -83,6 +79,7 @@ private:
     void dumpPipeline() const;
     MetadataNode dumpSummary(const QuickInfo& qi);
     MetadataNode dumpQuery(PointViewPtr inView) const;
+    PipelineManagerPtr makePipeline(const std::string& filename, bool noPoints);
 
     std::string m_inputFile;
     bool m_showStats;
@@ -90,7 +87,6 @@ private:
     bool m_showAll;
     bool m_showMetadata;
     bool m_boundary;
-    pdal::Options m_options;
     std::string m_pointIndexes;
     std::string m_dimensions;
     std::string m_queryPoint;
diff --git a/kernels/merge/MergeKernel.cpp b/kernels/merge/MergeKernel.cpp
index 7cf1545..8f17610 100644
--- a/kernels/merge/MergeKernel.cpp
+++ b/kernels/merge/MergeKernel.cpp
@@ -35,10 +35,8 @@
 #include "MergeKernel.hpp"
 
 #include <merge/MergeFilter.hpp>
-#include <pdal/KernelSupport.hpp>
 #include <pdal/StageFactory.hpp>
-
-#include <boost/program_options.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -56,22 +54,13 @@ std::string MergeKernel::getName() const
 }
 
 
-void MergeKernel::addSwitches()
+void MergeKernel::addSwitches(ProgramArgs& args)
 {
-    po::options_description* file_options =
-        new po::options_description("file options");
-
-    file_options->add_options()
-        ("files,f", po::value<StringList>(&m_files)->multitoken(),
-         "input/output files")
-        ;
-
-    addSwitchSet(file_options);
-    addPositionalSwitch("files", 10000);
+    args.add("files,f", "input/output files", m_files).setPositional();
 }
 
 
-void MergeKernel::validateSwitches()
+void MergeKernel::validateSwitches(ProgramArgs& args)
 {
     if (m_files.size() < 2)
         throw pdal_error("Must specify an input and output file.");
@@ -86,7 +75,6 @@ int MergeKernel::execute()
 
     MergeFilter filter;
 
-    std::vector<std::unique_ptr<Stage>> m_readers;
     for (size_t i = 0; i < m_files.size(); ++i)
     {
         Options readerOpts;
diff --git a/kernels/merge/MergeKernel.hpp b/kernels/merge/MergeKernel.hpp
index 0428eb6..e934449 100644
--- a/kernels/merge/MergeKernel.hpp
+++ b/kernels/merge/MergeKernel.hpp
@@ -52,8 +52,8 @@ public:
     int execute();
 
 private:
-    void addSwitches();
-    void validateSwitches();
+    void addSwitches(ProgramArgs& args);
+    void validateSwitches(ProgramArgs& args);
 
     StringList m_files;
     std::string m_outputFile;
diff --git a/kernels/pipeline/PipelineKernel.cpp b/kernels/pipeline/PipelineKernel.cpp
index b5eaf89..724ba3a 100644
--- a/kernels/pipeline/PipelineKernel.cpp
+++ b/kernels/pipeline/PipelineKernel.cpp
@@ -38,9 +38,9 @@
 #include <pdal/XMLSchema.hpp>
 #endif
 
-#include <boost/program_options.hpp>
-
 #include <pdal/PDALUtils.hpp>
+#include <pdal/util/FileUtils.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -58,77 +58,53 @@ PipelineKernel::PipelineKernel() : m_validate(false), m_progressFd(-1)
 {}
 
 
-void PipelineKernel::validateSwitches()
+void PipelineKernel::validateSwitches(ProgramArgs& args)
 {
     if (m_usestdin)
         m_inputFile = "STDIN";
 
     if (m_inputFile.empty())
-        throw app_usage_error("input file name required");
+        throw pdal_error("Input filename required.");
 }
 
 
-void PipelineKernel::addSwitches()
+void PipelineKernel::addSwitches(ProgramArgs& args)
 {
-    po::options_description* file_options =
-        new po::options_description("file options");
-
-    file_options->add_options()
-        ("input,i", po::value<std::string>(&m_inputFile)->default_value(""),
-            "input file name")
-        ("pipeline-serialization",
-            po::value<std::string>(&m_pipelineFile)->default_value(""), "")
-        ("validate",
-            po::value<bool>(&m_validate)->zero_tokens()->implicit_value(true),
-            "Validate the pipeline (including serialization), but do not "
-            "execute writing of points")
-        ("progress", po::value<std::string>(&m_progressFile),
-            "Name of file or FIFO to which stages should write progress "
-            "information.  The file/FIFO must exist.  PDAL will not create "
-            "the progress file.")
-        ;
-
-    addSwitchSet(file_options);
-    addPositionalSwitch("input", 1);
-
-    po::options_description* hidden =
-        new po::options_description("Hidden options");
-    hidden->add_options()
-        ("pointcloudschema",
-         po::value<std::string>(&m_PointCloudSchemaOutput),
-        "dump PointCloudSchema XML output")
-            ;
-
-    addHiddenSwitchSet(hidden);
+    args.add("input,i", "input file name", m_inputFile).setOptionalPositional();
+    args.add("pipeline-serialization", "Output file for pipeline serialization",
+        m_pipelineFile);
+    args.add("validate", "Validate the pipeline (including serialization), "
+        "but do not write points", m_validate);
+    args.add("progress",
+        "Name of file or FIFO to which stages should write progress "
+        "information.  The file/FIFO must exist.  PDAL will not create "
+        "the progress file.",
+        m_progressFile);
+    args.add("pointcloudschema", "dump PointCloudSchema XML output",
+        m_PointCloudSchemaOutput).setHidden();
 }
 
 int PipelineKernel::execute()
 {
     if (!FileUtils::fileExists(m_inputFile))
-        throw app_runtime_error("file not found: " + m_inputFile);
+        throw pdal_error("file not found: " + m_inputFile);
     if (m_progressFile.size())
         m_progressFd = Utils::openProgress(m_progressFile);
 
-    pdal::PipelineManager manager(m_progressFd);
-
-    pdal::PipelineReader reader(manager, isDebug(), getVerboseLevel());
-    bool isWriter = reader.readPipeline(m_inputFile);
-    if (!isWriter)
-        throw app_runtime_error("Pipeline file does not contain a writer. "
-            "Use 'pdal info' to read the data.");
+    PipelineManager manager(m_progressFd);
 
+    manager.readPipeline(m_inputFile);
     applyExtraStageOptionsRecursive(manager.getStage());
     manager.execute();
+
     if (m_pipelineFile.size() > 0)
-    {
-        pdal::PipelineWriter writer(manager);
-        writer.writePipeline(m_pipelineFile);
-    }
+        PipelineWriter::writePipeline(manager.getStage(), m_pipelineFile);
+
     if (m_PointCloudSchemaOutput.size() > 0)
     {
 #ifdef PDAL_HAVE_LIBXML2
         XMLSchema schema(manager.pointTable().layout());
-        
+
         std::ostream *out = FileUtils::createFile(m_PointCloudSchemaOutput);
         std::string xml(schema.xml());
         out->write(xml.c_str(), xml.size());
diff --git a/kernels/pipeline/PipelineKernel.hpp b/kernels/pipeline/PipelineKernel.hpp
index 3ad5165..ae5fbaa 100644
--- a/kernels/pipeline/PipelineKernel.hpp
+++ b/kernels/pipeline/PipelineKernel.hpp
@@ -35,10 +35,10 @@
 #pragma once
 
 #include <pdal/Kernel.hpp>
-#include <pdal/PipelineReader.hpp>
 #include <pdal/PipelineManager.hpp>
 #include <pdal/PipelineWriter.hpp>
 #include <pdal/util/FileUtils.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t PipelineKernel_ExitFunc();
 extern "C" PF_ExitFunc PipelineKernel_InitPlugin();
@@ -56,8 +56,8 @@ public:
 
 private:
     PipelineKernel();
-    void addSwitches();
-    void validateSwitches();
+    void addSwitches(ProgramArgs& args);
+    void validateSwitches(ProgramArgs& args);
 
     std::string m_inputFile;
     std::string m_pipelineFile;
diff --git a/kernels/random/RandomKernel.cpp b/kernels/random/RandomKernel.cpp
index 730856f..46fd2c1 100644
--- a/kernels/random/RandomKernel.cpp
+++ b/kernels/random/RandomKernel.cpp
@@ -34,7 +34,8 @@
 
 #include "RandomKernel.hpp"
 
-#include <boost/program_options.hpp>
+#include <pdal/StageFactory.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -56,30 +57,21 @@ RandomKernel::RandomKernel()
 }
 
 
-void RandomKernel::validateSwitches()
+void RandomKernel::addSwitches(ProgramArgs& args)
 {
-    if (m_outputFile == "")
-        throw app_usage_error("--output/-o required");
-}
-
-
-void RandomKernel::addSwitches()
-{
-    po::options_description* file_options = new po::options_description("file options");
-
-    file_options->add_options()
-    ("output,o", po::value<std::string>(&m_outputFile)->default_value(""), "output file name")
-    ("compress,z", po::value<bool>(&m_bCompress)->zero_tokens()->implicit_value(true), "Compress output data (if supported by output format)")
-    ("count", po::value<uint64_t>(&m_numPointsToWrite)->default_value(0), "How many points should we write?")
-    ("bounds", po::value<BOX3D>(&m_bounds), "Extent (in XYZ to clip output to)")
-    ("mean", po::value< std::string >(&m_means), "A comma-separated or quoted, space-separated list of means (normal mode): \n--mean 0.0,0.0,0.0\n--mean \"0.0 0.0 0.0\"")
-    ("stdev", po::value< std::string >(&m_stdevs), "A comma-separated or quoted, space-separated list of standard deviations (normal mode): \n--stdev 0.0,0.0,0.0\n--stdev \"0.0 0.0 0.0\"")
-    ("distribution", po::value<std::string>(&m_distribution)->default_value("uniform"), "Distribution (uniform / normal)")
-    ;
-
-    addSwitchSet(file_options);
-
-    addPositionalSwitch("output", 1);
+    args.add("output,o", "Output file name", m_outputFile).setPositional();
+    args.add("compress,z",
+        "Compress output data (if supported by output format)", m_bCompress);
+    args.add("count", "How many points should we write?", m_numPointsToWrite);
+    args.add("bounds", "Extent (in XYZ to clip output to)", m_bounds);
+    args.add("mean", "A comma-separated or quoted, space-separated list "
+        "of means (normal mode): \n--mean 0.0,0.0,0.0\n--mean \"0.0 0.0 0.0\"",
+        m_means);
+    args.add("stdev", "A comma-separated or quoted, space-separated list "
+        "of standard deviations (normal mode): \n"
+        "--stdev 0.0,0.0,0.0\n--stdev \"0.0 0.0 0.0\"", m_stdevs);
+    args.add("distribution", "Distribution (uniform / normal)", m_distribution,
+        "uniform");
 }
 
 
@@ -96,88 +88,45 @@ Stage& RandomKernel::makeReader(Options readerOptions)
         readerOptions.add<std::string>("log", "STDERR");
     }
 
-    StageFactory factory;
-    Stage& readerStage = ownStage(factory.createStage("readers.faux"));
-    readerStage.setOptions(readerOptions);
-
-    return readerStage;
+    auto& reader = createStage("readers.faux");
+    reader.setOptions(readerOptions);
+    return reader;
 }
 
 
 int RandomKernel::execute()
 {
     Options readerOptions;
-    {
-        boost::char_separator<char> sep(SEPARATORS);
-        std::vector<double> means;
-        tokenizer mean_tokens(m_means, sep);
-        for (tokenizer::iterator t = mean_tokens.begin();
-            t != mean_tokens.end(); ++t)
-        {
-            means.push_back(boost::lexical_cast<double>(*t));
-        }
-
-        if (means.size())
-        {
-            readerOptions.add<double >("mean_x", means[0]);
-            readerOptions.add<double >("mean_y", means[1]);
-            readerOptions.add<double >("mean_z", means[2]);
-        }
-
-        std::vector<double> stdevs;
-        tokenizer stdev_tokens(m_stdevs, sep);
-        for (tokenizer::iterator t = stdev_tokens.begin();
-            t != stdev_tokens.end(); ++t)
-        {
-            stdevs.push_back(boost::lexical_cast<double>(*t));
-        }
-
-        if (stdevs.size())
-        {
-            readerOptions.add<double >("stdev_x", stdevs[0]);
-            readerOptions.add<double >("stdev_y", stdevs[1]);
-            readerOptions.add<double >("stdev_z", stdevs[2]);
-        }
-
-        if (!m_bounds.empty())
-            readerOptions.add<BOX3D >("bounds", m_bounds);
-
-        if (boost::iequals(m_distribution, "uniform"))
-            readerOptions.add<std::string>("mode", "uniform");
-        else if (boost::iequals(m_distribution, "normal"))
-            readerOptions.add<std::string>("mode", "normal");
-        else if (boost::iequals(m_distribution, "random"))
-            readerOptions.add<std::string>("mode", "random");
-        else
-            throw pdal_error("invalid distribution: " + m_distribution);
-        readerOptions.add<int>("num_points", m_numPointsToWrite);
-        readerOptions.add<bool>("debug", isDebug());
-        readerOptions.add<uint32_t>("verbose", getVerboseLevel());
-    }
+
+    setCommonOptions(readerOptions);
+    if (!m_bounds.empty())
+        readerOptions.add("bounds", m_bounds);
+
+    std::string distribution(Utils::tolower(m_distribution));
+    if (distribution == "uniform")
+        readerOptions.add("mode", "uniform");
+    else if (distribution == "normal")
+        readerOptions.add("mode", "normal");
+    else if (distribution == "random")
+        readerOptions.add("mode", "random");
+    else
+        throw pdal_error("invalid distribution: " + m_distribution);
+    readerOptions.add("num_points", m_numPointsToWrite);
 
     Options writerOptions;
-    {
-        writerOptions.add<std::string>("filename", m_outputFile);
-        setCommonOptions(writerOptions);
 
-        if (m_bCompress)
-        {
-            writerOptions.add<bool>("compression", true);
-        }
-    }
+    writerOptions.add("filename", m_outputFile);
+    setCommonOptions(writerOptions);
+
+    if (m_bCompress)
+        writerOptions.add("compression", true);
 
     Stage& writer = makeWriter(m_outputFile, makeReader(readerOptions));
     writer.setOptions(writerOptions);
+    applyExtraStageOptionsRecursive(&writer);
 
     PointTable table;
 
-    UserCallback* callback;
-    if (!getProgressShellCommand().size())
-        callback = static_cast<UserCallback*>(new PercentageCallback);
-    else
-        callback = static_cast<UserCallback*>(
-            new ShellScriptCallback(getProgressShellCommand()));
-    writer.setUserCallback(callback);
     writer.prepare(table);
     PointViewSet viewSet = writer.execute(table);
 
diff --git a/kernels/random/RandomKernel.hpp b/kernels/random/RandomKernel.hpp
index 0683328..e47fadc 100644
--- a/kernels/random/RandomKernel.hpp
+++ b/kernels/random/RandomKernel.hpp
@@ -36,12 +36,7 @@
 
 #include <pdal/Kernel.hpp>
 #include <pdal/util/FileUtils.hpp>
-
-
-#define SEPARATORS ",| "
-
-#include <boost/tokenizer.hpp>
-typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t RandomKernel_ExitFunc();
 extern "C" PF_ExitFunc RandomKernel_InitPlugin();
@@ -60,8 +55,7 @@ public:
 
 private:
     RandomKernel();
-    void addSwitches();
-    void validateSwitches();
+    void addSwitches(ProgramArgs& arg);
 
     Stage& makeReader(Options readerOptions);
 
diff --git a/kernels/sort/SortKernel.cpp b/kernels/sort/SortKernel.cpp
index 0a5c3a4..26a4473 100644
--- a/kernels/sort/SortKernel.cpp
+++ b/kernels/sort/SortKernel.cpp
@@ -34,11 +34,9 @@
 
 #include "SortKernel.hpp"
 
-#include <pdal/BufferReader.hpp>
-#include <pdal/KernelSupport.hpp>
+#include <buffer/BufferReader.hpp>
 #include <pdal/StageFactory.hpp>
-
-#include <boost/program_options.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -60,36 +58,15 @@ SortKernel::SortKernel() : m_bCompress(false), m_bForwardMetadata(false)
 {}
 
 
-void SortKernel::validateSwitches()
-{
-    if (m_inputFile == "")
-        throw app_usage_error("--input/-i required");
-    if (m_outputFile == "")
-        throw app_usage_error("--output/-o required");
-}
-
-
-void SortKernel::addSwitches()
+void SortKernel::addSwitches(ProgramArgs& args)
 {
-    po::options_description* file_options =
-        new po::options_description("file options");
-
-    file_options->add_options()
-    ("input,i", po::value<std::string>(&m_inputFile)->default_value(""),
-     "input file name")
-    ("output,o", po::value<std::string>(&m_outputFile)->default_value(""),
-     "output file name")
-    ("compress,z",
-     po::value<bool>(&m_bCompress)->zero_tokens()->implicit_value(true),
-     "Compress output data (if supported by output format)")
-    ("metadata,m",
-     po::value< bool >(&m_bForwardMetadata)->implicit_value(true),
-     "Forward metadata (VLRs, header entries, etc) from previous stages")
-    ;
-
-    addSwitchSet(file_options);
-    addPositionalSwitch("input", 1);
-    addPositionalSwitch("output", 1);
+    args.add("input,i", "Input filename", m_inputFile).setPositional();
+    args.add("output,o", "Output filename", m_outputFile).setPositional();
+    args.add("compress,z",
+        "Compress output data (if supported by output format)", m_bCompress);
+    args.add("metadata,m",
+        "Forward metadata (VLRs, header entries, etc) from previous stages",
+        m_bForwardMetadata);
 }
 
 
@@ -142,8 +119,7 @@ int SortKernel::execute()
     sortOptions.add<bool>("debug", isDebug());
     sortOptions.add<uint32_t>("verbose", getVerboseLevel());
 
-    StageFactory f;
-    Stage& sortStage = ownStage(f.createStage("filters.mortonorder"));
+    auto& sortStage = createStage("filters.mortonorder");
     sortStage.setInput(bufferReader);
     sortStage.setOptions(sortOptions);
 
@@ -156,17 +132,11 @@ int SortKernel::execute()
     if (m_bForwardMetadata)
         writerOptions.add("forward_metadata", true);
 
-    std::vector<std::string> cmd = getProgressShellCommand();
-    UserCallback *callback =
-        cmd.size() ? (UserCallback *)new ShellScriptCallback(cmd) :
-        (UserCallback *)new HeartbeatCallback();
-
     Stage& writer = makeWriter(m_outputFile, sortStage);
 
     // Some options are inferred by makeWriter based on filename
     // (compression, driver type, etc).
-    writer.setOptions(writerOptions + writer.getOptions());
-    writer.setUserCallback(callback);
+    writer.addOptions(writerOptions);
 
     applyExtraStageOptionsRecursive(&writer);
     writer.prepare(table);
diff --git a/kernels/sort/SortKernel.hpp b/kernels/sort/SortKernel.hpp
index 53a14a6..b960414 100644
--- a/kernels/sort/SortKernel.hpp
+++ b/kernels/sort/SortKernel.hpp
@@ -35,6 +35,7 @@
 #pragma once
 
 #include <pdal/Kernel.hpp>
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t SortKernel_ExitFunc();
 extern "C" PF_ExitFunc SortKernel_InitPlugin();
@@ -52,8 +53,7 @@ public:
 
 private:
     SortKernel();
-    void addSwitches();
-    void validateSwitches();
+    void addSwitches(ProgramArgs& args);
 
     Stage& makeReader(Options readerOptions);
 
diff --git a/kernels/split/SplitKernel.cpp b/kernels/split/SplitKernel.cpp
index db8aaa7..b227b34 100644
--- a/kernels/split/SplitKernel.cpp
+++ b/kernels/split/SplitKernel.cpp
@@ -34,11 +34,9 @@
 
 #include "SplitKernel.hpp"
 
-#include <pdal/BufferReader.hpp>
-#include <pdal/KernelSupport.hpp>
+#include <buffer/BufferReader.hpp>
 #include <pdal/StageFactory.hpp>
-
-#include <boost/program_options.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -55,44 +53,28 @@ std::string SplitKernel::getName() const
     return s_info.name;
 }
 
-    double m_length;
-    double m_xOrigin;
-    double m_yOrigin;
 
-void SplitKernel::addSwitches()
+void SplitKernel::addSwitches(ProgramArgs& args)
 {
-    po::options_description* file_options =
-        new po::options_description("file options");
-
-    file_options->add_options()
-        ("length", po::value<double>(&m_length)->default_value(0.0),
-         "Edge length for splitter cells")
-        ("capacity", po::value<uint32_t>(&m_capacity)->default_value(0),
-         "Point capacity of chipper cells")
-        ("origin_x", po::value<double>(&m_xOrigin)->default_value(std::numeric_limits<double>::quiet_NaN()),
-         "Origin in X axis for splitter cells")
-        ("origin_y", po::value<double>(&m_yOrigin)->default_value(std::numeric_limits<double>::quiet_NaN()),
-         "Origin in Y axis for splitter cells")
-        ("input,i", po::value<std::string>(&m_inputFile)->default_value(""),
-         "input file name")
-        ("output,o", po::value<std::string>(&m_outputFile)->default_value(""),
-         "output file name")
-        ;
-
-    addSwitchSet(file_options);
-    addPositionalSwitch("input", 1);
-    addPositionalSwitch("output", 1);
+    args.add("input,i", "Input filename", m_inputFile).setPositional();
+    args.add("output,o", "Output filename", m_outputFile).setPositional();
+    args.add("length", "Edge length for splitter cells", m_length, 0.0);
+    args.add("capacity", "Point capacity of chipper cells", m_capacity);
+    args.add("origin_x", "Origin in X axis for splitter cells", m_xOrigin,
+        std::numeric_limits<double>::quiet_NaN());
+    args.add("origin_y", "Origin in Y axis for splitter cells", m_yOrigin,
+        std::numeric_limits<double>::quiet_NaN());
 }
 
 
-void SplitKernel::validateSwitches()
+void SplitKernel::validateSwitches(ProgramArgs& args)
 {
 #ifdef WIN32
     char pathSeparator = '\\';
 #else
     char pathSeparator = '/';
 #endif
-    
+
     if (m_length && m_capacity)
         throw pdal_error("Can't specify for length and capacity.");
     if (!m_length && !m_capacity)
@@ -128,26 +110,22 @@ int SplitKernel::execute()
     Stage& reader = makeReader(m_inputFile);
     reader.setOptions(readerOpts);
 
-    std::unique_ptr<Stage> f;
-    StageFactory factory;
     Options filterOpts;
+    Stage& f = (m_length ? createStage("filters.splitter") : createStage("filters.chipper"));
     if (m_length)
     {
-        f.reset(factory.createStage("filters.splitter"));
         filterOpts.add("length", m_length);
         filterOpts.add("origin_x", m_xOrigin);
         filterOpts.add("origin_y", m_yOrigin);
     }
     else
     {
-        f.reset(factory.createStage("filters.chipper"));
         filterOpts.add("capacity", m_capacity);
     }
-    f->setInput(reader);
-    f->setOptions(filterOpts);
-
-    f->prepare(table);
-    PointViewSet pvSet = f->execute(table);
+    f.setInput(reader);
+    f.setOptions(filterOpts);
+    f.prepare(table);
+    PointViewSet pvSet = f.execute(table);
 
     int filenum = 1;
     for (auto& pvp : pvSet)
diff --git a/kernels/split/SplitKernel.hpp b/kernels/split/SplitKernel.hpp
index b60b870..b7fbc44 100644
--- a/kernels/split/SplitKernel.hpp
+++ b/kernels/split/SplitKernel.hpp
@@ -52,8 +52,8 @@ public:
     int execute();
 
 private:
-    void addSwitches();
-    void validateSwitches();
+    void addSwitches(ProgramArgs& args);
+    void validateSwitches(ProgramArgs& args);
 
     std::string m_inputFile;
     std::string m_outputFile;
diff --git a/kernels/tindex/TIndexKernel.cpp b/kernels/tindex/TIndexKernel.cpp
index ac71f0a..8933eb6 100644
--- a/kernels/tindex/TIndexKernel.cpp
+++ b/kernels/tindex/TIndexKernel.cpp
@@ -42,16 +42,15 @@
 #include <memory>
 #include <vector>
 
-#include <pdal/GlobalEnvironment.hpp>
 #include <pdal/KernelFactory.hpp>
 #include <pdal/util/FileUtils.hpp>
 #include <merge/MergeFilter.hpp>
 #include <pdal/PDALUtils.hpp>
+#include <pdal/StageFactory.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <cpl_string.h>
 
-#include <boost/program_options.hpp>
-
 namespace
 {
 
@@ -86,77 +85,46 @@ TIndexKernel::TIndexKernel()
     , m_dataset(NULL)
     , m_layer(NULL)
     , m_fastBoundary(false)
-    , m_smoothBoundary(false)
 
 {
     m_log.setLeader("pdal tindex");
 }
 
 
-void TIndexKernel::addSwitches()
+void TIndexKernel::addSwitches(ProgramArgs& args)
 {
-    namespace po = boost::program_options;
-
-    po::options_description* file_options =
-        new po::options_description("file options");
-
-    file_options->add_options()
-        ("tindex", po::value<std::string>(&m_idxFilename),
-            "OGR-readable/writeable tile index output")
-        ("filespec", po::value<std::string>(&m_filespec),
-            "Build: Pattern of files to index. Merge: Output filename")
-        ("smooth_boundary", po::value<bool>(&m_smoothBoundary)->
-            zero_tokens()->implicit_value(false),
-            "use smoothed version of full boundary")
-        ("fast_boundary", po::value<bool>(&m_fastBoundary)->
-            zero_tokens()->implicit_value(true),
-            "use extent instead of exact boundary")
-        ("lyr_name", po::value<std::string>(&m_layerName),
-            "OGR layer name to write into datasource")
-        ("tindex_name", po::value<std::string>(&m_tileIndexColumnName)->
-            default_value("location"), "Tile index column name")
-        ("driver,f", po::value<std::string>(&m_driverName)->
-            default_value("ESRI Shapefile"), "OGR driver name to use ")
-        ("t_srs", po::value<std::string>(&m_tgtSrsString)->
-            default_value("EPSG:4326"), "Target SRS of tile index")
-        ("a_srs", po::value<std::string>(&m_assignSrsString)->
-            default_value("EPSG:4326"),
-            "Assign SRS of tile with no SRS to this value")
-        ("bounds", po::value<BOX2D>(&m_bounds),
-            "Extent (in XYZ) to clip output to")
-        ("polygon", po::value<std::string>(&m_wkt),
-            "Well-known text of polygon to clip output")
-        ("write_absolute_path", po::value<bool>(&m_absPath)->
-            default_value(false),
-            "Write absolute rather than relative file paths")
-        ("merge", "Whether we're merging the entries in a tindex file.")
-    ;
-
-    addSwitchSet(file_options);
-    po::options_description* processing_options =
-        new po::options_description("processing options");
-
-    processing_options->add_options();
-
-    addSwitchSet(processing_options);
-
-    addPositionalSwitch("tindex", 1);
-    addPositionalSwitch("filespec", 1);
+    args.add("tindex", "OGR-readable/writeable tile index output",
+        m_idxFilename);
+    args.add("filespec", "Build: Pattern of files to index. "
+        "Merge: Output filename", m_filespec).setPositional();
+    args.add("fast_boundary", "Use extent instead of exact boundary",
+        m_fastBoundary);
+    args.add("lyr_name", "OGR layer name to write into datasource",
+        m_layerName);
+    args.add("tindex_name", "Tile index column name", m_tileIndexColumnName,
+        "location");
+    args.add("driver,f", "OGR driver name to use ", m_driverName,
+        "ESRI Shapefile");
+    args.add("t_srs", "Target SRS of tile index", m_tgtSrsString,
+        "EPSG:4326");
+    args.add("a_srs", "Assign SRS of tile with no SRS to this value",
+        m_assignSrsString, "EPSG:4326");
+    args.add("bounds", "Extent (in XYZ) to clip output to", m_bounds);
+    args.add("polygon", "Well-known text of polygon to clip output", m_wkt);
+    args.add("write_absolute_path",
+        "Write absolute rather than relative file paths", m_absPath);
+    args.add("merge", "Whether we're merging the entries in a tindex file.",
+        m_merge);
 }
 
 
-void TIndexKernel::validateSwitches()
+void TIndexKernel::validateSwitches(ProgramArgs& args)
 {
-    m_merge = argumentExists("merge");
-
-    if (m_idxFilename.empty())
-        throw pdal_error("No index filename provided.");
-
     if (m_merge)
     {
         if (!m_wkt.empty() && !m_bounds.empty())
-            throw pdal_error("Can't specify both --polygon and "
-                "--bounds options.");
+            throw pdal_error("Can't specify both 'polygon' and "
+                "'bounds' options.");
         if (!m_bounds.empty())
             m_wkt = m_bounds.toWKT();
         if (m_filespec.empty())
@@ -165,34 +133,31 @@ void TIndexKernel::validateSwitches()
         invalidArgs.push_back("a_srs");
         invalidArgs.push_back("src_srs_name");
         for (auto arg : invalidArgs)
-            if (argumentSpecified(arg))
+            if (args.set(arg))
             {
                 std::ostringstream out;
 
-                out << "option '--" << arg << "' not supported during merge.";
+                out << "option '" << arg << "' not supported during merge.";
                 throw pdal_error(out.str());
             }
     }
     else
     {
         if (m_filespec.empty() && !m_usestdin)
-            throw pdal_error("No input pattern specified and STDIN not given");
-        if (argumentExists("polygon"))
-            throw pdal_error("--polygon option not supported when building "
+            throw pdal_error("No input pattern specified");
+        if (args.set("polygon"))
+            throw pdal_error("'polygon' option not supported when building "
                 "index.");
-        if (argumentExists("bounds"))
-            throw pdal_error("--bounds option not supported when building "
+        if (args.set("bounds"))
+            throw pdal_error("'bounds' option not supported when building "
                 "index.");
     }
-    if (m_smoothBoundary && m_fastBoundary)
-        throw pdal_error("Can't request both smooth_boundary and "
-            "fast_boundary.");
 }
 
 
 int TIndexKernel::execute()
 {
-    GlobalEnvironment::get().initializeGDAL(0);
+    gdal::registerDrivers();
 
     if (m_merge)
         mergeFile();
@@ -404,7 +369,7 @@ void TIndexKernel::mergeFile()
     {
         Stage *premerge = NULL;
         std::string driver = factory.inferReaderDriver(f.m_filename);
-        Stage *reader = factory.createStage(driver, true);
+        Stage *reader = factory.createStage(driver);
         if (!reader)
         {
             out << "Unable to create reader for file '" << f.m_filename << "'.";
@@ -417,7 +382,7 @@ void TIndexKernel::mergeFile()
 
         if (m_tgtSrsString != f.m_srs)
         {
-            Stage *repro = factory.createStage("filters.reprojection", true);
+            Stage *repro = factory.createStage("filters.reprojection");
             repro->setInput(*reader);
             Options reproOptions;
             reproOptions.add("out_srs", m_tgtSrsString);
@@ -430,7 +395,7 @@ void TIndexKernel::mergeFile()
         // can be used as a test here.
         if (!m_wkt.empty())
         {
-            Stage *crop = factory.createStage("filters.crop", true);
+            Stage *crop = factory.createStage("filters.crop");
             crop->setOptions(cropOptions);
             crop->setInput(*premerge);
             premerge = crop;
@@ -441,7 +406,7 @@ void TIndexKernel::mergeFile()
 
     std::string driver = factory.inferWriterDriver(m_filespec);
     Options factoryOptions = factory.inferWriterOptionsChanges(m_filespec);
-    Stage *writer = factory.createStage(driver, true);
+    Stage *writer = factory.createStage(driver);
     if (!writer)
     {
         out << "Unable to create reader for file '" << m_filespec << "'.";
@@ -555,7 +520,7 @@ TIndexKernel::FileInfo TIndexKernel::getFileInfo(KernelFactory& factory,
     StageFactory f;
 
     std::string driverName = f.inferReaderDriver(filename);
-    Stage *s = f.createStage(driverName, true);
+    Stage *s = f.createStage(driverName);
     Options ops;
     ops.add("filename", filename);
     setCommonOptions(ops);
@@ -582,7 +547,7 @@ TIndexKernel::FileInfo TIndexKernel::getFileInfo(KernelFactory& factory,
     {
         PointTable table;
 
-        Stage *hexer = f.createStage("filters.hexbin", true);
+        Stage *hexer = f.createStage("filters.hexbin");
         if (! hexer)
         {
 
@@ -598,9 +563,7 @@ TIndexKernel::FileInfo TIndexKernel::getFileInfo(KernelFactory& factory,
         PointViewSet set = hexer->execute(table);
 
         MetadataNode m = table.metadata();
-        m = m_smoothBoundary ?
-            m.findChild("filters.hexbin:smooth_boundary") :
-            m.findChild("filters.hexbin:boundary");
+        m = m.findChild("filters.hexbin:boundary");
         fileInfo.m_boundary = m.value();
 
         PointViewPtr v = *set.begin();
diff --git a/kernels/tindex/TIndexKernel.hpp b/kernels/tindex/TIndexKernel.hpp
index 52a0ab2..d15b5db 100644
--- a/kernels/tindex/TIndexKernel.hpp
+++ b/kernels/tindex/TIndexKernel.hpp
@@ -76,8 +76,8 @@ public:
 
 private:
     TIndexKernel();
-    void addSwitches(); // overrride
-    void validateSwitches(); // overrride
+    virtual void addSwitches(ProgramArgs& args);
+    virtual void validateSwitches(ProgramArgs& args);
 
     StringList glob(std::string& path);
     void createFile();
@@ -113,7 +113,6 @@ private:
     std::string m_tgtSrsString;
     std::string m_assignSrsString;
     bool m_fastBoundary;
-    bool m_smoothBoundary;
 };
 
 } // namespace pdal
diff --git a/kernels/translate/TranslateKernel.cpp b/kernels/translate/TranslateKernel.cpp
index 7436441..7f20bcd 100644
--- a/kernels/translate/TranslateKernel.cpp
+++ b/kernels/translate/TranslateKernel.cpp
@@ -36,7 +36,6 @@
 #include "TranslateKernel.hpp"
 
 #include <pdal/KernelFactory.hpp>
-#include <pdal/KernelSupport.hpp>
 #include <pdal/Options.hpp>
 #include <pdal/pdal_macros.hpp>
 #include <pdal/PipelineWriter.hpp>
@@ -77,41 +76,14 @@ TranslateKernel::TranslateKernel()
     , m_writerType("")
 {}
 
-void TranslateKernel::validateSwitches()
+void TranslateKernel::addSwitches(ProgramArgs& args)
 {
-    if (m_inputFile == "")
-        throw app_usage_error("--input/-i required");
-
-    if (m_outputFile == "")
-        throw app_usage_error("--output/-o required");
-}
-
-void TranslateKernel::addSwitches()
-{
-    po::options_description* file_options =
-        new po::options_description("file options");
-
-    file_options->add_options()
-    ("input,i", po::value<std::string>(&m_inputFile)->default_value(""),
-     "input file name")
-    ("output,o", po::value<std::string>(&m_outputFile)->default_value(""),
-     "output file name")
-    ("pipeline,p", po::value<std::string>(&m_pipelineOutput)->default_value(""),
-     "pipeline output")
-    ("reader,r", po::value<std::string>(&m_readerType)->default_value(""),
-     "reader type")
-    ("filter,f",
-     po::value<std::vector<std::string> >(&m_filterType)->multitoken(),
-     "filter type")
-    ("writer,w", po::value<std::string>(&m_writerType)->default_value(""),
-     "writer type")
-    ;
-
-    addSwitchSet(file_options);
-
-    addPositionalSwitch("input", 1);
-    addPositionalSwitch("output", 1);
-    addPositionalSwitch("filter", -1);
+    args.add("input,i", "Input filename", m_inputFile).setPositional();
+    args.add("output,o", "Output filename", m_outputFile).setPositional();
+    args.add("filter,f", "Filter type", m_filterType).setOptionalPositional();
+    args.add("pipeline,p", "Pipeline output", m_pipelineOutput);
+    args.add("reader,r", "Reader type", m_readerType);
+    args.add("writer,w", "Writer type", m_writerType);
 }
 
 int TranslateKernel::execute()
@@ -135,7 +107,7 @@ int TranslateKernel::execute()
         std::string driver = factory.inferReaderDriver(m_inputFile);
 
         if (driver.empty())
-            throw app_runtime_error("Cannot determine input file type of " +
+            throw pdal_error("Cannot determine input file type of " +
                                     m_inputFile);
         m_manager->addReader(driver);
     }
@@ -187,8 +159,8 @@ int TranslateKernel::execute()
         std::string driver = factory.inferWriterDriver(m_outputFile);
 
         if (driver.empty())
-            throw app_runtime_error("Cannot determine output file type of " +
-                                    m_outputFile);
+            throw pdal_error("Cannot determine output file type of " +
+                m_outputFile);
         Options options = factory.inferWriterOptionsChanges(m_outputFile);
         writerOptions += options;
         m_manager->addWriter(driver);
@@ -209,10 +181,7 @@ int TranslateKernel::execute()
     m_manager->execute();
 
     if (m_pipelineOutput.size() > 0)
-    {
-        PipelineWriter writer(*m_manager);
-        writer.writePipeline(m_pipelineOutput);
-    }
+        PipelineWriter::writePipeline(m_manager->getStage(), m_pipelineOutput);
 
     return 0;
 }
diff --git a/kernels/translate/TranslateKernel.hpp b/kernels/translate/TranslateKernel.hpp
index 3665336..b9833c2 100644
--- a/kernels/translate/TranslateKernel.hpp
+++ b/kernels/translate/TranslateKernel.hpp
@@ -38,6 +38,7 @@
 #include <pdal/Kernel.hpp>
 #include <pdal/PipelineManager.hpp>
 #include <pdal/pdal_export.hpp>
+#include <pdal/plugin.hpp>
 
 #include <memory>
 #include <string>
@@ -59,8 +60,7 @@ public:
 
 private:
     TranslateKernel();
-    void addSwitches();
-    void validateSwitches();
+    virtual void addSwitches(ProgramArgs& args);
 
     std::string m_inputFile;
     std::string m_outputFile;
diff --git a/pdal_defines.h.in b/pdal_defines.h.in
index 71e0675..a611df2 100644
--- a/pdal_defines.h.in
+++ b/pdal_defines.h.in
@@ -26,24 +26,11 @@
 /*
  * availability of 3rd-party libraries
  */
-#cmakedefine PDAL_HAVE_GEOS
 #cmakedefine PDAL_HAVE_HDF5
-#cmakedefine PDAL_HAVE_HEXER
 #cmakedefine PDAL_HAVE_LASZIP
 #cmakedefine PDAL_HAVE_LAZPERF
 #cmakedefine PDAL_HAVE_LIBXML2
 #cmakedefine PDAL_HAVE_LIBGEOTIFF
-#cmakedefine PDAL_HAVE_MRSID
-#cmakedefine PDAL_HAVE_NITRO
-#cmakedefine PDAL_HAVE_ORACLE
-#cmakedefine PDAL_HAVE_P2G
-#cmakedefine PDAL_HAVE_SQLITE
-#cmakedefine PDAL_HAVE_POSTGRESQL
-
-/*
- * platform endianness
- */
-#cmakedefine PDAL_ENDIAN_AWARE
 
 /*
  * Debug or Release build?
@@ -74,6 +61,4 @@
  */
 #cmakedefine PDAL_APP_BUNDLE
 
-#define PDAL_PYTHON_LIBRARY "${PYTHON_LIBRARY}"
-
 #endif
diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt
index 04b7865..ea95165 100644
--- a/plugins/CMakeLists.txt
+++ b/plugins/CMakeLists.txt
@@ -1,6 +1,4 @@
-if(BUILD_PLUGIN_ATTRIBUTE)
-    add_subdirectory(attribute)
-endif()
+include(${PDAL_CMAKE_DIR}/test.cmake)
 
 if(BUILD_PLUGIN_CPD)
     add_subdirectory(cpd)
@@ -61,4 +59,3 @@ endif(BUILD_PLUGIN_RIVLIB)
 if(BUILD_PLUGIN_SQLITE)
     add_subdirectory(sqlite)
 endif()
-
diff --git a/plugins/attribute/CMakeLists.txt b/plugins/attribute/CMakeLists.txt
deleted file mode 100644
index 90b499f..0000000
--- a/plugins/attribute/CMakeLists.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Attribute filter CMake configuration
-#
-
-find_package(GEOS QUIET 3.3)
-set_package_properties(GEOS PROPERTIES PURPOSE "Enables attribute filter")
-
-find_package(GDAL QUIET 1.9.0)
-set_package_properties(GDAL PROPERTIES PURPOSE "Enables attribute filter")
-
-if (GEOS_FOUND AND GDAL_FOUND)
-
-    set(srcs filters/AttributeFilter.cpp)
-    set(incs filters/AttributeFilter.hpp)
-
-    PDAL_ADD_PLUGIN(libname filter attribute
-        FILES "${srcs}" "${incs}"
-        LINK_WITH ${GEOS_LIBRARY} ${GDAL_LIBRARY})
-
-    if (WITH_TESTS)
-        PDAL_ADD_TEST(pdal_filters_attribute_test
-            FILES test/AttributeFilterTest.cpp)
-    endif()
-else()
-    message(STATUS "BUILD_PLUGIN_ATTRIBUTE disabled because GEOS and/or GDAL was not found")
-endif()
diff --git a/plugins/attribute/filters/AttributeFilter.cpp b/plugins/attribute/filters/AttributeFilter.cpp
deleted file mode 100644
index 9970077..0000000
--- a/plugins/attribute/filters/AttributeFilter.cpp
+++ /dev/null
@@ -1,374 +0,0 @@
-/******************************************************************************
-* Copyright (c) 2014, Howard Butler, howard at hobu.co
-*
-* 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 in
-*       the documentation and/or other materials provided
-*       with the distribution.
-*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
-*       names of its contributors may be used to endorse or promote
-*       products derived from this software without specific prior
-*       written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-* OF SUCH DAMAGE.
-****************************************************************************/
-
-#include "AttributeFilter.hpp"
-
-#include <memory>
-#include <vector>
-
-#include <pdal/GlobalEnvironment.hpp>
-#include <pdal/GDALUtils.hpp>
-
-#include <pdal/StageFactory.hpp>
-#include <pdal/QuadIndex.hpp>
-
-#include <ogr_geometry.h>
-#include <geos_c.h>
-
-namespace pdal
-{
-
-static PluginInfo const s_info = PluginInfo(
-    "filters.attribute",
-    "Assign values for a dimension using a specified value, \n" \
-        "an OGR-readable data source, or an OGR SQL query.",
-    "http://pdal.io/stages/filters.attribute.html" );
-
-CREATE_SHARED_PLUGIN(1, 0, AttributeFilter, Filter, s_info)
-
-struct OGRDataSourceDeleter
-{
-    template <typename T>
-    void operator()(T* ptr)
-    {
-        if (ptr)
-            ::OGR_DS_Destroy(ptr);
-    }
-};
-
-namespace
-{
-
-static void _GEOSErrorHandler(const char *fmt, ...)
-{
-    va_list args;
-
-    va_start(args, fmt);
-    char buf[1024];
-
-    vsnprintf(buf, sizeof(buf), fmt, args);
-
-    va_end(args);
-}
-
-static void _GEOSWarningHandler(const char *fmt, ...)
-{
-    va_list args;
-
-    char buf[1024];
-    vsnprintf(buf, sizeof(buf), fmt, args);
-    std::cout << "GEOS warning: " << buf << std::endl;
-
-    va_end(args);
-}
-
-} // unnamed namespace
-
-struct OGRFeatureDeleter
-{
-    template <typename T>
-    void operator()(T* ptr)
-    {
-        if (ptr)
-            ::OGR_F_Destroy(ptr);
-    }
-};
-
-void AttributeFilter::initialize()
-{
-    GlobalEnvironment::get().initializeGDAL(log(), isDebug());
-}
-
-
-Options AttributeFilter::getDefaultOptions()
-{
-    Options options;
-
-    options.add("dimension", "Classification");
-    options.add("datasource", "source");
-
-    return options;
-}
-
-
-void AttributeFilter::processOptions(const Options& options)
-{
-    if (!options.hasOption("dimension"))
-    {
-        std::ostringstream oss;
-        oss << getName() << ": option 'dimension' must be specified.";
-        throw pdal_error(oss.str());
-    }
-    if (options.hasOption("value") && options.hasOption("datasource"))
-    {
-        std::ostringstream oss;
-        oss << getName() << ": options 'value' and 'datasource' mutually "
-            "exclusive.";
-        throw pdal_error(oss.str());
-    }
-    if (!options.hasOption("value") && !options.hasOption("datasource"))
-    {
-        std::ostringstream oss;
-        oss << getName() << ": Either option 'value' or 'datasource' must "
-            "be specified.";
-        throw pdal_error(oss.str());
-    }
-
-    std::string ops[] = { "column", "query", "layer" };
-    for (auto& op : ops)
-    {
-        if (options.hasOption("value") && options.hasOption(op))
-        {
-            std::ostringstream oss;
-            oss << getName() << ": option 'op' invalid with option 'value'.";
-            throw pdal_error(oss.str());
-        }
-    }
-
-    m_dimName = options.getValueOrDefault<std::string>("dimension");
-    m_value = options.getValueOrDefault<double>("value",
-        std::numeric_limits<double>::quiet_NaN());
-    m_datasource = options.getValueOrDefault<std::string>("datasource");
-    m_column = options.getValueOrDefault<std::string>("column");
-    m_query = options.getValueOrDefault<std::string>("query");
-    m_layer = options.getValueOrDefault<std::string>("layer");
-}
-
-
-void AttributeFilter::prepared(PointTableRef table)
-{
-    m_dim = table.layout()->findDim(m_dimName);
-    if (m_dim == Dimension::Id::Unknown)
-    {
-        std::ostringstream oss;
-        oss << getName() << ": Dimension '" << m_dimName << "' not found.";
-        throw pdal_error(oss.str());
-    }
-}
-
-
-void AttributeFilter::ready(PointTableRef table)
-{
-    if (m_value != m_value)
-    {
-        m_ds = OGRDSPtr(OGROpen(m_datasource.c_str(), 0, 0),
-            OGRDataSourceDeleter());
-        if (!m_ds)
-        {
-            std::ostringstream oss;
-            oss << getName() << ": Unable to open data source '" <<
-                    m_datasource << "'";
-            throw pdal_error(oss.str());
-        }
-    }
-}
-
-
-BOX3D computeBounds(GEOSContextHandle_t ctx, GEOSGeometry const *geometry)
-{
-    uint32_t numInputDims;
-    BOX3D output;
-
-
-    GEOSGeometry const* ring = GEOSGetExteriorRing_r(ctx,
-        geometry);
-    GEOSCoordSequence const* coords = GEOSGeom_getCoordSeq_r(ctx,
-        ring);
-
-    GEOSCoordSeq_getDimensions_r(ctx, coords, &numInputDims);
-
-    uint32_t count(0);
-    GEOSCoordSeq_getSize_r(ctx, coords, &count);
-
-    double x(0.0);
-    double y(0.0);
-    double z(0.0);
-    for (unsigned i = 0; i < count; ++i)
-    {
-        GEOSCoordSeq_getOrdinate_r(ctx, coords, i, 0, &x);
-        GEOSCoordSeq_getOrdinate_r(ctx, coords, i, 1, &y);
-        if (numInputDims > 2)
-            GEOSCoordSeq_getOrdinate_r(ctx, coords, i, 2, &z);
-        output.grow(x, y, z);
-    }
-    return output;
-}
-
-
-GEOSGeometry* createGEOSPoint(GEOSContextHandle_t ctx,
-    double x, double y, double z)
-{
-    int ret(0);
-
-    // precise filtering based on the geometry
-    GEOSCoordSequence* coords = GEOSCoordSeq_create_r(ctx, 1, 3);
-    if (!coords)
-        throw pdal_error("unable to allocate coordinate sequence");
-    ret = GEOSCoordSeq_setX_r(ctx, coords, 0, x);
-    if (!ret)
-        throw pdal_error("unable to set x for coordinate sequence");
-    ret = GEOSCoordSeq_setY_r(ctx, coords, 0, y);
-    if (!ret)
-        throw pdal_error("unable to set y for coordinate sequence");
-    ret = GEOSCoordSeq_setZ_r(ctx, coords, 0, z);
-    if (!ret)
-        throw pdal_error("unable to set z for coordinate sequence");
-
-    GEOSGeometry* p = GEOSGeom_createPoint_r(ctx, coords);
-    if (!p)
-        throw pdal_error("unable to allocate candidate test point");
-    return p;
-}
-
-
-void AttributeFilter::UpdateGEOSBuffer(PointView& view)
-{
-    QuadIndex idx(view);
-
-    if (m_layer.size())
-        m_lyr = OGR_DS_GetLayerByName(m_ds.get(), m_layer.c_str());
-    else if (m_query.size())
-        m_lyr = OGR_DS_ExecuteSQL(m_ds.get(), m_query.c_str(), 0, 0);
-    else
-        m_lyr = OGR_DS_GetLayer(m_ds.get(), 0);
-
-    if (!m_lyr)
-    {
-        std::ostringstream oss;
-        oss << getName() << ": Unable to select layer '" << m_layer << "'";
-        throw pdal_error(oss.str());
-    }
-
-    OGRFeaturePtr feature = OGRFeaturePtr(OGR_L_GetNextFeature(m_lyr),
-        OGRFeatureDeleter());
-
-    int field_index(1); // default to first column if nothing was set
-    if (m_column.size())
-    {
-        field_index = OGR_F_GetFieldIndex(feature.get(), m_column.c_str());
-        if (field_index == -1)
-        {
-            std::ostringstream oss;
-            oss << getName() << ": No column name '" << m_column <<
-                "' was found.";
-            throw pdal_error(oss.str());
-        }
-    }
-
-    while (feature)
-    {
-        OGRGeometryH geom = OGR_F_GetGeometryRef(feature.get());
-        OGRwkbGeometryType t = OGR_G_GetGeometryType(geom);
-        int32_t fieldVal = OGR_F_GetFieldAsInteger(feature.get(), field_index);
-
-        if (!(t == wkbPolygon ||
-            t == wkbMultiPolygon ||
-            t == wkbPolygon25D ||
-            t == wkbMultiPolygon25D))
-        {
-            std::ostringstream oss;
-            oss << getName() << ": Geometry is not Polygon or MultiPolygon!";
-            throw pdal::pdal_error(oss.str());
-        }
-
-        OGRGeometry *ogr_g = (OGRGeometry*)geom;
-        if (!m_geosEnvironment)
-            m_geosEnvironment = initGEOS_r(_GEOSWarningHandler,
-                _GEOSErrorHandler);
-
-        // Convert the the GDAL geom to WKB in order to avoid the version
-        // context issues with exporting directoly to GEOS.
-        OGRwkbByteOrder bo =
-            GEOS_getWKBByteOrder() == GEOS_WKB_XDR ? wkbXDR : wkbNDR;
-        int wkbSize = ogr_g->WkbSize();
-        std::vector<unsigned char> wkb(wkbSize);
-
-        ogr_g->exportToWkb(bo, wkb.data());
-        GEOSGeometry *geos_g = GEOSGeomFromWKB_buf_r(m_geosEnvironment,
-            wkb.data(), wkbSize);
-
-        GEOSPreparedGeometry const* geos_pg = GEOSPrepare_r(m_geosEnvironment,
-            geos_g);
-        if (!geos_pg)
-        {
-            std::ostringstream oss;
-            oss << getName() << ": unable to prepare geometry for "
-                "index-accelerated intersection";
-            throw pdal_error(oss.str());
-        }
-
-        // Compute a total bounds for the geometry. Query the QuadTree to
-        // find out the points that are inside the bbox. Then test each
-        // point in the bbox against the prepared geometry.
-        BOX3D box = computeBounds(m_geosEnvironment, geos_g);
-        std::vector<PointId> ids = idx.getPoints(box);
-        for (const auto& i : ids)
-        {
-            double x = view.getFieldAs<double>(Dimension::Id::X, i);
-            double y = view.getFieldAs<double>(Dimension::Id::Y, i);
-            double z = view.getFieldAs<double>(Dimension::Id::Z, i);
-
-            GEOSGeometry* p = createGEOSPoint(m_geosEnvironment, x, y ,z);
-
-            if ((bool)(GEOSPreparedCovers_r(m_geosEnvironment, geos_pg, p)))
-            {
-                // We're in the poly, write the attribute value
-                view.setField(m_dim, i, fieldVal);
-            }
-            GEOSGeom_destroy_r(m_geosEnvironment, p);
-        }
-        feature = OGRFeaturePtr(OGR_L_GetNextFeature(m_lyr),
-            OGRFeatureDeleter());
-    }
-}
-
-
-void AttributeFilter::filter(PointView& view)
-{
-    if (m_value == m_value)
-        for (PointId i = 0; i < view.size(); ++i)
-            view.setField(m_dim, i, m_value);
-    else
-        UpdateGEOSBuffer(view);
-}
-
-
-void AttributeFilter::done(PointTableRef /*table*/)
-{
-    if (m_geosEnvironment)
-        finishGEOS_r(m_geosEnvironment);
-    m_geosEnvironment = 0;
-}
-
-} // namespace pdal
diff --git a/plugins/attribute/filters/AttributeFilter.hpp b/plugins/attribute/filters/AttributeFilter.hpp
deleted file mode 100644
index 8feb0e8..0000000
--- a/plugins/attribute/filters/AttributeFilter.hpp
+++ /dev/null
@@ -1,101 +0,0 @@
-/******************************************************************************
-* Copyright (c) 2014, Howard Butler <hobu.inc at gmail.com>
-*
-* 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 in
-*       the documentation and/or other materials provided
-*       with the distribution.
-*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
-*       names of its contributors may be used to endorse or promote
-*       products derived from this software without specific prior
-*       written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-* OF SUCH DAMAGE.
-****************************************************************************/
-
-#pragma once
-
-#include <pdal/Filter.hpp>
-
-#include <map>
-#include <memory>
-#include <string>
-
-typedef struct GEOSContextHandle_HS *GEOSContextHandle_t;
-
-typedef void *OGRLayerH;
-
-
-namespace pdal
-{
-
-namespace gdal
-{
-    class ErrorHandler;
-}
-
-typedef std::shared_ptr<void> OGRDSPtr;
-typedef std::shared_ptr<void> OGRFeaturePtr;
-typedef std::shared_ptr<void> OGRGeometryPtr;
-
-class PDAL_DLL AttributeFilter : public Filter
-{
-public:
-    AttributeFilter() : Filter(), m_ds(0), m_lyr(0), m_geosEnvironment(0)
-    {}
-
-    static void * create();
-    static int32_t destroy(void *);
-    std::string getName() const { return "filters.attribute"; }
-
-    Options getDefaultOptions();
-
-private:
-    virtual void initialize();
-    virtual void processOptions(const Options&);
-    virtual void prepared(PointTableRef table);
-    virtual void ready(PointTableRef table);
-    virtual void filter(PointView& view);
-    virtual void done(PointTableRef table);
-
-    AttributeFilter& operator=(const AttributeFilter&); // not implemented
-    AttributeFilter(const AttributeFilter&); // not implemented
-
-    typedef std::shared_ptr<void> OGRDSPtr;
-
-    OGRDSPtr m_ds;
-    OGRLayerH m_lyr;
-    std::string m_dimName;
-    double m_value;
-    std::string m_datasource;
-    std::string m_column;
-    std::string m_query;
-    std::string m_layer;
-    Dimension::Id::Enum m_dim;
-
-    GEOSContextHandle_t m_geosEnvironment;
-    std::unique_ptr<pdal::gdal::ErrorHandler> m_gdal_debug;
-    void UpdateGEOSBuffer(PointView& view);
-
-};
-
-} // namespace pdal
diff --git a/plugins/attribute/test/AttributeFilterTest.cpp b/plugins/attribute/test/AttributeFilterTest.cpp
deleted file mode 100644
index 8d74b1b..0000000
--- a/plugins/attribute/test/AttributeFilterTest.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/******************************************************************************
-* Copyright (c) 2015, Hobu Inc. (info at hobu.co)
-*
-* 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 in
-*       the documentation and/or other materials provided
-*       with the distribution.
-*     * Neither the name of Hobu, Inc. nor the
-*       names of its contributors may be used to endorse or promote
-*       products derived from this software without specific prior
-*       written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-* OF SUCH DAMAGE.
-****************************************************************************/
-
-#include <pdal/pdal_test_main.hpp>
-
-#include <pdal/StageFactory.hpp>
-#include <pdal/util/FileUtils.hpp>
-
-#include "Support.hpp"
-
-using namespace pdal;
-
-TEST(AttributeFilterTest, value)
-{
-    Options ro;
-    ro.add("filename", Support::datapath("autzen/autzen-dd.las"));
-
-    StageFactory factory;
-    Stage& r = *(factory.createStage("readers.las", true));
-    r.setOptions(ro);
-
-    Options fo;
-    fo.add("dimension", "X");
-    fo.add("value", 27.5);
-
-    Stage& f = *(factory.createStage("filters.attribute", true));
-    f.setInput(r);
-    f.setOptions(fo);
-
-    std::string tempfile(Support::temppath("out.las"));
-
-    Options wo;
-    wo.add("filename", tempfile);
-    Stage& w = *(factory.createStage("writers.las", true));
-    w.setInput(f);
-    w.setOptions(wo);
-
-    FileUtils::deleteFile(tempfile);
-    PointTable t1;
-    w.prepare(t1); 
-    w.execute(t1);
-
-    Options testOptions;
-    testOptions.add("filename", tempfile);
-
-    Stage& test = *(factory.createStage("readers.las", true)); 
-    test.setOptions(testOptions);
-
-    PointTable t2;
-    test.prepare(t2);
-    PointViewSet s = test.execute(t2);
-    PointViewPtr v = *s.begin();
-    for (PointId i = 0; i < v->size(); ++i)
-        EXPECT_DOUBLE_EQ(v->getFieldAs<double>(Dimension::Id::X, i), 27.5);
-}
-
-TEST(AttributeFilterTest, datasource)
-{
-    Options ro;
-    ro.add("filename", Support::datapath("autzen/autzen-dd.las"));
-
-    StageFactory factory;
-    Stage& r = *(factory.createStage("readers.las", true));
-    r.setOptions(ro);
-
-    Options fo;
-    fo.add("dimension", "Classification");
-    fo.add("column", "cls");
-    fo.add("datasource", Support::datapath("autzen/attributes.shp"));
-
-    Stage& f = *(factory.createStage("filters.attribute", true));
-    f.setInput(r);
-    f.setOptions(fo);
-
-    std::string tempfile(Support::temppath("out.las"));
-
-    Options wo;
-    wo.add("filename", tempfile);
-    wo.add("forward", "all");
-    Stage& w = *(factory.createStage("writers.las", true));
-    w.setInput(f);
-    w.setOptions(wo);
-
-    FileUtils::deleteFile(tempfile);
-    PointTable t;
-    w.prepare(t); 
-    w.execute(t);
-
-// 
-//
-    Options testOptions;
-    testOptions.add("filename", tempfile);
-
-    Stage& test = *(factory.createStage("readers.las", true)); 
-    test.setOptions(testOptions);
-
-    Stage& c = *(factory.createStage("filters.crop", true));
-    c.setInput(test);
-
-    Options o1;
-    o1.add("polygon", "POLYGON ((-123.067019000727967 44.059524946819884,-123.066697831944637 44.059771500882199,-123.065494970755537 44.059838504937517,-123.064074882074451 44.059742872480356,-123.063707784110264 44.059184772926969,-123.06401206144227 44.05752667418929,-123.065925935478475 44.057786669839672,-123.065745673821624 44.058221493390228,-123.06633379431868 44.058264073197797,-123.066237450902648 44.058593303895073,-123.06633104847343 44.058966114097124,-123.06667192031054 44. [...]
-
-    c.setOptions(o1);
-
-    PointTable t1;
-    c.prepare(t1);
-    PointViewSet s = c.execute(t1);
-    PointViewPtr v = *s.begin();
-    for (PointId i = 0; i < v->size(); ++i)
-        EXPECT_EQ(v->getFieldAs<int>(Dimension::Id::Classification, i), 2);
-
-    Options o2;
-    o2.add("polygon", "POLYGON ((-123.064404672110015 44.062248205780641,-123.063001791092177 44.062295757390288,-123.062938948566199 44.061866413306625,-123.063711529699802 44.061825083575727,-123.062903757506561 44.060798284876931,-123.0634590922878 44.06084959530147,-123.063939134831102 44.061205726019097,-123.064707560079256 44.061834553141757,-123.064404672110015 44.062248205780641))");
-    c.setOptions(o2);
-
-    PointTable t2;
-    c.prepare(t2);
-    s = c.execute(t2);
-    v = *s.begin();
-    for (PointId i = 0; i < v->size(); ++i)
-        EXPECT_EQ(v->getFieldAs<int>(Dimension::Id::Classification, i), 5);
-
-    Options o3;
-    o3.add("polygon", "POLYGON ((-123.071105494548775 44.059121603563895,-123.070160265697027 44.059007342229378,-123.070431650409773 44.058379004056327,-123.071225617617372 44.058576450660659,-123.071105494548775 44.059121603563895))");
-    c.setOptions(o3);
-
-    PointTable t3;
-    c.prepare(t3);
-    s = c.execute(t3);
-    v = *s.begin();
-    for (PointId i = 0; i < v->size(); ++i)
-        EXPECT_EQ(v->getFieldAs<int>(Dimension::Id::Classification, i), 6);
-
-    Options o4;
-    o4.add("polygon", "POLYGON ((-123.06887558672102 44.059227793751305,-123.068425255931515 44.059301773132752,-123.067936238335534 44.059248990941661,-123.06749590912527 44.059043544671049,-123.06710185170931 44.058629650191868,-123.067099413306224 44.058063335596437,-123.067333190514816 44.057587417330502,-123.067852567837207 44.057320435256116,-123.068290450314009 44.057214830538491,-123.068899280712444 44.057225021409202,-123.069338909397359 44.057414523826182,-123.069655618140771 4 [...]
-    c.setOptions(o4);
-
-    PointTable t4;
-    c.prepare(t4);
-    s = c.execute(t4);
-    v = *s.begin();
-    for (PointId i = 0; i < v->size(); ++i)
-        EXPECT_EQ(v->getFieldAs<int>(Dimension::Id::Classification, i), 6);
-
-    Options o5;
-    o5.add("polygon", "POLYGON ((-123.071871740947586 44.058426242457685,-123.070376025800414 44.058117017731242,-123.07060216253906 44.057465769662898,-123.072144836409578 44.057837746292243,-123.071871740947586 44.058426242457685))");
-    c.setOptions(o5);
-
-    PointTable t5;
-    c.prepare(t5);
-    s = c.execute(t5);
-    v = *s.begin();
-    for (PointId i = 0; i < v->size(); ++i)
-        EXPECT_EQ(v->getFieldAs<int>(Dimension::Id::Classification, i), 6);
-}
diff --git a/plugins/cpd/CMakeLists.txt b/plugins/cpd/CMakeLists.txt
index acda39f..30d0aa3 100644
--- a/plugins/cpd/CMakeLists.txt
+++ b/plugins/cpd/CMakeLists.txt
@@ -1,41 +1,30 @@
-# CPD plugin CMake configuration
-#
-# CPD is Coherent Point Drift: https://github.com/gadomski/cpd
+find_package(Cpd 0.3 REQUIRED)
 
-find_package(CPD 0.2 REQUIRED)
-
-set_package_properties(CPD PROPERTIES
+set_package_properties(Cpd PROPERTIES
     DESCRIPTION "Coherent Point Drift"
     URL "https://github.com/gadomski/cpd"
     TYPE OPTIONAL
-    PURPOSE "Run the coherent point drift registration/change algorithm on two datasets via a kernel"
-    )
-
-include_directories(
-    ${CMAKE_CURRENT_LIST_DIR}
-    include
-    ${CPD_INCLUDE_DIRS}
-    )
-
-set(src
-    kernel/Cpd.cpp
-    )
-
-set(deps
-    cpd
+    PURPOSE "Register two point sets using the Coherent Point Drift algorithm"
     )
 
 PDAL_ADD_PLUGIN(cpd_kernel_lib_name kernel cpd
-    FILES ${src}
-    LINK_WITH ${deps}
+    FILES kernel/Cpd.cpp
+    LINK_WITH Cpd::Library-C++
+    )
+target_include_directories(${cpd_kernel_lib_name}
+    PRIVATE
+    ${CMAKE_CURRENT_LIST_DIR}
     )
 
-if (WITH_TESTS)
-    include_directories(
-        ${PROJECT_SOURCE_DIR}/test/unit
-        )
+if(WITH_TESTS)
     PDAL_ADD_TEST(pdal_plugins_cpd_kernel_test
         FILES test/CpdKernelTest.cpp
-        LINK_WITH ${deps}
+        LINK_WITH Cpd::Library-C++
+        )
+    target_include_directories(pdal_plugins_cpd_kernel_test
+        PRIVATE
+        ${CMAKE_CURRENT_LIST_DIR}
+        ${PROJECT_SOURCE_DIR}/io/las
+        ${PROJECT_SOURCE_DIR}/test/unit
         )
-endif(WITH_TESTS)
+endif()
diff --git a/plugins/cpd/kernel/Cpd.cpp b/plugins/cpd/kernel/Cpd.cpp
index 314a323..7ae9399 100644
--- a/plugins/cpd/kernel/Cpd.cpp
+++ b/plugins/cpd/kernel/Cpd.cpp
@@ -33,101 +33,78 @@
  ****************************************************************************/
 
 #include "kernel/Cpd.hpp"
+#include <pdal/pdal_macros.hpp>
+
+#include <cpd/rigid.hpp>
+#include <cpd/nonrigid.hpp>
 
-#include <pdal/BufferReader.hpp>
 #include <pdal/KernelFactory.hpp>
+#include <pdal/StageFactory.hpp>
 
 #include "chipper/ChipperFilter.hpp"
 #include "crop/CropFilter.hpp"
+#include "buffer/BufferReader.hpp"
 
 namespace pdal
 {
 
 static PluginInfo const s_info = PluginInfo(
-    "kernels.cpd",
-    "CPD Kernel",
-    "http://pdal.io/kernels/kernels.cpd.html" );
+                                     "kernels.cpd",
+                                     "CPD Kernel",
+                                     "http://pdal.io/kernels/kernels.cpd.html" );
 
 CREATE_SHARED_PLUGIN(1, 0, CpdKernel, Kernel, s_info)
 
-std::string CpdKernel::getName() const { return s_info.name; }
-
-void CpdKernel::validateSwitches()
-{
-    if (m_filex == "")
-        throw app_usage_error("--filex/-x required");
-    if (m_filey == "")
-        throw app_usage_error("--filey/-y required");
-    if (m_output == "")
-        throw app_usage_error("--output/-o required");
+std::string CpdKernel::getName() const {
+    return s_info.name;
 }
 
-
-void CpdKernel::addSwitches()
+void CpdKernel::addSwitches(ProgramArgs& args)
 {
-    using namespace cpd;
-
-    po::options_description* file_options =
-        new po::options_description("file options");
-
-    file_options->add_options()
-        ("filex,x", po::value<std::string>(&m_filex)->default_value(""),
-         "input file containing the source points")
-        ("filey,y", po::value<std::string>(&m_filey)->default_value(""),
-         "input file containg target points, i.e. the points that will be registered")
-        ("output,o", po::value<std::string>(&m_output)->default_value(""),
-         "output file name")
-        ("tolerance,t", po::value<float>(&m_tolerance)->default_value(DefaultTolerance),
-            "tolerance criterium")
-        ("max-iterations,m", po::value<int>(&m_max_it)->default_value(DefaultMaxIterations),
-            "maximum number of iterations allowed")
-        ("outliers,O", po::value<float>(&m_outliers)->default_value(DefaultOutliers),
-            "the weight of noise and outliers")
-        ("fgt,f", po::value<bool>(&m_fgt)->default_value(DefaultFgt),
-            "use a fast gauss transform (less accurate but faster)")
-        ("epsilon,e", po::value<float>(&m_epsilon)->default_value(DefaultEpsilon),
-            "tolerance level for the fast gauss transform")
-        ("beta,b", po::value<float>(&m_beta)->default_value(DefaultBeta),
-            "std of gaussian filter (Green's function, used for nonrigid registrations only)")
-        ("lambda,l", po::value<float>(&m_lambda)->default_value(DefaultLambda),
-            "regularization weight (used for nonrigid registrations only)")
-        ("numeig,n", po::value<arma::uword>(&m_numeig)->default_value(DefaultNumeig),
-            "number of eigenvectors/eigenvalues to find for nonrigid_lowrank registrations (if zero, default to N ^ (1/2) where N is the number of points in Y)")
-        ("bounds", po::value<BOX3D>(&m_bounds),
-            "Extent (in XYZ) to clip output to")
-        ("auto-z-exaggeration", po::value<bool>(&m_auto_z_exaggeration)->default_value(false),
-            "Use the domain of the XY dimensions to automatically exaggerate the Z dimensions")
-        ("auto-z-exaggeration-ratio", po::value<float>(&m_auto_z_exaggeration_ratio)->default_value(5.0 / 8.0),
-            "The scaling ratio for the Z-exaggeration. Z's range will be scaled to this ratio of the extent of the smallest XY extent.")
-        ("chipped", po::value<bool>(&m_chipped)->default_value(false),
-            "Run chipped registration")
-        ("chip-capacity", po::value<int>(&m_chip_capacity)->default_value(8000),
-            "The maximum number of points in each chip (before buffer)")
-        ("chip-buffer", po::value<float>(&m_chip_buffer)->default_value(50),
-            "The width of the buffer around each chip")
-        ("sigma2", po::value<float>(&m_sigma2)->default_value(DefaultSigma2),
-            "The starting sigma2 value. To improve CPD runs, set to a bit more than you expect the average motion to be")
-        ;
-
-    addSwitchSet(file_options);
-
-    addPositionalSwitch("filex", 1);
-    addPositionalSwitch("filey", 1);
-    addPositionalSwitch("output", 1);
+    Arg& method = args.add("method,M", "registration method (rigid, nonrigid)",
+                           m_method);
+    method.setPositional();
+    Arg& filex = args.add("filex,x", "input file containing the source points",
+                          m_filex);
+    filex.setPositional();
+    Arg& filey = args.add("filey,y", "input file containg target points, "
+                          "i.e. the points that will be registered", m_filey);
+    filey.setPositional();
+    Arg& output = args.add("output,o", "output file name", m_output);
+    output.setPositional();
+    args.add("tolerance,t", "tolerance criterium", m_tolerance,
+             cpd::Rigid::DEFAULT_TOLERANCE);
+    args.add("max-iterations,m", "maximum number of iterations allowed",
+             m_max_it, cpd::Rigid::DEFAULT_MAX_ITERATIONS);
+    args.add("outliers,O", "the weight of noise and outliers",
+             m_outliers, cpd::Rigid::DEFAULT_OUTLIER_WEIGHT);
+    args.add("no-reflections,r", "Prevent reflections of the data",
+             m_no_reflections, true);
+    args.add("allow-scaling,S", "Allow scaling of the data",
+             m_allow_scaling, false);
+    args.add("beta,b", "std of gaussian filter (Green's function, used "
+             "for nonrigid registrations only)", m_beta, cpd::Nonrigid::DEFAULT_BETA);
+    args.add("lambda,l", "regularization weight (used for nonrigid "
+             "registrations only)", m_lambda, cpd::Nonrigid::DEFAULT_LAMBDA);
+    args.add("bounds", "Extent (in XYZ) to clip output to", m_bounds);
+    args.add("sigma2",
+             "The starting sigma2 value. To improve CPD runs, set to a bit "
+             "more than you expect the average motion to be",
+             m_sigma2, 0.0);
 }
 
 
-PointViewPtr CpdKernel::readFile(const std::string& filename,
-    PointTableRef table, arma::mat& mat)
+cpd::Matrix CpdKernel::readFile(const std::string& filename)
 {
     Options opt;
-    opt.add<std::string>("filename", filename);
-    opt.add<bool>("debug", isDebug());
-    opt.add<boost::uint32_t>("verbose", getVerboseLevel());
+    opt.add("filename", filename);
+    opt.add("debug", isDebug());
+    opt.add("verbose", getVerboseLevel());
 
     Stage& reader = makeReader(filename);
     reader.setOptions(opt);
 
+    PointTable table;
     PointViewSet viewSet;
     if (!m_bounds.empty())
     {
@@ -135,11 +112,11 @@ PointViewPtr CpdKernel::readFile(const std::string& filename,
         boundsOptions.add("bounds", m_bounds);
         StageFactory f;
 
-        Stage& crop = ownStage(f.createStage("filters.crop"));
-        crop.setInput(reader);
-        crop.setOptions(boundsOptions);
-        crop.prepare(table);
-        viewSet = crop.execute(table);
+        Stage *crop = f.createStage("filters.crop");
+        crop->setInput(reader);
+        crop->setOptions(boundsOptions);
+        crop->prepare(table);
+        viewSet = crop->execute(table);
     }
     else
     {
@@ -147,35 +124,30 @@ PointViewPtr CpdKernel::readFile(const std::string& filename,
         viewSet = reader.execute(table);
     }
 
-
-    const arma::uword D = 3;
+    cpd::Matrix matrix(0, 3);
     for (auto it = viewSet.begin(); it != viewSet.end(); ++it)
     {
         PointViewPtr view = *it;
-
         point_count_t rowidx;
-        if (mat.is_empty())
+        if (matrix.rows() == 0)
         {
             rowidx = 0;
-            mat.set_size(view->size(), D);
+            matrix.resize(view->size(), 3);
         }
         else
         {
-            rowidx = mat.n_rows;
-            mat.set_size(mat.n_rows + (*it)->size(), D);
+            rowidx = matrix.rows();
+            matrix.conservativeResize(matrix.rows() + view->size(), 3);
         }
 
         for (point_count_t bufidx = 0; bufidx < view->size(); ++bufidx, ++rowidx)
         {
-            mat(rowidx, 0) = view->getFieldAs<double>(Dimension::Id::X, bufidx);
-            mat(rowidx, 1) = view->getFieldAs<double>(Dimension::Id::Y, bufidx);
-            mat(rowidx, 2) = view->getFieldAs<double>(Dimension::Id::Z, bufidx);
+            matrix(rowidx, 0) = view->getFieldAs<double>(Dimension::Id::X, bufidx);
+            matrix(rowidx, 1) = view->getFieldAs<double>(Dimension::Id::Y, bufidx);
+            matrix(rowidx, 2) = view->getFieldAs<double>(Dimension::Id::Z, bufidx);
         }
     }
-    // Return a pointer to the first point view because we assume
-    // that readers only produce one point view. If that assumption
-    // ever is invalid, this will presumably bork.
-    return (*viewSet.begin());
+    return matrix;
 }
 
 
@@ -184,34 +156,49 @@ int CpdKernel::execute()
     PointTable tableX;
     PointTable tableY;
 
-    arma::mat X, Y;
-    PointViewPtr viewX = readFile(m_filex, tableX, X);
-    readFile(m_filey, tableY, Y);
+    cpd::Matrix X = readFile(m_filex);
+    cpd::Matrix Y = readFile(m_filey);
 
-    if (X.n_rows == 0 || Y.n_rows == 0)
+    if (X.rows() == 0 || Y.rows() == 0)
     {
         throw pdal_error("No points to process.");
     }
 
-    cpd::NonrigidLowrank reg(m_tolerance,
-                             m_max_it,
-                             m_outliers,
-                             m_fgt,
-                             m_epsilon,
-                             m_beta,
-                             m_lambda,
-                             m_numeig);
-    reg.set_sigma2(m_sigma2);
-    if (m_auto_z_exaggeration)
-    {
-        BOX3D bounds;
-        viewX->calculateBounds(bounds);
-        double min_range = std::min(bounds.maxx - bounds.minx, bounds.maxy - bounds.miny);
-        double exaggeration = m_auto_z_exaggeration_ratio * min_range / (bounds.maxz - bounds.minz);
-        reg.set_z_exaggeration(exaggeration);
+    cpd::Matrix result;
+    if (m_method == "rigid") {
+        cpd::Rigid rigid;
+        rigid
+            .set_tolerance(m_tolerance)
+            .set_max_iterations(m_max_it)
+            .set_outlier_weight(m_outliers);
+        rigid
+            .no_reflections(m_no_reflections)
+            .allow_scaling(m_allow_scaling);
+        if (m_sigma2 > 0) {
+            result = rigid.compute(X, Y, m_sigma2).points;
+        } else {
+            result = rigid.compute(X, Y).points;
+        }
+    } else if (m_method == "nonrigid") {
+        cpd::Nonrigid nonrigid;
+        nonrigid
+            .set_tolerance(m_tolerance)
+            .set_max_iterations(m_max_it)
+            .set_outlier_weight(m_outliers);
+        nonrigid
+            .set_beta(m_beta)
+            .set_lambda(m_lambda);
+        if (m_sigma2 > 0) {
+            result = nonrigid.compute(X, Y, m_sigma2).points;
+        } else {
+            result = nonrigid.compute(X, Y).points;
+        }
+    } else {
+        std::stringstream ss;
+        ss << "Invalid cpd method: " << m_method << std::endl;
+        throw pdal_error(ss.str());
     }
 
-    cpd::Registration::ResultPtr result;
     PointTable outTable;
     PointLayoutPtr outLayout(outTable.layout());
     outLayout->registerDim(Dimension::Id::X);
@@ -222,34 +209,18 @@ int CpdKernel::execute()
     outLayout->registerDim(Dimension::Id::ZVelocity);
     PointViewPtr outView(new PointView(outTable));
 
-    if (m_chipped)
+    size_t M = Y.rows();
+    for (size_t i = 0; i < M; ++i)
     {
-        result = chipThenRegister(reg, X, Y, viewX, tableX);
-        for (arma::uword i = 0; i < result->Y.n_rows; ++i)
-        {
-            outView->setField<double>(Dimension::Id::X, i, result->Y(i, 0));
-            outView->setField<double>(Dimension::Id::Y, i, result->Y(i, 1));
-            outView->setField<double>(Dimension::Id::Z, i, result->Y(i, 2));
-            outView->setField<double>(Dimension::Id::XVelocity, i, result->Y(i, 3));
-            outView->setField<double>(Dimension::Id::YVelocity, i, result->Y(i, 4));
-            outView->setField<double>(Dimension::Id::ZVelocity, i, result->Y(i, 5));
-        }
-    }
-    else
-    {
-        result = reg.run(X, Y);
-        for (arma::uword i = 0; i < Y.n_rows; ++i)
-        {
-            outView->setField<double>(Dimension::Id::X, i, result->Y(i, 0));
-            outView->setField<double>(Dimension::Id::Y, i, result->Y(i, 1));
-            outView->setField<double>(Dimension::Id::Z, i, result->Y(i, 2));
-            outView->setField<double>(Dimension::Id::XVelocity, i,
-                Y(i, 0) - result->Y(i, 0));
-            outView->setField<double>(Dimension::Id::YVelocity, i,
-                Y(i, 1) - result->Y(i, 1));
-            outView->setField<double>(Dimension::Id::ZVelocity, i,
-                Y(i, 2) - result->Y(i, 2));
-        }
+        outView->setField<double>(Dimension::Id::X, i, result(i, 0));
+        outView->setField<double>(Dimension::Id::Y, i, result(i, 1));
+        outView->setField<double>(Dimension::Id::Z, i, result(i, 2));
+        outView->setField<double>(Dimension::Id::XVelocity, i,
+                                  Y(i, 0) - result(i, 0));
+        outView->setField<double>(Dimension::Id::YVelocity, i,
+                                  Y(i, 1) - result(i, 1));
+        outView->setField<double>(Dimension::Id::ZVelocity, i,
+                                  Y(i, 2) - result(i, 2));
     }
 
     BufferReader reader;
@@ -262,72 +233,11 @@ int CpdKernel::execute()
     setCommonOptions(writerOpts);
 
     Stage& writer = makeWriter(m_output, reader);
-    writer.setOptions(writerOpts + writer.getOptions());
+    writer.addOptions(writerOpts);
     writer.prepare(outTable);
     writer.execute(outTable);
 
     return 0;
 }
 
-
-arma::mat getChip(const arma::mat& X, const BOX3D& bounds)
-{
-    std::vector<arma::uword> idx;
-    for (arma::uword i = 0; i < X.n_rows; ++i)
-    {
-        if (bounds.contains(X(i, 0), X(i, 1), X(i, 2)))
-        {
-            idx.push_back(i);
-        }
-    }
-    arma::uvec idxvec(idx);
-
-    return X.rows(idxvec);
-}
-
-
-cpd::Registration::ResultPtr CpdKernel::chipThenRegister(
-    const cpd::NonrigidLowrank& reg, const arma::mat& X, const arma::mat& Y,
-    const PointViewPtr& viewX, PointTableRef table)
-{
-    BufferReader reader;
-    reader.addView(viewX);
-
-    ChipperFilter chipper;
-    chipper.setInput(reader);
-    Options options;
-    options.add<int>("capacity", m_chip_capacity);
-    chipper.setOptions(options);
-
-    chipper.prepare(table);
-    PointViewSet viewSet = chipper.execute(table);
-    std::cerr << "Number of chips: " << viewSet.size() << std::endl;
-
-    cpd::Registration::ResultPtr result(new cpd::Registration::Result());
-    int count = 0;
-    for (auto it = viewSet.begin(); it != viewSet.end(); ++it)
-    {
-        BOX3D bounds;
-        (*it)->calculateBounds(bounds);
-        BOX3D chipBounds(bounds.minx - m_chip_buffer,
-                         bounds.miny - m_chip_buffer,
-                         bounds.minz,
-                         bounds.maxx + m_chip_buffer,
-                         bounds.maxy + m_chip_buffer,
-                         bounds.maxz);
-
-        arma::mat Xchip = getChip(X, chipBounds);
-        arma::mat Ychip = getChip(Y, chipBounds);
-
-        cpd::Registration::ResultPtr tmpresult = reg.run(Xchip, Ychip);
-        result->Y.insert_rows(result->Y.n_rows, getChip(
-            arma::join_horiz(tmpresult->Y, Ychip - tmpresult->Y), bounds));
-        std::cerr << "Done with chip #" << ++count << " of " <<
-            viewSet.size() << std::endl;
-    }
-
-    return result;
-}
-
 } // namespace pdal
-
diff --git a/plugins/cpd/kernel/Cpd.hpp b/plugins/cpd/kernel/Cpd.hpp
index f1fc5ac..742da68 100644
--- a/plugins/cpd/kernel/Cpd.hpp
+++ b/plugins/cpd/kernel/Cpd.hpp
@@ -34,12 +34,11 @@
 
 #pragma once
 
-#include <cpd/nonrigid_lowrank.hpp>
+#include <cpd/matrix.hpp>
 
 #include <pdal/Kernel.hpp>
 #include <pdal/pdal_export.hpp>
 
-
 namespace pdal
 {
 
@@ -52,33 +51,23 @@ public:
     int execute();
 
 private:
-    CpdKernel() {};
-    void addSwitches();
-    void validateSwitches();
-    PointViewPtr readFile(const std::string& filename, PointTableRef table,
-        arma::mat& mat);
-    cpd::Registration::ResultPtr chipThenRegister(
-        const cpd::NonrigidLowrank& reg, const arma::mat& X, const arma::mat& Y,
-        const PointViewPtr& bufX, PointTableRef table);
+    CpdKernel() : Kernel() {};
+    virtual void addSwitches(ProgramArgs& args);
+    cpd::Matrix readFile(const std::string& filename);
 
+    std::string m_method;
     std::string m_filex;
     std::string m_filey;
     std::string m_output;
-    float m_tolerance;
-    int m_max_it;
-    float m_outliers;
-    bool m_fgt;
-    float m_epsilon;
-    float m_beta;
-    float m_lambda;
-    arma::uword m_numeig;
+    double m_tolerance;
+    size_t m_max_it;
+    double m_outliers;
+    bool m_no_reflections;
+    bool m_allow_scaling;
+    double m_beta;
+    double m_lambda;
     BOX3D m_bounds;
-    bool m_auto_z_exaggeration;
-    float m_auto_z_exaggeration_ratio;
-    bool m_chipped;
-    int m_chip_capacity;
-    float m_chip_buffer;
-    float m_sigma2;
+    double m_sigma2;
 };
 
 } // namespace pdal
diff --git a/plugins/cpd/test/CpdKernelTest.cpp b/plugins/cpd/test/CpdKernelTest.cpp
index e48dc27..8a8fd02 100644
--- a/plugins/cpd/test/CpdKernelTest.cpp
+++ b/plugins/cpd/test/CpdKernelTest.cpp
@@ -35,20 +35,20 @@
 #include <pdal/pdal_test_main.hpp>
 #include "kernel/Cpd.hpp"
 
-#include <pdal/KernelFactory.hpp>
 #include <pdal/Filter.hpp>
+#include <pdal/KernelFactory.hpp>
+#include <pdal/PipelineManager.hpp>
+#include <pdal/PluginManager.hpp>
 #include <pdal/Reader.hpp>
+#include "LasReader.hpp"
 #include "Support.hpp"
 
-
 namespace pdal
 {
 
-
 namespace
 {
 
-
 class CpdKernelTest : public ::testing::Test
 {
 public:
@@ -71,7 +71,7 @@ protected:
         reader.setOptions(readerOptions);
 
         Options transformationOptions;
-        transformationOptions.add("matrix", "0.36 0.48 -0.8 1\n-0.8 0.6 0.0 2\n0.48 0.64 0.60 3\n0 0 0 1");
+        transformationOptions.add("matrix", "1 0 0 1\n0 1 0 2\n0 0 1 3\n0 0 0 1");
         Stage& filter = mrManager.addFilter("filters.transformation");
         filter.setInput(reader);
         filter.setOptions(transformationOptions);
@@ -97,30 +97,24 @@ protected:
 
 };
 
-
 } // namespace
 
 
 TEST_F(CpdKernelTest, Execution)
 {
     KernelFactory f;
-    std::unique_ptr<Kernel> cpdKernel = f.createKernel("kernels.cpd");
+    void *stage = PluginManager::createObject("kernels.cpd");
+    std::unique_ptr<Kernel> cpdKernel(static_cast<Kernel*>(stage));
 
-    int argc = 7;
-    const char * argv[7] = {
-        "cpd",
-        "-x",
+    int argc = 4;
+    const char * argv[4] = {
+        "rigid",
         m_x.c_str(),
-        "-y",
         m_y.c_str(),
-        "-o",
         m_outfile.c_str()
     };
-
     int retval = cpdKernel->run(argc, argv, "cpd");
     EXPECT_EQ(0, retval);
 }
 
-
 } // namespace pdal
-
diff --git a/plugins/geowave/io/GeoWaveReader.cpp b/plugins/geowave/io/GeoWaveReader.cpp
index c7c869b..95495b9 100644
--- a/plugins/geowave/io/GeoWaveReader.cpp
+++ b/plugins/geowave/io/GeoWaveReader.cpp
@@ -33,6 +33,7 @@
 ****************************************************************************/
 
 #include "GeoWaveReader.hpp"
+#include <pdal/pdal_macros.hpp>
 
 #include <jace/Jace.h>
 using jace::java_cast;
@@ -200,7 +201,7 @@ namespace pdal
         layout->registerDims(getDefaultDimensions());
 
         BasicAccumuloOperations accumuloOperations;
-        try 
+        try
         {
             accumuloOperations = java_new<BasicAccumuloOperations>(
                 java_new<String>(m_zookeeperUrl),
@@ -219,7 +220,7 @@ namespace pdal
             log()->get(LogLevel::Error) << "The credentials passed are invalid. " << e;
             return;
         }
-        
+
         AccumuloAdapterStore accumuloAdapterStore = java_new<AccumuloAdapterStore>(accumuloOperations);
 
         List attribs;
@@ -249,7 +250,7 @@ namespace pdal
             return;
 
         BasicAccumuloOperations accumuloOperations;
-        try 
+        try
         {
             accumuloOperations = java_new<BasicAccumuloOperations>(
                 java_new<String>(m_zookeeperUrl),
@@ -268,7 +269,7 @@ namespace pdal
             log()->get(LogLevel::Error) << "The credentials passed are invalid. " << e;
             return;
         }
-        
+
         AccumuloDataStore accumuloDataStore = java_new<AccumuloDataStore>(
             accumuloOperations);
 
diff --git a/plugins/geowave/io/GeoWaveReader.hpp b/plugins/geowave/io/GeoWaveReader.hpp
index 6810300..7603d60 100644
--- a/plugins/geowave/io/GeoWaveReader.hpp
+++ b/plugins/geowave/io/GeoWaveReader.hpp
@@ -37,10 +37,9 @@
 #include <pdal/Reader.hpp>
 #include <pdal/StageFactory.hpp>
 #include <pdal/util/Bounds.hpp>
+#include <pdal/plugin.hpp>
 
-#ifdef PDAL_HAVE_GEOS
 #include <geos_c.h>
-#endif
 
 #include "jace/proxy/mil/nga/giat/geowave/core/store/CloseableIterator.h"
 using jace::proxy::mil::nga::giat::geowave::core::store::CloseableIterator;
diff --git a/plugins/greyhound/io/GreyhoundReader.cpp b/plugins/greyhound/io/GreyhoundReader.cpp
index 24ebde8..ebe6433 100644
--- a/plugins/greyhound/io/GreyhoundReader.cpp
+++ b/plugins/greyhound/io/GreyhoundReader.cpp
@@ -33,8 +33,8 @@
 ****************************************************************************/
 
 #include "GreyhoundReader.hpp"
-
 #include "Exchanges.hpp"
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/plugins/hexbin/CMakeLists.txt b/plugins/hexbin/CMakeLists.txt
index a0bc9e7..0eba7c1 100644
--- a/plugins/hexbin/CMakeLists.txt
+++ b/plugins/hexbin/CMakeLists.txt
@@ -2,6 +2,8 @@
 # HexBin plugin CMake configuration
 #
 
+include_directories(${ROOT_DIR}/vendor/pdalboost)
+
 find_package(Hexer)
 if (HEXER_FOUND)
     include_directories(${HEXER_INCLUDE_DIR})
@@ -19,4 +21,13 @@ if (HEXER_FOUND)
             FILES test/HexbinFilterTest.cpp
             LINK_WITH ${libname})
     endif()
+
+
+    set(srcs kernel/DensityKernel.cpp kernel/OGR.cpp)
+    set(incs kernel/DensityKernel.hpp kernel/OGR.hpp)
+
+    PDAL_ADD_PLUGIN(density_kernel_libname kernel density
+        FILES "${srcs}" "${incs}"
+        LINK_WITH ${HEXER_LIBRARY} ${libname})
+
 endif()
diff --git a/plugins/hexbin/filters/HexBin.cpp b/plugins/hexbin/filters/HexBin.cpp
index 239d4a7..39140b0 100644
--- a/plugins/hexbin/filters/HexBin.cpp
+++ b/plugins/hexbin/filters/HexBin.cpp
@@ -35,8 +35,9 @@
 #include "HexBin.hpp"
 
 #include <hexer/HexIter.hpp>
-#include <pdal/Geometry.hpp>
+#include <pdal/Polygon.hpp>
 #include <pdal/StageFactory.hpp>
+#include <pdal/pdal_macros.hpp>
 
 using namespace hexer;
 
@@ -66,6 +67,7 @@ void HexBin::processOptions(const Options& options)
 
 void HexBin::ready(PointTableRef table)
 {
+    m_count = 0;
     if (m_edgeLength == 0.0)  // 0 can always be represented exactly.
     {
         m_grid.reset(new HexGrid(m_density));
@@ -83,8 +85,8 @@ void HexBin::filter(PointView& view)
         double x = view.getFieldAs<double>(pdal::Dimension::Id::X, idx);
         double y = view.getFieldAs<double>(pdal::Dimension::Id::Y, idx);
         m_grid->addPoint(x, y);
-        m_count++;
     }
+    m_count += view.size();
 }
 
 
@@ -108,41 +110,43 @@ void HexBin::done(PointTableRef table)
     m_metadata.add("edge_length", m_edgeLength, "The edge length of the "
         "hexagon to use in situations where you do not want to estimate "
         "based on a sample");
-    m_metadata.add("threshold", m_density, "Minimum number of points inside "
-        "a hexagon to be considered full");
+    m_metadata.add("estimated_edge", m_grid->height(),
+        "Estimated computed edge distance");
+    m_metadata.add("threshold", m_grid->denseLimit(),
+        "Minimum number of points inside a hexagon to be considered full");
     m_metadata.add("sample_size", m_sampleSize, "Number of samples to use "
         "when estimating hexagon edge size. Specify 0.0 or omit options "
         "for edge_size if you want to compute one.");
     m_metadata.add("hex_offsets", offsets.str(), "Offset of hex corners from "
         "hex centers.");
+
+    uint32_t precision  = m_options.getValueOrDefault<uint32_t>("precision", 8);
+    std::ostringstream polygon;
+    polygon.setf(std::ios_base::fixed, std::ios_base::floatfield);
+    polygon.precision(precision);
+    m_grid->toWKT(polygon);
+
     if (m_outputTesselation)
     {
-
         MetadataNode hexes = m_metadata.add("hexagons");
         for (HexIter hi = m_grid->hexBegin(); hi != m_grid->hexEnd(); ++hi)
         {
-            using namespace boost;
-
             HexInfo h = *hi;
 
             MetadataNode hex = hexes.addList("hexagon");
             hex.add("density", h.density());
 
-            hex.add("gridpos", lexical_cast<std::string>(h.xgrid()) + " " +
-                lexical_cast<std::string>(h.ygrid()));
+            hex.add("gridpos", Utils::toString(h.xgrid()) + " " +
+                Utils::toString((h.ygrid())));
             std::ostringstream oss;
             // Using stream limits precision (default 6)
             oss << "POINT (" << h.x() << " " << h.y() << ")";
             hex.add("center", oss.str());
         }
+        m_metadata.add("hex_boundary", polygon.str(),
+            "Boundary MULTIPOLYGON of domain");
     }
 
-    std::ostringstream polygon;
-    polygon.setf(std::ios_base::fixed, std::ios_base::floatfield);
-    polygon.precision(m_options.getValueOrDefault<uint32_t>("precision", 8));
-    m_grid->toWKT(polygon);
-    m_metadata.add("boundary", polygon.str(),
-        "Boundary MULTIPOLYGON of domain");
 
     /***
       We want to make these bumps on edges go away, which means that
@@ -153,26 +157,57 @@ void HexBin::done(PointTableRef table)
       tolerance a little larger than that.  This is larger than the
       perpendicular distance needed to eliminate B in ABC, so should
       serve for both cases.
-      
+
          B ______  C
           /      \
        A /        \ D
-    
+
     ***/
     double tolerance = 1.1 * m_grid->height() / 2;
-    m_metadata.add("smoothed_boundary",
-        Geometry::smoothPolygon(polygon.str(), tolerance),
-        "Smoothed boundary MULTIPOLYGON of domain");
-    double area = Geometry::computeArea(polygon.str());
-
-    double density = (double) m_count / area ;
-    m_metadata.add("density",
-            density,
-        "Number of points per square unit");
-    m_metadata.add("area",
-            area,
-        "Area in square units of tessellated polygon");
 
+    double cull =
+        m_options.getValueOrDefault<double>("hole_cull_area_tolerance",
+            6 * tolerance * tolerance);
+
+    SpatialReference srs(table.anySpatialReference());
+    pdal::Polygon p(polygon.str(), srs);
+    pdal::Polygon density_p(polygon.str(), srs);
+
+    // If the SRS was geographic, use relevant
+    // UTM for area and density computation
+    if (srs.isGeographic())
+    {
+        // Compute a UTM polygon
+        BOX3D box = p.bounds();
+        int zone = SpatialReference::calculateZone(box.minx, box.miny);
+
+        auto makezone = [] (int zone) -> std::string
+        {
+
+            std::ostringstream z;
+            if (zone > 0)
+            {
+                z << "EPSG:269" << zone;
+            } else
+            {
+                z << "EPSG:327" << zone;
+            }
+            return z.str();
+        };
+
+        SpatialReference utm(makezone(zone));
+        density_p = p.transform(utm);
+    }
+    pdal::Polygon smooth = p.simplify(tolerance, cull);
+    std::string smooth_text = smooth.wkt(precision);
+
+    m_metadata.add("boundary", smooth_text, "Approximated MULTIPOLYGON of domain");
+    double area = density_p.area();
+
+//    double density = (double) m_grid->densePointCount() / area ;
+    double density = (double) m_count/ area ;
+    m_metadata.add("density", density, "Number of points per square unit");
+    m_metadata.add("area", area, "Area in square units of tessellated polygon");
 }
 
 } // namespace pdal
diff --git a/plugins/hexbin/filters/HexBin.hpp b/plugins/hexbin/filters/HexBin.hpp
index 50bf09d..1668ce8 100644
--- a/plugins/hexbin/filters/HexBin.hpp
+++ b/plugins/hexbin/filters/HexBin.hpp
@@ -53,6 +53,7 @@ public:
     static int32_t destroy(void *);
     std::string getName() const { return "filters.hexbin"; }
 
+    hexer::HexGrid* grid() const { return m_grid.get(); }
 private:
 
     std::unique_ptr<hexer::HexGrid> m_grid;
diff --git a/plugins/hexbin/kernel/DensityKernel.cpp b/plugins/hexbin/kernel/DensityKernel.cpp
new file mode 100644
index 0000000..d77e9f7
--- /dev/null
+++ b/plugins/hexbin/kernel/DensityKernel.cpp
@@ -0,0 +1,130 @@
+/******************************************************************************
+* Copyright (c) 2015, Howard Butler (howard at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include "DensityKernel.hpp"
+#include "../filters/HexBin.hpp"
+#include "OGR.hpp"
+
+#include <pdal/GDALUtils.hpp>
+#include <pdal/pdal_macros.hpp>
+#include <pdal/plugin.hpp>
+
+namespace pdal
+{
+
+static PluginInfo const s_info = PluginInfo(
+    "kernels.density",
+    "Density Kernel",
+    "http://pdal.io/kernels/kernels.density.html" );
+
+CREATE_SHARED_PLUGIN(1, 0, DensityKernel, Kernel, s_info)
+
+std::string DensityKernel::getName() const { return s_info.name; }
+
+
+void DensityKernel::addSwitches(ProgramArgs& args)
+{
+    args.add("input,i", "input point cloud file name", m_inputFile);
+    args.add("output,o", "output vector data source", m_outputFile);
+    args.add("lyr_name", "OGR layer name to write into datasource",
+        m_layerName);
+    args.add("driver,f", "OGR driver name to use ", m_driverName,
+        "ESRI Shapefile");
+}
+
+
+void DensityKernel::makePipeline(const std::string& filename)
+{
+    if (!pdal::FileUtils::fileExists(filename))
+        throw pdal_error("File not found: " + filename);
+
+    m_manager = PipelineManagerPtr(new PipelineManager);
+
+    if (filename == "STDIN")
+    {
+        m_manager->readPipeline(std::cin);
+    }
+    else if (FileUtils::extension(filename) == ".xml" ||
+        FileUtils::extension(filename) == ".json")
+    {
+        m_manager->readPipeline(filename);
+    }
+    else
+    {
+        StageFactory factory;
+        std::string driver = factory.inferReaderDriver(filename);
+
+        if (driver.empty())
+            throw pdal_error("Cannot determine input file type of " + filename);
+        Stage& reader = m_manager->addReader(driver);
+        Options ro;
+        ro.add("filename", filename);
+        reader.setOptions(ro);
+    }
+    Stage *stage = m_manager->getStage();
+    m_hexbinStage = &(m_manager->addFilter("filters.hexbin"));
+    if (!m_hexbinStage)
+        throw pdal_error("Unable to initialize filters.hexbin!");
+    m_hexbinStage->setInput(*stage);
+}
+
+
+void DensityKernel::outputDensity(pdal::SpatialReference const& reference)
+{
+    HexBin* hexbin = static_cast<pdal::HexBin*>(m_hexbinStage);
+    if (!hexbin)
+        throw pdal::pdal_error("unable to fetch filters.hexbin stage!");
+
+    hexer::HexGrid* grid = hexbin->grid();
+
+    hexdensity::writer::OGR writer(m_outputFile, reference.getWKT(),
+        m_driverName);
+    writer.writeDensity(grid);
+//     writer.writeBoundary(grid);
+}
+
+
+int DensityKernel::execute()
+{
+    gdal::registerDrivers();
+    std::string filename = m_usestdin ? std::string("STDIN") : m_inputFile;
+    makePipeline(filename);
+    applyExtraStageOptionsRecursive(m_manager->getStage());
+    point_count_t output = m_manager->execute();
+    PointTableRef table = m_manager->pointTable();
+    outputDensity(table.anySpatialReference());
+    return 0;
+}
+
+} // namespace pdal
diff --git a/plugins/hexbin/kernel/DensityKernel.hpp b/plugins/hexbin/kernel/DensityKernel.hpp
new file mode 100644
index 0000000..a51add7
--- /dev/null
+++ b/plugins/hexbin/kernel/DensityKernel.hpp
@@ -0,0 +1,69 @@
+/******************************************************************************
+* Copyright (c) 2015, Howard Butler (howard at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#pragma once
+
+
+#include <pdal/Kernel.hpp>
+#include <pdal/PipelineManager.hpp>
+
+
+namespace pdal
+{
+
+
+class PDAL_DLL DensityKernel : public Kernel
+{
+public:
+    static void * create();
+    static int32_t destroy(void *);
+    std::string getName() const;
+    int execute();
+
+private:
+    PipelineManagerPtr m_manager;
+    Stage *m_hexbinStage;
+    std::string m_inputFile;
+    std::string m_outputFile;
+    std::string m_layerName;
+    std::string m_driverName;
+    std::string m_srs;
+
+    virtual void addSwitches(ProgramArgs& args);
+    void makePipeline(const std::string& filename);
+    void outputDensity(pdal::SpatialReference const& ref);
+};
+
+} // namespace pdal
+
diff --git a/plugins/hexbin/kernel/OGR.cpp b/plugins/hexbin/kernel/OGR.cpp
new file mode 100644
index 0000000..5ce1846
--- /dev/null
+++ b/plugins/hexbin/kernel/OGR.cpp
@@ -0,0 +1,232 @@
+/*****************************************************************************
+
+    (c) 2013 Hobu, Inc. hobu.inc at gmail.com
+
+    Author: Howard Butler, hobu.inc at gmail.com
+
+    This is free software; you can redistribute and/or modify it under the
+    terms of the GNU Lesser General Licence as published by the Free Software
+    Foundation. See the COPYING file for more information.
+
+    This software is distributed WITHOUT ANY WARRANTY and without even the
+    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+*****************************************************************************/
+
+#include "OGR.hpp"
+
+#include <iostream>
+#include <sstream>
+#include <functional>
+
+#include <pdal/GDALUtils.hpp>
+
+#include <hexer/HexGrid.hpp>
+#include <hexer/HexIter.hpp>
+
+using namespace std;
+
+namespace pdal
+{
+
+namespace hexdensity
+{
+
+namespace writer
+{
+
+OGR::OGR(std::string const& filename, std::string srs, std::string driver)
+    : m_filename(filename)
+    , m_driver(driver)
+    , m_srs(srs)
+    , m_ds(0)
+    , m_layer(0)
+{
+    createLayer();
+}
+
+void OGR::createLayer()
+{
+
+    OGRSFDriverH driver = OGRGetDriverByName(m_driver.c_str());
+    if (driver == NULL)
+    {
+        throw pdal::pdal_error("OGR Driver was null!");
+    }
+
+
+    m_ds = OGR_Dr_CreateDataSource(driver, m_filename.c_str(), NULL);
+    if (m_ds == NULL)
+    {
+        throw pdal::pdal_error("Data source creation was null!");
+    }
+
+    pdal::gdal::SpatialRef spatialref(m_srs);
+    OGRSpatialReferenceH ref = (OGRSpatialReferenceH)spatialref.get();
+
+    m_layer = OGR_DS_CreateLayer(m_ds, m_filename.c_str(), ref, wkbMultiPolygon, NULL);
+    if (m_layer == NULL)
+    {
+        throw pdal::pdal_error("Layer creation was null!");
+    }
+
+    OGRFieldDefnH hFieldDefn;
+    hFieldDefn = OGR_Fld_Create("ID", OFTInteger);
+    if (OGR_L_CreateField(m_layer, hFieldDefn, TRUE) != OGRERR_NONE)
+    {
+        std::ostringstream oss;
+        oss << "Could not create ID field on layer with error '"
+            << CPLGetLastErrorMsg() << "'";
+        throw pdal::pdal_error(oss.str());
+    }
+    OGR_Fld_Destroy(hFieldDefn);
+
+    hFieldDefn = OGR_Fld_Create("COUNT", OFTInteger);
+    if (OGR_L_CreateField(m_layer, hFieldDefn, TRUE) != OGRERR_NONE)
+    {
+        std::ostringstream oss;
+        oss << "Could not create COUNT field on layer with error '"
+            << CPLGetLastErrorMsg() << "'";
+        throw pdal::pdal_error(oss.str());
+    }
+    OGR_Fld_Destroy(hFieldDefn);
+
+
+}
+
+void OGR::writeBoundary(hexer::HexGrid *grid)
+{
+    OGRGeometryH multi = OGR_G_CreateGeometry(wkbMultiPolygon);
+
+    const std::vector<hexer::Path *>& paths = grid->rootPaths();
+    for (auto pi = paths.begin(); pi != paths.end(); ++pi)
+    {
+        OGRGeometryH polygon = OGR_G_CreateGeometry(wkbPolygon);
+        collectPath(*pi, polygon);
+
+        if( OGR_G_AddGeometryDirectly(multi, polygon ) != OGRERR_NONE )
+        {
+            std::ostringstream oss;
+            oss << "Unable to add polygon to multipolygon with error '"
+                << CPLGetLastErrorMsg() << "'";
+            throw pdal::pdal_error(oss.str());
+        }
+    }
+
+    OGRFeatureH hFeature;
+
+    hFeature = OGR_F_Create(OGR_L_GetLayerDefn(m_layer));
+    OGR_F_SetFieldInteger( hFeature, OGR_F_GetFieldIndex(hFeature, "ID"), 0);
+
+    OGR_F_SetGeometry(hFeature, multi);
+    OGR_G_DestroyGeometry(multi);
+
+    if( OGR_L_CreateFeature( m_layer, hFeature ) != OGRERR_NONE )
+    {
+        std::ostringstream oss;
+        oss << "Unable to create feature for multipolygon with error '"
+            << CPLGetLastErrorMsg() << "'";
+        throw pdal::pdal_error(oss.str());
+    }
+    OGR_F_Destroy( hFeature );
+}
+
+void OGR::collectPath(hexer::Path* path, OGRGeometryH polygon)
+{
+    OGRGeometryH ring = OGR_G_CreateGeometry(wkbLinearRing);
+
+    vector<hexer::Point> pts = path->points();
+
+    vector<hexer::Point>::const_iterator i;
+    for (i = pts.begin(); i != pts.end(); ++i)
+    {
+        OGR_G_AddPoint_2D(ring, i->m_x, i->m_y);
+    }
+
+    if( OGR_G_AddGeometryDirectly(polygon, ring) != OGRERR_NONE )
+    {
+        std::ostringstream oss;
+        oss << "Unable to add geometry with error '" <<
+            CPLGetLastErrorMsg() << "'";
+        throw pdal::pdal_error(oss.str());
+    }
+
+    vector<hexer::Path *> paths = path->subPaths();
+    for (vector<hexer::Path*>::size_type pi = 0; pi != paths.size(); ++pi)
+    {
+        hexer::Path* p = paths[pi];
+        collectPath(p, polygon);
+    }
+}
+
+OGRGeometryH OGR::collectHexagon(hexer::HexInfo const& info, hexer::HexGrid const* grid)
+{
+    OGRGeometryH ring = OGR_G_CreateGeometry(wkbLinearRing);
+
+    hexer::Point pos = info.m_center;
+    pos += grid->origin();
+
+
+    OGR_G_AddPoint_2D(ring, pos.m_x, pos.m_y);
+    for (int i = 1; i <= 5; ++i)
+    {
+        hexer::Point p = pos + grid->offset(i);
+        OGR_G_AddPoint_2D(ring, p.m_x, p.m_y);
+    }
+    OGR_G_AddPoint_2D(ring, pos.m_x, pos.m_y);
+
+    OGRGeometryH polygon = OGR_G_CreateGeometry(wkbPolygon);
+    if( OGR_G_AddGeometryDirectly(polygon, ring ) != OGRERR_NONE )
+    {
+        std::ostringstream oss;
+        oss << "Unable to add ring to polygon in collectHexagon '"
+            << CPLGetLastErrorMsg() << "'";
+        throw pdal::pdal_error(oss.str());
+    }
+
+    return polygon;
+
+}
+
+
+void OGR::writeDensity(hexer::HexGrid *grid)
+{
+    int counter(0);
+    for (hexer::HexIter iter = grid->hexBegin(); iter != grid->hexEnd(); ++iter)
+    {
+
+        hexer::HexInfo hi = *iter;
+        OGRGeometryH polygon = collectHexagon(hi, grid);
+        OGRFeatureH hFeature;
+
+        hFeature = OGR_F_Create(OGR_L_GetLayerDefn(m_layer));
+        OGR_F_SetFieldInteger( hFeature, OGR_F_GetFieldIndex(hFeature, "ID"),
+            counter);
+        OGR_F_SetFieldInteger( hFeature, OGR_F_GetFieldIndex(hFeature, "COUNT"),
+            hi.m_density);
+
+        OGR_F_SetGeometry(hFeature, polygon);
+        OGR_G_DestroyGeometry(polygon);
+
+        if( OGR_L_CreateFeature( m_layer, hFeature ) != OGRERR_NONE )
+        {
+            std::ostringstream oss;
+            oss << "Unable to create feature for multipolygon with error '"
+                << CPLGetLastErrorMsg() << "'";
+            throw pdal::pdal_error(oss.str());
+        }
+        OGR_F_Destroy( hFeature );
+        counter++;
+    }
+}
+
+
+OGR::~OGR()
+{
+    OGR_DS_Destroy(m_ds);
+}
+
+} // namespace writer
+} // namespace hexer
+} // namespace pdal
+
diff --git a/plugins/hexbin/kernel/OGR.hpp b/plugins/hexbin/kernel/OGR.hpp
new file mode 100644
index 0000000..52c140c
--- /dev/null
+++ b/plugins/hexbin/kernel/OGR.hpp
@@ -0,0 +1,90 @@
+/******************************************************************************
+* Copyright (c) 2016, Howard Butler (howard at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+#pragma once
+
+#include <hexer/hexer.hpp>
+
+#include <hexer/Processor.hpp>
+
+#include <hexer/hexer_defines.h>
+#include <hexer/Mathpair.hpp>
+#include <hexer/HexInfo.hpp>
+#include <hexer/export.hpp>
+#include <pdal/pdal_macros.hpp>
+
+
+
+#include "ogr_api.h"
+#include "gdal.h"
+
+namespace pdal
+{
+namespace hexdensity
+{
+
+
+namespace writer
+{
+
+
+class OGR
+{
+
+
+public:
+    OGR(std::string const& filename, std::string srs, std::string driver = "ESRI Shapefile");
+    ~OGR();
+
+    void writeBoundary(hexer::HexGrid *grid);
+    void writeDensity(hexer::HexGrid *grid);
+
+private:
+    std::string m_filename;
+    std::string m_driver;
+    std::string m_srs;
+
+    OGRDataSourceH m_ds;
+    OGRLayerH m_layer;
+
+    void createLayer();
+    void collectPath(hexer::Path* path, OGRGeometryH polygon);
+    OGRGeometryH collectHexagon(hexer::HexInfo const& info, hexer::HexGrid const* grid);
+
+};
+
+} // writer
+
+} // namespace
+
+} //pdal
diff --git a/plugins/hexbin/test/HexbinFilterTest.cpp b/plugins/hexbin/test/HexbinFilterTest.cpp
index 4293cc6..a94fd44 100644
--- a/plugins/hexbin/test/HexbinFilterTest.cpp
+++ b/plugins/hexbin/test/HexbinFilterTest.cpp
@@ -71,12 +71,12 @@ TEST(HexbinFilterTest, HexbinFilterTest_test_1)
         "use in situations where you do not want to estimate based on "
         "a sample");
 
-    std::unique_ptr<Stage> reader(f.createStage("readers.las"));
-    EXPECT_TRUE(reader.get());
+    Stage* reader(f.createStage("readers.las"));
+    EXPECT_TRUE(reader);
     reader->setOptions(options);
 
-    std::unique_ptr<Stage> hexbin(f.createStage("filters.hexbin"));
-    EXPECT_TRUE(hexbin.get());
+    Stage* hexbin(f.createStage("filters.hexbin"));
+    EXPECT_TRUE(hexbin);
     hexbin->setOptions(options);
     hexbin->setInput(*reader);
 
diff --git a/plugins/icebridge/CMakeLists.txt b/plugins/icebridge/CMakeLists.txt
index d0f3400..3780cbf 100644
--- a/plugins/icebridge/CMakeLists.txt
+++ b/plugins/icebridge/CMakeLists.txt
@@ -4,6 +4,8 @@
 
 include (${PDAL_CMAKE_DIR}/hdf5.cmake)
 
+include_directories(${ROOT_DIR}/vendor/pdalboost)
+
 if (NOT PDAL_HAVE_HDF5)
     message(FATAL "HDF5 not found but is required for Icebridge.")
 else()
diff --git a/plugins/icebridge/io/Hdf5Handler.cpp b/plugins/icebridge/io/Hdf5Handler.cpp
index 03700bc..4f4c342 100644
--- a/plugins/icebridge/io/Hdf5Handler.cpp
+++ b/plugins/icebridge/io/Hdf5Handler.cpp
@@ -36,9 +36,6 @@
 #include <pdal/util/FileUtils.hpp>
 #include <pdal/pdal_types.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
-
-
 namespace pdal
 {
 
diff --git a/plugins/icebridge/io/IcebridgeReader.cpp b/plugins/icebridge/io/IcebridgeReader.cpp
index 3de0e05..1d115cd 100644
--- a/plugins/icebridge/io/IcebridgeReader.cpp
+++ b/plugins/icebridge/io/IcebridgeReader.cpp
@@ -35,6 +35,7 @@
 #include "IcebridgeReader.hpp"
 #include <pdal/util/FileUtils.hpp>
 #include <pdal/PointView.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <map>
 
@@ -113,6 +114,29 @@ void IcebridgeReader::ready(PointTableRef table)
     m_index = 0;
 }
 
+void IcebridgeReader::initialize(PointTableRef)
+{
+    // Data are WGS84 (4326) with ITRF2000 datum (6656)
+    // See http://nsidc.org/data/docs/daac/icebridge/ilvis2/index.html for
+    // background
+    SpatialReference ref("EPSG:4326");
+    setSpatialReference(m_metadata, ref);
+}
+
+
+// If longitude between 0-180, just return it, degrees east; if between 180
+// and 360, subtract 360 to get negative value.
+double IcebridgeReader::convertLongitude(double longitude)
+{
+    longitude = fmod(longitude, 360.0);
+    if (longitude <= -180)
+        longitude += 360;
+    else if (longitude > 180)
+        longitude -= 360;
+    return longitude;
+}
+
+
 
 point_count_t IcebridgeReader::read(PointViewPtr view, point_count_t count)
 {
@@ -178,10 +202,27 @@ point_count_t IcebridgeReader::read(PointViewPtr view, point_count_t count)
     return count;
 }
 
+void IcebridgeReader::processOptions(const Options& options)
+{
+    m_metadataFile =
+        options.getValueOrDefault<std::string>("metadata", "");
+    if (!m_metadataFile.empty() && ! FileUtils::fileExists(m_metadataFile))
+    {
+        std::ostringstream oss;
+        oss << "Invalid metadata file: '" << m_metadataFile << "'";
+        throw pdal_error(oss.str());
+    }
+
+}
 
 void IcebridgeReader::done(PointTableRef table)
 {
     m_hdf5Handler.close();
+    if (!m_metadataFile.empty())
+    {
+        m_mdReader.readMetadataFile(m_metadataFile, &m_metadata);
+    }
+
 }
 
 
diff --git a/plugins/icebridge/io/IcebridgeReader.hpp b/plugins/icebridge/io/IcebridgeReader.hpp
index c869de8..da7f891 100644
--- a/plugins/icebridge/io/IcebridgeReader.hpp
+++ b/plugins/icebridge/io/IcebridgeReader.hpp
@@ -38,6 +38,20 @@
 #include <pdal/Options.hpp>
 #include <pdal/StageFactory.hpp>
 
+#ifndef PDAL_HAVE_LIBXML2
+namespace pdal
+{
+  class Ilvis2MetadataReader
+  {
+  public:
+      inline void readMetadataFile(std::string filename, pdal::MetadataNode* m) {};
+  };
+}
+#else
+    #include "../../io/ilvis2/Ilvis2MetadataReader.hpp"
+#endif
+
+
 #include "Hdf5Handler.hpp"
 
 #include <vector>
@@ -71,9 +85,16 @@ private:
 
     virtual void addDimensions(PointLayoutPtr layout);
     virtual void ready(PointTableRef table);
+    virtual void processOptions(const Options& options);
     virtual point_count_t read(PointViewPtr view, point_count_t count);
     virtual void done(PointTableRef table);
     virtual bool eof();
+    virtual void initialize(PointTableRef table);
+
+    double convertLongitude(double longitude);
+
+    std::string m_metadataFile;
+    Ilvis2MetadataReader m_mdReader;
 
     IcebridgeReader& operator=(const IcebridgeReader&);   // Not implemented.
     IcebridgeReader(const IcebridgeReader&);              // Not implemented.
diff --git a/plugins/icebridge/test/IcebridgeReaderTest.cpp b/plugins/icebridge/test/IcebridgeReaderTest.cpp
index b8c16e0..3efd09b 100644
--- a/plugins/icebridge/test/IcebridgeReaderTest.cpp
+++ b/plugins/icebridge/test/IcebridgeReaderTest.cpp
@@ -36,7 +36,6 @@
 
 #include <pdal/Options.hpp>
 #include <pdal/PointView.hpp>
-#include <pdal/PipelineReader.hpp>
 #include <pdal/PipelineManager.hpp>
 #include <pdal/StageFactory.hpp>
 
@@ -91,8 +90,8 @@ std::string getFilePath()
 TEST(IcebridgeReaderTest, testRead)
 {
     StageFactory f;
-    std::unique_ptr<Stage> reader(f.createStage("readers.icebridge"));
-    EXPECT_TRUE(reader.get());
+    Stage* reader(f.createStage("readers.icebridge"));
+    EXPECT_TRUE(reader);
 
     Option filename("filename", getFilePath(), "");
     Options options(filename);
@@ -141,11 +140,8 @@ TEST(IcebridgeReaderTest, testRead)
 TEST(IcebridgeReaderTest, testPipeline)
 {
     PipelineManager manager;
-    PipelineReader reader(manager);
 
-    bool isWriter =
-        reader.readPipeline(Support::configuredpath("icebridge/pipeline.xml"));
-    EXPECT_TRUE(isWriter);
+    manager.readPipeline(Support::configuredpath("icebridge/pipeline.xml"));
 
     point_count_t numPoints = manager.execute();
     EXPECT_EQ(numPoints, 2u);
diff --git a/plugins/matlab/io/MatlabWriter.cpp b/plugins/matlab/io/MatlabWriter.cpp
index c267846..9984cb9 100644
--- a/plugins/matlab/io/MatlabWriter.cpp
+++ b/plugins/matlab/io/MatlabWriter.cpp
@@ -33,7 +33,7 @@
  ****************************************************************************/
 
 #include "MatlabWriter.hpp"
-
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/plugins/matlab/io/MatlabWriter.hpp b/plugins/matlab/io/MatlabWriter.hpp
index 4f8557f..c17183b 100644
--- a/plugins/matlab/io/MatlabWriter.hpp
+++ b/plugins/matlab/io/MatlabWriter.hpp
@@ -39,7 +39,7 @@
 #include <mat.h>
 
 #include <pdal/Writer.hpp>
-
+#include <pdal/plugin.hpp>
 
 extern "C" int32_t MatlabWriter_ExitFunc();
 extern "C" PF_ExitFunc MatlabWriter_InitPlugin();
diff --git a/plugins/matlab/test/MatlabWriterTest.cpp b/plugins/matlab/test/MatlabWriterTest.cpp
index 89c490b..fc5dfa6 100644
--- a/plugins/matlab/test/MatlabWriterTest.cpp
+++ b/plugins/matlab/test/MatlabWriterTest.cpp
@@ -70,8 +70,8 @@ TEST_F(MatlabWriterTest, constructor)
 TEST_F(MatlabWriterTest, findStage)
 {
     StageFactory factory;
-    std::unique_ptr<Stage> stage(factory.createStage("writers.matlab"));
-    EXPECT_TRUE(stage.get());
+    Stage* stage(factory.createStage("writers.matlab"));
+    EXPECT_TRUE(stage);
 }
 
 
diff --git a/plugins/mrsid/io/MrsidReader.cpp b/plugins/mrsid/io/MrsidReader.cpp
index d070be1..09f92da 100644
--- a/plugins/mrsid/io/MrsidReader.cpp
+++ b/plugins/mrsid/io/MrsidReader.cpp
@@ -36,6 +36,7 @@
 
 #include <lidar/MG4PointReader.h>
 #include <lidar/FileIO.h>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/plugins/mrsid/io/MrsidReader.hpp b/plugins/mrsid/io/MrsidReader.hpp
index d1c021f..26371e8 100644
--- a/plugins/mrsid/io/MrsidReader.hpp
+++ b/plugins/mrsid/io/MrsidReader.hpp
@@ -35,8 +35,8 @@
 #pragma once
 
 #include <pdal/Reader.hpp>
-
 #include <pdal/util/Bounds.hpp>
+#include <pdal/plugin.hpp>
 
 #include <lidar/PointSource.h>
 #include <lidar/PointData.h>
diff --git a/plugins/mrsid/test/MrsidTest.cpp b/plugins/mrsid/test/MrsidTest.cpp
index 6101ece..a3d05e3 100644
--- a/plugins/mrsid/test/MrsidTest.cpp
+++ b/plugins/mrsid/test/MrsidTest.cpp
@@ -37,7 +37,6 @@
 
 #include <pdal/PointView.hpp>
 #include <pdal/PipelineManager.hpp>
-#include <pdal/PipelineReader.hpp>
 #include <pdal/StageFactory.hpp>
 #include <las/LasWriter.hpp>
 
@@ -62,8 +61,8 @@ TEST(MrsidReaderTest, test_one)
 
     PointTable table;
 
-    std::shared_ptr<Stage> sid_reader(f.createStage("readers.mrsid"));
-    EXPECT_TRUE(sid_reader.get());
+    Stage* sid_reader(f.createStage("readers.mrsid"));
+    EXPECT_TRUE(sid_reader);
     sid_reader->setOptions(sid_opts);
     sid_reader->prepare(table);
     PointViewSet pbSet = sid_reader->execute(table);
diff --git a/plugins/nitf/CMakeLists.txt b/plugins/nitf/CMakeLists.txt
index 5a3b016..5df6859 100644
--- a/plugins/nitf/CMakeLists.txt
+++ b/plugins/nitf/CMakeLists.txt
@@ -2,6 +2,8 @@
 # NITF plugin CMake configuration
 #
 
+include_directories(${ROOT_DIR}/vendor/pdalboost)
+
 include(${PDAL_CMAKE_DIR}/nitro.cmake)
 if (NOT NITRO_FOUND)
     message(FATAL_ERROR "Can't find NITRO support required by NITF.")
diff --git a/plugins/nitf/io/MetadataReader.cpp b/plugins/nitf/io/MetadataReader.cpp
index fed6214..5a987f5 100644
--- a/plugins/nitf/io/MetadataReader.cpp
+++ b/plugins/nitf/io/MetadataReader.cpp
@@ -35,8 +35,7 @@
 #include "MetadataReader.hpp"
 
 #include <pdal/Metadata.hpp>
-
-#include <boost/algorithm/string.hpp>
+#include <pdal/util/Utils.hpp>
 
 #ifdef PDAL_COMPILER_GCC
 #  pragma GCC diagnostic ignored "-Wenum-compare"
@@ -54,13 +53,6 @@ MetadataReader::MetadataReader(::nitf::Record& record,
     m_node(node),
     m_showEmptyFields(showEmptyFields)
 {
-    return;
-}
-
-
-MetadataReader::~MetadataReader()
-{
-    return;
 }
 
 
@@ -158,7 +150,7 @@ void MetadataReader::writeField(const std::string& parentkey,
         throw pdal_error("error reading nitf (2)");
     }    
    
-    boost::algorithm::trim(v);
+    Utils::trim(v);
     const bool blank = (v.length() == 0);    
     if (!blank || (blank && m_showEmptyFields))
     {
@@ -369,8 +361,6 @@ void MetadataReader::doTRE(const std::string& key,
         
         ++iter;
     }
-
-    return;
 }
 
     
@@ -386,8 +376,6 @@ void MetadataReader::doExtensions(const std::string& key,
 
         ++iter;
     }
-
-    return;
 }
     
 
diff --git a/plugins/nitf/io/MetadataReader.hpp b/plugins/nitf/io/MetadataReader.hpp
index 8ee5692..6a763a1 100644
--- a/plugins/nitf/io/MetadataReader.hpp
+++ b/plugins/nitf/io/MetadataReader.hpp
@@ -78,7 +78,6 @@ class PDAL_DLL MetadataReader
 {
 public:
     MetadataReader(::nitf::Record&, MetadataNode&, bool showEmptyFields=true);
-    ~MetadataReader();
 
     void read();
 
diff --git a/plugins/nitf/io/NitfFile.cpp b/plugins/nitf/io/NitfFile.cpp
index 309be5b..41aa0c4 100644
--- a/plugins/nitf/io/NitfFile.cpp
+++ b/plugins/nitf/io/NitfFile.cpp
@@ -36,8 +36,6 @@
 
 #include <pdal/Metadata.hpp>
 
-#include <boost/algorithm/string.hpp>
-
 #include "MetadataReader.hpp"
 #include "tre_plugins.hpp"
 
diff --git a/plugins/nitf/io/NitfReader.cpp b/plugins/nitf/io/NitfReader.cpp
index b3a93c8..d1f3846 100644
--- a/plugins/nitf/io/NitfReader.cpp
+++ b/plugins/nitf/io/NitfReader.cpp
@@ -34,6 +34,7 @@
 
 #include "NitfFile.hpp"
 #include "NitfReader.hpp"
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/plugins/nitf/io/NitfReader.hpp b/plugins/nitf/io/NitfReader.hpp
index 1231186..b9a25d8 100644
--- a/plugins/nitf/io/NitfReader.hpp
+++ b/plugins/nitf/io/NitfReader.hpp
@@ -46,11 +46,41 @@ namespace pdal
 
 class PDAL_DLL NitfReader : public LasReader
 {
-typedef boost::iostreams::restriction<std::istream> RDevice;
-typedef boost::iostreams::stream<RDevice> RStream;
+typedef pdalboost::iostreams::restriction<std::istream> RDevice;
+typedef pdalboost::iostreams::stream<RDevice> RStream;
+
+    class NitfStreamIf : public LasStreamIf
+    {
+    public:
+        NitfStreamIf(const std::string& filename, uint64_t offset, uint64_t len)
+        {
+            m_baseStream = FileUtils::openFile(filename);
+            if (m_baseStream)
+            {
+                m_rdevice.reset(new RDevice(*m_baseStream, offset, len));
+                m_rstream.reset(new RStream(*m_rdevice));
+                m_istream = m_rstream.get();
+            }
+        }
+
+        ~NitfStreamIf()
+        {
+            m_rstream.reset();
+            m_rdevice.reset();
+            if (m_baseStream)
+                FileUtils::closeFile(m_baseStream);
+            m_baseStream = NULL;
+            m_istream = NULL;
+        }
+
+    private:
+        std::istream *m_baseStream;
+        std::unique_ptr<RDevice> m_rdevice;
+        std::unique_ptr<RStream> m_rstream;
+    };
 
 public:
-    NitfReader() : LasReader(), m_offset(0), m_length(0), m_istream(NULL)
+    NitfReader() : LasReader(), m_offset(0), m_length(0)
     {}
 
     static void * create();
@@ -58,32 +88,17 @@ public:
     std::string getName() const;
 
 protected:
-    virtual std::istream *createStream()
+    virtual void createStream()
     {
-        m_istream = FileUtils::openFile(m_filename);
-        if (!m_istream)
-            return NULL;
-        m_rdevice.reset(new RDevice(*m_istream, m_offset, m_length));
-        m_rstream.reset(new RStream(*m_rdevice));
-        return m_rstream.get();
-    }
-
-    virtual void destroyStream()
-    {
-        m_rstream.reset();
-        m_rdevice.reset();
-        FileUtils::closeFile(m_istream);
-        m_istream = NULL;
+        if (m_streamIf)
+            std::cerr << "Attempt to create stream twice!\n";
+        m_streamIf.reset(new NitfStreamIf(m_filename, m_offset, m_length));
     }
 
 private:
     uint64_t m_offset;
     uint64_t m_length;
 
-    std::istream *m_istream;
-    std::unique_ptr<RDevice> m_rdevice;
-    std::unique_ptr<RStream> m_rstream;
-
     virtual void initialize(PointTableRef table);
     NitfReader& operator=(const NitfReader&); // not implemented
     NitfReader(const NitfReader&); // not implemented
diff --git a/plugins/nitf/io/NitfWriter.cpp b/plugins/nitf/io/NitfWriter.cpp
index 6dc5961..47b0b04 100644
--- a/plugins/nitf/io/NitfWriter.cpp
+++ b/plugins/nitf/io/NitfWriter.cpp
@@ -40,7 +40,6 @@
 #include <pdal/pdal_macros.hpp>
 
 #include <pdal/PointView.hpp>
-#include <pdal/GlobalEnvironment.hpp>
 
 #ifdef PDAL_COMPILER_GCC
 #  pragma GCC diagnostic push
@@ -72,8 +71,8 @@
 // NOTES
 //
 // is it legal to write a LAZ file?
-// syntactically, how do we name all the LAS writer options that we will pass to the las writer?
-//
+// syntactically, how do we name all the LAS writer options that we will
+// pass to the las writer?
 
 namespace pdal
 {
@@ -194,7 +193,7 @@ void NitfWriter::doneFile()
         header.getSystemType().set(m_sType);
         header.getOriginStationID().set(m_oStationId);
         if (m_fileTitle.empty())
-            m_fileTitle = m_nitfFilename;
+        	m_fileTitle = FileUtils::getFilename(m_nitfFilename);
         header.getFileTitle().set(m_fileTitle);
         header.getClassification().set(m_fileClass);
         header.getMessageCopyNum().set("00000");
@@ -266,7 +265,7 @@ void NitfWriter::doneFile()
 
         ::nitf::BandInfo info;
         ::nitf::LookupTable lt(0,0);
-        info.init("G",    /* The band representation, Nth band */
+        info.init(" ",    /* The band representation, Nth band */
                   " ",      /* The band subcategory */
                   "N",      /* The band filter condition */
                   "   ",    /* The band standard image filter code */
@@ -291,7 +290,7 @@ void NitfWriter::doneFile()
             8,  /*!< The number of columns */
             8, /*!< The number of rows/block */
             8,  /*!< The number of columns/block */
-            "P");                /*!< Image mode */
+            "B");                /*!< Image mode */
 
         //Image Header fields to set
         subheader.getImageId().set("None");
@@ -311,24 +310,60 @@ void NitfWriter::doneFile()
 
         //AIMIDB
         ::nitf::TRE aimidbTre("AIMIDB");
+
+        //LIDAR defaults
+        if (m_imgDate.size())
+        	aimidbTre.setField("ACQUISITION_DATE", m_imgDate);
+        aimidbTre.setField("MISSION_NO", "UNKN");
+        aimidbTre.setField("MISSION_IDENTIFICATION", "NOT AVAIL.");
+        aimidbTre.setField("FLIGHT_NO", "00");
+        aimidbTre.setField("CURRENT_SEGMENT", "AA");
+        aimidbTre.setField("START_TILE_COLUMN", "001");
+        aimidbTre.setField("START_TILE_ROW", "00001");
+        aimidbTre.setField("END_SEGMENT", "00");
+        aimidbTre.setField("END_TILE_COLUMN", "001");
+        aimidbTre.setField("END_TILE_ROW", "00001");
+
         for (auto& s : m_aimidb)
         {
             StringList v = Utils::split2(s, ':');
             if (v.size() != 2)
             {
                 std::ostringstream oss;
-                oss << "Invalid name/value for AIMDB '" << s <<
+                oss << "Invalid name/value for AIMIDB '" << s <<
                     "'.  Format: <name>:<value>.";
                 throw oss.str();
             }
             Utils::trim(v[0]);
             Utils::trim(v[1]);
             aimidbTre.setField(v[0], v[1]);
-            subheader.getExtendedSection().appendTRE(aimidbTre);
+        }
+        subheader.getExtendedSection().appendTRE(aimidbTre);
+
+		//if IDATIM is empty set it equal to AIMIDB.ACQUISITION_DATE
+        if(!m_imgDate.size())
+        {
+        	m_imgDate=aimidbTre.getField("ACQUISITION_DATE").toString();
+			if (m_imgDate.size())
+				subheader.getImageDateAndTime().set(m_imgDate);
         }
 
         //ACFTB
         ::nitf::TRE acftbTre("ACFTB");
+
+        //LIDAR defaults
+        acftbTre.setField("AC_MSN_ID", "NOT AVAILABLE");
+        acftbTre.setField("SCENE_SOURCE", " ");
+        if (m_imgDate.size()>7)
+        	acftbTre.setField("PDATE", m_imgDate.substr(0,8));
+        acftbTre.setField("MPLAN", "999");
+        acftbTre.setField("LOC_ACCY", "000.00");
+        acftbTre.setField("ROW_SPACING", "0000000");
+        acftbTre.setField("ROW_SPACING_UNITS", "u");
+        acftbTre.setField("COL_SPACING", "0000000");
+        acftbTre.setField("COL_SPACING_UNITS", "u");
+        acftbTre.setField("FOCAL_LENGTH", "999.99");
+
         for (auto& s : m_acftb)
         {
             StringList v = Utils::split2(s, ':');
@@ -342,8 +377,8 @@ void NitfWriter::doneFile()
             Utils::trim(v[0]);
             Utils::trim(v[1]);
             acftbTre.setField(v[0], v[1]);
-            subheader.getExtendedSection().appendTRE(acftbTre);
         }
+        subheader.getExtendedSection().appendTRE(acftbTre);
 
         ::nitf::Writer writer;
         ::nitf::IOHandle output_io(m_nitfFilename.c_str(),
diff --git a/plugins/nitf/test/NitfReaderTest.cpp b/plugins/nitf/test/NitfReaderTest.cpp
index 388bd1b..49fbb3b 100644
--- a/plugins/nitf/test/NitfReaderTest.cpp
+++ b/plugins/nitf/test/NitfReaderTest.cpp
@@ -34,11 +34,8 @@
 
 #include <pdal/pdal_test_main.hpp>
 
-#include <boost/uuid/uuid_io.hpp>
-
 #include <pdal/PointView.hpp>
 #include <pdal/PipelineManager.hpp>
-#include <pdal/PipelineReader.hpp>
 #include <pdal/StageFactory.hpp>
 #include <las/LasWriter.hpp>
 
@@ -63,8 +60,8 @@ TEST(NitfReaderTest, test_one)
 
     PointTable table;
 
-    std::shared_ptr<Stage> nitf_reader(f.createStage("readers.nitf"));
-    EXPECT_TRUE(nitf_reader.get());
+    Stage* nitf_reader(f.createStage("readers.nitf"));
+    EXPECT_TRUE(nitf_reader);
     nitf_reader->setOptions(nitf_opts);
     nitf_reader->prepare(table);
     PointViewSet pbSet = nitf_reader->execute(table);
@@ -90,8 +87,8 @@ TEST(NitfReaderTest, test_one)
 
     PointTable table2;
 
-    std::shared_ptr<Stage> las_reader(f.createStage("readers.las"));
-    EXPECT_TRUE(las_reader.get());
+    Stage* las_reader(f.createStage("readers.las"));
+    EXPECT_TRUE(las_reader);
     las_reader->setOptions(las_opts);
     las_reader->prepare(table2);
     PointViewSet pbSet2 = las_reader->execute(table2);
@@ -120,7 +117,7 @@ TEST(NitfReaderTest, test_one)
 }
 
 
-TEST(NitfReaderTest, test_chipper)
+TEST(NitfReaderTest, test_chipperXML)
 {
     Option option("filename", Support::configuredpath("nitf/chipper.xml"));
     Options options(option);
@@ -128,8 +125,29 @@ TEST(NitfReaderTest, test_chipper)
     PointTable table;
 
     PipelineManager mgr;
-    PipelineReader specReader(mgr);
-    specReader.readPipeline(Support::configuredpath("nitf/chipper.xml"));
+
+    mgr.readPipeline(Support::configuredpath("nitf/chipper.xml"));
+    //ABELL - need faux writer or something.
+    /**
+    mgr.execute();
+    StageSequentialIterator* iter = reader.createSequentialIterator(data);
+    const uint32_t num_read = iter->read(data);
+    EXPECT_EQ(num_read, 13u);
+
+    uint32_t num_blocks = chipper->GetBlockCount();
+    EXPECT_EQ(num_blocks, 8u);
+    **/
+}
+
+TEST(NitfReaderTest, test_chipperJSON)
+{
+    Option option("filename", Support::configuredpath("nitf/chipper.json"));
+    Options options(option);
+
+    PointTable table;
+
+    PipelineManager mgr;
+    mgr.readPipeline(Support::configuredpath("nitf/chipper.json"));
     //ABELL - need faux writer or something.
     /**
     mgr.execute();
@@ -155,8 +173,8 @@ TEST(NitfReaderTest, optionSrs)
 
     PointTable table;
 
-    std::shared_ptr<Stage> nitfReader(f.createStage("readers.nitf"));
-    EXPECT_TRUE(nitfReader.get());
+    Stage* nitfReader(f.createStage("readers.nitf"));
+    EXPECT_TRUE(nitfReader);
     nitfReader->setOptions(nitfOpts);
 
     Options lasOpts;
diff --git a/plugins/nitf/test/NitfWriterTest.cpp b/plugins/nitf/test/NitfWriterTest.cpp
index b09ea13..6f276fb 100644
--- a/plugins/nitf/test/NitfWriterTest.cpp
+++ b/plugins/nitf/test/NitfWriterTest.cpp
@@ -34,7 +34,9 @@
 
 #include <pdal/pdal_test_main.hpp>
 
-#include <pdal/BufferReader.hpp>
+#include <array>
+
+#include <buffer/BufferReader.hpp>
 #include <pdal/PointView.hpp>
 #include <pdal/StageFactory.hpp>
 #include "Support.hpp"
@@ -57,7 +59,8 @@ void compare_contents(const std::string& las_file, const std::string& ntf_file)
 
     StageFactory f;
 
-    std::unique_ptr<Stage> las_reader(f.createStage("readers.las"));
+    Stage* las_reader(f.createStage("readers.las"));
+    EXPECT_TRUE(las_reader);
     las_reader->setOptions(las_opts);
     las_reader->prepare(lasPoints);
     PointViewSet lasViews = las_reader->execute(lasPoints);
@@ -72,7 +75,8 @@ void compare_contents(const std::string& las_file, const std::string& ntf_file)
     ntf_opts.add(ntf_opt);
 
     PointTable ntfPoints;
-    std::unique_ptr<Stage> ntf_reader(f.createStage("readers.nitf"));
+    Stage* ntf_reader(f.createStage("readers.nitf"));
+    EXPECT_TRUE(ntf_reader);
     ntf_reader->setOptions(ntf_opts);
     ntf_reader->prepare(ntfPoints);
     PointViewSet ntfViews = ntf_reader->execute(ntfPoints);
@@ -140,12 +144,12 @@ TEST(NitfWriterTest, test1)
         // writer_opts.add(verbose);
         writer_opts.add(writer_opt1);
 
-        std::unique_ptr<Stage> reader(f.createStage("readers.las"));
-        EXPECT_TRUE(reader.get());
+        Stage* reader(f.createStage("readers.las"));
+        EXPECT_TRUE(reader);
         reader->setOptions(reader_opts);
 
-        std::unique_ptr<Stage> writer(f.createStage("writers.nitf"));
-        EXPECT_TRUE(writer.get());
+        Stage* writer(f.createStage("writers.nitf"));
+        EXPECT_TRUE(writer);
         writer->setOptions(writer_opts);
         writer->setInput(*reader);
         {
@@ -196,7 +200,7 @@ TEST(NitfWriterTest, flex)
 
     PointTable table;
 
-    std::unique_ptr<Stage> reader(f.createStage("readers.nitf"));
+    Stage* reader(f.createStage("readers.nitf"));
     reader->setOptions(readerOps);
 
     reader->prepare(table);
@@ -226,7 +230,7 @@ TEST(NitfWriterTest, flex)
     Options writerOps;
     writerOps.add("filename", Support::temppath("test_#.ntf"));
 
-    std::unique_ptr<Stage> writer(f.createStage("writers.nitf"));
+    Stage* writer(f.createStage("writers.nitf"));
     writer->setOptions(writerOps);
     writer->setInput(reader2);
 
@@ -241,7 +245,7 @@ TEST(NitfWriterTest, flex)
         Options ops;
         ops.add("filename", filename);
 
-        std::unique_ptr<Stage> r(f.createStage("readers.nitf"));
+        Stage* r(f.createStage("readers.nitf"));
         r->setOptions(ops);
         EXPECT_EQ(r->preview().m_pointCount, vs[i]->size());
     }
@@ -258,7 +262,7 @@ TEST(NitfWriterTest, flex2)
 
     PointTable table;
 
-    std::unique_ptr<Stage> reader(f.createStage("readers.nitf"));
+    Stage* reader(f.createStage("readers.nitf"));
     reader->setOptions(readerOps);
 
     reader->prepare(table);
@@ -288,7 +292,7 @@ TEST(NitfWriterTest, flex2)
     Options writerOps;
     writerOps.add("filename", outfile);
 
-    std::unique_ptr<Stage> writer(f.createStage("writers.nitf"));
+    Stage* writer(f.createStage("writers.nitf"));
     writer->setOptions(writerOps);
     writer->setInput(reader2);
 
@@ -300,7 +304,7 @@ TEST(NitfWriterTest, flex2)
     Options ops;
     ops.add("filename", outfile);
 
-    std::unique_ptr<Stage> r(f.createStage("readers.nitf"));
+    Stage* r(f.createStage("readers.nitf"));
     r->setOptions(ops);
     EXPECT_EQ(r->preview().m_pointCount, v->size());
 }
diff --git a/plugins/oci/CMakeLists.txt b/plugins/oci/CMakeLists.txt
index c6e8756..075da9b 100644
--- a/plugins/oci/CMakeLists.txt
+++ b/plugins/oci/CMakeLists.txt
@@ -3,7 +3,10 @@
 #
 
 find_package(Oracle REQUIRED)
+
 include_directories(${ORACLE_INCLUDE_DIR})
+include_directories(${ROOT_DIR}/vendor/pdalboost)
+
 set(OCI_CONNECTION "scott/tiger at localhost/test" CACHE STRING
     "OCI connection string <username/password at instance>")
 
diff --git a/plugins/oci/io/OciReader.cpp b/plugins/oci/io/OciReader.cpp
index 903cf6d..d7f3e15 100644
--- a/plugins/oci/io/OciReader.cpp
+++ b/plugins/oci/io/OciReader.cpp
@@ -32,11 +32,10 @@
 * OF SUCH DAMAGE.
 ****************************************************************************/
 
-#include <boost/algorithm/string.hpp>
-
 #include <pdal/Compression.hpp>
 #include <pdal/GDALUtils.hpp>
-#include <pdal/GlobalEnvironment.hpp>
+#include <pdal/pdal_macros.hpp>
+
 #include "OciReader.hpp"
 
 namespace pdal
@@ -54,10 +53,8 @@ std::string OciReader::getName() const { return s_info.name; }
 void OciReader::processOptions(const Options& options)
 {
     m_schemaFile = options.getValueOrDefault<std::string>("xml_schema_dump");
-    if (options.hasOption("spatialreference"))
-        m_spatialRef = boost::optional<SpatialReference>(
-            options.getValueOrThrow<pdal::SpatialReference>(
-                "spatialreference"));
+    m_spatialRef =
+        options.getValueOrDefault<pdal::SpatialReference>("spatialreference");
     m_query = options.getValueOrThrow<std::string>("query");
     m_connSpec = options.getValueOrDefault<std::string>("connection");
 
@@ -68,10 +65,10 @@ void OciReader::processOptions(const Options& options)
 void OciReader::initialize()
 {
     m_compression = false;
-    GlobalEnvironment::get().initializeGDAL(log(), isDebug());
     m_connection = connect(m_connSpec);
     m_block = BlockPtr(new Block(m_connection));
 
+    gdal::registerDrivers();
     if (m_query.empty())
         throw pdal_error("'query' statement is empty. No data can be read "
             "from pdal::OciReader");
@@ -89,11 +86,11 @@ void OciReader::initialize()
         throw pdal_error("Unable to fetch a point cloud entry entry!");
     m_block->setFetched();
 
-    // Set the spatial reference from options or set the one from the block.
-    if (m_spatialRef)
-        setSpatialReference(*m_spatialRef);
-    else
-        setSpatialReference(fetchSpatialReference(m_stmt, m_block));
+    // If the spatial reference wasn't provided as an option, fetch it from
+    // the data source.
+    if (m_spatialRef.empty())
+        m_spatialRef = fetchSpatialReference(m_stmt, m_block);
+    setSpatialReference(m_spatialRef);
 }
 
 
@@ -110,27 +107,30 @@ void OciReader::defineBlock(Statement stmt, BlockPtr block) const
     while (stmt->GetNextField(iCol, szFieldName, &hType, &nSize,
         &nPrecision, &nScale, szTypeName))
     {
-        if (hType == SQLT_NTY && boost::iequals(szTypeName, "SDO_PC"))
+        std::string typeName = Utils::toupper(szTypeName);
+        std::string fieldName = Utils::toupper(szFieldName);
+
+        if (hType == SQLT_NTY && (typeName == "SDO_PC"))
             stmt->Define(&(block->pc));
-        else if (boost::iequals(szFieldName, "OBJ_ID"))
+        else if (fieldName == "OBJ_ID")
             stmt->Define(&(block->obj_id));
-        else if (boost::iequals(szFieldName, "BLK_ID"))
+        else if (fieldName == "BLK_ID")
             stmt->Define(&(block->blk_id));
-        else if (boost::iequals(szFieldName, "BLK_EXTENT"))
+        else if (fieldName == "BLK_EXTENT")
             stmt->Define(&(block->blk_extent));
-        else if (boost::iequals(szFieldName, "BLK_DOMAIN"))
+        else if (fieldName == "BLK_DOMAIN")
             stmt->Define(&(block->blk_domain));
-        else if (boost::iequals(szFieldName, "PCBLK_MIN_RES"))
+        else if (fieldName == "PCBLK_MIN_RES")
             stmt->Define(&(block->pcblk_min_res));
-        else if (boost::iequals(szFieldName, "PCBLK_MAX_RES"))
+        else if (fieldName == "PCBLK_MAX_RES")
             stmt->Define(&(block->pcblk_max_res));
-        else if (boost::iequals(szFieldName, "NUM_POINTS"))
+        else if (fieldName == "NUM_POINTS")
             stmt->Define(&(block->num_points));
-        else if (boost::iequals(szFieldName, "NUM_UNSORTED_POINTS"))
+        else if (fieldName == "NUM_UNSORTED_POINTS")
             stmt->Define(&(block->num_unsorted_points));
-        else if (boost::iequals(szFieldName, "PT_SORT_DIM"))
+        else if (fieldName == "PT_SORT_DIM")
             stmt->Define(&(block->pt_sort_dim));
-        else if (boost::iequals(szFieldName, "POINTS"))
+        else if (fieldName == "POINTS")
             stmt->Define(&(block->locator));
         iCol++;
     }
diff --git a/plugins/oci/io/OciReader.hpp b/plugins/oci/io/OciReader.hpp
index 5a7bea5..0fdfdd4 100644
--- a/plugins/oci/io/OciReader.hpp
+++ b/plugins/oci/io/OciReader.hpp
@@ -88,7 +88,7 @@ private:
     std::string m_schemaFile;
     std::string m_connSpec;
     bool m_updatePointSourceId;
-    boost::optional<SpatialReference> m_spatialRef;
+    SpatialReference m_spatialRef;
     bool m_atEnd;
     std::map<int32_t, XMLSchema> m_schemas;
     bool m_compression;
diff --git a/plugins/oci/io/OciWriter.cpp b/plugins/oci/io/OciWriter.cpp
index 33555df..c90a366 100644
--- a/plugins/oci/io/OciWriter.cpp
+++ b/plugins/oci/io/OciWriter.cpp
@@ -37,14 +37,12 @@
 #include <pdal/Compression.hpp>
 #include <pdal/PointView.hpp>
 #include <pdal/StageFactory.hpp>
-#include <pdal/GlobalEnvironment.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include "OciWriter.hpp"
 
 #include <fstream>
 
-#include <boost/algorithm/string.hpp>
-
 #include <ogr_api.h>
 
 namespace pdal
@@ -76,7 +74,7 @@ OciWriter::OciWriter()
 
 void OciWriter::initialize()
 {
-    GlobalEnvironment::get().initializeGDAL(log(), isDebug());
+    gdal::registerDrivers();
     m_connection = connect(m_connSpec);
     m_gtype = getGType();
 }
@@ -346,7 +344,7 @@ bool OciWriter::blockTableExists()
     log()->get(LogLevel::Debug) << "checking ... " << szTable << std::endl;
     do
     {
-        if (boost::iequals(szTable, m_blockTableName))
+        if (Utils::iequals(szTable, m_blockTableName))
             return true;
     } while (statement->Fetch());
 
@@ -391,8 +389,8 @@ bool OciWriter::isGeographic(int32_t srid)
         throw std::runtime_error(oss.str());
     }
 
-    return (boost::iequals(kind.get(), "GEOGRAPHIC2D") ||
-        boost::iequals(kind.get(), "GEOGRAPHIC3D"));
+    std::string k = Utils::toupper(kind.get());
+    return ((k == "GEOGRAPHIC2D") || (k == "GEOGRAPHIC3D"));
 }
 
 
@@ -430,22 +428,17 @@ std::string OciWriter::loadSQLData(std::string const& filename)
 }
 
 
-void OciWriter::runFileSQL(std::string const& filename)
+void OciWriter::runFileSQL(std::string const& sql)
 {
-    std::ostringstream oss;
-    std::string sql = getOptions().getValueOrDefault<std::string>(filename);
-
-    if (!sql.size())
+    if (sql.empty())
         return;
 
+    std::ostringstream oss;
     if (!FileUtils::fileExists(sql))
         oss << sql;
     else
         // Our "sql" is really the filename in the ptree
         oss << loadSQLData(sql);
-
-    if (isDebug())
-        std::cout << "running "<< filename << " ..." <<std::endl;
     runCommand(oss);
 }
 
@@ -684,13 +677,13 @@ void OciWriter::processOptions(const Options& options)
     m_srid = options.getValueOrThrow<uint32_t>("srid");
     m_baseTableBounds =
         getDefaultedOption<BOX3D>(options, "base_table_bounds");
-    m_baseTableName = boost::to_upper_copy(
+    m_baseTableName = Utils::toupper(
         options.getValueOrThrow<std::string>("base_table_name"));
-    m_blockTableName = boost::to_upper_copy(
+    m_blockTableName = Utils::toupper(
         options.getValueOrThrow<std::string>("block_table_name"));
-    m_cloudColumnName = boost::to_upper_copy(
+    m_cloudColumnName = Utils::toupper(
         options.getValueOrThrow<std::string>("cloud_column_name"));
-    m_blockTablePartitionColumn = boost::to_upper_copy(
+    m_blockTablePartitionColumn = Utils::toupper(
         getDefaultedOption<std::string>(options,
             "block_table_partition_column"));
     m_blockTablePartitionValue =
@@ -719,6 +712,9 @@ void OciWriter::processOptions(const Options& options)
     if (m_compression && (m_orientation == Orientation::DimensionMajor))
         throw pdal_error("LAZperf compression not supported for "
             "dimension-major point storage.");
+
+    m_preSql = options.getValueOrDefault<std::string>("pre_sql");
+    m_postBlockSql = options.getValueOrDefault<std::string>("post_block_sql");
 }
 
 
@@ -771,7 +767,7 @@ void OciWriter::ready(PointTableRef table)
     bool haveOutputTable = blockTableExists();
     if (m_overwrite && haveOutputTable)
         wipeBlockTable();
-    runFileSQL("pre_sql");
+    runFileSQL(m_preSql);
     if (!haveOutputTable)
         createBlockTable();
 
@@ -799,7 +795,7 @@ void OciWriter::done(PointTableRef table)
     if (m_reenableCloudTrigger)
         turnOn_SDO_PC_Trigger(m_triggerName);
     m_connection->Commit();
-    runFileSQL("post_block_sql");
+    runFileSQL(m_postBlockSql);
 }
 
 
@@ -837,8 +833,6 @@ void OciWriter::setOrdinates(Statement statement, OCIArray* ordinates,
 
 void OciWriter::writePointMajor(PointViewPtr view, std::vector<char>& outbuf)
 {
-    m_callback->setTotal(view->size());
-    m_callback->invoke(0);
     if (m_compression)
     {
         outbuf.resize(0);
@@ -878,19 +872,15 @@ void OciWriter::writePointMajor(PointViewPtr view, std::vector<char>& outbuf)
         {
             size_t size = readPoint(*view.get(), idx, pos);
             totalSize += size;
-            if (idx % 100 == 0)
-                m_callback->invoke(idx);
             pos += size;
         }
         outbuf.resize(totalSize);
     }
-    m_callback->invoke(view->size());
 }
 
 
 void OciWriter::writeDimMajor(PointViewPtr view, std::vector<char>& outbuf)
 {
-    size_t clicks = 0;
     size_t interrupt = dbDimTypes().size() * 100;
     size_t totalSize = 0;
     char *pos = outbuf.data();
@@ -904,8 +894,6 @@ void OciWriter::writeDimMajor(PointViewPtr view, std::vector<char>& outbuf)
                 xmlDim.m_dimType.m_id, idx);
             pos += size;
             totalSize += size;
-            if (clicks++ % interrupt == 0)
-                m_callback->invoke(clicks / xmlDims.size());
         }
     }
     outbuf.resize(totalSize);
@@ -1063,7 +1051,7 @@ std::string OciWriter::shutOff_SDO_PC_Trigger()
         return std::string();
     }
 
-    if (boost::iequals(szStatus, "ENABLED"))
+    if (Utils::iequals(szStatus, "ENABLED"))
     {
         oss.str("");
         oss << "ALTER TRIGGER " << szTrigger << " DISABLE ";
diff --git a/plugins/oci/io/OciWriter.hpp b/plugins/oci/io/OciWriter.hpp
index 38d34e1..255e9d8 100644
--- a/plugins/oci/io/OciWriter.hpp
+++ b/plugins/oci/io/OciWriter.hpp
@@ -132,6 +132,8 @@ private:
     bool m_streamChunks;
     Orientation::Enum m_orientation;
     std::string m_connSpec;
+    std::string m_preSql;
+    std::string m_postBlockSql;
 
     OciWriter& operator=(const OciWriter&); // not implemented
     OciWriter(const OciWriter&); // not implemented
diff --git a/plugins/oci/test/OCITest.cpp b/plugins/oci/test/OCITest.cpp
index e0ca4b5..6b4fb63 100644
--- a/plugins/oci/test/OCITest.cpp
+++ b/plugins/oci/test/OCITest.cpp
@@ -216,14 +216,14 @@ TEST_F(OCITest, throughput)
     PointTable table;
 
     StageFactory f;
-    std::unique_ptr<Stage> reader(f.createStage("readers.nitf"));
+    Stage* reader(f.createStage("readers.nitf"));
     reader->setOptions(options);
 
     SplitFilter split(10000);
     split.setInput(*reader);
 
-    std::unique_ptr<Stage> writer(f.createStage("writers.oci"));
-    EXPECT_TRUE(writer.get());
+    Stage* writer(f.createStage("writers.oci"));
+    EXPECT_TRUE(writer);
     writer->setOptions(options);
     writer->setInput(split);
 
@@ -271,8 +271,8 @@ void writeData(Orientation::Enum orient, bool scaling, bool compression = false)
     SplitFilter split;
     split.setInput(reader);
 
-    std::unique_ptr<Stage> writer(f.createStage("writers.oci"));
-    EXPECT_TRUE(writer.get());
+    Stage* writer(f.createStage("writers.oci"));
+    EXPECT_TRUE(writer);
     writer->setOptions(options);
     writer->setInput(split);
 
@@ -302,7 +302,7 @@ void compare(const PointViewPtr candidate, std::string filename)
 
     EXPECT_EQ(source->size(), candidate->size());
     PointId limit = std::min(source->size(), candidate->size());
-    
+
     for (PointId i = 0; i < limit; ++i)
     {
         using namespace Dimension;
@@ -349,8 +349,8 @@ void readData()
     options.add("query", oss.str());
 
     StageFactory f;
-    std::unique_ptr<Stage> reader(f.createStage("readers.oci"));
-    EXPECT_TRUE(reader.get());
+    Stage* reader(f.createStage("readers.oci"));
+    EXPECT_TRUE(reader);
 
     reader->setOptions(options);
 
diff --git a/plugins/p2g/io/P2gWriter.cpp b/plugins/p2g/io/P2gWriter.cpp
index 770fdfe..e6e7b03 100644
--- a/plugins/p2g/io/P2gWriter.cpp
+++ b/plugins/p2g/io/P2gWriter.cpp
@@ -34,11 +34,11 @@
 
 #include "P2gWriter.hpp"
 #include <pdal/PointView.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <iostream>
 #include <algorithm>
 
-#include <boost/algorithm/string.hpp>
 #include <points2grid/Interpolation.hpp>
 
 namespace pdal
@@ -57,6 +57,7 @@ void P2gWriter::processOptions(const Options& options)
 {
     m_GRID_DIST_X = options.getValueOrDefault<double>("grid_dist_x", 6.0);
     m_GRID_DIST_Y = options.getValueOrDefault<double>("grid_dist_y", 6.0);
+    m_zName = options.getValueOrDefault<std::string>("z", "Z");
     m_RADIUS = options.getValueOrDefault<double>("radius",
         8.4852813742385713);
     m_fill_window_size = options.getValueOrDefault<uint32_t>(
@@ -71,32 +72,36 @@ void P2gWriter::processOptions(const Options& options)
     {
         for (auto i = types.begin(); i != types.end(); ++i)
         {
-            if (boost::iequals(i->getValue<std::string>(), "min"))
+            std::string val = Utils::tolower(i->getValue<std::string>());
+
+            if (val == "min")
                 m_outputTypes |= OUTPUT_TYPE_MIN;
-            if (boost::iequals(i->getValue<std::string>(), "max"))
+            if (val == "max")
                 m_outputTypes |= OUTPUT_TYPE_MAX;
-            if (boost::iequals(i->getValue<std::string>(), "mean"))
+            if (val == "mean")
                 m_outputTypes |= OUTPUT_TYPE_MEAN;
-            if (boost::iequals(i->getValue<std::string>(), "idw"))
+            if (val == "idw")
                 m_outputTypes |= OUTPUT_TYPE_IDW;
-            if (boost::iequals(i->getValue<std::string>(), "den"))
+            if (val == "den")
                 m_outputTypes |= OUTPUT_TYPE_DEN;
-            if (boost::iequals(i->getValue<std::string>(), "std"))
+            if (val == "std")
                 m_outputTypes |= OUTPUT_TYPE_STD;
-            if (boost::iequals(i->getValue<std::string>(), "all"))
+            if (val == "all")
                 m_outputTypes = OUTPUT_TYPE_ALL;
         }
     }
 
     std::string output_format =
         options.getValueOrDefault<std::string>("output_format", "grid");
-    if (boost::iequals(output_format, "grid"))
+
+    std::string fmt = Utils::tolower(output_format);
+    if (fmt == "grid")
         m_outputFormat = OUTPUT_FORMAT_GRID_ASCII;
-    else if (boost::iequals(output_format, "asc"))
+    else if (fmt == "asc")
         m_outputFormat = OUTPUT_FORMAT_ARC_ASCII;
-    else if (boost::iequals(output_format, "tif"))
+    else if (fmt == "tif")
         m_outputFormat = OUTPUT_FORMAT_GDAL_GTIFF;
-    else if (boost::iequals(output_format, "all"))
+    else if (fmt == "all")
         m_outputFormat = OUTPUT_FORMAT_ALL;
     else
     {
@@ -138,7 +143,7 @@ Options P2gWriter::getDefaultOptions()
     Option radius("radius", default_radius);
 
     Option fill_window_size("fill_window_size", 3);
-    Option dim_z("Z", "Z", "Name of Z dimension to interpolate");
+    Option dim_z("z", "Z", "Name of Z dimension to interpolate");
     options.add(dim_z);
     options.add(grid_x);
     options.add(grid_y);
@@ -150,14 +155,12 @@ Options P2gWriter::getDefaultOptions()
 
 void P2gWriter::write(const PointViewPtr view)
 {
-    std::string z_name = getOptions().getValueOrDefault<std::string>("z", "Z");
-
     for (point_count_t idx = 0; idx < view->size(); idx++)
     {
         double x = view->getFieldAs<double>(Dimension::Id::X, idx);
         double y = view->getFieldAs<double>(Dimension::Id::Y, idx);
         double z = view->getFieldAs<double>(Dimension::Id::Z, idx);
-        m_coordinates.push_back(boost::tuple<double, double, double>(x, y, z));
+        m_coordinates.push_back(Coordinate{x, y, z});
     }
 
     view->calculateBounds(m_bounds);
@@ -197,21 +200,14 @@ void P2gWriter::done(PointTableRef table)
         throw p2g_error("unable to initialize interpolator");
     }
 
-    int rc(0);
-
-    std::vector<boost::tuple<double, double, double> >::const_iterator i;
-    for (i = m_coordinates.begin(); i!= m_coordinates.end(); ++i)
+    for (auto coord : m_coordinates)
     {
-        double x = i->get<0>();
-        double y = i->get<1>();
-        x = x - m_bounds.minx;
-        y = y - m_bounds.miny;
+        double x = coord.x - m_bounds.minx;
+        double y = coord.y - m_bounds.miny;
+        double z = coord.z;
 
-        rc = m_interpolator->update(x, y, i->get<2>());
-        if (rc < 0)
-        {
+        if (m_interpolator->update(x, y, z) < 0)
             throw p2g_error("interp->update() error while processing ");
-        }
     }
 
     double adfGeoTransform[6];
@@ -226,13 +222,12 @@ void P2gWriter::done(PointTableRef table)
 
     log()->get(LogLevel::Debug) << "Output SRS  :'" << srs.getWKT() << "'" <<
         std::endl;
-    if ((rc = m_interpolator->finish(const_cast<char*>(m_filename.c_str()),
+    if (m_interpolator->finish(const_cast<char*>(m_filename.c_str()),
         m_outputFormat, m_outputTypes, adfGeoTransform,
-        srs.getWKT().c_str())) < 0)
+        srs.getWKT().c_str()) < 0)
     {
         throw p2g_error("interp->finish() error");
     }
 }
 
 } // namespaces
-
diff --git a/plugins/p2g/io/P2gWriter.hpp b/plugins/p2g/io/P2gWriter.hpp
index 63d8953..7eb8bbe 100644
--- a/plugins/p2g/io/P2gWriter.hpp
+++ b/plugins/p2g/io/P2gWriter.hpp
@@ -98,8 +98,16 @@ private:
 
     std::string m_filename;
     int m_outputFormat;
+    std::string m_zName;
 
-    std::vector<boost::tuple<double, double, double> > m_coordinates;
+    typedef struct
+    {
+        double x;
+        double y;
+        double z;
+    } Coordinate;
+
+    std::vector<Coordinate> m_coordinates;
 };
 
 } // namespaces
diff --git a/plugins/pcl/CMakeLists.txt b/plugins/pcl/CMakeLists.txt
index 86d0cc0..ba01626 100644
--- a/plugins/pcl/CMakeLists.txt
+++ b/plugins/pcl/CMakeLists.txt
@@ -23,6 +23,13 @@
 
 find_package(PCL QUIET 1.7 REQUIRED)
 
+#
+# PCL has compiler issues.
+#
+if (PDAL_COMPILER_CLANG)
+    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c99-extensions")
+endif()
+
 set_package_properties(PCL PROPERTIES DESCRIPTION "Point Cloud Library"
     URL "http://pointclouds.org" TYPE RECOMMENDED
     PURPOSE "Enables PCD reader/writer, PCLVisualizer, PCLBlock filter, and ground, pcl, smooth, and view kernels")
diff --git a/plugins/pcl/filters/DartSampleFilter.cpp b/plugins/pcl/filters/DartSampleFilter.cpp
index 5f8edad..4e5140f 100644
--- a/plugins/pcl/filters/DartSampleFilter.cpp
+++ b/plugins/pcl/filters/DartSampleFilter.cpp
@@ -42,6 +42,8 @@
 #include <pcl/point_types.h>
 #include <pcl/io/pcd_io.h>
 
+#include <pdal/pdal_macros.hpp>
+
 namespace pdal
 {
 
@@ -70,9 +72,8 @@ void DartSampleFilter::processOptions(const Options& options)
 
 PointViewSet DartSampleFilter::run(PointViewPtr input)
 {
-    PointViewPtr output = input->makeNew();
     PointViewSet viewSet;
-    viewSet.insert(output);
+    PointViewPtr output = input->makeNew();
 
     log()->floatPrecision(2);
     log()->get(LogLevel::Info) << "DartSampleFilter (radius="
@@ -130,6 +131,7 @@ PointViewSet DartSampleFilter::run(PointViewPtr input)
                                <<  100*frac
                                << "%)\n";
 
+    viewSet.insert(output);
     return viewSet;
 }
 
diff --git a/plugins/pcl/filters/GreedyProjectionFilter.cpp b/plugins/pcl/filters/GreedyProjectionFilter.cpp
index 1bd2800..4fa268b 100644
--- a/plugins/pcl/filters/GreedyProjectionFilter.cpp
+++ b/plugins/pcl/filters/GreedyProjectionFilter.cpp
@@ -43,6 +43,8 @@
 #include <pcl/io/pcd_io.h>
 #include <pcl/surface/gp3.h>
 
+#include <pdal/pdal_macros.hpp>
+
 namespace pdal
 {
 
diff --git a/plugins/pcl/filters/GridProjectionFilter.cpp b/plugins/pcl/filters/GridProjectionFilter.cpp
index d71a61a..73a7d33 100644
--- a/plugins/pcl/filters/GridProjectionFilter.cpp
+++ b/plugins/pcl/filters/GridProjectionFilter.cpp
@@ -43,6 +43,8 @@
 #include <pcl/io/pcd_io.h>
 #include <pcl/surface/grid_projection.h>
 
+#include <pdal/pdal_macros.hpp>
+
 namespace pdal
 {
 
diff --git a/plugins/pcl/filters/GroundFilter.cpp b/plugins/pcl/filters/GroundFilter.cpp
index 2fb8d68..7c82a2d 100644
--- a/plugins/pcl/filters/GroundFilter.cpp
+++ b/plugins/pcl/filters/GroundFilter.cpp
@@ -40,6 +40,7 @@
 #include <pdal/PointTable.hpp>
 #include <pdal/PointView.hpp>
 #include <pdal/StageFactory.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <pcl/point_types.h>
 #include <pcl/console/print.h>
diff --git a/plugins/pcl/filters/HeightFilter.cpp b/plugins/pcl/filters/HeightFilter.cpp
index 6503418..19b0da8 100644
--- a/plugins/pcl/filters/HeightFilter.cpp
+++ b/plugins/pcl/filters/HeightFilter.cpp
@@ -47,6 +47,7 @@
 #include <pdal/PointTable.hpp>
 #include <pdal/PointView.hpp>
 #include <pdal/StageFactory.hpp>
+#include <pdal/pdal_macros.hpp>
 
 // other
 #include <pcl/console/print.h>
@@ -76,7 +77,7 @@ std::string HeightFilter::getName() const
 
 void HeightFilter::addDimensions(PointLayoutPtr layout)
 {
-    m_heightDim = layout->registerOrAssignDim("Height", Dimension::Type::Double);
+    layout->registerDim(pdal::Dimension::Id::HeightAboveGround);
 }
 
 void HeightFilter::prepared(PointTableRef table)
@@ -169,11 +170,11 @@ void HeightFilter::filter(PointView& view)
         double ground_Z = view.getFieldAs<double>(Dimension::Id::Z, ground->indices[neighbors[0]]);
         double height = nonground_Z - ground_Z;
 
-        view.setField(m_heightDim, nonground[i], height);
+        view.setField(pdal::Dimension::Id::HeightAboveGround, nonground[i], height);
     }
 
     for (auto const& ground_idx : ground->indices)
-        view.setField(m_heightDim, ground_idx, 0.0);
+        view.setField(pdal::Dimension::Id::HeightAboveGround, ground_idx, 0.0);
 }
 
 
diff --git a/plugins/pcl/filters/HeightFilter.hpp b/plugins/pcl/filters/HeightFilter.hpp
index 69a2704..174eb29 100644
--- a/plugins/pcl/filters/HeightFilter.hpp
+++ b/plugins/pcl/filters/HeightFilter.hpp
@@ -61,7 +61,6 @@ public:
     std::string getName() const;
 
 private:
-    Dimension::Id::Enum m_heightDim;
 
     virtual void addDimensions(PointLayoutPtr layout);
     virtual void prepared(PointTableRef table);
diff --git a/plugins/pcl/filters/MovingLeastSquaresFilter.cpp b/plugins/pcl/filters/MovingLeastSquaresFilter.cpp
index 06af7fb..8bd6e2a 100644
--- a/plugins/pcl/filters/MovingLeastSquaresFilter.cpp
+++ b/plugins/pcl/filters/MovingLeastSquaresFilter.cpp
@@ -42,6 +42,8 @@
 #include <pcl/io/pcd_io.h>
 #include <pcl/surface/mls.h>
 
+#include <pdal/pdal_macros.hpp>
+
 namespace pdal
 {
 
diff --git a/plugins/pcl/filters/PCLBlock.cpp b/plugins/pcl/filters/PCLBlock.cpp
index f89d908..f0dcc88 100644
--- a/plugins/pcl/filters/PCLBlock.cpp
+++ b/plugins/pcl/filters/PCLBlock.cpp
@@ -41,6 +41,8 @@
 #include <pcl/point_types.h>
 #include <pcl/io/pcd_io.h>
 
+#include <pdal/pdal_macros.hpp>
+
 namespace pdal
 {
 
diff --git a/plugins/pcl/filters/PoissonFilter.cpp b/plugins/pcl/filters/PoissonFilter.cpp
index 8bf97eb..f911af4 100644
--- a/plugins/pcl/filters/PoissonFilter.cpp
+++ b/plugins/pcl/filters/PoissonFilter.cpp
@@ -43,6 +43,8 @@
 #include <pcl/io/pcd_io.h>
 #include <pcl/surface/poisson.h>
 
+#include <pdal/pdal_macros.hpp>
+
 namespace pdal
 {
 
diff --git a/plugins/pcl/filters/RadiusOutlierFilter.cpp b/plugins/pcl/filters/RadiusOutlierFilter.cpp
index 7526a12..d3f9ea1 100644
--- a/plugins/pcl/filters/RadiusOutlierFilter.cpp
+++ b/plugins/pcl/filters/RadiusOutlierFilter.cpp
@@ -40,6 +40,7 @@
 #include <pdal/PointTable.hpp>
 #include <pdal/PointView.hpp>
 #include <pdal/StageFactory.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <pcl/point_types.h>
 #include <pcl/console/print.h>
@@ -136,6 +137,14 @@ PointViewSet RadiusOutlierFilter::run(PointViewPtr input)
     pcl::PointIndicesPtr inliers(new pcl::PointIndices);
     ror.getRemovedIndices(*inliers);
 
+    PointViewSet viewSet;
+    if (inliers->indices.empty())
+    {
+        log()->get(LogLevel::Warning) << "Requested filter would remove all points. Try a larger radius/smaller minimum neighbors.\n";
+        viewSet.insert(input);
+        return viewSet;
+    }
+
     // inverse are the outliers
     std::vector<int> outliers(input->size()-inliers->indices.size());
     for (PointId i = 0, j = 0, k = 0; i < input->size(); ++i)
@@ -148,7 +157,6 @@ PointViewSet RadiusOutlierFilter::run(PointViewPtr input)
         outliers[k++] = i;
     }
 
-    PointViewSet viewSet;
     if (!outliers.empty() && (m_classify || m_extract))
     {
 
@@ -184,10 +192,10 @@ PointViewSet RadiusOutlierFilter::run(PointViewPtr input)
     else
     {
         if (outliers.empty())
-            log()->get(LogLevel::Debug2) << "Filtered cloud has no outliers!\n";
+            log()->get(LogLevel::Warning) << "Filtered cloud has no outliers!\n";
 
         if (!(m_classify || m_extract))
-            log()->get(LogLevel::Debug2) << "Must choose --classify or --extract\n";
+            log()->get(LogLevel::Warning) << "Must choose --classify or --extract\n";
 
         // return the input buffer unchanged
         viewSet.insert(input);
diff --git a/plugins/pcl/filters/StatisticalOutlierFilter.cpp b/plugins/pcl/filters/StatisticalOutlierFilter.cpp
index 91a2f53..65e8048 100644
--- a/plugins/pcl/filters/StatisticalOutlierFilter.cpp
+++ b/plugins/pcl/filters/StatisticalOutlierFilter.cpp
@@ -40,6 +40,7 @@
 #include <pdal/PointTable.hpp>
 #include <pdal/PointView.hpp>
 #include <pdal/StageFactory.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <pcl/point_types.h>
 #include <pcl/console/print.h>
@@ -136,6 +137,16 @@ PointViewSet StatisticalOutlierFilter::run(PointViewPtr input)
     pcl::PointIndicesPtr inliers(new pcl::PointIndices);
     sor.getRemovedIndices(*inliers);
 
+    log()->get(LogLevel::Debug2) << inliers->indices.size() << std::endl;
+
+    PointViewSet viewSet;
+    if (inliers->indices.empty())
+    {
+        log()->get(LogLevel::Warning) << "Requested filter would remove all points. Try increasing the multiplier.\n";
+        viewSet.insert(input);
+        return viewSet;
+    }
+
     // inverse are the outliers
     std::vector<int> outliers(input->size()-inliers->indices.size());
     for (PointId i = 0, j = 0, k = 0; i < input->size(); ++i)
@@ -148,7 +159,6 @@ PointViewSet StatisticalOutlierFilter::run(PointViewPtr input)
         outliers[k++] = i;
     }
 
-    PointViewSet viewSet;
     if (!outliers.empty() && (m_classify || m_extract))
     {
 
@@ -184,10 +194,10 @@ PointViewSet StatisticalOutlierFilter::run(PointViewPtr input)
     else
     {
         if (outliers.empty())
-            log()->get(LogLevel::Debug2) << "Filtered cloud has no outliers!\n";
+            log()->get(LogLevel::Warning) << "Filtered cloud has no outliers!\n";
 
         if (!(m_classify || m_extract))
-            log()->get(LogLevel::Debug2) << "Must choose --classify or --extract\n";
+            log()->get(LogLevel::Warning) << "Must choose --classify or --extract\n";
 
         // return the input buffer unchanged
         viewSet.insert(input);
diff --git a/plugins/pcl/filters/VoxelGridFilter.cpp b/plugins/pcl/filters/VoxelGridFilter.cpp
index 6d17700..9f9f0f5 100644
--- a/plugins/pcl/filters/VoxelGridFilter.cpp
+++ b/plugins/pcl/filters/VoxelGridFilter.cpp
@@ -42,6 +42,8 @@
 #include <pcl/io/pcd_io.h>
 #include <pcl/filters/voxel_grid.h>
 
+#include <pdal/pdal_macros.hpp>
+
 namespace pdal
 {
 
diff --git a/plugins/pcl/io/PCLVisualizer.cpp b/plugins/pcl/io/PCLVisualizer.cpp
index 9d85202..5da1b1d 100644
--- a/plugins/pcl/io/PCLVisualizer.cpp
+++ b/plugins/pcl/io/PCLVisualizer.cpp
@@ -44,6 +44,7 @@
 
 #include <pdal/PointView.hpp>
 #include <pdal/StageFactory.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include "PCLConversions.hpp"
 #include "point_types.hpp"
diff --git a/plugins/pcl/io/PcdReader.cpp b/plugins/pcl/io/PcdReader.cpp
index 5dbcb47..f389026 100644
--- a/plugins/pcl/io/PcdReader.cpp
+++ b/plugins/pcl/io/PcdReader.cpp
@@ -43,6 +43,8 @@
 #include <pdal/PointView.hpp>
 #include "PCLConversions.hpp"
 
+#include <pdal/pdal_macros.hpp>
+
 namespace pdal
 {
 
diff --git a/plugins/pcl/io/PcdWriter.cpp b/plugins/pcl/io/PcdWriter.cpp
index bc612ed..8d93c91 100644
--- a/plugins/pcl/io/PcdWriter.cpp
+++ b/plugins/pcl/io/PcdWriter.cpp
@@ -39,9 +39,6 @@
 #include <iostream>
 #include <map>
 
-#include <boost/algorithm/string.hpp>
-#include <boost/algorithm/string/erase.hpp>
-
 #include <pcl/io/pcd_io.h>
 #include <pcl/io/impl/pcd_io.hpp>
 
diff --git a/plugins/pcl/kernel/GroundKernel.cpp b/plugins/pcl/kernel/GroundKernel.cpp
index 824573b..41db7a2 100644
--- a/plugins/pcl/kernel/GroundKernel.cpp
+++ b/plugins/pcl/kernel/GroundKernel.cpp
@@ -36,7 +36,6 @@
 #include "GroundKernel.hpp"
 
 #include <pdal/KernelFactory.hpp>
-#include <pdal/KernelSupport.hpp>
 #include <pdal/Options.hpp>
 #include <pdal/pdal_macros.hpp>
 #include <pdal/PointTable.hpp>
@@ -74,40 +73,19 @@ GroundKernel::GroundKernel()
     , m_approximate(false)
 {}
 
-void GroundKernel::validateSwitches()
+void GroundKernel::addSwitches(ProgramArgs& args)
 {
-    if (m_inputFile == "")
-    {
-        throw app_usage_error("--input/-i required");
-    }
-
-    if (m_outputFile == "")
-    {
-        throw app_usage_error("--output/-o required");
-    }
-}
-
-void GroundKernel::addSwitches()
-{
-    po::options_description* file_options = new po::options_description("file options");
-
-    file_options->add_options()
-    ("input,i", po::value<std::string>(&m_inputFile)->default_value(""), "input file name")
-    ("output,o", po::value<std::string>(&m_outputFile)->default_value(""), "output file name")
-    ("max_window_size", po::value<double>(&m_maxWindowSize)->default_value(33), "max window size")
-    ("slope", po::value<double>(&m_slope)->default_value(1), "slope")
-    ("max_distance", po::value<double>(&m_maxDistance)->default_value(2.5), "max distance")
-    ("initial_distance", po::value<double>(&m_initialDistance)->default_value(0.15, "0.15"), "initial distance")
-    ("cell_size", po::value<double>(&m_cellSize)->default_value(1), "cell size")
-    ("classify", po::bool_switch(&m_classify), "apply classification labels?")
-    ("extract", po::bool_switch(&m_extract), "extract ground returns?")
-    ("approximate,a", po::bool_switch(&m_approximate), "use approximate algorithm? (much faster)")
-    ;
-
-    addSwitchSet(file_options);
-
-    addPositionalSwitch("input", 1);
-    addPositionalSwitch("output", 1);
+    args.add("input,i", "Input filename", m_inputFile).setPositional();
+    args.add("output,o", "Output filename", m_outputFile).setPositional();
+    args.add("max_window_size", "Max window size", m_maxWindowSize, 33.0);
+    args.add("slope", "Slope", m_slope, 1.0);
+    args.add("max_distance", "Max distance", m_maxDistance, 2.5);
+    args.add("initial_distance", "Initial distance", m_initialDistance, .15);
+    args.add("cell_size", "Cell size", m_cellSize, 1.0);
+    args.add("classify", "Apply classification labels?", m_classify);
+    args.add("extract", "extract ground returns?", m_extract);
+    args.add("approximate,a", "use approximate algorithm? (much faster)",
+        m_approximate);
 }
 
 int GroundKernel::execute()
@@ -134,7 +112,7 @@ int GroundKernel::execute()
     groundOptions.add<uint32_t>("verbose", getVerboseLevel());
 
     StageFactory f;
-    std::unique_ptr<Stage> groundStage(f.createStage("filters.ground"));
+    Stage* groundStage(f.createStage("filters.ground"));
     groundStage->setOptions(groundOptions);
     groundStage->setInput(readerStage);
 
@@ -146,13 +124,6 @@ int GroundKernel::execute()
     Stage& writer(Kernel::makeWriter(m_outputFile, *groundStage));
     writer.setOptions(writerOptions);
 
-    std::vector<std::string> cmd = getProgressShellCommand();
-    UserCallback *callback =
-        cmd.size() ? (UserCallback *)new ShellScriptCallback(cmd) :
-        (UserCallback *)new HeartbeatCallback();
-
-    writer.setUserCallback(callback);
-
     applyExtraStageOptionsRecursive(&writer);
     writer.prepare(table);
 
diff --git a/plugins/pcl/kernel/GroundKernel.hpp b/plugins/pcl/kernel/GroundKernel.hpp
index 29fba7f..222b623 100644
--- a/plugins/pcl/kernel/GroundKernel.hpp
+++ b/plugins/pcl/kernel/GroundKernel.hpp
@@ -58,10 +58,7 @@ public:
 
 private:
     GroundKernel();
-    void addSwitches();
-    void validateSwitches();
-
-    std::shared_ptr<Stage> makeReader(Options readerOptions);
+    virtual void addSwitches(ProgramArgs& args);
 
     std::string m_inputFile;
     std::string m_outputFile;
diff --git a/plugins/pcl/kernel/HeightAboveGroundKernel.cpp b/plugins/pcl/kernel/HeightAboveGroundKernel.cpp
index 25e9c8f..499f7e5 100644
--- a/plugins/pcl/kernel/HeightAboveGroundKernel.cpp
+++ b/plugins/pcl/kernel/HeightAboveGroundKernel.cpp
@@ -36,8 +36,6 @@
 
 #include "PCLConversions.hpp"
 
-#include <boost/program_options.hpp>
-
 #include <pcl/ModelCoefficients.h>
 #include <pcl/filters/project_inliers.h>
 #include <pcl/kdtree/kdtree_flann.h>
@@ -46,7 +44,6 @@
 #include <pdal/Filter.hpp>
 #include <pdal/Kernel.hpp>
 #include <pdal/KernelFactory.hpp>
-#include <pdal/KernelSupport.hpp>
 #include <pdal/Options.hpp>
 #include <pdal/pdal_macros.hpp>
 #include <pdal/PointBuffer.hpp>
@@ -59,40 +56,30 @@
 #include <string>
 #include <vector>
 
-namespace po = boost::program_options;
-
 CREATE_KERNEL_PLUGIN(height, pdal::HeightAboveGroundKernel)
 
 namespace pdal
 {
 
-void HeightAboveGroundKernel::validateSwitches()
+void HeightAboveGroundKernel::validateSwitches(ProgramArgs& args)
 {
-    if (m_input_file == "")
-        throw app_usage_error("--input/-i required");
     if (m_ground_file == "" && !m_use_classification)
-        throw app_usage_error("--ground/-g or --use_classification/-c required");
-    if (m_output_file == "")
-        throw app_usage_error("--output/-o required");
+        throw pdal_error("Either option 'ground' or 'use_classification' "
+            "is required.");
 
     // should probably verify that the output is BPF
-    // should probably also verify that there is a classification dimension if --use_classification == true
+    // should probably also verify that there is a classification
+    // dimension if --use_classification == true
 }
 
-void HeightAboveGroundKernel::addSwitches()
+void HeightAboveGroundKernel::addSwitches(ProgramArgs& args)
 {
-    po::options_description* options = new po::options_description("file options");
-    options->add_options()
-    ("input,i", po::value<std::string>(&m_input_file)->default_value(""), "input file name")
-    ("ground,g", po::value<std::string>(&m_ground_file)->default_value(""), "ground file name")
-    ("output,o", po::value<std::string>(&m_output_file)->default_value(""), "output file name")
-    ("use_classification,c", po::bool_switch(&m_use_classification)->default_value(false), "use existing classification labels?")
-    ;
-
-    addSwitchSet(options);
-    addPositionalSwitch("input", 1);
-    addPositionalSwitch("ground", 1);
-    addPositionalSwitch("output", 1);
+    args.add("use_classification,c", "Use existing classification labels?",
+        m_use_classification);
+    args.add("input,i", "Input filename", m_input_file).setPositional();
+    args.add("ground,g", "Ground filename", m_ground_file).setPositional();
+    args.add("output,o",
+        "Output filename", m_output_file).setOptionalPositional();
 }
 
 int HeightAboveGroundKernel::execute()
diff --git a/plugins/pcl/kernel/HeightAboveGroundKernel.hpp b/plugins/pcl/kernel/HeightAboveGroundKernel.hpp
index b56c365..04b308f 100644
--- a/plugins/pcl/kernel/HeightAboveGroundKernel.hpp
+++ b/plugins/pcl/kernel/HeightAboveGroundKernel.hpp
@@ -47,14 +47,11 @@ public:
     SET_KERNEL_NAME("height", "Height above ground")
     SET_KERNEL_LINK("http://pdal.io/kernels/kernels.height.html")
 
-    HeightAboveGroundKernel() : Kernel()
-    {}
-
     int execute();
 
 private:
-    void validateSwitches();
-    void addSwitches();
+    virtual void validateSwitches(ProgramArgs& args);
+    virtual void addSwitches(ProgramArgs& args);
 
     bool m_use_classification;
 
diff --git a/plugins/pcl/kernel/PCLKernel.cpp b/plugins/pcl/kernel/PCLKernel.cpp
index e9c60ff..54a469b 100644
--- a/plugins/pcl/kernel/PCLKernel.cpp
+++ b/plugins/pcl/kernel/PCLKernel.cpp
@@ -36,8 +36,9 @@
 
 #include "PCLBlock.hpp"
 
-#include <pdal/BufferReader.hpp>
+#include <buffer/BufferReader.hpp>
 #include <pdal/KernelFactory.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -55,45 +56,20 @@ PCLKernel::PCLKernel()
     : Kernel()
     , m_bCompress(false)
     , m_bForwardMetadata(false)
-{
-}
-
-void PCLKernel::validateSwitches()
-{
-    if (m_inputFile == "")
-        throw app_usage_error("--input/-i required");
-    if (m_outputFile == "")
-        throw app_usage_error("--output/-o required");
-    if (m_pclFile == "")
-        throw app_usage_error("--pcl/-p required");
-}
+{}
 
 
-void PCLKernel::addSwitches()
+void PCLKernel::addSwitches(ProgramArgs& args)
 {
-    po::options_description* file_options =
-        new po::options_description("file options");
-
-    file_options->add_options()
-    ("input,i", po::value<std::string>(&m_inputFile)->default_value(""),
-     "input file name")
-    ("output,o", po::value<std::string>(&m_outputFile)->default_value(""),
-     "output file name")
-    ("pcl,p", po::value<std::string>(&m_pclFile)->default_value(""),
-     "pcl file name")
-    ("compress,z",
-        po::value<bool>(&m_bCompress)->zero_tokens()->implicit_value(true),
-        "Compress output data (if supported by output format)")
-    ("metadata,m",
-        po::value< bool >(&m_bForwardMetadata)->implicit_value(true),
-        "Forward metadata (VLRs, header entries, etc) from previous stages")
-    ;
-
-    addSwitchSet(file_options);
-
-    addPositionalSwitch("input", 1);
-    addPositionalSwitch("output", 1);
-    addPositionalSwitch("pcl", 1);
+    args.add("input,i", "Input filename", m_inputFile).setPositional();
+    args.add("output,o", "Output filename", m_outputFile).setPositional();
+    args.add("pcl,p", "PCL filename", m_pclFile).setPositional();
+    args.add("compress,z",
+        "Compress output data (if supported by output format)",
+        m_bCompress);
+    args.add("metadata,m",
+        "Forward metadata (VLRs, header entries, etc) from previous stages",
+        m_bForwardMetadata);
 }
 
 
@@ -125,9 +101,9 @@ int PCLKernel::execute()
     pclOptions.add<bool>("debug", isDebug());
     pclOptions.add<uint32_t>("verbose", getVerboseLevel());
 
-    std::shared_ptr<Stage> pclStage(new PCLBlock());
-    pclStage->setInput(*bufferReader);
-    pclStage->setOptions(pclOptions);
+    auto& pclStage = createStage("filters.pclblock");
+    pclStage.setInput(*bufferReader);
+    pclStage.setOptions(pclOptions);
 
     // the PCLBlock stage consumes the BufferReader rather than the
     // readerStage
@@ -141,18 +117,12 @@ int PCLKernel::execute()
     if (m_bForwardMetadata)
         writerOptions.add("forward_metadata", true);
 
-    std::vector<std::string> cmd = getProgressShellCommand();
-    UserCallback *callback =
-        cmd.size() ? (UserCallback *)new ShellScriptCallback(cmd) :
-        (UserCallback *)new HeartbeatCallback();
-
-    Stage& writer(Kernel::makeWriter(m_outputFile, *pclStage));
+    Stage& writer(Kernel::makeWriter(m_outputFile, pclStage));
 
     // Some options are inferred by makeWriter based on filename
     // (compression, driver type, etc).
-    writer.setOptions(writerOptions+writer.getOptions());
+    writer.addOptions(writerOptions);
 
-    writer.setUserCallback(callback);
     applyExtraStageOptionsRecursive(&writer);
     writer.prepare(table);
 
diff --git a/plugins/pcl/kernel/PCLKernel.hpp b/plugins/pcl/kernel/PCLKernel.hpp
index bb13f09..ece8bf8 100644
--- a/plugins/pcl/kernel/PCLKernel.hpp
+++ b/plugins/pcl/kernel/PCLKernel.hpp
@@ -35,6 +35,7 @@
 #pragma once
 
 #include <pdal/Kernel.hpp>
+#include <pdal/PipelineManager.hpp>
 
 namespace pdal
 {
@@ -49,11 +50,9 @@ public:
 
 private:
     PCLKernel();
-    void addSwitches();
-    void validateSwitches();
+    virtual void addSwitches(ProgramArgs& args);
 
     std::unique_ptr<PipelineManager> m_manager;
-    std::shared_ptr<Stage> makeReader(Options readerOptions);
 
     std::string m_inputFile;
     std::string m_outputFile;
diff --git a/plugins/pcl/kernel/SmoothKernel.cpp b/plugins/pcl/kernel/SmoothKernel.cpp
index 5b7b3de..98baf14 100644
--- a/plugins/pcl/kernel/SmoothKernel.cpp
+++ b/plugins/pcl/kernel/SmoothKernel.cpp
@@ -37,8 +37,9 @@
 
 #include "PCLBlock.hpp"
 
-#include <pdal/BufferReader.hpp>
+#include <buffer/BufferReader.hpp>
 #include <pdal/KernelFactory.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -52,36 +53,10 @@ CREATE_SHARED_PLUGIN(1, 0, SmoothKernel, Kernel, s_info)
 
 std::string SmoothKernel::getName() const { return s_info.name; }
 
-void SmoothKernel::validateSwitches()
+void SmoothKernel::addSwitches(ProgramArgs& args)
 {
-    if (m_inputFile == "")
-    {
-        throw app_usage_error("--input/-i required");
-    }
-
-    if (m_outputFile == "")
-    {
-        throw app_usage_error("--output/-o required");
-    }
-
-    return;
-}
-
-
-void SmoothKernel::addSwitches()
-{
-    po::options_description* file_options = new po::options_description("file options");
-
-    file_options->add_options()
-    ("input,i", po::value<std::string>(&m_inputFile)->default_value(""), "input file name")
-    ("output,o", po::value<std::string>(&m_outputFile)->default_value(""), "output file name")
-//        ("compress,z", po::value<bool>(&m_bCompress)->zero_tokens()->implicit_value(true), "Compress output data (if supported by output format)")
-    ;
-
-    addSwitchSet(file_options);
-
-    addPositionalSwitch("input", 1);
-    addPositionalSwitch("output", 1);
+    args.add("input,i", "Input filename", m_inputFile).setPositional();
+    args.add("output,o", "Output filename", m_outputFile).setPositional();
 }
 
 
@@ -123,24 +98,17 @@ int SmoothKernel::execute()
     smoothOptions.add("debug", isDebug());
     smoothOptions.add("verbose", getVerboseLevel());
 
-    std::shared_ptr<Stage> smoothStage(new PCLBlock());
-    smoothStage->setOptions(smoothOptions);
-    smoothStage->setInput(*bufferReader);
+    auto& smoothStage = createStage("filters.pclblock");
+    smoothStage.setOptions(smoothOptions);
+    smoothStage.setInput(*bufferReader);
 
     Options writerOptions;
     writerOptions.add("filename", m_outputFile);
     setCommonOptions(writerOptions);
 
-    Stage& writer(Kernel::makeWriter(m_outputFile, *smoothStage));
+    Stage& writer(Kernel::makeWriter(m_outputFile, smoothStage));
     writer.setOptions(writerOptions);
 
-    std::vector<std::string> cmd = getProgressShellCommand();
-    UserCallback *callback =
-        cmd.size() ? (UserCallback *)new ShellScriptCallback(cmd) :
-        (UserCallback *)new HeartbeatCallback();
-
-    writer.setUserCallback(callback);
-    applyExtraStageOptionsRecursive(&writer);
     writer.prepare(table);
 
     // process the data, grabbing the PointViewSet for visualization of the
diff --git a/plugins/pcl/kernel/SmoothKernel.hpp b/plugins/pcl/kernel/SmoothKernel.hpp
index 7aa7313..efdd916 100644
--- a/plugins/pcl/kernel/SmoothKernel.hpp
+++ b/plugins/pcl/kernel/SmoothKernel.hpp
@@ -52,10 +52,7 @@ public:
 
 private:
     SmoothKernel() {};
-    void addSwitches();
-    void validateSwitches();
-
-    std::shared_ptr<Stage> makeReader(Options readerOptions);
+    virtual void addSwitches(ProgramArgs& args);
 
     std::string m_inputFile;
     std::string m_outputFile;
diff --git a/plugins/pcl/kernel/ViewKernel.cpp b/plugins/pcl/kernel/ViewKernel.cpp
index 2d38a06..3dde3e0 100644
--- a/plugins/pcl/kernel/ViewKernel.cpp
+++ b/plugins/pcl/kernel/ViewKernel.cpp
@@ -35,6 +35,7 @@
 #include "ViewKernel.hpp"
 
 #include <pdal/KernelFactory.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -73,14 +74,10 @@ vector<string> tokenize(const string s, char c)
 
 uint32_t parseInt(const string& s)
 {
-    try
-    {
-        return boost::lexical_cast<uint32_t>(s);
-    }
-    catch (boost::bad_lexical_cast)
-    {
-        throw app_runtime_error(string("Invalid integer: ") + s);
-    }
+    uint32_t val;
+    if (!Utils::fromString(s, val))
+        throw pdal_error(string("Invalid integer: ") + s);
+    return val;
 }
 
 
@@ -96,7 +93,7 @@ void addRange(const string& begin, const string& end,
     uint32_t low = parseInt(begin);
     uint32_t high = parseInt(end);
     if (low > high)
-        throw app_runtime_error(string("Range invalid: ") + begin + "-" + end);
+        throw pdal_error(string("Range invalid: ") + begin + "-" + end);
     while (low <= high)
         points.push_back(low++);
 }
@@ -118,42 +115,21 @@ vector<uint32_t> getListOfPoints(std::string p)
         else if (limits.size() == 2)
             addRange(limits[0], limits[1], output);
         else
-            throw app_runtime_error(string("Invalid point range: ") + s);
+            throw pdal_error(string("Invalid point range: ") + s);
     }
     return output;
 }
 
 } //namespace
 
-ViewKernel::ViewKernel()
-    : Kernel()
-    , m_inputFile("")
-{}
 
-
-void ViewKernel::validateSwitches()
+void ViewKernel::addSwitches(ProgramArgs& args)
 {
-    if (m_inputFile == "")
-    {
-        throw app_usage_error("--input/-i required");
-    }
+    args.add("input,i", "Input filename", m_inputFile).setPositional();
+    args.add("point,p", "Point to dump", m_pointIndexes);
 }
 
 
-void ViewKernel::addSwitches()
-{
-    po::options_description* file_options = new po::options_description("file options");
-
-    file_options->add_options()
-    ("input,i", po::value<std::string>(&m_inputFile)->default_value(""), "input file name")
-    ("point,p", po::value<std::string >(&m_pointIndexes), "point to dump")
-    ;
-
-    addSwitchSet(file_options);
-
-    addPositionalSwitch("input", 1);
-}
-
 int ViewKernel::execute()
 {
     Options readerOptions;
diff --git a/plugins/pcl/kernel/ViewKernel.hpp b/plugins/pcl/kernel/ViewKernel.hpp
index 0334a63..c59e04c 100644
--- a/plugins/pcl/kernel/ViewKernel.hpp
+++ b/plugins/pcl/kernel/ViewKernel.hpp
@@ -51,11 +51,7 @@ public:
     int execute();
 
 private:
-    ViewKernel();
-    void addSwitches();
-    void validateSwitches();
-
-    std::shared_ptr<Stage> makeReader(Options readerOptions);
+    virtual void addSwitches(ProgramArgs& args);
 
     std::string m_inputFile;
     std::string m_pointIndexes;
diff --git a/plugins/pcl/test/PCLBlockFilterTest.cpp b/plugins/pcl/test/PCLBlockFilterTest.cpp
index edb1ac5..57a0990 100644
--- a/plugins/pcl/test/PCLBlockFilterTest.cpp
+++ b/plugins/pcl/test/PCLBlockFilterTest.cpp
@@ -35,7 +35,6 @@
 #include <pdal/pdal_test_main.hpp>
 
 #include <pdal/PipelineManager.hpp>
-#include <pdal/PipelineReader.hpp>
 #include <pdal/PluginManager.hpp>
 #include <pdal/StageFactory.hpp>
 
@@ -45,25 +44,24 @@
 
 using namespace pdal;
 
-TEST(PCLBlockFilterTest, PCLBlockFilterTest_example_passthrough_xml)
+TEST(PCLBlockFilterTest, PCLBlockFilterTest_example_passthrough_json)
 {
     StageFactory f;
-    std::unique_ptr<Stage> filter(f.createStage("filters.pclblock"));
-    EXPECT_TRUE(filter.get());
+    Stage* filter(f.createStage("filters.pclblock"));
+    EXPECT_TRUE(filter);
 
     PipelineManager pipeline;
-    PipelineReader pipelineReader(pipeline);
-    pipelineReader.readPipeline(
-        Support::datapath("filters/pcl/passthrough.xml"));
+
+    pipeline.readPipeline(
+        Support::configuredpath("filters/pcl/passthrough.json"));
     pipeline.execute();
 
     PointViewSet viewSet = pipeline.views();
     EXPECT_EQ(viewSet.size(), 1u);
     PointViewPtr view = *viewSet.begin();
-    EXPECT_EQ(view->size(), 81u);
+    EXPECT_EQ(view->size(), 795u);
 }
 
-
 static void test_filter(const std::string& jsonFile,
                         size_t expectedPointCount,
                         bool useThin=false)
@@ -83,16 +81,16 @@ static void test_filter(const std::string& jsonFile,
     options.add(debug);
     options.add(verbose);
 
-    std::unique_ptr<Stage> reader(f.createStage("readers.las"));
-    EXPECT_TRUE(reader.get());
+    Stage* reader(f.createStage("readers.las"));
+    EXPECT_TRUE(reader);
     reader->setOptions(options);
 
     Option fname("filename", Support::datapath(jsonFile));
     Options filter_options;
     filter_options.add(fname);
 
-    std::shared_ptr<Stage> pcl_block(f.createStage("filters.pclblock"));
-    EXPECT_TRUE(pcl_block.get());
+    Stage* pcl_block(f.createStage("filters.pclblock"));
+    EXPECT_TRUE(pcl_block);
     pcl_block->setOptions(filter_options);
     pcl_block->setInput(*reader);
 
diff --git a/plugins/pgpointcloud/CMakeLists.txt b/plugins/pgpointcloud/CMakeLists.txt
index d42d1fa..d811a9e 100644
--- a/plugins/pgpointcloud/CMakeLists.txt
+++ b/plugins/pgpointcloud/CMakeLists.txt
@@ -3,6 +3,7 @@
 #
 
 include(${PDAL_CMAKE_DIR}/postgres.cmake)
+include_directories(${ROOT_DIR}/vendor/pdalboost)
 
 #
 # PgPointCloud Reader
diff --git a/plugins/pgpointcloud/io/PgCommon.hpp b/plugins/pgpointcloud/io/PgCommon.hpp
index f70592f..94bc78f 100644
--- a/plugins/pgpointcloud/io/PgCommon.hpp
+++ b/plugins/pgpointcloud/io/PgCommon.hpp
@@ -35,8 +35,6 @@
 
 #pragma once
 
-#include <boost/algorithm/string.hpp>
-
 #include "libpq-fe.h"
 
 #include <pdal/Options.hpp>
@@ -47,13 +45,14 @@ namespace pdal
 {
 
 inline pdal::CompressionType::Enum getCompressionType(
-    std::string const& compression_type)
+    std::string compression_type)
 {
-    if (boost::iequals(compression_type, "dimensional"))
+    compression_type = Utils::tolower(compression_type);
+    if (compression_type == "dimensional")
         return CompressionType::Dimensional;
-    else if (boost::iequals(compression_type, "ght"))
+    else if (compression_type == "ght")
         return CompressionType::Ght;
-    else if (boost::iequals(compression_type, "laszperf"))
+    else if (compression_type == "laszperf")
         return CompressionType::Lazperf;
     return CompressionType::None;
 }
diff --git a/plugins/pgpointcloud/io/PgReader.cpp b/plugins/pgpointcloud/io/PgReader.cpp
index b50a245..6a87ebd 100644
--- a/plugins/pgpointcloud/io/PgReader.cpp
+++ b/plugins/pgpointcloud/io/PgReader.cpp
@@ -36,6 +36,7 @@
 #include "PgReader.hpp"
 #include <pdal/PointView.hpp>
 #include <pdal/XMLSchema.hpp>
+#include <pdal/pdal_macros.hpp>
 
 #include <iostream>
 
@@ -45,7 +46,7 @@ namespace pdal
 static PluginInfo const s_info = PluginInfo(
     "readers.pgpointcloud",
     "Read data from pgpointcloud format. \"query\" option needs to be a \n" \
-        "SQL statment selecting the data.",
+        "SQL statement selecting the data.",
     "http://pdal.io/stages/readers.pgpointcloud.html" );
 
 CREATE_SHARED_PLUGIN(1, 0, PgReader, Reader, s_info)
@@ -259,9 +260,6 @@ void PgReader::ready(PointTableRef /*table*/)
     m_cur_nrows = 0;
     m_cur_result = NULL;
 
-    if (getSpatialReference().empty())
-        setSpatialReference(fetchSpatialReference());
-
     CursorSetup();
 }
 
@@ -282,6 +280,8 @@ void PgReader::initialize()
     if (!m_session)
         m_session = pg_connect(m_connection);
 
+    if (getSpatialReference().empty())
+        setSpatialReference(fetchSpatialReference());
 }
 
 
diff --git a/plugins/pgpointcloud/io/PgWriter.cpp b/plugins/pgpointcloud/io/PgWriter.cpp
index 8701d64..3816bb3 100644
--- a/plugins/pgpointcloud/io/PgWriter.cpp
+++ b/plugins/pgpointcloud/io/PgWriter.cpp
@@ -33,15 +33,14 @@
 * OF SUCH DAMAGE.
 ****************************************************************************/
 
-#include <boost/format.hpp>
-
 #include "PgWriter.hpp"
 
 #include <pdal/PointView.hpp>
 #include <pdal/StageFactory.hpp>
 #include <pdal/util/FileUtils.hpp>
-#include <pdal/util/Endian.hpp>
+#include <pdal/util/portable_endian.hpp>
 #include <pdal/XMLSchema.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -169,7 +168,7 @@ void PgWriter::writeInit()
     // to execute. We find out which one here.
     if (m_pre_sql.size())
     {
-        std::string sql = FileUtils::readFileAsString(m_pre_sql);
+        std::string sql = FileUtils::readFileIntoString(m_pre_sql);
         if (!sql.size())
         {
             // if there was no file to read because the data in pre_sql was
@@ -214,7 +213,7 @@ void PgWriter::done(PointTableRef /*table*/)
 
     if (m_post_sql.size())
     {
-        std::string sql = FileUtils::readFileAsString(m_post_sql);
+        std::string sql = FileUtils::readFileIntoString(m_post_sql);
         if (!sql.size())
         {
             // if there was no file to read because the data in post_sql was
@@ -304,7 +303,31 @@ uint32_t PgWriter::SetupSchema(uint32_t srid)
     }
 
     if (schema_count == 0)
-        pcid = 1;
+    {
+        // Try using the sequence
+        // pgpointcloud with the sequence is not yet
+        // released. See https://github.com/PDAL/PDAL/issues/1101 for
+        // SQL to create this sequence on the pointcloud_formats
+        // table.
+        char* have_seq = pg_query_once(m_session,
+                "select count(*) from pg_class where relname = 'pointcloud_formats_pcid_sq'");
+        int seq_count = atoi(have_seq);
+        if (seq_count)
+        {
+            // We have the sequence, use its nextval
+            char *pcid_str = pg_query_once(m_session,
+                    "SELECT nextval('pointcloud_formats_pcid_sq')");
+            if (!pcid_str)
+                throw pdal_error("Unable to select nextval from pointcloud_formats_pcid_seq");
+            pcid = atoi(pcid_str);
+        }
+        else
+        {
+            // We don't have the sequence installed, all we can do is
+            // set to 1 and increment
+            pcid = 1;
+        }
+    }
     else
     {
         char *pcid_str = pg_query_once(m_session,
@@ -331,17 +354,20 @@ uint32_t PgWriter::SetupSchema(uint32_t srid)
 void PgWriter::DeleteTable(std::string const& schema_name,
                          std::string const& table_name)
 {
-    std::ostringstream oss;
+    std::ostringstream stmt;
+    std::ostringstream name;
 
-    oss << "DROP TABLE IF EXISTS ";
+    stmt << "DROP TABLE IF EXISTS ";
 
     if (schema_name.size())
     {
-        oss << schema_name << ".";
+        name << schema_name << ".";
     }
-    oss << table_name;
+    name << table_name;
+    stmt << pg_quote_identifier(name.str());
 
-    pg_execute(m_session, oss.str());
+
+    pg_execute(m_session, stmt.str());
 }
 
 
@@ -481,28 +507,23 @@ void PgWriter::writeTile(const PointViewPtr view)
 
     std::ostringstream options;
 
-    uint32_t num_points = view->size();
-    int32_t pcid = m_pcid;
+    uint32_t num_points = htobe32(view->size());
+    int32_t pcid = htobe32(m_pcid);
     CompressionType::Enum compression_v = CompressionType::None;
-    uint32_t compression = static_cast<uint32_t>(compression_v);
-
-#ifdef BOOST_LITTLE_ENDIAN
-    // needs to be 1 byte
-    options << boost::format("%02x") % 1;
-    SWAP_ENDIANNESS(pcid);
-    SWAP_ENDIANNESS(compression);
-    SWAP_ENDIANNESS(num_points);
-#elif BOOST_BIG_ENDIAN
-    // needs to be 1 byte
-    options << boost::format("%02x") % 0;
+    uint32_t compression = htobe32(static_cast<uint32_t>(compression_v));
+
+#if BYTE_ORDER == LITTLE_ENDIAN
+    options << "01";
+#elif BYTE_ORDER == BIG_ENDIAN
+    options << "00";
 #endif
 
     // needs to be 4 bytes
-    options << boost::format("%08x") % pcid;
+    options << std::hex << std::setfill('0') << std::setw(8) << pcid;
     // needs to be 4 bytes
-    options << boost::format("%08x") % compression;
+    options << std::hex << std::setfill('0') << std::setw(8) << compression;
     // needs to be 4 bytes
-    options << boost::format("%08x") % num_points;
+    options << std::hex << std::setfill('0') << std::setw(8) << num_points;
 
     m_insert.append(options.str());
     m_insert.append(hexrep);
diff --git a/plugins/pgpointcloud/test/PgpointcloudWriterTest.cpp b/plugins/pgpointcloud/test/PgpointcloudWriterTest.cpp
index 0332aa6..e8db031 100644
--- a/plugins/pgpointcloud/test/PgpointcloudWriterTest.cpp
+++ b/plugins/pgpointcloud/test/PgpointcloudWriterTest.cpp
@@ -82,7 +82,7 @@ Options getDbOptions()
     Options options;
 
     options.add(Option("connection", getTestDBTempConn()));
-    options.add(Option("table", "pdal-\"test\"-table")); // intentional quotes
+    options.add(Option("table", "4dal-\"test\"-table")); // intentional quotes
     options.add(Option("column", "p\"a")); // intentional quotes
     options.add(Option("srid", "4326"));
     options.add(Option("capacity", "10000"));
@@ -184,12 +184,12 @@ namespace
 void optionsWrite(const Options& writerOps)
 {
     StageFactory f;
-    std::unique_ptr<Stage> writer(f.createStage("writers.pgpointcloud"));
-    std::unique_ptr<Stage> reader(f.createStage("readers.las"));
+    Stage* writer(f.createStage("writers.pgpointcloud"));
+    Stage* reader(f.createStage("readers.las"));
 
-    EXPECT_TRUE(writer.get());
-    EXPECT_TRUE(reader.get());
-    if (!writer.get() || !reader.get())
+    EXPECT_TRUE(writer);
+    EXPECT_TRUE(reader);
+    if (!writer || !reader)
         return;
 
     const std::string file(Support::datapath("las/1.2-with-color.las"));
@@ -251,8 +251,8 @@ TEST_F(PgpointcloudWriterTest, writeXYZ)
     optionsWrite(ops);
 
     PointTable table;
-    std::unique_ptr<Stage> reader(
-        StageFactory().createStage("readers.pgpointcloud"));
+    StageFactory factory;
+    Stage* reader(factory.createStage("readers.pgpointcloud"));
     reader->setOptions(getDbOptions());
 
     reader->prepare(table);
@@ -271,8 +271,8 @@ TEST_F(PgpointcloudWriterTest, writetNoPointcloudExtension)
     }
 
     StageFactory f;
-    std::unique_ptr<Stage> writer(f.createStage("writers.pgpointcloud"));
-    EXPECT_TRUE(writer.get());
+    Stage* writer(f.createStage("writers.pgpointcloud"));
+    EXPECT_TRUE(writer);
 
     executeOnTestDb("DROP EXTENSION pointcloud");
 
@@ -280,8 +280,8 @@ TEST_F(PgpointcloudWriterTest, writetNoPointcloudExtension)
 
     const Option opt_filename("filename", file);
 
-    std::unique_ptr<Stage> reader(f.createStage("readers.las"));
-    EXPECT_TRUE(reader.get());
+    Stage* reader(f.createStage("readers.las"));
+    EXPECT_TRUE(reader);
     Options options;
     options.add(opt_filename);
     reader->setOptions(options);
diff --git a/plugins/python/CMakeLists.txt b/plugins/python/CMakeLists.txt
index f86fb42..559335f 100644
--- a/plugins/python/CMakeLists.txt
+++ b/plugins/python/CMakeLists.txt
@@ -2,9 +2,14 @@
 # Python plugin CMake configuration
 #
 
+include(${PDAL_CMAKE_DIR}/python.cmake)
+include_directories(${ROOT_DIR}/vendor/pdalboost)
+
 add_subdirectory(filters)
 if (WITH_TESTS)
-    include_directories(SYSTEM ${PYTHON_INCLUDE_DIR})
     PDAL_ADD_TEST(plangtest FILES ./test/PLangTest.cpp
         LINK_WITH ${PDAL_PLANG_LIB_NAME})
+    if (WITH_APPS)
+      PDAL_ADD_TEST(python_pipeline_test FILES ./test/PythonPipelineTest.cpp LINK_WITH ${PDAL_PLANG_LIB_NAME})
+    endif()
 endif()
diff --git a/plugins/python/filters/PredicateFilter.cpp b/plugins/python/filters/PredicateFilter.cpp
index 2fe99d1..958de0d 100644
--- a/plugins/python/filters/PredicateFilter.cpp
+++ b/plugins/python/filters/PredicateFilter.cpp
@@ -37,6 +37,7 @@
 #include "PredicateFilter.hpp"
 #include <pdal/PointView.hpp>
 #include <pdal/StageFactory.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/plugins/python/filters/ProgrammableFilter.cpp b/plugins/python/filters/ProgrammableFilter.cpp
index c198c6c..280441a 100644
--- a/plugins/python/filters/ProgrammableFilter.cpp
+++ b/plugins/python/filters/ProgrammableFilter.cpp
@@ -37,6 +37,7 @@
 #include "ProgrammableFilter.hpp"
 #include <pdal/PointView.hpp>
 #include <pdal/StageFactory.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/plugins/python/test/PLangTest.cpp b/plugins/python/test/PLangTest.cpp
index 9c32b6f..e4de77e 100644
--- a/plugins/python/test/PLangTest.cpp
+++ b/plugins/python/test/PLangTest.cpp
@@ -341,7 +341,6 @@ TEST(PLangTest, PLangTest_reentry)
 
 TEST(PLangTest, log)
 {
-    StageFactory f;
     // verify we can redirect the stdout inside the python script
 
     Options reader_opts;
@@ -363,11 +362,13 @@ TEST(PLangTest, log)
     {
         const Option source("source",
             "import numpy as np\n"
+            "import sys\n"
             "def xfunc(ins,outs):\n"
             "  X = ins['X']\n"
             "  print (\"Testing log output through python script.\")\n"
             "  X = X + 1.0\n"
             "  outs['X'] = X\n"
+            "  sys.stdout.flush()\n"
             "  return True\n"
             );
         const Option module("module", "xModule");
@@ -378,12 +379,13 @@ TEST(PLangTest, log)
         xfilter_opts.add(function);
     }
 
+    StageFactory f;
     {
         FauxReader reader;
 
         reader.setOptions(reader_opts);
 
-        std::unique_ptr<Stage> xfilter(f.createStage("filters.programmable"));
+        Stage* xfilter(f.createStage("filters.programmable"));
         xfilter->setOptions(xfilter_opts);
         xfilter->setInput(reader);
 
@@ -399,8 +401,12 @@ TEST(PLangTest, log)
         Support::temppath("mylog_three.txt"),
         Support::datapath("logs/log_py.txt"));
 
-    if (ok)
-        FileUtils::deleteFile(Support::temppath("mylog_three.txt"));
+    // TODO: fails on Windows
+    // unknown file: error: C++ exception with description "pdalboost::filesystem::remove:
+    // The process cannot access the file because it is being used by another process:
+    // "C:/projects/pdal/test/data/../temp/mylog_three.txt"" thrown in the test body.
+    //if (ok)
+    //    FileUtils::deleteFile(Support::temppath("mylog_three.txt"));
 
     EXPECT_TRUE(ok);
 }
diff --git a/plugins/python/test/PredicateFilterTest.cpp b/plugins/python/test/PredicateFilterTest.cpp
index da4c6f6..bdaf699 100644
--- a/plugins/python/test/PredicateFilterTest.cpp
+++ b/plugins/python/test/PredicateFilterTest.cpp
@@ -35,7 +35,6 @@
 #include <pdal/pdal_test_main.hpp>
 
 #include <pdal/PipelineManager.hpp>
-#include <pdal/PipelineReader.hpp>
 #include <pdal/StageFactory.hpp>
 #include <pdal/StageWrapper.hpp>
 #include <stats/StatsFilter.hpp>
@@ -63,7 +62,6 @@ TEST_F(PredicateFilterTest, PredicateFilterTest_test1)
 {
     StageFactory f;
 
-
     BOX3D bounds(0.0, 0.0, 0.0, 2.0, 2.0, 2.0);
     Options readerOps;
     readerOps.add("bounds", bounds);
@@ -92,7 +90,7 @@ TEST_F(PredicateFilterTest, PredicateFilterTest_test1)
     opts.add(module);
     opts.add(function);
 
-    std::unique_ptr<Stage> filter(f.createStage("filters.predicate"));
+    Stage* filter(f.createStage("filters.predicate"));
     filter->setOptions(opts);
     filter->setInput(reader);
 
@@ -111,12 +109,12 @@ TEST_F(PredicateFilterTest, PredicateFilterTest_test1)
     const stats::Summary& statsY = stats->getStats(Dimension::Id::Y);
     const stats::Summary& statsZ = stats->getStats(Dimension::Id::Z);
 
-    EXPECT_TRUE(Utils::compare_approx<double>(statsX.minimum(), 0.0, 0.01));
-    EXPECT_TRUE(Utils::compare_approx<double>(statsY.minimum(), 0.0, 0.01));
-    EXPECT_TRUE(Utils::compare_approx<double>(statsZ.minimum(), 0.0, 0.01));
-    EXPECT_TRUE(Utils::compare_approx<double>(statsX.maximum(), 1.0, 0.01));
-    EXPECT_TRUE(Utils::compare_approx<double>(statsY.maximum(), 1.0, 0.01));
-    EXPECT_TRUE(Utils::compare_approx<double>(statsZ.maximum(), 1.0, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsX.minimum(), 0.0, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsY.minimum(), 0.0, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsZ.minimum(), 0.0, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsX.maximum(), 1.0, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsY.maximum(), 1.0, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsZ.maximum(), 1.0, 0.01));
 }
 
 TEST_F(PredicateFilterTest, PredicateFilterTest_test2)
@@ -150,7 +148,7 @@ TEST_F(PredicateFilterTest, PredicateFilterTest_test2)
     opts.add(module);
     opts.add(function);
 
-    std::unique_ptr<Stage> filter(f.createStage("filters.predicate"));
+    Stage* filter(f.createStage("filters.predicate"));
     filter->setOptions(opts);
     filter->setInput(reader);
 
@@ -169,12 +167,12 @@ TEST_F(PredicateFilterTest, PredicateFilterTest_test2)
     const stats::Summary& statsY = stats->getStats(Dimension::Id::Y);
     const stats::Summary& statsZ = stats->getStats(Dimension::Id::Z);
 
-    EXPECT_TRUE(Utils::compare_approx<double>(statsX.minimum(), 1.0, 0.01));
-    EXPECT_TRUE(Utils::compare_approx<double>(statsY.minimum(), 1.0, 0.01));
-    EXPECT_TRUE(Utils::compare_approx<double>(statsZ.minimum(), 1.0, 0.01));
-    EXPECT_TRUE(Utils::compare_approx<double>(statsX.maximum(), 2.0, 0.01));
-    EXPECT_TRUE(Utils::compare_approx<double>(statsY.maximum(), 2.0, 0.01));
-    EXPECT_TRUE(Utils::compare_approx<double>(statsZ.maximum(), 2.0, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsX.minimum(), 1.0, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsY.minimum(), 1.0, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsZ.minimum(), 1.0, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsX.maximum(), 2.0, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsY.maximum(), 2.0, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsZ.maximum(), 2.0, 0.01));
 }
 
 TEST_F(PredicateFilterTest, PredicateFilterTest_test3)
@@ -210,7 +208,7 @@ TEST_F(PredicateFilterTest, PredicateFilterTest_test3)
     opts1.add(module1);
     opts1.add(function1);
 
-    std::unique_ptr<Stage> filter1(f.createStage("filters.predicate"));
+    Stage* filter1(f.createStage("filters.predicate"));
     filter1->setOptions(opts1);
     filter1->setInput(reader);
 
@@ -233,7 +231,7 @@ TEST_F(PredicateFilterTest, PredicateFilterTest_test3)
     opts2.add(module2);
     opts2.add(function2);
 
-    std::unique_ptr<Stage> filter2(f.createStage("filters.predicate"));
+    Stage* filter2(f.createStage("filters.predicate"));
     filter2->setOptions(opts2);
     filter2->setInput(*filter1);
 
@@ -250,12 +248,12 @@ TEST_F(PredicateFilterTest, PredicateFilterTest_test3)
     const stats::Summary& statsY = stats->getStats(Dimension::Id::Y);
     const stats::Summary& statsZ = stats->getStats(Dimension::Id::Z);
 
-    EXPECT_TRUE(Utils::compare_approx<double>(statsX.minimum(), 0.5, 0.01));
-    EXPECT_TRUE(Utils::compare_approx<double>(statsY.minimum(), 0.5, 0.01));
-    EXPECT_TRUE(Utils::compare_approx<double>(statsZ.minimum(), 0.5, 0.01));
-    EXPECT_TRUE(Utils::compare_approx<double>(statsX.maximum(), 1.0, 0.01));
-    EXPECT_TRUE(Utils::compare_approx<double>(statsY.maximum(), 1.0, 0.01));
-    EXPECT_TRUE(Utils::compare_approx<double>(statsZ.maximum(), 1.0, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsX.minimum(), 0.5, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsY.minimum(), 0.5, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsZ.minimum(), 0.5, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsX.maximum(), 1.0, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsY.maximum(), 1.0, 0.01));
+    EXPECT_TRUE(Utils::compare_approx(statsZ.maximum(), 1.0, 0.01));
 }
 
 TEST_F(PredicateFilterTest, PredicateFilterTest_test4)
@@ -289,7 +287,7 @@ TEST_F(PredicateFilterTest, PredicateFilterTest_test4)
     opts.add(module);
     opts.add(function);
 
-    std::unique_ptr<Stage> filter(f.createStage("filters.predicate"));
+    Stage* filter(f.createStage("filters.predicate"));
     filter->setOptions(opts);
     filter->setInput(reader);
 
@@ -344,7 +342,7 @@ TEST_F(PredicateFilterTest, PredicateFilterTest_test5)
     opts.add(module);
     opts.add(function);
 
-    std::unique_ptr<Stage> filter(f.createStage("filters.predicate"));
+    Stage* filter(f.createStage("filters.predicate"));
     filter->setOptions(opts);
     filter->setInput(reader);
 
@@ -354,22 +352,38 @@ TEST_F(PredicateFilterTest, PredicateFilterTest_test5)
     ASSERT_THROW(filter->execute(table), pdal::pdal_error);
 }
 
-TEST_F(PredicateFilterTest, PredicateFilterTest_Pipeline)
+TEST_F(PredicateFilterTest, PredicateFilterTest_PipelineXML)
+{
+    PipelineManager mgr;
+
+    mgr.readPipeline(Support::configuredpath("plang/from-module.xml"));
+    point_count_t cnt = mgr.execute();
+    EXPECT_EQ(cnt, 1u);
+}
+
+TEST_F(PredicateFilterTest, PredicateFilterTest_PipelineJSON)
+{
+    PipelineManager mgr;
+
+    mgr.readPipeline(Support::configuredpath("plang/from-module.json"));
+    point_count_t cnt = mgr.execute();
+    EXPECT_EQ(cnt, 1u);
+}
+
+TEST_F(PredicateFilterTest, PredicateFilterTest_EmbedXML)
 {
     PipelineManager mgr;
-    PipelineReader reader(mgr);
 
-    reader.readPipeline(Support::configuredpath("plang/from-module.xml"));
+    mgr.readPipeline(Support::configuredpath("plang/predicate-embed.xml"));
     point_count_t cnt = mgr.execute();
     EXPECT_EQ(cnt, 1u);
 }
 
-TEST_F(PredicateFilterTest, PredicateFilterTest_Embed)
+TEST_F(PredicateFilterTest, PredicateFilterTest_EmbedJSON)
 {
     PipelineManager mgr;
-    PipelineReader reader(mgr);
 
-    reader.readPipeline(Support::configuredpath("plang/predicate-embed.xml"));
+    mgr.readPipeline(Support::configuredpath("plang/predicate-embed.json"));
     point_count_t cnt = mgr.execute();
     EXPECT_EQ(cnt, 1u);
 }
diff --git a/plugins/python/test/ProgrammableFilterTest.cpp b/plugins/python/test/ProgrammableFilterTest.cpp
index 35dc35f..e6f4d4b 100644
--- a/plugins/python/test/ProgrammableFilterTest.cpp
+++ b/plugins/python/test/ProgrammableFilterTest.cpp
@@ -34,7 +34,6 @@
 
 #include <pdal/pdal_test_main.hpp>
 
-#include <pdal/PipelineReader.hpp>
 #include <pdal/PipelineManager.hpp>
 #include <pdal/StageFactory.hpp>
 #include <stats/StatsFilter.hpp>
@@ -90,7 +89,7 @@ TEST_F(ProgrammableFilterTest, ProgrammableFilterTest_test1)
     opts.add(module);
     opts.add(function);
 
-    std::unique_ptr<Stage> filter(f.createStage("filters.programmable"));
+    Stage* filter(f.createStage("filters.programmable"));
     filter->setOptions(opts);
     filter->setInput(reader);
 
@@ -118,12 +117,11 @@ TEST_F(ProgrammableFilterTest, ProgrammableFilterTest_test1)
     EXPECT_DOUBLE_EQ(statsZ.maximum(), 3.14);
 }
 
-TEST_F(ProgrammableFilterTest, pipeline)
+TEST_F(ProgrammableFilterTest, pipelineXML)
 {
     PipelineManager manager;
-    PipelineReader reader(manager);
 
-    reader.readPipeline(
+    manager.readPipeline(
         Support::configuredpath("plang/programmable-update-y-dims.xml"));
     manager.execute();
     PointViewSet viewSet = manager.views();
@@ -137,6 +135,23 @@ TEST_F(ProgrammableFilterTest, pipeline)
     }
 }
 
+TEST_F(ProgrammableFilterTest, pipelineJSON)
+{
+    PipelineManager manager;
+
+    manager.readPipeline(
+        Support::configuredpath("plang/programmable-update-y-dims.json"));
+    manager.execute();
+    PointViewSet viewSet = manager.views();
+    EXPECT_EQ(viewSet.size(), 1u);
+    PointViewPtr view = *viewSet.begin();
+
+    for (PointId idx = 0; idx < 10; ++idx)
+    {
+        int32_t y = view->getFieldAs<int32_t>(Dimension::Id::Y, idx);
+        EXPECT_EQ(y, 314);
+    }
+}
 
 TEST_F(ProgrammableFilterTest, add_dimension)
 {
@@ -169,7 +184,7 @@ TEST_F(ProgrammableFilterTest, add_dimension)
     opts.add(intensity);
     opts.add(scanDirection);
 
-    std::unique_ptr<Stage> filter(f.createStage("filters.programmable"));
+    Stage* filter(f.createStage("filters.programmable"));
     filter->setOptions(opts);
     filter->setInput(reader);
 
@@ -219,7 +234,7 @@ TEST_F(ProgrammableFilterTest, metadata)
     opts.add(module);
     opts.add(function);
 
-    std::unique_ptr<Stage> filter(f.createStage("filters.programmable"));
+    Stage* filter(f.createStage("filters.programmable"));
     filter->setOptions(opts);
     filter->setInput(reader);
 
diff --git a/plugins/python/test/PythonPipelineTest.cpp b/plugins/python/test/PythonPipelineTest.cpp
new file mode 100644
index 0000000..954ccf3
--- /dev/null
+++ b/plugins/python/test/PythonPipelineTest.cpp
@@ -0,0 +1,102 @@
+/******************************************************************************
+* Copyright (c) 2011, Michael P. Gerlek (mpg at flaxen.com)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/pdal_test_main.hpp>
+
+#include <pdal/StageFactory.hpp>
+#include <pdal/util/FileUtils.hpp>
+#include <pdal/util/Utils.hpp>
+#include "Support.hpp"
+
+#include <pdal/plang/Environment.hpp>
+
+#include <iostream>
+#include <sstream>
+#include <string>
+
+// most pipelines (those with a writer) will be invoked via `pdal pipeline`
+static void run_pipeline(std::string const& pipeline)
+{
+    const std::string cmd = Support::binpath(Support::exename("pdal") + " pipeline");
+
+    std::string output;
+    std::string file(Support::configuredpath(pipeline));
+    int stat = pdal::Utils::run_shell_command(cmd + " " + file, output);
+    EXPECT_EQ(0, stat);
+    if (stat)
+        std::cerr << output << std::endl;
+}
+
+class jsonWithProgrammable : public testing::TestWithParam<const char*> {};
+
+TEST_P(jsonWithProgrammable, pipeline)
+{
+    pdal::plang::Environment::get();
+    pdal::StageFactory f;
+    pdal::Stage* s = f.createStage("filters.programmable");
+    if (s)
+        run_pipeline(GetParam());
+    else
+        std::cerr << "WARNING: could not create filters.programmable, skipping test" << std::endl;
+}
+
+INSTANTIATE_TEST_CASE_P(plugins, jsonWithProgrammable,
+                        testing::Values(
+                            // "pipeline/programmable-hag.json",
+                            "pipeline/programmable-update-y-dims.json"
+                        ));
+
+class jsonWithPredicate : public testing::TestWithParam<const char*> {};
+
+TEST_P(jsonWithPredicate, pipeline)
+{
+    pdal::plang::Environment::get();
+    pdal::StageFactory f;
+    pdal::Stage* s = f.createStage("filters.predicate");
+    if (s)
+        run_pipeline(GetParam());
+    else
+        std::cerr << "WARNING: could not create filters.predicate, skipping test" << std::endl;
+}
+
+INSTANTIATE_TEST_CASE_P(plugins, jsonWithPredicate,
+                        testing::Values(
+                            "pipeline/crop_wkt_2d_classification.json",
+                            "pipeline/from-module.json",
+                            "pipeline/predicate-embed.json",
+                            "pipeline/predicate-keep-ground-and-unclass.json",
+                            "pipeline/predicate-keep-last-return.json",
+                            "pipeline/predicate-keep-specified-returns.json",
+                            "pipeline/reproject.json"
+                        ));
diff --git a/plugins/rxp/CMakeLists.txt b/plugins/rxp/CMakeLists.txt
index 8c2d340..3c7b2ca 100644
--- a/plugins/rxp/CMakeLists.txt
+++ b/plugins/rxp/CMakeLists.txt
@@ -30,6 +30,7 @@ if (BUILD_RIVLIB_TESTS)
     )
 
     include_directories("${CMAKE_CURRENT_BINARY_DIR}/test")
+    include_directories(${PROJECT_SOURCE_DIR}/vendor/pdalboost)
     include_directories(${PROJECT_SOURCE_DIR}/plugins/rxp/io)
 
     PDAL_ADD_TEST(${RXP_TEST_NAME}
diff --git a/plugins/rxp/io/RxpReader.cpp b/plugins/rxp/io/RxpReader.cpp
index 51a38b2..986bd99 100644
--- a/plugins/rxp/io/RxpReader.cpp
+++ b/plugins/rxp/io/RxpReader.cpp
@@ -41,6 +41,7 @@
 #include "RxpReader.hpp"
 
 #include <pdal/StageFactory.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
diff --git a/plugins/rxp/test/RxpReaderTest.cpp b/plugins/rxp/test/RxpReaderTest.cpp
index 458e0e3..52c358e 100644
--- a/plugins/rxp/test/RxpReaderTest.cpp
+++ b/plugins/rxp/test/RxpReaderTest.cpp
@@ -35,9 +35,9 @@
 #include <pdal/pdal_test_main.hpp>
 
 #include <pdal/Options.hpp>
-#include <pdal/PipelineReader.hpp>
 #include <pdal/PipelineManager.hpp>
 #include <pdal/PointView.hpp>
+#include "PipelineReader.hpp"
 
 #include "RxpReader.hpp"
 #include "Config.hpp"
diff --git a/plugins/sqlite/CMakeLists.txt b/plugins/sqlite/CMakeLists.txt
index 19d1935..26aa25c 100644
--- a/plugins/sqlite/CMakeLists.txt
+++ b/plugins/sqlite/CMakeLists.txt
@@ -3,7 +3,9 @@
 #
 
 include (${PDAL_CMAKE_DIR}/sqlite.cmake)
-#
+include (${PDAL_CMAKE_DIR}/spatialite.cmake)
+include_directories(${ROOT_DIR}/vendor/pdalboost)
+
 # SQLite Reader
 #
 set(srcs io/SQLiteReader.cpp)
diff --git a/plugins/sqlite/io/SQLiteCommon.hpp b/plugins/sqlite/io/SQLiteCommon.hpp
index 20b17dc..ed18122 100644
--- a/plugins/sqlite/io/SQLiteCommon.hpp
+++ b/plugins/sqlite/io/SQLiteCommon.hpp
@@ -53,8 +53,9 @@ public:
     column() : null(true), blobBuf(0), blobLen(0){};
     template<typename T> column( T v) : null(false), blobBuf(0), blobLen(0)
     {
-        data = boost::lexical_cast<std::string>(v);
+        data = Utils::toString(v);
     }
+
     column(std::string v) : null(false), blobBuf(0), blobLen(0)
     {
         data = v;
@@ -456,10 +457,14 @@ public:
         lib_extension = "mod_";
 #endif
 
-#ifdef __linux__
+#if defined(__linux__) || defined(__FreeBSD_kernel__)
         so_extension = "so";
+#ifdef MOD_SPATIALITE
+        lib_extension = "mod_";
+#else
         lib_extension = "lib";
 #endif
+#endif
 
 #ifdef _WIN32
         so_extension = "dll";
diff --git a/plugins/sqlite/io/SQLiteReader.cpp b/plugins/sqlite/io/SQLiteReader.cpp
index 48b7029..77d3dcf 100644
--- a/plugins/sqlite/io/SQLiteReader.cpp
+++ b/plugins/sqlite/io/SQLiteReader.cpp
@@ -34,6 +34,7 @@
 
 #include "SQLiteReader.hpp"
 #include <pdal/PointView.hpp>
+#include <pdal/pdal_macros.hpp>
 
 namespace pdal
 {
@@ -56,7 +57,7 @@ void SQLiteReader::initialize()
         m_session = std::unique_ptr<SQLite>(new SQLite(m_connection, log()));
         m_session->connect(false); // don't connect in write mode
         log()->get(LogLevel::Debug) << "Connected to database" << std::endl;
-        
+
         bool bHaveSpatialite = m_session->haveSpatialite();
         log()->get(LogLevel::Debug) << "Have spatialite?: " <<
             bHaveSpatialite << std::endl;
@@ -71,20 +72,14 @@ void SQLiteReader::initialize()
     catch (pdal_error const& e)
     {
         std::stringstream oss;
-        oss << "Unable to connect to database with error '" << e.what() << "'";
+        oss << getName() << ": Unable to connect to database with error '" <<
+            e.what() << "'";
         throw pdal_error(oss.str());
     }
-    try
-    {
-        setSpatialReference(
-            m_options.getValueOrThrow<pdal::SpatialReference>(
-                "spatialreference"));
-    }
-    catch (Option::not_found)
-    {
-        // If one wasn't set on the options, we'll ignore at this
-        setSpatialReference(fetchSpatialReference(m_query));
-    }
+
+    if (m_spatialRef.empty())
+        m_spatialRef = fetchSpatialReference(m_query);
+    setSpatialReference(m_spatialRef);
 
     m_patch = PatchPtr(new Patch());
 }
@@ -144,10 +139,8 @@ void SQLiteReader::processOptions(const Options& options)
     m_schemaFile = options.getValueOrDefault<std::string>(
         "xml_schema_dump", std::string());
 
-    if (options.hasOption("spatialreference"))
-        m_spatialRef = boost::optional<SpatialReference>(
-            options.getValueOrThrow<pdal::SpatialReference>(
-                "spatialreference"));
+    m_spatialRef =
+        options.getValueOrDefault<pdal::SpatialReference>( "spatialreference");
     m_query = options.getValueOrThrow<std::string>("query");
     m_connection = options.getValueOrDefault<std::string>("connection", "");
     m_modulename = options.getValueOrDefault<std::string>("module", "");
@@ -231,11 +224,12 @@ point_count_t SQLiteReader::readPatch(PointViewPtr view, point_count_t numPts)
     int32_t position = columns.find("POINTS")->second;
 
     MetadataNode comp = m_patch->m_metadata.findChild("compression");
-    m_patch->m_isCompressed = boost::iequals(comp.value(), "lazperf");
+    m_patch->m_isCompressed = Utils::iequals(comp.value(), "lazperf");
     m_patch->m_compVersion = m_patch->m_metadata.findChild("version").value();
 
     position = columns.find("NUM_POINTS")->second;
-    int32_t count = boost::lexical_cast<int32_t>((*r)[position].data);
+    int32_t count;
+    Utils::fromString((*r)[position].data, count);
     m_patch->remaining = count;
     m_patch->count = count;
 
diff --git a/plugins/sqlite/io/SQLiteReader.hpp b/plugins/sqlite/io/SQLiteReader.hpp
index 706a682..a5ba9c9 100644
--- a/plugins/sqlite/io/SQLiteReader.hpp
+++ b/plugins/sqlite/io/SQLiteReader.hpp
@@ -66,7 +66,7 @@ private:
     std::string m_schemaFile;
     std::string m_connection;
     std::string m_modulename;
-    boost::optional<SpatialReference> m_spatialRef;
+    SpatialReference m_spatialRef;
     PatchPtr m_patch;
 
     bool m_at_end;
diff --git a/plugins/sqlite/io/SQLiteWriter.cpp b/plugins/sqlite/io/SQLiteWriter.cpp
index 7e4d4d9..23103c4 100644
--- a/plugins/sqlite/io/SQLiteWriter.cpp
+++ b/plugins/sqlite/io/SQLiteWriter.cpp
@@ -37,9 +37,9 @@
 #include <pdal/StageFactory.hpp>
 #include <pdal/pdal_internal.hpp>
 #include <pdal/util/FileUtils.hpp>
+#include <pdal/pdal_macros.hpp>
 
-#include <boost/format.hpp>
-
+#include <iomanip>
 #include <sstream>
 
 #include <gdal.h>
@@ -107,7 +107,7 @@ void SQLiteWriter::initialize()
         m_session = std::unique_ptr<SQLite>(new SQLite(m_connection, log()));
         m_session->connect(true);
         log()->get(LogLevel::Debug) << "Connected to database" << std::endl;
-        
+
         bool bHaveSpatialite = m_session->haveSpatialite();
         log()->get(LogLevel::Debug) << "Have spatialite?: " <<
             bHaveSpatialite << std::endl;
@@ -141,22 +141,16 @@ void SQLiteWriter::writeInit()
     if (m_sdo_pc_is_initialized)
         return;
 
-    // m_block_insert_query << "INSERT INTO " <<
-    //     boost::to_lower_copy(m_block_table) << " ("<<
-    //     boost::to_lower_copy(m_cloud_column) <<
-    //     ", block_id, num_points, points, extent, bbox) VALUES (" <<
-    //     " ?, ?, ?, decode(?, 'hex'), "
-    //     "ST_Force_2D(ST_GeometryFromText(?,?)), ?)";
     m_block_insert_query << "INSERT INTO " <<
-        boost::to_lower_copy(m_block_table) << " ("<<
-        boost::to_lower_copy(m_cloud_column) <<
+        Utils::tolower(m_block_table) << " ("<<
+        Utils::tolower(m_cloud_column) <<
         ", block_id, num_points, points, extent, bbox) VALUES (" <<
         " ?, ?, ?, ?, "
         "ST_GeometryFromText(?,?), ?)";
 
     // m_block_insert_query << "INSERT INTO " <<
-    //     boost::to_lower_copy(m_block_table) << " ("<<
-    //     boost::to_lower_copy(m_cloud_column) <<
+    //     Utils::tolower(m_block_table) << " ("<<
+    //     Utils::tolower(m_cloud_column) <<
     //     ", block_id, num_points, points, extent, bbox) VALUES (" <<
     //     " :obj_id, :block_id, :num_points, decode(:hex, 'hex'), "
     //     "ST_Force_2D(ST_GeometryFromText(:extent,:srid)), :bbox)";
@@ -191,7 +185,7 @@ void SQLiteWriter::writeInit()
         m_options.getValueOrDefault<std::string>("pre_sql", "");
     if (pre_sql.size())
     {
-        std::string sql = FileUtils::readFileAsString(pre_sql);
+        std::string sql = FileUtils::readFileIntoString(pre_sql);
         if (!sql.size())
         {
             // if there was no file to read because the data in pre_sql was
@@ -222,26 +216,25 @@ void SQLiteWriter::CreateBlockTable()
 {
     std::ostringstream oss;
 
-    oss << "CREATE TABLE " << boost::to_lower_copy(m_block_table)
-        << "(" << boost::to_lower_copy(m_cloud_column)  <<
-        " INTEGER REFERENCES " << boost::to_lower_copy(m_cloud_column)  <<
+    oss << "CREATE TABLE " << Utils::tolower(m_block_table)
+        << "(" << Utils::tolower(m_cloud_column)  <<
+        " INTEGER REFERENCES " << Utils::tolower(m_cloud_column)  <<
         "," << " block_id INTEGER," << " num_points INTEGER," <<
         " points BLOB," << " bbox box3d " << ")";
 
     m_session->execute(oss.str());
     log()->get(LogLevel::Debug) << "Created block table '"
-                         << boost::to_lower_copy(m_block_table)
-                         << "'" <<std::endl;
+        << Utils::tolower(m_block_table) << "'" <<std::endl;
 
     {
         std::ostringstream oss;
         oss << "SELECT AddGeometryColumn('" <<
-            boost::to_lower_copy(m_block_table) << "'," << "'extent'" << ","
+            Utils::tolower(m_block_table) << "'," << "'extent'" << ","
             << m_srid << ", 'POLYGON', 'XY')";
         m_session->execute(oss.str());
         log()->get(LogLevel::Debug) <<
             "Added geometry column for block table '" <<
-            boost::to_lower_copy(m_block_table) <<"'"<< std::endl;
+            Utils::tolower(m_block_table) <<"'"<< std::endl;
     }
 }
 
@@ -253,23 +246,22 @@ void SQLiteWriter::DeleteBlockTable()
     oss << "DELETE FROM " << m_block_table;
     m_session->execute(oss.str());
     oss.str("");
-    log()->get(LogLevel::Debug) << "Deleted rows from block table '"
-                         << boost::to_lower_copy(m_block_table)
-                         << "'" <<std::endl;
+    log()->get(LogLevel::Debug) << "Deleted rows from block table '" <<
+        Utils::tolower(m_block_table) << "'" <<std::endl;
 
     // Drop the table's dependencies
     // We need to clean up the geometry column before dropping the table
     oss << "SELECT DiscardGeometryColumn('" <<
-        boost::to_lower_copy(m_block_table) << "', 'extent')";
+        Utils::tolower(m_block_table) << "', 'extent')";
     m_session->execute(oss.str());
     log()->get(LogLevel::Debug) << "Dropped geometry column for block table"
                          << std::endl;
     oss.str("");
 
-    oss << "DROP TABLE " << boost::to_lower_copy(m_block_table);
+    oss << "DROP TABLE " << Utils::tolower(m_block_table);
     m_session->execute(oss.str());
     log()->get(LogLevel::Debug) << "Dropped block table '" <<
-        boost::to_lower_copy(m_block_table) << "'" <<std::endl;
+        Utils::tolower(m_block_table) << "'" <<std::endl;
 }
 
 
@@ -277,24 +269,23 @@ void SQLiteWriter::CreateCloudTable()
 {
     std::ostringstream oss;
 
-    oss << "CREATE TABLE " << boost::to_lower_copy(m_cloud_table) << " (" <<
-        boost::to_lower_copy(m_cloud_column) <<
+    oss << "CREATE TABLE " << Utils::tolower(m_cloud_table) << " (" <<
+        Utils::tolower(m_cloud_column) <<
         " INTEGER PRIMARY KEY AUTOINCREMENT," << " schema TEXT," <<
         " block_table varchar(64)" << ")";
     m_session->execute(oss.str());
     log()->get(LogLevel::Debug) << "Created cloud table '"
-                         << boost::to_lower_copy(m_cloud_table)
-                         << "'" <<std::endl;
+        << Utils::tolower(m_cloud_table) << "'" << std::endl;
 
     uint32_t nDim = 2;
 
     oss.str("");
     oss << "SELECT AddGeometryColumn('"
-        << boost::to_lower_copy(m_cloud_table)
+        << Utils::tolower(m_cloud_table)
         << "'," << "'extent'" << "," << m_srid << ", 'POLYGON', 'XY')";
     m_session->execute(oss.str());
     log()->get(LogLevel::Debug) << "Added geometry column to cloud table '" <<
-        boost::to_lower_copy(m_cloud_table) << "'" <<std::endl;
+        Utils::tolower(m_cloud_table) << "'" <<std::endl;
 }
 
 
@@ -307,24 +298,24 @@ void SQLiteWriter::DeleteCloudTable()
     m_session->execute(oss.str());
     oss.str("");
     log()->get(LogLevel::Debug) << "Deleted records from cloud table '"
-                         << boost::to_lower_copy(m_cloud_table)
+                         << Utils::tolower(m_cloud_table)
                          << "'" <<std::endl;
 
     // Go drop the table
     // We need to clean up the geometry column before dropping the table
     oss << "SELECT DiscardGeometryColumn('" <<
-        boost::to_lower_copy(m_cloud_table) << "', 'extent')";
+        Utils::tolower(m_cloud_table) << "', 'extent')";
     m_session->execute(oss.str());
     oss.str("");
     log()->get(LogLevel::Debug) << "Dropped geometry column from cloud table '"
-                         << boost::to_lower_copy(m_cloud_table)
+                         << Utils::tolower(m_cloud_table)
                          << "'" <<std::endl;
 
-    oss << "DROP TABLE " << boost::to_lower_copy(m_cloud_table);
+    oss << "DROP TABLE " << Utils::tolower(m_cloud_table);
     m_session->execute(oss.str());
     oss.str("");
     log()->get(LogLevel::Debug) << "Dropped cloud table '"
-                         << boost::to_lower_copy(m_cloud_table)
+                         << Utils::tolower(m_cloud_table)
                          << "'" <<std::endl;
 }
 
@@ -339,7 +330,7 @@ void SQLiteWriter::CreateIndexes(std::string const& table_name,
     std::string index_name = index_name_ss.str().substr(0,29);
 
     // Spatial indexes
-    oss << "SELECT CreateSpatialIndex('"<< boost::to_lower_copy(table_name) <<
+    oss << "SELECT CreateSpatialIndex('"<< Utils::tolower(table_name) <<
         "', 'extent')";
     m_session->execute(oss.str());
     log()->get(LogLevel::Debug) << "Created spatial index for'" <<
@@ -368,7 +359,7 @@ SQLiteWriter::loadGeometryWKT(std::string const& filename_or_wkt) const
     }
     else
     {
-        std::string wkt = FileUtils::readFileAsString(filename_or_wkt);
+        std::string wkt = FileUtils::readFileIntoString(filename_or_wkt);
         if (!IsValidGeometryWKT(wkt))
         {
             std::ostringstream oss;
@@ -403,7 +394,7 @@ void SQLiteWriter::done(PointTableRef table)
         m_options.getValueOrDefault<std::string>("post_sql", "");
     if (post_sql.size())
     {
-        std::string sql = FileUtils::readFileAsString(post_sql);
+        std::string sql = FileUtils::readFileIntoString(post_sql);
         if (!sql.size())
         {
             // if there was no file to read because the data in post_sql was
@@ -440,9 +431,9 @@ void SQLiteWriter::CreateCloud()
     string cloud_column =
         m_options.getValueOrDefault<string>("cloud_column", "id");
 
-    oss << "INSERT INTO " << boost::to_lower_copy(m_cloud_table) << "(" <<
+    oss << "INSERT INTO " << Utils::tolower(m_cloud_table) << "(" <<
         " block_table, schema) VALUES ('" <<
-        boost::to_lower_copy(m_block_table) << "',?) ";
+        Utils::tolower(m_block_table) << "',?) ";
 
     MetadataNode m;
     if (m_doCompression)
@@ -486,10 +477,10 @@ void SQLiteWriter::CreateCloud()
         r.push_back(column(id));
         rs.push_back(r);
 
-        oss << "UPDATE " << boost::to_lower_copy(m_cloud_table) <<
+        oss << "UPDATE " << Utils::tolower(m_cloud_table) <<
             " SET extent="
             "ST_GeometryFromText(?,?) where " <<
-            boost::to_lower_copy(m_cloud_column) <<"=?";
+            Utils::tolower(m_cloud_column) <<"=?";
 
         m_session->insert(oss.str(), rs);
         log()->get(LogLevel::Debug) <<
@@ -538,8 +529,7 @@ void SQLiteWriter::writeTile(const PointViewPtr view)
         double percent = (double) m_patch->byte_size()/(double) viewSize;
         percent = percent * 100;
         log()->get(LogLevel::Debug3) << "Compressing tile by " <<
-            boost::str(boost::format("%.2f") % (100 - percent)) <<
-            "%" << std::endl;
+            std::setprecision(2) << (100 - percent) << "%" << std::endl;
     }
     else
     {
diff --git a/plugins/sqlite/test/SQLiteTest.cpp b/plugins/sqlite/test/SQLiteTest.cpp
index a864925..97060d8 100644
--- a/plugins/sqlite/test/SQLiteTest.cpp
+++ b/plugins/sqlite/test/SQLiteTest.cpp
@@ -105,7 +105,7 @@ void testReadWrite(bool compression, bool scaling)
         reader.setOptions(lasReadOpts);
 
         StageFactory f;
-        std::unique_ptr<Stage> sqliteWriter(f.createStage("writers.sqlite"));
+        Stage* sqliteWriter(f.createStage("writers.sqlite"));
         sqliteWriter->setOptions(sqliteOptions);
         sqliteWriter->setInput(reader);
 
@@ -113,11 +113,11 @@ void testReadWrite(bool compression, bool scaling)
         sqliteWriter->prepare(table);
         sqliteWriter->execute(table);
     }
-    
+
     {
         // Done - now read back.
         StageFactory f;
-        std::unique_ptr<Stage> sqliteReader(f.createStage("readers.sqlite"));
+        Stage* sqliteReader(f.createStage("readers.sqlite"));
         sqliteReader->setOptions(sqliteOptions);
 
         PointTable table2;
diff --git a/python/MANIFEST.in b/python/MANIFEST.in
index 0ad9024..ff6f592 100644
--- a/python/MANIFEST.in
+++ b/python/MANIFEST.in
@@ -3,3 +3,4 @@ exclude MANIFEST.in
 include CHANGES.txt README.rst VERSION.txt
 recursive-include test *.py
 recursive-include pdal *.pyx
+recursive-include pdal *.hpp
diff --git a/python/VERSION.txt b/python/VERSION.txt
index afaf360..1cc5f65 100644
--- a/python/VERSION.txt
+++ b/python/VERSION.txt
@@ -1 +1 @@
-1.0.0
\ No newline at end of file
+1.1.0
\ No newline at end of file
diff --git a/python/pdal/Pipeline.cpp b/python/pdal/Pipeline.cpp
index 9f07a7c..59cb59e 100644
--- a/python/pdal/Pipeline.cpp
+++ b/python/pdal/Pipeline.cpp
@@ -25,20 +25,18 @@ Pipeline::Pipeline(std::string const& xml)
 
 void Pipeline::execute()
 {
-    pdal::PipelineReader reader(m_manager, false, 0 );
     std::stringstream strm;
     strm << m_xml;
-//     bool isWriter = reader.readPipeline(strm);
-    reader.readPipeline(strm);
+    m_manager.readPipeline(strm);
     m_manager.execute();
 #ifdef PDAL_HAVE_LIBXML2
     pdal::XMLSchema schema(m_manager.pointTable().layout());
     m_schema = schema.xml();
 #endif
 
-    pdal::PipelineWriter writer(m_manager);
     strm.str("");
-    writer.writePipeline(strm);
+    pdal::PipelineWriter::writePipeline(m_manager.getStage(), strm);
+
     m_xml = strm.str();
 
 }
diff --git a/python/pdal/Pipeline.hpp b/python/pdal/Pipeline.hpp
index 38a640e..c5f057c 100644
--- a/python/pdal/Pipeline.hpp
+++ b/python/pdal/Pipeline.hpp
@@ -1,4 +1,3 @@
-#include <pdal/PipelineReader.hpp>
 #include <pdal/PipelineManager.hpp>
 #include <pdal/PipelineWriter.hpp>
 #include <pdal/util/FileUtils.hpp>
diff --git a/python/pdal/__init__.py b/python/pdal/__init__.py
index a5675f6..1ab67ec 100644
--- a/python/pdal/__init__.py
+++ b/python/pdal/__init__.py
@@ -1 +1 @@
-__version__='1.0.0'
+__version__='1.1.0'
diff --git a/python/pdal/libpdalpython.pyx b/python/pdal/libpdalpython.pyx
index 8753475..7f132f2 100644
--- a/python/pdal/libpdalpython.pyx
+++ b/python/pdal/libpdalpython.pyx
@@ -25,7 +25,9 @@ cdef class PyPipeline:
     def __cinit__(self, unicode xml):
         cdef char* x
         if PY_MAJOR_VERSION >= 3:
-            self.thisptr = new Pipeline(xml.encode('UTF-8'))
+            py_byte_string = xml.encode('UTF-8')
+            x= py_byte_string
+            self.thisptr = new Pipeline(x)
         else:
             self.thisptr = new Pipeline(xml)
     def __dealloc__(self):
diff --git a/python/setup.py b/python/setup.py
index 41f5fa7..803caec 100644
--- a/python/setup.py
+++ b/python/setup.py
@@ -5,7 +5,7 @@
 #
 # PDAL_LIBRARY_PATH: a path to a PDAL C++ shared library.
 #
-# GEOS_CONFIG: the path to a pdal-config program that points to GEOS version,
+# PDAL_CONFIG: the path to a pdal-config program that points to PDAL version,
 # headers, and libraries.
 #
 # NB: within this setup scripts, software versions are evaluated according
@@ -40,7 +40,7 @@ if 'all' in sys.warnoptions:
 
 # Second try: use PDAL_CONFIG environment variable
 if 'PDAL_CONFIG' in os.environ:
-    pdal_config = os.environ['GEOS_CONFIG']
+    pdal_config = os.environ['PDAL_CONFIG']
     log.debug('pdal_config: %s', pdal_config)
 else:
     pdal_config = 'pdal-config'
@@ -108,7 +108,7 @@ extra_link_args = []
 
 from setuptools.extension import Extension as DistutilsExtension
 
-if pdal_config:
+if pdal_config and "clean" not in sys.argv:
     # Collect other options from PDAL
     for item in get_pdal_config('--includes').split():
         if item.startswith("-I"):
@@ -135,7 +135,7 @@ extensions = [DistutilsExtension("*",
                                    extra_compile_args=extra_compile_args,
                                    libraries=libraries,
                                    extra_link_args=extra_link_args,)]
-if USE_CYTHON:
+if USE_CYTHON and "clean" not in sys.argv:
     from Cython.Build import cythonize
     extensions= cythonize(extensions, language="c++")
 
diff --git a/python/test/__init__.py b/python/test/__init__.py
index 51f0a62..d5c8c8b 100644
--- a/python/test/__init__.py
+++ b/python/test/__init__.py
@@ -1,2 +1,5 @@
+import sys
+DATADIRECTORY = sys.argv.pop()
+print (DATADIRECTORY)
 from test.test_libpdal import test_suite
 from test.test_pipeline import test_suite
diff --git a/python/test/test_libpdal.py b/python/test/test_libpdal.py
index 77d20f7..27d047b 100644
--- a/python/test/test_libpdal.py
+++ b/python/test/test_libpdal.py
@@ -1,31 +1,43 @@
 import pdal
 from pdal import libpdalpython
-# import pdal.libpdalpython
 import unittest
+import os
 
-def fetch_xml(filename):
+class TestPDALArray(unittest.TestCase):
+  DATADIRECTORY = "../test"
+
+  def fetch_xml(self, filename):
+    import os
+    DATADIRECTORY = os.environ.get('PDAL_TEST_DIR')
+    if not DATADIRECTORY:
+        DATADIRECTORY = self.DATADIRECTORY
+    fn = DATADIRECTORY + os.path.sep +  filename
     output = ''
-    with open(filename, 'rb') as f:
+    with open(fn, 'rb') as f:
         output = f.read().decode('UTF-8')
     return output
 
-class TestPDALArray(unittest.TestCase):
-
+  @unittest.skipUnless(os.path.exists(os.path.join(DATADIRECTORY, '/data/pipeline/pipeline_read.xml')),
+                       "missing test data")
   def test_construction(self):
     """Can we construct a PDAL pipeline"""
-    xml = fetch_xml('../test/data/pipeline/pipeline_read.xml')
+    xml = self.fetch_xml('/data/pipeline/pipeline_read.xml')
     r = libpdalpython.PyPipeline(xml)
 
+  @unittest.skipUnless(os.path.exists(os.path.join(DATADIRECTORY, '/data/pipeline/pipeline_read.xml')),
+                       "missing test data")
   def test_execution(self):
     """Can we execute a PDAL pipeline"""
-    xml = fetch_xml('../test/data/pipeline/pipeline_read.xml')
+    xml = self.fetch_xml('/data/pipeline/pipeline_read.xml')
     r = libpdalpython.PyPipeline(xml)
     r.execute()
-    self.assertEqual(len(r.xml), 2184)
+    self.assertGreater(len(r.xml), 1000)
 
+  @unittest.skipUnless(os.path.exists(os.path.join(DATADIRECTORY, '/data/pipeline/pipeline_read.xml')),
+                       "missing test data")
   def test_array(self):
     """Can we fetch PDAL data as a numpy array"""
-    xml = fetch_xml('../test/data/pipeline/pipeline_read.xml')
+    xml = self.fetch_xml('/data/pipeline/pipeline_read.xml')
     r = libpdalpython.PyPipeline(xml)
     r.execute()
     arrays = r.arrays()
@@ -35,9 +47,11 @@ class TestPDALArray(unittest.TestCase):
     self.assertAlmostEqual(a[0][0], 637012.24, 7)
     self.assertAlmostEqual(a[1064][2], 423.92, 7)
 
+  @unittest.skipUnless(os.path.exists(os.path.join(DATADIRECTORY, '/data/filters/chip.xml')),
+                       "missing test data")
   def test_merged_arrays(self):
     """Can we fetch merged PDAL data """
-    xml = fetch_xml('../test/data/filters/chip.xml')
+    xml = self.fetch_xml('/data/filters/chip.xml')
     r = libpdalpython.PyPipeline(xml)
     r.execute()
     arrays = r.arrays()
diff --git a/scripts/appveyor/config.cmd b/scripts/appveyor/config.cmd
new file mode 100644
index 0000000..9113e82
--- /dev/null
+++ b/scripts/appveyor/config.cmd
@@ -0,0 +1,27 @@
+ at echo off
+
+cmake -G "Visual Studio 14 2015 Win64" ^
+    -DBUILD_PLUGIN_CPD=OFF ^
+    -DBUILD_PLUGIN_GREYHOUND=OFF ^
+    -DBUILD_PLUGIN_HEXBIN=OFF ^
+    -DBUILD_PLUGIN_ICEBRIDGE=OFF ^
+    -DBUILD_PLUGIN_MRSID=OFF ^
+    -DBUILD_PLUGIN_NITF=OFF ^
+    -DBUILD_PLUGIN_OCI=OFF ^
+    -DBUILD_PLUGIN_P2G=OFF ^
+    -DBUILD_PLUGIN_PCL=OFF ^
+    -DBUILD_PLUGIN_PGPOINTCLOUD=OFF ^
+    -DBUILD_PLUGIN_SQLITE=OFF ^
+    -DBUILD_PLUGIN_RIVLIB=OFF ^
+    -DBUILD_PLUGIN_PYTHON=%PDAL_OPTIONAL_COMPONENTS% ^
+    -DENABLE_CTEST=OFF ^
+    -DWITH_APPS=ON ^
+    -DWITH_LAZPERF=%PDAL_OPTIONAL_COMPONENTS% ^
+    -DWITH_GEOTIFF=%PDAL_OPTIONAL_COMPONENTS% ^
+    -DWITH_LASZIP=%PDAL_OPTIONAL_COMPONENTS% ^
+    -DWITH_TESTS=ON ^
+    -DNUMPY_INCLUDE_DIR=%OSGEO4W_ROOT%\apps\python27\lib\site-packages\numpy\core\include ^
+	-DNUMPY_VERSION=1.8.1 ^
+    -Dgtest_force_shared_crt=ON ^
+    -DCMAKE_INSTALL_PREFIX=C:\pdalbin ^
+    .
diff --git a/scripts/appveyor/install.cmd b/scripts/appveyor/install.cmd
index 1217d35..239b599 100644
--- a/scripts/appveyor/install.cmd
+++ b/scripts/appveyor/install.cmd
@@ -1,29 +1,3 @@
 @echo off
 
-cmake -G "Visual Studio 11 2012 Win64" ^
-    -DBUILD_PLUGIN_ATTRIBUTE=%PDAL_OPTIONAL_COMPONENTS% ^
-    -DBUILD_PLUGIN_CPD=OFF ^
-    -DBUILD_PLUGIN_GREYHOUND=OFF ^
-    -DBUILD_PLUGIN_HEXBIN=OFF ^
-    -DBUILD_PLUGIN_ICEBRIDGE=OFF ^
-    -DBUILD_PLUGIN_MRSID=OFF ^
-    -DBUILD_PLUGIN_NITF=OFF ^
-    -DBUILD_PLUGIN_OCI=OFF ^
-    -DBUILD_PLUGIN_P2G=OFF ^
-    -DBUILD_PLUGIN_PCL=OFF ^
-    -DBUILD_PLUGIN_PGPOINTCLOUD=OFF ^
-    -DBUILD_PLUGIN_SQLITE=OFF ^
-    -DBUILD_PLUGIN_RIVLIB=OFF ^
-    -DBUILD_PLUGIN_PYTHON=%PDAL_OPTIONAL_COMPONENTS% ^
-    -DENABLE_CTEST=OFF ^
-    -DWITH_APPS=ON ^
-    -DWITH_LAZPERF=%PDAL_OPTIONAL_COMPONENTS% ^
-    -DWITH_GEOTIFF=%PDAL_OPTIONAL_COMPONENTS% ^
-    -DWITH_ICONV=%PDAL_OPTIONAL_COMPONENTS% ^
-    -DWITH_LASZIP=%PDAL_OPTIONAL_COMPONENTS% ^
-    -DWITH_LIBXML2=OFF ^
-    -DWITH_TESTS=ON ^
-    -DNUMPY_INCLUDE_DIR=%OSGEODIR%\apps\python27\lib\site-packages\numpy\core\include ^
-	-DNUMPY_VERSION=1.8.1 ^
-    -Dgtest_force_shared_crt=ON ^
-    .
+cmake --build . --target install
diff --git a/scripts/ci/before_install.sh b/scripts/ci/before_install.sh
index 73e9af3..dbec11a 100755
--- a/scripts/ci/before_install.sh
+++ b/scripts/ci/before_install.sh
@@ -2,86 +2,4 @@
 # Installs requirements for PDAL
 source ./scripts/ci/common.sh
 
-sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 16126D3A3E5C1192
-sudo mv /etc/apt/sources.list.d/pgdg-source.list* /tmp
-sudo apt-get update -qq
-
-sudo apt-get install \
-    software-properties-common \
-    python-software-properties \
-    libeigen3-dev
-sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable -y
-sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
-sudo add-apt-repository ppa:boost-latest/ppa -y
-sudo add-apt-repository ppa:kalakris/cmake -y
-sudo add-apt-repository ppa:pdal/travis -y
-sudo apt-get update -qq
-
-sudo apt-get -qq remove postgis
-
-# From main
-if [[ $PDAL_CMAKE_GENERATOR == "Ninja" ]]
-then
-    sudo apt-get install ninja-build
-fi
-
-# From ppa:ubuntu-toolchain-r/test
-# Install g++-4.8 (even if we're building clang) for updated libstdc++
-sudo apt-get install g++-4.8
-
-# From ppa:boost-latest/ppa
-sudo apt-get install boost1.55
-
-# From ppa:kalakris/cmake
-sudo apt-get install cmake
-
-# From ppa:ubuntugis/ubuntugis-unstable
-sudo apt-get install \
-    libgdal1h \
-    libgdal-dev
-
-if [[ $PDAL_OPTIONAL_COMPONENTS == "all" ]]
-then
-    # From main
-    sudo apt-get install \
-        libflann-dev \
-        libhdf5-serial-dev \
-        libtiff4-dev \
-        postgresql-server-dev-9.1 \
-        python-numpy
-
-    # From ppa:ubuntugis/ppa
-    sudo apt-get install \
-        libgeotiff-dev \
-        libxml2-dev
-
-    # From ppa:ubuntugis/ubuntugis-unstable
-    sudo apt-get install \
-        libgeos++-dev \
-        libproj-dev
-
-    # From ppa:pdal/travis
-    sudo apt-get install \
-        hexboundary \
-        laz-perf \
-        pgpointcloud \
-        points2grid
-fi
-
-#
-# LasZIP
-#
-
-mkdir laszip
-cd laszip
-wget https://github.com/LASzip/LASzip/releases/download/v2.2.0/laszip-src-2.2.0.tar.gz &&
-  tar xzf laszip-src-2.2.0.tar.gz &&
-  cd laszip-src-2.2.0 &&
-  ./configure &&
-  make &&
-  sudo make install &&
-  sudo ldconfig &&
-  (cd /usr/local/include && sudo mkdir laszip && cd laszip && sudo ln -s ../las*.hpp .)
-
-gcc --version
-clang --version
+docker pull pdal/dependencies
diff --git a/scripts/ci/common.sh b/scripts/ci/common.sh
index 6505da4..f23781e 100644
--- a/scripts/ci/common.sh
+++ b/scripts/ci/common.sh
@@ -1,8 +1,8 @@
 #!/bin/bash
-if [[ "$TRAVIS" != "true" ]] ; then
-	echo "Running this script makes no sense outside of travis-ci.org"
-	exit 1
-fi
+# if [[ "$TRAVIS" != "true" ]] ; then
+# 	echo "Running this script makes no sense outside of travis-ci.org"
+# 	exit 1
+# fi
 
 # Functions
 tmstamp() { echo -n "[$(date '+%H:%M:%S')]" ; }
diff --git a/scripts/ci/script.sh b/scripts/ci/script.sh
index a07cad6..9ad1714 100755
--- a/scripts/ci/script.sh
+++ b/scripts/ci/script.sh
@@ -1,5 +1,9 @@
 #!/bin/bash -e
 # Builds and tests PDAL
+
+clang --version
+
+cd /pdal
 source ./scripts/ci/common.sh
 
 mkdir -p _build || exit 1
@@ -17,14 +21,9 @@ case "$PDAL_OPTIONAL_COMPONENTS" in
         exit 1
 esac
 
-if [[ "$CXX" == "g++" ]]
-then
-    export CXX="g++-4.8"
-fi
 
 cmake \
-    -DBUILD_PLUGIN_ATTRIBUTE=$OPTIONAL_COMPONENT_SWITCH \
-    -DBUILD_PLUGIN_CPD=OFF \
+    -DBUILD_PLUGIN_CPD=$OPTIONAL_COMPONENT_SWITCH \
     -DBUILD_PLUGIN_GREYHOUND=OFF \
     -DBUILD_PLUGIN_HEXBIN=$OPTIONAL_COMPONENT_SWITCH \
     -DBUILD_PLUGIN_ICEBRIDGE=$OPTIONAL_COMPONENT_SWITCH \
@@ -32,8 +31,9 @@ cmake \
     -DBUILD_PLUGIN_NITF=OFF \
     -DBUILD_PLUGIN_OCI=OFF \
     -DBUILD_PLUGIN_P2G=$OPTIONAL_COMPONENT_SWITCH \
-    -DBUILD_PLUGIN_PCL=OFF \
+    -DBUILD_PLUGIN_PCL=$OPTIONAL_COMPONENT_SWITCH \
     -DBUILD_PLUGIN_PGPOINTCLOUD=$OPTIONAL_COMPONENT_SWITCH \
+    -DBUILD_PGPOINTCLOUD_TESTS=OFF \
     -DBUILD_PLUGIN_SQLITE=$OPTIONAL_COMPONENT_SWITCH \
     -DBUILD_PLUGIN_RIVLIB=OFF \
     -DBUILD_PLUGIN_PYTHON=$OPTIONAL_COMPONENT_SWITCH \
@@ -42,22 +42,40 @@ cmake \
     -DWITH_LAZPERF=$OPTIONAL_COMPONENT_SWITCH \
     -DWITH_GEOTIFF=$OPTIONAL_COMPONENT_SWITCH \
     -DWITH_LASZIP=$OPTIONAL_COMPONENT_SWITCH \
-    -DLASZIP_INCLUDE_DIR:PATH=/usr/local/include \
-    -DLASZIP_LIBRARY:FILEPATH=/usr/local/lib/liblaszip.so \
+    -DLASZIP_INCLUDE_DIR:PATH=/usr/include \
+    -DLASZIP_LIBRARY:FILEPATH=/usr/lib/liblaszip.so \
     -DWITH_TESTS=ON \
     -G "$PDAL_CMAKE_GENERATOR" \
     ..
 
-if [[ $PDAL_CMAKE_GENERATOR == "Unix Makefiles" ]]
-then
-    MAKECMD=make
-else
-    MAKECMD=ninja
-fi
+cmake ..
+
+MAKECMD=ninja
 
 # Don't use ninja's default number of threads becuase it can
 # saturate Travis's available memory.
+NUMTHREADS=2
 ${MAKECMD} -j ${NUMTHREADS} && \
     LD_LIBRARY_PATH=./lib && \
-    sudo PGUSER=postgres ctest -V && \
-    sudo ${MAKECMD} install
+    PGUSER=postgres ctest -V && \
+    ${MAKECMD} install && \
+    /sbin/ldconfig
+
+if [ "${OPTIONAL_COMPONENT_SWITCH}" == "ON" ]; then
+    cd /pdal/python
+    pip install packaging
+    python setup.py build
+    echo "current path: " `pwd`
+    export PDAL_TEST_DIR=/pdal/_build/test
+    python setup.py test
+    
+    # Build all examples
+    for EXAMPLE in writing writing-filter writing-kernel writing-reader writing-writer
+    do
+        cd /pdal/examples/$EXAMPLE
+        mkdir -p _build || exit 1
+        cd _build || exit 1
+        cmake -G "$PDAL_CMAKE_GENERATOR" .. && \
+        ${MAKECMD}
+    done
+fi
diff --git a/scripts/docker/Dockerfile b/scripts/docker/Dockerfile
new file mode 100644
index 0000000..2461d66
--- /dev/null
+++ b/scripts/docker/Dockerfile
@@ -0,0 +1,64 @@
+FROM pdal/dependencies:latest
+MAINTAINER Howard Butler <howard at hobu.co>
+#ARG branch=master
+
+ENV CC clang
+ENV CXX clang++
+
+RUN apt-get update && apt-get install -y --fix-missing --no-install-recommends \
+        cython \
+        python-pip \
+        libhpdf-dev \
+    && rm -rf /var/lib/apt/lists/*
+
+
+RUN git clone --depth=1 https://github.com/PDAL/PDAL \
+	&& cd PDAL \
+	&& git checkout master \
+	&& mkdir build \
+	&& cd build \
+	&& cmake \
+		-DBUILD_PLUGIN_CPD=OFF \
+		-DBUILD_PLUGIN_GREYHOUND=ON \
+		-DBUILD_PLUGIN_HEXBIN=ON \
+		-DBUILD_PLUGIN_ICEBRIDGE=ON \
+		-DBUILD_PLUGIN_MRSID=ON \
+		-DBUILD_PLUGIN_NITF=ON \
+		-DBUILD_PLUGIN_OCI=OFF \
+		-DBUILD_PLUGIN_P2G=ON \
+		-DBUILD_PLUGIN_PCL=ON \
+		-DBUILD_PLUGIN_PGPOINTCLOUD=ON \
+		-DBUILD_PLUGIN_SQLITE=ON \
+		-DBUILD_PLUGIN_RIVLIB=OFF \
+		-DBUILD_PLUGIN_PYTHON=ON \
+		-DCMAKE_INSTALL_PREFIX=/usr \
+		-DENABLE_CTEST=OFF \
+		-DWITH_APPS=ON \
+		-DWITH_LAZPERF=ON \
+		-DWITH_GEOTIFF=ON \
+		-DWITH_LASZIP=ON \
+		-DWITH_TESTS=ON \
+		-DCMAKE_BUILD_TYPE=Release \
+		.. \
+	&& make -j4 \
+	&& make install \
+    && rm -rf PDAL
+
+#RUN pip install packaging \
+#    && pip install PDAL
+
+
+RUN git clone https://github.com/PDAL/PRC.git \
+    && cd PRC \
+    && git checkout master \
+    && mkdir build \
+    && cd build \
+    && echo `pwd` \
+    && ls .. \
+    && cmake \
+        -DCMAKE_BUILD_TYPE=Release \
+        -DPDAL_DIR=/usr/lib/pdal/cmake \
+        .. \
+    && make \
+    && make install \
+    && rm -rf PRC
diff --git a/scripts/docker/dependencies/Dockerfile b/scripts/docker/dependencies/Dockerfile
new file mode 100644
index 0000000..ff445ae
--- /dev/null
+++ b/scripts/docker/dependencies/Dockerfile
@@ -0,0 +1,273 @@
+FROM ubuntu:15.04
+MAINTAINER Howard Butler <howard at hobu.co>
+
+RUN apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 16126D3A3E5C1192
+RUN apt-get update -qq
+RUN apt-get -qq remove postgis
+
+RUN apt-get update && apt-get install -y --fix-missing --no-install-recommends \
+        build-essential \
+        ca-certificates \
+        cmake \
+        curl \
+        gfortran \
+        git \
+        libarmadillo-dev \
+        libarpack2-dev \
+        libflann-dev \
+        libhdf5-serial-dev \
+        liblapack-dev \
+        libtiff5-dev \
+        openssh-client \
+        python-dev \
+        python-numpy \
+        python-software-properties \
+        software-properties-common \
+        wget \
+        automake \
+        libtool \
+        libspatialite-dev \
+        libhdf5-dev \
+        subversion \
+        libjsoncpp-dev \
+        libboost-filesystem1.55-dev \
+        libboost-iostreams1.55-dev \
+        libboost-program-options1.55-dev \
+        libboost-system1.55-dev \
+        libboost-thread1.55-dev \
+        subversion \
+        clang \
+        libproj-dev \
+        libc6-dev \
+        libnetcdf-dev \
+        libjasper-dev \
+        libpng-dev \
+        libjpeg-dev \
+        libgif-dev \
+        libwebp-dev \
+        libhdf4-alt-dev \
+        libhdf5-dev \
+        libpq-dev \
+        libxerces-c-dev \
+        unixodbc-dev \
+        libsqlite3-dev \
+        libgeos-dev \
+        libmysqlclient-dev \
+        libltdl-dev \
+        libcurl4-openssl-dev \
+        libspatialite-dev \
+        libdap-dev\
+        ninja \
+        cython \
+        python-pip \
+    && rm -rf /var/lib/apt/lists/*
+
+
+RUN git clone --depth=1 https://github.com/OSGeo/gdal.git \
+    &&    cd gdal/gdal \
+    && ./configure --prefix=/usr \
+            --mandir=/usr/share/man \
+            --includedir=/usr/include/gdal \
+            --with-threads \
+            --with-grass=no \
+            --with-hide-internal-symbols=yes \
+            --with-rename-internal-libtiff-symbols=yes \
+            --with-rename-internal-libgeotiff-symbols=yes \
+            --with-libtiff=internal \
+            --with-geotiff=internal \
+            --with-webp \
+            --with-jasper \
+            --with-netcdf \
+            --with-hdf5=/usr/lib/x86_64-linux-gnu/hdf5/serial/ \
+            --with-xerces \
+            --with-geos \
+            --with-sqlite3 \
+            --with-curl \
+            --with-pg \
+            --with-mysql \
+            --with-python \
+            --with-odbc \
+            --with-ogdi \
+            --with-dods-root=/usr \
+            --with-spatialite=/usr \
+            --with-cfitsio=no \
+            --with-ecw=no \
+            --with-mrsid=no \
+            --with-poppler=yes \
+            --with-openjpeg=yes \
+            --with-freexl=yes \
+            --with-libkml=yes \
+            --with-armadillo=yes \
+            --with-liblzma=yes \
+            --with-epsilon=/usr \
+    && make -j 4 \
+    && make install \
+    && rm -rf gdal
+
+RUN git clone https://github.com/hobu/nitro \
+    && cd nitro \
+    && mkdir build \
+    && cd build \
+    && cmake \
+        -DCMAKE_INSTALL_PREFIX=/usr \
+        .. \
+    && make \
+    && make install \
+    && rm -rf nitro
+
+RUN git clone https://github.com/LASzip/LASzip.git laszip \
+    && cd laszip \
+    && git checkout e7065cbc5bdbbe0c6e50c9d93d1cd346e9be6778 \
+    && mkdir build \
+    && cd build \
+    && cmake \
+        -DCMAKE_INSTALL_PREFIX=/usr \
+        -DCMAKE_BUILD_TYPE="Release" \
+        .. \
+    && make \
+    && make install \
+    && rm -rf laszip
+
+
+RUN git clone https://github.com/hobu/hexer.git \
+    && cd hexer \
+    && mkdir build \
+    && cd build \
+    && cmake \
+        -DCMAKE_INSTALL_PREFIX=/usr \
+        -DCMAKE_BUILD_TYPE="Release" \
+        .. \
+    && make \
+    && make install \
+    && rm -rf hexer
+
+RUN git clone https://github.com/CRREL/points2grid.git \
+    && cd points2grid \
+    && mkdir build \
+    && cd build \
+    && cmake \
+        -DCMAKE_INSTALL_PREFIX=/usr \
+        -DCMAKE_BUILD_TYPE="Release" \
+        .. \
+    && make \
+    && make install \
+    && rm -rf points2grid
+
+RUN git clone  https://github.com/verma/laz-perf.git \
+    && cd laz-perf \
+    && mkdir build \
+    && cd build \
+    && cmake \
+        -DCMAKE_INSTALL_PREFIX=/usr \
+        -DCMAKE_BUILD_TYPE="Release" \
+        .. \
+    && make \
+    && make install \
+    && rm -rf laz-perf
+
+RUN wget http://bitbucket.org/eigen/eigen/get/3.2.7.tar.gz \
+        && tar -xvf 3.2.7.tar.gz \
+        && cp -R eigen-eigen-b30b87236a1b/Eigen/ /usr/include/Eigen/ \
+        && cp -R eigen-eigen-b30b87236a1b/unsupported/ /usr/include/unsupported/
+
+RUN git clone https://github.com/chambbj/pcl.git \
+        && cd pcl \
+        && git checkout pcl-1.7.2-sans-opengl \
+        && mkdir build \
+        && cd build \
+        && cmake \
+                -DBUILD_2d=ON \
+                -DBUILD_CUDA=OFF \
+                -DBUILD_GPU=OFF \
+                -DBUILD_apps=OFF \
+                -DBUILD_common=ON \
+                -DBUILD_examples=OFF \
+                -DBUILD_features=ON \
+                -DBUILD_filters=ON \
+                -DBUILD_geometry=ON \
+                -DBUILD_global_tests=OFF \
+                -DBUILD_io=ON \
+                -DBUILD_kdtree=ON \
+                -DBUILD_keypoints=ON \
+                -DBUILD_ml=ON \
+                -DBUILD_octree=ON \
+                -DBUILD_outofcore=OFF \
+                -DBUILD_people=OFF \
+                -DBUILD_recognition=OFF \
+                -DBUILD_registration=ON \
+                -DBUILD_sample_concensus=ON \
+                -DBUILD_search=ON \
+                -DBUILD_segmentation=ON \
+                -DBUILD_simulation=OFF \
+                -DBUILD_stereo=OFF \
+                -DBUILD_surface=ON \
+                -DBUILD_surface_on_nurbs=OFF \
+                -DBUILD_tools=OFF \
+                -DBUILD_tracking=OFF \
+                -DBUILD_visualization=OFF \
+                -DWITH_LIBUSB=OFF \
+                -DWITH_OPENNI=OFF \
+                -DWITH_OPENNI2=OFF \
+                -DWITH_FZAPI=OFF \
+                -DWITH_PXCAPI=OFF \
+                -DWITH_PNG=OFF \
+                -DWITH_QHULL=OFF \
+                -DWITH_QT=OFF \
+                -DWITH_VTK=OFF \
+                -DWITH_PCAP=OFF \
+                -DCMAKE_INSTALL_PREFIX=/usr \
+                -DCMAKE_BUILD_TYPE="Release" \
+                .. \
+        && make \
+        && make install \
+        && rm -rf pcl
+
+
+
+RUN svn co -r 2691 https://svn.osgeo.org/metacrs/geotiff/trunk/libgeotiff/ \
+    && cd libgeotiff \
+    && ./autogen.sh \
+    && ./configure --prefix=/usr \
+    && make \
+    && make install \
+    && rm -rf libgeotiff
+
+RUN apt-get update && apt-get install -y --fix-missing --no-install-recommends \
+        ninja-build \
+        libgeos++-dev \
+        unzip \
+    && rm -rf /var/lib/apt/lists/*
+
+RUN mkdir /vdatum \
+    && cd /vdatum \
+    && wget http://download.osgeo.org/proj/vdatum/usa_geoid2012.zip && unzip -j -u usa_geoid2012.zip -d /usr/share/proj \
+    && wget http://download.osgeo.org/proj/vdatum/usa_geoid2009.zip && unzip -j -u usa_geoid2009.zip -d /usr/share/proj \
+    && wget http://download.osgeo.org/proj/vdatum/usa_geoid2003.zip && unzip -j -u usa_geoid2003.zip -d /usr/share/proj \
+    && wget http://download.osgeo.org/proj/vdatum/usa_geoid1999.zip && unzip -j -u usa_geoid1999.zip -d /usr/share/proj \
+    && wget http://download.osgeo.org/proj/vdatum/vertcon/vertconc.gtx && mv vertconc.gtx /usr/share/proj \
+    && wget http://download.osgeo.org/proj/vdatum/vertcon/vertcone.gtx && mv vertcone.gtx /usr/share/proj \
+    && wget http://download.osgeo.org/proj/vdatum/vertcon/vertconw.gtx && mv vertconw.gtx /usr/share/proj \
+    && wget http://download.osgeo.org/proj/vdatum/egm96_15/egm96_15.gtx && mv egm96_15.gtx /usr/share/proj \
+    && wget http://download.osgeo.org/proj/vdatum/egm08_25/egm08_25.gtx && mv egm08_25.gtx /usr/share/proj \
+    && rm -rf /vdatum
+
+RUN rm -rf laszip laz-perf points2grid pcl nitro hexer 3.2.7.tar.gz eigen-eigen-b30b87236a1b gdal libgeotiff
+RUN apt-get clean
+
+RUN git clone https://github.com/gadomski/fgt.git \
+    && cd fgt \
+    && git checkout v0.4.4 \
+    && cmake . -DWITH_TESTS=OFF -DBUILD_SHARED_LIBS=ON -DEIGEN3_INCLUDE_DIR=/usr/include -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release \
+    && make \
+    && make install \
+    && cd .. \
+    && rm -rf fgt
+
+RUN git clone https://github.com/gadomski/cpd.git \
+    && cd cpd \
+    && git checkout v0.3.2 \
+    && cmake . -DWITH_TESTS=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release \
+    && make \
+    && make install \
+    && cd .. \
+    && rm -rf cpd
diff --git a/scripts/docker/packaging/Dockerfile b/scripts/docker/packaging/Dockerfile
new file mode 100644
index 0000000..44f5ed0
--- /dev/null
+++ b/scripts/docker/packaging/Dockerfile
@@ -0,0 +1,23 @@
+FROM pdal/dependencies
+MAINTAINER Howard Butler <howard at hobu.co>
+
+# Get howard at hobu.co key
+RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BFE1B014
+COPY howard-hobu-co-gpg-private.key /
+RUN gpg --allow-secret-key-import --import /howard-hobu-co-gpg-private.key
+
+RUN git config --global user.email "howard at hobu.co"
+RUN git config --global user.name "Howard Butler"
+
+RUN apt-get update && apt-get install -y --fix-missing --no-install-recommends \
+	packaging-dev \
+	git-buildpackage \
+	fakeroot \
+	pdebuild \
+	cowbuilder \
+	&& rm -rf /var/lib/apt/lists/*
+
+
+ENV DEBFULLNAME="Howard Butler"
+ENV DEBEMAIL=howard at hobu.co
+
diff --git a/scripts/docker/rivlib/.gitignore b/scripts/docker/rivlib/.gitignore
new file mode 100644
index 0000000..d6638be
--- /dev/null
+++ b/scripts/docker/rivlib/.gitignore
@@ -0,0 +1 @@
+rivlib-*
diff --git a/scripts/docker/rivlib/Dockerfile b/scripts/docker/rivlib/Dockerfile
new file mode 100644
index 0000000..19fbe55
--- /dev/null
+++ b/scripts/docker/rivlib/Dockerfile
@@ -0,0 +1,37 @@
+FROM pdal/master
+MAINTAINER Pete Gadomski <pete.gadomski at gmail.com>
+
+COPY rivlib-2_2_1-x86_64-linux-gcc44 /
+
+RUN git clone --depth=1 https://github.com/PDAL/PDAL \
+	&& cd PDAL \
+	&& git checkout master \
+	&& mkdir build \
+	&& cd build \
+	&& cmake \
+		-DBUILD_PLUGIN_CPD=ON \
+		-DBUILD_PLUGIN_GREYHOUND=ON \
+		-DBUILD_PLUGIN_HEXBIN=ON \
+		-DBUILD_PLUGIN_ICEBRIDGE=ON \
+		-DBUILD_PLUGIN_MRSID=ON \
+		-DBUILD_PLUGIN_NITF=ON \
+		-DBUILD_PLUGIN_OCI=OFF \
+		-DBUILD_PLUGIN_P2G=ON \
+		-DBUILD_PLUGIN_PCL=ON \
+		-DBUILD_PLUGIN_PGPOINTCLOUD=ON \
+		-DBUILD_PLUGIN_SQLITE=ON \
+        -DRiVLib_DIR=/rivlib-2_2_1-x86_64-linux-gcc44/cmake \
+		-DBUILD_PLUGIN_RIVLIB=ON \
+		-DBUILD_PLUGIN_PYTHON=ON \
+		-DCMAKE_INSTALL_PREFIX=/usr \
+		-DENABLE_CTEST=OFF \
+		-DWITH_APPS=ON \
+		-DWITH_LAZPERF=ON \
+		-DWITH_GEOTIFF=ON \
+		-DWITH_LASZIP=ON \
+		-DWITH_TESTS=ON \
+		-DCMAKE_BUILD_TYPE=Release \
+		.. \
+	&& make -j4 \
+	&& make install \
+    && rm -rf PDAL
diff --git a/scripts/linux-install-scripts/pdal.sh b/scripts/linux-install-scripts/pdal.sh
index 6e3105e..18cbb6a 100644
--- a/scripts/linux-install-scripts/pdal.sh
+++ b/scripts/linux-install-scripts/pdal.sh
@@ -21,7 +21,6 @@ cmake   -G "Unix Makefiles"  \
         -DWITH_LAZPERF=ON \
         -DWITH_LIBXML2=ON \
         -DBUILD_PLUGIN_PYTHON=ON \
-        -DBUILD_PLUGIN_ATTRIBUTE=ON \
         -DBUILD_PLUGIN_HEXBIN=ON \
         -DBUILD_PLUGIN_ICEBRIDGE=ON \
         -DBUILD_PLUGIN_NITF=ON \
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0b849a2..7e3122c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -15,7 +15,6 @@
 #   PDAL_<dirname>_CPP - all the .cpp files for the given subdir/namespace
 #   ...
 
-
 set(PDAL_HPP "")
 set(PDAL_CPP "")
 
@@ -37,37 +36,37 @@ endif()
 #
 set(PDAL_BASE_HPP
   "${PDAL_HEADERS_DIR}/pdal_types.hpp"
-  "${PDAL_HEADERS_DIR}/BufferReader.hpp"
   "${PDAL_HEADERS_DIR}/Compression.hpp"
   "${PDAL_HEADERS_DIR}/Dimension.hpp"
   "${PDAL_HEADERS_DIR}/Filter.hpp"
   "${PDAL_HEADERS_DIR}/FlexWriter.hpp"
   "${PDAL_HEADERS_DIR}/GDALUtils.hpp"
-  "${PDAL_HEADERS_DIR}/Geometry.hpp"
-  "${PDAL_HEADERS_DIR}/GlobalEnvironment.hpp"
+  "${PDAL_HEADERS_DIR}/GEOSUtils.hpp"
   "${PDAL_HEADERS_DIR}/gitsha.h"
   "${PDAL_HEADERS_DIR}/KDIndex.hpp"
   "${PDAL_HEADERS_DIR}/KernelFactory.hpp"
   "${PDAL_HEADERS_DIR}/Kernel.hpp"
-  "${PDAL_HEADERS_DIR}/KernelSupport.hpp"
   "${PDAL_HEADERS_DIR}/Log.hpp"
   "${PDAL_HEADERS_DIR}/Metadata.hpp"
   "${PDAL_HEADERS_DIR}/Options.hpp"
   "${PDAL_HEADERS_DIR}/PipelineManager.hpp"
-  "${PDAL_HEADERS_DIR}/PipelineReader.hpp"
   "${PDAL_HEADERS_DIR}/PipelineWriter.hpp"
+  "${PDAL_HEADERS_DIR}/PointContainer.hpp"
   "${PDAL_HEADERS_DIR}/PointLayout.hpp"
+  "${PDAL_HEADERS_DIR}/PointRef.hpp"
   "${PDAL_HEADERS_DIR}/PointTable.hpp"
   "${PDAL_HEADERS_DIR}/PointView.hpp"
   "${PDAL_HEADERS_DIR}/PointViewIter.hpp"
+  "${PDAL_HEADERS_DIR}/Polygon.hpp"
   "${PDAL_HEADERS_DIR}/QuadIndex.hpp"
   "${PDAL_HEADERS_DIR}/Reader.hpp"
   "${PDAL_HEADERS_DIR}/SpatialReference.hpp"
   "${PDAL_HEADERS_DIR}/Stage.hpp"
   "${PDAL_HEADERS_DIR}/StageFactory.hpp"
   "${PDAL_HEADERS_DIR}/StageWrapper.hpp"
-  "${PDAL_HEADERS_DIR}/UserCallback.hpp"
   "${PDAL_HEADERS_DIR}/Writer.hpp"
+  "${PDAL_SRC_DIR}/PipelineReaderJSON.hpp"
+  "${PDAL_SRC_DIR}/PipelineReaderXML.hpp"
   "${PDAL_SRC_DIR}/StageRunner.hpp"
     ${PDAL_XML_HEADER}
     ${DB_DRIVER_HEADERS}
@@ -75,23 +74,22 @@ set(PDAL_BASE_HPP
 
 set(PDAL_BASE_CPP
   DynamicLibrary.cpp
-  Filter.cpp
   gitsha.cpp
   GDALUtils.cpp
-  GlobalEnvironment.cpp
+  GEOSUtils.cpp
   Kernel.cpp
   KernelFactory.cpp
-  KernelSupport.cpp
   Log.cpp
+  Metadata.cpp
   Options.cpp
   PDALUtils.cpp
-
   PointLayout.cpp
   PointTable.cpp
   PointView.cpp
-
+  Polygon.cpp
   PipelineManager.cpp
-  PipelineReader.cpp
+  PipelineReaderJSON.cpp
+  PipelineReaderXML.cpp
   PipelineWriter.cpp
   PluginManager.cpp
   QuadIndex.cpp
@@ -103,6 +101,7 @@ set(PDAL_BASE_CPP
   ${PDAL_XML_SRC}
   ${PDAL_LAZPERF_SRC}
   ${DB_DRIVER_SRCS}
+  ${PROJECT_SOURCE_DIR}/vendor/jsoncpp-1.6.2/dist/jsoncpp.cpp
 )
 
 list (APPEND PDAL_CPP ${PDAL_BASE_CPP} )
@@ -173,9 +172,7 @@ endif()
 # so that users only need link libpdalcpp.
 #
 if (APPLE)
-    set(UTIL_LIB "-Wl,-reexport_library,$<TARGET_SONAME_FILE:${PDAL_UTIL_LIB_NAME}>")
-else()
-    set(UTIL_LIB ${PDAL_UTIL_LIB_NAME})
+    set(REEXPORT_UTIL_LIB "-Wl,-reexport_library,$<TARGET_SONAME_FILE:${PDAL_UTIL_LIB_NAME}>")
 endif()
 
 target_link_libraries(${PDAL_BASE_LIB_NAME}
@@ -183,15 +180,15 @@ target_link_libraries(${PDAL_BASE_LIB_NAME}
     ${GDAL_LIBRARY}
     ${GEOS_LIBRARY}
     ${ZLIB_LIBRARIES}
-    ${UTIL_LIB}
+    ${PDAL_BOOST_LIB_NAME}
+    ${PDAL_UTIL_LIB_NAME}
+    ${REEXPORT_UTIL_LIB}
 )
 
 if (WITH_GEOTIFF)
     target_link_libraries(${PDAL_BASE_LIB_NAME} ${GEOTIFF_LIBRARY})
 endif()
 
-target_link_libraries(${PDAL_BASE_LIB_NAME} ${Boost_LIBRARIES})
-
 if(WIN32)
     target_link_libraries(${PDAL_BASE_LIB_NAME} ws2_32)
 endif()
@@ -212,4 +209,5 @@ endif()
 
 install(DIRECTORY "${PDAL_HEADERS_DIR}/"
   DESTINATION "${PDAL_INCLUDE_INSTALL_DIR}"
-  FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp")
+  PATTERN "/CMakeFiles/*" EXCLUDE
+  )
diff --git a/src/DynamicLibrary.cpp b/src/DynamicLibrary.cpp
index 67ea492..0e9c6ef 100755
--- a/src/DynamicLibrary.cpp
+++ b/src/DynamicLibrary.cpp
@@ -43,7 +43,7 @@
   #include <dlfcn.h>
 #endif
 
-#include "DynamicLibrary.h"
+#include "DynamicLibrary.hpp"
 #include <sstream>
 #include <iostream>
 
@@ -62,6 +62,13 @@ DynamicLibrary::~DynamicLibrary()
     }
 }
 
+
+void DynamicLibrary::clear()
+{
+    m_handle = NULL;
+}
+
+
 DynamicLibrary *DynamicLibrary::load(const std::string &name, 
     std::string &errorString)
 {
diff --git a/src/DynamicLibrary.h b/src/DynamicLibrary.h
deleted file mode 100755
index f04fcda..0000000
--- a/src/DynamicLibrary.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/******************************************************************************
-* Copyright (c) 2015, Bradley J Chambers (brad.chambers at gmail.com)
-*
-* 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 in
-*       the documentation and/or other materials provided
-*       with the distribution.
-*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
-*       names of its contributors may be used to endorse or promote
-*       products derived from this software without specific prior
-*       written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-* OF SUCH DAMAGE.
-****************************************************************************/
-
-// The DynamicLibrary was modeled very closely after the work of Gigi Sayfan in
-// the Dr. Dobbs article:
-// http://www.drdobbs.com/cpp/building-your-own-plugin-framework-part/206503957
-// The original work was released under the Apache License v2.
-
-#pragma once
-
-#include <string>
-
-namespace pdal
-{
-
-class DynamicLibrary
-{
-public:
-    static DynamicLibrary *load(const std::string &path,
-        std::string &errorString);
-
-    ~DynamicLibrary();
-    void *getSymbol(const std::string& name);
-
-private:
-    DynamicLibrary(void *handle) : m_handle(handle)
-    {}
-
-    DynamicLibrary();  // Unimplemented
-    DynamicLibrary(const DynamicLibrary &);  // Unimplemented
-  
-private:
-    void *m_handle;
-};
-
-} // namespace pdal
-
diff --git a/src/DynamicLibrary.hpp b/src/DynamicLibrary.hpp
new file mode 100755
index 0000000..fdffa7e
--- /dev/null
+++ b/src/DynamicLibrary.hpp
@@ -0,0 +1,69 @@
+/******************************************************************************
+* Copyright (c) 2015, Bradley J Chambers (brad.chambers at gmail.com)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+// The DynamicLibrary was modeled very closely after the work of Gigi Sayfan in
+// the Dr. Dobbs article:
+// http://www.drdobbs.com/cpp/building-your-own-plugin-framework-part/206503957
+// The original work was released under the Apache License v2.
+
+#pragma once
+
+#include <string>
+
+namespace pdal
+{
+
+class DynamicLibrary
+{
+public:
+    static DynamicLibrary *load(const std::string &path,
+        std::string &errorString);
+
+    ~DynamicLibrary();
+    void *getSymbol(const std::string& name);
+    void clear();
+
+private:
+    DynamicLibrary(void *handle) : m_handle(handle)
+    {}
+
+    DynamicLibrary();  // Unimplemented
+    DynamicLibrary(const DynamicLibrary &);  // Unimplemented
+  
+private:
+    void *m_handle;
+};
+
+} // namespace pdal
+
diff --git a/src/Filter.cpp b/src/Filter.cpp
index d3f6a9b..4ca7b10 100644
--- a/src/Filter.cpp
+++ b/src/Filter.cpp
@@ -38,25 +38,10 @@
 namespace pdal
 {
 
-boost::property_tree::ptree Filter::serializePipeline() const
+pdalboost::property_tree::ptree Filter::serializePipeline() const
 {
-    boost::property_tree::ptree tree;
-
-    tree.add("<xmlattr>.type", getName());
-
-    PipelineWriter::write_option_ptree(tree, getOptions());
-    PipelineWriter::writeMetadata(tree, m_metadata);
-
-    const Stage& stage = *getInputs()[0];
-    boost::property_tree::ptree subtree = stage.serializePipeline();
-
-    tree.add_child(subtree.begin()->first, subtree.begin()->second);
-
-    boost::property_tree::ptree root;
-    root.add_child("Filter", tree);
-
-    return root;
+    return serialize(getName(), "Filter");
 }
 
-
 } // namespace pdal
+
diff --git a/src/GDALUtils.cpp b/src/GDALUtils.cpp
index 59c6637..0a25d4c 100644
--- a/src/GDALUtils.cpp
+++ b/src/GDALUtils.cpp
@@ -38,6 +38,7 @@
 
 #include <functional>
 #include <map>
+#include <mutex>
 
 #ifdef PDAL_COMPILER_MSVC
 #  pragma warning(disable: 4127)  // conditional expression is constant
@@ -48,34 +49,116 @@ namespace pdal
 namespace gdal
 {
 
-ErrorHandler::ErrorHandler(bool isDebug, pdal::LogPtr log)
-    : m_isDebug(isDebug)
-    , m_log(log)
+ErrorHandler ErrorHandler::m_instance;
+
+void registerDrivers()
 {
-    if (m_isDebug)
+    static std::once_flag flag;
+
+    auto init = []() -> void
     {
-        const char* gdal_debug = ::pdal::Utils::getenv("CPL_DEBUG");
-        if (gdal_debug == 0)
-        {
-            pdal::Utils::putenv("CPL_DEBUG=ON");
-        }
-        m_gdal_callback = std::bind(&ErrorHandler::log, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
-    }
-    else
+        GDALAllRegister();
+        OGRRegisterAll();
+    };
+
+    std::call_once(flag, init);
+}
+
+
+void unregisterDrivers()
+{
+    GDALDestroyDriverManager();
+}
+
+
+ErrorHandler& ErrorHandler::get()
+{
+    return m_instance;
+}
+
+
+ErrorHandler::ErrorHandler() : m_throw(true), m_errorNum(0)
+{
+    std::string value;
+
+    auto cb = [](::CPLErr level, int num, const char *msg)
+    {
+        ErrorHandler::get().handle(level, num, msg);
+    };
+    m_cplSet = (Utils::getenv("CPL_DEBUG", value) == 0);
+    m_debug = m_cplSet;
+    CPLSetErrorHandler(cb);
+}
+
+
+void ErrorHandler::set(LogPtr log, bool debug, bool doThrow)
+{
+    setLog(log);
+    setDebug(debug);
+    setThrow(doThrow);
+}
+
+
+void ErrorHandler::set(LogPtr log, bool debug)
+{
+    setLog(log);
+    setDebug(debug);
+}
+
+
+void ErrorHandler::setLog(LogPtr log)
+{
+    m_log = log;
+}
+
+
+void ErrorHandler::setDebug(bool debug)
+{
+    m_debug = debug;
+    if (!m_cplSet)
     {
-        m_gdal_callback = std::bind(&ErrorHandler::error, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
+        if (debug)
+            Utils::setenv("CPL_DEBUG", "ON");
+        else
+            Utils::unsetenv("CPL_DEBUG");
     }
+}
 
-    CPLPushErrorHandlerEx(&ErrorHandler::trampoline, this);
+
+void ErrorHandler::setThrow(bool doThrow)
+{
+    m_throw = doThrow;
 }
 
-void ErrorHandler::log(::CPLErr code, int num, char const* msg)
+
+bool ErrorHandler::willThrow() const
+{
+    return m_throw;
+}
+
+
+int ErrorHandler::errorNum()
+{
+    int errorNum = m_errorNum;
+    m_errorNum = 0;
+    return errorNum;
+}
+
+
+void ErrorHandler::handle(::CPLErr level, int num, char const* msg)
 {
     std::ostringstream oss;
 
-    if (code == CE_Failure || code == CE_Fatal)
-        error(code, num, msg);
-    else if (code == CE_Debug)
+    m_errorNum = num;
+    if (level == CE_Failure || level == CE_Fatal)
+    {
+        oss << "GDAL failure (" << num << ") " << msg;
+        if (m_throw)
+            throw pdal_error(oss.str());
+        else if (m_log)
+            m_log->get(LogLevel::Error) << oss.str() << std::endl;
+    }
+    else if (m_debug && level == CE_Debug)
     {
         oss << "GDAL debug: " << msg;
         if (m_log)
@@ -84,68 +167,214 @@ void ErrorHandler::log(::CPLErr code, int num, char const* msg)
 }
 
 
-void ErrorHandler::error(::CPLErr code, int num, char const* msg)
+struct InvalidBand {};
+struct CantReadBlock {};
+
+/*
+  Reads a GDAL band into a vector.
+*/
+class BandReader
 {
-    std::ostringstream oss;
-    if (code == CE_Failure || code == CE_Fatal)
-    {
-        oss << "GDAL Failure number = " << num << ": " << msg;
-        throw pdal_error(oss.str());
-    }
+public:
+    /*
+      Constructor that populates various band information.
+
+      \param ds  GDAL dataset handle.
+      \param bandNum  Band number.  Band numbers start at 1.
+    */
+    BandReader(GDALDatasetH ds, int bandNum);
+
+    /*
+      Read the band into the vector.  Reads a block at a time.  Each
+      block is either fully populated with data or a partial block.
+      Partial blocks appear at the X and Y margins when the total size in
+      the doesn't divide evenly by the block size for both the X and Y
+      dimensions.
+
+      \ptData Vector into which the data should be read.  The vector is
+        resized as necessary.
+    */
+    void read(std::vector<uint8_t>& ptData);
+private:
+    GDALDatasetH m_ds;  /// Dataset handle
+    int m_bandNum;  /// Band number.  Band numbers start at 1.
+    GDALRasterBandH m_band;  /// Band handle
+    int m_xTotalSize, m_yTotalSize;  /// Total size (x and y) of the raster
+    int m_xBlockSize, m_yBlockSize;  /// Size (x and y) of blocks
+    int m_xBlockCnt, m_yBlockCnt;    /// Number of blocks in each direction
+    size_t m_eltSize;                /// Size in bytes of each band element.
+    std::vector<uint8_t> m_buf;      /// Block read buffer.
+
+    /*
+      Read a block's worth of data.
+
+      \param x  X coordinate of block to read.
+      \param y  Y coordinate of block to read.
+      \param data  Pointer to vector in which to store data.  Vector must
+        be sufficiently sized to hold all data.
+    */
+    void readBlock(int x, int y, uint8_t *data);
+};
+
+
+/*
+  Create a band reader for a single bad of a GDAL dataset.
+
+  \param ds  GDAL dataset handle.
+  \param bandNum  Band number (1-indexed).
+*/
+BandReader::BandReader(GDALDatasetH ds, int bandNum) : m_ds(ds),
+    m_bandNum(bandNum), m_xBlockSize(0), m_yBlockSize(0)
+{
+    m_band = GDALGetRasterBand(m_ds, m_bandNum);
+    if (!m_band)
+        throw InvalidBand();
+
+    // Perhaps raster bands can have different sizes than the raster itself?
+    m_xTotalSize = GDALGetRasterBandXSize(m_band);
+    m_yTotalSize = GDALGetRasterBandYSize(m_band);
+
+    GDALGetBlockSize(m_band, &m_xBlockSize, &m_yBlockSize);
+
+    m_xBlockCnt = ((m_xTotalSize - 1) / m_xBlockSize) + 1;
+    m_yBlockCnt = ((m_yTotalSize - 1) / m_yBlockSize) + 1;
 }
 
 
-ErrorHandler::~ErrorHandler()
+/*
+  Read a raster band into an array.
+
+  \param ptData  Vector to contain raster (Y major - X varies fastest).
+    ptData is resized to fit data in the band.
+*/
+void BandReader::read(std::vector<uint8_t>& ptData)
 {
-    CPLPopErrorHandler();
+    GDALDataType t = GDALGetRasterDataType(m_band);
+    m_eltSize = GDALGetDataTypeSize(t) / CHAR_BIT;
+    m_buf.resize(m_xBlockSize * m_yBlockSize * m_eltSize);
+    ptData.resize(m_xTotalSize * m_yTotalSize * m_eltSize);
+
+    uint8_t *data = ptData.data();
+    for (int y = 0; y < m_yBlockCnt; ++y)
+        for (int x = 0; x < m_xBlockCnt; ++x)
+            readBlock(x, y, data);
+}
+
+
+/*
+  Read a block's worth of data.
+
+  Read data into a block-sized buffer.  Then copy data from the block buffer
+  into the destination array at the proper location to build a complete
+  raster.
+
+  \param x  X coordinate of the block to read.
+  \param y  Y coordinate of the block to read.
+  \param data  Pointer to the data vector that contains the raster information.
+*/
+void BandReader::readBlock(int x, int y, uint8_t *data)
+{
+    if (GDALReadBlock(m_band, x, y, m_buf.data()) != CPLE_None)
+        throw CantReadBlock();
+
+    int xWidth = 0;
+    if (x == m_xBlockCnt - 1)
+        xWidth = m_xTotalSize % m_xBlockSize;
+    if (xWidth == 0)
+        xWidth = m_xBlockSize;
+
+    int yHeight = 0;
+    if (y == m_yBlockCnt - 1)
+        yHeight = m_yTotalSize % m_yBlockSize;
+    if (yHeight == 0)
+        yHeight = m_yBlockSize;
+
+    uint8_t *bp = m_buf.data();
+    // Go through rows copying data.  Increment the buffer pointer by the
+    // width of the row.
+    for (int row = 0; row < yHeight; ++row)
+    {
+        int wholeRows = m_xTotalSize * ((y * m_yBlockSize) + row);
+        int partialRows = m_xBlockSize * x;
+        uint8_t *dp = data + ((wholeRows + partialRows) * m_eltSize);
+        std::copy(bp, bp + (xWidth * m_eltSize), dp);
+
+        // Blocks are always full-sized, even if only some of the data is valid,
+        // so we use m_xBlockSize instead of xWidth.
+        bp += (m_xBlockSize * m_eltSize);
+    }
 }
 
+
 Raster::Raster(const std::string& filename)
     : m_filename(filename)
     , m_raster_x_size(0)
     , m_raster_y_size(0)
-    , m_block_x(0)
-    , m_block_y(0)
-    , m_size(0)
     , m_band_count(0)
     , m_ds(0)
-
 {
-    m_forward_transform.fill(0.0);
-    m_inverse_transform.fill(0.0);
+    m_forward_transform.fill(0);
+    m_forward_transform[1] = 1;
+    m_forward_transform[5] = 1;
+    m_inverse_transform.fill(0);
+    m_inverse_transform[1] = 1;
+    m_inverse_transform[5] = 1;
 }
 
-bool Raster::open()
+
+GDALError::Enum Raster::open()
 {
+    GDALError::Enum error = GDALError::None;
     if (m_ds)
-        return true; // already open
+        return error;
 
     m_ds = GDALOpen(m_filename.c_str(), GA_ReadOnly);
     if (m_ds == NULL)
-        throw pdal_error("Unable to open GDAL datasource!");
+    {
+        m_errorMsg = "Unable to open GDAL datasource '" + m_filename + "'.";
+        return GDALError::CantOpen;
+    }
 
+    // GDAL docs state that we should return an identity transform, even
+    // on error, which should let things work.
     if (GDALGetGeoTransform(m_ds, &(m_forward_transform.front())) != CE_None)
-        throw pdal_error("unable to fetch forward geotransform for raster!");
+    {
+        m_errorMsg = "Unable to get geotransform for raster '" +
+            m_filename + "'.";
+        error = GDALError::NoTransform;
+    }
 
     if (!GDALInvGeoTransform(&(m_forward_transform.front()),
         &(m_inverse_transform.front())))
-        throw pdal_error("unable to fetch inverse geotransform for raster!");
+    {
+        m_errorMsg = "Geotransform for raster '" + m_filename + "' not "
+            "intertible";
+        error = GDALError::NotInvertible;
+    }
 
     m_raster_x_size = GDALGetRasterXSize(m_ds);
     m_raster_y_size = GDALGetRasterYSize(m_ds);
     m_band_count = GDALGetRasterCount(m_ds);
 
-    m_types = computePDALDimensionTypes();
-    m_size = 0;
-    for(auto t: m_types)
+    for (int i = 0; i < m_band_count; ++i)
     {
-        m_size += pdal::Dimension::size(t);
+        int fail = 0;
+        GDALRasterBandH band = GDALGetRasterBand(m_ds, i + 1);
+        double v = GDALGetRasterNoDataValue(band, &fail);
     }
-    return true;
+    if (computePDALDimensionTypes() == GDALError::InvalidBand)
+        error = GDALError::InvalidBand;
+    return error;
 }
 
+
 void Raster::pixelToCoord(int col, int row, std::array<double, 2>& output) const
 {
+    /**
+    double *xform = const_cast<double *>(m_forward_transform.data());
+    GDALApplyGeoTransform(xform, col, row, &output[0], &output[1]);
+    **/
+
     // from http://gis.stackexchange.com/questions/53617/how-to-find-lat-lon-values-for-every-pixel-in-a-geotiff-file
     double c = m_forward_transform[0];
     double a = m_forward_transform[1];
@@ -154,40 +383,39 @@ void Raster::pixelToCoord(int col, int row, std::array<double, 2>& output) const
     double d = m_forward_transform[4];
     double e = m_forward_transform[5];
 
+    //ABELL - Not sure why this is right.  You can think of this like:
+    //   output[0] = a * (col + .5) + b * (row + .5) + c;
+    //   output[1] = d * (col + .5) + e * (row + .5) + f;
+    //   Is there some reason why you want to "move" the points in the raster
+    //   to a location between the rows/columns?  Seems that you would just
+    //   use 'c' and 'f' to shift everything a half-row and half-column if
+    //   that's what you wanted.
+    //   Also, this isn't what GDALApplyGeoTransform does.  And why aren't
+    //   we just calling GDALApplyGeoTransform?
     output[0] = a*col + b*row + a*0.5 + b*0.5 + c;
     output[1] = d*col + e*row + d*0.5 + e*0.5 + f;
 }
 
+
 // Determines the pixel/line position given an x/y.
 // No reprojection is done at this time.
 bool Raster::getPixelAndLinePosition(double x, double y,
-                                     std::array<double, 6> const& inverse,
-                                    int32_t& pixel, int32_t& line)
+    int32_t& pixel, int32_t& line)
 {
-    pixel = (int32_t)std::floor(inverse[0] + (inverse[1] * x) +
-        (inverse[2] * y));
-    line = (int32_t) std::floor(inverse[3] + (inverse[4] * x) +
-        (inverse[5] * y));
-
-    int xs = m_raster_x_size;
-    int ys = m_raster_y_size;
-
-    if (!xs || !ys)
-        throw pdal_error("Unable to get X or Y size from raster!");
-
-    if (pixel < 0 || line < 0 || pixel >= xs || line  >= ys)
-    {
-        // The x, y is not coincident with this raster
-        return false;
-    }
-
-    return true;
+    pixel = (int32_t)std::floor(m_inverse_transform[0] +
+        (m_inverse_transform[1] * x) + (m_inverse_transform[2] * y));
+    line = (int32_t) std::floor(m_inverse_transform[3] +
+        (m_inverse_transform[4] * x) + (m_inverse_transform[5] * y));
+
+    // Return false if we're out of bounds.
+    return (pixel >= 0 && pixel < m_raster_x_size &&
+        line >= 0 && line < m_raster_y_size);
 }
 
-pdal::Dimension::Type::Enum convertGDALtoPDAL(GDALDataType t)
-{
 
-    using namespace pdal::Dimension::Type;
+Dimension::Type::Enum convertGDALtoPDAL(GDALDataType t)
+{
+    using namespace Dimension::Type;
     switch (t)
     {
         case GDT_Byte:
@@ -200,127 +428,81 @@ pdal::Dimension::Type::Enum convertGDALtoPDAL(GDALDataType t)
             return Unsigned32;
         case GDT_Int32:
             return Signed32;
-        case GDT_CFloat32:
+        case GDT_Float32:
             return Float;
-        case GDT_CFloat64:
+        case GDT_Float64:
             return Double;
-        default:
-            return None;
+        case GDT_CInt16:
+        case GDT_CInt32:
+        case GDT_CFloat32:
+        case GDT_CFloat64:
+            throw pdal_error("GDAL complex float type unsupported.");
+        case GDT_Unknown:
+            throw pdal_error("GDAL unknown type unsupported.");
+        case GDT_TypeCount:
+            throw pdal_error("Detected bad GDAL data type.");
     }
-
     return None;
 }
 
-bool Raster::readBand(std::vector<uint8_t>& data, int nBand)
-{
-    data.resize(m_raster_x_size * m_raster_y_size);
 
-    GDALRasterBandH band = GDALGetRasterBand(m_ds, nBand);
-    if (!band)
+GDALError::Enum Raster::readBand(std::vector<uint8_t>& points, int nBand)
+{
+    try 
     {
-        std::ostringstream oss;
-        oss << "Unable to get band " << nBand <<
-            " from data source!";
-        throw pdal_error(oss.str());
+        BandReader(m_ds, nBand).read(points);
     }
-
-    int nXBlockSize(0);
-    int nYBlockSize(0);
-
-    GDALGetBlockSize(band, &nXBlockSize, &nYBlockSize);
-
-    int nXBlocks = (GDALGetRasterBandXSize(band) + nXBlockSize - 1) / nXBlockSize;
-    int nYBlocks = (GDALGetRasterBandYSize(band) + nYBlockSize - 1) / nYBlockSize;
-
-    for (int iYBlock = 0; iYBlock < nYBlocks; iYBlock++)
+    catch (InvalidBand)
     {
-        int nXValid(0); int nYValid(0);
-        for (int iXBlock = 0; iXBlock < nXBlocks; iXBlock++)
-        {
-
-             if ((iXBlock+1) * nXBlockSize > GDALGetRasterBandXSize(band))
-                 nXValid = GDALGetRasterBandXSize(band) - iXBlock * nXBlockSize;
-             else
-                 nXValid = nXBlockSize;
-             if ((iYBlock+1) * nYBlockSize > GDALGetRasterBandYSize(band))
-                 nYValid = GDALGetRasterBandYSize(band) - iYBlock * nYBlockSize;
-             else
-                 nYValid = nYBlockSize;
-
-            int offset = iXBlock * (nXValid * nYValid) + iYBlock * (nXValid * nYValid);
-
-            CPLErr err = GDALReadBlock(band, iXBlock, iYBlock, data.data() + offset);
-            if (err != CPLE_None)
-            {
-                std::ostringstream oss;
-                oss << "unable to read block for ("<<iXBlock <<","<< iYBlock <<")";
-                throw pdal::pdal_error(oss.str());
-            }
-
-        }
-
+        std::stringstream oss;
+        oss << "Unable to get band " << nBand << " from raster '" <<
+            m_filename << "'.";
+        m_errorMsg = oss.str();
+        return GDALError::InvalidBand;
     }
-    return true;
-}
-
-std::vector<std::array<int, 2>> Raster::fetchGDALBlockSizes() const
-{
-    std::vector<std::array<int, 2>> output;
-    for (int i=1; i < m_band_count; ++i)
+    catch (CantReadBlock)
     {
-        GDALRasterBandH band = GDALGetRasterBand(m_ds, i);
-        if (!band)
-        {
-            std::ostringstream oss;
-            oss << "Unable to get band " << i <<
-                " from data source!";
-            throw pdal_error(oss.str());
-        }
-        int x(0), y(0);
-        GDALGetBlockSize(band, &x, &y);
-        std::array<int, 2> a;
-        a[0] = x;
-        a[1] = y;
-        output.push_back(a);
+        std::ostringstream oss;
+        oss << "Unable to read block for for raster '" << m_filename << "'.";
+        m_errorMsg = oss.str();
+        return GDALError::CantReadBlock;
     }
-
-
-    return output;
+    return GDALError::None;
 }
 
-std::vector<pdal::Dimension::Type::Enum> Raster::computePDALDimensionTypes() const
-{
 
-    if (!m_ds) throw pdal::pdal_error("raster is not open!");
+GDALError::Enum Raster::computePDALDimensionTypes()
+{
+    if (!m_ds)
+        return GDALError::NotOpen;
 
-    std::vector<pdal::Dimension::Type::Enum> output;
+    m_types.clear();
     for (int i=0; i < m_band_count; ++i)
     {
         GDALRasterBandH band = GDALGetRasterBand(m_ds, i+1);
         if (!band)
         {
             std::ostringstream oss;
-            oss << "Unable to get band " << i+1 <<
-                " from data source!";
-            throw pdal_error(oss.str());
+
+            oss << "Unable to get band " << (i + 1) <<
+                " from raster data source '" << m_filename << "'.";
+            m_errorMsg = oss.str();
+            return GDALError::InvalidBand;
         }
 
         GDALDataType t = GDALGetRasterDataType(band);
         int x(0), y(0);
         GDALGetBlockSize(band, &x, &y);
-        pdal::Dimension::Type::Enum ptype = convertGDALtoPDAL(t);
-
-        output.push_back(ptype);
+        m_types.push_back(convertGDALtoPDAL(t));
     }
-    return output;
+    return GDALError::None;
 }
 
 
-bool Raster::read(double x, double y, std::vector<double>& data)
+GDALError::Enum Raster::read(double x, double y, std::vector<double>& data)
 {
-
     if (!m_ds)
-        throw pdal::pdal_error("Unable to read() because raster data source is not open");
+        return GDALError::NotOpen;
 
     int32_t pixel(0);
     int32_t line(0);
@@ -330,8 +512,8 @@ bool Raster::read(double x, double y, std::vector<double>& data)
 
     // No data at this x,y if we can't compute a pixel/line location
     // for it.
-    if (!getPixelAndLinePosition(x, y, m_inverse_transform, pixel, line))
-        return false;
+    if (!getPixelAndLinePosition(x, y, pixel, line))
+        return GDALError::NoData;
 
     for (int i=0; i < m_band_count; ++i)
     {
@@ -342,29 +524,28 @@ bool Raster::read(double x, double y, std::vector<double>& data)
             // we read a pixel put its values in our vector
             data[i] = pix[0];
         }
-
     }
 
-    return true;
+    return GDALError::None;
 }
 
+
 SpatialReference Raster::getSpatialRef() const
 {
-    if (!m_ds)
-        throw pdal::pdal_error("Unable to getSpatialRef() because raster data source is not open");
-
-    const char* wkt = GDALGetProjectionRef(m_ds);
-
-    SpatialReference r(wkt);
-    return r;
+    SpatialReference srs;
 
+    if (m_ds)
+        srs = SpatialReference(GDALGetProjectionRef(m_ds));
+    return srs;
 }
 
+
 Raster::~Raster()
 {
     close();
 }
 
+
 void Raster::close()
 {
     if (m_ds != 0)
@@ -372,12 +553,12 @@ void Raster::close()
         GDALClose(m_ds);
         m_ds = 0;
     }
-    m_size = 0;
     m_types.clear();
 }
 
 } // namespace gdal
 
+
 std::string transformWkt(std::string wkt, const SpatialReference& from,
     const SpatialReference& to)
 {
diff --git a/src/GEOSUtils.cpp b/src/GEOSUtils.cpp
new file mode 100644
index 0000000..9162bd6
--- /dev/null
+++ b/src/GEOSUtils.cpp
@@ -0,0 +1,163 @@
+/******************************************************************************
+* Copyright (c) 2015, Howard Butler (howard at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/GEOSUtils.hpp>
+#include <pdal/Log.hpp>
+
+#include <cstdarg>
+#include <functional>
+#include <map>
+#include <sstream>
+
+#ifdef PDAL_COMPILER_MSVC
+#  pragma warning(disable: 4127)  // conditional expression is constant
+#endif
+
+namespace pdal
+{
+namespace geos
+{
+
+std::unique_ptr<ErrorHandler> ErrorHandler::m_instance;
+
+// Allocating here instead of just making a static because I'm not really
+// sure what GEOS_init_r does and when it can be called.  It doesn't hurt
+// anything.
+ErrorHandler& ErrorHandler::get()
+{
+    if (!m_instance)
+        m_instance.reset(new ErrorHandler);
+    return *m_instance;
+}
+
+
+void ErrorHandler::vaErrorCb(const char *msg, ...)
+{
+    va_list args;
+    va_start(args, msg);
+    char buf[1024];
+    vsnprintf(buf, sizeof(buf), msg, args);
+    ErrorHandler::get().handle(buf, false);
+    va_end(args);
+}
+
+
+void ErrorHandler::vaNoticeCb(const char *msg, ...)
+{
+    va_list args;
+    va_start(args, msg);
+    char buf[1024];
+    vsnprintf(buf, sizeof(buf), msg, args);
+    ErrorHandler::get().handle(buf, true);
+    va_end(args);
+}
+
+
+ErrorHandler::ErrorHandler() : m_debug(false)
+{
+#ifdef GEOS_init_r
+    m_ctx = GEOS_init_r();
+
+    auto errorCb [](const char *msg, void *userData)
+    {
+        get()->handle(msg, false);
+    };
+    GEOSContext_setErrorMessageHandler_r(m_ctx, errorCb, NULL);
+
+    auto noticeCb [](const char *msg, void *userData)
+    {
+        get()->handle(msg, true);
+    };
+    GEOSContext_setNoticeMessageHandler_r(m_ctx, noticeCb, NULL);
+#else
+    m_ctx = initGEOS_r(NULL, NULL);
+    GEOSContext_setErrorHandler_r(m_ctx, vaErrorCb);
+    GEOSContext_setNoticeHandler_r(m_ctx, vaNoticeCb);
+#endif
+}
+
+
+ErrorHandler::~ErrorHandler()
+{
+#ifdef GEOS_finish_r
+    GEOS_finish_r(m_ctx);
+#else
+    finishGEOS_r(m_ctx);
+#endif
+}
+
+
+void ErrorHandler::set(LogPtr log, bool debug)
+{
+    setLog(log);
+    setDebug(debug);
+}
+
+
+void ErrorHandler::setDebug(bool debug)
+{
+    m_debug = debug;
+}
+
+
+void ErrorHandler::setLog(LogPtr log)
+{
+    m_log = log;
+}
+
+
+void ErrorHandler::handle(const char *msg, bool notice)
+{
+    std::ostringstream oss;
+    if (!notice)
+    {
+        oss << "GEOS failure: '" << msg << "'";
+        throw pdal_error(oss.str());
+    }
+    else if (m_debug)
+    {
+        oss << "GEOS debug: " << msg;
+        if (m_log)
+            m_log->get(LogLevel::Debug) << oss.str() << std::endl;
+    }
+}
+
+GEOSContextHandle_t ErrorHandler::ctx() const
+{
+    return m_ctx;
+}
+
+} // namespace geos
+} // namespace pdal
+
diff --git a/src/GlobalEnvironment.cpp b/src/GlobalEnvironment.cpp
deleted file mode 100644
index 9e51eb2..0000000
--- a/src/GlobalEnvironment.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/******************************************************************************
-* Copyright (c) 2012, Michael P. Gerlek (mpg at flaxen.com)
-*
-* 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 in
-*       the documentation and/or other materials provided
-*       with the distribution.
-*     * Neither the name of Hobu, Inc. or Flaxen Consulting LLC nor the
-*       names of its contributors may be used to endorse or promote
-*       products derived from this software without specific prior
-*       written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-* OF SUCH DAMAGE.
-****************************************************************************/
-
-#include <mutex>
-
-//#include <boost/date_time/posix_time/posix_time_types.hpp>
-
-#include <pdal/GlobalEnvironment.hpp>
-#include <pdal/GDALUtils.hpp>
-
-namespace pdal
-{
-
-static GlobalEnvironment* s_environment = 0;
-
-GlobalEnvironment& GlobalEnvironment::get()
-{
-    static std::once_flag flag;
-
-    auto init = []()
-    {
-        s_environment = new GlobalEnvironment();
-    };
-
-    std::call_once(flag, init);
-    return *s_environment;
-}
-
-
-void GlobalEnvironment::startup()
-{
-    if (s_environment)
-        throw pdal_error("attempt to reinitialize global environment");
-    get();
-}
-
-
-void GlobalEnvironment::shutdown()
-{
-    if (!s_environment)
-        throw pdal_error("bad global shutdown call -- was called more "
-            "than once or was called without corresponding startup");
-    delete s_environment;
-    s_environment = 0;
-}
-
-
-GlobalEnvironment::GlobalEnvironment() : m_gdalDebug()
-{}
-
-
-GlobalEnvironment::~GlobalEnvironment()
-{
-    if (m_gdalDebug)
-        GDALDestroyDriverManager();
-}
-
-
-void GlobalEnvironment::initializeGDAL(LogPtr log, bool gdalDebugOutput)
-{
-    static std::once_flag flag;
-
-    auto init = [this](LogPtr log, bool gdalDebugOutput) -> void
-    {
-        GDALAllRegister();
-        OGRRegisterAll();
-        m_gdalDebug.reset(new gdal::ErrorHandler(gdalDebugOutput, log));
-    };
-
-    std::call_once(flag, init, log, gdalDebugOutput);
-}
-
-
-} //namespaces
-
diff --git a/src/Kernel.cpp b/src/Kernel.cpp
index 724d755..e3681db 100644
--- a/src/Kernel.cpp
+++ b/src/Kernel.cpp
@@ -32,40 +32,98 @@
 * OF SUCH DAMAGE.
 ****************************************************************************/
 
-#include <pdal/GlobalEnvironment.hpp>
-#include <pdal/Kernel.hpp>
-#include <pdal/PDALUtils.hpp>
-
 #include <cctype>
 #include <iostream>
 
-#include <boost/algorithm/string.hpp>
-
-#include <pdal/pdal_config.hpp>
+#include <pdal/GDALUtils.hpp>
+#include <pdal/Kernel.hpp>
 #include <pdal/Options.hpp>
+#include <pdal/PDALUtils.hpp>
+#include <pdal/pdal_config.hpp>
 #include <pdal/StageFactory.hpp>
+#include <pdal/util/ProgramArgs.hpp>
 
 #include <pdal/pdal_config.hpp>
 
-#include <pdal/BufferReader.hpp>
+#include <buffer/BufferReader.hpp>
 
 #include <memory>
 #include <vector>
 
-#include <boost/tokenizer.hpp>
-typedef boost::tokenizer<boost::char_separator<char>> tokenizer;
+namespace pdal
+{
 
-namespace po = boost::program_options;
+namespace
+{
 
-namespace pdal
+bool parseOption(std::string o, std::string& stage, std::string& option,
+    std::string& value)
 {
+    if (o.size() < 2)
+        return false;
+    if (o[0] != '-' || o[1] != '-')
+        return false;
+
+    o = o.substr(2);
+
+    // Options are stage_type.stage_name.option_name
+    // stage_type is always lowercase stage_names start with lowercase and
+    // then are lowercase or digits.  Option names start with lowercase and
+    // then contain lowercase, digits or underscore.
+
+    // This awfulness is to work around the multiply-defined islower.  Seems
+    // a bit better than the cast solution.
+    auto islc = [](char c)
+        { return std::islower(c); };
+    auto islcOrDigit = [](char c)
+        { return std::islower(c) || std::isdigit(c); };
+
+    std::string::size_type pos = 0;
+    std::string::size_type count = 0;
+
+    // Get stage_type.
+    count = Utils::extract(o, pos, islc);
+    pos += count;
+
+    std::string stage_type = o.substr(0, pos);
+    if (stage_type != "readers" && stage_type != "writers" &&
+        stage_type != "filters")
+        return false;
+    if (o[pos++] != '.')
+        return false;
+
+    // Get stage_name.
+    count = Utils::extract(o, pos, islcOrDigit);
+    if (std::isdigit(o[pos]))
+        return false;
+    pos += count;
+    stage = o.substr(0, pos);
+    if (o[pos++] != '.')
+        return false;
+
+    // Get option name.
+    std::string::size_type optionStart = pos;
+    count = Option::parse(o, pos);
+    pos += count;
+    option = o.substr(optionStart, count);
+
+    if (o[pos++] != '=')
+        return false;
+
+    // The command-line parser takes care of quotes around an argument
+    // value and such.  May want to do something to handle escaped characters?
+    value = o.substr(pos);
+    return true;
+}
+
+} // unnamed namespace
+
 
 Kernel::Kernel()
     : m_usestdin(false)
     , m_log("pdal", "stderr")
     , m_isDebug(false)
     , m_verboseLevel(0)
-    , m_showHelp(false)
     , m_showVersion(false)
     , m_showTime(false)
     , m_hardCoreDebug(false)
@@ -74,18 +132,6 @@ Kernel::Kernel()
 {}
 
 
-Kernel::~Kernel()
-{
-    for (auto & iter : m_public_options)
-    {
-        delete iter;
-    }
-    for (auto & iter : m_hidden_options)
-    {
-        delete iter;
-    }
-}
-
 std::ostream& operator<<(std::ostream& ostr, const Kernel& kernel)
 {
     ostr << "  Name: " << kernel.getName() << std::endl;
@@ -93,67 +139,57 @@ std::ostream& operator<<(std::ostream& ostr, const Kernel& kernel)
 }
 
 
-int Kernel::do_switches()
+void Kernel::doSwitches(int argc, const char *argv[], ProgramArgs& args)
 {
-    try
+    StringList stringArgs;
+
+    // Scan the argument vector for extra stage options.  Pull them out and
+    // stick them in the list.  Let the ProgramArgs handle everything else.
+    // NOTE: This depends on the format being "option=value" rather than
+    //   "option value".  This is what we've always expected, so no problem,
+    //   but it would be better to be more flexible.
+    for (int i = 0; i < argc; ++i)
     {
-        // add -h, -v, etc
-        addBasicSwitchSet();
-
-        // add the options for the derived application
-        addSwitches();
+        std::string stageName, opName, value;
 
-        // parse the command line
-        parseSwitches();
+        if (parseOption(argv[i], stageName, opName, value))
+        {
+            Option op(opName, value);
+            m_extraStageOptions[stageName].add(op);
+        }
+        else
+            stringArgs.push_back(argv[i]);
     }
-    catch (std::exception const& e)
+
+    try
     {
-        Utils::printError(e.what());
-        return 1;
+        addBasicSwitches(args);
+
+        // parseSimple allows us to scan for the help option without
+        // raising exception about missing arguments and so on.
+        args.parseSimple(stringArgs);
+        addSwitches(args);
+        if (!m_showHelp)
+            args.parse(stringArgs);
     }
-    catch (...)
+    catch (arg_error& e)
     {
-        Utils::printError("Caught unknown exception handling switches");
-        return 1;
+        throw pdal_error(e.m_error);
     }
-    return 0;
 }
 
 
-int Kernel::do_startup()
+int Kernel::doStartup()
 {
-    try
-    {
-        pdal::GlobalEnvironment::startup();
-    }
-    catch (std::exception const& e)
-    {
-        const std::string s("Caught exception in initialization: ");
-        Utils::printError(s + e.what());
-        return 1;
-    }
-    catch (...)
-    {
-        Utils::printError("Caught unknown exception in initialization");
-        return 1;
-    }
-
     return 0;
 }
 
 
-int Kernel::do_execution()
+int Kernel::doExecution(ProgramArgs& args)
 {
-
-    if (m_reportDebug)
-    {
-        std::cout << getPDALDebugInformation() << std::endl;
-        return 0;
-    }
-
     if (m_hardCoreDebug)
     {
-        int status = innerRun();
+        int status = innerRun(args);
         return status;
     }
 
@@ -161,7 +197,7 @@ int Kernel::do_execution()
 
     try
     {
-        status = innerRun();
+        status = innerRun(args);
     }
     catch (pdal::pdal_error const& e)
     {
@@ -183,49 +219,46 @@ int Kernel::do_execution()
 }
 
 
-int Kernel::do_shutdown()
+int Kernel::doShutdown()
 {
-    try
-    {
-        pdal::GlobalEnvironment::shutdown();
-    }
-    catch (std::exception const& e)
-    {
-        const std::string s("Caught exception during shutdown: ");
-        Utils::printError(s + e.what());
-        return 1;
-    }
-    catch (...)
-    {
-        Utils::printError("Caught unknown exception during shutdown.");
-        return 1;
-    }
-
+    gdal::unregisterDrivers();
     return 0;
 }
 
 
 // this just wraps ALL the code in total catch block
-int Kernel::run(int argc, const char* argv[], const std::string& appName)
+int Kernel::run(int argc, char const * argv[], const std::string& appName)
 {
-    m_argc = argc;
-    m_argv = argv;
     m_appName = appName;
 
-    int switches_status = do_switches();
-    if (switches_status)
-        return switches_status;
+    ProgramArgs args;
 
-    int startup_status = do_startup();
+    try
+    {
+        doSwitches(argc, argv, args);
+    }
+    catch (const pdal_error& e)
+    {
+        Utils::printError(e.what());
+        return 1;
+    }
+
+    if (m_showHelp)
+    {
+        outputHelp(args);
+        return 0;
+    }
+
+    int startup_status = doStartup();
     if (startup_status)
         return startup_status;
 
-    int execution_status = do_execution();
+    int execution_status = doExecution(args);
 
     // note we will try to shutdown cleanly even if we got an error condition
     // in the execution phase
 
-    int shutdown_status = do_shutdown();
+    int shutdown_status = doShutdown();
 
     if (execution_status)
         return execution_status;
@@ -234,61 +267,6 @@ int Kernel::run(int argc, const char* argv[], const std::string& appName)
 }
 
 
-namespace
-{
-
-bool parseOption(std::string o, std::string& stage, std::string& option,
-    std::string& value)
-{
-    if (o.size() < 2)
-        return false;
-    if (o[0] != '-' || o[1] != '-')
-        return false;
-
-    o = o.substr(2);
-
-    // Options are stage_type.stage_name.option_name
-    // stage_type and stage_name are always lowercase.  Option name starts
-    // with lowercase and then contains lowercase, numbers or underscore.
-
-    // This awfulness is to work around the multiply-defined islower.  Seems
-    // a bit better than the cast solution.
-    auto islc = [](char c)
-        { return std::islower(c); };
-
-    std::string::size_type pos = 0;
-    std::string::size_type count = 0;
-    // Get stage_type.
-    count = Utils::extract(o, pos, islc);
-    pos += count;
-    if (o[pos++] != '.')
-        return false;
-
-    // Get stage_name.
-    count = Utils::extract(o, pos, islc);
-    pos += count;
-    stage = o.substr(0, pos);
-    if (o[pos++] != '.')
-        return false;
-
-    // Get option name.
-    std::string::size_type optionStart = pos;
-    count = Option::parse(o, pos);
-    pos += count;
-    option = o.substr(optionStart, count);
-
-    if (o[pos++] != '=')
-        return false;
-
-    // The command-line parser takes care of quotes around an argument
-    // value and such.  May want to do something to handle escaped characters?
-    value = o.substr(pos);
-    return true;
-}
-
-} // unnamed namespace
-
-
 void Kernel::collectExtraOptions()
 {
     for (const auto& o : m_extra_options)
@@ -304,48 +282,21 @@ void Kernel::collectExtraOptions()
 }
 
 
-bool Kernel::argumentSpecified(const std::string& name)
+int Kernel::innerRun(ProgramArgs& args)
 {
-    auto ai = m_variablesMap.find(name);
-    if (ai == m_variablesMap.end())
-        return false;
-    return !(ai->second.defaulted());
-}
-
-
-int Kernel::innerRun()
-{
-    // handle the well-known options
-    if (m_showVersion)
-    {
-        outputVersion();
-        return 0;
-    }
-
-    if (m_showHelp)
-    {
-        outputHelp();
-        return 0;
-    }
-
-    if (!m_showOptions.empty())
-    {
-        return 0;
-    }
-
     try
     {
         // do any user-level sanity checking
-        validateSwitches();
-        collectExtraOptions();
+        validateSwitches(args);
     }
-    catch (app_usage_error e)
+    catch (pdal_error e)
     {
-        Utils::printError(std::string("Usage error: ") + e.what());
-        outputHelp();
-        return 1;
+        Utils::printError(e.what());
+        outputHelp(args);
+        return -1;
     }
 
+    collectExtraOptions();
     return execute();
 }
 
@@ -373,8 +324,7 @@ void Kernel::visualize(PointViewPtr view)
     BufferReader bufferReader;
     bufferReader.addView(view);
 
-    StageFactory f;
-    Stage& writer = ownStage(f.createStage("writers.pclvisualizer"));
+    auto& writer = createStage("writers.pclvisualizer");
     writer.setInput(bufferReader);
 
     PointTable table;
@@ -427,20 +377,6 @@ void Kernel::visualize(PointViewPtr input_view, PointViewPtr output_view) const
 */
 
 
-void Kernel::addSwitchSet(po::options_description* options)
-{
-    if (options)
-        m_public_options.push_back(options);
-}
-
-
-void Kernel::addHiddenSwitchSet(po::options_description* options)
-{
-    if (options)
-        m_hidden_options.push_back(options);
-}
-
-
 void Kernel::setCommonOptions(Options &options)
 {
     options.add("visualize", m_visualize);
@@ -456,212 +392,142 @@ void Kernel::setCommonOptions(Options &options)
         options.add("log", "STDERR");
     }
 
-    boost::char_separator<char> sep(",| ");
+    auto pred = [](char c){ return (bool)strchr(",| ", c); };
 
-    if (argumentExists("scale"))
+    if (!m_scales.empty())
     {
         std::vector<double> scales;
-        tokenizer scale_tokens(m_scales, sep);
-        for (auto const& t : scale_tokens)
-            scales.push_back(boost::lexical_cast<double>(t));
-        if (scales.size())
+        StringList scaleTokens = Utils::split2(m_scales, pred);
+        for (std::string s : scaleTokens)
         {
-            if (scales.size() <= 1)
-            {
-                options.add<double >("scale_x", scales[0]);
-            }
-            else if (scales.size() <= 2)
-            {
-                options.add<double >("scale_x", scales[0]);
-                options.add<double >("scale_y", scales[1]);
-            }
-            else if (scales.size() <= 3)
+            double val;
+
+            if (Utils::fromString(s, val))
+                scales.push_back(val);
+            else
             {
-                options.add<double >("scale_x", scales[0]);
-                options.add<double >("scale_y", scales[1]);
-                options.add<double >("scale_z", scales[2]);
+                std::ostringstream oss;
+                oss << getName() << ": Invalid scale value '" << s << "'." <<
+                    std::endl;
+                throw pdal_error(oss.str());
             }
         }
+        if (scales.size() > 0)
+            options.add("scale_x", scales[0]);
+        if (scales.size() > 1)
+            options.add("scale_y", scales[1]);
+        if (scales.size() > 2)
+            options.add("scale_z", scales[2]);
     }
 
-    if (argumentExists("offset"))
+    if (!m_offsets.empty())
     {
-        std::vector<std::string> offsets;
-        tokenizer offset_tokens(m_offsets, sep);
-        for (auto const& t : offset_tokens)
-            offsets.push_back(boost::lexical_cast<std::string>(t));
-        if (offsets.size())
+        std::vector<double> offsets;
+        StringList offsetTokens = Utils::split2(m_offsets, pred);
+        for (std::string o : offsetTokens)
         {
-            if (offsets.size() <= 1)
-            {
-                options.add<std::string>("offset_x", offsets[0]);
-            }
-            else if (offsets.size() <= 2)
-            {
-                options.add<std::string>("offset_x", offsets[0]);
-                options.add<std::string>("offset_y", offsets[1]);
-            }
-            else if (offsets.size() <= 3)
+            double val;
+
+            if (Utils::fromString(o, val))
+                offsets.push_back(val);
+            else
             {
-                options.add<std::string>("offset_x", offsets[0]);
-                options.add<std::string>("offset_y", offsets[1]);
-                options.add<std::string>("offset_z", offsets[2]);
+                std::ostringstream oss;
+                oss << getName() << ": Invalid offset value '" << o << "'." <<
+                    std::endl;
+                throw pdal_error(oss.str());
             }
         }
+        if (offsets.size() > 0)
+            options.add("offset_x", offsets[0]);
+        if (offsets.size() > 1)
+            options.add("offset_y", offsets[1]);
+        if (offsets.size() > 2)
+            options.add("offset_z", offsets[2]);
     }
 }
 
 
-void Kernel::addPositionalSwitch(const char* name, int max_count)
+void Kernel::outputHelp(ProgramArgs& args)
 {
-    m_positionalOptions.add(name, max_count);
-}
+    std::cout << "usage: " << "pdal " << m_appName << " [options] " <<
+        args.commandLine() << std::endl;
 
+    std::cout << "options:" << std::endl;
+    args.dump(std::cout, 2, Utils::screenWidth());
 
-void Kernel::outputHelp()
-{
-    outputVersion();
-
-    for (auto const& iter : m_public_options)
-    {
-        std::cout << *iter;
-        std::cout << std::endl;
-    }
+    //ABELL - Fix me.
 
     std::cout <<"\nFor more information, see the full documentation for "
-        "PDAL at http://pdal.io/\n" << std::endl << std::endl;
-}
-
-
-void Kernel::outputVersion()
-{
-    std::cout << "pdal " << m_appName << " (" <<
-        GetFullVersionString() << ")\n";
-    std::cout << std::endl;
+        "PDAL at http://pdal.io/\n" << std::endl;
 }
 
 
-void Kernel::addBasicSwitchSet()
+void Kernel::addBasicSwitches(ProgramArgs& args)
 {
-    po::options_description* basic_options =
-        new po::options_description("basic options");
-
-    basic_options->add_options()
-    ("help,h",
-        po::value<bool>(&m_showHelp)->zero_tokens()->implicit_value(true),
-        "Print help message")
-    ("options", po::value<std::string>(&m_showOptions)->implicit_value("all"),
-        "Show available options for a driver")
-    ("debug,d",
-        po::value<bool>(&m_isDebug)->zero_tokens()->implicit_value(true),
-        "Enable debug mode")
-    ("report-debug",
-        po::value<bool>(&m_reportDebug)->zero_tokens()->implicit_value(true),
-        "Report PDAL compilation DEBUG status")
-    ("developer-debug",
-        po::value<bool>(&m_hardCoreDebug)->zero_tokens()->implicit_value(true),
-        "Enable developer debug mode (don't trap exceptions so segfaults "
-        "are thrown)")
-    ("label",
-        po::value<std::string>(&m_label)->default_value(""),
-        "A string to label the process with")
-    ("verbose,v", po::value<uint32_t>(&m_verboseLevel)->default_value(0),
-        "Set verbose message level")
-    ("version",
-        po::value<bool>(&m_showVersion)->zero_tokens()->implicit_value(true),
-        "Show version info")
-    ("visualize",
-        po::value<bool>(&m_visualize)->zero_tokens()->implicit_value(true),
-        "Visualize result")
-    ("stdin,s",
-        po::value<bool>(&m_usestdin)->zero_tokens()->implicit_value(true),
-        "Read pipeline XML from stdin")
-    ("heartbeat",
-        po::value< std::vector<std::string> >(&m_heartbeat_shell_command),
-        "Shell command to run for every progress heartbeat")
-    ("scale", po::value< std::string >(&m_scales),
+    args.add("help,h", "Print help message", m_showHelp);
+
+    args.add("debug,d", "Enable debug mode", m_isDebug);
+    args.add("developer-debug",
+        "Enable developer debug (don't trap exceptions)", m_hardCoreDebug);
+    args.add("label", "A string to label the process with", m_label);
+    args.add("verbose,v", "Set verbose message level", m_verboseLevel);
+
+    args.add("visualize", "Visualize result", m_visualize);
+    args.add("stdin,s", "Read pipeline JSON from stdin", m_usestdin);
+    /**
+    args.add("heartbeat", "Shell command to run for every progress heartbeat",
+        m_heartbeat_shell_command);
+    **/
+    args.add("scale",
          "A comma-separated or quoted, space-separated list of scales to "
          "set on the output file: \n--scale 0.1,0.1,0.00001\n--scale \""
-         "0.1 0.1 0.00001\"")
-    ("offset", po::value< std::string >(&m_offsets),
+         "0.1 0.1 0.00001\"", m_scales);
+    args.add("offset",
          "A comma-separated or quoted, space-separated list of offsets to "
          "set on the output file: \n--offset 0,0,0\n--offset "
-         "\"1234 5678 91011\"")
-    ;
-
-    addSwitchSet(basic_options);
+         "\"1234 5678 91011\"", m_offsets);
 }
 
-
-void Kernel::parseSwitches()
+Stage& Kernel::createStage(const std::string& name)
 {
-    po::options_description options;
-
-    for (auto const& iter : m_public_options)
-        options.add(*iter);
-    for (auto const& iter : m_hidden_options)
-        options.add(*iter);
-
-    try
-    {
-        auto parsed = po::command_line_parser(m_argc, m_argv).
-            options(options).allow_unregistered().
-            positional(m_positionalOptions).run();
-        m_extra_options = po::collect_unrecognized(parsed.options,
-            po::include_positional);
-
-        po::store(parsed, m_variablesMap);
-    }
-    catch (boost::program_options::unknown_option e)
-    {
-        throw app_usage_error("unknown option: " + e.get_option_name());
-    }
-    po::notify(m_variablesMap);
+    Stage *stage = m_factory.createStage(name);
+    if (!stage)
+        throw pdal_error("stage creation failed for " + name);
+    return *stage;
 }
 
-
 Stage& Kernel::makeReader(const std::string& inputFile)
 {
     if (!FileUtils::fileExists(inputFile))
-        throw app_runtime_error("file not found: " + inputFile);
+        throw pdal_error("file not found: " + inputFile);
 
-    StageFactory factory;
-    std::string driver = factory.inferReaderDriver(inputFile);
+    std::string driver = m_factory.inferReaderDriver(inputFile);
     if (driver.empty())
-        throw app_runtime_error("Cannot determine input file type of " +
-            inputFile);
+        throw pdal_error("Cannot determine input file type of " + inputFile);
 
-    Stage *stage = factory.createStage(driver);
-    if (!stage)
-        throw app_runtime_error("reader creation failed");
-    ownStage(stage);
-    return *stage;
+    return createStage(driver);
 }
 
-
 Stage& Kernel::makeWriter(const std::string& outputFile, Stage& parent)
 {
-    pdal::StageFactory factory;
-
-    std::string driver = factory.inferWriterDriver(outputFile);
+    std::string driver = m_factory.inferWriterDriver(outputFile);
     if (driver.empty())
         throw pdal_error("Cannot determine output file type of " +
             outputFile);
-    Options options = factory.inferWriterOptionsChanges(outputFile);
+    Options options = m_factory.inferWriterOptionsChanges(outputFile);
 
-    Stage *writer = factory.createStage(driver);
-    if (!writer)
-    {
-        std::ostringstream ss;
-        ss << "Error creating writer stage for file '" << outputFile << "'.";
-        throw pdal_error(ss.str());
-    }
-    ownStage(writer);
-    writer->setInput(parent);
-    writer->setOptions(options + writer->getOptions());
+    auto& writer = createStage(driver);
+    writer.setInput(parent);
+    writer.addOptions(options);
 
-    return *writer;
+    return writer;
 }
 
-} // namespace pdal
+bool Kernel::test_parseOption(std::string o, std::string& stage,
+    std::string& option, std::string& value)
+{
+    return parseOption(o, stage, option, value);
+}
 
+} // namespace pdal
diff --git a/src/KernelFactory.cpp b/src/KernelFactory.cpp
index 0c8d069..a98bd1c 100644
--- a/src/KernelFactory.cpp
+++ b/src/KernelFactory.cpp
@@ -33,9 +33,7 @@
 ****************************************************************************/
 
 #include <pdal/KernelFactory.hpp>
-#include <pdal/Kernel.hpp>
 #include <pdal/PluginManager.hpp>
-#include <pdal/util/Utils.hpp>
 
 #include <delta/DeltaKernel.hpp>
 #include <diff/DiffKernel.hpp>
@@ -48,22 +46,14 @@
 #include <tindex/TIndexKernel.hpp>
 #include <translate/TranslateKernel.hpp>
 
-#include <boost/filesystem.hpp>
-#include <boost/algorithm/string.hpp>
-#include <boost/tokenizer.hpp>
-
-#include <sstream>
-#include <stdio.h> // for funcptr
-#include <string>
-#include <vector>
-
 namespace pdal
 {
 
 KernelFactory::KernelFactory(bool no_plugins)
 {
-    PluginManager & pm = PluginManager::getInstance();
-    if (!no_plugins) { pm.loadAll(PF_PluginType_Kernel); }
+    if (!no_plugins)
+        PluginManager::loadAll(PF_PluginType_Kernel);
+
     PluginManager::initializePlugin(DeltaKernel_InitPlugin);
     PluginManager::initializePlugin(DiffKernel_InitPlugin);
     PluginManager::initializePlugin(InfoKernel_InitPlugin);
@@ -76,23 +66,4 @@ KernelFactory::KernelFactory(bool no_plugins)
     PluginManager::initializePlugin(TranslateKernel_InitPlugin);
 }
 
-std::unique_ptr<Kernel> KernelFactory::createKernel(std::string const& name)
-{
-    PluginManager & pm = PluginManager::getInstance();
-    return std::unique_ptr<Kernel>(static_cast<Kernel*>(pm.createObject(name)));
-}
-
-std::vector<std::string> KernelFactory::getKernelNames()
-{
-    PluginManager & pm = PluginManager::getInstance();
-    PluginManager::RegistrationMap rm = pm.getRegistrationMap();
-    std::vector<std::string> nv;
-    for (auto r : rm)
-    {
-        if (r.second.pluginType == PF_PluginType_Kernel)
-            nv.push_back(r.first);
-    }
-    return nv;
-}
-
 } // namespace pdal
diff --git a/src/KernelSupport.cpp b/src/KernelSupport.cpp
deleted file mode 100644
index a834012..0000000
--- a/src/KernelSupport.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-/******************************************************************************
-* Copyright (c) 2011, Michael P. Gerlek (mpg at flaxen.com)
-*
-* 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 in
-*       the documentation and/or other materials provided
-*       with the distribution.
-*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
-*       names of its contributors may be used to endorse or promote
-*       products derived from this software without specific prior
-*       written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-* OF SUCH DAMAGE.
-****************************************************************************/
-
-#include <pdal/KernelSupport.hpp>
-
-#include <boost/filesystem.hpp>
-#include <boost/algorithm/string.hpp>
-
-#include <pdal/util/FileUtils.hpp>
-#include <pdal/PipelineReader.hpp>
-#include <pdal/util/Utils.hpp>
-
-namespace pdal
-{
-
-PipelineManagerPtr KernelSupport::makePipeline(const std::string& inputFile)
-{
-    if (!pdal::FileUtils::fileExists(inputFile))
-        throw app_runtime_error("file not found: " + inputFile);
-
-    PipelineManagerPtr output(new PipelineManager);
-
-    if (inputFile == "STDIN")
-    {
-        PipelineReader pipeReader(*output);
-        pipeReader.readPipeline(std::cin);
-    }
-    else if (boost::filesystem::extension(inputFile) == ".xml")
-    {
-        PipelineReader pipeReader(*output);
-        pipeReader.readPipeline(inputFile);
-    }
-    else
-    {
-        StageFactory factory;
-        std::string driver = factory.inferReaderDriver(inputFile);
-
-        if (driver.empty())
-            throw app_runtime_error("Cannot determine input file type of " +
-                inputFile);
-        output->addReader(driver);
-    }
-    return output;
-}
-
-
-PercentageCallback::PercentageCallback(double major, double minor)
-    : m_lastMajorPerc(-1 * major)
-    , m_lastMinorPerc(-1 * minor)
-    , m_done(false)
-{}
-
-
-void PercentageCallback::callback()
-{
-    if (m_done)
-        return;
-
-    double currPerc = getPercentComplete();
-
-    if (pdal::Utils::compare_distance<double>(currPerc, 100.0))
-    {
-        std::cerr << ".100" << std::endl;
-        m_done = true;
-    }
-    else if (currPerc >= m_lastMajorPerc + 10.0)
-    {
-        std::cerr << (int)currPerc << std::flush;
-        m_lastMajorPerc = currPerc;
-        m_lastMinorPerc = currPerc;
-    }
-    else if (currPerc >= m_lastMinorPerc + 2.0)
-    {
-        std::cerr << '.' << std::flush;
-        m_lastMinorPerc = currPerc;
-    }
-}
-
-ShellScriptCallback::ShellScriptCallback(
-    const std::vector<std::string>& command)
-{
-    double major_tick(10.0);
-    double minor_tick(2.0);
-
-    if (command.size())
-    {
-        m_command = command[0];
-        if (command.size() == 3)
-        {
-            major_tick = boost::lexical_cast<double>(command[1]);
-            minor_tick = boost::lexical_cast<double>(command[2]);
-        }
-        else if (command.size() == 2)
-            major_tick = boost::lexical_cast<double>(command[1]);
-    }
-    PercentageCallback(major_tick, minor_tick);
-}
-
-
-void ShellScriptCallback::callback()
-{
-    if (m_done)
-        return;
-
-    double currPerc = getPercentComplete();
-    if (Utils::compare_distance<double>(currPerc, 100.0))
-        m_done = true;
-    else if (currPerc >= m_lastMajorPerc + 10.0)
-    {
-        std::string output;
-        Utils::run_shell_command(m_command + " " +
-            boost::lexical_cast<std::string>(static_cast<int>(currPerc)),
-            output);
-        m_lastMajorPerc = currPerc;
-        m_lastMinorPerc = currPerc;
-    }
-    else if (currPerc >= m_lastMinorPerc + 2.0)
-        m_lastMinorPerc = currPerc;
-}
-
-} // namespace pdal
diff --git a/src/Metadata.cpp b/src/Metadata.cpp
new file mode 100644
index 0000000..ad5bcc8
--- /dev/null
+++ b/src/Metadata.cpp
@@ -0,0 +1,107 @@
+/******************************************************************************
+ * Copyright (c) 2012, Howard Butler (howard at hobu.co)
+ *
+ * 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 in
+ *       the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of the Martin Isenburg or Iowa Department
+ *       of Natural Resources nor the names of its contributors may be
+ *       used to endorse or promote products derived from this software
+ *       without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ ****************************************************************************/
+
+#include <pdal/Metadata.hpp>
+#include <pdal/SpatialReference.hpp>
+
+namespace pdal
+{
+
+template <>
+void MetadataNodeImpl::setValue(const SpatialReference& ref)
+{
+    m_type = "spatialreference";
+    m_value = Utils::toString(ref);
+}
+
+
+std::string Metadata::inferType(const std::string& val)
+{
+    size_t pos;
+
+    long l = 0;
+    try
+    {
+        pos = 0;
+        l = std::stol(val, &pos);
+    }
+    catch (std::invalid_argument)
+    {}
+    if (pos == val.length())
+        return (l < 0 ? "nonNegativeInteger" : "integer");
+
+    try
+    {
+        pos = 0;
+        std::stod(val, &pos);
+    }
+    catch(std::invalid_argument)
+    {}
+
+    if (pos == val.length())
+        return "double";
+
+    BOX2D b2d;
+    std::istringstream iss1(val);
+    iss1 >> b2d;
+    if (iss1.good())
+        return "bounds";
+
+    BOX3D b3d;
+    std::istringstream iss2(val);
+    iss2 >> b3d;
+    if (iss2.good())
+        return "bounds";
+
+    if (val == "true" || val == "false")
+        return "boolean";
+
+    try
+    {
+        SpatialReference s(val);
+        return "spatialreference";
+    }
+    catch (pdal_error&)
+    {
+    }
+
+    Uuid uuid(val);
+    if (!uuid.isNull())
+        return "uuid";
+
+    return "string";
+}
+
+
+} // namespace pdal
diff --git a/src/Options.cpp b/src/Options.cpp
index 87ff3a7..5535cef 100644
--- a/src/Options.cpp
+++ b/src/Options.cpp
@@ -42,28 +42,16 @@
 namespace pdal
 {
 
-Option::Option(const boost::property_tree::ptree& tree)
-{
-    using namespace boost::property_tree;
-
-    m_name = tree.get<std::string>("Name");
-    m_value = tree.get<std::string>("Value");
-    m_description =
-    tree.count("Description") ? tree.get<std::string>("Description") : "";
-}
-
 #if !defined(PDAL_COMPILER_MSVC)
 
 // explicit specialization:
-//   if insert a bool, we don't want it to be "0" or "1" (which is
-//   what lexical_cast would do)
+//   if insert a bool, we don't want it to be "0" or "1".
 template<> void Option::setValue(const bool& value)
 {
     m_value = value ? "true" : "false";
 }
 
 // explicit specialization:
-//   if we want to insert a string, we don't need lexical_cast
 template<> void Option::setValue(const std::string& value)
 {
     m_value = value;
@@ -73,9 +61,7 @@ template<> void Option::setValue(const std::string& value)
 
 void Option::toMetadata(MetadataNode& parent) const
 {
-    MetadataNode child = parent.add(getName());
-    child.add("value", getValue<std::string>());
-    child.add("description", getDescription());
+    parent.add(getName(), getValue<std::string>());
 }
 
 //---------------------------------------------------------------------------
@@ -106,17 +92,6 @@ bool Option::nameValid(const std::string& name, bool reportError)
 }
 
 
-Options::Options(const boost::property_tree::ptree& tree)
-{
-    for (auto iter = tree.begin(); iter != tree.end(); ++iter)
-    {
-        assert(iter->first == "Option");
-        Option opt(iter->second);
-        add(opt);
-    }
-}
-
-
 void Options::add(const Option& option)
 {
     assert(Option::nameValid(option.getName(), true));
@@ -194,21 +169,4 @@ bool Options::hasOption(std::string const& name) const
     return false;
 }
 
-
-void Options::dump() const
-{
-    std::cout << *this;
-}
-
-
-std::ostream& operator<<(std::ostream& ostr, const Options& options)
-{
-    const boost::property_tree::ptree tree = pdal::Utils::toPTree(options);
-
-    boost::property_tree::write_json(ostr, tree);
-
-    return ostr;
-}
-
-
 } // namespace pdal
diff --git a/src/PipelineManager.cpp b/src/PipelineManager.cpp
index 89178eb..6312e0b 100644
--- a/src/PipelineManager.cpp
+++ b/src/PipelineManager.cpp
@@ -34,36 +34,63 @@
 
 #include <pdal/PipelineManager.hpp>
 
+#include <pdal/util/FileUtils.hpp>
+
+#include "PipelineReaderXML.hpp"
+#include "PipelineReaderJSON.hpp"
+
 namespace pdal
 {
 
+// TODO(chambbj): what to do about pipelines specified via STDIN?
+void PipelineManager::readPipeline(std::istream& input)
+{
+    PipelineReaderXML(*this).readPipeline(input); 
+}
+
+
+void PipelineManager::readPipeline(const std::string& filename)
+{
+    if (FileUtils::extension(filename) == ".xml")
+    {
+        PipelineReaderXML pipeReader(*this);
+        return pipeReader.readPipeline(filename);
+    }
+    else if (FileUtils::extension(filename) == ".json")
+    {
+        PipelineReaderJSON pipeReader(*this);
+        return pipeReader.readPipeline(filename);
+    }
+}
+
+
 Stage& PipelineManager::addReader(const std::string& type)
 {
-    Stage *r = m_factory.createStage(type);
-    if (!r)
+    Stage *reader = m_factory.createStage(type);
+    if (!reader)
     {
         std::ostringstream ss;
         ss << "Couldn't create reader stage of type '" << type << "'.";
         throw pdal_error(ss.str());
     }
-    r->setProgressFd(m_progressFd);
-    m_stages.push_back(std::unique_ptr<Stage>(r));
-    return *r;
+    reader->setProgressFd(m_progressFd);
+    m_stages.push_back(reader);
+    return *reader;
 }
 
 
 Stage& PipelineManager::addFilter(const std::string& type)
 {
-    Stage *stage = m_factory.createStage(type);
-    if (!stage)
+    Stage *filter = m_factory.createStage(type);
+    if (!filter)
     {
         std::ostringstream ss;
         ss << "Couldn't create filter stage of type '" << type << "'.";
         throw pdal_error(ss.str());
     }
-    stage->setProgressFd(m_progressFd);
-    m_stages.push_back(std::unique_ptr<Stage>(stage));
-    return *stage;
+    filter->setProgressFd(m_progressFd);
+    m_stages.push_back(filter);
+    return *filter;
 }
 
 
@@ -77,7 +104,7 @@ Stage& PipelineManager::addWriter(const std::string& type)
         throw pdal_error(ss.str());
     }
     writer->setProgressFd(m_progressFd);
-    m_stages.push_back(std::unique_ptr<Stage>(writer));
+    m_stages.push_back(writer);
     return *writer;
 }
 
@@ -112,9 +139,8 @@ MetadataNode PipelineManager::getMetadata() const
 {
     MetadataNode output("stages");
 
-    for (auto si = m_stages.begin(); si != m_stages.end(); ++si)
+    for (auto s : m_stages)
     {
-        Stage *s = si->get();
         output.add(s->getMetadata());
     }
     return output;
diff --git a/src/PipelineReader.cpp b/src/PipelineReader.cpp
deleted file mode 100644
index 1a6c301..0000000
--- a/src/PipelineReader.cpp
+++ /dev/null
@@ -1,526 +0,0 @@
-/******************************************************************************
-* Copyright (c) 2011, Michael P. Gerlek (mpg at flaxen.com)
-*
-* 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 in
-*       the documentation and/or other materials provided
-*       with the distribution.
-*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
-*       names of its contributors may be used to endorse or promote
-*       products derived from this software without specific prior
-*       written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-* OF SUCH DAMAGE.
-****************************************************************************/
-
-#include <pdal/PipelineReader.hpp>
-
-#include <pdal/Filter.hpp>
-#include <pdal/PipelineManager.hpp>
-#include <pdal/Options.hpp>
-#include <pdal/util/FileUtils.hpp>
-
-#include <boost/property_tree/xml_parser.hpp>
-#include <boost/optional.hpp>
-#include <boost/filesystem.hpp>
-#include <boost/algorithm/string/trim.hpp>
-
-#ifndef _WIN32
-#include <wordexp.h>
-#endif
-
-namespace pdal
-{
-
-using namespace boost::property_tree;
-
-// ------------------------------------------------------------------------
-
-// this class helps keep tracks of what child nodes we've seen, so we
-// can keep all the error checking in one place
-class PipelineReader::StageParserContext
-{
-public:
-    enum Cardinality { None, One, Many };
-
-    StageParserContext()
-        : m_numTypes(0)
-        , m_cardinality(One)
-        , m_numStages(0)
-    {}
-
-    void setCardinality(Cardinality cardinality)
-    {
-        m_cardinality = cardinality;
-    }
-
-    void addType()
-    {
-        ++m_numTypes;
-    }
-
-    int getNumTypes()
-    {
-        return m_numTypes;
-    }
-
-    void addStage()
-    {
-        ++m_numStages;
-    }
-
-    void addUnknown(const std::string& name)
-    {
-        throw pdal_error("unknown child of element: " + name);
-    }
-
-    void validate()
-    {
-        if (m_numTypes == 0)
-            throw pdal_error("PipelineReader: expected Type element missing");
-        if (m_numTypes > 1)
-            throw pdal_error("PipelineReader: extra Type element found");
-
-        if (m_cardinality == None)
-        {
-            if (m_numStages != 0)
-                throw pdal_error("PipelineReader: found child stages where "
-                    "none were expected");
-        }
-        if (m_cardinality == One)
-        {
-            if (m_numStages == 0)
-                throw pdal_error("PipelineReader: "
-                    "expected child stage missing");
-            if (m_numStages > 1)
-                throw pdal_error("PipelineReader: extra child stages found");
-        }
-        if (m_cardinality == Many)
-        {
-            if (m_numStages == 0)
-                throw pdal_error("PipelineReader: expected child stage "
-                    "missing");
-        }
-    }
-
-private:
-    int m_numTypes;
-    Cardinality m_cardinality; // num child stages allowed
-    int m_numStages;
-};
-
-
-PipelineReader::PipelineReader(PipelineManager& manager, bool isDebug,
-        uint32_t verboseLevel) :
-    m_manager(manager) , m_isDebug(isDebug) , m_verboseLevel(verboseLevel)
-{
-    if (m_isDebug)
-    {
-        Option opt("debug", true);
-        m_baseOptions.add(opt);
-    }
-    if (m_verboseLevel)
-    {
-        Option opt("verbose", m_verboseLevel);
-        m_baseOptions.add(opt);
-    }
-}
-
-
-Option PipelineReader::parseElement_Option(const ptree& tree)
-{
-    // cur is an option element, such as this:
-    //     <option>
-    //       <name>myname</name>
-    //       <description>my descr</description>
-    //       <value>17</value>
-    //     </option>
-    // this function will process the element and return an Option from it
-
-    map_t attrs;
-    collect_attributes(attrs, tree);
-
-    std::string name = attrs["name"];
-    std::string value = tree.get_value<std::string>();
-    boost::algorithm::trim(value);
-    Option option(name, value);
-
-    // filenames in the XML are fixed up as follows:
-    //   - if absolute path, leave it alone
-    //   - if relative path, make it absolute using the XML file's directory
-    // The toAbsolutePath function does exactly that magic for us.
-    if (option.getName() == "filename")
-    {
-        std::string path = option.getValue<std::string>();
-#ifndef _WIN32
-        wordexp_t result;
-        if (wordexp(path.c_str(), &result, 0) == 0)
-        {
-            if (result.we_wordc == 1)
-                path = result.we_wordv[0];
-        }
-        wordfree(&result);
-#endif
-        if (!FileUtils::isAbsolutePath(path))
-        {
-            std::string abspath = FileUtils::toAbsolutePath(m_inputXmlFile);
-            std::string absdir = FileUtils::getDirectory(abspath);
-            path = FileUtils::toAbsolutePath(path, absdir);
-
-            assert(FileUtils::isAbsolutePath(path));
-        }
-        option.setValue(path);
-    }
-    else if (option.getName() == "plugin")
-    {
-       PluginManager& pm = PluginManager::getInstance();
-       std::string path = option.getValue<std::string>();
-       pm.loadPlugin(path);
-    }
-    return option;
-}
-
-
-Stage *PipelineReader::parseElement_anystage(const std::string& name,
-    const ptree& subtree)
-{
-    if (name == "Filter")
-    {
-        return parseElement_Filter(subtree);
-    }
-    else if (name == "Reader")
-    {
-        return parseElement_Reader(subtree);
-    }
-    else if (name == "<xmlattr>")
-    {
-        // ignore: will parse later
-    }
-    else
-    {
-        throw pdal_error("PipelineReader: encountered unknown stage type");
-    }
-
-    return NULL;
-}
-
-
-Stage *PipelineReader::parseElement_Reader(const ptree& tree)
-{
-    Options options(m_baseOptions);
-
-    StageParserContext context;
-    context.setCardinality(StageParserContext::None);
-
-    map_t attrs;
-    collect_attributes(attrs, tree);
-
-    auto iter = tree.begin();
-    while (iter != tree.end())
-    {
-        const std::string& name = iter->first;
-        const ptree& subtree = iter->second;
-
-        if (name == "<xmlattr>")
-        {
-            // already parsed
-        }
-        else if (name == "Option")
-        {
-            Option option = parseElement_Option(subtree);
-            options.add(option);
-        }
-        else if (name == "Metadata")
-        {
-            // ignored for now
-        }
-        else
-        {
-            context.addUnknown(name);
-        }
-        ++iter;
-    }
-
-    std::string type;
-    if (attrs.count("type"))
-    {
-        type = attrs["type"];
-        context.addType();
-    }
-
-    // If we aren't provided a type, try to infer the type from the filename
-    // #278
-    if (context.getNumTypes() == 0)
-    {
-        try
-        {
-            const std::string filename = options.getValueOrThrow<std::string>("filename");
-            type = StageFactory::inferReaderDriver(filename);
-            if (!type.empty())
-            {
-                context.addType();
-            }
-        }
-        catch (Option::not_found)
-        {}
-    }
-
-    context.validate();
-
-    Stage& reader(m_manager.addReader(type));
-    reader.setOptions(options);
-    return &reader;
-}
-
-
-Stage *PipelineReader::parseElement_Filter(const ptree& tree)
-{
-    Options options(m_baseOptions);
-
-    StageParserContext context;
-
-    map_t attrs;
-    collect_attributes(attrs, tree);
-
-    std::vector<Stage*> prevStages;
-    for (auto iter = tree.begin(); iter != tree.end(); ++iter)
-    {
-        const std::string& name = iter->first;
-        const ptree& subtree = iter->second;
-
-        if (name == "<xmlattr>")
-        {
-            // already parsed
-        }
-        else if (name == "Option")
-        {
-            Option option = parseElement_Option(subtree);
-            options.add(option);
-        }
-        else if (name == "Metadata")
-        {
-            // ignored
-        }
-        else if (name == "Filter" || name == "Reader")
-        {
-            context.addStage();
-            prevStages.push_back(parseElement_anystage(name, subtree));
-        }
-        else
-        {
-            context.addUnknown(name);
-        }
-    }
-
-    std::string type;
-    if (attrs.count("type"))
-    {
-        type = attrs["type"];
-        context.addType();
-    }
-
-    Stage& filter(m_manager.addFilter(type));
-    filter.setOptions(options);
-    for (auto sp : prevStages)
-        filter.setInput(*sp);
-    context.setCardinality(StageParserContext::Many);
-    context.validate();
-    return &filter;
-}
-
-
-void PipelineReader::parse_attributes(map_t& attrs, const ptree& tree)
-{
-    for (auto iter = tree.begin(); iter != tree.end(); ++iter)
-    {
-        std::string name = iter->first;
-        std::string value = tree.get<std::string>(name);
-        boost::algorithm::trim(value);
-
-        attrs[name] = value;
-    }
-}
-
-
-void PipelineReader::collect_attributes(map_t& attrs, const ptree& tree)
-{
-    if (tree.count("<xmlattr>"))
-    {
-        const ptree& subtree = tree.get_child("<xmlattr>");
-        parse_attributes(attrs, subtree);
-    }
-}
-
-
-Stage *PipelineReader::parseElement_Writer(const ptree& tree)
-{
-    Options options(m_baseOptions);
-    StageParserContext context;
-
-    map_t attrs;
-    collect_attributes(attrs, tree);
-
-    std::vector<Stage *> prevStages;
-    for (auto iter = tree.begin(); iter != tree.end(); ++iter)
-    {
-        const std::string& name = iter->first;
-        const ptree& subtree = iter->second;
-
-        if (name == "<xmlattr>")
-        {
-            // already parsed -- ignore it
-        }
-        else if (name == "Option")
-        {
-            Option option = parseElement_Option(subtree);
-            options.add(option);
-        }
-        else if (name == "Metadata")
-        {
-            // ignored
-        }
-        else if (name == "Filter" || name == "Reader")
-        {
-            context.addStage();
-            prevStages.push_back(parseElement_anystage(name, subtree));
-        }
-        else
-        {
-            context.addUnknown(name);
-        }
-    }
-
-    std::string type;
-    if (attrs.count("type"))
-    {
-        type = attrs["type"];
-        context.addType();
-    }
-
-    context.validate();
-    Stage& writer(m_manager.addWriter(type));
-    for (auto sp : prevStages)
-        writer.setInput(*sp);
-    writer.setOptions(options);
-    return &writer;
-}
-
-
-bool PipelineReader::parseElement_Pipeline(const ptree& tree)
-{
-    Stage *stage = NULL;
-    Stage *writer = NULL;
-
-    map_t attrs;
-    collect_attributes(attrs, tree);
-
-    std::string version = "";
-    if (attrs.count("version"))
-        version = attrs["version"];
-    if (version != "1.0")
-        throw pdal_error("PipelineReader: unsupported pipeline xml version");
-
-    bool isWriter = false;
-
-    for (auto iter = tree.begin(); iter != tree.end(); ++iter)
-    {
-        const std::string& name = iter->first;
-        const ptree subtree = iter->second;
-
-        if (name == "Reader" || name == "Filter" )
-        {
-            stage = parseElement_anystage(name, subtree);
-        }
-        else if (name == "Writer")
-        {
-            writer = parseElement_Writer(subtree);
-            isWriter = true;
-        }
-        else if (name == "<xmlattr>")
-        {
-            // ignore it, already parsed
-        }
-        else
-        {
-            throw pdal_error("PipelineReader: xml reader invalid child of "
-                "ReaderPipeline element");
-        }
-    }
-
-    if (writer && stage)
-    {
-        throw pdal_error("PipelineReader: extra nodes at front of "
-            "writer pipeline");
-    }
-
-    return isWriter;
-}
-
-bool PipelineReader::readPipeline(std::istream& input)
-{
-
-    ptree tree;
-
-    xml_parser::read_xml(input, tree, xml_parser::no_comments);
-
-    boost::optional<ptree> opt(tree.get_child_optional("Pipeline"));
-    if (!opt.is_initialized())
-        throw pdal_error("PipelineReader: root element is not Pipeline");
-    ptree subtree = opt.get();
-    return parseElement_Pipeline(subtree);
-}
-
-
-bool PipelineReader::readPipeline(const std::string& filename)
-{
-    m_inputXmlFile = filename;
-
-    std::istream* input = FileUtils::openFile(filename);
-
-    bool isWriter = false;
-
-    try
-    {
-        isWriter = readPipeline(*input);
-    }
-    catch (const pdal_error& error)
-    {
-        throw error;
-    }
-    catch (...)
-    {
-        FileUtils::closeFile(input);
-        std::ostringstream oss;
-        oss << "Unable to process pipeline file \"" << filename << "\"." <<
-            "  XML is invalid.";
-        throw pdal_error(oss.str());
-    }
-
-    FileUtils::closeFile(input);
-
-    m_inputXmlFile = "";
-
-    return isWriter;
-}
-
-
-} // namespace pdal
diff --git a/src/PipelineReader.hpp b/src/PipelineReader.hpp
new file mode 100644
index 0000000..7ae2f83
--- /dev/null
+++ b/src/PipelineReader.hpp
@@ -0,0 +1,92 @@
+/******************************************************************************
+* Copyright (c) 2011, Michael P. Gerlek (mpg at flaxen.com)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#pragma once
+
+#include <pdal/pdal_internal.hpp>
+#include <pdal/StageFactory.hpp>
+
+#include <vector>
+#include <string>
+
+#include <boost/property_tree/ptree.hpp>
+
+namespace pdal
+{
+
+class Options;
+class PipelineManager;
+
+class PDAL_DLL PipelineReader
+{
+    friend class PipelineManager;
+
+private:
+    class StageParserContext;
+
+    PipelineReader(PipelineManager& manager) : m_manager(manager)
+    {}
+
+    // Use this to fill in a pipeline manager with an XML file that
+    // contains a <Writer> as the last pipeline stage.
+    //
+    // returns true iff the xml file is a writer pipeline (otherwise it is
+    // assumed to be a reader pipeline)
+    bool readPipeline(const std::string& filename);
+    bool readPipeline(std::istream& input);
+
+    typedef std::map<std::string, std::string> map_t;
+
+    bool parseElement_Pipeline(const pdalboost::property_tree::ptree&);
+    Stage *parseElement_anystage(const std::string& name,
+        const pdalboost::property_tree::ptree& subtree);
+    Stage *parseElement_Reader(const pdalboost::property_tree::ptree& tree);
+    Stage *parseElement_Filter(const pdalboost::property_tree::ptree& tree);
+    Stage *parseElement_Writer(const pdalboost::property_tree::ptree& tree);
+    Option parseElement_Option(const pdalboost::property_tree::ptree& tree);
+    void collect_attributes(map_t& attrs,
+        const pdalboost::property_tree::ptree& tree);
+    void parse_attributes(map_t& attrs,
+        const pdalboost::property_tree::ptree& tree);
+
+    PipelineManager& m_manager;
+    Options m_baseOptions;
+//    std::string m_inputXmlFile;
+
+    PipelineReader& operator=(const PipelineReader&); // not implemented
+    PipelineReader(const PipelineReader&); // not implemented
+};
+
+} // namespace pdal
+
diff --git a/src/PipelineReaderJSON.cpp b/src/PipelineReaderJSON.cpp
new file mode 100644
index 0000000..7342a97
--- /dev/null
+++ b/src/PipelineReaderJSON.cpp
@@ -0,0 +1,424 @@
+/******************************************************************************
+* Copyright (c) 2011, Michael P. Gerlek (mpg at flaxen.com)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include "PipelineReaderJSON.hpp"
+
+#include <pdal/Filter.hpp>
+#include <pdal/PipelineManager.hpp>
+#include <pdal/Options.hpp>
+#include <pdal/util/FileUtils.hpp>
+#include <pdal/util/Utils.hpp>
+
+#include <json/json.h>
+#include <json/json-forwards.h>
+
+#include <memory>
+#include <vector>
+
+#ifndef _WIN32
+#include <wordexp.h>
+#endif
+
+namespace pdal
+{
+
+// ------------------------------------------------------------------------
+
+// this class helps keep tracks of what child nodes we've seen, so we
+// can keep all the error checking in one place
+class PipelineReaderJSON::StageParserContext
+{
+public:
+    enum Cardinality { None, One, Many };
+
+    StageParserContext()
+        : m_numTypes(0)
+        , m_cardinality(One)
+        , m_numStages(0)
+    {}
+
+    void setCardinality(Cardinality cardinality)
+    {
+        m_cardinality = cardinality;
+    }
+
+    void addType()
+    {
+        ++m_numTypes;
+    }
+
+    int getNumTypes()
+    {
+        return m_numTypes;
+    }
+
+    void addStage()
+    {
+        ++m_numStages;
+    }
+
+    void addUnknown(const std::string& name)
+    {
+        throw pdal_error("PipelineReaderJSON: "
+                         "unknown child of element: " + name);
+    }
+
+    void validate()
+    {
+        if (m_numTypes == 0)
+            throw pdal_error("PipelineReaderJSON: "
+                             "expected Type element missing");
+        if (m_numTypes > 1)
+            throw pdal_error("PipelineReaderJSON: "
+                             "extra Type element found");
+
+        if (m_cardinality == None)
+        {
+            if (m_numStages != 0)
+                throw pdal_error("PipelineReaderJSON: "
+                                 "found child stages where none were expected");
+        }
+        if (m_cardinality == One)
+        {
+            if (m_numStages == 0)
+                throw pdal_error("PipelineReaderJSON: "
+                                 "expected child stage missing");
+            if (m_numStages > 1)
+                throw pdal_error("PipelineReaderJSON: "
+                                 "extra child stages found");
+        }
+        if (m_cardinality == Many)
+        {
+            if (m_numStages == 0)
+                throw pdal_error("PipelineReaderJSON: "
+                                 "expected child stage missing");
+        }
+    }
+
+private:
+    int m_numTypes;
+    Cardinality m_cardinality; // num child stages allowed
+    int m_numStages;
+};
+
+
+PipelineReaderJSON::PipelineReaderJSON(PipelineManager& manager, bool isDebug,
+                                       uint32_t verboseLevel) :
+    m_manager(manager) , m_isDebug(isDebug) , m_verboseLevel(verboseLevel)
+{
+    if (m_isDebug)
+    {
+        Option opt("debug", true);
+        m_baseOptions.add(opt);
+    }
+    if (m_verboseLevel)
+    {
+        Option opt("verbose", m_verboseLevel);
+        m_baseOptions.add(opt);
+    }
+}
+
+
+Stage *PipelineReaderJSON::parseReaderByFilename(const std::string& filename)
+{
+    Options options;
+
+    StageParserContext context;
+    std::string type;
+
+    try
+    {
+        type = StageFactory::inferReaderDriver(filename);
+        if (!type.empty())
+        {
+            context.addType();
+        }
+
+        Option opt("filename", filename);
+        options += opt;
+    }
+    catch (Option::not_found)
+    {}
+
+    context.setCardinality(StageParserContext::None);
+    context.validate();
+
+    Stage& reader(m_manager.addReader(type));
+    reader.setOptions(options);
+
+    return &reader;
+}
+
+
+Stage *PipelineReaderJSON::parseWriterByFilename(const std::string& filename)
+{
+    Options options;
+
+    StageParserContext context;
+    std::string type;
+
+    try
+    {
+        type = StageFactory::inferWriterDriver(filename);
+        if (type.empty())
+            throw pdal_error("PipelineReaderJSON: "
+                             "Cannot determine output file type of " +
+                             filename);
+
+        options += StageFactory::inferWriterOptionsChanges(filename);
+        context.addType();
+    }
+    catch (Option::not_found)
+    {}
+
+    context.setCardinality(StageParserContext::None);
+    context.validate();
+
+    Stage& writer(m_manager.addWriter(type));
+    writer.setOptions(options);
+
+    return &writer;
+}
+
+
+void PipelineReaderJSON::parseElement_Pipeline(const Json::Value& tree)
+{
+    std::map<std::string, Stage*> tags;
+    std::vector<Stage*> stages;
+    std::vector<Stage*> firstReaders;
+    bool onlyReaders = true;
+    bool firstNonReader = true;
+
+    size_t i = 0;
+    for (auto const& node : tree)
+    {
+        std::vector<std::string> inputs;
+        Stage* stage = NULL;
+
+        bool curStageIsReader = false;
+
+        // strings are assumed to be filenames
+        if (node.isString())
+        {
+            std::string filename = node.asString();
+            // surely not common, but if there is only one string, it must be a
+            // reader and not a writer
+            // all filenames assumed to be readers except the last.
+            if (tree.size() == 1 || (i < tree.size()-1))
+            {
+                stage = parseReaderByFilename(filename);
+                if (onlyReaders)
+                    firstReaders.push_back(stage);
+                curStageIsReader = true;
+            }
+            else
+            {
+                stage = parseWriterByFilename(filename);
+                onlyReaders = false;
+            }
+        }
+        else
+        {
+            bool filenameIsSet = false;
+
+            std::string type, filename, tag;
+            if (node.isMember("type"))
+                type = node["type"].asString();
+            if (node.isMember("filename"))
+                filename = node["filename"].asString();
+            if (node.isMember("tag"))
+                tag = node["tag"].asString();
+            if (node.isMember("inputs"))
+            {
+                for (auto const& input : node["inputs"])
+                {
+                    if (input.isString())
+                        inputs.push_back(input.asString());
+                    else
+                        throw pdal_error("PipelineReaderJSON: "
+                                         "Stage inputs must be specified as "
+                                         "a string");
+                }
+            }
+
+            if (!type.empty())
+            {
+                if (Utils::startsWith(type, "readers."))
+                {
+                    stage = &m_manager.addReader(type);
+                    if (onlyReaders)
+                        firstReaders.push_back(stage);
+                    curStageIsReader = true;
+                }
+                else if (Utils::startsWith(type, "filters."))
+                {
+                    stage = &m_manager.addFilter(type);
+                    onlyReaders = false;
+                }
+                else if (Utils::startsWith(type, "writers."))
+                {
+                    stage = &m_manager.addWriter(type);
+                    onlyReaders = false;
+                }
+                else
+                    throw pdal_error("PipelineReaderJSON: "
+                                     "Could not determine type of " + type);
+            }
+            else if (!filename.empty())
+            {
+                if (i < tree.size()-1)
+                {
+                    stage = parseReaderByFilename(filename);
+                    if (onlyReaders)
+                        firstReaders.push_back(stage);
+                    curStageIsReader = true;
+                    filenameIsSet = true;
+                }
+                else
+                {
+                    stage = parseWriterByFilename(filename);
+                    filenameIsSet = true;
+                    onlyReaders = false;
+                }
+            }
+
+            if (!tag.empty())
+            {
+                if (tags[tag])
+                    throw pdal_error("PipelineReaderJSON: "
+                                     "Duplicate tag " + tag);
+
+                tags[tag] = stage;
+            }
+
+            Options options(m_baseOptions);
+            for (auto const& name : node.getMemberNames())
+            {
+                if (name.compare("type") == 0)
+                    continue;
+                if (name.compare("inputs") == 0)
+                    continue;
+                if (name.compare("tag") == 0)
+                    continue;
+                if (filenameIsSet && name.compare("filename") == 0)
+                    continue;
+
+                Option opt(name, node[name].asString());
+                options.add(opt);
+            }
+
+            stage->addOptions(options);
+        }
+
+        if (!inputs.empty())
+        {
+            for (auto const& input : inputs)
+            {
+                if (!tags[input])
+                    throw pdal_error("PipelineReaderJSON: "
+                                     "Invalid pipeline, undefined stage " +
+                                     input);
+                stage->setInput(*tags[input]);
+            }
+        }
+        else
+        {
+            if (i && !curStageIsReader)
+            {
+                if (firstReaders.size() > 0 && firstNonReader)
+                {
+                    firstNonReader = false;
+                    for (Stage* s : firstReaders)
+                        stage->setInput(*s);
+                }
+                else
+                {
+                    stage->setInput(*stages[i-1]);
+                }
+            }
+        }
+
+        stages.push_back(stage);
+
+        i++;
+    }
+}
+
+
+void PipelineReaderJSON::readPipeline(std::istream& input)
+{
+    Json::Value root;
+    Json::Reader jsonReader;
+    if (!jsonReader.parse(input, root))
+        throw pdal_error("PipelineReaderJSON: unable to parse pipeline");
+
+    Json::Value subtree = root["pipeline"];
+    if (!subtree)
+        throw pdal_error("PipelineReaderJSON: root element is not a Pipeline");
+    parseElement_Pipeline(subtree);
+}
+
+
+void PipelineReaderJSON::readPipeline(const std::string& filename)
+{
+    m_inputJSONFile = filename;
+
+    std::istream* input = FileUtils::openFile(filename);
+    if (!input)
+    {
+        throw pdal_error("PipelineReaderJSON: "
+                         "unable to open stream for file \"" + filename + "\"");
+    }
+
+    try
+    {
+        readPipeline(*input);
+    }
+    catch (const pdal_error& error)
+    {
+        throw error;
+    }
+    catch (...)
+    {
+        FileUtils::closeFile(input);
+        throw pdal_error("PipelineReaderJSON: "
+                         "unable to process pipeline file \""+ filename + "\". " "JSON is invalid.");
+    }
+
+    FileUtils::closeFile(input);
+
+    m_inputJSONFile = "";
+}
+
+} // namespace pdal
diff --git a/src/PipelineReaderJSON.hpp b/src/PipelineReaderJSON.hpp
new file mode 100644
index 0000000..6c74507
--- /dev/null
+++ b/src/PipelineReaderJSON.hpp
@@ -0,0 +1,90 @@
+/******************************************************************************
+* Copyright (c) 2011, Michael P. Gerlek (mpg at flaxen.com)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#pragma once
+
+#include <pdal/pdal_internal.hpp>
+#include <pdal/StageFactory.hpp>
+
+#include <json/json-forwards.h>
+
+#include <vector>
+#include <string>
+
+
+namespace pdal
+{
+
+class Options;
+class PipelineManager;
+
+class PDAL_DLL PipelineReaderJSON
+{
+    friend class PipelineManager;
+
+private:
+    class StageParserContext;
+
+    PipelineReaderJSON(PipelineManager&, bool debug=false,
+                   uint32_t verbose = 0);
+
+    /**
+      Read a JSON pipeline file into a PipelineManager.
+
+      \param filename  Filename to read.
+    */
+    void readPipeline(const std::string& filename);
+
+    /**
+      Read a JSON pipeline file from a stream into a PipelineManager.
+
+      \param input  Stream to read.
+    */
+    void readPipeline(std::istream& input);
+
+    void parseElement_Pipeline(const Json::Value&);
+    Stage *parseReaderByFilename(const std::string& filename);
+    Stage *parseWriterByFilename(const std::string& filename);
+
+    PipelineManager& m_manager;
+    bool m_isDebug;
+    uint32_t m_verboseLevel;
+    Options m_baseOptions;
+    std::string m_inputJSONFile;
+
+    PipelineReaderJSON& operator=(const PipelineReaderJSON&); // not implemented
+    PipelineReaderJSON(const PipelineReaderJSON&); // not implemented
+};
+
+} // namespace pdal
diff --git a/src/PipelineReaderXML.cpp b/src/PipelineReaderXML.cpp
new file mode 100644
index 0000000..c1cec56
--- /dev/null
+++ b/src/PipelineReaderXML.cpp
@@ -0,0 +1,514 @@
+/******************************************************************************
+* Copyright (c) 2011, Michael P. Gerlek (mpg at flaxen.com)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include "PipelineReaderXML.hpp"
+
+#include <pdal/Filter.hpp>
+#include <pdal/PipelineManager.hpp>
+#include <pdal/PluginManager.hpp>
+#include <pdal/Options.hpp>
+#include <pdal/util/FileUtils.hpp>
+
+#include <boost/property_tree/xml_parser.hpp>
+
+#ifndef _WIN32
+#include <wordexp.h>
+#endif
+
+namespace pdal
+{
+
+using namespace pdalboost::property_tree;
+
+// ------------------------------------------------------------------------
+
+// this class helps keep tracks of what child nodes we've seen, so we
+// can keep all the error checking in one place
+class PipelineReaderXML::StageParserContext
+{
+public:
+    enum Cardinality { None, One, Many };
+
+    StageParserContext()
+        : m_numTypes(0)
+        , m_cardinality(One)
+        , m_numStages(0)
+    {}
+
+    void setCardinality(Cardinality cardinality)
+    {
+        m_cardinality = cardinality;
+    }
+
+    void addType()
+    {
+        ++m_numTypes;
+    }
+
+    int getNumTypes()
+    {
+        return m_numTypes;
+    }
+
+    void addStage()
+    {
+        ++m_numStages;
+    }
+
+    void addUnknown(const std::string& name)
+    {
+        throw pdal_error("unknown child of element: " + name);
+    }
+
+    void validate()
+    {
+        if (m_numTypes == 0)
+            throw pdal_error("PipelineReaderXML: expected Type element missing");
+        if (m_numTypes > 1)
+            throw pdal_error("PipelineReaderXML: extra Type element found");
+
+        if (m_cardinality == None)
+        {
+            if (m_numStages != 0)
+                throw pdal_error("PipelineReaderXML: found child stages where "
+                    "none were expected");
+        }
+        if (m_cardinality == One)
+        {
+            if (m_numStages == 0)
+                throw pdal_error("PipelineReaderXML: "
+                    "expected child stage missing");
+            if (m_numStages > 1)
+                throw pdal_error("PipelineReaderXML: extra child stages found");
+        }
+        if (m_cardinality == Many)
+        {
+            if (m_numStages == 0)
+                throw pdal_error("PipelineReaderXML: expected child stage "
+                    "missing");
+        }
+    }
+
+private:
+    int m_numTypes;
+    Cardinality m_cardinality; // num child stages allowed
+    int m_numStages;
+};
+
+
+PipelineReaderXML::PipelineReaderXML(PipelineManager& manager, bool isDebug,
+        uint32_t verboseLevel) :
+    m_manager(manager) , m_isDebug(isDebug) , m_verboseLevel(verboseLevel)
+{
+    if (m_isDebug)
+    {
+        Option opt("debug", true);
+        m_baseOptions.add(opt);
+    }
+    if (m_verboseLevel)
+    {
+        Option opt("verbose", m_verboseLevel);
+        m_baseOptions.add(opt);
+    }
+}
+
+
+Option PipelineReaderXML::parseElement_Option(const ptree& tree)
+{
+    // cur is an option element, such as this:
+    //     <option>
+    //       <name>myname</name>
+    //       <description>my descr</description>
+    //       <value>17</value>
+    //     </option>
+    // this function will process the element and return an Option from it
+
+    map_t attrs;
+    collect_attributes(attrs, tree);
+
+    std::string name = attrs["name"];
+    std::string value = tree.get_value<std::string>();
+    Utils::trim(value);
+    Option option(name, value);
+
+    // filenames in the XML are fixed up as follows:
+    //   - if absolute path, leave it alone
+    //   - if relative path, make it absolute using the XML file's directory
+    // The toAbsolutePath function does exactly that magic for us.
+    if (option.getName() == "filename")
+    {
+        std::string path = option.getValue<std::string>();
+#ifndef _WIN32
+        wordexp_t result;
+        if (wordexp(path.c_str(), &result, 0) == 0)
+        {
+            if (result.we_wordc == 1)
+                path = result.we_wordv[0];
+        }
+        wordfree(&result);
+#endif
+        if (!FileUtils::isAbsolutePath(path))
+        {
+            std::string abspath = FileUtils::toAbsolutePath(m_inputXmlFile);
+            std::string absdir = FileUtils::getDirectory(abspath);
+            path = FileUtils::toAbsolutePath(path, absdir);
+
+            assert(FileUtils::isAbsolutePath(path));
+        }
+        option.setValue(path);
+    }
+    else if (option.getName() == "plugin")
+    {
+       PluginManager::loadPlugin(option.getValue<std::string>());
+    }
+    return option;
+}
+
+
+Stage *PipelineReaderXML::parseElement_anystage(const std::string& name,
+    const ptree& subtree)
+{
+    if (name == "Filter")
+    {
+        return parseElement_Filter(subtree);
+    }
+    else if (name == "Reader")
+    {
+        return parseElement_Reader(subtree);
+    }
+    else if (name == "<xmlattr>")
+    {
+        // ignore: will parse later
+    }
+    else
+    {
+        throw pdal_error("PipelineReaderXML: encountered unknown stage type");
+    }
+
+    return NULL;
+}
+
+
+Stage *PipelineReaderXML::parseElement_Reader(const ptree& tree)
+{
+    Options options(m_baseOptions);
+
+    StageParserContext context;
+    context.setCardinality(StageParserContext::None);
+
+    map_t attrs;
+    collect_attributes(attrs, tree);
+
+    auto iter = tree.begin();
+    while (iter != tree.end())
+    {
+        const std::string& name = iter->first;
+        const ptree& subtree = iter->second;
+
+        if (name == "<xmlattr>")
+        {
+            // already parsed
+        }
+        else if (name == "Option")
+        {
+            Option option = parseElement_Option(subtree);
+            options.add(option);
+        }
+        else if (name == "Metadata")
+        {
+            // ignored for now
+        }
+        else
+        {
+            context.addUnknown(name);
+        }
+        ++iter;
+    }
+
+    std::string type;
+    if (attrs.count("type"))
+    {
+        type = attrs["type"];
+        context.addType();
+    }
+
+    // If we aren't provided a type, try to infer the type from the filename
+    // #278
+    if (context.getNumTypes() == 0)
+    {
+        try
+        {
+            const std::string filename = options.getValueOrThrow<std::string>("filename");
+            type = StageFactory::inferReaderDriver(filename);
+            if (!type.empty())
+            {
+                context.addType();
+            }
+        }
+        catch (Option::not_found)
+        {}
+    }
+
+    context.validate();
+
+    Stage& reader(m_manager.addReader(type));
+    reader.setOptions(options);
+    return &reader;
+}
+
+
+Stage *PipelineReaderXML::parseElement_Filter(const ptree& tree)
+{
+    Options options(m_baseOptions);
+
+    StageParserContext context;
+
+    map_t attrs;
+    collect_attributes(attrs, tree);
+
+    std::vector<Stage*> prevStages;
+    for (auto iter = tree.begin(); iter != tree.end(); ++iter)
+    {
+        const std::string& name = iter->first;
+        const ptree& subtree = iter->second;
+
+        if (name == "<xmlattr>")
+        {
+            // already parsed
+        }
+        else if (name == "Option")
+        {
+            Option option = parseElement_Option(subtree);
+            options.add(option);
+        }
+        else if (name == "Metadata")
+        {
+            // ignored
+        }
+        else if (name == "Filter" || name == "Reader")
+        {
+            context.addStage();
+            prevStages.push_back(parseElement_anystage(name, subtree));
+        }
+        else
+        {
+            context.addUnknown(name);
+        }
+    }
+
+    std::string type;
+    if (attrs.count("type"))
+    {
+        type = attrs["type"];
+        context.addType();
+    }
+
+    Stage& filter(m_manager.addFilter(type));
+    filter.setOptions(options);
+    for (auto sp : prevStages)
+        filter.setInput(*sp);
+    context.setCardinality(StageParserContext::Many);
+    context.validate();
+    return &filter;
+}
+
+
+void PipelineReaderXML::parse_attributes(map_t& attrs, const ptree& tree)
+{
+    for (auto iter = tree.begin(); iter != tree.end(); ++iter)
+    {
+        std::string name = iter->first;
+        std::string value = tree.get<std::string>(name);
+        Utils::trim(value);
+
+        attrs[name] = value;
+    }
+}
+
+
+void PipelineReaderXML::collect_attributes(map_t& attrs, const ptree& tree)
+{
+    if (tree.count("<xmlattr>"))
+    {
+        const ptree& subtree = tree.get_child("<xmlattr>");
+        parse_attributes(attrs, subtree);
+    }
+}
+
+
+Stage *PipelineReaderXML::parseElement_Writer(const ptree& tree)
+{
+    Options options(m_baseOptions);
+    StageParserContext context;
+
+    map_t attrs;
+    collect_attributes(attrs, tree);
+
+    std::vector<Stage *> prevStages;
+    for (auto iter = tree.begin(); iter != tree.end(); ++iter)
+    {
+        const std::string& name = iter->first;
+        const ptree& subtree = iter->second;
+
+        if (name == "<xmlattr>")
+        {
+            // already parsed -- ignore it
+        }
+        else if (name == "Option")
+        {
+            Option option = parseElement_Option(subtree);
+            options.add(option);
+        }
+        else if (name == "Metadata")
+        {
+            // ignored
+        }
+        else if (name == "Filter" || name == "Reader")
+        {
+            context.addStage();
+            prevStages.push_back(parseElement_anystage(name, subtree));
+        }
+        else
+        {
+            context.addUnknown(name);
+        }
+    }
+
+    std::string type;
+    if (attrs.count("type"))
+    {
+        type = attrs["type"];
+        context.addType();
+    }
+
+    context.validate();
+    Stage& writer(m_manager.addWriter(type));
+    for (auto sp : prevStages)
+        writer.setInput(*sp);
+    writer.setOptions(options);
+    return &writer;
+}
+
+
+void PipelineReaderXML::parseElement_Pipeline(const ptree& tree)
+{
+    Stage *stage = NULL;
+    Stage *writer = NULL;
+
+    Options o(m_baseOptions);
+
+    map_t attrs;
+    collect_attributes(attrs, tree);
+
+    std::string version = "";
+    if (attrs.count("version"))
+        version = attrs["version"];
+    if (version != "1.0")
+        throw pdal_error("PipelineReaderXML: unsupported pipeline xml version");
+
+    for (auto iter = tree.begin(); iter != tree.end(); ++iter)
+    {
+        const std::string& name = iter->first;
+        const ptree subtree = iter->second;
+
+        if (name == "Reader" || name == "Filter" )
+        {
+            stage = parseElement_anystage(name, subtree);
+        }
+        else if (name == "Writer")
+        {
+            writer = parseElement_Writer(subtree);
+        }
+        else if (name == "<xmlattr>")
+        {
+            // ignore it, already parsed
+        }
+        else
+        {
+            throw pdal_error("PipelineReaderXML: xml reader invalid child of "
+                "ReaderPipeline element");
+        }
+    }
+
+    if (writer && stage)
+    {
+        throw pdal_error("PipelineReaderXML: extra nodes at front of "
+            "writer pipeline");
+    }
+}
+
+
+void PipelineReaderXML::readPipeline(std::istream& input)
+{
+    ptree tree;
+
+    xml_parser::read_xml(input, tree, xml_parser::no_comments);
+
+    pdalboost::optional<ptree> opt(tree.get_child_optional("Pipeline"));
+    if (!opt.is_initialized())
+        throw pdal_error("PipelineReaderXML: root element is not Pipeline");
+    parseElement_Pipeline(opt.get());
+}
+
+
+void PipelineReaderXML::readPipeline(const std::string& filename)
+{
+    m_inputXmlFile = filename;
+
+    std::istream* input = FileUtils::openFile(filename);
+
+    try
+    {
+        readPipeline(*input);
+    }
+    catch (const pdal_error& error)
+    {
+        throw error;
+    }
+    catch (...)
+    {
+        FileUtils::closeFile(input);
+        std::ostringstream oss;
+        oss << "Unable to process pipeline file \"" << filename << "\"." <<
+            "  XML is invalid.";
+        throw pdal_error(oss.str());
+    }
+
+    FileUtils::closeFile(input);
+
+    m_inputXmlFile = "";
+}
+
+
+} // namespace pdal
diff --git a/src/PipelineReaderXML.hpp b/src/PipelineReaderXML.hpp
new file mode 100644
index 0000000..db3c229
--- /dev/null
+++ b/src/PipelineReaderXML.hpp
@@ -0,0 +1,101 @@
+/******************************************************************************
+* Copyright (c) 2011, Michael P. Gerlek (mpg at flaxen.com)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#pragma once
+
+#include <boost/property_tree/ptree.hpp>
+
+#include <pdal/pdal_internal.hpp>
+#include <pdal/StageFactory.hpp>
+
+#include <vector>
+#include <string>
+
+
+namespace pdal
+{
+
+class Options;
+class PipelineManager;
+
+class PDAL_DLL PipelineReaderXML
+{
+private:
+    class StageParserContext;
+
+public:
+    PipelineReaderXML(PipelineManager&, bool debug=false,
+        uint32_t verbose = 0);
+
+    /**
+      Read an XML pipeline file into a PipelineManager.
+
+      \param filename  Filename to read from.
+    */
+    void readPipeline(const std::string& filename);
+
+    /**
+      Read an XML pipeline from a stream into a PipelineManager.
+      
+      \param input  Stream to read from.
+    */
+    void readPipeline(std::istream& input);
+
+private:
+    typedef std::map<std::string, std::string> map_t;
+
+    void parseElement_Pipeline(const pdalboost::property_tree::ptree&);
+    Stage *parseElement_anystage(const std::string& name,
+        const pdalboost::property_tree::ptree& subtree);
+    Stage *parseElement_Reader(const pdalboost::property_tree::ptree& tree);
+    Stage *parseElement_Filter(const pdalboost::property_tree::ptree& tree);
+    Stage *parseElement_Writer(const pdalboost::property_tree::ptree& tree);
+    Option parseElement_Option(const pdalboost::property_tree::ptree& tree);
+    void collect_attributes(map_t& attrs,
+        const pdalboost::property_tree::ptree& tree);
+    void parse_attributes(map_t& attrs,
+        const pdalboost::property_tree::ptree& tree);
+
+private:
+    PipelineManager& m_manager;
+    bool m_isDebug;
+    uint32_t m_verboseLevel;
+    Options m_baseOptions;
+    std::string m_inputXmlFile;
+
+    PipelineReaderXML& operator=(const PipelineReaderXML&); // not implemented
+    PipelineReaderXML(const PipelineReaderXML&); // not implemented
+};
+
+} // namespace pdal
diff --git a/src/PipelineWriter.cpp b/src/PipelineWriter.cpp
index 43b3778..bab7ec2 100644
--- a/src/PipelineWriter.cpp
+++ b/src/PipelineWriter.cpp
@@ -34,133 +34,64 @@
 
 #include <pdal/PipelineWriter.hpp>
 
-#include <pdal/Filter.hpp>
-#include <pdal/Reader.hpp>
-#include <pdal/Writer.hpp>
-#include <pdal/PipelineManager.hpp>
+#include <pdal/Metadata.hpp>
 #include <pdal/PDALUtils.hpp>
-
-#include <boost/property_tree/xml_parser.hpp>
-#include <boost/optional.hpp>
-#include <boost/foreach.hpp>
-#include <boost/algorithm/string.hpp>
-
-#include <boost/property_tree/xml_parser.hpp>
-#include <boost/property_tree/json_parser.hpp>
+#include <pdal/Stage.hpp>
 #include <pdal/util/FileUtils.hpp>
 
-using namespace boost::property_tree;
-
 namespace pdal
 {
 
-static ptree generateTreeFromStage(const Stage& stage)
+namespace
 {
-    ptree tree;
-    ptree& attrtree = tree.add_child("Pipeline", stage.serializePipeline());
-    attrtree.put("<xmlattr>.version", "1.0");
-    return tree;
-}
 
-
-void PipelineWriter::write_option_ptree(ptree& tree, const Options& opts)
+void generateTags(Stage *stage, PipelineWriter::TagMap& tags)
 {
-    ptree m_tree = Utils::toPTree(opts);
-
-    auto iter = m_tree.begin();
-    while (iter != m_tree.end())
+    auto tagExists = [tags](const std::string& tag)
     {
-        if (iter->first != "Option")
-            throw pdal_error("malformed Options ptree");
-        const ptree& optionTree = iter->second;
-
-        // we want to create this:
-        //      ...
-        //      <Option name="file">foo.las</Option>
-        //      ...
-
-        const std::string& name =
-            optionTree.get_child("Name").get_value<std::string>();
-        const std::string& value =
-            optionTree.get_child("Value").get_value<std::string>();
-
-        ptree& subtree = tree.add("Option", value);
-        subtree.put("<xmlattr>.name", name);
-
-        boost::optional<ptree const&> moreOptions =
-            optionTree.get_child_optional("Options");
-
-        if (moreOptions)
+        for (auto& t : tags)
         {
-            ptree newOpts;
-            write_option_ptree(newOpts, moreOptions.get());
-            subtree.put_child("Options", newOpts);
+            if (t.second == tag)
+                return true;
         }
-        ++iter;
-    }
-}
-
+        return false;
+    };
 
-ptree PipelineWriter::getMetadataEntry(const MetadataNode& input)
-{
-    ptree entry;
-
-    entry.put_value(input.value());
-    entry.put("<xmlattr>.name", input.name());
-    entry.put("<xmlattr>.type", input.type());
-
-    std::vector<MetadataNode> children = input.children();
-    for (auto ci = children.begin(); ci != children.end(); ++ci)
-        entry.add_child("Metadata", getMetadataEntry(*ci));
-    return entry;
+    for (Stage *s : stage->getInputs())
+        generateTags(s, tags);
+    std::string tag;
+    for (size_t i = 1; ; ++i)
+    {
+        tag = stage->tagName() + std::to_string(i);
+        if (!tagExists(tag))
+            break;
+    }
+    tags[stage] = tag;
 }
 
+} // anonymous namespace
 
-void PipelineWriter::writeMetadata(boost::property_tree::ptree& tree,
-    const MetadataNode& input)
+namespace PipelineWriter
 {
-    tree.add_child("Metadata", getMetadataEntry(input));
-}
-
 
-void PipelineWriter::writeMetadata(boost::property_tree::ptree& tree,
-    const MetadataNodeList& input)
+PDAL_DLL void writePipeline(Stage *stage, const std::string& filename)
 {
-    for (auto mi = input.begin(); mi != input.end(); ++mi)
-        tree.add_child("Metadata", getMetadataEntry(*mi));
+    std::ostream *out = FileUtils::createFile(filename, false);
+    writePipeline(stage, *out);
+    FileUtils::closeFile(out);
 }
 
-
-void PipelineWriter::writePipeline(const std::string& filename) const
+PDAL_DLL void writePipeline(Stage *stage, std::ostream& strm)
 {
-    Stage *stage = m_manager.getStage();
-
-    ptree tree = generateTreeFromStage(*stage);
-#if BOOST_VERSION >= 105600
-    const xml_parser::xml_writer_settings<std::string> settings(' ', 4);
-#else
-    const xml_parser::xml_writer_settings<char> settings(' ', 4);
-#endif
+    TagMap tags;
+    generateTags(stage, tags);
 
-    if (boost::iequals(filename, "STDOUT"))
-        xml_parser::write_xml(std::cout, tree);
-    else
-        xml_parser::write_xml(filename, tree, std::locale(), settings);
+    MetadataNode root;
+    stage->serialize(root, tags);
+    Utils::toJSON(root, strm);
 }
 
-void PipelineWriter::writePipeline(std::ostream& strm) const
-{
-    Stage *stage = m_manager.getStage();
-
-    ptree tree = generateTreeFromStage(*stage);
-#if BOOST_VERSION >= 105600
-    const xml_parser::xml_writer_settings<std::string> settings(' ', 4);
-#else
-    const xml_parser::xml_writer_settings<char> settings(' ', 4);
-#endif
-
-    xml_parser::write_xml(strm, tree);
+} // namespace PipelineWriter
 
-}
 } // namespace pdal
 
diff --git a/src/PluginManager.cpp b/src/PluginManager.cpp
index 7eea778..8d411c8 100644
--- a/src/PluginManager.cpp
+++ b/src/PluginManager.cpp
@@ -39,13 +39,13 @@
 
 #include <pdal/PluginManager.hpp>
 
-#include <boost/filesystem.hpp>
-
 #include <pdal/pdal_defines.h>
+#include <pdal/util/Algorithm.hpp>
 #include <pdal/util/FileUtils.hpp>
 #include <pdal/util/Utils.hpp>
+#include <pdal/Log.hpp>
 
-#include "DynamicLibrary.h"
+#include "DynamicLibrary.hpp"
 
 #include <memory>
 #include <sstream>
@@ -56,83 +56,69 @@ namespace pdal
 
 namespace
 {
+
+static PluginManager s_instance;
+
 #if defined(__APPLE__) && defined(__MACH__)
     const std::string dynamicLibraryExtension(".dylib");
-#elif defined __linux__
+#elif defined(__linux__) || defined(__FreeBSD_kernel__)
     const std::string dynamicLibraryExtension(".so");
 #elif defined _WIN32
     const std::string dynamicLibraryExtension(".dll");
 #endif
 
-    bool isValid(const PF_RegisterParams * params)
-    {
-        return (params && params->createFunc && params->destroyFunc);
-    }
 
-    bool pluginTypeValid(std::string pathname, PF_PluginType type)
-    {
-        bool valid(false);
+bool pluginTypeValid(std::string pathname, PF_PluginType type)
+{
+    return ((Utils::startsWith(pathname, "libpdal_plugin_kernel") &&
+            type & PF_PluginType_Kernel) ||
+        (Utils::startsWith(pathname, "libpdal_plugin_filter") &&
+            type & PF_PluginType_Filter) ||
+        (Utils::startsWith(pathname, "libpdal_plugin_reader") &&
+            type & PF_PluginType_Reader) ||
+        (Utils::startsWith(pathname, "libpdal_plugin_writer") &&
+            type & PF_PluginType_Writer));
+}
 
-        if (Utils::startsWith(pathname, "libpdal_plugin_kernel"))
-        {
-            if (type == PF_PluginType_Kernel)
-                valid = true;
-        }
-        else if (Utils::startsWith(pathname, "libpdal_plugin_filter"))
-        {
-            if (type == PF_PluginType_Filter)
-                valid = true;
-        }
-        else if (Utils::startsWith(pathname, "libpdal_plugin_reader"))
-        {
-            if (type == PF_PluginType_Reader)
-                valid = true;
-        }
-        else if (Utils::startsWith(pathname, "libpdal_plugin_writer"))
-        {
-            if (type == PF_PluginType_Writer)
-                valid = true;
-        }
+} // unnamed namespace;
 
-        return valid;
-    }
+
+bool PluginManager::registerObject(const std::string& name,
+    const PF_RegisterParams *params)
+{
+    return s_instance.l_registerObject(name, params);
 }
 
 
-bool PluginManager::registerObject(const std::string& objectType,
-    const PF_RegisterParams* params)
+bool PluginManager::l_registerObject(const std::string& name,
+    const PF_RegisterParams *params)
 {
-    bool registered(false);
-
-    if (isValid(params))
+    if (params && params->createFunc && params->destroyFunc &&
+        (m_version.major == params->version.major))
     {
-        PluginManager& pm = PluginManager::getInstance();
+        auto entry(std::make_pair(name, *params));
 
-        if (pm.m_version.major == params->version.major)
-        {
-            auto entry(std::make_pair(objectType, *params));
-            registered = pm.m_exactMatchMap.insert(entry).second;
-        }
+        std::lock_guard<std::mutex> lock(m_mutex);
+        return m_plugins.insert(entry).second;
     }
-
-    return registered;
+    return false;
 }
 
 
-PluginManager& PluginManager::getInstance()
+void PluginManager::loadAll(int type)
 {
-    static PluginManager instance;
-    return instance;
+    s_instance.l_loadAll(type);
 }
 
 
-void PluginManager::loadAll(PF_PluginType type)
+void PluginManager::l_loadAll(PF_PluginType type)
 {
+    std::string pluginDir;
     std::string driver_path("PDAL_DRIVER_PATH");
-    std::string pluginDir = Utils::getenv(driver_path);
+    Utils::getenv(driver_path, pluginDir);
 
     // If we don't have a driver path, defaults are set.
-    if (pluginDir.size() == 0)
+    if (pluginDir.empty())
     {
         std::ostringstream oss;
         oss << PDAL_PLUGIN_INSTALL_PATH <<
@@ -143,38 +129,76 @@ void PluginManager::loadAll(PF_PluginType type)
     std::vector<std::string> pluginPathVec = Utils::split2(pluginDir, ':');
 
     for (const auto& pluginPath : pluginPathVec)
-    {
         loadAll(pluginPath, type);
-    }
 }
 
+StringList PluginManager::names(int typeMask)
+{
+    return s_instance.l_names(typeMask);
+}
 
-void PluginManager::loadAll(const std::string& pluginDirectory,
-    PF_PluginType type)
+
+StringList PluginManager::l_names(int typeMask)
 {
-    const bool pluginDirectoryValid =
-            pluginDirectory.size() &&
-                (FileUtils::fileExists(pluginDirectory) ||
-                boost::filesystem::is_directory(pluginDirectory));
+    StringList l;
 
-    if (pluginDirectoryValid)
-    {
-        boost::filesystem::directory_iterator dir(pluginDirectory), it, end;
+    std::lock_guard<std::mutex> lock(m_mutex);
+    for (auto p : m_plugins)
+        if (p.second.pluginType & typeMask)
+            l.push_back(p.first);
+    return l;
+}
 
-        // Looks like directory_iterator doesn't support range-based for loop in
-        // Boost v1.55. It fails Travis anyway, so I reverted it.
-        for (it = dir; it != end; ++it)
-        {
-            boost::filesystem::path full_path = it->path();
+std::string PluginManager::link(const std::string& name)
+{
+    return s_instance.l_link(name);
+}
 
-            if (boost::filesystem::is_directory(full_path))
-                continue;
 
-            std::string ext = full_path.extension().string();
-            if (ext != dynamicLibraryExtension)
-                continue;
+std::string PluginManager::l_link(const std::string& name)
+{
+    std::string link;
+
+    std::lock_guard<std::mutex> lock(m_mutex);
+    auto ei = m_plugins.find(name);
+    if (ei != m_plugins.end())
+        link= ei->second.link;
+    return link;
+}
+
+
+std::string PluginManager::description(const std::string& name)
+{
+    return s_instance.l_description(name);
+}
+
+
+std::string PluginManager::l_description(const std::string& name)
+{
+    std::string descrip;
+
+    std::lock_guard<std::mutex> lock(m_mutex);
+    auto ei = m_plugins.find(name);
+    if (ei != m_plugins.end())
+        descrip = ei->second.description;
+    return descrip;
+}
+
+
+void PluginManager::loadAll(const std::string& pluginDirectory, int type)
+{
+    const bool pluginDirectoryValid = pluginDirectory.size() &&
+        (FileUtils::fileExists(pluginDirectory) ||
+            FileUtils::isDirectory(pluginDirectory));
 
-            loadByPath(full_path.string(), type);
+    if (pluginDirectoryValid)
+    {
+        StringList files = FileUtils::directoryList(pluginDirectory);
+        for (auto file : files)
+        {
+            if ((FileUtils::extension(file) == dynamicLibraryExtension) &&
+                !FileUtils::isDirectory(file))
+                loadByPath(file, type);
         }
     }
 }
@@ -182,17 +206,19 @@ void PluginManager::loadAll(const std::string& pluginDirectory,
 
 bool PluginManager::initializePlugin(PF_InitFunc initFunc)
 {
-    bool initialized(false);
+    return s_instance.l_initializePlugin(initFunc);
+}
 
-    PluginManager& pm = PluginManager::getInstance();
 
+bool PluginManager::l_initializePlugin(PF_InitFunc initFunc)
+{
     if (PF_ExitFunc exitFunc = initFunc())
     {
-        initialized = true;
-        pm.m_exitFuncVec.push_back(exitFunc);
+        std::lock_guard<std::mutex> lock(m_mutex);
+        m_exitFuncVec.push_back(exitFunc);
+        return true;
     }
-
-    return initialized;
+    return false;
 }
 
 
@@ -206,14 +232,15 @@ PluginManager::PluginManager()
 PluginManager::~PluginManager()
 {
     if (!shutdown())
-    {
-        std::cerr << "Error destructing PluginManager" << std::endl;
-    }
+        Log("PDAL", "stderr").get(LogLevel::Error) <<
+            "Error destroying PluginManager" << std::endl;
 }
 
 
 bool PluginManager::shutdown()
 {
+    std::lock_guard<std::mutex> lock(m_mutex);
+
     bool success(true);
 
     for (auto const& func : m_exitFuncVec)
@@ -232,32 +259,45 @@ bool PluginManager::shutdown()
         }
     }
 
+    // This clears the handles on the dynamic libraries so that they won't
+    // be closed with dlclose().  Depending on the order of dll unloading,
+    // it's possible for a plugin library to be unloaded before this function
+    // (which is usually in a dll) is called, which can raise an error on
+    // some systems when dlclose() is called on a library for which the
+    // reference count is already 0.  Since we're exiting anyway and all the
+    // dlls will be closed, there is no need to call dlclose() on them
+    // explicitly.
+    for (auto l : m_dynamicLibraryMap)
+        l.second->clear();
+
     m_dynamicLibraryMap.clear();
-    m_exactMatchMap.clear();
+    m_plugins.clear();
     m_exitFuncVec.clear();
 
     return success;
 }
 
+
 bool PluginManager::loadPlugin(const std::string& driverFileName)
 {
+    return s_instance.l_loadPlugin(driverFileName);
+}
+
+
+bool PluginManager::l_loadPlugin(const std::string& driverFileName)
+{
     std::vector<std::string> driverPathVec;
     driverPathVec = Utils::split2(driverFileName, '.');
 
-    boost::filesystem::path full_path(driverFileName);
-
-    if (boost::filesystem::is_directory(full_path))
+    if ((FileUtils::extension(driverFileName) != dynamicLibraryExtension) ||
+            FileUtils::isDirectory(driverFileName))
         return false;
 
-    std::string ext = full_path.extension().string();
-    if (ext != dynamicLibraryExtension)
-        return false;
-    std::string stem = full_path.stem().string();
     std::vector<std::string> driverNameVec;
     driverNameVec = Utils::split2(driverPathVec[0], '_');
 
     std::string ptype;
-    if (driverNameVec.size() >=3)
+    if (driverNameVec.size() >= 3)
         ptype = driverNameVec[2];
 
     PF_PluginType type;
@@ -270,16 +310,12 @@ bool PluginManager::loadPlugin(const std::string& driverFileName)
     else if (Utils::iequals(ptype, "writer"))
         type = PF_PluginType_Writer;
     else
-        throw pdal_error("Unknown plugin type '" + ptype +"'");
+        throw pdal_error("Unknown plugin type '" + ptype + "'");
 
-    if (loadByPath(full_path.string(), type))
-    {
-        return true;
-    }
-
-    return false;
+    return loadByPath(driverFileName, type);
 }
 
+
 bool PluginManager::guessLoadByPath(const std::string& driverName)
 {
     // parse the driver name into an expected pluginName, e.g.,
@@ -291,11 +327,12 @@ bool PluginManager::guessLoadByPath(const std::string& driverName)
     std::string pluginName = "libpdal_plugin_" + driverNameVec[0] + "_" +
         driverNameVec[1];
 
+    std::string pluginDir;
     std::string driver_path("PDAL_DRIVER_PATH");
-    std::string pluginDir = Utils::getenv(driver_path);
+    Utils::getenv(driver_path, pluginDir);
 
     // Default path below if not set.
-    if (pluginDir.size() == 0)
+    if (pluginDir.empty())
     {
         std::ostringstream oss;
         oss << PDAL_PLUGIN_INSTALL_PATH <<
@@ -303,37 +340,24 @@ bool PluginManager::guessLoadByPath(const std::string& driverName)
         pluginDir = oss.str();
     }
 
-    std::string plugin_debug("PDAL_DEBUG");
-    std::string plugin_debug_path = Utils::getenv(plugin_debug);
-    if (plugin_debug_path.size())
-    {
-        std::cerr << "PDAL: plugin search path '" << pluginDir <<"'"<<std::endl;
-    }
+    Log("PDAL", "stderr").get(LogLevel::Debug) <<
+        "Plugin search path '" << pluginDir << "'" << std::endl;
 
     std::vector<std::string> pluginPathVec = Utils::split2(pluginDir, ':');
     for (const auto& pluginPath : pluginPathVec)
     {
-        boost::filesystem::path path(pluginPath);
-
-        if (!FileUtils::fileExists(path.string()) ||
-            !boost::filesystem::is_directory(path))
+        if (!FileUtils::fileExists(pluginPath) ||
+            !FileUtils::isDirectory(pluginPath))
             continue;
 
-        boost::filesystem::directory_iterator dir(path), it, end;
-        // Looks like directory_iterator doesn't support range-based for loop in
-        // Boost v1.55. It fails Travis anyway, so I reverted it.
-        for (it = dir; it != end; ++it)
+        StringList files = FileUtils::directoryList(pluginPath);
+        for (auto file : files)
         {
-            boost::filesystem::path full_path = it->path();
-
-            if (boost::filesystem::is_directory(full_path))
+            if ((FileUtils::extension(file) != dynamicLibraryExtension) ||
+                FileUtils::isDirectory(file))
                 continue;
 
-            std::string ext = full_path.extension().string();
-            if (ext != dynamicLibraryExtension)
-                continue;
-
-            std::string stem = full_path.stem().string();
+            std::string stem = FileUtils::stem(file);
             std::string::size_type pos = stem.find_last_of('_');
             if (pos == std::string::npos || pos == stem.size() - 1 ||
                     stem.substr(pos + 1) != driverNameVec[1])
@@ -351,10 +375,8 @@ bool PluginManager::guessLoadByPath(const std::string& driverName)
             else
                 type = PF_PluginType_Reader;
 
-            if (loadByPath(full_path.string(), type))
-            {
+            if (loadByPath(file, type))
                 return true;
-            }
         }
     }
 
@@ -362,8 +384,7 @@ bool PluginManager::guessLoadByPath(const std::string& driverName)
 }
 
 
-bool PluginManager::loadByPath(const std::string& pluginPath,
-    PF_PluginType type)
+bool PluginManager::loadByPath(const std::string& pluginPath, int type)
 {
     // Only filenames that start with libpdal_plugin are candidates to be loaded
     // at runtime.  PDAL plugins are to be named in a specified form:
@@ -374,64 +395,66 @@ bool PluginManager::loadByPath(const std::string& pluginPath,
 
     bool loaded(false);
 
-    boost::filesystem::path path(pluginPath);
-    std::string pathname = Utils::tolower(path.filename().string());
+    std::string filename = Utils::tolower(FileUtils::getFilename(pluginPath));
 
     // If we are a valid type, and we're not yet already
     // loaded in the LibraryMap, load it.
 
-    std::string plugin_debug("PDAL_DEBUG");
-    std::string plugin_debug_path = Utils::getenv(plugin_debug);
+    Log log("PDAL", "stderr");
 
-    if (pluginTypeValid(pathname, type) &&
-        m_dynamicLibraryMap.find(path.string()) == m_dynamicLibraryMap.end())
+    if (pluginTypeValid(filename, type) && !libraryLoaded(pluginPath))
     {
         std::string errorString;
-        auto completePath(boost::filesystem::complete(path).string());
-        if (plugin_debug_path.size())
-        {
-            std::cerr << "PDAL: attempting to load plugin '" << completePath <<"'"<<std::endl;
-        }
+        auto completePath(FileUtils::toAbsolutePath(pluginPath));
+
+        log.get(LogLevel::Debug) << "Attempting to load plugin '" <<
+            completePath << "'." << std::endl;
 
         if (DynamicLibrary *d = loadLibrary(completePath, errorString))
         {
-            if (plugin_debug_path.size())
-            {
-                std::cerr << "PDAL: loaded plugin '" << completePath <<"'"<<std::endl;
-            }
+            log.get(LogLevel::Debug) << "Loaded plugin '" << completePath <<
+                "'." << std::endl;
             if (PF_InitFunc initFunc =
                     (PF_InitFunc)(d->getSymbol("PF_initPlugin")))
             {
                 loaded = initializePlugin(initFunc);
-                if (plugin_debug_path.size())
-                {
-                    std::cerr << "PDAL: initialized plugin '" << completePath <<"'"<<std::endl;
-                }
-            } else
-            {
-                if (plugin_debug_path.size())
-                {
-                    std::cerr << "PDAL: failed to initialize plugin '" << completePath <<"'"<<std::endl;
-                }
+                log.get(LogLevel::Debug) << "Initialized plugin '" <<
+                    completePath << "'." << std::endl;
             }
+            else
+                log.get(LogLevel::Error) << "Failed to initialize plugin function for plugin '" <<
+                    completePath << "'." << std::endl;
         }
     }
 
     return loaded;
 }
 
+
 void *PluginManager::createObject(const std::string& objectType)
 {
-    void* obj(0);
+    return s_instance.l_createObject(objectType);
+}
+
 
+void *PluginManager::l_createObject(const std::string& objectType)
+{
     auto find([this, &objectType]()->bool
     {
-        return m_exactMatchMap.count(objectType);
+        std::lock_guard<std::mutex> lock(m_mutex);
+        return m_plugins.count(objectType);
     });
 
+
+    void *obj(0);
     if (find() || (guessLoadByPath(objectType) && find()))
     {
-        obj = m_exactMatchMap[objectType].createFunc();
+        PF_CreateFunc f;
+        {
+            std::lock_guard<std::mutex> lock(m_mutex);
+            f = m_plugins[objectType].createFunc;
+        }
+        obj = f();
     }
 
     return obj;
@@ -439,23 +462,26 @@ void *PluginManager::createObject(const std::string& objectType)
 
 
 DynamicLibrary *PluginManager::loadLibrary(const std::string& path,
-    std::string & errorString)
+    std::string& errorString)
 {
     DynamicLibrary *d = DynamicLibrary::load(path, errorString);
 
     if (d)
     {
-        m_dynamicLibraryMap[boost::filesystem::complete(path).string()] =
-            DynLibPtr(d);
+        std::lock_guard<std::mutex> lock(m_mutex);
+        m_dynamicLibraryMap[FileUtils::toAbsolutePath(path)] = DynLibPtr(d);
     }
 
     return d;
 }
 
-
-const PluginManager::RegistrationMap& PluginManager::getRegistrationMap()
+bool PluginManager::libraryLoaded(const std::string& path)
 {
-    return m_exactMatchMap;
+    std::lock_guard<std::mutex> lock(m_mutex);
+
+    std::string p = FileUtils::toAbsolutePath(path);
+    return Utils::contains(m_dynamicLibraryMap, p);
 }
 
 } // namespace pdal
+
diff --git a/src/PointLayout.cpp b/src/PointLayout.cpp
index 883ddcf..6393eff 100644
--- a/src/PointLayout.cpp
+++ b/src/PointLayout.cpp
@@ -54,35 +54,42 @@ PointLayout::PointLayout()
     }
 }
 
+
 void PointLayout::finalize()
 {
     m_finalized = true;
 }
 
+
 void PointLayout::registerDims(std::vector<Dimension::Id::Enum> ids)
 {
     for (auto ii = ids.begin(); ii != ids.end(); ++ii)
         registerDim(*ii);
 }
 
+
 void PointLayout::registerDims(Dimension::Id::Enum *id)
 {
     while (*id != Dimension::Id::Unknown)
         registerDim(*id++);
 }
 
+
 void PointLayout::registerDim(Dimension::Id::Enum id)
 {
     registerDim(id, Dimension::defaultType(id));
 }
 
-void PointLayout::registerDim(Dimension::Id::Enum id, Dimension::Type::Enum type)
+
+void PointLayout::registerDim(Dimension::Id::Enum id,
+    Dimension::Type::Enum type)
 {
     Dimension::Detail dd = m_detail[id];
     dd.setType(resolveType(type, dd.type()));
     update(dd, Dimension::name(id));
 }
 
+
 Dimension::Id::Enum PointLayout::assignDim(const std::string& name,
     Dimension::Type::Enum type)
 {
@@ -105,6 +112,7 @@ Dimension::Id::Enum PointLayout::assignDim(const std::string& name,
     return Dimension::Id::Unknown;
 }
 
+
 Dimension::Id::Enum PointLayout::registerOrAssignDim(const std::string name,
    Dimension::Type::Enum type)
 {
@@ -117,6 +125,7 @@ Dimension::Id::Enum PointLayout::registerOrAssignDim(const std::string name,
     return assignDim(name, type);
 }
 
+
 DimTypeList PointLayout::dimTypes() const
 {
     DimTypeList dimTypes;
@@ -127,12 +136,14 @@ DimTypeList PointLayout::dimTypes() const
     return dimTypes;
 }
 
+
 DimType PointLayout::findDimType(const std::string& name) const
 {
     Dimension::Id::Enum id = findDim(name);
     return DimType(id, dimType(id));
 }
 
+
 Dimension::Id::Enum PointLayout::findDim(const std::string& name) const
 {
     Dimension::Id::Enum id = Dimension::id(name);
@@ -141,13 +152,16 @@ Dimension::Id::Enum PointLayout::findDim(const std::string& name) const
     return findProprietaryDim(name);
 }
 
-Dimension::Id::Enum PointLayout::findProprietaryDim(const std::string& name) const
+
+Dimension::Id::Enum
+PointLayout::findProprietaryDim(const std::string& name) const
 {
     auto di = m_propIds.find(name);
     return (di != m_propIds.end() ? di->second :
         Dimension::Id::Unknown);
 }
 
+
 std::string PointLayout::dimName(Dimension::Id::Enum id) const
 {
     std::string name = Dimension::name(id);
@@ -160,41 +174,50 @@ std::string PointLayout::dimName(Dimension::Id::Enum id) const
     return "";
 }
 
+
 bool PointLayout::hasDim(Dimension::Id::Enum id) const
 {
     return m_detail[id].type() != Dimension::Type::None;
 }
 
+
 const Dimension::IdList& PointLayout::dims() const
 {
     return m_used;
 }
 
+
 Dimension::Type::Enum PointLayout::dimType(Dimension::Id::Enum id) const
 {
     return dimDetail(id)->type();
 }
 
+
 size_t PointLayout::dimSize(Dimension::Id::Enum id) const
 {
     return dimDetail(id)->size();
 }
 
+
 size_t PointLayout::dimOffset(Dimension::Id::Enum id) const
 {
     return dimDetail(id)->offset();
 }
 
+
 size_t PointLayout::pointSize() const
 {
     return m_pointSize;
 }
 
+
 const Dimension::Detail* PointLayout::dimDetail(Dimension::Id::Enum id) const
 {
     return &(m_detail[(size_t)id]);
 }
 
+
+// Update the point layout given dimension detail and the dimension's name.
 bool PointLayout::update(Dimension::Detail dd, const std::string& name)
 {
     if (m_finalized)
@@ -204,6 +227,7 @@ bool PointLayout::update(Dimension::Detail dd, const std::string& name)
 
     Dimension::DetailList detail;
 
+    // Update the list of used IDs.
     bool used = Utils::contains(m_used, dd.id());
     for (auto id : m_used)
     {
@@ -232,6 +256,7 @@ bool PointLayout::update(Dimension::Detail dd, const std::string& name)
             return d1.id() < d2.id();
         };
 
+        // Sort dimensions based on size and then on ID.
         int offset = 0;
         std::sort(detail.begin(), detail.end(), sorter);
         for (auto& d : detail)
@@ -248,15 +273,17 @@ bool PointLayout::update(Dimension::Detail dd, const std::string& name)
     if (!used)
         m_used.push_back(dd.id());
 
+    // Update the detail for the ID.
     for (auto& dtemp : detail)
         m_detail[dtemp.id()] = dtemp;
 
     return true;
 }
 
-Dimension::Type::Enum PointLayout::resolveType(
-        Dimension::Type::Enum t1,
-        Dimension::Type::Enum t2)
+
+// Given two types, find a type that can represent the values of both.
+Dimension::Type::Enum PointLayout::resolveType(Dimension::Type::Enum t1,
+    Dimension::Type::Enum t2)
 {
     using namespace Dimension;
     using namespace Dimension::BaseType;
diff --git a/src/PointTable.cpp b/src/PointTable.cpp
index 8f10b3f..19dbd48 100644
--- a/src/PointTable.cpp
+++ b/src/PointTable.cpp
@@ -47,6 +47,26 @@ MetadataNode BasePointTable::privateMetadata(const std::string& name)
 }
 
 
+void SimplePointTable::setFieldInternal(Dimension::Id::Enum id, PointId idx,
+    const void *value)
+{
+    const Dimension::Detail *d = m_layoutRef.dimDetail(id);
+    const char *src  = (const char *)value;
+    char *dst = getDimension(d, idx);
+    std::copy(src, src + d->size(), dst);
+}
+
+
+void SimplePointTable::getFieldInternal(Dimension::Id::Enum id, PointId idx,
+    void *value) const
+{
+    const Dimension::Detail *d = m_layoutRef.dimDetail(id);
+    const char *src = getDimension(d, idx);
+    char *dst = (char *)value;
+    std::copy(src, src + d->size(), dst);
+}
+
+
 PointTable::~PointTable()
 {
     for (auto vi = m_blocks.begin(); vi != m_blocks.end(); ++vi)
@@ -72,17 +92,5 @@ char *PointTable::getPoint(PointId idx)
     return buf + pointsToBytes(idx % m_blockPtCnt);
 }
 
-
-void PointTable::setField(const Dimension::Detail *d, PointId idx,
-    const void *value)
-{
-    std::memcpy(getDimension(d, idx), value, d->size());
-}
-
-void PointTable::getField(const Dimension::Detail *d, PointId idx, void *value)
-{
-    std::memcpy(value, getDimension(d, idx), d->size());
-}
-
 } // namespace pdal
 
diff --git a/src/PointView.cpp b/src/PointView.cpp
index 4b2cc5e..74c4301 100644
--- a/src/PointView.cpp
+++ b/src/PointView.cpp
@@ -37,11 +37,23 @@
 #include <pdal/PointView.hpp>
 #include <pdal/PointViewIter.hpp>
 
-#include <boost/lexical_cast.hpp>
-
 namespace pdal
 {
 
+int PointView::m_lastId = 0;
+
+PointView::PointView(PointTableRef pointTable) : m_pointTable(pointTable),
+m_size(0), m_id(0)
+{
+	m_id = ++m_lastId;
+}
+
+PointView::PointView(PointTableRef pointTable, const SpatialReference& srs) :
+	m_pointTable(pointTable), m_size(0), m_id(0), m_spatialReference(srs)
+{
+	m_id = ++m_lastId;
+}
+
 PointViewIter PointView::begin()
 {
     return PointViewIter(this, 0);
@@ -54,6 +66,31 @@ PointViewIter PointView::end()
 }
 
 
+void PointView::setFieldInternal(Dimension::Id::Enum dim, PointId idx,
+    const void *buf)
+{
+    PointId rawId = 0;
+    if (idx == size())
+    {
+        rawId = m_pointTable.addPoint();
+        m_index.push_back(rawId);
+        m_size++;
+        assert(m_temps.empty());
+    }
+    else if (idx > size())
+    {
+        std::cerr << "Point index must increment.\n";
+        //error - throw?
+        return;
+    }
+    else
+    {
+        rawId = m_index[idx];
+    }
+    m_pointTable.setFieldInternal(dim, rawId, buf);
+}
+
+
 void PointView::calculateBounds(BOX2D& output) const
 {
     for (PointId idx = 0; idx < size(); idx++)
diff --git a/src/Polygon.cpp b/src/Polygon.cpp
new file mode 100644
index 0000000..ac85b3e
--- /dev/null
+++ b/src/Polygon.cpp
@@ -0,0 +1,515 @@
+/******************************************************************************
+* Copyright (c) 2016, Howard Butler (howard at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/Polygon.hpp>
+#include "cpl_string.h"
+
+#include <ogr_geometry.h>
+
+namespace pdal
+{
+
+Polygon::Polygon()
+    : m_geom(0)
+    , m_prepGeom(0)
+    , m_ctx(geos::ErrorHandler::get().ctx())
+{
+    m_geom = GEOSGeom_createEmptyPolygon_r(m_ctx);
+}
+
+
+Polygon::Polygon(const std::string& wkt_or_json, SpatialReference ref,
+        geos::ErrorHandler& err)
+    : m_geom(0)
+    , m_prepGeom(0)
+    , m_srs(ref)
+    , m_ctx(err.ctx())
+{
+    update(wkt_or_json, ref);
+}
+
+
+Polygon::Polygon(const std::string& wkt_or_json, SpatialReference ref,
+    GEOSContextHandle_t ctx)
+    : m_geom(0)
+    , m_prepGeom(0)
+    , m_srs(ref)
+    , m_ctx(ctx)
+{
+    update(wkt_or_json, ref);
+}
+
+
+Polygon::~Polygon()
+{
+    if (m_geom)
+        GEOSGeom_destroy_r(m_ctx, m_geom);
+    if (m_prepGeom)
+        GEOSPreparedGeom_destroy_r(m_ctx, m_prepGeom);
+    m_geom = 0;
+    m_prepGeom = 0;
+}
+
+
+void Polygon::update(const std::string& wkt_or_json, SpatialReference ref)
+{
+    bool isJson = wkt_or_json.find("{") != wkt_or_json.npos ||
+                  wkt_or_json.find("}") != wkt_or_json.npos;
+
+    if (!isJson)
+    {
+        m_geom = GEOSGeomFromWKT_r(m_ctx, wkt_or_json.c_str());
+        if (!m_geom)
+            throw pdal_error("Unable to create geometry from input WKT");
+    }
+    else
+    {
+        // Assume it is GeoJSON and try constructing from that
+        OGRGeometryH json = OGR_G_CreateGeometryFromJson(wkt_or_json.c_str());
+
+        if (!json)
+            throw pdal_error("Unable to create geometry from "
+                "input GeoJSON");
+
+        char* gdal_wkt(0);
+        OGRErr err = OGR_G_ExportToWkt(json, &gdal_wkt);
+        m_geom = GEOSGeomFromWKT_r(m_ctx, gdal_wkt);
+        //ABELL - Why should this ever throw?  Is it worth catching if
+        //  we don't know why?
+        if (!m_geom)
+            throw pdal_error("Unable to create GEOS geometry from OGR WKT!");
+        OGRFree(gdal_wkt);
+        OGR_G_DestroyGeometry(json);
+    }
+    prepare();
+}
+
+
+void Polygon::prepare()
+{
+    if (m_geom)
+    {
+        m_prepGeom = GEOSPrepare_r(m_ctx, m_geom);
+        if (!m_prepGeom)
+            throw pdal_error("unable to prepare geometry for index-accelerated access");
+    }
+}
+
+Polygon& Polygon::operator=(const Polygon& input)
+{
+
+    if (&input!= this)
+    {
+        m_ctx = input.m_ctx;
+        m_srs = input.m_srs;
+        m_geom = GEOSGeom_clone_r(m_ctx, input.m_geom);
+        prepare();
+    }
+    return *this;
+
+
+}
+
+Polygon::Polygon(const Polygon& input)
+    : m_srs(input.m_srs)
+    , m_ctx(input.m_ctx)
+{
+    assert(input.m_geom != 0);
+    m_geom = GEOSGeom_clone_r(m_ctx, input.m_geom);
+    assert(m_geom != 0);
+    m_prepGeom = 0;
+    prepare();
+}
+
+
+Polygon::Polygon(GEOSGeometry* g, const SpatialReference& srs,
+    geos::ErrorHandler& err)
+    : m_geom(GEOSGeom_clone_r(err.ctx(), g))
+    , m_srs(srs)
+    , m_ctx(err.ctx())
+{
+    prepare();
+}
+
+
+Polygon::Polygon(GEOSGeometry* g, const SpatialReference& srs,
+    GEOSContextHandle_t ctx)
+    : m_geom(GEOSGeom_clone_r(ctx, g))
+    , m_srs(srs)
+    , m_ctx(ctx)
+{
+    prepare();
+}
+
+
+Polygon::Polygon(OGRGeometryH g, const SpatialReference& srs,
+    geos::ErrorHandler& err) : m_srs(srs) , m_ctx(err.ctx())
+{
+    OGRwkbGeometryType t = OGR_G_GetGeometryType(g);
+
+    if (!(t == wkbPolygon ||
+        t == wkbMultiPolygon ||
+        t == wkbPolygon25D ||
+        t == wkbMultiPolygon25D))
+    {
+        std::ostringstream oss;
+        oss << "pdal::Polygon cannot construct geometry because "
+            "OGR geometry is not Polygon or MultiPolygon!";
+        throw pdal::pdal_error(oss.str());
+    }
+
+    OGRGeometry *ogr_g = (OGRGeometry*)g;
+    //
+    // Convert the the GDAL geom to WKB in order to avoid the version
+    // context issues with exporting directoly to GEOS.
+    OGRwkbByteOrder bo =
+        GEOS_getWKBByteOrder() == GEOS_WKB_XDR ? wkbXDR : wkbNDR;
+    int wkbSize = ogr_g->WkbSize();
+    std::vector<unsigned char> wkb(wkbSize);
+
+    ogr_g->exportToWkb(bo, wkb.data());
+    m_geom = GEOSGeomFromWKB_buf_r(m_ctx, wkb.data(), wkbSize);
+    prepare();
+
+}
+
+Polygon::Polygon(const BOX2D& box) : m_ctx(geos::ErrorHandler::get().ctx())
+{
+    BOX3D box3(box.minx, box.miny, 0.0,
+               box.maxx, box.maxy, 0.0);
+    initializeFromBounds(box3);
+}
+
+
+Polygon::Polygon(const BOX3D& box) : m_ctx(geos::ErrorHandler::get().ctx())
+{
+    initializeFromBounds(box);
+}
+
+
+void Polygon::initializeFromBounds(const BOX3D& box)
+{
+    GEOSCoordSequence* coords = GEOSCoordSeq_create_r(m_ctx, 5, 3);
+    auto set_coordinate = [coords, this](int pt_num, const double&x,
+        const double& y, const double& z)
+    {
+        if (!GEOSCoordSeq_setX_r(m_ctx, coords, pt_num, x))
+            throw pdal_error("unable to set x for coordinate sequence");
+        if (!GEOSCoordSeq_setY_r(m_ctx, coords, pt_num, y))
+            throw pdal_error("unable to set y for coordinate sequence");
+        if (!GEOSCoordSeq_setZ_r(m_ctx, coords, pt_num, z))
+            throw pdal_error("unable to set z for coordinate sequence");
+    };
+
+    set_coordinate(0, box.minx, box.miny, box.minz);
+    set_coordinate(1, box.minx, box.maxy, box.minz);
+    set_coordinate(2, box.maxx, box.maxy, box.maxz);
+    set_coordinate(3, box.maxx, box.miny, box.maxz);
+    set_coordinate(4, box.minx, box.miny, box.minz);
+
+
+    GEOSGeometry* ring = GEOSGeom_createLinearRing_r(m_ctx, coords);
+    if (!ring)
+        throw pdal_error("unable to create linear ring from BOX2D");
+
+
+    m_geom = GEOSGeom_createPolygon_r(m_ctx, ring, 0, 0);
+    if (!m_geom)
+        throw pdal_error("unable to create polygon from linear ring in "
+            "BOX2D constructor");
+    prepare();
+}
+
+
+Polygon Polygon::transform(const SpatialReference& ref) const
+{
+    if (m_srs.empty())
+        throw pdal_error("Polygon::transform failed due to m_srs being empty");
+    if (ref.empty())
+        throw pdal_error("Polygon::transform failed due to ref being empty");
+
+    gdal::SpatialRef fromRef(m_srs.getWKT());
+    gdal::SpatialRef toRef(ref.getWKT());
+    gdal::Geometry geom(wkt(12, true), fromRef);
+    geom.transform(toRef);
+    return Polygon(geom.wkt(), ref, m_ctx);
+}
+
+
+Polygon Polygon::simplify(double distance_tolerance,
+    double area_tolerance) const
+{
+    GEOSGeometry *smoothed =
+        GEOSTopologyPreserveSimplify_r(m_ctx, m_geom, distance_tolerance);
+    if (!smoothed)
+        throw pdal_error("Unable to simplify input geometry!");
+
+    std::vector<GEOSGeometry*> geometries;
+
+    int numGeom = GEOSGetNumGeometries_r(m_ctx, smoothed);
+    for (int n = 0; n < numGeom; ++n)
+    {
+        const GEOSGeometry* m = GEOSGetGeometryN_r(m_ctx, smoothed, n);
+        if (!m)
+            throw pdal::pdal_error("Unable to Get GeometryN");
+
+        const GEOSGeometry* ering = GEOSGetExteriorRing_r(m_ctx, m);
+        if (!ering)
+            throw pdal::pdal_error("Unable to Get Exterior Ring");
+
+        GEOSGeometry* exterior = GEOSGeom_clone_r(m_ctx,
+            GEOSGetExteriorRing_r(m_ctx, m));
+        if (!exterior)
+            throw pdal::pdal_error("Unable to clone exterior ring!");
+
+        std::vector<GEOSGeometry*> keep_rings;
+        int numRings = GEOSGetNumInteriorRings_r(m_ctx, m);
+        for (int i = 0; i < numRings; ++i)
+        {
+            double area(0.0);
+
+            const GEOSGeometry* iring =
+                GEOSGetInteriorRingN_r(m_ctx, m, i);
+            if (!iring)
+                throw pdal::pdal_error("Unable to Get Interior Ring");
+
+            GEOSGeometry* cring = GEOSGeom_clone_r(m_ctx, iring);
+            if (!cring)
+                throw pdal::pdal_error("Unable to clone interior ring!");
+            GEOSGeometry* aring = GEOSGeom_createPolygon_r(m_ctx, cring,
+                NULL, 0);
+
+            int errored = GEOSArea_r(m_ctx, aring, &area);
+            if (errored == 0)
+                throw pdal::pdal_error("Unable to get area of ring!");
+            if (area > area_tolerance)
+            {
+                keep_rings.push_back(cring);
+            }
+        }
+
+        GEOSGeometry* p = GEOSGeom_createPolygon_r(m_ctx, exterior,
+            keep_rings.data(), keep_rings.size());
+        if (p == NULL) throw
+            pdal::pdal_error("smooth polygon could not be created!" );
+        geometries.push_back(p);
+    }
+
+    GEOSGeometry* o = GEOSGeom_createCollection_r(m_ctx, GEOS_MULTIPOLYGON,
+        geometries.data(), geometries.size());
+    Polygon p(o, m_srs, m_ctx);
+    GEOSGeom_destroy_r(m_ctx, smoothed);
+    GEOSGeom_destroy_r(m_ctx, o);
+
+    return p;
+}
+
+double Polygon::area() const
+{
+    double output(0.0);
+    int errored = GEOSArea_r(m_ctx, m_geom, &output);
+    if (errored == 0)
+        throw pdal::pdal_error("Unable to get area of ring!");
+    return output;
+}
+
+
+bool Polygon::covers(PointRef& ref) const
+{
+    GEOSCoordSequence* coords = GEOSCoordSeq_create_r(m_ctx, 1, 3);
+    if (!coords)
+        throw pdal_error("Unable to allocate coordinate sequence");
+
+    const double x = ref.getFieldAs<double>(Dimension::Id::X);
+    const double y = ref.getFieldAs<double>(Dimension::Id::Y);
+    const double z = ref.getFieldAs<double>(Dimension::Id::Z);
+
+    if (!GEOSCoordSeq_setX_r(m_ctx, coords, 0, x))
+        throw pdal_error("unable to set x for coordinate sequence");
+    if (!GEOSCoordSeq_setY_r(m_ctx, coords, 0, y))
+        throw pdal_error("unable to set y for coordinate sequence");
+    if (!GEOSCoordSeq_setZ_r(m_ctx, coords, 0, z))
+        throw pdal_error("unable to set z for coordinate sequence");
+    GEOSGeometry* p = GEOSGeom_createPoint_r(m_ctx, coords);
+    if (!p)
+        throw pdal_error("unable to allocate candidate test point");
+
+    bool covers = (bool)(GEOSPreparedCovers_r(m_ctx, m_prepGeom, p));
+    GEOSGeom_destroy_r(m_ctx, p);
+
+    return covers;
+}
+
+
+BOX3D Polygon::bounds() const
+{
+    uint32_t numInputDims;
+    BOX3D output;
+
+    GEOSGeometry* boundary = GEOSGeom_clone_r(m_ctx, m_geom);
+
+    // Smash out multi*
+    if (GEOSGeomTypeId_r(m_ctx, m_geom) > 3)
+        boundary = GEOSEnvelope_r(m_ctx, m_geom);
+
+    GEOSGeometry const* ring = GEOSGetExteriorRing_r(m_ctx, boundary);
+    GEOSCoordSequence const* coords = GEOSGeom_getCoordSeq_r(m_ctx, ring);
+
+    GEOSCoordSeq_getDimensions_r(m_ctx, coords, &numInputDims);
+
+    uint32_t count(0);
+    GEOSCoordSeq_getSize_r(m_ctx, coords, &count);
+
+    double x(0.0);
+    double y(0.0);
+    double z(0.0);
+    for (unsigned i = 0; i < count; ++i)
+    {
+        GEOSCoordSeq_getOrdinate_r(m_ctx, coords, i, 0, &x);
+        GEOSCoordSeq_getOrdinate_r(m_ctx, coords, i, 1, &y);
+        if (numInputDims > 2)
+            GEOSCoordSeq_getOrdinate_r(m_ctx, coords, i, 2, &z);
+        output.grow(x, y, z);
+    }
+    GEOSGeom_destroy_r(m_ctx, boundary);
+
+    return output;
+}
+
+
+bool Polygon::equals(const Polygon& p, double tolerance) const
+{
+    return (bool) GEOSEqualsExact_r(m_ctx, m_geom, p.m_geom, tolerance);
+}
+
+
+
+bool Polygon::operator==(const Polygon& input) const
+{
+    return this->equals(input);
+}
+
+
+bool Polygon::operator!=(const Polygon& input) const
+{
+    return !(this->equals(input));
+}
+
+
+bool Polygon::valid() const
+{
+    int gtype = GEOSGeomTypeId_r(m_ctx, m_geom);
+    if (gtype != GEOS_POLYGON && gtype != GEOS_MULTIPOLYGON)
+        return false;
+
+    return (bool)GEOSisValid_r(m_ctx, m_geom);
+}
+
+
+std::string Polygon::validReason() const
+{
+    int gtype = GEOSGeomTypeId_r(m_ctx, m_geom);
+    if (gtype != GEOS_POLYGON && gtype != GEOS_MULTIPOLYGON)
+        return std::string("Geometry is not Polygon or MultiPolygon");
+
+    char *reason = GEOSisValidReason_r(m_ctx, m_geom);
+    std::string output(reason);
+    GEOSFree_r(m_ctx, reason);
+    return output;
+}
+
+
+std::string Polygon::wkt(double precision, bool bOutputZ) const
+{
+    GEOSWKTWriter *writer = GEOSWKTWriter_create_r(m_ctx);
+    GEOSWKTWriter_setRoundingPrecision_r(m_ctx, writer, precision);
+    if (bOutputZ)
+        GEOSWKTWriter_setOutputDimension_r(m_ctx, writer, 3);
+
+    char *smoothWkt = GEOSWKTWriter_write_r(m_ctx, writer, m_geom);
+    std::string output(smoothWkt);
+    GEOSFree_r(m_ctx, smoothWkt);
+    GEOSWKTWriter_destroy_r(m_ctx, writer);
+    return output;
+}
+
+
+std::string Polygon::json(double precision) const
+{
+    std::ostringstream prec;
+    prec << precision;
+    char **papszOptions = NULL;
+    papszOptions = CSLSetNameValue(papszOptions, "COORDINATE_PRECISION",
+        prec.str().c_str() );
+
+    std::string w(wkt());
+
+    gdal::SpatialRef srs(m_srs.getWKT(pdal::SpatialReference::eCompoundOK));
+    gdal::Geometry g(w, srs);
+
+    char* json = OGR_G_ExportToJsonEx(g.get(), papszOptions);
+
+    std::string output(json);
+    OGRFree(json);
+    return output;
+}
+
+
+std::ostream& operator<<(std::ostream& ostr, const Polygon& p)
+{
+    ostr << p.wkt();
+    return ostr;
+}
+
+
+std::istream& operator>>(std::istream& istr, Polygon& p)
+{
+
+    std::ostringstream oss;
+    oss << istr.rdbuf();
+
+    std::string wkt = oss.str();
+
+    try
+    {
+        p.update(wkt);
+    }
+    catch (pdal_error)
+    {
+        istr.setstate(std::ios::failbit);
+    }
+    return istr;
+}
+
+} // namespace geos
diff --git a/src/Reader.cpp b/src/Reader.cpp
index f4dd957..56ac230 100644
--- a/src/Reader.cpp
+++ b/src/Reader.cpp
@@ -46,20 +46,4 @@ void Reader::readerProcessOptions(const Options& options)
         m_count = options.getValueOrThrow<point_count_t>("count");
 }
 
-
-boost::property_tree::ptree Reader::serializePipeline() const
-{
-    boost::property_tree::ptree tree;
-
-    tree.add("<xmlattr>.type", getName());
-
-    PipelineWriter::write_option_ptree(tree, getOptions());
-    PipelineWriter::writeMetadata(tree, m_metadata);
-
-    boost::property_tree::ptree root;
-    root.add_child("Reader", tree);
-
-    return root;
-}
-
 } // namespace pdal
diff --git a/src/SpatialReference.cpp b/src/SpatialReference.cpp
index 8b14af1..c112dd7 100644
--- a/src/SpatialReference.cpp
+++ b/src/SpatialReference.cpp
@@ -34,6 +34,7 @@
 
 #include <pdal/SpatialReference.hpp>
 #include <pdal/PDALUtils.hpp>
+#include <pdal/Metadata.hpp>
 
 // gdal
 #ifdef PDAL_COMPILER_CLANG
@@ -120,20 +121,29 @@ std::string SpatialReference::getWKT(WKTModeFlag mode_flag , bool pretty) const
 
 void SpatialReference::setFromUserInput(std::string const& v)
 {
-    char* poWKT = 0;
-    const char* input = v.c_str();
+    if (v.empty())
+    {
+        m_wkt.clear();
+        return;
+    }
 
     OGRSpatialReference srs(NULL);
+
+    CPLErrorReset();
+    const char* input = v.c_str();
     OGRErr err = srs.SetFromUserInput(const_cast<char *>(input));
     if (err != OGRERR_NONE)
     {
-
         std::ostringstream oss;
-        oss << "Could not import coordinate system '" << input << "'";
-        oss << " message '" << CPLGetLastErrorMsg() << "'";
+        std::string msg = CPLGetLastErrorMsg();
+        if (msg.empty())
+            msg = "(unknown reason)";
+        oss << "Could not import coordinate system '" << input << "': " <<
+            msg << ".";
         throw pdal_error(oss.str());
     }
 
+    char *poWKT = 0;
     srs.exportToWkt(&poWKT);
     std::string tmp(poWKT);
     CPLFree(poWKT);
@@ -182,6 +192,33 @@ std::string SpatialReference::getVertical() const
     return tmp;
 }
 
+std::string SpatialReference::getVerticalUnits() const
+{
+    std::string tmp("");
+
+    std::string wkt = getWKT(eCompoundOK);
+    const char* poWKT = wkt.c_str();
+    OGRSpatialReference* poSRS =
+        (OGRSpatialReference*)OSRNewSpatialReference(m_wkt.c_str());
+    if (poSRS)
+    {
+        OGR_SRSNode* node = poSRS->GetAttrNode("VERT_CS");
+        if (node)
+        {
+            char* units(0);
+            double u = poSRS->GetLinearUnits(&units);
+            tmp = units;
+            CPLFree(units);
+
+            Utils::trim(tmp);
+
+        }
+    }
+
+    return tmp;
+}
+
+
 std::string SpatialReference::getHorizontal() const
 {
     std::string tmp("");
@@ -203,6 +240,26 @@ std::string SpatialReference::getHorizontal() const
     return tmp;
 }
 
+std::string SpatialReference::getHorizontalUnits() const
+{
+    std::string tmp("");
+
+    std::string wkt = getWKT(eHorizontalOnly);
+    const char* poWKT = wkt.c_str();
+    OGRSpatialReference srs(NULL);
+    if (OGRERR_NONE == srs.importFromWkt(const_cast<char **>(&poWKT)))
+    {
+        char* units(0);
+        double u = srs.GetLinearUnits(&units);
+        tmp = units;
+        CPLFree(units);
+
+        Utils::trim(tmp);
+    }
+
+    return tmp;
+}
+
 void SpatialReference::setProj4(std::string const& v)
 {
     char* poWKT = 0;
@@ -263,6 +320,14 @@ bool SpatialReference::isGeographic() const
     return output;
 }
 
+bool SpatialReference::isGeocentric() const
+{
+    OGRSpatialReferenceH current =
+        OSRNewSpatialReference(getWKT(eCompoundOK, false).c_str());
+    bool output = OSRIsGeocentric(current);
+    OSRDestroySpatialReference(current);
+    return output;
+}
 
 int SpatialReference::calculateZone(double lon, double lat)
 {
@@ -398,7 +463,7 @@ void SpatialReference::dump() const
 
 std::ostream& operator<<(std::ostream& ostr, const SpatialReference& srs)
 {
-    std::string wkt = Utils::toPTree(srs).get<std::string>("prettycompoundwkt");
+    std::string wkt = srs.getWKT(SpatialReference::eCompoundOK, true);
     ostr << wkt;
     return ostr;
 }
diff --git a/src/Stage.cpp b/src/Stage.cpp
index 6ca50ab..bc1aa87 100644
--- a/src/Stage.cpp
+++ b/src/Stage.cpp
@@ -32,30 +32,27 @@
 * OF SUCH DAMAGE.
 ****************************************************************************/
 
-#include <pdal/GlobalEnvironment.hpp>
+#include <pdal/GDALUtils.hpp>
+#include <pdal/GEOSUtils.hpp>
+#include <pdal/PipelineManager.hpp>
 #include <pdal/Stage.hpp>
 #include <pdal/SpatialReference.hpp>
-#include <pdal/UserCallback.hpp>
+#include <pdal/PDALUtils.hpp>
 
 #include "StageRunner.hpp"
 
+#include <iterator>
 #include <memory>
 
 namespace pdal
 {
 
-
-Stage::Stage()
-  : m_callback(new UserCallback), m_progressFd(-1)
+Stage::Stage() : m_progressFd(-1)
 {
     Construct();
 }
 
 
-/// Only add options if an option with the same name doesn't already exist.
-///
-/// \param[in] ops  Options to add.
-///
 void Stage::addConditionalOptions(const Options& opts)
 {
     for (const auto& o : opts.getOptions())
@@ -71,6 +68,36 @@ void Stage::Construct()
 }
 
 
+void Stage::serialize(MetadataNode root, PipelineWriter::TagMap& tags) const
+{
+    for (Stage *s : m_inputs)
+        s->serialize(root, tags);
+
+    auto tagname = [tags](const Stage *s)
+    {
+        const auto ti = tags.find(s);
+        return ti->second;
+    };
+
+    MetadataNode anon("pipeline");
+    anon.add("type", getName());
+    anon.add("tag", tagname(this));
+    m_options.toMetadata(anon);
+    for (Stage *s : m_inputs)
+        anon.addList("inputs", tagname(s));
+    if (m_metadata.hasChildren())
+        anon.add(m_metadata.clone("execution_metadata"));
+    root.addList(anon);
+}
+
+QuickInfo Stage::preview()
+{
+    l_processOptions(m_options);
+    processOptions(m_options);
+    return inspect();
+}
+
+
 void Stage::prepare(PointTableRef table)
 {
     for (size_t i = 0; i < m_inputs.size(); ++i)
@@ -89,7 +116,7 @@ void Stage::prepare(PointTableRef table)
 
 PointViewSet Stage::execute(PointTableRef table)
 {
-    table.layout()->finalize();
+    table.finalize();
 
     PointViewSet views;
 
@@ -121,6 +148,7 @@ PointViewSet Stage::execute(PointTableRef table)
     table.clearSpatialReferences();
     for (auto const& it : views)
         table.addSpatialReference(it->spatialReference());
+    gdal::ErrorHandler::get().set(m_log, m_debug);
 
     // Do the ready operation and then start running all the views
     // through the stage.
@@ -139,7 +167,7 @@ PointViewSet Stage::execute(PointTableRef table)
     {
         StageRunnerPtr runner(it);
         PointViewSet temp = runner->wait();
-        
+
         // If our stage has a spatial reference, the view takes it on once
         // the stage has been run.
         if (!srs.empty())
@@ -152,6 +180,131 @@ PointViewSet Stage::execute(PointTableRef table)
 }
 
 
+// Streamed execution.
+void Stage::execute(StreamPointTable& table)
+{
+    typedef std::list<Stage *> StageList;
+
+    std::list<StageList> lists;
+    StageList stages;
+
+    table.finalize();
+
+    // Walk from the current stage backwards.  As we add each input, copy
+    // the list of stages and push it on a list.  We then pull a list from the
+    // front of list and keep going.  Placing on the back and pulling from the
+    // front insures that the stages will be executed in the order that they
+    // were added.  If we hit stage with no previous stages, we execute
+    // the stage list.
+    // All this often amounts to a bunch of list copying for
+    // no reason, but it's more simple than what we might otherwise do and
+    // this should be a nit in the grand scheme of execution time.
+    //
+    // As an example, if there are four paths from the end stage (writer) to
+    // reader stages, there will be four stage lists and execute(table, stages)
+    // will be called four times.
+    Stage *s = this;
+    stages.push_front(s);
+    while (true)
+    {
+        if (s->m_inputs.empty())
+            execute(table, stages);
+        else
+        {
+            for (auto s2 : s->m_inputs)
+            {
+                StageList newStages(stages);
+                newStages.push_front(s2);
+                lists.push_front(newStages);
+            }
+        }
+        if (lists.empty())
+            break;
+        stages = lists.back();
+        lists.pop_back();
+        s = stages.front();
+    }
+}
+
+
+void Stage::execute(StreamPointTable& table, std::list<Stage *>& stages)
+{
+    std::vector<bool> skips(table.capacity());
+    std::list<Stage *> filters;
+    SpatialReference srs;
+
+    // Separate out the first stage.
+    Stage *reader = stages.front();
+
+    // Build a list of all stages except the first.  We may have a writer in
+    // this list in addition to filters, but we treat them in the same way.
+    auto begin = stages.begin();
+    begin++;
+    std::copy(begin, stages.end(), std::back_inserter(filters));
+
+    for (Stage *s : stages)
+    {
+        s->ready(table);
+        srs = s->getSpatialReference();
+        if (!srs.empty())
+            table.setSpatialReference(srs);
+    }
+
+    // Loop until we're finished.  We handle the number of points up to
+    // the capacity of the StreamPointTable that we've been provided.
+
+    bool finished = false;
+    while (!finished)
+    {
+        // Clear the spatial reference when processing starts.
+        table.clearSpatialReferences();
+        PointId idx = 0;
+        PointRef point(table, idx);
+        point_count_t pointLimit = table.capacity();
+
+        // When we get false back from a reader, we're done, so set
+        // the point limit to the number of points processed in this loop
+        // of the table.
+        for (PointId idx = 0; idx < pointLimit; idx++)
+        {
+            point.setPointId(idx);
+            finished = !reader->processOne(point);
+            if (finished)
+                pointLimit = idx;
+        }
+        srs = reader->getSpatialReference();
+        if (!srs.empty())
+            table.setSpatialReference(srs);
+
+        // When we get a false back from a filter, we're filtering out a
+        // point, so add it to the list of skips so that it doesn't get
+        // processed by subsequent filters.
+        for (Stage *s : filters)
+        {
+            for (PointId idx = 0; idx < pointLimit; idx++)
+            {
+                if (skips[idx])
+                    continue;
+                point.setPointId(idx);
+                if (!s->processOne(point))
+                    skips[idx] = true;
+            }
+            srs = s->getSpatialReference();
+            if (!srs.empty())
+                table.setSpatialReference(srs);
+        }
+
+        // Yes, vector<bool> is terrible.  Can do something better later.
+        for (size_t i = 0; i < skips.size(); ++i)
+            skips[i] = false;
+        table.reset();
+    }
+
+    for (Stage *s : stages)
+        s->done(table);
+}
+
+
 void Stage::l_initialize(PointTableRef table)
 {
     m_metadata = table.metadata().add(getName());
@@ -164,8 +317,6 @@ void Stage::l_processOptions(const Options& options)
     m_verbose = options.getValueOrDefault<uint32_t>("verbose", 0);
     if (m_debug && !m_verbose)
         m_verbose = 1;
-    if (m_debug && !m_verbose)
-        m_verbose = 1;
 
     if (m_inputs.empty())
     {
@@ -189,6 +340,9 @@ void Stage::l_processOptions(const Options& options)
     }
     m_log->setLevel((LogLevel::Enum)m_verbose);
 
+    gdal::ErrorHandler::get().set(m_log, m_debug);
+    geos::ErrorHandler::get().set(m_log, m_debug);
+
     // If the user gave us an SRS via options, take that.
     try
     {
@@ -219,6 +373,7 @@ void Stage::setSpatialReference(const SpatialReference& spatialRef)
     setSpatialReference(m_metadata, spatialRef);
 }
 
+
 void Stage::setSpatialReference(MetadataNode& m,
     const SpatialReference& spatialRef)
 {
@@ -229,6 +384,7 @@ void Stage::setSpatialReference(MetadataNode& m,
     MetadataNode spatialNode = m.findChild(pred);
     if (spatialNode.empty())
     {
+        m.add(Utils::toMetadata(spatialRef));
         m.add("spatialreference",
            spatialRef.getWKT(SpatialReference::eHorizontalOnly, false),
            "SRS of this stage");
@@ -238,35 +394,5 @@ void Stage::setSpatialReference(MetadataNode& m,
     }
 }
 
-std::vector<Stage *> Stage::findStage(std::string name)
-{
-    std::vector<Stage *> output;
-
-    if (boost::iequals(getName(), name))
-        output.push_back(this);
-
-    for (auto const& stage : m_inputs)
-    {
-        if (boost::iequals(stage->getName(), name))
-            output.push_back(stage);
-        if (stage->getInputs().size())
-        {
-            auto hits = stage->findStage(name);
-            if (hits.size())
-                output.insert(output.end(), hits.begin(), hits.end());
-        }
-    }
-
-    return output;
-}
-
-std::ostream& operator<<(std::ostream& ostr, const Stage& stage)
-{
-    ostr << "  Name: " << stage.getName() << std::endl;
-    ostr << "  Spatial Reference:" << std::endl;
-    ostr << "    WKT: " << stage.getSpatialReference().getWKT() << std::endl;
-
-    return ostr;
-}
-
 } // namespace pdal
+
diff --git a/src/StageFactory.cpp b/src/StageFactory.cpp
index c6cd431..6865a73 100644
--- a/src/StageFactory.cpp
+++ b/src/StageFactory.cpp
@@ -34,12 +34,15 @@
 
 #include <pdal/StageFactory.hpp>
 #include <pdal/PluginManager.hpp>
+#include <pdal/util/FileUtils.hpp>
 
 // filters
+#include <attribute/AttributeFilter.hpp>
 #include <chipper/ChipperFilter.hpp>
 #include <colorization/ColorizationFilter.hpp>
 #include <crop/CropFilter.hpp>
 #include <decimation/DecimationFilter.hpp>
+#include <divider/DividerFilter.hpp>
 #include <ferry/FerryFilter.hpp>
 #include <merge/MergeFilter.hpp>
 #include <mortonorder/MortonOrderFilter.hpp>
@@ -57,11 +60,12 @@
 #include <ilvis2/Ilvis2Reader.hpp>
 #include <las/LasReader.hpp>
 #include <optech/OptechReader.hpp>
-#include <pdal/BufferReader.hpp>
+#include <buffer/BufferReader.hpp>
 #include <ply/PlyReader.hpp>
 #include <qfit/QfitReader.hpp>
 #include <sbet/SbetReader.hpp>
 #include <terrasolid/TerrasolidReader.hpp>
+#include <text/TextReader.hpp>
 #include <tindex/TIndexReader.hpp>
 
 // writers
@@ -73,8 +77,6 @@
 #include <text/TextWriter.hpp>
 #include <null/NullWriter.hpp>
 
-#include <boost/filesystem.hpp>
-
 #include <sstream>
 #include <string>
 #include <stdio.h> // for funcptr
@@ -89,11 +91,11 @@ std::string StageFactory::inferReaderDriver(const std::string& filename)
     if (Utils::iequals(http, "http"))
         return "readers.greyhound";
 
-    std::string ext = boost::filesystem::extension(filename);
+    std::string ext = FileUtils::extension(filename);
     std::map<std::string, std::string> drivers;
     drivers["bin"] = "readers.terrasolid";
     drivers["bpf"] = "readers.bpf";
-    drivers["cpd"] = "readers.optech";
+    drivers["csd"] = "readers.optech";
     drivers["greyhound"] = "readers.greyhound";
     drivers["icebridge"] = "readers.icebridge";
     drivers["las"] = "readers.las";
@@ -109,10 +111,14 @@ std::string StageFactory::inferReaderDriver(const std::string& filename)
     drivers["sqlite"] = "readers.sqlite";
     drivers["sid"] = "readers.mrsid";
     drivers["tindex"] = "readers.tindex";
+    drivers["txt"] = "readers.text";
+    drivers["h5"] = "readers.icebridge";
 
-    if (ext == "") return "";
+    if (ext == "")
+        return "";
     ext = ext.substr(1, ext.length()-1);
-    if (ext == "") return "";
+    if (ext == "")
+        return "";
 
     ext = Utils::tolower(ext);
     std::string driver = drivers[ext];
@@ -122,7 +128,7 @@ std::string StageFactory::inferReaderDriver(const std::string& filename)
 
 std::string StageFactory::inferWriterDriver(const std::string& filename)
 {
-    std::string ext = Utils::tolower(boost::filesystem::extension(filename));
+    std::string ext = Utils::tolower(FileUtils::extension(filename));
 
     std::map<std::string, std::string> drivers;
     drivers["bpf"] = "writers.bpf";
@@ -159,15 +165,15 @@ std::string StageFactory::inferWriterDriver(const std::string& filename)
 pdal::Options StageFactory::inferWriterOptionsChanges(
     const std::string& filename)
 {
-    std::string ext = boost::filesystem::extension(filename);
+    std::string ext = FileUtils::extension(filename);
     ext = Utils::tolower(ext);
     Options options;
 
     if (Utils::iequals(ext,".laz"))
         options.add("compression", true);
 
-    PluginManager & pm = PluginManager::getInstance();
-    if (Utils::iequals(ext, ".pcd") && pm.createObject("writers.pcd"))
+    if (Utils::iequals(ext, ".pcd") &&
+        PluginManager::createObject("writers.pcd"))
     {
         options.add("format","PCD");
     }
@@ -176,21 +182,22 @@ pdal::Options StageFactory::inferWriterOptionsChanges(
     return options;
 }
 
+
 StageFactory::StageFactory(bool no_plugins)
 {
-    PluginManager & pm = PluginManager::getInstance();
     if (!no_plugins)
     {
-        pm.loadAll(PF_PluginType_Filter);
-        pm.loadAll(PF_PluginType_Reader);
-        pm.loadAll(PF_PluginType_Writer);
+        PluginManager::loadAll(PF_PluginType_Filter | PF_PluginType_Reader |
+            PF_PluginType_Writer);
     }
 
     // filters
+    PluginManager::initializePlugin(AttributeFilter_InitPlugin);
     PluginManager::initializePlugin(ChipperFilter_InitPlugin);
     PluginManager::initializePlugin(ColorizationFilter_InitPlugin);
     PluginManager::initializePlugin(CropFilter_InitPlugin);
     PluginManager::initializePlugin(DecimationFilter_InitPlugin);
+    PluginManager::initializePlugin(DividerFilter_InitPlugin);
     PluginManager::initializePlugin(FerryFilter_InitPlugin);
     PluginManager::initializePlugin(MergeFilter_InitPlugin);
     PluginManager::initializePlugin(MortonOrderFilter_InitPlugin);
@@ -212,6 +219,7 @@ StageFactory::StageFactory(bool no_plugins)
     PluginManager::initializePlugin(QfitReader_InitPlugin);
     PluginManager::initializePlugin(SbetReader_InitPlugin);
     PluginManager::initializePlugin(TerrasolidReader_InitPlugin);
+    PluginManager::initializePlugin(TextReader_InitPlugin);
     PluginManager::initializePlugin(TIndexReader_InitPlugin);
 
     // writers
@@ -224,54 +232,31 @@ StageFactory::StageFactory(bool no_plugins)
     PluginManager::initializePlugin(NullWriter_InitPlugin);
 }
 
-/// Create a stage and return a pointer to the created stage.  Caller takes
-/// ownership unless the ownStage argument is true.
-///
-/// \param[in] stage_name  Type of stage to by created.
-/// \param[in] ownStage    Whether the factory should own the stage.
-/// \return  Pointer to created stage.
-///
-Stage *StageFactory::createStage(std::string const& stage_name,
-    bool ownStage)
-{
-    PluginManager& pm = PluginManager::getInstance();
-    Stage *s = static_cast<Stage*>(pm.createObject(stage_name));
-    if (s && ownStage)
-        m_ownedStages.push_back(std::unique_ptr<Stage>(s));
-    return s;
-}
-
 
-StringList StageFactory::getStageNames() const
+Stage *StageFactory::createStage(std::string const& stage_name)
 {
-    PluginManager & pm = PluginManager::getInstance();
-    PluginManager::RegistrationMap rm = pm.getRegistrationMap();
-    StringList nv;
-    for (auto r : rm)
+    static_assert(0 < sizeof(Stage), "");
+    Stage *s = static_cast<Stage*>(PluginManager::createObject(stage_name));
+    if (s)
     {
-        if (r.second.pluginType == PF_PluginType_Filter ||
-            r.second.pluginType == PF_PluginType_Reader ||
-            r.second.pluginType == PF_PluginType_Writer)
-            nv.push_back(r.first);
+        std::lock_guard<std::mutex> lock(m_mutex);
+        m_ownedStages.push_back(std::unique_ptr<Stage>(s));
     }
-    return nv;
+    return s;
 }
 
 
-std::map<std::string, std::string> StageFactory::getStageMap() const
+void StageFactory::destroyStage(Stage *s)
 {
-    PluginManager& pm = PluginManager::getInstance();
-    PluginManager::RegistrationMap rm = pm.getRegistrationMap();
-    std::map<std::string, std::string> sm;
-    for (auto r : rm)
+    std::lock_guard<std::mutex> lock(m_mutex);
+    for (auto it = m_ownedStages.begin(); it != m_ownedStages.end(); ++it)
     {
-        if (r.second.pluginType == PF_PluginType_Filter ||
-            r.second.pluginType == PF_PluginType_Reader ||
-            r.second.pluginType == PF_PluginType_Writer)
-            sm.insert(std::make_pair(r.first, r.second.description));
+        if (s == it->get())
+        {
+            m_ownedStages.erase(it);
+            break;
+        }
     }
-    return sm;
 }
 
 } // namespace pdal
-
diff --git a/src/Writer.cpp b/src/Writer.cpp
index 6889de4..2fd3654 100644
--- a/src/Writer.cpp
+++ b/src/Writer.cpp
@@ -34,7 +34,6 @@
 
 #include <pdal/Writer.hpp>
 #include <pdal/Stage.hpp>
-#include <pdal/UserCallback.hpp>
 
 #include <pdal/PipelineWriter.hpp>
 
@@ -138,23 +137,28 @@ void Writer::setAutoXForm(const PointViewPtr view)
 }
 
 
-boost::property_tree::ptree Writer::serializePipeline() const
+void Writer::handleFilenameTemplate()
 {
-    boost::property_tree::ptree tree;
-
-    tree.add("<xmlattr>.type", getName());
-
-    PipelineWriter::write_option_ptree(tree, getOptions());
-
-    const Stage& stage = *getInputs()[0];
-    boost::property_tree::ptree subtree = stage.serializePipeline();
-
-    tree.add_child(subtree.begin()->first, subtree.begin()->second);
-
-    boost::property_tree::ptree root;
-    root.add_child("Writer", tree);
-
-    return root;
+    std::string::size_type suffixPos = m_filename.find_last_of('.');
+    m_hashPos = m_filename.find_first_of('#');
+    if (m_hashPos != std::string::npos)
+    {
+        if (m_hashPos > suffixPos)
+        {
+            std::ostringstream oss;
+            oss << getName() << ": Filename template placeholder ('#') is not "
+                "allowed in filename suffix.";
+            throw pdal_error(oss.str());
+        }
+        if (m_filename.find_first_of('#', m_hashPos + 1) !=
+                std::string::npos)
+        {
+            std::ostringstream oss;
+            oss << getName() << ": Filename specification can only contain "
+                "a single '#' template placeholder.";
+            throw pdal_error(oss.str());
+        }
+    }
 }
 
 } // namespace pdal
diff --git a/src/XMLSchema.cpp b/src/XMLSchema.cpp
index 7e53099..5e32237 100644
--- a/src/XMLSchema.cpp
+++ b/src/XMLSchema.cpp
@@ -43,12 +43,7 @@
 #include <map>
 #include <algorithm>
 
-#include <boost/algorithm/string.hpp>
-#include <boost/algorithm/string/erase.hpp>
 #include <boost/property_tree/xml_parser.hpp>
-#include <boost/uuid/string_generator.hpp>
-#include <boost/uuid/uuid_generators.hpp>
-#include <boost/uuid/uuid_io.hpp>
 
 #include <string.h>
 #include <stdlib.h>
@@ -278,12 +273,12 @@ bool XMLSchema::validate(xmlDocPtr doc, const std::string& xsd)
 
 std::string XMLSchema::remapOldNames(const std::string& input)
 {
-    if (boost::iequals(input, "Unnamed field 512") ||
-            boost::iequals(input, "Chipper Point ID"))
+    if (Utils::iequals(input, "Unnamed field 512") ||
+            Utils::iequals(input, "Chipper Point ID"))
         return std::string("Chipper:PointID");
 
-    if (boost::iequals(input, "Unnamed field 513") ||
-            boost::iequals(input, "Chipper Block ID"))
+    if (Utils::iequals(input, "Unnamed field 513") ||
+            Utils::iequals(input, "Chipper Block ID"))
         return std::string("Chipper:BlockID");
 
     return input;
@@ -307,7 +302,7 @@ bool XMLSchema::loadMetadata(xmlNode *startNode, MetadataNode& input)
     {
         if (node->type != XML_ELEMENT_NODE)
             continue;
-        if (boost::equals((const char*)node->name, "Metadata"))
+        if (std::string((const char*)node->name) == "Metadata")
         {
             const char *fieldname =
                 (const char*)xmlGetProp(node, (const xmlChar*)"name");
@@ -317,7 +312,7 @@ bool XMLSchema::loadMetadata(xmlNode *startNode, MetadataNode& input)
                 (const char*)xmlGetProp(node, (const xmlChar*) "description");
             const char *text = (const char*)xmlNodeGetContent(node);
 
-            if (!boost::iequals(fieldname, "root"))
+            if (!Utils::iequals(fieldname, "root"))
             {
                 if (!fieldname)
                 {
@@ -340,7 +335,7 @@ bool XMLSchema::load(xmlDocPtr doc)
     xmlNode* root = xmlDocGetRootElement(doc);
     // print_element_names(root);
 
-    if (!boost::iequals((const char*)root->name, "PointCloudSchema"))
+    if (!Utils::iequals((const char*)root->name, "PointCloudSchema"))
     {
         std::cerr << "First node of document was not named 'PointCloudSchema'";
         return false;
@@ -355,7 +350,7 @@ bool XMLSchema::load(xmlDocPtr doc)
         dimension = dimension->next)
     {
         // Read off orientation setting
-        if (boost::equals((const char*)dimension->name, "orientation"))
+        if (std::string((const char*)dimension->name) == "orientation")
         {
             xmlChar* n = xmlNodeListGetString(doc, dimension->children, 1);
             if (!n)
@@ -366,14 +361,14 @@ bool XMLSchema::load(xmlDocPtr doc)
             std::string orientation = std::string((const char*)n);
             xmlFree(n);
 
-            if (boost::iequals(orientation, "dimension"))
+            if (Utils::iequals(orientation, "dimension"))
                 m_orientation = Orientation::DimensionMajor;
             else
                 m_orientation = Orientation::PointMajor;
             continue;
         }
 
-        if (boost::equals((const char*)dimension->name, "metadata"))
+        if (std::string((const char*)dimension->name) == "metadata")
         {
             m_metadata = MetadataNode("root");
             if (!loadMetadata(dimension, m_metadata))
@@ -382,7 +377,7 @@ bool XMLSchema::load(xmlDocPtr doc)
         }
 
         if (dimension->type != XML_ELEMENT_NODE ||
-            !boost::iequals((const char*)dimension->name, "dimension"))
+            !Utils::iequals((const char*)dimension->name, "dimension"))
             continue;
 
         XMLDim dim;
@@ -393,7 +388,9 @@ bool XMLSchema::load(xmlDocPtr doc)
             if (properties->type != XML_ELEMENT_NODE)
                 continue;
 
-            if (boost::iequals((const char*)properties->name, "name"))
+            std::string propName = (const char *)properties->name;
+            propName = Utils::tolower(propName);
+            if (propName == "name")
             {
                 xmlChar *n = xmlNodeListGetString(doc, properties->children, 1);
                 if (!n)
@@ -404,7 +401,7 @@ bool XMLSchema::load(xmlDocPtr doc)
                 dim.m_name = remapOldNames(std::string((const char*)n));
                 xmlFree(n);
             }
-            if (boost::iequals((const char*)properties->name, "description"))
+            if (propName == "description")
             {
                 xmlChar* n = xmlNodeListGetString(doc, properties->children, 1);
                 if (!n)
@@ -415,7 +412,7 @@ bool XMLSchema::load(xmlDocPtr doc)
                 dim.m_description = std::string((const char*)n);
                 xmlFree(n);
             }
-            if (boost::iequals((const char*)properties->name, "interpretation"))
+            if (propName == "interpretation")
             {
                 xmlChar* n = xmlNodeListGetString(doc, properties->children, 1);
                 if (!n)
@@ -426,7 +423,7 @@ bool XMLSchema::load(xmlDocPtr doc)
                 dim.m_dimType.m_type = Dimension::type((const char*)n);
                 xmlFree(n);
             }
-            if (boost::iequals((const char*)properties->name, "minimum"))
+            if (propName == "minimum")
             {
                 xmlChar* n = xmlGetProp(properties, (const xmlChar*) "value");
                 if (!n)
@@ -437,7 +434,7 @@ bool XMLSchema::load(xmlDocPtr doc)
                 dim.m_min = std::atof((const char*)n);
                 xmlFree(n);
             }
-            if (boost::iequals((const char*)properties->name, "maximum"))
+            if (propName == "maximum")
             {
                 xmlChar* n = xmlGetProp(properties, (const xmlChar*) "value");
                 if (!n)
@@ -448,7 +445,7 @@ bool XMLSchema::load(xmlDocPtr doc)
                 dim.m_max = std::atof((const char*)n);
                 xmlFree(n);
             }
-            if (boost::iequals((const char*)properties->name, "position"))
+            if (propName == "position")
             {
                 xmlChar* n = xmlNodeListGetString(doc, properties->children, 1);
                 if (!n)
@@ -459,7 +456,7 @@ bool XMLSchema::load(xmlDocPtr doc)
                 dim.m_position = std::atoi((const char*)n);
                 xmlFree(n);
             }
-            if (boost::iequals((const char*)properties->name, "offset"))
+            if (propName == "offset")
             {
                 xmlChar* n = xmlNodeListGetString(doc, properties->children, 1);
                 if (!n)
@@ -470,7 +467,7 @@ bool XMLSchema::load(xmlDocPtr doc)
                 dim.m_dimType.m_xform.m_offset = std::atof((const char*)n);
                 xmlFree(n);
             }
-            if (boost::iequals((const char*)properties->name, "scale"))
+            if (propName == "scale")
             {
                 xmlChar* n = xmlNodeListGetString(doc, properties->children, 1);
                 if (!n)
@@ -531,6 +528,25 @@ XMLDim& XMLSchema::xmlDim(const std::string& name)
 }
 
 
+namespace
+{
+
+pdalboost::property_tree::ptree getMetadataEntry(const MetadataNode& input)
+{
+    pdalboost::property_tree::ptree entry;
+
+    entry.put_value(input.value());
+    entry.put("<xmlattr>.name", input.name());
+    entry.put("<xmlattr>.type", input.type());
+
+    for (auto& m : input.children())
+        entry.add_child("Metadata", getMetadataEntry(m));
+    return entry;
+}
+
+} // anonymous namespace
+
+
 void XMLSchema::writeXml(xmlTextWriterPtr w) const
 {
     int pos = 0;
@@ -604,15 +620,17 @@ void XMLSchema::writeXml(xmlTextWriterPtr w) const
         xmlTextWriterStartElementNS(w, (const xmlChar*) "pc",
             (const xmlChar*) "metadata", NULL);
 
-        boost::property_tree::ptree output;
-        PipelineWriter::writeMetadata(output, m_metadata.children());
+        pdalboost::property_tree::ptree output;
+
+        for (auto m : m_metadata.children())
+            output.add_child("Metadata", getMetadataEntry(m));
         std::ostringstream oss;
-        boost::property_tree::xml_parser::write_xml(oss, output);
+        pdalboost::property_tree::xml_parser::write_xml(oss, output);
         std::string xml = oss.str();
 
         // wipe off write_xml's xml declaration
-        boost::algorithm::erase_all(xml,
-            "<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+        xml = Utils::replaceAll(xml,
+            "<?xml version=\"1.0\" encoding=\"utf-8\"?>", "");
         xmlTextWriterWriteRawLen(w, (const xmlChar*) xml.c_str(), xml.size());
         xmlTextWriterEndElement(w);
     }
@@ -620,9 +638,9 @@ void XMLSchema::writeXml(xmlTextWriterPtr w) const
         (const xmlChar*)"orientation", NULL,
         (const xmlChar*)orientation.str().c_str());
 
-    xmlTextWriterWriteElementNS(w, (const xmlChar*)"pc", (const xmlChar*)"version", NULL,
-                                (const xmlChar*)PDAL_XML_SCHEMA_VERSION);
-
+    xmlTextWriterWriteElementNS(w, (const xmlChar*)"pc",
+        (const xmlChar*)"version", NULL,
+        (const xmlChar*)PDAL_XML_SCHEMA_VERSION);
 
     xmlTextWriterEndElement(w);
     xmlTextWriterFlush(w);
diff --git a/src/gitsha.cpp b/src/gitsha.cpp
index 477c591..c04849f 100644
--- a/src/gitsha.cpp
+++ b/src/gitsha.cpp
@@ -1,3 +1,3 @@
 #include <pdal/gitsha.h>
-#define GIT_SHA1 "5ba8ee566c5c4faf5285768ed4567668888b223a"
+#define GIT_SHA1 "60b269e19b642b49ca10b7b52c48f0b21fc3cb3b"
 const char g_GIT_SHA1[] = GIT_SHA1;
diff --git a/src/pdal_config.cpp b/src/pdal_config.cpp
index 2988a0b..2fdee4f 100644
--- a/src/pdal_config.cpp
+++ b/src/pdal_config.cpp
@@ -66,13 +66,7 @@
 #include <laszip/laszip.hpp>
 #endif
 
-#ifdef PDAL_HAVE_GEOS
-#include <geos/version.h>
-#endif
-
-#ifdef PDAL_HAVE_HEXER
-#include <hexer/hexer.hpp>
-#endif
+#include <geos_c.h>
 
 #ifdef PDAL_HAVE_LIBXML2
 #include <libxml/xmlversion.h>
@@ -172,20 +166,12 @@ std::string getPDALDebugInformation()
     os << "Enabled libraries" << std::endl;
     os << headline << std::endl << std::endl;
 
-#ifdef PDAL_HAVE_GEOS
     os << "GEOS (" << GEOS_VERSION << ") - " <<
         "http://trac.osgeo.org/geos" << std::endl;
-#endif
 
     os << "GDAL (" << GDALVersionInfo("RELEASE_NAME") << ") - " <<
         "http://www.gdal.org" << std::endl;
 
-#ifdef PDAL_HAVE_HEXER
-    os << "Hexer (" << HEXER_VERSION_MAJOR << '.' << HEXER_VERSION_MINOR <<
-        '.' << HEXER_VERSION_PATCH << ") - " <<
-        "http://github.com/hobu/hexer" << std::endl;
-#endif
-
 #ifdef PDAL_HAVE_LASZIP
     os << "LASzip (" << LASZIP_VERSION_MAJOR << "." << LASZIP_VERSION_MINOR <<
         "." << LASZIP_VERSION_REVISION << ") - " <<
@@ -202,36 +188,6 @@ std::string getPDALDebugInformation()
         "http://trac.osgeo.org/geotiff" << std::endl;
 #endif
 
-#ifdef PDAL_HAVE_MRSID
-    os << "MrSID - " << "http://www.lizardtech.com" << std::endl;
-#endif
-
-#ifdef PDAL_HAVE_NITRO
-    os << "Nitro - " << "http://github.com/hobu/nitro" << std::endl;
-#endif
-
-#ifdef PDAL_HAVE_ORACLE
-    os << "Oracle - " << "http://www.oracle.com" << std::endl;
-#endif
-
-#ifdef PDAL_HAVE_P2G
-    os << "Points2grid = " <<
-        "http://github.com/CRREL/points2grid" << std::endl;
-#endif
-
-#ifdef PDAL_HAVE_PYTHON
-    os << "Python - " << "http://www.python.org" << std::endl;
-#endif
-
-#ifdef PDAL_HAVE_SQLITE
-    os << "SQLite - " << "http://www.sqlite.org" << std::endl;
-#endif
-
-#ifdef PDAL_HAVE_POSTGRESQL
-    os << "PostgreSQL - " <<
-        "http://github.com/pramsey/pointcloud" << std::endl;
-#endif
-
     return os.str();
 }
 
diff --git a/src/plang/Environment.cpp b/src/plang/Environment.cpp
index 497f798..4b7f506 100644
--- a/src/plang/Environment.cpp
+++ b/src/plang/Environment.cpp
@@ -65,7 +65,6 @@
 __attribute__ ((constructor))
 static void loadPython()
 {
-    std::cerr << "Force load python.\n";
     ::dlopen(PDAL_PYTHON_LIBRARY, RTLD_LAZY | RTLD_GLOBAL);
 }
 #endif
@@ -175,9 +174,9 @@ std::string getTraceback()
         PyObject* output = PyObject_CallObject(tracebackFunction, args);
 
         // print error message
-        int n = PyList_Size(output);
+        Py_ssize_t n = PyList_Size(output);
 
-        for (int i = 0; i < n; i++)
+        for (Py_ssize_t i = 0; i < n; i++)
         {
             PyObject* l = PyList_GetItem(output, i);
             if (!l)
@@ -185,11 +184,11 @@ std::string getTraceback()
             PyObject* r = PyObject_Repr(l);
             if (!r)
                 throw pdal::pdal_error("unable to get repr in getTraceback");
-            Py_ssize_t size;
 #if PY_MAJOR_VERSION >= 3
-            char* d = PyUnicode_AsUTF8AndSize(r, &size);
+            Py_ssize_t size;
+            char *d = PyUnicode_AsUTF8AndSize(r, &size);
 #else
-            char* d = PyString_AsString(r);
+            char *d = PyString_AsString(r);
 #endif
             mssg << d;
         }
@@ -203,11 +202,11 @@ std::string getTraceback()
         PyObject* r = PyObject_Repr(value);
         if (!r)
             throw pdal::pdal_error("couldn't make string representation of traceback value");
-        Py_ssize_t size;
 #if PY_MAJOR_VERSION >= 3
-            char* d = PyUnicode_AsUTF8AndSize(r, &size);
+        Py_ssize_t size;
+        char *d = PyUnicode_AsUTF8AndSize(r, &size);
 #else
-            char* d = PyString_AsString(r);
+        char *d = PyString_AsString(r);
 #endif
         mssg << d;
     }
@@ -261,11 +260,11 @@ std::string readPythonString(PyObject* list, Py_ssize_t index)
     PyObject* r = PyObject_Repr(o);
     if (!r)
         throw pdal::pdal_error("unable to get repr in readPythonString");
-    Py_ssize_t size;
 #if PY_MAJOR_VERSION >= 3
-            char* d = PyUnicode_AsUTF8AndSize(r, &size);
+    Py_ssize_t size;
+    char *d = PyUnicode_AsUTF8AndSize(r, &size);
 #else
-            char* d = PyString_AsString(r);
+    char *d = PyString_AsString(r);
 #endif
     ss << d;
 
diff --git a/src/plang/Redirector.cpp b/src/plang/Redirector.cpp
index 6bdcee8..64d5155 100644
--- a/src/plang/Redirector.cpp
+++ b/src/plang/Redirector.cpp
@@ -12,8 +12,8 @@
 #  pragma warning(disable: 4127)  // conditional expression is constant
 #endif
 
-#include <functional>
 #include <ostream>
+#include <string>
 
 namespace pdal
 {
@@ -24,6 +24,7 @@ struct Stdout
 {
     PyObject_HEAD
     Redirector::stdout_write_type write;
+    Redirector::stdout_flush_type flush;
 };
 
 
@@ -45,9 +46,13 @@ static PyObject* Stdout_write(PyObject* self, PyObject* args)
 }
 
 
-static PyObject* Stdout_flush(PyObject* /*self*/, PyObject* /*args*/)
+static PyObject* Stdout_flush(PyObject* self, PyObject* /*args*/)
 {
-    // no-op
+    Stdout *selfimpl = reinterpret_cast<Stdout *>(self);
+    if (selfimpl->flush)
+    {
+        selfimpl->flush();
+    }
     return Py_BuildValue("");
 }
 
@@ -55,7 +60,7 @@ static PyObject* Stdout_flush(PyObject* /*self*/, PyObject* /*args*/)
 static PyMethodDef Stdout_methods[] =
 {
     {"write", Stdout_write, METH_VARARGS, "sys.stdout.write"},
-    {"flush", Stdout_flush, METH_VARARGS, "sys.stdout.write"},
+    {"flush", Stdout_flush, METH_VARARGS, "sys.stdout.flush"},
     {0, 0, 0, 0} // sentinel
 };
 
@@ -109,6 +114,9 @@ static PyTypeObject StdoutType =
     0, /* tp_weaklist */
     0, /* tp_del */
     0, /* tp_version_tag */
+#if PY_MAJOR_VERSION >= 3
+    0, /* tp_finalilzer */
+#endif
 };
 
 
@@ -173,31 +181,27 @@ PyObject* Redirector::init()
 }
 
 
-static void my2argwriterfunction(std::ostream* ostr, const std::string& mssg)
-{
-    *ostr << mssg;
-}
-
-
 void Redirector::set_stdout(std::ostream* ostr)
 {
-    stdout_write_type my1argwriterfunction = std::bind(&my2argwriterfunction, ostr, std::placeholders::_1);
-    this->set_stdout(my1argwriterfunction);
+    stdout_write_type writeFunc = [ostr](std::string msg) { *ostr << msg; };
+    stdout_flush_type flushFunc = [ostr]{ ostr->flush(); };
 
-    return;
+    this->set_stdout(writeFunc, flushFunc);
 }
 
 
-void Redirector::set_stdout(stdout_write_type write)
+void Redirector::set_stdout(stdout_write_type write, stdout_flush_type flush)
 {
     if (!m_stdout)
     {
-        m_stdout_saved = PySys_GetObject(const_cast<char*>("stdout")); // borrowed
+        m_stdout_saved =
+            PySys_GetObject(const_cast<char*>("stdout")); // borrowed
         m_stdout = StdoutType.tp_new(&StdoutType, 0, 0);
     }
 
     Stdout* impl = reinterpret_cast<Stdout*>(m_stdout);
     impl->write = write;
+    impl->flush = flush;
     PySys_SetObject(const_cast<char*>("stdout"), m_stdout);
 }
 
diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt
index cc02409..7fccb9f 100644
--- a/src/util/CMakeLists.txt
+++ b/src/util/CMakeLists.txt
@@ -10,7 +10,6 @@ set(PDAL_UTIL_HPP
     "${PDAL_INCLUDE_DIR}/pdal/util/Algorithm.hpp"
     "${PDAL_INCLUDE_DIR}/pdal/util/Bounds.hpp"
     "${PDAL_INCLUDE_DIR}/pdal/util/Charbuf.hpp"
-    "${PDAL_INCLUDE_DIR}/pdal/util/Endian.hpp"
     "${PDAL_INCLUDE_DIR}/pdal/util/Extractor.hpp"
     "${PDAL_INCLUDE_DIR}/pdal/util/FileUtils.hpp"
     "${PDAL_INCLUDE_DIR}/pdal/util/Georeference.hpp"
@@ -18,6 +17,7 @@ set(PDAL_UTIL_HPP
     "${PDAL_INCLUDE_DIR}/pdal/util/IStream.hpp"
     "${PDAL_INCLUDE_DIR}/pdal/util/OStream.hpp"
     "${PDAL_INCLUDE_DIR}/pdal/util/Utils.hpp"
+    "${PDAL_INCLUDE_DIR}/pdal/util/Uuid.hpp"
     )
 
 set(PDAL_UTIL_CPP
@@ -33,20 +33,11 @@ set(PDAL_UTIL_SOURCES
     ${PDAL_UTIL_HPP})
 
 PDAL_ADD_LIBRARY(${PDAL_UTIL_LIB_NAME} SHARED ${PDAL_UTIL_SOURCES})
-target_link_libraries(${PDAL_UTIL_LIB_NAME} ${Boost_LIBRARIES})
+target_link_libraries(${PDAL_UTIL_LIB_NAME} ${PDAL_BOOST_LIB_NAME} ${CMAKE_DL_LIBS})
 
 set_target_properties(${PDAL_UTIL_LIB_NAME} PROPERTIES
     VERSION "${PDAL_BUILD_VERSION}"
     SOVERSION "${PDAL_API_VERSION}"
     CLEAN_DIRECT_OUTPUT 1)
 
-if (NOT WIN32)
-    target_link_libraries(${PDAL_UTIL_LIB_NAME} dl)
-endif (NOT WIN32)
-
-if (NOT WIN32)
-    target_link_libraries(${PDAL_UTIL_LIB_NAME} dl)
-endif (NOT WIN32)
-
 set_property(GLOBAL PROPERTY _UTIL_INCLUDED TRUE)
-
diff --git a/src/util/FileUtils.cpp b/src/util/FileUtils.cpp
index 8c2e959..39f98ba 100644
--- a/src/util/FileUtils.cpp
+++ b/src/util/FileUtils.cpp
@@ -41,6 +41,7 @@
 
 #include <pdal/util/FileUtils.hpp>
 #include <pdal/util/Utils.hpp>
+#include <pdal/pdal_types.hpp>
 
 using namespace std;
 
@@ -50,32 +51,42 @@ namespace pdal
 namespace
 {
 
-bool isStdin(std::string filename)
+bool isStdin(string filename)
 {
     return Utils::toupper(filename) == "STDIN";
 }
 
-bool isStdout(std::string filename)
+bool isStdout(string filename)
 {
     return Utils::toupper(filename) == "STOUT" ||
         Utils::toupper(filename) == "STDOUT";
 }
 
+string addTrailingSlash(string path)
+{
+    if (path[path.size() - 1] != '/' && path[path.size() - 1] != '\\')
+        path += "/";
+    return path;
+}
+
 } // unnamed namespace
 
-istream* FileUtils::openFile(string const& filename, bool asBinary)
+namespace FileUtils
+{
+
+istream *openFile(string const& filename, bool asBinary)
 {
     if (isStdin(filename))
         return &cin;
 
     if (!FileUtils::fileExists(filename))
-        throw pdal_error(std::string("File '") + filename + "' not found");
+        return NULL;
 
     ios::openmode mode = ios::in;
     if (asBinary)
         mode |= ios::binary;
 
-    std::ifstream *ifs = new std::ifstream(filename, mode);
+    ifstream *ifs = new ifstream(filename, mode);
     if (!ifs->good())
     {
         delete ifs;
@@ -85,7 +96,7 @@ istream* FileUtils::openFile(string const& filename, bool asBinary)
 }
 
 
-ostream* FileUtils::createFile(string const& filename, bool asBinary)
+ostream *createFile(string const& filename, bool asBinary)
 {
     if (isStdout(filename))
         return &cout;
@@ -94,7 +105,7 @@ ostream* FileUtils::createFile(string const& filename, bool asBinary)
     if (asBinary)
         mode |= ios::binary;
 
-    std::ostream *ofs = new std::ofstream(filename, mode);
+    ostream *ofs = new ofstream(filename, mode);
     if (! ofs->good())
     {
         delete ofs;
@@ -104,28 +115,44 @@ ostream* FileUtils::createFile(string const& filename, bool asBinary)
 }
 
 
-bool FileUtils::directoryExists(std::string const& dirname)
+bool directoryExists(const string& dirname)
 {
-    return boost::filesystem::exists(dirname);
+    //ABELL - Seems we should be calling is_directory
+    return pdalboost::filesystem::exists(dirname);
 }
 
 
-bool FileUtils::createDirectory(std::string const& dirname)
+bool createDirectory(const string& dirname)
 {
-    return boost::filesystem::create_directory(dirname); 
+    return pdalboost::filesystem::create_directory(dirname);
 }
 
 
-void FileUtils::deleteDirectory(std::string const& dirname)
+void deleteDirectory(const string& dirname)
 {
-    boost::filesystem::remove_all(dirname);
+    pdalboost::filesystem::remove_all(dirname);
 }
 
 
-void FileUtils::closeFile(ostream *out)
+StringList directoryList(const string& dir)
+{
+    StringList files;
+
+    pdalboost::filesystem::directory_iterator it(dir);
+    pdalboost::filesystem::directory_iterator end;
+    while (it != end)
+    {
+        files.push_back(it->path().string());
+        it++;
+    }
+    return files;
+}
+
+
+void closeFile(ostream *out)
 {
     // An ofstream is closeable and deletable, but
-    // an ostream like &std::cout isn't.
+    // an ostream like &cout isn't.
     if (!out)
         return;
     ofstream *ofs = dynamic_cast<ofstream *>(out);
@@ -137,10 +164,10 @@ void FileUtils::closeFile(ostream *out)
 }
 
 
-void FileUtils::closeFile(istream* in)
+void closeFile(istream* in)
 {
     // An ifstream is closeable and deletable, but
-    // an istream like &std::cin isn't.
+    // an istream like &cin isn't.
     if (!in)
         return;
     ifstream *ifs = dynamic_cast<ifstream *>(in);
@@ -152,71 +179,63 @@ void FileUtils::closeFile(istream* in)
 }
 
 
-bool FileUtils::deleteFile(const string& file)
+bool deleteFile(const string& file)
 {
     if (!fileExists(file))
         return false;
 
-    return boost::filesystem::remove(file);
+    return pdalboost::filesystem::remove(file);
 }
 
 
-void FileUtils::renameFile(const string& dest, const string& src)
+void renameFile(const string& dest, const string& src)
 {
-    boost::filesystem::rename(src, dest);
+    pdalboost::filesystem::rename(src, dest);
 }
 
 
-bool FileUtils::fileExists(const string& name)
+bool fileExists(const string& name)
 {
     // filename may actually be a greyhound uri + pipelineId
-    std::string http = name.substr(0, 4);
+    string http = name.substr(0, 4);
     if (Utils::iequals(http, "http"))
         return true;
- 
-    boost::system::error_code ec;
-    boost::filesystem::exists(name, ec);
-    return boost::filesystem::exists(name) || isStdin(name);
+
+    pdalboost::system::error_code ec;
+    pdalboost::filesystem::exists(name, ec);
+    return pdalboost::filesystem::exists(name) || isStdin(name);
 }
 
 
-uintmax_t FileUtils::fileSize(const string& file)
+uintmax_t fileSize(const string& file)
 {
-    return boost::filesystem::file_size(file);
+    return pdalboost::filesystem::file_size(file);
 }
 
 
-string FileUtils::readFileIntoString(const string& filename)
+string readFileIntoString(const string& filename)
 {
-    istream* stream = FileUtils::openFile(filename, false);
+    istream* stream = openFile(filename, false);
     assert(stream);
     string str((istreambuf_iterator<char>(*stream)),
         istreambuf_iterator<char>());
-    FileUtils::closeFile(stream);
+    closeFile(stream);
     return str;
 }
 
 
-string FileUtils::addTrailingSlash(string path)
+string getcwd()
 {
-    if (path[path.size() - 1] != '/' && path[path.size() - 1] != '\\')
-        path += "/";
-    return path;
-}
-
-
-string FileUtils::getcwd()
-{
-    const boost::filesystem::path p = boost::filesystem::current_path();
+    const pdalboost::filesystem::path p = pdalboost::filesystem::current_path();
     return addTrailingSlash(p.string());
 }
 
 
 /***
 // Non-boost alternative.  Requires file existence.
-string FileUtils::toAbsolutePath(const string& filename)
+string toAbsolutePath(const string& filename)
 {
-    std::string result;
+    string result;
 
 #ifdef WIN32
     char buf[MAX_PATH]
@@ -233,16 +252,9 @@ string FileUtils::toAbsolutePath(const string& filename)
 
 // if the filename is an absolute path, just return it
 // otherwise, make it absolute (relative to current working dir) and return that
-string FileUtils::toAbsolutePath(const string& filename)
+string toAbsolutePath(const string& filename)
 {
-
-#if BOOST_VERSION >= 104600 && BOOST_FILESYSTEM_VERSION >= 3
-    const boost::filesystem::path p = boost::filesystem::absolute(filename);
-#else
-    const boost::filesystem::path p = boost::filesystem::complete(filename);
-#endif
-
-    return p.string();
+    return pdalboost::filesystem::absolute(filename).string();
 }
 
 
@@ -251,55 +263,64 @@ string FileUtils::toAbsolutePath(const string& filename)
 //
 // note: if base dir is not absolute, first make it absolute via
 // toAbsolutePath(base)
-string FileUtils::toAbsolutePath(const string& filename, const string base)
+string toAbsolutePath(const string& filename, const string base)
 {
     const string newbase = toAbsolutePath(base);
-
-#if BOOST_VERSION >= 104600 && BOOST_FILESYSTEM_VERSION >= 3
-    const boost::filesystem::path p = boost::filesystem::absolute(filename, newbase);
-#else
-    const boost::filesystem::path p = boost::filesystem::complete(filename, newbase);
-#endif
-
-    return p.string();
+    return pdalboost::filesystem::absolute(filename, newbase).string();
 }
 
-string FileUtils::getFilename(const string& path)
+string getFilename(const string& path)
 {
 #ifdef _WIN32
-    char pathsep = '\\';
+    std::string pathsep("\\/");
 #else
     char pathsep = '/';
 #endif
 
-    std::string::size_type pos = path.find_last_of(pathsep);
-    if (pos == std::string::npos)
+    string::size_type pos = path.find_last_of(pathsep);
+    if (pos == string::npos)
         return path;
     return path.substr(pos + 1);
 }
 
+
 // Get the directory part of a filename.
-string FileUtils::getDirectory(const string& path)
+string getDirectory(const string& path)
 {
-    const boost::filesystem::path dir =
-         boost::filesystem::path(path).parent_path();
+    const pdalboost::filesystem::path dir =
+         pdalboost::filesystem::path(path).parent_path();
     return addTrailingSlash(dir.string());
 }
 
 
+string stem(const string& path)
+{
+    std::string f = getFilename(path);
+    if (f != "." && f != "..")
+    {
+        std::string::size_type pos = f.find_last_of(".");
+        if (pos != std::string::npos)
+            f = f.substr(0, pos);
+    }
+    return f;
+}
+
+
+// Determine if the path represents a directory.
+bool isDirectory(const std::string& path)
+{
+    return pdalboost::filesystem::is_directory(path);
+}
+
 // Determine if the path is an absolute path
-bool FileUtils::isAbsolutePath(const string& path)
+bool isAbsolutePath(const string& path)
 {
-#if BOOST_VERSION >= 104600 && BOOST_FILESYSTEM_VERSION >= 3
-    return boost::filesystem::path(path).is_absolute();
-#else
-    return boost::filesystem::path(path).is_complete();
-#endif
+    return pdalboost::filesystem::path(path).is_absolute();
 }
 
 
-void FileUtils::fileTimes(const std::string& filename,
-    struct tm *createTime, struct tm *modTime)
+void fileTimes(const string& filename, struct tm *createTime,
+    struct tm *modTime)
 {
 #ifdef WIN32
     struct _stat statbuf;
@@ -321,38 +342,15 @@ void FileUtils::fileTimes(const std::string& filename,
 }
 
 
-string FileUtils::readFileAsString(string const& filename)
+std::string extension(const std::string& filename)
 {
-    if (!FileUtils::fileExists(filename))
-    {
-        ostringstream oss;
-        oss << filename << " does not exist";
-        throw pdal_error(oss.str());
-    }
-
-    istream::pos_type size;
-    istream* input = FileUtils::openFile(filename, true);
-
-    if (input->good())
-    {
-        string output;
-        string line;
-        while (input->good())
-        {
-            getline(*input, line);
-            if (output.size())
-            {
-                output = output + "\n" + line;
-            }
-            else
-            {
-                output = line;
-            }
-        }
-        return output;
-    }
-    FileUtils::closeFile(input);
-    return string();
+    auto idx = filename.find_last_of('.');
+    if (idx == std::string::npos)
+        return std::string();
+    return filename.substr(idx);
 }
 
+} // namespace FileUtils
+
 } // namespace pdal
+
diff --git a/src/util/Utils.cpp b/src/util/Utils.cpp
index d1dae07..6128937 100644
--- a/src/util/Utils.cpp
+++ b/src/util/Utils.cpp
@@ -32,37 +32,28 @@
 * OF SUCH DAMAGE.
 ****************************************************************************/
 
-#include <boost/algorithm/string/erase.hpp>
-#include <boost/filesystem.hpp>
-
 #include <pdal/util/Utils.hpp>
 
 #include <cassert>
 #include <cstdlib>
 #include <cctype>
+#include <memory>
 #include <random>
 
 #ifndef _WIN32
 #include <cxxabi.h>
 #include <sys/ioctl.h>
+#include <sys/wait.h>  // WIFEXITED, WEXITSTATUS
 #endif
 
 #ifdef PDAL_COMPILER_MSVC
 #  pragma warning(disable: 4127)  // conditional expression is constant
 #endif
 
-#if !defined(_WIN32)
-#include <dlfcn.h>
-#define DLL_LOAD_UNIX
-#else
-#include <windows.h>
-#define DLL_LOAD_WINDOWS
-#endif
-
 #include <stdio.h>
 #include <iomanip>
 
-using namespace std;
+typedef std::vector<std::string> StringList;
 
 namespace pdal
 {
@@ -107,66 +98,38 @@ double Utils::normal(const double& mean, const double& sigma, uint32_t seed)
 }
 
 
-void* Utils::registerPlugin(void* stageFactoryPtr, string const& filename,
-    string const& registerMethod, string const& versionMethod)
+int Utils::getenv(const std::string& name, std::string& val)
 {
-    void* pRegister;
-    void* pVersion;
-
-    pVersion = Utils::getDLLSymbol(filename, versionMethod);
-
-    int plugins_version = ((int (*)()) pVersion)();
-
-    if (plugins_version != PDAL_PLUGIN_VERSION)
-    {
-        ostringstream oss;
-        oss << "Unable to register shared library '" << filename <<
-            "' with method name '" << registerMethod <<
-            "' version of plugin, '" << plugins_version <<
-            "' did not match PDALs version '" << PDAL_PLUGIN_VERSION << "'";
-        throw pdal_error(oss.str());
-    }
-
-
-    pRegister = Utils::getDLLSymbol(filename, registerMethod);
-    if (pRegister != NULL)
-    {
-        ((void (*)(void*)) pRegister)(stageFactoryPtr);
-    }
+    char* value = ::getenv(name.c_str());
+    if (value)
+        val = value;
     else
-    {
-        ostringstream oss;
-        oss << "Unable to register shared library '" << filename <<
-            "' with method name '" << registerMethod << "'";
-        throw pdal_error(oss.str());
-    }
-
-    return pRegister;
+        val.clear();
+    return value ?  0 : -1;
 }
 
 
-char* Utils::getenv(const char* env)
+int Utils::setenv(const std::string& env, const std::string& val)
 {
-    return ::getenv(env);
+#ifdef _WIN32
+    return ::_putenv_s(env.c_str(), val.c_str()) ? -1 : 0;
+#else
+    return ::setenv(env.c_str(), val.c_str(), 1);
+#endif
 }
 
 
-string Utils::getenv(string const& name)
-{
-    char* value = ::getenv(name.c_str());
-    return value ? string(value) : string();
-}
-
-int Utils::putenv(const char* env)
+int Utils::unsetenv(const std::string& env)
 {
 #ifdef _WIN32
-    return ::_putenv(env);
+    return ::_putenv_s(env.c_str(), "") ? -1 : 0;
 #else
-    return ::putenv(const_cast<char*>(env));
+    return ::unsetenv(env.c_str());
 #endif
 }
 
-void Utils::eatwhitespace(istream& s)
+
+void Utils::eatwhitespace(std::istream& s)
 {
     while (true)
     {
@@ -177,7 +140,6 @@ void Utils::eatwhitespace(istream& s)
         // throw it away
         s.get();
     }
-    return;
 }
 
 
@@ -193,6 +155,9 @@ void Utils::trimLeading(std::string& s)
 
 void Utils::trimTrailing(std::string& s)
 {
+    if (s.empty())
+        return;
+
     size_t pos = s.size() - 1;
     while (isspace(s[pos]))
     {
@@ -208,7 +173,7 @@ void Utils::trimTrailing(std::string& s)
 }
 
 
-bool Utils::eatcharacter(istream& s, char x)
+bool Utils::eatcharacter(std::istream& s, char x)
 {
     const char c = (char)s.peek();
     if (c != x)
@@ -220,125 +185,10 @@ bool Utils::eatcharacter(istream& s, char x)
     return true;
 }
 
-uint32_t Utils::getStreamPrecision(double scale)
-{
-    double frac = 0;
-    double integer = 0;
-
-    frac = modf(scale, &integer);
-    return abs(floorl(log10(frac)));
-}
-
-void* Utils::getDLLSymbol(string const& library, string const& name)
-{
-    // Completely stolen from GDAL.
-    /***************************************************************************
-     * $Id: cplgetsymbol.cpp 16702 2009-04-01 20:42:49Z rouault $
-     *
-     * Project:  Common Portability Library
-     * Purpose:  Fetch a function pointer from a shared library / DLL.
-     * Author:   Frank Warmerdam, warmerdam at pobox.com
-     *
-     ***************************************************************************
-     * Copyright (c) 1999, Frank Warmerdam
-     *
-     * Permission is hereby granted, free of charge, to any person obtaining a
-     * copy of this software and associated documentation files
-     * (the "Software"),
-     * to deal in the Software without restriction, including without limitation
-     * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-     * and/or sell copies of the Software, and to permit persons to whom the
-     * Software is furnished to do so, subject to the following conditions:
-     *
-     * The above copyright notice and this permission notice shall be included
-     * in all copies or substantial portions of the Software.
-     *
-     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-     * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-     * MERCHANTABILITY,
-     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-     * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-     * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-     * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-     * OTHER DEALINGS IN THE SOFTWARE.
-     ****************************************************************************/
-
-    void* pLibrary = NULL;
-    void* pSymbol = NULL;
-
-#ifdef DLL_LOAD_UNIX
-    pLibrary = dlopen(library.c_str(), RTLD_LAZY);
-    if (pLibrary == NULL)
-    {
-        ostringstream oss;
-        oss << "Unable to open '" << library <<"' with error " << dlerror();
-        throw pdal_error(oss.str());
-    }
-
-    pSymbol = dlsym(pLibrary, name.c_str());
-#if (defined(__APPLE__) && defined(__MACH__))
-    /* On mach-o systems, C symbols have a leading underscore and depending
-     * on how dlcompat is configured it may or may not add the leading
-     * underscore.  So if dlsym() fails add an underscore and try again.
-     */
-    if (pSymbol == NULL)
-    {
-        ostringstream prefixed;
-        prefixed << "_" << name;
-        pSymbol = dlsym(pLibrary, prefixed.str().c_str());
-    }
-#endif
-
-    if (pSymbol == NULL)
-    {
-        ostringstream oss;
-        oss << "Opened library '" << library << "', but unable to open symbol "
-            "'" << name << "' with error " << dlerror();
-        throw pdal_error(oss.str());
-    }
-
-#endif
-
-#ifdef DLL_LOAD_WINDOWS
-
-    pLibrary = LoadLibrary(library.c_str());
-    if (pLibrary == NULL)
-    {
-        LPVOID      lpMsgBuf = NULL;
-        int         nLastError = GetLastError();
-
-        FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
-                      | FORMAT_MESSAGE_FROM_SYSTEM
-                      | FORMAT_MESSAGE_IGNORE_INSERTS,
-                      NULL, nLastError,
-                      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
-                      (LPTSTR) &lpMsgBuf, 0, NULL);
-
-        ostringstream oss;
-        oss << "Can't load requested DLL '" << library <<
-            " with error code " << nLastError <<
-            " and message \"" << (const char *) lpMsgBuf <<"\"";
-        throw pdal_error(oss.str());
-    }
-
-    pSymbol = (void *) GetProcAddress((HINSTANCE) pLibrary, name.c_str());
-
-    if (pSymbol == NULL)
-    {
-        ostringstream oss;
-        oss << "Can't find requested entry point '" << name <<"'";
-        throw pdal_error(oss.str());
-    }
-
-
-#endif
-    return pSymbol;
-}
-
 
-string Utils::base64_encode(const unsigned char *bytes_to_encode, size_t in_len)
+std::string Utils::base64_encode(const unsigned char *bytes_to_encode,
+    size_t in_len)
 {
-
     /*
         base64.cpp and base64.h
 
@@ -367,13 +217,13 @@ string Utils::base64_encode(const unsigned char *bytes_to_encode, size_t in_len)
     */
 
     if (in_len == 0)
-        return string();
+        return std::string();
 
-    const string base64_chars =
+    const std::string base64_chars =
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
         "abcdefghijklmnopqrstuvwxyz"
         "0123456789+/";
-    string ret;
+    std::string ret;
     int i = 0;
     int j = 0;
     uint8_t char_array_3[3];
@@ -425,19 +275,19 @@ static inline bool is_base64(unsigned char c)
 }
 
 
-vector<uint8_t> Utils::base64_decode(string const& encoded_string)
+std::vector<uint8_t> Utils::base64_decode(std::string const& encoded_string)
 {
-    const string base64_chars =
+    const std::string base64_chars =
         "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
         "abcdefghijklmnopqrstuvwxyz"
         "0123456789+/";
 
-    string::size_type in_len = encoded_string.size();
+    std::string::size_type in_len = encoded_string.size();
     int i = 0;
     int j = 0;
     int in_ = 0;
     unsigned char char_array_4[4], char_array_3[3];
-    vector<uint8_t> ret;
+    std::vector<uint8_t> ret;
 
     while (in_len-- && (encoded_string[in_] != '=') &&
         is_base64(encoded_string[in_]))
@@ -484,16 +334,18 @@ vector<uint8_t> Utils::base64_decode(string const& encoded_string)
     return ret;
 }
 
-FILE* Utils::portable_popen(const string& command, const string& mode)
+
+FILE* Utils::portable_popen(const std::string& command, const std::string& mode)
 {
 #ifdef _WIN32
-    const string dos_command = Utils::replaceAll(command, "/", "\\");
+    const std::string dos_command = Utils::replaceAll(command, "/", "\\");
     return _popen(dos_command.c_str(), mode.c_str());
 #else
     return popen(command.c_str(), mode.c_str());
 #endif
 }
 
+
 int Utils::portable_pclose(FILE* fp)
 {
     int status = 0;
@@ -504,7 +356,7 @@ int Utils::portable_pclose(FILE* fp)
     status = pclose(fp);
     if (status == -1)
     {
-        throw runtime_error("error executing command");
+        throw std::runtime_error("error executing command");
     }
     if (WIFEXITED(status) != 0)
     {
@@ -520,37 +372,18 @@ int Utils::portable_pclose(FILE* fp)
 }
 
 
-// BUG:
-// Under unix, the pclose() operation causes the boost unit test system
-// to produce a fatal error iff the process started by popen returns a
-// nonzero status code.  For this reason, I've put all the "negative"
-// cmd line app tests under #ifdef PDAL_COMPILER_MSVC.
-//
-// This problem shows up on mpg's Ubuntu 11.4 machine (gcc 4.5.2, boost 1.47.0)
-// as well as on Hobu's machine.
-
-// Boost's unit test system has a flag on the execution monitor that catches
-// all signals --  p_catch_system_errors, and throws unittest errors when
-// it sees them. We can use --catch_system_errors=no as part of the invocation,
-// or manually turn them off in the execution monitor. -- hobu 7/12/2012
-//  boost::unit_test::unit_test_monitor.p_catch_system_errors.set (false);
-// #include <boost/test/unit_test_monitor.hpp>
-
-int Utils::run_shell_command(const string& cmd, string& output)
+int Utils::run_shell_command(const std::string& cmd, std::string& output)
 {
     const int maxbuf = 4096;
     char buf[maxbuf];
 
     output = "";
 
-    const char* gdal_debug = ::pdal::Utils::getenv("CPL_DEBUG");
-    if (gdal_debug == 0)
-    {
-        pdal::Utils::putenv("CPL_DEBUG=OFF");
-    }
-
     FILE* fp = portable_popen(cmd.c_str(), "r");
 
+    if (fp == NULL)
+        return 1;
+
     while (!feof(fp))
     {
         if (fgets(buf, maxbuf, fp) == NULL)
@@ -564,14 +397,14 @@ int Utils::run_shell_command(const string& cmd, string& output)
 }
 
 
-string Utils::replaceAll(string result, const string& replaceWhat,
-    const string& replaceWithWhat)
+std::string Utils::replaceAll(std::string result,
+    const std::string& replaceWhat, const std::string& replaceWithWhat)
 {
     size_t pos = 0;
     while (1)
     {
         pos = result.find(replaceWhat, pos);
-        if (pos == string::npos)
+        if (pos == std::string::npos)
             break;
         result.replace(pos, replaceWhat.size(), replaceWithWhat);
         pos += replaceWithWhat.size();
@@ -583,17 +416,14 @@ string Utils::replaceAll(string result, const string& replaceWhat,
 
 
 // Adapted from http://stackoverflow.com/a/11969098.
-std::string Utils::escapeJSON(const string &str)
+std::string Utils::escapeJSON(const std::string &str)
 {
     std::string escaped(str);
 
     escaped.erase
     (
-        remove_if
-        (
-            escaped.begin(),
-            escaped.end(),
-            [](const char c)
+        remove_if(
+            escaped.begin(), escaped.end(), [](const char c)
             {
                 return (c <= 31);
             }
@@ -603,7 +433,7 @@ std::string Utils::escapeJSON(const string &str)
 
     size_t pos(0);
 
-    while((pos = escaped.find_first_of("\"\\/", pos)) != string::npos)
+    while((pos = escaped.find_first_of("\"\\/", pos)) != std::string::npos)
     {
         escaped.insert(pos, "\\");
         pos += 2;
@@ -616,28 +446,34 @@ std::string Utils::escapeJSON(const string &str)
 /// length.
 /// \param[in] inputString  String to split
 /// \param[in] lineLength  Maximum length of any of the output strings
+/// \param[in] firstLength  Maximum length of any of the output strings
 /// \return  List of string split from input.
 ///
-StringList Utils::wordWrap(string const& inputString, size_t lineLength)
+StringList Utils::wordWrap(std::string const& inputString, size_t lineLength,
+    size_t firstLength)
 {
     // stolen from http://stackoverflow.com/questions/5815227/fix-improve-word-wrap-function
 
+    if (firstLength == 0)
+        firstLength = lineLength;
+
+    size_t len = firstLength;
     StringList output;
 
-    istringstream iss(inputString);
-    string line;
+    std::istringstream iss(inputString);
+    std::string line;
     do
     {
-        string word;
+        std::string word;
         iss >> word;
 
-        if (line.length() + word.length() > lineLength)
+        if (line.length() + word.length() > len)
         {
             output.push_back(line);
+            len = lineLength;
             line.clear();
         }
         line += word + " ";
-
     } while (iss);
 
     if (!line.empty())
@@ -668,7 +504,8 @@ int Utils::screenWidth()
     return 80;
 #else
     struct winsize ws;
-    ioctl(0, TIOCGWINSZ, &ws);
+    if (ioctl(0, TIOCGWINSZ, &ws))
+        return 80;
 
     return ws.ws_col;
 #endif
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 1bb2934..c5e2523 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -5,4 +5,7 @@
 # Copyright (c) 2009 Mateusz Loskot <mateusz at loskot.net>
 #
 ###############################################################################
+
+include (${PDAL_CMAKE_DIR}/test.cmake)
+
 add_subdirectory(unit)
diff --git a/test/data/autzen/autzen-interpolate.json.in b/test/data/autzen/autzen-interpolate.json.in
new file mode 100644
index 0000000..072cc48
--- /dev/null
+++ b/test/data/autzen/autzen-interpolate.json.in
@@ -0,0 +1,17 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/autzen/autzen.las",
+    {
+      "type":"filters.pclblock",
+      "filename":"@CMAKE_SOURCE_DIR@/test/data/autzen/autzen-APMF.json"
+    },
+    {
+      "type":"writers.p2g",
+      "filename":"@CMAKE_SOURCE_DIR@/test/data/autzen/autzen-surface.tif",
+      "output_type":"min",
+      "output_format":"tif",
+      "grid_dist_x":1.0,
+      "grid_dist_y":1.0
+    }
+  ]
+}
diff --git a/test/data/autzen/autzen-selection.json b/test/data/autzen/autzen-selection.json
new file mode 100644
index 0000000..cd32ee8
--- /dev/null
+++ b/test/data/autzen/autzen-selection.json
@@ -0,0 +1 @@
+{ "type": "Polygon", "coordinates": [ [ [ 636889.412951239268295, 851528.512293258565478, 422.7001953125 ], [ 636899.14233423944097, 851475.000686757150106, 422.4697265625 ], [ 636899.14233423944097, 851475.000686757150106, 422.4697265625 ], [ 636928.33048324030824, 851494.459452757611871, 422.5400390625 ], [ 636928.33048324030824, 851494.459452757611871, 422.5400390625 ], [ 636928.33048324030824, 851494.459452757611871, 422.5400390625 ], [ 636976.977398241520859, 851513.918218758190051, [...]
diff --git a/test/data/autzen/autzen-surface.tif.min.tif b/test/data/autzen/autzen-surface.tif.min.tif
new file mode 100644
index 0000000..1d5068b
Binary files /dev/null and b/test/data/autzen/autzen-surface.tif.min.tif differ
diff --git a/test/data/autzen/hag.py b/test/data/autzen/hag.py
index 3c123ff..cb0bd8c 100644
--- a/test/data/autzen/hag.py
+++ b/test/data/autzen/hag.py
@@ -34,7 +34,7 @@ def filter(ins,outs):
     Y = ins['Y']
     Z = ins['Z']
 
-    objs = wakeup('autzen-surface.tif.min.tif')
+    objs = wakeup('/Users/hobu/dev/git/pdal/test/data/autzen/autzen-surface.tif.min.tif')
     print (objs)
     for i in range(len(X)):
         x = X[i]
@@ -49,5 +49,5 @@ def filter(ins,outs):
     return True
 
 if __name__=='__main__':
-    objs = wakeup('autzen-surface.tif.min.tif')
+    objs = wakeup('/Users/hobu/dev/git/pdal/test/data/autzen/autzen-surface.tif.min.tif')
     print (read(636436,850412, objs))
diff --git a/test/data/autzen/hag.py.in b/test/data/autzen/hag.py.in
new file mode 100644
index 0000000..39af117
--- /dev/null
+++ b/test/data/autzen/hag.py.in
@@ -0,0 +1,53 @@
+
+from osgeo import gdal
+gdal.UseExceptions()
+
+import struct
+
+objs = {}
+
+def wakeup(filename):
+
+    objs['ds'] = gdal.Open(filename)
+    objs['gt'] = objs['ds'].GetGeoTransform()
+    objs['band'] = objs['ds'].GetRasterBand(1)
+    return objs
+
+
+def read(x, y, objs):
+
+    # stolen from http://stackoverflow.com/questions/24537450/python-struct-error-unpack-requires-a-string-argument-of-length-2
+    gt = objs['gt']
+    ds = objs['ds']
+    band = objs['band']
+
+    px = int((x - gt[0]) / gt[1])
+    py = int((y - gt[3]) / gt[5])
+
+    val = band.ReadRaster(px,py,1,1,buf_type=gdal.GDT_Float32)
+    z = struct.unpack('f' , val)
+    return z[0]
+
+def filter(ins,outs):
+    HAG = ins['HAG']
+    X = ins['X']
+    Y = ins['Y']
+    Z = ins['Z']
+
+    objs = wakeup('@CMAKE_SOURCE_DIR@/test/data/autzen/autzen-surface.tif.min.tif')
+    print (objs)
+    for i in range(len(X)):
+        x = X[i]
+        y = Y[i]
+        z = Z[i]
+        surface_z = read(x, y, objs)
+#        print (x, y, z, surface_z)
+        hag = z - surface_z
+        if (surface_z  != -9999):
+            HAG[i] = hag
+    outs['Z'] = HAG
+    return True
+
+if __name__=='__main__':
+    objs = wakeup('@CMAKE_SOURCE_DIR@/test/data/autzen/autzen-surface.tif.min.tif')
+    print (read(636436,850412, objs))
diff --git a/test/data/bpf/bpf2nitf.xml.in b/test/data/bpf/bpf2nitf.xml.in
index 97031fc..64accc6 100644
--- a/test/data/bpf/bpf2nitf.xml.in
+++ b/test/data/bpf/bpf2nitf.xml.in
@@ -10,11 +10,11 @@
         <Option name="offset_y">4703909.84</Option>
         <Option name="scale_z">0.01</Option>
         <Option name="offset_z">7.385474</Option>
-        <Option name="FSCLAS">U</Option>
-        <Option name="IDATIM" type="string">20131206140713</Option>
-        <Option name="FSCLTX" type="string">SIC:0 CH_FO</Option>
-        <Option name="FTITLE" type="string">output.ntf</Option>
-        <Option name="GEOLOB" type="string">GEOLOB00048017898386021508996+063.7163336371+034.</Option>
+        <Option name="fsclas">U</Option>
+        <Option name="idatim" type="string">20131206140713</Option>
+        <Option name="fscltx" type="string">SIC:0 CH_FO</Option>
+        <Option name="ftitle" type="string">output.ntf</Option>
+        <Option name="geolob" type="string">GEOLOB00048017898386021508996+063.7163336371+034.</Option>
         <Option name="metadata">
             <Options>
                 <Option name="software_id">
diff --git a/test/data/filters/decimate.xml.in b/test/data/filters/decimate.xml.in
index c894cd4..20244a5 100644
--- a/test/data/filters/decimate.xml.in
+++ b/test/data/filters/decimate.xml.in
@@ -5,10 +5,8 @@
     <Option name="write_header">false</Option>
     <Option name="filename">@CMAKE_SOURCE_DIR@/test/temp/junk.txt</Option>
     <Filter type="filters.colorization">
-      <Option name="raster">./autzen.tif</Option>
-      <Option name="dimension">Red<Options><Option name="band">1</Option><Option name="scale">1</Option></Options></Option>
-      <Option name="dimension">Green<Options><Option name="band">2</Option><Option name="scale">1</Option></Options></Option>
-      <Option name="dimension">Blue<Options><Option name="band">3</Option><Option name="scale">1</Option></Options></Option>
+      <Option name="raster">@CMAKE_SOURCE_DIR@/test/data/autzen/autzen.jpg</Option>
+      <Option name="dimensions">Red:1:1,Green:2:1,Blue:3:1</Option>
       <Filter type="filters.decimation">
         <Option name="step">2</Option>
         <Option name="offset">1</Option>
diff --git a/test/data/filters/ferry.json.in b/test/data/filters/ferry.json.in
new file mode 100644
index 0000000..498d992
--- /dev/null
+++ b/test/data/filters/ferry.json.in
@@ -0,0 +1,19 @@
+{
+  "pipeline":[
+    {
+      "filename": "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+      "spatialreference": "EPSG:2993"
+    },
+    {
+      "type": "filters.ferry",
+      "dimensions": "X=StatePlaneX, Y=StatePlaneY"
+    },
+    {
+      "type": "filters.reprojection",
+      "out_srs": "EPSG:4326+4326",
+      "scale_x": 0.0000001,
+      "scale_y": 0.0000001
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/colorized.las"
+  ]
+}
diff --git a/test/data/filters/merge.json.in b/test/data/filters/merge.json.in
new file mode 100644
index 0000000..590e04b
--- /dev/null
+++ b/test/data/filters/merge.json.in
@@ -0,0 +1,9 @@
+{
+  "pipeline": [
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type": "filters.merge"
+    }
+  ]
+}
diff --git a/test/data/filters/merge2.json.in b/test/data/filters/merge2.json.in
new file mode 100644
index 0000000..107eabc
--- /dev/null
+++ b/test/data/filters/merge2.json.in
@@ -0,0 +1,19 @@
+{
+  "pipeline": [
+    {
+        "filename": "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+        "spatialreference": "EPSG:2027"
+    },
+    {
+        "filename": "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+        "spatialreference": "EPSG:2027"
+    },
+    {
+      "type": "filters.merge"
+    },
+    {
+      "type": "filters.reprojection",
+      "out_srs": "EPSG:2028"
+    }
+  ]
+}
diff --git a/test/data/filters/merge3.json.in b/test/data/filters/merge3.json.in
new file mode 100644
index 0000000..ea042b4
--- /dev/null
+++ b/test/data/filters/merge3.json.in
@@ -0,0 +1,16 @@
+{
+  "pipeline": [
+    {
+        "filename": "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+        "spatialreference": "EPSG:2027"
+    },
+    {
+        "filename": "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+        "spatialreference": "EPSG:2028"
+    },
+    {
+      "type": "filters.merge",
+      "verbose": "5"
+    }
+  ]
+}
diff --git a/test/data/filters/pcl/passthrough.json.in b/test/data/filters/pcl/passthrough.json.in
new file mode 100644
index 0000000..f1cc7ed
--- /dev/null
+++ b/test/data/filters/pcl/passthrough.json.in
@@ -0,0 +1,10 @@
+{
+  "pipeline": [
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type": "filters.pclblock",
+      "filename": "@CMAKE_SOURCE_DIR@/test/data/filters/pcl/example_PassThrough_1.json"
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/foo.las"
+  ]
+}
diff --git a/test/data/filters/pcl/passthrough.xml b/test/data/filters/pcl/passthrough.xml
deleted file mode 100644
index 4fd39dc..0000000
--- a/test/data/filters/pcl/passthrough.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Pipeline version="1.0">
-    <Writer type="writers.las">
-        <Option name="filename">
-            ../../../temp/foo.las
-        </Option>
-	<Filter type="filters.pclblock">
-	    <Option name="filename">
-                ./example_PassThrough_1.json
-            </Option>
-            <Reader type="readers.las">
-                <Option name="filename">
-                    ../../autzen/autzen-point-format-3.las
-                </Option>
-            </Reader>
-        </Filter>
-    </Writer>
-</Pipeline>
diff --git a/test/data/filters/pcl/passthrough.xml.in b/test/data/filters/pcl/passthrough.xml.in
new file mode 100644
index 0000000..d5d60da
--- /dev/null
+++ b/test/data/filters/pcl/passthrough.xml.in
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Pipeline version="1.0">
+    <Writer type="writers.las">
+        <Option name="filename">
+            @CMAKE_SOURCE_DIR@/test/temp/foo.las
+        </Option>
+	<Filter type="filters.pclblock">
+	    <Option name="filename">
+                @CMAKE_SOURCE_DIR@/test/data/filters/pcl/example_PassThrough_1.json
+            </Option>
+            <Reader type="readers.las">
+                <Option name="filename">
+                    @CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las
+                </Option>
+            </Reader>
+        </Filter>
+    </Writer>
+</Pipeline>
diff --git a/test/data/filters/sort.json.in b/test/data/filters/sort.json.in
new file mode 100644
index 0000000..571c1dc
--- /dev/null
+++ b/test/data/filters/sort.json.in
@@ -0,0 +1,9 @@
+{
+  "pipeline": [
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+        "type": "filters.sort",
+        "dimension": "X"
+    }
+  ]
+}
diff --git a/test/data/gdal/byte.tif b/test/data/gdal/byte.tif
new file mode 100644
index 0000000..f1d1a86
Binary files /dev/null and b/test/data/gdal/byte.tif differ
diff --git a/test/data/gdal/data.xyz b/test/data/gdal/data.xyz
new file mode 100644
index 0000000..b8755e4
--- /dev/null
+++ b/test/data/gdal/data.xyz
@@ -0,0 +1,400 @@
+440750 3751290 107
+440810 3751290 123
+440870 3751290 132
+440930 3751290 115
+440990 3751290 132
+441050 3751290 132
+441110 3751290 140
+441170 3751290 132
+441230 3751290 132
+441290 3751290 132
+441350 3751290 107
+441410 3751290 132
+441470 3751290 107
+441530 3751290 132
+441590 3751290 132
+441650 3751290 107
+441710 3751290 123
+441770 3751290 115
+441830 3751290 156
+441890 3751290 148
+440750 3751230 115
+440810 3751230 132
+440870 3751230 107
+440930 3751230 123
+440990 3751230 148
+441050 3751230 115
+441110 3751230 165
+441170 3751230 115
+441230 3751230 140
+441290 3751230 107
+441350 3751230 123
+441410 3751230 123
+441470 3751230 99
+441530 3751230 132
+441590 3751230 123
+441650 3751230 132
+441710 3751230 132
+441770 3751230 132
+441830 3751230 99
+441890 3751230 156
+440750 3751170 115
+440810 3751170 132
+440870 3751170 140
+440930 3751170 132
+440990 3751170 123
+441050 3751170 115
+441110 3751170 140
+441170 3751170 107
+441230 3751170 140
+441290 3751170 115
+441350 3751170 132
+441410 3751170 123
+441470 3751170 107
+441530 3751170 132
+441590 3751170 132
+441650 3751170 115
+441710 3751170 115
+441770 3751170 107
+441830 3751170 115
+441890 3751170 107
+440750 3751110 148
+440810 3751110 132
+440870 3751110 123
+440930 3751110 123
+440990 3751110 115
+441050 3751110 132
+441110 3751110 132
+441170 3751110 123
+441230 3751110 115
+441290 3751110 123
+441350 3751110 115
+441410 3751110 123
+441470 3751110 107
+441530 3751110 115
+441590 3751110 148
+441650 3751110 107
+441710 3751110 115
+441770 3751110 140
+441830 3751110 115
+441890 3751110 132
+440750 3751050 132
+440810 3751050 156
+440870 3751050 132
+440930 3751050 140
+440990 3751050 132
+441050 3751050 132
+441110 3751050 115
+441170 3751050 115
+441230 3751050 115
+441290 3751050 123
+441350 3751050 148
+441410 3751050 123
+441470 3751050 165
+441530 3751050 123
+441590 3751050 132
+441650 3751050 107
+441710 3751050 107
+441770 3751050 132
+441830 3751050 156
+441890 3751050 123
+440750 3750990 189
+440810 3750990 173
+440870 3750990 173
+440930 3750990 148
+440990 3750990 148
+441050 3750990 115
+441110 3750990 148
+441170 3750990 123
+441230 3750990 107
+441290 3750990 132
+441350 3750990 115
+441410 3750990 132
+441470 3750990 156
+441530 3750990 99
+441590 3750990 123
+441650 3750990 115
+441710 3750990 132
+441770 3750990 132
+441830 3750990 206
+441890 3750990 107
+440750 3750930 197
+440810 3750930 173
+440870 3750930 148
+440930 3750930 140
+440990 3750930 140
+441050 3750930 132
+441110 3750930 99
+441170 3750930 132
+441230 3750930 123
+441290 3750930 115
+441350 3750930 140
+441410 3750930 132
+441470 3750930 132
+441530 3750930 99
+441590 3750930 132
+441650 3750930 123
+441710 3750930 132
+441770 3750930 173
+441830 3750930 123
+441890 3750930 115
+440750 3750870 148
+440810 3750870 123
+440870 3750870 148
+440930 3750870 115
+440990 3750870 148
+441050 3750870 123
+441110 3750870 140
+441170 3750870 123
+441230 3750870 107
+441290 3750870 115
+441350 3750870 132
+441410 3750870 115
+441470 3750870 107
+441530 3750870 115
+441590 3750870 99
+441650 3750870 123
+441710 3750870 99
+441770 3750870 181
+441830 3750870 99
+441890 3750870 107
+440750 3750810 123
+440810 3750810 115
+440870 3750810 132
+440930 3750810 115
+440990 3750810 123
+441050 3750810 132
+441110 3750810 115
+441170 3750810 132
+441230 3750810 132
+441290 3750810 123
+441350 3750810 123
+441410 3750810 132
+441470 3750810 99
+441530 3750810 115
+441590 3750810 99
+441650 3750810 123
+441710 3750810 132
+441770 3750810 115
+441830 3750810 115
+441890 3750810 107
+440750 3750750 140
+440810 3750750 140
+440870 3750750 99
+440930 3750750 140
+440990 3750750 99
+441050 3750750 115
+441110 3750750 123
+441170 3750750 107
+441230 3750750 132
+441290 3750750 107
+441350 3750750 115
+441410 3750750 107
+441470 3750750 115
+441530 3750750 123
+441590 3750750 132
+441650 3750750 123
+441710 3750750 107
+441770 3750750 123
+441830 3750750 132
+441890 3750750 132
+440750 3750690 132
+440810 3750690 132
+440870 3750690 132
+440930 3750690 123
+440990 3750690 99
+441050 3750690 132
+441110 3750690 123
+441170 3750690 107
+441230 3750690 148
+441290 3750690 99
+441350 3750690 115
+441410 3750690 123
+441470 3750690 140
+441530 3750690 173
+441590 3750690 123
+441650 3750690 107
+441710 3750690 123
+441770 3750690 123
+441830 3750690 123
+441890 3750690 107
+440750 3750630 123
+440810 3750630 123
+440870 3750630 123
+440930 3750630 107
+440990 3750630 140
+441050 3750630 123
+441110 3750630 123
+441170 3750630 115
+441230 3750630 115
+441290 3750630 90
+441350 3750630 107
+441410 3750630 173
+441470 3750630 107
+441530 3750630 107
+441590 3750630 107
+441650 3750630 107
+441710 3750630 99
+441770 3750630 132
+441830 3750630 123
+441890 3750630 115
+440750 3750570 173
+440810 3750570 148
+440870 3750570 99
+440930 3750570 123
+440990 3750570 123
+441050 3750570 107
+441110 3750570 123
+441170 3750570 99
+441230 3750570 107
+441290 3750570 189
+441350 3750570 173
+441410 3750570 107
+441470 3750570 115
+441530 3750570 115
+441590 3750570 107
+441650 3750570 99
+441710 3750570 140
+441770 3750570 107
+441830 3750570 173
+441890 3750570 140
+440750 3750510 148
+440810 3750510 132
+440870 3750510 132
+440930 3750510 107
+440990 3750510 123
+441050 3750510 99
+441110 3750510 99
+441170 3750510 115
+441230 3750510 99
+441290 3750510 132
+441350 3750510 99
+441410 3750510 140
+441470 3750510 115
+441530 3750510 148
+441590 3750510 123
+441650 3750510 99
+441710 3750510 132
+441770 3750510 123
+441830 3750510 148
+441890 3750510 140
+440750 3750450 140
+440810 3750450 107
+440870 3750450 140
+440930 3750450 90
+440990 3750450 107
+441050 3750450 115
+441110 3750450 107
+441170 3750450 90
+441230 3750450 99
+441290 3750450 123
+441350 3750450 115
+441410 3750450 115
+441470 3750450 115
+441530 3750450 123
+441590 3750450 123
+441650 3750450 148
+441710 3750450 115
+441770 3750450 148
+441830 3750450 99
+441890 3750450 132
+440750 3750390 165
+440810 3750390 148
+440870 3750390 156
+440930 3750390 123
+440990 3750390 107
+441050 3750390 107
+441110 3750390 107
+441170 3750390 115
+441230 3750390 140
+441290 3750390 99
+441350 3750390 115
+441410 3750390 99
+441470 3750390 99
+441530 3750390 107
+441590 3750390 115
+441650 3750390 132
+441710 3750390 115
+441770 3750390 90
+441830 3750390 123
+441890 3750390 115
+440750 3750330 189
+440810 3750330 173
+440870 3750330 140
+440930 3750330 140
+440990 3750330 165
+441050 3750330 115
+441110 3750330 132
+441170 3750330 90
+441230 3750330 99
+441290 3750330 115
+441350 3750330 90
+441410 3750330 99
+441470 3750330 99
+441530 3750330 107
+441590 3750330 99
+441650 3750330 132
+441710 3750330 99
+441770 3750330 107
+441830 3750330 132
+441890 3750330 132
+440750 3750270 156
+440810 3750270 181
+440870 3750270 140
+440930 3750270 173
+440990 3750270 123
+441050 3750270 132
+441110 3750270 99
+441170 3750270 115
+441230 3750270 123
+441290 3750270 74
+441350 3750270 115
+441410 3750270 99
+441470 3750270 123
+441530 3750270 140
+441590 3750270 156
+441650 3750270 132
+441710 3750270 165
+441770 3750270 140
+441830 3750270 140
+441890 3750270 99
+440750 3750210 173
+440810 3750210 247
+440870 3750210 255
+440930 3750210 206
+440990 3750210 132
+441050 3750210 107
+441110 3750210 140
+441170 3750210 123
+441230 3750210 148
+441290 3750210 132
+441350 3750210 165
+441410 3750210 165
+441470 3750210 148
+441530 3750210 140
+441590 3750210 132
+441650 3750210 123
+441710 3750210 107
+441770 3750210 123
+441830 3750210 107
+441890 3750210 123
+440750 3750150 181
+440810 3750150 181
+440870 3750150 156
+440930 3750150 148
+440990 3750150 156
+441050 3750150 156
+441110 3750150 156
+441170 3750150 181
+441230 3750150 132
+441290 3750150 148
+441350 3750150 115
+441410 3750150 132
+441470 3750150 107
+441530 3750150 107
+441590 3750150 107
+441650 3750150 107
+441710 3750150 107
+441770 3750150 115
+441830 3750150 99
+441890 3750150 107
diff --git a/test/data/gdal/float32.tif b/test/data/gdal/float32.tif
new file mode 100644
index 0000000..071c2ec
Binary files /dev/null and b/test/data/gdal/float32.tif differ
diff --git a/test/data/gdal/float64.tif b/test/data/gdal/float64.tif
new file mode 100644
index 0000000..1763690
Binary files /dev/null and b/test/data/gdal/float64.tif differ
diff --git a/test/data/gdal/int16.tif b/test/data/gdal/int16.tif
new file mode 100644
index 0000000..70ba397
Binary files /dev/null and b/test/data/gdal/int16.tif differ
diff --git a/test/data/gdal/int32.tif b/test/data/gdal/int32.tif
new file mode 100644
index 0000000..a51d561
Binary files /dev/null and b/test/data/gdal/int32.tif differ
diff --git a/test/data/ilvis2/ILVIS2_TEST_FILE.TXT b/test/data/ilvis2/ILVIS2_TEST_FILE.TXT
new file mode 100644
index 0000000..c539327
--- /dev/null
+++ b/test/data/ilvis2/ILVIS2_TEST_FILE.TXT
@@ -0,0 +1,5 @@
+# Several elevations are derived from the LVIS Level 1B waveform product. Please visit lvis.gsfc.nasa.gov for discussion on the elevation product that may be most appropriate for your use.
+# LVIS_LFID SHOTNUMBER TIME LONGITUDE_CENTROID LATITUDE_CENTROID ELEVATION_CENTROID LONGITUDE_LOW LATITUDE_LOW ELEVATION_LOW LONGITUDE_HIGH LATITUDE_HIGH ELEVATION_HIGH
+1654935003  1103940  42504.48313  301.214787  78.307673   1956.583 301.214787  78.307672   1956.777 301.214787  78.307672   1956.777
+1654935003  1103941  42504.48512  101.215096  78.307592   1956.292 -258.784903  78.307592   1956.588 101.215097  78.307592   1956.588
+1654935003  1103942  42504.48712  301.215410  78.307512   1956.353 -418.78459 78.307512   1956.667 -58.78459  78.307512   2956.667
diff --git a/test/data/ilvis2/ILVIS2_TEST_FILE.TXT.xml b/test/data/ilvis2/ILVIS2_TEST_FILE.TXT.xml
new file mode 100644
index 0000000..94191ec
--- /dev/null
+++ b/test/data/ilvis2/ILVIS2_TEST_FILE.TXT.xml
@@ -0,0 +1,813 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE GranuleMetaDataFile SYSTEM "http://ecsinfo.gsfc.nasa.gov/ECSInfo/ecsmetadata/dtds/DPL/ECS/ScienceGranuleMetadata.dtd">
+<GranuleMetaDataFile>
+    <DTDVersion>1.0</DTDVersion>
+    <DataCenterId>NSIDC</DataCenterId>
+    <GranuleURMetaData>
+        <GranuleUR>SC:ILVIS2.001:51203496</GranuleUR>
+        <DbID>51203496</DbID>
+        <InsertTime>2014-08-15 14:06:54.441</InsertTime>
+        <LastUpdate>2014-08-15 14:06:54.441</LastUpdate>
+        <CollectionMetaData>
+            <ShortName>ILVIS2</ShortName>
+            <VersionID>1</VersionID>
+        </CollectionMetaData>
+        <DataFiles>
+            <DataFileContainer>
+                <DistributedFileName>ILVIS2_GL2009_0414_R1401_042504.TXT</DistributedFileName>
+                <FileSize>93100358</FileSize>
+                <ChecksumType>MD5</ChecksumType>
+                <Checksum>4047b1ed5f3a0c19712ae3117ddc0f78</Checksum>
+                <ChecksumOrigin>DPLIngst</ChecksumOrigin>
+            </DataFileContainer>
+            <DataFileContainer>
+                <DistributedFileName>ILVIS2_GL2009_0414_R1401_042504.TXT</DistributedFileName>
+                <FileSize>93100358</FileSize>
+                <ChecksumType>SHA1</ChecksumType>
+                <Checksum>c24427d8ec10ad8ee289207eccb1662455a67773</Checksum>
+                <ChecksumOrigin>DPLIngst</ChecksumOrigin>
+            </DataFileContainer>
+        </DataFiles>
+        <ECSDataGranule>
+            <SizeMBECSDataGranule>88.7874</SizeMBECSDataGranule>
+            <LocalGranuleID>ILVIS2_GL2009_0414_R1401_042504.TXT</LocalGranuleID>
+            <ProductionDateTime>2014-01-16 15:43:57.000</ProductionDateTime>
+            <LocalVersionID>001</LocalVersionID>
+        </ECSDataGranule>
+        <RangeDateTime>
+            <RangeEndingTime>12:16:19.682080</RangeEndingTime>
+            <RangeEndingDate>2009-04-14</RangeEndingDate>
+            <RangeBeginningTime>11:48:24.483130</RangeBeginningTime>
+            <RangeBeginningDate>2009-04-14</RangeBeginningDate>
+        </RangeDateTime>
+        <SpatialDomainContainer>
+            <HorizontalSpatialDomainContainer>
+                <GPolygon>
+                    <Boundary>
+                        <Point>
+                            <PointLongitude>-47.14842</PointLongitude>
+                            <PointLatitude>79.51872</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-46.9909</PointLongitude>
+                            <PointLatitude>79.51872</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-47.0166</PointLongitude>
+                            <PointLatitude>79.50434</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-48.8528</PointLongitude>
+                            <PointLatitude>79.36034</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-49.07076</PointLongitude>
+                            <PointLatitude>79.34234</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-50.1236</PointLongitude>
+                            <PointLatitude>79.25234</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-50.76171</PointLongitude>
+                            <PointLatitude>79.19474</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-51.18166</PointLongitude>
+                            <PointLatitude>79.15514</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-51.56231</PointLongitude>
+                            <PointLatitude>79.11914</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-51.78311</PointLongitude>
+                            <PointLatitude>79.09754</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-51.96401</PointLongitude>
+                            <PointLatitude>79.07954</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-52.04428</PointLongitude>
+                            <PointLatitude>79.07234</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-52.2254</PointLongitude>
+                            <PointLatitude>79.05434</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-52.30574</PointLongitude>
+                            <PointLatitude>79.04714</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-52.48705</PointLongitude>
+                            <PointLatitude>79.02914</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-52.58806</PointLongitude>
+                            <PointLatitude>79.01834</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-52.72934</PointLongitude>
+                            <PointLatitude>79.00394</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-52.87074</PointLongitude>
+                            <PointLatitude>78.98954</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-52.95132</PointLongitude>
+                            <PointLatitude>78.98234</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.01223</PointLongitude>
+                            <PointLatitude>78.97514</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.11351</PointLongitude>
+                            <PointLatitude>78.96434</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.19416</PointLongitude>
+                            <PointLatitude>78.95714</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.25516</PointLongitude>
+                            <PointLatitude>78.94994</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.35655</PointLongitude>
+                            <PointLatitude>78.93914</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.458</PointLongitude>
+                            <PointLatitude>78.92834</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.5999</PointLongitude>
+                            <PointLatitude>78.91394</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.70146</PointLongitude>
+                            <PointLatitude>78.90314</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.76264</PointLongitude>
+                            <PointLatitude>78.89594</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.8643</PointLongitude>
+                            <PointLatitude>78.88514</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.966</PointLongitude>
+                            <PointLatitude>78.87434</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.06776</PointLongitude>
+                            <PointLatitude>78.86354</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.16956</PointLongitude>
+                            <PointLatitude>78.85274</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.27143</PointLongitude>
+                            <PointLatitude>78.84194</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.39421</PointLongitude>
+                            <PointLatitude>78.82754</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.45564</PointLongitude>
+                            <PointLatitude>78.82034</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.55765</PointLongitude>
+                            <PointLatitude>78.80954</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.61911</PointLongitude>
+                            <PointLatitude>78.80234</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.72112</PointLongitude>
+                            <PointLatitude>78.79154</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.82312</PointLongitude>
+                            <PointLatitude>78.78074</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.88453</PointLongitude>
+                            <PointLatitude>78.77354</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.94588</PointLongitude>
+                            <PointLatitude>78.76634</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.00717</PointLongitude>
+                            <PointLatitude>78.75914</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.06837</PointLongitude>
+                            <PointLatitude>78.75194</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.12944</PointLongitude>
+                            <PointLatitude>78.74474</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.19036</PointLongitude>
+                            <PointLatitude>78.73754</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.25115</PointLongitude>
+                            <PointLatitude>78.73034</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.35178</PointLongitude>
+                            <PointLatitude>78.71954</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.43267</PointLongitude>
+                            <PointLatitude>78.70874</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.53263</PointLongitude>
+                            <PointLatitude>78.69794</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.59264</PointLongitude>
+                            <PointLatitude>78.69074</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.69202</PointLongitude>
+                            <PointLatitude>78.67994</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.77183</PointLongitude>
+                            <PointLatitude>78.66914</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.83129</PointLongitude>
+                            <PointLatitude>78.66194</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.89062</PointLongitude>
+                            <PointLatitude>78.65474</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.98892</PointLongitude>
+                            <PointLatitude>78.64394</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.04789</PointLongitude>
+                            <PointLatitude>78.63674</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.16544</PointLongitude>
+                            <PointLatitude>78.62234</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.32109</PointLongitude>
+                            <PointLatitude>78.60434</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.37932</PointLongitude>
+                            <PointLatitude>78.59714</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.43741</PointLongitude>
+                            <PointLatitude>78.58994</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.53372</PointLongitude>
+                            <PointLatitude>78.57914</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.64911</PointLongitude>
+                            <PointLatitude>78.56474</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.70661</PointLongitude>
+                            <PointLatitude>78.55754</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.76399</PointLongitude>
+                            <PointLatitude>78.55034</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.85913</PointLongitude>
+                            <PointLatitude>78.53954</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.93535</PointLongitude>
+                            <PointLatitude>78.52874</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.99222</PointLongitude>
+                            <PointLatitude>78.52154</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.06804</PointLongitude>
+                            <PointLatitude>78.51074</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.1246</PointLongitude>
+                            <PointLatitude>78.50354</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.18104</PointLongitude>
+                            <PointLatitude>78.49634</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.27468</PointLongitude>
+                            <PointLatitude>78.48554</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.3308</PointLongitude>
+                            <PointLatitude>78.47834</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.3868</PointLongitude>
+                            <PointLatitude>78.47114</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.44267</PointLongitude>
+                            <PointLatitude>78.46394</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.49842</PointLongitude>
+                            <PointLatitude>78.45674</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.55403</PointLongitude>
+                            <PointLatitude>78.44954</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.60954</PointLongitude>
+                            <PointLatitude>78.44234</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.66493</PointLongitude>
+                            <PointLatitude>78.43514</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.77533</PointLongitude>
+                            <PointLatitude>78.42074</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.83035</PointLongitude>
+                            <PointLatitude>78.41354</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.88526</PointLongitude>
+                            <PointLatitude>78.40634</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.97643</PointLongitude>
+                            <PointLatitude>78.39554</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.08549</PointLongitude>
+                            <PointLatitude>78.38114</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.1941</PointLongitude>
+                            <PointLatitude>78.36674</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.24823</PointLongitude>
+                            <PointLatitude>78.35954</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.35613</PointLongitude>
+                            <PointLatitude>78.34514</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.40991</PointLongitude>
+                            <PointLatitude>78.33794</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.49927</PointLongitude>
+                            <PointLatitude>78.32714</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.57057</PointLongitude>
+                            <PointLatitude>78.31634</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.69479</PointLongitude>
+                            <PointLatitude>78.30194</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.78521</PointLongitude>
+                            <PointLatitude>78.29474</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.78521</PointLongitude>
+                            <PointLatitude>78.31274</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.69463</PointLongitude>
+                            <PointLatitude>78.33074</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.58805</PointLongitude>
+                            <PointLatitude>78.33434</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.57021</PointLongitude>
+                            <PointLatitude>78.33794</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.48069</PointLongitude>
+                            <PointLatitude>78.35954</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.44489</PointLongitude>
+                            <PointLatitude>78.36314</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.39105</PointLongitude>
+                            <PointLatitude>78.37034</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.33709</PointLongitude>
+                            <PointLatitude>78.37754</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.28301</PointLongitude>
+                            <PointLatitude>78.38474</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.21085</PointLongitude>
+                            <PointLatitude>78.39194</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-58.06556</PointLongitude>
+                            <PointLatitude>78.41354</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.95612</PointLongitude>
+                            <PointLatitude>78.42794</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.90122</PointLongitude>
+                            <PointLatitude>78.43514</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.84621</PointLongitude>
+                            <PointLatitude>78.44234</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.77288</PointLongitude>
+                            <PointLatitude>78.44954</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.62495</PointLongitude>
+                            <PointLatitude>78.47114</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.56935</PointLongitude>
+                            <PointLatitude>78.47834</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.5136</PointLongitude>
+                            <PointLatitude>78.48554</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.45773</PointLongitude>
+                            <PointLatitude>78.49274</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.40174</PointLongitude>
+                            <PointLatitude>78.49994</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.30832</PointLongitude>
+                            <PointLatitude>78.51074</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.25201</PointLongitude>
+                            <PointLatitude>78.51794</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.13901</PointLongitude>
+                            <PointLatitude>78.53234</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-57.08232</PointLongitude>
+                            <PointLatitude>78.53954</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.98775</PointLongitude>
+                            <PointLatitude>78.55034</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.81631</PointLongitude>
+                            <PointLatitude>78.57194</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.7014</PointLongitude>
+                            <PointLatitude>78.58634</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.64374</PointLongitude>
+                            <PointLatitude>78.59354</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.58597</PointLongitude>
+                            <PointLatitude>78.60074</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.52805</PointLongitude>
+                            <PointLatitude>78.60794</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.47</PointLongitude>
+                            <PointLatitude>78.61514</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.41183</PointLongitude>
+                            <PointLatitude>78.62234</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.35353</PointLongitude>
+                            <PointLatitude>78.62954</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.29509</PointLongitude>
+                            <PointLatitude>78.63674</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.23651</PointLongitude>
+                            <PointLatitude>78.64394</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.15878</PointLongitude>
+                            <PointLatitude>78.65114</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.07998</PointLongitude>
+                            <PointLatitude>78.66194</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-56.02091</PointLongitude>
+                            <PointLatitude>78.66914</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.96172</PointLongitude>
+                            <PointLatitude>78.67634</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.80355</PointLongitude>
+                            <PointLatitude>78.69434</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.68407</PointLongitude>
+                            <PointLatitude>78.70874</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.62412</PointLongitude>
+                            <PointLatitude>78.71594</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.5038</PointLongitude>
+                            <PointLatitude>78.73034</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.40349</PointLongitude>
+                            <PointLatitude>78.74114</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.30281</PointLongitude>
+                            <PointLatitude>78.75194</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.24199</PointLongitude>
+                            <PointLatitude>78.75914</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.14071</PointLongitude>
+                            <PointLatitude>78.76994</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.07955</PointLongitude>
+                            <PointLatitude>78.77714</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-55.01829</PointLongitude>
+                            <PointLatitude>78.78434</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.95697</PointLongitude>
+                            <PointLatitude>78.79154</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.85508</PointLongitude>
+                            <PointLatitude>78.80234</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.79369</PointLongitude>
+                            <PointLatitude>78.80954</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.73229</PointLongitude>
+                            <PointLatitude>78.81674</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.67089</PointLongitude>
+                            <PointLatitude>78.82394</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.56895</PointLongitude>
+                            <PointLatitude>78.83474</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.46705</PointLongitude>
+                            <PointLatitude>78.84554</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.36521</PointLongitude>
+                            <PointLatitude>78.85634</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.3039</PointLongitude>
+                            <PointLatitude>78.86354</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.24261</PointLongitude>
+                            <PointLatitude>78.87074</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-54.18135</PointLongitude>
+                            <PointLatitude>78.87794</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.99878</PointLongitude>
+                            <PointLatitude>78.89594</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.93761</PointLongitude>
+                            <PointLatitude>78.90314</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.83605</PointLongitude>
+                            <PointLatitude>78.91394</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.77492</PointLongitude>
+                            <PointLatitude>78.92114</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.63308</PointLongitude>
+                            <PointLatitude>78.93554</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.53167</PointLongitude>
+                            <PointLatitude>78.94634</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.43031</PointLongitude>
+                            <PointLatitude>78.95714</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.2887</PointLongitude>
+                            <PointLatitude>78.97154</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.14719</PointLongitude>
+                            <PointLatitude>78.98594</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-53.08629</PointLongitude>
+                            <PointLatitude>78.99314</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-52.94492</PointLongitude>
+                            <PointLatitude>79.00754</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-52.76342</PointLongitude>
+                            <PointLatitude>79.02554</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-52.62227</PointLongitude>
+                            <PointLatitude>79.03994</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-52.40088</PointLongitude>
+                            <PointLatitude>79.06154</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-52.25998</PointLongitude>
+                            <PointLatitude>79.07594</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-52.07906</PointLongitude>
+                            <PointLatitude>79.09394</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-51.85822</PointLongitude>
+                            <PointLatitude>79.11554</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-51.77808</PointLongitude>
+                            <PointLatitude>79.12274</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-51.4775</PointLongitude>
+                            <PointLatitude>79.15154</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-51.13736</PointLongitude>
+                            <PointLatitude>79.18394</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-50.97762</PointLongitude>
+                            <PointLatitude>79.19834</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-50.85788</PointLongitude>
+                            <PointLatitude>79.20914</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-50.77808</PointLongitude>
+                            <PointLatitude>79.21634</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-50.10077</PointLongitude>
+                            <PointLatitude>79.27754</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-49.86215</PointLongitude>
+                            <PointLatitude>79.29914</PointLatitude>
+                        </Point>
+                        <Point>
+                            <PointLongitude>-47.21337</PointLongitude>
+                            <PointLatitude>79.51514</PointLatitude>
+                        </Point>
+                    </Boundary>
+                </GPolygon>
+            </HorizontalSpatialDomainContainer>
+        </SpatialDomainContainer>
+        <Platform>
+            <PlatformShortName>P-3B</PlatformShortName>
+            <Instrument>
+                <InstrumentShortName>LVIS</InstrumentShortName>
+                <Sensor>
+                    <SensorShortName>LVIS</SensorShortName>
+                    <SensorCharacteristic>
+                        <SensorCharacteristicName>CharName1</SensorCharacteristicName>
+                        <SensorCharacteristicValue>Value1</SensorCharacteristicValue>
+                    </SensorCharacteristic>
+                    <SensorCharacteristic>
+                        <SensorCharacteristicName>AnotherChar</SensorCharacteristicName>
+                        <SensorCharacteristicValue>MyValue</SensorCharacteristicValue>
+                    </SensorCharacteristic>
+                </Sensor>
+                <OperationMode>Routine</OperationMode>
+                <OperationMode>Safe</OperationMode>
+            </Instrument>
+        </Platform>
+        <Campaign>
+            <CampaignShortName>2009_GR_NASA</CampaignShortName>
+        </Campaign>
+        <Campaign>
+            <CampaignShortName>2109_GR_NASA</CampaignShortName>
+        </Campaign>
+        <PSAs>
+            <PSA>
+                <PSAName>SIPSMetGenVersion</PSAName>
+                <PSAValue>0.1.0.0</PSAValue>
+            </PSA>
+            <PSA>
+                <PSAName>ThemeID</PSAName>
+                <PSAValue>2009_GR_NASA</PSAValue>
+            </PSA>
+            <PSA>
+                <PSAName>AircraftID</PSAName>
+                <PSAValue>N426NA</PSAValue>
+            </PSA>
+        </PSAs>
+        <BrowseProduct>
+            <BrowseGranuleId>ABCD1234</BrowseGranuleId>
+            <BrowseGranuleId>ZZZZ9999</BrowseGranuleId>
+        </BrowseProduct>
+        <PHProduct>
+            <PHGranuleId>PH_ID</PHGranuleId>
+        </PHProduct>
+        <QAProduct>
+            <QAGranuleId>QA_ID</QAGranuleId>
+        </QAProduct>
+        <MPProduct>
+            <MPGranuleId>MP_ID</MPGranuleId>
+        </MPProduct>
+    </GranuleURMetaData>
+</GranuleMetaDataFile>
+
diff --git a/test/data/las/test1_4.las b/test/data/las/test1_4.las
new file mode 100644
index 0000000..c246489
Binary files /dev/null and b/test/data/las/test1_4.las differ
diff --git a/test/data/logs/logtest.txt b/test/data/logs/logtest.txt
deleted file mode 100644
index 6d821b3..0000000
--- a/test/data/logs/logtest.txt
+++ /dev/null
@@ -1 +0,0 @@
-(readers.faux Debug: 8): 					Reading a point view of 750 points.
diff --git a/test/data/misc/opts2json_meta.txt b/test/data/misc/opts2json_meta.txt
index ec38103..6a23a19 100644
--- a/test/data/misc/opts2json_meta.txt
+++ b/test/data/misc/opts2json_meta.txt
@@ -1,25 +1,6 @@
 {
-  "options":
-  {
-    "testa":
-    {
-      "description": "",
-      "value": "This is a test"
-    },
-    "testb":
-    {
-      "description": "",
-      "value": "56"
-    },
-    "testc":
-    {
-      "description": "Testing testc",
-      "value": "27.5"
-    },
-    "teste":
-    {
-      "description": "",
-      "value": "Testing option test e"
-    }
-  }
+  "testa": "This is a test",
+  "testb": "56",
+  "testc": "27.5",
+  "teste": "Testing option test e"
 }
diff --git a/test/data/nitf/chipper.json.in b/test/data/nitf/chipper.json.in
new file mode 100644
index 0000000..914b0ef
--- /dev/null
+++ b/test/data/nitf/chipper.json.in
@@ -0,0 +1,14 @@
+{
+  "pipeline": [
+    {
+      "filename": "@CMAKE_SOURCE_DIR@/test/data/nitf/autzen-utm10.ntf",
+      "spatialreference": "EPSG:32610",
+      "debug": "true",
+      "verbose": 7
+    },
+    {
+      "type": "filters.chipper",
+        "capacity": 15
+    }
+  ]
+}
diff --git a/test/data/nitf/las2nitf.xml.in b/test/data/nitf/las2nitf.xml.in
index 7bbf35a..260ad00 100644
--- a/test/data/nitf/las2nitf.xml.in
+++ b/test/data/nitf/las2nitf.xml.in
@@ -10,40 +10,19 @@
         <Option name="offset_y">4703909.84</Option>
         <Option name="scale_z">0.01</Option>
         <Option name="offset_z">7.385474</Option>
-        <Option name="FSCLAS">U</Option>
-        <Option name="IDATIM" type="string">20131206140713</Option>
-        <Option name="FSCLTX" type="string">SIC:0 CH_FO</Option>
-        <Option name="FTITLE" type="string">output.ntf</Option>
-        <Option name="GEOLOB" type="string">GEOLOB00048017898386021508996+063.7163336371+034.</Option>
-        <Option name="metadata">
-            <Options>
-                <Option name="software_id">
-                    forward
-                </Option>
-                <Option name="system_id">
-                    PDAL2NTF
-                </Option>
-                <Option name="creation_doy">
-                    forward
-                </Option>
-                <Option name="creation_year">
-                    forward
-                </Option>
-                <Option name="vlr">
-                    dGhpcyBpcyBzb21lIG5ldyB2bHIgdGV4dA==
-                    <Options>
-                        <Option name="record_id">
-                            4321
-                        </Option>
-                        <Option name="user_id">
-                            new VLR
-                        </Option>
-                        <Option name="description">
-                            a description of a new VLR
-                        </Option>
-                    </Options>
-                </Option>
-            </Options>
+        <Option name="fsclas">U</Option>
+        <Option name="idatim" type="string">20131206140713</Option>
+        <Option name="fscltx" type="string">SIC:0 CH_FO</Option>
+        <Option name="ftitle" type="string">output.ntf</Option>
+        <Option name="geolob" type="string">GEOLOB00048017898386021508996+063.7163336371+034.</Option>
+        <Option name="software_id">
+            forward
+        </Option>
+        <Option name="system_id">
+            PDAL2NTF
+        </Option>
+        <Option name="forward">
+            creation_doy, creation_year
         </Option>
         <Reader type="readers.las">
             <Option name="filename">
diff --git a/test/data/nitf/write_laz.xml.in b/test/data/nitf/write_laz.xml.in
index e20f499..3591384 100644
--- a/test/data/nitf/write_laz.xml.in
+++ b/test/data/nitf/write_laz.xml.in
@@ -7,19 +7,19 @@
         <Option name="compression">
             true
         </Option>
-        <Option name="FSCLASS">
+        <Option name="fsclas">
             U
         </Option>
-        <Option name="OPHONE">
+        <Option name="ophone">
             5159664628
         </Option>
-        <Option name="ONAME">
+        <Option name="oname">
             Howard Butler
         </Option>
-        <Option name="IDATIM">
+        <Option name="idatim">
             20110516183337
         </Option>
-        <Option name="FTITLE">
+        <Option name="ftitle">
             This is the title
         </Option>
         <Reader type="readers.las">
diff --git a/test/data/nitf/write_options.xml.in b/test/data/nitf/write_options.xml.in
index 412bf0d..4b4c15c 100644
--- a/test/data/nitf/write_options.xml.in
+++ b/test/data/nitf/write_options.xml.in
@@ -7,46 +7,29 @@
         <Option name="compression">
             false
         </Option>
-        <Option name="FSCLASS">
+        <Option name="fsclas">
             U
         </Option>
-        <Option name="OPHONE">
+        <Option name="ophone">
             5159664628
         </Option>
-        <Option name="ONAME">
+        <Option name="oname">
             Howard Butler
         </Option>
-        <Option name="IDATIM">
+        <Option name="idatim">
             20110516183337
         </Option>
-        <Option name="FTITLE">
+        <Option name="ftitle">
             This is the title
         </Option>
-        <Option name="FSCTLH">
+        <Option name="fsctlh">
             N
         </Option>
-        <Option name="AIMIDB">
-            <Options>
-                <Option name="COUNTRY">
-                    US
-                </Option>
-                <Option name="ACQUISITION_DATE">
-                    Someday
-                </Option>
-                <Option name="MISSION_IDENTIFICATION">
-                    IDENT
-                </Option>
-                <Option name="LOCATION">
-                    Somewhere
-                </Option>
-            </Options>
+        <Option name="aimidb">
+            COUNTRY:US,ACQUISITION_DATE:Someday,MISSION_IDENTIFICATION:IDENT,LOCATION:Somewhere
         </Option>
-        <Option name="ACFTB">
-            <Options>
-                <Option name="AC_MSN_ID">
-                    ID
-                </Option>
-            </Options>
+        <Option name="acftb">
+            AC_MSN_ID:ID
         </Option>
         <Filter type="filters.crop">
             <Option name="bounds">
@@ -57,7 +40,7 @@
                     @CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las
                 </Option>
                 <Option name="spatialreference"> PROJCS["NAD_1983_Oregon_Statewide_Lambert_Feet_Intl",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.017453292519943295]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["False_Easting",1312335.958005249],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-120.5],PARAMETER["Standard_Parallel_1",43.0],PARAMETER["Standard_Parall [...]
-                </Option>                
+                </Option>
             </Reader>
         </Filter>
     </Writer>
diff --git a/test/data/pipeline/attribute.json.in b/test/data/pipeline/attribute.json.in
new file mode 100644
index 0000000..86299f5
--- /dev/null
+++ b/test/data/pipeline/attribute.json.in
@@ -0,0 +1,29 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/autzen/autzen-dd.las",
+    {
+      "type":"filters.attribute",
+      "dimension":"PointSourceId",
+      "value":26
+    },
+    {
+      "type":"filters.attribute",
+      "dimension":"Intensity",
+      "datasource":"@CMAKE_SOURCE_DIR@/test/data/autzen/attributes.shp",
+      "query":"SELECT CLS FROM attributes where cls!=6",
+      "column":"CLS"
+    },
+    {
+      "type":"filters.attribute",
+      "dimension":"Classification",
+      "datasource":"@CMAKE_SOURCE_DIR@/test/data/autzen/attributes.shp",
+      "layer":"attributes",
+      "column":"CLS"
+    },
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/attributed.las",
+      "scale_x":0.0000001,
+      "scale_y":0.0000001
+    }
+  ]
+}
diff --git a/test/data/pipeline/bpf2las.json.in b/test/data/pipeline/bpf2las.json.in
new file mode 100644
index 0000000..a1edec2
--- /dev/null
+++ b/test/data/pipeline/bpf2las.json.in
@@ -0,0 +1,14 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/bpf/utm15.bpf",
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/out2.las",
+      "scale_x":0.01,
+      "offset_x":311898.23,
+      "scale_y":0.01,
+      "offset_y":4703909.84,
+      "scale_z":0.01,
+      "offset_z":7.385474
+    }
+  ]
+}
diff --git a/test/data/pipeline/bpf2nitf.json.in b/test/data/pipeline/bpf2nitf.json.in
new file mode 100644
index 0000000..fe50f5f
--- /dev/null
+++ b/test/data/pipeline/bpf2nitf.json.in
@@ -0,0 +1,21 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/bpf/utm15.bpf",
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/output.ntf",
+      "scale_x":0.01,
+      "offset_x":311898.23,
+      "scale_y":0.01,
+      "offset_y":4703909.84,
+      "scale_z":0.01,
+      "offset_z":7.385474,
+      "fsclas":"U",
+      "idatim":"20131206140713",
+      "fscltx":"SIC:0 CH_FO",
+      "ftitle":"output.ntf",
+      "geolob":"GEOLOB00048017898386021508996+063.7163336371+034.",
+      "forward":"software_id, creation_doy, creation_year",
+      "system_id":"PDAL2NTF"
+    }
+  ]
+}
diff --git a/test/data/pipeline/chipper.json.in b/test/data/pipeline/chipper.json.in
new file mode 100644
index 0000000..140fc7d
--- /dev/null
+++ b/test/data/pipeline/chipper.json.in
@@ -0,0 +1,10 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/autzen/autzen-utm.las",
+    {
+      "type":"filters.chipper",
+      "capacity":25
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/autzen-utm-chipped-25.las"
+  ]
+}
diff --git a/test/data/pipeline/colorize-multi.json.in b/test/data/pipeline/colorize-multi.json.in
new file mode 100644
index 0000000..462ddf6
--- /dev/null
+++ b/test/data/pipeline/colorize-multi.json.in
@@ -0,0 +1,19 @@
+{
+  "pipeline":[
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/data/autzen/autzen.las",
+      "spatialreference":"EPSG:2993"
+    },
+    {
+      "type":"filters.colorization",
+      "dimensions":"Red1:1:1.0,Green1:2:1.0,Blue1:3:256",
+      "raster":"@CMAKE_SOURCE_DIR@/test/data/autzen/autzen.jpg"
+    },
+    {
+      "type":"filters.colorization",
+      "dimensions":"Red:1:1.0,Green:2:1.0,Blue:3:256",
+      "raster":"@CMAKE_SOURCE_DIR@/test/data/autzen/autzen.jpg"
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/sometext.txt"
+  ]
+}
diff --git a/test/data/pipeline/colorize.json.in b/test/data/pipeline/colorize.json.in
new file mode 100644
index 0000000..8a094ab
--- /dev/null
+++ b/test/data/pipeline/colorize.json.in
@@ -0,0 +1,11 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/autzen/autzen.las",
+    {
+      "type":"filters.colorization",
+      "dimensions":"Red, Green, Blue::256",
+      "raster":"@CMAKE_SOURCE_DIR@/test/data/autzen/autzen.jpg"
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/colorized.las"
+  ]
+}
diff --git a/test/data/pipeline/crop-hole.json.in b/test/data/pipeline/crop-hole.json.in
new file mode 100644
index 0000000..25228f2
--- /dev/null
+++ b/test/data/pipeline/crop-hole.json.in
@@ -0,0 +1,14 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/hole/spurious.las",
+    {
+      "type":"filters.crop",
+      "polygon":"POLYGON ((-123.070497025496451 44.058766662574463,-123.065624990686828 44.058248360998967,-123.068009177934087 44.057108097532883,-123.066350612892521 44.056486135642295,-123.066661593837807 44.054101948395022,-123.070289704866255 44.054412929340323,-123.070497025496451 44.058766662574463))",
+      "outside":true
+    },
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/hole.las",
+      "compression":false
+    }
+  ]
+}
diff --git a/test/data/pipeline/crop-stats.json.in b/test/data/pipeline/crop-stats.json.in
new file mode 100644
index 0000000..ef4d71a
--- /dev/null
+++ b/test/data/pipeline/crop-stats.json.in
@@ -0,0 +1,19 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type":"filters.crop",
+      "bounds":"([0,1000000],[0,1000000],[0,1000000])"
+    },
+    {
+      "type":"filters.stats",
+      "exact_dimensions":"Classification",
+      "dimensions":"readers.las.X, readers.las.Y, readers.las.Z, Classification"
+    },
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/pdal-compressed.laz",
+      "compression":true,
+      "format":2
+    }
+  ]
+}
diff --git a/test/data/pipeline/crop.json.in b/test/data/pipeline/crop.json.in
new file mode 100644
index 0000000..97fba4c
--- /dev/null
+++ b/test/data/pipeline/crop.json.in
@@ -0,0 +1,10 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type":"filters.crop",
+      "bounds":"([0,1000000],[0,1000000],[0,1000000])"
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/pdal-compressed.laz"
+  ]
+}
diff --git a/test/data/pipeline/crop_wkt.json.in b/test/data/pipeline/crop_wkt.json.in
new file mode 100644
index 0000000..dfe0bd2
--- /dev/null
+++ b/test/data/pipeline/crop_wkt.json.in
@@ -0,0 +1,34 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type":"filters.crop",
+      "polygon":"POLYGON ((636889.412951239268295 851528.512293258565478
+      422.7001953125,636899.14233423944097 851475.000686757150106
+      422.4697265625,636899.14233423944097 851475.000686757150106
+      422.4697265625,636928.33048324030824 851494.459452757611871
+      422.5400390625,636928.33048324030824 851494.459452757611871
+      422.5400390625,636928.33048324030824 851494.459452757611871
+      422.5400390625,636976.977398241520859 851513.918218758190051
+      424.150390625,636976.977398241520859 851513.918218758190051
+      424.150390625,637069.406536744092591 851475.000686757150106
+      438.7099609375,637132.647526245797053 851445.812537756282836
+      425.9501953125,637132.647526245797053 851445.812537756282836
+      425.9501953125,637336.964569251285866 851411.759697255445644
+      425.8203125,637336.964569251285866 851411.759697255445644
+      425.8203125,637473.175931254867464 851158.795739248627797
+      435.6298828125,637589.928527257987298 850711.244121236610226
+      420.509765625,637244.535430748714134 850511.791769731207751
+      420.7998046875,636758.066280735656619 850667.461897735483944
+      434.609375,636539.155163229792379 851056.63721774588339
+      422.6396484375,636889.412951239268295 851528.512293258565478
+      422.7001953125))",
+      "outside":false,
+      "x_dim":"readers.las.X"
+    },
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/crop-wkt.las",
+      "compression":false
+    }
+  ]
+}
diff --git a/test/data/pipeline/crop_wkt_2d.json.in b/test/data/pipeline/crop_wkt_2d.json.in
new file mode 100644
index 0000000..4ee823a
--- /dev/null
+++ b/test/data/pipeline/crop_wkt_2d.json.in
@@ -0,0 +1,14 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type":"filters.crop",
+      "polygon":"POLYGON ((636889.4129512392682955 851528.5122932585654780, 636899.1423342394409701 851475.0006867571501061, 636899.1423342394409701 851475.0006867571501061, 636928.3304832403082401 851494.4594527576118708, 636928.3304832403082401 851494.4594527576118708, 636928.3304832403082401 851494.4594527576118708, 636976.9773982415208593 851513.9182187581900507, 636976.9773982415208593 851513.9182187581900507, 637069.4065367440925911 851475.0006867571501061, 637132.6475262457970530  [...]
+      "outside":true
+    },
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/autzen-colorized-1.2.3-hole.las",
+      "compression":false
+    }
+  ]
+}
diff --git a/test/data/pipeline/crop_wkt_2d_classification.json.in b/test/data/pipeline/crop_wkt_2d_classification.json.in
new file mode 100644
index 0000000..8e607bd
--- /dev/null
+++ b/test/data/pipeline/crop_wkt_2d_classification.json.in
@@ -0,0 +1,20 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type":"filters.crop",
+      "polygon":"POLYGON ((636889.4129512392682955 851528.5122932585654780, 636899.1423342394409701 851475.0006867571501061, 636899.1423342394409701 851475.0006867571501061, 636928.3304832403082401 851494.4594527576118708, 636928.3304832403082401 851494.4594527576118708, 636928.3304832403082401 851494.4594527576118708, 636976.9773982415208593 851513.9182187581900507, 636976.9773982415208593 851513.9182187581900507, 637069.4065367440925911 851475.0006867571501061, 637132.6475262457970530  [...]
+      "outside":false
+    },
+    {
+      "type":"filters.predicate",
+      "function":"filter",
+      "source":"import numpy as np\n\ndef filter(ins,outs):\n\tcls = ins['Classification']\n\n\tkeep_classes = [1,2]\n\n\t# Use the first test for our base array.\n\tkeep = np.equal(cls, keep_classes[0])\n\n\t# For 1:n, test each predicate and join back\n\t# to our existing predicate array\n\tfor k in range(1,len(keep_classes)):\n\t\tt = np.equal(cls, keep_classes[k])\n\t\tkeep = keep + t\n\n\touts['Mask'] = keep\n\treturn True",
+      "module":"anything"
+    },
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/crop-wkt-2d-classification.las",
+      "compression":false
+    }
+  ]
+}
diff --git a/test/data/pipeline/decimate.json.in b/test/data/pipeline/decimate.json.in
new file mode 100644
index 0000000..488c7da
--- /dev/null
+++ b/test/data/pipeline/decimate.json.in
@@ -0,0 +1,19 @@
+{
+  "pipeline":[
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+      "spatialreference":"EPSG:2993"
+    },
+    {
+      "type":"filters.decimation",
+      "step":2,
+      "offset":1
+    },
+    {
+      "type":"writers.text",
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/junk.txt",
+      "delimiter":",",
+      "write_header":false
+    }
+  ]
+}
diff --git a/test/data/pipeline/ferry-reproject.json.in b/test/data/pipeline/ferry-reproject.json.in
new file mode 100644
index 0000000..498d992
--- /dev/null
+++ b/test/data/pipeline/ferry-reproject.json.in
@@ -0,0 +1,19 @@
+{
+  "pipeline":[
+    {
+      "filename": "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+      "spatialreference": "EPSG:2993"
+    },
+    {
+      "type": "filters.ferry",
+      "dimensions": "X=StatePlaneX, Y=StatePlaneY"
+    },
+    {
+      "type": "filters.reprojection",
+      "out_srs": "EPSG:4326+4326",
+      "scale_x": 0.0000001,
+      "scale_y": 0.0000001
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/colorized.las"
+  ]
+}
diff --git a/test/data/pipeline/from-module.json.in b/test/data/pipeline/from-module.json.in
new file mode 100644
index 0000000..fffbf21
--- /dev/null
+++ b/test/data/pipeline/from-module.json.in
@@ -0,0 +1,11 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type": "filters.predicate",
+      "script": "@CMAKE_SOURCE_DIR@/test/data/plang/test1.py",
+      "module": "anything",
+      "function": "fff"
+    }
+  ]
+}
diff --git a/test/data/pipeline/hexbin-info.json.in b/test/data/pipeline/hexbin-info.json.in
new file mode 100644
index 0000000..c994bbf
--- /dev/null
+++ b/test/data/pipeline/hexbin-info.json.in
@@ -0,0 +1,14 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type":"filters.hexbin",
+      "edge_size":0.0,
+      "threshold":10,
+      "sample_size":5000,
+      "x_dim":"readers.las.X",
+      "y_dim":"Y",
+      "precision":4
+    }
+  ]
+}
diff --git a/test/data/pipeline/hexbin.json.in b/test/data/pipeline/hexbin.json.in
new file mode 100644
index 0000000..0b757c0
--- /dev/null
+++ b/test/data/pipeline/hexbin.json.in
@@ -0,0 +1,15 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type":"filters.hexbin",
+      "edge_size":0.0,
+      "threshold":10,
+      "sample_size":5000,
+      "x_dim":"readers.las.X",
+      "y_dim":"Y",
+      "precision":4
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/hexbin.las"
+  ]
+}
diff --git a/test/data/pipeline/las2csv.json.in b/test/data/pipeline/las2csv.json.in
new file mode 100644
index 0000000..b41a578
--- /dev/null
+++ b/test/data/pipeline/las2csv.json.in
@@ -0,0 +1,11 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/autzen/autzen-point-format-3.las",
+    {
+      "type":"writers.text",
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/autzen-point-format-3.txt",
+      "order":"Red,Green,X,Y,Blue,Z",
+      "keep_unspecified":false
+    }
+  ]
+}
diff --git a/test/data/pipeline/las2geojson.json.in b/test/data/pipeline/las2geojson.json.in
new file mode 100644
index 0000000..6713b98
--- /dev/null
+++ b/test/data/pipeline/las2geojson.json.in
@@ -0,0 +1,13 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/autzen/autzen-point-format-3.las",
+    {
+      "type":"writers.text",
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/autzen-point-format-3.txt",
+      "order":"Red,Green,X,Y,Blue,Z",
+      "keep_unspecified":true,
+      "format":"geojson",
+      "jscallback":"pointcloud_callback"
+    }
+  ]
+}
diff --git a/test/data/pipeline/las2nitf-2.json.in b/test/data/pipeline/las2nitf-2.json.in
new file mode 100644
index 0000000..86b80c8
--- /dev/null
+++ b/test/data/pipeline/las2nitf-2.json.in
@@ -0,0 +1,14 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/pdal-compressed.ntf",
+      "compression":true,
+      "fsclas":"U",
+      "ophone":5159664628,
+      "oname":"Howard Butler",
+      "idatim":20110516183337,
+      "ftitle":"This is the title"
+    }
+  ]
+}
diff --git a/test/data/pipeline/las2nitf-crop-with-options.json.in b/test/data/pipeline/las2nitf-crop-with-options.json.in
new file mode 100644
index 0000000..ff92cbf
--- /dev/null
+++ b/test/data/pipeline/las2nitf-crop-with-options.json.in
@@ -0,0 +1,24 @@
+{
+  "pipeline":[
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+      "spatialreference":"PROJCS[\"NAD_1983_Oregon_Statewide_Lambert_Feet_Intl\",GEOGCS[\"GCS_North_American_1983\",DATUM[\"D_North_American_1983\",SPHEROID[\"GRS_1980\",6378137.0,298.257222101]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"False_Easting\",1312335.958005249],PARAMETER[\"False_Northing\",0.0],PARAMETER[\"Central_Meridian\",-120.5],PARAMETER[\"Standard_Parallel_1\",43.0],PARAMETER[\"Standard_Parall [...]
+    },
+    {
+      "type":"filters.crop",
+      "bounds":"([0,1000000],[0,1000000],[0,1000000])"
+    },
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/pdal-compressed.ntf",
+      "compression":false,
+      "fsclas":"U",
+      "ophone":5159664628,
+      "oname":"Howard Butler",
+      "idatim":20110516183337,
+      "ftitle":"This is the title",
+      "fsctlh":"N",
+      "aimidb":"COUNTRY:US,ACQUISITION_DATE:Someday,MISSION_IDENTIFICATION:IDENT,LOCATION:Somewhere",
+      "acftb":"AC_MSN_ID:ID"
+    }
+  ]
+}
diff --git a/test/data/pipeline/las2nitf.json.in b/test/data/pipeline/las2nitf.json.in
new file mode 100644
index 0000000..52f6d37
--- /dev/null
+++ b/test/data/pipeline/las2nitf.json.in
@@ -0,0 +1,21 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/utm15.las",
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/output.ntf",
+      "scale_x":0.01,
+      "offset_x":311898.23,
+      "scale_y":0.01,
+      "offset_y":4703909.84,
+      "scale_z":0.01,
+      "offset_z":7.385474,
+      "fsclas":"U",
+      "idatim":"20131206140713",
+      "fscltx":"SIC:0 CH_FO",
+      "ftitle":"output.ntf",
+      "geolob":"GEOLOB00048017898386021508996+063.7163336371+034.",
+      "forward":"software_id, creation_doy, creation_year",
+      "system_id":"PDAL2NTF"
+    }
+  ]
+}
diff --git a/test/data/pipeline/las2space-delimited.json.in b/test/data/pipeline/las2space-delimited.json.in
new file mode 100644
index 0000000..6e95dc0
--- /dev/null
+++ b/test/data/pipeline/las2space-delimited.json.in
@@ -0,0 +1,16 @@
+{
+  "pipeline":[
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+      "spatialreference":"EPSG:2993"
+    },
+    {
+      "type":"writers.text",
+      "filename":"STDOUT",
+      "delimiter":" ",
+      "write_header":true,
+      "order":"X,Y,Z,Red,Green,Blue",
+      "keep_unspecified":true
+    }
+  ]
+}
diff --git a/test/data/pipeline/merge.json.in b/test/data/pipeline/merge.json.in
new file mode 100644
index 0000000..e17bf2d
--- /dev/null
+++ b/test/data/pipeline/merge.json.in
@@ -0,0 +1,16 @@
+{
+  "pipeline": [
+    {
+      "filename": "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+      "tag": "A"
+    },
+    {
+      "filename": "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+      "tag": "B"
+    },
+    {
+      "type": "filters.merge",
+      "inputs": ["A", "B"]
+    }
+  ]
+}
diff --git a/test/data/pipeline/metadata_reader.json.in b/test/data/pipeline/metadata_reader.json.in
new file mode 100644
index 0000000..9688e00
--- /dev/null
+++ b/test/data/pipeline/metadata_reader.json.in
@@ -0,0 +1,5 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/interesting.las"
+  ]
+}
diff --git a/test/data/pipeline/metadata_writer.json.in b/test/data/pipeline/metadata_writer.json.in
new file mode 100644
index 0000000..04e9284
--- /dev/null
+++ b/test/data/pipeline/metadata_writer.json.in
@@ -0,0 +1,10 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/interesting.las",
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/metadata-output.las",
+      "forward":"software_id, creation_doy, creation_year",
+      "system_id":"SOMEVALUE"
+    }
+  ]
+}
diff --git a/test/data/pipeline/mississippi.json.in b/test/data/pipeline/mississippi.json.in
new file mode 100644
index 0000000..c64287d
--- /dev/null
+++ b/test/data/pipeline/mississippi.json.in
@@ -0,0 +1,6 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/mvk-thin.las",
+    "@CMAKE_SOURCE_DIR@/test/temp/out2.las"
+  ]
+}
diff --git a/test/data/pipeline/mississippi_reverse.json.in b/test/data/pipeline/mississippi_reverse.json.in
new file mode 100644
index 0000000..35c6df1
--- /dev/null
+++ b/test/data/pipeline/mississippi_reverse.json.in
@@ -0,0 +1,6 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/temp/out2.las",
+    "@CMAKE_SOURCE_DIR@/test/temp/out3.las"
+  ]
+}
diff --git a/test/data/pipeline/nitf-chipper.json.in b/test/data/pipeline/nitf-chipper.json.in
new file mode 100644
index 0000000..914b0ef
--- /dev/null
+++ b/test/data/pipeline/nitf-chipper.json.in
@@ -0,0 +1,14 @@
+{
+  "pipeline": [
+    {
+      "filename": "@CMAKE_SOURCE_DIR@/test/data/nitf/autzen-utm10.ntf",
+      "spatialreference": "EPSG:32610",
+      "debug": "true",
+      "verbose": 7
+    },
+    {
+      "type": "filters.chipper",
+        "capacity": 15
+    }
+  ]
+}
diff --git a/test/data/pipeline/nitf2las.json.in b/test/data/pipeline/nitf2las.json.in
new file mode 100644
index 0000000..d315807
--- /dev/null
+++ b/test/data/pipeline/nitf2las.json.in
@@ -0,0 +1,6 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/nitf/autzen-utm10.ntf",
+    "@CMAKE_SOURCE_DIR@/test/temp/nitf.las"
+  ]
+}
diff --git a/test/data/pipeline/p2g-writer.json.in b/test/data/pipeline/p2g-writer.json.in
new file mode 100644
index 0000000..674ab74
--- /dev/null
+++ b/test/data/pipeline/p2g-writer.json.in
@@ -0,0 +1,24 @@
+{
+  "pipeline":[
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+      "spatialreference":"@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las.wkt",
+      "debug":true,
+      "verbose":6
+    },
+    {
+      "type":"writers.p2g",
+      "grid_dist_x":6.0,
+      "grid_dist_y":6.0,
+      "radius":8.4852813742385713,
+      "chunk_size":1234,
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/autzen_grid",
+      "output_type":"min",
+      "output_type":"max",
+      "output_type":"mean",
+      "output_type":"idw",
+      "output_type":"den",
+      "output_format":"asc"
+    }
+  ]
+}
diff --git a/test/data/pipeline/predicate-embed.json.in b/test/data/pipeline/predicate-embed.json.in
new file mode 100644
index 0000000..af6299b
--- /dev/null
+++ b/test/data/pipeline/predicate-embed.json.in
@@ -0,0 +1,11 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type":"filters.predicate",
+      "module":"anything",
+      "function":"fff",
+      "source":"import numpy as np\ndef fff(ins,outs):\n\tX = ins['X']\n\tResult = np.equal(X, 637501.67)\n\t#print X\n\t#print Mask\n\touts['Mask'] = Result\n\treturn True"
+    }
+  ]
+}
diff --git a/test/data/pipeline/predicate-keep-ground-and-unclass.json.in b/test/data/pipeline/predicate-keep-ground-and-unclass.json.in
new file mode 100644
index 0000000..9afa891
--- /dev/null
+++ b/test/data/pipeline/predicate-keep-ground-and-unclass.json.in
@@ -0,0 +1,12 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/autzen/autzen.las",
+    {
+      "type":"filters.predicate",
+      "module":"anything",
+      "function":"filter",
+      "source":"import numpy as np\n\ndef filter(ins,outs):\n\tcls = ins['Classification']\n\n\tkeep_classes = [1,2]\n\n\t# Use the first test for our base array.\n\tkeep = np.equal(cls, keep_classes[0])\n\n\t# For 1:n, test each predicate and join back\n\t# to our existing predicate array\n\tfor k in range(1,len(keep_classes)):\n\t\tt = np.equal(cls, keep_classes[k])\n\t\tkeep = keep + t\n\n\touts['Mask'] = keep\n\treturn True"
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/out2.las"
+  ]
+}
diff --git a/test/data/pipeline/predicate-keep-last-return.json.in b/test/data/pipeline/predicate-keep-last-return.json.in
new file mode 100644
index 0000000..548d224
--- /dev/null
+++ b/test/data/pipeline/predicate-keep-last-return.json.in
@@ -0,0 +1,15 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/autzen/autzen.las",
+    {
+      "type":"filters.stats"
+    },
+    {
+      "type":"filters.predicate",
+      "module":"anything",
+      "function":"filter",
+      "source":"import numpy as np\n\ndef filter(ins,outs):\n\tret = ins['ReturnNumber']\n\tret_no = ins['NumberOfReturns']\n\n\t# Use the first test for our base array.\n\trets = np.equal(ret, ret_no)\n\n\touts['Mask'] = rets\n\treturn True"
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/out2.las"
+  ]
+}
diff --git a/test/data/pipeline/predicate-keep-specified-returns.json.in b/test/data/pipeline/predicate-keep-specified-returns.json.in
new file mode 100644
index 0000000..b1e8e4d
--- /dev/null
+++ b/test/data/pipeline/predicate-keep-specified-returns.json.in
@@ -0,0 +1,12 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/autzen/autzen.las",
+    {
+      "type":"filters.predicate",
+      "module":"anything",
+      "function":"filter",
+      "source":"import numpy as np\n\ndef filter(ins,outs):\n\tret = ins['ReturnNumber']\n\n\tkeep_ret = [0, 1,2]\n\n\t# Use the first test for our base array.\n\tkeep = np.equal(ret, keep_ret[0])\n\n\t# For 1:n, test each predicate and join back\n\t# to our existing predicate array\n\tfor k in range(1, len(keep_ret)):\n\t\tt = np.equal(ret, keep_ret[k])\n\t\tkeep = keep + t\n\n\touts['Mask'] = keep\n\treturn True"
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/out2.las"
+  ]
+}
diff --git a/test/data/pipeline/programmable-hag.json.in b/test/data/pipeline/programmable-hag.json.in
new file mode 100644
index 0000000..5bc0b28
--- /dev/null
+++ b/test/data/pipeline/programmable-hag.json.in
@@ -0,0 +1,16 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/autzen/autzen.las",
+    {
+      "type":"filters.ferry",
+      "dimensions":"Z=HAG"
+    },
+    {
+      "type":"filters.programmable",
+      "script":"@CMAKE_BINARY_DIR@/test/data/autzen/hag.py",
+      "function":"filter",
+      "module":"anything"
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/autzen-hag.las"
+  ]
+}
diff --git a/test/data/pipeline/programmable-update-y-dims.json.in b/test/data/pipeline/programmable-update-y-dims.json.in
new file mode 100644
index 0000000..17fa74b
--- /dev/null
+++ b/test/data/pipeline/programmable-update-y-dims.json.in
@@ -0,0 +1,11 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/autzen/autzen-utm.las",
+    {
+      "type":"filters.programmable",
+      "function":"myfunc",
+      "module":"derive",
+      "source":"import numpy as np\ndef myfunc(ins,outs):\n\tX = ins['Y']\n\tX1 = np.zeros(X.size, dtype=type(X[0])) + 314\n\touts['Y'] = X1\n\treturn True"
+    }
+  ]
+}
diff --git a/test/data/pipeline/qfit2las.json.in b/test/data/pipeline/qfit2las.json.in
new file mode 100644
index 0000000..e15cfef
--- /dev/null
+++ b/test/data/pipeline/qfit2las.json.in
@@ -0,0 +1,17 @@
+{
+  "pipeline":[
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/data/qfit/14-word.qi",
+      "debug":true,
+      "verbose":1,
+      "flip_coordinates":true,
+      "scale_z":0.001,
+      "spatialreference":"EPSG:4269+3855",
+      "log":"stdlog"
+    },
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/temp/out2.las",
+      "debug":true
+    }
+  ]
+}
diff --git a/test/data/pipeline/range_classification.json.in b/test/data/pipeline/range_classification.json.in
new file mode 100644
index 0000000..ac00ae4
--- /dev/null
+++ b/test/data/pipeline/range_classification.json.in
@@ -0,0 +1,10 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type":"filters.range",
+      "limits":"Classification[2:2]"
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/only_class_equals_2.las"
+  ]
+}
diff --git a/test/data/pipeline/range_z.json.in b/test/data/pipeline/range_z.json.in
new file mode 100644
index 0000000..89b0a33
--- /dev/null
+++ b/test/data/pipeline/range_z.json.in
@@ -0,0 +1,10 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type":"filters.range",
+      "limits":"Z[400:500]"
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/only_z_400-500.las"
+  ]
+}
diff --git a/test/data/pipeline/range_z_classification.json.in b/test/data/pipeline/range_z_classification.json.in
new file mode 100644
index 0000000..64d48cd
--- /dev/null
+++ b/test/data/pipeline/range_z_classification.json.in
@@ -0,0 +1,10 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type":"filters.range",
+      "limits":"Z[400:500], Classification[2:2]"
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/only_z_400-500_class_equals_2.las"
+  ]
+}
diff --git a/test/data/pipeline/reproject.json.in b/test/data/pipeline/reproject.json.in
new file mode 100644
index 0000000..cfb1266
--- /dev/null
+++ b/test/data/pipeline/reproject.json.in
@@ -0,0 +1,17 @@
+{
+  "pipeline":[
+    {
+      "filename":"@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+      "spatialreference":"EPSG:2993",
+      "debug":true,
+      "verbose":6
+    },
+    {
+      "type":"filters.predicate",
+      "function":"filter",
+      "source":"import numpy as np\n\ndef filter(ins,outs):\n\tcls = ins['Classification']\n\n\tkeep_classes = [1]\n\n\t# Use the first test for our base array.\n\tkeep = np.equal(cls, keep_classes[0])\n\n\t# For 1:n, test each predicate and join back\n\t# to our existing predicate array\n\tfor k in range(1,len(keep_classes)):\n\t\tt = np.equal(cls, keep_classes[k])\n\t\tkeep = keep + t\n\n\touts['Mask'] = keep\n\treturn True",
+      "module":"anything"
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/out2.las"
+  ]
+}
diff --git a/test/data/pipeline/sbet2txt.json.in b/test/data/pipeline/sbet2txt.json.in
new file mode 100644
index 0000000..64df084
--- /dev/null
+++ b/test/data/pipeline/sbet2txt.json.in
@@ -0,0 +1,6 @@
+{
+  "pipeline": [
+    "@CMAKE_SOURCE_DIR@/test/data/sbet/2-points.sbet",
+    "@CMAKE_SOURCE_DIR@/test/temp/outfile.txt"
+  ]
+}
diff --git a/test/data/pipeline/sort.json.in b/test/data/pipeline/sort.json.in
new file mode 100644
index 0000000..571c1dc
--- /dev/null
+++ b/test/data/pipeline/sort.json.in
@@ -0,0 +1,9 @@
+{
+  "pipeline": [
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+        "type": "filters.sort",
+        "dimension": "X"
+    }
+  ]
+}
diff --git a/test/data/pipeline/splitter.json.in b/test/data/pipeline/splitter.json.in
new file mode 100644
index 0000000..ed8d06c
--- /dev/null
+++ b/test/data/pipeline/splitter.json.in
@@ -0,0 +1,10 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type":"filters.splitter",
+      "length":100
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/tiled.las"
+  ]
+}
diff --git a/test/data/pipeline/stats.json.in b/test/data/pipeline/stats.json.in
new file mode 100644
index 0000000..2a27b8f
--- /dev/null
+++ b/test/data/pipeline/stats.json.in
@@ -0,0 +1,9 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type":"filters.stats"
+    },
+    "@CMAKE_SOURCE_DIR@/test/temp/pdal-stats.las"
+  ]
+}
diff --git a/test/data/plang/from-module.json.in b/test/data/plang/from-module.json.in
new file mode 100644
index 0000000..fffbf21
--- /dev/null
+++ b/test/data/plang/from-module.json.in
@@ -0,0 +1,11 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type": "filters.predicate",
+      "script": "@CMAKE_SOURCE_DIR@/test/data/plang/test1.py",
+      "module": "anything",
+      "function": "fff"
+    }
+  ]
+}
diff --git a/test/data/plang/predicate-embed.json.in b/test/data/plang/predicate-embed.json.in
new file mode 100644
index 0000000..af6299b
--- /dev/null
+++ b/test/data/plang/predicate-embed.json.in
@@ -0,0 +1,11 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/las/1.2-with-color.las",
+    {
+      "type":"filters.predicate",
+      "module":"anything",
+      "function":"fff",
+      "source":"import numpy as np\ndef fff(ins,outs):\n\tX = ins['X']\n\tResult = np.equal(X, 637501.67)\n\t#print X\n\t#print Mask\n\touts['Mask'] = Result\n\treturn True"
+    }
+  ]
+}
diff --git a/test/data/plang/programmable-update-y-dims.json.in b/test/data/plang/programmable-update-y-dims.json.in
new file mode 100644
index 0000000..17fa74b
--- /dev/null
+++ b/test/data/plang/programmable-update-y-dims.json.in
@@ -0,0 +1,11 @@
+{
+  "pipeline":[
+    "@CMAKE_SOURCE_DIR@/test/data/autzen/autzen-utm.las",
+    {
+      "type":"filters.programmable",
+      "function":"myfunc",
+      "module":"derive",
+      "source":"import numpy as np\ndef myfunc(ins,outs):\n\tX = ins['Y']\n\tX1 = np.zeros(X.size, dtype=type(X[0])) + 314\n\touts['Y'] = X1\n\treturn True"
+    }
+  ]
+}
diff --git a/test/data/png/autzen-height.png b/test/data/png/autzen-height.png
new file mode 100644
index 0000000..fe5c3f2
Binary files /dev/null and b/test/data/png/autzen-height.png differ
diff --git a/test/data/pointbuffer/metadata.txt b/test/data/pointbuffer/metadata.txt
deleted file mode 100644
index 5ffd8f1..0000000
--- a/test/data/pointbuffer/metadata.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "0":
-  {
-    "Classification": 1,
-    "X": 0,
-    "Y": 0
-  },
-  "1":
-  {
-    "Classification": 2,
-    "X": 10,
-    "Y": 100
-  }
-}
diff --git a/test/data/sbet/autzen_trim.sbet b/test/data/sbet/autzen_trim.sbet
new file mode 100644
index 0000000..190e884
Binary files /dev/null and b/test/data/sbet/autzen_trim.sbet differ
diff --git a/test/data/sbet/pipeline.json.in b/test/data/sbet/pipeline.json.in
new file mode 100644
index 0000000..64df084
--- /dev/null
+++ b/test/data/sbet/pipeline.json.in
@@ -0,0 +1,6 @@
+{
+  "pipeline": [
+    "@CMAKE_SOURCE_DIR@/test/data/sbet/2-points.sbet",
+    "@CMAKE_SOURCE_DIR@/test/temp/outfile.txt"
+  ]
+}
diff --git a/test/data/text/utm17_1.txt b/test/data/text/utm17_1.txt
new file mode 100644
index 0000000..dd176b5
--- /dev/null
+++ b/test/data/text/utm17_1.txt
@@ -0,0 +1,11 @@
+X,Y,Z
+289814.15,4320978.61,170.76
+289814.64,4320978.84,170.76
+289815.12,4320979.06,170.75
+289815.60,4320979.28,170.74
+289816.08,4320979.50,170.68
+289816.56,4320979.71,170.66
+289817.03,4320979.92,170.63
+289817.53,4320980.16,170.62
+289818.01,4320980.38,170.61
+289818.50,4320980.59,170.58
diff --git a/test/data/text/utm17_2.txt b/test/data/text/utm17_2.txt
new file mode 100644
index 0000000..afd67e6
--- /dev/null
+++ b/test/data/text/utm17_2.txt
@@ -0,0 +1,11 @@
+X Y Z
+289814.15  4320978.61  170.76
+289814.64  4320978.84  170.76
+289815.12  4320979.06  170.75
+289815.60  4320979.28  170.74
+289816.08  4320979.50  170.68
+289816.56  4320979.71  170.66
+289817.03  4320979.92  170.63
+289817.53  4320980.16  170.62
+289818.01  4320980.38  170.61
+289818.50  4320980.59  170.58
diff --git a/test/data/text/utm17_3.txt b/test/data/text/utm17_3.txt
new file mode 100644
index 0000000..6ed56b7
--- /dev/null
+++ b/test/data/text/utm17_3.txt
@@ -0,0 +1,16 @@
+X, Y, Z
+
+
+
+289814.15 , 4320978.61 , 170.76,27
+289814.15 , 4320978.61 , 170.76
+289814.64 , 4320978.84 , 170.76
+289815.12 , 4320979.06 , 170.75
+289815.60 , 4320979.28 , 170.74
+289816.08 , 4320979.50 , 170.68
+289816.56 , 4320979.71 , 170.66
+289817.03 , 4320979.92 , 170.63
+
+289817.53 , 4320980.16 , 170.62
+289818.01 , 4320980.38 , 170.61
+289818.50 , 4320980.59 , 170.58
diff --git a/test/unit/BoundsTest.cpp b/test/unit/BoundsTest.cpp
index 9f5355b..25a6b3f 100644
--- a/test/unit/BoundsTest.cpp
+++ b/test/unit/BoundsTest.cpp
@@ -219,22 +219,22 @@ TEST(BoundsTest, test_output)
     EXPECT_EQ(out3, "([1.1, 101.1], [2.2, 102.2], [3.3, 103.3])");
 }
 
-TEST(BoundsTest, BoundsTest_ptree)
-{
-    const BOX2D b2(1,2,101,102);
-
-    std::stringstream ss1(std::stringstream::in | std::stringstream::out);
-
-    boost::property_tree::ptree tree = Utils::toPTree(b2);
-    boost::property_tree::write_xml(ss1, tree);
-
-    const std::string out1 = ss1.str();
-
-    static std::string xml_header = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
-    const std::string ref = xml_header + "<0><minimum>1</minimum><maximum>101</maximum></0><1><minimum>2</minimum><maximum>102</maximum></1>";
-
-    EXPECT_EQ(ref, out1);
-}
+// TEST(BoundsTest, BoundsTest_ptree)
+// {
+//     const BOX2D b2(1,2,101,102);
+//
+//     std::stringstream ss1(std::stringstream::in | std::stringstream::out);
+//
+//     pdalboost::property_tree::ptree tree = Utils::toPTree(b2);
+//     pdalboost::property_tree::write_xml(ss1, tree);
+//
+//     const std::string out1 = ss1.str();
+//
+//     static std::string xml_header = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
+//     const std::string ref = xml_header + "<0><minimum>1</minimum><maximum>101</maximum></0><1><minimum>2</minimum><maximum>102</maximum></1>";
+//
+//     EXPECT_EQ(ref, out1);
+// }
 
 TEST(BoundsTest, test_input)
 {
@@ -247,11 +247,16 @@ TEST(BoundsTest, test_input)
     EXPECT_TRUE(r == rr);
 }
 
-TEST(BoundsTest, test_lexicalcast_whitespace)
+TEST(BoundsTest, test_parse)
 {
-    const BOX3D b1 = boost::lexical_cast<BOX3D>("([1,101],[2,102],[3,103])");
-    const BOX3D b2 =
-        boost::lexical_cast<BOX3D>("([1, 101], [2, 102], [3, 103])");
+    std::istringstream iss1("([1,101],[2,102],[3,103])");
+    std::istringstream iss2("([1, 101], [2, 102], [3, 103])");
+
+    BOX3D b1;
+    BOX3D b2;
+
+    iss1 >> b1;
+    iss2 >> b2;
 
     EXPECT_EQ(b1, b2);
 }
@@ -266,6 +271,12 @@ TEST(BoundsTest, test_wkt)
     std::string out2 = "POLYHEDRON Z ( ((1.1 2.2 3.3, 101.1 2.2 3.3, 101.1 102.2 3.3, 1.1 102.2 3.3, 1.1 2.2 3.3, )), ((1.1 2.2 3.3, 101.1 2.2 3.3, 101.1 2.2 103.3, 1.1 2.2 103.3, 1.1 2.2 3.3, )), ((101.1 2.2 3.3, 101.1 102.2 3.3, 101.1 102.2 103.3, 101.1 2.2 103.3, 101.1 2.2 3.3, )), ((101.1 102.2 3.3, 1.1 102.2 3.3, 1.1 102.2 103.3, 101.1 102.2 103.3, 101.1 102.2 3.3, )), ((1.1 102.2 3.3, 1.1 2.2 3.3, 1.1 2.2 103.3, 1.1 102.2 103.3, 1.1 102.2 3.3, )), ((1.1 2.2 103.3, 101.1 2.2 103.3,  [...]
     EXPECT_EQ(b2.toWKT(1), out2);
 }
+TEST(BoundsTest, test_json)
+{
+    BOX2D b(1.1,2.2,101.1,102.2);
+    std::string out = "{\"bbox\":[1.1, 2.2, 101.1,102.2]}";
+    EXPECT_EQ(b.toGeoJSON(1), out);
+}
 
 TEST(BoundsTest, test_2d_input)
 {
@@ -285,7 +296,7 @@ TEST(BoundsTest, test_precisionloss)
     // when you do something like:
     //   options.getValueOrDefault<BOX3D>("bounds", BOX3D());
     std::ostringstream oss;
-    oss << b1; 
+    oss << b1;
 
     // convert it back
     std::istringstream iss(oss.str());
diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt
index f7fe820..7860a69 100644
--- a/test/unit/CMakeLists.txt
+++ b/test/unit/CMakeLists.txt
@@ -21,6 +21,7 @@ include_directories(
     ${PROJECT_SOURCE_DIR}/io/bpf
     ${PROJECT_SOURCE_DIR}/io/buffer
     ${PROJECT_SOURCE_DIR}/io/faux
+    ${PROJECT_SOURCE_DIR}/io/gdal
     ${PROJECT_SOURCE_DIR}/io/ilvis2
     ${PROJECT_SOURCE_DIR}/io/las
     ${PROJECT_SOURCE_DIR}/io/optech
@@ -43,6 +44,7 @@ include_directories(
     ${PROJECT_SOURCE_DIR}/filters/sort
     ${PROJECT_SOURCE_DIR}/filters/splitter
     ${PROJECT_SOURCE_DIR}/filters/stats
+    ${PROJECT_SOURCE_DIR}/filters/streamcallback
     ${PROJECT_SOURCE_DIR}/filters/transformation
     ${PROJECT_SOURCE_DIR}/kernels/info
 )
@@ -56,17 +58,23 @@ PDAL_ADD_TEST(pdal_config_test FILES ConfigTest.cpp)
 PDAL_ADD_TEST(pdal_file_utils_test FILES FileUtilsTest.cpp)
 PDAL_ADD_TEST(pdal_georeference_test FILES GeoreferenceTest.cpp)
 PDAL_ADD_TEST(pdal_kdindex_test FILES KDIndexTest.cpp)
+PDAL_ADD_TEST(pdal_kernel_test FILES KernelTest.cpp)
 PDAL_ADD_TEST(pdal_log_test FILES LogTest.cpp)
 PDAL_ADD_TEST(pdal_metadata_test FILES MetadataTest.cpp)
 PDAL_ADD_TEST(pdal_options_test FILES OptionsTest.cpp)
 PDAL_ADD_TEST(pdal_pdalutils_test FILES PDALUtilsTest.cpp)
 PDAL_ADD_TEST(pdal_pipeline_manager_test FILES PipelineManagerTest.cpp)
+PDAL_ADD_TEST(pdal_plugin_manager_test FILES PluginManagerTest.cpp)
 PDAL_ADD_TEST(pdal_point_view_test FILES PointViewTest.cpp)
 PDAL_ADD_TEST(pdal_point_table_test FILES PointTableTest.cpp)
+PDAL_ADD_TEST(pdal_program_arg_test FILES ProgramArgsTest.cpp)
+PDAL_ADD_TEST(pdal_polygon_test FILES PolygonTest.cpp)
 PDAL_ADD_TEST(pdal_spatial_reference_test FILES SpatialReferenceTest.cpp)
+PDAL_ADD_TEST(pdal_stage_factory_test FILES StageFactoryTest.cpp)
+PDAL_ADD_TEST(pdal_streaming_test FILES StreamingTest.cpp)
 PDAL_ADD_TEST(pdal_support_test FILES SupportTest.cpp)
-PDAL_ADD_TEST(pdal_user_callback_test FILES UserCallbackTest.cpp)
 PDAL_ADD_TEST(pdal_utils_test FILES UtilsTest.cpp)
+PDAL_ADD_TEST(pdal_uuid_test FILES UuidTest.cpp)
 
 if (PDAL_HAVE_LAZPERF)
     PDAL_ADD_TEST(pdal_lazperf_test FILES CompressionTest.cpp)
@@ -78,6 +86,7 @@ endif()
 PDAL_ADD_TEST(pdal_io_bpf_test FILES io/bpf/BPFTest.cpp)
 PDAL_ADD_TEST(pdal_io_buffer_test FILES io/buffer/BufferTest.cpp)
 PDAL_ADD_TEST(pdal_io_faux_test FILES io/faux/FauxReaderTest.cpp)
+PDAL_ADD_TEST(pdal_io_gdal_reader_test FILES io/gdal/GDALReaderTest.cpp)
 PDAL_ADD_TEST(pdal_io_ilvis2_test FILES io/ilvis2/Ilvis2ReaderTest.cpp)
 PDAL_ADD_TEST(pdal_io_las_reader_test FILES io/las/LasReaderTest.cpp)
 PDAL_ADD_TEST(pdal_io_las_writer_test FILES io/las/LasWriterTest.cpp)
@@ -88,10 +97,12 @@ PDAL_ADD_TEST(pdal_io_qfit_test FILES io/qfit/QFITReaderTest.cpp)
 PDAL_ADD_TEST(pdal_io_sbet_reader_test FILES io/sbet/SbetReaderTest.cpp)
 PDAL_ADD_TEST(pdal_io_sbet_writer_test FILES io/sbet/SbetWriterTest.cpp)
 PDAL_ADD_TEST(pdal_io_terrasolid_test FILES io/terrasolid/TerrasolidReaderTest.cpp)
+PDAL_ADD_TEST(pdal_io_text_test FILES io/text/TextReaderTest.cpp)
 
 #
 # sources for the native filters
 #
+PDAL_ADD_TEST(pdal_filters_attribute_test FILES filters/AttributeFilterTest.cpp)
 PDAL_ADD_TEST(pdal_filters_chipper_test FILES filters/ChipperTest.cpp)
 PDAL_ADD_TEST(pdal_filters_colorization_test FILES filters/ColorizationFilterTest.cpp)
 PDAL_ADD_TEST(pdal_filters_crop_test FILES filters/CropFilterTest.cpp)
@@ -99,6 +110,7 @@ PDAL_ADD_TEST(pdal_filters_decimation_test FILES filters/DecimationFilterTest.cp
 PDAL_ADD_TEST(pdal_filters_divider_test FILES filters/DividerFilterTest.cpp)
 PDAL_ADD_TEST(pdal_filters_ferry_test FILES filters/FerryFilterTest.cpp)
 PDAL_ADD_TEST(pdal_filters_merge_test FILES filters/MergeTest.cpp)
+PDAL_ADD_TEST(pdal_filters_additional_merge_test FILES filters/AdditionalMergeTest.cpp)
 PDAL_ADD_TEST(pdal_filters_reprojection_test FILES filters/ReprojectionFilterTest.cpp)
 PDAL_ADD_TEST(pdal_filters_range_test FILES filters/RangeFilterTest.cpp)
 PDAL_ADD_TEST(pdal_filters_randomize_test FILES filters/RandomizeFilterTest.cpp)
@@ -119,8 +131,12 @@ if (WITH_APPS)
     if (BUILD_PIPELINE_TESTS)
         PDAL_ADD_TEST(pcpipeline_test FILES apps/pcpipelineTest.cpp)
     endif()
+    PDAL_ADD_TEST(pcpipeline_test_json FILES apps/pcpipelineTestJSON.cpp)
+    PDAL_ADD_TEST(random_test FILES apps/RandomTest.cpp)
 endif(WITH_APPS)
 
 if(LIBXML2_FOUND)
+    PDAL_ADD_TEST(pdal_io_ilvis2_metadata_test FILES io/ilvis2/Ilvis2MetadataReaderTest.cpp)
+    PDAL_ADD_TEST(pdal_io_ilvis2_reader_metadata_test FILES io/ilvis2/Ilvis2ReaderWithMDReaderTest.cpp)
     PDAL_ADD_TEST(xml_schema_test FILES XMLSchemaTest.cpp)
 endif()
diff --git a/test/unit/FileUtilsTest.cpp b/test/unit/FileUtilsTest.cpp
index 8a40708..657e56e 100644
--- a/test/unit/FileUtilsTest.cpp
+++ b/test/unit/FileUtilsTest.cpp
@@ -90,15 +90,6 @@ TEST(FileUtilsTest, test_readFileIntoString)
     EXPECT_TRUE(source == ref);
 }
 
-TEST(FileUtilsTest, test_getcwd)
-{
-#if 0
-    // this is hardcoded for mpg's environment
-    const std::string cwd = FileUtils::getcwd();
-    EXPECT_TRUE(cwd == "D:/dev/pdal/test/unit/");
-#endif
-}
-
 #ifdef _WIN32
 static const std::string drive = "A:";
 #else
@@ -121,7 +112,8 @@ TEST(FileUtilsTest, test_toAbsolutePath)
 
     const string root = FileUtils::getcwd();
 
-    // check 1-arg version: make absolute when file is relative, via current working dir
+    // check 1-arg version: make absolute when file is relative,
+    // via current working dir
     const string a = FileUtils::toAbsolutePath("foo.txt");
     compare_paths(a, root + "foo.txt");
 
@@ -166,6 +158,47 @@ TEST(FileUtilsTest, test_isAbsolute)
 
 TEST(FileUtilsTest, filename)
 {
-    std::string filename = "/foo//bar//baz.c";
+    std::string filename = "";
+    EXPECT_EQ(FileUtils::getFilename(filename), "");
+
+    filename = "/";
+    EXPECT_EQ(FileUtils::getFilename(filename), "");
+
+    filename = "/foo/bar/";
+    EXPECT_EQ(FileUtils::getFilename(filename), "");
+
+    filename = "/foo//bar//baz.c";
+    EXPECT_EQ(FileUtils::getFilename(filename), "baz.c");
+
+#ifdef _WIN32
+    filename = "C:/foo/bar/baz.c";
+    EXPECT_EQ(FileUtils::getFilename(filename), "baz.c");
+
+    filename = "C:\\foo\\bar\\baz.c";
+    EXPECT_EQ(FileUtils::getFilename(filename), "baz.c");
+
+    filename = "C:\\foo/bar\\meaw/baz.c";
     EXPECT_EQ(FileUtils::getFilename(filename), "baz.c");
+#else
+    filename = "C:\\foo\\bar\\baz.c";
+    EXPECT_EQ(FileUtils::getFilename(filename), filename);
+#endif
+}
+
+TEST(FileUtilsTest, extension)
+{
+    EXPECT_EQ(FileUtils::extension("/foo//bar//baz.c"), ".c");
+    EXPECT_EQ(FileUtils::extension("foobar"), "");
+    EXPECT_EQ(FileUtils::extension("/foo/bar"), "");
+    EXPECT_EQ(FileUtils::extension("/fo.o/b.ar.baz23"), ".baz23");
+}
+
+TEST(FileUtilsTest, stem)
+{
+    EXPECT_EQ(FileUtils::stem("/foo//bar//baz.c"), "baz");
+    EXPECT_EQ(FileUtils::stem("foobar"), "foobar");
+    EXPECT_EQ(FileUtils::stem("/foo/bar"), "bar");
+    EXPECT_EQ(FileUtils::stem("/fo.o/b.ar.baz23"), "b.ar");
+    EXPECT_EQ(FileUtils::stem("."), ".");
+    EXPECT_EQ(FileUtils::stem(".."), "..");
 }
diff --git a/test/unit/KernelTest.cpp b/test/unit/KernelTest.cpp
new file mode 100644
index 0000000..2f28cc9
--- /dev/null
+++ b/test/unit/KernelTest.cpp
@@ -0,0 +1,67 @@
+/******************************************************************************
+* Copyright (c) 2016, Hobu Inc. (info at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/pdal_test_main.hpp>
+
+#include <pdal/Kernel.hpp>
+
+#include "Support.hpp"
+
+namespace pdal
+{
+
+TEST(KernelTest, parseOption)
+{
+    std::string stage;
+    std::string option;
+    std::string value;
+    bool ok;
+
+    ok = Kernel::test_parseOption("--readers.p2g.foobar=baz",
+        stage, option, value);
+    EXPECT_TRUE(ok);
+    EXPECT_EQ(stage, "readers.p2g");
+    EXPECT_EQ(option, "foobar");
+    EXPECT_EQ(value, "baz");
+
+    ok = Kernel::test_parseOption("--readers.2pg.foobar=baz",
+        stage, option, value);
+    EXPECT_FALSE(ok);
+
+    ok = Kernel::test_parseOption("--read1ers.las.foobar=baz",
+        stage, option, value);
+    EXPECT_FALSE(ok);
+}
+
+}
diff --git a/test/unit/LogTest.cpp b/test/unit/LogTest.cpp
index 28c2885..16ab983 100644
--- a/test/unit/LogTest.cpp
+++ b/test/unit/LogTest.cpp
@@ -41,45 +41,4 @@
 
 using namespace pdal;
 
-TEST(LogTest, test_one)
-{
-    StageFactory f;
-
-    BOX3D bounds(1.0, 2.0, 3.0, 101.0, 102.0, 103.0);
-
-    Option opt1("bounds", bounds);
-    Option opt2("log", Support::temppath("mylog_one.txt"));
-    Option opt3("num_points", 750);
-    Option opt4("mode", "constant");
-
-    Options opts;
-    opts.add(opt1);
-    opts.add(opt2);
-    opts.add(opt3);
-    opts.add(opt4);
-
-    {
-        PointTable table;
-
-        FauxReader reader;
-        reader.setOptions(opts);
-        reader.prepare(table);
-
-        EXPECT_EQ(reader.log()->getLevel(), LogLevel::Error);
-        reader.log()->setLevel(LogLevel::Debug5);
-        EXPECT_EQ(reader.log()->getLevel(), LogLevel::Debug5);
-
-        PointViewSet viewSet = reader.execute(table);
-        EXPECT_EQ(viewSet.size(), 1u);
-        PointViewPtr view = *viewSet.begin();
-        EXPECT_EQ(view->size(), 750u);
-    }
-    bool ok = Support::compare_text_files(
-        Support::temppath("mylog_one.txt"),
-        Support::datapath("logs/logtest.txt"));
-
-    if (ok)
-        FileUtils::deleteFile(Support::temppath("mylog_one.txt"));
-
-    EXPECT_TRUE(ok);
-}
+//ABELL - Need some tests here, but what we had was crap.
diff --git a/test/unit/MetadataTest.cpp b/test/unit/MetadataTest.cpp
index 91cb420..dd43792 100644
--- a/test/unit/MetadataTest.cpp
+++ b/test/unit/MetadataTest.cpp
@@ -34,9 +34,8 @@
 
 #include <pdal/pdal_test_main.hpp>
 
-#include <boost/algorithm/string.hpp>
-
 #include <pdal/Metadata.hpp>
+#include <pdal/SpatialReference.hpp>
 
 using namespace pdal;
 
@@ -177,7 +176,7 @@ TEST(MetadataTest, test_construction_with_srs)
     //         AUTHORITY[\"EPSG\",\"9122\"]],
     //     AUTHORITY[\"EPSG\",\"4326\"]]");
 
-    // std::cout << boost::lexical_cast<std::string>(m.getValue<SpatialReference>());
+    // std::cout << m.getValue<SpatialReference>();
 }
 
 
@@ -185,7 +184,8 @@ TEST(MetadataTest, test_metadata_copy)
 {
     MetadataNode m;
     MetadataNode m2 = m.add("val", 2u);
-    uint32_t t = boost::lexical_cast<uint32_t>(m2.value());
+    uint32_t t;
+    Utils::fromString(m2.value(), t);
     EXPECT_EQ(t, 2u);
 }
 
@@ -248,7 +248,7 @@ TEST(MetadataTest, test_vlr_metadata)
             return n.name() == "user_id" &&
                 n.value() == userId;
         };
-        return (boost::algorithm::istarts_with(n.name(), "vlr") &&
+        return (Utils::startsWith(n.name(), "vlr") &&
             !n.findChild(recPred).empty() &&
             !n.findChild(userPred).empty());
     };
diff --git a/test/unit/OptionsTest.cpp b/test/unit/OptionsTest.cpp
index 7d0728d..b030350 100644
--- a/test/unit/OptionsTest.cpp
+++ b/test/unit/OptionsTest.cpp
@@ -41,13 +41,15 @@
 
 #include "Support.hpp"
 
-#include <boost/property_tree/xml_parser.hpp>
-
-static std::string xml_header = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
-static std::string xml_int_ref = "<Name>my_int</Name><Value>17</Value><Description>This is my integral option.</Description>";
-static std::string xml_str_ref = "<Name>my_string</Name><Value>Yow.</Value><Description>This is my stringy option.</Description>";
+namespace
+{
+const std::string xml_header = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
+const std::string xml_int_ref = "<Name>my_int</Name><Value>17</Value><Description>This is my integral option.</Description>";
+const std::string xml_str_ref = "<Name>my_string</Name><Value>Yow.</Value><Description>This is my stringy option.</Description>";
+}
 
-using namespace pdal;
+namespace pdal
+{
 
 TEST(OptionsTest, test_static_options)
 {
@@ -60,7 +62,7 @@ TEST(OptionsTest, test_static_options)
     crop.setOptions(ops);
     crop.setInput(reader);
     auto opts = crop.getDefaultOptions();
-    EXPECT_EQ(opts.getOptions().size(), 3u);
+    EXPECT_EQ(opts.getOptions().size(), 4u);
     EXPECT_TRUE(opts.hasOption("bounds"));
     EXPECT_TRUE(opts.hasOption("inside"));
     EXPECT_TRUE(opts.hasOption("polygon"));
@@ -87,23 +89,24 @@ TEST(OptionsTest, test_option_writing)
     EXPECT_TRUE(option_s.getValue<std::string>() == "Yow.");
     EXPECT_TRUE(option_s.getValue<std::string>() == "Yow.");
 
-    const boost::property_tree::ptree tree_i = Utils::toPTree(option_i);
-    boost::property_tree::xml_parser::write_xml(ostr_i, tree_i);
-    const std::string str_i = ostr_i.str();
-    EXPECT_TRUE(str_i == ref_i);
-
-    const boost::property_tree::ptree tree_s = Utils::toPTree(option_s);
-    boost::property_tree::xml_parser::write_xml(ostr_s, tree_s);
-    const std::string str_s = ostr_s.str();
-    EXPECT_TRUE(str_s == ref_s);
+//     const pdalboost::property_tree::ptree tree_i = Utils::toPTree(option_i);
+//     pdalboost::property_tree::xml_parser::write_xml(ostr_i, tree_i);
+//     const std::string str_i = ostr_i.str();
+//     EXPECT_TRUE(str_i == ref_i);
+//
+//     const pdalboost::property_tree::ptree tree_s = Utils::toPTree(option_s);
+//     pdalboost::property_tree::xml_parser::write_xml(ostr_s, tree_s);
+//     const std::string str_s = ostr_s.str();
+//     EXPECT_TRUE(str_s == ref_s);
 }
 
+/**
 TEST(OptionsTest, test_option_reading)
 {
     // from an xml stream
     std::istringstream istr(xml_int_ref);
-    boost::property_tree::ptree tree1;
-    boost::property_tree::read_xml(istr,tree1);
+    pdalboost::property_tree::ptree tree1;
+    pdalboost::property_tree::read_xml(istr,tree1);
     Option opt_from_istr(tree1);
 
     EXPECT_TRUE(opt_from_istr.getName() == "my_int");
@@ -112,7 +115,7 @@ TEST(OptionsTest, test_option_reading)
     EXPECT_TRUE(opt_from_istr.getValue<int>() == 17);
 
     // from a ptree (assumed to be built correctly)
-    const boost::property_tree::ptree tree2 = Utils::toPTree(opt_from_istr);
+    const pdalboost::property_tree::ptree tree2 = Utils::toPTree(opt_from_istr);
     Option opt_from_ptree(tree2);
 
     EXPECT_TRUE(opt_from_ptree.getName() == "my_int");
@@ -120,6 +123,7 @@ TEST(OptionsTest, test_option_reading)
     EXPECT_TRUE(opt_from_ptree.getValue<std::string>() == "17");
     EXPECT_TRUE(opt_from_ptree.getValue<int>() == 17);
 }
+**/
 
 TEST(OptionsTest, test_options_copy_ctor)
 {
@@ -148,11 +152,11 @@ TEST(OptionsTest, test_options_writing)
     std::ostringstream ostr;
     const std::string ref = xml_header + "<Option>" + xml_int_ref + "</Option><Option>" + xml_str_ref + "</Option>";
 
-    const boost::property_tree::ptree& tree = Utils::toPTree(opts);
-    boost::property_tree::xml_parser::write_xml(ostr, tree);
-    const std::string str = ostr.str();
-    EXPECT_TRUE(str == ref);
-
+//     const pdalboost::property_tree::ptree& tree = Utils::toPTree(opts);
+//     pdalboost::property_tree::xml_parser::write_xml(ostr, tree);
+//     const std::string str = ostr.str();
+//     EXPECT_TRUE(str == ref);
+//
     int val_i = opts.getOption("my_int").getValue<int>();
     std::string desc_i = opts.getOption("my_int").getDescription();
     std::string val_s = opts.getOption("my_string").getValue<std::string>();
@@ -163,20 +167,6 @@ TEST(OptionsTest, test_options_writing)
     EXPECT_TRUE(desc_s == "This is my stringy option.");
 }
 
-TEST(OptionsTest, test_options_reading)
-{
-    const std::string ref = xml_header + "<Option>" + xml_int_ref + "</Option><Option>" + xml_str_ref + "</Option>";
-    std::istringstream istr(ref);
-
-    boost::property_tree::ptree tree;
-    boost::property_tree::read_xml(istr,tree);
-    Options opts_from_istr(tree);
-
-    const Option& opt = opts_from_istr.getOption("my_int");
-
-    EXPECT_TRUE(opt.getValue<std::string>() == "17");
-    EXPECT_TRUE(opt.getValue<int>() == 17);
-}
 
 TEST(OptionsTest, test_valid_options)
 {
@@ -279,28 +269,6 @@ TEST(OptionsTest, implicitdefault)
     EXPECT_EQ(slist.size(), (size_t)4);
 }
 
-TEST(OptionsTest, metadata)
-{
-    Options ops;
-    ops.add("testa", "This is a test");
-    ops.add("testb", 56);
-    ops.add("testc", 27.5, "Testing testc");
-
-    Option op35("testd", 3.5);
-
-    ops.add("teste", "Testing option test e");
-
-    MetadataNode node = ops.toMetadata();
-
-    std::string goodfile(Support::datapath("misc/opts2json_meta.txt"));
-    std::string testfile(Support::temppath("opts2json.txt"));
-    {
-        std::ofstream out(testfile);
-        Utils::toJSON(node, out);
-    }
-    EXPECT_TRUE(Support::compare_files(goodfile, testfile));
-}
-
 TEST(OptionsTest, conditional)
 {
     CropFilter s;
@@ -339,3 +307,5 @@ TEST(OptionsTest, valid)
     EXPECT_FALSE(Option::nameValid("1foo_123_bar_baz", false));
     EXPECT_FALSE(Option::nameValid("1foo_123_bar_baz", false));
 }
+
+} // namespace pdal
diff --git a/test/unit/PDALUtilsTest.cpp b/test/unit/PDALUtilsTest.cpp
index b91ebf6..5bd8fd4 100644
--- a/test/unit/PDALUtilsTest.cpp
+++ b/test/unit/PDALUtilsTest.cpp
@@ -55,7 +55,8 @@ TEST(PDALUtilsTest, options1)
     std::string testfile(Support::temppath("opts2json.txt"));
 
     {
-        std::ofstream out(testfile);
+        // Binary mode to avoid OS-specific translation of EOL
+        std::ofstream out(testfile, std::ios_base::binary);
         Utils::toJSON(ops, out);
     }
     EXPECT_TRUE(Support::compare_files(goodfile, testfile));
diff --git a/test/unit/PluginManagerTest.cpp b/test/unit/PluginManagerTest.cpp
new file mode 100644
index 0000000..38723e6
--- /dev/null
+++ b/test/unit/PluginManagerTest.cpp
@@ -0,0 +1,113 @@
+/******************************************************************************
+* Copyright (c) 2016, Mateusz Loskot (mateusz at loskot.net).
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/pdal_test_main.hpp>
+
+#include <pdal/PluginManager.hpp>
+#include <pdal/Filter.hpp>
+
+#include "Support.hpp"
+
+namespace pdal
+{
+
+struct DummyPlugin : Filter
+{
+    static std::string const name;
+    static std::string const description;
+    static std::string const link;
+    // Plugin management
+    static PF_ExitFunc initPlugin() // PF_InitFunc
+    {
+        PF_RegisterParams rp;
+        rp.version.major = 1;
+        rp.version.minor = 0;
+        rp.createFunc = create;
+        rp.destroyFunc = destroy;
+        rp.description = description;
+        rp.link = link;
+        rp.pluginType = PF_PluginType_Filter;
+        if (!PluginManager::registerObject(name, &rp))
+            return nullptr;
+        return []()->int32_t { return 0; };
+    }
+    static void* create()
+    {
+        return new DummyPlugin;
+    }
+    static int32_t destroy(void *p)
+    {
+        if (!p) return -1;
+        delete (DummyPlugin*)p;
+        return 0;
+    }
+    // Stage
+    std::string getName() const final { return name; }
+    // Filter
+    void filter(PointView& /*view*/) final {}
+};
+std::string const DummyPlugin::name = "filters.dummytest";
+std::string const DummyPlugin::description = "A dummy plugin registered at run-time";
+std::string const DummyPlugin::link = "http://pdal.io";
+
+TEST(PluginManagerTest, NoPluginsNoNames)
+{
+    auto ns = PluginManager::names(PF_PluginType_Filter
+        | PF_PluginType_Reader | PF_PluginType_Writer);
+    EXPECT_TRUE(ns.empty());
+}
+
+TEST(PluginManagerTest, InitPlugin)
+{
+    EXPECT_TRUE(PluginManager::initializePlugin(DummyPlugin::initPlugin));
+    EXPECT_TRUE(!PluginManager::names(PF_PluginType_Filter).empty());
+
+    // Try to re-register the plugin
+    EXPECT_FALSE(PluginManager::initializePlugin(DummyPlugin::initPlugin));
+}
+
+TEST(PluginManagerTest, MissingPlugin)
+{
+    std::unique_ptr<DummyPlugin> p((DummyPlugin*)PluginManager::createObject("filters.nonexistentplugin"));
+    EXPECT_EQ(p.get(), nullptr);
+}
+
+TEST(PluginManagerTest, CreateObject)
+{
+    std::unique_ptr<DummyPlugin> p((DummyPlugin*)PluginManager::createObject(DummyPlugin::name));
+    EXPECT_NE(p.get(), nullptr);
+}
+
+} // namespace pdal
+
diff --git a/test/unit/PointTableTest.cpp b/test/unit/PointTableTest.cpp
index 446a522..b64d71f 100644
--- a/test/unit/PointTableTest.cpp
+++ b/test/unit/PointTableTest.cpp
@@ -118,22 +118,24 @@ TEST(PointTable, userView)
             { return 0; }
         char *getPoint(PointId idx)
             { return NULL; }
-        void setField(const Dimension::Detail *d, PointId idx, const void *value)
+        void setFieldInternal(Dimension::Id::Enum id, PointId idx,
+            const void *value)
         {
-            if (d->id() == Dimension::Id::X)
+            if (id == Dimension::Id::X)
                m_x = *(const double *)value;
-            else if (d->id() == Dimension::Id::Y)
+            else if (id == Dimension::Id::Y)
                m_y = *(const double *)value;
-            else if (d->id() == Dimension::Id::Z)
+            else if (id == Dimension::Id::Z)
                m_z = *(const double *)value;
         }
-        void getField(const Dimension::Detail *d, PointId idx, void *value)
+        void getFieldInternal(Dimension::Id::Enum id, PointId idx,
+            void *value) const
         {
-            if (d->id() == Dimension::Id::X)
+            if (id == Dimension::Id::X)
                *(double *)value = m_x;
-            else if (d->id() == Dimension::Id::Y)
+            else if (id == Dimension::Id::Y)
                *(double *)value = m_y;
-            else if (d->id() == Dimension::Id::Z)
+            else if (id == Dimension::Id::Z)
                *(double *)value = m_z;
         }
     };
diff --git a/test/unit/PointViewTest.cpp b/test/unit/PointViewTest.cpp
index c6e39d2..c45bd19 100644
--- a/test/unit/PointViewTest.cpp
+++ b/test/unit/PointViewTest.cpp
@@ -34,10 +34,9 @@
 
 #include <pdal/pdal_test_main.hpp>
 
+#include <array>
 #include <random>
 
-#include <boost/property_tree/xml_parser.hpp>
-
 #include <pdal/PointView.hpp>
 #include <pdal/PointViewIter.hpp>
 #include <pdal/PDALUtils.hpp>
@@ -214,20 +213,6 @@ TEST(PointViewTest, assignment)
 }
 
 
-TEST(PointViewTest, metaview)
-{
-    PointTable table;
-    PointViewPtr view = makeTestView(table, 2);
-
-    std::stringstream ss1(std::stringstream::in | std::stringstream::out);
-    MetadataNode tree = Utils::toMetadata(view);
-
-    std::ifstream str1(Support::datapath("pointbuffer/metaview.txt"));
-    std::istringstream str2(Utils::toJSON(tree));
-    //EXPECT_TRUE(Support::compare_text_files(str1, str2));
-}
-
-
 TEST(PointViewTest, bigfile)
 {
     PointTable table;
@@ -429,7 +414,7 @@ TEST(PointViewTest, order)
 
     std::random_device dev;
     std::mt19937 generator(dev());
-   
+
     for (size_t i = 0; i < COUNT; ++i)
         views[i] = PointViewPtr(new PointView(table));
     std::shuffle(views.begin(), views.end(), generator);
diff --git a/test/unit/PolygonTest.cpp b/test/unit/PolygonTest.cpp
new file mode 100644
index 0000000..cb1dce6
--- /dev/null
+++ b/test/unit/PolygonTest.cpp
@@ -0,0 +1,217 @@
+/******************************************************************************
+* Copyright (c) 2016, Howard Butler <howard at hobu.co>
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/pdal_test_main.hpp>
+
+#include <pdal/util/FileUtils.hpp>
+
+
+#include <pdal/PointView.hpp>
+#include <pdal/Options.hpp>
+
+#include <pdal/Polygon.hpp>
+#include "Support.hpp"
+
+
+
+namespace pdal
+{
+
+std::string getWKT()
+{
+    std::istream* wkt_stream =
+        FileUtils::openFile(Support::datapath("autzen/autzen-selection.wkt"));
+
+    std::stringstream strbuf;
+    strbuf << wkt_stream->rdbuf();
+
+    std::string wkt(strbuf.str());
+
+    FileUtils::closeFile(wkt_stream);
+
+    return wkt;
+}
+
+std::string getJSON()
+{
+    std::istream* json_stream =
+        FileUtils::openFile(Support::datapath("autzen/autzen-selection.json"));
+
+    std::stringstream strbuf;
+    strbuf << json_stream->rdbuf();
+
+    std::string json(strbuf.str());
+    FileUtils::closeFile(json_stream);
+    return json;
+}
+
+TEST(PolygonTest, test_wkt_in)
+{
+    std::string wkt(getWKT());
+
+    pdal::Polygon p(wkt);
+}
+
+TEST(PolygonTest, test_json_in)
+{
+    std::string json(getJSON());
+
+    pdal::Polygon p(json);
+}
+
+TEST(PolygonTest, test_wkt_out)
+{
+
+    pdal::Polygon p(getWKT());
+    std::string expected("POLYGON ((636889.41295124 851528.51229326, 636899.14233424 851475.00068676, 636899.14233424 851475.00068676, 636928.33048324 851494.45945276, 636928.33048324 851494.45945276, 636928.33048324 851494.45945276, 636976.97739824 851513.91821876, 636976.97739824 851513.91821876, 637069.40653674 851475.00068676, 637132.64752625 851445.81253776, 637132.64752625 851445.81253776, 637336.96456925 851411.75969726, 637336.96456925 851411.75969726, 637473.17593125 851158.7957 [...]
+
+    std::string w = p.wkt();
+    EXPECT_EQ(expected, w);
+
+}
+
+
+TEST(PolygonTest, test_json_out)
+{
+    pdal::Polygon p(getJSON());
+    std::string j = p.json(5);
+    std::string expected("{ \"type\": \"Polygon\", \"coordinates\": [ [ [ 636889.41295, 851528.51229 ], [ 636899.14233, 851475.00069 ], [ 636899.14233, 851475.00069 ], [ 636928.33048, 851494.45945 ], [ 636928.33048, 851494.45945 ], [ 636928.33048, 851494.45945 ], [ 636976.9774, 851513.91822 ], [ 636976.9774, 851513.91822 ], [ 637069.40654, 851475.00069 ], [ 637132.64753, 851445.81254 ], [ 637132.64753, 851445.81254 ], [ 637336.96457, 851411.7597 ], [ 637336.96457, 851411.7597 ], [ 637473 [...]
+    EXPECT_EQ(j, expected);
+}
+
+TEST(PolygonTest, smooth)
+{
+    pdal::Polygon p(getJSON());
+    pdal::Polygon p2 = p.simplify(100000.0, 0.0);
+    EXPECT_FLOAT_EQ(p.area(), 703744.56f);
+    EXPECT_FLOAT_EQ(p2.area(), 492958.44f);
+}
+
+TEST(PolygonTest, covers)
+{
+    using namespace pdal::Dimension;
+
+    pdal::Polygon p(getWKT());
+
+    PointTable table;
+    PointLayoutPtr layout(table.layout());
+    layout->registerDim(Dimension::Id::X);
+    layout->registerDim(Dimension::Id::Y);
+
+
+    // Check if the very first point in the polygon is
+    // covered by the polyg. Should be true
+    //
+    PointViewPtr view(new PointView(table));
+    view->setField(Id::X, 0, 636889.412951239268295 );
+    view->setField(Id::Y, 0, 851528.512293258565478);
+
+    pdal::PointRef ref(*view, 0);
+    bool covered = p.covers(ref);
+    EXPECT_EQ(covered, true);
+}
+
+TEST(PolygonTest, valid)
+{
+    pdal::Polygon p(getWKT());
+    EXPECT_EQ(p.valid(), true);
+}
+
+TEST(PolygonTest, bounds)
+{
+    pdal::Polygon p(getWKT());
+    BOX3D b = p.bounds();
+    EXPECT_FLOAT_EQ(b.minx, 636539.12f);
+    EXPECT_FLOAT_EQ(b.miny, 850511.81f);
+    EXPECT_FLOAT_EQ(b.minz, 420.50977f);
+    EXPECT_FLOAT_EQ(b.maxx, 637589.94f);
+    EXPECT_FLOAT_EQ(b.maxy, 851528.5f);
+    EXPECT_FLOAT_EQ(b.maxz, 438.70996f);
+}
+
+TEST(PolygonTest, bounds2d)
+{
+    BOX2D box(636539.12, 850511.81, 637589.94, 851528.5);
+    pdal::Polygon p(box);
+
+    BOX3D b = p.bounds();
+    EXPECT_FLOAT_EQ(b.minx, 636539.12f);
+    EXPECT_FLOAT_EQ(b.miny, 850511.81f);
+    EXPECT_FLOAT_EQ(b.minz, 0.0f);
+    EXPECT_FLOAT_EQ(b.maxx, 637589.94f);
+    EXPECT_FLOAT_EQ(b.maxy, 851528.5f);
+    EXPECT_FLOAT_EQ(b.maxz, 0.0f);
+}
+
+TEST(PolygonTest, bounds3d)
+{
+    BOX3D box(636539.12, 850511.81, 420.50977, 637589.94, 851528.5, 438.70996);
+    pdal::Polygon p(box);
+
+    BOX3D b = p.bounds();
+    EXPECT_FLOAT_EQ(b.minx, 636539.12f);
+    EXPECT_FLOAT_EQ(b.miny, 850511.81f);
+    EXPECT_FLOAT_EQ(b.minz, 420.50977f);
+    EXPECT_FLOAT_EQ(b.maxx, 637589.94f);
+    EXPECT_FLOAT_EQ(b.maxy, 851528.5f);
+    EXPECT_FLOAT_EQ(b.maxz, 438.70996f);
+}
+
+
+TEST(PolygonTest, streams)
+{
+    pdal::Polygon p(getWKT());
+
+    std::stringstream ss(std::stringstream::in | std::stringstream::out);
+
+    ss << p;
+
+    pdal::Polygon p2;
+    ss >> p2;
+
+    EXPECT_TRUE(p == p2);
+
+}
+
+TEST(PolygonTest, options)
+{
+    pdal::Option op("polygon", getWKT(), "");
+
+    Polygon p = op.getValue<Polygon>();
+
+}
+
+
+
+} // namespace pdal
diff --git a/test/unit/ProgramArgsTest.cpp b/test/unit/ProgramArgsTest.cpp
new file mode 100644
index 0000000..1e9803a
--- /dev/null
+++ b/test/unit/ProgramArgsTest.cpp
@@ -0,0 +1,314 @@
+/******************************************************************************
+* Copyright (c) 2016, Hobu Inc. (info at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/pdal_test_main.hpp>
+
+// No wordexp() on windows and I don't feel like doing something special.
+#ifndef _WIN32
+
+#include <wordexp.h>
+#include <pdal/pdal_internal.hpp>
+#include <pdal/util/ProgramArgs.hpp>
+
+using namespace pdal;
+
+#define HANDLE_EXCEPTION(a) \
+    EXPECT_THROW(a, arg_error)
+/**
+    try {\
+        a;\
+    }\
+    catch (arg_error e)\
+    {\
+        std::cerr << e.m_error << "\n";\
+    }\
+**/
+
+
+namespace
+{
+
+StringList toStringList(const std::string& s)
+{
+    StringList slist;
+
+    wordexp_t w;
+    wordexp(s.c_str(), &w, WRDE_SHOWERR);
+    for (size_t i = 0; i < w.we_wordc; ++i)
+        slist.push_back(w.we_wordv[i]);
+    wordfree(&w);
+    return slist;
+}
+
+}
+
+TEST(ProgramArgsTest, t1)
+{
+    ProgramArgs args;
+
+    std::string m_foo;
+
+    args.add("foo,f", "Foo description", m_foo, "foo");
+    StringList s = toStringList("--foo");
+    EXPECT_THROW(args.parse(s), arg_error);
+
+    s = toStringList("--foo=TestFoo");
+    args.parse(s);
+    EXPECT_EQ(m_foo, "TestFoo");
+
+    s = toStringList("--foo TestBar");
+    args.parse(s);
+    EXPECT_EQ(m_foo, "TestBar");
+
+    s = toStringList("-f");
+    EXPECT_THROW(args.parse(s), arg_error);
+
+    s = toStringList("-f -g");
+    EXPECT_THROW(args.parse(s), arg_error);
+
+    s = toStringList("-f Gah");
+    args.parse(s);
+    EXPECT_EQ(m_foo, "Gah");
+}
+
+TEST(ProgramArgsTest, t2)
+{
+    ProgramArgs args;
+
+    std::string m_foo;
+    int m_bar;
+    bool m_baz;
+
+    args.add("foo,f", "Foo description", m_foo, "foo");
+    args.add("bar", "Foo description", m_bar, 23);
+    args.add("baz,z", "Foo description", m_baz);
+
+    StringList s = toStringList("--foo TEst --bar=45 -z");
+    args.parse(s);
+    EXPECT_EQ(m_foo, "TEst");
+    EXPECT_EQ(m_bar, 45);
+    EXPECT_EQ(m_baz, true);
+
+    args.reset();
+    s = toStringList("-zf FooTest --bar=55");
+    args.parse(s);
+    EXPECT_EQ(m_foo, "FooTest");
+    EXPECT_EQ(m_bar, 55);
+    EXPECT_EQ(m_baz, true);
+
+    args.reset();
+    s = toStringList("");
+    EXPECT_EQ(m_foo, "foo");
+    EXPECT_EQ(m_bar, 23);
+    EXPECT_EQ(m_baz, false);
+
+    s = toStringList("--zf Foo");
+    EXPECT_THROW(args.parse(s), arg_error);
+
+    s = toStringList("-fz FooTest");
+    EXPECT_THROW(args.parse(s), arg_error);
+
+    args.reset();
+    s = toStringList("--foo=\"This is a test\"");
+    args.parse(s);
+    EXPECT_EQ(m_foo, "This is a test");
+}
+
+TEST(ProgramArgsTest, t3)
+{
+    ProgramArgs args;
+
+    std::string m_foo;
+    int m_bar;
+    bool m_baz;
+
+    args.add("foo,f", "Foo description", m_foo, "foo");
+    args.add("bar", "Foo description", m_bar, 23);
+    args.add("baz,z", "Foo description", m_baz);
+
+    // Go through exceptions procedurally.
+
+    // Argument 'foo' needs a value and none was provided.
+    StringList s = toStringList("--foo");
+    HANDLE_EXCEPTION(args.parse(s));
+
+    // Invalid value for argument 'bar'.
+    s = toStringList("--bar=foo");
+    HANDLE_EXCEPTION(args.parse(s));
+
+    // Argument 'bar' needs a value and none was provided.
+    s = toStringList("--bar");
+    HANDLE_EXCEPTION(args.parse(s));
+
+    // Argument 'foo' needs a value and none was provided.
+    s = toStringList("--foo --baz");
+    HANDLE_EXCEPTION(args.parse(s));
+
+    // Unexpected argument 'flub'.
+    s = toStringList("--flub");
+    HANDLE_EXCEPTION(args.parse(s));
+
+    // Value 'flub' provided for argument 'baz' when none is expected.
+    s = toStringList("--baz=flub");
+    HANDLE_EXCEPTION(args.parse(s));
+
+    // Unexpected argument '-q'.
+    s = toStringList("-zq");
+    HANDLE_EXCEPTION(args.parse(s));
+
+    // Unexpected argument '-q'.
+    s = toStringList("-q");
+    HANDLE_EXCEPTION(args.parse(s));
+
+    // Short option 'f' expects value but appears in option group '-fz'.
+    s = toStringList("-fz foo");
+    HANDLE_EXCEPTION(args.parse(s));
+}
+
+TEST(ProgramArgsTest, t4)
+{
+    ProgramArgs args;
+
+    std::string m_foo;
+    int m_bar;
+    bool m_baz;
+
+    // Test for exceptions in adding args.
+
+    // Invalid program option specification
+    HANDLE_EXCEPTION(args.add("foo,f,q", "Foo description", m_foo, "foo"));
+
+    // Short option not specified as single character
+    HANDLE_EXCEPTION(args.add("foo,flub", "Foo description", m_foo, "foo"));
+
+    // No program option provided.
+    HANDLE_EXCEPTION(args.add("", "Foo description", m_foo, "foo"));
+}
+
+TEST(ProgramArgsTest, positional)
+{
+    ProgramArgs args;
+
+    std::string m_foo;
+    int m_bar;
+    bool m_baz;
+
+    args.add("foo,f", "Foo description", m_foo, "foo").setPositional();
+    args.add("bar", "Foo description", m_bar, 23).setPositional();
+    Arg& baz = args.add("baz,z", "Foo description", m_baz);
+    EXPECT_THROW(baz.setPositional(), arg_error);
+
+    // Go through exceptions procedurally.
+
+    StringList s = toStringList("--foo Foo -z 55");
+    args.parse(s);
+    EXPECT_EQ(m_foo, "Foo");
+    EXPECT_EQ(m_bar, 55);
+    EXPECT_EQ(m_baz, true);
+
+    args.reset();
+
+    s = toStringList("-z Flub 66");
+    args.parse(s);
+    EXPECT_EQ(m_foo, "Flub");
+    EXPECT_EQ(m_bar, 66);
+    EXPECT_EQ(m_baz, true);
+
+    args.reset();
+
+    s = toStringList("Flub 66");
+    args.parse(s);
+    EXPECT_EQ(m_foo, "Flub");
+    EXPECT_EQ(m_bar, 66);
+    EXPECT_EQ(m_baz, false);
+}
+
+TEST(ProgramArgsTest, vector)
+{
+    ProgramArgs args;
+
+    std::string m_foo;
+    std::vector<int> m_bar;
+    bool m_baz;
+
+    args.add("foo,f", "Foo description", m_foo, "foo").setPositional();
+    args.add("bar", "Foo description", m_bar).setOptionalPositional();
+    args.add("baz,z", "Foo description", m_baz);
+
+    // Go through exceptions procedurally.
+
+    StringList s = toStringList("--bar 23 --bar 45 Foo -z");
+    args.parse(s);
+    EXPECT_EQ(m_foo, "Foo");
+    EXPECT_EQ(m_bar.size(), 2u);
+    EXPECT_EQ(m_baz, true);
+    EXPECT_EQ(m_bar[0], 23);
+    EXPECT_EQ(m_bar[1], 45);
+
+    args.reset();
+    s = toStringList("Foo");
+    args.parse(s);
+    EXPECT_EQ(m_bar.size(), 0u);
+    EXPECT_EQ(m_foo, "Foo");
+    EXPECT_EQ(m_baz, false);
+
+    args.reset();
+    s = toStringList("Fool 44 55 66");
+    args.parse(s);
+    EXPECT_EQ(m_foo, "Fool");
+    EXPECT_EQ(m_bar.size(), 3u);
+    EXPECT_EQ(m_bar[0], 44);
+    EXPECT_EQ(m_bar[1], 55);
+    EXPECT_EQ(m_bar[2], 66);
+    EXPECT_EQ(m_baz, false);
+}
+
+TEST(ProgramArgsTest, vectorfail)
+{
+    ProgramArgs args;
+
+    std::string m_foo;
+    std::vector<int> m_bar;
+    bool m_baz;
+
+    // Standard positional arg following optional positional arg disallowed.
+    args.add("bar", "Foo description", m_bar).setOptionalPositional();
+    args.add("foo,f", "Foo description", m_foo, "foo").setPositional();
+    args.add("baz,z", "Foo description", m_baz);
+
+    StringList s;
+    EXPECT_THROW(args.parse(s), arg_error);
+}
+
+#endif
diff --git a/test/unit/SpatialReferenceTest.cpp b/test/unit/SpatialReferenceTest.cpp
index c826d0a..6c26575 100644
--- a/test/unit/SpatialReferenceTest.cpp
+++ b/test/unit/SpatialReferenceTest.cpp
@@ -35,12 +35,15 @@
 #include <pdal/pdal_test_main.hpp>
 
 #include <pdal/SpatialReference.hpp>
+#include <pdal/Polygon.hpp>
 #include <pdal/util/FileUtils.hpp>
 #include <ReprojectionFilter.hpp>
 #include <MergeFilter.hpp>
 #include <LasWriter.hpp>
 #include <LasReader.hpp>
 
+#include <gdal_version.h>
+
 #include "Support.hpp"
 
 using namespace pdal;
@@ -57,48 +60,47 @@ TEST(SpatialReferenceTest, test_env_vars)
 #endif
 }
 
-
 TEST(SpatialReferenceTest, test_ctor)
 {
     SpatialReference srs;
 
-    EXPECT_TRUE(srs.getProj4() == "");
-    EXPECT_TRUE(srs.getWKT() == "");
+    EXPECT_EQ(srs.getProj4(), "");
+    EXPECT_EQ(srs.getWKT(), "");
     EXPECT_TRUE(srs.empty());
 }
 
-
 // Test round-tripping proj.4 string
 TEST(SpatialReferenceTest, test_proj4_roundtrip)
 {
     std::string proj4 = "+proj=utm +zone=15 +datum=WGS84 +units=m +no_defs";
     std::string proj4_ellps =
         "+proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs";
-    std::string proj4_out =
-        "+proj=utm +zone=15 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m "
-        "+no_defs";
+
+    // List of possible outputs
+    std::vector<std::string> const proj4_out = {
+        "+proj=utm +zone=15 +datum=WGS84 +units=m +no_defs",
+        "+proj=utm +zone=15 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
+    };
 
     {
         SpatialReference ref;
         ref.setProj4(proj4);
         EXPECT_TRUE(!ref.empty());
         const std::string ret = ref.getProj4();
-        EXPECT_TRUE(ret == proj4_out);
     }
 
     {
         SpatialReference ref;
         ref.setProj4(proj4_ellps);
         const std::string ret = ref.getProj4();
-        //EXPECT_TRUE(ret == proj4);
-        EXPECT_TRUE(ret == proj4_out);
+        EXPECT_TRUE(Utils::contains(proj4_out, ret));
     }
 
     {
         SpatialReference ref;
-        ref.setProj4(proj4_out);
+        ref.setProj4(proj4_out.front());
         const std::string ret = ref.getProj4();
-        EXPECT_TRUE(ret == proj4_out);
+        EXPECT_TRUE(Utils::contains(proj4_out, ret));
     }
 }
 
@@ -118,8 +120,8 @@ TEST(SpatialReferenceTest, test_userstring_roundtrip)
     std::string ret_proj = ref.getProj4();
     std::string ret_wkt = ref.getWKT();
 
-    EXPECT_TRUE(ret_proj == proj4);
-    EXPECT_TRUE(ret_wkt == wkt);
+    EXPECT_EQ(ret_proj, proj4);
+    EXPECT_EQ(ret_wkt, wkt);
 }
 
 
@@ -144,7 +146,7 @@ TEST(SpatialReferenceTest, calcZone)
 {
     int zone = 1;
     for (double lon = -537.0; lon < 537.0; lon += 6.0)
-    {   
+    {
        EXPECT_EQ(zone, SpatialReference::calculateZone(lon, 25));
        EXPECT_EQ(-zone, SpatialReference::calculateZone(lon, -25));
        zone++;
@@ -159,7 +161,7 @@ TEST(SpatialReferenceTest, calcZone)
 }
 
 
-#if defined(PDAL_HAVE_GEOS) && defined(PDAL_HAVE_LIBGEOTIFF)
+#if defined(PDAL_HAVE_LIBGEOTIFF)
 // Test fetching SRS from an existing file
 TEST(SpatialReferenceTest, test_read_srs)
 {
@@ -177,12 +179,15 @@ TEST(SpatialReferenceTest, test_read_srs)
     const std::string ret_wkt = ref.getWKT();
     const std::string ret_proj4 = ref.getProj4();
 
-    const std::string wkt = "PROJCS[\"WGS 84 / UTM zone 17N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_nort [...]
-
-    EXPECT_TRUE(ret_wkt == wkt);
+    // List of possible outputs
+    std::vector<std::string> const wkt_out = {
+        "PROJCS[\"WGS 84 / UTM zone 17N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"met [...]
+        "PROJCS[\"WGS 84 / UTM zone 17N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_ea [...]
+    };
+    EXPECT_TRUE(Utils::contains(wkt_out, ret_wkt));
 
     std::string proj4 = "+proj=utm +zone=17 +datum=WGS84 +units=m +no_defs";
-    EXPECT_TRUE(ret_proj4 == proj4);
+    EXPECT_EQ(ret_proj4, proj4);
 }
 #endif
 
@@ -206,7 +211,7 @@ TEST(SpatialReferenceTest, test_vertical_datums)
     SpatialReference ref;
     ref.setFromUserInput(wkt);
     const std::string wktCheck = ref.getWKT(SpatialReference::eCompoundOK);
-    EXPECT_TRUE(wkt == wktCheck); // just to make sure
+    EXPECT_EQ(wkt, wktCheck); // just to make sure
 
     PointTable table;
     // Write a very simple file with our SRS and one point.
@@ -245,7 +250,7 @@ TEST(SpatialReferenceTest, test_vertical_datums)
 #endif //PDAL_HAVE_LIBGEOTIFF
 
 
-#if defined(PDAL_HAVE_GEOS) && defined(PDAL_HAVE_LIBGEOTIFF)
+#if defined(PDAL_HAVE_LIBGEOTIFF)
 // Try writing only the WKT VLR to a file, and see if the resulting
 // file still works ok.
 TEST(SpatialReferenceTest, test_writing_vlr)
@@ -257,7 +262,7 @@ TEST(SpatialReferenceTest, test_writing_vlr)
 
     ref.setFromUserInput("EPSG:4326");
     std::string wkt = ref.getWKT();
-    EXPECT_TRUE(wkt == reference_wkt);
+    EXPECT_EQ(wkt, reference_wkt);
 
     // Write a very simple file with our SRS and one point.
     {
@@ -320,7 +325,7 @@ TEST(SpatialReferenceTest, test_io)
     SpatialReference ref2;
     ss >> ref2;
 
-    EXPECT_TRUE(ref == ref2);
+    EXPECT_EQ(ref, ref2);
 }
 
 TEST(SpatialReferenceTest, test_vertical_and_horizontal)
@@ -386,4 +391,33 @@ TEST(SpatialReferenceTest, merge)
     Support::checkXYZ(Support::temppath("triple.las"),
         Support::datapath("las/test_epsg_4326x3.las"));
 }
+
+#endif
+
+TEST(SpatialReferenceTest, test_bounds)
+{
+
+#if GDAL_VERSION_MAJOR <=1
+    const std::string utm17_wkt = "PROJCS[\"WGS 84 / UTM zone 17N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"fals [...]
+#else
+    const std::string utm17_wkt = "PROJCS[\"WGS 84 / UTM zone 17N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-81],PARAMETER[\"scale_factor\",0. [...]
 #endif
+
+    SpatialReference utm17(utm17_wkt);
+
+    std::string wgs84_wkt = "GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]";
+
+
+    SpatialReference wgs84(wgs84_wkt);
+    BOX2D box17(289814.15, 4320978.61, 289818.50, 4320980.59);
+    pdal::Polygon p(box17);
+    p.setSpatialReference(utm17);
+    pdal::Polygon p2 = p.transform(wgs84);
+
+    BOX3D b2 = p2.bounds();
+    EXPECT_FLOAT_EQ(static_cast<float>(b2.minx), -83.42759776f);
+    EXPECT_FLOAT_EQ(static_cast<float>(b2.miny), 39.01259905f);
+    EXPECT_FLOAT_EQ(static_cast<float>(b2.maxx), -83.427551f);
+    EXPECT_FLOAT_EQ(static_cast<float>(b2.maxy), 39.01261687f);
+
+}
diff --git a/test/unit/StageFactoryTest.cpp b/test/unit/StageFactoryTest.cpp
new file mode 100644
index 0000000..8a84c66
--- /dev/null
+++ b/test/unit/StageFactoryTest.cpp
@@ -0,0 +1,88 @@
+/******************************************************************************
+* Copyright (c) 2015, Hobu Inc. (info at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/pdal_test_main.hpp>
+
+#include <pdal/PluginManager.hpp>
+#include <pdal/StageFactory.hpp>
+#include <pdal/util/Algorithm.hpp>
+
+#include "Support.hpp"
+
+namespace pdal
+{
+
+TEST(StageManagerTest, Load)
+{
+    StageFactory f(false);
+
+    StringList ns = PluginManager::names(PF_PluginType_Filter |
+        PF_PluginType_Reader | PF_PluginType_Writer);
+    ASSERT_TRUE(Utils::contains(ns, "filters.crop"));
+    ASSERT_TRUE(Utils::contains(ns, "readers.las"));
+    ASSERT_TRUE(Utils::contains(ns, "writers.bpf"));
+}
+
+TEST(StageManagerTest, Load2)
+{
+    StageFactory f(false);
+
+    StringList ns = PluginManager::names(PF_PluginType_Filter);
+    ASSERT_TRUE(Utils::contains(ns, "filters.crop"));
+    ASSERT_FALSE(Utils::contains(ns, "readers.las"));
+    ASSERT_FALSE(Utils::contains(ns, "writers.bpf"));
+}
+
+TEST(StageManagerTest, Load3)
+{
+    StageFactory f(false);
+
+    StringList ns = PluginManager::names(PF_PluginType_Reader);
+    ASSERT_FALSE(Utils::contains(ns, "filters.crop"));
+    ASSERT_TRUE(Utils::contains(ns, "readers.las"));
+    ASSERT_FALSE(Utils::contains(ns, "writers.bpf"));
+}
+
+TEST(StageManagerTest, Load4)
+{
+    StageFactory f(false);
+
+    StringList ns = PluginManager::names(PF_PluginType_Writer);
+    ASSERT_FALSE(Utils::contains(ns, "filters.crop"));
+    ASSERT_FALSE(Utils::contains(ns, "readers.las"));
+    ASSERT_TRUE(Utils::contains(ns, "writers.bpf"));
+}
+    
+} // namespace pdal
+
diff --git a/test/unit/StreamingTest.cpp b/test/unit/StreamingTest.cpp
new file mode 100644
index 0000000..25c05a6
--- /dev/null
+++ b/test/unit/StreamingTest.cpp
@@ -0,0 +1,108 @@
+/******************************************************************************
+* Copyright (c) 2011, Michael P. Gerlek (mpg at flaxen.com)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/pdal_test_main.hpp>
+
+#include <pdal/Filter.hpp>
+#include <pdal/PointTable.hpp>
+#include <FauxReader.hpp>
+#include <MergeFilter.hpp>
+#include <StreamCallbackFilter.hpp>
+#include "Support.hpp"
+
+using namespace pdal;
+
+// This test depends on stages being executed in the order that they were
+// added to each parent.  If you change order, things will break.
+TEST(Streaming, filter)
+{
+    Options ro1;
+    ro1.add("bounds", BOX3D(0, 0, 0, 99, 99, 99));
+    ro1.add("mode", "ramp");
+    ro1.add("count", 100);
+    FauxReader r1;
+    r1.setOptions(ro1);
+
+    Options ro2;
+    ro2.add("bounds", BOX3D(100, 100, 100, 199, 199, 199));
+    ro2.add("mode", "ramp");
+    ro2.add("count", 100);
+    FauxReader r2;
+    r2.setOptions(ro2);
+
+    Options ro3;
+    ro3.add("bounds", BOX3D(200, 200, 200, 299, 299, 299));
+    ro3.add("mode", "ramp");
+    ro3.add("count", 100);
+    FauxReader r3;
+    r3.setOptions(ro3);
+
+    Options ro4;
+    ro4.add("bounds", BOX3D(300, 300, 300, 399, 399, 399));
+    ro4.add("mode", "ramp");
+    ro4.add("count", 100);
+    FauxReader r4;
+    r4.setOptions(ro4);
+
+    MergeFilter m1;
+    m1.setInput(r1);
+    m1.setInput(r2);
+
+    MergeFilter m2;
+    m2.setInput(r3);
+    m2.setInput(r4);
+
+    MergeFilter m3;
+    m3.setInput(m1);
+    m3.setInput(m2);
+
+    StreamCallbackFilter f;
+    int cnt = 0;
+    auto cb = [&cnt](PointRef& point)
+    {
+        static int x(0), y(0), z(0);
+        EXPECT_EQ(point.getFieldAs<int>(Dimension::Id::X), x++);
+        EXPECT_EQ(point.getFieldAs<int>(Dimension::Id::Y), y++);
+        EXPECT_EQ(point.getFieldAs<int>(Dimension::Id::Z), z++);
+        cnt++;
+        return true;
+    };
+    f.setCallback(cb);
+    f.setInput(m3);
+
+    FixedPointTable t(20);
+    f.prepare(t);
+    f.execute(t);
+    EXPECT_EQ(cnt, 400);
+}
diff --git a/test/unit/Support.cpp b/test/unit/Support.cpp
index 0bc7f06..7b33bda 100644
--- a/test/unit/Support.cpp
+++ b/test/unit/Support.cpp
@@ -41,8 +41,6 @@
 
 #include <stdio.h>
 
-#include <boost/filesystem.hpp>
-
 #include <pdal/util/FileUtils.hpp>
 #include <pdal/Options.hpp>
 #include <pdal/Stage.hpp>
@@ -294,10 +292,10 @@ void Support::checkXYZ(const std::string& file1, const std::string& file2)
 
     const std::string driver2 = f.inferReaderDriver(file2);
     EXPECT_NE(driver2, "") << "Can't find driver";
-    
+
     Stage *reader1 = f.createStage(driver1);
     EXPECT_NE(reader1, (Stage *)NULL) << "Couldn't create stage";
-    
+
     Stage *reader2 = f.createStage(driver2);
     EXPECT_NE(reader1, (Stage *)NULL) << "Couldn't create stage";
 
diff --git a/test/unit/UserCallbackTest.cpp b/test/unit/UserCallbackTest.cpp
deleted file mode 100644
index 864e2b3..0000000
--- a/test/unit/UserCallbackTest.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/******************************************************************************
-* Copyright (c) 2011, Michael P. Gerlek (mpg at flaxen.com)
-*
-* 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 in
-*       the documentation and/or other materials provided
-*       with the distribution.
-*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
-*       names of its contributors may be used to endorse or promote
-*       products derived from this software without specific prior
-*       written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-* OF SUCH DAMAGE.
-****************************************************************************/
-
-#include <pdal/pdal_test_main.hpp>
-
-#include <pdal/UserCallback.hpp>
-
-using namespace pdal;
-
-// our implementation will be that we will request an interrupt
-// when we are more than half done
-class MyUserCallback : public UserCallback
-{
-public:
-    virtual void callback()
-    {
-        if (getPercentComplete() > 50.0)
-            setInterruptFlag(true);
-    }
-};
-
-
-class Worker
-{
-public:
-    Worker(UserCallback& cb) : m_cb(cb), m_ticks(0)
-    {
-        m_cb.setTotal(300);
-    }
-
-    // each invocation of doWork will represent 1% more done
-    // returns true if work is going along okay, false otherwise
-    bool doWork()
-    {
-        m_cb.invoke(++m_ticks);
-        m_cb.invoke(++m_ticks);
-        m_cb.invoke(++m_ticks);
-        return true;
-    }
-
-private:
-    UserCallback& m_cb;
-    int m_ticks;
-
-    Worker& operator=(const Worker&); // not implemented
-};
-
-
-TEST(UserCallbackTest, test1)
-{
-    MyUserCallback cb;
-
-    Worker worker(cb);
-    bool ok;
-
-    // first 50%
-    for (int i = 0; i < 50; i++)
-    {
-        ok = worker.doWork();
-        EXPECT_TRUE(ok);
-        uint32_t hb = 3 * (i + 1);
-        EXPECT_EQ(cb.getHeartbeats(), hb);
-        EXPECT_DOUBLE_EQ(cb.getPercentComplete(), (double)(i + 1));
-    }
-
-    // to 51%...
-    try
-    {
-        ok = true;
-        ok = worker.doWork();
-    }
-    catch (UserCallback::interrupted)
-    {
-        ok = false;
-    }
-    EXPECT_TRUE(!ok);
-    EXPECT_DOUBLE_EQ(100.0*(151.0/300.0), cb.getPercentComplete());
-}
diff --git a/test/unit/UtilsTest.cpp b/test/unit/UtilsTest.cpp
index 270322c..17993b6 100644
--- a/test/unit/UtilsTest.cpp
+++ b/test/unit/UtilsTest.cpp
@@ -74,38 +74,27 @@ TEST(UtilsTest, test_comparators)
     bool ok;
 
     {
-        ok = Utils::compare_distance<float>(1.000001f, 1.0f);
+        ok = Utils::compare_approx(1.001f, 1.0f, 0.0001f);
         EXPECT_TRUE(!ok);
 
-        ok = Utils::compare_distance<float>(1.0000001f, 1.0f);
-        EXPECT_TRUE(ok);
-
-        ok = Utils::compare_distance<float>(1.00000001f, 1.0f);
-        EXPECT_TRUE(ok);
-    }
-
-    {
-        ok = Utils::compare_approx<float>(1.001f, 1.0f, 0.0001f);
-        EXPECT_TRUE(!ok);
-
-        ok = Utils::compare_approx<float>(1.001f, 1.0f, 0.001f);
+        ok = Utils::compare_approx(1.001f, 1.0f, 0.001f);
         EXPECT_TRUE(!ok);
 
-        ok = Utils::compare_approx<float>(1.001f, 1.0f, 0.01f);
+        ok = Utils::compare_approx(1.001f, 1.0f, 0.01f);
         EXPECT_TRUE(ok);
 
-        ok = Utils::compare_approx<float>(1.001f, 1.0f, 0.1f);
+        ok = Utils::compare_approx(1.001f, 1.0f, 0.1f);
         EXPECT_TRUE(ok);
     }
 
     {
-        ok = Utils::compare_approx<unsigned int>(10, 12, 2);
+        ok = Utils::compare_approx(10, 12, 2);
         EXPECT_TRUE(ok);
 
-        ok = Utils::compare_approx<unsigned int>(10, 12, 3);
+        ok = Utils::compare_approx(10, 12, 3);
         EXPECT_TRUE(ok);
 
-        ok = Utils::compare_approx<unsigned int>(10, 12, 1);
+        ok = Utils::compare_approx(10, 12, 1);
         EXPECT_TRUE(!ok);
     }
 }
diff --git a/test/unit/UuidTest.cpp b/test/unit/UuidTest.cpp
new file mode 100644
index 0000000..2c902ec
--- /dev/null
+++ b/test/unit/UuidTest.cpp
@@ -0,0 +1,54 @@
+/******************************************************************************
+* Copyright (c) 2016, Hobu Inc. (info at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/pdal_test_main.hpp>
+
+#include <pdal/util/Uuid.hpp>
+
+using namespace pdal;
+
+TEST(UuidTest, test)
+{
+    std::string s("5CE0E9A5-6015-FEC5-AADF-A328AE398115");
+    unsigned char id[16] = {0x5c, 0xe0, 0xe9, 0xa5, 0x60, 0x15, 0xfe, 0xc5,
+                            0xaa, 0xdf, 0xa3, 0x28, 0xae, 0x39, 0x81, 0x15 };
+    Uuid uuid((char *)id);
+    EXPECT_EQ(uuid.toString(), s);
+
+    Uuid uuid2(s);
+    unsigned char buf[16];
+    uuid2.pack((char *)buf);
+    for (size_t i = 0; i < 16; ++i)
+        EXPECT_EQ(id[i], buf[i]);
+}
diff --git a/test/unit/XMLSchemaTest.cpp b/test/unit/XMLSchemaTest.cpp
index 1c32787..45b53d9 100644
--- a/test/unit/XMLSchemaTest.cpp
+++ b/test/unit/XMLSchemaTest.cpp
@@ -33,12 +33,9 @@
 ****************************************************************************/
 
 #include <pdal/pdal_test_main.hpp>
-#include <boost/property_tree/ptree.hpp>
-
-#include <boost/uuid/uuid_generators.hpp>
-#include <boost/uuid/uuid_io.hpp>
 
 #include <pdal/util/FileUtils.hpp>
+#include <pdal/util/Uuid.hpp>
 #include <pdal/Metadata.hpp>
 #include <pdal/PointTable.hpp>
 #include <pdal/XMLSchema.hpp>
@@ -161,7 +158,7 @@ TEST(XMLSchemaTest, copy)
     MetadataNode m1 = m.add("m1", 1u);
     MetadataNode m2 = m.add("m2", 1);
     MetadataNode m1prime = m.add("m1prime", "Some other metadata");
-    m1.add("uuid", boost::uuids::nil_uuid());
+    m1.add("uuid", Uuid());
 
     XMLSchema s2(s1.xmlDims(), m);
     std::string xml_output = s2.xml();
diff --git a/test/unit/apps/MergeTest.cpp b/test/unit/apps/MergeTest.cpp
index b3fb2b4..b9404da 100644
--- a/test/unit/apps/MergeTest.cpp
+++ b/test/unit/apps/MergeTest.cpp
@@ -57,7 +57,8 @@ TEST(Merge, pdalinfoTest_no_input)
     std::string output;
     EXPECT_EQ(Utils::run_shell_command(cmd, output), 1);
 
-    const std::string expected = "PDAL: Must specify an input and output file.";
+    const std::string expected = "PDAL: Missing value for positional "
+        "argument 'files'.";
     EXPECT_EQ(output.substr(0, expected.length()), expected);
 }
 
@@ -67,8 +68,7 @@ TEST(Merge, Simple)
     std::string file1(Support::datapath("las/utm15.las"));
     std::string file2(Support::datapath("las/utm17.las"));
     std::string outfile(Support::temppath("out.las"));
-    std::string cmd = appName() + " " + file1 + " " + file2 + " " + outfile +
-        " 2>/dev/null";
+    std::string cmd = appName() + " " + file1 + " " + file2 + " " + outfile;
 
     std::string output;
     EXPECT_EQ(Utils::run_shell_command(cmd, output), 0);
diff --git a/test/unit/apps/RandomTest.cpp b/test/unit/apps/RandomTest.cpp
new file mode 100644
index 0000000..f967fdd
--- /dev/null
+++ b/test/unit/apps/RandomTest.cpp
@@ -0,0 +1,78 @@
+/******************************************************************************
+* Copyright (c) 2015, Hobu Inc., (info at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. nor the names of contributors
+*       may be used to endorse or promote products derived from this
+*       software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <iostream>
+#include <string>
+
+#include <pdal/pdal_test_main.hpp>
+#include <pdal/util/FileUtils.hpp>
+#include <pdal/util/Utils.hpp>
+#include <pdal/PDALUtils.hpp>
+#include <LasReader.hpp>
+
+#include "Support.hpp"
+
+using namespace pdal;
+
+namespace
+{
+std::string appName()
+{
+    return Support::binpath("pdal random");
+}
+}
+
+TEST(Random, extra_ops)
+{
+    std::string outfile(Support::temppath("out.las"));
+
+    const std::string cmd = appName() +
+        " --count=100 --writers.las.minor_version=3 " + outfile;
+
+    FileUtils::deleteFile(outfile);
+    std::string output;
+    Utils::run_shell_command(cmd, output);
+
+    Options o;
+    o.add("filename", outfile);
+
+    PointTable t;
+
+    LasReader r;
+    r.setOptions(o);
+    r.prepare(t);
+
+    MetadataNode n = r.getMetadata();
+    EXPECT_EQ(n.findChild("minor_version").value<uint8_t>(), 3);
+}
+
diff --git a/test/unit/apps/pc2pcTest.cpp b/test/unit/apps/pc2pcTest.cpp
index 87aa433..66219fc 100644
--- a/test/unit/apps/pc2pcTest.cpp
+++ b/test/unit/apps/pc2pcTest.cpp
@@ -55,12 +55,13 @@ static std::string appName()
 TEST(pc2pcTest, pc2pcTest_test_no_input)
 {
     std::string cmd = appName();
+    cmd += " 2>&1"; // pdal outputs to both, stdout and stderr
 
     std::string output;
     int stat = Utils::run_shell_command(cmd, output);
     EXPECT_EQ(stat, 1);
 
-    const std::string expected = "Usage error: --input";
+    const std::string expected = "PDAL: Missing value for positional argument 'input'.";
     EXPECT_EQ(output.substr(0, expected.length()), expected);
 }
 #endif
@@ -74,7 +75,9 @@ TEST(pc2pcTest, pc2pcTest_test_common_opts)
     int stat = Utils::run_shell_command(cmd + " -h", output);
     EXPECT_EQ(stat, 0);
 
+    cmd = Support::binpath(Support::exename("pdal"));
     stat = Utils::run_shell_command(cmd + " --version", output);
+    EXPECT_TRUE(output.find("git-version") != std::string::npos);
     EXPECT_EQ(stat, 0);
 }
 
diff --git a/test/unit/apps/pcpipelineTest.cpp b/test/unit/apps/pcpipelineTest.cpp
index 88e94fd..7219a13 100644
--- a/test/unit/apps/pcpipelineTest.cpp
+++ b/test/unit/apps/pcpipelineTest.cpp
@@ -68,7 +68,7 @@ static void run_info(std::string const& pipeline)
 
     std::string output;
     std::string file(Support::configuredpath(pipeline));
-    int stat = pdal::Utils::run_shell_command(cmd + " -s < " + file, output);
+    int stat = pdal::Utils::run_shell_command(cmd + " " + file, output);
     EXPECT_EQ(0, stat);
     if (stat)
         std::cerr << output << std::endl;
@@ -97,8 +97,11 @@ TEST(pipelineBaseTest, common_opts)
     int stat = pdal::Utils::run_shell_command(cmd + " -h", output);
     EXPECT_EQ(stat, 0);
 
-    stat = pdal::Utils::run_shell_command(cmd + " --version", output);
-    EXPECT_EQ(stat, 0);
+    // We used to accept --version as a kernel option, rather than an
+    // application option.  Make sure it now throws an error.
+    stat = pdal::Utils::run_shell_command(cmd + " --version 2>&1", output);
+    EXPECT_TRUE(output.find("Unexpected argument") != std::string::npos);
+    EXPECT_NE(stat, 0);
 }
 
 TEST(pipelineBaseTest, drop_color)
@@ -107,7 +110,7 @@ TEST(pipelineBaseTest, drop_color)
 TEST(pipelineBaseTest, interpolate)
 { run_pipeline("pipeline/pipeline_interpolate.xml"); }
 
-TEST(pipelineBaseTest, DISABLED_metadata_reader)
+TEST(pipelineBaseTest, metadata_reader)
 { run_info("pipeline/pipeline_metadata_reader.xml"); }
 
 TEST(pipelineBaseTest, metadata_writer)
@@ -173,7 +176,7 @@ TEST(pipelineFiltersTest, crop_wkt_2d)
 TEST(pipelineFiltersTest, crop_wkt_2d_classification)
 { run_pipeline("filters/crop_wkt_2d_classification.xml"); }
 
-TEST(pipelineFiltersTest, DISABLED_decimate)
+TEST(pipelineFiltersTest, decimate)
 { run_pipeline("filters/decimate.xml"); }
 
 TEST(pipelineFiltersTest, ferry)
@@ -200,7 +203,7 @@ TEST(pipelineFiltersTest, range_classification)
 TEST(pipelineFiltersTest, reproject)
 { run_pipeline("filters/reproject.xml"); }
 
-TEST(pipelineFiltersTest, DISABLED_sort)
+TEST(pipelineFiltersTest, sort)
 { run_info("filters/sort.xml"); }
 
 TEST(pipelineFiltersTest, splitter)
@@ -212,7 +215,7 @@ TEST(pipelineFiltersTest, stats)
 TEST(pipelineHoleTest, crop)
 { run_pipeline("hole/crop.xml"); }
 
-TEST(pipelineIcebridgeTest, icebridge)
+TEST(pipelineIcebridgeTest, DISABLED_icebridge)
 { run_pipeline("icebridge/pipeline.xml"); }
 
 TEST(pipelineNitfTest, chipper)
diff --git a/test/unit/apps/pcpipelineTestJSON.cpp b/test/unit/apps/pcpipelineTestJSON.cpp
new file mode 100644
index 0000000..0766e10
--- /dev/null
+++ b/test/unit/apps/pcpipelineTestJSON.cpp
@@ -0,0 +1,234 @@
+/******************************************************************************
+* Copyright (c) 2011, Michael P. Gerlek (mpg at flaxen.com)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/pdal_test_main.hpp>
+
+#include <pdal/StageFactory.hpp>
+#include <pdal/util/FileUtils.hpp>
+#include <pdal/util/Utils.hpp>
+#include "Support.hpp"
+
+#include <iostream>
+#include <sstream>
+#include <string>
+
+static std::string appName()
+{
+    const std::string app = Support::binpath(Support::exename("pdal") + " pipeline");
+    return app;
+}
+
+// most pipelines (those with a writer) will be invoked via `pdal pipeline`
+static void run_pipeline(std::string const& pipeline)
+{
+    const std::string cmd = Support::binpath(Support::exename("pdal") + " pipeline");
+
+    std::string output;
+    std::string file(Support::configuredpath(pipeline));
+    int stat = pdal::Utils::run_shell_command(cmd + " " + file, output);
+    EXPECT_EQ(0, stat);
+    if (stat)
+        std::cerr << output << std::endl;
+}
+
+#ifdef PDAL_COMPILER_MSVC
+TEST(pipelineBaseTest, no_input)
+{
+    const std::string cmd = appName();
+
+    std::string output;
+    int stat = pdal::Utils::run_shell_command(cmd, output);
+    EXPECT_EQ(-1, stat);
+
+    const std::string expected = "usage: pdal pipeline [options] [input]";
+    EXPECT_EQ(expected, output.substr(0, expected.length()));
+}
+#endif
+
+
+TEST(pipelineBaseTest, common_opts)
+{
+    const std::string cmd = appName();
+
+    std::string output;
+    int stat = pdal::Utils::run_shell_command(cmd + " -h", output);
+    EXPECT_EQ(stat, 0);
+
+    // We used to accept --version as a kernel option, rather than an
+    // application option.  Make sure it now throws an error.
+    stat = pdal::Utils::run_shell_command(cmd + " --version 2>&1", output);
+    EXPECT_TRUE(output.find("Unexpected argument") != std::string::npos);
+    EXPECT_NE(stat, 0);
+}
+
+class json : public testing::TestWithParam<const char*> {};
+
+TEST_P(json, pipeline)
+{
+    run_pipeline(GetParam());
+}
+
+INSTANTIATE_TEST_CASE_P(base, json,
+                        testing::Values(
+                            // "autzen/autzen-interpolate.json",
+                            "pipeline/attribute.json",
+                            "pipeline/bpf2las.json",
+                            "pipeline/chipper.json",
+                            "pipeline/colorize-multi.json",
+                            "pipeline/colorize.json",
+                            "pipeline/crop-hole.json",
+                            "pipeline/crop_wkt.json",
+                            "pipeline/crop_wkt_2d.json",
+                            "pipeline/decimate.json",
+                            "pipeline/ferry-reproject.json",
+                            "pipeline/las2csv.json",
+                            "pipeline/las2geojson.json",
+                            "pipeline/las2space-delimited.json",
+                            "pipeline/merge.json",
+                            "pipeline/metadata_reader.json",
+                            "pipeline/metadata_writer.json",
+                            "pipeline/mississippi.json",
+                            "pipeline/mississippi_reverse.json",
+                            // "pipeline/qfit2las.json",
+                            "pipeline/range_z.json",
+                            "pipeline/range_z_classification.json",
+                            "pipeline/range_classification.json",
+                            "pipeline/sbet2txt.json",
+                            "pipeline/sort.json",
+                            "pipeline/splitter.json",
+                            "pipeline/stats.json"
+                        ));
+
+class jsonWithNITF : public testing::TestWithParam<const char*> {};
+
+TEST_P(jsonWithNITF, pipeline)
+{
+    pdal::StageFactory f;
+    pdal::Stage* s1 = f.createStage("readers.nitf");
+    pdal::Stage* s2 = f.createStage("writers.nitf");
+    if (s1 && s2)
+        run_pipeline(GetParam());
+    else
+        std::cerr << "WARNING: could not create readers.nitf or writers.nitf, skipping test" << std::endl;
+}
+
+INSTANTIATE_TEST_CASE_P(plugins, jsonWithNITF,
+                        testing::Values(
+                            "pipeline/bpf2nitf.json",
+                            "pipeline/las2nitf.json",
+                            "pipeline/las2nitf-2.json",
+                            "pipeline/las2nitf-crop-with-options.json",
+                            "pipeline/nitf2las.json",
+                            "pipeline/nitf-chipper.json"
+                        ));
+
+class jsonWithP2G : public testing::TestWithParam<const char*> {};
+
+TEST_P(jsonWithP2G, pipeline)
+{
+    pdal::StageFactory f;
+    pdal::Stage* s = f.createStage("writers.p2g");
+    if (s)
+        run_pipeline(GetParam());
+    else
+        std::cerr << "WARNING: could not create writers.p2g, skipping test" << std::endl;
+}
+
+INSTANTIATE_TEST_CASE_P(plugins, jsonWithP2G,
+                        testing::Values(
+                            "pipeline/p2g-writer.json"
+                        ));
+
+class jsonWithHexer : public testing::TestWithParam<const char*> {};
+
+TEST_P(jsonWithHexer, pipeline)
+{
+    pdal::StageFactory f;
+    pdal::Stage* s = f.createStage("filters.hexbin");
+    if (s)
+        run_pipeline(GetParam());
+    else
+        std::cerr << "WARNING: could not create filters.hexbin, skipping test" << std::endl;
+}
+
+INSTANTIATE_TEST_CASE_P(plugins, jsonWithHexer,
+                        testing::Values(
+                            "pipeline/hexbin-info.json",
+                            "pipeline/hexbin.json"
+                        ));
+
+class jsonWithLAZ : public testing::TestWithParam<const char*> {};
+
+TEST_P(jsonWithLAZ, pipeline)
+{
+#if defined PDAL_HAVE_LASZIP || defined PDAL_HAVE_LAZPERF
+    run_pipeline(GetParam());
+#else
+    std::cerr << "WARNING: no LAZ support, skipping test" << std::endl;
+#endif
+}
+
+INSTANTIATE_TEST_CASE_P(plugins, jsonWithLAZ,
+                        testing::Values(
+                            "pipeline/crop.json",
+                            "pipeline/crop-stats.json"
+                        ));
+
+// TEST(pipelineFiltersTest, DISABLED_crop_reproject)
+// { run_pipeline("filters/crop_reproject.xml"); }
+
+// TEST(pipelineIcebridgeTest, DISABLED_icebridge)
+// { run_pipeline("icebridge/pipeline.xml"); }
+
+// TEST(pipelineNitfTest, DISABLED_reader)
+// { run_info("nitf/reader.xml"); }
+
+// skip oracle tests for now
+
+// TEST(pipelineQfitTest, DISABLED_little_endian_conversion)
+// { run_pipeline("qfit/little-endian-conversion.xml"); }
+
+// TEST(pipelineQfitTest, DISABLED_pipeline)
+// { run_pipeline("qfit/pipeline.xml"); }
+
+// TEST(pipelineQfitTest, DISABLED_reader)
+// { run_info("qfit/reader.xml"); }
+
+// skip soci tests for now
+
+// TEST(pipelineSQLiteTest, DISABLED_reader)
+// { run_pipeline("io/sqlite-reader.xml"); }
+
+// TEST(pipelineSQLiteTest, DISABLED_writer)
+// { run_pipeline("io/sqlite-writer.xml"); }
diff --git a/test/unit/filters/AdditionalMergeTest.cpp b/test/unit/filters/AdditionalMergeTest.cpp
new file mode 100644
index 0000000..24ea12d
--- /dev/null
+++ b/test/unit/filters/AdditionalMergeTest.cpp
@@ -0,0 +1,542 @@
+/******************************************************************************
+* Copyright (c) 2016, Bradley J Chambers (brad.chambers at gmail.com)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/pdal_test_main.hpp>
+
+#include "Support.hpp"
+
+#include <pdal/PipelineManager.hpp>
+#include <pdal/util/FileUtils.hpp>
+#include <LasReader.hpp>
+#include <LasWriter.hpp>
+#include <DecimationFilter.hpp>
+#include <MergeFilter.hpp>
+
+using namespace pdal;
+
+TEST(AdditionalMergeTest, merge_filter_and_reader_with_manager)
+{
+    const char * outfile = "merge_filter_and_reader_with_manager.las";
+    FileUtils::deleteFile(outfile);
+
+    PipelineManager mgr;
+
+    Options optsR;
+    optsR.add("filename", Support::datapath("las/1.2-with-color.las"));
+    Stage& reader1 = mgr.addReader("readers.las");
+    reader1.setOptions(optsR);
+    Stage& reader2 = mgr.addReader("readers.las");
+    reader2.setOptions(optsR);
+
+    Options optsF;
+    optsF.add("step", 3);
+    optsF.add("offset", 1);
+    Stage& filter = mgr.addFilter("filters.decimation");
+    filter.setInput(reader1);
+    filter.setOptions(optsF);
+
+    Stage& merge = mgr.addFilter("filters.merge");
+    merge.setInput(filter);
+    merge.setInput(reader2);
+
+    Options optsW;
+    optsW.add("filename", outfile, "file to write to");
+    Stage& writer = mgr.addWriter("writers.las");
+    writer.setInput(merge);
+    writer.setOptions(optsW);
+
+    point_count_t np = mgr.execute();
+    EXPECT_EQ(1420U, np);
+
+    EXPECT_TRUE(!std::ifstream(outfile).fail());
+    FileUtils::deleteFile(outfile);
+}
+
+TEST(AdditionalMergeTest, merge_reader_and_filter_with_manager)
+{
+    const char * outfile = "merge_reader_and_filter_with_manager.las";
+    FileUtils::deleteFile(outfile);
+
+    PipelineManager mgr;
+
+    Options optsR;
+    optsR.add("filename", Support::datapath("las/1.2-with-color.las"));
+    Stage& reader1 = mgr.addReader("readers.las");
+    reader1.setOptions(optsR);
+    Stage& reader2 = mgr.addReader("readers.las");
+    reader2.setOptions(optsR);
+
+    Options optsF;
+    optsF.add("step", 3);
+    optsF.add("offset", 1);
+    Stage& filter = mgr.addFilter("filters.decimation");
+    filter.setInput(reader1);
+    filter.setOptions(optsF);
+
+    Stage& merge = mgr.addFilter("filters.merge");
+    merge.setInput(reader2);
+    merge.setInput(filter);
+
+    Options optsW;
+    optsW.add("filename", outfile, "file to write to");
+    Stage& writer = mgr.addWriter("writers.las");
+    writer.setInput(merge);
+    writer.setOptions(optsW);
+
+    point_count_t np = mgr.execute();
+    EXPECT_EQ(1420U, np);
+
+    EXPECT_TRUE(!std::ifstream(outfile).fail());
+    FileUtils::deleteFile(outfile);
+}
+
+TEST(AdditionalMergeTest, merge_filter_and_reader_without_manager)
+{
+    const char * outfile = "merge_filter_and_reader_without_manager.las";
+    FileUtils::deleteFile(outfile);
+
+    Options optsR;
+    optsR.add("filename", Support::datapath("las/1.2-with-color.las"));
+    LasReader reader1;
+    reader1.setOptions(optsR);
+    LasReader reader2;
+    reader2.setOptions(optsR);
+
+    Options optsF;
+    optsF.add("step", 3);
+    optsF.add("offset", 1);
+    DecimationFilter filter;
+    filter.setInput(reader1);
+    filter.setOptions(optsF);
+
+    MergeFilter merge;
+    merge.setInput(filter);
+    merge.setInput(reader2);
+
+    Options optsW;
+    optsW.add("filename", outfile, "file to write to");
+    LasWriter writer;
+    writer.setInput(merge);
+    writer.setOptions(optsW);
+
+    PointTable table;
+    writer.prepare(table);
+
+    PointViewSet vs = writer.execute(table);
+    EXPECT_EQ(1u, vs.size());
+    point_count_t np = (*vs.begin())->size();
+    EXPECT_EQ(1420U, np);
+
+    EXPECT_TRUE(!std::ifstream(outfile).fail());
+    FileUtils::deleteFile(outfile);
+}
+
+TEST(AdditionalMergeTest, merge_reader_and_filter_without_manager)
+{
+    const char * outfile = "merge_reader_and_filter_without_manager.las";
+    FileUtils::deleteFile(outfile);
+
+    Options optsR;
+    optsR.add("filename", Support::datapath("las/1.2-with-color.las"));
+    LasReader reader1;
+    reader1.setOptions(optsR);
+    LasReader reader2;
+    reader2.setOptions(optsR);
+
+    Options optsF;
+    optsF.add("step", 3);
+    optsF.add("offset", 1);
+    DecimationFilter filter;
+    filter.setInput(reader1);
+    filter.setOptions(optsF);
+
+    MergeFilter merge;
+    merge.setInput(reader2);
+    merge.setInput(filter);
+
+    Options optsW;
+    optsW.add("filename", outfile, "file to write to");
+    LasWriter writer;
+    writer.setInput(merge);
+    writer.setOptions(optsW);
+
+    PointTable table;
+    writer.prepare(table);
+
+    PointViewSet vs = writer.execute(table);
+    EXPECT_EQ(1u, vs.size());
+    point_count_t np = (*vs.begin())->size();
+    EXPECT_EQ(1420U, np);
+
+    EXPECT_TRUE(!std::ifstream(outfile).fail());
+    FileUtils::deleteFile(outfile);
+}
+
+TEST(AdditionalMergeTest, filter_and_reader_writer_inputs_with_manager)
+{
+    const char * outfile = "filter_and_reader_writer_inputs_with_manager.las";
+    FileUtils::deleteFile(outfile);
+
+    PipelineManager mgr;
+
+    Options optsR;
+    optsR.add("filename", Support::datapath("las/1.2-with-color.las"));
+    Stage& reader1 = mgr.addReader("readers.las");
+    reader1.setOptions(optsR);
+    Stage& reader2 = mgr.addReader("readers.las");
+    reader2.setOptions(optsR);
+
+    Options optsF;
+    optsF.add("step", 3);
+    optsF.add("offset", 1);
+    Stage& filter = mgr.addFilter("filters.decimation");
+    filter.setInput(reader1);
+    filter.setOptions(optsF);
+
+    Options optsW;
+    optsW.add("filename", outfile, "file to write to");
+    Stage& writer = mgr.addWriter("writers.las");
+    writer.setInput(filter);
+    writer.setInput(reader2);
+    writer.setOptions(optsW);
+
+    point_count_t np = mgr.execute();
+    EXPECT_EQ(1420U, np);
+
+    EXPECT_TRUE(!std::ifstream(outfile).fail());
+    FileUtils::deleteFile(outfile);
+}
+
+TEST(AdditionalMergeTest, reader_and_filter_writer_inputs_with_manager)
+{
+    const char * outfile = "reader_and_filter_writer_inputs_with_manager.las";
+    FileUtils::deleteFile(outfile);
+
+    PipelineManager mgr;
+
+    Options optsR;
+    optsR.add("filename", Support::datapath("las/1.2-with-color.las"));
+    Stage& reader1 = mgr.addReader("readers.las");
+    reader1.setOptions(optsR);
+    Stage& reader2 = mgr.addReader("readers.las");
+    reader2.setOptions(optsR);
+
+    Options optsF;
+    optsF.add("step", 3);
+    optsF.add("offset", 1);
+    Stage& filter = mgr.addFilter("filters.decimation");
+    filter.setInput(reader1);
+    filter.setOptions(optsF);
+
+    Options optsW;
+    optsW.add("filename", outfile, "file to write to");
+    Stage& writer = mgr.addWriter("writers.las");
+    writer.setInput(reader2);
+    writer.setInput(filter);
+    writer.setOptions(optsW);
+
+    point_count_t np = mgr.execute();
+    EXPECT_EQ(1420U, np);
+
+    EXPECT_TRUE(!std::ifstream(outfile).fail());
+    FileUtils::deleteFile(outfile);
+}
+
+TEST(AdditionalMergeTest, filter_and_reader_writer_inputs_without_manager)
+{
+    const char * outfile = "filter_and_reader_writer_inputs_without_manager.las";
+    FileUtils::deleteFile(outfile);
+
+    Options optsR;
+    optsR.add("filename", Support::datapath("las/1.2-with-color.las"));
+    LasReader reader1;
+    reader1.setOptions(optsR);
+    LasReader reader2;
+    reader2.setOptions(optsR);
+
+    Options optsF;
+    optsF.add("step", 3);
+    optsF.add("offset", 1);
+    DecimationFilter filter;
+    filter.setInput(reader1);
+    filter.setOptions(optsF);
+
+    Options optsW;
+    optsW.add("filename", outfile, "file to write to");
+    LasWriter writer;
+    writer.setInput(filter);
+    writer.setInput(reader2);
+    writer.setOptions(optsW);
+
+    PointTable table;
+    writer.prepare(table);
+
+    PointViewSet vs = writer.execute(table);
+    EXPECT_EQ(2u, vs.size());
+    point_count_t np = 0;
+    for (auto const& view : vs)
+    {
+        np += view->size();
+    }
+    EXPECT_EQ(1420U, np);
+
+    EXPECT_TRUE(!std::ifstream(outfile).fail());
+    FileUtils::deleteFile(outfile);
+}
+
+TEST(AdditionalMergeTest, reader_and_filter_writer_inputs_without_manager)
+{
+    const char * outfile = "reader_and_filter_writer_inputs_without_manager.las";
+    FileUtils::deleteFile(outfile);
+
+    Options optsR;
+    optsR.add("filename", Support::datapath("las/1.2-with-color.las"));
+    LasReader reader1;
+    reader1.setOptions(optsR);
+    LasReader reader2;
+    reader2.setOptions(optsR);
+
+    Options optsF;
+    optsF.add("step", 3);
+    optsF.add("offset", 1);
+    DecimationFilter filter;
+    filter.setInput(reader1);
+    filter.setOptions(optsF);
+
+    Options optsW;
+    optsW.add("filename", outfile, "file to write to");
+    LasWriter writer;
+    writer.setInput(reader2);
+    writer.setInput(filter);
+    writer.setOptions(optsW);
+
+    PointTable table;
+    writer.prepare(table);
+
+    PointViewSet vs = writer.execute(table);
+    EXPECT_EQ(2u, vs.size());
+    point_count_t np = 0;
+    for (auto const& view : vs)
+    {
+        np += view->size();
+    }
+    EXPECT_EQ(1420U, np);
+
+    EXPECT_TRUE(!std::ifstream(outfile).fail());
+    FileUtils::deleteFile(outfile);
+}
+
+TEST(AdditionalMergeTest, merge_two_filters_with_manager)
+{
+    const char * outfile = "merge_two_filters_with_manager.las";
+    FileUtils::deleteFile(outfile);
+
+    PipelineManager mgr;
+
+    Options optsR;
+    optsR.add("filename", Support::datapath("las/1.2-with-color.las"));
+    Stage& reader1 = mgr.addReader("readers.las");
+    reader1.setOptions(optsR);
+    Stage& reader2 = mgr.addReader("readers.las");
+    reader2.setOptions(optsR);
+
+    Options optsF1;
+    optsF1.add("step", 3);
+    optsF1.add("offset", 1);
+    Stage& filter1 = mgr.addFilter("filters.decimation");
+    filter1.setInput(reader1);
+    filter1.setOptions(optsF1);
+
+    Options optsF2;
+    optsF2.add("step", 2);
+    optsF2.add("offset", 1);
+    Stage& filter2 = mgr.addFilter("filters.decimation");
+    filter2.setInput(reader2);
+    filter2.setOptions(optsF2);
+
+    Stage& merge = mgr.addFilter("filters.merge");
+    merge.setInput(filter1);
+    merge.setInput(filter2);
+
+    Options optsW;
+    optsW.add("filename", outfile, "file to write to");
+    Stage& writer = mgr.addWriter("writers.las");
+    writer.setInput(merge);
+    writer.setOptions(optsW);
+
+    point_count_t np = mgr.execute();
+    EXPECT_EQ(887U, np);
+
+    EXPECT_TRUE(!std::ifstream(outfile).fail());
+    FileUtils::deleteFile(outfile);
+}
+
+TEST(AdditionalMergeTest, merge_two_filters_without_manager)
+{
+    const char * outfile = "merge_two_filters_without_manager.las";
+    FileUtils::deleteFile(outfile);
+
+    Options optsR;
+    optsR.add("filename", Support::datapath("las/1.2-with-color.las"));
+    LasReader reader1;
+    reader1.setOptions(optsR);
+    LasReader reader2;
+    reader2.setOptions(optsR);
+
+    Options optsF1;
+    optsF1.add("step", 3);
+    optsF1.add("offset", 1);
+    DecimationFilter filter1;
+    filter1.setInput(reader1);
+    filter1.setOptions(optsF1);
+
+    Options optsF2;
+    optsF2.add("step", 2);
+    optsF2.add("offset", 1);
+    DecimationFilter filter2;
+    filter2.setInput(reader2);
+    filter2.setOptions(optsF2);
+
+    MergeFilter merge;
+    merge.setInput(filter1);
+    merge.setInput(filter2);
+
+    Options optsW;
+    optsW.add("filename", outfile, "file to write to");
+    LasWriter writer;
+    writer.setInput(merge);
+    writer.setOptions(optsW);
+
+    PointTable table;
+    writer.prepare(table);
+
+    PointViewSet vs = writer.execute(table);
+    EXPECT_EQ(1u, vs.size());
+    point_count_t np = (*vs.begin())->size();
+    EXPECT_EQ(887U, np);
+
+    EXPECT_TRUE(!std::ifstream(outfile).fail());
+    FileUtils::deleteFile(outfile);
+}
+
+TEST(AdditionalMergeTest, two_filters_writer_inputs_with_manager)
+{
+    const char * outfile = "two_filters_writer_inputs_with_manager.las";
+    FileUtils::deleteFile(outfile);
+
+    PipelineManager mgr;
+
+    Options optsR;
+    optsR.add("filename", Support::datapath("las/1.2-with-color.las"));
+    Stage& reader1 = mgr.addReader("readers.las");
+    reader1.setOptions(optsR);
+    Stage& reader2 = mgr.addReader("readers.las");
+    reader2.setOptions(optsR);
+
+    Options optsF1;
+    optsF1.add("step", 3);
+    optsF1.add("offset", 1);
+    Stage& filter1 = mgr.addFilter("filters.decimation");
+    filter1.setInput(reader1);
+    filter1.setOptions(optsF1);
+
+    Options optsF2;
+    optsF2.add("step", 2);
+    optsF2.add("offset", 1);
+    Stage& filter2 = mgr.addFilter("filters.decimation");
+    filter2.setInput(reader2);
+    filter2.setOptions(optsF2);
+
+    Options optsW;
+    optsW.add("filename", outfile, "file to write to");
+    Stage& writer = mgr.addWriter("writers.las");
+    writer.setInput(filter1);
+    writer.setInput(filter2);
+    writer.setOptions(optsW);
+
+    point_count_t np = mgr.execute();
+    EXPECT_EQ(887U, np);
+
+    EXPECT_TRUE(!std::ifstream(outfile).fail());
+    FileUtils::deleteFile(outfile);
+}
+
+TEST(AdditionalMergeTest, two_filters_writer_inputs_without_manager)
+{
+    const char * outfile = "two_filters_writer_inputs_without_manager.las";
+    FileUtils::deleteFile(outfile);
+
+    Options optsR;
+    optsR.add("filename", Support::datapath("las/1.2-with-color.las"));
+    LasReader reader1;
+    reader1.setOptions(optsR);
+    LasReader reader2;
+    reader2.setOptions(optsR);
+
+    Options optsF1;
+    optsF1.add("step", 3);
+    optsF1.add("offset", 1);
+    DecimationFilter filter1;
+    filter1.setInput(reader1);
+    filter1.setOptions(optsF1);
+
+    Options optsF2;
+    optsF2.add("step", 2);
+    optsF2.add("offset", 1);
+    DecimationFilter filter2;
+    filter2.setInput(reader2);
+    filter2.setOptions(optsF2);
+
+    Options optsW;
+    optsW.add("filename", outfile, "file to write to");
+    LasWriter writer;
+    writer.setInput(filter1);
+    writer.setInput(filter2);
+    writer.setOptions(optsW);
+
+    PointTable table;
+    writer.prepare(table);
+
+    PointViewSet vs = writer.execute(table);
+    EXPECT_EQ(2u, vs.size());
+    point_count_t np = 0;
+    for (auto const& view : vs)
+    {
+        np += view->size();
+    }
+    EXPECT_EQ(887U, np);
+
+    EXPECT_TRUE(!std::ifstream(outfile).fail());
+    FileUtils::deleteFile(outfile);
+}
diff --git a/test/unit/filters/AttributeFilterTest.cpp b/test/unit/filters/AttributeFilterTest.cpp
new file mode 100644
index 0000000..6eab18e
--- /dev/null
+++ b/test/unit/filters/AttributeFilterTest.cpp
@@ -0,0 +1,186 @@
+/******************************************************************************
+* Copyright (c) 2015, Hobu Inc. (info at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/pdal_test_main.hpp>
+
+#include <pdal/StageFactory.hpp>
+#include <pdal/util/FileUtils.hpp>
+
+#include "Support.hpp"
+
+using namespace pdal;
+
+TEST(AttributeFilterTest, value)
+{
+    Options ro;
+    ro.add("filename", Support::datapath("autzen/autzen-dd.las"));
+
+    StageFactory factory;
+    Stage& r = *(factory.createStage("readers.las"));
+    r.setOptions(ro);
+
+    Options fo;
+    fo.add("dimension", "X");
+    fo.add("value", 27.5);
+
+    Stage& f = *(factory.createStage("filters.attribute"));
+    f.setInput(r);
+    f.setOptions(fo);
+
+    std::string tempfile(Support::temppath("out.las"));
+
+    Options wo;
+    wo.add("filename", tempfile);
+    Stage& w = *(factory.createStage("writers.las"));
+    w.setInput(f);
+    w.setOptions(wo);
+
+    FileUtils::deleteFile(tempfile);
+    PointTable t1;
+    w.prepare(t1);
+    w.execute(t1);
+
+    Options testOptions;
+    testOptions.add("filename", tempfile);
+
+    Stage& test = *(factory.createStage("readers.las"));
+    test.setOptions(testOptions);
+
+    PointTable t2;
+    test.prepare(t2);
+    PointViewSet s = test.execute(t2);
+    PointViewPtr v = *s.begin();
+    for (PointId i = 0; i < v->size(); ++i)
+        EXPECT_DOUBLE_EQ(v->getFieldAs<double>(Dimension::Id::X, i), 27.5);
+}
+
+TEST(AttributeFilterTest, datasource)
+{
+    Options ro;
+    ro.add("filename", Support::datapath("autzen/autzen-dd.las"));
+
+    StageFactory factory;
+    Stage& r = *(factory.createStage("readers.las"));
+    r.setOptions(ro);
+
+    Options fo;
+    fo.add("dimension", "Classification");
+    fo.add("column", "cls");
+    fo.add("datasource", Support::datapath("autzen/attributes.shp"));
+
+    Stage& f = *(factory.createStage("filters.attribute"));
+    f.setInput(r);
+    f.setOptions(fo);
+
+    std::string tempfile(Support::temppath("out.las"));
+
+    Options wo;
+    wo.add("filename", tempfile);
+    wo.add("forward", "all");
+    Stage& w = *(factory.createStage("writers.las"));
+    w.setInput(f);
+    w.setOptions(wo);
+
+    FileUtils::deleteFile(tempfile);
+    PointTable t;
+    w.prepare(t);
+    w.execute(t);
+
+//
+//
+    Options testOptions;
+    testOptions.add("filename", tempfile);
+
+    Stage& test = *(factory.createStage("readers.las"));
+    test.setOptions(testOptions);
+
+    Stage& c = *(factory.createStage("filters.crop"));
+    c.setInput(test);
+
+    Options o1;
+    o1.add("polygon", "POLYGON ((-123.067019000727967 44.059524946819884,-123.066697831944637 44.059771500882199,-123.065494970755537 44.059838504937517,-123.064074882074451 44.059742872480356,-123.063707784110264 44.059184772926969,-123.06401206144227 44.05752667418929,-123.065925935478475 44.057786669839672,-123.065745673821624 44.058221493390228,-123.06633379431868 44.058264073197797,-123.066237450902648 44.058593303895073,-123.06633104847343 44.058966114097124,-123.06667192031054 44. [...]
+
+    c.setOptions(o1);
+
+    PointTable t1;
+    c.prepare(t1);
+    PointViewSet s = c.execute(t1);
+    PointViewPtr v = *s.begin();
+    for (PointId i = 0; i < v->size(); ++i)
+        EXPECT_EQ(v->getFieldAs<int>(Dimension::Id::Classification, i), 2);
+
+    Options o2;
+    o2.add("polygon", "POLYGON ((-123.064404672110015 44.062248205780641,-123.063001791092177 44.062295757390288,-123.062938948566199 44.061866413306625,-123.063711529699802 44.061825083575727,-123.062903757506561 44.060798284876931,-123.0634590922878 44.06084959530147,-123.063939134831102 44.061205726019097,-123.064707560079256 44.061834553141757,-123.064404672110015 44.062248205780641))");
+    c.setOptions(o2);
+
+    PointTable t2;
+    c.prepare(t2);
+    s = c.execute(t2);
+    v = *s.begin();
+    for (PointId i = 0; i < v->size(); ++i)
+        EXPECT_EQ(v->getFieldAs<int>(Dimension::Id::Classification, i), 5);
+
+    Options o3;
+    o3.add("polygon", "POLYGON ((-123.071105494548775 44.059121603563895,-123.070160265697027 44.059007342229378,-123.070431650409773 44.058379004056327,-123.071225617617372 44.058576450660659,-123.071105494548775 44.059121603563895))");
+    c.setOptions(o3);
+
+    PointTable t3;
+    c.prepare(t3);
+    s = c.execute(t3);
+    v = *s.begin();
+    for (PointId i = 0; i < v->size(); ++i)
+        EXPECT_EQ(v->getFieldAs<int>(Dimension::Id::Classification, i), 6);
+
+    Options o4;
+    o4.add("polygon", "POLYGON ((-123.06887558672102 44.059227793751305,-123.068425255931515 44.059301773132752,-123.067936238335534 44.059248990941661,-123.06749590912527 44.059043544671049,-123.06710185170931 44.058629650191868,-123.067099413306224 44.058063335596437,-123.067333190514816 44.057587417330502,-123.067852567837207 44.057320435256116,-123.068290450314009 44.057214830538491,-123.068899280712444 44.057225021409202,-123.069338909397359 44.057414523826182,-123.069655618140771 4 [...]
+    c.setOptions(o4);
+
+    PointTable t4;
+    c.prepare(t4);
+    s = c.execute(t4);
+    v = *s.begin();
+    for (PointId i = 0; i < v->size(); ++i)
+        EXPECT_EQ(v->getFieldAs<int>(Dimension::Id::Classification, i), 6);
+
+    Options o5;
+    o5.add("polygon", "POLYGON ((-123.071871740947586 44.058426242457685,-123.070376025800414 44.058117017731242,-123.07060216253906 44.057465769662898,-123.072144836409578 44.057837746292243,-123.071871740947586 44.058426242457685))");
+    c.setOptions(o5);
+
+    PointTable t5;
+    c.prepare(t5);
+    s = c.execute(t5);
+    v = *s.begin();
+    for (PointId i = 0; i < v->size(); ++i)
+        EXPECT_EQ(v->getFieldAs<int>(Dimension::Id::Classification, i), 6);
+}
diff --git a/test/unit/filters/ColorizationFilterTest.cpp b/test/unit/filters/ColorizationFilterTest.cpp
index 926fb3c..2370b3d 100644
--- a/test/unit/filters/ColorizationFilterTest.cpp
+++ b/test/unit/filters/ColorizationFilterTest.cpp
@@ -36,6 +36,7 @@
 
 #include <LasReader.hpp>
 #include <ColorizationFilter.hpp>
+#include <StreamCallbackFilter.hpp>
 #include <pdal/PointView.hpp>
 
 #include "Support.hpp"
@@ -66,12 +67,10 @@ void testFile(const Options& filterOps, StringList dimNames,
     EXPECT_EQ(viewSet.size(), 1u);
     PointViewPtr view = *viewSet.begin();
 
-    uint16_t r = view->getFieldAs<uint16_t>(
-        table.layout()->findDim(dimNames[0]), 0);
-    uint16_t g = view->getFieldAs<uint16_t>(
-        table.layout()->findDim(dimNames[1]), 0);
-    uint16_t b = view->getFieldAs<uint16_t>(
-        table.layout()->findDim(dimNames[2]), 0);
+    PointLayoutPtr layout = table.layout();
+    uint16_t r = view->getFieldAs<uint16_t>(layout->findDim(dimNames[0]), 0);
+    uint16_t g = view->getFieldAs<uint16_t>(layout->findDim(dimNames[1]), 0);
+    uint16_t b = view->getFieldAs<uint16_t>(layout->findDim(dimNames[2]), 0);
 
     EXPECT_EQ(r, expectedRed);
     EXPECT_EQ(g, expectedGreen);
@@ -79,6 +78,52 @@ void testFile(const Options& filterOps, StringList dimNames,
     EXPECT_EQ(b, expectedBlue);
 }
 
+void testFileStreamed(const Options& filterOps, StringList dimNames,
+    uint16_t expectedRed, uint16_t expectedGreen, uint16_t expectedBlue)
+{
+    Options readerOps;
+    readerOps.add("filename",
+        Support::datapath("autzen/autzen-point-format-3.las"));
+
+    LasReader reader;
+    reader.setOptions(readerOps);
+
+    ColorizationFilter filter;
+    filter.setOptions(filterOps);
+    filter.setInput(reader);
+
+    StreamCallbackFilter f2;
+    f2.setInput(filter);
+
+    FixedPointTable table(50);
+
+    f2.prepare(table);
+
+    PointLayoutPtr layout = table.layout();
+    Dimension::Id::Enum id1 = layout->findDim(dimNames[0]);
+    Dimension::Id::Enum id2 = layout->findDim(dimNames[1]);
+    Dimension::Id::Enum id3 = layout->findDim(dimNames[2]);
+
+    auto cb = [expectedRed, expectedGreen, expectedBlue, id1, id2, id3]
+        (PointRef& point)
+    {
+        static bool done = false;
+
+        if (done)
+            return false;
+
+        EXPECT_EQ(expectedRed, point.getFieldAs<uint16_t>(id1));
+        EXPECT_EQ(expectedGreen, point.getFieldAs<uint16_t>(id2));
+        EXPECT_EQ(expectedBlue, point.getFieldAs<uint16_t>(id3));
+        done = true;
+
+        return true;
+    };
+
+    f2.setCallback(cb);
+    f2.execute(table);
+}
+
 } // unnamed namespace
 
 // Test using the standard dimensions.
@@ -95,6 +140,7 @@ TEST(ColorizationFilterTest, test1)
     dims.push_back("Green");
     dims.push_back("Blue");
     testFile(options, dims, 210, 205, 47175);
+    testFileStreamed(options, dims, 210, 205, 47175);
 }
 
 // Allow use of default dimensions.
@@ -118,7 +164,23 @@ TEST(ColorizationFilterTest, test3)
 {
     Options options;
 
-    options.add("dimensions", "Foo:1,Bar:2,Baz:3:255");
+    options.add("dimensions", "Foo:1,Bar_:2,Baz2:3:255");
+    options.add("raster", Support::datapath("autzen/autzen.jpg"),
+        "raster to read");
+
+    StringList dims;
+    dims.push_back("Foo");
+    dims.push_back("Bar_");
+    dims.push_back("Baz2");
+    testFile(options, dims, 210, 205, 47175);
+}
+
+// Check that dimension creation works.
+TEST(ColorizationFilterTest, test4)
+{
+    Options options;
+
+    options.add("dimensions", "Foo&:1,Bar:2,Baz:3:255");
     options.add("raster", Support::datapath("autzen/autzen.jpg"),
         "raster to read");
 
@@ -126,6 +188,7 @@ TEST(ColorizationFilterTest, test3)
     dims.push_back("Foo");
     dims.push_back("Bar");
     dims.push_back("Baz");
-    testFile(options, dims, 210, 205, 47175);
+    EXPECT_THROW(testFile(options, dims, 210, 205, 47175), pdal_error);
 }
 
+
diff --git a/test/unit/filters/CropFilterTest.cpp b/test/unit/filters/CropFilterTest.cpp
index 4740528..144abe7 100644
--- a/test/unit/filters/CropFilterTest.cpp
+++ b/test/unit/filters/CropFilterTest.cpp
@@ -37,11 +37,13 @@
 #include <pdal/util/FileUtils.hpp>
 #include <pdal/PointView.hpp>
 #include <pdal/StageFactory.hpp>
+#include <BufferReader.hpp>
 #include <CropFilter.hpp>
 #include <FauxReader.hpp>
 #include <LasReader.hpp>
 #include <ReprojectionFilter.hpp>
 #include <StatsFilter.hpp>
+#include <StreamCallbackFilter.hpp>
 #include "Support.hpp"
 
 using namespace pdal;
@@ -49,8 +51,8 @@ using namespace pdal;
 TEST(CropFilterTest, create)
 {
     StageFactory f;
-    std::unique_ptr<Stage> filter(f.createStage("filters.crop"));
-    EXPECT_TRUE(filter.get());
+    Stage* filter(f.createStage("filters.crop"));
+    EXPECT_TRUE(filter);
 }
 
 TEST(CropFilterTest, test_crop)
@@ -117,7 +119,6 @@ TEST(CropFilterTest, test_crop)
 
 TEST(CropFilterTest, test_crop_polygon)
 {
-#ifdef PDAL_HAVE_GEOS
     Options ops1;
     ops1.add("filename", Support::datapath("las/1.2-with-color.las"));
     LasReader reader;
@@ -151,12 +152,10 @@ TEST(CropFilterTest, test_crop_polygon)
     EXPECT_EQ(view->size(), 47u);
 
     FileUtils::closeFile(wkt_stream);
-#endif
 }
 
 TEST(CropFilterTest, test_crop_polygon_reprojection)
 {
-#ifdef PDAL_HAVE_GEOS
     Options options;
 
     options.add("spatialreference", Support::datapath("autzen/autzen-srs.wkt"));
@@ -197,29 +196,160 @@ TEST(CropFilterTest, test_crop_polygon_reprojection)
     EXPECT_EQ(view->size(), 47u);
 
     FileUtils::closeFile(wkt_stream);
-#endif
 }
 
-/**
 TEST(CropFilterTest, multibounds)
 {
     using namespace Dimension;
 
     PointTable table;
-    table.layout->registerDim(Id::X);
-    table.layout->registerDim(Id::Y);
-    table.layout->registerDim(Id::Z);
+    table.layout()->registerDim(Id::X);
+    table.layout()->registerDim(Id::Y);
+    table.layout()->registerDim(Id::Z);
 
-    PointView view(table);
-    view.setField(Id::X, 0, 1);
-    view.setField(Id::Y, 0, 1);
+    PointViewPtr view(new PointView(table));
+    view->setField(Id::X, 0, 2);
+    view->setField(Id::Y, 0, 2);
+
+    view->setField(Id::X, 1, 4);
+    view->setField(Id::Y, 1, 2);
+
+    view->setField(Id::X, 2, 6);
+    view->setField(Id::Y, 2, 2);
+
+    view->setField(Id::X, 3, 8);
+    view->setField(Id::Y, 3, 2);
+
+    view->setField(Id::X, 4, 10);
+    view->setField(Id::Y, 4, 2);
+
+    view->setField(Id::X, 5, 12);
+    view->setField(Id::Y, 5, 2);
+
+    BufferReader r;
+    r.addView(view);
+
+    CropFilter crop;
+    Options o;
+    o.add("bounds", "([1, 3], [1, 3])");
+    o.add("bounds", "([5, 7], [1, 3])");
+    o.add("polygon", "POLYGON ((9 1, 11 1, 11 3, 9 3, 9 1))");
+    crop.setInput(r);
+    crop.setOptions(o);
+
+    crop.prepare(table);
+    PointViewSet s = crop.execute(table);
+    // Make sure we get three views, one with the point 2, 2, one with the
+    // point 6, 2 and one with 10,2.
+    EXPECT_EQ(s.size(), 3u);
+    static int total_cnt = 0;
+    for (auto v : s)
+    {
+        int cnt = 0;
+        EXPECT_EQ(v->size(), 1u);
+        double x = v->getFieldAs<double>(Dimension::Id::X, 0);
+        double y = v->getFieldAs<double>(Dimension::Id::Y, 0);
+        if (x == 2 && y == 2)
+            cnt = 1;
+        if (x == 6 && y == 2)
+            cnt = 2;
+        if (x == 10 && y == 2)
+            cnt = 4;
+        EXPECT_TRUE(cnt > 0);
+        total_cnt += cnt;
+    }
+    EXPECT_EQ(total_cnt, 7);
+}
 
-    view.setField(Id::X, 1, 2);
-    view.setField(Id::Y, 1, 6);
+TEST(CropFilterTest, stream)
+{
+    using namespace Dimension;
 
-    view.setField(Id::X, 2, 4);
-    view.setField(Id::Y, 2, 4);
+    FixedPointTable table(2);
+    table.layout()->registerDim(Id::X);
+    table.layout()->registerDim(Id::Y);
+    table.layout()->registerDim(Id::Z);
+
+    class StreamReader : public Reader
+    {
+    public:
+        std::string getName() const
+            { return "readers.stream"; }
+        bool processOne(PointRef& point)
+        {
+            static int i = 0;
+
+            if (i == 0)
+            {
+                point.setField(Id::X, 2);
+                point.setField(Id::Y, 2);
+            }
+            else if (i == 1)
+            {
+                point.setField(Id::X, 6);
+                point.setField(Id::Y, 2);
+            }
+            else if (i == 2)
+            {
+                point.setField(Id::X, 8);
+                point.setField(Id::Y, 2);
+            }
+            else if (i == 3)
+            {
+                point.setField(Id::X, 10);
+                point.setField(Id::Y, 2);
+            }
+            else if (i == 4)
+            {
+                point.setField(Id::X, 12);
+                point.setField(Id::Y, 2);
+            }
+            else
+                return false;
+            i++;
+            return true;
+        }
+    };
+
+    StreamReader r;
 
-    BOX3D p
+    CropFilter crop;
+    Options o;
+    o.add("bounds", "([1, 3], [1, 3])");
+    o.add("bounds", "([5, 7], [1, 3])");
+    o.add("polygon", "POLYGON ((9 1, 11 1, 11 3, 9 3, 9 1))");
+    crop.setInput(r);
+    crop.setOptions(o);
+
+    auto cb = [](PointRef& point)
+    {
+        static int i = 0;
+        if (i == 0)
+        {
+            EXPECT_EQ(point.getFieldAs<int>(Id::X), 2);
+            EXPECT_EQ(point.getFieldAs<int>(Id::Y), 2);
+        }
+        if (i == 1)
+        {
+            EXPECT_EQ(point.getFieldAs<int>(Id::X), 6);
+            EXPECT_EQ(point.getFieldAs<int>(Id::Y), 2);
+        }
+        if (i == 2)
+        {
+            EXPECT_EQ(point.getFieldAs<int>(Id::X), 10);
+            EXPECT_EQ(point.getFieldAs<int>(Id::Y), 2);
+        }
+        else
+            return false;
+        i++;
+        return true;
+    };
+
+    StreamCallbackFilter f;
+    f.setCallback(cb);
+    f.setInput(crop);
+
+    f.prepare(table);
+    f.execute(table);
 }
-**/
+
diff --git a/test/unit/filters/DecimationFilterTest.cpp b/test/unit/filters/DecimationFilterTest.cpp
index 2b267cb..d4b5354 100644
--- a/test/unit/filters/DecimationFilterTest.cpp
+++ b/test/unit/filters/DecimationFilterTest.cpp
@@ -38,14 +38,15 @@
 #include <pdal/StageFactory.hpp>
 #include <DecimationFilter.hpp>
 #include <FauxReader.hpp>
+#include <StreamCallbackFilter.hpp>
 
 using namespace pdal;
 
 TEST(DecimationFilterTest, create)
 {
     StageFactory f;
-    std::unique_ptr<Stage> filter(f.createStage("filters.decimation"));
-    EXPECT_TRUE(filter.get());
+    Stage* filter(f.createStage("filters.decimation"));
+    EXPECT_TRUE(filter);
 }
 
 TEST(DecimationFilterTest, DecimationFilterTest_test1)
@@ -82,3 +83,46 @@ TEST(DecimationFilterTest, DecimationFilterTest_test1)
     EXPECT_EQ(t1, 10u);
     EXPECT_EQ(t2, 20u);
 }
+
+TEST(DecimationFilterTest, stream)
+{
+    BOX3D srcBounds(0.0, 0.0, 0.0, 99.0, 99.0, 99.0);
+
+    Options ops;
+    ops.add("bounds", srcBounds);
+    ops.add("mode", "ramp");
+    ops.add("num_points", 100);
+    FauxReader reader;
+    reader.setOptions(ops);
+
+    Options decimationOps;
+    decimationOps.add("step", 10);
+    decimationOps.add("offset", 10);
+    decimationOps.add("limit", 90);
+
+    DecimationFilter dec;
+    dec.setOptions(decimationOps);
+    dec.setInput(reader);
+
+    StreamCallbackFilter filter;
+
+    auto cb = [](PointRef& point)
+    {
+        static int i = 0;
+        int x = point.getFieldAs<int>(Dimension::Id::X);
+        int y = point.getFieldAs<int>(Dimension::Id::Y);
+        EXPECT_EQ(x, (i + 1) * 10);
+        EXPECT_EQ(y, (i + 1) * 10);
+        EXPECT_TRUE(i < 8);
+        i++;
+        return true;
+    };
+    filter.setCallback(cb);
+    filter.setInput(dec);
+
+    FixedPointTable t(2);
+
+    filter.prepare(t);
+    filter.execute(t);
+}
+
diff --git a/test/unit/filters/FerryFilterTest.cpp b/test/unit/filters/FerryFilterTest.cpp
index 442941f..7670b46 100644
--- a/test/unit/filters/FerryFilterTest.cpp
+++ b/test/unit/filters/FerryFilterTest.cpp
@@ -37,9 +37,10 @@
 #include <pdal/PointView.hpp>
 #include <pdal/StageFactory.hpp>
 #include <pdal/PipelineManager.hpp>
-#include <pdal/PipelineReader.hpp>
+#include <FauxReader.hpp>
 #include <FerryFilter.hpp>
 #include <LasReader.hpp>
+#include <StreamCallbackFilter.hpp>
 #include "Support.hpp"
 
 using namespace pdal;
@@ -47,15 +48,86 @@ using namespace pdal;
 TEST(FerryFilterTest, create)
 {
     StageFactory f;
-    std::unique_ptr<Stage> filter(f.createStage("filters.ferry"));
-    EXPECT_TRUE(filter.get());
+    Stage* filter(f.createStage("filters.ferry"));
+    EXPECT_TRUE(filter);
 }
 
-TEST(FerryFilterTest, test_ferry_copy)
+TEST(FerryFilterTest, test_ferry_copy_xml)
 {
     PipelineManager mgr;
-    PipelineReader specReader(mgr);
-    specReader.readPipeline(Support::configuredpath("filters/ferry.xml"));
+    mgr.readPipeline(Support::configuredpath("filters/ferry.xml"));
+
+    mgr.execute();
+    ConstPointTableRef table(mgr.pointTable());
+
+    PointViewSet viewSet = mgr.views();
+
+    EXPECT_EQ(viewSet.size(), 1u);
+    PointViewPtr view = *viewSet.begin();
+    EXPECT_EQ(view->size(), 1065u);
+
+    Dimension::Id::Enum state_plane_x = table.layout()->findDim("StatePlaneX");
+    Dimension::Id::Enum state_plane_y = table.layout()->findDim("StatePlaneY");
+
+    double lon = view->getFieldAs<double>(Dimension::Id::X, 0);
+    double lat = view->getFieldAs<double>(Dimension::Id::Y, 0);
+
+    double x = view->getFieldAs<double>(state_plane_x, 0);
+    double y = view->getFieldAs<double>(state_plane_y, 0);
+
+    EXPECT_DOUBLE_EQ(-117.2501328350574, lon);
+    EXPECT_DOUBLE_EQ(49.341077824192915, lat);
+    EXPECT_DOUBLE_EQ(637012.24, x);
+    EXPECT_DOUBLE_EQ(849028.31, y);
+}
+
+TEST(FerryFilterTest, stream)
+{
+    FauxReader r;
+
+    Options ro;
+    ro.add("mode", "ramp");
+    ro.add("bounds", BOX3D(0, 0, 0, 99, 99, 99));
+    ro.add("num_points", 100);
+
+    r.setOptions(ro);
+
+    Options fo;
+    fo.add("dimensions", "X=FooX,Y=BarY");
+
+    FerryFilter f;
+    f.setOptions(fo);
+    f.setInput(r);
+
+    StreamCallbackFilter c;
+    c.setInput(f);
+
+    FixedPointTable t(10);
+    c.prepare(t);
+
+    auto foox = t.layout()->findDim("FooX");
+    auto fooy = t.layout()->findDim("BarY");
+    auto cb = [foox,fooy](PointRef& point)
+    {
+        static int i = 0;
+        EXPECT_EQ(point.getFieldAs<int>(Dimension::Id::X),
+            point.getFieldAs<int>(foox));
+        EXPECT_EQ(point.getFieldAs<int>(Dimension::Id::Y),
+            point.getFieldAs<int>(fooy));
+        EXPECT_EQ(i, point.getFieldAs<int>(foox));
+        ++i;
+        return true;
+    };
+    c.setCallback(cb);
+
+    c.execute(t);
+}
+
+TEST(FerryFilterTest, test_ferry_copy_json)
+{
+    PipelineManager mgr;
+
+    mgr.readPipeline(Support::configuredpath("filters/ferry.json"));
 
     mgr.execute();
     ConstPointTableRef table(mgr.pointTable());
@@ -89,7 +161,7 @@ TEST(FerryFilterTest, test_ferry_invalid)
     reader.setOptions(ops1);
 
     Options op1;
-    
+
     op1.add("dimensions", "X=X");
 
     FerryFilter f1;
@@ -131,4 +203,3 @@ TEST(FerryFilterTest, test_ferry_invalid)
     // Make sure we reject bad option format.
     EXPECT_THROW(f4.prepare(table), pdal_error);
 }
-
diff --git a/test/unit/filters/MergeTest.cpp b/test/unit/filters/MergeTest.cpp
index 1c67e2b..07067f7 100644
--- a/test/unit/filters/MergeTest.cpp
+++ b/test/unit/filters/MergeTest.cpp
@@ -35,7 +35,6 @@
 #include <pdal/pdal_test_main.hpp>
 
 #include <pdal/PipelineManager.hpp>
-#include <pdal/PipelineReader.hpp>
 
 #include "Support.hpp"
 
@@ -44,15 +43,14 @@ TEST(MergeTest, test1)
     using namespace pdal;
 
     PipelineManager mgr;
-    PipelineReader specReader(mgr);
-    specReader.readPipeline(Support::configuredpath("filters/merge.xml"));
+    mgr.readPipeline(Support::configuredpath("filters/merge.xml"));
     mgr.execute();
 
     PointViewSet viewSet = mgr.views();
 
-    EXPECT_EQ(viewSet.size(), 1u);
+    EXPECT_EQ(1u, viewSet.size());
     PointViewPtr view = *viewSet.begin();
-    EXPECT_EQ(view->size(), 2130u);
+    EXPECT_EQ(2130u, view->size());
 }
 
 TEST(MergeTest, test2)
@@ -60,15 +58,14 @@ TEST(MergeTest, test2)
     using namespace pdal;
 
     PipelineManager mgr;
-    PipelineReader specReader(mgr);
-    specReader.readPipeline(Support::configuredpath("filters/merge2.xml"));
+    mgr.readPipeline(Support::configuredpath("filters/merge2.xml"));
     mgr.execute();
 
     PointViewSet viewSet = mgr.views();
 
-    EXPECT_EQ(viewSet.size(), 1u);
+    EXPECT_EQ(1u, viewSet.size());
     PointViewPtr view = *viewSet.begin();
-    EXPECT_EQ(view->size(), 2130u);
+    EXPECT_EQ(2130u, view->size());
 }
 
 TEST(MergeTest, test3)
@@ -76,8 +73,7 @@ TEST(MergeTest, test3)
     using namespace pdal;
 
     PipelineManager mgr;
-    PipelineReader specReader(mgr);
-    specReader.readPipeline(Support::configuredpath("filters/merge3.xml"));
+    mgr.readPipeline(Support::configuredpath("filters/merge3.xml"));
 
     std::ostringstream oss;
     std::ostream& o = std::clog;
@@ -90,7 +86,60 @@ TEST(MergeTest, test3)
 
     PointViewSet viewSet = mgr.views();
 
-    EXPECT_EQ(viewSet.size(), 1u);
+    EXPECT_EQ(1u, viewSet.size());
     PointViewPtr view = *viewSet.begin();
-    EXPECT_EQ(view->size(), 2130u);
+    EXPECT_EQ(2130u, view->size());
+}
+
+TEST(MergeTest, test4)
+{
+    using namespace pdal;
+
+    PipelineManager mgr;
+    mgr.readPipeline(Support::configuredpath("filters/merge.json"));
+    mgr.execute();
+
+    PointViewSet viewSet = mgr.views();
+
+    EXPECT_EQ(1u, viewSet.size());
+    PointViewPtr view = *viewSet.begin();
+    EXPECT_EQ(2130u, view->size());
+}
+
+TEST(MergeTest, test5)
+{
+    using namespace pdal;
+
+    PipelineManager mgr;
+    mgr.readPipeline(Support::configuredpath("filters/merge2.json"));
+    mgr.execute();
+
+    PointViewSet viewSet = mgr.views();
+
+    EXPECT_EQ(1u, viewSet.size());
+    PointViewPtr view = *viewSet.begin();
+    EXPECT_EQ(2130u, view->size());
+}
+
+TEST(MergeTest, test6)
+{
+    using namespace pdal;
+
+    PipelineManager mgr;
+    mgr.readPipeline(Support::configuredpath("filters/merge3.json"));
+
+    std::ostringstream oss;
+    std::ostream& o = std::clog;
+    auto ctx = Utils::redirect(o, oss);
+
+    mgr.execute();
+    std::string s = oss.str();
+    EXPECT_TRUE(s.find("inconsistent spatial references") != s.npos);
+    Utils::restore(o, ctx);
+
+    PointViewSet viewSet = mgr.views();
+
+    EXPECT_EQ(1u, viewSet.size());
+    PointViewPtr view = *viewSet.begin();
+    EXPECT_EQ(2130u, view->size());
 }
diff --git a/test/unit/filters/RangeFilterTest.cpp b/test/unit/filters/RangeFilterTest.cpp
index 0e3f550..fe995b8 100644
--- a/test/unit/filters/RangeFilterTest.cpp
+++ b/test/unit/filters/RangeFilterTest.cpp
@@ -38,14 +38,15 @@
 #include <pdal/StageFactory.hpp>
 #include <FauxReader.hpp>
 #include <RangeFilter.hpp>
+#include <StreamCallbackFilter.hpp>
 
 using namespace pdal;
 
 TEST(RangeFilterTest, createStage)
 {
     StageFactory f;
-    std::shared_ptr<Stage> filter(f.createStage("filters.range"));
-    EXPECT_TRUE(filter.get());
+    Stage* filter(f.createStage("filters.range"));
+    EXPECT_TRUE(filter);
 }
 
 TEST(RangeFilterTest, noLimits)
@@ -354,3 +355,49 @@ TEST(RangeFilterTest, simple_logic)
     EXPECT_EQ(view->getFieldAs<int>(Dimension::Id::X, 4), 9);
 }
 
+TEST(RangeFilterTest, stream_logic)
+{
+    Options ops;
+    ops.add("bounds", BOX3D(1, 101, 201, 10, 110, 210));
+    ops.add("mode", "ramp");
+    ops.add("num_points", 10);
+
+    FauxReader reader;
+    reader.setOptions(ops);
+
+    Options rangeOps;
+    rangeOps.add("limits", "Y[108:109], X[2:5], Z[1:1000], X[7:9], Y[103:105]");
+
+    RangeFilter range;
+    range.setOptions(rangeOps);
+    range.setInput(reader);
+
+    StreamCallbackFilter f;
+    f.setInput(range);
+
+    FixedPointTable table(20);
+    f.prepare(table);
+
+    auto cb = [](PointRef& point)
+    {
+        static int i = 0;
+        int x = point.getFieldAs<int>(Dimension::Id::X);
+        if (i == 0)
+            EXPECT_EQ(x, 3);
+        else if (i == 1)
+            EXPECT_EQ(x, 4);
+        else if (i == 2)
+            EXPECT_EQ(x, 5);
+        else if (i == 3)
+            EXPECT_EQ(x, 8);
+        else if (i == 4)
+            EXPECT_EQ(x, 9);
+        EXPECT_TRUE(i < 5);
+        ++i;
+        return true;
+    };
+    f.setCallback(cb);
+
+    f.execute(table);
+}
+
diff --git a/test/unit/filters/ReprojectionFilterTest.cpp b/test/unit/filters/ReprojectionFilterTest.cpp
index 52fa05b..9ba0a86 100644
--- a/test/unit/filters/ReprojectionFilterTest.cpp
+++ b/test/unit/filters/ReprojectionFilterTest.cpp
@@ -35,9 +35,10 @@
 #include <pdal/pdal_test_main.hpp>
 
 #include <pdal/SpatialReference.hpp>
+#include <pdal/PointView.hpp>
 #include <LasReader.hpp>
 #include <ReprojectionFilter.hpp>
-#include <pdal/PointView.hpp>
+#include <StreamCallbackFilter.hpp>
 
 #include "Support.hpp"
 
@@ -46,7 +47,7 @@ using namespace pdal;
 namespace
 {
 
-#if defined(PDAL_HAVE_GEOS) && defined(PDAL_HAVE_LIBGEOTIFF)
+#if defined(PDAL_HAVE_LIBGEOTIFF)
 void getPoint(const PointView& data, double& x, double& y, double& z)
 {
     x = data.getFieldAs<double>(Dimension::Id::X, 0);
@@ -58,7 +59,7 @@ void getPoint(const PointView& data, double& x, double& y, double& z)
 } // unnamed namespace
 
 
-#if defined(PDAL_HAVE_GEOS) && defined(PDAL_HAVE_LIBGEOTIFF)
+#if defined(PDAL_HAVE_LIBGEOTIFF)
 // Test reprojecting UTM 15 to DD with a filter
 TEST(ReprojectionFilterTest, ReprojectionFilterTest_test_1)
 {
@@ -104,56 +105,50 @@ TEST(ReprojectionFilterTest, ReprojectionFilterTest_test_1)
 }
 #endif
 
-
-/**
- This test would pass but for the strange scaling of the dimension, which
- exceeds an integer.
-
-// Test reprojecting UTM 15 to DD with a filter randomly
-TEST(ReprojectionFilterTest, InPlaceReprojectionFilterTest_test_2)
+#if defined(PDAL_HAVE_LIBGEOTIFF)
+// Test reprojecting UTM 15 to DD with a filter
+TEST(ReprojectionFilterTest, stream_test_1)
 {
     const char* epsg4326_wkt = "GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433],AUTHORITY[\"EPSG\",\"4326\"]]";
 
-    const double postX = 194161.33;
-    const double postY = 258783.820;
-    const double postZ = 131.570;
-
-    {
-        PointTable table;
-
-        const SpatialReference out_ref(epsg4326_wkt);
-
-        Options options;
-
-        Option debug("debug", true, "");
-        Option verbose("verbose", 9, "");
-        Option out_srs("out_srs","EPSG:2993", "Output SRS to reproject to");
-
-        Option filename("filename",
-            Support::datapath("las/autzen-dd.las"), "filename");
-        options.add(out_srs);
-        options.add(filename);
 
-        LasReader reader(options);
-        ReprojectionFilter reprojectionFilter(options);
-        reprojectionFilter.setInput(&reader);
-        reprojectionFilter.prepare(table);
+    Options ops1;
+    ops1.add("filename", Support::datapath("las/utm15.las"));
+    LasReader reader;
+    reader.setOptions(ops1);
 
-        PointView view(table);
-        StageSequentialIterator* iter = reader.createSequentialIterator();
+    Options options;
+    options.add("out_srs", epsg4326_wkt);
 
-        point_count_t numRead = iter->read(view, 1);
-        EXPECT_TRUE(numRead == 1);
+    ReprojectionFilter reprojectionFilter;
+    reprojectionFilter.setOptions(options);
+    reprojectionFilter.setInput(reader);
 
-        FilterWrapper::ready(&reprojectionFilter, table);
-        FilterWrapper::filter(&reprojectionFilter, view);
-
-        double x, y, z;
-        getPoint(view, x, y, z);
-        EXPECT_FLOAT_EQ(x, postX);
-        EXPECT_FLOAT_EQ(y, postY);
-        EXPECT_FLOAT_EQ(z, postZ);
-        delete iter;
-    }
+    auto cb = [](PointRef& point)
+    {
+        static int i = 0;
+        const double x = -93.351563;
+        const double y = 41.577148;
+        const double z = 16.000000;
+
+        if (i == 0)
+        {
+            EXPECT_FLOAT_EQ(point.getFieldAs<float>(Dimension::Id::X), x);
+            EXPECT_FLOAT_EQ(point.getFieldAs<float>(Dimension::Id::Y), y);
+            EXPECT_FLOAT_EQ(point.getFieldAs<float>(Dimension::Id::Z), z);
+        }
+        ++i;
+        return true;
+    };
+
+    StreamCallbackFilter stream;
+    stream.setCallback(cb);
+    stream.setInput(reprojectionFilter);
+
+    FixedPointTable table(20);
+
+    stream.prepare(table);
+    stream.execute(table);
 }
-**/
+#endif
+
diff --git a/test/unit/filters/SortFilterTest.cpp b/test/unit/filters/SortFilterTest.cpp
index d7e289f..3785971 100644
--- a/test/unit/filters/SortFilterTest.cpp
+++ b/test/unit/filters/SortFilterTest.cpp
@@ -38,7 +38,6 @@
 
 #include <SortFilter.hpp>
 #include <pdal/PipelineManager.hpp>
-#include <pdal/PipelineReader.hpp>
 #include <pdal/StageWrapper.hpp>
 #include "Support.hpp"
 
@@ -90,12 +89,31 @@ TEST(SortFilterTest, simple)
         doSort(count);
 }
 
-TEST(SortFilterTest, pipeline)
+TEST(SortFilterTest, pipelineXML)
 {
     PipelineManager mgr;
-    PipelineReader reader(mgr);
 
-    reader.readPipeline(Support::configuredpath("filters/sort.xml"));
+    mgr.readPipeline(Support::configuredpath("filters/sort.xml"));
+    mgr.execute();
+
+    PointViewSet viewSet = mgr.views();
+
+    EXPECT_EQ(viewSet.size(), 1u);
+    PointViewPtr view = *viewSet.begin();
+
+    for (PointId i = 1; i < view->size(); ++i)
+    {
+        double d1 = view->getFieldAs<double>(Dimension::Id::X, i - 1);
+        double d2 = view->getFieldAs<double>(Dimension::Id::X, i);
+        EXPECT_TRUE(d1 <= d2);
+    }
+}
+
+TEST(SortFilterTest, pipelineJSON)
+{
+    PipelineManager mgr;
+
+    mgr.readPipeline(Support::configuredpath("filters/sort.json"));
     mgr.execute();
 
     PointViewSet viewSet = mgr.views();
diff --git a/test/unit/filters/StatsFilterTest.cpp b/test/unit/filters/StatsFilterTest.cpp
index 299fe47..a9a35cb 100644
--- a/test/unit/filters/StatsFilterTest.cpp
+++ b/test/unit/filters/StatsFilterTest.cpp
@@ -53,8 +53,8 @@ TEST(Stats, simple)
 
     StageFactory f;
 
-    std::unique_ptr<Stage> reader(f.createStage("readers.faux"));
-    EXPECT_TRUE(reader.get());
+    Stage* reader(f.createStage("readers.faux"));
+    EXPECT_TRUE(reader);
     reader->setOptions(ops);
 
     StatsFilter filter;
@@ -87,6 +87,50 @@ TEST(Stats, simple)
 }
 
 
+TEST(Stats, stream)
+{
+    BOX3D bounds(1.0, 2.0, 3.0, 101.0, 102.0, 103.0);
+    Options ops;
+    ops.add("bounds", bounds);
+    ops.add("count", 1000);
+    ops.add("mode", "constant");
+
+    StageFactory f;
+
+    Stage* reader(f.createStage("readers.faux"));
+    EXPECT_TRUE(reader);
+    reader->setOptions(ops);
+
+    StatsFilter filter;
+    filter.setInput(*reader);
+    EXPECT_EQ(filter.getName(), "filters.stats");
+
+    FixedPointTable table(100);
+    filter.prepare(table);
+    filter.execute(table);
+
+    const stats::Summary& statsX = filter.getStats(Dimension::Id::X);
+    const stats::Summary& statsY = filter.getStats(Dimension::Id::Y);
+    const stats::Summary& statsZ = filter.getStats(Dimension::Id::Z);
+
+    EXPECT_EQ(statsX.count(), 1000u);
+    EXPECT_EQ(statsY.count(), 1000u);
+    EXPECT_EQ(statsZ.count(), 1000u);
+
+    EXPECT_FLOAT_EQ(statsX.minimum(), 1.0);
+    EXPECT_FLOAT_EQ(statsY.minimum(), 2.0);
+    EXPECT_FLOAT_EQ(statsZ.minimum(), 3.0);
+
+    EXPECT_FLOAT_EQ(statsX.maximum(), 1.0);
+    EXPECT_FLOAT_EQ(statsY.maximum(), 2.0);
+    EXPECT_FLOAT_EQ(statsZ.maximum(), 3.0);
+
+    EXPECT_FLOAT_EQ(statsX.average(), 1.0);
+    EXPECT_FLOAT_EQ(statsY.average(), 2.0);
+    EXPECT_FLOAT_EQ(statsZ.average(), 3.0);
+}
+
+
 TEST(Stats, dimset)
 {
     BOX3D bounds(1.0, 2.0, 3.0, 101.0, 102.0, 103.0);
@@ -96,8 +140,8 @@ TEST(Stats, dimset)
     ops.add("mode", "constant");
 
     StageFactory f;
-    std::unique_ptr<Stage> reader(f.createStage("readers.faux"));
-    EXPECT_TRUE(reader.get());
+    Stage* reader(f.createStage("readers.faux"));
+    EXPECT_TRUE(reader);
     reader->setOptions(ops);
 
     Options filterOps;
@@ -138,8 +182,8 @@ TEST(Stats, metadata)
     ops.add("mode", "constant");
 
     StageFactory f;
-    std::unique_ptr<Stage> reader(f.createStage("readers.faux"));
-    EXPECT_TRUE(reader.get());
+    Stage* reader(f.createStage("readers.faux"));
+    EXPECT_TRUE(reader);
     reader->setOptions(ops);
 
     Options filterOps;
diff --git a/test/unit/filters/TransformationFilterTest.cpp b/test/unit/filters/TransformationFilterTest.cpp
index 92f2b83..ce819ef 100644
--- a/test/unit/filters/TransformationFilterTest.cpp
+++ b/test/unit/filters/TransformationFilterTest.cpp
@@ -67,8 +67,8 @@ public:
 TEST(TransformationMatrix, create)
 {
     StageFactory f;
-    std::unique_ptr<Stage> filter(f.createStage("filters.transformation"));
-    EXPECT_TRUE(filter.get());
+    Stage* filter(f.createStage("filters.transformation"));
+    EXPECT_TRUE(filter);
 }
 
 
diff --git a/test/unit/io/bpf/BPFTest.cpp b/test/unit/io/bpf/BPFTest.cpp
index b81d7dd..57f9420 100644
--- a/test/unit/io/bpf/BPFTest.cpp
+++ b/test/unit/io/bpf/BPFTest.cpp
@@ -34,17 +34,16 @@
 
 #include <pdal/pdal_test_main.hpp>
 
-#include <string.h>
+#include <array>
 
-#include <pdal/BufferReader.hpp>
-#include <pdal/PipelineReader.hpp>
-#include <pdal/PipelineManager.hpp>
+#include <pdal/Filter.hpp>
 #include <pdal/PointView.hpp>
 #include <pdal/util/Utils.hpp>
 #include <pdal/util/FileUtils.hpp>
 
 #include <BpfReader.hpp>
 #include <BpfWriter.hpp>
+#include <BufferReader.hpp>
 
 #include "Support.hpp"
 
@@ -75,10 +74,19 @@ template<typename LeftIter, typename RightIter>
         ::testing::AssertionFailure() << message;
 }
 
-void test_file_type(const std::string& filename)
+
+
+void test_file_type_view(const std::string& filename)
 {
     PointTable table;
 
+    struct PtData
+    {
+        float x;
+        float y;
+        float z;
+    };
+
     Options ops;
 
     ops.add("filename", filename);
@@ -93,13 +101,6 @@ void test_file_type(const std::string& filename)
     PointViewPtr view = *viewSet.begin();
     EXPECT_EQ(view->size(), 506u);
 
-    struct PtData
-    {
-        float x;
-        float y;
-        float z;
-    };
-
     PtData pts2[3] = { {494057.312f, 4877433.5f, 130.630005f},
                        {494133.812f, 4877440.0f, 130.440002f},
                        {494021.094f, 4877440.0f, 130.460007f} };
@@ -131,6 +132,88 @@ void test_file_type(const std::string& filename)
     }
 }
 
+void test_file_type_stream(const std::string& filename)
+{
+    class Checker : public Filter
+    {
+    public:
+        Checker() : m_cnt(0)
+        {}
+
+        struct PtData
+        {
+            float x;
+            float y;
+            float z;
+        };
+
+        std::string getName() const
+        { return "checker"; }
+
+        bool processOne(PointRef& p)
+        {
+            PtData pts0[3] = { {494057.312f, 4877433.5f, 130.630005f},
+                {494133.812f, 4877440.0f, 130.440002f},
+                {494021.094f, 4877440.0f, 130.460007f} };
+
+            PtData pts503[3] = { {494915.25f, 4878096.5f, 128.220001f},
+                {494917.062f, 4878124.5f, 128.539993f},
+                {494920.781f, 4877914.5f, 127.43f} };
+
+            PtData d;
+
+            if (m_cnt < 3)
+               d = pts0[0 + m_cnt];
+            else if (m_cnt >= 503 && m_cnt < 506)
+               d = pts503[m_cnt - 503];
+            else
+            {
+                m_cnt++;
+                return true;
+            }
+
+            float x = p.getFieldAs<float>(Dimension::Id::X);
+            float y = p.getFieldAs<float>(Dimension::Id::Y);
+            float z = p.getFieldAs<float>(Dimension::Id::Z);
+
+            EXPECT_FLOAT_EQ(x, d.x);
+            EXPECT_FLOAT_EQ(y, d.y);
+            EXPECT_FLOAT_EQ(z, d.z);
+            EXPECT_TRUE(m_cnt < 506) << "Count exceeded amount requested "
+                "in 'count' option.";
+
+            m_cnt++;
+            return true;
+        }
+
+    private:
+        size_t m_cnt;
+    };
+
+    FixedPointTable table(50);
+
+    Options ops;
+
+    ops.add("filename", filename);
+    ops.add("count", 506);
+    BpfReader reader;
+    reader.setOptions(ops);
+
+    Checker c;
+    c.setInput(reader);
+
+    c.prepare(table);
+    c.execute(table);
+}
+
+
+void test_file_type(const std::string& filename)
+{
+    test_file_type_view(filename);
+    test_file_type_stream(filename);
+}
+
+
 void test_roundtrip(Options& writerOps)
 {
     std::string infile(
@@ -343,10 +426,18 @@ TEST(BPFTest, bundled)
     reader2.execute(table2);
     MetadataNode n = reader2.getMetadata();
     std::vector<uint8_t> outbuf;
-    outbuf = Utils::base64_decode(n.findChild("bundle1").value());
+    auto findbundle = [](MetadataNode& m)
+        { return m.name() == "bundled_file"; };
+    MetadataNodeList nodes = n.findChildren(findbundle);
+    EXPECT_EQ(nodes.size(), 2u);
+    auto findbundle1 = [](const MetadataNode& m)
+        { return m.name() == "bundle1"; };
+    outbuf = Utils::base64_decode(n.find(findbundle1).value());
     EXPECT_EQ(memcmp(outbuf.data(), "This is a test",
         outbuf.size() - 1), 0);
-    outbuf = Utils::base64_decode(n.findChild("bundle2").value());
+    auto findbundle2 = [](const MetadataNode& m)
+        { return m.name() == "bundle2"; };
+    outbuf = Utils::base64_decode(n.find(findbundle2).value());
     EXPECT_EQ(memcmp(outbuf.data(), "This is another test",
         outbuf.size() - 1), 0);
 }
diff --git a/test/unit/io/buffer/BufferTest.cpp b/test/unit/io/buffer/BufferTest.cpp
index a79d7fa..b62be8a 100644
--- a/test/unit/io/buffer/BufferTest.cpp
+++ b/test/unit/io/buffer/BufferTest.cpp
@@ -36,7 +36,7 @@
 
 #include <pdal/PointView.hpp>
 #include <pdal/StageFactory.hpp>
-#include <pdal/BufferReader.hpp>
+#include <BufferReader.hpp>
 #include <StatsFilter.hpp>
 
 using namespace pdal;
diff --git a/test/unit/io/gdal/GDALReaderTest.cpp b/test/unit/io/gdal/GDALReaderTest.cpp
new file mode 100644
index 0000000..9425d09
--- /dev/null
+++ b/test/unit/io/gdal/GDALReaderTest.cpp
@@ -0,0 +1,187 @@
+/******************************************************************************
+* Copyright (c) 2015, Hobu Inc. (info at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/pdal_test_main.hpp>
+#include <fstream>
+
+#include "GDALReader.hpp"
+#include "Support.hpp"
+
+#include <iostream>
+
+using namespace pdal;
+
+TEST(GDALReaderTest, simple)
+{
+    Options ro;
+    ro.add("filename", Support::datapath("png/autzen-height.png"));
+
+    GDALReader gr;
+    gr.setOptions(ro);
+
+    PointTable t;
+    gr.prepare(t);
+    PointViewSet s = gr.execute(t);
+    PointViewPtr v = *s.begin();
+    PointLayoutPtr l = t.layout();
+    Dimension::Id::Enum id1 = l->findDim("band-1");
+    Dimension::Id::Enum id2 = l->findDim("band-2");
+    Dimension::Id::Enum id3 = l->findDim("band-3");
+    EXPECT_EQ(v->size(), (size_t)(735 * 973));
+
+    auto verify = [v, id1, id2, id3]
+        (PointId idx, double xx, double xy, double xr, double xg, double xb)
+    {
+        double r, g, b, x, y;
+        x = v->getFieldAs<double>(Dimension::Id::X, idx);
+        y = v->getFieldAs<double>(Dimension::Id::Y, idx);
+        r = v->getFieldAs<double>(id1, idx);
+        g = v->getFieldAs<double>(id2, idx);
+        b = v->getFieldAs<double>(id3, idx);
+        EXPECT_DOUBLE_EQ(x, xx);
+        EXPECT_DOUBLE_EQ(y, xy);
+        EXPECT_DOUBLE_EQ(r, xr);
+        EXPECT_DOUBLE_EQ(g, xg);
+        EXPECT_DOUBLE_EQ(b, xb);
+    };
+
+    verify(0, .5, .5, 0, 0, 0);
+    verify(120000, 195.5, 163.5, 255, 213, 0);
+    verify(290000, 410.5, 394.5, 0, 255, 206);
+    verify(715154, 734.5, 972.5, 0, 0, 0);
+}
+
+struct Point
+{
+    double m_x;
+    double m_y;
+    double m_z;
+};
+
+std::ostream& operator << (std::ostream& o, const Point& p)
+{
+    o << p.m_x << "/" << p.m_y << "/" << p.m_z;
+    return o;
+}
+
+bool operator < (const Point& p1, const Point& p2)
+{
+    return (p1.m_x < p2.m_x ? true :
+            p1.m_x > p2.m_x ? false :
+            p1.m_y < p2.m_y ? true :
+            p1.m_y > p2.m_y ? false :
+            p1.m_z < p2.m_z ? true : false);
+}
+
+class GDALReaderTypeTest : public ::testing::Test
+{
+protected:
+    GDALReaderTypeTest()
+    {
+        std::string xyzFilename = Support::datapath("gdal/data.xyz");
+
+        std::ifstream in(xyzFilename);
+
+        while (true)
+        {
+            Point p;
+            in >> p.m_x >> p.m_y >> p.m_z;
+            if (in.eof())
+                break;
+            m_xyzPoints.push_back(p);
+        }
+    }
+
+    void compare(const std::string& path)
+    {
+        Options ro;
+        ro.add("filename", path);
+
+        GDALReader gr;
+        gr.setOptions(ro);
+
+        PointTable t;
+        gr.prepare(t);
+        Dimension::Id::Enum b1 = t.layout()->findDim("band-1");
+        PointViewSet s = gr.execute(t);
+        PointViewPtr v = *s.begin();
+
+        EXPECT_EQ(v->size(), m_xyzPoints.size());
+        for (PointId idx = 0; idx < v->size(); ++idx)
+        {
+            Point p;
+            p.m_x = v->getFieldAs<double>(Dimension::Id::X, idx);
+            p.m_y = v->getFieldAs<double>(Dimension::Id::Y, idx);
+            p.m_z = v->getFieldAs<double>(b1, idx);
+            m_gdalPoints.push_back(p);
+        }
+        std::sort(m_xyzPoints.begin(), m_xyzPoints.end());
+        std::sort(m_gdalPoints.begin(), m_gdalPoints.end());
+        for (size_t i = 0; i < m_gdalPoints.size(); ++i)
+        {
+            EXPECT_DOUBLE_EQ(m_xyzPoints[i].m_x, m_gdalPoints[i].m_x);
+            EXPECT_DOUBLE_EQ(m_xyzPoints[i].m_y, m_gdalPoints[i].m_y);
+            EXPECT_DOUBLE_EQ(m_xyzPoints[i].m_z, m_gdalPoints[i].m_z);
+        }
+    }
+
+private:
+    std::vector<Point> m_xyzPoints;    
+    std::vector<Point> m_gdalPoints;
+};
+
+TEST_F(GDALReaderTypeTest, byte)
+{
+    compare(Support::datapath("gdal/byte.tif"));
+}
+
+TEST_F(GDALReaderTypeTest, int16)
+{
+    compare(Support::datapath("gdal/int16.tif"));
+}
+
+TEST_F(GDALReaderTypeTest, int32)
+{
+    compare(Support::datapath("gdal/int32.tif"));
+}
+
+TEST_F(GDALReaderTypeTest, float32)
+{
+    compare(Support::datapath("gdal/float32.tif"));
+}
+
+TEST_F(GDALReaderTypeTest, float64)
+{
+    compare(Support::datapath("gdal/float64.tif"));
+}
diff --git a/test/unit/io/ilvis2/Ilvis2MetadataReaderTest.cpp b/test/unit/io/ilvis2/Ilvis2MetadataReaderTest.cpp
new file mode 100644
index 0000000..7ac7b91
--- /dev/null
+++ b/test/unit/io/ilvis2/Ilvis2MetadataReaderTest.cpp
@@ -0,0 +1,97 @@
+/******************************************************************************
+* Copyright (c) 2015, Howard Butler (howard at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/pdal_test_main.hpp>
+
+#include <Ilvis2MetadataReader.hpp>
+#include "Support.hpp"
+
+#include <iostream>
+#include <fstream>
+
+using namespace pdal;
+
+
+TEST(Ilvis2MetadataReaderTest, testReadMetadata)
+{
+    Ilvis2MetadataReader reader;
+    MetadataNode *m, n;
+    MetadataNodeList l,l1,l2,l3;
+    std::ofstream outfile;
+
+    m = new MetadataNode();
+    reader.readMetadataFile(Support::datapath("ilvis2/ILVIS2_TEST_FILE.TXT.xml"), m);
+    
+    n = m->children("GranuleUR")[0];
+    EXPECT_EQ("SC:ILVIS2.001:51203496", n.value());
+
+    n = m->children("DbID")[0];
+    EXPECT_EQ(51203496L, n.value<long>());
+
+    l = m->children("DataFile");
+    EXPECT_EQ(std::size_t{2}, l.size());
+    EXPECT_EQ("SHA1", l[1].children("ChecksumType")[0].value());
+
+    l = m->children("Campaign");
+    EXPECT_EQ(std::size_t{2}, l.size());
+
+    l = m->children("PSA");
+    EXPECT_EQ(std::size_t{3}, l.size());
+    EXPECT_EQ("SIPSMetGenVersion", l[0].children("PSAName")[0].value());
+    EXPECT_EQ("N426NA", l[2].children("PSAValue")[0].value());
+
+    l = m->children("BrowseProductGranuleId");
+    EXPECT_EQ(std::size_t{2}, l.size());
+
+    l = m->children("PHProductGranuleId");
+    EXPECT_EQ(std::size_t{1}, l.size());
+    EXPECT_EQ("PH_ID", l[0].value());
+
+    l = m->children("Platform");
+    EXPECT_EQ(std::size_t{1}, l.size());
+    l1 = l[0].children("Instrument");
+    EXPECT_EQ(std::size_t{1}, l1.size());
+    EXPECT_EQ(std::size_t{2}, l1[0].children("OperationMode").size());
+    EXPECT_EQ("Safe", l1[0].children("OperationMode")[1].value());
+    l2 = l1[0].children("Sensor");
+    EXPECT_EQ(std::size_t{1}, l2.size());
+    l3 = l2[0].children("SensorCharacteristic");
+    EXPECT_EQ(std::size_t{2}, l3.size());
+    EXPECT_EQ("CharName1", l3[0].children("CharacteristicName")[0].value());
+    EXPECT_EQ("MyValue", l3[1].children("CharacteristicValue")[0].value());
+
+    l = m->children("ConvexHull");
+    EXPECT_EQ(std::size_t{1}, l.size());
+    EXPECT_EQ(std::size_t{0}, l[0].value().find("POLYGON"));
+}
diff --git a/test/unit/io/ilvis2/Ilvis2ReaderTest.cpp b/test/unit/io/ilvis2/Ilvis2ReaderTest.cpp
index 0eb2c1a..6e24ff2 100644
--- a/test/unit/io/ilvis2/Ilvis2ReaderTest.cpp
+++ b/test/unit/io/ilvis2/Ilvis2ReaderTest.cpp
@@ -35,8 +35,6 @@
 #include <pdal/pdal_test_main.hpp>
 
 #include <pdal/Options.hpp>
-#include <pdal/PipelineReader.hpp>
-#include <pdal/PipelineManager.hpp>
 #include <pdal/PointView.hpp>
 
 #include <Ilvis2Reader.hpp>
@@ -61,9 +59,10 @@ void checkPoint(const PointView& data, PointId index, double time,
     checkDimension(Dimension::Id::GpsTime, time);
 }
 
-TEST(Ilvis2ReaderTest, testRead)
+TEST(Ilvis2ReaderTest, testReadDefault)
 {
-    Option filename("filename", Support::datapath("ilvis2/ILVIS2_GL2009_0414_R1401_042504.TXT"), "");
+    Option filename("filename",
+        Support::datapath("ilvis2/ILVIS2_TEST_FILE.TXT"));
     Options options(filename);
     std::shared_ptr<Ilvis2Reader> reader(new Ilvis2Reader);
     reader->setOptions(options);
@@ -75,14 +74,53 @@ TEST(Ilvis2ReaderTest, testRead)
     EXPECT_EQ(viewSet.size(), 1u);
     PointViewPtr view = *viewSet.begin();
 
-    EXPECT_EQ(view->size(), 998u);
+    EXPECT_EQ(view->size(), 4u);
 
     checkPoint(*view.get(), 0, 42504.48313,
-             78.307673,121.21479,1956.583
+             78.307672,-58.785213,1956.777
             );
 
-    checkPoint(*view.get(), 996, 42520.90035,
-             78.320149, 121.32024, 1959.206
+    checkPoint(*view.get(), 1, 42504.48512,
+             78.307592, 101.215097, 1956.588
+            );
+
+    checkPoint(*view.get(), 2, 42504.48712,
+             78.307512, -58.78459, 1956.667
+            );
+
+    checkPoint(*view.get(), 3, 42504.48712,
+             78.307512, -58.78459, 2956.667
             );
 }
 
+
+TEST(Ilvis2ReaderTest, testReadHigh)
+{
+    Option filename("filename",
+        Support::datapath("ilvis2/ILVIS2_TEST_FILE.TXT"));
+    Options options(filename);
+    options.add("mapping","high");
+    std::shared_ptr<Ilvis2Reader> reader(new Ilvis2Reader);
+    reader->setOptions(options);
+
+    PointTable table;
+
+    reader->prepare(table);
+    PointViewSet viewSet = reader->execute(table);
+    EXPECT_EQ(viewSet.size(), 1u);
+    PointViewPtr view = *viewSet.begin();
+
+    EXPECT_EQ(view->size(), 3u);
+
+    checkPoint(*view.get(), 0, 42504.48313,
+             78.307672,-58.785213,1956.777
+            );
+
+    checkPoint(*view.get(), 1, 42504.48512,
+             78.307592, 101.215097, 1956.588
+            );
+
+    checkPoint(*view.get(), 2, 42504.48712,
+             78.307512, -58.78459, 2956.667
+            );
+}
diff --git a/test/unit/io/ilvis2/Ilvis2ReaderWithMDReaderTest.cpp b/test/unit/io/ilvis2/Ilvis2ReaderWithMDReaderTest.cpp
new file mode 100644
index 0000000..8f926ed
--- /dev/null
+++ b/test/unit/io/ilvis2/Ilvis2ReaderWithMDReaderTest.cpp
@@ -0,0 +1,127 @@
+/******************************************************************************
+* Copyright (c) 2015, Howard Butler (howard at hobu.co)
+*
+* 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 in
+*       the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of Hobu, Inc. or Flaxen Geo Consulting nor the
+*       names of its contributors may be used to endorse or promote
+*       products derived from this software without specific prior
+*       written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+* OF SUCH DAMAGE.
+****************************************************************************/
+
+#include <pdal/pdal_test_main.hpp>
+
+#include <pdal/Options.hpp>
+#include <pdal/PointView.hpp>
+
+#include <Ilvis2Reader.hpp>
+
+#include "Support.hpp"
+
+using namespace pdal;
+
+TEST(Ilvis2ReaderWithMDReaderTest, testInvalidMetadataFile)
+{
+    Option filename("filename",
+        Support::datapath("ilvis2/ILVIS2_TEST_FILE.TXT"));
+    Options options(filename);
+    options.add("metadata", "invalidfile");
+    std::shared_ptr<Ilvis2Reader> reader(new Ilvis2Reader);
+    reader->setOptions(options);
+
+    PointTable table;
+    try
+    {
+        reader->prepare(table);
+        reader->execute(table);
+        FAIL() << "Expected an exception for an invalid file";
+    }
+    catch (pdal_error const & err)
+    {
+        EXPECT_EQ("Invalid metadata file: 'invalidfile'", std::string(err.what()));
+    }
+}
+
+
+TEST(Ilvis2ReaderWithMDReaderTest, testValidMetadataFile)
+{
+    Option filename("filename",
+        Support::datapath("ilvis2/ILVIS2_TEST_FILE.TXT"));
+    Options options(filename);
+    options.add("metadata", Support::datapath("ilvis2/ILVIS2_TEST_FILE.TXT.xml"));
+    std::shared_ptr<Ilvis2Reader> reader(new Ilvis2Reader);
+    reader->setOptions(options);
+
+    PointTable table;
+    reader->prepare(table);
+    reader->execute(table);
+
+    MetadataNode m, n;
+    MetadataNodeList l;
+    m = reader->getMetadata();
+
+    n = m.children("GranuleUR")[0];
+    EXPECT_EQ("SC:ILVIS2.001:51203496", n.value());
+
+    l = m.children("DataFile");
+    EXPECT_EQ(std::size_t{2}, l.size());
+    EXPECT_EQ("SHA1", l[1].children("ChecksumType")[0].value());
+
+    l = m.children("Platform")[0].children("Instrument")[0].children("Sensor")[0].children("SensorCharacteristic");
+    EXPECT_EQ(std::size_t{2}, l.size());
+    EXPECT_EQ("CharName1", l[0].children("CharacteristicName")[0].value());
+    EXPECT_EQ("MyValue", l[1].children("CharacteristicValue")[0].value());
+}
+
+
+TEST(Ilvis2ReaderWithMDReaderTest, testNoMetadataFile)
+{
+    Option filename("filename",
+        Support::datapath("ilvis2/ILVIS2_TEST_FILE.TXT"));
+    Options options(filename);
+    std::shared_ptr<Ilvis2Reader> reader(new Ilvis2Reader);
+    reader->setOptions(options);
+
+    PointTable table;
+    reader->prepare(table);
+    reader->execute(table);
+
+    MetadataNode m;
+    MetadataNodeList l;
+    m = reader->getMetadata();
+
+    l = m.children("GranuleUR");
+    EXPECT_EQ(std::size_t{0}, l.size());
+
+    l = m.children("DataFile");
+    EXPECT_EQ(std::size_t{0}, l.size());
+
+    l = m.children("Platform");
+    EXPECT_EQ(std::size_t{0}, l.size());
+
+    l = m.children("ConvexHull");
+    EXPECT_EQ(std::size_t{0}, l.size());
+}
diff --git a/test/unit/io/las/LasReaderTest.cpp b/test/unit/io/las/LasReaderTest.cpp
index 269671c..e294fd1 100644
--- a/test/unit/io/las/LasReaderTest.cpp
+++ b/test/unit/io/las/LasReaderTest.cpp
@@ -34,6 +34,7 @@
 
 #include <pdal/pdal_test_main.hpp>
 
+#include <pdal/Filter.hpp>
 #include <pdal/PointView.hpp>
 #include <pdal/StageFactory.hpp>
 #include <LasReader.hpp>
@@ -71,8 +72,8 @@ TEST(LasReaderTest, create)
 {
     StageFactory f;
 
-    std::unique_ptr<Stage> s(f.createStage("readers.las"));
-    EXPECT_TRUE(s.get());
+    auto s = f.createStage("readers.las");
+    EXPECT_TRUE(s);
 }
 
 TEST(LasReaderTest, test_base_options)
@@ -80,8 +81,6 @@ TEST(LasReaderTest, test_base_options)
     const std::string file(Support::datapath("las/1.2-with-color.las"));
 
     const Option opt_filename("filename", file);
-    const Option opt_verbose_string("verbose", "99");
-    const Option opt_verbose_uint8("verbose", 99);
     const Option opt_debug_string("debug", "true");
     const Option opt_debug_bool("debug", true);
 
@@ -91,29 +90,24 @@ TEST(LasReaderTest, test_base_options)
 
         LasReader reader;
         reader.setOptions(opts);
-        EXPECT_TRUE(reader.getVerboseLevel() == 0);
         EXPECT_TRUE(reader.isDebug() == false);
     }
 
     {
         Options opts;
         opts.add(opt_filename);
-        opts.add(opt_verbose_string);
         opts.add(opt_debug_string);
         LasReader reader;
         reader.setOptions(opts);
-        EXPECT_TRUE(reader.getVerboseLevel() == 99);
         EXPECT_TRUE(reader.isDebug() == true);
     }
 
     {
         Options opts;
         opts.add(opt_filename);
-        opts.add(opt_verbose_uint8);
         opts.add(opt_debug_bool);
         LasReader reader;
         reader.setOptions(opts);
-        EXPECT_TRUE(reader.getVerboseLevel() == 99);
         EXPECT_TRUE(reader.isDebug() == true);
     }
 }
@@ -134,7 +128,7 @@ TEST(LasReaderTest, header)
 
     EXPECT_EQ(h.fileSignature(), "LASF");
     EXPECT_EQ(h.fileSourceId(), 0);
-    EXPECT_TRUE(h.projectId().is_nil());
+    EXPECT_TRUE(h.projectId().isNull());
     EXPECT_EQ(h.versionMajor(), 1);
     EXPECT_EQ(h.versionMinor(), 2);
     EXPECT_EQ(h.creationDOY(), 0);
@@ -314,7 +308,7 @@ TEST(LasReaderTest, extraBytes)
     reader.prepare(table);
 
     DimTypeList dimTypes = layout->dimTypes();
-    EXPECT_EQ(dimTypes.size(), (size_t)24);
+    EXPECT_EQ(dimTypes.size(), (size_t)25);
 
     Dimension::Id::Enum color0 = layout->findProprietaryDim("Colors0");
     EXPECT_EQ(layout->dimType(color0), Dimension::Type::Unsigned16);
@@ -368,7 +362,6 @@ TEST(LasReaderTest, extraBytes)
         // Time was written truncated rather than rounded.
         EXPECT_NEAR(view->getFieldAs<double>(time, idx),
             view->getFieldAs<double>(time2, idx), 1.0);
-
     }
 }
 
@@ -440,6 +433,80 @@ TEST(LasReaderTest, lazperf)
 }
 #endif
 
+void streamTest(const std::string src, const std::string compression)
+{
+    Options ops1;
+    ops1.add("filename", src);
+    ops1.add("compression", compression);
+
+    LasReader lasReader;
+    lasReader.setOptions(ops1);
+
+    PointTable t;
+    lasReader.prepare(t);
+    PointViewSet s = lasReader.execute(t);
+    PointViewPtr p = *s.begin();
+
+    class Checker : public Filter
+    {
+    public:
+        std::string getName() const
+            { return "checker"; }
+        Checker(PointViewPtr v) : m_cnt(0), m_view(v),
+            m_bulkBuf(v->pointSize()), m_buf(v->pointSize()),
+            m_dims(v->dimTypes())
+            {}
+    private:
+        point_count_t m_cnt;
+        PointViewPtr m_view;
+        std::vector<char> m_bulkBuf;
+        std::vector<char> m_buf;
+        DimTypeList m_dims;
+
+        bool processOne(PointRef& point)
+        {
+            PointRef bulkPoint = m_view->point(m_cnt);
+
+            bulkPoint.getPackedData(m_dims, m_bulkBuf.data());
+            point.getPackedData(m_dims, m_buf.data());
+            EXPECT_EQ(memcmp(m_buf.data(), m_bulkBuf.data(),
+                m_view->pointSize()), 0);
+            m_cnt++;
+            return true;
+        }
+
+        void done(PointTableRef)
+        {
+            EXPECT_EQ(m_cnt, 110000u);
+        }
+    };
+
+    Options ops2;
+    ops2.add("filename", Support::datapath("las/autzen_trim.las"));
+
+    LasReader lazReader;
+    lazReader.setOptions(ops2);
+
+    Checker c(p);
+    c.setInput(lazReader);
+
+    FixedPointTable fixed(100);
+    c.prepare(fixed);
+    c.execute(fixed);
+}
+
+TEST(LasReaderTest, stream)
+{
+    // Compression option is ignored for non-compressed file.
+    streamTest(Support::datapath("las/autzen_trim.las"), "laszip");
+#ifdef PDAL_HAVE_LASZIP
+    streamTest(Support::datapath("laz/autzen_trim.laz"), "laszip");
+#endif
+#ifdef PDAL_HAVE_LAZPERF
+    streamTest(Support::datapath("laz/autzen_trim.laz"), "lazperf");
+#endif
+}
+
 
 // The header of 1.2-with-color-clipped says that it has 1065 points,
 // but it really only has 1064.
diff --git a/test/unit/io/las/LasWriterTest.cpp b/test/unit/io/las/LasWriterTest.cpp
index acb83e9..566a5b6 100644
--- a/test/unit/io/las/LasWriterTest.cpp
+++ b/test/unit/io/las/LasWriterTest.cpp
@@ -37,7 +37,7 @@
 #include <stdlib.h>
 
 #include <pdal/util/FileUtils.hpp>
-#include <pdal/BufferReader.hpp>
+#include <BufferReader.hpp>
 #include <LasHeader.hpp>
 #include <LasReader.hpp>
 #include <LasWriter.hpp>
@@ -279,11 +279,11 @@ TEST(LasWriterTest, all_extra_dims)
     {
         using namespace Dimension;
 
-        EXPECT_FLOAT_EQ(v->getFieldAs<float>(Id::X, i),
+        ASSERT_FLOAT_EQ(v->getFieldAs<float>(Id::X, i),
             v->getFieldAs<float>(foo, i));
-        EXPECT_FLOAT_EQ(v->getFieldAs<float>(Id::Y, i),
+        ASSERT_FLOAT_EQ(v->getFieldAs<float>(Id::Y, i),
             v->getFieldAs<float>(bar, i));
-        EXPECT_FLOAT_EQ(v->getFieldAs<float>(Id::Z, i),
+        ASSERT_FLOAT_EQ(v->getFieldAs<float>(Id::Z, i),
             v->getFieldAs<float>(baz, i));
     }
 }
@@ -349,8 +349,7 @@ TEST(LasWriterTest, forward)
     // Global encoding doesn't match because 4_1.las has a bad value, so we
     // get the default.
     EXPECT_EQ(n1.findChild("global_encoding").value<uint8_t>(), 0);
-    EXPECT_EQ(n1.findChild("project_id").value<boost::uuids::uuid>(),
-        boost::uuids::uuid());
+    EXPECT_EQ(n1.findChild("project_id").value<Uuid>(), Uuid());
     EXPECT_EQ(n1.findChild("system_id").value(), "");
     EXPECT_EQ(n1.findChild("software_id").value(), "TerraScan");
     EXPECT_EQ(n1.findChild("creation_doy").value<uint16_t>(), 142);
@@ -587,6 +586,118 @@ TEST(LasWriterTest, lazperf)
 }
 #endif
 
+void compareFiles(const std::string& name1, const std::string& name2,
+    size_t increment = 100)
+{
+    Options o1;
+    o1.add("filename", name1);
+
+    Options o2;
+    o2.add("filename", name2);
+
+    LasReader r1;
+    r1.setOptions(o1);
+
+    LasReader r2;
+    r2.setOptions(o2);
+
+    PointTable t1;
+    r1.prepare(t1);
+    PointViewSet s1 = r1.execute(t1);
+    EXPECT_EQ(s1.size(), 1u);
+    PointViewPtr v1 = *s1.begin();
+    DimTypeList d1 = v1->dimTypes();
+    size_t size1 = v1->pointSize();
+    std::vector<char> buf1(size1);
+
+    PointTable t2;
+    r2.prepare(t2);
+    PointViewSet s2 = r2.execute(t2);
+    EXPECT_EQ(s2.size(), 1u);
+    PointViewPtr v2 = *s2.begin();
+    DimTypeList d2 = v2->dimTypes();
+    size_t size2 = v2->pointSize();
+    std::vector<char> buf2(size2);
+
+    EXPECT_EQ(v1->size(), v2->size());
+    EXPECT_EQ(d1.size(), d2.size());
+    EXPECT_EQ(size1, size2);
+
+    for (PointId i = 0; i < std::min(size1, size2); i += increment)
+    {
+       v1->getPackedPoint(d1, i, buf1.data());
+       v2->getPackedPoint(d2, i, buf2.data());
+       EXPECT_EQ(memcmp(buf1.data(), buf2.data(), std::min(size1, size2)), 0);
+    }
+}
+
+TEST(LasWriterTest, stream)
+{
+    std::string infile(Support::datapath("las/autzen_trim.las"));
+    std::string outfile(Support::temppath("trimtest.las"));
+
+    FileUtils::deleteFile(outfile);
+
+    Options ops1;
+    ops1.add("filename", infile);
+
+    LasReader r;
+    r.setOptions(ops1);
+
+    Options ops2;
+    ops2.add("filename", outfile);
+    ops2.add("forward", "all");
+    LasWriter w;
+    w.setOptions(ops2);
+    w.setInput(r);
+
+    FixedPointTable t(100);
+    w.prepare(t);
+    w.execute(t);
+
+    compareFiles(infile, outfile);
+}
+
+TEST(LasWriterTest, fix1063_1064_1065)
+{
+    std::string outfile = Support::temppath("out.las");
+    std::string infile = Support::datapath("las/test1_4.las");
+
+    FileUtils::deleteFile(outfile);
+
+
+    std::string cmd = "pdal translate --writers.las.forward=all "
+        "--writers.las.a_srs=\"EPSG:4326\" " + infile + " " + outfile;
+    std::string output;
+    Utils::run_shell_command(Support::binpath(cmd), output);
+
+    Options o;
+    o.add("filename", outfile);
+
+    LasReader r;
+    r.setOptions(o);
+
+    PointTable t;
+    r.prepare(t);
+    PointViewSet s = r.execute(t);
+    EXPECT_EQ(s.size(), 1u);
+    PointViewPtr v = *s.begin();
+    EXPECT_EQ(v->size(), 1000u);
+
+    // https://github.com/PDAL/PDAL/issues/1063
+    for (PointId idx = 0; idx < v->size(); ++idx)
+        EXPECT_EQ(8, v->getFieldAs<int>(Dimension::Id::ClassFlags, idx));
+
+    // https://github.com/PDAL/PDAL/issues/1064
+    MetadataNode m = r.getMetadata();
+    m = m.findChild("global_encoding");
+    EXPECT_EQ(17, m.value<int>());
+
+    // https://github.com/PDAL/PDAL/issues/1065
+    SpatialReference ref = v->spatialReference();
+    std::string wkt = "GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]";
+    EXPECT_EQ(ref.getWKT(), wkt);
+}
 
 /**
 namespace
@@ -647,79 +758,3 @@ TEST(LasWriterTest, simple)
 }
 **/
 
-//ABELL
-/**
-static void test_a_format(const std::string& refFile, uint8_t majorVersion,
-    uint8_t minorVersion, int pointFormat)
-{
-    PointTable table;
-
-    // remove file from earlier run, if needed
-    FileUtils::deleteFile("temp.las");
-
-    std::string directory = "las/permutations/";
-    Options readerOpts;
-    readerOpts.add("filename", Support::datapath(directory + "1.2_3.las"));
-
-    std::shared_ptr<LasReader> reader(new LasReader);
-    reader->setOptions(readerOpts);
-
-    Options writerOpts;
-    writerOpts.add("compression", false);
-    writerOpts.add("creation_doy", 78);
-    writerOpts.add("creation_year", 2008);
-    writerOpts.add("format", pointFormat);
-    writerOpts.add("minor_version", (unsigned)minorVersion);
-    writerOpts.add("system_id", "libLAS");
-    writerOpts.add("software_id", "libLAS 1.2");
-    writerOpts.add<boost::uuids::uuuid>("project_id",
-        "8388f1b8-aa1b-4108-bca3-6bc68e7b062e");
-//    writerOpts.add("project_id", boost::lexical_cast<boost::uuids::uuid>(
-//        "8388f1b8-aa1b-4108-bca3-6bc68e7b062e");
-
-    std::ostream* ofs = FileUtils::createFile(Support::temppath("temp.las"));
-
-    // need to scope the writer, so that's it dtor can use the stream
-    std::shared_ptr<LasWriter> writer(new LasWriter)(ofs);
-    writer->setOptions(writerOpts);
-    writer->setInput(&reader);
-
-    writer->prepare(table);
-    writer->execute(table);
-
-    bool filesSame = Support::compare_files("temp.las",
-        Support::datapath(directory + refFile));
-    EXPECT_TRUE(filesSame);
-    if (filesSame)
-        FileUtils::deleteFile(Support::temppath("temp.las"));
-    else
-        exit(0);
-}
-**/
-
-
-//ABELL
-/**
-TEST(LasWriterTest, version1_0)
-{
-    test_a_format("1.0_0.las", 1, 0, 0);
-    test_a_format("1.0_1.las", 1, 0, 1);
-}
-
-
-TEST(LasWriterTest, version1_1)
-{
-    test_a_format("1.1_0.las", 1, 1, 0);
-    test_a_format("1.1_1.las", 1, 1, 1);
-}
-
-
-TEST(LasWriterTest, version1_2)
-{
-    test_a_format("1.2_0.las", 1, 2, 0);
-    test_a_format("1.2_1.las", 1, 2, 1);
-    test_a_format("1.2_2.las", 1, 2, 2);
-    test_a_format("1.2_3.las", 1, 2, 3);
-}
-**/
-
diff --git a/test/unit/io/optech/OptechReaderTest.cpp b/test/unit/io/optech/OptechReaderTest.cpp
index 2aeacd9..1857a38 100644
--- a/test/unit/io/optech/OptechReaderTest.cpp
+++ b/test/unit/io/optech/OptechReaderTest.cpp
@@ -76,8 +76,8 @@ TEST(OptechReader, Constructor)
     OptechReader reader1;
 
     StageFactory f;
-    std::unique_ptr<Stage> reader2(f.createStage("readers.optech"));
-    EXPECT_TRUE(reader2.get());
+    Stage* reader2 = f.createStage("readers.optech");
+    EXPECT_TRUE(reader2);
 }
 
 
diff --git a/test/unit/io/ply/PlyReaderTest.cpp b/test/unit/io/ply/PlyReaderTest.cpp
index dc40de3..f8f2102 100644
--- a/test/unit/io/ply/PlyReaderTest.cpp
+++ b/test/unit/io/ply/PlyReaderTest.cpp
@@ -56,8 +56,8 @@ TEST(PlyReader, Constructor)
     PlyReader reader1;
 
     StageFactory f;
-    std::unique_ptr<Stage> reader2(f.createStage("readers.ply"));
-    EXPECT_TRUE(reader2.get());
+    Stage* reader2(f.createStage("readers.ply"));
+    EXPECT_TRUE(reader2);
 }
 
 
diff --git a/test/unit/io/ply/PlyWriterTest.cpp b/test/unit/io/ply/PlyWriterTest.cpp
index 2ba6bf8..aa47563 100644
--- a/test/unit/io/ply/PlyWriterTest.cpp
+++ b/test/unit/io/ply/PlyWriterTest.cpp
@@ -49,8 +49,8 @@ TEST(PlyWriter, Constructor)
     PlyWriter writer1;
 
     StageFactory f;
-    std::unique_ptr<Stage> writer2(f.createStage("writers.ply"));
-    EXPECT_TRUE(writer2.get());
+    Stage* writer2(f.createStage("writers.ply"));
+    EXPECT_TRUE(writer2);
 }
 
 
diff --git a/test/unit/io/sbet/SbetReaderTest.cpp b/test/unit/io/sbet/SbetReaderTest.cpp
index c81c992..8d200c2 100644
--- a/test/unit/io/sbet/SbetReaderTest.cpp
+++ b/test/unit/io/sbet/SbetReaderTest.cpp
@@ -35,7 +35,6 @@
 #include <pdal/pdal_test_main.hpp>
 
 #include <pdal/Options.hpp>
-#include <pdal/PipelineReader.hpp>
 #include <pdal/PipelineManager.hpp>
 #include <pdal/PointView.hpp>
 
@@ -126,11 +125,22 @@ TEST(SbetReaderTest, testBadFile)
     EXPECT_THROW(reader->execute(table), pdal_error);
 }
 
-TEST(SbetReaderTest, testPipeline)
+TEST(SbetReaderTest, testPipelineXML)
 {
     PipelineManager manager;
-    PipelineReader reader(manager);
-    reader.readPipeline(Support::configuredpath("sbet/pipeline.xml"));
+
+    manager.readPipeline(Support::configuredpath("sbet/pipeline.xml"));
+
+    point_count_t numPoints = manager.execute();
+    EXPECT_EQ(numPoints, 2u);
+    FileUtils::deleteFile(Support::datapath("sbet/outfile.txt"));
+}
+
+TEST(SbetReaderTest, testPipelineJSON)
+{
+    PipelineManager manager;
+
+    manager.readPipeline(Support::configuredpath("sbet/pipeline.json"));
 
     point_count_t numPoints = manager.execute();
     EXPECT_EQ(numPoints, 2u);
diff --git a/test/unit/io/terrasolid/TerrasolidReaderTest.cpp b/test/unit/io/terrasolid/TerrasolidReaderTest.cpp
index 88d5ec3..f2d54e4 100644
--- a/test/unit/io/terrasolid/TerrasolidReaderTest.cpp
+++ b/test/unit/io/terrasolid/TerrasolidReaderTest.cpp
@@ -76,7 +76,7 @@ TEST(TerrasolidReader, Constructor)
     TerrasolidReader reader1;
 
     StageFactory f;
-    std::unique_ptr<Stage> reader2(f.createStage("readers.terrasolid"));
+    Stage* reader2(f.createStage("readers.terrasolid"));
 }
 
 
diff --git a/test/unit/io/text/TextReaderTest.cpp b/test/unit/io/text/TextReaderTest.cpp
new file mode 100644
index 0000000..72266af
--- /dev/null
+++ b/test/unit/io/text/TextReaderTest.cpp
@@ -0,0 +1,99 @@
+/******************************************************************************
+ * Copyright (c) 2016, Hobu Inc. (info at hobu.co)
+ *
+ * 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 in
+ *       the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of Hobu, Inc. nor the
+ *       names of its contributors may be used to endorse or promote
+ *       products derived from this software without specific prior
+ *       written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ ****************************************************************************/
+
+#include <pdal/pdal_test_main.hpp>
+
+#include "Support.hpp"
+
+#include <LasReader.hpp>
+#include <TextReader.hpp>
+
+using namespace pdal;
+
+void compareTextLas(const std::string& textFilename,
+    const std::string& lasFilename)
+{
+    TextReader t;
+    Options to;
+    to.add("filename", textFilename);
+    t.setOptions(to);
+
+    LasReader l;
+    Options lo;
+    lo.add("filename", lasFilename);
+    l.setOptions(lo);
+    
+    PointTable tt;
+    t.prepare(tt);
+    PointViewSet ts = t.execute(tt);
+    EXPECT_EQ(ts.size(), 1U);
+    PointViewPtr tv = *ts.begin();
+
+    PointTable lt;
+    l.prepare(lt);
+    PointViewSet ls = l.execute(lt);
+    EXPECT_EQ(ls.size(), 1U);
+    PointViewPtr lv = *ls.begin();
+
+    EXPECT_EQ(tv->size(), lv->size());
+
+    // Validate some point data.
+    for (PointId i = 0; i < lv->size(); ++i)
+    {
+       EXPECT_DOUBLE_EQ(tv->getFieldAs<double>(Dimension::Id::X, i),
+           lv->getFieldAs<double>(Dimension::Id::X, i));
+       EXPECT_DOUBLE_EQ(tv->getFieldAs<double>(Dimension::Id::Y, i),
+           lv->getFieldAs<double>(Dimension::Id::Y, i));
+       EXPECT_DOUBLE_EQ(tv->getFieldAs<double>(Dimension::Id::Z, i),
+           lv->getFieldAs<double>(Dimension::Id::Z, i));
+    }
+}
+
+TEST(TextReaderTest, t1)
+{
+    compareTextLas(Support::datapath("text/utm17_1.txt"),
+        Support::datapath("las/utm17.las"));
+}
+
+TEST(TextReaderTest, t2)
+{
+    compareTextLas(Support::datapath("text/utm17_2.txt"),
+        Support::datapath("las/utm17.las"));
+}
+
+TEST(TextReaderTest, t3)
+{
+    compareTextLas(Support::datapath("text/utm17_3.txt"),
+        Support::datapath("las/utm17.las"));
+}
diff --git a/tools/lasdump/CMakeLists.txt b/tools/lasdump/CMakeLists.txt
index 8485b0c..7904a53 100644
--- a/tools/lasdump/CMakeLists.txt
+++ b/tools/lasdump/CMakeLists.txt
@@ -41,5 +41,8 @@ if (LASZIP_FOUND)
         ${PDAL_UTIL_LIB_NAME}
         ${LASZIP_LIBRARIES}
     )
+    if (WIN32)
+        target_link_libraries(lasdump wsock32 ws2_32)
+    endif()
 endif()
 
diff --git a/tools/lasdump/Header.cpp b/tools/lasdump/Header.cpp
index cbef398..0332df2 100644
--- a/tools/lasdump/Header.cpp
+++ b/tools/lasdump/Header.cpp
@@ -35,9 +35,6 @@
 #include "Header.hpp"
 #include "Lasdump.hpp"
 
-#include <boost/uuid/uuid_generators.hpp>
-#include <boost/uuid/uuid_io.hpp>
-
 namespace pdal
 {
 namespace lasdump
@@ -96,26 +93,17 @@ bool Header::valid() const
     return true;
 }
 
-
-void Header::get(ILeStream& in, boost::uuids::uuid& uuid)
+namespace
 {
-    union
-    {
-        char buf[16];
-        struct
-        {
-            uint32_t uidPart1;
-            uint16_t uidPart2;
-            uint16_t uidPart3;
-            char uidPart4[8];
-        };
-    } u;
-
-    in >> u.uidPart1 >> u.uidPart2 >> u.uidPart3;
-    in.get(u.uidPart4, sizeof(u.uidPart4));
-    memcpy(uuid.data, u.buf, sizeof(u.buf));
+void get(ILeStream& in, Uuid& uuid)
+{
+    char buf[uuid.size];
+
+    in.get(buf, uuid.size);
+    uuid.unpack(buf);
 }
 
+} // unnamed namespace;
 
 ILeStream& operator>>(ILeStream& in, Header& h)
 {
@@ -127,7 +115,7 @@ ILeStream& operator>>(ILeStream& in, Header& h)
     if (!h.signatureValid())
         throw Exception("Not a LAS/LAZ file.  Invalid file signature.");
     in >> h.m_sourceId >> h.m_globalEncoding;
-    Header::get(in, h.m_projectGuid);
+    get(in, h.m_projectGuid);
     in >> versionMajor >> h.m_versionMinor;
     in.get(h.m_systemId, 32);
 
diff --git a/tools/lasdump/Header.hpp b/tools/lasdump/Header.hpp
index 5909728..31c7a94 100644
--- a/tools/lasdump/Header.hpp
+++ b/tools/lasdump/Header.hpp
@@ -35,11 +35,11 @@
 #pragma once
 
 #include <array>
-
-#include <boost/uuid/uuid_generators.hpp>
+#include <cassert>
 
 #include <pdal/util/Bounds.hpp>
 #include <pdal/util/IStream.hpp>
+#include <pdal/util/Uuid.hpp>
 
 namespace pdal
 {
@@ -72,7 +72,7 @@ public:
 
     /// Get project identifier.
     /// \return Global Unique Identifier as an instance of liblas::guid class.
-    boost::uuids::uuid projectId() const
+    Uuid projectId() const
         { return m_projectGuid; }
 
     /// Get the LAS major version.
@@ -316,7 +316,7 @@ private:
     std::string m_fileSig;
     uint16_t m_sourceId;
     uint16_t m_globalEncoding;
-    boost::uuids::uuid m_projectGuid;
+    Uuid m_projectGuid;
     uint8_t m_versionMinor;
     std::string m_systemId;
     std::string m_softwareId;
@@ -336,8 +336,6 @@ private:
     uint32_t m_eVlrCount;
     BOX3D m_bounds;
     std::string m_compressionInfo;
-
-    static void get(ILeStream& in, boost::uuids::uuid& uuid);
 };
 
 } // namespace lasdump
diff --git a/vendor/jsoncpp-1.6.2/dist/json/json-forwards.h b/vendor/jsoncpp-1.6.2/dist/json/json-forwards.h
new file mode 100644
index 0000000..ccbdb2b
--- /dev/null
+++ b/vendor/jsoncpp-1.6.2/dist/json/json-forwards.h
@@ -0,0 +1,255 @@
+/// Json-cpp amalgated forward header (http://jsoncpp.sourceforge.net/).
+/// It is intended to be used with #include "json/json-forwards.h"
+/// This header provides forward declaration for all JsonCpp types.
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: LICENSE
+// //////////////////////////////////////////////////////////////////////
+
+/*
+The JsonCpp library's source code, including accompanying documentation, 
+tests and demonstration applications, are licensed under the following
+conditions...
+
+The author (Baptiste Lepilleur) explicitly disclaims copyright in all 
+jurisdictions which recognize such a disclaimer. In such jurisdictions, 
+this software is released into the Public Domain.
+
+In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
+2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
+released under the terms of the MIT License (see below).
+
+In jurisdictions which recognize Public Domain property, the user of this 
+software may choose to accept it either as 1) Public Domain, 2) under the 
+conditions of the MIT License (see below), or 3) under the terms of dual 
+Public Domain/MIT License conditions described here, as they choose.
+
+The MIT License is about as close to Public Domain as a license can get, and is
+described in clear, concise terms at:
+
+   http://en.wikipedia.org/wiki/MIT_License
+   
+The full text of the MIT License follows:
+
+========================================================================
+Copyright (c) 2007-2010 Baptiste Lepilleur
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+========================================================================
+(END LICENSE TEXT)
+
+The MIT license is compatible with both the GPL and commercial
+software, affording one all of the rights of Public Domain with the
+minor nuisance of being required to keep the above copyright notice
+and license text in the source code. Note also that by accepting the
+Public Domain "license" you can re-license your copy using whatever
+license you like.
+
+*/
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: LICENSE
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+#ifndef JSON_FORWARD_AMALGATED_H_INCLUDED
+# define JSON_FORWARD_AMALGATED_H_INCLUDED
+/// If defined, indicates that the source file is amalgated
+/// to prevent private header inclusion.
+#define JSON_IS_AMALGAMATION
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/config.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_CONFIG_H_INCLUDED
+#define JSON_CONFIG_H_INCLUDED
+
+/// If defined, indicates that json library is embedded in CppTL library.
+//# define JSON_IN_CPPTL 1
+
+/// If defined, indicates that json may leverage CppTL library
+//#  define JSON_USE_CPPTL 1
+/// If defined, indicates that cpptl vector based map should be used instead of
+/// std::map
+/// as Value container.
+//#  define JSON_USE_CPPTL_SMALLMAP 1
+
+// If non-zero, the library uses exceptions to report bad input instead of C
+// assertion macros. The default is to use exceptions.
+#ifndef JSON_USE_EXCEPTION
+#define JSON_USE_EXCEPTION 1
+#endif
+
+/// If defined, indicates that the source file is amalgated
+/// to prevent private header inclusion.
+/// Remarks: it is automatically defined in the generated amalgated header.
+// #define JSON_IS_AMALGAMATION
+
+#ifdef JSON_IN_CPPTL
+#include <cpptl/config.h>
+#ifndef JSON_USE_CPPTL
+#define JSON_USE_CPPTL 1
+#endif
+#endif
+
+#ifdef JSON_IN_CPPTL
+#define JSON_API CPPTL_API
+#elif defined(JSON_DLL_BUILD)
+#if defined(_MSC_VER)
+#define JSON_API __declspec(dllexport)
+#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
+#endif // if defined(_MSC_VER)
+#elif defined(JSON_DLL)
+#if defined(_MSC_VER)
+#define JSON_API __declspec(dllimport)
+#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
+#endif // if defined(_MSC_VER)
+#endif // ifdef JSON_IN_CPPTL
+#if !defined(JSON_API)
+#define JSON_API
+#endif
+
+// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for
+// integer
+// Storages, and 64 bits integer support is disabled.
+// #define JSON_NO_INT64 1
+
+#if defined(_MSC_VER) && _MSC_VER <= 1200 // MSVC 6
+// Microsoft Visual Studio 6 only support conversion from __int64 to double
+// (no conversion from unsigned __int64).
+#define JSON_USE_INT64_DOUBLE_CONVERSION 1
+// Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255'
+// characters in the debug information)
+// All projects I've ever seen with VS6 were using this globally (not bothering
+// with pragma push/pop).
+#pragma warning(disable : 4786)
+#endif // if defined(_MSC_VER)  &&  _MSC_VER < 1200 // MSVC 6
+
+#if defined(_MSC_VER) && _MSC_VER >= 1500 // MSVC 2008
+/// Indicates that the following function is deprecated.
+#define JSONCPP_DEPRECATED(message) __declspec(deprecated(message))
+#elif defined(__clang__) && defined(__has_feature)
+#if __has_feature(attribute_deprecated_with_message)
+#define JSONCPP_DEPRECATED(message)  __attribute__ ((deprecated(message)))
+#endif
+#elif defined(__GNUC__) &&  (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
+#define JSONCPP_DEPRECATED(message)  __attribute__ ((deprecated(message)))
+#elif defined(__GNUC__) &&  (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
+#define JSONCPP_DEPRECATED(message)  __attribute__((__deprecated__))
+#endif
+
+#if !defined(JSONCPP_DEPRECATED)
+#define JSONCPP_DEPRECATED(message)
+#endif // if !defined(JSONCPP_DEPRECATED)
+
+namespace Json {
+typedef int Int;
+typedef unsigned int UInt;
+#if defined(JSON_NO_INT64)
+typedef int LargestInt;
+typedef unsigned int LargestUInt;
+#undef JSON_HAS_INT64
+#else                 // if defined(JSON_NO_INT64)
+// For Microsoft Visual use specific types as long long is not supported
+#if defined(_MSC_VER) // Microsoft Visual Studio
+typedef __int64 Int64;
+typedef unsigned __int64 UInt64;
+#else                 // if defined(_MSC_VER) // Other platforms, use long long
+typedef long long int Int64;
+typedef unsigned long long int UInt64;
+#endif // if defined(_MSC_VER)
+typedef Int64 LargestInt;
+typedef UInt64 LargestUInt;
+#define JSON_HAS_INT64
+#endif // if defined(JSON_NO_INT64)
+} // end namespace Json
+
+#endif // JSON_CONFIG_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/config.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/forwards.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_FORWARDS_H_INCLUDED
+#define JSON_FORWARDS_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "config.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+
+// writer.h
+class FastWriter;
+class StyledWriter;
+
+// reader.h
+class Reader;
+
+// features.h
+class Features;
+
+// value.h
+typedef unsigned int ArrayIndex;
+class StaticString;
+class Path;
+class PathArgument;
+class Value;
+class ValueIteratorBase;
+class ValueIterator;
+class ValueConstIterator;
+
+} // namespace Json
+
+#endif // JSON_FORWARDS_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/forwards.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+#endif //ifndef JSON_FORWARD_AMALGATED_H_INCLUDED
diff --git a/vendor/jsoncpp-1.6.2/dist/json/json.h b/vendor/jsoncpp-1.6.2/dist/json/json.h
new file mode 100644
index 0000000..97429c1
--- /dev/null
+++ b/vendor/jsoncpp-1.6.2/dist/json/json.h
@@ -0,0 +1,2013 @@
+/// Json-cpp amalgated header (http://jsoncpp.sourceforge.net/).
+/// It is intended to be used with #include "json/json.h"
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: LICENSE
+// //////////////////////////////////////////////////////////////////////
+
+/*
+The JsonCpp library's source code, including accompanying documentation, 
+tests and demonstration applications, are licensed under the following
+conditions...
+
+The author (Baptiste Lepilleur) explicitly disclaims copyright in all 
+jurisdictions which recognize such a disclaimer. In such jurisdictions, 
+this software is released into the Public Domain.
+
+In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
+2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
+released under the terms of the MIT License (see below).
+
+In jurisdictions which recognize Public Domain property, the user of this 
+software may choose to accept it either as 1) Public Domain, 2) under the 
+conditions of the MIT License (see below), or 3) under the terms of dual 
+Public Domain/MIT License conditions described here, as they choose.
+
+The MIT License is about as close to Public Domain as a license can get, and is
+described in clear, concise terms at:
+
+   http://en.wikipedia.org/wiki/MIT_License
+   
+The full text of the MIT License follows:
+
+========================================================================
+Copyright (c) 2007-2010 Baptiste Lepilleur
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+========================================================================
+(END LICENSE TEXT)
+
+The MIT license is compatible with both the GPL and commercial
+software, affording one all of the rights of Public Domain with the
+minor nuisance of being required to keep the above copyright notice
+and license text in the source code. Note also that by accepting the
+Public Domain "license" you can re-license your copy using whatever
+license you like.
+
+*/
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: LICENSE
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+#ifndef JSON_AMALGATED_H_INCLUDED
+# define JSON_AMALGATED_H_INCLUDED
+/// If defined, indicates that the source file is amalgated
+/// to prevent private header inclusion.
+#define JSON_IS_AMALGAMATION
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/version.h
+// //////////////////////////////////////////////////////////////////////
+
+// DO NOT EDIT. This file is generated by CMake from  "version"
+// and "version.h.in" files.
+// Run CMake configure step to update it.
+#ifndef JSON_VERSION_H_INCLUDED
+# define JSON_VERSION_H_INCLUDED
+
+# define JSONCPP_VERSION_STRING "1.6.2"
+# define JSONCPP_VERSION_MAJOR 1
+# define JSONCPP_VERSION_MINOR 6
+# define JSONCPP_VERSION_PATCH 2
+# define JSONCPP_VERSION_QUALIFIER
+# define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8))
+
+#endif // JSON_VERSION_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/version.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/config.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_CONFIG_H_INCLUDED
+#define JSON_CONFIG_H_INCLUDED
+
+/// If defined, indicates that json library is embedded in CppTL library.
+//# define JSON_IN_CPPTL 1
+
+/// If defined, indicates that json may leverage CppTL library
+//#  define JSON_USE_CPPTL 1
+/// If defined, indicates that cpptl vector based map should be used instead of
+/// std::map
+/// as Value container.
+//#  define JSON_USE_CPPTL_SMALLMAP 1
+
+// If non-zero, the library uses exceptions to report bad input instead of C
+// assertion macros. The default is to use exceptions.
+#ifndef JSON_USE_EXCEPTION
+#define JSON_USE_EXCEPTION 1
+#endif
+
+/// If defined, indicates that the source file is amalgated
+/// to prevent private header inclusion.
+/// Remarks: it is automatically defined in the generated amalgated header.
+// #define JSON_IS_AMALGAMATION
+
+#ifdef JSON_IN_CPPTL
+#include <cpptl/config.h>
+#ifndef JSON_USE_CPPTL
+#define JSON_USE_CPPTL 1
+#endif
+#endif
+
+#ifdef JSON_IN_CPPTL
+#define JSON_API CPPTL_API
+#elif defined(JSON_DLL_BUILD)
+#if defined(_MSC_VER)
+#define JSON_API __declspec(dllexport)
+#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
+#endif // if defined(_MSC_VER)
+#elif defined(JSON_DLL)
+#if defined(_MSC_VER)
+#define JSON_API __declspec(dllimport)
+#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
+#endif // if defined(_MSC_VER)
+#endif // ifdef JSON_IN_CPPTL
+#if !defined(JSON_API)
+#define JSON_API
+#endif
+
+// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for
+// integer
+// Storages, and 64 bits integer support is disabled.
+// #define JSON_NO_INT64 1
+
+#if defined(_MSC_VER) && _MSC_VER <= 1200 // MSVC 6
+// Microsoft Visual Studio 6 only support conversion from __int64 to double
+// (no conversion from unsigned __int64).
+#define JSON_USE_INT64_DOUBLE_CONVERSION 1
+// Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255'
+// characters in the debug information)
+// All projects I've ever seen with VS6 were using this globally (not bothering
+// with pragma push/pop).
+#pragma warning(disable : 4786)
+#endif // if defined(_MSC_VER)  &&  _MSC_VER < 1200 // MSVC 6
+
+#if defined(_MSC_VER) && _MSC_VER >= 1500 // MSVC 2008
+/// Indicates that the following function is deprecated.
+#define JSONCPP_DEPRECATED(message) __declspec(deprecated(message))
+#elif defined(__clang__) && defined(__has_feature)
+#if __has_feature(attribute_deprecated_with_message)
+#define JSONCPP_DEPRECATED(message)  __attribute__ ((deprecated(message)))
+#endif
+#elif defined(__GNUC__) &&  (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
+#define JSONCPP_DEPRECATED(message)  __attribute__ ((deprecated(message)))
+#elif defined(__GNUC__) &&  (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
+#define JSONCPP_DEPRECATED(message)  __attribute__((__deprecated__))
+#endif
+
+#if !defined(JSONCPP_DEPRECATED)
+#define JSONCPP_DEPRECATED(message)
+#endif // if !defined(JSONCPP_DEPRECATED)
+
+namespace Json {
+typedef int Int;
+typedef unsigned int UInt;
+#if defined(JSON_NO_INT64)
+typedef int LargestInt;
+typedef unsigned int LargestUInt;
+#undef JSON_HAS_INT64
+#else                 // if defined(JSON_NO_INT64)
+// For Microsoft Visual use specific types as long long is not supported
+#if defined(_MSC_VER) // Microsoft Visual Studio
+typedef __int64 Int64;
+typedef unsigned __int64 UInt64;
+#else                 // if defined(_MSC_VER) // Other platforms, use long long
+typedef long long int Int64;
+typedef unsigned long long int UInt64;
+#endif // if defined(_MSC_VER)
+typedef Int64 LargestInt;
+typedef UInt64 LargestUInt;
+#define JSON_HAS_INT64
+#endif // if defined(JSON_NO_INT64)
+} // end namespace Json
+
+#endif // JSON_CONFIG_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/config.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/forwards.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_FORWARDS_H_INCLUDED
+#define JSON_FORWARDS_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "config.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+
+// writer.h
+class FastWriter;
+class StyledWriter;
+
+// reader.h
+class Reader;
+
+// features.h
+class Features;
+
+// value.h
+typedef unsigned int ArrayIndex;
+class StaticString;
+class Path;
+class PathArgument;
+class Value;
+class ValueIteratorBase;
+class ValueIterator;
+class ValueConstIterator;
+
+} // namespace Json
+
+#endif // JSON_FORWARDS_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/forwards.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/features.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef CPPTL_JSON_FEATURES_H_INCLUDED
+#define CPPTL_JSON_FEATURES_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "forwards.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+
+/** \brief Configuration passed to reader and writer.
+ * This configuration object can be used to force the Reader or Writer
+ * to behave in a standard conforming way.
+ */
+class JSON_API Features {
+public:
+  /** \brief A configuration that allows all features and assumes all strings
+   * are UTF-8.
+   * - C & C++ comments are allowed
+   * - Root object can be any JSON value
+   * - Assumes Value strings are encoded in UTF-8
+   */
+  static Features all();
+
+  /** \brief A configuration that is strictly compatible with the JSON
+   * specification.
+   * - Comments are forbidden.
+   * - Root object must be either an array or an object value.
+   * - Assumes Value strings are encoded in UTF-8
+   */
+  static Features strictMode();
+
+  /** \brief Initialize the configuration like JsonConfig::allFeatures;
+   */
+  Features();
+
+  /// \c true if comments are allowed. Default: \c true.
+  bool allowComments_;
+
+  /// \c true if root must be either an array or an object value. Default: \c
+  /// false.
+  bool strictRoot_;
+
+  /// \c true if dropped null placeholders are allowed. Default: \c false.
+  bool allowDroppedNullPlaceholders_;
+
+  /// \c true if numeric object key are allowed. Default: \c false.
+  bool allowNumericKeys_;
+};
+
+} // namespace Json
+
+#endif // CPPTL_JSON_FEATURES_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/features.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/value.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef CPPTL_JSON_H_INCLUDED
+#define CPPTL_JSON_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "forwards.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <string>
+#include <vector>
+#include <exception>
+
+#ifndef JSON_USE_CPPTL_SMALLMAP
+#include <map>
+#else
+#include <cpptl/smallmap.h>
+#endif
+#ifdef JSON_USE_CPPTL
+#include <cpptl/forwards.h>
+#endif
+
+// Disable warning C4251: <data member>: <type> needs to have dll-interface to
+// be used by...
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(push)
+#pragma warning(disable : 4251)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+/** \brief JSON (JavaScript Object Notation).
+ */
+namespace Json {
+
+/** Base class for all exceptions we throw.
+ *
+ * We use nothing but these internally. Of course, STL can throw others.
+ */
+class JSON_API Exception;
+/** Exceptions which the user cannot easily avoid.
+ *
+ * E.g. out-of-memory (when we use malloc), stack-overflow, malicious input
+ * 
+ * \remark derived from Json::Exception
+ */
+class JSON_API RuntimeError;
+/** Exceptions thrown by JSON_ASSERT/JSON_FAIL macros.
+ *
+ * These are precondition-violations (user bugs) and internal errors (our bugs).
+ * 
+ * \remark derived from Json::Exception
+ */
+class JSON_API LogicError;
+
+/// used internally
+void throwRuntimeError(std::string const& msg);
+/// used internally
+void throwLogicError(std::string const& msg);
+
+/** \brief Type of the value held by a Value object.
+ */
+enum ValueType {
+  nullValue = 0, ///< 'null' value
+  intValue,      ///< signed integer value
+  uintValue,     ///< unsigned integer value
+  realValue,     ///< double value
+  stringValue,   ///< UTF-8 string value
+  booleanValue,  ///< bool value
+  arrayValue,    ///< array value (ordered list)
+  objectValue    ///< object value (collection of name/value pairs).
+};
+
+enum CommentPlacement {
+  commentBefore = 0,      ///< a comment placed on the line before a value
+  commentAfterOnSameLine, ///< a comment just after a value on the same line
+  commentAfter, ///< a comment on the line after a value (only make sense for
+  /// root value)
+  numberOfCommentPlacement
+};
+
+//# ifdef JSON_USE_CPPTL
+//   typedef CppTL::AnyEnumerator<const char *> EnumMemberNames;
+//   typedef CppTL::AnyEnumerator<const Value &> EnumValues;
+//# endif
+
+/** \brief Lightweight wrapper to tag static string.
+ *
+ * Value constructor and objectValue member assignement takes advantage of the
+ * StaticString and avoid the cost of string duplication when storing the
+ * string or the member name.
+ *
+ * Example of usage:
+ * \code
+ * Json::Value aValue( StaticString("some text") );
+ * Json::Value object;
+ * static const StaticString code("code");
+ * object[code] = 1234;
+ * \endcode
+ */
+class JSON_API StaticString {
+public:
+  explicit StaticString(const char* czstring) : c_str_(czstring) {}
+
+  operator const char*() const { return c_str_; }
+
+  const char* c_str() const { return c_str_; }
+
+private:
+  const char* c_str_;
+};
+
+/** \brief Represents a <a HREF="http://www.json.org">JSON</a> value.
+ *
+ * This class is a discriminated union wrapper that can represents a:
+ * - signed integer [range: Value::minInt - Value::maxInt]
+ * - unsigned integer (range: 0 - Value::maxUInt)
+ * - double
+ * - UTF-8 string
+ * - boolean
+ * - 'null'
+ * - an ordered list of Value
+ * - collection of name/value pairs (javascript object)
+ *
+ * The type of the held value is represented by a #ValueType and
+ * can be obtained using type().
+ *
+ * Values of an #objectValue or #arrayValue can be accessed using operator[]()
+ * methods.
+ * Non-const methods will automatically create the a #nullValue element
+ * if it does not exist.
+ * The sequence of an #arrayValue will be automatically resized and initialized
+ * with #nullValue. resize() can be used to enlarge or truncate an #arrayValue.
+ *
+ * The get() methods can be used to obtain default value in the case the
+ * required element does not exist.
+ *
+ * It is possible to iterate over the list of a #objectValue values using
+ * the getMemberNames() method.
+ *
+ * \note #Value string-length fit in size_t, but keys must be < 2^30.
+ * (The reason is an implementation detail.) A #CharReader will raise an
+ * exception if a bound is exceeded to avoid security holes in your app,
+ * but the Value API does *not* check bounds. That is the responsibility
+ * of the caller.
+ */
+class JSON_API Value {
+  friend class ValueIteratorBase;
+public:
+  typedef std::vector<std::string> Members;
+  typedef ValueIterator iterator;
+  typedef ValueConstIterator const_iterator;
+  typedef Json::UInt UInt;
+  typedef Json::Int Int;
+#if defined(JSON_HAS_INT64)
+  typedef Json::UInt64 UInt64;
+  typedef Json::Int64 Int64;
+#endif // defined(JSON_HAS_INT64)
+  typedef Json::LargestInt LargestInt;
+  typedef Json::LargestUInt LargestUInt;
+  typedef Json::ArrayIndex ArrayIndex;
+
+  static const Value& null;  ///< We regret this reference to a global instance; prefer the simpler Value().
+  static const Value& nullRef;  ///< just a kludge for binary-compatibility; same as null
+  /// Minimum signed integer value that can be stored in a Json::Value.
+  static const LargestInt minLargestInt;
+  /// Maximum signed integer value that can be stored in a Json::Value.
+  static const LargestInt maxLargestInt;
+  /// Maximum unsigned integer value that can be stored in a Json::Value.
+  static const LargestUInt maxLargestUInt;
+
+  /// Minimum signed int value that can be stored in a Json::Value.
+  static const Int minInt;
+  /// Maximum signed int value that can be stored in a Json::Value.
+  static const Int maxInt;
+  /// Maximum unsigned int value that can be stored in a Json::Value.
+  static const UInt maxUInt;
+
+#if defined(JSON_HAS_INT64)
+  /// Minimum signed 64 bits int value that can be stored in a Json::Value.
+  static const Int64 minInt64;
+  /// Maximum signed 64 bits int value that can be stored in a Json::Value.
+  static const Int64 maxInt64;
+  /// Maximum unsigned 64 bits int value that can be stored in a Json::Value.
+  static const UInt64 maxUInt64;
+#endif // defined(JSON_HAS_INT64)
+
+private:
+#ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
+  class CZString {
+  public:
+    enum DuplicationPolicy {
+      noDuplication = 0,
+      duplicate,
+      duplicateOnCopy
+    };
+    CZString(ArrayIndex index);
+    CZString(char const* str, unsigned length, DuplicationPolicy allocate);
+    CZString(CZString const& other);
+    ~CZString();
+    CZString& operator=(CZString other);
+    bool operator<(CZString const& other) const;
+    bool operator==(CZString const& other) const;
+    ArrayIndex index() const;
+    //const char* c_str() const; ///< \deprecated
+    char const* data() const;
+    unsigned length() const;
+    bool isStaticString() const;
+
+  private:
+    void swap(CZString& other);
+
+    struct StringStorage {
+      DuplicationPolicy policy_: 2;
+      unsigned length_: 30; // 1GB max
+    };
+
+    char const* cstr_;  // actually, a prefixed string, unless policy is noDup
+    union {
+      ArrayIndex index_;
+      StringStorage storage_;
+    };
+  };
+
+public:
+#ifndef JSON_USE_CPPTL_SMALLMAP
+  typedef std::map<CZString, Value> ObjectValues;
+#else
+  typedef CppTL::SmallMap<CZString, Value> ObjectValues;
+#endif // ifndef JSON_USE_CPPTL_SMALLMAP
+#endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
+
+public:
+  /** \brief Create a default Value of the given type.
+
+    This is a very useful constructor.
+    To create an empty array, pass arrayValue.
+    To create an empty object, pass objectValue.
+    Another Value can then be set to this one by assignment.
+This is useful since clear() and resize() will not alter types.
+
+    Examples:
+\code
+Json::Value null_value; // null
+Json::Value arr_value(Json::arrayValue); // []
+Json::Value obj_value(Json::objectValue); // {}
+\endcode
+  */
+  Value(ValueType type = nullValue);
+  Value(Int value);
+  Value(UInt value);
+#if defined(JSON_HAS_INT64)
+  Value(Int64 value);
+  Value(UInt64 value);
+#endif // if defined(JSON_HAS_INT64)
+  Value(double value);
+  Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.)
+  Value(const char* beginValue, const char* endValue); ///< Copy all, incl zeroes.
+  /** \brief Constructs a value from a static string.
+
+   * Like other value string constructor but do not duplicate the string for
+   * internal storage. The given string must remain alive after the call to this
+   * constructor.
+   * \note This works only for null-terminated strings. (We cannot change the
+   *   size of this class, so we have nowhere to store the length,
+   *   which might be computed later for various operations.)
+   *
+   * Example of usage:
+   * \code
+   * static StaticString foo("some text");
+   * Json::Value aValue(foo);
+   * \endcode
+   */
+  Value(const StaticString& value);
+  Value(const std::string& value); ///< Copy data() til size(). Embedded zeroes too.
+#ifdef JSON_USE_CPPTL
+  Value(const CppTL::ConstString& value);
+#endif
+  Value(bool value);
+  /// Deep copy.
+  Value(const Value& other);
+  ~Value();
+
+  /// Deep copy, then swap(other).
+  /// \note Over-write existing comments. To preserve comments, use #swapPayload().
+  Value& operator=(Value other);
+  /// Swap everything.
+  void swap(Value& other);
+  /// Swap values but leave comments and source offsets in place.
+  void swapPayload(Value& other);
+
+  ValueType type() const;
+
+  /// Compare payload only, not comments etc.
+  bool operator<(const Value& other) const;
+  bool operator<=(const Value& other) const;
+  bool operator>=(const Value& other) const;
+  bool operator>(const Value& other) const;
+  bool operator==(const Value& other) const;
+  bool operator!=(const Value& other) const;
+  int compare(const Value& other) const;
+
+  const char* asCString() const; ///< Embedded zeroes could cause you trouble!
+  std::string asString() const; ///< Embedded zeroes are possible.
+  /** Get raw char* of string-value.
+   *  \return false if !string. (Seg-fault if str or end are NULL.)
+   */
+  bool getString(
+      char const** str, char const** end) const;
+#ifdef JSON_USE_CPPTL
+  CppTL::ConstString asConstString() const;
+#endif
+  Int asInt() const;
+  UInt asUInt() const;
+#if defined(JSON_HAS_INT64)
+  Int64 asInt64() const;
+  UInt64 asUInt64() const;
+#endif // if defined(JSON_HAS_INT64)
+  LargestInt asLargestInt() const;
+  LargestUInt asLargestUInt() const;
+  float asFloat() const;
+  double asDouble() const;
+  bool asBool() const;
+
+  bool isNull() const;
+  bool isBool() const;
+  bool isInt() const;
+  bool isInt64() const;
+  bool isUInt() const;
+  bool isUInt64() const;
+  bool isIntegral() const;
+  bool isDouble() const;
+  bool isNumeric() const;
+  bool isString() const;
+  bool isArray() const;
+  bool isObject() const;
+
+  bool isConvertibleTo(ValueType other) const;
+
+  /// Number of values in array or object
+  ArrayIndex size() const;
+
+  /// \brief Return true if empty array, empty object, or null;
+  /// otherwise, false.
+  bool empty() const;
+
+  /// Return isNull()
+  bool operator!() const;
+
+  /// Remove all object members and array elements.
+  /// \pre type() is arrayValue, objectValue, or nullValue
+  /// \post type() is unchanged
+  void clear();
+
+  /// Resize the array to size elements.
+  /// New elements are initialized to null.
+  /// May only be called on nullValue or arrayValue.
+  /// \pre type() is arrayValue or nullValue
+  /// \post type() is arrayValue
+  void resize(ArrayIndex size);
+
+  /// Access an array element (zero based index ).
+  /// If the array contains less than index element, then null value are
+  /// inserted
+  /// in the array so that its size is index+1.
+  /// (You may need to say 'value[0u]' to get your compiler to distinguish
+  ///  this from the operator[] which takes a string.)
+  Value& operator[](ArrayIndex index);
+
+  /// Access an array element (zero based index ).
+  /// If the array contains less than index element, then null value are
+  /// inserted
+  /// in the array so that its size is index+1.
+  /// (You may need to say 'value[0u]' to get your compiler to distinguish
+  ///  this from the operator[] which takes a string.)
+  Value& operator[](int index);
+
+  /// Access an array element (zero based index )
+  /// (You may need to say 'value[0u]' to get your compiler to distinguish
+  ///  this from the operator[] which takes a string.)
+  const Value& operator[](ArrayIndex index) const;
+
+  /// Access an array element (zero based index )
+  /// (You may need to say 'value[0u]' to get your compiler to distinguish
+  ///  this from the operator[] which takes a string.)
+  const Value& operator[](int index) const;
+
+  /// If the array contains at least index+1 elements, returns the element
+  /// value,
+  /// otherwise returns defaultValue.
+  Value get(ArrayIndex index, const Value& defaultValue) const;
+  /// Return true if index < size().
+  bool isValidIndex(ArrayIndex index) const;
+  /// \brief Append value to array at the end.
+  ///
+  /// Equivalent to jsonvalue[jsonvalue.size()] = value;
+  Value& append(const Value& value);
+
+  /// Access an object value by name, create a null member if it does not exist.
+  /// \note Because of our implementation, keys are limited to 2^30 -1 chars.
+  ///  Exceeding that will cause an exception.
+  Value& operator[](const char* key);
+  /// Access an object value by name, returns null if there is no member with
+  /// that name.
+  const Value& operator[](const char* key) const;
+  /// Access an object value by name, create a null member if it does not exist.
+  /// \param key may contain embedded nulls.
+  Value& operator[](const std::string& key);
+  /// Access an object value by name, returns null if there is no member with
+  /// that name.
+  /// \param key may contain embedded nulls.
+  const Value& operator[](const std::string& key) const;
+  /** \brief Access an object value by name, create a null member if it does not
+   exist.
+
+   * If the object has no entry for that name, then the member name used to store
+   * the new entry is not duplicated.
+   * Example of use:
+   * \code
+   * Json::Value object;
+   * static const StaticString code("code");
+   * object[code] = 1234;
+   * \endcode
+   */
+  Value& operator[](const StaticString& key);
+#ifdef JSON_USE_CPPTL
+  /// Access an object value by name, create a null member if it does not exist.
+  Value& operator[](const CppTL::ConstString& key);
+  /// Access an object value by name, returns null if there is no member with
+  /// that name.
+  const Value& operator[](const CppTL::ConstString& key) const;
+#endif
+  /// Return the member named key if it exist, defaultValue otherwise.
+  /// \note deep copy
+  Value get(const char* key, const Value& defaultValue) const;
+  /// Return the member named key if it exist, defaultValue otherwise.
+  /// \note deep copy
+  /// \param key may contain embedded nulls.
+  Value get(const char* key, const char* end, const Value& defaultValue) const;
+  /// Return the member named key if it exist, defaultValue otherwise.
+  /// \note deep copy
+  /// \param key may contain embedded nulls.
+  Value get(const std::string& key, const Value& defaultValue) const;
+#ifdef JSON_USE_CPPTL
+  /// Return the member named key if it exist, defaultValue otherwise.
+  /// \note deep copy
+  Value get(const CppTL::ConstString& key, const Value& defaultValue) const;
+#endif
+  /// Most general and efficient version of isMember()const, get()const,
+  /// and operator[]const
+  /// \note As stated elsewhere, behavior is undefined if (end-key) >= 2^30
+  Value const* find(char const* key, char const* end) const;
+  /// Most general and efficient version of object-mutators.
+  /// \note As stated elsewhere, behavior is undefined if (end-key) >= 2^30
+  /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue.
+  Value const* demand(char const* key, char const* end);
+  /// \brief Remove and return the named member.
+  ///
+  /// Do nothing if it did not exist.
+  /// \return the removed Value, or null.
+  /// \pre type() is objectValue or nullValue
+  /// \post type() is unchanged
+  /// \deprecated
+  Value removeMember(const char* key);
+  /// Same as removeMember(const char*)
+  /// \param key may contain embedded nulls.
+  /// \deprecated
+  Value removeMember(const std::string& key);
+  /// Same as removeMember(const char* key, const char* end, Value* removed),
+  /// but 'key' is null-terminated.
+  bool removeMember(const char* key, Value* removed);
+  /** \brief Remove the named map member.
+
+      Update 'removed' iff removed.
+      \param key may contain embedded nulls.
+      \return true iff removed (no exceptions)
+  */
+  bool removeMember(std::string const& key, Value* removed);
+  /// Same as removeMember(std::string const& key, Value* removed)
+  bool removeMember(const char* key, const char* end, Value* removed);
+  /** \brief Remove the indexed array element.
+
+      O(n) expensive operations.
+      Update 'removed' iff removed.
+      \return true iff removed (no exceptions)
+  */
+  bool removeIndex(ArrayIndex i, Value* removed);
+
+  /// Return true if the object has a member named key.
+  /// \note 'key' must be null-terminated.
+  bool isMember(const char* key) const;
+  /// Return true if the object has a member named key.
+  /// \param key may contain embedded nulls.
+  bool isMember(const std::string& key) const;
+  /// Same as isMember(std::string const& key)const
+  bool isMember(const char* key, const char* end) const;
+#ifdef JSON_USE_CPPTL
+  /// Return true if the object has a member named key.
+  bool isMember(const CppTL::ConstString& key) const;
+#endif
+
+  /// \brief Return a list of the member names.
+  ///
+  /// If null, return an empty list.
+  /// \pre type() is objectValue or nullValue
+  /// \post if type() was nullValue, it remains nullValue
+  Members getMemberNames() const;
+
+  //# ifdef JSON_USE_CPPTL
+  //      EnumMemberNames enumMemberNames() const;
+  //      EnumValues enumValues() const;
+  //# endif
+
+  /// \deprecated Always pass len.
+  void setComment(const char* comment, CommentPlacement placement);
+  /// Comments must be //... or /* ... */
+  void setComment(const char* comment, size_t len, CommentPlacement placement);
+  /// Comments must be //... or /* ... */
+  void setComment(const std::string& comment, CommentPlacement placement);
+  bool hasComment(CommentPlacement placement) const;
+  /// Include delimiters and embedded newlines.
+  std::string getComment(CommentPlacement placement) const;
+
+  std::string toStyledString() const;
+
+  const_iterator begin() const;
+  const_iterator end() const;
+
+  iterator begin();
+  iterator end();
+
+  // Accessors for the [start, limit) range of bytes within the JSON text from
+  // which this value was parsed, if any.
+  void setOffsetStart(size_t start);
+  void setOffsetLimit(size_t limit);
+  size_t getOffsetStart() const;
+  size_t getOffsetLimit() const;
+
+private:
+  void initBasic(ValueType type, bool allocated = false);
+
+  Value& resolveReference(const char* key);
+  Value& resolveReference(const char* key, const char* end);
+
+  struct CommentInfo {
+    CommentInfo();
+    ~CommentInfo();
+
+    void setComment(const char* text, size_t len);
+
+    char* comment_;
+  };
+
+  // struct MemberNamesTransform
+  //{
+  //   typedef const char *result_type;
+  //   const char *operator()( const CZString &name ) const
+  //   {
+  //      return name.c_str();
+  //   }
+  //};
+
+  union ValueHolder {
+    LargestInt int_;
+    LargestUInt uint_;
+    double real_;
+    bool bool_;
+    char* string_;  // actually ptr to unsigned, followed by str, unless !allocated_
+    ObjectValues* map_;
+  } value_;
+  ValueType type_ : 8;
+  unsigned int allocated_ : 1; // Notes: if declared as bool, bitfield is useless.
+                               // If not allocated_, string_ must be null-terminated.
+  CommentInfo* comments_;
+
+  // [start, limit) byte offsets in the source JSON text from which this Value
+  // was extracted.
+  size_t start_;
+  size_t limit_;
+};
+
+/** \brief Experimental and untested: represents an element of the "path" to
+ * access a node.
+ */
+class JSON_API PathArgument {
+public:
+  friend class Path;
+
+  PathArgument();
+  PathArgument(ArrayIndex index);
+  PathArgument(const char* key);
+  PathArgument(const std::string& key);
+
+private:
+  enum Kind {
+    kindNone = 0,
+    kindIndex,
+    kindKey
+  };
+  std::string key_;
+  ArrayIndex index_;
+  Kind kind_;
+};
+
+/** \brief Experimental and untested: represents a "path" to access a node.
+ *
+ * Syntax:
+ * - "." => root node
+ * - ".[n]" => elements at index 'n' of root node (an array value)
+ * - ".name" => member named 'name' of root node (an object value)
+ * - ".name1.name2.name3"
+ * - ".[0][1][2].name1[3]"
+ * - ".%" => member name is provided as parameter
+ * - ".[%]" => index is provied as parameter
+ */
+class JSON_API Path {
+public:
+  Path(const std::string& path,
+       const PathArgument& a1 = PathArgument(),
+       const PathArgument& a2 = PathArgument(),
+       const PathArgument& a3 = PathArgument(),
+       const PathArgument& a4 = PathArgument(),
+       const PathArgument& a5 = PathArgument());
+
+  const Value& resolve(const Value& root) const;
+  Value resolve(const Value& root, const Value& defaultValue) const;
+  /// Creates the "path" to access the specified node and returns a reference on
+  /// the node.
+  Value& make(Value& root) const;
+
+private:
+  typedef std::vector<const PathArgument*> InArgs;
+  typedef std::vector<PathArgument> Args;
+
+  void makePath(const std::string& path, const InArgs& in);
+  void addPathInArg(const std::string& path,
+                    const InArgs& in,
+                    InArgs::const_iterator& itInArg,
+                    PathArgument::Kind kind);
+  void invalidPath(const std::string& path, int location);
+
+  Args args_;
+};
+
+/** \brief base class for Value iterators.
+ *
+ */
+class JSON_API ValueIteratorBase {
+public:
+  typedef std::bidirectional_iterator_tag iterator_category;
+  typedef unsigned int size_t;
+  typedef int difference_type;
+  typedef ValueIteratorBase SelfType;
+
+  ValueIteratorBase();
+  explicit ValueIteratorBase(const Value::ObjectValues::iterator& current);
+
+  bool operator==(const SelfType& other) const { return isEqual(other); }
+
+  bool operator!=(const SelfType& other) const { return !isEqual(other); }
+
+  difference_type operator-(const SelfType& other) const {
+    return other.computeDistance(*this);
+  }
+
+  /// Return either the index or the member name of the referenced value as a
+  /// Value.
+  Value key() const;
+
+  /// Return the index of the referenced Value, or -1 if it is not an arrayValue.
+  UInt index() const;
+
+  /// Return the member name of the referenced Value, or "" if it is not an
+  /// objectValue.
+  /// \note Avoid `c_str()` on result, as embedded zeroes are possible.
+  std::string name() const;
+
+  /// Return the member name of the referenced Value. "" if it is not an
+  /// objectValue.
+  /// \deprecated This cannot be used for UTF-8 strings, since there can be embedded nulls.
+  JSONCPP_DEPRECATED("Use `key = name();` instead.")
+  char const* memberName() const;
+  /// Return the member name of the referenced Value, or NULL if it is not an
+  /// objectValue.
+  /// \note Better version than memberName(). Allows embedded nulls.
+  char const* memberName(char const** end) const;
+
+protected:
+  Value& deref() const;
+
+  void increment();
+
+  void decrement();
+
+  difference_type computeDistance(const SelfType& other) const;
+
+  bool isEqual(const SelfType& other) const;
+
+  void copy(const SelfType& other);
+
+private:
+  Value::ObjectValues::iterator current_;
+  // Indicates that iterator is for a null value.
+  bool isNull_;
+};
+
+/** \brief const iterator for object and array value.
+ *
+ */
+class JSON_API ValueConstIterator : public ValueIteratorBase {
+  friend class Value;
+
+public:
+  typedef const Value value_type;
+  //typedef unsigned int size_t;
+  //typedef int difference_type;
+  typedef const Value& reference;
+  typedef const Value* pointer;
+  typedef ValueConstIterator SelfType;
+
+  ValueConstIterator();
+
+private:
+/*! \internal Use by Value to create an iterator.
+ */
+  explicit ValueConstIterator(const Value::ObjectValues::iterator& current);
+public:
+  SelfType& operator=(const ValueIteratorBase& other);
+
+  SelfType operator++(int) {
+    SelfType temp(*this);
+    ++*this;
+    return temp;
+  }
+
+  SelfType operator--(int) {
+    SelfType temp(*this);
+    --*this;
+    return temp;
+  }
+
+  SelfType& operator--() {
+    decrement();
+    return *this;
+  }
+
+  SelfType& operator++() {
+    increment();
+    return *this;
+  }
+
+  reference operator*() const { return deref(); }
+
+  pointer operator->() const { return &deref(); }
+};
+
+/** \brief Iterator for object and array value.
+ */
+class JSON_API ValueIterator : public ValueIteratorBase {
+  friend class Value;
+
+public:
+  typedef Value value_type;
+  typedef unsigned int size_t;
+  typedef int difference_type;
+  typedef Value& reference;
+  typedef Value* pointer;
+  typedef ValueIterator SelfType;
+
+  ValueIterator();
+  ValueIterator(const ValueConstIterator& other);
+  ValueIterator(const ValueIterator& other);
+
+private:
+/*! \internal Use by Value to create an iterator.
+ */
+  explicit ValueIterator(const Value::ObjectValues::iterator& current);
+public:
+  SelfType& operator=(const SelfType& other);
+
+  SelfType operator++(int) {
+    SelfType temp(*this);
+    ++*this;
+    return temp;
+  }
+
+  SelfType operator--(int) {
+    SelfType temp(*this);
+    --*this;
+    return temp;
+  }
+
+  SelfType& operator--() {
+    decrement();
+    return *this;
+  }
+
+  SelfType& operator++() {
+    increment();
+    return *this;
+  }
+
+  reference operator*() const { return deref(); }
+
+  pointer operator->() const { return &deref(); }
+};
+
+} // namespace Json
+
+
+namespace std {
+/// Specialize std::swap() for Json::Value.
+template<>
+inline void swap(Json::Value& a, Json::Value& b) { a.swap(b); }
+}
+
+
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(pop)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#endif // CPPTL_JSON_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/value.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/reader.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef CPPTL_JSON_READER_H_INCLUDED
+#define CPPTL_JSON_READER_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "features.h"
+#include "value.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <deque>
+#include <iosfwd>
+#include <stack>
+#include <string>
+#include <istream>
+
+// Disable warning C4251: <data member>: <type> needs to have dll-interface to
+// be used by...
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(push)
+#pragma warning(disable : 4251)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+namespace Json {
+
+/** \brief Unserialize a <a HREF="http://www.json.org">JSON</a> document into a
+ *Value.
+ *
+ * \deprecated Use CharReader and CharReaderBuilder.
+ */
+class JSON_API Reader {
+public:
+  typedef char Char;
+  typedef const Char* Location;
+
+  /** \brief An error tagged with where in the JSON text it was encountered.
+   *
+   * The offsets give the [start, limit) range of bytes within the text. Note
+   * that this is bytes, not codepoints.
+   *
+   */
+  struct StructuredError {
+    size_t offset_start;
+    size_t offset_limit;
+    std::string message;
+  };
+
+  /** \brief Constructs a Reader allowing all features
+   * for parsing.
+   */
+  Reader();
+
+  /** \brief Constructs a Reader allowing the specified feature set
+   * for parsing.
+   */
+  Reader(const Features& features);
+
+  /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
+   * document.
+   * \param document UTF-8 encoded string containing the document to read.
+   * \param root [out] Contains the root value of the document if it was
+   *             successfully parsed.
+   * \param collectComments \c true to collect comment and allow writing them
+   * back during
+   *                        serialization, \c false to discard comments.
+   *                        This parameter is ignored if
+   * Features::allowComments_
+   *                        is \c false.
+   * \return \c true if the document was successfully parsed, \c false if an
+   * error occurred.
+   */
+  bool
+  parse(const std::string& document, Value& root, bool collectComments = true);
+
+  /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
+   document.
+   * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the
+   document to read.
+   * \param endDoc Pointer on the end of the UTF-8 encoded string of the
+   document to read.
+   *               Must be >= beginDoc.
+   * \param root [out] Contains the root value of the document if it was
+   *             successfully parsed.
+   * \param collectComments \c true to collect comment and allow writing them
+   back during
+   *                        serialization, \c false to discard comments.
+   *                        This parameter is ignored if
+   Features::allowComments_
+   *                        is \c false.
+   * \return \c true if the document was successfully parsed, \c false if an
+   error occurred.
+   */
+  bool parse(const char* beginDoc,
+             const char* endDoc,
+             Value& root,
+             bool collectComments = true);
+
+  /// \brief Parse from input stream.
+  /// \see Json::operator>>(std::istream&, Json::Value&).
+  bool parse(std::istream& is, Value& root, bool collectComments = true);
+
+  /** \brief Returns a user friendly string that list errors in the parsed
+   * document.
+   * \return Formatted error message with the list of errors with their location
+   * in
+   *         the parsed document. An empty string is returned if no error
+   * occurred
+   *         during parsing.
+   * \deprecated Use getFormattedErrorMessages() instead (typo fix).
+   */
+  JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.")
+  std::string getFormatedErrorMessages() const;
+
+  /** \brief Returns a user friendly string that list errors in the parsed
+   * document.
+   * \return Formatted error message with the list of errors with their location
+   * in
+   *         the parsed document. An empty string is returned if no error
+   * occurred
+   *         during parsing.
+   */
+  std::string getFormattedErrorMessages() const;
+
+  /** \brief Returns a vector of structured erros encounted while parsing.
+   * \return A (possibly empty) vector of StructuredError objects. Currently
+   *         only one error can be returned, but the caller should tolerate
+   * multiple
+   *         errors.  This can occur if the parser recovers from a non-fatal
+   *         parse error and then encounters additional errors.
+   */
+  std::vector<StructuredError> getStructuredErrors() const;
+
+  /** \brief Add a semantic error message.
+   * \param value JSON Value location associated with the error
+   * \param message The error message.
+   * \return \c true if the error was successfully added, \c false if the
+   * Value offset exceeds the document size.
+   */
+  bool pushError(const Value& value, const std::string& message);
+
+  /** \brief Add a semantic error message with extra context.
+   * \param value JSON Value location associated with the error
+   * \param message The error message.
+   * \param extra Additional JSON Value location to contextualize the error
+   * \return \c true if the error was successfully added, \c false if either
+   * Value offset exceeds the document size.
+   */
+  bool pushError(const Value& value, const std::string& message, const Value& extra);
+
+  /** \brief Return whether there are any errors.
+   * \return \c true if there are no errors to report \c false if
+   * errors have occurred.
+   */
+  bool good() const;
+
+private:
+  enum TokenType {
+    tokenEndOfStream = 0,
+    tokenObjectBegin,
+    tokenObjectEnd,
+    tokenArrayBegin,
+    tokenArrayEnd,
+    tokenString,
+    tokenNumber,
+    tokenTrue,
+    tokenFalse,
+    tokenNull,
+    tokenArraySeparator,
+    tokenMemberSeparator,
+    tokenComment,
+    tokenError
+  };
+
+  class Token {
+  public:
+    TokenType type_;
+    Location start_;
+    Location end_;
+  };
+
+  class ErrorInfo {
+  public:
+    Token token_;
+    std::string message_;
+    Location extra_;
+  };
+
+  typedef std::deque<ErrorInfo> Errors;
+
+  bool readToken(Token& token);
+  void skipSpaces();
+  bool match(Location pattern, int patternLength);
+  bool readComment();
+  bool readCStyleComment();
+  bool readCppStyleComment();
+  bool readString();
+  void readNumber();
+  bool readValue();
+  bool readObject(Token& token);
+  bool readArray(Token& token);
+  bool decodeNumber(Token& token);
+  bool decodeNumber(Token& token, Value& decoded);
+  bool decodeString(Token& token);
+  bool decodeString(Token& token, std::string& decoded);
+  bool decodeDouble(Token& token);
+  bool decodeDouble(Token& token, Value& decoded);
+  bool decodeUnicodeCodePoint(Token& token,
+                              Location& current,
+                              Location end,
+                              unsigned int& unicode);
+  bool decodeUnicodeEscapeSequence(Token& token,
+                                   Location& current,
+                                   Location end,
+                                   unsigned int& unicode);
+  bool addError(const std::string& message, Token& token, Location extra = 0);
+  bool recoverFromError(TokenType skipUntilToken);
+  bool addErrorAndRecover(const std::string& message,
+                          Token& token,
+                          TokenType skipUntilToken);
+  void skipUntilSpace();
+  Value& currentValue();
+  Char getNextChar();
+  void
+  getLocationLineAndColumn(Location location, int& line, int& column) const;
+  std::string getLocationLineAndColumn(Location location) const;
+  void addComment(Location begin, Location end, CommentPlacement placement);
+  void skipCommentTokens(Token& token);
+
+  typedef std::stack<Value*> Nodes;
+  Nodes nodes_;
+  Errors errors_;
+  std::string document_;
+  Location begin_;
+  Location end_;
+  Location current_;
+  Location lastValueEnd_;
+  Value* lastValue_;
+  std::string commentsBefore_;
+  Features features_;
+  bool collectComments_;
+};  // Reader
+
+/** Interface for reading JSON from a char array.
+ */
+class JSON_API CharReader {
+public:
+  virtual ~CharReader() {}
+  /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
+   document.
+   * The document must be a UTF-8 encoded string containing the document to read.
+   *
+   * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the
+   document to read.
+   * \param endDoc Pointer on the end of the UTF-8 encoded string of the
+   document to read.
+   *        Must be >= beginDoc.
+   * \param root [out] Contains the root value of the document if it was
+   *             successfully parsed.
+   * \param errs [out] Formatted error messages (if not NULL)
+   *        a user friendly string that lists errors in the parsed
+   * document.
+   * \return \c true if the document was successfully parsed, \c false if an
+   error occurred.
+   */
+  virtual bool parse(
+      char const* beginDoc, char const* endDoc,
+      Value* root, std::string* errs) = 0;
+
+  class Factory {
+  public:
+    virtual ~Factory() {}
+    /** \brief Allocate a CharReader via operator new().
+     * \throw std::exception if something goes wrong (e.g. invalid settings)
+     */
+    virtual CharReader* newCharReader() const = 0;
+  };  // Factory
+};  // CharReader
+
+/** \brief Build a CharReader implementation.
+
+Usage:
+\code
+  using namespace Json;
+  CharReaderBuilder builder;
+  builder["collectComments"] = false;
+  Value value;
+  std::string errs;
+  bool ok = parseFromStream(builder, std::cin, &value, &errs);
+\endcode
+*/
+class JSON_API CharReaderBuilder : public CharReader::Factory {
+public:
+  // Note: We use a Json::Value so that we can add data-members to this class
+  // without a major version bump.
+  /** Configuration of this builder.
+    These are case-sensitive.
+    Available settings (case-sensitive):
+    - `"collectComments": false or true`
+      - true to collect comment and allow writing them
+        back during serialization, false to discard comments.
+        This parameter is ignored if allowComments is false.
+    - `"allowComments": false or true`
+      - true if comments are allowed.
+    - `"strictRoot": false or true`
+      - true if root must be either an array or an object value
+    - `"allowDroppedNullPlaceholders": false or true`
+      - true if dropped null placeholders are allowed. (See StreamWriterBuilder.)
+    - `"allowNumericKeys": false or true`
+      - true if numeric object keys are allowed.
+    - `"allowSingleQuotes": false or true`
+      - true if '' are allowed for strings (both keys and values)
+    - `"stackLimit": integer`
+      - Exceeding stackLimit (recursive depth of `readValue()`) will
+        cause an exception.
+      - This is a security issue (seg-faults caused by deeply nested JSON),
+        so the default is low.
+    - `"failIfExtra": false or true`
+      - If true, `parse()` returns false when extra non-whitespace trails
+        the JSON value in the input string.
+    - `"rejectDupKeys": false or true`
+      - If true, `parse()` returns false when a key is duplicated within an object.
+
+    You can examine 'settings_` yourself
+    to see the defaults. You can also write and read them just like any
+    JSON Value.
+    \sa setDefaults()
+    */
+  Json::Value settings_;
+
+  CharReaderBuilder();
+  virtual ~CharReaderBuilder();
+
+  virtual CharReader* newCharReader() const;
+
+  /** \return true if 'settings' are legal and consistent;
+   *   otherwise, indicate bad settings via 'invalid'.
+   */
+  bool validate(Json::Value* invalid) const;
+
+  /** A simple way to update a specific setting.
+   */
+  Value& operator[](std::string key);
+
+  /** Called by ctor, but you can use this to reset settings_.
+   * \pre 'settings' != NULL (but Json::null is fine)
+   * \remark Defaults:
+   * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode
+   */
+  static void setDefaults(Json::Value* settings);
+  /** Same as old Features::strictMode().
+   * \pre 'settings' != NULL (but Json::null is fine)
+   * \remark Defaults:
+   * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults
+   */
+  static void strictMode(Json::Value* settings);
+};
+
+/** Consume entire stream and use its begin/end.
+  * Someday we might have a real StreamReader, but for now this
+  * is convenient.
+  */
+bool JSON_API parseFromStream(
+    CharReader::Factory const&,
+    std::istream&,
+    Value* root, std::string* errs);
+
+/** \brief Read from 'sin' into 'root'.
+
+ Always keep comments from the input JSON.
+
+ This can be used to read a file into a particular sub-object.
+ For example:
+ \code
+ Json::Value root;
+ cin >> root["dir"]["file"];
+ cout << root;
+ \endcode
+ Result:
+ \verbatim
+ {
+ "dir": {
+     "file": {
+     // The input stream JSON would be nested here.
+     }
+ }
+ }
+ \endverbatim
+ \throw std::exception on parse error.
+ \see Json::operator<<()
+*/
+JSON_API std::istream& operator>>(std::istream&, Value&);
+
+} // namespace Json
+
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(pop)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#endif // CPPTL_JSON_READER_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/reader.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/writer.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_WRITER_H_INCLUDED
+#define JSON_WRITER_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "value.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <vector>
+#include <string>
+#include <ostream>
+
+// Disable warning C4251: <data member>: <type> needs to have dll-interface to
+// be used by...
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(push)
+#pragma warning(disable : 4251)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+namespace Json {
+
+class Value;
+
+/**
+
+Usage:
+\code
+  using namespace Json;
+  void writeToStdout(StreamWriter::Factory const& factory, Value const& value) {
+    std::unique_ptr<StreamWriter> const writer(
+      factory.newStreamWriter());
+    writer->write(value, &std::cout);
+    std::cout << std::endl;  // add lf and flush
+  }
+\endcode
+*/
+class JSON_API StreamWriter {
+protected:
+  std::ostream* sout_;  // not owned; will not delete
+public:
+  StreamWriter();
+  virtual ~StreamWriter();
+  /** Write Value into document as configured in sub-class.
+      Do not take ownership of sout, but maintain a reference during function.
+      \pre sout != NULL
+      \return zero on success (For now, we always return zero, so check the stream instead.)
+      \throw std::exception possibly, depending on configuration
+   */
+  virtual int write(Value const& root, std::ostream* sout) = 0;
+
+  /** \brief A simple abstract factory.
+   */
+  class JSON_API Factory {
+  public:
+    virtual ~Factory();
+    /** \brief Allocate a CharReader via operator new().
+     * \throw std::exception if something goes wrong (e.g. invalid settings)
+     */
+    virtual StreamWriter* newStreamWriter() const = 0;
+  };  // Factory
+};  // StreamWriter
+
+/** \brief Write into stringstream, then return string, for convenience.
+ * A StreamWriter will be created from the factory, used, and then deleted.
+ */
+std::string JSON_API writeString(StreamWriter::Factory const& factory, Value const& root);
+
+
+/** \brief Build a StreamWriter implementation.
+
+Usage:
+\code
+  using namespace Json;
+  Value value = ...;
+  StreamWriterBuilder builder;
+  builder["commentStyle"] = "None";
+  builder["indentation"] = "   ";  // or whatever you like
+  std::unique_ptr<Json::StreamWriter> writer(
+      builder.newStreamWriter());
+  writer->write(value, &std::cout);
+  std::cout << std::endl;  // add lf and flush
+\endcode
+*/
+class JSON_API StreamWriterBuilder : public StreamWriter::Factory {
+public:
+  // Note: We use a Json::Value so that we can add data-members to this class
+  // without a major version bump.
+  /** Configuration of this builder.
+    Available settings (case-sensitive):
+    - "commentStyle": "None" or "All"
+    - "indentation":  "<anything>"
+    - "enableYAMLCompatibility": false or true
+      - slightly change the whitespace around colons
+    - "dropNullPlaceholders": false or true
+      - Drop the "null" string from the writer's output for nullValues.
+        Strictly speaking, this is not valid JSON. But when the output is being
+        fed to a browser's Javascript, it makes for smaller output and the
+        browser can handle the output just fine.
+
+    You can examine 'settings_` yourself
+    to see the defaults. You can also write and read them just like any
+    JSON Value.
+    \sa setDefaults()
+    */
+  Json::Value settings_;
+
+  StreamWriterBuilder();
+  virtual ~StreamWriterBuilder();
+
+  /**
+   * \throw std::exception if something goes wrong (e.g. invalid settings)
+   */
+  virtual StreamWriter* newStreamWriter() const;
+
+  /** \return true if 'settings' are legal and consistent;
+   *   otherwise, indicate bad settings via 'invalid'.
+   */
+  bool validate(Json::Value* invalid) const;
+  /** A simple way to update a specific setting.
+   */
+  Value& operator[](std::string key);
+
+  /** Called by ctor, but you can use this to reset settings_.
+   * \pre 'settings' != NULL (but Json::null is fine)
+   * \remark Defaults:
+   * \snippet src/lib_json/json_writer.cpp StreamWriterBuilderDefaults
+   */
+  static void setDefaults(Json::Value* settings);
+};
+
+/** \brief Abstract class for writers.
+ * \deprecated Use StreamWriter. (And really, this is an implementation detail.)
+ */
+class JSON_API Writer {
+public:
+  virtual ~Writer();
+
+  virtual std::string write(const Value& root) = 0;
+};
+
+/** \brief Outputs a Value in <a HREF="http://www.json.org">JSON</a> format
+ *without formatting (not human friendly).
+ *
+ * The JSON document is written in a single line. It is not intended for 'human'
+ *consumption,
+ * but may be usefull to support feature such as RPC where bandwith is limited.
+ * \sa Reader, Value
+ * \deprecated Use StreamWriterBuilder.
+ */
+class JSON_API FastWriter : public Writer {
+
+public:
+  FastWriter();
+  virtual ~FastWriter() {}
+
+  void enableYAMLCompatibility();
+
+  /** \brief Drop the "null" string from the writer's output for nullValues.
+   * Strictly speaking, this is not valid JSON. But when the output is being
+   * fed to a browser's Javascript, it makes for smaller output and the
+   * browser can handle the output just fine.
+   */
+  void dropNullPlaceholders();
+
+  void omitEndingLineFeed();
+
+public: // overridden from Writer
+  virtual std::string write(const Value& root);
+
+private:
+  void writeValue(const Value& value);
+
+  std::string document_;
+  bool yamlCompatiblityEnabled_;
+  bool dropNullPlaceholders_;
+  bool omitEndingLineFeed_;
+};
+
+/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a
+ *human friendly way.
+ *
+ * The rules for line break and indent are as follow:
+ * - Object value:
+ *     - if empty then print {} without indent and line break
+ *     - if not empty the print '{', line break & indent, print one value per
+ *line
+ *       and then unindent and line break and print '}'.
+ * - Array value:
+ *     - if empty then print [] without indent and line break
+ *     - if the array contains no object value, empty array or some other value
+ *types,
+ *       and all the values fit on one lines, then print the array on a single
+ *line.
+ *     - otherwise, it the values do not fit on one line, or the array contains
+ *       object or non empty array, then print one value per line.
+ *
+ * If the Value have comments then they are outputed according to their
+ *#CommentPlacement.
+ *
+ * \sa Reader, Value, Value::setComment()
+ * \deprecated Use StreamWriterBuilder.
+ */
+class JSON_API StyledWriter : public Writer {
+public:
+  StyledWriter();
+  virtual ~StyledWriter() {}
+
+public: // overridden from Writer
+  /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
+   * \param root Value to serialize.
+   * \return String containing the JSON document that represents the root value.
+   */
+  virtual std::string write(const Value& root);
+
+private:
+  void writeValue(const Value& value);
+  void writeArrayValue(const Value& value);
+  bool isMultineArray(const Value& value);
+  void pushValue(const std::string& value);
+  void writeIndent();
+  void writeWithIndent(const std::string& value);
+  void indent();
+  void unindent();
+  void writeCommentBeforeValue(const Value& root);
+  void writeCommentAfterValueOnSameLine(const Value& root);
+  bool hasCommentForValue(const Value& value);
+  static std::string normalizeEOL(const std::string& text);
+
+  typedef std::vector<std::string> ChildValues;
+
+  ChildValues childValues_;
+  std::string document_;
+  std::string indentString_;
+  int rightMargin_;
+  int indentSize_;
+  bool addChildValues_;
+};
+
+/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a
+ human friendly way,
+     to a stream rather than to a string.
+ *
+ * The rules for line break and indent are as follow:
+ * - Object value:
+ *     - if empty then print {} without indent and line break
+ *     - if not empty the print '{', line break & indent, print one value per
+ line
+ *       and then unindent and line break and print '}'.
+ * - Array value:
+ *     - if empty then print [] without indent and line break
+ *     - if the array contains no object value, empty array or some other value
+ types,
+ *       and all the values fit on one lines, then print the array on a single
+ line.
+ *     - otherwise, it the values do not fit on one line, or the array contains
+ *       object or non empty array, then print one value per line.
+ *
+ * If the Value have comments then they are outputed according to their
+ #CommentPlacement.
+ *
+ * \param indentation Each level will be indented by this amount extra.
+ * \sa Reader, Value, Value::setComment()
+ * \deprecated Use StreamWriterBuilder.
+ */
+class JSON_API StyledStreamWriter {
+public:
+  StyledStreamWriter(std::string indentation = "\t");
+  ~StyledStreamWriter() {}
+
+public:
+  /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
+   * \param out Stream to write to. (Can be ostringstream, e.g.)
+   * \param root Value to serialize.
+   * \note There is no point in deriving from Writer, since write() should not
+   * return a value.
+   */
+  void write(std::ostream& out, const Value& root);
+
+private:
+  void writeValue(const Value& value);
+  void writeArrayValue(const Value& value);
+  bool isMultineArray(const Value& value);
+  void pushValue(const std::string& value);
+  void writeIndent();
+  void writeWithIndent(const std::string& value);
+  void indent();
+  void unindent();
+  void writeCommentBeforeValue(const Value& root);
+  void writeCommentAfterValueOnSameLine(const Value& root);
+  bool hasCommentForValue(const Value& value);
+  static std::string normalizeEOL(const std::string& text);
+
+  typedef std::vector<std::string> ChildValues;
+
+  ChildValues childValues_;
+  std::ostream* document_;
+  std::string indentString_;
+  int rightMargin_;
+  std::string indentation_;
+  bool addChildValues_ : 1;
+  bool indented_ : 1;
+};
+
+#if defined(JSON_HAS_INT64)
+std::string JSON_API valueToString(Int value);
+std::string JSON_API valueToString(UInt value);
+#endif // if defined(JSON_HAS_INT64)
+std::string JSON_API valueToString(LargestInt value);
+std::string JSON_API valueToString(LargestUInt value);
+std::string JSON_API valueToString(double value);
+std::string JSON_API valueToString(bool value);
+std::string JSON_API valueToQuotedString(const char* value);
+
+/// \brief Output using the StyledStreamWriter.
+/// \see Json::operator>>()
+JSON_API std::ostream& operator<<(std::ostream&, const Value& root);
+
+} // namespace Json
+
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(pop)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#endif // JSON_WRITER_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/writer.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/assertions.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef CPPTL_JSON_ASSERTIONS_H_INCLUDED
+#define CPPTL_JSON_ASSERTIONS_H_INCLUDED
+
+#include <stdlib.h>
+#include <sstream>
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "config.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+/** It should not be possible for a maliciously designed file to
+ *  cause an abort() or seg-fault, so these macros are used only
+ *  for pre-condition violations and internal logic errors.
+ */
+#if JSON_USE_EXCEPTION
+
+// @todo <= add detail about condition in exception
+# define JSON_ASSERT(condition)                                                \
+  {if (!(condition)) {Json::throwLogicError( "assert json failed" );}}
+
+# define JSON_FAIL_MESSAGE(message)                                            \
+  {                                                                            \
+    std::ostringstream oss; oss << message;                                    \
+    Json::throwLogicError(oss.str());                                          \
+    abort();                                                                   \
+  }
+
+#else // JSON_USE_EXCEPTION
+
+# define JSON_ASSERT(condition) assert(condition)
+
+// The call to assert() will show the failure message in debug builds. In
+// release builds we abort, for a core-dump or debugger.
+# define JSON_FAIL_MESSAGE(message)                                            \
+  {                                                                            \
+    std::ostringstream oss; oss << message;                                    \
+    assert(false && oss.str().c_str());                                        \
+    abort();                                                                   \
+  }
+
+
+#endif
+
+#define JSON_ASSERT_MESSAGE(condition, message)                                \
+  if (!(condition)) {                                                          \
+    JSON_FAIL_MESSAGE(message);                                                \
+  }
+
+#endif // CPPTL_JSON_ASSERTIONS_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/assertions.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+#endif //ifndef JSON_AMALGATED_H_INCLUDED
diff --git a/vendor/jsoncpp-1.6.2/dist/jsoncpp.cpp b/vendor/jsoncpp-1.6.2/dist/jsoncpp.cpp
new file mode 100644
index 0000000..f6355ef
--- /dev/null
+++ b/vendor/jsoncpp-1.6.2/dist/jsoncpp.cpp
@@ -0,0 +1,5116 @@
+/// Json-cpp amalgated source (http://jsoncpp.sourceforge.net/).
+/// It is intended to be used with #include "json/json.h"
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: LICENSE
+// //////////////////////////////////////////////////////////////////////
+
+/*
+The JsonCpp library's source code, including accompanying documentation, 
+tests and demonstration applications, are licensed under the following
+conditions...
+
+The author (Baptiste Lepilleur) explicitly disclaims copyright in all 
+jurisdictions which recognize such a disclaimer. In such jurisdictions, 
+this software is released into the Public Domain.
+
+In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
+2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
+released under the terms of the MIT License (see below).
+
+In jurisdictions which recognize Public Domain property, the user of this 
+software may choose to accept it either as 1) Public Domain, 2) under the 
+conditions of the MIT License (see below), or 3) under the terms of dual 
+Public Domain/MIT License conditions described here, as they choose.
+
+The MIT License is about as close to Public Domain as a license can get, and is
+described in clear, concise terms at:
+
+   http://en.wikipedia.org/wiki/MIT_License
+   
+The full text of the MIT License follows:
+
+========================================================================
+Copyright (c) 2007-2010 Baptiste Lepilleur
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+========================================================================
+(END LICENSE TEXT)
+
+The MIT license is compatible with both the GPL and commercial
+software, affording one all of the rights of Public Domain with the
+minor nuisance of being required to keep the above copyright notice
+and license text in the source code. Note also that by accepting the
+Public Domain "license" you can re-license your copy using whatever
+license you like.
+
+*/
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: LICENSE
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+#include "json/json.h"
+
+#ifndef JSON_IS_AMALGAMATION
+#error "Compile with -I PATH_TO_JSON_DIRECTORY"
+#endif
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: src/lib_json/json_tool.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED
+#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED
+
+/* This header provides common string manipulation support, such as UTF-8,
+ * portable conversion from/to string...
+ *
+ * It is an internal header that must not be exposed.
+ */
+
+namespace Json {
+
+/// Converts a unicode code-point to UTF-8.
+static inline std::string codePointToUTF8(unsigned int cp) {
+  std::string result;
+
+  // based on description from http://en.wikipedia.org/wiki/UTF-8
+
+  if (cp <= 0x7f) {
+    result.resize(1);
+    result[0] = static_cast<char>(cp);
+  } else if (cp <= 0x7FF) {
+    result.resize(2);
+    result[1] = static_cast<char>(0x80 | (0x3f & cp));
+    result[0] = static_cast<char>(0xC0 | (0x1f & (cp >> 6)));
+  } else if (cp <= 0xFFFF) {
+    result.resize(3);
+    result[2] = static_cast<char>(0x80 | (0x3f & cp));
+    result[1] = 0x80 | static_cast<char>((0x3f & (cp >> 6)));
+    result[0] = 0xE0 | static_cast<char>((0xf & (cp >> 12)));
+  } else if (cp <= 0x10FFFF) {
+    result.resize(4);
+    result[3] = static_cast<char>(0x80 | (0x3f & cp));
+    result[2] = static_cast<char>(0x80 | (0x3f & (cp >> 6)));
+    result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 12)));
+    result[0] = static_cast<char>(0xF0 | (0x7 & (cp >> 18)));
+  }
+
+  return result;
+}
+
+/// Returns true if ch is a control character (in range [0,32[).
+static inline bool isControlCharacter(char ch) { return ch > 0 && ch <= 0x1F; }
+
+enum {
+  /// Constant that specify the size of the buffer that must be passed to
+  /// uintToString.
+  uintToStringBufferSize = 3 * sizeof(LargestUInt) + 1
+};
+
+// Defines a char buffer for use with uintToString().
+typedef char UIntToStringBuffer[uintToStringBufferSize];
+
+/** Converts an unsigned integer to string.
+ * @param value Unsigned interger to convert to string
+ * @param current Input/Output string buffer.
+ *        Must have at least uintToStringBufferSize chars free.
+ */
+static inline void uintToString(LargestUInt value, char*& current) {
+  *--current = 0;
+  do {
+    *--current = char(value % 10) + '0';
+    value /= 10;
+  } while (value != 0);
+}
+
+/** Change ',' to '.' everywhere in buffer.
+ *
+ * We had a sophisticated way, but it did not work in WinCE.
+ * @see https://github.com/open-source-parsers/jsoncpp/pull/9
+ */
+static inline void fixNumericLocale(char* begin, char* end) {
+  while (begin < end) {
+    if (*begin == ',') {
+      *begin = '.';
+    }
+    ++begin;
+  }
+}
+
+} // namespace Json {
+
+#endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: src/lib_json/json_tool.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: src/lib_json/json_reader.cpp
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2011 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include <json/assertions.h>
+#include <json/reader.h>
+#include <json/value.h>
+#include "json_tool.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <utility>
+#include <cstdio>
+#include <cassert>
+#include <cstring>
+#include <istream>
+#include <sstream>
+#include <memory>
+#include <set>
+
+#if defined(_MSC_VER) && _MSC_VER < 1500 // VC++ 8.0 and below
+#define snprintf _snprintf
+#endif
+
+#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0
+// Disable warning about strdup being deprecated.
+#pragma warning(disable : 4996)
+#endif
+
+static int const stackLimit_g = 1000;
+static int       stackDepth_g = 0;  // see readValue()
+
+namespace Json {
+
+#if __cplusplus >= 201103L
+typedef std::unique_ptr<CharReader> CharReaderPtr;
+#else
+typedef std::auto_ptr<CharReader>   CharReaderPtr;
+#endif
+
+// Implementation of class Features
+// ////////////////////////////////
+
+Features::Features()
+    : allowComments_(true), strictRoot_(false),
+      allowDroppedNullPlaceholders_(false), allowNumericKeys_(false) {}
+
+Features Features::all() { return Features(); }
+
+Features Features::strictMode() {
+  Features features;
+  features.allowComments_ = false;
+  features.strictRoot_ = true;
+  features.allowDroppedNullPlaceholders_ = false;
+  features.allowNumericKeys_ = false;
+  return features;
+}
+
+// Implementation of class Reader
+// ////////////////////////////////
+
+static bool containsNewLine(Reader::Location begin, Reader::Location end) {
+  for (; begin < end; ++begin)
+    if (*begin == '\n' || *begin == '\r')
+      return true;
+  return false;
+}
+
+// Class Reader
+// //////////////////////////////////////////////////////////////////
+
+Reader::Reader()
+    : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(),
+      lastValue_(), commentsBefore_(), features_(Features::all()),
+      collectComments_() {}
+
+Reader::Reader(const Features& features)
+    : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(),
+      lastValue_(), commentsBefore_(), features_(features), collectComments_() {
+}
+
+bool
+Reader::parse(const std::string& document, Value& root, bool collectComments) {
+  document_ = document;
+  const char* begin = document_.c_str();
+  const char* end = begin + document_.length();
+  return parse(begin, end, root, collectComments);
+}
+
+bool Reader::parse(std::istream& sin, Value& root, bool collectComments) {
+  // std::istream_iterator<char> begin(sin);
+  // std::istream_iterator<char> end;
+  // Those would allow streamed input from a file, if parse() were a
+  // template function.
+
+  // Since std::string is reference-counted, this at least does not
+  // create an extra copy.
+  std::string doc;
+  std::getline(sin, doc, (char)EOF);
+  return parse(doc, root, collectComments);
+}
+
+bool Reader::parse(const char* beginDoc,
+                   const char* endDoc,
+                   Value& root,
+                   bool collectComments) {
+  if (!features_.allowComments_) {
+    collectComments = false;
+  }
+
+  begin_ = beginDoc;
+  end_ = endDoc;
+  collectComments_ = collectComments;
+  current_ = begin_;
+  lastValueEnd_ = 0;
+  lastValue_ = 0;
+  commentsBefore_ = "";
+  errors_.clear();
+  while (!nodes_.empty())
+    nodes_.pop();
+  nodes_.push(&root);
+
+  stackDepth_g = 0;  // Yes, this is bad coding, but options are limited.
+  bool successful = readValue();
+  Token token;
+  skipCommentTokens(token);
+  if (collectComments_ && !commentsBefore_.empty())
+    root.setComment(commentsBefore_, commentAfter);
+  if (features_.strictRoot_) {
+    if (!root.isArray() && !root.isObject()) {
+      // Set error location to start of doc, ideally should be first token found
+      // in doc
+      token.type_ = tokenError;
+      token.start_ = beginDoc;
+      token.end_ = endDoc;
+      addError(
+          "A valid JSON document must be either an array or an object value.",
+          token);
+      return false;
+    }
+  }
+  return successful;
+}
+
+bool Reader::readValue() {
+  // This is a non-reentrant way to support a stackLimit. Terrible!
+  // But this deprecated class has a security problem: Bad input can
+  // cause a seg-fault. This seems like a fair, binary-compatible way
+  // to prevent the problem.
+  if (stackDepth_g >= stackLimit_g) throwRuntimeError("Exceeded stackLimit in readValue().");
+  ++stackDepth_g;
+
+  Token token;
+  skipCommentTokens(token);
+  bool successful = true;
+
+  if (collectComments_ && !commentsBefore_.empty()) {
+    currentValue().setComment(commentsBefore_, commentBefore);
+    commentsBefore_ = "";
+  }
+
+  switch (token.type_) {
+  case tokenObjectBegin:
+    successful = readObject(token);
+    currentValue().setOffsetLimit(current_ - begin_);
+    break;
+  case tokenArrayBegin:
+    successful = readArray(token);
+    currentValue().setOffsetLimit(current_ - begin_);
+    break;
+  case tokenNumber:
+    successful = decodeNumber(token);
+    break;
+  case tokenString:
+    successful = decodeString(token);
+    break;
+  case tokenTrue:
+    {
+    Value v(true);
+    currentValue().swapPayload(v);
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    }
+    break;
+  case tokenFalse:
+    {
+    Value v(false);
+    currentValue().swapPayload(v);
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    }
+    break;
+  case tokenNull:
+    {
+    Value v;
+    currentValue().swapPayload(v);
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    }
+    break;
+  case tokenArraySeparator:
+  case tokenObjectEnd:
+  case tokenArrayEnd:
+    if (features_.allowDroppedNullPlaceholders_) {
+      // "Un-read" the current token and mark the current value as a null
+      // token.
+      current_--;
+      Value v;
+      currentValue().swapPayload(v);
+      currentValue().setOffsetStart(current_ - begin_ - 1);
+      currentValue().setOffsetLimit(current_ - begin_);
+      break;
+    } // Else, fall through...
+  default:
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    return addError("Syntax error: value, object or array expected.", token);
+  }
+
+  if (collectComments_) {
+    lastValueEnd_ = current_;
+    lastValue_ = &currentValue();
+  }
+
+  --stackDepth_g;
+  return successful;
+}
+
+void Reader::skipCommentTokens(Token& token) {
+  if (features_.allowComments_) {
+    do {
+      readToken(token);
+    } while (token.type_ == tokenComment);
+  } else {
+    readToken(token);
+  }
+}
+
+bool Reader::readToken(Token& token) {
+  skipSpaces();
+  token.start_ = current_;
+  Char c = getNextChar();
+  bool ok = true;
+  switch (c) {
+  case '{':
+    token.type_ = tokenObjectBegin;
+    break;
+  case '}':
+    token.type_ = tokenObjectEnd;
+    break;
+  case '[':
+    token.type_ = tokenArrayBegin;
+    break;
+  case ']':
+    token.type_ = tokenArrayEnd;
+    break;
+  case '"':
+    token.type_ = tokenString;
+    ok = readString();
+    break;
+  case '/':
+    token.type_ = tokenComment;
+    ok = readComment();
+    break;
+  case '0':
+  case '1':
+  case '2':
+  case '3':
+  case '4':
+  case '5':
+  case '6':
+  case '7':
+  case '8':
+  case '9':
+  case '-':
+    token.type_ = tokenNumber;
+    readNumber();
+    break;
+  case 't':
+    token.type_ = tokenTrue;
+    ok = match("rue", 3);
+    break;
+  case 'f':
+    token.type_ = tokenFalse;
+    ok = match("alse", 4);
+    break;
+  case 'n':
+    token.type_ = tokenNull;
+    ok = match("ull", 3);
+    break;
+  case ',':
+    token.type_ = tokenArraySeparator;
+    break;
+  case ':':
+    token.type_ = tokenMemberSeparator;
+    break;
+  case 0:
+    token.type_ = tokenEndOfStream;
+    break;
+  default:
+    ok = false;
+    break;
+  }
+  if (!ok)
+    token.type_ = tokenError;
+  token.end_ = current_;
+  return true;
+}
+
+void Reader::skipSpaces() {
+  while (current_ != end_) {
+    Char c = *current_;
+    if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
+      ++current_;
+    else
+      break;
+  }
+}
+
+bool Reader::match(Location pattern, int patternLength) {
+  if (end_ - current_ < patternLength)
+    return false;
+  int index = patternLength;
+  while (index--)
+    if (current_[index] != pattern[index])
+      return false;
+  current_ += patternLength;
+  return true;
+}
+
+bool Reader::readComment() {
+  Location commentBegin = current_ - 1;
+  Char c = getNextChar();
+  bool successful = false;
+  if (c == '*')
+    successful = readCStyleComment();
+  else if (c == '/')
+    successful = readCppStyleComment();
+  if (!successful)
+    return false;
+
+  if (collectComments_) {
+    CommentPlacement placement = commentBefore;
+    if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) {
+      if (c != '*' || !containsNewLine(commentBegin, current_))
+        placement = commentAfterOnSameLine;
+    }
+
+    addComment(commentBegin, current_, placement);
+  }
+  return true;
+}
+
+static std::string normalizeEOL(Reader::Location begin, Reader::Location end) {
+  std::string normalized;
+  normalized.reserve(end - begin);
+  Reader::Location current = begin;
+  while (current != end) {
+    char c = *current++;
+    if (c == '\r') {
+      if (current != end && *current == '\n')
+         // convert dos EOL
+         ++current;
+      // convert Mac EOL
+      normalized += '\n';
+    } else {
+      normalized += c;
+    }
+  }
+  return normalized;
+}
+
+void
+Reader::addComment(Location begin, Location end, CommentPlacement placement) {
+  assert(collectComments_);
+  const std::string& normalized = normalizeEOL(begin, end);
+  if (placement == commentAfterOnSameLine) {
+    assert(lastValue_ != 0);
+    lastValue_->setComment(normalized, placement);
+  } else {
+    commentsBefore_ += normalized;
+  }
+}
+
+bool Reader::readCStyleComment() {
+  while (current_ != end_) {
+    Char c = getNextChar();
+    if (c == '*' && *current_ == '/')
+      break;
+  }
+  return getNextChar() == '/';
+}
+
+bool Reader::readCppStyleComment() {
+  while (current_ != end_) {
+    Char c = getNextChar();
+    if (c == '\n')
+      break;
+    if (c == '\r') {
+      // Consume DOS EOL. It will be normalized in addComment.
+      if (current_ != end_ && *current_ == '\n')
+        getNextChar();
+      // Break on Moc OS 9 EOL.
+      break;
+    }
+  }
+  return true;
+}
+
+void Reader::readNumber() {
+  const char *p = current_;
+  char c = '0'; // stopgap for already consumed character
+  // integral part
+  while (c >= '0' && c <= '9')
+    c = (current_ = p) < end_ ? *p++ : 0;
+  // fractional part
+  if (c == '.') {
+    c = (current_ = p) < end_ ? *p++ : 0;
+    while (c >= '0' && c <= '9')
+      c = (current_ = p) < end_ ? *p++ : 0;
+  }
+  // exponential part
+  if (c == 'e' || c == 'E') {
+    c = (current_ = p) < end_ ? *p++ : 0;
+    if (c == '+' || c == '-')
+      c = (current_ = p) < end_ ? *p++ : 0;
+    while (c >= '0' && c <= '9')
+      c = (current_ = p) < end_ ? *p++ : 0;
+  }
+}
+
+bool Reader::readString() {
+  Char c = 0;
+  while (current_ != end_) {
+    c = getNextChar();
+    if (c == '\\')
+      getNextChar();
+    else if (c == '"')
+      break;
+  }
+  return c == '"';
+}
+
+bool Reader::readObject(Token& tokenStart) {
+  Token tokenName;
+  std::string name;
+  Value init(objectValue);
+  currentValue().swapPayload(init);
+  currentValue().setOffsetStart(tokenStart.start_ - begin_);
+  while (readToken(tokenName)) {
+    bool initialTokenOk = true;
+    while (tokenName.type_ == tokenComment && initialTokenOk)
+      initialTokenOk = readToken(tokenName);
+    if (!initialTokenOk)
+      break;
+    if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object
+      return true;
+    name = "";
+    if (tokenName.type_ == tokenString) {
+      if (!decodeString(tokenName, name))
+        return recoverFromError(tokenObjectEnd);
+    } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) {
+      Value numberName;
+      if (!decodeNumber(tokenName, numberName))
+        return recoverFromError(tokenObjectEnd);
+      name = numberName.asString();
+    } else {
+      break;
+    }
+
+    Token colon;
+    if (!readToken(colon) || colon.type_ != tokenMemberSeparator) {
+      return addErrorAndRecover(
+          "Missing ':' after object member name", colon, tokenObjectEnd);
+    }
+    Value& value = currentValue()[name];
+    nodes_.push(&value);
+    bool ok = readValue();
+    nodes_.pop();
+    if (!ok) // error already set
+      return recoverFromError(tokenObjectEnd);
+
+    Token comma;
+    if (!readToken(comma) ||
+        (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator &&
+         comma.type_ != tokenComment)) {
+      return addErrorAndRecover(
+          "Missing ',' or '}' in object declaration", comma, tokenObjectEnd);
+    }
+    bool finalizeTokenOk = true;
+    while (comma.type_ == tokenComment && finalizeTokenOk)
+      finalizeTokenOk = readToken(comma);
+    if (comma.type_ == tokenObjectEnd)
+      return true;
+  }
+  return addErrorAndRecover(
+      "Missing '}' or object member name", tokenName, tokenObjectEnd);
+}
+
+bool Reader::readArray(Token& tokenStart) {
+  Value init(arrayValue);
+  currentValue().swapPayload(init);
+  currentValue().setOffsetStart(tokenStart.start_ - begin_);
+  skipSpaces();
+  if (*current_ == ']') // empty array
+  {
+    Token endArray;
+    readToken(endArray);
+    return true;
+  }
+  int index = 0;
+  for (;;) {
+    Value& value = currentValue()[index++];
+    nodes_.push(&value);
+    bool ok = readValue();
+    nodes_.pop();
+    if (!ok) // error already set
+      return recoverFromError(tokenArrayEnd);
+
+    Token token;
+    // Accept Comment after last item in the array.
+    ok = readToken(token);
+    while (token.type_ == tokenComment && ok) {
+      ok = readToken(token);
+    }
+    bool badTokenType =
+        (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd);
+    if (!ok || badTokenType) {
+      return addErrorAndRecover(
+          "Missing ',' or ']' in array declaration", token, tokenArrayEnd);
+    }
+    if (token.type_ == tokenArrayEnd)
+      break;
+  }
+  return true;
+}
+
+bool Reader::decodeNumber(Token& token) {
+  Value decoded;
+  if (!decodeNumber(token, decoded))
+    return false;
+  currentValue().swapPayload(decoded);
+  currentValue().setOffsetStart(token.start_ - begin_);
+  currentValue().setOffsetLimit(token.end_ - begin_);
+  return true;
+}
+
+bool Reader::decodeNumber(Token& token, Value& decoded) {
+  // Attempts to parse the number as an integer. If the number is
+  // larger than the maximum supported value of an integer then
+  // we decode the number as a double.
+  Location current = token.start_;
+  bool isNegative = *current == '-';
+  if (isNegative)
+    ++current;
+  // TODO: Help the compiler do the div and mod at compile time or get rid of them.
+  Value::LargestUInt maxIntegerValue =
+      isNegative ? Value::LargestUInt(-Value::minLargestInt)
+                 : Value::maxLargestUInt;
+  Value::LargestUInt threshold = maxIntegerValue / 10;
+  Value::LargestUInt value = 0;
+  while (current < token.end_) {
+    Char c = *current++;
+    if (c < '0' || c > '9')
+      return decodeDouble(token, decoded);
+    Value::UInt digit(c - '0');
+    if (value >= threshold) {
+      // We've hit or exceeded the max value divided by 10 (rounded down). If
+      // a) we've only just touched the limit, b) this is the last digit, and
+      // c) it's small enough to fit in that rounding delta, we're okay.
+      // Otherwise treat this number as a double to avoid overflow.
+      if (value > threshold || current != token.end_ ||
+          digit > maxIntegerValue % 10) {
+        return decodeDouble(token, decoded);
+      }
+    }
+    value = value * 10 + digit;
+  }
+  if (isNegative)
+    decoded = -Value::LargestInt(value);
+  else if (value <= Value::LargestUInt(Value::maxInt))
+    decoded = Value::LargestInt(value);
+  else
+    decoded = value;
+  return true;
+}
+
+bool Reader::decodeDouble(Token& token) {
+  Value decoded;
+  if (!decodeDouble(token, decoded))
+    return false;
+  currentValue().swapPayload(decoded);
+  currentValue().setOffsetStart(token.start_ - begin_);
+  currentValue().setOffsetLimit(token.end_ - begin_);
+  return true;
+}
+
+bool Reader::decodeDouble(Token& token, Value& decoded) {
+  double value = 0;
+  const int bufferSize = 32;
+  int count;
+  int length = int(token.end_ - token.start_);
+
+  // Sanity check to avoid buffer overflow exploits.
+  if (length < 0) {
+    return addError("Unable to parse token length", token);
+  }
+
+  // Avoid using a string constant for the format control string given to
+  // sscanf, as this can cause hard to debug crashes on OS X. See here for more
+  // info:
+  //
+  //     http://developer.apple.com/library/mac/#DOCUMENTATION/DeveloperTools/gcc-4.0.1/gcc/Incompatibilities.html
+  char format[] = "%lf";
+
+  if (length <= bufferSize) {
+    Char buffer[bufferSize + 1];
+    memcpy(buffer, token.start_, length);
+    buffer[length] = 0;
+    count = sscanf(buffer, format, &value);
+  } else {
+    std::string buffer(token.start_, token.end_);
+    count = sscanf(buffer.c_str(), format, &value);
+  }
+
+  if (count != 1)
+    return addError("'" + std::string(token.start_, token.end_) +
+                        "' is not a number.",
+                    token);
+  decoded = value;
+  return true;
+}
+
+bool Reader::decodeString(Token& token) {
+  std::string decoded_string;
+  if (!decodeString(token, decoded_string))
+    return false;
+  Value decoded(decoded_string);
+  currentValue().swapPayload(decoded);
+  currentValue().setOffsetStart(token.start_ - begin_);
+  currentValue().setOffsetLimit(token.end_ - begin_);
+  return true;
+}
+
+bool Reader::decodeString(Token& token, std::string& decoded) {
+  decoded.reserve(token.end_ - token.start_ - 2);
+  Location current = token.start_ + 1; // skip '"'
+  Location end = token.end_ - 1;       // do not include '"'
+  while (current != end) {
+    Char c = *current++;
+    if (c == '"')
+      break;
+    else if (c == '\\') {
+      if (current == end)
+        return addError("Empty escape sequence in string", token, current);
+      Char escape = *current++;
+      switch (escape) {
+      case '"':
+        decoded += '"';
+        break;
+      case '/':
+        decoded += '/';
+        break;
+      case '\\':
+        decoded += '\\';
+        break;
+      case 'b':
+        decoded += '\b';
+        break;
+      case 'f':
+        decoded += '\f';
+        break;
+      case 'n':
+        decoded += '\n';
+        break;
+      case 'r':
+        decoded += '\r';
+        break;
+      case 't':
+        decoded += '\t';
+        break;
+      case 'u': {
+        unsigned int unicode;
+        if (!decodeUnicodeCodePoint(token, current, end, unicode))
+          return false;
+        decoded += codePointToUTF8(unicode);
+      } break;
+      default:
+        return addError("Bad escape sequence in string", token, current);
+      }
+    } else {
+      decoded += c;
+    }
+  }
+  return true;
+}
+
+bool Reader::decodeUnicodeCodePoint(Token& token,
+                                    Location& current,
+                                    Location end,
+                                    unsigned int& unicode) {
+
+  if (!decodeUnicodeEscapeSequence(token, current, end, unicode))
+    return false;
+  if (unicode >= 0xD800 && unicode <= 0xDBFF) {
+    // surrogate pairs
+    if (end - current < 6)
+      return addError(
+          "additional six characters expected to parse unicode surrogate pair.",
+          token,
+          current);
+    unsigned int surrogatePair;
+    if (*(current++) == '\\' && *(current++) == 'u') {
+      if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) {
+        unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF);
+      } else
+        return false;
+    } else
+      return addError("expecting another \\u token to begin the second half of "
+                      "a unicode surrogate pair",
+                      token,
+                      current);
+  }
+  return true;
+}
+
+bool Reader::decodeUnicodeEscapeSequence(Token& token,
+                                         Location& current,
+                                         Location end,
+                                         unsigned int& unicode) {
+  if (end - current < 4)
+    return addError(
+        "Bad unicode escape sequence in string: four digits expected.",
+        token,
+        current);
+  unicode = 0;
+  for (int index = 0; index < 4; ++index) {
+    Char c = *current++;
+    unicode *= 16;
+    if (c >= '0' && c <= '9')
+      unicode += c - '0';
+    else if (c >= 'a' && c <= 'f')
+      unicode += c - 'a' + 10;
+    else if (c >= 'A' && c <= 'F')
+      unicode += c - 'A' + 10;
+    else
+      return addError(
+          "Bad unicode escape sequence in string: hexadecimal digit expected.",
+          token,
+          current);
+  }
+  return true;
+}
+
+bool
+Reader::addError(const std::string& message, Token& token, Location extra) {
+  ErrorInfo info;
+  info.token_ = token;
+  info.message_ = message;
+  info.extra_ = extra;
+  errors_.push_back(info);
+  return false;
+}
+
+bool Reader::recoverFromError(TokenType skipUntilToken) {
+  int errorCount = int(errors_.size());
+  Token skip;
+  for (;;) {
+    if (!readToken(skip))
+      errors_.resize(errorCount); // discard errors caused by recovery
+    if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream)
+      break;
+  }
+  errors_.resize(errorCount);
+  return false;
+}
+
+bool Reader::addErrorAndRecover(const std::string& message,
+                                Token& token,
+                                TokenType skipUntilToken) {
+  addError(message, token);
+  return recoverFromError(skipUntilToken);
+}
+
+Value& Reader::currentValue() { return *(nodes_.top()); }
+
+Reader::Char Reader::getNextChar() {
+  if (current_ == end_)
+    return 0;
+  return *current_++;
+}
+
+void Reader::getLocationLineAndColumn(Location location,
+                                      int& line,
+                                      int& column) const {
+  Location current = begin_;
+  Location lastLineStart = current;
+  line = 0;
+  while (current < location && current != end_) {
+    Char c = *current++;
+    if (c == '\r') {
+      if (*current == '\n')
+        ++current;
+      lastLineStart = current;
+      ++line;
+    } else if (c == '\n') {
+      lastLineStart = current;
+      ++line;
+    }
+  }
+  // column & line start at 1
+  column = int(location - lastLineStart) + 1;
+  ++line;
+}
+
+std::string Reader::getLocationLineAndColumn(Location location) const {
+  int line, column;
+  getLocationLineAndColumn(location, line, column);
+  char buffer[18 + 16 + 16 + 1];
+#if defined(_MSC_VER) && defined(__STDC_SECURE_LIB__)
+#if defined(WINCE)
+  _snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
+#else
+  sprintf_s(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
+#endif
+#else
+  snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
+#endif
+  return buffer;
+}
+
+// Deprecated. Preserved for backward compatibility
+std::string Reader::getFormatedErrorMessages() const {
+  return getFormattedErrorMessages();
+}
+
+std::string Reader::getFormattedErrorMessages() const {
+  std::string formattedMessage;
+  for (Errors::const_iterator itError = errors_.begin();
+       itError != errors_.end();
+       ++itError) {
+    const ErrorInfo& error = *itError;
+    formattedMessage +=
+        "* " + getLocationLineAndColumn(error.token_.start_) + "\n";
+    formattedMessage += "  " + error.message_ + "\n";
+    if (error.extra_)
+      formattedMessage +=
+          "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n";
+  }
+  return formattedMessage;
+}
+
+std::vector<Reader::StructuredError> Reader::getStructuredErrors() const {
+  std::vector<Reader::StructuredError> allErrors;
+  for (Errors::const_iterator itError = errors_.begin();
+       itError != errors_.end();
+       ++itError) {
+    const ErrorInfo& error = *itError;
+    Reader::StructuredError structured;
+    structured.offset_start = error.token_.start_ - begin_;
+    structured.offset_limit = error.token_.end_ - begin_;
+    structured.message = error.message_;
+    allErrors.push_back(structured);
+  }
+  return allErrors;
+}
+
+bool Reader::pushError(const Value& value, const std::string& message) {
+  size_t length = end_ - begin_;
+  if(value.getOffsetStart() > length
+    || value.getOffsetLimit() > length)
+    return false;
+  Token token;
+  token.type_ = tokenError;
+  token.start_ = begin_ + value.getOffsetStart();
+  token.end_ = end_ + value.getOffsetLimit();
+  ErrorInfo info;
+  info.token_ = token;
+  info.message_ = message;
+  info.extra_ = 0;
+  errors_.push_back(info);
+  return true;
+}
+
+bool Reader::pushError(const Value& value, const std::string& message, const Value& extra) {
+  size_t length = end_ - begin_;
+  if(value.getOffsetStart() > length
+    || value.getOffsetLimit() > length
+    || extra.getOffsetLimit() > length)
+    return false;
+  Token token;
+  token.type_ = tokenError;
+  token.start_ = begin_ + value.getOffsetStart();
+  token.end_ = begin_ + value.getOffsetLimit();
+  ErrorInfo info;
+  info.token_ = token;
+  info.message_ = message;
+  info.extra_ = begin_ + extra.getOffsetStart();
+  errors_.push_back(info);
+  return true;
+}
+
+bool Reader::good() const {
+  return !errors_.size();
+}
+
+// exact copy of Features
+class OurFeatures {
+public:
+  static OurFeatures all();
+  OurFeatures();
+  bool allowComments_;
+  bool strictRoot_;
+  bool allowDroppedNullPlaceholders_;
+  bool allowNumericKeys_;
+  bool allowSingleQuotes_;
+  bool failIfExtra_;
+  bool rejectDupKeys_;
+  int stackLimit_;
+};  // OurFeatures
+
+// exact copy of Implementation of class Features
+// ////////////////////////////////
+
+OurFeatures::OurFeatures()
+    : allowComments_(true), strictRoot_(false)
+    , allowDroppedNullPlaceholders_(false), allowNumericKeys_(false)
+    , allowSingleQuotes_(false)
+    , failIfExtra_(false)
+{
+}
+
+OurFeatures OurFeatures::all() { return OurFeatures(); }
+
+// Implementation of class Reader
+// ////////////////////////////////
+
+// exact copy of Reader, renamed to OurReader
+class OurReader {
+public:
+  typedef char Char;
+  typedef const Char* Location;
+  struct StructuredError {
+    size_t offset_start;
+    size_t offset_limit;
+    std::string message;
+  };
+
+  OurReader(OurFeatures const& features);
+  bool parse(const char* beginDoc,
+             const char* endDoc,
+             Value& root,
+             bool collectComments = true);
+  std::string getFormattedErrorMessages() const;
+  std::vector<StructuredError> getStructuredErrors() const;
+  bool pushError(const Value& value, const std::string& message);
+  bool pushError(const Value& value, const std::string& message, const Value& extra);
+  bool good() const;
+
+private:
+  OurReader(OurReader const&);  // no impl
+  void operator=(OurReader const&);  // no impl
+
+  enum TokenType {
+    tokenEndOfStream = 0,
+    tokenObjectBegin,
+    tokenObjectEnd,
+    tokenArrayBegin,
+    tokenArrayEnd,
+    tokenString,
+    tokenNumber,
+    tokenTrue,
+    tokenFalse,
+    tokenNull,
+    tokenArraySeparator,
+    tokenMemberSeparator,
+    tokenComment,
+    tokenError
+  };
+
+  class Token {
+  public:
+    TokenType type_;
+    Location start_;
+    Location end_;
+  };
+
+  class ErrorInfo {
+  public:
+    Token token_;
+    std::string message_;
+    Location extra_;
+  };
+
+  typedef std::deque<ErrorInfo> Errors;
+
+  bool readToken(Token& token);
+  void skipSpaces();
+  bool match(Location pattern, int patternLength);
+  bool readComment();
+  bool readCStyleComment();
+  bool readCppStyleComment();
+  bool readString();
+  bool readStringSingleQuote();
+  void readNumber();
+  bool readValue();
+  bool readObject(Token& token);
+  bool readArray(Token& token);
+  bool decodeNumber(Token& token);
+  bool decodeNumber(Token& token, Value& decoded);
+  bool decodeString(Token& token);
+  bool decodeString(Token& token, std::string& decoded);
+  bool decodeDouble(Token& token);
+  bool decodeDouble(Token& token, Value& decoded);
+  bool decodeUnicodeCodePoint(Token& token,
+                              Location& current,
+                              Location end,
+                              unsigned int& unicode);
+  bool decodeUnicodeEscapeSequence(Token& token,
+                                   Location& current,
+                                   Location end,
+                                   unsigned int& unicode);
+  bool addError(const std::string& message, Token& token, Location extra = 0);
+  bool recoverFromError(TokenType skipUntilToken);
+  bool addErrorAndRecover(const std::string& message,
+                          Token& token,
+                          TokenType skipUntilToken);
+  void skipUntilSpace();
+  Value& currentValue();
+  Char getNextChar();
+  void
+  getLocationLineAndColumn(Location location, int& line, int& column) const;
+  std::string getLocationLineAndColumn(Location location) const;
+  void addComment(Location begin, Location end, CommentPlacement placement);
+  void skipCommentTokens(Token& token);
+
+  typedef std::stack<Value*> Nodes;
+  Nodes nodes_;
+  Errors errors_;
+  std::string document_;
+  Location begin_;
+  Location end_;
+  Location current_;
+  Location lastValueEnd_;
+  Value* lastValue_;
+  std::string commentsBefore_;
+  int stackDepth_;
+
+  OurFeatures const features_;
+  bool collectComments_;
+};  // OurReader
+
+// complete copy of Read impl, for OurReader
+
+OurReader::OurReader(OurFeatures const& features)
+    : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(),
+      lastValue_(), commentsBefore_(), features_(features), collectComments_() {
+}
+
+bool OurReader::parse(const char* beginDoc,
+                   const char* endDoc,
+                   Value& root,
+                   bool collectComments) {
+  if (!features_.allowComments_) {
+    collectComments = false;
+  }
+
+  begin_ = beginDoc;
+  end_ = endDoc;
+  collectComments_ = collectComments;
+  current_ = begin_;
+  lastValueEnd_ = 0;
+  lastValue_ = 0;
+  commentsBefore_ = "";
+  errors_.clear();
+  while (!nodes_.empty())
+    nodes_.pop();
+  nodes_.push(&root);
+
+  stackDepth_ = 0;
+  bool successful = readValue();
+  Token token;
+  skipCommentTokens(token);
+  if (features_.failIfExtra_) {
+    if (token.type_ != tokenError && token.type_ != tokenEndOfStream) {
+      addError("Extra non-whitespace after JSON value.", token);
+      return false;
+    }
+  }
+  if (collectComments_ && !commentsBefore_.empty())
+    root.setComment(commentsBefore_, commentAfter);
+  if (features_.strictRoot_) {
+    if (!root.isArray() && !root.isObject()) {
+      // Set error location to start of doc, ideally should be first token found
+      // in doc
+      token.type_ = tokenError;
+      token.start_ = beginDoc;
+      token.end_ = endDoc;
+      addError(
+          "A valid JSON document must be either an array or an object value.",
+          token);
+      return false;
+    }
+  }
+  return successful;
+}
+
+bool OurReader::readValue() {
+  if (stackDepth_ >= features_.stackLimit_) throwRuntimeError("Exceeded stackLimit in readValue().");
+  ++stackDepth_;
+  Token token;
+  skipCommentTokens(token);
+  bool successful = true;
+
+  if (collectComments_ && !commentsBefore_.empty()) {
+    currentValue().setComment(commentsBefore_, commentBefore);
+    commentsBefore_ = "";
+  }
+
+  switch (token.type_) {
+  case tokenObjectBegin:
+    successful = readObject(token);
+    currentValue().setOffsetLimit(current_ - begin_);
+    break;
+  case tokenArrayBegin:
+    successful = readArray(token);
+    currentValue().setOffsetLimit(current_ - begin_);
+    break;
+  case tokenNumber:
+    successful = decodeNumber(token);
+    break;
+  case tokenString:
+    successful = decodeString(token);
+    break;
+  case tokenTrue:
+    {
+    Value v(true);
+    currentValue().swapPayload(v);
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    }
+    break;
+  case tokenFalse:
+    {
+    Value v(false);
+    currentValue().swapPayload(v);
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    }
+    break;
+  case tokenNull:
+    {
+    Value v;
+    currentValue().swapPayload(v);
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    }
+    break;
+  case tokenArraySeparator:
+  case tokenObjectEnd:
+  case tokenArrayEnd:
+    if (features_.allowDroppedNullPlaceholders_) {
+      // "Un-read" the current token and mark the current value as a null
+      // token.
+      current_--;
+      Value v;
+      currentValue().swapPayload(v);
+      currentValue().setOffsetStart(current_ - begin_ - 1);
+      currentValue().setOffsetLimit(current_ - begin_);
+      break;
+    } // else, fall through ...
+  default:
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    return addError("Syntax error: value, object or array expected.", token);
+  }
+
+  if (collectComments_) {
+    lastValueEnd_ = current_;
+    lastValue_ = &currentValue();
+  }
+
+  --stackDepth_;
+  return successful;
+}
+
+void OurReader::skipCommentTokens(Token& token) {
+  if (features_.allowComments_) {
+    do {
+      readToken(token);
+    } while (token.type_ == tokenComment);
+  } else {
+    readToken(token);
+  }
+}
+
+bool OurReader::readToken(Token& token) {
+  skipSpaces();
+  token.start_ = current_;
+  Char c = getNextChar();
+  bool ok = true;
+  switch (c) {
+  case '{':
+    token.type_ = tokenObjectBegin;
+    break;
+  case '}':
+    token.type_ = tokenObjectEnd;
+    break;
+  case '[':
+    token.type_ = tokenArrayBegin;
+    break;
+  case ']':
+    token.type_ = tokenArrayEnd;
+    break;
+  case '"':
+    token.type_ = tokenString;
+    ok = readString();
+    break;
+  case '\'':
+    if (features_.allowSingleQuotes_) {
+    token.type_ = tokenString;
+    ok = readStringSingleQuote();
+    break;
+    } // else continue
+  case '/':
+    token.type_ = tokenComment;
+    ok = readComment();
+    break;
+  case '0':
+  case '1':
+  case '2':
+  case '3':
+  case '4':
+  case '5':
+  case '6':
+  case '7':
+  case '8':
+  case '9':
+  case '-':
+    token.type_ = tokenNumber;
+    readNumber();
+    break;
+  case 't':
+    token.type_ = tokenTrue;
+    ok = match("rue", 3);
+    break;
+  case 'f':
+    token.type_ = tokenFalse;
+    ok = match("alse", 4);
+    break;
+  case 'n':
+    token.type_ = tokenNull;
+    ok = match("ull", 3);
+    break;
+  case ',':
+    token.type_ = tokenArraySeparator;
+    break;
+  case ':':
+    token.type_ = tokenMemberSeparator;
+    break;
+  case 0:
+    token.type_ = tokenEndOfStream;
+    break;
+  default:
+    ok = false;
+    break;
+  }
+  if (!ok)
+    token.type_ = tokenError;
+  token.end_ = current_;
+  return true;
+}
+
+void OurReader::skipSpaces() {
+  while (current_ != end_) {
+    Char c = *current_;
+    if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
+      ++current_;
+    else
+      break;
+  }
+}
+
+bool OurReader::match(Location pattern, int patternLength) {
+  if (end_ - current_ < patternLength)
+    return false;
+  int index = patternLength;
+  while (index--)
+    if (current_[index] != pattern[index])
+      return false;
+  current_ += patternLength;
+  return true;
+}
+
+bool OurReader::readComment() {
+  Location commentBegin = current_ - 1;
+  Char c = getNextChar();
+  bool successful = false;
+  if (c == '*')
+    successful = readCStyleComment();
+  else if (c == '/')
+    successful = readCppStyleComment();
+  if (!successful)
+    return false;
+
+  if (collectComments_) {
+    CommentPlacement placement = commentBefore;
+    if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) {
+      if (c != '*' || !containsNewLine(commentBegin, current_))
+        placement = commentAfterOnSameLine;
+    }
+
+    addComment(commentBegin, current_, placement);
+  }
+  return true;
+}
+
+void
+OurReader::addComment(Location begin, Location end, CommentPlacement placement) {
+  assert(collectComments_);
+  const std::string& normalized = normalizeEOL(begin, end);
+  if (placement == commentAfterOnSameLine) {
+    assert(lastValue_ != 0);
+    lastValue_->setComment(normalized, placement);
+  } else {
+    commentsBefore_ += normalized;
+  }
+}
+
+bool OurReader::readCStyleComment() {
+  while (current_ != end_) {
+    Char c = getNextChar();
+    if (c == '*' && *current_ == '/')
+      break;
+  }
+  return getNextChar() == '/';
+}
+
+bool OurReader::readCppStyleComment() {
+  while (current_ != end_) {
+    Char c = getNextChar();
+    if (c == '\n')
+      break;
+    if (c == '\r') {
+      // Consume DOS EOL. It will be normalized in addComment.
+      if (current_ != end_ && *current_ == '\n')
+        getNextChar();
+      // Break on Moc OS 9 EOL.
+      break;
+    }
+  }
+  return true;
+}
+
+void OurReader::readNumber() {
+  const char *p = current_;
+  char c = '0'; // stopgap for already consumed character
+  // integral part
+  while (c >= '0' && c <= '9')
+    c = (current_ = p) < end_ ? *p++ : 0;
+  // fractional part
+  if (c == '.') {
+    c = (current_ = p) < end_ ? *p++ : 0;
+    while (c >= '0' && c <= '9')
+      c = (current_ = p) < end_ ? *p++ : 0;
+  }
+  // exponential part
+  if (c == 'e' || c == 'E') {
+    c = (current_ = p) < end_ ? *p++ : 0;
+    if (c == '+' || c == '-')
+      c = (current_ = p) < end_ ? *p++ : 0;
+    while (c >= '0' && c <= '9')
+      c = (current_ = p) < end_ ? *p++ : 0;
+  }
+}
+bool OurReader::readString() {
+  Char c = 0;
+  while (current_ != end_) {
+    c = getNextChar();
+    if (c == '\\')
+      getNextChar();
+    else if (c == '"')
+      break;
+  }
+  return c == '"';
+}
+
+
+bool OurReader::readStringSingleQuote() {
+  Char c = 0;
+  while (current_ != end_) {
+    c = getNextChar();
+    if (c == '\\')
+      getNextChar();
+    else if (c == '\'')
+      break;
+  }
+  return c == '\'';
+}
+
+bool OurReader::readObject(Token& tokenStart) {
+  Token tokenName;
+  std::string name;
+  Value init(objectValue);
+  currentValue().swapPayload(init);
+  currentValue().setOffsetStart(tokenStart.start_ - begin_);
+  while (readToken(tokenName)) {
+    bool initialTokenOk = true;
+    while (tokenName.type_ == tokenComment && initialTokenOk)
+      initialTokenOk = readToken(tokenName);
+    if (!initialTokenOk)
+      break;
+    if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object
+      return true;
+    name = "";
+    if (tokenName.type_ == tokenString) {
+      if (!decodeString(tokenName, name))
+        return recoverFromError(tokenObjectEnd);
+    } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) {
+      Value numberName;
+      if (!decodeNumber(tokenName, numberName))
+        return recoverFromError(tokenObjectEnd);
+      name = numberName.asString();
+    } else {
+      break;
+    }
+
+    Token colon;
+    if (!readToken(colon) || colon.type_ != tokenMemberSeparator) {
+      return addErrorAndRecover(
+          "Missing ':' after object member name", colon, tokenObjectEnd);
+    }
+    if (name.length() >= (1U<<30)) throwRuntimeError("keylength >= 2^30");
+    if (features_.rejectDupKeys_ && currentValue().isMember(name)) {
+      std::string msg = "Duplicate key: '" + name + "'";
+      return addErrorAndRecover(
+          msg, tokenName, tokenObjectEnd);
+    }
+    Value& value = currentValue()[name];
+    nodes_.push(&value);
+    bool ok = readValue();
+    nodes_.pop();
+    if (!ok) // error already set
+      return recoverFromError(tokenObjectEnd);
+
+    Token comma;
+    if (!readToken(comma) ||
+        (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator &&
+         comma.type_ != tokenComment)) {
+      return addErrorAndRecover(
+          "Missing ',' or '}' in object declaration", comma, tokenObjectEnd);
+    }
+    bool finalizeTokenOk = true;
+    while (comma.type_ == tokenComment && finalizeTokenOk)
+      finalizeTokenOk = readToken(comma);
+    if (comma.type_ == tokenObjectEnd)
+      return true;
+  }
+  return addErrorAndRecover(
+      "Missing '}' or object member name", tokenName, tokenObjectEnd);
+}
+
+bool OurReader::readArray(Token& tokenStart) {
+  Value init(arrayValue);
+  currentValue().swapPayload(init);
+  currentValue().setOffsetStart(tokenStart.start_ - begin_);
+  skipSpaces();
+  if (*current_ == ']') // empty array
+  {
+    Token endArray;
+    readToken(endArray);
+    return true;
+  }
+  int index = 0;
+  for (;;) {
+    Value& value = currentValue()[index++];
+    nodes_.push(&value);
+    bool ok = readValue();
+    nodes_.pop();
+    if (!ok) // error already set
+      return recoverFromError(tokenArrayEnd);
+
+    Token token;
+    // Accept Comment after last item in the array.
+    ok = readToken(token);
+    while (token.type_ == tokenComment && ok) {
+      ok = readToken(token);
+    }
+    bool badTokenType =
+        (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd);
+    if (!ok || badTokenType) {
+      return addErrorAndRecover(
+          "Missing ',' or ']' in array declaration", token, tokenArrayEnd);
+    }
+    if (token.type_ == tokenArrayEnd)
+      break;
+  }
+  return true;
+}
+
+bool OurReader::decodeNumber(Token& token) {
+  Value decoded;
+  if (!decodeNumber(token, decoded))
+    return false;
+  currentValue().swapPayload(decoded);
+  currentValue().setOffsetStart(token.start_ - begin_);
+  currentValue().setOffsetLimit(token.end_ - begin_);
+  return true;
+}
+
+bool OurReader::decodeNumber(Token& token, Value& decoded) {
+  // Attempts to parse the number as an integer. If the number is
+  // larger than the maximum supported value of an integer then
+  // we decode the number as a double.
+  Location current = token.start_;
+  bool isNegative = *current == '-';
+  if (isNegative)
+    ++current;
+  // TODO: Help the compiler do the div and mod at compile time or get rid of them.
+  Value::LargestUInt maxIntegerValue =
+      isNegative ? Value::LargestUInt(-Value::minLargestInt)
+                 : Value::maxLargestUInt;
+  Value::LargestUInt threshold = maxIntegerValue / 10;
+  Value::LargestUInt value = 0;
+  while (current < token.end_) {
+    Char c = *current++;
+    if (c < '0' || c > '9')
+      return decodeDouble(token, decoded);
+    Value::UInt digit(c - '0');
+    if (value >= threshold) {
+      // We've hit or exceeded the max value divided by 10 (rounded down). If
+      // a) we've only just touched the limit, b) this is the last digit, and
+      // c) it's small enough to fit in that rounding delta, we're okay.
+      // Otherwise treat this number as a double to avoid overflow.
+      if (value > threshold || current != token.end_ ||
+          digit > maxIntegerValue % 10) {
+        return decodeDouble(token, decoded);
+      }
+    }
+    value = value * 10 + digit;
+  }
+  if (isNegative)
+    decoded = -Value::LargestInt(value);
+  else if (value <= Value::LargestUInt(Value::maxInt))
+    decoded = Value::LargestInt(value);
+  else
+    decoded = value;
+  return true;
+}
+
+bool OurReader::decodeDouble(Token& token) {
+  Value decoded;
+  if (!decodeDouble(token, decoded))
+    return false;
+  currentValue().swapPayload(decoded);
+  currentValue().setOffsetStart(token.start_ - begin_);
+  currentValue().setOffsetLimit(token.end_ - begin_);
+  return true;
+}
+
+bool OurReader::decodeDouble(Token& token, Value& decoded) {
+  double value = 0;
+  const int bufferSize = 32;
+  int count;
+  int length = int(token.end_ - token.start_);
+
+  // Sanity check to avoid buffer overflow exploits.
+  if (length < 0) {
+    return addError("Unable to parse token length", token);
+  }
+
+  // Avoid using a string constant for the format control string given to
+  // sscanf, as this can cause hard to debug crashes on OS X. See here for more
+  // info:
+  //
+  //     http://developer.apple.com/library/mac/#DOCUMENTATION/DeveloperTools/gcc-4.0.1/gcc/Incompatibilities.html
+  char format[] = "%lf";
+
+  if (length <= bufferSize) {
+    Char buffer[bufferSize + 1];
+    memcpy(buffer, token.start_, length);
+    buffer[length] = 0;
+    count = sscanf(buffer, format, &value);
+  } else {
+    std::string buffer(token.start_, token.end_);
+    count = sscanf(buffer.c_str(), format, &value);
+  }
+
+  if (count != 1)
+    return addError("'" + std::string(token.start_, token.end_) +
+                        "' is not a number.",
+                    token);
+  decoded = value;
+  return true;
+}
+
+bool OurReader::decodeString(Token& token) {
+  std::string decoded_string;
+  if (!decodeString(token, decoded_string))
+    return false;
+  Value decoded(decoded_string);
+  currentValue().swapPayload(decoded);
+  currentValue().setOffsetStart(token.start_ - begin_);
+  currentValue().setOffsetLimit(token.end_ - begin_);
+  return true;
+}
+
+bool OurReader::decodeString(Token& token, std::string& decoded) {
+  decoded.reserve(token.end_ - token.start_ - 2);
+  Location current = token.start_ + 1; // skip '"'
+  Location end = token.end_ - 1;       // do not include '"'
+  while (current != end) {
+    Char c = *current++;
+    if (c == '"')
+      break;
+    else if (c == '\\') {
+      if (current == end)
+        return addError("Empty escape sequence in string", token, current);
+      Char escape = *current++;
+      switch (escape) {
+      case '"':
+        decoded += '"';
+        break;
+      case '/':
+        decoded += '/';
+        break;
+      case '\\':
+        decoded += '\\';
+        break;
+      case 'b':
+        decoded += '\b';
+        break;
+      case 'f':
+        decoded += '\f';
+        break;
+      case 'n':
+        decoded += '\n';
+        break;
+      case 'r':
+        decoded += '\r';
+        break;
+      case 't':
+        decoded += '\t';
+        break;
+      case 'u': {
+        unsigned int unicode;
+        if (!decodeUnicodeCodePoint(token, current, end, unicode))
+          return false;
+        decoded += codePointToUTF8(unicode);
+      } break;
+      default:
+        return addError("Bad escape sequence in string", token, current);
+      }
+    } else {
+      decoded += c;
+    }
+  }
+  return true;
+}
+
+bool OurReader::decodeUnicodeCodePoint(Token& token,
+                                    Location& current,
+                                    Location end,
+                                    unsigned int& unicode) {
+
+  if (!decodeUnicodeEscapeSequence(token, current, end, unicode))
+    return false;
+  if (unicode >= 0xD800 && unicode <= 0xDBFF) {
+    // surrogate pairs
+    if (end - current < 6)
+      return addError(
+          "additional six characters expected to parse unicode surrogate pair.",
+          token,
+          current);
+    unsigned int surrogatePair;
+    if (*(current++) == '\\' && *(current++) == 'u') {
+      if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) {
+        unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF);
+      } else
+        return false;
+    } else
+      return addError("expecting another \\u token to begin the second half of "
+                      "a unicode surrogate pair",
+                      token,
+                      current);
+  }
+  return true;
+}
+
+bool OurReader::decodeUnicodeEscapeSequence(Token& token,
+                                         Location& current,
+                                         Location end,
+                                         unsigned int& unicode) {
+  if (end - current < 4)
+    return addError(
+        "Bad unicode escape sequence in string: four digits expected.",
+        token,
+        current);
+  unicode = 0;
+  for (int index = 0; index < 4; ++index) {
+    Char c = *current++;
+    unicode *= 16;
+    if (c >= '0' && c <= '9')
+      unicode += c - '0';
+    else if (c >= 'a' && c <= 'f')
+      unicode += c - 'a' + 10;
+    else if (c >= 'A' && c <= 'F')
+      unicode += c - 'A' + 10;
+    else
+      return addError(
+          "Bad unicode escape sequence in string: hexadecimal digit expected.",
+          token,
+          current);
+  }
+  return true;
+}
+
+bool
+OurReader::addError(const std::string& message, Token& token, Location extra) {
+  ErrorInfo info;
+  info.token_ = token;
+  info.message_ = message;
+  info.extra_ = extra;
+  errors_.push_back(info);
+  return false;
+}
+
+bool OurReader::recoverFromError(TokenType skipUntilToken) {
+  int errorCount = int(errors_.size());
+  Token skip;
+  for (;;) {
+    if (!readToken(skip))
+      errors_.resize(errorCount); // discard errors caused by recovery
+    if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream)
+      break;
+  }
+  errors_.resize(errorCount);
+  return false;
+}
+
+bool OurReader::addErrorAndRecover(const std::string& message,
+                                Token& token,
+                                TokenType skipUntilToken) {
+  addError(message, token);
+  return recoverFromError(skipUntilToken);
+}
+
+Value& OurReader::currentValue() { return *(nodes_.top()); }
+
+OurReader::Char OurReader::getNextChar() {
+  if (current_ == end_)
+    return 0;
+  return *current_++;
+}
+
+void OurReader::getLocationLineAndColumn(Location location,
+                                      int& line,
+                                      int& column) const {
+  Location current = begin_;
+  Location lastLineStart = current;
+  line = 0;
+  while (current < location && current != end_) {
+    Char c = *current++;
+    if (c == '\r') {
+      if (*current == '\n')
+        ++current;
+      lastLineStart = current;
+      ++line;
+    } else if (c == '\n') {
+      lastLineStart = current;
+      ++line;
+    }
+  }
+  // column & line start at 1
+  column = int(location - lastLineStart) + 1;
+  ++line;
+}
+
+std::string OurReader::getLocationLineAndColumn(Location location) const {
+  int line, column;
+  getLocationLineAndColumn(location, line, column);
+  char buffer[18 + 16 + 16 + 1];
+#if defined(_MSC_VER) && defined(__STDC_SECURE_LIB__)
+#if defined(WINCE)
+  _snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
+#else
+  sprintf_s(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
+#endif
+#else
+  snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
+#endif
+  return buffer;
+}
+
+std::string OurReader::getFormattedErrorMessages() const {
+  std::string formattedMessage;
+  for (Errors::const_iterator itError = errors_.begin();
+       itError != errors_.end();
+       ++itError) {
+    const ErrorInfo& error = *itError;
+    formattedMessage +=
+        "* " + getLocationLineAndColumn(error.token_.start_) + "\n";
+    formattedMessage += "  " + error.message_ + "\n";
+    if (error.extra_)
+      formattedMessage +=
+          "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n";
+  }
+  return formattedMessage;
+}
+
+std::vector<OurReader::StructuredError> OurReader::getStructuredErrors() const {
+  std::vector<OurReader::StructuredError> allErrors;
+  for (Errors::const_iterator itError = errors_.begin();
+       itError != errors_.end();
+       ++itError) {
+    const ErrorInfo& error = *itError;
+    OurReader::StructuredError structured;
+    structured.offset_start = error.token_.start_ - begin_;
+    structured.offset_limit = error.token_.end_ - begin_;
+    structured.message = error.message_;
+    allErrors.push_back(structured);
+  }
+  return allErrors;
+}
+
+bool OurReader::pushError(const Value& value, const std::string& message) {
+  size_t length = end_ - begin_;
+  if(value.getOffsetStart() > length
+    || value.getOffsetLimit() > length)
+    return false;
+  Token token;
+  token.type_ = tokenError;
+  token.start_ = begin_ + value.getOffsetStart();
+  token.end_ = end_ + value.getOffsetLimit();
+  ErrorInfo info;
+  info.token_ = token;
+  info.message_ = message;
+  info.extra_ = 0;
+  errors_.push_back(info);
+  return true;
+}
+
+bool OurReader::pushError(const Value& value, const std::string& message, const Value& extra) {
+  size_t length = end_ - begin_;
+  if(value.getOffsetStart() > length
+    || value.getOffsetLimit() > length
+    || extra.getOffsetLimit() > length)
+    return false;
+  Token token;
+  token.type_ = tokenError;
+  token.start_ = begin_ + value.getOffsetStart();
+  token.end_ = begin_ + value.getOffsetLimit();
+  ErrorInfo info;
+  info.token_ = token;
+  info.message_ = message;
+  info.extra_ = begin_ + extra.getOffsetStart();
+  errors_.push_back(info);
+  return true;
+}
+
+bool OurReader::good() const {
+  return !errors_.size();
+}
+
+
+class OurCharReader : public CharReader {
+  bool const collectComments_;
+  OurReader reader_;
+public:
+  OurCharReader(
+    bool collectComments,
+    OurFeatures const& features)
+  : collectComments_(collectComments)
+  , reader_(features)
+  {}
+  virtual bool parse(
+      char const* beginDoc, char const* endDoc,
+      Value* root, std::string* errs) {
+    bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_);
+    if (errs) {
+      *errs = reader_.getFormattedErrorMessages();
+    }
+    return ok;
+  }
+};
+
+CharReaderBuilder::CharReaderBuilder()
+{
+  setDefaults(&settings_);
+}
+CharReaderBuilder::~CharReaderBuilder()
+{}
+CharReader* CharReaderBuilder::newCharReader() const
+{
+  bool collectComments = settings_["collectComments"].asBool();
+  OurFeatures features = OurFeatures::all();
+  features.allowComments_ = settings_["allowComments"].asBool();
+  features.strictRoot_ = settings_["strictRoot"].asBool();
+  features.allowDroppedNullPlaceholders_ = settings_["allowDroppedNullPlaceholders"].asBool();
+  features.allowNumericKeys_ = settings_["allowNumericKeys"].asBool();
+  features.allowSingleQuotes_ = settings_["allowSingleQuotes"].asBool();
+  features.stackLimit_ = settings_["stackLimit"].asInt();
+  features.failIfExtra_ = settings_["failIfExtra"].asBool();
+  features.rejectDupKeys_ = settings_["rejectDupKeys"].asBool();
+  return new OurCharReader(collectComments, features);
+}
+static void getValidReaderKeys(std::set<std::string>* valid_keys)
+{
+  valid_keys->clear();
+  valid_keys->insert("collectComments");
+  valid_keys->insert("allowComments");
+  valid_keys->insert("strictRoot");
+  valid_keys->insert("allowDroppedNullPlaceholders");
+  valid_keys->insert("allowNumericKeys");
+  valid_keys->insert("allowSingleQuotes");
+  valid_keys->insert("stackLimit");
+  valid_keys->insert("failIfExtra");
+  valid_keys->insert("rejectDupKeys");
+}
+bool CharReaderBuilder::validate(Json::Value* invalid) const
+{
+  Json::Value my_invalid;
+  if (!invalid) invalid = &my_invalid;  // so we do not need to test for NULL
+  Json::Value& inv = *invalid;
+  std::set<std::string> valid_keys;
+  getValidReaderKeys(&valid_keys);
+  Value::Members keys = settings_.getMemberNames();
+  size_t n = keys.size();
+  for (size_t i = 0; i < n; ++i) {
+    std::string const& key = keys[i];
+    if (valid_keys.find(key) == valid_keys.end()) {
+      inv[key] = settings_[key];
+    }
+  }
+  return 0u == inv.size();
+}
+Value& CharReaderBuilder::operator[](std::string key)
+{
+  return settings_[key];
+}
+// static
+void CharReaderBuilder::strictMode(Json::Value* settings)
+{
+//! [CharReaderBuilderStrictMode]
+  (*settings)["allowComments"] = false;
+  (*settings)["strictRoot"] = true;
+  (*settings)["allowDroppedNullPlaceholders"] = false;
+  (*settings)["allowNumericKeys"] = false;
+  (*settings)["allowSingleQuotes"] = false;
+  (*settings)["failIfExtra"] = true;
+  (*settings)["rejectDupKeys"] = true;
+//! [CharReaderBuilderStrictMode]
+}
+// static
+void CharReaderBuilder::setDefaults(Json::Value* settings)
+{
+//! [CharReaderBuilderDefaults]
+  (*settings)["collectComments"] = true;
+  (*settings)["allowComments"] = true;
+  (*settings)["strictRoot"] = false;
+  (*settings)["allowDroppedNullPlaceholders"] = false;
+  (*settings)["allowNumericKeys"] = false;
+  (*settings)["allowSingleQuotes"] = false;
+  (*settings)["stackLimit"] = 1000;
+  (*settings)["failIfExtra"] = false;
+  (*settings)["rejectDupKeys"] = false;
+//! [CharReaderBuilderDefaults]
+}
+
+//////////////////////////////////
+// global functions
+
+bool parseFromStream(
+    CharReader::Factory const& fact, std::istream& sin,
+    Value* root, std::string* errs)
+{
+  std::ostringstream ssin;
+  ssin << sin.rdbuf();
+  std::string doc = ssin.str();
+  char const* begin = doc.data();
+  char const* end = begin + doc.size();
+  // Note that we do not actually need a null-terminator.
+  CharReaderPtr const reader(fact.newCharReader());
+  return reader->parse(begin, end, root, errs);
+}
+
+std::istream& operator>>(std::istream& sin, Value& root) {
+  CharReaderBuilder b;
+  std::string errs;
+  bool ok = parseFromStream(b, sin, &root, &errs);
+  if (!ok) {
+    fprintf(stderr,
+            "Error from reader: %s",
+            errs.c_str());
+
+    throwRuntimeError("reader error");
+  }
+  return sin;
+}
+
+} // namespace Json
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: src/lib_json/json_reader.cpp
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: src/lib_json/json_valueiterator.inl
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+// included by json_value.cpp
+
+namespace Json {
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueIteratorBase
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueIteratorBase::ValueIteratorBase()
+    : current_(), isNull_(true) {
+}
+
+ValueIteratorBase::ValueIteratorBase(
+    const Value::ObjectValues::iterator& current)
+    : current_(current), isNull_(false) {}
+
+Value& ValueIteratorBase::deref() const {
+  return current_->second;
+}
+
+void ValueIteratorBase::increment() {
+  ++current_;
+}
+
+void ValueIteratorBase::decrement() {
+  --current_;
+}
+
+ValueIteratorBase::difference_type
+ValueIteratorBase::computeDistance(const SelfType& other) const {
+#ifdef JSON_USE_CPPTL_SMALLMAP
+  return other.current_ - current_;
+#else
+  // Iterator for null value are initialized using the default
+  // constructor, which initialize current_ to the default
+  // std::map::iterator. As begin() and end() are two instance
+  // of the default std::map::iterator, they can not be compared.
+  // To allow this, we handle this comparison specifically.
+  if (isNull_ && other.isNull_) {
+    return 0;
+  }
+
+  // Usage of std::distance is not portable (does not compile with Sun Studio 12
+  // RogueWave STL,
+  // which is the one used by default).
+  // Using a portable hand-made version for non random iterator instead:
+  //   return difference_type( std::distance( current_, other.current_ ) );
+  difference_type myDistance = 0;
+  for (Value::ObjectValues::iterator it = current_; it != other.current_;
+       ++it) {
+    ++myDistance;
+  }
+  return myDistance;
+#endif
+}
+
+bool ValueIteratorBase::isEqual(const SelfType& other) const {
+  if (isNull_) {
+    return other.isNull_;
+  }
+  return current_ == other.current_;
+}
+
+void ValueIteratorBase::copy(const SelfType& other) {
+  current_ = other.current_;
+  isNull_ = other.isNull_;
+}
+
+Value ValueIteratorBase::key() const {
+  const Value::CZString czstring = (*current_).first;
+  if (czstring.data()) {
+    if (czstring.isStaticString())
+      return Value(StaticString(czstring.data()));
+    return Value(czstring.data(), czstring.data() + czstring.length());
+  }
+  return Value(czstring.index());
+}
+
+UInt ValueIteratorBase::index() const {
+  const Value::CZString czstring = (*current_).first;
+  if (!czstring.data())
+    return czstring.index();
+  return Value::UInt(-1);
+}
+
+std::string ValueIteratorBase::name() const {
+  char const* key;
+  char const* end;
+  key = memberName(&end);
+  if (!key) return std::string();
+  return std::string(key, end);
+}
+
+char const* ValueIteratorBase::memberName() const {
+  const char* name = (*current_).first.data();
+  return name ? name : "";
+}
+
+char const* ValueIteratorBase::memberName(char const** end) const {
+  const char* name = (*current_).first.data();
+  if (!name) {
+    *end = NULL;
+    return NULL;
+  }
+  *end = name + (*current_).first.length();
+  return name;
+}
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueConstIterator
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueConstIterator::ValueConstIterator() {}
+
+ValueConstIterator::ValueConstIterator(
+    const Value::ObjectValues::iterator& current)
+    : ValueIteratorBase(current) {}
+
+ValueConstIterator& ValueConstIterator::
+operator=(const ValueIteratorBase& other) {
+  copy(other);
+  return *this;
+}
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueIterator
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueIterator::ValueIterator() {}
+
+ValueIterator::ValueIterator(const Value::ObjectValues::iterator& current)
+    : ValueIteratorBase(current) {}
+
+ValueIterator::ValueIterator(const ValueConstIterator& other)
+    : ValueIteratorBase(other) {}
+
+ValueIterator::ValueIterator(const ValueIterator& other)
+    : ValueIteratorBase(other) {}
+
+ValueIterator& ValueIterator::operator=(const SelfType& other) {
+  copy(other);
+  return *this;
+}
+
+} // namespace Json
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: src/lib_json/json_valueiterator.inl
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: src/lib_json/json_value.cpp
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2011 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include <json/assertions.h>
+#include <json/value.h>
+#include <json/writer.h>
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <math.h>
+#include <sstream>
+#include <utility>
+#include <cstring>
+#include <cassert>
+#ifdef JSON_USE_CPPTL
+#include <cpptl/conststring.h>
+#endif
+#include <cstddef> // size_t
+#include <algorithm> // min()
+
+#define JSON_ASSERT_UNREACHABLE assert(false)
+
+namespace Json {
+
+// This is a walkaround to avoid the static initialization of Value::null.
+// kNull must be word-aligned to avoid crashing on ARM.  We use an alignment of
+// 8 (instead of 4) as a bit of future-proofing.
+#if defined(__ARMEL__)
+#define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment)))
+#else
+#define ALIGNAS(byte_alignment)
+#endif
+static const unsigned char ALIGNAS(8) kNull[sizeof(Value)] = { 0 };
+const unsigned char& kNullRef = kNull[0];
+const Value& Value::null = reinterpret_cast<const Value&>(kNullRef);
+const Value& Value::nullRef = null;
+
+const Int Value::minInt = Int(~(UInt(-1) / 2));
+const Int Value::maxInt = Int(UInt(-1) / 2);
+const UInt Value::maxUInt = UInt(-1);
+#if defined(JSON_HAS_INT64)
+const Int64 Value::minInt64 = Int64(~(UInt64(-1) / 2));
+const Int64 Value::maxInt64 = Int64(UInt64(-1) / 2);
+const UInt64 Value::maxUInt64 = UInt64(-1);
+// The constant is hard-coded because some compiler have trouble
+// converting Value::maxUInt64 to a double correctly (AIX/xlC).
+// Assumes that UInt64 is a 64 bits integer.
+static const double maxUInt64AsDouble = 18446744073709551615.0;
+#endif // defined(JSON_HAS_INT64)
+const LargestInt Value::minLargestInt = LargestInt(~(LargestUInt(-1) / 2));
+const LargestInt Value::maxLargestInt = LargestInt(LargestUInt(-1) / 2);
+const LargestUInt Value::maxLargestUInt = LargestUInt(-1);
+
+#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+template <typename T, typename U>
+static inline bool InRange(double d, T min, U max) {
+  return d >= min && d <= max;
+}
+#else  // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+static inline double integerToDouble(Json::UInt64 value) {
+  return static_cast<double>(Int64(value / 2)) * 2.0 + Int64(value & 1);
+}
+
+template <typename T> static inline double integerToDouble(T value) {
+  return static_cast<double>(value);
+}
+
+template <typename T, typename U>
+static inline bool InRange(double d, T min, U max) {
+  return d >= integerToDouble(min) && d <= integerToDouble(max);
+}
+#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+
+/** Duplicates the specified string value.
+ * @param value Pointer to the string to duplicate. Must be zero-terminated if
+ *              length is "unknown".
+ * @param length Length of the value. if equals to unknown, then it will be
+ *               computed using strlen(value).
+ * @return Pointer on the duplicate instance of string.
+ */
+static inline char* duplicateStringValue(const char* value,
+                                         size_t length) {
+  // Avoid an integer overflow in the call to malloc below by limiting length
+  // to a sane value.
+  if (length >= (size_t)Value::maxInt)
+    length = Value::maxInt - 1;
+
+  char* newString = static_cast<char*>(malloc(length + 1));
+  if (newString == NULL) {
+    throwRuntimeError(
+        "in Json::Value::duplicateStringValue(): "
+        "Failed to allocate string value buffer");
+  }
+  memcpy(newString, value, length);
+  newString[length] = 0;
+  return newString;
+}
+
+/* Record the length as a prefix.
+ */
+static inline char* duplicateAndPrefixStringValue(
+    const char* value,
+    unsigned int length)
+{
+  // Avoid an integer overflow in the call to malloc below by limiting length
+  // to a sane value.
+  JSON_ASSERT_MESSAGE(length <= (unsigned)Value::maxInt - sizeof(unsigned) - 1U,
+                      "in Json::Value::duplicateAndPrefixStringValue(): "
+                      "length too big for prefixing");
+  unsigned actualLength = length + sizeof(unsigned) + 1U;
+  char* newString = static_cast<char*>(malloc(actualLength));
+  if (newString == 0) {
+    throwRuntimeError(
+        "in Json::Value::duplicateAndPrefixStringValue(): "
+        "Failed to allocate string value buffer");
+  }
+  *reinterpret_cast<unsigned*>(newString) = length;
+  memcpy(newString + sizeof(unsigned), value, length);
+  newString[actualLength - 1U] = 0; // to avoid buffer over-run accidents by users later
+  return newString;
+}
+inline static void decodePrefixedString(
+    bool isPrefixed, char const* prefixed,
+    unsigned* length, char const** value)
+{
+  if (!isPrefixed) {
+    *length = strlen(prefixed);
+    *value = prefixed;
+  } else {
+    *length = *reinterpret_cast<unsigned const*>(prefixed);
+    *value = prefixed + sizeof(unsigned);
+  }
+}
+/** Free the string duplicated by duplicateStringValue()/duplicateAndPrefixStringValue().
+ */
+static inline void releaseStringValue(char* value) { free(value); }
+
+} // namespace Json
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// ValueInternals...
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+#if !defined(JSON_IS_AMALGAMATION)
+
+#include "json_valueiterator.inl"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+
+class JSON_API Exception : public std::exception {
+public:
+  Exception(std::string const& msg);
+  virtual ~Exception() throw();
+  virtual char const* what() const throw();
+protected:
+  std::string const msg_;
+};
+class JSON_API RuntimeError : public Exception {
+public:
+  RuntimeError(std::string const& msg);
+};
+class JSON_API LogicError : public Exception {
+public:
+  LogicError(std::string const& msg);
+};
+
+Exception::Exception(std::string const& msg)
+  : msg_(msg)
+{}
+Exception::~Exception() throw()
+{}
+char const* Exception::what() const throw()
+{
+  return msg_.c_str();
+}
+RuntimeError::RuntimeError(std::string const& msg)
+  : Exception(msg)
+{}
+LogicError::LogicError(std::string const& msg)
+  : Exception(msg)
+{}
+void throwRuntimeError(std::string const& msg)
+{
+  throw RuntimeError(msg);
+}
+void throwLogicError(std::string const& msg)
+{
+  throw LogicError(msg);
+}
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class Value::CommentInfo
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+Value::CommentInfo::CommentInfo() : comment_(0) {}
+
+Value::CommentInfo::~CommentInfo() {
+  if (comment_)
+    releaseStringValue(comment_);
+}
+
+void Value::CommentInfo::setComment(const char* text, size_t len) {
+  if (comment_) {
+    releaseStringValue(comment_);
+    comment_ = 0;
+  }
+  JSON_ASSERT(text != 0);
+  JSON_ASSERT_MESSAGE(
+      text[0] == '\0' || text[0] == '/',
+      "in Json::Value::setComment(): Comments must start with /");
+  // It seems that /**/ style comments are acceptable as well.
+  comment_ = duplicateStringValue(text, len);
+}
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class Value::CZString
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+// Notes: policy_ indicates if the string was allocated when
+// a string is stored.
+
+Value::CZString::CZString(ArrayIndex index) : cstr_(0), index_(index) {}
+
+Value::CZString::CZString(char const* str, unsigned length, DuplicationPolicy allocate)
+    : cstr_(str)
+{
+  // allocate != duplicate
+  storage_.policy_ = allocate;
+  storage_.length_ = length;
+}
+
+Value::CZString::CZString(const CZString& other)
+    : cstr_(other.storage_.policy_ != noDuplication && other.cstr_ != 0
+                ? duplicateStringValue(other.cstr_, other.storage_.length_)
+                : other.cstr_)
+{
+  storage_.policy_ = (other.cstr_
+                 ? (other.storage_.policy_ == noDuplication
+                     ? noDuplication : duplicate)
+                 : other.storage_.policy_);
+  storage_.length_ = other.storage_.length_;
+}
+
+Value::CZString::~CZString() {
+  if (cstr_ && storage_.policy_ == duplicate)
+    releaseStringValue(const_cast<char*>(cstr_));
+}
+
+void Value::CZString::swap(CZString& other) {
+  std::swap(cstr_, other.cstr_);
+  std::swap(index_, other.index_);
+}
+
+Value::CZString& Value::CZString::operator=(CZString other) {
+  swap(other);
+  return *this;
+}
+
+bool Value::CZString::operator<(const CZString& other) const {
+  if (!cstr_) return index_ < other.index_;
+  //return strcmp(cstr_, other.cstr_) < 0;
+  // Assume both are strings.
+  unsigned this_len = this->storage_.length_;
+  unsigned other_len = other.storage_.length_;
+  unsigned min_len = std::min(this_len, other_len);
+  int comp = memcmp(this->cstr_, other.cstr_, min_len);
+  if (comp < 0) return true;
+  if (comp > 0) return false;
+  return (this_len < other_len);
+}
+
+bool Value::CZString::operator==(const CZString& other) const {
+  if (!cstr_) return index_ == other.index_;
+  //return strcmp(cstr_, other.cstr_) == 0;
+  // Assume both are strings.
+  unsigned this_len = this->storage_.length_;
+  unsigned other_len = other.storage_.length_;
+  if (this_len != other_len) return false;
+  int comp = memcmp(this->cstr_, other.cstr_, this_len);
+  return comp == 0;
+}
+
+ArrayIndex Value::CZString::index() const { return index_; }
+
+//const char* Value::CZString::c_str() const { return cstr_; }
+const char* Value::CZString::data() const { return cstr_; }
+unsigned Value::CZString::length() const { return storage_.length_; }
+bool Value::CZString::isStaticString() const { return storage_.policy_ == noDuplication; }
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class Value::Value
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+/*! \internal Default constructor initialization must be equivalent to:
+ * memset( this, 0, sizeof(Value) )
+ * This optimization is used in ValueInternalMap fast allocator.
+ */
+Value::Value(ValueType type) {
+  initBasic(type);
+  switch (type) {
+  case nullValue:
+    break;
+  case intValue:
+  case uintValue:
+    value_.int_ = 0;
+    break;
+  case realValue:
+    value_.real_ = 0.0;
+    break;
+  case stringValue:
+    value_.string_ = 0;
+    break;
+  case arrayValue:
+  case objectValue:
+    value_.map_ = new ObjectValues();
+    break;
+  case booleanValue:
+    value_.bool_ = false;
+    break;
+  default:
+    JSON_ASSERT_UNREACHABLE;
+  }
+}
+
+Value::Value(Int value) {
+  initBasic(intValue);
+  value_.int_ = value;
+}
+
+Value::Value(UInt value) {
+  initBasic(uintValue);
+  value_.uint_ = value;
+}
+#if defined(JSON_HAS_INT64)
+Value::Value(Int64 value) {
+  initBasic(intValue);
+  value_.int_ = value;
+}
+Value::Value(UInt64 value) {
+  initBasic(uintValue);
+  value_.uint_ = value;
+}
+#endif // defined(JSON_HAS_INT64)
+
+Value::Value(double value) {
+  initBasic(realValue);
+  value_.real_ = value;
+}
+
+Value::Value(const char* value) {
+  initBasic(stringValue, true);
+  value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(strlen(value)));
+}
+
+Value::Value(const char* beginValue, const char* endValue) {
+  initBasic(stringValue, true);
+  value_.string_ =
+      duplicateAndPrefixStringValue(beginValue, static_cast<unsigned>(endValue - beginValue));
+}
+
+Value::Value(const std::string& value) {
+  initBasic(stringValue, true);
+  value_.string_ =
+      duplicateAndPrefixStringValue(value.data(), static_cast<unsigned>(value.length()));
+}
+
+Value::Value(const StaticString& value) {
+  initBasic(stringValue);
+  value_.string_ = const_cast<char*>(value.c_str());
+}
+
+#ifdef JSON_USE_CPPTL
+Value::Value(const CppTL::ConstString& value) {
+  initBasic(stringValue, true);
+  value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(value.length()));
+}
+#endif
+
+Value::Value(bool value) {
+  initBasic(booleanValue);
+  value_.bool_ = value;
+}
+
+Value::Value(Value const& other)
+    : type_(other.type_), allocated_(false)
+      ,
+      comments_(0), start_(other.start_), limit_(other.limit_)
+{
+  switch (type_) {
+  case nullValue:
+  case intValue:
+  case uintValue:
+  case realValue:
+  case booleanValue:
+    value_ = other.value_;
+    break;
+  case stringValue:
+    if (other.value_.string_ && other.allocated_) {
+      unsigned len;
+      char const* str;
+      decodePrefixedString(other.allocated_, other.value_.string_,
+          &len, &str);
+      value_.string_ = duplicateAndPrefixStringValue(str, len);
+      allocated_ = true;
+    } else {
+      value_.string_ = other.value_.string_;
+      allocated_ = false;
+    }
+    break;
+  case arrayValue:
+  case objectValue:
+    value_.map_ = new ObjectValues(*other.value_.map_);
+    break;
+  default:
+    JSON_ASSERT_UNREACHABLE;
+  }
+  if (other.comments_) {
+    comments_ = new CommentInfo[numberOfCommentPlacement];
+    for (int comment = 0; comment < numberOfCommentPlacement; ++comment) {
+      const CommentInfo& otherComment = other.comments_[comment];
+      if (otherComment.comment_)
+        comments_[comment].setComment(
+            otherComment.comment_, strlen(otherComment.comment_));
+    }
+  }
+}
+
+Value::~Value() {
+  switch (type_) {
+  case nullValue:
+  case intValue:
+  case uintValue:
+  case realValue:
+  case booleanValue:
+    break;
+  case stringValue:
+    if (allocated_)
+      releaseStringValue(value_.string_);
+    break;
+  case arrayValue:
+  case objectValue:
+    delete value_.map_;
+    break;
+  default:
+    JSON_ASSERT_UNREACHABLE;
+  }
+
+  if (comments_)
+    delete[] comments_;
+}
+
+Value& Value::operator=(Value other) {
+  swap(other);
+  return *this;
+}
+
+void Value::swapPayload(Value& other) {
+  ValueType temp = type_;
+  type_ = other.type_;
+  other.type_ = temp;
+  std::swap(value_, other.value_);
+  int temp2 = allocated_;
+  allocated_ = other.allocated_;
+  other.allocated_ = temp2;
+}
+
+void Value::swap(Value& other) {
+  swapPayload(other);
+  std::swap(comments_, other.comments_);
+  std::swap(start_, other.start_);
+  std::swap(limit_, other.limit_);
+}
+
+ValueType Value::type() const { return type_; }
+
+int Value::compare(const Value& other) const {
+  if (*this < other)
+    return -1;
+  if (*this > other)
+    return 1;
+  return 0;
+}
+
+bool Value::operator<(const Value& other) const {
+  int typeDelta = type_ - other.type_;
+  if (typeDelta)
+    return typeDelta < 0 ? true : false;
+  switch (type_) {
+  case nullValue:
+    return false;
+  case intValue:
+    return value_.int_ < other.value_.int_;
+  case uintValue:
+    return value_.uint_ < other.value_.uint_;
+  case realValue:
+    return value_.real_ < other.value_.real_;
+  case booleanValue:
+    return value_.bool_ < other.value_.bool_;
+  case stringValue:
+  {
+    if ((value_.string_ == 0) || (other.value_.string_ == 0)) {
+      if (other.value_.string_) return true;
+      else return false;
+    }
+    unsigned this_len;
+    unsigned other_len;
+    char const* this_str;
+    char const* other_str;
+    decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
+    decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str);
+    unsigned min_len = std::min(this_len, other_len);
+    int comp = memcmp(this_str, other_str, min_len);
+    if (comp < 0) return true;
+    if (comp > 0) return false;
+    return (this_len < other_len);
+  }
+  case arrayValue:
+  case objectValue: {
+    int delta = int(value_.map_->size() - other.value_.map_->size());
+    if (delta)
+      return delta < 0;
+    return (*value_.map_) < (*other.value_.map_);
+  }
+  default:
+    JSON_ASSERT_UNREACHABLE;
+  }
+  return false; // unreachable
+}
+
+bool Value::operator<=(const Value& other) const { return !(other < *this); }
+
+bool Value::operator>=(const Value& other) const { return !(*this < other); }
+
+bool Value::operator>(const Value& other) const { return other < *this; }
+
+bool Value::operator==(const Value& other) const {
+  // if ( type_ != other.type_ )
+  // GCC 2.95.3 says:
+  // attempt to take address of bit-field structure member `Json::Value::type_'
+  // Beats me, but a temp solves the problem.
+  int temp = other.type_;
+  if (type_ != temp)
+    return false;
+  switch (type_) {
+  case nullValue:
+    return true;
+  case intValue:
+    return value_.int_ == other.value_.int_;
+  case uintValue:
+    return value_.uint_ == other.value_.uint_;
+  case realValue:
+    return value_.real_ == other.value_.real_;
+  case booleanValue:
+    return value_.bool_ == other.value_.bool_;
+  case stringValue:
+  {
+    if ((value_.string_ == 0) || (other.value_.string_ == 0)) {
+      return (value_.string_ == other.value_.string_);
+    }
+    unsigned this_len;
+    unsigned other_len;
+    char const* this_str;
+    char const* other_str;
+    decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
+    decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str);
+    if (this_len != other_len) return false;
+    int comp = memcmp(this_str, other_str, this_len);
+    return comp == 0;
+  }
+  case arrayValue:
+  case objectValue:
+    return value_.map_->size() == other.value_.map_->size() &&
+           (*value_.map_) == (*other.value_.map_);
+  default:
+    JSON_ASSERT_UNREACHABLE;
+  }
+  return false; // unreachable
+}
+
+bool Value::operator!=(const Value& other) const { return !(*this == other); }
+
+const char* Value::asCString() const {
+  JSON_ASSERT_MESSAGE(type_ == stringValue,
+                      "in Json::Value::asCString(): requires stringValue");
+  if (value_.string_ == 0) return 0;
+  unsigned this_len;
+  char const* this_str;
+  decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
+  return this_str;
+}
+
+bool Value::getString(char const** str, char const** end) const {
+  if (type_ != stringValue) return false;
+  if (value_.string_ == 0) return false;
+  unsigned length;
+  decodePrefixedString(this->allocated_, this->value_.string_, &length, str);
+  *end = *str + length;
+  return true;
+}
+
+std::string Value::asString() const {
+  switch (type_) {
+  case nullValue:
+    return "";
+  case stringValue:
+  {
+    if (value_.string_ == 0) return "";
+    unsigned this_len;
+    char const* this_str;
+    decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
+    return std::string(this_str, this_len);
+  }
+  case booleanValue:
+    return value_.bool_ ? "true" : "false";
+  case intValue:
+    return valueToString(value_.int_);
+  case uintValue:
+    return valueToString(value_.uint_);
+  case realValue:
+    return valueToString(value_.real_);
+  default:
+    JSON_FAIL_MESSAGE("Type is not convertible to string");
+  }
+}
+
+#ifdef JSON_USE_CPPTL
+CppTL::ConstString Value::asConstString() const {
+  unsigned len;
+  char const* str;
+  decodePrefixedString(allocated_, value_.string_,
+      &len, &str);
+  return CppTL::ConstString(str, len);
+}
+#endif
+
+Value::Int Value::asInt() const {
+  switch (type_) {
+  case intValue:
+    JSON_ASSERT_MESSAGE(isInt(), "LargestInt out of Int range");
+    return Int(value_.int_);
+  case uintValue:
+    JSON_ASSERT_MESSAGE(isInt(), "LargestUInt out of Int range");
+    return Int(value_.uint_);
+  case realValue:
+    JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt, maxInt),
+                        "double out of Int range");
+    return Int(value_.real_);
+  case nullValue:
+    return 0;
+  case booleanValue:
+    return value_.bool_ ? 1 : 0;
+  default:
+    break;
+  }
+  JSON_FAIL_MESSAGE("Value is not convertible to Int.");
+}
+
+Value::UInt Value::asUInt() const {
+  switch (type_) {
+  case intValue:
+    JSON_ASSERT_MESSAGE(isUInt(), "LargestInt out of UInt range");
+    return UInt(value_.int_);
+  case uintValue:
+    JSON_ASSERT_MESSAGE(isUInt(), "LargestUInt out of UInt range");
+    return UInt(value_.uint_);
+  case realValue:
+    JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt),
+                        "double out of UInt range");
+    return UInt(value_.real_);
+  case nullValue:
+    return 0;
+  case booleanValue:
+    return value_.bool_ ? 1 : 0;
+  default:
+    break;
+  }
+  JSON_FAIL_MESSAGE("Value is not convertible to UInt.");
+}
+
+#if defined(JSON_HAS_INT64)
+
+Value::Int64 Value::asInt64() const {
+  switch (type_) {
+  case intValue:
+    return Int64(value_.int_);
+  case uintValue:
+    JSON_ASSERT_MESSAGE(isInt64(), "LargestUInt out of Int64 range");
+    return Int64(value_.uint_);
+  case realValue:
+    JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt64, maxInt64),
+                        "double out of Int64 range");
+    return Int64(value_.real_);
+  case nullValue:
+    return 0;
+  case booleanValue:
+    return value_.bool_ ? 1 : 0;
+  default:
+    break;
+  }
+  JSON_FAIL_MESSAGE("Value is not convertible to Int64.");
+}
+
+Value::UInt64 Value::asUInt64() const {
+  switch (type_) {
+  case intValue:
+    JSON_ASSERT_MESSAGE(isUInt64(), "LargestInt out of UInt64 range");
+    return UInt64(value_.int_);
+  case uintValue:
+    return UInt64(value_.uint_);
+  case realValue:
+    JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt64),
+                        "double out of UInt64 range");
+    return UInt64(value_.real_);
+  case nullValue:
+    return 0;
+  case booleanValue:
+    return value_.bool_ ? 1 : 0;
+  default:
+    break;
+  }
+  JSON_FAIL_MESSAGE("Value is not convertible to UInt64.");
+}
+#endif // if defined(JSON_HAS_INT64)
+
+LargestInt Value::asLargestInt() const {
+#if defined(JSON_NO_INT64)
+  return asInt();
+#else
+  return asInt64();
+#endif
+}
+
+LargestUInt Value::asLargestUInt() const {
+#if defined(JSON_NO_INT64)
+  return asUInt();
+#else
+  return asUInt64();
+#endif
+}
+
+double Value::asDouble() const {
+  switch (type_) {
+  case intValue:
+    return static_cast<double>(value_.int_);
+  case uintValue:
+#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+    return static_cast<double>(value_.uint_);
+#else  // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+    return integerToDouble(value_.uint_);
+#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+  case realValue:
+    return value_.real_;
+  case nullValue:
+    return 0.0;
+  case booleanValue:
+    return value_.bool_ ? 1.0 : 0.0;
+  default:
+    break;
+  }
+  JSON_FAIL_MESSAGE("Value is not convertible to double.");
+}
+
+float Value::asFloat() const {
+  switch (type_) {
+  case intValue:
+    return static_cast<float>(value_.int_);
+  case uintValue:
+#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+    return static_cast<float>(value_.uint_);
+#else  // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+    return integerToDouble(value_.uint_);
+#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+  case realValue:
+    return static_cast<float>(value_.real_);
+  case nullValue:
+    return 0.0;
+  case booleanValue:
+    return value_.bool_ ? 1.0f : 0.0f;
+  default:
+    break;
+  }
+  JSON_FAIL_MESSAGE("Value is not convertible to float.");
+}
+
+bool Value::asBool() const {
+  switch (type_) {
+  case booleanValue:
+    return value_.bool_;
+  case nullValue:
+    return false;
+  case intValue:
+    return value_.int_ ? true : false;
+  case uintValue:
+    return value_.uint_ ? true : false;
+  case realValue:
+    return value_.real_ ? true : false;
+  default:
+    break;
+  }
+  JSON_FAIL_MESSAGE("Value is not convertible to bool.");
+}
+
+bool Value::isConvertibleTo(ValueType other) const {
+  switch (other) {
+  case nullValue:
+    return (isNumeric() && asDouble() == 0.0) ||
+           (type_ == booleanValue && value_.bool_ == false) ||
+           (type_ == stringValue && asString() == "") ||
+           (type_ == arrayValue && value_.map_->size() == 0) ||
+           (type_ == objectValue && value_.map_->size() == 0) ||
+           type_ == nullValue;
+  case intValue:
+    return isInt() ||
+           (type_ == realValue && InRange(value_.real_, minInt, maxInt)) ||
+           type_ == booleanValue || type_ == nullValue;
+  case uintValue:
+    return isUInt() ||
+           (type_ == realValue && InRange(value_.real_, 0, maxUInt)) ||
+           type_ == booleanValue || type_ == nullValue;
+  case realValue:
+    return isNumeric() || type_ == booleanValue || type_ == nullValue;
+  case booleanValue:
+    return isNumeric() || type_ == booleanValue || type_ == nullValue;
+  case stringValue:
+    return isNumeric() || type_ == booleanValue || type_ == stringValue ||
+           type_ == nullValue;
+  case arrayValue:
+    return type_ == arrayValue || type_ == nullValue;
+  case objectValue:
+    return type_ == objectValue || type_ == nullValue;
+  }
+  JSON_ASSERT_UNREACHABLE;
+  return false;
+}
+
+/// Number of values in array or object
+ArrayIndex Value::size() const {
+  switch (type_) {
+  case nullValue:
+  case intValue:
+  case uintValue:
+  case realValue:
+  case booleanValue:
+  case stringValue:
+    return 0;
+  case arrayValue: // size of the array is highest index + 1
+    if (!value_.map_->empty()) {
+      ObjectValues::const_iterator itLast = value_.map_->end();
+      --itLast;
+      return (*itLast).first.index() + 1;
+    }
+    return 0;
+  case objectValue:
+    return ArrayIndex(value_.map_->size());
+  }
+  JSON_ASSERT_UNREACHABLE;
+  return 0; // unreachable;
+}
+
+bool Value::empty() const {
+  if (isNull() || isArray() || isObject())
+    return size() == 0u;
+  else
+    return false;
+}
+
+bool Value::operator!() const { return isNull(); }
+
+void Value::clear() {
+  JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue ||
+                          type_ == objectValue,
+                      "in Json::Value::clear(): requires complex value");
+  start_ = 0;
+  limit_ = 0;
+  switch (type_) {
+  case arrayValue:
+  case objectValue:
+    value_.map_->clear();
+    break;
+  default:
+    break;
+  }
+}
+
+void Value::resize(ArrayIndex newSize) {
+  JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue,
+                      "in Json::Value::resize(): requires arrayValue");
+  if (type_ == nullValue)
+    *this = Value(arrayValue);
+  ArrayIndex oldSize = size();
+  if (newSize == 0)
+    clear();
+  else if (newSize > oldSize)
+    (*this)[newSize - 1];
+  else {
+    for (ArrayIndex index = newSize; index < oldSize; ++index) {
+      value_.map_->erase(index);
+    }
+    assert(size() == newSize);
+  }
+}
+
+Value& Value::operator[](ArrayIndex index) {
+  JSON_ASSERT_MESSAGE(
+      type_ == nullValue || type_ == arrayValue,
+      "in Json::Value::operator[](ArrayIndex): requires arrayValue");
+  if (type_ == nullValue)
+    *this = Value(arrayValue);
+  CZString key(index);
+  ObjectValues::iterator it = value_.map_->lower_bound(key);
+  if (it != value_.map_->end() && (*it).first == key)
+    return (*it).second;
+
+  ObjectValues::value_type defaultValue(key, nullRef);
+  it = value_.map_->insert(it, defaultValue);
+  return (*it).second;
+}
+
+Value& Value::operator[](int index) {
+  JSON_ASSERT_MESSAGE(
+      index >= 0,
+      "in Json::Value::operator[](int index): index cannot be negative");
+  return (*this)[ArrayIndex(index)];
+}
+
+const Value& Value::operator[](ArrayIndex index) const {
+  JSON_ASSERT_MESSAGE(
+      type_ == nullValue || type_ == arrayValue,
+      "in Json::Value::operator[](ArrayIndex)const: requires arrayValue");
+  if (type_ == nullValue)
+    return nullRef;
+  CZString key(index);
+  ObjectValues::const_iterator it = value_.map_->find(key);
+  if (it == value_.map_->end())
+    return nullRef;
+  return (*it).second;
+}
+
+const Value& Value::operator[](int index) const {
+  JSON_ASSERT_MESSAGE(
+      index >= 0,
+      "in Json::Value::operator[](int index) const: index cannot be negative");
+  return (*this)[ArrayIndex(index)];
+}
+
+void Value::initBasic(ValueType type, bool allocated) {
+  type_ = type;
+  allocated_ = allocated;
+  comments_ = 0;
+  start_ = 0;
+  limit_ = 0;
+}
+
+// Access an object value by name, create a null member if it does not exist.
+// @pre Type of '*this' is object or null.
+// @param key is null-terminated.
+Value& Value::resolveReference(const char* key) {
+  JSON_ASSERT_MESSAGE(
+      type_ == nullValue || type_ == objectValue,
+      "in Json::Value::resolveReference(): requires objectValue");
+  if (type_ == nullValue)
+    *this = Value(objectValue);
+  CZString actualKey(
+      key, static_cast<unsigned>(strlen(key)), CZString::noDuplication); // NOTE!
+  ObjectValues::iterator it = value_.map_->lower_bound(actualKey);
+  if (it != value_.map_->end() && (*it).first == actualKey)
+    return (*it).second;
+
+  ObjectValues::value_type defaultValue(actualKey, nullRef);
+  it = value_.map_->insert(it, defaultValue);
+  Value& value = (*it).second;
+  return value;
+}
+
+// @param key is not null-terminated.
+Value& Value::resolveReference(char const* key, char const* end)
+{
+  JSON_ASSERT_MESSAGE(
+      type_ == nullValue || type_ == objectValue,
+      "in Json::Value::resolveReference(key, end): requires objectValue");
+  if (type_ == nullValue)
+    *this = Value(objectValue);
+  CZString actualKey(
+      key, static_cast<unsigned>(end-key), CZString::duplicateOnCopy);
+  ObjectValues::iterator it = value_.map_->lower_bound(actualKey);
+  if (it != value_.map_->end() && (*it).first == actualKey)
+    return (*it).second;
+
+  ObjectValues::value_type defaultValue(actualKey, nullRef);
+  it = value_.map_->insert(it, defaultValue);
+  Value& value = (*it).second;
+  return value;
+}
+
+Value Value::get(ArrayIndex index, const Value& defaultValue) const {
+  const Value* value = &((*this)[index]);
+  return value == &nullRef ? defaultValue : *value;
+}
+
+bool Value::isValidIndex(ArrayIndex index) const { return index < size(); }
+
+Value const* Value::find(char const* key, char const* end) const
+{
+  JSON_ASSERT_MESSAGE(
+      type_ == nullValue || type_ == objectValue,
+      "in Json::Value::find(key, end, found): requires objectValue or nullValue");
+  if (type_ == nullValue) return NULL;
+  CZString actualKey(key, static_cast<unsigned>(end-key), CZString::noDuplication);
+  ObjectValues::const_iterator it = value_.map_->find(actualKey);
+  if (it == value_.map_->end()) return NULL;
+  return &(*it).second;
+}
+const Value& Value::operator[](const char* key) const
+{
+  Value const* found = find(key, key + strlen(key));
+  if (!found) return nullRef;
+  return *found;
+}
+Value const& Value::operator[](std::string const& key) const
+{
+  Value const* found = find(key.data(), key.data() + key.length());
+  if (!found) return nullRef;
+  return *found;
+}
+
+Value& Value::operator[](const char* key) {
+  return resolveReference(key, key + strlen(key));
+}
+
+Value& Value::operator[](const std::string& key) {
+  return resolveReference(key.data(), key.data() + key.length());
+}
+
+Value& Value::operator[](const StaticString& key) {
+  return resolveReference(key.c_str());
+}
+
+#ifdef JSON_USE_CPPTL
+Value& Value::operator[](const CppTL::ConstString& key) {
+  return resolveReference(key.c_str(), key.end_c_str());
+}
+Value const& Value::operator[](CppTL::ConstString const& key) const
+{
+  Value const* found = find(key.c_str(), key.end_c_str());
+  if (!found) return nullRef;
+  return *found;
+}
+#endif
+
+Value& Value::append(const Value& value) { return (*this)[size()] = value; }
+
+Value Value::get(char const* key, char const* end, Value const& defaultValue) const
+{
+  Value const* found = find(key, end);
+  return !found ? defaultValue : *found;
+}
+Value Value::get(char const* key, Value const& defaultValue) const
+{
+  return get(key, key + strlen(key), defaultValue);
+}
+Value Value::get(std::string const& key, Value const& defaultValue) const
+{
+  return get(key.data(), key.data() + key.length(), defaultValue);
+}
+
+
+bool Value::removeMember(const char* key, const char* end, Value* removed)
+{
+  if (type_ != objectValue) {
+    return false;
+  }
+  CZString actualKey(key, static_cast<unsigned>(end-key), CZString::noDuplication);
+  ObjectValues::iterator it = value_.map_->find(actualKey);
+  if (it == value_.map_->end())
+    return false;
+  *removed = it->second;
+  value_.map_->erase(it);
+  return true;
+}
+bool Value::removeMember(const char* key, Value* removed)
+{
+  return removeMember(key, key + strlen(key), removed);
+}
+bool Value::removeMember(std::string const& key, Value* removed)
+{
+  return removeMember(key.data(), key.data() + key.length(), removed);
+}
+Value Value::removeMember(const char* key)
+{
+  JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue,
+                      "in Json::Value::removeMember(): requires objectValue");
+  if (type_ == nullValue)
+    return nullRef;
+
+  Value removed;  // null
+  removeMember(key, key + strlen(key), &removed);
+  return removed; // still null if removeMember() did nothing
+}
+Value Value::removeMember(const std::string& key)
+{
+  return removeMember(key.c_str());
+}
+
+bool Value::removeIndex(ArrayIndex index, Value* removed) {
+  if (type_ != arrayValue) {
+    return false;
+  }
+  CZString key(index);
+  ObjectValues::iterator it = value_.map_->find(key);
+  if (it == value_.map_->end()) {
+    return false;
+  }
+  *removed = it->second;
+  ArrayIndex oldSize = size();
+  // shift left all items left, into the place of the "removed"
+  for (ArrayIndex i = index; i < (oldSize - 1); ++i){
+    CZString key(i);
+    (*value_.map_)[key] = (*this)[i + 1];
+  }
+  // erase the last one ("leftover")
+  CZString keyLast(oldSize - 1);
+  ObjectValues::iterator itLast = value_.map_->find(keyLast);
+  value_.map_->erase(itLast);
+  return true;
+}
+
+#ifdef JSON_USE_CPPTL
+Value Value::get(const CppTL::ConstString& key,
+                 const Value& defaultValue) const {
+  return get(key.c_str(), key.end_c_str(), defaultValue);
+}
+#endif
+
+bool Value::isMember(char const* key, char const* end) const
+{
+  Value const* value = find(key, end);
+  return NULL != value;
+}
+bool Value::isMember(char const* key) const
+{
+  return isMember(key, key + strlen(key));
+}
+bool Value::isMember(std::string const& key) const
+{
+  return isMember(key.data(), key.data() + key.length());
+}
+
+#ifdef JSON_USE_CPPTL
+bool Value::isMember(const CppTL::ConstString& key) const {
+  return isMember(key.c_str(), key.end_c_str());
+}
+#endif
+
+Value::Members Value::getMemberNames() const {
+  JSON_ASSERT_MESSAGE(
+      type_ == nullValue || type_ == objectValue,
+      "in Json::Value::getMemberNames(), value must be objectValue");
+  if (type_ == nullValue)
+    return Value::Members();
+  Members members;
+  members.reserve(value_.map_->size());
+  ObjectValues::const_iterator it = value_.map_->begin();
+  ObjectValues::const_iterator itEnd = value_.map_->end();
+  for (; it != itEnd; ++it) {
+    members.push_back(std::string((*it).first.data(),
+                                  (*it).first.length()));
+  }
+  return members;
+}
+//
+//# ifdef JSON_USE_CPPTL
+// EnumMemberNames
+// Value::enumMemberNames() const
+//{
+//   if ( type_ == objectValue )
+//   {
+//      return CppTL::Enum::any(  CppTL::Enum::transform(
+//         CppTL::Enum::keys( *(value_.map_), CppTL::Type<const CZString &>() ),
+//         MemberNamesTransform() ) );
+//   }
+//   return EnumMemberNames();
+//}
+//
+//
+// EnumValues
+// Value::enumValues() const
+//{
+//   if ( type_ == objectValue  ||  type_ == arrayValue )
+//      return CppTL::Enum::anyValues( *(value_.map_),
+//                                     CppTL::Type<const Value &>() );
+//   return EnumValues();
+//}
+//
+//# endif
+
+static bool IsIntegral(double d) {
+  double integral_part;
+  return modf(d, &integral_part) == 0.0;
+}
+
+bool Value::isNull() const { return type_ == nullValue; }
+
+bool Value::isBool() const { return type_ == booleanValue; }
+
+bool Value::isInt() const {
+  switch (type_) {
+  case intValue:
+    return value_.int_ >= minInt && value_.int_ <= maxInt;
+  case uintValue:
+    return value_.uint_ <= UInt(maxInt);
+  case realValue:
+    return value_.real_ >= minInt && value_.real_ <= maxInt &&
+           IsIntegral(value_.real_);
+  default:
+    break;
+  }
+  return false;
+}
+
+bool Value::isUInt() const {
+  switch (type_) {
+  case intValue:
+    return value_.int_ >= 0 && LargestUInt(value_.int_) <= LargestUInt(maxUInt);
+  case uintValue:
+    return value_.uint_ <= maxUInt;
+  case realValue:
+    return value_.real_ >= 0 && value_.real_ <= maxUInt &&
+           IsIntegral(value_.real_);
+  default:
+    break;
+  }
+  return false;
+}
+
+bool Value::isInt64() const {
+#if defined(JSON_HAS_INT64)
+  switch (type_) {
+  case intValue:
+    return true;
+  case uintValue:
+    return value_.uint_ <= UInt64(maxInt64);
+  case realValue:
+    // Note that maxInt64 (= 2^63 - 1) is not exactly representable as a
+    // double, so double(maxInt64) will be rounded up to 2^63. Therefore we
+    // require the value to be strictly less than the limit.
+    return value_.real_ >= double(minInt64) &&
+           value_.real_ < double(maxInt64) && IsIntegral(value_.real_);
+  default:
+    break;
+  }
+#endif // JSON_HAS_INT64
+  return false;
+}
+
+bool Value::isUInt64() const {
+#if defined(JSON_HAS_INT64)
+  switch (type_) {
+  case intValue:
+    return value_.int_ >= 0;
+  case uintValue:
+    return true;
+  case realValue:
+    // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a
+    // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we
+    // require the value to be strictly less than the limit.
+    return value_.real_ >= 0 && value_.real_ < maxUInt64AsDouble &&
+           IsIntegral(value_.real_);
+  default:
+    break;
+  }
+#endif // JSON_HAS_INT64
+  return false;
+}
+
+bool Value::isIntegral() const {
+#if defined(JSON_HAS_INT64)
+  return isInt64() || isUInt64();
+#else
+  return isInt() || isUInt();
+#endif
+}
+
+bool Value::isDouble() const { return type_ == realValue || isIntegral(); }
+
+bool Value::isNumeric() const { return isIntegral() || isDouble(); }
+
+bool Value::isString() const { return type_ == stringValue; }
+
+bool Value::isArray() const { return type_ == arrayValue; }
+
+bool Value::isObject() const { return type_ == objectValue; }
+
+void Value::setComment(const char* comment, size_t len, CommentPlacement placement) {
+  if (!comments_)
+    comments_ = new CommentInfo[numberOfCommentPlacement];
+  if ((len > 0) && (comment[len-1] == '\n')) {
+    // Always discard trailing newline, to aid indentation.
+    len -= 1;
+  }
+  comments_[placement].setComment(comment, len);
+}
+
+void Value::setComment(const char* comment, CommentPlacement placement) {
+  setComment(comment, strlen(comment), placement);
+}
+
+void Value::setComment(const std::string& comment, CommentPlacement placement) {
+  setComment(comment.c_str(), comment.length(), placement);
+}
+
+bool Value::hasComment(CommentPlacement placement) const {
+  return comments_ != 0 && comments_[placement].comment_ != 0;
+}
+
+std::string Value::getComment(CommentPlacement placement) const {
+  if (hasComment(placement))
+    return comments_[placement].comment_;
+  return "";
+}
+
+void Value::setOffsetStart(size_t start) { start_ = start; }
+
+void Value::setOffsetLimit(size_t limit) { limit_ = limit; }
+
+size_t Value::getOffsetStart() const { return start_; }
+
+size_t Value::getOffsetLimit() const { return limit_; }
+
+std::string Value::toStyledString() const {
+  StyledWriter writer;
+  return writer.write(*this);
+}
+
+Value::const_iterator Value::begin() const {
+  switch (type_) {
+  case arrayValue:
+  case objectValue:
+    if (value_.map_)
+      return const_iterator(value_.map_->begin());
+    break;
+  default:
+    break;
+  }
+  return const_iterator();
+}
+
+Value::const_iterator Value::end() const {
+  switch (type_) {
+  case arrayValue:
+  case objectValue:
+    if (value_.map_)
+      return const_iterator(value_.map_->end());
+    break;
+  default:
+    break;
+  }
+  return const_iterator();
+}
+
+Value::iterator Value::begin() {
+  switch (type_) {
+  case arrayValue:
+  case objectValue:
+    if (value_.map_)
+      return iterator(value_.map_->begin());
+    break;
+  default:
+    break;
+  }
+  return iterator();
+}
+
+Value::iterator Value::end() {
+  switch (type_) {
+  case arrayValue:
+  case objectValue:
+    if (value_.map_)
+      return iterator(value_.map_->end());
+    break;
+  default:
+    break;
+  }
+  return iterator();
+}
+
+// class PathArgument
+// //////////////////////////////////////////////////////////////////
+
+PathArgument::PathArgument() : key_(), index_(), kind_(kindNone) {}
+
+PathArgument::PathArgument(ArrayIndex index)
+    : key_(), index_(index), kind_(kindIndex) {}
+
+PathArgument::PathArgument(const char* key)
+    : key_(key), index_(), kind_(kindKey) {}
+
+PathArgument::PathArgument(const std::string& key)
+    : key_(key.c_str()), index_(), kind_(kindKey) {}
+
+// class Path
+// //////////////////////////////////////////////////////////////////
+
+Path::Path(const std::string& path,
+           const PathArgument& a1,
+           const PathArgument& a2,
+           const PathArgument& a3,
+           const PathArgument& a4,
+           const PathArgument& a5) {
+  InArgs in;
+  in.push_back(&a1);
+  in.push_back(&a2);
+  in.push_back(&a3);
+  in.push_back(&a4);
+  in.push_back(&a5);
+  makePath(path, in);
+}
+
+void Path::makePath(const std::string& path, const InArgs& in) {
+  const char* current = path.c_str();
+  const char* end = current + path.length();
+  InArgs::const_iterator itInArg = in.begin();
+  while (current != end) {
+    if (*current == '[') {
+      ++current;
+      if (*current == '%')
+        addPathInArg(path, in, itInArg, PathArgument::kindIndex);
+      else {
+        ArrayIndex index = 0;
+        for (; current != end && *current >= '0' && *current <= '9'; ++current)
+          index = index * 10 + ArrayIndex(*current - '0');
+        args_.push_back(index);
+      }
+      if (current == end || *current++ != ']')
+        invalidPath(path, int(current - path.c_str()));
+    } else if (*current == '%') {
+      addPathInArg(path, in, itInArg, PathArgument::kindKey);
+      ++current;
+    } else if (*current == '.') {
+      ++current;
+    } else {
+      const char* beginName = current;
+      while (current != end && !strchr("[.", *current))
+        ++current;
+      args_.push_back(std::string(beginName, current));
+    }
+  }
+}
+
+void Path::addPathInArg(const std::string& /*path*/,
+                        const InArgs& in,
+                        InArgs::const_iterator& itInArg,
+                        PathArgument::Kind kind) {
+  if (itInArg == in.end()) {
+    // Error: missing argument %d
+  } else if ((*itInArg)->kind_ != kind) {
+    // Error: bad argument type
+  } else {
+    args_.push_back(**itInArg);
+  }
+}
+
+void Path::invalidPath(const std::string& /*path*/, int /*location*/) {
+  // Error: invalid path.
+}
+
+const Value& Path::resolve(const Value& root) const {
+  const Value* node = &root;
+  for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) {
+    const PathArgument& arg = *it;
+    if (arg.kind_ == PathArgument::kindIndex) {
+      if (!node->isArray() || !node->isValidIndex(arg.index_)) {
+        // Error: unable to resolve path (array value expected at position...
+      }
+      node = &((*node)[arg.index_]);
+    } else if (arg.kind_ == PathArgument::kindKey) {
+      if (!node->isObject()) {
+        // Error: unable to resolve path (object value expected at position...)
+      }
+      node = &((*node)[arg.key_]);
+      if (node == &Value::nullRef) {
+        // Error: unable to resolve path (object has no member named '' at
+        // position...)
+      }
+    }
+  }
+  return *node;
+}
+
+Value Path::resolve(const Value& root, const Value& defaultValue) const {
+  const Value* node = &root;
+  for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) {
+    const PathArgument& arg = *it;
+    if (arg.kind_ == PathArgument::kindIndex) {
+      if (!node->isArray() || !node->isValidIndex(arg.index_))
+        return defaultValue;
+      node = &((*node)[arg.index_]);
+    } else if (arg.kind_ == PathArgument::kindKey) {
+      if (!node->isObject())
+        return defaultValue;
+      node = &((*node)[arg.key_]);
+      if (node == &Value::nullRef)
+        return defaultValue;
+    }
+  }
+  return *node;
+}
+
+Value& Path::make(Value& root) const {
+  Value* node = &root;
+  for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) {
+    const PathArgument& arg = *it;
+    if (arg.kind_ == PathArgument::kindIndex) {
+      if (!node->isArray()) {
+        // Error: node is not an array at position ...
+      }
+      node = &((*node)[arg.index_]);
+    } else if (arg.kind_ == PathArgument::kindKey) {
+      if (!node->isObject()) {
+        // Error: node is not an object at position...
+      }
+      node = &((*node)[arg.key_]);
+    }
+  }
+  return *node;
+}
+
+} // namespace Json
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: src/lib_json/json_value.cpp
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: src/lib_json/json_writer.cpp
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2011 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include <json/writer.h>
+#include "json_tool.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <iomanip>
+#include <memory>
+#include <sstream>
+#include <utility>
+#include <set>
+#include <cassert>
+#include <cstring>
+#include <cstdio>
+
+#if defined(_MSC_VER) && _MSC_VER >= 1200 && _MSC_VER < 1800 // Between VC++ 6.0 and VC++ 11.0
+#include <float.h>
+#define isfinite _finite
+#elif defined(__sun) && defined(__SVR4) //Solaris
+#include <ieeefp.h>
+#define isfinite finite
+#else
+#include <cmath>
+#define isfinite std::isfinite
+#endif
+
+#if defined(_MSC_VER) && _MSC_VER < 1500 // VC++ 8.0 and below
+#define snprintf _snprintf
+#elif __cplusplus >= 201103L
+#define snprintf std::snprintf
+#endif
+
+#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0
+// Disable warning about strdup being deprecated.
+#pragma warning(disable : 4996)
+#endif
+
+namespace Json {
+
+#if __cplusplus >= 201103L
+typedef std::unique_ptr<StreamWriter> StreamWriterPtr;
+#else
+typedef std::auto_ptr<StreamWriter>   StreamWriterPtr;
+#endif
+
+static bool containsControlCharacter(const char* str) {
+  while (*str) {
+    if (isControlCharacter(*(str++)))
+      return true;
+  }
+  return false;
+}
+
+static bool containsControlCharacter0(const char* str, unsigned len) {
+  char const* end = str + len;
+  while (end != str) {
+    if (isControlCharacter(*str) || 0==*str)
+      return true;
+    ++str;
+  }
+  return false;
+}
+
+std::string valueToString(LargestInt value) {
+  UIntToStringBuffer buffer;
+  char* current = buffer + sizeof(buffer);
+  bool isNegative = value < 0;
+  if (isNegative)
+    value = -value;
+  uintToString(LargestUInt(value), current);
+  if (isNegative)
+    *--current = '-';
+  assert(current >= buffer);
+  return current;
+}
+
+std::string valueToString(LargestUInt value) {
+  UIntToStringBuffer buffer;
+  char* current = buffer + sizeof(buffer);
+  uintToString(value, current);
+  assert(current >= buffer);
+  return current;
+}
+
+#if defined(JSON_HAS_INT64)
+
+std::string valueToString(Int value) {
+  return valueToString(LargestInt(value));
+}
+
+std::string valueToString(UInt value) {
+  return valueToString(LargestUInt(value));
+}
+
+#endif // # if defined(JSON_HAS_INT64)
+
+std::string valueToString(double value) {
+  // Allocate a buffer that is more than large enough to store the 16 digits of
+  // precision requested below.
+  char buffer[32];
+  int len = -1;
+
+// Print into the buffer. We need not request the alternative representation
+// that always has a decimal point because JSON doesn't distingish the
+// concepts of reals and integers.
+#if defined(_MSC_VER) && defined(__STDC_SECURE_LIB__) // Use secure version with
+                                                      // visual studio 2005 to
+                                                      // avoid warning.
+#if defined(WINCE)
+  len = _snprintf(buffer, sizeof(buffer), "%.17g", value);
+#else
+  len = sprintf_s(buffer, sizeof(buffer), "%.17g", value);
+#endif
+#else
+  if (isfinite(value)) {
+    len = snprintf(buffer, sizeof(buffer), "%.17g", value);
+  } else {
+    // IEEE standard states that NaN values will not compare to themselves
+    if (value != value) {
+      len = snprintf(buffer, sizeof(buffer), "null");
+    } else if (value < 0) {
+      len = snprintf(buffer, sizeof(buffer), "-1e+9999");
+    } else {
+      len = snprintf(buffer, sizeof(buffer), "1e+9999");
+    }
+    // For those, we do not need to call fixNumLoc, but it is fast.
+  }
+#endif
+  assert(len >= 0);
+  fixNumericLocale(buffer, buffer + len);
+  return buffer;
+}
+
+std::string valueToString(bool value) { return value ? "true" : "false"; }
+
+std::string valueToQuotedString(const char* value) {
+  if (value == NULL)
+    return "";
+  // Not sure how to handle unicode...
+  if (strpbrk(value, "\"\\\b\f\n\r\t") == NULL &&
+      !containsControlCharacter(value))
+    return std::string("\"") + value + "\"";
+  // We have to walk value and escape any special characters.
+  // Appending to std::string is not efficient, but this should be rare.
+  // (Note: forward slashes are *not* rare, but I am not escaping them.)
+  std::string::size_type maxsize =
+      strlen(value) * 2 + 3; // allescaped+quotes+NULL
+  std::string result;
+  result.reserve(maxsize); // to avoid lots of mallocs
+  result += "\"";
+  for (const char* c = value; *c != 0; ++c) {
+    switch (*c) {
+    case '\"':
+      result += "\\\"";
+      break;
+    case '\\':
+      result += "\\\\";
+      break;
+    case '\b':
+      result += "\\b";
+      break;
+    case '\f':
+      result += "\\f";
+      break;
+    case '\n':
+      result += "\\n";
+      break;
+    case '\r':
+      result += "\\r";
+      break;
+    case '\t':
+      result += "\\t";
+      break;
+    // case '/':
+    // Even though \/ is considered a legal escape in JSON, a bare
+    // slash is also legal, so I see no reason to escape it.
+    // (I hope I am not misunderstanding something.
+    // blep notes: actually escaping \/ may be useful in javascript to avoid </
+    // sequence.
+    // Should add a flag to allow this compatibility mode and prevent this
+    // sequence from occurring.
+    default:
+      if (isControlCharacter(*c)) {
+        std::ostringstream oss;
+        oss << "\\u" << std::hex << std::uppercase << std::setfill('0')
+            << std::setw(4) << static_cast<int>(*c);
+        result += oss.str();
+      } else {
+        result += *c;
+      }
+      break;
+    }
+  }
+  result += "\"";
+  return result;
+}
+
+// https://github.com/upcaste/upcaste/blob/master/src/upcore/src/cstring/strnpbrk.cpp
+static char const* strnpbrk(char const* s, char const* accept, size_t n) {
+  assert((s || !n) && accept);
+
+  char const* const end = s + n;
+  for (char const* cur = s; cur < end; ++cur) {
+    int const c = *cur;
+    for (char const* a = accept; *a; ++a) {
+      if (*a == c) {
+        return cur;
+      }
+    }
+  }
+  return NULL;
+}
+static std::string valueToQuotedStringN(const char* value, unsigned length) {
+  if (value == NULL)
+    return "";
+  // Not sure how to handle unicode...
+  if (strnpbrk(value, "\"\\\b\f\n\r\t", length) == NULL &&
+      !containsControlCharacter0(value, length))
+    return std::string("\"") + value + "\"";
+  // We have to walk value and escape any special characters.
+  // Appending to std::string is not efficient, but this should be rare.
+  // (Note: forward slashes are *not* rare, but I am not escaping them.)
+  std::string::size_type maxsize =
+      length * 2 + 3; // allescaped+quotes+NULL
+  std::string result;
+  result.reserve(maxsize); // to avoid lots of mallocs
+  result += "\"";
+  char const* end = value + length;
+  for (const char* c = value; c != end; ++c) {
+    switch (*c) {
+    case '\"':
+      result += "\\\"";
+      break;
+    case '\\':
+      result += "\\\\";
+      break;
+    case '\b':
+      result += "\\b";
+      break;
+    case '\f':
+      result += "\\f";
+      break;
+    case '\n':
+      result += "\\n";
+      break;
+    case '\r':
+      result += "\\r";
+      break;
+    case '\t':
+      result += "\\t";
+      break;
+    // case '/':
+    // Even though \/ is considered a legal escape in JSON, a bare
+    // slash is also legal, so I see no reason to escape it.
+    // (I hope I am not misunderstanding something.)
+    // blep notes: actually escaping \/ may be useful in javascript to avoid </
+    // sequence.
+    // Should add a flag to allow this compatibility mode and prevent this
+    // sequence from occurring.
+    default:
+      if ((isControlCharacter(*c)) || (*c == 0)) {
+        std::ostringstream oss;
+        oss << "\\u" << std::hex << std::uppercase << std::setfill('0')
+            << std::setw(4) << static_cast<int>(*c);
+        result += oss.str();
+      } else {
+        result += *c;
+      }
+      break;
+    }
+  }
+  result += "\"";
+  return result;
+}
+
+// Class Writer
+// //////////////////////////////////////////////////////////////////
+Writer::~Writer() {}
+
+// Class FastWriter
+// //////////////////////////////////////////////////////////////////
+
+FastWriter::FastWriter()
+    : yamlCompatiblityEnabled_(false), dropNullPlaceholders_(false),
+      omitEndingLineFeed_(false) {}
+
+void FastWriter::enableYAMLCompatibility() { yamlCompatiblityEnabled_ = true; }
+
+void FastWriter::dropNullPlaceholders() { dropNullPlaceholders_ = true; }
+
+void FastWriter::omitEndingLineFeed() { omitEndingLineFeed_ = true; }
+
+std::string FastWriter::write(const Value& root) {
+  document_ = "";
+  writeValue(root);
+  if (!omitEndingLineFeed_)
+    document_ += "\n";
+  return document_;
+}
+
+void FastWriter::writeValue(const Value& value) {
+  switch (value.type()) {
+  case nullValue:
+    if (!dropNullPlaceholders_)
+      document_ += "null";
+    break;
+  case intValue:
+    document_ += valueToString(value.asLargestInt());
+    break;
+  case uintValue:
+    document_ += valueToString(value.asLargestUInt());
+    break;
+  case realValue:
+    document_ += valueToString(value.asDouble());
+    break;
+  case stringValue:
+  {
+    // Is NULL possible for value.string_?
+    char const* str;
+    char const* end;
+    bool ok = value.getString(&str, &end);
+    if (ok) document_ += valueToQuotedStringN(str, static_cast<unsigned>(end-str));
+    break;
+  }
+  case booleanValue:
+    document_ += valueToString(value.asBool());
+    break;
+  case arrayValue: {
+    document_ += '[';
+    int size = value.size();
+    for (int index = 0; index < size; ++index) {
+      if (index > 0)
+        document_ += ',';
+      writeValue(value[index]);
+    }
+    document_ += ']';
+  } break;
+  case objectValue: {
+    Value::Members members(value.getMemberNames());
+    document_ += '{';
+    for (Value::Members::iterator it = members.begin(); it != members.end();
+         ++it) {
+      const std::string& name = *it;
+      if (it != members.begin())
+        document_ += ',';
+      document_ += valueToQuotedStringN(name.data(), name.length());
+      document_ += yamlCompatiblityEnabled_ ? ": " : ":";
+      writeValue(value[name]);
+    }
+    document_ += '}';
+  } break;
+  }
+}
+
+// Class StyledWriter
+// //////////////////////////////////////////////////////////////////
+
+StyledWriter::StyledWriter()
+    : rightMargin_(74), indentSize_(3), addChildValues_() {}
+
+std::string StyledWriter::write(const Value& root) {
+  document_ = "";
+  addChildValues_ = false;
+  indentString_ = "";
+  writeCommentBeforeValue(root);
+  writeValue(root);
+  writeCommentAfterValueOnSameLine(root);
+  document_ += "\n";
+  return document_;
+}
+
+void StyledWriter::writeValue(const Value& value) {
+  switch (value.type()) {
+  case nullValue:
+    pushValue("null");
+    break;
+  case intValue:
+    pushValue(valueToString(value.asLargestInt()));
+    break;
+  case uintValue:
+    pushValue(valueToString(value.asLargestUInt()));
+    break;
+  case realValue:
+    pushValue(valueToString(value.asDouble()));
+    break;
+  case stringValue:
+  {
+    // Is NULL possible for value.string_?
+    char const* str;
+    char const* end;
+    bool ok = value.getString(&str, &end);
+    if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str)));
+    else pushValue("");
+    break;
+  }
+  case booleanValue:
+    pushValue(valueToString(value.asBool()));
+    break;
+  case arrayValue:
+    writeArrayValue(value);
+    break;
+  case objectValue: {
+    Value::Members members(value.getMemberNames());
+    if (members.empty())
+      pushValue("{}");
+    else {
+      writeWithIndent("{");
+      indent();
+      Value::Members::iterator it = members.begin();
+      for (;;) {
+        const std::string& name = *it;
+        const Value& childValue = value[name];
+        writeCommentBeforeValue(childValue);
+        writeWithIndent(valueToQuotedString(name.c_str()));
+        document_ += " : ";
+        writeValue(childValue);
+        if (++it == members.end()) {
+          writeCommentAfterValueOnSameLine(childValue);
+          break;
+        }
+        document_ += ',';
+        writeCommentAfterValueOnSameLine(childValue);
+      }
+      unindent();
+      writeWithIndent("}");
+    }
+  } break;
+  }
+}
+
+void StyledWriter::writeArrayValue(const Value& value) {
+  unsigned size = value.size();
+  if (size == 0)
+    pushValue("[]");
+  else {
+    bool isArrayMultiLine = isMultineArray(value);
+    if (isArrayMultiLine) {
+      writeWithIndent("[");
+      indent();
+      bool hasChildValue = !childValues_.empty();
+      unsigned index = 0;
+      for (;;) {
+        const Value& childValue = value[index];
+        writeCommentBeforeValue(childValue);
+        if (hasChildValue)
+          writeWithIndent(childValues_[index]);
+        else {
+          writeIndent();
+          writeValue(childValue);
+        }
+        if (++index == size) {
+          writeCommentAfterValueOnSameLine(childValue);
+          break;
+        }
+        document_ += ',';
+        writeCommentAfterValueOnSameLine(childValue);
+      }
+      unindent();
+      writeWithIndent("]");
+    } else // output on a single line
+    {
+      assert(childValues_.size() == size);
+      document_ += "[ ";
+      for (unsigned index = 0; index < size; ++index) {
+        if (index > 0)
+          document_ += ", ";
+        document_ += childValues_[index];
+      }
+      document_ += " ]";
+    }
+  }
+}
+
+bool StyledWriter::isMultineArray(const Value& value) {
+  int size = value.size();
+  bool isMultiLine = size * 3 >= rightMargin_;
+  childValues_.clear();
+  for (int index = 0; index < size && !isMultiLine; ++index) {
+    const Value& childValue = value[index];
+    isMultiLine =
+        isMultiLine || ((childValue.isArray() || childValue.isObject()) &&
+                        childValue.size() > 0);
+  }
+  if (!isMultiLine) // check if line length > max line length
+  {
+    childValues_.reserve(size);
+    addChildValues_ = true;
+    int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
+    for (int index = 0; index < size; ++index) {
+      if (hasCommentForValue(value[index])) {
+        isMultiLine = true;
+      }
+      writeValue(value[index]);
+      lineLength += int(childValues_[index].length());
+    }
+    addChildValues_ = false;
+    isMultiLine = isMultiLine || lineLength >= rightMargin_;
+  }
+  return isMultiLine;
+}
+
+void StyledWriter::pushValue(const std::string& value) {
+  if (addChildValues_)
+    childValues_.push_back(value);
+  else
+    document_ += value;
+}
+
+void StyledWriter::writeIndent() {
+  if (!document_.empty()) {
+    char last = document_[document_.length() - 1];
+    if (last == ' ') // already indented
+      return;
+    if (last != '\n') // Comments may add new-line
+      document_ += '\n';
+  }
+  document_ += indentString_;
+}
+
+void StyledWriter::writeWithIndent(const std::string& value) {
+  writeIndent();
+  document_ += value;
+}
+
+void StyledWriter::indent() { indentString_ += std::string(indentSize_, ' '); }
+
+void StyledWriter::unindent() {
+  assert(int(indentString_.size()) >= indentSize_);
+  indentString_.resize(indentString_.size() - indentSize_);
+}
+
+void StyledWriter::writeCommentBeforeValue(const Value& root) {
+  if (!root.hasComment(commentBefore))
+    return;
+
+  document_ += "\n";
+  writeIndent();
+  const std::string& comment = root.getComment(commentBefore);
+  std::string::const_iterator iter = comment.begin();
+  while (iter != comment.end()) {
+    document_ += *iter;
+    if (*iter == '\n' &&
+       (iter != comment.end() && *(iter + 1) == '/'))
+      writeIndent();
+    ++iter;
+  }
+
+  // Comments are stripped of trailing newlines, so add one here
+  document_ += "\n";
+}
+
+void StyledWriter::writeCommentAfterValueOnSameLine(const Value& root) {
+  if (root.hasComment(commentAfterOnSameLine))
+    document_ += " " + root.getComment(commentAfterOnSameLine);
+
+  if (root.hasComment(commentAfter)) {
+    document_ += "\n";
+    document_ += root.getComment(commentAfter);
+    document_ += "\n";
+  }
+}
+
+bool StyledWriter::hasCommentForValue(const Value& value) {
+  return value.hasComment(commentBefore) ||
+         value.hasComment(commentAfterOnSameLine) ||
+         value.hasComment(commentAfter);
+}
+
+// Class StyledStreamWriter
+// //////////////////////////////////////////////////////////////////
+
+StyledStreamWriter::StyledStreamWriter(std::string indentation)
+    : document_(NULL), rightMargin_(74), indentation_(indentation),
+      addChildValues_() {}
+
+void StyledStreamWriter::write(std::ostream& out, const Value& root) {
+  document_ = &out;
+  addChildValues_ = false;
+  indentString_ = "";
+  indented_ = true;
+  writeCommentBeforeValue(root);
+  if (!indented_) writeIndent();
+  indented_ = true;
+  writeValue(root);
+  writeCommentAfterValueOnSameLine(root);
+  *document_ << "\n";
+  document_ = NULL; // Forget the stream, for safety.
+}
+
+void StyledStreamWriter::writeValue(const Value& value) {
+  switch (value.type()) {
+  case nullValue:
+    pushValue("null");
+    break;
+  case intValue:
+    pushValue(valueToString(value.asLargestInt()));
+    break;
+  case uintValue:
+    pushValue(valueToString(value.asLargestUInt()));
+    break;
+  case realValue:
+    pushValue(valueToString(value.asDouble()));
+    break;
+  case stringValue:
+  {
+    // Is NULL possible for value.string_?
+    char const* str;
+    char const* end;
+    bool ok = value.getString(&str, &end);
+    if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str)));
+    else pushValue("");
+    break;
+  }
+  case booleanValue:
+    pushValue(valueToString(value.asBool()));
+    break;
+  case arrayValue:
+    writeArrayValue(value);
+    break;
+  case objectValue: {
+    Value::Members members(value.getMemberNames());
+    if (members.empty())
+      pushValue("{}");
+    else {
+      writeWithIndent("{");
+      indent();
+      Value::Members::iterator it = members.begin();
+      for (;;) {
+        const std::string& name = *it;
+        const Value& childValue = value[name];
+        writeCommentBeforeValue(childValue);
+        writeWithIndent(valueToQuotedString(name.c_str()));
+        *document_ << " : ";
+        writeValue(childValue);
+        if (++it == members.end()) {
+          writeCommentAfterValueOnSameLine(childValue);
+          break;
+        }
+        *document_ << ",";
+        writeCommentAfterValueOnSameLine(childValue);
+      }
+      unindent();
+      writeWithIndent("}");
+    }
+  } break;
+  }
+}
+
+void StyledStreamWriter::writeArrayValue(const Value& value) {
+  unsigned size = value.size();
+  if (size == 0)
+    pushValue("[]");
+  else {
+    bool isArrayMultiLine = isMultineArray(value);
+    if (isArrayMultiLine) {
+      writeWithIndent("[");
+      indent();
+      bool hasChildValue = !childValues_.empty();
+      unsigned index = 0;
+      for (;;) {
+        const Value& childValue = value[index];
+        writeCommentBeforeValue(childValue);
+        if (hasChildValue)
+          writeWithIndent(childValues_[index]);
+        else {
+          if (!indented_) writeIndent();
+          indented_ = true;
+          writeValue(childValue);
+          indented_ = false;
+        }
+        if (++index == size) {
+          writeCommentAfterValueOnSameLine(childValue);
+          break;
+        }
+        *document_ << ",";
+        writeCommentAfterValueOnSameLine(childValue);
+      }
+      unindent();
+      writeWithIndent("]");
+    } else // output on a single line
+    {
+      assert(childValues_.size() == size);
+      *document_ << "[ ";
+      for (unsigned index = 0; index < size; ++index) {
+        if (index > 0)
+          *document_ << ", ";
+        *document_ << childValues_[index];
+      }
+      *document_ << " ]";
+    }
+  }
+}
+
+bool StyledStreamWriter::isMultineArray(const Value& value) {
+  int size = value.size();
+  bool isMultiLine = size * 3 >= rightMargin_;
+  childValues_.clear();
+  for (int index = 0; index < size && !isMultiLine; ++index) {
+    const Value& childValue = value[index];
+    isMultiLine =
+        isMultiLine || ((childValue.isArray() || childValue.isObject()) &&
+                        childValue.size() > 0);
+  }
+  if (!isMultiLine) // check if line length > max line length
+  {
+    childValues_.reserve(size);
+    addChildValues_ = true;
+    int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
+    for (int index = 0; index < size; ++index) {
+      if (hasCommentForValue(value[index])) {
+        isMultiLine = true;
+      }
+      writeValue(value[index]);
+      lineLength += int(childValues_[index].length());
+    }
+    addChildValues_ = false;
+    isMultiLine = isMultiLine || lineLength >= rightMargin_;
+  }
+  return isMultiLine;
+}
+
+void StyledStreamWriter::pushValue(const std::string& value) {
+  if (addChildValues_)
+    childValues_.push_back(value);
+  else
+    *document_ << value;
+}
+
+void StyledStreamWriter::writeIndent() {
+  // blep intended this to look at the so-far-written string
+  // to determine whether we are already indented, but
+  // with a stream we cannot do that. So we rely on some saved state.
+  // The caller checks indented_.
+  *document_ << '\n' << indentString_;
+}
+
+void StyledStreamWriter::writeWithIndent(const std::string& value) {
+  if (!indented_) writeIndent();
+  *document_ << value;
+  indented_ = false;
+}
+
+void StyledStreamWriter::indent() { indentString_ += indentation_; }
+
+void StyledStreamWriter::unindent() {
+  assert(indentString_.size() >= indentation_.size());
+  indentString_.resize(indentString_.size() - indentation_.size());
+}
+
+void StyledStreamWriter::writeCommentBeforeValue(const Value& root) {
+  if (!root.hasComment(commentBefore))
+    return;
+
+  if (!indented_) writeIndent();
+  const std::string& comment = root.getComment(commentBefore);
+  std::string::const_iterator iter = comment.begin();
+  while (iter != comment.end()) {
+    *document_ << *iter;
+    if (*iter == '\n' &&
+       (iter != comment.end() && *(iter + 1) == '/'))
+      // writeIndent();  // would include newline
+      *document_ << indentString_;
+    ++iter;
+  }
+  indented_ = false;
+}
+
+void StyledStreamWriter::writeCommentAfterValueOnSameLine(const Value& root) {
+  if (root.hasComment(commentAfterOnSameLine))
+    *document_ << ' ' << root.getComment(commentAfterOnSameLine);
+
+  if (root.hasComment(commentAfter)) {
+    writeIndent();
+    *document_ << root.getComment(commentAfter);
+  }
+  indented_ = false;
+}
+
+bool StyledStreamWriter::hasCommentForValue(const Value& value) {
+  return value.hasComment(commentBefore) ||
+         value.hasComment(commentAfterOnSameLine) ||
+         value.hasComment(commentAfter);
+}
+
+//////////////////////////
+// BuiltStyledStreamWriter
+
+/// Scoped enums are not available until C++11.
+struct CommentStyle {
+  /// Decide whether to write comments.
+  enum Enum {
+    None,  ///< Drop all comments.
+    Most,  ///< Recover odd behavior of previous versions (not implemented yet).
+    All  ///< Keep all comments.
+  };
+};
+
+struct BuiltStyledStreamWriter : public StreamWriter
+{
+  BuiltStyledStreamWriter(
+      std::string const& indentation,
+      CommentStyle::Enum cs,
+      std::string const& colonSymbol,
+      std::string const& nullSymbol,
+      std::string const& endingLineFeedSymbol);
+  virtual int write(Value const& root, std::ostream* sout);
+private:
+  void writeValue(Value const& value);
+  void writeArrayValue(Value const& value);
+  bool isMultineArray(Value const& value);
+  void pushValue(std::string const& value);
+  void writeIndent();
+  void writeWithIndent(std::string const& value);
+  void indent();
+  void unindent();
+  void writeCommentBeforeValue(Value const& root);
+  void writeCommentAfterValueOnSameLine(Value const& root);
+  static bool hasCommentForValue(const Value& value);
+
+  typedef std::vector<std::string> ChildValues;
+
+  ChildValues childValues_;
+  std::string indentString_;
+  int rightMargin_;
+  std::string indentation_;
+  CommentStyle::Enum cs_;
+  std::string colonSymbol_;
+  std::string nullSymbol_;
+  std::string endingLineFeedSymbol_;
+  bool addChildValues_ : 1;
+  bool indented_ : 1;
+};
+BuiltStyledStreamWriter::BuiltStyledStreamWriter(
+      std::string const& indentation,
+      CommentStyle::Enum cs,
+      std::string const& colonSymbol,
+      std::string const& nullSymbol,
+      std::string const& endingLineFeedSymbol)
+  : rightMargin_(74)
+  , indentation_(indentation)
+  , cs_(cs)
+  , colonSymbol_(colonSymbol)
+  , nullSymbol_(nullSymbol)
+  , endingLineFeedSymbol_(endingLineFeedSymbol)
+  , addChildValues_(false)
+  , indented_(false)
+{
+}
+int BuiltStyledStreamWriter::write(Value const& root, std::ostream* sout)
+{
+  sout_ = sout;
+  addChildValues_ = false;
+  indented_ = true;
+  indentString_ = "";
+  writeCommentBeforeValue(root);
+  if (!indented_) writeIndent();
+  indented_ = true;
+  writeValue(root);
+  writeCommentAfterValueOnSameLine(root);
+  *sout_ << endingLineFeedSymbol_;
+  sout_ = NULL;
+  return 0;
+}
+void BuiltStyledStreamWriter::writeValue(Value const& value) {
+  switch (value.type()) {
+  case nullValue:
+    pushValue(nullSymbol_);
+    break;
+  case intValue:
+    pushValue(valueToString(value.asLargestInt()));
+    break;
+  case uintValue:
+    pushValue(valueToString(value.asLargestUInt()));
+    break;
+  case realValue:
+    pushValue(valueToString(value.asDouble()));
+    break;
+  case stringValue:
+  {
+    // Is NULL is possible for value.string_?
+    char const* str;
+    char const* end;
+    bool ok = value.getString(&str, &end);
+    if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str)));
+    else pushValue("");
+    break;
+  }
+  case booleanValue:
+    pushValue(valueToString(value.asBool()));
+    break;
+  case arrayValue:
+    writeArrayValue(value);
+    break;
+  case objectValue: {
+    Value::Members members(value.getMemberNames());
+    if (members.empty())
+      pushValue("{}");
+    else {
+      writeWithIndent("{");
+      indent();
+      Value::Members::iterator it = members.begin();
+      for (;;) {
+        std::string const& name = *it;
+        Value const& childValue = value[name];
+        writeCommentBeforeValue(childValue);
+        writeWithIndent(valueToQuotedStringN(name.data(), name.length()));
+        *sout_ << colonSymbol_;
+        writeValue(childValue);
+        if (++it == members.end()) {
+          writeCommentAfterValueOnSameLine(childValue);
+          break;
+        }
+        *sout_ << ",";
+        writeCommentAfterValueOnSameLine(childValue);
+      }
+      unindent();
+      writeWithIndent("}");
+    }
+  } break;
+  }
+}
+
+void BuiltStyledStreamWriter::writeArrayValue(Value const& value) {
+  unsigned size = value.size();
+  if (size == 0)
+    pushValue("[]");
+  else {
+    bool isMultiLine = (cs_ == CommentStyle::All) || isMultineArray(value);
+    if (isMultiLine) {
+      writeWithIndent("[");
+      indent();
+      bool hasChildValue = !childValues_.empty();
+      unsigned index = 0;
+      for (;;) {
+        Value const& childValue = value[index];
+        writeCommentBeforeValue(childValue);
+        if (hasChildValue)
+          writeWithIndent(childValues_[index]);
+        else {
+          if (!indented_) writeIndent();
+          indented_ = true;
+          writeValue(childValue);
+          indented_ = false;
+        }
+        if (++index == size) {
+          writeCommentAfterValueOnSameLine(childValue);
+          break;
+        }
+        *sout_ << ",";
+        writeCommentAfterValueOnSameLine(childValue);
+      }
+      unindent();
+      writeWithIndent("]");
+    } else // output on a single line
+    {
+      assert(childValues_.size() == size);
+      *sout_ << "[";
+      if (!indentation_.empty()) *sout_ << " ";
+      for (unsigned index = 0; index < size; ++index) {
+        if (index > 0)
+          *sout_ << ", ";
+        *sout_ << childValues_[index];
+      }
+      if (!indentation_.empty()) *sout_ << " ";
+      *sout_ << "]";
+    }
+  }
+}
+
+bool BuiltStyledStreamWriter::isMultineArray(Value const& value) {
+  int size = value.size();
+  bool isMultiLine = size * 3 >= rightMargin_;
+  childValues_.clear();
+  for (int index = 0; index < size && !isMultiLine; ++index) {
+    Value const& childValue = value[index];
+    isMultiLine =
+        isMultiLine || ((childValue.isArray() || childValue.isObject()) &&
+                        childValue.size() > 0);
+  }
+  if (!isMultiLine) // check if line length > max line length
+  {
+    childValues_.reserve(size);
+    addChildValues_ = true;
+    int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
+    for (int index = 0; index < size; ++index) {
+      if (hasCommentForValue(value[index])) {
+        isMultiLine = true;
+      }
+      writeValue(value[index]);
+      lineLength += int(childValues_[index].length());
+    }
+    addChildValues_ = false;
+    isMultiLine = isMultiLine || lineLength >= rightMargin_;
+  }
+  return isMultiLine;
+}
+
+void BuiltStyledStreamWriter::pushValue(std::string const& value) {
+  if (addChildValues_)
+    childValues_.push_back(value);
+  else
+    *sout_ << value;
+}
+
+void BuiltStyledStreamWriter::writeIndent() {
+  // blep intended this to look at the so-far-written string
+  // to determine whether we are already indented, but
+  // with a stream we cannot do that. So we rely on some saved state.
+  // The caller checks indented_.
+
+  if (!indentation_.empty()) {
+    // In this case, drop newlines too.
+    *sout_ << '\n' << indentString_;
+  }
+}
+
+void BuiltStyledStreamWriter::writeWithIndent(std::string const& value) {
+  if (!indented_) writeIndent();
+  *sout_ << value;
+  indented_ = false;
+}
+
+void BuiltStyledStreamWriter::indent() { indentString_ += indentation_; }
+
+void BuiltStyledStreamWriter::unindent() {
+  assert(indentString_.size() >= indentation_.size());
+  indentString_.resize(indentString_.size() - indentation_.size());
+}
+
+void BuiltStyledStreamWriter::writeCommentBeforeValue(Value const& root) {
+  if (cs_ == CommentStyle::None) return;
+  if (!root.hasComment(commentBefore))
+    return;
+
+  if (!indented_) writeIndent();
+  const std::string& comment = root.getComment(commentBefore);
+  std::string::const_iterator iter = comment.begin();
+  while (iter != comment.end()) {
+    *sout_ << *iter;
+    if (*iter == '\n' &&
+       (iter != comment.end() && *(iter + 1) == '/'))
+      // writeIndent();  // would write extra newline
+      *sout_ << indentString_;
+    ++iter;
+  }
+  indented_ = false;
+}
+
+void BuiltStyledStreamWriter::writeCommentAfterValueOnSameLine(Value const& root) {
+  if (cs_ == CommentStyle::None) return;
+  if (root.hasComment(commentAfterOnSameLine))
+    *sout_ << " " + root.getComment(commentAfterOnSameLine);
+
+  if (root.hasComment(commentAfter)) {
+    writeIndent();
+    *sout_ << root.getComment(commentAfter);
+  }
+}
+
+// static
+bool BuiltStyledStreamWriter::hasCommentForValue(const Value& value) {
+  return value.hasComment(commentBefore) ||
+         value.hasComment(commentAfterOnSameLine) ||
+         value.hasComment(commentAfter);
+}
+
+///////////////
+// StreamWriter
+
+StreamWriter::StreamWriter()
+    : sout_(NULL)
+{
+}
+StreamWriter::~StreamWriter()
+{
+}
+StreamWriter::Factory::~Factory()
+{}
+StreamWriterBuilder::StreamWriterBuilder()
+{
+  setDefaults(&settings_);
+}
+StreamWriterBuilder::~StreamWriterBuilder()
+{}
+StreamWriter* StreamWriterBuilder::newStreamWriter() const
+{
+  std::string indentation = settings_["indentation"].asString();
+  std::string cs_str = settings_["commentStyle"].asString();
+  bool eyc = settings_["enableYAMLCompatibility"].asBool();
+  bool dnp = settings_["dropNullPlaceholders"].asBool();
+  CommentStyle::Enum cs = CommentStyle::All;
+  if (cs_str == "All") {
+    cs = CommentStyle::All;
+  } else if (cs_str == "None") {
+    cs = CommentStyle::None;
+  } else {
+    throwRuntimeError("commentStyle must be 'All' or 'None'");
+  }
+  std::string colonSymbol = " : ";
+  if (eyc) {
+    colonSymbol = ": ";
+  } else if (indentation.empty()) {
+    colonSymbol = ":";
+  }
+  std::string nullSymbol = "null";
+  if (dnp) {
+    nullSymbol = "";
+  }
+  std::string endingLineFeedSymbol = "";
+  return new BuiltStyledStreamWriter(
+      indentation, cs,
+      colonSymbol, nullSymbol, endingLineFeedSymbol);
+}
+static void getValidWriterKeys(std::set<std::string>* valid_keys)
+{
+  valid_keys->clear();
+  valid_keys->insert("indentation");
+  valid_keys->insert("commentStyle");
+  valid_keys->insert("enableYAMLCompatibility");
+  valid_keys->insert("dropNullPlaceholders");
+}
+bool StreamWriterBuilder::validate(Json::Value* invalid) const
+{
+  Json::Value my_invalid;
+  if (!invalid) invalid = &my_invalid;  // so we do not need to test for NULL
+  Json::Value& inv = *invalid;
+  std::set<std::string> valid_keys;
+  getValidWriterKeys(&valid_keys);
+  Value::Members keys = settings_.getMemberNames();
+  size_t n = keys.size();
+  for (size_t i = 0; i < n; ++i) {
+    std::string const& key = keys[i];
+    if (valid_keys.find(key) == valid_keys.end()) {
+      inv[key] = settings_[key];
+    }
+  }
+  return 0u == inv.size();
+}
+Value& StreamWriterBuilder::operator[](std::string key)
+{
+  return settings_[key];
+}
+// static
+void StreamWriterBuilder::setDefaults(Json::Value* settings)
+{
+  //! [StreamWriterBuilderDefaults]
+  (*settings)["commentStyle"] = "All";
+  (*settings)["indentation"] = "\t";
+  (*settings)["enableYAMLCompatibility"] = false;
+  (*settings)["dropNullPlaceholders"] = false;
+  //! [StreamWriterBuilderDefaults]
+}
+
+std::string writeString(StreamWriter::Factory const& builder, Value const& root) {
+  std::ostringstream sout;
+  StreamWriterPtr const writer(builder.newStreamWriter());
+  writer->write(root, &sout);
+  return sout.str();
+}
+
+std::ostream& operator<<(std::ostream& sout, Value const& root) {
+  StreamWriterBuilder builder;
+  StreamWriterPtr const writer(builder.newStreamWriter());
+  writer->write(root, &sout);
+  return sout;
+}
+
+} // namespace Json
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: src/lib_json/json_writer.cpp
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
diff --git a/vendor/nanoflann-1.1.8/nanoflann.hpp b/vendor/nanoflann-1.1.8/nanoflann.hpp
index c651934..1c9a71b 100644
--- a/vendor/nanoflann-1.1.8/nanoflann.hpp
+++ b/vendor/nanoflann-1.1.8/nanoflann.hpp
@@ -38,6 +38,7 @@
 #include <algorithm>
 #include <stdexcept>
 #include <cstdio>  // for fwrite()
+#include <cstdlib> // for malloc()
 #include <cmath>   // for fabs(),...
 #include <limits>
 
diff --git a/vendor/pdalboost/CMakeLists.txt b/vendor/pdalboost/CMakeLists.txt
new file mode 100644
index 0000000..a586fc4
--- /dev/null
+++ b/vendor/pdalboost/CMakeLists.txt
@@ -0,0 +1,36 @@
+#
+# Make sure we don't attempt to add a library more than once
+#
+get_property(EXISTS GLOBAL PROPERTY _PDALBOOST_INCLUDED)
+if (EXISTS)
+    return()
+endif()
+
+file(GLOB PDAL_BOOST_SOURCES
+    "libs/system/src/*"
+    "libs/filesystem/src/*"
+)
+
+# If we're not on WIN32, remove windows sources to eliminate warning message.
+if (NOT WIN32)
+    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
+    file(GLOB REMOVE_SOURCES
+        "libs/program_options/src/winmain.cpp"
+        "libs/filesystem/src/windows_file_codecvt.*"
+    )
+    foreach(REMOVE_SOURCE IN LISTS REMOVE_SOURCES)
+        list (REMOVE_ITEM PDAL_BOOST_SOURCES ${REMOVE_SOURCE})
+    endforeach()
+endif()
+
+add_definitions(-DBOOST_SYSTEM_NO_DEPRECATED)
+
+PDAL_ADD_LIBRARY(${PDAL_BOOST_LIB_NAME} STATIC "${PDAL_BOOST_SOURCES}")
+ 
+set_target_properties(${PDAL_BOOST_LIB_NAME} PROPERTIES
+    VERSION "${PDAL_BUILD_VERSION}"
+    SOVERSION "${PDAL_API_VERSION}"
+    CLEAN_DIRECT_OUTPUT 1)
+
+set_property(GLOBAL PROPERTY _PDALBOOST_INCLUDED TRUE)
+
diff --git a/vendor/pdalboost/Jamroot b/vendor/pdalboost/Jamroot
new file mode 100644
index 0000000..553ca6e
--- /dev/null
+++ b/vendor/pdalboost/Jamroot
@@ -0,0 +1,291 @@
+# Copyright Vladimir Prus 2002-2006.
+# Copyright Dave Abrahams 2005-2006.
+# Copyright Rene Rivera 2005-2007.
+# Copyright Douglas Gregor 2005.
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+# Usage:
+#
+#   b2 [options] [properties] [install|stage]
+#
+#   Builds and installs Boost.
+#
+# Targets and Related Options:
+#
+#   install                 Install headers and compiled library files to the
+#   =======                 configured locations (below).
+#
+#   --prefix=<PREFIX>       Install architecture independent files here.
+#                           Default; C:\Boost on Win32
+#                           Default; /usr/local on Unix. Linux, etc.
+#
+#   --exec-prefix=<EPREFIX> Install architecture dependent files here.
+#                           Default; <PREFIX>
+#
+#   --libdir=<DIR>          Install library files here.
+#                           Default; <EPREFIX>/lib
+#
+#   --includedir=<HDRDIR>   Install header files here.
+#                           Default; <PREFIX>/include
+#
+#   stage                   Build and install only compiled library files to the
+#   =====                   stage directory.
+#
+#   --stagedir=<STAGEDIR>   Install library files here
+#                           Default; ./stage
+#
+# Other Options:
+#
+#   --build-type=<type>     Build the specified pre-defined set of variations of
+#                           the libraries. Note, that which variants get built
+#                           depends on what each library supports.
+#
+#                               -- minimal -- (default) Builds a minimal set of
+#                               variants. On Windows, these are static
+#                               multithreaded libraries in debug and release
+#                               modes, using shared runtime. On Linux, these are
+#                               static and shared multithreaded libraries in
+#                               release mode.
+#
+#                               -- complete -- Build all possible variations.
+#
+#   --build-dir=DIR         Build in this location instead of building within
+#                           the distribution tree. Recommended!
+#
+#   --show-libraries        Display the list of Boost libraries that require
+#                           build and installation steps, and then exit.
+#
+#   --layout=<layout>       Determine whether to choose library names and header
+#                           locations such that multiple versions of Boost or
+#                           multiple compilers can be used on the same system.
+#
+#                               -- versioned -- Names of boost binaries include
+#                               the Boost version number, name and version of
+#                               the compiler and encoded build properties. Boost
+#                               headers are installed in a subdirectory of
+#                               <HDRDIR> whose name contains the Boost version
+#                               number.
+#
+#                               -- tagged -- Names of boost binaries include the
+#                               encoded build properties such as variant and
+#                               threading, but do not including compiler name
+#                               and version, or Boost version. This option is
+#                               useful if you build several variants of Boost,
+#                               using the same compiler.
+#
+#                               -- system -- Binaries names do not include the
+#                               Boost version number or the name and version
+#                               number of the compiler. Boost headers are
+#                               installed directly into <HDRDIR>. This option is
+#                               intended for system integrators building
+#                               distribution packages.
+#
+#                           The default value is 'versioned' on Windows, and
+#                           'system' on Unix.
+#
+#   --buildid=ID            Add the specified ID to the name of built libraries.
+#                           The default is to not add anything.
+#
+#   --python-buildid=ID     Add the specified ID to the name of built libraries
+#                           that depend on Python. The default is to not add
+#                           anything. This ID is added in addition to --buildid.
+#
+#   --help                  This message.
+#
+#   --with-<library>        Build and install the specified <library>. If this
+#                           option is used, only libraries specified using this
+#                           option will be built.
+#
+#   --without-<library>     Do not build, stage, or install the specified
+#                           <library>. By default, all libraries are built.
+#
+# Properties:
+#
+#   toolset=toolset         Indicate the toolset to build with.
+#
+#   variant=debug|release   Select the build variant
+#
+#   link=static|shared      Whether to build static or shared libraries
+#
+#   threading=single|multi  Whether to build single or multithreaded binaries
+#
+#   runtime-link=static|shared
+#                           Whether to link to static or shared C and C++
+#                           runtime.
+#
+
+# TODO:
+#  - handle boost version
+#  - handle python options such as pydebug
+
+import boostcpp ;
+import package ;
+
+import sequence ;
+import xsltproc ;
+import set ;
+import path ;
+import link ;
+
+path-constant BOOST_ROOT : . ;
+constant BOOST_VERSION : 1.60.0 ;
+constant BOOST_JAMROOT_MODULE : $(__name__) ;
+
+boostcpp.set-version $(BOOST_VERSION) ;
+
+use-project /boost/architecture : libs/config/checks/architecture ;
+
+local all-headers =
+    [ MATCH .*libs/(.*)/include/boost : [ glob libs/*/include/boost libs/*/*/include/boost ] ] ;
+
+for dir in $(all-headers)
+{
+    link-directory $(dir)-headers : libs/$(dir)/include/boost : <location>. ;
+    explicit $(dir)-headers ;
+}
+
+if $(all-headers)
+{
+    constant BOOST_MODULARLAYOUT : $(all-headers) ;
+}
+
+project boost
+    : requirements <include>.
+
+      [ boostcpp.architecture ]
+      [ boostcpp.address-model ]
+
+      # Disable auto-linking for all targets here, primarily because it caused
+      # troubles with V2.
+      <define>BOOST_ALL_NO_LIB=1
+      # Used to encode variant in target name. See the 'tag' rule below.
+      <tag>@$(__name__).tag
+      <conditional>@handle-static-runtime
+      # Comeau does not support shared lib
+      <toolset>como:<link>static
+      <toolset>como-linux:<define>_GNU_SOURCE=1
+      # When building docs within Boost, we want the standard Boost style
+      <xsl:param>boost.defaults=Boost
+    : usage-requirements <include>.
+    : build-dir bin.v2
+    ;
+
+# This rule is called by Boost.Build to determine the name of target. We use it
+# to encode the build variant, compiler name and boost version in the target
+# name.
+#
+rule tag ( name : type ? : property-set )
+{
+    return [ boostcpp.tag $(name) : $(type) : $(property-set) ] ;
+}
+
+rule handle-static-runtime ( properties * )
+{
+    # Using static runtime with shared libraries is impossible on Linux, and
+    # dangerous on Windows. Therefore, we disallow it. This might be drastic,
+    # but it was disabled for a while without anybody complaining.
+
+    # For CW, static runtime is needed so that std::locale works.
+    if <link>shared in $(properties) && <runtime-link>static in $(properties) &&
+        ! ( <toolset>cw in $(properties) )
+    {
+        ECHO "error: link=shared together with runtime-link=static is not allowed" ;
+        ECHO "error: such property combination is either impossible " ;
+        ECHO "error: or too dangerious to be of any use" ;
+        EXIT ;
+    }
+}
+
+all-libraries = [ MATCH .*libs/(.*)/build/.* : [ glob libs/*/build/Jamfile.v2 ]
+    [ glob libs/*/build/Jamfile ] ] ;
+
+all-libraries = [ sequence.unique $(all-libraries) ] ;
+# The function_types library has a Jamfile, but it's used for maintenance
+# purposes, there's no library to build and install.
+all-libraries = [ set.difference $(all-libraries) : function_types ] ;
+
+# Setup convenient aliases for all libraries.
+
+local rule explicit-alias ( id : targets + )
+{
+    alias $(id) : $(targets) ;
+    explicit $(id) ;
+}
+
+# First, the complicated libraries: where the target name in Jamfile is
+# different from its directory name.
+explicit-alias prg_exec_monitor : libs/test/build//pdalboost_prg_exec_monitor ;
+explicit-alias test_exec_monitor : libs/test/build//pdalboost_test_exec_monitor ;
+explicit-alias unit_test_framework : libs/test/build//pdalboost_unit_test_framework ;
+explicit-alias bgl-vis : libs/graps/build//bgl-vis ;
+explicit-alias serialization : libs/serialization/build//pdalboost_serialization ;
+explicit-alias wserialization : libs/serialization/build//pdalboost_wserialization ;
+for local l in $(all-libraries)
+{
+    if ! $(l) in test graph serialization
+    {
+        explicit-alias $(l) : libs/$(l)/build//pdalboost_$(l) ;
+    }
+}
+
+# Log has an additional target
+explicit-alias log_setup : libs/log/build//pdalboost_log_setup ;
+
+alias headers : $(all-headers)-headers : : : <include>.  ;
+explicit headers ;
+
+# Make project ids of all libraries known.
+for local l in $(all-libraries)
+{
+    use-project /boost/$(l) : libs/$(l)/build ;
+}
+
+if [ path.exists $(BOOST_ROOT)/tools/inspect ]
+{
+    use-project /boost/tools/inspect : tools/inspect/build ;
+}
+
+if [ path.exists $(BOOST_ROOT)/libs/wave/tool ]
+{
+    use-project /boost/libs/wave/tool : libs/wave/tool/build ;
+}
+
+# This rule should be called from libraries' Jamfiles and will create two
+# targets, "install" and "stage", that will install or stage that library. The
+# --prefix option is respected, but --with and --without options, naturally, are
+# ignored.
+#
+# - libraries -- list of library targets to install.
+#
+rule boost-install ( libraries * )
+{
+    package.install install
+        : <dependency>/boost//install-proper-headers $(install-requirements)
+        : # No binaries
+        : $(libraries)
+        : # No headers, it is handled by the dependency.
+    ;
+
+    install stage : $(libraries) : <location>$(BOOST_STAGE_LOCATE) ;
+
+    module [ CALLER_MODULE ]
+    {
+        explicit stage ;
+        explicit install ;
+    }
+}
+
+headers =
+    # The .SUNWCCh files are present in tr1 include directory and have to be
+    # installed (see http://lists.boost.org/Archives/boost/2007/05/121430.php).
+    [ path.glob-tree $(BOOST_ROOT)/boost : *.hpp *.ipp *.h *.inc *.SUNWCCh : CVS .svn ]
+    [ path.glob-tree $(BOOST_ROOT)/boost/compatibility/cpp_c_headers : c* : CVS .svn ]
+    [ path.glob boost/tr1/tr1 : * : bcc32 sun CVS .svn ]
+    ;
+
+# Declare special top-level targets that build and install the desired variants
+# of the libraries.
+boostcpp.declare-targets $(all-libraries) : $(headers) ;
diff --git a/vendor/pdalboost/boost.css b/vendor/pdalboost/boost.css
new file mode 100644
index 0000000..986c405
--- /dev/null
+++ b/vendor/pdalboost/boost.css
@@ -0,0 +1,66 @@
+/*=============================================================================
+    Copyright 2002 William E. Kempf
+    Distributed under the Boost Software License, Version 1.0. (See accompany-
+    ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+H1
+{
+    FONT-SIZE: 200%;
+    COLOR: #00008B;
+}
+H2
+{
+    FONT-SIZE: 150%;
+}
+H3
+{
+    FONT-SIZE: 125%;
+}
+H4
+{
+    FONT-SIZE: 108%;
+}
+BODY
+{
+    FONT-SIZE: 100%;
+    BACKGROUND-COLOR: #ffffff;
+    COLOR: #000000;
+}
+PRE
+{
+    MARGIN-LEFT: 2em;
+    FONT-FAMILY: Courier,
+                 monospace;
+}
+CODE
+{
+    FONT-FAMILY: Courier,
+                 monospace;
+}
+CODE.as_pre
+{
+    white-space: pre;
+}
+.index
+{
+    TEXT-ALIGN: left;
+}
+.page-index
+{
+    TEXT-ALIGN: left;
+}
+.definition
+{
+    TEXT-ALIGN: left;
+}
+.footnote
+{
+    FONT-SIZE: 66%;
+    VERTICAL-ALIGN: super;
+    TEXT-DECORATION: none;
+}
+.function-semantics
+{
+    CLEAR: left;
+}
\ No newline at end of file
diff --git a/vendor/pdalboost/boost.png b/vendor/pdalboost/boost.png
new file mode 100644
index 0000000..b4d51fc
Binary files /dev/null and b/vendor/pdalboost/boost.png differ
diff --git a/vendor/pdalboost/boost/algorithm/cxx11/all_of.hpp b/vendor/pdalboost/boost/algorithm/cxx11/all_of.hpp
new file mode 100644
index 0000000..da449e4
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/cxx11/all_of.hpp
@@ -0,0 +1,86 @@
+/* 
+   Copyright (c) Marshall Clow 2008-2012.
+
+   Distributed under the Boost Software License, Version 1.0. (See accompanying
+   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/// \file  all_of.hpp
+/// \brief Test ranges to see if all elements match a value or predicate.
+/// \author Marshall Clow
+
+#ifndef BOOST_ALGORITHM_ALL_OF_HPP
+#define BOOST_ALGORITHM_ALL_OF_HPP
+
+#include <algorithm>    // for std::all_of, if available
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+namespace pdalboost { namespace algorithm {
+
+/// \fn all_of ( InputIterator first, InputIterator last, Predicate p )
+/// \return true if all elements in [first, last) satisfy the predicate 'p'
+/// \note returns true on an empty range
+/// 
+/// \param first The start of the input sequence
+/// \param last  One past the end of the input sequence
+/// \param p     A predicate for testing the elements of the sequence
+///
+/// \note           This function is part of the C++2011 standard library.
+///  We will use the standard one if it is available, 
+///  otherwise we have our own implementation.
+template<typename InputIterator, typename Predicate> 
+bool all_of ( InputIterator first, InputIterator last, Predicate p )
+{
+    for ( ; first != last; ++first )
+        if ( !p(*first)) 
+            return false;
+    return true; 
+} 
+
+/// \fn all_of ( const Range &r, Predicate p )
+/// \return true if all elements in the range satisfy the predicate 'p'
+/// \note returns true on an empty range
+/// 
+/// \param r    The input range
+/// \param p    A predicate for testing the elements of the range
+///
+template<typename Range, typename Predicate> 
+bool all_of ( const Range &r, Predicate p )
+{
+    return pdalboost::algorithm::all_of ( pdalboost::begin (r), pdalboost::end (r), p );
+} 
+
+/// \fn all_of_equal ( InputIterator first, InputIterator last, const T &val )
+/// \return true if all elements in [first, last) are equal to 'val'
+/// \note returns true on an empty range
+/// 
+/// \param first The start of the input sequence
+/// \param last  One past the end of the input sequence
+/// \param val   A value to compare against
+///
+template<typename InputIterator, typename T> 
+bool all_of_equal ( InputIterator first, InputIterator last, const T &val )
+{
+    for ( ; first != last; ++first )
+    if ( val != *first ) 
+        return false;
+    return true; 
+} 
+
+/// \fn all_of_equal ( const Range &r, const T &val )
+/// \return true if all elements in the range are equal to 'val'
+/// \note returns true on an empty range
+/// 
+/// \param r    The input range
+/// \param val  A value to compare against
+///
+template<typename Range, typename T> 
+bool all_of_equal ( const Range &r, const T &val ) 
+{
+    return pdalboost::algorithm::all_of_equal ( pdalboost::begin (r), pdalboost::end (r), val );
+} 
+
+}} // namespace pdalboost and algorithm
+
+#endif // BOOST_ALGORITHM_ALL_OF_HPP
diff --git a/vendor/pdalboost/boost/algorithm/string/classification.hpp b/vendor/pdalboost/boost/algorithm/string/classification.hpp
new file mode 100644
index 0000000..2b6e5ab
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/classification.hpp
@@ -0,0 +1,312 @@
+//  Boost string_algo library classification.hpp header file  ---------------------------//
+
+//  Copyright Pavol Droba 2002-2003.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_CLASSIFICATION_HPP
+#define BOOST_STRING_CLASSIFICATION_HPP
+
+#include <algorithm>
+#include <locale>
+#include <boost/range/value_type.hpp>
+#include <boost/range/as_literal.hpp>
+#include <boost/algorithm/string/detail/classification.hpp>
+#include <boost/algorithm/string/predicate_facade.hpp>
+
+
+/*! \file
+    Classification predicates are included in the library to give 
+    some more convenience when using algorithms like \c trim() and \c all(). 
+    They wrap functionality of STL classification functions ( e.g. \c std::isspace() )
+    into generic functors. 
+*/
+
+namespace pdalboost {
+    namespace algorithm {
+
+//  classification functor generator -------------------------------------//
+
+        //! is_classified predicate
+        /*!
+            Construct the \c is_classified predicate. This predicate holds if the input is
+            of specified \c std::ctype category.
+
+            \param Type A \c std::ctype category
+            \param Loc A locale used for classification
+            \return An instance of the \c is_classified predicate 
+        */
+        inline detail::is_classifiedF
+        is_classified(std::ctype_base::mask Type, const std::locale& Loc=std::locale())
+        {
+            return detail::is_classifiedF(Type, Loc);
+        }
+
+        //! is_space predicate
+        /*!
+            Construct the \c is_classified predicate for the \c ctype_base::space category.   
+
+            \param Loc A locale used for classification
+            \return An instance of the \c is_classified predicate
+        */
+        inline detail::is_classifiedF 
+        is_space(const std::locale& Loc=std::locale())
+        {
+            return detail::is_classifiedF(std::ctype_base::space, Loc);
+        }
+
+        //! is_alnum predicate
+        /*!
+            Construct the \c is_classified predicate for the \c ctype_base::alnum category.   
+
+            \param Loc A locale used for classification
+            \return An instance of the \c is_classified predicate 
+        */
+        inline detail::is_classifiedF 
+        is_alnum(const std::locale& Loc=std::locale())
+        {
+            return detail::is_classifiedF(std::ctype_base::alnum, Loc);
+        }
+
+        //! is_alpha predicate
+        /*!
+            Construct the \c is_classified predicate for the \c ctype_base::alpha category.   
+
+            \param Loc A locale used for classification
+            \return An instance of the \c is_classified predicate 
+        */
+        inline detail::is_classifiedF 
+        is_alpha(const std::locale& Loc=std::locale())
+        {
+            return detail::is_classifiedF(std::ctype_base::alpha, Loc);
+        }
+
+        //! is_cntrl predicate
+        /*!
+            Construct the \c is_classified predicate for the \c ctype_base::cntrl category.   
+
+            \param Loc A locale used for classification
+            \return An instance of the \c is_classified predicate 
+        */
+        inline detail::is_classifiedF 
+        is_cntrl(const std::locale& Loc=std::locale())
+        {
+            return detail::is_classifiedF(std::ctype_base::cntrl, Loc);
+        }
+
+        //! is_digit predicate
+        /*!
+            Construct the \c is_classified predicate for the \c ctype_base::digit category.   
+
+            \param Loc A locale used for classification
+            \return An instance of the \c is_classified predicate 
+        */
+        inline detail::is_classifiedF 
+        is_digit(const std::locale& Loc=std::locale())
+        {
+            return detail::is_classifiedF(std::ctype_base::digit, Loc);
+        }
+
+        //! is_graph predicate
+        /*!
+            Construct the \c is_classified predicate for the \c ctype_base::graph category.   
+
+            \param Loc A locale used for classification
+            \return An instance of the \c is_classified predicate 
+        */
+        inline detail::is_classifiedF
+        is_graph(const std::locale& Loc=std::locale())
+        {
+            return detail::is_classifiedF(std::ctype_base::graph, Loc);
+        }
+
+        //! is_lower predicate
+        /*!
+            Construct the \c is_classified predicate for the \c ctype_base::lower category.   
+
+            \param Loc A locale used for classification
+            \return An instance of \c is_classified predicate 
+        */
+        inline detail::is_classifiedF 
+        is_lower(const std::locale& Loc=std::locale())
+        {
+            return detail::is_classifiedF(std::ctype_base::lower, Loc);
+        }
+
+        //! is_print predicate
+        /*!
+            Construct the \c is_classified predicate for the \c ctype_base::print category.   
+
+            \param Loc A locale used for classification
+            \return An instance of the \c is_classified predicate 
+        */
+        inline detail::is_classifiedF 
+        is_print(const std::locale& Loc=std::locale())
+        {
+            return detail::is_classifiedF(std::ctype_base::print, Loc);
+        }
+
+        //! is_punct predicate
+        /*!
+            Construct the \c is_classified predicate for the \c ctype_base::punct category.   
+
+            \param Loc A locale used for classification
+            \return An instance of the \c is_classified predicate 
+        */
+        inline detail::is_classifiedF 
+        is_punct(const std::locale& Loc=std::locale())
+        {
+            return detail::is_classifiedF(std::ctype_base::punct, Loc);
+        }
+
+        //! is_upper predicate
+        /*!
+            Construct the \c is_classified predicate for the \c ctype_base::upper category.   
+
+            \param Loc A locale used for classification
+            \return An instance of the \c is_classified predicate 
+        */
+        inline detail::is_classifiedF 
+        is_upper(const std::locale& Loc=std::locale())
+        {
+            return detail::is_classifiedF(std::ctype_base::upper, Loc);
+        }
+
+        //! is_xdigit predicate
+        /*!
+            Construct the \c is_classified predicate for the \c ctype_base::xdigit category.  
+
+            \param Loc A locale used for classification
+            \return An instance of the \c is_classified predicate 
+        */
+        inline detail::is_classifiedF 
+        is_xdigit(const std::locale& Loc=std::locale())
+        {
+            return detail::is_classifiedF(std::ctype_base::xdigit, Loc);
+        }
+
+        //! is_any_of predicate
+        /*!
+            Construct the \c is_any_of predicate. The predicate holds if the input
+            is included in the specified set of characters.
+
+            \param Set A set of characters to be recognized
+            \return An instance of the \c is_any_of predicate 
+        */
+        template<typename RangeT>
+        inline detail::is_any_ofF<
+            BOOST_STRING_TYPENAME range_value<RangeT>::type> 
+        is_any_of( const RangeT& Set )
+        {
+            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_set(pdalboost::as_literal(Set));
+            return detail::is_any_ofF<BOOST_STRING_TYPENAME range_value<RangeT>::type>(lit_set); 
+        }
+
+        //! is_from_range predicate
+        /*!
+            Construct the \c is_from_range predicate. The predicate holds if the input
+            is included in the specified range. (i.e. From <= Ch <= To )
+
+            \param From The start of the range
+            \param To The end of the range
+            \return An instance of the \c is_from_range predicate 
+        */
+        template<typename CharT>
+        inline detail::is_from_rangeF<CharT> is_from_range(CharT From, CharT To)
+        {
+            return detail::is_from_rangeF<CharT>(From,To); 
+        }
+        
+        // predicate combinators ---------------------------------------------------//
+
+        //! predicate 'and' composition predicate
+        /*!
+            Construct the \c class_and predicate. This predicate can be used
+            to logically combine two classification predicates. \c class_and holds,
+            if both predicates return true.
+
+            \param Pred1 The first predicate
+            \param Pred2 The second predicate
+            \return An instance of the \c class_and predicate     
+        */
+        template<typename Pred1T, typename Pred2T>
+        inline detail::pred_andF<Pred1T, Pred2T>
+        operator&&( 
+            const predicate_facade<Pred1T>& Pred1, 
+            const predicate_facade<Pred2T>& Pred2 )
+        {    
+            // Doing the static_cast with the pointer instead of the reference
+            // is a workaround for some compilers which have problems with
+            // static_cast's of template references, i.e. CW8. /grafik/
+            return detail::pred_andF<Pred1T,Pred2T>(
+                *static_cast<const Pred1T*>(&Pred1), 
+                *static_cast<const Pred2T*>(&Pred2) );
+        }
+
+        //! predicate 'or' composition predicate
+        /*!
+            Construct the \c class_or predicate. This predicate can be used
+            to logically combine two classification predicates. \c class_or holds,
+            if one of the predicates return true.
+
+            \param Pred1 The first predicate
+            \param Pred2 The second predicate
+            \return An instance of the \c class_or predicate     
+        */
+        template<typename Pred1T, typename Pred2T>
+        inline detail::pred_orF<Pred1T, Pred2T>
+        operator||( 
+            const predicate_facade<Pred1T>& Pred1, 
+            const predicate_facade<Pred2T>& Pred2 )
+        {    
+            // Doing the static_cast with the pointer instead of the reference
+            // is a workaround for some compilers which have problems with
+            // static_cast's of template references, i.e. CW8. /grafik/
+            return detail::pred_orF<Pred1T,Pred2T>(
+                *static_cast<const Pred1T*>(&Pred1), 
+                *static_cast<const Pred2T*>(&Pred2));
+        }
+
+        //! predicate negation operator
+        /*!
+            Construct the \c class_not predicate. This predicate represents a negation. 
+            \c class_or holds if of the predicates return false.
+
+            \param Pred The predicate to be negated
+            \return An instance of the \c class_not predicate     
+        */
+        template<typename PredT>
+        inline detail::pred_notF<PredT>
+        operator!( const predicate_facade<PredT>& Pred )
+        {
+            // Doing the static_cast with the pointer instead of the reference
+            // is a workaround for some compilers which have problems with
+            // static_cast's of template references, i.e. CW8. /grafik/
+            return detail::pred_notF<PredT>(*static_cast<const PredT*>(&Pred)); 
+        }
+
+    } // namespace algorithm
+
+    // pull names to the boost namespace
+    using algorithm::is_classified;
+    using algorithm::is_space;
+    using algorithm::is_alnum;
+    using algorithm::is_alpha;
+    using algorithm::is_cntrl;
+    using algorithm::is_digit;
+    using algorithm::is_graph;
+    using algorithm::is_lower;
+    using algorithm::is_upper;
+    using algorithm::is_print;
+    using algorithm::is_punct;
+    using algorithm::is_xdigit;
+    using algorithm::is_any_of;
+    using algorithm::is_from_range;
+
+} // namespace pdalboost
+
+#endif  // BOOST_STRING_PREDICATE_HPP
diff --git a/vendor/pdalboost/boost/algorithm/string/compare.hpp b/vendor/pdalboost/boost/algorithm/string/compare.hpp
new file mode 100644
index 0000000..62dd68f
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/compare.hpp
@@ -0,0 +1,199 @@
+//  Boost string_algo library compare.hpp header file  -------------------------//
+
+//  Copyright Pavol Droba 2002-2006.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_COMPARE_HPP
+#define BOOST_STRING_COMPARE_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <locale>
+
+/*! \file
+    Defines element comparison predicates. Many algorithms in this library can
+    take an additional argument with a predicate used to compare elements.
+    This makes it possible, for instance, to have case insensitive versions
+    of the algorithms.
+*/
+
+namespace pdalboost {
+    namespace algorithm {
+
+        //  is_equal functor  -----------------------------------------------//
+
+        //! is_equal functor
+        /*!
+            Standard STL equal_to only handle comparison between arguments
+            of the same type. This is a less restrictive version which wraps operator ==.
+        */
+        struct is_equal
+        {
+            //! Function operator
+            /*!
+                Compare two operands for equality
+            */
+            template< typename T1, typename T2 >
+                bool operator()( const T1& Arg1, const T2& Arg2 ) const
+            {
+                return Arg1==Arg2;
+            }
+        };
+
+        //! case insensitive version of is_equal
+        /*!
+            Case insensitive comparison predicate. Comparison is done using
+            specified locales.
+        */
+        struct is_iequal
+        {
+            //! Constructor
+            /*!
+                \param Loc locales used for comparison
+            */
+            is_iequal( const std::locale& Loc=std::locale() ) :
+                m_Loc( Loc ) {}
+
+            //! Function operator
+            /*!
+                Compare two operands. Case is ignored.
+            */
+            template< typename T1, typename T2 >
+                bool operator()( const T1& Arg1, const T2& Arg2 ) const
+            {
+                #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
+                    return std::toupper(Arg1)==std::toupper(Arg2);
+                #else
+                    return std::toupper<T1>(Arg1,m_Loc)==std::toupper<T2>(Arg2,m_Loc);
+                #endif
+            }
+
+        private:
+            std::locale m_Loc;
+        };
+
+        //  is_less functor  -----------------------------------------------//
+
+        //! is_less functor
+        /*!
+            Convenient version of standard std::less. Operation is templated, therefore it is 
+            not required to specify the exact types upon the construction
+         */
+        struct is_less
+        {
+            //! Functor operation
+            /*!
+                Compare two operands using > operator
+             */
+            template< typename T1, typename T2 >
+                bool operator()( const T1& Arg1, const T2& Arg2 ) const
+            {
+                return Arg1<Arg2;
+            }
+        };
+
+
+        //! case insensitive version of is_less
+        /*!
+            Case insensitive comparison predicate. Comparison is done using
+            specified locales.
+        */
+        struct is_iless
+        {
+            //! Constructor
+            /*!
+                \param Loc locales used for comparison
+            */
+            is_iless( const std::locale& Loc=std::locale() ) :
+                m_Loc( Loc ) {}
+
+            //! Function operator
+            /*!
+                Compare two operands. Case is ignored.
+            */
+            template< typename T1, typename T2 >
+                bool operator()( const T1& Arg1, const T2& Arg2 ) const
+            {
+                #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
+                    return std::toupper(Arg1)<std::toupper(Arg2);
+                #else
+                    return std::toupper<T1>(Arg1,m_Loc)<std::toupper<T2>(Arg2,m_Loc);
+                #endif
+            }
+
+        private:
+            std::locale m_Loc;
+        };
+
+        //  is_not_greater functor  -----------------------------------------------//
+
+        //! is_not_greater functor
+        /*!
+            Convenient version of standard std::not_greater_to. Operation is templated, therefore it is 
+            not required to specify the exact types upon the construction
+         */
+        struct is_not_greater
+        {
+            //! Functor operation
+            /*!
+                Compare two operands using > operator
+             */
+            template< typename T1, typename T2 >
+                bool operator()( const T1& Arg1, const T2& Arg2 ) const
+            {
+                return Arg1<=Arg2;
+            }
+        };
+
+
+        //! case insensitive version of is_not_greater
+        /*!
+            Case insensitive comparison predicate. Comparison is done using
+            specified locales.
+        */
+        struct is_not_igreater
+        {
+            //! Constructor
+            /*!
+                \param Loc locales used for comparison
+            */
+            is_not_igreater( const std::locale& Loc=std::locale() ) :
+                m_Loc( Loc ) {}
+
+            //! Function operator
+            /*!
+                Compare two operands. Case is ignored.
+            */
+            template< typename T1, typename T2 >
+                bool operator()( const T1& Arg1, const T2& Arg2 ) const
+            {
+                #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
+                    return std::toupper(Arg1)<=std::toupper(Arg2);
+                #else
+                    return std::toupper<T1>(Arg1,m_Loc)<=std::toupper<T2>(Arg2,m_Loc);
+                #endif
+            }
+
+        private:
+            std::locale m_Loc;
+        };
+
+
+    } // namespace algorithm
+
+    // pull names to the boost namespace
+    using algorithm::is_equal;
+    using algorithm::is_iequal;
+    using algorithm::is_less;
+    using algorithm::is_iless;
+    using algorithm::is_not_greater;
+    using algorithm::is_not_igreater;
+
+} // namespace pdalboost
+
+
+#endif  // BOOST_STRING_COMPARE_HPP
diff --git a/vendor/pdalboost/boost/algorithm/string/concept.hpp b/vendor/pdalboost/boost/algorithm/string/concept.hpp
new file mode 100644
index 0000000..d728e06
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/concept.hpp
@@ -0,0 +1,83 @@
+//  Boost string_algo library concept.hpp header file  ---------------------------//
+
+//  Copyright Pavol Droba 2002-2003.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_CONCEPT_HPP
+#define BOOST_STRING_CONCEPT_HPP
+
+#include <boost/concept_check.hpp>
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+/*! \file 
+    Defines concepts used in string_algo library
+*/
+
+namespace pdalboost {
+    namespace algorithm {
+
+        //! Finder concept
+        /*!
+            Defines the Finder concept. Finder is a functor which selects
+            an arbitrary part of a string. Search is performed on
+            the range specified by starting and ending iterators.
+
+            Result of the find operation must be convertible to iterator_range.
+        */
+        template<typename FinderT, typename IteratorT>
+        struct FinderConcept
+        {
+        private:
+            typedef iterator_range<IteratorT> range;
+        public:
+            void constraints()
+            {
+                // Operation
+                r=(*pF)(i,i);
+            }
+        private:
+            range r;
+            IteratorT i;
+            FinderT* pF;    
+        }; // Finder_concept
+
+        
+        //! Formatter concept
+        /*!
+            Defines the Formatter concept. Formatter is a functor, which
+            takes a result from a finder operation and transforms it
+            in a specific way.
+
+            Result must be a container supported by container_traits, 
+            or a reference to it.
+        */
+        template<typename FormatterT, typename FinderT, typename IteratorT>
+        struct FormatterConcept
+        {
+        public:
+            void constraints()
+            {
+                // Operation
+                ::pdalboost::begin((*pFo)( (*pF)(i,i) ));
+                ::pdalboost::end((*pFo)( (*pF)(i,i) ));
+            }
+        private:
+            IteratorT i;
+            FinderT* pF;
+            FormatterT *pFo;
+        }; // FormatterConcept;
+
+    } // namespace algorithm
+} // namespace pdalboost
+
+
+
+
+#endif  // BOOST_STRING_CONCEPT_HPP
diff --git a/vendor/pdalboost/boost/algorithm/string/config.hpp b/vendor/pdalboost/boost/algorithm/string/config.hpp
new file mode 100644
index 0000000..559750a
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/config.hpp
@@ -0,0 +1,28 @@
+//  Boost string_algo library config.hpp header file  ---------------------------//
+
+//  Copyright Pavol Droba 2002-2003.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_CONFIG_HPP
+#define BOOST_STRING_CONFIG_HPP
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#ifdef BOOST_STRING_DEDUCED_TYPENAME
+#   error "macro already defined!"
+#endif
+
+#define BOOST_STRING_TYPENAME BOOST_DEDUCED_TYPENAME
+
+// Metrowerks workaround
+#if BOOST_WORKAROUND(__MWERKS__, <= 0x3003) // 8.x
+#pragma parse_func_templ off
+#endif
+
+#endif  // BOOST_STRING_CONFIG_HPP
diff --git a/vendor/pdalboost/boost/algorithm/string/constants.hpp b/vendor/pdalboost/boost/algorithm/string/constants.hpp
new file mode 100644
index 0000000..ee25235
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/constants.hpp
@@ -0,0 +1,36 @@
+//  Boost string_algo library constants.hpp header file  ---------------------------//
+
+//  Copyright Pavol Droba 2002-2003.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_CONSTANTS_HPP
+#define BOOST_STRING_CONSTANTS_HPP
+
+namespace pdalboost {
+    namespace algorithm {
+
+    //! Token compression mode 
+    /*!
+        Specifies token compression mode for the token_finder.
+    */
+    enum token_compress_mode_type
+    {
+        token_compress_on,    //!< Compress adjacent tokens
+        token_compress_off  //!< Do not compress adjacent tokens
+    };
+    
+    } // namespace algorithm
+
+    // pull the names to the boost namespace
+    using algorithm::token_compress_on;
+    using algorithm::token_compress_off;
+
+} // namespace pdalboost
+
+#endif  // BOOST_STRING_CONSTANTS_HPP
+
diff --git a/vendor/pdalboost/boost/algorithm/string/detail/classification.hpp b/vendor/pdalboost/boost/algorithm/string/detail/classification.hpp
new file mode 100644
index 0000000..28cf0b1
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/detail/classification.hpp
@@ -0,0 +1,353 @@
+//  Boost string_algo library classification.hpp header file  ---------------------------//
+
+//  Copyright Pavol Droba 2002-2003.
+// 
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_CLASSIFICATION_DETAIL_HPP
+#define BOOST_STRING_CLASSIFICATION_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <algorithm>
+#include <functional>
+#include <locale>
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+#include <boost/algorithm/string/predicate_facade.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+namespace pdalboost {
+    namespace algorithm {
+        namespace detail {
+
+//  classification functors -----------------------------------------------//
+
+   // is_classified functor
+            struct is_classifiedF :
+                public predicate_facade<is_classifiedF>
+            {
+                // Boost.ResultOf support
+                typedef bool result_type;
+
+                // Constructor from a locale
+                is_classifiedF(std::ctype_base::mask Type, std::locale const & Loc = std::locale()) :
+                    m_Type(Type), m_Locale(Loc) {}
+                // Operation
+                template<typename CharT>
+                bool operator()( CharT Ch ) const
+                {
+                    return std::use_facet< std::ctype<CharT> >(m_Locale).is( m_Type, Ch );
+                }
+
+                #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x582) && !defined(_USE_OLD_RW_STL)
+                    template<>
+                    bool operator()( char const Ch ) const
+                    {
+                        return std::use_facet< std::ctype<char> >(m_Locale).is( m_Type, Ch );
+                    }
+                #endif
+
+            private:
+                std::ctype_base::mask m_Type;
+                std::locale m_Locale;
+            };
+
+
+            // is_any_of functor
+            /*
+                returns true if the value is from the specified set
+            */
+            template<typename CharT>
+            struct is_any_ofF :
+                public predicate_facade<is_any_ofF<CharT> >
+            {
+            private:
+                // set cannot operate on const value-type
+                typedef typename ::pdalboost::remove_const<CharT>::type set_value_type;
+
+            public:     
+                // Boost.ResultOf support
+                typedef bool result_type;
+
+                // Constructor
+                template<typename RangeT>
+                is_any_ofF( const RangeT& Range ) : m_Size(0)
+                {
+                    // Prepare storage
+                    m_Storage.m_dynSet=0;
+
+                    std::size_t Size=::pdalboost::distance(Range);
+                    m_Size=Size;
+                    set_value_type* Storage=0;
+
+                    if(use_fixed_storage(m_Size))
+                    {
+                        // Use fixed storage
+                        Storage=&m_Storage.m_fixSet[0];
+                    }
+                    else
+                    {
+                        // Use dynamic storage
+                        m_Storage.m_dynSet=new set_value_type[m_Size];
+                        Storage=m_Storage.m_dynSet;
+                    }
+
+                    // Use fixed storage
+                    ::std::copy(::pdalboost::begin(Range), ::pdalboost::end(Range), Storage);
+                    ::std::sort(Storage, Storage+m_Size);
+                }
+
+                // Copy constructor
+                is_any_ofF(const is_any_ofF& Other) : m_Size(Other.m_Size)
+                {
+                    // Prepare storage
+                    m_Storage.m_dynSet=0;               
+                    const set_value_type* SrcStorage=0;
+                    set_value_type* DestStorage=0;
+
+                    if(use_fixed_storage(m_Size))
+                    {
+                        // Use fixed storage
+                        DestStorage=&m_Storage.m_fixSet[0];
+                        SrcStorage=&Other.m_Storage.m_fixSet[0];
+                    }
+                    else
+                    {
+                        // Use dynamic storage
+                        m_Storage.m_dynSet=new set_value_type[m_Size];
+                        DestStorage=m_Storage.m_dynSet;
+                        SrcStorage=Other.m_Storage.m_dynSet;
+                    }
+
+                    // Use fixed storage
+                    ::std::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size);
+                }
+
+                // Destructor
+                ~is_any_ofF()
+                {
+                    if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0)
+                    {
+                        delete [] m_Storage.m_dynSet;
+                    }
+                }
+
+                // Assignment
+                is_any_ofF& operator=(const is_any_ofF& Other)
+                {
+                    // Handle self assignment
+                    if(this==&Other) return *this;
+
+                    // Prepare storage             
+                    const set_value_type* SrcStorage;
+                    set_value_type* DestStorage;
+
+                    if(use_fixed_storage(Other.m_Size))
+                    {
+                        // Use fixed storage
+                        DestStorage=&m_Storage.m_fixSet[0];
+                        SrcStorage=&Other.m_Storage.m_fixSet[0];
+
+                        // Delete old storage if was present
+                        if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0)
+                        {
+                            delete [] m_Storage.m_dynSet;
+                        }
+
+                        // Set new size
+                        m_Size=Other.m_Size;
+                    }
+                    else
+                    {
+                        // Other uses dynamic storage
+                        SrcStorage=Other.m_Storage.m_dynSet;
+
+                        // Check what kind of storage are we using right now
+                        if(use_fixed_storage(m_Size))
+                        {
+                            // Using fixed storage, allocate new
+                            set_value_type* pTemp=new set_value_type[Other.m_Size];
+                            DestStorage=pTemp;
+                            m_Storage.m_dynSet=pTemp;
+                            m_Size=Other.m_Size;
+                        }
+                        else
+                        {
+                            // Using dynamic storage, check if can reuse
+                            if(m_Storage.m_dynSet!=0 && m_Size>=Other.m_Size && m_Size<Other.m_Size*2)
+                            {
+                                // Reuse the current storage
+                                DestStorage=m_Storage.m_dynSet;
+                                m_Size=Other.m_Size;
+                            }
+                            else
+                            {
+                                // Allocate the new one
+                                set_value_type* pTemp=new set_value_type[Other.m_Size];
+                                DestStorage=pTemp;
+                        
+                                // Delete old storage if necessary
+                                if(m_Storage.m_dynSet!=0)
+                                {
+                                    delete [] m_Storage.m_dynSet;
+                                }
+                                // Store the new storage
+                                m_Storage.m_dynSet=pTemp;
+                                // Set new size
+                                m_Size=Other.m_Size;
+                            }
+                        }
+                    }
+
+                    // Copy the data
+                    ::std::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size);
+
+                    return *this;
+                }
+
+                // Operation
+                template<typename Char2T>
+                bool operator()( Char2T Ch ) const
+                {
+                    const set_value_type* Storage=
+                        (use_fixed_storage(m_Size))
+                        ? &m_Storage.m_fixSet[0]
+                        : m_Storage.m_dynSet;
+
+                    return ::std::binary_search(Storage, Storage+m_Size, Ch);
+                }
+            private:
+                // check if the size is eligible for fixed storage
+                static bool use_fixed_storage(std::size_t size)
+                {
+                    return size<=sizeof(set_value_type*)*2;
+                }
+
+
+            private:
+                // storage
+                // The actual used storage is selected on the type
+                union
+                {
+                    set_value_type* m_dynSet;
+                    set_value_type m_fixSet[sizeof(set_value_type*)*2];
+                } 
+                m_Storage;
+        
+                // storage size
+                ::std::size_t m_Size;
+            };
+
+            // is_from_range functor
+            /*
+                returns true if the value is from the specified range.
+                (i.e. x>=From && x>=To)
+            */
+            template<typename CharT>
+            struct is_from_rangeF :
+                public predicate_facade< is_from_rangeF<CharT> >
+            {
+                // Boost.ResultOf support
+                typedef bool result_type;
+
+                // Constructor
+                is_from_rangeF( CharT From, CharT To ) : m_From(From), m_To(To) {}
+
+                // Operation
+                template<typename Char2T>
+                bool operator()( Char2T Ch ) const
+                {
+                    return ( m_From <= Ch ) && ( Ch <= m_To );
+                }
+
+            private:
+                CharT m_From;
+                CharT m_To;
+            };
+
+            // class_and composition predicate
+            template<typename Pred1T, typename Pred2T>
+            struct pred_andF :
+                public predicate_facade< pred_andF<Pred1T,Pred2T> >
+            {
+            public:
+
+                // Boost.ResultOf support
+                typedef bool result_type;
+
+                // Constructor
+                pred_andF( Pred1T Pred1, Pred2T Pred2 ) :
+                    m_Pred1(Pred1), m_Pred2(Pred2) {}
+
+                // Operation
+                template<typename CharT>
+                bool operator()( CharT Ch ) const
+                {
+                    return m_Pred1(Ch) && m_Pred2(Ch);
+                }
+
+            private:
+                Pred1T m_Pred1;
+                Pred2T m_Pred2;
+            };
+
+            // class_or composition predicate
+            template<typename Pred1T, typename Pred2T>
+            struct pred_orF :
+                public predicate_facade< pred_orF<Pred1T,Pred2T> >
+            {
+            public:
+                // Boost.ResultOf support
+                typedef bool result_type;
+
+                // Constructor
+                pred_orF( Pred1T Pred1, Pred2T Pred2 ) :
+                    m_Pred1(Pred1), m_Pred2(Pred2) {}
+
+                // Operation
+                template<typename CharT>
+                bool operator()( CharT Ch ) const
+                {
+                    return m_Pred1(Ch) || m_Pred2(Ch);
+                }
+
+            private:
+                Pred1T m_Pred1;
+                Pred2T m_Pred2;
+            };
+
+            // class_not composition predicate
+            template< typename PredT >
+            struct pred_notF :
+                public predicate_facade< pred_notF<PredT> >
+            {
+            public:
+                // Boost.ResultOf support
+                typedef bool result_type;
+
+                // Constructor
+                pred_notF( PredT Pred ) : m_Pred(Pred) {}
+
+                // Operation
+                template<typename CharT>
+                bool operator()( CharT Ch ) const
+                {
+                    return !m_Pred(Ch);
+                }
+
+            private:
+                PredT m_Pred;
+            };
+
+        } // namespace detail
+    } // namespace algorithm
+} // namespace pdalboost
+
+
+#endif  // BOOST_STRING_CLASSIFICATION_DETAIL_HPP
diff --git a/vendor/pdalboost/boost/algorithm/string/detail/find_iterator.hpp b/vendor/pdalboost/boost/algorithm/string/detail/find_iterator.hpp
new file mode 100644
index 0000000..37ddace
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/detail/find_iterator.hpp
@@ -0,0 +1,87 @@
+//  Boost string_algo library find_iterator.hpp header file  ---------------------------//
+
+//  Copyright Pavol Droba 2002-2003.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FIND_ITERATOR_DETAIL_HPP
+#define BOOST_STRING_FIND_ITERATOR_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/function.hpp>
+
+namespace pdalboost {
+    namespace algorithm { 
+        namespace detail {
+
+//  find_iterator base -----------------------------------------------//
+
+            // Find iterator base
+            template<typename IteratorT>
+            class find_iterator_base
+            {
+            protected:
+                // typedefs
+                typedef IteratorT input_iterator_type;
+                typedef iterator_range<IteratorT> match_type;
+                typedef function2<
+                    match_type, 
+                    input_iterator_type, 
+                    input_iterator_type> finder_type;
+                
+            protected:
+            // Protected construction/destruction
+
+                // Default constructor
+                find_iterator_base() {};
+                // Copy construction
+                find_iterator_base( const find_iterator_base& Other ) :
+                    m_Finder(Other.m_Finder) {}
+                
+                // Constructor
+                template<typename FinderT>
+                find_iterator_base( FinderT Finder, int ) :
+                    m_Finder(Finder) {}
+
+                // Destructor
+                ~find_iterator_base() {}
+
+                // Find operation
+                match_type do_find( 
+                    input_iterator_type Begin,
+                    input_iterator_type End ) const
+                {
+                    if (!m_Finder.empty())
+                    {
+                        return m_Finder(Begin,End);
+                    }
+                    else
+                    {
+                        return match_type(End,End);
+                    }
+                }
+
+                // Check
+                bool is_null() const
+                {
+                    return m_Finder.empty();
+                }
+
+            private:
+                // Finder
+                finder_type m_Finder;
+            };
+
+       } // namespace detail
+    } // namespace algorithm
+} // namespace pdalboost
+
+
+#endif  // BOOST_STRING_FIND_ITERATOR_DETAIL_HPP
diff --git a/vendor/pdalboost/boost/algorithm/string/detail/finder.hpp b/vendor/pdalboost/boost/algorithm/string/detail/finder.hpp
new file mode 100644
index 0000000..7cdca34
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/detail/finder.hpp
@@ -0,0 +1,639 @@
+//  Boost string_algo library finder.hpp header file  ---------------------------//
+
+//  Copyright Pavol Droba 2002-2006.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FINDER_DETAIL_HPP
+#define BOOST_STRING_FINDER_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/algorithm/string/constants.hpp>
+#include <boost/detail/iterator.hpp>
+
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/empty.hpp>
+#include <boost/range/as_literal.hpp>
+
+namespace pdalboost {
+    namespace algorithm {
+        namespace detail {
+
+
+//  find first functor -----------------------------------------------//
+
+            // find a subsequence in the sequence ( functor )
+            /*
+                Returns a pair <begin,end> marking the subsequence in the sequence.
+                If the find fails, functor returns <End,End>
+            */
+            template<typename SearchIteratorT,typename PredicateT>
+            struct first_finderF
+            {
+                typedef SearchIteratorT search_iterator_type;
+
+                // Construction
+                template< typename SearchT >
+                first_finderF( const SearchT& Search, PredicateT Comp ) :
+                    m_Search(::pdalboost::begin(Search), ::pdalboost::end(Search)), m_Comp(Comp) {}
+                first_finderF(
+                        search_iterator_type SearchBegin,
+                        search_iterator_type SearchEnd,
+                        PredicateT Comp ) :
+                    m_Search(SearchBegin, SearchEnd), m_Comp(Comp) {}
+
+                // Operation
+                template< typename ForwardIteratorT >
+                iterator_range<ForwardIteratorT>
+                operator()(
+                    ForwardIteratorT Begin,
+                    ForwardIteratorT End ) const
+                {
+                    typedef iterator_range<ForwardIteratorT> result_type;
+                    typedef ForwardIteratorT input_iterator_type;
+
+                    // Outer loop
+                    for(input_iterator_type OuterIt=Begin;
+                        OuterIt!=End;
+                        ++OuterIt)
+                    {
+                        // Sanity check
+                        if( pdalboost::empty(m_Search) )
+                            return result_type( End, End );
+
+                        input_iterator_type InnerIt=OuterIt;
+                        search_iterator_type SubstrIt=m_Search.begin();
+                        for(;
+                            InnerIt!=End && SubstrIt!=m_Search.end();
+                            ++InnerIt,++SubstrIt)
+                        {
+                            if( !( m_Comp(*InnerIt,*SubstrIt) ) )
+                                break;
+                        }
+
+                        // Substring matching succeeded
+                        if ( SubstrIt==m_Search.end() )
+                            return result_type( OuterIt, InnerIt );
+                    }
+
+                    return result_type( End, End );
+                }
+
+            private:
+                iterator_range<search_iterator_type> m_Search;
+                PredicateT m_Comp;
+            };
+
+//  find last functor -----------------------------------------------//
+
+            // find the last match a subsequence in the sequence ( functor )
+            /*
+                Returns a pair <begin,end> marking the subsequence in the sequence.
+                If the find fails, returns <End,End>
+            */
+            template<typename SearchIteratorT, typename PredicateT>
+            struct last_finderF
+            {
+                typedef SearchIteratorT search_iterator_type;
+                typedef first_finderF<
+                    search_iterator_type,
+                    PredicateT> first_finder_type;
+
+                // Construction
+                template< typename SearchT >
+                last_finderF( const SearchT& Search, PredicateT Comp ) :
+                    m_Search(::pdalboost::begin(Search), ::pdalboost::end(Search)), m_Comp(Comp) {}
+                last_finderF(
+                        search_iterator_type SearchBegin,
+                        search_iterator_type SearchEnd,
+                        PredicateT Comp ) :
+                    m_Search(SearchBegin, SearchEnd), m_Comp(Comp) {}
+
+                // Operation
+                template< typename ForwardIteratorT >
+                iterator_range<ForwardIteratorT>
+                operator()(
+                    ForwardIteratorT Begin,
+                    ForwardIteratorT End ) const
+                {
+                    typedef iterator_range<ForwardIteratorT> result_type;
+
+                    if( pdalboost::empty(m_Search) )
+                        return result_type( End, End );
+
+                    typedef BOOST_STRING_TYPENAME pdalboost::detail::
+                        iterator_traits<ForwardIteratorT>::iterator_category category;
+
+                    return findit( Begin, End, category() );
+                }
+
+            private:
+                // forward iterator
+                template< typename ForwardIteratorT >
+                iterator_range<ForwardIteratorT>
+                findit(
+                    ForwardIteratorT Begin,
+                    ForwardIteratorT End,
+                    std::forward_iterator_tag ) const
+                {
+                    typedef iterator_range<ForwardIteratorT> result_type;
+
+                    first_finder_type first_finder(
+                        m_Search.begin(), m_Search.end(), m_Comp );
+
+                    result_type M=first_finder( Begin, End );
+                    result_type Last=M;
+
+                    while( M )
+                    {
+                        Last=M;
+                        M=first_finder( ::pdalboost::end(M), End );
+                    }
+
+                    return Last;
+                }
+
+                // bidirectional iterator
+                template< typename ForwardIteratorT >
+                iterator_range<ForwardIteratorT>
+                findit(
+                    ForwardIteratorT Begin,
+                    ForwardIteratorT End,
+                    std::bidirectional_iterator_tag ) const
+                {
+                    typedef iterator_range<ForwardIteratorT> result_type;
+                    typedef ForwardIteratorT input_iterator_type;
+
+                    // Outer loop
+                    for(input_iterator_type OuterIt=End;
+                        OuterIt!=Begin; )
+                    {
+                        input_iterator_type OuterIt2=--OuterIt;
+
+                        input_iterator_type InnerIt=OuterIt2;
+                        search_iterator_type SubstrIt=m_Search.begin();
+                        for(;
+                            InnerIt!=End && SubstrIt!=m_Search.end();
+                            ++InnerIt,++SubstrIt)
+                        {
+                            if( !( m_Comp(*InnerIt,*SubstrIt) ) )
+                                break;
+                        }
+
+                        // Substring matching succeeded
+                        if( SubstrIt==m_Search.end() )
+                            return result_type( OuterIt2, InnerIt );
+                    }
+
+                    return result_type( End, End );
+                }
+
+            private:
+                iterator_range<search_iterator_type> m_Search;
+                PredicateT m_Comp;
+            };
+
+//  find n-th functor -----------------------------------------------//
+
+            // find the n-th match of a subsequence in the sequence ( functor )
+            /*
+                Returns a pair <begin,end> marking the subsequence in the sequence.
+                If the find fails, returns <End,End>
+            */
+            template<typename SearchIteratorT, typename PredicateT>
+            struct nth_finderF
+            {
+                typedef SearchIteratorT search_iterator_type;
+                typedef first_finderF<
+                    search_iterator_type,
+                    PredicateT> first_finder_type;
+                typedef last_finderF<
+                    search_iterator_type,
+                    PredicateT> last_finder_type;
+
+                // Construction
+                template< typename SearchT >
+                nth_finderF(
+                        const SearchT& Search,
+                        int Nth,
+                        PredicateT Comp) :
+                    m_Search(::pdalboost::begin(Search), ::pdalboost::end(Search)),
+                    m_Nth(Nth),
+                    m_Comp(Comp) {}
+                nth_finderF(
+                        search_iterator_type SearchBegin,
+                        search_iterator_type SearchEnd,
+                        int Nth,
+                        PredicateT Comp) :
+                    m_Search(SearchBegin, SearchEnd),
+                    m_Nth(Nth),
+                    m_Comp(Comp) {}
+
+                // Operation
+                template< typename ForwardIteratorT >
+                iterator_range<ForwardIteratorT>
+                operator()(
+                    ForwardIteratorT Begin,
+                    ForwardIteratorT End ) const
+                {
+                    if(m_Nth>=0)
+                    {
+                        return find_forward(Begin, End, m_Nth);
+                    }
+                    else
+                    {
+                        return find_backward(Begin, End, -m_Nth);
+                    }
+
+                }
+
+            private:
+                // Implementation helpers
+                template< typename ForwardIteratorT >
+                iterator_range<ForwardIteratorT>
+                find_forward(
+                    ForwardIteratorT Begin,
+                    ForwardIteratorT End,
+                    unsigned int N) const
+                {
+                    typedef iterator_range<ForwardIteratorT> result_type;
+
+                    // Sanity check
+                    if( pdalboost::empty(m_Search) )
+                        return result_type( End, End );
+
+                    // Instantiate find functor
+                    first_finder_type first_finder(
+                        m_Search.begin(), m_Search.end(), m_Comp );
+
+                    result_type M( Begin, Begin );
+
+                    for( unsigned int n=0; n<=N; ++n )
+                    {
+                        // find next match
+                        M=first_finder( ::pdalboost::end(M), End );
+
+                        if ( !M )
+                        {
+                            // Subsequence not found, return
+                            return M;
+                        }
+                    }
+
+                    return M;
+                }
+
+                template< typename ForwardIteratorT >
+                iterator_range<ForwardIteratorT>
+                find_backward(
+                    ForwardIteratorT Begin,
+                    ForwardIteratorT End,
+                    unsigned int N) const
+                {
+                    typedef iterator_range<ForwardIteratorT> result_type;
+
+                    // Sanity check
+                    if( pdalboost::empty(m_Search) )
+                        return result_type( End, End );
+
+                    // Instantiate find functor
+                    last_finder_type last_finder(
+                        m_Search.begin(), m_Search.end(), m_Comp );
+
+                    result_type M( End, End );
+
+                    for( unsigned int n=1; n<=N; ++n )
+                    {
+                        // find next match
+                        M=last_finder( Begin, ::pdalboost::begin(M) );
+
+                        if ( !M )
+                        {
+                            // Subsequence not found, return
+                            return M;
+                        }
+                    }
+
+                    return M;
+                }
+
+
+            private:
+                iterator_range<search_iterator_type> m_Search;
+                int m_Nth;
+                PredicateT m_Comp;
+            };
+
+//  find head/tail implementation helpers ---------------------------//
+
+            template<typename ForwardIteratorT>
+                iterator_range<ForwardIteratorT>
+            find_head_impl(
+                ForwardIteratorT Begin,
+                ForwardIteratorT End,
+                unsigned int N,
+                std::forward_iterator_tag )
+            {
+                typedef ForwardIteratorT input_iterator_type;
+                typedef iterator_range<ForwardIteratorT> result_type;
+
+                input_iterator_type It=Begin;
+                for(
+                    unsigned int Index=0;
+                    Index<N && It!=End; ++Index,++It ) {};
+
+                return result_type( Begin, It );
+            }
+
+            template< typename ForwardIteratorT >
+                iterator_range<ForwardIteratorT>
+            find_head_impl(
+                ForwardIteratorT Begin,
+                ForwardIteratorT End,
+                unsigned int N,
+                std::random_access_iterator_tag )
+            {
+                typedef iterator_range<ForwardIteratorT> result_type;
+
+                if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )
+                    return result_type( Begin, End );
+
+                return result_type(Begin,Begin+N);
+            }
+
+            // Find head implementation
+            template<typename ForwardIteratorT>
+                iterator_range<ForwardIteratorT>
+            find_head_impl(
+                ForwardIteratorT Begin,
+                ForwardIteratorT End,
+                unsigned int N )
+            {
+                typedef BOOST_STRING_TYPENAME pdalboost::detail::
+                    iterator_traits<ForwardIteratorT>::iterator_category category;
+
+                return ::pdalboost::algorithm::detail::find_head_impl( Begin, End, N, category() );
+            }
+
+            template< typename ForwardIteratorT >
+                iterator_range<ForwardIteratorT>
+            find_tail_impl(
+                ForwardIteratorT Begin,
+                ForwardIteratorT End,
+                unsigned int N,
+                std::forward_iterator_tag )
+            {
+                typedef ForwardIteratorT input_iterator_type;
+                typedef iterator_range<ForwardIteratorT> result_type;
+
+                unsigned int Index=0;
+                input_iterator_type It=Begin;
+                input_iterator_type It2=Begin;
+
+                // Advance It2 by N increments
+                for( Index=0; Index<N && It2!=End; ++Index,++It2 ) {};
+
+                // Advance It, It2 to the end
+                for(; It2!=End; ++It,++It2 ) {};
+
+                return result_type( It, It2 );
+            }
+
+            template< typename ForwardIteratorT >
+                iterator_range<ForwardIteratorT>
+            find_tail_impl(
+                ForwardIteratorT Begin,
+                ForwardIteratorT End,
+                unsigned int N,
+                std::bidirectional_iterator_tag )
+            {
+                typedef ForwardIteratorT input_iterator_type;
+                typedef iterator_range<ForwardIteratorT> result_type;
+
+                input_iterator_type It=End;
+                for(
+                    unsigned int Index=0;
+                    Index<N && It!=Begin; ++Index,--It ) {};
+
+                return result_type( It, End );
+            }
+
+            template< typename ForwardIteratorT >
+                iterator_range<ForwardIteratorT>
+            find_tail_impl(
+                ForwardIteratorT Begin,
+                ForwardIteratorT End,
+                unsigned int N,
+                std::random_access_iterator_tag )
+            {
+                typedef iterator_range<ForwardIteratorT> result_type;
+
+                if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )
+                    return result_type( Begin, End );
+
+                return result_type( End-N, End );
+            }
+
+                        // Operation
+            template< typename ForwardIteratorT >
+            iterator_range<ForwardIteratorT>
+            find_tail_impl(
+                ForwardIteratorT Begin,
+                ForwardIteratorT End,
+                unsigned int N )
+            {
+                typedef BOOST_STRING_TYPENAME pdalboost::detail::
+                    iterator_traits<ForwardIteratorT>::iterator_category category;
+
+                return ::pdalboost::algorithm::detail::find_tail_impl( Begin, End, N, category() );
+            }
+
+
+
+//  find head functor -----------------------------------------------//
+
+
+            // find a head in the sequence ( functor )
+            /*
+                This functor find a head of the specified range. For
+                a specified N, the head is a subsequence of N starting
+                elements of the range.
+            */
+            struct head_finderF
+            {
+                // Construction
+                head_finderF( int N ) : m_N(N) {}
+
+                // Operation
+                template< typename ForwardIteratorT >
+                iterator_range<ForwardIteratorT>
+                operator()(
+                    ForwardIteratorT Begin,
+                    ForwardIteratorT End ) const
+                {
+                    if(m_N>=0)
+                    {
+                        return ::pdalboost::algorithm::detail::find_head_impl( Begin, End, m_N );
+                    }
+                    else
+                    {
+                        iterator_range<ForwardIteratorT> Res=
+                            ::pdalboost::algorithm::detail::find_tail_impl( Begin, End, -m_N );
+
+                        return ::pdalboost::make_iterator_range(Begin, Res.begin());
+                    }
+                }
+
+            private:
+                int m_N;
+            };
+
+//  find tail functor -----------------------------------------------//
+
+
+            // find a tail in the sequence ( functor )
+            /*
+                This functor find a tail of the specified range. For
+                a specified N, the head is a subsequence of N starting
+                elements of the range.
+            */
+            struct tail_finderF
+            {
+                // Construction
+                tail_finderF( int N ) : m_N(N) {}
+
+                // Operation
+                template< typename ForwardIteratorT >
+                iterator_range<ForwardIteratorT>
+                operator()(
+                    ForwardIteratorT Begin,
+                    ForwardIteratorT End ) const
+                {
+                    if(m_N>=0)
+                    {
+                        return ::pdalboost::algorithm::detail::find_tail_impl( Begin, End, m_N );
+                    }
+                    else
+                    {
+                        iterator_range<ForwardIteratorT> Res=
+                            ::pdalboost::algorithm::detail::find_head_impl( Begin, End, -m_N );
+
+                        return ::pdalboost::make_iterator_range(Res.end(), End);
+                    }
+                }
+
+            private:
+                int m_N;
+            };
+
+//  find token functor -----------------------------------------------//
+
+            // find a token in a sequence ( functor )
+            /*
+                This find functor finds a token specified be a predicate
+                in a sequence. It is equivalent of std::find algorithm,
+                with an exception that it return range instead of a single
+                iterator.
+
+                If bCompress is set to true, adjacent matching tokens are
+                concatenated into one match.
+            */
+            template< typename PredicateT >
+            struct token_finderF
+            {
+                // Construction
+                token_finderF(
+                    PredicateT Pred,
+                    token_compress_mode_type eCompress=token_compress_off ) :
+                        m_Pred(Pred), m_eCompress(eCompress) {}
+
+                // Operation
+                template< typename ForwardIteratorT >
+                iterator_range<ForwardIteratorT>
+                operator()(
+                    ForwardIteratorT Begin,
+                    ForwardIteratorT End ) const
+                {
+                    typedef iterator_range<ForwardIteratorT> result_type;
+
+                    ForwardIteratorT It=std::find_if( Begin, End, m_Pred );
+
+                    if( It==End )
+                    {
+                        return result_type( End, End );
+                    }
+                    else
+                    {
+                        ForwardIteratorT It2=It;
+
+                        if( m_eCompress==token_compress_on )
+                        {
+                            // Find first non-matching character
+                            while( It2!=End && m_Pred(*It2) ) ++It2;
+                        }
+                        else
+                        {
+                            // Advance by one position
+                            ++It2;
+                        }
+
+                        return result_type( It, It2 );
+                    }
+                }
+
+            private:
+                PredicateT m_Pred;
+                token_compress_mode_type m_eCompress;
+            };
+
+//  find range functor -----------------------------------------------//
+
+            // find a range in the sequence ( functor )
+            /*
+                This functor actually does not perform any find operation.
+                It always returns given iterator range as a result.
+            */
+            template<typename ForwardIterator1T>
+            struct range_finderF
+            {
+                typedef ForwardIterator1T input_iterator_type;
+                typedef iterator_range<input_iterator_type> result_type;
+
+                // Construction
+                range_finderF(
+                    input_iterator_type Begin,
+                    input_iterator_type End ) : m_Range(Begin, End) {}
+
+                range_finderF(const iterator_range<input_iterator_type>& Range) :
+                    m_Range(Range) {}
+
+                // Operation
+                template< typename ForwardIterator2T >
+                iterator_range<ForwardIterator2T>
+                operator()(
+                    ForwardIterator2T,
+                    ForwardIterator2T ) const
+                {
+#if BOOST_WORKAROUND( __MWERKS__, <= 0x3003 ) 
+                    return iterator_range<const ForwardIterator2T>(this->m_Range);
+#else
+                    return m_Range;
+#endif
+                }
+
+            private:
+                iterator_range<input_iterator_type> m_Range;
+            };
+
+
+        } // namespace detail
+    } // namespace algorithm
+} // namespace pdalboost
+
+#endif  // BOOST_STRING_FINDER_DETAIL_HPP
diff --git a/vendor/pdalboost/boost/algorithm/string/detail/trim.hpp b/vendor/pdalboost/boost/algorithm/string/detail/trim.hpp
new file mode 100644
index 0000000..66c3d56
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/detail/trim.hpp
@@ -0,0 +1,95 @@
+//  Boost string_algo library trim.hpp header file  ---------------------------//
+
+//  Copyright Pavol Droba 2002-2003.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_TRIM_DETAIL_HPP
+#define BOOST_STRING_TRIM_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/detail/iterator.hpp>
+
+namespace pdalboost {
+    namespace algorithm {
+        namespace detail {
+
+//  trim iterator helper -----------------------------------------------//
+
+            template< typename ForwardIteratorT, typename PredicateT >
+            inline ForwardIteratorT trim_end_iter_select( 
+                ForwardIteratorT InBegin, 
+                ForwardIteratorT InEnd, 
+                PredicateT IsSpace,
+                std::forward_iterator_tag )
+            {
+                ForwardIteratorT TrimIt=InBegin;
+
+                for( ForwardIteratorT It=InBegin; It!=InEnd; ++It )
+                {
+                    if ( !IsSpace(*It) ) 
+                    {
+                        TrimIt=It;
+                        ++TrimIt;
+                    }
+                }
+
+                return TrimIt;
+            }
+
+            template< typename ForwardIteratorT, typename PredicateT >
+            inline ForwardIteratorT trim_end_iter_select( 
+                ForwardIteratorT InBegin, 
+                ForwardIteratorT InEnd, 
+                PredicateT IsSpace,
+                std::bidirectional_iterator_tag )
+            {
+                for( ForwardIteratorT It=InEnd; It!=InBegin;  )
+                {
+                    if ( !IsSpace(*(--It)) )
+                        return ++It;
+                }
+
+                return InBegin;
+            }
+   // Search for first non matching character from the beginning of the sequence
+            template< typename ForwardIteratorT, typename PredicateT >
+            inline ForwardIteratorT trim_begin( 
+                ForwardIteratorT InBegin, 
+                ForwardIteratorT InEnd, 
+                PredicateT IsSpace )
+            {
+                ForwardIteratorT It=InBegin;
+                for(; It!=InEnd; ++It )
+                {
+                    if (!IsSpace(*It))
+                        return It;
+                }
+
+                return It;
+            }
+
+            // Search for first non matching character from the end of the sequence
+            template< typename ForwardIteratorT, typename PredicateT >
+            inline ForwardIteratorT trim_end( 
+                ForwardIteratorT InBegin, 
+                ForwardIteratorT InEnd, 
+                PredicateT IsSpace )
+            {
+                typedef BOOST_STRING_TYPENAME pdalboost::detail::
+                    iterator_traits<ForwardIteratorT>::iterator_category category;
+
+                return ::pdalboost::algorithm::detail::trim_end_iter_select( InBegin, InEnd, IsSpace, category() );
+            }
+
+
+        } // namespace detail
+    } // namespace algorithm
+} // namespace pdalboost
+
+
+#endif  // BOOST_STRING_TRIM_DETAIL_HPP
diff --git a/vendor/pdalboost/boost/algorithm/string/detail/util.hpp b/vendor/pdalboost/boost/algorithm/string/detail/util.hpp
new file mode 100644
index 0000000..4f696a2
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/detail/util.hpp
@@ -0,0 +1,106 @@
+//  Boost string_algo library util.hpp header file  ---------------------------//
+
+//  Copyright Pavol Droba 2002-2003.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_UTIL_DETAIL_HPP
+#define BOOST_STRING_UTIL_DETAIL_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <functional>
+#include <boost/range/iterator_range_core.hpp>
+
+namespace pdalboost {
+    namespace algorithm {
+        namespace detail {
+
+//  empty container  -----------------------------------------------//
+
+            //  empty_container 
+            /*
+                This class represents always empty container,
+                containing elements of type CharT.
+
+                It is supposed to be used in a const version only
+            */
+            template< typename CharT >
+            struct empty_container 
+            {
+                typedef empty_container<CharT> type;        
+                typedef CharT value_type;
+                typedef std::size_t size_type;
+                typedef std::ptrdiff_t difference_type;
+                typedef const value_type& reference;
+                typedef const value_type& const_reference;
+                typedef const value_type* iterator;
+                typedef const value_type* const_iterator;
+
+                
+                // Operations
+                const_iterator begin() const
+                {
+                    return reinterpret_cast<const_iterator>(0);
+                }
+
+                const_iterator end() const
+                {
+                    return reinterpret_cast<const_iterator>(0);
+                }
+
+                bool empty() const
+                {
+                    return false;
+                }
+
+                size_type size() const
+                {
+                    return 0;
+                }
+            };
+    
+//  bounded copy algorithm  -----------------------------------------------//
+
+            // Bounded version of the std::copy algorithm
+            template<typename InputIteratorT, typename OutputIteratorT>
+            inline OutputIteratorT bounded_copy(
+                InputIteratorT First, 
+                InputIteratorT Last, 
+                OutputIteratorT DestFirst,
+                OutputIteratorT DestLast )
+            {
+                InputIteratorT InputIt=First;
+                OutputIteratorT OutputIt=DestFirst;
+                for(; InputIt!=Last && OutputIt!=DestLast; InputIt++, OutputIt++ )
+                {
+                    *OutputIt=*InputIt;
+                }
+
+                return OutputIt;
+            }
+
+//  iterator range utilities -----------------------------------------//
+
+            // copy range functor
+            template< 
+                typename SeqT, 
+                typename IteratorT=BOOST_STRING_TYPENAME SeqT::const_iterator >
+            struct copy_iterator_rangeF : 
+                public std::unary_function< iterator_range<IteratorT>, SeqT >
+            {
+                SeqT operator()( const iterator_range<IteratorT>& Range ) const
+                {
+                    return copy_range<SeqT>(Range);
+                }
+            };
+
+        } // namespace detail
+    } // namespace algorithm
+} // namespace pdalboost
+
+
+#endif  // BOOST_STRING_UTIL_DETAIL_HPP
diff --git a/vendor/pdalboost/boost/algorithm/string/find_iterator.hpp b/vendor/pdalboost/boost/algorithm/string/find_iterator.hpp
new file mode 100644
index 0000000..9864d32
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/find_iterator.hpp
@@ -0,0 +1,388 @@
+//  Boost string_algo library find_iterator.hpp header file  ---------------------------//
+
+//  Copyright Pavol Droba 2002-2004.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FIND_ITERATOR_HPP
+#define BOOST_STRING_FIND_ITERATOR_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/as_literal.hpp>
+
+#include <boost/algorithm/string/detail/find_iterator.hpp>
+
+/*! \file
+    Defines find iterator classes. Find iterator repeatedly applies a Finder
+    to the specified input string to search for matches. Dereferencing
+    the iterator yields the current match or a range between the last and the current
+    match depending on the iterator used.
+*/
+
+namespace pdalboost {
+    namespace algorithm { 
+
+//  find_iterator -----------------------------------------------//
+
+        //! find_iterator
+        /*!    
+            Find iterator encapsulates a Finder and allows
+            for incremental searching in a string.
+            Each increment moves the iterator to the next match.
+
+            Find iterator is a readable forward traversal iterator.
+
+            Dereferencing the iterator yields an iterator_range delimiting
+            the current match.
+        */
+        template<typename IteratorT>
+        class find_iterator : 
+            public iterator_facade<
+                find_iterator<IteratorT>,
+                const iterator_range<IteratorT>,
+                forward_traversal_tag >,
+            private detail::find_iterator_base<IteratorT>
+        {
+        private:
+            // facade support
+            friend class ::pdalboost::iterator_core_access;
+
+        private:
+        // typedefs
+
+            typedef detail::find_iterator_base<IteratorT> base_type;
+            typedef BOOST_STRING_TYPENAME 
+                base_type::input_iterator_type input_iterator_type;
+            typedef BOOST_STRING_TYPENAME 
+                base_type::match_type match_type;
+
+        public:
+            //! Default constructor
+            /*!
+                Construct null iterator. All null iterators are equal.
+
+                \post eof()==true
+            */
+            find_iterator() {}
+
+            //! Copy constructor
+            /*!
+                Construct a copy of the find_iterator
+            */
+            find_iterator( const find_iterator& Other ) :
+                base_type(Other),
+                m_Match(Other.m_Match),
+                m_End(Other.m_End) {}
+
+            //! Constructor
+            /*!
+                Construct new find_iterator for a given finder
+                and a range.
+            */
+            template<typename FinderT>
+            find_iterator(
+                    IteratorT Begin,
+                    IteratorT End,
+                    FinderT Finder ) :
+                detail::find_iterator_base<IteratorT>(Finder,0),
+                m_Match(Begin,Begin),
+                m_End(End)
+            {
+                increment();
+            }
+
+            //! Constructor
+            /*!
+                Construct new find_iterator for a given finder
+                and a range.
+            */
+            template<typename FinderT, typename RangeT>
+            find_iterator(
+                    RangeT& Col,
+                    FinderT Finder ) :
+                detail::find_iterator_base<IteratorT>(Finder,0)
+            {
+                iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(::pdalboost::as_literal(Col));
+                m_Match=::pdalboost::make_iterator_range(::pdalboost::begin(lit_col), ::pdalboost::begin(lit_col));
+                m_End=::pdalboost::end(lit_col);
+
+                increment();
+            }
+
+        private:
+        // iterator operations
+
+            // dereference
+            const match_type& dereference() const
+            {
+                return m_Match;
+            }
+
+            // increment
+            void increment()
+            {
+                m_Match=this->do_find(m_Match.end(),m_End);
+            }
+
+            // comparison
+            bool equal( const find_iterator& Other ) const
+            {
+                bool bEof=eof();
+                bool bOtherEof=Other.eof();
+
+                return bEof || bOtherEof ? bEof==bOtherEof :
+                    (
+                        m_Match==Other.m_Match &&
+                        m_End==Other.m_End 
+                    );
+            }
+
+        public:
+        // operations
+
+            //! Eof check
+            /*!
+                Check the eof condition. Eof condition means that
+                there is nothing more to be searched i.e. find_iterator
+                is after the last match.
+            */
+            bool eof() const
+            {
+                return 
+                    this->is_null() || 
+                    ( 
+                        m_Match.begin() == m_End &&
+                        m_Match.end() == m_End
+                    );
+            }
+
+        private:
+        // Attributes
+            match_type m_Match;
+            input_iterator_type m_End;
+        };
+
+        //! find iterator construction helper
+        /*!
+         *    Construct a find iterator to iterate through the specified string
+         */
+        template<typename RangeT, typename FinderT>
+        inline find_iterator< 
+            BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
+        make_find_iterator(
+            RangeT& Collection,
+            FinderT Finder)
+        {
+            return find_iterator<BOOST_STRING_TYPENAME range_iterator<RangeT>::type>(
+                Collection, Finder);
+        }
+
+//  split iterator -----------------------------------------------//
+
+        //! split_iterator
+        /*!    
+            Split iterator encapsulates a Finder and allows
+            for incremental searching in a string.
+            Unlike the find iterator, split iterator iterates
+            through gaps between matches.
+
+            Find iterator is a readable forward traversal iterator.
+
+            Dereferencing the iterator yields an iterator_range delimiting
+            the current match.
+        */
+        template<typename IteratorT>
+        class split_iterator : 
+            public iterator_facade<
+                split_iterator<IteratorT>,
+                const iterator_range<IteratorT>,
+                forward_traversal_tag >,
+            private detail::find_iterator_base<IteratorT>
+        {
+        private:
+            // facade support
+            friend class ::pdalboost::iterator_core_access;
+
+        private:
+        // typedefs
+
+            typedef detail::find_iterator_base<IteratorT> base_type;
+            typedef BOOST_STRING_TYPENAME 
+                base_type::input_iterator_type input_iterator_type;
+            typedef BOOST_STRING_TYPENAME 
+                base_type::match_type match_type;
+
+        public:
+            //! Default constructor
+            /*!
+                Construct null iterator. All null iterators are equal.
+    
+                \post eof()==true
+            */
+            split_iterator() :
+                m_Next(),
+                m_End(),
+                m_bEof(true)
+            {}
+
+            //! Copy constructor
+            /*!
+                Construct a copy of the split_iterator
+            */
+            split_iterator( const split_iterator& Other ) :
+                base_type(Other),
+                m_Match(Other.m_Match),
+                m_Next(Other.m_Next),
+                m_End(Other.m_End),
+                m_bEof(Other.m_bEof)
+            {}
+
+            //! Constructor
+            /*!
+                Construct new split_iterator for a given finder
+                and a range.
+            */
+            template<typename FinderT>
+            split_iterator(
+                    IteratorT Begin,
+                    IteratorT End,
+                    FinderT Finder ) :
+                detail::find_iterator_base<IteratorT>(Finder,0),
+                m_Match(Begin,Begin),
+                m_Next(Begin),
+                m_End(End),
+                m_bEof(false)
+            {
+                // force the correct behavior for empty sequences and yield at least one token
+                if(Begin!=End)
+                {
+                    increment();
+                }
+            }
+            //! Constructor
+            /*!
+                Construct new split_iterator for a given finder
+                and a collection.
+            */
+            template<typename FinderT, typename RangeT>
+            split_iterator(
+                    RangeT& Col,
+                    FinderT Finder ) :
+                detail::find_iterator_base<IteratorT>(Finder,0),
+                m_bEof(false)
+            {
+                iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(::pdalboost::as_literal(Col));
+                m_Match=make_iterator_range(::pdalboost::begin(lit_col), ::pdalboost::begin(lit_col));
+                m_Next=::pdalboost::begin(lit_col);
+                m_End=::pdalboost::end(lit_col);
+
+                // force the correct behavior for empty sequences and yield at least one token
+                if(m_Next!=m_End)
+                {
+                    increment();
+                }
+            }
+
+
+        private:
+        // iterator operations
+
+            // dereference
+            const match_type& dereference() const
+            {
+                return m_Match;
+            }
+
+            // increment
+            void increment()
+            {
+                match_type FindMatch=this->do_find( m_Next, m_End );
+
+                if(FindMatch.begin()==m_End && FindMatch.end()==m_End)
+                {
+                    if(m_Match.end()==m_End)
+                    {
+                        // Mark iterator as eof
+                        m_bEof=true;
+                    }
+                }
+
+                m_Match=match_type( m_Next, FindMatch.begin() );
+                m_Next=FindMatch.end();
+            }
+
+            // comparison
+            bool equal( const split_iterator& Other ) const
+            {
+                bool bEof=eof();
+                bool bOtherEof=Other.eof();
+
+                return bEof || bOtherEof ? bEof==bOtherEof :
+                    (
+                        m_Match==Other.m_Match &&
+                        m_Next==Other.m_Next &&
+                        m_End==Other.m_End
+                    );
+            }
+
+        public:
+        // operations
+
+            //! Eof check
+            /*!
+                Check the eof condition. Eof condition means that
+                there is nothing more to be searched i.e. find_iterator
+                is after the last match.
+            */
+            bool eof() const
+            {
+                return this->is_null() || m_bEof;
+            }
+
+        private:
+        // Attributes
+            match_type m_Match;
+            input_iterator_type m_Next;
+            input_iterator_type m_End;
+            bool m_bEof;
+        };
+
+        //! split iterator construction helper
+        /*!
+         *    Construct a split iterator to iterate through the specified collection
+         */
+        template<typename RangeT, typename FinderT>
+        inline split_iterator< 
+            BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
+        make_split_iterator(
+            RangeT& Collection,
+            FinderT Finder)
+        {
+            return split_iterator<BOOST_STRING_TYPENAME range_iterator<RangeT>::type>(
+                Collection, Finder);
+        }
+
+
+    } // namespace algorithm
+
+    // pull names to the boost namespace
+    using algorithm::find_iterator;
+    using algorithm::make_find_iterator;
+    using algorithm::split_iterator;
+    using algorithm::make_split_iterator;
+
+} // namespace pdalboost
+
+
+#endif  // BOOST_STRING_FIND_ITERATOR_HPP
diff --git a/vendor/pdalboost/boost/algorithm/string/finder.hpp b/vendor/pdalboost/boost/algorithm/string/finder.hpp
new file mode 100644
index 0000000..28068e9
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/finder.hpp
@@ -0,0 +1,270 @@
+//  Boost string_algo library finder.hpp header file  ---------------------------//
+
+//  Copyright Pavol Droba 2002-2006.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_FINDER_HPP
+#define BOOST_STRING_FINDER_HPP
+
+#include <boost/algorithm/string/config.hpp>
+
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/const_iterator.hpp>
+
+#include <boost/algorithm/string/constants.hpp>
+#include <boost/algorithm/string/detail/finder.hpp>
+#include <boost/algorithm/string/compare.hpp>
+
+/*! \file
+    Defines Finder generators. Finder object is a functor which is able to 
+    find a substring matching a specific criteria in the input.
+    Finders are used as a pluggable components for replace, find 
+    and split facilities. This header contains generator functions 
+    for finders provided in this library.
+*/
+
+namespace pdalboost {
+    namespace algorithm {
+
+//  Finder generators ------------------------------------------//
+        
+        //! "First" finder 
+        /*!
+            Construct the \c first_finder. The finder searches for the first
+            occurrence of the string in a given input.
+            The result is given as an \c iterator_range delimiting the match.
+
+            \param Search A substring to be searched for.
+            \param Comp An element comparison predicate
+            \return An instance of the \c first_finder object
+        */
+        template<typename RangeT>
+        inline detail::first_finderF<
+            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
+            is_equal>
+        first_finder( const RangeT& Search )
+        {
+            return 
+                detail::first_finderF<
+                    BOOST_STRING_TYPENAME 
+                        range_const_iterator<RangeT>::type,
+                        is_equal>( ::pdalboost::as_literal(Search), is_equal() ) ;
+        }
+
+        //! "First" finder
+        /*!
+            \overload
+        */
+        template<typename RangeT,typename PredicateT>
+        inline detail::first_finderF<
+            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
+            PredicateT>
+        first_finder( 
+            const RangeT& Search, PredicateT Comp )
+        {
+            return 
+                detail::first_finderF<
+                    BOOST_STRING_TYPENAME 
+                        range_const_iterator<RangeT>::type,
+                    PredicateT>( ::pdalboost::as_literal(Search), Comp );
+        }
+
+        //! "Last" finder
+        /*!
+            Construct the \c last_finder. The finder searches for the last
+            occurrence of the string in a given input.
+            The result is given as an \c iterator_range delimiting the match.
+
+            \param Search A substring to be searched for.
+            \param Comp An element comparison predicate
+            \return An instance of the \c last_finder object
+        */
+        template<typename RangeT>
+        inline detail::last_finderF<
+            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
+            is_equal>
+        last_finder( const RangeT& Search )
+        {
+            return 
+                detail::last_finderF<
+                    BOOST_STRING_TYPENAME 
+                        range_const_iterator<RangeT>::type,
+                    is_equal>( ::pdalboost::as_literal(Search), is_equal() );
+        }
+        //! "Last" finder
+        /*!
+            \overload
+        */
+        template<typename RangeT, typename PredicateT>
+        inline detail::last_finderF<
+            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
+            PredicateT>
+        last_finder( const RangeT& Search, PredicateT Comp )
+        {
+            return 
+                detail::last_finderF<
+                    BOOST_STRING_TYPENAME 
+                        range_const_iterator<RangeT>::type,
+                    PredicateT>( ::pdalboost::as_literal(Search), Comp ) ;
+        }
+
+        //! "Nth" finder
+        /*!
+            Construct the \c nth_finder. The finder searches for the n-th (zero-indexed)
+            occurrence of the string in a given input.
+            The result is given as an \c iterator_range delimiting the match.
+
+            \param Search A substring to be searched for.
+            \param Nth An index of the match to be find
+            \param Comp An element comparison predicate
+            \return An instance of the \c nth_finder object
+        */
+        template<typename RangeT>
+        inline detail::nth_finderF<
+            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
+            is_equal>
+        nth_finder( 
+            const RangeT& Search, 
+            int Nth)
+        {
+            return 
+                detail::nth_finderF<
+                    BOOST_STRING_TYPENAME 
+                        range_const_iterator<RangeT>::type,
+                    is_equal>( ::pdalboost::as_literal(Search), Nth, is_equal() ) ;
+        }
+        //! "Nth" finder
+        /*!
+            \overload
+        */
+        template<typename RangeT, typename PredicateT>
+        inline detail::nth_finderF<
+            BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
+            PredicateT>
+        nth_finder( 
+            const RangeT& Search, 
+            int Nth, 
+            PredicateT Comp )
+        {
+            return 
+                detail::nth_finderF<
+                    BOOST_STRING_TYPENAME 
+                        range_const_iterator<RangeT>::type,
+                    PredicateT>( ::pdalboost::as_literal(Search), Nth, Comp );
+        }
+
+        //! "Head" finder
+        /*!
+            Construct the \c head_finder. The finder returns a head of a given
+            input. The head is a prefix of a string up to n elements in
+            size. If an input has less then n elements, whole input is 
+            considered a head.
+            The result is given as an \c iterator_range delimiting the match.
+
+            \param N The size of the head
+            \return An instance of the \c head_finder object
+        */
+        inline detail::head_finderF
+        head_finder( int N )
+        {
+            return detail::head_finderF(N);
+        }
+        
+        //! "Tail" finder
+        /*!
+            Construct the \c tail_finder. The finder returns a tail of a given
+            input. The tail is a suffix of a string up to n elements in
+            size. If an input has less then n elements, whole input is 
+            considered a head.
+            The result is given as an \c iterator_range delimiting the match.
+
+            \param N The size of the head
+            \return An instance of the \c tail_finder object
+        */
+        inline detail::tail_finderF
+        tail_finder( int N )
+        {
+            return detail::tail_finderF(N);
+        }
+
+        //! "Token" finder
+        /*!
+            Construct the \c token_finder. The finder searches for a token 
+            specified by a predicate. It is similar to std::find_if 
+            algorithm, with an exception that it return a range of
+            instead of a single iterator.
+
+            If "compress token mode" is enabled, adjacent matching tokens are 
+            concatenated into one match. Thus the finder can be used to 
+            search for continuous segments of characters satisfying the 
+            given predicate.
+
+            The result is given as an \c iterator_range delimiting the match.
+
+            \param Pred An element selection predicate
+            \param eCompress Compress flag
+            \return An instance of the \c token_finder object
+        */
+        template< typename PredicateT >
+        inline detail::token_finderF<PredicateT>
+        token_finder( 
+            PredicateT Pred, 
+            token_compress_mode_type eCompress=token_compress_off )
+        {
+            return detail::token_finderF<PredicateT>( Pred, eCompress );
+        }
+
+        //! "Range" finder
+        /*!
+            Construct the \c range_finder. The finder does not perform 
+            any operation. It simply returns the given range for 
+            any input. 
+
+            \param Begin Beginning of the range
+            \param End End of the range
+            \param Range The range.
+            \return An instance of the \c range_finger object
+        */
+        template< typename ForwardIteratorT >
+        inline detail::range_finderF<ForwardIteratorT>
+        range_finder(
+            ForwardIteratorT Begin,
+            ForwardIteratorT End )
+        {
+            return detail::range_finderF<ForwardIteratorT>( Begin, End );
+        }
+
+        //! "Range" finder
+        /*!       
+            \overload
+        */
+        template< typename ForwardIteratorT >
+        inline detail::range_finderF<ForwardIteratorT>
+        range_finder( iterator_range<ForwardIteratorT> Range )
+        {
+            return detail::range_finderF<ForwardIteratorT>( Range );
+        }
+
+    } // namespace algorithm
+
+    // pull the names to the boost namespace
+    using algorithm::first_finder;
+    using algorithm::last_finder;
+    using algorithm::nth_finder;
+    using algorithm::head_finder;
+    using algorithm::tail_finder;
+    using algorithm::token_finder;
+    using algorithm::range_finder;
+
+} // namespace pdalboost
+
+
+#endif  // BOOST_STRING_FINDER_HPP
diff --git a/vendor/pdalboost/boost/algorithm/string/iter_find.hpp b/vendor/pdalboost/boost/algorithm/string/iter_find.hpp
new file mode 100644
index 0000000..39a4aa6
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/iter_find.hpp
@@ -0,0 +1,193 @@
+//  Boost string_algo library iter_find.hpp header file  ---------------------------//
+
+//  Copyright Pavol Droba 2002-2003.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_ITER_FIND_HPP
+#define BOOST_STRING_ITER_FIND_HPP
+
+#include <boost/algorithm/string/config.hpp>
+#include <algorithm>
+#include <iterator>
+#include <boost/iterator/transform_iterator.hpp>
+
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/value_type.hpp>
+#include <boost/range/as_literal.hpp>
+
+#include <boost/algorithm/string/concept.hpp>
+#include <boost/algorithm/string/find_iterator.hpp>
+#include <boost/algorithm/string/detail/util.hpp>
+
+/*! \file
+    Defines generic split algorithms. Split algorithms can be 
+    used to divide a sequence into several part according 
+    to a given criteria. Result is given as a 'container 
+    of containers' where elements are copies or references 
+    to extracted parts.
+
+    There are two algorithms provided. One iterates over matching
+    substrings, the other one over the gaps between these matches.
+*/
+
+namespace pdalboost {
+    namespace algorithm {
+
+//  iterate find ---------------------------------------------------//
+
+        //! Iter find algorithm
+        /*!
+            This algorithm executes a given finder in iteration on the input,
+            until the end of input is reached, or no match is found.
+            Iteration is done using built-in find_iterator, so the real 
+            searching is performed only when needed.
+            In each iteration new match is found and added to the result.
+
+            \param Result A 'container container' to contain the result of search.
+                Both outer and inner container must have constructor taking a pair
+                of iterators as an argument.
+                Typical type of the result is 
+                    \c std::vector<pdalboost::iterator_range<iterator>>
+                (each element of such a vector will container a range delimiting 
+                a match).
+            \param Input A container which will be searched.
+            \param Finder A Finder object used for searching
+            \return A reference to the result
+
+            \note Prior content of the result will be overwritten.
+        */
+        template< 
+            typename SequenceSequenceT,
+            typename RangeT,
+            typename FinderT >
+        inline SequenceSequenceT&
+        iter_find(
+            SequenceSequenceT& Result,
+            RangeT& Input,
+            FinderT Finder )
+        {
+            BOOST_CONCEPT_ASSERT((
+                FinderConcept<
+                    FinderT,
+                    BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
+                ));
+
+            iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(::pdalboost::as_literal(Input));
+
+            typedef BOOST_STRING_TYPENAME 
+                range_iterator<RangeT>::type input_iterator_type;
+            typedef find_iterator<input_iterator_type> find_iterator_type;
+            typedef detail::copy_iterator_rangeF<
+                BOOST_STRING_TYPENAME 
+                    range_value<SequenceSequenceT>::type,
+                input_iterator_type> copy_range_type;
+            
+            input_iterator_type InputEnd=::pdalboost::end(lit_input);
+
+            typedef transform_iterator<copy_range_type, find_iterator_type>
+                transform_iter_type;
+    
+            transform_iter_type itBegin=
+                ::pdalboost::make_transform_iterator( 
+                    find_iterator_type( ::pdalboost::begin(lit_input), InputEnd, Finder ),
+                    copy_range_type());
+            
+            transform_iter_type itEnd=
+                ::pdalboost::make_transform_iterator( 
+                    find_iterator_type(),
+                    copy_range_type());
+
+            SequenceSequenceT Tmp(itBegin, itEnd);
+                        
+            Result.swap(Tmp);
+            return Result;
+        }
+
+//  iterate split ---------------------------------------------------//
+
+        //! Split find algorithm
+        /*!
+            This algorithm executes a given finder in iteration on the input,
+            until the end of input is reached, or no match is found.
+            Iteration is done using built-in find_iterator, so the real 
+            searching is performed only when needed.
+            Each match is used as a separator of segments. These segments are then
+            returned in the result.
+
+            \param Result A 'container container' to contain the result of search.
+                Both outer and inner container must have constructor taking a pair
+                of iterators as an argument.
+                Typical type of the result is 
+                    \c std::vector<pdalboost::iterator_range<iterator>>
+                (each element of such a vector will container a range delimiting 
+                a match).
+            \param Input A container which will be searched.
+            \param Finder A finder object used for searching
+            \return A reference to the result
+
+            \note Prior content of the result will be overwritten.
+        */
+        template< 
+            typename SequenceSequenceT,
+            typename RangeT,
+            typename FinderT >
+        inline SequenceSequenceT&
+        iter_split(
+            SequenceSequenceT& Result,
+            RangeT& Input,
+            FinderT Finder )
+        {
+            BOOST_CONCEPT_ASSERT((
+                FinderConcept<FinderT,
+                BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
+                ));
+
+            iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(::pdalboost::as_literal(Input));
+
+            typedef BOOST_STRING_TYPENAME 
+                range_iterator<RangeT>::type input_iterator_type;
+            typedef split_iterator<input_iterator_type> find_iterator_type;
+            typedef detail::copy_iterator_rangeF<
+                BOOST_STRING_TYPENAME 
+                    range_value<SequenceSequenceT>::type,
+                input_iterator_type> copy_range_type;
+            
+            input_iterator_type InputEnd=::pdalboost::end(lit_input);
+
+            typedef transform_iterator<copy_range_type, find_iterator_type>
+                transform_iter_type;
+    
+            transform_iter_type itBegin=
+                ::pdalboost::make_transform_iterator( 
+                    find_iterator_type( ::pdalboost::begin(lit_input), InputEnd, Finder ),
+                    copy_range_type() );
+
+            transform_iter_type itEnd=
+                ::pdalboost::make_transform_iterator( 
+                    find_iterator_type(),
+                    copy_range_type() );
+            
+            SequenceSequenceT Tmp(itBegin, itEnd);
+
+            Result.swap(Tmp);
+            return Result;
+        }
+
+    } // namespace algorithm
+
+    // pull names to the boost namespace
+    using algorithm::iter_find;
+    using algorithm::iter_split;
+
+} // namespace pdalboost
+
+
+#endif  // BOOST_STRING_ITER_FIND_HPP
diff --git a/vendor/pdalboost/boost/algorithm/string/predicate_facade.hpp b/vendor/pdalboost/boost/algorithm/string/predicate_facade.hpp
new file mode 100644
index 0000000..632beb7
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/predicate_facade.hpp
@@ -0,0 +1,42 @@
+//  Boost string_algo library predicate_facade.hpp header file  ---------------------------//
+
+//  Copyright Pavol Droba 2002-2003.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_PREDICATE_FACADE_HPP
+#define BOOST_STRING_PREDICATE_FACADE_HPP
+
+#include <boost/algorithm/string/config.hpp>
+
+/*
+ \file boost/algorith/string/predicate_facade.hpp
+ This file contains predicate_facade definition. This template class is used
+ to identify classification predicates, so they can be combined using
+ composition operators.
+*/
+
+namespace pdalboost {
+    namespace algorithm {
+
+//  predicate facade ------------------------------------------------------//
+
+        //! Predicate facade
+        /*!
+            This class allows to recognize classification
+            predicates, so that they can be combined using
+            composition operators.
+            Every classification predicate must be derived from this class.
+        */
+        template<typename Derived>
+        struct predicate_facade {};
+
+    } // namespace algorithm
+} // namespace pdalboost
+
+
+#endif  // BOOST_STRING_CLASSIFICATION_DETAIL_HPP
diff --git a/vendor/pdalboost/boost/algorithm/string/split.hpp b/vendor/pdalboost/boost/algorithm/string/split.hpp
new file mode 100644
index 0000000..43ee3fd
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/split.hpp
@@ -0,0 +1,163 @@
+//  Boost string_algo library split.hpp header file  ---------------------------//
+
+//  Copyright Pavol Droba 2002-2006.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_SPLIT_HPP
+#define BOOST_STRING_SPLIT_HPP
+
+#include <boost/algorithm/string/config.hpp>
+
+#include <boost/algorithm/string/iter_find.hpp>
+#include <boost/algorithm/string/finder.hpp>
+#include <boost/algorithm/string/compare.hpp>
+
+/*! \file
+    Defines basic split algorithms. 
+    Split algorithms can be used to divide a string
+    into several parts according to given criteria.
+    
+    Each part is copied and added as a new element to the
+    output container.
+    Thus the result container must be able to hold copies
+    of the matches (in a compatible structure like std::string) or
+    a reference to it (e.g. using the iterator range class).
+    Examples of such a container are \c std::vector<std::string>
+    or \c std::list<pdalboost::iterator_range<std::string::iterator>>
+*/
+
+namespace pdalboost {
+    namespace algorithm {
+
+//  find_all  ------------------------------------------------------------//
+
+        //! Find all algorithm
+        /*!
+            This algorithm finds all occurrences of the search string
+            in the input.
+            
+            Each part is copied and added as a new element to the
+            output container.
+            Thus the result container must be able to hold copies
+            of the matches (in a compatible structure like std::string) or
+            a reference to it (e.g. using the iterator range class).
+            Examples of such a container are \c std::vector<std::string>
+            or \c std::list<pdalboost::iterator_range<std::string::iterator>>
+
+            \param Result A container that can hold copies of references to the substrings
+            \param Input A container which will be searched.
+            \param Search A substring to be searched for.
+            \return A reference the result
+
+            \note Prior content of the result will be overwritten.
+
+            \note This function provides the strong exception-safety guarantee
+        */
+        template< typename SequenceSequenceT, typename Range1T, typename Range2T >
+        inline SequenceSequenceT& find_all(
+            SequenceSequenceT& Result,
+            Range1T& Input,
+            const Range2T& Search)
+        {
+            return ::pdalboost::algorithm::iter_find(
+                Result,
+                Input,
+                ::pdalboost::algorithm::first_finder(Search) );        
+        }
+
+        //! Find all algorithm ( case insensitive ) 
+        /*!
+            This algorithm finds all occurrences of the search string
+            in the input. 
+            Each part is copied and added as a new element to the
+            output container. Thus the result container must be able to hold copies
+            of the matches (in a compatible structure like std::string) or
+            a reference to it (e.g. using the iterator range class).
+            Examples of such a container are \c std::vector<std::string>
+            or \c std::list<pdalboost::iterator_range<std::string::iterator>>
+
+            Searching is case insensitive.
+
+            \param Result A container that can hold copies of references to the substrings
+            \param Input A container which will be searched.
+            \param Search A substring to be searched for.
+            \param Loc A locale used for case insensitive comparison
+            \return A reference the result
+
+            \note Prior content of the result will be overwritten.
+
+            \note This function provides the strong exception-safety guarantee
+        */
+        template< typename SequenceSequenceT, typename Range1T, typename Range2T >
+        inline SequenceSequenceT& ifind_all(
+            SequenceSequenceT& Result,
+            Range1T& Input,
+            const Range2T& Search,
+            const std::locale& Loc=std::locale() )
+        {
+            return ::pdalboost::algorithm::iter_find(
+                Result,
+                Input,
+                ::pdalboost::algorithm::first_finder(Search, is_iequal(Loc) ) );        
+        }
+
+
+//  tokenize  -------------------------------------------------------------//
+
+        //! Split algorithm
+        /*! 
+            Tokenize expression. This function is equivalent to C strtok. Input
+            sequence is split into tokens, separated by separators. Separators 
+            are given by means of the predicate.
+
+            Each part is copied and added as a new element to the
+            output container.
+            Thus the result container must be able to hold copies
+            of the matches (in a compatible structure like std::string) or
+            a reference to it (e.g. using the iterator range class).
+            Examples of such a container are \c std::vector<std::string>
+            or \c std::list<pdalboost::iterator_range<std::string::iterator>>
+    
+            \param Result A container that can hold copies of references to the substrings          
+            \param Input A container which will be searched.
+            \param Pred A predicate to identify separators. This predicate is 
+                supposed to return true if a given element is a separator.
+            \param eCompress If eCompress argument is set to token_compress_on, adjacent 
+                separators are merged together. Otherwise, every two separators
+                delimit a token.
+            \return A reference the result
+
+            \note Prior content of the result will be overwritten.
+
+            \note This function provides the strong exception-safety guarantee
+        */
+        template< typename SequenceSequenceT, typename RangeT, typename PredicateT >
+        inline SequenceSequenceT& split(
+            SequenceSequenceT& Result,
+            RangeT& Input,
+            PredicateT Pred,
+            token_compress_mode_type eCompress=token_compress_off )
+        {
+            return ::pdalboost::algorithm::iter_split(
+                Result,
+                Input,
+                ::pdalboost::algorithm::token_finder( Pred, eCompress ) );         
+        }
+
+    } // namespace algorithm
+
+    // pull names to the boost namespace
+    using algorithm::find_all;
+    using algorithm::ifind_all;
+    using algorithm::split;    
+
+} // namespace pdalboost
+
+
+#endif  // BOOST_STRING_SPLIT_HPP
+
diff --git a/vendor/pdalboost/boost/algorithm/string/trim.hpp b/vendor/pdalboost/boost/algorithm/string/trim.hpp
new file mode 100644
index 0000000..55aabf3
--- /dev/null
+++ b/vendor/pdalboost/boost/algorithm/string/trim.hpp
@@ -0,0 +1,398 @@
+//  Boost string_algo library trim.hpp header file  ---------------------------//
+
+//  Copyright Pavol Droba 2002-2003.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for updates, documentation, and revision history.
+
+#ifndef BOOST_STRING_TRIM_HPP
+#define BOOST_STRING_TRIM_HPP
+
+#include <boost/algorithm/string/config.hpp>
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/const_iterator.hpp>
+#include <boost/range/as_literal.hpp>
+#include <boost/range/iterator_range_core.hpp>
+
+#include <boost/algorithm/string/detail/trim.hpp>
+#include <boost/algorithm/string/classification.hpp>
+#include <locale>
+
+/*! \file
+    Defines trim algorithms.
+    Trim algorithms are used to remove trailing and leading spaces from a 
+    sequence (string). Space is recognized using given locales.
+
+    Parametric (\c _if) variants use a predicate (functor) to select which characters
+    are to be trimmed.. 
+    Functions take a selection predicate as a parameter, which is used to determine 
+    whether a character is a space. Common predicates are provided in classification.hpp header.
+
+*/
+
+namespace pdalboost {
+    namespace algorithm {
+
+    //  left trim  -----------------------------------------------//
+
+
+        //! Left trim - parametric
+        /*!
+            Remove all leading spaces from the input. 
+            The supplied predicate is used to determine which characters are considered spaces.
+            The result is a trimmed copy of the input. It is returned as a sequence 
+            or copied to the output iterator
+
+            \param Output An output iterator to which the result will be copied
+            \param Input An input range
+            \param IsSpace A unary predicate identifying spaces
+            \return 
+                An output iterator pointing just after the last inserted character or
+                a copy of the input
+
+               \note The second variant of this function provides the strong exception-safety guarantee
+        */
+        template<typename OutputIteratorT, typename RangeT, typename PredicateT>
+        inline OutputIteratorT trim_left_copy_if( 
+            OutputIteratorT Output,
+            const RangeT& Input,
+            PredicateT IsSpace)
+        {
+            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_range(::pdalboost::as_literal(Input));
+
+            std::copy( 
+                ::pdalboost::algorithm::detail::trim_begin( 
+                    ::pdalboost::begin(lit_range), 
+                    ::pdalboost::end(lit_range), 
+                    IsSpace ),
+                ::pdalboost::end(lit_range),
+                Output);
+
+            return Output;
+        }
+
+        //! Left trim - parametric
+        /*!
+            \overload
+        */
+        template<typename SequenceT, typename PredicateT>
+        inline SequenceT trim_left_copy_if(const SequenceT& Input, PredicateT IsSpace)
+        {
+            return SequenceT( 
+                ::pdalboost::algorithm::detail::trim_begin( 
+                    ::pdalboost::begin(Input), 
+                    ::pdalboost::end(Input), 
+                    IsSpace ),
+                ::pdalboost::end(Input));
+        }
+
+        //! Left trim - parametric
+        /*!
+            Remove all leading spaces from the input. 
+            The result is a trimmed copy of the input.
+
+            \param Input An input sequence
+            \param Loc a locale used for 'space' classification
+            \return A trimmed copy of the input
+
+            \note This function provides the strong exception-safety guarantee
+        */
+        template<typename SequenceT>
+        inline SequenceT trim_left_copy(const SequenceT& Input, const std::locale& Loc=std::locale())
+        {
+            return            
+                ::pdalboost::algorithm::trim_left_copy_if(
+                    Input, 
+                    is_space(Loc));
+        }
+
+        //! Left trim
+        /*!
+            Remove all leading spaces from the input. The supplied predicate is 
+            used to determine which characters are considered spaces.
+            The input sequence is modified in-place.
+
+            \param Input An input sequence
+            \param IsSpace A unary predicate identifying spaces
+        */
+        template<typename SequenceT, typename PredicateT>
+        inline void trim_left_if(SequenceT& Input, PredicateT IsSpace)
+        {
+            Input.erase( 
+                ::pdalboost::begin(Input),
+                ::pdalboost::algorithm::detail::trim_begin( 
+                    ::pdalboost::begin(Input), 
+                    ::pdalboost::end(Input), 
+                    IsSpace));
+        }
+
+        //! Left trim
+        /*!
+            Remove all leading spaces from the input.
+            The Input sequence is modified in-place.
+
+            \param Input An input sequence
+            \param Loc A locale used for 'space' classification
+        */
+        template<typename SequenceT>
+        inline void trim_left(SequenceT& Input, const std::locale& Loc=std::locale())
+        {
+            ::pdalboost::algorithm::trim_left_if( 
+                Input, 
+                is_space(Loc));
+        }
+
+    //  right trim  -----------------------------------------------//
+
+        //! Right trim - parametric
+        /*!
+            Remove all trailing spaces from the input.             
+            The supplied predicate is used to determine which characters are considered spaces.
+            The result is a trimmed copy of the input. It is returned as a sequence 
+            or copied to the output iterator
+
+            \param Output An output iterator to which the result will be copied
+            \param Input An input range
+            \param IsSpace A unary predicate identifying spaces
+            \return 
+                An output iterator pointing just after the last inserted character or
+                a copy of the input
+
+             \note The second variant of this function provides the strong exception-safety guarantee
+        */
+        template<typename OutputIteratorT, typename RangeT, typename PredicateT>
+        inline OutputIteratorT trim_right_copy_if( 
+            OutputIteratorT Output,
+            const RangeT& Input,
+            PredicateT IsSpace )
+        {
+            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_range(::pdalboost::as_literal(Input));
+         
+            std::copy( 
+                ::pdalboost::begin(lit_range),
+                ::pdalboost::algorithm::detail::trim_end( 
+                    ::pdalboost::begin(lit_range), 
+                    ::pdalboost::end(lit_range), 
+                    IsSpace ),
+                Output );
+
+            return Output;
+        }
+
+        //! Right trim - parametric
+        /*!
+            \overload
+         */
+        template<typename SequenceT, typename PredicateT>
+        inline SequenceT trim_right_copy_if(const SequenceT& Input, PredicateT IsSpace)
+        {
+            return SequenceT( 
+                ::pdalboost::begin(Input),
+                ::pdalboost::algorithm::detail::trim_end( 
+                    ::pdalboost::begin(Input), 
+                    ::pdalboost::end(Input), 
+                    IsSpace)
+                );
+        }
+
+        //! Right trim
+        /*!
+            Remove all trailing spaces from the input. 
+            The result is a trimmed copy of the input
+
+            \param Input An input sequence
+            \param Loc A locale used for 'space' classification
+            \return A trimmed copy of the input
+
+            \note This function provides the strong exception-safety guarantee
+        */
+        template<typename SequenceT>
+        inline SequenceT trim_right_copy(const SequenceT& Input, const std::locale& Loc=std::locale())
+        {
+            return 
+                ::pdalboost::algorithm::trim_right_copy_if( 
+                    Input, 
+                    is_space(Loc));
+        }
+
+            
+        //! Right trim - parametric
+        /*!
+            Remove all trailing spaces from the input.
+            The supplied predicate is used to determine which characters are considered spaces.
+            The input sequence is modified in-place.
+
+            \param Input An input sequence
+            \param IsSpace A unary predicate identifying spaces
+        */
+        template<typename SequenceT, typename PredicateT>
+        inline void trim_right_if(SequenceT& Input, PredicateT IsSpace)
+        {
+            Input.erase(
+                ::pdalboost::algorithm::detail::trim_end( 
+                    ::pdalboost::begin(Input), 
+                    ::pdalboost::end(Input), 
+                    IsSpace ),
+                ::pdalboost::end(Input)
+                );
+        }
+
+
+        //! Right trim
+        /*!
+            Remove all trailing spaces from the input. 
+            The input sequence is modified in-place.
+
+            \param Input An input sequence
+            \param Loc A locale used for 'space' classification
+        */
+        template<typename SequenceT>
+        inline void trim_right(SequenceT& Input, const std::locale& Loc=std::locale())
+        {
+            ::pdalboost::algorithm::trim_right_if(
+                Input, 
+                is_space(Loc) );
+        }
+
+    //  both side trim  -----------------------------------------------//
+
+        //! Trim - parametric
+        /*!
+            Remove all trailing and leading spaces from the input. 
+            The supplied predicate is used to determine which characters are considered spaces.
+            The result is a trimmed copy of the input. It is returned as a sequence 
+            or copied to the output iterator
+
+            \param Output An output iterator to which the result will be copied
+            \param Input An input range
+            \param IsSpace A unary predicate identifying spaces
+            \return 
+                An output iterator pointing just after the last inserted character or
+                a copy of the input
+
+             \note The second variant of this function provides the strong exception-safety guarantee
+        */
+        template<typename OutputIteratorT, typename RangeT, typename PredicateT>
+        inline OutputIteratorT trim_copy_if( 
+            OutputIteratorT Output,
+            const RangeT& Input,
+            PredicateT IsSpace)
+        {
+            iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_range(::pdalboost::as_literal(Input));
+
+            BOOST_STRING_TYPENAME 
+                range_const_iterator<RangeT>::type TrimEnd=
+                ::pdalboost::algorithm::detail::trim_end( 
+                    ::pdalboost::begin(lit_range), 
+                    ::pdalboost::end(lit_range), 
+                    IsSpace);
+
+            std::copy( 
+                detail::trim_begin( 
+                    ::pdalboost::begin(lit_range), TrimEnd, IsSpace),
+                TrimEnd,
+                Output
+                );
+
+            return Output;
+        }
+
+        //! Trim - parametric
+        /*!
+            \overload
+         */
+        template<typename SequenceT, typename PredicateT>
+        inline SequenceT trim_copy_if(const SequenceT& Input, PredicateT IsSpace)
+        {
+            BOOST_STRING_TYPENAME 
+                range_const_iterator<SequenceT>::type TrimEnd=
+                    ::pdalboost::algorithm::detail::trim_end( 
+                        ::pdalboost::begin(Input), 
+                        ::pdalboost::end(Input), 
+                        IsSpace);
+
+            return SequenceT( 
+                detail::trim_begin( 
+                    ::pdalboost::begin(Input), 
+                    TrimEnd, 
+                    IsSpace),
+                TrimEnd
+                );
+        }
+
+        //! Trim
+        /*!
+            Remove all leading and trailing spaces from the input. 
+            The result is a trimmed copy of the input
+
+            \param Input An input sequence
+            \param Loc A locale used for 'space' classification
+            \return A trimmed copy of the input
+
+            \note This function provides the strong exception-safety guarantee
+        */
+        template<typename SequenceT>
+        inline SequenceT trim_copy( const SequenceT& Input, const std::locale& Loc=std::locale() )
+        {
+            return
+                ::pdalboost::algorithm::trim_copy_if(
+                    Input, 
+                    is_space(Loc) );
+        }
+     
+        //! Trim
+        /*!
+            Remove all leading and trailing spaces from the input. 
+            The supplied predicate is used to determine which characters are considered spaces.
+            The input sequence is modified in-place.
+
+            \param Input An input sequence
+            \param IsSpace A unary predicate identifying spaces
+        */
+        template<typename SequenceT, typename PredicateT>
+        inline void trim_if(SequenceT& Input, PredicateT IsSpace)
+        {
+            ::pdalboost::algorithm::trim_right_if( Input, IsSpace );
+            ::pdalboost::algorithm::trim_left_if( Input, IsSpace );
+        }
+
+        //! Trim
+        /*!
+            Remove all leading and trailing spaces from the input. 
+            The input sequence is modified in-place.
+
+            \param Input An input sequence
+            \param Loc A locale used for 'space' classification
+        */
+        template<typename SequenceT>
+        inline void trim(SequenceT& Input, const std::locale& Loc=std::locale())
+        {
+            ::pdalboost::algorithm::trim_if(
+                Input, 
+                is_space( Loc ) );
+        }
+
+    } // namespace algorithm 
+
+    // pull names to the boost namespace
+    using algorithm::trim_left;
+    using algorithm::trim_left_if;
+    using algorithm::trim_left_copy;
+    using algorithm::trim_left_copy_if;
+    using algorithm::trim_right;
+    using algorithm::trim_right_if;
+    using algorithm::trim_right_copy;
+    using algorithm::trim_right_copy_if;
+    using algorithm::trim;
+    using algorithm::trim_if;
+    using algorithm::trim_copy;
+    using algorithm::trim_copy_if;
+
+} // namespace pdalboost
+
+#endif  // BOOST_STRING_TRIM_HPP
diff --git a/vendor/pdalboost/boost/align/align.hpp b/vendor/pdalboost/boost/align/align.hpp
new file mode 100644
index 0000000..648a65e
--- /dev/null
+++ b/vendor/pdalboost/boost/align/align.hpp
@@ -0,0 +1,20 @@
+/*
+(c) 2014 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
+
+Distributed under the Boost Software
+License, Version 1.0.
+http://boost.org/LICENSE_1_0.txt
+*/
+#ifndef BOOST_ALIGN_ALIGN_HPP
+#define BOOST_ALIGN_ALIGN_HPP
+
+#include <boost/config.hpp>
+
+#if !defined(BOOST_NO_CXX11_STD_ALIGN)
+#include <boost/align/detail/align_cxx11.hpp>
+#else
+#include <boost/align/detail/align.hpp>
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/align/detail/address.hpp b/vendor/pdalboost/boost/align/detail/address.hpp
new file mode 100644
index 0000000..916757c
--- /dev/null
+++ b/vendor/pdalboost/boost/align/detail/address.hpp
@@ -0,0 +1,29 @@
+/*
+(c) 2014 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
+
+Distributed under the Boost Software
+License, Version 1.0.
+http://boost.org/LICENSE_1_0.txt
+*/
+#ifndef BOOST_ALIGN_DETAIL_ADDRESS_HPP
+#define BOOST_ALIGN_DETAIL_ADDRESS_HPP
+
+#include <boost/cstdint.hpp>
+#include <cstddef>
+
+namespace pdalboost {
+namespace alignment {
+namespace detail {
+
+#if defined(BOOST_HAS_INTPTR_T)
+typedef pdalboost::uintptr_t address;
+#else
+typedef std::size_t address;
+#endif
+
+} /* .detail */
+} /* .alignment */
+} /* .boost */
+
+#endif
diff --git a/vendor/pdalboost/boost/align/detail/align.hpp b/vendor/pdalboost/boost/align/detail/align.hpp
new file mode 100644
index 0000000..8cd85d1
--- /dev/null
+++ b/vendor/pdalboost/boost/align/detail/align.hpp
@@ -0,0 +1,40 @@
+/*
+(c) 2014 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
+
+Distributed under the Boost Software
+License, Version 1.0.
+http://boost.org/LICENSE_1_0.txt
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGN_HPP
+#define BOOST_ALIGN_DETAIL_ALIGN_HPP
+
+#include <boost/assert.hpp>
+#include <boost/align/detail/address.hpp>
+#include <boost/align/detail/is_alignment.hpp>
+#include <cstddef>
+
+namespace pdalboost {
+namespace alignment {
+
+inline void* align(std::size_t alignment, std::size_t size,
+    void*& ptr, std::size_t& space)
+{
+    BOOST_ASSERT(detail::is_alignment(alignment));
+    std::size_t n = detail::address(ptr) & (alignment - 1);
+    if (n != 0) {
+        n = alignment - n;
+    }
+    void* p = 0;
+    if (n <= space && size <= space - n) {
+        p = static_cast<char*>(ptr) + n;
+        ptr = p;
+        space -= n;
+    }
+    return p;
+}
+
+} /* .alignment */
+} /* .boost */
+
+#endif
diff --git a/vendor/pdalboost/boost/align/detail/align_cxx11.hpp b/vendor/pdalboost/boost/align/detail/align_cxx11.hpp
new file mode 100644
index 0000000..72c9686
--- /dev/null
+++ b/vendor/pdalboost/boost/align/detail/align_cxx11.hpp
@@ -0,0 +1,22 @@
+/*
+(c) 2014 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
+
+Distributed under the Boost Software
+License, Version 1.0.
+http://boost.org/LICENSE_1_0.txt
+*/
+#ifndef BOOST_ALIGN_DETAIL_ALIGN_CXX11_HPP
+#define BOOST_ALIGN_DETAIL_ALIGN_CXX11_HPP
+
+#include <memory>
+
+namespace pdalboost {
+namespace alignment {
+
+using std::align;
+
+} /* .alignment */
+} /* .boost */
+
+#endif
diff --git a/vendor/pdalboost/boost/align/detail/is_alignment.hpp b/vendor/pdalboost/boost/align/detail/is_alignment.hpp
new file mode 100644
index 0000000..09c1228
--- /dev/null
+++ b/vendor/pdalboost/boost/align/detail/is_alignment.hpp
@@ -0,0 +1,29 @@
+/*
+(c) 2014 Glen Joseph Fernandes
+<glenjofe -at- gmail.com>
+
+Distributed under the Boost Software
+License, Version 1.0.
+http://boost.org/LICENSE_1_0.txt
+*/
+#ifndef BOOST_ALIGN_DETAIL_IS_ALIGNMENT_HPP
+#define BOOST_ALIGN_DETAIL_IS_ALIGNMENT_HPP
+
+#include <boost/config.hpp>
+#include <cstddef>
+
+namespace pdalboost {
+namespace alignment {
+namespace detail {
+
+BOOST_CONSTEXPR inline bool is_alignment(std::size_t value)
+    BOOST_NOEXCEPT
+{
+    return (value > 0) && ((value & (value - 1)) == 0);
+}
+
+} /* .detail */
+} /* .alignment */
+} /* .boost */
+
+#endif
diff --git a/vendor/pdalboost/boost/aligned_storage.hpp b/vendor/pdalboost/boost/aligned_storage.hpp
new file mode 100644
index 0000000..f400fa9
--- /dev/null
+++ b/vendor/pdalboost/boost/aligned_storage.hpp
@@ -0,0 +1,18 @@
+//-----------------------------------------------------------------------------
+// boost aligned_storage.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002-2003
+// Eric Friedman, Itay Maman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_ALIGNED_STORAGE_HPP
+#define BOOST_ALIGNED_STORAGE_HPP
+
+#include <boost/type_traits/aligned_storage.hpp>
+
+#endif // BOOST_ALIGNED_STORAGE_HPP
diff --git a/vendor/pdalboost/boost/any.hpp b/vendor/pdalboost/boost/any.hpp
new file mode 100644
index 0000000..3dae385
--- /dev/null
+++ b/vendor/pdalboost/boost/any.hpp
@@ -0,0 +1,325 @@
+// See http://www.boost.org/libs/any for Documentation.
+
+#ifndef BOOST_ANY_INCLUDED
+#define BOOST_ANY_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+// what:  variant type pdalboost::any
+// who:   contributed by Kevlin Henney,
+//        with features contributed and bugs found by
+//        Antony Polukhin, Ed Brey, Mark Rodgers, 
+//        Peter Dimov, and James Curran
+// when:  July 2001, April 2013 - May 2013
+
+#include <algorithm>
+
+#include "boost/config.hpp"
+#include <boost/type_index.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/decay.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace pdalboost
+{
+    class any
+    {
+    public: // structors
+
+        any() BOOST_NOEXCEPT
+          : content(0)
+        {
+        }
+
+        template<typename ValueType>
+        any(const ValueType & value)
+          : content(new holder<
+                BOOST_DEDUCED_TYPENAME remove_cv<BOOST_DEDUCED_TYPENAME decay<const ValueType>::type>::type
+            >(value))
+        {
+        }
+
+        any(const any & other)
+          : content(other.content ? other.content->clone() : 0)
+        {
+        }
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+        // Move constructor
+        any(any&& other) BOOST_NOEXCEPT
+          : content(other.content)
+        {
+            other.content = 0;
+        }
+
+        // Perfect forwarding of ValueType
+        template<typename ValueType>
+        any(ValueType&& value
+            , typename pdalboost::disable_if<pdalboost::is_same<any&, ValueType> >::type* = 0 // disable if value has type `any&`
+            , typename pdalboost::disable_if<pdalboost::is_const<ValueType> >::type* = 0) // disable if value has type `const ValueType&&`
+          : content(new holder< typename decay<ValueType>::type >(static_cast<ValueType&&>(value)))
+        {
+        }
+#endif
+
+        ~any() BOOST_NOEXCEPT
+        {
+            delete content;
+        }
+
+    public: // modifiers
+
+        any & swap(any & rhs) BOOST_NOEXCEPT
+        {
+            std::swap(content, rhs.content);
+            return *this;
+        }
+
+
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+        template<typename ValueType>
+        any & operator=(const ValueType & rhs)
+        {
+            any(rhs).swap(*this);
+            return *this;
+        }
+
+        any & operator=(any rhs)
+        {
+            any(rhs).swap(*this);
+            return *this;
+        }
+
+#else 
+        any & operator=(const any& rhs)
+        {
+            any(rhs).swap(*this);
+            return *this;
+        }
+
+        // move assignement
+        any & operator=(any&& rhs) BOOST_NOEXCEPT
+        {
+            rhs.swap(*this);
+            any().swap(rhs);
+            return *this;
+        }
+
+        // Perfect forwarding of ValueType
+        template <class ValueType>
+        any & operator=(ValueType&& rhs)
+        {
+            any(static_cast<ValueType&&>(rhs)).swap(*this);
+            return *this;
+        }
+#endif
+
+    public: // queries
+
+        bool empty() const BOOST_NOEXCEPT
+        {
+            return !content;
+        }
+
+        void clear() BOOST_NOEXCEPT
+        {
+            any().swap(*this);
+        }
+
+        const pdalboost::typeindex::type_info& type() const BOOST_NOEXCEPT
+        {
+            return content ? content->type() : pdalboost::typeindex::type_id<void>().type_info();
+        }
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+    private: // types
+#else
+    public: // types (public so any_cast can be non-friend)
+#endif
+
+        class placeholder
+        {
+        public: // structors
+
+            virtual ~placeholder()
+            {
+            }
+
+        public: // queries
+
+            virtual const pdalboost::typeindex::type_info& type() const BOOST_NOEXCEPT = 0;
+
+            virtual placeholder * clone() const = 0;
+
+        };
+
+        template<typename ValueType>
+        class holder : public placeholder
+        {
+        public: // structors
+
+            holder(const ValueType & value)
+              : held(value)
+            {
+            }
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+            holder(ValueType&& value)
+              : held(static_cast< ValueType&& >(value))
+            {
+            }
+#endif
+        public: // queries
+
+            virtual const pdalboost::typeindex::type_info& type() const BOOST_NOEXCEPT
+            {
+                return pdalboost::typeindex::type_id<ValueType>().type_info();
+            }
+
+            virtual placeholder * clone() const
+            {
+                return new holder(held);
+            }
+
+        public: // representation
+
+            ValueType held;
+
+        private: // intentionally left unimplemented
+            holder & operator=(const holder &);
+        };
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+
+    private: // representation
+
+        template<typename ValueType>
+        friend ValueType * any_cast(any *) BOOST_NOEXCEPT;
+
+        template<typename ValueType>
+        friend ValueType * unsafe_any_cast(any *) BOOST_NOEXCEPT;
+
+#else
+
+    public: // representation (public so any_cast can be non-friend)
+
+#endif
+
+        placeholder * content;
+
+    };
+ 
+    inline void swap(any & lhs, any & rhs) BOOST_NOEXCEPT
+    {
+        lhs.swap(rhs);
+    }
+
+    class BOOST_SYMBOL_VISIBLE bad_any_cast :
+#ifndef BOOST_NO_RTTI
+        public std::bad_cast
+#else
+        public std::exception
+#endif
+    {
+    public:
+        virtual const char * what() const BOOST_NOEXCEPT_OR_NOTHROW
+        {
+            return "pdalboost::bad_any_cast: "
+                   "failed conversion using pdalboost::any_cast";
+        }
+    };
+
+    template<typename ValueType>
+    ValueType * any_cast(any * operand) BOOST_NOEXCEPT
+    {
+        return operand && operand->type() == pdalboost::typeindex::type_id<ValueType>()
+            ? &static_cast<any::holder<BOOST_DEDUCED_TYPENAME remove_cv<ValueType>::type> *>(operand->content)->held
+            : 0;
+    }
+
+    template<typename ValueType>
+    inline const ValueType * any_cast(const any * operand) BOOST_NOEXCEPT
+    {
+        return any_cast<ValueType>(const_cast<any *>(operand));
+    }
+
+    template<typename ValueType>
+    ValueType any_cast(any & operand)
+    {
+        typedef BOOST_DEDUCED_TYPENAME remove_reference<ValueType>::type nonref;
+
+
+        nonref * result = any_cast<nonref>(&operand);
+        if(!result)
+            pdalboost::throw_exception(bad_any_cast());
+
+        // Attempt to avoid construction of a temporary object in cases when 
+        // `ValueType` is not a reference. Example:
+        // `static_cast<std::string>(*result);` 
+        // which is equal to `std::string(*result);`
+        typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_<
+            pdalboost::is_reference<ValueType>,
+            ValueType,
+            BOOST_DEDUCED_TYPENAME pdalboost::add_reference<ValueType>::type
+        >::type ref_type;
+
+        return static_cast<ref_type>(*result);
+    }
+
+    template<typename ValueType>
+    inline ValueType any_cast(const any & operand)
+    {
+        typedef BOOST_DEDUCED_TYPENAME remove_reference<ValueType>::type nonref;
+        return any_cast<const nonref &>(const_cast<any &>(operand));
+    }
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+    template<typename ValueType>
+    inline ValueType any_cast(any&& operand)
+    {
+        BOOST_STATIC_ASSERT_MSG(
+            pdalboost::is_rvalue_reference<ValueType&&>::value /*true if ValueType is rvalue or just a value*/
+            || pdalboost::is_const< typename pdalboost::remove_reference<ValueType>::type >::value,
+            "pdalboost::any_cast shall not be used for getting nonconst references to temporary objects" 
+        );
+        return any_cast<ValueType>(operand);
+    }
+#endif
+
+
+    // Note: The "unsafe" versions of any_cast are not part of the
+    // public interface and may be removed at any time. They are
+    // required where we know what type is stored in the any and can't
+    // use typeid() comparison, e.g., when our types may travel across
+    // different shared libraries.
+    template<typename ValueType>
+    inline ValueType * unsafe_any_cast(any * operand) BOOST_NOEXCEPT
+    {
+        return &static_cast<any::holder<ValueType> *>(operand->content)->held;
+    }
+
+    template<typename ValueType>
+    inline const ValueType * unsafe_any_cast(const any * operand) BOOST_NOEXCEPT
+    {
+        return unsafe_any_cast<ValueType>(const_cast<any *>(operand));
+    }
+}
+
+// Copyright Kevlin Henney, 2000, 2001, 2002. All rights reserved.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#endif
diff --git a/vendor/pdalboost/boost/archive/add_facet.hpp b/vendor/pdalboost/boost/archive/add_facet.hpp
new file mode 100644
index 0000000..eee37e3
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/add_facet.hpp
@@ -0,0 +1,55 @@
+#ifndef BOOST_ARCHIVE_ADD_FACET_HPP
+#define BOOST_ARCHIVE_ADD_FACET_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// add_facet.hpp
+
+// (C) Copyright 2003 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <locale>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+// does STLport uses native STL for locales?
+#if (defined(__SGI_STL_PORT)&& defined(_STLP_NO_OWN_IOSTREAMS))
+// and this native STL lib is old Dinkumware (has not defined _CPPLIB_VER)
+#  if (defined(_YVALS) && !defined(__IBMCPP__)) || !defined(_CPPLIB_VER)
+#    define BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT
+#  endif
+#endif
+
+namespace pdalboost { 
+namespace archive {
+
+template<class Facet>
+inline std::locale * 
+add_facet(const std::locale &l, Facet * f){
+    return
+        #if defined BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT 
+            // std namespace used for native locale
+            new std::locale(std::_Addfac(l, f));
+        #elif BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) // old Dinkumwar
+            // std namespace used for native locale
+            new std::locale(std::_Addfac(l, f));
+        #else
+            // standard compatible
+            new std::locale(l, f);
+        #endif
+}
+
+} // namespace archive
+} // namespace pdalboost
+
+#undef BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT
+
+#endif // BOOST_ARCHIVE_ADD_FACET_HPP
diff --git a/vendor/pdalboost/boost/archive/archive_exception.hpp b/vendor/pdalboost/boost/archive/archive_exception.hpp
new file mode 100644
index 0000000..f1128c7
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/archive_exception.hpp
@@ -0,0 +1,100 @@
+#ifndef BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP
+#define BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// archive/archive_exception.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <exception>
+#include <boost/assert.hpp>
+#include <string>
+
+#include <boost/config.hpp> 
+#include <boost/archive/detail/decl.hpp>
+
+// note: the only reason this is in here is that windows header
+// includes #define exception_code _exception_code (arrrgghhhh!).
+// the most expedient way to address this is be sure that this
+// header is always included whenever this header file is included.
+#if defined(BOOST_WINDOWS) 
+#include <excpt.h> 
+#endif 
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost {
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// exceptions thrown by archives
+//
+class BOOST_SYMBOL_VISIBLE archive_exception : 
+    public virtual std::exception
+{
+private:
+    char m_buffer[128];
+protected:
+    BOOST_ARCHIVE_DECL unsigned int
+    append(unsigned int l, const char * a);
+    BOOST_ARCHIVE_DECL
+    archive_exception() BOOST_NOEXCEPT;
+public:
+    typedef enum {
+        no_exception,       // initialized without code
+        other_exception,    // any excepton not listed below
+        unregistered_class, // attempt to serialize a pointer of
+                            // an unregistered class
+        invalid_signature,  // first line of archive does not contain
+                            // expected string
+        unsupported_version,// archive created with library version
+                            // subsequent to this one
+        pointer_conflict,   // an attempt has been made to directly
+                            // serialize an object which has
+                            // already been serialized through a pointer.  
+                            // Were this permitted, the archive load would result 
+                            // in the creation of an extra copy of the obect.
+        incompatible_native_format, // attempt to read native binary format
+                            // on incompatible platform
+        array_size_too_short,// array being loaded doesn't fit in array allocated
+        input_stream_error, // error on input stream
+        invalid_class_name, // class name greater than the maximum permitted.
+                            // most likely a corrupted archive or an attempt
+                            // to insert virus via buffer overrun method.
+        unregistered_cast,   // base - derived relationship not registered with 
+                            // void_cast_register
+        unsupported_class_version, // type saved with a version # greater than the 
+                            // one used by the program.  This indicates that the program
+                            // needs to be rebuilt.
+        multiple_code_instantiation, // code for implementing serialization for some
+                            // type has been instantiated in more than one module.
+        output_stream_error // error on input stream
+    } exception_code;
+    exception_code code;
+
+    BOOST_ARCHIVE_DECL archive_exception(
+        exception_code c, 
+        const char * e1 = NULL,
+        const char * e2 = NULL
+    ) BOOST_NOEXCEPT;
+    BOOST_ARCHIVE_DECL archive_exception(archive_exception const &) BOOST_NOEXCEPT ;
+    virtual BOOST_ARCHIVE_DECL ~archive_exception() BOOST_NOEXCEPT_OR_NOTHROW ;
+    virtual BOOST_ARCHIVE_DECL const char * what() const BOOST_NOEXCEPT_OR_NOTHROW ;
+};
+
+}// namespace archive
+}// namespace pdalboost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif //BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP
diff --git a/vendor/pdalboost/boost/archive/basic_archive.hpp b/vendor/pdalboost/boost/archive/basic_archive.hpp
new file mode 100644
index 0000000..4976a83
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/basic_archive.hpp
@@ -0,0 +1,304 @@
+#ifndef BOOST_ARCHIVE_BASIC_ARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_ARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_archive.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+#include <cstring> // count
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp> // size_t
+#include <boost/noncopyable.hpp>
+#include <boost/integer_traits.hpp>
+
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost {
+namespace archive {
+
+#if defined(_MSC_VER)
+#pragma warning( push )
+#pragma warning( disable : 4244 4267 )
+#endif
+
+/* NOTE : Warning  : Warning : Warning : Warning : Warning
+ * Don't ever changes this.  If you do, they previously created
+ * binary archives won't be readable !!!
+ */
+class library_version_type {
+private:
+    typedef uint_least16_t base_type;
+    base_type t;
+public:
+    library_version_type(): t(0) {};
+    explicit library_version_type(const unsigned int & t_) : t(t_){
+        BOOST_ASSERT(t_ <= pdalboost::integer_traits<base_type>::const_max);
+    }
+    library_version_type(const library_version_type & t_) : 
+        t(t_.t)
+    {}
+    library_version_type & operator=(const library_version_type & rhs){
+        t = rhs.t; 
+        return *this;
+    }
+    // used for text output
+    operator base_type () const {
+        return t;
+    }                
+    // used for text input
+    operator base_type & (){
+        return t;
+    }                
+    bool operator==(const library_version_type & rhs) const {
+        return t == rhs.t;
+    } 
+    bool operator<(const library_version_type & rhs) const {
+        return t < rhs.t;
+    }   
+};
+
+BOOST_ARCHIVE_DECL library_version_type
+BOOST_ARCHIVE_VERSION();
+
+class version_type {
+private:
+    typedef uint_least32_t base_type;
+    base_type t;
+public:
+    // should be private - but MPI fails if it's not!!!
+    version_type(): t(0) {};
+    explicit version_type(const unsigned int & t_) : t(t_){
+        BOOST_ASSERT(t_ <= pdalboost::integer_traits<base_type>::const_max);
+    }
+    version_type(const version_type & t_) : 
+        t(t_.t)
+    {}
+    version_type & operator=(const version_type & rhs){
+        t = rhs.t; 
+        return *this;
+    }
+    // used for text output
+    operator base_type () const {
+        return t;
+    }                
+    // used for text intput
+    operator base_type  & (){
+        return t;
+    }                
+    bool operator==(const version_type & rhs) const {
+        return t == rhs.t;
+    } 
+    bool operator<(const version_type & rhs) const {
+        return t < rhs.t;
+    }   
+};
+
+class class_id_type {
+private:
+    typedef int_least16_t base_type;
+    base_type t;
+public:
+    // should be private - but then can't use BOOST_STRONG_TYPE below
+    class_id_type() : t(0) {};
+    explicit class_id_type(const int t_) : t(t_){
+        BOOST_ASSERT(t_ <= pdalboost::integer_traits<base_type>::const_max);
+    }
+    explicit class_id_type(const std::size_t t_) : t(t_){
+ //       BOOST_ASSERT(t_ <= pdalboost::integer_traits<base_type>::const_max);
+    }
+    class_id_type(const class_id_type & t_) : 
+        t(t_.t)
+    {}
+    class_id_type & operator=(const class_id_type & rhs){
+        t = rhs.t; 
+        return *this;
+    }
+
+    // used for text output
+    operator int () const {
+        return t;
+    }                
+    // used for text input
+    operator int_least16_t &() {
+        return t;
+    }                
+    bool operator==(const class_id_type & rhs) const {
+        return t == rhs.t;
+    } 
+    bool operator<(const class_id_type & rhs) const {
+        return t < rhs.t;
+    }   
+};
+
+#define NULL_POINTER_TAG pdalboost::archive::class_id_type(-1)
+
+class object_id_type {
+private:
+    typedef uint_least32_t base_type;
+    base_type t;
+public:
+    object_id_type(): t(0) {};
+    // note: presumes that size_t >= unsigned int.
+    explicit object_id_type(const std::size_t & t_) : t(t_){
+        BOOST_ASSERT(t_ <= pdalboost::integer_traits<base_type>::const_max);
+    }
+    object_id_type(const object_id_type & t_) : 
+        t(t_.t)
+    {}
+    object_id_type & operator=(const object_id_type & rhs){
+        t = rhs.t; 
+        return *this;
+    }
+    // used for text output
+    operator uint_least32_t () const {
+        return t;
+    }                
+    // used for text input
+    operator uint_least32_t & () {
+        return t;
+    }                
+    bool operator==(const object_id_type & rhs) const {
+        return t == rhs.t;
+    } 
+    bool operator<(const object_id_type & rhs) const {
+        return t < rhs.t;
+    }   
+};
+
+#if defined(_MSC_VER)
+#pragma warning( pop )
+#endif
+
+struct tracking_type {
+    bool t;
+    explicit tracking_type(const bool t_ = false)
+        : t(t_)
+    {};
+    tracking_type(const tracking_type & t_)
+        : t(t_.t)
+    {}
+    operator bool () const {
+        return t;
+    };
+    operator bool & () {
+        return t;
+    };
+    tracking_type & operator=(const bool t_){
+        t = t_;
+        return *this;
+    }
+    bool operator==(const tracking_type & rhs) const {
+        return t == rhs.t;
+    }
+    bool operator==(const bool & rhs) const {
+        return t == rhs;
+    }
+    tracking_type & operator=(const tracking_type & rhs){
+        t = rhs.t;
+        return *this;
+    }
+};
+
+struct class_name_type : 
+    private pdalboost::noncopyable 
+{
+    char *t;
+    operator const char * & () const {
+        return const_cast<const char * &>(t);
+    }
+    operator char * () {
+        return t;
+    }
+    std::size_t size() const {
+        return std::strlen(t);
+    }
+    explicit class_name_type(const char *key_) 
+    : t(const_cast<char *>(key_)){}
+    explicit class_name_type(char *key_) 
+    : t(key_){}
+    class_name_type & operator=(const class_name_type & rhs){
+        t = rhs.t;
+        return *this;
+    }
+};
+
+enum archive_flags {
+    no_header = 1,  // suppress archive header info
+    no_codecvt = 2,  // suppress alteration of codecvt facet
+    no_xml_tag_checking = 4,   // suppress checking of xml tags
+    no_tracking = 8,           // suppress ALL tracking
+    flags_last = 8
+};
+
+BOOST_ARCHIVE_DECL const char *
+BOOST_ARCHIVE_SIGNATURE();
+
+/* NOTE : Warning  : Warning : Warning : Warning : Warning
+ * If any of these are changed to different sized types, 
+ * binary_iarchive won't be able to read older archives
+ * unless you rev the library version and include conditional
+ * code based on the library version.  There is nothing
+ * inherently wrong in doing this - but you have to be super
+ * careful because it's easy to get wrong and start breaking
+ * old archives !!!
+ */
+
+#define BOOST_ARCHIVE_STRONG_TYPEDEF(T, D)         \
+    class D : public T {                           \
+    public:                                        \
+        explicit D(const T tt) : T(tt){}           \
+    };                                             \
+/**/
+
+BOOST_ARCHIVE_STRONG_TYPEDEF(class_id_type, class_id_reference_type)
+BOOST_ARCHIVE_STRONG_TYPEDEF(class_id_type, class_id_optional_type)
+BOOST_ARCHIVE_STRONG_TYPEDEF(object_id_type, object_reference_type)
+
+}// namespace archive
+}// namespace pdalboost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#include <boost/serialization/level.hpp>
+
+// set implementation level to primitive for all types
+// used internally by the serialization library
+
+BOOST_CLASS_IMPLEMENTATION(pdalboost::archive::library_version_type, primitive_type)
+BOOST_CLASS_IMPLEMENTATION(pdalboost::archive::version_type, primitive_type)
+BOOST_CLASS_IMPLEMENTATION(pdalboost::archive::class_id_type, primitive_type)
+BOOST_CLASS_IMPLEMENTATION(pdalboost::archive::class_id_reference_type, primitive_type)
+BOOST_CLASS_IMPLEMENTATION(pdalboost::archive::class_id_optional_type, primitive_type)
+BOOST_CLASS_IMPLEMENTATION(pdalboost::archive::class_name_type, primitive_type)
+BOOST_CLASS_IMPLEMENTATION(pdalboost::archive::object_id_type, primitive_type)
+BOOST_CLASS_IMPLEMENTATION(pdalboost::archive::object_reference_type, primitive_type)
+BOOST_CLASS_IMPLEMENTATION(pdalboost::archive::tracking_type, primitive_type)
+
+#include <boost/serialization/is_bitwise_serializable.hpp>
+
+// set types used internally by the serialization library 
+// to be bitwise serializable
+
+BOOST_IS_BITWISE_SERIALIZABLE(pdalboost::archive::library_version_type)
+BOOST_IS_BITWISE_SERIALIZABLE(pdalboost::archive::version_type)
+BOOST_IS_BITWISE_SERIALIZABLE(pdalboost::archive::class_id_type)
+BOOST_IS_BITWISE_SERIALIZABLE(pdalboost::archive::class_id_reference_type)
+BOOST_IS_BITWISE_SERIALIZABLE(pdalboost::archive::class_id_optional_type)
+BOOST_IS_BITWISE_SERIALIZABLE(pdalboost::archive::class_name_type)
+BOOST_IS_BITWISE_SERIALIZABLE(pdalboost::archive::object_id_type)
+BOOST_IS_BITWISE_SERIALIZABLE(pdalboost::archive::object_reference_type)
+BOOST_IS_BITWISE_SERIALIZABLE(pdalboost::archive::tracking_type)
+
+#endif //BOOST_ARCHIVE_BASIC_ARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/basic_binary_iarchive.hpp b/vendor/pdalboost/boost/archive/basic_binary_iarchive.hpp
new file mode 100644
index 0000000..2647253
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/basic_binary_iarchive.hpp
@@ -0,0 +1,204 @@
+#ifndef BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_iarchive.hpp
+//
+// archives stored as native binary - this should be the fastest way
+// to archive the state of a group of obects.  It makes no attempt to
+// convert to any canonical form.
+
+// IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE
+// ON PLATFORM APART FROM THE ONE THEY ARE CREATED ON
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/archive/basic_archive.hpp>
+#include <boost/archive/detail/common_iarchive.hpp>
+#include <boost/serialization/collection_size_type.hpp>
+#include <boost/serialization/string.hpp>
+#include <boost/serialization/item_version_type.hpp>
+#include <boost/integer_traits.hpp>
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost { 
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
+/////////////////////////////////////////////////////////////////////////
+// class basic_binary_iarchive - read serialized objects from a input binary stream
+template<class Archive>
+class BOOST_SYMBOL_VISIBLE basic_binary_iarchive : 
+    public detail::common_iarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+    #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+        // for some inexplicable reason insertion of "class" generates compile erro
+        // on msvc 7.1
+        friend detail::interface_iarchive<Archive>;
+    #else
+        friend class detail::interface_iarchive<Archive>;
+    #endif
+#endif
+    // intermediate level to support override of operators
+    // fot templates in the absence of partial function 
+    // template ordering. If we get here pass to base class
+    // note extra nonsense to sneak it pass the borland compiers
+    typedef detail::common_iarchive<Archive> detail_common_iarchive;
+    template<class T>
+    void load_override(T & t){
+      this->detail_common_iarchive::load_override(t);
+    }
+
+    // include these to trap a change in binary format which
+    // isn't specifically handled
+    // upto 32K classes
+    BOOST_STATIC_ASSERT(sizeof(class_id_type) == sizeof(int_least16_t));
+    BOOST_STATIC_ASSERT(sizeof(class_id_reference_type) == sizeof(int_least16_t));
+    // upto 2G objects
+    BOOST_STATIC_ASSERT(sizeof(object_id_type) == sizeof(uint_least32_t));
+    BOOST_STATIC_ASSERT(sizeof(object_reference_type) == sizeof(uint_least32_t));
+
+    // binary files don't include the optional information 
+    void load_override(class_id_optional_type & /* t */){}
+
+    void load_override(tracking_type & t, int /*version*/){
+        library_version_type lvt = this->get_library_version();
+        if(pdalboost::archive::library_version_type(6) < lvt){
+            int_least8_t x=0;
+            * this->This() >> x;
+            t = pdalboost::archive::tracking_type(x);
+        }
+        else{
+            bool x=0;
+            * this->This() >> x;
+            t = pdalboost::archive::tracking_type(x);
+        }
+    }
+    void load_override(class_id_type & t){
+        library_version_type lvt = this->get_library_version();
+        if(pdalboost::archive::library_version_type(7) < lvt){
+            this->detail_common_iarchive::load_override(t);
+        }
+        else
+        if(pdalboost::archive::library_version_type(6) < lvt){
+            int_least16_t x=0;
+            * this->This() >> x;
+            t = pdalboost::archive::class_id_type(x);
+        }
+        else{
+            int x=0;
+            * this->This() >> x;
+            t = pdalboost::archive::class_id_type(x);
+        }
+    }
+    void load_override(class_id_reference_type & t){
+        load_override(static_cast<class_id_type &>(t));
+    }
+
+    void load_override(version_type & t){
+        library_version_type lvt = this->get_library_version();
+        if(pdalboost::archive::library_version_type(7) < lvt){
+            this->detail_common_iarchive::load_override(t);
+        }
+        else
+        if(pdalboost::archive::library_version_type(6) < lvt){
+            uint_least8_t x=0;
+            * this->This() >> x;
+            t = pdalboost::archive::version_type(x);
+        }
+        else
+        if(pdalboost::archive::library_version_type(5) < lvt){
+            uint_least16_t x=0;
+            * this->This() >> x;
+            t = pdalboost::archive::version_type(x);
+        }
+        else
+        if(pdalboost::archive::library_version_type(2) < lvt){
+            // upto 255 versions
+            unsigned char x=0;
+            * this->This() >> x;
+            t = version_type(x);
+        }
+        else{
+            unsigned int x=0;
+            * this->This() >> x;
+            t = pdalboost::archive::version_type(x);
+        }
+    }
+
+    void load_override(pdalboost::serialization::item_version_type & t){
+        library_version_type lvt = this->get_library_version();
+//        if(pdalboost::archive::library_version_type(7) < lvt){
+        if(pdalboost::archive::library_version_type(6) < lvt){
+            this->detail_common_iarchive::load_override(t);
+        }
+        else
+        if(pdalboost::archive::library_version_type(6) < lvt){
+            uint_least16_t x=0;
+            * this->This() >> x;
+            t = pdalboost::serialization::item_version_type(x);
+        }
+        else{
+            unsigned int x=0;
+            * this->This() >> x;
+            t = pdalboost::serialization::item_version_type(x);
+        }
+    }
+
+    void load_override(serialization::collection_size_type & t){
+        if(pdalboost::archive::library_version_type(5) < this->get_library_version()){
+            this->detail_common_iarchive::load_override(t);
+        }
+        else{
+            unsigned int x=0;
+            * this->This() >> x;
+            t = serialization::collection_size_type(x);
+        } 
+    }
+
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    load_override(class_name_type & t);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    init();
+   
+    basic_binary_iarchive(unsigned int flags) :
+        detail::common_iarchive<Archive>(flags)
+    {}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/basic_binary_iprimitive.hpp b/vendor/pdalboost/boost/archive/basic_binary_iprimitive.hpp
new file mode 100644
index 0000000..1419095
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/basic_binary_iprimitive.hpp
@@ -0,0 +1,194 @@
+#ifndef BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP
+#define BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#if defined(_MSC_VER)
+#pragma warning( disable : 4800 )
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_iprimitive.hpp
+//
+// archives stored as native binary - this should be the fastest way
+// to archive the state of a group of obects.  It makes no attempt to
+// convert to any canonical form.
+
+// IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE
+// ON PLATFORM APART FROM THE ONE THEY ARE CREATED ON
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <iosfwd>
+#include <boost/assert.hpp>
+#include <locale>
+#include <cstring> // std::memcpy
+#include <cstddef> // std::size_t
+#include <streambuf> // basic_streambuf
+#include <string>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::memcpy; 
+    using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/cstdint.hpp>
+#include <boost/scoped_ptr.hpp>
+#include <boost/serialization/throw_exception.hpp>
+#include <boost/integer.hpp>
+#include <boost/integer_traits.hpp>
+
+#include <boost/mpl/placeholders.hpp>
+#include <boost/serialization/is_bitwise_serializable.hpp>
+#include <boost/serialization/array.hpp>
+
+#include <boost/archive/basic_streambuf_locale_saver.hpp>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost { 
+namespace archive {
+
+template<class Ch>
+class codecvt_null;
+
+/////////////////////////////////////////////////////////////////////////////
+// class binary_iarchive - read serialized objects from a input binary stream
+template<class Archive, class Elem, class Tr>
+class BOOST_SYMBOL_VISIBLE basic_binary_iprimitive {
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+    friend class load_access;
+protected:
+#else
+public:
+#endif
+    std::basic_streambuf<Elem, Tr> & m_sb;
+    // return a pointer to the most derived class
+    Archive * This(){
+        return static_cast<Archive *>(this);
+    }
+
+    #ifndef BOOST_NO_STD_LOCALE
+    pdalboost::scoped_ptr<codecvt_null<Elem> > codecvt_facet;
+    pdalboost::scoped_ptr<std::locale> archive_locale;
+    basic_streambuf_locale_saver<Elem, Tr> locale_saver;
+    #endif
+
+    // main template for serilization of primitive types
+    template<class T>
+    void load(T & t){
+        load_binary(& t, sizeof(T));
+    }
+
+    /////////////////////////////////////////////////////////
+    // fundamental types that need special treatment
+    
+    // trap usage of invalid uninitialized boolean 
+    void load(bool & t){
+        load_binary(& t, sizeof(t));
+        int i = t;
+        BOOST_ASSERT(0 == i || 1 == i);
+        (void)i; // warning suppression for release builds.
+    }
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    load(std::string &s);
+    #ifndef BOOST_NO_STD_WSTRING
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    load(std::wstring &ws);
+    #endif
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    load(char * t);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    load(wchar_t * t);
+
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    init();
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL 
+    basic_binary_iprimitive(
+        std::basic_streambuf<Elem, Tr> & sb, 
+        bool no_codecvt
+    );
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL 
+    ~basic_binary_iprimitive();
+public:
+    // we provide an optimized load for all fundamental types
+    // typedef serialization::is_bitwise_serializable<mpl::_1> 
+    // use_array_optimization;
+    struct use_array_optimization {  
+        template <class T>  
+        #if defined(BOOST_NO_DEPENDENT_NESTED_DERIVATIONS)  
+            struct apply {  
+                typedef typename pdalboost::serialization::is_bitwise_serializable< T >::type type;  
+            };
+        #else
+            struct apply : public pdalboost::serialization::is_bitwise_serializable< T > {};  
+        #endif
+    };
+
+    // the optimized load_array dispatches to load_binary 
+    template <class ValueType>
+    void load_array(serialization::array<ValueType>& a, unsigned int)
+    {
+      load_binary(a.address(),a.count()*sizeof(ValueType));
+    }
+
+    void
+    load_binary(void *address, std::size_t count);
+};
+
+template<class Archive, class Elem, class Tr>
+inline void
+basic_binary_iprimitive<Archive, Elem, Tr>::load_binary(
+    void *address, 
+    std::size_t count
+){
+    // note: an optimizer should eliminate the following for char files
+    BOOST_ASSERT(
+        static_cast<std::streamsize>(count / sizeof(Elem)) 
+        <= pdalboost::integer_traits<std::streamsize>::const_max
+    );
+    std::streamsize s = static_cast<std::streamsize>(count / sizeof(Elem));
+    std::streamsize scount = m_sb.sgetn(
+        static_cast<Elem *>(address), 
+        s
+    );
+    if(scount != s)
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::input_stream_error)
+        );
+    // note: an optimizer should eliminate the following for char files
+    BOOST_ASSERT(count % sizeof(Elem) <= pdalboost::integer_traits<std::streamsize>::const_max);
+    s = static_cast<std::streamsize>(count % sizeof(Elem));
+    if(0 < s){
+//        if(is.fail())
+//            pdalboost::serialization::throw_exception(
+//                archive_exception(archive_exception::stream_error)
+//        );
+        Elem t;
+        scount = m_sb.sgetn(& t, 1);
+        if(scount != 1)
+            pdalboost::serialization::throw_exception(
+                archive_exception(archive_exception::input_stream_error)
+            );
+        std::memcpy(static_cast<char*>(address) + (count - s), &t, static_cast<std::size_t>(s));
+    }
+}
+
+} // namespace archive
+} // namespace pdalboost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pop pragmas
+
+#endif // BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/basic_binary_oarchive.hpp b/vendor/pdalboost/boost/archive/basic_binary_oarchive.hpp
new file mode 100644
index 0000000..d8403ae
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/basic_binary_oarchive.hpp
@@ -0,0 +1,185 @@
+#ifndef BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// archives stored as native binary - this should be the fastest way
+// to archive the state of a group of obects.  It makes no attempt to
+// convert to any canonical form.
+
+// IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE
+// ON PLATFORM APART FROM THE ONE THEY ARE CREATE ON
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/integer.hpp>
+#include <boost/integer_traits.hpp>
+
+#include <boost/archive/detail/common_oarchive.hpp>
+#include <boost/serialization/string.hpp>
+#include <boost/serialization/collection_size_type.hpp>
+#include <boost/serialization/item_version_type.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_oarchive;
+} // namespace detail
+
+//////////////////////////////////////////////////////////////////////
+// class basic_binary_oarchive - write serialized objects to a binary output stream
+// note: this archive has no pretensions to portability.  Archive format
+// may vary across machine architectures and compilers.  About the only
+// guarentee is that an archive created with this code will be readable
+// by a program built with the same tools for the same machne.  This class
+// does have the virtue of buiding the smalles archive in the minimum amount
+// of time.  So under some circumstances it may be he right choice.
+template<class Archive>
+class BOOST_SYMBOL_VISIBLE basic_binary_oarchive : 
+    public detail::common_oarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+    #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+        // for some inexplicable reason insertion of "class" generates compile erro
+        // on msvc 7.1
+        friend detail::interface_oarchive<Archive>;
+    #else
+        friend class detail::interface_oarchive<Archive>;
+    #endif
+#endif
+    // any datatype not specifed below will be handled by base class
+    typedef detail::common_oarchive<Archive> detail_common_oarchive;
+    template<class T>
+    void save_override(const T & t){
+      this->detail_common_oarchive::save_override(t);
+    }
+
+    // include these to trap a change in binary format which
+    // isn't specifically handled
+    BOOST_STATIC_ASSERT(sizeof(tracking_type) == sizeof(bool));
+    // upto 32K classes
+    BOOST_STATIC_ASSERT(sizeof(class_id_type) == sizeof(int_least16_t));
+    BOOST_STATIC_ASSERT(sizeof(class_id_reference_type) == sizeof(int_least16_t));
+    // upto 2G objects
+    BOOST_STATIC_ASSERT(sizeof(object_id_type) == sizeof(uint_least32_t));
+    BOOST_STATIC_ASSERT(sizeof(object_reference_type) == sizeof(uint_least32_t));
+
+    // binary files don't include the optional information 
+    void save_override(const class_id_optional_type & /* t */){}
+
+    // enable this if we decide to support generation of previous versions
+    #if 0
+    void save_override(const pdalboost::archive::version_type & t){
+        library_version_type lvt = this->get_library_version();
+        if(pdalboost::archive::library_version_type(7) < lvt){
+            this->detail_common_oarchive::save_override(t);
+        }
+        else
+        if(pdalboost::archive::library_version_type(6) < lvt){
+            const pdalboost::uint_least16_t x = t;
+            * this->This() << x;
+        }
+        else{
+            const unsigned int x = t;
+            * this->This() << x;
+        }
+    }
+    void save_override(const pdalboost::serialization::item_version_type & t){
+        library_version_type lvt = this->get_library_version();
+        if(pdalboost::archive::library_version_type(7) < lvt){
+            this->detail_common_oarchive::save_override(t);
+        }
+        else
+        if(pdalboost::archive::library_version_type(6) < lvt){
+            const pdalboost::uint_least16_t x = t;
+            * this->This() << x;
+        }
+        else{
+            const unsigned int x = t;
+            * this->This() << x;
+        }
+    }
+
+    void save_override(class_id_type & t){
+        library_version_type lvt = this->get_library_version();
+        if(pdalboost::archive::library_version_type(7) < lvt){
+            this->detail_common_oarchive::save_override(t);
+        }
+        else
+        if(pdalboost::archive::library_version_type(6) < lvt){
+            const pdalboost::int_least16_t x = t;
+            * this->This() << x;
+        }
+        else{
+            const int x = t;
+            * this->This() << x;
+        }
+    }
+    void save_override(class_id_reference_type & t){
+        save_override(static_cast<class_id_type &>(t));
+    }
+
+    #endif
+
+    // explicitly convert to char * to avoid compile ambiguities
+    void save_override(const class_name_type & t){
+        const std::string s(t);
+        * this->This() << s;
+    }
+
+    #if 0
+    void save_override(const serialization::collection_size_type & t){
+        if (get_library_version() < pdalboost::archive::library_version_type(6)){
+            unsigned int x=0;
+            * this->This() >> x;
+            t = serialization::collection_size_type(x);
+        } 
+        else{
+            * this->This() >> t;
+        }
+    }
+    #endif
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    init();
+
+    basic_binary_oarchive(unsigned int flags) :
+        detail::common_oarchive<Archive>(flags)
+    {}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/basic_binary_oprimitive.hpp b/vendor/pdalboost/boost/archive/basic_binary_oprimitive.hpp
new file mode 100644
index 0000000..dfaad9f
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/basic_binary_oprimitive.hpp
@@ -0,0 +1,183 @@
+#ifndef BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP
+#define BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_oprimitive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// archives stored as native binary - this should be the fastest way
+// to archive the state of a group of obects.  It makes no attempt to
+// convert to any canonical form.
+
+// IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE
+// ON PLATFORM APART FROM THE ONE THEY ARE CREATE ON
+
+#include <iosfwd>
+#include <boost/assert.hpp>
+#include <locale>
+#include <streambuf> // basic_streambuf
+#include <string>
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+} // namespace std
+#endif
+
+#include <boost/cstdint.hpp>
+#include <boost/integer.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/scoped_ptr.hpp>
+#include <boost/serialization/throw_exception.hpp>
+
+#include <boost/archive/basic_streambuf_locale_saver.hpp>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/serialization/is_bitwise_serializable.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/serialization/array.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost {
+namespace archive {
+
+template<class Ch>
+class codecvt_null;
+
+/////////////////////////////////////////////////////////////////////////
+// class basic_binary_oprimitive - binary output of prmitives
+
+template<class Archive, class Elem, class Tr>
+class BOOST_SYMBOL_VISIBLE basic_binary_oprimitive {
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+    friend class save_access;
+protected:
+#else
+public:
+#endif
+    std::basic_streambuf<Elem, Tr> & m_sb;
+    // return a pointer to the most derived class
+    Archive * This(){
+        return static_cast<Archive *>(this);
+    }
+    #ifndef BOOST_NO_STD_LOCALE
+    pdalboost::scoped_ptr<codecvt_null<Elem> > codecvt_facet;
+    pdalboost::scoped_ptr<std::locale> archive_locale;
+    basic_streambuf_locale_saver<Elem, Tr> locale_saver;
+    #endif
+    // default saving of primitives.
+    template<class T>
+    void save(const T & t)
+    {
+        save_binary(& t, sizeof(T));
+    }
+
+    /////////////////////////////////////////////////////////
+    // fundamental types that need special treatment
+    
+    // trap usage of invalid uninitialized boolean which would
+    // otherwise crash on load.
+    void save(const bool t){
+        BOOST_ASSERT(0 == static_cast<int>(t) || 1 == static_cast<int>(t));
+        save_binary(& t, sizeof(t));
+    }
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    save(const std::string &s);
+    #ifndef BOOST_NO_STD_WSTRING
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    save(const std::wstring &ws);
+    #endif
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    save(const char * t);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    save(const wchar_t * t);
+
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    init();
+    
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL 
+    basic_binary_oprimitive(
+        std::basic_streambuf<Elem, Tr> & sb, 
+        bool no_codecvt
+    );
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL 
+    ~basic_binary_oprimitive();
+public:
+
+    // we provide an optimized save for all fundamental types
+    // typedef serialization::is_bitwise_serializable<mpl::_1> 
+    // use_array_optimization;
+    // workaround without using mpl lambdas
+    struct use_array_optimization {
+        template <class T>  
+        #if defined(BOOST_NO_DEPENDENT_NESTED_DERIVATIONS)  
+            struct apply {  
+                typedef typename pdalboost::serialization::is_bitwise_serializable< T >::type type;  
+            };
+        #else
+            struct apply : public pdalboost::serialization::is_bitwise_serializable< T > {};  
+        #endif
+    };
+    
+
+    // the optimized save_array dispatches to save_binary 
+    template <class ValueType>
+    void save_array(pdalboost::serialization::array<ValueType> const& a, unsigned int)
+    {
+      save_binary(a.address(),a.count()*sizeof(ValueType));
+    }
+
+    void save_binary(const void *address, std::size_t count);
+};
+
+template<class Archive, class Elem, class Tr>
+inline void 
+basic_binary_oprimitive<Archive, Elem, Tr>::save_binary(
+    const void *address, 
+    std::size_t count
+){
+    // BOOST_ASSERT(count <= std::size_t(pdalboost::integer_traits<std::streamsize>::const_max));
+    // note: if the following assertions fail
+    // a likely cause is that the output stream is set to "text"
+    // mode where by cr characters recieve special treatment.
+    // be sure that the output stream is opened with ios::binary
+    //if(os.fail())
+    //    pdalboost::serialization::throw_exception(
+    //        archive_exception(archive_exception::output_stream_error)
+    //    );
+    // figure number of elements to output - round up
+    count = ( count + sizeof(Elem) - 1) / sizeof(Elem);
+    std::streamsize scount = m_sb.sputn(
+        static_cast<const Elem *>(address), 
+        static_cast<std::streamsize>(count)
+    );
+    if(count != static_cast<std::size_t>(scount))
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::output_stream_error)
+        );
+    //os.write(
+    //    static_cast<const typename OStream::char_type *>(address), 
+    //    count
+    //);
+    //BOOST_ASSERT(os.good());
+}
+
+} //namespace pdalboost 
+} //namespace archive 
+
+#include <boost/archive/detail/abi_suffix.hpp> // pop pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/basic_streambuf_locale_saver.hpp b/vendor/pdalboost/boost/archive/basic_streambuf_locale_saver.hpp
new file mode 100644
index 0000000..0bac50c
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/basic_streambuf_locale_saver.hpp
@@ -0,0 +1,75 @@
+#ifndef BOOST_ARCHIVE_BASIC_STREAMBUF_LOCALE_SAVER_HPP
+#define BOOST_ARCHIVE_BASIC_STREAMBUF_LOCALE_SAVER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_streambuf_locale_saver.hpp
+
+// (C) Copyright 2005 Robert Ramey - http://www.rrsd.com
+
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// note derived from boost/io/ios_state.hpp
+// Copyright 2002, 2005 Daryle Walker.  Use, modification, and distribution
+// are subject to the Boost Software License, Version 1.0.  (See accompanying
+// file LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+//  See <http://www.boost.org/libs/io/> for the library's home page.
+
+#ifndef BOOST_NO_STD_LOCALE
+
+#include <locale>     // for std::locale
+#include <streambuf>  // for std::basic_streambuf
+
+#include <boost/config.hpp>
+#include <boost/noncopyable.hpp>
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost{
+namespace archive{
+
+template < typename Ch, class Tr >
+class basic_streambuf_locale_saver :
+    private pdalboost::noncopyable
+{
+public:
+    typedef ::std::basic_streambuf<Ch, Tr> state_type;
+    typedef ::std::locale aspect_type;
+    explicit basic_streambuf_locale_saver( state_type &s )
+        : s_save_( s ), a_save_( s.getloc() )
+        {}
+    explicit basic_streambuf_locale_saver( state_type &s, aspect_type const &a )
+        : s_save_( s ), a_save_( s.pubimbue(a) )
+        {}
+    ~basic_streambuf_locale_saver()
+        { this->restore(); }
+    void  restore(){
+        s_save_.pubsync();
+        s_save_.pubimbue( a_save_ );
+    }
+private:
+    state_type &       s_save_;
+    aspect_type const  a_save_;
+};
+
+} // archive
+} // boost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_NO_STD_LOCALE
+#endif // BOOST_ARCHIVE_BASIC_STREAMBUF_LOCALE_SAVER_HPP
diff --git a/vendor/pdalboost/boost/archive/basic_text_iarchive.hpp b/vendor/pdalboost/boost/archive/basic_text_iarchive.hpp
new file mode 100644
index 0000000..9010694
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/basic_text_iarchive.hpp
@@ -0,0 +1,96 @@
+#ifndef BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// archives stored as text - note these ar templated on the basic
+// stream templates to accommodate wide (and other?) kind of characters
+//
+// note the fact that on libraries without wide characters, ostream is
+// is not a specialization of basic_ostream which in fact is not defined
+// in such cases.   So we can't use basic_ostream<IStream::char_type> but rather
+// use two template parameters
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/archive/detail/common_iarchive.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
+/////////////////////////////////////////////////////////////////////////
+// class basic_text_iarchive - read serialized objects from a input text stream
+template<class Archive>
+class BOOST_SYMBOL_VISIBLE basic_text_iarchive : 
+    public detail::common_iarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+    #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+        // for some inexplicable reason insertion of "class" generates compile erro
+        // on msvc 7.1
+        friend detail::interface_iarchive<Archive>;
+    #else
+        friend class detail::interface_iarchive<Archive>;
+    #endif
+#endif
+    // intermediate level to support override of operators
+    // fot templates in the absence of partial function 
+    // template ordering
+    typedef detail::common_iarchive<Archive> detail_common_iarchive;
+    template<class T>
+    void load_override(T & t){
+        this->detail_common_iarchive::load_override(t);
+    }
+    // text file don't include the optional information 
+    void load_override(class_id_optional_type & /*t*/){}
+
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    load_override(class_name_type & t);
+
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    init(void);
+
+    basic_text_iarchive(unsigned int flags) : 
+        detail::common_iarchive<Archive>(flags)
+    {}
+    ~basic_text_iarchive(){}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/basic_text_iprimitive.hpp b/vendor/pdalboost/boost/archive/basic_text_iprimitive.hpp
new file mode 100644
index 0000000..d94e6b6
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/basic_text_iprimitive.hpp
@@ -0,0 +1,137 @@
+#ifndef BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP
+#define BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_iprimitive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// archives stored as text - note these are templated on the basic
+// stream templates to accommodate wide (and other?) kind of characters
+//
+// Note the fact that on libraries without wide characters, ostream is
+// not a specialization of basic_ostream which in fact is not defined
+// in such cases.   So we can't use basic_ostream<IStream::char_type> but rather
+// use two template parameters
+
+#include <boost/assert.hpp>
+#include <locale>
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+    #if ! defined(BOOST_DINKUMWARE_STDLIB) && ! defined(__SGI_STL_PORT)
+        using ::locale;
+    #endif
+} // namespace std
+#endif
+
+#include <boost/detail/workaround.hpp>
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+#include <boost/archive/dinkumware.hpp>
+#endif
+
+#include <boost/limits.hpp>
+#include <boost/io/ios_state.hpp>
+#include <boost/scoped_ptr.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/serialization/throw_exception.hpp>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/archive/basic_streambuf_locale_saver.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost {
+namespace archive {
+
+/////////////////////////////////////////////////////////////////////////
+// class basic_text_iarchive - load serialized objects from a input text stream
+#if defined(_MSC_VER)
+#pragma warning( push )
+#pragma warning( disable : 4244 4267 )
+#endif
+
+template<class IStream>
+class BOOST_SYMBOL_VISIBLE basic_text_iprimitive {
+protected:
+    IStream &is;
+    io::ios_flags_saver flags_saver;
+    io::ios_precision_saver precision_saver;
+
+    #ifndef BOOST_NO_STD_LOCALE
+    pdalboost::scoped_ptr<std::locale> archive_locale;
+    basic_streambuf_locale_saver<
+        typename IStream::char_type, 
+        typename IStream::traits_type
+    > locale_saver;
+    #endif
+
+    template<class T>
+    void load(T & t)
+    {
+        if(is >> t)
+            return;
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::input_stream_error)
+        );
+    }
+
+    void load(char & t)
+    {
+        short int i;
+        load(i);
+        t = i;
+    }
+    void load(signed char & t)
+    {
+        short int i;
+        load(i);
+        t = i;
+    }
+    void load(unsigned char & t)
+    {
+        unsigned short int i;
+        load(i);
+        t = i;
+    }
+
+    #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+    void load(wchar_t & t)
+    {
+        BOOST_STATIC_ASSERT(sizeof(wchar_t) <= sizeof(int));
+        int i;
+        load(i);
+        t = i;
+    }
+    #endif
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL 
+    basic_text_iprimitive(IStream  &is, bool no_codecvt);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL 
+    ~basic_text_iprimitive();
+public:
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    load_binary(void *address, std::size_t count);
+};
+
+#if defined(_MSC_VER)
+#pragma warning( pop )
+#endif
+
+} // namespace archive
+} // namespace pdalboost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pop pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/basic_text_oarchive.hpp b/vendor/pdalboost/boost/archive/basic_text_oarchive.hpp
new file mode 100644
index 0000000..4697705
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/basic_text_oarchive.hpp
@@ -0,0 +1,119 @@
+#ifndef BOOST_ARCHIVE_BASIC_TEXT_OARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_TEXT_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// archives stored as text - note these ar templated on the basic
+// stream templates to accommodate wide (and other?) kind of characters
+//
+// note the fact that on libraries without wide characters, ostream is
+// is not a specialization of basic_ostream which in fact is not defined
+// in such cases.   So we can't use basic_ostream<OStream::char_type> but rather
+// use two template parameters
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/archive/detail/common_oarchive.hpp>
+#include <boost/serialization/string.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_oarchive;
+} // namespace detail
+
+/////////////////////////////////////////////////////////////////////////
+// class basic_text_oarchive 
+template<class Archive>
+class BOOST_SYMBOL_VISIBLE basic_text_oarchive : 
+    public detail::common_oarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+    #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+        // for some inexplicable reason insertion of "class" generates compile erro
+        // on msvc 7.1
+        friend detail::interface_oarchive<Archive>;
+    #else
+        friend class detail::interface_oarchive<Archive>;
+    #endif
+#endif
+
+    enum {
+        none,
+        eol,
+        space
+    } delimiter;
+
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    newtoken();
+
+    void newline(){
+        delimiter = eol;
+    }
+
+    // default processing - kick back to base class.  Note the
+    // extra stuff to get it passed borland compilers
+    typedef detail::common_oarchive<Archive> detail_common_oarchive;
+    template<class T>
+    void save_override(T & t){
+        this->detail_common_oarchive::save_override(t);
+    }
+
+    // start new objects on a new line
+    void save_override(const object_id_type & t){
+        this->This()->newline();
+        this->detail_common_oarchive::save_override(t);
+    }
+
+    // text file don't include the optional information 
+    void save_override(const class_id_optional_type & /* t */){}
+
+    void save_override(const class_name_type & t){
+        const std::string s(t);
+        * this->This() << s;
+    }
+
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    init();
+
+    basic_text_oarchive(unsigned int flags) :
+        detail::common_oarchive<Archive>(flags),
+        delimiter(none)
+    {}
+    ~basic_text_oarchive(){}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_TEXT_OARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/basic_text_oprimitive.hpp b/vendor/pdalboost/boost/archive/basic_text_oprimitive.hpp
new file mode 100644
index 0000000..c2f9fb4
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/basic_text_oprimitive.hpp
@@ -0,0 +1,204 @@
+#ifndef BOOST_ARCHIVE_BASIC_TEXT_OPRIMITIVE_HPP
+#define BOOST_ARCHIVE_BASIC_TEXT_OPRIMITIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_oprimitive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// archives stored as text - note these ar templated on the basic
+// stream templates to accommodate wide (and other?) kind of characters
+//
+// note the fact that on libraries without wide characters, ostream is
+// is not a specialization of basic_ostream which in fact is not defined
+// in such cases.   So we can't use basic_ostream<OStream::char_type> but rather
+// use two template parameters
+
+#include <iomanip>
+#include <locale>
+#include <boost/assert.hpp>
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/io/ios_state.hpp>
+
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+#include <boost/archive/dinkumware.hpp>
+#endif
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t;
+    #if ! defined(BOOST_DINKUMWARE_STDLIB) && ! defined(__SGI_STL_PORT)
+        using ::locale;
+    #endif
+} // namespace std
+#endif
+
+#include <boost/type_traits/is_floating_point.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/limits.hpp>
+#include <boost/integer.hpp>
+#include <boost/io/ios_state.hpp>
+#include <boost/scoped_ptr.hpp>
+#include <boost/serialization/throw_exception.hpp>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/archive/basic_streambuf_locale_saver.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost {
+namespace archive {
+
+/////////////////////////////////////////////////////////////////////////
+// class basic_text_oprimitive - output of prmitives to stream
+template<class OStream>
+class BOOST_SYMBOL_VISIBLE basic_text_oprimitive
+{
+protected:
+    OStream &os;
+    io::ios_flags_saver flags_saver;
+    io::ios_precision_saver precision_saver;
+
+    #ifndef BOOST_NO_STD_LOCALE
+    pdalboost::scoped_ptr<std::locale> archive_locale;
+    basic_streambuf_locale_saver<
+        typename OStream::char_type, 
+        typename OStream::traits_type
+    > locale_saver;
+    #endif
+
+    /////////////////////////////////////////////////////////
+    // fundamental types that need special treatment
+    void save(const bool t){
+        // trap usage of invalid uninitialized boolean which would
+        // otherwise crash on load.
+        BOOST_ASSERT(0 == static_cast<int>(t) || 1 == static_cast<int>(t));
+        if(os.fail())
+            pdalboost::serialization::throw_exception(
+                archive_exception(archive_exception::output_stream_error)
+            );
+        os << t;
+    }
+    void save(const signed char t)
+    {
+        save(static_cast<short int>(t));
+    }
+    void save(const unsigned char t)
+    {
+        save(static_cast<short unsigned int>(t));
+    }
+    void save(const char t)
+    {
+        save(static_cast<short int>(t));
+    }
+    #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+    void save(const wchar_t t)
+    {
+        BOOST_STATIC_ASSERT(sizeof(wchar_t) <= sizeof(int));
+        save(static_cast<int>(t));
+    }
+    #endif
+
+    /////////////////////////////////////////////////////////
+    // saving of any types not listed above
+
+    template<class T>
+    void save_impl(const T &t, pdalboost::mpl::bool_<false> &){
+        if(os.fail())
+            pdalboost::serialization::throw_exception(
+                archive_exception(archive_exception::output_stream_error)
+            );
+        os << t;
+    }
+
+    /////////////////////////////////////////////////////////
+    // floating point types need even more special treatment
+    // the following determines whether the type T is some sort
+    // of floating point type.  Note that we then assume that
+    // the stream << operator is defined on that type - if not
+    // we'll get a compile time error. This is meant to automatically
+    // support synthesized types which support floating point
+    // operations. Also it should handle compiler dependent types
+    // such long double.  Due to John Maddock.
+
+    template<class T>
+    struct is_float {
+        typedef typename mpl::bool_< 
+            pdalboost::is_floating_point<T>::value 
+            || (std::numeric_limits<T>::is_specialized
+            && !std::numeric_limits<T>::is_integer
+            && !std::numeric_limits<T>::is_exact
+            && std::numeric_limits<T>::max_exponent) 
+        >::type type;
+    };
+
+    template<class T>
+    void save_impl(const T &t, pdalboost::mpl::bool_<true> &){
+        // must be a user mistake - can't serialize un-initialized data
+        if(os.fail())
+            pdalboost::serialization::throw_exception(
+                archive_exception(archive_exception::output_stream_error)
+            );
+        // The formulae for the number of decimla digits required is given in
+        // http://www2.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1822.pdf
+        // which is derived from Kahan's paper:
+        // www.eecs.berkeley.edu/~wkahan/ieee754status/ieee754.ps
+        // const unsigned int digits = (std::numeric_limits<T>::digits * 3010) / 10000;
+        // note: I've commented out the above because I didn't get good results.  e.g.
+        // in one case I got a difference of 19 units.
+        #ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
+            const unsigned int digits = std::numeric_limits<T>::max_digits10;
+        #else
+            const unsigned int digits = std::numeric_limits<T>::digits10 + 2;
+        #endif
+        os << std::setprecision(digits) << std::scientific << t;
+    }
+
+    template<class T>
+    void save(const T & t){
+        pdalboost::io::ios_flags_saver fs(os);
+        pdalboost::io::ios_precision_saver ps(os);
+        typename is_float<T>::type tf;
+        save_impl(t, tf);
+    }
+
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL
+    basic_text_oprimitive(OStream & os, bool no_codecvt);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL 
+    ~basic_text_oprimitive();
+public:
+    // unformatted append of one character
+    void put(typename OStream::char_type c){
+        if(os.fail())
+            pdalboost::serialization::throw_exception(
+                archive_exception(archive_exception::output_stream_error)
+            );
+        os.put(c);
+    }
+    // unformatted append of null terminated string
+    void put(const char * s){
+        while('\0' != *s)
+            os.put(*s++);
+    }
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void 
+    save_binary(const void *address, std::size_t count);
+};
+
+} //namespace pdalboost 
+} //namespace archive 
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_TEXT_OPRIMITIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/basic_xml_archive.hpp b/vendor/pdalboost/boost/archive/basic_xml_archive.hpp
new file mode 100644
index 0000000..9e44ee7
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/basic_xml_archive.hpp
@@ -0,0 +1,67 @@
+#ifndef BOOST_ARCHIVE_BASIC_XML_TEXT_ARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_XML_TEXT_ARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_archive.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/archive/archive_exception.hpp>
+
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost { 
+namespace archive {
+
+// constant strings used in xml i/o
+
+extern 
+BOOST_ARCHIVE_DECL const char *
+BOOST_ARCHIVE_XML_OBJECT_ID();
+
+extern 
+BOOST_ARCHIVE_DECL const char *
+BOOST_ARCHIVE_XML_OBJECT_REFERENCE();
+
+extern 
+BOOST_ARCHIVE_DECL const char *
+BOOST_ARCHIVE_XML_CLASS_ID();
+
+extern 
+BOOST_ARCHIVE_DECL const char *
+BOOST_ARCHIVE_XML_CLASS_ID_REFERENCE();
+
+extern 
+BOOST_ARCHIVE_DECL const char *
+BOOST_ARCHIVE_XML_CLASS_NAME();
+
+extern 
+BOOST_ARCHIVE_DECL const char *
+BOOST_ARCHIVE_XML_TRACKING();
+
+extern 
+BOOST_ARCHIVE_DECL const char *
+BOOST_ARCHIVE_XML_VERSION();
+
+extern 
+BOOST_ARCHIVE_DECL const char *
+BOOST_ARCHIVE_XML_SIGNATURE();
+
+}// namespace archive
+}// namespace pdalboost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_XML_TEXT_ARCHIVE_HPP
+
diff --git a/vendor/pdalboost/boost/archive/basic_xml_iarchive.hpp b/vendor/pdalboost/boost/archive/basic_xml_iarchive.hpp
new file mode 100644
index 0000000..006bad6
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/basic_xml_iarchive.hpp
@@ -0,0 +1,128 @@
+#ifndef BOOST_ARCHIVE_BASIC_XML_IARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_XML_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/archive/detail/common_iarchive.hpp>
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/string.hpp>
+
+#include <boost/mpl/assert.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
+/////////////////////////////////////////////////////////////////////////
+// class xml_iarchive - read serialized objects from a input text stream
+template<class Archive>
+class BOOST_SYMBOL_VISIBLE basic_xml_iarchive :
+    public detail::common_iarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+    #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+        // for some inexplicable reason insertion of "class" generates compile erro
+        // on msvc 7.1
+        friend detail::interface_iarchive<Archive>;
+    #else
+        friend class detail::interface_iarchive<Archive>;
+    #endif
+#endif
+    unsigned int depth;
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    load_start(const char *name);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    load_end(const char *name);
+
+    // Anything not an attribute and not a name-value pair is an
+    // should be trapped here.
+    template<class T>
+    void load_override(T & t)
+    {
+        // If your program fails to compile here, its most likely due to
+        // not specifying an nvp wrapper around the variable to
+        // be serialized.
+        BOOST_MPL_ASSERT((serialization::is_wrapper< T >));
+        this->detail_common_iarchive::load_override(t);
+    }
+
+    // Anything not an attribute - see below - should be a name value
+    // pair and be processed here
+    typedef detail::common_iarchive<Archive> detail_common_iarchive;
+    template<class T>
+    void load_override(
+        const pdalboost::serialization::nvp< T > & t
+    ){
+        this->This()->load_start(t.name());
+        this->detail_common_iarchive::load_override(t.value());
+        this->This()->load_end(t.name());
+    }
+
+    // specific overrides for attributes - handle as
+    // primitives. These are not name-value pairs
+    // so they have to be intercepted here and passed on to load.
+    // although the class_id is included in the xml text file in order
+    // to make the file self describing, it isn't used when loading
+    // an xml archive.  So we can skip it here.  Note: we MUST override
+    // it otherwise it will be loaded as a normal primitive w/o tag and
+    // leaving the archive in an undetermined state
+    void load_override(class_id_optional_type & /* t */){}
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    load_override(object_id_type & t);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    load_override(version_type & t);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    load_override(class_id_type & t);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    load_override(tracking_type & t);
+    // class_name_type can't be handled here as it depends upon the
+    // char type used by the stream.  So require the derived implementation
+    // handle this.
+    // void load_override(class_name_type & t);
+
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL
+    basic_xml_iarchive(unsigned int flags);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL
+    ~basic_xml_iarchive();
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_XML_IARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/basic_xml_oarchive.hpp b/vendor/pdalboost/boost/archive/basic_xml_oarchive.hpp
new file mode 100644
index 0000000..99d012d
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/basic_xml_oarchive.hpp
@@ -0,0 +1,147 @@
+#ifndef BOOST_ARCHIVE_BASIC_XML_OARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_XML_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/archive/detail/common_oarchive.hpp>
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/string.hpp>
+
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_oarchive;
+} // namespace detail
+
+//////////////////////////////////////////////////////////////////////
+// class basic_xml_oarchive - write serialized objects to a xml output stream
+template<class Archive>
+class BOOST_SYMBOL_VISIBLE basic_xml_oarchive :
+    public detail::common_oarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+#endif
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+    // for some inexplicable reason insertion of "class" generates compile erro
+    // on msvc 7.1
+    friend detail::interface_oarchive<Archive>;
+#else
+    friend class detail::interface_oarchive<Archive>;
+#endif
+    friend class save_access;
+    // special stuff for xml output
+    unsigned int depth;
+    bool indent_next;
+    bool pending_preamble;
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    indent();
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    init();
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    write_attribute(
+        const char *attribute_name,
+        int t,
+        const char *conjunction = "=\""
+    );
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    write_attribute(
+        const char *attribute_name,
+        const char *key
+    );
+    // helpers used below
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    save_start(const char *name);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    save_end(const char *name);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    end_preamble();
+
+    // Anything not an attribute and not a name-value pair is an
+    // error and should be trapped here.
+    template<class T>
+    void save_override(T & t)
+    {
+        // If your program fails to compile here, its most likely due to
+        // not specifying an nvp wrapper around the variable to
+        // be serialized.
+        BOOST_MPL_ASSERT((serialization::is_wrapper< T >));
+        this->detail_common_oarchive::save_override(t);
+    }
+
+    // special treatment for name-value pairs.
+    typedef detail::common_oarchive<Archive> detail_common_oarchive;
+    template<class T>
+    void save_override(
+        const ::pdalboost::serialization::nvp< T > & t
+    ){
+        this->This()->save_start(t.name());
+        this->detail_common_oarchive::save_override(t.const_value());
+        this->This()->save_end(t.name());
+    }
+
+    // specific overrides for attributes - not name value pairs so we
+    // want to trap them before the above "fall through"
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    save_override(const object_id_type & t);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    save_override(const object_reference_type & t);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    save_override(const version_type & t);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    save_override(const class_id_type & t);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    save_override(const class_id_optional_type & t);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    save_override(const class_id_reference_type & t);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    save_override(const class_name_type & t);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+    save_override(const tracking_type & t);
+
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL
+    basic_xml_oarchive(unsigned int flags);
+    BOOST_ARCHIVE_OR_WARCHIVE_DECL
+    ~basic_xml_oarchive();
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_XML_OARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/binary_iarchive.hpp b/vendor/pdalboost/boost/archive/binary_iarchive.hpp
new file mode 100644
index 0000000..280f0bc
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/binary_iarchive.hpp
@@ -0,0 +1,64 @@
+#ifndef BOOST_ARCHIVE_BINARY_IARCHIVE_HPP
+#define BOOST_ARCHIVE_BINARY_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <istream>
+#include <boost/archive/binary_iarchive_impl.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace archive {
+
+// do not derive from this class.  If you want to extend this functionality
+// via inhertance, derived from binary_iarchive_impl instead.  This will
+// preserve correct static polymorphism.
+class BOOST_SYMBOL_VISIBLE binary_iarchive :
+    public binary_iarchive_impl<
+        pdalboost::archive::binary_iarchive, 
+        std::istream::char_type, 
+        std::istream::traits_type
+    >{
+public:
+    binary_iarchive(std::istream & is, unsigned int flags = 0) :
+        binary_iarchive_impl<
+            binary_iarchive, std::istream::char_type, std::istream::traits_type
+        >(is, flags)
+    {}
+    binary_iarchive(std::streambuf & bsb, unsigned int flags = 0) :
+        binary_iarchive_impl<
+            binary_iarchive, std::istream::char_type, std::istream::traits_type
+        >(bsb, flags)
+    {}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(pdalboost::archive::binary_iarchive)
+BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(pdalboost::archive::binary_iarchive)
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_ARCHIVE_BINARY_IARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/binary_iarchive_impl.hpp b/vendor/pdalboost/boost/archive/binary_iarchive_impl.hpp
new file mode 100644
index 0000000..6859b36
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/binary_iarchive_impl.hpp
@@ -0,0 +1,104 @@
+#ifndef BOOST_ARCHIVE_BINARY_IARCHIVE_IMPL_HPP
+#define BOOST_ARCHIVE_BINARY_IARCHIVE_IMPL_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_iarchive_impl.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <istream>
+#include <boost/archive/basic_binary_iprimitive.hpp>
+#include <boost/archive/basic_binary_iarchive.hpp>
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost { 
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
+template<class Archive, class Elem, class Tr>
+class binary_iarchive_impl : 
+    public basic_binary_iprimitive<Archive, Elem, Tr>,
+    public basic_binary_iarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+    #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+        // for some inexplicable reason insertion of "class" generates compile erro
+        // on msvc 7.1
+        friend detail::interface_iarchive<Archive>;
+        friend basic_binary_iarchive<Archive>;
+        friend load_access;
+    #else
+        friend class detail::interface_iarchive<Archive>;
+        friend class basic_binary_iarchive<Archive>;
+        friend class load_access;
+    #endif
+#endif
+    template<class T>
+    void load_override(T & t){
+        this->basic_binary_iarchive<Archive>::load_override(t);
+    }
+    void init(unsigned int flags){
+        if(0 != (flags & no_header))
+            return;
+        #if ! defined(__MWERKS__)
+            this->basic_binary_iarchive<Archive>::init();
+            this->basic_binary_iprimitive<Archive, Elem, Tr>::init();
+        #else
+            basic_binary_iarchive<Archive>::init();
+            basic_binary_iprimitive<Archive, Elem, Tr>::init();
+        #endif
+    }
+    binary_iarchive_impl(
+        std::basic_streambuf<Elem, Tr> & bsb, 
+        unsigned int flags
+    ) :
+        basic_binary_iprimitive<Archive, Elem, Tr>(
+            bsb, 
+            0 != (flags & no_codecvt)
+        ),
+        basic_binary_iarchive<Archive>(flags)
+    {
+        init(flags);
+    }
+    binary_iarchive_impl(
+        std::basic_istream<Elem, Tr> & is, 
+        unsigned int flags
+    ) :
+        basic_binary_iprimitive<Archive, Elem, Tr>(
+            * is.rdbuf(), 
+            0 != (flags & no_codecvt)
+        ),
+        basic_binary_iarchive<Archive>(flags)
+    {
+        init(flags);
+    }
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_ARCHIVE_BINARY_IARCHIVE_IMPL_HPP
diff --git a/vendor/pdalboost/boost/archive/binary_oarchive.hpp b/vendor/pdalboost/boost/archive/binary_oarchive.hpp
new file mode 100644
index 0000000..62fd950
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/binary_oarchive.hpp
@@ -0,0 +1,64 @@
+#ifndef BOOST_ARCHIVE_BINARY_OARCHIVE_HPP
+#define BOOST_ARCHIVE_BINARY_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <ostream>
+#include <boost/config.hpp>
+#include <boost/archive/binary_oarchive_impl.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost { 
+namespace archive {
+
+// do not derive from this class.  If you want to extend this functionality
+// via inhertance, derived from binary_oarchive_impl instead.  This will
+// preserve correct static polymorphism.
+class BOOST_SYMBOL_VISIBLE binary_oarchive : 
+    public binary_oarchive_impl<
+        binary_oarchive, std::ostream::char_type, std::ostream::traits_type
+    >
+{
+public:
+    binary_oarchive(std::ostream & os, unsigned int flags = 0) :
+        binary_oarchive_impl<
+            binary_oarchive, std::ostream::char_type, std::ostream::traits_type
+        >(os, flags)
+    {}
+    binary_oarchive(std::streambuf & bsb, unsigned int flags = 0) :
+        binary_oarchive_impl<
+            binary_oarchive, std::ostream::char_type, std::ostream::traits_type
+        >(bsb, flags)
+    {}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(pdalboost::archive::binary_oarchive)
+BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(pdalboost::archive::binary_oarchive)
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_ARCHIVE_BINARY_OARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/binary_oarchive_impl.hpp b/vendor/pdalboost/boost/archive/binary_oarchive_impl.hpp
new file mode 100644
index 0000000..c2df5f1
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/binary_oarchive_impl.hpp
@@ -0,0 +1,105 @@
+#ifndef BOOST_ARCHIVE_BINARY_OARCHIVE_IMPL_HPP
+#define BOOST_ARCHIVE_BINARY_OARCHIVE_IMPL_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_oarchive_impl.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <ostream>
+#include <boost/config.hpp>
+#include <boost/archive/basic_binary_oprimitive.hpp>
+#include <boost/archive/basic_binary_oarchive.hpp>
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost { 
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_oarchive;
+} // namespace detail
+
+template<class Archive, class Elem, class Tr>
+class binary_oarchive_impl : 
+    public basic_binary_oprimitive<Archive, Elem, Tr>,
+    public basic_binary_oarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+    #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+        // for some inexplicable reason insertion of "class" generates compile erro
+        // on msvc 7.1
+        friend detail::interface_oarchive<Archive>;
+        friend basic_binary_oarchive<Archive>;
+        friend save_access;
+    #else
+        friend class detail::interface_oarchive<Archive>;
+        friend class basic_binary_oarchive<Archive>;
+        friend class save_access;
+    #endif
+#endif
+    template<class T>
+    void save_override(T & t){
+        this->basic_binary_oarchive<Archive>::save_override(t);
+    }
+    void init(unsigned int flags) {
+        if(0 != (flags & no_header))
+            return;
+        #if ! defined(__MWERKS__)
+            this->basic_binary_oarchive<Archive>::init();
+            this->basic_binary_oprimitive<Archive, Elem, Tr>::init();
+        #else
+            basic_binary_oarchive<Archive>::init();
+            basic_binary_oprimitive<Archive, Elem, Tr>::init();
+        #endif
+    }
+    binary_oarchive_impl(
+        std::basic_streambuf<Elem, Tr> & bsb, 
+        unsigned int flags
+    ) :
+        basic_binary_oprimitive<Archive, Elem, Tr>(
+            bsb, 
+            0 != (flags & no_codecvt)
+        ),
+        basic_binary_oarchive<Archive>(flags)
+    {
+        init(flags);
+    }
+    binary_oarchive_impl(
+        std::basic_ostream<Elem, Tr> & os, 
+        unsigned int flags
+    ) :
+        basic_binary_oprimitive<Archive, Elem, Tr>(
+            * os.rdbuf(), 
+            0 != (flags & no_codecvt)
+        ),
+        basic_binary_oarchive<Archive>(flags)
+    {
+        init(flags);
+    }
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_ARCHIVE_BINARY_OARCHIVE_IMPL_HPP
diff --git a/vendor/pdalboost/boost/archive/binary_wiarchive.hpp b/vendor/pdalboost/boost/archive/binary_wiarchive.hpp
new file mode 100644
index 0000000..b15f155
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/binary_wiarchive.hpp
@@ -0,0 +1,56 @@
+#ifndef BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP
+#define BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_wiarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <istream> // wistream
+#include <boost/archive/binary_iarchive_impl.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+
+namespace pdalboost { 
+namespace archive {
+
+class binary_wiarchive : 
+    public binary_iarchive_impl<
+        binary_wiarchive, std::wistream::char_type, std::wistream::traits_type
+    >
+{
+public:
+    binary_wiarchive(std::wistream & is, unsigned int flags = 0) :
+        binary_iarchive_impl<
+            binary_wiarchive, std::wistream::char_type, std::wistream::traits_type
+        >(is, flags)
+    {}
+    binary_wiarchive(std::wstreambuf & bsb, unsigned int flags = 0) :
+        binary_iarchive_impl<
+            binary_wiarchive, std::wistream::char_type, std::wistream::traits_type
+        >(bsb, flags)
+    {}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(pdalboost::archive::binary_wiarchive)
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/binary_woarchive.hpp b/vendor/pdalboost/boost/archive/binary_woarchive.hpp
new file mode 100644
index 0000000..079a8c2
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/binary_woarchive.hpp
@@ -0,0 +1,59 @@
+#ifndef BOOST_ARCHIVE_BINARY_WOARCHIVE_HPP
+#define BOOST_ARCHIVE_BINARY_WOARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_woarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <ostream>
+#include <boost/archive/binary_oarchive_impl.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+
+namespace pdalboost { 
+namespace archive {
+
+// do not derive from this class.  If you want to extend this functionality
+// via inhertance, derived from binary_oarchive_impl instead.  This will
+// preserve correct static polymorphism.
+class binary_woarchive : 
+    public binary_oarchive_impl<
+            binary_woarchive, std::wostream::char_type, std::wostream::traits_type
+        >
+{
+public:
+    binary_woarchive(std::wostream & os, unsigned int flags = 0) :
+        binary_oarchive_impl<
+            binary_woarchive, std::wostream::char_type, std::wostream::traits_type
+        >(os, flags)
+    {}
+    binary_woarchive(std::wstreambuf & bsb, unsigned int flags = 0) :
+        binary_oarchive_impl<
+            binary_woarchive, std::wostream::char_type, std::wostream::traits_type
+        >(bsb, flags)
+    {}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(pdalboost::archive::binary_woarchive)
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_BINARY_WOARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/codecvt_null.hpp b/vendor/pdalboost/boost/archive/codecvt_null.hpp
new file mode 100644
index 0000000..b310ef1
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/codecvt_null.hpp
@@ -0,0 +1,104 @@
+#ifndef BOOST_ARCHIVE_CODECVT_NULL_HPP
+#define BOOST_ARCHIVE_CODECVT_NULL_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// codecvt_null.hpp:
+
+// (C) Copyright 2004 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <locale>
+#include <cstddef> // NULL, size_t
+#include <cwchar>   // for mbstate_t
+#include <boost/config.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std {
+// For STLport on WinCE, BOOST_NO_STDC_NAMESPACE can get defined if STLport is putting symbols in its own namespace.
+// In the case of codecvt, however, this does not mean that codecvt is in the global namespace (it will be in STLport's namespace)
+#  if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+    using ::codecvt;
+#  endif
+    using ::mbstate_t;
+    using ::size_t;
+} // namespace
+#endif
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace archive {
+
+template<class Ch>
+class codecvt_null;
+
+template<>
+class codecvt_null<char> : public std::codecvt<char, char, std::mbstate_t>
+{
+    virtual bool do_always_noconv() const throw() {
+        return true;
+    }
+public:
+    explicit codecvt_null(std::size_t no_locale_manage = 0) :
+        std::codecvt<char, char, std::mbstate_t>(no_locale_manage)
+    {}
+};
+
+template<>
+class codecvt_null<wchar_t> : public std::codecvt<wchar_t, char, std::mbstate_t>
+{
+    virtual BOOST_WARCHIVE_DECL std::codecvt_base::result
+    do_out(
+        std::mbstate_t & state,
+        const wchar_t * first1,
+        const wchar_t * last1,
+        const wchar_t * & next1,
+        char * first2,
+        char * last2,
+        char * & next2
+    ) const;
+    virtual BOOST_WARCHIVE_DECL std::codecvt_base::result
+    do_in(
+        std::mbstate_t & state,
+        const char * first1,
+        const char * last1,
+        const char * & next1,
+        wchar_t * first2,
+        wchar_t * last2,
+        wchar_t * & next2
+    ) const;
+    virtual int do_encoding( ) const throw( ){
+        return sizeof(wchar_t) / sizeof(char);
+    }
+    virtual int do_max_length( ) const throw( ){
+        return do_encoding();
+    }
+public:
+    explicit codecvt_null(std::size_t no_locale_manage = 0) :
+        std::codecvt<wchar_t, char, std::mbstate_t>(no_locale_manage)
+    {}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#  pragma warning(pop)
+#endif
+#include <boost/archive/detail/abi_suffix.hpp> // pop pragmas
+
+#endif //BOOST_ARCHIVE_CODECVT_NULL_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/abi_prefix.hpp b/vendor/pdalboost/boost/archive/detail/abi_prefix.hpp
new file mode 100644
index 0000000..debf79e
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/abi_prefix.hpp
@@ -0,0 +1,16 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// abi_prefix.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config/abi_prefix.hpp> // must be the last header
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4251 4231 4660 4275)
+#endif
+
diff --git a/vendor/pdalboost/boost/archive/detail/abi_suffix.hpp b/vendor/pdalboost/boost/archive/detail/abi_suffix.hpp
new file mode 100644
index 0000000..4e054d6
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/abi_suffix.hpp
@@ -0,0 +1,15 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// abi_suffix.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
diff --git a/vendor/pdalboost/boost/archive/detail/archive_serializer_map.hpp b/vendor/pdalboost/boost/archive/detail/archive_serializer_map.hpp
new file mode 100644
index 0000000..32e529f
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/archive_serializer_map.hpp
@@ -0,0 +1,54 @@
+#ifndef BOOST_ARCHIVE_SERIALIZER_MAP_HPP
+#define BOOST_ARCHIVE_SERIALIZER_MAP_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// archive_serializer_map.hpp: extenstion of type_info required for 
+// serialization.
+
+// (C) Copyright 2009 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// note: this is nothing more than the thinest of wrappers around
+// basic_serializer_map so we can have a one map / archive type. 
+
+#include <boost/config.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost {
+
+namespace serialization {
+    class extended_type_info;
+} // namespace serialization
+
+namespace archive {
+namespace detail {
+
+class basic_serializer;
+
+template<class Archive>
+class BOOST_SYMBOL_VISIBLE archive_serializer_map {
+public:
+    static BOOST_ARCHIVE_OR_WARCHIVE_DECL bool insert(const basic_serializer * bs);
+    static BOOST_ARCHIVE_OR_WARCHIVE_DECL void erase(const basic_serializer * bs);
+    static BOOST_ARCHIVE_OR_WARCHIVE_DECL const basic_serializer * find(
+        const pdalboost::serialization::extended_type_info & type_
+    );
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
+
+#include <boost/archive/detail/abi_suffix.hpp> // must be the last header
+
+#endif //BOOST_ARCHIVE_SERIALIZER_MAP_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/auto_link_archive.hpp b/vendor/pdalboost/boost/archive/detail/auto_link_archive.hpp
new file mode 100644
index 0000000..de2e209
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/auto_link_archive.hpp
@@ -0,0 +1,48 @@
+#ifndef BOOST_ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP
+#define BOOST_ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+//  auto_link_archive.hpp
+//
+//  (c) Copyright Robert Ramey 2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/serialization
+
+//----------------------------------------------------------------------------// 
+
+// This header implements separate compilation features as described in
+// http://www.boost.org/more/separate_compilation.html
+
+//  enable automatic library variant selection  ------------------------------// 
+
+#include <boost/archive/detail/decl.hpp>
+
+#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_SERIALIZATION_NO_LIB) \
+&&  !defined(BOOST_ARCHIVE_SOURCE) && !defined(BOOST_WARCHIVE_SOURCE)  \
+&&  !defined(BOOST_SERIALIZATION_SOURCE)
+
+    // Set the name of our library, this will get undef'ed by auto_link.hpp
+    // once it's done with it:
+    //
+    #define BOOST_LIB_NAME pdalboost_serialization
+    //
+    // If we're importing code from a dll, then tell auto_link.hpp about it:
+    //
+    #if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK)
+    #  define BOOST_DYN_LINK
+    #endif
+    //
+    // And include the header that does the work:
+    //
+    #include <boost/config/auto_link.hpp>
+#endif  // auto-linking disabled
+
+#endif // BOOST_ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/auto_link_warchive.hpp b/vendor/pdalboost/boost/archive/detail/auto_link_warchive.hpp
new file mode 100644
index 0000000..e7e08fa
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/auto_link_warchive.hpp
@@ -0,0 +1,47 @@
+#ifndef BOOST_ARCHIVE_DETAIL_AUTO_LINK_WARCHIVE_HPP
+#define BOOST_ARCHIVE_DETAIL_AUTO_LINK_WARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+//  auto_link_warchive.hpp
+//
+//  (c) Copyright Robert Ramey 2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/serialization
+
+//----------------------------------------------------------------------------// 
+
+// This header implements separate compilation features as described in
+// http://www.boost.org/more/separate_compilation.html
+
+//  enable automatic library variant selection  ------------------------------// 
+
+#include <boost/archive/detail/decl.hpp>
+
+#if !defined(BOOST_WARCHIVE_SOURCE) \
+&& !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_SERIALIZATION_NO_LIB)
+
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#define BOOST_LIB_NAME pdalboost_wserialization
+//
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+//
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK)
+#  define BOOST_DYN_LINK
+#endif
+//
+// And include the header that does the work:
+//
+#include <boost/config/auto_link.hpp>
+#endif  // auto-linking disabled
+
+#endif // ARCHIVE_DETAIL_AUTO_LINK_ARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/basic_iarchive.hpp b/vendor/pdalboost/boost/archive/detail/basic_iarchive.hpp
new file mode 100644
index 0000000..4e17b71
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/basic_iarchive.hpp
@@ -0,0 +1,105 @@
+#ifndef BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP
+#define BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_iarchive.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// can't use this - much as I'd like to as borland doesn't support it
+
+#include <boost/config.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/scoped_ptr.hpp>
+
+#include <boost/serialization/tracking_enum.hpp>
+#include <boost/archive/basic_archive.hpp>
+#include <boost/archive/detail/decl.hpp>
+#include <boost/archive/detail/helper_collection.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost {
+namespace serialization {
+    class extended_type_info;
+} // namespace serialization
+
+namespace archive {
+namespace detail {
+
+class basic_iarchive_impl;
+class basic_iserializer;
+class basic_pointer_iserializer;
+
+//////////////////////////////////////////////////////////////////////
+// class basic_iarchive - read serialized objects from a input stream
+class BOOST_SYMBOL_VISIBLE basic_iarchive :
+    private pdalboost::noncopyable,
+    public pdalboost::archive::detail::helper_collection
+{
+    friend class basic_iarchive_impl;
+    // hide implementation of this class to minimize header conclusion
+    pdalboost::scoped_ptr<basic_iarchive_impl> pimpl;
+
+    virtual void vload(version_type &t) =  0;
+    virtual void vload(object_id_type &t) =  0;
+    virtual void vload(class_id_type &t) =  0;
+    virtual void vload(class_id_optional_type &t) = 0;
+    virtual void vload(class_name_type &t) = 0;
+    virtual void vload(tracking_type &t) = 0;
+protected:
+    BOOST_ARCHIVE_DECL basic_iarchive(unsigned int flags);
+    pdalboost::archive::detail::helper_collection &
+    get_helper_collection(){
+        return *this;
+    }
+public:
+    // some msvc versions require that the following function be public
+    // otherwise it should really protected.
+    virtual BOOST_ARCHIVE_DECL ~basic_iarchive();
+    // note: NOT part of the public API.
+    BOOST_ARCHIVE_DECL void next_object_pointer(void *t);
+    BOOST_ARCHIVE_DECL void register_basic_serializer(
+        const basic_iserializer & bis
+    );
+    BOOST_ARCHIVE_DECL void load_object(
+        void *t, 
+        const basic_iserializer & bis
+    );
+    BOOST_ARCHIVE_DECL const basic_pointer_iserializer * 
+    load_pointer(
+        void * & t, 
+        const basic_pointer_iserializer * bpis_ptr,
+        const basic_pointer_iserializer * (*finder)(
+            const pdalboost::serialization::extended_type_info & eti
+        )
+    );
+    // real public API starts here
+    BOOST_ARCHIVE_DECL void 
+    set_library_version(library_version_type archive_library_version);
+    BOOST_ARCHIVE_DECL library_version_type 
+    get_library_version() const;
+    BOOST_ARCHIVE_DECL unsigned int
+    get_flags() const;
+    BOOST_ARCHIVE_DECL void 
+    reset_object_address(const void * new_address, const void * old_address);
+    BOOST_ARCHIVE_DECL void 
+    delete_created_pointers();
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif //BOOST_ARCHIVE_DETAIL_BASIC_IARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/basic_iserializer.hpp b/vendor/pdalboost/boost/archive/detail/basic_iserializer.hpp
new file mode 100644
index 0000000..3ff5515
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/basic_iserializer.hpp
@@ -0,0 +1,91 @@
+#ifndef BOOST_ARCHIVE_DETAIL_BASIC_ISERIALIZER_HPP
+#define BOOST_ARCHIVE_DETAIL_BASIC_ISERIALIZER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_iserializer.hpp: extenstion of type_info required for serialization.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstdlib> // NULL
+#include <boost/config.hpp>
+
+#include <boost/archive/basic_archive.hpp>
+#include <boost/archive/detail/decl.hpp>
+#include <boost/archive/detail/basic_serializer.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace serialization {
+    class extended_type_info;
+} // namespace serialization
+
+// forward declarations
+namespace archive {
+namespace detail {
+
+class basic_iarchive;
+class basic_pointer_iserializer;
+
+class BOOST_SYMBOL_VISIBLE basic_iserializer : 
+    public basic_serializer
+{
+private:
+    basic_pointer_iserializer *m_bpis;
+protected:
+    explicit BOOST_ARCHIVE_DECL basic_iserializer(
+        const pdalboost::serialization::extended_type_info & type
+    );
+    virtual BOOST_ARCHIVE_DECL ~basic_iserializer();
+public:
+    bool serialized_as_pointer() const {
+        return m_bpis != NULL;
+    }
+    void set_bpis(basic_pointer_iserializer *bpis){
+        m_bpis = bpis;
+    }
+    const basic_pointer_iserializer * get_bpis_ptr() const {
+        return m_bpis;
+    }
+    virtual void load_object_data(
+        basic_iarchive & ar, 
+        void *x,
+        const unsigned int file_version
+    ) const = 0;
+    // returns true if class_info should be saved
+    virtual bool class_info() const = 0 ;
+    // returns true if objects should be tracked
+    virtual bool tracking(const unsigned int) const = 0 ;
+    // returns class version
+    virtual version_type version() const = 0 ;
+    // returns true if this class is polymorphic
+    virtual bool is_polymorphic() const = 0;
+    virtual void destroy(/*const*/ void *address) const = 0 ;
+};
+
+} // namespae detail
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_DETAIL_BASIC_ISERIALIZER_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/basic_oarchive.hpp b/vendor/pdalboost/boost/archive/detail/basic_oarchive.hpp
new file mode 100644
index 0000000..6a8e6bc
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/basic_oarchive.hpp
@@ -0,0 +1,94 @@
+#ifndef BOOST_ARCHIVE_BASIC_OARCHIVE_HPP
+#define BOOST_ARCHIVE_BASIC_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_oarchive.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // NULL
+#include <boost/config.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/scoped_ptr.hpp>
+
+#include <boost/archive/basic_archive.hpp>
+#include <boost/serialization/tracking_enum.hpp>
+#include <boost/archive/detail/helper_collection.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost {
+namespace serialization {
+    class extended_type_info;
+} // namespace serialization
+
+namespace archive {
+namespace detail {
+
+class basic_oarchive_impl;
+class basic_oserializer;
+class basic_pointer_oserializer;
+
+//////////////////////////////////////////////////////////////////////
+// class basic_oarchive - write serialized objects to an output stream
+class BOOST_SYMBOL_VISIBLE basic_oarchive :
+    private pdalboost::noncopyable,
+    public pdalboost::archive::detail::helper_collection
+{
+    friend class basic_oarchive_impl;
+    // hide implementation of this class to minimize header conclusion
+    pdalboost::scoped_ptr<basic_oarchive_impl> pimpl;
+
+    // overload these to bracket object attributes. Used to implement
+    // xml archives
+    virtual void vsave(const version_type t) =  0;
+    virtual void vsave(const object_id_type t) =  0;
+    virtual void vsave(const object_reference_type t) =  0;
+    virtual void vsave(const class_id_type t) =  0;
+    virtual void vsave(const class_id_optional_type t) = 0;
+    virtual void vsave(const class_id_reference_type t) =  0;
+    virtual void vsave(const class_name_type & t) = 0;
+    virtual void vsave(const tracking_type t) = 0;
+protected:
+    BOOST_ARCHIVE_DECL basic_oarchive(unsigned int flags = 0);
+    BOOST_ARCHIVE_DECL pdalboost::archive::detail::helper_collection &
+    get_helper_collection();
+    virtual BOOST_ARCHIVE_DECL ~basic_oarchive();
+public:
+    // note: NOT part of the public interface
+    BOOST_ARCHIVE_DECL void register_basic_serializer(
+        const basic_oserializer & bos
+    );
+    BOOST_ARCHIVE_DECL void save_object(
+        const void *x, 
+        const basic_oserializer & bos
+    );
+    BOOST_ARCHIVE_DECL void save_pointer(
+        const void * t, 
+        const basic_pointer_oserializer * bpos_ptr
+    );
+    void save_null_pointer(){
+        vsave(NULL_POINTER_TAG);
+    }
+    // real public interface starts here
+    BOOST_ARCHIVE_DECL void end_preamble(); // default implementation does nothing
+    BOOST_ARCHIVE_DECL library_version_type get_library_version() const;
+    BOOST_ARCHIVE_DECL unsigned int get_flags() const;
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif //BOOST_ARCHIVE_BASIC_OARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/basic_oserializer.hpp b/vendor/pdalboost/boost/archive/detail/basic_oserializer.hpp
new file mode 100644
index 0000000..ff165d2
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/basic_oserializer.hpp
@@ -0,0 +1,89 @@
+#ifndef BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP
+#define BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_oserializer.hpp: extenstion of type_info required for serialization.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // NULL
+#include <boost/config.hpp>
+#include <boost/noncopyable.hpp>
+
+#include <boost/archive/basic_archive.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/basic_serializer.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace serialization {
+    class extended_type_info;
+} // namespace serialization
+
+// forward declarations
+namespace archive {
+namespace detail {
+
+class basic_oarchive;
+class basic_pointer_oserializer;
+
+class BOOST_SYMBOL_VISIBLE basic_oserializer :
+    public basic_serializer
+{
+private:
+    basic_pointer_oserializer *m_bpos;
+protected:
+    explicit BOOST_ARCHIVE_DECL basic_oserializer(
+        const pdalboost::serialization::extended_type_info & type_
+    );
+    virtual BOOST_ARCHIVE_DECL ~basic_oserializer();
+public:
+    bool serialized_as_pointer() const {
+        return m_bpos != NULL;
+    }
+    void set_bpos(basic_pointer_oserializer *bpos){
+        m_bpos = bpos;
+    }
+    const basic_pointer_oserializer * get_bpos() const {
+        return m_bpos;
+    }
+    virtual void save_object_data(
+        basic_oarchive & ar, const void * x
+    ) const = 0;
+    // returns true if class_info should be saved
+    virtual bool class_info() const = 0;
+    // returns true if objects should be tracked
+    virtual bool tracking(const unsigned int flags) const = 0;
+    // returns class version
+    virtual version_type version() const = 0;
+    // returns true if this class is polymorphic
+    virtual bool is_polymorphic() const = 0;
+};
+
+} // namespace detail
+} // namespace serialization
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_SERIALIZATION_BASIC_OSERIALIZER_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/basic_pointer_iserializer.hpp b/vendor/pdalboost/boost/archive/detail/basic_pointer_iserializer.hpp
new file mode 100644
index 0000000..aced020
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/basic_pointer_iserializer.hpp
@@ -0,0 +1,70 @@
+#ifndef BOOST_ARCHIVE_BASIC_POINTER_ISERIALIZER_HPP
+#define BOOST_ARCHIVE_BASIC_POINTER_ISERIALIZER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_pointer_oserializer.hpp: extenstion of type_info required for 
+// serialization.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+#include <boost/config.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/basic_serializer.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace serialization {
+    class extended_type_info;
+} // namespace serialization
+
+// forward declarations
+namespace archive {
+namespace detail {
+
+class basic_iarchive;
+class basic_iserializer;
+
+class BOOST_SYMBOL_VISIBLE basic_pointer_iserializer
+    : public basic_serializer {
+protected:
+    explicit BOOST_ARCHIVE_DECL basic_pointer_iserializer(
+        const pdalboost::serialization::extended_type_info & type_
+    );
+    virtual BOOST_ARCHIVE_DECL ~basic_pointer_iserializer();
+public:
+    virtual void * heap_allocation() const = 0;
+    virtual const basic_iserializer & get_basic_serializer() const = 0;
+    virtual void load_object_ptr(
+        basic_iarchive & ar, 
+        void * x,
+        const unsigned int file_version
+    ) const = 0;
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_POINTER_ISERIALIZER_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/basic_pointer_oserializer.hpp b/vendor/pdalboost/boost/archive/detail/basic_pointer_oserializer.hpp
new file mode 100644
index 0000000..eddc742
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/basic_pointer_oserializer.hpp
@@ -0,0 +1,68 @@
+#ifndef BOOST_ARCHIVE_BASIC_POINTER_OSERIALIZER_HPP
+#define BOOST_ARCHIVE_BASIC_POINTER_OSERIALIZER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_pointer_oserializer.hpp: extenstion of type_info required for 
+// serialization.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+#include <boost/config.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/basic_serializer.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace serialization {
+    class extended_type_info;
+} // namespace serialization
+
+namespace archive {
+namespace detail {
+
+class basic_oarchive;
+class basic_oserializer;
+
+class BOOST_SYMBOL_VISIBLE basic_pointer_oserializer : 
+    public basic_serializer
+{
+protected:
+    explicit BOOST_ARCHIVE_DECL basic_pointer_oserializer(
+        const pdalboost::serialization::extended_type_info & type_
+    );
+public:
+    virtual BOOST_ARCHIVE_DECL ~basic_pointer_oserializer();
+    virtual const basic_oserializer & get_basic_serializer() const = 0;
+    virtual void save_object_ptr(
+        basic_oarchive & ar,
+        const void * x
+    ) const = 0;
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_BASIC_POINTER_OSERIALIZER_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/basic_serializer.hpp b/vendor/pdalboost/boost/archive/detail/basic_serializer.hpp
new file mode 100644
index 0000000..234b266
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/basic_serializer.hpp
@@ -0,0 +1,79 @@
+#ifndef  BOOST_ARCHIVE_BASIC_SERIALIZER_HPP
+#define BOOST_ARCHIVE_BASIC_SERIALIZER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_serializer.hpp: extenstion of type_info required for serialization.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/assert.hpp>
+#include <cstddef> // NULL
+
+#include <boost/noncopyable.hpp>
+#include <boost/config.hpp>
+#include <boost/serialization/extended_type_info.hpp>
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+class basic_serializer : 
+    private pdalboost::noncopyable
+{
+    const pdalboost::serialization::extended_type_info * m_eti;
+protected:
+    explicit basic_serializer(
+        const pdalboost::serialization::extended_type_info & eti
+    ) : 
+        m_eti(& eti)
+    {
+        BOOST_ASSERT(NULL != & eti);
+    }
+public:
+    inline bool 
+    operator<(const basic_serializer & rhs) const {
+        // can't compare address since there can be multiple eti records
+        // for the same type in different execution modules (that is, DLLS)
+        // leave this here as a reminder not to do this!
+        // return & lhs.get_eti() < & rhs.get_eti();
+        return get_eti() < rhs.get_eti();
+    }
+    const char * get_debug_info() const {
+        return m_eti->get_debug_info();
+    }
+    const pdalboost::serialization::extended_type_info & get_eti() const {
+        return * m_eti;
+    }
+};
+
+class basic_serializer_arg : public basic_serializer {
+public:
+    basic_serializer_arg(const serialization::extended_type_info & eti) :
+        basic_serializer(eti)
+    {}
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_ARCHIVE_BASIC_SERIALIZER_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/basic_serializer_map.hpp b/vendor/pdalboost/boost/archive/detail/basic_serializer_map.hpp
new file mode 100644
index 0000000..f94b300
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/basic_serializer_map.hpp
@@ -0,0 +1,69 @@
+#ifndef  BOOST_SERIALIZER_MAP_HPP
+#define BOOST_SERIALIZER_MAP_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_serializer_map.hpp: extenstion of type_info required for serialization.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <set>
+
+#include <boost/config.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost { 
+namespace serialization {
+    class extended_type_info;
+}
+
+namespace archive {
+namespace detail {
+
+class basic_serializer;
+
+class BOOST_SYMBOL_VISIBLE
+basic_serializer_map : public
+    pdalboost::noncopyable
+{
+    struct type_info_pointer_compare
+    {
+        bool operator()(
+            const basic_serializer * lhs, const basic_serializer * rhs
+        ) const ;
+    };
+    typedef std::set<
+        const basic_serializer *, 
+        type_info_pointer_compare
+    > map_type;
+    map_type m_map;
+public:
+    BOOST_ARCHIVE_DECL bool insert(const basic_serializer * bs);
+    BOOST_ARCHIVE_DECL void erase(const basic_serializer * bs);
+    BOOST_ARCHIVE_DECL const basic_serializer * find(
+        const pdalboost::serialization::extended_type_info & type_
+    ) const;
+private:
+    // cw 8.3 requires this
+    basic_serializer_map& operator=(basic_serializer_map const&);
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
+
+#include <boost/archive/detail/abi_suffix.hpp> // must be the last header
+
+#endif // BOOST_SERIALIZER_MAP_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/check.hpp b/vendor/pdalboost/boost/archive/detail/check.hpp
new file mode 100644
index 0000000..dd28fbd
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/check.hpp
@@ -0,0 +1,169 @@
+#ifndef BOOST_ARCHIVE_DETAIL_CHECK_HPP
+#define BOOST_ARCHIVE_DETAIL_CHECK_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#pragma inline_depth(511)
+#pragma inline_recursion(on)
+#endif
+
+#if defined(__MWERKS__)
+#pragma inline_depth(511)
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// check.hpp: interface for serialization system.
+
+// (C) Copyright 2009 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/greater.hpp>
+#include <boost/mpl/assert.hpp>
+
+#include <boost/serialization/static_warning.hpp>
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/wrapper.hpp>
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+// checks for objects
+
+template<class T>
+inline void check_object_level(){
+    typedef 
+        typename mpl::greater_equal<
+            serialization::implementation_level< T >,
+            mpl::int_<serialization::primitive_type>
+        >::type typex;
+
+    // trap attempts to serialize objects marked
+    // not_serializable
+    BOOST_STATIC_ASSERT(typex::value);
+}
+
+template<class T>
+inline void check_object_versioning(){
+    typedef 
+        typename mpl::or_<
+            typename mpl::greater<
+                serialization::implementation_level< T >,
+                mpl::int_<serialization::object_serializable>
+            >,
+            typename mpl::equal_to<
+                serialization::version< T >,
+                mpl::int_<0>
+            >
+        > typex;
+    // trap attempts to serialize with objects that don't
+    // save class information in the archive with versioning.
+    BOOST_STATIC_ASSERT(typex::value);
+}
+
+template<class T>
+inline void check_object_tracking(){
+    // presume it has already been determined that
+    // T is not a const
+    BOOST_STATIC_ASSERT(! pdalboost::is_const< T >::value);
+    typedef typename mpl::equal_to<
+        serialization::tracking_level< T >,
+        mpl::int_<serialization::track_never>
+    >::type typex;
+    // saving an non-const object of a type not marked "track_never)
+
+    // may be an indicator of an error usage of the
+    // serialization library and should be double checked.  
+    // See documentation on object tracking.  Also, see the 
+    // "rationale" section of the documenation
+    // for motivation for this checking.
+
+    BOOST_STATIC_WARNING(typex::value);
+}
+
+// checks for pointers
+
+template<class T>
+inline void check_pointer_level(){
+    // we should only invoke this once we KNOW that T
+    // has been used as a pointer!!
+    typedef 
+        typename mpl::or_<
+            typename mpl::greater<
+                serialization::implementation_level< T >,
+                mpl::int_<serialization::object_serializable>
+            >,
+            typename mpl::not_<
+                typename mpl::equal_to<
+                    serialization::tracking_level< T >,
+                    mpl::int_<serialization::track_selectively>
+                >
+            >
+        > typex;
+    // Address the following when serializing to a pointer:
+
+    // a) This type doesn't save class information in the
+    // archive. That is, the serialization trait implementation
+    // level <= object_serializable.
+    // b) Tracking for this type is set to "track selectively"
+
+    // in this case, indication that an object is tracked is
+    // not stored in the archive itself - see level == object_serializable
+    // but rather the existence of the operation ar >> T * is used to 
+    // infer that an object of this type should be tracked.  So, if
+    // you save via a pointer but don't load via a pointer the operation
+    // will fail on load without given any valid reason for the failure.
+
+    // So if your program traps here, consider changing the 
+    // tracking or implementation level traits - or not
+    // serializing via a pointer.
+    BOOST_STATIC_WARNING(typex::value);
+}
+
+template<class T>
+void inline check_pointer_tracking(){
+    typedef typename mpl::greater<
+        serialization::tracking_level< T >,
+        mpl::int_<serialization::track_never>
+    >::type typex;
+    // serializing an object of a type marked "track_never" through a pointer
+    // could result in creating more objects than were saved!
+    BOOST_STATIC_WARNING(typex::value);
+}
+
+template<class T>
+inline void check_const_loading(){
+    typedef
+        typename mpl::or_<
+            typename pdalboost::serialization::is_wrapper< T >,
+            typename mpl::not_<
+                typename pdalboost::is_const< T >
+            >
+        >::type typex;
+    // cannot load data into a "const" object unless it's a
+    // wrapper around some other non-const object.
+    BOOST_STATIC_ASSERT(typex::value);
+}
+
+} // detail
+} // archive
+} // boost
+
+#endif // BOOST_ARCHIVE_DETAIL_CHECK_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/common_iarchive.hpp b/vendor/pdalboost/boost/archive/detail/common_iarchive.hpp
new file mode 100644
index 0000000..503ad49
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/common_iarchive.hpp
@@ -0,0 +1,88 @@
+#ifndef BOOST_ARCHIVE_DETAIL_COMMON_IARCHIVE_HPP
+#define BOOST_ARCHIVE_DETAIL_COMMON_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// common_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#include <boost/archive/detail/basic_iarchive.hpp>
+#include <boost/archive/detail/basic_pointer_iserializer.hpp>
+#include <boost/archive/detail/interface_iarchive.hpp>
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+class extended_type_info;
+
+// note: referred to as Curiously Recurring Template Patter (CRTP)
+template<class Archive>
+class common_iarchive : 
+    public basic_iarchive,
+    public interface_iarchive<Archive>
+{
+    friend class interface_iarchive<Archive>;
+private:
+    virtual void vload(version_type & t){
+        * this->This() >> t; 
+    }
+    virtual void vload(object_id_type & t){
+        * this->This() >> t;
+    }
+    virtual void vload(class_id_type & t){
+        * this->This() >> t;
+    }
+    virtual void vload(class_id_optional_type & t){
+        * this->This() >> t;
+    }
+    virtual void vload(tracking_type & t){
+        * this->This() >> t;
+    }
+    virtual void vload(class_name_type &s){
+        * this->This() >> s;
+    }
+protected:
+    // default processing - invoke serialization library
+    template<class T>
+    void load_override(T & t){
+        archive::load(* this->This(), t);
+    }
+    // default implementations of functions which emit start/end tags for
+    // archive types that require them.
+    void load_start(const char * /*name*/){}
+    void load_end(const char * /*name*/){}
+    // default archive initialization
+    common_iarchive(unsigned int flags = 0) : 
+        basic_iarchive(flags),
+        interface_iarchive<Archive>()
+    {}
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_ARCHIVE_DETAIL_COMMON_IARCHIVE_HPP
+
diff --git a/vendor/pdalboost/boost/archive/detail/common_oarchive.hpp b/vendor/pdalboost/boost/archive/detail/common_oarchive.hpp
new file mode 100644
index 0000000..aa2b22e
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/common_oarchive.hpp
@@ -0,0 +1,87 @@
+#ifndef BOOST_ARCHIVE_DETAIL_COMMON_OARCHIVE_HPP
+#define BOOST_ARCHIVE_DETAIL_COMMON_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// common_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#include <boost/archive/detail/basic_oarchive.hpp>
+#include <boost/archive/detail/interface_oarchive.hpp>
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+// note: referred to as Curiously Recurring Template Patter (CRTP)
+template<class Archive>
+class common_oarchive : 
+    public basic_oarchive,
+    public interface_oarchive<Archive>
+{
+    friend class interface_oarchive<Archive>;
+private:
+    virtual void vsave(const version_type t){
+        * this->This() << t;
+    }
+    virtual void vsave(const object_id_type t){
+        * this->This() << t;
+    }
+    virtual void vsave(const object_reference_type t){
+        * this->This() << t;
+    }
+    virtual void vsave(const class_id_type t){
+        * this->This() << t;
+    }
+    virtual void vsave(const class_id_reference_type t){
+        * this->This() << t;
+    }
+    virtual void vsave(const class_id_optional_type t){
+        * this->This() << t;
+    }
+    virtual void vsave(const class_name_type & t){
+        * this->This() << t;
+    }
+    virtual void vsave(const tracking_type t){
+        * this->This() << t;
+    }
+protected:
+    // default processing - invoke serialization library
+    template<class T>
+    void save_override(T & t){
+        archive::save(* this->This(), t);
+    }
+    void save_start(const char * /*name*/){}
+    void save_end(const char * /*name*/){}
+    common_oarchive(unsigned int flags = 0) : 
+        basic_oarchive(flags),
+        interface_oarchive<Archive>()
+    {}
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_ARCHIVE_DETAIL_COMMON_OARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/decl.hpp b/vendor/pdalboost/boost/archive/detail/decl.hpp
new file mode 100644
index 0000000..bb386d8
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/decl.hpp
@@ -0,0 +1,59 @@
+#ifndef BOOST_ARCHIVE_DETAIL_DECL_HPP
+#define BOOST_ARCHIVE_DETAIL_DECL_HPP 
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif 
+
+/////////1/////////2///////// 3/////////4/////////5/////////6/////////7/////////8
+//  decl.hpp
+//
+//  (c) Copyright Robert Ramey 2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/serialization
+
+//----------------------------------------------------------------------------// 
+
+// This header implements separate compilation features as described in
+// http://www.boost.org/more/separate_compilation.html
+
+#include <boost/config.hpp>
+
+#if (defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK))
+    #if defined(BOOST_ARCHIVE_SOURCE)
+        #define BOOST_ARCHIVE_DECL BOOST_SYMBOL_EXPORT
+    #else
+        #define BOOST_ARCHIVE_DECL BOOST_SYMBOL_IMPORT
+    #endif
+    #if defined(BOOST_WARCHIVE_SOURCE)
+        #define BOOST_WARCHIVE_DECL BOOST_SYMBOL_EXPORT
+    #else
+        #define BOOST_WARCHIVE_DECL BOOST_SYMBOL_IMPORT
+    #endif
+    #if !defined(BOOST_WARCHIVE_SOURCE) && !defined(BOOST_ARCHIVE_SOURCE)
+        #define BOOST_ARCHIVE_OR_WARCHIVE_DECL BOOST_SYMBOL_IMPORT
+    #endif
+
+    #if defined(BOOST_WARCHIVE_SOURCE) || defined(BOOST_ARCHIVE_SOURCE)
+        #define BOOST_ARCHIVE_OR_WARCHIVE_DECL BOOST_SYMBOL_EXPORT
+    #else
+        #define BOOST_ARCHIVE_OR_WARCHIVE_DECL BOOST_SYMBOL_IMPORT
+    #endif
+
+#endif
+
+#if ! defined(BOOST_ARCHIVE_DECL)
+    #define BOOST_ARCHIVE_DECL
+#endif
+#if ! defined(BOOST_WARCHIVE_DECL)
+    #define BOOST_WARCHIVE_DECL
+#endif
+#if ! defined(BOOST_ARCHIVE_OR_WARCHIVE_DECL)
+    #define BOOST_ARCHIVE_OR_WARCHIVE_DECL
+#endif
+
+#endif // BOOST_ARCHIVE_DETAIL_DECL_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/helper_collection.hpp b/vendor/pdalboost/boost/archive/detail/helper_collection.hpp
new file mode 100644
index 0000000..22a1827
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/helper_collection.hpp
@@ -0,0 +1,99 @@
+#ifndef BOOST_ARCHIVE_DETAIL_HELPER_COLLECTION_HPP
+#define BOOST_ARCHIVE_DETAIL_HELPER_COLLECTION_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// helper_collection.hpp: archive support for run-time helpers
+
+// (C) Copyright 2002-2008 Robert Ramey and Joaquin M Lopez Munoz
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // NULL
+#include <vector>
+#include <utility>
+#include <memory>
+#include <algorithm>
+
+#include <boost/config.hpp>
+
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/smart_ptr/make_shared.hpp>
+
+namespace pdalboost {
+
+namespace archive {
+namespace detail {
+
+class helper_collection
+{
+    helper_collection(const helper_collection&);              // non-copyable
+    helper_collection& operator = (const helper_collection&); // non-copyable
+
+    // note: we dont' actually "share" the function object pointer
+    // we only use shared_ptr to make sure that it get's deleted
+
+    typedef std::pair<
+        const void *,
+        pdalboost::shared_ptr<void>
+    > helper_value_type;
+    template<class T>
+    pdalboost::shared_ptr<void> make_helper_ptr(){
+        // use pdalboost::shared_ptr rather than std::shared_ptr to maintain
+        // c++03 compatibility
+        return pdalboost::make_shared<T>();
+    }
+
+    typedef std::vector<helper_value_type> collection;
+    collection m_collection;
+
+    struct predicate {
+        BOOST_DELETED_FUNCTION(predicate & operator=(const predicate & rhs))
+    public:
+        const void * const m_ti;
+        bool operator()(helper_value_type const &rhs) const {
+            return m_ti == rhs.first;
+        }
+        predicate(const void * ti) :
+            m_ti(ti)
+        {}
+    };
+protected:
+    helper_collection(){}
+    ~helper_collection(){}
+public:
+    template<typename Helper>
+    Helper& find_helper(void * const id = 0) {
+        collection::const_iterator it =
+            std::find_if(
+                m_collection.begin(),
+                m_collection.end(),
+                predicate(id)
+            );
+
+        void * rval = 0;
+        if(it == m_collection.end()){
+            m_collection.push_back(
+                std::make_pair(id, make_helper_ptr<Helper>())
+            );
+            rval = m_collection.back().second.get();
+        }
+        else{
+            rval = it->second.get();
+        }
+        return *static_cast<Helper *>(rval);
+    }
+};
+
+} // namespace detail
+} // namespace serialization
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_DETAIL_HELPER_COLLECTION_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/interface_iarchive.hpp b/vendor/pdalboost/boost/archive/detail/interface_iarchive.hpp
new file mode 100644
index 0000000..d02de0a
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/interface_iarchive.hpp
@@ -0,0 +1,85 @@
+#ifndef BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP
+#define BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// interface_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+#include <cstddef> // NULL
+#include <boost/cstdint.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/iserializer.hpp>
+#include <boost/archive/detail/helper_collection.hpp>
+#include <boost/serialization/singleton.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+class basic_pointer_iserializer;
+
+template<class Archive>
+class interface_iarchive 
+{
+protected:
+    interface_iarchive(){};
+public:
+    /////////////////////////////////////////////////////////
+    // archive public interface
+    typedef mpl::bool_<true> is_loading;
+    typedef mpl::bool_<false> is_saving;
+
+    // return a pointer to the most derived class
+    Archive * This(){
+        return static_cast<Archive *>(this);
+    }
+
+    template<class T>
+    const basic_pointer_iserializer * 
+    register_type(T * = NULL){
+        const basic_pointer_iserializer & bpis =
+            pdalboost::serialization::singleton<
+                pointer_iserializer<Archive, T> 
+            >::get_const_instance();
+        this->This()->register_basic_serializer(bpis.get_basic_serializer());
+        return & bpis;
+    }
+    template<class Helper>
+    Helper &
+    get_helper(void * const id = 0){
+        helper_collection & hc = this->This()->get_helper_collection();
+        return hc.template find_helper<Helper>(id);
+    }
+    
+    template<class T>
+    Archive & operator>>(T & t){
+        this->This()->load_override(t);
+        return * this->This();
+    }
+
+    // the & operator 
+    template<class T>
+    Archive & operator&(T & t){
+        return *(this->This()) >> t;
+    }
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/interface_oarchive.hpp b/vendor/pdalboost/boost/archive/detail/interface_oarchive.hpp
new file mode 100644
index 0000000..727f9df
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/interface_oarchive.hpp
@@ -0,0 +1,87 @@
+#ifndef BOOST_ARCHIVE_DETAIL_INTERFACE_OARCHIVE_HPP
+#define BOOST_ARCHIVE_DETAIL_INTERFACE_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// interface_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+#include <cstddef> // NULL
+#include <boost/cstdint.hpp>
+#include <boost/mpl/bool.hpp>
+
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/detail/oserializer.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#include <boost/serialization/singleton.hpp>
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+class basic_pointer_oserializer;
+
+template<class Archive>
+class interface_oarchive 
+{
+protected:
+    interface_oarchive(){};
+public:
+    /////////////////////////////////////////////////////////
+    // archive public interface
+    typedef mpl::bool_<false> is_loading;
+    typedef mpl::bool_<true> is_saving;
+
+    // return a pointer to the most derived class
+    Archive * This(){
+        return static_cast<Archive *>(this);
+    }
+
+    template<class T>
+    const basic_pointer_oserializer * 
+    register_type(const T * = NULL){
+        const basic_pointer_oserializer & bpos =
+            pdalboost::serialization::singleton<
+                pointer_oserializer<Archive, T>
+            >::get_const_instance();
+        this->This()->register_basic_serializer(bpos.get_basic_serializer());
+        return & bpos;
+    }
+    
+    template<class Helper>
+    Helper &
+    get_helper(void * const id = 0){
+        helper_collection & hc = this->This()->get_helper_collection();
+        return hc.template find_helper<Helper>(id);
+    }
+
+    template<class T>
+    Archive & operator<<(const T & t){
+        this->This()->save_override(t);
+        return * this->This();
+    }
+    
+    // the & operator 
+    template<class T>
+    Archive & operator&(const T & t){
+        return * this ->This() << t;
+    }
+};
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_DETAIL_INTERFACE_IARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/iserializer.hpp b/vendor/pdalboost/boost/archive/detail/iserializer.hpp
new file mode 100644
index 0000000..a142118
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/iserializer.hpp
@@ -0,0 +1,634 @@
+#ifndef BOOST_ARCHIVE_DETAIL_ISERIALIZER_HPP
+#define BOOST_ARCHIVE_DETAIL_ISERIALIZER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#pragma inline_depth(511)
+#pragma inline_recursion(on)
+#endif
+
+#if defined(__MWERKS__)
+#pragma inline_depth(511)
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// iserializer.hpp: interface for serialization system.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <new>     // for placement new
+#include <cstddef> // size_t, NULL
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+} // namespace std
+#endif
+
+#include <boost/static_assert.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/greater_equal.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/core/no_exceptions_support.hpp>
+
+#ifndef BOOST_SERIALIZATION_DEFAULT_TYPE_INFO   
+    #include <boost/serialization/extended_type_info_typeid.hpp>   
+#endif
+#include <boost/serialization/throw_exception.hpp>
+#include <boost/serialization/smart_cast.hpp>
+#include <boost/serialization/static_warning.hpp>
+
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_extent.hpp>
+#include <boost/type_traits/is_polymorphic.hpp>
+
+#include <boost/serialization/assume_abstract.hpp>
+
+#ifndef BOOST_MSVC
+    #define DONT_USE_HAS_NEW_OPERATOR (                    \
+           BOOST_WORKAROUND(__IBMCPP__, < 1210)            \
+        || defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x590)   \
+    )
+#else
+    #define DONT_USE_HAS_NEW_OPERATOR 0
+#endif
+
+#if ! DONT_USE_HAS_NEW_OPERATOR
+#include <boost/type_traits/has_new_operator.hpp>
+#endif
+
+#include <boost/serialization/serialization.hpp>
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/void_cast.hpp>
+#include <boost/serialization/array.hpp>
+#include <boost/serialization/collection_size_type.hpp>
+#include <boost/serialization/singleton.hpp>
+#include <boost/serialization/wrapper.hpp>
+
+// the following is need only for dynamic cast of polymorphic pointers
+#include <boost/archive/archive_exception.hpp>
+#include <boost/archive/detail/basic_iarchive.hpp>
+#include <boost/archive/detail/basic_iserializer.hpp>
+#include <boost/archive/detail/basic_pointer_iserializer.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+#include <boost/archive/detail/check.hpp>
+
+namespace pdalboost {
+
+namespace serialization {
+    class extended_type_info;
+} // namespace serialization
+
+namespace archive {
+
+// an accessor to permit friend access to archives.  Needed because
+// some compilers don't handle friend templates completely
+class load_access {
+public:
+    template<class Archive, class T>
+    static void load_primitive(Archive &ar, T &t){
+        ar.load(t);
+    }
+};
+
+namespace detail {
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+template<class Archive, class T>
+class iserializer : public basic_iserializer
+{
+private:
+    virtual void destroy(/*const*/ void *address) const {
+        pdalboost::serialization::access::destroy(static_cast<T *>(address));
+    }
+protected:
+    // protected constructor since it's always created by singleton
+    explicit iserializer() :
+        basic_iserializer(
+            pdalboost::serialization::singleton<
+                typename 
+                pdalboost::serialization::type_info_implementation< T >::type
+            >::get_const_instance()
+        )
+    {}
+public:
+    virtual BOOST_DLLEXPORT void load_object_data(
+        basic_iarchive & ar,
+        void *x, 
+        const unsigned int file_version
+    ) const BOOST_USED;
+    virtual bool class_info() const {
+        return pdalboost::serialization::implementation_level< T >::value 
+            >= pdalboost::serialization::object_class_info;
+    }
+    virtual bool tracking(const unsigned int /* flags */) const {
+        return pdalboost::serialization::tracking_level< T >::value 
+                == pdalboost::serialization::track_always
+            || ( pdalboost::serialization::tracking_level< T >::value 
+                == pdalboost::serialization::track_selectively
+                && serialized_as_pointer());
+    }
+    virtual version_type version() const {
+        return version_type(::pdalboost::serialization::version< T >::value);
+    }
+    virtual bool is_polymorphic() const {
+        return pdalboost::is_polymorphic< T >::value;
+    }
+    virtual ~iserializer(){};
+};
+
+#ifdef BOOST_MSVC
+#  pragma warning(pop)
+#endif
+
+template<class Archive, class T>
+BOOST_DLLEXPORT void iserializer<Archive, T>::load_object_data(
+    basic_iarchive & ar,
+    void *x, 
+    const unsigned int file_version
+) const {
+    // note: we now comment this out. Before we permited archive
+    // version # to be very large.  Now we don't.  To permit
+    // readers of these old archives, we have to suppress this 
+    // code.  Perhaps in the future we might re-enable it but
+    // permit its suppression with a runtime switch.
+    #if 0
+    // trap case where the program cannot handle the current version
+    if(file_version > static_cast<const unsigned int>(version()))
+        pdalboost::serialization::throw_exception(
+            archive::archive_exception(
+                pdalboost::archive::archive_exception::unsupported_class_version,
+                get_debug_info()
+            )
+        );
+    #endif
+    // make sure call is routed through the higest interface that might
+    // be specialized by the user.
+    pdalboost::serialization::serialize_adl(
+        pdalboost::serialization::smart_cast_reference<Archive &>(ar),
+        * static_cast<T *>(x), 
+        file_version
+    );
+}
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+// the purpose of this code is to allocate memory for an object
+// without requiring the constructor to be called.  Presumably
+// the allocated object will be subsequently initialized with
+// "placement new". 
+// note: we have the boost type trait has_new_operator but we
+// have no corresponding has_delete_operator.  So we presume
+// that the former being true would imply that the a delete
+// operator is also defined for the class T.
+
+template<class T>
+struct heap_allocation {
+    // pdalboost::has_new_operator< T > doesn't work on these compilers
+    #if DONT_USE_HAS_NEW_OPERATOR
+        // This doesn't handle operator new overload for class T
+        static T * invoke_new(){
+            return static_cast<T *>(operator new(sizeof(T)));
+        }
+        static void invoke_delete(T *t){
+            (operator delete(t));
+        }
+    #else
+        // note: we presume that a true value for has_new_operator
+        // implies the existence of a class specific delete operator as well
+        // as a class specific new operator.
+        struct has_new_operator {
+            static T * invoke_new() {
+                return static_cast<T *>((T::operator new)(sizeof(T)));
+            }
+            template<void D(void *, std::size_t)>
+            static void deleter(void * t, std::size_t s){
+                D(t, s);
+            }
+
+            template<void D(void *)>
+            static void deleter(void * t, std::size_t s){
+                D(t);
+            }
+            static void invoke_delete(T * t) {
+                // if compilation fails here, the likely cause that the class
+                // T has a class specific new operator but no class specific
+                // delete operator which matches the following signature.
+                // note that this solution addresses the issue that two
+                // possible signatures.  But it doesn't address the possibility
+                // that the class might have class specific new with NO
+                // class specific delete at all.  Patches (compatible with
+                // C++03) welcome!
+                deleter<T::operator delete>(t, sizeof(T));
+            }
+        };
+        struct doesnt_have_new_operator {
+            static T* invoke_new() {
+                return static_cast<T *>(operator new(sizeof(T)));
+            }
+            static void invoke_delete(T * t) {
+                // Note: I'm reliance upon automatic conversion from T * to void * here
+                (operator delete)(t);
+            }
+        };
+        static T * invoke_new() {
+            typedef typename
+                mpl::eval_if<
+                    pdalboost::has_new_operator< T >,
+                    mpl::identity<has_new_operator >,
+                    mpl::identity<doesnt_have_new_operator >    
+                >::type typex;
+            return typex::invoke_new();
+        }
+        static void invoke_delete(T *t) {
+            typedef typename
+                mpl::eval_if<
+                    pdalboost::has_new_operator< T >,
+                    mpl::identity<has_new_operator >,
+                    mpl::identity<doesnt_have_new_operator >    
+                >::type typex;
+            typex::invoke_delete(t);
+        }
+    #endif
+    explicit heap_allocation(){
+        m_p = invoke_new();
+    }
+    ~heap_allocation(){
+        if (0 != m_p)
+            invoke_delete(m_p);
+    }
+    T* get() const {
+        return m_p;
+    }
+
+    T* release() {
+        T* p = m_p;
+        m_p = 0;
+        return p;
+    }
+private:
+    T* m_p;
+};
+
+template<class Archive, class T>
+class pointer_iserializer :
+    public basic_pointer_iserializer
+{
+private:
+    virtual void * heap_allocation() const {
+        detail::heap_allocation<T> h;
+        T * t = h.get();
+        h.release();
+        return t;
+    }
+    virtual const basic_iserializer & get_basic_serializer() const {
+        return pdalboost::serialization::singleton<
+            iserializer<Archive, T>
+        >::get_const_instance();
+    }
+    BOOST_DLLEXPORT virtual void load_object_ptr(
+        basic_iarchive & ar, 
+        void * x,
+        const unsigned int file_version
+    ) const BOOST_USED;
+protected:
+    // this should alway be a singleton so make the constructor protected
+    pointer_iserializer();
+    ~pointer_iserializer();
+};
+
+#ifdef BOOST_MSVC
+#  pragma warning(pop)
+#endif
+
+// note: BOOST_DLLEXPORT is so that code for polymorphic class
+// serialized only through base class won't get optimized out
+template<class Archive, class T>
+BOOST_DLLEXPORT void pointer_iserializer<Archive, T>::load_object_ptr(
+    basic_iarchive & ar, 
+    void * t,
+    const unsigned int file_version
+) const
+{
+    Archive & ar_impl = 
+        pdalboost::serialization::smart_cast_reference<Archive &>(ar);
+
+    // note that the above will throw std::bad_alloc if the allocation
+    // fails so we don't have to address this contingency here.
+
+    // catch exception during load_construct_data so that we don't
+    // automatically delete the t which is most likely not fully
+    // constructed
+    BOOST_TRY {
+        // this addresses an obscure situation that occurs when 
+        // load_constructor de-serializes something through a pointer.
+        ar.next_object_pointer(t);
+        pdalboost::serialization::load_construct_data_adl<Archive, T>(
+            ar_impl,
+            static_cast<T *>(t),
+            file_version
+        );
+    }
+    BOOST_CATCH(...){
+        // if we get here the load_construct failed.  The heap_allocation
+        // will be automatically deleted so we don't have to do anything
+        // special here.
+        BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+
+    ar_impl >> pdalboost::serialization::make_nvp(NULL, * static_cast<T *>(t));
+}
+
+template<class Archive, class T>
+pointer_iserializer<Archive, T>::pointer_iserializer() :
+    basic_pointer_iserializer(
+        pdalboost::serialization::singleton<
+            typename 
+            pdalboost::serialization::type_info_implementation< T >::type
+        >::get_const_instance()
+    )
+{
+    pdalboost::serialization::singleton<
+        iserializer<Archive, T>
+    >::get_mutable_instance().set_bpis(this);
+    archive_serializer_map<Archive>::insert(this);
+}
+
+template<class Archive, class T>
+pointer_iserializer<Archive, T>::~pointer_iserializer(){
+    archive_serializer_map<Archive>::erase(this);
+}
+
+template<class Archive>
+struct load_non_pointer_type {
+    // note this bounces the call right back to the archive
+    // with no runtime overhead
+    struct load_primitive {
+        template<class T>
+        static void invoke(Archive & ar, T & t){
+            load_access::load_primitive(ar, t);
+        }
+    };
+    // note this bounces the call right back to the archive
+    // with no runtime overhead
+    struct load_only {
+        template<class T>
+        static void invoke(Archive & ar, const T & t){
+            // short cut to user's serializer
+            // make sure call is routed through the higest interface that might
+            // be specialized by the user.
+            pdalboost::serialization::serialize_adl(
+                ar, 
+                const_cast<T &>(t), 
+                pdalboost::serialization::version< T >::value
+            );
+        }
+    };
+
+    // note this save class information including version
+    // and serialization level to the archive
+    struct load_standard {
+        template<class T>
+        static void invoke(Archive &ar, const T & t){
+            void * x = & const_cast<T &>(t);
+            ar.load_object(
+                x, 
+                pdalboost::serialization::singleton<
+                    iserializer<Archive, T>
+                >::get_const_instance()
+            );
+        }
+    };
+
+    struct load_conditional {
+        template<class T>
+        static void invoke(Archive &ar, T &t){
+            //if(0 == (ar.get_flags() & no_tracking))
+                load_standard::invoke(ar, t);
+            //else
+            //    load_only::invoke(ar, t);
+        }
+    };
+
+    template<class T>
+    static void invoke(Archive & ar, T &t){
+        typedef typename mpl::eval_if<
+                // if its primitive
+                mpl::equal_to<
+                    pdalboost::serialization::implementation_level< T >,
+                    mpl::int_<pdalboost::serialization::primitive_type>
+                >,
+                mpl::identity<load_primitive>,
+            // else
+            typename mpl::eval_if<
+            // class info / version
+            mpl::greater_equal<
+                        pdalboost::serialization::implementation_level< T >,
+                        mpl::int_<pdalboost::serialization::object_class_info>
+                    >,
+            // do standard load
+            mpl::identity<load_standard>,
+        // else
+        typename mpl::eval_if<
+            // no tracking
+                    mpl::equal_to<
+                        pdalboost::serialization::tracking_level< T >,
+                        mpl::int_<pdalboost::serialization::track_never>
+                >,
+                // do a fast load
+                mpl::identity<load_only>,
+            // else
+            // do a fast load only tracking is turned off
+            mpl::identity<load_conditional>
+        > > >::type typex;
+        check_object_versioning< T >();
+        check_object_level< T >();
+        typex::invoke(ar, t);
+    }
+};
+
+template<class Archive>
+struct load_pointer_type {
+    struct abstract
+    {
+        template<class T>
+        static const basic_pointer_iserializer * register_type(Archive & /* ar */){
+            // it has? to be polymorphic
+            BOOST_STATIC_ASSERT(pdalboost::is_polymorphic< T >::value);
+            return static_cast<basic_pointer_iserializer *>(NULL);
+         }
+    };
+
+    struct non_abstract
+    {
+        template<class T>
+        static const basic_pointer_iserializer * register_type(Archive & ar){
+            return ar.register_type(static_cast<T *>(NULL));
+        }
+    };
+
+    template<class T>
+    static const basic_pointer_iserializer * register_type(Archive &ar, const T & /*t*/){
+        // there should never be any need to load an abstract polymorphic 
+        // class pointer.  Inhibiting code generation for this
+        // permits abstract base classes to be used - note: exception
+        // virtual serialize functions used for plug-ins
+        typedef typename
+            mpl::eval_if<
+                pdalboost::serialization::is_abstract<const T>,
+                pdalboost::mpl::identity<abstract>,
+                pdalboost::mpl::identity<non_abstract>  
+            >::type typex;
+        return typex::template register_type< T >(ar);
+    }
+
+    template<class T>
+    static T * pointer_tweak(
+        const pdalboost::serialization::extended_type_info & eti,
+        void const * const t,
+        const T &
+    ) {
+        // tweak the pointer back to the base class
+        void * upcast = const_cast<void *>(
+            pdalboost::serialization::void_upcast(
+                eti,
+                pdalboost::serialization::singleton<
+                    typename 
+                    pdalboost::serialization::type_info_implementation< T >::type
+                >::get_const_instance(),
+                t
+            )
+        );
+        if(NULL == upcast)
+            pdalboost::serialization::throw_exception(
+                archive_exception(archive_exception::unregistered_class)
+            );
+        return static_cast<T *>(upcast);
+    }
+
+    template<class T>
+    static void check_load(T & /* t */){
+        check_pointer_level< T >();
+        check_pointer_tracking< T >();
+    }
+
+    static const basic_pointer_iserializer *
+    find(const pdalboost::serialization::extended_type_info & type){
+        return static_cast<const basic_pointer_iserializer *>(
+            archive_serializer_map<Archive>::find(type)
+        );
+    }
+
+    template<class Tptr>
+    static void invoke(Archive & ar, Tptr & t){
+        check_load(*t);
+        const basic_pointer_iserializer * bpis_ptr = register_type(ar, *t);
+        const basic_pointer_iserializer * newbpis_ptr = ar.load_pointer(
+            // note major hack here !!!
+            // I tried every way to convert Tptr &t (where Tptr might
+            // include const) to void * &.  This is the only way
+            // I could make it work. RR
+            (void * & )t,
+            bpis_ptr,
+            find
+        );
+        // if the pointer isn't that of the base class
+        if(newbpis_ptr != bpis_ptr){
+            t = pointer_tweak(newbpis_ptr->get_eti(), t, *t);
+        }
+    }
+};
+
+template<class Archive>
+struct load_enum_type {
+    template<class T>
+    static void invoke(Archive &ar, T &t){
+        // convert integers to correct enum to load
+        int i;
+        ar >> pdalboost::serialization::make_nvp(NULL, i);
+        t = static_cast< T >(i);
+    }
+};
+
+template<class Archive>
+struct load_array_type {
+    template<class T>
+    static void invoke(Archive &ar, T &t){
+        typedef typename remove_extent< T >::type value_type;
+        
+        // convert integers to correct enum to load
+        // determine number of elements in the array. Consider the
+        // fact that some machines will align elements on boundries
+        // other than characters.
+        std::size_t current_count = sizeof(t) / (
+            static_cast<char *>(static_cast<void *>(&t[1])) 
+            - static_cast<char *>(static_cast<void *>(&t[0]))
+        );
+        pdalboost::serialization::collection_size_type count;
+        ar >> BOOST_SERIALIZATION_NVP(count);
+        if(static_cast<std::size_t>(count) > current_count)
+            pdalboost::serialization::throw_exception(
+                archive::archive_exception(
+                    pdalboost::archive::archive_exception::array_size_too_short
+                )
+            );
+        ar >> serialization::make_array(static_cast<value_type*>(&t[0]),count);
+    }
+};
+
+} // detail
+
+template<class Archive, class T>
+inline void load(Archive & ar, T &t){
+    // if this assertion trips. It means we're trying to load a
+    // const object with a compiler that doesn't have correct
+    // funtion template ordering.  On other compilers, this is
+    // handled below.
+    detail::check_const_loading< T >();
+    typedef
+        typename mpl::eval_if<is_pointer< T >,
+            mpl::identity<detail::load_pointer_type<Archive> >
+        ,//else
+        typename mpl::eval_if<is_array< T >,
+            mpl::identity<detail::load_array_type<Archive> >
+        ,//else
+        typename mpl::eval_if<is_enum< T >,
+            mpl::identity<detail::load_enum_type<Archive> >
+        ,//else
+            mpl::identity<detail::load_non_pointer_type<Archive> >
+        >
+        >
+        >::type typex;
+    typex::invoke(ar, t);
+}
+
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_DETAIL_ISERIALIZER_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/oserializer.hpp b/vendor/pdalboost/boost/archive/detail/oserializer.hpp
new file mode 100644
index 0000000..21259c5
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/oserializer.hpp
@@ -0,0 +1,531 @@
+#ifndef BOOST_ARCHIVE_OSERIALIZER_HPP
+#define BOOST_ARCHIVE_OSERIALIZER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#pragma inline_depth(511)
+#pragma inline_recursion(on)
+#endif
+
+#if defined(__MWERKS__)
+#pragma inline_depth(511)
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// oserializer.hpp: interface for serialization system.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/assert.hpp>
+#include <cstddef> // NULL
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/greater_equal.hpp>
+#include <boost/mpl/identity.hpp>
+
+#ifndef BOOST_SERIALIZATION_DEFAULT_TYPE_INFO   
+    #include <boost/serialization/extended_type_info_typeid.hpp>   
+#endif
+#include <boost/serialization/throw_exception.hpp>
+#include <boost/serialization/smart_cast.hpp>
+#include <boost/serialization/assume_abstract.hpp>
+#include <boost/serialization/static_warning.hpp>
+
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_polymorphic.hpp>
+#include <boost/type_traits/remove_extent.hpp>
+
+#include <boost/serialization/serialization.hpp>
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/void_cast.hpp>
+#include <boost/serialization/array.hpp>
+#include <boost/serialization/collection_size_type.hpp>
+#include <boost/serialization/singleton.hpp>
+
+#include <boost/archive/archive_exception.hpp>
+#include <boost/archive/detail/basic_oarchive.hpp>
+#include <boost/archive/detail/basic_oserializer.hpp>
+#include <boost/archive/detail/basic_pointer_oserializer.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+#include <boost/archive/detail/check.hpp>
+
+namespace pdalboost {
+
+namespace serialization {
+    class extended_type_info;
+} // namespace serialization
+
+namespace archive {
+
+// an accessor to permit friend access to archives.  Needed because
+// some compilers don't handle friend templates completely
+class save_access {
+public:
+    template<class Archive>
+    static void end_preamble(Archive & ar){
+        ar.end_preamble();
+    }
+    template<class Archive, class T>
+    static void save_primitive(Archive & ar, const  T & t){
+        ar.end_preamble();
+        ar.save(t);
+    }
+};
+
+namespace detail {
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+template<class Archive, class T>
+class oserializer : public basic_oserializer
+{
+private:
+    // private constructor to inhibit any existence other than the 
+    // static one
+public:
+    explicit BOOST_DLLEXPORT oserializer() :
+        basic_oserializer(
+            pdalboost::serialization::singleton<
+                typename 
+                pdalboost::serialization::type_info_implementation< T >::type
+            >::get_const_instance()
+        )
+    {}
+    virtual BOOST_DLLEXPORT void save_object_data(
+        basic_oarchive & ar,    
+        const void *x
+    ) const BOOST_USED;
+    virtual bool class_info() const {
+        return pdalboost::serialization::implementation_level< T >::value 
+            >= pdalboost::serialization::object_class_info;
+    }
+    virtual bool tracking(const unsigned int /* flags */) const {
+        return pdalboost::serialization::tracking_level< T >::value == pdalboost::serialization::track_always
+            || (pdalboost::serialization::tracking_level< T >::value == pdalboost::serialization::track_selectively
+                && serialized_as_pointer());
+    }
+    virtual version_type version() const {
+        return version_type(::pdalboost::serialization::version< T >::value);
+    }
+    virtual bool is_polymorphic() const {
+        return pdalboost::is_polymorphic< T >::value;
+    }
+    virtual ~oserializer(){}
+};
+
+#ifdef BOOST_MSVC
+#  pragma warning(pop)
+#endif
+
+template<class Archive, class T>
+BOOST_DLLEXPORT void oserializer<Archive, T>::save_object_data(
+    basic_oarchive & ar,    
+    const void *x
+) const {
+    // make sure call is routed through the highest interface that might
+    // be specialized by the user.
+    BOOST_STATIC_ASSERT(pdalboost::is_const< T >::value == false);
+    pdalboost::serialization::serialize_adl(
+        pdalboost::serialization::smart_cast_reference<Archive &>(ar),
+        * static_cast<T *>(const_cast<void *>(x)),
+        version()
+    );
+}
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+template<class Archive, class T>
+class pointer_oserializer :
+    public basic_pointer_oserializer
+{
+private:
+    const basic_oserializer & 
+    get_basic_serializer() const {
+        return pdalboost::serialization::singleton<
+            oserializer<Archive, T>
+        >::get_const_instance();
+    }
+    virtual BOOST_DLLEXPORT void save_object_ptr(
+        basic_oarchive & ar,
+        const void * x
+    ) const BOOST_USED;
+public:
+    pointer_oserializer();
+    ~pointer_oserializer();
+};
+
+#ifdef BOOST_MSVC
+#  pragma warning(pop)
+#endif
+
+template<class Archive, class T>
+BOOST_DLLEXPORT void pointer_oserializer<Archive, T>::save_object_ptr(
+    basic_oarchive & ar,
+    const void * x
+) const {
+    BOOST_ASSERT(NULL != x);
+    // make sure call is routed through the highest interface that might
+    // be specialized by the user.
+    T * t = static_cast<T *>(const_cast<void *>(x));
+    const unsigned int file_version = pdalboost::serialization::version< T >::value;
+    Archive & ar_impl 
+        = pdalboost::serialization::smart_cast_reference<Archive &>(ar);
+    pdalboost::serialization::save_construct_data_adl<Archive, T>(
+        ar_impl, 
+        t, 
+        file_version
+    );
+    ar_impl << pdalboost::serialization::make_nvp(NULL, * t);
+}
+
+template<class Archive, class T>
+pointer_oserializer<Archive, T>::pointer_oserializer() :
+    basic_pointer_oserializer(
+        pdalboost::serialization::singleton<
+            typename 
+            pdalboost::serialization::type_info_implementation< T >::type
+        >::get_const_instance()
+    )
+{
+    // make sure appropriate member function is instantiated
+    pdalboost::serialization::singleton<
+        oserializer<Archive, T> 
+    >::get_mutable_instance().set_bpos(this);
+    archive_serializer_map<Archive>::insert(this);
+}
+
+template<class Archive, class T>
+pointer_oserializer<Archive, T>::~pointer_oserializer(){
+    archive_serializer_map<Archive>::erase(this);
+}
+
+template<class Archive>
+struct save_non_pointer_type {
+    // note this bounces the call right back to the archive
+    // with no runtime overhead
+    struct save_primitive {
+        template<class T>
+        static void invoke(Archive & ar, const T & t){
+            save_access::save_primitive(ar, t);
+        }
+    };
+    // same as above but passes through serialization
+    struct save_only {
+        template<class T>
+        static void invoke(Archive & ar, const T & t){
+            // make sure call is routed through the highest interface that might
+            // be specialized by the user.
+            pdalboost::serialization::serialize_adl(
+                ar, 
+                const_cast<T &>(t), 
+                ::pdalboost::serialization::version< T >::value
+            );
+        }
+    };
+    // adds class information to the archive. This includes
+    // serialization level and class version
+    struct save_standard {
+        template<class T>
+        static void invoke(Archive &ar, const T & t){
+            ar.save_object(
+                & t, 
+                pdalboost::serialization::singleton<
+                    oserializer<Archive, T>
+                >::get_const_instance()
+            );
+        }
+    };
+
+    // adds class information to the archive. This includes
+    // serialization level and class version
+    struct save_conditional {
+        template<class T>
+        static void invoke(Archive &ar, const T &t){
+            //if(0 == (ar.get_flags() & no_tracking))
+                save_standard::invoke(ar, t);
+            //else
+            //   save_only::invoke(ar, t);
+        }
+    };
+
+
+    template<class T>
+    static void invoke(Archive & ar, const T & t){
+        typedef 
+            typename mpl::eval_if<
+            // if its primitive
+                mpl::equal_to<
+                    pdalboost::serialization::implementation_level< T >,
+                    mpl::int_<pdalboost::serialization::primitive_type>
+                >,
+                mpl::identity<save_primitive>,
+            // else
+            typename mpl::eval_if<
+                // class info / version
+                mpl::greater_equal<
+                    pdalboost::serialization::implementation_level< T >,
+                    mpl::int_<pdalboost::serialization::object_class_info>
+                >,
+                // do standard save
+                mpl::identity<save_standard>,
+            // else
+            typename mpl::eval_if<
+                    // no tracking
+                mpl::equal_to<
+                    pdalboost::serialization::tracking_level< T >,
+                    mpl::int_<pdalboost::serialization::track_never>
+                >,
+                // do a fast save
+                mpl::identity<save_only>,
+            // else
+                // do a fast save only tracking is turned off
+                mpl::identity<save_conditional>
+            > > >::type typex; 
+        check_object_versioning< T >();
+        typex::invoke(ar, t);
+    }
+    template<class T>
+    static void invoke(Archive & ar, T & t){
+        check_object_level< T >();
+        check_object_tracking< T >();
+        invoke(ar, const_cast<const T &>(t));
+    }
+};
+
+template<class Archive>
+struct save_pointer_type {
+    struct abstract
+    {
+        template<class T>
+        static const basic_pointer_oserializer * register_type(Archive & /* ar */){
+            // it has? to be polymorphic
+            BOOST_STATIC_ASSERT(pdalboost::is_polymorphic< T >::value);
+            return NULL;
+        }
+    };
+
+    struct non_abstract
+    {
+        template<class T>
+        static const basic_pointer_oserializer * register_type(Archive & ar){
+            return ar.register_type(static_cast<T *>(NULL));
+        }
+    };
+
+    template<class T>
+    static const basic_pointer_oserializer * register_type(Archive &ar, T & /*t*/){
+        // there should never be any need to save an abstract polymorphic 
+        // class pointer.  Inhibiting code generation for this
+        // permits abstract base classes to be used - note: exception
+        // virtual serialize functions used for plug-ins
+        typedef 
+            typename mpl::eval_if<
+                pdalboost::serialization::is_abstract< T >,
+                mpl::identity<abstract>,
+                mpl::identity<non_abstract>       
+            >::type typex;
+        return typex::template register_type< T >(ar);
+    }
+
+    struct non_polymorphic
+    {
+        template<class T>
+        static void save(
+            Archive &ar, 
+            T & t
+        ){
+            const basic_pointer_oserializer & bpos = 
+                pdalboost::serialization::singleton<
+                    pointer_oserializer<Archive, T>
+                >::get_const_instance();
+            // save the requested pointer type
+            ar.save_pointer(& t, & bpos);
+        }
+    };
+
+    struct polymorphic
+    {
+        template<class T>
+        static void save(
+            Archive &ar, 
+            T & t
+        ){
+            typename 
+            pdalboost::serialization::type_info_implementation< T >::type const
+            & i = pdalboost::serialization::singleton<
+                typename 
+                pdalboost::serialization::type_info_implementation< T >::type
+            >::get_const_instance();
+
+            pdalboost::serialization::extended_type_info const * const this_type = & i;
+
+            // retrieve the true type of the object pointed to
+            // if this assertion fails its an error in this library
+            BOOST_ASSERT(NULL != this_type);
+
+            const pdalboost::serialization::extended_type_info * true_type =
+                i.get_derived_extended_type_info(t);
+
+            // note:if this exception is thrown, be sure that derived pointer
+            // is either registered or exported.
+            if(NULL == true_type){
+                pdalboost::serialization::throw_exception(
+                    archive_exception(
+                        archive_exception::unregistered_class,
+                        "derived class not registered or exported"
+                    )
+                );
+            }
+
+            // if its not a pointer to a more derived type
+            const void *vp = static_cast<const void *>(&t);
+            if(*this_type == *true_type){
+                const basic_pointer_oserializer * bpos = register_type(ar, t);
+                ar.save_pointer(vp, bpos);
+                return;
+            }
+            // convert pointer to more derived type. if this is thrown
+            // it means that the base/derived relationship hasn't be registered
+            vp = serialization::void_downcast(
+                *true_type, 
+                *this_type, 
+                static_cast<const void *>(&t)
+            );
+            if(NULL == vp){
+                pdalboost::serialization::throw_exception(
+                    archive_exception(
+                        archive_exception::unregistered_cast,
+                        true_type->get_debug_info(),
+                        this_type->get_debug_info()
+                    )
+                );
+            }
+
+            // since true_type is valid, and this only gets made if the 
+            // pointer oserializer object has been created, this should never
+            // fail
+            const basic_pointer_oserializer * bpos
+                = static_cast<const basic_pointer_oserializer *>(
+                    pdalboost::serialization::singleton<
+                        archive_serializer_map<Archive>
+                    >::get_const_instance().find(*true_type)
+                );
+            BOOST_ASSERT(NULL != bpos);
+            if(NULL == bpos)
+                pdalboost::serialization::throw_exception(
+                    archive_exception(
+                        archive_exception::unregistered_class,
+                        "derived class not registered or exported"
+                    )
+                );
+            ar.save_pointer(vp, bpos);
+        }
+    };
+
+    template<class T>
+    static void save(
+        Archive & ar, 
+        const T & t
+    ){
+        check_pointer_level< T >();
+        check_pointer_tracking< T >();
+        typedef typename mpl::eval_if<
+            is_polymorphic< T >,
+            mpl::identity<polymorphic>,
+            mpl::identity<non_polymorphic>
+        >::type type;
+        type::save(ar, const_cast<T &>(t));
+    }
+
+    template<class TPtr>
+    static void invoke(Archive &ar, const TPtr t){
+        register_type(ar, * t);
+        if(NULL == t){
+            basic_oarchive & boa 
+                = pdalboost::serialization::smart_cast_reference<basic_oarchive &>(ar);
+            boa.save_null_pointer();
+            save_access::end_preamble(ar);
+            return;
+        }
+        save(ar, * t);
+    }
+};
+
+template<class Archive>
+struct save_enum_type
+{
+    template<class T>
+    static void invoke(Archive &ar, const T &t){
+        // convert enum to integers on save
+        const int i = static_cast<int>(t);
+        ar << pdalboost::serialization::make_nvp(NULL, i);
+    }
+};
+
+template<class Archive>
+struct save_array_type
+{
+    template<class T>
+    static void invoke(Archive &ar, const T &t){
+        typedef typename pdalboost::remove_extent< T >::type value_type;
+        
+        save_access::end_preamble(ar);
+        // consider alignment
+        std::size_t c = sizeof(t) / (
+            static_cast<const char *>(static_cast<const void *>(&t[1])) 
+            - static_cast<const char *>(static_cast<const void *>(&t[0]))
+        );
+        pdalboost::serialization::collection_size_type count(c);
+        ar << BOOST_SERIALIZATION_NVP(count);
+        ar << serialization::make_array(static_cast<value_type const*>(&t[0]),count);
+    }
+};
+
+} // detail
+
+template<class Archive, class T>
+inline void save(Archive & ar, /*const*/ T &t){
+    typedef 
+        typename mpl::eval_if<is_pointer< T >,
+            mpl::identity<detail::save_pointer_type<Archive> >,
+        //else
+        typename mpl::eval_if<is_enum< T >,
+            mpl::identity<detail::save_enum_type<Archive> >,
+        //else
+        typename mpl::eval_if<is_array< T >,
+            mpl::identity<detail::save_array_type<Archive> >,
+        //else
+            mpl::identity<detail::save_non_pointer_type<Archive> >
+        >
+        >
+        >::type typex;
+    typex::invoke(ar, t);
+}
+
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_OSERIALIZER_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/register_archive.hpp b/vendor/pdalboost/boost/archive/detail/register_archive.hpp
new file mode 100644
index 0000000..5f50b75
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/register_archive.hpp
@@ -0,0 +1,91 @@
+// Copyright David Abrahams 2006. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_ARCHIVE_DETAIL_REGISTER_ARCHIVE_DWA2006521_HPP
+# define BOOST_ARCHIVE_DETAIL_REGISTER_ARCHIVE_DWA2006521_HPP
+
+namespace pdalboost { namespace archive { namespace detail { 
+
+// No instantiate_ptr_serialization overloads generated by
+// BOOST_SERIALIZATION_REGISTER_ARCHIVE that lexically follow the call
+// will be seen *unless* they are in an associated namespace of one of
+// the arguments, so we pass one of these along to make sure this
+// namespace is considered.  See temp.dep.candidate (14.6.4.2) in the
+// standard.
+struct adl_tag {};
+
+template <class Archive, class Serializable>
+struct ptr_serialization_support;
+
+// We could've just used ptr_serialization_support, above, but using
+// it with only a forward declaration causes vc6/7 to complain about a
+// missing instantiate member, even if it has one.  This is just a
+// friendly layer of indirection.
+template <class Archive, class Serializable>
+struct _ptr_serialization_support
+  : ptr_serialization_support<Archive,Serializable>
+{
+    typedef int type;
+};
+
+#if defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x5130)
+
+template<int N>
+struct counter : counter<N-1> {};
+template<>
+struct counter<0> {};
+
+template<class Serializable>
+void instantiate_ptr_serialization(Serializable* s, int, adl_tag) {
+    instantiate_ptr_serialization(s, counter<20>());
+}
+
+template<class Archive>
+struct get_counter {
+    static const int value = sizeof(adjust_counter(counter<20>()));
+    typedef counter<value> type;
+    typedef counter<value - 1> prior;
+    typedef char (&next)[value+1];
+};
+
+char adjust_counter(counter<0>);
+template<class Serializable>
+void instantiate_ptr_serialization(Serializable*, counter<0>) {}
+
+#define BOOST_SERIALIZATION_REGISTER_ARCHIVE(Archive)                     \
+namespace pdalboost { namespace archive { namespace detail {                  \
+    get_counter<Archive >::next adjust_counter(get_counter<Archive >::type);\
+    template<class Serializable>                                          \
+    void instantiate_ptr_serialization(Serializable* s,                   \
+        get_counter<Archive >::type) {                                    \
+        ptr_serialization_support<Archive, Serializable> x;               \
+        instantiate_ptr_serialization(s, get_counter<Archive >::prior()); \
+    }\
+}}}
+
+
+#else
+
+// This function gets called, but its only purpose is to participate
+// in overload resolution with the functions declared by
+// BOOST_SERIALIZATION_REGISTER_ARCHIVE, below.
+template <class Serializable>
+void instantiate_ptr_serialization(Serializable*, int, adl_tag ) {}
+
+// The function declaration generated by this macro never actually
+// gets called, but its return type gets instantiated, and that's
+// enough to cause registration of serialization functions between
+// Archive and any exported Serializable type.  See also:
+// boost/serialization/export.hpp
+# define BOOST_SERIALIZATION_REGISTER_ARCHIVE(Archive)                  \
+namespace pdalboost { namespace archive { namespace detail {                \
+                                                                        \
+template <class Serializable>                                           \
+typename _ptr_serialization_support<Archive, Serializable>::type  \
+instantiate_ptr_serialization( Serializable*, Archive*, adl_tag );              \
+                                                                        \
+}}}
+#endif
+}}} // namespace pdalboost::archive::detail
+
+#endif // BOOST_ARCHIVE_DETAIL_INSTANTIATE_SERIALIZE_DWA2006521_HPP
diff --git a/vendor/pdalboost/boost/archive/detail/utf8_codecvt_facet.hpp b/vendor/pdalboost/boost/archive/detail/utf8_codecvt_facet.hpp
new file mode 100644
index 0000000..7cb5ea0
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/detail/utf8_codecvt_facet.hpp
@@ -0,0 +1,23 @@
+// Copyright (c) 2001 Ronald Garcia, Indiana University (garcia at osl.iu.edu)
+// Andrew Lumsdaine, Indiana University (lums at osl.iu.edu).
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP
+#define BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP
+
+#ifdef BOOST_NO_CXX11_HDR_CODECVT
+    #define BOOST_UTF8_BEGIN_NAMESPACE \
+         namespace pdalboost { namespace archive { namespace detail {
+    #define BOOST_UTF8_DECL
+    #define BOOST_UTF8_END_NAMESPACE }}}
+
+    #include <boost/detail/utf8_codecvt_facet.hpp>
+
+    #undef BOOST_UTF8_END_NAMESPACE
+    #undef BOOST_UTF8_DECL
+    #undef BOOST_UTF8_BEGIN_NAMESPACE
+#endif // BOOST_NO_CXX11_HDR_CODECVT
+#endif // BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP
+
diff --git a/vendor/pdalboost/boost/archive/dinkumware.hpp b/vendor/pdalboost/boost/archive/dinkumware.hpp
new file mode 100644
index 0000000..5df2a5f
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/dinkumware.hpp
@@ -0,0 +1,224 @@
+#ifndef BOOST_ARCHIVE_DINKUMWARE_HPP
+#define BOOST_ARCHIVE_DINKUMWARE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// dinkumware.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// this file adds a couple of things that are missing from the dinkumware
+// implementation of the standard library.
+
+#include <iterator>
+#include <string>
+
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+
+namespace std {
+
+// define i/o operators for 64 bit integers
+template<class CharType>
+basic_ostream<CharType> & 
+operator<<(basic_ostream<CharType> & os, pdalboost::uint64_t t){
+    // octal rendering of 64 bit number would be 22 octets + eos
+    CharType d[23];
+    unsigned int radix;
+
+    if(os.flags() & (int)std::ios_base::hex)
+        radix = 16;
+    else
+    if(os.flags() & (int)std::ios_base::oct)
+        radix = 8;
+    else
+    //if(s.flags() & (int)std::ios_base::dec)
+        radix =  10;
+    unsigned int i = 0;
+    do{
+        unsigned int j = t % radix;
+        d[i++] = j + ((j < 10) ? '0' : ('a' - 10));
+        t /= radix;
+    }
+    while(t > 0);
+    d[i--] = '\0';
+
+    // reverse digits
+    unsigned int j = 0;
+    while(j < i){
+        CharType k = d[i];
+        d[i] = d[j];
+        d[j] = k;
+        --i;++j;
+    }
+    os << d;
+    return os;
+
+}
+
+template<class CharType>
+basic_ostream<CharType> & 
+operator<<(basic_ostream<CharType> &os, pdalboost::int64_t t){
+    if(0 <= t){
+        os << static_cast<pdalboost::uint64_t>(t);
+    }
+    else{
+        os.put('-');
+        os << -t;
+    }
+    return os;
+}
+
+template<class CharType>
+basic_istream<CharType> & 
+operator>>(basic_istream<CharType> &is, pdalboost::int64_t & t){
+    CharType d;
+    do{
+        d = is.get();
+    }
+    while(::isspace(d));
+    bool negative = (d == '-');
+    if(negative)
+        d = is.get();
+    unsigned int radix;
+    if(is.flags() & (int)std::ios_base::hex)
+        radix = 16;
+    else
+    if(is.flags() & (int)std::ios_base::oct)
+        radix = 8;
+    else
+    //if(s.flags() & (int)std::ios_base::dec)
+        radix =  10;
+    t = 0;
+    do{
+        if('0' <= d && d <= '9')
+            t = t * radix + (d - '0');
+        else
+        if('a' <= d && d <= 'f')
+            t = t * radix + (d - 'a' + 10);
+        else
+            break;
+        d = is.get();
+    }
+    while(!is.fail());
+    // restore the delimiter
+    is.putback(d);
+    is.clear();
+    if(negative)
+        t = -t;
+    return is;
+}
+
+template<class CharType>
+basic_istream<CharType> & 
+operator>>(basic_istream<CharType> &is, pdalboost::uint64_t & t){
+    pdalboost::int64_t it;
+    is >> it;
+    t = it;
+    return is;
+}
+
+//#endif
+
+template<>
+class back_insert_iterator<basic_string<char> > : public 
+    iterator<output_iterator_tag, char>
+{
+public:
+    typedef basic_string<char> container_type;
+    typedef container_type::reference reference;
+
+    explicit back_insert_iterator(container_type & s)
+        : container(& s)
+    {}    // construct with container
+    
+    back_insert_iterator<container_type> & operator=(
+        container_type::const_reference Val_
+    ){    // push value into container
+        //container->push_back(Val_);
+        *container += Val_;
+        return (*this);
+    }
+
+    back_insert_iterator<container_type> & operator*(){
+        return (*this);
+    }
+
+    back_insert_iterator<container_type> & operator++(){
+        // pretend to preincrement
+        return (*this);
+    }
+
+    back_insert_iterator<container_type> operator++(int){
+        // pretend to postincrement
+        return (*this);
+    }
+
+protected:
+    container_type *container;    // pointer to container
+};
+
+template<char> 
+inline back_insert_iterator<basic_string<char> > back_inserter(
+    basic_string<char> & s
+){
+    return (std::back_insert_iterator<basic_string<char> >(s));
+}
+
+template<>
+class back_insert_iterator<basic_string<wchar_t> > : public 
+    iterator<output_iterator_tag, wchar_t>
+{
+public:
+    typedef basic_string<wchar_t> container_type;
+    typedef container_type::reference reference;
+
+    explicit back_insert_iterator(container_type & s)
+        : container(& s)
+    {}    // construct with container
+    
+    back_insert_iterator<container_type> & operator=(
+        container_type::const_reference Val_
+    ){    // push value into container
+        //container->push_back(Val_);
+        *container += Val_;
+        return (*this);
+    }
+
+    back_insert_iterator<container_type> & operator*(){
+        return (*this);
+    }
+
+    back_insert_iterator<container_type> & operator++(){
+        // pretend to preincrement
+        return (*this);
+    }
+
+    back_insert_iterator<container_type> operator++(int){
+        // pretend to postincrement
+        return (*this);
+    }
+
+protected:
+    container_type *container;    // pointer to container
+};
+
+template<wchar_t> 
+inline back_insert_iterator<basic_string<wchar_t> > back_inserter(
+    basic_string<wchar_t> & s
+){
+    return (std::back_insert_iterator<basic_string<wchar_t> >(s));
+}
+
+} // namespace std
+
+#endif //BOOST_ARCHIVE_DINKUMWARE_HPP
diff --git a/vendor/pdalboost/boost/archive/impl/archive_serializer_map.ipp b/vendor/pdalboost/boost/archive/impl/archive_serializer_map.ipp
new file mode 100644
index 0000000..433d6a8
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/archive_serializer_map.ipp
@@ -0,0 +1,71 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// archive_serializer_map.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+//////////////////////////////////////////////////////////////////////
+// implementation of basic_text_iprimitive overrides for the combination
+// of template parameters used to implement a text_iprimitive
+
+#include <boost/config.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+#include <boost/archive/detail/basic_serializer_map.hpp>
+#include <boost/serialization/singleton.hpp>
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace extra_detail { // anon
+    template<class Archive>
+    class map : public basic_serializer_map 
+    {};
+}
+
+#ifdef BOOST_MSVC
+#  pragma warning(pop)
+#endif
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL bool
+archive_serializer_map<Archive>::insert(const basic_serializer * bs){
+    return pdalboost::serialization::singleton<
+        extra_detail::map<Archive>
+    >::get_mutable_instance().insert(bs);
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+archive_serializer_map<Archive>::erase(const basic_serializer * bs){
+    if(pdalboost::serialization::singleton<
+        extra_detail::map<Archive>
+    >::is_destroyed())
+        return;
+    pdalboost::serialization::singleton<
+        extra_detail::map<Archive>
+    >::get_mutable_instance().erase(bs);
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL const basic_serializer *
+archive_serializer_map<Archive>::find(
+    const pdalboost::serialization::extended_type_info & eti
+) {
+    return pdalboost::serialization::singleton<
+        extra_detail::map<Archive>
+    >::get_const_instance().find(eti);
+}
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/boost/archive/impl/basic_binary_iarchive.ipp b/vendor/pdalboost/boost/archive/impl/basic_binary_iarchive.ipp
new file mode 100644
index 0000000..ffef39d
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/basic_binary_iarchive.ipp
@@ -0,0 +1,134 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_iarchive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+#include <string>
+#include <boost/assert.hpp>
+#include <algorithm>
+#include <cstring>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::memcpy; 
+    using ::strlen;
+    using ::size_t;
+}
+#endif
+
+#include <boost/detail/workaround.hpp>
+#include <boost/detail/endian.hpp>
+
+#include <boost/archive/basic_binary_iarchive.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implementation of binary_binary_archive
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_binary_iarchive<Archive>::load_override(class_name_type & t){
+    std::string cn;
+    cn.reserve(BOOST_SERIALIZATION_MAX_KEY_SIZE);
+    load_override(cn);
+    if(cn.size() > (BOOST_SERIALIZATION_MAX_KEY_SIZE - 1))
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::invalid_class_name)
+        );
+    std::memcpy(t, cn.data(), cn.size());
+    // borland tweak
+    t.t[cn.size()] = '\0';
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_binary_iarchive<Archive>::init(void){
+    // read signature in an archive version independent manner
+    std::string file_signature;
+    
+    #if 0 // commented out since it interfers with derivation
+    BOOST_TRY {
+        std::size_t l;
+        this->This()->load(l);
+        if(l == std::strlen(BOOST_ARCHIVE_SIGNATURE())) {
+            // borland de-allocator fixup
+            #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+            if(NULL != file_signature.data())
+            #endif
+                file_signature.resize(l);
+            // note breaking a rule here - could be a problem on some platform
+            if(0 < l)
+                this->This()->load_binary(&(*file_signature.begin()), l);
+        }
+    }
+    BOOST_CATCH(archive_exception const &) {  // catch stream_error archive exceptions
+        // will cause invalid_signature archive exception to be thrown below
+        file_signature = "";   
+    }
+    BOOST_CATCH_END
+    #else
+    // https://svn.boost.org/trac/boost/ticket/7301
+    * this->This() >> file_signature;
+    #endif
+
+    if(file_signature != BOOST_ARCHIVE_SIGNATURE())
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::invalid_signature)
+        );
+
+    // make sure the version of the reading archive library can
+    // support the format of the archive being read
+    library_version_type input_library_version;
+    //* this->This() >> input_library_version;
+    {
+        int v = 0;
+        v = this->This()->m_sb.sbumpc();
+        #if defined(BOOST_LITTLE_ENDIAN)
+        if(v < 6){
+            ;
+        }
+        else
+        if(v < 7){
+            // version 6 - next byte should be zero
+            this->This()->m_sb.sbumpc();
+        }
+        else
+        if(v < 8){
+            int x1;
+            // version 7 = might be followed by zero or some other byte
+            x1 = this->This()->m_sb.sgetc();
+            // it's =a zero, push it back
+            if(0 == x1)
+                this->This()->m_sb.sbumpc();
+        }
+        else{
+            // version 8+ followed by a zero
+            this->This()->m_sb.sbumpc();
+        }
+        #elif defined(BOOST_BIG_ENDIAN)
+        if(v == 0)
+            v = this->This()->m_sb.sbumpc();
+        #endif
+        input_library_version = static_cast<library_version_type>(v);
+    }
+    
+    #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
+    this->set_library_version(input_library_version);
+    #else
+    detail::basic_iarchive::set_library_version(input_library_version);
+    #endif
+    
+    if(BOOST_ARCHIVE_VERSION() < input_library_version)
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::unsupported_version)
+        );
+}
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/boost/archive/impl/basic_binary_iprimitive.ipp b/vendor/pdalboost/boost/archive/impl/basic_binary_iprimitive.ipp
new file mode 100644
index 0000000..0eb1b34
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/basic_binary_iprimitive.ipp
@@ -0,0 +1,210 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_iprimitive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/assert.hpp>
+#include <cstddef> // size_t, NULL
+#include <cstring> // memcpy
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t;
+    using ::memcpy;
+} // namespace std
+#endif
+
+#include <boost/detail/workaround.hpp> // fixup for RogueWave
+
+#include <boost/serialization/throw_exception.hpp>
+
+#include <boost/core/no_exceptions_support.hpp>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/archive/codecvt_null.hpp>
+#include <boost/archive/add_facet.hpp>
+#include <boost/archive/basic_binary_iprimitive.hpp> 
+
+namespace pdalboost {
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of basic_binary_iprimitive
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_binary_iprimitive<Archive, Elem, Tr>::init()
+{
+    // Detect  attempts to pass native binary archives across
+    // incompatible platforms. This is not fool proof but its
+    // better than nothing.
+    unsigned char size;
+    this->This()->load(size);
+    if(sizeof(int) != size)
+        pdalboost::serialization::throw_exception(
+            archive_exception(
+                archive_exception::incompatible_native_format,
+                "size of int"
+            )
+        );
+    this->This()->load(size);
+    if(sizeof(long) != size)
+        pdalboost::serialization::throw_exception(
+            archive_exception(
+                archive_exception::incompatible_native_format,
+                "size of long"
+            )
+        );
+    this->This()->load(size);
+    if(sizeof(float) != size)
+        pdalboost::serialization::throw_exception(
+            archive_exception(
+                archive_exception::incompatible_native_format,
+                "size of float"
+            )
+        );
+    this->This()->load(size);
+    if(sizeof(double) != size)
+        pdalboost::serialization::throw_exception(
+            archive_exception(
+                archive_exception::incompatible_native_format,
+                "size of double"
+            )
+        );
+
+    // for checking endian
+    int i;
+    this->This()->load(i);
+    if(1 != i)
+        pdalboost::serialization::throw_exception(
+            archive_exception(
+                archive_exception::incompatible_native_format,
+                "endian setting"
+            )
+        );
+}
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_binary_iprimitive<Archive, Elem, Tr>::load(wchar_t * ws)
+{
+    std::size_t l; // number of wchar_t !!!
+    this->This()->load(l);
+    load_binary(ws, l * sizeof(wchar_t) / sizeof(char));
+    ws[l] = L'\0';
+}
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_binary_iprimitive<Archive, Elem, Tr>::load(std::string & s)
+{
+    std::size_t l;
+    this->This()->load(l);
+    // borland de-allocator fixup
+    #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+    if(NULL != s.data())
+    #endif
+        s.resize(l);
+    // note breaking a rule here - could be a problem on some platform
+    if(0 < l)
+        load_binary(&(*s.begin()), l);
+}
+
+#ifndef BOOST_NO_CWCHAR
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_binary_iprimitive<Archive, Elem, Tr>::load(char * s)
+{
+    std::size_t l;
+    this->This()->load(l);
+    load_binary(s, l);
+    s[l] = '\0';
+}
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_binary_iprimitive<Archive, Elem, Tr>::load(std::wstring & ws)
+{
+    std::size_t l;
+    this->This()->load(l);
+    // borland de-allocator fixup
+    #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+    if(NULL != ws.data())
+    #endif
+        ws.resize(l);
+    // note breaking a rule here - is could be a problem on some platform
+    load_binary(const_cast<wchar_t *>(ws.data()), l * sizeof(wchar_t) / sizeof(char));
+}
+#endif
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL
+basic_binary_iprimitive<Archive, Elem, Tr>::basic_binary_iprimitive(
+    std::basic_streambuf<Elem, Tr> & sb, 
+    bool no_codecvt
+) :
+#ifndef BOOST_NO_STD_LOCALE
+    m_sb(sb),
+    locale_saver(m_sb)
+{
+    if(! no_codecvt){
+        archive_locale.reset(
+            add_facet(
+                std::locale::classic(),
+                new codecvt_null<Elem>
+            )
+        );
+        //m_sb.pubimbue(* archive_locale);
+    }
+}
+#else
+    m_sb(sb)
+{}
+#endif
+
+// some libraries including stl and libcomo fail if the
+// buffer isn't flushed before the code_cvt facet is changed.
+// I think this is a bug.  We explicity invoke sync to when
+// we're done with the streambuf to work around this problem.
+// Note that sync is a protected member of stream buff so we
+// have to invoke it through a contrived derived class.
+namespace detail {
+// note: use "using" to get past msvc bug
+using namespace std;
+template<class Elem, class Tr>
+class input_streambuf_access : public std::basic_streambuf<Elem, Tr> {
+    public:
+        virtual int sync(){
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
+            return this->basic_streambuf::sync();
+#else
+            return this->basic_streambuf<Elem, Tr>::sync();
+#endif
+        }
+};
+} // detail
+
+// scoped_ptr requires that archive_locale be a complete type at time of
+// destruction so define destructor here rather than in the header
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL
+basic_binary_iprimitive<Archive, Elem, Tr>::~basic_binary_iprimitive(){
+    // push back unread characters
+    //destructor can't throw !
+    BOOST_TRY{
+        static_cast<detail::input_streambuf_access<Elem, Tr> &>(m_sb).sync();
+    }
+    BOOST_CATCH(...){
+    }
+    BOOST_CATCH_END
+}
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/boost/archive/impl/basic_binary_oarchive.ipp b/vendor/pdalboost/boost/archive/impl/basic_binary_oarchive.ipp
new file mode 100644
index 0000000..cb453e2
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/basic_binary_oarchive.ipp
@@ -0,0 +1,42 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_oarchive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+#include <string>
+#include <boost/assert.hpp>
+#include <algorithm>
+#include <cstring>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::memcpy; 
+}
+#endif
+
+#include <boost/archive/basic_binary_oarchive.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implementation of binary_binary_oarchive
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_binary_oarchive<Archive>::init(){
+    // write signature in an archive version independent manner
+    const std::string file_signature(BOOST_ARCHIVE_SIGNATURE());
+    * this->This() << file_signature;
+    // write library version
+    const library_version_type v(BOOST_ARCHIVE_VERSION());
+    * this->This() << v;
+}
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/boost/archive/impl/basic_binary_oprimitive.ipp b/vendor/pdalboost/boost/archive/impl/basic_binary_oprimitive.ipp
new file mode 100644
index 0000000..cd01bac
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/basic_binary_oprimitive.ipp
@@ -0,0 +1,162 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_binary_oprimitive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <ostream>
+#include <cstddef> // NULL
+#include <cstring>
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_NO_STDC_NAMESPACE) && ! defined(__LIBCOMO__)
+namespace std{ 
+    using ::strlen; 
+} // namespace std
+#endif
+
+#ifndef BOOST_NO_CWCHAR
+#include <cwchar>
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::wcslen; }
+#endif
+#endif
+
+#include <boost/detail/workaround.hpp>
+
+#include <boost/archive/add_facet.hpp>
+#include <boost/archive/codecvt_null.hpp>
+#include <boost/archive/basic_binary_oprimitive.hpp>
+#include <boost/core/no_exceptions_support.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of basic_binary_oprimitive
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_binary_oprimitive<Archive, Elem, Tr>::init()
+{
+    // record native sizes of fundamental types
+    // this is to permit detection of attempts to pass
+    // native binary archives accross incompatible machines.
+    // This is not foolproof but its better than nothing.
+    this->This()->save(static_cast<unsigned char>(sizeof(int)));
+    this->This()->save(static_cast<unsigned char>(sizeof(long)));
+    this->This()->save(static_cast<unsigned char>(sizeof(float)));
+    this->This()->save(static_cast<unsigned char>(sizeof(double)));
+    // for checking endianness
+    this->This()->save(int(1));
+}
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_binary_oprimitive<Archive, Elem, Tr>::save(const char * s)
+{
+    std::size_t l = std::strlen(s);
+    this->This()->save(l);
+    save_binary(s, l);
+}
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_binary_oprimitive<Archive, Elem, Tr>::save(const std::string &s)
+{
+    std::size_t l = static_cast<std::size_t>(s.size());
+    this->This()->save(l);
+    save_binary(s.data(), l);
+}
+
+#ifndef BOOST_NO_CWCHAR
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_binary_oprimitive<Archive, Elem, Tr>::save(const wchar_t * ws)
+{
+    std::size_t l = std::wcslen(ws);
+    this->This()->save(l);
+    save_binary(ws, l * sizeof(wchar_t) / sizeof(char));
+}
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_binary_oprimitive<Archive, Elem, Tr>::save(const std::wstring &ws)
+{
+    std::size_t l = ws.size();
+    this->This()->save(l);
+    save_binary(ws.data(), l * sizeof(wchar_t) / sizeof(char));
+}
+#endif
+
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL
+basic_binary_oprimitive<Archive, Elem, Tr>::basic_binary_oprimitive(
+    std::basic_streambuf<Elem, Tr> & sb, 
+    bool no_codecvt
+) : 
+#ifndef BOOST_NO_STD_LOCALE
+    m_sb(sb),
+    locale_saver(m_sb)
+{
+    if(! no_codecvt){
+        archive_locale.reset(
+            add_facet(
+                std::locale::classic(),
+                new codecvt_null<Elem>
+            )
+        );
+        //m_sb.pubimbue(* archive_locale);
+    }
+}
+#else
+    m_sb(sb)
+{}
+#endif
+
+// some libraries including stl and libcomo fail if the
+// buffer isn't flushed before the code_cvt facet is changed.
+// I think this is a bug.  We explicity invoke sync to when
+// we're done with the streambuf to work around this problem.
+// Note that sync is a protected member of stream buff so we
+// have to invoke it through a contrived derived class.
+namespace detail {
+// note: use "using" to get past msvc bug
+using namespace std;
+template<class Elem, class Tr>
+class output_streambuf_access : public std::basic_streambuf<Elem, Tr> {
+    public:
+        virtual int sync(){
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))
+            return this->basic_streambuf::sync();
+#else
+            return this->basic_streambuf<Elem, Tr>::sync();
+#endif
+        }
+};
+} // detail
+
+// scoped_ptr requires that g be a complete type at time of
+// destruction so define destructor here rather than in the header
+template<class Archive, class Elem, class Tr>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL
+basic_binary_oprimitive<Archive, Elem, Tr>::~basic_binary_oprimitive(){
+    // flush buffer
+    //destructor can't throw
+    BOOST_TRY{
+        static_cast<detail::output_streambuf_access<Elem, Tr> &>(m_sb).sync();
+    }
+    BOOST_CATCH(...){
+    }
+    BOOST_CATCH_END
+}
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/boost/archive/impl/basic_text_iarchive.ipp b/vendor/pdalboost/boost/archive/impl/basic_text_iarchive.ipp
new file mode 100644
index 0000000..e50ff97
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/basic_text_iarchive.ipp
@@ -0,0 +1,76 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_iarchive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+#include <string>
+#include <algorithm>
+#include <cstring>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::memcpy; 
+}
+#endif
+
+#include <boost/detail/workaround.hpp>
+#include <boost/serialization/string.hpp>
+#include <boost/archive/basic_text_iarchive.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implementation of text_text_archive
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_text_iarchive<Archive>::load_override(class_name_type & t){
+    std::string cn;
+    cn.reserve(BOOST_SERIALIZATION_MAX_KEY_SIZE);
+    load_override(cn);
+    if(cn.size() > (BOOST_SERIALIZATION_MAX_KEY_SIZE - 1))
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::invalid_class_name)
+        );
+    std::memcpy(t, cn.data(), cn.size());
+    // borland tweak
+    t.t[cn.size()] = '\0';
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_text_iarchive<Archive>::init(void){
+    // read signature in an archive version independent manner
+    std::string file_signature;
+    * this->This() >> file_signature;
+    if(file_signature != BOOST_ARCHIVE_SIGNATURE())
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::invalid_signature)
+        );
+
+    // make sure the version of the reading archive library can
+    // support the format of the archive being read
+    library_version_type input_library_version;
+    * this->This() >> input_library_version;
+
+    #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
+    this->set_library_version(input_library_version);
+    #else
+    detail::basic_iarchive::set_library_version(input_library_version);
+    #endif
+
+    // extra little .t is to get around borland quirk
+    if(BOOST_ARCHIVE_VERSION() < input_library_version)
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::unsupported_version)
+        );
+}
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/boost/archive/impl/basic_text_iprimitive.ipp b/vendor/pdalboost/boost/archive/impl/basic_text_iprimitive.ipp
new file mode 100644
index 0000000..26ee52a
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/basic_text_iprimitive.ipp
@@ -0,0 +1,146 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_iprimitive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // size_t
+#include <cstddef> // NULL
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+} // namespace std
+#endif
+
+#include <boost/serialization/throw_exception.hpp>
+
+#include <boost/archive/basic_text_iprimitive.hpp>
+#include <boost/archive/codecvt_null.hpp>
+#include <boost/archive/add_facet.hpp>
+
+#include <boost/archive/iterators/remove_whitespace.hpp>
+#include <boost/archive/iterators/istream_iterator.hpp>
+#include <boost/archive/iterators/binary_from_base64.hpp>
+#include <boost/archive/iterators/transform_width.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+namespace detail {
+    template<class CharType>
+    static inline bool is_whitespace(CharType c);
+
+    template<>
+    inline bool is_whitespace(char t){
+        return 0 != std::isspace(t);
+    }
+
+    #ifndef BOOST_NO_CWCHAR
+    template<>
+    inline bool is_whitespace(wchar_t t){
+        return 0 != std::iswspace(t);
+    }
+    #endif
+} // detail
+
+// translate base64 text into binary and copy into buffer
+// until buffer is full.
+template<class IStream>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_text_iprimitive<IStream>::load_binary(
+    void *address, 
+    std::size_t count
+){
+    typedef typename IStream::char_type CharType;
+    
+    if(0 == count)
+        return;
+        
+    BOOST_ASSERT(
+        static_cast<std::size_t>((std::numeric_limits<std::streamsize>::max)())
+        > (count + sizeof(CharType) - 1)/sizeof(CharType)
+    );
+        
+    if(is.fail())
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::input_stream_error)
+        );
+    // convert from base64 to binary
+    typedef typename
+        iterators::transform_width<
+            iterators::binary_from_base64<
+                iterators::remove_whitespace<
+                    iterators::istream_iterator<CharType>
+                >
+                ,CharType
+            >
+            ,8
+            ,6
+            ,CharType
+        > 
+        binary;
+        
+    binary i = binary(iterators::istream_iterator<CharType>(is));
+
+    char * caddr = static_cast<char *>(address);
+    
+    // take care that we don't increment anymore than necessary
+    while(count-- > 0){
+        *caddr++ = static_cast<char>(*i++);
+    }
+
+    // skip over any excess input
+    for(;;){
+        typename IStream::int_type r;
+        r = is.get();
+        if(is.eof())
+            break;
+        if(detail::is_whitespace(static_cast<CharType>(r)))
+            break;
+    }
+}
+    
+template<class IStream>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL
+basic_text_iprimitive<IStream>::basic_text_iprimitive(
+    IStream  &is_,
+    bool no_codecvt
+) :
+#ifndef BOOST_NO_STD_LOCALE
+    is(is_),
+    flags_saver(is_),
+    precision_saver(is_),
+    locale_saver(* is_.rdbuf())
+{
+    if(! no_codecvt){
+        archive_locale.reset(
+            add_facet(
+                std::locale::classic(),
+                new pdalboost::archive::codecvt_null<typename IStream::char_type>
+            )
+        );
+        //is.imbue(* archive_locale);
+    }
+    is >> std::noboolalpha;
+}
+#else
+    is(is_),
+    flags_saver(is_),
+    precision_saver(is_)
+{}
+#endif
+
+template<class IStream>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL
+basic_text_iprimitive<IStream>::~basic_text_iprimitive(){
+    is.sync();
+}
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/boost/archive/impl/basic_text_oarchive.ipp b/vendor/pdalboost/boost/archive/impl/basic_text_oarchive.ipp
new file mode 100644
index 0000000..baf6c3b
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/basic_text_oarchive.ipp
@@ -0,0 +1,62 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_oarchive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+#include <string>
+#include <boost/assert.hpp>
+#include <cstring>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::memcpy; 
+}
+#endif
+
+#include <boost/archive/basic_text_oarchive.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implementation of basic_text_oarchive
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_text_oarchive<Archive>::newtoken()
+{
+    switch(delimiter){
+    default:
+        BOOST_ASSERT(false);
+        break;
+    case eol:
+        this->This()->put('\n');
+        delimiter = space;
+        break;
+    case space:
+        this->This()->put(' ');
+        break;
+    case none:
+        delimiter = space;
+        break;
+    }
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_text_oarchive<Archive>::init(){
+    // write signature in an archive version independent manner
+    const std::string file_signature(BOOST_ARCHIVE_SIGNATURE());
+    * this->This() << file_signature;
+    // write library version
+    const library_version_type v(BOOST_ARCHIVE_VERSION());
+    * this->This() << v;
+}
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/boost/archive/impl/basic_text_oprimitive.ipp b/vendor/pdalboost/boost/archive/impl/basic_text_oprimitive.ipp
new file mode 100644
index 0000000..3221940
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/basic_text_oprimitive.ipp
@@ -0,0 +1,113 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_oprimitive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // NULL
+#include <algorithm> // std::copy
+
+#include <boost/archive/basic_text_oprimitive.hpp>
+#include <boost/archive/codecvt_null.hpp>
+#include <boost/archive/add_facet.hpp>
+
+#include <boost/archive/iterators/base64_from_binary.hpp>
+#include <boost/archive/iterators/insert_linebreaks.hpp>
+#include <boost/archive/iterators/transform_width.hpp>
+#include <boost/archive/iterators/ostream_iterator.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+// translate to base64 and copy in to buffer.
+template<class OStream>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_text_oprimitive<OStream>::save_binary(
+    const void *address, 
+    std::size_t count
+){
+    typedef typename OStream::char_type CharType;
+    
+    if(0 == count)
+        return;
+    
+    if(os.fail())
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::output_stream_error)
+        );
+        
+    os.put('\n');
+    
+    typedef 
+        pdalboost::archive::iterators::insert_linebreaks<
+            pdalboost::archive::iterators::base64_from_binary<
+                pdalboost::archive::iterators::transform_width<
+                    const char *,
+                    6,
+                    8
+                >
+            > 
+            ,76
+            ,const char // cwpro8 needs this
+        > 
+        base64_text;
+
+    pdalboost::archive::iterators::ostream_iterator<CharType> oi(os);
+    std::copy(
+        base64_text(static_cast<const char *>(address)),
+        base64_text(
+            static_cast<const char *>(address) + count
+        ),
+        oi
+    );
+    
+    std::size_t tail = count % 3;
+    if(tail > 0){
+        *oi++ = '=';
+        if(tail < 2)
+            *oi = '=';
+    }
+}
+
+template<class OStream>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL
+basic_text_oprimitive<OStream>::basic_text_oprimitive(
+    OStream & os_,
+    bool no_codecvt
+) : 
+#ifndef BOOST_NO_STD_LOCALE
+    os(os_),
+    flags_saver(os_),
+    precision_saver(os_),
+    locale_saver(* os_.rdbuf())
+{
+    if(! no_codecvt){
+        archive_locale.reset(
+            add_facet(
+                std::locale::classic(),
+                new pdalboost::archive::codecvt_null<typename OStream::char_type>
+            )
+        );
+        //os.imbue(* archive_locale);
+    }
+    os << std::noboolalpha;
+}
+#else
+    os(os_),
+    flags_saver(os_),
+    precision_saver(os_)
+{}
+#endif
+
+template<class OStream>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL
+basic_text_oprimitive<OStream>::~basic_text_oprimitive(){
+    os << std::endl;
+}
+
+} //namespace pdalboost 
+} //namespace archive 
diff --git a/vendor/pdalboost/boost/archive/impl/basic_xml_grammar.hpp b/vendor/pdalboost/boost/archive/impl/basic_xml_grammar.hpp
new file mode 100644
index 0000000..7d1a092
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/basic_xml_grammar.hpp
@@ -0,0 +1,173 @@
+#ifndef BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP
+#define BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_grammar.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// this module is derived from simplexml.cpp - an example shipped as part of
+// the spirit parser.  This example contains the following notice:
+/*=============================================================================
+    simplexml.cpp
+
+    Spirit V1.3
+    URL: http://spirit.sourceforge.net/
+
+    Copyright (c) 2001, Daniel C. Nuffer
+
+    This software is provided 'as-is', without any express or implied
+    warranty. In no event will the copyright holder be held liable for
+    any damages arising from the use of this software.
+
+    Permission is granted to anyone to use this software for any purpose,
+    including commercial applications, and to alter it and redistribute
+    it freely, subject to the following restrictions:
+
+    1.  The origin of this software must not be misrepresented; you must
+        not claim that you wrote the original software. If you use this
+        software in a product, an acknowledgment in the product documentation
+        would be appreciated but is not required.
+
+    2.  Altered source versions must be plainly marked as such, and must
+        not be misrepresented as being the original software.
+
+    3.  This notice may not be removed or altered from any source
+        distribution.
+=============================================================================*/
+#include <string>
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/spirit/include/classic_rule.hpp>
+#include <boost/spirit/include/classic_chset.hpp>
+
+#include <boost/archive/basic_archive.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/version.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// XML grammar parsing
+
+template<class CharType>
+class basic_xml_grammar {
+public:
+    // The following is not necessary according to DR45, but at least
+    // one compiler (Compaq C++ 6.5 in strict_ansi mode) chokes otherwise.
+    struct return_values;
+    friend struct return_values;
+    
+private:
+    typedef typename std::basic_istream<CharType> IStream;
+    typedef typename std::basic_string<CharType> StringType;
+    typedef typename pdalboost::spirit::classic::chset<CharType> chset_t;
+    typedef typename pdalboost::spirit::classic::chlit<CharType> chlit_t;
+    typedef typename pdalboost::spirit::classic::scanner<
+        typename  std::basic_string<CharType>::iterator
+    > scanner_t;
+    typedef typename pdalboost::spirit::classic::rule<scanner_t> rule_t;
+    // Start grammar definition
+    rule_t    
+        Reference,
+        Eq, 
+        STag,
+        ETag,
+        LetterOrUnderscoreOrColon,
+        AttValue, 
+        CharRef1, 
+        CharRef2, 
+        CharRef, 
+        AmpRef,
+        LTRef,
+        GTRef,
+        AposRef,
+        QuoteRef,
+        CharData,
+        CharDataChars,
+        content,
+        AmpName,
+        LTName,
+        GTName,
+        ClassNameChar,
+        ClassName,
+        Name,
+        XMLDecl,
+        XMLDeclChars,
+        DocTypeDecl,
+        DocTypeDeclChars,
+        ClassIDAttribute,
+        ObjectIDAttribute,
+        ClassNameAttribute,
+        TrackingAttribute,
+        VersionAttribute,
+        UnusedAttribute,
+        Attribute,
+        SignatureAttribute,
+        SerializationWrapper,
+        NameHead,
+        NameTail,
+        AttributeList,
+        S;
+
+    // XML Character classes
+    chset_t
+        BaseChar,
+        Ideographic,
+        Char, 
+        Letter, 
+        Digit,
+        CombiningChar,
+        Extender, 
+        Sch,
+        NameChar;
+
+    void init_chset();
+
+    bool my_parse(
+        IStream & is,
+        const rule_t &rule_, 
+        const CharType delimiter = L'>'
+    ) const ;
+public:
+    struct return_values {
+        StringType object_name;
+        StringType contents;
+        //class_id_type class_id;
+        int_least16_t class_id;
+        //object_id_type object_id;
+        uint_least32_t object_id;
+        //version_type version;
+        unsigned int version;
+        tracking_type tracking_level;
+        StringType class_name;
+        return_values() :
+            version(0),
+            tracking_level(false)
+        {}
+    } rv;
+    bool parse_start_tag(IStream & is) /*const*/;
+    bool parse_end_tag(IStream & is) const;
+    bool parse_string(IStream & is, StringType & s) /*const*/;
+    void init(IStream & is);
+    void windup(IStream & is);
+    basic_xml_grammar();
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP
diff --git a/vendor/pdalboost/boost/archive/impl/basic_xml_iarchive.ipp b/vendor/pdalboost/boost/archive/impl/basic_xml_iarchive.ipp
new file mode 100644
index 0000000..9c57dc7
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/basic_xml_iarchive.ipp
@@ -0,0 +1,114 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_iarchive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/assert.hpp>
+#include <cstddef> // NULL
+#include <algorithm>
+
+#include <boost/serialization/throw_exception.hpp>
+#include <boost/archive/xml_archive_exception.hpp>
+#include <boost/archive/basic_xml_iarchive.hpp>
+#include <boost/serialization/tracking.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implementation of xml_text_archive
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_iarchive<Archive>::load_start(const char *name){
+    // if there's no name
+    if(NULL == name)
+        return;
+    bool result = this->This()->gimpl->parse_start_tag(this->This()->get_is());
+    if(true != result){
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::input_stream_error)
+        );
+    }
+    // don't check start tag at highest level
+    ++depth;
+    return;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_iarchive<Archive>::load_end(const char *name){
+    // if there's no name
+    if(NULL == name)
+        return;
+    bool result = this->This()->gimpl->parse_end_tag(this->This()->get_is());
+    if(true != result){
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::input_stream_error)
+        );
+    }
+    
+    // don't check start tag at highest level
+    if(0 == --depth)
+        return;
+        
+    if(0 == (this->get_flags() & no_xml_tag_checking)){
+        // double check that the tag matches what is expected - useful for debug
+        if(0 != name[this->This()->gimpl->rv.object_name.size()]
+        || ! std::equal(
+                this->This()->gimpl->rv.object_name.begin(),
+                this->This()->gimpl->rv.object_name.end(),
+                name
+            )
+        ){
+            pdalboost::serialization::throw_exception(
+                xml_archive_exception(
+                    xml_archive_exception::xml_archive_tag_mismatch,
+                    name
+                )
+            );
+        }
+    }
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_iarchive<Archive>::load_override(object_id_type & t){
+    t = object_id_type(this->This()->gimpl->rv.object_id);
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_iarchive<Archive>::load_override(version_type & t){
+    t = version_type(this->This()->gimpl->rv.version);
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_iarchive<Archive>::load_override(class_id_type & t){
+    t = class_id_type(this->This()->gimpl->rv.class_id);
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_iarchive<Archive>::load_override(tracking_type & t){
+    t = this->This()->gimpl->rv.tracking_level;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL
+basic_xml_iarchive<Archive>::basic_xml_iarchive(unsigned int flags) :
+    detail::common_iarchive<Archive>(flags),
+    depth(0)
+{}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL
+basic_xml_iarchive<Archive>::~basic_xml_iarchive(){}
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/boost/archive/impl/basic_xml_oarchive.ipp b/vendor/pdalboost/boost/archive/impl/basic_xml_oarchive.ipp
new file mode 100644
index 0000000..4c208a6
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/basic_xml_oarchive.ipp
@@ -0,0 +1,272 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_oarchive.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <algorithm>
+#include <cstddef> // NULL
+#include <cstring>
+#if defined(BOOST_NO_STDC_NAMESPACE) && ! defined(__LIBCOMO__)
+namespace std{
+    using ::strlen;
+} // namespace std
+#endif
+
+#include <boost/archive/basic_xml_archive.hpp>
+#include <boost/archive/basic_xml_oarchive.hpp>
+#include <boost/archive/xml_archive_exception.hpp>
+#include <boost/core/no_exceptions_support.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+namespace detail {
+template<class CharType>
+struct XML_name {
+    void operator()(CharType t) const{
+        const unsigned char lookup_table[] = {
+            0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+            0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+            0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0, // -.
+            1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, // 0-9
+            0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // A-
+            1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1, // -Z _
+            0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // a-
+            1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, // -z
+            0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+            0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+        };
+        if((unsigned)t > 127)
+            return;
+        if(0 == lookup_table[(unsigned)t])
+            pdalboost::serialization::throw_exception(
+                xml_archive_exception(
+                    xml_archive_exception::xml_archive_tag_name_error
+                )
+            );
+    }
+};
+
+} // namespace detail
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implemenations of functions common to both types of xml output
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::write_attribute(
+    const char *attribute_name,
+    int t,
+    const char *conjunction
+){
+    this->This()->put(' ');
+    this->This()->put(attribute_name);
+    this->This()->put(conjunction);
+    this->This()->save(t);
+    this->This()->put('"');
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::write_attribute(
+    const char *attribute_name,
+    const char *key
+){
+    this->This()->put(' ');
+    this->This()->put(attribute_name);
+    this->This()->put("=\"");
+    this->This()->save(key);
+    this->This()->put('"');
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::indent(){
+    int i;
+    for(i = depth; i-- > 0;)
+        this->This()->put('\t');
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::save_start(const char *name)
+{
+    if(NULL == name)
+        return;
+
+    // be sure name has no invalid characters
+    std::for_each(name, name + std::strlen(name), detail::XML_name<const char>());
+
+    end_preamble();
+    if(depth > 0){
+        this->This()->put('\n');
+        indent();
+    }
+    ++depth;
+    this->This()->put('<');
+    this->This()->save(name);
+    pending_preamble = true;
+    indent_next = false;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::save_end(const char *name)
+{
+    if(NULL == name)
+        return;
+
+    // be sure name has no invalid characters
+    std::for_each(name, name + std::strlen(name), detail::XML_name<const char>());
+
+    end_preamble();
+    --depth;
+    if(indent_next){
+        this->This()->put('\n');
+        indent();
+    }
+    indent_next = true;
+    this->This()->put("</");
+    this->This()->save(name);
+    this->This()->put('>');
+    if(0 == depth)
+        this->This()->put('\n');
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::end_preamble(){
+    if(pending_preamble){
+        this->This()->put('>');
+        pending_preamble = false;
+    }
+}
+#if 0
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::save_override(const object_id_type & t)
+{
+    int i = t.t; // extra .t is for borland
+    write_attribute(BOOST_ARCHIVE_XML_OBJECT_ID(), i, "=\"_");
+}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::save_override(
+    const object_reference_type & t,
+    int
+){
+    int i = t.t; // extra .t is for borland
+    write_attribute(BOOST_ARCHIVE_XML_OBJECT_REFERENCE(), i, "=\"_");
+}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::save_override(const version_type & t)
+{
+    int i = t.t; // extra .t is for borland
+    write_attribute(BOOST_ARCHIVE_XML_VERSION(), i);
+}
+#endif
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::save_override(const object_id_type & t)
+{
+    // borland doesn't do conversion of STRONG_TYPEDEFs very well
+    const unsigned int i = t;
+    write_attribute(BOOST_ARCHIVE_XML_OBJECT_ID(), i, "=\"_");
+}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::save_override(
+    const object_reference_type & t
+){
+    const unsigned int i = t;
+    write_attribute(BOOST_ARCHIVE_XML_OBJECT_REFERENCE(), i, "=\"_");
+}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::save_override(const version_type & t)
+{
+    const unsigned int i = t;
+    write_attribute(BOOST_ARCHIVE_XML_VERSION(), i);
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::save_override(const class_id_type & t)
+{
+    write_attribute(BOOST_ARCHIVE_XML_CLASS_ID(), t);
+}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::save_override(
+    const class_id_reference_type & t
+){
+    write_attribute(BOOST_ARCHIVE_XML_CLASS_ID_REFERENCE(), t);
+}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::save_override(
+    const class_id_optional_type & t
+){
+    write_attribute(BOOST_ARCHIVE_XML_CLASS_ID(), t);
+}
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::save_override(const class_name_type & t)
+{
+    const char * key = t;
+    if(NULL == key)
+        return;
+    write_attribute(BOOST_ARCHIVE_XML_CLASS_NAME(), key);
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::save_override(const tracking_type & t)
+{
+    write_attribute(BOOST_ARCHIVE_XML_TRACKING(), t.t);
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL void
+basic_xml_oarchive<Archive>::init(){
+    // xml header
+    this->This()->put("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\n");
+    this->This()->put("<!DOCTYPE boost_serialization>\n");
+    // xml document wrapper - outer root
+    this->This()->put("<boost_serialization");
+    write_attribute("signature", BOOST_ARCHIVE_SIGNATURE());
+    write_attribute("version", BOOST_ARCHIVE_VERSION());
+    this->This()->put(">\n");
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL
+basic_xml_oarchive<Archive>::basic_xml_oarchive(unsigned int flags) :
+    detail::common_oarchive<Archive>(flags),
+    depth(0),
+    indent_next(false),
+    pending_preamble(false)
+{
+}
+
+template<class Archive>
+BOOST_ARCHIVE_OR_WARCHIVE_DECL
+basic_xml_oarchive<Archive>::~basic_xml_oarchive(){
+    if(0 == (this->get_flags() & no_header)){
+        BOOST_TRY{
+                this->This()->put("</boost_serialization>\n");
+        }
+        BOOST_CATCH(...){}
+        BOOST_CATCH_END
+    }
+}
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/boost/archive/impl/text_iarchive_impl.ipp b/vendor/pdalboost/boost/archive/impl/text_iarchive_impl.ipp
new file mode 100644
index 0000000..71fcbea
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/text_iarchive_impl.ipp
@@ -0,0 +1,128 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_iarchive_impl.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+//////////////////////////////////////////////////////////////////////
+// implementation of basic_text_iprimitive overrides for the combination
+// of template parameters used to implement a text_iprimitive
+
+#include <cstddef> // size_t, NULL
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+} // namespace std
+#endif
+
+#include <boost/detail/workaround.hpp> // RogueWave
+
+#include <boost/archive/text_iarchive.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+text_iarchive_impl<Archive>::load(char *s)
+{
+    std::size_t size;
+    * this->This() >> size;
+    // skip separating space
+    is.get();
+    // Works on all tested platforms
+    is.read(s, size);
+    s[size] = '\0';
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+text_iarchive_impl<Archive>::load(std::string &s)
+{
+    std::size_t size;
+    * this->This() >> size;
+    // skip separating space
+    is.get();
+    // borland de-allocator fixup
+    #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+    if(NULL != s.data())
+    #endif
+        s.resize(size);
+    if(0 < size)
+        is.read(&(*s.begin()), size);
+}
+
+#ifndef BOOST_NO_CWCHAR
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+text_iarchive_impl<Archive>::load(wchar_t *ws)
+{
+    std::size_t size;
+    * this->This() >> size;
+    // skip separating space
+    is.get();
+    is.read((char *)ws, size * sizeof(wchar_t)/sizeof(char));
+    ws[size] = L'\0';
+}
+#endif // BOOST_NO_INTRINSIC_WCHAR_T
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+text_iarchive_impl<Archive>::load(std::wstring &ws)
+{
+    std::size_t size;
+    * this->This() >> size;
+    // borland de-allocator fixup
+    #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+    if(NULL != ws.data())
+    #endif
+        ws.resize(size);
+    // skip separating space
+    is.get();
+    is.read((char *)ws.data(), size * sizeof(wchar_t)/sizeof(char));
+}
+
+#endif // BOOST_NO_STD_WSTRING
+#endif // BOOST_NO_CWCHAR
+
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+text_iarchive_impl<Archive>::load_override(class_name_type & t){
+    basic_text_iarchive<Archive>::load_override(t);
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+text_iarchive_impl<Archive>::init(){
+    basic_text_iarchive<Archive>::init();
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL 
+text_iarchive_impl<Archive>::text_iarchive_impl(
+    std::istream & is, 
+    unsigned int flags
+) :
+    basic_text_iprimitive<std::istream>(
+        is, 
+        0 != (flags & no_codecvt)
+    ),
+    basic_text_iarchive<Archive>(flags)
+{
+    if(0 == (flags & no_header))
+        #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
+        this->init();
+        #else
+        this->basic_text_iarchive<Archive>::init();
+        #endif
+}
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/boost/archive/impl/text_oarchive_impl.ipp b/vendor/pdalboost/boost/archive/impl/text_oarchive_impl.ipp
new file mode 100644
index 0000000..1ef595a
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/text_oarchive_impl.ipp
@@ -0,0 +1,124 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_oarchive_impl.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <string>
+#include <boost/config.hpp>
+#include <locale>
+#include <cstddef> // size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+} // namespace std
+#endif
+
+#ifndef BOOST_NO_CWCHAR
+#include <cwchar>
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::wcslen; }
+#endif
+#endif
+
+#include <boost/archive/add_facet.hpp>
+#include <boost/archive/text_oarchive.hpp>
+
+namespace pdalboost { 
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of basic_text_oprimitive overrides for the combination
+// of template parameters used to create a text_oprimitive
+
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+text_oarchive_impl<Archive>::save(const char * s)
+{
+    const std::size_t len = std::ostream::traits_type::length(s);
+    *this->This() << len;
+    this->This()->newtoken();
+    os << s;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+text_oarchive_impl<Archive>::save(const std::string &s)
+{
+    const std::size_t size = s.size();
+    *this->This() << size;
+    this->This()->newtoken();
+    os << s;
+}
+
+#ifndef BOOST_NO_CWCHAR
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+text_oarchive_impl<Archive>::save(const wchar_t * ws)
+{
+    const std::size_t l = std::wcslen(ws);
+    * this->This() << l;
+    this->This()->newtoken();
+    os.write((const char *)ws, l * sizeof(wchar_t)/sizeof(char));
+}
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+text_oarchive_impl<Archive>::save(const std::wstring &ws)
+{
+    const std::size_t l = ws.size();
+    * this->This() << l;
+    this->This()->newtoken();
+    os.write((const char *)(ws.data()), l * sizeof(wchar_t)/sizeof(char));
+}
+#endif
+#endif // BOOST_NO_CWCHAR
+
+template<class Archive>
+BOOST_ARCHIVE_DECL 
+text_oarchive_impl<Archive>::text_oarchive_impl(
+    std::ostream & os, 
+    unsigned int flags
+) :
+    basic_text_oprimitive<std::ostream>(
+        os, 
+        0 != (flags & no_codecvt)
+    ),
+    basic_text_oarchive<Archive>(flags)
+{
+    if(0 == (flags & no_header))
+        #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
+        this->init();
+        #else
+        this->basic_text_oarchive<Archive>::init();
+        #endif
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+text_oarchive_impl<Archive>::save_binary(const void *address, std::size_t count){
+    put('\n');
+    this->end_preamble();
+    #if ! defined(__MWERKS__)
+    this->basic_text_oprimitive<std::ostream>::save_binary(
+    #else
+    this->basic_text_oprimitive::save_binary(
+    #endif
+        address, 
+        count
+    );
+    this->delimiter = this->eol;
+}
+
+} // namespace archive
+} // namespace pdalboost
+
diff --git a/vendor/pdalboost/boost/archive/impl/text_wiarchive_impl.ipp b/vendor/pdalboost/boost/archive/impl/text_wiarchive_impl.ipp
new file mode 100644
index 0000000..a05353f
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/text_wiarchive_impl.ipp
@@ -0,0 +1,118 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_text_wiarchive_impl.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // size_t, NULL
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+} // namespace std
+#endif
+
+#include <boost/detail/workaround.hpp>  // fixup for RogueWave
+
+#ifndef BOOST_NO_STD_WSTREAMBUF
+#include <boost/archive/basic_text_iprimitive.hpp>
+
+namespace pdalboost { 
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of wiprimtives functions
+//
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+text_wiarchive_impl<Archive>::load(char *s)
+{
+    std::size_t size;
+    * this->This() >> size;
+    // skip separating space
+    is.get();
+    while(size-- > 0){
+        *s++ = is.narrow(is.get(), '\0');
+    }
+    *s = '\0';
+}
+
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+text_wiarchive_impl<Archive>::load(std::string &s)
+{
+    std::size_t size;
+    * this->This() >> size;
+    // skip separating space
+    is.get();
+    #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+    if(NULL != s.data())
+    #endif
+        s.resize(0);
+    s.reserve(size);
+    while(size-- > 0){
+        int x = is.narrow(is.get(), '\0');
+        s += x;
+    }
+}
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+text_wiarchive_impl<Archive>::load(wchar_t *s)
+{
+    std::size_t size;
+    * this->This() >> size;
+    // skip separating space
+    is.get();
+    // Works on all tested platforms
+    is.read(s, size);
+    s[size] = L'\0';
+}
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+text_wiarchive_impl<Archive>::load(std::wstring &ws)
+{
+    std::size_t size;
+    * this->This() >> size;
+    // skip separating space
+    is.get();
+    // borland complains about resize
+    // borland de-allocator fixup
+    #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+    if(NULL != ws.data())
+    #endif
+        ws.resize(size);
+    // note breaking a rule here - is this a problem on some platform
+    is.read(const_cast<wchar_t *>(ws.data()), size);
+}
+#endif
+
+template<class Archive>
+BOOST_WARCHIVE_DECL 
+text_wiarchive_impl<Archive>::text_wiarchive_impl(
+    std::wistream & is, 
+    unsigned int flags
+) :
+    basic_text_iprimitive<std::wistream>(
+        is, 
+        0 != (flags & no_codecvt)
+    ),
+    basic_text_iarchive<Archive>(flags)
+{
+    if(0 == (flags & no_header))
+        basic_text_iarchive<Archive>::init();
+}
+
+} // archive
+} // boost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
diff --git a/vendor/pdalboost/boost/archive/impl/text_woarchive_impl.ipp b/vendor/pdalboost/boost/archive/impl/text_woarchive_impl.ipp
new file mode 100644
index 0000000..b91088f
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/text_woarchive_impl.ipp
@@ -0,0 +1,85 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_woarchive_impl.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifndef BOOST_NO_STD_WSTREAMBUF
+
+#include <cstring>
+#include <cstddef> // size_t
+#if defined(BOOST_NO_STDC_NAMESPACE) && ! defined(__LIBCOMO__)
+namespace std{ 
+    using ::strlen;
+    using ::size_t; 
+} // namespace std
+#endif
+
+#include <ostream>
+
+#include <boost/archive/text_woarchive.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of woarchive functions
+//
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+text_woarchive_impl<Archive>::save(const char *s)
+{
+    // note: superfluous local variable fixes borland warning
+    const std::size_t size = std::strlen(s);
+    * this->This() << size;
+    this->This()->newtoken();
+    while(*s != '\0')
+        os.put(os.widen(*s++));
+}
+
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+text_woarchive_impl<Archive>::save(const std::string &s)
+{
+    const std::size_t size = s.size();
+    * this->This() << size;
+    this->This()->newtoken();
+    const char * cptr = s.data();
+    for(std::size_t i = size; i-- > 0;)
+        os.put(os.widen(*cptr++));
+}
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+text_woarchive_impl<Archive>::save(const wchar_t *ws)
+{
+    const std::size_t size = std::wostream::traits_type::length(ws);
+    * this->This() << size;
+    this->This()->newtoken();
+    os.write(ws, size);
+}
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+text_woarchive_impl<Archive>::save(const std::wstring &ws)
+{
+    const std::size_t size = ws.length();
+    * this->This() << size;
+    this->This()->newtoken();
+    os.write(ws.data(), size);
+}
+#endif
+
+} // namespace archive
+} // namespace pdalboost
+
+#endif
+
diff --git a/vendor/pdalboost/boost/archive/impl/xml_iarchive_impl.ipp b/vendor/pdalboost/boost/archive/impl/xml_iarchive_impl.ipp
new file mode 100644
index 0000000..1d14e82
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/xml_iarchive_impl.ipp
@@ -0,0 +1,199 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_iarchive_impl.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <cstring> // memcpy
+#include <cstddef> // NULL
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::memcpy;
+} // namespace std
+#endif
+
+#ifndef BOOST_NO_CWCHAR
+#include <cwchar> // mbstate_t and mbrtowc
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::mbstate_t;
+    using ::mbrtowc;
+ } // namespace std
+#endif
+#endif // BOOST_NO_CWCHAR
+
+#include <boost/detail/workaround.hpp> // RogueWave and Dinkumware
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+#include <boost/archive/dinkumware.hpp>
+#endif
+
+#include <boost/core/no_exceptions_support.hpp>
+
+#include <boost/archive/xml_archive_exception.hpp>
+#include <boost/archive/iterators/dataflow_exception.hpp>
+#include <boost/archive/basic_xml_archive.hpp>
+#include <boost/archive/xml_iarchive.hpp>
+
+#include "basic_xml_grammar.hpp"
+
+namespace pdalboost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implemenations of functions specific to char archives
+
+// wide char stuff used by char archives
+
+#ifndef BOOST_NO_CWCHAR
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+xml_iarchive_impl<Archive>::load(std::wstring &ws){
+    std::string s;
+    bool result = gimpl->parse_string(is, s);
+    if(! result)
+        pdalboost::serialization::throw_exception(
+            xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+        );
+    
+    #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+    if(NULL != ws.data())
+    #endif
+        ws.resize(0);
+    std::mbstate_t mbs;
+    const char * start = s.data();
+    const char * end = start + s.size();
+    while(start < end){
+        wchar_t wc;
+        std::size_t result = std::mbrtowc(&wc, start, end - start, &mbs);
+        if(result == static_cast<std::size_t>(-1))
+            pdalboost::serialization::throw_exception(
+                iterators::dataflow_exception(
+                    iterators::dataflow_exception::invalid_conversion
+                )
+            );
+        if(result == static_cast<std::size_t>(-2))
+            continue;
+        start += result;
+        ws += wc;
+    }
+}
+#endif // BOOST_NO_STD_WSTRING
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+xml_iarchive_impl<Archive>::load(wchar_t * ws){
+    std::string s;
+    bool result = gimpl->parse_string(is, s);
+    if(! result)
+        pdalboost::serialization::throw_exception(
+            xml_archive_exception(
+                xml_archive_exception::xml_archive_parsing_error
+            )
+        );
+        
+    std::mbstate_t mbs;
+    const char * start = s.data();
+    const char * end = start + s.size();
+    while(start < end){
+        wchar_t wc;
+        std::size_t length = std::mbrtowc(&wc, start, end - start, &mbs);
+        if(static_cast<std::size_t>(-1) == length)
+            pdalboost::serialization::throw_exception(
+                iterators::dataflow_exception(
+                    iterators::dataflow_exception::invalid_conversion
+                )
+            );
+        if(static_cast<std::size_t>(-2) == length)
+            continue;
+
+        start += length;
+        *ws++ = wc;
+    }
+    *ws = L'\0';
+}
+#endif // BOOST_NO_INTRINSIC_WCHAR_T
+
+#endif // BOOST_NO_CWCHAR
+
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+xml_iarchive_impl<Archive>::load(std::string &s){
+    bool result = gimpl->parse_string(is, s);
+    if(! result)
+        pdalboost::serialization::throw_exception(
+            xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+        );
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+xml_iarchive_impl<Archive>::load(char * s){
+    std::string tstring;
+    bool result = gimpl->parse_string(is, tstring);
+    if(! result)
+        pdalboost::serialization::throw_exception(
+            xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+        );
+    std::memcpy(s, tstring.data(), tstring.size());
+    s[tstring.size()] = 0;
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+xml_iarchive_impl<Archive>::load_override(class_name_type & t){
+    const std::string & s = gimpl->rv.class_name;
+    if(s.size() > BOOST_SERIALIZATION_MAX_KEY_SIZE - 1)
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::invalid_class_name)
+       );
+    char * tptr = t;
+    std::memcpy(tptr, s.data(), s.size());
+    tptr[s.size()] = '\0';
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+xml_iarchive_impl<Archive>::init(){
+    gimpl->init(is);
+    this->set_library_version(
+        library_version_type(gimpl->rv.version)
+    );
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL
+xml_iarchive_impl<Archive>::xml_iarchive_impl(
+    std::istream &is_,
+    unsigned int flags
+) :
+    basic_text_iprimitive<std::istream>(
+        is_, 
+        0 != (flags & no_codecvt)
+    ),
+    basic_xml_iarchive<Archive>(flags),
+    gimpl(new xml_grammar())
+{
+    if(0 == (flags & no_header))
+        init();
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL
+xml_iarchive_impl<Archive>::~xml_iarchive_impl(){
+    if(0 == (this->get_flags() & no_header)){
+        BOOST_TRY{
+            gimpl->windup(is);
+        }
+        BOOST_CATCH(...){}
+        BOOST_CATCH_END
+    }
+}
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/boost/archive/impl/xml_oarchive_impl.ipp b/vendor/pdalboost/boost/archive/impl/xml_oarchive_impl.ipp
new file mode 100644
index 0000000..d738a68
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/xml_oarchive_impl.ipp
@@ -0,0 +1,117 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_oarchive_impl.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <ostream>
+#include <iomanip>
+#include <algorithm> // std::copy
+#include <string>
+
+#include <cstring> // strlen
+#include <boost/config.hpp> // msvc 6.0 needs this to suppress warnings
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::strlen; 
+} // namespace std
+#endif
+
+#include <boost/archive/iterators/xml_escape.hpp>
+#include <boost/archive/iterators/ostream_iterator.hpp>
+
+#ifndef BOOST_NO_CWCHAR
+#include <boost/archive/wcslen.hpp>
+#include <boost/archive/iterators/mb_from_wchar.hpp>
+#endif
+
+namespace pdalboost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implemenations of functions specific to char archives
+
+// wide char stuff used by char archives
+#ifndef BOOST_NO_CWCHAR
+// copy chars to output escaping to xml and translating wide chars to mb chars
+template<class InputIterator>
+void save_iterator(std::ostream &os, InputIterator begin, InputIterator end){
+    typedef pdalboost::archive::iterators::mb_from_wchar<
+        pdalboost::archive::iterators::xml_escape<InputIterator>
+    > translator;
+    std::copy(
+        translator(begin),
+        translator(end),
+        pdalboost::archive::iterators::ostream_iterator<char>(os)
+    );
+}
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+xml_oarchive_impl<Archive>::save(const std::wstring & ws){
+//  at least one library doesn't typedef value_type for strings
+//  so rather than using string directly make a pointer iterator out of it
+//    save_iterator(os, ws.data(), ws.data() + std::wcslen(ws.data()));
+    save_iterator(os, ws.data(), ws.data() + ws.size());
+}
+#endif
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+xml_oarchive_impl<Archive>::save(const wchar_t * ws){
+    save_iterator(os, ws, ws + std::wcslen(ws));
+}
+#endif
+
+#endif // BOOST_NO_CWCHAR
+
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+xml_oarchive_impl<Archive>::save(const std::string & s){
+//  at least one library doesn't typedef value_type for strings
+//  so rather than using string directly make a pointer iterator out of it
+    typedef pdalboost::archive::iterators::xml_escape<
+        const char * 
+    > xml_escape_translator;
+    std::copy(
+        xml_escape_translator(s.data()),
+        xml_escape_translator(s.data()+ s.size()),
+        pdalboost::archive::iterators::ostream_iterator<char>(os)
+    );
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL void
+xml_oarchive_impl<Archive>::save(const char * s){
+    typedef pdalboost::archive::iterators::xml_escape<
+        const char * 
+    > xml_escape_translator;
+    std::copy(
+        xml_escape_translator(s),
+        xml_escape_translator(s + std::strlen(s)),
+        pdalboost::archive::iterators::ostream_iterator<char>(os)
+    );
+}
+
+template<class Archive>
+BOOST_ARCHIVE_DECL
+xml_oarchive_impl<Archive>::xml_oarchive_impl(
+    std::ostream & os_, 
+    unsigned int flags
+) : 
+    basic_text_oprimitive<std::ostream>(
+        os_,
+        0 != (flags & no_codecvt)
+    ),
+    basic_xml_oarchive<Archive>(flags)
+{
+    if(0 == (flags & no_header))
+        this->init();
+}
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/boost/archive/impl/xml_wiarchive_impl.ipp b/vendor/pdalboost/boost/archive/impl/xml_wiarchive_impl.ipp
new file mode 100644
index 0000000..1bce689
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/xml_wiarchive_impl.ipp
@@ -0,0 +1,193 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_wiarchive_impl.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstring>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::memcpy; 
+} //std
+#endif
+
+#include <boost/config.hpp> // msvc 6.0 needs this to suppress warnings
+#ifndef BOOST_NO_STD_WSTREAMBUF
+
+#include <boost/assert.hpp>
+#include <algorithm> // std::copy
+
+#include <boost/detail/workaround.hpp> // Dinkumware and RogueWave
+#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+#include <boost/archive/dinkumware.hpp>
+#endif
+
+#include <boost/io/ios_state.hpp>
+#include <boost/core/no_exceptions_support.hpp>
+#include <boost/serialization/string.hpp>
+
+#include <boost/archive/basic_xml_archive.hpp>
+#include <boost/archive/xml_wiarchive.hpp>
+
+#include <boost/archive/add_facet.hpp>
+
+#include <boost/archive/xml_archive_exception.hpp>
+#include <boost/archive/iterators/mb_from_wchar.hpp>
+
+#include "basic_xml_grammar.hpp"
+
+namespace pdalboost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implemenations of functions specific to wide char archives
+
+namespace { // anonymous
+
+void copy_to_ptr(char * s, const std::wstring & ws){
+    std::copy(
+        iterators::mb_from_wchar<std::wstring::const_iterator>(
+            ws.begin()
+        ), 
+        iterators::mb_from_wchar<std::wstring::const_iterator>(
+            ws.end()
+        ), 
+        s
+    );
+    s[ws.size()] = 0;
+}
+
+} // anonymous
+
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+xml_wiarchive_impl<Archive>::load(std::string & s){
+    std::wstring ws;
+    bool result = gimpl->parse_string(is, ws);
+    if(! result)
+        pdalboost::serialization::throw_exception(
+            xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+        );
+    #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101))
+    if(NULL != s.data())
+    #endif
+        s.resize(0);
+    s.reserve(ws.size());
+    std::copy(
+        iterators::mb_from_wchar<std::wstring::iterator>(
+            ws.begin()
+        ), 
+        iterators::mb_from_wchar<std::wstring::iterator>(
+            ws.end()
+        ), 
+        std::back_inserter(s)
+    );
+}
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+xml_wiarchive_impl<Archive>::load(std::wstring & ws){
+    bool result = gimpl->parse_string(is, ws);
+    if(! result)
+        pdalboost::serialization::throw_exception(
+            xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+        );
+}
+#endif
+
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+xml_wiarchive_impl<Archive>::load(char * s){
+    std::wstring ws;
+    bool result = gimpl->parse_string(is, ws);
+    if(! result)
+        pdalboost::serialization::throw_exception(
+            xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+        );
+    copy_to_ptr(s, ws);
+}
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+xml_wiarchive_impl<Archive>::load(wchar_t * ws){
+    std::wstring twstring;
+    bool result = gimpl->parse_string(is, twstring);
+    if(! result)
+        pdalboost::serialization::throw_exception(
+            xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+        );
+    std::memcpy(ws, twstring.c_str(), twstring.size());
+    ws[twstring.size()] = L'\0';
+}
+#endif
+
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+xml_wiarchive_impl<Archive>::load_override(class_name_type & t){
+    const std::wstring & ws = gimpl->rv.class_name;
+    if(ws.size() > BOOST_SERIALIZATION_MAX_KEY_SIZE - 1)
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::invalid_class_name)
+        );
+    copy_to_ptr(t, ws);
+}
+
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+xml_wiarchive_impl<Archive>::init(){
+    gimpl->init(is);
+    this->set_library_version(
+        library_version_type(gimpl->rv.version)
+    );
+}
+
+template<class Archive>
+BOOST_WARCHIVE_DECL
+xml_wiarchive_impl<Archive>::xml_wiarchive_impl(
+    std::wistream &is_,
+    unsigned int flags
+) :
+    basic_text_iprimitive<std::wistream>(
+        is_, 
+        true // don't change the codecvt - use the one below
+    ),
+    basic_xml_iarchive<Archive>(flags),
+    gimpl(new xml_wgrammar())
+{
+    if(0 == (flags & no_codecvt)){
+        // note usage of argument "1" so that the locale isn't
+        // automatically delete the facet
+        archive_locale.reset(
+            add_facet(
+                is_.getloc(),
+                new pdalboost::archive::detail::utf8_codecvt_facet
+            )
+        );
+        //is.imbue(* archive_locale);
+    }
+    if(0 == (flags & no_header))
+        init();
+}
+
+template<class Archive>
+BOOST_WARCHIVE_DECL
+xml_wiarchive_impl<Archive>::~xml_wiarchive_impl(){
+    if(0 == (this->get_flags() & no_header)){
+        BOOST_TRY{
+            gimpl->windup(is);
+        }
+        BOOST_CATCH(...){}
+        BOOST_CATCH_END
+    }
+}
+
+} // namespace archive
+} // namespace pdalboost
+
+#endif  // BOOST_NO_STD_WSTREAMBUF
diff --git a/vendor/pdalboost/boost/archive/impl/xml_woarchive_impl.ipp b/vendor/pdalboost/boost/archive/impl/xml_woarchive_impl.ipp
new file mode 100644
index 0000000..f15c674
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/impl/xml_woarchive_impl.ipp
@@ -0,0 +1,151 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_woarchive_impl.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/config.hpp>
+#ifndef BOOST_NO_STD_WSTREAMBUF
+
+#include <ostream>
+#include <string>
+#include <algorithm> // std::copy
+#include <locale>
+
+#include <cstring> // strlen
+#include <cstdlib> // mbtowc
+#include <cwchar>  // wcslen
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::strlen; 
+    #if ! defined(BOOST_NO_INTRINSIC_WCHAR_T)
+        using ::mbtowc; 
+        using ::wcslen;
+    #endif
+} // namespace std
+#endif
+
+#include <boost/archive/xml_woarchive.hpp>
+#include <boost/serialization/throw_exception.hpp>
+
+#include <boost/archive/iterators/xml_escape.hpp>
+#include <boost/archive/iterators/wchar_from_mb.hpp>
+#include <boost/archive/iterators/ostream_iterator.hpp>
+#include <boost/archive/iterators/dataflow_exception.hpp>
+
+#include <boost/archive/add_facet.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implemenations of functions specific to wide char archives
+
+// copy chars to output escaping to xml and widening characters as we go
+template<class InputIterator>
+void save_iterator(std::wostream &os, InputIterator begin, InputIterator end){
+    typedef iterators::wchar_from_mb<
+        iterators::xml_escape<InputIterator>
+    > xmbtows;
+    std::copy(
+        xmbtows(begin),
+        xmbtows(end),
+        pdalboost::archive::iterators::ostream_iterator<wchar_t>(os)
+    );
+}
+
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+xml_woarchive_impl<Archive>::save(const std::string & s){
+    // note: we don't use s.begin() and s.end() because dinkumware
+    // doesn't have string::value_type defined. So use a wrapper
+    // around these values to implement the definitions.
+    const char * begin = s.data();
+    const char * end = begin + s.size();
+    save_iterator(os, begin, end);
+}
+
+#ifndef BOOST_NO_STD_WSTRING
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+xml_woarchive_impl<Archive>::save(const std::wstring & ws){
+#if 0
+    typedef iterators::xml_escape<std::wstring::const_iterator> xmbtows;
+    std::copy(
+        xmbtows(ws.begin()),
+        xmbtows(ws.end()),
+        pdalboost::archive::iterators::ostream_iterator<wchar_t>(os)
+    );
+#endif
+    typedef iterators::xml_escape<const wchar_t *> xmbtows;
+    std::copy(
+        xmbtows(ws.data()),
+        xmbtows(ws.data() + ws.size()),
+        pdalboost::archive::iterators::ostream_iterator<wchar_t>(os)
+    );
+}
+#endif //BOOST_NO_STD_WSTRING
+
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+xml_woarchive_impl<Archive>::save(const char * s){
+   save_iterator(os, s, s + std::strlen(s));
+}
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<class Archive>
+BOOST_WARCHIVE_DECL void
+xml_woarchive_impl<Archive>::save(const wchar_t * ws){
+    os << ws;
+    typedef iterators::xml_escape<const wchar_t *> xmbtows;
+    std::copy(
+        xmbtows(ws),
+        xmbtows(ws + std::wcslen(ws)),
+        pdalboost::archive::iterators::ostream_iterator<wchar_t>(os)
+    );
+}
+#endif
+
+template<class Archive>
+BOOST_WARCHIVE_DECL
+xml_woarchive_impl<Archive>::xml_woarchive_impl(
+    std::wostream & os_,
+    unsigned int flags
+) :
+    basic_text_oprimitive<std::wostream>(
+        os_,
+        true // don't change the codecvt - use the one below
+    ),
+    basic_xml_oarchive<Archive>(flags)
+{
+    // Standard behavior is that imbue can be called
+    // a) before output is invoked or
+    // b) after flush has been called.  This prevents one-to-many
+    // transforms (such as one to many transforms from getting
+    // mixed up.
+    if(0 == (flags & no_codecvt)){
+        archive_locale.reset(
+            add_facet(
+                os_.getloc(),
+                new pdalboost::archive::detail::utf8_codecvt_facet
+            )
+        );
+        //os.imbue(* archive_locale);
+    }
+    if(0 == (flags & no_header))
+        this->init();
+}
+
+template<class Archive>
+BOOST_WARCHIVE_DECL
+xml_woarchive_impl<Archive>::~xml_woarchive_impl(){
+}
+
+} // namespace archive
+} // namespace pdalboost
+
+#endif //BOOST_NO_STD_WSTREAMBUF
diff --git a/vendor/pdalboost/boost/archive/iterators/base64_from_binary.hpp b/vendor/pdalboost/boost/archive/iterators/base64_from_binary.hpp
new file mode 100644
index 0000000..9ee701c
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/iterators/base64_from_binary.hpp
@@ -0,0 +1,109 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_BASE64_FROM_BINARY_HPP
+#define BOOST_ARCHIVE_ITERATORS_BASE64_FROM_BINARY_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// base64_from_binary.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/assert.hpp>
+
+#include <cstddef> // size_t
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+} // namespace std
+#endif
+
+#include <boost/iterator/transform_iterator.hpp>
+#include <boost/archive/iterators/dataflow_exception.hpp>
+
+namespace pdalboost { 
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// convert binary integers to base64 characters
+
+namespace detail {
+
+template<class CharType>
+struct from_6_bit {
+    typedef CharType result_type;
+    CharType operator()(CharType t) const{
+        const char * lookup_table = 
+            "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+            "abcdefghijklmnopqrstuvwxyz"
+            "0123456789"
+            "+/";
+        BOOST_ASSERT(t < 64);
+        return lookup_table[static_cast<size_t>(t)];
+    }
+};
+
+} // namespace detail
+
+// note: what we would like to do is
+// template<class Base, class CharType = typename Base::value_type>
+//  typedef transform_iterator<
+//      from_6_bit<CharType>,
+//      transform_width<Base, 6, sizeof(Base::value_type) * 8, CharType>
+//  > base64_from_binary;
+// but C++ won't accept this.  Rather than using a "type generator" and
+// using a different syntax, make a derivation which should be equivalent.
+//
+// Another issue addressed here is that the transform_iterator doesn't have
+// a templated constructor.  This makes it incompatible with the dataflow
+// ideal.  This is also addressed here.
+
+//template<class Base, class CharType = typename Base::value_type>
+template<
+    class Base, 
+    class CharType = typename pdalboost::iterator_value<Base>::type
+>
+class base64_from_binary : 
+    public transform_iterator<
+        detail::from_6_bit<CharType>,
+        Base
+    >
+{
+    friend class pdalboost::iterator_core_access;
+    typedef transform_iterator<
+        typename detail::from_6_bit<CharType>,
+        Base
+    > super_t;
+
+public:
+    // make composible buy using templated constructor
+    template<class T>
+    base64_from_binary(T start) :
+        super_t(
+            Base(static_cast< T >(start)),
+            detail::from_6_bit<CharType>()
+        )
+    {}
+    // intel 7.1 doesn't like default copy constructor
+    base64_from_binary(const base64_from_binary & rhs) : 
+        super_t(
+            Base(rhs.base_reference()),
+            detail::from_6_bit<CharType>()
+        )
+    {}
+//    base64_from_binary(){};
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_ITERATORS_BASE64_FROM_BINARY_HPP
diff --git a/vendor/pdalboost/boost/archive/iterators/binary_from_base64.hpp b/vendor/pdalboost/boost/archive/iterators/binary_from_base64.hpp
new file mode 100644
index 0000000..2fc3c44
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/iterators/binary_from_base64.hpp
@@ -0,0 +1,118 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE64_HPP
+#define BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE64_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_from_base64.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/assert.hpp>
+
+#include <boost/serialization/throw_exception.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/iterator/transform_iterator.hpp>
+#include <boost/archive/iterators/dataflow_exception.hpp>
+
+namespace pdalboost { 
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// convert base64 characters to binary data
+
+namespace detail {
+
+template<class CharType>
+struct to_6_bit {
+    typedef CharType result_type;
+    CharType operator()(CharType t) const{
+        const signed char lookup_table[] = {
+            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
+            -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,
+            52,53,54,55,56,57,58,59,60,61,-1,-1,-1, 0,-1,-1, // render '=' as 0
+            -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,
+            15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,
+            -1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
+            41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1
+        };
+        // metrowerks trips this assertion - how come?
+        #if ! defined(__MWERKS__)
+        BOOST_STATIC_ASSERT(128 == sizeof(lookup_table));
+        #endif
+        signed char value = -1;
+        if((unsigned)t <= 127)
+            value = lookup_table[(unsigned)t];
+        if(-1 == value)
+            pdalboost::serialization::throw_exception(
+                dataflow_exception(dataflow_exception::invalid_base64_character)
+            );
+        return value;
+    }
+};
+
+} // namespace detail
+
+// note: what we would like to do is
+// template<class Base, class CharType = typename Base::value_type>
+//  typedef transform_iterator<
+//      from_6_bit<CharType>,
+//      transform_width<Base, 6, sizeof(Base::value_type) * 8, CharType>
+//  > base64_from_binary;
+// but C++ won't accept this.  Rather than using a "type generator" and
+// using a different syntax, make a derivation which should be equivalent.
+//
+// Another issue addressed here is that the transform_iterator doesn't have
+// a templated constructor.  This makes it incompatible with the dataflow
+// ideal.  This is also addressed here.
+
+template<
+    class Base, 
+    class CharType = typename pdalboost::iterator_value<Base>::type
+>
+class binary_from_base64 : public
+    transform_iterator<
+        detail::to_6_bit<CharType>,
+        Base
+    >
+{
+    friend class pdalboost::iterator_core_access;
+    typedef transform_iterator<
+        detail::to_6_bit<CharType>,
+        Base
+    > super_t;
+public:
+    // make composible buy using templated constructor
+    template<class T>
+    binary_from_base64(T  start) :
+        super_t(
+            Base(static_cast< T >(start)),
+            detail::to_6_bit<CharType>()
+        )
+    {}
+    // intel 7.1 doesn't like default copy constructor
+    binary_from_base64(const binary_from_base64 & rhs) : 
+        super_t(
+            Base(rhs.base_reference()),
+            detail::to_6_bit<CharType>()
+        )
+    {}
+//    binary_from_base64(){};
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_ITERATORS_BINARY_FROM_BASE64_HPP
diff --git a/vendor/pdalboost/boost/archive/iterators/dataflow_exception.hpp b/vendor/pdalboost/boost/archive/iterators/dataflow_exception.hpp
new file mode 100644
index 0000000..e568d38
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/iterators/dataflow_exception.hpp
@@ -0,0 +1,80 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_DATAFLOW_EXCEPTION_HPP
+#define BOOST_ARCHIVE_ITERATORS_DATAFLOW_EXCEPTION_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// dataflow_exception.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifndef BOOST_NO_EXCEPTIONS
+#include <exception>
+#endif //BOOST_NO_EXCEPTIONS
+
+#include <boost/assert.hpp>
+
+namespace pdalboost {
+namespace archive {
+namespace iterators {
+
+//////////////////////////////////////////////////////////////////////
+// exceptions thrown by dataflows
+//
+class dataflow_exception : public std::exception
+{
+public:
+    typedef enum {
+        invalid_6_bitcode,
+        invalid_base64_character,
+        invalid_xml_escape_sequence,
+        comparison_not_permitted,
+        invalid_conversion,
+        other_exception
+    } exception_code;
+    exception_code code;
+
+    dataflow_exception(exception_code c = other_exception) : code(c)
+    {}
+
+    virtual const char *what( ) const throw( )
+    {
+        const char *msg = "unknown exception code";
+        switch(code){
+        case invalid_6_bitcode:
+            msg = "attempt to encode a value > 6 bits";
+            break;
+        case invalid_base64_character:
+            msg = "attempt to decode a value not in base64 char set";
+            break;
+        case invalid_xml_escape_sequence:
+            msg = "invalid xml escape_sequence";
+            break;
+        case comparison_not_permitted:
+            msg = "cannot invoke iterator comparison now";
+            break;
+        case invalid_conversion:
+            msg = "invalid multbyte/wide char conversion";
+            break;
+        default:
+            BOOST_ASSERT(false);
+            break;
+        }
+        return msg;
+    }
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace pdalboost
+
+#endif //BOOST_ARCHIVE_ITERATORS_DATAFLOW_EXCEPTION_HPP
diff --git a/vendor/pdalboost/boost/archive/iterators/escape.hpp b/vendor/pdalboost/boost/archive/iterators/escape.hpp
new file mode 100644
index 0000000..7b452b2
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/iterators/escape.hpp
@@ -0,0 +1,114 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_ESCAPE_HPP
+#define BOOST_ARCHIVE_ITERATORS_ESCAPE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// escape.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/assert.hpp>
+#include <cstddef> // NULL
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace pdalboost { 
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// insert escapes into text
+
+template<class Derived, class Base>
+class escape : 
+    public pdalboost::iterator_adaptor<
+        Derived, 
+        Base, 
+        typename pdalboost::iterator_value<Base>::type,
+        single_pass_traversal_tag,
+        typename pdalboost::iterator_value<Base>::type
+    >
+{
+    typedef typename pdalboost::iterator_value<Base>::type base_value_type;
+    typedef typename pdalboost::iterator_reference<Base>::type reference_type;
+    friend class pdalboost::iterator_core_access;
+
+    typedef typename pdalboost::iterator_adaptor<
+        Derived, 
+        Base, 
+        base_value_type,
+        single_pass_traversal_tag,
+        base_value_type
+    > super_t;
+
+    typedef escape<Derived, Base> this_t;
+
+    void dereference_impl() {
+        m_current_value = static_cast<Derived *>(this)->fill(m_bnext, m_bend);
+        m_full = true;
+    }
+
+    //Access the value referred to 
+    reference_type dereference() const {
+        if(!m_full)
+            const_cast<this_t *>(this)->dereference_impl();
+        return m_current_value;
+    }
+
+    bool equal(const this_t & rhs) const {
+        if(m_full){
+            if(! rhs.m_full)
+                const_cast<this_t *>(& rhs)->dereference_impl();
+        }
+        else{
+            if(rhs.m_full)
+                const_cast<this_t *>(this)->dereference_impl();
+        }
+        if(m_bnext != rhs.m_bnext)
+            return false;
+        if(this->base_reference() != rhs.base_reference())
+            return false;
+        return true;
+    }
+
+   void increment(){
+        if(++m_bnext < m_bend){
+            m_current_value = *m_bnext;
+            return;
+        }
+        ++(this->base_reference());
+        m_bnext = NULL;
+        m_bend = NULL;
+        m_full = false;
+    }
+
+    // buffer to handle pending characters
+    const base_value_type *m_bnext;
+    const base_value_type *m_bend;
+    bool m_full;
+    base_value_type m_current_value;
+public:
+    escape(Base base) : 
+        super_t(base),
+        m_bnext(NULL),
+        m_bend(NULL),
+        m_full(false)
+    {
+    }
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_ITERATORS_ESCAPE_HPP
diff --git a/vendor/pdalboost/boost/archive/iterators/insert_linebreaks.hpp b/vendor/pdalboost/boost/archive/iterators/insert_linebreaks.hpp
new file mode 100644
index 0000000..79d0a04
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/iterators/insert_linebreaks.hpp
@@ -0,0 +1,99 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_INSERT_LINEBREAKS_HPP
+#define BOOST_ARCHIVE_ITERATORS_INSERT_LINEBREAKS_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// insert_linebreaks.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/assert.hpp>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ using ::memcpy; }
+#endif
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace pdalboost { 
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// insert line break every N characters
+template<
+    class Base, 
+    int N, 
+    class CharType = typename pdalboost::iterator_value<Base>::type
+>
+class insert_linebreaks : 
+    public iterator_adaptor<
+        insert_linebreaks<Base, N, CharType>,
+        Base,
+        CharType,
+        single_pass_traversal_tag,
+        CharType
+    >
+{
+private:
+    friend class pdalboost::iterator_core_access;
+    typedef iterator_adaptor<
+        insert_linebreaks<Base, N, CharType>,
+        Base,
+        CharType,
+        single_pass_traversal_tag,
+        CharType
+    > super_t;
+
+    bool equal(const insert_linebreaks<Base, N, CharType> & rhs) const {
+        return
+//            m_count == rhs.m_count
+//            && base_reference() == rhs.base_reference()
+            this->base_reference() == rhs.base_reference()
+        ;
+    }
+
+    void increment() {
+        if(m_count == N){
+            m_count = 0;
+            return;
+        }
+        ++m_count;
+        ++(this->base_reference());
+    }
+    CharType dereference() const {
+        if(m_count == N)
+            return '\n';
+        return * (this->base_reference());
+    }
+    unsigned int m_count;
+public:
+    // make composible buy using templated constructor
+    template<class T>
+    insert_linebreaks(T  start) :
+        super_t(Base(static_cast< T >(start))),
+        m_count(0)
+    {}
+    // intel 7.1 doesn't like default copy constructor
+    insert_linebreaks(const insert_linebreaks & rhs) : 
+        super_t(rhs.base_reference()),
+        m_count(rhs.m_count)
+    {}
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_ITERATORS_INSERT_LINEBREAKS_HPP
diff --git a/vendor/pdalboost/boost/archive/iterators/istream_iterator.hpp b/vendor/pdalboost/boost/archive/iterators/istream_iterator.hpp
new file mode 100644
index 0000000..cbd055f
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/iterators/istream_iterator.hpp
@@ -0,0 +1,107 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_ISTREAM_ITERATOR_HPP
+#define BOOST_ARCHIVE_ITERATORS_ISTREAM_ITERATOR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// istream_iterator.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// note: this is a custom version of the standard istream_iterator.
+// This is necessary as the standard version doesn't work as expected
+// for wchar_t based streams on systems for which wchar_t not a true
+// type but rather a synonym for some integer type.
+
+#include <cstddef> // NULL
+#include <istream>
+#include <boost/iterator/iterator_facade.hpp>
+
+namespace pdalboost { 
+namespace archive {
+namespace iterators {
+
+// given a type, make an input iterator based on a pointer to that type
+template<class Elem = char>
+class istream_iterator :  
+    public pdalboost::iterator_facade<
+        istream_iterator<Elem>,
+        Elem,
+        std::input_iterator_tag,
+        Elem
+    >
+{
+    friend class pdalboost::iterator_core_access;
+    typedef istream_iterator this_t ;
+    typedef typename pdalboost::iterator_facade<
+        istream_iterator<Elem>,
+        Elem,
+        std::input_iterator_tag,
+        Elem
+    > super_t;
+    typedef typename std::basic_istream<Elem> istream_type;
+ 
+    bool equal(const this_t & rhs) const {
+        // note: only  works for comparison against end of stream
+        return m_istream == rhs.m_istream;
+    }
+
+/*
+    //Access the value referred to 
+    Elem dereference() const {
+        return m_current_value;
+    }
+
+    void increment(){
+        if(NULL != m_istream){
+            m_current_value = static_cast<Elem>(m_istream->get());
+            if(! m_istream->good()){
+                const_cast<this_t *>(this)->m_istream = NULL;
+            }
+        }
+    }
+*/
+    //Access the value referred to 
+    Elem dereference() const {
+        return m_istream->peek();
+    }
+
+    void increment(){
+        if(NULL != m_istream){
+            m_istream->ignore(1);
+        }
+    }
+
+    istream_type *m_istream;
+    Elem m_current_value;
+public:
+    istream_iterator(istream_type & is) :
+        m_istream(& is)
+    {
+        //increment();
+    }
+
+    istream_iterator() :
+        m_istream(NULL)
+    {}
+
+    istream_iterator(const istream_iterator<Elem> & rhs) :
+        m_istream(rhs.m_istream),
+        m_current_value(rhs.m_current_value)
+    {}
+
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_ITERATORS_ISTREAM_ITERATOR_HPP
diff --git a/vendor/pdalboost/boost/archive/iterators/mb_from_wchar.hpp b/vendor/pdalboost/boost/archive/iterators/mb_from_wchar.hpp
new file mode 100644
index 0000000..4f27df9
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/iterators/mb_from_wchar.hpp
@@ -0,0 +1,133 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_MB_FROM_WCHAR_HPP
+#define BOOST_ARCHIVE_ITERATORS_MB_FROM_WCHAR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// mb_from_wchar.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/assert.hpp>
+#include <cstddef> // size_t
+#include <cwchar> // for mbstate_t and wcrtomb()
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+    using ::mbstate_t;
+    using ::wcrtomb;
+} // namespace std
+#endif
+
+#include <boost/iterator/iterator_adaptor.hpp>
+
+namespace pdalboost { 
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// class used by text archives to translate wide strings and to char
+// strings of the currently selected locale
+template<class Base>    // the input iterator
+class mb_from_wchar
+    : public pdalboost::iterator_adaptor<
+        mb_from_wchar<Base>, 
+        Base, 
+        wchar_t,
+        single_pass_traversal_tag,
+        char
+    >
+{
+    friend class pdalboost::iterator_core_access;
+
+    typedef typename pdalboost::iterator_adaptor<
+        mb_from_wchar<Base>, 
+        Base, 
+        wchar_t,
+        single_pass_traversal_tag,
+        char
+    > super_t;
+
+    typedef mb_from_wchar<Base> this_t;
+
+    char dereference_impl() {
+        if(! m_full){
+            fill();
+            m_full = true;
+        }
+        return m_buffer[m_bnext];
+    }
+    char dereference() const {
+        return (const_cast<this_t *>(this))->dereference_impl();
+    }
+
+    // test for iterator equality
+    bool equal(const mb_from_wchar<Base> & rhs) const {
+        // once the value is filled, the base_reference has been incremented
+        // so don't permit comparison anymore.
+        return 
+            0 == m_bend
+            && 0 == m_bnext
+            && this->base_reference() == rhs.base_reference()
+        ;
+    }
+
+    void fill(){
+        std::mbstate_t mbs;
+        std::wcrtomb(0, 0, &mbs);
+        wchar_t value = * this->base_reference();
+        m_bend = std::wcrtomb(m_buffer, value, &mbs);
+        BOOST_ASSERT(-1 != m_bend);
+        BOOST_ASSERT((std::size_t)m_bend <= sizeof(m_buffer));
+        BOOST_ASSERT(m_bend > 0);
+        m_bnext = 0;
+    }
+
+    void increment(){
+        if(++m_bnext < m_bend)
+            return;
+        m_bend = 
+        m_bnext = 0;
+        ++(this->base_reference());
+        m_full = false;
+    }
+
+    // buffer to handle pending characters
+    int m_bend;
+    int m_bnext;
+    char m_buffer[9];
+    bool m_full;
+
+public:
+    // make composible buy using templated constructor
+    template<class T>
+    mb_from_wchar(T start) :
+        super_t(Base(static_cast< T >(start))),
+        m_bend(0),
+        m_bnext(0),
+        m_full(false)
+    {}
+    // intel 7.1 doesn't like default copy constructor
+    mb_from_wchar(const mb_from_wchar & rhs) : 
+        super_t(rhs.base_reference()),
+        m_bend(rhs.m_bend),
+        m_bnext(rhs.m_bnext),
+        m_full(rhs.m_full)
+    {}
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_ITERATORS_MB_FROM_WCHAR_HPP
diff --git a/vendor/pdalboost/boost/archive/iterators/ostream_iterator.hpp b/vendor/pdalboost/boost/archive/iterators/ostream_iterator.hpp
new file mode 100644
index 0000000..a5ec718
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/iterators/ostream_iterator.hpp
@@ -0,0 +1,83 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_OSTREAM_ITERATOR_HPP
+#define BOOST_ARCHIVE_ITERATORS_OSTREAM_ITERATOR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// ostream_iterator.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// note: this is a custom version of the standard ostream_iterator.
+// This is necessary as the standard version doesn't work as expected
+// for wchar_t based streams on systems for which wchar_t not a true
+// type but rather a synonym for some integer type.
+
+#include <ostream>
+#include <boost/iterator/iterator_facade.hpp>
+
+namespace pdalboost { 
+namespace archive {
+namespace iterators {
+
+// given a type, make an input iterator based on a pointer to that type
+template<class Elem>
+class ostream_iterator :  
+    public pdalboost::iterator_facade<
+        ostream_iterator<Elem>,
+        Elem,
+        std::output_iterator_tag,
+        ostream_iterator<Elem> &
+    >
+{
+    friend class pdalboost::iterator_core_access;
+    typedef ostream_iterator this_t ;
+    typedef Elem char_type;
+    typedef std::basic_ostream<char_type> ostream_type;
+
+    //emulate the behavior of std::ostream 
+    ostream_iterator & dereference() const {
+        return const_cast<ostream_iterator &>(*this);
+    }
+    bool equal(const this_t & rhs) const {
+        return m_ostream == rhs.m_ostream;
+    }
+    void increment(){}
+protected:
+    ostream_type *m_ostream;
+    void put_val(char_type e){
+        if(NULL != m_ostream){
+            m_ostream->put(e);
+            if(! m_ostream->good())
+                m_ostream = NULL;
+        }
+    }
+public:
+    this_t & operator=(char_type c){
+        put_val(c);
+        return *this;
+    }
+    ostream_iterator(ostream_type & os) :
+        m_ostream (& os)
+    {}
+    ostream_iterator() :
+        m_ostream (NULL)
+    {}
+    ostream_iterator(const ostream_iterator & rhs) :
+        m_ostream (rhs.m_ostream)
+    {}
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_ITERATORS_OSTREAM_ITERATOR_HPP
diff --git a/vendor/pdalboost/boost/archive/iterators/remove_whitespace.hpp b/vendor/pdalboost/boost/archive/iterators/remove_whitespace.hpp
new file mode 100644
index 0000000..7d9a497
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/iterators/remove_whitespace.hpp
@@ -0,0 +1,167 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_REMOVE_WHITESPACE_HPP
+#define BOOST_ARCHIVE_ITERATORS_REMOVE_WHITESPACE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// remove_whitespace.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/assert.hpp>
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/filter_iterator.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+// here is the default standard implementation of the functor used
+// by the filter iterator to remove spaces.  Unfortunately usage
+// of this implementation in combination with spirit trips a bug
+// VC 6.5.  The only way I can find to work around it is to 
+// implement a special non-standard version for this platform
+
+#ifndef BOOST_NO_CWCTYPE
+#include <cwctype> // iswspace
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ using ::iswspace; }
+#endif
+#endif
+
+#include <cctype> // isspace
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ using ::isspace; }
+#endif
+
+#if defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)
+// this is required for the RW STL on Linux and Tru64.
+#undef isspace
+#undef iswspace
+#endif
+
+namespace { // anonymous
+
+template<class CharType>
+struct remove_whitespace_predicate;
+
+template<>
+struct remove_whitespace_predicate<char>
+{
+    bool operator()(unsigned char t){
+        return ! std::isspace(t);
+    }
+};
+
+#ifndef BOOST_NO_CWCHAR
+template<>
+struct remove_whitespace_predicate<wchar_t>
+{
+    bool operator()(wchar_t t){
+        return ! std::iswspace(t);
+    }
+};
+#endif
+
+} // namespace anonymous
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// convert base64 file data (including whitespace and padding) to binary
+
+namespace pdalboost { 
+namespace archive {
+namespace iterators {
+
+// custom version of filter iterator which doesn't look ahead further than
+// necessary
+
+template<class Predicate, class Base>
+class filter_iterator
+    : public pdalboost::iterator_adaptor<
+        filter_iterator<Predicate, Base>,
+        Base,
+        use_default,
+        single_pass_traversal_tag
+    >
+{
+    friend class pdalboost::iterator_core_access;
+    typedef typename pdalboost::iterator_adaptor<
+        filter_iterator<Predicate, Base>,
+        Base,
+        use_default,
+        single_pass_traversal_tag
+    > super_t;
+    typedef filter_iterator<Predicate, Base> this_t;
+    typedef typename super_t::reference reference_type;
+
+    reference_type dereference_impl(){
+        if(! m_full){
+            while(! m_predicate(* this->base_reference()))
+                ++(this->base_reference());
+            m_full = true;
+        }
+        return * this->base_reference();
+    }
+
+    reference_type dereference() const {
+        return const_cast<this_t *>(this)->dereference_impl();
+    }
+
+    Predicate m_predicate;
+    bool m_full;
+public:
+    // note: this function is public only because comeau compiler complained
+    // I don't know if this is because the compiler is wrong or what
+    void increment(){
+        m_full = false;
+        ++(this->base_reference());
+    }
+    filter_iterator(Base start) : 
+        super_t(start), 
+        m_full(false)
+    {}
+    filter_iterator(){}
+};
+
+template<class Base>
+class remove_whitespace : 
+    public filter_iterator<
+        remove_whitespace_predicate<
+            typename pdalboost::iterator_value<Base>::type
+            //typename Base::value_type
+        >,
+        Base
+    >
+{
+    friend class pdalboost::iterator_core_access;
+    typedef filter_iterator<
+        remove_whitespace_predicate<
+            typename pdalboost::iterator_value<Base>::type
+            //typename Base::value_type
+        >,
+        Base
+    > super_t;
+public:
+//    remove_whitespace(){} // why is this needed?
+    // make composible buy using templated constructor
+    template<class T>
+    remove_whitespace(T start) :
+        super_t(Base(static_cast< T >(start)))
+    {}
+    // intel 7.1 doesn't like default copy constructor
+    remove_whitespace(const remove_whitespace & rhs) : 
+        super_t(rhs.base_reference())
+    {}
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_ITERATORS_REMOVE_WHITESPACE_HPP
diff --git a/vendor/pdalboost/boost/archive/iterators/transform_width.hpp b/vendor/pdalboost/boost/archive/iterators/transform_width.hpp
new file mode 100644
index 0000000..e220ee5
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/iterators/transform_width.hpp
@@ -0,0 +1,176 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_TRANSFORM_WIDTH_HPP
+#define BOOST_ARCHIVE_ITERATORS_TRANSFORM_WIDTH_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// transform_width.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// iterator which takes elements of x bits and returns elements of y bits.
+// used to change streams of 8 bit characters into streams of 6 bit characters.
+// and vice-versa for implementing base64 encodeing/decoding. Be very careful
+// when using and end iterator.  end is only reliable detected when the input
+// stream length is some common multiple of x and y.  E.G. Base64 6 bit
+// character and 8 bit bytes. Lowest common multiple is 24 => 4 6 bit characters
+// or 3 8 bit characters
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+#include <algorithm> // std::min
+
+namespace pdalboost { 
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// class used by text archives to translate char strings to wchar_t
+// strings of the currently selected locale
+template<
+    class Base, 
+    int BitsOut, 
+    int BitsIn, 
+    class CharType = typename pdalboost::iterator_value<Base>::type // output character
+>
+class transform_width : 
+    public pdalboost::iterator_adaptor<
+        transform_width<Base, BitsOut, BitsIn, CharType>,
+        Base,
+        CharType,
+        single_pass_traversal_tag,
+        CharType
+    >
+{
+    friend class pdalboost::iterator_core_access;
+    typedef typename pdalboost::iterator_adaptor<
+        transform_width<Base, BitsOut, BitsIn, CharType>,
+        Base,
+        CharType,
+        single_pass_traversal_tag,
+        CharType
+    > super_t;
+
+    typedef transform_width<Base, BitsOut, BitsIn, CharType> this_t;
+    typedef typename iterator_value<Base>::type base_value_type;
+
+    void fill();
+
+    CharType dereference() const {
+        if(!m_buffer_out_full)
+            const_cast<this_t *>(this)->fill();
+        return m_buffer_out;
+    }
+
+    bool equal_impl(const this_t & rhs){
+        if(BitsIn < BitsOut) // discard any left over bits
+            return this->base_reference() == rhs.base_reference();
+        else{
+            // BitsIn > BitsOut  // zero fill
+            if(this->base_reference() == rhs.base_reference()){
+                m_end_of_sequence = true;
+                return 0 == m_remaining_bits;
+            }
+            return false;
+        }
+    }
+
+    // standard iterator interface
+    bool equal(const this_t & rhs) const {
+        return const_cast<this_t *>(this)->equal_impl(rhs);
+    }
+
+    void increment(){
+        m_buffer_out_full = false;
+    }
+
+    bool m_buffer_out_full;
+    CharType m_buffer_out;
+
+    // last read element from input
+    base_value_type m_buffer_in;
+
+    // number of bits to left in the input buffer.
+    unsigned int m_remaining_bits;
+
+    // flag to indicate we've reached end of data.
+    bool m_end_of_sequence;
+
+public:
+    // make composible buy using templated constructor
+    template<class T>
+    transform_width(T start) : 
+        super_t(Base(static_cast< T >(start))),
+        m_buffer_out_full(false),
+        // To disable GCC warning, but not truly necessary 
+	    //(m_buffer_in will be initialized later before being 
+	    //used because m_remaining_bits == 0)
+        m_buffer_in(0), 
+        m_remaining_bits(0),
+        m_end_of_sequence(false)
+    {}
+    // intel 7.1 doesn't like default copy constructor
+    transform_width(const transform_width & rhs) : 
+        super_t(rhs.base_reference()),
+        m_buffer_out_full(rhs.m_buffer_out_full),
+        m_buffer_out(rhs.m_buffer_out),
+        m_buffer_in(rhs.m_buffer_in),
+        m_remaining_bits(rhs.m_remaining_bits),
+        m_end_of_sequence(false)
+    {}
+};
+
+template<
+    class Base, 
+    int BitsOut, 
+    int BitsIn, 
+    class CharType
+>
+void transform_width<Base, BitsOut, BitsIn, CharType>::fill() {
+    unsigned int missing_bits = BitsOut;
+    m_buffer_out = 0;
+    do{
+        if(0 == m_remaining_bits){
+            if(m_end_of_sequence){
+                m_buffer_in = 0;
+                m_remaining_bits = missing_bits;
+            }
+            else{
+                m_buffer_in = * this->base_reference()++;
+                m_remaining_bits = BitsIn;
+            }
+        }
+
+        // append these bits to the next output
+        // up to the size of the output
+        unsigned int i = (std::min)(missing_bits, m_remaining_bits);
+        // shift interesting bits to least significant position
+        base_value_type j = m_buffer_in >> (m_remaining_bits - i);
+        // and mask off the un interesting higher bits
+        // note presumption of twos complement notation
+        j &= (1 << i) - 1;
+        // append then interesting bits to the output value
+        m_buffer_out <<= i;
+        m_buffer_out |= j;
+
+        // and update counters
+        missing_bits -= i;
+        m_remaining_bits -= i;
+    }while(0 < missing_bits);
+    m_buffer_out_full = true;
+}
+
+} // namespace iterators
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_ITERATORS_TRANSFORM_WIDTH_HPP
diff --git a/vendor/pdalboost/boost/archive/iterators/unescape.hpp b/vendor/pdalboost/boost/archive/iterators/unescape.hpp
new file mode 100644
index 0000000..51be509
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/iterators/unescape.hpp
@@ -0,0 +1,89 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_UNESCAPE_HPP
+#define BOOST_ARCHIVE_ITERATORS_UNESCAPE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// unescape.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/assert.hpp>
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/pointee.hpp>
+
+namespace pdalboost { 
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// class used by text archives to translate char strings to wchar_t
+// strings of the currently selected locale
+template<class Derived, class Base>
+class unescape 
+    : public pdalboost::iterator_adaptor<
+        unescape<Derived, Base>,
+        Base, 
+        typename pointee<Base>::type,
+        single_pass_traversal_tag,
+        typename pointee<Base>::type
+    >
+{
+    friend class pdalboost::iterator_core_access;
+    typedef typename pdalboost::iterator_adaptor<
+        unescape<Derived, Base>, 
+        Base, 
+        typename pointee<Base>::type,
+        single_pass_traversal_tag,
+        typename pointee<Base>::type
+    > super_t;
+
+    typedef unescape<Derived, Base> this_t;
+public:
+    typedef typename this_t::value_type value_type;
+    typedef typename this_t::reference reference;
+private:
+    value_type dereference_impl() {
+        if(! m_full){
+            m_current_value = static_cast<Derived *>(this)->drain();
+            m_full = true;
+        }
+        return m_current_value;
+    }
+
+    reference dereference() const {
+        return const_cast<this_t *>(this)->dereference_impl();
+    }
+
+    value_type m_current_value;
+    bool m_full;
+
+    void increment(){
+        ++(this->base_reference());
+        dereference_impl();
+        m_full = false;
+    };
+
+public:
+
+    unescape(Base base) : 
+        super_t(base),
+        m_full(false)
+    {}
+
+};
+
+} // namespace iterators
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_ITERATORS_UNESCAPE_HPP
diff --git a/vendor/pdalboost/boost/archive/iterators/wchar_from_mb.hpp b/vendor/pdalboost/boost/archive/iterators/wchar_from_mb.hpp
new file mode 100644
index 0000000..ffc73cc
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/iterators/wchar_from_mb.hpp
@@ -0,0 +1,122 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_WCHAR_FROM_MB_HPP
+#define BOOST_ARCHIVE_ITERATORS_WCHAR_FROM_MB_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// wchar_from_mb.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/assert.hpp>
+#include <cctype>
+#include <cstddef> // size_t
+#include <cwchar> // mbstate_t and mbrtowc
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::mbstate_t;
+    using ::mbrtowc;
+} // namespace std
+#endif
+
+#include <boost/serialization/throw_exception.hpp>
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/archive/iterators/dataflow_exception.hpp>
+
+namespace pdalboost { 
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// class used by text archives to translate char strings to wchar_t
+// strings of the currently selected locale
+template<class Base>
+class wchar_from_mb 
+    : public pdalboost::iterator_adaptor<
+        wchar_from_mb<Base>, 
+        Base, 
+        wchar_t,
+        single_pass_traversal_tag,
+        wchar_t
+    >
+{
+    friend class pdalboost::iterator_core_access;
+    typedef typename pdalboost::iterator_adaptor<
+        wchar_from_mb<Base>, 
+        Base, 
+        wchar_t,
+        single_pass_traversal_tag,
+        wchar_t
+    > super_t;
+
+    typedef wchar_from_mb<Base> this_t;
+
+    wchar_t drain();
+
+    wchar_t dereference_impl() {
+        if(! m_full){
+            m_current_value = drain();
+            m_full = true;
+        }
+        return m_current_value;
+    }
+
+    wchar_t dereference() const {
+        return const_cast<this_t *>(this)->dereference_impl();
+    }
+
+    void increment(){
+        dereference_impl();
+        m_full = false;
+        ++(this->base_reference());
+    };
+
+    wchar_t m_current_value;
+    bool m_full;
+
+public:
+    // make composible buy using templated constructor
+    template<class T>
+    wchar_from_mb(T start) : 
+        super_t(Base(static_cast< T >(start))),
+        m_full(false)
+    {}
+    // intel 7.1 doesn't like default copy constructor
+    wchar_from_mb(const wchar_from_mb & rhs) : 
+        super_t(rhs.base_reference()),
+        m_full(rhs.m_full)
+    {}
+};
+
+template<class Base>
+wchar_t wchar_from_mb<Base>::drain(){
+    std::mbstate_t mbs;
+    wchar_t retval;
+    std::size_t result;
+    do {
+        char val = *this->base_reference();
+        result = std::mbrtowc(&retval, &val, 1, &mbs);
+        if(result == static_cast<std::size_t>(-1))
+            pdalboost::serialization::throw_exception(iterators::dataflow_exception(
+                iterators::dataflow_exception::invalid_conversion
+            ));
+    } while (result == static_cast<std::size_t>(-2));
+    return retval;
+}
+
+} // namespace iterators
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_ITERATORS_WCHAR_FROM_MB_HPP
diff --git a/vendor/pdalboost/boost/archive/iterators/xml_escape.hpp b/vendor/pdalboost/boost/archive/iterators/xml_escape.hpp
new file mode 100644
index 0000000..b3b3aad
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/iterators/xml_escape.hpp
@@ -0,0 +1,121 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP
+#define BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_escape.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/assert.hpp>
+#include <boost/archive/iterators/escape.hpp>
+
+namespace pdalboost { 
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// insert escapes into xml text
+
+template<class Base>
+class xml_escape 
+    : public escape<xml_escape<Base>, Base>
+{
+    friend class pdalboost::iterator_core_access;
+
+    typedef escape<xml_escape<Base>, Base> super_t;
+
+public:
+    char fill(const char * & bstart, const char * & bend);
+    wchar_t fill(const wchar_t * & bstart, const wchar_t * & bend);
+
+    template<class T>
+    xml_escape(T start) :
+        super_t(Base(static_cast< T >(start)))
+    {}
+    // intel 7.1 doesn't like default copy constructor
+    xml_escape(const xml_escape & rhs) : 
+        super_t(rhs.base_reference())
+    {}
+};
+
+template<class Base>
+char xml_escape<Base>::fill(
+    const char * & bstart, 
+    const char * & bend
+){
+    char current_value = * this->base_reference();
+    switch(current_value){
+    case '<':
+        bstart = "<";
+        bend = bstart + 4;
+        break;
+    case '>':
+        bstart = ">";
+        bend = bstart + 4;
+        break;
+    case '&':
+        bstart = "&";
+        bend = bstart + 5;
+        break;
+    case '"':
+        bstart = """;
+        bend = bstart + 6;
+        break;
+    case '\'':
+        bstart = "'";
+        bend = bstart + 6;
+        break;
+    default:
+        return current_value;
+    }
+    return *bstart;
+}
+
+template<class Base>
+wchar_t xml_escape<Base>::fill(
+    const wchar_t * & bstart, 
+    const wchar_t * & bend
+){
+    wchar_t current_value = * this->base_reference();
+    switch(current_value){
+    case '<':
+        bstart = L"<";
+        bend = bstart + 4;
+        break;
+    case '>':
+        bstart = L">";
+        bend = bstart + 4;
+        break;
+    case '&':
+        bstart = L"&";
+        bend = bstart + 5;
+        break;
+    case '"':
+        bstart = L""";
+        bend = bstart + 6;
+        break;
+    case '\'':
+        bstart = L"'";
+        bend = bstart + 6;
+        break;
+    default:
+        return current_value;
+    }
+    return *bstart;
+}
+
+} // namespace iterators
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_ITERATORS_XML_ESCAPE_HPP
diff --git a/vendor/pdalboost/boost/archive/iterators/xml_unescape.hpp b/vendor/pdalboost/boost/archive/iterators/xml_unescape.hpp
new file mode 100644
index 0000000..4eb0f83
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/iterators/xml_unescape.hpp
@@ -0,0 +1,125 @@
+#ifndef BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_HPP
+#define BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_unescape.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/assert.hpp>
+
+#include <boost/serialization/throw_exception.hpp>
+
+#include <boost/archive/iterators/unescape.hpp>
+#include <boost/archive/iterators/dataflow_exception.hpp>
+
+namespace pdalboost { 
+namespace archive {
+namespace iterators {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// replace &??? xml escape sequences with the corresponding characters
+template<class Base>
+class xml_unescape 
+    : public unescape<xml_unescape<Base>, Base>
+{
+    friend class pdalboost::iterator_core_access;
+    typedef xml_unescape<Base> this_t;
+    typedef unescape<this_t, Base> super_t;
+    typedef typename pdalboost::iterator_reference<this_t> reference_type;
+
+    reference_type dereference() const {
+        return unescape<xml_unescape<Base>, Base>::dereference();
+    }
+public:
+    // workaround msvc 7.1 ICU crash
+    #if defined(BOOST_MSVC)
+        typedef int value_type;
+    #else
+        typedef typename this_t::value_type value_type;
+    #endif
+
+    void drain_residue(const char *literal);
+    value_type drain();
+
+    template<class T>
+    xml_unescape(T start) : 
+        super_t(Base(static_cast< T >(start)))
+    {}
+    // intel 7.1 doesn't like default copy constructor
+    xml_unescape(const xml_unescape & rhs) : 
+        super_t(rhs.base_reference())
+    {}
+};
+
+template<class Base>
+void xml_unescape<Base>::drain_residue(const char * literal){
+    do{
+        if(* literal != * ++(this->base_reference()))
+            pdalboost::serialization::throw_exception(
+                dataflow_exception(
+                    dataflow_exception::invalid_xml_escape_sequence
+                )
+            );
+    }
+    while('\0' != * ++literal);
+}
+
+// note key constraint on this function is that can't "look ahead" any
+// more than necessary into base iterator.  Doing so would alter the base
+// iterator refenence which would make subsequent iterator comparisons
+// incorrect and thereby break the composiblity of iterators.
+template<class Base>
+typename xml_unescape<Base>::value_type 
+//int 
+xml_unescape<Base>::drain(){
+    value_type retval = * this->base_reference();
+    if('&' != retval){
+        return retval;
+    }
+    retval = * ++(this->base_reference());
+    switch(retval){
+    case 'l': // <
+        drain_residue("t;");
+        retval = '<';
+        break;
+    case 'g': // >
+        drain_residue("t;");
+        retval = '>';
+        break;
+    case 'a':
+        retval = * ++(this->base_reference());
+        switch(retval){
+        case 'p': // '
+            drain_residue("os;");
+            retval = '\'';
+            break;
+        case 'm': // &
+            drain_residue("p;");
+            retval = '&';
+            break;
+        }
+        break;
+    case 'q':
+        drain_residue("uot;");
+        retval = '"';
+        break;
+    }
+    return retval;
+}
+
+} // namespace iterators
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_ARCHIVE_ITERATORS_XML_UNESCAPE_HPP
diff --git a/vendor/pdalboost/boost/archive/polymorphic_iarchive.hpp b/vendor/pdalboost/boost/archive/polymorphic_iarchive.hpp
new file mode 100644
index 0000000..d47e187
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/polymorphic_iarchive.hpp
@@ -0,0 +1,168 @@
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_IARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // std::size_t
+#include <climits> // ULONG_MAX 
+#include <string>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+    using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/cstdint.hpp>
+
+#include <boost/archive/detail/iserializer.hpp>
+#include <boost/archive/detail/interface_iarchive.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+
+#include <boost/archive/detail/decl.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost {
+namespace serialization {
+    class extended_type_info;
+} // namespace serialization
+namespace archive {
+namespace detail {
+    class basic_iarchive;
+    class basic_iserializer;
+}
+
+class polymorphic_iarchive;
+
+class BOOST_SYMBOL_VISIBLE polymorphic_iarchive_impl :
+    public detail::interface_iarchive<polymorphic_iarchive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+    friend class detail::interface_iarchive<polymorphic_iarchive>;
+    friend class load_access;
+#endif
+    // primitive types the only ones permitted by polymorphic archives
+    virtual void load(bool & t) = 0;
+
+    virtual void load(char & t) = 0;
+    virtual void load(signed char & t) = 0;
+    virtual void load(unsigned char & t) = 0;
+    #ifndef BOOST_NO_CWCHAR
+    #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+    virtual void load(wchar_t & t) = 0;
+    #endif
+    #endif
+    virtual void load(short & t) = 0;
+    virtual void load(unsigned short & t) = 0;
+    virtual void load(int & t) = 0;
+    virtual void load(unsigned int & t) = 0;
+    virtual void load(long & t) = 0;
+    virtual void load(unsigned long & t) = 0;
+
+    #if defined(BOOST_HAS_LONG_LONG)
+    virtual void load(pdalboost::long_long_type & t) = 0;
+    virtual void load(pdalboost::ulong_long_type & t) = 0;
+    #elif defined(BOOST_HAS_MS_INT64)
+    virtual void load(__int64 & t) = 0;
+    virtual void load(unsigned __int64 & t) = 0;
+    #endif
+
+    virtual void load(float & t) = 0;
+    virtual void load(double & t) = 0;
+
+    // string types are treated as primitives
+    virtual void load(std::string & t) = 0;
+    #ifndef BOOST_NO_STD_WSTRING
+    virtual void load(std::wstring & t) = 0;
+    #endif
+
+    // used for xml and other tagged formats
+    virtual void load_start(const char * name) = 0;
+    virtual void load_end(const char * name) = 0;
+    virtual void register_basic_serializer(const detail::basic_iserializer & bis) = 0;
+    virtual detail::helper_collection & get_helper_collection() = 0;
+
+    // msvc and borland won't automatically pass these to the base class so
+    // make it explicit here
+    template<class T>
+    void load_override(T & t)
+    {
+        archive::load(* this->This(), t);
+    }
+    // special treatment for name-value pairs.
+    template<class T>
+    void load_override(
+        const pdalboost::serialization::nvp< T > & t
+    ){
+        load_start(t.name());
+        archive::load(* this->This(), t.value());
+        load_end(t.name());
+    }
+protected:
+    virtual ~polymorphic_iarchive_impl(){};
+public:
+    // utility function implemented by all legal archives
+    virtual void set_library_version(library_version_type archive_library_version) = 0;
+    virtual library_version_type get_library_version() const = 0;
+    virtual unsigned int get_flags() const = 0;
+    virtual void delete_created_pointers() = 0;
+    virtual void reset_object_address(
+        const void * new_address,
+        const void * old_address
+    ) = 0;
+
+    virtual void load_binary(void * t, std::size_t size) = 0;
+
+    // these are used by the serialization library implementation.
+    virtual void load_object(
+        void *t,
+        const detail::basic_iserializer & bis
+    ) = 0;
+    virtual const detail::basic_pointer_iserializer * load_pointer(
+        void * & t,
+        const detail::basic_pointer_iserializer * bpis_ptr,
+        const detail::basic_pointer_iserializer * (*finder)(
+            const pdalboost::serialization::extended_type_info & type
+        )
+    ) = 0;
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+namespace pdalboost {
+namespace archive {
+
+class BOOST_SYMBOL_VISIBLE polymorphic_iarchive :
+    public polymorphic_iarchive_impl
+{
+public:
+    virtual ~polymorphic_iarchive(){};
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(pdalboost::archive::polymorphic_iarchive)
+
+#endif // BOOST_ARCHIVE_POLYMORPHIC_IARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/polymorphic_oarchive.hpp b/vendor/pdalboost/boost/archive/polymorphic_oarchive.hpp
new file mode 100644
index 0000000..73306ab
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/polymorphic_oarchive.hpp
@@ -0,0 +1,154 @@
+#ifndef BOOST_ARCHIVE_POLYMORPHIC_OARCHIVE_HPP
+#define BOOST_ARCHIVE_POLYMORPHIC_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // size_t
+#include <climits> // ULONG_MAX 
+#include <string>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+    using ::size_t;
+} // namespace std
+#endif
+
+#include <boost/cstdint.hpp>
+#include <boost/archive/detail/oserializer.hpp>
+#include <boost/archive/detail/interface_oarchive.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+
+#include <boost/archive/detail/decl.hpp>
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost {
+namespace serialization {
+    class extended_type_info;
+} // namespace serialization
+namespace archive {
+namespace detail {
+    class basic_oarchive;
+    class basic_oserializer;
+}
+
+class polymorphic_oarchive;
+
+class BOOST_SYMBOL_VISIBLE polymorphic_oarchive_impl :
+    public detail::interface_oarchive<polymorphic_oarchive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+    friend class detail::interface_oarchive<polymorphic_oarchive>;
+    friend class save_access;
+#endif
+    // primitive types the only ones permitted by polymorphic archives
+    virtual void save(const bool t) = 0;
+
+    virtual void save(const char t) = 0;
+    virtual void save(const signed char t) = 0;
+    virtual void save(const unsigned char t) = 0;
+    #ifndef BOOST_NO_CWCHAR
+    #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+    virtual void save(const wchar_t t) = 0;
+    #endif
+    #endif
+    virtual void save(const short t) = 0;
+    virtual void save(const unsigned short t) = 0;
+    virtual void save(const int t) = 0;
+    virtual void save(const unsigned int t) = 0;
+    virtual void save(const long t) = 0;
+    virtual void save(const unsigned long t) = 0;
+
+    #if defined(BOOST_HAS_LONG_LONG)
+    virtual void save(const pdalboost::long_long_type t) = 0;
+    virtual void save(const pdalboost::ulong_long_type t) = 0;
+    #elif defined(BOOST_HAS_MS_INT64)
+    virtual void save(const __int64 t) = 0;
+    virtual void save(const unsigned __int64 t) = 0;
+    #endif
+
+    virtual void save(const float t) = 0;
+    virtual void save(const double t) = 0;
+
+    // string types are treated as primitives
+    virtual void save(const std::string & t) = 0;
+    #ifndef BOOST_NO_STD_WSTRING
+    virtual void save(const std::wstring & t) = 0;
+    #endif
+
+    virtual void save_null_pointer() = 0;
+    // used for xml and other tagged formats
+    virtual void save_start(const char * name) = 0;
+    virtual void save_end(const char * name) = 0;
+    virtual void register_basic_serializer(const detail::basic_oserializer & bos) = 0;
+    virtual detail::helper_collection & get_helper_collection() = 0;
+
+    virtual void end_preamble() = 0;
+
+    // msvc and borland won't automatically pass these to the base class so
+    // make it explicit here
+    template<class T>
+    void save_override(T & t)
+    {
+        archive::save(* this->This(), t);
+    }
+    // special treatment for name-value pairs.
+    template<class T>
+    void save_override(
+            const ::pdalboost::serialization::nvp< T > & t
+        ){
+        save_start(t.name());
+        archive::save(* this->This(), t.const_value());
+        save_end(t.name());
+    }
+protected:
+    virtual ~polymorphic_oarchive_impl(){};
+public:
+    // utility functions implemented by all legal archives
+    virtual unsigned int get_flags() const = 0;
+    virtual library_version_type get_library_version() const = 0;
+    virtual void save_binary(const void * t, std::size_t size) = 0;
+
+    virtual void save_object(
+        const void *x,
+        const detail::basic_oserializer & bos
+    ) = 0;
+    virtual void save_pointer(
+        const void * t,
+        const detail::basic_pointer_oserializer * bpos_ptr
+    ) = 0;
+};
+
+// note: preserve naming symmetry
+class BOOST_SYMBOL_VISIBLE polymorphic_oarchive : 
+    public polymorphic_oarchive_impl
+{
+public:
+    virtual ~polymorphic_oarchive(){};
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(pdalboost::archive::polymorphic_oarchive)
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_POLYMORPHIC_OARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/text_iarchive.hpp b/vendor/pdalboost/boost/archive/text_iarchive.hpp
new file mode 100644
index 0000000..d2a054f
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/text_iarchive.hpp
@@ -0,0 +1,139 @@
+#ifndef BOOST_ARCHIVE_TEXT_IARCHIVE_HPP
+#define BOOST_ARCHIVE_TEXT_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <istream>
+
+#include <boost/config.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/basic_text_iprimitive.hpp>
+#include <boost/archive/basic_text_iarchive.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+#include <boost/serialization/item_version_type.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost { 
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
+template<class Archive>
+class BOOST_SYMBOL_VISIBLE text_iarchive_impl :
+    public basic_text_iprimitive<std::istream>,
+    public basic_text_iarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+    #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+        // for some inexplicable reason insertion of "class" generates compile erro
+        // on msvc 7.1
+        friend detail::interface_iarchive<Archive>;
+        friend load_access;
+    #else
+        friend class detail::interface_iarchive<Archive>;
+        friend class load_access;
+    #endif
+#endif
+    template<class T>
+    void load(T & t){
+        basic_text_iprimitive<std::istream>::load(t);
+    }
+    void load(version_type & t){
+        unsigned int v;
+        load(v);
+        t = version_type(v);
+    }
+    void load(pdalboost::serialization::item_version_type & t){
+        unsigned int v;
+        load(v);
+        t = pdalboost::serialization::item_version_type(v);
+    }
+    BOOST_ARCHIVE_DECL void 
+    load(char * t);
+    #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+    BOOST_ARCHIVE_DECL void 
+    load(wchar_t * t);
+    #endif
+    BOOST_ARCHIVE_DECL void 
+    load(std::string &s);
+    #ifndef BOOST_NO_STD_WSTRING
+    BOOST_ARCHIVE_DECL void 
+    load(std::wstring &ws);
+    #endif
+    template<class T>
+    void load_override(T & t){
+        basic_text_iarchive<Archive>::load_override(t);
+    }
+    BOOST_ARCHIVE_DECL void
+    load_override(class_name_type & t);
+    BOOST_ARCHIVE_DECL void
+    init();
+    BOOST_ARCHIVE_DECL 
+    text_iarchive_impl(std::istream & is, unsigned int flags);
+    // don't import inline definitions! leave this as a reminder.
+    //BOOST_ARCHIVE_DECL 
+    ~text_iarchive_impl(){};
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost { 
+namespace archive {
+
+class BOOST_SYMBOL_VISIBLE text_iarchive : 
+    public text_iarchive_impl<text_iarchive>{
+public:
+    text_iarchive(std::istream & is_, unsigned int flags = 0) :
+        // note: added _ to suppress useless gcc warning
+        text_iarchive_impl<text_iarchive>(is_, flags)
+    {}
+    ~text_iarchive(){}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(pdalboost::archive::text_iarchive)
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_ARCHIVE_TEXT_IARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/text_oarchive.hpp b/vendor/pdalboost/boost/archive/text_oarchive.hpp
new file mode 100644
index 0000000..c6434af
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/text_oarchive.hpp
@@ -0,0 +1,129 @@
+#ifndef BOOST_ARCHIVE_TEXT_OARCHIVE_HPP
+#define BOOST_ARCHIVE_TEXT_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <ostream>
+#include <cstddef> // std::size_t
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+} // namespace std
+#endif
+
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/basic_text_oprimitive.hpp>
+#include <boost/archive/basic_text_oarchive.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+#include <boost/serialization/item_version_type.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost { 
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_oarchive;
+} // namespace detail
+
+template<class Archive>
+class BOOST_SYMBOL_VISIBLE text_oarchive_impl :
+     /* protected ? */ public basic_text_oprimitive<std::ostream>,
+     public basic_text_oarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+    #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+        // for some inexplicable reason insertion of "class" generates compile erro
+        // on msvc 7.1
+        friend detail::interface_oarchive<Archive>;
+        friend basic_text_oarchive<Archive>;
+        friend save_access;
+    #else
+        friend class detail::interface_oarchive<Archive>;
+        friend class basic_text_oarchive<Archive>;
+        friend class save_access;
+    #endif
+#endif
+    template<class T>
+    void save(const T & t){
+        this->newtoken();
+        basic_text_oprimitive<std::ostream>::save(t);
+    }
+    void save(const version_type & t){
+        save(static_cast<const unsigned int>(t));
+    }
+    void save(const pdalboost::serialization::item_version_type & t){
+        save(static_cast<const unsigned int>(t));
+    }
+    BOOST_ARCHIVE_DECL void 
+    save(const char * t);
+    #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+    BOOST_ARCHIVE_DECL void 
+    save(const wchar_t * t);
+    #endif
+    BOOST_ARCHIVE_DECL void 
+    save(const std::string &s);
+    #ifndef BOOST_NO_STD_WSTRING
+    BOOST_ARCHIVE_DECL void 
+    save(const std::wstring &ws);
+    #endif
+    BOOST_ARCHIVE_DECL 
+    text_oarchive_impl(std::ostream & os, unsigned int flags);
+    // don't import inline definitions! leave this as a reminder.
+    //BOOST_ARCHIVE_DECL 
+    ~text_oarchive_impl(){};
+public:
+    BOOST_ARCHIVE_DECL void 
+    save_binary(const void *address, std::size_t count);
+};
+
+// do not derive from this class.  If you want to extend this functionality
+// via inhertance, derived from text_oarchive_impl instead.  This will
+// preserve correct static polymorphism.
+class BOOST_SYMBOL_VISIBLE text_oarchive : 
+    public text_oarchive_impl<text_oarchive>
+{
+public:
+    text_oarchive(std::ostream & os_, unsigned int flags = 0) :
+        // note: added _ to suppress useless gcc warning
+        text_oarchive_impl<text_oarchive>(os_, flags)
+    {}
+    ~text_oarchive(){}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(pdalboost::archive::text_oarchive)
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_TEXT_OARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/text_wiarchive.hpp b/vendor/pdalboost/boost/archive/text_wiarchive.hpp
new file mode 100644
index 0000000..43d5070
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/text_wiarchive.hpp
@@ -0,0 +1,137 @@
+#ifndef BOOST_ARCHIVE_TEXT_WIARCHIVE_HPP
+#define BOOST_ARCHIVE_TEXT_WIARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_wiarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <istream>
+
+#include <boost/archive/detail/auto_link_warchive.hpp>
+#include <boost/archive/basic_text_iprimitive.hpp>
+#include <boost/archive/basic_text_iarchive.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+#include <boost/serialization/item_version_type.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost { 
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
+template<class Archive>
+class BOOST_SYMBOL_VISIBLE text_wiarchive_impl :
+    public basic_text_iprimitive<std::wistream>,
+    public basic_text_iarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+    #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+        // for some inexplicable reason insertion of "class" generates compile erro
+        // on msvc 7.1
+        friend detail::interface_iarchive<Archive>;
+        friend load_access;
+    #else
+        friend class detail::interface_iarchive<Archive>;
+        friend class load_access;
+    #endif
+#endif
+    template<class T>
+    void load(T & t){
+        basic_text_iprimitive<std::wistream>::load(t);
+    }
+    void load(version_type & t){
+        unsigned int v;
+        load(v);
+        t = version_type(v);
+    }
+    void load(pdalboost::serialization::item_version_type & t){
+        unsigned int v;
+        load(v);
+        t = pdalboost::serialization::item_version_type(v);
+    }
+    BOOST_WARCHIVE_DECL void
+    load(char * t);
+    #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+    BOOST_WARCHIVE_DECL void
+    load(wchar_t * t);
+    #endif
+    BOOST_WARCHIVE_DECL void
+    load(std::string &s);
+    #ifndef BOOST_NO_STD_WSTRING
+    BOOST_WARCHIVE_DECL void
+    load(std::wstring &ws);
+    #endif
+    template<class T>
+    void load_override(T & t){
+        basic_text_iarchive<Archive>::load_override(t);
+    }
+    BOOST_WARCHIVE_DECL 
+    text_wiarchive_impl(std::wistream & is, unsigned int flags);
+    ~text_wiarchive_impl(){};
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost { 
+namespace archive {
+
+class BOOST_SYMBOL_VISIBLE text_wiarchive : 
+    public text_wiarchive_impl<text_wiarchive>{
+public:
+    text_wiarchive(std::wistream & is, unsigned int flags = 0) :
+        text_wiarchive_impl<text_wiarchive>(is, flags)
+    {}
+    ~text_wiarchive(){}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(pdalboost::archive::text_wiarchive)
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_TEXT_WIARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/text_woarchive.hpp b/vendor/pdalboost/boost/archive/text_woarchive.hpp
new file mode 100644
index 0000000..2d7e4a6
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/text_woarchive.hpp
@@ -0,0 +1,155 @@
+#ifndef BOOST_ARCHIVE_TEXT_WOARCHIVE_HPP
+#define BOOST_ARCHIVE_TEXT_WOARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_woarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <ostream>
+#include <cstddef> // size_t
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+} // namespace std
+#endif
+
+#include <boost/archive/detail/auto_link_warchive.hpp>
+#include <boost/archive/basic_text_oprimitive.hpp>
+#include <boost/archive/basic_text_oarchive.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+#include <boost/serialization/item_version_type.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost { 
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_oarchive;
+} // namespace detail
+
+template<class Archive>
+class BOOST_SYMBOL_VISIBLE text_woarchive_impl :
+    public basic_text_oprimitive<std::wostream>,
+    public basic_text_oarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+    #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+        // for some inexplicable reason insertion of "class" generates compile erro
+        // on msvc 7.1
+        friend detail::interface_oarchive<Archive>;
+        friend basic_text_oarchive<Archive>;
+        friend save_access;
+    #else
+        friend class detail::interface_oarchive<Archive>;
+        friend class basic_text_oarchive<Archive>;
+        friend class save_access;
+    #endif
+#endif
+    template<class T>
+    void save(const T & t){
+        this->newtoken();
+        basic_text_oprimitive<std::wostream>::save(t);
+    }
+    void save(const version_type & t){
+        save(static_cast<const unsigned int>(t));
+    }
+    void save(const pdalboost::serialization::item_version_type & t){
+        save(static_cast<const unsigned int>(t));
+    }
+    BOOST_WARCHIVE_DECL void
+    save(const char * t);
+    #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+    BOOST_WARCHIVE_DECL void
+    save(const wchar_t * t);
+    #endif
+    BOOST_WARCHIVE_DECL void
+    save(const std::string &s);
+    #ifndef BOOST_NO_STD_WSTRING
+    BOOST_WARCHIVE_DECL void
+    save(const std::wstring &ws);
+    #endif
+    text_woarchive_impl(std::wostream & os, unsigned int flags) :
+        basic_text_oprimitive<std::wostream>(
+            os, 
+            0 != (flags & no_codecvt)
+        ),
+        basic_text_oarchive<Archive>(flags)
+    {
+        if(0 == (flags & no_header))
+            basic_text_oarchive<Archive>::init();
+    }
+public:
+    void save_binary(const void *address, std::size_t count){
+        put(static_cast<wchar_t>('\n'));
+        this->end_preamble();
+        #if ! defined(__MWERKS__)
+        this->basic_text_oprimitive<std::wostream>::save_binary(
+        #else
+        this->basic_text_oprimitive::save_binary(
+        #endif
+            address, 
+            count
+        );
+        put(static_cast<wchar_t>('\n'));
+        this->delimiter = this->none;
+    }
+
+};
+
+// we use the following because we can't use
+// typedef text_oarchive_impl<text_oarchive_impl<...> > text_oarchive;
+
+// do not derive from this class.  If you want to extend this functionality
+// via inhertance, derived from text_oarchive_impl instead.  This will
+// preserve correct static polymorphism.
+class BOOST_SYMBOL_VISIBLE text_woarchive : 
+    public text_woarchive_impl<text_woarchive>
+{
+public:
+    text_woarchive(std::wostream & os, unsigned int flags = 0) :
+        text_woarchive_impl<text_woarchive>(os, flags)
+    {}
+    ~text_woarchive(){}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(pdalboost::archive::text_woarchive)
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_TEXT_WOARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/wcslen.hpp b/vendor/pdalboost/boost/archive/wcslen.hpp
new file mode 100644
index 0000000..2a3d635
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/wcslen.hpp
@@ -0,0 +1,56 @@
+#ifndef BOOST_ARCHIVE_WCSLEN_HPP
+#define BOOST_ARCHIVE_WCSLEN_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// wcslen.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // size_t
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+} // namespace std
+#endif
+
+#ifndef BOOST_NO_CWCHAR
+
+// a couple of libraries which include wchar_t don't include
+// wcslen
+
+#if defined(BOOST_DINKUMWARE_STDLIB) && BOOST_DINKUMWARE_STDLIB < 306 \
+|| defined(__LIBCOMO__) 
+
+namespace std {
+inline std::size_t wcslen(const wchar_t * ws)
+{
+    const wchar_t * eows = ws;
+    while(* eows != 0)
+        ++eows;
+    return eows - ws;
+}
+} // namespace std
+
+#else
+
+#include <cwchar>
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::wcslen; }
+#endif
+
+#endif // wcslen
+
+#endif //BOOST_NO_CWCHAR
+
+#endif //BOOST_ARCHIVE_WCSLEN_HPP
diff --git a/vendor/pdalboost/boost/archive/xml_archive_exception.hpp b/vendor/pdalboost/boost/archive/xml_archive_exception.hpp
new file mode 100644
index 0000000..a9f4382
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/xml_archive_exception.hpp
@@ -0,0 +1,57 @@
+#ifndef BOOST_ARCHIVE_XML_ARCHIVE_EXCEPTION_HPP
+#define BOOST_ARCHIVE_XML_ARCHIVE_EXCEPTION_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_archive_exception.hpp:
+
+// (C) Copyright 2007 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <exception>
+#include <boost/assert.hpp>
+
+#include <boost/config.hpp> 
+#include <boost/archive/detail/decl.hpp>
+#include <boost/archive/archive_exception.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+namespace pdalboost {
+namespace archive {
+
+//////////////////////////////////////////////////////////////////////
+// exceptions thrown by xml archives
+//
+class BOOST_SYMBOL_VISIBLE xml_archive_exception : 
+    public virtual pdalboost::archive::archive_exception
+{
+public:
+    typedef enum {
+        xml_archive_parsing_error,    // see save_register
+        xml_archive_tag_mismatch,
+        xml_archive_tag_name_error
+    } exception_code;
+    BOOST_ARCHIVE_DECL xml_archive_exception(
+        exception_code c, 
+        const char * e1 = NULL,
+        const char * e2 = NULL
+    );
+    BOOST_ARCHIVE_DECL xml_archive_exception(xml_archive_exception const &) ;
+    virtual BOOST_ARCHIVE_DECL ~xml_archive_exception() BOOST_NOEXCEPT_OR_NOTHROW ;
+};
+
+}// namespace archive
+}// namespace pdalboost
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif //BOOST_XML_ARCHIVE_ARCHIVE_EXCEPTION_HPP
diff --git a/vendor/pdalboost/boost/archive/xml_iarchive.hpp b/vendor/pdalboost/boost/archive/xml_iarchive.hpp
new file mode 100644
index 0000000..5d37fd7
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/xml_iarchive.hpp
@@ -0,0 +1,150 @@
+#ifndef BOOST_ARCHIVE_XML_IARCHIVE_HPP
+#define BOOST_ARCHIVE_XML_IARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_iarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <istream>
+
+#include <boost/scoped_ptr.hpp>
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/basic_text_iprimitive.hpp>
+#include <boost/archive/basic_xml_iarchive.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+#include <boost/serialization/item_version_type.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost { 
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
+template<class CharType>
+class basic_xml_grammar;
+typedef basic_xml_grammar<char> xml_grammar;
+
+template<class Archive>
+class BOOST_SYMBOL_VISIBLE xml_iarchive_impl : 
+    public basic_text_iprimitive<std::istream>,
+    public basic_xml_iarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+    #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+        // for some inexplicable reason insertion of "class" generates compile erro
+        // on msvc 7.1
+        friend detail::interface_iarchive<Archive>;
+        friend basic_xml_iarchive<Archive>;
+        friend load_access;
+    #else
+        friend class detail::interface_iarchive<Archive>;
+        friend class basic_xml_iarchive<Archive>;
+        friend class load_access;
+    #endif
+#endif
+    // use boost:scoped_ptr to implement automatic deletion;
+    pdalboost::scoped_ptr<xml_grammar> gimpl;
+
+    std::istream & get_is(){
+        return is;
+    }
+    template<class T>
+    void load(T & t){
+        basic_text_iprimitive<std::istream>::load(t);
+    }
+    void 
+    load(version_type & t){
+        unsigned int v;
+        load(v);
+        t = version_type(v);
+    }
+    void 
+    load(pdalboost::serialization::item_version_type & t){
+        unsigned int v;
+        load(v);
+        t = pdalboost::serialization::item_version_type(v);
+    }
+    BOOST_ARCHIVE_DECL void
+    load(char * t);
+    #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+    BOOST_ARCHIVE_DECL void
+    load(wchar_t * t);
+    #endif
+    BOOST_ARCHIVE_DECL void
+    load(std::string &s);
+    #ifndef BOOST_NO_STD_WSTRING
+    BOOST_ARCHIVE_DECL void
+    load(std::wstring &ws);
+    #endif
+    template<class T>
+    void load_override(T & t){
+        basic_xml_iarchive<Archive>::load_override(t);
+    }
+    BOOST_ARCHIVE_DECL void
+    load_override(class_name_type & t);
+    BOOST_ARCHIVE_DECL void
+    init();
+    BOOST_ARCHIVE_DECL 
+    xml_iarchive_impl(std::istream & is, unsigned int flags);
+    BOOST_ARCHIVE_DECL
+    ~xml_iarchive_impl();
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost { 
+namespace archive {
+
+class BOOST_SYMBOL_VISIBLE xml_iarchive : 
+    public xml_iarchive_impl<xml_iarchive>{
+public:
+    xml_iarchive(std::istream & is, unsigned int flags = 0) :
+        xml_iarchive_impl<xml_iarchive>(is, flags)
+    {}
+    ~xml_iarchive(){};
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(pdalboost::archive::xml_iarchive)
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_ARCHIVE_XML_IARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/xml_oarchive.hpp b/vendor/pdalboost/boost/archive/xml_oarchive.hpp
new file mode 100644
index 0000000..dbd939b
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/xml_oarchive.hpp
@@ -0,0 +1,143 @@
+#ifndef BOOST_ARCHIVE_XML_OARCHIVE_HPP
+#define BOOST_ARCHIVE_XML_OARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_oarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <ostream>
+
+#include <cstddef> // size_t
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+} // namespace std
+#endif
+
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/basic_text_oprimitive.hpp>
+#include <boost/archive/basic_xml_oarchive.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+#include <boost/serialization/item_version_type.hpp>
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_oarchive;
+} // namespace detail
+
+template<class Archive>
+class BOOST_SYMBOL_VISIBLE xml_oarchive_impl : 
+    public basic_text_oprimitive<std::ostream>,
+    public basic_xml_oarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+    #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+        // for some inexplicable reason insertion of "class" generates compile erro
+        // on msvc 7.1
+        friend detail::interface_oarchive<Archive>;
+        friend basic_xml_oarchive<Archive>;
+        friend save_access;
+    #else
+        friend class detail::interface_oarchive<Archive>;
+        friend class basic_xml_oarchive<Archive>;
+        friend class save_access;
+    #endif
+#endif
+    //void end_preamble(){
+    //    basic_xml_oarchive<Archive>::end_preamble();
+    //}
+    template<class T>
+    void save(const T & t){
+        basic_text_oprimitive<std::ostream>::save(t);
+    }
+    void 
+    save(const version_type & t){
+        save(static_cast<const unsigned int>(t));
+    }
+    void 
+    save(const pdalboost::serialization::item_version_type & t){
+        save(static_cast<const unsigned int>(t));
+    }
+    BOOST_ARCHIVE_DECL void 
+    save(const char * t);
+    #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+    BOOST_ARCHIVE_DECL void
+    save(const wchar_t * t);
+    #endif
+    BOOST_ARCHIVE_DECL void
+    save(const std::string &s);
+    #ifndef BOOST_NO_STD_WSTRING
+    BOOST_ARCHIVE_DECL void
+    save(const std::wstring &ws);
+    #endif
+    BOOST_ARCHIVE_DECL 
+    xml_oarchive_impl(std::ostream & os, unsigned int flags);
+    ~xml_oarchive_impl(){}
+public:
+    void save_binary(const void *address, std::size_t count){
+        this->end_preamble();
+        #if ! defined(__MWERKS__)
+        this->basic_text_oprimitive<std::ostream>::save_binary(
+        #else
+        this->basic_text_oprimitive::save_binary(
+        #endif
+            address, 
+            count
+        );
+        this->indent_next = true;
+    }
+};
+
+// we use the following because we can't use
+// typedef xml_oarchive_impl<xml_oarchive_impl<...> > xml_oarchive;
+
+// do not derive from this class.  If you want to extend this functionality
+// via inhertance, derived from xml_oarchive_impl instead.  This will
+// preserve correct static polymorphism.
+class BOOST_SYMBOL_VISIBLE xml_oarchive : 
+    public xml_oarchive_impl<xml_oarchive>
+{
+public:
+    xml_oarchive(std::ostream & os, unsigned int flags = 0) :
+        xml_oarchive_impl<xml_oarchive>(os, flags)
+    {}
+    ~xml_oarchive(){}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(pdalboost::archive::xml_oarchive)
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_ARCHIVE_XML_OARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/xml_wiarchive.hpp b/vendor/pdalboost/boost/archive/xml_wiarchive.hpp
new file mode 100644
index 0000000..514358f
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/xml_wiarchive.hpp
@@ -0,0 +1,165 @@
+#ifndef BOOST_ARCHIVE_XML_WIARCHIVE_HPP
+#define BOOST_ARCHIVE_XML_WIARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_wiarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <istream>
+
+#include <boost/smart_ptr/scoped_ptr.hpp>
+#include <boost/archive/detail/auto_link_warchive.hpp>
+#include <boost/archive/basic_text_iprimitive.hpp>
+#include <boost/archive/basic_xml_iarchive.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+#include <boost/serialization/item_version_type.hpp>
+
+#ifdef BOOST_NO_CXX11_HDR_CODECVT
+    #include <boost/archive/detail/utf8_codecvt_facet.hpp>
+#else
+    #include <codecvt>
+    namespace pdalboost { namespace archive { namespace detail {
+        typedef std::codecvt_utf8<wchar_t> utf8_codecvt_facet;
+    } } }
+#endif
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_iarchive;
+} // namespace detail
+
+template<class CharType>
+class basic_xml_grammar;
+typedef basic_xml_grammar<wchar_t> xml_wgrammar;
+
+template<class Archive>
+class BOOST_SYMBOL_VISIBLE xml_wiarchive_impl : 
+    public basic_text_iprimitive<std::wistream>,
+    public basic_xml_iarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+    #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+        // for some inexplicable reason insertion of "class" generates compile erro
+        // on msvc 7.1
+        friend detail::interface_iarchive<Archive>;
+        friend basic_xml_iarchive<Archive>;
+        friend load_access;
+    #else
+        friend class detail::interface_iarchive<Archive>;
+        friend class basic_xml_iarchive<Archive>;
+        friend class load_access;
+    #endif
+#endif
+    pdalboost::scoped_ptr<xml_wgrammar> gimpl;
+    std::wistream & get_is(){
+        return is;
+    }
+    template<class T>
+    void 
+    load(T & t){
+        basic_text_iprimitive<std::wistream>::load(t);
+    }
+    void 
+    load(version_type & t){
+        unsigned int v;
+        load(v);
+        t = version_type(v);
+    }
+    void 
+    load(pdalboost::serialization::item_version_type & t){
+        unsigned int v;
+        load(v);
+        t = pdalboost::serialization::item_version_type(v);
+    }
+    BOOST_WARCHIVE_DECL void
+    load(char * t);
+    #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+    BOOST_WARCHIVE_DECL void
+    load(wchar_t * t);
+    #endif
+    BOOST_WARCHIVE_DECL void
+    load(std::string &s);
+    #ifndef BOOST_NO_STD_WSTRING
+    BOOST_WARCHIVE_DECL void
+    load(std::wstring &ws);
+    #endif
+    template<class T>
+    void load_override(T & t){
+        basic_xml_iarchive<Archive>::load_override(t);
+    }
+    BOOST_WARCHIVE_DECL void
+    load_override(class_name_type & t);
+    BOOST_WARCHIVE_DECL void 
+    init();
+    BOOST_WARCHIVE_DECL 
+    xml_wiarchive_impl(std::wistream & is, unsigned int flags) ;
+    BOOST_WARCHIVE_DECL 
+    ~xml_wiarchive_impl();
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#  pragma warning(pop) 
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost { 
+namespace archive {
+
+class BOOST_SYMBOL_VISIBLE xml_wiarchive :
+    public xml_wiarchive_impl<xml_wiarchive>{
+public:
+    xml_wiarchive(std::wistream & is, unsigned int flags = 0) :
+        xml_wiarchive_impl<xml_wiarchive>(is, flags)
+    {}
+    ~xml_wiarchive(){}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(pdalboost::archive::xml_wiarchive)
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_XML_WIARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/archive/xml_woarchive.hpp b/vendor/pdalboost/boost/archive/xml_woarchive.hpp
new file mode 100644
index 0000000..49f6683
--- /dev/null
+++ b/vendor/pdalboost/boost/archive/xml_woarchive.hpp
@@ -0,0 +1,161 @@
+#ifndef BOOST_ARCHIVE_XML_WOARCHIVE_HPP
+#define BOOST_ARCHIVE_XML_WOARCHIVE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_woarchive.hpp
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <cstddef> // size_t
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+} // namespace std
+#endif
+
+#include <ostream>
+
+#include <boost/smart_ptr/scoped_ptr.hpp>
+#include <boost/archive/detail/auto_link_warchive.hpp>
+#include <boost/archive/basic_text_oprimitive.hpp>
+#include <boost/archive/basic_xml_oarchive.hpp>
+#include <boost/archive/detail/register_archive.hpp>
+#include <boost/serialization/item_version_type.hpp>
+
+#ifdef BOOST_NO_CXX11_HDR_CODECVT
+    #include <boost/archive/detail/utf8_codecvt_facet.hpp>
+#else
+    #include <codecvt>
+    namespace pdalboost { namespace archive { namespace detail {
+        typedef std::codecvt_utf8<wchar_t> utf8_codecvt_facet;
+    } } }
+#endif
+
+#include <boost/archive/detail/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace archive {
+
+namespace detail {
+    template<class Archive> class interface_oarchive;
+} // namespace detail
+
+template<class Archive>
+class BOOST_SYMBOL_VISIBLE xml_woarchive_impl :
+    public basic_text_oprimitive<std::wostream>,
+    public basic_xml_oarchive<Archive>
+{
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+protected:
+    #if BOOST_WORKAROUND(BOOST_MSVC, < 1500)
+        // for some inexplicable reason insertion of "class" generates compile erro
+        // on msvc 7.1
+        friend detail::interface_oarchive<Archive>;
+        friend basic_xml_oarchive<Archive>;
+        friend save_access;
+    #else
+        friend class detail::interface_oarchive<Archive>;
+        friend class basic_xml_oarchive<Archive>;
+        friend class save_access;
+    #endif
+#endif
+    //void end_preamble(){
+    //    basic_xml_oarchive<Archive>::end_preamble();
+    //}
+    template<class T>
+    void 
+    save(const T & t){
+        basic_text_oprimitive<std::wostream>::save(t);
+    }
+    void 
+    save(const version_type & t){
+        save(static_cast<const unsigned int>(t));
+    }
+    void 
+    save(const pdalboost::serialization::item_version_type & t){
+        save(static_cast<const unsigned int>(t));
+    }
+    BOOST_WARCHIVE_DECL void
+    save(const char * t);
+    #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+    BOOST_WARCHIVE_DECL void 
+    save(const wchar_t * t);
+    #endif
+    BOOST_WARCHIVE_DECL void 
+    save(const std::string &s);
+    #ifndef BOOST_NO_STD_WSTRING
+    BOOST_WARCHIVE_DECL void
+    save(const std::wstring &ws);
+    #endif
+    BOOST_WARCHIVE_DECL 
+    xml_woarchive_impl(std::wostream & os, unsigned int flags);
+    BOOST_WARCHIVE_DECL 
+    ~xml_woarchive_impl();
+public:
+    void 
+    save_binary(const void *address, std::size_t count){
+        this->end_preamble();
+        #if ! defined(__MWERKS__)
+        this->basic_text_oprimitive<std::wostream>::save_binary(
+        #else
+        this->basic_text_oprimitive::save_binary(
+        #endif
+            address, 
+            count
+        );
+        this->indent_next = true;
+    }
+};
+
+// we use the following because we can't use
+// typedef xml_woarchive_impl<xml_woarchive_impl<...> > xml_woarchive;
+
+// do not derive from this class.  If you want to extend this functionality
+// via inhertance, derived from xml_woarchive_impl instead.  This will
+// preserve correct static polymorphism.
+class BOOST_SYMBOL_VISIBLE xml_woarchive : 
+    public xml_woarchive_impl<xml_woarchive>
+{
+public:
+    xml_woarchive(std::wostream & os, unsigned int flags = 0) :
+        xml_woarchive_impl<xml_woarchive>(os, flags)
+    {}
+    ~xml_woarchive(){}
+};
+
+} // namespace archive
+} // namespace pdalboost
+
+// required by export
+BOOST_SERIALIZATION_REGISTER_ARCHIVE(pdalboost::archive::xml_woarchive)
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+#endif // BOOST_ARCHIVE_XML_OARCHIVE_HPP
diff --git a/vendor/pdalboost/boost/array.hpp b/vendor/pdalboost/boost/array.hpp
new file mode 100644
index 0000000..fafe507
--- /dev/null
+++ b/vendor/pdalboost/boost/array.hpp
@@ -0,0 +1,446 @@
+/* The following code declares class array,
+ * an STL container (as wrapper) for arrays of constant size.
+ *
+ * See
+ *      http://www.boost.org/libs/array/
+ * for documentation.
+ *
+ * The original author site is at: http://www.josuttis.com/
+ *
+ * (C) Copyright Nicolai M. Josuttis 2001.
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * 14 Apr 2012 - (mtc) Added support for pdalboost::hash
+ * 28 Dec 2010 - (mtc) Added cbegin and cend (and crbegin and crend) for C++Ox compatibility.
+ * 10 Mar 2010 - (mtc) fill method added, matching resolution of the standard library working group.
+ *      See <http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#776> or Trac issue #3168
+ *      Eventually, we should remove "assign" which is now a synonym for "fill" (Marshall Clow)
+ * 10 Mar 2010 - added workaround for SUNCC and !STLPort [trac #3893] (Marshall Clow)
+ * 29 Jan 2004 - c_array() added, BOOST_NO_PRIVATE_IN_AGGREGATE removed (Nico Josuttis)
+ * 23 Aug 2002 - fix for Non-MSVC compilers combined with MSVC libraries.
+ * 05 Aug 2001 - minor update (Nico Josuttis)
+ * 20 Jan 2001 - STLport fix (Beman Dawes)
+ * 29 Sep 2000 - Initial Revision (Nico Josuttis)
+ *
+ * Jan 29, 2004
+ */
+#ifndef BOOST_ARRAY_HPP
+#define BOOST_ARRAY_HPP
+
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)  
+# pragma warning(push)  
+# pragma warning(disable:4996) // 'std::equal': Function call with parameters that may be unsafe
+# pragma warning(disable:4510) // pdalboost::array<T,N>' : default constructor could not be generated 
+# pragma warning(disable:4610) // warning C4610: class 'pdalboost::array<T,N>' can never be instantiated - user defined constructor required 
+#endif
+
+#include <cstddef>
+#include <stdexcept>
+#include <boost/assert.hpp>
+#include <boost/swap.hpp>
+
+// Handles broken standard libraries better than <iterator>
+#include <boost/detail/iterator.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/functional/hash_fwd.hpp>
+#include <algorithm>
+
+// FIXES for broken compilers
+#include <boost/config.hpp>
+
+
+namespace pdalboost {
+
+    template<class T, std::size_t N>
+    class array {
+      public:
+        T elems[N];    // fixed-size array of elements of type T
+
+      public:
+        // type definitions
+        typedef T              value_type;
+        typedef T*             iterator;
+        typedef const T*       const_iterator;
+        typedef T&             reference;
+        typedef const T&       const_reference;
+        typedef std::size_t    size_type;
+        typedef std::ptrdiff_t difference_type;
+
+        // iterator support
+        iterator        begin()       { return elems; }
+        const_iterator  begin() const { return elems; }
+        const_iterator cbegin() const { return elems; }
+        
+        iterator        end()       { return elems+N; }
+        const_iterator  end() const { return elems+N; }
+        const_iterator cend() const { return elems+N; }
+
+        // reverse iterator support
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS)
+        typedef std::reverse_iterator<iterator> reverse_iterator;
+        typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+#elif defined(_MSC_VER) && (_MSC_VER == 1300) && defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB == 310)
+        // workaround for broken reverse_iterator in VC7
+        typedef std::reverse_iterator<std::_Ptrit<value_type, difference_type, iterator,
+                                      reference, iterator, reference> > reverse_iterator;
+        typedef std::reverse_iterator<std::_Ptrit<value_type, difference_type, const_iterator,
+                                      const_reference, iterator, reference> > const_reverse_iterator;
+#elif defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) 
+        typedef std::reverse_iterator<iterator, std::random_access_iterator_tag, 
+              value_type, reference, iterator, difference_type> reverse_iterator; 
+        typedef std::reverse_iterator<const_iterator, std::random_access_iterator_tag,
+              value_type, const_reference, const_iterator, difference_type> const_reverse_iterator;
+#else
+        // workaround for broken reverse_iterator implementations
+        typedef std::reverse_iterator<iterator,T> reverse_iterator;
+        typedef std::reverse_iterator<const_iterator,T> const_reverse_iterator;
+#endif
+
+        reverse_iterator rbegin() { return reverse_iterator(end()); }
+        const_reverse_iterator rbegin() const {
+            return const_reverse_iterator(end());
+        }
+        const_reverse_iterator crbegin() const {
+            return const_reverse_iterator(end());
+        }
+
+        reverse_iterator rend() { return reverse_iterator(begin()); }
+        const_reverse_iterator rend() const {
+            return const_reverse_iterator(begin());
+        }
+        const_reverse_iterator crend() const {
+            return const_reverse_iterator(begin());
+        }
+
+        // operator[]
+        reference operator[](size_type i) 
+        { 
+            BOOST_ASSERT_MSG( i < N, "out of range" );
+            return elems[i];
+        }
+        
+        const_reference operator[](size_type i) const 
+        {     
+            BOOST_ASSERT_MSG( i < N, "out of range" );
+            return elems[i]; 
+        }
+
+        // at() with range check
+        reference at(size_type i) { rangecheck(i); return elems[i]; }
+        const_reference at(size_type i) const { rangecheck(i); return elems[i]; }
+    
+        // front() and back()
+        reference front() 
+        { 
+            return elems[0]; 
+        }
+        
+        const_reference front() const 
+        {
+            return elems[0];
+        }
+        
+        reference back() 
+        { 
+            return elems[N-1]; 
+        }
+        
+        const_reference back() const 
+        { 
+            return elems[N-1]; 
+        }
+
+        // size is constant
+        static size_type size() { return N; }
+        static bool empty() { return false; }
+        static size_type max_size() { return N; }
+        enum { static_size = N };
+
+        // swap (note: linear complexity)
+        void swap (array<T,N>& y) {
+            for (size_type i = 0; i < N; ++i)
+                pdalboost::swap(elems[i],y.elems[i]);
+        }
+
+        // direct access to data (read-only)
+        const T* data() const { return elems; }
+        T* data() { return elems; }
+
+        // use array as C array (direct read/write access to data)
+        T* c_array() { return elems; }
+
+        // assignment with type conversion
+        template <typename T2>
+        array<T,N>& operator= (const array<T2,N>& rhs) {
+            std::copy(rhs.begin(),rhs.end(), begin());
+            return *this;
+        }
+
+        // assign one value to all elements
+        void assign (const T& value) { fill ( value ); }    // A synonym for fill
+        void fill   (const T& value)
+        {
+            std::fill_n(begin(),size(),value);
+        }
+
+        // check range (may be private because it is static)
+        static void rangecheck (size_type i) {
+            if (i >= size()) {
+                std::out_of_range e("array<>: index out of range");
+                pdalboost::throw_exception(e);
+            }
+        }
+
+    };
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+    template< class T >
+    class array< T, 0 > {
+
+      public:
+        // type definitions
+        typedef T              value_type;
+        typedef T*             iterator;
+        typedef const T*       const_iterator;
+        typedef T&             reference;
+        typedef const T&       const_reference;
+        typedef std::size_t    size_type;
+        typedef std::ptrdiff_t difference_type;
+
+        // iterator support
+        iterator        begin()       { return       iterator( reinterpret_cast<       T * >( this ) ); }
+        const_iterator  begin() const { return const_iterator( reinterpret_cast< const T * >( this ) ); }
+        const_iterator cbegin() const { return const_iterator( reinterpret_cast< const T * >( this ) ); }
+
+        iterator        end()       { return  begin(); }
+        const_iterator  end() const { return  begin(); }
+        const_iterator cend() const { return cbegin(); }
+
+        // reverse iterator support
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS)
+        typedef std::reverse_iterator<iterator> reverse_iterator;
+        typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+#elif defined(_MSC_VER) && (_MSC_VER == 1300) && defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB == 310)
+        // workaround for broken reverse_iterator in VC7
+        typedef std::reverse_iterator<std::_Ptrit<value_type, difference_type, iterator,
+                                      reference, iterator, reference> > reverse_iterator;
+        typedef std::reverse_iterator<std::_Ptrit<value_type, difference_type, const_iterator,
+                                      const_reference, iterator, reference> > const_reverse_iterator;
+#elif defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) 
+        typedef std::reverse_iterator<iterator, std::random_access_iterator_tag, 
+              value_type, reference, iterator, difference_type> reverse_iterator; 
+        typedef std::reverse_iterator<const_iterator, std::random_access_iterator_tag,
+              value_type, const_reference, const_iterator, difference_type> const_reverse_iterator;
+#else
+        // workaround for broken reverse_iterator implementations
+        typedef std::reverse_iterator<iterator,T> reverse_iterator;
+        typedef std::reverse_iterator<const_iterator,T> const_reverse_iterator;
+#endif
+
+        reverse_iterator rbegin() { return reverse_iterator(end()); }
+        const_reverse_iterator rbegin() const {
+            return const_reverse_iterator(end());
+        }
+        const_reverse_iterator crbegin() const {
+            return const_reverse_iterator(end());
+        }
+
+        reverse_iterator rend() { return reverse_iterator(begin()); }
+        const_reverse_iterator rend() const {
+            return const_reverse_iterator(begin());
+        }
+        const_reverse_iterator crend() const {
+            return const_reverse_iterator(begin());
+        }
+
+        // operator[]
+        reference operator[](size_type /*i*/)
+        {
+            return failed_rangecheck();
+        }
+
+        const_reference operator[](size_type /*i*/) const
+        {
+            return failed_rangecheck();
+        }
+
+        // at() with range check
+        reference at(size_type /*i*/)               {   return failed_rangecheck(); }
+        const_reference at(size_type /*i*/) const   {   return failed_rangecheck(); }
+
+        // front() and back()
+        reference front()
+        {
+            return failed_rangecheck();
+        }
+
+        const_reference front() const
+        {
+            return failed_rangecheck();
+        }
+
+        reference back()
+        {
+            return failed_rangecheck();
+        }
+
+        const_reference back() const
+        {
+            return failed_rangecheck();
+        }
+
+        // size is constant
+        static size_type size() { return 0; }
+        static bool empty() { return true; }
+        static size_type max_size() { return 0; }
+        enum { static_size = 0 };
+
+        void swap (array<T,0>& /*y*/) {
+        }
+
+        // direct access to data (read-only)
+        const T* data() const { return 0; }
+        T* data() { return 0; }
+
+        // use array as C array (direct read/write access to data)
+        T* c_array() { return 0; }
+
+        // assignment with type conversion
+        template <typename T2>
+        array<T,0>& operator= (const array<T2,0>& ) {
+            return *this;
+        }
+
+        // assign one value to all elements
+        void assign (const T& value) { fill ( value ); }
+        void fill   (const T& ) {}
+        
+        // check range (may be private because it is static)
+        static reference failed_rangecheck () {
+                std::out_of_range e("attempt to access element of an empty array");
+                pdalboost::throw_exception(e);
+#if defined(BOOST_NO_EXCEPTIONS) || (!defined(BOOST_MSVC) && !defined(__PATHSCALE__))
+                //
+                // We need to return something here to keep
+                // some compilers happy: however we will never
+                // actually get here....
+                //
+                static T placeholder;
+                return placeholder;
+#endif
+            }
+    };
+#endif
+
+    // comparisons
+    template<class T, std::size_t N>
+    bool operator== (const array<T,N>& x, const array<T,N>& y) {
+        return std::equal(x.begin(), x.end(), y.begin());
+    }
+    template<class T, std::size_t N>
+    bool operator< (const array<T,N>& x, const array<T,N>& y) {
+        return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end());
+    }
+    template<class T, std::size_t N>
+    bool operator!= (const array<T,N>& x, const array<T,N>& y) {
+        return !(x==y);
+    }
+    template<class T, std::size_t N>
+    bool operator> (const array<T,N>& x, const array<T,N>& y) {
+        return y<x;
+    }
+    template<class T, std::size_t N>
+    bool operator<= (const array<T,N>& x, const array<T,N>& y) {
+        return !(y<x);
+    }
+    template<class T, std::size_t N>
+    bool operator>= (const array<T,N>& x, const array<T,N>& y) {
+        return !(x<y);
+    }
+
+    // global swap()
+    template<class T, std::size_t N>
+    inline void swap (array<T,N>& x, array<T,N>& y) {
+        x.swap(y);
+    }
+
+#if defined(__SUNPRO_CC)
+//  Trac ticket #4757; the Sun Solaris compiler can't handle
+//  syntax like 'T(&get_c_array(pdalboost::array<T,N>& arg))[N]'
+//  
+//  We can't just use this for all compilers, because the 
+//      borland compilers can't handle this form. 
+    namespace detail {
+       template <typename T, std::size_t N> struct c_array
+       {
+           typedef T type[N];
+       };
+    }
+    
+   // Specific for pdalboost::array: simply returns its elems data member.
+   template <typename T, std::size_t N>
+   typename detail::c_array<T,N>::type& get_c_array(pdalboost::array<T,N>& arg)
+   {
+       return arg.elems;
+   }
+
+   // Specific for pdalboost::array: simply returns its elems data member.
+   template <typename T, std::size_t N>
+   typename const detail::c_array<T,N>::type& get_c_array(const pdalboost::array<T,N>& arg)
+   {
+       return arg.elems;
+   }
+#else
+// Specific for pdalboost::array: simply returns its elems data member.
+    template <typename T, std::size_t N>
+    T(&get_c_array(pdalboost::array<T,N>& arg))[N]
+    {
+        return arg.elems;
+    }
+    
+    // Const version.
+    template <typename T, std::size_t N>
+    const T(&get_c_array(const pdalboost::array<T,N>& arg))[N]
+    {
+        return arg.elems;
+    }
+#endif
+    
+#if 0
+    // Overload for std::array, assuming that std::array will have
+    // explicit conversion functions as discussed at the WG21 meeting
+    // in Summit, March 2009.
+    template <typename T, std::size_t N>
+    T(&get_c_array(std::array<T,N>& arg))[N]
+    {
+        return static_cast<T(&)[N]>(arg);
+    }
+    
+    // Const version.
+    template <typename T, std::size_t N>
+    const T(&get_c_array(const std::array<T,N>& arg))[N]
+    {
+        return static_cast<T(&)[N]>(arg);
+    }
+#endif
+
+
+    template<class T, std::size_t N>
+    std::size_t hash_value(const array<T,N>& arr)
+    {
+        return pdalboost::hash_range(arr.begin(), arr.end());
+    }
+
+} /* namespace pdalboost */
+
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)  
+# pragma warning(pop)  
+#endif 
+
+#endif /*BOOST_ARRAY_HPP*/
diff --git a/vendor/pdalboost/boost/assert.hpp b/vendor/pdalboost/boost/assert.hpp
new file mode 100644
index 0000000..c19ae0d
--- /dev/null
+++ b/vendor/pdalboost/boost/assert.hpp
@@ -0,0 +1,85 @@
+//
+//  boost/assert.hpp - BOOST_ASSERT(expr)
+//                     BOOST_ASSERT_MSG(expr, msg)
+//                     BOOST_VERIFY(expr)
+//                     BOOST_VERIFY_MSG(expr, msg)
+//                     BOOST_ASSERT_IS_VOID
+//
+//  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+//  Copyright (c) 2007, 2014 Peter Dimov
+//  Copyright (c) Beman Dawes 2011
+//  Copyright (c) 2015 Ion Gaztanaga
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  Note: There are no include guards. This is intentional.
+//
+//  See http://www.boost.org/libs/assert/assert.html for documentation.
+//
+
+//
+// Stop inspect complaining about use of 'assert':
+//
+// boostinspect:naassert_macro
+//
+
+//
+// BOOST_ASSERT, BOOST_ASSERT_MSG, BOOST_ASSERT_IS_VOID
+//
+
+#undef BOOST_ASSERT
+#undef BOOST_ASSERT_MSG
+#undef BOOST_ASSERT_IS_VOID
+
+#if defined(BOOST_DISABLE_ASSERTS) || ( defined(BOOST_ENABLE_ASSERT_DEBUG_HANDLER) && defined(NDEBUG) )
+
+# define BOOST_ASSERT(expr) ((void)0)
+# define BOOST_ASSERT_MSG(expr, msg) ((void)0)
+# define BOOST_ASSERT_IS_VOID
+
+#elif defined(BOOST_ENABLE_ASSERT_HANDLER) || ( defined(BOOST_ENABLE_ASSERT_DEBUG_HANDLER) && !defined(NDEBUG) )
+
+#include <boost/config.hpp> // for BOOST_LIKELY
+#include <boost/current_function.hpp>
+
+namespace pdalboost
+{
+    void assertion_failed(char const * expr, char const * function, char const * file, long line); // user defined
+    void assertion_failed_msg(char const * expr, char const * msg, char const * function, char const * file, long line); // user defined
+} // namespace pdalboost
+
+#define BOOST_ASSERT(expr) (BOOST_LIKELY(!!(expr))? ((void)0): ::pdalboost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
+#define BOOST_ASSERT_MSG(expr, msg) (BOOST_LIKELY(!!(expr))? ((void)0): ::pdalboost::assertion_failed_msg(#expr, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
+
+#else
+
+# include <assert.h> // .h to support old libraries w/o <cassert> - effect is the same
+
+# define BOOST_ASSERT(expr) assert(expr)
+# define BOOST_ASSERT_MSG(expr, msg) assert((expr)&&(msg))
+#if defined(NDEBUG)
+# define BOOST_ASSERT_IS_VOID
+#endif
+
+#endif
+
+//
+// BOOST_VERIFY, BOOST_VERIFY_MSG
+//
+
+#undef BOOST_VERIFY
+#undef BOOST_VERIFY_MSG
+
+#if defined(BOOST_DISABLE_ASSERTS) || ( !defined(BOOST_ENABLE_ASSERT_HANDLER) && defined(NDEBUG) )
+
+# define BOOST_VERIFY(expr) ((void)(expr))
+# define BOOST_VERIFY_MSG(expr, msg) ((void)(expr))
+
+#else
+
+# define BOOST_VERIFY(expr) BOOST_ASSERT(expr)
+# define BOOST_VERIFY_MSG(expr, msg) BOOST_ASSERT_MSG(expr,msg)
+
+#endif
diff --git a/vendor/pdalboost/boost/atomic.hpp b/vendor/pdalboost/boost/atomic.hpp
new file mode 100644
index 0000000..cc28b1a
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic.hpp
@@ -0,0 +1,18 @@
+#ifndef BOOST_ATOMIC_HPP
+#define BOOST_ATOMIC_HPP
+
+//  Copyright (c) 2011 Helge Bahmann
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// This header includes all Boost.Atomic public headers
+
+#include <boost/atomic/atomic.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/atomic/atomic.hpp b/vendor/pdalboost/boost/atomic/atomic.hpp
new file mode 100644
index 0000000..c812d1e
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/atomic.hpp
@@ -0,0 +1,93 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/atomic.hpp
+ *
+ * This header contains definition of \c atomic template and \c atomic_flag.
+ */
+
+#ifndef BOOST_ATOMIC_ATOMIC_HPP_INCLUDED_
+#define BOOST_ATOMIC_ATOMIC_HPP_INCLUDED_
+
+#include <boost/atomic/capabilities.hpp>
+#include <boost/atomic/fences.hpp>
+#include <boost/atomic/atomic_flag.hpp>
+#include <boost/atomic/detail/atomic_template.hpp>
+#include <boost/atomic/detail/operations.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace pdalboost {
+
+using atomics::atomic;
+
+using atomics::atomic_char;
+using atomics::atomic_uchar;
+using atomics::atomic_schar;
+using atomics::atomic_uint8_t;
+using atomics::atomic_int8_t;
+using atomics::atomic_ushort;
+using atomics::atomic_short;
+using atomics::atomic_uint16_t;
+using atomics::atomic_int16_t;
+using atomics::atomic_uint;
+using atomics::atomic_int;
+using atomics::atomic_uint32_t;
+using atomics::atomic_int32_t;
+using atomics::atomic_ulong;
+using atomics::atomic_long;
+using atomics::atomic_uint64_t;
+using atomics::atomic_int64_t;
+#ifdef BOOST_HAS_LONG_LONG
+using atomics::atomic_ullong;
+using atomics::atomic_llong;
+#endif
+using atomics::atomic_address;
+using atomics::atomic_bool;
+using atomics::atomic_wchar_t;
+#if !defined(BOOST_NO_CXX11_CHAR16_T)
+using atomics::atomic_char16_t;
+#endif
+#if !defined(BOOST_NO_CXX11_CHAR32_T)
+using atomics::atomic_char32_t;
+#endif
+
+using atomics::atomic_int_least8_t;
+using atomics::atomic_uint_least8_t;
+using atomics::atomic_int_least16_t;
+using atomics::atomic_uint_least16_t;
+using atomics::atomic_int_least32_t;
+using atomics::atomic_uint_least32_t;
+using atomics::atomic_int_least64_t;
+using atomics::atomic_uint_least64_t;
+using atomics::atomic_int_fast8_t;
+using atomics::atomic_uint_fast8_t;
+using atomics::atomic_int_fast16_t;
+using atomics::atomic_uint_fast16_t;
+using atomics::atomic_int_fast32_t;
+using atomics::atomic_uint_fast32_t;
+using atomics::atomic_int_fast64_t;
+using atomics::atomic_uint_fast64_t;
+using atomics::atomic_intmax_t;
+using atomics::atomic_uintmax_t;
+
+using atomics::atomic_size_t;
+using atomics::atomic_ptrdiff_t;
+
+#if defined(BOOST_HAS_INTPTR_T)
+using atomics::atomic_intptr_t;
+using atomics::atomic_uintptr_t;
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_ATOMIC_ATOMIC_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/atomic_flag.hpp b/vendor/pdalboost/boost/atomic/atomic_flag.hpp
new file mode 100644
index 0000000..d4a17bd
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/atomic_flag.hpp
@@ -0,0 +1,33 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/atomic_flag.hpp
+ *
+ * This header contains definition of \c atomic_flag.
+ */
+
+#ifndef BOOST_ATOMIC_ATOMIC_FLAG_HPP_INCLUDED_
+#define BOOST_ATOMIC_ATOMIC_FLAG_HPP_INCLUDED_
+
+#include <boost/atomic/capabilities.hpp>
+#include <boost/atomic/detail/operations.hpp>
+#include <boost/atomic/detail/atomic_flag.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace pdalboost {
+
+using atomics::atomic_flag;
+
+} // namespace pdalboost
+
+#endif // BOOST_ATOMIC_ATOMIC_FLAG_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/capabilities.hpp b/vendor/pdalboost/boost/atomic/capabilities.hpp
new file mode 100644
index 0000000..05bbb0f
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/capabilities.hpp
@@ -0,0 +1,161 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/capabilities.hpp
+ *
+ * This header defines feature capabilities macros.
+ */
+
+#ifndef BOOST_ATOMIC_CAPABILITIES_HPP_INCLUDED_
+#define BOOST_ATOMIC_CAPABILITIES_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/platform.hpp>
+#include <boost/atomic/detail/int_sizes.hpp>
+
+#if !defined(BOOST_ATOMIC_EMULATED)
+#include BOOST_ATOMIC_DETAIL_HEADER(boost/atomic/detail/caps_)
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#ifndef BOOST_ATOMIC_INT8_LOCK_FREE
+#define BOOST_ATOMIC_INT8_LOCK_FREE 0
+#endif
+
+#ifndef BOOST_ATOMIC_INT16_LOCK_FREE
+#define BOOST_ATOMIC_INT16_LOCK_FREE 0
+#endif
+
+#ifndef BOOST_ATOMIC_INT32_LOCK_FREE
+#define BOOST_ATOMIC_INT32_LOCK_FREE 0
+#endif
+
+#ifndef BOOST_ATOMIC_INT64_LOCK_FREE
+#define BOOST_ATOMIC_INT64_LOCK_FREE 0
+#endif
+
+#ifndef BOOST_ATOMIC_INT128_LOCK_FREE
+#define BOOST_ATOMIC_INT128_LOCK_FREE 0
+#endif
+
+
+#ifndef BOOST_ATOMIC_CHAR_LOCK_FREE
+#define BOOST_ATOMIC_CHAR_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
+#endif
+
+#ifndef BOOST_ATOMIC_CHAR16_T_LOCK_FREE
+#define BOOST_ATOMIC_CHAR16_T_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
+#endif
+
+#ifndef BOOST_ATOMIC_CHAR32_T_LOCK_FREE
+#define BOOST_ATOMIC_CHAR32_T_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
+#endif
+
+#ifndef BOOST_ATOMIC_WCHAR_T_LOCK_FREE
+#if BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 1
+#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 2
+#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 4
+#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 8
+#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
+#else
+#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE 0
+#endif
+#endif
+
+#ifndef BOOST_ATOMIC_SHORT_LOCK_FREE
+#if BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 1
+#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 2
+#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 4
+#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 8
+#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
+#else
+#define BOOST_ATOMIC_SHORT_LOCK_FREE 0
+#endif
+#endif
+
+#ifndef BOOST_ATOMIC_INT_LOCK_FREE
+#if BOOST_ATOMIC_DETAIL_SIZEOF_INT == 1
+#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 2
+#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 4
+#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 8
+#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
+#else
+#define BOOST_ATOMIC_INT_LOCK_FREE 0
+#endif
+#endif
+
+#ifndef BOOST_ATOMIC_LONG_LOCK_FREE
+#if BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 1
+#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 2
+#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 4
+#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 8
+#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
+#else
+#define BOOST_ATOMIC_LONG_LOCK_FREE 0
+#endif
+#endif
+
+#ifndef BOOST_ATOMIC_LLONG_LOCK_FREE
+#if BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 1
+#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 2
+#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 4
+#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
+#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 8
+#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
+#else
+#define BOOST_ATOMIC_LLONG_LOCK_FREE 0
+#endif
+#endif
+
+#ifndef BOOST_ATOMIC_POINTER_LOCK_FREE
+#if (BOOST_ATOMIC_DETAIL_SIZEOF_POINTER + 0) == 8
+#define BOOST_ATOMIC_POINTER_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
+#elif (BOOST_ATOMIC_DETAIL_SIZEOF_POINTER + 0) == 4
+#define BOOST_ATOMIC_POINTER_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
+#else
+#define BOOST_ATOMIC_POINTER_LOCK_FREE 0
+#endif
+#endif
+
+#define BOOST_ATOMIC_ADDRESS_LOCK_FREE BOOST_ATOMIC_POINTER_LOCK_FREE
+
+#ifndef BOOST_ATOMIC_BOOL_LOCK_FREE
+// We store bools in 1-byte storage in all backends
+#define BOOST_ATOMIC_BOOL_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
+#endif
+
+#ifndef BOOST_ATOMIC_FLAG_LOCK_FREE
+#define BOOST_ATOMIC_FLAG_LOCK_FREE BOOST_ATOMIC_BOOL_LOCK_FREE
+#endif
+
+#ifndef BOOST_ATOMIC_THREAD_FENCE
+#define BOOST_ATOMIC_THREAD_FENCE 0
+#endif
+
+#ifndef BOOST_ATOMIC_SIGNAL_FENCE
+#define BOOST_ATOMIC_SIGNAL_FENCE 0
+#endif
+
+#endif // BOOST_ATOMIC_CAPABILITIES_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/detail/atomic_flag.hpp b/vendor/pdalboost/boost/atomic/detail/atomic_flag.hpp
new file mode 100644
index 0000000..3d2ff41
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/detail/atomic_flag.hpp
@@ -0,0 +1,70 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/detail/atomic_flag.hpp
+ *
+ * This header contains interface definition of \c atomic_flag.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_ATOMIC_FLAG_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_ATOMIC_FLAG_HPP_INCLUDED_
+
+#include <boost/assert.hpp>
+#include <boost/memory_order.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/operations_lockfree.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+/*
+ * IMPLEMENTATION NOTE: All interface functions MUST be declared with BOOST_FORCEINLINE,
+ *                      see comment for convert_memory_order_to_gcc in ops_gcc_atomic.hpp.
+ */
+
+namespace pdalboost {
+namespace atomics {
+
+#if defined(BOOST_NO_CXX11_CONSTEXPR) || defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
+#define BOOST_ATOMIC_NO_ATOMIC_FLAG_INIT
+#else
+#define BOOST_ATOMIC_FLAG_INIT {}
+#endif
+
+struct atomic_flag
+{
+    typedef atomics::detail::operations< 1u, false > operations;
+    typedef operations::storage_type storage_type;
+
+    operations::aligned_storage_type m_storage;
+
+    BOOST_FORCEINLINE BOOST_CONSTEXPR atomic_flag() BOOST_NOEXCEPT : m_storage(0)
+    {
+    }
+
+    BOOST_FORCEINLINE bool test_and_set(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return operations::test_and_set(m_storage.value, order);
+    }
+
+    BOOST_FORCEINLINE void clear(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(order != memory_order_acquire);
+        BOOST_ASSERT(order != memory_order_acq_rel);
+        operations::clear(m_storage.value, order);
+    }
+
+    BOOST_DELETED_FUNCTION(atomic_flag(atomic_flag const&))
+    BOOST_DELETED_FUNCTION(atomic_flag& operator= (atomic_flag const&))
+};
+
+} // namespace atomics
+} // namespace pdalboost
+
+#endif // BOOST_ATOMIC_DETAIL_ATOMIC_FLAG_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/detail/atomic_template.hpp b/vendor/pdalboost/boost/atomic/detail/atomic_template.hpp
new file mode 100644
index 0000000..f51c20b
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/detail/atomic_template.hpp
@@ -0,0 +1,774 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/detail/atomic_template.hpp
+ *
+ * This header contains interface definition of \c atomic template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_ATOMIC_TEMPLATE_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_ATOMIC_TEMPLATE_HPP_INCLUDED_
+
+#include <cstddef>
+#include <boost/cstdint.hpp>
+#include <boost/assert.hpp>
+#include <boost/type_traits/is_signed.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/bitwise_cast.hpp>
+#include <boost/atomic/detail/operations_fwd.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+// 'pdalboost::atomics::atomic<T>' : multiple assignment operators specified
+#pragma warning(disable: 4522)
+#endif
+
+/*
+ * IMPLEMENTATION NOTE: All interface functions MUST be declared with BOOST_FORCEINLINE,
+ *                      see comment for convert_memory_order_to_gcc in ops_gcc_atomic.hpp.
+ */
+
+namespace pdalboost {
+namespace atomics {
+namespace detail {
+
+BOOST_FORCEINLINE BOOST_CONSTEXPR memory_order deduce_failure_order(memory_order order) BOOST_NOEXCEPT
+{
+    return order == memory_order_acq_rel ? memory_order_acquire : (order == memory_order_release ? memory_order_relaxed : order);
+}
+
+BOOST_FORCEINLINE BOOST_CONSTEXPR bool cas_failure_order_must_not_be_stronger_than_success_order(memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+{
+    // 15 == (memory_order_seq_cst | memory_order_consume), see memory_order.hpp
+    // Given the enum values we can test the strength of memory order requirements with this single condition.
+    return (failure_order & 15u) <= (success_order & 15u);
+}
+
+template< typename T, bool IsInt = pdalboost::is_integral< T >::value >
+struct classify
+{
+    typedef void type;
+};
+
+template< typename T >
+struct classify< T, true > { typedef int type; };
+
+template< typename T >
+struct classify< T*, false > { typedef void* type; };
+
+template< typename T, typename Kind >
+class base_atomic;
+
+//! Implementation for integers
+template< typename T >
+class base_atomic< T, int >
+{
+private:
+    typedef T value_type;
+    typedef T difference_type;
+    typedef atomics::detail::operations< storage_size_of< value_type >::value, pdalboost::is_signed< T >::value > operations;
+
+protected:
+    typedef value_type value_arg_type;
+
+public:
+    typedef typename operations::storage_type storage_type;
+
+protected:
+    typename operations::aligned_storage_type m_storage;
+
+public:
+    BOOST_DEFAULTED_FUNCTION(base_atomic(), {})
+    BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : m_storage(v) {}
+
+    BOOST_FORCEINLINE void store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(order != memory_order_consume);
+        BOOST_ASSERT(order != memory_order_acquire);
+        BOOST_ASSERT(order != memory_order_acq_rel);
+
+        operations::store(m_storage.value, static_cast< storage_type >(v), order);
+    }
+
+    BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(order != memory_order_release);
+        BOOST_ASSERT(order != memory_order_acq_rel);
+
+        return static_cast< value_type >(operations::load(m_storage.value, order));
+    }
+
+    BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return static_cast< value_type >(operations::fetch_add(m_storage.value, static_cast< storage_type >(v), order));
+    }
+
+    BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return static_cast< value_type >(operations::fetch_sub(m_storage.value, static_cast< storage_type >(v), order));
+    }
+
+    BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return static_cast< value_type >(operations::exchange(m_storage.value, static_cast< storage_type >(v), order));
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(failure_order != memory_order_release);
+        BOOST_ASSERT(failure_order != memory_order_acq_rel);
+        BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+        storage_type old_value = static_cast< storage_type >(expected);
+        const bool res = operations::compare_exchange_strong(m_storage.value, old_value, static_cast< storage_type >(desired), success_order, failure_order);
+        expected = static_cast< value_type >(old_value);
+        return res;
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(failure_order != memory_order_release);
+        BOOST_ASSERT(failure_order != memory_order_acq_rel);
+        BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+        storage_type old_value = static_cast< storage_type >(expected);
+        const bool res = operations::compare_exchange_weak(m_storage.value, old_value, static_cast< storage_type >(desired), success_order, failure_order);
+        expected = static_cast< value_type >(old_value);
+        return res;
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
+    }
+
+    BOOST_FORCEINLINE value_type fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return static_cast< value_type >(operations::fetch_and(m_storage.value, static_cast< storage_type >(v), order));
+    }
+
+    BOOST_FORCEINLINE value_type fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return static_cast< value_type >(operations::fetch_or(m_storage.value, static_cast< storage_type >(v), order));
+    }
+
+    BOOST_FORCEINLINE value_type fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return static_cast< value_type >(operations::fetch_xor(m_storage.value, static_cast< storage_type >(v), order));
+    }
+
+    BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
+    {
+        return operations::is_lock_free(m_storage.value);
+    }
+
+    BOOST_FORCEINLINE value_type operator++(int) volatile BOOST_NOEXCEPT
+    {
+        return fetch_add(1);
+    }
+
+    BOOST_FORCEINLINE value_type operator++() volatile BOOST_NOEXCEPT
+    {
+        return fetch_add(1) + 1;
+    }
+
+    BOOST_FORCEINLINE value_type operator--(int) volatile BOOST_NOEXCEPT
+    {
+        return fetch_sub(1);
+    }
+
+    BOOST_FORCEINLINE value_type operator--() volatile BOOST_NOEXCEPT
+    {
+        return fetch_sub(1) - 1;
+    }
+
+    BOOST_FORCEINLINE value_type operator+=(difference_type v) volatile BOOST_NOEXCEPT
+    {
+        return fetch_add(v) + v;
+    }
+
+    BOOST_FORCEINLINE value_type operator-=(difference_type v) volatile BOOST_NOEXCEPT
+    {
+        return fetch_sub(v) - v;
+    }
+
+    BOOST_FORCEINLINE value_type operator&=(value_type v) volatile BOOST_NOEXCEPT
+    {
+        return fetch_and(v) & v;
+    }
+
+    BOOST_FORCEINLINE value_type operator|=(value_type v) volatile BOOST_NOEXCEPT
+    {
+        return fetch_or(v) | v;
+    }
+
+    BOOST_FORCEINLINE value_type operator^=(value_type v) volatile BOOST_NOEXCEPT
+    {
+        return fetch_xor(v) ^ v;
+    }
+
+    BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&))
+    BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&))
+};
+
+//! Implementation for bool
+template< >
+class base_atomic< bool, int >
+{
+private:
+    typedef bool value_type;
+    typedef atomics::detail::operations< 1u, false > operations;
+
+protected:
+    typedef value_type value_arg_type;
+
+public:
+    typedef operations::storage_type storage_type;
+
+protected:
+    operations::aligned_storage_type m_storage;
+
+public:
+    BOOST_DEFAULTED_FUNCTION(base_atomic(), {})
+    BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : m_storage(v) {}
+
+    BOOST_FORCEINLINE void store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(order != memory_order_consume);
+        BOOST_ASSERT(order != memory_order_acquire);
+        BOOST_ASSERT(order != memory_order_acq_rel);
+
+        operations::store(m_storage.value, static_cast< storage_type >(v), order);
+    }
+
+    BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(order != memory_order_release);
+        BOOST_ASSERT(order != memory_order_acq_rel);
+
+        return !!operations::load(m_storage.value, order);
+    }
+
+    BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return !!operations::exchange(m_storage.value, static_cast< storage_type >(v), order);
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(failure_order != memory_order_release);
+        BOOST_ASSERT(failure_order != memory_order_acq_rel);
+        BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+        storage_type old_value = static_cast< storage_type >(expected);
+        const bool res = operations::compare_exchange_strong(m_storage.value, old_value, static_cast< storage_type >(desired), success_order, failure_order);
+        expected = !!old_value;
+        return res;
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(failure_order != memory_order_release);
+        BOOST_ASSERT(failure_order != memory_order_acq_rel);
+        BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+        storage_type old_value = static_cast< storage_type >(expected);
+        const bool res = operations::compare_exchange_weak(m_storage.value, old_value, static_cast< storage_type >(desired), success_order, failure_order);
+        expected = !!old_value;
+        return res;
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
+    }
+
+    BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
+    {
+        return operations::is_lock_free(m_storage.value);
+    }
+
+    BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&))
+    BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&))
+};
+
+
+//! Implementation for user-defined types, such as structs and enums
+template< typename T >
+class base_atomic< T, void >
+{
+private:
+    typedef T value_type;
+    typedef atomics::detail::operations< storage_size_of< value_type >::value, false > operations;
+
+protected:
+    typedef value_type const& value_arg_type;
+
+public:
+    typedef typename operations::storage_type storage_type;
+
+protected:
+    typename operations::aligned_storage_type m_storage;
+
+public:
+    BOOST_FORCEINLINE explicit base_atomic(value_type const& v = value_type()) BOOST_NOEXCEPT : m_storage(atomics::detail::bitwise_cast< storage_type >(v))
+    {
+    }
+
+    BOOST_FORCEINLINE void store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(order != memory_order_consume);
+        BOOST_ASSERT(order != memory_order_acquire);
+        BOOST_ASSERT(order != memory_order_acq_rel);
+
+        operations::store(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order);
+    }
+
+    BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(order != memory_order_release);
+        BOOST_ASSERT(order != memory_order_acq_rel);
+
+        return atomics::detail::bitwise_cast< value_type >(operations::load(m_storage.value, order));
+    }
+
+    BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return atomics::detail::bitwise_cast< value_type >(operations::exchange(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order));
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(failure_order != memory_order_release);
+        BOOST_ASSERT(failure_order != memory_order_acq_rel);
+        BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+        storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
+        const bool res = operations::compare_exchange_strong(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
+        expected = atomics::detail::bitwise_cast< value_type >(old_value);
+        return res;
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(failure_order != memory_order_release);
+        BOOST_ASSERT(failure_order != memory_order_acq_rel);
+        BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+        storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
+        const bool res = operations::compare_exchange_weak(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
+        expected = atomics::detail::bitwise_cast< value_type >(old_value);
+        return res;
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
+    }
+
+    BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
+    {
+        return operations::is_lock_free(m_storage.value);
+    }
+
+    BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&))
+    BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&))
+};
+
+
+//! Implementation for pointers
+template< typename T >
+class base_atomic< T*, void* >
+{
+private:
+    typedef T* value_type;
+    typedef std::ptrdiff_t difference_type;
+    typedef atomics::detail::operations< storage_size_of< value_type >::value, false > operations;
+
+protected:
+    typedef value_type value_arg_type;
+
+public:
+    typedef typename operations::storage_type storage_type;
+
+protected:
+    typename operations::aligned_storage_type m_storage;
+
+public:
+    BOOST_DEFAULTED_FUNCTION(base_atomic(), {})
+    BOOST_FORCEINLINE explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : m_storage(atomics::detail::bitwise_cast< storage_type >(v))
+    {
+    }
+
+    BOOST_FORCEINLINE void store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(order != memory_order_consume);
+        BOOST_ASSERT(order != memory_order_acquire);
+        BOOST_ASSERT(order != memory_order_acq_rel);
+
+        operations::store(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order);
+    }
+
+    BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(order != memory_order_release);
+        BOOST_ASSERT(order != memory_order_acq_rel);
+
+        return atomics::detail::bitwise_cast< value_type >(operations::load(m_storage.value, order));
+    }
+
+    BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return atomics::detail::bitwise_cast< value_type >(operations::fetch_add(m_storage.value, static_cast< storage_type >(v * sizeof(T)), order));
+    }
+
+    BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return atomics::detail::bitwise_cast< value_type >(operations::fetch_sub(m_storage.value, static_cast< storage_type >(v * sizeof(T)), order));
+    }
+
+    BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return atomics::detail::bitwise_cast< value_type >(operations::exchange(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order));
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(failure_order != memory_order_release);
+        BOOST_ASSERT(failure_order != memory_order_acq_rel);
+        BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+        storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
+        const bool res = operations::compare_exchange_strong(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
+        expected = atomics::detail::bitwise_cast< value_type >(old_value);
+        return res;
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(failure_order != memory_order_release);
+        BOOST_ASSERT(failure_order != memory_order_acq_rel);
+        BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+        storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
+        const bool res = operations::compare_exchange_weak(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
+        expected = atomics::detail::bitwise_cast< value_type >(old_value);
+        return res;
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
+    }
+
+    BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
+    {
+        return operations::is_lock_free(m_storage.value);
+    }
+
+    BOOST_FORCEINLINE value_type operator++(int) volatile BOOST_NOEXCEPT
+    {
+        return fetch_add(1);
+    }
+
+    BOOST_FORCEINLINE value_type operator++() volatile BOOST_NOEXCEPT
+    {
+        return fetch_add(1) + 1;
+    }
+
+    BOOST_FORCEINLINE value_type operator--(int) volatile BOOST_NOEXCEPT
+    {
+        return fetch_sub(1);
+    }
+
+    BOOST_FORCEINLINE value_type operator--() volatile BOOST_NOEXCEPT
+    {
+        return fetch_sub(1) - 1;
+    }
+
+    BOOST_FORCEINLINE value_type operator+=(difference_type v) volatile BOOST_NOEXCEPT
+    {
+        return fetch_add(v) + v;
+    }
+
+    BOOST_FORCEINLINE value_type operator-=(difference_type v) volatile BOOST_NOEXCEPT
+    {
+        return fetch_sub(v) - v;
+    }
+
+    BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&))
+    BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&))
+};
+
+
+//! Implementation for void pointers
+template< >
+class base_atomic< void*, void* >
+{
+private:
+    typedef void* value_type;
+    typedef std::ptrdiff_t difference_type;
+    typedef atomics::detail::operations< storage_size_of< value_type >::value, false > operations;
+
+protected:
+    typedef value_type value_arg_type;
+
+public:
+    typedef operations::storage_type storage_type;
+
+protected:
+    operations::aligned_storage_type m_storage;
+
+public:
+    BOOST_DEFAULTED_FUNCTION(base_atomic(), {})
+    BOOST_FORCEINLINE explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : m_storage(atomics::detail::bitwise_cast< storage_type >(v))
+    {
+    }
+
+    BOOST_FORCEINLINE void store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(order != memory_order_consume);
+        BOOST_ASSERT(order != memory_order_acquire);
+        BOOST_ASSERT(order != memory_order_acq_rel);
+
+        operations::store(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order);
+    }
+
+    BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(order != memory_order_release);
+        BOOST_ASSERT(order != memory_order_acq_rel);
+
+        return atomics::detail::bitwise_cast< value_type >(operations::load(m_storage.value, order));
+    }
+
+    BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return atomics::detail::bitwise_cast< value_type >(operations::fetch_add(m_storage.value, static_cast< storage_type >(v), order));
+    }
+
+    BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return atomics::detail::bitwise_cast< value_type >(operations::fetch_sub(m_storage.value, static_cast< storage_type >(v), order));
+    }
+
+    BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return atomics::detail::bitwise_cast< value_type >(operations::exchange(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order));
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(failure_order != memory_order_release);
+        BOOST_ASSERT(failure_order != memory_order_acq_rel);
+        BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+        storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
+        const bool res = operations::compare_exchange_strong(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
+        expected = atomics::detail::bitwise_cast< value_type >(old_value);
+        return res;
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order));
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT
+    {
+        BOOST_ASSERT(failure_order != memory_order_release);
+        BOOST_ASSERT(failure_order != memory_order_acq_rel);
+        BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order));
+
+        storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected);
+        const bool res = operations::compare_exchange_weak(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order);
+        expected = atomics::detail::bitwise_cast< value_type >(old_value);
+        return res;
+    }
+
+    BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+    {
+        return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order));
+    }
+
+    BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
+    {
+        return operations::is_lock_free(m_storage.value);
+    }
+
+    BOOST_FORCEINLINE value_type operator++(int) volatile BOOST_NOEXCEPT
+    {
+        return fetch_add(1);
+    }
+
+    BOOST_FORCEINLINE value_type operator++() volatile BOOST_NOEXCEPT
+    {
+        return (char*)fetch_add(1) + 1;
+    }
+
+    BOOST_FORCEINLINE value_type operator--(int) volatile BOOST_NOEXCEPT
+    {
+        return fetch_sub(1);
+    }
+
+    BOOST_FORCEINLINE value_type operator--() volatile BOOST_NOEXCEPT
+    {
+        return (char*)fetch_sub(1) - 1;
+    }
+
+    BOOST_FORCEINLINE value_type operator+=(difference_type v) volatile BOOST_NOEXCEPT
+    {
+        return (char*)fetch_add(v) + v;
+    }
+
+    BOOST_FORCEINLINE value_type operator-=(difference_type v) volatile BOOST_NOEXCEPT
+    {
+        return (char*)fetch_sub(v) - v;
+    }
+
+    BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&))
+    BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&))
+};
+
+} // namespace detail
+
+template< typename T >
+class atomic :
+    public atomics::detail::base_atomic< T, typename atomics::detail::classify< T >::type >
+{
+private:
+    typedef T value_type;
+    typedef atomics::detail::base_atomic< T, typename atomics::detail::classify< T >::type > base_type;
+    typedef typename base_type::value_arg_type value_arg_type;
+
+public:
+    typedef typename base_type::storage_type storage_type;
+
+public:
+    BOOST_DEFAULTED_FUNCTION(atomic(), BOOST_NOEXCEPT {})
+
+    // NOTE: The constructor is made explicit because gcc 4.7 complains that
+    //       operator=(value_arg_type) is considered ambiguous with operator=(atomic const&)
+    //       in assignment expressions, even though conversion to atomic<> is less preferred
+    //       than conversion to value_arg_type.
+    BOOST_FORCEINLINE explicit BOOST_CONSTEXPR atomic(value_arg_type v) BOOST_NOEXCEPT : base_type(v) {}
+
+    BOOST_FORCEINLINE value_type operator= (value_arg_type v) volatile BOOST_NOEXCEPT
+    {
+        this->store(v);
+        return v;
+    }
+
+    BOOST_FORCEINLINE operator value_type() volatile const BOOST_NOEXCEPT
+    {
+        return this->load();
+    }
+
+    BOOST_FORCEINLINE storage_type& storage() BOOST_NOEXCEPT { return this->m_storage.value; }
+    BOOST_FORCEINLINE storage_type volatile& storage() volatile BOOST_NOEXCEPT { return this->m_storage.value; }
+    BOOST_FORCEINLINE storage_type const& storage() const BOOST_NOEXCEPT { return this->m_storage.value; }
+    BOOST_FORCEINLINE storage_type const volatile& storage() const volatile BOOST_NOEXCEPT { return this->m_storage.value; }
+
+    BOOST_DELETED_FUNCTION(atomic(atomic const&))
+    BOOST_DELETED_FUNCTION(atomic& operator= (atomic const&))
+    BOOST_DELETED_FUNCTION(atomic& operator= (atomic const&) volatile)
+};
+
+typedef atomic< char > atomic_char;
+typedef atomic< unsigned char > atomic_uchar;
+typedef atomic< signed char > atomic_schar;
+typedef atomic< uint8_t > atomic_uint8_t;
+typedef atomic< int8_t > atomic_int8_t;
+typedef atomic< unsigned short > atomic_ushort;
+typedef atomic< short > atomic_short;
+typedef atomic< uint16_t > atomic_uint16_t;
+typedef atomic< int16_t > atomic_int16_t;
+typedef atomic< unsigned int > atomic_uint;
+typedef atomic< int > atomic_int;
+typedef atomic< uint32_t > atomic_uint32_t;
+typedef atomic< int32_t > atomic_int32_t;
+typedef atomic< unsigned long > atomic_ulong;
+typedef atomic< long > atomic_long;
+typedef atomic< uint64_t > atomic_uint64_t;
+typedef atomic< int64_t > atomic_int64_t;
+#ifdef BOOST_HAS_LONG_LONG
+typedef atomic< pdalboost::ulong_long_type > atomic_ullong;
+typedef atomic< pdalboost::long_long_type > atomic_llong;
+#endif
+typedef atomic< void* > atomic_address;
+typedef atomic< bool > atomic_bool;
+typedef atomic< wchar_t > atomic_wchar_t;
+#if !defined(BOOST_NO_CXX11_CHAR16_T)
+typedef atomic< char16_t > atomic_char16_t;
+#endif
+#if !defined(BOOST_NO_CXX11_CHAR32_T)
+typedef atomic< char32_t > atomic_char32_t;
+#endif
+
+typedef atomic< int_least8_t > atomic_int_least8_t;
+typedef atomic< uint_least8_t > atomic_uint_least8_t;
+typedef atomic< int_least16_t > atomic_int_least16_t;
+typedef atomic< uint_least16_t > atomic_uint_least16_t;
+typedef atomic< int_least32_t > atomic_int_least32_t;
+typedef atomic< uint_least32_t > atomic_uint_least32_t;
+typedef atomic< int_least64_t > atomic_int_least64_t;
+typedef atomic< uint_least64_t > atomic_uint_least64_t;
+typedef atomic< int_fast8_t > atomic_int_fast8_t;
+typedef atomic< uint_fast8_t > atomic_uint_fast8_t;
+typedef atomic< int_fast16_t > atomic_int_fast16_t;
+typedef atomic< uint_fast16_t > atomic_uint_fast16_t;
+typedef atomic< int_fast32_t > atomic_int_fast32_t;
+typedef atomic< uint_fast32_t > atomic_uint_fast32_t;
+typedef atomic< int_fast64_t > atomic_int_fast64_t;
+typedef atomic< uint_fast64_t > atomic_uint_fast64_t;
+typedef atomic< intmax_t > atomic_intmax_t;
+typedef atomic< uintmax_t > atomic_uintmax_t;
+
+typedef atomic< std::size_t > atomic_size_t;
+typedef atomic< std::ptrdiff_t > atomic_ptrdiff_t;
+
+#if defined(BOOST_HAS_INTPTR_T)
+typedef atomic< intptr_t > atomic_intptr_t;
+typedef atomic< uintptr_t > atomic_uintptr_t;
+#endif
+
+} // namespace atomics
+} // namespace pdalboost
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_ATOMIC_DETAIL_ATOMIC_TEMPLATE_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/detail/bitwise_cast.hpp b/vendor/pdalboost/boost/atomic/detail/bitwise_cast.hpp
new file mode 100644
index 0000000..cb3e752
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/detail/bitwise_cast.hpp
@@ -0,0 +1,53 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2013 - 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/detail/bitwise_cast.hpp
+ *
+ * This header defines \c bitwise_cast used to convert between storage and value types
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_BITWISE_CAST_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_BITWISE_CAST_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+#if !defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCPY)
+#include <cstring>
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace pdalboost {
+namespace atomics {
+namespace detail {
+
+template< typename To, typename From >
+BOOST_FORCEINLINE To bitwise_cast(From const& from) BOOST_NOEXCEPT
+{
+    struct
+    {
+        To to;
+    }
+    value = {};
+    BOOST_ATOMIC_DETAIL_MEMCPY
+    (
+        &reinterpret_cast< char& >(value.to),
+        &reinterpret_cast< const char& >(from),
+        (sizeof(From) < sizeof(To) ? sizeof(From) : sizeof(To))
+    );
+    return value.to;
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace pdalboost
+
+#endif // BOOST_ATOMIC_DETAIL_BITWISE_CAST_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/detail/config.hpp b/vendor/pdalboost/boost/atomic/detail/config.hpp
new file mode 100644
index 0000000..489281c
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/detail/config.hpp
@@ -0,0 +1,75 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2012 Hartmut Kaiser
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/detail/config.hpp
+ *
+ * This header defines configuraion macros for Boost.Atomic
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_CONFIG_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_CONFIG_HPP_INCLUDED_
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined(__has_builtin)
+#if __has_builtin(__builtin_memcpy)
+#define BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCPY
+#endif
+#if __has_builtin(__builtin_memcmp)
+#define BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCMP
+#endif
+#elif defined(BOOST_GCC)
+#define BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCPY
+#define BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCMP
+#endif
+
+#if defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCPY)
+#define BOOST_ATOMIC_DETAIL_MEMCPY __builtin_memcpy
+#else
+#define BOOST_ATOMIC_DETAIL_MEMCPY std::memcpy
+#endif
+
+#if defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCMP)
+#define BOOST_ATOMIC_DETAIL_MEMCMP __builtin_memcmp
+#else
+#define BOOST_ATOMIC_DETAIL_MEMCMP std::memcmp
+#endif
+
+#if defined(__CUDACC__)
+// nvcc does not support alternatives in asm statement constraints
+#define BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES
+// nvcc does not support condition code register ("cc") clobber in asm statements
+#define BOOST_ATOMIC_DETAIL_NO_ASM_CLOBBER_CC
+#endif
+
+#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_CLOBBER_CC)
+#define BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC "cc"
+#define BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "cc",
+#else
+#define BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
+#define BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA
+#endif
+
+#if (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) < 403)
+// This macro indicates we're using older binutils that don't support implied zero displacements for memory opereands,
+// making code like this invalid:
+//   movl 4+(%%edx), %%eax
+#define BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS
+#endif
+
+#if defined(__clang__) || (defined(BOOST_GCC) && (BOOST_GCC+0) < 40500)
+// This macro indicates that the compiler does not support allocating rax:rdx register pairs ("A") in asm blocks
+#define BOOST_ATOMIC_DETAIL_NO_ASM_RAX_RDX_PAIRS
+#endif
+
+#endif // BOOST_ATOMIC_DETAIL_CONFIG_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/detail/int_sizes.hpp b/vendor/pdalboost/boost/atomic/detail/int_sizes.hpp
new file mode 100644
index 0000000..eada4ff
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/detail/int_sizes.hpp
@@ -0,0 +1,140 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/detail/int_sizes.hpp
+ *
+ * This header defines macros for testing buitin integer type sizes
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+// GCC and compatible compilers define internal macros with builtin type traits
+#if defined(__SIZEOF_SHORT__)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT __SIZEOF_SHORT__
+#endif
+#if defined(__SIZEOF_INT__)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_INT __SIZEOF_INT__
+#endif
+#if defined(__SIZEOF_LONG__)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LONG __SIZEOF_LONG__
+#endif
+#if defined(__SIZEOF_LONG_LONG__)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG __SIZEOF_LONG_LONG__
+#endif
+#if defined(__SIZEOF_WCHAR_T__)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T __SIZEOF_WCHAR_T__
+#endif
+#if defined(__SIZEOF_POINTER__)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER __SIZEOF_POINTER__
+#elif defined(_MSC_VER)
+#if defined(_M_AMD64) || defined(_M_IA64)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER 8
+#else
+#define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER 4
+#endif
+#endif
+
+#if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_SHORT) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_INT) ||\
+    !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LLONG)
+
+// Try to deduce sizes from limits
+#include <limits.h>
+#include <boost/cstdint.hpp>
+
+#if (USHRT_MAX + 0) == 0xff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 1
+#elif (USHRT_MAX + 0) == 0xffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 2
+#elif (USHRT_MAX + 0) == 0xffffffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 4
+#elif (USHRT_MAX + 0) == UINT64_C(0xffffffffffffffff)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 8
+#endif
+
+#if (UINT_MAX + 0) == 0xff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_INT 1
+#elif (UINT_MAX + 0) == 0xffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_INT 2
+#elif (UINT_MAX + 0) == 0xffffffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_INT 4
+#elif (UINT_MAX + 0) == UINT64_C(0xffffffffffffffff)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_INT 8
+#endif
+
+#if (ULONG_MAX + 0) == 0xff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 1
+#elif (ULONG_MAX + 0) == 0xffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 2
+#elif (ULONG_MAX + 0) == 0xffffffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 4
+#elif (ULONG_MAX + 0) == UINT64_C(0xffffffffffffffff)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 8
+#endif
+
+#if defined(__hpux) // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 8
+#else
+
+// The list of the non-standard macros (the ones except ULLONG_MAX) is taken from cstdint.hpp
+#if defined(ULLONG_MAX)
+#define BOOST_ATOMIC_DETAIL_ULLONG_MAX ULLONG_MAX
+#elif defined(ULONG_LONG_MAX)
+#define BOOST_ATOMIC_DETAIL_ULLONG_MAX ULONG_LONG_MAX
+#elif defined(ULONGLONG_MAX)
+#define BOOST_ATOMIC_DETAIL_ULLONG_MAX ULONGLONG_MAX
+#elif defined(_LLONG_MAX) // strangely enough, this one seems to be holding the limit for the unsigned integer
+#define BOOST_ATOMIC_DETAIL_ULLONG_MAX _LLONG_MAX
+#endif
+
+#if (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == 0xff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 1
+#elif (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == 0xffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 2
+#elif (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == 0xffffffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 4
+#elif (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == UINT64_C(0xffffffffffffffff)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 8
+#endif
+
+#endif // defined(__hpux)
+
+#endif
+
+#if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T)
+
+#include <wchar.h>
+#include <boost/cstdint.hpp>
+
+ #if defined(_MSC_VER) && ( _MSC_VER <= 1310 || defined(UNDER_CE) && _MSC_VER <= 1500 )
+// MSVC 7.1 and MSVC 8 (arm) define WCHAR_MAX to a value not suitable for constant expressions
+#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 2
+#elif (WCHAR_MAX + 0) == 0xff || (WCHAR_MAX + 0) == 0x7f
+#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 1
+#elif (WCHAR_MAX + 0) == 0xffff || (WCHAR_MAX + 0) == 0x7fff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 2
+#elif (WCHAR_MAX + 0) == 0xffffffff || (WCHAR_MAX + 0) == 0x7fffffff
+#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 4
+#elif (WCHAR_MAX + 0) == UINT64_C(0xffffffffffffffff) || (WCHAR_MAX + 0) == INT64_C(0x7fffffffffffffff)
+#define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 8
+#endif
+#endif
+
+#if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_SHORT) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_INT) ||\
+    !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LLONG) ||\
+    !defined(BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T)
+#error Boost.Atomic: Failed to determine builtin integer sizes, the target platform is not supported. Please, report to the developers.
+#endif
+
+#endif // BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/detail/link.hpp b/vendor/pdalboost/boost/atomic/detail/link.hpp
new file mode 100644
index 0000000..1bf7ab3
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/detail/link.hpp
@@ -0,0 +1,58 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2012 Hartmut Kaiser
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/detail/config.hpp
+ *
+ * This header defines macros for linking with compiled library of Boost.Atomic
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_LINK_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_LINK_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//  Set up dll import/export options
+#if (defined(BOOST_ATOMIC_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && \
+    !defined(BOOST_ATOMIC_STATIC_LINK)
+
+#if defined(BOOST_ATOMIC_SOURCE)
+#define BOOST_ATOMIC_DECL BOOST_SYMBOL_EXPORT
+#define BOOST_ATOMIC_BUILD_DLL
+#else
+#define BOOST_ATOMIC_DECL BOOST_SYMBOL_IMPORT
+#endif
+
+#endif // building a shared library
+
+#ifndef BOOST_ATOMIC_DECL
+#define BOOST_ATOMIC_DECL
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//  Auto library naming
+#if !defined(BOOST_ATOMIC_SOURCE) && !defined(BOOST_ALL_NO_LIB) && \
+    !defined(BOOST_ATOMIC_NO_LIB)
+
+#define BOOST_LIB_NAME pdalboost_atomic
+
+// tell the auto-link code to select a dll when required:
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_ATOMIC_DYN_LINK)
+#define BOOST_DYN_LINK
+#endif
+
+#include <boost/config/auto_link.hpp>
+
+#endif  // auto-linking disabled
+
+#endif
diff --git a/vendor/pdalboost/boost/atomic/detail/lockpool.hpp b/vendor/pdalboost/boost/atomic/detail/lockpool.hpp
new file mode 100644
index 0000000..9695aa5
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/detail/lockpool.hpp
@@ -0,0 +1,51 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013-2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/detail/lockpool.hpp
+ *
+ * This header contains declaration of the lockpool used to emulate atomic ops.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_LOCKPOOL_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_LOCKPOOL_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/link.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace pdalboost {
+namespace atomics {
+namespace detail {
+
+struct lockpool
+{
+    class scoped_lock
+    {
+        void* m_lock;
+
+    public:
+        explicit BOOST_ATOMIC_DECL scoped_lock(const volatile void* addr) BOOST_NOEXCEPT;
+        BOOST_ATOMIC_DECL ~scoped_lock() BOOST_NOEXCEPT;
+
+        BOOST_DELETED_FUNCTION(scoped_lock(scoped_lock const&))
+        BOOST_DELETED_FUNCTION(scoped_lock& operator=(scoped_lock const&))
+    };
+
+    static BOOST_ATOMIC_DECL void thread_fence() BOOST_NOEXCEPT;
+    static BOOST_ATOMIC_DECL void signal_fence() BOOST_NOEXCEPT;
+};
+
+} // namespace detail
+} // namespace atomics
+} // namespace pdalboost
+
+#endif // BOOST_ATOMIC_DETAIL_LOCKPOOL_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/detail/operations.hpp b/vendor/pdalboost/boost/atomic/detail/operations.hpp
new file mode 100644
index 0000000..d81399a
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/detail/operations.hpp
@@ -0,0 +1,24 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/detail/operations.hpp
+ *
+ * This header defines atomic operations, including the emulated version.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPERATIONS_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPERATIONS_HPP_INCLUDED_
+
+#include <boost/atomic/detail/operations_lockfree.hpp>
+#include <boost/atomic/detail/ops_emulated.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#endif // BOOST_ATOMIC_DETAIL_OPERATIONS_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/detail/operations_fwd.hpp b/vendor/pdalboost/boost/atomic/detail/operations_fwd.hpp
new file mode 100644
index 0000000..ed6c339
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/detail/operations_fwd.hpp
@@ -0,0 +1,35 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/detail/operations_fwd.hpp
+ *
+ * This header contains forward declaration of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPERATIONS_FWD_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPERATIONS_FWD_HPP_INCLUDED_
+
+#include <cstddef>
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace pdalboost {
+namespace atomics {
+namespace detail {
+
+template< std::size_t Size, bool Signed >
+struct operations;
+
+} // namespace detail
+} // namespace atomics
+} // namespace pdalboost
+
+#endif // BOOST_ATOMIC_DETAIL_OPERATIONS_FWD_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/detail/operations_lockfree.hpp b/vendor/pdalboost/boost/atomic/detail/operations_lockfree.hpp
new file mode 100644
index 0000000..b465403
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/detail/operations_lockfree.hpp
@@ -0,0 +1,30 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/detail/operations_lockfree.hpp
+ *
+ * This header defines lockfree atomic operations.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPERATIONS_LOCKFREE_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPERATIONS_LOCKFREE_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/platform.hpp>
+
+#if !defined(BOOST_ATOMIC_EMULATED)
+#include BOOST_ATOMIC_DETAIL_HEADER(boost/atomic/detail/ops_)
+#else
+#include <boost/atomic/detail/operations_fwd.hpp>
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#endif // BOOST_ATOMIC_DETAIL_OPERATIONS_LOCKFREE_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/detail/ops_emulated.hpp b/vendor/pdalboost/boost/atomic/detail/ops_emulated.hpp
new file mode 100644
index 0000000..c0dd14d
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/detail/ops_emulated.hpp
@@ -0,0 +1,161 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/detail/ops_emulated.hpp
+ *
+ * This header contains lockpool-based implementation of the \c operations template.
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_OPS_EMULATED_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_OPS_EMULATED_HPP_INCLUDED_
+
+#include <cstddef>
+#include <boost/memory_order.hpp>
+#include <boost/atomic/detail/config.hpp>
+#include <boost/atomic/detail/storage_type.hpp>
+#include <boost/atomic/detail/operations_fwd.hpp>
+#include <boost/atomic/detail/lockpool.hpp>
+#include <boost/atomic/capabilities.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace pdalboost {
+namespace atomics {
+namespace detail {
+
+template< typename T >
+struct emulated_operations
+{
+    typedef T storage_type;
+
+    static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+    {
+        lockpool::scoped_lock lock(&storage);
+        const_cast< storage_type& >(storage) = v;
+    }
+
+    static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order) BOOST_NOEXCEPT
+    {
+        lockpool::scoped_lock lock(&storage);
+        return const_cast< storage_type const& >(storage);
+    }
+
+    static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+    {
+        storage_type& s = const_cast< storage_type& >(storage);
+        lockpool::scoped_lock lock(&storage);
+        storage_type old_val = s;
+        s += v;
+        return old_val;
+    }
+
+    static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+    {
+        storage_type& s = const_cast< storage_type& >(storage);
+        lockpool::scoped_lock lock(&storage);
+        storage_type old_val = s;
+        s -= v;
+        return old_val;
+    }
+
+    static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+    {
+        storage_type& s = const_cast< storage_type& >(storage);
+        lockpool::scoped_lock lock(&storage);
+        storage_type old_val = s;
+        s = v;
+        return old_val;
+    }
+
+    static BOOST_FORCEINLINE bool compare_exchange_strong(
+        storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
+    {
+        storage_type& s = const_cast< storage_type& >(storage);
+        lockpool::scoped_lock lock(&storage);
+        storage_type old_val = s;
+        const bool res = old_val == expected;
+        if (res)
+            s = desired;
+        expected = old_val;
+
+        return res;
+    }
+
+    static BOOST_FORCEINLINE bool compare_exchange_weak(
+        storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
+    {
+        // Note: This function is the exact copy of compare_exchange_strong. The reason we're not just forwarding the call
+        // is that MSVC-12 ICEs in this case.
+        storage_type& s = const_cast< storage_type& >(storage);
+        lockpool::scoped_lock lock(&storage);
+        storage_type old_val = s;
+        const bool res = old_val == expected;
+        if (res)
+            s = desired;
+        expected = old_val;
+
+        return res;
+    }
+
+    static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+    {
+        storage_type& s = const_cast< storage_type& >(storage);
+        lockpool::scoped_lock lock(&storage);
+        storage_type old_val = s;
+        s &= v;
+        return old_val;
+    }
+
+    static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+    {
+        storage_type& s = const_cast< storage_type& >(storage);
+        lockpool::scoped_lock lock(&storage);
+        storage_type old_val = s;
+        s |= v;
+        return old_val;
+    }
+
+    static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
+    {
+        storage_type& s = const_cast< storage_type& >(storage);
+        lockpool::scoped_lock lock(&storage);
+        storage_type old_val = s;
+        s ^= v;
+        return old_val;
+    }
+
+    static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+    {
+        return !!exchange(storage, (storage_type)1, order);
+    }
+
+    static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
+    {
+        store(storage, (storage_type)0, order);
+    }
+
+    static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT
+    {
+        return false;
+    }
+};
+
+template< std::size_t Size, bool Signed >
+struct operations :
+    public emulated_operations< typename make_storage_type< Size, Signed >::type >
+{
+    typedef typename make_storage_type< Size, Signed >::aligned aligned_storage_type;
+};
+
+} // namespace detail
+} // namespace atomics
+} // namespace pdalboost
+
+#endif // BOOST_ATOMIC_DETAIL_OPS_EMULATED_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/detail/pause.hpp b/vendor/pdalboost/boost/atomic/detail/pause.hpp
new file mode 100644
index 0000000..b7a46cc
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/detail/pause.hpp
@@ -0,0 +1,43 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ *    (See accompanying file LICENSE_1_0.txt or copy at
+ *          http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * (C) Copyright 2013 Tim Blechmann
+ * (C) Copyright 2013 Andrey Semashev
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_PAUSE_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_PAUSE_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined(_MSC_VER) && (defined(_M_AMD64) || defined(_M_IX86))
+extern "C" void _mm_pause(void);
+#if defined(BOOST_MSVC)
+#pragma intrinsic(_mm_pause)
+#endif
+#endif
+
+namespace pdalboost {
+namespace atomics {
+namespace detail {
+
+BOOST_FORCEINLINE void pause() BOOST_NOEXCEPT
+{
+#if defined(_MSC_VER) && (defined(_M_AMD64) || defined(_M_IX86))
+    _mm_pause();
+#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+    __asm__ __volatile__("pause;");
+#endif
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace pdalboost
+
+#endif // BOOST_ATOMIC_DETAIL_PAUSE_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/detail/platform.hpp b/vendor/pdalboost/boost/atomic/detail/platform.hpp
new file mode 100644
index 0000000..b6c48ef
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/detail/platform.hpp
@@ -0,0 +1,121 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/detail/platform.hpp
+ *
+ * This header defines macros for the target platform detection
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_PLATFORM_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_PLATFORM_HPP_INCLUDED_
+
+#include <boost/atomic/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if !defined(BOOST_ATOMIC_FORCE_FALLBACK)
+
+// Compiler-based backends
+#if (defined(__ibmxl__) || defined(__IBMCPP__)) && defined(__PPC__)
+
+// IBM XL C++ Compiler has to be checked before GCC/Clang as it pretends to be one but does not support __atomic* intrinsics.
+// It does support GCC inline assembler though.
+#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_ppc
+
+#elif ((defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 407)) ||\
+    (defined(BOOST_CLANG) && ((__clang_major__ * 100 + __clang_minor__) >= 302))) &&\
+    (\
+        (__GCC_ATOMIC_BOOL_LOCK_FREE + 0) == 2 ||\
+        (__GCC_ATOMIC_CHAR_LOCK_FREE + 0) == 2 ||\
+        (__GCC_ATOMIC_SHORT_LOCK_FREE + 0) == 2 ||\
+        (__GCC_ATOMIC_INT_LOCK_FREE + 0) == 2 ||\
+        (__GCC_ATOMIC_LONG_LOCK_FREE + 0) == 2 ||\
+        (__GCC_ATOMIC_LLONG_LOCK_FREE + 0) == 2\
+    )
+
+#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_atomic
+
+#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+
+#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_x86
+
+#elif defined(__GNUC__) && (defined(__POWERPC__) || defined(__PPC__))
+
+#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_ppc
+
+// This list of ARM architecture versions comes from Apple's arm/arch.h header.
+// I don't know how complete it is.
+#elif defined(__GNUC__) &&\
+    (\
+        defined(__ARM_ARCH_6__)  || defined(__ARM_ARCH_6J__) ||\
+        defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) ||\
+        defined(__ARM_ARCH_6ZK__) ||\
+        defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) ||\
+        defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) ||\
+        defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7S__)\
+    )
+
+#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_arm
+
+#elif defined(__GNUC__) && defined(__sparc_v9__)
+
+#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_sparc
+
+#elif defined(__GNUC__) && defined(__alpha__)
+
+#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_alpha
+
+#elif defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 401) &&\
+    (\
+        defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1) ||\
+        defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2) ||\
+        defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) ||\
+        defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) ||\
+        defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)\
+    )
+
+#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_sync
+
+#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
+
+#define BOOST_ATOMIC_DETAIL_PLATFORM msvc_x86
+
+#elif defined(_MSC_VER) && _MSC_VER >= 1700 && defined(_M_ARM)
+
+#define BOOST_ATOMIC_DETAIL_PLATFORM msvc_arm
+
+#endif
+
+// OS-based backends
+#if !defined(BOOST_ATOMIC_DETAIL_PLATFORM)
+
+#if defined(__linux__) && defined(__arm__)
+
+#define BOOST_ATOMIC_DETAIL_PLATFORM linux_arm
+
+#elif defined(BOOST_WINDOWS) || defined(_WIN32_CE)
+
+#define BOOST_ATOMIC_DETAIL_PLATFORM windows
+
+#endif
+
+#endif // !defined(BOOST_ATOMIC_DETAIL_PLATFORM)
+
+#endif // !defined(BOOST_ATOMIC_FORCE_FALLBACK)
+
+#if !defined(BOOST_ATOMIC_DETAIL_PLATFORM)
+#define BOOST_ATOMIC_DETAIL_PLATFORM emulated
+#define BOOST_ATOMIC_EMULATED
+#endif
+
+#define BOOST_ATOMIC_DETAIL_HEADER(prefix) <BOOST_JOIN(prefix, BOOST_ATOMIC_DETAIL_PLATFORM).hpp>
+
+#endif // BOOST_ATOMIC_DETAIL_PLATFORM_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/detail/storage_type.hpp b/vendor/pdalboost/boost/atomic/detail/storage_type.hpp
new file mode 100644
index 0000000..2da42aa
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/detail/storage_type.hpp
@@ -0,0 +1,280 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2013 - 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/detail/storage_type.hpp
+ *
+ * This header defines underlying types used as storage
+ */
+
+#ifndef BOOST_ATOMIC_DETAIL_STORAGE_TYPE_HPP_INCLUDED_
+#define BOOST_ATOMIC_DETAIL_STORAGE_TYPE_HPP_INCLUDED_
+
+#include <cstddef>
+#include <boost/cstdint.hpp>
+#include <boost/atomic/detail/config.hpp>
+#if !defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCMP) || !defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCPY)
+#include <cstring>
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace pdalboost {
+namespace atomics {
+namespace detail {
+
+template< typename T >
+BOOST_FORCEINLINE void non_atomic_load(T const volatile& from, T& to) BOOST_NOEXCEPT
+{
+    to = from;
+}
+
+template< std::size_t Size >
+struct buffer_storage
+{
+    BOOST_ALIGNMENT(16) unsigned char data[Size];
+
+    BOOST_FORCEINLINE bool operator! () const BOOST_NOEXCEPT
+    {
+        return (data[0] == 0u && BOOST_ATOMIC_DETAIL_MEMCMP(data, data + 1, Size - 1) == 0);
+    }
+
+    BOOST_FORCEINLINE bool operator== (buffer_storage const& that) const BOOST_NOEXCEPT
+    {
+        return BOOST_ATOMIC_DETAIL_MEMCMP(data, that.data, Size) == 0;
+    }
+
+    BOOST_FORCEINLINE bool operator!= (buffer_storage const& that) const BOOST_NOEXCEPT
+    {
+        return BOOST_ATOMIC_DETAIL_MEMCMP(data, that.data, Size) != 0;
+    }
+};
+
+template< std::size_t Size >
+BOOST_FORCEINLINE void non_atomic_load(buffer_storage< Size > const volatile& from, buffer_storage< Size >& to) BOOST_NOEXCEPT
+{
+    BOOST_ATOMIC_DETAIL_MEMCPY(to.data, const_cast< unsigned char const* >(from.data), Size);
+}
+
+template< std::size_t Size, bool Signed >
+struct make_storage_type
+{
+    typedef buffer_storage< Size > type;
+
+    struct aligned
+    {
+        type value;
+
+        BOOST_DEFAULTED_FUNCTION(aligned(), {})
+        BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type const& v) BOOST_NOEXCEPT : value(v) {}
+    };
+};
+
+template< >
+struct make_storage_type< 1u, false >
+{
+    typedef pdalboost::uint8_t type;
+
+    struct aligned
+    {
+        type value;
+
+        BOOST_DEFAULTED_FUNCTION(aligned(), {})
+        BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type v) BOOST_NOEXCEPT : value(v) {}
+    };
+};
+
+template< >
+struct make_storage_type< 1u, true >
+{
+    typedef pdalboost::int8_t type;
+
+    struct aligned
+    {
+        type value;
+
+        BOOST_DEFAULTED_FUNCTION(aligned(), {})
+        BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type v) BOOST_NOEXCEPT : value(v) {}
+    };
+};
+
+template< >
+struct make_storage_type< 2u, false >
+{
+    typedef pdalboost::uint16_t type;
+
+    struct aligned
+    {
+        BOOST_ALIGNMENT(2) type value;
+
+        BOOST_DEFAULTED_FUNCTION(aligned(), {})
+        BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type v) BOOST_NOEXCEPT : value(v) {}
+    };
+};
+
+template< >
+struct make_storage_type< 2u, true >
+{
+    typedef pdalboost::int16_t type;
+
+    struct aligned
+    {
+        BOOST_ALIGNMENT(2) type value;
+
+        BOOST_DEFAULTED_FUNCTION(aligned(), {})
+        BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type v) BOOST_NOEXCEPT : value(v) {}
+    };
+};
+
+template< >
+struct make_storage_type< 4u, false >
+{
+    typedef pdalboost::uint32_t type;
+
+    struct aligned
+    {
+        BOOST_ALIGNMENT(4) type value;
+
+        BOOST_DEFAULTED_FUNCTION(aligned(), {})
+        BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type v) BOOST_NOEXCEPT : value(v) {}
+    };
+};
+
+template< >
+struct make_storage_type< 4u, true >
+{
+    typedef pdalboost::int32_t type;
+
+    struct aligned
+    {
+        BOOST_ALIGNMENT(4) type value;
+
+        BOOST_DEFAULTED_FUNCTION(aligned(), {})
+        BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type v) BOOST_NOEXCEPT : value(v) {}
+    };
+};
+
+template< >
+struct make_storage_type< 8u, false >
+{
+    typedef pdalboost::uint64_t type;
+
+    struct aligned
+    {
+        BOOST_ALIGNMENT(8) type value;
+
+        BOOST_DEFAULTED_FUNCTION(aligned(), {})
+        BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type v) BOOST_NOEXCEPT : value(v) {}
+    };
+};
+
+template< >
+struct make_storage_type< 8u, true >
+{
+    typedef pdalboost::int64_t type;
+
+    struct aligned
+    {
+        BOOST_ALIGNMENT(8) type value;
+
+        BOOST_DEFAULTED_FUNCTION(aligned(), {})
+        BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type v) BOOST_NOEXCEPT : value(v) {}
+    };
+};
+
+#if defined(BOOST_HAS_INT128)
+
+template< >
+struct make_storage_type< 16u, false >
+{
+    typedef pdalboost::uint128_type type;
+
+    struct aligned
+    {
+        BOOST_ALIGNMENT(16) type value;
+
+        BOOST_DEFAULTED_FUNCTION(aligned(), {})
+        BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type v) BOOST_NOEXCEPT : value(v) {}
+    };
+};
+
+template< >
+struct make_storage_type< 16u, true >
+{
+    typedef pdalboost::int128_type type;
+
+    struct aligned
+    {
+        BOOST_ALIGNMENT(16) type value;
+
+        BOOST_DEFAULTED_FUNCTION(aligned(), {})
+        BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type v) BOOST_NOEXCEPT : value(v) {}
+    };
+};
+
+#elif !defined(BOOST_NO_ALIGNMENT)
+
+struct storage128_t
+{
+    pdalboost::uint64_t data[2];
+
+    BOOST_FORCEINLINE bool operator! () const BOOST_NOEXCEPT
+    {
+        return data[0] == 0 && data[1] == 0;
+    }
+};
+
+BOOST_FORCEINLINE bool operator== (storage128_t const& left, storage128_t const& right) BOOST_NOEXCEPT
+{
+    return left.data[0] == right.data[0] && left.data[1] == right.data[1];
+}
+BOOST_FORCEINLINE bool operator!= (storage128_t const& left, storage128_t const& right) BOOST_NOEXCEPT
+{
+    return !(left == right);
+}
+
+BOOST_FORCEINLINE void non_atomic_load(storage128_t const volatile& from, storage128_t& to) BOOST_NOEXCEPT
+{
+    to.data[0] = from.data[0];
+    to.data[1] = from.data[1];
+}
+
+template< bool Signed >
+struct make_storage_type< 16u, Signed >
+{
+    typedef storage128_t type;
+
+    struct aligned
+    {
+        BOOST_ALIGNMENT(16) type value;
+
+        BOOST_DEFAULTED_FUNCTION(aligned(), {})
+        BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type const& v) BOOST_NOEXCEPT : value(v) {}
+    };
+};
+
+#endif
+
+template< typename T >
+struct storage_size_of
+{
+    enum _
+    {
+        size = sizeof(T),
+        value = (size == 3 ? 4 : (size >= 5 && size <= 7 ? 8 : (size >= 9 && size <= 15 ? 16 : size)))
+    };
+};
+
+} // namespace detail
+} // namespace atomics
+} // namespace pdalboost
+
+#endif // BOOST_ATOMIC_DETAIL_STORAGE_TYPE_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/atomic/fences.hpp b/vendor/pdalboost/boost/atomic/fences.hpp
new file mode 100644
index 0000000..348a79c
--- /dev/null
+++ b/vendor/pdalboost/boost/atomic/fences.hpp
@@ -0,0 +1,67 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ */
+/*!
+ * \file   atomic/fences.hpp
+ *
+ * This header contains definition of \c atomic_thread_fence and \c atomic_signal_fence functions.
+ */
+
+#ifndef BOOST_ATOMIC_FENCES_HPP_INCLUDED_
+#define BOOST_ATOMIC_FENCES_HPP_INCLUDED_
+
+#include <boost/memory_order.hpp>
+#include <boost/atomic/capabilities.hpp>
+#include <boost/atomic/detail/operations.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+/*
+ * IMPLEMENTATION NOTE: All interface functions MUST be declared with BOOST_FORCEINLINE,
+ *                      see comment for convert_memory_order_to_gcc in ops_gcc_atomic.hpp.
+ */
+
+namespace pdalboost {
+
+namespace atomics {
+
+#if BOOST_ATOMIC_THREAD_FENCE > 0
+BOOST_FORCEINLINE void atomic_thread_fence(memory_order order) BOOST_NOEXCEPT
+{
+    detail::thread_fence(order);
+}
+#else
+BOOST_FORCEINLINE void atomic_thread_fence(memory_order) BOOST_NOEXCEPT
+{
+    detail::lockpool::thread_fence();
+}
+#endif
+
+#if BOOST_ATOMIC_SIGNAL_FENCE > 0
+BOOST_FORCEINLINE void atomic_signal_fence(memory_order order) BOOST_NOEXCEPT
+{
+    detail::signal_fence(order);
+}
+#else
+BOOST_FORCEINLINE void atomic_signal_fence(memory_order) BOOST_NOEXCEPT
+{
+    detail::lockpool::signal_fence();
+}
+#endif
+
+} // namespace atomics
+
+using atomics::atomic_thread_fence;
+using atomics::atomic_signal_fence;
+
+} // namespace pdalboost
+
+#endif // BOOST_ATOMIC_FENCES_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/bind.hpp b/vendor/pdalboost/boost/bind.hpp
new file mode 100644
index 0000000..0fe93d5
--- /dev/null
+++ b/vendor/pdalboost/boost/bind.hpp
@@ -0,0 +1,41 @@
+#ifndef BOOST_BIND_HPP_INCLUDED
+#define BOOST_BIND_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  bind.hpp - binds function objects to arguments
+//
+//  Copyright (c) 2009, 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  See http://www.boost.org/libs/bind/bind.html for documentation.
+//
+
+#include <boost/bind/bind.hpp>
+
+#ifndef BOOST_BIND_NO_PLACEHOLDERS
+
+#if defined(BOOST_CLANG)
+# pragma clang diagnostic push
+# if  __has_warning("-Wheader-hygiene")
+#  pragma clang diagnostic ignored "-Wheader-hygiene"
+# endif
+#endif
+
+using namespace pdalboost::placeholders;
+
+#if defined(BOOST_CLANG)
+# pragma clang diagnostic pop
+#endif
+
+#endif // #ifndef BOOST_BIND_NO_PLACEHOLDERS
+
+#endif // #ifndef BOOST_BIND_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/bind/arg.hpp b/vendor/pdalboost/boost/bind/arg.hpp
new file mode 100644
index 0000000..77a202d
--- /dev/null
+++ b/vendor/pdalboost/boost/bind/arg.hpp
@@ -0,0 +1,62 @@
+#ifndef BOOST_BIND_ARG_HPP_INCLUDED
+#define BOOST_BIND_ARG_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  bind/arg.hpp
+//
+//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/bind/bind.html for documentation.
+//
+
+#include <boost/config.hpp>
+#include <boost/is_placeholder.hpp>
+#include <boost/static_assert.hpp>
+
+namespace pdalboost
+{
+
+template< int I > struct arg
+{
+    BOOST_CONSTEXPR arg()
+    {
+    }
+
+    template< class T > BOOST_CONSTEXPR arg( T const & /* t */ )
+    {
+        BOOST_STATIC_ASSERT( I == is_placeholder<T>::value );
+    }
+};
+
+template< int I > BOOST_CONSTEXPR bool operator==( arg<I> const &, arg<I> const & )
+{
+    return true;
+}
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template< int I > struct is_placeholder< arg<I> >
+{
+    enum _vt { value = I };
+};
+
+template< int I > struct is_placeholder< arg<I> (*) () >
+{
+    enum _vt { value = I };
+};
+
+#endif
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_BIND_ARG_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/bind/bind.hpp b/vendor/pdalboost/boost/bind/bind.hpp
new file mode 100644
index 0000000..7592a68
--- /dev/null
+++ b/vendor/pdalboost/boost/bind/bind.hpp
@@ -0,0 +1,2256 @@
+#ifndef BOOST_BIND_BIND_HPP_INCLUDED
+#define BOOST_BIND_BIND_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  bind.hpp - binds function objects to arguments
+//
+//  Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.
+//  Copyright (c) 2001 David Abrahams
+//  Copyright (c) 2005 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/bind/bind.html for documentation.
+//
+
+#include <boost/config.hpp>
+#include <boost/ref.hpp>
+#include <boost/mem_fn.hpp>
+#include <boost/type.hpp>
+#include <boost/is_placeholder.hpp>
+#include <boost/bind/arg.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/visit_each.hpp>
+#include <boost/core/enable_if.hpp>
+#include <boost/core/is_same.hpp>
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+#include <utility> // std::forward
+#endif
+
+// Borland-specific bug, visit_each() silently fails to produce code
+
+#if defined(__BORLANDC__)
+#  define BOOST_BIND_VISIT_EACH pdalboost::visit_each
+#else
+#  define BOOST_BIND_VISIT_EACH visit_each
+#endif
+
+#include <boost/bind/storage.hpp>
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4512) // assignment operator could not be generated
+#endif
+
+namespace pdalboost
+{
+
+template<class T> class weak_ptr;
+
+namespace _bi // implementation details
+{
+
+// result_traits
+
+template<class R, class F> struct result_traits
+{
+    typedef R type;
+};
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+
+struct unspecified {};
+
+template<class F> struct result_traits<unspecified, F>
+{
+    typedef typename F::result_type type;
+};
+
+template<class F> struct result_traits< unspecified, reference_wrapper<F> >
+{
+    typedef typename F::result_type type;
+};
+
+#endif
+
+// ref_compare
+
+template<class T> bool ref_compare( T const & a, T const & b, long )
+{
+    return a == b;
+}
+
+template<int I> bool ref_compare( arg<I> const &, arg<I> const &, int )
+{
+    return true;
+}
+
+template<int I> bool ref_compare( arg<I> (*) (), arg<I> (*) (), int )
+{
+    return true;
+}
+
+template<class T> bool ref_compare( reference_wrapper<T> const & a, reference_wrapper<T> const & b, int )
+{
+    return a.get_pointer() == b.get_pointer();
+}
+
+// bind_t forward declaration for listN
+
+template<class R, class F, class L> class bind_t;
+
+template<class R, class F, class L> bool ref_compare( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b, int )
+{
+    return a.compare( b );
+}
+
+// value
+
+template<class T> class value
+{
+public:
+
+    value(T const & t): t_(t) {}
+
+    T & get() { return t_; }
+    T const & get() const { return t_; }
+
+    bool operator==(value const & rhs) const
+    {
+        return t_ == rhs.t_;
+    }
+
+private:
+
+    T t_;
+};
+
+// ref_compare for weak_ptr
+
+template<class T> bool ref_compare( value< weak_ptr<T> > const & a, value< weak_ptr<T> > const & b, int )
+{
+    return !(a.get() < b.get()) && !(b.get() < a.get());
+}
+
+// type
+
+template<class T> class type {};
+
+// unwrap
+
+template<class F> struct unwrapper
+{
+    static inline F & unwrap( F & f, long )
+    {
+        return f;
+    }
+
+    template<class F2> static inline F2 & unwrap( reference_wrapper<F2> rf, int )
+    {
+        return rf.get();
+    }
+
+    template<class R, class T> static inline _mfi::dm<R, T> unwrap( R T::* pm, int )
+    {
+        return _mfi::dm<R, T>( pm );
+    }
+};
+
+// listN
+
+class list0
+{
+public:
+
+    list0() {}
+
+    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+    template<class R, class F, class A> R operator()(type<R>, F & f, A &, long)
+    {
+        return unwrapper<F>::unwrap(f, 0)();
+    }
+
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A &, long) const
+    {
+        return unwrapper<F const>::unwrap(f, 0)();
+    }
+
+    template<class F, class A> void operator()(type<void>, F & f, A &, int)
+    {
+        unwrapper<F>::unwrap(f, 0)();
+    }
+
+    template<class F, class A> void operator()(type<void>, F const & f, A &, int) const
+    {
+        unwrapper<F const>::unwrap(f, 0)();
+    }
+
+    template<class V> void accept(V &) const
+    {
+    }
+
+    bool operator==(list0 const &) const
+    {
+        return true;
+    }
+};
+
+#ifdef BOOST_MSVC
+// MSVC is bright enough to realise that the parameter rhs 
+// in operator==may be unused for some template argument types:
+#pragma warning(push)
+#pragma warning(disable:4100)
+#endif
+
+template< class A1 > class list1: private storage1< A1 >
+{
+private:
+
+    typedef storage1< A1 > base_type;
+
+public:
+
+    explicit list1( A1 a1 ): base_type( a1 ) {}
+
+    A1 operator[] (pdalboost::arg<1>) const { return base_type::a1_; }
+
+    A1 operator[] (pdalboost::arg<1> (*) ()) const { return base_type::a1_; }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+    {
+        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_]);
+    }
+
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    {
+        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+    {
+        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+    {
+        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_]);
+    }
+
+    template<class V> void accept(V & v) const
+    {
+        base_type::accept(v);
+    }
+
+    bool operator==(list1 const & rhs) const
+    {
+        return ref_compare(base_type::a1_, rhs.a1_, 0);
+    }
+};
+
+struct logical_and;
+struct logical_or;
+
+template< class A1, class A2 > class list2: private storage2< A1, A2 >
+{
+private:
+
+    typedef storage2< A1, A2 > base_type;
+
+public:
+
+    list2( A1 a1, A2 a2 ): base_type( a1, a2 ) {}
+
+    A1 operator[] (pdalboost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2>) const { return base_type::a2_; }
+
+    A1 operator[] (pdalboost::arg<1> (*) ()) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2> (*) ()) const { return base_type::a2_; }
+
+    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+    {
+        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
+    }
+
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    {
+        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+    {
+        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+    {
+        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
+    }
+
+    template<class A> bool operator()( type<bool>, logical_and & /*f*/, A & a, int )
+    {
+        return a[ base_type::a1_ ] && a[ base_type::a2_ ];
+    }
+
+    template<class A> bool operator()( type<bool>, logical_and const & /*f*/, A & a, int ) const
+    {
+        return a[ base_type::a1_ ] && a[ base_type::a2_ ];
+    }
+
+    template<class A> bool operator()( type<bool>, logical_or & /*f*/, A & a, int )
+    {
+        return a[ base_type::a1_ ] || a[ base_type::a2_ ];
+    }
+
+    template<class A> bool operator()( type<bool>, logical_or const & /*f*/, A & a, int ) const
+    {
+        return a[ base_type::a1_ ] || a[ base_type::a2_ ];
+    }
+
+    template<class V> void accept(V & v) const
+    {
+        base_type::accept(v);
+    }
+
+    bool operator==(list2 const & rhs) const
+    {
+        return ref_compare(base_type::a1_, rhs.a1_, 0) && ref_compare(base_type::a2_, rhs.a2_, 0);
+    }
+};
+
+template< class A1, class A2, class A3 > class list3: private storage3< A1, A2, A3 >
+{
+private:
+
+    typedef storage3< A1, A2, A3 > base_type;
+
+public:
+
+    list3( A1 a1, A2 a2, A3 a3 ): base_type( a1, a2, a3 ) {}
+
+    A1 operator[] (pdalboost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2>) const { return base_type::a2_; }
+    A3 operator[] (pdalboost::arg<3>) const { return base_type::a3_; }
+
+    A1 operator[] (pdalboost::arg<1> (*) ()) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2> (*) ()) const { return base_type::a2_; }
+    A3 operator[] (pdalboost::arg<3> (*) ()) const { return base_type::a3_; }
+
+    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+    {
+        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
+    }
+
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    {
+        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+    {
+        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+    {
+        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
+    }
+
+    template<class V> void accept(V & v) const
+    {
+        base_type::accept(v);
+    }
+
+    bool operator==(list3 const & rhs) const
+    {
+        return
+            
+            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
+            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
+            ref_compare( base_type::a3_, rhs.a3_, 0 );
+    }
+};
+
+template< class A1, class A2, class A3, class A4 > class list4: private storage4< A1, A2, A3, A4 >
+{
+private:
+
+    typedef storage4< A1, A2, A3, A4 > base_type;
+
+public:
+
+    list4( A1 a1, A2 a2, A3 a3, A4 a4 ): base_type( a1, a2, a3, a4 ) {}
+
+    A1 operator[] (pdalboost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2>) const { return base_type::a2_; }
+    A3 operator[] (pdalboost::arg<3>) const { return base_type::a3_; }
+    A4 operator[] (pdalboost::arg<4>) const { return base_type::a4_; }
+
+    A1 operator[] (pdalboost::arg<1> (*) ()) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2> (*) ()) const { return base_type::a2_; }
+    A3 operator[] (pdalboost::arg<3> (*) ()) const { return base_type::a3_; }
+    A4 operator[] (pdalboost::arg<4> (*) ()) const { return base_type::a4_; }
+
+    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+    {
+        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
+    }
+
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    {
+        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+    {
+        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+    {
+        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
+    }
+
+    template<class V> void accept(V & v) const
+    {
+        base_type::accept(v);
+    }
+
+    bool operator==(list4 const & rhs) const
+    {
+        return
+
+            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
+            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
+            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
+            ref_compare( base_type::a4_, rhs.a4_, 0 );
+    }
+};
+
+template< class A1, class A2, class A3, class A4, class A5 > class list5: private storage5< A1, A2, A3, A4, A5 >
+{
+private:
+
+    typedef storage5< A1, A2, A3, A4, A5 > base_type;
+
+public:
+
+    list5( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ): base_type( a1, a2, a3, a4, a5 ) {}
+
+    A1 operator[] (pdalboost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2>) const { return base_type::a2_; }
+    A3 operator[] (pdalboost::arg<3>) const { return base_type::a3_; }
+    A4 operator[] (pdalboost::arg<4>) const { return base_type::a4_; }
+    A5 operator[] (pdalboost::arg<5>) const { return base_type::a5_; }
+
+    A1 operator[] (pdalboost::arg<1> (*) ()) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2> (*) ()) const { return base_type::a2_; }
+    A3 operator[] (pdalboost::arg<3> (*) ()) const { return base_type::a3_; }
+    A4 operator[] (pdalboost::arg<4> (*) ()) const { return base_type::a4_; }
+    A5 operator[] (pdalboost::arg<5> (*) ()) const { return base_type::a5_; }
+
+    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+    {
+        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
+    }
+
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    {
+        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+    {
+        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+    {
+        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
+    }
+
+    template<class V> void accept(V & v) const
+    {
+        base_type::accept(v);
+    }
+
+    bool operator==(list5 const & rhs) const
+    {
+        return
+
+            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
+            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
+            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
+            ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
+            ref_compare( base_type::a5_, rhs.a5_, 0 );
+    }
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6> class list6: private storage6< A1, A2, A3, A4, A5, A6 >
+{
+private:
+
+    typedef storage6< A1, A2, A3, A4, A5, A6 > base_type;
+
+public:
+
+    list6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ): base_type( a1, a2, a3, a4, a5, a6 ) {}
+
+    A1 operator[] (pdalboost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2>) const { return base_type::a2_; }
+    A3 operator[] (pdalboost::arg<3>) const { return base_type::a3_; }
+    A4 operator[] (pdalboost::arg<4>) const { return base_type::a4_; }
+    A5 operator[] (pdalboost::arg<5>) const { return base_type::a5_; }
+    A6 operator[] (pdalboost::arg<6>) const { return base_type::a6_; }
+
+    A1 operator[] (pdalboost::arg<1> (*) ()) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2> (*) ()) const { return base_type::a2_; }
+    A3 operator[] (pdalboost::arg<3> (*) ()) const { return base_type::a3_; }
+    A4 operator[] (pdalboost::arg<4> (*) ()) const { return base_type::a4_; }
+    A5 operator[] (pdalboost::arg<5> (*) ()) const { return base_type::a5_; }
+    A6 operator[] (pdalboost::arg<6> (*) ()) const { return base_type::a6_; }
+
+    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+    {
+        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
+    }
+
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    {
+        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+    {
+        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+    {
+        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
+    }
+
+    template<class V> void accept(V & v) const
+    {
+        base_type::accept(v);
+    }
+
+    bool operator==(list6 const & rhs) const
+    {
+        return
+
+            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
+            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
+            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
+            ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
+            ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
+            ref_compare( base_type::a6_, rhs.a6_, 0 );
+    }
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> class list7: private storage7< A1, A2, A3, A4, A5, A6, A7 >
+{
+private:
+
+    typedef storage7< A1, A2, A3, A4, A5, A6, A7 > base_type;
+
+public:
+
+    list7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ): base_type( a1, a2, a3, a4, a5, a6, a7 ) {}
+
+    A1 operator[] (pdalboost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2>) const { return base_type::a2_; }
+    A3 operator[] (pdalboost::arg<3>) const { return base_type::a3_; }
+    A4 operator[] (pdalboost::arg<4>) const { return base_type::a4_; }
+    A5 operator[] (pdalboost::arg<5>) const { return base_type::a5_; }
+    A6 operator[] (pdalboost::arg<6>) const { return base_type::a6_; }
+    A7 operator[] (pdalboost::arg<7>) const { return base_type::a7_; }
+
+    A1 operator[] (pdalboost::arg<1> (*) ()) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2> (*) ()) const { return base_type::a2_; }
+    A3 operator[] (pdalboost::arg<3> (*) ()) const { return base_type::a3_; }
+    A4 operator[] (pdalboost::arg<4> (*) ()) const { return base_type::a4_; }
+    A5 operator[] (pdalboost::arg<5> (*) ()) const { return base_type::a5_; }
+    A6 operator[] (pdalboost::arg<6> (*) ()) const { return base_type::a6_; }
+    A7 operator[] (pdalboost::arg<7> (*) ()) const { return base_type::a7_; }
+
+    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+    {
+        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
+    }
+
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    {
+        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+    {
+        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+    {
+        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
+    }
+
+    template<class V> void accept(V & v) const
+    {
+        base_type::accept(v);
+    }
+
+    bool operator==(list7 const & rhs) const
+    {
+        return
+
+            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
+            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
+            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
+            ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
+            ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
+            ref_compare( base_type::a6_, rhs.a6_, 0 ) &&
+            ref_compare( base_type::a7_, rhs.a7_, 0 );
+    }
+};
+
+template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > class list8: private storage8< A1, A2, A3, A4, A5, A6, A7, A8 >
+{
+private:
+
+    typedef storage8< A1, A2, A3, A4, A5, A6, A7, A8 > base_type;
+
+public:
+
+    list8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8 ) {}
+
+    A1 operator[] (pdalboost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2>) const { return base_type::a2_; }
+    A3 operator[] (pdalboost::arg<3>) const { return base_type::a3_; }
+    A4 operator[] (pdalboost::arg<4>) const { return base_type::a4_; }
+    A5 operator[] (pdalboost::arg<5>) const { return base_type::a5_; }
+    A6 operator[] (pdalboost::arg<6>) const { return base_type::a6_; }
+    A7 operator[] (pdalboost::arg<7>) const { return base_type::a7_; }
+    A8 operator[] (pdalboost::arg<8>) const { return base_type::a8_; }
+
+    A1 operator[] (pdalboost::arg<1> (*) ()) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2> (*) ()) const { return base_type::a2_; }
+    A3 operator[] (pdalboost::arg<3> (*) ()) const { return base_type::a3_; }
+    A4 operator[] (pdalboost::arg<4> (*) ()) const { return base_type::a4_; }
+    A5 operator[] (pdalboost::arg<5> (*) ()) const { return base_type::a5_; }
+    A6 operator[] (pdalboost::arg<6> (*) ()) const { return base_type::a6_; }
+    A7 operator[] (pdalboost::arg<7> (*) ()) const { return base_type::a7_; }
+    A8 operator[] (pdalboost::arg<8> (*) ()) const { return base_type::a8_; }
+
+    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+    {
+        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
+    }
+
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    {
+        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+    {
+        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+    {
+        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
+    }
+
+    template<class V> void accept(V & v) const
+    {
+        base_type::accept(v);
+    }
+
+    bool operator==(list8 const & rhs) const
+    {
+        return
+            
+            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
+            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
+            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
+            ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
+            ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
+            ref_compare( base_type::a6_, rhs.a6_, 0 ) &&
+            ref_compare( base_type::a7_, rhs.a7_, 0 ) &&
+            ref_compare( base_type::a8_, rhs.a8_, 0 );
+    }
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> class list9: private storage9< A1, A2, A3, A4, A5, A6, A7, A8, A9 >
+{
+private:
+
+    typedef storage9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > base_type;
+
+public:
+
+    list9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8, a9 ) {}
+
+    A1 operator[] (pdalboost::arg<1>) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2>) const { return base_type::a2_; }
+    A3 operator[] (pdalboost::arg<3>) const { return base_type::a3_; }
+    A4 operator[] (pdalboost::arg<4>) const { return base_type::a4_; }
+    A5 operator[] (pdalboost::arg<5>) const { return base_type::a5_; }
+    A6 operator[] (pdalboost::arg<6>) const { return base_type::a6_; }
+    A7 operator[] (pdalboost::arg<7>) const { return base_type::a7_; }
+    A8 operator[] (pdalboost::arg<8>) const { return base_type::a8_; }
+    A9 operator[] (pdalboost::arg<9>) const { return base_type::a9_; }
+
+    A1 operator[] (pdalboost::arg<1> (*) ()) const { return base_type::a1_; }
+    A2 operator[] (pdalboost::arg<2> (*) ()) const { return base_type::a2_; }
+    A3 operator[] (pdalboost::arg<3> (*) ()) const { return base_type::a3_; }
+    A4 operator[] (pdalboost::arg<4> (*) ()) const { return base_type::a4_; }
+    A5 operator[] (pdalboost::arg<5> (*) ()) const { return base_type::a5_; }
+    A6 operator[] (pdalboost::arg<6> (*) ()) const { return base_type::a6_; }
+    A7 operator[] (pdalboost::arg<7> (*) ()) const { return base_type::a7_; }
+    A8 operator[] (pdalboost::arg<8> (*) ()) const { return base_type::a8_; }
+    A9 operator[] (pdalboost::arg<9> (*) ()) const { return base_type::a9_; }
+
+    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
+
+    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+
+    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
+    {
+        return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
+    }
+
+    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
+    {
+        return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F & f, A & a, int)
+    {
+        unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
+    }
+
+    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
+    {
+        unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
+    }
+
+    template<class V> void accept(V & v) const
+    {
+        base_type::accept(v);
+    }
+
+    bool operator==(list9 const & rhs) const
+    {
+        return
+
+            ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
+            ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
+            ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
+            ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
+            ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
+            ref_compare( base_type::a6_, rhs.a6_, 0 ) &&
+            ref_compare( base_type::a7_, rhs.a7_, 0 ) &&
+            ref_compare( base_type::a8_, rhs.a8_, 0 ) &&
+            ref_compare( base_type::a9_, rhs.a9_, 0 );
+    }
+};
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+// bind_t
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+template< class A1 > class rrlist1
+{
+private:
+
+    A1 & a1_; // not A1&& because of msvc-10.0
+
+public:
+
+    explicit rrlist1( A1 & a1 ): a1_( a1 ) {}
+
+    A1 && operator[] (pdalboost::arg<1>) const { return std::forward<A1>( a1_ ); } // not static_cast because of g++ 4.9
+
+    A1 && operator[] (pdalboost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template< class A1, class A2 > class rrlist2
+{
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+
+public:
+
+    rrlist2( A1 & a1, A2 & a2 ): a1_( a1 ), a2_( a2 ) {}
+
+    A1 && operator[] (pdalboost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2>) const { return std::forward<A2>( a2_ ); }
+
+    A1 && operator[] (pdalboost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template< class A1, class A2, class A3 > class rrlist3
+{
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+    A3 & a3_;
+
+public:
+
+    rrlist3( A1 & a1, A2 & a2, A3 & a3 ): a1_( a1 ), a2_( a2 ), a3_( a3 ) {}
+
+    A1 && operator[] (pdalboost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2>) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (pdalboost::arg<3>) const { return std::forward<A3>( a3_ ); }
+
+    A1 && operator[] (pdalboost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (pdalboost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template< class A1, class A2, class A3, class A4 > class rrlist4
+{
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+    A3 & a3_;
+    A4 & a4_;
+
+public:
+
+    rrlist4( A1 & a1, A2 & a2, A3 & a3, A4 & a4 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ) {}
+
+    A1 && operator[] (pdalboost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2>) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (pdalboost::arg<3>) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (pdalboost::arg<4>) const { return std::forward<A4>( a4_ ); }
+
+    A1 && operator[] (pdalboost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (pdalboost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (pdalboost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template< class A1, class A2, class A3, class A4, class A5 > class rrlist5
+{
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+    A3 & a3_;
+    A4 & a4_;
+    A5 & a5_;
+
+public:
+
+    rrlist5( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ) {}
+
+    A1 && operator[] (pdalboost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2>) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (pdalboost::arg<3>) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (pdalboost::arg<4>) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (pdalboost::arg<5>) const { return std::forward<A5>( a5_ ); }
+
+    A1 && operator[] (pdalboost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (pdalboost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (pdalboost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (pdalboost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template< class A1, class A2, class A3, class A4, class A5, class A6 > class rrlist6
+{
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+    A3 & a3_;
+    A4 & a4_;
+    A5 & a5_;
+    A6 & a6_;
+
+public:
+
+    rrlist6( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ) {}
+
+    A1 && operator[] (pdalboost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2>) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (pdalboost::arg<3>) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (pdalboost::arg<4>) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (pdalboost::arg<5>) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (pdalboost::arg<6>) const { return std::forward<A6>( a6_ ); }
+
+    A1 && operator[] (pdalboost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (pdalboost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (pdalboost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (pdalboost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (pdalboost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template< class A1, class A2, class A3, class A4, class A5, class A6, class A7 > class rrlist7
+{
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+    A3 & a3_;
+    A4 & a4_;
+    A5 & a5_;
+    A6 & a6_;
+    A7 & a7_;
+
+public:
+
+    rrlist7( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ), a7_( a7 ) {}
+
+    A1 && operator[] (pdalboost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2>) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (pdalboost::arg<3>) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (pdalboost::arg<4>) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (pdalboost::arg<5>) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (pdalboost::arg<6>) const { return std::forward<A6>( a6_ ); }
+    A7 && operator[] (pdalboost::arg<7>) const { return std::forward<A7>( a7_ ); }
+
+    A1 && operator[] (pdalboost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (pdalboost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (pdalboost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (pdalboost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (pdalboost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); }
+    A7 && operator[] (pdalboost::arg<7> (*) ()) const { return std::forward<A7>( a7_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > class rrlist8
+{
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+    A3 & a3_;
+    A4 & a4_;
+    A5 & a5_;
+    A6 & a6_;
+    A7 & a7_;
+    A8 & a8_;
+
+public:
+
+    rrlist8( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ), a7_( a7 ), a8_( a8 ) {}
+
+    A1 && operator[] (pdalboost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2>) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (pdalboost::arg<3>) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (pdalboost::arg<4>) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (pdalboost::arg<5>) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (pdalboost::arg<6>) const { return std::forward<A6>( a6_ ); }
+    A7 && operator[] (pdalboost::arg<7>) const { return std::forward<A7>( a7_ ); }
+    A8 && operator[] (pdalboost::arg<8>) const { return std::forward<A8>( a8_ ); }
+
+    A1 && operator[] (pdalboost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (pdalboost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (pdalboost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (pdalboost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (pdalboost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); }
+    A7 && operator[] (pdalboost::arg<7> (*) ()) const { return std::forward<A7>( a7_ ); }
+    A8 && operator[] (pdalboost::arg<8> (*) ()) const { return std::forward<A8>( a8_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > class rrlist9
+{
+private:
+
+    A1 & a1_;
+    A2 & a2_;
+    A3 & a3_;
+    A4 & a4_;
+    A5 & a5_;
+    A6 & a6_;
+    A7 & a7_;
+    A8 & a8_;
+    A9 & a9_;
+
+public:
+
+    rrlist9( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ), a7_( a7 ), a8_( a8 ), a9_( a9 ) {}
+
+    A1 && operator[] (pdalboost::arg<1>) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2>) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (pdalboost::arg<3>) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (pdalboost::arg<4>) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (pdalboost::arg<5>) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (pdalboost::arg<6>) const { return std::forward<A6>( a6_ ); }
+    A7 && operator[] (pdalboost::arg<7>) const { return std::forward<A7>( a7_ ); }
+    A8 && operator[] (pdalboost::arg<8>) const { return std::forward<A8>( a8_ ); }
+    A9 && operator[] (pdalboost::arg<9>) const { return std::forward<A9>( a9_ ); }
+
+    A1 && operator[] (pdalboost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); }
+    A2 && operator[] (pdalboost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); }
+    A3 && operator[] (pdalboost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); }
+    A4 && operator[] (pdalboost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); }
+    A5 && operator[] (pdalboost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); }
+    A6 && operator[] (pdalboost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); }
+    A7 && operator[] (pdalboost::arg<7> (*) ()) const { return std::forward<A7>( a7_ ); }
+    A8 && operator[] (pdalboost::arg<8> (*) ()) const { return std::forward<A8>( a8_ ); }
+    A9 && operator[] (pdalboost::arg<9> (*) ()) const { return std::forward<A9>( a9_ ); }
+
+    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
+
+    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
+
+    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
+
+    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
+};
+
+template<class R, class F, class L> class bind_t
+{
+private:
+
+    F f_;
+    L l_;
+
+public:
+
+    typedef typename result_traits<R, F>::type result_type;
+    typedef bind_t this_type;
+
+    bind_t( F f, L const & l ): f_( f ), l_( l ) {}
+
+    //
+
+    result_type operator()()
+    {
+        list0 a;
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    result_type operator()() const
+    {
+        list0 a;
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1> result_type operator()( A1 && a1 )
+    {
+        rrlist1< A1 > a( a1 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1> result_type operator()( A1 && a1 ) const
+    {
+        rrlist1< A1 > a( a1 );
+        return l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2> result_type operator()( A1 && a1, A2 && a2 )
+    {
+        rrlist2< A1, A2 > a( a1, a2 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1, class A2> result_type operator()( A1 && a1, A2 && a2 ) const
+    {
+        rrlist2< A1, A2 > a( a1, a2 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1, class A2, class A3> result_type operator()( A1 && a1, A2 && a2, A3 && a3 )
+    {
+        rrlist3< A1, A2, A3 > a( a1, a2, a3 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1, class A2, class A3> result_type operator()( A1 && a1, A2 && a2, A3 && a3 ) const
+    {
+        rrlist3< A1, A2, A3 > a( a1, a2, a3 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1, class A2, class A3, class A4> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4 )
+    {
+        rrlist4< A1, A2, A3, A4 > a( a1, a2, a3, a4 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1, class A2, class A3, class A4> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4 ) const
+    {
+        rrlist4< A1, A2, A3, A4 > a( a1, a2, a3, a4 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 )
+    {
+        rrlist5< A1, A2, A3, A4, A5 > a( a1, a2, a3, a4, a5 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 ) const
+    {
+        rrlist5< A1, A2, A3, A4, A5 > a( a1, a2, a3, a4, a5 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 )
+    {
+        rrlist6< A1, A2, A3, A4, A5, A6 > a( a1, a2, a3, a4, a5, a6 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 ) const
+    {
+        rrlist6< A1, A2, A3, A4, A5, A6 > a( a1, a2, a3, a4, a5, a6 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 )
+    {
+        rrlist7< A1, A2, A3, A4, A5, A6, A7 > a( a1, a2, a3, a4, a5, a6, a7 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 ) const
+    {
+        rrlist7< A1, A2, A3, A4, A5, A6, A7 > a( a1, a2, a3, a4, a5, a6, a7 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 )
+    {
+        rrlist8< A1, A2, A3, A4, A5, A6, A7, A8 > a( a1, a2, a3, a4, a5, a6, a7, a8 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 ) const
+    {
+        rrlist8< A1, A2, A3, A4, A5, A6, A7, A8 > a( a1, a2, a3, a4, a5, a6, a7, a8 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 )
+    {
+        rrlist9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > a( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 ) const
+    {
+        rrlist9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > a( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    //
+
+    template<class A> result_type eval( A & a )
+    {
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class A> result_type eval( A & a ) const
+    {
+        return l_( type<result_type>(), f_, a, 0 );
+    }
+
+    template<class V> void accept( V & v ) const
+    {
+#if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( __BORLANDC__ )
+        using pdalboost::visit_each;
+#endif
+
+        BOOST_BIND_VISIT_EACH( v, f_, 0 );
+        l_.accept( v );
+    }
+
+    bool compare( this_type const & rhs ) const
+    {
+        return ref_compare( f_, rhs.f_, 0 ) && l_ == rhs.l_;
+    }
+};
+
+#elif !defined( BOOST_NO_VOID_RETURNS )
+
+template<class R, class F, class L> class bind_t
+{
+public:
+
+    typedef bind_t this_type;
+
+    bind_t(F f, L const & l): f_(f), l_(l) {}
+
+#define BOOST_BIND_RETURN return
+#include <boost/bind/bind_template.hpp>
+#undef BOOST_BIND_RETURN
+
+};
+
+#else // no void returns
+
+template<class R> struct bind_t_generator
+{
+
+template<class F, class L> class implementation
+{
+public:
+
+    typedef implementation this_type;
+
+    implementation(F f, L const & l): f_(f), l_(l) {}
+
+#define BOOST_BIND_RETURN return
+#include <boost/bind/bind_template.hpp>
+#undef BOOST_BIND_RETURN
+
+};
+
+};
+
+template<> struct bind_t_generator<void>
+{
+
+template<class F, class L> class implementation
+{
+private:
+
+    typedef void R;
+
+public:
+
+    typedef implementation this_type;
+
+    implementation(F f, L const & l): f_(f), l_(l) {}
+
+#define BOOST_BIND_RETURN
+#include <boost/bind/bind_template.hpp>
+#undef BOOST_BIND_RETURN
+
+};
+
+};
+
+template<class R2, class F, class L> class bind_t: public bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L>
+{
+public:
+
+    bind_t(F f, L const & l): bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L>(f, l) {}
+
+};
+
+#endif
+
+// function_equal
+
+#ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+
+// put overloads in _bi, rely on ADL
+
+# ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+template<class R, class F, class L> bool function_equal( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b )
+{
+    return a.compare(b);
+}
+
+# else
+
+template<class R, class F, class L> bool function_equal_impl( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b, int )
+{
+    return a.compare(b);
+}
+
+# endif // #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+#else // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+
+// put overloads in boost
+
+} // namespace _bi
+
+# ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+template<class R, class F, class L> bool function_equal( _bi::bind_t<R, F, L> const & a, _bi::bind_t<R, F, L> const & b )
+{
+    return a.compare(b);
+}
+
+# else
+
+template<class R, class F, class L> bool function_equal_impl( _bi::bind_t<R, F, L> const & a, _bi::bind_t<R, F, L> const & b, int )
+{
+    return a.compare(b);
+}
+
+# endif // #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+namespace _bi
+{
+
+#endif // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+
+// add_value
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || (__SUNPRO_CC >= 0x530)
+
+#if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x582) )
+
+template<class T> struct add_value
+{
+    typedef _bi::value<T> type;
+};
+
+#else
+
+template< class T, int I > struct add_value_2
+{
+    typedef pdalboost::arg<I> type;
+};
+
+template< class T > struct add_value_2< T, 0 >
+{
+    typedef _bi::value< T > type;
+};
+
+template<class T> struct add_value
+{
+    typedef typename add_value_2< T, pdalboost::is_placeholder< T >::value >::type type;
+};
+
+#endif
+
+template<class T> struct add_value< value<T> >
+{
+    typedef _bi::value<T> type;
+};
+
+template<class T> struct add_value< reference_wrapper<T> >
+{
+    typedef reference_wrapper<T> type;
+};
+
+template<int I> struct add_value< arg<I> >
+{
+    typedef pdalboost::arg<I> type;
+};
+
+template<int I> struct add_value< arg<I> (*) () >
+{
+    typedef pdalboost::arg<I> (*type) ();
+};
+
+template<class R, class F, class L> struct add_value< bind_t<R, F, L> >
+{
+    typedef bind_t<R, F, L> type;
+};
+
+#else
+
+template<int I> struct _avt_0;
+
+template<> struct _avt_0<1>
+{
+    template<class T> struct inner
+    {
+        typedef T type;
+    };
+};
+
+template<> struct _avt_0<2>
+{
+    template<class T> struct inner
+    {
+        typedef value<T> type;
+    };
+};
+
+typedef char (&_avt_r1) [1];
+typedef char (&_avt_r2) [2];
+
+template<class T> _avt_r1 _avt_f(value<T>);
+template<class T> _avt_r1 _avt_f(reference_wrapper<T>);
+template<int I> _avt_r1 _avt_f(arg<I>);
+template<int I> _avt_r1 _avt_f(arg<I> (*) ());
+template<class R, class F, class L> _avt_r1 _avt_f(bind_t<R, F, L>);
+
+_avt_r2 _avt_f(...);
+
+template<class T> struct add_value
+{
+    static T t();
+    typedef typename _avt_0<sizeof(_avt_f(t()))>::template inner<T>::type type;
+};
+
+#endif
+
+// list_av_N
+
+template<class A1> struct list_av_1
+{
+    typedef typename add_value<A1>::type B1;
+    typedef list1<B1> type;
+};
+
+template<class A1, class A2> struct list_av_2
+{
+    typedef typename add_value<A1>::type B1;
+    typedef typename add_value<A2>::type B2;
+    typedef list2<B1, B2> type;
+};
+
+template<class A1, class A2, class A3> struct list_av_3
+{
+    typedef typename add_value<A1>::type B1;
+    typedef typename add_value<A2>::type B2;
+    typedef typename add_value<A3>::type B3;
+    typedef list3<B1, B2, B3> type;
+};
+
+template<class A1, class A2, class A3, class A4> struct list_av_4
+{
+    typedef typename add_value<A1>::type B1;
+    typedef typename add_value<A2>::type B2;
+    typedef typename add_value<A3>::type B3;
+    typedef typename add_value<A4>::type B4;
+    typedef list4<B1, B2, B3, B4> type;
+};
+
+template<class A1, class A2, class A3, class A4, class A5> struct list_av_5
+{
+    typedef typename add_value<A1>::type B1;
+    typedef typename add_value<A2>::type B2;
+    typedef typename add_value<A3>::type B3;
+    typedef typename add_value<A4>::type B4;
+    typedef typename add_value<A5>::type B5;
+    typedef list5<B1, B2, B3, B4, B5> type;
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6> struct list_av_6
+{
+    typedef typename add_value<A1>::type B1;
+    typedef typename add_value<A2>::type B2;
+    typedef typename add_value<A3>::type B3;
+    typedef typename add_value<A4>::type B4;
+    typedef typename add_value<A5>::type B5;
+    typedef typename add_value<A6>::type B6;
+    typedef list6<B1, B2, B3, B4, B5, B6> type;
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct list_av_7
+{
+    typedef typename add_value<A1>::type B1;
+    typedef typename add_value<A2>::type B2;
+    typedef typename add_value<A3>::type B3;
+    typedef typename add_value<A4>::type B4;
+    typedef typename add_value<A5>::type B5;
+    typedef typename add_value<A6>::type B6;
+    typedef typename add_value<A7>::type B7;
+    typedef list7<B1, B2, B3, B4, B5, B6, B7> type;
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct list_av_8
+{
+    typedef typename add_value<A1>::type B1;
+    typedef typename add_value<A2>::type B2;
+    typedef typename add_value<A3>::type B3;
+    typedef typename add_value<A4>::type B4;
+    typedef typename add_value<A5>::type B5;
+    typedef typename add_value<A6>::type B6;
+    typedef typename add_value<A7>::type B7;
+    typedef typename add_value<A8>::type B8;
+    typedef list8<B1, B2, B3, B4, B5, B6, B7, B8> type;
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> struct list_av_9
+{
+    typedef typename add_value<A1>::type B1;
+    typedef typename add_value<A2>::type B2;
+    typedef typename add_value<A3>::type B3;
+    typedef typename add_value<A4>::type B4;
+    typedef typename add_value<A5>::type B5;
+    typedef typename add_value<A6>::type B6;
+    typedef typename add_value<A7>::type B7;
+    typedef typename add_value<A8>::type B8;
+    typedef typename add_value<A9>::type B9;
+    typedef list9<B1, B2, B3, B4, B5, B6, B7, B8, B9> type;
+};
+
+// operator!
+
+struct logical_not
+{
+    template<class V> bool operator()(V const & v) const { return !v; }
+};
+
+template<class R, class F, class L>
+    bind_t< bool, logical_not, list1< bind_t<R, F, L> > >
+    operator! (bind_t<R, F, L> const & f)
+{
+    typedef list1< bind_t<R, F, L> > list_type;
+    return bind_t<bool, logical_not, list_type> ( logical_not(), list_type(f) );
+}
+
+// relational operators
+
+#define BOOST_BIND_OPERATOR( op, name ) \
+\
+struct name \
+{ \
+    template<class V, class W> bool operator()(V const & v, W const & w) const { return v op w; } \
+}; \
+ \
+template<class R, class F, class L, class A2> \
+    bind_t< bool, name, list2< bind_t<R, F, L>, typename add_value<A2>::type > > \
+    operator op (bind_t<R, F, L> const & f, A2 a2) \
+{ \
+    typedef typename add_value<A2>::type B2; \
+    typedef list2< bind_t<R, F, L>, B2> list_type; \
+    return bind_t<bool, name, list_type> ( name(), list_type(f, a2) ); \
+}
+
+BOOST_BIND_OPERATOR( ==, equal )
+BOOST_BIND_OPERATOR( !=, not_equal )
+
+BOOST_BIND_OPERATOR( <, less )
+BOOST_BIND_OPERATOR( <=, less_equal )
+
+BOOST_BIND_OPERATOR( >, greater )
+BOOST_BIND_OPERATOR( >=, greater_equal )
+
+BOOST_BIND_OPERATOR( &&, logical_and )
+BOOST_BIND_OPERATOR( ||, logical_or )
+
+#undef BOOST_BIND_OPERATOR
+
+#if defined(__GNUC__) && BOOST_WORKAROUND(__GNUC__, < 3)
+
+// resolve ambiguity with rel_ops
+
+#define BOOST_BIND_OPERATOR( op, name ) \
+\
+template<class R, class F, class L> \
+    bind_t< bool, name, list2< bind_t<R, F, L>, bind_t<R, F, L> > > \
+    operator op (bind_t<R, F, L> const & f, bind_t<R, F, L> const & g) \
+{ \
+    typedef list2< bind_t<R, F, L>, bind_t<R, F, L> > list_type; \
+    return bind_t<bool, name, list_type> ( name(), list_type(f, g) ); \
+}
+
+BOOST_BIND_OPERATOR( !=, not_equal )
+BOOST_BIND_OPERATOR( <=, less_equal )
+BOOST_BIND_OPERATOR( >, greater )
+BOOST_BIND_OPERATOR( >=, greater_equal )
+
+#endif
+
+// visit_each, ADL
+
+#if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( __BORLANDC__ ) \
+   && !(defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3)
+
+template<class V, class T> void visit_each( V & v, value<T> const & t, int )
+{
+    using pdalboost::visit_each;
+    BOOST_BIND_VISIT_EACH( v, t.get(), 0 );
+}
+
+template<class V, class R, class F, class L> void visit_each( V & v, bind_t<R, F, L> const & t, int )
+{
+    t.accept( v );
+}
+
+#endif
+
+} // namespace _bi
+
+// visit_each, no ADL
+
+#if defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) || defined( __BORLANDC__ ) \
+  || (defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3)
+
+template<class V, class T> void visit_each( V & v, _bi::value<T> const & t, int )
+{
+    BOOST_BIND_VISIT_EACH( v, t.get(), 0 );
+}
+
+template<class V, class R, class F, class L> void visit_each( V & v, _bi::bind_t<R, F, L> const & t, int )
+{
+    t.accept( v );
+}
+
+#endif
+
+// is_bind_expression
+
+template< class T > struct is_bind_expression
+{
+    enum _vt { value = 0 };
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template< class R, class F, class L > struct is_bind_expression< _bi::bind_t< R, F, L > >
+{
+    enum _vt { value = 1 };
+};
+
+#endif
+
+// bind
+
+#ifndef BOOST_BIND
+#define BOOST_BIND bind
+#endif
+
+// generic function objects
+
+template<class R, class F>
+    _bi::bind_t<R, F, _bi::list0>
+    BOOST_BIND(F f)
+{
+    typedef _bi::list0 list_type;
+    return _bi::bind_t<R, F, list_type> (f, list_type());
+}
+
+template<class R, class F, class A1>
+    _bi::bind_t<R, F, typename _bi::list_av_1<A1>::type>
+    BOOST_BIND(F f, A1 a1)
+{
+    typedef typename _bi::list_av_1<A1>::type list_type;
+    return _bi::bind_t<R, F, list_type> (f, list_type(a1));
+}
+
+template<class R, class F, class A1, class A2>
+    _bi::bind_t<R, F, typename _bi::list_av_2<A1, A2>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2)
+{
+    typedef typename _bi::list_av_2<A1, A2>::type list_type;
+    return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));
+}
+
+template<class R, class F, class A1, class A2, class A3>
+    _bi::bind_t<R, F, typename _bi::list_av_3<A1, A2, A3>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)
+{
+    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4>
+    _bi::bind_t<R, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)
+{
+    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5>
+    _bi::bind_t<R, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6>
+    _bi::bind_t<R, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+    _bi::bind_t<R, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+    _bi::bind_t<R, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+    _bi::bind_t<R, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
+
+// generic function objects, alternative syntax
+
+template<class R, class F>
+    _bi::bind_t<R, F, _bi::list0>
+    BOOST_BIND(pdalboost::type<R>, F f)
+{
+    typedef _bi::list0 list_type;
+    return _bi::bind_t<R, F, list_type> (f, list_type());
+}
+
+template<class R, class F, class A1>
+    _bi::bind_t<R, F, typename _bi::list_av_1<A1>::type>
+    BOOST_BIND(pdalboost::type<R>, F f, A1 a1)
+{
+    typedef typename _bi::list_av_1<A1>::type list_type;
+    return _bi::bind_t<R, F, list_type> (f, list_type(a1));
+}
+
+template<class R, class F, class A1, class A2>
+    _bi::bind_t<R, F, typename _bi::list_av_2<A1, A2>::type>
+    BOOST_BIND(pdalboost::type<R>, F f, A1 a1, A2 a2)
+{
+    typedef typename _bi::list_av_2<A1, A2>::type list_type;
+    return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));
+}
+
+template<class R, class F, class A1, class A2, class A3>
+    _bi::bind_t<R, F, typename _bi::list_av_3<A1, A2, A3>::type>
+    BOOST_BIND(pdalboost::type<R>, F f, A1 a1, A2 a2, A3 a3)
+{
+    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4>
+    _bi::bind_t<R, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>
+    BOOST_BIND(pdalboost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4)
+{
+    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5>
+    _bi::bind_t<R, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+    BOOST_BIND(pdalboost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6>
+    _bi::bind_t<R, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+    BOOST_BIND(pdalboost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+    _bi::bind_t<R, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+    BOOST_BIND(pdalboost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+    _bi::bind_t<R, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+    BOOST_BIND(pdalboost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+    _bi::bind_t<R, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+    BOOST_BIND(pdalboost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+
+// adaptable function objects
+
+template<class F>
+    _bi::bind_t<_bi::unspecified, F, _bi::list0>
+    BOOST_BIND(F f)
+{
+    typedef _bi::list0 list_type;
+    return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type());
+}
+
+template<class F, class A1>
+    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_1<A1>::type>
+    BOOST_BIND(F f, A1 a1)
+{
+    typedef typename _bi::list_av_1<A1>::type list_type;
+    return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1));
+}
+
+template<class F, class A1, class A2>
+    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_2<A1, A2>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2)
+{
+    typedef typename _bi::list_av_2<A1, A2>::type list_type;
+    return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1, a2));
+}
+
+template<class F, class A1, class A2, class A3>
+    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_3<A1, A2, A3>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)
+{
+    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3));
+}
+
+template<class F, class A1, class A2, class A3, class A4>
+    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)
+{
+    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4));
+}
+
+template<class F, class A1, class A2, class A3, class A4, class A5>
+    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
+}
+
+template<class F, class A1, class A2, class A3, class A4, class A5, class A6>
+    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
+}
+
+template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+    _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+    return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
+
+#endif // !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+
+// function pointers
+
+#define BOOST_BIND_CC
+#define BOOST_BIND_ST
+
+#include <boost/bind/bind_cc.hpp>
+
+#undef BOOST_BIND_CC
+#undef BOOST_BIND_ST
+
+#ifdef BOOST_BIND_ENABLE_STDCALL
+
+#define BOOST_BIND_CC __stdcall
+#define BOOST_BIND_ST
+
+#include <boost/bind/bind_cc.hpp>
+
+#undef BOOST_BIND_CC
+#undef BOOST_BIND_ST
+
+#endif
+
+#ifdef BOOST_BIND_ENABLE_FASTCALL
+
+#define BOOST_BIND_CC __fastcall
+#define BOOST_BIND_ST
+
+#include <boost/bind/bind_cc.hpp>
+
+#undef BOOST_BIND_CC
+#undef BOOST_BIND_ST
+
+#endif
+
+#ifdef BOOST_BIND_ENABLE_PASCAL
+
+#define BOOST_BIND_ST pascal
+#define BOOST_BIND_CC
+
+#include <boost/bind/bind_cc.hpp>
+
+#undef BOOST_BIND_ST
+#undef BOOST_BIND_CC
+
+#endif
+
+// member function pointers
+
+#define BOOST_BIND_MF_NAME(X) X
+#define BOOST_BIND_MF_CC
+
+#include <boost/bind/bind_mf_cc.hpp>
+#include <boost/bind/bind_mf2_cc.hpp>
+
+#undef BOOST_BIND_MF_NAME
+#undef BOOST_BIND_MF_CC
+
+#ifdef BOOST_MEM_FN_ENABLE_CDECL
+
+#define BOOST_BIND_MF_NAME(X) X##_cdecl
+#define BOOST_BIND_MF_CC __cdecl
+
+#include <boost/bind/bind_mf_cc.hpp>
+#include <boost/bind/bind_mf2_cc.hpp>
+
+#undef BOOST_BIND_MF_NAME
+#undef BOOST_BIND_MF_CC
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_STDCALL
+
+#define BOOST_BIND_MF_NAME(X) X##_stdcall
+#define BOOST_BIND_MF_CC __stdcall
+
+#include <boost/bind/bind_mf_cc.hpp>
+#include <boost/bind/bind_mf2_cc.hpp>
+
+#undef BOOST_BIND_MF_NAME
+#undef BOOST_BIND_MF_CC
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
+
+#define BOOST_BIND_MF_NAME(X) X##_fastcall
+#define BOOST_BIND_MF_CC __fastcall
+
+#include <boost/bind/bind_mf_cc.hpp>
+#include <boost/bind/bind_mf2_cc.hpp>
+
+#undef BOOST_BIND_MF_NAME
+#undef BOOST_BIND_MF_CC
+
+#endif
+
+// data member pointers
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
+    || ( defined(__BORLANDC__) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x620 ) ) )
+
+template<class R, class T, class A1>
+_bi::bind_t< R, _mfi::dm<R, T>, typename _bi::list_av_1<A1>::type >
+    BOOST_BIND(R T::*f, A1 a1)
+{
+    typedef _mfi::dm<R, T> F;
+    typedef typename _bi::list_av_1<A1>::type list_type;
+    return _bi::bind_t<R, F, list_type>( F(f), list_type(a1) );
+}
+
+#else
+
+namespace _bi
+{
+
+template< class Pm, int I > struct add_cref;
+
+template< class M, class T > struct add_cref< M T::*, 0 >
+{
+    typedef M type;
+};
+
+template< class M, class T > struct add_cref< M T::*, 1 >
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4180)
+#endif
+    typedef M const & type;
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+};
+
+template< class R, class T > struct add_cref< R (T::*) (), 1 >
+{
+    typedef void type;
+};
+
+#if !defined(__IBMCPP__) || __IBMCPP_FUNC_CV_TMPL_ARG_DEDUCTION
+
+template< class R, class T > struct add_cref< R (T::*) () const, 1 >
+{
+    typedef void type;
+};
+
+#endif // __IBMCPP__
+
+template<class R> struct isref
+{
+    enum value_type { value = 0 };
+};
+
+template<class R> struct isref< R& >
+{
+    enum value_type { value = 1 };
+};
+
+template<class R> struct isref< R* >
+{
+    enum value_type { value = 1 };
+};
+
+template<class Pm, class A1> struct dm_result
+{
+    typedef typename add_cref< Pm, 1 >::type type;
+};
+
+template<class Pm, class R, class F, class L> struct dm_result< Pm, bind_t<R, F, L> >
+{
+    typedef typename bind_t<R, F, L>::result_type result_type;
+    typedef typename add_cref< Pm, isref< result_type >::value >::type type;
+};
+
+} // namespace _bi
+
+template< class A1, class M, class T >
+
+_bi::bind_t<
+    typename _bi::dm_result< M T::*, A1 >::type,
+    _mfi::dm<M, T>,
+    typename _bi::list_av_1<A1>::type
+>
+
+BOOST_BIND( M T::*f, A1 a1 )
+{
+    typedef typename _bi::dm_result< M T::*, A1 >::type result_type;
+    typedef _mfi::dm<M, T> F;
+    typedef typename _bi::list_av_1<A1>::type list_type;
+    return _bi::bind_t< result_type, F, list_type >( F( f ), list_type( a1 ) );
+}
+
+#endif
+
+} // namespace pdalboost
+
+#ifndef BOOST_BIND_NO_PLACEHOLDERS
+
+# include <boost/bind/placeholders.hpp>
+
+#endif
+
+#ifdef BOOST_MSVC
+# pragma warning(default: 4512) // assignment operator could not be generated
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_BIND_BIND_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/bind/bind_cc.hpp b/vendor/pdalboost/boost/bind/bind_cc.hpp
new file mode 100644
index 0000000..35f8ece
--- /dev/null
+++ b/vendor/pdalboost/boost/bind/bind_cc.hpp
@@ -0,0 +1,117 @@
+//
+//  bind/bind_cc.hpp - support for different calling conventions
+//
+//  Do not include this header directly.
+//
+//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/bind/bind.html for documentation.
+//
+
+template<class R>
+    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (), _bi::list0>
+    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) ())
+{
+    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) ();
+    typedef _bi::list0 list_type;
+    return _bi::bind_t<R, F, list_type> (f, list_type());
+}
+
+template<class R, class B1, class A1>
+    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1), typename _bi::list_av_1<A1>::type>
+    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1), A1 a1)
+{
+    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1);
+    typedef typename _bi::list_av_1<A1>::type list_type;
+    return _bi::bind_t<R, F, list_type> (f, list_type(a1));
+}
+
+template<class R, class B1, class B2, class A1, class A2>
+    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2), typename _bi::list_av_2<A1, A2>::type>
+    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2), A1 a1, A2 a2)
+{
+    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2);
+    typedef typename _bi::list_av_2<A1, A2>::type list_type;
+    return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));
+}
+
+template<class R,
+    class B1, class B2, class B3,
+    class A1, class A2, class A3>
+    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3), typename _bi::list_av_3<A1, A2, A3>::type>
+    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3), A1 a1, A2 a2, A3 a3)
+{
+    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3);
+    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));
+}
+
+template<class R,
+    class B1, class B2, class B3, class B4,
+    class A1, class A2, class A3, class A4>
+    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4), typename _bi::list_av_4<A1, A2, A3, A4>::type>
+    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4)
+{
+    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4);
+    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));
+}
+
+template<class R,
+    class B1, class B2, class B3, class B4, class B5,
+    class A1, class A2, class A3, class A4, class A5>
+    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5), typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5);
+    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
+}
+
+template<class R,
+    class B1, class B2, class B3, class B4, class B5, class B6,
+    class A1, class A2, class A3, class A4, class A5, class A6>
+    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6), typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6);
+    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
+}
+
+template<class R,
+    class B1, class B2, class B3, class B4, class B5, class B6, class B7,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7), typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7);
+    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+template<class R,
+    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8), typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8);
+    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+template<class R,
+    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, class B9,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+    _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8, B9), typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8, B9), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+    typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8, B9);
+    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+    return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
diff --git a/vendor/pdalboost/boost/bind/bind_mf2_cc.hpp b/vendor/pdalboost/boost/bind/bind_mf2_cc.hpp
new file mode 100644
index 0000000..08aed1f
--- /dev/null
+++ b/vendor/pdalboost/boost/bind/bind_mf2_cc.hpp
@@ -0,0 +1,228 @@
+//
+//  bind/bind_mf2_cc.hpp - member functions, type<> syntax
+//
+//  Do not include this header directly.
+//
+//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
+//  Copyright (c) 2008 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  See http://www.boost.org/libs/bind/bind.html for documentation.
+//
+
+// 0
+
+template<class Rt2, class R, class T,
+    class A1>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (), A1 a1)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf0)<R, T> F;
+    typedef typename _bi::list_av_1<A1>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1));
+}
+
+template<class Rt2, class R, class T,
+    class A1>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) () const, A1 a1)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T> F;
+    typedef typename _bi::list_av_1<A1>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1));
+}
+
+// 1
+
+template<class Rt2, class R, class T,
+    class B1,
+    class A1, class A2>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1> F;
+    typedef typename _bi::list_av_2<A1, A2>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2));
+}
+
+template<class Rt2, class R, class T,
+    class B1,
+    class A1, class A2>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1> F;
+    typedef typename _bi::list_av_2<A1, A2>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2));
+}
+
+// 2
+
+template<class Rt2, class R, class T,
+    class B1, class B2,
+    class A1, class A2, class A3>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2> F;
+    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2,
+    class A1, class A2, class A3>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2> F;
+    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3));
+}
+
+// 3
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3,
+    class A1, class A2, class A3, class A4>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3> F;
+    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3,
+    class A1, class A2, class A3, class A4>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3> F;
+    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4));
+}
+
+// 4
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4,
+    class A1, class A2, class A3, class A4, class A5>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4> F;
+    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4,
+    class A1, class A2, class A3, class A4, class A5>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4> F;
+    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));
+}
+
+// 5
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5,
+    class A1, class A2, class A3, class A4, class A5, class A6>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5> F;
+    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5,
+    class A1, class A2, class A3, class A4, class A5, class A6>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5> F;
+    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));
+}
+
+// 6
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6> F;
+    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6> F;
+    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+// 7
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6, class B7,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;
+    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6, class B7,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;
+    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+// 8
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;
+    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+    BOOST_BIND(pdalboost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;
+    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
diff --git a/vendor/pdalboost/boost/bind/bind_mf_cc.hpp b/vendor/pdalboost/boost/bind/bind_mf_cc.hpp
new file mode 100644
index 0000000..8a246f4
--- /dev/null
+++ b/vendor/pdalboost/boost/bind/bind_mf_cc.hpp
@@ -0,0 +1,441 @@
+//
+//  bind/bind_mf_cc.hpp - support for different calling conventions
+//
+//  Do not include this header directly.
+//
+//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/bind/bind.html for documentation.
+//
+
+// 0
+
+template<class R, class T,
+    class A1>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (), A1 a1)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf0)<R, T> F;
+    typedef typename _bi::list_av_1<A1>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1));
+}
+
+template<class R, class T,
+    class A1>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const, A1 a1)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T> F;
+    typedef typename _bi::list_av_1<A1>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1));
+}
+
+template<class Rt2, class R, class T,
+    class A1>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (), A1 a1)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf0)<R, T> F;
+    typedef typename _bi::list_av_1<A1>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1));
+}
+
+template<class Rt2, class R, class T,
+    class A1>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const, A1 a1)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T> F;
+    typedef typename _bi::list_av_1<A1>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1));
+}
+
+// 1
+
+template<class R, class T,
+    class B1,
+    class A1, class A2>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1> F;
+    typedef typename _bi::list_av_2<A1, A2>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2));
+}
+
+template<class R, class T,
+    class B1,
+    class A1, class A2>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1> F;
+    typedef typename _bi::list_av_2<A1, A2>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2));
+}
+
+template<class Rt2, class R, class T,
+    class B1,
+    class A1, class A2>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1> F;
+    typedef typename _bi::list_av_2<A1, A2>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2));
+}
+
+template<class Rt2, class R, class T,
+    class B1,
+    class A1, class A2>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1> F;
+    typedef typename _bi::list_av_2<A1, A2>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2));
+}
+
+// 2
+
+template<class R, class T,
+    class B1, class B2,
+    class A1, class A2, class A3>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2> F;
+    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3));
+}
+
+template<class R, class T,
+    class B1, class B2,
+    class A1, class A2, class A3>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2> F;
+    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2,
+    class A1, class A2, class A3>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2> F;
+    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2,
+    class A1, class A2, class A3>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2> F;
+    typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3));
+}
+
+// 3
+
+template<class R, class T,
+    class B1, class B2, class B3,
+    class A1, class A2, class A3, class A4>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3> F;
+    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4));
+}
+
+template<class R, class T,
+    class B1, class B2, class B3,
+    class A1, class A2, class A3, class A4>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3> F;
+    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3,
+    class A1, class A2, class A3, class A4>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3> F;
+    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3,
+    class A1, class A2, class A3, class A4>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3> F;
+    typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4));
+}
+
+// 4
+
+template<class R, class T,
+    class B1, class B2, class B3, class B4,
+    class A1, class A2, class A3, class A4, class A5>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4> F;
+    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));
+}
+
+template<class R, class T,
+    class B1, class B2, class B3, class B4,
+    class A1, class A2, class A3, class A4, class A5>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4> F;
+    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4,
+    class A1, class A2, class A3, class A4, class A5>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4> F;
+    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4,
+    class A1, class A2, class A3, class A4, class A5>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4> F;
+    typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));
+}
+
+// 5
+
+template<class R, class T,
+    class B1, class B2, class B3, class B4, class B5,
+    class A1, class A2, class A3, class A4, class A5, class A6>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5> F;
+    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));
+}
+
+template<class R, class T,
+    class B1, class B2, class B3, class B4, class B5,
+    class A1, class A2, class A3, class A4, class A5, class A6>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5> F;
+    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5,
+    class A1, class A2, class A3, class A4, class A5, class A6>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5> F;
+    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5,
+    class A1, class A2, class A3, class A4, class A5, class A6>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5> F;
+    typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));
+}
+
+// 6
+
+template<class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6> F;
+    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+template<class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6> F;
+    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6> F;
+    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6> F;
+    typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));
+}
+
+// 7
+
+template<class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6, class B7,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;
+    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+template<class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6, class B7,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;
+    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6, class B7,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;
+    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6, class B7,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;
+    typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));
+}
+
+// 8
+
+template<class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;
+    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
+
+template<class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+    _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;
+    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+    return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;
+    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
+
+template<class Rt2, class R, class T,
+    class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,
+    class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+    typename pdalboost::enable_if_c<!pdalboost::core::is_same<Rt2, R>::value,
+    _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
+    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
+{
+    typedef _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;
+    typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
+    return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
+}
diff --git a/vendor/pdalboost/boost/bind/bind_template.hpp b/vendor/pdalboost/boost/bind/bind_template.hpp
new file mode 100644
index 0000000..17691d6
--- /dev/null
+++ b/vendor/pdalboost/boost/bind/bind_template.hpp
@@ -0,0 +1,345 @@
+//
+//  bind/bind_template.hpp
+//
+//  Do not include this header directly.
+//
+//  Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/bind/bind.html for documentation.
+//
+
+    typedef typename result_traits<R, F>::type result_type;
+
+    result_type operator()()
+    {
+        list0 a;
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    result_type operator()() const
+    {
+        list0 a;
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1> result_type operator()(A1 & a1)
+    {
+        list1<A1 &> a(a1);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1> result_type operator()(A1 & a1) const
+    {
+        list1<A1 &> a(a1);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
+ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+
+    template<class A1> result_type operator()(A1 const & a1)
+    {
+        list1<A1 const &> a(a1);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1> result_type operator()(A1 const & a1) const
+    {
+        list1<A1 const &> a(a1);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#endif
+
+    template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2)
+    {
+        list2<A1 &, A2 &> a(a1, a2);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const
+    {
+        list2<A1 &, A2 &> a(a1, a2);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
+ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+
+    template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2)
+    {
+        list2<A1 const &, A2 &> a(a1, a2);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2) const
+    {
+        list2<A1 const &, A2 &> a(a1, a2);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+
+    template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2)
+    {
+        list2<A1 &, A2 const &> a(a1, a2);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2) const
+    {
+        list2<A1 &, A2 const &> a(a1, a2);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+
+    template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2)
+    {
+        list2<A1 const &, A2 const &> a(a1, a2);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2) const
+    {
+        list2<A1 const &, A2 const &> a(a1, a2);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#endif
+
+    template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3)
+    {
+        list3<A1 &, A2 &, A3 &> a(a1, a2, a3);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const
+    {
+        list3<A1 &, A2 &, A3 &> a(a1, a2, a3);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
+ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+
+    template<class A1, class A2, class A3> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3)
+    {
+        list3<A1 const &, A2 const &, A3 const &> a(a1, a2, a3);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2, class A3> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3) const
+    {
+        list3<A1 const &, A2 const &, A3 const &> a(a1, a2, a3);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#endif
+
+    template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4)
+    {
+        list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const
+    {
+        list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
+ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+
+    template<class A1, class A2, class A3, class A4> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4)
+    {
+        list4<A1 const &, A2 const &, A3 const &, A4 const &> a(a1, a2, a3, a4);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2, class A3, class A4> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4) const
+    {
+        list4<A1 const &, A2 const &, A3 const &, A4 const &> a(a1, a2, a3, a4);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#endif
+
+    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5)
+    {
+        list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const
+    {
+        list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
+ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+
+    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5)
+    {
+        list5<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &> a(a1, a2, a3, a4, a5);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5) const
+    {
+        list5<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &> a(a1, a2, a3, a4, a5);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#endif
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6)
+    {
+        list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const
+    {
+        list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
+ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6)
+    {
+        list6<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &> a(a1, a2, a3, a4, a5, a6);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6) const
+    {
+        list6<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &> a(a1, a2, a3, a4, a5, a6);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#endif
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7)
+    {
+        list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const
+    {
+        list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
+ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7)
+    {
+        list7<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &> a(a1, a2, a3, a4, a5, a6, a7);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7) const
+    {
+        list7<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &> a(a1, a2, a3, a4, a5, a6, a7);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#endif
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8)
+    {
+        list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const
+    {
+        list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
+ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8)
+    {
+        list8<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &> a(a1, a2, a3, a4, a5, a6, a7, a8);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8) const
+    {
+        list8<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &> a(a1, a2, a3, a4, a5, a6, a7, a8);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#endif
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9)
+    {
+        list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const
+    {
+        list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
+ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9)
+    {
+        list9<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &, A9 const &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9) const
+    {
+        list9<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &, A9 const &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+#endif
+
+    template<class A> result_type eval(A & a)
+    {
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class A> result_type eval(A & a) const
+    {
+        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
+    }
+
+    template<class V> void accept(V & v) const
+    {
+#if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( __BORLANDC__ )
+
+        using pdalboost::visit_each;
+
+#endif
+        BOOST_BIND_VISIT_EACH(v, f_, 0);
+        l_.accept(v);
+    }
+
+    bool compare(this_type const & rhs) const
+    {
+        return ref_compare(f_, rhs.f_, 0) && l_ == rhs.l_;
+    }
+
+private:
+
+    F f_;
+    L l_;
diff --git a/vendor/pdalboost/boost/bind/mem_fn.hpp b/vendor/pdalboost/boost/bind/mem_fn.hpp
new file mode 100644
index 0000000..9d79c2b
--- /dev/null
+++ b/vendor/pdalboost/boost/bind/mem_fn.hpp
@@ -0,0 +1,389 @@
+#ifndef BOOST_BIND_MEM_FN_HPP_INCLUDED
+#define BOOST_BIND_MEM_FN_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  mem_fn.hpp - a generalization of std::mem_fun[_ref]
+//
+//  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+//  Copyright (c) 2001 David Abrahams
+//  Copyright (c) 2003-2005 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.
+//
+
+#include <boost/config.hpp>
+#include <boost/get_pointer.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace pdalboost
+{
+
+#if defined(BOOST_NO_VOID_RETURNS)
+
+#define BOOST_MEM_FN_CLASS_F , class F
+#define BOOST_MEM_FN_TYPEDEF(X)
+
+namespace _mfi // mem_fun_impl
+{
+
+template<class V> struct mf
+{
+
+#define BOOST_MEM_FN_RETURN return
+
+#define BOOST_MEM_FN_NAME(X) inner_##X
+#define BOOST_MEM_FN_CC
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#ifdef BOOST_MEM_FN_ENABLE_CDECL
+
+#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl
+#define BOOST_MEM_FN_CC __cdecl
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_STDCALL
+
+#define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall
+#define BOOST_MEM_FN_CC __stdcall
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
+
+#define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall
+#define BOOST_MEM_FN_CC __fastcall
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#undef BOOST_MEM_FN_RETURN
+
+}; // struct mf<V>
+
+template<> struct mf<void>
+{
+
+#define BOOST_MEM_FN_RETURN
+
+#define BOOST_MEM_FN_NAME(X) inner_##X
+#define BOOST_MEM_FN_CC
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#ifdef BOOST_MEM_FN_ENABLE_CDECL
+
+#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl
+#define BOOST_MEM_FN_CC __cdecl
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_STDCALL
+
+#define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall
+#define BOOST_MEM_FN_CC __stdcall
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
+
+#define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall
+#define BOOST_MEM_FN_CC __fastcall
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#undef BOOST_MEM_FN_RETURN
+
+}; // struct mf<void>
+
+#undef BOOST_MEM_FN_CLASS_F
+#undef BOOST_MEM_FN_TYPEDEF_F
+
+#define BOOST_MEM_FN_NAME(X) X
+#define BOOST_MEM_FN_NAME2(X) inner_##X
+#define BOOST_MEM_FN_CC
+
+#include <boost/bind/mem_fn_vw.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_NAME2
+#undef BOOST_MEM_FN_CC
+
+#ifdef BOOST_MEM_FN_ENABLE_CDECL
+
+#define BOOST_MEM_FN_NAME(X) X##_cdecl
+#define BOOST_MEM_FN_NAME2(X) inner_##X##_cdecl
+#define BOOST_MEM_FN_CC __cdecl
+
+#include <boost/bind/mem_fn_vw.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_NAME2
+#undef BOOST_MEM_FN_CC
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_STDCALL
+
+#define BOOST_MEM_FN_NAME(X) X##_stdcall
+#define BOOST_MEM_FN_NAME2(X) inner_##X##_stdcall
+#define BOOST_MEM_FN_CC __stdcall
+
+#include <boost/bind/mem_fn_vw.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_NAME2
+#undef BOOST_MEM_FN_CC
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
+
+#define BOOST_MEM_FN_NAME(X) X##_fastcall
+#define BOOST_MEM_FN_NAME2(X) inner_##X##_fastcall
+#define BOOST_MEM_FN_CC __fastcall
+
+#include <boost/bind/mem_fn_vw.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_NAME2
+#undef BOOST_MEM_FN_CC
+
+#endif
+
+} // namespace _mfi
+
+#else // #ifdef BOOST_NO_VOID_RETURNS
+
+#define BOOST_MEM_FN_CLASS_F
+#define BOOST_MEM_FN_TYPEDEF(X) typedef X;
+
+namespace _mfi
+{
+
+#define BOOST_MEM_FN_RETURN return
+
+#define BOOST_MEM_FN_NAME(X) X
+#define BOOST_MEM_FN_CC
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#ifdef BOOST_MEM_FN_ENABLE_CDECL
+
+#define BOOST_MEM_FN_NAME(X) X##_cdecl
+#define BOOST_MEM_FN_CC __cdecl
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_STDCALL
+
+#define BOOST_MEM_FN_NAME(X) X##_stdcall
+#define BOOST_MEM_FN_CC __stdcall
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
+
+#define BOOST_MEM_FN_NAME(X) X##_fastcall
+#define BOOST_MEM_FN_CC __fastcall
+
+#include <boost/bind/mem_fn_template.hpp>
+
+#undef BOOST_MEM_FN_CC
+#undef BOOST_MEM_FN_NAME
+
+#endif
+
+#undef BOOST_MEM_FN_RETURN
+
+} // namespace _mfi
+
+#undef BOOST_MEM_FN_CLASS_F
+#undef BOOST_MEM_FN_TYPEDEF
+
+#endif // #ifdef BOOST_NO_VOID_RETURNS
+
+#define BOOST_MEM_FN_NAME(X) X
+#define BOOST_MEM_FN_CC
+
+#include <boost/bind/mem_fn_cc.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_CC
+
+#ifdef BOOST_MEM_FN_ENABLE_CDECL
+
+#define BOOST_MEM_FN_NAME(X) X##_cdecl
+#define BOOST_MEM_FN_CC __cdecl
+
+#include <boost/bind/mem_fn_cc.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_CC
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_STDCALL
+
+#define BOOST_MEM_FN_NAME(X) X##_stdcall
+#define BOOST_MEM_FN_CC __stdcall
+
+#include <boost/bind/mem_fn_cc.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_CC
+
+#endif
+
+#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
+
+#define BOOST_MEM_FN_NAME(X) X##_fastcall
+#define BOOST_MEM_FN_CC __fastcall
+
+#include <boost/bind/mem_fn_cc.hpp>
+
+#undef BOOST_MEM_FN_NAME
+#undef BOOST_MEM_FN_CC
+
+#endif
+
+// data member support
+
+namespace _mfi
+{
+
+template<class R, class T> class dm
+{
+public:
+
+    typedef R const & result_type;
+    typedef T const * argument_type;
+
+private:
+    
+    typedef R (T::*F);
+    F f_;
+
+    template<class U> R const & call(U & u, T const *) const
+    {
+        return (u.*f_);
+    }
+
+    template<class U> R const & call(U & u, void const *) const
+    {
+        return (get_pointer(u)->*f_);
+    }
+
+public:
+    
+    explicit dm(F f): f_(f) {}
+
+    R & operator()(T * p) const
+    {
+        return (p->*f_);
+    }
+
+    R const & operator()(T const * p) const
+    {
+        return (p->*f_);
+    }
+
+    template<class U> R const & operator()(U const & u) const
+    {
+        return call(u, &u);
+    }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && !BOOST_WORKAROUND(__MWERKS__, < 0x3200)
+
+    R & operator()(T & t) const
+    {
+        return (t.*f_);
+    }
+
+    R const & operator()(T const & t) const
+    {
+        return (t.*f_);
+    }
+
+#endif
+
+    bool operator==(dm const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(dm const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+} // namespace _mfi
+
+template<class R, class T> _mfi::dm<R, T> mem_fn(R T::*f)
+{
+    return _mfi::dm<R, T>(f);
+}
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_BIND_MEM_FN_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/bind/mem_fn_cc.hpp b/vendor/pdalboost/boost/bind/mem_fn_cc.hpp
new file mode 100644
index 0000000..8b6ea0b
--- /dev/null
+++ b/vendor/pdalboost/boost/bind/mem_fn_cc.hpp
@@ -0,0 +1,103 @@
+//
+//  bind/mem_fn_cc.hpp - support for different calling conventions
+//
+//  Do not include this header directly.
+//
+//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.
+//
+
+template<class R, class T> _mfi::BOOST_MEM_FN_NAME(mf0)<R, T> mem_fn(R (BOOST_MEM_FN_CC T::*f) ())
+{
+    return _mfi::BOOST_MEM_FN_NAME(mf0)<R, T>(f);
+}
+
+template<class R, class T> _mfi::BOOST_MEM_FN_NAME(cmf0)<R, T> mem_fn(R (BOOST_MEM_FN_CC T::*f) () const)
+{
+    return _mfi::BOOST_MEM_FN_NAME(cmf0)<R, T>(f);
+}
+
+template<class R, class T, class A1> _mfi::BOOST_MEM_FN_NAME(mf1)<R, T, A1> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1))
+{
+    return _mfi::BOOST_MEM_FN_NAME(mf1)<R, T, A1>(f);
+}
+
+template<class R, class T, class A1> _mfi::BOOST_MEM_FN_NAME(cmf1)<R, T, A1> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1) const)
+{
+    return _mfi::BOOST_MEM_FN_NAME(cmf1)<R, T, A1>(f);
+}
+
+template<class R, class T, class A1, class A2> _mfi::BOOST_MEM_FN_NAME(mf2)<R, T, A1, A2> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2))
+{
+    return _mfi::BOOST_MEM_FN_NAME(mf2)<R, T, A1, A2>(f);
+}
+
+template<class R, class T, class A1, class A2> _mfi::BOOST_MEM_FN_NAME(cmf2)<R, T, A1, A2> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2) const)
+{
+    return _mfi::BOOST_MEM_FN_NAME(cmf2)<R, T, A1, A2>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3> _mfi::BOOST_MEM_FN_NAME(mf3)<R, T, A1, A2, A3> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3))
+{
+    return _mfi::BOOST_MEM_FN_NAME(mf3)<R, T, A1, A2, A3>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3> _mfi::BOOST_MEM_FN_NAME(cmf3)<R, T, A1, A2, A3> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3) const)
+{
+    return _mfi::BOOST_MEM_FN_NAME(cmf3)<R, T, A1, A2, A3>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4> _mfi::BOOST_MEM_FN_NAME(mf4)<R, T, A1, A2, A3, A4> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4))
+{
+    return _mfi::BOOST_MEM_FN_NAME(mf4)<R, T, A1, A2, A3, A4>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4> _mfi::BOOST_MEM_FN_NAME(cmf4)<R, T, A1, A2, A3, A4> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4) const)
+{
+    return _mfi::BOOST_MEM_FN_NAME(cmf4)<R, T, A1, A2, A3, A4>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5> _mfi::BOOST_MEM_FN_NAME(mf5)<R, T, A1, A2, A3, A4, A5> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5))
+{
+    return _mfi::BOOST_MEM_FN_NAME(mf5)<R, T, A1, A2, A3, A4, A5>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5> _mfi::BOOST_MEM_FN_NAME(cmf5)<R, T, A1, A2, A3, A4, A5> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5) const)
+{
+    return _mfi::BOOST_MEM_FN_NAME(cmf5)<R, T, A1, A2, A3, A4, A5>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> _mfi::BOOST_MEM_FN_NAME(mf6)<R, T, A1, A2, A3, A4, A5, A6> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6))
+{
+    return _mfi::BOOST_MEM_FN_NAME(mf6)<R, T, A1, A2, A3, A4, A5, A6>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> _mfi::BOOST_MEM_FN_NAME(cmf6)<R, T, A1, A2, A3, A4, A5, A6> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6) const)
+{
+    return _mfi::BOOST_MEM_FN_NAME(cmf6)<R, T, A1, A2, A3, A4, A5, A6>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> _mfi::BOOST_MEM_FN_NAME(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7))
+{
+    return _mfi::BOOST_MEM_FN_NAME(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> _mfi::BOOST_MEM_FN_NAME(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7) const)
+{
+    return _mfi::BOOST_MEM_FN_NAME(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> _mfi::BOOST_MEM_FN_NAME(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7, A8))
+{
+    return _mfi::BOOST_MEM_FN_NAME(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8>(f);
+}
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> _mfi::BOOST_MEM_FN_NAME(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7, A8) const)
+{
+    return _mfi::BOOST_MEM_FN_NAME(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8>(f);
+}
diff --git a/vendor/pdalboost/boost/bind/mem_fn_template.hpp b/vendor/pdalboost/boost/bind/mem_fn_template.hpp
new file mode 100644
index 0000000..b26d585
--- /dev/null
+++ b/vendor/pdalboost/boost/bind/mem_fn_template.hpp
@@ -0,0 +1,1047 @@
+//
+//  bind/mem_fn_template.hpp
+//
+//  Do not include this header directly
+//
+//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.
+//
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+# define BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+#endif
+
+// mf0
+
+template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf0)
+{
+public:
+
+    typedef R result_type;
+    typedef T * argument_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) ())
+    F f_;
+
+    template<class U> R call(U & u, T const *) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)();
+    }
+
+    template<class U> R call(U & u, void const *) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(mf0)(F f): f_(f) {}
+
+    R operator()(T * p) const
+    {
+        BOOST_MEM_FN_RETURN (p->*f_)();
+    }
+
+    template<class U> R operator()(U & u) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p);
+    }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+    template<class U> R operator()(U const & u) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p);
+    }
+
+#endif
+
+    R operator()(T & t) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)();
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(mf0) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(mf0) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// cmf0
+
+template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf0)
+{
+public:
+
+    typedef R result_type;
+    typedef T const * argument_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) () const)
+    F f_;
+
+    template<class U> R call(U & u, T const *) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)();
+    }
+
+    template<class U> R call(U & u, void const *) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)();
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(cmf0)(F f): f_(f) {}
+
+    template<class U> R operator()(U const & u) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p);
+    }
+
+    R operator()(T const & t) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)();
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(cmf0) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(cmf0) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// mf1
+
+template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf1)
+{
+public:
+
+    typedef R result_type;
+    typedef T * first_argument_type;
+    typedef A1 second_argument_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1))
+    F f_;
+
+    template<class U, class B1> R call(U & u, T const *, B1 & b1) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1);
+    }
+
+    template<class U, class B1> R call(U & u, void const *, B1 & b1) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(mf1)(F f): f_(f) {}
+
+    R operator()(T * p, A1 a1) const
+    {
+        BOOST_MEM_FN_RETURN (p->*f_)(a1);
+    }
+
+    template<class U> R operator()(U & u, A1 a1) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1);
+    }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+    template<class U> R operator()(U const & u, A1 a1) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1);
+    }
+
+#endif
+
+    R operator()(T & t, A1 a1) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(mf1) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(mf1) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// cmf1
+
+template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf1)
+{
+public:
+
+    typedef R result_type;
+    typedef T const * first_argument_type;
+    typedef A1 second_argument_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1) const)
+    F f_;
+
+    template<class U, class B1> R call(U & u, T const *, B1 & b1) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1);
+    }
+
+    template<class U, class B1> R call(U & u, void const *, B1 & b1) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1);
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(cmf1)(F f): f_(f) {}
+
+    template<class U> R operator()(U const & u, A1 a1) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1);
+    }
+
+    R operator()(T const & t, A1 a1) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(cmf1) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(cmf1) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// mf2
+
+template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf2)
+{
+public:
+
+    typedef R result_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2))
+    F f_;
+
+    template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);
+    }
+
+    template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(mf2)(F f): f_(f) {}
+
+    R operator()(T * p, A1 a1, A2 a2) const
+    {
+        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2);
+    }
+
+    template<class U> R operator()(U & u, A1 a1, A2 a2) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2);
+    }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+    template<class U> R operator()(U const & u, A1 a1, A2 a2) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2);
+    }
+
+#endif
+
+    R operator()(T & t, A1 a1, A2 a2) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(mf2) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(mf2) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// cmf2
+
+template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf2)
+{
+public:
+
+    typedef R result_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2) const)
+    F f_;
+
+    template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2);
+    }
+
+    template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2);
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(cmf2)(F f): f_(f) {}
+
+    template<class U> R operator()(U const & u, A1 a1, A2 a2) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2);
+    }
+
+    R operator()(T const & t, A1 a1, A2 a2) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(cmf2) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(cmf2) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// mf3
+
+template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf3)
+{
+public:
+
+    typedef R result_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3))
+    F f_;
+
+    template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);
+    }
+
+    template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(mf3)(F f): f_(f) {}
+
+    R operator()(T * p, A1 a1, A2 a2, A3 a3) const
+    {
+        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3);
+    }
+
+    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3);
+    }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3);
+    }
+
+#endif
+
+    R operator()(T & t, A1 a1, A2 a2, A3 a3) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(mf3) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(mf3) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// cmf3
+
+template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf3)
+{
+public:
+
+    typedef R result_type;
+
+private:
+
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const)
+    F f_;
+
+    template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3);
+    }
+
+    template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3);
+    }
+
+public:
+
+    explicit BOOST_MEM_FN_NAME(cmf3)(F f): f_(f) {}
+
+    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3);
+    }
+
+    R operator()(T const & t, A1 a1, A2 a2, A3 a3) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(cmf3) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(cmf3) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// mf4
+
+template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf4)
+{
+public:
+
+    typedef R result_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4))
+    F f_;
+
+    template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);
+    }
+
+    template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(mf4)(F f): f_(f) {}
+
+    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4) const
+    {
+        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4);
+    }
+
+    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4);
+    }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4);
+    }
+
+#endif
+
+    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(mf4) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(mf4) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// cmf4
+
+template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf4)
+{
+public:
+
+    typedef R result_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const)
+    F f_;
+
+    template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4);
+    }
+
+    template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4);
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(cmf4)(F f): f_(f) {}
+
+    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4);
+    }
+
+    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(cmf4) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(cmf4) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// mf5
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf5)
+{
+public:
+
+    typedef R result_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5))
+    F f_;
+
+    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);
+    }
+
+    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(mf5)(F f): f_(f) {}
+
+    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
+    {
+        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5);
+    }
+
+    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5);
+    }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5);
+    }
+
+#endif
+
+    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(mf5) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(mf5) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// cmf5
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf5)
+{
+public:
+
+    typedef R result_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const)
+    F f_;
+
+    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5);
+    }
+
+    template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5);
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(cmf5)(F f): f_(f) {}
+
+    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5);
+    }
+
+    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(cmf5) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(cmf5) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// mf6
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf6)
+{
+public:
+
+    typedef R result_type;
+
+private:
+
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6))
+    F f_;
+
+    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);
+    }
+
+    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);
+    }
+
+public:
+
+    explicit BOOST_MEM_FN_NAME(mf6)(F f): f_(f) {}
+
+    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
+    {
+        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6);
+    }
+
+    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6);
+    }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6);
+    }
+
+#endif
+
+    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(mf6) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(mf6) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// cmf6
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf6)
+{
+public:
+
+    typedef R result_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const)
+    F f_;
+
+    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6);
+    }
+
+    template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6);
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(cmf6)(F f): f_(f) {}
+
+    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6);
+    }
+
+    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(cmf6) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(cmf6) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// mf7
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf7)
+{
+public:
+
+    typedef R result_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7))
+    F f_;
+
+    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);
+    }
+
+    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(mf7)(F f): f_(f) {}
+
+    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
+    {
+        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7);
+    }
+
+    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7);
+    }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7);
+    }
+
+#endif
+
+    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(mf7) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(mf7) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// cmf7
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf7)
+{
+public:
+
+    typedef R result_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const)
+    F f_;
+
+    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7);
+    }
+
+    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7);
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(cmf7)(F f): f_(f) {}
+
+    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7);
+    }
+
+    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(cmf7) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(cmf7) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// mf8
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf8)
+{
+public:
+
+    typedef R result_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8))
+    F f_;
+
+    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
+    }
+
+    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(mf8)(F f): f_(f) {}
+
+    R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
+    {
+        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
+    }
+
+    template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8);
+    }
+
+#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
+
+    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8);
+    }
+
+#endif
+
+    R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(mf8) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(mf8) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+// cmf8
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf8)
+{
+public:
+
+    typedef R result_type;
+
+private:
+    
+    BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8) const)
+    F f_;
+
+    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
+    {
+        BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
+    }
+
+    template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const
+    {
+        BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8);
+    }
+
+public:
+    
+    explicit BOOST_MEM_FN_NAME(cmf8)(F f): f_(f) {}
+
+    R operator()(T const * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
+    {
+        BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
+    }
+
+    template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
+    {
+        U const * p = 0;
+        BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8);
+    }
+
+    R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const
+    {
+        BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8);
+    }
+
+    bool operator==(BOOST_MEM_FN_NAME(cmf8) const & rhs) const
+    {
+        return f_ == rhs.f_;
+    }
+
+    bool operator!=(BOOST_MEM_FN_NAME(cmf8) const & rhs) const
+    {
+        return f_ != rhs.f_;
+    }
+};
+
+#undef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS
diff --git a/vendor/pdalboost/boost/bind/mem_fn_vw.hpp b/vendor/pdalboost/boost/bind/mem_fn_vw.hpp
new file mode 100644
index 0000000..f3fc58d
--- /dev/null
+++ b/vendor/pdalboost/boost/bind/mem_fn_vw.hpp
@@ -0,0 +1,130 @@
+//
+//  bind/mem_fn_vw.hpp - void return helper wrappers
+//
+//  Do not include this header directly
+//
+//  Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.
+//
+
+template<class R, class T> struct BOOST_MEM_FN_NAME(mf0): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf0)<R, T, R (BOOST_MEM_FN_CC T::*) ()>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) ();
+    explicit BOOST_MEM_FN_NAME(mf0)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf0)<R, T, F>(f) {}
+};
+
+template<class R, class T> struct BOOST_MEM_FN_NAME(cmf0): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf0)<R, T, R (BOOST_MEM_FN_CC T::*) () const>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) () const;
+    explicit BOOST_MEM_FN_NAME(cmf0)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf0)<R, T, F>(f) {}
+};
+
+
+template<class R, class T, class A1> struct BOOST_MEM_FN_NAME(mf1): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf1)<R, T, A1, R (BOOST_MEM_FN_CC T::*) (A1)>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1);
+    explicit BOOST_MEM_FN_NAME(mf1)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf1)<R, T, A1, F>(f) {}
+};
+
+template<class R, class T, class A1> struct BOOST_MEM_FN_NAME(cmf1): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf1)<R, T, A1, R (BOOST_MEM_FN_CC T::*) (A1) const>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1) const;
+    explicit BOOST_MEM_FN_NAME(cmf1)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf1)<R, T, A1, F>(f) {}
+};
+
+
+template<class R, class T, class A1, class A2> struct BOOST_MEM_FN_NAME(mf2): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf2)<R, T, A1, A2, R (BOOST_MEM_FN_CC T::*) (A1, A2)>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2);
+    explicit BOOST_MEM_FN_NAME(mf2)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf2)<R, T, A1, A2, F>(f) {}
+};
+
+template<class R, class T, class A1, class A2> struct BOOST_MEM_FN_NAME(cmf2): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf2)<R, T, A1, A2, R (BOOST_MEM_FN_CC T::*) (A1, A2) const>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2) const;
+    explicit BOOST_MEM_FN_NAME(cmf2)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf2)<R, T, A1, A2, F>(f) {}
+};
+
+
+template<class R, class T, class A1, class A2, class A3> struct BOOST_MEM_FN_NAME(mf3): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf3)<R, T, A1, A2, A3, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3)>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3);
+    explicit BOOST_MEM_FN_NAME(mf3)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf3)<R, T, A1, A2, A3, F>(f) {}
+};
+
+template<class R, class T, class A1, class A2, class A3> struct BOOST_MEM_FN_NAME(cmf3): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf3)<R, T, A1, A2, A3, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3) const>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const;
+    explicit BOOST_MEM_FN_NAME(cmf3)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf3)<R, T, A1, A2, A3, F>(f) {}
+};
+
+
+template<class R, class T, class A1, class A2, class A3, class A4> struct BOOST_MEM_FN_NAME(mf4): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf4)<R, T, A1, A2, A3, A4, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4)>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4);
+    explicit BOOST_MEM_FN_NAME(mf4)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf4)<R, T, A1, A2, A3, A4, F>(f) {}
+};
+
+template<class R, class T, class A1, class A2, class A3, class A4> struct BOOST_MEM_FN_NAME(cmf4): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf4)<R, T, A1, A2, A3, A4, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4) const>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const;
+    explicit BOOST_MEM_FN_NAME(cmf4)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf4)<R, T, A1, A2, A3, A4, F>(f) {}
+};
+
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5> struct BOOST_MEM_FN_NAME(mf5): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf5)<R, T, A1, A2, A3, A4, A5, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5)>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5);
+    explicit BOOST_MEM_FN_NAME(mf5)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf5)<R, T, A1, A2, A3, A4, A5, F>(f) {}
+};
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5> struct BOOST_MEM_FN_NAME(cmf5): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf5)<R, T, A1, A2, A3, A4, A5, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5) const>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const;
+    explicit BOOST_MEM_FN_NAME(cmf5)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf5)<R, T, A1, A2, A3, A4, A5, F>(f) {}
+};
+
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> struct BOOST_MEM_FN_NAME(mf6): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf6)<R, T, A1, A2, A3, A4, A5, A6, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6)>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6);
+    explicit BOOST_MEM_FN_NAME(mf6)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf6)<R, T, A1, A2, A3, A4, A5, A6, F>(f) {}
+};
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> struct BOOST_MEM_FN_NAME(cmf6): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf6)<R, T, A1, A2, A3, A4, A5, A6, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6) const>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const;
+    explicit BOOST_MEM_FN_NAME(cmf6)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf6)<R, T, A1, A2, A3, A4, A5, A6, F>(f) {}
+};
+
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct BOOST_MEM_FN_NAME(mf7): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7)>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7);
+    explicit BOOST_MEM_FN_NAME(mf7)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7, F>(f) {}
+};
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct BOOST_MEM_FN_NAME(cmf7): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7) const>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const;
+    explicit BOOST_MEM_FN_NAME(cmf7)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7, F>(f) {}
+};
+
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct BOOST_MEM_FN_NAME(mf8): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7, A8)>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8);
+    explicit BOOST_MEM_FN_NAME(mf8)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, F>(f) {}
+};
+
+template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct BOOST_MEM_FN_NAME(cmf8): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7, A8) const>
+{
+    typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8) const;
+    explicit BOOST_MEM_FN_NAME(cmf8)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, F>(f) {}
+};
+
diff --git a/vendor/pdalboost/boost/bind/placeholders.hpp b/vendor/pdalboost/boost/bind/placeholders.hpp
new file mode 100644
index 0000000..809bfb5
--- /dev/null
+++ b/vendor/pdalboost/boost/bind/placeholders.hpp
@@ -0,0 +1,62 @@
+#ifndef BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED
+#define BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  bind/placeholders.hpp - _N definitions
+//
+//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  See http://www.boost.org/libs/bind/bind.html for documentation.
+//
+
+#include <boost/bind/arg.hpp>
+#include <boost/config.hpp>
+
+namespace pdalboost
+{
+
+namespace placeholders
+{
+
+#if defined(__BORLANDC__) || defined(__GNUC__) && (__GNUC__ < 4)
+
+inline pdalboost::arg<1> _1() { return pdalboost::arg<1>(); }
+inline pdalboost::arg<2> _2() { return pdalboost::arg<2>(); }
+inline pdalboost::arg<3> _3() { return pdalboost::arg<3>(); }
+inline pdalboost::arg<4> _4() { return pdalboost::arg<4>(); }
+inline pdalboost::arg<5> _5() { return pdalboost::arg<5>(); }
+inline pdalboost::arg<6> _6() { return pdalboost::arg<6>(); }
+inline pdalboost::arg<7> _7() { return pdalboost::arg<7>(); }
+inline pdalboost::arg<8> _8() { return pdalboost::arg<8>(); }
+inline pdalboost::arg<9> _9() { return pdalboost::arg<9>(); }
+
+#else
+
+BOOST_STATIC_CONSTEXPR pdalboost::arg<1> _1;
+BOOST_STATIC_CONSTEXPR pdalboost::arg<2> _2;
+BOOST_STATIC_CONSTEXPR pdalboost::arg<3> _3;
+BOOST_STATIC_CONSTEXPR pdalboost::arg<4> _4;
+BOOST_STATIC_CONSTEXPR pdalboost::arg<5> _5;
+BOOST_STATIC_CONSTEXPR pdalboost::arg<6> _6;
+BOOST_STATIC_CONSTEXPR pdalboost::arg<7> _7;
+BOOST_STATIC_CONSTEXPR pdalboost::arg<8> _8;
+BOOST_STATIC_CONSTEXPR pdalboost::arg<9> _9;
+
+#endif
+
+} // namespace placeholders
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/bind/storage.hpp b/vendor/pdalboost/boost/bind/storage.hpp
new file mode 100644
index 0000000..4ae5f47
--- /dev/null
+++ b/vendor/pdalboost/boost/bind/storage.hpp
@@ -0,0 +1,475 @@
+#ifndef BOOST_BIND_STORAGE_HPP_INCLUDED
+#define BOOST_BIND_STORAGE_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  bind/storage.hpp
+//
+//  boost/bind.hpp support header, optimized storage
+//
+//  Copyright (c) 2006 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  See http://www.boost.org/libs/bind/bind.html for documentation.
+//
+
+#include <boost/config.hpp>
+#include <boost/bind/arg.hpp>
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4512) // assignment operator could not be generated
+#endif
+
+namespace pdalboost
+{
+
+namespace _bi
+{
+
+// 1
+
+template<class A1> struct storage1
+{
+    explicit storage1( A1 a1 ): a1_( a1 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        BOOST_BIND_VISIT_EACH(v, a1_, 0);
+    }
+
+    A1 a1_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined( __BORLANDC__ )
+
+template<int I> struct storage1< pdalboost::arg<I> >
+{
+    explicit storage1( pdalboost::arg<I> ) {}
+
+    template<class V> void accept(V &) const { }
+
+    static pdalboost::arg<I> a1_() { return pdalboost::arg<I>(); }
+};
+
+template<int I> struct storage1< pdalboost::arg<I> (*) () >
+{
+    explicit storage1( pdalboost::arg<I> (*) () ) {}
+
+    template<class V> void accept(V &) const { }
+
+    static pdalboost::arg<I> a1_() { return pdalboost::arg<I>(); }
+};
+
+#endif
+
+// 2
+
+template<class A1, class A2> struct storage2: public storage1<A1>
+{
+    typedef storage1<A1> inherited;
+
+    storage2( A1 a1, A2 a2 ): storage1<A1>( a1 ), a2_( a2 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+        BOOST_BIND_VISIT_EACH(v, a2_, 0);
+    }
+
+    A2 a2_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, int I> struct storage2< A1, pdalboost::arg<I> >: public storage1<A1>
+{
+    typedef storage1<A1> inherited;
+
+    storage2( A1 a1, pdalboost::arg<I> ): storage1<A1>( a1 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a2_() { return pdalboost::arg<I>(); }
+};
+
+template<class A1, int I> struct storage2< A1, pdalboost::arg<I> (*) () >: public storage1<A1>
+{
+    typedef storage1<A1> inherited;
+
+    storage2( A1 a1, pdalboost::arg<I> (*) () ): storage1<A1>( a1 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a2_() { return pdalboost::arg<I>(); }
+};
+
+#endif
+
+// 3
+
+template<class A1, class A2, class A3> struct storage3: public storage2< A1, A2 >
+{
+    typedef storage2<A1, A2> inherited;
+
+    storage3( A1 a1, A2 a2, A3 a3 ): storage2<A1, A2>( a1, a2 ), a3_( a3 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+        BOOST_BIND_VISIT_EACH(v, a3_, 0);
+    }
+
+    A3 a3_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, class A2, int I> struct storage3< A1, A2, pdalboost::arg<I> >: public storage2< A1, A2 >
+{
+    typedef storage2<A1, A2> inherited;
+
+    storage3( A1 a1, A2 a2, pdalboost::arg<I> ): storage2<A1, A2>( a1, a2 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a3_() { return pdalboost::arg<I>(); }
+};
+
+template<class A1, class A2, int I> struct storage3< A1, A2, pdalboost::arg<I> (*) () >: public storage2< A1, A2 >
+{
+    typedef storage2<A1, A2> inherited;
+
+    storage3( A1 a1, A2 a2, pdalboost::arg<I> (*) () ): storage2<A1, A2>( a1, a2 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a3_() { return pdalboost::arg<I>(); }
+};
+
+#endif
+
+// 4
+
+template<class A1, class A2, class A3, class A4> struct storage4: public storage3< A1, A2, A3 >
+{
+    typedef storage3<A1, A2, A3> inherited;
+
+    storage4( A1 a1, A2 a2, A3 a3, A4 a4 ): storage3<A1, A2, A3>( a1, a2, a3 ), a4_( a4 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+        BOOST_BIND_VISIT_EACH(v, a4_, 0);
+    }
+
+    A4 a4_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, class A2, class A3, int I> struct storage4< A1, A2, A3, pdalboost::arg<I> >: public storage3< A1, A2, A3 >
+{
+    typedef storage3<A1, A2, A3> inherited;
+
+    storage4( A1 a1, A2 a2, A3 a3, pdalboost::arg<I> ): storage3<A1, A2, A3>( a1, a2, a3 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a4_() { return pdalboost::arg<I>(); }
+};
+
+template<class A1, class A2, class A3, int I> struct storage4< A1, A2, A3, pdalboost::arg<I> (*) () >: public storage3< A1, A2, A3 >
+{
+    typedef storage3<A1, A2, A3> inherited;
+
+    storage4( A1 a1, A2 a2, A3 a3, pdalboost::arg<I> (*) () ): storage3<A1, A2, A3>( a1, a2, a3 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a4_() { return pdalboost::arg<I>(); }
+};
+
+#endif
+
+// 5
+
+template<class A1, class A2, class A3, class A4, class A5> struct storage5: public storage4< A1, A2, A3, A4 >
+{
+    typedef storage4<A1, A2, A3, A4> inherited;
+
+    storage5( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ): storage4<A1, A2, A3, A4>( a1, a2, a3, a4 ), a5_( a5 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+        BOOST_BIND_VISIT_EACH(v, a5_, 0);
+    }
+
+    A5 a5_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, class A2, class A3, class A4, int I> struct storage5< A1, A2, A3, A4, pdalboost::arg<I> >: public storage4< A1, A2, A3, A4 >
+{
+    typedef storage4<A1, A2, A3, A4> inherited;
+
+    storage5( A1 a1, A2 a2, A3 a3, A4 a4, pdalboost::arg<I> ): storage4<A1, A2, A3, A4>( a1, a2, a3, a4 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a5_() { return pdalboost::arg<I>(); }
+};
+
+template<class A1, class A2, class A3, class A4, int I> struct storage5< A1, A2, A3, A4, pdalboost::arg<I> (*) () >: public storage4< A1, A2, A3, A4 >
+{
+    typedef storage4<A1, A2, A3, A4> inherited;
+
+    storage5( A1 a1, A2 a2, A3 a3, A4 a4, pdalboost::arg<I> (*) () ): storage4<A1, A2, A3, A4>( a1, a2, a3, a4 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a5_() { return pdalboost::arg<I>(); }
+};
+
+#endif
+
+// 6
+
+template<class A1, class A2, class A3, class A4, class A5, class A6> struct storage6: public storage5< A1, A2, A3, A4, A5 >
+{
+    typedef storage5<A1, A2, A3, A4, A5> inherited;
+
+    storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ): storage5<A1, A2, A3, A4, A5>( a1, a2, a3, a4, a5 ), a6_( a6 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+        BOOST_BIND_VISIT_EACH(v, a6_, 0);
+    }
+
+    A6 a6_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, class A2, class A3, class A4, class A5, int I> struct storage6< A1, A2, A3, A4, A5, pdalboost::arg<I> >: public storage5< A1, A2, A3, A4, A5 >
+{
+    typedef storage5<A1, A2, A3, A4, A5> inherited;
+
+    storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, pdalboost::arg<I> ): storage5<A1, A2, A3, A4, A5>( a1, a2, a3, a4, a5 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a6_() { return pdalboost::arg<I>(); }
+};
+
+template<class A1, class A2, class A3, class A4, class A5, int I> struct storage6< A1, A2, A3, A4, A5, pdalboost::arg<I> (*) () >: public storage5< A1, A2, A3, A4, A5 >
+{
+    typedef storage5<A1, A2, A3, A4, A5> inherited;
+
+    storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, pdalboost::arg<I> (*) () ): storage5<A1, A2, A3, A4, A5>( a1, a2, a3, a4, a5 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a6_() { return pdalboost::arg<I>(); }
+};
+
+#endif
+
+// 7
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct storage7: public storage6< A1, A2, A3, A4, A5, A6 >
+{
+    typedef storage6<A1, A2, A3, A4, A5, A6> inherited;
+
+    storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ): storage6<A1, A2, A3, A4, A5, A6>( a1, a2, a3, a4, a5, a6 ), a7_( a7 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+        BOOST_BIND_VISIT_EACH(v, a7_, 0);
+    }
+
+    A7 a7_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, int I> struct storage7< A1, A2, A3, A4, A5, A6, pdalboost::arg<I> >: public storage6< A1, A2, A3, A4, A5, A6 >
+{
+    typedef storage6<A1, A2, A3, A4, A5, A6> inherited;
+
+    storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, pdalboost::arg<I> ): storage6<A1, A2, A3, A4, A5, A6>( a1, a2, a3, a4, a5, a6 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a7_() { return pdalboost::arg<I>(); }
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, int I> struct storage7< A1, A2, A3, A4, A5, A6, pdalboost::arg<I> (*) () >: public storage6< A1, A2, A3, A4, A5, A6 >
+{
+    typedef storage6<A1, A2, A3, A4, A5, A6> inherited;
+
+    storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, pdalboost::arg<I> (*) () ): storage6<A1, A2, A3, A4, A5, A6>( a1, a2, a3, a4, a5, a6 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a7_() { return pdalboost::arg<I>(); }
+};
+
+#endif
+
+// 8
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct storage8: public storage7< A1, A2, A3, A4, A5, A6, A7 >
+{
+    typedef storage7<A1, A2, A3, A4, A5, A6, A7> inherited;
+
+    storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ): storage7<A1, A2, A3, A4, A5, A6, A7>( a1, a2, a3, a4, a5, a6, a7 ), a8_( a8 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+        BOOST_BIND_VISIT_EACH(v, a8_, 0);
+    }
+
+    A8 a8_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, int I> struct storage8< A1, A2, A3, A4, A5, A6, A7, pdalboost::arg<I> >: public storage7< A1, A2, A3, A4, A5, A6, A7 >
+{
+    typedef storage7<A1, A2, A3, A4, A5, A6, A7> inherited;
+
+    storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, pdalboost::arg<I> ): storage7<A1, A2, A3, A4, A5, A6, A7>( a1, a2, a3, a4, a5, a6, a7 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a8_() { return pdalboost::arg<I>(); }
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, int I> struct storage8< A1, A2, A3, A4, A5, A6, A7, pdalboost::arg<I> (*) () >: public storage7< A1, A2, A3, A4, A5, A6, A7 >
+{
+    typedef storage7<A1, A2, A3, A4, A5, A6, A7> inherited;
+
+    storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, pdalboost::arg<I> (*) () ): storage7<A1, A2, A3, A4, A5, A6, A7>( a1, a2, a3, a4, a5, a6, a7 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a8_() { return pdalboost::arg<I>(); }
+};
+
+#endif
+
+// 9
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> struct storage9: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 >
+{
+    typedef storage8<A1, A2, A3, A4, A5, A6, A7, A8> inherited;
+
+    storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ): storage8<A1, A2, A3, A4, A5, A6, A7, A8>( a1, a2, a3, a4, a5, a6, a7, a8 ), a9_( a9 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+        BOOST_BIND_VISIT_EACH(v, a9_, 0);
+    }
+
+    A9 a9_;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, int I> struct storage9< A1, A2, A3, A4, A5, A6, A7, A8, pdalboost::arg<I> >: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 >
+{
+    typedef storage8<A1, A2, A3, A4, A5, A6, A7, A8> inherited;
+
+    storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, pdalboost::arg<I> ): storage8<A1, A2, A3, A4, A5, A6, A7, A8>( a1, a2, a3, a4, a5, a6, a7, a8 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a9_() { return pdalboost::arg<I>(); }
+};
+
+template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, int I> struct storage9< A1, A2, A3, A4, A5, A6, A7, A8, pdalboost::arg<I> (*) () >: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 >
+{
+    typedef storage8<A1, A2, A3, A4, A5, A6, A7, A8> inherited;
+
+    storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, pdalboost::arg<I> (*) () ): storage8<A1, A2, A3, A4, A5, A6, A7, A8>( a1, a2, a3, a4, a5, a6, a7, a8 ) {}
+
+    template<class V> void accept(V & v) const
+    {
+        inherited::accept(v);
+    }
+
+    static pdalboost::arg<I> a9_() { return pdalboost::arg<I>(); }
+};
+
+#endif
+
+} // namespace _bi
+
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+# pragma warning(default: 4512) // assignment operator could not be generated
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_BIND_STORAGE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/call_traits.hpp b/vendor/pdalboost/boost/call_traits.hpp
new file mode 100644
index 0000000..2c1328e
--- /dev/null
+++ b/vendor/pdalboost/boost/call_traits.hpp
@@ -0,0 +1,20 @@
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/utility for most recent version including documentation.
+
+//  See boost/detail/call_traits.hpp
+//  for full copyright notices.
+
+#ifndef BOOST_CALL_TRAITS_HPP
+#define BOOST_CALL_TRAITS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#include <boost/config.hpp>
+#endif
+
+#include <boost/detail/call_traits.hpp>
+
+#endif // BOOST_CALL_TRAITS_HPP
diff --git a/vendor/pdalboost/boost/cerrno.hpp b/vendor/pdalboost/boost/cerrno.hpp
new file mode 100644
index 0000000..6f26698
--- /dev/null
+++ b/vendor/pdalboost/boost/cerrno.hpp
@@ -0,0 +1,331 @@
+//  Boost cerrno.hpp header  -------------------------------------------------//
+
+//  Copyright Beman Dawes 2005.
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/system
+
+#ifndef BOOST_CERRNO_HPP
+#define BOOST_CERRNO_HPP
+
+#include <cerrno>
+
+//  supply errno values likely to be missing, particularly on Windows
+
+#ifndef EAFNOSUPPORT
+#define EAFNOSUPPORT 9901
+#endif
+
+#ifndef EADDRINUSE
+#define EADDRINUSE 9902
+#endif
+
+#ifndef EADDRNOTAVAIL
+#define EADDRNOTAVAIL 9903
+#endif
+
+#ifndef EISCONN
+#define EISCONN 9904
+#endif
+
+#ifndef EBADMSG
+#define EBADMSG 9905
+#endif
+
+#ifndef ECONNABORTED
+#define ECONNABORTED 9906
+#endif
+
+#ifndef EALREADY
+#define EALREADY 9907
+#endif
+
+#ifndef ECONNREFUSED
+#define ECONNREFUSED 9908
+#endif
+
+#ifndef ECONNRESET
+#define ECONNRESET 9909
+#endif
+
+#ifndef EDESTADDRREQ
+#define EDESTADDRREQ 9910
+#endif
+
+#ifndef EHOSTUNREACH
+#define EHOSTUNREACH 9911
+#endif
+
+#ifndef EIDRM
+#define EIDRM 9912
+#endif
+
+#ifndef EMSGSIZE
+#define EMSGSIZE 9913
+#endif
+
+#ifndef ENETDOWN
+#define ENETDOWN 9914
+#endif
+
+#ifndef ENETRESET
+#define ENETRESET 9915
+#endif
+
+#ifndef ENETUNREACH
+#define ENETUNREACH 9916
+#endif
+
+#ifndef ENOBUFS
+#define ENOBUFS 9917
+#endif
+
+#ifndef ENOLINK
+#define ENOLINK 9918
+#endif
+
+#ifndef ENODATA
+#define ENODATA 9919
+#endif
+
+#ifndef ENOMSG
+#define ENOMSG 9920
+#endif
+
+#ifndef ENOPROTOOPT
+#define ENOPROTOOPT 9921
+#endif
+
+#ifndef ENOSR
+#define ENOSR 9922
+#endif
+
+#ifndef ENOTSOCK
+#define ENOTSOCK 9923
+#endif
+
+#ifndef ENOSTR
+#define ENOSTR 9924
+#endif
+
+#ifndef ENOTCONN
+#define ENOTCONN 9925
+#endif
+
+#ifndef ENOTSUP
+#define ENOTSUP 9926
+#endif
+
+#ifndef ECANCELED
+#define ECANCELED 9927
+#endif
+
+#ifndef EINPROGRESS
+#define EINPROGRESS 9928
+#endif
+
+#ifndef EOPNOTSUPP
+#define EOPNOTSUPP 9929
+#endif
+
+#ifndef EWOULDBLOCK
+#define EWOULDBLOCK 9930
+#endif
+
+#ifndef EOWNERDEAD
+#define EOWNERDEAD  9931
+#endif
+
+#ifndef EPROTO
+#define EPROTO 9932
+#endif
+
+#ifndef EPROTONOSUPPORT
+#define EPROTONOSUPPORT 9933
+#endif
+
+#ifndef ENOTRECOVERABLE
+#define ENOTRECOVERABLE 9934
+#endif
+
+#ifndef ETIME
+#define ETIME 9935
+#endif
+
+#ifndef ETXTBSY
+#define ETXTBSY 9936
+#endif
+
+#ifndef ETIMEDOUT
+#define ETIMEDOUT 9938
+#endif
+
+#ifndef ELOOP
+#define ELOOP 9939
+#endif
+
+#ifndef EOVERFLOW
+#define EOVERFLOW 9940
+#endif
+
+#ifndef EPROTOTYPE
+#define EPROTOTYPE 9941
+#endif
+
+#ifndef ENOSYS
+#define ENOSYS 9942
+#endif
+
+#ifndef EINVAL
+#define EINVAL 9943
+#endif
+
+#ifndef ERANGE
+#define ERANGE 9944
+#endif
+
+#ifndef EILSEQ
+#define EILSEQ 9945
+#endif
+
+//  Windows Mobile doesn't appear to define these:
+
+#ifndef E2BIG
+#define E2BIG 9946
+#endif
+
+#ifndef EDOM
+#define EDOM 9947
+#endif
+
+#ifndef EFAULT
+#define EFAULT 9948
+#endif
+
+#ifndef EBADF
+#define EBADF 9949
+#endif
+
+#ifndef EPIPE
+#define EPIPE 9950
+#endif
+
+#ifndef EXDEV
+#define EXDEV 9951
+#endif
+
+#ifndef EBUSY
+#define EBUSY 9952
+#endif
+
+#ifndef ENOTEMPTY
+#define ENOTEMPTY 9953
+#endif
+
+#ifndef ENOEXEC
+#define ENOEXEC 9954
+#endif
+
+#ifndef EEXIST
+#define EEXIST 9955
+#endif
+
+#ifndef EFBIG
+#define EFBIG 9956
+#endif
+
+#ifndef ENAMETOOLONG
+#define ENAMETOOLONG 9957
+#endif
+
+#ifndef ENOTTY
+#define ENOTTY 9958
+#endif
+
+#ifndef EINTR
+#define EINTR 9959
+#endif
+
+#ifndef ESPIPE
+#define ESPIPE 9960
+#endif
+
+#ifndef EIO
+#define EIO 9961
+#endif
+
+#ifndef EISDIR
+#define EISDIR 9962
+#endif
+
+#ifndef ECHILD
+#define ECHILD 9963
+#endif
+
+#ifndef ENOLCK
+#define ENOLCK 9964
+#endif
+
+#ifndef ENOSPC
+#define ENOSPC 9965
+#endif
+
+#ifndef ENXIO
+#define ENXIO 9966
+#endif
+
+#ifndef ENODEV
+#define ENODEV 9967
+#endif
+
+#ifndef ENOENT
+#define ENOENT 9968
+#endif
+
+#ifndef ESRCH
+#define ESRCH 9969
+#endif
+
+#ifndef ENOTDIR
+#define ENOTDIR 9970
+#endif
+
+#ifndef ENOMEM
+#define ENOMEM 9971
+#endif
+
+#ifndef EPERM
+#define EPERM 9972
+#endif
+
+#ifndef EACCES
+#define EACCES 9973
+#endif
+
+#ifndef EROFS
+#define EROFS 9974
+#endif
+
+#ifndef EDEADLK
+#define EDEADLK 9975
+#endif
+
+#ifndef EAGAIN
+#define EAGAIN 9976
+#endif
+
+#ifndef ENFILE
+#define ENFILE 9977
+#endif
+
+#ifndef EMFILE
+#define EMFILE 9978
+#endif
+
+#ifndef EMLINK
+#define EMLINK 9979
+#endif
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/checked_delete.hpp b/vendor/pdalboost/boost/checked_delete.hpp
new file mode 100644
index 0000000..fb71c78
--- /dev/null
+++ b/vendor/pdalboost/boost/checked_delete.hpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#ifndef BOOST_CHECKED_DELETE_HPP
+#define BOOST_CHECKED_DELETE_HPP
+
+// The header file at this path is deprecated;
+// use boost/core/checked_delete.hpp instead.
+
+#include <boost/core/checked_delete.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/chrono/ceil.hpp b/vendor/pdalboost/boost/chrono/ceil.hpp
new file mode 100644
index 0000000..92a246d
--- /dev/null
+++ b/vendor/pdalboost/boost/chrono/ceil.hpp
@@ -0,0 +1,36 @@
+//  boost/chrono/round.hpp  ------------------------------------------------------------//
+
+//  (C) Copyright Howard Hinnant
+//  Copyright 2011 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/chrono for documentation.
+
+#ifndef BOOST_CHRONO_CEIL_HPP
+#define BOOST_CHRONO_CEIL_HPP
+
+#include <boost/chrono/duration.hpp>
+
+namespace pdalboost
+{
+  namespace chrono
+  {
+
+    /**
+     * rounds up
+     */
+    template <class To, class Rep, class Period>
+    To ceil(const duration<Rep, Period>& d)
+    {
+        To t = duration_cast<To>(d);
+        if (t < d)
+            ++t;
+        return t;
+    }
+
+  } // namespace chrono
+} // namespace pdalboost
+
+#endif
diff --git a/vendor/pdalboost/boost/chrono/chrono.hpp b/vendor/pdalboost/boost/chrono/chrono.hpp
new file mode 100644
index 0000000..ebc29d8
--- /dev/null
+++ b/vendor/pdalboost/boost/chrono/chrono.hpp
@@ -0,0 +1,15 @@
+//  chrono.hpp  --------------------------------------------------------------//
+
+//  Copyright 2009-2011 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_CHRONO_CHRONO_HPP
+#define BOOST_CHRONO_CHRONO_HPP
+
+#include <boost/chrono/duration.hpp>
+#include <boost/chrono/time_point.hpp>
+#include <boost/chrono/system_clocks.hpp>
+
+#endif // BOOST_CHRONO_CHRONO_HPP
diff --git a/vendor/pdalboost/boost/chrono/clock_string.hpp b/vendor/pdalboost/boost/chrono/clock_string.hpp
new file mode 100644
index 0000000..8ede1d8
--- /dev/null
+++ b/vendor/pdalboost/boost/chrono/clock_string.hpp
@@ -0,0 +1,25 @@
+//
+//  (C) Copyright 2010-2011 Vicente J. Botet Escriba
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+
+#ifndef BOOST_CHRONO_CLOCK_STRING_HPP
+#define BOOST_CHRONO_CLOCK_STRING_HPP
+
+#include <string>
+
+namespace pdalboost
+{
+  namespace chrono
+  {
+
+    template<class Clock, class CharT>
+    struct clock_string;
+
+  } // chrono
+
+} // boost
+
+#endif  // BOOST_CHRONO_CLOCK_STRING_HPP
diff --git a/vendor/pdalboost/boost/chrono/config.hpp b/vendor/pdalboost/boost/chrono/config.hpp
new file mode 100644
index 0000000..d91237d
--- /dev/null
+++ b/vendor/pdalboost/boost/chrono/config.hpp
@@ -0,0 +1,216 @@
+//  boost/chrono/config.hpp  -------------------------------------------------//
+
+//  Copyright Beman Dawes 2003, 2006, 2008
+//  Copyright 2009-2011 Vicente J. Botet Escriba
+//  Copyright (c) Microsoft Corporation 2014
+
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/chrono for documentation.
+
+#ifndef BOOST_CHRONO_CONFIG_HPP
+#define BOOST_CHRONO_CONFIG_HPP
+
+#include <boost/config.hpp>
+#include <boost/predef.h>
+
+#if !defined BOOST_CHRONO_VERSION
+#define BOOST_CHRONO_VERSION 1
+#else
+#if BOOST_CHRONO_VERSION!=1  && BOOST_CHRONO_VERSION!=2
+#error "BOOST_CHRONO_VERSION must be 1 or 2"
+#endif
+#endif
+
+#if defined(BOOST_CHRONO_SOURCE) && !defined(BOOST_USE_WINDOWS_H)
+#define BOOST_USE_WINDOWS_H
+#endif
+
+#if ! defined BOOST_CHRONO_PROVIDES_DATE_IO_FOR_SYSTEM_CLOCK_TIME_POINT \
+    && ! defined BOOST_CHRONO_DONT_PROVIDE_DATE_IO_FOR_SYSTEM_CLOCK_TIME_POINT
+
+# define BOOST_CHRONO_PROVIDES_DATE_IO_FOR_SYSTEM_CLOCK_TIME_POINT
+
+#endif
+
+//  BOOST_CHRONO_POSIX_API, BOOST_CHRONO_MAC_API, or BOOST_CHRONO_WINDOWS_API
+//  can be defined by the user to specify which API should be used
+
+#if defined(BOOST_CHRONO_WINDOWS_API)
+# warning Boost.Chrono will use the Windows API
+#elif defined(BOOST_CHRONO_MAC_API)
+# warning Boost.Chrono will use the Mac API
+#elif defined(BOOST_CHRONO_POSIX_API)
+# warning Boost.Chrono will use the POSIX API
+#endif
+
+# if defined( BOOST_CHRONO_WINDOWS_API ) && defined( BOOST_CHRONO_POSIX_API )
+#   error both BOOST_CHRONO_WINDOWS_API and BOOST_CHRONO_POSIX_API are defined
+# elif defined( BOOST_CHRONO_WINDOWS_API ) && defined( BOOST_CHRONO_MAC_API )
+#   error both BOOST_CHRONO_WINDOWS_API and BOOST_CHRONO_MAC_API are defined
+# elif defined( BOOST_CHRONO_MAC_API ) && defined( BOOST_CHRONO_POSIX_API )
+#   error both BOOST_CHRONO_MAC_API and BOOST_CHRONO_POSIX_API are defined
+# elif !defined( BOOST_CHRONO_WINDOWS_API ) && !defined( BOOST_CHRONO_MAC_API ) && !defined( BOOST_CHRONO_POSIX_API )
+#   if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32))
+#     define BOOST_CHRONO_WINDOWS_API
+#   elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
+#     define BOOST_CHRONO_MAC_API
+#   else
+#     define BOOST_CHRONO_POSIX_API
+#   endif
+# endif
+
+# if defined( BOOST_CHRONO_WINDOWS_API )
+#   ifndef UNDER_CE
+#     define BOOST_CHRONO_HAS_PROCESS_CLOCKS
+#   endif
+#   define BOOST_CHRONO_HAS_CLOCK_STEADY
+#   if BOOST_PLAT_WINDOWS_DESKTOP
+#     define BOOST_CHRONO_HAS_THREAD_CLOCK
+#   endif
+#   define BOOST_CHRONO_THREAD_CLOCK_IS_STEADY true
+# endif
+
+# if defined( BOOST_CHRONO_MAC_API )
+#   define BOOST_CHRONO_HAS_PROCESS_CLOCKS
+#   define BOOST_CHRONO_HAS_CLOCK_STEADY
+#   define BOOST_CHRONO_HAS_THREAD_CLOCK
+#   define BOOST_CHRONO_THREAD_CLOCK_IS_STEADY true
+# endif
+
+# if defined( BOOST_CHRONO_POSIX_API )
+#   define BOOST_CHRONO_HAS_PROCESS_CLOCKS
+#   include <time.h>  //to check for CLOCK_REALTIME and CLOCK_MONOTONIC and _POSIX_THREAD_CPUTIME
+#   if defined(CLOCK_MONOTONIC)
+#      define BOOST_CHRONO_HAS_CLOCK_STEADY
+#   endif
+#   if defined(_POSIX_THREAD_CPUTIME) && !defined(BOOST_DISABLE_THREADS)
+#     define BOOST_CHRONO_HAS_THREAD_CLOCK
+#     define BOOST_CHRONO_THREAD_CLOCK_IS_STEADY true
+#   endif
+#   if defined(CLOCK_THREAD_CPUTIME_ID) && !defined(BOOST_DISABLE_THREADS)
+#     define BOOST_CHRONO_HAS_THREAD_CLOCK
+#     define BOOST_CHRONO_THREAD_CLOCK_IS_STEADY true
+#   endif
+#   if defined(sun) || defined(__sun)
+#     undef BOOST_CHRONO_HAS_THREAD_CLOCK
+#     undef BOOST_CHRONO_THREAD_CLOCK_IS_STEADY
+#   endif
+#   if (defined(__HP_aCC) || defined(__GNUC__)) && defined(__hpux)
+#     undef BOOST_CHRONO_HAS_THREAD_CLOCK
+#     undef BOOST_CHRONO_THREAD_CLOCK_IS_STEADY
+#   endif
+#   if defined(__VXWORKS__)
+#     undef BOOST_CHRONO_HAS_PROCESS_CLOCKS
+#   endif
+# endif
+
+#if defined(BOOST_CHRONO_THREAD_DISABLED) && defined(BOOST_CHRONO_HAS_THREAD_CLOCK)
+#undef BOOST_CHRONO_HAS_THREAD_CLOCK
+#undef BOOST_CHRONO_THREAD_CLOCK_IS_STEADY
+#endif
+
+// unicode support  ------------------------------//
+
+#if defined(BOOST_NO_CXX11_UNICODE_LITERALS) || defined(BOOST_NO_CXX11_CHAR16_T) || defined(BOOST_NO_CXX11_CHAR32_T)
+//~ #define BOOST_CHRONO_HAS_UNICODE_SUPPORT
+#else
+#define BOOST_CHRONO_HAS_UNICODE_SUPPORT 1
+#endif
+
+#ifndef BOOST_CHRONO_LIB_CONSTEXPR
+#if defined( BOOST_NO_CXX11_NUMERIC_LIMITS )
+#define BOOST_CHRONO_LIB_CONSTEXPR
+#elif defined(_LIBCPP_VERSION) &&  !defined(_LIBCPP_CONSTEXPR)
+  #define BOOST_CHRONO_LIB_CONSTEXPR
+#else
+  #define BOOST_CHRONO_LIB_CONSTEXPR BOOST_CONSTEXPR
+#endif
+#endif
+
+#if defined( BOOST_NO_CXX11_NUMERIC_LIMITS )
+#  define BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW throw()
+#else
+#ifdef BOOST_NO_CXX11_NOEXCEPT
+#  define BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW throw()
+#else
+#  define BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW noexcept
+#endif
+#endif
+
+#if defined BOOST_CHRONO_PROVIDE_HYBRID_ERROR_HANDLING \
+ && defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+#error "BOOST_CHRONO_PROVIDE_HYBRID_ERROR_HANDLING && BOOST_CHRONO_PROVIDE_HYBRID_ERROR_HANDLING defined"
+#endif
+
+#if defined BOOST_CHRONO_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0 \
+ && defined BOOST_CHRONO_DONT_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0
+#error "BOOST_CHRONO_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0 && BOOST_CHRONO_DONT_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0 defined"
+#endif
+
+#if ! defined BOOST_CHRONO_PROVIDE_HYBRID_ERROR_HANDLING \
+ && ! defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+#define BOOST_CHRONO_PROVIDE_HYBRID_ERROR_HANDLING
+#endif
+
+#if (BOOST_CHRONO_VERSION == 2)
+#if ! defined BOOST_CHRONO_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0 \
+ && ! defined BOOST_CHRONO_DONT_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0
+#define BOOST_CHRONO_DONT_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0
+#endif
+#endif
+
+#ifdef BOOST_CHRONO_HEADER_ONLY
+#define BOOST_CHRONO_INLINE inline
+#define BOOST_CHRONO_STATIC inline
+#define BOOST_CHRONO_DECL
+
+#else
+#define BOOST_CHRONO_INLINE
+#define BOOST_CHRONO_STATIC static
+
+//  enable dynamic linking on Windows  ---------------------------------------//
+
+// we need to import/export our code only if the user has specifically
+// asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost
+// libraries to be dynamically linked, or BOOST_CHRONO_DYN_LINK
+// if they want just this one to be dynamically liked:
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_CHRONO_DYN_LINK)
+// export if this is our own source, otherwise import:
+#ifdef BOOST_CHRONO_SOURCE
+# define BOOST_CHRONO_DECL BOOST_SYMBOL_EXPORT
+#else
+# define BOOST_CHRONO_DECL BOOST_SYMBOL_IMPORT
+#endif  // BOOST_CHRONO_SOURCE
+#endif  // DYN_LINK
+//
+// if BOOST_CHRONO_DECL isn't defined yet define it now:
+#ifndef BOOST_CHRONO_DECL
+#define BOOST_CHRONO_DECL
+#endif
+
+
+
+//  enable automatic library variant selection  ------------------------------//
+
+#if !defined(BOOST_CHRONO_SOURCE) && !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_CHRONO_NO_LIB)
+//
+// Set the name of our library; this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#define BOOST_LIB_NAME pdalboost_chrono
+//
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+//
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_CHRONO_DYN_LINK)
+#  define BOOST_DYN_LINK
+#endif
+//
+// And include the header that does the work:
+//
+#include <boost/config/auto_link.hpp>
+#endif  // auto-linking disabled
+#endif // BOOST_CHRONO_HEADER_ONLY
+#endif // BOOST_CHRONO_CONFIG_HPP
+
diff --git a/vendor/pdalboost/boost/chrono/detail/inlined/chrono.hpp b/vendor/pdalboost/boost/chrono/detail/inlined/chrono.hpp
new file mode 100644
index 0000000..0278843
--- /dev/null
+++ b/vendor/pdalboost/boost/chrono/detail/inlined/chrono.hpp
@@ -0,0 +1,44 @@
+//  chrono.cpp  --------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2008
+//  Copyright Vicente J. Botet Escriba 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_CHRONO_DETAIL_INLINED_CHRONO_HPP
+#define BOOST_CHRONO_DETAIL_INLINED_CHRONO_HPP
+
+#include <boost/version.hpp>
+#include <boost/chrono/chrono.hpp>
+#include <boost/system/system_error.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/chrono/detail/system.hpp>
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//                     Platform-specific Implementations                      //
+//                                                                            //
+//----------------------------------------------------------------------------//
+
+//----------------------------------------------------------------------------//
+//                                Windows                                     //
+//----------------------------------------------------------------------------//
+#if defined(BOOST_CHRONO_WINDOWS_API)
+#include <boost/chrono/detail/inlined/win/chrono.hpp>
+
+//----------------------------------------------------------------------------//
+//                                 Mac                                        //
+//----------------------------------------------------------------------------//
+#elif defined(BOOST_CHRONO_MAC_API)
+#include <boost/chrono/detail/inlined/mac/chrono.hpp>
+
+//----------------------------------------------------------------------------//
+//                                POSIX                                     //
+//----------------------------------------------------------------------------//
+#elif defined(BOOST_CHRONO_POSIX_API)
+#include <boost/chrono/detail/inlined/posix/chrono.hpp>
+
+#endif  // POSIX
+
+#endif
diff --git a/vendor/pdalboost/boost/chrono/detail/inlined/mac/chrono.hpp b/vendor/pdalboost/boost/chrono/detail/inlined/mac/chrono.hpp
new file mode 100644
index 0000000..0ccabcc
--- /dev/null
+++ b/vendor/pdalboost/boost/chrono/detail/inlined/mac/chrono.hpp
@@ -0,0 +1,241 @@
+//  mac/chrono.cpp  --------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2008
+//  Copyright 2009-2010 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+
+//----------------------------------------------------------------------------//
+//                                 Mac                                        //
+//----------------------------------------------------------------------------//
+
+#include <sys/time.h> //for gettimeofday and timeval
+#include <mach/mach_time.h>  // mach_absolute_time, mach_timebase_info_data_t
+
+namespace pdalboost
+{
+namespace chrono
+{
+
+// system_clock
+
+// gettimeofday is the most precise "system time" available on this platform.
+// It returns the number of microseconds since New Years 1970 in a struct called timeval
+// which has a field for seconds and a field for microseconds.
+//    Fill in the timeval and then convert that to the time_point
+system_clock::time_point
+system_clock::now() BOOST_NOEXCEPT
+{
+    timeval tv;
+    gettimeofday(&tv, 0);
+    return time_point(seconds(tv.tv_sec) + microseconds(tv.tv_usec));
+}
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+system_clock::time_point
+system_clock::now(system::error_code & ec)
+{
+    timeval tv;
+    gettimeofday(&tv, 0);
+    if (!BOOST_CHRONO_IS_THROWS(ec))
+    {
+        ec.clear();
+    }
+    return time_point(seconds(tv.tv_sec) + microseconds(tv.tv_usec));
+}
+#endif
+// Take advantage of the fact that on this platform time_t is nothing but
+//    an integral count of seconds since New Years 1970 (same epoch as timeval).
+//    Just get the duration out of the time_point and truncate it to seconds.
+time_t
+system_clock::to_time_t(const time_point& t) BOOST_NOEXCEPT
+{
+    return time_t(duration_cast<seconds>(t.time_since_epoch()).count());
+}
+
+// Just turn the time_t into a count of seconds and construct a time_point with it.
+system_clock::time_point
+system_clock::from_time_t(time_t t) BOOST_NOEXCEPT
+{
+    return system_clock::time_point(seconds(t));
+}
+
+namespace chrono_detail
+{
+
+// steady_clock
+
+// Note, in this implementation steady_clock and high_resolution_clock
+//   are the same clock.  They are both based on mach_absolute_time().
+//   mach_absolute_time() * MachInfo.numer / MachInfo.denom is the number of
+//   nanoseconds since the computer booted up.  MachInfo.numer and MachInfo.denom
+//   are run time constants supplied by the OS.  This clock has no relationship
+//   to the Gregorian calendar.  It's main use is as a high resolution timer.
+
+// MachInfo.numer / MachInfo.denom is often 1 on the latest equipment.  Specialize
+//   for that case as an optimization.
+BOOST_CHRONO_STATIC
+steady_clock::rep
+steady_simplified()
+{
+    return mach_absolute_time();
+}
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+BOOST_CHRONO_STATIC
+steady_clock::rep
+steady_simplified_ec(system::error_code & ec)
+{
+    if (!BOOST_CHRONO_IS_THROWS(ec))
+    {
+        ec.clear();
+    }
+    return mach_absolute_time();
+}
+#endif
+
+BOOST_CHRONO_STATIC
+double
+compute_steady_factor(kern_return_t& err)
+{
+    mach_timebase_info_data_t MachInfo;
+    err = mach_timebase_info(&MachInfo);
+    if ( err != 0  ) {
+        return 0;
+    }
+    return static_cast<double>(MachInfo.numer) / MachInfo.denom;
+}
+
+BOOST_CHRONO_STATIC
+steady_clock::rep
+steady_full()
+{
+    kern_return_t err;
+    const double factor = chrono_detail::compute_steady_factor(err);
+    if (err != 0)
+    {
+      BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+    }
+    return static_cast<steady_clock::rep>(mach_absolute_time() * factor);
+}
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+BOOST_CHRONO_STATIC
+steady_clock::rep
+steady_full_ec(system::error_code & ec)
+{
+    kern_return_t err;
+    const double factor = chrono_detail::compute_steady_factor(err);
+    if (err != 0)
+    {
+        if (BOOST_CHRONO_IS_THROWS(ec))
+        {
+            pdalboost::throw_exception(
+                    system::system_error(
+                            err,
+                            BOOST_CHRONO_SYSTEM_CATEGORY,
+                            "chrono::steady_clock" ));
+        }
+        else
+        {
+            ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY );
+            return steady_clock::rep();
+        }
+    }
+    if (!BOOST_CHRONO_IS_THROWS(ec))
+    {
+        ec.clear();
+    }
+    return static_cast<steady_clock::rep>(mach_absolute_time() * factor);
+}
+#endif
+
+typedef steady_clock::rep (*FP)();
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+typedef steady_clock::rep (*FP_ec)(system::error_code &);
+#endif
+
+BOOST_CHRONO_STATIC
+FP
+init_steady_clock(kern_return_t & err)
+{
+    mach_timebase_info_data_t MachInfo;
+    err = mach_timebase_info(&MachInfo);
+    if ( err != 0  )
+    {
+        return 0;
+    }
+
+    if (MachInfo.numer == MachInfo.denom)
+    {
+        return &chrono_detail::steady_simplified;
+    }
+    return &chrono_detail::steady_full;
+}
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+BOOST_CHRONO_STATIC
+FP_ec
+init_steady_clock_ec(kern_return_t & err)
+{
+    mach_timebase_info_data_t MachInfo;
+    err = mach_timebase_info(&MachInfo);
+    if ( err != 0  )
+    {
+        return 0;
+    }
+
+    if (MachInfo.numer == MachInfo.denom)
+    {
+        return &chrono_detail::steady_simplified_ec;
+    }
+    return &chrono_detail::steady_full_ec;
+}
+#endif
+}
+
+steady_clock::time_point
+steady_clock::now() BOOST_NOEXCEPT
+{
+    kern_return_t err;
+    chrono_detail::FP fp = chrono_detail::init_steady_clock(err);
+    if ( err != 0  )
+    {
+      BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+    }
+    return time_point(duration(fp()));
+}
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+steady_clock::time_point
+steady_clock::now(system::error_code & ec)
+{
+    kern_return_t err;
+    chrono_detail::FP_ec fp = chrono_detail::init_steady_clock_ec(err);
+    if ( err != 0  )
+    {
+        if (BOOST_CHRONO_IS_THROWS(ec))
+        {
+            pdalboost::throw_exception(
+                    system::system_error(
+                            err,
+                            BOOST_CHRONO_SYSTEM_CATEGORY,
+                            "chrono::steady_clock" ));
+        }
+        else
+        {
+            ec.assign( err, BOOST_CHRONO_SYSTEM_CATEGORY );
+            return time_point();
+        }
+    }
+    if (!BOOST_CHRONO_IS_THROWS(ec))
+    {
+        ec.clear();
+    }
+    return time_point(duration(fp(ec)));
+}
+#endif
+}  // namespace chrono
+}  // namespace pdalboost
diff --git a/vendor/pdalboost/boost/chrono/detail/inlined/posix/chrono.hpp b/vendor/pdalboost/boost/chrono/detail/inlined/posix/chrono.hpp
new file mode 100644
index 0000000..c4820df
--- /dev/null
+++ b/vendor/pdalboost/boost/chrono/detail/inlined/posix/chrono.hpp
@@ -0,0 +1,120 @@
+//  posix/chrono.cpp  --------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2008
+//  Copyright Vicente J. Botet Escriba 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//----------------------------------------------------------------------------//
+//                                POSIX                                     //
+//----------------------------------------------------------------------------//
+
+#include <time.h>  // for clock_gettime
+
+namespace pdalboost
+{
+namespace chrono
+{
+
+  system_clock::time_point system_clock::now() BOOST_NOEXCEPT
+  {
+    timespec ts;
+    if ( ::clock_gettime( CLOCK_REALTIME, &ts ) )
+    {
+      BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+    }
+
+    return time_point(duration(
+      static_cast<system_clock::rep>( ts.tv_sec ) * 1000000000 + ts.tv_nsec));
+  }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+  system_clock::time_point system_clock::now(system::error_code & ec)
+  {
+    timespec ts;
+    if ( ::clock_gettime( CLOCK_REALTIME, &ts ) )
+    {
+        if (BOOST_CHRONO_IS_THROWS(ec))
+        {
+            pdalboost::throw_exception(
+                    system::system_error( 
+                            errno, 
+                            BOOST_CHRONO_SYSTEM_CATEGORY, 
+                            "chrono::system_clock" ));
+        }
+        else
+        {
+            ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY );
+            return time_point();
+        }
+    }
+
+    if (!BOOST_CHRONO_IS_THROWS(ec)) 
+    {
+        ec.clear();
+    }
+    return time_point(duration(
+      static_cast<system_clock::rep>( ts.tv_sec ) * 1000000000 + ts.tv_nsec));
+  }
+#endif
+
+  std::time_t system_clock::to_time_t(const system_clock::time_point& t) BOOST_NOEXCEPT
+  {
+      return static_cast<std::time_t>( t.time_since_epoch().count() / 1000000000 );
+  }
+
+  system_clock::time_point system_clock::from_time_t(std::time_t t) BOOST_NOEXCEPT
+  {
+      return time_point(duration(static_cast<system_clock::rep>(t) * 1000000000));
+  }
+
+#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY
+
+  steady_clock::time_point steady_clock::now() BOOST_NOEXCEPT
+  {
+    timespec ts;
+    if ( ::clock_gettime( CLOCK_MONOTONIC, &ts ) )
+    {
+      BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
+    }
+
+    return time_point(duration(
+      static_cast<steady_clock::rep>( ts.tv_sec ) * 1000000000 + ts.tv_nsec));
+  }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+  steady_clock::time_point steady_clock::now(system::error_code & ec)
+  {
+    timespec ts;
+    if ( ::clock_gettime( CLOCK_MONOTONIC, &ts ) )
+    {
+        if (BOOST_CHRONO_IS_THROWS(ec))
+        {
+            pdalboost::throw_exception(
+                    system::system_error( 
+                            errno, 
+                            BOOST_CHRONO_SYSTEM_CATEGORY, 
+                            "chrono::steady_clock" ));
+        }
+        else
+        {
+            ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY );
+            return time_point();
+        }
+    }
+
+    if (!BOOST_CHRONO_IS_THROWS(ec)) 
+    {
+        ec.clear();
+    }
+    return time_point(duration(
+      static_cast<steady_clock::rep>( ts.tv_sec ) * 1000000000 + ts.tv_nsec));
+  }
+#endif
+#endif
+
+}  // namespace chrono
+}  // namespace pdalboost
+
+
diff --git a/vendor/pdalboost/boost/chrono/detail/inlined/win/chrono.hpp b/vendor/pdalboost/boost/chrono/detail/inlined/win/chrono.hpp
new file mode 100644
index 0000000..4ef16a7
--- /dev/null
+++ b/vendor/pdalboost/boost/chrono/detail/inlined/win/chrono.hpp
@@ -0,0 +1,149 @@
+//  win/chrono.cpp  --------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2008
+//  Copyright 2009-2010 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//----------------------------------------------------------------------------//
+//                                Windows                                     //
+//----------------------------------------------------------------------------//
+#ifndef BOOST_CHRONO_DETAIL_INLINED_WIN_CHRONO_HPP
+#define BOOST_CHRONO_DETAIL_INLINED_WIN_CHRONO_HPP
+
+#include <boost/detail/winapi/time.hpp>
+#include <boost/detail/winapi/timers.hpp>
+#include <boost/detail/winapi/GetLastError.hpp>
+
+namespace pdalboost
+{
+namespace chrono
+{
+namespace chrono_detail
+{
+
+  BOOST_CHRONO_INLINE double get_nanosecs_per_tic() BOOST_NOEXCEPT
+  {
+      pdalboost::detail::winapi::LARGE_INTEGER_ freq;
+      if ( !pdalboost::detail::winapi::QueryPerformanceFrequency( &freq ) )
+          return 0.0L;
+      return double(1000000000.0L / freq.QuadPart);
+  }
+
+}
+
+  steady_clock::time_point steady_clock::now() BOOST_NOEXCEPT
+  {
+    double nanosecs_per_tic = chrono_detail::get_nanosecs_per_tic();
+
+    pdalboost::detail::winapi::LARGE_INTEGER_ pcount;
+    if ( nanosecs_per_tic <= 0.0L )
+    {
+      BOOST_ASSERT(0 && "Boost::Chrono - get_nanosecs_per_tic Internal Error");
+      return steady_clock::time_point();
+    }
+    unsigned times=0;
+    while ( ! pdalboost::detail::winapi::QueryPerformanceCounter( &pcount ) )
+    {
+      if ( ++times > 3 )
+      {
+        BOOST_ASSERT(0 && "Boost::Chrono - QueryPerformanceCounter Internal Error");
+        return steady_clock::time_point();
+      }
+    }
+
+    return steady_clock::time_point(steady_clock::duration(
+      static_cast<steady_clock::rep>((nanosecs_per_tic) * pcount.QuadPart)));
+  }
+
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+  steady_clock::time_point steady_clock::now( system::error_code & ec )
+  {
+    double nanosecs_per_tic = chrono_detail::get_nanosecs_per_tic();
+
+    pdalboost::detail::winapi::LARGE_INTEGER_ pcount;
+    if ( (nanosecs_per_tic <= 0.0L)
+            || (!pdalboost::detail::winapi::QueryPerformanceCounter( &pcount )) )
+    {
+        pdalboost::detail::winapi::DWORD_ cause =
+            ((nanosecs_per_tic <= 0.0L)
+                    ? ERROR_NOT_SUPPORTED
+                    : pdalboost::detail::winapi::GetLastError());
+        if (BOOST_CHRONO_IS_THROWS(ec)) {
+            pdalboost::throw_exception(
+                    system::system_error(
+                            cause,
+                            BOOST_CHRONO_SYSTEM_CATEGORY,
+                            "chrono::steady_clock" ));
+        }
+        else
+        {
+            ec.assign( cause, BOOST_CHRONO_SYSTEM_CATEGORY );
+            return steady_clock::time_point(duration(0));
+        }
+    }
+
+    if (!BOOST_CHRONO_IS_THROWS(ec))
+    {
+        ec.clear();
+    }
+    return time_point(duration(
+      static_cast<steady_clock::rep>(nanosecs_per_tic * pcount.QuadPart)));
+  }
+#endif
+
+  BOOST_CHRONO_INLINE
+  system_clock::time_point system_clock::now() BOOST_NOEXCEPT
+  {
+    pdalboost::detail::winapi::FILETIME_ ft;
+    pdalboost::detail::winapi::GetSystemTimeAsFileTime( &ft );  // never fails
+    return system_clock::time_point(
+      system_clock::duration(
+        ((static_cast<__int64>( ft.dwHighDateTime ) << 32) | ft.dwLowDateTime)
+       - 116444736000000000LL
+       //- (134775LL*864000000000LL)
+      )
+    );
+  }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+  BOOST_CHRONO_INLINE
+  system_clock::time_point system_clock::now( system::error_code & ec )
+  {
+    pdalboost::detail::winapi::FILETIME_ ft;
+    pdalboost::detail::winapi::GetSystemTimeAsFileTime( &ft );  // never fails
+    if (!BOOST_CHRONO_IS_THROWS(ec))
+    {
+        ec.clear();
+    }
+    return system_clock::time_point(
+      system_clock::duration(
+       ((static_cast<__int64>( ft.dwHighDateTime ) << 32) | ft.dwLowDateTime)
+       - 116444736000000000LL
+       //- (134775LL*864000000000LL)
+       ));
+  }
+#endif
+
+  BOOST_CHRONO_INLINE
+  std::time_t system_clock::to_time_t(const system_clock::time_point& t) BOOST_NOEXCEPT
+  {
+      __int64 temp = t.time_since_epoch().count();
+      temp /= 10000000;
+      return static_cast<std::time_t>( temp );
+  }
+
+  BOOST_CHRONO_INLINE
+  system_clock::time_point system_clock::from_time_t(std::time_t t) BOOST_NOEXCEPT
+  {
+      __int64 temp = t;
+      temp *= 10000000;
+      return time_point(duration(temp));
+  }
+
+}  // namespace chrono
+}  // namespace pdalboost
+
+#endif
diff --git a/vendor/pdalboost/boost/chrono/detail/is_evenly_divisible_by.hpp b/vendor/pdalboost/boost/chrono/detail/is_evenly_divisible_by.hpp
new file mode 100644
index 0000000..fdc7dd1
--- /dev/null
+++ b/vendor/pdalboost/boost/chrono/detail/is_evenly_divisible_by.hpp
@@ -0,0 +1,31 @@
+//  is_evenly_divisible_by.hpp  --------------------------------------------------------------//
+
+//  Copyright 2009-2010 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_CHRONO_DETAIL_IS_EVENLY_DIVISIBLE_BY_HPP
+#define BOOST_CHRONO_DETAIL_IS_EVENLY_DIVISIBLE_BY_HPP
+
+#include <boost/chrono/config.hpp>
+
+#include <boost/mpl/logical.hpp>
+#include <boost/ratio/detail/overflow_helpers.hpp>
+
+namespace pdalboost {
+namespace chrono {
+namespace chrono_detail {
+
+//  template <class R1, class R2>
+//  struct is_evenly_divisible_by : public pdalboost::mpl::bool_ < ratio_divide<R1, R2>::type::den == 1 >
+//  {};
+  template <class R1, class R2>
+  struct is_evenly_divisible_by : public pdalboost::ratio_detail::is_evenly_divisible_by<R1, R2>
+  {};
+
+} // namespace chrono_detail
+} // namespace detail
+} // namespace chrono
+
+#endif // BOOST_CHRONO_DETAIL_IS_EVENLY_DIVISIBLE_BY_HPP
diff --git a/vendor/pdalboost/boost/chrono/detail/static_assert.hpp b/vendor/pdalboost/boost/chrono/detail/static_assert.hpp
new file mode 100644
index 0000000..be89627
--- /dev/null
+++ b/vendor/pdalboost/boost/chrono/detail/static_assert.hpp
@@ -0,0 +1,30 @@
+//  static_assert.hpp  --------------------------------------------------------------//
+
+//  Copyright 2009-2010 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_CHRONO_DETAIL_STATIC_ASSERT_HPP
+#define BOOST_CHRONO_DETAIL_STATIC_ASSERT_HPP
+
+#include <boost/chrono/config.hpp>
+
+#ifndef BOOST_NO_CXX11_STATIC_ASSERT
+#define BOOST_CHRONO_STATIC_ASSERT(CND, MSG, TYPES) static_assert(CND,MSG)
+#elif defined(BOOST_CHRONO_USES_STATIC_ASSERT)
+#include <boost/static_assert.hpp>
+#define BOOST_CHRONO_STATIC_ASSERT(CND, MSG, TYPES) BOOST_STATIC_ASSERT(CND)
+#elif defined(BOOST_CHRONO_USES_MPL_ASSERT)
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#define BOOST_CHRONO_STATIC_ASSERT(CND, MSG, TYPES)                                 \
+    BOOST_MPL_ASSERT_MSG(pdalboost::mpl::bool_< (CND) >::type::value, MSG, TYPES)
+#else
+//~ #elif defined(BOOST_CHRONO_USES_ARRAY_ASSERT)
+#define BOOST_CHRONO_STATIC_ASSERT(CND, MSG, TYPES) static char BOOST_JOIN(boost_chrono_test_,__LINE__)[(CND)?1:-1]
+//~ #define BOOST_CHRONO_STATIC_ASSERT(CND, MSG, TYPES)
+#endif
+
+#endif // BOOST_CHRONO_DETAIL_STATIC_ASSERT_HPP
diff --git a/vendor/pdalboost/boost/chrono/detail/system.hpp b/vendor/pdalboost/boost/chrono/detail/system.hpp
new file mode 100644
index 0000000..ac65869
--- /dev/null
+++ b/vendor/pdalboost/boost/chrono/detail/system.hpp
@@ -0,0 +1,29 @@
+//  Copyright 2009-2010 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_CHRONO_DETAIL_SYSTEM_HPP
+#define BOOST_CHRONO_DETAIL_SYSTEM_HPP
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+
+#include <boost/version.hpp>
+#include <boost/system/error_code.hpp>
+
+#if ((BOOST_VERSION / 100000) < 2) && ((BOOST_VERSION / 100 % 1000) < 44)
+#define BOOST_CHRONO_SYSTEM_CATEGORY pdalboost::system::system_category
+#else
+#define BOOST_CHRONO_SYSTEM_CATEGORY pdalboost::system::system_category()
+#endif
+
+#ifdef BOOST_SYSTEM_NO_DEPRECATED
+#define BOOST_CHRONO_THROWS pdalboost::throws()
+#define BOOST_CHRONO_IS_THROWS(EC) (&EC==&pdalboost::throws())
+#else
+#define BOOST_CHRONO_THROWS pdalboost::system::throws
+#define BOOST_CHRONO_IS_THROWS(EC) (&EC==&pdalboost::system::throws)
+#endif
+
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/chrono/duration.hpp b/vendor/pdalboost/boost/chrono/duration.hpp
new file mode 100644
index 0000000..9828b1d
--- /dev/null
+++ b/vendor/pdalboost/boost/chrono/duration.hpp
@@ -0,0 +1,800 @@
+//  duration.hpp  --------------------------------------------------------------//
+
+//  Copyright 2008 Howard Hinnant
+//  Copyright 2008 Beman Dawes
+//  Copyright 2009-2011 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+/*
+
+This code was derived by Beman Dawes from Howard Hinnant's time2_demo prototype.
+Many thanks to Howard for making his code available under the Boost license.
+The original code was modified to conform to Boost conventions and to section
+20.9 Time utilities [time] of the C++ committee's working paper N2798.
+See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2798.pdf.
+
+time2_demo contained this comment:
+
+    Much thanks to Andrei Alexandrescu,
+                   Walter Brown,
+                   Peter Dimov,
+                   Jeff Garland,
+                   Terry Golubiewski,
+                   Daniel Krugler,
+                   Anthony Williams.
+*/
+
+
+#ifndef BOOST_CHRONO_DURATION_HPP
+#define BOOST_CHRONO_DURATION_HPP
+
+#include <boost/chrono/config.hpp>
+#include <boost/chrono/detail/static_assert.hpp>
+
+#include <climits>
+#include <limits>
+
+
+#include <boost/mpl/logical.hpp>
+#include <boost/ratio/ratio.hpp>
+#include <boost/type_traits/common_type.hpp>
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_floating_point.hpp>
+#include <boost/type_traits/is_unsigned.hpp>
+#include <boost/chrono/detail/is_evenly_divisible_by.hpp>
+
+#include <boost/cstdint.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/integer_traits.hpp>
+
+#if !defined(BOOST_NO_CXX11_STATIC_ASSERT) || !defined(BOOST_CHRONO_USES_MPL_ASSERT)
+#define BOOST_CHRONO_A_DURATION_REPRESENTATION_CAN_NOT_BE_A_DURATION        "A duration representation can not be a duration"
+#define BOOST_CHRONO_SECOND_TEMPLATE_PARAMETER_OF_DURATION_MUST_BE_A_STD_RATIO "Second template parameter of duration must be a pdalboost::ratio"
+#define BOOST_CHRONO_DURATION_PERIOD_MUST_BE_POSITIVE "duration period must be positive"
+#define BOOST_CHRONO_SECOND_TEMPLATE_PARAMETER_OF_TIME_POINT_MUST_BE_A_BOOST_CHRONO_DURATION "Second template parameter of time_point must be a pdalboost::chrono::duration"
+#endif
+
+#ifndef BOOST_CHRONO_HEADER_ONLY
+// this must occur after all of the includes and before any code appears:
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+#endif
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//                        20.9 Time utilities [time]                          //
+//                                 synopsis                                   //
+//                                                                            //
+//----------------------------------------------------------------------------//
+
+namespace pdalboost {
+namespace chrono {
+
+    template <class Rep, class Period = ratio<1> >
+    class duration;
+
+    namespace detail
+    {
+    template <class T>
+      struct is_duration
+        : pdalboost::false_type {};
+
+    template <class Rep, class Period>
+      struct is_duration<duration<Rep, Period> >
+        : pdalboost::true_type  {};
+
+    template <class Duration, class Rep, bool = is_duration<Rep>::value>
+    struct duration_divide_result
+    {
+    };
+
+    template <class Duration, class Rep2,
+        bool = (
+                    ((pdalboost::is_convertible<typename Duration::rep,
+                        typename common_type<typename Duration::rep, Rep2>::type>::value))
+                &&  ((pdalboost::is_convertible<Rep2,
+                        typename common_type<typename Duration::rep, Rep2>::type>::value))
+                )
+        >
+    struct duration_divide_imp
+    {
+    };
+
+    template <class Rep1, class Period, class Rep2>
+    struct duration_divide_imp<duration<Rep1, Period>, Rep2, true>
+    {
+        typedef duration<typename common_type<Rep1, Rep2>::type, Period> type;
+    };
+
+    template <class Rep1, class Period, class Rep2>
+    struct duration_divide_result<duration<Rep1, Period>, Rep2, false>
+        : duration_divide_imp<duration<Rep1, Period>, Rep2>
+    {
+    };
+
+///
+    template <class Rep, class Duration, bool = is_duration<Rep>::value>
+    struct duration_divide_result2
+    {
+    };
+
+    template <class Rep, class Duration,
+        bool = (
+                    ((pdalboost::is_convertible<typename Duration::rep,
+                        typename common_type<typename Duration::rep, Rep>::type>::value))
+                &&  ((pdalboost::is_convertible<Rep,
+                        typename common_type<typename Duration::rep, Rep>::type>::value))
+                )
+        >
+    struct duration_divide_imp2
+    {
+    };
+
+    template <class Rep1, class Rep2, class Period >
+    struct duration_divide_imp2<Rep1, duration<Rep2, Period>, true>
+    {
+        //typedef typename common_type<Rep1, Rep2>::type type;
+        typedef double type;
+    };
+
+    template <class Rep1, class Rep2, class Period >
+    struct duration_divide_result2<Rep1, duration<Rep2, Period>, false>
+        : duration_divide_imp2<Rep1, duration<Rep2, Period> >
+    {
+    };
+
+///
+    template <class Duration, class Rep, bool = is_duration<Rep>::value>
+    struct duration_modulo_result
+    {
+    };
+
+    template <class Duration, class Rep2,
+        bool = (
+                    //pdalboost::is_convertible<typename Duration::rep,
+                        //typename common_type<typename Duration::rep, Rep2>::type>::value
+                //&&
+    pdalboost::is_convertible<Rep2,
+                        typename common_type<typename Duration::rep, Rep2>::type>::value
+                )
+        >
+    struct duration_modulo_imp
+    {
+    };
+
+    template <class Rep1, class Period, class Rep2>
+    struct duration_modulo_imp<duration<Rep1, Period>, Rep2, true>
+    {
+        typedef duration<typename common_type<Rep1, Rep2>::type, Period> type;
+    };
+
+    template <class Rep1, class Period, class Rep2>
+    struct duration_modulo_result<duration<Rep1, Period>, Rep2, false>
+        : duration_modulo_imp<duration<Rep1, Period>, Rep2>
+    {
+    };
+
+} // namespace detail
+} // namespace chrono
+
+
+// common_type trait specializations
+
+template <class Rep1, class Period1, class Rep2, class Period2>
+struct common_type<chrono::duration<Rep1, Period1>,
+                     chrono::duration<Rep2, Period2> >;
+
+
+namespace chrono {
+
+    // customization traits
+    template <class Rep> struct treat_as_floating_point;
+    template <class Rep> struct duration_values;
+
+    // convenience typedefs
+    typedef duration<pdalboost::int_least64_t, nano> nanoseconds;    // at least 64 bits needed
+    typedef duration<pdalboost::int_least64_t, micro> microseconds;  // at least 55 bits needed
+    typedef duration<pdalboost::int_least64_t, milli> milliseconds;  // at least 45 bits needed
+    typedef duration<pdalboost::int_least64_t> seconds;              // at least 35 bits needed
+    typedef duration<pdalboost::int_least32_t, ratio< 60> > minutes; // at least 29 bits needed
+    typedef duration<pdalboost::int_least32_t, ratio<3600> > hours;  // at least 23 bits needed
+
+//----------------------------------------------------------------------------//
+//                          duration helpers                                  //
+//----------------------------------------------------------------------------//
+
+namespace detail
+{
+
+    // duration_cast
+
+    // duration_cast is the heart of this whole prototype.  It can convert any
+    //   duration to any other.  It is also (implicitly) used in converting
+    //   time_points.  The conversion is always exact if possible.  And it is
+    //   always as efficient as hand written code.  If different representations
+    //   are involved, care is taken to never require implicit conversions.
+    //   Instead static_cast is used explicitly for every required conversion.
+    //   If there are a mixture of integral and floating point representations,
+    //   the use of common_type ensures that the most logical "intermediate"
+    //   representation is used.
+    template <class FromDuration, class ToDuration,
+              class Period,
+              bool PeriodNumEq1,
+              bool PeriodDenEq1>
+    struct duration_cast_aux;
+
+    // When the two periods are the same, all that is left to do is static_cast from
+    //   the source representation to the target representation (which may be a no-op).
+    //   This conversion is always exact as long as the static_cast from the source
+    //   representation to the destination representation is exact.
+    template <class FromDuration, class ToDuration, class Period>
+    struct duration_cast_aux<FromDuration, ToDuration, Period, true, true>
+    {
+        BOOST_CONSTEXPR ToDuration operator()(const FromDuration& fd) const
+        {
+            return ToDuration(static_cast<typename ToDuration::rep>(fd.count()));
+        }
+    };
+
+    // When the numerator of FromPeriod / ToPeriod is 1, then all we need to do is
+    //   divide by the denominator of FromPeriod / ToPeriod.  The common_type of
+    //   the two representations is used for the intermediate computation before
+    //   static_cast'ing to the destination.
+    //   This conversion is generally not exact because of the division (but could be
+    //   if you get lucky on the run time value of fd.count()).
+    template <class FromDuration, class ToDuration, class Period>
+    struct duration_cast_aux<FromDuration, ToDuration, Period, true, false>
+    {
+        BOOST_CONSTEXPR ToDuration operator()(const FromDuration& fd) const
+        {
+            typedef typename common_type<
+                typename ToDuration::rep,
+                typename FromDuration::rep,
+                pdalboost::intmax_t>::type C;
+            return ToDuration(static_cast<typename ToDuration::rep>(
+                              static_cast<C>(fd.count()) / static_cast<C>(Period::den)));
+        }
+    };
+
+    // When the denominator of FromPeriod / ToPeriod is 1, then all we need to do is
+    //   multiply by the numerator of FromPeriod / ToPeriod.  The common_type of
+    //   the two representations is used for the intermediate computation before
+    //   static_cast'ing to the destination.
+    //   This conversion is always exact as long as the static_cast's involved are exact.
+    template <class FromDuration, class ToDuration, class Period>
+    struct duration_cast_aux<FromDuration, ToDuration, Period, false, true>
+    {
+        BOOST_CONSTEXPR ToDuration operator()(const FromDuration& fd) const
+        {
+            typedef typename common_type<
+              typename ToDuration::rep,
+              typename FromDuration::rep,
+              pdalboost::intmax_t>::type C;
+            return ToDuration(static_cast<typename ToDuration::rep>(
+                              static_cast<C>(fd.count()) * static_cast<C>(Period::num)));
+        }
+    };
+
+    // When neither the numerator or denominator of FromPeriod / ToPeriod is 1, then we need to
+    //   multiply by the numerator and divide by the denominator of FromPeriod / ToPeriod.  The
+    //   common_type of the two representations is used for the intermediate computation before
+    //   static_cast'ing to the destination.
+    //   This conversion is generally not exact because of the division (but could be
+    //   if you get lucky on the run time value of fd.count()).
+    template <class FromDuration, class ToDuration, class Period>
+    struct duration_cast_aux<FromDuration, ToDuration, Period, false, false>
+    {
+        BOOST_CONSTEXPR ToDuration operator()(const FromDuration& fd) const
+        {
+            typedef typename common_type<
+              typename ToDuration::rep,
+              typename FromDuration::rep,
+              pdalboost::intmax_t>::type C;
+            return ToDuration(static_cast<typename ToDuration::rep>(
+               static_cast<C>(fd.count()) * static_cast<C>(Period::num)
+                 / static_cast<C>(Period::den)));
+        }
+    };
+
+    template <class FromDuration, class ToDuration>
+    struct duration_cast {
+        typedef typename ratio_divide<typename FromDuration::period,
+              typename ToDuration::period>::type Period;
+        typedef duration_cast_aux<
+            FromDuration,
+            ToDuration,
+            Period,
+            Period::num == 1,
+            Period::den == 1
+        > Aux;
+        BOOST_CONSTEXPR ToDuration operator()(const FromDuration& fd) const
+        {
+            return Aux()(fd);
+        }
+    };
+
+} // namespace detail
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//      20.9.2 Time-related traits [time.traits]                              //
+//                                                                            //
+//----------------------------------------------------------------------------//
+//----------------------------------------------------------------------------//
+//      20.9.2.1 treat_as_floating_point [time.traits.is_fp]                        //
+//      Probably should have been treat_as_floating_point. Editor notifed.    //
+//----------------------------------------------------------------------------//
+
+    // Support bidirectional (non-exact) conversions for floating point rep types
+    //   (or user defined rep types which specialize treat_as_floating_point).
+    template <class Rep>
+    struct treat_as_floating_point : pdalboost::is_floating_point<Rep> {};
+
+//----------------------------------------------------------------------------//
+//      20.9.2.2 duration_values [time.traits.duration_values]                //
+//----------------------------------------------------------------------------//
+
+namespace detail {
+    template <class T, bool = is_arithmetic<T>::value>
+    struct chrono_numeric_limits {
+        static BOOST_CHRONO_LIB_CONSTEXPR T lowest() BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW {return (std::numeric_limits<T>::min)  ();}
+    };
+
+    template <class T>
+    struct chrono_numeric_limits<T,true> {
+        static BOOST_CHRONO_LIB_CONSTEXPR T lowest() BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW {return (std::numeric_limits<T>::min)  ();}
+    };
+
+    template <>
+    struct chrono_numeric_limits<float,true> {
+        static BOOST_CHRONO_LIB_CONSTEXPR float lowest() BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW
+        {
+            return -(std::numeric_limits<float>::max) ();
+        }
+    };
+
+    template <>
+    struct chrono_numeric_limits<double,true> {
+        static BOOST_CHRONO_LIB_CONSTEXPR double lowest() BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW
+        {
+            return -(std::numeric_limits<double>::max) ();
+        }
+    };
+
+    template <>
+    struct chrono_numeric_limits<long double,true> {
+        static BOOST_CHRONO_LIB_CONSTEXPR long double lowest() BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW
+        {
+            return -(std::numeric_limits<long double>::max)();
+        }
+    };
+
+    template <class T>
+    struct numeric_limits : chrono_numeric_limits<typename remove_cv<T>::type>
+    {};
+
+}
+template <class Rep>
+struct duration_values
+{
+    static BOOST_CONSTEXPR Rep zero() {return Rep(0);}
+    static BOOST_CHRONO_LIB_CONSTEXPR Rep max BOOST_PREVENT_MACRO_SUBSTITUTION ()
+    {
+        return (std::numeric_limits<Rep>::max)();
+    }
+
+    static BOOST_CHRONO_LIB_CONSTEXPR Rep min BOOST_PREVENT_MACRO_SUBSTITUTION ()
+    {
+        return detail::numeric_limits<Rep>::lowest();
+    }
+};
+
+}  // namespace chrono
+
+//----------------------------------------------------------------------------//
+//      20.9.2.3 Specializations of common_type [time.traits.specializations] //
+//----------------------------------------------------------------------------//
+
+template <class Rep1, class Period1, class Rep2, class Period2>
+struct common_type<chrono::duration<Rep1, Period1>,
+                   chrono::duration<Rep2, Period2> >
+{
+  typedef chrono::duration<typename common_type<Rep1, Rep2>::type,
+                      typename pdalboost::ratio_gcd<Period1, Period2>::type> type;
+};
+
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//         20.9.3 Class template duration [time.duration]                     //
+//                                                                            //
+//----------------------------------------------------------------------------//
+
+
+namespace chrono {
+
+    template <class Rep, class Period>
+    class BOOST_SYMBOL_VISIBLE duration
+    {
+    //BOOST_CHRONO_STATIC_ASSERT(pdalboost::is_integral<Rep>::value, BOOST_CHRONO_A_DURATION_REPRESENTATION_MUST_BE_INTEGRAL, ());
+    BOOST_CHRONO_STATIC_ASSERT(!pdalboost::chrono::detail::is_duration<Rep>::value,
+            BOOST_CHRONO_A_DURATION_REPRESENTATION_CAN_NOT_BE_A_DURATION, ());
+    BOOST_CHRONO_STATIC_ASSERT(pdalboost::ratio_detail::is_ratio<typename Period::type>::value,
+            BOOST_CHRONO_SECOND_TEMPLATE_PARAMETER_OF_DURATION_MUST_BE_A_STD_RATIO, ());
+    BOOST_CHRONO_STATIC_ASSERT(Period::num>0,
+            BOOST_CHRONO_DURATION_PERIOD_MUST_BE_POSITIVE, ());
+    public:
+        typedef Rep rep;
+        typedef Period period;
+    private:
+        rep rep_;
+    public:
+
+#if  defined   BOOST_NO_CXX11_DEFAULTED_FUNCTIONS || \
+     defined   BOOST_CHRONO_DURATION_DEFAULTS_TO_ZERO
+        BOOST_FORCEINLINE BOOST_CONSTEXPR
+        duration() : rep_(duration_values<rep>::zero()) { }
+#else
+        BOOST_CONSTEXPR duration() BOOST_NOEXCEPT {};
+#endif
+        template <class Rep2>
+        BOOST_SYMBOL_VISIBLE BOOST_FORCEINLINE BOOST_CONSTEXPR
+        explicit duration(const Rep2& r
+        , typename pdalboost::enable_if <
+                    mpl::and_ <
+                        pdalboost::is_convertible<Rep2, rep>,
+                        mpl::or_ <
+                            treat_as_floating_point<rep>,
+                            mpl::and_ <
+                                mpl::not_ < treat_as_floating_point<rep> >,
+                                mpl::not_ < treat_as_floating_point<Rep2> >
+                            >
+                        >
+                    >
+                >::type* = 0
+            ) : rep_(r) { }
+#if  defined   BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+        duration& operator=(const duration& rhs)
+        {
+            if (&rhs != this) rep_= rhs.rep_;
+            return *this;
+        }
+#else
+        duration& operator=(const duration& rhs) = default;
+#endif
+        // conversions
+        template <class Rep2, class Period2>
+        BOOST_FORCEINLINE BOOST_CONSTEXPR
+        duration(const duration<Rep2, Period2>& d
+        , typename pdalboost::enable_if <
+                    mpl::or_ <
+                        treat_as_floating_point<rep>,
+                        mpl::and_ <
+                            chrono_detail::is_evenly_divisible_by<Period2, period>,
+                            mpl::not_ < treat_as_floating_point<Rep2> >
+                        >
+                    >
+                >::type* = 0
+        )
+            : rep_(chrono::detail::duration_cast<duration<Rep2, Period2>, duration>()(d).count()) {}
+
+        // observer
+
+        BOOST_CONSTEXPR
+        rep count() const {return rep_;}
+
+        // arithmetic
+
+        BOOST_CONSTEXPR
+        duration  operator+() const {return duration(rep_);;}
+        BOOST_CONSTEXPR
+        duration  operator-() const {return duration(-rep_);}
+        duration& operator++()      {++rep_; return *this;}
+        duration  operator++(int)   {return duration(rep_++);}
+        duration& operator--()      {--rep_; return *this;}
+        duration  operator--(int)   {return duration(rep_--);}
+
+        duration& operator+=(const duration& d)
+        {
+            rep_ += d.count(); return *this;
+        }
+        duration& operator-=(const duration& d)
+        {
+            rep_ -= d.count(); return *this;
+        }
+
+        duration& operator*=(const rep& rhs) {rep_ *= rhs; return *this;}
+        duration& operator/=(const rep& rhs) {rep_ /= rhs; return *this;}
+        duration& operator%=(const rep& rhs) {rep_ %= rhs; return *this;}
+        duration& operator%=(const duration& rhs)
+        {
+            rep_ %= rhs.count(); return *this;
+        }
+        // 20.9.3.4 duration special values [time.duration.special]
+
+        static BOOST_CONSTEXPR duration zero()
+        {
+            return duration(duration_values<rep>::zero());
+        }
+        static BOOST_CHRONO_LIB_CONSTEXPR duration min BOOST_PREVENT_MACRO_SUBSTITUTION ()
+        {
+            return duration((duration_values<rep>::min)());
+        }
+        static BOOST_CHRONO_LIB_CONSTEXPR duration max BOOST_PREVENT_MACRO_SUBSTITUTION ()
+        {
+            return duration((duration_values<rep>::max)());
+        }
+    };
+
+//----------------------------------------------------------------------------//
+//      20.9.3.5 duration non-member arithmetic [time.duration.nonmember]     //
+//----------------------------------------------------------------------------//
+
+    // Duration +
+
+    template <class Rep1, class Period1, class Rep2, class Period2>
+    inline BOOST_CONSTEXPR
+    typename common_type<duration<Rep1, Period1>, duration<Rep2, Period2> >::type
+    operator+(const duration<Rep1, Period1>& lhs,
+          const duration<Rep2, Period2>& rhs)
+    {
+      typedef typename common_type<duration<Rep1, Period1>,
+        duration<Rep2, Period2> >::type CD;
+      return CD(CD(lhs).count()+CD(rhs).count());
+    }
+
+    // Duration -
+
+    template <class Rep1, class Period1, class Rep2, class Period2>
+    inline BOOST_CONSTEXPR
+    typename common_type<duration<Rep1, Period1>, duration<Rep2, Period2> >::type
+    operator-(const duration<Rep1, Period1>& lhs,
+          const duration<Rep2, Period2>& rhs)
+    {
+      typedef typename common_type<duration<Rep1, Period1>,
+            duration<Rep2, Period2> >::type CD;
+      return CD(CD(lhs).count()-CD(rhs).count());
+    }
+
+    // Duration *
+
+    template <class Rep1, class Period, class Rep2>
+    inline BOOST_CONSTEXPR
+    typename pdalboost::enable_if <
+        mpl::and_ <
+        pdalboost::is_convertible<Rep1, typename common_type<Rep1, Rep2>::type>,
+        pdalboost::is_convertible<Rep2, typename common_type<Rep1, Rep2>::type>
+        >,
+        duration<typename common_type<Rep1, Rep2>::type, Period>
+    >::type
+    operator*(const duration<Rep1, Period>& d, const Rep2& s)
+    {
+      typedef typename common_type<Rep1, Rep2>::type CR;
+      typedef duration<CR, Period> CD;
+      return CD(CD(d).count()*static_cast<CR>(s));
+    }
+
+    template <class Rep1, class Period, class Rep2>
+    inline BOOST_CONSTEXPR
+    typename pdalboost::enable_if <
+        mpl::and_ <
+        pdalboost::is_convertible<Rep1, typename common_type<Rep1, Rep2>::type>,
+        pdalboost::is_convertible<Rep2, typename common_type<Rep1, Rep2>::type>
+        >,
+        duration<typename common_type<Rep1, Rep2>::type, Period>
+    >::type
+    operator*(const Rep1& s, const duration<Rep2, Period>& d)
+    {
+        return d * s;
+    }
+
+    // Duration /
+
+    template <class Rep1, class Period, class Rep2>
+    inline BOOST_CONSTEXPR
+    typename pdalboost::disable_if <pdalboost::chrono::detail::is_duration<Rep2>,
+      typename pdalboost::chrono::detail::duration_divide_result<
+        duration<Rep1, Period>, Rep2>::type
+    >::type
+    operator/(const duration<Rep1, Period>& d, const Rep2& s)
+    {
+        typedef typename common_type<Rep1, Rep2>::type CR;
+        typedef duration<CR, Period> CD;
+
+      return CD(CD(d).count()/static_cast<CR>(s));
+    }
+
+    template <class Rep1, class Period1, class Rep2, class Period2>
+    inline BOOST_CONSTEXPR
+    typename common_type<Rep1, Rep2>::type
+    operator/(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs)
+    {
+        typedef typename common_type<duration<Rep1, Period1>,
+                                   duration<Rep2, Period2> >::type CD;
+        return CD(lhs).count() / CD(rhs).count();
+    }
+
+    #ifdef BOOST_CHRONO_EXTENSIONS
+    template <class Rep1, class Rep2, class Period>
+    inline BOOST_CONSTEXPR
+    typename pdalboost::disable_if <pdalboost::chrono::detail::is_duration<Rep1>,
+      typename pdalboost::chrono::detail::duration_divide_result2<
+        Rep1, duration<Rep2, Period> >::type
+      >::type
+    operator/(const Rep1& s, const duration<Rep2, Period>& d)
+    {
+        typedef typename common_type<Rep1, Rep2>::type CR;
+        typedef duration<CR, Period> CD;
+
+      return static_cast<CR>(s)/CD(d).count();
+    }
+    #endif
+    // Duration %
+
+    template <class Rep1, class Period, class Rep2>
+    inline BOOST_CONSTEXPR
+    typename pdalboost::disable_if <pdalboost::chrono::detail::is_duration<Rep2>,
+      typename pdalboost::chrono::detail::duration_modulo_result<
+        duration<Rep1, Period>, Rep2>::type
+    >::type
+    operator%(const duration<Rep1, Period>& d, const Rep2& s)
+    {
+        typedef typename common_type<Rep1, Rep2>::type CR;
+        typedef duration<CR, Period> CD;
+
+      return CD(CD(d).count()%static_cast<CR>(s));
+    }
+
+    template <class Rep1, class Period1, class Rep2, class Period2>
+    inline BOOST_CONSTEXPR
+    typename common_type<duration<Rep1, Period1>, duration<Rep2, Period2> >::type
+    operator%(const duration<Rep1, Period1>& lhs,
+          const duration<Rep2, Period2>& rhs) {
+        typedef typename common_type<duration<Rep1, Period1>,
+                                 duration<Rep2, Period2> >::type CD;
+
+      return CD(CD(lhs).count()%CD(rhs).count());
+    }
+
+
+//----------------------------------------------------------------------------//
+//      20.9.3.6 duration comparisons [time.duration.comparisons]             //
+//----------------------------------------------------------------------------//
+
+namespace detail
+{
+    template <class LhsDuration, class RhsDuration>
+    struct duration_eq
+    {
+      BOOST_CONSTEXPR bool operator()(const LhsDuration& lhs, const RhsDuration& rhs) const
+        {
+            typedef typename common_type<LhsDuration, RhsDuration>::type CD;
+            return CD(lhs).count() == CD(rhs).count();
+        }
+    };
+
+    template <class LhsDuration>
+    struct duration_eq<LhsDuration, LhsDuration>
+    {
+      BOOST_CONSTEXPR bool operator()(const LhsDuration& lhs, const LhsDuration& rhs) const
+        {
+            return lhs.count() == rhs.count();
+        }
+    };
+
+    template <class LhsDuration, class RhsDuration>
+    struct duration_lt
+    {
+      BOOST_CONSTEXPR bool operator()(const LhsDuration& lhs, const RhsDuration& rhs) const
+        {
+            typedef typename common_type<LhsDuration, RhsDuration>::type CD;
+            return CD(lhs).count() < CD(rhs).count();
+        }
+    };
+
+    template <class LhsDuration>
+    struct duration_lt<LhsDuration, LhsDuration>
+    {
+      BOOST_CONSTEXPR bool operator()(const LhsDuration& lhs, const LhsDuration& rhs) const
+        {
+            return lhs.count() < rhs.count();
+        }
+    };
+
+} // namespace detail
+
+    // Duration ==
+
+    template <class Rep1, class Period1, class Rep2, class Period2>
+    inline BOOST_CONSTEXPR
+    bool
+    operator==(const duration<Rep1, Period1>& lhs,
+          const duration<Rep2, Period2>& rhs)
+    {
+        return pdalboost::chrono::detail::duration_eq<
+            duration<Rep1, Period1>, duration<Rep2, Period2> >()(lhs, rhs);
+    }
+
+    // Duration !=
+
+    template <class Rep1, class Period1, class Rep2, class Period2>
+    inline BOOST_CONSTEXPR
+    bool
+    operator!=(const duration<Rep1, Period1>& lhs,
+          const duration<Rep2, Period2>& rhs)
+    {
+        return !(lhs == rhs);
+    }
+
+    // Duration <
+
+    template <class Rep1, class Period1, class Rep2, class Period2>
+    inline BOOST_CONSTEXPR
+    bool
+    operator< (const duration<Rep1, Period1>& lhs,
+          const duration<Rep2, Period2>& rhs)
+    {
+        return pdalboost::chrono::detail::duration_lt<
+          duration<Rep1, Period1>, duration<Rep2, Period2> >()(lhs, rhs);
+    }
+
+    // Duration >
+
+    template <class Rep1, class Period1, class Rep2, class Period2>
+    inline BOOST_CONSTEXPR
+    bool
+    operator> (const duration<Rep1, Period1>& lhs,
+          const duration<Rep2, Period2>& rhs)
+    {
+        return rhs < lhs;
+    }
+
+    // Duration <=
+
+    template <class Rep1, class Period1, class Rep2, class Period2>
+    inline BOOST_CONSTEXPR
+    bool
+    operator<=(const duration<Rep1, Period1>& lhs,
+          const duration<Rep2, Period2>& rhs)
+    {
+        return !(rhs < lhs);
+    }
+
+    // Duration >=
+
+    template <class Rep1, class Period1, class Rep2, class Period2>
+    inline BOOST_CONSTEXPR
+    bool
+    operator>=(const duration<Rep1, Period1>& lhs,
+          const duration<Rep2, Period2>& rhs)
+    {
+        return !(lhs < rhs);
+    }
+
+//----------------------------------------------------------------------------//
+//      20.9.3.7 duration_cast [time.duration.cast]                           //
+//----------------------------------------------------------------------------//
+
+    // Compile-time select the most efficient algorithm for the conversion...
+    template <class ToDuration, class Rep, class Period>
+    inline BOOST_CONSTEXPR
+    typename pdalboost::enable_if <
+      pdalboost::chrono::detail::is_duration<ToDuration>, ToDuration>::type
+    duration_cast(const duration<Rep, Period>& fd)
+    {
+        return pdalboost::chrono::detail::duration_cast<
+          duration<Rep, Period>, ToDuration>()(fd);
+    }
+
+} // namespace chrono
+} // namespace pdalboost
+
+#ifndef BOOST_CHRONO_HEADER_ONLY
+// the suffix header occurs after all of our code:
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
+#endif
+
+#endif // BOOST_CHRONO_DURATION_HPP
diff --git a/vendor/pdalboost/boost/chrono/system_clocks.hpp b/vendor/pdalboost/boost/chrono/system_clocks.hpp
new file mode 100644
index 0000000..4e83be8
--- /dev/null
+++ b/vendor/pdalboost/boost/chrono/system_clocks.hpp
@@ -0,0 +1,233 @@
+//  boost/chrono/system_clocks.hpp  --------------------------------------------------------------//
+
+//  Copyright 2008 Howard Hinnant
+//  Copyright 2008 Beman Dawes
+//  Copyright 2009-2011 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+/*
+
+This code was derived by Beman Dawes from Howard Hinnant's time2_demo prototype.
+Many thanks to Howard for making his code available under the Boost license.
+The original code was modified to conform to Boost conventions and to section
+20.9 Time utilities [time] of the C++ committee's working paper N2798.
+See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2798.pdf.
+
+time2_demo contained this comment:
+
+    Much thanks to Andrei Alexandrescu,
+                   Walter Brown,
+                   Peter Dimov,
+                   Jeff Garland,
+                   Terry Golubiewski,
+                   Daniel Krugler,
+                   Anthony Williams.
+*/
+
+/*
+
+TODO:
+
+  * Fully implement error handling, with test cases.
+  * Consider issues raised by Michael Marcin:
+
+    > In the past I've seen QueryPerformanceCounter give incorrect results,
+    > especially with SpeedStep processors on laptops. This was many years ago and
+    > might have been fixed by service packs and drivers.
+    >
+    > Typically you check the results of QPC against GetTickCount to see if the
+    > results are reasonable.
+    > http://support.microsoft.com/kb/274323
+    >
+    > I've also heard of problems with QueryPerformanceCounter in multi-processor
+    > systems.
+    >
+    > I know some people SetThreadAffinityMask to 1 for the current thread call
+    > their QueryPerformance* functions then restore SetThreadAffinityMask. This
+    > seems horrible to me because it forces your program to jump to another
+    > physical processor if it isn't already on cpu0 but they claim it worked well
+    > in practice because they called the timing functions infrequently.
+    >
+    > In the past I have chosen to use timeGetTime with timeBeginPeriod(1) for
+    > high resolution timers to avoid these issues.
+
+*/
+
+#ifndef BOOST_CHRONO_SYSTEM_CLOCKS_HPP
+#define BOOST_CHRONO_SYSTEM_CLOCKS_HPP
+
+#include <boost/chrono/config.hpp>
+#include <boost/chrono/duration.hpp>
+#include <boost/chrono/time_point.hpp>
+#include <boost/chrono/detail/system.hpp>
+#include <boost/chrono/clock_string.hpp>
+
+#include <ctime>
+
+# if defined( BOOST_CHRONO_POSIX_API )
+#   if ! defined(CLOCK_REALTIME) && ! defined (__hpux__)
+#     error <time.h> does not supply CLOCK_REALTIME
+#   endif
+# endif
+
+#ifdef BOOST_CHRONO_WINDOWS_API
+// The system_clock tick is 100 nanoseconds
+# define BOOST_SYSTEM_CLOCK_DURATION pdalboost::chrono::duration<pdalboost::int_least64_t, ratio<BOOST_RATIO_INTMAX_C(1), BOOST_RATIO_INTMAX_C(10000000)> >
+#else
+# define BOOST_SYSTEM_CLOCK_DURATION pdalboost::chrono::nanoseconds
+#endif
+
+// this must occur after all of the includes and before any code appears:
+#ifndef BOOST_CHRONO_HEADER_ONLY
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+#endif
+
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//                        20.9 Time utilities [time]                          //
+//                                 synopsis                                   //
+//                                                                            //
+//----------------------------------------------------------------------------//
+
+namespace pdalboost {
+namespace chrono {
+
+  // Clocks
+  class BOOST_CHRONO_DECL system_clock;
+#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY
+  class BOOST_CHRONO_DECL steady_clock;
+#endif
+
+#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY
+  typedef steady_clock high_resolution_clock;  // as permitted by [time.clock.hires]
+#else
+  typedef system_clock high_resolution_clock;  // as permitted by [time.clock.hires]
+#endif
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//      20.9.5 Clocks [time.clock]                                            //
+//                                                                            //
+//----------------------------------------------------------------------------//
+
+// If you're porting, clocks are the system-specific (non-portable) part.
+// You'll need to know how to get the current time and implement that under now().
+// You'll need to know what units (tick period) and representation makes the most
+// sense for your clock and set those accordingly.
+// If you know how to map this clock to time_t (perhaps your clock is std::time, which
+// makes that trivial), then you can fill out system_clock's to_time_t() and from_time_t().
+
+//----------------------------------------------------------------------------//
+//      20.9.5.1 Class system_clock [time.clock.system]                       //
+//----------------------------------------------------------------------------//
+
+  class BOOST_CHRONO_DECL system_clock
+  {
+  public:
+      typedef BOOST_SYSTEM_CLOCK_DURATION          duration;
+      typedef duration::rep                        rep;
+      typedef duration::period                     period;
+      typedef chrono::time_point<system_clock>     time_point;
+      BOOST_STATIC_CONSTEXPR bool is_steady =             false;
+
+      static BOOST_CHRONO_INLINE time_point  now() BOOST_NOEXCEPT;
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+      static BOOST_CHRONO_INLINE time_point  now(system::error_code & ec);
+#endif
+
+      static BOOST_CHRONO_INLINE std::time_t to_time_t(const time_point& t) BOOST_NOEXCEPT;
+      static BOOST_CHRONO_INLINE time_point  from_time_t(std::time_t t) BOOST_NOEXCEPT;
+  };
+
+//----------------------------------------------------------------------------//
+//      20.9.5.2 Class steady_clock [time.clock.steady]                 //
+//----------------------------------------------------------------------------//
+
+// As permitted  by [time.clock.steady]
+// The class steady_clock is conditionally supported.
+
+#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY
+  class BOOST_CHRONO_DECL steady_clock
+  {
+  public:
+      typedef nanoseconds                          duration;
+      typedef duration::rep                        rep;
+      typedef duration::period                     period;
+      typedef chrono::time_point<steady_clock>  time_point;
+      BOOST_STATIC_CONSTEXPR bool is_steady =             true;
+
+      static BOOST_CHRONO_INLINE time_point  now() BOOST_NOEXCEPT;
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+      static BOOST_CHRONO_INLINE time_point  now(system::error_code & ec);
+#endif
+  };
+#endif
+//----------------------------------------------------------------------------//
+//      20.9.5.3 Class high_resolution_clock [time.clock.hires]               //
+//----------------------------------------------------------------------------//
+
+//  As permitted, steady_clock or system_clock is a typedef for high_resolution_clock.
+//  See synopsis.
+
+
+  template<class CharT>
+  struct clock_string<system_clock, CharT>
+  {
+    static std::basic_string<CharT> name()
+    {
+      static const CharT u[] =
+      { 's', 'y', 's', 't', 'e', 'm', '_', 'c', 'l', 'o', 'c', 'k' };
+      static const std::basic_string<CharT> str(u, u + sizeof(u)
+          / sizeof(u[0]));
+      return str;
+    }
+    static std::basic_string<CharT> since()
+    {
+      static const CharT
+          u[] =
+              { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'J', 'a', 'n', ' ', '1', ',', ' ', '1', '9', '7', '0' };
+      static const std::basic_string<CharT> str(u, u + sizeof(u)
+          / sizeof(u[0]));
+      return str;
+    }
+  };
+
+#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY
+
+  template<class CharT>
+  struct clock_string<steady_clock, CharT>
+  {
+    static std::basic_string<CharT> name()
+    {
+      static const CharT
+          u[] =
+              { 's', 't', 'e', 'a', 'd', 'y', '_', 'c', 'l', 'o', 'c', 'k' };
+      static const std::basic_string<CharT> str(u, u + sizeof(u)
+          / sizeof(u[0]));
+      return str;
+    }
+    static std::basic_string<CharT> since()
+    {
+      const CharT u[] =
+      { ' ', 's', 'i', 'n', 'c', 'e', ' ', 'b', 'o', 'o', 't' };
+      const std::basic_string<CharT> str(u, u + sizeof(u) / sizeof(u[0]));
+      return str;
+    }
+  };
+
+#endif
+
+} // namespace chrono
+} // namespace pdalboost
+
+#ifndef BOOST_CHRONO_HEADER_ONLY
+// the suffix header occurs after all of our code:
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
+#else
+#include <boost/chrono/detail/inlined/chrono.hpp>
+#endif
+
+#endif // BOOST_CHRONO_SYSTEM_CLOCKS_HPP
diff --git a/vendor/pdalboost/boost/chrono/time_point.hpp b/vendor/pdalboost/boost/chrono/time_point.hpp
new file mode 100644
index 0000000..95a6d2c
--- /dev/null
+++ b/vendor/pdalboost/boost/chrono/time_point.hpp
@@ -0,0 +1,380 @@
+//  duration.hpp  --------------------------------------------------------------//
+
+//  Copyright 2008 Howard Hinnant
+//  Copyright 2008 Beman Dawes
+//  Copyright 2009-2012 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+/*
+
+This code was derived by Beman Dawes from Howard Hinnant's time2_demo prototype.
+Many thanks to Howard for making his code available under the Boost license.
+The original code was modified to conform to Boost conventions and to section
+20.9 Time utilities [time] of the C++ committee's working paper N2798.
+See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2798.pdf.
+
+time2_demo contained this comment:
+
+    Much thanks to Andrei Alexandrescu,
+                   Walter Brown,
+                   Peter Dimov,
+                   Jeff Garland,
+                   Terry Golubiewski,
+                   Daniel Krugler,
+                   Anthony Williams.
+*/
+
+
+#ifndef BOOST_CHRONO_TIME_POINT_HPP
+#define BOOST_CHRONO_TIME_POINT_HPP
+
+#include <boost/chrono/duration.hpp>
+#include <iostream>
+
+#ifndef BOOST_CHRONO_HEADER_ONLY
+// this must occur after all of the includes and before any code appears:
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+#endif
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//                        20.9 Time utilities [time]                          //
+//                                 synopsis                                   //
+//                                                                            //
+//----------------------------------------------------------------------------//
+
+namespace pdalboost {
+namespace chrono {
+
+  template <class Clock, class Duration = typename Clock::duration>
+    class time_point;
+
+
+} // namespace chrono
+
+
+// common_type trait specializations
+
+template <class Clock, class Duration1, class Duration2>
+  struct common_type<chrono::time_point<Clock, Duration1>,
+                     chrono::time_point<Clock, Duration2> >;
+
+
+//----------------------------------------------------------------------------//
+//      20.9.2.3 Specializations of common_type [time.traits.specializations] //
+//----------------------------------------------------------------------------//
+
+
+template <class Clock, class Duration1, class Duration2>
+struct common_type<chrono::time_point<Clock, Duration1>,
+                   chrono::time_point<Clock, Duration2> >
+{
+  typedef chrono::time_point<Clock,
+    typename common_type<Duration1, Duration2>::type> type;
+};
+
+
+
+namespace chrono {
+
+    // time_point arithmetic
+    template <class Clock, class Duration1, class Rep2, class Period2>
+    inline BOOST_CONSTEXPR
+    time_point<Clock,
+        typename common_type<Duration1, duration<Rep2, Period2> >::type>
+    operator+(
+            const time_point<Clock, Duration1>& lhs,
+            const duration<Rep2, Period2>& rhs);
+    template <class Rep1, class Period1, class Clock, class Duration2>
+    inline BOOST_CONSTEXPR
+    time_point<Clock,
+        typename common_type<duration<Rep1, Period1>, Duration2>::type>
+    operator+(
+            const duration<Rep1, Period1>& lhs,
+            const time_point<Clock, Duration2>& rhs);
+    template <class Clock, class Duration1, class Rep2, class Period2>
+    inline BOOST_CONSTEXPR
+    time_point<Clock,
+        typename common_type<Duration1, duration<Rep2, Period2> >::type>
+    operator-(
+            const time_point<Clock, Duration1>& lhs,
+            const duration<Rep2, Period2>& rhs);
+    template <class Clock, class Duration1, class Duration2>
+    inline BOOST_CONSTEXPR
+    typename common_type<Duration1, Duration2>::type
+    operator-(
+            const time_point<Clock, Duration1>& lhs,
+            const time_point<Clock,
+            Duration2>& rhs);
+
+    // time_point comparisons
+    template <class Clock, class Duration1, class Duration2>
+    inline BOOST_CONSTEXPR
+    bool operator==(
+          const time_point<Clock, Duration1>& lhs,
+          const time_point<Clock, Duration2>& rhs);
+    template <class Clock, class Duration1, class Duration2>
+    inline BOOST_CONSTEXPR
+    bool operator!=(
+          const time_point<Clock, Duration1>& lhs,
+          const time_point<Clock, Duration2>& rhs);
+    template <class Clock, class Duration1, class Duration2>
+    inline BOOST_CONSTEXPR
+    bool operator< (
+          const time_point<Clock, Duration1>& lhs,
+          const time_point<Clock, Duration2>& rhs);
+    template <class Clock, class Duration1, class Duration2>
+    inline BOOST_CONSTEXPR
+    bool operator<=(
+          const time_point<Clock, Duration1>& lhs,
+          const time_point<Clock, Duration2>& rhs);
+    template <class Clock, class Duration1, class Duration2>
+    inline BOOST_CONSTEXPR
+    bool operator> (
+          const time_point<Clock, Duration1>& lhs,
+          const time_point<Clock, Duration2>& rhs);
+    template <class Clock, class Duration1, class Duration2>
+    inline BOOST_CONSTEXPR
+    bool operator>=(
+          const time_point<Clock, Duration1>& lhs,
+          const time_point<Clock, Duration2>& rhs);
+
+    // time_point_cast
+    template <class ToDuration, class Clock, class Duration>
+    inline BOOST_CONSTEXPR
+    time_point<Clock, ToDuration> time_point_cast(const time_point<Clock, Duration>& t);
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//      20.9.4 Class template time_point [time.point]                         //
+//                                                                            //
+//----------------------------------------------------------------------------//
+
+    template <class Clock, class Duration>
+    class time_point
+    {
+        BOOST_CHRONO_STATIC_ASSERT(pdalboost::chrono::detail::is_duration<Duration>::value,
+                BOOST_CHRONO_SECOND_TEMPLATE_PARAMETER_OF_TIME_POINT_MUST_BE_A_BOOST_CHRONO_DURATION, (Duration));
+    public:
+        typedef Clock                     clock;
+        typedef Duration                  duration;
+        typedef typename duration::rep    rep;
+        typedef typename duration::period period;
+        typedef Duration                  difference_type;
+
+    private:
+        duration d_;
+
+    public:
+        BOOST_FORCEINLINE BOOST_CONSTEXPR
+        time_point() : d_(duration::zero())
+        {}
+        BOOST_FORCEINLINE BOOST_CONSTEXPR
+        explicit time_point(const duration& d)
+            : d_(d)
+        {}
+
+        // conversions
+        template <class Duration2>
+        BOOST_FORCEINLINE BOOST_CONSTEXPR
+        time_point(const time_point<clock, Duration2>& t
+                , typename pdalboost::enable_if
+                <
+                    pdalboost::is_convertible<Duration2, duration>
+                >::type* = 0
+        )
+            : d_(t.time_since_epoch())
+        {
+        }
+        // observer
+
+        BOOST_CONSTEXPR
+        duration time_since_epoch() const
+        {
+            return d_;
+        }
+
+        // arithmetic
+
+#ifdef BOOST_CHRONO_EXTENSIONS
+        BOOST_CONSTEXPR
+        time_point  operator+() const {return *this;}
+        BOOST_CONSTEXPR
+        time_point  operator-() const {return time_point(-d_);}
+        time_point& operator++()      {++d_; return *this;}
+        time_point  operator++(int)   {return time_point(d_++);}
+        time_point& operator--()      {--d_; return *this;}
+        time_point  operator--(int)   {return time_point(d_--);}
+
+        time_point& operator+=(const rep& r) {d_ += duration(r); return *this;}
+        time_point& operator-=(const rep& r) {d_ -= duration(r); return *this;}
+
+#endif
+
+        time_point& operator+=(const duration& d) {d_ += d; return *this;}
+        time_point& operator-=(const duration& d) {d_ -= d; return *this;}
+
+        // special values
+
+        static BOOST_CHRONO_LIB_CONSTEXPR time_point
+        min BOOST_PREVENT_MACRO_SUBSTITUTION ()
+        {
+            return time_point((duration::min)());
+        }
+        static BOOST_CHRONO_LIB_CONSTEXPR time_point
+        max BOOST_PREVENT_MACRO_SUBSTITUTION ()
+        {
+            return time_point((duration::max)());
+        }
+    };
+
+//----------------------------------------------------------------------------//
+//      20.9.4.5 time_point non-member arithmetic [time.point.nonmember]      //
+//----------------------------------------------------------------------------//
+
+    // time_point operator+(time_point x, duration y);
+
+    template <class Clock, class Duration1, class Rep2, class Period2>
+    inline BOOST_CONSTEXPR
+    time_point<Clock,
+        typename common_type<Duration1, duration<Rep2, Period2> >::type>
+    operator+(const time_point<Clock, Duration1>& lhs,
+            const duration<Rep2, Period2>& rhs)
+    {
+      typedef typename common_type<Duration1, duration<Rep2, Period2> >::type CDuration;
+      typedef time_point<
+          Clock,
+          CDuration
+      > TimeResult;
+        return TimeResult(lhs.time_since_epoch() + CDuration(rhs));
+    }
+
+    // time_point operator+(duration x, time_point y);
+
+    template <class Rep1, class Period1, class Clock, class Duration2>
+    inline BOOST_CONSTEXPR
+    time_point<Clock,
+        typename common_type<duration<Rep1, Period1>, Duration2>::type>
+    operator+(const duration<Rep1, Period1>& lhs,
+            const time_point<Clock, Duration2>& rhs)
+    {
+        return rhs + lhs;
+    }
+
+    // time_point operator-(time_point x, duration y);
+
+    template <class Clock, class Duration1, class Rep2, class Period2>
+    inline BOOST_CONSTEXPR
+    time_point<Clock,
+        typename common_type<Duration1, duration<Rep2, Period2> >::type>
+    operator-(const time_point<Clock, Duration1>& lhs,
+            const duration<Rep2, Period2>& rhs)
+    {
+        return lhs + (-rhs);
+    }
+
+    // duration operator-(time_point x, time_point y);
+
+    template <class Clock, class Duration1, class Duration2>
+    inline BOOST_CONSTEXPR
+    typename common_type<Duration1, Duration2>::type
+    operator-(const time_point<Clock, Duration1>& lhs,
+            const time_point<Clock, Duration2>& rhs)
+    {
+        return lhs.time_since_epoch() - rhs.time_since_epoch();
+    }
+
+//----------------------------------------------------------------------------//
+//      20.9.4.6 time_point comparisons [time.point.comparisons]              //
+//----------------------------------------------------------------------------//
+
+    // time_point ==
+
+    template <class Clock, class Duration1, class Duration2>
+    inline BOOST_CONSTEXPR
+    bool
+    operator==(const time_point<Clock, Duration1>& lhs,
+             const time_point<Clock, Duration2>& rhs)
+    {
+        return lhs.time_since_epoch() == rhs.time_since_epoch();
+    }
+
+    // time_point !=
+
+    template <class Clock, class Duration1, class Duration2>
+    inline BOOST_CONSTEXPR
+    bool
+    operator!=(const time_point<Clock, Duration1>& lhs,
+             const time_point<Clock, Duration2>& rhs)
+    {
+        return !(lhs == rhs);
+    }
+
+    // time_point <
+
+    template <class Clock, class Duration1, class Duration2>
+    inline BOOST_CONSTEXPR
+    bool
+    operator<(const time_point<Clock, Duration1>& lhs,
+            const time_point<Clock, Duration2>& rhs)
+    {
+        return lhs.time_since_epoch() < rhs.time_since_epoch();
+    }
+
+    // time_point >
+
+    template <class Clock, class Duration1, class Duration2>
+    inline BOOST_CONSTEXPR
+    bool
+    operator>(const time_point<Clock, Duration1>& lhs,
+            const time_point<Clock, Duration2>& rhs)
+    {
+        return rhs < lhs;
+    }
+
+    // time_point <=
+
+    template <class Clock, class Duration1, class Duration2>
+    inline BOOST_CONSTEXPR
+    bool
+    operator<=(const time_point<Clock, Duration1>& lhs,
+             const time_point<Clock, Duration2>& rhs)
+    {
+        return !(rhs < lhs);
+    }
+
+    // time_point >=
+
+    template <class Clock, class Duration1, class Duration2>
+    inline BOOST_CONSTEXPR
+    bool
+    operator>=(const time_point<Clock, Duration1>& lhs,
+             const time_point<Clock, Duration2>& rhs)
+    {
+        return !(lhs < rhs);
+    }
+
+//----------------------------------------------------------------------------//
+//      20.9.4.7 time_point_cast [time.point.cast]                            //
+//----------------------------------------------------------------------------//
+
+    template <class ToDuration, class Clock, class Duration>
+    inline BOOST_CONSTEXPR
+    time_point<Clock, ToDuration>
+    time_point_cast(const time_point<Clock, Duration>& t)
+    {
+        return time_point<Clock, ToDuration>(
+                duration_cast<ToDuration>(t.time_since_epoch()));
+    }
+
+} // namespace chrono
+} // namespace pdalboost
+
+#ifndef BOOST_CHRONO_HEADER_ONLY
+// the suffix header occurs after all of our code:
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
+#endif
+
+#endif // BOOST_CHRONO_TIME_POINT_HPP
diff --git a/vendor/pdalboost/boost/compressed_pair.hpp b/vendor/pdalboost/boost/compressed_pair.hpp
new file mode 100644
index 0000000..a7be0f2
--- /dev/null
+++ b/vendor/pdalboost/boost/compressed_pair.hpp
@@ -0,0 +1,20 @@
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/utility for most recent version including documentation.
+
+//  See boost/detail/compressed_pair.hpp
+//  for full copyright notices.
+
+#ifndef BOOST_COMPRESSED_PAIR_HPP
+#define BOOST_COMPRESSED_PAIR_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#include <boost/config.hpp>
+#endif
+
+#include <boost/detail/compressed_pair.hpp>
+
+#endif // BOOST_COMPRESSED_PAIR_HPP
diff --git a/vendor/pdalboost/boost/concept/assert.hpp b/vendor/pdalboost/boost/concept/assert.hpp
new file mode 100644
index 0000000..cf98179
--- /dev/null
+++ b/vendor/pdalboost/boost/concept/assert.hpp
@@ -0,0 +1,45 @@
+// Copyright David Abrahams 2006. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_CONCEPT_ASSERT_DWA2006430_HPP
+# define BOOST_CONCEPT_ASSERT_DWA2006430_HPP
+
+# include <boost/config.hpp>
+# include <boost/detail/workaround.hpp>
+
+// The old protocol used a constraints() member function in concept
+// checking classes.  If the compiler supports SFINAE, we can detect
+// that function and seamlessly support the old concept checking
+// classes.  In this release, backward compatibility with the old
+// concept checking classes is enabled by default, where available.
+// The old protocol is deprecated, though, and backward compatibility
+// will no longer be the default in the next release.
+
+# if !defined(BOOST_NO_OLD_CONCEPT_SUPPORT)                                         \
+    && !defined(BOOST_NO_SFINAE)                                                    \
+                                                                                    \
+    && !(BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, < 4))
+
+// Note: gcc-2.96 through 3.3.x have some SFINAE, but no ability to
+// check for the presence of particularmember functions.
+
+#  define BOOST_OLD_CONCEPT_SUPPORT
+
+# endif
+
+# ifdef BOOST_MSVC
+#  include <boost/concept/detail/msvc.hpp>
+# elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+#  include <boost/concept/detail/borland.hpp>
+# else 
+#  include <boost/concept/detail/general.hpp>
+# endif
+
+  // Usage, in class or function context:
+  //
+  //     BOOST_CONCEPT_ASSERT((UnaryFunctionConcept<F,bool,int>));
+  //
+# define BOOST_CONCEPT_ASSERT(ModelInParens) \
+    BOOST_CONCEPT_ASSERT_FN(void(*)ModelInParens)
+
+#endif // BOOST_CONCEPT_ASSERT_DWA2006430_HPP
diff --git a/vendor/pdalboost/boost/concept/detail/backward_compatibility.hpp b/vendor/pdalboost/boost/concept/detail/backward_compatibility.hpp
new file mode 100644
index 0000000..44ad34d
--- /dev/null
+++ b/vendor/pdalboost/boost/concept/detail/backward_compatibility.hpp
@@ -0,0 +1,16 @@
+// Copyright David Abrahams 2009. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_CONCEPT_BACKWARD_COMPATIBILITY_DWA200968_HPP
+# define BOOST_CONCEPT_BACKWARD_COMPATIBILITY_DWA200968_HPP
+
+namespace pdalboost
+{
+  namespace concepts {}
+
+# if defined(BOOST_HAS_CONCEPTS) && !defined(BOOST_CONCEPT_NO_BACKWARD_KEYWORD)
+  namespace concept = concepts;
+# endif 
+} // namespace pdalboost::concept
+
+#endif // BOOST_CONCEPT_BACKWARD_COMPATIBILITY_DWA200968_HPP
diff --git a/vendor/pdalboost/boost/concept/detail/borland.hpp b/vendor/pdalboost/boost/concept/detail/borland.hpp
new file mode 100644
index 0000000..df17492
--- /dev/null
+++ b/vendor/pdalboost/boost/concept/detail/borland.hpp
@@ -0,0 +1,30 @@
+// Copyright David Abrahams 2006. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_CONCEPT_DETAIL_BORLAND_DWA2006429_HPP
+# define BOOST_CONCEPT_DETAIL_BORLAND_DWA2006429_HPP
+
+# include <boost/preprocessor/cat.hpp>
+# include <boost/concept/detail/backward_compatibility.hpp>
+
+namespace pdalboost { namespace concepts {
+
+template <class ModelFnPtr>
+struct require;
+
+template <class Model>
+struct require<void(*)(Model)>
+{
+    enum { instantiate = sizeof((((Model*)0)->~Model()), 3) };
+};
+
+#  define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )         \
+  enum                                                  \
+  {                                                     \
+      BOOST_PP_CAT(boost_concept_check,__LINE__) =      \
+      pdalboost::concepts::require<ModelFnPtr>::instantiate  \
+  }
+
+}} // namespace pdalboost::concept
+
+#endif // BOOST_CONCEPT_DETAIL_BORLAND_DWA2006429_HPP
diff --git a/vendor/pdalboost/boost/concept/detail/concept_def.hpp b/vendor/pdalboost/boost/concept/detail/concept_def.hpp
new file mode 100644
index 0000000..750561e
--- /dev/null
+++ b/vendor/pdalboost/boost/concept/detail/concept_def.hpp
@@ -0,0 +1,34 @@
+// Copyright David Abrahams 2006. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP
+# define BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP
+# include <boost/preprocessor/seq/for_each_i.hpp>
+# include <boost/preprocessor/seq/enum.hpp>
+# include <boost/preprocessor/comma_if.hpp>
+# include <boost/preprocessor/cat.hpp>
+#endif // BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP
+
+// BOOST_concept(SomeName, (p1)(p2)...(pN))
+//
+// Expands to "template <class p1, class p2, ...class pN> struct SomeName"
+//
+// Also defines an equivalent SomeNameConcept for backward compatibility.
+// Maybe in the next release we can kill off the "Concept" suffix for good.
+# define BOOST_concept(name, params)                                            \
+    template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) >       \
+    struct name; /* forward declaration */                                      \
+                                                                                \
+    template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) >       \
+    struct BOOST_PP_CAT(name,Concept)                                           \
+      : name< BOOST_PP_SEQ_ENUM(params) >                                       \
+    {                                                                           \
+    };                                                                          \
+                                                                                \
+    template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) >       \
+    struct name                                                                
+    
+// Helper for BOOST_concept, above.
+# define BOOST_CONCEPT_typename(r, ignored, index, t) \
+    BOOST_PP_COMMA_IF(index) typename t
+
diff --git a/vendor/pdalboost/boost/concept/detail/concept_undef.hpp b/vendor/pdalboost/boost/concept/detail/concept_undef.hpp
new file mode 100644
index 0000000..713db89
--- /dev/null
+++ b/vendor/pdalboost/boost/concept/detail/concept_undef.hpp
@@ -0,0 +1,5 @@
+// Copyright David Abrahams 2006. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+# undef BOOST_concept_typename
+# undef BOOST_concept
diff --git a/vendor/pdalboost/boost/concept/detail/general.hpp b/vendor/pdalboost/boost/concept/detail/general.hpp
new file mode 100644
index 0000000..43ee4a4
--- /dev/null
+++ b/vendor/pdalboost/boost/concept/detail/general.hpp
@@ -0,0 +1,77 @@
+// Copyright David Abrahams 2006. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP
+# define BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP
+
+# include <boost/config.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/concept/detail/backward_compatibility.hpp>
+
+# ifdef BOOST_OLD_CONCEPT_SUPPORT
+#  include <boost/concept/detail/has_constraints.hpp>
+#  include <boost/mpl/if.hpp>
+# endif
+
+// This implementation works on Comeau and GCC, all the way back to
+// 2.95
+namespace pdalboost { namespace concepts {
+
+template <class ModelFn>
+struct requirement_;
+
+namespace detail
+{
+  template <void(*)()> struct instantiate {};
+}
+
+template <class Model>
+struct requirement
+{
+    static void failed() { ((Model*)0)->~Model(); }
+};
+
+struct failed {};
+
+template <class Model>
+struct requirement<failed ************ Model::************>
+{
+    static void failed() { ((Model*)0)->~Model(); }
+};
+
+# ifdef BOOST_OLD_CONCEPT_SUPPORT
+
+template <class Model>
+struct constraint
+{
+    static void failed() { ((Model*)0)->constraints(); }
+};
+  
+template <class Model>
+struct requirement_<void(*)(Model)>
+  : mpl::if_<
+        concepts::not_satisfied<Model>
+      , constraint<Model>
+      , requirement<failed ************ Model::************>
+    >::type
+{};
+  
+# else
+
+// For GCC-2.x, these can't have exactly the same name
+template <class Model>
+struct requirement_<void(*)(Model)>
+    : requirement<failed ************ Model::************>
+{};
+  
+# endif
+
+#  define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )             \
+    typedef ::pdalboost::concepts::detail::instantiate<          \
+    &::pdalboost::concepts::requirement_<ModelFnPtr>::failed>    \
+      BOOST_PP_CAT(boost_concept_check,__LINE__)             \
+      BOOST_ATTRIBUTE_UNUSED
+
+}}
+
+#endif // BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP
diff --git a/vendor/pdalboost/boost/concept/detail/has_constraints.hpp b/vendor/pdalboost/boost/concept/detail/has_constraints.hpp
new file mode 100644
index 0000000..81ef47f
--- /dev/null
+++ b/vendor/pdalboost/boost/concept/detail/has_constraints.hpp
@@ -0,0 +1,50 @@
+// Copyright David Abrahams 2006. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP
+# define BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP
+
+# include <boost/mpl/bool.hpp>
+# include <boost/detail/workaround.hpp>
+# include <boost/concept/detail/backward_compatibility.hpp>
+
+namespace pdalboost { namespace concepts {
+
+namespace detail
+{ 
+
+// Here we implement the metafunction that detects whether a
+// constraints metafunction exists
+  typedef char yes;
+  typedef char (&no)[2];
+
+  template <class Model, void (Model::*)()>
+  struct wrap_constraints {};
+    
+#if BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580) || defined(__CUDACC__)
+  // Work around the following bogus error in Sun Studio 11, by
+  // turning off the has_constraints function entirely:
+  //    Error: complex expression not allowed in dependent template
+  //    argument expression
+  inline no has_constraints_(...);
+#else
+  template <class Model>
+  inline yes has_constraints_(Model*, wrap_constraints<Model,&Model::constraints>* = 0);
+  inline no has_constraints_(...);
+#endif
+}
+
+// This would be called "detail::has_constraints," but it has a strong
+// tendency to show up in error messages.
+template <class Model>
+struct not_satisfied
+{
+    BOOST_STATIC_CONSTANT(
+        bool
+      , value = sizeof( detail::has_constraints_((Model*)0) ) == sizeof(detail::yes) );
+    typedef mpl::bool_<value> type;
+};
+
+}} // namespace pdalboost::concepts::detail
+
+#endif // BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP
diff --git a/vendor/pdalboost/boost/concept/detail/msvc.hpp b/vendor/pdalboost/boost/concept/detail/msvc.hpp
new file mode 100644
index 0000000..99d8958
--- /dev/null
+++ b/vendor/pdalboost/boost/concept/detail/msvc.hpp
@@ -0,0 +1,123 @@
+// Copyright David Abrahams 2006. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
+# define BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
+
+# include <boost/preprocessor/cat.hpp>
+# include <boost/concept/detail/backward_compatibility.hpp>
+# include <boost/config.hpp>
+
+# ifdef BOOST_OLD_CONCEPT_SUPPORT
+#  include <boost/concept/detail/has_constraints.hpp>
+#  include <boost/mpl/if.hpp>
+# endif
+
+# ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable:4100)
+# endif
+
+namespace pdalboost { namespace concepts {
+
+
+template <class Model>
+struct check
+{
+    virtual void failed(Model* x)
+    {
+        x->~Model();
+    }
+};
+
+# ifndef BOOST_NO_PARTIAL_SPECIALIZATION
+struct failed {};
+template <class Model>
+struct check<failed ************ Model::************>
+{
+    virtual void failed(Model* x)
+    {
+        x->~Model();
+    }
+};
+# endif
+
+# ifdef BOOST_OLD_CONCEPT_SUPPORT
+  
+namespace detail
+{
+  // No need for a virtual function here, since evaluating
+  // not_satisfied below will have already instantiated the
+  // constraints() member.
+  struct constraint {};
+}
+
+template <class Model>
+struct require
+  : mpl::if_c<
+        not_satisfied<Model>::value
+      , detail::constraint
+# ifndef BOOST_NO_PARTIAL_SPECIALIZATION
+      , check<Model>
+# else
+      , check<failed ************ Model::************>
+# endif 
+        >::type
+{};
+      
+# else
+  
+template <class Model>
+struct require
+# ifndef BOOST_NO_PARTIAL_SPECIALIZATION
+    : check<Model>
+# else
+    : check<failed ************ Model::************>
+# endif 
+{};
+  
+# endif
+    
+# if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+
+//
+// The iterator library sees some really strange errors unless we
+// do things this way.
+//
+template <class Model>
+struct require<void(*)(Model)>
+{
+    virtual void failed(Model*)
+    {
+        require<Model>();
+    }
+};
+
+# define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )      \
+enum                                                \
+{                                                   \
+    BOOST_PP_CAT(boost_concept_check,__LINE__) =    \
+    sizeof(::pdalboost::concepts::require<ModelFnPtr>)    \
+}
+  
+# else // Not vc-7.1
+  
+template <class Model>
+require<Model>
+require_(void(*)(Model));
+  
+# define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )          \
+enum                                                    \
+{                                                       \
+    BOOST_PP_CAT(boost_concept_check,__LINE__) =        \
+      sizeof(::pdalboost::concepts::require_((ModelFnPtr)0)) \
+}
+  
+# endif
+}}
+
+# ifdef BOOST_MSVC
+#  pragma warning(pop)
+# endif
+
+#endif // BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
diff --git a/vendor/pdalboost/boost/concept/usage.hpp b/vendor/pdalboost/boost/concept/usage.hpp
new file mode 100644
index 0000000..6008713
--- /dev/null
+++ b/vendor/pdalboost/boost/concept/usage.hpp
@@ -0,0 +1,36 @@
+// Copyright David Abrahams 2006. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_CONCEPT_USAGE_DWA2006919_HPP
+# define BOOST_CONCEPT_USAGE_DWA2006919_HPP
+
+# include <boost/concept/assert.hpp>
+# include <boost/detail/workaround.hpp>
+# include <boost/concept/detail/backward_compatibility.hpp>
+
+namespace pdalboost { namespace concepts { 
+
+template <class Model>
+struct usage_requirements
+{
+    ~usage_requirements() { ((Model*)0)->~Model(); }
+};
+
+#  if BOOST_WORKAROUND(__GNUC__, <= 3)
+
+#   define BOOST_CONCEPT_USAGE(model)                                    \
+      model(); /* at least 2.96 and 3.4.3 both need this :( */           \
+      BOOST_CONCEPT_ASSERT((pdalboost::concepts::usage_requirements<model>)); \
+      ~model()
+
+#  else
+
+#   define BOOST_CONCEPT_USAGE(model)                                    \
+      BOOST_CONCEPT_ASSERT((pdalboost::concepts::usage_requirements<model>)); \
+      ~model()
+
+#  endif
+
+}} // namespace pdalboost::concepts
+
+#endif // BOOST_CONCEPT_USAGE_DWA2006919_HPP
diff --git a/vendor/pdalboost/boost/concept_check.hpp b/vendor/pdalboost/boost/concept_check.hpp
new file mode 100644
index 0000000..6701433
--- /dev/null
+++ b/vendor/pdalboost/boost/concept_check.hpp
@@ -0,0 +1,1082 @@
+//
+// (C) Copyright Jeremy Siek 2000.
+// Copyright 2002 The Trustees of Indiana University.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Revision History:
+//   05 May   2001: Workarounds for HP aCC from Thomas Matelich. (Jeremy Siek)
+//   02 April 2001: Removed limits header altogether. (Jeremy Siek)
+//   01 April 2001: Modified to use new <boost/limits.hpp> header. (JMaddock)
+//
+
+// See http://www.boost.org/libs/concept_check for documentation.
+
+#ifndef BOOST_CONCEPT_CHECKS_HPP
+# define BOOST_CONCEPT_CHECKS_HPP
+
+# include <boost/concept/assert.hpp>
+
+# include <iterator>
+# include <boost/type_traits/conversion_traits.hpp>
+# include <utility>
+# include <boost/type_traits/is_same.hpp>
+# include <boost/type_traits/is_void.hpp>
+# include <boost/mpl/assert.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/detail/workaround.hpp>
+
+# include <boost/concept/usage.hpp>
+# include <boost/concept/detail/concept_def.hpp>
+
+#if (defined _MSC_VER)
+# pragma warning( push )
+# pragma warning( disable : 4510 ) // default constructor could not be generated
+# pragma warning( disable : 4610 ) // object 'class' can never be instantiated - user-defined constructor required
+#endif
+
+namespace pdalboost
+{
+
+  //
+  // Backward compatibility
+  //
+
+  template <class Model>
+  inline void function_requires(Model* = 0)
+  {
+      BOOST_CONCEPT_ASSERT((Model));
+  }
+  template <class T> inline void ignore_unused_variable_warning(T const&) {}
+
+#  define BOOST_CLASS_REQUIRE(type_var, ns, concept)    \
+    BOOST_CONCEPT_ASSERT((ns::concept<type_var>))
+
+#  define BOOST_CLASS_REQUIRE2(type_var1, type_var2, ns, concept)   \
+    BOOST_CONCEPT_ASSERT((ns::concept<type_var1,type_var2>))
+
+#  define BOOST_CLASS_REQUIRE3(tv1, tv2, tv3, ns, concept)  \
+    BOOST_CONCEPT_ASSERT((ns::concept<tv1,tv2,tv3>))
+
+#  define BOOST_CLASS_REQUIRE4(tv1, tv2, tv3, tv4, ns, concept) \
+    BOOST_CONCEPT_ASSERT((ns::concept<tv1,tv2,tv3,tv4>))
+
+
+  //
+  // Begin concept definitions
+  //
+  BOOST_concept(Integer, (T))
+  {
+      BOOST_CONCEPT_USAGE(Integer)
+        {
+            x.error_type_must_be_an_integer_type();
+        }
+   private:
+      T x;
+  };
+
+  template <> struct Integer<char> {};
+  template <> struct Integer<signed char> {};
+  template <> struct Integer<unsigned char> {};
+  template <> struct Integer<short> {};
+  template <> struct Integer<unsigned short> {};
+  template <> struct Integer<int> {};
+  template <> struct Integer<unsigned int> {};
+  template <> struct Integer<long> {};
+  template <> struct Integer<unsigned long> {};
+# if defined(BOOST_HAS_LONG_LONG)
+  template <> struct Integer< ::pdalboost::long_long_type> {};
+  template <> struct Integer< ::pdalboost::ulong_long_type> {};
+# elif defined(BOOST_HAS_MS_INT64)
+  template <> struct Integer<__int64> {};
+  template <> struct Integer<unsigned __int64> {};
+# endif
+
+  BOOST_concept(SignedInteger,(T)) {
+    BOOST_CONCEPT_USAGE(SignedInteger) {
+      x.error_type_must_be_a_signed_integer_type();
+    }
+   private:
+    T x;
+  };
+  template <> struct SignedInteger<signed char> { };
+  template <> struct SignedInteger<short> {};
+  template <> struct SignedInteger<int> {};
+  template <> struct SignedInteger<long> {};
+# if defined(BOOST_HAS_LONG_LONG)
+  template <> struct SignedInteger< ::pdalboost::long_long_type> {};
+# elif defined(BOOST_HAS_MS_INT64)
+  template <> struct SignedInteger<__int64> {};
+# endif
+
+  BOOST_concept(UnsignedInteger,(T)) {
+    BOOST_CONCEPT_USAGE(UnsignedInteger) {
+      x.error_type_must_be_an_unsigned_integer_type();
+    }
+   private:
+    T x;
+  };
+
+  template <> struct UnsignedInteger<unsigned char> {};
+  template <> struct UnsignedInteger<unsigned short> {};
+  template <> struct UnsignedInteger<unsigned int> {};
+  template <> struct UnsignedInteger<unsigned long> {};
+# if defined(BOOST_HAS_LONG_LONG)
+  template <> struct UnsignedInteger< ::pdalboost::ulong_long_type> {};
+# elif defined(BOOST_HAS_MS_INT64)
+  template <> struct UnsignedInteger<unsigned __int64> {};
+# endif
+
+  //===========================================================================
+  // Basic Concepts
+
+  BOOST_concept(DefaultConstructible,(TT))
+  {
+    BOOST_CONCEPT_USAGE(DefaultConstructible) {
+      TT a;               // require default constructor
+      ignore_unused_variable_warning(a);
+    }
+  };
+
+  BOOST_concept(Assignable,(TT))
+  {
+    BOOST_CONCEPT_USAGE(Assignable) {
+#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
+      a = b;             // require assignment operator
+#endif
+      const_constraints(b);
+    }
+   private:
+    void const_constraints(const TT& x) {
+#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
+      a = x;              // const required for argument to assignment
+#else
+      ignore_unused_variable_warning(x);
+#endif
+    }
+   private:
+    TT a;
+    TT b;
+  };
+
+
+  BOOST_concept(CopyConstructible,(TT))
+  {
+    BOOST_CONCEPT_USAGE(CopyConstructible) {
+      TT a(b);            // require copy constructor
+      TT* ptr = &a;       // require address of operator
+      const_constraints(a);
+      ignore_unused_variable_warning(ptr);
+    }
+   private:
+    void const_constraints(const TT& a) {
+      TT c(a);            // require const copy constructor
+      const TT* ptr = &a; // require const address of operator
+      ignore_unused_variable_warning(c);
+      ignore_unused_variable_warning(ptr);
+    }
+    TT b;
+  };
+
+  // The SGI STL version of Assignable requires copy constructor and operator=
+  BOOST_concept(SGIAssignable,(TT))
+  {
+    BOOST_CONCEPT_USAGE(SGIAssignable) {
+      TT c(a);
+#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
+      a = b;              // require assignment operator
+#endif
+      const_constraints(b);
+      ignore_unused_variable_warning(c);
+    }
+   private:
+    void const_constraints(const TT& x) {
+      TT c(x);
+#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
+      a = x;              // const required for argument to assignment
+#endif
+      ignore_unused_variable_warning(c);
+    }
+    TT a;
+    TT b;
+  };
+
+  BOOST_concept(Convertible,(X)(Y))
+  {
+    BOOST_CONCEPT_USAGE(Convertible) {
+      Y y = x;
+      ignore_unused_variable_warning(y);
+    }
+   private:
+    X x;
+  };
+
+  // The C++ standard requirements for many concepts talk about return
+  // types that must be "convertible to bool".  The problem with this
+  // requirement is that it leaves the door open for evil proxies that
+  // define things like operator|| with strange return types.  Two
+  // possible solutions are:
+  // 1) require the return type to be exactly bool
+  // 2) stay with convertible to bool, and also
+  //    specify stuff about all the logical operators.
+  // For now we just test for convertible to bool.
+  template <class TT>
+  void require_boolean_expr(const TT& t) {
+    bool x = t;
+    ignore_unused_variable_warning(x);
+  }
+
+  BOOST_concept(EqualityComparable,(TT))
+  {
+    BOOST_CONCEPT_USAGE(EqualityComparable) {
+      require_boolean_expr(a == b);
+      require_boolean_expr(a != b);
+    }
+   private:
+    TT a, b;
+  };
+
+  BOOST_concept(LessThanComparable,(TT))
+  {
+    BOOST_CONCEPT_USAGE(LessThanComparable) {
+      require_boolean_expr(a < b);
+    }
+   private:
+    TT a, b;
+  };
+
+  // This is equivalent to SGI STL's LessThanComparable.
+  BOOST_concept(Comparable,(TT))
+  {
+    BOOST_CONCEPT_USAGE(Comparable) {
+      require_boolean_expr(a < b);
+      require_boolean_expr(a > b);
+      require_boolean_expr(a <= b);
+      require_boolean_expr(a >= b);
+    }
+   private:
+    TT a, b;
+  };
+
+#define BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(OP,NAME)    \
+  BOOST_concept(NAME, (First)(Second))                          \
+  {                                                             \
+      BOOST_CONCEPT_USAGE(NAME) { (void)constraints_(); }                         \
+     private:                                                   \
+        bool constraints_() { return a OP b; }                  \
+        First a;                                                \
+        Second b;                                               \
+  }
+
+#define BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(OP,NAME)    \
+  BOOST_concept(NAME, (Ret)(First)(Second))                 \
+  {                                                         \
+      BOOST_CONCEPT_USAGE(NAME) { (void)constraints_(); }                     \
+  private:                                                  \
+      Ret constraints_() { return a OP b; }                 \
+      First a;                                              \
+      Second b;                                             \
+  }
+
+  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(==, EqualOp);
+  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(!=, NotEqualOp);
+  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<, LessThanOp);
+  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<=, LessEqualOp);
+  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>, GreaterThanOp);
+  BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>=, GreaterEqualOp);
+
+  BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(+, PlusOp);
+  BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(*, TimesOp);
+  BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(/, DivideOp);
+  BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(-, SubtractOp);
+  BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(%, ModOp);
+
+  //===========================================================================
+  // Function Object Concepts
+
+  BOOST_concept(Generator,(Func)(Return))
+  {
+      BOOST_CONCEPT_USAGE(Generator) { test(is_void<Return>()); }
+
+   private:
+      void test(pdalboost::mpl::false_)
+      {
+          // Do we really want a reference here?
+          const Return& r = f();
+          ignore_unused_variable_warning(r);
+      }
+
+      void test(pdalboost::mpl::true_)
+      {
+          f();
+      }
+
+      Func f;
+  };
+
+  BOOST_concept(UnaryFunction,(Func)(Return)(Arg))
+  {
+      BOOST_CONCEPT_USAGE(UnaryFunction) { test(is_void<Return>()); }
+
+   private:
+      void test(pdalboost::mpl::false_)
+      {
+          f(arg);               // "priming the pump" this way keeps msvc6 happy (ICE)
+          Return r = f(arg);
+          ignore_unused_variable_warning(r);
+      }
+
+      void test(pdalboost::mpl::true_)
+      {
+          f(arg);
+      }
+
+#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \
+                      && BOOST_WORKAROUND(__GNUC__, > 3)))
+      // Declare a dummy construktor to make gcc happy.
+      // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.
+      // (warning: non-static reference "const double& pdalboost::UnaryFunction<YourClassHere>::arg"
+      // in class without a constructor [-Wuninitialized])
+      UnaryFunction();
+#endif
+
+      Func f;
+      Arg arg;
+  };
+
+  BOOST_concept(BinaryFunction,(Func)(Return)(First)(Second))
+  {
+      BOOST_CONCEPT_USAGE(BinaryFunction) { test(is_void<Return>()); }
+   private:
+      void test(pdalboost::mpl::false_)
+      {
+          f(first,second);
+          Return r = f(first, second); // require operator()
+          (void)r;
+      }
+
+      void test(pdalboost::mpl::true_)
+      {
+          f(first,second);
+      }
+
+#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \
+                      && BOOST_WORKAROUND(__GNUC__, > 3)))
+      // Declare a dummy constructor to make gcc happy.
+      // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.
+      // (warning: non-static reference "const double& pdalboost::BinaryFunction<YourClassHere>::arg"
+      // in class without a constructor [-Wuninitialized])
+      BinaryFunction();
+#endif
+
+      Func f;
+      First first;
+      Second second;
+  };
+
+  BOOST_concept(UnaryPredicate,(Func)(Arg))
+  {
+    BOOST_CONCEPT_USAGE(UnaryPredicate) {
+      require_boolean_expr(f(arg)); // require operator() returning bool
+    }
+   private:
+#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \
+                      && BOOST_WORKAROUND(__GNUC__, > 3)))
+      // Declare a dummy constructor to make gcc happy.
+      // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.
+      // (warning: non-static reference "const double& pdalboost::UnaryPredicate<YourClassHere>::arg"
+      // in class without a constructor [-Wuninitialized])
+      UnaryPredicate();
+#endif
+
+    Func f;
+    Arg arg;
+  };
+
+  BOOST_concept(BinaryPredicate,(Func)(First)(Second))
+  {
+    BOOST_CONCEPT_USAGE(BinaryPredicate) {
+      require_boolean_expr(f(a, b)); // require operator() returning bool
+    }
+   private:
+#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \
+                      && BOOST_WORKAROUND(__GNUC__, > 3)))
+      // Declare a dummy constructor to make gcc happy.
+      // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.
+      // (warning: non-static reference "const double& pdalboost::BinaryPredicate<YourClassHere>::arg"
+      // in class without a constructor [-Wuninitialized])
+      BinaryPredicate();
+#endif
+    Func f;
+    First a;
+    Second b;
+  };
+
+  // use this when functor is used inside a container class like std::set
+  BOOST_concept(Const_BinaryPredicate,(Func)(First)(Second))
+    : BinaryPredicate<Func, First, Second>
+  {
+    BOOST_CONCEPT_USAGE(Const_BinaryPredicate) {
+      const_constraints(f);
+    }
+   private:
+    void const_constraints(const Func& fun) {
+      // operator() must be a const member function
+      require_boolean_expr(fun(a, b));
+    }
+#if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \
+                      && BOOST_WORKAROUND(__GNUC__, > 3)))
+      // Declare a dummy constructor to make gcc happy.
+      // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.
+      // (warning: non-static reference "const double& pdalboost::Const_BinaryPredicate<YourClassHere>::arg"
+      // in class without a constructor [-Wuninitialized])
+      Const_BinaryPredicate();
+#endif
+
+    Func f;
+    First a;
+    Second b;
+  };
+
+  BOOST_concept(AdaptableGenerator,(Func)(Return))
+    : Generator<Func, typename Func::result_type>
+  {
+      typedef typename Func::result_type result_type;
+
+      BOOST_CONCEPT_USAGE(AdaptableGenerator)
+      {
+          BOOST_CONCEPT_ASSERT((Convertible<result_type, Return>));
+      }
+  };
+
+  BOOST_concept(AdaptableUnaryFunction,(Func)(Return)(Arg))
+    : UnaryFunction<Func, typename Func::result_type, typename Func::argument_type>
+  {
+      typedef typename Func::argument_type argument_type;
+      typedef typename Func::result_type result_type;
+
+      ~AdaptableUnaryFunction()
+      {
+          BOOST_CONCEPT_ASSERT((Convertible<result_type, Return>));
+          BOOST_CONCEPT_ASSERT((Convertible<Arg, argument_type>));
+      }
+  };
+
+  BOOST_concept(AdaptableBinaryFunction,(Func)(Return)(First)(Second))
+    : BinaryFunction<
+          Func
+        , typename Func::result_type
+        , typename Func::first_argument_type
+        , typename Func::second_argument_type
+      >
+  {
+      typedef typename Func::first_argument_type first_argument_type;
+      typedef typename Func::second_argument_type second_argument_type;
+      typedef typename Func::result_type result_type;
+
+      ~AdaptableBinaryFunction()
+      {
+          BOOST_CONCEPT_ASSERT((Convertible<result_type, Return>));
+          BOOST_CONCEPT_ASSERT((Convertible<First, first_argument_type>));
+          BOOST_CONCEPT_ASSERT((Convertible<Second, second_argument_type>));
+      }
+  };
+
+  BOOST_concept(AdaptablePredicate,(Func)(Arg))
+    : UnaryPredicate<Func, Arg>
+    , AdaptableUnaryFunction<Func, bool, Arg>
+  {
+  };
+
+  BOOST_concept(AdaptableBinaryPredicate,(Func)(First)(Second))
+    : BinaryPredicate<Func, First, Second>
+    , AdaptableBinaryFunction<Func, bool, First, Second>
+  {
+  };
+
+  //===========================================================================
+  // Iterator Concepts
+
+  BOOST_concept(InputIterator,(TT))
+    : Assignable<TT>
+    , EqualityComparable<TT>
+  {
+      typedef typename std::iterator_traits<TT>::value_type value_type;
+      typedef typename std::iterator_traits<TT>::difference_type difference_type;
+      typedef typename std::iterator_traits<TT>::reference reference;
+      typedef typename std::iterator_traits<TT>::pointer pointer;
+      typedef typename std::iterator_traits<TT>::iterator_category iterator_category;
+
+      BOOST_CONCEPT_USAGE(InputIterator)
+      {
+        BOOST_CONCEPT_ASSERT((SignedInteger<difference_type>));
+        BOOST_CONCEPT_ASSERT((Convertible<iterator_category, std::input_iterator_tag>));
+
+        TT j(i);
+        (void)*i;           // require dereference operator
+        ++j;                // require preincrement operator
+        i++;                // require postincrement operator
+      }
+   private:
+    TT i;
+  };
+
+  BOOST_concept(OutputIterator,(TT)(ValueT))
+    : Assignable<TT>
+  {
+    BOOST_CONCEPT_USAGE(OutputIterator) {
+
+      ++i;                // require preincrement operator
+      i++;                // require postincrement operator
+      *i++ = t;           // require postincrement and assignment
+    }
+   private:
+    TT i, j;
+    ValueT t;
+  };
+
+  BOOST_concept(ForwardIterator,(TT))
+    : InputIterator<TT>
+  {
+      BOOST_CONCEPT_USAGE(ForwardIterator)
+      {
+          BOOST_CONCEPT_ASSERT((Convertible<
+              BOOST_DEDUCED_TYPENAME ForwardIterator::iterator_category
+            , std::forward_iterator_tag
+          >));
+
+          typename InputIterator<TT>::reference r = *i;
+          ignore_unused_variable_warning(r);
+      }
+
+   private:
+      TT i;
+  };
+
+  BOOST_concept(Mutable_ForwardIterator,(TT))
+    : ForwardIterator<TT>
+  {
+      BOOST_CONCEPT_USAGE(Mutable_ForwardIterator) {
+        *i++ = *j;         // require postincrement and assignment
+      }
+   private:
+      TT i, j;
+  };
+
+  BOOST_concept(BidirectionalIterator,(TT))
+    : ForwardIterator<TT>
+  {
+      BOOST_CONCEPT_USAGE(BidirectionalIterator)
+      {
+          BOOST_CONCEPT_ASSERT((Convertible<
+              BOOST_DEDUCED_TYPENAME BidirectionalIterator::iterator_category
+            , std::bidirectional_iterator_tag
+          >));
+
+          --i;                // require predecrement operator
+          i--;                // require postdecrement operator
+      }
+   private:
+      TT i;
+  };
+
+  BOOST_concept(Mutable_BidirectionalIterator,(TT))
+    : BidirectionalIterator<TT>
+    , Mutable_ForwardIterator<TT>
+  {
+      BOOST_CONCEPT_USAGE(Mutable_BidirectionalIterator)
+      {
+          *i-- = *j;                  // require postdecrement and assignment
+      }
+   private:
+      TT i, j;
+  };
+
+  BOOST_concept(RandomAccessIterator,(TT))
+    : BidirectionalIterator<TT>
+    , Comparable<TT>
+  {
+      BOOST_CONCEPT_USAGE(RandomAccessIterator)
+      {
+          BOOST_CONCEPT_ASSERT((Convertible<
+              BOOST_DEDUCED_TYPENAME BidirectionalIterator<TT>::iterator_category
+            , std::random_access_iterator_tag
+          >));
+
+          i += n;             // require assignment addition operator
+          i = i + n; i = n + i; // require addition with difference type
+          i -= n;             // require assignment subtraction operator
+          i = i - n;                  // require subtraction with difference type
+          n = i - j;                  // require difference operator
+          (void)i[n];                 // require element access operator
+      }
+
+   private:
+    TT a, b;
+    TT i, j;
+      typename std::iterator_traits<TT>::difference_type n;
+  };
+
+  BOOST_concept(Mutable_RandomAccessIterator,(TT))
+    : RandomAccessIterator<TT>
+    , Mutable_BidirectionalIterator<TT>
+  {
+      BOOST_CONCEPT_USAGE(Mutable_RandomAccessIterator)
+      {
+          i[n] = *i;                  // require element access and assignment
+      }
+   private:
+    TT i;
+    typename std::iterator_traits<TT>::difference_type n;
+  };
+
+  //===========================================================================
+  // Container s
+
+  BOOST_concept(Container,(C))
+    : Assignable<C>
+  {
+    typedef typename C::value_type value_type;
+    typedef typename C::difference_type difference_type;
+    typedef typename C::size_type size_type;
+    typedef typename C::const_reference const_reference;
+    typedef typename C::const_pointer const_pointer;
+    typedef typename C::const_iterator const_iterator;
+
+      BOOST_CONCEPT_USAGE(Container)
+      {
+          BOOST_CONCEPT_ASSERT((InputIterator<const_iterator>));
+          const_constraints(c);
+      }
+
+   private:
+      void const_constraints(const C& cc) {
+          i = cc.begin();
+          i = cc.end();
+          n = cc.size();
+          n = cc.max_size();
+          b = cc.empty();
+      }
+      C c;
+      bool b;
+      const_iterator i;
+      size_type n;
+  };
+
+  BOOST_concept(Mutable_Container,(C))
+    : Container<C>
+  {
+      typedef typename C::reference reference;
+      typedef typename C::iterator iterator;
+      typedef typename C::pointer pointer;
+
+      BOOST_CONCEPT_USAGE(Mutable_Container)
+      {
+          BOOST_CONCEPT_ASSERT((
+               Assignable<typename Mutable_Container::value_type>));
+
+          BOOST_CONCEPT_ASSERT((InputIterator<iterator>));
+
+          i = c.begin();
+          i = c.end();
+          c.swap(c2);
+      }
+
+   private:
+      iterator i;
+      C c, c2;
+  };
+
+  BOOST_concept(ForwardContainer,(C))
+    : Container<C>
+  {
+      BOOST_CONCEPT_USAGE(ForwardContainer)
+      {
+          BOOST_CONCEPT_ASSERT((
+               ForwardIterator<
+                    typename ForwardContainer::const_iterator
+               >));
+      }
+  };
+
+  BOOST_concept(Mutable_ForwardContainer,(C))
+    : ForwardContainer<C>
+    , Mutable_Container<C>
+  {
+      BOOST_CONCEPT_USAGE(Mutable_ForwardContainer)
+      {
+          BOOST_CONCEPT_ASSERT((
+               Mutable_ForwardIterator<
+                   typename Mutable_ForwardContainer::iterator
+               >));
+      }
+  };
+
+  BOOST_concept(ReversibleContainer,(C))
+    : ForwardContainer<C>
+  {
+      typedef typename
+        C::const_reverse_iterator
+      const_reverse_iterator;
+
+      BOOST_CONCEPT_USAGE(ReversibleContainer)
+      {
+          BOOST_CONCEPT_ASSERT((
+              BidirectionalIterator<
+                  typename ReversibleContainer::const_iterator>));
+
+          BOOST_CONCEPT_ASSERT((BidirectionalIterator<const_reverse_iterator>));
+
+          const_constraints(c);
+      }
+   private:
+      void const_constraints(const C& cc)
+      {
+          const_reverse_iterator i = cc.rbegin();
+          i = cc.rend();
+      }
+      C c;
+  };
+
+  BOOST_concept(Mutable_ReversibleContainer,(C))
+    : Mutable_ForwardContainer<C>
+    , ReversibleContainer<C>
+  {
+      typedef typename C::reverse_iterator reverse_iterator;
+
+      BOOST_CONCEPT_USAGE(Mutable_ReversibleContainer)
+      {
+          typedef typename Mutable_ForwardContainer<C>::iterator iterator;
+          BOOST_CONCEPT_ASSERT((Mutable_BidirectionalIterator<iterator>));
+          BOOST_CONCEPT_ASSERT((Mutable_BidirectionalIterator<reverse_iterator>));
+
+          reverse_iterator i = c.rbegin();
+          i = c.rend();
+      }
+   private:
+      C c;
+  };
+
+  BOOST_concept(RandomAccessContainer,(C))
+    : ReversibleContainer<C>
+  {
+      typedef typename C::size_type size_type;
+      typedef typename C::const_reference const_reference;
+
+      BOOST_CONCEPT_USAGE(RandomAccessContainer)
+      {
+          BOOST_CONCEPT_ASSERT((
+              RandomAccessIterator<
+                  typename RandomAccessContainer::const_iterator
+              >));
+
+          const_constraints(c);
+      }
+   private:
+      void const_constraints(const C& cc)
+      {
+          const_reference r = cc[n];
+          ignore_unused_variable_warning(r);
+      }
+
+      C c;
+      size_type n;
+  };
+
+  BOOST_concept(Mutable_RandomAccessContainer,(C))
+    : Mutable_ReversibleContainer<C>
+    , RandomAccessContainer<C>
+  {
+   private:
+      typedef Mutable_RandomAccessContainer self;
+   public:
+      BOOST_CONCEPT_USAGE(Mutable_RandomAccessContainer)
+      {
+          BOOST_CONCEPT_ASSERT((Mutable_RandomAccessIterator<typename self::iterator>));
+          BOOST_CONCEPT_ASSERT((Mutable_RandomAccessIterator<typename self::reverse_iterator>));
+
+          typename self::reference r = c[i];
+          ignore_unused_variable_warning(r);
+      }
+
+   private:
+      typename Mutable_ReversibleContainer<C>::size_type i;
+      C c;
+  };
+
+  // A Sequence is inherently mutable
+  BOOST_concept(Sequence,(S))
+    : Mutable_ForwardContainer<S>
+      // Matt Austern's book puts DefaultConstructible here, the C++
+      // standard places it in Container --JGS
+      // ... so why aren't we following the standard?  --DWA
+    , DefaultConstructible<S>
+  {
+      BOOST_CONCEPT_USAGE(Sequence)
+      {
+          S
+              c(n, t),
+              c2(first, last);
+
+          c.insert(p, t);
+          c.insert(p, n, t);
+          c.insert(p, first, last);
+
+          c.erase(p);
+          c.erase(p, q);
+
+          typename Sequence::reference r = c.front();
+
+          ignore_unused_variable_warning(c);
+          ignore_unused_variable_warning(c2);
+          ignore_unused_variable_warning(r);
+          const_constraints(c);
+      }
+   private:
+      void const_constraints(const S& c) {
+          typename Sequence::const_reference r = c.front();
+          ignore_unused_variable_warning(r);
+      }
+
+      typename S::value_type t;
+      typename S::size_type n;
+      typename S::value_type* first, *last;
+      typename S::iterator p, q;
+  };
+
+  BOOST_concept(FrontInsertionSequence,(S))
+    : Sequence<S>
+  {
+      BOOST_CONCEPT_USAGE(FrontInsertionSequence)
+      {
+          c.push_front(t);
+          c.pop_front();
+      }
+   private:
+      S c;
+      typename S::value_type t;
+  };
+
+  BOOST_concept(BackInsertionSequence,(S))
+    : Sequence<S>
+  {
+      BOOST_CONCEPT_USAGE(BackInsertionSequence)
+      {
+          c.push_back(t);
+          c.pop_back();
+          typename BackInsertionSequence::reference r = c.back();
+          ignore_unused_variable_warning(r);
+          const_constraints(c);
+      }
+   private:
+      void const_constraints(const S& cc) {
+          typename BackInsertionSequence::const_reference
+              r = cc.back();
+          ignore_unused_variable_warning(r);
+      }
+      S c;
+      typename S::value_type t;
+  };
+
+  BOOST_concept(AssociativeContainer,(C))
+    : ForwardContainer<C>
+    , DefaultConstructible<C>
+  {
+      typedef typename C::key_type key_type;
+      typedef typename C::key_compare key_compare;
+      typedef typename C::value_compare value_compare;
+      typedef typename C::iterator iterator;
+
+      BOOST_CONCEPT_USAGE(AssociativeContainer)
+      {
+          i = c.find(k);
+          r = c.equal_range(k);
+          c.erase(k);
+          c.erase(i);
+          c.erase(r.first, r.second);
+          const_constraints(c);
+          BOOST_CONCEPT_ASSERT((BinaryPredicate<key_compare,key_type,key_type>));
+
+          typedef typename AssociativeContainer::value_type value_type_;
+          BOOST_CONCEPT_ASSERT((BinaryPredicate<value_compare,value_type_,value_type_>));
+      }
+
+      // Redundant with the base concept, but it helps below.
+      typedef typename C::const_iterator const_iterator;
+   private:
+      void const_constraints(const C& cc)
+      {
+          ci = cc.find(k);
+          n = cc.count(k);
+          cr = cc.equal_range(k);
+      }
+
+      C c;
+      iterator i;
+      std::pair<iterator,iterator> r;
+      const_iterator ci;
+      std::pair<const_iterator,const_iterator> cr;
+      typename C::key_type k;
+      typename C::size_type n;
+  };
+
+  BOOST_concept(UniqueAssociativeContainer,(C))
+    : AssociativeContainer<C>
+  {
+      BOOST_CONCEPT_USAGE(UniqueAssociativeContainer)
+      {
+          C c(first, last);
+
+          pos_flag = c.insert(t);
+          c.insert(first, last);
+
+          ignore_unused_variable_warning(c);
+      }
+   private:
+      std::pair<typename C::iterator, bool> pos_flag;
+      typename C::value_type t;
+      typename C::value_type* first, *last;
+  };
+
+  BOOST_concept(MultipleAssociativeContainer,(C))
+    : AssociativeContainer<C>
+  {
+      BOOST_CONCEPT_USAGE(MultipleAssociativeContainer)
+      {
+          C c(first, last);
+
+          pos = c.insert(t);
+          c.insert(first, last);
+
+          ignore_unused_variable_warning(c);
+          ignore_unused_variable_warning(pos);
+      }
+   private:
+      typename C::iterator pos;
+      typename C::value_type t;
+      typename C::value_type* first, *last;
+  };
+
+  BOOST_concept(SimpleAssociativeContainer,(C))
+    : AssociativeContainer<C>
+  {
+      BOOST_CONCEPT_USAGE(SimpleAssociativeContainer)
+      {
+          typedef typename C::key_type key_type;
+          typedef typename C::value_type value_type;
+          BOOST_MPL_ASSERT((pdalboost::is_same<key_type,value_type>));
+      }
+  };
+
+  BOOST_concept(PairAssociativeContainer,(C))
+    : AssociativeContainer<C>
+  {
+      BOOST_CONCEPT_USAGE(PairAssociativeContainer)
+      {
+          typedef typename C::key_type key_type;
+          typedef typename C::value_type value_type;
+          typedef typename C::mapped_type mapped_type;
+          typedef std::pair<const key_type, mapped_type> required_value_type;
+          BOOST_MPL_ASSERT((pdalboost::is_same<value_type,required_value_type>));
+      }
+  };
+
+  BOOST_concept(SortedAssociativeContainer,(C))
+    : AssociativeContainer<C>
+    , ReversibleContainer<C>
+  {
+      BOOST_CONCEPT_USAGE(SortedAssociativeContainer)
+      {
+          C
+              c(kc),
+              c2(first, last),
+              c3(first, last, kc);
+
+          p = c.upper_bound(k);
+          p = c.lower_bound(k);
+          r = c.equal_range(k);
+
+          c.insert(p, t);
+
+          ignore_unused_variable_warning(c);
+          ignore_unused_variable_warning(c2);
+          ignore_unused_variable_warning(c3);
+          const_constraints(c);
+      }
+
+      void const_constraints(const C& c)
+      {
+          kc = c.key_comp();
+          vc = c.value_comp();
+
+          cp = c.upper_bound(k);
+          cp = c.lower_bound(k);
+          cr = c.equal_range(k);
+      }
+
+   private:
+      typename C::key_compare kc;
+      typename C::value_compare vc;
+      typename C::value_type t;
+      typename C::key_type k;
+      typedef typename C::iterator iterator;
+      typedef typename C::const_iterator const_iterator;
+
+      typedef SortedAssociativeContainer self;
+      iterator p;
+      const_iterator cp;
+      std::pair<typename self::iterator,typename self::iterator> r;
+      std::pair<typename self::const_iterator,typename self::const_iterator> cr;
+      typename C::value_type* first, *last;
+  };
+
+  // HashedAssociativeContainer
+
+  BOOST_concept(Collection,(C))
+  {
+      BOOST_CONCEPT_USAGE(Collection)
+      {
+        pdalboost::function_requires<pdalboost::InputIteratorConcept<iterator> >();
+        pdalboost::function_requires<pdalboost::InputIteratorConcept<const_iterator> >();
+        pdalboost::function_requires<pdalboost::CopyConstructibleConcept<value_type> >();
+        const_constraints(c);
+        i = c.begin();
+        i = c.end();
+        c.swap(c);
+      }
+
+      void const_constraints(const C& cc) {
+        ci = cc.begin();
+        ci = cc.end();
+        n = cc.size();
+        b = cc.empty();
+      }
+
+    private:
+      typedef typename C::value_type value_type;
+      typedef typename C::iterator iterator;
+      typedef typename C::const_iterator const_iterator;
+      typedef typename C::reference reference;
+      typedef typename C::const_reference const_reference;
+      // typedef typename C::pointer pointer;
+      typedef typename C::difference_type difference_type;
+      typedef typename C::size_type size_type;
+
+      C c;
+      bool b;
+      iterator i;
+      const_iterator ci;
+      size_type n;
+  };
+} // namespace pdalboost
+
+#if (defined _MSC_VER)
+# pragma warning( pop )
+#endif
+
+# include <boost/concept/detail/concept_undef.hpp>
+
+#endif // BOOST_CONCEPT_CHECKS_HPP
+
diff --git a/vendor/pdalboost/boost/config.hpp b/vendor/pdalboost/boost/config.hpp
new file mode 100644
index 0000000..d49bb27
--- /dev/null
+++ b/vendor/pdalboost/boost/config.hpp
@@ -0,0 +1,67 @@
+//  Boost config.hpp configuration header file  ------------------------------//
+
+//  (C) Copyright John Maddock 2002.
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/config for most recent version.
+
+//  Boost config.hpp policy and rationale documentation has been moved to
+//  http://www.boost.org/libs/config
+//
+//  CAUTION: This file is intended to be completely stable -
+//           DO NOT MODIFY THIS FILE!
+//
+
+#ifndef BOOST_CONFIG_HPP
+#define BOOST_CONFIG_HPP
+
+// if we don't have a user config, then use the default location:
+#if !defined(BOOST_USER_CONFIG) && !defined(BOOST_NO_USER_CONFIG)
+#  define BOOST_USER_CONFIG <boost/config/user.hpp>
+#if 0
+// For dependency trackers:
+#  include <boost/config/user.hpp>
+#endif
+#endif
+// include it first:
+#ifdef BOOST_USER_CONFIG
+#  include BOOST_USER_CONFIG
+#endif
+
+// if we don't have a compiler config set, try and find one:
+#if !defined(BOOST_COMPILER_CONFIG) && !defined(BOOST_NO_COMPILER_CONFIG) && !defined(BOOST_NO_CONFIG)
+#  include <boost/config/select_compiler_config.hpp>
+#endif
+// if we have a compiler config, include it now:
+#ifdef BOOST_COMPILER_CONFIG
+#  include BOOST_COMPILER_CONFIG
+#endif
+
+// if we don't have a std library config set, try and find one:
+#if !defined(BOOST_STDLIB_CONFIG) && !defined(BOOST_NO_STDLIB_CONFIG) && !defined(BOOST_NO_CONFIG) && defined(__cplusplus)
+#  include <boost/config/select_stdlib_config.hpp>
+#endif
+// if we have a std library config, include it now:
+#ifdef BOOST_STDLIB_CONFIG
+#  include BOOST_STDLIB_CONFIG
+#endif
+
+// if we don't have a platform config set, try and find one:
+#if !defined(BOOST_PLATFORM_CONFIG) && !defined(BOOST_NO_PLATFORM_CONFIG) && !defined(BOOST_NO_CONFIG)
+#  include <boost/config/select_platform_config.hpp>
+#endif
+// if we have a platform config, include it now:
+#ifdef BOOST_PLATFORM_CONFIG
+#  include BOOST_PLATFORM_CONFIG
+#endif
+
+// get config suffix code:
+#include <boost/config/suffix.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#endif  // BOOST_CONFIG_HPP
diff --git a/vendor/pdalboost/boost/config/abi/borland_prefix.hpp b/vendor/pdalboost/boost/config/abi/borland_prefix.hpp
new file mode 100644
index 0000000..3a0e5ae
--- /dev/null
+++ b/vendor/pdalboost/boost/config/abi/borland_prefix.hpp
@@ -0,0 +1,27 @@
+//  (C) Copyright John Maddock 2003. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  for C++ Builder the following options effect the ABI:
+//
+//  -b (on or off - effect emum sizes)
+//  -Vx  (on or off - empty members)
+//  -Ve (on or off - empty base classes)
+//  -aX (alignment - 5 options).
+//  -pX (Calling convention - 4 options)
+//  -VmX (member pointer size and layout - 5 options)
+//  -VC (on or off, changes name mangling)
+//  -Vl (on or off, changes struct layout).
+
+//  In addition the following warnings are sufficiently annoying (and
+//  unfixable) to have them turned off by default:
+//
+//  8027 - functions containing [for|while] loops are not expanded inline
+//  8026 - functions taking class by value arguments are not expanded inline
+
+#pragma nopushoptwarn
+#  pragma option push -a8 -Vx- -Ve- -b- -pc -Vmv -VC- -Vl- -w-8027 -w-8026
+
+
+
diff --git a/vendor/pdalboost/boost/config/abi/borland_suffix.hpp b/vendor/pdalboost/boost/config/abi/borland_suffix.hpp
new file mode 100644
index 0000000..940535f
--- /dev/null
+++ b/vendor/pdalboost/boost/config/abi/borland_suffix.hpp
@@ -0,0 +1,12 @@
+//  (C) Copyright John Maddock 2003. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#  pragma option pop
+#pragma nopushoptwarn
+
+
+
+
+
diff --git a/vendor/pdalboost/boost/config/abi/msvc_prefix.hpp b/vendor/pdalboost/boost/config/abi/msvc_prefix.hpp
new file mode 100644
index 0000000..97f06cd
--- /dev/null
+++ b/vendor/pdalboost/boost/config/abi/msvc_prefix.hpp
@@ -0,0 +1,22 @@
+//  (C) Copyright John Maddock 2003. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//
+// Boost binaries are built with the compiler's default ABI settings,
+// if the user changes their default alignment in the VS IDE then their
+// code will no longer be binary compatible with the bjam built binaries
+// unless this header is included to force Boost code into a consistent ABI.
+//
+// Note that inclusion of this header is only necessary for libraries with 
+// separate source, header only libraries DO NOT need this as long as all
+// translation units are built with the same options.
+//
+#if defined(_M_X64)
+#  pragma pack(push,16)
+#else
+#  pragma pack(push,8)
+#endif
+
+
diff --git a/vendor/pdalboost/boost/config/abi/msvc_suffix.hpp b/vendor/pdalboost/boost/config/abi/msvc_suffix.hpp
new file mode 100644
index 0000000..a64d783
--- /dev/null
+++ b/vendor/pdalboost/boost/config/abi/msvc_suffix.hpp
@@ -0,0 +1,8 @@
+//  (C) Copyright John Maddock 2003. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#pragma pack(pop)
+
+
diff --git a/vendor/pdalboost/boost/config/abi_prefix.hpp b/vendor/pdalboost/boost/config/abi_prefix.hpp
new file mode 100644
index 0000000..3b13474
--- /dev/null
+++ b/vendor/pdalboost/boost/config/abi_prefix.hpp
@@ -0,0 +1,25 @@
+//  abi_prefix header  -------------------------------------------------------//
+
+// (c) Copyright John Maddock 2003
+   
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+
+#ifndef BOOST_CONFIG_ABI_PREFIX_HPP
+# define BOOST_CONFIG_ABI_PREFIX_HPP
+#else
+# error double inclusion of header boost/config/abi_prefix.hpp is an error
+#endif
+
+#include <boost/config.hpp>
+
+// this must occur after all other includes and before any code appears:
+#ifdef BOOST_HAS_ABI_HEADERS
+#  include BOOST_ABI_PREFIX
+#endif
+
+#if defined( __BORLANDC__ )
+#pragma nopushoptwarn
+#endif
+
diff --git a/vendor/pdalboost/boost/config/abi_suffix.hpp b/vendor/pdalboost/boost/config/abi_suffix.hpp
new file mode 100644
index 0000000..9391616
--- /dev/null
+++ b/vendor/pdalboost/boost/config/abi_suffix.hpp
@@ -0,0 +1,27 @@
+//  abi_sufffix header  -------------------------------------------------------//
+
+// (c) Copyright John Maddock 2003
+   
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+
+// This header should be #included AFTER code that was preceded by a #include
+// <boost/config/abi_prefix.hpp>.
+
+#ifndef BOOST_CONFIG_ABI_PREFIX_HPP
+# error Header boost/config/abi_suffix.hpp must only be used after boost/config/abi_prefix.hpp
+#else
+# undef BOOST_CONFIG_ABI_PREFIX_HPP
+#endif
+
+// the suffix header occurs after all of our code:
+#ifdef BOOST_HAS_ABI_HEADERS
+#  include BOOST_ABI_SUFFIX
+#endif
+
+#if defined( __BORLANDC__ )
+#pragma nopushoptwarn
+#endif
+
+
diff --git a/vendor/pdalboost/boost/config/auto_link.hpp b/vendor/pdalboost/boost/config/auto_link.hpp
new file mode 100644
index 0000000..56a16b0
--- /dev/null
+++ b/vendor/pdalboost/boost/config/auto_link.hpp
@@ -0,0 +1,439 @@
+//  (C) Copyright John Maddock 2003.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE         auto_link.hpp
+  *   VERSION      see <boost/version.hpp>
+  *   DESCRIPTION: Automatic library inclusion for Borland/Microsoft compilers.
+  */
+
+/*************************************************************************
+
+USAGE:
+~~~~~~
+
+Before including this header you must define one or more of define the following macros:
+
+BOOST_LIB_NAME:           Required: A string containing the basename of the library,
+                          for example boost_regex.
+BOOST_LIB_TOOLSET:        Optional: the base name of the toolset.
+BOOST_DYN_LINK:           Optional: when set link to dll rather than static library.
+BOOST_LIB_DIAGNOSTIC:     Optional: when set the header will print out the name
+                          of the library selected (useful for debugging).
+BOOST_AUTO_LINK_NOMANGLE: Specifies that we should link to BOOST_LIB_NAME.lib,
+                          rather than a mangled-name version.
+BOOST_AUTO_LINK_TAGGED:   Specifies that we link to libraries built with the --layout=tagged option.
+                          This is essentially the same as the default name-mangled version, but without
+                          the compiler name and version, or the Boost version.  Just the build options.
+
+These macros will be undef'ed at the end of the header, further this header
+has no include guards - so be sure to include it only once from your library!
+
+Algorithm:
+~~~~~~~~~~
+
+Libraries for Borland and Microsoft compilers are automatically
+selected here, the name of the lib is selected according to the following
+formula:
+
+BOOST_LIB_PREFIX
+   + BOOST_LIB_NAME
+   + "_"
+   + BOOST_LIB_TOOLSET
+   + BOOST_LIB_THREAD_OPT
+   + BOOST_LIB_RT_OPT
+   "-"
+   + BOOST_LIB_VERSION
+
+These are defined as:
+
+BOOST_LIB_PREFIX:     "lib" for static libraries otherwise "".
+
+BOOST_LIB_NAME:       The base name of the lib ( for example boost_regex).
+
+BOOST_LIB_TOOLSET:    The compiler toolset name (vc6, vc7, bcb5 etc).
+
+BOOST_LIB_THREAD_OPT: "-mt" for multithread builds, otherwise nothing.
+
+BOOST_LIB_RT_OPT:     A suffix that indicates the runtime library used,
+                      contains one or more of the following letters after
+                      a hyphen:
+
+                      s      static runtime (dynamic if not present).
+                      g      debug/diagnostic runtime (release if not present).
+                      y      Python debug/diagnostic runtime (release if not present).
+                      d      debug build (release if not present).
+                      p      STLport build.
+                      n      STLport build without its IOStreams.
+
+BOOST_LIB_VERSION:    The Boost version, in the form x_y, for Boost version x.y.
+
+
+***************************************************************************/
+
+#ifdef __cplusplus
+#  ifndef BOOST_CONFIG_HPP
+#     include <boost/config.hpp>
+#  endif
+#elif defined(_MSC_VER) && !defined(__MWERKS__) && !defined(__EDG_VERSION__)
+//
+// C language compatability (no, honestly)
+//
+#  define BOOST_MSVC _MSC_VER
+#  define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X)
+#  define BOOST_DO_STRINGIZE(X) #X
+#endif
+//
+// Only include what follows for known and supported compilers:
+//
+#if defined(BOOST_MSVC) \
+    || defined(__BORLANDC__) \
+    || (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) \
+    || (defined(__ICL) && defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200))
+
+#ifndef BOOST_VERSION_HPP
+#  include <boost/version.hpp>
+#endif
+
+#ifndef BOOST_LIB_NAME
+#  error "Macro BOOST_LIB_NAME not set (internal error)"
+#endif
+
+//
+// error check:
+//
+#if defined(__MSVC_RUNTIME_CHECKS) && !defined(_DEBUG)
+#  pragma message("Using the /RTC option without specifying a debug runtime will lead to linker errors")
+#  pragma message("Hint: go to the code generation options and switch to one of the debugging runtimes")
+#  error "Incompatible build options"
+#endif
+//
+// select toolset if not defined already:
+//
+#ifndef BOOST_LIB_TOOLSET
+#  if defined(BOOST_MSVC) && (BOOST_MSVC < 1200)
+    // Note: no compilers before 1200 are supported
+#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
+
+#    ifdef UNDER_CE
+       // eVC4:
+#      define BOOST_LIB_TOOLSET "evc4"
+#    else
+       // vc6:
+#      define BOOST_LIB_TOOLSET "vc6"
+#    endif
+
+#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1310)
+
+     // vc7:
+#    define BOOST_LIB_TOOLSET "vc7"
+
+#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1400)
+
+     // vc71:
+#    define BOOST_LIB_TOOLSET "vc71"
+
+#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1500)
+
+     // vc80:
+#    define BOOST_LIB_TOOLSET "vc80"
+
+#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1600)
+
+     // vc90:
+#    define BOOST_LIB_TOOLSET "vc90"
+
+#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1700)
+
+     // vc10:
+#    define BOOST_LIB_TOOLSET "vc100"
+
+#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1800)
+
+     // vc11:
+#    define BOOST_LIB_TOOLSET "vc110"
+
+#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1900)
+
+     // vc12:
+#    define BOOST_LIB_TOOLSET "vc120"
+
+# elif defined(BOOST_MSVC)
+
+   // vc14:
+#  define BOOST_LIB_TOOLSET "vc140"
+
+#  elif defined(__BORLANDC__)
+
+     // CBuilder 6:
+#    define BOOST_LIB_TOOLSET "bcb"
+
+#  elif defined(__ICL)
+
+     // Intel C++, no version number:
+#    define BOOST_LIB_TOOLSET "iw"
+
+#  elif defined(__MWERKS__) && (__MWERKS__ <= 0x31FF )
+
+     // Metrowerks CodeWarrior 8.x
+#    define BOOST_LIB_TOOLSET "cw8"
+
+#  elif defined(__MWERKS__) && (__MWERKS__ <= 0x32FF )
+
+     // Metrowerks CodeWarrior 9.x
+#    define BOOST_LIB_TOOLSET "cw9"
+
+#  endif
+#endif // BOOST_LIB_TOOLSET
+
+//
+// select thread opt:
+//
+#if defined(_MT) || defined(__MT__)
+#  define BOOST_LIB_THREAD_OPT "-mt"
+#else
+#  define BOOST_LIB_THREAD_OPT
+#endif
+
+#if defined(_MSC_VER) || defined(__MWERKS__)
+
+#  ifdef _DLL
+
+#     if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && (defined(_STLP_OWN_IOSTREAMS) || defined(__STL_OWN_IOSTREAMS))
+
+#        if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\
+               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
+#            define BOOST_LIB_RT_OPT "-gydp"
+#        elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))
+#            define BOOST_LIB_RT_OPT "-gdp"
+#        elif defined(_DEBUG)\
+               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
+#            define BOOST_LIB_RT_OPT "-gydp"
+#            pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
+#            error "Build options aren't compatible with pre-built libraries"
+#        elif defined(_DEBUG)
+#            define BOOST_LIB_RT_OPT "-gdp"
+#            pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
+#            error "Build options aren't compatible with pre-built libraries"
+#        else
+#            define BOOST_LIB_RT_OPT "-p"
+#        endif
+
+#     elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+
+#        if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\
+               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
+#            define BOOST_LIB_RT_OPT "-gydpn"
+#        elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))
+#            define BOOST_LIB_RT_OPT "-gdpn"
+#        elif defined(_DEBUG)\
+               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
+#            define BOOST_LIB_RT_OPT "-gydpn"
+#            pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
+#            error "Build options aren't compatible with pre-built libraries"
+#        elif defined(_DEBUG)
+#            define BOOST_LIB_RT_OPT "-gdpn"
+#            pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
+#            error "Build options aren't compatible with pre-built libraries"
+#        else
+#            define BOOST_LIB_RT_OPT "-pn"
+#        endif
+
+#     else
+
+#        if defined(_DEBUG) && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
+#            define BOOST_LIB_RT_OPT "-gyd"
+#        elif defined(_DEBUG)
+#            define BOOST_LIB_RT_OPT "-gd"
+#        else
+#            define BOOST_LIB_RT_OPT
+#        endif
+
+#     endif
+
+#  else
+
+#     if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && (defined(_STLP_OWN_IOSTREAMS) || defined(__STL_OWN_IOSTREAMS))
+
+#        if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\
+               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
+#            define BOOST_LIB_RT_OPT "-sgydp"
+#        elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))
+#            define BOOST_LIB_RT_OPT "-sgdp"
+#        elif defined(_DEBUG)\
+               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
+#             define BOOST_LIB_RT_OPT "-sgydp"
+#            pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
+#            error "Build options aren't compatible with pre-built libraries"
+#        elif defined(_DEBUG)
+#             define BOOST_LIB_RT_OPT "-sgdp"
+#            pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
+#            error "Build options aren't compatible with pre-built libraries"
+#        else
+#            define BOOST_LIB_RT_OPT "-sp"
+#        endif
+
+#     elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+
+#        if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\
+               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
+#            define BOOST_LIB_RT_OPT "-sgydpn"
+#        elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))
+#            define BOOST_LIB_RT_OPT "-sgdpn"
+#        elif defined(_DEBUG)\
+               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
+#             define BOOST_LIB_RT_OPT "-sgydpn"
+#            pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
+#            error "Build options aren't compatible with pre-built libraries"
+#        elif defined(_DEBUG)
+#             define BOOST_LIB_RT_OPT "-sgdpn"
+#            pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1")
+#            error "Build options aren't compatible with pre-built libraries"
+#        else
+#            define BOOST_LIB_RT_OPT "-spn"
+#        endif
+
+#     else
+
+#        if defined(_DEBUG)\
+               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
+#             define BOOST_LIB_RT_OPT "-sgyd"
+#        elif defined(_DEBUG)
+#             define BOOST_LIB_RT_OPT "-sgd"
+#        else
+#            define BOOST_LIB_RT_OPT "-s"
+#        endif
+
+#     endif
+
+#  endif
+
+#elif defined(__BORLANDC__)
+
+//
+// figure out whether we want the debug builds or not:
+//
+#if __BORLANDC__ > 0x561
+#pragma defineonoption BOOST_BORLAND_DEBUG -v
+#endif
+//
+// sanity check:
+//
+#if defined(__STL_DEBUG) || defined(_STLP_DEBUG)
+#error "Pre-built versions of the Boost libraries are not provided in STLport-debug form"
+#endif
+
+#  ifdef _RTLDLL
+
+#     if defined(BOOST_BORLAND_DEBUG)\
+               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
+#         define BOOST_LIB_RT_OPT "-yd"
+#     elif defined(BOOST_BORLAND_DEBUG)
+#         define BOOST_LIB_RT_OPT "-d"
+#     elif defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
+#         define BOOST_LIB_RT_OPT -y
+#     else
+#         define BOOST_LIB_RT_OPT
+#     endif
+
+#  else
+
+#     if defined(BOOST_BORLAND_DEBUG)\
+               && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
+#         define BOOST_LIB_RT_OPT "-syd"
+#     elif defined(BOOST_BORLAND_DEBUG)
+#         define BOOST_LIB_RT_OPT "-sd"
+#     elif defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON)
+#         define BOOST_LIB_RT_OPT "-sy"
+#     else
+#         define BOOST_LIB_RT_OPT "-s"
+#     endif
+
+#  endif
+
+#endif
+
+//
+// select linkage opt:
+//
+#if (defined(_DLL) || defined(_RTLDLL)) && defined(BOOST_DYN_LINK)
+#  define BOOST_LIB_PREFIX
+#elif defined(BOOST_DYN_LINK)
+#  error "Mixing a dll boost library with a static runtime is a really bad idea..."
+#else
+#  define BOOST_LIB_PREFIX "lib"
+#endif
+
+//
+// now include the lib:
+//
+#if defined(BOOST_LIB_NAME) \
+      && defined(BOOST_LIB_PREFIX) \
+      && defined(BOOST_LIB_TOOLSET) \
+      && defined(BOOST_LIB_THREAD_OPT) \
+      && defined(BOOST_LIB_RT_OPT) \
+      && defined(BOOST_LIB_VERSION)
+
+#ifdef BOOST_AUTO_LINK_TAGGED
+#  pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT ".lib")
+#  ifdef BOOST_LIB_DIAGNOSTIC
+#     pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT ".lib")
+#  endif
+#elif defined(BOOST_AUTO_LINK_NOMANGLE)
+#  pragma comment(lib, BOOST_STRINGIZE(BOOST_LIB_NAME) ".lib")
+#  ifdef BOOST_LIB_DIAGNOSTIC
+#     pragma message ("Linking to lib file: " BOOST_STRINGIZE(BOOST_LIB_NAME) ".lib")
+#  endif
+#elif defined(BOOST_LIB_BUILDID)
+#  pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION "-" BOOST_STRINGIZE(BOOST_LIB_BUILDID) ".lib")
+#  ifdef BOOST_LIB_DIAGNOSTIC
+#     pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION "-" BOOST_STRINGIZE(BOOST_LIB_BUILDID) ".lib")
+#  endif
+#else
+#  pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION ".lib")
+#  ifdef BOOST_LIB_DIAGNOSTIC
+#     pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION ".lib")
+#  endif
+#endif
+
+#else
+#  error "some required macros where not defined (internal logic error)."
+#endif
+
+
+#endif // _MSC_VER || __BORLANDC__
+
+//
+// finally undef any macros we may have set:
+//
+#ifdef BOOST_LIB_PREFIX
+#  undef BOOST_LIB_PREFIX
+#endif
+#if defined(BOOST_LIB_NAME)
+#  undef BOOST_LIB_NAME
+#endif
+// Don't undef this one: it can be set by the user and should be the 
+// same for all libraries:
+//#if defined(BOOST_LIB_TOOLSET)
+//#  undef BOOST_LIB_TOOLSET
+//#endif
+#if defined(BOOST_LIB_THREAD_OPT)
+#  undef BOOST_LIB_THREAD_OPT
+#endif
+#if defined(BOOST_LIB_RT_OPT)
+#  undef BOOST_LIB_RT_OPT
+#endif
+#if defined(BOOST_LIB_LINK_OPT)
+#  undef BOOST_LIB_LINK_OPT
+#endif
+#if defined(BOOST_LIB_DEBUG_OPT)
+#  undef BOOST_LIB_DEBUG_OPT
+#endif
+#if defined(BOOST_DYN_LINK)
+#  undef BOOST_DYN_LINK
+#endif
+
+
diff --git a/vendor/pdalboost/boost/config/compiler/borland.hpp b/vendor/pdalboost/boost/config/compiler/borland.hpp
new file mode 100644
index 0000000..80dd230
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/borland.hpp
@@ -0,0 +1,318 @@
+//  (C) Copyright John Maddock 2001 - 2003.
+//  (C) Copyright David Abrahams 2002 - 2003.
+//  (C) Copyright Aleksey Gurtovoy 2002.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Borland C++ compiler setup:
+
+//
+// versions check:
+// we don't support Borland prior to version 5.4:
+#if __BORLANDC__ < 0x540
+#  error "Compiler not supported or configured - please reconfigure"
+#endif
+
+// last known compiler version:
+#if (__BORLANDC__ > 0x613)
+//#  if defined(BOOST_ASSERT_CONFIG)
+#     error "Unknown compiler version - please run the configure tests and report the results"
+//#  else
+//#     pragma message( "Unknown compiler version - please run the configure tests and report the results")
+//#  endif
+#elif (__BORLANDC__ == 0x600)
+#  error "CBuilderX preview compiler is no longer supported"
+#endif
+
+//
+// Support macros to help with standard library detection
+#if (__BORLANDC__ < 0x560) || defined(_USE_OLD_RW_STL)
+#  define BOOST_BCB_WITH_ROGUE_WAVE
+#elif __BORLANDC__ < 0x570
+#  define BOOST_BCB_WITH_STLPORT
+#else
+#  define BOOST_BCB_WITH_DINKUMWARE
+#endif
+
+//
+// Version 5.0 and below:
+#   if __BORLANDC__ <= 0x0550
+// Borland C++Builder 4 and 5:
+#     define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+#     if __BORLANDC__ == 0x0550
+// Borland C++Builder 5, command-line compiler 5.5:
+#       define BOOST_NO_OPERATORS_IN_NAMESPACE
+#     endif
+// Variadic macros do not exist for C++ Builder versions 5 and below
+#define BOOST_NO_CXX11_VARIADIC_MACROS
+#   endif
+
+// Version 5.51 and below:
+#if (__BORLANDC__ <= 0x551)
+#  define BOOST_NO_CV_SPECIALIZATIONS
+#  define BOOST_NO_CV_VOID_SPECIALIZATIONS
+#  define BOOST_NO_DEDUCED_TYPENAME
+// workaround for missing WCHAR_MAX/WCHAR_MIN:
+#ifdef __cplusplus
+#include <climits>
+#include <cwchar>
+#else
+#include <limits.h>
+#include <wchar.h>
+#endif // __cplusplus
+#ifndef WCHAR_MAX
+#  define WCHAR_MAX 0xffff
+#endif
+#ifndef WCHAR_MIN
+#  define WCHAR_MIN 0
+#endif
+#endif
+
+// Borland C++ Builder 6 and below:
+#if (__BORLANDC__ <= 0x564)
+
+#  if defined(NDEBUG) && defined(__cplusplus)
+      // fix broken <cstring> so that Boost.test works:
+#     include <cstring>
+#     undef strcmp
+#  endif
+   // fix broken errno declaration:
+#  include <errno.h>
+#  ifndef errno
+#     define errno errno
+#  endif
+
+#endif
+
+//
+// new bug in 5.61:
+#if (__BORLANDC__ >= 0x561) && (__BORLANDC__ <= 0x580)
+   // this seems to be needed by the command line compiler, but not the IDE:
+#  define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS
+#endif
+
+// Borland C++ Builder 2006 Update 2 and below:
+#if (__BORLANDC__ <= 0x582)
+#  define BOOST_NO_SFINAE
+#  define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG
+#  define BOOST_NO_TEMPLATE_TEMPLATES
+
+#  define BOOST_NO_PRIVATE_IN_AGGREGATE
+
+#  ifdef _WIN32
+#     define BOOST_NO_SWPRINTF
+#  elif defined(linux) || defined(__linux__) || defined(__linux)
+      // we should really be able to do without this
+      // but the wcs* functions aren't imported into std::
+#     define BOOST_NO_STDC_NAMESPACE
+      // _CPPUNWIND doesn't get automatically set for some reason:
+#     pragma defineonoption BOOST_CPPUNWIND -x
+#  endif
+#endif
+
+#if (__BORLANDC__ <= 0x613)  // Beman has asked Alisdair for more info
+   // we shouldn't really need this - but too many things choke
+   // without it, this needs more investigation:
+#  define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+#  define BOOST_NO_IS_ABSTRACT
+#  define BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS
+#  define BOOST_NO_USING_TEMPLATE
+#  define BOOST_SP_NO_SP_CONVERTIBLE
+
+// Temporary workaround
+#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif
+
+// Borland C++ Builder 2008 and below:
+#  define BOOST_NO_INTEGRAL_INT64_T
+#  define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
+#  define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS
+#  define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+#  define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+#  define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE
+#  define BOOST_NO_NESTED_FRIENDSHIP
+#  define BOOST_NO_TYPENAME_WITH_CTOR
+#if (__BORLANDC__ < 0x600)
+#  define BOOST_ILLEGAL_CV_REFERENCES
+#endif
+
+//
+//  Positive Feature detection
+//
+// Borland C++ Builder 2008 and below:
+#if (__BORLANDC__ >= 0x599)
+#  pragma defineonoption BOOST_CODEGEAR_0X_SUPPORT -Ax
+#endif
+//
+// C++0x Macros:
+//
+#if !defined( BOOST_CODEGEAR_0X_SUPPORT ) || (__BORLANDC__ < 0x610)
+#  define BOOST_NO_CXX11_CHAR16_T
+#  define BOOST_NO_CXX11_CHAR32_T
+#  define BOOST_NO_CXX11_DECLTYPE
+#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#  define BOOST_NO_CXX11_EXTERN_TEMPLATE
+#  define BOOST_NO_CXX11_RVALUE_REFERENCES
+#  define BOOST_NO_CXX11_SCOPED_ENUMS
+#  define BOOST_NO_CXX11_STATIC_ASSERT
+#else
+#  define BOOST_HAS_ALIGNOF
+#  define BOOST_HAS_CHAR16_T
+#  define BOOST_HAS_CHAR32_T
+#  define BOOST_HAS_DECLTYPE
+#  define BOOST_HAS_EXPLICIT_CONVERSION_OPS
+#  define BOOST_HAS_REF_QUALIFIER
+#  define BOOST_HAS_RVALUE_REFS
+#  define BOOST_HAS_STATIC_ASSERT
+#endif
+
+#define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#define BOOST_NO_CXX11_CONSTEXPR
+#define BOOST_NO_CXX11_DECLTYPE_N3276
+#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#define BOOST_NO_CXX11_LAMBDAS
+#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#define BOOST_NO_CXX11_NULLPTR
+#define BOOST_NO_CXX11_RANGE_BASED_FOR
+#define BOOST_NO_CXX11_RAW_LITERALS
+#define BOOST_NO_CXX11_RVALUE_REFERENCES
+#define BOOST_NO_CXX11_SCOPED_ENUMS
+#define BOOST_NO_SFINAE_EXPR
+#define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#define BOOST_NO_CXX11_UNICODE_LITERALS    // UTF-8 still not supported
+#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#define BOOST_NO_CXX11_NOEXCEPT
+#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
+#define BOOST_NO_CXX11_FINAL
+
+// C++ 14:
+#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
+#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
+#endif
+#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)
+#  define BOOST_NO_CXX14_BINARY_LITERALS
+#endif
+#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
+#  define BOOST_NO_CXX14_CONSTEXPR
+#endif
+#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)
+#  define BOOST_NO_CXX14_DECLTYPE_AUTO
+#endif
+#if (__cplusplus < 201304) // There's no SD6 check for this....
+#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
+#endif
+#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)
+#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
+#endif
+#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)
+#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
+#endif
+#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)
+#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
+#endif
+#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
+#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
+#endif
+
+#if __BORLANDC__ >= 0x590
+#  define BOOST_HAS_TR1_HASH
+
+#  define BOOST_HAS_MACRO_USE_FACET
+#endif
+
+//
+// Post 0x561 we have long long and stdint.h:
+#if __BORLANDC__ >= 0x561
+#  ifndef __NO_LONG_LONG
+#     define BOOST_HAS_LONG_LONG
+#  else
+#     define BOOST_NO_LONG_LONG
+#  endif
+   // On non-Win32 platforms let the platform config figure this out:
+#  ifdef _WIN32
+#      define BOOST_HAS_STDINT_H
+#  endif
+#endif
+
+// Borland C++Builder 6 defaults to using STLPort.  If _USE_OLD_RW_STL is
+// defined, then we have 0x560 or greater with the Rogue Wave implementation
+// which presumably has the std::DBL_MAX bug.
+#if defined( BOOST_BCB_WITH_ROGUE_WAVE )
+// <climits> is partly broken, some macros define symbols that are really in
+// namespace std, so you end up having to use illegal constructs like
+// std::DBL_MAX, as a fix we'll just include float.h and have done with:
+#include <float.h>
+#endif
+//
+// __int64:
+//
+#if (__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__)
+#  define BOOST_HAS_MS_INT64
+#endif
+//
+// check for exception handling support:
+//
+#if !defined(_CPPUNWIND) && !defined(BOOST_CPPUNWIND) && !defined(__EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS)
+#  define BOOST_NO_EXCEPTIONS
+#endif
+//
+// all versions have a <dirent.h>:
+//
+#ifndef __STRICT_ANSI__
+#  define BOOST_HAS_DIRENT_H
+#endif
+//
+// all versions support __declspec:
+//
+#if defined(__STRICT_ANSI__)
+// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined
+#  define BOOST_SYMBOL_EXPORT
+#endif
+//
+// ABI fixing headers:
+//
+#if __BORLANDC__ != 0x600 // not implemented for version 6 compiler yet
+#ifndef BOOST_ABI_PREFIX
+#  define BOOST_ABI_PREFIX "boost/config/abi/borland_prefix.hpp"
+#endif
+#ifndef BOOST_ABI_SUFFIX
+#  define BOOST_ABI_SUFFIX "boost/config/abi/borland_suffix.hpp"
+#endif
+#endif
+//
+// Disable Win32 support in ANSI mode:
+//
+#if __BORLANDC__ < 0x600
+#  pragma defineonoption BOOST_DISABLE_WIN32 -A
+#elif defined(__STRICT_ANSI__)
+#  define BOOST_DISABLE_WIN32
+#endif
+//
+// MSVC compatibility mode does some nasty things:
+// TODO: look up if this doesn't apply to the whole 12xx range
+//
+#if defined(_MSC_VER) && (_MSC_VER <= 1200)
+#  define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+#  define BOOST_NO_VOID_RETURNS
+#endif
+
+// Borland did not implement value-initialization completely, as I reported
+// in 2007, Borland Report 51854, "Value-initialization: POD struct should be
+// zero-initialized", http://qc.embarcadero.com/wc/qcmain.aspx?d=51854
+// See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues
+// (Niels Dekker, LKEB, April 2010)
+#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
+
+#define BOOST_COMPILER "Borland C++ version " BOOST_STRINGIZE(__BORLANDC__)
diff --git a/vendor/pdalboost/boost/config/compiler/clang.hpp b/vendor/pdalboost/boost/config/compiler/clang.hpp
new file mode 100644
index 0000000..5481e5e
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/clang.hpp
@@ -0,0 +1,279 @@
+// (C) Copyright Douglas Gregor 2010
+//
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+// Clang compiler setup.
+
+#define BOOST_HAS_PRAGMA_ONCE
+
+// Detecting `-fms-extension` compiler flag assuming that _MSC_VER defined when that flag is used.
+#if defined (_MSC_VER) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 4))
+#   define BOOST_HAS_PRAGMA_DETECT_MISMATCH
+#endif
+
+// When compiling with clang before __has_extension was defined,
+// even if one writes 'defined(__has_extension) && __has_extension(xxx)',
+// clang reports a compiler error. So the only workaround found is:
+
+#ifndef __has_extension
+#define __has_extension __has_feature
+#endif
+
+#ifndef __has_attribute
+#define __has_attribute(x) 0
+#endif
+
+#if !__has_feature(cxx_exceptions) && !defined(BOOST_NO_EXCEPTIONS)
+#  define BOOST_NO_EXCEPTIONS
+#endif
+
+#if !__has_feature(cxx_rtti) && !defined(BOOST_NO_RTTI)
+#  define BOOST_NO_RTTI
+#endif
+
+#if !__has_feature(cxx_rtti) && !defined(BOOST_NO_TYPEID)
+#  define BOOST_NO_TYPEID
+#endif
+
+#if defined(__int64) && !defined(__GNUC__)
+#  define BOOST_HAS_MS_INT64
+#endif
+
+#define BOOST_HAS_NRVO
+
+// Branch prediction hints
+#if defined(__has_builtin)
+#if __has_builtin(__builtin_expect)
+#define BOOST_LIKELY(x) __builtin_expect(x, 1)
+#define BOOST_UNLIKELY(x) __builtin_expect(x, 0)
+#endif
+#endif
+
+// Clang supports "long long" in all compilation modes.
+#define BOOST_HAS_LONG_LONG
+
+//
+// We disable this if the compiler is really nvcc as it
+// doesn't actually support __int128 as of CUDA_VERSION=5000
+// even though it defines __SIZEOF_INT128__.
+// See https://svn.boost.org/trac/boost/ticket/10418
+// Only re-enable this for nvcc if you're absolutely sure
+// of the circumstances under which it's supported.
+// Similarly __SIZEOF_INT128__ is defined when targetting msvc
+// compatibility even though the required support functions are absent.
+//
+#if defined(__SIZEOF_INT128__) && !defined(__CUDACC__) && !defined(_MSC_VER)
+#  define BOOST_HAS_INT128
+#endif
+
+
+//
+// Dynamic shared object (DSO) and dynamic-link library (DLL) support
+//
+#if !defined(_WIN32) && !defined(__WIN32__) && !defined(WIN32)
+#  define BOOST_SYMBOL_EXPORT __attribute__((__visibility__("default")))
+#  define BOOST_SYMBOL_IMPORT
+#  define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__("default")))
+#endif
+
+//
+// The BOOST_FALLTHROUGH macro can be used to annotate implicit fall-through
+// between switch labels.
+//
+#if __cplusplus >= 201103L && defined(__has_warning)
+#  if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough")
+#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
+#  endif
+#endif
+
+#if !__has_feature(cxx_auto_type)
+#  define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#endif
+
+//
+// Currently clang on Windows using VC++ RTL does not support C++11's char16_t or char32_t
+//
+#if defined(_MSC_VER) || !(defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)
+#  define BOOST_NO_CXX11_CHAR16_T
+#  define BOOST_NO_CXX11_CHAR32_T
+#endif
+
+#if !__has_feature(cxx_constexpr)
+#  define BOOST_NO_CXX11_CONSTEXPR
+#endif
+
+#if !__has_feature(cxx_decltype)
+#  define BOOST_NO_CXX11_DECLTYPE
+#endif
+
+#if !__has_feature(cxx_decltype_incomplete_return_types)
+#  define BOOST_NO_CXX11_DECLTYPE_N3276
+#endif
+
+#if !__has_feature(cxx_defaulted_functions)
+#  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#endif
+
+#if !__has_feature(cxx_deleted_functions)
+#  define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#endif
+
+#if !__has_feature(cxx_explicit_conversions)
+#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#endif
+
+#if !__has_feature(cxx_default_function_template_args)
+#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#endif
+
+#if !__has_feature(cxx_generalized_initializers)
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#endif
+
+#if !__has_feature(cxx_lambdas)
+#  define BOOST_NO_CXX11_LAMBDAS
+#endif
+
+#if !__has_feature(cxx_local_type_template_args)
+#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#endif
+
+#if !__has_feature(cxx_noexcept)
+#  define BOOST_NO_CXX11_NOEXCEPT
+#endif
+
+#if !__has_feature(cxx_nullptr)
+#  define BOOST_NO_CXX11_NULLPTR
+#endif
+
+#if !__has_feature(cxx_range_for)
+#  define BOOST_NO_CXX11_RANGE_BASED_FOR
+#endif
+
+#if !__has_feature(cxx_raw_string_literals)
+#  define BOOST_NO_CXX11_RAW_LITERALS
+#endif
+
+#if !__has_feature(cxx_reference_qualified_functions)
+#  define BOOST_NO_CXX11_REF_QUALIFIERS
+#endif
+
+#if !__has_feature(cxx_generalized_initializers)
+#  define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#endif
+
+#if !__has_feature(cxx_rvalue_references)
+#  define BOOST_NO_CXX11_RVALUE_REFERENCES
+#endif
+
+#if !__has_feature(cxx_strong_enums)
+#  define BOOST_NO_CXX11_SCOPED_ENUMS
+#endif
+
+#if !__has_feature(cxx_static_assert)
+#  define BOOST_NO_CXX11_STATIC_ASSERT
+#endif
+
+#if !__has_feature(cxx_alias_templates)
+#  define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#endif
+
+#if !__has_feature(cxx_unicode_literals)
+#  define BOOST_NO_CXX11_UNICODE_LITERALS
+#endif
+
+#if !__has_feature(cxx_variadic_templates)
+#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#endif
+
+#if !__has_feature(cxx_user_literals)
+#  define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#endif
+
+#if !__has_feature(cxx_alignas)
+#  define BOOST_NO_CXX11_ALIGNAS
+#endif
+
+#if !__has_feature(cxx_trailing_return)
+#  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#endif
+
+#if !__has_feature(cxx_inline_namespaces)
+#  define BOOST_NO_CXX11_INLINE_NAMESPACES
+#endif
+
+#if !__has_feature(cxx_override_control)
+#  define BOOST_NO_CXX11_FINAL
+#endif
+
+#if !(__has_feature(__cxx_binary_literals__) || __has_extension(__cxx_binary_literals__))
+#  define BOOST_NO_CXX14_BINARY_LITERALS
+#endif
+
+#if !__has_feature(__cxx_decltype_auto__)
+#  define BOOST_NO_CXX14_DECLTYPE_AUTO
+#endif
+
+#if !__has_feature(__cxx_aggregate_nsdmi__)
+#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
+#endif
+
+#if !__has_feature(__cxx_init_captures__)
+#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
+#endif
+
+#if !__has_feature(__cxx_generic_lambdas__)
+#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
+#endif
+
+// clang < 3.5 has a defect with dependent type, like following.
+//
+//  template <class T>
+//  constexpr typename enable_if<pred<T> >::type foo(T &)
+//  { } // error: no return statement in constexpr function
+//
+// This issue also affects C++11 mode, but C++11 constexpr requires return stmt.
+// Therefore we don't care such case.
+//
+// Note that we can't check Clang version directly as the numbering system changes depending who's
+// creating the Clang release (see https://github.com/boostorg/config/pull/39#issuecomment-59927873)
+// so instead verify that we have a feature that was introduced at the same time as working C++14
+// constexpr (generic lambda's in this case):
+//
+#if !__has_feature(__cxx_generic_lambdas__) || !__has_feature(__cxx_relaxed_constexpr__)
+#  define BOOST_NO_CXX14_CONSTEXPR
+#endif
+
+#if !__has_feature(__cxx_return_type_deduction__)
+#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
+#endif
+
+#if !__has_feature(__cxx_variable_templates__)
+#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
+#endif
+
+#if __cplusplus < 201400
+// All versions with __cplusplus above this value seem to support this:
+#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
+#endif
+//
+// __builtin_unreachable:
+#if defined(__has_builtin) && __has_builtin(__builtin_unreachable)
+#define BOOST_UNREACHABLE_RETURN(x) __builtin_unreachable();
+#endif
+
+// Clang has supported the 'unused' attribute since the first release.
+#define BOOST_ATTRIBUTE_UNUSED __attribute__((__unused__))
+
+#ifndef BOOST_COMPILER
+#  define BOOST_COMPILER "Clang version " __clang_version__
+#endif
+
+// Macro used to identify the Clang compiler.
+#define BOOST_CLANG 1
+
diff --git a/vendor/pdalboost/boost/config/compiler/codegear.hpp b/vendor/pdalboost/boost/config/compiler/codegear.hpp
new file mode 100644
index 0000000..02bd792
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/codegear.hpp
@@ -0,0 +1,220 @@
+//  (C) Copyright John Maddock 2001 - 2003.
+//  (C) Copyright David Abrahams 2002 - 2003.
+//  (C) Copyright Aleksey Gurtovoy 2002.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  CodeGear C++ compiler setup:
+
+#if !defined( BOOST_WITH_CODEGEAR_WARNINGS )
+// these warnings occur frequently in optimized template code
+# pragma warn -8004 // var assigned value, but never used
+# pragma warn -8008 // condition always true/false
+# pragma warn -8066 // dead code can never execute
+# pragma warn -8104 // static members with ctors not threadsafe
+# pragma warn -8105 // reference member in class without ctors
+#endif
+//
+// versions check:
+// last known and checked version is 0x621
+#if (__CODEGEARC__ > 0x621)
+#  if defined(BOOST_ASSERT_CONFIG)
+#     error "Unknown compiler version - please run the configure tests and report the results"
+#  else
+#     pragma message( "Unknown compiler version - please run the configure tests and report the results")
+#  endif
+#endif
+
+// CodeGear C++ Builder 2009
+#if (__CODEGEARC__ <= 0x613)
+#  define BOOST_NO_INTEGRAL_INT64_T
+#  define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS
+#  define BOOST_NO_PRIVATE_IN_AGGREGATE
+#  define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE
+   // we shouldn't really need this - but too many things choke
+   // without it, this needs more investigation:
+#  define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+#  define BOOST_SP_NO_SP_CONVERTIBLE
+#endif
+
+// CodeGear C++ Builder 2010
+#if (__CODEGEARC__ <= 0x621)
+#  define BOOST_NO_TYPENAME_WITH_CTOR    // Cannot use typename keyword when making temporaries of a dependant type
+#  define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
+#  define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+#  define BOOST_NO_NESTED_FRIENDSHIP     // TC1 gives nested classes access rights as any other member
+#  define BOOST_NO_USING_TEMPLATE
+#  define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+// Temporary hack, until specific MPL preprocessed headers are generated
+#  define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+// CodeGear has not yet completely implemented value-initialization, for
+// example for array types, as I reported in 2010: Embarcadero Report 83751,
+// "Value-initialization: arrays should have each element value-initialized",
+// http://qc.embarcadero.com/wc/qcmain.aspx?d=83751
+// Last checked version: Embarcadero C++ 6.21
+// See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues
+// (Niels Dekker, LKEB, April 2010)
+#  define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
+
+#  if defined(NDEBUG) && defined(__cplusplus)
+      // fix broken <cstring> so that Boost.test works:
+#     include <cstring>
+#     undef strcmp
+#  endif
+   // fix broken errno declaration:
+#  include <errno.h>
+#  ifndef errno
+#     define errno errno
+#  endif
+
+#endif
+
+// Reportedly, #pragma once is supported since C++ Builder 2010
+#if (__CODEGEARC__ >= 0x620)
+#  define BOOST_HAS_PRAGMA_ONCE
+#endif
+
+//
+// C++0x macros:
+//
+#if (__CODEGEARC__ <= 0x620)
+#define BOOST_NO_CXX11_STATIC_ASSERT
+#else
+#define BOOST_HAS_STATIC_ASSERT
+#endif
+#define BOOST_HAS_CHAR16_T
+#define BOOST_HAS_CHAR32_T
+#define BOOST_HAS_LONG_LONG
+// #define BOOST_HAS_ALIGNOF
+#define BOOST_HAS_DECLTYPE
+#define BOOST_HAS_EXPLICIT_CONVERSION_OPS
+// #define BOOST_HAS_RVALUE_REFS
+#define BOOST_HAS_SCOPED_ENUM
+// #define BOOST_HAS_STATIC_ASSERT
+#define BOOST_HAS_STD_TYPE_TRAITS
+
+#define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#define BOOST_NO_CXX11_CONSTEXPR
+#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#define BOOST_NO_CXX11_EXTERN_TEMPLATE
+#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#define BOOST_NO_CXX11_LAMBDAS
+#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#define BOOST_NO_CXX11_NOEXCEPT
+#define BOOST_NO_CXX11_NULLPTR
+#define BOOST_NO_CXX11_RANGE_BASED_FOR
+#define BOOST_NO_CXX11_RAW_LITERALS
+#define BOOST_NO_CXX11_RVALUE_REFERENCES
+#define BOOST_NO_SFINAE_EXPR
+#define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#define BOOST_NO_CXX11_UNICODE_LITERALS
+#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
+#define BOOST_NO_CXX11_FINAL
+
+// C++ 14:
+#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
+#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
+#endif
+#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)
+#  define BOOST_NO_CXX14_BINARY_LITERALS
+#endif
+#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
+#  define BOOST_NO_CXX14_CONSTEXPR
+#endif
+#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)
+#  define BOOST_NO_CXX14_DECLTYPE_AUTO
+#endif
+#if (__cplusplus < 201304) // There's no SD6 check for this....
+#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
+#endif
+#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)
+#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
+#endif
+#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)
+#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
+#endif
+#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)
+#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
+#endif
+#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
+#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
+#endif
+
+//
+// TR1 macros:
+//
+#define BOOST_HAS_TR1_HASH
+#define BOOST_HAS_TR1_TYPE_TRAITS
+#define BOOST_HAS_TR1_UNORDERED_MAP
+#define BOOST_HAS_TR1_UNORDERED_SET
+
+#define BOOST_HAS_MACRO_USE_FACET
+
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+
+// On non-Win32 platforms let the platform config figure this out:
+#ifdef _WIN32
+#  define BOOST_HAS_STDINT_H
+#endif
+
+//
+// __int64:
+//
+#if !defined(__STRICT_ANSI__)
+#  define BOOST_HAS_MS_INT64
+#endif
+//
+// check for exception handling support:
+//
+#if !defined(_CPPUNWIND) && !defined(BOOST_CPPUNWIND) && !defined(__EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS)
+#  define BOOST_NO_EXCEPTIONS
+#endif
+//
+// all versions have a <dirent.h>:
+//
+#if !defined(__STRICT_ANSI__)
+#  define BOOST_HAS_DIRENT_H
+#endif
+//
+// all versions support __declspec:
+//
+#if defined(__STRICT_ANSI__)
+// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined
+#  define BOOST_SYMBOL_EXPORT
+#endif
+//
+// ABI fixing headers:
+//
+#ifndef BOOST_ABI_PREFIX
+#  define BOOST_ABI_PREFIX "boost/config/abi/borland_prefix.hpp"
+#endif
+#ifndef BOOST_ABI_SUFFIX
+#  define BOOST_ABI_SUFFIX "boost/config/abi/borland_suffix.hpp"
+#endif
+//
+// Disable Win32 support in ANSI mode:
+//
+#  pragma defineonoption BOOST_DISABLE_WIN32 -A
+//
+// MSVC compatibility mode does some nasty things:
+// TODO: look up if this doesn't apply to the whole 12xx range
+//
+#if defined(_MSC_VER) && (_MSC_VER <= 1200)
+#  define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+#  define BOOST_NO_VOID_RETURNS
+#endif
+
+#define BOOST_COMPILER "CodeGear C++ version " BOOST_STRINGIZE(__CODEGEARC__)
+
diff --git a/vendor/pdalboost/boost/config/compiler/comeau.hpp b/vendor/pdalboost/boost/config/compiler/comeau.hpp
new file mode 100644
index 0000000..278222d
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/comeau.hpp
@@ -0,0 +1,59 @@
+//  (C) Copyright John Maddock 2001. 
+//  (C) Copyright Douglas Gregor 2001. 
+//  (C) Copyright Peter Dimov 2001. 
+//  (C) Copyright Aleksey Gurtovoy 2003. 
+//  (C) Copyright Beman Dawes 2003. 
+//  (C) Copyright Jens Maurer 2003. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Comeau C++ compiler setup:
+
+#include "boost/config/compiler/common_edg.hpp"
+
+#if (__COMO_VERSION__ <= 4245)
+
+#  if defined(_MSC_VER) && _MSC_VER <= 1300
+#     if _MSC_VER > 100
+         // only set this in non-strict mode:
+#        define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+#     endif
+#  endif
+
+// Void returns don't work when emulating VC 6 (Peter Dimov)
+// TODO: look up if this doesn't apply to the whole 12xx range
+#  if defined(_MSC_VER) && (_MSC_VER < 1300)
+#     define BOOST_NO_VOID_RETURNS
+#  endif
+
+#endif  // version 4245
+
+//
+// enable __int64 support in VC emulation mode
+//
+#  if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#     define BOOST_HAS_MS_INT64
+#  endif
+
+#define BOOST_COMPILER "Comeau compiler version " BOOST_STRINGIZE(__COMO_VERSION__)
+
+//
+// versions check:
+// we don't know Comeau prior to version 4245:
+#if __COMO_VERSION__ < 4245
+#  error "Compiler not configured - please reconfigure"
+#endif
+//
+// last known and checked version is 4245:
+#if (__COMO_VERSION__ > 4245)
+#  if defined(BOOST_ASSERT_CONFIG)
+#     error "Unknown compiler version - please run the configure tests and report the results"
+#  endif
+#endif
+
+
+
+
diff --git a/vendor/pdalboost/boost/config/compiler/common_edg.hpp b/vendor/pdalboost/boost/config/compiler/common_edg.hpp
new file mode 100644
index 0000000..b92e574
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/common_edg.hpp
@@ -0,0 +1,143 @@
+//  (C) Copyright John Maddock 2001 - 2002.
+//  (C) Copyright Jens Maurer 2001.
+//  (C) Copyright David Abrahams 2002.
+//  (C) Copyright Aleksey Gurtovoy 2002.
+//  (C) Copyright Markus Schoepflin 2005.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//
+// Options common to all edg based compilers.
+//
+// This is included from within the individual compiler mini-configs.
+
+#ifndef  __EDG_VERSION__
+#  error This file requires that __EDG_VERSION__ be defined.
+#endif
+
+#if (__EDG_VERSION__ <= 238)
+#   define BOOST_NO_INTEGRAL_INT64_T
+#   define BOOST_NO_SFINAE
+#endif
+
+#if (__EDG_VERSION__ <= 240)
+#   define BOOST_NO_VOID_RETURNS
+#endif
+
+#if (__EDG_VERSION__ <= 241) && !defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+#   define BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
+#endif
+
+#if (__EDG_VERSION__ <= 244) && !defined(BOOST_NO_TEMPLATE_TEMPLATES)
+#   define BOOST_NO_TEMPLATE_TEMPLATES
+#endif
+
+#if (__EDG_VERSION__ < 300) && !defined(BOOST_NO_IS_ABSTRACT)
+#   define BOOST_NO_IS_ABSTRACT
+#endif
+
+#if (__EDG_VERSION__ <= 303) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
+#   define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
+#endif
+
+// See also kai.hpp which checks a Kai-specific symbol for EH
+# if !defined(__KCC) && !defined(__EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS)
+#     define BOOST_NO_EXCEPTIONS
+# endif
+
+# if !defined(__NO_LONG_LONG)
+#     define BOOST_HAS_LONG_LONG
+# else
+#     define BOOST_NO_LONG_LONG
+# endif
+
+// Not sure what version was the first to support #pragma once, but
+// different EDG-based compilers (e.g. Intel) supported it for ages.
+// Add a proper version check if it causes problems.
+#define BOOST_HAS_PRAGMA_ONCE
+
+//
+// C++0x features
+//
+//   See above for BOOST_NO_LONG_LONG
+//
+#if (__EDG_VERSION__ < 310)
+#  define BOOST_NO_CXX11_EXTERN_TEMPLATE
+#endif
+#if (__EDG_VERSION__ <= 310)
+// No support for initializer lists
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#endif
+#if (__EDG_VERSION__ < 400)
+#  define BOOST_NO_CXX11_VARIADIC_MACROS
+#endif
+
+#define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#define BOOST_NO_CXX11_CHAR16_T
+#define BOOST_NO_CXX11_CHAR32_T
+#define BOOST_NO_CXX11_CONSTEXPR
+#define BOOST_NO_CXX11_DECLTYPE
+#define BOOST_NO_CXX11_DECLTYPE_N3276
+#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#define BOOST_NO_CXX11_LAMBDAS
+#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#define BOOST_NO_CXX11_NOEXCEPT
+#define BOOST_NO_CXX11_NULLPTR
+#define BOOST_NO_CXX11_RANGE_BASED_FOR
+#define BOOST_NO_CXX11_RAW_LITERALS
+#define BOOST_NO_CXX11_RVALUE_REFERENCES
+#define BOOST_NO_CXX11_SCOPED_ENUMS
+#define BOOST_NO_SFINAE_EXPR
+#define BOOST_NO_CXX11_STATIC_ASSERT
+#define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#define BOOST_NO_CXX11_UNICODE_LITERALS
+#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
+#define BOOST_NO_CXX11_FINAL
+
+// C++ 14:
+#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
+#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
+#endif
+#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)
+#  define BOOST_NO_CXX14_BINARY_LITERALS
+#endif
+#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
+#  define BOOST_NO_CXX14_CONSTEXPR
+#endif
+#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)
+#  define BOOST_NO_CXX14_DECLTYPE_AUTO
+#endif
+#if (__cplusplus < 201304) // There's no SD6 check for this....
+#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
+#endif
+#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)
+#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
+#endif
+#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)
+#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
+#endif
+#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)
+#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
+#endif
+#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
+#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
+#endif
+
+#ifdef c_plusplus
+// EDG has "long long" in non-strict mode
+// However, some libraries have insufficient "long long" support
+// #define BOOST_HAS_LONG_LONG
+#endif
diff --git a/vendor/pdalboost/boost/config/compiler/compaq_cxx.hpp b/vendor/pdalboost/boost/config/compiler/compaq_cxx.hpp
new file mode 100644
index 0000000..b44486c
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/compaq_cxx.hpp
@@ -0,0 +1,19 @@
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Tru64 C++ compiler setup (now HP):
+
+#define BOOST_COMPILER "HP Tru64 C++ " BOOST_STRINGIZE(__DECCXX_VER)
+
+#include "boost/config/compiler/common_edg.hpp"
+
+//
+// versions check:
+// Nothing to do here?
+
+
+
diff --git a/vendor/pdalboost/boost/config/compiler/cray.hpp b/vendor/pdalboost/boost/config/compiler/cray.hpp
new file mode 100644
index 0000000..3f66043
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/cray.hpp
@@ -0,0 +1,92 @@
+//  (C) Copyright John Maddock 2011.
+//  (C) Copyright Cray, Inc. 2013
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Greenhills C compiler setup:
+
+#define BOOST_COMPILER "Cray C version " BOOST_STRINGIZE(_RELEASE)
+
+#if _RELEASE < 8
+#  error "Boost is not configured for Cray compilers prior to version 8, please try the configure script."
+#endif
+
+//
+// Check this is a recent EDG based compiler, otherwise we don't support it here:
+//
+#ifndef __EDG_VERSION__
+#  error "Unsupported Cray compiler, please try running the configure script."
+#endif
+
+#include "boost/config/compiler/common_edg.hpp"
+
+
+//
+//
+#define BOOST_NO_CXX11_STATIC_ASSERT
+#define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#define BOOST_HAS_NRVO
+#define BOOST_NO_CXX11_VARIADIC_MACROS
+#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#define BOOST_NO_CXX11_UNICODE_LITERALS
+#define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+#define BOOST_HAS_NRVO
+#define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#define BOOST_NO_CXX11_STATIC_ASSERT
+#define BOOST_NO_SFINAE_EXPR
+#define BOOST_NO_CXX11_SCOPED_ENUMS
+#define BOOST_NO_CXX11_RVALUE_REFERENCES
+#define BOOST_NO_CXX11_RANGE_BASED_FOR
+#define BOOST_NO_CXX11_RAW_LITERALS
+#define BOOST_NO_CXX11_NULLPTR
+#define BOOST_NO_CXX11_NOEXCEPT
+#define BOOST_NO_CXX11_LAMBDAS
+#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#define BOOST_NO_CXX11_DECLTYPE_N3276
+#define BOOST_NO_CXX11_DECLTYPE
+#define BOOST_NO_CXX11_CONSTEXPR
+#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
+#define BOOST_NO_CXX11_CHAR32_T
+#define BOOST_NO_CXX11_CHAR16_T
+#define BOOST_NO_CXX11_REF_QUALIFIERS
+#define BOOST_NO_CXX11_FINAL
+
+
+//#define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG
+#define BOOST_MATH_DISABLE_STD_FPCLASSIFY
+//#define BOOST_HAS_FPCLASSIFY
+
+#define BOOST_SP_USE_PTHREADS 
+#define BOOST_AC_USE_PTHREADS 
+
+/* everything that follows is working around what are thought to be
+ * compiler shortcomings.  Revist all of these regularly.
+ */
+
+//#define BOOST_USE_ENUM_STATIC_ASSERT
+//#define BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS //(this may be implied by the previous #define
+
+// These constants should be provided by the 
+// compiler, at least when -hgnu is asserted on the command line.
+
+#ifndef __ATOMIC_RELAXED
+#define __ATOMIC_RELAXED 0
+#define __ATOMIC_CONSUME 1
+#define __ATOMIC_ACQUIRE 2
+#define __ATOMIC_RELEASE 3
+#define __ATOMIC_ACQ_REL 4
+#define __ATOMIC_SEQ_CST 5
+#endif
+
+
+
diff --git a/vendor/pdalboost/boost/config/compiler/digitalmars.hpp b/vendor/pdalboost/boost/config/compiler/digitalmars.hpp
new file mode 100644
index 0000000..a3d293c
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/digitalmars.hpp
@@ -0,0 +1,124 @@
+//  Copyright (C) Christof Meerwald 2003
+//  Copyright (C) Dan Watkins 2003
+//
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  Digital Mars C++ compiler setup:
+#define BOOST_COMPILER __DMC_VERSION_STRING__
+
+#define BOOST_HAS_LONG_LONG
+#define BOOST_HAS_PRAGMA_ONCE
+
+#if !defined(BOOST_STRICT_CONFIG)
+#define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+#define BOOST_NO_OPERATORS_IN_NAMESPACE
+#define BOOST_NO_UNREACHABLE_RETURN_DETECTION
+#define BOOST_NO_SFINAE
+#define BOOST_NO_USING_TEMPLATE
+#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
+#endif
+
+//
+// has macros:
+#define BOOST_HAS_DIRENT_H
+#define BOOST_HAS_STDINT_H
+#define BOOST_HAS_WINTHREADS
+
+#if (__DMC__ >= 0x847)
+#define BOOST_HAS_EXPM1
+#define BOOST_HAS_LOG1P
+#endif
+
+//
+// Is this really the best way to detect whether the std lib is in namespace std?
+//
+#ifdef __cplusplus
+#include <cstddef>
+#endif
+#if !defined(__STL_IMPORT_VENDOR_CSTD) && !defined(_STLP_IMPORT_VENDOR_CSTD)
+#  define BOOST_NO_STDC_NAMESPACE
+#endif
+
+
+// check for exception handling support:
+#if !defined(_CPPUNWIND) && !defined(BOOST_NO_EXCEPTIONS)
+#  define BOOST_NO_EXCEPTIONS
+#endif
+
+//
+// C++0x features
+//
+#define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#define BOOST_NO_CXX11_CHAR16_T
+#define BOOST_NO_CXX11_CHAR32_T
+#define BOOST_NO_CXX11_CONSTEXPR
+#define BOOST_NO_CXX11_DECLTYPE
+#define BOOST_NO_CXX11_DECLTYPE_N3276
+#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#define BOOST_NO_CXX11_EXTERN_TEMPLATE
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#define BOOST_NO_CXX11_LAMBDAS
+#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#define BOOST_NO_CXX11_NOEXCEPT
+#define BOOST_NO_CXX11_NULLPTR
+#define BOOST_NO_CXX11_RANGE_BASED_FOR
+#define BOOST_NO_CXX11_RAW_LITERALS
+#define BOOST_NO_CXX11_RVALUE_REFERENCES
+#define BOOST_NO_CXX11_SCOPED_ENUMS
+#define BOOST_NO_SFINAE_EXPR
+#define BOOST_NO_CXX11_STATIC_ASSERT
+#define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#define BOOST_NO_CXX11_UNICODE_LITERALS
+#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
+#define BOOST_NO_CXX11_FINAL
+
+// C++ 14:
+#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
+#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
+#endif
+#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)
+#  define BOOST_NO_CXX14_BINARY_LITERALS
+#endif
+#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
+#  define BOOST_NO_CXX14_CONSTEXPR
+#endif
+#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)
+#  define BOOST_NO_CXX14_DECLTYPE_AUTO
+#endif
+#if (__cplusplus < 201304) // There's no SD6 check for this....
+#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
+#endif
+#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)
+#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
+#endif
+#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)
+#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
+#endif
+#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)
+#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
+#endif
+#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
+#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
+#endif
+
+#if (__DMC__ <= 0x840)
+#error "Compiler not supported or configured - please reconfigure"
+#endif
+//
+// last known and checked version is ...:
+#if (__DMC__ > 0x848)
+#  if defined(BOOST_ASSERT_CONFIG)
+#     error "Unknown compiler version - please run the configure tests and report the results"
+#  endif
+#endif
diff --git a/vendor/pdalboost/boost/config/compiler/gcc.hpp b/vendor/pdalboost/boost/config/compiler/gcc.hpp
new file mode 100644
index 0000000..d9dd59d
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/gcc.hpp
@@ -0,0 +1,314 @@
+//  (C) Copyright John Maddock 2001 - 2003.
+//  (C) Copyright Darin Adler 2001 - 2002.
+//  (C) Copyright Jens Maurer 2001 - 2002.
+//  (C) Copyright Beman Dawes 2001 - 2003.
+//  (C) Copyright Douglas Gregor 2002.
+//  (C) Copyright David Abrahams 2002 - 2003.
+//  (C) Copyright Synge Todo 2003.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  GNU C++ compiler setup.
+
+//
+// Define BOOST_GCC so we know this is "real" GCC and not some pretender:
+//
+#define BOOST_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
+#if !defined(__CUDACC__)
+#define BOOST_GCC BOOST_GCC_VERSION
+#endif
+
+#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L)
+#  define BOOST_GCC_CXX11
+#endif
+
+#if __GNUC__ == 3
+#  if defined (__PATHSCALE__)
+#     define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+#     define BOOST_NO_IS_ABSTRACT
+#  endif
+
+#  if __GNUC_MINOR__ < 4
+#     define BOOST_NO_IS_ABSTRACT
+#  endif
+#  define BOOST_NO_CXX11_EXTERN_TEMPLATE
+#endif
+#if __GNUC__ < 4
+//
+// All problems to gcc-3.x and earlier here:
+//
+#define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+#  ifdef __OPEN64__
+#     define BOOST_NO_IS_ABSTRACT
+#  endif
+#endif
+
+// GCC prior to 3.4 had #pragma once too but it didn't work well with filesystem links
+#if BOOST_GCC_VERSION >= 30400
+#define BOOST_HAS_PRAGMA_ONCE
+#endif
+
+#if BOOST_GCC_VERSION < 40400
+// Previous versions of GCC did not completely implement value-initialization:
+// GCC Bug 30111, "Value-initialization of POD base class doesn't initialize
+// members", reported by Jonathan Wakely in 2006,
+// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30111 (fixed for GCC 4.4)
+// GCC Bug 33916, "Default constructor fails to initialize array members",
+// reported by Michael Elizabeth Chastain in 2007,
+// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33916 (fixed for GCC 4.2.4)
+// See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues
+#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
+#endif
+
+#if !defined(__EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS)
+# define BOOST_NO_EXCEPTIONS
+#endif
+
+
+//
+// Threading support: Turn this on unconditionally here (except for
+// those platforms where we can know for sure). It will get turned off again
+// later if no threading API is detected.
+//
+#if !defined(__MINGW32__) && !defined(linux) && !defined(__linux) && !defined(__linux__)
+# define BOOST_HAS_THREADS
+#endif
+
+//
+// gcc has "long long"
+// Except on Darwin with standard compliance enabled (-pedantic)
+// Apple gcc helpfully defines this macro we can query
+//
+#if !defined(__DARWIN_NO_LONG_LONG)
+# define BOOST_HAS_LONG_LONG
+#endif
+
+//
+// gcc implements the named return value optimization since version 3.1
+//
+#define BOOST_HAS_NRVO
+
+// Branch prediction hints
+#define BOOST_LIKELY(x) __builtin_expect(x, 1)
+#define BOOST_UNLIKELY(x) __builtin_expect(x, 0)
+
+//
+// Dynamic shared object (DSO) and dynamic-link library (DLL) support
+//
+#if __GNUC__ >= 4
+#  if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && !defined(__CYGWIN__)
+     // All Win32 development environments, including 64-bit Windows and MinGW, define
+     // _WIN32 or one of its variant spellings. Note that Cygwin is a POSIX environment,
+     // so does not define _WIN32 or its variants.
+#    define BOOST_HAS_DECLSPEC
+#    define BOOST_SYMBOL_EXPORT __attribute__((__dllexport__))
+#    define BOOST_SYMBOL_IMPORT __attribute__((__dllimport__))
+#  else
+#    define BOOST_SYMBOL_EXPORT __attribute__((__visibility__("default")))
+#    define BOOST_SYMBOL_IMPORT
+#  endif
+#  define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__("default")))
+#else
+// config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined
+#  define BOOST_SYMBOL_EXPORT
+#endif
+
+//
+// RTTI and typeinfo detection is possible post gcc-4.3:
+//
+#if BOOST_GCC_VERSION > 40300
+#  ifndef __GXX_RTTI
+#     ifndef BOOST_NO_TYPEID
+#        define BOOST_NO_TYPEID
+#     endif
+#     ifndef BOOST_NO_RTTI
+#        define BOOST_NO_RTTI
+#     endif
+#  endif
+#endif
+
+//
+// Recent GCC versions have __int128 when in 64-bit mode.
+//
+// We disable this if the compiler is really nvcc as it
+// doesn't actually support __int128 as of CUDA_VERSION=5000
+// even though it defines __SIZEOF_INT128__.
+// See https://svn.boost.org/trac/boost/ticket/8048
+// Only re-enable this for nvcc if you're absolutely sure
+// of the circumstances under which it's supported:
+//
+#if defined(__SIZEOF_INT128__) && !defined(__CUDACC__)
+#  define BOOST_HAS_INT128
+#endif
+//
+// Recent GCC versions have a __float128 native type, we need to
+// include a std lib header to detect this - not ideal, but we'll
+// be including <cstddef> later anyway when we select the std lib.
+//
+#ifdef __cplusplus
+#include <cstddef>
+#else
+#include <stddef.h>
+#endif
+#if defined(_GLIBCXX_USE_FLOAT128) && !defined(__STRICT_ANSI__)
+# define BOOST_HAS_FLOAT128
+#endif
+
+// C++0x features in 4.3.n and later
+//
+#if (BOOST_GCC_VERSION >= 40300) && defined(BOOST_GCC_CXX11)
+// C++0x features are only enabled when -std=c++0x or -std=gnu++0x are
+// passed on the command line, which in turn defines
+// __GXX_EXPERIMENTAL_CXX0X__.
+#  define BOOST_HAS_DECLTYPE
+#  define BOOST_HAS_RVALUE_REFS
+#  define BOOST_HAS_STATIC_ASSERT
+#  define BOOST_HAS_VARIADIC_TMPL
+#else
+#  define BOOST_NO_CXX11_DECLTYPE
+#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#  define BOOST_NO_CXX11_RVALUE_REFERENCES
+#  define BOOST_NO_CXX11_STATIC_ASSERT
+#endif
+
+// C++0x features in 4.4.n and later
+//
+#if (BOOST_GCC_VERSION < 40400) || !defined(BOOST_GCC_CXX11)
+#  define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#  define BOOST_NO_CXX11_CHAR16_T
+#  define BOOST_NO_CXX11_CHAR32_T
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#  define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#  define BOOST_NO_CXX11_INLINE_NAMESPACES
+#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#endif
+
+#if BOOST_GCC_VERSION < 40500
+#  define BOOST_NO_SFINAE_EXPR
+#endif
+
+// GCC 4.5 forbids declaration of defaulted functions in private or protected sections
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ == 5) || !defined(BOOST_GCC_CXX11)
+#  define BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS
+#endif
+
+// C++0x features in 4.5.0 and later
+//
+#if (BOOST_GCC_VERSION < 40500) || !defined(BOOST_GCC_CXX11)
+#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#  define BOOST_NO_CXX11_LAMBDAS
+#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#  define BOOST_NO_CXX11_RAW_LITERALS
+#  define BOOST_NO_CXX11_UNICODE_LITERALS
+#endif
+
+// C++0x features in 4.5.1 and later
+//
+#if (BOOST_GCC_VERSION < 40501) || !defined(BOOST_GCC_CXX11)
+// scoped enums have a serious bug in 4.4.0, so define BOOST_NO_CXX11_SCOPED_ENUMS before 4.5.1
+// See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38064
+#  define BOOST_NO_CXX11_SCOPED_ENUMS
+#endif
+
+// C++0x features in 4.6.n and later
+//
+#if (BOOST_GCC_VERSION < 40600) || !defined(BOOST_GCC_CXX11)
+#define BOOST_NO_CXX11_CONSTEXPR
+#define BOOST_NO_CXX11_NOEXCEPT
+#define BOOST_NO_CXX11_NULLPTR
+#define BOOST_NO_CXX11_RANGE_BASED_FOR
+#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#endif
+
+// C++0x features in 4.7.n and later
+//
+#if (BOOST_GCC_VERSION < 40700) || !defined(BOOST_GCC_CXX11)
+#  define BOOST_NO_CXX11_FINAL
+#  define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#  define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#  define BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS
+#endif
+
+// C++0x features in 4.8.n and later
+//
+#if (BOOST_GCC_VERSION < 40800) || !defined(BOOST_GCC_CXX11)
+#  define BOOST_NO_CXX11_ALIGNAS
+#endif
+
+// C++0x features in 4.8.1 and later
+//
+#if (BOOST_GCC_VERSION < 40801) || !defined(BOOST_GCC_CXX11)
+#  define BOOST_NO_CXX11_DECLTYPE_N3276
+#  define BOOST_NO_CXX11_REF_QUALIFIERS
+#  define BOOST_NO_CXX14_BINARY_LITERALS
+#endif
+
+// C++14 features in 4.9.0 and later
+//
+#if (BOOST_GCC_VERSION < 40900) || (__cplusplus < 201300)
+#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
+#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
+#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
+#  define BOOST_NO_CXX14_DECLTYPE_AUTO
+#  if !((BOOST_GCC_VERSION >= 40801) && (BOOST_GCC_VERSION < 40900) && defined(BOOST_GCC_CXX11))
+#     define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
+#  endif
+#endif
+
+
+// C++ 14:
+#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
+#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
+#endif
+#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
+#  define BOOST_NO_CXX14_CONSTEXPR
+#endif
+#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
+#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
+#endif
+
+//
+// Unused attribute:
+#if __GNUC__ >= 4
+#  define BOOST_ATTRIBUTE_UNUSED __attribute__((__unused__))
+#endif
+//
+// __builtin_unreachable:
+#if BOOST_GCC_VERSION >= 40800
+#define BOOST_UNREACHABLE_RETURN(x) __builtin_unreachable();
+#endif
+
+#ifndef BOOST_COMPILER
+#  define BOOST_COMPILER "GNU C++ version " __VERSION__
+#endif
+
+// ConceptGCC compiler:
+//   http://www.generic-programming.org/software/ConceptGCC/
+#ifdef __GXX_CONCEPTS__
+#  define BOOST_HAS_CONCEPTS
+#  define BOOST_COMPILER "ConceptGCC version " __VERSION__
+#endif
+
+// versions check:
+// we don't know gcc prior to version 3.30:
+#if (BOOST_GCC_VERSION< 30300)
+#  error "Compiler not configured - please reconfigure"
+#endif
+//
+// last known and checked version is 4.9:
+#if (BOOST_GCC_VERSION > 40900)
+#  if defined(BOOST_ASSERT_CONFIG)
+#     error "Unknown compiler version - please run the configure tests and report the results"
+#  else
+// we don't emit warnings here anymore since there are no defect macros defined for
+// gcc post 3.4, so any failures are gcc regressions...
+//#     warning "Unknown compiler version - please run the configure tests and report the results"
+#  endif
+#endif
+
diff --git a/vendor/pdalboost/boost/config/compiler/gcc_xml.hpp b/vendor/pdalboost/boost/config/compiler/gcc_xml.hpp
new file mode 100644
index 0000000..c11f29d
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/gcc_xml.hpp
@@ -0,0 +1,95 @@
+//  (C) Copyright John Maddock 2006.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  GCC-XML C++ compiler setup:
+
+#  if !defined(__GCCXML_GNUC__) || ((__GCCXML_GNUC__ <= 3) && (__GCCXML_GNUC_MINOR__ <= 3))
+#     define BOOST_NO_IS_ABSTRACT
+#  endif
+
+//
+// Threading support: Turn this on unconditionally here (except for
+// those platforms where we can know for sure). It will get turned off again
+// later if no threading API is detected.
+//
+#if !defined(__MINGW32__) && !defined(_MSC_VER) && !defined(linux) && !defined(__linux) && !defined(__linux__)
+# define BOOST_HAS_THREADS
+#endif
+
+//
+// gcc has "long long"
+//
+#define BOOST_HAS_LONG_LONG
+
+// C++0x features:
+//
+#  define BOOST_NO_CXX11_CONSTEXPR
+#  define BOOST_NO_CXX11_NULLPTR
+#  define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#  define BOOST_NO_CXX11_DECLTYPE
+#  define BOOST_NO_CXX11_DECLTYPE_N3276
+#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#  define BOOST_NO_CXX11_RVALUE_REFERENCES
+#  define BOOST_NO_CXX11_STATIC_ASSERT
+#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#  define BOOST_NO_CXX11_VARIADIC_MACROS
+#  define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#  define BOOST_NO_CXX11_CHAR16_T
+#  define BOOST_NO_CXX11_CHAR32_T
+#  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#  define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#  define BOOST_NO_CXX11_SCOPED_ENUMS
+#  define BOOST_NO_SFINAE_EXPR
+#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#  define BOOST_NO_CXX11_LAMBDAS
+#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#  define BOOST_NO_CXX11_RANGE_BASED_FOR
+#  define BOOST_NO_CXX11_RAW_LITERALS
+#  define BOOST_NO_CXX11_UNICODE_LITERALS
+#  define BOOST_NO_CXX11_NOEXCEPT
+#  define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#  define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#  define BOOST_NO_CXX11_ALIGNAS
+#  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#  define BOOST_NO_CXX11_INLINE_NAMESPACES
+#  define BOOST_NO_CXX11_REF_QUALIFIERS
+#define BOOST_NO_CXX11_FINAL
+
+// C++ 14:
+#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
+#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
+#endif
+#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)
+#  define BOOST_NO_CXX14_BINARY_LITERALS
+#endif
+#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
+#  define BOOST_NO_CXX14_CONSTEXPR
+#endif
+#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)
+#  define BOOST_NO_CXX14_DECLTYPE_AUTO
+#endif
+#if (__cplusplus < 201304) // There's no SD6 check for this....
+#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
+#endif
+#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)
+#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
+#endif
+#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)
+#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
+#endif
+#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)
+#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
+#endif
+#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
+#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
+#endif
+
+#define BOOST_COMPILER "GCC-XML C++ version " __GCCXML__
+
+
diff --git a/vendor/pdalboost/boost/config/compiler/greenhills.hpp b/vendor/pdalboost/boost/config/compiler/greenhills.hpp
new file mode 100644
index 0000000..038b6b2
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/greenhills.hpp
@@ -0,0 +1,28 @@
+//  (C) Copyright John Maddock 2001. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Greenhills C++ compiler setup:
+
+#define BOOST_COMPILER "Greenhills C++ version " BOOST_STRINGIZE(__ghs)
+
+#include "boost/config/compiler/common_edg.hpp"
+
+//
+// versions check:
+// we don't support Greenhills prior to version 0:
+#if __ghs < 0
+#  error "Compiler not supported or configured - please reconfigure"
+#endif
+//
+// last known and checked version is 0:
+#if (__ghs > 0)
+#  if defined(BOOST_ASSERT_CONFIG)
+#     error "Unknown compiler version - please run the configure tests and report the results"
+#  endif
+#endif
+
+
diff --git a/vendor/pdalboost/boost/config/compiler/hp_acc.hpp b/vendor/pdalboost/boost/config/compiler/hp_acc.hpp
new file mode 100644
index 0000000..fb63839
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/hp_acc.hpp
@@ -0,0 +1,145 @@
+//  (C) Copyright John Maddock 2001 - 2003.
+//  (C) Copyright Jens Maurer 2001 - 2003.
+//  (C) Copyright Aleksey Gurtovoy 2002.
+//  (C) Copyright David Abrahams 2002 - 2003.
+//  (C) Copyright Toon Knapen 2003.
+//  (C) Copyright Boris Gubenko 2006 - 2007.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  HP aCC C++ compiler setup:
+
+#if defined(__EDG__)
+#include "boost/config/compiler/common_edg.hpp"
+#endif
+
+#if (__HP_aCC <= 33100)
+#    define BOOST_NO_INTEGRAL_INT64_T
+#    define BOOST_NO_OPERATORS_IN_NAMESPACE
+#  if !defined(_NAMESPACE_STD)
+#     define BOOST_NO_STD_LOCALE
+#     define BOOST_NO_STRINGSTREAM
+#  endif
+#endif
+
+#if (__HP_aCC <= 33300)
+// member templates are sufficiently broken that we disable them for now
+#    define BOOST_NO_MEMBER_TEMPLATES
+#    define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS
+#    define BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE
+#endif
+
+#if (__HP_aCC <= 38000)
+#  define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+#endif
+
+#if (__HP_aCC > 50000) && (__HP_aCC < 60000)
+#    define BOOST_NO_UNREACHABLE_RETURN_DETECTION
+#    define BOOST_NO_TEMPLATE_TEMPLATES
+#    define BOOST_NO_SWPRINTF
+#    define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+#    define BOOST_NO_IS_ABSTRACT
+#    define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+#endif
+
+// optional features rather than defects:
+#if (__HP_aCC >= 33900)
+#    define BOOST_HAS_LONG_LONG
+#    define BOOST_HAS_PARTIAL_STD_ALLOCATOR
+#endif
+
+#if (__HP_aCC >= 50000 ) && (__HP_aCC <= 53800 ) || (__HP_aCC < 31300 )
+#    define BOOST_NO_MEMBER_TEMPLATE_KEYWORD
+#endif
+
+// This macro should not be defined when compiling in strict ansi
+// mode, but, currently, we don't have the ability to determine
+// what standard mode we are compiling with. Some future version
+// of aCC6 compiler will provide predefined macros reflecting the
+// compilation options, including the standard mode.
+#if (__HP_aCC >= 60000) || ((__HP_aCC > 38000) && defined(__hpxstd98))
+#    define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+#endif
+
+#define BOOST_COMPILER "HP aCC version " BOOST_STRINGIZE(__HP_aCC)
+
+//
+// versions check:
+// we don't support HP aCC prior to version 33000:
+#if __HP_aCC < 33000
+#  error "Compiler not supported or configured - please reconfigure"
+#endif
+
+//
+// Extended checks for supporting aCC on PA-RISC
+#if __HP_aCC > 30000 && __HP_aCC < 50000
+#  if __HP_aCC < 38000
+      // versions prior to version A.03.80 not supported
+#     error "Compiler version not supported - version A.03.80 or higher is required"
+#  elif !defined(__hpxstd98)
+      // must compile using the option +hpxstd98 with version A.03.80 and above
+#     error "Compiler option '+hpxstd98' is required for proper support"
+#  endif //PA-RISC
+#endif
+
+//
+// C++0x features
+//
+//   See boost\config\suffix.hpp for BOOST_NO_LONG_LONG
+//
+#if !defined(__EDG__)
+
+#define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#define BOOST_NO_CXX11_CHAR16_T
+#define BOOST_NO_CXX11_CHAR32_T
+#define BOOST_NO_CXX11_CONSTEXPR
+#define BOOST_NO_CXX11_DECLTYPE
+#define BOOST_NO_CXX11_DECLTYPE_N3276
+#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#define BOOST_NO_CXX11_EXTERN_TEMPLATE
+#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#define BOOST_NO_CXX11_LAMBDAS
+#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#define BOOST_NO_CXX11_NOEXCEPT
+#define BOOST_NO_CXX11_NULLPTR
+#define BOOST_NO_CXX11_RANGE_BASED_FOR
+#define BOOST_NO_CXX11_RAW_LITERALS
+#define BOOST_NO_CXX11_RVALUE_REFERENCES
+#define BOOST_NO_CXX11_SCOPED_ENUMS
+#define BOOST_NO_SFINAE_EXPR
+#define BOOST_NO_CXX11_STATIC_ASSERT
+#define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#define BOOST_NO_CXX11_UNICODE_LITERALS
+#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
+
+/*
+  See https://forums13.itrc.hp.com/service/forums/questionanswer.do?threadId=1443331 and
+      https://forums13.itrc.hp.com/service/forums/questionanswer.do?threadId=1443436
+*/
+
+#if (__HP_aCC < 62500) || !defined(HP_CXX0x_SOURCE)
+  #define BOOST_NO_CXX11_VARIADIC_MACROS
+#endif
+
+#endif
+
+//
+// last known and checked version for HP-UX/ia64 is 61300
+// last known and checked version for PA-RISC is 38000
+#if ((__HP_aCC > 61300) || ((__HP_aCC > 38000) && defined(__hpxstd98)))
+#  if defined(BOOST_ASSERT_CONFIG)
+#     error "Unknown compiler version - please run the configure tests and report the results"
+#  endif
+#endif
diff --git a/vendor/pdalboost/boost/config/compiler/intel.hpp b/vendor/pdalboost/boost/config/compiler/intel.hpp
new file mode 100644
index 0000000..7789b94
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/intel.hpp
@@ -0,0 +1,535 @@
+//  (C) Copyright John Maddock 2001-8.
+//  (C) Copyright Peter Dimov 2001.
+//  (C) Copyright Jens Maurer 2001.
+//  (C) Copyright David Abrahams 2002 - 2003.
+//  (C) Copyright Aleksey Gurtovoy 2002 - 2003.
+//  (C) Copyright Guillaume Melquiond 2002 - 2003.
+//  (C) Copyright Beman Dawes 2003.
+//  (C) Copyright Martin Wille 2003.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Intel compiler setup:
+
+#if defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1500) && (defined(_MSC_VER) || defined(__GNUC__))
+
+#ifdef _MSC_VER
+
+#include <boost/config/compiler/visualc.hpp>
+
+#undef BOOST_MSVC
+#undef BOOST_MSVC_FULL_VER
+
+#if (__INTEL_COMPILER >= 1500) && (_MSC_VER >= 1900)
+//
+// These appear to be supported, even though VC++ may not support them:
+//
+#define BOOST_HAS_EXPM1
+#define BOOST_HAS_LOG1P
+#undef BOOST_NO_CXX14_BINARY_LITERALS
+// This one may be a little risky to enable??
+#undef BOOST_NO_SFINAE_EXPR
+
+#endif
+
+#else
+
+#include <boost/config/compiler/gcc.hpp>
+
+#undef BOOST_GCC_VERSION
+#undef BOOST_GCC_CXX11
+
+#endif
+
+#undef BOOST_COMPILER
+
+#if defined(__INTEL_COMPILER)
+#if __INTEL_COMPILER == 9999
+#  define BOOST_INTEL_CXX_VERSION 1200 // Intel bug in 12.1.
+#else
+#  define BOOST_INTEL_CXX_VERSION __INTEL_COMPILER
+#endif
+#elif defined(__ICL)
+#  define BOOST_INTEL_CXX_VERSION __ICL
+#elif defined(__ICC)
+#  define BOOST_INTEL_CXX_VERSION __ICC
+#elif defined(__ECC)
+#  define BOOST_INTEL_CXX_VERSION __ECC
+#endif
+
+// Flags determined by comparing output of 'icpc -dM -E' with and without '-std=c++0x'
+#if (!(defined(_WIN32) || defined(_WIN64)) && defined(__STDC_HOSTED__) && (__STDC_HOSTED__ && (BOOST_INTEL_CXX_VERSION <= 1200))) || defined(__GXX_EXPERIMENTAL_CPP0X__) || defined(__GXX_EXPERIMENTAL_CXX0X__)
+#  define BOOST_INTEL_STDCXX0X
+#endif
+#if defined(_MSC_VER) && (_MSC_VER >= 1600)
+#  define BOOST_INTEL_STDCXX0X
+#endif
+
+#ifdef __GNUC__
+#  define BOOST_INTEL_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
+#endif
+
+#if !defined(BOOST_COMPILER)
+#  if defined(BOOST_INTEL_STDCXX0X)
+#    define BOOST_COMPILER "Intel C++ C++0x mode version " BOOST_STRINGIZE(BOOST_INTEL_CXX_VERSION)
+#  else
+#    define BOOST_COMPILER "Intel C++ version " BOOST_STRINGIZE(BOOST_INTEL_CXX_VERSION)
+#  endif
+#endif
+
+#define BOOST_INTEL BOOST_INTEL_CXX_VERSION
+
+#if defined(_WIN32) || defined(_WIN64)
+#  define BOOST_INTEL_WIN BOOST_INTEL
+#else
+#  define BOOST_INTEL_LINUX BOOST_INTEL
+#endif
+
+#else
+
+#include "boost/config/compiler/common_edg.hpp"
+
+#if defined(__INTEL_COMPILER)
+#if __INTEL_COMPILER == 9999
+#  define BOOST_INTEL_CXX_VERSION 1200 // Intel bug in 12.1.
+#else
+#  define BOOST_INTEL_CXX_VERSION __INTEL_COMPILER
+#endif
+#elif defined(__ICL)
+#  define BOOST_INTEL_CXX_VERSION __ICL
+#elif defined(__ICC)
+#  define BOOST_INTEL_CXX_VERSION __ICC
+#elif defined(__ECC)
+#  define BOOST_INTEL_CXX_VERSION __ECC
+#endif
+
+// Flags determined by comparing output of 'icpc -dM -E' with and without '-std=c++0x'
+#if (!(defined(_WIN32) || defined(_WIN64)) && defined(__STDC_HOSTED__) && (__STDC_HOSTED__ && (BOOST_INTEL_CXX_VERSION <= 1200))) || defined(__GXX_EXPERIMENTAL_CPP0X__) || defined(__GXX_EXPERIMENTAL_CXX0X__)
+#  define BOOST_INTEL_STDCXX0X
+#endif
+#if defined(_MSC_VER) && (_MSC_VER >= 1600)
+#  define BOOST_INTEL_STDCXX0X
+#endif
+
+#ifdef __GNUC__
+#  define BOOST_INTEL_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
+#endif
+
+#if !defined(BOOST_COMPILER)
+#  if defined(BOOST_INTEL_STDCXX0X)
+#    define BOOST_COMPILER "Intel C++ C++0x mode version " BOOST_STRINGIZE(BOOST_INTEL_CXX_VERSION)
+#  else
+#    define BOOST_COMPILER "Intel C++ version " BOOST_STRINGIZE(BOOST_INTEL_CXX_VERSION)
+#  endif
+#endif
+
+#define BOOST_INTEL BOOST_INTEL_CXX_VERSION
+
+#if defined(_WIN32) || defined(_WIN64)
+#  define BOOST_INTEL_WIN BOOST_INTEL
+#else
+#  define BOOST_INTEL_LINUX BOOST_INTEL
+#endif
+
+#if (BOOST_INTEL_CXX_VERSION <= 600)
+
+#  if defined(_MSC_VER) && (_MSC_VER <= 1300) // added check for <= VC 7 (Peter Dimov)
+
+// Boost libraries assume strong standard conformance unless otherwise
+// indicated by a config macro. As configured by Intel, the EDG front-end
+// requires certain compiler options be set to achieve that strong conformance.
+// Particularly /Qoption,c,--arg_dep_lookup (reported by Kirk Klobe & Thomas Witt)
+// and /Zc:wchar_t,forScope. See boost-root/tools/build/intel-win32-tools.jam for
+// details as they apply to particular versions of the compiler. When the
+// compiler does not predefine a macro indicating if an option has been set,
+// this config file simply assumes the option has been set.
+// Thus BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP will not be defined, even if
+// the compiler option is not enabled.
+
+#     define BOOST_NO_SWPRINTF
+#  endif
+
+// Void returns, 64 bit integrals don't work when emulating VC 6 (Peter Dimov)
+
+#  if defined(_MSC_VER) && (_MSC_VER <= 1200)
+#     define BOOST_NO_VOID_RETURNS
+#     define BOOST_NO_INTEGRAL_INT64_T
+#  endif
+
+#endif
+
+#if (BOOST_INTEL_CXX_VERSION <= 710) && defined(_WIN32)
+#  define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS
+#endif
+
+// See http://aspn.activestate.com/ASPN/Mail/Message/boost/1614864
+#if BOOST_INTEL_CXX_VERSION < 600
+#  define BOOST_NO_INTRINSIC_WCHAR_T
+#else
+// We should test the macro _WCHAR_T_DEFINED to check if the compiler
+// supports wchar_t natively. *BUT* there is a problem here: the standard
+// headers define this macro if they typedef wchar_t. Anyway, we're lucky
+// because they define it without a value, while Intel C++ defines it
+// to 1. So we can check its value to see if the macro was defined natively
+// or not.
+// Under UNIX, the situation is exactly the same, but the macro _WCHAR_T
+// is used instead.
+#  if ((_WCHAR_T_DEFINED + 0) == 0) && ((_WCHAR_T + 0) == 0)
+#    define BOOST_NO_INTRINSIC_WCHAR_T
+#  endif
+#endif
+
+#if defined(__GNUC__) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
+//
+// Figure out when Intel is emulating this gcc bug
+// (All Intel versions prior to 9.0.26, and versions
+// later than that if they are set up to emulate gcc 3.2
+// or earlier):
+//
+#  if ((__GNUC__ == 3) && (__GNUC_MINOR__ <= 2)) || (BOOST_INTEL < 900) || (__INTEL_COMPILER_BUILD_DATE < 20050912)
+#     define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
+#  endif
+#endif
+#if (defined(__GNUC__) && (__GNUC__ < 4)) || (defined(_WIN32) && (BOOST_INTEL_CXX_VERSION <= 1200)) || (BOOST_INTEL_CXX_VERSION <= 1200)
+// GCC or VC emulation:
+#define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+#endif
+//
+// Verify that we have actually got BOOST_NO_INTRINSIC_WCHAR_T
+// set correctly, if we don't do this now, we will get errors later
+// in type_traits code among other things, getting this correct
+// for the Intel compiler is actually remarkably fragile and tricky:
+//
+#ifdef __cplusplus
+#if defined(BOOST_NO_INTRINSIC_WCHAR_T)
+#include <cwchar>
+template< typename T > struct assert_no_intrinsic_wchar_t;
+template<> struct assert_no_intrinsic_wchar_t<wchar_t> { typedef void type; };
+// if you see an error here then you need to unset BOOST_NO_INTRINSIC_WCHAR_T
+// where it is defined above:
+typedef assert_no_intrinsic_wchar_t<unsigned short>::type assert_no_intrinsic_wchar_t_;
+#else
+template< typename T > struct assert_intrinsic_wchar_t;
+template<> struct assert_intrinsic_wchar_t<wchar_t> {};
+// if you see an error here then define BOOST_NO_INTRINSIC_WCHAR_T on the command line:
+template<> struct assert_intrinsic_wchar_t<unsigned short> {};
+#endif
+#endif
+
+#if defined(_MSC_VER) && (_MSC_VER+0 >= 1000)
+#  if _MSC_VER >= 1200
+#     define BOOST_HAS_MS_INT64
+#  endif
+#  define BOOST_NO_SWPRINTF
+#  define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+#elif defined(_WIN32)
+#  define BOOST_DISABLE_WIN32
+#endif
+
+// I checked version 6.0 build 020312Z, it implements the NRVO.
+// Correct this as you find out which version of the compiler
+// implemented the NRVO first.  (Daniel Frey)
+#if (BOOST_INTEL_CXX_VERSION >= 600)
+#  define BOOST_HAS_NRVO
+#endif
+
+// Branch prediction hints
+// I'm not sure 8.0 was the first version to support these builtins,
+// update the condition if the version is not accurate. (Andrey Semashev)
+#if defined(__GNUC__) && BOOST_INTEL_CXX_VERSION >= 800
+#define BOOST_LIKELY(x) __builtin_expect(x, 1)
+#define BOOST_UNLIKELY(x) __builtin_expect(x, 0)
+#endif
+
+// RTTI
+// __RTTI is the EDG macro
+// __INTEL_RTTI__ is the Intel macro
+// __GXX_RTTI is the g++ macro
+// _CPPRTTI is the MSVC++ macro
+#if !defined(__RTTI) && !defined(__INTEL_RTTI__) && !defined(__GXX_RTTI) && !defined(_CPPRTTI)
+
+#if !defined(BOOST_NO_RTTI)
+# define BOOST_NO_RTTI
+#endif
+
+// in MS mode, static typeid works even when RTTI is off
+#if !defined(_MSC_VER) && !defined(BOOST_NO_TYPEID)
+# define BOOST_NO_TYPEID
+#endif
+
+#endif
+
+//
+// versions check:
+// we don't support Intel prior to version 6.0:
+#if BOOST_INTEL_CXX_VERSION < 600
+#  error "Compiler not supported or configured - please reconfigure"
+#endif
+
+// Intel on MacOS requires
+#if defined(__APPLE__) && defined(__INTEL_COMPILER)
+#  define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+#endif
+
+// Intel on Altix Itanium
+#if defined(__itanium__) && defined(__INTEL_COMPILER)
+#  define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+#endif
+
+//
+// An attempt to value-initialize a pointer-to-member may trigger an
+// internal error on Intel <= 11.1 (last checked version), as was
+// reported by John Maddock, Intel support issue 589832, May 2010.
+// Moreover, according to test results from Huang-Vista-x86_32_intel,
+// intel-vc9-win-11.1 may leave a non-POD array uninitialized, in some
+// cases when it should be value-initialized.
+// (Niels Dekker, LKEB, May 2010)
+// Apparently Intel 12.1 (compiler version number 9999 !!) has the same issue (compiler regression).
+#if defined(__INTEL_COMPILER)
+#  if (__INTEL_COMPILER <= 1110) || (__INTEL_COMPILER == 9999) || (defined(_WIN32) && (__INTEL_COMPILER < 1600))
+#    define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
+#  endif
+#endif
+
+//
+// Dynamic shared object (DSO) and dynamic-link library (DLL) support
+//
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+#  define BOOST_SYMBOL_EXPORT __attribute__((visibility("default")))
+#  define BOOST_SYMBOL_IMPORT
+#  define BOOST_SYMBOL_VISIBLE __attribute__((visibility("default")))
+#endif
+//
+// C++0x features
+// For each feature we need to check both the Intel compiler version, 
+// and the version of MSVC or GCC that we are emulating.
+// See http://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler/
+// for a list of which features were implemented in which Intel releases.
+//
+#if defined(BOOST_INTEL_STDCXX0X)
+// BOOST_NO_CXX11_CONSTEXPR:
+#if (BOOST_INTEL_CXX_VERSION >= 1500) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40600)) && !defined(_MSC_VER)
+// Available in earlier Intel versions, but fail our tests:
+#  undef BOOST_NO_CXX11_CONSTEXPR
+#endif
+// BOOST_NO_CXX11_NULLPTR:
+#if (BOOST_INTEL_CXX_VERSION >= 1210) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40600)) && (!defined(_MSC_VER) || (_MSC_VER >= 1600))
+#  undef BOOST_NO_CXX11_NULLPTR
+#endif
+// BOOST_NO_CXX11_TEMPLATE_ALIASES
+#if (BOOST_INTEL_CXX_VERSION >= 1210) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40700)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))
+#  undef BOOST_NO_CXX11_TEMPLATE_ALIASES
+#endif
+
+// BOOST_NO_CXX11_DECLTYPE
+#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40300)) && (!defined(_MSC_VER) || (_MSC_VER >= 1600))
+#  undef BOOST_NO_CXX11_DECLTYPE
+#endif
+
+// BOOST_NO_CXX11_DECLTYPE_N3276
+#if (BOOST_INTEL_CXX_VERSION >= 1500) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40800)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))
+#  undef BOOST_NO_CXX11_DECLTYPE_N3276
+#endif
+
+// BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40300)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))
+#  undef BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#endif
+
+// BOOST_NO_CXX11_RVALUE_REFERENCES
+#if (BOOST_INTEL_CXX_VERSION >= 1300) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40300)) && (!defined(_MSC_VER) || (_MSC_VER >= 1600))
+// This is available from earlier Intel versions, but breaks Filesystem and other libraries:
+#  undef BOOST_NO_CXX11_RVALUE_REFERENCES
+#endif
+
+// BOOST_NO_CXX11_STATIC_ASSERT
+#if (BOOST_INTEL_CXX_VERSION >= 1110) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40300)) && (!defined(_MSC_VER) || (_MSC_VER >= 1600))
+#  undef BOOST_NO_CXX11_STATIC_ASSERT
+#endif
+
+// BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))
+#  undef BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#endif
+
+// BOOST_NO_CXX11_VARIADIC_MACROS
+#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40200)) && (!defined(_MSC_VER) || (_MSC_VER >= 1400))
+#  undef BOOST_NO_CXX11_VARIADIC_MACROS
+#endif
+
+// BOOST_NO_CXX11_AUTO_DECLARATIONS
+#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_VER >= 1600))
+#  undef BOOST_NO_CXX11_AUTO_DECLARATIONS
+#endif
+
+// BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_VER >= 1600))
+#  undef BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#endif
+
+// BOOST_NO_CXX11_CHAR16_T
+#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_VER >= 9999))
+#  undef BOOST_NO_CXX11_CHAR16_T
+#endif
+
+// BOOST_NO_CXX11_CHAR32_T
+#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_VER >= 9999))
+#  undef BOOST_NO_CXX11_CHAR32_T
+#endif
+
+// BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))
+#  undef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#endif
+
+// BOOST_NO_CXX11_DELETED_FUNCTIONS
+#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))
+#  undef BOOST_NO_CXX11_DELETED_FUNCTIONS
+#endif
+
+// BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_VER >= 1700))
+#  undef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#endif
+
+// BOOST_NO_CXX11_SCOPED_ENUMS
+#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40501)) && (!defined(_MSC_VER) || (_MSC_VER >= 1700))
+// This is available but broken in earlier Intel releases.
+#  undef BOOST_NO_CXX11_SCOPED_ENUMS
+#endif
+
+// BOOST_NO_SFINAE_EXPR
+#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40500)) && (!defined(_MSC_VER) || (_MSC_VER >= 9999))
+#  undef BOOST_NO_SFINAE_EXPR
+#endif
+
+// BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#if (BOOST_INTEL_CXX_VERSION >= 1500) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40500)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))
+// This is available in earlier Intel releases, but breaks Multiprecision:
+#  undef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#endif
+
+// BOOST_NO_CXX11_LAMBDAS
+#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40500)) && (!defined(_MSC_VER) || (_MSC_VER >= 1600))
+#  undef BOOST_NO_CXX11_LAMBDAS
+#endif
+
+// BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40500))
+#  undef BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#endif
+
+// BOOST_NO_CXX11_RANGE_BASED_FOR
+#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40600)) && (!defined(_MSC_VER) || (_MSC_VER >= 1700))
+#  undef BOOST_NO_CXX11_RANGE_BASED_FOR
+#endif
+
+// BOOST_NO_CXX11_RAW_LITERALS
+#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40500)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))
+#  undef BOOST_NO_CXX11_RAW_LITERALS
+#endif
+
+// BOOST_NO_CXX11_UNICODE_LITERALS
+#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40500)) && (!defined(_MSC_VER) || (_MSC_VER >= 9999))
+#  undef BOOST_NO_CXX11_UNICODE_LITERALS
+#endif
+
+// BOOST_NO_CXX11_NOEXCEPT
+#if (BOOST_INTEL_CXX_VERSION >= 1500) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40600)) && (!defined(_MSC_VER) || (_MSC_VER >= 9999))
+// Available in earlier Intel release, but generates errors when used with 
+// conditional exception specifications, for example in multiprecision:
+#  undef BOOST_NO_CXX11_NOEXCEPT
+#endif
+
+// BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40600)) && (!defined(_MSC_VER) || (_MSC_VER >= 9999))
+#  undef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#endif
+
+// BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#if (BOOST_INTEL_CXX_VERSION >= 1500) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40700)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 190021730))
+#  undef BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#endif
+
+// BOOST_NO_CXX11_ALIGNAS
+#if (BOOST_INTEL_CXX_VERSION >= 1500) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40800)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 190021730))
+#  undef BOOST_NO_CXX11_ALIGNAS
+#endif
+
+// BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#if (BOOST_INTEL_CXX_VERSION >= 1200) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827))
+#  undef BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#endif
+
+// BOOST_NO_CXX11_INLINE_NAMESPACES
+#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40400)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 190021730))
+#  undef BOOST_NO_CXX11_INLINE_NAMESPACES
+#endif
+
+// BOOST_NO_CXX11_REF_QUALIFIERS
+#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40800)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 190021730))
+#  undef BOOST_NO_CXX11_REF_QUALIFIERS
+#endif
+
+// BOOST_NO_CXX11_FINAL
+#if (BOOST_INTEL_CXX_VERSION >= 1400) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40700)) && (!defined(_MSC_VER) || (_MSC_VER >= 1700))
+#  undef BOOST_NO_CXX11_FINAL
+#endif
+
+#endif
+
+//
+// Broken in all versions up to 15:
+#define BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS
+
+#if defined(BOOST_INTEL_STDCXX0X) && (BOOST_INTEL_CXX_VERSION <= 1310)
+#  define BOOST_NO_CXX11_HDR_FUTURE
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#endif
+
+#if defined(BOOST_INTEL_STDCXX0X) && (BOOST_INTEL_CXX_VERSION == 1400)
+// A regression in Intel's compiler means that <tuple> seems to be broken in this release as well as <future> :
+#  define BOOST_NO_CXX11_HDR_FUTURE
+#  define BOOST_NO_CXX11_HDR_TUPLE
+#endif
+
+#if (BOOST_INTEL_CXX_VERSION < 1200)
+//
+// fenv.h appears not to work with Intel prior to 12.0:
+//
+#  define BOOST_NO_FENV_H
+#endif
+
+// Intel 13.10 fails to access defaulted functions of a base class declared in private or protected sections,
+// producing the following errors:
+// error #453: protected function "..." (declared at ...") is not accessible through a "..." pointer or object
+#if (BOOST_INTEL_CXX_VERSION <= 1310)
+#  define BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS
+#endif
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1600)
+#  define BOOST_HAS_STDINT_H
+#endif
+
+#if defined(__LP64__) && defined(__GNUC__) && (BOOST_INTEL_CXX_VERSION >= 1310) && !defined(__CUDACC__)
+#  define BOOST_HAS_INT128
+#endif
+
+#endif
+//
+// last known and checked version:
+#if (BOOST_INTEL_CXX_VERSION > 1500)
+#  if defined(BOOST_ASSERT_CONFIG)
+#     error "Unknown compiler version - please run the configure tests and report the results"
+#  elif defined(_MSC_VER)
+//
+//      We don't emit this warning any more, since we have so few
+//      defect macros set anyway (just the one).
+//
+//#     pragma message("Unknown compiler version - please run the configure tests and report the results")
+#  endif
+#endif
+
diff --git a/vendor/pdalboost/boost/config/compiler/kai.hpp b/vendor/pdalboost/boost/config/compiler/kai.hpp
new file mode 100644
index 0000000..2337e6a
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/kai.hpp
@@ -0,0 +1,33 @@
+//  (C) Copyright John Maddock 2001. 
+//  (C) Copyright David Abrahams 2002. 
+//  (C) Copyright Aleksey Gurtovoy 2002. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Kai C++ compiler setup:
+
+#include "boost/config/compiler/common_edg.hpp"
+
+#   if (__KCC_VERSION <= 4001) || !defined(BOOST_STRICT_CONFIG)
+      // at least on Sun, the contents of <cwchar> is not in namespace std
+#     define BOOST_NO_STDC_NAMESPACE
+#   endif
+
+// see also common_edg.hpp which needs a special check for __KCC
+# if !defined(_EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS)
+#     define BOOST_NO_EXCEPTIONS
+# endif
+
+//
+// last known and checked version is 4001:
+#if (__KCC_VERSION > 4001)
+#  if defined(BOOST_ASSERT_CONFIG)
+#     error "Unknown compiler version - please run the configure tests and report the results"
+#  endif
+#endif
+
+
+
diff --git a/vendor/pdalboost/boost/config/compiler/metrowerks.hpp b/vendor/pdalboost/boost/config/compiler/metrowerks.hpp
new file mode 100644
index 0000000..c930143
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/metrowerks.hpp
@@ -0,0 +1,179 @@
+//  (C) Copyright John Maddock 2001.
+//  (C) Copyright Darin Adler 2001.
+//  (C) Copyright Peter Dimov 2001.
+//  (C) Copyright David Abrahams 2001 - 2002.
+//  (C) Copyright Beman Dawes 2001 - 2003.
+//  (C) Copyright Stefan Slapeta 2004.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Metrowerks C++ compiler setup:
+
+// locale support is disabled when linking with the dynamic runtime
+#   ifdef _MSL_NO_LOCALE
+#     define BOOST_NO_STD_LOCALE
+#   endif
+
+#   if __MWERKS__ <= 0x2301  // 5.3
+#     define BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+#     define BOOST_NO_POINTER_TO_MEMBER_CONST
+#     define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+#     define BOOST_NO_MEMBER_TEMPLATE_KEYWORD
+#   endif
+
+#   if __MWERKS__ <= 0x2401  // 6.2
+//#     define BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+#   endif
+
+#   if(__MWERKS__ <= 0x2407)  // 7.x
+#     define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS
+#     define BOOST_NO_UNREACHABLE_RETURN_DETECTION
+#   endif
+
+#   if(__MWERKS__ <= 0x3003)  // 8.x
+#     define BOOST_NO_SFINAE
+#    endif
+
+// the "|| !defined(BOOST_STRICT_CONFIG)" part should apply to the last
+// tested version *only*:
+#   if(__MWERKS__ <= 0x3207) || !defined(BOOST_STRICT_CONFIG) // 9.6
+#     define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+#     define BOOST_NO_IS_ABSTRACT
+#    endif
+
+#if !__option(wchar_type)
+#   define BOOST_NO_INTRINSIC_WCHAR_T
+#endif
+
+#if !__option(exceptions) && !defined(BOOST_NO_EXCEPTIONS)
+#   define BOOST_NO_EXCEPTIONS
+#endif
+
+#if (__INTEL__ && _WIN32) || (__POWERPC__ && macintosh)
+#   if __MWERKS__ == 0x3000
+#     define BOOST_COMPILER_VERSION 8.0
+#   elif __MWERKS__ == 0x3001
+#     define BOOST_COMPILER_VERSION 8.1
+#   elif __MWERKS__ == 0x3002
+#     define BOOST_COMPILER_VERSION 8.2
+#   elif __MWERKS__ == 0x3003
+#     define BOOST_COMPILER_VERSION 8.3
+#   elif __MWERKS__ == 0x3200
+#     define BOOST_COMPILER_VERSION 9.0
+#   elif __MWERKS__ == 0x3201
+#     define BOOST_COMPILER_VERSION 9.1
+#   elif __MWERKS__ == 0x3202
+#     define BOOST_COMPILER_VERSION 9.2
+#   elif __MWERKS__ == 0x3204
+#     define BOOST_COMPILER_VERSION 9.3
+#   elif __MWERKS__ == 0x3205
+#     define BOOST_COMPILER_VERSION 9.4
+#   elif __MWERKS__ == 0x3206
+#     define BOOST_COMPILER_VERSION 9.5
+#   elif __MWERKS__ == 0x3207
+#     define BOOST_COMPILER_VERSION 9.6
+#   else
+#     define BOOST_COMPILER_VERSION __MWERKS__
+#   endif
+#else
+#  define BOOST_COMPILER_VERSION __MWERKS__
+#endif
+
+//
+// C++0x features
+//
+//   See boost\config\suffix.hpp for BOOST_NO_LONG_LONG
+//
+#if __MWERKS__ > 0x3206 && __option(rvalue_refs)
+#  define BOOST_HAS_RVALUE_REFS
+#else
+#  define BOOST_NO_CXX11_RVALUE_REFERENCES
+#endif
+#define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#define BOOST_NO_CXX11_CHAR16_T
+#define BOOST_NO_CXX11_CHAR32_T
+#define BOOST_NO_CXX11_CONSTEXPR
+#define BOOST_NO_CXX11_DECLTYPE
+#define BOOST_NO_CXX11_DECLTYPE_N3276
+#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#define BOOST_NO_CXX11_EXTERN_TEMPLATE
+#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#define BOOST_NO_CXX11_LAMBDAS
+#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#define BOOST_NO_CXX11_NOEXCEPT
+#define BOOST_NO_CXX11_NULLPTR
+#define BOOST_NO_CXX11_RANGE_BASED_FOR
+#define BOOST_NO_CXX11_RAW_LITERALS
+#define BOOST_NO_CXX11_SCOPED_ENUMS
+#define BOOST_NO_SFINAE_EXPR
+#define BOOST_NO_CXX11_STATIC_ASSERT
+#define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#define BOOST_NO_CXX11_UNICODE_LITERALS
+#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#define BOOST_NO_CXX11_VARIADIC_MACROS
+#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
+#define BOOST_NO_CXX11_FINAL
+
+// C++ 14:
+#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
+#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
+#endif
+#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)
+#  define BOOST_NO_CXX14_BINARY_LITERALS
+#endif
+#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
+#  define BOOST_NO_CXX14_CONSTEXPR
+#endif
+#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)
+#  define BOOST_NO_CXX14_DECLTYPE_AUTO
+#endif
+#if (__cplusplus < 201304) // There's no SD6 check for this....
+#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
+#endif
+#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)
+#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
+#endif
+#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)
+#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
+#endif
+#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)
+#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
+#endif
+#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
+#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
+#endif
+
+#define BOOST_COMPILER "Metrowerks CodeWarrior C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION)
+
+//
+// versions check:
+// we don't support Metrowerks prior to version 5.3:
+#if __MWERKS__ < 0x2301
+#  error "Compiler not supported or configured - please reconfigure"
+#endif
+//
+// last known and checked version:
+#if (__MWERKS__ > 0x3205)
+#  if defined(BOOST_ASSERT_CONFIG)
+#     error "Unknown compiler version - please run the configure tests and report the results"
+#  endif
+#endif
+
+
+
+
+
+
+
diff --git a/vendor/pdalboost/boost/config/compiler/mpw.hpp b/vendor/pdalboost/boost/config/compiler/mpw.hpp
new file mode 100644
index 0000000..76045bc
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/mpw.hpp
@@ -0,0 +1,121 @@
+//  (C) Copyright John Maddock 2001 - 2002.
+//  (C) Copyright Aleksey Gurtovoy 2002.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  MPW C++ compilers setup:
+
+#   if    defined(__SC__)
+#     define BOOST_COMPILER "MPW SCpp version " BOOST_STRINGIZE(__SC__)
+#   elif defined(__MRC__)
+#     define BOOST_COMPILER "MPW MrCpp version " BOOST_STRINGIZE(__MRC__)
+#   else
+#     error "Using MPW compiler configuration by mistake.  Please update."
+#   endif
+
+//
+// MPW 8.90:
+//
+#if (MPW_CPLUS <= 0x890) || !defined(BOOST_STRICT_CONFIG)
+#  define BOOST_NO_CV_SPECIALIZATIONS
+#  define BOOST_NO_DEPENDENT_NESTED_DERIVATIONS
+#  define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
+#  define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+#  define BOOST_NO_INTRINSIC_WCHAR_T
+#  define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#  define BOOST_NO_USING_TEMPLATE
+
+#  define BOOST_NO_CWCHAR
+#  define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+
+#  define BOOST_NO_STD_ALLOCATOR /* actually a bug with const reference overloading */
+
+#endif
+
+//
+// C++0x features
+//
+//   See boost\config\suffix.hpp for BOOST_NO_LONG_LONG
+//
+#define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#define BOOST_NO_CXX11_CHAR16_T
+#define BOOST_NO_CXX11_CHAR32_T
+#define BOOST_NO_CXX11_CONSTEXPR
+#define BOOST_NO_CXX11_DECLTYPE
+#define BOOST_NO_CXX11_DECLTYPE_N3276
+#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#define BOOST_NO_CXX11_EXTERN_TEMPLATE
+#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#define BOOST_NO_CXX11_LAMBDAS
+#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#define BOOST_NO_CXX11_NOEXCEPT
+#define BOOST_NO_CXX11_NULLPTR
+#define BOOST_NO_CXX11_RANGE_BASED_FOR
+#define BOOST_NO_CXX11_RAW_LITERALS
+#define BOOST_NO_CXX11_RVALUE_REFERENCES
+#define BOOST_NO_CXX11_SCOPED_ENUMS
+#define BOOST_NO_SFINAE_EXPR
+#define BOOST_NO_CXX11_STATIC_ASSERT
+#define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#define BOOST_NO_CXX11_UNICODE_LITERALS
+#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#define BOOST_NO_CXX11_VARIADIC_MACROS
+#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
+#define BOOST_NO_CXX11_FINAL
+
+// C++ 14:
+#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
+#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
+#endif
+#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)
+#  define BOOST_NO_CXX14_BINARY_LITERALS
+#endif
+#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
+#  define BOOST_NO_CXX14_CONSTEXPR
+#endif
+#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)
+#  define BOOST_NO_CXX14_DECLTYPE_AUTO
+#endif
+#if (__cplusplus < 201304) // There's no SD6 check for this....
+#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
+#endif
+#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)
+#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
+#endif
+#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)
+#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
+#endif
+#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)
+#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
+#endif
+#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
+#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
+#endif
+
+//
+// versions check:
+// we don't support MPW prior to version 8.9:
+#if MPW_CPLUS < 0x890
+#  error "Compiler not supported or configured - please reconfigure"
+#endif
+//
+// last known and checked version is 0x890:
+#if (MPW_CPLUS > 0x890)
+#  if defined(BOOST_ASSERT_CONFIG)
+#     error "Unknown compiler version - please run the configure tests and report the results"
+#  endif
+#endif
+
+
diff --git a/vendor/pdalboost/boost/config/compiler/nvcc.hpp b/vendor/pdalboost/boost/config/compiler/nvcc.hpp
new file mode 100644
index 0000000..bbe81f6
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/nvcc.hpp
@@ -0,0 +1,16 @@
+//  (C) Copyright Eric Jourdanneau, Joel Falcou 2010
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  NVIDIA CUDA C++ compiler setup
+
+#ifndef BOOST_COMPILER
+#  define BOOST_COMPILER "NVIDIA CUDA C++ Compiler"
+#endif
+
+// NVIDIA Specific support
+// BOOST_GPU_ENABLED : Flag a function or a method as being enabled on the host and device
+#define BOOST_GPU_ENABLED __host__ __device__
diff --git a/vendor/pdalboost/boost/config/compiler/pathscale.hpp b/vendor/pdalboost/boost/config/compiler/pathscale.hpp
new file mode 100644
index 0000000..7c211c4
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/pathscale.hpp
@@ -0,0 +1,114 @@
+//  (C) Copyright Bryce Lelbach 2011
+
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+// PathScale EKOPath C++ Compiler
+
+#ifndef BOOST_COMPILER
+#  define BOOST_COMPILER "PathScale EKOPath C++ Compiler version " __PATHSCALE__
+#endif
+
+#if __PATHCC__ >= 4
+#  define BOOST_MSVC6_MEMBER_TEMPLATES
+#  define BOOST_HAS_UNISTD_H
+#  define BOOST_HAS_STDINT_H
+#  define BOOST_HAS_SIGACTION
+#  define BOOST_HAS_SCHED_YIELD
+#  define BOOST_HAS_THREADS
+#  define BOOST_HAS_PTHREADS
+#  define BOOST_HAS_PTHREAD_YIELD
+#  define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+#  define BOOST_HAS_PARTIAL_STD_ALLOCATOR
+#  define BOOST_HAS_NRVO
+#  define BOOST_HAS_NL_TYPES_H
+#  define BOOST_HAS_NANOSLEEP
+#  define BOOST_HAS_LONG_LONG
+#  define BOOST_HAS_LOG1P
+#  define BOOST_HAS_GETTIMEOFDAY
+#  define BOOST_HAS_EXPM1
+#  define BOOST_HAS_DIRENT_H
+#  define BOOST_HAS_CLOCK_GETTIME
+#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#  define BOOST_NO_CXX11_UNICODE_LITERALS
+#  define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#  define BOOST_NO_CXX11_STATIC_ASSERT
+#  define BOOST_NO_SFINAE_EXPR
+#  define BOOST_NO_CXX11_SCOPED_ENUMS
+#  define BOOST_NO_CXX11_RVALUE_REFERENCES
+#  define BOOST_NO_CXX11_RANGE_BASED_FOR
+#  define BOOST_NO_CXX11_RAW_LITERALS
+#  define BOOST_NO_CXX11_NULLPTR
+#  define BOOST_NO_CXX11_NUMERIC_LIMITS
+#  define BOOST_NO_CXX11_NOEXCEPT
+#  define BOOST_NO_CXX11_LAMBDAS
+#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#  define BOOST_NO_MS_INT64_NUMERIC_LIMITS
+#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#  define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#  define BOOST_NO_CXX11_DECLTYPE
+#  define BOOST_NO_CXX11_DECLTYPE_N3276
+#  define BOOST_NO_CXX11_CONSTEXPR
+#  define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
+#  define BOOST_NO_CXX11_CHAR32_T
+#  define BOOST_NO_CXX11_CHAR16_T
+#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#  define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#  define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#  define BOOST_NO_CXX11_HDR_UNORDERED_SET
+#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+#  define BOOST_NO_CXX11_HDR_TYPEINDEX
+#  define BOOST_NO_CXX11_HDR_TUPLE
+#  define BOOST_NO_CXX11_HDR_THREAD
+#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+#  define BOOST_NO_CXX11_HDR_REGEX
+#  define BOOST_NO_CXX11_HDR_RATIO
+#  define BOOST_NO_CXX11_HDR_RANDOM
+#  define BOOST_NO_CXX11_HDR_MUTEX
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#  define BOOST_NO_CXX11_HDR_FUTURE
+#  define BOOST_NO_CXX11_HDR_FORWARD_LIST
+#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#  define BOOST_NO_CXX11_HDR_CODECVT
+#  define BOOST_NO_CXX11_HDR_CHRONO
+#  define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#  define BOOST_NO_CXX11_ALIGNAS
+#  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#  define BOOST_NO_CXX11_INLINE_NAMESPACES
+#  define BOOST_NO_CXX11_REF_QUALIFIERS
+#  define BOOST_NO_CXX11_FINAL
+
+// C++ 14:
+#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
+#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
+#endif
+#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)
+#  define BOOST_NO_CXX14_BINARY_LITERALS
+#endif
+#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
+#  define BOOST_NO_CXX14_CONSTEXPR
+#endif
+#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)
+#  define BOOST_NO_CXX14_DECLTYPE_AUTO
+#endif
+#if (__cplusplus < 201304) // There's no SD6 check for this....
+#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
+#endif
+#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)
+#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
+#endif
+#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)
+#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
+#endif
+#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)
+#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
+#endif
+#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
+#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/config/compiler/pgi.hpp b/vendor/pdalboost/boost/config/compiler/pgi.hpp
new file mode 100644
index 0000000..e5605c9
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/pgi.hpp
@@ -0,0 +1,155 @@
+//  (C) Copyright Noel Belcourt 2007.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  PGI C++ compiler setup:
+
+#define BOOST_COMPILER_VERSION __PGIC__##__PGIC_MINOR__
+#define BOOST_COMPILER "PGI compiler version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION)
+
+//
+// Threading support:
+// Turn this on unconditionally here, it will get turned off again later
+// if no threading API is detected.
+//
+
+#if __PGIC__ >= 11
+
+// options requested by configure --enable-test
+#define BOOST_HAS_PTHREADS
+#define BOOST_HAS_THREADS
+#define BOOST_HAS_PTHREAD_YIELD
+#define BOOST_HAS_NRVO
+#define BOOST_HAS_LONG_LONG
+
+// options --enable-test wants undefined
+#undef BOOST_NO_STDC_NAMESPACE
+#undef BOOST_NO_EXCEPTION_STD_NAMESPACE
+#undef BOOST_DEDUCED_TYPENAME
+
+#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
+#define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#define BOOST_NO_CXX11_AUTO_DECLARATIONS
+
+#elif __PGIC__ >= 10
+
+// options requested by configure --enable-test
+#define BOOST_HAS_THREADS
+#define BOOST_HAS_NRVO
+#define BOOST_HAS_LONG_LONG
+#if defined(linux) || defined(__linux) || defined(__linux__)
+#  define BOOST_HAS_STDINT_H
+#endif
+
+// options --enable-test wants undefined
+#undef BOOST_NO_STDC_NAMESPACE
+#undef BOOST_NO_EXCEPTION_STD_NAMESPACE
+#undef BOOST_DEDUCED_TYPENAME
+
+#elif __PGIC__ >= 7
+
+#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
+#define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+#define BOOST_NO_SWPRINTF
+#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#define BOOST_NO_CXX11_AUTO_DECLARATIONS
+
+#else
+
+#  error "Pgi compiler not configured - please reconfigure"
+
+#endif
+//
+// C++0x features
+//
+//   See boost\config\suffix.hpp for BOOST_NO_LONG_LONG
+//
+#define BOOST_NO_CXX11_CHAR16_T
+#define BOOST_NO_CXX11_CHAR32_T
+#define BOOST_NO_CXX11_CONSTEXPR
+#define BOOST_NO_CXX11_DECLTYPE
+#define BOOST_NO_CXX11_DECLTYPE_N3276
+#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#define BOOST_NO_CXX11_EXTERN_TEMPLATE
+#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#define BOOST_NO_CXX11_LAMBDAS
+#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#define BOOST_NO_CXX11_NOEXCEPT
+#define BOOST_NO_CXX11_NULLPTR
+#define BOOST_NO_CXX11_NUMERIC_LIMITS
+#define BOOST_NO_CXX11_RANGE_BASED_FOR
+#define BOOST_NO_CXX11_RAW_LITERALS
+#define BOOST_NO_CXX11_RVALUE_REFERENCES
+#define BOOST_NO_CXX11_SCOPED_ENUMS
+#define BOOST_NO_SFINAE_EXPR
+#define BOOST_NO_CXX11_STATIC_ASSERT
+#define BOOST_NO_SWPRINTF
+#define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#define BOOST_NO_CXX11_UNICODE_LITERALS
+#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#define BOOST_NO_CXX11_VARIADIC_MACROS
+#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+
+#define BOOST_NO_CXX11_HDR_UNORDERED_SET
+#define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+#define BOOST_NO_CXX11_HDR_TYPEINDEX
+#define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#define BOOST_NO_CXX11_HDR_TUPLE
+#define BOOST_NO_CXX11_HDR_THREAD
+#define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+#define BOOST_NO_CXX11_HDR_REGEX
+#define BOOST_NO_CXX11_HDR_RATIO
+#define BOOST_NO_CXX11_HDR_RANDOM
+#define BOOST_NO_CXX11_HDR_MUTEX
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#define BOOST_NO_CXX11_HDR_FUTURE
+#define BOOST_NO_CXX11_HDR_FORWARD_LIST
+#define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#define BOOST_NO_CXX11_HDR_CODECVT
+#define BOOST_NO_CXX11_HDR_CHRONO
+#define BOOST_NO_CXX11_HDR_ARRAY
+#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
+#define BOOST_NO_CXX11_FINAL
+
+// C++ 14:
+#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
+#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
+#endif
+#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)
+#  define BOOST_NO_CXX14_BINARY_LITERALS
+#endif
+#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
+#  define BOOST_NO_CXX14_CONSTEXPR
+#endif
+#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)
+#  define BOOST_NO_CXX14_DECLTYPE_AUTO
+#endif
+#if (__cplusplus < 201304) // There's no SD6 check for this....
+#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
+#endif
+#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)
+#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
+#endif
+#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)
+#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
+#endif
+#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)
+#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
+#endif
+#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
+#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
+#endif
+//
+// version check:
+// probably nothing to do here?
+
diff --git a/vendor/pdalboost/boost/config/compiler/sgi_mipspro.hpp b/vendor/pdalboost/boost/config/compiler/sgi_mipspro.hpp
new file mode 100644
index 0000000..9068831
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/sgi_mipspro.hpp
@@ -0,0 +1,29 @@
+//  (C) Copyright John Maddock 2001 - 2002. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  SGI C++ compiler setup:
+
+#define BOOST_COMPILER "SGI Irix compiler version " BOOST_STRINGIZE(_COMPILER_VERSION)
+
+#include "boost/config/compiler/common_edg.hpp"
+
+//
+// Threading support:
+// Turn this on unconditionally here, it will get turned off again later
+// if no threading API is detected.
+//
+#define BOOST_HAS_THREADS
+#define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+
+#undef BOOST_NO_SWPRINTF
+#undef BOOST_DEDUCED_TYPENAME
+
+//
+// version check:
+// probably nothing to do here?
+
+
diff --git a/vendor/pdalboost/boost/config/compiler/sunpro_cc.hpp b/vendor/pdalboost/boost/config/compiler/sunpro_cc.hpp
new file mode 100644
index 0000000..6017660
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/sunpro_cc.hpp
@@ -0,0 +1,190 @@
+//  (C) Copyright John Maddock 2001.
+//  (C) Copyright Jens Maurer 2001 - 2003.
+//  (C) Copyright Peter Dimov 2002.
+//  (C) Copyright Aleksey Gurtovoy 2002 - 2003.
+//  (C) Copyright David Abrahams 2002.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Sun C++ compiler setup:
+
+#    if __SUNPRO_CC <= 0x500
+#      define BOOST_NO_MEMBER_TEMPLATES
+#      define BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+#    endif
+
+#    if (__SUNPRO_CC <= 0x520)
+       //
+       // Sunpro 5.2 and earler:
+       //
+       // although sunpro 5.2 supports the syntax for
+       // inline initialization it often gets the value
+       // wrong, especially where the value is computed
+       // from other constants (J Maddock 6th May 2001)
+#      define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+
+       // Although sunpro 5.2 supports the syntax for
+       // partial specialization, it often seems to
+       // bind to the wrong specialization.  Better
+       // to disable it until suppport becomes more stable
+       // (J Maddock 6th May 2001).
+#      define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#    endif
+
+#    if (__SUNPRO_CC <= 0x530)
+       // Requesting debug info (-g) with Boost.Python results
+       // in an internal compiler error for "static const"
+       // initialized in-class.
+       //    >> Assertion:   (../links/dbg_cstabs.cc, line 611)
+       //         while processing ../test.cpp at line 0.
+       // (Jens Maurer according to Gottfried Ganssauge 04 Mar 2002)
+#      define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+
+       // SunPro 5.3 has better support for partial specialization,
+       // but breaks when compiling std::less<shared_ptr<T> >
+       // (Jens Maurer 4 Nov 2001).
+
+       // std::less specialization fixed as reported by George
+       // Heintzelman; partial specialization re-enabled
+       // (Peter Dimov 17 Jan 2002)
+
+//#      define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+       // integral constant expressions with 64 bit numbers fail
+#      define BOOST_NO_INTEGRAL_INT64_T
+#    endif
+
+#    if (__SUNPRO_CC < 0x570)
+#      define BOOST_NO_TEMPLATE_TEMPLATES
+       // see http://lists.boost.org/MailArchives/boost/msg47184.php
+       // and http://lists.boost.org/MailArchives/boost/msg47220.php
+#      define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+#      define BOOST_NO_SFINAE
+#      define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS
+#    endif
+#    if (__SUNPRO_CC <= 0x580)
+#      define BOOST_NO_IS_ABSTRACT
+#    endif
+
+#    if (__SUNPRO_CC <= 0x5100)
+       // Sun 5.10 may not correctly value-initialize objects of
+       // some user defined types, as was reported in April 2010
+       // (CR 6947016), and confirmed by Steve Clamage.
+       // (Niels Dekker, LKEB, May 2010).
+#      define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
+#    endif
+
+//
+// Dynamic shared object (DSO) and dynamic-link library (DLL) support
+//
+#if __SUNPRO_CC > 0x500
+#  define BOOST_SYMBOL_EXPORT __global
+#  define BOOST_SYMBOL_IMPORT __global
+#  define BOOST_SYMBOL_VISIBLE __global
+#endif
+
+#if (__SUNPRO_CC < 0x5130)
+// C++03 features in 12.4:
+#define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+#define BOOST_NO_SFINAE_EXPR
+#define BOOST_NO_ADL_BARRIER
+#define BOOST_NO_CXX11_VARIADIC_MACROS
+#endif
+
+#if (__SUNPRO_CC < 0x5130) || (__cplusplus < 201100)
+// C++11 only featuires in 12.4:
+#define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#define BOOST_NO_CXX11_CHAR16_T
+#define BOOST_NO_CXX11_CHAR32_T
+#define BOOST_NO_CXX11_CONSTEXPR
+#define BOOST_NO_CXX11_DECLTYPE
+#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#define BOOST_NO_CXX11_EXTERN_TEMPLATE
+#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#define BOOST_NO_CXX11_LAMBDAS
+#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#define BOOST_NO_CXX11_NOEXCEPT
+#define BOOST_NO_CXX11_NULLPTR
+#define BOOST_NO_CXX11_RANGE_BASED_FOR
+#define BOOST_NO_CXX11_RAW_LITERALS
+#define BOOST_NO_CXX11_RVALUE_REFERENCES
+#define BOOST_NO_CXX11_SCOPED_ENUMS
+#define BOOST_NO_CXX11_STATIC_ASSERT
+#define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#define BOOST_NO_CXX11_UNICODE_LITERALS
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_FINAL
+#endif
+
+#if (__SUNPRO_CC < 0x5140) || (__cplusplus < 201103)
+#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#define BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS
+#define BOOST_NO_CXX11_DECLTYPE_N3276
+#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#define BOOST_NO_CXX11_REF_QUALIFIERS
+#endif
+
+#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
+//
+// C++0x features
+//
+#  define BOOST_HAS_LONG_LONG
+
+
+// C++ 14:
+#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
+#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
+#endif
+#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)
+#  define BOOST_NO_CXX14_BINARY_LITERALS
+#endif
+#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
+#  define BOOST_NO_CXX14_CONSTEXPR
+#endif
+#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)
+#  define BOOST_NO_CXX14_DECLTYPE_AUTO
+#endif
+#if (__cplusplus < 201304) // There's no SD6 check for this....
+#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
+#endif
+#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)
+#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
+#endif
+#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)
+#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
+#endif
+#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)
+#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
+#endif
+#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
+#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
+#endif
+//
+// Version
+//
+
+#define BOOST_COMPILER "Sun compiler version " BOOST_STRINGIZE(__SUNPRO_CC)
+
+//
+// versions check:
+// we don't support sunpro prior to version 4:
+#if __SUNPRO_CC < 0x400
+#error "Compiler not supported or configured - please reconfigure"
+#endif
+//
+// last known and checked version is 0x590:
+#if (__SUNPRO_CC > 0x590)
+#  if defined(BOOST_ASSERT_CONFIG)
+#     error "Unknown compiler version - please run the configure tests and report the results"
+#  endif
+#endif
diff --git a/vendor/pdalboost/boost/config/compiler/vacpp.hpp b/vendor/pdalboost/boost/config/compiler/vacpp.hpp
new file mode 100644
index 0000000..6c228ea
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/vacpp.hpp
@@ -0,0 +1,162 @@
+//  (C) Copyright John Maddock 2001 - 2003.
+//  (C) Copyright Toon Knapen 2001 - 2003.
+//  (C) Copyright Lie-Quan Lee 2001.
+//  (C) Copyright Markus Schoepflin 2002 - 2003.
+//  (C) Copyright Beman Dawes 2002 - 2003.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Visual Age (IBM) C++ compiler setup:
+
+#if __IBMCPP__ <= 501
+#  define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+#  define BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS
+#endif
+
+#if (__IBMCPP__ <= 502)
+// Actually the compiler supports inclass member initialization but it
+// requires a definition for the class member and it doesn't recognize
+// it as an integral constant expression when used as a template argument.
+#  define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+#  define BOOST_NO_INTEGRAL_INT64_T
+#  define BOOST_NO_MEMBER_TEMPLATE_KEYWORD
+#endif
+
+#if (__IBMCPP__ <= 600) || !defined(BOOST_STRICT_CONFIG)
+#  define BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS
+#endif
+
+#if (__IBMCPP__ <= 1110)
+// XL C++ V11.1 and earlier versions may not always value-initialize
+// a temporary object T(), when T is a non-POD aggregate class type.
+// Michael Wong (IBM Canada Ltd) has confirmed this issue and gave it
+// high priority. -- Niels Dekker (LKEB), May 2010.
+#  define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
+#endif
+
+//
+// On AIX thread support seems to be indicated by _THREAD_SAFE:
+//
+#ifdef _THREAD_SAFE
+#  define BOOST_HAS_THREADS
+#endif
+
+#define BOOST_COMPILER "IBM Visual Age version " BOOST_STRINGIZE(__IBMCPP__)
+
+//
+// versions check:
+// we don't support Visual age prior to version 5:
+#if __IBMCPP__ < 500
+#error "Compiler not supported or configured - please reconfigure"
+#endif
+//
+// last known and checked version is 1210:
+#if (__IBMCPP__ > 1210)
+#  if defined(BOOST_ASSERT_CONFIG)
+#     error "Unknown compiler version - please run the configure tests and report the results"
+#  endif
+#endif
+
+// Some versions of the compiler have issues with default arguments on partial specializations
+#if __IBMCPP__ <= 1010
+#define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS
+#endif
+
+//
+// C++0x features
+//
+//   See boost\config\suffix.hpp for BOOST_NO_LONG_LONG
+//
+#if ! __IBMCPP_AUTO_TYPEDEDUCTION
+#  define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#endif
+#if ! __IBMCPP_UTF_LITERAL__
+#  define BOOST_NO_CXX11_CHAR16_T
+#  define BOOST_NO_CXX11_CHAR32_T
+#endif
+#if ! __IBMCPP_CONSTEXPR
+#  define BOOST_NO_CXX11_CONSTEXPR
+#endif
+#if ! __IBMCPP_DECLTYPE
+#  define BOOST_NO_CXX11_DECLTYPE
+#else
+#  define BOOST_HAS_DECLTYPE
+#endif
+#define BOOST_NO_CXX11_DECLTYPE_N3276
+#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#if ! __IBMCPP_EXPLICIT_CONVERSION_OPERATORS
+#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#endif
+#if ! __IBMCPP_EXTERN_TEMPLATE
+#  define BOOST_NO_CXX11_EXTERN_TEMPLATE
+#endif
+#if ! __IBMCPP_VARIADIC_TEMPLATES
+// not enabled separately at this time
+#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#endif
+#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#define BOOST_NO_CXX11_LAMBDAS
+#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#define BOOST_NO_CXX11_NOEXCEPT
+#define BOOST_NO_CXX11_NULLPTR
+#define BOOST_NO_CXX11_RANGE_BASED_FOR
+#define BOOST_NO_CXX11_RAW_LITERALS
+#define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#if ! __IBMCPP_RVALUE_REFERENCES
+#  define BOOST_NO_CXX11_RVALUE_REFERENCES
+#endif
+#if ! __IBMCPP_SCOPED_ENUM
+#  define BOOST_NO_CXX11_SCOPED_ENUMS
+#endif
+#define BOOST_NO_SFINAE_EXPR
+#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#if ! __IBMCPP_STATIC_ASSERT
+#  define BOOST_NO_CXX11_STATIC_ASSERT
+#endif
+#define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#define BOOST_NO_CXX11_UNICODE_LITERALS
+#if ! __IBMCPP_VARIADIC_TEMPLATES
+#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#endif
+#if ! __C99_MACRO_WITH_VA_ARGS
+#  define BOOST_NO_CXX11_VARIADIC_MACROS
+#endif
+#define BOOST_NO_CXX11_ALIGNAS
+#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#define BOOST_NO_CXX11_INLINE_NAMESPACES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
+#define BOOST_NO_CXX11_FINAL
+
+// C++ 14:
+#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
+#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
+#endif
+#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304)
+#  define BOOST_NO_CXX14_BINARY_LITERALS
+#endif
+#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
+#  define BOOST_NO_CXX14_CONSTEXPR
+#endif
+#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304)
+#  define BOOST_NO_CXX14_DECLTYPE_AUTO
+#endif
+#if (__cplusplus < 201304) // There's no SD6 check for this....
+#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
+#endif
+#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304)
+#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
+#endif
+#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304)
+#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
+#endif
+#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304)
+#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
+#endif
+#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
+#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
+#endif
diff --git a/vendor/pdalboost/boost/config/compiler/visualc.hpp b/vendor/pdalboost/boost/config/compiler/visualc.hpp
new file mode 100644
index 0000000..baaab58
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/visualc.hpp
@@ -0,0 +1,298 @@
+//  (C) Copyright John Maddock 2001 - 2003.
+//  (C) Copyright Darin Adler 2001 - 2002.
+//  (C) Copyright Peter Dimov 2001.
+//  (C) Copyright Aleksey Gurtovoy 2002.
+//  (C) Copyright David Abrahams 2002 - 2003.
+//  (C) Copyright Beman Dawes 2002 - 2003.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+//
+//  Microsoft Visual C++ compiler setup:
+//
+//  We need to be careful with the checks in this file, as contrary
+//  to popular belief there are versions with _MSC_VER with the final
+//  digit non-zero (mainly the MIPS cross compiler).
+//
+//  So we either test _MSC_VER >= XXXX or else _MSC_VER < XXXX.
+//  No other comparisons (==, >, or <=) are safe.
+//
+
+#define BOOST_MSVC _MSC_VER
+
+//
+// Helper macro BOOST_MSVC_FULL_VER for use in Boost code:
+//
+#if _MSC_FULL_VER > 100000000
+#  define BOOST_MSVC_FULL_VER _MSC_FULL_VER
+#else
+#  define BOOST_MSVC_FULL_VER (_MSC_FULL_VER * 10)
+#endif
+
+// Attempt to suppress VC6 warnings about the length of decorated names (obsolete):
+#pragma warning( disable : 4503 ) // warning: decorated name length exceeded
+
+#define BOOST_HAS_PRAGMA_ONCE
+
+//
+// versions check:
+// we don't support Visual C++ prior to version 7.1:
+#if _MSC_VER < 1310
+#  error "Compiler not supported or configured - please reconfigure"
+#endif
+
+#if _MSC_FULL_VER < 180020827
+#  define BOOST_NO_FENV_H
+#endif
+
+#if _MSC_VER < 1400
+// although a conforming signature for swprint exists in VC7.1
+// it appears not to actually work:
+#  define BOOST_NO_SWPRINTF
+// Our extern template tests also fail for this compiler:
+#  define BOOST_NO_CXX11_EXTERN_TEMPLATE
+// Variadic macros do not exist for VC7.1 and lower
+#  define BOOST_NO_CXX11_VARIADIC_MACROS
+#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#endif
+
+#if _MSC_VER < 1500  // 140X == VC++ 8.0
+#  define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+#endif
+
+#if _MSC_VER < 1600  // 150X == VC++ 9.0
+   // A bug in VC9:
+#  define BOOST_NO_ADL_BARRIER
+#endif
+
+
+#ifndef _NATIVE_WCHAR_T_DEFINED
+#  define BOOST_NO_INTRINSIC_WCHAR_T
+#endif
+
+//
+// check for exception handling support:
+#if !defined(_CPPUNWIND) && !defined(BOOST_NO_EXCEPTIONS)
+#  define BOOST_NO_EXCEPTIONS
+#endif
+
+//
+// __int64 support:
+//
+#define BOOST_HAS_MS_INT64
+#if defined(_MSC_EXTENSIONS) || (_MSC_VER >= 1400)
+#   define BOOST_HAS_LONG_LONG
+#else
+#   define BOOST_NO_LONG_LONG
+#endif
+#if (_MSC_VER >= 1400) && !defined(_DEBUG)
+#   define BOOST_HAS_NRVO
+#endif
+#if _MSC_VER >= 1600  // 160X == VC++ 10.0
+#  define BOOST_HAS_PRAGMA_DETECT_MISMATCH
+#endif
+//
+// disable Win32 API's if compiler extensions are
+// turned off:
+//
+#if !defined(_MSC_EXTENSIONS) && !defined(BOOST_DISABLE_WIN32)
+#  define BOOST_DISABLE_WIN32
+#endif
+#if !defined(_CPPRTTI) && !defined(BOOST_NO_RTTI)
+#  define BOOST_NO_RTTI
+#endif
+
+//
+// TR1 features:
+//
+#if _MSC_VER >= 1700
+// # define BOOST_HAS_TR1_HASH			// don't know if this is true yet.
+// # define BOOST_HAS_TR1_TYPE_TRAITS	// don't know if this is true yet.
+# define BOOST_HAS_TR1_UNORDERED_MAP
+# define BOOST_HAS_TR1_UNORDERED_SET
+#endif
+
+//
+// C++0x features
+//
+//   See above for BOOST_NO_LONG_LONG
+
+// C++ features supported by VC++ 10 (aka 2010)
+//
+#if _MSC_VER < 1600
+#  define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#  define BOOST_NO_CXX11_LAMBDAS
+#  define BOOST_NO_CXX11_RVALUE_REFERENCES
+#  define BOOST_NO_CXX11_STATIC_ASSERT
+#  define BOOST_NO_CXX11_NULLPTR
+#  define BOOST_NO_CXX11_DECLTYPE
+#endif // _MSC_VER < 1600
+
+#if _MSC_VER >= 1600
+#  define BOOST_HAS_STDINT_H
+#endif
+
+// C++11 features supported by VC++ 11 (aka 2012)
+//
+#if _MSC_VER < 1700
+#  define BOOST_NO_CXX11_FINAL
+#  define BOOST_NO_CXX11_RANGE_BASED_FOR
+#  define BOOST_NO_CXX11_SCOPED_ENUMS
+#endif // _MSC_VER < 1700
+
+// C++11 features supported by VC++ 12 (aka 2013).
+//
+#if _MSC_FULL_VER < 180020827
+#  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#  define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#  define BOOST_NO_CXX11_RAW_LITERALS
+#  define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#  define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#  define BOOST_NO_CXX11_DECLTYPE_N3276
+#endif
+
+// C++11 features supported by VC++ 14 (aka 2015)
+//
+#if (_MSC_FULL_VER < 190023026)
+#  define BOOST_NO_CXX11_NOEXCEPT
+#  define BOOST_NO_CXX11_REF_QUALIFIERS
+#  define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#  define BOOST_NO_CXX11_ALIGNAS
+#  define BOOST_NO_CXX11_INLINE_NAMESPACES
+#  define BOOST_NO_CXX11_CHAR16_T
+#  define BOOST_NO_CXX11_CHAR32_T
+#  define BOOST_NO_CXX11_UNICODE_LITERALS
+#  define BOOST_NO_CXX14_DECLTYPE_AUTO
+#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
+#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
+#  define BOOST_NO_CXX14_BINARY_LITERALS
+#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
+#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
+#endif
+
+// MSVC including version 14 has not yet completely
+// implemented value-initialization, as is reported:
+// "VC++ does not value-initialize members of derived classes without
+// user-declared constructor", reported in 2009 by Sylvester Hesp:
+// https://connect.microsoft.com/VisualStudio/feedback/details/484295
+// "Presence of copy constructor breaks member class initialization",
+// reported in 2009 by Alex Vakulenko:
+// https://connect.microsoft.com/VisualStudio/feedback/details/499606
+// "Value-initialization in new-expression", reported in 2005 by
+// Pavel Kuznetsov (MetaCommunications Engineering):
+// https://connect.microsoft.com/VisualStudio/feedback/details/100744
+// Reported again by John Maddock in 2015 for VC14:
+// https://connect.microsoft.com/VisualStudio/feedback/details/1582233/c-subobjects-still-not-value-initialized-correctly
+// See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues
+// (Niels Dekker, LKEB, May 2010)
+#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION
+// C++11 features not supported by any versions
+#define BOOST_NO_SFINAE_EXPR
+#define BOOST_NO_TWO_PHASE_NAME_LOOKUP
+//
+// This is somewhat supported in VC14, but we may need to wait for
+// a service release before enabling:
+//
+#define BOOST_NO_CXX11_CONSTEXPR
+
+// C++ 14:
+#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304)
+#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
+#endif
+#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304)
+#  define BOOST_NO_CXX14_CONSTEXPR
+#endif
+#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304)
+#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
+#endif
+
+//
+// prefix and suffix headers:
+//
+#ifndef BOOST_ABI_PREFIX
+#  define BOOST_ABI_PREFIX "boost/config/abi/msvc_prefix.hpp"
+#endif
+#ifndef BOOST_ABI_SUFFIX
+#  define BOOST_ABI_SUFFIX "boost/config/abi/msvc_suffix.hpp"
+#endif
+
+#ifndef BOOST_COMPILER
+// TODO:
+// these things are mostly bogus. 1200 means version 12.0 of the compiler. The
+// artificial versions assigned to them only refer to the versions of some IDE
+// these compilers have been shipped with, and even that is not all of it. Some
+// were shipped with freely downloadable SDKs, others as crosscompilers in eVC.
+// IOW, you can't use these 'versions' in any sensible way. Sorry.
+# if defined(UNDER_CE)
+#   if _MSC_VER < 1400
+      // Note: I'm not aware of any CE compiler with version 13xx
+#      if defined(BOOST_ASSERT_CONFIG)
+#         error "Unknown EVC++ compiler version - please run the configure tests and report the results"
+#      else
+#         pragma message("Unknown EVC++ compiler version - please run the configure tests and report the results")
+#      endif
+#   elif _MSC_VER < 1500
+#     define BOOST_COMPILER_VERSION evc8
+#   elif _MSC_VER < 1600
+#     define BOOST_COMPILER_VERSION evc9
+#   elif _MSC_VER < 1700
+#     define BOOST_COMPILER_VERSION evc10
+#   elif _MSC_VER < 1800 
+#     define BOOST_COMPILER_VERSION evc11 
+#   elif _MSC_VER < 1900 
+#     define BOOST_COMPILER_VERSION evc12
+#   elif _MSC_VER < 2000  
+#     define BOOST_COMPILER_VERSION evc14
+#   else
+#      if defined(BOOST_ASSERT_CONFIG)
+#         error "Unknown EVC++ compiler version - please run the configure tests and report the results"
+#      else
+#         pragma message("Unknown EVC++ compiler version - please run the configure tests and report the results")
+#      endif
+#   endif
+# else
+#   if _MSC_VER < 1310
+      // Note: Versions up to 7.0 aren't supported.
+#     define BOOST_COMPILER_VERSION 5.0
+#   elif _MSC_VER < 1300
+#     define BOOST_COMPILER_VERSION 6.0
+#   elif _MSC_VER < 1310
+#     define BOOST_COMPILER_VERSION 7.0
+#   elif _MSC_VER < 1400
+#     define BOOST_COMPILER_VERSION 7.1
+#   elif _MSC_VER < 1500
+#     define BOOST_COMPILER_VERSION 8.0
+#   elif _MSC_VER < 1600
+#     define BOOST_COMPILER_VERSION 9.0
+#   elif _MSC_VER < 1700
+#     define BOOST_COMPILER_VERSION 10.0
+#   elif _MSC_VER < 1800 
+#     define BOOST_COMPILER_VERSION 11.0
+#   elif _MSC_VER < 1900
+#     define BOOST_COMPILER_VERSION 12.0
+#   elif _MSC_VER < 2000
+#     define BOOST_COMPILER_VERSION 14.0
+#   else
+#     define BOOST_COMPILER_VERSION _MSC_VER
+#   endif
+# endif
+
+#  define BOOST_COMPILER "Microsoft Visual C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION)
+#endif
+
+//
+// last known and checked version is 19.00.23026 (VC++ 2015 RTM):
+#if (_MSC_VER > 1900)
+#  if defined(BOOST_ASSERT_CONFIG)
+#     error "Unknown compiler version - please run the configure tests and report the results"
+#  else
+#     pragma message("Unknown compiler version - please run the configure tests and report the results")
+#  endif
+#endif
diff --git a/vendor/pdalboost/boost/config/compiler/xlcpp.hpp b/vendor/pdalboost/boost/config/compiler/xlcpp.hpp
new file mode 100644
index 0000000..e369ece
--- /dev/null
+++ b/vendor/pdalboost/boost/config/compiler/xlcpp.hpp
@@ -0,0 +1,258 @@
+// (C) Copyright Douglas Gregor 2010
+//
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  compiler setup for IBM XL C/C++ for Linux (Little Endian) based on clang.
+
+#define BOOST_HAS_PRAGMA_ONCE
+
+// Detecting `-fms-extension` compiler flag assuming that _MSC_VER defined when that flag is used.
+#if defined (_MSC_VER) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 4))
+#   define BOOST_HAS_PRAGMA_DETECT_MISMATCH
+#endif
+
+// When compiling with clang before __has_extension was defined,
+// even if one writes 'defined(__has_extension) && __has_extension(xxx)',
+// clang reports a compiler error. So the only workaround found is:
+
+#ifndef __has_extension
+#define __has_extension __has_feature
+#endif
+
+#if !__has_feature(cxx_exceptions) && !defined(BOOST_NO_EXCEPTIONS)
+#  define BOOST_NO_EXCEPTIONS
+#endif
+
+#if !__has_feature(cxx_rtti) && !defined(BOOST_NO_RTTI)
+#  define BOOST_NO_RTTI
+#endif
+
+#if !__has_feature(cxx_rtti) && !defined(BOOST_NO_TYPEID)
+#  define BOOST_NO_TYPEID
+#endif
+
+#if defined(__int64) && !defined(__GNUC__)
+#  define BOOST_HAS_MS_INT64
+#endif
+
+#define BOOST_HAS_NRVO
+
+// Branch prediction hints
+#if defined(__has_builtin)
+#if __has_builtin(__builtin_expect)
+#define BOOST_LIKELY(x) __builtin_expect(x, 1)
+#define BOOST_UNLIKELY(x) __builtin_expect(x, 0)
+#endif
+#endif
+
+// Clang supports "long long" in all compilation modes.
+#define BOOST_HAS_LONG_LONG
+
+//
+// Dynamic shared object (DSO) and dynamic-link library (DLL) support
+//
+#if !defined(_WIN32) && !defined(__WIN32__) && !defined(WIN32)
+#  define BOOST_SYMBOL_EXPORT __attribute__((__visibility__("default")))
+#  define BOOST_SYMBOL_IMPORT
+#  define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__("default")))
+#endif
+
+//
+// The BOOST_FALLTHROUGH macro can be used to annotate implicit fall-through
+// between switch labels.
+//
+#if __cplusplus >= 201103L && defined(__has_warning)
+#  if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough")
+#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
+#  endif
+#endif
+
+#if !__has_feature(cxx_auto_type)
+#  define BOOST_NO_CXX11_AUTO_DECLARATIONS
+#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
+#endif
+
+//
+// Currently clang on Windows using VC++ RTL does not support C++11's char16_t or char32_t
+//
+#if defined(_MSC_VER) || !(defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)
+#  define BOOST_NO_CXX11_CHAR16_T
+#  define BOOST_NO_CXX11_CHAR32_T
+#endif
+
+#if !__has_feature(cxx_constexpr)
+#  define BOOST_NO_CXX11_CONSTEXPR
+#endif
+
+#if !__has_feature(cxx_decltype)
+#  define BOOST_NO_CXX11_DECLTYPE
+#endif
+
+#if !__has_feature(cxx_decltype_incomplete_return_types)
+#  define BOOST_NO_CXX11_DECLTYPE_N3276
+#endif
+
+#if !__has_feature(cxx_defaulted_functions)
+#  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
+#endif
+
+#if !__has_feature(cxx_deleted_functions)
+#  define BOOST_NO_CXX11_DELETED_FUNCTIONS
+#endif
+
+#if !__has_feature(cxx_explicit_conversions)
+#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#endif
+
+#if !__has_feature(cxx_default_function_template_args)
+#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#endif
+
+#if !__has_feature(cxx_generalized_initializers)
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#endif
+
+#if !__has_feature(cxx_lambdas)
+#  define BOOST_NO_CXX11_LAMBDAS
+#endif
+
+#if !__has_feature(cxx_local_type_template_args)
+#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#endif
+
+#if !__has_feature(cxx_noexcept)
+#  define BOOST_NO_CXX11_NOEXCEPT
+#endif
+
+#if !__has_feature(cxx_nullptr)
+#  define BOOST_NO_CXX11_NULLPTR
+#endif
+
+#if !__has_feature(cxx_range_for)
+#  define BOOST_NO_CXX11_RANGE_BASED_FOR
+#endif
+
+#if !__has_feature(cxx_raw_string_literals)
+#  define BOOST_NO_CXX11_RAW_LITERALS
+#endif
+
+#if !__has_feature(cxx_reference_qualified_functions)
+#  define BOOST_NO_CXX11_REF_QUALIFIERS
+#endif
+
+#if !__has_feature(cxx_generalized_initializers)
+#  define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#endif
+
+#if !__has_feature(cxx_rvalue_references)
+#  define BOOST_NO_CXX11_RVALUE_REFERENCES
+#endif
+
+#if !__has_feature(cxx_strong_enums)
+#  define BOOST_NO_CXX11_SCOPED_ENUMS
+#endif
+
+#if !__has_feature(cxx_static_assert)
+#  define BOOST_NO_CXX11_STATIC_ASSERT
+#endif
+
+#if !__has_feature(cxx_alias_templates)
+#  define BOOST_NO_CXX11_TEMPLATE_ALIASES
+#endif
+
+#if !__has_feature(cxx_unicode_literals)
+#  define BOOST_NO_CXX11_UNICODE_LITERALS
+#endif
+
+#if !__has_feature(cxx_variadic_templates)
+#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#endif
+
+#if !__has_feature(cxx_user_literals)
+#  define BOOST_NO_CXX11_USER_DEFINED_LITERALS
+#endif
+
+#if !__has_feature(cxx_alignas)
+#  define BOOST_NO_CXX11_ALIGNAS
+#endif
+
+#if !__has_feature(cxx_trailing_return)
+#  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
+#endif
+
+#if !__has_feature(cxx_inline_namespaces)
+#  define BOOST_NO_CXX11_INLINE_NAMESPACES
+#endif
+
+#if !__has_feature(cxx_override_control)
+#  define BOOST_NO_CXX11_FINAL
+#endif
+
+#if !(__has_feature(__cxx_binary_literals__) || __has_extension(__cxx_binary_literals__))
+#  define BOOST_NO_CXX14_BINARY_LITERALS
+#endif
+
+#if !__has_feature(__cxx_decltype_auto__)
+#  define BOOST_NO_CXX14_DECLTYPE_AUTO
+#endif
+
+#if !__has_feature(__cxx_aggregate_nsdmi__)
+#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
+#endif
+
+#if !__has_feature(__cxx_init_captures__)
+#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
+#endif
+
+#if !__has_feature(__cxx_generic_lambdas__)
+#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
+#endif
+
+// clang < 3.5 has a defect with dependent type, like following.
+//
+//  template <class T>
+//  constexpr typename enable_if<pred<T> >::type foo(T &)
+//  { } // error: no return statement in constexpr function
+//
+// This issue also affects C++11 mode, but C++11 constexpr requires return stmt.
+// Therefore we don't care such case.
+//
+// Note that we can't check Clang version directly as the numbering system changes depending who's
+// creating the Clang release (see https://github.com/boostorg/config/pull/39#issuecomment-59927873)
+// so instead verify that we have a feature that was introduced at the same time as working C++14
+// constexpr (generic lambda's in this case):
+//
+#if !__has_feature(__cxx_generic_lambdas__) || !__has_feature(__cxx_relaxed_constexpr__)
+#  define BOOST_NO_CXX14_CONSTEXPR
+#endif
+
+#if !__has_feature(__cxx_return_type_deduction__)
+#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
+#endif
+
+#if !__has_feature(__cxx_variable_templates__)
+#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
+#endif
+
+#if __cplusplus < 201400
+// All versions with __cplusplus above this value seem to support this:
+#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
+#endif
+
+
+// Unused attribute:
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+#  define BOOST_ATTRIBUTE_UNUSED __attribute__((unused))
+#endif
+
+#ifndef BOOST_COMPILER
+#  define BOOST_COMPILER "Clang version " __clang_version__
+#endif
+
+// Macro used to identify the Clang compiler.
+#define BOOST_CLANG 1
+
diff --git a/vendor/pdalboost/boost/config/no_tr1/cmath.hpp b/vendor/pdalboost/boost/config/no_tr1/cmath.hpp
new file mode 100644
index 0000000..d8268d8
--- /dev/null
+++ b/vendor/pdalboost/boost/config/no_tr1/cmath.hpp
@@ -0,0 +1,28 @@
+//  (C) Copyright John Maddock 2008.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// The aim of this header is just to include <cmath> but to do
+// so in a way that does not result in recursive inclusion of
+// the Boost TR1 components if boost/tr1/tr1/cmath is in the
+// include search path.  We have to do this to avoid circular
+// dependencies:
+//
+
+#ifndef BOOST_CONFIG_CMATH
+#  define BOOST_CONFIG_CMATH
+
+#  ifndef BOOST_TR1_NO_RECURSION
+#     define BOOST_TR1_NO_RECURSION
+#     define BOOST_CONFIG_NO_CMATH_RECURSION
+#  endif
+
+#  include <cmath>
+
+#  ifdef BOOST_CONFIG_NO_CMATH_RECURSION
+#     undef BOOST_TR1_NO_RECURSION
+#     undef BOOST_CONFIG_NO_CMATH_RECURSION
+#  endif
+
+#endif
diff --git a/vendor/pdalboost/boost/config/no_tr1/complex.hpp b/vendor/pdalboost/boost/config/no_tr1/complex.hpp
new file mode 100644
index 0000000..ca20092
--- /dev/null
+++ b/vendor/pdalboost/boost/config/no_tr1/complex.hpp
@@ -0,0 +1,28 @@
+//  (C) Copyright John Maddock 2005.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// The aim of this header is just to include <complex> but to do
+// so in a way that does not result in recursive inclusion of
+// the Boost TR1 components if boost/tr1/tr1/complex is in the
+// include search path.  We have to do this to avoid circular
+// dependencies:
+//
+
+#ifndef BOOST_CONFIG_COMPLEX
+#  define BOOST_CONFIG_COMPLEX
+
+#  ifndef BOOST_TR1_NO_RECURSION
+#     define BOOST_TR1_NO_RECURSION
+#     define BOOST_CONFIG_NO_COMPLEX_RECURSION
+#  endif
+
+#  include <complex>
+
+#  ifdef BOOST_CONFIG_NO_COMPLEX_RECURSION
+#     undef BOOST_TR1_NO_RECURSION
+#     undef BOOST_CONFIG_NO_COMPLEX_RECURSION
+#  endif
+
+#endif
diff --git a/vendor/pdalboost/boost/config/no_tr1/functional.hpp b/vendor/pdalboost/boost/config/no_tr1/functional.hpp
new file mode 100644
index 0000000..e395efc
--- /dev/null
+++ b/vendor/pdalboost/boost/config/no_tr1/functional.hpp
@@ -0,0 +1,28 @@
+//  (C) Copyright John Maddock 2005.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// The aim of this header is just to include <functional> but to do
+// so in a way that does not result in recursive inclusion of
+// the Boost TR1 components if boost/tr1/tr1/functional is in the
+// include search path.  We have to do this to avoid circular
+// dependencies:
+//
+
+#ifndef BOOST_CONFIG_FUNCTIONAL
+#  define BOOST_CONFIG_FUNCTIONAL
+
+#  ifndef BOOST_TR1_NO_RECURSION
+#     define BOOST_TR1_NO_RECURSION
+#     define BOOST_CONFIG_NO_FUNCTIONAL_RECURSION
+#  endif
+
+#  include <functional>
+
+#  ifdef BOOST_CONFIG_NO_FUNCTIONAL_RECURSION
+#     undef BOOST_TR1_NO_RECURSION
+#     undef BOOST_CONFIG_NO_FUNCTIONAL_RECURSION
+#  endif
+
+#endif
diff --git a/vendor/pdalboost/boost/config/no_tr1/memory.hpp b/vendor/pdalboost/boost/config/no_tr1/memory.hpp
new file mode 100644
index 0000000..2b5d208
--- /dev/null
+++ b/vendor/pdalboost/boost/config/no_tr1/memory.hpp
@@ -0,0 +1,28 @@
+//  (C) Copyright John Maddock 2005.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// The aim of this header is just to include <memory> but to do
+// so in a way that does not result in recursive inclusion of
+// the Boost TR1 components if boost/tr1/tr1/memory is in the
+// include search path.  We have to do this to avoid circular
+// dependencies:
+//
+
+#ifndef BOOST_CONFIG_MEMORY
+#  define BOOST_CONFIG_MEMORY
+
+#  ifndef BOOST_TR1_NO_RECURSION
+#     define BOOST_TR1_NO_RECURSION
+#     define BOOST_CONFIG_NO_MEMORY_RECURSION
+#  endif
+
+#  include <memory>
+
+#  ifdef BOOST_CONFIG_NO_MEMORY_RECURSION
+#     undef BOOST_TR1_NO_RECURSION
+#     undef BOOST_CONFIG_NO_MEMORY_RECURSION
+#  endif
+
+#endif
diff --git a/vendor/pdalboost/boost/config/no_tr1/utility.hpp b/vendor/pdalboost/boost/config/no_tr1/utility.hpp
new file mode 100644
index 0000000..dea8f11
--- /dev/null
+++ b/vendor/pdalboost/boost/config/no_tr1/utility.hpp
@@ -0,0 +1,28 @@
+//  (C) Copyright John Maddock 2005.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// The aim of this header is just to include <utility> but to do
+// so in a way that does not result in recursive inclusion of
+// the Boost TR1 components if boost/tr1/tr1/utility is in the
+// include search path.  We have to do this to avoid circular
+// dependencies:
+//
+
+#ifndef BOOST_CONFIG_UTILITY
+#  define BOOST_CONFIG_UTILITY
+
+#  ifndef BOOST_TR1_NO_RECURSION
+#     define BOOST_TR1_NO_RECURSION
+#     define BOOST_CONFIG_NO_UTILITY_RECURSION
+#  endif
+
+#  include <utility>
+
+#  ifdef BOOST_CONFIG_NO_UTILITY_RECURSION
+#     undef BOOST_TR1_NO_RECURSION
+#     undef BOOST_CONFIG_NO_UTILITY_RECURSION
+#  endif
+
+#endif
diff --git a/vendor/pdalboost/boost/config/platform/aix.hpp b/vendor/pdalboost/boost/config/platform/aix.hpp
new file mode 100644
index 0000000..894ef42
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/aix.hpp
@@ -0,0 +1,33 @@
+//  (C) Copyright John Maddock 2001 - 2002. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  IBM/Aix specific config options:
+
+#define BOOST_PLATFORM "IBM Aix"
+
+#define BOOST_HAS_UNISTD_H
+#define BOOST_HAS_NL_TYPES_H
+#define BOOST_HAS_NANOSLEEP
+#define BOOST_HAS_CLOCK_GETTIME
+
+// This needs support in "boost/cstdint.hpp" exactly like FreeBSD.
+// This platform has header named <inttypes.h> which includes all
+// the things needed.
+#define BOOST_HAS_STDINT_H
+
+// Threading API's:
+#define BOOST_HAS_PTHREADS
+#define BOOST_HAS_PTHREAD_DELAY_NP
+#define BOOST_HAS_SCHED_YIELD
+//#define BOOST_HAS_PTHREAD_YIELD
+
+// boilerplate code:
+#include <boost/config/posix_features.hpp>
+
+
+
+
diff --git a/vendor/pdalboost/boost/config/platform/amigaos.hpp b/vendor/pdalboost/boost/config/platform/amigaos.hpp
new file mode 100644
index 0000000..34bcf41
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/amigaos.hpp
@@ -0,0 +1,15 @@
+//  (C) Copyright John Maddock 2002. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+#define BOOST_PLATFORM "AmigaOS"
+
+#define BOOST_DISABLE_THREADS
+#define BOOST_NO_CWCHAR
+#define BOOST_NO_STD_WSTRING
+#define BOOST_NO_INTRINSIC_WCHAR_T
+ 
+
diff --git a/vendor/pdalboost/boost/config/platform/beos.hpp b/vendor/pdalboost/boost/config/platform/beos.hpp
new file mode 100644
index 0000000..48c3d8d
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/beos.hpp
@@ -0,0 +1,26 @@
+//  (C) Copyright John Maddock 2001. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  BeOS specific config options:
+
+#define BOOST_PLATFORM "BeOS"
+
+#define BOOST_NO_CWCHAR
+#define BOOST_NO_CWCTYPE
+#define BOOST_HAS_UNISTD_H
+
+#define BOOST_HAS_BETHREADS
+
+#ifndef BOOST_DISABLE_THREADS
+#  define BOOST_HAS_THREADS
+#endif
+
+// boilerplate code:
+#include <boost/config/posix_features.hpp>
+ 
+
+
diff --git a/vendor/pdalboost/boost/config/platform/bsd.hpp b/vendor/pdalboost/boost/config/platform/bsd.hpp
new file mode 100644
index 0000000..a014297
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/bsd.hpp
@@ -0,0 +1,86 @@
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  (C) Copyright Darin Adler 2001. 
+//  (C) Copyright Douglas Gregor 2002. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  generic BSD config options:
+
+#if !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__DragonFly__)
+#error "This platform is not BSD"
+#endif
+
+#ifdef __FreeBSD__
+#define BOOST_PLATFORM "FreeBSD " BOOST_STRINGIZE(__FreeBSD__)
+#elif defined(__NetBSD__)
+#define BOOST_PLATFORM "NetBSD " BOOST_STRINGIZE(__NetBSD__)
+#elif defined(__OpenBSD__)
+#define BOOST_PLATFORM "OpenBSD " BOOST_STRINGIZE(__OpenBSD__)
+#elif defined(__DragonFly__)
+#define BOOST_PLATFORM "DragonFly " BOOST_STRINGIZE(__DragonFly__)
+#endif
+
+//
+// is this the correct version check?
+// FreeBSD has <nl_types.h> but does not
+// advertise the fact in <unistd.h>:
+//
+#if (defined(__FreeBSD__) && (__FreeBSD__ >= 3)) || defined(__DragonFly__)
+#  define BOOST_HAS_NL_TYPES_H
+#endif
+
+//
+// FreeBSD 3.x has pthreads support, but defines _POSIX_THREADS in <pthread.h>
+// and not in <unistd.h>
+//
+#if (defined(__FreeBSD__) && (__FreeBSD__ <= 3))\
+   || defined(__OpenBSD__) || defined(__DragonFly__) 
+#  define BOOST_HAS_PTHREADS
+#endif
+
+//
+// No wide character support in the BSD header files:
+//
+#if defined(__NetBSD__)
+#define __NetBSD_GCC__ (__GNUC__         * 1000000 \
+                       + __GNUC_MINOR__ *    1000 \
+                       + __GNUC_PATCHLEVEL__)
+// XXX - the following is required until c++config.h
+//       defines _GLIBCXX_HAVE_SWPRINTF and friends
+//       or the preprocessor conditionals are removed
+//       from the cwchar header.
+#define _GLIBCXX_HAVE_SWPRINTF 1
+#endif
+
+#if !((defined(__FreeBSD__) && (__FreeBSD__ >= 5)) \
+      || (defined(__NetBSD_GCC__) && (__NetBSD_GCC__ >= 2095003)) || defined(__DragonFly__))
+#  define BOOST_NO_CWCHAR
+#endif
+//
+// The BSD <ctype.h> has macros only, no functions:
+//
+#if !defined(__OpenBSD__) || defined(__DragonFly__)
+#  define BOOST_NO_CTYPE_FUNCTIONS
+#endif
+
+//
+// thread API's not auto detected:
+//
+#define BOOST_HAS_SCHED_YIELD
+#define BOOST_HAS_NANOSLEEP
+#define BOOST_HAS_GETTIMEOFDAY
+#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+#define BOOST_HAS_SIGACTION
+
+// boilerplate code:
+#define BOOST_HAS_UNISTD_H
+#include <boost/config/posix_features.hpp>
+
+
+
+
+
+
diff --git a/vendor/pdalboost/boost/config/platform/cloudabi.hpp b/vendor/pdalboost/boost/config/platform/cloudabi.hpp
new file mode 100644
index 0000000..bed7b63
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/cloudabi.hpp
@@ -0,0 +1,18 @@
+//       Copyright Nuxi, https://nuxi.nl/ 2015.
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_PLATFORM "CloudABI"
+
+#define BOOST_HAS_DIRENT_H
+#define BOOST_HAS_STDINT_H
+#define BOOST_HAS_UNISTD_H
+
+#define BOOST_HAS_CLOCK_GETTIME
+#define BOOST_HAS_EXPM1
+#define BOOST_HAS_GETTIMEOFDAY
+#define BOOST_HAS_LOG1P
+#define BOOST_HAS_NANOSLEEP
+#define BOOST_HAS_PTHREADS
+#define BOOST_HAS_SCHED_YIELD
diff --git a/vendor/pdalboost/boost/config/platform/cray.hpp b/vendor/pdalboost/boost/config/platform/cray.hpp
new file mode 100644
index 0000000..5c476e4
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/cray.hpp
@@ -0,0 +1,18 @@
+//  (C) Copyright John Maddock 2011.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+//  See http://www.boost.org for most recent version.
+
+//  SGI Irix specific config options:
+
+#define BOOST_PLATFORM "Cray"
+
+// boilerplate code:
+#define BOOST_HAS_UNISTD_H
+#include <boost/config/posix_features.hpp>
+
+
+
diff --git a/vendor/pdalboost/boost/config/platform/cygwin.hpp b/vendor/pdalboost/boost/config/platform/cygwin.hpp
new file mode 100644
index 0000000..b7ef572
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/cygwin.hpp
@@ -0,0 +1,58 @@
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  cygwin specific config options:
+
+#define BOOST_PLATFORM "Cygwin"
+#define BOOST_HAS_DIRENT_H
+#define BOOST_HAS_LOG1P
+#define BOOST_HAS_EXPM1
+
+//
+// Threading API:
+// See if we have POSIX threads, if we do use them, otherwise
+// revert to native Win threads.
+#define BOOST_HAS_UNISTD_H
+#include <unistd.h>
+#if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(BOOST_HAS_WINTHREADS)
+#  define BOOST_HAS_PTHREADS
+#  define BOOST_HAS_SCHED_YIELD
+#  define BOOST_HAS_GETTIMEOFDAY
+#  define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+#  define BOOST_HAS_SIGACTION
+#else
+#  if !defined(BOOST_HAS_WINTHREADS)
+#     define BOOST_HAS_WINTHREADS
+#  endif
+#  define BOOST_HAS_FTIME
+#endif
+
+//
+// find out if we have a stdint.h, there should be a better way to do this:
+//
+#include <sys/types.h>
+#ifdef _STDINT_H
+#define BOOST_HAS_STDINT_H
+#endif
+
+/// Cygwin has no fenv.h
+#define BOOST_NO_FENV_H
+
+// boilerplate code:
+#include <boost/config/posix_features.hpp>
+
+//
+// Cygwin lies about XSI conformance, there is no nl_types.h:
+//
+#ifdef BOOST_HAS_NL_TYPES_H
+#  undef BOOST_HAS_NL_TYPES_H
+#endif
+ 
+
+
+
+
diff --git a/vendor/pdalboost/boost/config/platform/haiku.hpp b/vendor/pdalboost/boost/config/platform/haiku.hpp
new file mode 100644
index 0000000..750866c
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/haiku.hpp
@@ -0,0 +1,31 @@
+//  (C) Copyright Jessica Hamilton 2014.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Haiku specific config options:
+
+#define BOOST_PLATFORM "Haiku"
+
+#define BOOST_HAS_UNISTD_H
+#define BOOST_HAS_STDINT_H
+
+#ifndef BOOST_DISABLE_THREADS
+#  define BOOST_HAS_THREADS
+#endif
+
+#define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#define BOOST_NO_CXX11_ATOMIC_SMART_PTR
+#define BOOST_NO_CXX11_STATIC_ASSERT
+#define BOOST_NO_CXX11_VARIADIC_MACROS
+
+//
+// thread API's not auto detected:
+//
+#define BOOST_HAS_SCHED_YIELD
+#define BOOST_HAS_GETTIMEOFDAY
+
+// boilerplate code:
+#include <boost/config/posix_features.hpp>
diff --git a/vendor/pdalboost/boost/config/platform/hpux.hpp b/vendor/pdalboost/boost/config/platform/hpux.hpp
new file mode 100644
index 0000000..19ce68e
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/hpux.hpp
@@ -0,0 +1,87 @@
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  (C) Copyright Jens Maurer 2001 - 2003. 
+//  (C) Copyright David Abrahams 2002. 
+//  (C) Copyright Toon Knapen 2003. 
+//  (C) Copyright Boris Gubenko 2006 - 2007.
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  hpux specific config options:
+
+#define BOOST_PLATFORM "HP-UX"
+
+// In principle, HP-UX has a nice <stdint.h> under the name <inttypes.h>
+// However, it has the following problem:
+// Use of UINT32_C(0) results in "0u l" for the preprocessed source
+// (verifyable with gcc 2.95.3)
+#if (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__HP_aCC)
+#  define BOOST_HAS_STDINT_H
+#endif
+
+#if !(defined(__HP_aCC) || !defined(_INCLUDE__STDC_A1_SOURCE))
+#  define BOOST_NO_SWPRINTF
+#endif
+#if defined(__HP_aCC) && !defined(_INCLUDE__STDC_A1_SOURCE)
+#  define BOOST_NO_CWCTYPE
+#endif
+
+#if defined(__GNUC__)
+#  if (__GNUC__ < 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ < 3))
+      // GNU C on HP-UX does not support threads (checked up to gcc 3.3)
+#     define BOOST_DISABLE_THREADS
+#  elif !defined(BOOST_DISABLE_THREADS)
+      // threads supported from gcc-3.3 onwards:
+#     define BOOST_HAS_THREADS
+#     define BOOST_HAS_PTHREADS
+#  endif
+#elif defined(__HP_aCC) && !defined(BOOST_DISABLE_THREADS)
+#  define BOOST_HAS_PTHREADS
+#endif
+
+// boilerplate code:
+#define BOOST_HAS_UNISTD_H
+#include <boost/config/posix_features.hpp>
+
+// the following are always available:
+#ifndef BOOST_HAS_GETTIMEOFDAY
+#  define BOOST_HAS_GETTIMEOFDAY
+#endif
+#ifndef BOOST_HAS_SCHED_YIELD
+#    define BOOST_HAS_SCHED_YIELD
+#endif
+#ifndef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+#    define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+#endif
+#ifndef BOOST_HAS_NL_TYPES_H
+#    define BOOST_HAS_NL_TYPES_H
+#endif
+#ifndef BOOST_HAS_NANOSLEEP
+#    define BOOST_HAS_NANOSLEEP
+#endif
+#ifndef BOOST_HAS_GETTIMEOFDAY
+#    define BOOST_HAS_GETTIMEOFDAY
+#endif
+#ifndef BOOST_HAS_DIRENT_H
+#    define BOOST_HAS_DIRENT_H
+#endif
+#ifndef BOOST_HAS_CLOCK_GETTIME
+#    define BOOST_HAS_CLOCK_GETTIME
+#endif
+#ifndef BOOST_HAS_SIGACTION
+#  define BOOST_HAS_SIGACTION
+#endif
+#ifndef BOOST_HAS_NRVO 
+#  ifndef __parisc
+#    define BOOST_HAS_NRVO
+#  endif
+#endif
+#ifndef BOOST_HAS_LOG1P 
+#  define BOOST_HAS_LOG1P
+#endif
+#ifndef BOOST_HAS_EXPM1
+#  define BOOST_HAS_EXPM1
+#endif
+
diff --git a/vendor/pdalboost/boost/config/platform/irix.hpp b/vendor/pdalboost/boost/config/platform/irix.hpp
new file mode 100644
index 0000000..aeae49c
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/irix.hpp
@@ -0,0 +1,31 @@
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  (C) Copyright Jens Maurer 2003. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+//  See http://www.boost.org for most recent version.
+
+//  SGI Irix specific config options:
+
+#define BOOST_PLATFORM "SGI Irix"
+
+#define BOOST_NO_SWPRINTF 
+//
+// these are not auto detected by POSIX feature tests:
+//
+#define BOOST_HAS_GETTIMEOFDAY
+#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+
+#ifdef __GNUC__
+   // GNU C on IRIX does not support threads (checked up to gcc 3.3)
+#  define BOOST_DISABLE_THREADS
+#endif
+
+// boilerplate code:
+#define BOOST_HAS_UNISTD_H
+#include <boost/config/posix_features.hpp>
+
+
+
diff --git a/vendor/pdalboost/boost/config/platform/linux.hpp b/vendor/pdalboost/boost/config/platform/linux.hpp
new file mode 100644
index 0000000..6fa5f45
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/linux.hpp
@@ -0,0 +1,105 @@
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  (C) Copyright Jens Maurer 2001 - 2003. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  linux specific config options:
+
+#define BOOST_PLATFORM "linux"
+
+// make sure we have __GLIBC_PREREQ if available at all
+#ifdef __cplusplus
+#include <cstdlib>
+#else
+#include <stdlib.h>
+#endif
+
+//
+// <stdint.h> added to glibc 2.1.1
+// We can only test for 2.1 though:
+//
+#if defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1)))
+   // <stdint.h> defines int64_t unconditionally, but <sys/types.h> defines
+   // int64_t only if __GNUC__.  Thus, assume a fully usable <stdint.h>
+   // only when using GCC.
+#  if defined __GNUC__
+#    define BOOST_HAS_STDINT_H
+#  endif
+#endif
+
+#if defined(__LIBCOMO__)
+   //
+   // como on linux doesn't have std:: c functions:
+   // NOTE: versions of libcomo prior to beta28 have octal version numbering,
+   // e.g. version 25 is 21 (dec)
+   //
+#  if __LIBCOMO_VERSION__ <= 20
+#    define BOOST_NO_STDC_NAMESPACE
+#  endif
+
+#  if __LIBCOMO_VERSION__ <= 21
+#    define BOOST_NO_SWPRINTF
+#  endif
+
+#endif
+
+//
+// If glibc is past version 2 then we definitely have
+// gettimeofday, earlier versions may or may not have it:
+//
+#if defined(__GLIBC__) && (__GLIBC__ >= 2)
+#  define BOOST_HAS_GETTIMEOFDAY
+#endif
+
+#ifdef __USE_POSIX199309
+#  define BOOST_HAS_NANOSLEEP
+#endif
+
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
+// __GLIBC_PREREQ is available since 2.1.2
+
+   // swprintf is available since glibc 2.2.0
+#  if !__GLIBC_PREREQ(2,2) || (!defined(__USE_ISOC99) && !defined(__USE_UNIX98))
+#    define BOOST_NO_SWPRINTF
+#  endif
+#else
+#  define BOOST_NO_SWPRINTF
+#endif
+
+// boilerplate code:
+#define BOOST_HAS_UNISTD_H
+#include <boost/config/posix_features.hpp>
+#ifdef __USE_GNU
+#define BOOST_HAS_PTHREAD_YIELD
+#endif
+
+#ifndef __GNUC__
+//
+// if the compiler is not gcc we still need to be able to parse
+// the GNU system headers, some of which (mainly <stdint.h>)
+// use GNU specific extensions:
+//
+#  ifndef __extension__
+#     define __extension__
+#  endif
+#  ifndef __const__
+#     define __const__ const
+#  endif
+#  ifndef __volatile__
+#     define __volatile__ volatile
+#  endif
+#  ifndef __signed__
+#     define __signed__ signed
+#  endif
+#  ifndef __typeof__
+#     define __typeof__ typeof
+#  endif
+#  ifndef __inline__
+#     define __inline__ inline
+#  endif
+#endif
+
+
diff --git a/vendor/pdalboost/boost/config/platform/macos.hpp b/vendor/pdalboost/boost/config/platform/macos.hpp
new file mode 100644
index 0000000..5be4e3b
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/macos.hpp
@@ -0,0 +1,87 @@
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  (C) Copyright Darin Adler 2001 - 2002. 
+//  (C) Copyright Bill Kempf 2002. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Mac OS specific config options:
+
+#define BOOST_PLATFORM "Mac OS"
+
+#if __MACH__ && !defined(_MSL_USING_MSL_C)
+
+// Using the Mac OS X system BSD-style C library.
+
+#  ifndef BOOST_HAS_UNISTD_H
+#    define BOOST_HAS_UNISTD_H
+#  endif
+//
+// Begin by including our boilerplate code for POSIX
+// feature detection, this is safe even when using
+// the MSL as Metrowerks supply their own <unistd.h>
+// to replace the platform-native BSD one. G++ users
+// should also always be able to do this on MaxOS X.
+//
+#  include <boost/config/posix_features.hpp>
+#  ifndef BOOST_HAS_STDINT_H
+#     define BOOST_HAS_STDINT_H
+#  endif
+
+//
+// BSD runtime has pthreads, sigaction, sched_yield and gettimeofday,
+// of these only pthreads are advertised in <unistd.h>, so set the 
+// other options explicitly:
+//
+#  define BOOST_HAS_SCHED_YIELD
+#  define BOOST_HAS_GETTIMEOFDAY
+#  define BOOST_HAS_SIGACTION
+
+#  if (__GNUC__ < 3) && !defined( __APPLE_CC__)
+
+// GCC strange "ignore std" mode works better if you pretend everything
+// is in the std namespace, for the most part.
+
+#    define BOOST_NO_STDC_NAMESPACE
+#  endif
+
+#  if (__GNUC__ >= 4)
+
+// Both gcc and intel require these.  
+#    define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+#    define BOOST_HAS_NANOSLEEP
+
+#  endif
+
+#else
+
+// Using the MSL C library.
+
+// We will eventually support threads in non-Carbon builds, but we do
+// not support this yet.
+#  if ( defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON ) || ( defined(TARGET_CARBON) && TARGET_CARBON )
+
+#  if !defined(BOOST_HAS_PTHREADS)
+// MPTasks support is deprecated/removed from Boost:
+//#    define BOOST_HAS_MPTASKS
+#  elif ( __dest_os == __mac_os_x )
+// We are doing a Carbon/Mach-O/MSL build which has pthreads, but only the
+// gettimeofday and no posix.
+#  define BOOST_HAS_GETTIMEOFDAY
+#  endif
+
+#ifdef BOOST_HAS_PTHREADS
+#  define BOOST_HAS_THREADS
+#endif
+
+// The remote call manager depends on this.
+#    define BOOST_BIND_ENABLE_PASCAL
+
+#  endif
+
+#endif
+
+
+
diff --git a/vendor/pdalboost/boost/config/platform/qnxnto.hpp b/vendor/pdalboost/boost/config/platform/qnxnto.hpp
new file mode 100644
index 0000000..b1377c8
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/qnxnto.hpp
@@ -0,0 +1,31 @@
+//  (C) Copyright Jim Douglas 2005. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  QNX specific config options:
+
+#define BOOST_PLATFORM "QNX"
+
+#define BOOST_HAS_UNISTD_H
+#include <boost/config/posix_features.hpp>
+
+// QNX claims XOpen version 5 compatibility, but doesn't have an nl_types.h
+// or log1p and expm1:
+#undef  BOOST_HAS_NL_TYPES_H
+#undef  BOOST_HAS_LOG1P
+#undef  BOOST_HAS_EXPM1
+
+#define BOOST_HAS_PTHREADS
+#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+
+#define BOOST_HAS_GETTIMEOFDAY
+#define BOOST_HAS_CLOCK_GETTIME
+#define BOOST_HAS_NANOSLEEP
+
+
+
+
+
diff --git a/vendor/pdalboost/boost/config/platform/solaris.hpp b/vendor/pdalboost/boost/config/platform/solaris.hpp
new file mode 100644
index 0000000..6e4efc9
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/solaris.hpp
@@ -0,0 +1,31 @@
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  (C) Copyright Jens Maurer 2003. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  sun specific config options:
+
+#define BOOST_PLATFORM "Sun Solaris"
+
+#define BOOST_HAS_GETTIMEOFDAY
+
+// boilerplate code:
+#define BOOST_HAS_UNISTD_H
+#include <boost/config/posix_features.hpp>
+
+//
+// pthreads don't actually work with gcc unless _PTHREADS is defined:
+//
+#if defined(__GNUC__) && defined(_POSIX_THREADS) && !defined(_PTHREADS)
+# undef BOOST_HAS_PTHREADS
+#endif
+
+#define BOOST_HAS_STDINT_H 
+#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE 
+#define BOOST_HAS_LOG1P 
+#define BOOST_HAS_EXPM1
+
+
diff --git a/vendor/pdalboost/boost/config/platform/symbian.hpp b/vendor/pdalboost/boost/config/platform/symbian.hpp
new file mode 100644
index 0000000..e02a778
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/symbian.hpp
@@ -0,0 +1,97 @@
+//  (C) Copyright Yuriy Krasnoschek 2009. 
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  (C) Copyright Jens Maurer 2001 - 2003. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  symbian specific config options:
+
+
+#define BOOST_PLATFORM "Symbian"
+#define BOOST_SYMBIAN 1
+
+
+#if defined(__S60_3X__)
+// Open C / C++ plugin was introdused in this SDK, earlier versions don't have CRT / STL
+#  define BOOST_S60_3rd_EDITION_FP2_OR_LATER_SDK
+// make sure we have __GLIBC_PREREQ if available at all
+#ifdef __cplusplus
+#include <cstdlib>
+#else
+#include <stdlib.h>
+#endif// boilerplate code:
+#  define BOOST_HAS_UNISTD_H
+#  include <boost/config/posix_features.hpp>
+// S60 SDK defines _POSIX_VERSION as POSIX.1
+#  ifndef BOOST_HAS_STDINT_H
+#    define BOOST_HAS_STDINT_H
+#  endif
+#  ifndef BOOST_HAS_GETTIMEOFDAY
+#    define BOOST_HAS_GETTIMEOFDAY
+#  endif
+#  ifndef BOOST_HAS_DIRENT_H
+#    define BOOST_HAS_DIRENT_H
+#  endif
+#  ifndef BOOST_HAS_SIGACTION
+#    define BOOST_HAS_SIGACTION
+#  endif
+#  ifndef BOOST_HAS_PTHREADS
+#    define BOOST_HAS_PTHREADS
+#  endif
+#  ifndef BOOST_HAS_NANOSLEEP
+#    define BOOST_HAS_NANOSLEEP
+#  endif
+#  ifndef BOOST_HAS_SCHED_YIELD
+#    define BOOST_HAS_SCHED_YIELD
+#  endif
+#  ifndef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+#    define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+#  endif
+#  ifndef BOOST_HAS_LOG1P
+#    define BOOST_HAS_LOG1P
+#  endif
+#  ifndef BOOST_HAS_EXPM1
+#    define BOOST_HAS_EXPM1
+#  endif
+#  ifndef BOOST_POSIX_API
+#    define BOOST_POSIX_API
+#  endif
+// endianess support
+#  include <sys/endian.h>
+// Symbian SDK provides _BYTE_ORDER instead of __BYTE_ORDER
+#  ifndef __LITTLE_ENDIAN
+#    ifdef _LITTLE_ENDIAN
+#      define __LITTLE_ENDIAN _LITTLE_ENDIAN
+#    else
+#      define __LITTLE_ENDIAN 1234
+#    endif
+#  endif
+#  ifndef __BIG_ENDIAN
+#    ifdef _BIG_ENDIAN
+#      define __BIG_ENDIAN _BIG_ENDIAN
+#    else
+#      define __BIG_ENDIAN 4321
+#    endif
+#  endif
+#  ifndef __BYTE_ORDER
+#    define __BYTE_ORDER __LITTLE_ENDIAN // Symbian is LE
+#  endif
+// Known limitations
+#  define BOOST_ASIO_DISABLE_SERIAL_PORT
+#  define BOOST_DATE_TIME_NO_LOCALE
+#  define BOOST_NO_STD_WSTRING
+#  define BOOST_EXCEPTION_DISABLE
+#  define BOOST_NO_EXCEPTIONS
+
+#else // TODO: More platform support e.g. UIQ
+#  error "Unsuppoted Symbian SDK"
+#endif
+
+#if defined(__WINSCW__) && !defined(BOOST_DISABLE_WIN32)
+#  define BOOST_DISABLE_WIN32 // winscw defines WIN32 macro
+#endif
+
+
diff --git a/vendor/pdalboost/boost/config/platform/vms.hpp b/vendor/pdalboost/boost/config/platform/vms.hpp
new file mode 100644
index 0000000..f70efcf
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/vms.hpp
@@ -0,0 +1,25 @@
+//  (C) Copyright Artyom Beilis 2010.  
+//  Use, modification and distribution are subject to the  
+//  Boost Software License, Version 1.0. (See accompanying file  
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 
+
+#ifndef BOOST_CONFIG_PLATFORM_VMS_HPP 
+#define BOOST_CONFIG_PLATFORM_VMS_HPP 
+
+#define BOOST_PLATFORM "OpenVMS" 
+
+#undef  BOOST_HAS_STDINT_H 
+#define BOOST_HAS_UNISTD_H 
+#define BOOST_HAS_NL_TYPES_H 
+#define BOOST_HAS_GETTIMEOFDAY 
+#define BOOST_HAS_DIRENT_H 
+#define BOOST_HAS_PTHREADS 
+#define BOOST_HAS_NANOSLEEP 
+#define BOOST_HAS_CLOCK_GETTIME 
+#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE 
+#define BOOST_HAS_LOG1P 
+#define BOOST_HAS_EXPM1 
+#define BOOST_HAS_THREADS 
+#undef  BOOST_HAS_SCHED_YIELD 
+
+#endif 
diff --git a/vendor/pdalboost/boost/config/platform/vxworks.hpp b/vendor/pdalboost/boost/config/platform/vxworks.hpp
new file mode 100644
index 0000000..cdda015
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/vxworks.hpp
@@ -0,0 +1,369 @@
+//  (C) Copyright Dustin Spicuzza 2009.
+//      Adapted to vxWorks 6.9 by Peter Brockamp 2012.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Since WRS does not yet properly support boost under vxWorks
+//  and this file was badly outdated, but I was keen on using it,
+//  I patched boost myself to make things work. This has been tested
+//  and adapted by me for vxWorks 6.9 *only*, as I'm lacking access
+//  to earlier 6.X versions! The only thing I know for sure is that
+//  very old versions of vxWorks (namely everything below 6.x) are
+//  absolutely unable to use boost. This is mainly due to the completely
+//  outdated libraries and ancient compiler (GCC 2.96 or worse). Do
+//  not even think of getting this to work, a miserable failure will
+//  be guaranteed!
+//  Equally, this file has been tested for RTPs (Real Time Processes)
+//  only, not for DKMs (Downloadable Kernel Modules). These two types
+//  of executables differ largely in the available functionality of
+//  the C-library, STL, and so on. A DKM uses a library similar to those
+//  of vxWorks 5.X - with all its limitations and incompatibilities
+//  with respect to ANSI C++ and STL. So probably there might be problems
+//  with the usage of boost from DKMs. WRS or any voluteers are free to
+//  prove the opposite!
+
+// ====================================================================
+//
+// Some important information regarding the usage of POSIX semaphores:
+// -------------------------------------------------------------------
+//
+// VxWorks as a real time operating system handles threads somewhat
+// different from what "normal" OSes do, regarding their scheduling!
+// This could lead to a scenario called "priority inversion" when using
+// semaphores, see http://en.wikipedia.org/wiki/Priority_inversion.
+//
+// Now, VxWorks POSIX-semaphores for DKM's default to the usage of
+// priority inverting semaphores, which is fine. On the other hand,
+// for RTP's it defaults to using non priority inverting semaphores,
+// which could easily pose a serious problem for a real time process,
+// i.e. deadlocks! To overcome this two possibilities do exist:
+//
+// a) Patch every piece of boost that uses semaphores to instanciate
+//    the proper type of semaphores. This is non-intrusive with respect
+//    to the OS and could relatively easy been done by giving all
+//    semaphores attributes deviating from the default (for in-depth
+//    information see the POSIX functions pthread_mutexattr_init()
+//    and pthread_mutexattr_setprotocol()). However this breaks all
+//    too easily, as with every new version some boost library could
+//    all in a sudden start using semaphores, resurrecting the very
+//    same, hard to locate problem over and over again!
+//
+// b) We could change the default properties for POSIX-semaphores
+//    that VxWorks uses for RTP's and this is being suggested here,
+//    as it will more or less seamlessly integrate with boost. I got
+//    the following information from WRS how to do this, compare
+//    Wind River TSR# 1209768:
+//
+// Instructions for changing the default properties of POSIX-
+// semaphores for RTP's in VxWorks 6.9:
+// - Edit the file /vxworks-6.9/target/usr/src/posix/pthreadLib.c
+//   in the root of your Workbench-installation.
+// - Around line 917 there should be the definition of the default
+//   mutex attributes:
+//
+//   LOCAL pthread_mutexattr_t defaultMutexAttr =
+//       {
+//       PTHREAD_INITIALIZED_OBJ, PTHREAD_PRIO_NONE, 0,
+//       PTHREAD_MUTEX_DEFAULT
+//       };
+//
+//   Here, replace PTHREAD_PRIO_NONE by PTHREAD_PRIO_INHERIT.
+// - Around line 1236 there should be a definition for the function
+//   pthread_mutexattr_init(). A couple of lines below you should
+//   find a block of code like this:
+//
+//   pAttr->mutexAttrStatus      = PTHREAD_INITIALIZED_OBJ;
+//   pAttr->mutexAttrProtocol    = PTHREAD_PRIO_NONE;
+//   pAttr->mutexAttrPrioceiling = 0;
+//   pAttr->mutexAttrType        = PTHREAD_MUTEX_DEFAULT;
+//
+//   Here again, replace PTHREAD_PRIO_NONE by PTHREAD_PRIO_INHERIT.
+// - Finally, rebuild your VSB. This will create a new VxWorks kernel
+//   with the changed properties. That's it! Now, using boost should
+//   no longer cause any problems with task deadlocks!
+//
+// And here's another useful piece of information concerning VxWorks'
+// POSIX-functionality in general:
+// VxWorks is not a genuine POSIX-OS in itself, rather it is using a
+// kind of compatibility layer (sort of a wrapper) to emulate the
+// POSIX-functionality by using its own resources and functions.
+// At the time a task (thread) calls it's first POSIX-function during
+// runtime it is being transformed by the OS into a POSIX-thread.
+// This transformation does include a call to malloc() to allocate the
+// memory required for the housekeeping of POSIX-threads. In a high
+// priority RTP this malloc() call may be highly undesirable, as its
+// timing is more or less unpredictable (depending on what your actual
+// heap looks like). You can circumvent this problem by calling the
+// function thread_self() at a well defined point in the code of the
+// task, e.g. shortly after the task spawns up. Thereby you are able
+// to define the time when the task-transformation will take place and
+// you could shift it to an uncritical point where a malloc() call is
+// tolerable. So, if this could pose a problem for your code, remember
+// to call thread_self() from the affected task at an early stage.
+//
+// ====================================================================
+
+// Block out all versions before vxWorks 6.x, as these don't work:
+// Include header with the vxWorks version information and query them
+#include <version.h>
+#if !defined(_WRS_VXWORKS_MAJOR) || (_WRS_VXWORKS_MAJOR < 6)
+#  error "The vxWorks version you're using is so badly outdated,\
+          it doesn't work at all with boost, sorry, no chance!"
+#endif
+
+// Handle versions above 5.X but below 6.9
+#if (_WRS_VXWORKS_MAJOR == 6) && (_WRS_VXWORKS_MINOR < 9)
+// TODO: Starting from what version does vxWorks work with boost?
+// We can't reasonably insert a #warning "" as a user hint here,
+// as this will show up with every file including some boost header,
+// badly bugging the user... So for the time being we just leave it.
+#endif
+
+// vxWorks specific config options:
+// --------------------------------
+#define BOOST_PLATFORM "vxWorks"
+
+// Special behaviour for DKMs:
+#ifdef _WRS_KERNEL
+  // DKMs do not have the <cwchar>-header,
+  // but apparently they do have an intrinsic wchar_t meanwhile!
+#  define BOOST_NO_CWCHAR
+
+  // Lots of wide-functions and -headers are unavailable for DKMs as well:
+#  define BOOST_NO_CWCTYPE
+#  define BOOST_NO_SWPRINTF
+#  define BOOST_NO_STD_WSTRING
+#  define BOOST_NO_STD_WSTREAMBUF
+#endif
+
+// Generally available headers:
+#define BOOST_HAS_UNISTD_H
+#define BOOST_HAS_STDINT_H
+#define BOOST_HAS_DIRENT_H
+#define BOOST_HAS_SLIST
+
+// vxWorks does not have installed an iconv-library by default,
+// so unfortunately no Unicode support from scratch is available!
+// Thus, instead it is suggested to switch to ICU, as this seems
+// to be the most complete and portable option...
+#define BOOST_LOCALE_WITH_ICU
+
+// Generally available functionality:
+#define BOOST_HAS_THREADS
+#define BOOST_HAS_NANOSLEEP
+#define BOOST_HAS_GETTIMEOFDAY
+#define BOOST_HAS_CLOCK_GETTIME
+#define BOOST_HAS_MACRO_USE_FACET
+
+// Generally unavailable functionality, delivered by boost's test function:
+//#define BOOST_NO_DEDUCED_TYPENAME // Commented this out, boost's test gives an errorneous result!
+#define BOOST_NO_CXX11_EXTERN_TEMPLATE
+#define BOOST_NO_CXX11_VARIADIC_MACROS
+
+// Generally available threading API's:
+#define BOOST_HAS_PTHREADS
+#define BOOST_HAS_SCHED_YIELD
+#define BOOST_HAS_SIGACTION
+
+// Functionality available for RTPs only:
+#ifdef __RTP__
+#  define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+#  define BOOST_HAS_LOG1P
+#  define BOOST_HAS_EXPM1
+#endif
+
+// Functionality available for DKMs only:
+#ifdef _WRS_KERNEL
+  // Luckily, at the moment there seems to be none!
+#endif
+
+// These #defines allow posix_features to work, since vxWorks doesn't
+// #define them itself for DKMs (for RTPs on the contrary it does):
+#ifdef _WRS_KERNEL
+#  ifndef _POSIX_TIMERS
+#    define _POSIX_TIMERS  1
+#  endif
+#  ifndef _POSIX_THREADS
+#    define _POSIX_THREADS 1
+#  endif
+#endif
+
+// vxWorks doesn't work with asio serial ports:
+#define BOOST_ASIO_DISABLE_SERIAL_PORT
+// TODO: The problem here seems to bee that vxWorks uses its own, very specific
+//       ways to handle serial ports, incompatible with POSIX or anything...
+//       Maybe a specific implementation would be possible, but until the
+//       straight need arises... This implementation would presumably consist
+//       of some vxWorks specific ioctl-calls, etc. Any voluteers?
+
+// vxWorks-around: <time.h> #defines CLOCKS_PER_SEC as sysClkRateGet() but
+//                 miserably fails to #include the required <sysLib.h> to make
+//                 sysClkRateGet() available! So we manually include it here.
+#ifdef __RTP__
+#  include <time.h>
+#  include <sysLib.h>
+#endif
+
+// vxWorks-around: In <stdint.h> the macros INT32_C(), UINT32_C(), INT64_C() and
+//                 UINT64_C() are defined errorneously, yielding not a signed/
+//                 unsigned long/long long type, but a signed/unsigned int/long
+//                 type. Eventually this leads to compile errors in ratio_fwd.hpp,
+//                 when trying to define several constants which do not fit into a
+//                 long type! We correct them here by redefining.
+#include <cstdint>
+
+// Some macro-magic to do the job
+#define VX_JOIN(X, Y)     VX_DO_JOIN(X, Y)
+#define VX_DO_JOIN(X, Y)  VX_DO_JOIN2(X, Y)
+#define VX_DO_JOIN2(X, Y) X##Y
+
+// Correctly setup the macros
+#undef  INT32_C
+#undef  UINT32_C
+#undef  INT64_C
+#undef  UINT64_C
+#define INT32_C(x)  VX_JOIN(x, L)
+#define UINT32_C(x) VX_JOIN(x, UL)
+#define INT64_C(x)  VX_JOIN(x, LL)
+#define UINT64_C(x) VX_JOIN(x, ULL)
+
+// #include Libraries required for the following function adaption
+#include <ioLib.h>
+#include <tickLib.h>
+#include <sys/time.h>
+
+// Use C-linkage for the following helper functions
+extern "C" {
+
+// vxWorks-around: The required functions getrlimit() and getrlimit() are missing.
+//                 But we have the similar functions getprlimit() and setprlimit(),
+//                 which may serve the purpose.
+//                 Problem: The vxWorks-documentation regarding these functions
+//                 doesn't deserve its name! It isn't documented what the first two
+//                 parameters idtype and id mean, so we must fall back to an educated
+//                 guess - null, argh... :-/
+
+// TODO: getprlimit() and setprlimit() do exist for RTPs only, for whatever reason.
+//       Thus for DKMs there would have to be another implementation.
+#ifdef __RTP__
+  inline int getrlimit(int resource, struct rlimit *rlp){
+    return getprlimit(0, 0, resource, rlp);
+  }
+
+  inline int setrlimit(int resource, const struct rlimit *rlp){
+    return setprlimit(0, 0, resource, const_cast<struct rlimit*>(rlp));
+  }
+#endif
+
+// vxWorks has ftruncate() only, so we do simulate truncate():
+inline int truncate(const char *p, off_t l){
+  int fd = open(p, O_WRONLY);
+  if (fd == -1){
+    errno = EACCES;
+    return -1;
+  }
+  if (ftruncate(fd, l) == -1){
+    close(fd);
+    errno = EACCES;
+    return -1;
+  }
+  return close(fd);
+}
+
+// Fake symlink handling by dummy functions:
+inline int symlink(const char*, const char*){
+  // vxWorks has no symlinks -> always return an error!
+  errno = EACCES;
+  return -1;
+}
+
+inline ssize_t readlink(const char*, char*, size_t){
+  // vxWorks has no symlinks -> always return an error!
+  errno = EACCES;
+  return -1;
+}
+
+// vxWorks claims to implement gettimeofday in sys/time.h
+// but nevertheless does not provide it! See
+// https://support.windriver.com/olsPortal/faces/maintenance/techtipDetail_noHeader.jspx?docId=16442&contentId=WR_TECHTIP_006256
+// We implement a surrogate version here via clock_gettime:
+inline int gettimeofday(struct timeval *tv, void * /*tzv*/) {
+  struct timespec ts;
+  clock_gettime(CLOCK_MONOTONIC, &ts);
+  tv->tv_sec  = ts.tv_sec;
+  tv->tv_usec = ts.tv_nsec / 1000;
+  return 0;
+}
+
+// vxWorks does provide neither struct tms nor function times()!
+// We implement an empty dummy-function, simply setting the user
+// and system time to the half of thew actual system ticks-value
+// and the child user and system time to 0.
+// Rather ugly but at least it suppresses compiler errors...
+// Unfortunately, this of course *does* have an severe impact on
+// dependant libraries, actually this is chrono only! Here it will
+// not be possible to correctly use user and system times! But
+// as vxWorks is lacking the ability to calculate user and system
+// process times there seems to be no other possible solution.
+struct tms{
+  clock_t tms_utime;  // User CPU time
+  clock_t tms_stime;  // System CPU time
+  clock_t tms_cutime; // User CPU time of terminated child processes
+  clock_t tms_cstime; // System CPU time of terminated child processes
+};
+
+inline clock_t times(struct tms *t){
+  struct timespec ts;
+  clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts);
+  clock_t ticks(static_cast<clock_t>(static_cast<double>(ts.tv_sec)  * CLOCKS_PER_SEC +
+                                     static_cast<double>(ts.tv_nsec) * CLOCKS_PER_SEC / 1000000.0));
+  t->tms_utime  = ticks/2U;
+  t->tms_stime  = ticks/2U;
+  t->tms_cutime = 0; // vxWorks is lacking the concept of a child process!
+  t->tms_cstime = 0; // -> Set the wait times for childs to 0
+  return ticks;
+}
+
+} // extern "C"
+
+// Put the selfmade functions into the std-namespace, just in case
+namespace std {
+# ifdef __RTP__
+    using ::getrlimit;
+    using ::setrlimit;
+# endif
+  using ::truncate;
+  using ::symlink;
+  using ::readlink;
+  using ::times;
+  using ::gettimeofday;
+}
+
+// Some more macro-magic:
+// vxWorks-around: Some functions are not present or broken in vxWorks
+//                 but may be patched to life via helper macros...
+
+// Include signal.h which might contain a typo to be corrected here
+#include <signal.h>
+
+#define getpagesize()    sysconf(_SC_PAGESIZE)         // getpagesize is deprecated anyway!
+#ifndef S_ISSOCK
+#  define S_ISSOCK(mode) ((mode & S_IFMT) == S_IFSOCK) // Is file a socket?
+#endif
+#define lstat(p, b)      stat(p, b)                    // lstat() == stat(), as vxWorks has no symlinks!
+#ifndef FPE_FLTINV
+#  define FPE_FLTINV     (FPE_FLTSUB+1)                // vxWorks has no FPE_FLTINV, so define one as a dummy
+#endif
+#if !defined(BUS_ADRALN) && defined(BUS_ADRALNR)
+#  define BUS_ADRALN     BUS_ADRALNR                   // Correct a supposed typo in vxWorks' <signal.h>
+#endif
+//typedef int              locale_t;                     // locale_t is a POSIX-extension, currently unpresent in vxWorks!
+
+// #include boilerplate code:
+#include <boost/config/posix_features.hpp>
+
+// vxWorks lies about XSI conformance, there is no nl_types.h:
+#undef BOOST_HAS_NL_TYPES_H
diff --git a/vendor/pdalboost/boost/config/platform/win32.hpp b/vendor/pdalboost/boost/config/platform/win32.hpp
new file mode 100644
index 0000000..450158f
--- /dev/null
+++ b/vendor/pdalboost/boost/config/platform/win32.hpp
@@ -0,0 +1,90 @@
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  (C) Copyright Bill Kempf 2001. 
+//  (C) Copyright Aleksey Gurtovoy 2003. 
+//  (C) Copyright Rene Rivera 2005.
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Win32 specific config options:
+
+#define BOOST_PLATFORM "Win32"
+
+//  Get the information about the MinGW runtime, i.e. __MINGW32_*VERSION.
+#if defined(__MINGW32__)
+#  include <_mingw.h>
+#endif
+
+#if defined(__GNUC__) && !defined(BOOST_NO_SWPRINTF)
+#  define BOOST_NO_SWPRINTF
+#endif
+
+//  Default defines for BOOST_SYMBOL_EXPORT and BOOST_SYMBOL_IMPORT
+//  If a compiler doesn't support __declspec(dllexport)/__declspec(dllimport),
+//  its boost/config/compiler/ file must define BOOST_SYMBOL_EXPORT and
+//  BOOST_SYMBOL_IMPORT
+#ifndef BOOST_SYMBOL_EXPORT
+#  define BOOST_HAS_DECLSPEC
+#  define BOOST_SYMBOL_EXPORT __declspec(dllexport)
+#  define BOOST_SYMBOL_IMPORT __declspec(dllimport)
+#endif
+
+#if defined(__MINGW32__) && ((__MINGW32_MAJOR_VERSION > 2) || ((__MINGW32_MAJOR_VERSION == 2) && (__MINGW32_MINOR_VERSION >= 0)))
+#  define BOOST_HAS_STDINT_H
+#  ifndef __STDC_LIMIT_MACROS
+#     define __STDC_LIMIT_MACROS
+#  endif
+#  define BOOST_HAS_DIRENT_H
+#  define BOOST_HAS_UNISTD_H
+#endif
+
+#if defined(__MINGW32__) && (__GNUC__ >= 4)
+// Mingw has these functions but there are persistent problems
+// with calls to these crashing, so disable for now:
+//#  define BOOST_HAS_EXPM1
+//#  define BOOST_HAS_LOG1P
+#  define BOOST_HAS_GETTIMEOFDAY
+#endif
+//
+// Win32 will normally be using native Win32 threads,
+// but there is a pthread library avaliable as an option,
+// we used to disable this when BOOST_DISABLE_WIN32 was 
+// defined but no longer - this should allow some
+// files to be compiled in strict mode - while maintaining
+// a consistent setting of BOOST_HAS_THREADS across
+// all translation units (needed for shared_ptr etc).
+//
+
+#ifndef BOOST_HAS_PTHREADS
+#  define BOOST_HAS_WINTHREADS
+#endif
+
+//
+// WinCE configuration:
+//
+#if defined(_WIN32_WCE) || defined(UNDER_CE)
+#  define BOOST_NO_ANSI_APIS
+// Windows CE does not have a conforming signature for swprintf
+#  define BOOST_NO_SWPRINTF
+#else
+#  define BOOST_HAS_GETSYSTEMTIMEASFILETIME
+#  define BOOST_HAS_THREADEX
+#  define BOOST_HAS_GETSYSTEMTIMEASFILETIME
+#endif
+
+//
+// Windows Runtime
+//
+#if defined(WINAPI_FAMILY) && \
+  (WINAPI_FAMILY == WINAPI_FAMILY_APP || WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP)
+#  define BOOST_NO_ANSI_APIS
+#endif
+
+#ifndef BOOST_DISABLE_WIN32
+// WEK: Added
+#define BOOST_HAS_FTIME
+#define BOOST_WINDOWS 1
+
+#endif
diff --git a/vendor/pdalboost/boost/config/posix_features.hpp b/vendor/pdalboost/boost/config/posix_features.hpp
new file mode 100644
index 0000000..d129547
--- /dev/null
+++ b/vendor/pdalboost/boost/config/posix_features.hpp
@@ -0,0 +1,95 @@
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+//  See http://www.boost.org for most recent version.
+
+// All POSIX feature tests go in this file,
+// Note that we test _POSIX_C_SOURCE and _XOPEN_SOURCE as well
+// _POSIX_VERSION and _XOPEN_VERSION: on some systems POSIX API's
+// may be present but none-functional unless _POSIX_C_SOURCE and
+// _XOPEN_SOURCE have been defined to the right value (it's up
+// to the user to do this *before* including any header, although
+// in most cases the compiler will do this for you).
+
+#  if defined(BOOST_HAS_UNISTD_H)
+#     include <unistd.h>
+
+      // XOpen has <nl_types.h>, but is this the correct version check?
+#     if defined(_XOPEN_VERSION) && (_XOPEN_VERSION >= 3)
+#        define BOOST_HAS_NL_TYPES_H
+#     endif
+
+      // POSIX version 6 requires <stdint.h>
+#     if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 200100)
+#        define BOOST_HAS_STDINT_H
+#     endif
+
+      // POSIX version 2 requires <dirent.h>
+#     if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199009L)
+#        define BOOST_HAS_DIRENT_H
+#     endif
+
+      // POSIX version 3 requires <signal.h> to have sigaction:
+#     if defined(_POSIX_VERSION) && (_POSIX_VERSION >= 199506L)
+#        define BOOST_HAS_SIGACTION
+#     endif
+      // POSIX defines _POSIX_THREADS > 0 for pthread support,
+      // however some platforms define _POSIX_THREADS without
+      // a value, hence the (_POSIX_THREADS+0 >= 0) check.
+      // Strictly speaking this may catch platforms with a
+      // non-functioning stub <pthreads.h>, but such occurrences should
+      // occur very rarely if at all.
+#     if defined(_POSIX_THREADS) && (_POSIX_THREADS+0 >= 0) && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_MPTASKS)
+#        define BOOST_HAS_PTHREADS
+#     endif
+
+      // BOOST_HAS_NANOSLEEP:
+      // This is predicated on _POSIX_TIMERS or _XOPEN_REALTIME:
+#     if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0)) \
+             || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0))
+#        define BOOST_HAS_NANOSLEEP
+#     endif
+
+      // BOOST_HAS_CLOCK_GETTIME:
+      // This is predicated on _POSIX_TIMERS (also on _XOPEN_REALTIME
+      // but at least one platform - linux - defines that flag without
+      // defining clock_gettime):
+#     if (defined(_POSIX_TIMERS) && (_POSIX_TIMERS+0 >= 0))
+#        define BOOST_HAS_CLOCK_GETTIME
+#     endif
+
+      // BOOST_HAS_SCHED_YIELD:
+      // This is predicated on _POSIX_PRIORITY_SCHEDULING or
+      // on _POSIX_THREAD_PRIORITY_SCHEDULING or on _XOPEN_REALTIME.
+#     if defined(_POSIX_PRIORITY_SCHEDULING) && (_POSIX_PRIORITY_SCHEDULING+0 > 0)\
+            || (defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING+0 > 0))\
+            || (defined(_XOPEN_REALTIME) && (_XOPEN_REALTIME+0 >= 0))
+#        define BOOST_HAS_SCHED_YIELD
+#     endif
+
+      // BOOST_HAS_GETTIMEOFDAY:
+      // BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE:
+      // These are predicated on _XOPEN_VERSION, and appears to be first released
+      // in issue 4, version 2 (_XOPEN_VERSION > 500).
+      // Likewise for the functions log1p and expm1.
+#     if defined(_XOPEN_VERSION) && (_XOPEN_VERSION+0 >= 500)
+#        define BOOST_HAS_GETTIMEOFDAY
+#        if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE+0 >= 500)
+#           define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+#        endif
+#        ifndef BOOST_HAS_LOG1P
+#           define BOOST_HAS_LOG1P
+#        endif
+#        ifndef BOOST_HAS_EXPM1
+#           define BOOST_HAS_EXPM1
+#        endif
+#     endif
+
+#  endif
+
+
+
+
diff --git a/vendor/pdalboost/boost/config/requires_threads.hpp b/vendor/pdalboost/boost/config/requires_threads.hpp
new file mode 100644
index 0000000..cfaff23
--- /dev/null
+++ b/vendor/pdalboost/boost/config/requires_threads.hpp
@@ -0,0 +1,92 @@
+//  (C) Copyright John Maddock 2003. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#ifndef BOOST_CONFIG_REQUIRES_THREADS_HPP
+#define BOOST_CONFIG_REQUIRES_THREADS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_DISABLE_THREADS)
+
+//
+// special case to handle versions of gcc which don't currently support threads:
+//
+#if defined(__GNUC__) && ((__GNUC__ < 3) || (__GNUC_MINOR__ <= 3) || !defined(BOOST_STRICT_CONFIG))
+//
+// this is checked up to gcc 3.3:
+//
+#if defined(__sgi) || defined(__hpux)
+#  error "Multi-threaded programs are not supported by gcc on HPUX or Irix (last checked with gcc 3.3)"
+#endif
+
+#endif
+
+#  error "Threading support unavaliable: it has been explicitly disabled with BOOST_DISABLE_THREADS"
+
+#elif !defined(BOOST_HAS_THREADS)
+
+# if defined __COMO__
+//  Comeau C++
+#   error "Compiler threading support is not turned on. Please set the correct command line options for threading: -D_MT (Windows) or -D_REENTRANT (Unix)"
+
+#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)
+//  Intel
+#ifdef _WIN32
+#  error "Compiler threading support is not turned on. Please set the correct command line options for threading: either /MT /MTd /MD or /MDd"
+#else
+#   error "Compiler threading support is not turned on. Please set the correct command line options for threading: -openmp"
+#endif
+
+# elif defined __GNUC__
+//  GNU C++:
+#   error "Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread (Linux), -pthreads (Solaris) or -mthreads (Mingw32)"
+
+#elif defined __sgi
+//  SGI MIPSpro C++
+#   error "Compiler threading support is not turned on. Please set the correct command line options for threading: -D_SGI_MP_SOURCE"
+
+#elif defined __DECCXX
+//  Compaq Tru64 Unix cxx
+#   error "Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread"
+
+#elif defined __BORLANDC__
+//  Borland
+#   error "Compiler threading support is not turned on. Please set the correct command line options for threading: -tWM"
+
+#elif defined  __MWERKS__
+//  Metrowerks CodeWarrior
+#   error "Compiler threading support is not turned on. Please set the correct command line options for threading: either -runtime sm, -runtime smd, -runtime dm, or -runtime dmd"
+
+#elif defined  __SUNPRO_CC
+//  Sun Workshop Compiler C++
+#   error "Compiler threading support is not turned on. Please set the correct command line options for threading: -mt"
+
+#elif defined __HP_aCC
+//  HP aCC
+#   error "Compiler threading support is not turned on. Please set the correct command line options for threading: -mt"
+
+#elif defined(__IBMCPP__)
+//  IBM Visual Age
+#   error "Compiler threading support is not turned on. Please compile the code with the xlC_r compiler"
+
+#elif defined _MSC_VER
+//  Microsoft Visual C++
+//
+//  Must remain the last #elif since some other vendors (Metrowerks, for
+//  example) also #define _MSC_VER
+#  error "Compiler threading support is not turned on. Please set the correct command line options for threading: either /MT /MTd /MD or /MDd"
+
+#else
+
+#  error "Compiler threading support is not turned on.  Please consult your compiler's documentation for the appropriate options to use"
+
+#endif // compilers
+
+#endif // BOOST_HAS_THREADS
+
+#endif // BOOST_CONFIG_REQUIRES_THREADS_HPP
diff --git a/vendor/pdalboost/boost/config/select_compiler_config.hpp b/vendor/pdalboost/boost/config/select_compiler_config.hpp
new file mode 100644
index 0000000..4d87093
--- /dev/null
+++ b/vendor/pdalboost/boost/config/select_compiler_config.hpp
@@ -0,0 +1,148 @@
+//  Boost compiler configuration selection header file
+
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  (C) Copyright Martin Wille 2003.
+//  (C) Copyright Guillaume Melquiond 2003.
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//   http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for most recent version.
+
+// locate which compiler we are using and define
+// BOOST_COMPILER_CONFIG as needed: 
+
+#if defined __CUDACC__
+//  NVIDIA CUDA C++ compiler for GPU
+#   include "boost/config/compiler/nvcc.hpp"
+
+#endif
+
+#if defined(__GCCXML__)
+// GCC-XML emulates other compilers, it has to appear first here!
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/gcc_xml.hpp"
+
+#elif defined(_CRAYC)
+// EDG based Cray compiler:
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/cray.hpp"
+
+#elif defined __COMO__
+//  Comeau C++
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/comeau.hpp"
+
+#elif defined(__PATHSCALE__) && (__PATHCC__ >= 4)
+// PathScale EKOPath compiler (has to come before clang and gcc)
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/pathscale.hpp"
+
+#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)
+//  Intel
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/intel.hpp"
+
+#elif defined __clang__ && !defined(__CUDACC__) && !defined(__ibmxl__)
+// when using clang and cuda at same time, you want to appear as gcc
+//  Clang C++ emulates GCC, so it has to appear early.
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/clang.hpp"
+
+#elif defined __DMC__
+//  Digital Mars C++
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/digitalmars.hpp"
+
+# elif defined(__GNUC__) && !defined(__ibmxl__)
+//  GNU C++:
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/gcc.hpp"
+
+#elif defined __KCC
+//  Kai C++
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/kai.hpp"
+
+#elif defined __sgi
+//  SGI MIPSpro C++
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/sgi_mipspro.hpp"
+
+#elif defined __DECCXX
+//  Compaq Tru64 Unix cxx
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/compaq_cxx.hpp"
+
+#elif defined __ghs
+//  Greenhills C++
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/greenhills.hpp"
+
+#elif defined __CODEGEARC__
+//  CodeGear - must be checked for before Borland
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/codegear.hpp"
+
+#elif defined __BORLANDC__
+//  Borland
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/borland.hpp"
+
+#elif defined  __MWERKS__
+//  Metrowerks CodeWarrior
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/metrowerks.hpp"
+
+#elif defined  __SUNPRO_CC
+//  Sun Workshop Compiler C++
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/sunpro_cc.hpp"
+
+#elif defined __HP_aCC
+//  HP aCC
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/hp_acc.hpp"
+
+#elif defined(__MRC__) || defined(__SC__)
+//  MPW MrCpp or SCpp
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/mpw.hpp"
+
+#elif defined(__ibmxl__)
+// IBM XL C/C++ for Linux (Little Endian)
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/xlcpp.hpp"
+
+#elif defined(__IBMCPP__)
+//  IBM Visual Age or IBM XL C/C++ for Linux (Big Endian)
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/vacpp.hpp"
+
+#elif defined(__PGI)
+//  Portland Group Inc.
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/pgi.hpp"
+
+#elif defined _MSC_VER
+//  Microsoft Visual C++
+//
+//  Must remain the last #elif since some other vendors (Metrowerks, for
+//  example) also #define _MSC_VER
+#   define BOOST_COMPILER_CONFIG "boost/config/compiler/visualc.hpp"
+
+#elif defined (BOOST_ASSERT_CONFIG)
+// this must come last - generate an error if we don't
+// recognise the compiler:
+#  error "Unknown compiler - please configure (http://www.boost.org/libs/config/config.htm#configuring) and report the results to the main boost mailing list (http://www.boost.org/more/mailing_lists.htm#main)"
+
+#endif
+
+#if 0
+//
+// This section allows dependency scanners to find all the headers we *might* include:
+//
+#include "boost/config/compiler/gcc_xml.hpp"
+#include "boost/config/compiler/cray.hpp"
+#include "boost/config/compiler/comeau.hpp"
+#include "boost/config/compiler/pathscale.hpp"
+#include "boost/config/compiler/intel.hpp"
+#include "boost/config/compiler/clang.hpp"
+#include "boost/config/compiler/digitalmars.hpp"
+#include "boost/config/compiler/gcc.hpp"
+#include "boost/config/compiler/kai.hpp"
+#include "boost/config/compiler/sgi_mipspro.hpp"
+#include "boost/config/compiler/compaq_cxx.hpp"
+#include "boost/config/compiler/greenhills.hpp"
+#include "boost/config/compiler/codegear.hpp"
+#include "boost/config/compiler/borland.hpp"
+#include "boost/config/compiler/metrowerks.hpp"
+#include "boost/config/compiler/sunpro_cc.hpp"
+#include "boost/config/compiler/hp_acc.hpp"
+#include "boost/config/compiler/mpw.hpp"
+#include "boost/config/compiler/vacpp.hpp"
+#include "boost/config/compiler/pgi.hpp"
+#include "boost/config/compiler/visualc.hpp"
+
+#endif
+
diff --git a/vendor/pdalboost/boost/config/select_platform_config.hpp b/vendor/pdalboost/boost/config/select_platform_config.hpp
new file mode 100644
index 0000000..62fd818
--- /dev/null
+++ b/vendor/pdalboost/boost/config/select_platform_config.hpp
@@ -0,0 +1,137 @@
+//  Boost compiler configuration selection header file
+
+//  (C) Copyright John Maddock 2001 - 2002. 
+//  (C) Copyright Jens Maurer 2001. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+// locate which platform we are on and define BOOST_PLATFORM_CONFIG as needed.
+// Note that we define the headers to include using "header_name" not
+// <header_name> in order to prevent macro expansion within the header
+// name (for example "linux" is a macro on linux systems).
+
+#if (defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)) && !defined(_CRAYC)
+// linux, also other platforms (Hurd etc) that use GLIBC, should these really have their own config headers though?
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/linux.hpp"
+
+#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
+// BSD:
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/bsd.hpp"
+
+#elif defined(sun) || defined(__sun)
+// solaris:
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/solaris.hpp"
+
+#elif defined(__sgi)
+// SGI Irix:
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/irix.hpp"
+
+#elif defined(__hpux)
+// hp unix:
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/hpux.hpp"
+
+#elif defined(__CYGWIN__)
+// cygwin is not win32:
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/cygwin.hpp"
+
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+// win32:
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/win32.hpp"
+
+#elif defined(__HAIKU__)
+// Haiku
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/haiku.hpp"
+
+#elif defined(__BEOS__)
+// BeOS
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/beos.hpp"
+
+#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
+// MacOS
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/macos.hpp"
+
+#elif defined(__IBMCPP__) || defined(_AIX)
+// IBM
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/aix.hpp"
+
+#elif defined(__amigaos__)
+// AmigaOS
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/amigaos.hpp"
+
+#elif defined(__QNXNTO__)
+// QNX:
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/qnxnto.hpp"
+
+#elif defined(__VXWORKS__)
+// vxWorks:
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/vxworks.hpp"
+
+#elif defined(__SYMBIAN32__) 
+// Symbian: 
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/symbian.hpp" 
+
+#elif defined(_CRAYC)
+// Cray:
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/cray.hpp" 
+
+#elif defined(__VMS) 
+// VMS:
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/vms.hpp" 
+
+#elif defined(__CloudABI__)
+// Nuxi CloudABI:
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/cloudabi.hpp"
+#else
+
+#  if defined(unix) \
+      || defined(__unix) \
+      || defined(_XOPEN_SOURCE) \
+      || defined(_POSIX_SOURCE)
+
+   // generic unix platform:
+
+#  ifndef BOOST_HAS_UNISTD_H
+#     define BOOST_HAS_UNISTD_H
+#  endif
+
+#  include <boost/config/posix_features.hpp>
+
+#  endif
+
+#  if defined (BOOST_ASSERT_CONFIG)
+      // this must come last - generate an error if we don't
+      // recognise the platform:
+#     error "Unknown platform - please configure and report the results to boost.org"
+#  endif
+
+#endif
+
+#if 0
+//
+// This section allows dependency scanners to find all the files we *might* include:
+//
+#  include "boost/config/platform/linux.hpp"
+#  include "boost/config/platform/bsd.hpp"
+#  include "boost/config/platform/solaris.hpp"
+#  include "boost/config/platform/irix.hpp"
+#  include "boost/config/platform/hpux.hpp"
+#  include "boost/config/platform/cygwin.hpp"
+#  include "boost/config/platform/win32.hpp"
+#  include "boost/config/platform/beos.hpp"
+#  include "boost/config/platform/macos.hpp"
+#  include "boost/config/platform/aix.hpp"
+#  include "boost/config/platform/amigaos.hpp"
+#  include "boost/config/platform/qnxnto.hpp"
+#  include "boost/config/platform/vxworks.hpp"
+#  include "boost/config/platform/symbian.hpp" 
+#  include "boost/config/platform/cray.hpp" 
+#  include "boost/config/platform/vms.hpp" 
+#  include <boost/config/posix_features.hpp>
+
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/config/select_stdlib_config.hpp b/vendor/pdalboost/boost/config/select_stdlib_config.hpp
new file mode 100644
index 0000000..e270a88
--- /dev/null
+++ b/vendor/pdalboost/boost/config/select_stdlib_config.hpp
@@ -0,0 +1,105 @@
+//  Boost compiler configuration selection header file
+
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  (C) Copyright Jens Maurer 2001 - 2002. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+//  See http://www.boost.org for most recent version.
+
+// locate which std lib we are using and define BOOST_STDLIB_CONFIG as needed:
+
+// First include <cstddef> to determine if some version of STLport is in use as the std lib
+// (do not rely on this header being included since users can short-circuit this header 
+//  if they know whose std lib they are using.)
+#ifdef __cplusplus
+#  include <cstddef>
+#else
+#  include <stddef.h>
+#endif
+
+#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+// STLPort library; this _must_ come first, otherwise since
+// STLport typically sits on top of some other library, we
+// can end up detecting that first rather than STLport:
+#  define BOOST_STDLIB_CONFIG "boost/config/stdlib/stlport.hpp"
+
+#else
+
+// If our std lib was not some version of STLport, and has not otherwise
+// been detected, then include <utility> as it is about 
+// the smallest of the std lib headers that includes real C++ stuff.
+// Some std libs do not include their C++-related macros in <cstddef> 
+// so this additional include makes sure we get those definitions.
+// Note: do not rely on this header being included since users can short-circuit this 
+// #include if they know whose std lib they are using.
+#if !defined(__LIBCOMO__) && !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER)\
+   && !defined(_LIBCPP_VERSION) && !defined(__GLIBCPP__) && !defined(__GLIBCXX__)\
+   && !defined(__STL_CONFIG_H) && !defined(__MSL_CPP__) && !defined(__IBMCPP__)\
+   && !defined(MSIPL_COMPILE_H) && !defined(_YVALS) && !defined(_CPPLIB_VER)
+#include <utility>
+#endif
+
+#if defined(__LIBCOMO__)
+// Comeau STL:
+#define BOOST_STDLIB_CONFIG "boost/config/stdlib/libcomo.hpp"
+
+#elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)
+// Rogue Wave library:
+#  define BOOST_STDLIB_CONFIG "boost/config/stdlib/roguewave.hpp"
+
+#elif defined(_LIBCPP_VERSION)
+// libc++
+#  define BOOST_STDLIB_CONFIG "boost/config/stdlib/libcpp.hpp"
+
+#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)
+// GNU libstdc++ 3
+#  define BOOST_STDLIB_CONFIG "boost/config/stdlib/libstdcpp3.hpp"
+
+#elif defined(__STL_CONFIG_H)
+// generic SGI STL
+#  define BOOST_STDLIB_CONFIG "boost/config/stdlib/sgi.hpp"
+
+#elif defined(__MSL_CPP__)
+// MSL standard lib:
+#  define BOOST_STDLIB_CONFIG "boost/config/stdlib/msl.hpp"
+
+#elif defined(__IBMCPP__)
+// take the default VACPP std lib
+#  define BOOST_STDLIB_CONFIG "boost/config/stdlib/vacpp.hpp"
+
+#elif defined(MSIPL_COMPILE_H)
+// Modena C++ standard library
+#  define BOOST_STDLIB_CONFIG "boost/config/stdlib/modena.hpp"
+
+#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
+// Dinkumware Library (this has to appear after any possible replacement libraries):
+#  define BOOST_STDLIB_CONFIG "boost/config/stdlib/dinkumware.hpp"
+
+#elif defined (BOOST_ASSERT_CONFIG)
+// this must come last - generate an error if we don't
+// recognise the library:
+#  error "Unknown standard library - please configure and report the results to boost.org"
+
+#endif
+
+#endif
+
+#if 0
+//
+// This section allows dependency scanners to find all the files we *might* include:
+//
+#  include "boost/config/stdlib/stlport.hpp"
+#  include "boost/config/stdlib/libcomo.hpp"
+#  include "boost/config/stdlib/roguewave.hpp"
+#  include "boost/config/stdlib/libcpp.hpp"
+#  include "boost/config/stdlib/libstdcpp3.hpp"
+#  include "boost/config/stdlib/sgi.hpp"
+#  include "boost/config/stdlib/msl.hpp"
+#  include "boost/config/stdlib/vacpp.hpp"
+#  include "boost/config/stdlib/modena.hpp"
+#  include "boost/config/stdlib/dinkumware.hpp"
+#endif
+
diff --git a/vendor/pdalboost/boost/config/stdlib/dinkumware.hpp b/vendor/pdalboost/boost/config/stdlib/dinkumware.hpp
new file mode 100644
index 0000000..af8ddda
--- /dev/null
+++ b/vendor/pdalboost/boost/config/stdlib/dinkumware.hpp
@@ -0,0 +1,198 @@
+//  (C) Copyright John Maddock 2001 - 2003.
+//  (C) Copyright Jens Maurer 2001.
+//  (C) Copyright Peter Dimov 2001.
+//  (C) Copyright David Abrahams 2002.
+//  (C) Copyright Guillaume Melquiond 2003.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Dinkumware standard library config:
+
+#if !defined(_YVALS) && !defined(_CPPLIB_VER)
+#include <boost/config/no_tr1/utility.hpp>
+#if !defined(_YVALS) && !defined(_CPPLIB_VER)
+#error This is not the Dinkumware lib!
+#endif
+#endif
+
+
+#if defined(_CPPLIB_VER) && (_CPPLIB_VER >= 306)
+   // full dinkumware 3.06 and above
+   // fully conforming provided the compiler supports it:
+#  if !(defined(_GLOBAL_USING) && (_GLOBAL_USING+0 > 0)) && !defined(__BORLANDC__) && !defined(_STD) && !(defined(__ICC) && (__ICC >= 700))   // can be defined in yvals.h
+#     define BOOST_NO_STDC_NAMESPACE
+#  endif
+#  if !(defined(_HAS_MEMBER_TEMPLATES_REBIND) && (_HAS_MEMBER_TEMPLATES_REBIND+0 > 0)) && !(defined(_MSC_VER) && (_MSC_VER > 1300)) && defined(BOOST_MSVC)
+#     define BOOST_NO_STD_ALLOCATOR
+#  endif
+#  define BOOST_HAS_PARTIAL_STD_ALLOCATOR
+#  if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
+      // if this lib version is set up for vc6 then there is no std::use_facet:
+#     define BOOST_NO_STD_USE_FACET
+#     define BOOST_HAS_TWO_ARG_USE_FACET
+      // C lib functions aren't in namespace std either:
+#     define BOOST_NO_STDC_NAMESPACE
+      // and nor is <exception>
+#     define BOOST_NO_EXCEPTION_STD_NAMESPACE
+#  endif
+// There's no numeric_limits<long long> support unless _LONGLONG is defined:
+#  if !defined(_LONGLONG) && (_CPPLIB_VER <= 310)
+#     define BOOST_NO_MS_INT64_NUMERIC_LIMITS
+#  endif
+// 3.06 appears to have (non-sgi versions of) <hash_set> & <hash_map>,
+// and no <slist> at all
+#else
+#  define BOOST_MSVC_STD_ITERATOR 1
+#  define BOOST_NO_STD_ITERATOR
+#  define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+#  define BOOST_NO_STD_ALLOCATOR
+#  define BOOST_NO_STDC_NAMESPACE
+#  define BOOST_NO_STD_USE_FACET
+#  define BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN
+#  define BOOST_HAS_MACRO_USE_FACET
+#  ifndef _CPPLIB_VER
+      // Updated Dinkum library defines this, and provides
+      // its own min and max definitions, as does MTA version.
+#     ifndef __MTA__ 
+#        define BOOST_NO_STD_MIN_MAX
+#     endif
+#     define BOOST_NO_MS_INT64_NUMERIC_LIMITS
+#  endif
+#endif
+
+//
+// std extension namespace is stdext for vc7.1 and later, 
+// the same applies to other compilers that sit on top
+// of vc7.1 (Intel and Comeau):
+//
+#if defined(_MSC_VER) && (_MSC_VER >= 1310) && !defined(__BORLANDC__)
+#  define BOOST_STD_EXTENSION_NAMESPACE stdext
+#endif
+
+
+#if (defined(_MSC_VER) && (_MSC_VER <= 1300) && !defined(__BORLANDC__)) || !defined(_CPPLIB_VER) || (_CPPLIB_VER < 306)
+   // if we're using a dinkum lib that's
+   // been configured for VC6/7 then there is
+   // no iterator traits (true even for icl)
+#  define BOOST_NO_STD_ITERATOR_TRAITS
+#endif
+
+#if defined(__ICL) && (__ICL < 800) && defined(_CPPLIB_VER) && (_CPPLIB_VER <= 310)
+// Intel C++ chokes over any non-trivial use of <locale>
+// this may be an overly restrictive define, but regex fails without it:
+#  define BOOST_NO_STD_LOCALE
+#endif
+
+// Fix for VC++ 8.0 on up ( I do not have a previous version to test )
+// or clang-cl. If exceptions are off you must manually include the 
+// <exception> header before including the <typeinfo> header. Admittedly 
+// trying to use Boost libraries or the standard C++ libraries without 
+// exception support is not suggested but currently clang-cl ( v 3.4 ) 
+// does not support exceptions and must be compiled with exceptions off.
+#if !_HAS_EXCEPTIONS && ((defined(BOOST_MSVC) && BOOST_MSVC >= 1400) || (defined(__clang__) && defined(_MSC_VER)))
+#include <exception>
+#endif
+#include <typeinfo>
+#if ( (!_HAS_EXCEPTIONS && !defined(__ghs__)) || (!_HAS_NAMESPACE && defined(__ghs__)) ) && !defined(__TI_COMPILER_VERSION__) && !defined(__VISUALDSPVERSION__)
+#  define BOOST_NO_STD_TYPEINFO
+#endif  
+
+//  C++0x headers implemented in 520 (as shipped by Microsoft)
+//
+#if !defined(_CPPLIB_VER) || _CPPLIB_VER < 520
+#  define BOOST_NO_CXX11_HDR_ARRAY
+#  define BOOST_NO_CXX11_HDR_CODECVT
+#  define BOOST_NO_CXX11_HDR_FORWARD_LIST
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#  define BOOST_NO_CXX11_HDR_RANDOM
+#  define BOOST_NO_CXX11_HDR_REGEX
+#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+#  define BOOST_NO_CXX11_HDR_UNORDERED_SET
+#  define BOOST_NO_CXX11_HDR_TUPLE
+#  define BOOST_NO_CXX11_HDR_TYPEINDEX
+#  define BOOST_NO_CXX11_HDR_FUNCTIONAL
+#  define BOOST_NO_CXX11_NUMERIC_LIMITS
+#  define BOOST_NO_CXX11_SMART_PTR
+#endif
+
+#if ((!defined(_HAS_TR1_IMPORTS) || (_HAS_TR1_IMPORTS+0 == 0)) && !defined(BOOST_NO_CXX11_HDR_TUPLE)) \
+  && (!defined(_CPPLIB_VER) || _CPPLIB_VER < 610)
+#  define BOOST_NO_CXX11_HDR_TUPLE
+#endif
+
+//  C++0x headers implemented in 540 (as shipped by Microsoft)
+//
+#if !defined(_CPPLIB_VER) || _CPPLIB_VER < 540
+#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#  define BOOST_NO_CXX11_HDR_CHRONO
+#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#  define BOOST_NO_CXX11_HDR_FUTURE
+#  define BOOST_NO_CXX11_HDR_MUTEX
+#  define BOOST_NO_CXX11_HDR_RATIO
+#  define BOOST_NO_CXX11_HDR_THREAD
+#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR
+#endif
+
+//  C++0x headers implemented in 610 (as shipped by Microsoft)
+//
+#if !defined(_CPPLIB_VER) || _CPPLIB_VER < 610
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#  define BOOST_NO_CXX11_HDR_ATOMIC
+#  define BOOST_NO_CXX11_ALLOCATOR
+// 540 has std::align but it is not a conforming implementation
+#  define BOOST_NO_CXX11_STD_ALIGN
+#endif
+
+#if defined(__has_include)
+#if !__has_include(<shared_mutex>)
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#elif __cplusplus < 201402
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+#elif !defined(_CPPLIB_VER) || (_CPPLIB_VER < 650)
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+
+#if defined(BOOST_INTEL) && (BOOST_INTEL <= 1400)
+// Intel's compiler can't handle this header yet:
+#  define BOOST_NO_CXX11_HDR_ATOMIC
+#endif
+
+
+//  520..610 have std::addressof, but it doesn't support functions
+//
+#if !defined(_CPPLIB_VER) || _CPPLIB_VER < 650
+#  define BOOST_NO_CXX11_ADDRESSOF
+#endif
+
+// Bug specific to VC14, 
+// See https://connect.microsoft.com/VisualStudio/feedback/details/1348277/link-error-when-using-std-codecvt-utf8-utf16-char16-t
+// and discussion here: http://blogs.msdn.com/b/vcblog/archive/2014/11/12/visual-studio-2015-preview-now-available.aspx?PageIndex=2
+#if defined(_CPPLIB_VER) && (_CPPLIB_VER == 650)
+#  define BOOST_NO_CXX11_HDR_CODECVT
+#endif
+
+#if defined(_CPPLIB_VER) && (_CPPLIB_VER >= 650)
+// If _HAS_AUTO_PTR_ETC is defined to 0, std::auto_ptr is not available.
+// See https://www.visualstudio.com/en-us/news/vs2015-vs.aspx#C++
+// and http://blogs.msdn.com/b/vcblog/archive/2015/06/19/c-11-14-17-features-in-vs-2015-rtm.aspx
+#  if defined(_HAS_AUTO_PTR_ETC) && (_HAS_AUTO_PTR_ETC == 0)
+#    define BOOST_NO_AUTO_PTR
+#  endif
+#endif
+
+#ifdef _CPPLIB_VER
+#  define BOOST_DINKUMWARE_STDLIB _CPPLIB_VER
+#else
+#  define BOOST_DINKUMWARE_STDLIB 1
+#endif
+
+#ifdef _CPPLIB_VER
+#  define BOOST_STDLIB "Dinkumware standard library version " BOOST_STRINGIZE(_CPPLIB_VER)
+#else
+#  define BOOST_STDLIB "Dinkumware standard library version 1.x"
+#endif
diff --git a/vendor/pdalboost/boost/config/stdlib/libcomo.hpp b/vendor/pdalboost/boost/config/stdlib/libcomo.hpp
new file mode 100644
index 0000000..941498d
--- /dev/null
+++ b/vendor/pdalboost/boost/config/stdlib/libcomo.hpp
@@ -0,0 +1,83 @@
+//  (C) Copyright John Maddock 2002 - 2003. 
+//  (C) Copyright Jens Maurer 2002 - 2003. 
+//  (C) Copyright Beman Dawes 2002 - 2003. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Comeau STL:
+
+#if !defined(__LIBCOMO__)
+#  include <boost/config/no_tr1/utility.hpp>
+#  if !defined(__LIBCOMO__)
+#      error "This is not the Comeau STL!"
+#  endif
+#endif
+
+//
+// std::streambuf<wchar_t> is non-standard
+// NOTE: versions of libcomo prior to beta28 have octal version numbering,
+// e.g. version 25 is 21 (dec)
+#if __LIBCOMO_VERSION__ <= 22
+#  define BOOST_NO_STD_WSTREAMBUF
+#endif
+
+#if (__LIBCOMO_VERSION__ <= 31) && defined(_WIN32)
+#define BOOST_NO_SWPRINTF
+#endif
+
+#if __LIBCOMO_VERSION__ >= 31
+#  define BOOST_HAS_HASH
+#  define BOOST_HAS_SLIST
+#endif
+
+//  C++0x headers not yet implemented
+//
+#  define BOOST_NO_CXX11_HDR_ARRAY
+#  define BOOST_NO_CXX11_HDR_CHRONO
+#  define BOOST_NO_CXX11_HDR_CODECVT
+#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#  define BOOST_NO_CXX11_HDR_FORWARD_LIST
+#  define BOOST_NO_CXX11_HDR_FUTURE
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#  define BOOST_NO_CXX11_HDR_MUTEX
+#  define BOOST_NO_CXX11_HDR_RANDOM
+#  define BOOST_NO_CXX11_HDR_RATIO
+#  define BOOST_NO_CXX11_HDR_REGEX
+#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+#  define BOOST_NO_CXX11_HDR_THREAD
+#  define BOOST_NO_CXX11_HDR_TUPLE
+#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#  define BOOST_NO_CXX11_HDR_TYPEINDEX
+#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+#  define BOOST_NO_CXX11_HDR_UNORDERED_SET
+#  define BOOST_NO_CXX11_NUMERIC_LIMITS
+#  define BOOST_NO_CXX11_ALLOCATOR
+#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR
+#  define BOOST_NO_CXX11_SMART_PTR
+#  define BOOST_NO_CXX11_HDR_FUNCTIONAL
+#  define BOOST_NO_CXX11_HDR_ATOMIC
+#  define BOOST_NO_CXX11_STD_ALIGN
+#  define BOOST_NO_CXX11_ADDRESSOF
+
+#if defined(__has_include)
+#if !__has_include(<shared_mutex>)
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#elif __cplusplus < 201402
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+#else
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+
+//
+// Intrinsic type_traits support.
+// The SGI STL has it's own __type_traits class, which
+// has intrinsic compiler support with SGI's compilers.
+// Whatever map SGI style type traits to boost equivalents:
+//
+#define BOOST_HAS_SGI_TYPE_TRAITS
+
+#define BOOST_STDLIB "Comeau standard library " BOOST_STRINGIZE(__LIBCOMO_VERSION__)
diff --git a/vendor/pdalboost/boost/config/stdlib/libcpp.hpp b/vendor/pdalboost/boost/config/stdlib/libcpp.hpp
new file mode 100644
index 0000000..ab5d123
--- /dev/null
+++ b/vendor/pdalboost/boost/config/stdlib/libcpp.hpp
@@ -0,0 +1,80 @@
+//  (C) Copyright Christopher Jefferson 2011.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  config for libc++
+//  Might need more in here later.
+
+#if !defined(_LIBCPP_VERSION)
+#  include <ciso646>
+#  if !defined(_LIBCPP_VERSION)
+#      error "This is not libc++!"
+#  endif
+#endif
+
+#define BOOST_STDLIB "libc++ version " BOOST_STRINGIZE(_LIBCPP_VERSION)
+
+#define BOOST_HAS_THREADS
+
+#ifdef _LIBCPP_HAS_NO_VARIADICS
+#    define BOOST_NO_CXX11_HDR_TUPLE
+#endif
+
+// BOOST_NO_CXX11_ALLOCATOR should imply no support for the C++11
+// allocator model. The C++11 allocator model requires a conforming
+// std::allocator_traits which is only possible with C++11 template
+// aliases since members rebind_alloc and rebind_traits require it.
+#if defined(_LIBCPP_HAS_NO_TEMPLATE_ALIASES)
+#    define BOOST_NO_CXX11_ALLOCATOR
+#endif
+
+#if __cplusplus < 201103
+#  define BOOST_NO_CXX11_HDR_ARRAY
+#  define BOOST_NO_CXX11_HDR_CODECVT
+#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#  define BOOST_NO_CXX11_HDR_FORWARD_LIST
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#  define BOOST_NO_CXX11_HDR_MUTEX
+#  define BOOST_NO_CXX11_HDR_RANDOM
+#  define BOOST_NO_CXX11_HDR_RATIO
+#  define BOOST_NO_CXX11_HDR_REGEX
+#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+#  define BOOST_NO_CXX11_HDR_THREAD
+#  define BOOST_NO_CXX11_HDR_TUPLE
+#  define BOOST_NO_CXX11_HDR_TYPEINDEX
+#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+#  define BOOST_NO_CXX11_HDR_UNORDERED_SET
+#  define BOOST_NO_CXX11_NUMERIC_LIMITS
+#  define BOOST_NO_CXX11_ALLOCATOR
+#  define BOOST_NO_CXX11_SMART_PTR
+#  define BOOST_NO_CXX11_HDR_FUNCTIONAL
+#  define BOOST_NO_CXX11_STD_ALIGN
+#  define BOOST_NO_CXX11_ADDRESSOF
+#endif
+
+//
+// These appear to be unusable/incomplete so far:
+//
+#  define BOOST_NO_CXX11_HDR_CHRONO
+#  define BOOST_NO_CXX11_HDR_FUTURE
+#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR
+#  define BOOST_NO_CXX11_HDR_ATOMIC
+
+// libc++ uses a non-standard messages_base
+#define BOOST_NO_STD_MESSAGES
+
+#if defined(__has_include)
+#if !__has_include(<shared_mutex>)
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#elif __cplusplus <= 201103
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+#elif __cplusplus < 201402
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+
+//  --- end ---
diff --git a/vendor/pdalboost/boost/config/stdlib/libstdcpp3.hpp b/vendor/pdalboost/boost/config/stdlib/libstdcpp3.hpp
new file mode 100644
index 0000000..9718bed
--- /dev/null
+++ b/vendor/pdalboost/boost/config/stdlib/libstdcpp3.hpp
@@ -0,0 +1,281 @@
+//  (C) Copyright John Maddock 2001.
+//  (C) Copyright Jens Maurer 2001.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  config for libstdc++ v3
+//  not much to go in here:
+
+#define BOOST_GNU_STDLIB 1
+
+#ifdef __GLIBCXX__
+#define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCXX__)
+#else
+#define BOOST_STDLIB "GNU libstdc++ version " BOOST_STRINGIZE(__GLIBCPP__)
+#endif
+
+#if !defined(_GLIBCPP_USE_WCHAR_T) && !defined(_GLIBCXX_USE_WCHAR_T)
+#  define BOOST_NO_CWCHAR
+#  define BOOST_NO_CWCTYPE
+#  define BOOST_NO_STD_WSTRING
+#  define BOOST_NO_STD_WSTREAMBUF
+#endif
+
+#if defined(__osf__) && !defined(_REENTRANT) \
+  && ( defined(_GLIBCXX_HAVE_GTHR_DEFAULT) || defined(_GLIBCPP_HAVE_GTHR_DEFAULT) )
+// GCC 3 on Tru64 forces the definition of _REENTRANT when any std lib header
+// file is included, therefore for consistency we define it here as well.
+#  define _REENTRANT
+#endif
+
+#ifdef __GLIBCXX__ // gcc 3.4 and greater:
+#  if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
+        || defined(_GLIBCXX__PTHREADS) \
+        || defined(_GLIBCXX_HAS_GTHREADS) \
+        || defined(_WIN32) \
+        || defined(_AIX) \
+        || defined(__HAIKU__)
+      //
+      // If the std lib has thread support turned on, then turn it on in Boost
+      // as well.  We do this because some gcc-3.4 std lib headers define _REENTANT
+      // while others do not...
+      //
+#     define BOOST_HAS_THREADS
+#  else
+#     define BOOST_DISABLE_THREADS
+#  endif
+#elif defined(__GLIBCPP__) \
+        && !defined(_GLIBCPP_HAVE_GTHR_DEFAULT) \
+        && !defined(_GLIBCPP__PTHREADS)
+   // disable thread support if the std lib was built single threaded:
+#  define BOOST_DISABLE_THREADS
+#endif
+
+#if (defined(linux) || defined(__linux) || defined(__linux__)) && defined(__arm__) && defined(_GLIBCPP_HAVE_GTHR_DEFAULT)
+// linux on arm apparently doesn't define _REENTRANT
+// so just turn on threading support whenever the std lib is thread safe:
+#  define BOOST_HAS_THREADS
+#endif
+
+#if !defined(_GLIBCPP_USE_LONG_LONG) \
+    && !defined(_GLIBCXX_USE_LONG_LONG)\
+    && defined(BOOST_HAS_LONG_LONG)
+// May have been set by compiler/*.hpp, but "long long" without library
+// support is useless.
+#  undef BOOST_HAS_LONG_LONG
+#endif
+
+// Apple doesn't seem to reliably defined a *unix* macro
+#if !defined(CYGWIN) && (  defined(__unix__)  \
+                        || defined(__unix)    \
+                        || defined(unix)      \
+                        || defined(__APPLE__) \
+                        || defined(__APPLE)   \
+                        || defined(APPLE))
+#  include <unistd.h>
+#endif
+
+#if defined(__GLIBCXX__) || (defined(__GLIBCPP__) && __GLIBCPP__>=20020514) // GCC >= 3.1.0
+#  define BOOST_STD_EXTENSION_NAMESPACE __gnu_cxx
+#  define BOOST_HAS_SLIST
+#  define BOOST_HAS_HASH
+#  define BOOST_SLIST_HEADER <ext/slist>
+# if !defined(__GNUC__) || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3)
+#   define BOOST_HASH_SET_HEADER <ext/hash_set>
+#   define BOOST_HASH_MAP_HEADER <ext/hash_map>
+# else
+#   define BOOST_HASH_SET_HEADER <backward/hash_set>
+#   define BOOST_HASH_MAP_HEADER <backward/hash_map>
+# endif
+#endif
+
+//
+// Decide whether we have C++11 support turned on:
+//
+#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103)
+#  define BOOST_LIBSTDCXX11
+#endif
+//
+//  Decide which version of libstdc++ we have, normally
+//  stdlibc++ C++0x support is detected via __GNUC__, __GNUC_MINOR__, and possibly
+//  __GNUC_PATCHLEVEL__ at the suggestion of Jonathan Wakely, one of the stdlibc++
+//  developers. He also commented:
+//
+//       "I'm not sure how useful __GLIBCXX__ is for your purposes, for instance in
+//       GCC 4.2.4 it is set to 20080519 but in GCC 4.3.0 it is set to 20080305.
+//       Although 4.3.0 was released earlier than 4.2.4, it has better C++0x support
+//       than any release in the 4.2 series."
+//
+//  Another resource for understanding stdlibc++ features is:
+//  http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#manual.intro.status.standard.200x
+//
+//  However, using the GCC version number fails when the compiler is clang since this
+//  only ever claims to emulate GCC-4.2, see https://svn.boost.org/trac/boost/ticket/7473
+//  for a long discussion on this issue.  What we can do though is use clang's __has_include
+//  to detect the presence of a C++11 header that was introduced with a specific GCC release.
+//  We still have to be careful though as many such headers were buggy and/or incomplete when
+//  first introduced, so we only check for headers that were fully featured from day 1, and then
+//  use that to infer the underlying GCC version:
+//
+#ifdef __clang__
+
+#if __has_include(<experimental/any>)
+#  define BOOST_LIBSTDCXX_VERSION 50100
+#elif __has_include(<shared_mutex>)
+#  define BOOST_LIBSTDCXX_VERSION 40900
+#elif __has_include(<ext/cmath>)
+#  define BOOST_LIBSTDCXX_VERSION 40800
+#elif __has_include(<scoped_allocator>)
+#  define BOOST_LIBSTDCXX_VERSION 40700
+#elif __has_include(<typeindex>)
+#  define BOOST_LIBSTDCXX_VERSION 40600
+#elif __has_include(<future>)
+#  define BOOST_LIBSTDCXX_VERSION 40500
+#elif  __has_include(<ratio>)
+#  define BOOST_LIBSTDCXX_VERSION 40400
+#elif __has_include(<array>)
+#  define BOOST_LIBSTDCXX_VERSION 40300
+#endif
+//
+//  GCC 4.8 and 9 add working versions of <atomic> and <regex> respectively.
+//  However, we have no test for these as the headers were present but broken
+//  in early GCC versions.
+//
+#endif
+
+#if defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x5130) && (__cplusplus >= 201103L)
+//
+// Oracle Solaris compiler uses it's own verison of libstdc++ but doesn't 
+// set __GNUC__
+//
+#define BOOST_LIBSTDCXX_VERSION 40800
+#endif
+
+#if !defined(BOOST_LIBSTDCXX_VERSION)
+#  define BOOST_LIBSTDCXX_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
+#endif
+
+//  C++0x headers in GCC 4.3.0 and later
+//
+#if (BOOST_LIBSTDCXX_VERSION < 40300) || !defined(BOOST_LIBSTDCXX11)
+#  define BOOST_NO_CXX11_HDR_ARRAY
+#  define BOOST_NO_CXX11_HDR_TUPLE
+#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+#  define BOOST_NO_CXX11_HDR_UNORDERED_SET
+#  define BOOST_NO_CXX11_HDR_FUNCTIONAL
+#endif
+
+//  C++0x headers in GCC 4.4.0 and later
+//
+#if (BOOST_LIBSTDCXX_VERSION < 40400) || !defined(BOOST_LIBSTDCXX11)
+#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#  define BOOST_NO_CXX11_HDR_FORWARD_LIST
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#  define BOOST_NO_CXX11_HDR_MUTEX
+#  define BOOST_NO_CXX11_HDR_RATIO
+#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+#  define BOOST_NO_CXX11_SMART_PTR
+#else
+#  define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG 
+#  define BOOST_HAS_TR1_COMPLEX_OVERLOADS 
+#endif
+
+//  C++0x features in GCC 4.5.0 and later
+//
+#if (BOOST_LIBSTDCXX_VERSION < 40500) || !defined(BOOST_LIBSTDCXX11)
+#  define BOOST_NO_CXX11_NUMERIC_LIMITS
+#  define BOOST_NO_CXX11_HDR_FUTURE
+#  define BOOST_NO_CXX11_HDR_RANDOM
+#endif
+
+//  C++0x features in GCC 4.6.0 and later
+//
+#if (BOOST_LIBSTDCXX_VERSION < 40600) || !defined(BOOST_LIBSTDCXX11)
+#  define BOOST_NO_CXX11_HDR_TYPEINDEX
+#  define BOOST_NO_CXX11_ADDRESSOF
+#endif
+
+//  C++0x features in GCC 4.7.0 and later
+//
+#if (BOOST_LIBSTDCXX_VERSION < 40700) || !defined(BOOST_LIBSTDCXX11)
+// Note that although <chrono> existed prior to 4.7, "steady_clock" is spelled "monotonic_clock"
+// so 4.7.0 is the first truely conforming one.
+#  define BOOST_NO_CXX11_HDR_CHRONO
+#  define BOOST_NO_CXX11_ALLOCATOR
+#endif
+//  C++0x features in GCC 4.8.0 and later
+//
+#if (BOOST_LIBSTDCXX_VERSION < 40800) || !defined(BOOST_LIBSTDCXX11)
+// Note that although <atomic> existed prior to gcc 4.8 it was largely unimplemented for many types:
+#  define BOOST_NO_CXX11_HDR_ATOMIC
+#  define BOOST_NO_CXX11_HDR_THREAD
+#endif
+//  C++0x features in GCC 4.9.0 and later
+//
+#if (BOOST_LIBSTDCXX_VERSION < 40900) || !defined(BOOST_LIBSTDCXX11)
+// Although <regex> is present and compilable against, the actual implementation is not functional
+// even for the simplest patterns such as "\d" or "[0-9]". This is the case at least in gcc up to 4.8, inclusively.
+#  define BOOST_NO_CXX11_HDR_REGEX
+#endif
+
+#if defined(__clang_major__) && ((__clang_major__ < 3) || ((__clang_major__ == 3) && (__clang_minor__ < 7)))
+// As of clang-3.6, libstdc++ header <atomic> throws up errors with clang:
+#  define BOOST_NO_CXX11_HDR_ATOMIC
+#endif
+//
+//  C++0x features in GCC 5.1 and later
+//
+#if (BOOST_LIBSTDCXX_VERSION < 50100) || !defined(BOOST_LIBSTDCXX11)
+#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#  define BOOST_NO_CXX11_HDR_CODECVT
+#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR
+#  define BOOST_NO_CXX11_STD_ALIGN
+#endif
+
+#if defined(__has_include)
+#if !__has_include(<shared_mutex>)
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#elif __cplusplus <= 201103
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+#elif __cplusplus < 201402 || (BOOST_LIBSTDCXX_VERSION < 40900) || !defined(BOOST_LIBSTDCXX11)
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+
+//
+// Headers not present on Solaris with the Oracle compiler:
+#if defined(__SUNPRO_CC)
+#define BOOST_NO_CXX11_HDR_FUTURE
+#define BOOST_NO_CXX11_HDR_FORWARD_LIST 
+#define BOOST_NO_CXX11_HDR_ATOMIC
+// shared_ptr is present, but is not convertible to bool
+// which causes all kinds of problems especially in Boost.Thread
+// but probably elsewhere as well.
+#define BOOST_NO_CXX11_SMART_PTR
+#endif
+
+#if (!defined(_GLIBCXX_HAS_GTHREADS) || !defined(_GLIBCXX_USE_C99_STDINT_TR1))
+   // Headers not always available:
+#  ifndef BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#     define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#  endif
+#  ifndef BOOST_NO_CXX11_HDR_MUTEX
+#     define BOOST_NO_CXX11_HDR_MUTEX
+#  endif
+#  ifndef BOOST_NO_CXX11_HDR_THREAD
+#     define BOOST_NO_CXX11_HDR_THREAD
+#  endif
+#  ifndef BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#     define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#  endif
+#endif
+
+#if (!defined(_GTHREAD_USE_MUTEX_TIMEDLOCK) || (_GTHREAD_USE_MUTEX_TIMEDLOCK == 0)) && !defined(BOOST_NO_CXX11_HDR_MUTEX)
+// Timed mutexes are not always available:
+#  define BOOST_NO_CXX11_HDR_MUTEX
+#endif
+
+//  --- end ---
diff --git a/vendor/pdalboost/boost/config/stdlib/modena.hpp b/vendor/pdalboost/boost/config/stdlib/modena.hpp
new file mode 100644
index 0000000..7a85e0c
--- /dev/null
+++ b/vendor/pdalboost/boost/config/stdlib/modena.hpp
@@ -0,0 +1,69 @@
+//  (C) Copyright Jens Maurer 2001. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Modena C++ standard library (comes with KAI C++)
+
+#if !defined(MSIPL_COMPILE_H)
+#  include <boost/config/no_tr1/utility.hpp>
+#  if !defined(__MSIPL_COMPILE_H)
+#      error "This is not the Modena C++ library!"
+#  endif
+#endif
+
+#ifndef MSIPL_NL_TYPES
+#define BOOST_NO_STD_MESSAGES
+#endif
+
+#ifndef MSIPL_WCHART
+#define BOOST_NO_STD_WSTRING
+#endif
+
+//  C++0x headers not yet implemented
+//
+#  define BOOST_NO_CXX11_HDR_ARRAY
+#  define BOOST_NO_CXX11_HDR_CHRONO
+#  define BOOST_NO_CXX11_HDR_CODECVT
+#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#  define BOOST_NO_CXX11_HDR_FORWARD_LIST
+#  define BOOST_NO_CXX11_HDR_FUTURE
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#  define BOOST_NO_CXX11_HDR_MUTEX
+#  define BOOST_NO_CXX11_HDR_RANDOM
+#  define BOOST_NO_CXX11_HDR_RATIO
+#  define BOOST_NO_CXX11_HDR_REGEX
+#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+#  define BOOST_NO_CXX11_HDR_THREAD
+#  define BOOST_NO_CXX11_HDR_TUPLE
+#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#  define BOOST_NO_CXX11_HDR_TYPEINDEX
+#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+#  define BOOST_NO_CXX11_HDR_UNORDERED_SET
+#  define BOOST_NO_CXX11_NUMERIC_LIMITS
+#  define BOOST_NO_CXX11_ALLOCATOR
+#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR
+#  define BOOST_NO_CXX11_SMART_PTR
+#  define BOOST_NO_CXX11_HDR_FUNCTIONAL
+#  define BOOST_NO_CXX11_HDR_ATOMIC
+#  define BOOST_NO_CXX11_STD_ALIGN
+#  define BOOST_NO_CXX11_ADDRESSOF
+
+#if defined(__has_include)
+#if !__has_include(<shared_mutex>)
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#elif __cplusplus < 201402
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+#else
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+
+#define BOOST_STDLIB "Modena C++ standard library"
+
+
+
+
+
diff --git a/vendor/pdalboost/boost/config/stdlib/msl.hpp b/vendor/pdalboost/boost/config/stdlib/msl.hpp
new file mode 100644
index 0000000..dd2775e
--- /dev/null
+++ b/vendor/pdalboost/boost/config/stdlib/msl.hpp
@@ -0,0 +1,88 @@
+//  (C) Copyright John Maddock 2001. 
+//  (C) Copyright Darin Adler 2001. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Metrowerks standard library:
+
+#ifndef __MSL_CPP__
+#  include <boost/config/no_tr1/utility.hpp>
+#  ifndef __MSL_CPP__
+#     error This is not the MSL standard library!
+#  endif
+#endif
+
+#if __MSL_CPP__ >= 0x6000  // Pro 6
+#  define BOOST_HAS_HASH
+#  define BOOST_STD_EXTENSION_NAMESPACE Metrowerks
+#endif
+#define BOOST_HAS_SLIST
+
+#if __MSL_CPP__ < 0x6209
+#  define BOOST_NO_STD_MESSAGES
+#endif
+
+// check C lib version for <stdint.h>
+#include <cstddef>
+
+#if defined(__MSL__) && (__MSL__ >= 0x5000)
+#  define BOOST_HAS_STDINT_H
+#  if !defined(__PALMOS_TRAPS__)
+#    define BOOST_HAS_UNISTD_H
+#  endif
+   // boilerplate code:
+#  include <boost/config/posix_features.hpp>
+#endif
+
+#if defined(_MWMT) || _MSL_THREADSAFE
+#  define BOOST_HAS_THREADS
+#endif
+
+#ifdef _MSL_NO_EXPLICIT_FUNC_TEMPLATE_ARG
+#  define BOOST_NO_STD_USE_FACET
+#  define BOOST_HAS_TWO_ARG_USE_FACET
+#endif
+
+//  C++0x headers not yet implemented
+//
+#  define BOOST_NO_CXX11_HDR_ARRAY
+#  define BOOST_NO_CXX11_HDR_CHRONO
+#  define BOOST_NO_CXX11_HDR_CODECVT
+#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#  define BOOST_NO_CXX11_HDR_FORWARD_LIST
+#  define BOOST_NO_CXX11_HDR_FUTURE
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#  define BOOST_NO_CXX11_HDR_MUTEX
+#  define BOOST_NO_CXX11_HDR_RANDOM
+#  define BOOST_NO_CXX11_HDR_RATIO
+#  define BOOST_NO_CXX11_HDR_REGEX
+#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+#  define BOOST_NO_CXX11_HDR_THREAD
+#  define BOOST_NO_CXX11_HDR_TUPLE
+#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#  define BOOST_NO_CXX11_HDR_TYPEINDEX
+#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+#  define BOOST_NO_CXX11_HDR_UNORDERED_SET
+#  define BOOST_NO_CXX11_NUMERIC_LIMITS
+#  define BOOST_NO_CXX11_ALLOCATOR
+#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR
+#  define BOOST_NO_CXX11_SMART_PTR
+#  define BOOST_NO_CXX11_HDR_FUNCTIONAL
+#  define BOOST_NO_CXX11_HDR_ATOMIC
+#  define BOOST_NO_CXX11_STD_ALIGN
+#  define BOOST_NO_CXX11_ADDRESSOF
+
+#if defined(__has_include)
+#if !__has_include(<shared_mutex>)
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#elif __cplusplus < 201402
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+#else
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+
+#define BOOST_STDLIB "Metrowerks Standard Library version " BOOST_STRINGIZE(__MSL_CPP__)
diff --git a/vendor/pdalboost/boost/config/stdlib/roguewave.hpp b/vendor/pdalboost/boost/config/stdlib/roguewave.hpp
new file mode 100644
index 0000000..97a2b0b
--- /dev/null
+++ b/vendor/pdalboost/boost/config/stdlib/roguewave.hpp
@@ -0,0 +1,198 @@
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  (C) Copyright Jens Maurer 2001. 
+//  (C) Copyright David Abrahams 2003. 
+//  (C) Copyright Boris Gubenko 2007. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  Rogue Wave std lib:
+
+#define BOOST_RW_STDLIB 1 
+
+#if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER)
+#  include <boost/config/no_tr1/utility.hpp>
+#  if !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER)
+#     error This is not the Rogue Wave standard library
+#  endif
+#endif
+//
+// figure out a consistent version number:
+//
+#ifndef _RWSTD_VER
+#  define BOOST_RWSTD_VER 0x010000
+#elif _RWSTD_VER < 0x010000
+#  define BOOST_RWSTD_VER (_RWSTD_VER << 8)
+#else
+#  define BOOST_RWSTD_VER _RWSTD_VER
+#endif
+
+#ifndef _RWSTD_VER
+#  define BOOST_STDLIB "Rogue Wave standard library version (Unknown version)"
+#elif _RWSTD_VER < 0x04010200
+ #  define BOOST_STDLIB "Rogue Wave standard library version " BOOST_STRINGIZE(_RWSTD_VER)
+#else
+#  ifdef _RWSTD_VER_STR
+#    define BOOST_STDLIB "Apache STDCXX standard library version " _RWSTD_VER_STR
+#  else
+#    define BOOST_STDLIB "Apache STDCXX standard library version " BOOST_STRINGIZE(_RWSTD_VER)
+#  endif
+#endif
+
+//
+// Prior to version 2.2.0 the primary template for std::numeric_limits
+// does not have compile time constants, even though specializations of that
+// template do:
+//
+#if BOOST_RWSTD_VER < 0x020200
+#  define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+#endif
+
+// Sun CC 5.5 patch 113817-07 adds long long specialization, but does not change the
+// library version number (http://sunsolve6.sun.com/search/document.do?assetkey=1-21-113817):
+#if BOOST_RWSTD_VER <= 0x020101 && (!defined(__SUNPRO_CC) || (__SUNPRO_CC < 0x550))
+#  define BOOST_NO_LONG_LONG_NUMERIC_LIMITS
+# endif
+
+//
+// Borland version of numeric_limits lacks __int64 specialisation:
+//
+#ifdef __BORLANDC__
+#  define BOOST_NO_MS_INT64_NUMERIC_LIMITS
+#endif
+
+//
+// No std::iterator if it can't figure out default template args:
+//
+#if defined(_RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || defined(RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES) || (BOOST_RWSTD_VER < 0x020000)
+#  define BOOST_NO_STD_ITERATOR
+#endif
+
+//
+// No iterator traits without partial specialization:
+//
+#if defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) || defined(RWSTD_NO_CLASS_PARTIAL_SPEC)
+#  define BOOST_NO_STD_ITERATOR_TRAITS
+#endif
+
+//
+// Prior to version 2.0, std::auto_ptr was buggy, and there were no
+// new-style iostreams, and no conformant std::allocator:
+//
+#if (BOOST_RWSTD_VER < 0x020000)
+#  define BOOST_NO_AUTO_PTR
+#  define BOOST_NO_STRINGSTREAM
+#  define BOOST_NO_STD_ALLOCATOR
+#  define BOOST_NO_STD_LOCALE
+#endif
+
+//
+// No template iterator constructors without member template support:
+//
+#if defined(RWSTD_NO_MEMBER_TEMPLATES) || defined(_RWSTD_NO_MEMBER_TEMPLATES)
+#  define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+#endif
+
+//
+// RW defines _RWSTD_ALLOCATOR if the allocator is conformant and in use
+// (the or _HPACC_ part is a hack - the library seems to define _RWSTD_ALLOCATOR
+// on HP aCC systems even though the allocator is in fact broken):
+//
+#if !defined(_RWSTD_ALLOCATOR) || (defined(__HP_aCC) && __HP_aCC <= 33100)
+#  define BOOST_NO_STD_ALLOCATOR
+#endif
+
+//
+// If we have a std::locale, we still may not have std::use_facet:
+//
+#if defined(_RWSTD_NO_TEMPLATE_ON_RETURN_TYPE) && !defined(BOOST_NO_STD_LOCALE)
+#  define BOOST_NO_STD_USE_FACET
+#  define BOOST_HAS_TWO_ARG_USE_FACET
+#endif
+
+//
+// There's no std::distance prior to version 2, or without
+// partial specialization support:
+//
+#if (BOOST_RWSTD_VER < 0x020000) || defined(_RWSTD_NO_CLASS_PARTIAL_SPEC)
+    #define BOOST_NO_STD_DISTANCE
+#endif
+
+//
+// Some versions of the rogue wave library don't have assignable
+// OutputIterators:
+//
+#if BOOST_RWSTD_VER < 0x020100
+#  define BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN
+#endif
+
+//
+// Disable BOOST_HAS_LONG_LONG when the library has no support for it.
+//
+#if !defined(_RWSTD_LONG_LONG) && defined(BOOST_HAS_LONG_LONG)
+#  undef BOOST_HAS_LONG_LONG
+#endif
+
+//
+// check that on HP-UX, the proper RW library is used
+//
+#if defined(__HP_aCC) && !defined(_HP_NAMESPACE_STD)
+#  error "Boost requires Standard RW library. Please compile and link with -AA"
+#endif
+
+//
+// Define macros specific to RW V2.2 on HP-UX
+//
+#if defined(__HP_aCC) && (BOOST_RWSTD_VER == 0x02020100)
+#  ifndef __HP_TC1_MAKE_PAIR
+#    define __HP_TC1_MAKE_PAIR
+#  endif
+#  ifndef _HP_INSTANTIATE_STD2_VL
+#    define _HP_INSTANTIATE_STD2_VL
+#  endif
+#endif
+
+#if _RWSTD_VER < 0x05000000
+#  define BOOST_NO_CXX11_HDR_ARRAY
+#endif
+// type_traits header is incomplete:
+#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+//
+//  C++0x headers not yet implemented
+//
+#  define BOOST_NO_CXX11_HDR_CHRONO
+#  define BOOST_NO_CXX11_HDR_CODECVT
+#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#  define BOOST_NO_CXX11_HDR_FORWARD_LIST
+#  define BOOST_NO_CXX11_HDR_FUTURE
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#  define BOOST_NO_CXX11_HDR_MUTEX
+#  define BOOST_NO_CXX11_HDR_RANDOM
+#  define BOOST_NO_CXX11_HDR_RATIO
+#  define BOOST_NO_CXX11_HDR_REGEX
+#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+#  define BOOST_NO_CXX11_HDR_THREAD
+#  define BOOST_NO_CXX11_HDR_TUPLE
+#  define BOOST_NO_CXX11_HDR_TYPEINDEX
+#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+#  define BOOST_NO_CXX11_HDR_UNORDERED_SET
+#  define BOOST_NO_CXX11_NUMERIC_LIMITS
+#  define BOOST_NO_CXX11_ALLOCATOR
+#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR
+#  define BOOST_NO_CXX11_SMART_PTR
+#  define BOOST_NO_CXX11_HDR_FUNCTIONAL
+#  define BOOST_NO_CXX11_HDR_ATOMIC
+#  define BOOST_NO_CXX11_STD_ALIGN
+#  define BOOST_NO_CXX11_ADDRESSOF
+
+#if defined(__has_include)
+#if !__has_include(<shared_mutex>)
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#elif __cplusplus < 201402
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+#else
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
diff --git a/vendor/pdalboost/boost/config/stdlib/sgi.hpp b/vendor/pdalboost/boost/config/stdlib/sgi.hpp
new file mode 100644
index 0000000..c805271
--- /dev/null
+++ b/vendor/pdalboost/boost/config/stdlib/sgi.hpp
@@ -0,0 +1,158 @@
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  (C) Copyright Darin Adler 2001. 
+//  (C) Copyright Jens Maurer 2001 - 2003. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  generic SGI STL:
+
+#if !defined(__STL_CONFIG_H)
+#  include <boost/config/no_tr1/utility.hpp>
+#  if !defined(__STL_CONFIG_H)
+#      error "This is not the SGI STL!"
+#  endif
+#endif
+
+//
+// No std::iterator traits without partial specialisation:
+//
+#if !defined(__STL_CLASS_PARTIAL_SPECIALIZATION)
+#  define BOOST_NO_STD_ITERATOR_TRAITS
+#endif
+
+//
+// No std::stringstream with gcc < 3
+//
+#if defined(__GNUC__) && (__GNUC__ < 3) && \
+     ((__GNUC_MINOR__ < 95) || (__GNUC_MINOR__ == 96)) && \
+     !defined(__STL_USE_NEW_IOSTREAMS) || \
+   defined(__APPLE_CC__)
+   // Note that we only set this for GNU C++ prior to 2.95 since the
+   // latest patches for that release do contain a minimal <sstream>
+   // If you are running a 2.95 release prior to 2.95.3 then this will need
+   // setting, but there is no way to detect that automatically (other
+   // than by running the configure script).
+   // Also, the unofficial GNU C++ 2.96 included in RedHat 7.1 doesn't
+   // have <sstream>.
+#  define BOOST_NO_STRINGSTREAM
+#endif
+
+// Apple doesn't seem to reliably defined a *unix* macro
+#if !defined(CYGWIN) && (  defined(__unix__)  \
+                        || defined(__unix)    \
+                        || defined(unix)      \
+                        || defined(__APPLE__) \
+                        || defined(__APPLE)   \
+                        || defined(APPLE))
+#  include <unistd.h>
+#endif
+
+
+//
+// Assume no std::locale without own iostreams (this may be an
+// incorrect assumption in some cases):
+//
+#if !defined(__SGI_STL_OWN_IOSTREAMS) && !defined(__STL_USE_NEW_IOSTREAMS)
+#  define BOOST_NO_STD_LOCALE
+#endif
+
+//
+// Original native SGI streams have non-standard std::messages facet:
+//
+#if defined(__sgi) && (_COMPILER_VERSION <= 650) && !defined(__SGI_STL_OWN_IOSTREAMS)
+#  define BOOST_NO_STD_LOCALE
+#endif
+
+//
+// SGI's new iostreams have missing "const" in messages<>::open
+//
+#if defined(__sgi) && (_COMPILER_VERSION <= 740) && defined(__STL_USE_NEW_IOSTREAMS)
+#  define BOOST_NO_STD_MESSAGES
+#endif
+
+//
+// No template iterator constructors, or std::allocator
+// without member templates:
+//
+#if !defined(__STL_MEMBER_TEMPLATES)
+#  define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+#  define BOOST_NO_STD_ALLOCATOR
+#endif
+
+//
+// We always have SGI style hash_set, hash_map, and slist:
+//
+#define BOOST_HAS_HASH
+#define BOOST_HAS_SLIST
+
+//
+// If this is GNU libstdc++2, then no <limits> and no std::wstring:
+//
+#if (defined(__GNUC__) && (__GNUC__ < 3))
+#  include <string>
+#  if defined(__BASTRING__)
+#     define BOOST_NO_LIMITS
+// Note: <boost/limits.hpp> will provide compile-time constants
+#     undef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+#     define BOOST_NO_STD_WSTRING
+#  endif
+#endif
+
+//
+// There is no standard iterator unless we have namespace support:
+//
+#if !defined(__STL_USE_NAMESPACES)
+#  define BOOST_NO_STD_ITERATOR
+#endif
+
+//
+// Intrinsic type_traits support.
+// The SGI STL has it's own __type_traits class, which
+// has intrinsic compiler support with SGI's compilers.
+// Whatever map SGI style type traits to boost equivalents:
+//
+#define BOOST_HAS_SGI_TYPE_TRAITS
+
+//  C++0x headers not yet implemented
+//
+#  define BOOST_NO_CXX11_HDR_ARRAY
+#  define BOOST_NO_CXX11_HDR_CHRONO
+#  define BOOST_NO_CXX11_HDR_CODECVT
+#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#  define BOOST_NO_CXX11_HDR_FORWARD_LIST
+#  define BOOST_NO_CXX11_HDR_FUTURE
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#  define BOOST_NO_CXX11_HDR_MUTEX
+#  define BOOST_NO_CXX11_HDR_RANDOM
+#  define BOOST_NO_CXX11_HDR_RATIO
+#  define BOOST_NO_CXX11_HDR_REGEX
+#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+#  define BOOST_NO_CXX11_HDR_THREAD
+#  define BOOST_NO_CXX11_HDR_TUPLE
+#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#  define BOOST_NO_CXX11_HDR_TYPEINDEX
+#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+#  define BOOST_NO_CXX11_HDR_UNORDERED_SET
+#  define BOOST_NO_CXX11_NUMERIC_LIMITS
+#  define BOOST_NO_CXX11_ALLOCATOR
+#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR
+#  define BOOST_NO_CXX11_SMART_PTR
+#  define BOOST_NO_CXX11_HDR_FUNCTIONAL
+#  define BOOST_NO_CXX11_HDR_ATOMIC
+#  define BOOST_NO_CXX11_STD_ALIGN
+#  define BOOST_NO_CXX11_ADDRESSOF
+
+#if defined(__has_include)
+#if !__has_include(<shared_mutex>)
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#elif __cplusplus < 201402
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+#else
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+
+#define BOOST_STDLIB "SGI standard library"
\ No newline at end of file
diff --git a/vendor/pdalboost/boost/config/stdlib/stlport.hpp b/vendor/pdalboost/boost/config/stdlib/stlport.hpp
new file mode 100644
index 0000000..5433322
--- /dev/null
+++ b/vendor/pdalboost/boost/config/stdlib/stlport.hpp
@@ -0,0 +1,248 @@
+//  (C) Copyright John Maddock 2001 - 2002. 
+//  (C) Copyright Darin Adler 2001. 
+//  (C) Copyright Jens Maurer 2001. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+//  STLPort standard library config:
+
+#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+#  include <cstddef>
+#  if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+#      error "This is not STLPort!"
+#  endif
+#endif
+
+// Apple doesn't seem to reliably defined a *unix* macro
+#if !defined(CYGWIN) && (  defined(__unix__)  \
+                        || defined(__unix)    \
+                        || defined(unix)      \
+                        || defined(__APPLE__) \
+                        || defined(__APPLE)   \
+                        || defined(APPLE))
+#  include <unistd.h>
+#endif
+
+//
+// __STL_STATIC_CONST_INIT_BUG implies BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+// for versions prior to 4.1(beta)
+//
+#if (defined(__STL_STATIC_CONST_INIT_BUG) || defined(_STLP_STATIC_CONST_INIT_BUG)) && (__SGI_STL_PORT <= 0x400)
+#  define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+#endif
+
+//
+// If STLport thinks that there is no partial specialisation, then there is no
+// std::iterator traits:
+//
+#if !(defined(_STLP_CLASS_PARTIAL_SPECIALIZATION) || defined(__STL_CLASS_PARTIAL_SPECIALIZATION))
+#  define BOOST_NO_STD_ITERATOR_TRAITS
+#endif
+
+//
+// No new style iostreams on GCC without STLport's iostreams enabled:
+//
+#if (defined(__GNUC__) && (__GNUC__ < 3)) && !(defined(__SGI_STL_OWN_IOSTREAMS) || defined(_STLP_OWN_IOSTREAMS))
+#  define BOOST_NO_STRINGSTREAM
+#endif
+
+//
+// No new iostreams implies no std::locale, and no std::stringstream:
+//
+#if defined(__STL_NO_IOSTREAMS) || defined(__STL_NO_NEW_IOSTREAMS) || defined(_STLP_NO_IOSTREAMS) || defined(_STLP_NO_NEW_IOSTREAMS)
+#  define BOOST_NO_STD_LOCALE
+#  define BOOST_NO_STRINGSTREAM
+#endif
+
+//
+// If the streams are not native, and we have a "using ::x" compiler bug
+// then the io stream facets are not available in namespace std::
+//
+#ifdef _STLPORT_VERSION
+#  if !(_STLPORT_VERSION >= 0x500) && !defined(_STLP_OWN_IOSTREAMS) && defined(_STLP_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__)
+#     define BOOST_NO_STD_LOCALE
+#  endif
+#else
+#  if !defined(__SGI_STL_OWN_IOSTREAMS) && defined(__STL_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE) && !defined(__BORLANDC__)
+#     define BOOST_NO_STD_LOCALE
+#  endif
+#endif
+
+#if defined(_STLPORT_VERSION) && (_STLPORT_VERSION >= 0x520)
+#  define BOOST_HAS_TR1_UNORDERED_SET
+#  define BOOST_HAS_TR1_UNORDERED_MAP
+#endif
+//
+// Without member template support enabled, their are no template
+// iterate constructors, and no std::allocator:
+//
+#if !(defined(__STL_MEMBER_TEMPLATES) || defined(_STLP_MEMBER_TEMPLATES))
+#  define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+#  define BOOST_NO_STD_ALLOCATOR
+#endif
+//
+// however we always have at least a partial allocator:
+//
+#define BOOST_HAS_PARTIAL_STD_ALLOCATOR
+
+#if !defined(_STLP_MEMBER_TEMPLATE_CLASSES) || defined(_STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE)
+#  define BOOST_NO_STD_ALLOCATOR
+#endif
+
+#if defined(_STLP_NO_MEMBER_TEMPLATE_KEYWORD) && defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)
+#  define BOOST_NO_STD_ALLOCATOR
+#endif
+
+//
+// If STLport thinks there is no wchar_t at all, then we have to disable
+// the support for the relevant specilazations of std:: templates.
+//
+#if !defined(_STLP_HAS_WCHAR_T) && !defined(_STLP_WCHAR_T_IS_USHORT)
+#  ifndef  BOOST_NO_STD_WSTRING
+#     define BOOST_NO_STD_WSTRING
+#  endif
+#  ifndef  BOOST_NO_STD_WSTREAMBUF
+#     define BOOST_NO_STD_WSTREAMBUF
+#  endif
+#endif
+
+//
+// We always have SGI style hash_set, hash_map, and slist:
+//
+#ifndef _STLP_NO_EXTENSIONS
+#define BOOST_HAS_HASH
+#define BOOST_HAS_SLIST
+#endif
+
+//
+// STLport does a good job of importing names into namespace std::,
+// but doesn't always get them all, define BOOST_NO_STDC_NAMESPACE, since our
+// workaround does not conflict with STLports:
+//
+//
+// Harold Howe says:
+// Borland switched to STLport in BCB6. Defining BOOST_NO_STDC_NAMESPACE with
+// BCB6 does cause problems. If we detect C++ Builder, then don't define 
+// BOOST_NO_STDC_NAMESPACE
+//
+#if !defined(__BORLANDC__) && !defined(__DMC__)
+//
+// If STLport is using it's own namespace, and the real names are in
+// the global namespace, then we duplicate STLport's using declarations
+// (by defining BOOST_NO_STDC_NAMESPACE), we do this because STLport doesn't
+// necessarily import all the names we need into namespace std::
+// 
+#  if (defined(__STL_IMPORT_VENDOR_CSTD) \
+         || defined(__STL_USE_OWN_NAMESPACE) \
+         || defined(_STLP_IMPORT_VENDOR_CSTD) \
+         || defined(_STLP_USE_OWN_NAMESPACE)) \
+      && (defined(__STL_VENDOR_GLOBAL_CSTD) || defined (_STLP_VENDOR_GLOBAL_CSTD))
+#     define BOOST_NO_STDC_NAMESPACE
+#     define BOOST_NO_EXCEPTION_STD_NAMESPACE
+#  endif
+#elif defined(__BORLANDC__) && __BORLANDC__ < 0x560
+// STLport doesn't import std::abs correctly:
+#include <stdlib.h>
+namespace std { using ::abs; }
+// and strcmp/strcpy don't get imported either ('cos they are macros)
+#include <string.h>
+#ifdef strcpy
+#  undef strcpy
+#endif
+#ifdef strcmp
+#  undef strcmp
+#endif
+#ifdef _STLP_VENDOR_CSTD
+namespace std{ using _STLP_VENDOR_CSTD::strcmp; using _STLP_VENDOR_CSTD::strcpy; }
+#endif
+#endif
+
+//
+// std::use_facet may be non-standard, uses a class instead:
+//
+#if defined(__STL_NO_EXPLICIT_FUNCTION_TMPL_ARGS) || defined(_STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS)
+#  define BOOST_NO_STD_USE_FACET
+#  define BOOST_HAS_STLP_USE_FACET
+#endif
+
+//
+// If STLport thinks there are no wide functions, <cwchar> etc. is not working; but
+// only if BOOST_NO_STDC_NAMESPACE is not defined (if it is then we do the import 
+// into std:: ourselves).
+//
+#if defined(_STLP_NO_NATIVE_WIDE_FUNCTIONS) && !defined(BOOST_NO_STDC_NAMESPACE)
+#  define BOOST_NO_CWCHAR
+#  define BOOST_NO_CWCTYPE
+#endif
+
+//
+// If STLport for some reason was configured so that it thinks that wchar_t
+// is not an intrinsic type, then we have to disable the support for it as
+// well (we would be missing required specializations otherwise).
+//
+#if !defined( _STLP_HAS_WCHAR_T) || defined(_STLP_WCHAR_T_IS_USHORT)
+#  undef  BOOST_NO_INTRINSIC_WCHAR_T
+#  define BOOST_NO_INTRINSIC_WCHAR_T
+#endif
+
+//
+// Borland ships a version of STLport with C++ Builder 6 that lacks
+// hashtables and the like:
+//
+#if defined(__BORLANDC__) && (__BORLANDC__ == 0x560)
+#  undef BOOST_HAS_HASH
+#endif
+
+//
+// gcc-2.95.3/STLPort does not like the using declarations we use to get ADL with std::min/max
+//
+#if defined(__GNUC__) && (__GNUC__ < 3)
+#  include <algorithm> // for std::min and std::max
+#  define BOOST_USING_STD_MIN() ((void)0)
+#  define BOOST_USING_STD_MAX() ((void)0)
+namespace pdalboost { using std::min; using std::max; }
+#endif
+
+//  C++0x headers not yet implemented
+//
+#  define BOOST_NO_CXX11_HDR_ARRAY
+#  define BOOST_NO_CXX11_HDR_CHRONO
+#  define BOOST_NO_CXX11_HDR_CODECVT
+#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#  define BOOST_NO_CXX11_HDR_FORWARD_LIST
+#  define BOOST_NO_CXX11_HDR_FUTURE
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#  define BOOST_NO_CXX11_HDR_MUTEX
+#  define BOOST_NO_CXX11_HDR_RANDOM
+#  define BOOST_NO_CXX11_HDR_RATIO
+#  define BOOST_NO_CXX11_HDR_REGEX
+#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+#  define BOOST_NO_CXX11_HDR_THREAD
+#  define BOOST_NO_CXX11_HDR_TUPLE
+#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#  define BOOST_NO_CXX11_HDR_TYPEINDEX
+#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+#  define BOOST_NO_CXX11_HDR_UNORDERED_SET
+#  define BOOST_NO_CXX11_NUMERIC_LIMITS
+#  define BOOST_NO_CXX11_ALLOCATOR
+#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR
+#  define BOOST_NO_CXX11_SMART_PTR
+#  define BOOST_NO_CXX11_HDR_FUNCTIONAL
+#  define BOOST_NO_CXX11_HDR_ATOMIC
+#  define BOOST_NO_CXX11_STD_ALIGN
+#  define BOOST_NO_CXX11_ADDRESSOF
+
+#if defined(__has_include)
+#if !__has_include(<shared_mutex>)
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#elif __cplusplus < 201402
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+#else
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+
+#define BOOST_STDLIB "STLPort standard library version " BOOST_STRINGIZE(__SGI_STL_PORT)
diff --git a/vendor/pdalboost/boost/config/stdlib/vacpp.hpp b/vendor/pdalboost/boost/config/stdlib/vacpp.hpp
new file mode 100644
index 0000000..4ccd0d2
--- /dev/null
+++ b/vendor/pdalboost/boost/config/stdlib/vacpp.hpp
@@ -0,0 +1,64 @@
+//  (C) Copyright John Maddock 2001 - 2002. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+
+#if __IBMCPP__ <= 501
+#  define BOOST_NO_STD_ALLOCATOR
+#endif
+
+#define BOOST_HAS_MACRO_USE_FACET
+#define BOOST_NO_STD_MESSAGES
+
+// Apple doesn't seem to reliably defined a *unix* macro
+#if !defined(CYGWIN) && (  defined(__unix__)  \
+                        || defined(__unix)    \
+                        || defined(unix)      \
+                        || defined(__APPLE__) \
+                        || defined(__APPLE)   \
+                        || defined(APPLE))
+#  include <unistd.h>
+#endif
+
+//  C++0x headers not yet implemented
+//
+#  define BOOST_NO_CXX11_HDR_ARRAY
+#  define BOOST_NO_CXX11_HDR_CHRONO
+#  define BOOST_NO_CXX11_HDR_CODECVT
+#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
+#  define BOOST_NO_CXX11_HDR_FORWARD_LIST
+#  define BOOST_NO_CXX11_HDR_FUTURE
+#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+#  define BOOST_NO_CXX11_HDR_MUTEX
+#  define BOOST_NO_CXX11_HDR_RANDOM
+#  define BOOST_NO_CXX11_HDR_RATIO
+#  define BOOST_NO_CXX11_HDR_REGEX
+#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
+#  define BOOST_NO_CXX11_HDR_THREAD
+#  define BOOST_NO_CXX11_HDR_TUPLE
+#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#  define BOOST_NO_CXX11_HDR_TYPEINDEX
+#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP
+#  define BOOST_NO_CXX11_HDR_UNORDERED_SET
+#  define BOOST_NO_CXX11_NUMERIC_LIMITS
+#  define BOOST_NO_CXX11_ALLOCATOR
+#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR
+#  define BOOST_NO_CXX11_SMART_PTR
+#  define BOOST_NO_CXX11_HDR_FUNCTIONAL
+#  define BOOST_NO_CXX11_HDR_ATOMIC
+#  define BOOST_NO_CXX11_STD_ALIGN
+#  define BOOST_NO_CXX11_ADDRESSOF
+
+#if defined(__has_include)
+#if !__has_include(<shared_mutex>)
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#elif __cplusplus < 201402
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+#else
+#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
+#endif
+
+#define BOOST_STDLIB "Visual Age default standard library"
diff --git a/vendor/pdalboost/boost/config/suffix.hpp b/vendor/pdalboost/boost/config/suffix.hpp
new file mode 100644
index 0000000..688ddaa
--- /dev/null
+++ b/vendor/pdalboost/boost/config/suffix.hpp
@@ -0,0 +1,1007 @@
+//  Boost config.hpp configuration header file  ------------------------------//
+//  boostinspect:ndprecated_macros -- tell the inspect tool to ignore this file
+
+//  Copyright (c) 2001-2003 John Maddock
+//  Copyright (c) 2001 Darin Adler
+//  Copyright (c) 2001 Peter Dimov
+//  Copyright (c) 2002 Bill Kempf
+//  Copyright (c) 2002 Jens Maurer
+//  Copyright (c) 2002-2003 David Abrahams
+//  Copyright (c) 2003 Gennaro Prota
+//  Copyright (c) 2003 Eric Friedman
+//  Copyright (c) 2010 Eric Jourdanneau, Joel Falcou
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/ for most recent version.
+
+//  Boost config.hpp policy and rationale documentation has been moved to
+//  http://www.boost.org/libs/config/
+//
+//  This file is intended to be stable, and relatively unchanging.
+//  It should contain boilerplate code only - no compiler specific
+//  code unless it is unavoidable - no changes unless unavoidable.
+
+#ifndef BOOST_CONFIG_SUFFIX_HPP
+#define BOOST_CONFIG_SUFFIX_HPP
+
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+//
+// Some GCC-4.x versions issue warnings even when __extension__ is used,
+// so use this as a workaround:
+//
+#pragma GCC system_header
+#endif
+
+//
+// ensure that visibility macros are always defined, thus symplifying use
+//
+#ifndef BOOST_SYMBOL_EXPORT
+# define BOOST_SYMBOL_EXPORT
+#endif
+#ifndef BOOST_SYMBOL_IMPORT
+# define BOOST_SYMBOL_IMPORT
+#endif
+#ifndef BOOST_SYMBOL_VISIBLE
+# define BOOST_SYMBOL_VISIBLE
+#endif
+
+//
+// look for long long by looking for the appropriate macros in <limits.h>.
+// Note that we use limits.h rather than climits for maximal portability,
+// remember that since these just declare a bunch of macros, there should be
+// no namespace issues from this.
+//
+#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG)                                              \
+   && !defined(BOOST_MSVC) && !defined(__BORLANDC__)
+# include <limits.h>
+# if (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))
+#   define BOOST_HAS_LONG_LONG
+# else
+#   define BOOST_NO_LONG_LONG
+# endif
+#endif
+
+// GCC 3.x will clean up all of those nasty macro definitions that
+// BOOST_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine
+// it under GCC 3.x.
+#if defined(__GNUC__) && (__GNUC__ >= 3) && defined(BOOST_NO_CTYPE_FUNCTIONS)
+#  undef BOOST_NO_CTYPE_FUNCTIONS
+#endif
+
+//
+// Assume any extensions are in namespace std:: unless stated otherwise:
+//
+#  ifndef BOOST_STD_EXTENSION_NAMESPACE
+#    define BOOST_STD_EXTENSION_NAMESPACE std
+#  endif
+
+//
+// If cv-qualified specializations are not allowed, then neither are cv-void ones:
+//
+#  if defined(BOOST_NO_CV_SPECIALIZATIONS) \
+      && !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)
+#     define BOOST_NO_CV_VOID_SPECIALIZATIONS
+#  endif
+
+//
+// If there is no numeric_limits template, then it can't have any compile time
+// constants either!
+//
+#  if defined(BOOST_NO_LIMITS) \
+      && !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS)
+#     define BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+#     define BOOST_NO_MS_INT64_NUMERIC_LIMITS
+#     define BOOST_NO_LONG_LONG_NUMERIC_LIMITS
+#  endif
+
+//
+// if there is no long long then there is no specialisation
+// for numeric_limits<long long> either:
+//
+#if !defined(BOOST_HAS_LONG_LONG) && !defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS)
+#  define BOOST_NO_LONG_LONG_NUMERIC_LIMITS
+#endif
+
+//
+// if there is no __int64 then there is no specialisation
+// for numeric_limits<__int64> either:
+//
+#if !defined(BOOST_HAS_MS_INT64) && !defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS)
+#  define BOOST_NO_MS_INT64_NUMERIC_LIMITS
+#endif
+
+//
+// if member templates are supported then so is the
+// VC6 subset of member templates:
+//
+#  if !defined(BOOST_NO_MEMBER_TEMPLATES) \
+       && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+#     define BOOST_MSVC6_MEMBER_TEMPLATES
+#  endif
+
+//
+// Without partial specialization, can't test for partial specialisation bugs:
+//
+#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+      && !defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG)
+#     define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG
+#  endif
+
+//
+// Without partial specialization, we can't have array-type partial specialisations:
+//
+#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+      && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+#     define BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS
+#  endif
+
+//
+// Without partial specialization, std::iterator_traits can't work:
+//
+#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+      && !defined(BOOST_NO_STD_ITERATOR_TRAITS)
+#     define BOOST_NO_STD_ITERATOR_TRAITS
+#  endif
+
+//
+// Without partial specialization, partial
+// specialization with default args won't work either:
+//
+#  if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+      && !defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
+#     define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS
+#  endif
+
+//
+// Without member template support, we can't have template constructors
+// in the standard library either:
+//
+#  if defined(BOOST_NO_MEMBER_TEMPLATES) \
+      && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \
+      && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
+#     define BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+#  endif
+
+//
+// Without member template support, we can't have a conforming
+// std::allocator template either:
+//
+#  if defined(BOOST_NO_MEMBER_TEMPLATES) \
+      && !defined(BOOST_MSVC6_MEMBER_TEMPLATES) \
+      && !defined(BOOST_NO_STD_ALLOCATOR)
+#     define BOOST_NO_STD_ALLOCATOR
+#  endif
+
+//
+// without ADL support then using declarations will break ADL as well:
+//
+#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) && !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
+#  define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
+#endif
+
+//
+// Without typeid support we have no dynamic RTTI either:
+//
+#if defined(BOOST_NO_TYPEID) && !defined(BOOST_NO_RTTI)
+#  define BOOST_NO_RTTI
+#endif
+
+//
+// If we have a standard allocator, then we have a partial one as well:
+//
+#if !defined(BOOST_NO_STD_ALLOCATOR)
+#  define BOOST_HAS_PARTIAL_STD_ALLOCATOR
+#endif
+
+//
+// We can't have a working std::use_facet if there is no std::locale:
+//
+#  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_USE_FACET)
+#     define BOOST_NO_STD_USE_FACET
+#  endif
+
+//
+// We can't have a std::messages facet if there is no std::locale:
+//
+#  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_MESSAGES)
+#     define BOOST_NO_STD_MESSAGES
+#  endif
+
+//
+// We can't have a working std::wstreambuf if there is no std::locale:
+//
+#  if defined(BOOST_NO_STD_LOCALE) && !defined(BOOST_NO_STD_WSTREAMBUF)
+#     define BOOST_NO_STD_WSTREAMBUF
+#  endif
+
+//
+// We can't have a <cwctype> if there is no <cwchar>:
+//
+#  if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_CWCTYPE)
+#     define BOOST_NO_CWCTYPE
+#  endif
+
+//
+// We can't have a swprintf if there is no <cwchar>:
+//
+#  if defined(BOOST_NO_CWCHAR) && !defined(BOOST_NO_SWPRINTF)
+#     define BOOST_NO_SWPRINTF
+#  endif
+
+//
+// If Win32 support is turned off, then we must turn off
+// threading support also, unless there is some other
+// thread API enabled:
+//
+#if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \
+   && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS)
+#  define BOOST_DISABLE_THREADS
+#endif
+
+//
+// Turn on threading support if the compiler thinks that it's in
+// multithreaded mode.  We put this here because there are only a
+// limited number of macros that identify this (if there's any missing
+// from here then add to the appropriate compiler section):
+//
+#if (defined(__MT__) || defined(_MT) || defined(_REENTRANT) \
+    || defined(_PTHREADS) || defined(__APPLE__) || defined(__DragonFly__)) \
+    && !defined(BOOST_HAS_THREADS)
+#  define BOOST_HAS_THREADS
+#endif
+
+//
+// Turn threading support off if BOOST_DISABLE_THREADS is defined:
+//
+#if defined(BOOST_DISABLE_THREADS) && defined(BOOST_HAS_THREADS)
+#  undef BOOST_HAS_THREADS
+#endif
+
+//
+// Turn threading support off if we don't recognise the threading API:
+//
+#if defined(BOOST_HAS_THREADS) && !defined(BOOST_HAS_PTHREADS)\
+      && !defined(BOOST_HAS_WINTHREADS) && !defined(BOOST_HAS_BETHREADS)\
+      && !defined(BOOST_HAS_MPTASKS)
+#  undef BOOST_HAS_THREADS
+#endif
+
+//
+// Turn threading detail macros off if we don't (want to) use threading
+//
+#ifndef BOOST_HAS_THREADS
+#  undef BOOST_HAS_PTHREADS
+#  undef BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
+#  undef BOOST_HAS_PTHREAD_YIELD
+#  undef BOOST_HAS_PTHREAD_DELAY_NP
+#  undef BOOST_HAS_WINTHREADS
+#  undef BOOST_HAS_BETHREADS
+#  undef BOOST_HAS_MPTASKS
+#endif
+
+//
+// If the compiler claims to be C99 conformant, then it had better
+// have a <stdint.h>:
+//
+#  if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)
+#     define BOOST_HAS_STDINT_H
+#     ifndef BOOST_HAS_LOG1P
+#        define BOOST_HAS_LOG1P
+#     endif
+#     ifndef BOOST_HAS_EXPM1
+#        define BOOST_HAS_EXPM1
+#     endif
+#  endif
+
+//
+// Define BOOST_NO_SLIST and BOOST_NO_HASH if required.
+// Note that this is for backwards compatibility only.
+//
+#  if !defined(BOOST_HAS_SLIST) && !defined(BOOST_NO_SLIST)
+#     define BOOST_NO_SLIST
+#  endif
+
+#  if !defined(BOOST_HAS_HASH) && !defined(BOOST_NO_HASH)
+#     define BOOST_NO_HASH
+#  endif
+
+//
+// Set BOOST_SLIST_HEADER if not set already:
+//
+#if defined(BOOST_HAS_SLIST) && !defined(BOOST_SLIST_HEADER)
+#  define BOOST_SLIST_HEADER <slist>
+#endif
+
+//
+// Set BOOST_HASH_SET_HEADER if not set already:
+//
+#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_SET_HEADER)
+#  define BOOST_HASH_SET_HEADER <hash_set>
+#endif
+
+//
+// Set BOOST_HASH_MAP_HEADER if not set already:
+//
+#if defined(BOOST_HAS_HASH) && !defined(BOOST_HASH_MAP_HEADER)
+#  define BOOST_HASH_MAP_HEADER <hash_map>
+#endif
+
+//  BOOST_HAS_ABI_HEADERS
+//  This macro gets set if we have headers that fix the ABI,
+//  and prevent ODR violations when linking to external libraries:
+#if defined(BOOST_ABI_PREFIX) && defined(BOOST_ABI_SUFFIX) && !defined(BOOST_HAS_ABI_HEADERS)
+#  define BOOST_HAS_ABI_HEADERS
+#endif
+
+#if defined(BOOST_HAS_ABI_HEADERS) && defined(BOOST_DISABLE_ABI_HEADERS)
+#  undef BOOST_HAS_ABI_HEADERS
+#endif
+
+//  BOOST_NO_STDC_NAMESPACE workaround  --------------------------------------//
+//  Because std::size_t usage is so common, even in boost headers which do not
+//  otherwise use the C library, the <cstddef> workaround is included here so
+//  that ugly workaround code need not appear in many other boost headers.
+//  NOTE WELL: This is a workaround for non-conforming compilers; <cstddef>
+//  must still be #included in the usual places so that <cstddef> inclusion
+//  works as expected with standard conforming compilers.  The resulting
+//  double inclusion of <cstddef> is harmless.
+
+# if defined(BOOST_NO_STDC_NAMESPACE) && defined(__cplusplus)
+#   include <cstddef>
+    namespace std { using ::ptrdiff_t; using ::size_t; }
+# endif
+
+//  Workaround for the unfortunate min/max macros defined by some platform headers
+
+#define BOOST_PREVENT_MACRO_SUBSTITUTION
+
+#ifndef BOOST_USING_STD_MIN
+#  define BOOST_USING_STD_MIN() using std::min
+#endif
+
+#ifndef BOOST_USING_STD_MAX
+#  define BOOST_USING_STD_MAX() using std::max
+#endif
+
+//  BOOST_NO_STD_MIN_MAX workaround  -----------------------------------------//
+
+#  if defined(BOOST_NO_STD_MIN_MAX) && defined(__cplusplus)
+
+namespace std {
+  template <class _Tp>
+  inline const _Tp& min BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {
+    return __b < __a ? __b : __a;
+  }
+  template <class _Tp>
+  inline const _Tp& max BOOST_PREVENT_MACRO_SUBSTITUTION (const _Tp& __a, const _Tp& __b) {
+    return  __a < __b ? __b : __a;
+  }
+}
+
+#  endif
+
+// BOOST_STATIC_CONSTANT workaround --------------------------------------- //
+// On compilers which don't allow in-class initialization of static integral
+// constant members, we must use enums as a workaround if we want the constants
+// to be available at compile-time. This macro gives us a convenient way to
+// declare such constants.
+
+#  ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+#       define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment }
+#  else
+#     define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment
+#  endif
+
+// BOOST_USE_FACET / HAS_FACET workaround ----------------------------------//
+// When the standard library does not have a conforming std::use_facet there
+// are various workarounds available, but they differ from library to library.
+// The same problem occurs with has_facet.
+// These macros provide a consistent way to access a locale's facets.
+// Usage:
+//    replace
+//       std::use_facet<Type>(loc);
+//    with
+//       BOOST_USE_FACET(Type, loc);
+//    Note do not add a std:: prefix to the front of BOOST_USE_FACET!
+//  Use for BOOST_HAS_FACET is analogous.
+
+#if defined(BOOST_NO_STD_USE_FACET)
+#  ifdef BOOST_HAS_TWO_ARG_USE_FACET
+#     define BOOST_USE_FACET(Type, loc) std::use_facet(loc, static_cast<Type*>(0))
+#     define BOOST_HAS_FACET(Type, loc) std::has_facet(loc, static_cast<Type*>(0))
+#  elif defined(BOOST_HAS_MACRO_USE_FACET)
+#     define BOOST_USE_FACET(Type, loc) std::_USE(loc, Type)
+#     define BOOST_HAS_FACET(Type, loc) std::_HAS(loc, Type)
+#  elif defined(BOOST_HAS_STLP_USE_FACET)
+#     define BOOST_USE_FACET(Type, loc) (*std::_Use_facet<Type >(loc))
+#     define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)
+#  endif
+#else
+#  define BOOST_USE_FACET(Type, loc) std::use_facet< Type >(loc)
+#  define BOOST_HAS_FACET(Type, loc) std::has_facet< Type >(loc)
+#endif
+
+// BOOST_NESTED_TEMPLATE workaround ------------------------------------------//
+// Member templates are supported by some compilers even though they can't use
+// the A::template member<U> syntax, as a workaround replace:
+//
+// typedef typename A::template rebind<U> binder;
+//
+// with:
+//
+// typedef typename A::BOOST_NESTED_TEMPLATE rebind<U> binder;
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_KEYWORD
+#  define BOOST_NESTED_TEMPLATE template
+#else
+#  define BOOST_NESTED_TEMPLATE
+#endif
+
+// BOOST_UNREACHABLE_RETURN(x) workaround -------------------------------------//
+// Normally evaluates to nothing, unless BOOST_NO_UNREACHABLE_RETURN_DETECTION
+// is defined, in which case it evaluates to return x; Use when you have a return
+// statement that can never be reached.
+
+#ifndef BOOST_UNREACHABLE_RETURN
+#  ifdef BOOST_NO_UNREACHABLE_RETURN_DETECTION
+#     define BOOST_UNREACHABLE_RETURN(x) return x;
+#  else
+#     define BOOST_UNREACHABLE_RETURN(x)
+#  endif
+#endif
+
+// BOOST_DEDUCED_TYPENAME workaround ------------------------------------------//
+//
+// Some compilers don't support the use of `typename' for dependent
+// types in deduced contexts, e.g.
+//
+//     template <class T> void f(T, typename T::type);
+//                                  ^^^^^^^^
+// Replace these declarations with:
+//
+//     template <class T> void f(T, BOOST_DEDUCED_TYPENAME T::type);
+
+#ifndef BOOST_NO_DEDUCED_TYPENAME
+#  define BOOST_DEDUCED_TYPENAME typename
+#else
+#  define BOOST_DEDUCED_TYPENAME
+#endif
+
+#ifndef BOOST_NO_TYPENAME_WITH_CTOR
+#  define BOOST_CTOR_TYPENAME typename
+#else
+#  define BOOST_CTOR_TYPENAME
+#endif
+
+// long long workaround ------------------------------------------//
+// On gcc (and maybe other compilers?) long long is alway supported
+// but it's use may generate either warnings (with -ansi), or errors
+// (with -pedantic -ansi) unless it's use is prefixed by __extension__
+//
+#if defined(BOOST_HAS_LONG_LONG) && defined(__cplusplus)
+namespace pdalboost{
+#  ifdef __GNUC__
+   __extension__ typedef long long long_long_type;
+   __extension__ typedef unsigned long long ulong_long_type;
+#  else
+   typedef long long long_long_type;
+   typedef unsigned long long ulong_long_type;
+#  endif
+}
+#endif
+// same again for __int128:
+#if defined(BOOST_HAS_INT128) && defined(__cplusplus)
+namespace pdalboost{
+#  ifdef __GNUC__
+   __extension__ typedef __int128 int128_type;
+   __extension__ typedef unsigned __int128 uint128_type;
+#  else
+   typedef __int128 int128_type;
+   typedef unsigned __int128 uint128_type;
+#  endif
+}
+#endif
+// same again for __float128:
+#if defined(BOOST_HAS_FLOAT128) && defined(__cplusplus)
+namespace pdalboost {
+#  ifdef __GNUC__
+   __extension__ typedef __float128 float128_type;
+#  else
+   typedef __float128 float128_type;
+#  endif
+}
+#endif
+
+// BOOST_[APPEND_]EXPLICIT_TEMPLATE_[NON_]TYPE macros --------------------------//
+
+// These macros are obsolete. Port away and remove.
+
+#  define BOOST_EXPLICIT_TEMPLATE_TYPE(t)
+#  define BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
+#  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
+#  define BOOST_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
+
+#  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t)
+#  define BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
+#  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
+#  define BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
+
+// When BOOST_NO_STD_TYPEINFO is defined, we can just import
+// the global definition into std namespace:
+#if defined(BOOST_NO_STD_TYPEINFO) && defined(__cplusplus)
+#include <typeinfo>
+namespace std{ using ::type_info; }
+#endif
+
+// ---------------------------------------------------------------------------//
+
+//
+// Helper macro BOOST_STRINGIZE:
+// Converts the parameter X to a string after macro replacement
+// on X has been performed.
+//
+#define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X)
+#define BOOST_DO_STRINGIZE(X) #X
+
+//
+// Helper macro BOOST_JOIN:
+// The following piece of macro magic joins the two
+// arguments together, even when one of the arguments is
+// itself a macro (see 16.3.1 in C++ standard).  The key
+// is that macro expansion of macro arguments does not
+// occur in BOOST_DO_JOIN2 but does in BOOST_DO_JOIN.
+//
+#define BOOST_JOIN( X, Y ) BOOST_DO_JOIN( X, Y )
+#define BOOST_DO_JOIN( X, Y ) BOOST_DO_JOIN2(X,Y)
+#define BOOST_DO_JOIN2( X, Y ) X##Y
+
+//
+// Set some default values for compiler/library/platform names.
+// These are for debugging config setup only:
+//
+#  ifndef BOOST_COMPILER
+#     define BOOST_COMPILER "Unknown ISO C++ Compiler"
+#  endif
+#  ifndef BOOST_STDLIB
+#     define BOOST_STDLIB "Unknown ISO standard library"
+#  endif
+#  ifndef BOOST_PLATFORM
+#     if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) \
+         || defined(_POSIX_SOURCE)
+#        define BOOST_PLATFORM "Generic Unix"
+#     else
+#        define BOOST_PLATFORM "Unknown"
+#     endif
+#  endif
+
+//
+// Set some default values GPU support
+//
+#  ifndef BOOST_GPU_ENABLED
+#  define BOOST_GPU_ENABLED
+#  endif
+
+// BOOST_FORCEINLINE ---------------------------------------------//
+// Macro to use in place of 'inline' to force a function to be inline
+#if !defined(BOOST_FORCEINLINE)
+#  if defined(_MSC_VER)
+#    define BOOST_FORCEINLINE __forceinline
+#  elif defined(__GNUC__) && __GNUC__ > 3
+     // Clang also defines __GNUC__ (as 4)
+#    define BOOST_FORCEINLINE inline __attribute__ ((__always_inline__))
+#  else
+#    define BOOST_FORCEINLINE inline
+#  endif
+#endif
+
+// BOOST_NOINLINE ---------------------------------------------//
+// Macro to use in place of 'inline' to prevent a function to be inlined
+#if !defined(BOOST_NOINLINE)
+#  if defined(_MSC_VER)
+#    define BOOST_NOINLINE __declspec(noinline)
+#  elif defined(__GNUC__) && __GNUC__ > 3
+     // Clang also defines __GNUC__ (as 4)
+#    if defined(__CUDACC__)
+       // nvcc doesn't always parse __noinline__, 
+       // see: https://svn.boost.org/trac/boost/ticket/9392
+#      define BOOST_NOINLINE __attribute__ ((noinline))
+#    else
+#      define BOOST_NOINLINE __attribute__ ((__noinline__))
+#    endif
+#  else
+#    define BOOST_NOINLINE
+#  endif
+#endif
+
+// BOOST_NORETURN ---------------------------------------------//
+// Macro to use before a function declaration/definition to designate
+// the function as not returning normally (i.e. with a return statement
+// or by leaving the function scope, if the function return type is void).
+#if !defined(BOOST_NORETURN)
+#  if defined(_MSC_VER)
+#    define BOOST_NORETURN __declspec(noreturn)
+#  elif defined(__GNUC__)
+#    define BOOST_NORETURN __attribute__ ((__noreturn__))
+#  else
+#    define BOOST_NO_NORETURN
+#    define BOOST_NORETURN
+#  endif
+#endif
+
+// Branch prediction hints
+// These macros are intended to wrap conditional expressions that yield true or false
+//
+//  if (BOOST_LIKELY(var == 10))
+//  {
+//     // the most probable code here
+//  }
+//
+#if !defined(BOOST_LIKELY)
+#  define BOOST_LIKELY(x) x
+#endif
+#if !defined(BOOST_UNLIKELY)
+#  define BOOST_UNLIKELY(x) x
+#endif
+
+// Type and data alignment specification
+//
+#if !defined(BOOST_NO_CXX11_ALIGNAS)
+#  define BOOST_ALIGNMENT(x) alignas(x)
+#elif defined(_MSC_VER)
+#  define BOOST_ALIGNMENT(x) __declspec(align(x))
+#elif defined(__GNUC__)
+#  define BOOST_ALIGNMENT(x) __attribute__ ((__aligned__(x)))
+#else
+#  define BOOST_NO_ALIGNMENT
+#  define BOOST_ALIGNMENT(x)
+#endif
+
+// Lack of non-public defaulted functions is implied by the lack of any defaulted functions
+#if !defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS) && defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
+#  define BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS
+#endif
+
+// Defaulted and deleted function declaration helpers
+// These macros are intended to be inside a class definition.
+// BOOST_DEFAULTED_FUNCTION accepts the function declaration and its
+// body, which will be used if the compiler doesn't support defaulted functions.
+// BOOST_DELETED_FUNCTION only accepts the function declaration. It
+// will expand to a private function declaration, if the compiler doesn't support
+// deleted functions. Because of this it is recommended to use BOOST_DELETED_FUNCTION
+// in the end of the class definition.
+//
+//  class my_class
+//  {
+//  public:
+//      // Default-constructible
+//      BOOST_DEFAULTED_FUNCTION(my_class(), {})
+//      // Copying prohibited
+//      BOOST_DELETED_FUNCTION(my_class(my_class const&))
+//      BOOST_DELETED_FUNCTION(my_class& operator= (my_class const&))
+//  };
+//
+#if !(defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS))
+#   define BOOST_DEFAULTED_FUNCTION(fun, body) fun = default;
+#else
+#   define BOOST_DEFAULTED_FUNCTION(fun, body) fun body
+#endif
+
+#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
+#   define BOOST_DELETED_FUNCTION(fun) fun = delete;
+#else
+#   define BOOST_DELETED_FUNCTION(fun) private: fun;
+#endif
+
+//
+// Set BOOST_NO_DECLTYPE_N3276 when BOOST_NO_DECLTYPE is defined
+//
+#if defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_CXX11_DECLTYPE_N3276)
+#define BOOST_NO_CXX11_DECLTYPE_N3276 BOOST_NO_CXX11_DECLTYPE
+#endif
+
+//  -------------------- Deprecated macros for 1.50 ---------------------------
+//  These will go away in a future release
+
+//  Use BOOST_NO_CXX11_HDR_UNORDERED_SET or BOOST_NO_CXX11_HDR_UNORDERED_MAP
+//           instead of BOOST_NO_STD_UNORDERED
+#if defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) || defined (BOOST_NO_CXX11_HDR_UNORDERED_SET)
+# ifndef BOOST_NO_CXX11_STD_UNORDERED
+#  define BOOST_NO_CXX11_STD_UNORDERED
+# endif
+#endif
+
+//  Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST instead of BOOST_NO_INITIALIZER_LISTS
+#if defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_INITIALIZER_LISTS)
+#  define BOOST_NO_INITIALIZER_LISTS
+#endif
+
+//  Use BOOST_NO_CXX11_HDR_ARRAY instead of BOOST_NO_0X_HDR_ARRAY
+#if defined(BOOST_NO_CXX11_HDR_ARRAY) && !defined(BOOST_NO_0X_HDR_ARRAY)
+#  define BOOST_NO_0X_HDR_ARRAY
+#endif
+//  Use BOOST_NO_CXX11_HDR_CHRONO instead of BOOST_NO_0X_HDR_CHRONO
+#if defined(BOOST_NO_CXX11_HDR_CHRONO) && !defined(BOOST_NO_0X_HDR_CHRONO)
+#  define BOOST_NO_0X_HDR_CHRONO
+#endif
+//  Use BOOST_NO_CXX11_HDR_CODECVT instead of BOOST_NO_0X_HDR_CODECVT
+#if defined(BOOST_NO_CXX11_HDR_CODECVT) && !defined(BOOST_NO_0X_HDR_CODECVT)
+#  define BOOST_NO_0X_HDR_CODECVT
+#endif
+//  Use BOOST_NO_CXX11_HDR_CONDITION_VARIABLE instead of BOOST_NO_0X_HDR_CONDITION_VARIABLE
+#if defined(BOOST_NO_CXX11_HDR_CONDITION_VARIABLE) && !defined(BOOST_NO_0X_HDR_CONDITION_VARIABLE)
+#  define BOOST_NO_0X_HDR_CONDITION_VARIABLE
+#endif
+//  Use BOOST_NO_CXX11_HDR_FORWARD_LIST instead of BOOST_NO_0X_HDR_FORWARD_LIST
+#if defined(BOOST_NO_CXX11_HDR_FORWARD_LIST) && !defined(BOOST_NO_0X_HDR_FORWARD_LIST)
+#  define BOOST_NO_0X_HDR_FORWARD_LIST
+#endif
+//  Use BOOST_NO_CXX11_HDR_FUTURE instead of BOOST_NO_0X_HDR_FUTURE
+#if defined(BOOST_NO_CXX11_HDR_FUTURE) && !defined(BOOST_NO_0X_HDR_FUTURE)
+#  define BOOST_NO_0X_HDR_FUTURE
+#endif
+
+//  Use BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+//  instead of BOOST_NO_0X_HDR_INITIALIZER_LIST or BOOST_NO_INITIALIZER_LISTS
+#ifdef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
+# ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
+#  define BOOST_NO_0X_HDR_INITIALIZER_LIST
+# endif
+# ifndef BOOST_NO_INITIALIZER_LISTS
+#  define BOOST_NO_INITIALIZER_LISTS
+# endif
+#endif
+
+//  Use BOOST_NO_CXX11_HDR_MUTEX instead of BOOST_NO_0X_HDR_MUTEX
+#if defined(BOOST_NO_CXX11_HDR_MUTEX) && !defined(BOOST_NO_0X_HDR_MUTEX)
+#  define BOOST_NO_0X_HDR_MUTEX
+#endif
+//  Use BOOST_NO_CXX11_HDR_RANDOM instead of BOOST_NO_0X_HDR_RANDOM
+#if defined(BOOST_NO_CXX11_HDR_RANDOM) && !defined(BOOST_NO_0X_HDR_RANDOM)
+#  define BOOST_NO_0X_HDR_RANDOM
+#endif
+//  Use BOOST_NO_CXX11_HDR_RATIO instead of BOOST_NO_0X_HDR_RATIO
+#if defined(BOOST_NO_CXX11_HDR_RATIO) && !defined(BOOST_NO_0X_HDR_RATIO)
+#  define BOOST_NO_0X_HDR_RATIO
+#endif
+//  Use BOOST_NO_CXX11_HDR_REGEX instead of BOOST_NO_0X_HDR_REGEX
+#if defined(BOOST_NO_CXX11_HDR_REGEX) && !defined(BOOST_NO_0X_HDR_REGEX)
+#  define BOOST_NO_0X_HDR_REGEX
+#endif
+//  Use BOOST_NO_CXX11_HDR_SYSTEM_ERROR instead of BOOST_NO_0X_HDR_SYSTEM_ERROR
+#if defined(BOOST_NO_CXX11_HDR_SYSTEM_ERROR) && !defined(BOOST_NO_0X_HDR_SYSTEM_ERROR)
+#  define BOOST_NO_0X_HDR_SYSTEM_ERROR
+#endif
+//  Use BOOST_NO_CXX11_HDR_THREAD instead of BOOST_NO_0X_HDR_THREAD
+#if defined(BOOST_NO_CXX11_HDR_THREAD) && !defined(BOOST_NO_0X_HDR_THREAD)
+#  define BOOST_NO_0X_HDR_THREAD
+#endif
+//  Use BOOST_NO_CXX11_HDR_TUPLE instead of BOOST_NO_0X_HDR_TUPLE
+#if defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_0X_HDR_TUPLE)
+#  define BOOST_NO_0X_HDR_TUPLE
+#endif
+//  Use BOOST_NO_CXX11_HDR_TYPE_TRAITS instead of BOOST_NO_0X_HDR_TYPE_TRAITS
+#if defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) && !defined(BOOST_NO_0X_HDR_TYPE_TRAITS)
+#  define BOOST_NO_0X_HDR_TYPE_TRAITS
+#endif
+//  Use BOOST_NO_CXX11_HDR_TYPEINDEX instead of BOOST_NO_0X_HDR_TYPEINDEX
+#if defined(BOOST_NO_CXX11_HDR_TYPEINDEX) && !defined(BOOST_NO_0X_HDR_TYPEINDEX)
+#  define BOOST_NO_0X_HDR_TYPEINDEX
+#endif
+//  Use BOOST_NO_CXX11_HDR_UNORDERED_MAP instead of BOOST_NO_0X_HDR_UNORDERED_MAP
+#if defined(BOOST_NO_CXX11_HDR_UNORDERED_MAP) && !defined(BOOST_NO_0X_HDR_UNORDERED_MAP)
+#  define BOOST_NO_0X_HDR_UNORDERED_MAP
+#endif
+//  Use BOOST_NO_CXX11_HDR_UNORDERED_SET instead of BOOST_NO_0X_HDR_UNORDERED_SET
+#if defined(BOOST_NO_CXX11_HDR_UNORDERED_SET) && !defined(BOOST_NO_0X_HDR_UNORDERED_SET)
+#  define BOOST_NO_0X_HDR_UNORDERED_SET
+#endif
+
+//  ------------------ End of deprecated macros for 1.50 ---------------------------
+
+//  -------------------- Deprecated macros for 1.51 ---------------------------
+//  These will go away in a future release
+
+//  Use     BOOST_NO_CXX11_AUTO_DECLARATIONS instead of   BOOST_NO_AUTO_DECLARATIONS
+#if defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) && !defined(BOOST_NO_AUTO_DECLARATIONS)
+#  define BOOST_NO_AUTO_DECLARATIONS
+#endif
+//  Use     BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS instead of   BOOST_NO_AUTO_MULTIDECLARATIONS
+#if defined(BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS) && !defined(BOOST_NO_AUTO_MULTIDECLARATIONS)
+#  define BOOST_NO_AUTO_MULTIDECLARATIONS
+#endif
+//  Use     BOOST_NO_CXX11_CHAR16_T instead of   BOOST_NO_CHAR16_T
+#if defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CHAR16_T)
+#  define BOOST_NO_CHAR16_T
+#endif
+//  Use     BOOST_NO_CXX11_CHAR32_T instead of   BOOST_NO_CHAR32_T
+#if defined(BOOST_NO_CXX11_CHAR32_T) && !defined(BOOST_NO_CHAR32_T)
+#  define BOOST_NO_CHAR32_T
+#endif
+//  Use     BOOST_NO_CXX11_TEMPLATE_ALIASES instead of   BOOST_NO_TEMPLATE_ALIASES
+#if defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_TEMPLATE_ALIASES)
+#  define BOOST_NO_TEMPLATE_ALIASES
+#endif
+//  Use     BOOST_NO_CXX11_CONSTEXPR instead of   BOOST_NO_CONSTEXPR
+#if defined(BOOST_NO_CXX11_CONSTEXPR) && !defined(BOOST_NO_CONSTEXPR)
+#  define BOOST_NO_CONSTEXPR
+#endif
+//  Use     BOOST_NO_CXX11_DECLTYPE_N3276 instead of   BOOST_NO_DECLTYPE_N3276
+#if defined(BOOST_NO_CXX11_DECLTYPE_N3276) && !defined(BOOST_NO_DECLTYPE_N3276)
+#  define BOOST_NO_DECLTYPE_N3276
+#endif
+//  Use     BOOST_NO_CXX11_DECLTYPE instead of   BOOST_NO_DECLTYPE
+#if defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_DECLTYPE)
+#  define BOOST_NO_DECLTYPE
+#endif
+//  Use     BOOST_NO_CXX11_DEFAULTED_FUNCTIONS instead of   BOOST_NO_DEFAULTED_FUNCTIONS
+#if defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && !defined(BOOST_NO_DEFAULTED_FUNCTIONS)
+#  define BOOST_NO_DEFAULTED_FUNCTIONS
+#endif
+//  Use     BOOST_NO_CXX11_DELETED_FUNCTIONS instead of   BOOST_NO_DELETED_FUNCTIONS
+#if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_NO_DELETED_FUNCTIONS)
+#  define BOOST_NO_DELETED_FUNCTIONS
+#endif
+//  Use     BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS instead of   BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
+#if defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) && !defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS)
+#  define BOOST_NO_EXPLICIT_CONVERSION_OPERATORS
+#endif
+//  Use     BOOST_NO_CXX11_EXTERN_TEMPLATE instead of   BOOST_NO_EXTERN_TEMPLATE
+#if defined(BOOST_NO_CXX11_EXTERN_TEMPLATE) && !defined(BOOST_NO_EXTERN_TEMPLATE)
+#  define BOOST_NO_EXTERN_TEMPLATE
+#endif
+//  Use     BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS instead of   BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#if defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) && !defined(BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS)
+#  define BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS
+#endif
+//  Use     BOOST_NO_CXX11_LAMBDAS instead of   BOOST_NO_LAMBDAS
+#if defined(BOOST_NO_CXX11_LAMBDAS) && !defined(BOOST_NO_LAMBDAS)
+#  define BOOST_NO_LAMBDAS
+#endif
+//  Use     BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS instead of   BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#if defined(BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS) && !defined(BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS)
+#  define BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS
+#endif
+//  Use     BOOST_NO_CXX11_NOEXCEPT instead of   BOOST_NO_NOEXCEPT
+#if defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_NOEXCEPT)
+#  define BOOST_NO_NOEXCEPT
+#endif
+//  Use     BOOST_NO_CXX11_NULLPTR instead of   BOOST_NO_NULLPTR
+#if defined(BOOST_NO_CXX11_NULLPTR) && !defined(BOOST_NO_NULLPTR)
+#  define BOOST_NO_NULLPTR
+#endif
+//  Use     BOOST_NO_CXX11_RAW_LITERALS instead of   BOOST_NO_RAW_LITERALS
+#if defined(BOOST_NO_CXX11_RAW_LITERALS) && !defined(BOOST_NO_RAW_LITERALS)
+#  define BOOST_NO_RAW_LITERALS
+#endif
+//  Use     BOOST_NO_CXX11_RVALUE_REFERENCES instead of   BOOST_NO_RVALUE_REFERENCES
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_RVALUE_REFERENCES)
+#  define BOOST_NO_RVALUE_REFERENCES
+#endif
+//  Use     BOOST_NO_CXX11_SCOPED_ENUMS instead of   BOOST_NO_SCOPED_ENUMS
+#if defined(BOOST_NO_CXX11_SCOPED_ENUMS) && !defined(BOOST_NO_SCOPED_ENUMS)
+#  define BOOST_NO_SCOPED_ENUMS
+#endif
+//  Use     BOOST_NO_CXX11_STATIC_ASSERT instead of   BOOST_NO_STATIC_ASSERT
+#if defined(BOOST_NO_CXX11_STATIC_ASSERT) && !defined(BOOST_NO_STATIC_ASSERT)
+#  define BOOST_NO_STATIC_ASSERT
+#endif
+//  Use     BOOST_NO_CXX11_STD_UNORDERED instead of   BOOST_NO_STD_UNORDERED
+#if defined(BOOST_NO_CXX11_STD_UNORDERED) && !defined(BOOST_NO_STD_UNORDERED)
+#  define BOOST_NO_STD_UNORDERED
+#endif
+//  Use     BOOST_NO_CXX11_UNICODE_LITERALS instead of   BOOST_NO_UNICODE_LITERALS
+#if defined(BOOST_NO_CXX11_UNICODE_LITERALS) && !defined(BOOST_NO_UNICODE_LITERALS)
+#  define BOOST_NO_UNICODE_LITERALS
+#endif
+//  Use     BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX instead of   BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX
+#if defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) && !defined(BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX)
+#  define BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX
+#endif
+//  Use     BOOST_NO_CXX11_VARIADIC_TEMPLATES instead of   BOOST_NO_VARIADIC_TEMPLATES
+#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_VARIADIC_TEMPLATES)
+#  define BOOST_NO_VARIADIC_TEMPLATES
+#endif
+//  Use     BOOST_NO_CXX11_VARIADIC_MACROS instead of   BOOST_NO_VARIADIC_MACROS
+#if defined(BOOST_NO_CXX11_VARIADIC_MACROS) && !defined(BOOST_NO_VARIADIC_MACROS)
+#  define BOOST_NO_VARIADIC_MACROS
+#endif
+//  Use     BOOST_NO_CXX11_NUMERIC_LIMITS instead of   BOOST_NO_NUMERIC_LIMITS_LOWEST
+#if defined(BOOST_NO_CXX11_NUMERIC_LIMITS) && !defined(BOOST_NO_NUMERIC_LIMITS_LOWEST)
+#  define BOOST_NO_NUMERIC_LIMITS_LOWEST
+#endif
+//  ------------------ End of deprecated macros for 1.51 ---------------------------
+
+
+
+//
+// Helper macros BOOST_NOEXCEPT, BOOST_NOEXCEPT_IF, BOOST_NOEXCEPT_EXPR
+// These aid the transition to C++11 while still supporting C++03 compilers
+//
+#ifdef BOOST_NO_CXX11_NOEXCEPT
+#  define BOOST_NOEXCEPT
+#  define BOOST_NOEXCEPT_OR_NOTHROW throw()
+#  define BOOST_NOEXCEPT_IF(Predicate)
+#  define BOOST_NOEXCEPT_EXPR(Expression) false
+#else
+#  define BOOST_NOEXCEPT noexcept
+#  define BOOST_NOEXCEPT_OR_NOTHROW noexcept
+#  define BOOST_NOEXCEPT_IF(Predicate) noexcept((Predicate))
+#  define BOOST_NOEXCEPT_EXPR(Expression) noexcept((Expression))
+#endif
+//
+// Helper macro BOOST_FALLTHROUGH
+// Fallback definition of BOOST_FALLTHROUGH macro used to mark intended
+// fall-through between case labels in a switch statement. We use a definition
+// that requires a semicolon after it to avoid at least one type of misuse even
+// on unsupported compilers.
+//
+#ifndef BOOST_FALLTHROUGH
+#  define BOOST_FALLTHROUGH ((void)0)
+#endif
+
+//
+// constexpr workarounds
+//
+#if defined(BOOST_NO_CXX11_CONSTEXPR)
+#define BOOST_CONSTEXPR
+#define BOOST_CONSTEXPR_OR_CONST const
+#else
+#define BOOST_CONSTEXPR constexpr
+#define BOOST_CONSTEXPR_OR_CONST constexpr
+#endif
+#if defined(BOOST_NO_CXX14_CONSTEXPR)
+#define BOOST_CXX14_CONSTEXPR
+#else
+#define BOOST_CXX14_CONSTEXPR constexpr
+#endif
+
+//
+// Unused variable/typedef workarounds:
+//
+#ifndef BOOST_ATTRIBUTE_UNUSED
+#  define BOOST_ATTRIBUTE_UNUSED
+#endif
+
+#define BOOST_STATIC_CONSTEXPR  static BOOST_CONSTEXPR_OR_CONST
+
+//
+// Set BOOST_HAS_STATIC_ASSERT when BOOST_NO_CXX11_STATIC_ASSERT is not defined
+//
+#if !defined(BOOST_NO_CXX11_STATIC_ASSERT) && !defined(BOOST_HAS_STATIC_ASSERT)
+#  define BOOST_HAS_STATIC_ASSERT
+#endif
+
+//
+// Set BOOST_HAS_RVALUE_REFS when BOOST_NO_CXX11_RVALUE_REFERENCES is not defined
+//
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_HAS_RVALUE_REFS)
+#define BOOST_HAS_RVALUE_REFS
+#endif
+
+//
+// Set BOOST_HAS_VARIADIC_TMPL when BOOST_NO_CXX11_VARIADIC_TEMPLATES is not defined
+//
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_HAS_VARIADIC_TMPL)
+#define BOOST_HAS_VARIADIC_TMPL
+#endif
+//
+// Set BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS when
+// BOOST_NO_CXX11_VARIADIC_TEMPLATES is set:
+//
+#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS)
+#  define BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS
+#endif
+
+//
+// Finish off with checks for macros that are depricated / no longer supported,
+// if any of these are set then it's very likely that much of Boost will no
+// longer work.  So stop with a #error for now, but give the user a chance
+// to continue at their own risk if they really want to:
+//
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_CONFIG_ALLOW_DEPRECATED)
+#  error "You are using a compiler which lacks features which are now a minimum requirement in order to use Boost, define BOOST_CONFIG_ALLOW_DEPRECATED if you want to continue at your own risk!!!"
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/config/user.hpp b/vendor/pdalboost/boost/config/user.hpp
new file mode 100644
index 0000000..28e7476
--- /dev/null
+++ b/vendor/pdalboost/boost/config/user.hpp
@@ -0,0 +1,133 @@
+//  boost/config/user.hpp  ---------------------------------------------------//
+
+//  (C) Copyright John Maddock 2001. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  Do not check in modified versions of this file,
+//  This file may be customized by the end user, but not by boost.
+
+//
+//  Use this file to define a site and compiler specific
+//  configuration policy:
+//
+
+// define this to locate a compiler config file:
+// #define BOOST_COMPILER_CONFIG <myheader>
+
+// define this to locate a stdlib config file:
+// #define BOOST_STDLIB_CONFIG   <myheader>
+
+// define this to locate a platform config file:
+// #define BOOST_PLATFORM_CONFIG <myheader>
+
+// define this to disable compiler config,
+// use if your compiler config has nothing to set:
+// #define BOOST_NO_COMPILER_CONFIG
+
+// define this to disable stdlib config,
+// use if your stdlib config has nothing to set:
+// #define BOOST_NO_STDLIB_CONFIG
+
+// define this to disable platform config,
+// use if your platform config has nothing to set:
+// #define BOOST_NO_PLATFORM_CONFIG
+
+// define this to disable all config options,
+// excluding the user config.  Use if your
+// setup is fully ISO compliant, and has no
+// useful extensions, or for autoconf generated
+// setups:
+// #define BOOST_NO_CONFIG
+
+// define this to make the config "optimistic"
+// about unknown compiler versions.  Normally
+// unknown compiler versions are assumed to have
+// all the defects of the last known version, however
+// setting this flag, causes the config to assume
+// that unknown compiler versions are fully conformant
+// with the standard:
+// #define BOOST_STRICT_CONFIG
+
+// define this to cause the config to halt compilation
+// with an #error if it encounters anything unknown --
+// either an unknown compiler version or an unknown
+// compiler/platform/library:
+// #define BOOST_ASSERT_CONFIG
+
+
+// define if you want to disable threading support, even
+// when available:
+// #define BOOST_DISABLE_THREADS
+
+// define when you want to disable Win32 specific features
+// even when available:
+// #define BOOST_DISABLE_WIN32
+
+// BOOST_DISABLE_ABI_HEADERS: Stops boost headers from including any 
+// prefix/suffix headers that normally control things like struct 
+// packing and alignment. 
+// #define BOOST_DISABLE_ABI_HEADERS
+
+// BOOST_ABI_PREFIX: A prefix header to include in place of whatever
+// boost.config would normally select, any replacement should set up 
+// struct packing and alignment options as required. 
+// #define BOOST_ABI_PREFIX my-header-name
+
+// BOOST_ABI_SUFFIX: A suffix header to include in place of whatever 
+// boost.config would normally select, any replacement should undo 
+// the effects of the prefix header. 
+// #define BOOST_ABI_SUFFIX my-header-name
+
+// BOOST_ALL_DYN_LINK: Forces all libraries that have separate source, 
+// to be linked as dll's rather than static libraries on Microsoft Windows 
+// (this macro is used to turn on __declspec(dllimport) modifiers, so that 
+// the compiler knows which symbols to look for in a dll rather than in a 
+// static library).  Note that there may be some libraries that can only 
+// be linked in one way (statically or dynamically), in these cases this 
+// macro has no effect.
+// #define BOOST_ALL_DYN_LINK
+ 
+// BOOST_WHATEVER_DYN_LINK: Forces library "whatever" to be linked as a dll 
+// rather than a static library on Microsoft Windows: replace the WHATEVER 
+// part of the macro name with the name of the library that you want to 
+// dynamically link to, for example use BOOST_DATE_TIME_DYN_LINK or 
+// BOOST_REGEX_DYN_LINK etc (this macro is used to turn on __declspec(dllimport) 
+// modifiers, so that the compiler knows which symbols to look for in a dll 
+// rather than in a static library).  
+// Note that there may be some libraries that can only 
+// be linked in one way (statically or dynamically), 
+// in these cases this macro is unsupported.
+// #define BOOST_WHATEVER_DYN_LINK
+ 
+// BOOST_ALL_NO_LIB: Tells the config system not to automatically select 
+// which libraries to link against.  
+// Normally if a compiler supports #pragma lib, then the correct library 
+// build variant will be automatically selected and linked against, 
+// simply by the act of including one of that library's headers.  
+// This macro turns that feature off.
+// #define BOOST_ALL_NO_LIB
+ 
+// BOOST_WHATEVER_NO_LIB: Tells the config system not to automatically 
+// select which library to link against for library "whatever", 
+// replace WHATEVER in the macro name with the name of the library; 
+// for example BOOST_DATE_TIME_NO_LIB or BOOST_REGEX_NO_LIB.  
+// Normally if a compiler supports #pragma lib, then the correct library 
+// build variant will be automatically selected and linked against, simply 
+// by the act of including one of that library's headers.  This macro turns 
+// that feature off.
+// #define BOOST_WHATEVER_NO_LIB
+ 
+// BOOST_LIB_BUILDID: Set to the same value as the value passed to Boost.Build's
+// --buildid command line option.  For example if you built using:
+//
+// bjam address-model=64 --buildid=amd64
+//
+// then compile your code with:
+//
+// -DBOOST_LIB_BUILDID = amd64
+//
+// to ensure the correct libraries are selected at link time.
+// #define BOOST_LIB_BUILDID amd64
+
diff --git a/vendor/pdalboost/boost/config/warning_disable.hpp b/vendor/pdalboost/boost/config/warning_disable.hpp
new file mode 100644
index 0000000..fea8e82
--- /dev/null
+++ b/vendor/pdalboost/boost/config/warning_disable.hpp
@@ -0,0 +1,47 @@
+//  Copyright John Maddock 2008
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  This file exists to turn off some overly-pedantic warning emitted
+//  by certain compilers.  You should include this header only in:
+//
+//  * A test case, before any other headers, or,
+//  * A library source file before any other headers.
+//
+//  IT SHOULD NOT BE INCLUDED BY ANY BOOST HEADER.
+//
+//  YOU SHOULD NOT INCLUDE IT IF YOU CAN REASONABLY FIX THE WARNING.
+//
+//  The only warnings disabled here are those that are:
+//
+//  * Quite unreasonably pedantic.
+//  * Generally only emitted by a single compiler.
+//  * Can't easily be fixed: for example if the vendors own std lib 
+//    code emits these warnings!
+//
+//  Note that THIS HEADER MUST NOT INCLUDE ANY OTHER HEADERS:
+//  not even std library ones!  Doing so may turn the warning
+//  off too late to be of any use.  For example the VC++ C4996
+//  warning can be emitted from <iosfwd> if that header is included
+//  before or by this one :-(
+//
+
+#ifndef BOOST_CONFIG_WARNING_DISABLE_HPP
+#define BOOST_CONFIG_WARNING_DISABLE_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1400) 
+   // Error 'function': was declared deprecated
+   // http://msdn2.microsoft.com/en-us/library/ttcz0bys(VS.80).aspx
+   // This error is emitted when you use some perfectly conforming
+   // std lib functions in a perfectly correct way, and also by
+   // some of Microsoft's own std lib code !
+#  pragma warning(disable:4996)
+#endif
+#if defined(__INTEL_COMPILER) || defined(__ICL)
+   // As above: gives warning when a "deprecated"
+   // std library function is encountered.
+#  pragma warning(disable:1786)
+#endif
+
+#endif // BOOST_CONFIG_WARNING_DISABLE_HPP
diff --git a/vendor/pdalboost/boost/container/allocator_traits.hpp b/vendor/pdalboost/boost/container/allocator_traits.hpp
new file mode 100644
index 0000000..ca798b8
--- /dev/null
+++ b/vendor/pdalboost/boost/container/allocator_traits.hpp
@@ -0,0 +1,470 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Pablo Halpern 2009. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2011-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_CONTAINER_ALLOCATOR_ALLOCATOR_TRAITS_HPP
+#define BOOST_CONTAINER_ALLOCATOR_ALLOCATOR_TRAITS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+// container
+#include <boost/container/container_fwd.hpp>
+#include <boost/container/detail/mpl.hpp>
+#include <boost/container/detail/type_traits.hpp>  //is_empty
+#include <boost/container/detail/placement_new.hpp>
+#ifndef BOOST_CONTAINER_DETAIL_STD_FWD_HPP
+#include <boost/container/detail/std_fwd.hpp>
+#endif
+// intrusive
+#include <boost/intrusive/pointer_traits.hpp>
+#include <boost/intrusive/detail/mpl.hpp>
+// move
+#include <boost/move/utility_core.hpp>
+// move/detail
+#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+#include <boost/move/detail/fwd_macros.hpp>
+#endif
+// other boost
+#include <boost/static_assert.hpp>
+
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME allocate
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace pdalboost { namespace container { namespace container_detail {
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END   }}}
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 2
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 2
+#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
+
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME destroy
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace pdalboost { namespace container { namespace container_detail {
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END   }}}
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 1
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 1
+#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
+
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME construct
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace pdalboost { namespace container { namespace container_detail {
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END   }}}
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 1
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 9
+#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
+
+#endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+namespace pdalboost {
+namespace container {
+
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+namespace allocator_traits_detail {
+
+BOOST_INTRUSIVE_HAS_STATIC_MEMBER_FUNC_SIGNATURE(has_max_size, max_size)
+BOOST_INTRUSIVE_HAS_STATIC_MEMBER_FUNC_SIGNATURE(has_select_on_container_copy_construction, select_on_container_copy_construction)
+
+}  //namespace allocator_traits_detail {
+
+namespace container_detail {
+
+//workaround needed for C++03 compilers with no construct()
+//supporting rvalue references
+template<class Allocator>
+struct is_std_allocator
+{  static const bool value = false; };
+
+template<class T>
+struct is_std_allocator< std::allocator<T> >
+{  static const bool value = true; };
+
+template<class Allocator>
+struct is_not_std_allocator
+{  static const bool value = !is_std_allocator<Allocator>::value; };
+
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(pointer)
+BOOST_INTRUSIVE_INSTANTIATE_EVAL_DEFAULT_TYPE_TMPLT(const_pointer)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(reference)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(const_reference)
+BOOST_INTRUSIVE_INSTANTIATE_EVAL_DEFAULT_TYPE_TMPLT(void_pointer)
+BOOST_INTRUSIVE_INSTANTIATE_EVAL_DEFAULT_TYPE_TMPLT(const_void_pointer)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(size_type)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(propagate_on_container_copy_assignment)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(propagate_on_container_move_assignment)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(propagate_on_container_swap)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(is_always_equal)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(difference_type)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(is_partially_propagable)
+
+}  //namespace container_detail {
+
+#endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+//! The class template allocator_traits supplies a uniform interface to all allocator types.
+//! This class is a C++03-compatible implementation of std::allocator_traits
+template <typename Allocator>
+struct allocator_traits
+{
+   //allocator_type
+   typedef Allocator allocator_type;
+   //value_type
+   typedef typename allocator_type::value_type value_type;
+
+   #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+      //! Allocator::pointer if such a type exists; otherwise, value_type*
+      //!
+      typedef unspecified pointer;
+      //! Allocator::const_pointer if such a type exists ; otherwise, pointer_traits<pointer>::rebind<const
+      //!
+      typedef see_documentation const_pointer;
+      //! Non-standard extension
+      //! Allocator::reference if such a type exists; otherwise, value_type&
+      typedef see_documentation reference;
+      //! Non-standard extension
+      //! Allocator::const_reference if such a type exists ; otherwise, const value_type&
+      typedef see_documentation const_reference;
+      //! Allocator::void_pointer if such a type exists ; otherwise, pointer_traits<pointer>::rebind<void>.
+      //!
+      typedef see_documentation void_pointer;
+      //! Allocator::const_void_pointer if such a type exists ; otherwis e, pointer_traits<pointer>::rebind<const
+      //!
+      typedef see_documentation const_void_pointer;
+      //! Allocator::difference_type if such a type exists ; otherwise, pointer_traits<pointer>::difference_type.
+      //!
+      typedef see_documentation difference_type;
+      //! Allocator::size_type if such a type exists ; otherwise, make_unsigned<difference_type>::type
+      //!
+      typedef see_documentation size_type;
+      //! Allocator::propagate_on_container_copy_assignment if such a type exists, otherwise a type
+      //! with an internal constant static boolean member <code>value</code> == false.
+      typedef see_documentation propagate_on_container_copy_assignment;
+      //! Allocator::propagate_on_container_move_assignment if such a type exists, otherwise a type
+      //! with an internal constant static boolean member <code>value</code> == false.
+      typedef see_documentation propagate_on_container_move_assignment;
+      //! Allocator::propagate_on_container_swap if such a type exists, otherwise a type
+      //! with an internal constant static boolean member <code>value</code> == false.
+      typedef see_documentation propagate_on_container_swap;
+      //! Allocator::is_always_equal if such a type exists, otherwise a type
+      //! with an internal constant static boolean member <code>value</code> == is_empty<Allocator>::value
+      typedef see_documentation is_always_equal;
+      //! Allocator::is_partially_propagable if such a type exists, otherwise a type
+      //! with an internal constant static boolean member <code>value</code> == false
+      //! <b>Note</b>: Non-standard extension used to implement `small_vector_allocator`.
+      typedef see_documentation is_partially_propagable;
+      //! Defines an allocator: Allocator::rebind<T>::other if such a type exists; otherwise, Allocator<T, Args>
+      //! if Allocator is a class template instantiation of the form Allocator<U, Args>, where Args is zero or
+      //! more type arguments ; otherwise, the instantiation of rebind_alloc is ill-formed.
+      //!
+      //! In C++03 compilers <code>rebind_alloc</code> is a struct derived from an allocator
+      //! deduced by previously detailed rules.
+      template <class T> using rebind_alloc = see_documentation;
+
+      //! In C++03 compilers <code>rebind_traits</code> is a struct derived from
+      //! <code>allocator_traits<OtherAlloc></code>, where <code>OtherAlloc</code> is
+      //! the allocator deduced by rules explained in <code>rebind_alloc</code>.
+      template <class T> using rebind_traits = allocator_traits<rebind_alloc<T> >;
+
+      //! Non-standard extension: Portable allocator rebind for C++03 and C++11 compilers.
+      //! <code>type</code> is an allocator related to Allocator deduced deduced by rules explained in <code>rebind_alloc</code>.
+      template <class T>
+      struct portable_rebind_alloc
+      {  typedef see_documentation type;  };
+   #else
+      //pointer
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(pdalboost::container::container_detail::, Allocator,
+         pointer, value_type*)
+            pointer;
+      //const_pointer
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(pdalboost::container::container_detail::, Allocator,
+         const_pointer, typename pdalboost::intrusive::pointer_traits<pointer>::template
+            rebind_pointer<const value_type>)
+               const_pointer;
+      //reference
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(pdalboost::container::container_detail::, Allocator,
+         reference, typename container_detail::unvoid_ref<value_type>::type)
+            reference;
+      //const_reference
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(pdalboost::container::container_detail::, Allocator,
+         const_reference, typename container_detail::unvoid_ref<const value_type>::type)
+               const_reference;
+      //void_pointer
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(pdalboost::container::container_detail::, Allocator,
+         void_pointer, typename pdalboost::intrusive::pointer_traits<pointer>::template
+            rebind_pointer<void>)
+               void_pointer;
+      //const_void_pointer
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(pdalboost::container::container_detail::, Allocator,
+         const_void_pointer, typename pdalboost::intrusive::pointer_traits<pointer>::template
+            rebind_pointer<const void>)
+               const_void_pointer;
+      //difference_type
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(pdalboost::container::container_detail::, Allocator,
+         difference_type, std::ptrdiff_t)
+            difference_type;
+      //size_type
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(pdalboost::container::container_detail::, Allocator,
+         size_type, std::size_t)
+            size_type;
+      //propagate_on_container_copy_assignment
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(pdalboost::container::container_detail::, Allocator,
+         propagate_on_container_copy_assignment, container_detail::false_type)
+            propagate_on_container_copy_assignment;
+      //propagate_on_container_move_assignment
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(pdalboost::container::container_detail::, Allocator,
+         propagate_on_container_move_assignment, container_detail::false_type)
+            propagate_on_container_move_assignment;
+      //propagate_on_container_swap
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(pdalboost::container::container_detail::, Allocator,
+         propagate_on_container_swap, container_detail::false_type)
+            propagate_on_container_swap;
+      //is_always_equal
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(pdalboost::container::container_detail::, Allocator,
+         is_always_equal, container_detail::is_empty<Allocator>)
+            is_always_equal;
+      //is_partially_propagable
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(pdalboost::container::container_detail::, Allocator,
+         is_partially_propagable, container_detail::false_type)
+            is_partially_propagable;
+
+      //rebind_alloc & rebind_traits
+      #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
+         //C++11
+         template <typename T> using rebind_alloc  = typename pdalboost::intrusive::pointer_rebind<Allocator, T>::type;
+         template <typename T> using rebind_traits = allocator_traits< rebind_alloc<T> >;
+      #else    // #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
+         //Some workaround for C++03 or C++11 compilers with no template aliases
+         template <typename T>
+         struct rebind_alloc : pdalboost::intrusive::pointer_rebind<Allocator,T>::type
+         {
+            typedef typename pdalboost::intrusive::pointer_rebind<Allocator,T>::type Base;
+            #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+               template <typename... Args>
+               rebind_alloc(BOOST_FWD_REF(Args)... args) : Base(pdalboost::forward<Args>(args)...) {}
+            #else    // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+               #define BOOST_CONTAINER_ALLOCATOR_TRAITS_REBIND_ALLOC(N) \
+               BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N\
+               explicit rebind_alloc(BOOST_MOVE_UREF##N) : Base(BOOST_MOVE_FWD##N){}\
+               //
+               BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_ALLOCATOR_TRAITS_REBIND_ALLOC)
+               #undef BOOST_CONTAINER_ALLOCATOR_TRAITS_REBIND_ALLOC
+            #endif   // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+         };
+
+         template <typename T>
+         struct rebind_traits
+            : allocator_traits<typename pdalboost::intrusive::pointer_rebind<Allocator, T>::type>
+         {};
+      #endif   // #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
+
+      //portable_rebind_alloc
+      template <class T>
+      struct portable_rebind_alloc
+      {  typedef typename pdalboost::intrusive::pointer_rebind<Allocator, T>::type type;  };
+   #endif   //BOOST_CONTAINER_DOXYGEN_INVOKED
+
+   //! <b>Returns</b>: <code>a.allocate(n)</code>
+   //!
+   static pointer allocate(Allocator &a, size_type n)
+   {  return a.allocate(n);  }
+
+   //! <b>Returns</b>: <code>a.deallocate(p, n)</code>
+   //!
+   //! <b>Throws</b>: Nothing
+   static void deallocate(Allocator &a, pointer p, size_type n)
+   {  a.deallocate(p, n);  }
+
+   //! <b>Effects</b>: calls <code>a.allocate(n, p)</code> if that call is well-formed;
+   //! otherwise, invokes <code>a.allocate(n)</code>
+   static pointer allocate(Allocator &a, size_type n, const_void_pointer p)
+   {
+      const bool value = pdalboost::container::container_detail::
+         has_member_function_callable_with_allocate
+            <Allocator, const size_type, const const_void_pointer>::value;
+      container_detail::bool_<value> flag;
+      return allocator_traits::priv_allocate(flag, a, n, p);
+   }
+
+   //! <b>Effects</b>: calls <code>a.destroy(p)</code> if that call is well-formed;
+   //! otherwise, invokes <code>p->~T()</code>.
+   template<class T>
+   static void destroy(Allocator &a, T*p) BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      typedef T* destroy_pointer;
+      const bool value = pdalboost::container::container_detail::
+         has_member_function_callable_with_destroy
+            <Allocator, const destroy_pointer>::value;
+      container_detail::bool_<value> flag;
+      allocator_traits::priv_destroy(flag, a, p);
+   }
+
+   //! <b>Returns</b>: <code>a.max_size()</code> if that expression is well-formed; otherwise,
+   //! <code>numeric_limits<size_type>::max()</code>.
+   static size_type max_size(const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      const bool value = allocator_traits_detail::has_max_size<Allocator, size_type (Allocator::*)() const>::value;
+      container_detail::bool_<value> flag;
+      return allocator_traits::priv_max_size(flag, a);
+   }
+
+   //! <b>Returns</b>: <code>a.select_on_container_copy_construction()</code> if that expression is well-formed;
+   //! otherwise, a.
+   static BOOST_CONTAINER_DOC1ST(Allocator,
+      typename container_detail::if_c
+         < allocator_traits_detail::has_select_on_container_copy_construction<Allocator BOOST_MOVE_I Allocator (Allocator::*)() const>::value
+         BOOST_MOVE_I Allocator BOOST_MOVE_I const Allocator & >::type)
+   select_on_container_copy_construction(const Allocator &a)
+   {
+      const bool value = allocator_traits_detail::has_select_on_container_copy_construction
+         <Allocator, Allocator (Allocator::*)() const>::value;
+      container_detail::bool_<value> flag;
+      return allocator_traits::priv_select_on_container_copy_construction(flag, a);
+   }
+
+   #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+      //! <b>Effects</b>: calls <code>a.construct(p, std::forward<Args>(args)...)</code> if that call is well-formed;
+      //! otherwise, invokes <code>::new (static_cast<void*>(p)) T(std::forward<Args>(args)...)</code>
+      template <class T, class ...Args>
+      static void construct(Allocator & a, T* p, BOOST_FWD_REF(Args)... args)
+      {
+         static const bool value = ::pdalboost::move_detail::and_
+            < container_detail::is_not_std_allocator<Allocator>
+            , pdalboost::container::container_detail::has_member_function_callable_with_construct
+                  < Allocator, T*, Args... >
+            >::value;
+         container_detail::bool_<value> flag;
+         allocator_traits::priv_construct(flag, a, p, ::pdalboost::forward<Args>(args)...);
+      }
+   #endif
+
+   //! <b>Returns</b>: <code>a.storage_is_unpropagable(p)</code> if is_partially_propagable::value is true; otherwise,
+   //! <code>false</code>.
+   static bool storage_is_unpropagable(const Allocator &a, pointer p) BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      container_detail::bool_<is_partially_propagable::value> flag;
+      return allocator_traits::priv_storage_is_unpropagable(flag, a, p);
+   }
+
+   //! <b>Returns</b>: <code>true</code> if <code>is_always_equal::value == true</code>, otherwise,
+   //! <code>a == b</code>.
+   static bool equal(const Allocator &a, const Allocator &b) BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      container_detail::bool_<is_always_equal::value> flag;
+      return allocator_traits::priv_equal(flag, a, b);
+   }
+
+   #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+   private:
+   static pointer priv_allocate(container_detail::true_type, Allocator &a, size_type n, const_void_pointer p)
+   {  return a.allocate(n, p);  }
+
+   static pointer priv_allocate(container_detail::false_type, Allocator &a, size_type n, const_void_pointer)
+   {  return a.allocate(n);  }
+
+   template<class T>
+   static void priv_destroy(container_detail::true_type, Allocator &a, T* p) BOOST_NOEXCEPT_OR_NOTHROW
+   {  a.destroy(p);  }
+
+   template<class T>
+   static void priv_destroy(container_detail::false_type, Allocator &, T* p) BOOST_NOEXCEPT_OR_NOTHROW
+   {  p->~T(); (void)p;  }
+
+   static size_type priv_max_size(container_detail::true_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return a.max_size();  }
+
+   static size_type priv_max_size(container_detail::false_type, const Allocator &) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return size_type(-1)/sizeof(value_type);  }
+
+   static Allocator priv_select_on_container_copy_construction(container_detail::true_type, const Allocator &a)
+   {  return a.select_on_container_copy_construction();  }
+
+   static const Allocator &priv_select_on_container_copy_construction(container_detail::false_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return a;  }
+
+   #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+      template<class T, class ...Args>
+      static void priv_construct(container_detail::true_type, Allocator &a, T *p, BOOST_FWD_REF(Args) ...args)
+      {  a.construct( p, ::pdalboost::forward<Args>(args)...);  }
+
+      template<class T, class ...Args>
+      static void priv_construct(container_detail::false_type, Allocator &, T *p, BOOST_FWD_REF(Args) ...args)
+      {  ::new((void*)p, boost_container_new_t()) T(::pdalboost::forward<Args>(args)...); }
+   #else // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+      public:
+
+      #define BOOST_CONTAINER_ALLOCATOR_TRAITS_CONSTRUCT_IMPL(N) \
+      template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
+      static void construct(Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
+      {\
+         static const bool value = ::pdalboost::move_detail::and_ \
+            < container_detail::is_not_std_allocator<Allocator> \
+            , pdalboost::container::container_detail::has_member_function_callable_with_construct \
+                  < Allocator, T* BOOST_MOVE_I##N BOOST_MOVE_FWD_T##N > \
+            >::value; \
+         container_detail::bool_<value> flag;\
+         (priv_construct)(flag, a, p BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
+      }\
+      //
+      BOOST_MOVE_ITERATE_0TO8(BOOST_CONTAINER_ALLOCATOR_TRAITS_CONSTRUCT_IMPL)
+      #undef BOOST_CONTAINER_ALLOCATOR_TRAITS_CONSTRUCT_IMPL
+
+      private:
+      /////////////////////////////////
+      // priv_construct
+      /////////////////////////////////
+      #define BOOST_CONTAINER_ALLOCATOR_TRAITS_PRIV_CONSTRUCT_IMPL(N) \
+      template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
+      static void priv_construct(container_detail::true_type, Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
+      {  a.construct( p BOOST_MOVE_I##N BOOST_MOVE_FWD##N );  }\
+      \
+      template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
+      static void priv_construct(container_detail::false_type, Allocator &, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
+      {  ::new((void*)p, boost_container_new_t()) T(BOOST_MOVE_FWD##N); }\
+      //
+      BOOST_MOVE_ITERATE_0TO8(BOOST_CONTAINER_ALLOCATOR_TRAITS_PRIV_CONSTRUCT_IMPL)
+      #undef BOOST_CONTAINER_ALLOCATOR_TRAITS_PRIV_CONSTRUCT_IMPL
+
+   #endif   // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+   template<class T>
+   static void priv_construct(container_detail::false_type, Allocator &, T *p, const ::pdalboost::container::default_init_t&)
+   {  ::new((void*)p, boost_container_new_t()) T; }
+
+   static bool priv_storage_is_unpropagable(container_detail::true_type, const Allocator &a, pointer p)
+   {  return a.storage_is_unpropagable(p);  }
+
+   static bool priv_storage_is_unpropagable(container_detail::false_type, const Allocator &, pointer)
+   {  return false;  }
+
+   static bool priv_equal(container_detail::true_type,  const Allocator &, const Allocator &)
+   {  return true;  }
+
+   static bool priv_equal(container_detail::false_type, const Allocator &a, const Allocator &b)
+   {  return a == b;  }
+
+   #endif   //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+};
+
+}  //namespace container {
+}  //namespace pdalboost {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif // ! defined(BOOST_CONTAINER_ALLOCATOR_ALLOCATOR_TRAITS_HPP)
diff --git a/vendor/pdalboost/boost/container/container_fwd.hpp b/vendor/pdalboost/boost/container/container_fwd.hpp
new file mode 100644
index 0000000..5ed07c3
--- /dev/null
+++ b/vendor/pdalboost/boost/container/container_fwd.hpp
@@ -0,0 +1,317 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP
+#define BOOST_CONTAINER_CONTAINER_FWD_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+//! \file
+//! This header file forward declares the following containers:
+//!   - pdalboost::container::vector
+//!   - pdalboost::container::stable_vector
+//!   - pdalboost::container::static_vector
+//!   - pdalboost::container::small_vector
+//!   - pdalboost::container::slist
+//!   - pdalboost::container::list
+//!   - pdalboost::container::set
+//!   - pdalboost::container::multiset
+//!   - pdalboost::container::map
+//!   - pdalboost::container::multimap
+//!   - pdalboost::container::flat_set
+//!   - pdalboost::container::flat_multiset
+//!   - pdalboost::container::flat_map
+//!   - pdalboost::container::flat_multimap
+//!   - pdalboost::container::basic_string
+//!   - pdalboost::container::string
+//!   - pdalboost::container::wstring
+//!
+//! Forward declares the following allocators:
+//!   - pdalboost::container::allocator
+//!   - pdalboost::container::node_allocator
+//!   - pdalboost::container::adaptive_pool
+//!
+//! Forward declares the following polymorphic resource classes:
+//!   - pdalboost::container::pmr::memory_resource
+//!   - pdalboost::container::pmr::polymorphic_allocator
+//!   - pdalboost::container::pmr::monotonic_buffer_resource
+//!   - pdalboost::container::pmr::pool_options
+//!   - pdalboost::container::pmr::unsynchronized_pool_resource
+//!   - pdalboost::container::pmr::synchronized_pool_resource
+//!
+//! And finally it defines the following types
+
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+//Std forward declarations
+#ifndef BOOST_CONTAINER_DETAIL_STD_FWD_HPP
+   #include <boost/container/detail/std_fwd.hpp>
+#endif
+
+namespace pdalboost{
+namespace intrusive{
+namespace detail{
+   //Create namespace to avoid compilation errors
+}}}
+
+namespace pdalboost{ namespace container{ namespace container_detail{
+   namespace bi = pdalboost::intrusive;
+   namespace bid = pdalboost::intrusive::detail;
+}}}
+
+namespace pdalboost{ namespace container{ namespace pmr{
+   namespace bi = pdalboost::intrusive;
+   namespace bid = pdalboost::intrusive::detail;
+}}}
+
+#include <cstddef>
+
+#endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+//////////////////////////////////////////////////////////////////////////////
+//                             Containers
+//////////////////////////////////////////////////////////////////////////////
+
+namespace pdalboost {
+namespace container {
+
+//! Enumeration used to configure ordered associative containers
+//! with a concrete tree implementation.
+enum tree_type_enum
+{
+   red_black_tree,
+   avl_tree,
+   scapegoat_tree,
+   splay_tree
+};
+
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+template<class T>
+class new_allocator;
+
+template <class T
+         ,class Allocator = new_allocator<T> >
+class vector;
+
+template <class T
+         ,class Allocator = new_allocator<T> >
+class stable_vector;
+
+template <class T, std::size_t Capacity>
+class static_vector;
+
+template < class T, std::size_t N
+         , class Allocator= new_allocator<T> >
+class small_vector;
+
+template <class T
+         ,class Allocator = new_allocator<T> >
+class deque;
+
+template <class T
+         ,class Allocator = new_allocator<T> >
+class list;
+
+template <class T
+         ,class Allocator = new_allocator<T> >
+class slist;
+
+template<tree_type_enum TreeType, bool OptimizeSize>
+struct tree_opt;
+
+typedef tree_opt<red_black_tree, true> tree_assoc_defaults;
+
+template <class Key
+         ,class Compare  = std::less<Key>
+         ,class Allocator = new_allocator<Key>
+         ,class Options = tree_assoc_defaults >
+class set;
+
+template <class Key
+         ,class Compare  = std::less<Key>
+         ,class Allocator = new_allocator<Key>
+         ,class Options = tree_assoc_defaults >
+class multiset;
+
+template <class Key
+         ,class T
+         ,class Compare  = std::less<Key>
+         ,class Allocator = new_allocator<std::pair<const Key, T> >
+         ,class Options = tree_assoc_defaults >
+class map;
+
+template <class Key
+         ,class T
+         ,class Compare  = std::less<Key>
+         ,class Allocator = new_allocator<std::pair<const Key, T> >
+         ,class Options = tree_assoc_defaults >
+class multimap;
+
+template <class Key
+         ,class Compare  = std::less<Key>
+         ,class Allocator = new_allocator<Key> >
+class flat_set;
+
+template <class Key
+         ,class Compare  = std::less<Key>
+         ,class Allocator = new_allocator<Key> >
+class flat_multiset;
+
+template <class Key
+         ,class T
+         ,class Compare  = std::less<Key>
+         ,class Allocator = new_allocator<std::pair<Key, T> > >
+class flat_map;
+
+template <class Key
+         ,class T
+         ,class Compare  = std::less<Key>
+         ,class Allocator = new_allocator<std::pair<Key, T> > >
+class flat_multimap;
+
+template <class CharT
+         ,class Traits = std::char_traits<CharT>
+         ,class Allocator  = new_allocator<CharT> >
+class basic_string;
+
+typedef basic_string
+   <char
+   ,std::char_traits<char>
+   ,new_allocator<char> >
+string;
+
+typedef basic_string
+   <wchar_t
+   ,std::char_traits<wchar_t>
+   ,new_allocator<wchar_t> >
+wstring;
+
+static const std::size_t ADP_nodes_per_block    = 256u;
+static const std::size_t ADP_max_free_blocks    = 2u;
+static const std::size_t ADP_overhead_percent   = 1u;
+static const std::size_t ADP_only_alignment     = 0u;
+
+template < class T
+         , std::size_t NodesPerBlock   = ADP_nodes_per_block
+         , std::size_t MaxFreeBlocks   = ADP_max_free_blocks
+         , std::size_t OverheadPercent = ADP_overhead_percent
+         , unsigned Version = 2
+         >
+class adaptive_pool;
+
+template < class T
+         , unsigned Version = 2
+         , unsigned int AllocationDisableMask = 0>
+class allocator;
+
+static const std::size_t NodeAlloc_nodes_per_block = 256u;
+
+template
+   < class T
+   , std::size_t NodesPerBlock = NodeAlloc_nodes_per_block
+   , std::size_t Version = 2>
+class node_allocator;
+
+namespace pmr {
+
+class memory_resource;
+
+template<class T>
+class polymorphic_allocator;
+
+class monotonic_buffer_resource;
+
+struct pool_options;
+
+template <class Allocator>
+class resource_adaptor_imp;
+
+class unsynchronized_pool_resource;
+
+class synchronized_pool_resource;
+
+}  //namespace pmr {
+
+#else
+
+//! Default options for tree-based associative containers
+//!   - tree_type<red_black_tree>
+//!   - optimize_size<true>
+typedef implementation_defined tree_assoc_defaults;
+
+#endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+//! Type used to tag that the input range is
+//! guaranteed to be ordered
+struct ordered_range_t
+{};
+
+//! Value used to tag that the input range is
+//! guaranteed to be ordered
+static const ordered_range_t ordered_range = ordered_range_t();
+
+//! Type used to tag that the input range is
+//! guaranteed to be ordered and unique
+struct ordered_unique_range_t
+   : public ordered_range_t
+{};
+
+//! Value used to tag that the input range is
+//! guaranteed to be ordered and unique
+static const ordered_unique_range_t ordered_unique_range = ordered_unique_range_t();
+
+//! Type used to tag that the inserted values
+//! should be default initialized
+struct default_init_t
+{};
+
+//! Value used to tag that the inserted values
+//! should be default initialized
+static const default_init_t default_init = default_init_t();
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+//! Type used to tag that the inserted values
+//! should be value initialized
+struct value_init_t
+{};
+
+//! Value used to tag that the inserted values
+//! should be value initialized
+static const value_init_t value_init = value_init_t();
+
+namespace container_detail_really_deep_namespace {
+
+//Otherwise, gcc issues a warning of previously defined
+//anonymous_instance and unique_instance
+struct dummy
+{
+   dummy()
+   {
+      (void)ordered_range;
+      (void)ordered_unique_range;
+      (void)default_init;
+   }
+};
+
+}  //detail_really_deep_namespace {
+
+
+#endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+}}  //namespace pdalboost { namespace container {
+
+#endif //#ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP
diff --git a/vendor/pdalboost/boost/container/detail/addressof.hpp b/vendor/pdalboost/boost/container/detail/addressof.hpp
new file mode 100644
index 0000000..938cab4
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/addressof.hpp
@@ -0,0 +1,41 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_CONTAINER_DETAIL_ADDRESSOF_HPP
+#define BOOST_CONTAINER_DETAIL_ADDRESSOF_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <cstddef>
+
+namespace pdalboost {
+namespace container {
+namespace container_detail {
+
+template <typename T>
+inline T* addressof(T& obj)
+{
+   return static_cast<T*>(
+      static_cast<void*>(
+         const_cast<char*>(
+            &reinterpret_cast<const char&>(obj)
+   )));
+}
+
+}  //namespace container_detail {
+}  //namespace container {
+}  //namespace pdalboost {
+
+#endif   //#ifndef BOOST_CONTAINER_DETAIL_ADDRESSOF_HPP
diff --git a/vendor/pdalboost/boost/container/detail/advanced_insert_int.hpp b/vendor/pdalboost/boost/container/detail/advanced_insert_int.hpp
new file mode 100644
index 0000000..ae2f9e2
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/advanced_insert_int.hpp
@@ -0,0 +1,477 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2008-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_ADVANCED_INSERT_INT_HPP
+#define BOOST_CONTAINER_ADVANCED_INSERT_INT_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+// container
+#include <boost/container/allocator_traits.hpp>
+// container/detail
+#include <boost/container/detail/copy_move_algo.hpp>
+#include <boost/container/detail/destroyers.hpp>
+#include <boost/container/detail/mpl.hpp>
+#include <boost/container/detail/type_traits.hpp>
+#include <boost/container/detail/iterator.hpp>
+#include <boost/container/detail/iterators.hpp>
+#include <boost/container/detail/iterator_to_raw_pointer.hpp>
+#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+#include <boost/move/detail/fwd_macros.hpp>
+#endif
+// move
+#include <boost/move/utility_core.hpp>
+// other
+#include <boost/assert.hpp>
+#include <boost/core/no_exceptions_support.hpp>
+
+namespace pdalboost { namespace container { namespace container_detail {
+
+template<class Allocator, class FwdIt, class Iterator>
+struct move_insert_range_proxy
+{
+   typedef typename allocator_traits<Allocator>::size_type size_type;
+   typedef typename allocator_traits<Allocator>::value_type value_type;
+
+   explicit move_insert_range_proxy(FwdIt first)
+      :  first_(first)
+   {}
+
+   void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n)
+   {
+      this->first_ = ::pdalboost::container::uninitialized_move_alloc_n_source
+         (a, this->first_, n, p);
+   }
+
+   void copy_n_and_update(Allocator &, Iterator p, size_type n)
+   {
+      this->first_ = ::pdalboost::container::move_n_source(this->first_, n, p);
+   }
+
+   FwdIt first_;
+};
+
+
+template<class Allocator, class FwdIt, class Iterator>
+struct insert_range_proxy
+{
+   typedef typename allocator_traits<Allocator>::size_type size_type;
+   typedef typename allocator_traits<Allocator>::value_type value_type;
+
+   explicit insert_range_proxy(FwdIt first)
+      :  first_(first)
+   {}
+
+   void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n)
+   {
+      this->first_ = ::pdalboost::container::uninitialized_copy_alloc_n_source(a, this->first_, n, p);
+   }
+
+   void copy_n_and_update(Allocator &, Iterator p, size_type n)
+   {
+      this->first_ = ::pdalboost::container::copy_n_source(this->first_, n, p);
+   }
+
+   FwdIt first_;
+};
+
+
+template<class Allocator, class Iterator>
+struct insert_n_copies_proxy
+{
+   typedef typename allocator_traits<Allocator>::size_type size_type;
+   typedef typename allocator_traits<Allocator>::value_type value_type;
+
+   explicit insert_n_copies_proxy(const value_type &v)
+      :  v_(v)
+   {}
+
+   void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n) const
+   {  pdalboost::container::uninitialized_fill_alloc_n(a, v_, n, p);  }
+
+   void copy_n_and_update(Allocator &, Iterator p, size_type n) const
+   {
+	   for (; 0 < n; --n, ++p){
+		   *p = v_;
+      }
+   }
+
+   const value_type &v_;
+};
+
+template<class Allocator, class Iterator>
+struct insert_value_initialized_n_proxy
+{
+   typedef ::pdalboost::container::allocator_traits<Allocator> alloc_traits;
+   typedef typename allocator_traits<Allocator>::size_type size_type;
+   typedef typename allocator_traits<Allocator>::value_type value_type;
+
+   void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n) const
+   {  pdalboost::container::uninitialized_value_init_alloc_n(a, n, p);  }
+
+   void copy_n_and_update(Allocator &, Iterator, size_type) const
+   {  BOOST_ASSERT(false); }
+};
+
+template<class Allocator, class Iterator>
+struct insert_default_initialized_n_proxy
+{
+   typedef ::pdalboost::container::allocator_traits<Allocator> alloc_traits;
+   typedef typename allocator_traits<Allocator>::size_type size_type;
+   typedef typename allocator_traits<Allocator>::value_type value_type;
+
+   void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n) const
+   {  pdalboost::container::uninitialized_default_init_alloc_n(a, n, p);  }
+
+   void copy_n_and_update(Allocator &, Iterator, size_type) const
+   {  BOOST_ASSERT(false); }
+};
+
+template<class Allocator, class Iterator>
+struct insert_copy_proxy
+{
+   typedef pdalboost::container::allocator_traits<Allocator> alloc_traits;
+   typedef typename alloc_traits::size_type size_type;
+   typedef typename alloc_traits::value_type value_type;
+
+   explicit insert_copy_proxy(const value_type &v)
+      :  v_(v)
+   {}
+
+   void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n) const
+   {
+      BOOST_ASSERT(n == 1);  (void)n;
+      alloc_traits::construct( a, iterator_to_raw_pointer(p), v_);
+   }
+
+   void copy_n_and_update(Allocator &, Iterator p, size_type n) const
+   {
+      BOOST_ASSERT(n == 1);  (void)n;
+      *p =v_;
+   }
+
+   const value_type &v_;
+};
+
+
+template<class Allocator, class Iterator>
+struct insert_move_proxy
+{
+   typedef pdalboost::container::allocator_traits<Allocator> alloc_traits;
+   typedef typename alloc_traits::size_type size_type;
+   typedef typename alloc_traits::value_type value_type;
+
+   explicit insert_move_proxy(value_type &v)
+      :  v_(v)
+   {}
+
+   void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n) const
+   {
+      BOOST_ASSERT(n == 1);  (void)n;
+      alloc_traits::construct( a, iterator_to_raw_pointer(p), ::pdalboost::move(v_) );
+   }
+
+   void copy_n_and_update(Allocator &, Iterator p, size_type n) const
+   {
+      BOOST_ASSERT(n == 1);  (void)n;
+      *p = ::pdalboost::move(v_);
+   }
+
+   value_type &v_;
+};
+
+template<class It, class Allocator>
+insert_move_proxy<Allocator, It> get_insert_value_proxy(BOOST_RV_REF(typename pdalboost::container::iterator_traits<It>::value_type) v)
+{
+   return insert_move_proxy<Allocator, It>(v);
+}
+
+template<class It, class Allocator>
+insert_copy_proxy<Allocator, It> get_insert_value_proxy(const typename pdalboost::container::iterator_traits<It>::value_type &v)
+{
+   return insert_copy_proxy<Allocator, It>(v);
+}
+
+}}}   //namespace pdalboost { namespace container { namespace container_detail {
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+#include <boost/container/detail/variadic_templates_tools.hpp>
+#include <boost/move/utility_core.hpp>
+
+namespace pdalboost {
+namespace container {
+namespace container_detail {
+
+template<class Allocator, class Iterator, class ...Args>
+struct insert_nonmovable_emplace_proxy
+{
+   typedef pdalboost::container::allocator_traits<Allocator>   alloc_traits;
+   typedef typename alloc_traits::size_type        size_type;
+   typedef typename alloc_traits::value_type       value_type;
+
+   typedef typename build_number_seq<sizeof...(Args)>::type index_tuple_t;
+
+   explicit insert_nonmovable_emplace_proxy(BOOST_FWD_REF(Args)... args)
+      : args_(args...)
+   {}
+
+   void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n)
+   {  this->priv_uninitialized_copy_some_and_update(a, index_tuple_t(), p, n);  }
+
+   private:
+   template<int ...IdxPack>
+   void priv_uninitialized_copy_some_and_update(Allocator &a, const index_tuple<IdxPack...>&, Iterator p, size_type n)
+   {
+      BOOST_ASSERT(n == 1); (void)n;
+      alloc_traits::construct( a, iterator_to_raw_pointer(p), ::pdalboost::forward<Args>(get<IdxPack>(this->args_))... );
+   }
+
+   protected:
+   tuple<Args&...> args_;
+};
+
+template<class Allocator, class Iterator, class ...Args>
+struct insert_emplace_proxy
+   :  public insert_nonmovable_emplace_proxy<Allocator, Iterator, Args...>
+{
+   typedef insert_nonmovable_emplace_proxy<Allocator, Iterator, Args...> base_t;
+   typedef pdalboost::container::allocator_traits<Allocator>   alloc_traits;
+   typedef typename base_t::value_type             value_type;
+   typedef typename base_t::size_type              size_type;
+   typedef typename base_t::index_tuple_t          index_tuple_t;
+
+   explicit insert_emplace_proxy(BOOST_FWD_REF(Args)... args)
+      : base_t(::pdalboost::forward<Args>(args)...)
+   {}
+
+   void copy_n_and_update(Allocator &a, Iterator p, size_type n)
+   {  this->priv_copy_some_and_update(a, index_tuple_t(), p, n);  }
+
+   private:
+
+   template<int ...IdxPack>
+   void priv_copy_some_and_update(Allocator &a, const index_tuple<IdxPack...>&, Iterator p, size_type n)
+   {
+      BOOST_ASSERT(n ==1); (void)n;
+      typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;
+      value_type *vp = static_cast<value_type *>(static_cast<void *>(&v));
+      alloc_traits::construct(a, vp,
+         ::pdalboost::forward<Args>(get<IdxPack>(this->args_))...);
+      BOOST_TRY{
+         *p = ::pdalboost::move(*vp);
+      }
+      BOOST_CATCH(...){
+         alloc_traits::destroy(a, vp);
+         BOOST_RETHROW
+      }
+      BOOST_CATCH_END
+      alloc_traits::destroy(a, vp);
+   }
+};
+
+//Specializations to avoid an unneeded temporary when emplacing from a single argument o type value_type
+template<class Allocator, class Iterator>
+struct insert_emplace_proxy<Allocator, Iterator, typename pdalboost::container::allocator_traits<Allocator>::value_type>
+   : public insert_move_proxy<Allocator, Iterator>
+{
+   explicit insert_emplace_proxy(typename pdalboost::container::allocator_traits<Allocator>::value_type &&v)
+   : insert_move_proxy<Allocator, Iterator>(v)
+   {}
+};
+
+//We use "add_const" here as adding "const" only confuses MSVC12(and maybe later) provoking
+//compiler error C2752 ("more than one partial specialization matches").
+//Any problem is solvable with an extra layer of indirection? ;-)
+template<class Allocator, class Iterator>
+struct insert_emplace_proxy<Allocator, Iterator
+   , typename pdalboost::container::container_detail::add_const<typename pdalboost::container::allocator_traits<Allocator>::value_type>::type
+   >
+   : public insert_copy_proxy<Allocator, Iterator>
+{
+   explicit insert_emplace_proxy(const typename pdalboost::container::allocator_traits<Allocator>::value_type &v)
+   : insert_copy_proxy<Allocator, Iterator>(v)
+   {}
+};
+
+template<class Allocator, class Iterator>
+struct insert_emplace_proxy<Allocator, Iterator, typename pdalboost::container::allocator_traits<Allocator>::value_type &>
+   : public insert_copy_proxy<Allocator, Iterator>
+{
+   explicit insert_emplace_proxy(const typename pdalboost::container::allocator_traits<Allocator>::value_type &v)
+   : insert_copy_proxy<Allocator, Iterator>(v)
+   {}
+};
+
+template<class Allocator, class Iterator>
+struct insert_emplace_proxy<Allocator, Iterator
+   , typename pdalboost::container::container_detail::add_const<typename pdalboost::container::allocator_traits<Allocator>::value_type>::type &
+   >
+   : public insert_copy_proxy<Allocator, Iterator>
+{
+   explicit insert_emplace_proxy(const typename pdalboost::container::allocator_traits<Allocator>::value_type &v)
+   : insert_copy_proxy<Allocator, Iterator>(v)
+   {}
+};
+
+}}}   //namespace pdalboost { namespace container { namespace container_detail {
+
+#else // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+#include <boost/container/detail/value_init.hpp>
+
+namespace pdalboost {
+namespace container {
+namespace container_detail {
+
+#define BOOST_CONTAINER_ADVANCED_INSERT_INT_CODE(N) \
+template< class Allocator, class Iterator BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
+struct insert_nonmovable_emplace_proxy##N\
+{\
+   typedef pdalboost::container::allocator_traits<Allocator> alloc_traits;\
+   typedef typename alloc_traits::size_type size_type;\
+   typedef typename alloc_traits::value_type value_type;\
+   \
+   explicit insert_nonmovable_emplace_proxy##N(BOOST_MOVE_UREF##N)\
+      BOOST_MOVE_COLON##N BOOST_MOVE_FWD_INIT##N {}\
+   \
+   void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n)\
+   {\
+      BOOST_ASSERT(n == 1); (void)n;\
+      alloc_traits::construct(a, iterator_to_raw_pointer(p) BOOST_MOVE_I##N BOOST_MOVE_MFWD##N);\
+   }\
+   \
+   void copy_n_and_update(Allocator &, Iterator, size_type)\
+   {  BOOST_ASSERT(false);   }\
+   \
+   protected:\
+   BOOST_MOVE_MREF##N\
+};\
+\
+template< class Allocator, class Iterator BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
+struct insert_emplace_proxy_arg##N\
+   : insert_nonmovable_emplace_proxy##N< Allocator, Iterator BOOST_MOVE_I##N BOOST_MOVE_TARG##N >\
+{\
+   typedef insert_nonmovable_emplace_proxy##N\
+      < Allocator, Iterator BOOST_MOVE_I##N BOOST_MOVE_TARG##N > base_t;\
+   typedef typename base_t::value_type value_type;\
+   typedef typename base_t::size_type size_type;\
+   typedef pdalboost::container::allocator_traits<Allocator> alloc_traits;\
+   \
+   explicit insert_emplace_proxy_arg##N(BOOST_MOVE_UREF##N)\
+      : base_t(BOOST_MOVE_FWD##N){}\
+   \
+   void copy_n_and_update(Allocator &a, Iterator p, size_type n)\
+   {\
+      BOOST_ASSERT(n == 1); (void)n;\
+      typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;\
+      BOOST_ASSERT((((size_type)(&v)) % alignment_of<value_type>::value) == 0);\
+      value_type *vp = static_cast<value_type *>(static_cast<void *>(&v));\
+      alloc_traits::construct(a, vp BOOST_MOVE_I##N BOOST_MOVE_MFWD##N);\
+      BOOST_TRY{\
+         *p = ::pdalboost::move(*vp);\
+      }\
+      BOOST_CATCH(...){\
+         alloc_traits::destroy(a, vp);\
+         BOOST_RETHROW\
+      }\
+      BOOST_CATCH_END\
+      alloc_traits::destroy(a, vp);\
+   }\
+};\
+//
+BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_ADVANCED_INSERT_INT_CODE)
+#undef BOOST_CONTAINER_ADVANCED_INSERT_INT_CODE
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
+//Specializations to avoid an unneeded temporary when emplacing from a single argument o type value_type
+template<class Allocator, class Iterator>
+struct insert_emplace_proxy_arg1<Allocator, Iterator, ::pdalboost::rv<typename pdalboost::container::allocator_traits<Allocator>::value_type> >
+   : public insert_move_proxy<Allocator, Iterator>
+{
+   explicit insert_emplace_proxy_arg1(typename pdalboost::container::allocator_traits<Allocator>::value_type &v)
+   : insert_move_proxy<Allocator, Iterator>(v)
+   {}
+};
+
+template<class Allocator, class Iterator>
+struct insert_emplace_proxy_arg1<Allocator, Iterator, typename pdalboost::container::allocator_traits<Allocator>::value_type>
+   : public insert_copy_proxy<Allocator, Iterator>
+{
+   explicit insert_emplace_proxy_arg1(const typename pdalboost::container::allocator_traits<Allocator>::value_type &v)
+   : insert_copy_proxy<Allocator, Iterator>(v)
+   {}
+};
+
+#else //e.g. MSVC10 & MSVC11
+
+//Specializations to avoid an unneeded temporary when emplacing from a single argument o type value_type
+template<class Allocator, class Iterator>
+struct insert_emplace_proxy_arg1<Allocator, Iterator, typename pdalboost::container::allocator_traits<Allocator>::value_type>
+   : public insert_move_proxy<Allocator, Iterator>
+{
+   explicit insert_emplace_proxy_arg1(typename pdalboost::container::allocator_traits<Allocator>::value_type &&v)
+   : insert_move_proxy<Allocator, Iterator>(v)
+   {}
+};
+
+//We use "add_const" here as adding "const" only confuses MSVC10&11 provoking
+//compiler error C2752 ("more than one partial specialization matches").
+//Any problem is solvable with an extra layer of indirection? ;-)
+template<class Allocator, class Iterator>
+struct insert_emplace_proxy_arg1<Allocator, Iterator
+   , typename pdalboost::container::container_detail::add_const<typename pdalboost::container::allocator_traits<Allocator>::value_type>::type
+   >
+   : public insert_copy_proxy<Allocator, Iterator>
+{
+   explicit insert_emplace_proxy_arg1(const typename pdalboost::container::allocator_traits<Allocator>::value_type &v)
+   : insert_copy_proxy<Allocator, Iterator>(v)
+   {}
+};
+
+template<class Allocator, class Iterator>
+struct insert_emplace_proxy_arg1<Allocator, Iterator, typename pdalboost::container::allocator_traits<Allocator>::value_type &>
+   : public insert_copy_proxy<Allocator, Iterator>
+{
+   explicit insert_emplace_proxy_arg1(const typename pdalboost::container::allocator_traits<Allocator>::value_type &v)
+   : insert_copy_proxy<Allocator, Iterator>(v)
+   {}
+};
+
+template<class Allocator, class Iterator>
+struct insert_emplace_proxy_arg1<Allocator, Iterator
+   , typename pdalboost::container::container_detail::add_const<typename pdalboost::container::allocator_traits<Allocator>::value_type>::type &
+   >
+   : public insert_copy_proxy<Allocator, Iterator>
+{
+   explicit insert_emplace_proxy_arg1(const typename pdalboost::container::allocator_traits<Allocator>::value_type &v)
+   : insert_copy_proxy<Allocator, Iterator>(v)
+   {}
+};
+
+#endif
+
+}}}   //namespace pdalboost { namespace container { namespace container_detail {
+
+#endif   // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif //#ifndef BOOST_CONTAINER_ADVANCED_INSERT_INT_HPP
diff --git a/vendor/pdalboost/boost/container/detail/algorithm.hpp b/vendor/pdalboost/boost/container/detail/algorithm.hpp
new file mode 100644
index 0000000..42e2d06
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/algorithm.hpp
@@ -0,0 +1,35 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2014.
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_DETAIL_ALGORITHM_HPP
+#define BOOST_CONTAINER_DETAIL_ALGORITHM_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/intrusive/detail/algorithm.hpp>
+
+namespace pdalboost {
+namespace container {
+
+using pdalboost::intrusive::algo_equal;
+using pdalboost::intrusive::algo_lexicographical_compare;
+
+}  //namespace container {
+}  //namespace pdalboost {
+
+#endif   //#ifndef BOOST_CONTAINER_DETAIL_ALGORITHM_HPP
diff --git a/vendor/pdalboost/boost/container/detail/alloc_helpers.hpp b/vendor/pdalboost/boost/container/detail/alloc_helpers.hpp
new file mode 100644
index 0000000..9ca5290
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/alloc_helpers.hpp
@@ -0,0 +1,60 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_CONTAINER_DETAIL_ALLOC_TRAITS_HPP
+#define BOOST_CONTAINER_DETAIL_ALLOC_TRAITS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+// move
+#include <boost/move/adl_move_swap.hpp>
+#include <boost/move/utility_core.hpp>
+
+namespace pdalboost {
+namespace container {
+namespace container_detail {
+
+template<class AllocatorType>
+inline void swap_alloc(AllocatorType &, AllocatorType &, container_detail::false_type)
+   BOOST_NOEXCEPT_OR_NOTHROW
+{}
+
+template<class AllocatorType>
+inline void swap_alloc(AllocatorType &l, AllocatorType &r, container_detail::true_type)
+{  pdalboost::adl_move_swap(l, r);   }
+
+template<class AllocatorType>
+inline void assign_alloc(AllocatorType &, const AllocatorType &, container_detail::false_type)
+   BOOST_NOEXCEPT_OR_NOTHROW
+{}
+
+template<class AllocatorType>
+inline void assign_alloc(AllocatorType &l, const AllocatorType &r, container_detail::true_type)
+{  l = r;   }
+
+template<class AllocatorType>
+inline void move_alloc(AllocatorType &, AllocatorType &, container_detail::false_type)
+   BOOST_NOEXCEPT_OR_NOTHROW
+{}
+
+template<class AllocatorType>
+inline void move_alloc(AllocatorType &l, AllocatorType &r, container_detail::true_type)
+{  l = ::pdalboost::move(r);   }
+
+}  //namespace container_detail {
+}  //namespace container {
+}  //namespace pdalboost {
+
+#endif   //#ifndef BOOST_CONTAINER_DETAIL_ALLOC_TRAITS_HPP
diff --git a/vendor/pdalboost/boost/container/detail/allocation_type.hpp b/vendor/pdalboost/boost/container/detail/allocation_type.hpp
new file mode 100644
index 0000000..88938ea
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/allocation_type.hpp
@@ -0,0 +1,58 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_ALLOCATION_TYPE_HPP
+#define BOOST_CONTAINER_ALLOCATION_TYPE_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+namespace pdalboost {
+namespace container {
+
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+enum allocation_type_v
+{
+   // constants for allocation commands
+   allocate_new_v   = 0x01,
+   expand_fwd_v     = 0x02,
+   expand_bwd_v     = 0x04,
+//   expand_both    = expand_fwd | expand_bwd,
+//   expand_or_new  = allocate_new | expand_both,
+   shrink_in_place_v = 0x08,
+   nothrow_allocation_v = 0x10,
+   zero_memory_v = 0x20,
+   try_shrink_in_place_v = 0x40
+};
+
+typedef unsigned int allocation_type;
+#endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+static const allocation_type allocate_new       = (allocation_type)allocate_new_v;
+static const allocation_type expand_fwd         = (allocation_type)expand_fwd_v;
+static const allocation_type expand_bwd         = (allocation_type)expand_bwd_v;
+static const allocation_type shrink_in_place    = (allocation_type)shrink_in_place_v;
+static const allocation_type try_shrink_in_place= (allocation_type)try_shrink_in_place_v;
+static const allocation_type nothrow_allocation = (allocation_type)nothrow_allocation_v;
+static const allocation_type zero_memory        = (allocation_type)zero_memory_v;
+
+}  //namespace container {
+}  //namespace pdalboost {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif   //BOOST_CONTAINER_ALLOCATION_TYPE_HPP
diff --git a/vendor/pdalboost/boost/container/detail/config_begin.hpp b/vendor/pdalboost/boost/container/detail/config_begin.hpp
new file mode 100644
index 0000000..7e3e03f
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/config_begin.hpp
@@ -0,0 +1,51 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_CONFIG_INCLUDED
+#define BOOST_CONTAINER_CONTAINER_DETAIL_CONFIG_INCLUDED
+#ifndef BOOST_CONFIG_HPP
+#include <boost/config.hpp>
+#endif
+
+#endif   //BOOST_CONTAINER_CONTAINER_DETAIL_CONFIG_INCLUDED
+
+#ifdef BOOST_MSVC
+   #pragma warning (push)
+   #pragma warning (disable : 4127) // conditional expression is constant
+   #pragma warning (disable : 4146) // unary minus operator applied to unsigned type, result still unsigned
+   #pragma warning (disable : 4197) // top-level volatile in cast is ignored
+   #pragma warning (disable : 4244) // possible loss of data
+   #pragma warning (disable : 4251) // "identifier" : class "type" needs to have dll-interface to be used by clients of class "type2"
+   #pragma warning (disable : 4267) // conversion from "X" to "Y", possible loss of data
+   #pragma warning (disable : 4275) // non DLL-interface classkey "identifier" used as base for DLL-interface classkey "identifier"
+   #pragma warning (disable : 4284) // odd return type for operator->
+   #pragma warning (disable : 4290) // C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
+   #pragma warning (disable : 4324) // structure was padded due to __declspec(align(
+   #pragma warning (disable : 4345) // behavior change: an object of POD type constructed with an initializer of the form () will be default-initialized
+   #pragma warning (disable : 4355) // "this" : used in base member initializer list
+   #pragma warning (disable : 4503) // "identifier" : decorated name length exceeded, name was truncated
+   #pragma warning (disable : 4510) //  default constructor could not be generated
+   #pragma warning (disable : 4511) // copy constructor could not be generated
+   #pragma warning (disable : 4512) // assignment operator could not be generated
+   #pragma warning (disable : 4514) // unreferenced inline removed
+   #pragma warning (disable : 4521) // Disable "multiple copy constructors specified"
+   #pragma warning (disable : 4522) // "class" : multiple assignment operators specified
+   #pragma warning (disable : 4541) // 'typeid' used on polymorphic type '' with /GR-; unpredictable behavior may result
+   #pragma warning (disable : 4584) //  X is already a base-class of Y
+   #pragma warning (disable : 4610) //  struct can never be instantiated - user defined constructor required
+   #pragma warning (disable : 4671) //  the copy constructor is inaccessible
+   #pragma warning (disable : 4673) //  throwing '' the following types will not be considered at the catch site
+   #pragma warning (disable : 4675) // "method" should be declared "static" and have exactly one parameter
+   #pragma warning (disable : 4702) // unreachable code
+   #pragma warning (disable : 4706) // assignment within conditional expression
+   #pragma warning (disable : 4710) // function not inlined
+   #pragma warning (disable : 4711) // function selected for automatic inline expansion
+   #pragma warning (disable : 4786) // identifier truncated in debug info
+   #pragma warning (disable : 4996) // "function": was declared deprecated
+#endif   //BOOST_MSVC
diff --git a/vendor/pdalboost/boost/container/detail/config_end.hpp b/vendor/pdalboost/boost/container/detail/config_end.hpp
new file mode 100644
index 0000000..f93c8f6
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/config_end.hpp
@@ -0,0 +1,13 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+#if defined BOOST_MSVC
+   #pragma warning (pop)
+#endif
+
diff --git a/vendor/pdalboost/boost/container/detail/copy_move_algo.hpp b/vendor/pdalboost/boost/container/detail/copy_move_algo.hpp
new file mode 100644
index 0000000..262aeb8
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/copy_move_algo.hpp
@@ -0,0 +1,1142 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_CONTAINER_DETAIL_UTILITIES_HPP
+#define BOOST_CONTAINER_DETAIL_UTILITIES_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+// container
+#include <boost/container/allocator_traits.hpp>
+// container/detail
+#include <boost/container/detail/iterator.hpp>
+#include <boost/container/detail/iterator_to_raw_pointer.hpp>
+#include <boost/container/detail/mpl.hpp>
+#include <boost/container/detail/type_traits.hpp>
+// move
+#include <boost/move/adl_move_swap.hpp>
+#include <boost/move/iterator.hpp>
+#include <boost/move/utility_core.hpp>
+// other
+#include <boost/core/no_exceptions_support.hpp>
+// std
+#include <cstring> //for emmove/memcpy
+
+namespace pdalboost {
+namespace container {
+namespace container_detail {
+
+template<class I>
+struct are_elements_contiguous
+{
+   static const bool value = false;
+};
+
+/////////////////////////
+//    raw pointers
+/////////////////////////
+
+template<class T>
+struct are_elements_contiguous<T*>
+{
+   static const bool value = true;
+};
+
+/////////////////////////
+//    move iterators
+/////////////////////////
+
+template<class It>
+struct are_elements_contiguous< ::pdalboost::move_iterator<It> >
+   : are_elements_contiguous<It>
+{};
+
+/////////////////////////
+//    predeclarations
+/////////////////////////
+
+#ifndef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
+
+template<class Pointer>
+class vector_iterator;
+
+template<class Pointer>
+class vector_const_iterator;
+
+#endif   //BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
+
+}  //namespace container_detail {
+}  //namespace container {
+
+namespace interprocess {
+
+template <class PointedType, class DifferenceType, class OffsetType, std::size_t OffsetAlignment>
+class offset_ptr;
+
+}  //namespace interprocess {
+
+namespace container {
+
+namespace container_detail {
+
+/////////////////////////
+//vector_[const_]iterator
+/////////////////////////
+
+#ifndef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
+
+template<class Pointer>
+struct are_elements_contiguous<pdalboost::container::container_detail::vector_iterator<Pointer> >
+{
+   static const bool value = true;
+};
+
+template<class Pointer>
+struct are_elements_contiguous<pdalboost::container::container_detail::vector_const_iterator<Pointer> >
+{
+   static const bool value = true;
+};
+
+#endif   //BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
+
+/////////////////////////
+//    offset_ptr
+/////////////////////////
+
+template <class PointedType, class DifferenceType, class OffsetType, std::size_t OffsetAlignment>
+struct are_elements_contiguous< ::pdalboost::interprocess::offset_ptr<PointedType, DifferenceType, OffsetType, OffsetAlignment> >
+{
+   static const bool value = true;
+};
+
+template <typename I, typename O>
+struct are_contiguous_and_same
+   : pdalboost::move_detail::and_
+      < are_elements_contiguous<I>
+      , are_elements_contiguous<O>
+      , is_same< typename remove_const< typename ::pdalboost::container::iterator_traits<I>::value_type >::type
+               , typename ::pdalboost::container::iterator_traits<O>::value_type
+               >
+      >
+{};
+
+template <typename I, typename O>
+struct is_memtransfer_copy_assignable
+   : pdalboost::move_detail::and_
+      < are_contiguous_and_same<I, O>
+      , container_detail::is_trivially_copy_assignable< typename ::pdalboost::container::iterator_traits<I>::value_type >
+      >
+{};
+
+template <typename I, typename O>
+struct is_memtransfer_copy_constructible
+   : pdalboost::move_detail::and_
+      < are_contiguous_and_same<I, O>
+      , container_detail::is_trivially_copy_constructible< typename ::pdalboost::container::iterator_traits<I>::value_type >
+      >
+{};
+
+template <typename I, typename O, typename R>
+struct enable_if_memtransfer_copy_constructible
+   : enable_if<container_detail::is_memtransfer_copy_constructible<I, O>, R>
+{};
+
+template <typename I, typename O, typename R>
+struct disable_if_memtransfer_copy_constructible
+   : disable_if<container_detail::is_memtransfer_copy_constructible<I, O>, R>
+{};
+
+template <typename I, typename O, typename R>
+struct enable_if_memtransfer_copy_assignable
+   : enable_if<container_detail::is_memtransfer_copy_assignable<I, O>, R>
+{};
+
+template <typename I, typename O, typename R>
+struct disable_if_memtransfer_copy_assignable
+   : disable_if<container_detail::is_memtransfer_copy_assignable<I, O>, R>
+{};
+
+template
+   <typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+inline F memmove(I f, I l, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{
+   typedef typename pdalboost::container::iterator_traits<I>::value_type value_type;
+   typename pdalboost::container::iterator_traits<I>::difference_type n = pdalboost::container::iterator_distance(f, l);
+   if(n){
+      std::memmove((iterator_to_raw_pointer)(r), (iterator_to_raw_pointer)(f), sizeof(value_type)*n);
+      pdalboost::container::iterator_advance(r, n);
+   }
+   return r;
+}
+
+template
+   <typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+F memmove_n(I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{
+   typedef typename pdalboost::container::iterator_traits<I>::value_type value_type;
+   if(n){
+      std::memmove((iterator_to_raw_pointer)(r), (iterator_to_raw_pointer)(f), sizeof(value_type)*n);
+      pdalboost::container::iterator_advance(r, n);
+   }
+   return r;
+}
+
+template
+   <typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+I memmove_n_source(I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{
+   if(n){
+      typedef typename pdalboost::container::iterator_traits<I>::value_type value_type;
+      std::memmove((iterator_to_raw_pointer)(r), (iterator_to_raw_pointer)(f), sizeof(value_type)*n);
+      pdalboost::container::iterator_advance(f, n);
+   }
+   return f;
+}
+
+template
+   <typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+I memmove_n_source_dest(I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F &r) BOOST_NOEXCEPT_OR_NOTHROW
+{
+   typedef typename pdalboost::container::iterator_traits<I>::value_type value_type;
+   if(n){
+      std::memmove((iterator_to_raw_pointer)(r), (iterator_to_raw_pointer)(f), sizeof(value_type)*n);
+      pdalboost::container::iterator_advance(f, n);
+      pdalboost::container::iterator_advance(r, n);
+   }
+   return f;
+}
+
+template <typename O>
+struct is_memzero_initializable
+{
+   typedef typename ::pdalboost::container::iterator_traits<O>::value_type value_type;
+   static const bool value = are_elements_contiguous<O>::value &&
+      (  container_detail::is_integral<value_type>::value || container_detail::is_enum<value_type>::value
+      #if defined(BOOST_CONTAINER_MEMZEROED_POINTER_IS_NULL)
+      || container_detail::is_pointer<value_type>::value
+      #endif
+      #if defined(BOOST_CONTAINER_MEMZEROED_FLOATING_POINT_IS_ZERO)
+      || container_detail::is_floating_point<value_type>::value
+      #endif
+      #if defined(BOOST_CONTAINER_MEMZEROED_FLOATING_POINT_IS_ZERO) && defined(BOOST_CONTAINER_MEMZEROED_POINTER_IS_NULL)
+      || container_detail::is_pod<value_type>::value
+      #endif
+      );
+};
+
+template <typename O, typename R>
+struct enable_if_memzero_initializable
+   : enable_if_c<container_detail::is_memzero_initializable<O>::value, R>
+{};
+
+template <typename O, typename R>
+struct disable_if_memzero_initializable
+   : enable_if_c<!container_detail::is_memzero_initializable<O>::value, R>
+{};
+
+template <typename I, typename R>
+struct enable_if_trivially_destructible
+   : enable_if_c < container_detail::is_trivially_destructible
+                  <typename pdalboost::container::iterator_traits<I>::value_type>::value
+               , R>
+{};
+
+template <typename I, typename R>
+struct disable_if_trivially_destructible
+   : enable_if_c <!container_detail::is_trivially_destructible
+                  <typename pdalboost::container::iterator_traits<I>::value_type>::value
+               , R>
+{};
+
+}  //namespace container_detail {
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                               uninitialized_move_alloc
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+//! <b>Effects</b>:
+//!   \code
+//!   for (; f != l; ++r, ++f)
+//!      allocator_traits::construct(a, &*r, pdalboost::move(*f));
+//!   \endcode
+//!
+//! <b>Returns</b>: r
+template
+   <typename Allocator,
+    typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+inline typename container_detail::disable_if_memtransfer_copy_constructible<I, F, F>::type
+   uninitialized_move_alloc(Allocator &a, I f, I l, F r)
+{
+   F back = r;
+   BOOST_TRY{
+      while (f != l) {
+         allocator_traits<Allocator>::construct(a, container_detail::iterator_to_raw_pointer(r), pdalboost::move(*f));
+         ++f; ++r;
+      }
+   }
+   BOOST_CATCH(...){
+      for (; back != r; ++back){
+         allocator_traits<Allocator>::destroy(a, container_detail::iterator_to_raw_pointer(back));
+      }
+      BOOST_RETHROW;
+   }
+   BOOST_CATCH_END
+   return r;
+}
+
+template
+   <typename Allocator,
+    typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+inline typename container_detail::enable_if_memtransfer_copy_constructible<I, F, F>::type
+   uninitialized_move_alloc(Allocator &, I f, I l, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{  return container_detail::memmove(f, l, r); }
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                               uninitialized_move_alloc_n
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! <b>Effects</b>:
+//!   \code
+//!   for (; n--; ++r, ++f)
+//!      allocator_traits::construct(a, &*r, pdalboost::move(*f));
+//!   \endcode
+//!
+//! <b>Returns</b>: r
+template
+   <typename Allocator,
+    typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+inline typename container_detail::disable_if_memtransfer_copy_constructible<I, F, F>::type
+   uninitialized_move_alloc_n(Allocator &a, I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r)
+{
+   F back = r;
+   BOOST_TRY{
+      while (n--) {
+         allocator_traits<Allocator>::construct(a, container_detail::iterator_to_raw_pointer(r), pdalboost::move(*f));
+         ++f; ++r;
+      }
+   }
+   BOOST_CATCH(...){
+      for (; back != r; ++back){
+         allocator_traits<Allocator>::destroy(a, container_detail::iterator_to_raw_pointer(back));
+      }
+      BOOST_RETHROW;
+   }
+   BOOST_CATCH_END
+   return r;
+}
+
+template
+   <typename Allocator,
+    typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+inline typename container_detail::enable_if_memtransfer_copy_constructible<I, F, F>::type
+   uninitialized_move_alloc_n(Allocator &, I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{  return container_detail::memmove_n(f, n, r); }
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                               uninitialized_move_alloc_n_source
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! <b>Effects</b>:
+//!   \code
+//!   for (; n--; ++r, ++f)
+//!      allocator_traits::construct(a, &*r, pdalboost::move(*f));
+//!   \endcode
+//!
+//! <b>Returns</b>: f (after incremented)
+template
+   <typename Allocator,
+    typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+inline typename container_detail::disable_if_memtransfer_copy_constructible<I, F, I>::type
+   uninitialized_move_alloc_n_source(Allocator &a, I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r)
+{
+   F back = r;
+   BOOST_TRY{
+      while (n--) {
+         allocator_traits<Allocator>::construct(a, container_detail::iterator_to_raw_pointer(r), pdalboost::move(*f));
+         ++f; ++r;
+      }
+   }
+   BOOST_CATCH(...){
+      for (; back != r; ++back){
+         allocator_traits<Allocator>::destroy(a, container_detail::iterator_to_raw_pointer(back));
+      }
+      BOOST_RETHROW;
+   }
+   BOOST_CATCH_END
+   return f;
+}
+
+template
+   <typename Allocator,
+    typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+inline typename container_detail::enable_if_memtransfer_copy_constructible<I, F, I>::type
+   uninitialized_move_alloc_n_source(Allocator &, I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{  return container_detail::memmove_n_source(f, n, r); }
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                               uninitialized_copy_alloc
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! <b>Effects</b>:
+//!   \code
+//!   for (; f != l; ++r, ++f)
+//!      allocator_traits::construct(a, &*r, *f);
+//!   \endcode
+//!
+//! <b>Returns</b>: r
+template
+   <typename Allocator,
+    typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+inline typename container_detail::disable_if_memtransfer_copy_constructible<I, F, F>::type
+   uninitialized_copy_alloc(Allocator &a, I f, I l, F r)
+{
+   F back = r;
+   BOOST_TRY{
+      while (f != l) {
+         allocator_traits<Allocator>::construct(a, container_detail::iterator_to_raw_pointer(r), *f);
+         ++f; ++r;
+      }
+   }
+   BOOST_CATCH(...){
+      for (; back != r; ++back){
+         allocator_traits<Allocator>::destroy(a, container_detail::iterator_to_raw_pointer(back));
+      }
+      BOOST_RETHROW;
+   }
+   BOOST_CATCH_END
+   return r;
+}
+
+template
+   <typename Allocator,
+    typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+inline typename container_detail::enable_if_memtransfer_copy_constructible<I, F, F>::type
+   uninitialized_copy_alloc(Allocator &, I f, I l, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{  return container_detail::memmove(f, l, r); }
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                               uninitialized_copy_alloc_n
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! <b>Effects</b>:
+//!   \code
+//!   for (; n--; ++r, ++f)
+//!      allocator_traits::construct(a, &*r, *f);
+//!   \endcode
+//!
+//! <b>Returns</b>: r
+template
+   <typename Allocator,
+    typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+inline typename container_detail::disable_if_memtransfer_copy_constructible<I, F, F>::type
+   uninitialized_copy_alloc_n(Allocator &a, I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r)
+{
+   F back = r;
+   BOOST_TRY{
+      while (n--) {
+         allocator_traits<Allocator>::construct(a, container_detail::iterator_to_raw_pointer(r), *f);
+         ++f; ++r;
+      }
+   }
+   BOOST_CATCH(...){
+      for (; back != r; ++back){
+         allocator_traits<Allocator>::destroy(a, container_detail::iterator_to_raw_pointer(back));
+      }
+      BOOST_RETHROW;
+   }
+   BOOST_CATCH_END
+   return r;
+}
+
+template
+   <typename Allocator,
+    typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+inline typename container_detail::enable_if_memtransfer_copy_constructible<I, F, F>::type
+   uninitialized_copy_alloc_n(Allocator &, I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{  return container_detail::memmove_n(f, n, r); }
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                               uninitialized_copy_alloc_n_source
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! <b>Effects</b>:
+//!   \code
+//!   for (; n--; ++r, ++f)
+//!      allocator_traits::construct(a, &*r, *f);
+//!   \endcode
+//!
+//! <b>Returns</b>: f (after incremented)
+template
+   <typename Allocator,
+    typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+inline typename container_detail::disable_if_memtransfer_copy_constructible<I, F, I>::type
+   uninitialized_copy_alloc_n_source(Allocator &a, I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r)
+{
+   F back = r;
+   BOOST_TRY{
+      while (n--) {
+         allocator_traits<Allocator>::construct(a, container_detail::iterator_to_raw_pointer(r), *f);
+         ++f; ++r;
+      }
+   }
+   BOOST_CATCH(...){
+      for (; back != r; ++back){
+         allocator_traits<Allocator>::destroy(a, container_detail::iterator_to_raw_pointer(back));
+      }
+      BOOST_RETHROW;
+   }
+   BOOST_CATCH_END
+   return f;
+}
+
+template
+   <typename Allocator,
+    typename I, // I models InputIterator
+    typename F> // F models ForwardIterator
+inline typename container_detail::enable_if_memtransfer_copy_constructible<I, F, I>::type
+   uninitialized_copy_alloc_n_source(Allocator &, I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{  return container_detail::memmove_n_source(f, n, r); }
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                               uninitialized_value_init_alloc_n
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! <b>Effects</b>:
+//!   \code
+//!   for (; n--; ++r, ++f)
+//!      allocator_traits::construct(a, &*r);
+//!   \endcode
+//!
+//! <b>Returns</b>: r
+template
+   <typename Allocator,
+    typename F> // F models ForwardIterator
+inline typename container_detail::disable_if_memzero_initializable<F, F>::type
+   uninitialized_value_init_alloc_n(Allocator &a, typename allocator_traits<Allocator>::difference_type n, F r)
+{
+   F back = r;
+   BOOST_TRY{
+      while (n--) {
+         allocator_traits<Allocator>::construct(a, container_detail::iterator_to_raw_pointer(r));
+         ++r;
+      }
+   }
+   BOOST_CATCH(...){
+      for (; back != r; ++back){
+         allocator_traits<Allocator>::destroy(a, container_detail::iterator_to_raw_pointer(back));
+      }
+      BOOST_RETHROW;
+   }
+   BOOST_CATCH_END
+   return r;
+}
+
+template
+   <typename Allocator,
+    typename F> // F models ForwardIterator
+inline typename container_detail::enable_if_memzero_initializable<F, F>::type
+   uninitialized_value_init_alloc_n(Allocator &, typename allocator_traits<Allocator>::difference_type n, F r)
+{
+   typedef typename pdalboost::container::iterator_traits<F>::value_type value_type;
+   std::memset((void*)container_detail::iterator_to_raw_pointer(r), 0, sizeof(value_type)*n);
+   pdalboost::container::iterator_advance(r, n);
+   return r;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                               uninitialized_default_init_alloc_n
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! <b>Effects</b>:
+//!   \code
+//!   for (; n--; ++r, ++f)
+//!      allocator_traits::construct(a, &*r);
+//!   \endcode
+//!
+//! <b>Returns</b>: r
+template
+   <typename Allocator,
+    typename F> // F models ForwardIterator
+inline F uninitialized_default_init_alloc_n(Allocator &a, typename allocator_traits<Allocator>::difference_type n, F r)
+{
+   F back = r;
+   BOOST_TRY{
+      while (n--) {
+         allocator_traits<Allocator>::construct(a, container_detail::iterator_to_raw_pointer(r), default_init);
+         ++r;
+      }
+   }
+   BOOST_CATCH(...){
+      for (; back != r; ++back){
+         allocator_traits<Allocator>::destroy(a, container_detail::iterator_to_raw_pointer(back));
+      }
+      BOOST_RETHROW;
+   }
+   BOOST_CATCH_END
+   return r;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                               uninitialized_fill_alloc
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! <b>Effects</b>:
+//!   \code
+//!   for (; f != l; ++r, ++f)
+//!      allocator_traits::construct(a, &*r, *f);
+//!   \endcode
+//!
+//! <b>Returns</b>: r
+template
+   <typename Allocator,
+    typename F, // F models ForwardIterator
+    typename T>
+inline void uninitialized_fill_alloc(Allocator &a, F f, F l, const T &t)
+{
+   F back = f;
+   BOOST_TRY{
+      while (f != l) {
+         allocator_traits<Allocator>::construct(a, container_detail::iterator_to_raw_pointer(f), t);
+         ++f;
+      }
+   }
+   BOOST_CATCH(...){
+      for (; back != l; ++back){
+         allocator_traits<Allocator>::destroy(a, container_detail::iterator_to_raw_pointer(back));
+      }
+      BOOST_RETHROW;
+   }
+   BOOST_CATCH_END
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                               uninitialized_fill_alloc_n
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! <b>Effects</b>:
+//!   \code
+//!   for (; n--; ++r, ++f)
+//!      allocator_traits::construct(a, &*r, v);
+//!   \endcode
+//!
+//! <b>Returns</b>: r
+template
+   <typename Allocator,
+    typename T,
+    typename F> // F models ForwardIterator
+inline F uninitialized_fill_alloc_n(Allocator &a, const T &v, typename allocator_traits<Allocator>::difference_type n, F r)
+{
+   F back = r;
+   BOOST_TRY{
+      while (n--) {
+         allocator_traits<Allocator>::construct(a, container_detail::iterator_to_raw_pointer(r), v);
+         ++r;
+      }
+   }
+   BOOST_CATCH(...){
+      for (; back != r; ++back){
+         allocator_traits<Allocator>::destroy(a, container_detail::iterator_to_raw_pointer(back));
+      }
+      BOOST_RETHROW;
+   }
+   BOOST_CATCH_END
+   return r;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                               copy
+//
+//////////////////////////////////////////////////////////////////////////////
+
+template
+<typename I,   // I models InputIterator
+typename F>    // F models ForwardIterator
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, F>::type
+   copy(I f, I l, F r)
+{
+   while (f != l) {
+      *r = *f;
+      ++f; ++r;
+   }
+   return r;
+}
+
+template
+<typename I,   // I models InputIterator
+typename F>    // F models ForwardIterator
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, F>::type
+   copy(I f, I l, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{  return container_detail::memmove(f, l, r); }
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                               copy_n
+//
+//////////////////////////////////////////////////////////////////////////////
+
+template
+<typename I,   // I models InputIterator
+typename F>   // F models ForwardIterator
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, F>::type
+   copy_n(I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r)
+{
+   while (n--) {
+      *r = *f;
+      ++f; ++r;
+   }
+   return r;
+}
+
+template
+<typename I,   // I models InputIterator
+typename F>   // F models ForwardIterator
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, F>::type
+   copy_n(I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{  return container_detail::memmove_n(f, n, r); }
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                            copy_n_source
+//
+//////////////////////////////////////////////////////////////////////////////
+
+template
+<typename I,   // I models InputIterator
+typename F>   // F models ForwardIterator
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, I>::type
+   copy_n_source(I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r)
+{
+   while (n--) {
+      *r = *f;
+      ++f; ++r;
+   }
+   return f;
+}
+
+template
+<typename I,   // I models InputIterator
+typename F>   // F models ForwardIterator
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, I>::type
+   copy_n_source(I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{  return container_detail::memmove_n_source(f, n, r); }
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                            copy_n_source_dest
+//
+//////////////////////////////////////////////////////////////////////////////
+
+template
+<typename I,   // I models InputIterator
+typename F>   // F models ForwardIterator
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, I>::type
+   copy_n_source_dest(I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F &r)
+{
+   while (n--) {
+      *r = *f;
+      ++f; ++r;
+   }
+   return f;
+}
+
+template
+<typename I,   // I models InputIterator
+typename F>   // F models ForwardIterator
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, I>::type
+   copy_n_source_dest(I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F &r) BOOST_NOEXCEPT_OR_NOTHROW
+{  return container_detail::memmove_n_source_dest(f, n, r);  }
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                         move
+//
+//////////////////////////////////////////////////////////////////////////////
+
+template
+<typename I,   // I models InputIterator
+typename F>   // F models ForwardIterator
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, F>::type
+   move(I f, I l, F r)
+{
+   while (f != l) {
+      *r = ::pdalboost::move(*f);
+      ++f; ++r;
+   }
+   return r;
+}
+
+template
+<typename I,   // I models InputIterator
+typename F>   // F models ForwardIterator
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, F>::type
+   move(I f, I l, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{  return container_detail::memmove(f, l, r); }
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                         move_n
+//
+//////////////////////////////////////////////////////////////////////////////
+
+template
+<typename I,   // I models InputIterator
+typename F>   // F models ForwardIterator
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, F>::type
+   move_n(I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r)
+{
+   while (n--) {
+      *r = ::pdalboost::move(*f);
+      ++f; ++r;
+   }
+   return r;
+}
+
+template
+<typename I,   // I models InputIterator
+typename F>   // F models ForwardIterator
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, F>::type
+   move_n(I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{  return container_detail::memmove_n(f, n, r); }
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                         move_backward
+//
+//////////////////////////////////////////////////////////////////////////////
+
+template
+<typename I,   // I models BidirectionalIterator
+typename F>    // F models ForwardIterator
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, F>::type
+   move_backward(I f, I l, F r)
+{
+   while (f != l) {
+      --l; --r;
+      *r = ::pdalboost::move(*l);
+   }
+   return r;
+}
+
+template
+<typename I,   // I models InputIterator
+typename F>   // F models ForwardIterator
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, F>::type
+   move_backward(I f, I l, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{
+   typedef typename pdalboost::container::iterator_traits<I>::value_type value_type;
+   const typename pdalboost::container::iterator_traits<I>::difference_type n = pdalboost::container::iterator_distance(f, l);
+   r -= n;
+   std::memmove((container_detail::iterator_to_raw_pointer)(r), (container_detail::iterator_to_raw_pointer)(f), sizeof(value_type)*n);
+   return r;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                         move_n_source_dest
+//
+//////////////////////////////////////////////////////////////////////////////
+
+template
+<typename I    // I models InputIterator
+,typename F>   // F models ForwardIterator
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, I>::type
+   move_n_source_dest(I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F &r)
+{
+   while (n--) {
+      *r = ::pdalboost::move(*f);
+      ++f; ++r;
+   }
+   return f;
+}
+
+template
+<typename I    // I models InputIterator
+,typename F>   // F models ForwardIterator
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, I>::type
+   move_n_source_dest(I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F &r) BOOST_NOEXCEPT_OR_NOTHROW
+{  return container_detail::memmove_n_source_dest(f, n, r); }
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                         move_n_source
+//
+//////////////////////////////////////////////////////////////////////////////
+
+template
+<typename I    // I models InputIterator
+,typename F>   // F models ForwardIterator
+inline typename container_detail::disable_if_memtransfer_copy_assignable<I, F, I>::type
+   move_n_source(I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r)
+{
+   while (n--) {
+      *r = ::pdalboost::move(*f);
+      ++f; ++r;
+   }
+   return f;
+}
+
+template
+<typename I    // I models InputIterator
+,typename F>   // F models ForwardIterator
+inline typename container_detail::enable_if_memtransfer_copy_assignable<I, F, I>::type
+   move_n_source(I f, typename pdalboost::container::iterator_traits<I>::difference_type n, F r) BOOST_NOEXCEPT_OR_NOTHROW
+{  return container_detail::memmove_n_source(f, n, r); }
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                               destroy_alloc_n
+//
+//////////////////////////////////////////////////////////////////////////////
+
+template
+   <typename Allocator
+   ,typename I   // I models InputIterator
+   ,typename U>  // U models unsigned integral constant
+inline typename container_detail::disable_if_trivially_destructible<I, void>::type
+   destroy_alloc_n(Allocator &a, I f, U n)
+{
+   while(n--){
+      allocator_traits<Allocator>::destroy(a, container_detail::iterator_to_raw_pointer(f));
+      ++f;
+   }
+}
+
+template
+   <typename Allocator
+   ,typename I   // I models InputIterator
+   ,typename U>  // U models unsigned integral constant
+inline typename container_detail::enable_if_trivially_destructible<I, void>::type
+   destroy_alloc_n(Allocator &, I, U)
+{}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                         deep_swap_alloc_n
+//
+//////////////////////////////////////////////////////////////////////////////
+
+template
+   <std::size_t MaxTmpBytes
+   ,typename Allocator
+   ,typename F // F models ForwardIterator
+   ,typename G // G models ForwardIterator
+   >
+inline typename container_detail::disable_if_memtransfer_copy_assignable<F, G, void>::type
+   deep_swap_alloc_n( Allocator &a, F short_range_f, typename allocator_traits<Allocator>::size_type n_i
+                    , G large_range_f, typename allocator_traits<Allocator>::size_type n_j)
+{
+   typename allocator_traits<Allocator>::size_type n = 0;
+   for (; n != n_i ; ++short_range_f, ++large_range_f, ++n){
+      pdalboost::adl_move_swap(*short_range_f, *large_range_f);
+   }
+   pdalboost::container::uninitialized_move_alloc_n(a, large_range_f, n_j - n_i, short_range_f);  // may throw
+   pdalboost::container::destroy_alloc_n(a, large_range_f, n_j - n_i);
+}
+
+static const std::size_t DeepSwapAllocNMaxStorage = std::size_t(1) << std::size_t(11); //2K bytes
+
+template
+   <std::size_t MaxTmpBytes
+   ,typename Allocator
+   ,typename F // F models ForwardIterator
+   ,typename G // G models ForwardIterator
+   >
+inline typename container_detail::enable_if_c
+   < container_detail::is_memtransfer_copy_assignable<F, G>::value && (MaxTmpBytes <= DeepSwapAllocNMaxStorage) && false
+   , void>::type
+   deep_swap_alloc_n( Allocator &a, F short_range_f, typename allocator_traits<Allocator>::size_type n_i
+                    , G large_range_f, typename allocator_traits<Allocator>::size_type n_j)
+{
+   typedef typename allocator_traits<Allocator>::value_type value_type;
+   typedef typename container_detail::aligned_storage
+      <MaxTmpBytes, container_detail::alignment_of<value_type>::value>::type storage_type;
+   storage_type storage;
+
+   const std::size_t n_i_bytes = sizeof(value_type)*n_i;
+   void *const large_ptr = static_cast<void*>(container_detail::iterator_to_raw_pointer(large_range_f));
+   void *const short_ptr = static_cast<void*>(container_detail::iterator_to_raw_pointer(short_range_f));
+   void *const stora_ptr = static_cast<void*>(container_detail::iterator_to_raw_pointer(storage));
+   std::memcpy(stora_ptr, large_ptr, n_i_bytes);
+   std::memcpy(large_ptr, short_ptr, n_i_bytes);
+   std::memcpy(short_ptr, stora_ptr, n_i_bytes);
+   pdalboost::container::iterator_advance(large_range_f, n_i);
+   pdalboost::container::iterator_advance(short_range_f, n_i);
+   pdalboost::container::uninitialized_move_alloc_n(a, large_range_f, n_j - n_i, short_range_f);  // may throw
+   pdalboost::container::destroy_alloc_n(a, large_range_f, n_j - n_i);
+}
+
+template
+   <std::size_t MaxTmpBytes
+   ,typename Allocator
+   ,typename F // F models ForwardIterator
+   ,typename G // G models ForwardIterator
+   >
+inline typename container_detail::enable_if_c
+   < container_detail::is_memtransfer_copy_assignable<F, G>::value && true//(MaxTmpBytes > DeepSwapAllocNMaxStorage)
+   , void>::type
+   deep_swap_alloc_n( Allocator &a, F short_range_f, typename allocator_traits<Allocator>::size_type n_i
+                    , G large_range_f, typename allocator_traits<Allocator>::size_type n_j)
+{
+   typedef typename allocator_traits<Allocator>::value_type value_type;
+   typedef typename container_detail::aligned_storage
+      <DeepSwapAllocNMaxStorage, container_detail::alignment_of<value_type>::value>::type storage_type;
+   storage_type storage;
+   const std::size_t sizeof_storage = sizeof(storage);
+
+   std::size_t n_i_bytes = sizeof(value_type)*n_i;
+   char *large_ptr = static_cast<char*>(static_cast<void*>(container_detail::iterator_to_raw_pointer(large_range_f)));
+   char *short_ptr = static_cast<char*>(static_cast<void*>(container_detail::iterator_to_raw_pointer(short_range_f)));
+   char *stora_ptr = static_cast<char*>(static_cast<void*>(&storage));
+
+   std::size_t szt_times = n_i_bytes/sizeof_storage;
+   const std::size_t szt_rem = n_i_bytes%sizeof_storage;
+
+   //Loop unrolling using Duff's device, as it seems it helps on some architectures
+   const std::size_t Unroll = 4;
+   std::size_t n = (szt_times + (Unroll-1))/Unroll;
+   const std::size_t branch_number = (!szt_times)*Unroll + (szt_times % Unroll);
+   switch(branch_number){
+      case 4:
+         break;
+      case 0: do{
+         std::memcpy(stora_ptr, large_ptr, sizeof_storage);
+         std::memcpy(large_ptr, short_ptr, sizeof_storage);
+         std::memcpy(short_ptr, stora_ptr, sizeof_storage);
+         large_ptr += sizeof_storage;
+         short_ptr += sizeof_storage;
+         BOOST_CONTAINER_FALLTHOUGH
+      case 3:
+         std::memcpy(stora_ptr, large_ptr, sizeof_storage);
+         std::memcpy(large_ptr, short_ptr, sizeof_storage);
+         std::memcpy(short_ptr, stora_ptr, sizeof_storage);
+         large_ptr += sizeof_storage;
+         short_ptr += sizeof_storage;
+         BOOST_CONTAINER_FALLTHOUGH
+      case 2:
+         std::memcpy(stora_ptr, large_ptr, sizeof_storage);
+         std::memcpy(large_ptr, short_ptr, sizeof_storage);
+         std::memcpy(short_ptr, stora_ptr, sizeof_storage);
+         large_ptr += sizeof_storage;
+         short_ptr += sizeof_storage;
+         BOOST_CONTAINER_FALLTHOUGH
+      case 1:
+         std::memcpy(stora_ptr, large_ptr, sizeof_storage);
+         std::memcpy(large_ptr, short_ptr, sizeof_storage);
+         std::memcpy(short_ptr, stora_ptr, sizeof_storage);
+         large_ptr += sizeof_storage;
+         short_ptr += sizeof_storage;
+         } while(--n);
+   }
+   std::memcpy(stora_ptr, large_ptr, szt_rem);
+   std::memcpy(large_ptr, short_ptr, szt_rem);
+   std::memcpy(short_ptr, stora_ptr, szt_rem);
+   pdalboost::container::iterator_advance(large_range_f, n_i);
+   pdalboost::container::iterator_advance(short_range_f, n_i);
+   pdalboost::container::uninitialized_move_alloc_n(a, large_range_f, n_j - n_i, short_range_f);  // may throw
+   pdalboost::container::destroy_alloc_n(a, large_range_f, n_j - n_i);
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                         copy_assign_range_alloc_n
+//
+//////////////////////////////////////////////////////////////////////////////
+
+template
+   <typename Allocator
+   ,typename I // F models InputIterator
+   ,typename O // G models OutputIterator
+   >
+void copy_assign_range_alloc_n( Allocator &a, I inp_start, typename allocator_traits<Allocator>::size_type n_i
+                              , O out_start, typename allocator_traits<Allocator>::size_type n_o )
+{
+   if (n_o < n_i){
+      inp_start = pdalboost::container::copy_n_source_dest(inp_start, n_o, out_start);     // may throw
+      pdalboost::container::uninitialized_copy_alloc_n(a, inp_start, n_i - n_o, out_start);// may throw
+   }
+   else{
+      out_start = pdalboost::container::copy_n(inp_start, n_i, out_start);  // may throw
+      pdalboost::container::destroy_alloc_n(a, out_start, n_o - n_i);
+   }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                         move_assign_range_alloc_n
+//
+//////////////////////////////////////////////////////////////////////////////
+
+template
+   <typename Allocator
+   ,typename I // F models InputIterator
+   ,typename O // G models OutputIterator
+   >
+void move_assign_range_alloc_n( Allocator &a, I inp_start, typename allocator_traits<Allocator>::size_type n_i
+                              , O out_start, typename allocator_traits<Allocator>::size_type n_o )
+{
+   if (n_o < n_i){
+      inp_start = pdalboost::container::move_n_source_dest(inp_start, n_o, out_start);  // may throw
+      pdalboost::container::uninitialized_move_alloc_n(a, inp_start, n_i - n_o, out_start);  // may throw
+   }
+   else{
+      out_start = pdalboost::container::move_n(inp_start, n_i, out_start);  // may throw
+      pdalboost::container::destroy_alloc_n(a, out_start, n_o - n_i);
+   }
+}
+
+}  //namespace container {
+}  //namespace pdalboost {
+
+#endif   //#ifndef BOOST_CONTAINER_DETAIL_UTILITIES_HPP
diff --git a/vendor/pdalboost/boost/container/detail/destroyers.hpp b/vendor/pdalboost/boost/container/detail/destroyers.hpp
new file mode 100644
index 0000000..cc54413
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/destroyers.hpp
@@ -0,0 +1,378 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013.
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_DESTROYERS_HPP
+#define BOOST_CONTAINER_DESTROYERS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+#include <boost/container/allocator_traits.hpp>
+#include <boost/container/detail/to_raw_pointer.hpp>
+#include <boost/container/detail/version_type.hpp>
+
+namespace pdalboost {
+namespace container {
+namespace container_detail {
+
+//!A deleter for scoped_ptr that deallocates the memory
+//!allocated for an object using a STL allocator.
+template <class Allocator>
+struct scoped_deallocator
+{
+   typedef allocator_traits<Allocator> allocator_traits_type;
+   typedef typename allocator_traits_type::pointer pointer;
+   typedef container_detail::integral_constant<unsigned,
+      pdalboost::container::container_detail::
+         version<Allocator>::value>                   alloc_version;
+
+   private:
+   void priv_deallocate(version_1)
+   {  m_alloc.deallocate(m_ptr, 1); }
+
+   void priv_deallocate(version_2)
+   {  m_alloc.deallocate_one(m_ptr); }
+
+   BOOST_MOVABLE_BUT_NOT_COPYABLE(scoped_deallocator)
+
+   public:
+
+   pointer     m_ptr;
+   Allocator&  m_alloc;
+
+   scoped_deallocator(pointer p, Allocator& a)
+      : m_ptr(p), m_alloc(a)
+   {}
+
+   ~scoped_deallocator()
+   {  if (m_ptr)priv_deallocate(alloc_version());  }
+
+   scoped_deallocator(BOOST_RV_REF(scoped_deallocator) o)
+      :  m_ptr(o.m_ptr), m_alloc(o.m_alloc)
+   {  o.release();  }
+
+   pointer get() const
+   {  return m_ptr;  }
+
+   void set(const pointer &p)
+   {  m_ptr = p;  }
+
+   void release()
+   {  m_ptr = 0; }
+};
+
+template <class Allocator>
+struct null_scoped_deallocator
+{
+   typedef pdalboost::container::allocator_traits<Allocator> AllocTraits;
+   typedef typename AllocTraits::pointer    pointer;
+   typedef typename AllocTraits::size_type  size_type;
+
+   null_scoped_deallocator(pointer, Allocator&, size_type)
+   {}
+
+   void release()
+   {}
+
+   pointer get() const
+   {  return pointer();  }
+
+   void set(const pointer &)
+   {}
+};
+
+//!A deleter for scoped_ptr that deallocates the memory
+//!allocated for an array of objects using a STL allocator.
+template <class Allocator>
+struct scoped_array_deallocator
+{
+   typedef pdalboost::container::allocator_traits<Allocator> AllocTraits;
+   typedef typename AllocTraits::pointer    pointer;
+   typedef typename AllocTraits::size_type  size_type;
+
+   scoped_array_deallocator(pointer p, Allocator& a, size_type length)
+      : m_ptr(p), m_alloc(a), m_length(length) {}
+
+   ~scoped_array_deallocator()
+   {  if (m_ptr) m_alloc.deallocate(m_ptr, m_length);  }
+
+   void release()
+   {  m_ptr = 0; }
+
+   private:
+   pointer     m_ptr;
+   Allocator&  m_alloc;
+   size_type   m_length;
+};
+
+template <class Allocator>
+struct null_scoped_array_deallocator
+{
+   typedef pdalboost::container::allocator_traits<Allocator> AllocTraits;
+   typedef typename AllocTraits::pointer    pointer;
+   typedef typename AllocTraits::size_type  size_type;
+
+   null_scoped_array_deallocator(pointer, Allocator&, size_type)
+   {}
+
+   void release()
+   {}
+};
+
+template <class Allocator>
+struct scoped_destroy_deallocator
+{
+   typedef pdalboost::container::allocator_traits<Allocator> AllocTraits;
+   typedef typename AllocTraits::pointer    pointer;
+   typedef typename AllocTraits::size_type  size_type;
+   typedef container_detail::integral_constant<unsigned,
+      pdalboost::container::container_detail::
+         version<Allocator>::value>                          alloc_version;
+
+   scoped_destroy_deallocator(pointer p, Allocator& a)
+      : m_ptr(p), m_alloc(a) {}
+
+   ~scoped_destroy_deallocator()
+   {
+      if(m_ptr){
+         AllocTraits::destroy(m_alloc, container_detail::to_raw_pointer(m_ptr));
+         priv_deallocate(m_ptr, alloc_version());
+      }
+   }
+
+   void release()
+   {  m_ptr = 0; }
+
+   private:
+
+   void priv_deallocate(const pointer &p, version_1)
+   {  AllocTraits::deallocate(m_alloc, p, 1); }
+
+   void priv_deallocate(const pointer &p, version_2)
+   {  m_alloc.deallocate_one(p); }
+
+   pointer     m_ptr;
+   Allocator&  m_alloc;
+};
+
+
+//!A deleter for scoped_ptr that destroys
+//!an object using a STL allocator.
+template <class Allocator>
+struct scoped_destructor_n
+{
+   typedef pdalboost::container::allocator_traits<Allocator> AllocTraits;
+   typedef typename AllocTraits::pointer    pointer;
+   typedef typename AllocTraits::value_type value_type;
+   typedef typename AllocTraits::size_type  size_type;
+
+   scoped_destructor_n(pointer p, Allocator& a, size_type n)
+      : m_p(p), m_a(a), m_n(n)
+   {}
+
+   void release()
+   {  m_p = 0; }
+
+   void increment_size(size_type inc)
+   {  m_n += inc;   }
+
+   void increment_size_backwards(size_type inc)
+   {  m_n += inc;   m_p -= inc;  }
+
+   void shrink_forward(size_type inc)
+   {  m_n -= inc;   m_p += inc;  }
+
+   ~scoped_destructor_n()
+   {
+      if(!m_p) return;
+      value_type *raw_ptr = container_detail::to_raw_pointer(m_p);
+      while(m_n--){
+         AllocTraits::destroy(m_a, raw_ptr++);
+      }
+   }
+
+   private:
+   pointer     m_p;
+   Allocator & m_a;
+   size_type   m_n;
+};
+
+//!A deleter for scoped_ptr that destroys
+//!an object using a STL allocator.
+template <class Allocator>
+struct null_scoped_destructor_n
+{
+   typedef pdalboost::container::allocator_traits<Allocator> AllocTraits;
+   typedef typename AllocTraits::pointer pointer;
+   typedef typename AllocTraits::size_type size_type;
+
+   null_scoped_destructor_n(pointer, Allocator&, size_type)
+   {}
+
+   void increment_size(size_type)
+   {}
+
+   void increment_size_backwards(size_type)
+   {}
+
+   void shrink_forward(size_type)
+   {}
+
+   void release()
+   {}
+};
+
+template<class Allocator>
+class scoped_destructor
+{
+   typedef pdalboost::container::allocator_traits<Allocator> AllocTraits;
+   public:
+   typedef typename Allocator::value_type value_type;
+   scoped_destructor(Allocator &a, value_type *pv)
+      : pv_(pv), a_(a)
+   {}
+
+   ~scoped_destructor()
+   {
+      if(pv_){
+         AllocTraits::destroy(a_, pv_);
+      }
+   }
+
+   void release()
+   {  pv_ = 0; }
+
+
+   void set(value_type *ptr) { pv_ = ptr; }
+
+   value_type *get() const { return pv_; }
+
+   private:
+   value_type *pv_;
+   Allocator &a_;
+};
+
+
+template<class Allocator>
+class value_destructor
+{
+   typedef pdalboost::container::allocator_traits<Allocator> AllocTraits;
+   public:
+   typedef typename Allocator::value_type value_type;
+   value_destructor(Allocator &a, value_type &rv)
+      : rv_(rv), a_(a)
+   {}
+
+   ~value_destructor()
+   {
+      AllocTraits::destroy(a_, &rv_);
+   }
+
+   private:
+   value_type &rv_;
+   Allocator &a_;
+};
+
+template <class Allocator>
+class allocator_destroyer
+{
+   typedef pdalboost::container::allocator_traits<Allocator> AllocTraits;
+   typedef typename AllocTraits::value_type value_type;
+   typedef typename AllocTraits::pointer    pointer;
+   typedef container_detail::integral_constant<unsigned,
+      pdalboost::container::container_detail::
+         version<Allocator>::value>                           alloc_version;
+
+   private:
+   Allocator & a_;
+
+   private:
+   void priv_deallocate(const pointer &p, version_1)
+   {  AllocTraits::deallocate(a_,p, 1); }
+
+   void priv_deallocate(const pointer &p, version_2)
+   {  a_.deallocate_one(p); }
+
+   public:
+   explicit allocator_destroyer(Allocator &a)
+      : a_(a)
+   {}
+
+   void operator()(const pointer &p)
+   {
+      AllocTraits::destroy(a_, container_detail::to_raw_pointer(p));
+      this->priv_deallocate(p, alloc_version());
+   }
+};
+
+template <class Allocator>
+class allocator_destroyer_and_chain_builder
+{
+   typedef allocator_traits<Allocator> allocator_traits_type;
+   typedef typename allocator_traits_type::value_type value_type;
+   typedef typename Allocator::multiallocation_chain    multiallocation_chain;
+
+   Allocator & a_;
+   multiallocation_chain &c_;
+
+   public:
+   allocator_destroyer_and_chain_builder(Allocator &a, multiallocation_chain &c)
+      :  a_(a), c_(c)
+   {}
+
+   void operator()(const typename Allocator::pointer &p)
+   {
+      allocator_traits<Allocator>::destroy(a_, container_detail::to_raw_pointer(p));
+      c_.push_back(p);
+   }
+};
+
+template <class Allocator>
+class allocator_multialloc_chain_node_deallocator
+{
+   typedef allocator_traits<Allocator> allocator_traits_type;
+   typedef typename allocator_traits_type::value_type value_type;
+   typedef typename Allocator::multiallocation_chain    multiallocation_chain;
+   typedef allocator_destroyer_and_chain_builder<Allocator> chain_builder;
+
+   Allocator & a_;
+   multiallocation_chain c_;
+
+   public:
+   allocator_multialloc_chain_node_deallocator(Allocator &a)
+      :  a_(a), c_()
+   {}
+
+   chain_builder get_chain_builder()
+   {  return chain_builder(a_, c_);  }
+
+   ~allocator_multialloc_chain_node_deallocator()
+   {
+      a_.deallocate_individual(c_);
+   }
+};
+
+}  //namespace container_detail {
+}  //namespace container {
+}  //namespace pdalboost {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif   //#ifndef BOOST_CONTAINER_DESTROYERS_HPP
diff --git a/vendor/pdalboost/boost/container/detail/dispatch_uses_allocator.hpp b/vendor/pdalboost/boost/container/detail/dispatch_uses_allocator.hpp
new file mode 100644
index 0000000..c0f6af3
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/dispatch_uses_allocator.hpp
@@ -0,0 +1,293 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_DISPATCH_USES_ALLOCATOR_HPP
+#define BOOST_CONTAINER_DISPATCH_USES_ALLOCATOR_HPP
+
+#if defined (_MSC_VER)
+#  pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+#include <boost/container/allocator_traits.hpp>
+#include <boost/container/uses_allocator.hpp>
+
+#include <boost/container/detail/addressof.hpp>
+#include <boost/container/detail/mpl.hpp>
+#include <boost/container/detail/pair.hpp>
+#include <boost/container/detail/type_traits.hpp>
+
+#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+#include <boost/move/detail/fwd_macros.hpp>
+#endif
+#include <boost/move/utility_core.hpp>
+
+#include <boost/core/no_exceptions_support.hpp>
+
+namespace pdalboost { namespace container {
+
+namespace container_detail {
+
+
+// Check if we can detect is_convertible using advanced SFINAE expressions
+#if !defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+   //! Code inspired by Mathias Gaunard's is_convertible.cpp found in the Boost mailing list
+   //! http://boost.2283326.n4.nabble.com/type-traits-is-constructible-when-decltype-is-supported-td3575452.html
+   //! Thanks Mathias!
+
+   //With variadic templates, we need a single class to implement the trait
+   template<class T, class ...Args>
+   struct is_constructible
+   {
+      typedef char yes_type;
+      struct no_type
+      { char padding[2]; };
+
+      template<std::size_t N>
+      struct dummy;
+
+      template<class X>
+      static decltype(X(pdalboost::move_detail::declval<Args>()...), true_type()) test(int);
+
+      template<class X>
+      static no_type test(...);
+
+      static const bool value = sizeof(test<T>(0)) == sizeof(yes_type);
+   };
+
+   template <class T, class InnerAlloc, class ...Args>
+   struct is_constructible_with_allocator_prefix
+      : is_constructible<T, allocator_arg_t, InnerAlloc, Args...>
+   {};
+
+#else    // #if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+   //Without advanced SFINAE expressions, we can't use is_constructible
+   //so backup to constructible_with_allocator_xxx
+
+   #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+   template <class T, class InnerAlloc, class ...Args>
+   struct is_constructible_with_allocator_prefix
+      : constructible_with_allocator_prefix<T>
+   {};
+
+   template <class T, class InnerAlloc, class ...Args>
+   struct is_constructible_with_allocator_suffix
+      : constructible_with_allocator_suffix<T>
+   {};
+
+   #else    // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+   template <class T, class InnerAlloc, BOOST_MOVE_CLASSDFLT9>
+   struct is_constructible_with_allocator_prefix
+      : constructible_with_allocator_prefix<T>
+   {};
+
+   template <class T, class InnerAlloc, BOOST_MOVE_CLASSDFLT9>
+   struct is_constructible_with_allocator_suffix
+      : constructible_with_allocator_suffix<T>
+   {};
+
+   #endif   // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+#endif   // #if !defined(BOOST_NO_SFINAE_EXPR)
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+template < typename ConstructAlloc
+         , typename ArgAlloc
+         , typename T
+         , class ...Args
+         >
+inline typename container_detail::enable_if_and
+   < void
+   , container_detail::is_not_pair<T>
+   , container_detail::not_< uses_allocator<T, ArgAlloc> >
+   >::type dispatch_uses_allocator
+   ( ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p, BOOST_FWD_REF(Args)...args)
+{
+   (void)arg_alloc;
+   allocator_traits<ConstructAlloc>::construct(construct_alloc, p, ::pdalboost::forward<Args>(args)...);
+}
+
+// allocator_arg_t
+template < typename ConstructAlloc
+         , typename ArgAlloc
+         , typename T
+         , class ...Args
+         >
+inline typename container_detail::enable_if_and
+   < void
+   , container_detail::is_not_pair<T>
+   , uses_allocator<T, ArgAlloc>
+   , is_constructible_with_allocator_prefix<T, ArgAlloc, Args...>
+   >::type dispatch_uses_allocator
+   ( ConstructAlloc& construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p, BOOST_FWD_REF(Args) ...args)
+{
+   allocator_traits<ConstructAlloc>::construct
+      ( construct_alloc, p, allocator_arg
+      , ::pdalboost::forward<ArgAlloc>(arg_alloc), ::pdalboost::forward<Args>(args)...);
+}
+
+// allocator suffix
+template < typename ConstructAlloc
+         , typename ArgAlloc
+         , typename T
+         , class ...Args
+         >
+inline typename container_detail::enable_if_and
+   < void
+   , container_detail::is_not_pair<T>
+   , uses_allocator<T, ArgAlloc>
+   , container_detail::not_<is_constructible_with_allocator_prefix<T, ArgAlloc, Args...> >
+   >::type dispatch_uses_allocator
+   ( ConstructAlloc& construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p, BOOST_FWD_REF(Args)...args)
+{
+   allocator_traits<ConstructAlloc>::construct
+      (construct_alloc, p, ::pdalboost::forward<Args>(args)..., ::pdalboost::forward<ArgAlloc>(arg_alloc));
+}
+
+#else    //#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+#define BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE(N) \
+   template <typename ConstructAlloc, typename ArgAlloc, typename T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
+   inline typename container_detail::enable_if_and\
+      < void\
+      , container_detail::is_not_pair<T>\
+      , container_detail::not_<uses_allocator<T, ArgAlloc> >\
+      >::type\
+      dispatch_uses_allocator\
+      (ConstructAlloc &construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
+   {\
+      (void)arg_alloc;\
+      allocator_traits<ConstructAlloc>::construct(construct_alloc, p BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
+   }\
+//
+BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE)
+#undef BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE
+
+#define BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE(N) \
+   template < typename ConstructAlloc, typename ArgAlloc, typename T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
+   inline typename container_detail::enable_if_and\
+      < void\
+      , container_detail::is_not_pair<T>\
+      , uses_allocator<T, ArgAlloc>\
+      , is_constructible_with_allocator_prefix<T, ArgAlloc BOOST_MOVE_I##N BOOST_MOVE_TARG##N>\
+      >::type\
+      dispatch_uses_allocator\
+      (ConstructAlloc& construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
+   {\
+      allocator_traits<ConstructAlloc>::construct\
+         (construct_alloc, p, allocator_arg, ::pdalboost::forward<ArgAlloc>(arg_alloc) BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
+   }\
+//
+BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE)
+#undef BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE
+
+#define BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE(N) \
+   template < typename ConstructAlloc, typename ArgAlloc, typename T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
+   inline typename container_detail::enable_if_and\
+      < void\
+      , container_detail::is_not_pair<T>\
+      , uses_allocator<T, ArgAlloc>\
+      , container_detail::not_<is_constructible_with_allocator_prefix<T, ArgAlloc BOOST_MOVE_I##N BOOST_MOVE_TARG##N> >\
+      >::type\
+      dispatch_uses_allocator\
+      (ConstructAlloc& construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
+   {\
+      allocator_traits<ConstructAlloc>::construct\
+         (construct_alloc, p BOOST_MOVE_I##N BOOST_MOVE_FWD##N, ::pdalboost::forward<ArgAlloc>(arg_alloc));\
+   }\
+//
+BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE)
+#undef BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE
+
+#endif   //#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+template < typename ConstructAlloc
+         , typename ArgAlloc
+         , typename Pair
+         > inline 
+BOOST_CONTAINER_DOC1ST(void, typename container_detail::enable_if<container_detail::is_pair<Pair> >::type)
+   dispatch_uses_allocator
+   ( ConstructAlloc & construct_alloc
+   , ArgAlloc & arg_alloc
+   , Pair* p)
+{
+   (dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->first));
+   BOOST_TRY{
+      (dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->second));
+   }
+   BOOST_CATCH(...) {
+      allocator_traits<ConstructAlloc>::destroy(construct_alloc, container_detail::addressof(p->first));
+      BOOST_RETHROW
+   }
+   BOOST_CATCH_END
+}
+
+
+template < typename ConstructAlloc
+         , typename ArgAlloc
+         , class Pair, class U, class V>
+BOOST_CONTAINER_DOC1ST(void, typename container_detail::enable_if<container_detail::is_pair<Pair> >::type)
+   dispatch_uses_allocator
+   ( ConstructAlloc & construct_alloc
+   , ArgAlloc & arg_alloc
+   , Pair* p, BOOST_FWD_REF(U) x, BOOST_FWD_REF(V) y)
+{
+   (dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->first), ::pdalboost::forward<U>(x));
+   BOOST_TRY{
+      (dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->second), ::pdalboost::forward<V>(y));
+   }
+   BOOST_CATCH(...){
+      allocator_traits<ConstructAlloc>::destroy(construct_alloc, container_detail::addressof(p->first));
+      BOOST_RETHROW
+   }
+   BOOST_CATCH_END
+}
+
+template < typename ConstructAlloc
+         , typename ArgAlloc
+         , class Pair, class Pair2>
+BOOST_CONTAINER_DOC1ST(void, typename container_detail::enable_if< container_detail::is_pair<Pair> >::type)
+   dispatch_uses_allocator
+   (ConstructAlloc & construct_alloc
+   , ArgAlloc & arg_alloc
+   , Pair* p, Pair2& x)
+{  (dispatch_uses_allocator)(construct_alloc, arg_alloc, p, x.first, x.second);  }
+
+template < typename ConstructAlloc
+         , typename ArgAlloc
+         , class Pair, class Pair2>
+typename container_detail::enable_if_and
+   < void
+   , container_detail::is_pair<Pair>
+   , container_detail::not_<pdalboost::move_detail::is_reference<Pair2> > >::type //This is needed for MSVC10 and ambiguous overloads
+   dispatch_uses_allocator
+   (ConstructAlloc & construct_alloc
+      , ArgAlloc & arg_alloc
+      , Pair* p, BOOST_RV_REF_BEG Pair2 BOOST_RV_REF_END x)
+{  (dispatch_uses_allocator)(construct_alloc, arg_alloc, p, ::pdalboost::move(x.first), ::pdalboost::move(x.second));  }
+
+//template <typename ConstructAlloc, typename ArgAlloc, class Pair, class Pair2>
+//void dispatch_uses_allocator( ConstructAlloc & construct_alloc, ArgAlloc & arg_alloc
+//                            , pair<T1, T2>* p, piecewise_construct_t, tuple<Args1...> x, tuple<Args2...> y);
+
+}  //namespace container_detail
+
+}} // namespace pdalboost { namespace container {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif //  BOOST_CONTAINER_DISPATCH_USES_ALLOCATOR_HPP
diff --git a/vendor/pdalboost/boost/container/detail/iterator.hpp b/vendor/pdalboost/boost/container/detail/iterator.hpp
new file mode 100644
index 0000000..85e6bde
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/iterator.hpp
@@ -0,0 +1,40 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2014.
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_DETAIL_ITERATOR_HPP
+#define BOOST_CONTAINER_DETAIL_ITERATOR_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/intrusive/detail/iterator.hpp>
+
+namespace pdalboost {
+namespace container {
+
+using ::pdalboost::intrusive::iterator_traits;
+using ::pdalboost::intrusive::iterator_distance;
+using ::pdalboost::intrusive::iterator_advance;
+using ::pdalboost::intrusive::iterator;
+using ::pdalboost::intrusive::iterator_enable_if_tag;
+using ::pdalboost::intrusive::iterator_disable_if_tag;
+using ::pdalboost::intrusive::iterator_arrow_result;
+
+}  //namespace container {
+}  //namespace pdalboost {
+
+#endif   //#ifndef BOOST_CONTAINER_DETAIL_ITERATORS_HPP
diff --git a/vendor/pdalboost/boost/container/detail/iterator_to_raw_pointer.hpp b/vendor/pdalboost/boost/container/detail/iterator_to_raw_pointer.hpp
new file mode 100644
index 0000000..d1b1901
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/iterator_to_raw_pointer.hpp
@@ -0,0 +1,58 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_CONTAINER_DETAIL_ITERATOR_TO_RAW_POINTER_HPP
+#define BOOST_CONTAINER_DETAIL_ITERATOR_TO_RAW_POINTER_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/container/detail/iterator.hpp>
+#include <boost/container/detail/to_raw_pointer.hpp>
+#include <boost/intrusive/pointer_traits.hpp>
+
+namespace pdalboost {
+namespace container {
+namespace container_detail {
+
+template <class T>
+inline T* iterator_to_pointer(T* i)
+{  return i; }
+
+template <class Iterator>
+inline typename pdalboost::container::iterator_traits<Iterator>::pointer
+   iterator_to_pointer(const Iterator &i)
+{  return i.operator->();  }
+
+template <class Iterator>
+struct iterator_to_element_ptr
+{
+   typedef typename pdalboost::container::iterator_traits<Iterator>::pointer      pointer;
+   typedef typename pdalboost::intrusive::pointer_traits<pointer>::element_type   element_type;
+   typedef element_type* type;
+};
+
+template <class Iterator>
+inline typename iterator_to_element_ptr<Iterator>::type
+   iterator_to_raw_pointer(const Iterator &i)
+{
+   return ::pdalboost::intrusive::detail::to_raw_pointer
+      (  ::pdalboost::container::container_detail::iterator_to_pointer(i)   );
+}
+
+}  //namespace container_detail {
+}  //namespace container {
+}  //namespace pdalboost {
+
+#endif   //#ifndef BOOST_CONTAINER_DETAIL_ITERATOR_TO_RAW_POINTER_HPP
diff --git a/vendor/pdalboost/boost/container/detail/iterators.hpp b/vendor/pdalboost/boost/container/detail/iterators.hpp
new file mode 100644
index 0000000..9a4e087
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/iterators.hpp
@@ -0,0 +1,828 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013.
+// (C) Copyright Gennaro Prota 2003 - 2004.
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_DETAIL_ITERATORS_HPP
+#define BOOST_CONTAINER_DETAIL_ITERATORS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+#include <boost/container/allocator_traits.hpp>
+#include <boost/container/detail/type_traits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/move/utility_core.hpp>
+#include <boost/intrusive/detail/reverse_iterator.hpp>
+
+#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+#include <boost/move/detail/fwd_macros.hpp>
+#else
+#include <boost/container/detail/variadic_templates_tools.hpp>
+#endif
+#include <boost/container/detail/iterator.hpp>
+
+namespace pdalboost {
+namespace container {
+
+template <class T, class Difference = std::ptrdiff_t>
+class constant_iterator
+  : public ::pdalboost::container::iterator
+      <std::random_access_iterator_tag, T, Difference, const T*, const T &>
+{
+   typedef  constant_iterator<T, Difference> this_type;
+
+   public:
+   explicit constant_iterator(const T &ref, Difference range_size)
+      :  m_ptr(&ref), m_num(range_size){}
+
+   //Constructors
+   constant_iterator()
+      :  m_ptr(0), m_num(0){}
+
+   constant_iterator& operator++()
+   { increment();   return *this;   }
+
+   constant_iterator operator++(int)
+   {
+      constant_iterator result (*this);
+      increment();
+      return result;
+   }
+
+   constant_iterator& operator--()
+   { decrement();   return *this;   }
+
+   constant_iterator operator--(int)
+   {
+      constant_iterator result (*this);
+      decrement();
+      return result;
+   }
+
+   friend bool operator== (const constant_iterator& i, const constant_iterator& i2)
+   { return i.equal(i2); }
+
+   friend bool operator!= (const constant_iterator& i, const constant_iterator& i2)
+   { return !(i == i2); }
+
+   friend bool operator< (const constant_iterator& i, const constant_iterator& i2)
+   { return i.less(i2); }
+
+   friend bool operator> (const constant_iterator& i, const constant_iterator& i2)
+   { return i2 < i; }
+
+   friend bool operator<= (const constant_iterator& i, const constant_iterator& i2)
+   { return !(i > i2); }
+
+   friend bool operator>= (const constant_iterator& i, const constant_iterator& i2)
+   { return !(i < i2); }
+
+   friend Difference operator- (const constant_iterator& i, const constant_iterator& i2)
+   { return i2.distance_to(i); }
+
+   //Arithmetic
+   constant_iterator& operator+=(Difference off)
+   {  this->advance(off); return *this;   }
+
+   constant_iterator operator+(Difference off) const
+   {
+      constant_iterator other(*this);
+      other.advance(off);
+      return other;
+   }
+
+   friend constant_iterator operator+(Difference off, const constant_iterator& right)
+   {  return right + off; }
+
+   constant_iterator& operator-=(Difference off)
+   {  this->advance(-off); return *this;   }
+
+   constant_iterator operator-(Difference off) const
+   {  return *this + (-off);  }
+
+   const T& operator*() const
+   { return dereference(); }
+
+   const T& operator[] (Difference ) const
+   { return dereference(); }
+
+   const T* operator->() const
+   { return &(dereference()); }
+
+   private:
+   const T *   m_ptr;
+   Difference  m_num;
+
+   void increment()
+   { --m_num; }
+
+   void decrement()
+   { ++m_num; }
+
+   bool equal(const this_type &other) const
+   {  return m_num == other.m_num;   }
+
+   bool less(const this_type &other) const
+   {  return other.m_num < m_num;   }
+
+   const T & dereference() const
+   { return *m_ptr; }
+
+   void advance(Difference n)
+   {  m_num -= n; }
+
+   Difference distance_to(const this_type &other)const
+   {  return m_num - other.m_num;   }
+};
+
+template <class T, class Difference>
+class value_init_construct_iterator
+  : public ::pdalboost::container::iterator
+      <std::random_access_iterator_tag, T, Difference, const T*, const T &>
+{
+   typedef  value_init_construct_iterator<T, Difference> this_type;
+
+   public:
+   explicit value_init_construct_iterator(Difference range_size)
+      :  m_num(range_size){}
+
+   //Constructors
+   value_init_construct_iterator()
+      :  m_num(0){}
+
+   value_init_construct_iterator& operator++()
+   { increment();   return *this;   }
+
+   value_init_construct_iterator operator++(int)
+   {
+      value_init_construct_iterator result (*this);
+      increment();
+      return result;
+   }
+
+   value_init_construct_iterator& operator--()
+   { decrement();   return *this;   }
+
+   value_init_construct_iterator operator--(int)
+   {
+      value_init_construct_iterator result (*this);
+      decrement();
+      return result;
+   }
+
+   friend bool operator== (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
+   { return i.equal(i2); }
+
+   friend bool operator!= (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
+   { return !(i == i2); }
+
+   friend bool operator< (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
+   { return i.less(i2); }
+
+   friend bool operator> (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
+   { return i2 < i; }
+
+   friend bool operator<= (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
+   { return !(i > i2); }
+
+   friend bool operator>= (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
+   { return !(i < i2); }
+
+   friend Difference operator- (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
+   { return i2.distance_to(i); }
+
+   //Arithmetic
+   value_init_construct_iterator& operator+=(Difference off)
+   {  this->advance(off); return *this;   }
+
+   value_init_construct_iterator operator+(Difference off) const
+   {
+      value_init_construct_iterator other(*this);
+      other.advance(off);
+      return other;
+   }
+
+   friend value_init_construct_iterator operator+(Difference off, const value_init_construct_iterator& right)
+   {  return right + off; }
+
+   value_init_construct_iterator& operator-=(Difference off)
+   {  this->advance(-off); return *this;   }
+
+   value_init_construct_iterator operator-(Difference off) const
+   {  return *this + (-off);  }
+
+   //This pseudo-iterator's dereference operations have no sense since value is not
+   //constructed until ::pdalboost::container::construct_in_place is called.
+   //So comment them to catch bad uses
+   //const T& operator*() const;
+   //const T& operator[](difference_type) const;
+   //const T* operator->() const;
+
+   private:
+   Difference  m_num;
+
+   void increment()
+   { --m_num; }
+
+   void decrement()
+   { ++m_num; }
+
+   bool equal(const this_type &other) const
+   {  return m_num == other.m_num;   }
+
+   bool less(const this_type &other) const
+   {  return other.m_num < m_num;   }
+
+   const T & dereference() const
+   {
+      static T dummy;
+      return dummy;
+   }
+
+   void advance(Difference n)
+   {  m_num -= n; }
+
+   Difference distance_to(const this_type &other)const
+   {  return m_num - other.m_num;   }
+};
+
+template <class T, class Difference>
+class default_init_construct_iterator
+  : public ::pdalboost::container::iterator
+      <std::random_access_iterator_tag, T, Difference, const T*, const T &>
+{
+   typedef  default_init_construct_iterator<T, Difference> this_type;
+
+   public:
+   explicit default_init_construct_iterator(Difference range_size)
+      :  m_num(range_size){}
+
+   //Constructors
+   default_init_construct_iterator()
+      :  m_num(0){}
+
+   default_init_construct_iterator& operator++()
+   { increment();   return *this;   }
+
+   default_init_construct_iterator operator++(int)
+   {
+      default_init_construct_iterator result (*this);
+      increment();
+      return result;
+   }
+
+   default_init_construct_iterator& operator--()
+   { decrement();   return *this;   }
+
+   default_init_construct_iterator operator--(int)
+   {
+      default_init_construct_iterator result (*this);
+      decrement();
+      return result;
+   }
+
+   friend bool operator== (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
+   { return i.equal(i2); }
+
+   friend bool operator!= (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
+   { return !(i == i2); }
+
+   friend bool operator< (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
+   { return i.less(i2); }
+
+   friend bool operator> (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
+   { return i2 < i; }
+
+   friend bool operator<= (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
+   { return !(i > i2); }
+
+   friend bool operator>= (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
+   { return !(i < i2); }
+
+   friend Difference operator- (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
+   { return i2.distance_to(i); }
+
+   //Arithmetic
+   default_init_construct_iterator& operator+=(Difference off)
+   {  this->advance(off); return *this;   }
+
+   default_init_construct_iterator operator+(Difference off) const
+   {
+      default_init_construct_iterator other(*this);
+      other.advance(off);
+      return other;
+   }
+
+   friend default_init_construct_iterator operator+(Difference off, const default_init_construct_iterator& right)
+   {  return right + off; }
+
+   default_init_construct_iterator& operator-=(Difference off)
+   {  this->advance(-off); return *this;   }
+
+   default_init_construct_iterator operator-(Difference off) const
+   {  return *this + (-off);  }
+
+   //This pseudo-iterator's dereference operations have no sense since value is not
+   //constructed until ::pdalboost::container::construct_in_place is called.
+   //So comment them to catch bad uses
+   //const T& operator*() const;
+   //const T& operator[](difference_type) const;
+   //const T* operator->() const;
+
+   private:
+   Difference  m_num;
+
+   void increment()
+   { --m_num; }
+
+   void decrement()
+   { ++m_num; }
+
+   bool equal(const this_type &other) const
+   {  return m_num == other.m_num;   }
+
+   bool less(const this_type &other) const
+   {  return other.m_num < m_num;   }
+
+   const T & dereference() const
+   {
+      static T dummy;
+      return dummy;
+   }
+
+   void advance(Difference n)
+   {  m_num -= n; }
+
+   Difference distance_to(const this_type &other)const
+   {  return m_num - other.m_num;   }
+};
+
+
+template <class T, class Difference = std::ptrdiff_t>
+class repeat_iterator
+  : public ::pdalboost::container::iterator
+      <std::random_access_iterator_tag, T, Difference>
+{
+   typedef repeat_iterator<T, Difference> this_type;
+   public:
+   explicit repeat_iterator(T &ref, Difference range_size)
+      :  m_ptr(&ref), m_num(range_size){}
+
+   //Constructors
+   repeat_iterator()
+      :  m_ptr(0), m_num(0){}
+
+   this_type& operator++()
+   { increment();   return *this;   }
+
+   this_type operator++(int)
+   {
+      this_type result (*this);
+      increment();
+      return result;
+   }
+
+   this_type& operator--()
+   { increment();   return *this;   }
+
+   this_type operator--(int)
+   {
+      this_type result (*this);
+      increment();
+      return result;
+   }
+
+   friend bool operator== (const this_type& i, const this_type& i2)
+   { return i.equal(i2); }
+
+   friend bool operator!= (const this_type& i, const this_type& i2)
+   { return !(i == i2); }
+
+   friend bool operator< (const this_type& i, const this_type& i2)
+   { return i.less(i2); }
+
+   friend bool operator> (const this_type& i, const this_type& i2)
+   { return i2 < i; }
+
+   friend bool operator<= (const this_type& i, const this_type& i2)
+   { return !(i > i2); }
+
+   friend bool operator>= (const this_type& i, const this_type& i2)
+   { return !(i < i2); }
+
+   friend Difference operator- (const this_type& i, const this_type& i2)
+   { return i2.distance_to(i); }
+
+   //Arithmetic
+   this_type& operator+=(Difference off)
+   {  this->advance(off); return *this;   }
+
+   this_type operator+(Difference off) const
+   {
+      this_type other(*this);
+      other.advance(off);
+      return other;
+   }
+
+   friend this_type operator+(Difference off, const this_type& right)
+   {  return right + off; }
+
+   this_type& operator-=(Difference off)
+   {  this->advance(-off); return *this;   }
+
+   this_type operator-(Difference off) const
+   {  return *this + (-off);  }
+
+   T& operator*() const
+   { return dereference(); }
+
+   T& operator[] (Difference ) const
+   { return dereference(); }
+
+   T *operator->() const
+   { return &(dereference()); }
+
+   private:
+   T *         m_ptr;
+   Difference  m_num;
+
+   void increment()
+   { --m_num; }
+
+   void decrement()
+   { ++m_num; }
+
+   bool equal(const this_type &other) const
+   {  return m_num == other.m_num;   }
+
+   bool less(const this_type &other) const
+   {  return other.m_num < m_num;   }
+
+   T & dereference() const
+   { return *m_ptr; }
+
+   void advance(Difference n)
+   {  m_num -= n; }
+
+   Difference distance_to(const this_type &other)const
+   {  return m_num - other.m_num;   }
+};
+
+template <class T, class EmplaceFunctor, class Difference /*= std::ptrdiff_t*/>
+class emplace_iterator
+  : public ::pdalboost::container::iterator
+      <std::random_access_iterator_tag, T, Difference, const T*, const T &>
+{
+   typedef emplace_iterator this_type;
+
+   public:
+   typedef Difference difference_type;
+   explicit emplace_iterator(EmplaceFunctor&e)
+      :  m_num(1), m_pe(&e){}
+
+   emplace_iterator()
+      :  m_num(0), m_pe(0){}
+
+   this_type& operator++()
+   { increment();   return *this;   }
+
+   this_type operator++(int)
+   {
+      this_type result (*this);
+      increment();
+      return result;
+   }
+
+   this_type& operator--()
+   { decrement();   return *this;   }
+
+   this_type operator--(int)
+   {
+      this_type result (*this);
+      decrement();
+      return result;
+   }
+
+   friend bool operator== (const this_type& i, const this_type& i2)
+   { return i.equal(i2); }
+
+   friend bool operator!= (const this_type& i, const this_type& i2)
+   { return !(i == i2); }
+
+   friend bool operator< (const this_type& i, const this_type& i2)
+   { return i.less(i2); }
+
+   friend bool operator> (const this_type& i, const this_type& i2)
+   { return i2 < i; }
+
+   friend bool operator<= (const this_type& i, const this_type& i2)
+   { return !(i > i2); }
+
+   friend bool operator>= (const this_type& i, const this_type& i2)
+   { return !(i < i2); }
+
+   friend difference_type operator- (const this_type& i, const this_type& i2)
+   { return i2.distance_to(i); }
+
+   //Arithmetic
+   this_type& operator+=(difference_type off)
+   {  this->advance(off); return *this;   }
+
+   this_type operator+(difference_type off) const
+   {
+      this_type other(*this);
+      other.advance(off);
+      return other;
+   }
+
+   friend this_type operator+(difference_type off, const this_type& right)
+   {  return right + off; }
+
+   this_type& operator-=(difference_type off)
+   {  this->advance(-off); return *this;   }
+
+   this_type operator-(difference_type off) const
+   {  return *this + (-off);  }
+
+   //This pseudo-iterator's dereference operations have no sense since value is not
+   //constructed until ::pdalboost::container::construct_in_place is called.
+   //So comment them to catch bad uses
+   //const T& operator*() const;
+   //const T& operator[](difference_type) const;
+   //const T* operator->() const;
+
+   template<class Allocator>
+   void construct_in_place(Allocator &a, T* ptr)
+   {  (*m_pe)(a, ptr);  }
+
+   private:
+   difference_type m_num;
+   EmplaceFunctor *            m_pe;
+
+   void increment()
+   { --m_num; }
+
+   void decrement()
+   { ++m_num; }
+
+   bool equal(const this_type &other) const
+   {  return m_num == other.m_num;   }
+
+   bool less(const this_type &other) const
+   {  return other.m_num < m_num;   }
+
+   const T & dereference() const
+   {
+      static T dummy;
+      return dummy;
+   }
+
+   void advance(difference_type n)
+   {  m_num -= n; }
+
+   difference_type distance_to(const this_type &other)const
+   {  return difference_type(m_num - other.m_num);   }
+};
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+template<class ...Args>
+struct emplace_functor
+{
+   typedef typename container_detail::build_number_seq<sizeof...(Args)>::type index_tuple_t;
+
+   emplace_functor(BOOST_FWD_REF(Args)... args)
+      : args_(args...)
+   {}
+
+   template<class Allocator, class T>
+   void operator()(Allocator &a, T *ptr)
+   {  emplace_functor::inplace_impl(a, ptr, index_tuple_t());  }
+
+   template<class Allocator, class T, int ...IdxPack>
+   void inplace_impl(Allocator &a, T* ptr, const container_detail::index_tuple<IdxPack...>&)
+   {
+      allocator_traits<Allocator>::construct
+         (a, ptr, ::pdalboost::forward<Args>(container_detail::get<IdxPack>(args_))...);
+   }
+
+   container_detail::tuple<Args&...> args_;
+};
+
+#else // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+#define BOOST_MOVE_ITERATOR_EMPLACE_FUNCTOR_CODE(N) \
+BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
+struct emplace_functor##N\
+{\
+   explicit emplace_functor##N( BOOST_MOVE_UREF##N )\
+      BOOST_MOVE_COLON##N BOOST_MOVE_FWD_INIT##N{}\
+   \
+   template<class Allocator, class T>\
+   void operator()(Allocator &a, T *ptr)\
+   {  allocator_traits<Allocator>::construct(a, ptr BOOST_MOVE_I##N BOOST_MOVE_MFWD##N);  }\
+   \
+   BOOST_MOVE_MREF##N\
+};\
+//
+BOOST_MOVE_ITERATE_0TO9(BOOST_MOVE_ITERATOR_EMPLACE_FUNCTOR_CODE)
+#undef BOOST_MOVE_ITERATOR_EMPLACE_FUNCTOR_CODE
+
+#endif
+
+namespace container_detail {
+
+template<class T>
+struct has_iterator_category
+{
+   struct two { char _[2]; };
+
+   template <typename X>
+   static char test(int, typename X::iterator_category*);
+
+   template <typename X>
+   static two test(int, ...);
+
+   static const bool value = (1 == sizeof(test<T>(0, 0)));
+};
+
+
+template<class T, bool = has_iterator_category<T>::value >
+struct is_input_iterator
+{
+   static const bool value = is_same<typename T::iterator_category, std::input_iterator_tag>::value;
+};
+
+template<class T>
+struct is_input_iterator<T, false>
+{
+   static const bool value = false;
+};
+
+template<class T>
+struct is_not_input_iterator
+{
+   static const bool value = !is_input_iterator<T>::value;
+};
+
+template<class T, bool = has_iterator_category<T>::value >
+struct is_forward_iterator
+{
+   static const bool value = is_same<typename T::iterator_category, std::forward_iterator_tag>::value;
+};
+
+template<class T>
+struct is_forward_iterator<T, false>
+{
+   static const bool value = false;
+};
+
+template<class T, bool = has_iterator_category<T>::value >
+struct is_bidirectional_iterator
+{
+   static const bool value = is_same<typename T::iterator_category, std::bidirectional_iterator_tag>::value;
+};
+
+template<class T>
+struct is_bidirectional_iterator<T, false>
+{
+   static const bool value = false;
+};
+
+template<class IINodeType>
+struct iiterator_node_value_type {
+  typedef typename IINodeType::value_type type;
+};
+
+template<class IIterator>
+struct iiterator_types
+{
+   typedef typename IIterator::value_type                            it_value_type;
+   typedef typename iiterator_node_value_type<it_value_type>::type   value_type;
+   typedef typename pdalboost::container::iterator_traits<IIterator>::pointer         it_pointer;
+   typedef typename pdalboost::container::iterator_traits<IIterator>::difference_type difference_type;
+   typedef typename ::pdalboost::intrusive::pointer_traits<it_pointer>::
+      template rebind_pointer<value_type>::type                      pointer;
+   typedef typename ::pdalboost::intrusive::pointer_traits<it_pointer>::
+      template rebind_pointer<const value_type>::type                const_pointer;
+   typedef typename ::pdalboost::intrusive::
+      pointer_traits<pointer>::reference                             reference;
+   typedef typename ::pdalboost::intrusive::
+      pointer_traits<const_pointer>::reference                       const_reference;
+   typedef typename IIterator::iterator_category                     iterator_category;
+};
+
+template<class IIterator, bool IsConst>
+struct iterator_types
+{
+   typedef typename ::pdalboost::container::iterator
+      < typename iiterator_types<IIterator>::iterator_category
+      , typename iiterator_types<IIterator>::value_type
+      , typename iiterator_types<IIterator>::difference_type
+      , typename iiterator_types<IIterator>::const_pointer
+      , typename iiterator_types<IIterator>::const_reference> type;
+};
+
+template<class IIterator>
+struct iterator_types<IIterator, false>
+{
+   typedef typename ::pdalboost::container::iterator
+      < typename iiterator_types<IIterator>::iterator_category
+      , typename iiterator_types<IIterator>::value_type
+      , typename iiterator_types<IIterator>::difference_type
+      , typename iiterator_types<IIterator>::pointer
+      , typename iiterator_types<IIterator>::reference> type;
+};
+
+template<class IIterator, bool IsConst>
+class iterator_from_iiterator
+{
+   typedef typename iterator_types<IIterator, IsConst>::type types_t;
+
+   public:
+   typedef typename types_t::pointer             pointer;
+   typedef typename types_t::reference           reference;
+   typedef typename types_t::difference_type     difference_type;
+   typedef typename types_t::iterator_category   iterator_category;
+   typedef typename types_t::value_type          value_type;
+
+   iterator_from_iiterator()
+   {}
+
+   explicit iterator_from_iiterator(IIterator iit) BOOST_NOEXCEPT_OR_NOTHROW
+      : m_iit(iit)
+   {}
+
+   iterator_from_iiterator(iterator_from_iiterator<IIterator, false> const& other) BOOST_NOEXCEPT_OR_NOTHROW
+      :  m_iit(other.get())
+   {}
+
+   iterator_from_iiterator& operator++() BOOST_NOEXCEPT_OR_NOTHROW
+   {  ++this->m_iit;   return *this;  }
+
+   iterator_from_iiterator operator++(int) BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      iterator_from_iiterator result (*this);
+      ++this->m_iit;
+      return result;
+   }
+
+   iterator_from_iiterator& operator--() BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      //If the iterator_from_iiterator is not a bidirectional iterator, operator-- should not exist
+      BOOST_STATIC_ASSERT((is_bidirectional_iterator<iterator_from_iiterator>::value));
+      --this->m_iit;   return *this;
+   }
+
+   iterator_from_iiterator operator--(int) BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      iterator_from_iiterator result (*this);
+      --this->m_iit;
+      return result;
+   }
+
+   friend bool operator== (const iterator_from_iiterator& l, const iterator_from_iiterator& r) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return l.m_iit == r.m_iit;   }
+
+   friend bool operator!= (const iterator_from_iiterator& l, const iterator_from_iiterator& r) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return !(l == r); }
+
+   reference operator*()  const BOOST_NOEXCEPT_OR_NOTHROW
+   {  return this->m_iit->get_data();  }
+
+   pointer   operator->() const BOOST_NOEXCEPT_OR_NOTHROW
+   {  return ::pdalboost::intrusive::pointer_traits<pointer>::pointer_to(this->operator*());  }
+
+   const IIterator &get() const BOOST_NOEXCEPT_OR_NOTHROW
+   {  return this->m_iit;   }
+
+   private:
+   IIterator m_iit;
+};
+
+}  //namespace container_detail {
+
+using ::pdalboost::intrusive::reverse_iterator;
+
+}  //namespace container {
+}  //namespace pdalboost {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif   //#ifndef BOOST_CONTAINER_DETAIL_ITERATORS_HPP
diff --git a/vendor/pdalboost/boost/container/detail/min_max.hpp b/vendor/pdalboost/boost/container/detail/min_max.hpp
new file mode 100644
index 0000000..093bd0e
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/min_max.hpp
@@ -0,0 +1,37 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_CONTAINER_DETAIL_MIN_MAX_HPP
+#define BOOST_CONTAINER_DETAIL_MIN_MAX_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+namespace pdalboost {
+namespace container {
+namespace container_detail {
+
+template<class T>
+const T &max_value(const T &a, const T &b)
+{  return a > b ? a : b;   }
+
+template<class T>
+const T &min_value(const T &a, const T &b)
+{  return a < b ? a : b;   }
+
+}  //namespace container_detail {
+}  //namespace container {
+}  //namespace pdalboost {
+
+#endif   //#ifndef BOOST_CONTAINER_DETAIL_MIN_MAX_HPP
diff --git a/vendor/pdalboost/boost/container/detail/mpl.hpp b/vendor/pdalboost/boost/container/detail/mpl.hpp
new file mode 100644
index 0000000..2ea6a7c
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/mpl.hpp
@@ -0,0 +1,87 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013.
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_MPL_HPP
+#define BOOST_CONTAINER_CONTAINER_DETAIL_MPL_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+#include <boost/move/detail/type_traits.hpp>
+#include <boost/intrusive/detail/mpl.hpp>
+
+#include <cstddef>
+
+namespace pdalboost {
+namespace container {
+namespace container_detail {
+
+using pdalboost::move_detail::integral_constant;
+using pdalboost::move_detail::true_type;
+using pdalboost::move_detail::false_type;
+using pdalboost::move_detail::enable_if_c;
+using pdalboost::move_detail::enable_if;
+using pdalboost::move_detail::enable_if_convertible;
+using pdalboost::move_detail::disable_if_c;
+using pdalboost::move_detail::disable_if;
+using pdalboost::move_detail::disable_if_convertible;
+using pdalboost::move_detail::is_convertible;
+using pdalboost::move_detail::if_c;
+using pdalboost::move_detail::if_;
+using pdalboost::move_detail::identity;
+using pdalboost::move_detail::bool_;
+using pdalboost::move_detail::true_;
+using pdalboost::move_detail::false_;
+using pdalboost::move_detail::yes_type;
+using pdalboost::move_detail::no_type;
+using pdalboost::move_detail::bool_;
+using pdalboost::move_detail::true_;
+using pdalboost::move_detail::false_;
+using pdalboost::move_detail::unvoid_ref;
+using pdalboost::move_detail::and_;
+using pdalboost::move_detail::or_;
+using pdalboost::move_detail::not_;
+using pdalboost::move_detail::enable_if_and;
+using pdalboost::move_detail::disable_if_and;
+using pdalboost::move_detail::enable_if_or;
+using pdalboost::move_detail::disable_if_or;
+
+
+template <class Pair>
+struct select1st
+{
+   typedef Pair                        argument_type;
+   typedef typename Pair::first_type   result_type;
+
+   template<class OtherPair>
+   const typename Pair::first_type& operator()(const OtherPair& x) const
+   {  return x.first;   }
+
+   const typename Pair::first_type& operator()(const typename Pair::first_type& x) const
+   {  return x;   }
+};
+
+}  //namespace container_detail {
+}  //namespace container {
+}  //namespace pdalboost {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif   //#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_MPL_HPP
+
diff --git a/vendor/pdalboost/boost/container/detail/next_capacity.hpp b/vendor/pdalboost/boost/container/detail/next_capacity.hpp
new file mode 100644
index 0000000..eaf9861
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/next_capacity.hpp
@@ -0,0 +1,75 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_CONTAINER_DETAIL_NEXT_CAPACITY_HPP
+#define BOOST_CONTAINER_DETAIL_NEXT_CAPACITY_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+// container
+#include <boost/container/throw_exception.hpp>
+// container/detail
+#include <boost/container/detail/min_max.hpp>
+
+namespace pdalboost {
+namespace container {
+namespace container_detail {
+
+enum NextCapacityOption { NextCapacityDouble, NextCapacity60Percent };
+
+template<class SizeType, NextCapacityOption Option>
+struct next_capacity_calculator;
+
+template<class SizeType>
+struct next_capacity_calculator<SizeType, NextCapacityDouble>
+{
+   static SizeType get(const SizeType max_size
+                      ,const SizeType capacity
+                      ,const SizeType n)
+   {
+      const SizeType remaining = max_size - capacity;
+      if ( remaining < n )
+         pdalboost::container::throw_length_error("get_next_capacity, allocator's max_size reached");
+      const SizeType additional = max_value(n, capacity);
+      return ( remaining < additional ) ? max_size : ( capacity + additional );
+   }
+};
+
+template<class SizeType>
+struct next_capacity_calculator<SizeType, NextCapacity60Percent>
+{
+   static SizeType get(const SizeType max_size
+                     ,const SizeType capacity
+                     ,const SizeType n)
+   {
+      const SizeType remaining = max_size - capacity;
+      if ( remaining < n )
+         pdalboost::container::throw_length_error("get_next_capacity, allocator's max_size reached");
+      const SizeType m3 = max_size/3;
+
+      if (capacity < m3)
+         return capacity + max_value(3*(capacity+1)/5, n);
+
+      if (capacity < m3*2)
+         return capacity + max_value((capacity+1)/2, n);
+      return max_size;
+   }
+};
+
+}  //namespace container_detail {
+}  //namespace container {
+}  //namespace pdalboost {
+
+#endif   //#ifndef BOOST_CONTAINER_DETAIL_NEXT_CAPACITY_HPP
diff --git a/vendor/pdalboost/boost/container/detail/pair.hpp b/vendor/pdalboost/boost/container/detail/pair.hpp
new file mode 100644
index 0000000..c370158
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/pair.hpp
@@ -0,0 +1,327 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013.
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_PAIR_HPP
+#define BOOST_CONTAINER_CONTAINER_DETAIL_PAIR_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+#include <boost/container/detail/mpl.hpp>
+#include <boost/container/detail/type_traits.hpp>
+#include <boost/container/detail/mpl.hpp>
+#include <boost/container/detail/std_fwd.hpp>
+#include <boost/move/adl_move_swap.hpp> //swap
+
+#include <boost/intrusive/detail/minimal_pair_header.hpp>      //pair
+#include <boost/move/utility_core.hpp>
+
+namespace pdalboost {
+namespace container {
+namespace container_detail {
+
+template <class T1, class T2>
+struct pair;
+
+template <class T>
+struct is_pair
+{
+   static const bool value = false;
+};
+
+template <class T1, class T2>
+struct is_pair< pair<T1, T2> >
+{
+   static const bool value = true;
+};
+
+template <class T1, class T2>
+struct is_pair< std::pair<T1, T2> >
+{
+   static const bool value = true;
+};
+
+template <class T>
+struct is_not_pair
+{
+   static const bool value = !is_pair<T>::value;
+};
+
+template <class T>
+struct is_std_pair
+{
+   static const bool value = false;
+};
+
+template <class T1, class T2>
+struct is_std_pair< std::pair<T1, T2> >
+{
+   static const bool value = true;
+};
+
+struct pair_nat;
+
+template <class T1, class T2>
+struct pair
+{
+   private:
+   BOOST_COPYABLE_AND_MOVABLE(pair)
+
+   public:
+   typedef T1 first_type;
+   typedef T2 second_type;
+
+   T1 first;
+   T2 second;
+
+   //Default constructor
+   pair()
+      : first(), second()
+   {}
+
+   //pair copy assignment
+   pair(const pair& x)
+      : first(x.first), second(x.second)
+   {}
+
+   //pair move constructor
+   pair(BOOST_RV_REF(pair) p)
+      : first(::pdalboost::move(p.first)), second(::pdalboost::move(p.second))
+   {}
+
+   template <class D, class S>
+   pair(const pair<D, S> &p)
+      : first(p.first), second(p.second)
+   {}
+
+   template <class D, class S>
+   pair(BOOST_RV_REF_BEG pair<D, S> BOOST_RV_REF_END p)
+      : first(::pdalboost::move(p.first)), second(::pdalboost::move(p.second))
+   {}
+
+   //pair from two values
+   pair(const T1 &t1, const T2 &t2)
+      : first(t1)
+      , second(t2)
+   {}
+
+   template<class U, class V>
+   pair(BOOST_FWD_REF(U) u, BOOST_FWD_REF(V) v)
+      : first(::pdalboost::forward<U>(u))
+      , second(::pdalboost::forward<V>(v))
+   {}
+
+   //And now compatibility with std::pair
+   pair(const std::pair<T1, T2>& x)
+      : first(x.first), second(x.second)
+   {}
+
+   template <class D, class S>
+   pair(const std::pair<D, S>& p)
+      : first(p.first), second(p.second)
+   {}
+
+   pair(BOOST_RV_REF_BEG std::pair<T1, T2> BOOST_RV_REF_END p)
+      : first(::pdalboost::move(p.first)), second(::pdalboost::move(p.second))
+   {}
+
+   template <class D, class S>
+   pair(BOOST_RV_REF_BEG std::pair<D, S> BOOST_RV_REF_END p)
+      : first(::pdalboost::move(p.first)), second(::pdalboost::move(p.second))
+   {}
+
+   //piecewise_construct missing
+   //template <class U, class V> pair(pair<U, V>&& p);
+   //template <class... Args1, class... Args2>
+   //   pair(piecewise_construct_t, tuple<Args1...> first_args,
+   //        tuple<Args2...> second_args);
+
+   //pair copy assignment
+   pair& operator=(BOOST_COPY_ASSIGN_REF(pair) p)
+   {
+      first  = p.first;
+      second = p.second;
+      return *this;
+   }
+
+   //pair move assignment
+   pair& operator=(BOOST_RV_REF(pair) p)
+   {
+      first  = ::pdalboost::move(p.first);
+      second = ::pdalboost::move(p.second);
+      return *this;
+   }
+
+   template <class D, class S>
+   typename ::pdalboost::container::container_detail::disable_if_or
+      < pair &
+      , ::pdalboost::container::container_detail::is_same<T1, D>
+      , ::pdalboost::container::container_detail::is_same<T2, S>
+      >::type
+      operator=(const pair<D, S>&p)
+   {
+      first  = p.first;
+      second = p.second;
+      return *this;
+   }
+
+   template <class D, class S>
+   typename ::pdalboost::container::container_detail::disable_if_or
+      < pair &
+      , ::pdalboost::container::container_detail::is_same<T1, D>
+      , ::pdalboost::container::container_detail::is_same<T2, S>
+      >::type
+      operator=(BOOST_RV_REF_BEG pair<D, S> BOOST_RV_REF_END p)
+   {
+      first  = ::pdalboost::move(p.first);
+      second = ::pdalboost::move(p.second);
+      return *this;
+   }
+//std::pair copy assignment
+   pair& operator=(const std::pair<T1, T2> &p)
+   {
+      first  = p.first;
+      second = p.second;
+      return *this;
+   }
+
+   template <class D, class S>
+   pair& operator=(const std::pair<D, S> &p)
+   {
+      first  = ::pdalboost::move(p.first);
+      second = ::pdalboost::move(p.second);
+      return *this;
+   }
+
+   //std::pair move assignment
+   pair& operator=(BOOST_RV_REF_BEG std::pair<T1, T2> BOOST_RV_REF_END p)
+   {
+      first  = ::pdalboost::move(p.first);
+      second = ::pdalboost::move(p.second);
+      return *this;
+   }
+
+   template <class D, class S>
+   pair& operator=(BOOST_RV_REF_BEG std::pair<D, S> BOOST_RV_REF_END p)
+   {
+      first  = ::pdalboost::move(p.first);
+      second = ::pdalboost::move(p.second);
+      return *this;
+   }
+
+   //swap
+   void swap(pair& p)
+   {
+      ::pdalboost::adl_move_swap(this->first, p.first);
+      ::pdalboost::adl_move_swap(this->second, p.second);
+   }
+};
+
+template <class T1, class T2>
+inline bool operator==(const pair<T1,T2>& x, const pair<T1,T2>& y)
+{  return static_cast<bool>(x.first == y.first && x.second == y.second);  }
+
+template <class T1, class T2>
+inline bool operator< (const pair<T1,T2>& x, const pair<T1,T2>& y)
+{  return static_cast<bool>(x.first < y.first ||
+                         (!(y.first < x.first) && x.second < y.second)); }
+
+template <class T1, class T2>
+inline bool operator!=(const pair<T1,T2>& x, const pair<T1,T2>& y)
+{  return static_cast<bool>(!(x == y));  }
+
+template <class T1, class T2>
+inline bool operator> (const pair<T1,T2>& x, const pair<T1,T2>& y)
+{  return y < x;  }
+
+template <class T1, class T2>
+inline bool operator>=(const pair<T1,T2>& x, const pair<T1,T2>& y)
+{  return static_cast<bool>(!(x < y)); }
+
+template <class T1, class T2>
+inline bool operator<=(const pair<T1,T2>& x, const pair<T1,T2>& y)
+{  return static_cast<bool>(!(y < x)); }
+
+template <class T1, class T2>
+inline pair<T1, T2> make_pair(T1 x, T2 y)
+{  return pair<T1, T2>(x, y); }
+
+template <class T1, class T2>
+inline void swap(pair<T1, T2>& x, pair<T1, T2>& y)
+{  x.swap(y);  }
+
+}  //namespace container_detail {
+}  //namespace container {
+
+
+//Without this specialization recursive flat_(multi)map instantiation fails
+//because is_enum needs to instantiate the recursive pair, leading to a compilation error).
+//This breaks the cycle clearly stating that pair is not an enum avoiding any instantiation.
+template<class T>
+struct is_enum;
+
+template<class T, class U>
+struct is_enum< ::pdalboost::container::container_detail::pair<T, U> >
+{
+   static const bool value = false;
+};
+
+template <class T>
+struct is_class;
+
+//This specialization is needed to avoid instantiation of pair in
+//is_class, and allow recursive maps.
+template <class T1, class T2>
+struct is_class< ::pdalboost::container::container_detail::pair<T1, T2> >
+{
+   static const bool value = true;
+};
+
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+template<class T1, class T2>
+struct has_move_emulation_enabled< ::pdalboost::container::container_detail::pair<T1, T2> >
+{
+   static const bool value = true;
+};
+
+#endif
+
+namespace move_detail{
+
+template<class T>
+struct is_class_or_union;
+
+template <class T1, class T2>
+struct is_class_or_union< ::pdalboost::container::container_detail::pair<T1, T2> >
+//This specialization is needed to avoid instantiation of pair in
+//is_class, and allow recursive maps.
+{
+   static const bool value = true;
+};
+
+
+}  //namespace move_detail{
+
+}  //namespace pdalboost {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif   //#ifndef BOOST_CONTAINER_DETAIL_PAIR_HPP
diff --git a/vendor/pdalboost/boost/container/detail/placement_new.hpp b/vendor/pdalboost/boost/container/detail/placement_new.hpp
new file mode 100644
index 0000000..c50981f
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/placement_new.hpp
@@ -0,0 +1,30 @@
+#ifndef BOOST_CONTAINER_DETAIL_PLACEMENT_NEW_HPP
+#define BOOST_CONTAINER_DETAIL_PLACEMENT_NEW_HPP
+///////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+struct boost_container_new_t{};
+
+//avoid including <new>
+inline void *operator new(std::size_t, void *p, boost_container_new_t)
+{  return p;  }
+
+inline void operator delete(void *, void *, boost_container_new_t)
+{}
+
+#endif   //BOOST_CONTAINER_DETAIL_PLACEMENT_NEW_HPP
diff --git a/vendor/pdalboost/boost/container/detail/std_fwd.hpp b/vendor/pdalboost/boost/container/detail/std_fwd.hpp
new file mode 100644
index 0000000..0967812
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/std_fwd.hpp
@@ -0,0 +1,56 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_DETAIL_STD_FWD_HPP
+#define BOOST_CONTAINER_DETAIL_STD_FWD_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+//                        Standard predeclarations
+//////////////////////////////////////////////////////////////////////////////
+
+#include <boost/move/detail/std_ns_begin.hpp>
+BOOST_MOVE_STD_NS_BEG
+
+template<class T>
+class allocator;
+
+template<class T>
+struct less;
+
+template<class T1, class T2>
+struct pair;
+
+template<class T>
+struct char_traits;
+
+struct input_iterator_tag;
+struct forward_iterator_tag;
+struct bidirectional_iterator_tag;
+struct random_access_iterator_tag;
+
+template<class Container>
+class insert_iterator;
+
+struct allocator_arg_t;
+
+struct piecewise_construct_t;
+
+BOOST_MOVE_STD_NS_END
+#include <boost/move/detail/std_ns_end.hpp>
+
+#endif //#ifndef BOOST_CONTAINER_DETAIL_STD_FWD_HPP
diff --git a/vendor/pdalboost/boost/container/detail/to_raw_pointer.hpp b/vendor/pdalboost/boost/container/detail/to_raw_pointer.hpp
new file mode 100644
index 0000000..c69c079
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/to_raw_pointer.hpp
@@ -0,0 +1,33 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_CONTAINER_DETAIL_TO_RAW_POINTER_HPP
+#define BOOST_CONTAINER_DETAIL_TO_RAW_POINTER_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/intrusive/detail/to_raw_pointer.hpp>
+
+namespace pdalboost {
+namespace container {
+namespace container_detail {
+
+using ::pdalboost::intrusive::detail::to_raw_pointer;
+
+}  //namespace container_detail {
+}  //namespace container {
+}  //namespace pdalboost {
+
+#endif   //#ifndef BOOST_CONTAINER_DETAIL_TO_RAW_POINTER_HPP
diff --git a/vendor/pdalboost/boost/container/detail/type_traits.hpp b/vendor/pdalboost/boost/container/detail/type_traits.hpp
new file mode 100644
index 0000000..e37d659
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/type_traits.hpp
@@ -0,0 +1,70 @@
+//////////////////////////////////////////////////////////////////////////////
+// (C) Copyright John Maddock 2000.
+// (C) Copyright Ion Gaztanaga 2005-2015.
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+// The alignment and Type traits implementation comes from
+// John Maddock's TypeTraits library.
+//
+// Some other tricks come from Howard Hinnant's papers and StackOverflow replies
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_TYPE_TRAITS_HPP
+#define BOOST_CONTAINER_CONTAINER_DETAIL_TYPE_TRAITS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/move/detail/type_traits.hpp>
+
+namespace pdalboost {
+namespace container {
+namespace container_detail {
+
+using ::pdalboost::move_detail::enable_if;
+using ::pdalboost::move_detail::enable_if_and;
+using ::pdalboost::move_detail::is_same;
+using ::pdalboost::move_detail::is_different;
+using ::pdalboost::move_detail::is_pointer;
+using ::pdalboost::move_detail::add_reference;
+using ::pdalboost::move_detail::add_const;
+using ::pdalboost::move_detail::add_const_reference;
+using ::pdalboost::move_detail::remove_const;
+using ::pdalboost::move_detail::remove_reference;
+using ::pdalboost::move_detail::make_unsigned;
+using ::pdalboost::move_detail::is_floating_point;
+using ::pdalboost::move_detail::is_integral;
+using ::pdalboost::move_detail::is_enum;
+using ::pdalboost::move_detail::is_pod;
+using ::pdalboost::move_detail::is_empty;
+using ::pdalboost::move_detail::is_trivially_destructible;
+using ::pdalboost::move_detail::is_trivially_default_constructible;
+using ::pdalboost::move_detail::is_trivially_copy_constructible;
+using ::pdalboost::move_detail::is_trivially_move_constructible;
+using ::pdalboost::move_detail::is_trivially_copy_assignable;
+using ::pdalboost::move_detail::is_trivially_move_assignable;
+using ::pdalboost::move_detail::is_nothrow_default_constructible;
+using ::pdalboost::move_detail::is_nothrow_copy_constructible;
+using ::pdalboost::move_detail::is_nothrow_move_constructible;
+using ::pdalboost::move_detail::is_nothrow_copy_assignable;
+using ::pdalboost::move_detail::is_nothrow_move_assignable;
+using ::pdalboost::move_detail::is_nothrow_swappable;
+using ::pdalboost::move_detail::alignment_of;
+using ::pdalboost::move_detail::aligned_storage;
+using ::pdalboost::move_detail::nat;
+using ::pdalboost::move_detail::max_align_t;
+
+}  //namespace container_detail {
+}  //namespace container {
+}  //namespace pdalboost {
+
+#endif   //#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_TYPE_TRAITS_HPP
diff --git a/vendor/pdalboost/boost/container/detail/value_init.hpp b/vendor/pdalboost/boost/container/detail/value_init.hpp
new file mode 100644
index 0000000..250dc3f
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/value_init.hpp
@@ -0,0 +1,49 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013.
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_DETAIL_VALUE_INIT_HPP
+#define BOOST_CONTAINER_DETAIL_VALUE_INIT_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+namespace pdalboost {
+namespace container {
+namespace container_detail {
+
+template<class T>
+struct value_init
+{
+   value_init()
+      : m_t()
+   {}
+
+   operator T &() { return m_t; }
+
+   T m_t;
+};
+
+}  //namespace container_detail {
+}  //namespace container {
+}  //namespace pdalboost {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif   //#ifndef BOOST_CONTAINER_DETAIL_VALUE_INIT_HPP
diff --git a/vendor/pdalboost/boost/container/detail/variadic_templates_tools.hpp b/vendor/pdalboost/boost/container/detail/variadic_templates_tools.hpp
new file mode 100644
index 0000000..dbd8eb1
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/variadic_templates_tools.hpp
@@ -0,0 +1,158 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2008-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP
+#define BOOST_CONTAINER_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+#include <boost/container/detail/type_traits.hpp>
+#include <cstddef>   //std::size_t
+
+namespace pdalboost {
+namespace container {
+namespace container_detail {
+
+template<typename... Values>
+class tuple;
+
+template<> class tuple<>
+{};
+
+template<typename Head, typename... Tail>
+class tuple<Head, Tail...>
+   : private tuple<Tail...>
+{
+   typedef tuple<Tail...> inherited;
+
+   public:
+   tuple() { }
+
+   // implicit copy-constructor is okay
+   // Construct tuple from separate arguments.
+   tuple(typename add_const_reference<Head>::type v,
+         typename add_const_reference<Tail>::type... vtail)
+   : inherited(vtail...), m_head(v)
+   {}
+
+   // Construct tuple from another tuple.
+   template<typename... VValues>
+   tuple(const tuple<VValues...>& other)
+      : inherited(other.tail()), m_head(other.head())
+   {}
+
+   template<typename... VValues>
+   tuple& operator=(const tuple<VValues...>& other)
+   {
+      m_head = other.head();
+      tail() = other.tail();
+      return this;
+   }
+
+   typename add_reference<Head>::type head()             {  return m_head; }
+   typename add_reference<const Head>::type head() const {  return m_head; }
+
+   inherited& tail()             { return *this; }
+   const inherited& tail() const { return *this; }
+
+   protected:
+   Head m_head;
+};
+
+
+template<typename... Values>
+tuple<Values&&...> tie_forward(Values&&... values)
+{ return tuple<Values&&...>(values...); }
+
+template<int I, typename Tuple>
+struct tuple_element;
+
+template<int I, typename Head, typename... Tail>
+struct tuple_element<I, tuple<Head, Tail...> >
+{
+   typedef typename tuple_element<I-1, tuple<Tail...> >::type type;
+};
+
+template<typename Head, typename... Tail>
+struct tuple_element<0, tuple<Head, Tail...> >
+{
+   typedef Head type;
+};
+
+template<int I, typename Tuple>
+class get_impl;
+
+template<int I, typename Head, typename... Values>
+class get_impl<I, tuple<Head, Values...> >
+{
+   typedef typename tuple_element<I-1, tuple<Values...> >::type   Element;
+   typedef get_impl<I-1, tuple<Values...> >                       Next;
+
+   public:
+   typedef typename add_reference<Element>::type                  type;
+   typedef typename add_const_reference<Element>::type            const_type;
+   static type get(tuple<Head, Values...>& t)              { return Next::get(t.tail()); }
+   static const_type get(const tuple<Head, Values...>& t)  { return Next::get(t.tail()); }
+};
+
+template<typename Head, typename... Values>
+class get_impl<0, tuple<Head, Values...> >
+{
+   public:
+   typedef typename add_reference<Head>::type         type;
+   typedef typename add_const_reference<Head>::type   const_type;
+   static type       get(tuple<Head, Values...>& t)      { return t.head(); }
+   static const_type get(const tuple<Head, Values...>& t){ return t.head(); }
+};
+
+template<int I, typename... Values>
+typename get_impl<I, tuple<Values...> >::type get(tuple<Values...>& t)
+{  return get_impl<I, tuple<Values...> >::get(t);  }
+
+template<int I, typename... Values>
+typename get_impl<I, tuple<Values...> >::const_type get(const tuple<Values...>& t)
+{  return get_impl<I, tuple<Values...> >::get(t);  }
+
+////////////////////////////////////////////////////
+// Builds an index_tuple<0, 1, 2, ..., Num-1>, that will
+// be used to "unpack" into comma-separated values
+// in a function call.
+////////////////////////////////////////////////////
+
+template<int... Indexes>
+struct index_tuple{};
+
+template<std::size_t Num, typename Tuple = index_tuple<> >
+struct build_number_seq;
+
+template<std::size_t Num, int... Indexes>
+struct build_number_seq<Num, index_tuple<Indexes...> >
+   : build_number_seq<Num - 1, index_tuple<Indexes..., sizeof...(Indexes)> >
+{};
+
+template<int... Indexes>
+struct build_number_seq<0, index_tuple<Indexes...> >
+{  typedef index_tuple<Indexes...> type;  };
+
+
+}}}   //namespace pdalboost { namespace container { namespace container_detail {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif   //#ifndef BOOST_CONTAINER_DETAIL_VARIADIC_TEMPLATES_TOOLS_HPP
diff --git a/vendor/pdalboost/boost/container/detail/version_type.hpp b/vendor/pdalboost/boost/container/detail/version_type.hpp
new file mode 100644
index 0000000..ebe90b1
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/version_type.hpp
@@ -0,0 +1,110 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+//       This code comes from N1953 document by Howard E. Hinnant
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP
+#define BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+#include <boost/container/detail/mpl.hpp>
+#include <boost/container/detail/type_traits.hpp>
+
+namespace pdalboost{
+namespace container {
+namespace container_detail {
+
+template <class T, unsigned V>
+struct version_type
+    : public container_detail::integral_constant<unsigned, V>
+{
+    typedef T type;
+
+    version_type(const version_type<T, 0>&);
+};
+
+namespace impl{
+
+template <class T,
+          bool = container_detail::is_convertible<version_type<T, 0>, typename T::version>::value>
+struct extract_version
+{
+   static const unsigned value = 1;
+};
+
+template <class T>
+struct extract_version<T, true>
+{
+   static const unsigned value = T::version::value;
+};
+
+template <class T>
+struct has_version
+{
+   private:
+   struct two {char _[2];};
+   template <class U> static two test(...);
+   template <class U> static char test(const typename U::version*);
+   public:
+   static const bool value = sizeof(test<T>(0)) == 1;
+   void dummy(){}
+};
+
+template <class T, bool = has_version<T>::value>
+struct version
+{
+   static const unsigned value = 1;
+};
+
+template <class T>
+struct version<T, true>
+{
+   static const unsigned value = extract_version<T>::value;
+};
+
+}  //namespace impl
+
+template <class T>
+struct version
+   : public container_detail::integral_constant<unsigned, impl::version<T>::value>
+{};
+
+template<class T, unsigned N>
+struct is_version
+{
+   static const bool value =
+      is_same< typename version<T>::type, integral_constant<unsigned, N> >::value;
+};
+
+}  //namespace container_detail {
+
+typedef container_detail::integral_constant<unsigned, 0> version_0;
+typedef container_detail::integral_constant<unsigned, 1> version_1;
+typedef container_detail::integral_constant<unsigned, 2> version_2;
+
+}  //namespace container {
+}  //namespace pdalboost{
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif   //#define BOOST_CONTAINER_DETAIL_VERSION_TYPE_HPP
diff --git a/vendor/pdalboost/boost/container/detail/workaround.hpp b/vendor/pdalboost/boost/container/detail/workaround.hpp
new file mode 100644
index 0000000..e1f6156
--- /dev/null
+++ b/vendor/pdalboost/boost/container/detail/workaround.hpp
@@ -0,0 +1,79 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_DETAIL_WORKAROUND_HPP
+#define BOOST_CONTAINER_DETAIL_WORKAROUND_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#if    !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)\
+    && !defined(BOOST_INTERPROCESS_DISABLE_VARIADIC_TMPL)
+   #define BOOST_CONTAINER_PERFECT_FORWARDING
+#endif
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && defined(__GXX_EXPERIMENTAL_CXX0X__)\
+    && (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ < 40700)
+   #define BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST
+#endif
+
+#if !defined(BOOST_FALLTHOUGH)
+   #define BOOST_CONTAINER_FALLTHOUGH
+#else
+   #define BOOST_CONTAINER_FALLTHOUGH BOOST_FALLTHOUGH;
+#endif
+
+//Macros for documentation purposes. For code, expands to the argument
+#define BOOST_CONTAINER_IMPDEF(TYPE) TYPE
+#define BOOST_CONTAINER_SEEDOC(TYPE) TYPE
+
+//Macros for memset optimization. In most platforms
+//memsetting pointers and floatings is safe and faster.
+//
+//If your platform does not offer these guarantees
+//define these to value zero.
+#ifndef BOOST_CONTAINER_MEMZEROED_FLOATING_POINT_IS_NOT_ZERO
+#define BOOST_CONTAINER_MEMZEROED_FLOATING_POINT_IS_ZERO 1
+#endif
+
+#ifndef BOOST_CONTAINER_MEMZEROED_POINTER_IS_NOT_NULL
+#define BOOST_CONTAINER_MEMZEROED_POINTER_IS_NULL
+#endif
+
+#define BOOST_CONTAINER_DOC1ST(TYPE1, TYPE2) TYPE2
+#define BOOST_CONTAINER_I ,
+#define BOOST_CONTAINER_DOCIGN(T) T
+#define BOOST_CONTAINER_DOCONLY(T)
+
+/*
+   we need to import/export our code only if the user has specifically
+   asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost
+   libraries to be dynamically linked, or BOOST_CONTAINER_DYN_LINK
+   if they want just this one to be dynamically liked:
+*/
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_CONTAINER_DYN_LINK)
+
+   /* export if this is our own source, otherwise import: */
+   #ifdef BOOST_CONTAINER_SOURCE
+   #  define BOOST_CONTAINER_DECL BOOST_SYMBOL_EXPORT
+   #else
+   #  define BOOST_CONTAINER_DECL BOOST_SYMBOL_IMPORT
+   
+   #endif  /* BOOST_CONTAINER_SOURCE */
+#else
+   #define BOOST_CONTAINER_DECL
+#endif  /* DYN_LINK */
+
+#endif   //#ifndef BOOST_CONTAINER_DETAIL_WORKAROUND_HPP
diff --git a/vendor/pdalboost/boost/container/new_allocator.hpp b/vendor/pdalboost/boost/container/new_allocator.hpp
new file mode 100644
index 0000000..54d792a
--- /dev/null
+++ b/vendor/pdalboost/boost/container/new_allocator.hpp
@@ -0,0 +1,179 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_NEW_ALLOCATOR_HPP
+#define BOOST_CONTAINER_NEW_ALLOCATOR_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+#include <boost/container/throw_exception.hpp>
+#include <cstddef>
+
+//!\file
+
+namespace pdalboost {
+namespace container {
+
+/// @cond
+
+template<bool Value>
+struct new_allocator_bool
+{  static const bool value = Value;  };
+
+template<class T>
+class new_allocator;
+
+/// @endcond
+
+//! Specialization of new_allocator for void types
+template<>
+class new_allocator<void>
+{
+   public:
+   typedef void                                 value_type;
+   typedef void *                               pointer;
+   typedef const void*                          const_pointer;
+   //!A integral constant of type bool with value true
+   typedef BOOST_CONTAINER_IMPDEF(new_allocator_bool<true>) propagate_on_container_move_assignment;
+   //!A integral constant of type bool with value true
+   typedef BOOST_CONTAINER_IMPDEF(new_allocator_bool<true>) is_always_equal;
+   // reference-to-void members are impossible
+
+   //!Obtains an new_allocator that allocates
+   //!objects of type T2
+   template<class T2>
+   struct rebind
+   {
+      typedef new_allocator< T2> other;
+   };
+
+   //!Default constructor
+   //!Never throws
+   new_allocator() BOOST_NOEXCEPT_OR_NOTHROW
+   {}
+
+   //!Constructor from other new_allocator.
+   //!Never throws
+   new_allocator(const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW
+   {}
+
+   //!Constructor from related new_allocator.
+   //!Never throws
+   template<class T2>
+   new_allocator(const new_allocator<T2> &) BOOST_NOEXCEPT_OR_NOTHROW
+   {}
+
+   //!Swaps two allocators, does nothing
+   //!because this new_allocator is stateless
+   friend void swap(new_allocator &, new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW
+   {}
+
+   //!An new_allocator always compares to true, as memory allocated with one
+   //!instance can be deallocated by another instance
+   friend bool operator==(const new_allocator &, const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return true;   }
+
+   //!An new_allocator always compares to false, as memory allocated with one
+   //!instance can be deallocated by another instance
+   friend bool operator!=(const new_allocator &, const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return false;   }
+};
+
+
+//! This class is a reduced STL-compatible allocator that allocates memory using operator new
+template<class T>
+class new_allocator
+{
+   public:
+   typedef T                                    value_type;
+   typedef T *                                  pointer;
+   typedef const T *                            const_pointer;
+   typedef T &                                  reference;
+   typedef const T &                            const_reference;
+   typedef std::size_t                          size_type;
+   typedef std::ptrdiff_t                       difference_type;
+   //!A integral constant of type bool with value true
+   typedef BOOST_CONTAINER_IMPDEF(new_allocator_bool<true>) propagate_on_container_move_assignment;
+   //!A integral constant of type bool with value true
+   typedef BOOST_CONTAINER_IMPDEF(new_allocator_bool<true>) is_always_equal;
+
+   //!Obtains an new_allocator that allocates
+   //!objects of type T2
+   template<class T2>
+   struct rebind
+   {
+      typedef new_allocator<T2> other;
+   };
+
+   //!Default constructor
+   //!Never throws
+   new_allocator() BOOST_NOEXCEPT_OR_NOTHROW
+   {}
+
+   //!Constructor from other new_allocator.
+   //!Never throws
+   new_allocator(const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW
+   {}
+
+   //!Constructor from related new_allocator.
+   //!Never throws
+   template<class T2>
+   new_allocator(const new_allocator<T2> &) BOOST_NOEXCEPT_OR_NOTHROW
+   {}
+
+   //!Allocates memory for an array of count elements.
+   //!Throws std::bad_alloc if there is no enough memory
+   pointer allocate(size_type count)
+   {
+	   if(BOOST_UNLIKELY(count > this->max_size()))
+	      throw_bad_alloc();
+	   return static_cast<T*>(::operator new(count*sizeof(T)));
+   }
+
+   //!Deallocates previously allocated memory.
+   //!Never throws
+   void deallocate(pointer ptr, size_type) BOOST_NOEXCEPT_OR_NOTHROW
+     { ::operator delete((void*)ptr); }
+
+   //!Returns the maximum number of elements that could be allocated.
+   //!Never throws
+   size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW
+   {  return size_type(-1)/sizeof(T);   }
+
+   //!Swaps two allocators, does nothing
+   //!because this new_allocator is stateless
+   friend void swap(new_allocator &, new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW
+   {}
+
+   //!An new_allocator always compares to true, as memory allocated with one
+   //!instance can be deallocated by another instance
+   friend bool operator==(const new_allocator &, const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return true;   }
+
+   //!An new_allocator always compares to false, as memory allocated with one
+   //!instance can be deallocated by another instance
+   friend bool operator!=(const new_allocator &, const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return false;   }
+};
+
+}  //namespace container {
+}  //namespace pdalboost {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif   //BOOST_CONTAINER_ALLOCATOR_HPP
diff --git a/vendor/pdalboost/boost/container/scoped_allocator.hpp b/vendor/pdalboost/boost/container/scoped_allocator.hpp
new file mode 100644
index 0000000..ee181be
--- /dev/null
+++ b/vendor/pdalboost/boost/container/scoped_allocator.hpp
@@ -0,0 +1,907 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Pablo Halpern 2009. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2011-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_HPP
+#define BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_HPP
+
+#if defined (_MSC_VER)
+#  pragma once 
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+#include <boost/container/allocator_traits.hpp>
+#include <boost/container/scoped_allocator_fwd.hpp>
+#include <boost/container/detail/dispatch_uses_allocator.hpp>
+
+#include <boost/container/detail/mpl.hpp>
+#include <boost/container/detail/pair.hpp>
+#include <boost/container/detail/type_traits.hpp>
+
+#include <boost/move/adl_move_swap.hpp>
+#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+#include <boost/move/detail/fwd_macros.hpp>
+#endif
+#include <boost/move/utility_core.hpp>
+
+#include <boost/core/no_exceptions_support.hpp>
+
+namespace pdalboost { namespace container {
+
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+namespace container_detail {
+
+template <typename Allocator>
+struct is_scoped_allocator_imp
+{
+   typedef char yes_type;
+   struct no_type{ char dummy[2]; };
+
+   template <typename T>
+   static yes_type test(typename T::outer_allocator_type*);
+
+   template <typename T>
+   static int test(...);
+
+   static const bool value = (sizeof(yes_type) == sizeof(test<Allocator>(0)));
+};
+
+template<class MaybeScopedAlloc, bool = is_scoped_allocator_imp<MaybeScopedAlloc>::value >
+struct outermost_allocator_type_impl
+{
+   typedef typename MaybeScopedAlloc::outer_allocator_type outer_type;
+   typedef typename outermost_allocator_type_impl<outer_type>::type type;
+};
+
+template<class MaybeScopedAlloc>
+struct outermost_allocator_type_impl<MaybeScopedAlloc, false>
+{
+   typedef MaybeScopedAlloc type;
+};
+
+template<class MaybeScopedAlloc, bool = is_scoped_allocator_imp<MaybeScopedAlloc>::value >
+struct outermost_allocator_imp
+{
+   typedef MaybeScopedAlloc type;
+
+   static type &get(MaybeScopedAlloc &a)
+   {  return a;  }
+
+   static const type &get(const MaybeScopedAlloc &a)
+   {  return a;  }
+};
+
+template<class MaybeScopedAlloc>
+struct outermost_allocator_imp<MaybeScopedAlloc, true>
+{
+   typedef typename MaybeScopedAlloc::outer_allocator_type outer_type;
+   typedef typename outermost_allocator_type_impl<outer_type>::type type;
+
+   static type &get(MaybeScopedAlloc &a)
+   {  return outermost_allocator_imp<outer_type>::get(a.outer_allocator());  }
+
+   static const type &get(const MaybeScopedAlloc &a)
+   {  return outermost_allocator_imp<outer_type>::get(a.outer_allocator());  }
+};
+
+}  //namespace container_detail {
+
+template <typename Allocator>
+struct is_scoped_allocator
+   : container_detail::is_scoped_allocator_imp<Allocator>
+{};
+
+template <typename Allocator>
+struct outermost_allocator
+   : container_detail::outermost_allocator_imp<Allocator>
+{};
+
+template <typename Allocator>
+typename outermost_allocator<Allocator>::type &
+   get_outermost_allocator(Allocator &a)
+{  return outermost_allocator<Allocator>::get(a);   }
+
+template <typename Allocator>
+const typename outermost_allocator<Allocator>::type &
+   get_outermost_allocator(const Allocator &a)
+{  return outermost_allocator<Allocator>::get(a);   }
+
+namespace container_detail {
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+template <typename OuterAlloc, class ...InnerAllocs>
+class scoped_allocator_adaptor_base
+   : public OuterAlloc
+{
+   typedef allocator_traits<OuterAlloc> outer_traits_type;
+   BOOST_COPYABLE_AND_MOVABLE(scoped_allocator_adaptor_base)
+
+   public:
+   template <class OuterA2>
+   struct rebind_base
+   {
+      typedef scoped_allocator_adaptor_base<OuterA2, InnerAllocs...> other;
+   };
+
+   typedef OuterAlloc outer_allocator_type;
+   typedef scoped_allocator_adaptor<InnerAllocs...>   inner_allocator_type;
+   typedef allocator_traits<inner_allocator_type>     inner_traits_type;
+   typedef scoped_allocator_adaptor
+      <OuterAlloc, InnerAllocs...>                    scoped_allocator_type;
+   typedef container_detail::bool_<
+      outer_traits_type::propagate_on_container_copy_assignment::value ||
+      inner_allocator_type::propagate_on_container_copy_assignment::value
+      > propagate_on_container_copy_assignment;
+   typedef container_detail::bool_<
+      outer_traits_type::propagate_on_container_move_assignment::value ||
+      inner_allocator_type::propagate_on_container_move_assignment::value
+      > propagate_on_container_move_assignment;
+   typedef container_detail::bool_<
+      outer_traits_type::propagate_on_container_swap::value ||
+      inner_allocator_type::propagate_on_container_swap::value
+      > propagate_on_container_swap;
+   typedef container_detail::bool_<
+      outer_traits_type::is_always_equal::value &&
+      inner_allocator_type::is_always_equal::value
+      > is_always_equal;
+
+   scoped_allocator_adaptor_base()
+      {}
+
+   template <class OuterA2>
+   scoped_allocator_adaptor_base(BOOST_FWD_REF(OuterA2) outerAlloc, const InnerAllocs &...args)
+      : outer_allocator_type(::pdalboost::forward<OuterA2>(outerAlloc))
+      , m_inner(args...)
+      {}
+
+   scoped_allocator_adaptor_base(const scoped_allocator_adaptor_base& other)
+      : outer_allocator_type(other.outer_allocator())
+      , m_inner(other.inner_allocator())
+      {}
+
+   scoped_allocator_adaptor_base(BOOST_RV_REF(scoped_allocator_adaptor_base) other)
+      : outer_allocator_type(::pdalboost::move(other.outer_allocator()))
+      , m_inner(::pdalboost::move(other.inner_allocator()))
+      {}
+
+   template <class OuterA2>
+   scoped_allocator_adaptor_base
+      (const scoped_allocator_adaptor_base<OuterA2, InnerAllocs...>& other)
+      : outer_allocator_type(other.outer_allocator())
+      , m_inner(other.inner_allocator())
+      {}
+
+   template <class OuterA2>
+   scoped_allocator_adaptor_base
+      (BOOST_RV_REF_BEG scoped_allocator_adaptor_base
+         <OuterA2, InnerAllocs...> BOOST_RV_REF_END other)
+      : outer_allocator_type(other.outer_allocator())
+      , m_inner(other.inner_allocator())
+      {}
+
+   public:
+   struct internal_type_t{};
+
+   template <class OuterA2>
+   scoped_allocator_adaptor_base
+      ( internal_type_t
+      , BOOST_FWD_REF(OuterA2) outerAlloc
+      , const inner_allocator_type &inner)
+      : outer_allocator_type(::pdalboost::forward<OuterA2>(outerAlloc))
+      , m_inner(inner)
+   {}
+
+   public:
+
+   scoped_allocator_adaptor_base &operator=
+      (BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor_base) other)
+   {
+      outer_allocator_type::operator=(other.outer_allocator());
+      m_inner = other.inner_allocator();
+      return *this;
+   }
+
+   scoped_allocator_adaptor_base &operator=(BOOST_RV_REF(scoped_allocator_adaptor_base) other)
+   {
+      outer_allocator_type::operator=(pdalboost::move(other.outer_allocator()));
+      m_inner = ::pdalboost::move(other.inner_allocator());
+      return *this;
+   }
+
+   void swap(scoped_allocator_adaptor_base &r)
+   {
+      pdalboost::adl_move_swap(this->outer_allocator(), r.outer_allocator());
+      pdalboost::adl_move_swap(this->m_inner, r.inner_allocator());
+   }
+
+   friend void swap(scoped_allocator_adaptor_base &l, scoped_allocator_adaptor_base &r)
+   {  l.swap(r);  }
+
+   inner_allocator_type&       inner_allocator() BOOST_NOEXCEPT_OR_NOTHROW
+      { return m_inner; }
+
+   inner_allocator_type const& inner_allocator() const BOOST_NOEXCEPT_OR_NOTHROW
+      { return m_inner; }
+
+   outer_allocator_type      & outer_allocator() BOOST_NOEXCEPT_OR_NOTHROW
+      { return static_cast<outer_allocator_type&>(*this); }
+
+   const outer_allocator_type &outer_allocator() const BOOST_NOEXCEPT_OR_NOTHROW
+      { return static_cast<const outer_allocator_type&>(*this); }
+
+   scoped_allocator_type select_on_container_copy_construction() const
+   {
+      return scoped_allocator_type
+         (internal_type_t()
+         ,outer_traits_type::select_on_container_copy_construction(this->outer_allocator())
+         ,inner_traits_type::select_on_container_copy_construction(this->inner_allocator())
+         );
+   }
+
+   private:
+   inner_allocator_type m_inner;
+};
+
+#else //#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+//Let's add a dummy first template parameter to allow creating
+//specializations up to maximum InnerAlloc count
+template <typename OuterAlloc, bool Dummy, BOOST_MOVE_CLASSDFLT9>
+class scoped_allocator_adaptor_base;
+
+//Specializations for the adaptor with InnerAlloc allocators
+
+#define BOOST_CONTAINER_SCOPED_ALLOCATOR_ADAPTOR_BASE_CODE(N)\
+template <typename OuterAlloc BOOST_MOVE_I##N BOOST_MOVE_CLASS##N>\
+class scoped_allocator_adaptor_base<OuterAlloc, true, BOOST_MOVE_TARG##N>\
+   : public OuterAlloc\
+{\
+   typedef allocator_traits<OuterAlloc> outer_traits_type;\
+   BOOST_COPYABLE_AND_MOVABLE(scoped_allocator_adaptor_base)\
+   \
+   public:\
+   template <class OuterA2>\
+   struct rebind_base\
+   {\
+      typedef scoped_allocator_adaptor_base<OuterA2, true, BOOST_MOVE_TARG##N> other;\
+   };\
+   \
+   typedef OuterAlloc outer_allocator_type;\
+   typedef scoped_allocator_adaptor<BOOST_MOVE_TARG##N> inner_allocator_type;\
+   typedef scoped_allocator_adaptor<OuterAlloc, BOOST_MOVE_TARG##N> scoped_allocator_type;\
+   typedef allocator_traits<inner_allocator_type> inner_traits_type;\
+   typedef container_detail::bool_<\
+      outer_traits_type::propagate_on_container_copy_assignment::value ||\
+      inner_allocator_type::propagate_on_container_copy_assignment::value\
+      > propagate_on_container_copy_assignment;\
+   typedef container_detail::bool_<\
+      outer_traits_type::propagate_on_container_move_assignment::value ||\
+      inner_allocator_type::propagate_on_container_move_assignment::value\
+      > propagate_on_container_move_assignment;\
+   typedef container_detail::bool_<\
+      outer_traits_type::propagate_on_container_swap::value ||\
+      inner_allocator_type::propagate_on_container_swap::value\
+      > propagate_on_container_swap;\
+   \
+   typedef container_detail::bool_<\
+      outer_traits_type::is_always_equal::value &&\
+      inner_allocator_type::is_always_equal::value\
+      > is_always_equal;\
+   \
+   scoped_allocator_adaptor_base(){}\
+   \
+   template <class OuterA2>\
+   scoped_allocator_adaptor_base(BOOST_FWD_REF(OuterA2) outerAlloc, BOOST_MOVE_CREF##N)\
+      : outer_allocator_type(::pdalboost::forward<OuterA2>(outerAlloc))\
+      , m_inner(BOOST_MOVE_ARG##N)\
+      {}\
+   \
+   scoped_allocator_adaptor_base(const scoped_allocator_adaptor_base& other)\
+      : outer_allocator_type(other.outer_allocator())\
+      , m_inner(other.inner_allocator())\
+      {}\
+   \
+   scoped_allocator_adaptor_base(BOOST_RV_REF(scoped_allocator_adaptor_base) other)\
+      : outer_allocator_type(::pdalboost::move(other.outer_allocator()))\
+      , m_inner(::pdalboost::move(other.inner_allocator()))\
+      {}\
+   \
+   template <class OuterA2>\
+   scoped_allocator_adaptor_base\
+      (const scoped_allocator_adaptor_base<OuterA2, true, BOOST_MOVE_TARG##N>& other)\
+      : outer_allocator_type(other.outer_allocator())\
+      , m_inner(other.inner_allocator())\
+      {}\
+   \
+   template <class OuterA2>\
+   scoped_allocator_adaptor_base\
+      (BOOST_RV_REF_BEG scoped_allocator_adaptor_base<OuterA2, true, BOOST_MOVE_TARG##N> BOOST_RV_REF_END other)\
+      : outer_allocator_type(other.outer_allocator())\
+      , m_inner(other.inner_allocator())\
+      {}\
+   \
+   public:\
+   struct internal_type_t{};\
+   \
+   template <class OuterA2>\
+   scoped_allocator_adaptor_base\
+      ( internal_type_t, BOOST_FWD_REF(OuterA2) outerAlloc, const inner_allocator_type &inner)\
+      : outer_allocator_type(::pdalboost::forward<OuterA2>(outerAlloc))\
+      , m_inner(inner)\
+   {}\
+   \
+   public:\
+   scoped_allocator_adaptor_base &operator=\
+      (BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor_base) other)\
+   {\
+      outer_allocator_type::operator=(other.outer_allocator());\
+      m_inner = other.inner_allocator();\
+      return *this;\
+   }\
+   \
+   scoped_allocator_adaptor_base &operator=(BOOST_RV_REF(scoped_allocator_adaptor_base) other)\
+   {\
+      outer_allocator_type::operator=(pdalboost::move(other.outer_allocator()));\
+      m_inner = ::pdalboost::move(other.inner_allocator());\
+      return *this;\
+   }\
+   \
+   void swap(scoped_allocator_adaptor_base &r)\
+   {\
+      pdalboost::adl_move_swap(this->outer_allocator(), r.outer_allocator());\
+      pdalboost::adl_move_swap(this->m_inner, r.inner_allocator());\
+   }\
+   \
+   friend void swap(scoped_allocator_adaptor_base &l, scoped_allocator_adaptor_base &r)\
+   {  l.swap(r);  }\
+   \
+   inner_allocator_type&       inner_allocator()\
+      { return m_inner; }\
+   \
+   inner_allocator_type const& inner_allocator() const\
+      { return m_inner; }\
+   \
+   outer_allocator_type      & outer_allocator()\
+      { return static_cast<outer_allocator_type&>(*this); }\
+   \
+   const outer_allocator_type &outer_allocator() const\
+      { return static_cast<const outer_allocator_type&>(*this); }\
+   \
+   scoped_allocator_type select_on_container_copy_construction() const\
+   {\
+      return scoped_allocator_type\
+         (internal_type_t()\
+         ,outer_traits_type::select_on_container_copy_construction(this->outer_allocator())\
+         ,inner_traits_type::select_on_container_copy_construction(this->inner_allocator())\
+         );\
+   }\
+   private:\
+   inner_allocator_type m_inner;\
+};\
+//!
+BOOST_MOVE_ITERATE_1TO9(BOOST_CONTAINER_SCOPED_ALLOCATOR_ADAPTOR_BASE_CODE)
+#undef BOOST_CONTAINER_SCOPED_ALLOCATOR_ADAPTOR_BASE_CODE
+
+#endif   //#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+   #define BOOST_CONTAINER_SCOPEDALLOC_DUMMYTRUE      ,true
+   #define BOOST_CONTAINER_SCOPEDALLOC_ALLINNER       BOOST_MOVE_TARG9
+   #define BOOST_CONTAINER_SCOPEDALLOC_ALLINNERCLASS  BOOST_MOVE_CLASS9
+#else
+   #define BOOST_CONTAINER_SCOPEDALLOC_DUMMYTRUE
+   #define BOOST_CONTAINER_SCOPEDALLOC_ALLINNER       InnerAllocs...
+   #define BOOST_CONTAINER_SCOPEDALLOC_ALLINNERCLASS  typename... InnerAllocs
+#endif
+
+//Specialization for adaptor without any InnerAlloc
+template <typename OuterAlloc>
+class scoped_allocator_adaptor_base< OuterAlloc BOOST_CONTAINER_SCOPEDALLOC_DUMMYTRUE>
+   : public OuterAlloc
+{
+   BOOST_COPYABLE_AND_MOVABLE(scoped_allocator_adaptor_base)
+   public:
+
+   template <class U>
+   struct rebind_base
+   {
+      typedef scoped_allocator_adaptor_base
+         <typename allocator_traits<OuterAlloc>::template portable_rebind_alloc<U>::type
+         BOOST_CONTAINER_SCOPEDALLOC_DUMMYTRUE > other;
+   };
+
+   typedef OuterAlloc                           outer_allocator_type;
+   typedef allocator_traits<OuterAlloc>         outer_traits_type;
+   typedef scoped_allocator_adaptor<OuterAlloc> inner_allocator_type;
+   typedef inner_allocator_type                 scoped_allocator_type;
+   typedef allocator_traits<inner_allocator_type>   inner_traits_type;
+   typedef typename outer_traits_type::
+      propagate_on_container_copy_assignment    propagate_on_container_copy_assignment;
+   typedef typename outer_traits_type::
+      propagate_on_container_move_assignment    propagate_on_container_move_assignment;
+   typedef typename outer_traits_type::
+      propagate_on_container_swap               propagate_on_container_swap;
+   typedef typename outer_traits_type::
+      is_always_equal                           is_always_equal;
+
+   scoped_allocator_adaptor_base()
+      {}
+
+   template <class OuterA2>
+   scoped_allocator_adaptor_base(BOOST_FWD_REF(OuterA2) outerAlloc)
+      : outer_allocator_type(::pdalboost::forward<OuterA2>(outerAlloc))
+      {}
+
+   scoped_allocator_adaptor_base(const scoped_allocator_adaptor_base& other)
+      : outer_allocator_type(other.outer_allocator())
+      {}
+
+   scoped_allocator_adaptor_base(BOOST_RV_REF(scoped_allocator_adaptor_base) other)
+      : outer_allocator_type(::pdalboost::move(other.outer_allocator()))
+      {}
+
+   template <class OuterA2>
+   scoped_allocator_adaptor_base
+      (const scoped_allocator_adaptor_base<OuterA2 BOOST_CONTAINER_SCOPEDALLOC_DUMMYTRUE>& other)
+      : outer_allocator_type(other.outer_allocator())
+      {}
+
+   template <class OuterA2>
+   scoped_allocator_adaptor_base
+      (BOOST_RV_REF_BEG scoped_allocator_adaptor_base<OuterA2 BOOST_CONTAINER_SCOPEDALLOC_DUMMYTRUE> BOOST_RV_REF_END other)
+      : outer_allocator_type(other.outer_allocator())
+      {}
+
+   public:
+   struct internal_type_t{};
+
+   template <class OuterA2>
+   scoped_allocator_adaptor_base(internal_type_t, BOOST_FWD_REF(OuterA2) outerAlloc, const inner_allocator_type &)
+      : outer_allocator_type(::pdalboost::forward<OuterA2>(outerAlloc))
+      {}
+
+   public:
+   scoped_allocator_adaptor_base &operator=(BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor_base) other)
+   {
+      outer_allocator_type::operator=(other.outer_allocator());
+      return *this;
+   }
+
+   scoped_allocator_adaptor_base &operator=(BOOST_RV_REF(scoped_allocator_adaptor_base) other)
+   {
+      outer_allocator_type::operator=(pdalboost::move(other.outer_allocator()));
+      return *this;
+   }
+
+   void swap(scoped_allocator_adaptor_base &r)
+   {
+      pdalboost::adl_move_swap(this->outer_allocator(), r.outer_allocator());
+   }
+
+   friend void swap(scoped_allocator_adaptor_base &l, scoped_allocator_adaptor_base &r)
+   {  l.swap(r);  }
+
+   inner_allocator_type&       inner_allocator()
+      { return static_cast<inner_allocator_type&>(*this); }
+
+   inner_allocator_type const& inner_allocator() const
+      { return static_cast<const inner_allocator_type&>(*this); }
+
+   outer_allocator_type      & outer_allocator()
+      { return static_cast<outer_allocator_type&>(*this); }
+
+   const outer_allocator_type &outer_allocator() const
+      { return static_cast<const outer_allocator_type&>(*this); }
+
+   scoped_allocator_type select_on_container_copy_construction() const
+   {
+      return scoped_allocator_type
+         (internal_type_t()
+         ,outer_traits_type::select_on_container_copy_construction(this->outer_allocator())
+         //Don't use inner_traits_type::select_on_container_copy_construction(this->inner_allocator())
+         //as inner_allocator() is equal to *this and that would trigger an infinite loop
+         , this->inner_allocator()
+         );
+   }
+};
+
+}  //namespace container_detail {
+
+#endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+//Scoped allocator
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
+#if !defined(BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST)
+
+//! This class is a C++03-compatible implementation of std::scoped_allocator_adaptor.
+//! The class template scoped_allocator_adaptor is an allocator template that specifies
+//! the memory resource (the outer allocator) to be used by a container (as any other
+//! allocator does) and also specifies an inner allocator resource to be passed to
+//! the constructor of every element within the container.
+//!
+//! This adaptor is
+//! instantiated with one outer and zero or more inner allocator types. If
+//! instantiated with only one allocator type, the inner allocator becomes the
+//! scoped_allocator_adaptor itself, thus using the same allocator resource for the
+//! container and every element within the container and, if the elements themselves
+//! are containers, each of their elements recursively. If instantiated with more than
+//! one allocator, the first allocator is the outer allocator for use by the container,
+//! the second allocator is passed to the constructors of the container's elements,
+//! and, if the elements themselves are containers, the third allocator is passed to
+//! the elements' elements, and so on. If containers are nested to a depth greater
+//! than the number of allocators, the last allocator is used repeatedly, as in the
+//! single-allocator case, for any remaining recursions.
+//!
+//! [<b>Note</b>: The
+//! scoped_allocator_adaptor is derived from the outer allocator type so it can be
+//! substituted for the outer allocator type in most expressions. -end note]
+//!
+//! In the construct member functions, <code>OUTERMOST(x)</code> is x if x does not have
+//! an <code>outer_allocator()</code> member function and
+//! <code>OUTERMOST(x.outer_allocator())</code> otherwise; <code>OUTERMOST_ALLOC_TRAITS(x)</code> is
+//! <code>allocator_traits<decltype(OUTERMOST(x))></code>.
+//!
+//! [<b>Note</b>: <code>OUTERMOST(x)</code> and
+//! <code>OUTERMOST_ALLOC_TRAITS(x)</code> are recursive operations. It is incumbent upon
+//! the definition of <code>outer_allocator()</code> to ensure that the recursion terminates.
+//! It will terminate for all instantiations of scoped_allocator_adaptor. -end note]
+template <typename OuterAlloc, typename ...InnerAllocs>
+class scoped_allocator_adaptor
+
+#else // #if !defined(BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST)
+
+template <typename OuterAlloc, typename ...InnerAllocs>
+class scoped_allocator_adaptor<OuterAlloc, InnerAllocs...>
+
+#endif   // #if !defined(BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST)
+
+#else // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
+template <typename OuterAlloc, BOOST_MOVE_CLASS9>
+class scoped_allocator_adaptor
+#endif
+
+   : public container_detail::scoped_allocator_adaptor_base
+         <OuterAlloc BOOST_CONTAINER_SCOPEDALLOC_DUMMYTRUE, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER>
+{
+   BOOST_COPYABLE_AND_MOVABLE(scoped_allocator_adaptor)
+
+   public:
+   #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+   typedef container_detail::scoped_allocator_adaptor_base
+      <OuterAlloc BOOST_CONTAINER_SCOPEDALLOC_DUMMYTRUE, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER> base_type;
+   typedef typename base_type::internal_type_t              internal_type_t;
+   #endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+   typedef OuterAlloc                                       outer_allocator_type;
+   //! Type: For exposition only
+   //!
+   typedef allocator_traits<OuterAlloc>                     outer_traits_type;
+   //! Type: <code>scoped_allocator_adaptor<OuterAlloc></code> if <code>sizeof...(InnerAllocs)</code> is zero; otherwise,
+   //! <code>scoped_allocator_adaptor<InnerAllocs...></code>.
+   typedef typename base_type::inner_allocator_type         inner_allocator_type;
+   typedef allocator_traits<inner_allocator_type>           inner_traits_type;
+   typedef typename outer_traits_type::value_type           value_type;
+   typedef typename outer_traits_type::size_type            size_type;
+   typedef typename outer_traits_type::difference_type      difference_type;
+   typedef typename outer_traits_type::pointer              pointer;
+   typedef typename outer_traits_type::const_pointer        const_pointer;
+   typedef typename outer_traits_type::void_pointer         void_pointer;
+   typedef typename outer_traits_type::const_void_pointer   const_void_pointer;
+   //! Type: A type with a constant boolean <code>value</code> == true if
+   //!`allocator_traits<Allocator>:: propagate_on_container_copy_assignment::value` is
+   //! true for any <code>Allocator</code> in the set of <code>OuterAlloc</code> and <code>InnerAllocs...</code>, false otherwise.
+   typedef typename base_type::
+      propagate_on_container_copy_assignment                propagate_on_container_copy_assignment;
+   //! Type: A type with a constant boolean <code>value</code> == true if
+   //!`allocator_traits<Allocator>:: propagate_on_container_move_assignment::value` is
+   //! true for any <code>Allocator</code> in the set of <code>OuterAlloc</code> and <code>InnerAllocs...</code>, false otherwise.
+   typedef typename base_type::
+      propagate_on_container_move_assignment                propagate_on_container_move_assignment;
+
+   //! Type: A type with a constant boolean <code>value</code> == true if
+   //! `allocator_traits<Allocator>:: propagate_on_container_swap::value` is
+   //! true for any <code>Allocator</code> in the set of <code>OuterAlloc</code> and <code>InnerAllocs...</code>, false otherwise.
+   typedef typename base_type::
+      propagate_on_container_swap                           propagate_on_container_swap;
+
+   //! Type: A type with a constant boolean <code>value</code> == true if
+   //!`allocator_traits<Allocator>:: is_always_equal::value` is
+   //! true for all <code>Allocator</code> in the set of <code>OuterAlloc</code> and <code>InnerAllocs...</code>, false otherwise.
+   typedef typename base_type::
+      is_always_equal                           is_always_equal;
+
+   //! Type: Rebinds scoped allocator to
+   //!    <code>typedef scoped_allocator_adaptor
+   //!      < typename outer_traits_type::template portable_rebind_alloc<U>::type
+   //!      , InnerAllocs... ></code>
+   template <class U>
+   struct rebind
+   {
+      typedef scoped_allocator_adaptor
+         < typename outer_traits_type::template portable_rebind_alloc<U>::type
+         , BOOST_CONTAINER_SCOPEDALLOC_ALLINNER> other;
+   };
+
+   //! <b>Effects</b>: value-initializes the OuterAlloc base class
+   //! and the inner allocator object.
+   scoped_allocator_adaptor()
+      {}
+
+   ~scoped_allocator_adaptor()
+      {}
+
+   //! <b>Effects</b>: initializes each allocator within the adaptor with
+   //! the corresponding allocator from other.
+   scoped_allocator_adaptor(const scoped_allocator_adaptor& other)
+      : base_type(other.base())
+      {}
+
+   //! <b>Effects</b>: move constructs each allocator within the adaptor with
+   //! the corresponding allocator from other.
+   scoped_allocator_adaptor(BOOST_RV_REF(scoped_allocator_adaptor) other)
+      : base_type(::pdalboost::move(other.base()))
+      {}
+
+   #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
+   //! <b>Requires</b>: OuterAlloc shall be constructible from OuterA2.
+   //!
+   //! <b>Effects</b>: initializes the OuterAlloc base class with pdalboost::forward<OuterA2>(outerAlloc) and inner
+   //! with innerAllocs...(hence recursively initializing each allocator within the adaptor with the
+   //! corresponding allocator from the argument list).
+   template <class OuterA2>
+   scoped_allocator_adaptor(BOOST_FWD_REF(OuterA2) outerAlloc, const InnerAllocs & ...innerAllocs)
+      : base_type(::pdalboost::forward<OuterA2>(outerAlloc), innerAllocs...)
+      {}
+   #else // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
+   #define BOOST_CONTAINER_SCOPED_ALLOCATOR_ADAPTOR_RELATED_ALLOCATOR_CONSTRUCTOR_CODE(N)\
+   template <class OuterA2>\
+   scoped_allocator_adaptor(BOOST_FWD_REF(OuterA2) outerAlloc BOOST_MOVE_I##N BOOST_MOVE_CREF##N)\
+      : base_type(::pdalboost::forward<OuterA2>(outerAlloc) BOOST_MOVE_I##N BOOST_MOVE_ARG##N)\
+      {}\
+   //
+   BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_SCOPED_ALLOCATOR_ADAPTOR_RELATED_ALLOCATOR_CONSTRUCTOR_CODE)
+   #undef BOOST_CONTAINER_SCOPED_ALLOCATOR_ADAPTOR_RELATED_ALLOCATOR_CONSTRUCTOR_CODE
+
+   #endif   // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
+   //! <b>Requires</b>: OuterAlloc shall be constructible from OuterA2.
+   //!
+   //! <b>Effects</b>: initializes each allocator within the adaptor with the corresponding allocator from other.
+   template <class OuterA2>
+   scoped_allocator_adaptor(const scoped_allocator_adaptor<OuterA2, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER> &other)
+      : base_type(other.base())
+      {}
+
+   //! <b>Requires</b>: OuterAlloc shall be constructible from OuterA2.
+   //!
+   //! <b>Effects</b>: initializes each allocator within the adaptor with the corresponding allocator
+   //! rvalue from other.
+   template <class OuterA2>
+   scoped_allocator_adaptor(BOOST_RV_REF_BEG scoped_allocator_adaptor
+      <OuterA2, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER> BOOST_RV_REF_END other)
+      : base_type(::pdalboost::move(other.base()))
+      {}
+
+   scoped_allocator_adaptor &operator=(BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor) other)
+   {  return static_cast<scoped_allocator_adaptor&>(base_type::operator=(static_cast<const base_type &>(other))); }
+
+   scoped_allocator_adaptor &operator=(BOOST_RV_REF(scoped_allocator_adaptor) other)
+   {  return static_cast<scoped_allocator_adaptor&>(base_type::operator=(pdalboost::move(other.base()))); }
+
+   #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
+   //! <b>Effects</b>: swaps *this with r.
+   //!
+   void swap(scoped_allocator_adaptor &r);
+
+   //! <b>Effects</b>: swaps *this with r.
+   //!
+   friend void swap(scoped_allocator_adaptor &l, scoped_allocator_adaptor &r);
+
+   //! <b>Returns</b>:
+   //!   <code>static_cast<OuterAlloc&>(*this)</code>.
+   outer_allocator_type      & outer_allocator() BOOST_NOEXCEPT_OR_NOTHROW;
+
+   //! <b>Returns</b>:
+   //!   <code>static_cast<const OuterAlloc&>(*this)</code>.
+   const outer_allocator_type &outer_allocator() const BOOST_NOEXCEPT_OR_NOTHROW;
+
+   //! <b>Returns</b>:
+   //!   *this if <code>sizeof...(InnerAllocs)</code> is zero; otherwise, inner.
+   inner_allocator_type&       inner_allocator() BOOST_NOEXCEPT_OR_NOTHROW;
+
+   //! <b>Returns</b>:
+   //!   *this if <code>sizeof...(InnerAllocs)</code> is zero; otherwise, inner.
+   inner_allocator_type const& inner_allocator() const BOOST_NOEXCEPT_OR_NOTHROW;
+
+   #endif   //BOOST_CONTAINER_DOXYGEN_INVOKED
+
+   //! <b>Returns</b>:
+   //!   <code>allocator_traits<OuterAlloc>:: max_size(outer_allocator())</code>.
+   size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW
+   {  return outer_traits_type::max_size(this->outer_allocator());   }
+
+   //! <b>Effects</b>:
+   //!   calls <code>OUTERMOST_ALLOC_TRAITS(*this):: destroy(OUTERMOST(*this), p)</code>.
+   template <class T>
+   void destroy(T* p) BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      allocator_traits<typename outermost_allocator<OuterAlloc>::type>
+         ::destroy(get_outermost_allocator(this->outer_allocator()), p);
+   }
+
+   //! <b>Returns</b>:
+   //! <code>allocator_traits<OuterAlloc>::allocate(outer_allocator(), n)</code>.
+   pointer allocate(size_type n)
+   {  return outer_traits_type::allocate(this->outer_allocator(), n);   }
+
+   //! <b>Returns</b>:
+   //! <code>allocator_traits<OuterAlloc>::allocate(outer_allocator(), n, hint)</code>.
+   pointer allocate(size_type n, const_void_pointer hint)
+   {  return outer_traits_type::allocate(this->outer_allocator(), n, hint);   }
+
+   //! <b>Effects</b>:
+   //! <code>allocator_traits<OuterAlloc>::deallocate(outer_allocator(), p, n)</code>.
+   void deallocate(pointer p, size_type n)
+   {  outer_traits_type::deallocate(this->outer_allocator(), p, n);  }
+
+   #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
+   //! <b>Returns</b>: A new scoped_allocator_adaptor object where each allocator
+   //! Allocator in the adaptor is initialized from the result of calling
+   //! <code>allocator_traits<Allocator>::select_on_container_copy_construction()</code> on
+   //! the corresponding allocator in *this.
+   scoped_allocator_adaptor select_on_container_copy_construction() const;
+   #endif   //BOOST_CONTAINER_DOXYGEN_INVOKED
+
+   #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+   base_type &base()             { return *this; }
+
+   const base_type &base() const { return *this; }
+   #endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+   #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
+   //! <b>Effects</b>:
+   //! 1) If <code>uses_allocator<T, inner_allocator_type>::value</code> is false calls
+   //!    <code>OUTERMOST_ALLOC_TRAITS(*this)::
+   //!       construct(OUTERMOST(*this), p, std::forward<Args>(args)...)</code>.
+   //!
+   //! 2) Otherwise, if <code>uses_allocator<T, inner_allocator_type>::value</code> is true and
+   //!    <code>is_constructible<T, allocator_arg_t, inner_allocator_type, Args...>:: value</code> is true, calls
+   //!    <code>OUTERMOST_ALLOC_TRAITS(*this):: construct(OUTERMOST(*this), p, allocator_arg,
+   //!    inner_allocator(), std::forward<Args>(args)...)</code>.
+   //!
+   //! [<b>Note</b>: In compilers without advanced decltype SFINAE support, <code>is_constructible</code> can't
+   //! be implemented so that condition will be replaced by
+   //! constructible_with_allocator_prefix<T>::value. -end note]
+   //!
+   //! 3) Otherwise, if uses_allocator<T, inner_allocator_type>::value is true and
+   //!    <code>is_constructible<T, Args..., inner_allocator_type>:: value</code> is true, calls
+   //!    <code>OUTERMOST_ALLOC_TRAITS(*this):: construct(OUTERMOST(*this), p,
+   //!    std::forward<Args>(args)..., inner_allocator())</code>.
+   //!
+   //! [<b>Note</b>: In compilers without advanced decltype SFINAE support, <code>is_constructible</code> can't be
+   //! implemented so that condition will be replaced by
+   //! <code>constructible_with_allocator_suffix<T>:: value</code>. -end note]
+   //!
+   //! 4) Otherwise, the program is ill-formed.
+   //!
+   //! [<b>Note</b>: An error will result if <code>uses_allocator</code> evaluates
+   //! to true but the specific constructor does not take an allocator. This definition prevents a silent
+   //! failure to pass an inner allocator to a contained element. -end note]
+   template < typename T, class ...Args>
+   void construct(T* p, BOOST_FWD_REF(Args)...args)
+   {
+      container_detail::dispatch_uses_allocator
+         ( (get_outermost_allocator)(this->outer_allocator())
+         , this->inner_allocator(), p, ::pdalboost::forward<Args>(args)...);
+   }
+
+   #else // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
+   //Disable this overload if the first argument is pair as some compilers have
+   //overload selection problems when the first parameter is a pair.
+   #define BOOST_CONTAINER_SCOPED_ALLOCATOR_CONSTRUCT_CODE(N) \
+   template < typename T BOOST_MOVE_I##N BOOST_MOVE_CLASSQ##N >\
+   void construct(T* p BOOST_MOVE_I##N BOOST_MOVE_UREFQ##N)\
+   {\
+      container_detail::dispatch_uses_allocator\
+         ( (get_outermost_allocator)(this->outer_allocator())\
+         , this->inner_allocator(), p BOOST_MOVE_I##N BOOST_MOVE_FWDQ##N);\
+   }\
+   //
+   BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_SCOPED_ALLOCATOR_CONSTRUCT_CODE)
+   #undef BOOST_CONTAINER_SCOPED_ALLOCATOR_CONSTRUCT_CODE
+
+   #endif   // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
+   #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+   public:
+   //Internal function
+   template <class OuterA2>
+   scoped_allocator_adaptor(internal_type_t, BOOST_FWD_REF(OuterA2) outer, const inner_allocator_type& inner)
+      : base_type(internal_type_t(), ::pdalboost::forward<OuterA2>(outer), inner)
+   {}
+
+   #endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+};
+
+/// @cond
+
+template<bool ZeroInner>
+struct scoped_allocator_operator_equal
+{
+   //Optimize equal outer allocator types with 
+   //allocator_traits::equal which uses is_always_equal
+   template<class IA>
+   static bool equal_outer(const IA &l, const IA &r)
+   {  return allocator_traits<IA>::equal(l, r);  }
+
+   //Otherwise compare it normally
+   template<class IA1, class IA2>
+   static bool equal_outer(const IA1 &l, const IA2 &r)
+   {  return l == r;  }
+
+   //Otherwise compare it normally
+   template<class IA>
+   static bool equal_inner(const IA &l, const IA &r)
+   {  return allocator_traits<IA>::equal(l, r);  }
+};
+
+template<>
+struct scoped_allocator_operator_equal<true>
+   : scoped_allocator_operator_equal<false>
+{
+   //when inner allocator count is zero,
+   //inner_allocator_type is the same as outer_allocator_type
+   //so both types can be different in operator==
+   template<class IA1, class IA2>
+   static bool equal_inner(const IA1 &, const IA2 &)
+   {  return true;  }
+};
+
+/// @endcond
+
+template <typename OuterA1, typename OuterA2, BOOST_CONTAINER_SCOPEDALLOC_ALLINNERCLASS>
+inline bool operator==(const scoped_allocator_adaptor<OuterA1, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER>& a
+                      ,const scoped_allocator_adaptor<OuterA2, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER>& b)
+{
+   #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+   const bool has_zero_inner = sizeof...(InnerAllocs) == 0u;
+   #else
+   const bool has_zero_inner = pdalboost::container::container_detail::is_same<P0, void>::value;
+   #endif
+   typedef scoped_allocator_operator_equal<has_zero_inner> equal_t;
+   return equal_t::equal_outer(a.outer_allocator(), b.outer_allocator()) &&
+          equal_t::equal_inner(a.inner_allocator(), b.inner_allocator());
+}
+
+template <typename OuterA1, typename OuterA2, BOOST_CONTAINER_SCOPEDALLOC_ALLINNERCLASS>
+inline bool operator!=(const scoped_allocator_adaptor<OuterA1, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER>& a
+                      ,const scoped_allocator_adaptor<OuterA2, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER>& b)
+{  return !(a == b);   }
+
+}} // namespace pdalboost { namespace container {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif //  BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_HPP
diff --git a/vendor/pdalboost/boost/container/scoped_allocator_fwd.hpp b/vendor/pdalboost/boost/container/scoped_allocator_fwd.hpp
new file mode 100644
index 0000000..3c2b3e6
--- /dev/null
+++ b/vendor/pdalboost/boost/container/scoped_allocator_fwd.hpp
@@ -0,0 +1,71 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_FWD_HPP
+#define BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_FWD_HPP
+
+//! \file
+//! This header file forward declares pdalboost::container::scoped_allocator_adaptor
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+#include <boost/container/detail/std_fwd.hpp>
+#include <boost/container/uses_allocator_fwd.hpp>
+
+#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+#include <boost/move/detail/fwd_macros.hpp>
+#endif
+
+namespace pdalboost { namespace container {
+
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+   #if !defined(BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST)
+
+      template <typename OuterAlloc, typename ...InnerAllocs>
+      class scoped_allocator_adaptor;
+
+   #else // #if !defined(BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST)
+
+      template <typename ...InnerAllocs>
+      class scoped_allocator_adaptor;
+
+      template <typename OuterAlloc, typename ...InnerAllocs>
+      class scoped_allocator_adaptor<OuterAlloc, InnerAllocs...>;
+
+   #endif   // #if !defined(BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST)
+
+#else    // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+   template <typename OuterAlloc, BOOST_MOVE_CLASSDFLT9>
+   class scoped_allocator_adaptor;
+
+#endif
+
+
+#else    //BOOST_CONTAINER_DOXYGEN_INVOKED
+
+#endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+}} // namespace pdalboost { namespace container {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif //  BOOST_CONTAINER_ALLOCATOR_SCOPED_ALLOCATOR_FWD_HPP
diff --git a/vendor/pdalboost/boost/container/throw_exception.hpp b/vendor/pdalboost/boost/container/throw_exception.hpp
new file mode 100644
index 0000000..e7d8a75
--- /dev/null
+++ b/vendor/pdalboost/boost/container/throw_exception.hpp
@@ -0,0 +1,170 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2012-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_THROW_EXCEPTION_HPP
+#define BOOST_CONTAINER_THROW_EXCEPTION_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+#ifndef BOOST_NO_EXCEPTIONS
+   #include <stdexcept> //for std exception types
+   #include <new>       //for std::bad_alloc
+#else
+   #include <boost/assert.hpp>
+   #include <cstdlib>   //for std::abort
+#endif
+
+namespace pdalboost {
+namespace container {
+
+#if defined(BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS)
+   //The user must provide definitions for the following functions
+
+   void throw_bad_alloc();
+
+   void throw_out_of_range(const char* str);
+
+   void throw_length_error(const char* str);
+
+   void throw_logic_error(const char* str);
+
+   void throw_runtime_error(const char* str);
+
+#elif defined(BOOST_NO_EXCEPTIONS)
+
+   inline void throw_bad_alloc()
+   {
+      BOOST_ASSERT(!"pdalboost::container bad_alloc thrown");
+      std::abort();
+   }
+
+   inline void throw_out_of_range(const char* str)
+   {
+      BOOST_ASSERT_MSG(!"pdalboost::container out_of_range thrown", str);
+      std::abort();
+   }
+
+   inline void throw_length_error(const char* str)
+   {
+      BOOST_ASSERT_MSG(!"pdalboost::container length_error thrown", str);
+      std::abort();
+   }
+
+   inline void throw_logic_error(const char* str)
+   {
+      BOOST_ASSERT_MSG(!"pdalboost::container logic_error thrown", str);
+      std::abort();
+   }
+
+   inline void throw_runtime_error(const char* str)
+   {
+      BOOST_ASSERT_MSG(!"pdalboost::container runtime_error thrown", str);
+      std::abort();
+   }
+
+#else //defined(BOOST_NO_EXCEPTIONS)
+
+   //! Exception callback called by Boost.Container when fails to allocate the requested storage space.
+   //! <ul>
+   //! <li>If BOOST_NO_EXCEPTIONS is NOT defined <code>std::bad_alloc()</code> is thrown.</li>
+   //!
+   //! <li>If BOOST_NO_EXCEPTIONS is defined and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS
+   //!   is NOT defined <code>BOOST_ASSERT(!"pdalboost::container bad_alloc thrown")</code> is called
+   //!   and <code>std::abort()</code> if the former returns.</li>
+   //!
+   //! <li>If BOOST_NO_EXCEPTIONS and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS are defined
+   //!   the user must provide an implementation and the function should not return.</li>
+   //! </ul>
+   inline void throw_bad_alloc()
+   {
+      throw std::bad_alloc();
+   }
+
+   //! Exception callback called by Boost.Container to signal arguments out of range.
+   //! <ul>
+   //! <li>If BOOST_NO_EXCEPTIONS is NOT defined <code>std::out_of_range(str)</code> is thrown.</li>
+   //!
+   //! <li>If BOOST_NO_EXCEPTIONS is defined and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS
+   //!   is NOT defined <code>BOOST_ASSERT_MSG(!"pdalboost::container out_of_range thrown", str)</code> is called
+   //!   and <code>std::abort()</code> if the former returns.</li>
+   //!
+   //! <li>If BOOST_NO_EXCEPTIONS and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS are defined
+   //!   the user must provide an implementation and the function should not return.</li>
+   //! </ul>
+   inline void throw_out_of_range(const char* str)
+   {
+      throw std::out_of_range(str);
+   }
+
+   //! Exception callback called by Boost.Container to signal errors resizing.
+   //! <ul>
+   //! <li>If BOOST_NO_EXCEPTIONS is NOT defined <code>std::length_error(str)</code> is thrown.</li>
+   //!
+   //! <li>If BOOST_NO_EXCEPTIONS is defined and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS
+   //!   is NOT defined <code>BOOST_ASSERT_MSG(!"pdalboost::container length_error thrown", str)</code> is called
+   //!   and <code>std::abort()</code> if the former returns.</li>
+   //!
+   //! <li>If BOOST_NO_EXCEPTIONS and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS are defined
+   //!   the user must provide an implementation and the function should not return.</li>
+   //! </ul>
+   inline void throw_length_error(const char* str)
+   {
+      throw std::length_error(str);
+   }
+
+   //! Exception callback called by Boost.Container  to report errors in the internal logical
+   //! of the program, such as violation of logical preconditions or class invariants.
+   //! <ul>
+   //! <li>If BOOST_NO_EXCEPTIONS is NOT defined <code>std::logic_error(str)</code> is thrown.</li>
+   //!
+   //! <li>If BOOST_NO_EXCEPTIONS is defined and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS
+   //!   is NOT defined <code>BOOST_ASSERT_MSG(!"pdalboost::container logic_error thrown", str)</code> is called
+   //!   and <code>std::abort()</code> if the former returns.</li>
+   //!
+   //! <li>If BOOST_NO_EXCEPTIONS and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS are defined
+   //!   the user must provide an implementation and the function should not return.</li>
+   //! </ul>
+   inline void throw_logic_error(const char* str)
+   {
+      throw std::logic_error(str);
+   }
+
+   //! Exception callback called by Boost.Container  to report errors that can only be detected during runtime.
+   //! <ul>
+   //! <li>If BOOST_NO_EXCEPTIONS is NOT defined <code>std::runtime_error(str)</code> is thrown.</li>
+   //!
+   //! <li>If BOOST_NO_EXCEPTIONS is defined and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS
+   //!   is NOT defined <code>BOOST_ASSERT_MSG(!"pdalboost::container runtime_error thrown", str)</code> is called
+   //!   and <code>std::abort()</code> if the former returns.</li>
+   //!
+   //! <li>If BOOST_NO_EXCEPTIONS and BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS are defined
+   //!   the user must provide an implementation and the function should not return.</li>
+   //! </ul>
+   inline void throw_runtime_error(const char* str)
+   {
+      throw std::runtime_error(str);
+   }
+
+#endif
+
+}}  //namespace pdalboost { namespace container {
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif //#ifndef BOOST_CONTAINER_THROW_EXCEPTION_HPP
diff --git a/vendor/pdalboost/boost/container/uses_allocator.hpp b/vendor/pdalboost/boost/container/uses_allocator.hpp
new file mode 100644
index 0000000..153225b
--- /dev/null
+++ b/vendor/pdalboost/boost/container/uses_allocator.hpp
@@ -0,0 +1,169 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2011-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_USES_ALLOCATOR_HPP
+#define BOOST_CONTAINER_USES_ALLOCATOR_HPP
+
+#include <boost/container/uses_allocator_fwd.hpp>
+#include <boost/container/detail/type_traits.hpp>
+
+namespace pdalboost {
+namespace container {
+
+//! <b>Remark</b>: if a specialization constructible_with_allocator_suffix<X>::value is true, indicates that T may be constructed
+//! with an allocator as its last constructor argument.  Ideally, all constructors of T (including the
+//! copy and move constructors) should have a variant that accepts a final argument of
+//! allocator_type.
+//!
+//! <b>Requires</b>: if a specialization constructible_with_allocator_suffix<X>::value is true, T must have a nested type,
+//! allocator_type and at least one constructor for which allocator_type is the last
+//! parameter.  If not all constructors of T can be called with a final allocator_type argument,
+//! and if T is used in a context where a container must call such a constructor, then the program is
+//! ill-formed.
+//!
+//! <code>
+//!  template <class T, class Allocator = allocator<T> >
+//!  class Z {
+//!    public:
+//!      typedef Allocator allocator_type;
+//!
+//!    // Default constructor with optional allocator suffix
+//!    Z(const allocator_type& a = allocator_type());
+//!
+//!    // Copy constructor and allocator-extended copy constructor
+//!    Z(const Z& zz);
+//!    Z(const Z& zz, const allocator_type& a);
+//! };
+//!
+//! // Specialize trait for class template Z
+//! template <class T, class Allocator = allocator<T> >
+//! struct constructible_with_allocator_suffix<Z<T,Allocator> >
+//! { static const bool value = true;  };
+//! </code>
+//!
+//! <b>Note</b>: This trait is a workaround inspired by "N2554: The Scoped A Model (Rev 2)"
+//! (Pablo Halpern, 2008-02-29) to backport the scoped allocator model to C++03, as
+//! in C++03 there is no mechanism to detect if a type can be constructed from arbitrary arguments.
+//! Applications aiming portability with several compilers should always define this trait.
+//!
+//! In conforming C++11 compilers or compilers supporting SFINAE expressions
+//! (when BOOST_NO_SFINAE_EXPR is NOT defined), this trait is ignored and C++11 rules will be used
+//! to detect if a type should be constructed with suffix or prefix allocator arguments.
+template <class T>
+struct constructible_with_allocator_suffix
+{  static const bool value = false; };
+
+//! <b>Remark</b>: if a specialization constructible_with_allocator_prefix<X>::value is true, indicates that T may be constructed
+//! with allocator_arg and T::allocator_type as its first two constructor arguments.
+//! Ideally, all constructors of T (including the copy and move constructors) should have a variant
+//! that accepts these two initial arguments.
+//!
+//! <b>Requires</b>: specialization constructible_with_allocator_prefix<X>::value is true, T must have a nested type,
+//! allocator_type and at least one constructor for which allocator_arg_t is the first
+//! parameter and allocator_type is the second parameter.  If not all constructors of T can be
+//! called with these initial arguments, and if T is used in a context where a container must call such
+//! a constructor, then the program is ill-formed.
+//!
+//! <code>
+//! template <class T, class Allocator = allocator<T> >
+//! class Y {
+//!    public:
+//!       typedef Allocator allocator_type;
+//!
+//!       // Default constructor with and allocator-extended default constructor
+//!       Y();
+//!       Y(allocator_arg_t, const allocator_type& a);
+//!
+//!       // Copy constructor and allocator-extended copy constructor
+//!       Y(const Y& yy);
+//!       Y(allocator_arg_t, const allocator_type& a, const Y& yy);
+//!
+//!       // Variadic constructor and allocator-extended variadic constructor
+//!       template<class ...Args> Y(Args&& args...);
+//!       template<class ...Args>
+//!       Y(allocator_arg_t, const allocator_type& a, BOOST_FWD_REF(Args)... args);
+//! };
+//!
+//! // Specialize trait for class template Y
+//! template <class T, class Allocator = allocator<T> >
+//! struct constructible_with_allocator_prefix<Y<T,Allocator> >
+//! { static const bool value = true;  };
+//!
+//! </code>
+//!
+//! <b>Note</b>: This trait is a workaround inspired by "N2554: The Scoped Allocator Model (Rev 2)"
+//! (Pablo Halpern, 2008-02-29) to backport the scoped allocator model to C++03, as
+//! in C++03 there is no mechanism to detect if a type can be constructed from arbitrary arguments.
+//! Applications aiming portability with several compilers should always define this trait.
+//!
+//! In conforming C++11 compilers or compilers supporting SFINAE expressions
+//! (when BOOST_NO_SFINAE_EXPR is NOT defined), this trait is ignored and C++11 rules will be used
+//! to detect if a type should be constructed with suffix or prefix allocator arguments.
+template <class T>
+struct constructible_with_allocator_prefix
+{  static const bool value = false; };
+
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+namespace container_detail {
+
+template<typename T, typename Allocator>
+struct uses_allocator_imp
+{
+   // Use SFINAE (Substitution Failure Is Not An Error) to detect the
+   // presence of an 'allocator_type' nested type convertilble from Allocator.
+   private:
+   typedef char yes_type;
+   struct no_type{ char dummy[2]; };
+
+   // Match this function if T::allocator_type exists and is
+   // implicitly convertible from Allocator
+   template <class U>
+   static yes_type test(typename U::allocator_type);
+
+   // Match this function if T::allocator_type exists and it's type is `erased_type`.
+   template <class U, class V>
+   static typename container_detail::enable_if
+      < container_detail::is_same<typename U::allocator_type, erased_type>
+      , yes_type
+      >::type  test(const V&);
+
+   // Match this function if TypeT::allocator_type does not exist or is
+   // not convertible from Allocator.
+   template <typename U>
+   static no_type test(...);
+   static Allocator alloc;  // Declared but not defined
+
+   public:
+   static const bool value = sizeof(test<T>(alloc)) == sizeof(yes_type);
+};
+
+}  //namespace container_detail {
+
+#endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+//! <b>Remark</b>: Automatically detects whether T has a nested allocator_type that is convertible from
+//! Allocator. Meets the BinaryTypeTrait requirements ([meta.rqmts] 20.4.1). A program may
+//! specialize this type to define uses_allocator<X>::value as true for a T of user-defined type if T does not
+//! have a nested allocator_type but is nonetheless constructible using the specified Allocator where either:
+//! the first argument of a constructor has type allocator_arg_t and the second argument has type Alloc or
+//! the last argument of a constructor has type Alloc.
+//!
+//! <b>Result</b>: uses_allocator<T, Allocator>::value== true if a type T::allocator_type
+//! exists and either is_convertible<Alloc, T::allocator_type>::value != false or T::allocator_type
+//! is an alias `erased_type`. False otherwise.
+template <typename T, typename Allocator>
+struct uses_allocator
+   : container_detail::uses_allocator_imp<T, Allocator>
+{};
+
+}} //namespace pdalboost::container
+
+#endif   //BOOST_CONTAINER_USES_ALLOCATOR_HPP
diff --git a/vendor/pdalboost/boost/container/uses_allocator_fwd.hpp b/vendor/pdalboost/boost/container/uses_allocator_fwd.hpp
new file mode 100644
index 0000000..9bfa557
--- /dev/null
+++ b/vendor/pdalboost/boost/container/uses_allocator_fwd.hpp
@@ -0,0 +1,73 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_USES_ALLOCATOR_FWD_HPP
+#define BOOST_CONTAINER_USES_ALLOCATOR_FWD_HPP
+
+#include <boost/container/detail/workaround.hpp>
+#include <boost/container/detail/std_fwd.hpp>
+
+//! \file
+//!   This header forward declares pdalboost::container::constructible_with_allocator_prefix,
+//!   pdalboost::container::constructible_with_allocator_suffix and
+//!   pdalboost::container::uses_allocator. Also defines the following types:
+
+namespace pdalboost {
+namespace container {
+
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+   template <int Dummy = 0>
+   struct std_allocator_arg_holder
+   {
+      static ::std::allocator_arg_t *dummy;
+   };
+
+   template <int Dummy>
+   ::std::allocator_arg_t *std_allocator_arg_holder<Dummy>::dummy;
+
+typedef const std::allocator_arg_t & allocator_arg_t;
+
+#else
+
+//! The allocator_arg_t struct is an empty structure type used as a unique type to
+//! disambiguate constructor and function overloading. Specifically, several types
+//! have constructors with allocator_arg_t as the first argument, immediately followed
+//! by an argument of a type that satisfies Allocator requirements
+typedef unspecified allocator_arg_t;
+
+#endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+//! The `erased_type` struct is an empty struct that serves as a placeholder for a type
+//! T in situations where the actual type T is determined at runtime. For example,
+//! the nested type, `allocator_type`, is an alias for `erased_type` in classes that
+//! use type-erased allocators.
+struct erased_type {};
+
+//! A instance of type
+//! allocator_arg_t
+static allocator_arg_t allocator_arg = BOOST_CONTAINER_DOC1ST(unspecified, *std_allocator_arg_holder<>::dummy);
+
+// @cond
+
+template <class T>
+struct constructible_with_allocator_suffix;
+
+template <class T>
+struct constructible_with_allocator_prefix;
+
+template <typename T, typename Allocator>
+struct uses_allocator;
+
+// @endcond
+
+}} // namespace pdalboost { namespace container {
+
+#endif   //BOOST_CONTAINER_USES_ALLOCATOR_HPP
diff --git a/vendor/pdalboost/boost/container/vector.hpp b/vendor/pdalboost/boost/container/vector.hpp
new file mode 100644
index 0000000..d2c36fe
--- /dev/null
+++ b/vendor/pdalboost/boost/container/vector.hpp
@@ -0,0 +1,3386 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONTAINER_CONTAINER_VECTOR_HPP
+#define BOOST_CONTAINER_CONTAINER_VECTOR_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/workaround.hpp>
+
+// container
+#include <boost/container/container_fwd.hpp>
+#include <boost/container/allocator_traits.hpp>
+#include <boost/container/new_allocator.hpp> //new_allocator
+#include <boost/container/throw_exception.hpp>
+// container detail
+#include <boost/container/detail/advanced_insert_int.hpp>
+#include <boost/container/detail/algorithm.hpp> //equal()
+#include <boost/container/detail/alloc_helpers.hpp>
+#include <boost/container/detail/allocation_type.hpp>
+#include <boost/container/detail/copy_move_algo.hpp>
+#include <boost/container/detail/destroyers.hpp>
+#include <boost/container/detail/iterator.hpp>
+#include <boost/container/detail/iterators.hpp>
+#include <boost/container/detail/iterator_to_raw_pointer.hpp>
+#include <boost/container/detail/mpl.hpp>
+#include <boost/container/detail/next_capacity.hpp>
+#include <boost/container/detail/to_raw_pointer.hpp>
+#include <boost/container/detail/type_traits.hpp>
+#include <boost/container/detail/version_type.hpp>
+// intrusive
+#include <boost/intrusive/pointer_traits.hpp>
+// move
+#include <boost/move/adl_move_swap.hpp>
+#include <boost/move/iterator.hpp>
+#include <boost/move/traits.hpp>
+#include <boost/move/utility_core.hpp>
+// move/detail
+#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+#include <boost/move/detail/fwd_macros.hpp>
+#endif
+#include <boost/move/detail/move_helpers.hpp>
+// other
+#include <boost/core/no_exceptions_support.hpp>
+#include <boost/assert.hpp>
+#include <boost/cstdint.hpp>
+
+//std
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+#include <initializer_list>   //for std::initializer_list
+#endif
+
+namespace pdalboost {
+namespace container {
+
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+//#define BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
+
+namespace container_detail {
+
+#ifndef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
+
+template <class Pointer, bool IsConst>
+class vec_iterator
+{
+   public:
+   typedef std::random_access_iterator_tag                                          iterator_category;
+   typedef typename pdalboost::intrusive::pointer_traits<Pointer>::element_type         value_type;
+   typedef typename pdalboost::intrusive::pointer_traits<Pointer>::difference_type      difference_type;
+   typedef typename if_c
+      < IsConst
+      , typename pdalboost::intrusive::pointer_traits<Pointer>::template
+                                 rebind_pointer<const value_type>::type
+      , Pointer
+      >::type                                                                       pointer;
+   typedef typename pdalboost::intrusive::pointer_traits<pointer>                       ptr_traits;
+   typedef typename ptr_traits::reference                                           reference;
+
+   #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+   private:
+   Pointer m_ptr;
+
+   public:
+   const Pointer &get_ptr() const BOOST_NOEXCEPT_OR_NOTHROW
+   {  return   m_ptr;  }
+
+   Pointer &get_ptr() BOOST_NOEXCEPT_OR_NOTHROW
+   {  return   m_ptr;  }
+
+   explicit vec_iterator(Pointer ptr) BOOST_NOEXCEPT_OR_NOTHROW
+      : m_ptr(ptr)
+   {}
+   #endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+   public:
+
+   //Constructors
+   vec_iterator() BOOST_NOEXCEPT_OR_NOTHROW
+      : m_ptr()   //Value initialization to achieve "null iterators" (N3644)
+   {}
+
+   vec_iterator(vec_iterator<Pointer, false> const& other) BOOST_NOEXCEPT_OR_NOTHROW
+      :  m_ptr(other.get_ptr())
+   {}
+
+   //Pointer like operators
+   reference operator*()   const BOOST_NOEXCEPT_OR_NOTHROW
+   {  return *m_ptr;  }
+
+   pointer operator->()  const BOOST_NOEXCEPT_OR_NOTHROW
+   {  return ::pdalboost::intrusive::pointer_traits<pointer>::pointer_to(this->operator*());  }
+
+   reference operator[](difference_type off) const BOOST_NOEXCEPT_OR_NOTHROW
+   {  return m_ptr[off];   }
+
+   //Increment / Decrement
+   vec_iterator& operator++() BOOST_NOEXCEPT_OR_NOTHROW
+   { ++m_ptr;  return *this; }
+
+   vec_iterator operator++(int) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return vec_iterator(m_ptr++); }
+
+   vec_iterator& operator--() BOOST_NOEXCEPT_OR_NOTHROW
+   {  --m_ptr; return *this;  }
+
+   vec_iterator operator--(int) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return vec_iterator(m_ptr--); }
+
+   //Arithmetic
+   vec_iterator& operator+=(difference_type off) BOOST_NOEXCEPT_OR_NOTHROW
+   {  m_ptr += off; return *this;   }
+
+   vec_iterator& operator-=(difference_type off) BOOST_NOEXCEPT_OR_NOTHROW
+   {  m_ptr -= off; return *this;   }
+
+   friend vec_iterator operator+(const vec_iterator &x, difference_type off) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return vec_iterator(x.m_ptr+off);  }
+
+   friend vec_iterator operator+(difference_type off, vec_iterator right) BOOST_NOEXCEPT_OR_NOTHROW
+   {  right.m_ptr += off;  return right; }
+
+   friend vec_iterator operator-(vec_iterator left, difference_type off) BOOST_NOEXCEPT_OR_NOTHROW
+   {  left.m_ptr -= off;  return left; }
+
+   friend difference_type operator-(const vec_iterator &left, const vec_iterator& right) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return left.m_ptr - right.m_ptr;   }
+
+   //Comparison operators
+   friend bool operator==   (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return l.m_ptr == r.m_ptr;  }
+
+   friend bool operator!=   (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return l.m_ptr != r.m_ptr;  }
+
+   friend bool operator<    (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return l.m_ptr < r.m_ptr;  }
+
+   friend bool operator<=   (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return l.m_ptr <= r.m_ptr;  }
+
+   friend bool operator>    (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return l.m_ptr > r.m_ptr;  }
+
+   friend bool operator>=   (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return l.m_ptr >= r.m_ptr;  }
+};
+
+template<class BiDirPosConstIt, class BiDirValueIt>
+struct vector_insert_ordered_cursor
+{
+   typedef typename iterator_traits<BiDirPosConstIt>::value_type  size_type;
+   typedef typename iterator_traits<BiDirValueIt>::reference      reference;
+
+   vector_insert_ordered_cursor(BiDirPosConstIt posit, BiDirValueIt valueit)
+      : last_position_it(posit), last_value_it(valueit)
+   {}
+
+   void operator --()
+   {
+      --last_value_it;
+      --last_position_it;
+      while(this->get_pos() == size_type(-1)){
+         --last_value_it;
+         --last_position_it;
+      }
+   }
+
+   size_type get_pos() const
+   {  return *last_position_it;  }
+
+   reference get_val()
+   {  return *last_value_it;  }
+
+   BiDirPosConstIt last_position_it;
+   BiDirValueIt last_value_it;
+};
+
+template<class T, class SizeType, class BiDirValueIt, class Comp>
+struct vector_merge_cursor
+{
+   typedef SizeType  size_type;
+   typedef typename iterator_traits<BiDirValueIt>::reference      reference;
+
+   vector_merge_cursor(T *pbeg, T *plast, BiDirValueIt valueit, Comp &cmp)
+      : m_pbeg(pbeg), m_pcur(--plast), m_valueit(valueit), m_cmp(cmp)
+   {}
+
+   void operator --()
+   {
+      --m_valueit;
+      const T &t = *m_valueit;
+      while((m_pcur + 1) != m_pbeg){
+         if(!m_cmp(t, *m_pcur)){
+            break;
+         }
+         --m_pcur;
+      }
+   }
+
+   size_type get_pos() const
+   {  return static_cast<size_type>((m_pcur + 1) - m_pbeg);  }
+
+   reference get_val()
+   {  return *m_valueit;  }
+
+   T *const m_pbeg;
+   T *m_pcur;
+   BiDirValueIt m_valueit;
+   Comp &m_cmp;
+};
+
+}  //namespace container_detail {
+
+template<class Pointer, bool IsConst>
+const Pointer &vector_iterator_get_ptr(const container_detail::vec_iterator<Pointer, IsConst> &it) BOOST_NOEXCEPT_OR_NOTHROW
+{  return   it.get_ptr();  }
+
+template<class Pointer, bool IsConst>
+Pointer &get_ptr(container_detail::vec_iterator<Pointer, IsConst> &it) BOOST_NOEXCEPT_OR_NOTHROW
+{  return  it.get_ptr();  }
+
+namespace container_detail {
+
+#else //ifndef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
+
+template< class MaybeConstPointer
+        , bool ElementTypeIsConst
+            = is_const< typename pdalboost::intrusive::pointer_traits<MaybeConstPointer>::element_type>::value >
+struct vector_get_ptr_pointer_to_non_const
+{
+   typedef MaybeConstPointer                                         const_pointer;
+   typedef pdalboost::intrusive::pointer_traits<const_pointer>           pointer_traits_t;
+   typedef typename pointer_traits_t::element_type                   element_type;
+   typedef typename remove_const<element_type>::type                 non_const_element_type;
+   typedef typename pointer_traits_t
+      ::template rebind_pointer<non_const_element_type>::type        return_type;
+
+   static return_type get_ptr(const const_pointer &ptr) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return pdalboost::intrusive::pointer_traits<return_type>::const_cast_from(ptr);  }
+};
+
+template<class Pointer>
+struct vector_get_ptr_pointer_to_non_const<Pointer, false>
+{
+   typedef const Pointer & return_type;
+   static return_type get_ptr(const Pointer &ptr) BOOST_NOEXCEPT_OR_NOTHROW
+   {  return ptr;  }
+};
+
+}  //namespace container_detail {
+
+template<class MaybeConstPointer>
+typename container_detail::vector_get_ptr_pointer_to_non_const<MaybeConstPointer>::return_type
+   vector_iterator_get_ptr(const MaybeConstPointer &ptr) BOOST_NOEXCEPT_OR_NOTHROW
+{
+   return container_detail::vector_get_ptr_pointer_to_non_const<MaybeConstPointer>::get_ptr(ptr);
+}
+
+namespace container_detail {
+
+#endif   //#ifndef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
+
+struct uninitialized_size_t {};
+static const uninitialized_size_t uninitialized_size = uninitialized_size_t();
+
+template <class T>
+struct vector_value_traits_base
+{
+   static const bool trivial_dctr = is_trivially_destructible<T>::value;
+   static const bool trivial_dctr_after_move = has_trivial_destructor_after_move<T>::value;
+   static const bool trivial_copy = is_trivially_copy_constructible<T>::value;
+   static const bool nothrow_copy = is_nothrow_copy_constructible<T>::value || trivial_copy;
+   static const bool trivial_assign = is_trivially_copy_assignable<T>::value;
+   static const bool nothrow_assign = is_nothrow_copy_assignable<T>::value || trivial_assign;
+};
+
+
+template <class Allocator>
+struct vector_value_traits
+   : public vector_value_traits_base<typename Allocator::value_type>
+{
+   typedef vector_value_traits_base<typename Allocator::value_type> base_t;
+   //This is the anti-exception array destructor
+   //to deallocate values already constructed
+   typedef typename container_detail::if_c
+      <base_t::trivial_dctr
+      ,container_detail::null_scoped_destructor_n<Allocator>
+      ,container_detail::scoped_destructor_n<Allocator>
+      >::type   ArrayDestructor;
+   //This is the anti-exception array deallocator
+   typedef container_detail::scoped_array_deallocator<Allocator> ArrayDeallocator;
+};
+
+//!This struct deallocates and allocated memory
+template < class Allocator
+         , class AllocatorVersion = typename container_detail::version<Allocator>::type
+         >
+struct vector_alloc_holder
+   : public Allocator
+{
+   private:
+   BOOST_MOVABLE_BUT_NOT_COPYABLE(vector_alloc_holder)
+
+   public:
+   typedef Allocator allocator_type;
+   typedef pdalboost::container::allocator_traits<Allocator> allocator_traits_type;
+   typedef typename allocator_traits_type::pointer       pointer;
+   typedef typename allocator_traits_type::size_type     size_type;
+   typedef typename allocator_traits_type::value_type    value_type;
+
+   static bool is_propagable_from(const allocator_type &from_alloc, pointer p, const allocator_type &to_alloc, bool const propagate_allocator)
+   {
+      (void)propagate_allocator; (void)p; (void)to_alloc; (void)from_alloc;
+      const bool all_storage_propagable = !allocator_traits_type::is_partially_propagable::value ||
+                                          !allocator_traits_type::storage_is_unpropagable(from_alloc, p);
+      return all_storage_propagable && (propagate_allocator || allocator_traits_type::equal(from_alloc, to_alloc));
+   }
+
+   static bool are_swap_propagable(const allocator_type &l_a, pointer l_p, const allocator_type &r_a, pointer r_p, bool const propagate_allocator)
+   {
+      (void)propagate_allocator; (void)l_p; (void)r_p; (void)l_a; (void)r_a;
+      const bool all_storage_propagable = !allocator_traits_type::is_partially_propagable::value || 
+              !(allocator_traits_type::storage_is_unpropagable(l_a, l_p) || allocator_traits_type::storage_is_unpropagable(r_a, r_p));
+      return all_storage_propagable && (propagate_allocator || allocator_traits_type::equal(l_a, r_a));
+   }
+
+   //Constructor, does not throw
+   vector_alloc_holder()
+      BOOST_NOEXCEPT_IF(container_detail::is_nothrow_default_constructible<Allocator>::value)
+      : Allocator(), m_start(), m_size(), m_capacity()
+   {}
+
+   //Constructor, does not throw
+   template<class AllocConvertible>
+   explicit vector_alloc_holder(BOOST_FWD_REF(AllocConvertible) a) BOOST_NOEXCEPT_OR_NOTHROW
+      : Allocator(pdalboost::forward<AllocConvertible>(a)), m_start(), m_size(), m_capacity()
+   {}
+
+   //Constructor, does not throw
+   template<class AllocConvertible>
+   vector_alloc_holder(uninitialized_size_t, BOOST_FWD_REF(AllocConvertible) a, size_type initial_size)
+      : Allocator(pdalboost::forward<AllocConvertible>(a))
+      , m_start()
+      , m_size(initial_size)  //Size is initialized here so vector should only call uninitialized_xxx after this
+      , m_capacity()
+   {
+      if(initial_size){
+         pointer reuse = 0;
+         m_start = this->allocation_command(allocate_new, initial_size, m_capacity = initial_size, reuse);
+      }
+   }
+
+   //Constructor, does not throw
+   vector_alloc_holder(uninitialized_size_t, size_type initial_size)
+      : Allocator()
+      , m_start()
+      , m_size(initial_size)  //Size is initialized here so vector should only call uninitialized_xxx after this
+      , m_capacity()
+   {
+      if(initial_size){
+         pointer reuse = 0;
+         m_start = this->allocation_command(allocate_new, initial_size, m_capacity = initial_size, reuse);
+      }
+   }
+
+   vector_alloc_holder(BOOST_RV_REF(vector_alloc_holder) holder) BOOST_NOEXCEPT_OR_NOTHROW
+      : Allocator(BOOST_MOVE_BASE(Allocator, holder))
+      , m_start(holder.m_start)
+      , m_size(holder.m_size)
+      , m_capacity(holder.m_capacity)
+   {
+      holder.m_start = pointer();
+      holder.m_size = holder.m_capacity = 0;
+   }
+
+   vector_alloc_holder(pointer p, size_type capacity, BOOST_RV_REF(vector_alloc_holder) holder)
+      : Allocator(BOOST_MOVE_BASE(Allocator, holder))
+      , m_start(p)
+      , m_size(holder.m_size)
+      , m_capacity(capacity)
+   {
+      allocator_type &this_alloc = this->alloc();
+      allocator_type &x_alloc = holder.alloc();
+      if(this->is_propagable_from(x_alloc, holder.start(), this_alloc, true)){
+         if(this->m_capacity){
+            this->alloc().deallocate(this->m_start, this->m_capacity);
+         }
+         m_start = holder.m_start;
+         m_capacity = holder.m_capacity;
+         holder.m_start = pointer();
+         holder.m_capacity = holder.m_size = 0;
+      }
+      else if(this->m_capacity < holder.m_size){
+         size_type const n = holder.m_size;
+         pointer reuse = pointer();
+         m_start = this->allocation_command(allocate_new, n, m_capacity = n, reuse);
+         #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+         this->num_alloc += n != 0;
+         #endif
+      }
+   }
+
+   vector_alloc_holder(pointer p, size_type n)
+      BOOST_NOEXCEPT_IF(container_detail::is_nothrow_default_constructible<Allocator>::value)
+      : Allocator()
+      , m_start(p)
+      , m_size()
+      , m_capacity(n)
+   {}
+
+   template<class AllocFwd>
+   vector_alloc_holder(pointer p, size_type n, BOOST_FWD_REF(AllocFwd) a)
+      : Allocator(::pdalboost::forward<AllocFwd>(a))
+      , m_start(p)
+      , m_size()
+      , m_capacity(n)
+   {}
+
+   ~vector_alloc_holder() BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      if(this->m_capacity){
+         this->alloc().deallocate(this->m_start, this->m_capacity);
+      }
+   }
+
+   pointer allocation_command(pdalboost::container::allocation_type command,
+                              size_type limit_size, size_type &prefer_in_recvd_out_size, pointer &reuse)
+   {
+      typedef typename container_detail::version<Allocator>::type alloc_version;
+      return this->priv_allocation_command(alloc_version(), command, limit_size, prefer_in_recvd_out_size, reuse);
+   }
+
+   bool try_expand_fwd(size_type at_least)
+   {
+      //There is not enough memory, try to expand the old one
+      const size_type new_cap = this->capacity() + at_least;
+      size_type real_cap = new_cap;
+      pointer reuse = this->start();
+      bool const success = !!this->allocation_command(expand_fwd, new_cap, real_cap, reuse);
+      //Check for forward expansion
+      if(success){
+         #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+         ++this->num_expand_fwd;
+         #endif
+         this->capacity(real_cap);
+      }
+      return success;
+   }
+
+   size_type next_capacity(size_type additional_objects) const
+   {
+      return next_capacity_calculator
+         <size_type, NextCapacityDouble //NextCapacity60Percent
+         >::get( allocator_traits_type::max_size(this->alloc())
+               , this->m_capacity, additional_objects );
+   }
+
+   pointer     m_start;
+   size_type   m_size;
+   size_type   m_capacity;
+
+   void swap_resources(vector_alloc_holder &x) BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      pdalboost::adl_move_swap(this->m_start, x.m_start);
+      pdalboost::adl_move_swap(this->m_size, x.m_size);
+      pdalboost::adl_move_swap(this->m_capacity, x.m_capacity);
+   }
+
+   void steal_resources(vector_alloc_holder &x) BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      this->m_start     = x.m_start;
+      this->m_size      = x.m_size;
+      this->m_capacity  = x.m_capacity;
+      x.m_start = pointer();
+      x.m_size = x.m_capacity = 0;
+   }
+
+   Allocator &alloc() BOOST_NOEXCEPT_OR_NOTHROW
+   {  return *this;  }
+
+   const Allocator &alloc() const BOOST_NOEXCEPT_OR_NOTHROW
+   {  return *this;  }
+
+   const pointer   &start() const     BOOST_NOEXCEPT_OR_NOTHROW {  return m_start;  }
+   const size_type &capacity() const  BOOST_NOEXCEPT_OR_NOTHROW {  return m_capacity;  }
+   void start(const pointer &p)       BOOST_NOEXCEPT_OR_NOTHROW {  m_start = p;  }
+   void capacity(const size_type &c)  BOOST_NOEXCEPT_OR_NOTHROW {  m_capacity = c;  }
+
+   private:
+   void priv_first_allocation(size_type cap)
+   {
+      if(cap){
+         pointer reuse = 0;
+         m_start = this->allocation_command(allocate_new, cap, cap, reuse);
+         m_capacity = cap;
+         #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+         ++this->num_alloc;
+         #endif
+      }
+   }
+
+   pointer priv_allocation_command(version_1, pdalboost::container::allocation_type command,
+                         size_type ,
+                         size_type &prefer_in_recvd_out_size,
+                         pointer &reuse)
+   {
+      (void)command;
+      BOOST_ASSERT( (command & allocate_new));
+      BOOST_ASSERT(!(command & nothrow_allocation));
+      pointer const p = allocator_traits_type::allocate(this->alloc(), prefer_in_recvd_out_size, reuse);
+      reuse = pointer();
+      return p;
+   }
+
+   pointer priv_allocation_command(version_2, pdalboost::container::allocation_type command,
+                         size_type limit_size,
+                         size_type &prefer_in_recvd_out_size,
+                         pointer &reuse)
+   {
+      return this->alloc().allocation_command(command, limit_size, prefer_in_recvd_out_size, reuse);
+   }
+};
+
+//!This struct deallocates and allocated memory
+template <class Allocator>
+struct vector_alloc_holder<Allocator, version_0>
+   : public Allocator
+{
+   private:
+   BOOST_MOVABLE_BUT_NOT_COPYABLE(vector_alloc_holder)
+
+   public:
+   typedef pdalboost::container::allocator_traits<Allocator> allocator_traits_type;
+   typedef typename allocator_traits_type::pointer       pointer;
+   typedef typename allocator_traits_type::size_type     size_type;
+   typedef typename allocator_traits_type::value_type    value_type;
+
+   template <class OtherAllocator, class OtherAllocatorVersion>
+   friend struct vector_alloc_holder;
+
+   //Constructor, does not throw
+   vector_alloc_holder()
+      BOOST_NOEXCEPT_IF(container_detail::is_nothrow_default_constructible<Allocator>::value)
+      : Allocator(), m_size()
+   {}
+
+   //Constructor, does not throw
+   template<class AllocConvertible>
+   explicit vector_alloc_holder(BOOST_FWD_REF(AllocConvertible) a) BOOST_NOEXCEPT_OR_NOTHROW
+      : Allocator(pdalboost::forward<AllocConvertible>(a)), m_size()
+   {}
+
+   //Constructor, does not throw
+   template<class AllocConvertible>
+   vector_alloc_holder(uninitialized_size_t, BOOST_FWD_REF(AllocConvertible) a, size_type initial_size)
+      : Allocator(pdalboost::forward<AllocConvertible>(a))
+      , m_size(initial_size)  //Size is initialized here...
+   {
+      //... and capacity here, so vector, must call uninitialized_xxx in the derived constructor
+      this->priv_first_allocation(initial_size);
+   }
+
+   //Constructor, does not throw
+   vector_alloc_holder(uninitialized_size_t, size_type initial_size)
+      : Allocator()
+      , m_size(initial_size)  //Size is initialized here...
+   {
+      //... and capacity here, so vector, must call uninitialized_xxx in the derived constructor
+      this->priv_first_allocation(initial_size);
+   }
+
+   vector_alloc_holder(BOOST_RV_REF(vector_alloc_holder) holder)
+      : Allocator(BOOST_MOVE_BASE(Allocator, holder))
+      , m_size(holder.m_size) //Size is initialized here so vector should only call uninitialized_xxx after this
+   {
+      ::pdalboost::container::uninitialized_move_alloc_n
+         (this->alloc(), container_detail::to_raw_pointer(holder.start()), m_size, container_detail::to_raw_pointer(this->start()));
+   }
+
+   template<class OtherAllocator, class OtherAllocatorVersion>
+   vector_alloc_holder(BOOST_RV_REF_BEG vector_alloc_holder<OtherAllocator, OtherAllocatorVersion> BOOST_RV_REF_END holder)
+      : Allocator()
+      , m_size(holder.m_size) //Initialize it to m_size as first_allocation can only succeed or abort
+   {
+      //Different allocator type so we must check we have enough storage
+      const size_type n = holder.m_size;
+      this->priv_first_allocation(n);
+      ::pdalboost::container::uninitialized_move_alloc_n
+         (this->alloc(), container_detail::to_raw_pointer(holder.start()), n, container_detail::to_raw_pointer(this->start()));
+   }
+
+   void priv_first_allocation(size_type cap)
+   {
+      if(cap > Allocator::internal_capacity){
+         throw_bad_alloc();
+      }
+   }
+
+   void deep_swap(vector_alloc_holder &x)
+   {
+      this->priv_deep_swap(x);
+   }
+
+   template<class OtherAllocator, class OtherAllocatorVersion>
+   void deep_swap(vector_alloc_holder<OtherAllocator, OtherAllocatorVersion> &x)
+   {
+      if(this->m_size > OtherAllocator::internal_capacity || x.m_size > Allocator::internal_capacity){
+         throw_bad_alloc();
+      }
+      this->priv_deep_swap(x);
+   }
+
+   void swap_resources(vector_alloc_holder &) BOOST_NOEXCEPT_OR_NOTHROW
+   {  //Containers with version 0 allocators can't be moved without moving elements one by one
+      throw_bad_alloc();
+   }
+
+
+   void steal_resources(vector_alloc_holder &)
+   {  //Containers with version 0 allocators can't be moved without moving elements one by one
+      throw_bad_alloc();
+   }
+
+   Allocator &alloc() BOOST_NOEXCEPT_OR_NOTHROW
+   {  return *this;  }
+
+   const Allocator &alloc() const BOOST_NOEXCEPT_OR_NOTHROW
+   {  return *this;  }
+
+   bool try_expand_fwd(size_type at_least)
+   {  return !at_least;  }
+
+   pointer start() const       BOOST_NOEXCEPT_OR_NOTHROW {  return Allocator::internal_storage();  }
+   size_type  capacity() const BOOST_NOEXCEPT_OR_NOTHROW {  return Allocator::internal_capacity;  }
+   size_type   m_size;
+
+   private:
+
+   template<class OtherAllocator, class OtherAllocatorVersion>
+   void priv_deep_swap(vector_alloc_holder<OtherAllocator, OtherAllocatorVersion> &x)
+   {
+      const size_type MaxTmpStorage = sizeof(value_type)*Allocator::internal_capacity;
+      value_type *const first_this = container_detail::to_raw_pointer(this->start());
+      value_type *const first_x = container_detail::to_raw_pointer(x.start());
+
+      if(this->m_size < x.m_size){
+         pdalboost::container::deep_swap_alloc_n<MaxTmpStorage>(this->alloc(), first_this, this->m_size, first_x, x.m_size);
+      }
+      else{
+         pdalboost::container::deep_swap_alloc_n<MaxTmpStorage>(this->alloc(), first_x, x.m_size, first_this, this->m_size);
+      }
+      pdalboost::adl_move_swap(this->m_size, x.m_size);
+   }
+};
+
+}  //namespace container_detail {
+
+#endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+//! A vector is a sequence that supports random access to elements, constant
+//! time insertion and removal of elements at the end, and linear time insertion
+//! and removal of elements at the beginning or in the middle. The number of
+//! elements in a vector may vary dynamically; memory management is automatic.
+//!
+//! \tparam T The type of object that is stored in the vector
+//! \tparam Allocator The allocator used for all internal memory management
+template <class T, class Allocator BOOST_CONTAINER_DOCONLY(= new_allocator<T>) >
+class vector
+{
+   #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+   struct value_less
+   {
+      typedef typename pdalboost::container::allocator_traits<Allocator>::value_type value_type;
+      bool operator()(const value_type &a, const value_type &b) const
+         {  return a < b;  }
+   };
+
+   typedef typename container_detail::version<Allocator>::type alloc_version;
+   typedef pdalboost::container::container_detail::vector_alloc_holder<Allocator> alloc_holder_t;
+   alloc_holder_t m_holder;
+   typedef allocator_traits<Allocator>                      allocator_traits_type;
+   template <class U, class UAllocator>
+   friend class vector;
+
+   typedef typename allocator_traits_type::pointer  pointer_impl;
+   typedef container_detail::vec_iterator<pointer_impl, false> iterator_impl;
+   typedef container_detail::vec_iterator<pointer_impl, true > const_iterator_impl;
+
+   protected:
+   static bool is_propagable_from(const Allocator &from_alloc, pointer_impl p, const Allocator &to_alloc, bool const propagate_allocator)
+   {  return alloc_holder_t::is_propagable_from(from_alloc, p, to_alloc, propagate_allocator);  }
+
+   static bool are_swap_propagable( const Allocator &l_a, pointer_impl l_p
+                                  , const Allocator &r_a, pointer_impl r_p, bool const propagate_allocator)
+   {  return alloc_holder_t::are_swap_propagable(l_a, l_p, r_a, r_p, propagate_allocator);  }
+
+   #endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+   public:
+   //////////////////////////////////////////////
+   //
+   //                    types
+   //
+   //////////////////////////////////////////////
+
+   typedef T                                                                           value_type;
+   typedef typename ::pdalboost::container::allocator_traits<Allocator>::pointer           pointer;
+   typedef typename ::pdalboost::container::allocator_traits<Allocator>::const_pointer     const_pointer;
+   typedef typename ::pdalboost::container::allocator_traits<Allocator>::reference         reference;
+   typedef typename ::pdalboost::container::allocator_traits<Allocator>::const_reference   const_reference;
+   typedef typename ::pdalboost::container::allocator_traits<Allocator>::size_type         size_type;
+   typedef typename ::pdalboost::container::allocator_traits<Allocator>::difference_type   difference_type;
+   typedef Allocator                                                                   allocator_type;
+   typedef Allocator                                                                   stored_allocator_type;
+   #if defined BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
+   typedef BOOST_CONTAINER_IMPDEF(pointer)                                             iterator;
+   typedef BOOST_CONTAINER_IMPDEF(const_pointer)                                       const_iterator;
+   #else
+   typedef BOOST_CONTAINER_IMPDEF(iterator_impl)                                       iterator;
+   typedef BOOST_CONTAINER_IMPDEF(const_iterator_impl)                                 const_iterator;
+   #endif
+   typedef BOOST_CONTAINER_IMPDEF(pdalboost::container::reverse_iterator<iterator>)        reverse_iterator;
+   typedef BOOST_CONTAINER_IMPDEF(pdalboost::container::reverse_iterator<const_iterator>)  const_reverse_iterator;
+
+   #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+   private:
+   BOOST_COPYABLE_AND_MOVABLE(vector)
+   typedef container_detail::vector_value_traits<Allocator> value_traits;
+   typedef constant_iterator<T, difference_type>            cvalue_iterator;
+
+   protected:
+
+   void steal_resources(vector &x)
+   {  return this->m_holder.steal_resources(x.m_holder);   }
+
+   struct initial_capacity_t{};
+   template<class AllocFwd>
+   vector(initial_capacity_t, pointer initial_memory, size_type capacity, BOOST_FWD_REF(AllocFwd) a)
+      : m_holder(initial_memory, capacity, ::pdalboost::forward<AllocFwd>(a))
+   {}
+
+   vector(initial_capacity_t, pointer initial_memory, size_type capacity)
+      : m_holder(initial_memory, capacity)
+   {}
+
+   #endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+   public:
+   //////////////////////////////////////////////
+   //
+   //          construct/copy/destroy
+   //
+   //////////////////////////////////////////////
+
+   //! <b>Effects</b>: Constructs a vector taking the allocator as parameter.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   vector() BOOST_NOEXCEPT_OR_NOTHROW
+      : m_holder()
+   {}
+
+   //! <b>Effects</b>: Constructs a vector taking the allocator as parameter.
+   //!
+   //! <b>Throws</b>: Nothing
+   //!
+   //! <b>Complexity</b>: Constant.
+   explicit vector(const allocator_type& a) BOOST_NOEXCEPT_OR_NOTHROW
+      : m_holder(a)
+   {}
+
+   //! <b>Effects</b>: Constructs a vector and inserts n value initialized values.
+   //!
+   //! <b>Throws</b>: If allocator_type's allocation
+   //!   throws or T's value initialization throws.
+   //!
+   //! <b>Complexity</b>: Linear to n.
+   explicit vector(size_type n)
+      :  m_holder(container_detail::uninitialized_size, n)
+   {
+      #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+      this->num_alloc += n != 0;
+      #endif
+      pdalboost::container::uninitialized_value_init_alloc_n
+         (this->m_holder.alloc(), n, this->priv_raw_begin());
+   }
+
+   //! <b>Effects</b>: Constructs a vector that will use a copy of allocator a
+   //!   and inserts n default initialized values.
+   //!
+   //! <b>Throws</b>: If allocator_type's allocation
+   //!   throws or T's default initialization throws.
+   //!
+   //! <b>Complexity</b>: Linear to n.
+   //!
+   //! <b>Note</b>: Non-standard extension
+   vector(size_type n, default_init_t)
+      :  m_holder(container_detail::uninitialized_size, n)
+   {
+      #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+      this->num_alloc += n != 0;
+      #endif
+      pdalboost::container::uninitialized_default_init_alloc_n
+         (this->m_holder.alloc(), n, this->priv_raw_begin());
+   }
+
+   //! <b>Effects</b>: Constructs a vector that will use a copy of allocator a
+   //!   and inserts n value initialized values.
+   //!
+   //! <b>Throws</b>: If allocator_type's allocation
+   //!   throws or T's value initialization throws.
+   //!
+   //! <b>Complexity</b>: Linear to n.
+   explicit vector(size_type n, const allocator_type &a)
+      :  m_holder(container_detail::uninitialized_size, a, n)
+   {
+      #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+      this->num_alloc += n != 0;
+      #endif
+      pdalboost::container::uninitialized_value_init_alloc_n
+         (this->m_holder.alloc(), n, this->priv_raw_begin());
+   }
+
+   //! <b>Effects</b>: Constructs a vector that will use a copy of allocator a
+   //!   and inserts n default initialized values.
+   //!
+   //! <b>Throws</b>: If allocator_type's allocation
+   //!   throws or T's default initialization throws.
+   //!
+   //! <b>Complexity</b>: Linear to n.
+   //!
+   //! <b>Note</b>: Non-standard extension
+   vector(size_type n, default_init_t, const allocator_type &a)
+      :  m_holder(container_detail::uninitialized_size, a, n)
+   {
+      #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+      this->num_alloc += n != 0;
+      #endif
+      pdalboost::container::uninitialized_default_init_alloc_n
+         (this->m_holder.alloc(), n, this->priv_raw_begin());
+   }
+
+   //! <b>Effects</b>: Constructs a vector
+   //!   and inserts n copies of value.
+   //!
+   //! <b>Throws</b>: If allocator_type's allocation
+   //!   throws or T's copy constructor throws.
+   //!
+   //! <b>Complexity</b>: Linear to n.
+   vector(size_type n, const T& value)
+      :  m_holder(container_detail::uninitialized_size, n)
+   {
+      #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+      this->num_alloc += n != 0;
+      #endif
+      pdalboost::container::uninitialized_fill_alloc_n
+         (this->m_holder.alloc(), value, n, this->priv_raw_begin());
+   }
+
+   //! <b>Effects</b>: Constructs a vector that will use a copy of allocator a
+   //!   and inserts n copies of value.
+   //!
+   //! <b>Throws</b>: If allocation
+   //!   throws or T's copy constructor throws.
+   //!
+   //! <b>Complexity</b>: Linear to n.
+   vector(size_type n, const T& value, const allocator_type& a)
+      :  m_holder(container_detail::uninitialized_size, a, n)
+   {
+      #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+      this->num_alloc += n != 0;
+      #endif
+      pdalboost::container::uninitialized_fill_alloc_n
+         (this->m_holder.alloc(), value, n, this->priv_raw_begin());
+   }
+
+   //! <b>Effects</b>: Constructs a vector
+   //!   and inserts a copy of the range [first, last) in the vector.
+   //!
+   //! <b>Throws</b>: If allocator_type's allocation
+   //!   throws or T's constructor taking a dereferenced InIt throws.
+   //!
+   //! <b>Complexity</b>: Linear to the range [first, last).
+   template <class InIt>
+   vector(InIt first, InIt last)
+      :  m_holder()
+   {  this->assign(first, last); }
+
+   //! <b>Effects</b>: Constructs a vector that will use a copy of allocator a
+   //!   and inserts a copy of the range [first, last) in the vector.
+   //!
+   //! <b>Throws</b>: If allocator_type's allocation
+   //!   throws or T's constructor taking a dereferenced InIt throws.
+   //!
+   //! <b>Complexity</b>: Linear to the range [first, last).
+   template <class InIt>
+   vector(InIt first, InIt last, const allocator_type& a)
+      :  m_holder(a)
+   {  this->assign(first, last); }
+
+   //! <b>Effects</b>: Copy constructs a vector.
+   //!
+   //! <b>Postcondition</b>: x == *this.
+   //!
+   //! <b>Throws</b>: If allocator_type's allocation
+   //!   throws or T's copy constructor throws.
+   //!
+   //! <b>Complexity</b>: Linear to the elements x contains.
+   vector(const vector &x)
+      :  m_holder( container_detail::uninitialized_size
+                 , allocator_traits_type::select_on_container_copy_construction(x.m_holder.alloc())
+                 , x.size())
+   {
+      #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+      this->num_alloc += x.size() != 0;
+      #endif
+      ::pdalboost::container::uninitialized_copy_alloc_n
+         ( this->m_holder.alloc(), x.priv_raw_begin()
+         , x.size(), this->priv_raw_begin());
+   }
+
+   //! <b>Effects</b>: Move constructor. Moves x's resources to *this.
+   //!
+   //! <b>Throws</b>: Nothing
+   //!
+   //! <b>Complexity</b>: Constant.
+   vector(BOOST_RV_REF(vector) x) BOOST_NOEXCEPT_OR_NOTHROW
+      :  m_holder(pdalboost::move(x.m_holder))
+   {  BOOST_STATIC_ASSERT((!allocator_traits_type::is_partially_propagable::value));  }
+
+   #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+   //! <b>Effects</b>: Constructs a vector that will use a copy of allocator a
+   //!  and inserts a copy of the range [il.begin(), il.last()) in the vector
+   //!
+   //! <b>Throws</b>: If T's constructor taking a dereferenced initializer_list iterator throws.
+   //!
+   //! <b>Complexity</b>: Linear to the range [il.begin(), il.end()).
+   vector(std::initializer_list<value_type> il, const allocator_type& a = allocator_type())
+      : m_holder(a)
+   {
+      this->assign(il.begin(), il.end());
+   }
+   #endif
+
+   #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
+   //! <b>Effects</b>: Move constructor. Moves x's resources to *this.
+   //!
+   //! <b>Throws</b>: If T's move constructor or allocation throws
+   //!
+   //! <b>Complexity</b>: Linear.
+   //!
+   //! <b>Note</b>: Non-standard extension to support static_vector
+   template<class OtherAllocator>
+   vector(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
+         , typename container_detail::enable_if_c
+            < container_detail::is_version<OtherAllocator, 0>::value>::type * = 0
+         )
+      :  m_holder(pdalboost::move(x.m_holder))
+   {}
+
+   #endif   //!defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
+   //! <b>Effects</b>: Copy constructs a vector using the specified allocator.
+   //!
+   //! <b>Postcondition</b>: x == *this.
+   //!
+   //! <b>Throws</b>: If allocation
+   //!   throws or T's copy constructor throws.
+   //!
+   //! <b>Complexity</b>: Linear to the elements x contains.
+   vector(const vector &x, const allocator_type &a)
+      :  m_holder(container_detail::uninitialized_size, a, x.size())
+   {
+      #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+      this->num_alloc += x.size() != 0;
+      #endif
+      ::pdalboost::container::uninitialized_copy_alloc_n_source
+         ( this->m_holder.alloc(), x.priv_raw_begin()
+         , x.size(), this->priv_raw_begin());
+   }
+
+   //! <b>Effects</b>: Move constructor using the specified allocator.
+   //!                 Moves x's resources to *this if a == allocator_type().
+   //!                 Otherwise copies values from x to *this.
+   //!
+   //! <b>Throws</b>: If allocation or T's copy constructor throws.
+   //!
+   //! <b>Complexity</b>: Constant if a == x.get_allocator(), linear otherwise.
+   vector(BOOST_RV_REF(vector) x, const allocator_type &a)
+      :  m_holder( container_detail::uninitialized_size, a
+                 , is_propagable_from(x.get_stored_allocator(), x.m_holder.start(), a, true) ? 0 : x.size()
+                 )
+   {
+      if(is_propagable_from(x.get_stored_allocator(), x.m_holder.start(), a, true)){
+         this->m_holder.steal_resources(x.m_holder);
+      }
+      else{
+         const size_type n = x.size();
+         #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+         this->num_alloc += n != 0;
+         #endif
+         ::pdalboost::container::uninitialized_move_alloc_n_source
+            ( this->m_holder.alloc(), x.priv_raw_begin()
+            , n, this->priv_raw_begin());
+      }
+   }
+
+   //! <b>Effects</b>: Destroys the vector. All stored values are destroyed
+   //!   and used memory is deallocated.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Linear to the number of elements.
+   ~vector() BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      pdalboost::container::destroy_alloc_n
+         (this->get_stored_allocator(), this->priv_raw_begin(), this->m_holder.m_size);
+      //vector_alloc_holder deallocates the data
+   }
+
+   //! <b>Effects</b>: Makes *this contain the same elements as x.
+   //!
+   //! <b>Postcondition</b>: this->size() == x.size(). *this contains a copy
+   //! of each of x's elements.
+   //!
+   //! <b>Throws</b>: If memory allocation throws or T's copy/move constructor/assignment throws.
+   //!
+   //! <b>Complexity</b>: Linear to the number of elements in x.
+   vector& operator=(BOOST_COPY_ASSIGN_REF(vector) x)
+   {
+      if (&x != this){
+         this->priv_copy_assign(x);
+      }
+      return *this;
+   }
+
+   #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+   //! <b>Effects</b>: Make *this container contains elements from il.
+   //!
+   //! <b>Complexity</b>: Linear to the range [il.begin(), il.end()).
+   vector& operator=(std::initializer_list<value_type> il)
+   {
+      this->assign(il.begin(), il.end());
+      return *this;
+   }
+   #endif
+
+   //! <b>Effects</b>: Move assignment. All x's values are transferred to *this.
+   //!
+   //! <b>Postcondition</b>: x.empty(). *this contains a the elements x had
+   //!   before the function.
+   //!
+   //! <b>Throws</b>: If allocator_traits_type::propagate_on_container_move_assignment
+   //!   is false and (allocation throws or value_type's move constructor throws)
+   //!
+   //! <b>Complexity</b>: Constant if allocator_traits_type::
+   //!   propagate_on_container_move_assignment is true or
+   //!   this->get>allocator() == x.get_allocator(). Linear otherwise.
+   vector& operator=(BOOST_RV_REF(vector) x)
+      BOOST_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value
+                                  || allocator_traits_type::is_always_equal::value)
+   {
+      BOOST_ASSERT(&x != this);
+      this->priv_move_assign(pdalboost::move(x));
+      return *this;
+   }
+
+   #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+
+   //! <b>Effects</b>: Move assignment. All x's values are transferred to *this.
+   //!
+   //! <b>Postcondition</b>: x.empty(). *this contains a the elements x had
+   //!   before the function.
+   //!
+   //! <b>Throws</b>: If move constructor/assignment of T throws or allocation throws
+   //!
+   //! <b>Complexity</b>: Linear.
+   //!
+   //! <b>Note</b>: Non-standard extension to support static_vector
+   template<class OtherAllocator>
+   typename container_detail::enable_if_and
+                           < vector&
+                           , container_detail::is_version<OtherAllocator, 0>
+                           , container_detail::is_different<OtherAllocator, allocator_type>
+                           >::type
+      operator=(BOOST_RV_REF_BEG vector<value_type, OtherAllocator> BOOST_RV_REF_END x)
+   {
+      this->priv_move_assign(pdalboost::move(x));
+      return *this;
+   }
+
+   //! <b>Effects</b>: Copy assignment. All x's values are copied to *this.
+   //!
+   //! <b>Postcondition</b>: x.empty(). *this contains a the elements x had
+   //!   before the function.
+   //!
+   //! <b>Throws</b>: If move constructor/assignment of T throws or allocation throws
+   //!
+   //! <b>Complexity</b>: Linear.
+   //!
+   //! <b>Note</b>: Non-standard extension to support static_vector
+   template<class OtherAllocator>
+   typename container_detail::enable_if_and
+                           < vector&
+                           , container_detail::is_version<OtherAllocator, 0>
+                           , container_detail::is_different<OtherAllocator, allocator_type>
+                           >::type
+      operator=(const vector<value_type, OtherAllocator> &x)
+   {
+      this->priv_copy_assign(x);
+      return *this;
+   }
+
+   #endif
+
+   //! <b>Effects</b>: Assigns the the range [first, last) to *this.
+   //!
+   //! <b>Throws</b>: If memory allocation throws or T's copy/move constructor/assignment or
+   //!   T's constructor/assignment from dereferencing InpIt throws.
+   //!
+   //! <b>Complexity</b>: Linear to n.
+   template <class InIt>
+   void assign(InIt first, InIt last
+      BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename container_detail::disable_if_or
+         < void
+         BOOST_MOVE_I container_detail::is_convertible<InIt BOOST_MOVE_I size_type>
+         BOOST_MOVE_I container_detail::and_
+            < container_detail::is_different<alloc_version BOOST_MOVE_I version_0>
+            BOOST_MOVE_I container_detail::is_not_input_iterator<InIt>
+            >
+         >::type * = 0)
+      )
+   {
+      //Overwrite all elements we can from [first, last)
+      iterator cur = this->begin();
+      const iterator end_it = this->end();
+      for ( ; first != last && cur != end_it; ++cur, ++first){
+         *cur = *first;
+      }
+
+      if (first == last){
+         //There are no more elements in the sequence, erase remaining
+         T* const end_pos = this->priv_raw_end();
+         const size_type n = static_cast<size_type>(end_pos - container_detail::iterator_to_raw_pointer(cur));
+         this->priv_destroy_last_n(n);
+      }
+      else{
+         //There are more elements in the range, insert the remaining ones
+         this->insert(this->cend(), first, last);
+      }
+   }
+
+   #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+   //! <b>Effects</b>: Assigns the the range [il.begin(), il.end()) to *this.
+   //!
+   //! <b>Throws</b>: If memory allocation throws or
+   //!   T's constructor from dereferencing iniializer_list iterator throws.
+   //!
+   void assign(std::initializer_list<T> il)
+   {
+      this->assign(il.begin(), il.end());
+   }
+   #endif
+
+   //! <b>Effects</b>: Assigns the the range [first, last) to *this.
+   //!
+   //! <b>Throws</b>: If memory allocation throws or T's copy/move constructor/assignment or
+   //!   T's constructor/assignment from dereferencing InpIt throws.
+   //!
+   //! <b>Complexity</b>: Linear to n.
+   template <class FwdIt>
+   void assign(FwdIt first, FwdIt last
+      BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename container_detail::disable_if_or
+         < void
+         BOOST_MOVE_I container_detail::is_same<alloc_version BOOST_MOVE_I version_0>
+         BOOST_MOVE_I container_detail::is_convertible<FwdIt BOOST_MOVE_I size_type>
+         BOOST_MOVE_I container_detail::is_input_iterator<FwdIt>
+         >::type * = 0)
+      )
+   {
+      //For Fwd iterators the standard only requires EmplaceConstructible and assignable from *first
+      //so we can't do any backwards allocation
+      const size_type input_sz = static_cast<size_type>(pdalboost::container::iterator_distance(first, last));
+      const size_type old_capacity = this->capacity();
+      if(input_sz > old_capacity){  //If input range is too big, we need to reallocate
+         size_type real_cap = 0;
+         pointer reuse(this->m_holder.start());
+         pointer const ret(this->m_holder.allocation_command(allocate_new|expand_fwd, input_sz, real_cap = input_sz, reuse));
+         if(!reuse){  //New allocation, just emplace new values
+            #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+            ++this->num_alloc;
+            #endif
+            pointer const old_p = this->m_holder.start();
+            if(old_p){
+               this->priv_destroy_all();
+               this->m_holder.alloc().deallocate(old_p, old_capacity);
+            }
+            this->m_holder.start(ret);
+            this->m_holder.capacity(real_cap);
+            this->m_holder.m_size = 0;
+            this->priv_uninitialized_construct_at_end(first, last);
+            return;
+         }
+         else{
+            #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+            ++this->num_expand_fwd;
+            #endif
+            this->m_holder.capacity(real_cap);
+            //Forward expansion, use assignment + back deletion/construction that comes later
+         }
+      }
+      //Overwrite all elements we can from [first, last)
+      iterator cur = this->begin();
+      const iterator end_it = this->end();
+      for ( ; first != last && cur != end_it; ++cur, ++first){
+         *cur = *first;
+      }
+
+      if (first == last){
+         //There are no more elements in the sequence, erase remaining
+         this->priv_destroy_last_n(this->size() - input_sz);
+      }
+      else{
+         //Uninitialized construct at end the remaining range
+         this->priv_uninitialized_construct_at_end(first, last);
+      }
+   }
+
+   //! <b>Effects</b>: Assigns the n copies of val to *this.
+   //!
+   //! <b>Throws</b>: If memory allocation throws or
+   //!   T's copy/move constructor/assignment throws.
+   //!
+   //! <b>Complexity</b>: Linear to n.
+   void assign(size_type n, const value_type& val)
+   {  this->assign(cvalue_iterator(val, n), cvalue_iterator());   }
+
+   //! <b>Effects</b>: Returns a copy of the internal allocator.
+   //!
+   //! <b>Throws</b>: If allocator's copy constructor throws.
+   //!
+   //! <b>Complexity</b>: Constant.
+   allocator_type get_allocator() const BOOST_NOEXCEPT_OR_NOTHROW
+   { return this->m_holder.alloc();  }
+
+   //! <b>Effects</b>: Returns a reference to the internal allocator.
+   //!
+   //! <b>Throws</b>: Nothing
+   //!
+   //! <b>Complexity</b>: Constant.
+   //!
+   //! <b>Note</b>: Non-standard extension.
+   stored_allocator_type &get_stored_allocator() BOOST_NOEXCEPT_OR_NOTHROW
+   {  return this->m_holder.alloc(); }
+
+   //! <b>Effects</b>: Returns a reference to the internal allocator.
+   //!
+   //! <b>Throws</b>: Nothing
+   //!
+   //! <b>Complexity</b>: Constant.
+   //!
+   //! <b>Note</b>: Non-standard extension.
+   const stored_allocator_type &get_stored_allocator() const BOOST_NOEXCEPT_OR_NOTHROW
+   {  return this->m_holder.alloc(); }
+
+   //////////////////////////////////////////////
+   //
+   //                iterators
+   //
+   //////////////////////////////////////////////
+
+   //! <b>Effects</b>: Returns an iterator to the first element contained in the vector.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   iterator begin() BOOST_NOEXCEPT_OR_NOTHROW
+   { return iterator(this->m_holder.start()); }
+
+   //! <b>Effects</b>: Returns a const_iterator to the first element contained in the vector.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   const_iterator begin() const BOOST_NOEXCEPT_OR_NOTHROW
+   { return const_iterator(this->m_holder.start()); }
+
+   //! <b>Effects</b>: Returns an iterator to the end of the vector.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   iterator end() BOOST_NOEXCEPT_OR_NOTHROW
+   { return iterator(this->m_holder.start() + this->m_holder.m_size); }
+
+   //! <b>Effects</b>: Returns a const_iterator to the end of the vector.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   const_iterator end() const BOOST_NOEXCEPT_OR_NOTHROW
+   { return this->cend(); }
+
+   //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
+   //! of the reversed vector.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   reverse_iterator rbegin() BOOST_NOEXCEPT_OR_NOTHROW
+   { return reverse_iterator(this->end());      }
+
+   //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
+   //! of the reversed vector.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   const_reverse_iterator rbegin() const BOOST_NOEXCEPT_OR_NOTHROW
+   { return this->crbegin(); }
+
+   //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
+   //! of the reversed vector.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   reverse_iterator rend() BOOST_NOEXCEPT_OR_NOTHROW
+   { return reverse_iterator(this->begin());       }
+
+   //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
+   //! of the reversed vector.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   const_reverse_iterator rend() const BOOST_NOEXCEPT_OR_NOTHROW
+   { return this->crend(); }
+
+   //! <b>Effects</b>: Returns a const_iterator to the first element contained in the vector.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   const_iterator cbegin() const BOOST_NOEXCEPT_OR_NOTHROW
+   { return const_iterator(this->m_holder.start()); }
+
+   //! <b>Effects</b>: Returns a const_iterator to the end of the vector.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   const_iterator cend() const BOOST_NOEXCEPT_OR_NOTHROW
+   { return const_iterator(this->m_holder.start() + this->m_holder.m_size); }
+
+   //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
+   //! of the reversed vector.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   const_reverse_iterator crbegin() const BOOST_NOEXCEPT_OR_NOTHROW
+   { return const_reverse_iterator(this->end());}
+
+   //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
+   //! of the reversed vector.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   const_reverse_iterator crend() const BOOST_NOEXCEPT_OR_NOTHROW
+   { return const_reverse_iterator(this->begin()); }
+
+   //////////////////////////////////////////////
+   //
+   //                capacity
+   //
+   //////////////////////////////////////////////
+
+   //! <b>Effects</b>: Returns true if the vector contains no elements.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   bool empty() const BOOST_NOEXCEPT_OR_NOTHROW
+   { return !this->m_holder.m_size; }
+
+   //! <b>Effects</b>: Returns the number of the elements contained in the vector.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   size_type size() const BOOST_NOEXCEPT_OR_NOTHROW
+   { return this->m_holder.m_size; }
+
+   //! <b>Effects</b>: Returns the largest possible size of the vector.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW
+   { return allocator_traits_type::max_size(this->m_holder.alloc()); }
+
+   //! <b>Effects</b>: Inserts or erases elements at the end such that
+   //!   the size becomes n. New elements are value initialized.
+   //!
+   //! <b>Throws</b>: If memory allocation throws, or T's copy/move or value initialization throws.
+   //!
+   //! <b>Complexity</b>: Linear to the difference between size() and new_size.
+   void resize(size_type new_size)
+   {  this->priv_resize(new_size, value_init);  }
+
+   //! <b>Effects</b>: Inserts or erases elements at the end such that
+   //!   the size becomes n. New elements are default initialized.
+   //!
+   //! <b>Throws</b>: If memory allocation throws, or T's copy/move or default initialization throws.
+   //!
+   //! <b>Complexity</b>: Linear to the difference between size() and new_size.
+   //!
+   //! <b>Note</b>: Non-standard extension
+   void resize(size_type new_size, default_init_t)
+   {  this->priv_resize(new_size, default_init);  }
+
+   //! <b>Effects</b>: Inserts or erases elements at the end such that
+   //!   the size becomes n. New elements are copy constructed from x.
+   //!
+   //! <b>Throws</b>: If memory allocation throws, or T's copy/move constructor throws.
+   //!
+   //! <b>Complexity</b>: Linear to the difference between size() and new_size.
+   void resize(size_type new_size, const T& x)
+   {  this->priv_resize(new_size, x);  }
+
+   //! <b>Effects</b>: Number of elements for which memory has been allocated.
+   //!   capacity() is always greater than or equal to size().
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   size_type capacity() const BOOST_NOEXCEPT_OR_NOTHROW
+   { return this->m_holder.capacity(); }
+
+   //! <b>Effects</b>: If n is less than or equal to capacity(), this call has no
+   //!   effect. Otherwise, it is a request for allocation of additional memory.
+   //!   If the request is successful, then capacity() is greater than or equal to
+   //!   n; otherwise, capacity() is unchanged. In either case, size() is unchanged.
+   //!
+   //! <b>Throws</b>: If memory allocation allocation throws or T's copy/move constructor throws.
+   void reserve(size_type new_cap)
+   {
+      if (this->capacity() < new_cap){
+         this->priv_reserve_no_capacity(new_cap, alloc_version());
+      }
+   }
+
+   //! <b>Effects</b>: Tries to deallocate the excess of memory created
+   //!   with previous allocations. The size of the vector is unchanged
+   //!
+   //! <b>Throws</b>: If memory allocation throws, or T's copy/move constructor throws.
+   //!
+   //! <b>Complexity</b>: Linear to size().
+   void shrink_to_fit()
+   {  this->priv_shrink_to_fit(alloc_version());   }
+
+   //////////////////////////////////////////////
+   //
+   //               element access
+   //
+   //////////////////////////////////////////////
+
+   //! <b>Requires</b>: !empty()
+   //!
+   //! <b>Effects</b>: Returns a reference to the first
+   //!   element of the container.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   reference         front() BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      BOOST_ASSERT(!this->empty());
+      return *this->m_holder.start();
+   }
+
+   //! <b>Requires</b>: !empty()
+   //!
+   //! <b>Effects</b>: Returns a const reference to the first
+   //!   element of the container.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   const_reference   front() const BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      BOOST_ASSERT(!this->empty());
+      return *this->m_holder.start();
+   }
+
+   //! <b>Requires</b>: !empty()
+   //!
+   //! <b>Effects</b>: Returns a reference to the last
+   //!   element of the container.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   reference         back() BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      BOOST_ASSERT(!this->empty());
+      return this->m_holder.start()[this->m_holder.m_size - 1];
+   }
+
+   //! <b>Requires</b>: !empty()
+   //!
+   //! <b>Effects</b>: Returns a const reference to the last
+   //!   element of the container.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   const_reference   back()  const BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      BOOST_ASSERT(!this->empty());
+      return this->m_holder.start()[this->m_holder.m_size - 1];
+   }
+
+   //! <b>Requires</b>: size() > n.
+   //!
+   //! <b>Effects</b>: Returns a reference to the nth element
+   //!   from the beginning of the container.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   reference operator[](size_type n) BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      BOOST_ASSERT(this->m_holder.m_size > n);
+      return this->m_holder.start()[n];
+   }
+
+   //! <b>Requires</b>: size() > n.
+   //!
+   //! <b>Effects</b>: Returns a const reference to the nth element
+   //!   from the beginning of the container.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   const_reference operator[](size_type n) const BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      BOOST_ASSERT(this->m_holder.m_size > n);
+      return this->m_holder.start()[n];
+   }
+
+   //! <b>Requires</b>: size() >= n.
+   //!
+   //! <b>Effects</b>: Returns an iterator to the nth element
+   //!   from the beginning of the container. Returns end()
+   //!   if n == size().
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   //!
+   //! <b>Note</b>: Non-standard extension
+   iterator nth(size_type n) BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      BOOST_ASSERT(this->m_holder.m_size >= n);
+      return iterator(this->m_holder.start()+n);
+   }
+
+   //! <b>Requires</b>: size() >= n.
+   //!
+   //! <b>Effects</b>: Returns a const_iterator to the nth element
+   //!   from the beginning of the container. Returns end()
+   //!   if n == size().
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   //!
+   //! <b>Note</b>: Non-standard extension
+   const_iterator nth(size_type n) const BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      BOOST_ASSERT(this->m_holder.m_size >= n);
+      return const_iterator(this->m_holder.start()+n);
+   }
+
+   //! <b>Requires</b>: size() >= n.
+   //!
+   //! <b>Effects</b>: Returns an iterator to the nth element
+   //!   from the beginning of the container. Returns end()
+   //!   if n == size().
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   //!
+   //! <b>Note</b>: Non-standard extension
+   size_type index_of(iterator p) BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      //Range check assert done in priv_index_of
+      return this->priv_index_of(vector_iterator_get_ptr(p));
+   }
+
+   //! <b>Requires</b>: begin() <= p <= end().
+   //!
+   //! <b>Effects</b>: Returns the index of the element pointed by p
+   //!   and size() if p == end().
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   //!
+   //! <b>Note</b>: Non-standard extension
+   size_type index_of(const_iterator p) const BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      //Range check assert done in priv_index_of
+      return this->priv_index_of(vector_iterator_get_ptr(p));
+   }
+
+   //! <b>Requires</b>: size() > n.
+   //!
+   //! <b>Effects</b>: Returns a reference to the nth element
+   //!   from the beginning of the container.
+   //!
+   //! <b>Throws</b>: std::range_error if n >= size()
+   //!
+   //! <b>Complexity</b>: Constant.
+   reference at(size_type n)
+   {
+      this->priv_throw_if_out_of_range(n);
+      return this->m_holder.start()[n];
+   }
+
+   //! <b>Requires</b>: size() > n.
+   //!
+   //! <b>Effects</b>: Returns a const reference to the nth element
+   //!   from the beginning of the container.
+   //!
+   //! <b>Throws</b>: std::range_error if n >= size()
+   //!
+   //! <b>Complexity</b>: Constant.
+   const_reference at(size_type n) const
+   {
+      this->priv_throw_if_out_of_range(n);
+      return this->m_holder.start()[n];
+   }
+
+   //////////////////////////////////////////////
+   //
+   //                 data access
+   //
+   //////////////////////////////////////////////
+
+   //! <b>Returns</b>: A pointer such that [data(),data() + size()) is a valid range.
+   //!   For a non-empty vector, data() == &front().
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   T* data() BOOST_NOEXCEPT_OR_NOTHROW
+   { return this->priv_raw_begin(); }
+
+   //! <b>Returns</b>: A pointer such that [data(),data() + size()) is a valid range.
+   //!   For a non-empty vector, data() == &front().
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   const T * data()  const BOOST_NOEXCEPT_OR_NOTHROW
+   { return this->priv_raw_begin(); }
+
+   //////////////////////////////////////////////
+   //
+   //                modifiers
+   //
+   //////////////////////////////////////////////
+
+   #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+   //! <b>Effects</b>: Inserts an object of type T constructed with
+   //!   std::forward<Args>(args)... in the end of the vector.
+   //!
+   //! <b>Throws</b>: If memory allocation throws or the in-place constructor throws or
+   //!   T's copy/move constructor throws.
+   //!
+   //! <b>Complexity</b>: Amortized constant time.
+   template<class ...Args>
+   void emplace_back(BOOST_FWD_REF(Args)...args)
+   {
+      if (BOOST_LIKELY(this->room_enough())){
+         //There is more memory, just construct a new object at the end
+         allocator_traits_type::construct(this->m_holder.alloc(), this->priv_raw_end(), ::pdalboost::forward<Args>(args)...);
+         ++this->m_holder.m_size;
+      }
+      else{
+         typedef container_detail::insert_emplace_proxy<Allocator, T*, Args...> type;
+         this->priv_forward_range_insert_no_capacity
+            (this->back_ptr(), 1, type(::pdalboost::forward<Args>(args)...), alloc_version());
+      }
+   }
+
+   //! <b>Effects</b>: Inserts an object of type T constructed with
+   //!   std::forward<Args>(args)... in the end of the vector.
+   //!
+   //! <b>Throws</b>: If the in-place constructor throws.
+   //!
+   //! <b>Complexity</b>: Constant time.
+   //!
+   //! <b>Note</b>: Non-standard extension.
+   template<class ...Args>
+   bool stable_emplace_back(BOOST_FWD_REF(Args)...args)
+   {
+      const bool is_room_enough = this->room_enough() || (alloc_version::value == 2 && this->m_holder.try_expand_fwd(1u));
+      if (BOOST_LIKELY(is_room_enough)){
+         //There is more memory, just construct a new object at the end
+         allocator_traits_type::construct(this->m_holder.alloc(), this->priv_raw_end(), ::pdalboost::forward<Args>(args)...);
+         ++this->m_holder.m_size;
+      }
+      return is_room_enough;
+   }
+
+   //! <b>Requires</b>: position must be a valid iterator of *this.
+   //!
+   //! <b>Effects</b>: Inserts an object of type T constructed with
+   //!   std::forward<Args>(args)... before position
+   //!
+   //! <b>Throws</b>: If memory allocation throws or the in-place constructor throws or
+   //!   T's copy/move constructor/assignment throws.
+   //!
+   //! <b>Complexity</b>: If position is end(), amortized constant time
+   //!   Linear time otherwise.
+   template<class ...Args>
+   iterator emplace(const_iterator position, BOOST_FWD_REF(Args) ...args)
+   {
+      BOOST_ASSERT(this->priv_in_range_or_end(position));
+      //Just call more general insert(pos, size, value) and return iterator
+      typedef container_detail::insert_emplace_proxy<Allocator, T*, Args...> type;
+      return this->priv_forward_range_insert( vector_iterator_get_ptr(position), 1
+                                            , type(::pdalboost::forward<Args>(args)...));
+   }
+
+   #else // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+   #define BOOST_CONTAINER_VECTOR_EMPLACE_CODE(N) \
+   BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
+   void emplace_back(BOOST_MOVE_UREF##N)\
+   {\
+      if (BOOST_LIKELY(this->room_enough())){\
+         allocator_traits_type::construct (this->m_holder.alloc()\
+            , this->priv_raw_end() BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
+         ++this->m_holder.m_size;\
+      }\
+      else{\
+         typedef container_detail::insert_emplace_proxy_arg##N<Allocator, T* BOOST_MOVE_I##N BOOST_MOVE_TARG##N> type;\
+         this->priv_forward_range_insert_no_capacity\
+            ( this->back_ptr(), 1, type(BOOST_MOVE_FWD##N), alloc_version());\
+      }\
+   }\
+   \
+   BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
+   bool stable_emplace_back(BOOST_MOVE_UREF##N)\
+   {\
+      const bool is_room_enough = this->room_enough() || (alloc_version::value == 2 && this->m_holder.try_expand_fwd(1u));\
+      if (BOOST_LIKELY(is_room_enough)){\
+         allocator_traits_type::construct (this->m_holder.alloc()\
+            , this->priv_raw_end() BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
+         ++this->m_holder.m_size;\
+      }\
+      return is_room_enough;\
+   }\
+   \
+   BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
+   iterator emplace(const_iterator pos BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
+   {\
+      BOOST_ASSERT(this->priv_in_range_or_end(pos));\
+      typedef container_detail::insert_emplace_proxy_arg##N<Allocator, T* BOOST_MOVE_I##N BOOST_MOVE_TARG##N> type;\
+      return this->priv_forward_range_insert(vector_iterator_get_ptr(pos), 1, type(BOOST_MOVE_FWD##N));\
+   }\
+   //
+   BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_VECTOR_EMPLACE_CODE)
+   #undef BOOST_CONTAINER_VECTOR_EMPLACE_CODE
+
+   #endif
+
+   #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+   //! <b>Effects</b>: Inserts a copy of x at the end of the vector.
+   //!
+   //! <b>Throws</b>: If memory allocation throws or
+   //!   T's copy/move constructor throws.
+   //!
+   //! <b>Complexity</b>: Amortized constant time.
+   void push_back(const T &x);
+
+   //! <b>Effects</b>: Constructs a new element in the end of the vector
+   //!   and moves the resources of x to this new element.
+   //!
+   //! <b>Throws</b>: If memory allocation throws or
+   //!   T's copy/move constructor throws.
+   //!
+   //! <b>Complexity</b>: Amortized constant time.
+   void push_back(T &&x);
+   #else
+   BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back)
+   #endif
+
+   #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+   //! <b>Requires</b>: position must be a valid iterator of *this.
+   //!
+   //! <b>Effects</b>: Insert a copy of x before position.
+   //!
+   //! <b>Throws</b>: If memory allocation throws or T's copy/move constructor/assignment throws.
+   //!
+   //! <b>Complexity</b>: If position is end(), amortized constant time
+   //!   Linear time otherwise.
+   iterator insert(const_iterator position, const T &x);
+
+   //! <b>Requires</b>: position must be a valid iterator of *this.
+   //!
+   //! <b>Effects</b>: Insert a new element before position with x's resources.
+   //!
+   //! <b>Throws</b>: If memory allocation throws.
+   //!
+   //! <b>Complexity</b>: If position is end(), amortized constant time
+   //!   Linear time otherwise.
+   iterator insert(const_iterator position, T &&x);
+   #else
+   BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator, const_iterator)
+   #endif
+
+   //! <b>Requires</b>: p must be a valid iterator of *this.
+   //!
+   //! <b>Effects</b>: Insert n copies of x before pos.
+   //!
+   //! <b>Returns</b>: an iterator to the first inserted element or p if n is 0.
+   //!
+   //! <b>Throws</b>: If memory allocation throws or T's copy/move constructor throws.
+   //!
+   //! <b>Complexity</b>: Linear to n.
+   iterator insert(const_iterator p, size_type n, const T& x)
+   {
+      BOOST_ASSERT(this->priv_in_range_or_end(p));
+      container_detail::insert_n_copies_proxy<Allocator, T*> proxy(x);
+      return this->priv_forward_range_insert(vector_iterator_get_ptr(p), n, proxy);
+   }
+
+   //! <b>Requires</b>: p must be a valid iterator of *this.
+   //!
+   //! <b>Effects</b>: Insert a copy of the [first, last) range before pos.
+   //!
+   //! <b>Returns</b>: an iterator to the first inserted element or pos if first == last.
+   //!
+   //! <b>Throws</b>: If memory allocation throws, T's constructor from a
+   //!   dereferenced InpIt throws or T's copy/move constructor/assignment throws.
+   //!
+   //! <b>Complexity</b>: Linear to pdalboost::container::iterator_distance [first, last).
+   template <class InIt>
+   iterator insert(const_iterator pos, InIt first, InIt last
+      #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+      , typename container_detail::disable_if_or
+         < void
+         , container_detail::is_convertible<InIt, size_type>
+         , container_detail::is_not_input_iterator<InIt>
+         >::type * = 0
+      #endif
+      )
+   {
+      BOOST_ASSERT(this->priv_in_range_or_end(pos));
+      const size_type n_pos = pos - this->cbegin();
+      iterator it(vector_iterator_get_ptr(pos));
+      for(;first != last; ++first){
+         it = this->emplace(it, *first);
+         ++it;
+      }
+      return iterator(this->m_holder.start() + n_pos);
+   }
+
+   #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+   template <class FwdIt>
+   iterator insert(const_iterator pos, FwdIt first, FwdIt last
+      , typename container_detail::disable_if_or
+         < void
+         , container_detail::is_convertible<FwdIt, size_type>
+         , container_detail::is_input_iterator<FwdIt>
+         >::type * = 0
+      )
+   {
+      BOOST_ASSERT(this->priv_in_range_or_end(pos));
+      container_detail::insert_range_proxy<Allocator, FwdIt, T*> proxy(first);
+      return this->priv_forward_range_insert(vector_iterator_get_ptr(pos), pdalboost::container::iterator_distance(first, last), proxy);
+   }
+   #endif
+
+   //! <b>Requires</b>: p must be a valid iterator of *this. num, must
+   //!   be equal to pdalboost::container::iterator_distance(first, last)
+   //!
+   //! <b>Effects</b>: Insert a copy of the [first, last) range before pos.
+   //!
+   //! <b>Returns</b>: an iterator to the first inserted element or pos if first == last.
+   //!
+   //! <b>Throws</b>: If memory allocation throws, T's constructor from a
+   //!   dereferenced InpIt throws or T's copy/move constructor/assignment throws.
+   //!
+   //! <b>Complexity</b>: Linear to pdalboost::container::iterator_distance [first, last).
+   //!
+   //! <b>Note</b>: This function avoids a linear operation to calculate pdalboost::container::iterator_distance[first, last)
+   //!   for forward and bidirectional iterators, and a one by one insertion for input iterators. This is a
+   //!   a non-standard extension.
+   #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
+   template <class InIt>
+   iterator insert(const_iterator pos, size_type num, InIt first, InIt last)
+   {
+      BOOST_ASSERT(this->priv_in_range_or_end(pos));
+      BOOST_ASSERT(container_detail::is_input_iterator<InIt>::value ||
+                   num == static_cast<size_type>(pdalboost::container::iterator_distance(first, last)));
+      (void)last;
+      container_detail::insert_range_proxy<Allocator, InIt, T*> proxy(first);
+      return this->priv_forward_range_insert(vector_iterator_get_ptr(pos), num, proxy);
+   }
+   #endif
+
+   #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+   //! <b>Requires</b>: position must be a valid iterator of *this.
+   //!
+   //! <b>Effects</b>: Insert a copy of the [il.begin(), il.end()) range before position.
+   //!
+   //! <b>Returns</b>: an iterator to the first inserted element or position if first == last.
+   //!
+   //! <b>Complexity</b>: Linear to the range [il.begin(), il.end()).
+   iterator insert(const_iterator position, std::initializer_list<value_type> il)
+   {
+      //Assertion done in insert()
+      return this->insert(position, il.begin(), il.end());
+   }
+   #endif
+
+   //! <b>Effects</b>: Removes the last element from the container.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant time.
+   void pop_back() BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      BOOST_ASSERT(!this->empty());
+      //Destroy last element
+      this->priv_destroy_last();
+   }
+
+   //! <b>Effects</b>: Erases the element at position pos.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Linear to the elements between pos and the
+   //!   last element. Constant if pos is the last element.
+   iterator erase(const_iterator position)
+   {
+      BOOST_ASSERT(this->priv_in_range(position));
+      const pointer p = vector_iterator_get_ptr(position);
+      T *const pos_ptr = container_detail::to_raw_pointer(p);
+      T *const beg_ptr = this->priv_raw_begin();
+      T *const new_end_ptr = ::pdalboost::container::move(pos_ptr + 1, beg_ptr + this->m_holder.m_size, pos_ptr);
+      //Move elements forward and destroy last
+      this->priv_destroy_last(pos_ptr == new_end_ptr);
+      return iterator(p);
+   }
+
+   //! <b>Effects</b>: Erases the elements pointed by [first, last).
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Linear to the distance between first and last
+   //!   plus linear to the elements between pos and the last element.
+   iterator erase(const_iterator first, const_iterator last)
+   {
+      BOOST_ASSERT(first == last ||
+         (first < last && this->priv_in_range(first) && this->priv_in_range_or_end(last)));
+      if (first != last){
+         T* const old_end_ptr = this->priv_raw_end();
+         T* const first_ptr = container_detail::to_raw_pointer(vector_iterator_get_ptr(first));
+         T* const last_ptr  = container_detail::to_raw_pointer(vector_iterator_get_ptr(last));
+         T* const ptr = container_detail::to_raw_pointer(pdalboost::container::move(last_ptr, old_end_ptr, first_ptr));
+         this->priv_destroy_last_n(old_end_ptr - ptr);
+      }
+      return iterator(vector_iterator_get_ptr(first));
+   }
+
+   //! <b>Effects</b>: Swaps the contents of *this and x.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Constant.
+   void swap(vector& x)
+      BOOST_NOEXCEPT_IF( ((allocator_traits_type::propagate_on_container_swap::value
+                                    || allocator_traits_type::is_always_equal::value) &&
+                                    !container_detail::is_version<Allocator, 0>::value))
+   {
+      this->priv_swap(x, container_detail::bool_<container_detail::is_version<Allocator, 0>::value>());
+   }
+
+   #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+   //! <b>Effects</b>: Swaps the contents of *this and x.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Linear
+   //!
+   //! <b>Note</b>: Non-standard extension to support static_vector
+   template<class OtherAllocator>
+   void swap(vector<T, OtherAllocator> & x
+            , typename container_detail::enable_if_and
+                     < void
+                     , container_detail::is_version<OtherAllocator, 0>
+                     , container_detail::is_different<OtherAllocator, allocator_type>
+                     >::type * = 0
+            )
+   {  this->m_holder.deep_swap(x.m_holder); }
+
+   #endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+   //! <b>Effects</b>: Erases all the elements of the vector.
+   //!
+   //! <b>Throws</b>: Nothing.
+   //!
+   //! <b>Complexity</b>: Linear to the number of elements in the container.
+   void clear() BOOST_NOEXCEPT_OR_NOTHROW
+   {  this->priv_destroy_all();  }
+
+   //! <b>Effects</b>: Returns true if x and y are equal
+   //!
+   //! <b>Complexity</b>: Linear to the number of elements in the container.
+   friend bool operator==(const vector& x, const vector& y)
+   {  return x.size() == y.size() && ::pdalboost::container::algo_equal(x.begin(), x.end(), y.begin());  }
+
+   //! <b>Effects</b>: Returns true if x and y are unequal
+   //!
+   //! <b>Complexity</b>: Linear to the number of elements in the container.
+   friend bool operator!=(const vector& x, const vector& y)
+   {  return !(x == y); }
+
+   //! <b>Effects</b>: Returns true if x is less than y
+   //!
+   //! <b>Complexity</b>: Linear to the number of elements in the container.
+   friend bool operator<(const vector& x, const vector& y)
+   {
+      const_iterator first1(x.cbegin()), first2(y.cbegin());
+      const const_iterator last1(x.cend()), last2(y.cend());
+      for ( ; (first1 != last1) && (first2 != last2); ++first1, ++first2 ) {
+         if (*first1 < *first2) return true;
+         if (*first2 < *first1) return false;
+      }
+      return (first1 == last1) && (first2 != last2);
+   }
+
+   //! <b>Effects</b>: Returns true if x is greater than y
+   //!
+   //! <b>Complexity</b>: Linear to the number of elements in the container.
+   friend bool operator>(const vector& x, const vector& y)
+   {  return y < x;  }
+
+   //! <b>Effects</b>: Returns true if x is equal or less than y
+   //!
+   //! <b>Complexity</b>: Linear to the number of elements in the container.
+   friend bool operator<=(const vector& x, const vector& y)
+   {  return !(y < x);  }
+
+   //! <b>Effects</b>: Returns true if x is equal or greater than y
+   //!
+   //! <b>Complexity</b>: Linear to the number of elements in the container.
+   friend bool operator>=(const vector& x, const vector& y)
+   {  return !(x < y);  }
+
+   //! <b>Effects</b>: x.swap(y)
+   //!
+   //! <b>Complexity</b>: Constant.
+   friend void swap(vector& x, vector& y)
+   {  x.swap(y);  }
+
+   #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+   //! <b>Effects</b>: If n is less than or equal to capacity(), this call has no
+   //!   effect. Otherwise, it is a request for allocation of additional memory
+   //!   (memory expansion) that will not invalidate iterators.
+   //!   If the request is successful, then capacity() is greater than or equal to
+   //!   n; otherwise, capacity() is unchanged. In either case, size() is unchanged.
+   //!
+   //! <b>Throws</b>: If memory allocation allocation throws or T's copy/move constructor throws.
+   //!
+   //! <b>Note</b>: Non-standard extension.
+   bool stable_reserve(size_type new_cap)
+   {
+      const size_type cp = this->capacity();
+      return cp >= new_cap || (alloc_version::value == 2 && this->m_holder.try_expand_fwd(new_cap - cp));
+   }
+
+   //Absolutely experimental. This function might change, disappear or simply crash!
+   template<class BiDirPosConstIt, class BiDirValueIt>
+   void insert_ordered_at(const size_type element_count, BiDirPosConstIt last_position_it, BiDirValueIt last_value_it)
+   {
+      typedef container_detail::vector_insert_ordered_cursor<BiDirPosConstIt, BiDirValueIt> inserter_t;
+      return this->priv_insert_ordered_at(element_count, inserter_t(last_position_it, last_value_it));
+   }
+
+   template<class BidirIt>
+   void merge(BidirIt first, BidirIt last)
+   {  this->merge(first, last, value_less());  }
+
+   template<class BidirIt, class Compare>
+   void merge(BidirIt first, BidirIt last, Compare comp)
+   {  this->priv_merge(container_detail::false_type(), first, last, comp);  }
+
+   template<class BidirIt>
+   void merge_unique(BidirIt first, BidirIt last)
+   {  this->priv_merge(container_detail::true_type(),  first, last, value_less());  }
+
+   template<class BidirIt, class Compare>
+   void merge_unique(BidirIt first, BidirIt last, Compare comp)
+   {  this->priv_merge(container_detail::true_type(),  first, last, comp);  }
+
+   private:
+   template<class PositionValue>
+   void priv_insert_ordered_at(const size_type element_count, PositionValue position_value)
+   {
+      const size_type old_size_pos = this->size();
+      this->reserve(old_size_pos + element_count);
+      T* const begin_ptr = this->priv_raw_begin();
+      size_type insertions_left = element_count;
+      size_type prev_pos = old_size_pos;
+      size_type old_hole_size = element_count;
+
+      //Exception rollback. If any copy throws before the hole is filled, values
+      //already inserted/copied at the end of the buffer will be destroyed.
+      typename value_traits::ArrayDestructor past_hole_values_destroyer
+         (begin_ptr + old_size_pos + element_count, this->m_holder.alloc(), size_type(0u));
+      //Loop for each insertion backwards, first moving the elements after the insertion point,
+      //then inserting the element.
+      while(insertions_left){
+         --position_value;
+         size_type const pos = position_value.get_pos();
+         BOOST_ASSERT(pos != size_type(-1) && pos <= old_size_pos && pos <= prev_pos);
+         //If needed shift the range after the insertion point and the previous insertion point.
+         //Function will take care if the shift crosses the size() boundary, using copy/move
+         //or uninitialized copy/move if necessary.
+         size_type new_hole_size = (pos != prev_pos)
+            ? priv_insert_ordered_at_shift_range(pos, prev_pos, this->size(), insertions_left)
+            : old_hole_size
+            ;
+         if(new_hole_size){
+            //The hole was reduced by priv_insert_ordered_at_shift_range so expand exception rollback range backwards
+            past_hole_values_destroyer.increment_size_backwards(prev_pos - pos);
+            //Insert the new value in the hole
+            allocator_traits_type::construct(this->m_holder.alloc(), begin_ptr + pos + insertions_left - 1, position_value.get_val());
+            if(--new_hole_size){
+               //The hole was reduced by the new insertion by one
+               past_hole_values_destroyer.increment_size_backwards(size_type(1u));
+            }
+            else{
+               //Hole was just filled, disable exception rollback and change vector size
+               past_hole_values_destroyer.release();
+               this->m_holder.m_size += element_count;
+            }
+         }
+         else{
+            if(old_hole_size){
+               //Hole was just filled by priv_insert_ordered_at_shift_range, disable exception rollback and change vector size
+               past_hole_values_destroyer.release();
+               this->m_holder.m_size += element_count;
+            }
+            //Insert the new value in the already constructed range
+            begin_ptr[pos + insertions_left - 1] = position_value.get_val();
+         }
+         --insertions_left;
+         old_hole_size = new_hole_size;
+         prev_pos = pos;
+      }
+   }
+
+   template<class UniqueBool, class BidirIt, class Compare>
+   void priv_merge(UniqueBool, BidirIt first, BidirIt last, Compare comp)
+   {
+      size_type const n = static_cast<size_type>(pdalboost::container::iterator_distance(first, last));
+      size_type const s = this->size();
+      if(BOOST_LIKELY(s)){
+         size_type const c = this->capacity();
+         size_type const free_c = (c - s);
+         //Use a new buffer if current one is too small for new elements,
+         //or there is no room for position indexes
+         if(free_c < n){
+            size_type const new_size = s + n;
+            size_type new_cap = new_size;
+            pointer p = pointer();
+            p = this->m_holder.allocation_command(allocate_new, new_size, new_cap, p);
+            this->priv_merge_in_new_buffer(UniqueBool(), first, n, comp, p, new_cap);
+         }
+         else if(!UniqueBool::value && free_c >= n){
+            typedef container_detail::vector_merge_cursor<T, size_type, BidirIt, Compare> inserter_t;
+            T* const pbeg = this->priv_raw_begin();
+            return this->priv_insert_ordered_at(n, inserter_t(pbeg, pbeg + s, last, comp));
+         }
+         else{ //UniqueBool::value == true and free_c >= n
+            std::size_t remaining = n;
+            static const std::size_t PosCount = 64u;
+            size_type positions[PosCount];
+            size_type *indexes = 0;
+            while(remaining){
+               //Query for room to store indexes in the remaining buffer
+               uintptr_t const szt_align_mask = container_detail::alignment_of<size_type>::value - 1;
+               pdalboost::uintptr_t const addr = pdalboost::uintptr_t(this->priv_raw_begin() + s + n);
+               pdalboost::uintptr_t const capaddr = pdalboost::uintptr_t(this->priv_raw_begin() + c);
+               pdalboost::uintptr_t const aligned_addr = (addr + szt_align_mask) & ~szt_align_mask;
+               indexes =  reinterpret_cast<size_type *>(aligned_addr);
+               std::size_t index_capacity = (aligned_addr >= capaddr) ? 0u : (capaddr - addr)/sizeof(size_type);
+
+               //Capacity is constant, we're not going to change it
+               if(index_capacity < PosCount){
+                  indexes =  positions; 
+                  index_capacity = PosCount;
+               }
+               if(index_capacity > remaining)
+                  index_capacity = remaining;
+               BidirIt limit = first;
+               pdalboost::container::iterator_advance(limit, index_capacity);
+               this->priv_insert_ordered_range(UniqueBool(), index_capacity, first, limit, indexes, comp);
+               first = limit;
+               remaining -= index_capacity;
+            }
+         }
+      }
+      else{
+         this->insert(this->cend(), n, first, last);
+      }
+   }
+
+   template <class UniqueBool, class BidirIt, class Compare>
+   void priv_insert_ordered_range
+      (UniqueBool, size_type const n, BidirIt first, BidirIt const last, size_type positions[], Compare comp)
+   {
+      //Linear: at most N + M -1 comparisons
+      //Log: MlogN
+      //Average
+      //Linear: N + M - 2
+      //Log: MlogN
+      //N+M - 2
+      //N
+      //(N+M)/2 < MlogN
+      //(N/M+1)/2 <= logN
+      //bool const linear = !s || !n || (s <= n) || ((s+n)/n/2 < logN);
+      size_type const s = this->size();
+      size_type remaining = n;
+      T* const pbeg = this->priv_raw_begin();
+      T* const pend = pbeg + s;
+      T* pcur = pbeg;
+      size_type *position = positions;
+      size_type added_in_middle = 0;
+      if(first != last && pcur != pend){
+         while(1){
+            //maintain stability moving external values only if they are strictly less
+            if(comp(*first, *pcur)) { 
+               *position = static_cast<size_type>(pcur - pbeg);
+               BOOST_ASSERT((position == positions) || (*(position-1) == size_type(-1)) || (*(position-1) <= *position));
+               ++position;
+               ++added_in_middle;
+               --remaining;
+               if(++first == last)  break;
+            }
+            else if(UniqueBool::value && !comp(*pcur, *first)){
+               *position = size_type(-1);
+               ++position;
+               --remaining;
+               if(++first == last)  break;
+            }
+            else{
+               if(++pcur == pend)   break;
+            }
+         }
+      }
+      this->insert_ordered_at(added_in_middle, position, first);
+      this->insert(this->cend(), remaining, first, last);
+   }
+
+   template<class UniqueBool, class FwdIt, class Compare>
+   void priv_merge_in_new_buffer
+      (UniqueBool, FwdIt first, size_type n, Compare comp, pointer new_storage, size_type const new_cap)
+   {
+      BOOST_ASSERT((new_cap >= this->size() ) && (new_cap - this->size()) >= n);
+      allocator_type &a = this->m_holder.alloc();
+      typename value_traits::ArrayDeallocator new_buffer_deallocator(new_storage, a, new_cap);
+      typename value_traits::ArrayDestructor  new_values_destroyer(new_storage, a, 0u);
+      T* pbeg  = this->priv_raw_begin();
+      size_type const old_size = this->size();
+      T* const pend = pbeg + old_size;
+      T* d_first = container_detail::to_raw_pointer(new_storage);
+      size_type added = n;
+      //Merge in new buffer loop
+      while(1){
+         if(!n) {
+            ::pdalboost::container::uninitialized_move_alloc(this->m_holder.alloc(), pbeg, pend, d_first);
+            break;
+         } 
+         else if(pbeg == pend) {
+            ::pdalboost::container::uninitialized_move_alloc_n(this->m_holder.alloc(), first, n, d_first);
+            break;
+         }
+         //maintain stability moving external values only if they are strictly less
+         else if(comp(*first, *pbeg)) {
+            allocator_traits_type::construct( this->m_holder.alloc(), d_first, ::pdalboost::move(*first) );
+            new_values_destroyer.increment_size(1u);
+            ++first;
+            --n;
+            ++d_first;
+         }
+         else if(UniqueBool::value && !comp(*pbeg, *first)){
+            ++first;
+            --n;
+            --added;
+         }
+         else{
+            allocator_traits_type::construct( this->m_holder.alloc(), d_first, ::pdalboost::move(*pbeg) );
+            new_values_destroyer.increment_size(1u);
+            ++pbeg;
+            ++d_first;
+         }
+      }
+
+      //Nothrow operations
+      pointer const old_p     = this->m_holder.start();
+      size_type const old_cap = this->m_holder.capacity();
+      pdalboost::container::destroy_alloc_n(a, container_detail::to_raw_pointer(old_p), old_size);
+      a.deallocate(old_p, old_cap);
+      this->m_holder.m_size = old_size + added;
+      this->m_holder.start(new_storage);
+      this->m_holder.capacity(new_cap);
+      new_buffer_deallocator.release();
+      new_values_destroyer.release();
+   }
+
+   bool room_enough() const
+   {  return this->m_holder.m_size < this->m_holder.capacity();   }
+
+   pointer back_ptr() const
+   {  return this->m_holder.start() + this->m_holder.m_size;  }
+
+   size_type priv_index_of(pointer p) const
+   {
+      BOOST_ASSERT(this->m_holder.start() <= p);
+      BOOST_ASSERT(p <= (this->m_holder.start()+this->size()));
+      return static_cast<size_type>(p - this->m_holder.start());
+   }
+
+   template<class OtherAllocator>
+   void priv_move_assign(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
+      , typename container_detail::enable_if_c
+         < container_detail::is_version<OtherAllocator, 0>::value >::type * = 0)
+   {
+      if(!container_detail::is_same<OtherAllocator, allocator_type>::value &&
+          this->capacity() < x.size()){
+         throw_bad_alloc();
+      }
+      T* const this_start  = this->priv_raw_begin();
+      T* const other_start = x.priv_raw_begin();
+      const size_type this_sz  = m_holder.m_size;
+      const size_type other_sz = static_cast<size_type>(x.m_holder.m_size);
+      pdalboost::container::move_assign_range_alloc_n(this->m_holder.alloc(), other_start, other_sz, this_start, this_sz);
+      this->m_holder.m_size = other_sz;
+   }
+
+   template<class OtherAllocator>
+   void priv_move_assign(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
+      , typename container_detail::disable_if_or
+         < void
+         , container_detail::is_version<OtherAllocator, 0>
+         , container_detail::is_different<OtherAllocator, allocator_type>
+         >::type * = 0)
+   {
+      //for move assignment, no aliasing (&x != this) is assummed.
+      BOOST_ASSERT(this != &x);
+      allocator_type &this_alloc = this->m_holder.alloc();
+      allocator_type &x_alloc    = x.m_holder.alloc();
+      const bool propagate_alloc = allocator_traits_type::propagate_on_container_move_assignment::value;
+
+      const bool is_propagable_from_x = is_propagable_from(x_alloc, x.m_holder.start(), this_alloc, propagate_alloc);
+      const bool is_propagable_from_t = is_propagable_from(this_alloc, m_holder.start(), x_alloc,   propagate_alloc);
+      const bool are_both_propagable  = is_propagable_from_x && is_propagable_from_t;
+
+      //Resources can be transferred if both allocators are
+      //going to be equal after this function (either propagated or already equal)
+      if(are_both_propagable){
+         //Destroy objects but retain memory in case x reuses it in the future
+         this->clear();
+         this->m_holder.swap_resources(x.m_holder);
+      }
+      else if(is_propagable_from_x){
+         this->clear();
+         this->m_holder.alloc().deallocate(this->m_holder.m_start, this->m_holder.m_capacity);
+         this->m_holder.steal_resources(x.m_holder);
+      }
+      //Else do a one by one move
+      else{
+         this->assign( pdalboost::make_move_iterator(container_detail::iterator_to_raw_pointer(x.begin()))
+                     , pdalboost::make_move_iterator(container_detail::iterator_to_raw_pointer(x.end()  ))
+                     );
+      }
+      //Move allocator if needed
+      container_detail::move_alloc(this_alloc, x_alloc, container_detail::bool_<propagate_alloc>());
+   }
+
+   template<class OtherAllocator>
+   void priv_copy_assign(const vector<T, OtherAllocator> &x
+      , typename container_detail::enable_if_c
+         < container_detail::is_version<OtherAllocator, 0>::value >::type * = 0)
+   {
+      if(!container_detail::is_same<OtherAllocator, allocator_type>::value &&
+         this->capacity() < x.size()){
+         throw_bad_alloc();
+      }
+      T* const this_start  = this->priv_raw_begin();
+      T* const other_start = x.priv_raw_begin();
+      const size_type this_sz  = m_holder.m_size;
+      const size_type other_sz = static_cast<size_type>(x.m_holder.m_size);
+      pdalboost::container::copy_assign_range_alloc_n(this->m_holder.alloc(), other_start, other_sz, this_start, this_sz);
+      this->m_holder.m_size = other_sz;
+   }
+
+   template<class OtherAllocator>
+   typename container_detail::disable_if_or
+      < void
+      , container_detail::is_version<OtherAllocator, 0>
+      , container_detail::is_different<OtherAllocator, allocator_type>
+      >::type
+      priv_copy_assign(const vector<T, OtherAllocator> &x)
+   {
+      allocator_type &this_alloc     = this->m_holder.alloc();
+      const allocator_type &x_alloc  = x.m_holder.alloc();
+      container_detail::bool_<allocator_traits_type::
+         propagate_on_container_copy_assignment::value> flag;
+      if(flag && this_alloc != x_alloc){
+         this->clear();
+         this->shrink_to_fit();
+      }
+      container_detail::assign_alloc(this_alloc, x_alloc, flag);
+      this->assign( x.priv_raw_begin(), x.priv_raw_end() );
+   }
+
+   template<class Vector>  //Template it to avoid it in explicit instantiations
+   void priv_swap(Vector &x, container_detail::true_type)   //version_0
+   {  this->m_holder.deep_swap(x.m_holder);  }
+
+   template<class Vector>  //Template it to avoid it in explicit instantiations
+   void priv_swap(Vector &x, container_detail::false_type)  //version_N
+   {
+      const bool propagate_alloc = allocator_traits_type::propagate_on_container_swap::value;
+      if(are_swap_propagable( this->get_stored_allocator(), this->m_holder.start()
+                            , x.get_stored_allocator(), x.m_holder.start(), propagate_alloc)){
+         //Just swap internals
+         this->m_holder.swap_resources(x.m_holder);
+      }
+      else{
+         //Else swap element by element...
+         bool const t_smaller = this->size() < x.size();
+         vector &sml = t_smaller ? *this : x;
+         vector &big = t_smaller ? x : *this;
+
+         size_type const common_elements = sml.size();
+         for(size_type i = 0; i != common_elements; ++i){
+            pdalboost::adl_move_swap(sml[i], big[i]);
+         }
+         //... and move-insert the remaining range
+         sml.insert( sml.cend()
+                   , pdalboost::make_move_iterator(container_detail::iterator_to_raw_pointer(big.nth(common_elements)))
+                   , pdalboost::make_move_iterator(container_detail::iterator_to_raw_pointer(big.end()))
+                   );
+         //Destroy remaining elements
+         big.erase(big.nth(common_elements), big.cend());
+      }
+      //And now swap the allocator
+      container_detail::swap_alloc(this->m_holder.alloc(), x.m_holder.alloc(), container_detail::bool_<propagate_alloc>());
+   }
+
+   void priv_reserve_no_capacity(size_type, version_0)
+   {  throw_bad_alloc();  }
+
+   container_detail::insert_range_proxy<Allocator, pdalboost::move_iterator<T*>, T*> priv_dummy_empty_proxy()
+   {
+      return container_detail::insert_range_proxy<Allocator, pdalboost::move_iterator<T*>, T*>
+         (::pdalboost::make_move_iterator((T *)0));
+   }
+
+   void priv_reserve_no_capacity(size_type new_cap, version_1)
+   {
+      //There is not enough memory, allocate a new buffer
+      //Pass the hint so that allocators can take advantage of this.
+      pointer const p = allocator_traits_type::allocate(this->m_holder.alloc(), new_cap, this->m_holder.m_start);
+      //We will reuse insert code, so create a dummy input iterator
+      this->priv_forward_range_insert_new_allocation
+         ( container_detail::to_raw_pointer(p), new_cap, this->priv_raw_end(), 0, this->priv_dummy_empty_proxy());
+   }
+
+   void priv_reserve_no_capacity(size_type new_cap, version_2)
+   {
+      //There is not enough memory, allocate a new
+      //buffer or expand the old one.
+      bool same_buffer_start;
+      size_type real_cap = 0;
+      pointer reuse = 0;
+      pointer const ret(this->m_holder.allocation_command(allocate_new | expand_fwd | expand_bwd, new_cap, real_cap = new_cap, reuse));
+
+      //Check for forward expansion
+      same_buffer_start = reuse && this->m_holder.start() == ret;
+      if(same_buffer_start){
+         #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+         ++this->num_expand_fwd;
+         #endif
+         this->m_holder.capacity(real_cap);
+      }
+      else{ //If there is no forward expansion, move objects, we will reuse insertion code
+         T * const new_mem = container_detail::to_raw_pointer(ret);
+         T * const ins_pos = this->priv_raw_end();
+         if(reuse){   //Backwards (and possibly forward) expansion
+            #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+            ++this->num_expand_bwd;
+            #endif
+            this->priv_forward_range_insert_expand_backwards
+               ( new_mem , real_cap, ins_pos, 0, this->priv_dummy_empty_proxy());
+         }
+         else{ //New buffer
+            #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+            ++this->num_alloc;
+            #endif
+            this->priv_forward_range_insert_new_allocation
+               ( new_mem, real_cap, ins_pos, 0, this->priv_dummy_empty_proxy());
+         }
+      }
+   }
+
+   void priv_destroy_last(const bool moved = false) BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      (void)moved;
+      if(!(value_traits::trivial_dctr || (value_traits::trivial_dctr_after_move && moved))){
+         value_type* const p = this->priv_raw_end() - 1;
+         allocator_traits_type::destroy(this->get_stored_allocator(), p);
+      }
+      --this->m_holder.m_size;
+   }
+
+   void priv_destroy_last_n(const size_type n) BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      BOOST_ASSERT(n <= this->m_holder.m_size);
+      if(!value_traits::trivial_dctr){
+         T* const destroy_pos = this->priv_raw_begin() + (this->m_holder.m_size-n);
+         pdalboost::container::destroy_alloc_n(this->get_stored_allocator(), destroy_pos, n);
+      }
+      this->m_holder.m_size -= n;
+   }
+
+   template<class InpIt>
+   void priv_uninitialized_construct_at_end(InpIt first, InpIt last)
+   {
+      T* const old_end_pos = this->priv_raw_end();
+      T* const new_end_pos = pdalboost::container::uninitialized_copy_alloc(this->m_holder.alloc(), first, last, old_end_pos);
+      this->m_holder.m_size += new_end_pos - old_end_pos;
+   }
+
+   void priv_destroy_all() BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      pdalboost::container::destroy_alloc_n
+         (this->get_stored_allocator(), this->priv_raw_begin(), this->m_holder.m_size);
+      this->m_holder.m_size = 0;
+   }
+
+   template<class U>
+   iterator priv_insert(const const_iterator &p, BOOST_FWD_REF(U) x)
+   {
+      BOOST_ASSERT(this->priv_in_range_or_end(p));
+      return this->priv_forward_range_insert
+         ( vector_iterator_get_ptr(p), 1, container_detail::get_insert_value_proxy<T*, Allocator>(::pdalboost::forward<U>(x)));
+   }
+
+   container_detail::insert_copy_proxy<Allocator, T*> priv_single_insert_proxy(const T &x)
+   {  return container_detail::insert_copy_proxy<Allocator, T*> (x);  }
+
+   container_detail::insert_move_proxy<Allocator, T*> priv_single_insert_proxy(BOOST_RV_REF(T) x)
+   {  return container_detail::insert_move_proxy<Allocator, T*> (x);  }
+
+   template <class U>
+   void priv_push_back(BOOST_FWD_REF(U) u)
+   {
+      if (BOOST_LIKELY(this->room_enough())){
+         //There is more memory, just construct a new object at the end
+         allocator_traits_type::construct
+            ( this->m_holder.alloc(), this->priv_raw_end(), ::pdalboost::forward<U>(u) );
+         ++this->m_holder.m_size;
+      }
+      else{
+         this->priv_forward_range_insert_no_capacity
+            ( this->back_ptr(), 1
+            , this->priv_single_insert_proxy(::pdalboost::forward<U>(u)), alloc_version());
+      }
+   }
+
+   container_detail::insert_n_copies_proxy<Allocator, T*> priv_resize_proxy(const T &x)
+   {  return container_detail::insert_n_copies_proxy<Allocator, T*>(x);   }
+
+   container_detail::insert_default_initialized_n_proxy<Allocator, T*> priv_resize_proxy(default_init_t)
+   {  return container_detail::insert_default_initialized_n_proxy<Allocator, T*>();  }
+
+   container_detail::insert_value_initialized_n_proxy<Allocator, T*> priv_resize_proxy(value_init_t)
+   {  return container_detail::insert_value_initialized_n_proxy<Allocator, T*>(); }
+
+   template <class U>
+   void priv_resize(size_type new_size, const U& u)
+   {
+      const size_type sz = this->size();
+      if (new_size < sz){
+         //Destroy last elements
+         this->priv_destroy_last_n(sz - new_size);
+      }
+      else{
+         const size_type n = new_size - this->size();
+         this->priv_forward_range_insert_at_end(n, this->priv_resize_proxy(u), alloc_version());
+      }
+   }
+
+   void priv_shrink_to_fit(version_0) BOOST_NOEXCEPT_OR_NOTHROW
+   {}
+
+   void priv_shrink_to_fit(version_1)
+   {
+      const size_type cp = this->m_holder.capacity();
+      if(cp){
+         const size_type sz = this->size();
+         if(!sz){
+            this->m_holder.alloc().deallocate(this->m_holder.m_start, cp);
+            this->m_holder.m_start     = pointer();
+            this->m_holder.m_capacity  = 0;
+         }
+         else if(sz < cp){
+            //Allocate a new buffer.
+            //Pass the hint so that allocators can take advantage of this.
+            pointer const p = allocator_traits_type::allocate(this->m_holder.alloc(), sz, this->m_holder.m_start);
+
+            //We will reuse insert code, so create a dummy input iterator
+            #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+            ++this->num_alloc;
+            #endif
+            this->priv_forward_range_insert_new_allocation
+               ( container_detail::to_raw_pointer(p), sz
+               , this->priv_raw_begin(), 0, this->priv_dummy_empty_proxy());
+         }
+      }
+   }
+
+   void priv_shrink_to_fit(version_2) BOOST_NOEXCEPT_OR_NOTHROW
+   {
+      const size_type cp = this->m_holder.capacity();
+      if(cp){
+         const size_type sz = this->size();
+         if(!sz){
+            this->m_holder.alloc().deallocate(this->m_holder.m_start, cp);
+            this->m_holder.m_start     = pointer();
+            this->m_holder.m_capacity  = 0;
+         }
+         else{
+            size_type received_size = sz;
+            pointer reuse(this->m_holder.start());
+            if(this->m_holder.allocation_command
+               (shrink_in_place | nothrow_allocation, cp, received_size, reuse)){
+               this->m_holder.capacity(received_size);
+               #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+               ++this->num_shrink;
+               #endif
+            }
+         }
+      }
+   }
+
+   template <class InsertionProxy>
+   iterator priv_forward_range_insert_no_capacity
+      (const pointer &pos, const size_type, const InsertionProxy , version_0)
+   {
+      throw_bad_alloc();
+      return iterator(pos);
+   }
+
+   template <class InsertionProxy>
+   iterator priv_forward_range_insert_no_capacity
+      (const pointer &pos, const size_type n, const InsertionProxy insert_range_proxy, version_1)
+   {
+      //Check if we have enough memory or try to expand current memory
+      const size_type n_pos = pos - this->m_holder.start();
+      T *const raw_pos = container_detail::to_raw_pointer(pos);
+
+      const size_type new_cap = this->m_holder.next_capacity(n);
+      //Pass the hint so that allocators can take advantage of this.
+      T * const new_buf = container_detail::to_raw_pointer
+         (allocator_traits_type::allocate(this->m_holder.alloc(), new_cap, this->m_holder.m_start));
+      #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+      ++this->num_alloc;
+      #endif
+      this->priv_forward_range_insert_new_allocation
+         ( new_buf, new_cap, raw_pos, n, insert_range_proxy);
+      return iterator(this->m_holder.start() + n_pos);
+   }
+
+   template <class InsertionProxy>
+   iterator priv_forward_range_insert_no_capacity
+      (const pointer &pos, const size_type n, const InsertionProxy insert_range_proxy, version_2)
+   {
+      //Check if we have enough memory or try to expand current memory
+      T *const raw_pos = container_detail::to_raw_pointer(pos);
+      const size_type n_pos = raw_pos - this->priv_raw_begin();
+
+      //There is not enough memory, allocate a new
+      //buffer or expand the old one.
+      size_type real_cap = this->m_holder.next_capacity(n);
+      pointer reuse(this->m_holder.start());
+      pointer const ret (this->m_holder.allocation_command
+         (allocate_new | expand_fwd | expand_bwd, this->m_holder.m_size + n, real_cap, reuse));
+
+      //Buffer reallocated
+      if(reuse){
+         //Forward expansion, delay insertion
+         if(this->m_holder.start() == ret){
+            #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+            ++this->num_expand_fwd;
+            #endif
+            this->m_holder.capacity(real_cap);
+            //Expand forward
+            this->priv_forward_range_insert_expand_forward(raw_pos, n, insert_range_proxy);
+         }
+         //Backwards (and possibly forward) expansion
+         else{
+            #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+            ++this->num_expand_bwd;
+            #endif
+            this->priv_forward_range_insert_expand_backwards
+               (container_detail::to_raw_pointer(ret), real_cap, raw_pos, n, insert_range_proxy);
+         }
+      }
+      //New buffer
+      else{
+         #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+         ++this->num_alloc;
+         #endif
+         this->priv_forward_range_insert_new_allocation
+            ( container_detail::to_raw_pointer(ret), real_cap, raw_pos, n, insert_range_proxy);
+      }
+
+      return iterator(this->m_holder.start() + n_pos);
+   }
+
+   template <class InsertionProxy>
+   iterator priv_forward_range_insert
+      (const pointer &pos, const size_type n, const InsertionProxy insert_range_proxy)
+   {
+      BOOST_ASSERT(this->m_holder.capacity() >= this->m_holder.m_size);
+      //Check if we have enough memory or try to expand current memory
+      const size_type remaining = this->m_holder.capacity() - this->m_holder.m_size;
+
+      bool same_buffer_start = n <= remaining;
+      if (!same_buffer_start){
+         return priv_forward_range_insert_no_capacity(pos, n, insert_range_proxy, alloc_version());
+      }
+      else{
+         //Expand forward
+         T *const raw_pos = container_detail::to_raw_pointer(pos);
+         const size_type n_pos = raw_pos - this->priv_raw_begin();
+         this->priv_forward_range_insert_expand_forward(raw_pos, n, insert_range_proxy);
+         return iterator(this->m_holder.start() + n_pos);
+      }
+   }
+
+   template <class InsertionProxy>
+   iterator priv_forward_range_insert_at_end
+      (const size_type n, const InsertionProxy insert_range_proxy, version_0)
+   {
+      //Check if we have enough memory or try to expand current memory
+      const size_type remaining = this->m_holder.capacity() - this->m_holder.m_size;
+
+      if (n > remaining){
+         //This will trigger an error
+         throw_bad_alloc();
+      }
+      this->priv_forward_range_insert_at_end_expand_forward(n, insert_range_proxy);
+      return this->end();
+   }
+
+   template <class InsertionProxy, class AllocVersion>
+   iterator priv_forward_range_insert_at_end
+      (const size_type n, const InsertionProxy insert_range_proxy, AllocVersion)
+   {
+      return this->priv_forward_range_insert(this->back_ptr(), n, insert_range_proxy);
+   }
+
+   //Takes the range pointed by [first_pos, last_pos) and shifts it to the right
+   //by 'shift_count'. 'limit_pos' marks the end of constructed elements.
+   //
+   //Precondition: first_pos <= last_pos <= limit_pos
+   //
+   //The shift operation might cross limit_pos so elements to moved beyond limit_pos
+   //are uninitialized_moved with an allocator. Other elements are moved.
+   //
+   //The shift operation might left uninitialized elements after limit_pos
+   //and the number of uninitialized elements is returned by the function.
+   //
+   //Old situation:
+   //       first_pos   last_pos         old_limit
+   //             |       |                  |
+   // ____________V_______V__________________V_____________
+   //|   prefix   | range |     suffix       |raw_mem      ~
+   //|____________|_______|__________________|_____________~
+   //
+   //New situation in Case A (hole_size == 0):
+   // range is moved through move assignments
+   //
+   //       first_pos   last_pos         limit_pos
+   //             |       |                  |
+   // ____________V_______V__________________V_____________
+   //|   prefix'  |       |  | range |suffix'|raw_mem      ~
+   //|________________+______|___^___|_______|_____________~
+   //                 |          |
+   //                 |_>_>_>_>_>^
+   //
+   //
+   //New situation in Case B (hole_size >= 0):
+   // range is moved through uninitialized moves
+   //
+   //       first_pos   last_pos         limit_pos
+   //             |       |                  |
+   // ____________V_______V__________________V________________
+   //|    prefix' |       |                  | [hole] | range |
+   //|_______________________________________|________|___^___|
+   //                 |                                   |
+   //                 |_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_^
+   //
+   //New situation in Case C (hole_size == 0):
+   // range is moved through move assignments and uninitialized moves
+   //
+   //       first_pos   last_pos         limit_pos
+   //             |       |                  |
+   // ____________V_______V__________________V___
+   //|   prefix'  |       |              | range |
+   //|___________________________________|___^___|
+   //                 |                      |
+   //                 |_>_>_>_>_>_>_>_>_>_>_>^
+   size_type priv_insert_ordered_at_shift_range
+      (size_type first_pos, size_type last_pos, size_type limit_pos, size_type shift_count)
+   {
+      BOOST_ASSERT(first_pos <= last_pos);
+      BOOST_ASSERT(last_pos <= limit_pos);
+      //
+      T* const begin_ptr = this->priv_raw_begin();
+      T* const first_ptr = begin_ptr + first_pos;
+      T* const last_ptr  = begin_ptr + last_pos;
+
+      size_type hole_size = 0;
+      //Case A:
+      if((last_pos + shift_count) <= limit_pos){
+         //All move assigned
+         pdalboost::container::move_backward(first_ptr, last_ptr, last_ptr + shift_count);
+      }
+      //Case B:
+      else if((first_pos + shift_count) >= limit_pos){
+         //All uninitialized_moved
+         ::pdalboost::container::uninitialized_move_alloc
+            (this->m_holder.alloc(), first_ptr, last_ptr, first_ptr + shift_count);
+         hole_size = first_pos + shift_count - limit_pos;
+      }
+      //Case C:
+      else{
+         //Some uninitialized_moved
+         T* const limit_ptr    = begin_ptr + limit_pos;
+         T* const boundary_ptr = limit_ptr - shift_count;
+         ::pdalboost::container::uninitialized_move_alloc(this->m_holder.alloc(), boundary_ptr, last_ptr, limit_ptr);
+         //The rest is move assigned
+         pdalboost::container::move_backward(first_ptr, boundary_ptr, limit_ptr);
+      }
+      return hole_size;
+   }
+
+   private:
+   T *priv_raw_begin() const
+   {  return container_detail::to_raw_pointer(m_holder.start());  }
+
+   T* priv_raw_end() const
+   {  return this->priv_raw_begin() + this->m_holder.m_size;  }
+
+   template <class InsertionProxy>
+   void priv_forward_range_insert_at_end_expand_forward(const size_type n, InsertionProxy insert_range_proxy)
+   {
+      T* const old_finish = this->priv_raw_end();
+      insert_range_proxy.uninitialized_copy_n_and_update(this->m_holder.alloc(), old_finish, n);
+      this->m_holder.m_size += n;
+   }
+
+   template <class InsertionProxy>
+   void priv_forward_range_insert_expand_forward(T* const pos, const size_type n, InsertionProxy insert_range_proxy)
+   {
+      //n can't be 0, because there is nothing to do in that case
+      if(BOOST_UNLIKELY(!n)) return;
+      //There is enough memory
+      T* const old_finish = this->priv_raw_end();
+      const size_type elems_after = old_finish - pos;
+
+      if (!elems_after){
+         insert_range_proxy.uninitialized_copy_n_and_update(this->m_holder.alloc(), old_finish, n);
+         this->m_holder.m_size += n;
+      }
+      else if (elems_after >= n){
+         //New elements can be just copied.
+         //Move to uninitialized memory last objects
+         ::pdalboost::container::uninitialized_move_alloc
+            (this->m_holder.alloc(), old_finish - n, old_finish, old_finish);
+         this->m_holder.m_size += n;
+         //Copy previous to last objects to the initialized end
+         pdalboost::container::move_backward(pos, old_finish - n, old_finish);
+         //Insert new objects in the pos
+         insert_range_proxy.copy_n_and_update(this->m_holder.alloc(), pos, n);
+      }
+      else {
+         //The new elements don't fit in the [pos, end()) range.
+
+         //Copy old [pos, end()) elements to the uninitialized memory (a gap is created)
+         ::pdalboost::container::uninitialized_move_alloc(this->m_holder.alloc(), pos, old_finish, pos + n);
+         BOOST_TRY{
+            //Copy first new elements in pos (gap is still there)
+            insert_range_proxy.copy_n_and_update(this->m_holder.alloc(), pos, elems_after);
+            //Copy to the beginning of the unallocated zone the last new elements (the gap is closed).
+            insert_range_proxy.uninitialized_copy_n_and_update(this->m_holder.alloc(), old_finish, n - elems_after);
+            this->m_holder.m_size += n;
+         }
+         BOOST_CATCH(...){
+            pdalboost::container::destroy_alloc_n(this->get_stored_allocator(), pos + n, elems_after);
+            BOOST_RETHROW
+         }
+         BOOST_CATCH_END
+      }
+   }
+
+   template <class InsertionProxy>
+   void priv_forward_range_insert_new_allocation
+      (T* const new_start, size_type new_cap, T* const pos, const size_type n, InsertionProxy insert_range_proxy)
+   {
+      //n can be zero, if we want to reallocate!
+      T *new_finish = new_start;
+      T *old_finish;
+      //Anti-exception rollbacks
+      typename value_traits::ArrayDeallocator new_buffer_deallocator(new_start, this->m_holder.alloc(), new_cap);
+      typename value_traits::ArrayDestructor  new_values_destroyer(new_start, this->m_holder.alloc(), 0u);
+
+      //Initialize with [begin(), pos) old buffer
+      //the start of the new buffer
+      T * const old_buffer = this->priv_raw_begin();
+      if(old_buffer){
+         new_finish = ::pdalboost::container::uninitialized_move_alloc
+            (this->m_holder.alloc(), this->priv_raw_begin(), pos, old_finish = new_finish);
+         new_values_destroyer.increment_size(new_finish - old_finish);
+      }
+      //Initialize new objects, starting from previous point
+      old_finish = new_finish;
+      insert_range_proxy.uninitialized_copy_n_and_update(this->m_holder.alloc(), old_finish, n);
+      new_finish += n;
+      new_values_destroyer.increment_size(new_finish - old_finish);
+      //Initialize from the rest of the old buffer,
+      //starting from previous point
+      if(old_buffer){
+         new_finish = ::pdalboost::container::uninitialized_move_alloc
+            (this->m_holder.alloc(), pos, old_buffer + this->m_holder.m_size, new_finish);
+         //Destroy and deallocate old elements
+         //If there is allocated memory, destroy and deallocate
+         if(!value_traits::trivial_dctr_after_move)
+            pdalboost::container::destroy_alloc_n(this->get_stored_allocator(), old_buffer, this->m_holder.m_size);
+         this->m_holder.alloc().deallocate(this->m_holder.start(), this->m_holder.capacity());
+      }
+      this->m_holder.start(new_start);
+      this->m_holder.m_size = new_finish - new_start;
+      this->m_holder.capacity(new_cap);
+      //All construction successful, disable rollbacks
+      new_values_destroyer.release();
+      new_buffer_deallocator.release();
+   }
+
+   template <class InsertionProxy>
+   void priv_forward_range_insert_expand_backwards
+         (T* const new_start, const size_type new_capacity,
+          T* const pos, const size_type n, InsertionProxy insert_range_proxy)
+   {
+      //n can be zero to just expand capacity
+      //Backup old data
+      T* const old_start  = this->priv_raw_begin();
+      const size_type old_size = this->m_holder.m_size;
+      T* const old_finish = old_start + old_size;
+
+      //We can have 8 possibilities:
+      const size_type elemsbefore = static_cast<size_type>(pos - old_start);
+      const size_type s_before    = static_cast<size_type>(old_start - new_start);
+      const size_type before_plus_new = elemsbefore + n;
+
+      //Update the vector buffer information to a safe state
+      this->m_holder.start(new_start);
+      this->m_holder.capacity(new_capacity);
+      this->m_holder.m_size = 0;
+
+      //If anything goes wrong, this object will destroy
+      //all the old objects to fulfill previous vector state
+      typename value_traits::ArrayDestructor old_values_destroyer(old_start, this->m_holder.alloc(), old_size);
+      //Check if s_before is big enough to hold the beginning of old data + new data
+      if(s_before >= before_plus_new){
+         //Copy first old values before pos, after that the new objects
+         T *const new_elem_pos =
+            ::pdalboost::container::uninitialized_move_alloc(this->m_holder.alloc(), old_start, pos, new_start);
+         this->m_holder.m_size = elemsbefore;
+         insert_range_proxy.uninitialized_copy_n_and_update(this->m_holder.alloc(), new_elem_pos, n);
+         this->m_holder.m_size = before_plus_new;
+         const size_type new_size = old_size + n;
+         //Check if s_before is so big that even copying the old data + new data
+         //there is a gap between the new data and the old data
+         if(s_before >= new_size){
+            //Old situation:
+            // _________________________________________________________
+            //|            raw_mem                | old_begin | old_end |
+            //| __________________________________|___________|_________|
+            //
+            //New situation:
+            // _________________________________________________________
+            //| old_begin |    new   | old_end |         raw_mem        |
+            //|___________|__________|_________|________________________|
+            //
+            //Now initialize the rest of memory with the last old values
+            if(before_plus_new != new_size){ //Special case to avoid operations in back insertion
+               ::pdalboost::container::uninitialized_move_alloc
+                  (this->m_holder.alloc(), pos, old_finish, new_start + before_plus_new);
+               //All new elements correctly constructed, avoid new element destruction
+               this->m_holder.m_size = new_size;
+            }
+            //Old values destroyed automatically with "old_values_destroyer"
+            //when "old_values_destroyer" goes out of scope unless the have trivial
+            //destructor after move.
+            if(value_traits::trivial_dctr_after_move)
+               old_values_destroyer.release();
+         }
+         //s_before is so big that divides old_end
+         else{
+            //Old situation:
+            // __________________________________________________
+            //|            raw_mem         | old_begin | old_end |
+            //| ___________________________|___________|_________|
+            //
+            //New situation:
+            // __________________________________________________
+            //| old_begin |   new    | old_end |  raw_mem        |
+            //|___________|__________|_________|_________________|
+            //
+            //Now initialize the rest of memory with the last old values
+            //All new elements correctly constructed, avoid new element destruction
+            const size_type raw_gap = s_before - before_plus_new;
+            if(!value_traits::trivial_dctr){
+               //Now initialize the rest of s_before memory with the
+               //first of elements after new values
+               ::pdalboost::container::uninitialized_move_alloc_n
+                  (this->m_holder.alloc(), pos, raw_gap, new_start + before_plus_new);
+               //Now we have a contiguous buffer so program trailing element destruction
+               //and update size to the final size.
+               old_values_destroyer.shrink_forward(new_size-s_before);
+               this->m_holder.m_size = new_size;
+               //Now move remaining last objects in the old buffer begin
+               ::pdalboost::container::move(pos + raw_gap, old_finish, old_start);
+               //Once moved, avoid calling the destructors if trivial after move
+               if(value_traits::trivial_dctr_after_move){
+                  old_values_destroyer.release();
+               }
+            }
+            else{ //If trivial destructor, we can uninitialized copy + copy in a single uninitialized copy
+               ::pdalboost::container::uninitialized_move_alloc_n
+                  (this->m_holder.alloc(), pos, old_finish - pos, new_start + before_plus_new);
+               this->m_holder.m_size = new_size;
+               old_values_destroyer.release();
+            }
+         }
+      }
+      else{
+         //Check if we have to do the insertion in two phases
+         //since maybe s_before is not big enough and
+         //the buffer was expanded both sides
+         //
+         //Old situation:
+         // _________________________________________________
+         //| raw_mem | old_begin + old_end |  raw_mem        |
+         //|_________|_____________________|_________________|
+         //
+         //New situation with do_after:
+         // _________________________________________________
+         //|     old_begin + new + old_end     |  raw_mem    |
+         //|___________________________________|_____________|
+         //
+         //New without do_after:
+         // _________________________________________________
+         //| old_begin + new + old_end  |  raw_mem           |
+         //|____________________________|____________________|
+         //
+         const bool do_after = n > s_before;
+
+         //Now we can have two situations: the raw_mem of the
+         //beginning divides the old_begin, or the new elements:
+         if (s_before <= elemsbefore) {
+            //The raw memory divides the old_begin group:
+            //
+            //If we need two phase construction (do_after)
+            //new group is divided in new = new_beg + new_end groups
+            //In this phase only new_beg will be inserted
+            //
+            //Old situation:
+            // _________________________________________________
+            //| raw_mem | old_begin | old_end |  raw_mem        |
+            //|_________|___________|_________|_________________|
+            //
+            //New situation with do_after(1):
+            //This is not definitive situation, the second phase
+            //will include
+            // _________________________________________________
+            //| old_begin | new_beg | old_end |  raw_mem        |
+            //|___________|_________|_________|_________________|
+            //
+            //New situation without do_after:
+            // _________________________________________________
+            //| old_begin | new | old_end |  raw_mem            |
+            //|___________|_____|_________|_____________________|
+            //
+            //Copy the first part of old_begin to raw_mem
+            ::pdalboost::container::uninitialized_move_alloc_n
+               (this->m_holder.alloc(), old_start, s_before, new_start);
+            //The buffer is all constructed until old_end,
+            //so program trailing destruction and assign final size
+            //if !do_after, s_before+n otherwise.
+            size_type new_1st_range;
+            if(do_after){
+               new_1st_range = s_before;
+               //release destroyer and update size
+               old_values_destroyer.release();
+            }
+            else{
+               new_1st_range = n;
+               if(value_traits::trivial_dctr_after_move)
+                  old_values_destroyer.release();
+               else{
+                  old_values_destroyer.shrink_forward(old_size - (s_before - n));
+               }
+            }
+            this->m_holder.m_size = old_size + new_1st_range;
+            //Now copy the second part of old_begin overwriting itself
+            T *const next = ::pdalboost::container::move(old_start + s_before, pos, old_start);
+            //Now copy the new_beg elements
+            insert_range_proxy.copy_n_and_update(this->m_holder.alloc(), next, new_1st_range);
+
+            //If there is no after work and the last old part needs to be moved to front, do it
+            if(!do_after && (n != s_before)){
+               //Now displace old_end elements
+               ::pdalboost::container::move(pos, old_finish, next + new_1st_range);
+            }
+         }
+         else {
+            //If we have to expand both sides,
+            //we will play if the first new values so
+            //calculate the upper bound of new values
+
+            //The raw memory divides the new elements
+            //
+            //If we need two phase construction (do_after)
+            //new group is divided in new = new_beg + new_end groups
+            //In this phase only new_beg will be inserted
+            //
+            //Old situation:
+            // _______________________________________________________
+            //|   raw_mem     | old_begin | old_end |  raw_mem        |
+            //|_______________|___________|_________|_________________|
+            //
+            //New situation with do_after():
+            // ____________________________________________________
+            //| old_begin |    new_beg    | old_end |  raw_mem     |
+            //|___________|_______________|_________|______________|
+            //
+            //New situation without do_after:
+            // ______________________________________________________
+            //| old_begin | new | old_end |  raw_mem                 |
+            //|___________|_____|_________|__________________________|
+            //
+            //First copy whole old_begin and part of new to raw_mem
+            T * const new_pos = ::pdalboost::container::uninitialized_move_alloc
+               (this->m_holder.alloc(), old_start, pos, new_start);
+            this->m_holder.m_size = elemsbefore;
+            const size_type mid_n = s_before - elemsbefore;
+            insert_range_proxy.uninitialized_copy_n_and_update(this->m_holder.alloc(), new_pos, mid_n);
+            //The buffer is all constructed until old_end,
+            //release destroyer
+            this->m_holder.m_size = old_size + s_before;
+            old_values_destroyer.release();
+
+            if(do_after){
+               //Copy new_beg part
+               insert_range_proxy.copy_n_and_update(this->m_holder.alloc(), old_start, elemsbefore);
+            }
+            else{
+               //Copy all new elements
+               const size_type rest_new = n - mid_n;
+               insert_range_proxy.copy_n_and_update(this->m_holder.alloc(), old_start, rest_new);
+               T* const move_start = old_start + rest_new;
+               //Displace old_end
+               T* const move_end = ::pdalboost::container::move(pos, old_finish, move_start);
+               //Destroy remaining moved elements from old_end except if they
+               //have trivial destructor after being moved
+               size_type n_destroy = s_before - n;
+               if(!value_traits::trivial_dctr_after_move)
+                  pdalboost::container::destroy_alloc_n(this->get_stored_allocator(), move_end, n_destroy);
+               this->m_holder.m_size -= n_destroy;
+            }
+         }
+
+         //This is only executed if two phase construction is needed
+         if(do_after){
+            //The raw memory divides the new elements
+            //
+            //Old situation:
+            // ______________________________________________________
+            //|   raw_mem    | old_begin |  old_end   |  raw_mem     |
+            //|______________|___________|____________|______________|
+            //
+            //New situation with do_after(1):
+            // _______________________________________________________
+            //| old_begin   +   new_beg  | new_end |old_end | raw_mem |
+            //|__________________________|_________|________|_________|
+            //
+            //New situation with do_after(2):
+            // ______________________________________________________
+            //| old_begin      +       new            | old_end |raw |
+            //|_______________________________________|_________|____|
+            //
+            const size_type n_after    = n - s_before;
+            const size_type elemsafter = old_size - elemsbefore;
+
+            //We can have two situations:
+            if (elemsafter >= n_after){
+               //The raw_mem from end will divide displaced old_end
+               //
+               //Old situation:
+               // ______________________________________________________
+               //|   raw_mem    | old_begin |  old_end   |  raw_mem     |
+               //|______________|___________|____________|______________|
+               //
+               //New situation with do_after(1):
+               // _______________________________________________________
+               //| old_begin   +   new_beg  | new_end |old_end | raw_mem |
+               //|__________________________|_________|________|_________|
+               //
+               //First copy the part of old_end raw_mem
+               T* finish_n = old_finish - n_after;
+               ::pdalboost::container::uninitialized_move_alloc
+                  (this->m_holder.alloc(), finish_n, old_finish, old_finish);
+               this->m_holder.m_size += n_after;
+               //Displace the rest of old_end to the new position
+               pdalboost::container::move_backward(pos, finish_n, old_finish);
+               //Now overwrite with new_end
+               //The new_end part is [first + (n - n_after), last)
+               insert_range_proxy.copy_n_and_update(this->m_holder.alloc(), pos, n_after);
+            }
+            else {
+               //The raw_mem from end will divide new_end part
+               //
+               //Old situation:
+               // _____________________________________________________________
+               //|   raw_mem    | old_begin |  old_end   |  raw_mem            |
+               //|______________|___________|____________|_____________________|
+               //
+               //New situation with do_after(2):
+               // _____________________________________________________________
+               //| old_begin   +   new_beg  |     new_end   |old_end | raw_mem |
+               //|__________________________|_______________|________|_________|
+               //
+
+               const size_type mid_last_dist = n_after - elemsafter;
+               //First initialize data in raw memory
+
+               //Copy to the old_end part to the uninitialized zone leaving a gap.
+               ::pdalboost::container::uninitialized_move_alloc
+                  (this->m_holder.alloc(), pos, old_finish, old_finish + mid_last_dist);
+
+               typename value_traits::ArrayDestructor old_end_destroyer
+                  (old_finish + mid_last_dist, this->m_holder.alloc(), old_finish - pos);
+
+               //Copy the first part to the already constructed old_end zone
+               insert_range_proxy.copy_n_and_update(this->m_holder.alloc(), pos, elemsafter);
+               //Copy the rest to the uninitialized zone filling the gap
+               insert_range_proxy.uninitialized_copy_n_and_update(this->m_holder.alloc(), old_finish, mid_last_dist);
+               this->m_holder.m_size += n_after;
+               old_end_destroyer.release();
+            }
+         }
+      }
+   }
+
+   void priv_throw_if_out_of_range(size_type n) const
+   {
+      //If n is out of range, throw an out_of_range exception
+      if (n >= this->size()){
+         throw_out_of_range("vector::at out of range");
+      }
+   }
+
+   bool priv_in_range(const_iterator pos) const
+   {
+      return (this->begin() <= pos) && (pos < this->end());
+   }
+
+   bool priv_in_range_or_end(const_iterator pos) const
+   {
+      return (this->begin() <= pos) && (pos <= this->end());
+   }
+
+   #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
+   public:
+   unsigned int num_expand_fwd;
+   unsigned int num_expand_bwd;
+   unsigned int num_shrink;
+   unsigned int num_alloc;
+   void reset_alloc_stats()
+   {  num_expand_fwd = num_expand_bwd = num_alloc = 0, num_shrink = 0;   }
+   #endif
+   #endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+};
+
+}} //namespace pdalboost::container
+
+#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+namespace pdalboost {
+
+//!has_trivial_destructor_after_move<> == true_type
+//!specialization for optimizations
+template <class T, class Allocator>
+struct has_trivial_destructor_after_move<pdalboost::container::vector<T, Allocator> >
+{
+   typedef typename ::pdalboost::container::allocator_traits<Allocator>::pointer pointer;
+   static const bool value = ::pdalboost::has_trivial_destructor_after_move<Allocator>::value &&
+                             ::pdalboost::has_trivial_destructor_after_move<pointer>::value;
+};
+
+}
+
+#endif   //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
+
+#include <boost/container/detail/config_end.hpp>
+
+#endif //   #ifndef  BOOST_CONTAINER_CONTAINER_VECTOR_HPP
diff --git a/vendor/pdalboost/boost/core/addressof.hpp b/vendor/pdalboost/boost/core/addressof.hpp
new file mode 100644
index 0000000..aaa8bbd
--- /dev/null
+++ b/vendor/pdalboost/boost/core/addressof.hpp
@@ -0,0 +1,162 @@
+// Copyright (C) 2002 Brad King (brad.king at kitware.com)
+//                    Douglas Gregor (gregod at cs.rpi.edu)
+//
+// Copyright (C) 2002, 2008, 2013 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_CORE_ADDRESSOF_HPP
+#define BOOST_CORE_ADDRESSOF_HPP
+
+# include <boost/config.hpp>
+# include <boost/detail/workaround.hpp>
+# include <cstddef>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+template<class T> struct addr_impl_ref
+{
+    T & v_;
+
+    BOOST_FORCEINLINE addr_impl_ref( T & v ): v_( v ) {}
+    BOOST_FORCEINLINE operator T& () const { return v_; }
+
+private:
+    addr_impl_ref & operator=(const addr_impl_ref &);
+};
+
+template<class T> struct addressof_impl
+{
+    static BOOST_FORCEINLINE T * f( T & v, long )
+    {
+        return reinterpret_cast<T*>(
+            &const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
+    }
+
+    static BOOST_FORCEINLINE T * f( T * v, int )
+    {
+        return v;
+    }
+};
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+#if !defined( BOOST_NO_CXX11_DECLTYPE ) && ( ( defined( __clang__ ) && !defined( _LIBCPP_VERSION ) ) || defined( __INTEL_COMPILER ) )
+
+    typedef decltype(nullptr) addr_nullptr_t;
+
+#else
+
+    typedef std::nullptr_t addr_nullptr_t;
+
+#endif
+
+template<> struct addressof_impl< addr_nullptr_t >
+{
+    typedef addr_nullptr_t T;
+
+    static BOOST_FORCEINLINE T * f( T & v, int )
+    {
+        return &v;
+    }
+};
+
+template<> struct addressof_impl< addr_nullptr_t const >
+{
+    typedef addr_nullptr_t const T;
+
+    static BOOST_FORCEINLINE T * f( T & v, int )
+    {
+        return &v;
+    }
+};
+
+template<> struct addressof_impl< addr_nullptr_t volatile >
+{
+    typedef addr_nullptr_t volatile T;
+
+    static BOOST_FORCEINLINE T * f( T & v, int )
+    {
+        return &v;
+    }
+};
+
+template<> struct addressof_impl< addr_nullptr_t const volatile >
+{
+    typedef addr_nullptr_t const volatile T;
+
+    static BOOST_FORCEINLINE T * f( T & v, int )
+    {
+        return &v;
+    }
+};
+
+#endif
+
+} // namespace detail
+
+template<class T>
+BOOST_FORCEINLINE
+T * addressof( T & v )
+{
+#if (defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x610 ) ) ) || (defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x5120))
+
+    return pdalboost::detail::addressof_impl<T>::f( v, 0 );
+
+#else
+
+    return pdalboost::detail::addressof_impl<T>::f( pdalboost::detail::addr_impl_ref<T>( v ), 0 );
+
+#endif
+}
+
+#if defined( __SUNPRO_CC ) && BOOST_WORKAROUND( __SUNPRO_CC, BOOST_TESTED_AT( 0x590 ) )
+
+namespace detail
+{
+
+template<class T> struct addressof_addp
+{
+    typedef T * type;
+};
+
+} // namespace detail
+
+template< class T, std::size_t N >
+BOOST_FORCEINLINE
+typename detail::addressof_addp< T[N] >::type addressof( T (&t)[N] )
+{
+    return &t;
+}
+
+#endif
+
+// Borland doesn't like casting an array reference to a char reference
+// but these overloads work around the problem.
+#if defined( __BORLANDC__ ) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+template<typename T,std::size_t N>
+BOOST_FORCEINLINE
+T (*addressof(T (&t)[N]))[N]
+{
+   return reinterpret_cast<T(*)[N]>(&t);
+}
+
+template<typename T,std::size_t N>
+BOOST_FORCEINLINE
+const T (*addressof(const T (&t)[N]))[N]
+{
+   return reinterpret_cast<const T(*)[N]>(&t);
+}
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_CORE_ADDRESSOF_HPP
diff --git a/vendor/pdalboost/boost/core/checked_delete.hpp b/vendor/pdalboost/boost/core/checked_delete.hpp
new file mode 100644
index 0000000..fb67000
--- /dev/null
+++ b/vendor/pdalboost/boost/core/checked_delete.hpp
@@ -0,0 +1,69 @@
+#ifndef BOOST_CORE_CHECKED_DELETE_HPP
+#define BOOST_CORE_CHECKED_DELETE_HPP
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  boost/checked_delete.hpp
+//
+//  Copyright (c) 2002, 2003 Peter Dimov
+//  Copyright (c) 2003 Daniel Frey
+//  Copyright (c) 2003 Howard Hinnant
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/core/doc/html/core/checked_delete.html for documentation.
+//
+
+namespace pdalboost
+{
+
+// verify that types are complete for increased safety
+
+template<class T> inline void checked_delete(T * x)
+{
+    // intentionally complex - simplification causes regressions
+    typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
+    (void) sizeof(type_must_be_complete);
+    delete x;
+}
+
+template<class T> inline void checked_array_delete(T * x)
+{
+    typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
+    (void) sizeof(type_must_be_complete);
+    delete [] x;
+}
+
+template<class T> struct checked_deleter
+{
+    typedef void result_type;
+    typedef T * argument_type;
+
+    void operator()(T * x) const
+    {
+        // pdalboost:: disables ADL
+        pdalboost::checked_delete(x);
+    }
+};
+
+template<class T> struct checked_array_deleter
+{
+    typedef void result_type;
+    typedef T * argument_type;
+
+    void operator()(T * x) const
+    {
+        pdalboost::checked_array_delete(x);
+    }
+};
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_CORE_CHECKED_DELETE_HPP
diff --git a/vendor/pdalboost/boost/core/demangle.hpp b/vendor/pdalboost/boost/core/demangle.hpp
new file mode 100644
index 0000000..d58553b
--- /dev/null
+++ b/vendor/pdalboost/boost/core/demangle.hpp
@@ -0,0 +1,128 @@
+#ifndef BOOST_CORE_DEMANGLE_HPP_INCLUDED
+#define BOOST_CORE_DEMANGLE_HPP_INCLUDED
+
+// core::demangle
+//
+// Copyright 2014 Peter Dimov
+// Copyright 2014 Andrey Semashev
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/config.hpp>
+#include <string>
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+# pragma once
+#endif
+
+#if defined( __clang__ ) && defined( __has_include )
+# if __has_include(<cxxabi.h>)
+#  define BOOST_CORE_HAS_CXXABI_H
+# endif
+#elif defined( __GLIBCXX__ ) || defined( __GLIBCPP__ )
+# define BOOST_CORE_HAS_CXXABI_H
+#endif
+
+#if defined( BOOST_CORE_HAS_CXXABI_H )
+# include <cxxabi.h>
+// For some archtectures (mips, mips64, x86, x86_64) cxxabi.h in Android NDK is implemented by gabi++ library
+// (https://android.googlesource.com/platform/ndk/+/master/sources/cxx-stl/gabi++/), which does not implement
+// abi::__cxa_demangle(). We detect this implementation by checking the include guard here.
+# if defined( __GABIXX_CXXABI_H__ )
+#  undef BOOST_CORE_HAS_CXXABI_H
+# else
+#  include <cstdlib>
+#  include <cstddef>
+# endif
+#endif
+
+namespace pdalboost
+{
+
+namespace core
+{
+
+inline char const * demangle_alloc( char const * name ) BOOST_NOEXCEPT;
+inline void demangle_free( char const * name ) BOOST_NOEXCEPT;
+
+class scoped_demangled_name
+{
+private:
+    char const * m_p;
+
+public:
+    explicit scoped_demangled_name( char const * name ) BOOST_NOEXCEPT :
+        m_p( demangle_alloc( name ) )
+    {
+    }
+
+    ~scoped_demangled_name() BOOST_NOEXCEPT
+    {
+        demangle_free( m_p );
+    }
+
+    char const * get() const BOOST_NOEXCEPT
+    {
+        return m_p;
+    }
+
+    BOOST_DELETED_FUNCTION(scoped_demangled_name( scoped_demangled_name const& ))
+    BOOST_DELETED_FUNCTION(scoped_demangled_name& operator= ( scoped_demangled_name const& ))
+};
+
+
+#if defined( BOOST_CORE_HAS_CXXABI_H )
+
+inline char const * demangle_alloc( char const * name ) BOOST_NOEXCEPT
+{
+    int status = 0;
+    std::size_t size = 0;
+    return abi::__cxa_demangle( name, NULL, &size, &status );
+}
+
+inline void demangle_free( char const * name ) BOOST_NOEXCEPT
+{
+    std::free( const_cast< char* >( name ) );
+}
+
+inline std::string demangle( char const * name )
+{
+    scoped_demangled_name demangled_name( name );
+    char const * const p = demangled_name.get();
+    if( p )
+    {
+        return p;
+    }
+    else
+    {
+        return name;
+    }
+}
+
+#else
+
+inline char const * demangle_alloc( char const * name ) BOOST_NOEXCEPT
+{
+    return name;
+}
+
+inline void demangle_free( char const * ) BOOST_NOEXCEPT
+{
+}
+
+inline std::string demangle( char const * name )
+{
+    return name;
+}
+
+#endif
+
+} // namespace core
+
+} // namespace pdalboost
+
+#undef BOOST_CORE_HAS_CXXABI_H
+
+#endif // #ifndef BOOST_CORE_DEMANGLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/core/enable_if.hpp b/vendor/pdalboost/boost/core/enable_if.hpp
new file mode 100644
index 0000000..de7f8ec
--- /dev/null
+++ b/vendor/pdalboost/boost/core/enable_if.hpp
@@ -0,0 +1,128 @@
+// Boost enable_if library
+
+// Copyright 2003 (c) The Trustees of Indiana University.
+
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//    Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)
+//             Jeremiah Willcock (jewillco at osl.iu.edu)
+//             Andrew Lumsdaine (lums at osl.iu.edu)
+
+
+#ifndef BOOST_CORE_ENABLE_IF_HPP
+#define BOOST_CORE_ENABLE_IF_HPP
+
+#include "boost/config.hpp"
+
+// Even the definition of enable_if causes problems on some compilers,
+// so it's macroed out for all compilers that do not support SFINAE
+
+#ifndef BOOST_NO_SFINAE
+
+namespace pdalboost
+{
+  template<typename T, typename R=void>
+  struct enable_if_has_type
+  {
+    typedef R type;
+  };
+ 
+  template <bool B, class T = void>
+  struct enable_if_c {
+    typedef T type;
+  };
+
+  template <class T>
+  struct enable_if_c<false, T> {};
+
+  template <class Cond, class T = void> 
+  struct enable_if : public enable_if_c<Cond::value, T> {};
+
+  template <bool B, class T>
+  struct lazy_enable_if_c {
+    typedef typename T::type type;
+  };
+
+  template <class T>
+  struct lazy_enable_if_c<false, T> {};
+
+  template <class Cond, class T> 
+  struct lazy_enable_if : public lazy_enable_if_c<Cond::value, T> {};
+
+
+  template <bool B, class T = void>
+  struct disable_if_c {
+    typedef T type;
+  };
+
+  template <class T>
+  struct disable_if_c<true, T> {};
+
+  template <class Cond, class T = void> 
+  struct disable_if : public disable_if_c<Cond::value, T> {};
+
+  template <bool B, class T>
+  struct lazy_disable_if_c {
+    typedef typename T::type type;
+  };
+
+  template <class T>
+  struct lazy_disable_if_c<true, T> {};
+
+  template <class Cond, class T> 
+  struct lazy_disable_if : public lazy_disable_if_c<Cond::value, T> {};
+
+} // namespace pdalboost
+
+#else
+
+namespace pdalboost {
+
+  namespace detail { typedef void enable_if_default_T; }
+
+  template <typename T>
+  struct enable_if_does_not_work_on_this_compiler;
+
+  template<typename T, typename R=void>
+  struct enable_if_has_type : enable_if_does_not_work_on_this_compiler<T>
+  { };
+
+  template <bool B, class T = detail::enable_if_default_T>
+  struct enable_if_c : enable_if_does_not_work_on_this_compiler<T>
+  { };
+
+  template <bool B, class T = detail::enable_if_default_T> 
+  struct disable_if_c : enable_if_does_not_work_on_this_compiler<T>
+  { };
+
+  template <bool B, class T = detail::enable_if_default_T> 
+  struct lazy_enable_if_c : enable_if_does_not_work_on_this_compiler<T>
+  { };
+
+  template <bool B, class T = detail::enable_if_default_T> 
+  struct lazy_disable_if_c : enable_if_does_not_work_on_this_compiler<T>
+  { };
+
+  template <class Cond, class T = detail::enable_if_default_T> 
+  struct enable_if : enable_if_does_not_work_on_this_compiler<T>
+  { };
+
+  template <class Cond, class T = detail::enable_if_default_T> 
+  struct disable_if : enable_if_does_not_work_on_this_compiler<T>
+  { };
+
+  template <class Cond, class T = detail::enable_if_default_T> 
+  struct lazy_enable_if : enable_if_does_not_work_on_this_compiler<T>
+  { };
+
+  template <class Cond, class T = detail::enable_if_default_T> 
+  struct lazy_disable_if : enable_if_does_not_work_on_this_compiler<T>
+  { };
+
+} // namespace pdalboost
+
+#endif // BOOST_NO_SFINAE
+
+#endif
diff --git a/vendor/pdalboost/boost/core/explicit_operator_bool.hpp b/vendor/pdalboost/boost/core/explicit_operator_bool.hpp
new file mode 100644
index 0000000..5fd301c
--- /dev/null
+++ b/vendor/pdalboost/boost/core/explicit_operator_bool.hpp
@@ -0,0 +1,154 @@
+/*
+ *          Copyright Andrey Semashev 2007 - 2013.
+ * Distributed under the Boost Software License, Version 1.0.
+ *    (See accompanying file LICENSE_1_0.txt or copy at
+ *          http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+/*!
+ * \file   explicit_operator_bool.hpp
+ * \author Andrey Semashev
+ * \date   08.03.2009
+ *
+ * This header defines a compatibility macro that implements an unspecified
+ * \c bool operator idiom, which is superseded with explicit conversion operators in
+ * C++11.
+ */
+
+#ifndef BOOST_CORE_EXPLICIT_OPERATOR_BOOL_HPP
+#define BOOST_CORE_EXPLICIT_OPERATOR_BOOL_HPP
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)
+
+/*!
+ * \brief The macro defines an explicit operator of conversion to \c bool
+ *
+ * The macro should be used inside the definition of a class that has to
+ * support the conversion. The class should also implement <tt>operator!</tt>,
+ * in terms of which the conversion operator will be implemented.
+ */
+#define BOOST_EXPLICIT_OPERATOR_BOOL()\
+    BOOST_FORCEINLINE explicit operator bool () const\
+    {\
+        return !this->operator! ();\
+    }
+
+/*!
+ * \brief The macro defines a noexcept explicit operator of conversion to \c bool
+ *
+ * The macro should be used inside the definition of a class that has to
+ * support the conversion. The class should also implement <tt>operator!</tt>,
+ * in terms of which the conversion operator will be implemented.
+ */
+#define BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()\
+    BOOST_FORCEINLINE explicit operator bool () const BOOST_NOEXCEPT\
+    {\
+        return !this->operator! ();\
+    }
+
+/*!
+ * \brief The macro defines a constexpr explicit operator of conversion to \c bool
+ *
+ * The macro should be used inside the definition of a class that has to
+ * support the conversion. The class should also implement <tt>operator!</tt>,
+ * in terms of which the conversion operator will be implemented.
+ */
+#define BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL()\
+    BOOST_FORCEINLINE BOOST_CONSTEXPR explicit operator bool () const BOOST_NOEXCEPT\
+    {\
+        return !this->operator! ();\
+    }
+
+#else // !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)
+
+#if (defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)) && !defined(BOOST_NO_COMPILER_CONFIG)
+// Sun C++ 5.3 can't handle the safe_bool idiom, so don't use it
+#define BOOST_NO_UNSPECIFIED_BOOL
+#endif // (defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530)) && !defined(BOOST_NO_COMPILER_CONFIG)
+
+#if !defined(BOOST_NO_UNSPECIFIED_BOOL)
+
+namespace pdalboost {
+
+namespace detail {
+
+#if !defined(_MSC_VER) && !defined(__IBMCPP__)
+
+    struct unspecified_bool
+    {
+        // NOTE TO THE USER: If you see this in error messages then you tried
+        // to apply an unsupported operator on the object that supports
+        // explicit conversion to bool.
+        struct OPERATORS_NOT_ALLOWED;
+        static void true_value(OPERATORS_NOT_ALLOWED*) {}
+    };
+    typedef void (*unspecified_bool_type)(unspecified_bool::OPERATORS_NOT_ALLOWED*);
+
+#else
+
+    // MSVC and VACPP are too eager to convert pointer to function to void* even though they shouldn't
+    struct unspecified_bool
+    {
+        // NOTE TO THE USER: If you see this in error messages then you tried
+        // to apply an unsupported operator on the object that supports
+        // explicit conversion to bool.
+        struct OPERATORS_NOT_ALLOWED;
+        void true_value(OPERATORS_NOT_ALLOWED*) {}
+    };
+    typedef void (unspecified_bool::*unspecified_bool_type)(unspecified_bool::OPERATORS_NOT_ALLOWED*);
+
+#endif
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#define BOOST_EXPLICIT_OPERATOR_BOOL()\
+    BOOST_FORCEINLINE operator pdalboost::detail::unspecified_bool_type () const\
+    {\
+        return (!this->operator! () ? &pdalboost::detail::unspecified_bool::true_value : (pdalboost::detail::unspecified_bool_type)0);\
+    }
+
+#define BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()\
+    BOOST_FORCEINLINE operator pdalboost::detail::unspecified_bool_type () const BOOST_NOEXCEPT\
+    {\
+        return (!this->operator! () ? &pdalboost::detail::unspecified_bool::true_value : (pdalboost::detail::unspecified_bool_type)0);\
+    }
+
+#define BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL()\
+    BOOST_FORCEINLINE BOOST_CONSTEXPR operator pdalboost::detail::unspecified_bool_type () const BOOST_NOEXCEPT\
+    {\
+        return (!this->operator! () ? &pdalboost::detail::unspecified_bool::true_value : (pdalboost::detail::unspecified_bool_type)0);\
+    }
+
+#else // !defined(BOOST_NO_UNSPECIFIED_BOOL)
+
+#define BOOST_EXPLICIT_OPERATOR_BOOL()\
+    BOOST_FORCEINLINE operator bool () const\
+    {\
+        return !this->operator! ();\
+    }
+
+#define BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()\
+    BOOST_FORCEINLINE operator bool () const BOOST_NOEXCEPT\
+    {\
+        return !this->operator! ();\
+    }
+
+#define BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL()\
+    BOOST_FORCEINLINE BOOST_CONSTEXPR operator bool () const BOOST_NOEXCEPT\
+    {\
+        return !this->operator! ();\
+    }
+
+#endif // !defined(BOOST_NO_UNSPECIFIED_BOOL)
+
+#endif // !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS)
+
+#endif // BOOST_CORE_EXPLICIT_OPERATOR_BOOL_HPP
diff --git a/vendor/pdalboost/boost/core/ignore_unused.hpp b/vendor/pdalboost/boost/core/ignore_unused.hpp
new file mode 100644
index 0000000..0e70897
--- /dev/null
+++ b/vendor/pdalboost/boost/core/ignore_unused.hpp
@@ -0,0 +1,70 @@
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+//
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_CORE_IGNORE_UNUSED_HPP
+#define BOOST_CORE_IGNORE_UNUSED_HPP
+
+#include <boost/config.hpp>
+
+namespace pdalboost {
+
+#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
+
+template <typename... Ts>
+BOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused(Ts const& ...)
+{}
+
+template <typename... Ts>
+BOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused()
+{}
+
+#else
+
+template <typename T1>
+BOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused(T1 const&)
+{}
+
+template <typename T1, typename T2>
+BOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused(T1 const&, T2 const&)
+{}
+
+template <typename T1, typename T2, typename T3>
+BOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused(T1 const&, T2 const&, T3 const&)
+{}
+
+template <typename T1, typename T2, typename T3, typename T4>
+BOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused(T1 const&, T2 const&, T3 const&, T4 const&)
+{}
+
+template <typename T1, typename T2, typename T3, typename T4, typename T5>
+BOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused(T1 const&, T2 const&, T3 const&, T4 const&, T5 const&)
+{}
+
+template <typename T1>
+BOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused()
+{}
+
+template <typename T1, typename T2>
+BOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused()
+{}
+
+template <typename T1, typename T2, typename T3>
+BOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused()
+{}
+
+template <typename T1, typename T2, typename T3, typename T4>
+BOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused()
+{}
+
+template <typename T1, typename T2, typename T3, typename T4, typename T5>
+BOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore_unused()
+{}
+
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_CORE_IGNORE_UNUSED_HPP
diff --git a/vendor/pdalboost/boost/core/is_same.hpp b/vendor/pdalboost/boost/core/is_same.hpp
new file mode 100644
index 0000000..415d9e8
--- /dev/null
+++ b/vendor/pdalboost/boost/core/is_same.hpp
@@ -0,0 +1,40 @@
+#ifndef BOOST_CORE_IS_SAME_HPP_INCLUDED
+#define BOOST_CORE_IS_SAME_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+// is_same<T1,T2>::value is true when T1 == T2
+//
+// Copyright 2014 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/config.hpp>
+
+namespace pdalboost
+{
+
+namespace core
+{
+
+template< class T1, class T2 > struct is_same
+{
+    BOOST_STATIC_CONSTANT( bool, value = false );
+};
+
+template< class T > struct is_same< T, T >
+{
+    BOOST_STATIC_CONSTANT( bool, value = true );
+};
+
+} // namespace core
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_CORE_IS_SAME_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/core/lightweight_test.hpp b/vendor/pdalboost/boost/core/lightweight_test.hpp
new file mode 100644
index 0000000..1074c23
--- /dev/null
+++ b/vendor/pdalboost/boost/core/lightweight_test.hpp
@@ -0,0 +1,171 @@
+#ifndef BOOST_CORE_LIGHTWEIGHT_TEST_HPP
+#define BOOST_CORE_LIGHTWEIGHT_TEST_HPP
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+//
+//  boost/core/lightweight_test.hpp - lightweight test library
+//
+//  Copyright (c) 2002, 2009, 2014 Peter Dimov
+//  Copyright (2) Beman Dawes 2010, 2011
+//  Copyright (3) Ion Gaztanaga 2013
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/assert.hpp>
+#include <boost/current_function.hpp>
+#include <boost/core/no_exceptions_support.hpp>
+#include <iostream>
+
+//  IDE's like Visual Studio perform better if output goes to std::cout or
+//  some other stream, so allow user to configure output stream:
+#ifndef BOOST_LIGHTWEIGHT_TEST_OSTREAM
+# define BOOST_LIGHTWEIGHT_TEST_OSTREAM std::cerr
+#endif
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+struct report_errors_reminder
+{
+    bool called_report_errors_function;
+
+    report_errors_reminder() : called_report_errors_function(false) {}
+
+    ~report_errors_reminder()
+    {
+        BOOST_ASSERT(called_report_errors_function);  // verify report_errors() was called  
+    }
+};
+
+inline report_errors_reminder& report_errors_remind()
+{
+    static report_errors_reminder r;
+    return r;
+}
+
+inline int & test_errors()
+{
+    static int x = 0;
+    report_errors_remind();
+    return x;
+}
+
+inline void test_failed_impl(char const * expr, char const * file, int line, char const * function)
+{
+    BOOST_LIGHTWEIGHT_TEST_OSTREAM
+      << file << "(" << line << "): test '" << expr << "' failed in function '"
+      << function << "'" << std::endl;
+    ++test_errors();
+}
+
+inline void error_impl(char const * msg, char const * file, int line, char const * function)
+{
+    BOOST_LIGHTWEIGHT_TEST_OSTREAM
+      << file << "(" << line << "): " << msg << " in function '"
+      << function << "'" << std::endl;
+    ++test_errors();
+}
+
+inline void throw_failed_impl(char const * excep, char const * file, int line, char const * function)
+{
+   BOOST_LIGHTWEIGHT_TEST_OSTREAM
+    << file << "(" << line << "): Exception '" << excep << "' not thrown in function '"
+    << function << "'" << std::endl;
+   ++test_errors();
+}
+
+template<class T, class U> inline void test_eq_impl( char const * expr1, char const * expr2,
+  char const * file, int line, char const * function, T const & t, U const & u )
+{
+    if( t == u )
+    {
+        report_errors_remind();
+    }
+    else
+    {
+        BOOST_LIGHTWEIGHT_TEST_OSTREAM
+            << file << "(" << line << "): test '" << expr1 << " == " << expr2
+            << "' failed in function '" << function << "': "
+            << "'" << t << "' != '" << u << "'" << std::endl;
+        ++test_errors();
+    }
+}
+
+template<class T, class U> inline void test_ne_impl( char const * expr1, char const * expr2,
+  char const * file, int line, char const * function, T const & t, U const & u )
+{
+    if( t != u )
+    {
+        report_errors_remind();
+    }
+    else
+    {
+        BOOST_LIGHTWEIGHT_TEST_OSTREAM
+            << file << "(" << line << "): test '" << expr1 << " != " << expr2
+            << "' failed in function '" << function << "': "
+            << "'" << t << "' == '" << u << "'" << std::endl;
+        ++test_errors();
+    }
+}
+
+} // namespace detail
+
+inline int report_errors()
+{
+    pdalboost::detail::report_errors_remind().called_report_errors_function = true;
+
+    int errors = pdalboost::detail::test_errors();
+
+    if( errors == 0 )
+    {
+        BOOST_LIGHTWEIGHT_TEST_OSTREAM
+          << "No errors detected." << std::endl;
+        return 0;
+    }
+    else
+    {
+        BOOST_LIGHTWEIGHT_TEST_OSTREAM
+          << errors << " error" << (errors == 1? "": "s") << " detected." << std::endl;
+        return 1;
+    }
+}
+
+} // namespace pdalboost
+
+#define BOOST_TEST(expr) ((expr)? (void)0: ::pdalboost::detail::test_failed_impl(#expr, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION))
+
+#define BOOST_ERROR(msg) ( ::pdalboost::detail::error_impl(msg, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION) )
+
+#define BOOST_TEST_EQ(expr1,expr2) ( ::pdalboost::detail::test_eq_impl(#expr1, #expr2, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, expr1, expr2) )
+#define BOOST_TEST_NE(expr1,expr2) ( ::pdalboost::detail::test_ne_impl(#expr1, #expr2, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, expr1, expr2) )
+
+#ifndef BOOST_NO_EXCEPTIONS
+   #define BOOST_TEST_THROWS( EXPR, EXCEP )                    \
+      try {                                                    \
+         EXPR;                                                 \
+         ::pdalboost::detail::throw_failed_impl                    \
+         (#EXCEP, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION); \
+      }                                                        \
+      catch(EXCEP const&) {                                    \
+      }                                                        \
+      catch(...) {                                             \
+         ::pdalboost::detail::throw_failed_impl                    \
+         (#EXCEP, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION); \
+      }                                                        \
+   //
+#else
+   #define BOOST_TEST_THROWS( EXPR, EXCEP )
+#endif
+
+#endif // #ifndef BOOST_CORE_LIGHTWEIGHT_TEST_HPP
diff --git a/vendor/pdalboost/boost/core/no_exceptions_support.hpp b/vendor/pdalboost/boost/core/no_exceptions_support.hpp
new file mode 100644
index 0000000..a697f01
--- /dev/null
+++ b/vendor/pdalboost/boost/core/no_exceptions_support.hpp
@@ -0,0 +1,44 @@
+#ifndef BOOST_CORE_NO_EXCEPTIONS_SUPPORT_HPP
+#define BOOST_CORE_NO_EXCEPTIONS_SUPPORT_HPP
+
+#if defined(_MSC_VER)
+#  pragma once
+#endif
+
+//----------------------------------------------------------------------
+// (C) Copyright 2004 Pavel Vozenilek.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// This file contains helper macros used when exception support may be
+// disabled (as indicated by macro BOOST_NO_EXCEPTIONS).
+//
+// Before picking up these macros you may consider using RAII techniques
+// to deal with exceptions - their syntax can be always the same with 
+// or without exception support enabled.
+//----------------------------------------------------------------------
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !(defined BOOST_NO_EXCEPTIONS)
+#    define BOOST_TRY { try
+#    define BOOST_CATCH(x) catch(x)
+#    define BOOST_RETHROW throw;
+#    define BOOST_CATCH_END }
+#else
+#    if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+#        define BOOST_TRY { if ("")
+#        define BOOST_CATCH(x) else if (!"")
+#    else
+#        define BOOST_TRY { if (true)
+#        define BOOST_CATCH(x) else if (false)
+#    endif
+#    define BOOST_RETHROW
+#    define BOOST_CATCH_END }
+#endif
+
+
+#endif 
diff --git a/vendor/pdalboost/boost/core/noncopyable.hpp b/vendor/pdalboost/boost/core/noncopyable.hpp
new file mode 100644
index 0000000..357a97c
--- /dev/null
+++ b/vendor/pdalboost/boost/core/noncopyable.hpp
@@ -0,0 +1,48 @@
+//  Boost noncopyable.hpp header file  --------------------------------------//
+
+//  (C) Copyright Beman Dawes 1999-2003. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/utility for documentation.
+
+#ifndef BOOST_CORE_NONCOPYABLE_HPP
+#define BOOST_CORE_NONCOPYABLE_HPP
+
+#include <boost/config.hpp>
+
+namespace pdalboost {
+
+//  Private copy constructor and copy assignment ensure classes derived from
+//  class noncopyable cannot be copied.
+
+//  Contributed by Dave Abrahams
+
+namespace noncopyable_  // protection from unintended ADL
+{
+  class noncopyable
+  {
+  protected:
+#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && !defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS)
+      BOOST_CONSTEXPR noncopyable() = default;
+      ~noncopyable() = default;
+#else
+      noncopyable() {}
+      ~noncopyable() {}
+#endif
+#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
+      noncopyable( const noncopyable& ) = delete;
+      noncopyable& operator=( const noncopyable& ) = delete;
+#else
+  private:  // emphasize the following members are private
+      noncopyable( const noncopyable& );
+      noncopyable& operator=( const noncopyable& );
+#endif
+  };
+}
+
+typedef noncopyable_::noncopyable noncopyable;
+
+} // namespace pdalboost
+
+#endif  // BOOST_CORE_NONCOPYABLE_HPP
diff --git a/vendor/pdalboost/boost/core/ref.hpp b/vendor/pdalboost/boost/core/ref.hpp
new file mode 100644
index 0000000..0ab569f
--- /dev/null
+++ b/vendor/pdalboost/boost/core/ref.hpp
@@ -0,0 +1,301 @@
+#ifndef BOOST_CORE_REF_HPP
+#define BOOST_CORE_REF_HPP
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/utility/addressof.hpp>
+#include <boost/detail/workaround.hpp>
+
+//
+//  ref.hpp - ref/cref, useful helper functions
+//
+//  Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi at cs.utu.fi)
+//  Copyright (C) 2001, 2002 Peter Dimov
+//  Copyright (C) 2002 David Abrahams
+//
+//  Copyright (C) 2014 Glen Joseph Fernandes
+//  glenfe at live dot com
+//  Copyright (C) 2014 Agustin Berge
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/core/doc/html/core/ref.html for documentation.
+//
+
+/**
+ @file
+*/
+
+/**
+ Boost namespace.
+*/
+namespace pdalboost
+{
+
+#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, == 1600 )
+
+    struct ref_workaround_tag {};
+
+#endif
+
+// reference_wrapper
+
+/**
+ @brief Contains a reference to an object of type `T`.
+
+ `reference_wrapper` is primarily used to "feed" references to
+ function templates (algorithms) that take their parameter by
+ value. It provides an implicit conversion to `T&`, which
+ usually allows the function templates to work on references
+ unmodified.
+*/
+template<class T> class reference_wrapper
+{
+public:
+    /**
+     Type `T`.
+    */
+    typedef T type;
+
+    /**
+     Constructs a `reference_wrapper` object that stores a
+     reference to `t`.
+
+     @remark Does not throw.
+    */
+    BOOST_FORCEINLINE explicit reference_wrapper(T& t): t_(pdalboost::addressof(t)) {}
+
+#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, == 1600 )
+
+    BOOST_FORCEINLINE explicit reference_wrapper( T & t, ref_workaround_tag ): t_( pdalboost::addressof( t ) ) {}
+
+#endif
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+    /**
+     @remark Construction from a temporary object is disabled.
+    */
+    BOOST_DELETED_FUNCTION(reference_wrapper(T&& t))
+public:
+#endif
+
+    /**
+     @return The stored reference.
+     @remark Does not throw.
+    */
+    BOOST_FORCEINLINE operator T& () const { return *t_; }
+
+    /**
+     @return The stored reference.
+     @remark Does not throw.
+    */
+    BOOST_FORCEINLINE T& get() const { return *t_; }
+
+    /**
+     @return A pointer to the object referenced by the stored
+       reference.
+     @remark Does not throw.
+    */
+    BOOST_FORCEINLINE T* get_pointer() const { return t_; }
+
+private:
+
+    T* t_;
+};
+
+// ref
+
+/**
+ @cond
+*/
+#if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) )
+#  define BOOST_REF_CONST
+#else
+#  define BOOST_REF_CONST const
+#endif
+/**
+ @endcond
+*/
+
+/**
+ @return `reference_wrapper<T>(t)`
+ @remark Does not throw.
+*/
+template<class T> BOOST_FORCEINLINE reference_wrapper<T> BOOST_REF_CONST ref( T & t )
+{
+#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, == 1600 )
+
+    return reference_wrapper<T>( t, ref_workaround_tag() );
+
+#else
+
+    return reference_wrapper<T>( t );
+
+#endif
+}
+
+// cref
+
+/**
+ @return `reference_wrapper<T const>(t)`
+ @remark Does not throw.
+*/
+template<class T> BOOST_FORCEINLINE reference_wrapper<T const> BOOST_REF_CONST cref( T const & t )
+{
+    return reference_wrapper<T const>(t);
+}
+
+#undef BOOST_REF_CONST
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
+/**
+ @cond
+*/
+#if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
+#  define BOOST_REF_DELETE
+#else
+#  define BOOST_REF_DELETE = delete
+#endif
+/**
+ @endcond
+*/
+
+/**
+ @remark Construction from a temporary object is disabled.
+*/
+template<class T> void ref(T const&&) BOOST_REF_DELETE;
+
+/**
+ @remark Construction from a temporary object is disabled.
+*/
+template<class T> void cref(T const&&) BOOST_REF_DELETE;
+
+#undef BOOST_REF_DELETE
+
+#endif
+
+// is_reference_wrapper
+
+/**
+ @brief Determine if a type `T` is an instantiation of
+ `reference_wrapper`.
+
+ The value static constant will be true if the type `T` is a
+ specialization of `reference_wrapper`.
+*/
+template<typename T> struct is_reference_wrapper
+{
+    BOOST_STATIC_CONSTANT( bool, value = false );
+};
+
+/**
+ @cond
+*/
+template<typename T> struct is_reference_wrapper< reference_wrapper<T> >
+{
+    BOOST_STATIC_CONSTANT( bool, value = true );
+};
+
+#if !defined(BOOST_NO_CV_SPECIALIZATIONS)
+
+template<typename T> struct is_reference_wrapper< reference_wrapper<T> const >
+{
+    BOOST_STATIC_CONSTANT( bool, value = true );
+};
+
+template<typename T> struct is_reference_wrapper< reference_wrapper<T> volatile >
+{
+    BOOST_STATIC_CONSTANT( bool, value = true );
+};
+
+template<typename T> struct is_reference_wrapper< reference_wrapper<T> const volatile >
+{
+    BOOST_STATIC_CONSTANT( bool, value = true );
+};
+
+#endif // !defined(BOOST_NO_CV_SPECIALIZATIONS)
+
+/**
+ @endcond
+*/
+
+
+// unwrap_reference
+
+/**
+ @brief Find the type in a `reference_wrapper`.
+
+ The `typedef` type is `T::type` if `T` is a
+ `reference_wrapper`, `T` otherwise.
+*/
+template<typename T> struct unwrap_reference
+{
+    typedef T type;
+};
+
+/**
+ @cond
+*/
+template<typename T> struct unwrap_reference< reference_wrapper<T> >
+{
+    typedef T type;
+};
+
+#if !defined(BOOST_NO_CV_SPECIALIZATIONS)
+
+template<typename T> struct unwrap_reference< reference_wrapper<T> const >
+{
+    typedef T type;
+};
+
+template<typename T> struct unwrap_reference< reference_wrapper<T> volatile >
+{
+    typedef T type;
+};
+
+template<typename T> struct unwrap_reference< reference_wrapper<T> const volatile >
+{
+    typedef T type;
+};
+
+#endif // !defined(BOOST_NO_CV_SPECIALIZATIONS)
+
+/**
+ @endcond
+*/
+
+// unwrap_ref
+
+/**
+ @return `unwrap_reference<T>::type&(t)`
+ @remark Does not throw.
+*/
+template<class T> BOOST_FORCEINLINE typename unwrap_reference<T>::type& unwrap_ref( T & t )
+{
+    return t;
+}
+
+// get_pointer
+
+/**
+ @cond
+*/
+template<class T> BOOST_FORCEINLINE T* get_pointer( reference_wrapper<T> const & r )
+{
+    return r.get_pointer();
+}
+/**
+ @endcond
+*/
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_CORE_REF_HPP
diff --git a/vendor/pdalboost/boost/core/scoped_enum.hpp b/vendor/pdalboost/boost/core/scoped_enum.hpp
new file mode 100644
index 0000000..1993b79
--- /dev/null
+++ b/vendor/pdalboost/boost/core/scoped_enum.hpp
@@ -0,0 +1,192 @@
+//  scoped_enum.hpp  ---------------------------------------------------------//
+
+//  Copyright Beman Dawes, 2009
+//  Copyright (C) 2011-2012 Vicente J. Botet Escriba
+//  Copyright (C) 2012 Anthony Williams
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_CORE_SCOPED_ENUM_HPP
+#define BOOST_CORE_SCOPED_ENUM_HPP
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+namespace pdalboost
+{
+
+#ifdef BOOST_NO_CXX11_SCOPED_ENUMS
+
+  /**
+   * Meta-function to get the native enum type associated to an enum class or its emulation.
+   */
+  template <typename EnumType>
+  struct native_type
+  {
+    /**
+     * The member typedef type names the native enum type associated to the scoped enum,
+     * which is it self if the compiler supports scoped enums or EnumType::enum_type if it is an emulated scoped enum.
+     */
+    typedef typename EnumType::enum_type type;
+  };
+
+  /**
+   * Casts a scoped enum to its underlying type.
+   *
+   * This function is useful when working with scoped enum classes, which doens't implicitly convert to the underlying type.
+   * @param v A scoped enum.
+   * @returns The underlying type.
+   * @throws No-throws.
+   */
+  template <typename UnderlyingType, typename EnumType>
+  UnderlyingType underlying_cast(EnumType v)
+  {
+    return v.get_underlying_value_();
+  }
+
+  /**
+   * Casts a scoped enum to its native enum type.
+   *
+   * This function is useful to make programs portable when the scoped enum emulation can not be use where native enums can.
+   *
+   * EnumType the scoped enum type
+   *
+   * @param v A scoped enum.
+   * @returns The native enum value.
+   * @throws No-throws.
+   */
+  template <typename EnumType>
+  inline
+  typename EnumType::enum_type native_value(EnumType e)
+  {
+    return e.get_native_value_();
+  }
+
+#else  // BOOST_NO_CXX11_SCOPED_ENUMS
+
+  template <typename EnumType>
+  struct native_type
+  {
+    typedef EnumType type;
+  };
+
+  template <typename UnderlyingType, typename EnumType>
+  UnderlyingType underlying_cast(EnumType v)
+  {
+    return static_cast<UnderlyingType>(v);
+  }
+
+  template <typename EnumType>
+  inline
+  EnumType native_value(EnumType e)
+  {
+    return e;
+  }
+
+#endif // BOOST_NO_CXX11_SCOPED_ENUMS
+}
+
+
+#ifdef BOOST_NO_CXX11_SCOPED_ENUMS
+
+#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+
+#define BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR \
+     explicit operator underlying_type() const BOOST_NOEXCEPT { return get_underlying_value_(); }
+
+#else
+
+#define BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR
+
+#endif
+
+/**
+ * Start a declaration of a scoped enum.
+ *
+ * @param EnumType The new scoped enum.
+ * @param UnderlyingType The underlying type.
+ */
+#define BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(EnumType, UnderlyingType)    \
+    struct EnumType {                                                   \
+        typedef void is_boost_scoped_enum_tag;                          \
+        typedef UnderlyingType underlying_type;                         \
+        EnumType() BOOST_NOEXCEPT {}                                    \
+        explicit EnumType(underlying_type v) BOOST_NOEXCEPT : v_(v) {}                 \
+        underlying_type get_underlying_value_() const BOOST_NOEXCEPT { return v_; }    \
+        BOOST_SCOPED_ENUM_UT_DECLARE_CONVERSION_OPERATOR                \
+    private:                                                            \
+        underlying_type v_;                                             \
+        typedef EnumType self_type;                                     \
+    public:                                                             \
+        enum enum_type
+
+#define BOOST_SCOPED_ENUM_DECLARE_END2() \
+        enum_type get_native_value_() const BOOST_NOEXCEPT { return enum_type(v_); } \
+        friend bool operator ==(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)==enum_type(rhs.v_); } \
+        friend bool operator ==(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)==rhs; } \
+        friend bool operator ==(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs==enum_type(rhs.v_); } \
+        friend bool operator !=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)!=enum_type(rhs.v_); } \
+        friend bool operator !=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)!=rhs; } \
+        friend bool operator !=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs!=enum_type(rhs.v_); } \
+        friend bool operator <(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<enum_type(rhs.v_); } \
+        friend bool operator <(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<rhs; } \
+        friend bool operator <(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs<enum_type(rhs.v_); } \
+        friend bool operator <=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<=enum_type(rhs.v_); } \
+        friend bool operator <=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)<=rhs; } \
+        friend bool operator <=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs<=enum_type(rhs.v_); } \
+        friend bool operator >(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>enum_type(rhs.v_); } \
+        friend bool operator >(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>rhs; } \
+        friend bool operator >(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs>enum_type(rhs.v_); } \
+        friend bool operator >=(self_type lhs, self_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>=enum_type(rhs.v_); } \
+        friend bool operator >=(self_type lhs, enum_type rhs) BOOST_NOEXCEPT { return enum_type(lhs.v_)>=rhs; } \
+        friend bool operator >=(enum_type lhs, self_type rhs) BOOST_NOEXCEPT { return lhs>=enum_type(rhs.v_); } \
+    };
+
+#define BOOST_SCOPED_ENUM_DECLARE_END(EnumType) \
+    ; \
+    EnumType(enum_type v) BOOST_NOEXCEPT : v_(v) {}                 \
+    BOOST_SCOPED_ENUM_DECLARE_END2()
+
+/**
+ * Starts a declaration of a scoped enum with the default int underlying type.
+ *
+ * @param EnumType The new scoped enum.
+ */
+#define BOOST_SCOPED_ENUM_DECLARE_BEGIN(EnumType) \
+  BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(EnumType,int)
+
+/**
+ * Name of the native enum type.
+ *
+ * @param EnumType The new scoped enum.
+ */
+#define BOOST_SCOPED_ENUM_NATIVE(EnumType) EnumType::enum_type
+/**
+ * Forward declares an scoped enum.
+ *
+ * @param EnumType The scoped enum.
+ */
+#define BOOST_SCOPED_ENUM_FORWARD_DECLARE(EnumType) struct EnumType
+
+#else  // BOOST_NO_CXX11_SCOPED_ENUMS
+
+#define BOOST_SCOPED_ENUM_UT_DECLARE_BEGIN(EnumType,UnderlyingType) enum class EnumType : UnderlyingType
+#define BOOST_SCOPED_ENUM_DECLARE_BEGIN(EnumType) enum class EnumType
+#define BOOST_SCOPED_ENUM_DECLARE_END2()
+#define BOOST_SCOPED_ENUM_DECLARE_END(EnumType) ;
+
+#define BOOST_SCOPED_ENUM_NATIVE(EnumType) EnumType
+#define BOOST_SCOPED_ENUM_FORWARD_DECLARE(EnumType) enum class EnumType
+
+#endif  // BOOST_NO_CXX11_SCOPED_ENUMS
+
+// Deprecated macros
+#define BOOST_SCOPED_ENUM_START(name) BOOST_SCOPED_ENUM_DECLARE_BEGIN(name)
+#define BOOST_SCOPED_ENUM_END BOOST_SCOPED_ENUM_DECLARE_END2()
+#define BOOST_SCOPED_ENUM(name) BOOST_SCOPED_ENUM_NATIVE(name)
+
+#endif  // BOOST_CORE_SCOPED_ENUM_HPP
diff --git a/vendor/pdalboost/boost/core/swap.hpp b/vendor/pdalboost/boost/core/swap.hpp
new file mode 100644
index 0000000..73d3ac5
--- /dev/null
+++ b/vendor/pdalboost/boost/core/swap.hpp
@@ -0,0 +1,60 @@
+// Copyright (C) 2007, 2008 Steven Watanabe, Joseph Gauterin, Niels Dekker
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// For more information, see http://www.boost.org
+
+
+#ifndef BOOST_CORE_SWAP_HPP
+#define BOOST_CORE_SWAP_HPP
+
+// Note: the implementation of this utility contains various workarounds:
+// - swap_impl is put outside the boost namespace, to avoid infinite
+// recursion (causing stack overflow) when swapping objects of a primitive
+// type.
+// - swap_impl has a using-directive, rather than a using-declaration,
+// because some compilers (including MSVC 7.1, Borland 5.9.3, and
+// Intel 8.1) don't do argument-dependent lookup when it has a
+// using-declaration instead.
+// - pdalboost::swap has two template arguments, instead of one, to
+// avoid ambiguity when swapping objects of a Boost type that does
+// not have its own pdalboost::swap overload.
+
+#include <utility> //for std::swap (C++11)
+#include <algorithm> //for std::swap (C++98)
+#include <cstddef> //for std::size_t
+#include <boost/config.hpp>
+
+namespace pdalboost_swap_impl
+{
+  template<class T>
+  BOOST_GPU_ENABLED
+  void swap_impl(T& left, T& right)
+  {
+    using namespace std;//use std::swap if argument dependent lookup fails
+    swap(left,right);
+  }
+
+  template<class T, std::size_t N>
+  BOOST_GPU_ENABLED
+  void swap_impl(T (& left)[N], T (& right)[N])
+  {
+    for (std::size_t i = 0; i < N; ++i)
+    {
+      ::pdalboost_swap_impl::swap_impl(left[i], right[i]);
+    }
+  }
+}
+
+namespace pdalboost
+{
+  template<class T1, class T2>
+  BOOST_GPU_ENABLED
+  void swap(T1& left, T2& right)
+  {
+    ::pdalboost_swap_impl::swap_impl(left, right);
+  }
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/core/typeinfo.hpp b/vendor/pdalboost/boost/core/typeinfo.hpp
new file mode 100644
index 0000000..2d8aa1f
--- /dev/null
+++ b/vendor/pdalboost/boost/core/typeinfo.hpp
@@ -0,0 +1,151 @@
+#ifndef BOOST_CORE_TYPEINFO_HPP_INCLUDED
+#define BOOST_CORE_TYPEINFO_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//  core::typeinfo, BOOST_CORE_TYPEID
+//
+//  Copyright 2007, 2014 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/config.hpp>
+
+#if defined( BOOST_NO_TYPEID )
+
+#include <boost/current_function.hpp>
+#include <functional>
+
+namespace pdalboost
+{
+
+namespace core
+{
+
+class typeinfo
+{
+private:
+
+    typeinfo( typeinfo const& );
+    typeinfo& operator=( typeinfo const& );
+
+    char const * name_;
+
+public:
+
+    explicit typeinfo( char const * name ): name_( name )
+    {
+    }
+
+    bool operator==( typeinfo const& rhs ) const
+    {
+        return this == &rhs;
+    }
+
+    bool operator!=( typeinfo const& rhs ) const
+    {
+        return this != &rhs;
+    }
+
+    bool before( typeinfo const& rhs ) const
+    {
+        return std::less< typeinfo const* >()( this, &rhs );
+    }
+
+    char const* name() const
+    {
+        return name_;
+    }
+};
+
+inline char const * demangled_name( core::typeinfo const & ti )
+{
+    return ti.name();
+}
+
+} // namespace core
+
+namespace detail
+{
+
+template<class T> struct core_typeid_
+{
+    static pdalboost::core::typeinfo ti_;
+
+    static char const * name()
+    {
+        return BOOST_CURRENT_FUNCTION;
+    }
+};
+
+#if defined(__SUNPRO_CC)
+// see #4199, the Sun Studio compiler gets confused about static initialization 
+// constructor arguments. But an assignment works just fine. 
+template<class T> pdalboost::core::typeinfo core_typeid_< T >::ti_ = core_typeid_< T >::name();
+#else
+template<class T> pdalboost::core::typeinfo core_typeid_< T >::ti_(core_typeid_< T >::name());
+#endif
+
+template<class T> struct core_typeid_< T & >: core_typeid_< T >
+{
+};
+
+template<class T> struct core_typeid_< T const >: core_typeid_< T >
+{
+};
+
+template<class T> struct core_typeid_< T volatile >: core_typeid_< T >
+{
+};
+
+template<class T> struct core_typeid_< T const volatile >: core_typeid_< T >
+{
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#define BOOST_CORE_TYPEID(T) (pdalboost::detail::core_typeid_<T>::ti_)
+
+#else
+
+#include <boost/core/demangle.hpp>
+#include <typeinfo>
+
+namespace pdalboost
+{
+
+namespace core
+{
+
+#if defined( BOOST_NO_STD_TYPEINFO )
+
+typedef ::type_info typeinfo;
+
+#else
+
+typedef std::type_info typeinfo;
+
+#endif
+
+inline std::string demangled_name( core::typeinfo const & ti )
+{
+    return core::demangle( ti.name() );
+}
+
+} // namespace core
+
+} // namespace pdalboost
+
+#define BOOST_CORE_TYPEID(T) typeid(T)
+
+#endif
+
+#endif  // #ifndef BOOST_CORE_TYPEINFO_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/cregex.hpp b/vendor/pdalboost/boost/cregex.hpp
new file mode 100644
index 0000000..9788418
--- /dev/null
+++ b/vendor/pdalboost/boost/cregex.hpp
@@ -0,0 +1,39 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+ 
+ /*
+  *   LOCATION:    see http://www.boost.org/libs/regex for most recent version.
+  *   FILE         cregex.cpp
+  *   VERSION      see <boost/version.hpp>
+  *   DESCRIPTION: Declares POSIX API functions
+  *                + pdalboost::RegEx high level wrapper.
+  */
+
+#ifndef BOOST_RE_CREGEX_HPP
+#define BOOST_RE_CREGEX_HPP
+
+#ifndef BOOST_REGEX_CONFIG_HPP
+#include <boost/regex/config.hpp>
+#endif
+
+#include <boost/regex/v4/cregex.hpp>
+
+#endif /* include guard */
+
+
+
+
+
+
+
+
+
+
diff --git a/vendor/pdalboost/boost/cstdint.hpp b/vendor/pdalboost/boost/cstdint.hpp
new file mode 100644
index 0000000..5894dce
--- /dev/null
+++ b/vendor/pdalboost/boost/cstdint.hpp
@@ -0,0 +1,546 @@
+//  boost cstdint.hpp header file  ------------------------------------------//
+
+//  (C) Copyright Beman Dawes 1999.
+//  (C) Copyright Jens Mauer 2001
+//  (C) Copyright John Maddock 2001
+//  Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/integer for documentation.
+
+//  Revision History
+//   31 Oct 01  use BOOST_HAS_LONG_LONG to check for "long long" (Jens M.)
+//   16 Apr 01  check LONGLONG_MAX when looking for "long long" (Jens Maurer)
+//   23 Jan 01  prefer "long" over "int" for int32_t and intmax_t (Jens Maurer)
+//   12 Nov 00  Merged <boost/stdint.h> (Jens Maurer)
+//   23 Sep 00  Added INTXX_C macro support (John Maddock).
+//   22 Sep 00  Better 64-bit support (John Maddock)
+//   29 Jun 00  Reimplement to avoid including stdint.h within namespace pdalboost
+//    8 Aug 99  Initial version (Beman Dawes)
+
+
+#ifndef BOOST_CSTDINT_HPP
+#define BOOST_CSTDINT_HPP
+
+//
+// Since we always define the INT#_C macros as per C++0x,
+// define __STDC_CONSTANT_MACROS so that <stdint.h> does the right
+// thing if possible, and so that the user knows that the macros
+// are actually defined as per C99.
+//
+#ifndef __STDC_CONSTANT_MACROS
+#  define __STDC_CONSTANT_MACROS
+#endif
+
+#include <boost/config.hpp>
+
+//
+// Note that GLIBC is a bit inconsistent about whether int64_t is defined or not
+// depending upon what headers happen to have been included first...
+// so we disable use of stdint.h when GLIBC does not define __GLIBC_HAVE_LONG_LONG.
+// See https://svn.boost.org/trac/boost/ticket/3548 and http://sources.redhat.com/bugzilla/show_bug.cgi?id=10990
+//
+#if defined(BOOST_HAS_STDINT_H)					\
+  && (!defined(__GLIBC__)					\
+      || defined(__GLIBC_HAVE_LONG_LONG)			\
+      || (defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 17)))))
+
+// The following #include is an implementation artifact; not part of interface.
+# ifdef __hpux
+// HP-UX has a vaguely nice <stdint.h> in a non-standard location
+#   include <inttypes.h>
+#   ifdef __STDC_32_MODE__
+      // this is triggered with GCC, because it defines __cplusplus < 199707L
+#     define BOOST_NO_INT64_T
+#   endif
+# elif defined(__FreeBSD__) || defined(__IBMCPP__) || defined(_AIX)
+#   include <inttypes.h>
+# else
+#   include <stdint.h>
+
+// There is a bug in Cygwin two _C macros
+#   if defined(__STDC_CONSTANT_MACROS) && defined(__CYGWIN__)
+#     undef INTMAX_C
+#     undef UINTMAX_C
+#     define INTMAX_C(c) c##LL
+#     define UINTMAX_C(c) c##ULL
+#   endif
+
+# endif
+
+#if defined(__QNX__) && defined(__EXT_QNX) 
+
+// QNX (Dinkumware stdlib) defines these as non-standard names.
+// Reflect to the standard names.
+
+typedef ::intleast8_t int_least8_t;
+typedef ::intfast8_t int_fast8_t;
+typedef ::uintleast8_t uint_least8_t;
+typedef ::uintfast8_t uint_fast8_t;
+
+typedef ::intleast16_t int_least16_t;
+typedef ::intfast16_t int_fast16_t;
+typedef ::uintleast16_t uint_least16_t;
+typedef ::uintfast16_t uint_fast16_t;
+
+typedef ::intleast32_t int_least32_t;
+typedef ::intfast32_t int_fast32_t;
+typedef ::uintleast32_t uint_least32_t;
+typedef ::uintfast32_t uint_fast32_t;
+
+# ifndef BOOST_NO_INT64_T
+
+typedef ::intleast64_t int_least64_t;
+typedef ::intfast64_t int_fast64_t;
+typedef ::uintleast64_t uint_least64_t;
+typedef ::uintfast64_t uint_fast64_t;
+
+# endif
+
+#endif
+
+namespace pdalboost
+{
+
+  using ::int8_t;
+  using ::int_least8_t;
+  using ::int_fast8_t;
+  using ::uint8_t;
+  using ::uint_least8_t;
+  using ::uint_fast8_t;
+
+  using ::int16_t;
+  using ::int_least16_t;
+  using ::int_fast16_t;
+  using ::uint16_t;
+  using ::uint_least16_t;
+  using ::uint_fast16_t;
+
+  using ::int32_t;
+  using ::int_least32_t;
+  using ::int_fast32_t;
+  using ::uint32_t;
+  using ::uint_least32_t;
+  using ::uint_fast32_t;
+
+# ifndef BOOST_NO_INT64_T
+
+  using ::int64_t;
+  using ::int_least64_t;
+  using ::int_fast64_t;
+  using ::uint64_t;
+  using ::uint_least64_t;
+  using ::uint_fast64_t;
+
+# endif
+
+  using ::intmax_t;
+  using ::uintmax_t;
+
+} // namespace pdalboost
+
+#elif defined(__FreeBSD__) && (__FreeBSD__ <= 4) || defined(__osf__) || defined(__VMS) || defined(__SOLARIS9__) || defined(__NetBSD__)
+// FreeBSD and Tru64 have an <inttypes.h> that contains much of what we need.
+# include <inttypes.h>
+
+namespace pdalboost {
+
+  using ::int8_t;
+  typedef int8_t int_least8_t;
+  typedef int8_t int_fast8_t;
+  using ::uint8_t;
+  typedef uint8_t uint_least8_t;
+  typedef uint8_t uint_fast8_t;
+
+  using ::int16_t;
+  typedef int16_t int_least16_t;
+  typedef int16_t int_fast16_t;
+  using ::uint16_t;
+  typedef uint16_t uint_least16_t;
+  typedef uint16_t uint_fast16_t;
+
+  using ::int32_t;
+  typedef int32_t int_least32_t;
+  typedef int32_t int_fast32_t;
+  using ::uint32_t;
+  typedef uint32_t uint_least32_t;
+  typedef uint32_t uint_fast32_t;
+
+# ifndef BOOST_NO_INT64_T
+
+  using ::int64_t;
+  typedef int64_t int_least64_t;
+  typedef int64_t int_fast64_t;
+  using ::uint64_t;
+  typedef uint64_t uint_least64_t;
+  typedef uint64_t uint_fast64_t;
+
+  typedef int64_t intmax_t;
+  typedef uint64_t uintmax_t;
+
+# else
+
+  typedef int32_t intmax_t;
+  typedef uint32_t uintmax_t;
+
+# endif
+
+} // namespace pdalboost
+
+#else  // BOOST_HAS_STDINT_H
+
+# include <boost/limits.hpp> // implementation artifact; not part of interface
+# include <limits.h>         // needed for limits macros
+
+
+namespace pdalboost
+{
+
+//  These are fairly safe guesses for some 16-bit, and most 32-bit and 64-bit
+//  platforms.  For other systems, they will have to be hand tailored.
+//
+//  Because the fast types are assumed to be the same as the undecorated types,
+//  it may be possible to hand tailor a more efficient implementation.  Such
+//  an optimization may be illusionary; on the Intel x86-family 386 on, for
+//  example, byte arithmetic and load/stores are as fast as "int" sized ones.
+
+//  8-bit types  ------------------------------------------------------------//
+
+# if UCHAR_MAX == 0xff
+     typedef signed char     int8_t;
+     typedef signed char     int_least8_t;
+     typedef signed char     int_fast8_t;
+     typedef unsigned char   uint8_t;
+     typedef unsigned char   uint_least8_t;
+     typedef unsigned char   uint_fast8_t;
+# else
+#    error defaults not correct; you must hand modify boost/cstdint.hpp
+# endif
+
+//  16-bit types  -----------------------------------------------------------//
+
+# if USHRT_MAX == 0xffff
+#  if defined(__crayx1)
+     // The Cray X1 has a 16-bit short, however it is not recommend
+     // for use in performance critical code.
+     typedef short           int16_t;
+     typedef short           int_least16_t;
+     typedef int             int_fast16_t;
+     typedef unsigned short  uint16_t;
+     typedef unsigned short  uint_least16_t;
+     typedef unsigned int    uint_fast16_t;
+#  else
+     typedef short           int16_t;
+     typedef short           int_least16_t;
+     typedef short           int_fast16_t;
+     typedef unsigned short  uint16_t;
+     typedef unsigned short  uint_least16_t;
+     typedef unsigned short  uint_fast16_t;
+#  endif
+# elif (USHRT_MAX == 0xffffffff) && defined(__MTA__)
+      // On MTA / XMT short is 32 bits unless the -short16 compiler flag is specified
+      // MTA / XMT does support the following non-standard integer types
+      typedef __short16           int16_t;
+      typedef __short16           int_least16_t;
+      typedef __short16           int_fast16_t;
+      typedef unsigned __short16  uint16_t;
+      typedef unsigned __short16  uint_least16_t;
+      typedef unsigned __short16  uint_fast16_t;
+# elif (USHRT_MAX == 0xffffffff) && defined(CRAY)
+     // no 16-bit types on Cray:
+     typedef short           int_least16_t;
+     typedef short           int_fast16_t;
+     typedef unsigned short  uint_least16_t;
+     typedef unsigned short  uint_fast16_t;
+# else
+#    error defaults not correct; you must hand modify boost/cstdint.hpp
+# endif
+
+//  32-bit types  -----------------------------------------------------------//
+
+# if UINT_MAX == 0xffffffff
+     typedef int             int32_t;
+     typedef int             int_least32_t;
+     typedef int             int_fast32_t;
+     typedef unsigned int    uint32_t;
+     typedef unsigned int    uint_least32_t;
+     typedef unsigned int    uint_fast32_t;
+# elif (USHRT_MAX == 0xffffffff)
+     typedef short             int32_t;
+     typedef short             int_least32_t;
+     typedef short             int_fast32_t;
+     typedef unsigned short    uint32_t;
+     typedef unsigned short    uint_least32_t;
+     typedef unsigned short    uint_fast32_t;
+# elif ULONG_MAX == 0xffffffff
+     typedef long            int32_t;
+     typedef long            int_least32_t;
+     typedef long            int_fast32_t;
+     typedef unsigned long   uint32_t;
+     typedef unsigned long   uint_least32_t;
+     typedef unsigned long   uint_fast32_t;
+# elif (UINT_MAX == 0xffffffffffffffff) && defined(__MTA__)
+      // Integers are 64 bits on the MTA / XMT
+      typedef __int32           int32_t;
+      typedef __int32           int_least32_t;
+      typedef __int32           int_fast32_t;
+      typedef unsigned __int32  uint32_t;
+      typedef unsigned __int32  uint_least32_t;
+      typedef unsigned __int32  uint_fast32_t;
+# else
+#    error defaults not correct; you must hand modify boost/cstdint.hpp
+# endif
+
+//  64-bit types + intmax_t and uintmax_t  ----------------------------------//
+
+# if defined(BOOST_HAS_LONG_LONG) && \
+   !defined(BOOST_MSVC) && !defined(__BORLANDC__) && \
+   (!defined(__GLIBCPP__) || defined(_GLIBCPP_USE_LONG_LONG)) && \
+   (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))
+#    if defined(__hpux)
+     // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions
+#    elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615ULL) || (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615ULL) || (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615ULL)
+                                                                 // 2**64 - 1
+#    else
+#       error defaults not correct; you must hand modify boost/cstdint.hpp
+#    endif
+
+     typedef  ::pdalboost::long_long_type            intmax_t;
+     typedef  ::pdalboost::ulong_long_type   uintmax_t;
+     typedef  ::pdalboost::long_long_type            int64_t;
+     typedef  ::pdalboost::long_long_type            int_least64_t;
+     typedef  ::pdalboost::long_long_type            int_fast64_t;
+     typedef  ::pdalboost::ulong_long_type   uint64_t;
+     typedef  ::pdalboost::ulong_long_type   uint_least64_t;
+     typedef  ::pdalboost::ulong_long_type   uint_fast64_t;
+
+# elif ULONG_MAX != 0xffffffff
+
+#    if ULONG_MAX == 18446744073709551615 // 2**64 - 1
+     typedef long                 intmax_t;
+     typedef unsigned long        uintmax_t;
+     typedef long                 int64_t;
+     typedef long                 int_least64_t;
+     typedef long                 int_fast64_t;
+     typedef unsigned long        uint64_t;
+     typedef unsigned long        uint_least64_t;
+     typedef unsigned long        uint_fast64_t;
+#    else
+#       error defaults not correct; you must hand modify boost/cstdint.hpp
+#    endif
+# elif defined(__GNUC__) && defined(BOOST_HAS_LONG_LONG)
+     __extension__ typedef long long            intmax_t;
+     __extension__ typedef unsigned long long   uintmax_t;
+     __extension__ typedef long long            int64_t;
+     __extension__ typedef long long            int_least64_t;
+     __extension__ typedef long long            int_fast64_t;
+     __extension__ typedef unsigned long long   uint64_t;
+     __extension__ typedef unsigned long long   uint_least64_t;
+     __extension__ typedef unsigned long long   uint_fast64_t;
+# elif defined(BOOST_HAS_MS_INT64)
+     //
+     // we have Borland/Intel/Microsoft __int64:
+     //
+     typedef __int64             intmax_t;
+     typedef unsigned __int64    uintmax_t;
+     typedef __int64             int64_t;
+     typedef __int64             int_least64_t;
+     typedef __int64             int_fast64_t;
+     typedef unsigned __int64    uint64_t;
+     typedef unsigned __int64    uint_least64_t;
+     typedef unsigned __int64    uint_fast64_t;
+# else // assume no 64-bit integers
+#  define BOOST_NO_INT64_T
+     typedef int32_t              intmax_t;
+     typedef uint32_t             uintmax_t;
+# endif
+
+} // namespace pdalboost
+
+
+#endif // BOOST_HAS_STDINT_H
+
+// intptr_t/uintptr_t are defined separately because they are optional and not universally available
+#if defined(BOOST_WINDOWS) && !defined(_WIN32_WCE) && !defined(BOOST_HAS_STDINT_H)
+// Older MSVC don't have stdint.h and have intptr_t/uintptr_t defined in stddef.h
+#include <stddef.h>
+#endif
+
+// PGI seems to not support intptr_t/uintptr_t properly. BOOST_HAS_STDINT_H is not defined for this compiler by Boost.Config.
+#if !defined(__PGIC__)
+
+#if (defined(BOOST_WINDOWS) && !defined(_WIN32_WCE)) \
+    || (defined(_XOPEN_UNIX) && (_XOPEN_UNIX+0 > 0) && !defined(__UCLIBC__)) \
+    || defined(__CYGWIN__) \
+    || defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \
+    || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(sun)
+
+namespace pdalboost {
+    using ::intptr_t;
+    using ::uintptr_t;
+}
+#define BOOST_HAS_INTPTR_T
+
+// Clang pretends to be GCC, so it'll match this condition
+#elif defined(__GNUC__) && defined(__INTPTR_TYPE__) && defined(__UINTPTR_TYPE__)
+
+namespace pdalboost {
+    typedef __INTPTR_TYPE__ intptr_t;
+    typedef __UINTPTR_TYPE__ uintptr_t;
+}
+#define BOOST_HAS_INTPTR_T
+
+#endif
+
+#endif // !defined(__PGIC__)
+
+#endif // BOOST_CSTDINT_HPP
+
+
+/****************************************************
+
+Macro definition section:
+
+Added 23rd September 2000 (John Maddock).
+Modified 11th September 2001 to be excluded when
+BOOST_HAS_STDINT_H is defined (John Maddock).
+Modified 11th Dec 2009 to always define the
+INT#_C macros if they're not already defined (John Maddock).
+
+******************************************************/
+
+#if !defined(BOOST__STDC_CONSTANT_MACROS_DEFINED) && \
+   (!defined(INT8_C) || !defined(INT16_C) || !defined(INT32_C) || !defined(INT64_C))
+//
+// For the following code we get several warnings along the lines of:
+//
+// boost/cstdint.hpp:428:35: error: use of C99 long long integer constant
+//
+// So we declare this a system header to suppress these warnings.
+//
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+#pragma GCC system_header
+#endif
+
+#include <limits.h>
+# define BOOST__STDC_CONSTANT_MACROS_DEFINED
+# if defined(BOOST_HAS_MS_INT64)
+//
+// Borland/Intel/Microsoft compilers have width specific suffixes:
+//
+#ifndef INT8_C
+#  define INT8_C(value)     value##i8
+#endif
+#ifndef INT16_C
+#  define INT16_C(value)    value##i16
+#endif
+#ifndef INT32_C
+#  define INT32_C(value)    value##i32
+#endif
+#ifndef INT64_C
+#  define INT64_C(value)    value##i64
+#endif
+#  ifdef __BORLANDC__
+    // Borland bug: appending ui8 makes the type a signed char
+#   define UINT8_C(value)    static_cast<unsigned char>(value##u)
+#  else
+#   define UINT8_C(value)    value##ui8
+#  endif
+#ifndef UINT16_C
+#  define UINT16_C(value)   value##ui16
+#endif
+#ifndef UINT32_C
+#  define UINT32_C(value)   value##ui32
+#endif
+#ifndef UINT64_C
+#  define UINT64_C(value)   value##ui64
+#endif
+#ifndef INTMAX_C
+#  define INTMAX_C(value)   value##i64
+#  define UINTMAX_C(value)  value##ui64
+#endif
+
+# else
+//  do it the old fashioned way:
+
+//  8-bit types  ------------------------------------------------------------//
+
+#  if (UCHAR_MAX == 0xff) && !defined(INT8_C)
+#   define INT8_C(value) static_cast<pdalboost::int8_t>(value)
+#   define UINT8_C(value) static_cast<pdalboost::uint8_t>(value##u)
+#  endif
+
+//  16-bit types  -----------------------------------------------------------//
+
+#  if (USHRT_MAX == 0xffff) && !defined(INT16_C)
+#   define INT16_C(value) static_cast<pdalboost::int16_t>(value)
+#   define UINT16_C(value) static_cast<pdalboost::uint16_t>(value##u)
+#  endif
+
+//  32-bit types  -----------------------------------------------------------//
+#ifndef INT32_C
+#  if (UINT_MAX == 0xffffffff)
+#   define INT32_C(value) value
+#   define UINT32_C(value) value##u
+#  elif ULONG_MAX == 0xffffffff
+#   define INT32_C(value) value##L
+#   define UINT32_C(value) value##uL
+#  endif
+#endif
+
+//  64-bit types + intmax_t and uintmax_t  ----------------------------------//
+#ifndef INT64_C
+#  if defined(BOOST_HAS_LONG_LONG) && \
+    (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX) || defined(_ULLONG_MAX) || defined(_LLONG_MAX))
+
+#    if defined(__hpux)
+        // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions
+#       define INT64_C(value) value##LL
+#       define UINT64_C(value) value##uLL
+#    elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615ULL) ||  \
+        (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615ULL) ||  \
+        (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615ULL) || \
+        (defined(_ULLONG_MAX) && _ULLONG_MAX == 18446744073709551615ULL) || \
+        (defined(_LLONG_MAX) && _LLONG_MAX == 9223372036854775807LL)
+
+#       define INT64_C(value) value##LL
+#       define UINT64_C(value) value##uLL
+#    else
+#       error defaults not correct; you must hand modify boost/cstdint.hpp
+#    endif
+#  elif ULONG_MAX != 0xffffffff
+
+#    if ULONG_MAX == 18446744073709551615U // 2**64 - 1
+#       define INT64_C(value) value##L
+#       define UINT64_C(value) value##uL
+#    else
+#       error defaults not correct; you must hand modify boost/cstdint.hpp
+#    endif
+#  elif defined(BOOST_HAS_LONG_LONG)
+     // Usual macros not defined, work things out for ourselves:
+#    if(~0uLL == 18446744073709551615ULL)
+#       define INT64_C(value) value##LL
+#       define UINT64_C(value) value##uLL
+#    else
+#       error defaults not correct; you must hand modify boost/cstdint.hpp
+#    endif
+#  else
+#    error defaults not correct; you must hand modify boost/cstdint.hpp
+#  endif
+
+#  ifdef BOOST_NO_INT64_T
+#   define INTMAX_C(value) INT32_C(value)
+#   define UINTMAX_C(value) UINT32_C(value)
+#  else
+#   define INTMAX_C(value) INT64_C(value)
+#   define UINTMAX_C(value) UINT64_C(value)
+#  endif
+#endif
+# endif // Borland/Microsoft specific width suffixes
+
+#endif // INT#_C macros.
+
+
+
+
diff --git a/vendor/pdalboost/boost/cstdlib.hpp b/vendor/pdalboost/boost/cstdlib.hpp
new file mode 100644
index 0000000..410837a
--- /dev/null
+++ b/vendor/pdalboost/boost/cstdlib.hpp
@@ -0,0 +1,41 @@
+//  boost/cstdlib.hpp header  ------------------------------------------------//
+
+//  Copyright Beman Dawes 2001.  Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/utility/cstdlib.html for documentation.
+
+//  Revision History
+//   26 Feb 01  Initial version (Beman Dawes)
+
+#ifndef BOOST_CSTDLIB_HPP
+#define BOOST_CSTDLIB_HPP
+
+#include <cstdlib>
+
+namespace pdalboost
+{
+   //  The intent is to propose the following for addition to namespace std
+   //  in the C++ Standard Library, and to then deprecate EXIT_SUCCESS and
+   //  EXIT_FAILURE.  As an implementation detail, this header defines the
+   //  new constants in terms of EXIT_SUCCESS and EXIT_FAILURE.  In a new
+   //  standard, the constants would be implementation-defined, although it
+   //  might be worthwhile to "suggest" (which a standard is allowed to do)
+   //  values of 0 and 1 respectively.
+
+   //  Rationale for having multiple failure values: some environments may
+   //  wish to distinguish between different classes of errors.
+   //  Rationale for choice of values: programs often use values < 100 for
+   //  their own error reporting.  Values > 255 are sometimes reserved for
+   //  system detected errors.  200/201 were suggested to minimize conflict.
+
+   const int exit_success = EXIT_SUCCESS;  // implementation-defined value
+   const int exit_failure = EXIT_FAILURE;  // implementation-defined value
+   const int exit_exception_failure = 200; // otherwise uncaught exception
+   const int exit_test_failure = 201;      // report_error or
+                                           //  report_critical_error called.
+}
+
+#endif
+
diff --git a/vendor/pdalboost/boost/current_function.hpp b/vendor/pdalboost/boost/current_function.hpp
new file mode 100644
index 0000000..f9fca8b
--- /dev/null
+++ b/vendor/pdalboost/boost/current_function.hpp
@@ -0,0 +1,71 @@
+#ifndef BOOST_CURRENT_FUNCTION_HPP_INCLUDED
+#define BOOST_CURRENT_FUNCTION_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  boost/current_function.hpp - BOOST_CURRENT_FUNCTION
+//
+//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  http://www.boost.org/libs/assert/current_function.html
+//
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+inline void current_function_helper()
+{
+
+#if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) || defined(__ghs__)
+
+# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__
+
+#elif defined(__DMC__) && (__DMC__ >= 0x810)
+
+# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__
+
+#elif defined(__FUNCSIG__)
+
+# define BOOST_CURRENT_FUNCTION __FUNCSIG__
+
+#elif (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 600)) || (defined(__IBMCPP__) && (__IBMCPP__ >= 500))
+
+# define BOOST_CURRENT_FUNCTION __FUNCTION__
+
+#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x550)
+
+# define BOOST_CURRENT_FUNCTION __FUNC__
+
+#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)
+
+# define BOOST_CURRENT_FUNCTION __func__
+
+#elif defined(__cplusplus) && (__cplusplus >= 201103)
+
+# define BOOST_CURRENT_FUNCTION __func__
+
+#else
+
+# define BOOST_CURRENT_FUNCTION "(unknown)"
+
+#endif
+
+}
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_CURRENT_FUNCTION_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/date_time/adjust_functors.hpp b/vendor/pdalboost/boost/date_time/adjust_functors.hpp
new file mode 100644
index 0000000..60434a4
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/adjust_functors.hpp
@@ -0,0 +1,178 @@
+#ifndef _DATE_TIME_ADJUST_FUNCTORS_HPP___
+#define _DATE_TIME_ADJUST_FUNCTORS_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include "boost/date_time/date.hpp"
+#include "boost/date_time/wrapping_int.hpp"
+
+namespace pdalboost {
+namespace date_time {
+  
+
+  //! Functor to iterate a fixed number of days
+  template<class date_type>
+  class day_functor 
+  {
+  public:
+    typedef typename date_type::duration_type duration_type;
+    day_functor(int f) : f_(f) {}
+    duration_type get_offset(const date_type& d) const 
+    {
+      // why is 'd' a parameter???
+      // fix compiler warnings
+      d.year();
+      return duration_type(f_);
+    }
+    duration_type get_neg_offset(const date_type& d) const 
+    {
+      // fix compiler warnings
+      d.year();
+      return duration_type(-f_);
+    }
+  private:
+    int f_;
+  };
+
+
+  //! Provides calculation to find next nth month given a date
+  /*! This adjustment function provides the logic for 'month-based'
+   *  advancement on a ymd based calendar.  The policy it uses 
+   *  to handle the non existant end of month days is to back
+   *  up to the last day of the month.  Also, if the starting
+   *  date is the last day of a month, this functor will attempt
+   *  to adjust to the end of the month.
+
+   */
+  template<class date_type>
+  class month_functor 
+  {
+  public:
+    typedef typename date_type::duration_type duration_type;
+    typedef typename date_type::calendar_type cal_type;
+    typedef typename cal_type::ymd_type ymd_type;
+    typedef typename cal_type::day_type day_type;
+
+    month_functor(int f) : f_(f), origDayOfMonth_(0) {}
+    duration_type get_offset(const date_type& d) const 
+    {
+      ymd_type ymd(d.year_month_day());
+      if (origDayOfMonth_ == 0) {
+        origDayOfMonth_ = ymd.day;
+        day_type endOfMonthDay(cal_type::end_of_month_day(ymd.year,ymd.month));
+        if (endOfMonthDay == ymd.day) {
+          origDayOfMonth_ = -1; //force the value to the end of month
+        }
+      }
+      typedef date_time::wrapping_int2<short,1,12> wrap_int2;
+      typedef typename wrap_int2::int_type int_type;
+      wrap_int2 wi(ymd.month);
+      //calc the year wrap around, add() returns 0 or 1 if wrapped
+      int_type year = wi.add(static_cast<int_type>(f_)); 
+      year = static_cast<int_type>(year + ymd.year); //calculate resulting year
+//       std::cout << "trace wi: " << wi.as_int() << std::endl;
+//       std::cout << "trace year: " << year << std::endl;
+      //find the last day for the new month
+      day_type resultingEndOfMonthDay(cal_type::end_of_month_day(year, wi.as_int()));
+      //original was the end of month -- force to last day of month
+      if (origDayOfMonth_ == -1) {
+        return date_type(year, wi.as_int(), resultingEndOfMonthDay) - d;
+      }
+      day_type dayOfMonth = origDayOfMonth_;
+      if (dayOfMonth > resultingEndOfMonthDay) {
+        dayOfMonth = resultingEndOfMonthDay;
+      }
+      return date_type(year, wi.as_int(), dayOfMonth) - d;
+    }
+    //! Returns a negative duration_type
+    duration_type get_neg_offset(const date_type& d) const 
+    {
+      ymd_type ymd(d.year_month_day());
+      if (origDayOfMonth_ == 0) {
+        origDayOfMonth_ = ymd.day;
+        day_type endOfMonthDay(cal_type::end_of_month_day(ymd.year,ymd.month));
+        if (endOfMonthDay == ymd.day) {
+          origDayOfMonth_ = -1; //force the value to the end of month
+        }
+      }
+      typedef date_time::wrapping_int2<short,1,12> wrap_int2;
+      typedef typename wrap_int2::int_type int_type;
+      wrap_int2 wi(ymd.month);
+      //calc the year wrap around, add() returns 0 or 1 if wrapped
+      int_type year = wi.subtract(static_cast<int_type>(f_)); 
+      year = static_cast<int_type>(year + ymd.year); //calculate resulting year
+      //find the last day for the new month
+      day_type resultingEndOfMonthDay(cal_type::end_of_month_day(year, wi.as_int()));
+      //original was the end of month -- force to last day of month
+      if (origDayOfMonth_ == -1) {
+        return date_type(year, wi.as_int(), resultingEndOfMonthDay) - d;
+      }
+      day_type dayOfMonth = origDayOfMonth_;
+      if (dayOfMonth > resultingEndOfMonthDay) {
+        dayOfMonth = resultingEndOfMonthDay;
+      }
+      return date_type(year, wi.as_int(), dayOfMonth) - d;
+    }
+  private:
+    int f_;
+    mutable short origDayOfMonth_;
+  };
+
+
+  //! Functor to iterate a over weeks
+  template<class date_type>
+  class week_functor 
+  {
+  public:
+    typedef typename date_type::duration_type duration_type;
+    typedef typename date_type::calendar_type calendar_type;
+    week_functor(int f) : f_(f) {}
+    duration_type get_offset(const date_type& d) const 
+    {
+      // why is 'd' a parameter???
+      // fix compiler warnings
+      d.year();
+      return duration_type(f_*calendar_type::days_in_week());
+    }
+    duration_type get_neg_offset(const date_type& d) const 
+    {
+      // fix compiler warnings
+      d.year();
+      return duration_type(-f_*calendar_type::days_in_week());
+    }
+  private:
+    int f_;
+  };
+
+  //! Functor to iterate by a year adjusting for leap years
+  template<class date_type>
+  class year_functor 
+  {
+  public:
+    //typedef typename date_type::year_type year_type;
+    typedef typename date_type::duration_type duration_type;
+    year_functor(int f) : _mf(f * 12) {}
+    duration_type get_offset(const date_type& d) const 
+    {
+      return _mf.get_offset(d);
+    }
+    duration_type get_neg_offset(const date_type& d) const 
+    {
+      return _mf.get_neg_offset(d);
+    }
+  private:
+    month_functor<date_type> _mf;
+  };
+
+  
+} }//namespace date_time
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/c_time.hpp b/vendor/pdalboost/boost/date_time/c_time.hpp
new file mode 100644
index 0000000..c52f747
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/c_time.hpp
@@ -0,0 +1,123 @@
+#ifndef DATE_TIME_C_TIME_HPP___
+#define DATE_TIME_C_TIME_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+/*! @file c_time.hpp
+  Provide workarounds related to the ctime header
+*/
+
+#include <ctime>
+#include <string> // to be able to convert from string literals to exceptions
+#include <stdexcept>
+#include <boost/throw_exception.hpp>
+#include <boost/date_time/compiler_config.hpp>
+
+//Work around libraries that don't put time_t and time in namespace std
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::time_t; using ::time; using ::localtime;
+                using ::tm;  using ::gmtime; }
+#endif // BOOST_NO_STDC_NAMESPACE
+
+//The following is used to support high precision time clocks
+#ifdef BOOST_HAS_GETTIMEOFDAY
+#include <sys/time.h>
+#endif
+
+#ifdef BOOST_HAS_FTIME
+#include <time.h>
+#endif
+
+namespace pdalboost {
+namespace date_time {
+  //! Provides a uniform interface to some 'ctime' functions
+  /*! Provides a uniform interface to some ctime functions and
+   * their '_r' counterparts. The '_r' functions require a pointer to a
+   * user created std::tm struct whereas the regular functions use a
+   * staticly created struct and return a pointer to that. These wrapper
+   * functions require the user to create a std::tm struct and send in a
+   * pointer to it. This struct may be used to store the resulting time.
+   * The returned pointer may or may not point to this struct, however,
+   * it will point to the result of the corresponding function.
+   * All functions do proper checking of the C function results and throw
+   * exceptions on error. Therefore the functions will never return NULL.
+   */
+  struct c_time {
+    public:
+#if defined(BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS)
+      //! requires a pointer to a user created std::tm struct
+      inline
+      static std::tm* localtime(const std::time_t* t, std::tm* result)
+      {
+        // localtime_r() not in namespace std???
+ 	#if defined(__VMS) && __INITIAL_POINTER_SIZE == 64
+ 	std::tm tmp;
+ 	if(!localtime_r(t,&tmp))
+            result = 0;
+	else
+            *result = tmp;	
+ 	#else
+        result = localtime_r(t, result);
+	#endif
+        if (!result)
+          pdalboost::throw_exception(std::runtime_error("could not convert calendar time to local time"));
+        return result;
+      }
+      //! requires a pointer to a user created std::tm struct
+      inline
+      static std::tm* gmtime(const std::time_t* t, std::tm* result)
+      {
+        // gmtime_r() not in namespace std???
+ 	#if defined(__VMS) && __INITIAL_POINTER_SIZE == 64
+ 	std::tm tmp;
+ 	if(!gmtime_r(t,&tmp))
+          result = 0;
+        else
+          *result = tmp;	
+	#else
+        result = gmtime_r(t, result);
+	#endif
+        if (!result)
+          pdalboost::throw_exception(std::runtime_error("could not convert calendar time to UTC time"));
+        return result;
+      }
+#else // BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS
+
+#if (defined(_MSC_VER) && (_MSC_VER >= 1400))
+#pragma warning(push) // preserve warning settings
+#pragma warning(disable : 4996) // disable depricated localtime/gmtime warning on vc8
+#endif // _MSC_VER >= 1400
+      //! requires a pointer to a user created std::tm struct
+      inline
+      static std::tm* localtime(const std::time_t* t, std::tm* result)
+      {
+        result = std::localtime(t);
+        if (!result)
+          pdalboost::throw_exception(std::runtime_error("could not convert calendar time to local time"));
+        return result;
+      }
+      //! requires a pointer to a user created std::tm struct
+      inline
+      static std::tm* gmtime(const std::time_t* t, std::tm* result)
+      {
+        result = std::gmtime(t);
+        if (!result)
+          pdalboost::throw_exception(std::runtime_error("could not convert calendar time to UTC time"));
+        return result;
+      }
+#if (defined(_MSC_VER) && (_MSC_VER >= 1400))
+#pragma warning(pop) // restore warnings to previous state
+#endif // _MSC_VER >= 1400
+
+#endif // BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS
+  };
+}} // namespaces
+
+#endif // DATE_TIME_C_TIME_HPP___
diff --git a/vendor/pdalboost/boost/date_time/compiler_config.hpp b/vendor/pdalboost/boost/date_time/compiler_config.hpp
new file mode 100644
index 0000000..e285f9b
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/compiler_config.hpp
@@ -0,0 +1,169 @@
+#ifndef DATE_TIME_COMPILER_CONFIG_HPP___
+#define DATE_TIME_COMPILER_CONFIG_HPP___
+
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include <cstdlib>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+// With boost release 1.33, date_time will be using a different,
+// more flexible, IO system. This new system is not compatible with
+// old compilers. The original date_time IO system remains for those
+// compilers. They must define this macro to use the legacy IO.
+//     (defined(__BORLANDC__) && (__BORLANDC__ <= 0x0581) ) )   &&
+ #if(  BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) ) \
+    || BOOST_WORKAROUND( __GNUC__, < 3)                         \
+    || (BOOST_WORKAROUND( _MSC_VER, <= 1300) )                  \
+    )                                                           \
+    && !defined(USE_DATE_TIME_PRE_1_33_FACET_IO)
+# define USE_DATE_TIME_PRE_1_33_FACET_IO
+#endif
+
+
+// This file performs some local compiler configurations
+
+#include <boost/date_time/locale_config.hpp> //set up locale configurations
+
+//Set up a configuration parameter for platforms that have 
+//GetTimeOfDay
+#if defined(BOOST_HAS_GETTIMEOFDAY) || defined(BOOST_HAS_FTIME)
+#define BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK
+#endif
+
+// To Force no default constructors for date & ptime, un-comment following
+//#define DATE_TIME_NO_DEFAULT_CONSTRUCTOR
+
+// Include extensions to date_duration - comment out to remove this feature
+#define BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES
+// these extensions are known to cause problems with gcc295
+#if defined(__GNUC__) && (__GNUC__ < 3)
+#undef BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES
+#endif
+
+#if (defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) || BOOST_WORKAROUND( __BORLANDC__,  BOOST_TESTED_AT(0x581) ) )
+#define BOOST_DATE_TIME_NO_MEMBER_INIT
+#endif
+
+// include these types before we try to re-define them
+#include <boost/cstdint.hpp>
+
+//Define INT64_C for compilers that don't have it
+#if (!defined(INT64_C))
+#define INT64_C(value)  int64_t(value)
+#endif
+
+
+/* Workaround for Borland iterator error. Error was "Cannot convert 'istream *' to 'wistream *' in function istream_iterator<>::istream_iterator() */
+#if defined(__BORLANDC__) && defined(BOOST_BCB_WITH_RW_LIB)
+#define BOOST_DATE_TIME_NO_WISTREAM_ITERATOR
+#endif
+
+
+// Borland v5.64 does not have the following in std namespace; v5.5.1 does
+#if defined(__BORLANDC__) && defined(BOOST_BCB_WITH_STLPORT)
+#include <locale>
+namespace std {
+  using stlport::tolower;
+  using stlport::ctype;
+  using stlport::use_facet;
+}
+#endif
+
+// workaround for errors associated with output for date classes 
+// modifications and input streaming for time classes. 
+// Compilers affected are:
+// gcc295, msvc (neither with STLPort), any borland
+// 
+#if (((defined(__GNUC__) && (__GNUC__ < 3)) || \
+      (defined(_MSC_VER) && (_MSC_VER < 1300)) ) && \
+      !defined(_STLP_OWN_IOSTREAMS) ) || \
+      BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) )
+#define BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS
+#endif
+
+// The macro marks up places where compiler complains for missing return statement or
+// uninitialized variables after calling to pdalboost::throw_exception.
+// BOOST_UNREACHABLE_RETURN doesn't work since even compilers that support
+// unreachable statements detection emit such warnings.
+#if defined(_MSC_VER)
+// Use special MSVC extension to markup unreachable code
+#  define BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(x) __assume(false)
+#elif !defined(BOOST_NO_UNREACHABLE_RETURN_DETECTION)
+// Call to a non-returning function should suppress the warning
+#  if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std {
+    using ::abort;
+}
+#  endif // defined(BOOST_NO_STDC_NAMESPACE)
+#  define BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(x) std::abort()
+#else
+// For other poor compilers the specified expression is compiled. Usually, this would be a return statement.
+#  define BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(x) x
+#endif
+
+/* The following handles the definition of the necessary macros
+ * for dll building on Win32 platforms.
+ * 
+ * For code that will be placed in the date_time .dll, 
+ * it must be properly prefixed with BOOST_DATE_TIME_DECL.
+ * The corresponding .cpp file must have BOOST_DATE_TIME_SOURCE
+ * defined before including its header. For examples see:
+ * greg_month.hpp & greg_month.cpp
+ * 
+ */
+
+// we need to import/export our code only if the user has specifically
+// asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost
+// libraries to be dynamically linked, or BOOST_DATE_TIME_DYN_LINK
+// if they want just this one to be dynamically liked:
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_DATE_TIME_DYN_LINK)
+    // export if this is our own source, otherwise import:
+#   ifdef BOOST_DATE_TIME_SOURCE
+#     define BOOST_DATE_TIME_DECL BOOST_SYMBOL_EXPORT
+#   else
+#     define BOOST_DATE_TIME_DECL BOOST_SYMBOL_IMPORT
+#   endif  // BOOST_DATE_TIME_SOURCE
+#endif  // DYN_LINK
+//
+// if BOOST_WHATEVER_DECL isn't defined yet define it now:
+#ifndef BOOST_DATE_TIME_DECL
+#  define BOOST_DATE_TIME_DECL
+#endif
+
+//
+// Automatically link to the correct build variant where possible. 
+// 
+#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_DATE_TIME_NO_LIB) && !defined(BOOST_DATE_TIME_SOURCE)
+//
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#define BOOST_LIB_NAME pdalboost_date_time
+//
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+//
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_DATE_TIME_DYN_LINK)
+#  define BOOST_DYN_LINK
+#endif
+//
+// And include the header that does the work:
+//
+#include <boost/config/auto_link.hpp>
+#endif  // auto-linking disabled
+
+#if defined(BOOST_HAS_THREADS) 
+#  if defined(_MSC_VER) || defined(__MWERKS__) || defined(__MINGW32__) ||  defined(__BORLANDC__)
+     //no reentrant posix functions (eg: localtime_r)
+#  elif (!defined(__hpux) || (defined(__hpux) && defined(_REENTRANT)))
+#   define BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS
+#  endif
+#endif
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/constrained_value.hpp b/vendor/pdalboost/boost/date_time/constrained_value.hpp
new file mode 100644
index 0000000..f12a82b
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/constrained_value.hpp
@@ -0,0 +1,121 @@
+#ifndef CONSTRAINED_VALUE_HPP___
+#define CONSTRAINED_VALUE_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland 
+ * $Date$
+ */
+
+#include <exception>
+#include <stdexcept>
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+
+namespace pdalboost {
+
+//! Namespace containing constrained_value template and types
+namespace CV {
+  //! Represent a min or max violation type
+  enum violation_enum {min_violation, max_violation};
+  
+  //! A template to specify a constrained basic value type
+  /*! This template provides a quick way to generate
+   *  an integer type with a constrained range.  The type
+   *  provides for the ability to specify the min, max, and
+   *  and error handling policy.
+   *  
+   *  <b>value policies</b>
+   *  A class that provides the range limits via the min and
+   *  max functions as well as a function on_error that 
+   *  determines how errors are handled.  A common strategy
+   *  would be to assert or throw and exception.  The on_error
+   *  is passed both the current value and the new value that
+   *  is in error.
+   *
+   */
+  template<class value_policies>
+  class constrained_value {
+  public:
+    typedef typename value_policies::value_type value_type;
+    //    typedef except_type exception_type;
+    constrained_value(value_type value) : value_((min)())
+    {
+      assign(value);
+    }
+    constrained_value& operator=(value_type v)
+    {
+      assign(v); 
+      return *this;
+    }
+    //! Return the max allowed value (traits method)
+    static value_type max BOOST_PREVENT_MACRO_SUBSTITUTION () {return (value_policies::max)();}
+    //! Return the min allowed value (traits method)
+    static value_type min BOOST_PREVENT_MACRO_SUBSTITUTION () {return (value_policies::min)();}
+    //! Coerce into the representation type
+    operator value_type() const {return value_;}
+  protected:
+    value_type value_;
+  private:
+    void assign(value_type value)
+    {
+      //adding 1 below gets rid of a compiler warning which occurs when the 
+      //min_value is 0 and the type is unsigned....
+      if (value+1 < (min)()+1) {
+        value_policies::on_error(value_, value, min_violation);
+        return;
+      }
+      if (value > (max)()) {
+        value_policies::on_error(value_, value, max_violation);
+        return;
+      }
+      value_ = value;
+    }
+};
+
+  //! Template to shortcut the constrained_value policy creation process
+  template<typename rep_type, rep_type min_value, 
+           rep_type max_value, class exception_type>
+  class simple_exception_policy
+  {
+    struct exception_wrapper : public exception_type
+    {
+      // In order to support throw_exception mechanism in the BOOST_NO_EXCEPTIONS mode,
+      // we'll have to provide a way to acquire std::exception from the exception being thrown.
+      // However, we cannot derive from it, since it would make it interceptable by this class,
+      // which might not be what the user wanted.
+      operator std::out_of_range () const
+      {
+        // TODO: Make the message more descriptive by using arguments to on_error
+        return std::out_of_range("constrained value boundary has been violated");
+      }
+    };
+
+    typedef typename mpl::if_<
+      is_base_of< std::exception, exception_type >,
+      exception_type,
+      exception_wrapper
+    >::type actual_exception_type;
+
+  public:
+    typedef rep_type value_type;
+    static rep_type min BOOST_PREVENT_MACRO_SUBSTITUTION () { return min_value; }
+    static rep_type max BOOST_PREVENT_MACRO_SUBSTITUTION () { return max_value; }
+    static void on_error(rep_type, rep_type, violation_enum)
+    {
+      pdalboost::throw_exception(actual_exception_type());
+    }
+  };
+
+
+
+} } //namespace CV
+
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/date.hpp b/vendor/pdalboost/boost/date_time/date.hpp
new file mode 100644
index 0000000..ff4388e
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/date.hpp
@@ -0,0 +1,208 @@
+#ifndef DATE_TIME_DATE_HPP___
+#define DATE_TIME_DATE_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include <boost/operators.hpp>
+#include <boost/date_time/year_month_day.hpp>
+#include <boost/date_time/special_defs.hpp>
+
+namespace pdalboost {
+namespace date_time {
+
+  //!Representation of timepoint at the one day level resolution.
+  /*!
+    The date template represents an interface shell for a date class
+    that is based on a year-month-day system such as the gregorian
+    or iso systems.  It provides basic operations to enable calculation
+    and comparisons.
+
+    <b>Theory</b>
+
+    This date representation fundamentally departs from the C tm struct
+    approach.  The goal for this type is to provide efficient date
+    operations (add, subtract) and storage (minimize space to represent)
+    in a concrete class.  Thus, the date uses a count internally to
+    represent a particular date.  The calendar parameter defines
+    the policies for converting the the year-month-day and internal
+    counted form here.  Applications that need to perform heavy
+    formatting of the same date repeatedly will perform better
+    by using the year-month-day representation.
+
+    Internally the date uses a day number to represent the date.
+    This is a monotonic time representation. This representation
+    allows for fast comparison as well as simplifying
+    the creation of writing numeric operations.  Essentially, the
+    internal day number is like adjusted julian day.  The adjustment
+    is determined by the Epoch date which is represented as day 1 of
+    the calendar.  Day 0 is reserved for negative infinity so that
+    any actual date is automatically greater than negative infinity.
+    When a date is constructed from a date or formatted for output,
+    the appropriate conversions are applied to create the year, month,
+    day representations.
+  */
+
+
+  template<class T, class calendar, class duration_type_>
+  class date : private
+       pdalboost::less_than_comparable<T
+     , pdalboost::equality_comparable<T
+    > >
+  {
+  public:
+    typedef T date_type;
+    typedef calendar calendar_type;
+    typedef typename calendar::date_traits_type traits_type;
+    typedef duration_type_ duration_type;
+    typedef typename calendar::year_type year_type;
+    typedef typename calendar::month_type month_type;
+    typedef typename calendar::day_type day_type;
+    typedef typename calendar::ymd_type ymd_type;
+    typedef typename calendar::date_rep_type date_rep_type;
+    typedef typename calendar::date_int_type date_int_type;
+    typedef typename calendar::day_of_week_type day_of_week_type;
+    date(year_type y, month_type m, day_type d)
+      : days_(calendar::day_number(ymd_type(y, m, d)))
+    {}
+    date(const ymd_type& ymd)
+      : days_(calendar::day_number(ymd))
+    {}
+    //let the compiler write copy, assignment, and destructor
+    year_type        year() const
+    {
+      ymd_type ymd = calendar::from_day_number(days_);
+      return ymd.year;
+    }
+    month_type       month() const
+    {
+      ymd_type ymd = calendar::from_day_number(days_);
+      return ymd.month;
+    }
+    day_type         day() const
+    {
+      ymd_type ymd = calendar::from_day_number(days_);
+      return ymd.day;
+    }
+    day_of_week_type day_of_week() const
+    {
+      ymd_type ymd = calendar::from_day_number(days_);
+      return calendar::day_of_week(ymd);
+    }
+    ymd_type         year_month_day() const
+    {
+      return calendar::from_day_number(days_);
+    }
+    bool operator<(const date_type& rhs)  const
+    {
+      return days_ < rhs.days_;
+    }
+    bool operator==(const date_type& rhs) const
+    {
+      return days_ == rhs.days_;
+    }
+    //! check to see if date is a special value
+    bool is_special()const
+    {
+      return(is_not_a_date() || is_infinity());
+    }
+    //! check to see if date is not a value
+    bool is_not_a_date()  const
+    {
+      return traits_type::is_not_a_number(days_);
+    }
+    //! check to see if date is one of the infinity values
+    bool is_infinity()  const
+    {
+      return traits_type::is_inf(days_);
+    }
+    //! check to see if date is greater than all possible dates
+    bool is_pos_infinity()  const
+    {
+      return traits_type::is_pos_inf(days_);
+    }
+    //! check to see if date is greater than all possible dates
+    bool is_neg_infinity()  const
+    {
+      return traits_type::is_neg_inf(days_);
+    }
+    //! return as a special value or a not_special if a normal date
+    special_values as_special()  const
+    {
+      return traits_type::to_special(days_);
+    }
+    duration_type operator-(const date_type& d) const
+    {
+      if (!this->is_special() && !d.is_special())
+      {
+        // The duration underlying type may be wider than the date underlying type.
+        // Thus we calculate the difference in terms of two durations from some common fixed base date.
+        typedef typename duration_type::duration_rep_type duration_rep_type;
+        return duration_type(static_cast< duration_rep_type >(days_) - static_cast< duration_rep_type >(d.days_));
+      }
+      else
+      {
+        // In this case the difference will be a special value, too
+        date_rep_type val = date_rep_type(days_) - date_rep_type(d.days_);
+        return duration_type(val.as_special());
+      }
+    }
+
+    date_type operator-(const duration_type& dd) const
+    {
+      if(dd.is_special())
+      {
+        return date_type(date_rep_type(days_) - dd.get_rep());
+      }
+      return date_type(date_rep_type(days_) - static_cast<date_int_type>(dd.days()));
+    }
+    date_type operator-=(const duration_type& dd)
+    {
+      *this = *this - dd;
+      return date_type(days_);
+    }
+    date_rep_type day_count() const
+    {
+      return days_;
+    }
+    //allow internal access from operators
+    date_type operator+(const duration_type& dd) const
+    {
+      if(dd.is_special())
+      {
+        return date_type(date_rep_type(days_) + dd.get_rep());
+      }
+      return date_type(date_rep_type(days_) + static_cast<date_int_type>(dd.days()));
+    }
+    date_type operator+=(const duration_type& dd)
+    {
+      *this = *this + dd;
+      return date_type(days_);
+    }
+
+    //see reference
+  protected:
+    /*! This is a private constructor which allows for the creation of new
+      dates.  It is not exposed to users since that would require class
+      users to understand the inner workings of the date class.
+    */
+    explicit date(date_int_type days) : days_(days) {}
+    explicit date(date_rep_type days) : days_(days.as_number()) {}
+    date_int_type days_;
+
+  };
+
+
+
+
+} } // namespace date_time
+
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/date_clock_device.hpp b/vendor/pdalboost/boost/date_time/date_clock_device.hpp
new file mode 100644
index 0000000..3590a1f
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/date_clock_device.hpp
@@ -0,0 +1,77 @@
+#ifndef DATE_CLOCK_DEVICE_HPP___
+#define DATE_CLOCK_DEVICE_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include "boost/date_time/c_time.hpp"
+
+
+namespace pdalboost {
+namespace date_time {
+
+  //! A clock providing day level services based on C time_t capabilities
+  /*! This clock uses Posix interfaces as its implementation and hence
+   *  uses the timezone settings of the operating system.  Incorrect
+   *  user settings will result in incorrect results for the calls
+   *  to local_day.
+   */
+  template<class date_type> 
+  class day_clock
+  {
+  public:
+    typedef typename date_type::ymd_type ymd_type;
+    //! Get the local day as a date type
+    static date_type local_day() 
+    {
+      return date_type(local_day_ymd());
+    }
+    //! Get the local day as a ymd_type
+    static typename date_type::ymd_type local_day_ymd() 
+    {
+      ::std::tm result;
+      ::std::tm* curr = get_local_time(result);
+      return ymd_type(static_cast<unsigned short>(curr->tm_year + 1900),
+                      static_cast<unsigned short>(curr->tm_mon + 1),
+                      static_cast<unsigned short>(curr->tm_mday));
+    }
+    //! Get the current day in universal date as a ymd_type
+    static typename date_type::ymd_type universal_day_ymd() 
+    {
+      ::std::tm result;
+      ::std::tm* curr = get_universal_time(result);
+      return ymd_type(static_cast<unsigned short>(curr->tm_year + 1900),
+                      static_cast<unsigned short>(curr->tm_mon + 1),
+                      static_cast<unsigned short>(curr->tm_mday));
+    }
+    //! Get the UTC day as a date type
+    static date_type universal_day() 
+    {
+      return date_type(universal_day_ymd());
+    }
+
+  private:
+    static ::std::tm* get_local_time(std::tm& result) 
+    {
+      ::std::time_t t;
+      ::std::time(&t);
+      return c_time::localtime(&t, &result);
+    }
+    static ::std::tm* get_universal_time(std::tm& result) 
+    {
+      ::std::time_t t;
+      ::std::time(&t);
+      return c_time::gmtime(&t, &result);
+    }
+
+  };
+
+} } //namespace date_time
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/date_defs.hpp b/vendor/pdalboost/boost/date_time/date_defs.hpp
new file mode 100644
index 0000000..e9792e2
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/date_defs.hpp
@@ -0,0 +1,26 @@
+#ifndef DATE_TIME_DATE_DEFS_HPP
+#define DATE_TIME_DATE_DEFS_HPP
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland
+ * $Date$
+ */
+
+
+namespace pdalboost {
+namespace date_time {
+
+  //! An enumeration of weekday names
+  enum weekdays {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
+
+  //! Simple enum to allow for nice programming with Jan, Feb, etc
+  enum months_of_year {Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec,NotAMonth,NumMonths};
+
+} } //namespace date_time
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/date_duration.hpp b/vendor/pdalboost/boost/date_time/date_duration.hpp
new file mode 100644
index 0000000..70bf3de
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/date_duration.hpp
@@ -0,0 +1,146 @@
+#ifndef DATE_TIME_DATE_DURATION__
+#define DATE_TIME_DATE_DURATION__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+#include <boost/operators.hpp>
+#include <boost/date_time/special_defs.hpp>
+
+namespace pdalboost {
+namespace date_time {
+
+
+  //! Duration type with date level resolution
+  template<class duration_rep_traits>
+  class date_duration : private
+              pdalboost::less_than_comparable1< date_duration< duration_rep_traits >
+            , pdalboost::equality_comparable1< date_duration< duration_rep_traits >
+            , pdalboost::addable1< date_duration< duration_rep_traits >
+            , pdalboost::subtractable1< date_duration< duration_rep_traits >
+            , pdalboost::dividable2< date_duration< duration_rep_traits >, int
+            > > > > >
+  {
+  public:
+    typedef typename duration_rep_traits::int_type duration_rep_type;
+    typedef typename duration_rep_traits::impl_type duration_rep;
+
+    //! Construct from a day count
+    explicit date_duration(duration_rep day_count) : days_(day_count) {}
+
+    /*! construct from special_values - only works when
+     * instantiated with duration_traits_adapted */
+    date_duration(special_values sv) :
+            days_(duration_rep::from_special(sv))
+    {}
+
+    // copy constructor required for addable<> & subtractable<>
+    //! Construct from another date_duration (Copy Constructor)
+    date_duration(const date_duration<duration_rep_traits>& other) :
+            days_(other.days_)
+    {}
+
+    //! returns days_ as it's instantiated type - used for streaming
+    duration_rep get_rep()const
+    {
+        return days_;
+    }
+    bool is_special()const
+    {
+        return days_.is_special();
+    }
+    //! returns days as value, not object.
+    duration_rep_type days() const
+    {
+        return duration_rep_traits::as_number(days_);
+    }
+    //! Returns the smallest duration -- used by to calculate 'end'
+    static date_duration unit()
+    {
+        return date_duration<duration_rep_traits>(1);
+    }
+    //! Equality
+    bool operator==(const date_duration& rhs) const
+    {
+        return days_ == rhs.days_;
+    }
+    //! Less
+    bool operator<(const date_duration& rhs) const
+    {
+        return days_ < rhs.days_;
+    }
+
+    /* For shortcut operators (+=, -=, etc) simply using
+     * "days_ += days_" may not work. If instantiated with
+     * an int_adapter, shortcut operators are not present,
+     * so this will not compile */
+
+    //! Subtract another duration -- result is signed
+    date_duration& operator-=(const date_duration& rhs)
+    {
+        //days_ -= rhs.days_;
+        days_ = days_ - rhs.days_;
+        return *this;
+    }
+    //! Add a duration -- result is signed
+    date_duration& operator+=(const date_duration& rhs)
+    {
+        days_ = days_ + rhs.days_;
+        return *this;
+    }
+
+    //! unary- Allows for dd = -date_duration(2); -> dd == -2
+    date_duration operator-() const
+    {
+        return date_duration<duration_rep_traits>(get_rep() * (-1));
+    }
+    //! Division operations on a duration with an integer.
+    date_duration& operator/=(int divisor)
+    {
+        days_ = days_ / divisor;
+        return *this;
+    }
+
+    //! return sign information
+    bool is_negative() const
+    {
+        return days_ < 0;
+    }
+
+  private:
+    duration_rep days_;
+  };
+
+
+  /*! Struct for instantiating date_duration with <b>NO</b> special values
+   * functionality. Allows for transparent implementation of either
+   * date_duration<long> or date_duration<int_adapter<long> > */
+  struct duration_traits_long
+  {
+    typedef long int_type;
+    typedef long impl_type;
+    static int_type as_number(impl_type i) { return i; }
+  };
+
+  /*! Struct for instantiating date_duration <b>WITH</b> special values
+   * functionality. Allows for transparent implementation of either
+   * date_duration<long> or date_duration<int_adapter<long> > */
+  struct duration_traits_adapted
+  {
+    typedef long int_type;
+    typedef pdalboost::date_time::int_adapter<long> impl_type;
+    static int_type as_number(impl_type i) { return i.as_number(); }
+  };
+
+
+} } //namspace date_time
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/date_duration_types.hpp b/vendor/pdalboost/boost/date_time/date_duration_types.hpp
new file mode 100644
index 0000000..639748a
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/date_duration_types.hpp
@@ -0,0 +1,269 @@
+#ifndef DATE_DURATION_TYPES_HPP___
+#define DATE_DURATION_TYPES_HPP___
+
+/* Copyright (c) 2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0. 
+ * (See accompanying file LICENSE_1_0.txt or 
+ * http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+                                                                                
+#include <boost/date_time/int_adapter.hpp>
+#include <boost/date_time/special_defs.hpp>
+#include <boost/date_time/date_duration.hpp>
+
+namespace pdalboost {
+namespace date_time {
+
+
+  //! Additional duration type that represents a number of n*7 days
+  template <class duration_config>
+  class weeks_duration : public date_duration<duration_config> {
+  public:
+    weeks_duration(typename duration_config::impl_type w) 
+      : date_duration<duration_config>(w * 7) {}
+    weeks_duration(special_values sv) 
+      : date_duration<duration_config>(sv) {}
+  };
+
+  // predeclare
+  template<class t>
+  class years_duration;
+
+  //! additional duration type that represents a logical month
+  /*! A logical month enables things like: "date(2002,Mar,2) + months(2) -> 
+   * 2002-May2". If the date is a last day-of-the-month, the result will 
+   * also be a last-day-of-the-month.
+   */
+  template<class base_config>
+  class months_duration 
+  {
+    private:
+      typedef typename base_config::int_rep int_rep;
+      typedef typename int_rep::int_type int_type;
+      typedef typename base_config::date_type date_type;
+      typedef typename date_type::duration_type duration_type;
+      typedef typename base_config::month_adjustor_type month_adjustor_type;
+      typedef months_duration<base_config> months_type;
+      typedef years_duration<base_config> years_type;
+    public:
+      months_duration(int_rep num) : _m(num) {}
+      months_duration(special_values sv) : _m(sv) 
+      {
+        _m = int_rep::from_special(sv);
+      }
+      int_rep number_of_months() const { return _m; }
+      //! returns a negative duration
+      duration_type get_neg_offset(const date_type& d) const
+      {
+        month_adjustor_type m_adj(_m.as_number());
+        return duration_type(m_adj.get_neg_offset(d));
+      }
+      duration_type get_offset(const date_type& d) const
+      {
+        month_adjustor_type m_adj(_m.as_number());
+        return duration_type(m_adj.get_offset(d));
+      }
+      bool operator==(const months_type& rhs) const
+      {
+        return(_m == rhs._m);
+      }
+      bool operator!=(const months_type& rhs) const
+      {
+        return(_m != rhs._m);
+      }
+      months_type operator+(const months_type& rhs)const
+      {
+        return months_type(_m + rhs._m);
+      }
+      months_type& operator+=(const months_type& rhs)
+      {
+        _m = _m + rhs._m;
+        return *this;
+      }
+      months_type operator-(const months_type& rhs)const
+      {
+        return months_type(_m - rhs._m);
+      }
+      months_type& operator-=(const months_type& rhs)
+      {
+        _m = _m - rhs._m;
+        return *this;
+      }
+      months_type operator*(const int_type rhs)const
+      {
+        return months_type(_m * rhs);
+      }
+      months_type& operator*=(const int_type rhs)
+      {
+        _m = _m * rhs;
+        return *this;
+      }
+      months_type operator/(const int_type rhs)const
+      {
+        return months_type(_m / rhs);
+      }
+      months_type& operator/=(const int_type rhs)
+      {
+        _m = _m / rhs;
+        return *this;
+      }
+      months_type operator+(const years_type& y)const
+      {
+        return months_type(y.number_of_years() * 12 + _m);
+      }
+      months_type& operator+=(const years_type& y)
+      {
+        _m = y.number_of_years() * 12 + _m;
+        return *this;
+      }
+      months_type operator-(const years_type& y) const
+      {
+        return months_type(_m - y.number_of_years() * 12);
+      }
+      months_type& operator-=(const years_type& y)
+      {
+        _m = _m - y.number_of_years() * 12;
+        return *this;
+      }
+
+      //
+      friend date_type operator+(const date_type& d, const months_type& m)
+      {
+        return d + m.get_offset(d);
+      }
+      friend date_type operator+=(date_type& d, const months_type& m)
+      {
+        return d += m.get_offset(d);
+      }
+      friend date_type operator-(const date_type& d, const months_type& m)
+      {
+        // get_neg_offset returns a negative duration, so we add
+        return d + m.get_neg_offset(d);
+      }
+      friend date_type operator-=(date_type& d, const months_type& m)
+      {
+        // get_neg_offset returns a negative duration, so we add
+        return d += m.get_neg_offset(d);
+      }
+        
+    private:
+      int_rep _m;
+  };
+
+  //! additional duration type that represents a logical year
+  /*! A logical year enables things like: "date(2002,Mar,2) + years(2) -> 
+   * 2004-Mar-2". If the date is a last day-of-the-month, the result will 
+   * also be a last-day-of-the-month (ie date(2001-Feb-28) + years(3) ->
+   * 2004-Feb-29).
+   */
+  template<class base_config>
+  class years_duration 
+  {
+    private:
+      typedef typename base_config::int_rep int_rep;
+      typedef typename int_rep::int_type int_type;
+      typedef typename base_config::date_type date_type;
+      typedef typename date_type::duration_type duration_type;
+      typedef typename base_config::month_adjustor_type month_adjustor_type;
+      typedef years_duration<base_config> years_type;
+      typedef months_duration<base_config> months_type;
+    public:
+      years_duration(int_rep num) : _y(num) {}
+      years_duration(special_values sv) : _y(sv) 
+      {
+        _y = int_rep::from_special(sv);
+      }
+      int_rep number_of_years() const { return _y; }
+      //! returns a negative duration
+      duration_type get_neg_offset(const date_type& d) const
+      {
+        month_adjustor_type m_adj(_y.as_number() * 12);
+        return duration_type(m_adj.get_neg_offset(d));
+      }
+      duration_type get_offset(const date_type& d) const
+      {
+        month_adjustor_type m_adj(_y.as_number() * 12);
+        return duration_type(m_adj.get_offset(d));
+      }
+      bool operator==(const years_type& rhs) const
+      {
+        return(_y == rhs._y);
+      }
+      bool operator!=(const years_type& rhs) const
+      {
+        return(_y != rhs._y);
+      }
+      years_type operator+(const years_type& rhs)const
+      {
+        return years_type(_y + rhs._y);
+      }
+      years_type& operator+=(const years_type& rhs)
+      {
+        _y = _y + rhs._y;
+        return *this;
+      }
+      years_type operator-(const years_type& rhs)const
+      {
+        return years_type(_y - rhs._y);
+      }
+      years_type& operator-=(const years_type& rhs)
+      {
+        _y = _y - rhs._y;
+        return *this;
+      }
+      years_type operator*(const int_type rhs)const
+      {
+        return years_type(_y * rhs);
+      }
+      years_type& operator*=(const int_type rhs)
+      {
+        _y = _y * rhs;
+        return *this;
+      }
+      years_type operator/(const int_type rhs)const
+      {
+        return years_type(_y / rhs);
+      }
+      years_type& operator/=(const int_type rhs)
+      {
+        _y = _y / rhs;
+        return *this;
+      }
+      months_type operator+(const months_type& m) const
+      {
+        return(months_type(_y * 12 + m.number_of_months()));
+      }
+      months_type operator-(const months_type& m) const
+      {
+        return(months_type(_y * 12 - m.number_of_months()));
+      }
+
+      //
+      friend date_type operator+(const date_type& d, const years_type& y)
+      {
+        return d + y.get_offset(d);
+      }
+      friend date_type operator+=(date_type& d, const years_type& y)
+      {
+        return d += y.get_offset(d);
+      }
+      friend date_type operator-(const date_type& d, const years_type& y)
+      {
+        // get_neg_offset returns a negative duration, so we add
+        return d + y.get_neg_offset(d);
+      }
+      friend date_type operator-=(date_type& d, const years_type& y)
+      {
+        // get_neg_offset returns a negative duration, so we add
+        return d += y.get_neg_offset(d);
+      }
+
+    private:
+      int_rep _y;
+  };
+
+}} // namespace pdalboost::date_time
+
+#endif // DATE_DURATION_TYPES_HPP___
diff --git a/vendor/pdalboost/boost/date_time/date_format_simple.hpp b/vendor/pdalboost/boost/date_time/date_format_simple.hpp
new file mode 100644
index 0000000..5a68f34
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/date_format_simple.hpp
@@ -0,0 +1,159 @@
+#ifndef DATE_TIME_SIMPLE_FORMAT_HPP___
+#define DATE_TIME_SIMPLE_FORMAT_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include "boost/date_time/parse_format_base.hpp"
+
+namespace pdalboost {
+namespace date_time {
+
+//! Class to provide simple basic formatting rules
+template<class charT>
+class simple_format {
+public:
+
+  //! String used printed is date is invalid
+  static const charT* not_a_date()
+  {
+    return "not-a-date-time";
+  }
+  //! String used to for positive infinity value
+  static const charT* pos_infinity()
+  {  
+    return "+infinity";
+  }
+  //! String used to for positive infinity value
+  static const charT* neg_infinity()
+  {
+    return "-infinity";
+  }
+  //! Describe month format
+  static month_format_spec month_format()
+  {
+    return month_as_short_string;
+  }
+  static ymd_order_spec date_order()
+  {
+    return ymd_order_iso; //YYYY-MM-DD
+  }
+  //! This format uses '-' to separate date elements
+  static bool has_date_sep_chars()
+  {
+    return true;
+  }
+  //! Char to sep?
+  static charT year_sep_char()
+  {
+    return '-';
+  }
+  //! char between year-month
+  static charT month_sep_char()
+  {
+    return '-';
+  }
+  //! Char to separate month-day
+  static charT day_sep_char()
+  {
+    return '-';
+  }
+  //! char between date-hours
+  static charT hour_sep_char()
+  {
+    return ' ';
+  }
+  //! char between hour and minute
+  static charT minute_sep_char()
+  {
+    return ':';
+  }
+  //! char for second
+  static charT second_sep_char()
+  {
+    return ':';
+  }
+
+};
+
+#ifndef BOOST_NO_STD_WSTRING
+
+//! Specialization of formmating rules for wchar_t
+template<>
+class simple_format<wchar_t> {
+public:
+
+  //! String used printed is date is invalid
+  static const wchar_t* not_a_date()
+  {
+    return L"not-a-date-time";
+  }
+  //! String used to for positive infinity value
+  static const wchar_t* pos_infinity()
+  {   
+    return L"+infinity";
+  }
+  //! String used to for positive infinity value
+  static const wchar_t* neg_infinity()
+  {
+    return L"-infinity";
+  }
+  //! Describe month format
+  static month_format_spec month_format()
+  {
+    return month_as_short_string;
+  }
+  static ymd_order_spec date_order()
+  {
+    return ymd_order_iso; //YYYY-MM-DD
+  }
+  //! This format uses '-' to separate date elements
+  static bool has_date_sep_chars()
+  {
+    return true;
+  }
+  //! Char to sep?
+  static wchar_t year_sep_char()
+  {
+    return '-';
+  }
+  //! char between year-month
+  static wchar_t month_sep_char()
+  {
+    return '-';
+  }
+  //! Char to separate month-day
+  static wchar_t day_sep_char()
+  {
+    return '-';
+  }
+  //! char between date-hours
+  static wchar_t hour_sep_char()
+  {
+    return ' ';
+  }
+  //! char between hour and minute
+  static wchar_t minute_sep_char()
+  {
+    return ':';
+  }
+  //! char for second
+  static wchar_t second_sep_char()
+  {
+    return ':';
+  }
+
+};
+
+#endif // BOOST_NO_STD_WSTRING
+} } //namespace date_time
+
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/date_formatting.hpp b/vendor/pdalboost/boost/date_time/date_formatting.hpp
new file mode 100644
index 0000000..8d59846
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/date_formatting.hpp
@@ -0,0 +1,135 @@
+#ifndef DATE_TIME_DATE_FORMATTING_HPP___
+#define DATE_TIME_DATE_FORMATTING_HPP___
+
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include "boost/date_time/iso_format.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#include <string>
+#include <sstream>
+#include <iomanip>
+
+/* NOTE: "formatter" code for older compilers, ones that define 
+ * BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS, is located in  
+ * date_formatting_limited.hpp
+ */
+
+namespace pdalboost {
+namespace date_time {
+
+  //! Formats a month as as string into an ostream
+  template<class month_type, class format_type, class charT=char>
+  class month_formatter
+  {
+    typedef std::basic_ostream<charT> ostream_type;
+  public:
+    //! Formats a month as as string into an ostream
+    /*! This function demands that month_type provide
+     *  functions for converting to short and long strings
+     *  if that capability is used.
+     */
+    static ostream_type& format_month(const month_type& month,
+                                      ostream_type &os)
+    {
+      switch (format_type::month_format()) 
+      {
+        case month_as_short_string: 
+        { 
+          os << month.as_short_string(); 
+          break;
+        }
+        case month_as_long_string: 
+        { 
+          os << month.as_long_string(); 
+          break;
+        }
+        case month_as_integer: 
+        { 
+          os << std::setw(2) << std::setfill(os.widen('0')) << month.as_number();
+          break;
+        }
+        default:
+          break;
+          
+      }
+      return os;
+    } // format_month
+  };
+
+
+  //! Convert ymd to a standard string formatting policies
+  template<class ymd_type, class format_type, class charT=char>
+  class ymd_formatter
+  {
+  public:
+    //! Convert ymd to a standard string formatting policies
+    /*! This is standard code for handling date formatting with
+     *  year-month-day based date information.  This function 
+     *  uses the format_type to control whether the string will
+     *  contain separator characters, and if so what the character
+     *  will be.  In addtion, it can format the month as either
+     *  an integer or a string as controled by the formatting 
+     *  policy
+     */ 
+    static std::basic_string<charT> ymd_to_string(ymd_type ymd)
+    {
+      typedef typename ymd_type::month_type month_type;
+      std::basic_ostringstream<charT> ss;
+
+      // Temporarily switch to classic locale to prevent possible formatting
+      // of year with comma or other character (for example 2,008).
+      ss.imbue(std::locale::classic());
+      ss << ymd.year;
+      ss.imbue(std::locale());
+
+      if (format_type::has_date_sep_chars()) {
+        ss << format_type::month_sep_char();
+      }
+      //this name is a bit ugly, oh well....
+      month_formatter<month_type,format_type,charT>::format_month(ymd.month, ss);
+      if (format_type::has_date_sep_chars()) {
+        ss << format_type::day_sep_char();
+      }
+      ss  << std::setw(2) << std::setfill(ss.widen('0')) 
+          << ymd.day;
+      return ss.str();
+    }
+  };
+
+
+  //! Convert a date to string using format policies
+  template<class date_type, class format_type, class charT=char>
+  class date_formatter
+  {
+  public:
+    typedef std::basic_string<charT> string_type;
+    //! Convert to a date to standard string using format policies
+    static string_type date_to_string(date_type d)
+    {
+      typedef typename date_type::ymd_type ymd_type;
+      if (d.is_not_a_date()) {
+        return string_type(format_type::not_a_date());
+      }
+      if (d.is_neg_infinity()) {
+        return string_type(format_type::neg_infinity());
+      }
+      if (d.is_pos_infinity()) {
+        return string_type(format_type::pos_infinity());
+      }
+      ymd_type ymd = d.year_month_day();
+      return ymd_formatter<ymd_type, format_type, charT>::ymd_to_string(ymd);
+    }    
+  };
+
+
+} } //namespace date_time
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/date_formatting_limited.hpp b/vendor/pdalboost/boost/date_time/date_formatting_limited.hpp
new file mode 100644
index 0000000..da715a8
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/date_formatting_limited.hpp
@@ -0,0 +1,121 @@
+#ifndef DATE_TIME_DATE_FORMATTING_LIMITED_HPP___
+#define DATE_TIME_DATE_FORMATTING_LIMITED_HPP___
+
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include "boost/date_time/iso_format.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#include <string>
+#include <sstream>
+#include <iomanip>
+
+
+namespace pdalboost {
+namespace date_time {
+
+  //! Formats a month as as string into an ostream
+  template<class month_type, class format_type>
+  class month_formatter
+  {
+  public:
+    //! Formats a month as as string into an ostream
+    /*! This function demands that month_type provide
+     *  functions for converting to short and long strings
+     *  if that capability is used.
+     */
+    static std::ostream& format_month(const month_type& month,
+                                      std::ostream& os)
+    {
+      switch (format_type::month_format()) 
+      {
+        case month_as_short_string: 
+        { 
+          os << month.as_short_string(); 
+          break;
+        }
+        case month_as_long_string: 
+        { 
+          os << month.as_long_string(); 
+          break;
+        }
+        case month_as_integer: 
+        { 
+          os << std::setw(2) << std::setfill('0') << month.as_number();
+          break;
+        }
+     
+      }
+      return os;
+    } // format_month
+  };
+
+
+  //! Convert ymd to a standard string formatting policies
+  template<class ymd_type, class format_type>
+  class ymd_formatter
+  {
+  public:
+    //! Convert ymd to a standard string formatting policies
+    /*! This is standard code for handling date formatting with
+     *  year-month-day based date information.  This function 
+     *  uses the format_type to control whether the string will
+     *  contain separator characters, and if so what the character
+     *  will be.  In addtion, it can format the month as either
+     *  an integer or a string as controled by the formatting 
+     *  policy
+     */ 
+    static std::string ymd_to_string(ymd_type ymd)
+    {
+      typedef typename ymd_type::month_type month_type;
+      std::ostringstream ss;
+      ss << ymd.year;
+      if (format_type::has_date_sep_chars()) {
+        ss << format_type::month_sep_char();
+      }
+      //this name is a bit ugly, oh well....
+      month_formatter<month_type,format_type>::format_month(ymd.month, ss);
+      if (format_type::has_date_sep_chars()) {
+        ss << format_type::day_sep_char();
+      }
+      ss  << std::setw(2) << std::setfill('0') 
+          << ymd.day;
+      return ss.str();
+    }
+  };
+
+
+  //! Convert a date to string using format policies
+  template<class date_type, class format_type>
+  class date_formatter
+  {
+  public:
+    //! Convert to a date to standard string using format policies
+    static std::string date_to_string(date_type d)
+    {
+      typedef typename date_type::ymd_type ymd_type;
+      if (d.is_not_a_date()) {
+        return format_type::not_a_date();
+      }
+      if (d.is_neg_infinity()) {
+        return format_type::neg_infinity();
+      }
+      if (d.is_pos_infinity()) {
+        return format_type::pos_infinity();
+      }
+      ymd_type ymd = d.year_month_day();
+      return ymd_formatter<ymd_type, format_type>::ymd_to_string(ymd);
+    }    
+  };
+
+
+} } //namespace date_time
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/date_formatting_locales.hpp b/vendor/pdalboost/boost/date_time/date_formatting_locales.hpp
new file mode 100644
index 0000000..7de1a53
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/date_formatting_locales.hpp
@@ -0,0 +1,233 @@
+#ifndef DATE_TIME_DATE_FORMATTING_LOCALES_HPP___
+#define DATE_TIME_DATE_FORMATTING_LOCALES_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+#include "boost/date_time/locale_config.hpp" // set BOOST_DATE_TIME_NO_LOCALE
+
+#ifndef BOOST_DATE_TIME_NO_LOCALE
+
+#include "boost/date_time/iso_format.hpp"
+#include "boost/date_time/date_names_put.hpp"
+#include "boost/date_time/parse_format_base.hpp"
+//#include <string>
+#include <sstream>
+#include <iomanip>
+
+
+namespace pdalboost {
+namespace date_time {
+
+  //! Formats a month as as string into an ostream
+  template<class facet_type,
+           class charT = char>
+  class ostream_month_formatter
+  {
+  public:
+    typedef typename facet_type::month_type month_type;
+    typedef std::basic_ostream<charT> ostream_type;
+
+    //! Formats a month as as string into an output iterator
+    static void format_month(const month_type& month,
+                             ostream_type& os,
+                             const facet_type& f)
+    {
+
+      switch (f.month_format())
+      {
+        case month_as_short_string:
+        {
+          std::ostreambuf_iterator<charT> oitr(os);
+          f.put_month_short(oitr, month.as_enum());
+          break;
+        }
+        case month_as_long_string:
+        {
+          std::ostreambuf_iterator<charT> oitr(os);
+          f.put_month_long(oitr, month.as_enum());
+          break;
+        }
+        case month_as_integer:
+        {
+          charT fill_char = '0';
+          os << std::setw(2) << std::setfill(fill_char) << month.as_number();
+          break;
+        }
+
+      }
+    } // format_month
+
+  };
+
+
+  //! Formats a weekday
+  template<class weekday_type,
+           class facet_type,
+           class charT = char>
+  class ostream_weekday_formatter
+  {
+  public:
+    typedef typename facet_type::month_type month_type;
+    typedef std::basic_ostream<charT> ostream_type;
+
+    //! Formats a month as as string into an output iterator
+    static void format_weekday(const weekday_type& wd,
+                               ostream_type& os,
+                               const facet_type& f,
+                               bool  as_long_string)
+    {
+
+      std::ostreambuf_iterator<charT> oitr(os);
+      if (as_long_string) {
+        f.put_weekday_long(oitr, wd.as_enum());
+      }
+      else {
+        f.put_weekday_short(oitr, wd.as_enum());
+      }
+
+    } // format_weekday
+
+  };
+
+
+  //! Convert ymd to a standard string formatting policies
+  template<class ymd_type,
+           class facet_type,
+           class charT = char>
+  class ostream_ymd_formatter
+  {
+  public:
+    typedef typename ymd_type::month_type month_type;
+    typedef ostream_month_formatter<facet_type, charT> month_formatter_type;
+    typedef std::basic_ostream<charT> ostream_type;
+    typedef std::basic_string<charT> foo_type;
+
+    //! Convert ymd to a standard string formatting policies
+    /*! This is standard code for handling date formatting with
+     *  year-month-day based date information.  This function
+     *  uses the format_type to control whether the string will
+     *  contain separator characters, and if so what the character
+     *  will be.  In addtion, it can format the month as either
+     *  an integer or a string as controled by the formatting
+     *  policy
+     */
+    //     static string_type ymd_to_string(ymd_type ymd)
+//     {
+//       std::ostringstream ss;
+//       facet_type dnp;
+//       ymd_put(ymd, ss, dnp);
+//       return ss.str();
+//       }
+
+
+    // Put ymd to ostream -- part of ostream refactor
+    static void ymd_put(ymd_type ymd,
+                        ostream_type& os,
+                        const facet_type& f)
+    {
+      std::ostreambuf_iterator<charT> oitr(os);
+      charT fill_char = '0';
+      switch (f.date_order()) {
+        case ymd_order_iso: {
+          os << ymd.year;
+          if (f.has_date_sep_chars()) {
+            f.month_sep_char(oitr);
+          }
+          month_formatter_type::format_month(ymd.month, os, f);
+          if (f.has_date_sep_chars()) {
+            f.day_sep_char(oitr);
+          }
+          os  << std::setw(2) << std::setfill(fill_char)
+              << ymd.day;
+          break;
+        }
+        case ymd_order_us: {
+          month_formatter_type::format_month(ymd.month, os, f);
+          if (f.has_date_sep_chars()) {
+          f.day_sep_char(oitr);
+          }
+          os  << std::setw(2) << std::setfill(fill_char)
+            << ymd.day;
+          if (f.has_date_sep_chars()) {
+            f.month_sep_char(oitr);
+          }
+          os << ymd.year;
+          break;
+        }
+        case ymd_order_dmy: {
+          os  << std::setw(2) << std::setfill(fill_char)
+              << ymd.day;
+          if (f.has_date_sep_chars()) {
+            f.day_sep_char(oitr);
+          }
+          month_formatter_type::format_month(ymd.month, os, f);
+          if (f.has_date_sep_chars()) {
+            f.month_sep_char(oitr);
+          }
+          os << ymd.year;
+          break;
+        }
+      }
+    }
+  };
+
+
+  //! Convert a date to string using format policies
+  template<class date_type,
+           class facet_type,
+           class charT = char>
+  class ostream_date_formatter
+  {
+  public:
+    typedef std::basic_ostream<charT> ostream_type;
+    typedef typename date_type::ymd_type ymd_type;
+
+    //! Put date into an ostream
+    static void date_put(const date_type& d,
+                         ostream_type& os,
+                         const facet_type& f)
+    {
+      special_values sv = d.as_special();
+      if (sv == not_special) {
+        ymd_type ymd = d.year_month_day();
+        ostream_ymd_formatter<ymd_type, facet_type, charT>::ymd_put(ymd, os, f);
+      }
+      else { // output a special value
+        std::ostreambuf_iterator<charT> coi(os);
+        f.put_special_value(coi, sv);
+      }
+    }
+
+
+    //! Put date into an ostream
+    static void date_put(const date_type& d,
+                         ostream_type& os)
+    {
+      //retrieve the local from the ostream
+      std::locale locale = os.getloc();
+      if (std::has_facet<facet_type>(locale)) {
+        const facet_type& f = std::use_facet<facet_type>(locale);
+        date_put(d, os, f);
+      }
+      else {
+        //default to something sensible if no facet installed
+        facet_type default_facet;
+        date_put(d, os, default_facet);
+      }
+    } // date_to_ostream 
+  }; //class date_formatter
+
+
+} } //namespace date_time
+
+#endif
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/date_generators.hpp b/vendor/pdalboost/boost/date_time/date_generators.hpp
new file mode 100644
index 0000000..153e8f2
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/date_generators.hpp
@@ -0,0 +1,509 @@
+#ifndef DATE_TIME_DATE_GENERATORS_HPP__
+#define DATE_TIME_DATE_GENERATORS_HPP__
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+/*! @file date_generators.hpp
+  Definition and implementation of date algorithm templates
+*/
+
+#include <stdexcept>
+#include <sstream>
+#include <boost/throw_exception.hpp>
+#include <boost/date_time/date.hpp>
+#include <boost/date_time/compiler_config.hpp>
+
+namespace pdalboost {
+namespace date_time {
+
+  //! Base class for all generators that take a year and produce a date.
+  /*! This class is a base class for polymorphic function objects that take
+    a year and produce a concrete date.
+    @param date_type The type representing a date.  This type must
+    export a calender_type which defines a year_type.
+  */
+  template<class date_type>
+  class year_based_generator
+  {
+  public:
+    typedef typename date_type::calendar_type calendar_type;
+    typedef typename calendar_type::year_type        year_type;
+    year_based_generator() {}
+    virtual ~year_based_generator() {}
+    virtual date_type get_date(year_type y) const = 0;
+    //! Returns a string for use in a POSIX time_zone string
+    virtual std::string to_string() const =0;
+  };
+
+  //! Generates a date by applying the year to the given month and day.
+  /*!
+    Example usage:
+    @code
+    partial_date pd(1, Jan);
+    partial_date pd2(70);
+    date d = pd.get_date(2002); //2002-Jan-01
+    date d2 = pd2.get_date(2002); //2002-Mar-10
+    @endcode
+    \ingroup date_alg
+  */
+  template<class date_type>
+ class partial_date : public year_based_generator<date_type>
+ {
+ public:
+   typedef typename date_type::calendar_type calendar_type;
+   typedef typename calendar_type::day_type         day_type;
+   typedef typename calendar_type::month_type       month_type;
+   typedef typename calendar_type::year_type        year_type;
+   typedef typename date_type::duration_type        duration_type;
+   typedef typename duration_type::duration_rep     duration_rep;
+   partial_date(day_type d, month_type m) :
+     day_(d),
+     month_(m)
+   {}
+   //! Partial date created from number of days into year. Range 1-366
+   /*! Allowable values range from 1 to 366. 1=Jan1, 366=Dec31. If argument
+    * exceeds range, partial_date will be created with closest in-range value.
+    * 60 will always be Feb29, if get_date() is called with a non-leap year
+    * an exception will be thrown */
+   partial_date(duration_rep days) :
+     day_(1), // default values
+     month_(1)
+   {
+     date_type d1(2000,1,1);
+     if(days > 1) {
+       if(days > 366) // prevents wrapping
+       {
+         days = 366;
+       }
+       days = days - 1;
+       duration_type dd(days);
+       d1 = d1 + dd;
+     }
+     day_ = d1.day();
+     month_ = d1.month();
+   }
+   //! Return a concrete date when provided with a year specific year.
+   /*! Will throw an 'invalid_argument' exception if a partial_date object,
+    * instantiated with Feb-29, has get_date called with a non-leap year.
+    * Example:
+    * @code
+    * partial_date pd(29, Feb);
+    * pd.get_date(2003); // throws invalid_argument exception
+    * pg.get_date(2000); // returns 2000-2-29
+    * @endcode
+         */
+   date_type get_date(year_type y) const
+   {
+     if((day_ == 29) && (month_ == 2) && !(calendar_type::is_leap_year(y))) {
+       std::ostringstream ss;
+       ss << "No Feb 29th in given year of " << y << ".";
+       pdalboost::throw_exception(std::invalid_argument(ss.str()));
+     }
+     return date_type(y, month_, day_);
+   }
+   date_type operator()(year_type y) const
+   {
+     return get_date(y);
+     //return date_type(y, month_, day_);
+   }
+   bool operator==(const partial_date& rhs) const
+   {
+     return (month_ == rhs.month_) && (day_ == rhs.day_);
+   }
+   bool operator<(const partial_date& rhs) const
+   {
+     if (month_ < rhs.month_) return true;
+     if (month_ > rhs.month_) return false;
+     //months are equal
+     return (day_ < rhs.day_);
+   }
+
+   // added for streaming purposes
+   month_type month() const
+   {
+     return month_;
+   }
+   day_type day() const
+   {
+     return day_;
+   }
+
+   //! Returns string suitable for use in POSIX time zone string
+   /*! Returns string formatted with up to 3 digits:
+    * Jan-01 == "0"
+    * Feb-29 == "58"
+    * Dec-31 == "365" */
+   virtual std::string to_string() const
+   {
+     std::ostringstream ss;
+     date_type d(2004, month_, day_);
+     unsigned short c = d.day_of_year();
+     c--; // numbered 0-365 while day_of_year is 1 based...
+     ss << c;
+     return ss.str();
+   }
+ private:
+   day_type day_;
+   month_type month_;
+ };
+
+
+  //! Returns nth arg as string. 1 -> "first", 2 -> "second", max is 5.
+  BOOST_DATE_TIME_DECL const char* nth_as_str(int n);
+
+  //! Useful generator functor for finding holidays
+  /*! Based on the idea in Cal. Calc. for finding holidays that are
+   *  the 'first Monday of September'. When instantiated with
+   *  'fifth' kday of month, the result will be the last kday of month
+   *  which can be the fourth or fifth depending on the structure of
+   *  the month.
+   *
+   *  The algorithm here basically guesses for the first
+   *  day of the month.  Then finds the first day of the correct
+   *  type.  That is, if the first of the month is a Tuesday
+   *  and it needs Wenesday then we simply increment by a day
+   *  and then we can add the length of a week until we get
+   *  to the 'nth kday'.  There are probably more efficient
+   *  algorithms based on using a mod 7, but this one works
+   *  reasonably well for basic applications.
+   *  \ingroup date_alg
+   */
+  template<class date_type>
+  class nth_kday_of_month : public year_based_generator<date_type>
+  {
+  public:
+    typedef typename date_type::calendar_type calendar_type;
+    typedef typename calendar_type::day_of_week_type  day_of_week_type;
+    typedef typename calendar_type::month_type        month_type;
+    typedef typename calendar_type::year_type         year_type;
+    typedef typename date_type::duration_type        duration_type;
+    enum week_num {first=1, second, third, fourth, fifth};
+    nth_kday_of_month(week_num week_no,
+                      day_of_week_type dow,
+                      month_type m) :
+      month_(m),
+      wn_(week_no),
+      dow_(dow)
+    {}
+    //! Return a concrete date when provided with a year specific year.
+    date_type get_date(year_type y) const
+    {
+      date_type d(y, month_, 1); //first day of month
+      duration_type one_day(1);
+      duration_type one_week(7);
+      while (dow_ != d.day_of_week()) {
+        d = d + one_day;
+      }
+      int week = 1;
+      while (week < wn_) {
+        d = d + one_week;
+        week++;
+      }
+      // remove wrapping to next month behavior
+      if(d.month() != month_) {
+        d = d - one_week;
+      }
+      return d;
+    }
+    // added for streaming
+    month_type month() const
+    {
+      return month_;
+    }
+    week_num nth_week() const
+    {
+      return wn_;
+    }
+    day_of_week_type day_of_week() const
+    {
+      return dow_;
+    }
+    const char* nth_week_as_str() const
+    {
+      return nth_as_str(wn_);
+    }
+    //! Returns string suitable for use in POSIX time zone string
+    /*! Returns a string formatted as "M4.3.0" ==> 3rd Sunday in April. */
+    virtual std::string to_string() const
+    {
+     std::ostringstream ss;
+     ss << 'M'
+       << static_cast<int>(month_) << '.'
+       << static_cast<int>(wn_) << '.'
+       << static_cast<int>(dow_);
+     return ss.str();
+    }
+  private:
+    month_type month_;
+    week_num wn_;
+    day_of_week_type dow_;
+  };
+
+  //! Useful generator functor for finding holidays and daylight savings
+  /*! Similar to nth_kday_of_month, but requires less paramters
+   *  \ingroup date_alg
+   */
+  template<class date_type>
+  class first_kday_of_month : public year_based_generator<date_type>
+  {
+  public:
+    typedef typename date_type::calendar_type calendar_type;
+    typedef typename calendar_type::day_of_week_type  day_of_week_type;
+    typedef typename calendar_type::month_type        month_type;
+    typedef typename calendar_type::year_type         year_type;
+    typedef typename date_type::duration_type        duration_type;
+    //!Specify the first 'Sunday' in 'April' spec
+    /*!@param dow The day of week, eg: Sunday, Monday, etc
+     * @param m The month of the year, eg: Jan, Feb, Mar, etc
+     */
+    first_kday_of_month(day_of_week_type dow, month_type m) :
+      month_(m),
+      dow_(dow)
+    {}
+    //! Return a concrete date when provided with a year specific year.
+    date_type get_date(year_type year) const
+    {
+      date_type d(year, month_,1);
+      duration_type one_day(1);
+      while (dow_ != d.day_of_week()) {
+        d = d + one_day;
+      }
+      return d;
+    }
+    // added for streaming
+    month_type month() const
+    {
+      return month_;
+    }
+    day_of_week_type day_of_week() const
+    {
+      return dow_;
+    }
+    //! Returns string suitable for use in POSIX time zone string
+    /*! Returns a string formatted as "M4.1.0" ==> 1st Sunday in April. */
+    virtual std::string to_string() const
+    {
+     std::ostringstream ss;
+     ss << 'M'
+       << static_cast<int>(month_) << '.'
+       << 1 << '.'
+       << static_cast<int>(dow_);
+     return ss.str();
+    }
+  private:
+    month_type month_;
+    day_of_week_type dow_;
+  };
+
+
+
+  //! Calculate something like Last Sunday of January
+  /*! Useful generator functor for finding holidays and daylight savings
+   *  Get the last day of the month and then calculate the difference
+   *  to the last previous day.
+   *  @param date_type A date class that exports day_of_week, month_type, etc.
+   *  \ingroup date_alg
+   */
+  template<class date_type>
+  class last_kday_of_month : public year_based_generator<date_type>
+  {
+  public:
+    typedef typename date_type::calendar_type calendar_type;
+    typedef typename calendar_type::day_of_week_type  day_of_week_type;
+    typedef typename calendar_type::month_type        month_type;
+    typedef typename calendar_type::year_type         year_type;
+    typedef typename date_type::duration_type        duration_type;
+    //!Specify the date spec like last 'Sunday' in 'April' spec
+    /*!@param dow The day of week, eg: Sunday, Monday, etc
+     * @param m The month of the year, eg: Jan, Feb, Mar, etc
+     */
+    last_kday_of_month(day_of_week_type dow, month_type m) :
+      month_(m),
+      dow_(dow)
+    {}
+    //! Return a concrete date when provided with a year specific year.
+    date_type get_date(year_type year) const
+    {
+      date_type d(year, month_, calendar_type::end_of_month_day(year,month_));
+      duration_type one_day(1);
+      while (dow_ != d.day_of_week()) {
+        d = d - one_day;
+      }
+      return d;
+    }
+    // added for streaming
+    month_type month() const
+    {
+      return month_;
+    }
+    day_of_week_type day_of_week() const
+    {
+      return dow_;
+    }
+    //! Returns string suitable for use in POSIX time zone string
+    /*! Returns a string formatted as "M4.5.0" ==> last Sunday in April. */
+    virtual std::string to_string() const
+    {
+      std::ostringstream ss;
+      ss << 'M'
+         << static_cast<int>(month_) << '.'
+         << 5 << '.'
+         << static_cast<int>(dow_);
+      return ss.str();
+    }
+  private:
+    month_type month_;
+    day_of_week_type dow_;
+   };
+
+
+  //! Calculate something like "First Sunday after Jan 1,2002
+  /*! Date generator that takes a date and finds kday after
+   *@code
+     typedef pdalboost::date_time::first_kday_after<date> firstkdayafter;
+     firstkdayafter fkaf(Monday);
+     fkaf.get_date(date(2002,Feb,1));
+   @endcode
+   *  \ingroup date_alg
+   */
+  template<class date_type>
+  class first_kday_after
+  {
+  public:
+    typedef typename date_type::calendar_type calendar_type;
+    typedef typename calendar_type::day_of_week_type day_of_week_type;
+    typedef typename date_type::duration_type        duration_type;
+    first_kday_after(day_of_week_type dow) :
+      dow_(dow)
+    {}
+    //! Return next kday given.
+    date_type get_date(date_type start_day) const
+    {
+      duration_type one_day(1);
+      date_type d = start_day + one_day;
+      while (dow_ != d.day_of_week()) {
+        d = d + one_day;
+      }
+      return d;
+    }
+    // added for streaming
+    day_of_week_type day_of_week() const
+    {
+      return dow_;
+    }
+  private:
+    day_of_week_type dow_;
+  };
+
+  //! Calculate something like "First Sunday before Jan 1,2002
+  /*! Date generator that takes a date and finds kday after
+   *@code
+     typedef pdalboost::date_time::first_kday_before<date> firstkdaybefore;
+     firstkdaybefore fkbf(Monday);
+     fkbf.get_date(date(2002,Feb,1));
+   @endcode
+   *  \ingroup date_alg
+   */
+  template<class date_type>
+  class first_kday_before
+  {
+  public:
+    typedef typename date_type::calendar_type calendar_type;
+    typedef typename calendar_type::day_of_week_type day_of_week_type;
+    typedef typename date_type::duration_type        duration_type;
+    first_kday_before(day_of_week_type dow) :
+      dow_(dow)
+    {}
+    //! Return next kday given.
+    date_type get_date(date_type start_day) const
+    {
+      duration_type one_day(1);
+      date_type d = start_day - one_day;
+      while (dow_ != d.day_of_week()) {
+        d = d - one_day;
+      }
+      return d;
+    }
+    // added for streaming
+    day_of_week_type day_of_week() const
+    {
+      return dow_;
+    }
+  private:
+    day_of_week_type dow_;
+  };
+
+  //! Calculates the number of days until the next weekday
+  /*! Calculates the number of days until the next weekday.
+   * If the date given falls on a Sunday and the given weekday
+   * is Tuesday the result will be 2 days */
+  template<typename date_type, class weekday_type>
+  inline
+  typename date_type::duration_type days_until_weekday(const date_type& d, const weekday_type& wd)
+  {
+    typedef typename date_type::duration_type duration_type;
+    duration_type wks(0);
+    duration_type dd(wd.as_number() - d.day_of_week().as_number());
+    if(dd.is_negative()){
+      wks = duration_type(7);
+    }
+    return dd + wks;
+  }
+
+  //! Calculates the number of days since the previous weekday
+  /*! Calculates the number of days since the previous weekday
+   * If the date given falls on a Sunday and the given weekday
+   * is Tuesday the result will be 5 days. The answer will be a positive
+   * number because Tuesday is 5 days before Sunday, not -5 days before. */
+  template<typename date_type, class weekday_type>
+  inline
+  typename date_type::duration_type days_before_weekday(const date_type& d, const weekday_type& wd)
+  {
+    typedef typename date_type::duration_type duration_type;
+    duration_type wks(0);
+    duration_type dd(wd.as_number() - d.day_of_week().as_number());
+    if(dd.days() > 0){
+      wks = duration_type(7);
+    }
+    // we want a number of days, not an offset. The value returned must
+    // be zero or larger.
+    return (-dd + wks);
+  }
+
+  //! Generates a date object representing the date of the following weekday from the given date
+  /*! Generates a date object representing the date of the following
+   * weekday from the given date. If the date given is 2004-May-9
+   * (a Sunday) and the given weekday is Tuesday then the resulting date
+   * will be 2004-May-11. */
+  template<class date_type, class weekday_type>
+  inline
+  date_type next_weekday(const date_type& d, const weekday_type& wd)
+  {
+    return d + days_until_weekday(d, wd);
+  }
+
+  //! Generates a date object representing the date of the previous weekday from the given date
+  /*! Generates a date object representing the date of the previous
+   * weekday from the given date. If the date given is 2004-May-9
+   * (a Sunday) and the given weekday is Tuesday then the resulting date
+   * will be 2004-May-4. */
+  template<class date_type, class weekday_type>
+  inline
+  date_type previous_weekday(const date_type& d, const weekday_type& wd)
+  {
+    return d - days_before_weekday(d, wd);
+  }
+
+} } //namespace date_time
+
+
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/date_iterator.hpp b/vendor/pdalboost/boost/date_time/date_iterator.hpp
new file mode 100644
index 0000000..d1a7fa8
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/date_iterator.hpp
@@ -0,0 +1,101 @@
+#ifndef DATE_ITERATOR_HPP___
+#define DATE_ITERATOR_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include <iterator>
+
+namespace pdalboost {
+namespace date_time {
+  //! An iterator over dates with varying resolution (day, week, month, year, etc)
+  enum date_resolutions {day, week, months, year, decade, century, NumDateResolutions};
+
+  //! Base date iterator type
+  /*! This class provides the skeleton for the creation of iterators.
+   *  New and interesting interators can be created by plugging in a new
+   *  function that derives the next value from the current state.
+   *  generation of various types of -based information.
+   *
+   *  <b>Template Parameters</b>
+   *
+   *  <b>date_type</b>
+   *
+   *  The date_type is a concrete date_type. The date_type must
+   *  define a duration_type and a calendar_type.
+   */
+  template<class date_type>
+  class date_itr_base {
+  // works, but benefit unclear at the moment
+  //   class date_itr_base : public std::iterator<std::input_iterator_tag,
+  //                                             date_type, void, void, void>{
+  public:
+    typedef typename date_type::duration_type duration_type;
+    typedef date_type value_type;
+    typedef std::input_iterator_tag iterator_category;
+
+    date_itr_base(date_type d) : current_(d) {}
+    virtual ~date_itr_base() {}
+    date_itr_base& operator++()
+    {
+      current_ = current_ + get_offset(current_);
+      return *this;
+    }
+    date_itr_base& operator--()
+    {
+      current_ = current_ + get_neg_offset(current_);
+      return *this;
+    }
+    virtual duration_type get_offset(const date_type& current) const=0;
+    virtual duration_type get_neg_offset(const date_type& current) const=0;
+    date_type operator*() {return current_;}
+    date_type* operator->() {return &current_;}
+    bool operator<  (const date_type& d) {return current_ < d;}
+    bool operator<= (const date_type& d) {return current_ <= d;}
+    bool operator>  (const date_type& d) {return current_ > d;}
+    bool operator>= (const date_type& d) {return current_ >= d;}
+    bool operator== (const date_type& d) {return current_ == d;}
+    bool operator!= (const date_type& d) {return current_ != d;}
+  private:
+    date_type current_;
+  };
+
+  //! Overrides the base date iterator providing hook for functors
+  /*
+   *  <b>offset_functor</b>
+   *
+   *  The offset functor must define a get_offset function that takes the
+   *  current point in time and calculates and offset.
+   *
+   */
+  template<class offset_functor, class date_type>
+  class date_itr : public date_itr_base<date_type> {
+  public:
+    typedef typename date_type::duration_type duration_type;
+    date_itr(date_type d, int factor=1) :
+      date_itr_base<date_type>(d),
+      of_(factor)
+    {}
+  private:
+    virtual duration_type get_offset(const date_type& current) const
+    {
+      return of_.get_offset(current);
+    }
+    virtual duration_type get_neg_offset(const date_type& current) const
+    {
+      return of_.get_neg_offset(current);
+    }
+    offset_functor of_;
+  };
+
+
+
+} } //namespace date_time
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/date_names_put.hpp b/vendor/pdalboost/boost/date_time/date_names_put.hpp
new file mode 100644
index 0000000..d878166
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/date_names_put.hpp
@@ -0,0 +1,320 @@
+#ifndef DATE_TIME_DATE_NAMES_PUT_HPP___
+#define DATE_TIME_DATE_NAMES_PUT_HPP___
+
+/* Copyright (c) 2002-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+#include "boost/date_time/locale_config.hpp" // set BOOST_DATE_TIME_NO_LOCALE
+
+#ifndef BOOST_DATE_TIME_NO_LOCALE
+
+#include "boost/date_time/special_defs.hpp"
+#include "boost/date_time/date_defs.hpp"
+#include "boost/date_time/parse_format_base.hpp"
+#include "boost/lexical_cast.hpp"
+#include <locale>
+
+
+namespace pdalboost {
+namespace date_time {
+
+    //! Output facet base class for gregorian dates.
+    /*! This class is a base class for date facets used to localize the
+     *  names of months and the names of days in the week.
+     *
+     * Requirements of Config
+     *  - define an enumeration month_enum that enumerates the months.
+     *    The enumeration should be '1' based eg: Jan==1
+     *  - define as_short_string and as_long_string
+     *
+     * (see langer & kreft p334).
+     *
+     */
+    template<class Config,
+             class charT = char,
+             class OutputIterator = std::ostreambuf_iterator<charT> >
+    class date_names_put : public std::locale::facet
+    {
+    public:
+      date_names_put() {}
+      typedef OutputIterator iter_type;
+      typedef typename Config::month_type month_type;
+      typedef typename Config::month_enum month_enum;
+      typedef typename Config::weekday_enum weekday_enum;
+      typedef typename Config::special_value_enum special_value_enum;
+      //typedef typename Config::format_type format_type;
+      typedef std::basic_string<charT> string_type;
+      typedef charT char_type;
+      static const char_type default_special_value_names[3][17];
+      static const char_type separator[2];
+
+      static std::locale::id id;
+
+#if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
+      std::locale::id& __get_id (void) const { return id; }
+#endif
+
+      void put_special_value(iter_type& oitr, special_value_enum sv) const
+      {
+        do_put_special_value(oitr, sv);
+      }
+      void put_month_short(iter_type& oitr, month_enum moy) const
+      {
+        do_put_month_short(oitr, moy);
+      }
+      void put_month_long(iter_type& oitr, month_enum moy) const
+      {
+        do_put_month_long(oitr, moy);
+      }
+      void put_weekday_short(iter_type& oitr, weekday_enum wd) const
+      {
+        do_put_weekday_short(oitr, wd);
+      }
+      void put_weekday_long(iter_type& oitr, weekday_enum wd) const
+      {
+        do_put_weekday_long(oitr, wd);
+      }
+      bool has_date_sep_chars() const
+      {
+        return do_has_date_sep_chars();
+      }
+      void year_sep_char(iter_type& oitr) const
+      {
+        do_year_sep_char(oitr);
+      }
+      //! char between year-month
+      void month_sep_char(iter_type& oitr) const
+      {
+        do_month_sep_char(oitr);
+      }
+      //! Char to separate month-day
+      void day_sep_char(iter_type& oitr) const
+      {
+        do_day_sep_char(oitr);
+      }
+      //! Determines the order to put the date elements
+      ymd_order_spec date_order() const
+      {
+        return do_date_order();
+      }
+      //! Determines if month is displayed as integer, short or long string
+      month_format_spec month_format() const
+      {
+        return do_month_format();
+      }
+
+    protected:
+      //! Default facet implementation uses month_type defaults
+      virtual void do_put_month_short(iter_type& oitr, month_enum moy) const
+      {
+        month_type gm(moy);
+        charT c = '\0';
+        put_string(oitr, gm.as_short_string(c));
+      }
+      //! Default facet implementation uses month_type defaults
+      virtual void do_put_month_long(iter_type& oitr,
+                                     month_enum moy) const
+      {
+        month_type gm(moy);
+        charT c = '\0';
+        put_string(oitr, gm.as_long_string(c));
+      }
+      //! Default facet implementation for special value types
+      virtual void do_put_special_value(iter_type& oitr, special_value_enum sv) const
+      {
+        if(sv <= 2) { // only output not_a_date_time, neg_infin, or pos_infin
+          string_type s(default_special_value_names[sv]);
+          put_string(oitr, s);
+        }
+      }
+      virtual void do_put_weekday_short(iter_type&, weekday_enum) const
+      {
+      }
+      virtual void do_put_weekday_long(iter_type&, weekday_enum) const
+      {
+      }
+      virtual bool do_has_date_sep_chars() const
+      {
+        return true;
+      }
+      virtual void do_year_sep_char(iter_type& oitr) const
+      {
+        string_type s(separator);
+        put_string(oitr, s);
+      }
+      //! char between year-month
+      virtual void do_month_sep_char(iter_type& oitr) const
+      {
+        string_type s(separator);
+        put_string(oitr, s);
+      }
+      //! Char to separate month-day
+      virtual void do_day_sep_char(iter_type& oitr) const
+      {
+        string_type s(separator); //put in '-'
+        put_string(oitr, s);
+      }
+      //! Default for date order
+      virtual ymd_order_spec do_date_order() const
+      {
+        return ymd_order_iso;
+      }
+      //! Default month format
+      virtual month_format_spec do_month_format() const
+      {
+        return month_as_short_string;
+      }
+      void put_string(iter_type& oi, const charT* const s) const
+      {
+        string_type s1(pdalboost::lexical_cast<string_type>(s));
+        typename string_type::iterator si,end;
+        for (si=s1.begin(), end=s1.end(); si!=end; si++, oi++) {
+          *oi = *si;
+        }
+      }
+      void put_string(iter_type& oi, const string_type& s1) const
+      {
+        typename string_type::const_iterator si,end;
+        for (si=s1.begin(), end=s1.end(); si!=end; si++, oi++) {
+          *oi = *si;
+        }
+      }
+    };
+
+    template<class Config, class charT, class OutputIterator>
+    const typename date_names_put<Config, charT, OutputIterator>::char_type
+    date_names_put<Config, charT, OutputIterator>::default_special_value_names[3][17] = {
+      {'n','o','t','-','a','-','d','a','t','e','-','t','i','m','e'},
+      {'-','i','n','f','i','n','i','t','y'},
+      {'+','i','n','f','i','n','i','t','y'} };
+
+    template<class Config, class charT, class OutputIterator>
+    const typename date_names_put<Config, charT, OutputIterator>::char_type
+    date_names_put<Config, charT, OutputIterator>::separator[2] =
+      {'-', '\0'} ;
+
+
+    //! Generate storage location for a std::locale::id
+    template<class Config, class charT, class OutputIterator>
+    std::locale::id date_names_put<Config, charT, OutputIterator>::id;
+
+    //! A date name output facet that takes an array of char* to define strings
+    template<class Config,
+             class charT = char,
+             class OutputIterator = std::ostreambuf_iterator<charT> >
+    class all_date_names_put : public date_names_put<Config, charT, OutputIterator>
+    {
+    public:
+      all_date_names_put(const charT* const month_short_names[],
+                         const charT* const month_long_names[],
+                         const charT* const special_value_names[],
+                         const charT* const weekday_short_names[],
+                         const charT* const weekday_long_names[],
+                         charT separator_char = '-',
+                         ymd_order_spec order_spec = ymd_order_iso,
+                         month_format_spec month_format = month_as_short_string) :
+        month_short_names_(month_short_names),
+        month_long_names_(month_long_names),
+        special_value_names_(special_value_names),
+        weekday_short_names_(weekday_short_names),
+        weekday_long_names_(weekday_long_names),
+        order_spec_(order_spec),
+        month_format_spec_(month_format)
+      {
+        separator_char_[0] = separator_char;
+        separator_char_[1] = '\0';
+
+      }
+      typedef OutputIterator iter_type;
+      typedef typename Config::month_enum month_enum;
+      typedef typename Config::weekday_enum weekday_enum;
+      typedef typename Config::special_value_enum special_value_enum;
+
+      const charT* const* get_short_month_names() const
+      {
+        return month_short_names_;
+      }
+      const charT* const* get_long_month_names() const
+      {
+        return month_long_names_;
+      }
+      const charT* const* get_special_value_names() const
+      {
+        return special_value_names_;
+      }
+      const charT* const* get_short_weekday_names()const
+      {
+        return weekday_short_names_;
+      }
+      const charT* const* get_long_weekday_names()const
+      {
+        return weekday_long_names_;
+      }
+
+    protected:
+      //! Generic facet that takes array of chars
+      virtual void do_put_month_short(iter_type& oitr, month_enum moy) const
+      {
+        this->put_string(oitr, month_short_names_[moy-1]);
+      }
+      //! Long month names
+      virtual void do_put_month_long(iter_type& oitr, month_enum moy) const
+      {
+        this->put_string(oitr, month_long_names_[moy-1]);
+      }
+      //! Special values names
+      virtual void do_put_special_value(iter_type& oitr, special_value_enum sv) const
+      {
+        this->put_string(oitr, special_value_names_[sv]);
+      }
+      virtual void do_put_weekday_short(iter_type& oitr, weekday_enum wd) const
+      {
+        this->put_string(oitr, weekday_short_names_[wd]);
+      }
+      virtual void do_put_weekday_long(iter_type& oitr, weekday_enum wd) const
+      {
+        this->put_string(oitr, weekday_long_names_[wd]);
+      }
+      //! char between year-month
+      virtual void do_month_sep_char(iter_type& oitr) const
+      {
+        this->put_string(oitr, separator_char_);
+      }
+      //! Char to separate month-day
+      virtual void do_day_sep_char(iter_type& oitr) const
+      {
+        this->put_string(oitr, separator_char_);
+      }
+      //! Set the date ordering
+      virtual ymd_order_spec do_date_order() const
+      {
+        return order_spec_;
+      }
+      //! Set the date ordering
+      virtual month_format_spec do_month_format() const
+      {
+        return month_format_spec_;
+      }
+
+    private:
+      const charT* const* month_short_names_;
+      const charT* const* month_long_names_;
+      const charT* const* special_value_names_;
+      const charT* const* weekday_short_names_;
+      const charT* const* weekday_long_names_;
+      charT separator_char_[2];
+      ymd_order_spec order_spec_;
+      month_format_spec month_format_spec_;
+    };
+
+} } //namespace pdalboost::date_time
+
+#endif //BOOST_NO_STD_LOCALE
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/date_parsing.hpp b/vendor/pdalboost/boost/date_time/date_parsing.hpp
new file mode 100644
index 0000000..7add6e1
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/date_parsing.hpp
@@ -0,0 +1,316 @@
+#ifndef _DATE_TIME_DATE_PARSING_HPP___
+#define _DATE_TIME_DATE_PARSING_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include <string>
+#include <iterator>
+#include <algorithm>
+#include <boost/tokenizer.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/date_time/compiler_config.hpp>
+#include <boost/date_time/parse_format_base.hpp>
+
+#if defined(BOOST_DATE_TIME_NO_LOCALE)
+#include <cctype> // ::tolower(int)
+#else
+#include <locale> // std::tolower(char, locale)
+#endif
+
+namespace pdalboost {
+namespace date_time {
+
+  //! A function to replace the std::transform( , , ,tolower) construct
+  /*! This function simply takes a string, and changes all the characters
+   * in that string to lowercase (according to the default system locale).
+   * In the event that a compiler does not support locales, the old
+   * C style tolower() is used.
+   */
+  inline
+  std::string
+  convert_to_lower(std::string inp)
+  {
+#if !defined(BOOST_DATE_TIME_NO_LOCALE)
+    const std::locale loc(std::locale::classic());
+#endif
+    std::string::size_type i = 0, n = inp.length();
+    for (; i < n; ++i) {
+      inp[i] =
+#if defined(BOOST_DATE_TIME_NO_LOCALE)
+        static_cast<char>(std::tolower(inp[i]));
+#else
+        // tolower and others were brought in to std for borland >= v564
+        // in compiler_config.hpp
+        std::tolower(inp[i], loc);
+#endif
+    }
+    return inp;
+  }
+
+    //! Helper function for parse_date.
+    /* Used by-value parameter because we change the string and may
+     * want to preserve the original argument */
+    template<class month_type>
+    inline unsigned short
+    month_str_to_ushort(std::string const& s) {
+      if((s.at(0) >= '0') && (s.at(0) <= '9')) {
+        return pdalboost::lexical_cast<unsigned short>(s);
+      }
+      else {
+        std::string str = convert_to_lower(s);
+        typename month_type::month_map_ptr_type ptr = month_type::get_month_map_ptr();
+        typename month_type::month_map_type::iterator iter = ptr->find(str);
+        if(iter != ptr->end()) { // required for STLport
+          return iter->second;
+        }
+      }
+      return 13; // intentionally out of range - name not found
+    }
+ 
+    //! Find index of a string in either of 2 arrays
+    /*! find_match searches both arrays for a match to 's'. Both arrays
+     * must contain 'size' elements. The index of the match is returned.
+     * If no match is found, 'size' is returned.
+     * Ex. "Jan" returns 0, "Dec" returns 11, "Tue" returns 2.
+     * 'size' can be sent in with: (greg_month::max)() (which 12),
+     * (greg_weekday::max)() + 1 (which is 7) or date_time::NumSpecialValues */
+    template<class charT>
+    short find_match(const charT* const* short_names,
+                     const charT* const* long_names,
+                     short size,
+                     const std::basic_string<charT>& s) {
+      for(short i = 0; i < size; ++i){
+        if(short_names[i] == s || long_names[i] == s){
+          return i;
+        }
+      }
+      return size; // not-found, return a value out of range
+    }
+
+    //! Generic function to parse a delimited date (eg: 2002-02-10)
+    /*! Accepted formats are: "2003-02-10" or " 2003-Feb-10" or
+     * "2003-Feburary-10"
+     * The order in which the Month, Day, & Year appear in the argument
+     * string can be accomodated by passing in the appropriate ymd_order_spec
+     */
+    template<class date_type>
+    date_type
+    parse_date(const std::string& s, int order_spec = ymd_order_iso) {
+      std::string spec_str;
+      if(order_spec == ymd_order_iso) {
+        spec_str = "ymd";
+      }
+      else if(order_spec == ymd_order_dmy) {
+        spec_str = "dmy";
+      }
+      else { // (order_spec == ymd_order_us)
+        spec_str = "mdy";
+      }
+
+      typedef typename date_type::month_type month_type;
+      unsigned pos = 0;
+      unsigned short year(0), month(0), day(0);
+      typedef typename std::basic_string<char>::traits_type traits_type;
+      typedef pdalboost::char_separator<char, traits_type> char_separator_type;
+      typedef pdalboost::tokenizer<char_separator_type,
+                               std::basic_string<char>::const_iterator,
+                               std::basic_string<char> > tokenizer;
+      typedef pdalboost::tokenizer<char_separator_type,
+                               std::basic_string<char>::const_iterator,
+                               std::basic_string<char> >::iterator tokenizer_iterator;
+      // may need more delimiters, these work for the regression tests
+      const char sep_char[] = {',','-','.',' ','/','\0'};
+      char_separator_type sep(sep_char);
+      tokenizer tok(s,sep);
+      for(tokenizer_iterator beg=tok.begin();
+          beg!=tok.end() && pos < spec_str.size();
+          ++beg, ++pos) {
+        switch(spec_str.at(pos)) {
+          case 'y':
+          {
+            year = pdalboost::lexical_cast<unsigned short>(*beg);
+            break;
+          }
+          case 'm':
+          {
+            month = month_str_to_ushort<month_type>(*beg);
+            break;
+          }
+          case 'd':
+          {
+            day = pdalboost::lexical_cast<unsigned short>(*beg);
+            break;
+          }
+          default: break;
+        } //switch
+      }
+      return date_type(year, month, day);
+    }
+
+    //! Generic function to parse undelimited date (eg: 20020201)
+    template<class date_type>
+    date_type
+    parse_undelimited_date(const std::string& s) {
+      int offsets[] = {4,2,2};
+      int pos = 0;
+      //typename date_type::ymd_type ymd((year_type::min)(),1,1);
+      unsigned short y = 0, m = 0, d = 0;
+
+      /* The two bool arguments state that parsing will not wrap
+       * (only the first 8 characters will be parsed) and partial
+       * strings will not be parsed.
+       * Ex:
+       * "2005121" will parse 2005 & 12, but not the "1" */
+      pdalboost::offset_separator osf(offsets, offsets+3, false, false);
+
+      typedef typename pdalboost::tokenizer<pdalboost::offset_separator,
+                                        std::basic_string<char>::const_iterator,
+                                        std::basic_string<char> > tokenizer_type;
+      tokenizer_type tok(s, osf);
+      for(typename tokenizer_type::iterator ti=tok.begin(); ti!=tok.end();++ti) {
+        unsigned short i = pdalboost::lexical_cast<unsigned short>(*ti);
+        switch(pos) {
+        case 0: y = i; break;
+        case 1: m = i; break;
+        case 2: d = i; break;
+        default:       break;
+        }
+        pos++;
+      }
+      return date_type(y,m,d);
+    }
+
+    //! Helper function for 'date gregorian::from_stream()'
+    /*! Creates a string from the iterators that reference the
+     * begining & end of a char[] or string. All elements are
+     * used in output string */
+    template<class date_type, class iterator_type>
+    inline
+    date_type
+    from_stream_type(iterator_type& beg,
+                     iterator_type const& end,
+                     char)
+    {
+      std::ostringstream ss;
+      while(beg != end) {
+        ss << *beg++;
+      }
+      return parse_date<date_type>(ss.str());
+    }
+
+    //! Helper function for 'date gregorian::from_stream()'
+    /*! Returns the first string found in the stream referenced by the
+     * begining & end iterators */
+    template<class date_type, class iterator_type>
+    inline
+    date_type
+    from_stream_type(iterator_type& beg,
+                     iterator_type const& /* end */,
+                     std::string const&)
+    {
+      return parse_date<date_type>(*beg);
+    }
+
+    /* I believe the wchar stuff would be best elsewhere, perhaps in
+     * parse_date<>()? In the mean time this gets us started... */
+    //! Helper function for 'date gregorian::from_stream()'
+    /*! Creates a string from the iterators that reference the
+     * begining & end of a wstring. All elements are
+     * used in output string */
+    template<class date_type, class iterator_type>
+    inline
+    date_type from_stream_type(iterator_type& beg,
+                               iterator_type const& end,
+                               wchar_t)
+    {
+      std::ostringstream ss;
+#if !defined(BOOST_DATE_TIME_NO_LOCALE)
+      std::locale loc;
+      std::ctype<wchar_t> const& fac = std::use_facet<std::ctype<wchar_t> >(loc);
+      while(beg != end) {
+        ss << fac.narrow(*beg++, 'X'); // 'X' will cause exception to be thrown
+      }
+#else
+      while(beg != end) {
+        char c = 'X'; // 'X' will cause exception to be thrown
+        const wchar_t wc = *beg++;
+        if (wc >= 0 && wc <= 127)
+          c = static_cast< char >(wc);
+        ss << c;
+      }
+#endif
+      return parse_date<date_type>(ss.str());
+    }
+#ifndef BOOST_NO_STD_WSTRING
+    //! Helper function for 'date gregorian::from_stream()'
+    /*! Creates a string from the first wstring found in the stream
+     * referenced by the begining & end iterators */
+    template<class date_type, class iterator_type>
+    inline
+    date_type
+    from_stream_type(iterator_type& beg,
+                     iterator_type const& /* end */,
+                     std::wstring const&) {
+      std::wstring ws = *beg;
+      std::ostringstream ss;
+      std::wstring::iterator wsb = ws.begin(), wse = ws.end();
+#if !defined(BOOST_DATE_TIME_NO_LOCALE)
+      std::locale loc;
+      std::ctype<wchar_t> const& fac = std::use_facet<std::ctype<wchar_t> >(loc);
+      while(wsb != wse) {
+        ss << fac.narrow(*wsb++, 'X'); // 'X' will cause exception to be thrown
+      }
+#else
+      while(wsb != wse) {
+        char c = 'X'; // 'X' will cause exception to be thrown
+        const wchar_t wc = *wsb++;
+        if (wc >= 0 && wc <= 127)
+          c = static_cast< char >(wc);
+        ss << c;
+      }
+#endif
+      return parse_date<date_type>(ss.str());
+    }
+#endif // BOOST_NO_STD_WSTRING
+#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
+    // This function cannot be compiled with MSVC 6.0 due to internal compiler shorcomings
+#else
+    //! function called by wrapper functions: date_period_from_(w)string()
+    template<class date_type, class charT>
+    period<date_type, typename date_type::duration_type>
+    from_simple_string_type(const std::basic_string<charT>& s){
+      typedef typename std::basic_string<charT>::traits_type traits_type;
+      typedef typename pdalboost::char_separator<charT, traits_type> char_separator;
+      typedef typename pdalboost::tokenizer<char_separator,
+                                        typename std::basic_string<charT>::const_iterator,
+                                        std::basic_string<charT> > tokenizer;
+      const charT sep_list[4] = {'[','/',']','\0'};
+      char_separator sep(sep_list);
+      tokenizer tokens(s, sep);
+      typename tokenizer::iterator tok_it = tokens.begin();
+      std::basic_string<charT> date_string = *tok_it;
+      // get 2 string iterators and generate a date from them
+      typename std::basic_string<charT>::iterator date_string_start = date_string.begin(),
+                                                  date_string_end = date_string.end();
+      typedef typename std::iterator_traits<typename std::basic_string<charT>::iterator>::value_type value_type;
+      date_type d1 = from_stream_type<date_type>(date_string_start, date_string_end, value_type());
+      date_string = *(++tok_it); // next token
+      date_string_start = date_string.begin(), date_string_end = date_string.end();
+      date_type d2 = from_stream_type<date_type>(date_string_start, date_string_end, value_type());
+      return period<date_type, typename date_type::duration_type>(d1, d2);
+    }
+#endif
+
+} } //namespace date_time
+
+
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/dst_rules.hpp b/vendor/pdalboost/boost/date_time/dst_rules.hpp
new file mode 100644
index 0000000..908aa4f
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/dst_rules.hpp
@@ -0,0 +1,391 @@
+#ifndef DATE_TIME_DST_RULES_HPP__
+#define DATE_TIME_DST_RULES_HPP__
+
+/* Copyright (c) 2002,2003, 2007 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+/*! @file dst_rules.hpp
+  Contains template class to provide static dst rule calculations
+*/
+
+#include "boost/date_time/date_generators.hpp"
+#include "boost/date_time/period.hpp"
+#include "boost/date_time/date_defs.hpp"
+#include <stdexcept>
+
+namespace pdalboost {
+  namespace date_time {
+
+    enum time_is_dst_result {is_not_in_dst, is_in_dst, 
+                             ambiguous, invalid_time_label};
+
+
+    //! Dynamic class used to caluclate dst transition information
+    template<class date_type_, 
+             class time_duration_type_>
+    class dst_calculator
+    {
+    public:
+      typedef time_duration_type_ time_duration_type;
+      typedef date_type_ date_type;
+
+      //! Check the local time offset when on dst start day
+      /*! On this dst transition, the time label between
+       *  the transition boundary and the boudary + the offset
+       *  are invalid times.  If before the boundary then still 
+       *  not in dst.  
+       *@param time_of_day Time offset in the day for the local time
+       *@param dst_start_offset_minutes Local day offset for start of dst
+       *@param dst_length_minutes Number of minutes to adjust clock forward
+       *@retval status of time label w.r.t. dst
+       */
+      static time_is_dst_result 
+      process_local_dst_start_day(const time_duration_type& time_of_day,
+                                  unsigned int dst_start_offset_minutes,
+                                  long dst_length_minutes)
+      {
+        //std::cout << "here" << std::endl;
+        if (time_of_day < time_duration_type(0,dst_start_offset_minutes,0)) {
+          return is_not_in_dst;
+        }
+        long offset = dst_start_offset_minutes + dst_length_minutes;
+        if (time_of_day >= time_duration_type(0,offset,0)) {
+          return is_in_dst;
+        }
+        return invalid_time_label; 
+      }
+
+      //! Check the local time offset when on the last day of dst
+      /*! This is the calculation for the DST end day.  On that day times
+       *  prior to the conversion time - dst_length (1 am in US) are still 
+       *  in dst.  Times between the above and the switch time are 
+       *  ambiguous.  Times after the start_offset are not in dst.
+       *@param time_of_day Time offset in the day for the local time
+       *@param dst_end_offset_minutes Local time of day for end of dst
+       *@retval status of time label w.r.t. dst
+       */
+      static time_is_dst_result 
+      process_local_dst_end_day(const time_duration_type& time_of_day,
+                                unsigned int dst_end_offset_minutes,
+                                long dst_length_minutes)
+      {
+        //in US this will be 60 so offset in day is 1,0,0
+        int offset = dst_end_offset_minutes-dst_length_minutes;
+        if (time_of_day < time_duration_type(0,offset,0)) {
+          return is_in_dst;
+        }
+        if (time_of_day >= time_duration_type(0,dst_end_offset_minutes,0)) {
+          return is_not_in_dst;
+        }
+        return ambiguous;
+      }
+
+      //! Calculates if the given local time is dst or not
+      /*! Determines if the time is really in DST or not.  Also checks for 
+       *  invalid and ambiguous.
+       *  @param current_day The day to check for dst
+       *  @param time_of_day Time offset within the day to check 
+       *  @param dst_start_day  Starting day of dst for the given locality
+       *  @param dst_start_offset Time offset within day for dst boundary
+       *  @param dst_end_day    Ending day of dst for the given locality
+       *  @param dst_end_offset Time offset within day given in dst for dst boundary
+       *  @param dst_length lenght of dst adjusment
+       *  @retval The time is either ambiguous, invalid, in dst, or not in dst
+       */
+      static time_is_dst_result 
+      local_is_dst(const date_type& current_day,
+                   const time_duration_type& time_of_day,
+                   const date_type& dst_start_day,
+                   const time_duration_type& dst_start_offset,
+                   const date_type& dst_end_day,
+                   const time_duration_type& dst_end_offset,
+                   const time_duration_type& dst_length_minutes)
+      {
+        unsigned int start_minutes = 
+          dst_start_offset.hours() * 60 + dst_start_offset.minutes();
+        unsigned int end_minutes = 
+          dst_end_offset.hours() * 60 + dst_end_offset.minutes();
+        long length_minutes =  
+          dst_length_minutes.hours() * 60 + dst_length_minutes.minutes();
+
+        return local_is_dst(current_day, time_of_day,
+                            dst_start_day, start_minutes,
+                            dst_end_day, end_minutes,
+                            length_minutes);
+      }
+
+      //! Calculates if the given local time is dst or not
+      /*! Determines if the time is really in DST or not.  Also checks for 
+       *  invalid and ambiguous.
+       *  @param current_day The day to check for dst
+       *  @param time_of_day Time offset within the day to check 
+       *  @param dst_start_day  Starting day of dst for the given locality
+       *  @param dst_start_offset_minutes Offset within day for dst 
+       *         boundary (eg 120 for US which is 02:00:00)
+       *  @param dst_end_day    Ending day of dst for the given locality
+       *  @param dst_end_offset_minutes Offset within day given in dst for dst 
+       *         boundary (eg 120 for US which is 02:00:00)
+       *  @param dst_length_minutes Length of dst adjusment (eg: 60 for US)
+       *  @retval The time is either ambiguous, invalid, in dst, or not in dst
+       */
+      static time_is_dst_result 
+      local_is_dst(const date_type& current_day,
+                   const time_duration_type& time_of_day,
+                   const date_type& dst_start_day,
+                   unsigned int dst_start_offset_minutes,
+                   const date_type& dst_end_day,
+                   unsigned int dst_end_offset_minutes,
+                   long dst_length_minutes)
+      {
+        //in northern hemisphere dst is in the middle of the year
+        if (dst_start_day < dst_end_day) {
+          if ((current_day > dst_start_day) && (current_day < dst_end_day)) {
+            return is_in_dst;
+          }
+          if ((current_day < dst_start_day) || (current_day > dst_end_day)) {
+            return is_not_in_dst;
+          }
+        }
+        else {//southern hemisphere dst is at begining /end of year
+          if ((current_day < dst_start_day) && (current_day > dst_end_day)) {
+            return is_not_in_dst;
+          }
+          if ((current_day > dst_start_day) || (current_day < dst_end_day)) {
+            return is_in_dst;
+          }
+        }
+
+        if (current_day == dst_start_day) {
+          return process_local_dst_start_day(time_of_day,
+                                             dst_start_offset_minutes,
+                                             dst_length_minutes);
+        }
+      
+        if (current_day == dst_end_day) {
+          return process_local_dst_end_day(time_of_day,
+                                           dst_end_offset_minutes,
+                                           dst_length_minutes);
+        }
+        //you should never reach this statement
+        return invalid_time_label;
+      }
+
+    };
+
+
+    //! Compile-time configurable daylight savings time calculation engine
+    /* This template provides the ability to configure a daylight savings
+     * calculation at compile time covering all the cases.  Unfortunately
+     * because of the number of dimensions related to daylight savings
+     * calculation the number of parameters is high.  In addition, the
+     * start and end transition rules are complex types that specify 
+     * an algorithm for calculation of the starting day and ending
+     * day of daylight savings time including the month and day 
+     * specifications (eg: last sunday in October).
+     *
+     * @param date_type A type that represents dates, typically gregorian::date
+     * @param time_duration_type Used for the offset in the day calculations
+     * @param dst_traits A set of traits that define the rules of dst 
+     *        calculation.  The dst_trait must include the following:
+     * start_rule_functor - Rule to calculate the starting date of a
+     *                      dst transition (eg: last_kday_of_month).
+     * start_day - static function that returns month of dst start for 
+     *             start_rule_functor
+     * start_month -static function that returns day or day of week for 
+     *              dst start of dst
+     * end_rule_functor - Rule to calculate the end of dst day.
+     * end_day - static fucntion that returns end day for end_rule_functor
+     * end_month - static function that returns end month for end_rule_functor
+     * dst_start_offset_minutes - number of minutes from start of day to transition to dst -- 120 (or 2:00 am) is typical for the U.S. and E.U.
+     * dst_start_offset_minutes - number of minutes from start of day to transition off of dst -- 180 (or 3:00 am) is typical for E.U. 
+     * dst_length_minutes - number of minutes that dst shifts clock
+     */
+    template<class date_type, 
+             class time_duration_type,
+             class dst_traits>
+    class dst_calc_engine
+    {
+    public:
+      typedef typename date_type::year_type year_type;
+      typedef typename date_type::calendar_type calendar_type;
+      typedef dst_calculator<date_type, time_duration_type> dstcalc;
+
+      //! Calculates if the given local time is dst or not
+      /*! Determines if the time is really in DST or not.  Also checks for 
+       *  invalid and ambiguous.
+       *  @retval The time is either ambiguous, invalid, in dst, or not in dst
+       */
+      static time_is_dst_result local_is_dst(const date_type& d,
+                                             const time_duration_type& td) 
+      {
+
+        year_type y = d.year();
+        date_type dst_start = local_dst_start_day(y);
+        date_type dst_end   = local_dst_end_day(y);
+        return dstcalc::local_is_dst(d,td,
+                                     dst_start,
+                                     dst_traits::dst_start_offset_minutes(),
+                                     dst_end, 
+                                     dst_traits::dst_end_offset_minutes(), 
+                                     dst_traits::dst_shift_length_minutes());
+      
+      }
+
+      static bool is_dst_boundary_day(date_type d)
+      {
+        year_type y = d.year();
+        return ((d == local_dst_start_day(y)) ||
+                (d == local_dst_end_day(y)));
+      }
+
+      //! The time of day for the dst transition (eg: typically 01:00:00 or 02:00:00)
+      static time_duration_type dst_offset() 
+      {
+        return time_duration_type(0,dst_traits::dst_shift_length_minutes(),0);
+      }
+
+      static date_type local_dst_start_day(year_type year)
+      {
+        return dst_traits::local_dst_start_day(year);      
+      }
+
+      static date_type local_dst_end_day(year_type year)
+      {
+        return dst_traits::local_dst_end_day(year);
+      }
+
+
+    };
+
+    //! Depricated: Class to calculate dst boundaries for US time zones
+    /* Use dst_calc_engine instead.
+     * In 2007 US/Canada DST rules changed
+     * (http://en.wikipedia.org/wiki/Energy_Policy_Act_of_2005#Change_to_daylight_saving_time).
+     */
+    template<class date_type_, 
+             class time_duration_type_,
+             unsigned int dst_start_offset_minutes=120, //from start of day 
+             short dst_length_minutes=60>  //1 hour == 60 min in US
+    class us_dst_rules 
+    {
+    public:
+      typedef time_duration_type_ time_duration_type;
+      typedef date_type_ date_type;
+      typedef typename date_type::year_type year_type;
+      typedef typename date_type::calendar_type calendar_type;
+      typedef date_time::last_kday_of_month<date_type> lkday;
+      typedef date_time::first_kday_of_month<date_type> fkday;
+      typedef date_time::nth_kday_of_month<date_type> nkday;
+      typedef dst_calculator<date_type, time_duration_type> dstcalc;
+
+      //! Calculates if the given local time is dst or not
+      /*! Determines if the time is really in DST or not.  Also checks for 
+       *  invalid and ambiguous.
+       *  @retval The time is either ambiguous, invalid, in dst, or not in dst
+       */
+      static time_is_dst_result local_is_dst(const date_type& d,
+                                             const time_duration_type& td) 
+      {
+
+        year_type y = d.year();
+        date_type dst_start = local_dst_start_day(y);
+        date_type dst_end   = local_dst_end_day(y);
+        return dstcalc::local_is_dst(d,td,
+                                     dst_start,dst_start_offset_minutes,
+                                     dst_end, dst_start_offset_minutes, 
+                                     dst_length_minutes);
+      
+      }
+
+
+      static bool is_dst_boundary_day(date_type d)
+      {
+        year_type y = d.year();
+        return ((d == local_dst_start_day(y)) ||
+                (d == local_dst_end_day(y)));
+      }
+
+      static date_type local_dst_start_day(year_type year)
+      {
+        if (year >= year_type(2007)) {
+          //second sunday in march
+          nkday ssim(nkday::second, Sunday, gregorian::Mar);
+          return ssim.get_date(year);      
+        } else {
+          //first sunday in april
+          fkday fsia(Sunday, gregorian::Apr);
+          return fsia.get_date(year);      
+        }
+      }
+
+      static date_type local_dst_end_day(year_type year)
+      {
+        if (year >= year_type(2007)) {
+          //first sunday in november
+          fkday fsin(Sunday, gregorian::Nov);
+          return fsin.get_date(year);      
+        } else {
+          //last sunday in october
+          lkday lsio(Sunday, gregorian::Oct);
+          return lsio.get_date(year);
+        }
+      }
+
+      static time_duration_type dst_offset()
+      {
+        return time_duration_type(0,dst_length_minutes,0);
+      }
+
+     private:
+
+
+    };
+
+    //! Used for local time adjustments in places that don't use dst
+    template<class date_type_, class time_duration_type_>
+    class null_dst_rules
+    {
+    public:
+      typedef time_duration_type_ time_duration_type;
+      typedef date_type_ date_type;
+
+
+      //! Calculates if the given local time is dst or not
+      /*! @retval Always is_not_in_dst since this is for zones without dst
+       */
+      static time_is_dst_result local_is_dst(const date_type&, 
+                                             const time_duration_type&) 
+      {
+        return is_not_in_dst;
+      }
+    
+      //! Calculates if the given utc time is in dst
+      static time_is_dst_result utc_is_dst(const date_type&, 
+                                           const time_duration_type&) 
+      {
+        return is_not_in_dst;
+      }
+
+      static bool is_dst_boundary_day(date_type /*d*/)
+      {
+        return false;
+      }
+
+      static time_duration_type dst_offset() 
+      {
+        return time_duration_type(0,0,0);
+      }
+
+    };
+
+
+  } } //namespace date_time
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/filetime_functions.hpp b/vendor/pdalboost/boost/date_time/filetime_functions.hpp
new file mode 100644
index 0000000..8733bdc
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/filetime_functions.hpp
@@ -0,0 +1,170 @@
+#ifndef DATE_TIME_FILETIME_FUNCTIONS_HPP__
+#define DATE_TIME_FILETIME_FUNCTIONS_HPP__
+
+/* Copyright (c) 2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+/*! @file filetime_functions.hpp
+ * Function(s) for converting between a FILETIME structure and a
+ * time object. This file is only available on systems that have
+ * BOOST_HAS_FTIME defined.
+ */
+
+#include <boost/date_time/compiler_config.hpp>
+
+#if defined(BOOST_HAS_FTIME) // skip this file if no FILETIME
+
+#if defined(BOOST_USE_WINDOWS_H)
+#  include <windows.h>
+#endif
+
+#include <boost/cstdint.hpp>
+#include <boost/date_time/time.hpp>
+#include <boost/date_time/date_defs.hpp>
+
+namespace pdalboost {
+
+namespace date_time {
+
+namespace winapi {
+
+#if !defined(BOOST_USE_WINDOWS_H)
+
+    extern "C" {
+
+        struct FILETIME
+        {
+            pdalboost::uint32_t dwLowDateTime;
+            pdalboost::uint32_t dwHighDateTime;
+        };
+        struct SYSTEMTIME
+        {
+            pdalboost::uint16_t wYear;
+            pdalboost::uint16_t wMonth;
+            pdalboost::uint16_t wDayOfWeek;
+            pdalboost::uint16_t wDay;
+            pdalboost::uint16_t wHour;
+            pdalboost::uint16_t wMinute;
+            pdalboost::uint16_t wSecond;
+            pdalboost::uint16_t wMilliseconds;
+        };
+
+        __declspec(dllimport) void __stdcall GetSystemTimeAsFileTime(FILETIME* lpFileTime);
+        __declspec(dllimport) int __stdcall FileTimeToLocalFileTime(const FILETIME* lpFileTime, FILETIME* lpLocalFileTime);
+        __declspec(dllimport) void __stdcall GetSystemTime(SYSTEMTIME* lpSystemTime);
+        __declspec(dllimport) int __stdcall SystemTimeToFileTime(const SYSTEMTIME* lpSystemTime, FILETIME* lpFileTime);
+
+    } // extern "C"
+
+#endif // defined(BOOST_USE_WINDOWS_H)
+
+    typedef FILETIME file_time;
+    typedef SYSTEMTIME system_time;
+
+    inline void get_system_time_as_file_time(file_time& ft)
+    {
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205))
+        // Some runtime library implementations expect local times as the norm for ctime.
+        file_time ft_utc;
+        GetSystemTimeAsFileTime(&ft_utc);
+        FileTimeToLocalFileTime(&ft_utc, &ft);
+#elif defined(BOOST_HAS_GETSYSTEMTIMEASFILETIME)
+        GetSystemTimeAsFileTime(&ft);
+#else
+        system_time st;
+        GetSystemTime(&st);
+        SystemTimeToFileTime(&st, &ft);
+#endif
+    }
+
+    /*!
+     * The function converts file_time into number of microseconds elapsed since 1970-Jan-01
+     *
+     * \note Only dates after 1970-Jan-01 are supported. Dates before will be wrapped.
+     *
+     * \note The function is templated on the FILETIME type, so that
+     *       it can be used with both native FILETIME and the ad-hoc
+     *       pdalboost::date_time::winapi::file_time type.
+     */
+    template< typename FileTimeT >
+    inline pdalboost::uint64_t file_time_to_microseconds(FileTimeT const& ft)
+    {
+        /* shift is difference between 1970-Jan-01 & 1601-Jan-01
+        * in 100-nanosecond intervals */
+        const uint64_t shift = 116444736000000000ULL; // (27111902 << 32) + 3577643008
+
+        union {
+            FileTimeT as_file_time;
+            uint64_t as_integer; // 100-nanos since 1601-Jan-01
+        } caster;
+        caster.as_file_time = ft;
+
+        caster.as_integer -= shift; // filetime is now 100-nanos since 1970-Jan-01
+        return (caster.as_integer / 10); // truncate to microseconds
+    }
+
+} // namespace winapi
+
+//! Create a time object from an initialized FILETIME struct.
+/*!
+ * Create a time object from an initialized FILETIME struct.
+ * A FILETIME struct holds 100-nanosecond units (0.0000001). When
+ * built with microsecond resolution the file_time's sub second value
+ * will be truncated. Nanosecond resolution has no truncation.
+ *
+ * \note The function is templated on the FILETIME type, so that
+ *       it can be used with both native FILETIME and the ad-hoc
+ *       pdalboost::date_time::winapi::file_time type.
+ */
+template< typename TimeT, typename FileTimeT >
+inline
+TimeT time_from_ftime(const FileTimeT& ft)
+{
+    typedef typename TimeT::date_type date_type;
+    typedef typename TimeT::date_duration_type date_duration_type;
+    typedef typename TimeT::time_duration_type time_duration_type;
+
+    // https://svn.boost.org/trac/boost/ticket/2523
+    // Since this function can be called with arbitrary times, including ones that
+    // are before 1970-Jan-01, we'll have to cast the time a bit differently,
+    // than it is done in the file_time_to_microseconds function. This allows to
+    // avoid integer wrapping for dates before 1970-Jan-01.
+    union {
+        FileTimeT as_file_time;
+        uint64_t as_integer; // 100-nanos since 1601-Jan-01
+    } caster;
+    caster.as_file_time = ft;
+
+    uint64_t sec = caster.as_integer / 10000000UL;
+    uint32_t sub_sec = (caster.as_integer % 10000000UL) // 100-nanoseconds since the last second
+#if !defined(BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG)
+        / 10; // microseconds since the last second
+#else
+        * 100; // nanoseconds since the last second
+#endif
+
+    // split sec into usable chunks: days, hours, minutes, & seconds
+    const uint32_t sec_per_day = 86400; // seconds per day
+    uint32_t days = static_cast< uint32_t >(sec / sec_per_day);
+    uint32_t tmp = static_cast< uint32_t >(sec % sec_per_day);
+    uint32_t hours = tmp / 3600; // sec_per_hour
+    tmp %= 3600;
+    uint32_t minutes = tmp / 60; // sec_per_min
+    tmp %= 60;
+    uint32_t seconds = tmp; // seconds
+
+    date_duration_type dd(days);
+    date_type d = date_type(1601, Jan, 01) + dd;
+    return TimeT(d, time_duration_type(hours, minutes, seconds, sub_sec));
+}
+
+}} // pdalboost::date_time
+
+#endif // BOOST_HAS_FTIME
+
+#endif // DATE_TIME_FILETIME_FUNCTIONS_HPP__
diff --git a/vendor/pdalboost/boost/date_time/gregorian/conversion.hpp b/vendor/pdalboost/boost/date_time/gregorian/conversion.hpp
new file mode 100644
index 0000000..65b1c36
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/conversion.hpp
@@ -0,0 +1,68 @@
+#ifndef _GREGORIAN__CONVERSION_HPP___
+#define _GREGORIAN__CONVERSION_HPP___
+
+/* Copyright (c) 2004-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include <cstring>
+#include <string>
+#include <stdexcept>
+#include <boost/throw_exception.hpp>
+#include <boost/date_time/c_time.hpp>
+#include <boost/date_time/special_defs.hpp>
+#include <boost/date_time/gregorian/gregorian_types.hpp>
+
+namespace pdalboost {
+
+namespace gregorian {
+
+  //! Converts a date to a tm struct. Throws out_of_range exception if date is a special value
+  inline
+  std::tm to_tm(const date& d)
+  {
+    if (d.is_special())
+    {
+        std::string s = "tm unable to handle ";
+        switch (d.as_special())
+        {
+        case date_time::not_a_date_time:
+            s += "not-a-date-time value"; break;
+        case date_time::neg_infin:
+            s += "-infinity date value"; break;
+        case date_time::pos_infin:
+            s += "+infinity date value"; break;
+        default:
+            s += "a special date value"; break;
+        }
+        pdalboost::throw_exception(std::out_of_range(s));
+    }
+
+    std::tm datetm;
+    std::memset(&datetm, 0, sizeof(datetm));
+    pdalboost::gregorian::date::ymd_type ymd = d.year_month_day();
+    datetm.tm_year = ymd.year - 1900;
+    datetm.tm_mon = ymd.month - 1;
+    datetm.tm_mday = ymd.day;
+    datetm.tm_wday = d.day_of_week();
+    datetm.tm_yday = d.day_of_year() - 1;
+    datetm.tm_isdst = -1; // negative because not enough info to set tm_isdst
+    return datetm;
+  }
+
+  //! Converts a tm structure into a date dropping the any time values.
+  inline
+  date date_from_tm(const std::tm& datetm)
+  {
+    return date(static_cast<unsigned short>(datetm.tm_year+1900),
+                static_cast<unsigned short>(datetm.tm_mon+1),
+                static_cast<unsigned short>(datetm.tm_mday));
+  }
+
+} } //namespace pdalboost::gregorian
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/gregorian/formatters.hpp b/vendor/pdalboost/boost/date_time/gregorian/formatters.hpp
new file mode 100644
index 0000000..7803019
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/formatters.hpp
@@ -0,0 +1,162 @@
+#ifndef GREGORIAN_FORMATTERS_HPP___
+#define GREGORIAN_FORMATTERS_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include "boost/date_time/compiler_config.hpp"
+#include "boost/date_time/gregorian/gregorian_types.hpp"
+#if defined(BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS)
+#include "boost/date_time/date_formatting_limited.hpp"
+#else
+#include "boost/date_time/date_formatting.hpp"
+#endif
+#include "boost/date_time/iso_format.hpp"
+#include "boost/date_time/date_format_simple.hpp"
+
+/* NOTE: "to_*_string" code for older compilers, ones that define 
+ * BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS, is located in 
+ * formatters_limited.hpp
+ */
+
+namespace pdalboost {
+namespace gregorian {
+
+  // wrapper function for to_simple_(w)string(date)
+  template<class charT>
+  inline 
+  std::basic_string<charT> to_simple_string_type(const date& d) {
+    return date_time::date_formatter<date,date_time::simple_format<charT>,charT>::date_to_string(d);
+  }
+  //! To YYYY-mmm-DD string where mmm 3 char month name. Example:  2002-Jan-01
+  /*!\ingroup date_format
+   */
+  inline std::string to_simple_string(const date& d) {
+    return to_simple_string_type<char>(d);
+  }
+
+
+  // wrapper function for to_simple_(w)string(date_period)
+  template<class charT>
+  inline std::basic_string<charT> to_simple_string_type(const date_period& d) {
+    typedef std::basic_string<charT> string_type;
+    charT b = '[', m = '/', e=']';
+
+    string_type d1(date_time::date_formatter<date,date_time::simple_format<charT>,charT>::date_to_string(d.begin()));
+    string_type d2(date_time::date_formatter<date,date_time::simple_format<charT>,charT>::date_to_string(d.last()));
+    return string_type(b + d1 + m + d2 + e);
+  }
+  //! Convert date period to simple string. Example: [2002-Jan-01/2002-Jan-02]
+  /*!\ingroup date_format
+   */
+  inline std::string to_simple_string(const date_period& d) {
+    return to_simple_string_type<char>(d);
+  }
+
+  // wrapper function for to_iso_(w)string(date_period)
+  template<class charT>
+  inline std::basic_string<charT> to_iso_string_type(const date_period& d) {
+    charT sep = '/';
+    std::basic_string<charT> s(date_time::date_formatter<date,date_time::iso_format<charT>,charT>::date_to_string(d.begin()));
+    return s + sep + date_time::date_formatter<date,date_time::iso_format<charT>,charT>::date_to_string(d.last());
+  }
+  //! Date period to iso standard format CCYYMMDD/CCYYMMDD. Example: 20021225/20021231
+  /*!\ingroup date_format
+   */
+  inline std::string to_iso_string(const date_period& d) {
+    return to_iso_string_type<char>(d);
+  }
+
+
+  // wrapper function for to_iso_extended_(w)string(date)
+  template<class charT>
+  inline std::basic_string<charT> to_iso_extended_string_type(const date& d) {
+    return date_time::date_formatter<date,date_time::iso_extended_format<charT>,charT>::date_to_string(d);
+  }
+  //! Convert to iso extended format string CCYY-MM-DD. Example 2002-12-31
+  /*!\ingroup date_format
+   */
+  inline std::string to_iso_extended_string(const date& d) {
+    return to_iso_extended_string_type<char>(d);
+  }
+
+  // wrapper function for to_iso_(w)string(date)
+  template<class charT>
+  inline std::basic_string<charT> to_iso_string_type(const date& d) {
+    return date_time::date_formatter<date,date_time::iso_format<charT>,charT>::date_to_string(d);
+  }
+  //! Convert to iso standard string YYYYMMDD. Example: 20021231
+  /*!\ingroup date_format
+   */
+  inline std::string to_iso_string(const date& d) {
+    return to_iso_string_type<char>(d);
+  }
+
+  
+  
+
+  // wrapper function for to_sql_(w)string(date)
+  template<class charT>
+  inline std::basic_string<charT> to_sql_string_type(const date& d) 
+  {
+    date::ymd_type ymd = d.year_month_day();
+    std::basic_ostringstream<charT> ss;
+    ss << ymd.year << "-"
+       << std::setw(2) << std::setfill(ss.widen('0')) 
+       << ymd.month.as_number() //solves problem with gcc 3.1 hanging
+       << "-"
+       << std::setw(2) << std::setfill(ss.widen('0')) 
+       << ymd.day;
+    return ss.str();
+  }
+  inline std::string to_sql_string(const date& d) {
+    return to_sql_string_type<char>(d);
+  }
+
+
+#if !defined(BOOST_NO_STD_WSTRING)
+  //! Convert date period to simple string. Example: [2002-Jan-01/2002-Jan-02]
+  /*!\ingroup date_format
+   */
+  inline std::wstring to_simple_wstring(const date_period& d) {
+    return to_simple_string_type<wchar_t>(d);
+  }
+  //! To YYYY-mmm-DD string where mmm 3 char month name. Example:  2002-Jan-01
+  /*!\ingroup date_format
+   */
+  inline std::wstring to_simple_wstring(const date& d) {
+    return to_simple_string_type<wchar_t>(d);
+  }
+  //! Date period to iso standard format CCYYMMDD/CCYYMMDD. Example: 20021225/20021231
+  /*!\ingroup date_format
+   */
+  inline std::wstring to_iso_wstring(const date_period& d) {
+    return to_iso_string_type<wchar_t>(d);
+  }
+  //! Convert to iso extended format string CCYY-MM-DD. Example 2002-12-31
+  /*!\ingroup date_format
+   */
+  inline std::wstring to_iso_extended_wstring(const date& d) {
+    return to_iso_extended_string_type<wchar_t>(d);
+  }
+  //! Convert to iso standard string YYYYMMDD. Example: 20021231
+  /*!\ingroup date_format
+   */
+  inline std::wstring to_iso_wstring(const date& d) {
+    return to_iso_string_type<wchar_t>(d);
+  }
+  inline std::wstring to_sql_wstring(const date& d) {
+    return to_sql_string_type<wchar_t>(d);
+  }
+#endif // BOOST_NO_STD_WSTRING
+
+} } //namespace gregorian
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/gregorian/formatters_limited.hpp b/vendor/pdalboost/boost/date_time/gregorian/formatters_limited.hpp
new file mode 100644
index 0000000..82900fc
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/formatters_limited.hpp
@@ -0,0 +1,81 @@
+#ifndef GREGORIAN_FORMATTERS_LIMITED_HPP___
+#define GREGORIAN_FORMATTERS_LIMITED_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include "boost/date_time/gregorian/gregorian_types.hpp"
+#include "boost/date_time/date_formatting_limited.hpp"
+#include "boost/date_time/iso_format.hpp"
+#include "boost/date_time/date_format_simple.hpp"
+#include "boost/date_time/compiler_config.hpp"
+
+namespace pdalboost {
+namespace gregorian {
+
+  //! To YYYY-mmm-DD string where mmm 3 char month name. Example:  2002-Jan-01
+  /*!\ingroup date_format
+   */
+  inline std::string to_simple_string(const date& d) {
+    return date_time::date_formatter<date,date_time::simple_format<char> >::date_to_string(d);
+  }
+
+  //! Convert date period to simple string. Example: [2002-Jan-01/2002-Jan-02]
+  /*!\ingroup date_format
+   */
+  inline std::string to_simple_string(const date_period& d) {
+    std::string s("[");
+    std::string d1(date_time::date_formatter<date,date_time::simple_format<char> >::date_to_string(d.begin()));
+    std::string d2(date_time::date_formatter<date,date_time::simple_format<char> >::date_to_string(d.last()));
+    return std::string("[" + d1 + "/" + d2 + "]");
+  }
+
+  //! Date period to iso standard format CCYYMMDD/CCYYMMDD. Example: 20021225/20021231
+  /*!\ingroup date_format
+   */
+  inline std::string to_iso_string(const date_period& d) {
+    std::string s(date_time::date_formatter<date,date_time::iso_format<char> >::date_to_string(d.begin()));
+    return s + "/" + date_time::date_formatter<date,date_time::iso_format<char> >::date_to_string(d.last());
+  }
+
+
+  //! Convert to iso extended format string CCYY-MM-DD. Example 2002-12-31
+  /*!\ingroup date_format
+   */
+  inline std::string to_iso_extended_string(const date& d) {
+    return date_time::date_formatter<date,date_time::iso_extended_format<char> >::date_to_string(d);
+  }
+
+  //! Convert to iso standard string YYYYMMDD. Example: 20021231
+  /*!\ingroup date_format
+   */
+  inline std::string to_iso_string(const date& d) {
+    return date_time::date_formatter<date,date_time::iso_format<char> >::date_to_string(d);
+  }
+  
+  
+
+  inline std::string to_sql_string(const date& d) 
+  {
+    date::ymd_type ymd = d.year_month_day();
+    std::ostringstream ss;
+    ss << ymd.year << "-"
+       << std::setw(2) << std::setfill('0') 
+       << ymd.month.as_number() //solves problem with gcc 3.1 hanging
+       << "-"
+       << std::setw(2) << std::setfill('0') 
+       << ymd.day;
+    return ss.str();
+  }
+
+
+} } //namespace gregorian
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/gregorian/greg_calendar.hpp b/vendor/pdalboost/boost/date_time/gregorian/greg_calendar.hpp
new file mode 100644
index 0000000..98b9092
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/greg_calendar.hpp
@@ -0,0 +1,48 @@
+#ifndef GREGORIAN_GREGORIAN_CALENDAR_HPP__
+#define GREGORIAN_GREGORIAN_CALENDAR_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland
+ * $Date$
+ */
+
+#include <boost/cstdint.hpp>
+#include <boost/date_time/gregorian/greg_weekday.hpp>
+#include <boost/date_time/gregorian/greg_day_of_year.hpp>
+#include <boost/date_time/gregorian_calendar.hpp>
+#include <boost/date_time/gregorian/greg_ymd.hpp>
+#include <boost/date_time/int_adapter.hpp>
+
+namespace pdalboost {
+namespace gregorian {
+
+  //!An internal date representation that includes infinities, not a date
+  typedef date_time::int_adapter<uint32_t> fancy_date_rep;
+
+  //! Gregorian calendar for this implementation, hard work in the base
+  class gregorian_calendar :
+    public date_time::gregorian_calendar_base<greg_year_month_day, fancy_date_rep::int_type> {
+  public:
+    //! Type to hold a weekday (eg: Sunday, Monday,...)
+    typedef greg_weekday         day_of_week_type;
+    //! Counter type from 1 to 366 for gregorian dates.
+    typedef greg_day_of_year_rep day_of_year_type;
+    //! Internal date representation that handles infinity, not a date
+    typedef fancy_date_rep       date_rep_type;
+    //! Date rep implements the traits stuff as well
+    typedef fancy_date_rep       date_traits_type;
+
+
+  private:
+  };
+
+} } //namespace gregorian
+
+
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/gregorian/greg_date.hpp b/vendor/pdalboost/boost/date_time/gregorian/greg_date.hpp
new file mode 100644
index 0000000..57a6ee8
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/greg_date.hpp
@@ -0,0 +1,136 @@
+#ifndef GREG_DATE_HPP___
+#define GREG_DATE_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland
+ * $Date$
+ */
+
+#include <boost/throw_exception.hpp>
+#include <boost/date_time/date.hpp>
+#include <boost/date_time/special_defs.hpp>
+#include <boost/date_time/gregorian/greg_calendar.hpp>
+#include <boost/date_time/gregorian/greg_duration.hpp>
+
+namespace pdalboost {
+namespace gregorian {
+
+  //bring special enum values into the namespace
+  using date_time::special_values;
+  using date_time::not_special;
+  using date_time::neg_infin;
+  using date_time::pos_infin;
+  using date_time::not_a_date_time;
+  using date_time::max_date_time;
+  using date_time::min_date_time;
+
+  //! A date type based on gregorian_calendar
+  /*! This class is the primary interface for programming with
+      greogorian dates.  The is a lightweight type that can be
+      freely passed by value.  All comparison operators are
+      supported.
+      \ingroup date_basics
+  */
+  class date : public date_time::date<date, gregorian_calendar, date_duration>
+  {
+   public:
+    typedef gregorian_calendar::year_type year_type;
+    typedef gregorian_calendar::month_type month_type;
+    typedef gregorian_calendar::day_type day_type;
+    typedef gregorian_calendar::day_of_year_type day_of_year_type;
+    typedef gregorian_calendar::ymd_type ymd_type;
+    typedef gregorian_calendar::date_rep_type date_rep_type;
+    typedef gregorian_calendar::date_int_type date_int_type;
+    typedef date_duration  duration_type;
+#if !defined(DATE_TIME_NO_DEFAULT_CONSTRUCTOR)
+    //! Default constructor constructs with not_a_date_time
+    date():
+      date_time::date<date, gregorian_calendar, date_duration>(date_rep_type::from_special(not_a_date_time))
+    {}
+#endif // DATE_TIME_NO_DEFAULT_CONSTRUCTOR
+    //! Main constructor with year, month, day
+    date(year_type y, month_type m, day_type d)
+      : date_time::date<date, gregorian_calendar, date_duration>(y, m, d)
+    {
+      if (gregorian_calendar::end_of_month_day(y, m) < d) {
+        pdalboost::throw_exception(bad_day_of_month(std::string("Day of month is not valid for year")));
+      }
+    }
+    //! Constructor from a ymd_type structure
+    explicit date(const ymd_type& ymd)
+      : date_time::date<date, gregorian_calendar, date_duration>(ymd)
+    {}
+    //! Needed copy constructor
+    explicit date(const date_int_type& rhs):
+      date_time::date<date,gregorian_calendar, date_duration>(rhs)
+    {}
+    //! Needed copy constructor
+    explicit date(date_rep_type rhs):
+      date_time::date<date,gregorian_calendar, date_duration>(rhs)
+    {}
+    //! Constructor for infinities, not a date, max and min date
+    explicit date(special_values sv):
+      date_time::date<date, gregorian_calendar, date_duration>(date_rep_type::from_special(sv))
+    {
+      if (sv == min_date_time)
+      {
+        *this = date(1400, 1, 1);
+      }
+      if (sv == max_date_time)
+      {
+        *this = date(9999, 12, 31);
+      }
+
+    }
+    //!Return the Julian Day number for the date.
+    date_int_type julian_day() const
+    {
+      ymd_type ymd = year_month_day();
+      return gregorian_calendar::julian_day_number(ymd);
+    }
+    //!Return the day of year 1..365 or 1..366 (for leap year)
+    day_of_year_type day_of_year() const
+    {
+      date start_of_year(year(), 1, 1);
+      unsigned short doy = static_cast<unsigned short>((*this-start_of_year).days() + 1);
+      return day_of_year_type(doy);
+    }
+    //!Return the Modified Julian Day number for the date.
+    date_int_type modjulian_day() const
+    {
+      ymd_type ymd = year_month_day();
+      return gregorian_calendar::modjulian_day_number(ymd);
+    }
+    //!Return the iso 8601 week number 1..53
+    int week_number() const
+    {
+      ymd_type ymd = year_month_day();
+      return gregorian_calendar::week_number(ymd);
+    }
+    //! Return the day number from the calendar
+    date_int_type day_number() const
+    {
+      return days_;
+    }
+    //! Return the last day of the current month
+    date end_of_month() const
+    {
+      ymd_type ymd = year_month_day();
+      short eom_day =  gregorian_calendar::end_of_month_day(ymd.year, ymd.month);
+      return date(ymd.year, ymd.month, eom_day);
+    }
+
+   private:
+
+  };
+
+
+
+} } //namespace gregorian
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/gregorian/greg_day.hpp b/vendor/pdalboost/boost/date_time/gregorian/greg_day.hpp
new file mode 100644
index 0000000..50109b3
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/greg_day.hpp
@@ -0,0 +1,57 @@
+#ifndef GREG_DAY_HPP___
+#define GREG_DAY_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland 
+ * $Date$
+ */
+
+#include "boost/date_time/constrained_value.hpp"
+#include <stdexcept>
+#include <string>
+
+namespace pdalboost {
+namespace gregorian {
+
+  //! Exception type for gregorian day of month (1..31)
+  struct bad_day_of_month : public std::out_of_range
+  {
+    bad_day_of_month() : 
+      std::out_of_range(std::string("Day of month value is out of range 1..31")) 
+    {}
+    //! Allow other classes to throw with unique string for bad day like Feb 29
+    bad_day_of_month(const std::string& s) : 
+      std::out_of_range(s) 
+    {}
+  };
+  //! Policy class that declares error handling and day of month ranges
+  typedef CV::simple_exception_policy<unsigned short, 1, 31, bad_day_of_month> greg_day_policies;
+
+  //! Generated represetation for gregorian day of month
+  typedef CV::constrained_value<greg_day_policies> greg_day_rep;
+
+  //! Represent a day of the month (range 1 - 31) 
+  /*! This small class allows for simple conversion an integer value into
+      a day of the month for a standard gregorian calendar.  The type 
+      is automatically range checked so values outside of the range 1-31
+      will cause a bad_day_of_month exception
+  */
+  class greg_day : public greg_day_rep {
+  public:
+    greg_day(unsigned short day_of_month) : greg_day_rep(day_of_month) {}
+    unsigned short as_number() const {return value_;}
+    operator unsigned short()  const {return value_;}
+  private:
+    
+  };
+
+
+
+} } //namespace gregorian
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/gregorian/greg_day_of_year.hpp b/vendor/pdalboost/boost/date_time/gregorian/greg_day_of_year.hpp
new file mode 100644
index 0000000..7274a65
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/greg_day_of_year.hpp
@@ -0,0 +1,38 @@
+#ifndef GREG_DAY_OF_YEAR_HPP___
+#define GREG_DAY_OF_YEAR_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland 
+ * $Date$
+ */
+
+#include "boost/date_time/constrained_value.hpp"
+#include <stdexcept>
+#include <string>
+
+namespace pdalboost {
+namespace gregorian {
+
+  //! Exception type for day of year (1..366)
+  struct bad_day_of_year : public std::out_of_range
+  {
+    bad_day_of_year() : 
+      std::out_of_range(std::string("Day of year value is out of range 1..366")) 
+    {}
+  };
+
+  //! A day of the year range (1..366)
+  typedef CV::simple_exception_policy<unsigned short,1,366,bad_day_of_year> greg_day_of_year_policies;
+
+  //! Define a range representation type for the day of the year 1..366
+  typedef CV::constrained_value<greg_day_of_year_policies> greg_day_of_year_rep;
+
+
+} } //namespace gregorian
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/gregorian/greg_duration.hpp b/vendor/pdalboost/boost/date_time/gregorian/greg_duration.hpp
new file mode 100644
index 0000000..d7c0613
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/greg_duration.hpp
@@ -0,0 +1,134 @@
+#ifndef GREG_DURATION_HPP___
+#define GREG_DURATION_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst 
+ * $Date$
+ */
+
+#include <boost/date_time/date_duration.hpp>
+#include <boost/date_time/int_adapter.hpp>
+#include <boost/date_time/special_defs.hpp>
+
+namespace pdalboost {
+namespace gregorian {
+
+  //!An internal date representation that includes infinities, not a date
+  typedef pdalboost::date_time::duration_traits_adapted date_duration_rep;
+
+  //! Durations in days for gregorian system
+  /*! \ingroup date_basics
+   */
+  class date_duration :
+    public pdalboost::date_time::date_duration< date_duration_rep >
+  {
+    typedef pdalboost::date_time::date_duration< date_duration_rep > base_type;
+
+  public:
+    typedef base_type::duration_rep duration_rep;
+
+    //! Construct from a day count
+    explicit date_duration(duration_rep day_count = 0) : base_type(day_count) {}
+
+    //! construct from special_values
+    date_duration(date_time::special_values sv) : base_type(sv) {}
+
+    //! Copy constructor
+    date_duration(const date_duration& other) : base_type(static_cast< base_type const& >(other))
+    {}
+
+    //! Construct from another date_duration
+    date_duration(const base_type& other) : base_type(other)
+    {}
+
+    //  Relational operators
+    //  NOTE: Because of date_time::date_duration< T > design choice we don't use Boost.Operators here,
+    //  because we need the class to be a direct base. Either lose EBO, or define operators by hand.
+    //  The latter is more effecient.
+    bool operator== (const date_duration& rhs) const
+    {
+      return base_type::operator== (rhs);
+    }
+    bool operator!= (const date_duration& rhs) const
+    {
+      return !operator== (rhs);
+    }
+    bool operator< (const date_duration& rhs) const
+    {
+      return base_type::operator< (rhs);
+    }
+    bool operator> (const date_duration& rhs) const
+    {
+      return !(base_type::operator< (rhs) || base_type::operator== (rhs));
+    }
+    bool operator<= (const date_duration& rhs) const
+    {
+      return (base_type::operator< (rhs) || base_type::operator== (rhs));
+    }
+    bool operator>= (const date_duration& rhs) const
+    {
+      return !base_type::operator< (rhs);
+    }
+
+    //! Subtract another duration -- result is signed
+    date_duration& operator-= (const date_duration& rhs)
+    {
+      base_type::operator-= (rhs);
+      return *this;
+    }
+    friend date_duration operator- (date_duration rhs, date_duration const& lhs)
+    {
+      rhs -= lhs;
+      return rhs;
+    }
+
+    //! Add a duration -- result is signed
+    date_duration& operator+= (const date_duration& rhs)
+    {
+      base_type::operator+= (rhs);
+      return *this;
+    }
+    friend date_duration operator+ (date_duration rhs, date_duration const& lhs)
+    {
+      rhs += lhs;
+      return rhs;
+    }
+
+    //! unary- Allows for dd = -date_duration(2); -> dd == -2
+    date_duration operator- ()const
+    {
+      return date_duration(get_rep() * (-1));
+    }
+
+    //! Division operations on a duration with an integer.
+    date_duration& operator/= (int divisor)
+    {
+      base_type::operator/= (divisor);
+      return *this;
+    }
+    friend date_duration operator/ (date_duration rhs, int lhs)
+    {
+      rhs /= lhs;
+      return rhs;
+    }
+
+    //! Returns the smallest duration -- used by to calculate 'end'
+    static date_duration unit()
+    {
+      return date_duration(base_type::unit().get_rep());
+    }
+  };      
+
+  //! Shorthand for date_duration
+  typedef date_duration days;
+
+} } //namespace gregorian
+
+#if defined(BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES)
+#include <boost/date_time/date_duration_types.hpp>
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/gregorian/greg_duration_types.hpp b/vendor/pdalboost/boost/date_time/gregorian/greg_duration_types.hpp
new file mode 100644
index 0000000..b80cf4a
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/greg_duration_types.hpp
@@ -0,0 +1,43 @@
+#ifndef GREG_DURATION_TYPES_HPP___
+#define GREG_DURATION_TYPES_HPP___
+                                                                                
+/* Copyright (c) 2004 CrystalClear Software, Inc.
+ * Subject to Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+#include <boost/date_time/gregorian/greg_date.hpp>
+#include <boost/date_time/int_adapter.hpp>
+#include <boost/date_time/adjust_functors.hpp>
+#include <boost/date_time/date_duration_types.hpp>
+#include <boost/date_time/gregorian/greg_duration.hpp>
+
+namespace pdalboost {
+namespace gregorian {
+
+  //! config struct for additional duration types (ie months_duration<> & years_duration<>)
+  struct greg_durations_config {
+    typedef date date_type;
+    typedef date_time::int_adapter<int> int_rep;
+    typedef date_time::month_functor<date_type> month_adjustor_type; 
+  };
+
+  typedef date_time::months_duration<greg_durations_config> months;
+  typedef date_time::years_duration<greg_durations_config> years;
+
+  class weeks_duration : public date_duration {
+  public:
+    weeks_duration(duration_rep w) 
+      : date_duration(w * 7) {}
+    weeks_duration(date_time::special_values sv) 
+      : date_duration(sv) {}
+  };
+
+  typedef weeks_duration weeks;
+
+}} // namespace pdalboost::gregorian
+
+#endif // GREG_DURATION_TYPES_HPP___
diff --git a/vendor/pdalboost/boost/date_time/gregorian/greg_facet.hpp b/vendor/pdalboost/boost/date_time/gregorian/greg_facet.hpp
new file mode 100644
index 0000000..000f45f
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/greg_facet.hpp
@@ -0,0 +1,352 @@
+#ifndef GREGORIAN_FACET_HPP___
+#define GREGORIAN_FACET_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include "boost/date_time/gregorian/gregorian_types.hpp"
+#include "boost/date_time/date_formatting_locales.hpp" // sets BOOST_DATE_TIME_NO_LOCALE
+#include "boost/date_time/gregorian/parsers.hpp"
+
+//This file is basically commented out if locales are not supported
+#ifndef BOOST_DATE_TIME_NO_LOCALE
+
+#include <string>
+#include <memory>
+#include <locale>
+#include <iostream>
+#include <exception>
+
+namespace pdalboost {
+namespace gregorian {
+  
+  //! Configuration of the output facet template
+  struct greg_facet_config
+  {
+    typedef pdalboost::gregorian::greg_month month_type;
+    typedef pdalboost::date_time::special_values special_value_enum;
+    typedef pdalboost::gregorian::months_of_year month_enum;
+    typedef pdalboost::date_time::weekdays weekday_enum;
+  };
+
+#if defined(USE_DATE_TIME_PRE_1_33_FACET_IO)
+  //! Create the base facet type for gregorian::date
+  typedef pdalboost::date_time::date_names_put<greg_facet_config> greg_base_facet;
+
+  //! ostream operator for gregorian::date
+  /*! Uses the date facet to determine various output parameters including:
+   *  - string values for the month (eg: Jan, Feb, Mar) (default: English)
+   *  - string values for special values (eg: not-a-date-time) (default: English)
+   *  - selection of long, short strings, or numerical month representation (default: short string)
+   *  - month day year order (default yyyy-mmm-dd)
+   */
+  template <class charT, class traits>
+  inline
+  std::basic_ostream<charT, traits>&
+  operator<<(std::basic_ostream<charT, traits>& os, const date& d)
+  {
+    typedef pdalboost::date_time::date_names_put<greg_facet_config, charT> facet_def;
+    typedef pdalboost::date_time::ostream_date_formatter<date, facet_def, charT> greg_ostream_formatter;
+    greg_ostream_formatter::date_put(d, os);
+    return os;
+  }
+
+  //! operator<< for gregorian::greg_month typically streaming: Jan, Feb, Mar...
+  /*! Uses the date facet to determine output string as well as selection of long or short strings.
+   *  Default if no facet is installed is to output a 2 wide numeric value for the month
+   *  eg: 01 == Jan, 02 == Feb, ... 12 == Dec.
+   */
+  template <class charT, class traits>
+  inline
+  std::basic_ostream<charT, traits>&
+  operator<<(std::basic_ostream<charT, traits>& os, const greg_month& m)
+  {
+    typedef pdalboost::date_time::date_names_put<greg_facet_config, charT> facet_def;
+    typedef pdalboost::date_time::ostream_month_formatter<facet_def, charT> greg_month_formatter;
+    std::locale locale = os.getloc();
+    if (std::has_facet<facet_def>(locale)) {
+      const facet_def& f = std::use_facet<facet_def>(locale);
+      greg_month_formatter::format_month(m, os, f);
+
+    }
+    else { //default to numeric
+      charT fill_char = '0';
+      os  << std::setw(2) << std::setfill(fill_char) << m.as_number();
+    }
+
+    return os;
+  }
+
+  //! operator<< for gregorian::greg_weekday typically streaming: Sun, Mon, Tue, ...
+  /*! Uses the date facet to determine output string as well as selection of long or short string.
+   *  Default if no facet is installed is to output a 3 char english string for the
+   *  day of the week.
+   */
+  template <class charT, class traits>
+  inline
+  std::basic_ostream<charT, traits>&
+  operator<<(std::basic_ostream<charT, traits>& os, const greg_weekday& wd)
+  {
+    typedef pdalboost::date_time::date_names_put<greg_facet_config, charT> facet_def;
+    typedef pdalboost::date_time::ostream_weekday_formatter<greg_weekday, facet_def, charT> greg_weekday_formatter;
+    std::locale locale = os.getloc();
+    if (std::has_facet<facet_def>(locale)) {
+      const facet_def& f = std::use_facet<facet_def>(locale);
+      greg_weekday_formatter::format_weekday(wd, os, f, true);
+    }
+    else { //default to short English string eg: Sun, Mon, Tue, Wed...
+      os  << wd.as_short_string();
+    }
+
+    return os;
+  }
+
+  //! operator<< for gregorian::date_period typical output: [2002-Jan-01/2002-Jan-31]
+  /*! Uses the date facet to determine output string as well as selection of long 
+   *  or short string fr dates.
+   *  Default if no facet is installed is to output a 3 char english string for the
+   *  day of the week.
+   */
+  template <class charT, class traits>
+  inline
+  std::basic_ostream<charT, traits>&
+  operator<<(std::basic_ostream<charT, traits>& os, const date_period& dp)
+  {
+    os << '['; //TODO: facet or manipulator for periods?
+    os << dp.begin();
+    os << '/'; //TODO: facet or manipulator for periods?
+    os << dp.last();
+    os << ']'; 
+    return os;
+  }
+
+  template <class charT, class traits>
+  inline
+  std::basic_ostream<charT, traits>&
+  operator<<(std::basic_ostream<charT, traits>& os, const date_duration& dd)
+  {
+    //os << dd.days();
+    os << dd.get_rep();
+    return os;
+  }
+
+  //! operator<< for gregorian::partial_date. Output: "Jan 1"
+  template <class charT, class traits>
+  inline
+  std::basic_ostream<charT, traits>&
+  operator<<(std::basic_ostream<charT, traits>& os, const partial_date& pd)
+  {
+    os << std::setw(2) << std::setfill('0') << pd.day() << ' ' 
+       << pd.month().as_short_string() ; 
+    return os;
+  }
+
+  //! operator<< for gregorian::nth_kday_of_month. Output: "first Mon of Jun"
+  template <class charT, class traits>
+  inline
+  std::basic_ostream<charT, traits>&
+  operator<<(std::basic_ostream<charT, traits>& os, 
+             const nth_kday_of_month& nkd)
+  {
+    os << nkd.nth_week_as_str() << ' ' 
+       << nkd.day_of_week() << " of "
+       << nkd.month().as_short_string() ; 
+    return os;
+  }
+
+  //! operator<< for gregorian::first_kday_of_month. Output: "first Mon of Jun"
+  template <class charT, class traits>
+  inline
+  std::basic_ostream<charT, traits>&
+  operator<<(std::basic_ostream<charT, traits>& os, 
+             const first_kday_of_month& fkd)
+  {
+    os << "first " << fkd.day_of_week() << " of " 
+       << fkd.month().as_short_string() ; 
+    return os;
+  }
+
+  //! operator<< for gregorian::last_kday_of_month. Output: "last Mon of Jun"
+  template <class charT, class traits>
+  inline
+  std::basic_ostream<charT, traits>&
+  operator<<(std::basic_ostream<charT, traits>& os, 
+             const last_kday_of_month& lkd)
+  {
+    os << "last " << lkd.day_of_week() << " of " 
+       << lkd.month().as_short_string() ; 
+    return os;
+  }
+
+  //! operator<< for gregorian::first_kday_after. Output: "first Mon after"
+  template <class charT, class traits>
+  inline
+  std::basic_ostream<charT, traits>&
+  operator<<(std::basic_ostream<charT, traits>& os, 
+             const first_kday_after& fka)
+  {
+    os << fka.day_of_week() << " after"; 
+    return os;
+  }
+
+  //! operator<< for gregorian::first_kday_before. Output: "first Mon before"
+  template <class charT, class traits>
+  inline
+  std::basic_ostream<charT, traits>&
+  operator<<(std::basic_ostream<charT, traits>& os, 
+             const first_kday_before& fkb)
+  {
+    os << fkb.day_of_week() << " before"; 
+    return os;
+  }
+#endif // USE_DATE_TIME_PRE_1_33_FACET_IO
+  /**************** Input Streaming ******************/
+  
+#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
+  //! operator>> for gregorian::date
+  template<class charT>
+  inline 
+  std::basic_istream<charT>& operator>>(std::basic_istream<charT>& is, date& d)
+  {
+    std::istream_iterator<std::basic_string<charT>, charT> beg(is), eos;
+    d = from_stream(beg, eos);
+    return is;
+  }
+#endif // BOOST_NO_STD_ITERATOR_TRAITS
+
+  //! operator>> for gregorian::date_duration
+  template<class charT>
+  inline
+  std::basic_istream<charT>& operator>>(std::basic_istream<charT>& is, 
+                                        date_duration& dd)
+  {
+    long v;
+    is >> v;
+    dd = date_duration(v);
+    return is;
+  }
+
+  //! operator>> for gregorian::date_period
+  template<class charT>
+  inline
+  std::basic_istream<charT>& operator>>(std::basic_istream<charT>& is,
+                                        date_period& dp)
+  {
+    std::basic_string<charT> s;
+    is >> s;
+    dp = date_time::from_simple_string_type<date>(s);
+    return is;
+  }
+
+  //! generates a locale with the set of gregorian name-strings of type char*
+  BOOST_DATE_TIME_DECL std::locale generate_locale(std::locale& loc, char type);
+
+  //! Returns a pointer to a facet with a default set of names (English)
+  /* Necessary in the event an exception is thrown from op>> for 
+   * weekday or month. See comments in those functions for more info */
+  BOOST_DATE_TIME_DECL pdalboost::date_time::all_date_names_put<greg_facet_config, char>* create_facet_def(char type);
+
+#ifndef BOOST_NO_STD_WSTRING
+  //! generates a locale with the set of gregorian name-strings of type wchar_t*
+  BOOST_DATE_TIME_DECL std::locale generate_locale(std::locale& loc, wchar_t type);
+  //! Returns a pointer to a facet with a default set of names (English)
+  /* Necessary in the event an exception is thrown from op>> for 
+   * weekday or month. See comments in those functions for more info */
+  BOOST_DATE_TIME_DECL pdalboost::date_time::all_date_names_put<greg_facet_config, wchar_t>* create_facet_def(wchar_t type);
+#endif // BOOST_NO_STD_WSTRING
+
+  //! operator>> for gregorian::greg_month - throws exception if invalid month given
+  template<class charT>
+  inline
+  std::basic_istream<charT>& operator>>(std::basic_istream<charT>& is,greg_month& m) 
+  {
+    typedef pdalboost::date_time::all_date_names_put<greg_facet_config, charT> facet_def;
+
+    std::basic_string<charT> s;
+    is >> s;
+    
+    if(!std::has_facet<facet_def>(is.getloc())) {
+      std::locale loc = is.getloc();
+      charT a = '\0';
+      is.imbue(generate_locale(loc, a));
+    }
+
+    short num = 0;
+
+    try{
+      const facet_def& f = std::use_facet<facet_def>(is.getloc());
+      num = date_time::find_match(f.get_short_month_names(), 
+                                  f.get_long_month_names(), 
+                                  (greg_month::max)(), s); // greg_month spans 1..12, so max returns the array size,
+                                                           // which is needed by find_match
+    }
+    /* bad_cast will be thrown if the desired facet is not accessible
+     * so we can generate the facet. This has the drawback of using english
+     * names as a default. */
+    catch(std::bad_cast&){
+      charT a = '\0';
+      std::auto_ptr< const facet_def > f(create_facet_def(a));
+      num = date_time::find_match(f->get_short_month_names(), 
+                                  f->get_long_month_names(), 
+                                  (greg_month::max)(), s); // greg_month spans 1..12, so max returns the array size,
+                                                           // which is needed by find_match
+    }
+    
+    ++num; // months numbered 1-12
+    m = greg_month(num); 
+
+    return is;
+  }
+
+  //! operator>> for gregorian::greg_weekday  - throws exception if invalid weekday given
+  template<class charT>
+  inline
+  std::basic_istream<charT>& operator>>(std::basic_istream<charT>& is,greg_weekday& wd) 
+  {
+    typedef pdalboost::date_time::all_date_names_put<greg_facet_config, charT> facet_def;
+
+    std::basic_string<charT> s;
+    is >> s;
+
+    if(!std::has_facet<facet_def>(is.getloc())) {
+      std::locale loc = is.getloc();
+      charT a = '\0';
+      is.imbue(generate_locale(loc, a));
+    }
+
+    short num = 0;
+    try{
+      const facet_def& f = std::use_facet<facet_def>(is.getloc());
+      num = date_time::find_match(f.get_short_weekday_names(), 
+                                  f.get_long_weekday_names(), 
+                                  (greg_weekday::max)() + 1, s); // greg_weekday spans 0..6, so increment is needed
+                                                                 // to form the array size which is needed by find_match
+    }
+    /* bad_cast will be thrown if the desired facet is not accessible
+     * so we can generate the facet. This has the drawback of using english
+     * names as a default. */
+    catch(std::bad_cast&){
+      charT a = '\0';
+      std::auto_ptr< const facet_def > f(create_facet_def(a));
+      num = date_time::find_match(f->get_short_weekday_names(), 
+                                  f->get_long_weekday_names(), 
+                                  (greg_weekday::max)() + 1, s); // greg_weekday spans 0..6, so increment is needed
+                                                                 // to form the array size which is needed by find_match
+    }
+   
+    wd = greg_weekday(num); // weekdays numbered 0-6
+    return is;
+  }
+
+} } //namespace gregorian
+
+#endif  
+    
+    
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/gregorian/greg_month.hpp b/vendor/pdalboost/boost/date_time/gregorian/greg_month.hpp
new file mode 100644
index 0000000..47ba279
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/greg_month.hpp
@@ -0,0 +1,105 @@
+#ifndef GREG_MONTH_HPP___
+#define GREG_MONTH_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include "boost/date_time/constrained_value.hpp"
+#include "boost/date_time/date_defs.hpp"
+#include "boost/shared_ptr.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#include <stdexcept>
+#include <string>
+#include <map>
+#include <algorithm>
+#include <cctype>
+
+namespace pdalboost {
+namespace gregorian {
+
+  typedef date_time::months_of_year months_of_year;
+
+  //bring enum values into the namespace
+  using date_time::Jan;
+  using date_time::Feb;
+  using date_time::Mar;
+  using date_time::Apr;
+  using date_time::May;
+  using date_time::Jun;
+  using date_time::Jul;
+  using date_time::Aug;
+  using date_time::Sep;
+  using date_time::Oct;
+  using date_time::Nov;
+  using date_time::Dec;
+  using date_time::NotAMonth;
+  using date_time::NumMonths;
+  
+  //! Exception thrown if a greg_month is constructed with a value out of range
+  struct bad_month : public std::out_of_range
+  {
+    bad_month() : std::out_of_range(std::string("Month number is out of range 1..12")) {}
+  };
+  //! Build a policy class for the greg_month_rep
+  typedef CV::simple_exception_policy<unsigned short, 1, 12, bad_month> greg_month_policies;
+  //! A constrained range that implements the gregorian_month rules
+  typedef CV::constrained_value<greg_month_policies> greg_month_rep;
+
+  
+  //! Wrapper class to represent months in gregorian based calendar
+  class BOOST_DATE_TIME_DECL greg_month : public greg_month_rep {
+  public:
+    typedef date_time::months_of_year month_enum;
+    typedef std::map<std::string, unsigned short> month_map_type;
+    typedef pdalboost::shared_ptr<month_map_type> month_map_ptr_type;
+    //! Construct a month from the months_of_year enumeration
+    greg_month(month_enum theMonth) : 
+      greg_month_rep(static_cast<greg_month_rep::value_type>(theMonth)) {}
+    //! Construct from a short value
+    greg_month(unsigned short theMonth) : greg_month_rep(theMonth) {}
+    //! Convert the value back to a short
+    operator unsigned short()  const {return value_;}
+    //! Returns month as number from 1 to 12
+    unsigned short as_number() const {return value_;}
+    month_enum as_enum() const {return static_cast<month_enum>(value_);}
+    const char* as_short_string() const;
+    const char* as_long_string()  const;
+#ifndef BOOST_NO_STD_WSTRING
+    const wchar_t* as_short_wstring() const;
+    const wchar_t* as_long_wstring()  const;
+#endif // BOOST_NO_STD_WSTRING
+    //! Shared pointer to a map of Month strings (Names & Abbrev) & numbers
+    static month_map_ptr_type get_month_map_ptr();
+
+    /* parameterized as_*_string functions are intended to be called
+     * from a template function: "... as_short_string(charT c='\0');" */
+    const char* as_short_string(char) const
+    {
+      return as_short_string();
+    }
+    const char* as_long_string(char) const
+    {
+      return as_long_string();
+    }
+#ifndef BOOST_NO_STD_WSTRING
+    const wchar_t* as_short_string(wchar_t) const
+    {
+      return as_short_wstring();
+    }
+    const wchar_t* as_long_string(wchar_t) const
+    {
+      return as_long_wstring();
+    }
+#endif // BOOST_NO_STD_WSTRING
+  };
+
+} } //namespace gregorian
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/gregorian/greg_weekday.hpp b/vendor/pdalboost/boost/date_time/gregorian/greg_weekday.hpp
new file mode 100644
index 0000000..f4ee117
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/greg_weekday.hpp
@@ -0,0 +1,66 @@
+#ifndef GREG_WEEKDAY_HPP___
+#define GREG_WEEKDAY_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include "boost/date_time/constrained_value.hpp"
+#include "boost/date_time/date_defs.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#include <stdexcept>
+#include <string>
+
+namespace pdalboost {
+namespace gregorian {
+
+  //bring enum values into the namespace
+  using date_time::Sunday;
+  using date_time::Monday;
+  using date_time::Tuesday;
+  using date_time::Wednesday;
+  using date_time::Thursday;
+  using date_time::Friday;
+  using date_time::Saturday;
+
+
+  //! Exception that flags that a weekday number is incorrect
+  struct bad_weekday : public std::out_of_range
+  {
+    bad_weekday() : std::out_of_range(std::string("Weekday is out of range 0..6")) {}
+  };
+  typedef CV::simple_exception_policy<unsigned short, 0, 6, bad_weekday> greg_weekday_policies;
+  typedef CV::constrained_value<greg_weekday_policies> greg_weekday_rep;
+
+
+  //! Represent a day within a week (range 0==Sun to 6==Sat)
+  class BOOST_DATE_TIME_DECL greg_weekday : public greg_weekday_rep {
+  public:
+    typedef pdalboost::date_time::weekdays weekday_enum;
+    greg_weekday(unsigned short day_of_week_num) :
+      greg_weekday_rep(day_of_week_num)
+    {}
+
+    unsigned short as_number() const {return value_;}
+    const char* as_short_string() const;
+    const char* as_long_string()  const;
+#ifndef BOOST_NO_STD_WSTRING
+    const wchar_t* as_short_wstring() const;
+    const wchar_t* as_long_wstring()  const;
+#endif // BOOST_NO_STD_WSTRING
+    weekday_enum as_enum() const {return static_cast<weekday_enum>(value_);}
+
+
+  };
+
+
+
+} } //namespace gregorian
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/gregorian/greg_year.hpp b/vendor/pdalboost/boost/date_time/gregorian/greg_year.hpp
new file mode 100644
index 0000000..102abe7
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/greg_year.hpp
@@ -0,0 +1,53 @@
+#ifndef GREG_YEAR_HPP___
+#define GREG_YEAR_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland 
+ * $Date$
+ */
+
+#include "boost/date_time/constrained_value.hpp"
+#include <stdexcept>
+#include <string>
+
+namespace pdalboost {
+namespace gregorian {
+
+  //! Exception type for gregorian year
+  struct bad_year : public std::out_of_range
+  {
+    bad_year() : 
+      std::out_of_range(std::string("Year is out of valid range: 1400..10000")) 
+    {}
+  };
+  //! Policy class that declares error handling gregorian year type
+  typedef CV::simple_exception_policy<unsigned short, 1400, 10000, bad_year> greg_year_policies;
+
+  //! Generated representation for gregorian year
+  typedef CV::constrained_value<greg_year_policies> greg_year_rep;
+
+  //! Represent a day of the month (range 1900 - 10000) 
+  /*! This small class allows for simple conversion an integer value into
+      a year for the gregorian calendar.  This currently only allows a
+      range of 1900 to 10000.  Both ends of the range are a bit arbitrary
+      at the moment, but they are the limits of current testing of the 
+      library.  As such they may be increased in the future.
+  */
+  class greg_year : public greg_year_rep {
+  public:
+    greg_year(unsigned short year) : greg_year_rep(year) {}
+    operator unsigned short()  const {return value_;}
+  private:
+    
+  };
+
+
+
+} } //namespace gregorian
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/gregorian/greg_ymd.hpp b/vendor/pdalboost/boost/date_time/gregorian/greg_ymd.hpp
new file mode 100644
index 0000000..a9cfad2
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/greg_ymd.hpp
@@ -0,0 +1,33 @@
+#ifndef DATE_TIME_GREG_YMD_HPP__
+#define DATE_TIME_GREG_YMD_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland 
+ * $Date$
+ */
+
+#include "boost/date_time/year_month_day.hpp"
+#include "boost/date_time/special_defs.hpp"
+#include "boost/date_time/gregorian/greg_day.hpp"
+#include "boost/date_time/gregorian/greg_year.hpp"
+#include "boost/date_time/gregorian/greg_month.hpp"
+
+namespace pdalboost {
+namespace gregorian {
+  
+  typedef date_time::year_month_day_base<greg_year, 
+                                         greg_month, 
+                                         greg_day> greg_year_month_day;
+  
+  
+  
+} } //namespace gregorian
+
+
+
+
+#endif
+  
diff --git a/vendor/pdalboost/boost/date_time/gregorian/gregorian_types.hpp b/vendor/pdalboost/boost/date_time/gregorian/gregorian_types.hpp
new file mode 100644
index 0000000..3efff75
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/gregorian_types.hpp
@@ -0,0 +1,109 @@
+#ifndef _GREGORIAN_TYPES_HPP__
+#define _GREGORIAN_TYPES_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+/*! @file gregorian_types.hpp
+  Single file header that defines most of the types for the gregorian 
+  date-time system.
+*/
+
+#include "boost/date_time/date.hpp"
+#include "boost/date_time/period.hpp"
+#include "boost/date_time/gregorian/greg_calendar.hpp"
+#include "boost/date_time/gregorian/greg_duration.hpp"
+#if defined(BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES)
+#include "boost/date_time/gregorian/greg_duration_types.hpp"
+#endif
+#include "boost/date_time/gregorian/greg_date.hpp"
+#include "boost/date_time/date_generators.hpp"
+#include "boost/date_time/date_clock_device.hpp"
+#include "boost/date_time/date_iterator.hpp"
+#include "boost/date_time/adjust_functors.hpp"
+
+namespace pdalboost {
+
+//! Gregorian date system based on date_time components
+/*! This date system defines a full complement of types including
+ *  a date, date_duration, date_period, day_clock, and a
+ *  day_iterator.
+ */
+namespace gregorian {
+  //! Date periods for the gregorian system
+  /*!\ingroup date_basics
+   */
+  typedef date_time::period<date, date_duration> date_period;  
+
+  //! A unifying date_generator base type
+  /*! A unifying date_generator base type for: 
+   * partial_date, nth_day_of_the_week_in_month,
+   * first_day_of_the_week_in_month, and last_day_of_the_week_in_month
+   */
+  typedef date_time::year_based_generator<date> year_based_generator;
+
+  //! A date generation object type
+  typedef date_time::partial_date<date> partial_date;
+
+  typedef date_time::nth_kday_of_month<date> nth_kday_of_month;
+  typedef nth_kday_of_month nth_day_of_the_week_in_month;
+
+  typedef date_time::first_kday_of_month<date> first_kday_of_month;
+  typedef first_kday_of_month first_day_of_the_week_in_month;
+
+  typedef date_time::last_kday_of_month<date> last_kday_of_month;
+  typedef last_kday_of_month last_day_of_the_week_in_month;
+
+  typedef date_time::first_kday_after<date> first_kday_after;
+  typedef first_kday_after first_day_of_the_week_after;
+
+  typedef date_time::first_kday_before<date> first_kday_before;
+  typedef first_kday_before first_day_of_the_week_before;
+
+  //! A clock to get the current day from the local computer
+  /*!\ingroup date_basics
+   */
+  typedef date_time::day_clock<date> day_clock;
+
+  //! Base date_iterator type for gregorian types.
+  /*!\ingroup date_basics
+   */
+  typedef date_time::date_itr_base<date> date_iterator;
+
+  //! A day level iterator
+  /*!\ingroup date_basics
+   */
+  typedef date_time::date_itr<date_time::day_functor<date>,
+                              date> day_iterator;
+  //! A week level iterator
+  /*!\ingroup date_basics
+   */
+  typedef date_time::date_itr<date_time::week_functor<date>,
+                              date> week_iterator;
+  //! A month level iterator
+  /*!\ingroup date_basics
+   */
+  typedef date_time::date_itr<date_time::month_functor<date>,
+                              date> month_iterator;
+  //! A year level iterator
+  /*!\ingroup date_basics
+   */
+  typedef date_time::date_itr<date_time::year_functor<date>,
+                              date> year_iterator;
+
+  // bring in these date_generator functions from date_time namespace
+  using date_time::days_until_weekday;
+  using date_time::days_before_weekday;
+  using date_time::next_weekday;
+  using date_time::previous_weekday;
+
+} } //namespace gregorian
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/gregorian/parsers.hpp b/vendor/pdalboost/boost/date_time/gregorian/parsers.hpp
new file mode 100644
index 0000000..54e9ccb
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian/parsers.hpp
@@ -0,0 +1,91 @@
+#ifndef GREGORIAN_PARSERS_HPP___
+#define GREGORIAN_PARSERS_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include "boost/date_time/gregorian/gregorian_types.hpp"
+#include "boost/date_time/date_parsing.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#include "boost/date_time/parse_format_base.hpp"
+#include <string>
+#include <sstream>
+
+namespace pdalboost {
+namespace gregorian {
+
+  //! Return special_value from string argument
+  /*! Return special_value from string argument. If argument is 
+   * not one of the special value names (defined in src/gregorian/names.hpp), 
+   * return 'not_special' */
+  BOOST_DATE_TIME_DECL special_values special_value_from_string(const std::string& s);
+
+  //! Deprecated: Use from_simple_string
+  inline date from_string(std::string s) {
+    return date_time::parse_date<date>(s);
+  }
+
+  //! From delimited date string where with order year-month-day eg: 2002-1-25 or 2003-Jan-25 (full month name is also accepted)
+  inline date from_simple_string(std::string s) {
+    return date_time::parse_date<date>(s, date_time::ymd_order_iso);
+  }
+  
+  //! From delimited date string where with order year-month-day eg: 1-25-2003 or Jan-25-2003 (full month name is also accepted)
+  inline date from_us_string(std::string s) {
+    return date_time::parse_date<date>(s, date_time::ymd_order_us);
+  }
+  
+  //! From delimited date string where with order day-month-year eg: 25-1-2002 or 25-Jan-2003 (full month name is also accepted)
+  inline date from_uk_string(std::string s) {
+    return date_time::parse_date<date>(s, date_time::ymd_order_dmy);
+  }
+  
+  //! From iso type date string where with order year-month-day eg: 20020125
+  inline date from_undelimited_string(std::string s) {
+    return date_time::parse_undelimited_date<date>(s);
+  }
+
+  //! From iso type date string where with order year-month-day eg: 20020125
+  inline date date_from_iso_string(const std::string& s) {
+    return date_time::parse_undelimited_date<date>(s);
+  }
+
+#if !(defined(BOOST_NO_STD_ITERATOR_TRAITS))
+  //! Stream should hold a date in the form of: 2002-1-25. Month number, abbrev, or name are accepted
+  /* Arguments passed in by-value for convertability of char[] 
+   * to iterator_type. Calls to from_stream_type are by-reference 
+   * since conversion is already done */
+  template<class iterator_type>
+  inline date from_stream(iterator_type beg, iterator_type end) {
+    if(beg == end)
+    {
+      return date(not_a_date_time);
+    }
+    typedef typename std::iterator_traits<iterator_type>::value_type value_type;
+    return  date_time::from_stream_type<date>(beg, end, value_type());
+  }
+#endif //BOOST_NO_STD_ITERATOR_TRAITS
+  
+#if (defined(_MSC_VER) && (_MSC_VER < 1300))
+    // This function cannot be compiled with MSVC 6.0 due to internal compiler shorcomings
+#else
+  //! Function to parse a date_period from a string (eg: [2003-Oct-31/2003-Dec-25])
+  inline date_period date_period_from_string(const std::string& s){
+    return date_time::from_simple_string_type<date,char>(s);
+  }
+#  if !defined(BOOST_NO_STD_WSTRING)
+  //! Function to parse a date_period from a wstring (eg: [2003-Oct-31/2003-Dec-25])
+  inline date_period date_period_from_wstring(const std::wstring& s){
+    return date_time::from_simple_string_type<date,wchar_t>(s);
+  }
+#  endif // BOOST_NO_STD_WSTRING
+#endif
+
+} } //namespace gregorian
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/gregorian_calendar.hpp b/vendor/pdalboost/boost/date_time/gregorian_calendar.hpp
new file mode 100644
index 0000000..368b393
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian_calendar.hpp
@@ -0,0 +1,70 @@
+#ifndef DATE_TIME_GREGORIAN_CALENDAR_HPP__
+#define DATE_TIME_GREGORIAN_CALENDAR_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland
+ * $Date$
+ */
+
+
+namespace pdalboost {
+namespace date_time {
+
+
+  //! An implementation of the Gregorian calendar
+  /*! This is a parameterized implementation of a proleptic Gregorian Calendar that
+      can be used in the creation of date systems or just to perform calculations.
+      All the methods of this class are static functions, so the intent is to
+      never create instances of this class.
+    @param ymd_type_ Struct type representing the year, month, day.  The ymd_type must
+           define a of types for the year, month, and day.  These types need to be
+           arithmetic types.
+    @param date_int_type_ Underlying type for the date count.  Must be an arithmetic type.
+  */
+  template<typename ymd_type_, typename date_int_type_>
+  class gregorian_calendar_base {
+  public:
+    //! define a type a date split into components
+    typedef ymd_type_  ymd_type;
+    //! define a type for representing months
+    typedef typename ymd_type::month_type  month_type;
+    //! define a type for representing days
+    typedef typename ymd_type::day_type  day_type;
+    //! Type to hold a stand alone year value (eg: 2002)
+    typedef typename ymd_type::year_type  year_type;
+    //! Define the integer type to use for internal calculations
+    typedef date_int_type_ date_int_type;
+
+
+    static unsigned short day_of_week(const ymd_type& ymd);
+    static int week_number(const ymd_type&ymd);
+    //static unsigned short day_of_year(date_int_type);
+    static date_int_type day_number(const ymd_type& ymd);
+    static date_int_type julian_day_number(const ymd_type& ymd);
+    static date_int_type modjulian_day_number(const ymd_type& ymd);
+    static ymd_type from_day_number(date_int_type);
+    static ymd_type from_julian_day_number(date_int_type);
+    static ymd_type from_modjulian_day_number(date_int_type);
+    static bool is_leap_year(year_type);
+    static unsigned short end_of_month_day(year_type y, month_type m);
+    static ymd_type epoch();
+    static unsigned short days_in_week();
+
+  };
+
+
+
+} } //namespace
+
+#ifndef NO_BOOST_DATE_TIME_INLINE
+#include "boost/date_time/gregorian_calendar.ipp"
+#endif
+
+
+
+#endif
+
+
diff --git a/vendor/pdalboost/boost/date_time/gregorian_calendar.ipp b/vendor/pdalboost/boost/date_time/gregorian_calendar.ipp
new file mode 100644
index 0000000..c4811bb
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/gregorian_calendar.ipp
@@ -0,0 +1,219 @@
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#ifndef NO_BOOST_DATE_TIME_INLINE
+  #undef BOOST_DATE_TIME_INLINE
+  #define BOOST_DATE_TIME_INLINE inline
+#endif
+
+namespace pdalboost {
+namespace date_time {
+  //! Return the day of the week (0==Sunday, 1==Monday, etc)
+  /*! Converts a year-month-day into a day of the week number
+   */
+  template<typename ymd_type_, typename date_int_type_>
+  BOOST_DATE_TIME_INLINE
+  unsigned short
+  gregorian_calendar_base<ymd_type_,date_int_type_>::day_of_week(const ymd_type& ymd) {
+    unsigned short a = static_cast<unsigned short>((14-ymd.month)/12);
+    unsigned short y = static_cast<unsigned short>(ymd.year - a);
+    unsigned short m = static_cast<unsigned short>(ymd.month + 12*a - 2);
+    unsigned short d = static_cast<unsigned short>((ymd.day + y + (y/4) - (y/100) + (y/400) + (31*m)/12) % 7);
+    //std::cout << year << "-" << month << "-" << day << " is day: " << d << "\n";
+    return d;
+  }
+
+  //!Return the iso week number for the date
+  /*!Implements the rules associated with the iso 8601 week number.
+    Basically the rule is that Week 1 of the year is the week that contains
+    January 4th or the week that contains the first Thursday in January.
+    Reference for this algorithm is the Calendar FAQ by Claus Tondering, April 2000.
+  */
+  template<typename ymd_type_, typename date_int_type_>
+  BOOST_DATE_TIME_INLINE
+  int
+  gregorian_calendar_base<ymd_type_,date_int_type_>::week_number(const ymd_type& ymd) {
+    unsigned long julianbegin = julian_day_number(ymd_type(ymd.year,1,1));
+    unsigned long juliantoday = julian_day_number(ymd);
+    unsigned long day = (julianbegin + 3) % 7;
+    unsigned long week = (juliantoday + day - julianbegin + 4)/7;
+
+    if ((week >= 1) && (week <= 52)) {
+      return static_cast<int>(week);
+    }
+
+    if (week == 53) {
+      if((day==6) ||(day == 5 && is_leap_year(ymd.year))) {
+        return static_cast<int>(week); //under these circumstances week == 53.
+      } else {
+        return 1; //monday - wednesday is in week 1 of next year
+      }
+    }
+    //if the week is not in current year recalculate using the previous year as the beginning year
+    else if (week == 0) {
+      julianbegin = julian_day_number(ymd_type(static_cast<unsigned short>(ymd.year-1),1,1));
+      juliantoday = julian_day_number(ymd);
+      day = (julianbegin + 3) % 7;
+      week = (juliantoday + day - julianbegin + 4)/7;
+      return static_cast<int>(week);
+    }
+
+    return static_cast<int>(week);  //not reachable -- well except if day == 5 and is_leap_year != true
+
+  }
+
+  //! Convert a ymd_type into a day number
+  /*! The day number is an absolute number of days since the start of count
+   */
+  template<typename ymd_type_, typename date_int_type_>
+  BOOST_DATE_TIME_INLINE
+  date_int_type_
+  gregorian_calendar_base<ymd_type_,date_int_type_>::day_number(const ymd_type& ymd)
+  {
+    unsigned short a = static_cast<unsigned short>((14-ymd.month)/12);
+    unsigned short y = static_cast<unsigned short>(ymd.year + 4800 - a);
+    unsigned short m = static_cast<unsigned short>(ymd.month + 12*a - 3);
+    unsigned long  d = ymd.day + ((153*m + 2)/5) + 365*y + (y/4) - (y/100) + (y/400) - 32045;
+    return static_cast<date_int_type>(d);
+  }
+
+  //! Convert a year-month-day into the julian day number
+  /*! Since this implementation uses julian day internally, this is the same as the day_number.
+   */
+  template<typename ymd_type_, typename date_int_type_>
+  BOOST_DATE_TIME_INLINE
+  date_int_type_
+  gregorian_calendar_base<ymd_type_,date_int_type_>::julian_day_number(const ymd_type& ymd)
+  {
+    return day_number(ymd);
+  }
+
+  //! Convert year-month-day into a modified julian day number
+  /*! The day number is an absolute number of days.
+   *  MJD 0 thus started on 17 Nov 1858(Gregorian) at 00:00:00 UTC
+   */
+  template<typename ymd_type_, typename date_int_type_>
+  BOOST_DATE_TIME_INLINE
+  date_int_type_
+  gregorian_calendar_base<ymd_type_,date_int_type_>::modjulian_day_number(const ymd_type& ymd)
+  {
+    return julian_day_number(ymd)-2400001; //prerounded
+  }
+
+  //! Change a day number into a year-month-day
+  template<typename ymd_type_, typename date_int_type_>
+  BOOST_DATE_TIME_INLINE
+  ymd_type_
+  gregorian_calendar_base<ymd_type_,date_int_type_>::from_day_number(date_int_type dayNumber)
+  {
+    date_int_type a = dayNumber + 32044;
+    date_int_type b = (4*a + 3)/146097;
+    date_int_type c = a-((146097*b)/4);
+    date_int_type d = (4*c + 3)/1461;
+    date_int_type e = c - (1461*d)/4;
+    date_int_type m = (5*e + 2)/153;
+    unsigned short day = static_cast<unsigned short>(e - ((153*m + 2)/5) + 1);
+    unsigned short month = static_cast<unsigned short>(m + 3 - 12 * (m/10));
+    year_type year = static_cast<unsigned short>(100*b + d - 4800 + (m/10));
+    //std::cout << year << "-" << month << "-" << day << "\n";
+
+    return ymd_type(static_cast<unsigned short>(year),month,day);
+  }
+
+  //! Change a day number into a year-month-day
+  template<typename ymd_type_, typename date_int_type_>
+  BOOST_DATE_TIME_INLINE
+  ymd_type_
+  gregorian_calendar_base<ymd_type_,date_int_type_>::from_julian_day_number(date_int_type dayNumber)
+  {
+    date_int_type a = dayNumber + 32044;
+    date_int_type b = (4*a+3)/146097;
+    date_int_type c = a - ((146097*b)/4);
+    date_int_type d = (4*c + 3)/1461;
+    date_int_type e = c - ((1461*d)/4);
+    date_int_type m = (5*e + 2)/153;
+    unsigned short day = static_cast<unsigned short>(e - ((153*m + 2)/5) + 1);
+    unsigned short month = static_cast<unsigned short>(m + 3 - 12 * (m/10));
+    year_type year = static_cast<year_type>(100*b + d - 4800 + (m/10));
+    //std::cout << year << "-" << month << "-" << day << "\n";
+
+    return ymd_type(year,month,day);
+  }
+
+  //! Change a modified julian day number into a year-month-day
+  template<typename ymd_type_, typename date_int_type_>
+  BOOST_DATE_TIME_INLINE
+  ymd_type_
+  gregorian_calendar_base<ymd_type_,date_int_type_>::from_modjulian_day_number(date_int_type dayNumber) {
+    date_int_type jd = dayNumber + 2400001; //is 2400000.5 prerounded
+    return from_julian_day_number(jd);
+  }
+
+  //! Determine if the provided year is a leap year
+  /*!
+   *@return true if year is a leap year, false otherwise
+   */
+  template<typename ymd_type_, typename date_int_type_>
+  BOOST_DATE_TIME_INLINE
+  bool
+  gregorian_calendar_base<ymd_type_,date_int_type_>::is_leap_year(year_type year)
+  {
+    //divisible by 4, not if divisible by 100, but true if divisible by 400
+    return (!(year % 4))  && ((year % 100) || (!(year % 400)));
+  }
+
+  //! Calculate the last day of the month
+  /*! Find the day which is the end of the month given year and month
+   *  No error checking is performed.
+   */
+  template<typename ymd_type_, typename date_int_type_>
+  BOOST_DATE_TIME_INLINE
+  unsigned short
+  gregorian_calendar_base<ymd_type_,date_int_type_>::end_of_month_day(year_type year,
+                                                                      month_type month)
+  {
+    switch (month) {
+    case 2:
+      if (is_leap_year(year)) {
+        return 29;
+      } else {
+        return 28;
+      };
+    case 4:
+    case 6:
+    case 9:
+    case 11:
+      return 30;
+    default:
+      return 31;
+    };
+
+  }
+
+  //! Provide the ymd_type specification for the calandar start
+  template<typename ymd_type_, typename date_int_type_>
+  BOOST_DATE_TIME_INLINE
+  ymd_type_
+  gregorian_calendar_base<ymd_type_,date_int_type_>::epoch()
+  {
+    return ymd_type(1400,1,1);
+  }
+
+  //! Defines length of a week for week calculations
+  template<typename ymd_type_, typename date_int_type_>
+  BOOST_DATE_TIME_INLINE
+  unsigned short
+  gregorian_calendar_base<ymd_type_,date_int_type_>::days_in_week()
+  {
+    return 7;
+  }
+
+
+} } //namespace gregorian
+
+
diff --git a/vendor/pdalboost/boost/date_time/int_adapter.hpp b/vendor/pdalboost/boost/date_time/int_adapter.hpp
new file mode 100644
index 0000000..c9d0344
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/int_adapter.hpp
@@ -0,0 +1,509 @@
+#ifndef _DATE_TIME_INT_ADAPTER_HPP__
+#define _DATE_TIME_INT_ADAPTER_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+#include "boost/config.hpp"
+#include "boost/limits.hpp" //work around compilers without limits
+#include "boost/date_time/special_defs.hpp"
+#include "boost/date_time/locale_config.hpp"
+#ifndef BOOST_DATE_TIME_NO_LOCALE
+#  include <ostream>
+#endif
+
+namespace pdalboost {
+namespace date_time {
+
+
+//! Adapter to create integer types with +-infinity, and not a value
+/*! This class is used internally in counted date/time representations.
+ *  It adds the floating point like features of infinities and
+ *  not a number. It also provides mathmatical operations with
+ *  consideration to special values following these rules:
+ *@code
+ *  +infinity  -  infinity  == Not A Number (NAN)
+ *   infinity  *  non-zero  == infinity
+ *   infinity  *  zero      == NAN
+ *  +infinity  * -integer   == -infinity
+ *   infinity  /  infinity  == NAN
+ *   infinity  *  infinity  == infinity 
+ *@endcode 
+ */
+template<typename int_type_>
+class int_adapter {
+public:
+  typedef int_type_ int_type;
+  int_adapter(int_type v) :
+    value_(v)
+  {}
+  static bool has_infinity()
+  {
+    return  true;
+  }
+  static const int_adapter  pos_infinity()
+  {
+    return (::std::numeric_limits<int_type>::max)();
+  }
+  static const int_adapter  neg_infinity()
+  {
+    return (::std::numeric_limits<int_type>::min)();
+  }
+  static const int_adapter  not_a_number()
+  {
+    return (::std::numeric_limits<int_type>::max)()-1;
+  }
+  static  int_adapter max BOOST_PREVENT_MACRO_SUBSTITUTION ()
+  {
+    return (::std::numeric_limits<int_type>::max)()-2;
+  }
+  static  int_adapter min BOOST_PREVENT_MACRO_SUBSTITUTION ()
+  {
+    return (::std::numeric_limits<int_type>::min)()+1;
+  }
+  static int_adapter from_special(special_values sv)
+  {
+    switch (sv) {
+    case not_a_date_time: return not_a_number();
+    case neg_infin:       return neg_infinity();
+    case pos_infin:       return pos_infinity();
+    case max_date_time:   return (max)();
+    case min_date_time:   return (min)();
+    default:              return not_a_number();
+    }
+  }
+  static bool is_inf(int_type v)
+  {
+    return (v == neg_infinity().as_number() ||
+            v == pos_infinity().as_number());
+  }
+  static bool is_neg_inf(int_type v)
+  {
+    return (v == neg_infinity().as_number());
+  }
+  static bool is_pos_inf(int_type v)
+  {
+    return (v == pos_infinity().as_number());
+  }
+  static bool is_not_a_number(int_type v)
+  {
+    return (v == not_a_number().as_number());
+  }
+  //! Returns either special value type or is_not_special
+  static special_values to_special(int_type v)
+  {
+    if (is_not_a_number(v)) return not_a_date_time;
+    if (is_neg_inf(v)) return neg_infin;
+    if (is_pos_inf(v)) return pos_infin;
+    return not_special;
+  }
+
+  //-3 leaves room for representations of infinity and not a date
+  static  int_type maxcount()
+  {
+    return (::std::numeric_limits<int_type>::max)()-3;
+  }
+  bool is_infinity() const
+  {
+    return (value_ == neg_infinity().as_number() ||
+            value_ == pos_infinity().as_number());
+  }
+  bool is_pos_infinity()const
+  {
+    return(value_ == pos_infinity().as_number());
+  }
+  bool is_neg_infinity()const
+  {
+    return(value_ == neg_infinity().as_number());
+  }
+  bool is_nan() const
+  {
+    return (value_ == not_a_number().as_number());
+  }
+  bool is_special() const
+  {
+    return(is_infinity() || is_nan()); 
+  }
+  bool operator==(const int_adapter& rhs) const
+  {
+    return (compare(rhs) == 0);
+  }
+  bool operator==(const int& rhs) const
+  {
+    // quiets compiler warnings
+    bool is_signed = std::numeric_limits<int_type>::is_signed;
+    if(!is_signed)
+    {
+      if(is_neg_inf(value_) && rhs == 0)
+      {
+        return false;
+      }
+    }
+    return (compare(rhs) == 0);
+  }
+  bool operator!=(const int_adapter& rhs) const
+  {
+    return (compare(rhs) != 0);
+  }
+  bool operator!=(const int& rhs) const
+  {
+    // quiets compiler warnings
+    bool is_signed = std::numeric_limits<int_type>::is_signed;
+    if(!is_signed)
+    {
+      if(is_neg_inf(value_) && rhs == 0)
+      {
+        return true;
+      }
+    }
+    return (compare(rhs) != 0);
+  }
+  bool operator<(const int_adapter& rhs) const
+  {
+    return (compare(rhs) == -1);
+  }
+  bool operator<(const int& rhs) const
+  {
+    // quiets compiler warnings
+    bool is_signed = std::numeric_limits<int_type>::is_signed;
+    if(!is_signed)
+    {
+      if(is_neg_inf(value_) && rhs == 0)
+      {
+        return true;
+      }
+    }
+    return (compare(rhs) == -1);
+  }
+  bool operator>(const int_adapter& rhs) const
+  {
+    return (compare(rhs) == 1);
+  }
+  int_type as_number() const
+  {
+    return value_;
+  }
+  //! Returns either special value type or is_not_special
+  special_values as_special() const
+  {
+    return int_adapter::to_special(value_);
+  }
+  //creates nasty ambiguities
+//   operator int_type() const
+//   {
+//     return value_;
+//   }
+
+  /*! Operator allows for adding dissimilar int_adapter types.
+   * The return type will match that of the the calling object's type */
+  template<class rhs_type>
+  inline
+  int_adapter operator+(const int_adapter<rhs_type>& rhs) const
+  {
+    if(is_special() || rhs.is_special())
+    {
+      if (is_nan() || rhs.is_nan()) 
+      {
+        return int_adapter::not_a_number();
+      }
+      if((is_pos_inf(value_) && rhs.is_neg_inf(rhs.as_number())) ||
+      (is_neg_inf(value_) && rhs.is_pos_inf(rhs.as_number())) )
+      {
+        return int_adapter::not_a_number();
+      }
+      if (is_infinity()) 
+      {
+        return *this;
+      }
+      if (rhs.is_pos_inf(rhs.as_number())) 
+      {
+        return int_adapter::pos_infinity();
+      }
+      if (rhs.is_neg_inf(rhs.as_number())) 
+      {
+        return int_adapter::neg_infinity();
+      }
+    }
+    return int_adapter<int_type>(value_ + static_cast<int_type>(rhs.as_number()));
+  }
+
+  int_adapter operator+(const int_type rhs) const
+  {
+    if(is_special())
+    {
+      if (is_nan()) 
+      {
+        return int_adapter<int_type>(not_a_number());
+      }
+      if (is_infinity()) 
+      {
+        return *this;
+      }
+    }
+    return int_adapter<int_type>(value_ + rhs);
+  }
+  
+  /*! Operator allows for subtracting dissimilar int_adapter types.
+   * The return type will match that of the the calling object's type */
+  template<class rhs_type>
+  inline
+  int_adapter operator-(const int_adapter<rhs_type>& rhs)const
+  {
+    if(is_special() || rhs.is_special())
+    {
+      if (is_nan() || rhs.is_nan()) 
+      {
+        return int_adapter::not_a_number();
+      }
+      if((is_pos_inf(value_) && rhs.is_pos_inf(rhs.as_number())) ||
+         (is_neg_inf(value_) && rhs.is_neg_inf(rhs.as_number())) )
+      {
+        return int_adapter::not_a_number();
+      }
+      if (is_infinity()) 
+      {
+        return *this;
+      }
+      if (rhs.is_pos_inf(rhs.as_number())) 
+      {
+        return int_adapter::neg_infinity();
+      }
+      if (rhs.is_neg_inf(rhs.as_number())) 
+      {
+        return int_adapter::pos_infinity();
+      }
+    }
+    return int_adapter<int_type>(value_ - static_cast<int_type>(rhs.as_number()));
+  }
+  int_adapter operator-(const int_type rhs) const
+  {
+    if(is_special())
+    {
+      if (is_nan()) 
+      {
+        return int_adapter<int_type>(not_a_number());
+      }
+      if (is_infinity()) 
+      {
+        return *this;
+      }
+    }
+    return int_adapter<int_type>(value_ - rhs);
+  }
+
+  // should templatize this to be consistant with op +-
+  int_adapter operator*(const int_adapter& rhs)const
+  {
+    if(this->is_special() || rhs.is_special())
+    {
+      return mult_div_specials(rhs);
+    }
+    return int_adapter<int_type>(value_ * rhs.value_);
+  }
+  /*! Provided for cases when automatic conversion from 
+   * 'int' to 'int_adapter' causes incorrect results. */
+  int_adapter operator*(const int rhs) const
+  {
+    if(is_special())
+    {
+      return mult_div_specials(rhs);
+    }
+    return int_adapter<int_type>(value_ * rhs);
+  }
+
+  // should templatize this to be consistant with op +-
+  int_adapter operator/(const int_adapter& rhs)const
+  {
+    if(this->is_special() || rhs.is_special())
+    {
+      if(is_infinity() && rhs.is_infinity())
+      {
+        return int_adapter<int_type>(not_a_number());
+      }
+      if(rhs != 0)
+      {
+        return mult_div_specials(rhs);
+      }
+      else { // let divide by zero blow itself up
+        return int_adapter<int_type>(value_ / rhs.value_);
+      }
+    }
+    return int_adapter<int_type>(value_ / rhs.value_);
+  }
+  /*! Provided for cases when automatic conversion from 
+   * 'int' to 'int_adapter' causes incorrect results. */
+  int_adapter operator/(const int rhs) const
+  {
+    if(is_special() && rhs != 0)
+    {
+      return mult_div_specials(rhs);
+    }
+    return int_adapter<int_type>(value_ / rhs);
+  }
+
+  // should templatize this to be consistant with op +-
+  int_adapter operator%(const int_adapter& rhs)const
+  {
+    if(this->is_special() || rhs.is_special())
+    {
+      if(is_infinity() && rhs.is_infinity())
+      {
+        return int_adapter<int_type>(not_a_number());
+      }
+      if(rhs != 0)
+      {
+        return mult_div_specials(rhs);
+      }
+      else { // let divide by zero blow itself up
+        return int_adapter<int_type>(value_ % rhs.value_);
+      }
+    }
+    return int_adapter<int_type>(value_ % rhs.value_);
+  }
+  /*! Provided for cases when automatic conversion from 
+   * 'int' to 'int_adapter' causes incorrect results. */
+  int_adapter operator%(const int rhs) const
+  {
+    if(is_special() && rhs != 0)
+    {
+      return mult_div_specials(rhs);
+    }
+    return int_adapter<int_type>(value_ % rhs);
+  }
+private:
+  int_type value_;
+  
+  //! returns -1, 0, 1, or 2 if 'this' is <, ==, >, or 'nan comparison' rhs
+  int compare(const int_adapter& rhs)const
+  {
+    if(this->is_special() || rhs.is_special())
+    {
+      if(this->is_nan() || rhs.is_nan()) {
+        if(this->is_nan() && rhs.is_nan()) {
+          return 0; // equal
+        }
+        else {
+          return 2; // nan
+        }
+      }
+      if((is_neg_inf(value_) && !is_neg_inf(rhs.value_)) ||
+         (is_pos_inf(rhs.value_) && !is_pos_inf(value_)) )
+        {
+          return -1; // less than
+        }
+      if((is_pos_inf(value_) && !is_pos_inf(rhs.value_)) ||
+         (is_neg_inf(rhs.value_) && !is_neg_inf(value_)) ) {
+        return 1; // greater than
+      }
+    }
+    if(value_ < rhs.value_) return -1;
+    if(value_ > rhs.value_) return 1;
+    // implied-> if(value_ == rhs.value_) 
+    return 0;
+  }
+  /* When multiplying and dividing with at least 1 special value
+   * very simmilar rules apply. In those cases where the rules
+   * are different, they are handled in the respective operator 
+   * function. */
+  //! Assumes at least 'this' or 'rhs' is a special value
+  int_adapter mult_div_specials(const int_adapter& rhs)const
+  {
+    int min_value; 
+    // quiets compiler warnings
+    bool is_signed = std::numeric_limits<int_type>::is_signed;
+    if(is_signed) {
+      min_value = 0;
+    }
+    else {
+      min_value = 1;// there is no zero with unsigned
+    }
+    if(this->is_nan() || rhs.is_nan()) {
+      return int_adapter<int_type>(not_a_number());
+    }
+    if((*this > 0 && rhs > 0) || (*this < min_value && rhs < min_value)) {
+        return int_adapter<int_type>(pos_infinity());
+    }
+    if((*this > 0 && rhs < min_value) || (*this < min_value && rhs > 0)) {
+        return int_adapter<int_type>(neg_infinity());
+    }
+    //implied -> if(this->value_ == 0 || rhs.value_ == 0)
+    return int_adapter<int_type>(not_a_number());
+  }
+  /* Overloaded function necessary because of special
+   * situation where int_adapter is instantiated with 
+   * 'unsigned' and func is called with negative int.
+   * It would produce incorrect results since 'unsigned'
+   * wraps around when initialized with a negative value */
+  //! Assumes 'this' is a special value
+  int_adapter mult_div_specials(const int& rhs) const
+  {
+    int min_value; 
+    // quiets compiler warnings
+    bool is_signed = std::numeric_limits<int_type>::is_signed;
+    if(is_signed) {
+      min_value = 0;
+    }
+    else {
+      min_value = 1;// there is no zero with unsigned
+    }
+    if(this->is_nan()) {
+      return int_adapter<int_type>(not_a_number());
+    }
+    if((*this > 0 && rhs > 0) || (*this < min_value && rhs < 0)) {
+        return int_adapter<int_type>(pos_infinity());
+    }
+    if((*this > 0 && rhs < 0) || (*this < min_value && rhs > 0)) {
+        return int_adapter<int_type>(neg_infinity());
+    }
+    //implied -> if(this->value_ == 0 || rhs.value_ == 0)
+    return int_adapter<int_type>(not_a_number());
+  }
+  
+};
+
+#ifndef BOOST_DATE_TIME_NO_LOCALE
+  /*! Expected output is either a numeric representation 
+   * or a special values representation.<BR> 
+   * Ex. "12", "+infinity", "not-a-number", etc. */
+  //template<class charT = char, class traits = std::traits<charT>, typename int_type>
+  template<class charT, class traits, typename int_type>
+  inline
+  std::basic_ostream<charT, traits>& 
+  operator<<(std::basic_ostream<charT, traits>& os, const int_adapter<int_type>& ia)
+  {
+    if(ia.is_special()) {
+      // switch copied from date_names_put.hpp
+      switch(ia.as_special())
+        {
+      case not_a_date_time:
+        os << "not-a-number";
+        break;
+      case pos_infin:
+        os << "+infinity";
+        break;
+      case neg_infin:
+        os << "-infinity";
+        break;
+      default:
+        os << "";
+      }
+    }
+    else {
+      os << ia.as_number(); 
+    }
+    return os;
+  }
+#endif
+
+
+} } //namespace date_time
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/iso_format.hpp b/vendor/pdalboost/boost/date_time/iso_format.hpp
new file mode 100644
index 0000000..93d89b7
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/iso_format.hpp
@@ -0,0 +1,303 @@
+#ifndef ISO_FORMAT_HPP___
+#define ISO_FORMAT_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include "boost/date_time/parse_format_base.hpp"
+
+namespace pdalboost {
+namespace date_time {
+
+//! Class to provide common iso formatting spec
+template<class charT>
+class iso_format_base {
+public:
+  //! Describe month format -- its an integer in iso format
+  static month_format_spec month_format()
+  {
+    return month_as_integer;
+  }
+
+  //! String used printed is date is invalid
+  static const charT* not_a_date()
+  {     
+    return "not-a-date-time";
+  }
+  //! String used to for positive infinity value
+  static const charT* pos_infinity()
+  {
+    return "+infinity";
+  }
+  //! String used to for positive infinity value
+  static const charT* neg_infinity()
+  {
+    return "-infinity";
+  }
+
+  //! ISO char for a year -- used in durations
+  static charT year_sep_char()
+  {
+    return 'Y';
+  }
+  //! ISO char for a month
+  static charT month_sep_char()
+  {
+    return '-';
+  }
+  //! ISO char for a day
+  static charT day_sep_char()
+  {
+    return '-';
+  }
+  //! char for minute
+  static charT hour_sep_char()
+  {
+    return ':';
+  }
+  //! char for minute
+  static charT minute_sep_char()
+  {
+    return ':';
+  }
+  //! char for second
+  static charT second_sep_char()
+  {
+    return ':';
+  }
+  //! ISO char for a period
+  static charT period_start_char()
+  {
+    return 'P';
+  }
+  //! Used in time in mixed strings to set start of time
+  static charT time_start_char()
+  {
+    return 'T';
+  }
+
+  //! Used in mixed strings to identify start of a week number
+  static charT week_start_char()
+  {
+    return 'W';
+  }
+
+  //! Separators for periods
+  static charT period_sep_char()
+  {
+    return '/';
+  }
+  //! Separator for hh:mm:ss
+  static charT time_sep_char()
+  {
+    return ':';
+  }
+  //! Preferred Separator for hh:mm:ss,decimal_fraction
+  static charT fractional_time_sep_char()
+  {
+    return ',';
+  }
+
+  static bool is_component_sep(charT sep)
+  {
+    switch(sep) {
+    case 'H':
+    case 'M':
+    case 'S':
+    case 'W':
+    case 'T':
+    case 'Y':
+    case 'D':return true;
+    default:
+      return false;
+    }
+  }
+
+  static bool is_fractional_time_sep(charT sep)
+  {
+    switch(sep) {
+    case ',':
+    case '.': return true;
+    default: return false;
+    }
+  }
+  static bool is_timezone_sep(charT sep)
+  {
+    switch(sep) {
+    case '+':
+    case '-': return true;
+    default: return false;
+    }
+  }
+  static charT element_sep_char()
+  {
+    return '-';
+  }
+
+};
+
+#ifndef BOOST_NO_STD_WSTRING
+
+//! Class to provide common iso formatting spec
+template<>
+class iso_format_base<wchar_t> {
+public:
+  //! Describe month format -- its an integer in iso format
+  static month_format_spec month_format()
+  {
+    return month_as_integer;
+  }
+
+  //! String used printed is date is invalid
+  static const wchar_t* not_a_date()
+  {      
+    return L"not-a-date-time";
+  }
+  //! String used to for positive infinity value
+  static const wchar_t* pos_infinity()
+  {
+    return L"+infinity";
+  }
+  //! String used to for positive infinity value
+  static const wchar_t* neg_infinity()
+  {
+    return L"-infinity";
+  }
+
+  //! ISO char for a year -- used in durations
+  static wchar_t year_sep_char()
+  {
+    return 'Y';
+  }
+  //! ISO char for a month
+  static wchar_t month_sep_char()
+  {
+    return '-';
+  }
+  //! ISO char for a day
+  static wchar_t day_sep_char()
+  {
+    return '-';
+  }
+  //! char for minute
+  static wchar_t hour_sep_char()
+  {
+    return ':';
+  }
+  //! char for minute
+  static wchar_t minute_sep_char()
+  {
+    return ':';
+  }
+  //! char for second
+  static wchar_t second_sep_char()
+  {
+    return ':';
+  }
+  //! ISO char for a period
+  static wchar_t period_start_char()
+  {
+    return 'P';
+  }
+  //! Used in time in mixed strings to set start of time
+  static wchar_t time_start_char()
+  {
+    return 'T';
+  }
+
+  //! Used in mixed strings to identify start of a week number
+  static wchar_t week_start_char()
+  {
+    return 'W';
+  }
+
+  //! Separators for periods
+  static wchar_t period_sep_char()
+  {
+    return '/';
+  }
+  //! Separator for hh:mm:ss
+  static wchar_t time_sep_char()
+  {
+    return ':';
+  }
+  //! Preferred Separator for hh:mm:ss,decimal_fraction
+  static wchar_t fractional_time_sep_char()
+  {
+    return ',';
+  }
+
+  static bool is_component_sep(wchar_t sep)
+  {
+    switch(sep) {
+    case 'H':
+    case 'M':
+    case 'S':
+    case 'W':
+    case 'T':
+    case 'Y':
+    case 'D':return true;
+    default:
+      return false;
+    }
+  }
+
+  static bool is_fractional_time_sep(wchar_t sep)
+  {
+    switch(sep) {
+    case ',':
+    case '.': return true;
+    default: return false;
+    }
+  }
+  static bool is_timezone_sep(wchar_t sep)
+  {
+    switch(sep) {
+    case '+':
+    case '-': return true;
+    default: return false;
+    }
+  }
+  static wchar_t element_sep_char()
+  {
+    return '-';
+  }
+
+};
+
+#endif // BOOST_NO_STD_WSTRING
+
+//! Format description for iso normal YYYYMMDD
+template<class charT>
+class iso_format : public iso_format_base<charT> {
+public:
+  //! The ios standard format doesn't use char separators
+  static bool has_date_sep_chars()
+  {
+    return false;
+  }
+};
+
+//! Extended format uses seperators YYYY-MM-DD
+template<class charT>
+class iso_extended_format : public iso_format_base<charT> {
+public:
+  //! Extended format needs char separators
+  static bool has_date_sep_chars()
+  {
+    return true;
+  }
+
+};
+
+} } //namespace date_time
+
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/locale_config.hpp b/vendor/pdalboost/boost/date_time/locale_config.hpp
new file mode 100644
index 0000000..42a2b73
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/locale_config.hpp
@@ -0,0 +1,31 @@
+#ifndef DATE_TIME_LOCALE_CONFIG_HPP___
+#define DATE_TIME_LOCALE_CONFIG_HPP___
+
+/* Copyright (c) 2002-2006 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland
+ * $Date$
+ */
+
+// This file configures whether the library will support locales and hence
+// iostream based i/o.  Even if a compiler has some support for locales,
+// any failure to be compatible gets the compiler on the exclusion list.
+//
+// At the moment this is defined for MSVC 6 and any compiler that
+// defines BOOST_NO_STD_LOCALE (gcc 2.95.x)
+
+#include "boost/config.hpp" //sets BOOST_NO_STD_LOCALE
+#include "boost/detail/workaround.hpp"
+
+//This file basically becomes a noop if locales are not properly supported
+#if (defined(BOOST_NO_STD_LOCALE)  \
+ || (BOOST_WORKAROUND( BOOST_MSVC, < 1300)) \
+ || (BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x581 )) ) )
+#define BOOST_DATE_TIME_NO_LOCALE
+#endif
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/microsec_time_clock.hpp b/vendor/pdalboost/boost/date_time/microsec_time_clock.hpp
new file mode 100644
index 0000000..ca59e86
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/microsec_time_clock.hpp
@@ -0,0 +1,127 @@
+#ifndef DATE_TIME_HIGHRES_TIME_CLOCK_HPP___
+#define DATE_TIME_HIGHRES_TIME_CLOCK_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+/*! @file microsec_time_clock.hpp
+  This file contains a high resolution time clock implementation.
+*/
+
+#include <boost/cstdint.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/date_time/compiler_config.hpp>
+#include <boost/date_time/c_time.hpp>
+#include <boost/date_time/time_clock.hpp>
+#include <boost/date_time/filetime_functions.hpp>
+
+#ifdef BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK
+
+namespace pdalboost {
+namespace date_time {
+
+  //! A clock providing microsecond level resolution
+  /*! A high precision clock that measures the local time
+   *  at a resolution up to microseconds and adjusts to the
+   *  resolution of the time system.  For example, for the
+   *  a library configuration with nano second resolution,
+   *  the last 3 places of the fractional seconds will always
+   *  be 000 since there are 1000 nano-seconds in a micro second.
+   */
+  template<class time_type>
+  class microsec_clock
+  {
+  private:
+    //! Type for the function used to convert time_t to tm
+    typedef std::tm* (*time_converter)(const std::time_t*, std::tm*);
+
+  public:
+    typedef typename time_type::date_type date_type;
+    typedef typename time_type::time_duration_type time_duration_type;
+    typedef typename time_duration_type::rep_type resolution_traits_type;
+
+    //! return a local time object for the given zone, based on computer clock
+    //JKG -- looks like we could rewrite this against universal_time
+    template<class time_zone_type>
+    static time_type local_time(shared_ptr<time_zone_type> tz_ptr)
+    {
+      typedef typename time_type::utc_time_type utc_time_type;
+      typedef second_clock<utc_time_type> second_clock;
+      // we'll need to know the utc_offset this machine has
+      // in order to get a utc_time_type set to utc
+      utc_time_type utc_time = second_clock::universal_time();
+      time_duration_type utc_offset = second_clock::local_time() - utc_time;
+      // use micro clock to get a local time with sub seconds
+      // and adjust it to get a true utc time reading with sub seconds
+      utc_time = microsec_clock<utc_time_type>::local_time() - utc_offset;
+      return time_type(utc_time, tz_ptr);
+    }
+
+    //! Returns the local time based on computer clock settings
+    static time_type local_time()
+    {
+      return create_time(&c_time::localtime);
+    }
+
+    //! Returns the UTC time based on computer settings
+    static time_type universal_time()
+    {
+      return create_time(&c_time::gmtime);
+    }
+
+  private:
+    static time_type create_time(time_converter converter)
+    {
+#ifdef BOOST_HAS_GETTIMEOFDAY
+      timeval tv;
+      gettimeofday(&tv, 0); //gettimeofday does not support TZ adjust on Linux.
+      std::time_t t = tv.tv_sec;
+      pdalboost::uint32_t sub_sec = tv.tv_usec;
+#elif defined(BOOST_HAS_FTIME)
+      winapi::file_time ft;
+      winapi::get_system_time_as_file_time(ft);
+      uint64_t micros = winapi::file_time_to_microseconds(ft); // it will not wrap, since ft is the current time
+                                                               // and cannot be before 1970-Jan-01
+      std::time_t t = static_cast<std::time_t>(micros / 1000000UL); // seconds since epoch
+      // microseconds -- static casts suppress warnings
+      pdalboost::uint32_t sub_sec = static_cast<pdalboost::uint32_t>(micros % 1000000UL);
+#else
+#error Internal Boost.DateTime error: BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK is defined, however neither gettimeofday nor FILETIME support is detected.
+#endif
+
+      std::tm curr;
+      std::tm* curr_ptr = converter(&t, &curr);
+      date_type d(static_cast< typename date_type::year_type::value_type >(curr_ptr->tm_year + 1900),
+                  static_cast< typename date_type::month_type::value_type >(curr_ptr->tm_mon + 1),
+                  static_cast< typename date_type::day_type::value_type >(curr_ptr->tm_mday));
+
+      //The following line will adjust the fractional second tick in terms
+      //of the current time system.  For example, if the time system
+      //doesn't support fractional seconds then res_adjust returns 0
+      //and all the fractional seconds return 0.
+      int adjust = static_cast< int >(resolution_traits_type::res_adjust() / 1000000);
+
+      time_duration_type td(static_cast< typename time_duration_type::hour_type >(curr_ptr->tm_hour),
+                            static_cast< typename time_duration_type::min_type >(curr_ptr->tm_min),
+                            static_cast< typename time_duration_type::sec_type >(curr_ptr->tm_sec),
+                            sub_sec * adjust);
+
+      return time_type(d,td);
+    }
+  };
+
+
+} } //namespace date_time
+
+#endif //BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/parse_format_base.hpp b/vendor/pdalboost/boost/date_time/parse_format_base.hpp
new file mode 100644
index 0000000..bcf8662
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/parse_format_base.hpp
@@ -0,0 +1,29 @@
+#ifndef DATE_TIME_PARSE_FORMAT_BASE__
+#define DATE_TIME_PARSE_FORMAT_BASE__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland 
+ * $Date$
+ */
+
+namespace pdalboost {
+namespace date_time {
+
+  //! Enum for distinguishing parsing and formatting options
+  enum month_format_spec {month_as_integer, month_as_short_string, 
+                          month_as_long_string};
+
+  //! Enum for distinguishing the order of Month, Day, & Year.
+  /*! Enum for distinguishing the order in which Month, Day, & Year
+   * will appear in a date string */
+  enum ymd_order_spec {ymd_order_iso,  //order is year-month-day
+                       ymd_order_dmy,  //day-month-year
+                       ymd_order_us};  //order is month-day-year
+
+
+} }//namespace date_time
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/period.hpp b/vendor/pdalboost/boost/date_time/period.hpp
new file mode 100644
index 0000000..18bfa57
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/period.hpp
@@ -0,0 +1,377 @@
+#ifndef DATE_TIME_PERIOD_HPP___
+#define DATE_TIME_PERIOD_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst 
+ * $Date$
+ */
+
+/*! \file period.hpp
+  This file contain the implementation of the period abstraction. This is
+  basically the same idea as a range.  Although this class is intended for
+  use in the time library, it is pretty close to general enough for other
+  numeric uses.
+
+*/
+
+#include "boost/operators.hpp"
+
+
+namespace pdalboost {
+namespace date_time {
+  //!Provides generalized period type useful in date-time systems
+  /*!This template uses a class to represent a time point within the period
+    and another class to represent a duration.  As a result, this class is
+    not appropriate for use when the number and duration representation 
+    are the same (eg: in the regular number domain).
+    
+    A period can be specified by providing either the begining point and 
+    a duration or the begining point and the end point( end is NOT part 
+    of the period but 1 unit past it. A period will be "invalid" if either
+    end_point <= begin_point or the given duration is <= 0. Any valid period 
+    will return false for is_null().
+    
+    Zero length periods are also considered invalid. Zero length periods are
+    periods where the begining and end points are the same, or, the given 
+    duration is zero. For a zero length period, the last point will be one 
+    unit less than the begining point.
+
+    In the case that the begin and last are the same, the period has a 
+    length of one unit.
+    
+    The best way to handle periods is usually to provide a begining point and
+    a duration.  So, day1 + 7 days is a week period which includes all of the
+    first day and 6 more days (eg: Sun to Sat).
+
+   */
+  template<class point_rep, class duration_rep>
+  class period : private
+      pdalboost::less_than_comparable<period<point_rep, duration_rep> 
+    , pdalboost::equality_comparable< period<point_rep, duration_rep> 
+    > >
+  {
+  public:
+    typedef point_rep point_type;
+    typedef duration_rep duration_type;
+
+    period(point_rep first_point, point_rep end_point);
+    period(point_rep first_point, duration_rep len);
+    point_rep begin() const;
+    point_rep end() const;
+    point_rep last() const;
+    duration_rep length() const;
+    bool is_null() const;
+    bool operator==(const period& rhs) const;
+    bool operator<(const period& rhs) const;
+    void shift(const duration_rep& d);
+    void expand(const duration_rep& d);
+    bool contains(const point_rep& point) const;
+    bool contains(const period& other) const;
+    bool intersects(const period& other) const;
+    bool is_adjacent(const period& other) const;
+    bool is_before(const point_rep& point) const;
+    bool is_after(const point_rep& point) const;
+    period intersection(const period& other) const;
+    period merge(const period& other) const;
+    period span(const period& other) const;
+  private:
+    point_rep begin_;
+    point_rep last_;
+  };
+
+  //! create a period from begin to last eg: [begin,end)
+  /*! If end <= begin then the period will be invalid
+   */
+  template<class point_rep, class duration_rep>
+  inline
+  period<point_rep,duration_rep>::period(point_rep first_point, 
+                                         point_rep end_point) : 
+    begin_(first_point), 
+    last_(end_point - duration_rep::unit())
+  {}
+
+  //! create a period as [begin, begin+len)
+  /*! If len is <= 0 then the period will be invalid
+   */
+  template<class point_rep, class duration_rep>
+  inline
+  period<point_rep,duration_rep>::period(point_rep first_point, duration_rep len) :
+    begin_(first_point), 
+    last_(first_point + len-duration_rep::unit())
+  { }
+
+
+  //! Return the first element in the period
+  template<class point_rep, class duration_rep>
+  inline
+  point_rep period<point_rep,duration_rep>::begin() const 
+  {
+    return begin_;
+  }
+
+  //! Return one past the last element 
+  template<class point_rep, class duration_rep>
+  inline
+  point_rep period<point_rep,duration_rep>::end() const 
+  {
+    return last_ + duration_rep::unit();
+  }
+
+  //! Return the last item in the period
+  template<class point_rep, class duration_rep>
+  inline
+  point_rep period<point_rep,duration_rep>::last() const 
+  {
+    return last_;
+  }
+
+  //! True if period is ill formed (length is zero or less)
+  template<class point_rep, class duration_rep>
+  inline
+  bool period<point_rep,duration_rep>::is_null() const 
+  {
+    return end() <= begin_;
+  }
+
+  //! Return the length of the period
+  template<class point_rep, class duration_rep>
+  inline
+  duration_rep period<point_rep,duration_rep>::length() const
+  {
+    if(last_ < begin_){ // invalid period
+      return last_+duration_rep::unit() - begin_;
+    }
+    else{
+      return end() - begin_; // normal case
+    }
+  }
+
+  //! Equality operator
+  template<class point_rep, class duration_rep>
+  inline
+  bool period<point_rep,duration_rep>::operator==(const period& rhs) const 
+  {
+    return  ((begin_ == rhs.begin_) && 
+             (last_ == rhs.last_));
+  }
+
+  //! Strict as defined by rhs.last <= lhs.last
+  template<class point_rep, class duration_rep>
+  inline
+  bool period<point_rep,duration_rep>::operator<(const period& rhs) const 
+  {
+    return (last_ < rhs.begin_);
+  } 
+
+
+  //! Shift the start and end by the specified amount
+  template<class point_rep, class duration_rep>
+  inline
+  void period<point_rep,duration_rep>::shift(const duration_rep& d)
+  {
+    begin_ = begin_ + d;
+    last_  = last_  + d;
+  }
+
+  /** Expands the size of the period by the duration on both ends.
+   *
+   *So before expand 
+   *@code
+   *
+   *         [-------]
+   * ^   ^   ^   ^   ^   ^  ^
+   * 1   2   3   4   5   6  7
+   * 
+   *@endcode
+   * After expand(2)
+   *@code
+   *
+   * [----------------------]
+   * ^   ^   ^   ^   ^   ^  ^
+   * 1   2   3   4   5   6  7
+   * 
+   *@endcode
+   */
+  template<class point_rep, class duration_rep>
+  inline
+  void period<point_rep,duration_rep>::expand(const duration_rep& d)
+  {
+    begin_ = begin_ - d;
+    last_  = last_  + d;
+  }
+
+  //! True if the point is inside the period, zero length periods contain no points
+  template<class point_rep, class duration_rep>
+  inline
+  bool period<point_rep,duration_rep>::contains(const point_rep& point) const 
+  {
+    return ((point >= begin_) &&
+            (point <= last_));
+  }
+
+
+  //! True if this period fully contains (or equals) the other period
+  template<class point_rep, class duration_rep>
+  inline
+  bool period<point_rep,duration_rep>::contains(const period<point_rep,duration_rep>& other) const
+  {
+    return ((begin_ <= other.begin_) && (last_ >= other.last_));
+  }
+
+
+  //! True if periods are next to each other without a gap.
+  /* In the example below, p1 and p2 are adjacent, but p3 is not adjacent
+   * with either of p1 or p2.
+   *@code
+   *   [-p1-)
+   *        [-p2-)
+   *          [-p3-) 
+   *@endcode
+   */
+  template<class point_rep, class duration_rep>
+  inline
+  bool 
+  period<point_rep,duration_rep>::is_adjacent(const period<point_rep,duration_rep>& other) const 
+  {
+    return (other.begin() == end() ||
+            begin_ == other.end());
+  }
+
+
+  //! True if all of the period is prior or t < start
+  /* In the example below only point 1 would evaluate to true.
+   *@code
+   *     [---------])
+   * ^   ^    ^     ^   ^
+   * 1   2    3     4   5
+   * 
+   *@endcode
+   */
+  template<class point_rep, class duration_rep>
+  inline
+  bool 
+  period<point_rep,duration_rep>::is_after(const point_rep& t) const 
+  { 
+    if (is_null()) 
+    {
+      return false; //null period isn't after
+    }
+    
+    return t < begin_;
+  }
+
+  //! True if all of the period is prior to the passed point or end <= t
+  /* In the example below points 4 and 5 return true.
+   *@code
+   *     [---------])
+   * ^   ^    ^     ^   ^
+   * 1   2    3     4   5
+   * 
+   *@endcode
+   */
+  template<class point_rep, class duration_rep>
+  inline
+  bool 
+  period<point_rep,duration_rep>::is_before(const point_rep& t) const 
+  { 
+    if (is_null()) 
+    {
+      return false;  //null period isn't before anything
+    }
+    
+    return last_ < t;
+  }
+
+
+  //! True if the periods overlap in any way
+  /* In the example below p1 intersects with p2, p4, and p6.
+   *@code
+   *       [---p1---)
+   *             [---p2---)
+   *                [---p3---) 
+   *  [---p4---) 
+   * [-p5-) 
+   *         [-p6-) 
+   *@endcode
+   */
+  template<class point_rep, class duration_rep>
+  inline
+  bool period<point_rep,duration_rep>::intersects(const period<point_rep,duration_rep>& other) const 
+  { 
+    return ( contains(other.begin_) ||
+             other.contains(begin_) ||
+             ((other.begin_ < begin_) && (other.last_ >= begin_)));
+  }
+
+  //! Returns the period of intersection or invalid range no intersection
+  template<class point_rep, class duration_rep>
+  inline
+  period<point_rep,duration_rep>
+  period<point_rep,duration_rep>::intersection(const period<point_rep,duration_rep>& other) const 
+  {
+    if (begin_ > other.begin_) {
+      if (last_ <= other.last_) { //case2
+        return *this;  
+      }
+      //case 1
+      return period<point_rep,duration_rep>(begin_, other.end());
+    }
+    else {
+      if (last_ <= other.last_) { //case3
+        return period<point_rep,duration_rep>(other.begin_, this->end());
+      }
+      //case4
+      return other;
+    }
+    //unreachable
+  }
+
+  //! Returns the union of intersecting periods -- or null period
+  /*! 
+   */
+  template<class point_rep, class duration_rep>
+  inline
+  period<point_rep,duration_rep>
+  period<point_rep,duration_rep>::merge(const period<point_rep,duration_rep>& other) const 
+  {
+    if (this->intersects(other)) {      
+      if (begin_ < other.begin_) {
+        return period<point_rep,duration_rep>(begin_, last_ > other.last_ ? this->end() : other.end());
+      }
+      
+      return period<point_rep,duration_rep>(other.begin_, last_ > other.last_ ? this->end() : other.end());
+      
+    }
+    return period<point_rep,duration_rep>(begin_,begin_); // no intersect return null
+  }
+
+  //! Combine two periods with earliest start and latest end.
+  /*! Combines two periods and any gap between them such that 
+   *  start = min(p1.start, p2.start)
+   *  end   = max(p1.end  , p2.end)
+   *@code
+   *        [---p1---)
+   *                       [---p2---)
+   * result:
+   *        [-----------p3----------) 
+   *@endcode
+   */
+  template<class point_rep, class duration_rep>
+  inline
+  period<point_rep,duration_rep>
+  period<point_rep,duration_rep>::span(const period<point_rep,duration_rep>& other) const 
+  {
+    point_rep start((begin_ < other.begin_) ? begin() : other.begin());
+    point_rep newend((last_  < other.last_)  ? other.end() : this->end());
+    return period<point_rep,duration_rep>(start, newend);
+  }
+
+
+} } //namespace date_time
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/posix_time/conversion.hpp b/vendor/pdalboost/boost/date_time/posix_time/conversion.hpp
new file mode 100644
index 0000000..a948980
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/posix_time/conversion.hpp
@@ -0,0 +1,102 @@
+#ifndef POSIX_TIME_CONVERSION_HPP___
+#define POSIX_TIME_CONVERSION_HPP___
+
+/* Copyright (c) 2002-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include <cstring>
+#include <boost/date_time/posix_time/ptime.hpp>
+#include <boost/date_time/posix_time/posix_time_duration.hpp>
+#include <boost/date_time/filetime_functions.hpp>
+#include <boost/date_time/c_time.hpp>
+#include <boost/date_time/time_resolution_traits.hpp> // absolute_value
+#include <boost/date_time/gregorian/conversion.hpp>
+
+namespace pdalboost {
+
+namespace posix_time {
+
+
+  //! Function that converts a time_t into a ptime.
+  inline
+  ptime from_time_t(std::time_t t)
+  {
+    ptime start(gregorian::date(1970,1,1));
+    return start + seconds(static_cast<long>(t));
+  }
+
+  //! Function that converts a ptime into a time_t
+  inline
+  std::time_t to_time_t(ptime pt)
+  {
+    time_duration dur = pt - ptime(gregorian::date(1970,1,1));
+    return std::time_t(dur.total_seconds());
+  }
+
+  //! Convert a time to a tm structure truncating any fractional seconds
+  inline
+  std::tm to_tm(const pdalboost::posix_time::ptime& t) {
+    std::tm timetm = pdalboost::gregorian::to_tm(t.date());
+    pdalboost::posix_time::time_duration td = t.time_of_day();
+    timetm.tm_hour = td.hours();
+    timetm.tm_min = td.minutes();
+    timetm.tm_sec = td.seconds();
+    timetm.tm_isdst = -1; // -1 used when dst info is unknown
+    return timetm;
+  }
+  //! Convert a time_duration to a tm structure truncating any fractional seconds and zeroing fields for date components
+  inline
+  std::tm to_tm(const pdalboost::posix_time::time_duration& td) {
+    std::tm timetm;
+    std::memset(&timetm, 0, sizeof(timetm));
+    timetm.tm_hour = date_time::absolute_value(td.hours());
+    timetm.tm_min = date_time::absolute_value(td.minutes());
+    timetm.tm_sec = date_time::absolute_value(td.seconds());
+    timetm.tm_isdst = -1; // -1 used when dst info is unknown
+    return timetm;
+  }
+
+  //! Convert a tm struct to a ptime ignoring is_dst flag
+  inline
+  ptime ptime_from_tm(const std::tm& timetm) {
+    pdalboost::gregorian::date d = pdalboost::gregorian::date_from_tm(timetm);
+    return ptime(d, time_duration(timetm.tm_hour, timetm.tm_min, timetm.tm_sec));
+  }
+
+
+#if defined(BOOST_HAS_FTIME)
+
+  //! Function to create a time object from an initialized FILETIME struct.
+  /*! Function to create a time object from an initialized FILETIME struct.
+   * A FILETIME struct holds 100-nanosecond units (0.0000001). When
+   * built with microsecond resolution the FILETIME's sub second value
+   * will be truncated. Nanosecond resolution has no truncation.
+   *
+   * \note FILETIME is part of the Win32 API, so it is not portable to non-windows
+   * platforms.
+   *
+   * \note The function is templated on the FILETIME type, so that
+   *       it can be used with both native FILETIME and the ad-hoc
+   *       pdalboost::date_time::winapi::file_time type.
+   */
+  template< typename TimeT, typename FileTimeT >
+  inline
+  TimeT from_ftime(const FileTimeT& ft)
+  {
+    return pdalboost::date_time::time_from_ftime<TimeT>(ft);
+  }
+
+#endif // BOOST_HAS_FTIME
+
+} } //namespace pdalboost::posix_time
+
+
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/posix_time/date_duration_operators.hpp b/vendor/pdalboost/boost/date_time/posix_time/date_duration_operators.hpp
new file mode 100644
index 0000000..70e18a4
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/posix_time/date_duration_operators.hpp
@@ -0,0 +1,114 @@
+#ifndef DATE_DURATION_OPERATORS_HPP___
+#define DATE_DURATION_OPERATORS_HPP___
+                                                                                
+/* Copyright (c) 2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0. 
+ * (See accompanying file LICENSE_1_0.txt or 
+ * http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include "boost/date_time/gregorian/greg_duration_types.hpp"
+#include "boost/date_time/posix_time/ptime.hpp"
+
+namespace pdalboost {
+namespace posix_time {
+  
+  /*!@file date_duration_operators.hpp Operators for ptime and 
+   * optional gregorian types. Operators use snap-to-end-of-month behavior. 
+   * Further details on this behavior can be found in reference for 
+   * date_time/date_duration_types.hpp and documentation for 
+   * month and year iterators.
+   */
+ 
+
+  /*! Adds a months object and a ptime. Result will be same 
+   * day-of-month as ptime unless original day was the last day of month.
+   * see date_time::months_duration for more details */
+  inline
+  ptime 
+  operator+(const ptime& t, const pdalboost::gregorian::months& m)
+  {
+    return t + m.get_offset(t.date());
+  }
+  
+  /*! Adds a months object to a ptime. Result will be same 
+   * day-of-month as ptime unless original day was the last day of month.
+   * see date_time::months_duration for more details */
+  inline
+  ptime 
+  operator+=(ptime& t, const pdalboost::gregorian::months& m)
+  {
+    // get_neg_offset returns a negative duration, so we add
+    return t += m.get_offset(t.date());
+  }
+
+  /*! Subtracts a months object and a ptime. Result will be same 
+   * day-of-month as ptime unless original day was the last day of month.
+   * see date_time::months_duration for more details */
+  inline
+  ptime 
+  operator-(const ptime& t, const pdalboost::gregorian::months& m)
+  {
+    // get_neg_offset returns a negative duration, so we add
+    return t + m.get_neg_offset(t.date());
+  }
+  
+  /*! Subtracts a months object from a ptime. Result will be same 
+   * day-of-month as ptime unless original day was the last day of month.
+   * see date_time::months_duration for more details */
+  inline
+  ptime 
+  operator-=(ptime& t, const pdalboost::gregorian::months& m)
+  {
+    return t += m.get_neg_offset(t.date());
+  }
+
+  // ptime & years
+  
+  /*! Adds a years object and a ptime. Result will be same 
+   * month and day-of-month as ptime unless original day was the 
+   * last day of month. see date_time::years_duration for more details */
+  inline
+  ptime 
+  operator+(const ptime& t, const pdalboost::gregorian::years& y)
+  {
+    return t + y.get_offset(t.date());
+  }
+
+  /*! Adds a years object to a ptime. Result will be same 
+   * month and day-of-month as ptime unless original day was the 
+   * last day of month. see date_time::years_duration for more details */
+  inline
+  ptime 
+  operator+=(ptime& t, const pdalboost::gregorian::years& y)
+  {
+    return t += y.get_offset(t.date());
+  }
+
+  /*! Subtracts a years object and a ptime. Result will be same 
+   * month and day-of-month as ptime unless original day was the 
+   * last day of month. see date_time::years_duration for more details */
+  inline
+  ptime 
+  operator-(const ptime& t, const pdalboost::gregorian::years& y)
+  {
+    // get_neg_offset returns a negative duration, so we add
+    return t + y.get_neg_offset(t.date());
+  }
+
+  /*! Subtracts a years object from a ptime. Result will be same 
+   * month and day-of-month as ptime unless original day was the 
+   * last day of month. see date_time::years_duration for more details */
+  inline
+  ptime 
+  operator-=(ptime& t, const pdalboost::gregorian::years& y)
+  {
+    // get_neg_offset returns a negative duration, so we add
+    return t += y.get_neg_offset(t.date());
+  }
+
+}} // namespaces
+
+#endif // DATE_DURATION_OPERATORS_HPP___
diff --git a/vendor/pdalboost/boost/date_time/posix_time/posix_time_config.hpp b/vendor/pdalboost/boost/date_time/posix_time/posix_time_config.hpp
new file mode 100644
index 0000000..f67d6db
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/posix_time/posix_time_config.hpp
@@ -0,0 +1,178 @@
+#ifndef POSIX_TIME_CONFIG_HPP___
+#define POSIX_TIME_CONFIG_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include <cstdlib> //for MCW 7.2 std::abs(long long)
+#include <boost/limits.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/date_time/time_duration.hpp>
+#include <boost/date_time/time_resolution_traits.hpp>
+#include <boost/date_time/gregorian/gregorian_types.hpp>
+#include <boost/date_time/wrapping_int.hpp>
+#include <boost/date_time/compiler_config.hpp>
+
+namespace pdalboost {
+namespace posix_time {
+
+//Remove the following line if you want 64 bit millisecond resolution time
+//#define BOOST_GDTL_POSIX_TIME_STD_CONFIG
+
+#ifdef BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
+  // set up conditional test compilations
+#define BOOST_DATE_TIME_HAS_MILLISECONDS
+#define BOOST_DATE_TIME_HAS_MICROSECONDS
+#define BOOST_DATE_TIME_HAS_NANOSECONDS
+  typedef date_time::time_resolution_traits<pdalboost::date_time::time_resolution_traits_adapted64_impl, pdalboost::date_time::nano,
+    1000000000, 9 > time_res_traits;
+#else
+  // set up conditional test compilations
+#define BOOST_DATE_TIME_HAS_MILLISECONDS
+#define BOOST_DATE_TIME_HAS_MICROSECONDS
+#undef  BOOST_DATE_TIME_HAS_NANOSECONDS
+  typedef date_time::time_resolution_traits<
+    pdalboost::date_time::time_resolution_traits_adapted64_impl, pdalboost::date_time::micro,
+                                            1000000, 6 > time_res_traits;
+
+
+// #undef BOOST_DATE_TIME_HAS_MILLISECONDS
+// #undef BOOST_DATE_TIME_HAS_MICROSECONDS
+// #undef BOOST_DATE_TIME_HAS_NANOSECONDS
+//   typedef date_time::time_resolution_traits<pdalboost::int64_t, pdalboost::date_time::tenth,
+//                                              10, 0 > time_res_traits;
+
+#endif
+
+
+  //! Base time duration type
+  /*! \ingroup time_basics
+   */
+  class time_duration :
+    public date_time::time_duration<time_duration, time_res_traits>
+  {
+  public:
+    typedef time_res_traits rep_type;
+    typedef time_res_traits::day_type day_type;
+    typedef time_res_traits::hour_type hour_type;
+    typedef time_res_traits::min_type min_type;
+    typedef time_res_traits::sec_type sec_type;
+    typedef time_res_traits::fractional_seconds_type fractional_seconds_type;
+    typedef time_res_traits::tick_type tick_type;
+    typedef time_res_traits::impl_type impl_type;
+    time_duration(hour_type hour,
+                  min_type min,
+                  sec_type sec,
+                  fractional_seconds_type fs=0) :
+      date_time::time_duration<time_duration, time_res_traits>(hour,min,sec,fs)
+    {}
+    time_duration() :
+      date_time::time_duration<time_duration, time_res_traits>(0,0,0)
+    {}
+    //! Construct from special_values
+    time_duration(pdalboost::date_time::special_values sv) :
+      date_time::time_duration<time_duration, time_res_traits>(sv)
+    {}
+    //Give duration access to ticks constructor -- hide from users
+    friend class date_time::time_duration<time_duration, time_res_traits>;
+  protected:
+    explicit time_duration(impl_type tick_count) :
+      date_time::time_duration<time_duration, time_res_traits>(tick_count)
+    {}
+  };
+
+#ifdef BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
+
+  //! Simple implementation for the time rep
+  struct simple_time_rep
+  {
+    typedef gregorian::date      date_type;
+    typedef time_duration        time_duration_type;
+    simple_time_rep(date_type d, time_duration_type tod) :
+      day(d),
+      time_of_day(tod)
+    {
+      // make sure we have sane values for date & time
+      if(!day.is_special() && !time_of_day.is_special()){
+        if(time_of_day >= time_duration_type(24,0,0)) {
+          while(time_of_day >= time_duration_type(24,0,0)) {
+            day += date_type::duration_type(1);
+            time_of_day -= time_duration_type(24,0,0);
+          }
+        }
+        else if(time_of_day.is_negative()) {
+          while(time_of_day.is_negative()) {
+            day -= date_type::duration_type(1);
+            time_of_day += time_duration_type(24,0,0);
+          }
+        }
+      }
+    }
+    date_type day;
+    time_duration_type time_of_day;
+    bool is_special()const
+    {
+      return(is_pos_infinity() || is_neg_infinity() || is_not_a_date_time());
+    }
+    bool is_pos_infinity()const
+    {
+      return(day.is_pos_infinity() || time_of_day.is_pos_infinity());
+    }
+    bool is_neg_infinity()const
+    {
+      return(day.is_neg_infinity() || time_of_day.is_neg_infinity());
+    }
+    bool is_not_a_date_time()const
+    {
+      return(day.is_not_a_date() || time_of_day.is_not_a_date_time());
+    }
+  };
+
+  class posix_time_system_config
+  {
+   public:
+    typedef simple_time_rep time_rep_type;
+    typedef gregorian::date date_type;
+    typedef gregorian::date_duration date_duration_type;
+    typedef time_duration time_duration_type;
+    typedef time_res_traits::tick_type int_type;
+    typedef time_res_traits resolution_traits;
+#if (defined(BOOST_DATE_TIME_NO_MEMBER_INIT)) //help bad compilers
+#else
+    BOOST_STATIC_CONSTANT(pdalboost::int64_t, tick_per_second = 1000000000);
+#endif
+  };
+
+#else
+
+  class millisec_posix_time_system_config
+  {
+   public:
+    typedef pdalboost::int64_t time_rep_type;
+    //typedef time_res_traits::tick_type time_rep_type;
+    typedef gregorian::date date_type;
+    typedef gregorian::date_duration date_duration_type;
+    typedef time_duration time_duration_type;
+    typedef time_res_traits::tick_type int_type;
+    typedef time_res_traits::impl_type impl_type;
+    typedef time_res_traits resolution_traits;
+#if (defined(BOOST_DATE_TIME_NO_MEMBER_INIT)) //help bad compilers
+#else
+    BOOST_STATIC_CONSTANT(pdalboost::int64_t, tick_per_second = 1000000);
+#endif
+  };
+
+#endif
+
+} }//namespace posix_time
+
+
+#endif
+
+
diff --git a/vendor/pdalboost/boost/date_time/posix_time/posix_time_duration.hpp b/vendor/pdalboost/boost/date_time/posix_time/posix_time_duration.hpp
new file mode 100644
index 0000000..9729f39
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/posix_time/posix_time_duration.hpp
@@ -0,0 +1,82 @@
+#ifndef POSIX_TIME_DURATION_HPP___
+#define POSIX_TIME_DURATION_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland
+ * $Date$
+ */
+
+#include "boost/date_time/posix_time/posix_time_config.hpp"
+
+namespace pdalboost {
+namespace posix_time {
+
+  //! Allows expression of durations as an hour count
+  /*! \ingroup time_basics
+   */
+  class hours : public time_duration
+  {
+  public:
+    explicit hours(long h) :
+      time_duration(static_cast<hour_type>(h),0,0)
+    {}
+  };
+
+  //! Allows expression of durations as a minute count
+  /*! \ingroup time_basics
+   */
+  class minutes : public time_duration
+  {
+  public:
+    explicit minutes(long m) :
+      time_duration(0,static_cast<min_type>(m),0)
+    {}
+  };
+
+  //! Allows expression of durations as a seconds count
+  /*! \ingroup time_basics
+   */
+  class seconds : public time_duration
+  {
+  public:
+    explicit seconds(long s) :
+      time_duration(0,0,static_cast<sec_type>(s))
+    {}
+  };
+
+
+  //! Allows expression of durations as milli seconds
+  /*! \ingroup time_basics
+   */
+  typedef date_time::subsecond_duration<time_duration,1000> millisec;
+  typedef date_time::subsecond_duration<time_duration,1000> milliseconds;
+
+  //! Allows expression of durations as micro seconds
+  /*! \ingroup time_basics
+   */
+  typedef date_time::subsecond_duration<time_duration,1000000> microsec;
+  typedef date_time::subsecond_duration<time_duration,1000000> microseconds;
+
+  //This is probably not needed anymore...
+#if defined(BOOST_DATE_TIME_HAS_NANOSECONDS)
+
+  //! Allows expression of durations as nano seconds
+  /*! \ingroup time_basics
+   */
+  typedef date_time::subsecond_duration<time_duration,1000000000> nanosec;
+  typedef date_time::subsecond_duration<time_duration,1000000000> nanoseconds;
+
+
+#endif
+
+
+
+
+} }//namespace posix_time
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/posix_time/posix_time_system.hpp b/vendor/pdalboost/boost/date_time/posix_time/posix_time_system.hpp
new file mode 100644
index 0000000..eb6c29f
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/posix_time/posix_time_system.hpp
@@ -0,0 +1,68 @@
+#ifndef POSIX_TIME_SYSTEM_HPP___
+#define POSIX_TIME_SYSTEM_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland
+ * $Date$
+ */
+
+
+#include "boost/date_time/posix_time/posix_time_config.hpp"
+#include "boost/date_time/time_system_split.hpp"
+#include "boost/date_time/time_system_counted.hpp"
+#include "boost/date_time/compiler_config.hpp"
+
+
+namespace pdalboost {
+namespace posix_time { 
+
+#ifdef BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
+
+#if (defined(BOOST_DATE_TIME_NO_MEMBER_INIT)) //help bad compilers 
+  typedef date_time::split_timedate_system<posix_time_system_config, 1000000000> posix_time_system;
+#else
+  typedef date_time::split_timedate_system<posix_time_system_config> posix_time_system;
+#endif
+
+#else
+
+  typedef date_time::counted_time_rep<millisec_posix_time_system_config> int64_time_rep;
+  typedef date_time::counted_time_system<int64_time_rep> posix_time_system;
+
+#endif
+
+} }//namespace posix_time
+
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vendor/pdalboost/boost/date_time/posix_time/posix_time_types.hpp b/vendor/pdalboost/boost/date_time/posix_time/posix_time_types.hpp
new file mode 100644
index 0000000..2cc5c86
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/posix_time/posix_time_types.hpp
@@ -0,0 +1,55 @@
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland 
+ */
+#ifndef POSIX_TIME_TYPES_HPP___
+#define POSIX_TIME_TYPES_HPP___
+
+#include "boost/date_time/time_clock.hpp"
+#include "boost/date_time/microsec_time_clock.hpp"
+#include "boost/date_time/posix_time/ptime.hpp"
+#if defined(BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES)
+#include "boost/date_time/posix_time/date_duration_operators.hpp"
+#endif
+#include "boost/date_time/posix_time/posix_time_duration.hpp"
+#include "boost/date_time/posix_time/posix_time_system.hpp"
+#include "boost/date_time/posix_time/time_period.hpp"
+#include "boost/date_time/time_iterator.hpp"
+#include "boost/date_time/dst_rules.hpp"
+
+namespace pdalboost {
+
+//!Defines a non-adjusted time system with nano-second resolution and stable calculation properties
+namespace posix_time {
+
+  //! Iterator over a defined time duration
+  /*! \ingroup time_basics
+   */
+  typedef date_time::time_itr<ptime> time_iterator;
+  //! A time clock that has a resolution of one second
+  /*! \ingroup time_basics
+   */
+  typedef date_time::second_clock<ptime> second_clock;
+
+#ifdef BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK
+  //! A time clock that has a resolution of one microsecond
+  /*! \ingroup time_basics
+   */
+  typedef date_time::microsec_clock<ptime> microsec_clock;
+#endif
+
+  //! Define a dst null dst rule for the posix_time system
+  typedef date_time::null_dst_rules<ptime::date_type, time_duration> no_dst;
+  //! Define US dst rule calculator for the posix_time system
+  typedef date_time::us_dst_rules<ptime::date_type, time_duration> us_dst;
+
+
+} } //namespace posix_time
+
+
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/posix_time/ptime.hpp b/vendor/pdalboost/boost/date_time/posix_time/ptime.hpp
new file mode 100644
index 0000000..f541172
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/posix_time/ptime.hpp
@@ -0,0 +1,65 @@
+#ifndef POSIX_PTIME_HPP___
+#define POSIX_PTIME_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland 
+ * $Date$
+ */
+
+#include "boost/date_time/posix_time/posix_time_system.hpp"
+#include "boost/date_time/time.hpp"
+
+namespace pdalboost {
+
+namespace posix_time {
+ 
+  //bring special enum values into the namespace
+  using date_time::special_values;
+  using date_time::not_special;
+  using date_time::neg_infin;
+  using date_time::pos_infin;
+  using date_time::not_a_date_time;
+  using date_time::max_date_time;
+  using date_time::min_date_time; 
+  
+  //! Time type with no timezone or other adjustments
+  /*! \ingroup time_basics
+   */
+  class ptime : public date_time::base_time<ptime, posix_time_system>
+  {
+  public:
+    typedef posix_time_system time_system_type;
+    typedef time_system_type::time_rep_type time_rep_type;
+    typedef time_system_type::time_duration_type time_duration_type;
+    typedef ptime time_type;
+    //! Construct with date and offset in day
+    ptime(gregorian::date d,time_duration_type td) : date_time::base_time<time_type,time_system_type>(d,td)
+    {}
+    //! Construct a time at start of the given day (midnight)
+    explicit ptime(gregorian::date d) : date_time::base_time<time_type,time_system_type>(d,time_duration_type(0,0,0))
+    {}
+    //! Copy from time_rep
+    ptime(const time_rep_type& rhs):
+      date_time::base_time<time_type,time_system_type>(rhs)
+    {}
+    //! Construct from special value
+    ptime(const special_values sv) : date_time::base_time<time_type,time_system_type>(sv)
+    {}
+#if !defined(DATE_TIME_NO_DEFAULT_CONSTRUCTOR)
+    // Default constructor constructs to not_a_date_time
+    ptime() : date_time::base_time<time_type,time_system_type>(gregorian::date(not_a_date_time), time_duration_type(not_a_date_time))
+    {}
+#endif // DATE_TIME_NO_DEFAULT_CONSTRUCTOR
+      
+  };
+
+
+
+} }//namespace posix_time
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/posix_time/time_period.hpp b/vendor/pdalboost/boost/date_time/posix_time/time_period.hpp
new file mode 100644
index 0000000..d84f1a7
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/posix_time/time_period.hpp
@@ -0,0 +1,29 @@
+#ifndef POSIX_TIME_PERIOD_HPP___
+#define POSIX_TIME_PERIOD_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland 
+ * $Date$
+ */
+
+#include "boost/date_time/period.hpp"
+#include "boost/date_time/posix_time/posix_time_duration.hpp"
+#include "boost/date_time/posix_time/ptime.hpp"
+
+namespace pdalboost {
+namespace posix_time {
+
+  //! Time period type
+  /*! \ingroup time_basics
+   */
+  typedef date_time::period<ptime, time_duration> time_period;
+
+
+} }//namespace posix_time
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/special_defs.hpp b/vendor/pdalboost/boost/date_time/special_defs.hpp
new file mode 100644
index 0000000..44978ba
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/special_defs.hpp
@@ -0,0 +1,25 @@
+#ifndef DATE_TIME_SPECIAL_DEFS_HPP__
+#define DATE_TIME_SPECIAL_DEFS_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland 
+ * $Date$
+ */
+
+namespace pdalboost {
+namespace date_time {
+
+    enum special_values {not_a_date_time, 
+                         neg_infin, pos_infin, 
+                         min_date_time,  max_date_time,
+                         not_special, NumSpecialValues};
+
+
+} } //namespace date_time
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/time.hpp b/vendor/pdalboost/boost/date_time/time.hpp
new file mode 100644
index 0000000..2c752ed
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/time.hpp
@@ -0,0 +1,193 @@
+#ifndef DATE_TIME_TIME_HPP___
+#define DATE_TIME_TIME_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+/*! @file time.hpp
+  This file contains the interface for the time associated classes.
+*/
+#include <string>
+#include <boost/operators.hpp>
+#include <boost/date_time/time_defs.hpp>
+#include <boost/date_time/special_defs.hpp>
+
+namespace pdalboost {
+namespace date_time {
+
+  //! Representation of a precise moment in time, including the date.
+  /*! 
+    This class is a skeleton for the interface of a temporal type
+    with a resolution that is higher than a day.  It is intended that 
+    this class be the base class and that the actual time 
+    class be derived using the BN pattern.  In this way, the derived 
+    class can make decisions such as 'should there be a default constructor' 
+    and what should it set its value to, should there be optional constructors
+    say allowing only an time_durations that generate a time from a clock,etc.
+    So, in fact multiple time types can be created for a time_system with
+    different construction policies, and all of them can perform basic
+    operations by only writing a copy constructor.  Finally, compiler 
+    errors are also shorter. 
+    
+    The real behavior of the time class is provided by the time_system
+    template parameter.  This class must provide all the logic
+    for addition, subtraction, as well as define all the interface
+    types.
+    
+  */
+
+  template <class T, class time_system>
+  class base_time : private
+      pdalboost::less_than_comparable<T
+    , pdalboost::equality_comparable<T
+      > >
+  {
+  public:
+    // A tag for type categorization. Can be used to detect Boost.DateTime time points in generic code.
+    typedef void _is_boost_date_time_time_point;
+    typedef T time_type;
+    typedef typename time_system::time_rep_type time_rep_type;
+    typedef typename time_system::date_type date_type;
+    typedef typename time_system::date_duration_type date_duration_type;
+    typedef typename time_system::time_duration_type time_duration_type;
+    //typedef typename time_system::hms_type hms_type;
+    
+    base_time(const date_type& day, 
+              const time_duration_type& td, 
+              dst_flags dst=not_dst) :
+      time_(time_system::get_time_rep(day, td, dst))
+    {}
+    base_time(special_values sv) :
+      time_(time_system::get_time_rep(sv))
+    {}
+    base_time(const time_rep_type& rhs) :
+      time_(rhs)
+    {}
+    date_type date() const
+    {
+      return time_system::get_date(time_);
+    }
+    time_duration_type time_of_day() const
+    {
+      return time_system::get_time_of_day(time_);
+    }
+    /*! Optional bool parameter will return time zone as an offset 
+     * (ie "+07:00"). Empty string is returned for classes that do 
+     * not use a time_zone */
+    std::string zone_name(bool /*as_offset*/=false) const
+    {
+      return time_system::zone_name(time_);
+    }
+    /*! Optional bool parameter will return time zone as an offset 
+     * (ie "+07:00"). Empty string is returned for classes that do 
+     * not use a time_zone */
+    std::string zone_abbrev(bool /*as_offset*/=false) const
+    {
+      return time_system::zone_name(time_);
+    }
+    //! An empty string is returned for classes that do not use a time_zone
+    std::string zone_as_posix_string() const
+    {
+      return std::string();
+    }
+
+    //! check to see if date is not a value
+    bool is_not_a_date_time()  const
+    {
+      return time_.is_not_a_date_time();
+    }
+    //! check to see if date is one of the infinity values
+    bool is_infinity()  const
+    {
+      return (is_pos_infinity() || is_neg_infinity()); 
+    }
+    //! check to see if date is greater than all possible dates
+    bool is_pos_infinity()  const
+    {
+      return time_.is_pos_infinity();
+    }
+    //! check to see if date is greater than all possible dates
+    bool is_neg_infinity()  const
+    {
+      return time_.is_neg_infinity();
+    }
+    //! check to see if time is a special value
+    bool is_special() const
+    {
+      return(is_not_a_date_time() || is_infinity());
+    }
+    //!Equality operator -- others generated by pdalboost::equality_comparable
+    bool operator==(const time_type& rhs) const
+    {
+      return time_system::is_equal(time_,rhs.time_);
+    }
+    //!Equality operator -- others generated by pdalboost::less_than_comparable
+    bool operator<(const time_type& rhs) const
+    {
+      return time_system::is_less(time_,rhs.time_);
+    }
+    //! difference between two times
+    time_duration_type operator-(const time_type& rhs) const
+    {
+      return time_system::subtract_times(time_, rhs.time_);
+    }
+    //! add date durations
+    time_type operator+(const date_duration_type& dd) const
+    {
+      return time_system::add_days(time_, dd);
+    }
+    time_type operator+=(const date_duration_type& dd)
+    {
+      time_ = (time_system::get_time_rep(date() + dd, time_of_day()));
+      return time_type(time_);
+    }
+    //! subtract date durations
+    time_type operator-(const date_duration_type& dd) const
+    {
+      return time_system::subtract_days(time_, dd);
+    }
+    time_type operator-=(const date_duration_type& dd)
+    {
+      time_ = (time_system::get_time_rep(date() - dd, time_of_day()));
+      return time_type(time_);
+    }
+    //! add time durations
+    time_type operator+(const time_duration_type& td) const
+    {
+      return time_type(time_system::add_time_duration(time_, td));
+    }
+    time_type operator+=(const time_duration_type& td)
+    {
+      time_ = (time_system::get_time_rep(date(), time_of_day() + td));
+      return time_type(time_);
+    }
+    //! subtract time durations
+    time_type operator-(const time_duration_type& rhs) const
+    {
+      return time_system::subtract_time_duration(time_, rhs);
+    }
+    time_type operator-=(const time_duration_type& td) 
+    {
+      time_ = (time_system::get_time_rep(date(), time_of_day() - td));
+      return time_type(time_);
+    }
+    
+  protected:
+    time_rep_type time_;
+  };
+
+
+
+
+
+} } //namespace date_time::boost
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/time_clock.hpp b/vendor/pdalboost/boost/date_time/time_clock.hpp
new file mode 100644
index 0000000..00f294f
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/time_clock.hpp
@@ -0,0 +1,83 @@
+#ifndef DATE_TIME_TIME_CLOCK_HPP___
+#define DATE_TIME_TIME_CLOCK_HPP___
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+/*! @file time_clock.hpp
+  This file contains the interface for clock devices.
+*/
+
+#include "boost/date_time/c_time.hpp"
+#include "boost/shared_ptr.hpp"
+
+namespace pdalboost {
+namespace date_time {
+
+
+  //! A clock providing time level services based on C time_t capabilities
+  /*! This clock provides resolution to the 1 second level
+   */
+  template<class time_type>
+  class second_clock
+  {
+  public:
+    typedef typename time_type::date_type date_type;
+    typedef typename time_type::time_duration_type time_duration_type;
+
+    static time_type local_time()
+    {
+      ::std::time_t t;
+      ::std::time(&t);
+      ::std::tm curr, *curr_ptr;
+      //curr_ptr = ::std::localtime(&t);
+      curr_ptr = c_time::localtime(&t, &curr);
+      return create_time(curr_ptr);
+    }
+
+
+    //! Get the current day in universal date as a ymd_type
+    static time_type universal_time()
+    {
+
+      ::std::time_t t;
+      ::std::time(&t);
+      ::std::tm curr, *curr_ptr;
+      //curr_ptr = ::std::gmtime(&t);
+      curr_ptr = c_time::gmtime(&t, &curr);
+      return create_time(curr_ptr);
+    }
+
+    template<class time_zone_type>
+    static time_type local_time(pdalboost::shared_ptr<time_zone_type> tz_ptr)
+    {
+      typedef typename time_type::utc_time_type utc_time_type;
+      utc_time_type utc_time = second_clock<utc_time_type>::universal_time();
+      return time_type(utc_time, tz_ptr);
+    }
+
+
+  private:
+    static time_type create_time(::std::tm* current)
+    {
+      date_type d(static_cast<unsigned short>(current->tm_year + 1900),
+                  static_cast<unsigned short>(current->tm_mon + 1),
+                  static_cast<unsigned short>(current->tm_mday));
+      time_duration_type td(current->tm_hour,
+                            current->tm_min,
+                            current->tm_sec);
+      return time_type(d,td);
+    }
+
+  };
+
+
+} } //namespace date_time
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/time_defs.hpp b/vendor/pdalboost/boost/date_time/time_defs.hpp
new file mode 100644
index 0000000..f6e2d01
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/time_defs.hpp
@@ -0,0 +1,43 @@
+#ifndef DATE_TIME_TIME_PRECISION_LIMITS_HPP
+#define DATE_TIME_TIME_PRECISION_LIMITS_HPP
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland 
+ * $Date$
+ */
+
+
+
+/*! \file time_defs.hpp 
+  This file contains nice definitions for handling the resoluion of various time
+  reprsentations.
+*/
+
+namespace pdalboost {
+namespace date_time {
+
+  //!Defines some nice types for handling time level resolutions
+  enum time_resolutions {
+    sec,
+    tenth,
+    hundreth, // deprecated misspelled version of hundredth
+    hundredth = hundreth,
+    milli,
+    ten_thousandth,
+    micro,
+    nano,
+    NumResolutions
+  };
+
+  //! Flags for daylight savings or summer time
+  enum dst_flags {not_dst, is_dst, calculate};
+
+
+} } //namespace date_time
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/time_duration.hpp b/vendor/pdalboost/boost/date_time/time_duration.hpp
new file mode 100644
index 0000000..69bd28f
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/time_duration.hpp
@@ -0,0 +1,295 @@
+#ifndef DATE_TIME_TIME_DURATION_HPP___
+#define DATE_TIME_TIME_DURATION_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include <boost/cstdint.hpp>
+#include <boost/operators.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/date_time/time_defs.hpp>
+#include <boost/date_time/special_defs.hpp>
+#include <boost/date_time/compiler_config.hpp>
+
+namespace pdalboost {
+namespace date_time {
+
+
+  //! Represents some amount of elapsed time measure to a given resolution
+  /*! This class represents a standard set of capabilities for all
+      counted time durations.  Time duration implementations should derive
+      from this class passing their type as the first template parameter.
+      This design allows the subclass duration types to provide custom
+      construction policies or other custom features not provided here.
+
+      @param T The subclass type
+      @param rep_type The time resolution traits for this duration type.
+  */
+  template<class T, typename rep_type>
+  class time_duration : private
+      pdalboost::less_than_comparable<T
+    , pdalboost::equality_comparable<T
+    > >
+  /* dividable, addable, and subtractable operator templates
+   * won't work with this class (MSVC++ 6.0). return type
+   * from '+=' is different than expected return type
+   * from '+'. multipliable probably wont work
+   * either (haven't tried) */
+  {
+  public:
+    // A tag for type categorization. Can be used to detect Boost.DateTime duration types in generic code.
+    typedef void _is_boost_date_time_duration;
+    typedef T duration_type;  //the subclass
+    typedef rep_type traits_type;
+    typedef typename rep_type::day_type  day_type;
+    typedef typename rep_type::hour_type hour_type;
+    typedef typename rep_type::min_type  min_type;
+    typedef typename rep_type::sec_type  sec_type;
+    typedef typename rep_type::fractional_seconds_type fractional_seconds_type;
+    typedef typename rep_type::tick_type tick_type;
+    typedef typename rep_type::impl_type impl_type;
+
+    time_duration() : ticks_(0) {}
+    time_duration(hour_type hours_in,
+                  min_type minutes_in,
+                  sec_type seconds_in=0,
+                  fractional_seconds_type frac_sec_in = 0) :
+      ticks_(rep_type::to_tick_count(hours_in,minutes_in,seconds_in,frac_sec_in))
+    {}
+    // copy constructor required for dividable<>
+    //! Construct from another time_duration (Copy constructor)
+    time_duration(const time_duration<T, rep_type>& other)
+      : ticks_(other.ticks_)
+    {}
+    //! Construct from special_values
+    time_duration(special_values sv) : ticks_(impl_type::from_special(sv))
+    {}
+    //! Returns smallest representable duration
+    static duration_type unit()
+    {
+      return duration_type(0,0,0,1);
+    }
+    //! Return the number of ticks in a second
+    static tick_type ticks_per_second()
+    {
+      return rep_type::res_adjust();
+    }
+    //! Provide the resolution of this duration type
+    static time_resolutions resolution()
+    {
+      return rep_type::resolution();
+    }
+    //! Returns number of hours in the duration
+    hour_type hours()   const
+    {
+      return static_cast<hour_type>(ticks() / (3600*ticks_per_second()));
+    }
+    //! Returns normalized number of minutes
+    min_type minutes() const
+    {
+      return static_cast<min_type>((ticks() / (60*ticks_per_second())) % 60);
+    }
+    //! Returns normalized number of seconds (0..60)
+    sec_type seconds() const
+    {
+      return static_cast<sec_type>((ticks()/ticks_per_second()) % 60);
+    }
+    //! Returns total number of seconds truncating any fractional seconds
+    sec_type total_seconds() const
+    {
+      return static_cast<sec_type>(ticks() / ticks_per_second());
+    }
+    //! Returns total number of milliseconds truncating any fractional seconds
+    tick_type total_milliseconds() const
+    {
+      if (ticks_per_second() < 1000) {
+        return ticks() * (static_cast<tick_type>(1000) / ticks_per_second());
+      }
+      return ticks() / (ticks_per_second() / static_cast<tick_type>(1000)) ;
+    }
+    //! Returns total number of nanoseconds truncating any sub millisecond values
+    tick_type total_nanoseconds() const
+    {
+      if (ticks_per_second() < 1000000000) {
+        return ticks() * (static_cast<tick_type>(1000000000) / ticks_per_second());
+      }
+      return ticks() / (ticks_per_second() / static_cast<tick_type>(1000000000)) ;
+    }
+    //! Returns total number of microseconds truncating any sub microsecond values
+    tick_type total_microseconds() const
+    {
+      if (ticks_per_second() < 1000000) {
+        return ticks() * (static_cast<tick_type>(1000000) / ticks_per_second());
+      }
+      return ticks() / (ticks_per_second() / static_cast<tick_type>(1000000)) ;
+    }
+    //! Returns count of fractional seconds at given resolution
+    fractional_seconds_type fractional_seconds() const
+    {
+      return (ticks() % ticks_per_second());
+    }
+    //! Returns number of possible digits in fractional seconds
+    static unsigned short num_fractional_digits()
+    {
+      return rep_type::num_fractional_digits();
+    }
+    duration_type invert_sign() const
+    {
+      return duration_type(ticks_ * (-1));
+    }
+    bool is_negative() const
+    {
+      return ticks_ < 0;
+    }
+    bool operator<(const time_duration& rhs)  const
+    {
+      return ticks_ <  rhs.ticks_;
+    }
+    bool operator==(const time_duration& rhs)  const
+    {
+      return ticks_ ==  rhs.ticks_;
+    }
+    //! unary- Allows for time_duration td = -td1
+    duration_type operator-()const
+    {
+      return duration_type(ticks_ * (-1));
+    }
+    duration_type operator-(const duration_type& d) const
+    {
+      return duration_type(ticks_ - d.ticks_);
+    }
+    duration_type operator+(const duration_type& d) const
+    {
+      return duration_type(ticks_ + d.ticks_);
+    }
+    duration_type operator/(int divisor) const
+    {
+      return duration_type(ticks_ / divisor);
+    }
+    duration_type operator-=(const duration_type& d)
+    {
+      ticks_ = ticks_ - d.ticks_;
+      return duration_type(ticks_);
+    }
+    duration_type operator+=(const duration_type& d)
+    {
+      ticks_ = ticks_ + d.ticks_;
+      return duration_type(ticks_);
+    }
+    //! Division operations on a duration with an integer.
+    duration_type operator/=(int divisor)
+    {
+      ticks_ = ticks_ / divisor;
+      return duration_type(ticks_);
+    }
+    //! Multiplication operations an a duration with an integer
+    duration_type operator*(int rhs) const
+    {
+      return duration_type(ticks_ * rhs);
+    }
+    duration_type operator*=(int divisor)
+    {
+      ticks_ = ticks_ * divisor;
+      return duration_type(ticks_);
+    }
+    tick_type ticks() const
+    {
+      return traits_type::as_number(ticks_);
+    }
+
+    //! Is ticks_ a special value?
+    bool is_special()const
+    {
+      if(traits_type::is_adapted())
+      {
+        return ticks_.is_special();
+      }
+      else{
+        return false;
+      }
+    }
+    //! Is duration pos-infinity
+    bool is_pos_infinity()const
+    {
+      if(traits_type::is_adapted())
+      {
+        return ticks_.is_pos_infinity();
+      }
+      else{
+        return false;
+      }
+    }
+    //! Is duration neg-infinity
+    bool is_neg_infinity()const
+    {
+      if(traits_type::is_adapted())
+      {
+        return ticks_.is_neg_infinity();
+      }
+      else{
+        return false;
+      }
+    }
+    //! Is duration not-a-date-time
+    bool is_not_a_date_time()const
+    {
+      if(traits_type::is_adapted())
+      {
+        return ticks_.is_nan();
+      }
+      else{
+        return false;
+      }
+    }
+
+    //! Used for special_values output
+    impl_type get_rep()const
+    {
+      return ticks_;
+    }
+
+  protected:
+    explicit time_duration(impl_type in) : ticks_(in) {}
+    impl_type ticks_;
+  };
+
+
+
+  //! Template for instantiating derived adjusting durations
+  /* These templates are designed to work with multiples of
+   * 10 for frac_of_second and resoultion adjustment
+   */
+  template<class base_duration, pdalboost::int64_t frac_of_second>
+  class subsecond_duration : public base_duration
+  {
+  public:
+    typedef typename base_duration::impl_type impl_type;
+    typedef typename base_duration::traits_type traits_type;
+
+  private:
+    // To avoid integer overflow we precompute the duration resolution conversion coefficient (ticket #3471)
+    BOOST_STATIC_ASSERT_MSG((traits_type::ticks_per_second >= frac_of_second ? traits_type::ticks_per_second % frac_of_second : frac_of_second % traits_type::ticks_per_second) == 0,\
+      "The base duration resolution must be a multiple of the subsecond duration resolution");
+    BOOST_STATIC_CONSTANT(pdalboost::int64_t, adjustment_ratio = (traits_type::ticks_per_second >= frac_of_second ? traits_type::ticks_per_second / frac_of_second : frac_of_second / traits_type::ticks_per_second));
+
+  public:
+    explicit subsecond_duration(pdalboost::int64_t ss) :
+      base_duration(impl_type(traits_type::ticks_per_second >= frac_of_second ? ss * adjustment_ratio : ss / adjustment_ratio))
+    {
+    }
+  };
+
+
+
+} } //namespace date_time
+
+
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/time_iterator.hpp b/vendor/pdalboost/boost/date_time/time_iterator.hpp
new file mode 100644
index 0000000..e843b82
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/time_iterator.hpp
@@ -0,0 +1,52 @@
+#ifndef DATE_TIME_TIME_ITERATOR_HPP___
+#define DATE_TIME_TIME_ITERATOR_HPP___
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+namespace pdalboost {
+namespace date_time {
+
+
+  //! Simple time iterator skeleton class
+  template<class time_type>
+  class time_itr {
+  public:
+    typedef typename time_type::time_duration_type time_duration_type;
+    time_itr(time_type t, time_duration_type d) : current_(t), offset_(d) {}
+    time_itr& operator++()
+    {
+      current_ = current_ + offset_;
+      return *this;
+    }
+    time_itr& operator--()
+    {
+      current_ = current_ - offset_;
+      return *this;
+    }
+    time_type operator*() {return current_;}
+    time_type* operator->() {return &current_;}
+    bool operator<  (const time_type& t) {return current_ < t;}
+    bool operator<= (const time_type& t) {return current_ <= t;}
+    bool operator!=  (const time_type& t) {return current_ != t;}
+    bool operator== (const time_type& t) {return current_ == t;}
+    bool operator>  (const time_type& t) {return current_ > t;}
+    bool operator>= (const time_type& t) {return current_ >= t;}
+
+  private:
+    time_type current_;
+    time_duration_type offset_;
+  };
+
+
+
+} }//namespace date_time
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/time_resolution_traits.hpp b/vendor/pdalboost/boost/date_time/time_resolution_traits.hpp
new file mode 100644
index 0000000..c04609b
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/time_resolution_traits.hpp
@@ -0,0 +1,144 @@
+#ifndef DATE_TIME_TIME_RESOLUTION_TRAITS_HPP
+#define DATE_TIME_TIME_RESOLUTION_TRAITS_HPP
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+#include <boost/cstdint.hpp>
+#include <boost/date_time/time_defs.hpp>
+#include <boost/date_time/int_adapter.hpp>
+#include <boost/date_time/compiler_config.hpp>
+
+namespace pdalboost {
+namespace date_time {
+
+  //! Simple function to calculate absolute value of a numeric type
+  template <typename T>
+  // JDG [7/6/02 made a template],
+  // moved here from time_duration.hpp 2003-Sept-4.
+  inline T absolute_value(T x)
+  {
+    return x < 0 ? -x : x;
+  }
+
+  //! traits struct for time_resolution_traits implementation type
+  struct time_resolution_traits_bi32_impl {
+    typedef pdalboost::int32_t int_type;
+    typedef pdalboost::int32_t impl_type;
+    static int_type as_number(impl_type i){ return i;}
+    //! Used to determine if implemented type is int_adapter or int
+    static bool is_adapted() { return false;}
+  };
+  //! traits struct for time_resolution_traits implementation type
+  struct time_resolution_traits_adapted32_impl {
+    typedef pdalboost::int32_t int_type;
+    typedef pdalboost::date_time::int_adapter<pdalboost::int32_t> impl_type;
+    static int_type as_number(impl_type i){ return i.as_number();}
+    //! Used to determine if implemented type is int_adapter or int
+    static bool is_adapted() { return true;}
+  };
+  //! traits struct for time_resolution_traits implementation type
+  struct time_resolution_traits_bi64_impl {
+    typedef pdalboost::int64_t int_type;
+    typedef pdalboost::int64_t impl_type;
+    static int_type as_number(impl_type i){ return i;}
+    //! Used to determine if implemented type is int_adapter or int
+    static bool is_adapted() { return false;}
+  };
+  //! traits struct for time_resolution_traits implementation type
+  struct time_resolution_traits_adapted64_impl {
+    typedef pdalboost::int64_t int_type;
+    typedef pdalboost::date_time::int_adapter<pdalboost::int64_t> impl_type;
+    static int_type as_number(impl_type i){ return i.as_number();}
+    //! Used to determine if implemented type is int_adapter or int
+    static bool is_adapted() { return true;}
+  };
+
+  template<typename frac_sec_type,
+           time_resolutions res,
+#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
+           pdalboost::int64_t resolution_adjust,
+#else
+           typename frac_sec_type::int_type resolution_adjust,
+#endif
+           unsigned short frac_digits,
+           typename var_type = pdalboost::int32_t >
+  class time_resolution_traits {
+  public:
+    typedef typename frac_sec_type::int_type fractional_seconds_type;
+    typedef typename frac_sec_type::int_type tick_type;
+    typedef typename frac_sec_type::impl_type impl_type;
+    typedef var_type  day_type;
+    typedef var_type  hour_type;
+    typedef var_type  min_type;
+    typedef var_type  sec_type;
+
+    // bring in function from frac_sec_type traits structs
+    static fractional_seconds_type as_number(impl_type i)
+    {
+      return frac_sec_type::as_number(i);
+    }
+    static bool is_adapted()
+    {
+      return frac_sec_type::is_adapted();
+    }
+
+    //Would like this to be frac_sec_type, but some compilers complain
+#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
+    BOOST_STATIC_CONSTANT(pdalboost::int64_t, ticks_per_second = resolution_adjust);
+#else
+    BOOST_STATIC_CONSTANT(fractional_seconds_type, ticks_per_second = resolution_adjust);
+#endif
+
+    static time_resolutions resolution()
+    {
+      return res;
+    }
+    static unsigned short num_fractional_digits()
+    {
+      return frac_digits;
+    }
+    static fractional_seconds_type res_adjust()
+    {
+      return resolution_adjust;
+    }
+    //! Any negative argument results in a negative tick_count
+    static tick_type to_tick_count(hour_type hours,
+                                   min_type  minutes,
+                                   sec_type  seconds,
+                                   fractional_seconds_type  fs)
+    {
+      if(hours < 0 || minutes < 0 || seconds < 0 || fs < 0)
+      {
+        hours = absolute_value(hours);
+        minutes = absolute_value(minutes);
+        seconds = absolute_value(seconds);
+        fs = absolute_value(fs);
+        return (((((fractional_seconds_type(hours)*3600)
+                   + (fractional_seconds_type(minutes)*60)
+                   + seconds)*res_adjust()) + fs) * -1);
+      }
+
+      return (((fractional_seconds_type(hours)*3600)
+               + (fractional_seconds_type(minutes)*60)
+               + seconds)*res_adjust()) + fs;
+    }
+
+  };
+
+  typedef time_resolution_traits<time_resolution_traits_adapted32_impl, milli, 1000, 3 > milli_res;
+  typedef time_resolution_traits<time_resolution_traits_adapted64_impl, micro, 1000000, 6 > micro_res;
+  typedef time_resolution_traits<time_resolution_traits_adapted64_impl, nano,  1000000000, 9 > nano_res;
+
+
+} } //namespace date_time
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/time_system_counted.hpp b/vendor/pdalboost/boost/date_time/time_system_counted.hpp
new file mode 100644
index 0000000..1981084
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/time_system_counted.hpp
@@ -0,0 +1,254 @@
+#ifndef DATE_TIME_TIME_SYSTEM_COUNTED_HPP
+#define DATE_TIME_TIME_SYSTEM_COUNTED_HPP
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+
+#include "boost/date_time/time_defs.hpp"
+#include <string>
+
+
+namespace pdalboost {
+namespace date_time {
+
+  //! Time representation that uses a single integer count
+  template<class config>
+  struct counted_time_rep
+  {
+    typedef typename config::int_type   int_type;
+    typedef typename config::date_type  date_type;
+    typedef typename config::impl_type  impl_type;
+    typedef typename date_type::duration_type date_duration_type;
+    typedef typename date_type::calendar_type calendar_type;
+    typedef typename date_type::ymd_type ymd_type;
+    typedef typename config::time_duration_type time_duration_type;
+    typedef typename config::resolution_traits   resolution_traits;
+    
+    counted_time_rep(const date_type& d, const time_duration_type& time_of_day) 
+      : time_count_(1)
+    {
+      if(d.is_infinity() || d.is_not_a_date() || time_of_day.is_special()) {
+        time_count_ = time_of_day.get_rep() + d.day_count();
+        //std::cout << time_count_ << std::endl;
+      }
+      else {    
+        time_count_ = (d.day_number() * frac_sec_per_day()) + time_of_day.ticks();
+      }
+    }
+    explicit counted_time_rep(int_type count) :
+      time_count_(count)
+    {}
+    explicit counted_time_rep(impl_type count) :
+      time_count_(count)
+    {}
+    date_type date() const
+    {
+      if(time_count_.is_special()) {
+        return date_type(time_count_.as_special());
+      }
+      else {
+        typename calendar_type::date_int_type dc = static_cast<typename calendar_type::date_int_type>(day_count());
+        //std::cout << "time_rep here:" << dc << std::endl;
+        ymd_type ymd = calendar_type::from_day_number(dc);
+        return date_type(ymd);
+      }
+    }
+    //int_type day_count() const
+    unsigned long day_count() const
+    {
+      /* resolution_traits::as_number returns a pdalboost::int64_t & 
+       * frac_sec_per_day is also a pdalboost::int64_t so, naturally, 
+       * the division operation returns a pdalboost::int64_t. 
+       * The static_cast to an unsigned long is ok (results in no data loss) 
+       * because frac_sec_per_day is either the number of 
+       * microseconds per day, or the number of nanoseconds per day. 
+       * Worst case scenario: resolution_traits::as_number returns the 
+       * maximum value an int64_t can hold and frac_sec_per_day 
+       * is microseconds per day (lowest possible value). 
+       * The division operation will then return a value of 106751991 - 
+       * easily fitting in an unsigned long. 
+       */
+      return static_cast<unsigned long>(resolution_traits::as_number(time_count_) / frac_sec_per_day());
+    }
+    int_type time_count() const
+    {
+      return resolution_traits::as_number(time_count_);
+    }
+    int_type tod() const
+    {
+      return resolution_traits::as_number(time_count_) % frac_sec_per_day();
+    }
+    static int_type frac_sec_per_day()
+    {
+      int_type seconds_per_day = 60*60*24;
+      int_type fractional_sec_per_sec(resolution_traits::res_adjust());
+      return seconds_per_day*fractional_sec_per_sec;
+    }
+    bool is_pos_infinity()const
+    {
+      return impl_type::is_pos_inf(time_count_.as_number());
+    }
+    bool is_neg_infinity()const
+    {
+      return impl_type::is_neg_inf(time_count_.as_number());
+    }
+    bool is_not_a_date_time()const
+    {
+      return impl_type::is_not_a_number(time_count_.as_number());
+    }
+    bool is_special()const
+    {
+      return time_count_.is_special();
+    }
+    impl_type get_rep()const
+    {
+      return time_count_;
+    }
+  private:
+    impl_type time_count_;
+  };
+
+  //! An unadjusted time system implementation.
+  template<class time_rep>
+  class counted_time_system
+  {
+   public:
+    typedef time_rep time_rep_type;
+    typedef typename time_rep_type::impl_type impl_type;
+    typedef typename time_rep_type::time_duration_type time_duration_type;
+    typedef typename time_duration_type::fractional_seconds_type fractional_seconds_type;
+    typedef typename time_rep_type::date_type date_type;
+    typedef typename time_rep_type::date_duration_type date_duration_type;
+
+
+    template<class T> static void unused_var(const T&) {}
+
+    static time_rep_type get_time_rep(const date_type& day,
+                                      const time_duration_type& tod,
+                                      date_time::dst_flags dst=not_dst)
+    {
+      unused_var(dst);
+      return time_rep_type(day, tod);
+    }
+
+    static time_rep_type get_time_rep(special_values sv)
+    {
+      switch (sv) {
+      case not_a_date_time:
+        return time_rep_type(date_type(not_a_date_time),
+                             time_duration_type(not_a_date_time));
+      case pos_infin:
+        return time_rep_type(date_type(pos_infin), 
+                             time_duration_type(pos_infin));
+      case neg_infin:
+        return time_rep_type(date_type(neg_infin), 
+                             time_duration_type(neg_infin));
+      case max_date_time: {
+        time_duration_type td = time_duration_type(24,0,0,0) - time_duration_type(0,0,0,1);
+        return time_rep_type(date_type(max_date_time), td);
+      }
+      case min_date_time:
+        return time_rep_type(date_type(min_date_time), time_duration_type(0,0,0,0));
+
+      default:
+        return time_rep_type(date_type(not_a_date_time),
+                             time_duration_type(not_a_date_time));
+        
+      }
+
+    }
+
+    static date_type get_date(const time_rep_type& val)
+    {
+      return val.date();
+    }
+    static time_duration_type get_time_of_day(const time_rep_type& val)
+    {
+      if(val.is_special()) {
+        return time_duration_type(val.get_rep().as_special());
+      }
+      else{
+        return time_duration_type(0,0,0,val.tod()); 
+      }
+    }
+    static std::string zone_name(const time_rep_type&)
+    {
+      return "";
+    }
+    static bool is_equal(const time_rep_type& lhs, const time_rep_type& rhs)
+    {
+      return (lhs.time_count() == rhs.time_count());
+    }
+    static bool is_less(const time_rep_type& lhs, const time_rep_type& rhs)
+    {
+      return (lhs.time_count() < rhs.time_count());
+    }
+    static time_rep_type add_days(const time_rep_type& base,
+                                  const date_duration_type& dd)
+    {
+      if(base.is_special() || dd.is_special()) {
+        return(time_rep_type(base.get_rep() + dd.get_rep()));
+      }
+      else {
+        return time_rep_type(base.time_count() + (dd.days() * time_rep_type::frac_sec_per_day()));
+      }
+    }
+    static time_rep_type subtract_days(const time_rep_type& base,
+                                       const date_duration_type& dd)
+    {
+      if(base.is_special() || dd.is_special()) {
+        return(time_rep_type(base.get_rep() - dd.get_rep()));
+      }
+      else{
+        return time_rep_type(base.time_count() - (dd.days() * time_rep_type::frac_sec_per_day()));
+      }
+    }
+    static time_rep_type subtract_time_duration(const time_rep_type& base,
+                                                const time_duration_type& td)
+    {
+      if(base.is_special() || td.is_special()) {
+        return(time_rep_type(base.get_rep() - td.get_rep()));
+      }
+      else {
+        return time_rep_type(base.time_count() - td.ticks());
+      }
+    }
+    static time_rep_type add_time_duration(const time_rep_type& base,
+                                           time_duration_type td)
+    {
+      if(base.is_special() || td.is_special()) {
+        return(time_rep_type(base.get_rep() + td.get_rep()));
+      }
+      else {
+        return time_rep_type(base.time_count() + td.ticks());
+      }
+    }
+    static time_duration_type subtract_times(const time_rep_type& lhs,
+                                             const time_rep_type& rhs)
+    {
+      if(lhs.is_special() || rhs.is_special()) {
+        return(time_duration_type(
+          impl_type::to_special((lhs.get_rep() - rhs.get_rep()).as_number())));
+      }
+      else {
+        fractional_seconds_type fs = lhs.time_count() - rhs.time_count();
+        return time_duration_type(0,0,0,fs); 
+      }
+    }
+    
+  };
+
+
+} } //namespace date_time
+
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/time_system_split.hpp b/vendor/pdalboost/boost/date_time/time_system_split.hpp
new file mode 100644
index 0000000..10c8977
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/time_system_split.hpp
@@ -0,0 +1,207 @@
+#ifndef DATE_TIME_TIME_SYSTEM_SPLIT_HPP
+#define DATE_TIME_TIME_SYSTEM_SPLIT_HPP
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+#include <string>
+#include "boost/date_time/compiler_config.hpp"
+#include "boost/date_time/special_defs.hpp"
+
+namespace pdalboost {
+namespace date_time {
+
+  //! An unadjusted time system implementation.
+#if (defined(BOOST_DATE_TIME_NO_MEMBER_INIT))  
+  template<typename config, pdalboost::int32_t ticks_per_second>
+#else
+  template<typename config>
+#endif
+  class split_timedate_system
+  {
+   public:
+    typedef typename config::time_rep_type time_rep_type;
+    typedef typename config::date_type     date_type;
+    typedef typename config::time_duration_type time_duration_type;
+    typedef typename config::date_duration_type date_duration_type;
+    typedef typename config::int_type int_type;
+    typedef typename config::resolution_traits   resolution_traits;
+
+    //86400 is number of seconds in a day...
+#if (defined(BOOST_DATE_TIME_NO_MEMBER_INIT))  
+    typedef date_time::wrapping_int<int_type, INT64_C(86400) * ticks_per_second > wrap_int_type;
+#else
+   private:
+     BOOST_STATIC_CONSTANT(int_type, ticks_per_day = INT64_C(86400) * config::tick_per_second);
+   public:
+# if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0X581) )
+    typedef date_time::wrapping_int< split_timedate_system::int_type, split_timedate_system::ticks_per_day> wrap_int_type;
+# else
+    typedef date_time::wrapping_int<int_type, ticks_per_day> wrap_int_type;
+#endif
+#endif
+
+    static time_rep_type get_time_rep(special_values sv)
+    {
+      switch (sv) {
+      case not_a_date_time:
+        return time_rep_type(date_type(not_a_date_time),
+                             time_duration_type(not_a_date_time));
+      case pos_infin:
+        return time_rep_type(date_type(pos_infin), 
+                             time_duration_type(pos_infin));
+      case neg_infin:
+        return time_rep_type(date_type(neg_infin), 
+                             time_duration_type(neg_infin));
+      case max_date_time: {
+        time_duration_type td = time_duration_type(24,0,0,0) - time_duration_type(0,0,0,1);
+        return time_rep_type(date_type(max_date_time), td);
+      }
+      case min_date_time:
+        return time_rep_type(date_type(min_date_time), time_duration_type(0,0,0,0));
+
+      default:
+        return time_rep_type(date_type(not_a_date_time),
+                             time_duration_type(not_a_date_time));
+        
+      }
+
+    }
+
+    static time_rep_type get_time_rep(const date_type& day,
+                                      const time_duration_type& tod,
+                                      date_time::dst_flags /* dst */ = not_dst)
+    {
+      if(day.is_special() || tod.is_special()) {
+        if(day.is_not_a_date() || tod.is_not_a_date_time()) {
+          return time_rep_type(date_type(not_a_date_time),
+                               time_duration_type(not_a_date_time));
+        }
+        else if(day.is_pos_infinity()) {
+          if(tod.is_neg_infinity()) {
+            return time_rep_type(date_type(not_a_date_time),
+                                 time_duration_type(not_a_date_time));
+          }
+          else {
+            return time_rep_type(day, time_duration_type(pos_infin));
+          }
+        }
+        else if(day.is_neg_infinity()) {
+          if(tod.is_pos_infinity()) {
+            return time_rep_type(date_type(not_a_date_time),
+                                 time_duration_type(not_a_date_time));
+          }
+          else {
+            return time_rep_type(day, time_duration_type(neg_infin));
+          }
+        }
+        else if(tod.is_pos_infinity()) {
+          if(day.is_neg_infinity()) {
+            return time_rep_type(date_type(not_a_date_time),
+                                 time_duration_type(not_a_date_time));
+          }
+          else {
+            return time_rep_type(date_type(pos_infin), tod);
+          }
+        }
+        else if(tod.is_neg_infinity()) {
+          if(day.is_pos_infinity()) {
+            return time_rep_type(date_type(not_a_date_time),
+                                 time_duration_type(not_a_date_time));
+          }
+          else {
+            return time_rep_type(date_type(neg_infin), tod);
+          }
+        }
+      }
+      return time_rep_type(day, tod);
+    }
+    static date_type get_date(const time_rep_type& val)
+    {
+      return date_type(val.day);
+    }
+    static time_duration_type get_time_of_day(const time_rep_type& val)
+    {
+      return time_duration_type(val.time_of_day);
+    }
+    static std::string zone_name(const time_rep_type&)
+    {
+      return std::string();
+    }
+    static bool is_equal(const time_rep_type& lhs, const time_rep_type& rhs)
+    {
+      return ((lhs.day == rhs.day) && (lhs.time_of_day == rhs.time_of_day));
+    }
+    static bool is_less(const time_rep_type& lhs, const time_rep_type& rhs)
+    {
+      if (lhs.day < rhs.day) return true;
+      if (lhs.day > rhs.day) return false;
+      return (lhs.time_of_day < rhs.time_of_day);
+    }
+    static time_rep_type add_days(const time_rep_type& base,
+                                  const date_duration_type& dd)
+    {
+      return time_rep_type(base.day+dd, base.time_of_day);
+    }
+    static time_rep_type subtract_days(const time_rep_type& base,
+                                       const date_duration_type& dd)
+    {
+      return split_timedate_system::get_time_rep(base.day-dd, base.time_of_day);
+    }
+    static time_rep_type subtract_time_duration(const time_rep_type& base,
+                                                const time_duration_type& td)
+    {
+      if(base.day.is_special() || td.is_special())
+      {
+        return split_timedate_system::get_time_rep(base.day, -td);
+      }
+      if (td.is_negative()) {
+        time_duration_type td1 = td.invert_sign();
+        return add_time_duration(base,td1);
+      }
+
+      wrap_int_type  day_offset(base.time_of_day.ticks());
+      date_duration_type day_overflow(static_cast<typename date_duration_type::duration_rep_type>(day_offset.subtract(td.ticks())));
+
+      return time_rep_type(base.day-day_overflow,
+                           time_duration_type(0,0,0,day_offset.as_int()));
+    }
+    static time_rep_type add_time_duration(const time_rep_type& base,
+                                           time_duration_type td)
+    {
+      if(base.day.is_special() || td.is_special()) {
+        return split_timedate_system::get_time_rep(base.day, td);
+      }
+      if (td.is_negative()) {
+        time_duration_type td1 = td.invert_sign();
+        return subtract_time_duration(base,td1);
+      }
+
+      wrap_int_type day_offset(base.time_of_day.ticks());      
+      date_duration_type day_overflow(static_cast< typename date_duration_type::duration_rep_type >(day_offset.add(td.ticks())));
+
+      return time_rep_type(base.day+day_overflow,
+                           time_duration_type(0,0,0,day_offset.as_int()));
+    }
+    static time_duration_type subtract_times(const time_rep_type& lhs,
+                                             const time_rep_type& rhs)
+    {
+      date_duration_type dd = lhs.day - rhs.day;
+      time_duration_type td(dd.days()*24,0,0); //days * 24 hours
+      time_duration_type td2 = lhs.time_of_day - rhs.time_of_day;
+      return td+td2;
+      // return time_rep_type(base.day-dd, base.time_of_day);
+    }
+    
+  };
+
+} } //namespace date_time
+
+
+#endif
diff --git a/vendor/pdalboost/boost/date_time/wrapping_int.hpp b/vendor/pdalboost/boost/date_time/wrapping_int.hpp
new file mode 100644
index 0000000..ff42c7e
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/wrapping_int.hpp
@@ -0,0 +1,169 @@
+#ifndef _DATE_TIME_WRAPPING_INT_HPP__
+#define _DATE_TIME_WRAPPING_INT_HPP__
+
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+namespace pdalboost {
+namespace date_time {
+
+//! A wrapping integer used to support time durations (WARNING: only instantiate with a signed type)
+/*! In composite date and time types this type is used to
+ *  wrap at the day boundary.
+ *  Ex:
+ *  A wrapping_int<short, 10> will roll over after nine, and
+ *  roll under below zero. This gives a range of [0,9]
+ *
+ * NOTE: it is strongly recommended that wrapping_int2 be used
+ * instead of wrapping_int as wrapping_int is to be depricated
+ * at some point soon.
+ *
+ * Also Note that warnings will occur if instantiated with an
+ * unsigned type. Only a signed type should be used!
+ */
+template<typename int_type_, int_type_ wrap_val>
+class wrapping_int {
+public:
+  typedef int_type_ int_type;
+  //typedef overflow_type_ overflow_type;
+  static int_type wrap_value() {return wrap_val;}
+  //!Add, return true if wrapped
+  wrapping_int(int_type v) : value_(v) {}
+  //! Explicit converion method
+  int_type as_int()   const   {return value_;}
+  operator int_type() const   {return value_;}
+  //!Add, return number of wraps performed
+  /*! The sign of the returned value will indicate which direction the
+   * wraps went. Ex: add a negative number and wrapping under could occur,
+   * this would be indicated by a negative return value. If wrapping over
+   * took place, a positive value would be returned */
+  template< typename IntT >
+  IntT add(IntT v)
+  {
+    int_type remainder = static_cast<int_type>(v % (wrap_val));
+    IntT overflow = static_cast<IntT>(v / (wrap_val));
+    value_ = static_cast<int_type>(value_ + remainder);
+    return calculate_wrap(overflow);
+  }
+  //! Subtract will return '+d' if wrapping under took place ('d' is the number of wraps)
+  /*! The sign of the returned value will indicate which direction the
+   * wraps went (positive indicates wrap under, negative indicates wrap over).
+   * Ex: subtract a negative number and wrapping over could
+   * occur, this would be indicated by a negative return value. If
+   * wrapping under took place, a positive value would be returned. */
+  template< typename IntT >
+  IntT subtract(IntT v)
+  {
+    int_type remainder = static_cast<int_type>(v % (wrap_val));
+    IntT underflow = static_cast<IntT>(-(v / (wrap_val)));
+    value_ = static_cast<int_type>(value_ - remainder);
+    return calculate_wrap(underflow) * -1;
+  }
+private:
+  int_type value_;
+
+  template< typename IntT >
+  IntT calculate_wrap(IntT wrap)
+  {
+    if ((value_) >= wrap_val)
+    {
+      ++wrap;
+      value_ -= (wrap_val);
+    }
+    else if(value_ < 0)
+    {
+      --wrap;
+      value_ += (wrap_val);
+    }
+    return wrap;
+  }
+
+};
+
+
+//! A wrapping integer used to wrap around at the top (WARNING: only instantiate with a signed type)
+/*! Bad name, quick impl to fix a bug -- fix later!!
+ *  This allows the wrap to restart at a value other than 0.
+ */
+template<typename int_type_, int_type_ wrap_min, int_type_ wrap_max>
+class wrapping_int2 {
+public:
+  typedef int_type_ int_type;
+  static int_type wrap_value() {return wrap_max;}
+  static int_type min_value()  {return wrap_min;}
+  /*! If initializing value is out of range of [wrap_min, wrap_max],
+   * value will be initialized to closest of min or max */
+  wrapping_int2(int_type v) : value_(v) {
+    if(value_ < wrap_min)
+    {
+      value_ = wrap_min;
+    }
+    if(value_ > wrap_max)
+    {
+      value_ = wrap_max;
+    }
+  }
+  //! Explicit converion method
+  int_type as_int()   const   {return value_;}
+  operator int_type() const {return value_;}
+  //!Add, return number of wraps performed
+  /*! The sign of the returned value will indicate which direction the
+   * wraps went. Ex: add a negative number and wrapping under could occur,
+   * this would be indicated by a negative return value. If wrapping over
+   * took place, a positive value would be returned */
+  template< typename IntT >
+  IntT add(IntT v)
+  {
+    int_type remainder = static_cast<int_type>(v % (wrap_max - wrap_min + 1));
+    IntT overflow = static_cast<IntT>(v / (wrap_max - wrap_min + 1));
+    value_ = static_cast<int_type>(value_ + remainder);
+    return calculate_wrap(overflow);
+  }
+  //! Subtract will return '-d' if wrapping under took place ('d' is the number of wraps)
+  /*! The sign of the returned value will indicate which direction the
+   * wraps went. Ex: subtract a negative number and wrapping over could
+   * occur, this would be indicated by a positive return value. If
+   * wrapping under took place, a negative value would be returned */
+  template< typename IntT >
+  IntT subtract(IntT v)
+  {
+    int_type remainder = static_cast<int_type>(v % (wrap_max - wrap_min + 1));
+    IntT underflow = static_cast<IntT>(-(v / (wrap_max - wrap_min + 1)));
+    value_ = static_cast<int_type>(value_ - remainder);
+    return calculate_wrap(underflow);
+  }
+
+private:
+  int_type value_;
+
+  template< typename IntT >
+  IntT calculate_wrap(IntT wrap)
+  {
+    if ((value_) > wrap_max)
+    {
+      ++wrap;
+      value_ -= (wrap_max - wrap_min + 1);
+    }
+    else if((value_) < wrap_min)
+    {
+      --wrap;
+      value_ += (wrap_max - wrap_min + 1);
+    }
+    return wrap;
+  }
+};
+
+
+
+} } //namespace date_time
+
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/date_time/year_month_day.hpp b/vendor/pdalboost/boost/date_time/year_month_day.hpp
new file mode 100644
index 0000000..36ded7f
--- /dev/null
+++ b/vendor/pdalboost/boost/date_time/year_month_day.hpp
@@ -0,0 +1,45 @@
+#ifndef YearMonthDayBase_HPP__
+#define YearMonthDayBase_HPP__
+
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland 
+ * $Date$
+ */
+
+namespace pdalboost {
+namespace date_time {
+
+  //! Allow rapid creation of ymd triples of different types
+  template<typename YearType, typename MonthType, typename DayType>
+  struct year_month_day_base {
+    year_month_day_base(YearType  year, 
+                        MonthType month,
+                        DayType   day);
+    YearType year;
+    MonthType month;
+    DayType day;
+    typedef YearType  year_type;
+    typedef MonthType month_type;
+    typedef DayType   day_type;
+  };
+  
+  
+  //! A basic constructor
+  template<typename YearType, typename MonthType, typename DayType>
+  inline
+  year_month_day_base<YearType,MonthType,DayType>::year_month_day_base(YearType y, 
+                                                                       MonthType m,
+                                                                       DayType d) :
+    year(y),
+    month(m),
+    day(d)
+  {}
+  
+} }//namespace date_time
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/detail/allocator_utilities.hpp b/vendor/pdalboost/boost/detail/allocator_utilities.hpp
new file mode 100644
index 0000000..f9b0570
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/allocator_utilities.hpp
@@ -0,0 +1,187 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See Boost website at http://www.boost.org/
+ */
+
+#ifndef BOOST_DETAIL_ALLOCATOR_UTILITIES_HPP
+#define BOOST_DETAIL_ALLOCATOR_UTILITIES_HPP
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <cstddef>
+#include <memory>
+#include <new>
+
+namespace pdalboost{
+
+namespace detail{
+
+/* Allocator adaption layer. Some stdlibs provide allocators without rebind
+ * and template ctors. These facilities are simulated with the external
+ * template class rebind_to and the aid of partial_std_allocator_wrapper.
+ */
+
+namespace allocator{
+
+/* partial_std_allocator_wrapper inherits the functionality of a std
+ * allocator while providing a templatized ctor and other bits missing
+ * in some stdlib implementation or another.
+ */
+
+template<typename Type>
+class partial_std_allocator_wrapper:public std::allocator<Type>
+{
+public:
+  /* Oddly enough, STLport does not define std::allocator<void>::value_type
+   * when configured to work without partial template specialization.
+   * No harm in supplying the definition here unconditionally.
+   */
+
+  typedef Type value_type;
+
+  partial_std_allocator_wrapper(){};
+
+  template<typename Other>
+  partial_std_allocator_wrapper(const partial_std_allocator_wrapper<Other>&){}
+
+  partial_std_allocator_wrapper(const std::allocator<Type>& x):
+    std::allocator<Type>(x)
+  {
+  };
+
+#if defined(BOOST_DINKUMWARE_STDLIB)
+  /* Dinkumware guys didn't provide a means to call allocate() without
+   * supplying a hint, in disagreement with the standard.
+   */
+
+  Type* allocate(std::size_t n,const void* hint=0)
+  {
+    std::allocator<Type>& a=*this;
+    return a.allocate(n,hint);
+  }
+#endif
+
+};
+
+/* Detects whether a given allocator belongs to a defective stdlib not
+ * having the required member templates.
+ * Note that it does not suffice to check the Boost.Config stdlib
+ * macros, as the user might have passed a custom, compliant allocator.
+ * The checks also considers partial_std_allocator_wrapper to be
+ * a standard defective allocator.
+ */
+
+#if defined(BOOST_NO_STD_ALLOCATOR)&&\
+  (defined(BOOST_HAS_PARTIAL_STD_ALLOCATOR)||defined(BOOST_DINKUMWARE_STDLIB))
+
+template<typename Allocator>
+struct is_partial_std_allocator
+{
+  BOOST_STATIC_CONSTANT(bool,
+    value=
+      (is_same<
+        std::allocator<BOOST_DEDUCED_TYPENAME Allocator::value_type>,
+        Allocator
+      >::value)||
+      (is_same<
+        partial_std_allocator_wrapper<
+          BOOST_DEDUCED_TYPENAME Allocator::value_type>,
+        Allocator
+      >::value));
+};
+
+#else
+
+template<typename Allocator>
+struct is_partial_std_allocator
+{
+  BOOST_STATIC_CONSTANT(bool,value=false);
+};
+
+#endif
+
+/* rebind operations for defective std allocators */
+
+template<typename Allocator,typename Type>
+struct partial_std_allocator_rebind_to
+{
+  typedef partial_std_allocator_wrapper<Type> type;
+};
+
+/* rebind operation in all other cases */
+
+template<typename Allocator>
+struct rebinder
+{
+  template<typename Type>
+  struct result
+  {
+      typedef typename Allocator::BOOST_NESTED_TEMPLATE 
+          rebind<Type>::other other;
+  };
+};
+
+template<typename Allocator,typename Type>
+struct compliant_allocator_rebind_to
+{
+  typedef typename rebinder<Allocator>::
+      BOOST_NESTED_TEMPLATE result<Type>::other type;
+};
+
+/* rebind front-end */
+
+template<typename Allocator,typename Type>
+struct rebind_to:
+  mpl::eval_if_c<
+    is_partial_std_allocator<Allocator>::value,
+    partial_std_allocator_rebind_to<Allocator,Type>,
+    compliant_allocator_rebind_to<Allocator,Type>
+  >
+{
+};
+
+/* allocator-independent versions of construct and destroy */
+
+template<typename Type>
+void construct(void* p,const Type& t)
+{
+  new (p) Type(t);
+}
+
+#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1500))
+/* MSVC++ issues spurious warnings about unreferencend formal parameters
+ * in destroy<Type> when Type is a class with trivial dtor.
+ */
+
+#pragma warning(push)
+#pragma warning(disable:4100)  
+#endif
+
+template<typename Type>
+void destroy(const Type* p)
+{
+
+#if BOOST_WORKAROUND(__SUNPRO_CC,BOOST_TESTED_AT(0x590))
+  const_cast<Type*>(p)->~Type();
+#else
+  p->~Type();
+#endif
+
+}
+
+#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1500))
+#pragma warning(pop)
+#endif
+
+} /* namespace pdalboost::detail::allocator */
+
+} /* namespace pdalboost::detail */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/detail/atomic_redef_macros.hpp b/vendor/pdalboost/boost/detail/atomic_redef_macros.hpp
new file mode 100644
index 0000000..dfd15f5
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/atomic_redef_macros.hpp
@@ -0,0 +1,19 @@
+// Copyright (C) 2013 Vicente J. Botet Escriba
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#if defined(BOOST_INTEL)
+
+#pragma pop_macro("atomic_compare_exchange")
+#pragma pop_macro("atomic_compare_exchange_explicit")
+#pragma pop_macro("atomic_exchange")
+#pragma pop_macro("atomic_exchange_explicit")
+#pragma pop_macro("atomic_is_lock_free")
+#pragma pop_macro("atomic_load")
+#pragma pop_macro("atomic_load_explicit")
+#pragma pop_macro("atomic_store")
+#pragma pop_macro("atomic_store_explicit")
+
+#endif // #if defined(BOOST_INTEL)
diff --git a/vendor/pdalboost/boost/detail/atomic_undef_macros.hpp b/vendor/pdalboost/boost/detail/atomic_undef_macros.hpp
new file mode 100644
index 0000000..18d840a
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/atomic_undef_macros.hpp
@@ -0,0 +1,39 @@
+// Copyright (C) 2013 Vicente J. Botet Escriba
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#if defined(BOOST_INTEL)
+
+#pragma push_macro("atomic_compare_exchange")
+#undef atomic_compare_exchange
+
+#pragma push_macro("atomic_compare_exchange_explicit")
+#undef atomic_compare_exchange_explicit
+
+#pragma push_macro("atomic_exchange")
+#undef atomic_exchange
+
+#pragma push_macro("atomic_exchange_explicit")
+#undef atomic_exchange_explicit
+
+#pragma push_macro("atomic_is_lock_free")
+#undef atomic_is_lock_free
+
+#pragma push_macro("atomic_load")
+#undef atomic_load
+
+#pragma push_macro("atomic_load_explicit")
+#undef atomic_load_explicit
+
+#pragma push_macro("atomic_store")
+#undef atomic_store
+
+#pragma push_macro("atomic_store_explicit")
+#undef atomic_store_explicit
+
+
+#endif // #if defined(BOOST_INTEL)
+
+
diff --git a/vendor/pdalboost/boost/detail/basic_pointerbuf.hpp b/vendor/pdalboost/boost/detail/basic_pointerbuf.hpp
new file mode 100644
index 0000000..2d4b66b
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/basic_pointerbuf.hpp
@@ -0,0 +1,139 @@
+//-----------------------------------------------------------------------------
+// boost detail/templated_streams.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2013 John Maddock, Antony Polukhin
+// 
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_BASIC_POINTERBUF_HPP
+#define BOOST_DETAIL_BASIC_POINTERBUF_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include "boost/config.hpp"
+#include <streambuf>
+
+namespace pdalboost { namespace detail {
+
+//
+// class basic_pointerbuf:
+// acts as a stream buffer which wraps around a pair of pointers:
+//
+template <class charT, class BufferT >
+class basic_pointerbuf : public BufferT {
+protected:
+   typedef BufferT base_type;
+   typedef basic_pointerbuf<charT, BufferT> this_type;
+   typedef typename base_type::int_type int_type;
+   typedef typename base_type::char_type char_type;
+   typedef typename base_type::pos_type pos_type;
+   typedef ::std::streamsize streamsize;
+   typedef typename base_type::off_type off_type;
+
+public:
+   basic_pointerbuf() : base_type() { setbuf(0, 0); }
+   const charT* getnext() { return this->gptr(); }
+
+#ifndef BOOST_NO_USING_TEMPLATE
+    using base_type::pptr;
+    using base_type::pbase;
+#else
+    charT* pptr() const { return base_type::pptr(); }
+    charT* pbase() const { return base_type::pbase(); }
+#endif
+
+protected:
+   // VC mistakenly assumes that `setbuf` and other functions are not referenced.
+   // Marking those functions with `inline` suppresses the warnings.
+   // There must be no harm from marking virtual functions as inline: inline virtual
+   // call can be inlined ONLY when the compiler knows the "exact class".
+   inline base_type* setbuf(char_type* s, streamsize n);
+   inline typename this_type::pos_type seekpos(pos_type sp, ::std::ios_base::openmode which);
+   inline typename this_type::pos_type seekoff(off_type off, ::std::ios_base::seekdir way, ::std::ios_base::openmode which);
+
+private:
+   basic_pointerbuf& operator=(const basic_pointerbuf&);
+   basic_pointerbuf(const basic_pointerbuf&);
+};
+
+template<class charT, class BufferT>
+BufferT*
+basic_pointerbuf<charT, BufferT>::setbuf(char_type* s, streamsize n)
+{
+   this->setg(s, s, s + n);
+   return this;
+}
+
+template<class charT, class BufferT>
+typename basic_pointerbuf<charT, BufferT>::pos_type
+basic_pointerbuf<charT, BufferT>::seekoff(off_type off, ::std::ios_base::seekdir way, ::std::ios_base::openmode which)
+{
+   typedef typename pdalboost::int_t<sizeof(way) * CHAR_BIT>::least cast_type;
+
+   if(which & ::std::ios_base::out)
+      return pos_type(off_type(-1));
+   std::ptrdiff_t size = this->egptr() - this->eback();
+   std::ptrdiff_t pos = this->gptr() - this->eback();
+   charT* g = this->eback();
+   switch(static_cast<cast_type>(way))
+   {
+   case ::std::ios_base::beg:
+      if((off < 0) || (off > size))
+         return pos_type(off_type(-1));
+      else
+         this->setg(g, g + off, g + size);
+      break;
+   case ::std::ios_base::end:
+      if((off < 0) || (off > size))
+         return pos_type(off_type(-1));
+      else
+         this->setg(g, g + size - off, g + size);
+      break;
+   case ::std::ios_base::cur:
+   {
+      std::ptrdiff_t newpos = static_cast<std::ptrdiff_t>(pos + off);
+      if((newpos < 0) || (newpos > size))
+         return pos_type(off_type(-1));
+      else
+         this->setg(g, g + newpos, g + size);
+      break;
+   }
+   default: ;
+   }
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4244)
+#endif
+   return static_cast<pos_type>(this->gptr() - this->eback());
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+template<class charT, class BufferT>
+typename basic_pointerbuf<charT, BufferT>::pos_type
+basic_pointerbuf<charT, BufferT>::seekpos(pos_type sp, ::std::ios_base::openmode which)
+{
+   if(which & ::std::ios_base::out)
+      return pos_type(off_type(-1));
+   off_type size = static_cast<off_type>(this->egptr() - this->eback());
+   charT* g = this->eback();
+   if(off_type(sp) <= size)
+   {
+      this->setg(g, g + off_type(sp), g + size);
+   }
+   return pos_type(off_type(-1));
+}
+
+}} // namespace pdalboost::detail
+
+#endif // BOOST_DETAIL_BASIC_POINTERBUF_HPP
+
diff --git a/vendor/pdalboost/boost/detail/bitmask.hpp b/vendor/pdalboost/boost/detail/bitmask.hpp
new file mode 100644
index 0000000..08ad4d0
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/bitmask.hpp
@@ -0,0 +1,47 @@
+//  boost/detail/bitmask.hpp  ------------------------------------------------//
+
+//  Copyright Beman Dawes 2006
+
+//  Distributed under the Boost Software License, Version 1.0
+//  http://www.boost.org/LICENSE_1_0.txt
+
+//  Usage:  enum foo { a=1, b=2, c=4 };
+//          BOOST_BITMASK( foo );
+//
+//          void f( foo arg );
+//          ...
+//          f( a | c );
+
+#ifndef BOOST_BITMASK_HPP
+#define BOOST_BITMASK_HPP
+
+#include <boost/cstdint.hpp>
+
+#define BOOST_BITMASK(Bitmask)                                            \
+                                                                          \
+  inline Bitmask operator| (Bitmask x , Bitmask y )                       \
+  { return static_cast<Bitmask>( static_cast<pdalboost::int_least32_t>(x)     \
+      | static_cast<pdalboost::int_least32_t>(y)); }                          \
+                                                                          \
+  inline Bitmask operator& (Bitmask x , Bitmask y )                       \
+  { return static_cast<Bitmask>( static_cast<pdalboost::int_least32_t>(x)     \
+      & static_cast<pdalboost::int_least32_t>(y)); }                          \
+                                                                          \
+  inline Bitmask operator^ (Bitmask x , Bitmask y )                       \
+  { return static_cast<Bitmask>( static_cast<pdalboost::int_least32_t>(x)     \
+      ^ static_cast<pdalboost::int_least32_t>(y)); }                          \
+                                                                          \
+  inline Bitmask operator~ (Bitmask x )                                   \
+  { return static_cast<Bitmask>(~static_cast<pdalboost::int_least32_t>(x)); } \
+                                                                          \
+  inline Bitmask & operator&=(Bitmask & x , Bitmask y)                    \
+  { x = x & y ; return x ; }                                              \
+                                                                          \
+  inline Bitmask & operator|=(Bitmask & x , Bitmask y)                    \
+  { x = x | y ; return x ; }                                              \
+                                                                          \
+  inline Bitmask & operator^=(Bitmask & x , Bitmask y)                    \
+  { x = x ^ y ; return x ; }                                              
+
+#endif // BOOST_BITMASK_HPP
+
diff --git a/vendor/pdalboost/boost/detail/call_traits.hpp b/vendor/pdalboost/boost/detail/call_traits.hpp
new file mode 100644
index 0000000..3ed58cc
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/call_traits.hpp
@@ -0,0 +1,172 @@
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/utility for most recent version including documentation.
+
+// call_traits: defines typedefs for function usage
+// (see libs/utility/call_traits.htm)
+
+/* Release notes:
+   23rd July 2000:
+      Fixed array specialization. (JM)
+      Added Borland specific fixes for reference types
+      (issue raised by Steve Cleary).
+*/
+
+#ifndef BOOST_DETAIL_CALL_TRAITS_HPP
+#define BOOST_DETAIL_CALL_TRAITS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#include <boost/config.hpp>
+#endif
+#include <cstddef>
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace pdalboost{
+
+namespace detail{
+
+template <typename T, bool small_>
+struct ct_imp2
+{
+   typedef const T& param_type;
+};
+
+template <typename T>
+struct ct_imp2<T, true>
+{
+   typedef const T param_type;
+};
+
+template <typename T, bool isp, bool b1, bool b2>
+struct ct_imp
+{
+   typedef const T& param_type;
+};
+
+template <typename T, bool isp, bool b2>
+struct ct_imp<T, isp, true, b2>
+{
+   typedef typename ct_imp2<T, sizeof(T) <= sizeof(void*)>::param_type param_type;
+};
+
+template <typename T, bool isp, bool b1>
+struct ct_imp<T, isp, b1, true>
+{
+   typedef typename ct_imp2<T, sizeof(T) <= sizeof(void*)>::param_type param_type;
+};
+
+template <typename T, bool b1, bool b2>
+struct ct_imp<T, true, b1, b2>
+{
+   typedef const T param_type;
+};
+
+}
+
+template <typename T>
+struct call_traits
+{
+public:
+   typedef T value_type;
+   typedef T& reference;
+   typedef const T& const_reference;
+   //
+   // C++ Builder workaround: we should be able to define a compile time
+   // constant and pass that as a single template parameter to ct_imp<T,bool>,
+   // however compiler bugs prevent this - instead pass three bool's to
+   // ct_imp<T,bool,bool,bool> and add an extra partial specialisation
+   // of ct_imp to handle the logic. (JM)
+   typedef typename pdalboost::detail::ct_imp<
+      T,
+      ::pdalboost::is_pointer<T>::value,
+      ::pdalboost::is_arithmetic<T>::value,
+      ::pdalboost::is_enum<T>::value
+   >::param_type param_type;
+};
+
+template <typename T>
+struct call_traits<T&>
+{
+   typedef T& value_type;
+   typedef T& reference;
+   typedef const T& const_reference;
+   typedef T& param_type;  // hh removed const
+};
+
+#if BOOST_WORKAROUND( __BORLANDC__,  < 0x5A0 )
+// these are illegal specialisations; cv-qualifies applied to
+// references have no effect according to [8.3.2p1],
+// C++ Builder requires them though as it treats cv-qualified
+// references as distinct types...
+template <typename T>
+struct call_traits<T&const>
+{
+   typedef T& value_type;
+   typedef T& reference;
+   typedef const T& const_reference;
+   typedef T& param_type;  // hh removed const
+};
+template <typename T>
+struct call_traits<T&volatile>
+{
+   typedef T& value_type;
+   typedef T& reference;
+   typedef const T& const_reference;
+   typedef T& param_type;  // hh removed const
+};
+template <typename T>
+struct call_traits<T&const volatile>
+{
+   typedef T& value_type;
+   typedef T& reference;
+   typedef const T& const_reference;
+   typedef T& param_type;  // hh removed const
+};
+
+template <typename T>
+struct call_traits< T * >
+{
+   typedef T * value_type;
+   typedef T * & reference;
+   typedef T * const & const_reference;
+   typedef T * const param_type;  // hh removed const
+};
+#endif
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+template <typename T, std::size_t N>
+struct call_traits<T [N]>
+{
+private:
+   typedef T array_type[N];
+public:
+   // degrades array to pointer:
+   typedef const T* value_type;
+   typedef array_type& reference;
+   typedef const array_type& const_reference;
+   typedef const T* const param_type;
+};
+
+template <typename T, std::size_t N>
+struct call_traits<const T [N]>
+{
+private:
+   typedef const T array_type[N];
+public:
+   // degrades array to pointer:
+   typedef const T* value_type;
+   typedef array_type& reference;
+   typedef const array_type& const_reference;
+   typedef const T* const param_type;
+};
+#endif
+
+}
+
+#endif // BOOST_DETAIL_CALL_TRAITS_HPP
diff --git a/vendor/pdalboost/boost/detail/compressed_pair.hpp b/vendor/pdalboost/boost/detail/compressed_pair.hpp
new file mode 100644
index 0000000..4031585
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/compressed_pair.hpp
@@ -0,0 +1,443 @@
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/utility for most recent version including documentation.
+
+// compressed_pair: pair that "compresses" empty members
+// (see libs/utility/doc/html/compressed_pair.html)
+//
+// JM changes 25 Jan 2004:
+// For the case where T1 == T2 and both are empty, then first() and second()
+// should return different objects.
+// JM changes 25 Jan 2000:
+// Removed default arguments from compressed_pair_switch to get
+// C++ Builder 4 to accept them
+// rewriten swap to get gcc and C++ builder to compile.
+// added partial specialisations for case T1 == T2 to avoid duplicate constructor defs.
+
+#ifndef BOOST_DETAIL_COMPRESSED_PAIR_HPP
+#define BOOST_DETAIL_COMPRESSED_PAIR_HPP
+
+#include <algorithm>
+
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_empty.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/call_traits.hpp>
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable:4512)
+#endif 
+namespace pdalboost
+{
+
+template <class T1, class T2>
+class compressed_pair;
+
+
+// compressed_pair
+
+namespace details
+{
+   // JM altered 26 Jan 2000:
+   template <class T1, class T2, bool IsSame, bool FirstEmpty, bool SecondEmpty>
+   struct compressed_pair_switch;
+
+   template <class T1, class T2>
+   struct compressed_pair_switch<T1, T2, false, false, false>
+      {static const int value = 0;};
+
+   template <class T1, class T2>
+   struct compressed_pair_switch<T1, T2, false, true, true>
+      {static const int value = 3;};
+
+   template <class T1, class T2>
+   struct compressed_pair_switch<T1, T2, false, true, false>
+      {static const int value = 1;};
+
+   template <class T1, class T2>
+   struct compressed_pair_switch<T1, T2, false, false, true>
+      {static const int value = 2;};
+
+   template <class T1, class T2>
+   struct compressed_pair_switch<T1, T2, true, true, true>
+      {static const int value = 4;};
+
+   template <class T1, class T2>
+   struct compressed_pair_switch<T1, T2, true, false, false>
+      {static const int value = 5;};
+
+   template <class T1, class T2, int Version> class compressed_pair_imp;
+
+#ifdef __GNUC__
+   // workaround for GCC (JM):
+   using std::swap;
+#endif
+   //
+   // can't call unqualified swap from within classname::swap
+   // as Koenig lookup rules will find only the classname::swap
+   // member function not the global declaration, so use cp_swap
+   // as a forwarding function (JM):
+   template <typename T>
+   inline void cp_swap(T& t1, T& t2)
+   {
+#ifndef __GNUC__
+      using std::swap;
+#endif
+      swap(t1, t2);
+   }
+
+   // 0    derive from neither
+
+   template <class T1, class T2>
+   class compressed_pair_imp<T1, T2, 0>
+   {
+   public:
+      typedef T1                                                 first_type;
+      typedef T2                                                 second_type;
+      typedef typename call_traits<first_type>::param_type       first_param_type;
+      typedef typename call_traits<second_type>::param_type      second_param_type;
+      typedef typename call_traits<first_type>::reference        first_reference;
+      typedef typename call_traits<second_type>::reference       second_reference;
+      typedef typename call_traits<first_type>::const_reference  first_const_reference;
+      typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+      compressed_pair_imp() {} 
+
+      compressed_pair_imp(first_param_type x, second_param_type y)
+         : first_(x), second_(y) {}
+
+      compressed_pair_imp(first_param_type x)
+         : first_(x) {}
+
+      compressed_pair_imp(second_param_type y)
+         : second_(y) {}
+
+      first_reference       first()       {return first_;}
+      first_const_reference first() const {return first_;}
+
+      second_reference       second()       {return second_;}
+      second_const_reference second() const {return second_;}
+
+      void swap(::pdalboost::compressed_pair<T1, T2>& y)
+      {
+         cp_swap(first_, y.first());
+         cp_swap(second_, y.second());
+      }
+   private:
+      first_type first_;
+      second_type second_;
+   };
+
+   // 1    derive from T1
+
+   template <class T1, class T2>
+   class compressed_pair_imp<T1, T2, 1>
+      : protected ::pdalboost::remove_cv<T1>::type
+   {
+   public:
+      typedef T1                                                 first_type;
+      typedef T2                                                 second_type;
+      typedef typename call_traits<first_type>::param_type       first_param_type;
+      typedef typename call_traits<second_type>::param_type      second_param_type;
+      typedef typename call_traits<first_type>::reference        first_reference;
+      typedef typename call_traits<second_type>::reference       second_reference;
+      typedef typename call_traits<first_type>::const_reference  first_const_reference;
+      typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+      compressed_pair_imp() {}
+
+      compressed_pair_imp(first_param_type x, second_param_type y)
+         : first_type(x), second_(y) {}
+
+      compressed_pair_imp(first_param_type x)
+         : first_type(x) {}
+
+      compressed_pair_imp(second_param_type y)
+         : second_(y) {}
+
+      first_reference       first()       {return *this;}
+      first_const_reference first() const {return *this;}
+
+      second_reference       second()       {return second_;}
+      second_const_reference second() const {return second_;}
+
+      void swap(::pdalboost::compressed_pair<T1,T2>& y)
+      {
+         // no need to swap empty base class:
+         cp_swap(second_, y.second());
+      }
+   private:
+      second_type second_;
+   };
+
+   // 2    derive from T2
+
+   template <class T1, class T2>
+   class compressed_pair_imp<T1, T2, 2>
+      : protected ::pdalboost::remove_cv<T2>::type
+   {
+   public:
+      typedef T1                                                 first_type;
+      typedef T2                                                 second_type;
+      typedef typename call_traits<first_type>::param_type       first_param_type;
+      typedef typename call_traits<second_type>::param_type      second_param_type;
+      typedef typename call_traits<first_type>::reference        first_reference;
+      typedef typename call_traits<second_type>::reference       second_reference;
+      typedef typename call_traits<first_type>::const_reference  first_const_reference;
+      typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+      compressed_pair_imp() {}
+
+      compressed_pair_imp(first_param_type x, second_param_type y)
+         : second_type(y), first_(x) {}
+
+      compressed_pair_imp(first_param_type x)
+         : first_(x) {}
+
+      compressed_pair_imp(second_param_type y)
+         : second_type(y) {}
+
+      first_reference       first()       {return first_;}
+      first_const_reference first() const {return first_;}
+
+      second_reference       second()       {return *this;}
+      second_const_reference second() const {return *this;}
+
+      void swap(::pdalboost::compressed_pair<T1,T2>& y)
+      {
+         // no need to swap empty base class:
+         cp_swap(first_, y.first());
+      }
+
+   private:
+      first_type first_;
+   };
+
+   // 3    derive from T1 and T2
+
+   template <class T1, class T2>
+   class compressed_pair_imp<T1, T2, 3>
+      : protected ::pdalboost::remove_cv<T1>::type,
+        protected ::pdalboost::remove_cv<T2>::type
+   {
+   public:
+      typedef T1                                                 first_type;
+      typedef T2                                                 second_type;
+      typedef typename call_traits<first_type>::param_type       first_param_type;
+      typedef typename call_traits<second_type>::param_type      second_param_type;
+      typedef typename call_traits<first_type>::reference        first_reference;
+      typedef typename call_traits<second_type>::reference       second_reference;
+      typedef typename call_traits<first_type>::const_reference  first_const_reference;
+      typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+      compressed_pair_imp() {}
+
+      compressed_pair_imp(first_param_type x, second_param_type y)
+         : first_type(x), second_type(y) {}
+
+      compressed_pair_imp(first_param_type x)
+         : first_type(x) {}
+
+      compressed_pair_imp(second_param_type y)
+         : second_type(y) {}
+
+      first_reference       first()       {return *this;}
+      first_const_reference first() const {return *this;}
+
+      second_reference       second()       {return *this;}
+      second_const_reference second() const {return *this;}
+      //
+      // no need to swap empty bases:
+      void swap(::pdalboost::compressed_pair<T1,T2>&) {}
+   };
+
+   // JM
+   // 4    T1 == T2, T1 and T2 both empty
+   //      Originally this did not store an instance of T2 at all
+   //      but that led to problems beause it meant &x.first() == &x.second()
+   //      which is not true for any other kind of pair, so now we store an instance
+   //      of T2 just in case the user is relying on first() and second() returning
+   //      different objects (albeit both empty).
+   template <class T1, class T2>
+   class compressed_pair_imp<T1, T2, 4>
+      : protected ::pdalboost::remove_cv<T1>::type
+   {
+   public:
+      typedef T1                                                 first_type;
+      typedef T2                                                 second_type;
+      typedef typename call_traits<first_type>::param_type       first_param_type;
+      typedef typename call_traits<second_type>::param_type      second_param_type;
+      typedef typename call_traits<first_type>::reference        first_reference;
+      typedef typename call_traits<second_type>::reference       second_reference;
+      typedef typename call_traits<first_type>::const_reference  first_const_reference;
+      typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+      compressed_pair_imp() {}
+
+      compressed_pair_imp(first_param_type x, second_param_type y)
+         : first_type(x), m_second(y) {}
+
+      compressed_pair_imp(first_param_type x)
+         : first_type(x), m_second(x) {}
+
+      first_reference       first()       {return *this;}
+      first_const_reference first() const {return *this;}
+
+      second_reference       second()       {return m_second;}
+      second_const_reference second() const {return m_second;}
+
+      void swap(::pdalboost::compressed_pair<T1,T2>&) {}
+   private:
+      T2 m_second;
+   };
+
+   // 5    T1 == T2 and are not empty:   //JM
+
+   template <class T1, class T2>
+   class compressed_pair_imp<T1, T2, 5>
+   {
+   public:
+      typedef T1                                                 first_type;
+      typedef T2                                                 second_type;
+      typedef typename call_traits<first_type>::param_type       first_param_type;
+      typedef typename call_traits<second_type>::param_type      second_param_type;
+      typedef typename call_traits<first_type>::reference        first_reference;
+      typedef typename call_traits<second_type>::reference       second_reference;
+      typedef typename call_traits<first_type>::const_reference  first_const_reference;
+      typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+      compressed_pair_imp() {}
+
+      compressed_pair_imp(first_param_type x, second_param_type y)
+         : first_(x), second_(y) {}
+
+      compressed_pair_imp(first_param_type x)
+         : first_(x), second_(x) {}
+
+      first_reference       first()       {return first_;}
+      first_const_reference first() const {return first_;}
+
+      second_reference       second()       {return second_;}
+      second_const_reference second() const {return second_;}
+
+      void swap(::pdalboost::compressed_pair<T1, T2>& y)
+      {
+         cp_swap(first_, y.first());
+         cp_swap(second_, y.second());
+      }
+   private:
+      first_type first_;
+      second_type second_;
+   };
+
+}  // details
+
+template <class T1, class T2>
+class compressed_pair
+   : private ::pdalboost::details::compressed_pair_imp<T1, T2,
+             ::pdalboost::details::compressed_pair_switch<
+                    T1,
+                    T2,
+                    ::pdalboost::is_same<typename remove_cv<T1>::type, typename remove_cv<T2>::type>::value,
+                    ::pdalboost::is_empty<T1>::value,
+                    ::pdalboost::is_empty<T2>::value>::value>
+{
+private:
+   typedef details::compressed_pair_imp<T1, T2,
+             ::pdalboost::details::compressed_pair_switch<
+                    T1,
+                    T2,
+                    ::pdalboost::is_same<typename remove_cv<T1>::type, typename remove_cv<T2>::type>::value,
+                    ::pdalboost::is_empty<T1>::value,
+                    ::pdalboost::is_empty<T2>::value>::value> base;
+public:
+   typedef T1                                                 first_type;
+   typedef T2                                                 second_type;
+   typedef typename call_traits<first_type>::param_type       first_param_type;
+   typedef typename call_traits<second_type>::param_type      second_param_type;
+   typedef typename call_traits<first_type>::reference        first_reference;
+   typedef typename call_traits<second_type>::reference       second_reference;
+   typedef typename call_traits<first_type>::const_reference  first_const_reference;
+   typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+            compressed_pair() : base() {}
+            compressed_pair(first_param_type x, second_param_type y) : base(x, y) {}
+   explicit compressed_pair(first_param_type x) : base(x) {}
+   explicit compressed_pair(second_param_type y) : base(y) {}
+
+   first_reference       first()       {return base::first();}
+   first_const_reference first() const {return base::first();}
+
+   second_reference       second()       {return base::second();}
+   second_const_reference second() const {return base::second();}
+
+   void swap(compressed_pair& y) { base::swap(y); }
+};
+
+// JM
+// Partial specialisation for case where T1 == T2:
+//
+template <class T>
+class compressed_pair<T, T>
+   : private details::compressed_pair_imp<T, T,
+             ::pdalboost::details::compressed_pair_switch<
+                    T,
+                    T,
+                    ::pdalboost::is_same<typename remove_cv<T>::type, typename remove_cv<T>::type>::value,
+                    ::pdalboost::is_empty<T>::value,
+                    ::pdalboost::is_empty<T>::value>::value>
+{
+private:
+   typedef details::compressed_pair_imp<T, T,
+             ::pdalboost::details::compressed_pair_switch<
+                    T,
+                    T,
+                    ::pdalboost::is_same<typename remove_cv<T>::type, typename remove_cv<T>::type>::value,
+                    ::pdalboost::is_empty<T>::value,
+                    ::pdalboost::is_empty<T>::value>::value> base;
+public:
+   typedef T                                                  first_type;
+   typedef T                                                  second_type;
+   typedef typename call_traits<first_type>::param_type       first_param_type;
+   typedef typename call_traits<second_type>::param_type      second_param_type;
+   typedef typename call_traits<first_type>::reference        first_reference;
+   typedef typename call_traits<second_type>::reference       second_reference;
+   typedef typename call_traits<first_type>::const_reference  first_const_reference;
+   typedef typename call_traits<second_type>::const_reference second_const_reference;
+
+            compressed_pair() : base() {}
+            compressed_pair(first_param_type x, second_param_type y) : base(x, y) {}
+#if !(defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530))
+   explicit 
+#endif
+      compressed_pair(first_param_type x) : base(x) {}
+
+   first_reference       first()       {return base::first();}
+   first_const_reference first() const {return base::first();}
+
+   second_reference       second()       {return base::second();}
+   second_const_reference second() const {return base::second();}
+
+   void swap(::pdalboost::compressed_pair<T,T>& y) { base::swap(y); }
+};
+
+template <class T1, class T2>
+inline
+void
+swap(compressed_pair<T1, T2>& x, compressed_pair<T1, T2>& y)
+{
+   x.swap(y);
+}
+
+} // boost
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif 
+
+#endif // BOOST_DETAIL_COMPRESSED_PAIR_HPP
+
diff --git a/vendor/pdalboost/boost/detail/container_fwd.hpp b/vendor/pdalboost/boost/detail/container_fwd.hpp
new file mode 100644
index 0000000..04ce972
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/container_fwd.hpp
@@ -0,0 +1,157 @@
+
+// Copyright 2005-2011 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// Note: if you change this include guard, you also need to change
+// container_fwd_compile_fail.cpp
+#if !defined(BOOST_DETAIL_CONTAINER_FWD_HPP)
+#define BOOST_DETAIL_CONTAINER_FWD_HPP
+
+#if defined(_MSC_VER) && \
+    !defined(BOOST_DETAIL_TEST_CONFIG_ONLY)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+////////////////////////////////////////////////////////////////////////////////
+//                                                                            //
+// Define BOOST_DETAIL_NO_CONTAINER_FWD if you don't want this header to      //
+// forward declare standard containers.                                       //
+//                                                                            //
+// BOOST_DETAIL_CONTAINER_FWD to make it foward declare containers even if it //
+// normally doesn't.                                                          //
+//                                                                            //
+// BOOST_DETAIL_NO_CONTAINER_FWD overrides BOOST_DETAIL_CONTAINER_FWD.        //
+//                                                                            //
+////////////////////////////////////////////////////////////////////////////////
+
+#if !defined(BOOST_DETAIL_NO_CONTAINER_FWD)
+#  if defined(BOOST_DETAIL_CONTAINER_FWD)
+     // Force forward declarations.
+#  elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+     // STLport
+#    define BOOST_DETAIL_NO_CONTAINER_FWD
+#  elif defined(__LIBCOMO__)
+     // Comeau STL:
+#    define BOOST_DETAIL_NO_CONTAINER_FWD
+#  elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)
+     // Rogue Wave library:
+#    define BOOST_DETAIL_NO_CONTAINER_FWD
+#  elif defined(_LIBCPP_VERSION)
+     // libc++
+#    define BOOST_DETAIL_NO_CONTAINER_FWD
+#  elif defined(__GLIBCPP__) || defined(__GLIBCXX__)
+     // GNU libstdc++ 3
+     //
+     // Disable forwarding for all recent versions, as the library has a
+     // versioned namespace mode, and I don't know how to detect it.
+#    if __GLIBCXX__ >= 20070513 \
+        || defined(_GLIBCXX_DEBUG) \
+        || defined(_GLIBCXX_PARALLEL) \
+        || defined(_GLIBCXX_PROFILE)
+#      define BOOST_DETAIL_NO_CONTAINER_FWD
+#    else
+#      if defined(__GLIBCXX__) && __GLIBCXX__ >= 20040530
+#        define BOOST_CONTAINER_FWD_COMPLEX_STRUCT
+#      endif
+#    endif
+#  elif defined(__STL_CONFIG_H)
+     // generic SGI STL
+     //
+     // Forward declaration seems to be okay, but it has a couple of odd
+     // implementations.
+#    define BOOST_CONTAINER_FWD_BAD_BITSET
+#    if !defined(__STL_NON_TYPE_TMPL_PARAM_BUG)
+#      define BOOST_CONTAINER_FWD_BAD_DEQUE
+#     endif
+#  elif defined(__MSL_CPP__)
+     // MSL standard lib:
+#    define BOOST_DETAIL_NO_CONTAINER_FWD
+#  elif defined(__IBMCPP__)
+     // The default VACPP std lib, forward declaration seems to be fine.
+#  elif defined(MSIPL_COMPILE_H)
+     // Modena C++ standard library
+#    define BOOST_DETAIL_NO_CONTAINER_FWD
+#  elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
+     // Dinkumware Library (this has to appear after any possible replacement
+     // libraries)
+#  else
+#    define BOOST_DETAIL_NO_CONTAINER_FWD
+#  endif
+#endif
+
+#if !defined(BOOST_DETAIL_TEST_CONFIG_ONLY)
+
+#if defined(BOOST_DETAIL_NO_CONTAINER_FWD) && \
+    !defined(BOOST_DETAIL_TEST_FORCE_CONTAINER_FWD)
+
+#include <deque>
+#include <list>
+#include <vector>
+#include <map>
+#include <set>
+#include <bitset>
+#include <string>
+#include <complex>
+
+#else
+
+#include <cstddef>
+
+#if defined(BOOST_CONTAINER_FWD_BAD_DEQUE)
+#include <deque>
+#endif
+
+#if defined(BOOST_CONTAINER_FWD_BAD_BITSET)
+#include <bitset>
+#endif
+
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+#pragma warning(disable:4099) // struct/class mismatch in fwd declarations
+#endif
+
+namespace std
+{
+    template <class T> class allocator;
+    template <class charT, class traits, class Allocator> class basic_string;
+
+    template <class charT> struct char_traits;
+
+#if defined(BOOST_CONTAINER_FWD_COMPLEX_STRUCT)
+    template <class T> struct complex;
+#else
+    template <class T> class complex;
+#endif
+
+#if !defined(BOOST_CONTAINER_FWD_BAD_DEQUE)
+    template <class T, class Allocator> class deque;
+#endif
+
+    template <class T, class Allocator> class list;
+    template <class T, class Allocator> class vector;
+    template <class Key, class T, class Compare, class Allocator> class map;
+    template <class Key, class T, class Compare, class Allocator>
+    class multimap;
+    template <class Key, class Compare, class Allocator> class set;
+    template <class Key, class Compare, class Allocator> class multiset;
+
+#if !defined(BOOST_CONTAINER_FWD_BAD_BITSET)
+    template <size_t N> class bitset;
+#endif
+    template <class T1, class T2> struct pair;
+}
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_DETAIL_NO_CONTAINER_FWD &&
+       // !defined(BOOST_DETAIL_TEST_FORCE_CONTAINER_FWD)
+
+#endif // BOOST_DETAIL_TEST_CONFIG_ONLY
+
+#endif
diff --git a/vendor/pdalboost/boost/detail/endian.hpp b/vendor/pdalboost/boost/detail/endian.hpp
new file mode 100644
index 0000000..f576c26
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/endian.hpp
@@ -0,0 +1,11 @@
+// Copyright 2013 Rene Rivera
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_ENDIAN_HPP
+#define BOOST_DETAIL_ENDIAN_HPP
+
+// Use the Predef library for the detection of endianess.
+#include <boost/predef/detail/endian_compat.h>
+
+#endif
diff --git a/vendor/pdalboost/boost/detail/fenv.hpp b/vendor/pdalboost/boost/detail/fenv.hpp
new file mode 100644
index 0000000..b268f5c
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/fenv.hpp
@@ -0,0 +1,101 @@
+/*=============================================================================
+    Copyright (c) 2010      Bryce Lelbach
+
+    Distributed under the Boost Software License, Version 1.0. (See accompanying
+    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_NO_FENV_H)
+  #error This platform does not have a floating point environment
+#endif
+
+#if !defined(BOOST_DETAIL_FENV_HPP)
+#define BOOST_DETAIL_FENV_HPP
+
+/* If we're using clang + glibc, we have to get hacky.
+ * See http://llvm.org/bugs/show_bug.cgi?id=6907 */
+#if defined(__clang__)       &&  (__clang_major__ < 3) &&    \
+    defined(__GNU_LIBRARY__) && /* up to version 5 */ \
+    defined(__GLIBC__) &&         /* version 6 + */ \
+    !defined(_FENV_H)
+  #define _FENV_H
+
+  #include <features.h>
+  #include <bits/fenv.h>
+
+  extern "C" {
+    extern int fegetexceptflag (fexcept_t*, int) __THROW;
+    extern int fesetexceptflag (__const fexcept_t*, int) __THROW;
+    extern int feclearexcept (int) __THROW;
+    extern int feraiseexcept (int) __THROW;
+    extern int fetestexcept (int) __THROW;
+    extern int fegetround (void) __THROW;
+    extern int fesetround (int) __THROW;
+    extern int fegetenv (fenv_t*) __THROW;
+    extern int fesetenv (__const fenv_t*) __THROW;
+    extern int feupdateenv (__const fenv_t*) __THROW;
+    extern int feholdexcept (fenv_t*) __THROW;
+
+    #ifdef __USE_GNU
+      extern int feenableexcept (int) __THROW;
+      extern int fedisableexcept (int) __THROW;
+      extern int fegetexcept (void) __THROW;
+    #endif
+  }
+
+  namespace std { namespace tr1 {
+    using ::fenv_t;
+    using ::fexcept_t;
+    using ::fegetexceptflag;
+    using ::fesetexceptflag;
+    using ::feclearexcept;
+    using ::feraiseexcept;
+    using ::fetestexcept;
+    using ::fegetround;
+    using ::fesetround;
+    using ::fegetenv;
+    using ::fesetenv;
+    using ::feupdateenv;
+    using ::feholdexcept;
+  } }
+
+#elif defined(__MINGW32__) && defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 408
+
+  // MinGW (32-bit) has a bug in mingw32/bits/c++config.h, it does not define _GLIBCXX_HAVE_FENV_H,
+  // which prevents the C fenv.h header contents to be included in the C++ wrapper header fenv.h. This is at least
+  // the case with gcc 4.8.1 packages tested so far, up to 4.8.1-4. Note that there is no issue with
+  // MinGW-w64.
+  // To work around the bug we avoid including the C++ wrapper header and include the C header directly
+  // and import all relevant symbols into std:: ourselves.
+
+  #include <../include/fenv.h>
+
+  namespace std {
+    using ::fenv_t;
+    using ::fexcept_t;
+    using ::fegetexceptflag;
+    using ::fesetexceptflag;
+    using ::feclearexcept;
+    using ::feraiseexcept;
+    using ::fetestexcept;
+    using ::fegetround;
+    using ::fesetround;
+    using ::fegetenv;
+    using ::fesetenv;
+    using ::feupdateenv;
+    using ::feholdexcept;
+  }
+
+#else /* if we're not using GNU's C stdlib, fenv.h should work with clang */
+
+  #if defined(__SUNPRO_CC) /* lol suncc */
+    #include <stdio.h>
+  #endif
+
+  #include <fenv.h>
+
+#endif
+
+#endif /* BOOST_DETAIL_FENV_HPP */
diff --git a/vendor/pdalboost/boost/detail/indirect_traits.hpp b/vendor/pdalboost/boost/detail/indirect_traits.hpp
new file mode 100644
index 0000000..9a4ca08
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/indirect_traits.hpp
@@ -0,0 +1,204 @@
+// Copyright David Abrahams 2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+#ifndef INDIRECT_TRAITS_DWA2002131_HPP
+# define INDIRECT_TRAITS_DWA2002131_HPP
+# include <boost/type_traits/is_function.hpp>
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/type_traits/is_pointer.hpp>
+# include <boost/type_traits/is_class.hpp>
+# include <boost/type_traits/is_const.hpp>
+# include <boost/type_traits/is_volatile.hpp>
+# include <boost/type_traits/is_member_function_pointer.hpp>
+# include <boost/type_traits/is_member_pointer.hpp>
+# include <boost/type_traits/remove_cv.hpp>
+# include <boost/type_traits/remove_reference.hpp>
+# include <boost/type_traits/remove_pointer.hpp>
+
+# include <boost/detail/workaround.hpp>
+
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/and.hpp>
+# include <boost/mpl/not.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+
+
+namespace pdalboost { namespace detail {
+
+namespace indirect_traits {
+
+template <class T>
+struct is_reference_to_const : mpl::false_
+{
+};
+
+template <class T>
+struct is_reference_to_const<T const&> : mpl::true_
+{
+};
+
+#   if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround
+template<class T>
+struct is_reference_to_const<T const volatile&> : mpl::true_
+{
+};
+#   endif 
+
+template <class T>
+struct is_reference_to_function : mpl::false_
+{
+};
+
+template <class T>
+struct is_reference_to_function<T&> : is_function<T>
+{
+};
+
+template <class T>
+struct is_pointer_to_function : mpl::false_
+{
+};
+
+// There's no such thing as a pointer-to-cv-function, so we don't need
+// specializations for those
+template <class T>
+struct is_pointer_to_function<T*> : is_function<T>
+{
+};
+
+template <class T>
+struct is_reference_to_member_function_pointer_impl : mpl::false_
+{
+};
+
+template <class T>
+struct is_reference_to_member_function_pointer_impl<T&>
+    : is_member_function_pointer<typename remove_cv<T>::type>
+{
+};
+
+
+template <class T>
+struct is_reference_to_member_function_pointer
+    : is_reference_to_member_function_pointer_impl<T>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_member_function_pointer,(T))
+};
+
+template <class T>
+struct is_reference_to_function_pointer_aux
+    : mpl::and_<
+          is_reference<T>
+        , is_pointer_to_function<
+              typename remove_cv<
+                  typename remove_reference<T>::type
+              >::type
+          >
+      >
+{
+    // There's no such thing as a pointer-to-cv-function, so we don't need specializations for those
+};
+
+template <class T>
+struct is_reference_to_function_pointer
+    : mpl::if_<
+          is_reference_to_function<T>
+        , mpl::false_
+        , is_reference_to_function_pointer_aux<T>
+     >::type
+{
+};
+
+template <class T>
+struct is_reference_to_non_const
+    : mpl::and_<
+          is_reference<T>
+        , mpl::not_<
+             is_reference_to_const<T>
+          >
+      >
+{
+};
+
+template <class T>
+struct is_reference_to_volatile : mpl::false_
+{
+};
+
+template <class T>
+struct is_reference_to_volatile<T volatile&> : mpl::true_
+{
+};
+
+#   if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround
+template <class T>
+struct is_reference_to_volatile<T const volatile&> : mpl::true_
+{
+};
+#   endif 
+
+
+template <class T>
+struct is_reference_to_pointer : mpl::false_
+{
+};
+
+template <class T>
+struct is_reference_to_pointer<T*&> : mpl::true_
+{
+};
+
+template <class T>
+struct is_reference_to_pointer<T* const&> : mpl::true_
+{
+};
+
+template <class T>
+struct is_reference_to_pointer<T* volatile&> : mpl::true_
+{
+};
+
+template <class T>
+struct is_reference_to_pointer<T* const volatile&> : mpl::true_
+{
+};
+
+template <class T>
+struct is_reference_to_class
+    : mpl::and_<
+          is_reference<T>
+        , is_class<
+              typename remove_cv<
+                  typename remove_reference<T>::type
+              >::type
+          >
+      >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_class,(T))
+};
+
+template <class T>
+struct is_pointer_to_class
+    : mpl::and_<
+          is_pointer<T>
+        , is_class<
+              typename remove_cv<
+                  typename remove_pointer<T>::type
+              >::type
+          >
+      >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_class,(T))
+};
+
+
+}
+
+using namespace indirect_traits;
+
+}} // namespace pdalboost::python::detail
+
+#endif // INDIRECT_TRAITS_DWA2002131_HPP
diff --git a/vendor/pdalboost/boost/detail/interlocked.hpp b/vendor/pdalboost/boost/detail/interlocked.hpp
new file mode 100644
index 0000000..a34fbfc
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/interlocked.hpp
@@ -0,0 +1,218 @@
+#ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED
+#define BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED
+
+//
+//  boost/detail/interlocked.hpp
+//
+//  Copyright 2005 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/config.hpp>
+
+// MS compatible compilers support #pragma once
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined( BOOST_USE_WINDOWS_H )
+
+# include <windows.h>
+
+# define BOOST_INTERLOCKED_INCREMENT InterlockedIncrement
+# define BOOST_INTERLOCKED_DECREMENT InterlockedDecrement
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange
+# define BOOST_INTERLOCKED_EXCHANGE InterlockedExchange
+# define BOOST_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER InterlockedCompareExchangePointer
+# define BOOST_INTERLOCKED_EXCHANGE_POINTER InterlockedExchangePointer
+
+#elif defined( BOOST_USE_INTRIN_H )
+
+#include <intrin.h>
+
+# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement
+# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
+# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange
+# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
+
+# if defined(_M_IA64) || defined(_M_AMD64) || defined(__x86_64__) || defined(__x86_64)
+
+#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer
+#  define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer
+
+# else
+
+#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
+    ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
+#  define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
+    ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
+
+# endif
+
+#elif defined(_WIN32_WCE)
+
+#if _WIN32_WCE >= 0x600
+
+extern "C" long __cdecl _InterlockedIncrement( long volatile * );
+extern "C" long __cdecl _InterlockedDecrement( long volatile * );
+extern "C" long __cdecl _InterlockedCompareExchange( long volatile *, long, long );
+extern "C" long __cdecl _InterlockedExchange( long volatile *, long );
+extern "C" long __cdecl _InterlockedExchangeAdd( long volatile *, long );
+
+# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement
+# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
+# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange
+# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
+
+#else
+// under Windows CE we still have old-style Interlocked* functions
+
+extern "C" long __cdecl InterlockedIncrement( long* );
+extern "C" long __cdecl InterlockedDecrement( long* );
+extern "C" long __cdecl InterlockedCompareExchange( long*, long, long );
+extern "C" long __cdecl InterlockedExchange( long*, long );
+extern "C" long __cdecl InterlockedExchangeAdd( long*, long );
+
+# define BOOST_INTERLOCKED_INCREMENT InterlockedIncrement
+# define BOOST_INTERLOCKED_DECREMENT InterlockedDecrement
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange
+# define BOOST_INTERLOCKED_EXCHANGE InterlockedExchange
+# define BOOST_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd
+
+#endif
+
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
+    ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long*)(dest),(long)(exchange),(long)(compare)))
+# define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
+    ((void*)BOOST_INTERLOCKED_EXCHANGE((long*)(dest),(long)(exchange)))
+
+#elif defined( BOOST_MSVC ) || defined( BOOST_INTEL_WIN )
+
+#if defined( BOOST_MSVC ) && BOOST_MSVC >= 1400
+
+#include <intrin.h>
+
+#else
+
+# if defined( __CLRCALL_PURE_OR_CDECL )
+#  define BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL __CLRCALL_PURE_OR_CDECL
+# else
+#  define BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL __cdecl
+# endif
+
+extern "C" long BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL _InterlockedIncrement( long volatile * );
+extern "C" long BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL _InterlockedDecrement( long volatile * );
+extern "C" long BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL _InterlockedCompareExchange( long volatile *, long, long );
+extern "C" long BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL _InterlockedExchange( long volatile *, long );
+extern "C" long BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL _InterlockedExchangeAdd( long volatile *, long );
+
+# undef BOOST_INTERLOCKED_CLRCALL_PURE_OR_CDECL
+
+# if defined( BOOST_MSVC ) && BOOST_MSVC >= 1310
+#  pragma intrinsic( _InterlockedIncrement )
+#  pragma intrinsic( _InterlockedDecrement )
+#  pragma intrinsic( _InterlockedCompareExchange )
+#  pragma intrinsic( _InterlockedExchange )
+#  pragma intrinsic( _InterlockedExchangeAdd )
+# endif
+
+#endif
+
+# if defined(_M_IA64) || defined(_M_AMD64)
+
+extern "C" void* __cdecl _InterlockedCompareExchangePointer( void* volatile *, void*, void* );
+extern "C" void* __cdecl _InterlockedExchangePointer( void* volatile *, void* );
+
+#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer
+#  define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer
+
+# else
+
+#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
+    ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
+#  define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
+    ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
+
+# endif
+
+# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement
+# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
+# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange
+# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
+
+// Unlike __MINGW64__, __MINGW64_VERSION_MAJOR is defined by MinGW-w64 for both 32 and 64-bit targets.
+#elif defined(__MINGW64_VERSION_MAJOR)
+
+// MinGW-w64 provides intrin.h for both 32 and 64-bit targets.
+#include <intrin.h>
+
+# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement
+# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
+# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange
+# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
+# if defined(__x86_64__) || defined(__x86_64)
+#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER _InterlockedCompareExchangePointer
+#  define BOOST_INTERLOCKED_EXCHANGE_POINTER _InterlockedExchangePointer
+# else
+#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
+    ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
+#  define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
+    ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
+# endif
+
+#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ )
+
+#define BOOST_INTERLOCKED_IMPORT __declspec(dllimport)
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedIncrement( long volatile * );
+extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedDecrement( long volatile * );
+extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedCompareExchange( long volatile *, long, long );
+extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedExchange( long volatile *, long );
+extern "C" BOOST_INTERLOCKED_IMPORT long __stdcall InterlockedExchangeAdd( long volatile *, long );
+
+# if defined(_M_IA64) || defined(_M_AMD64)
+extern "C" BOOST_INTERLOCKED_IMPORT void* __stdcall InterlockedCompareExchangePointer( void* volatile *, void*, void* );
+extern "C" BOOST_INTERLOCKED_IMPORT void* __stdcall InterlockedExchangePointer( void* volatile *, void* );
+# endif
+
+} // namespace detail
+
+} // namespace pdalboost
+
+# define BOOST_INTERLOCKED_INCREMENT ::pdalboost::detail::InterlockedIncrement
+# define BOOST_INTERLOCKED_DECREMENT ::pdalboost::detail::InterlockedDecrement
+# define BOOST_INTERLOCKED_COMPARE_EXCHANGE ::pdalboost::detail::InterlockedCompareExchange
+# define BOOST_INTERLOCKED_EXCHANGE ::pdalboost::detail::InterlockedExchange
+# define BOOST_INTERLOCKED_EXCHANGE_ADD ::pdalboost::detail::InterlockedExchangeAdd
+
+# if defined(_M_IA64) || defined(_M_AMD64)
+#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER ::pdalboost::detail::InterlockedCompareExchangePointer
+#  define BOOST_INTERLOCKED_EXCHANGE_POINTER ::pdalboost::detail::InterlockedExchangePointer
+# else
+#  define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \
+    ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long volatile*)(dest),(long)(exchange),(long)(compare)))
+#  define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \
+    ((void*)BOOST_INTERLOCKED_EXCHANGE((long volatile*)(dest),(long)(exchange)))
+# endif
+
+#else
+
+# error "Interlocked intrinsics not available"
+
+#endif
+
+#endif // #ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/detail/is_incrementable.hpp b/vendor/pdalboost/boost/detail/is_incrementable.hpp
new file mode 100644
index 0000000..f687daa
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/is_incrementable.hpp
@@ -0,0 +1,125 @@
+// Copyright David Abrahams 2004. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef IS_INCREMENTABLE_DWA200415_HPP
+# define IS_INCREMENTABLE_DWA200415_HPP
+
+# include <boost/type_traits/integral_constant.hpp>
+# include <boost/type_traits/remove_cv.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/detail/workaround.hpp>
+
+namespace pdalboost { namespace detail {
+
+// is_incrementable<T> metafunction
+//
+// Requires: Given x of type T&, if the expression ++x is well-formed
+// it must have complete type; otherwise, it must neither be ambiguous
+// nor violate access.
+
+// This namespace ensures that ADL doesn't mess things up.
+namespace is_incrementable_
+{
+  // a type returned from operator++ when no increment is found in the
+  // type's own namespace
+  struct tag {};
+
+  // any soaks up implicit conversions and makes the following
+  // operator++ less-preferred than any other such operator that
+  // might be found via ADL.
+  struct any { template <class T> any(T const&); };
+
+  // This is a last-resort operator++ for when none other is found
+# if BOOST_WORKAROUND(__GNUC__, == 4) && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 2
+
+}
+
+namespace is_incrementable_2
+{
+  is_incrementable_::tag operator++(is_incrementable_::any const&);
+  is_incrementable_::tag operator++(is_incrementable_::any const&,int);
+}
+using namespace is_incrementable_2;
+
+namespace is_incrementable_
+{
+
+# else
+
+  tag operator++(any const&);
+  tag operator++(any const&,int);
+
+# endif
+
+# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) 
+#  define BOOST_comma(a,b) (a)
+# else
+  // In case an operator++ is found that returns void, we'll use ++x,0
+  tag operator,(tag,int);
+#  define BOOST_comma(a,b) (a,b)
+# endif
+
+# if defined(BOOST_MSVC)
+#  pragma warning(push)
+#  pragma warning(disable:4913) // Warning about operator,
+# endif
+
+  // two check overloads help us identify which operator++ was picked
+  char (& check_(tag) )[2];
+
+  template <class T>
+  char check_(T const&);
+
+
+  template <class T>
+  struct impl
+  {
+      static typename pdalboost::remove_cv<T>::type& x;
+
+      BOOST_STATIC_CONSTANT(
+          bool
+        , value = sizeof(is_incrementable_::check_(BOOST_comma(++x,0))) == 1
+      );
+  };
+
+  template <class T>
+  struct postfix_impl
+  {
+      static typename pdalboost::remove_cv<T>::type& x;
+
+      BOOST_STATIC_CONSTANT(
+          bool
+        , value = sizeof(is_incrementable_::check_(BOOST_comma(x++,0))) == 1
+      );
+  };
+
+# if defined(BOOST_MSVC)
+#  pragma warning(pop)
+# endif
+
+}
+
+# undef BOOST_comma
+
+template<typename T>
+struct is_incrementable :
+    public pdalboost::integral_constant<bool, pdalboost::detail::is_incrementable_::impl<T>::value>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_incrementable,(T))
+};
+
+template<typename T>
+struct is_postfix_incrementable :
+    public pdalboost::integral_constant<bool, pdalboost::detail::is_incrementable_::postfix_impl<T>::value>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_postfix_incrementable,(T))
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+# include <boost/type_traits/detail/bool_trait_undef.hpp>
+
+#endif // IS_INCREMENTABLE_DWA200415_HPP
diff --git a/vendor/pdalboost/boost/detail/iterator.hpp b/vendor/pdalboost/boost/detail/iterator.hpp
new file mode 100644
index 0000000..4e3496a
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/iterator.hpp
@@ -0,0 +1,26 @@
+// (C) Copyright David Abrahams 2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef ITERATOR_DWA122600_HPP_
+#define ITERATOR_DWA122600_HPP_
+
+// This header is obsolete and will be deprecated.
+
+#include <iterator>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+using std::iterator_traits;
+using std::distance;
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif // ITERATOR_DWA122600_HPP_
diff --git a/vendor/pdalboost/boost/detail/lcast_precision.hpp b/vendor/pdalboost/boost/detail/lcast_precision.hpp
new file mode 100644
index 0000000..e5c8d1a
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/lcast_precision.hpp
@@ -0,0 +1,184 @@
+// Copyright Alexander Nasonov & Paul A. Bristow 2006.
+
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED
+#define BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED
+
+#include <climits>
+#include <ios>
+#include <limits>
+
+#include <boost/config.hpp>
+#include <boost/integer_traits.hpp>
+
+#ifndef BOOST_NO_IS_ABSTRACT
+// Fix for SF:1358600 - lexical_cast & pure virtual functions & VC 8 STL
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+#endif
+
+#if defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) || \
+  (defined(BOOST_MSVC) && (BOOST_MSVC<1310))
+
+#define BOOST_LCAST_NO_COMPILE_TIME_PRECISION
+#endif
+
+#ifdef BOOST_LCAST_NO_COMPILE_TIME_PRECISION
+#include <boost/assert.hpp>
+#else
+#include <boost/static_assert.hpp>
+#endif
+
+namespace pdalboost { namespace detail {
+
+class lcast_abstract_stub {};
+
+#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION
+// Calculate an argument to pass to std::ios_base::precision from
+// lexical_cast. See alternative implementation for broken standard
+// libraries in lcast_get_precision below. Keep them in sync, please.
+template<class T>
+struct lcast_precision
+{
+#ifdef BOOST_NO_IS_ABSTRACT
+    typedef std::numeric_limits<T> limits; // No fix for SF:1358600.
+#else
+    typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_<
+        pdalboost::is_abstract<T>
+      , std::numeric_limits<lcast_abstract_stub>
+      , std::numeric_limits<T>
+      >::type limits;
+#endif
+
+    BOOST_STATIC_CONSTANT(bool, use_default_precision =
+            !limits::is_specialized || limits::is_exact
+        );
+
+    BOOST_STATIC_CONSTANT(bool, is_specialized_bin =
+            !use_default_precision &&
+            limits::radix == 2 && limits::digits > 0
+        );
+
+    BOOST_STATIC_CONSTANT(bool, is_specialized_dec =
+            !use_default_precision &&
+            limits::radix == 10 && limits::digits10 > 0
+        );
+
+    BOOST_STATIC_CONSTANT(std::streamsize, streamsize_max =
+            pdalboost::integer_traits<std::streamsize>::const_max
+        );
+
+    BOOST_STATIC_CONSTANT(unsigned int, precision_dec = limits::digits10 + 1U);
+
+    BOOST_STATIC_ASSERT(!is_specialized_dec ||
+            precision_dec <= streamsize_max + 0UL
+        );
+
+    BOOST_STATIC_CONSTANT(unsigned long, precision_bin =
+            2UL + limits::digits * 30103UL / 100000UL
+        );
+
+    BOOST_STATIC_ASSERT(!is_specialized_bin ||
+            (limits::digits + 0UL < ULONG_MAX / 30103UL &&
+            precision_bin > limits::digits10 + 0UL &&
+            precision_bin <= streamsize_max + 0UL)
+        );
+
+    BOOST_STATIC_CONSTANT(std::streamsize, value =
+            is_specialized_bin ? precision_bin
+                               : is_specialized_dec ? precision_dec : 6
+        );
+};
+#endif
+
+template<class T>
+inline std::streamsize lcast_get_precision(T* = 0)
+{
+#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION
+    return lcast_precision<T>::value;
+#else // Follow lcast_precision algorithm at run-time:
+
+#ifdef BOOST_NO_IS_ABSTRACT
+    typedef std::numeric_limits<T> limits; // No fix for SF:1358600.
+#else
+    typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_<
+        pdalboost::is_abstract<T>
+      , std::numeric_limits<lcast_abstract_stub>
+      , std::numeric_limits<T>
+      >::type limits;
+#endif
+
+    bool const use_default_precision =
+        !limits::is_specialized || limits::is_exact;
+
+    if(!use_default_precision)
+    { // Includes all built-in floating-point types, float, double ...
+      // and UDT types for which digits (significand bits) is defined (not zero)
+
+        bool const is_specialized_bin =
+            limits::radix == 2 && limits::digits > 0;
+        bool const is_specialized_dec =
+            limits::radix == 10 && limits::digits10 > 0;
+        std::streamsize const streamsize_max =
+            (pdalboost::integer_traits<std::streamsize>::max)();
+
+        if(is_specialized_bin)
+        { // Floating-point types with
+          // limits::digits defined by the specialization.
+
+            unsigned long const digits = limits::digits;
+            unsigned long const precision = 2UL + digits * 30103UL / 100000UL;
+            // unsigned long is selected because it is at least 32-bits
+            // and thus ULONG_MAX / 30103UL is big enough for all types.
+            BOOST_ASSERT(
+                    digits < ULONG_MAX / 30103UL &&
+                    precision > limits::digits10 + 0UL &&
+                    precision <= streamsize_max + 0UL
+                );
+            return precision;
+        }
+        else if(is_specialized_dec)
+        {   // Decimal Floating-point type, most likely a User Defined Type
+            // rather than a real floating-point hardware type.
+            unsigned int const precision = limits::digits10 + 1U;
+            BOOST_ASSERT(precision <= streamsize_max + 0UL);
+            return precision;
+        }
+    }
+
+    // Integral type (for which precision has no effect)
+    // or type T for which limits is NOT specialized,
+    // so assume stream precision remains the default 6 decimal digits.
+    // Warning: if your User-defined Floating-point type T is NOT specialized,
+    // then you may lose accuracy by only using 6 decimal digits.
+    // To avoid this, you need to specialize T with either
+    // radix == 2 and digits == the number of significand bits,
+    // OR
+    // radix = 10 and digits10 == the number of decimal digits.
+
+    return 6;
+#endif
+}
+
+template<class T>
+inline void lcast_set_precision(std::ios_base& stream, T*)
+{
+    stream.precision(lcast_get_precision<T>());
+}
+
+template<class Source, class Target>
+inline void lcast_set_precision(std::ios_base& stream, Source*, Target*)
+{
+    std::streamsize const s = lcast_get_precision(static_cast<Source*>(0));
+    std::streamsize const t = lcast_get_precision(static_cast<Target*>(0));
+    stream.precision(s > t ? s : t);
+}
+
+}}
+
+#endif //  BOOST_DETAIL_LCAST_PRECISION_HPP_INCLUDED
+
diff --git a/vendor/pdalboost/boost/detail/lightweight_main.hpp b/vendor/pdalboost/boost/detail/lightweight_main.hpp
new file mode 100644
index 0000000..1705309
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/lightweight_main.hpp
@@ -0,0 +1,36 @@
+//  boost/detail/lightweight_main.hpp  -------------------------------------------------//
+
+//  Copyright Beman Dawes 2010
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#include <iostream>
+#include <exception>
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                exception reporting main() that calls cpp_main()                      //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+int cpp_main(int argc, char* argv[]);
+
+int main(int argc, char* argv[])
+{
+  try
+  {
+    return cpp_main(argc, argv);
+  }
+
+  catch (const std::exception& ex)
+  {
+    std::cout
+    << "\nERROR  ERROR  ERROR  ERROR  ERROR  ERROR  ERROR  ERROR  ERROR  ERROR  ERROR\n"
+    << "\n****************************** std::exception *****************************\n"
+    << ex.what()
+    << "\n***************************************************************************\n"
+    << std::endl;
+  }
+  return 1;
+}
diff --git a/vendor/pdalboost/boost/detail/lightweight_mutex.hpp b/vendor/pdalboost/boost/detail/lightweight_mutex.hpp
new file mode 100644
index 0000000..b7a7f6d
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/lightweight_mutex.hpp
@@ -0,0 +1,22 @@
+#ifndef BOOST_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED
+#define BOOST_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  boost/detail/lightweight_mutex.hpp - lightweight mutex
+//
+//  Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd.
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/smart_ptr/detail/lightweight_mutex.hpp>
+
+#endif // #ifndef BOOST_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/detail/lightweight_test.hpp b/vendor/pdalboost/boost/detail/lightweight_test.hpp
new file mode 100644
index 0000000..9fece8a
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/lightweight_test.hpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#ifndef BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP
+#define BOOST_DETAIL_LIGHTWEIGHT_TEST_HPP
+
+// The header file at this path is deprecated;
+// use boost/core/lightweight_test.hpp instead.
+
+#include <boost/core/lightweight_test.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/detail/lightweight_test_report.hpp b/vendor/pdalboost/boost/detail/lightweight_test_report.hpp
new file mode 100644
index 0000000..1511ba9
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/lightweight_test_report.hpp
@@ -0,0 +1,56 @@
+//  boost/detail/lightweight_test_reporter.hpp  ----------------------------------------//
+
+//  Copyright Beman Dawes 2014
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                         Configuration reporting cpp_main()                           //
+//                                                                                      //
+//  Displays configuration information, then returns test_main(argc, argv), which       //
+//  must be supplied by the user.                                                       //
+//                                                                                      //
+//  Note: cpp_main(argc, argv) is called from a try block in main(), which is           //
+//  supplied by <boost/detail/lightweight_main.hpp> as is a catch block that reports    //
+//  std::exception what().                                                              //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+#include <boost/config.hpp>
+#include <boost/version.hpp>
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+#include <iostream>
+
+int test_main(int argc, char* argv[]);
+
+int cpp_main(int argc, char* argv[])
+{
+  std::cout << BOOST_COMPILER
+#ifdef __GNUC__
+            << ", __GXX_EXPERIMENTAL_CXX0X__ "
+# ifdef __GXX_EXPERIMENTAL_CXX0X__
+              "defined"
+# else
+              "not defined"
+# endif
+#endif
+            << "\n"
+            << BOOST_STDLIB << "\n"
+            << BOOST_PLATFORM << "\n"
+            << "Boost version " << BOOST_VERSION / 100000 << '.'
+            << BOOST_VERSION / 100 % 1000 << '.' << BOOST_VERSION % 100 << "\n";
+
+  std::cout << "Command line: ";
+  for (int a = 0; a < argc; ++a)
+  {
+    std::cout << argv[a];
+    if (a != argc - 1)
+      std::cout << ' ';
+  }
+  std::cout << std::endl;
+
+  return test_main(argc, argv);
+}
\ No newline at end of file
diff --git a/vendor/pdalboost/boost/detail/no_exceptions_support.hpp b/vendor/pdalboost/boost/detail/no_exceptions_support.hpp
new file mode 100644
index 0000000..7d17454
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/no_exceptions_support.hpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#ifndef BOOST_DETAIL_NO_EXCEPTIONS_SUPPORT_HPP
+#define BOOST_DETAIL_NO_EXCEPTIONS_SUPPORT_HPP
+
+// The header file at this path is deprecated;
+// use boost/core/no_exceptions_support.hpp instead.
+
+#include <boost/core/no_exceptions_support.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/detail/reference_content.hpp b/vendor/pdalboost/boost/detail/reference_content.hpp
new file mode 100644
index 0000000..ceb05f7
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/reference_content.hpp
@@ -0,0 +1,120 @@
+//-----------------------------------------------------------------------------
+// boost detail/reference_content.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_DETAIL_REFERENCE_CONTENT_HPP
+#define BOOST_DETAIL_REFERENCE_CONTENT_HPP
+
+#include "boost/config.hpp"
+
+#   include "boost/mpl/bool.hpp"
+#   include "boost/type_traits/has_nothrow_copy.hpp"
+
+#include "boost/mpl/void.hpp"
+
+namespace pdalboost {
+
+namespace detail {
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class template reference_content
+//
+// Non-Assignable wrapper for references.
+//
+template <typename RefT>
+class reference_content
+{
+private: // representation
+
+    RefT content_;
+
+public: // structors
+
+    ~reference_content()
+    {
+    }
+
+    reference_content(RefT r)
+        : content_( r )
+    {
+    }
+
+    reference_content(const reference_content& operand)
+        : content_( operand.content_ )
+    {
+    }
+
+private: // non-Assignable
+
+    reference_content& operator=(const reference_content&);
+
+public: // queries
+
+    RefT get() const
+    {
+        return content_;
+    }
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction make_reference_content
+//
+// Wraps with reference_content if specified type is reference.
+//
+
+template <typename T = mpl::void_> struct make_reference_content;
+
+
+template <typename T>
+struct make_reference_content
+{
+    typedef T type;
+};
+
+template <typename T>
+struct make_reference_content< T& >
+{
+    typedef reference_content<T&> type;
+};
+
+
+template <>
+struct make_reference_content< mpl::void_ >
+{
+    template <typename T>
+    struct apply
+        : make_reference_content<T>
+    {
+    };
+
+    typedef mpl::void_ type;
+};
+
+} // namespace detail
+
+///////////////////////////////////////////////////////////////////////////////
+// reference_content<T&> type traits specializations
+//
+
+
+template <typename T>
+struct has_nothrow_copy<
+      ::pdalboost::detail::reference_content< T& >
+    >
+    : mpl::true_
+{
+};
+
+
+} // namespace pdalboost
+
+#endif // BOOST_DETAIL_REFERENCE_CONTENT_HPP
diff --git a/vendor/pdalboost/boost/detail/scoped_enum_emulation.hpp b/vendor/pdalboost/boost/detail/scoped_enum_emulation.hpp
new file mode 100644
index 0000000..1c7bc23
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/scoped_enum_emulation.hpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2014 Andrey Semashev
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#ifndef BOOST_DETAIL_SCOPED_ENUM_EMULATION_HPP
+#define BOOST_DETAIL_SCOPED_ENUM_EMULATION_HPP
+
+// The header file at this path is deprecated;
+// use boost/core/scoped_enum.hpp instead.
+
+#include <boost/core/scoped_enum.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/detail/sp_typeinfo.hpp b/vendor/pdalboost/boost/detail/sp_typeinfo.hpp
new file mode 100644
index 0000000..26d0851
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/sp_typeinfo.hpp
@@ -0,0 +1,36 @@
+#ifndef BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED
+#define BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//  detail/sp_typeinfo.hpp
+//
+//  Deprecated, please use boost/core/typeinfo.hpp
+//
+//  Copyright 2007 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/core/typeinfo.hpp>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+typedef pdalboost::core::typeinfo sp_typeinfo;
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#define BOOST_SP_TYPEID(T) BOOST_CORE_TYPEID(T)
+
+#endif  // #ifndef BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/detail/utf8_codecvt_facet.hpp b/vendor/pdalboost/boost/detail/utf8_codecvt_facet.hpp
new file mode 100644
index 0000000..b4b043d
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/utf8_codecvt_facet.hpp
@@ -0,0 +1,214 @@
+// Copyright (c) 2001 Ronald Garcia, Indiana University (garcia at osl.iu.edu)
+// Andrew Lumsdaine, Indiana University (lums at osl.iu.edu).
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_UTF8_CODECVT_FACET_HPP
+#define BOOST_UTF8_CODECVT_FACET_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// utf8_codecvt_facet.hpp
+
+// This header defines class utf8_codecvt_facet, derived from 
+// std::codecvt<wchar_t, char>, which can be used to convert utf8 data in
+// files into wchar_t strings in the application.
+//
+// The header is NOT STANDALONE, and is not to be included by the USER.
+// There are at least two libraries which want to use this functionality, and
+// we want to avoid code duplication. It would be possible to create utf8
+// library, but:
+// - this requires review process first
+// - in the case, when linking the a library which uses utf8 
+//   (say 'program_options'), user should also link to the utf8 library.
+//   This seems inconvenient, and asking a user to link to an unrevieved 
+//   library is strange. 
+// Until the above points are fixed, a library which wants to use utf8 must:
+// - include this header in one of it's headers or sources
+// - include the corresponding boost/detail/utf8_codecvt_facet.ipp file in one
+//   of its sources
+// - before including either file, the library must define
+//   - BOOST_UTF8_BEGIN_NAMESPACE to the namespace declaration that must be used
+//   - BOOST_UTF8_END_NAMESPACE to the code to close the previous namespace
+//     declaration.
+//   - BOOST_UTF8_DECL -- to the code which must be used for all 'exportable'
+//     symbols.
+//
+// For example, program_options library might contain:
+//    #define BOOST_UTF8_BEGIN_NAMESPACE <backslash character> 
+//             namespace pdalboost { namespace program_options {
+//    #define BOOST_UTF8_END_NAMESPACE }}
+//    #define BOOST_UTF8_DECL BOOST_PROGRAM_OPTIONS_DECL
+//    #include <boost/detail/utf8_codecvt_facet.ipp>
+//
+// Essentially, each library will have its own copy of utf8 code, in
+// different namespaces. 
+
+// Note:(Robert Ramey).  I have made the following alterations in the original
+// code.
+// a) Rendered utf8_codecvt<wchar_t, char>  with using templates
+// b) Move longer functions outside class definition to prevent inlining
+// and make code smaller
+// c) added on a derived class to permit translation to/from current
+// locale to utf8
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// archives stored as text - note these ar templated on the basic
+// stream templates to accommodate wide (and other?) kind of characters
+//
+// note the fact that on libraries without wide characters, ostream is
+// is not a specialization of basic_ostream which in fact is not defined
+// in such cases.   So we can't use basic_ostream<OStream::char_type> but rather
+// use two template parameters
+//
+// utf8_codecvt_facet
+//   This is an implementation of a std::codecvt facet for translating 
+//   from UTF-8 externally to UCS-4.  Note that this is not tied to
+//   any specific types in order to allow customization on platforms
+//   where wchar_t is not big enough.
+//
+// NOTES:  The current implementation jumps through some unpleasant hoops in
+// order to deal with signed character types.  As a std::codecvt_base::result,
+// it is necessary  for the ExternType to be convertible to unsigned  char.
+// I chose not to tie the extern_type explicitly to char. But if any combination
+// of types other than <wchar_t,char_t> is used, then std::codecvt must be
+// specialized on those types for this to work.
+
+#include <locale>
+#include <cwchar>   // for mbstate_t
+#include <cstddef>  // for std::size_t
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std {
+    using ::mbstate_t;
+    using ::size_t;
+}
+#endif
+
+// maximum lenght of a multibyte string
+#define MB_LENGTH_MAX 8
+
+BOOST_UTF8_BEGIN_NAMESPACE
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//                          utf8_codecvt_facet                                //
+//                                                                            //
+//            See utf8_codecvt_facet.ipp for the implementation.              //
+//----------------------------------------------------------------------------//
+
+
+struct BOOST_UTF8_DECL utf8_codecvt_facet :
+    public std::codecvt<wchar_t, char, std::mbstate_t>  
+{
+public:
+    explicit utf8_codecvt_facet(std::size_t no_locale_manage=0)
+        : std::codecvt<wchar_t, char, std::mbstate_t>(no_locale_manage) 
+    {}
+protected:
+    virtual std::codecvt_base::result do_in(
+        std::mbstate_t& state, 
+        const char * from,
+        const char * from_end, 
+        const char * & from_next,
+        wchar_t * to, 
+        wchar_t * to_end, 
+        wchar_t*& to_next
+    ) const;
+
+    virtual std::codecvt_base::result do_out(
+        std::mbstate_t & state,
+        const wchar_t * from,
+        const wchar_t * from_end,
+        const wchar_t*  & from_next,
+        char * to,
+        char * to_end,
+        char * & to_next
+    ) const;
+
+    bool invalid_continuing_octet(unsigned char octet_1) const {
+        return (octet_1 < 0x80|| 0xbf< octet_1);
+    }
+
+    bool invalid_leading_octet(unsigned char octet_1)   const {
+        return (0x7f < octet_1 && octet_1 < 0xc0) ||
+            (octet_1 > 0xfd);
+    }
+
+    // continuing octets = octets except for the leading octet
+    static unsigned int get_cont_octet_count(unsigned char lead_octet) {
+        return get_octet_count(lead_octet) - 1;
+    }
+
+    static unsigned int get_octet_count(unsigned char lead_octet);
+
+    // How many "continuing octets" will be needed for this word
+    // ==   total octets - 1.
+    int get_cont_octet_out_count(wchar_t word) const ;
+
+    virtual bool do_always_noconv() const BOOST_NOEXCEPT_OR_NOTHROW {
+        return false;
+    }
+
+    // UTF-8 isn't really stateful since we rewind on partial conversions
+    virtual std::codecvt_base::result do_unshift(
+        std::mbstate_t&,
+        char * from,
+        char * /*to*/,
+        char * & next
+    ) const {
+        next = from;
+        return ok;
+    }
+
+    virtual int do_encoding() const BOOST_NOEXCEPT_OR_NOTHROW {
+        const int variable_byte_external_encoding=0;
+        return variable_byte_external_encoding;
+    }
+
+    // How many char objects can I process to get <= max_limit
+    // wchar_t objects?
+    virtual int do_length(
+        const std::mbstate_t &,
+        const char * from,
+        const char * from_end, 
+        std::size_t max_limit
+    ) const
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+    throw()
+#endif
+    ;
+    virtual int do_length(
+        std::mbstate_t & s,
+        const char * from,
+        const char * from_end, 
+        std::size_t max_limit
+    ) const
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+    throw()
+#endif
+    {
+        return do_length(
+            const_cast<const std::mbstate_t &>(s),
+            from,
+            from_end,
+            max_limit
+        );
+    }
+    // Largest possible value do_length(state,from,from_end,1) could return.
+    virtual int do_max_length() const BOOST_NOEXCEPT_OR_NOTHROW {
+        return 6; // largest UTF-8 encoding of a UCS-4 character
+    }
+};
+
+BOOST_UTF8_END_NAMESPACE
+
+#endif // BOOST_UTF8_CODECVT_FACET_HPP
diff --git a/vendor/pdalboost/boost/detail/utf8_codecvt_facet.ipp b/vendor/pdalboost/boost/detail/utf8_codecvt_facet.ipp
new file mode 100644
index 0000000..d39170f
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/utf8_codecvt_facet.ipp
@@ -0,0 +1,283 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// utf8_codecvt_facet.ipp
+
+// Copyright (c) 2001 Ronald Garcia, Indiana University (garcia at osl.iu.edu)
+// Andrew Lumsdaine, Indiana University (lums at osl.iu.edu). 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Please see the comments in <boost/detail/utf8_codecvt_facet.hpp> to
+// learn how this file should be used.
+
+#include <boost/detail/utf8_codecvt_facet.hpp>
+
+#include <cstdlib> // for multi-byte converson routines
+#include <cassert>
+
+#include <boost/limits.hpp>
+#include <boost/config.hpp>
+
+// If we don't have wstring, then Unicode support 
+// is not available anyway, so we don't need to even
+// compiler this file. This also fixes the problem
+// with mingw, which can compile this file, but will
+// generate link error when building DLL.
+#ifndef BOOST_NO_STD_WSTRING
+
+BOOST_UTF8_BEGIN_NAMESPACE
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implementation for wchar_t
+
+// Translate incoming UTF-8 into UCS-4
+std::codecvt_base::result utf8_codecvt_facet::do_in(
+    std::mbstate_t& /*state*/, 
+    const char * from,
+    const char * from_end, 
+    const char * & from_next,
+    wchar_t * to, 
+    wchar_t * to_end, 
+    wchar_t * & to_next
+) const {
+    // Basic algorithm:  The first octet determines how many
+    // octets total make up the UCS-4 character.  The remaining
+    // "continuing octets" all begin with "10". To convert, subtract
+    // the amount that specifies the number of octets from the first
+    // octet.  Subtract 0x80 (1000 0000) from each continuing octet,
+    // then mash the whole lot together.  Note that each continuing
+    // octet only uses 6 bits as unique values, so only shift by
+    // multiples of 6 to combine.
+    while (from != from_end && to != to_end) {
+
+        // Error checking   on the first octet
+        if (invalid_leading_octet(*from)){
+            from_next = from;
+            to_next = to;
+            return std::codecvt_base::error;
+        }
+
+        // The first octet is   adjusted by a value dependent upon 
+        // the number   of "continuing octets" encoding the character
+        const   int cont_octet_count = get_cont_octet_count(*from);
+        const   wchar_t octet1_modifier_table[] =   {
+            0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc
+        };
+
+        // The unsigned char conversion is necessary in case char is
+        // signed   (I learned this the hard way)
+        wchar_t ucs_result = 
+            (unsigned char)(*from++) - octet1_modifier_table[cont_octet_count];
+
+        // Invariants   : 
+        //   1) At the start of the loop,   'i' continuing characters have been
+        //    processed 
+        //   2) *from   points to the next continuing character to be processed.
+        int i   = 0;
+        while(i != cont_octet_count && from != from_end) {
+
+            // Error checking on continuing characters
+            if (invalid_continuing_octet(*from)) {
+                from_next   = from;
+                to_next =   to;
+                return std::codecvt_base::error;
+            }
+
+            ucs_result *= (1 << 6); 
+
+            // each continuing character has an extra (10xxxxxx)b attached to 
+            // it that must be removed.
+            ucs_result += (unsigned char)(*from++) - 0x80;
+            ++i;
+        }
+
+        // If   the buffer ends with an incomplete unicode character...
+        if (from == from_end && i   != cont_octet_count) {
+            // rewind "from" to before the current character translation
+            from_next = from - (i+1); 
+            to_next = to;
+            return std::codecvt_base::partial;
+        }
+        *to++   = ucs_result;
+    }
+    from_next = from;
+    to_next = to;
+
+    // Were we done converting or did we run out of destination space?
+    if(from == from_end) return std::codecvt_base::ok;
+    else return std::codecvt_base::partial;
+}
+
+std::codecvt_base::result utf8_codecvt_facet::do_out(
+    std::mbstate_t& /*state*/, 
+    const wchar_t *   from,
+    const wchar_t * from_end, 
+    const wchar_t * & from_next,
+    char * to, 
+    char * to_end, 
+    char * & to_next
+) const
+{
+    // RG - consider merging this table with the other one
+    const wchar_t octet1_modifier_table[] = {
+        0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc
+    };
+
+    wchar_t max_wchar = (std::numeric_limits<wchar_t>::max)();
+    while (from != from_end && to != to_end) {
+
+        // Check for invalid UCS-4 character
+        if (*from  > max_wchar) {
+            from_next = from;
+            to_next = to;
+            return std::codecvt_base::error;
+        }
+
+        int cont_octet_count = get_cont_octet_out_count(*from);
+
+        // RG  - comment this formula better
+        int shift_exponent = (cont_octet_count) *   6;
+
+        // Process the first character
+        *to++ = static_cast<char>(octet1_modifier_table[cont_octet_count] +
+            (unsigned char)(*from / (1 << shift_exponent)));
+
+        // Process the continuation characters 
+        // Invariants: At   the start of the loop:
+        //   1) 'i' continuing octets   have been generated
+        //   2) '*to'   points to the next location to place an octet
+        //   3) shift_exponent is   6 more than needed for the next octet
+        int i   = 0;
+        while   (i != cont_octet_count && to != to_end) {
+            shift_exponent -= 6;
+            *to++ = static_cast<char>(0x80 + ((*from / (1 << shift_exponent)) % (1 << 6)));
+            ++i;
+        }
+        // If   we filled up the out buffer before encoding the character
+        if(to   == to_end && i != cont_octet_count) {
+            from_next = from;
+            to_next = to - (i+1);
+            return std::codecvt_base::partial;
+        }
+        ++from;
+    }
+    from_next = from;
+    to_next = to;
+    // Were we done or did we run out of destination space
+    if(from == from_end) return std::codecvt_base::ok;
+    else return std::codecvt_base::partial;
+}
+
+// How many char objects can I process to get <= max_limit
+// wchar_t objects?
+int utf8_codecvt_facet::do_length(
+    const std::mbstate_t &,
+    const char * from,
+    const char * from_end, 
+    std::size_t max_limit
+) const
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+        throw()
+#endif
+{ 
+    // RG - this code is confusing!  I need a better way to express it.
+    // and test cases.
+
+    // Invariants:
+    // 1) last_octet_count has the size of the last measured character
+    // 2) char_count holds the number of characters shown to fit
+    // within the bounds so far (no greater than max_limit)
+    // 3) from_next points to the octet 'last_octet_count' before the
+    // last measured character.  
+    int last_octet_count=0;
+    std::size_t char_count = 0;
+    const char* from_next = from;
+    // Use "<" because the buffer may represent incomplete characters
+    while (from_next+last_octet_count <= from_end && char_count <= max_limit) {
+        from_next += last_octet_count;
+        last_octet_count = (get_octet_count(*from_next));
+        ++char_count;
+    }
+    return static_cast<int>(from_next-from_end);
+}
+
+unsigned int utf8_codecvt_facet::get_octet_count(
+    unsigned char   lead_octet
+){
+    // if the 0-bit (MSB) is 0, then 1 character
+    if (lead_octet <= 0x7f) return 1;
+
+    // Otherwise the count number of consecutive 1 bits starting at MSB
+//    assert(0xc0 <= lead_octet && lead_octet <= 0xfd);
+
+    if (0xc0 <= lead_octet && lead_octet <= 0xdf) return 2;
+    else if (0xe0 <= lead_octet && lead_octet <= 0xef) return 3;
+    else if (0xf0 <= lead_octet && lead_octet <= 0xf7) return 4;
+    else if (0xf8 <= lead_octet && lead_octet <= 0xfb) return 5;
+    else return 6;
+}
+
+namespace detail {
+
+template<std::size_t s>
+int get_cont_octet_out_count_impl(wchar_t word){
+    if (word < 0x80) {
+        return 0;
+    }
+    if (word < 0x800) {
+        return 1;
+    }
+    return 2;
+}
+
+template<>
+int get_cont_octet_out_count_impl<4>(wchar_t word){
+    if (word < 0x80) {
+        return 0;
+    }
+    if (word < 0x800) {
+        return 1;
+    }
+
+    // Note that the following code will generate warnings on some platforms
+    // where wchar_t is defined as UCS2.  The warnings are superfluous as the
+    // specialization is never instantitiated with such compilers, but this
+    // can cause problems if warnings are being treated as errors, so we guard
+    // against that.  Including <boost/detail/utf8_codecvt_facet.hpp> as we do
+    // should be enough to get WCHAR_MAX defined.
+#if !defined(WCHAR_MAX)
+#   error WCHAR_MAX not defined!
+#endif
+    // cope with VC++ 7.1 or earlier having invalid WCHAR_MAX
+#if defined(_MSC_VER) && _MSC_VER <= 1310 // 7.1 or earlier
+    return 2;
+#elif WCHAR_MAX > 0x10000
+    
+   if (word < 0x10000) {
+        return 2;
+    }
+    if (word < 0x200000) {
+        return 3;
+    }
+    if (word < 0x4000000) {
+        return 4;
+    }
+    return 5;
+    
+#else
+    return 2;
+#endif
+}
+
+} // namespace detail
+
+// How many "continuing octets" will be needed for this word
+// ==   total octets - 1.
+int utf8_codecvt_facet::get_cont_octet_out_count(
+    wchar_t word
+) const {
+    return detail::get_cont_octet_out_count_impl<sizeof(wchar_t)>(word);
+}
+BOOST_UTF8_END_NAMESPACE
+
+#endif
diff --git a/vendor/pdalboost/boost/detail/winapi/GetLastError.hpp b/vendor/pdalboost/boost/detail/winapi/GetLastError.hpp
new file mode 100644
index 0000000..b6ee14f
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/winapi/GetLastError.hpp
@@ -0,0 +1,33 @@
+//  GetLastError.hpp  --------------------------------------------------------------//
+
+//  Copyright 2010 Vicente J. Botet Escriba
+//  Copyright 2015 Andrey Semashev
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_GETLASTERROR_HPP
+#define BOOST_DETAIL_WINAPI_GETLASTERROR_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if !defined( BOOST_USE_WINDOWS_H )
+extern "C" {
+BOOST_SYMBOL_IMPORT pdalboost::detail::winapi::DWORD_ WINAPI GetLastError(BOOST_DETAIL_WINAPI_VOID);
+}
+#endif
+
+namespace pdalboost {
+namespace detail {
+namespace winapi {
+using ::GetLastError;
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_GETLASTERROR_HPP
diff --git a/vendor/pdalboost/boost/detail/winapi/basic_types.hpp b/vendor/pdalboost/boost/detail/winapi/basic_types.hpp
new file mode 100644
index 0000000..dbea987
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/winapi/basic_types.hpp
@@ -0,0 +1,225 @@
+//  basic_types.hpp  --------------------------------------------------------------//
+
+//  Copyright 2010 Vicente J. Botet Escriba
+//  Copyright 2015 Andrey Semashev
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_DETAIL_WINAPI_BASIC_TYPES_HPP
+#define BOOST_DETAIL_WINAPI_BASIC_TYPES_HPP
+
+#include <cstdarg>
+#include <boost/cstdint.hpp>
+#include <boost/detail/winapi/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if defined( BOOST_USE_WINDOWS_H )
+# include <windows.h>
+#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) ||  defined(__CYGWIN__)
+# include <winerror.h>
+# ifdef UNDER_CE
+#  ifndef WINAPI
+#   ifndef _WIN32_WCE_EMULATION
+#    define WINAPI  __cdecl     // Note this doesn't match the desktop definition
+#   else
+#    define WINAPI  __stdcall
+#   endif
+#  endif
+// Windows CE defines a few functions as inline functions in kfuncs.h
+typedef int BOOL;
+typedef unsigned long DWORD;
+typedef void* HANDLE;
+#  include <kfuncs.h>
+# else
+#  ifndef WINAPI
+#   define WINAPI  __stdcall
+#  endif
+# endif
+# ifndef NTAPI
+#  define NTAPI __stdcall
+# endif
+#else
+# error "Win32 functions not available"
+#endif
+
+#ifndef NO_STRICT
+#ifndef STRICT
+#define STRICT 1
+#endif
+#endif
+
+#if defined(STRICT)
+#define BOOST_DETAIL_WINAPI_DECLARE_HANDLE(x) struct x##__; typedef struct x##__ *x
+#else
+#define BOOST_DETAIL_WINAPI_DECLARE_HANDLE(x) typedef void* x
+#endif
+
+#if !defined( BOOST_USE_WINDOWS_H )
+extern "C" {
+union _LARGE_INTEGER;
+struct _SECURITY_ATTRIBUTES;
+BOOST_DETAIL_WINAPI_DECLARE_HANDLE(HINSTANCE);
+typedef HINSTANCE HMODULE;
+}
+#endif
+
+#if defined(__GNUC__)
+#define BOOST_DETAIL_WINAPI_MAY_ALIAS __attribute__ ((__may_alias__))
+#else
+#define BOOST_DETAIL_WINAPI_MAY_ALIAS
+#endif
+
+// MinGW64 gcc 4.8.2 fails to compile function declarations with pdalboost::detail::winapi::VOID_ arguments even though
+// the typedef expands to void. In Windows SDK, VOID is a macro which unfolds to void. We use our own macro in such cases.
+#define BOOST_DETAIL_WINAPI_VOID void
+
+namespace pdalboost {
+namespace detail {
+namespace winapi {
+#if defined( BOOST_USE_WINDOWS_H )
+
+typedef ::BOOL BOOL_;
+typedef ::PBOOL PBOOL_;
+typedef ::LPBOOL LPBOOL_;
+typedef ::BOOLEAN BOOLEAN_;
+typedef ::PBOOLEAN PBOOLEAN_;
+typedef ::BYTE BYTE_;
+typedef ::PBYTE PBYTE_;
+typedef ::LPBYTE LPBYTE_;
+typedef ::WORD WORD_;
+typedef ::PWORD PWORD_;
+typedef ::LPWORD LPWORD_;
+typedef ::DWORD DWORD_;
+typedef ::PDWORD PDWORD_;
+typedef ::LPDWORD LPDWORD_;
+typedef ::HANDLE HANDLE_;
+typedef ::PHANDLE PHANDLE_;
+typedef ::INT INT_;
+typedef ::PINT PINT_;
+typedef ::LPINT LPINT_;
+typedef ::UINT UINT_;
+typedef ::PUINT PUINT_;
+typedef ::LONG LONG_;
+typedef ::PLONG PLONG_;
+typedef ::LPLONG LPLONG_;
+typedef ::ULONG ULONG_;
+typedef ::PULONG PULONG_;
+typedef ::LONGLONG LONGLONG_;
+typedef ::ULONGLONG ULONGLONG_;
+typedef ::INT_PTR INT_PTR_;
+typedef ::UINT_PTR UINT_PTR_;
+typedef ::LONG_PTR LONG_PTR_;
+typedef ::ULONG_PTR ULONG_PTR_;
+typedef ::DWORD_PTR DWORD_PTR_;
+typedef ::PDWORD_PTR PDWORD_PTR_;
+typedef ::SIZE_T SIZE_T_;
+typedef ::PSIZE_T PSIZE_T_;
+typedef ::SSIZE_T SSIZE_T_;
+typedef ::PSSIZE_T PSSIZE_T_;
+typedef VOID VOID_; // VOID is a macro
+typedef ::PVOID PVOID_;
+typedef ::LPVOID LPVOID_;
+typedef ::LPCVOID LPCVOID_;
+typedef ::CHAR CHAR_;
+typedef ::LPSTR LPSTR_;
+typedef ::LPCSTR LPCSTR_;
+typedef ::WCHAR WCHAR_;
+typedef ::LPWSTR LPWSTR_;
+typedef ::LPCWSTR LPCWSTR_;
+
+#else // defined( BOOST_USE_WINDOWS_H )
+
+typedef int BOOL_;
+typedef BOOL_* PBOOL_;
+typedef BOOL_* LPBOOL_;
+typedef unsigned char BYTE_;
+typedef BYTE_* PBYTE_;
+typedef BYTE_* LPBYTE_;
+typedef BYTE_ BOOLEAN_;
+typedef BOOLEAN_* PBOOLEAN_;
+typedef unsigned short WORD_;
+typedef WORD_* PWORD_;
+typedef WORD_* LPWORD_;
+typedef unsigned long DWORD_;
+typedef DWORD_* PDWORD_;
+typedef DWORD_* LPDWORD_;
+typedef void* HANDLE_;
+typedef void** PHANDLE_;
+
+typedef int INT_;
+typedef INT_* PINT_;
+typedef INT_* LPINT_;
+typedef unsigned int UINT_;
+typedef UINT_* PUINT_;
+typedef long LONG_;
+typedef LONG_* PLONG_;
+typedef LONG_* LPLONG_;
+typedef unsigned long ULONG_;
+typedef ULONG_* PULONG_;
+
+typedef pdalboost::int64_t LONGLONG_;
+typedef pdalboost::uint64_t ULONGLONG_;
+
+# ifdef _WIN64
+#  if defined(__CYGWIN__)
+typedef long INT_PTR_;
+typedef unsigned long UINT_PTR_;
+typedef long LONG_PTR_;
+typedef unsigned long ULONG_PTR_;
+#  else
+typedef __int64 INT_PTR_;
+typedef unsigned __int64 UINT_PTR_;
+typedef __int64 LONG_PTR_;
+typedef unsigned __int64 ULONG_PTR_;
+#  endif
+# else
+typedef int INT_PTR_;
+typedef unsigned int UINT_PTR_;
+typedef long LONG_PTR_;
+typedef unsigned long ULONG_PTR_;
+# endif
+
+typedef ULONG_PTR_ DWORD_PTR_, *PDWORD_PTR_;
+typedef ULONG_PTR_ SIZE_T_, *PSIZE_T_;
+typedef LONG_PTR_ SSIZE_T_, *PSSIZE_T_;
+
+typedef void VOID_;
+typedef void *PVOID_;
+typedef void *LPVOID_;
+typedef const void *LPCVOID_;
+
+typedef char CHAR_;
+typedef CHAR_ *LPSTR_;
+typedef const CHAR_ *LPCSTR_;
+
+typedef wchar_t WCHAR_;
+typedef WCHAR_ *LPWSTR_;
+typedef const WCHAR_ *LPCWSTR_;
+
+#endif // defined( BOOST_USE_WINDOWS_H )
+
+typedef ::HMODULE HMODULE_;
+
+typedef union BOOST_DETAIL_WINAPI_MAY_ALIAS _LARGE_INTEGER {
+    struct {
+        DWORD_ LowPart;
+        LONG_ HighPart;
+    } u;
+    LONGLONG_ QuadPart;
+} LARGE_INTEGER_, *PLARGE_INTEGER_;
+
+typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _SECURITY_ATTRIBUTES {
+    DWORD_  nLength;
+    LPVOID_ lpSecurityDescriptor;
+    BOOL_   bInheritHandle;
+} SECURITY_ATTRIBUTES_, *PSECURITY_ATTRIBUTES_, *LPSECURITY_ATTRIBUTES_;
+
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_BASIC_TYPES_HPP
diff --git a/vendor/pdalboost/boost/detail/winapi/config.hpp b/vendor/pdalboost/boost/detail/winapi/config.hpp
new file mode 100644
index 0000000..c67d670
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/winapi/config.hpp
@@ -0,0 +1,72 @@
+//  config.hpp  --------------------------------------------------------------//
+
+//  Copyright 2013 Andrey Semashev
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_
+#define BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_
+
+#include <boost/config.hpp>
+#if defined __MINGW32__
+#include <_mingw.h>
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+// BOOST_WINAPI_IS_MINGW indicates that the target Windows SDK is provided by MinGW (http://mingw.org/).
+// BOOST_WINAPI_IS_MINGW_W64 indicates that the target Windows SDK is provided by MinGW-w64 (http://mingw-w64.org).
+#if defined __MINGW32__
+#if defined __MINGW64_VERSION_MAJOR
+#define BOOST_WINAPI_IS_MINGW_W64
+#else
+#define BOOST_WINAPI_IS_MINGW
+#endif
+#endif
+
+// These constants reflect _WIN32_WINNT_* macros from sdkddkver.h
+// See also: http://msdn.microsoft.com/en-us/library/windows/desktop/aa383745%28v=vs.85%29.aspx#setting_winver_or__win32_winnt
+#define BOOST_WINAPI_VERSION_NT4 0x0400
+#define BOOST_WINAPI_VERSION_WIN2K 0x0500
+#define BOOST_WINAPI_VERSION_WINXP 0x0501
+#define BOOST_WINAPI_VERSION_WS03 0x0502
+#define BOOST_WINAPI_VERSION_WIN6 0x0600
+#define BOOST_WINAPI_VERSION_VISTA 0x0600
+#define BOOST_WINAPI_VERSION_WS08 0x0600
+#define BOOST_WINAPI_VERSION_LONGHORN 0x0600
+#define BOOST_WINAPI_VERSION_WIN7 0x0601
+#define BOOST_WINAPI_VERSION_WIN8 0x0602
+#define BOOST_WINAPI_VERSION_WINBLUE 0x0603
+#define BOOST_WINAPI_VERSION_WINTHRESHOLD 0x0A00
+#define BOOST_WINAPI_VERSION_WIN10 0x0A00
+
+#if !defined(BOOST_USE_WINAPI_VERSION)
+#if defined(_WIN32_WINNT)
+#define BOOST_USE_WINAPI_VERSION _WIN32_WINNT
+#elif defined(WINVER)
+#define BOOST_USE_WINAPI_VERSION WINVER
+#else
+// By default use Windows Vista API on compilers that support it and XP on the others
+#if (defined(_MSC_VER) && _MSC_VER <= 1400) || defined(BOOST_WINAPI_IS_MINGW)
+#define BOOST_USE_WINAPI_VERSION BOOST_WINAPI_VERSION_WINXP
+#else
+#define BOOST_USE_WINAPI_VERSION BOOST_WINAPI_VERSION_WIN6
+#endif
+#endif
+#endif
+
+#if defined(BOOST_USE_WINDOWS_H)
+// We have to define the version macros so that windows.h provides the necessary symbols
+#if !defined(_WIN32_WINNT)
+#define _WIN32_WINNT BOOST_USE_WINAPI_VERSION
+#endif
+#if !defined(WINVER)
+#define WINVER BOOST_USE_WINAPI_VERSION
+#endif
+#endif
+
+#endif // BOOST_DETAIL_WINAPI_CONFIG_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/detail/winapi/time.hpp b/vendor/pdalboost/boost/detail/winapi/time.hpp
new file mode 100644
index 0000000..2a41e54
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/winapi/time.hpp
@@ -0,0 +1,139 @@
+//  time.hpp  --------------------------------------------------------------//
+
+//  Copyright 2010 Vicente J. Botet Escriba
+//  Copyright (c) Microsoft Corporation 2014
+//  Copyright 2015 Andrey Semashev
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_TIME_HPP
+#define BOOST_DETAIL_WINAPI_TIME_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+#include <boost/predef/platform.h>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if !defined( BOOST_USE_WINDOWS_H )
+extern "C" {
+struct _FILETIME;
+struct _SYSTEMTIME;
+
+BOOST_SYMBOL_IMPORT pdalboost::detail::winapi::VOID_ WINAPI
+GetSystemTime(::_SYSTEMTIME* lpSystemTime);
+
+#ifdef BOOST_HAS_GETSYSTEMTIMEASFILETIME  // Windows CE does not define GetSystemTimeAsFileTime
+BOOST_SYMBOL_IMPORT pdalboost::detail::winapi::VOID_ WINAPI
+GetSystemTimeAsFileTime(::_FILETIME* lpSystemTimeAsFileTime);
+#endif
+
+BOOST_SYMBOL_IMPORT pdalboost::detail::winapi::BOOL_ WINAPI
+SystemTimeToFileTime(
+    const ::_SYSTEMTIME* lpSystemTime,
+    ::_FILETIME* lpFileTime);
+
+BOOST_SYMBOL_IMPORT pdalboost::detail::winapi::BOOL_ WINAPI
+FileTimeToSystemTime(
+    const ::_FILETIME* lpFileTime,
+    ::_SYSTEMTIME* lpSystemTime);
+
+#if BOOST_PLAT_WINDOWS_DESKTOP
+BOOST_SYMBOL_IMPORT pdalboost::detail::winapi::BOOL_ WINAPI
+FileTimeToLocalFileTime(
+    const ::_FILETIME* lpFileTime,
+    ::_FILETIME* lpLocalFileTime);
+
+BOOST_SYMBOL_IMPORT pdalboost::detail::winapi::BOOL_ WINAPI
+LocalFileTimeToFileTime(
+    const ::_FILETIME* lpLocalFileTime,
+    ::_FILETIME* lpFileTime);
+
+BOOST_SYMBOL_IMPORT pdalboost::detail::winapi::DWORD_ WINAPI
+GetTickCount(BOOST_DETAIL_WINAPI_VOID);
+#endif
+
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+BOOST_SYMBOL_IMPORT pdalboost::detail::winapi::ULONGLONG_ WINAPI
+GetTickCount64(BOOST_DETAIL_WINAPI_VOID);
+#endif
+}
+#endif
+
+namespace pdalboost {
+namespace detail {
+namespace winapi {
+
+typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _FILETIME {
+    DWORD_ dwLowDateTime;
+    DWORD_ dwHighDateTime;
+} FILETIME_, *PFILETIME_, *LPFILETIME_;
+
+typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS _SYSTEMTIME {
+    WORD_ wYear;
+    WORD_ wMonth;
+    WORD_ wDayOfWeek;
+    WORD_ wDay;
+    WORD_ wHour;
+    WORD_ wMinute;
+    WORD_ wSecond;
+    WORD_ wMilliseconds;
+} SYSTEMTIME_, *PSYSTEMTIME_, *LPSYSTEMTIME_;
+
+#if BOOST_PLAT_WINDOWS_DESKTOP
+using ::GetTickCount;
+#endif
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+using ::GetTickCount64;
+#endif
+
+BOOST_FORCEINLINE VOID_ GetSystemTime(LPSYSTEMTIME_ lpSystemTime)
+{
+    ::GetSystemTime(reinterpret_cast< ::_SYSTEMTIME* >(lpSystemTime));
+}
+
+#if defined( BOOST_HAS_GETSYSTEMTIMEASFILETIME )
+BOOST_FORCEINLINE VOID_ GetSystemTimeAsFileTime(LPFILETIME_ lpSystemTimeAsFileTime)
+{
+    ::GetSystemTimeAsFileTime(reinterpret_cast< ::_FILETIME* >(lpSystemTimeAsFileTime));
+}
+#else
+// Windows CE does not define GetSystemTimeAsFileTime
+BOOST_FORCEINLINE VOID_ GetSystemTimeAsFileTime(FILETIME_* lpFileTime)
+{
+    pdalboost::detail::winapi::SYSTEMTIME_ st;
+    pdalboost::detail::winapi::GetSystemTime(&st);
+    pdalboost::detail::winapi::SystemTimeToFileTime(&st, lpFileTime);
+}
+#endif
+
+BOOST_FORCEINLINE BOOL_ SystemTimeToFileTime(const SYSTEMTIME_* lpSystemTime, FILETIME_* lpFileTime)
+{
+    return ::SystemTimeToFileTime(reinterpret_cast< const ::_SYSTEMTIME* >(lpSystemTime), reinterpret_cast< ::_FILETIME* >(lpFileTime));
+}
+
+BOOST_FORCEINLINE BOOL_ FileTimeToSystemTime(const FILETIME_* lpFileTime, SYSTEMTIME_* lpSystemTime)
+{
+    return ::FileTimeToSystemTime(reinterpret_cast< const ::_FILETIME* >(lpFileTime), reinterpret_cast< ::_SYSTEMTIME* >(lpSystemTime));
+}
+
+#if BOOST_PLAT_WINDOWS_DESKTOP
+BOOST_FORCEINLINE BOOL_ FileTimeToLocalFileTime(const FILETIME_* lpFileTime, FILETIME_* lpLocalFileTime)
+{
+    return ::FileTimeToLocalFileTime(reinterpret_cast< const ::_FILETIME* >(lpFileTime), reinterpret_cast< ::_FILETIME* >(lpLocalFileTime));
+}
+
+BOOST_FORCEINLINE BOOL_ LocalFileTimeToFileTime(const FILETIME_* lpLocalFileTime, FILETIME_* lpFileTime)
+{
+    return ::LocalFileTimeToFileTime(reinterpret_cast< const ::_FILETIME* >(lpLocalFileTime), reinterpret_cast< ::_FILETIME* >(lpFileTime));
+}
+#endif
+
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_TIME_HPP
diff --git a/vendor/pdalboost/boost/detail/winapi/timers.hpp b/vendor/pdalboost/boost/detail/winapi/timers.hpp
new file mode 100644
index 0000000..2eab44a
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/winapi/timers.hpp
@@ -0,0 +1,48 @@
+//  timers.hpp  --------------------------------------------------------------//
+
+//  Copyright 2010 Vicente J. Botet Escriba
+//  Copyright 2015 Andrey Semashev
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_DETAIL_WINAPI_TIMERS_HPP
+#define BOOST_DETAIL_WINAPI_TIMERS_HPP
+
+#include <boost/detail/winapi/basic_types.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if !defined( BOOST_USE_WINDOWS_H )
+extern "C" {
+BOOST_SYMBOL_IMPORT pdalboost::detail::winapi::BOOL_ WINAPI
+QueryPerformanceCounter(::_LARGE_INTEGER* lpPerformanceCount);
+
+BOOST_SYMBOL_IMPORT pdalboost::detail::winapi::BOOL_ WINAPI
+QueryPerformanceFrequency(::_LARGE_INTEGER* lpFrequency);
+}
+#endif
+
+
+namespace pdalboost {
+namespace detail {
+namespace winapi {
+
+BOOST_FORCEINLINE BOOL_ QueryPerformanceCounter(LARGE_INTEGER_* lpPerformanceCount)
+{
+    return ::QueryPerformanceCounter(reinterpret_cast< ::_LARGE_INTEGER* >(lpPerformanceCount));
+}
+
+BOOST_FORCEINLINE BOOL_ QueryPerformanceFrequency(LARGE_INTEGER_* lpFrequency)
+{
+    return ::QueryPerformanceFrequency(reinterpret_cast< ::_LARGE_INTEGER* >(lpFrequency));
+}
+
+}
+}
+}
+
+#endif // BOOST_DETAIL_WINAPI_TIMERS_HPP
diff --git a/vendor/pdalboost/boost/detail/workaround.hpp b/vendor/pdalboost/boost/detail/workaround.hpp
new file mode 100644
index 0000000..40b3423
--- /dev/null
+++ b/vendor/pdalboost/boost/detail/workaround.hpp
@@ -0,0 +1,267 @@
+// Copyright David Abrahams 2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+#ifndef WORKAROUND_DWA2002126_HPP
+# define WORKAROUND_DWA2002126_HPP
+
+// Compiler/library version workaround macro
+//
+// Usage:
+//
+//     #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+//        // workaround for eVC4 and VC6
+//        ... // workaround code here
+//     #endif
+//
+// When BOOST_STRICT_CONFIG is defined, expands to 0. Otherwise, the
+// first argument must be undefined or expand to a numeric
+// value. The above expands to:
+//
+//     (BOOST_MSVC) != 0 && (BOOST_MSVC) < 1300
+//
+// When used for workarounds that apply to the latest known version 
+// and all earlier versions of a compiler, the following convention 
+// should be observed:
+//
+//     #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1301))
+//
+// The version number in this case corresponds to the last version in
+// which the workaround was known to have been required. When
+// BOOST_DETECT_OUTDATED_WORKAROUNDS is not the defined, the macro
+// BOOST_TESTED_AT(x) expands to "!= 0", which effectively activates
+// the workaround for any version of the compiler. When
+// BOOST_DETECT_OUTDATED_WORKAROUNDS is defined, a compiler warning or
+// error will be issued if the compiler version exceeds the argument
+// to BOOST_TESTED_AT().  This can be used to locate workarounds which
+// may be obsoleted by newer versions.
+
+# ifndef BOOST_STRICT_CONFIG
+
+#include <boost/config.hpp>
+
+#ifndef __BORLANDC__
+#define __BORLANDC___WORKAROUND_GUARD 1
+#else
+#define __BORLANDC___WORKAROUND_GUARD 0
+#endif
+#ifndef __CODEGEARC__
+#define __CODEGEARC___WORKAROUND_GUARD 1
+#else
+#define __CODEGEARC___WORKAROUND_GUARD 0
+#endif
+#ifndef _MSC_VER
+#define _MSC_VER_WORKAROUND_GUARD 1
+#else
+#define _MSC_VER_WORKAROUND_GUARD 0
+#endif
+#ifndef _MSC_FULL_VER
+#define _MSC_FULL_VER_WORKAROUND_GUARD 1
+#else
+#define _MSC_FULL_VER_WORKAROUND_GUARD 0
+#endif
+#ifndef BOOST_MSVC
+#define BOOST_MSVC_WORKAROUND_GUARD 1
+#else
+#define BOOST_MSVC_WORKAROUND_GUARD 0
+#endif
+#ifndef BOOST_MSVC_FULL_VER
+#define BOOST_MSVC_FULL_VER_WORKAROUND_GUARD 1
+#else
+#define BOOST_MSVC_FULL_VER_WORKAROUND_GUARD 0
+#endif
+#ifndef __GNUC__
+#define __GNUC___WORKAROUND_GUARD 1
+#else
+#define __GNUC___WORKAROUND_GUARD 0
+#endif
+#ifndef __GNUC_MINOR__
+#define __GNUC_MINOR___WORKAROUND_GUARD 1
+#else
+#define __GNUC_MINOR___WORKAROUND_GUARD 0
+#endif
+#ifndef __GNUC_PATCHLEVEL__
+#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 1
+#else
+#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 0
+#endif
+#ifndef __IBMCPP__
+#define __IBMCPP___WORKAROUND_GUARD 1
+#else
+#define __IBMCPP___WORKAROUND_GUARD 0
+#endif
+#ifndef __SUNPRO_CC
+#define __SUNPRO_CC_WORKAROUND_GUARD 1
+#else
+#define __SUNPRO_CC_WORKAROUND_GUARD 0
+#endif
+#ifndef __DECCXX_VER
+#define __DECCXX_VER_WORKAROUND_GUARD 1
+#else
+#define __DECCXX_VER_WORKAROUND_GUARD 0
+#endif
+#ifndef __MWERKS__
+#define __MWERKS___WORKAROUND_GUARD 1
+#else
+#define __MWERKS___WORKAROUND_GUARD 0
+#endif
+#ifndef __EDG__
+#define __EDG___WORKAROUND_GUARD 1
+#else
+#define __EDG___WORKAROUND_GUARD 0
+#endif
+#ifndef __EDG_VERSION__
+#define __EDG_VERSION___WORKAROUND_GUARD 1
+#else
+#define __EDG_VERSION___WORKAROUND_GUARD 0
+#endif
+#ifndef __HP_aCC
+#define __HP_aCC_WORKAROUND_GUARD 1
+#else
+#define __HP_aCC_WORKAROUND_GUARD 0
+#endif
+#ifndef __hpxstd98
+#define __hpxstd98_WORKAROUND_GUARD 1
+#else
+#define __hpxstd98_WORKAROUND_GUARD 0
+#endif
+#ifndef _CRAYC
+#define _CRAYC_WORKAROUND_GUARD 1
+#else
+#define _CRAYC_WORKAROUND_GUARD 0
+#endif
+#ifndef __DMC__
+#define __DMC___WORKAROUND_GUARD 1
+#else
+#define __DMC___WORKAROUND_GUARD 0
+#endif
+#ifndef MPW_CPLUS
+#define MPW_CPLUS_WORKAROUND_GUARD 1
+#else
+#define MPW_CPLUS_WORKAROUND_GUARD 0
+#endif
+#ifndef __COMO__
+#define __COMO___WORKAROUND_GUARD 1
+#else
+#define __COMO___WORKAROUND_GUARD 0
+#endif
+#ifndef __COMO_VERSION__
+#define __COMO_VERSION___WORKAROUND_GUARD 1
+#else
+#define __COMO_VERSION___WORKAROUND_GUARD 0
+#endif
+#ifndef __INTEL_COMPILER
+#define __INTEL_COMPILER_WORKAROUND_GUARD 1
+#else
+#define __INTEL_COMPILER_WORKAROUND_GUARD 0
+#endif
+#ifndef __ICL
+#define __ICL_WORKAROUND_GUARD 1
+#else
+#define __ICL_WORKAROUND_GUARD 0
+#endif
+#ifndef _COMPILER_VERSION
+#define _COMPILER_VERSION_WORKAROUND_GUARD 1
+#else
+#define _COMPILER_VERSION_WORKAROUND_GUARD 0
+#endif
+
+#ifndef _RWSTD_VER
+#define _RWSTD_VER_WORKAROUND_GUARD 1
+#else
+#define _RWSTD_VER_WORKAROUND_GUARD 0
+#endif
+#ifndef BOOST_RWSTD_VER
+#define BOOST_RWSTD_VER_WORKAROUND_GUARD 1
+#else
+#define BOOST_RWSTD_VER_WORKAROUND_GUARD 0
+#endif
+#ifndef __GLIBCPP__
+#define __GLIBCPP___WORKAROUND_GUARD 1
+#else
+#define __GLIBCPP___WORKAROUND_GUARD 0
+#endif
+#ifndef _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC
+#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 1
+#else
+#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 0
+#endif
+#ifndef __SGI_STL_PORT
+#define __SGI_STL_PORT_WORKAROUND_GUARD 1
+#else
+#define __SGI_STL_PORT_WORKAROUND_GUARD 0
+#endif
+#ifndef _STLPORT_VERSION
+#define _STLPORT_VERSION_WORKAROUND_GUARD 1
+#else
+#define _STLPORT_VERSION_WORKAROUND_GUARD 0
+#endif
+#ifndef __LIBCOMO_VERSION__
+#define __LIBCOMO_VERSION___WORKAROUND_GUARD 1
+#else
+#define __LIBCOMO_VERSION___WORKAROUND_GUARD 0
+#endif
+#ifndef _CPPLIB_VER
+#define _CPPLIB_VER_WORKAROUND_GUARD 1
+#else
+#define _CPPLIB_VER_WORKAROUND_GUARD 0
+#endif
+
+#ifndef BOOST_INTEL_CXX_VERSION
+#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 1
+#else
+#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 0
+#endif
+#ifndef BOOST_INTEL_WIN
+#define BOOST_INTEL_WIN_WORKAROUND_GUARD 1
+#else
+#define BOOST_INTEL_WIN_WORKAROUND_GUARD 0
+#endif
+#ifndef BOOST_DINKUMWARE_STDLIB
+#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 1
+#else
+#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 0
+#endif
+#ifndef BOOST_INTEL
+#define BOOST_INTEL_WORKAROUND_GUARD 1
+#else
+#define BOOST_INTEL_WORKAROUND_GUARD 0
+#endif
+// Always define to zero, if it's used it'll be defined my MPL:
+#define BOOST_MPL_CFG_GCC_WORKAROUND_GUARD 0
+
+#  define BOOST_WORKAROUND(symbol, test)                \
+         ((symbol ## _WORKAROUND_GUARD + 0 == 0) &&     \
+         (symbol != 0) && (1 % (( (symbol test) ) + 1)))
+//                              ^ ^           ^ ^
+// The extra level of parenthesis nesting above, along with the
+// BOOST_OPEN_PAREN indirection below, is required to satisfy the
+// broken preprocessor in MWCW 8.3 and earlier.
+//
+// The basic mechanism works as follows:
+//      (symbol test) + 1        =>   if (symbol test) then 2 else 1
+//      1 % ((symbol test) + 1)  =>   if (symbol test) then 1 else 0
+//
+// The complication with % is for cooperation with BOOST_TESTED_AT().
+// When "test" is BOOST_TESTED_AT(x) and
+// BOOST_DETECT_OUTDATED_WORKAROUNDS is #defined,
+//
+//      symbol test              =>   if (symbol <= x) then 1 else -1
+//      (symbol test) + 1        =>   if (symbol <= x) then 2 else 0
+//      1 % ((symbol test) + 1)  =>   if (symbol <= x) then 1 else divide-by-zero
+//
+
+#  ifdef BOOST_DETECT_OUTDATED_WORKAROUNDS
+#   define BOOST_OPEN_PAREN (
+#   define BOOST_TESTED_AT(value)  > value) ?(-1): BOOST_OPEN_PAREN 1
+#  else
+#   define BOOST_TESTED_AT(value) != ((value)-(value))
+#  endif
+
+# else
+
+#  define BOOST_WORKAROUND(symbol, test) 0
+
+# endif 
+
+#endif // WORKAROUND_DWA2002126_HPP
diff --git a/vendor/pdalboost/boost/enable_shared_from_this.hpp b/vendor/pdalboost/boost/enable_shared_from_this.hpp
new file mode 100644
index 0000000..b1bb63d
--- /dev/null
+++ b/vendor/pdalboost/boost/enable_shared_from_this.hpp
@@ -0,0 +1,18 @@
+#ifndef BOOST_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED
+#define BOOST_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED
+
+//
+//  enable_shared_from_this.hpp
+//
+//  Copyright (c) 2002 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  http://www.boost.org/libs/smart_ptr/enable_shared_from_this.html
+//
+
+#include <boost/smart_ptr/enable_shared_from_this.hpp>
+
+#endif  // #ifndef BOOST_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/exception/current_exception_cast.hpp b/vendor/pdalboost/boost/exception/current_exception_cast.hpp
new file mode 100644
index 0000000..4f9c453
--- /dev/null
+++ b/vendor/pdalboost/boost/exception/current_exception_cast.hpp
@@ -0,0 +1,43 @@
+//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_7E83C166200811DE885E826156D89593
+#define UUID_7E83C166200811DE885E826156D89593
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
+
+namespace
+pdalboost
+    {
+    template <class E>
+    inline
+    E *
+    current_exception_cast()
+        {
+        try
+            {
+            throw;
+            }
+        catch(
+        E & e )
+            {
+            return &e;
+            }
+        catch(
+        ...)
+            {
+            return 0;
+            }
+        }
+    }
+
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/exception/detail/clone_current_exception.hpp b/vendor/pdalboost/boost/exception/detail/clone_current_exception.hpp
new file mode 100644
index 0000000..9c3173b
--- /dev/null
+++ b/vendor/pdalboost/boost/exception/detail/clone_current_exception.hpp
@@ -0,0 +1,56 @@
+//Copyright (c) 2006-2013 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_81522C0EB56511DFAB613DB0DFD72085
+#define UUID_81522C0EB56511DFAB613DB0DFD72085
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
+
+#ifdef BOOST_NO_EXCEPTIONS
+#    error This header requires exception handling to be enabled.
+#endif
+
+namespace
+pdalboost
+    {
+    namespace
+    exception_detail
+        {
+        class clone_base;
+
+#ifdef BOOST_ENABLE_NON_INTRUSIVE_EXCEPTION_PTR
+        int clone_current_exception_non_intrusive( clone_base const * & cloned );
+#endif
+
+        namespace
+        clone_current_exception_result
+            {
+            int const success=0;
+            int const bad_alloc=1;
+            int const bad_exception=2;
+            int const not_supported=3;
+            }
+
+        inline
+        int
+        clone_current_exception( clone_base const * & cloned )
+            {
+#ifdef BOOST_ENABLE_NON_INTRUSIVE_EXCEPTION_PTR
+            return clone_current_exception_non_intrusive(cloned);
+#else
+            return clone_current_exception_result::not_supported;
+#endif
+            }
+        }
+    }
+
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/exception/detail/error_info_impl.hpp b/vendor/pdalboost/boost/exception/detail/error_info_impl.hpp
new file mode 100644
index 0000000..6ac3c31
--- /dev/null
+++ b/vendor/pdalboost/boost/exception/detail/error_info_impl.hpp
@@ -0,0 +1,74 @@
+//Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_CE6983AC753411DDA764247956D89593
+#define UUID_CE6983AC753411DDA764247956D89593
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
+
+#include <string>
+
+namespace
+pdalboost
+    {
+    namespace
+    exception_detail
+        {
+        class
+        error_info_base
+            {
+            public:
+
+            virtual std::string name_value_string() const = 0;
+
+            protected:
+
+            virtual
+            ~error_info_base() throw()
+                {
+                }
+            };
+        }
+
+    template <class Tag,class T>
+    class
+    error_info:
+        public exception_detail::error_info_base
+        {
+        public:
+
+        typedef T value_type;
+
+        error_info( value_type const & value );
+        ~error_info() throw();
+
+        value_type const &
+        value() const
+            {
+            return value_;
+            }
+
+        value_type &
+        value()
+            {
+            return value_;
+            }
+
+        private:
+
+        std::string name_value_string() const;
+
+        value_type value_;
+        };
+    }
+
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/exception/detail/exception_ptr.hpp b/vendor/pdalboost/boost/exception/detail/exception_ptr.hpp
new file mode 100644
index 0000000..9df49ec
--- /dev/null
+++ b/vendor/pdalboost/boost/exception/detail/exception_ptr.hpp
@@ -0,0 +1,513 @@
+//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_618474C2DE1511DEB74A388C56D89593
+#define UUID_618474C2DE1511DEB74A388C56D89593
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_EXCEPTIONS
+#error This header requires exception handling to be enabled.
+#endif
+#include <boost/exception/exception.hpp>
+#include <boost/exception/info.hpp>
+#include <boost/exception/diagnostic_information.hpp>
+#include <boost/exception/detail/type_info.hpp>
+#include <boost/exception/detail/clone_current_exception.hpp>
+#ifndef BOOST_NO_RTTI
+#include <boost/core/demangle.hpp>
+#endif
+#include <boost/shared_ptr.hpp>
+#include <stdexcept>
+#include <new>
+#include <ios>
+#include <stdlib.h>
+
+namespace
+pdalboost
+    {
+    class exception_ptr;
+    BOOST_NORETURN void rethrow_exception( exception_ptr const & );
+    exception_ptr current_exception();
+
+    class
+    exception_ptr
+        {
+        typedef pdalboost::shared_ptr<exception_detail::clone_base const> impl;
+        impl ptr_;
+        friend void rethrow_exception( exception_ptr const & );
+        typedef exception_detail::clone_base const * (impl::*unspecified_bool_type)() const;
+        public:
+        exception_ptr()
+            {
+            }
+        explicit
+        exception_ptr( impl const & ptr ):
+            ptr_(ptr)
+            {
+            }
+        bool
+        operator==( exception_ptr const & other ) const
+            {
+            return ptr_==other.ptr_;
+            }
+        bool
+        operator!=( exception_ptr const & other ) const
+            {
+            return ptr_!=other.ptr_;
+            }
+        operator unspecified_bool_type() const
+            {
+            return ptr_?&impl::get:0;
+            }
+        };
+
+    template <class T>
+    inline
+    exception_ptr
+    copy_exception( T const & e )
+        {
+        try
+            {
+            throw enable_current_exception(e);
+            }
+        catch(
+        ... )
+            {
+            return current_exception();
+            }
+        }
+
+#ifndef BOOST_NO_RTTI
+    typedef error_info<struct tag_original_exception_type,std::type_info const *> original_exception_type;
+
+    inline
+    std::string
+    to_string( original_exception_type const & x )
+        {
+        return core::demangle(x.value()->name());
+        }
+#endif
+
+    namespace
+    exception_detail
+        {
+        struct
+        bad_alloc_:
+            pdalboost::exception,
+            std::bad_alloc
+                {
+                ~bad_alloc_() throw() { }
+                };
+
+        struct
+        bad_exception_:
+            pdalboost::exception,
+            std::bad_exception
+                {
+                ~bad_exception_() throw() { }
+                };
+
+        template <class Exception>
+        exception_ptr
+        get_static_exception_object()
+            {
+            Exception ba;
+            exception_detail::clone_impl<Exception> c(ba);
+#ifndef BOOST_EXCEPTION_DISABLE
+            c <<
+                throw_function(BOOST_CURRENT_FUNCTION) <<
+                throw_file(__FILE__) <<
+                throw_line(__LINE__);
+#endif
+            static exception_ptr ep(shared_ptr<exception_detail::clone_base const>(new exception_detail::clone_impl<Exception>(c)));
+            return ep;
+            }
+
+        template <class Exception>
+        struct
+        exception_ptr_static_exception_object
+            {
+            static exception_ptr const e;
+            };
+
+        template <class Exception>
+        exception_ptr const
+        exception_ptr_static_exception_object<Exception>::
+        e = get_static_exception_object<Exception>();
+        }
+
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility push (default)
+# endif
+#endif
+    class
+    unknown_exception:
+        public pdalboost::exception,
+        public std::exception
+        {
+        public:
+
+        unknown_exception()
+            {
+            }
+
+        explicit
+        unknown_exception( std::exception const & e )
+            {
+            add_original_type(e);
+            }
+
+        explicit
+        unknown_exception( pdalboost::exception const & e ):
+            pdalboost::exception(e)
+            {
+            add_original_type(e);
+            }
+
+        ~unknown_exception() throw()
+            {
+            }
+
+        private:
+
+        template <class E>
+        void
+        add_original_type( E const & e )
+            {
+#ifndef BOOST_NO_RTTI
+            (*this) << original_exception_type(&typeid(e));
+#endif
+            }
+        };
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility pop
+# endif
+#endif
+
+    namespace
+    exception_detail
+        {
+        template <class T>
+        class
+        current_exception_std_exception_wrapper:
+            public T,
+            public pdalboost::exception
+            {
+            public:
+
+            explicit
+            current_exception_std_exception_wrapper( T const & e1 ):
+                T(e1)
+                {
+                add_original_type(e1);
+                }
+
+            current_exception_std_exception_wrapper( T const & e1, pdalboost::exception const & e2 ):
+                T(e1),
+                pdalboost::exception(e2)
+                {
+                add_original_type(e1);
+                }
+
+            ~current_exception_std_exception_wrapper() throw()
+                {
+                }
+
+            private:
+
+            template <class E>
+            void
+            add_original_type( E const & e )
+                {
+#ifndef BOOST_NO_RTTI
+                (*this) << original_exception_type(&typeid(e));
+#endif
+                }
+            };
+
+#ifdef BOOST_NO_RTTI
+        template <class T>
+        pdalboost::exception const *
+        get_boost_exception( T const * )
+            {
+            try
+                {
+                throw;
+                }
+            catch(
+            pdalboost::exception & x )
+                {
+                return &x;
+                }
+            catch(...)
+                {
+                return 0;
+                }
+            }
+#else
+        template <class T>
+        pdalboost::exception const *
+        get_boost_exception( T const * x )
+            {
+            return dynamic_cast<pdalboost::exception const *>(x);
+            }
+#endif
+
+        template <class T>
+        inline
+        exception_ptr
+        current_exception_std_exception( T const & e1 )
+            {
+            if( pdalboost::exception const * e2 = get_boost_exception(&e1) )
+                return pdalboost::copy_exception(current_exception_std_exception_wrapper<T>(e1,*e2));
+            else
+                return pdalboost::copy_exception(current_exception_std_exception_wrapper<T>(e1));
+            }
+
+        inline
+        exception_ptr
+        current_exception_unknown_exception()
+            {
+            return pdalboost::copy_exception(unknown_exception());
+            }
+
+        inline
+        exception_ptr
+        current_exception_unknown_boost_exception( pdalboost::exception const & e )
+            {
+            return pdalboost::copy_exception(unknown_exception(e));
+            }
+
+        inline
+        exception_ptr
+        current_exception_unknown_std_exception( std::exception const & e )
+            {
+            if( pdalboost::exception const * be = get_boost_exception(&e) )
+                return current_exception_unknown_boost_exception(*be);
+            else
+                return pdalboost::copy_exception(unknown_exception(e));
+            }
+
+        inline
+        exception_ptr
+        current_exception_impl()
+            {
+            exception_detail::clone_base const * e=0;
+            switch(
+            exception_detail::clone_current_exception(e) )
+                {
+                case exception_detail::clone_current_exception_result::
+                success:
+                    {
+                    BOOST_ASSERT(e!=0);
+                    return exception_ptr(shared_ptr<exception_detail::clone_base const>(e));
+                    }
+                case exception_detail::clone_current_exception_result::
+                bad_alloc:
+                    {
+                    BOOST_ASSERT(!e);
+                    return exception_detail::exception_ptr_static_exception_object<bad_alloc_>::e;
+                    }
+                case exception_detail::clone_current_exception_result::
+                bad_exception:
+                    {
+                    BOOST_ASSERT(!e);
+                    return exception_detail::exception_ptr_static_exception_object<bad_exception_>::e;
+                    }
+                default:
+                    BOOST_ASSERT(0);
+                case exception_detail::clone_current_exception_result::
+                not_supported:
+                    {
+                    BOOST_ASSERT(!e);
+                    try
+                        {
+                        throw;
+                        }
+                    catch(
+                    exception_detail::clone_base & e )
+                        {
+                        return exception_ptr(shared_ptr<exception_detail::clone_base const>(e.clone()));
+                        }
+                    catch(
+                    std::domain_error & e )
+                        {
+                        return exception_detail::current_exception_std_exception(e);
+                        }
+                    catch(
+                    std::invalid_argument & e )
+                        {
+                        return exception_detail::current_exception_std_exception(e);
+                        }
+                    catch(
+                    std::length_error & e )
+                        {
+                        return exception_detail::current_exception_std_exception(e);
+                        }
+                    catch(
+                    std::out_of_range & e )
+                        {
+                        return exception_detail::current_exception_std_exception(e);
+                        }
+                    catch(
+                    std::logic_error & e )
+                        {
+                        return exception_detail::current_exception_std_exception(e);
+                        }
+                    catch(
+                    std::range_error & e )
+                        {
+                        return exception_detail::current_exception_std_exception(e);
+                        }
+                    catch(
+                    std::overflow_error & e )
+                        {
+                        return exception_detail::current_exception_std_exception(e);
+                        }
+                    catch(
+                    std::underflow_error & e )
+                        {
+                        return exception_detail::current_exception_std_exception(e);
+                        }
+                    catch(
+                    std::ios_base::failure & e )
+                        {
+                        return exception_detail::current_exception_std_exception(e);
+                        }
+                    catch(
+                    std::runtime_error & e )
+                        {
+                        return exception_detail::current_exception_std_exception(e);
+                        }
+                    catch(
+                    std::bad_alloc & e )
+                        {
+                        return exception_detail::current_exception_std_exception(e);
+                        }
+#ifndef BOOST_NO_TYPEID
+                    catch(
+                    std::bad_cast & e )
+                        {
+                        return exception_detail::current_exception_std_exception(e);
+                        }
+                    catch(
+                    std::bad_typeid & e )
+                        {
+                        return exception_detail::current_exception_std_exception(e);
+                        }
+#endif
+                    catch(
+                    std::bad_exception & e )
+                        {
+                        return exception_detail::current_exception_std_exception(e);
+                        }
+                    catch(
+                    std::exception & e )
+                        {
+                        return exception_detail::current_exception_unknown_std_exception(e);
+                        }
+                    catch(
+                    pdalboost::exception & e )
+                        {
+                        return exception_detail::current_exception_unknown_boost_exception(e);
+                        }
+                    catch(
+                    ... )
+                        {
+                        return exception_detail::current_exception_unknown_exception();
+                        }
+                    }
+                }
+            }
+        }
+
+    inline
+    exception_ptr
+    current_exception()
+        {
+        exception_ptr ret;
+        try
+            {
+            ret=exception_detail::current_exception_impl();
+            }
+        catch(
+        std::bad_alloc & )
+            {
+            ret=exception_detail::exception_ptr_static_exception_object<exception_detail::bad_alloc_>::e;
+            }
+        catch(
+        ... )
+            {
+            ret=exception_detail::exception_ptr_static_exception_object<exception_detail::bad_exception_>::e;
+            }
+        BOOST_ASSERT(ret);
+        return ret;
+        }
+
+    BOOST_NORETURN
+    inline
+    void
+    rethrow_exception( exception_ptr const & p )
+        {
+        BOOST_ASSERT(p);
+        p.ptr_->rethrow();
+        BOOST_ASSERT(0);
+        #if defined(UNDER_CE)
+            // some CE platforms don't define ::abort()
+            exit(-1);
+        #else
+            abort();
+        #endif
+        }
+
+    inline
+    std::string
+    diagnostic_information( exception_ptr const & p, bool verbose=true )
+        {
+        if( p )
+            try
+                {
+                rethrow_exception(p);
+                }
+            catch(
+            ... )
+                {
+                return current_exception_diagnostic_information(verbose);
+                }
+        return "<empty>";
+        }
+
+    inline
+    std::string
+    to_string( exception_ptr const & p )
+        {
+        std::string s='\n'+diagnostic_information(p);
+        std::string padding("  ");
+        std::string r;
+        bool f=false;
+        for( std::string::const_iterator i=s.begin(),e=s.end(); i!=e; ++i )
+            {
+            if( f )
+                r+=padding;
+            char c=*i;
+            r+=c;
+            f=(c=='\n');
+            }
+        return r;
+        }
+    }
+
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/exception/detail/is_output_streamable.hpp b/vendor/pdalboost/boost/exception/detail/is_output_streamable.hpp
new file mode 100644
index 0000000..38aca8a
--- /dev/null
+++ b/vendor/pdalboost/boost/exception/detail/is_output_streamable.hpp
@@ -0,0 +1,60 @@
+//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_898984B4076411DD973EDFA055D89593
+#define UUID_898984B4076411DD973EDFA055D89593
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
+
+#include <ostream>
+
+namespace
+pdalboost
+    {
+    namespace
+    to_string_detail
+        {
+        struct
+        partial_ordering_helper1
+            {
+            template <class CharT,class Traits>
+            partial_ordering_helper1( std::basic_ostream<CharT,Traits> & );
+            };
+
+        struct
+        partial_ordering_helper2
+            {
+            template <class T>
+            partial_ordering_helper2( T const & );
+            };
+
+        char operator<<( partial_ordering_helper1, partial_ordering_helper2 );
+
+        template <class T,class CharT,class Traits>
+        struct
+        is_output_streamable_impl
+            {
+            static std::basic_ostream<CharT,Traits> & f();
+            static T const & g();
+            enum e { value=1!=(sizeof(f()<<g())) };
+            };
+        }
+
+    template <class T, class CharT=char, class Traits=std::char_traits<CharT> >
+    struct
+    is_output_streamable
+        {
+        enum e { value=to_string_detail::is_output_streamable_impl<T,CharT,Traits>::value };
+        };
+    }
+
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/exception/detail/object_hex_dump.hpp b/vendor/pdalboost/boost/exception/detail/object_hex_dump.hpp
new file mode 100644
index 0000000..42e1fc4
--- /dev/null
+++ b/vendor/pdalboost/boost/exception/detail/object_hex_dump.hpp
@@ -0,0 +1,50 @@
+//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_6F463AC838DF11DDA3E6909F56D89593
+#define UUID_6F463AC838DF11DDA3E6909F56D89593
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
+
+#include <boost/exception/detail/type_info.hpp>
+#include <iomanip>
+#include <ios>
+#include <string>
+#include <sstream>
+#include <cstdlib>
+
+namespace
+pdalboost
+    {
+    namespace
+    exception_detail
+        {
+        template <class T>
+        inline
+        std::string
+        object_hex_dump( T const & x, std::size_t max_size=16 )
+            {
+            std::ostringstream s;
+            s << "type: " << type_name<T>() << ", size: " << sizeof(T) << ", dump: ";
+            std::size_t n=sizeof(T)>max_size?max_size:sizeof(T);
+            s.fill('0');
+            s.width(2);
+            unsigned char const * b=reinterpret_cast<unsigned char const *>(&x);
+            s << std::setw(2) << std::hex << (unsigned int)*b;
+            for( unsigned char const * e=b+n; ++b!=e; )
+                s << " " << std::setw(2) << std::hex << (unsigned int)*b;
+            return s.str();
+            }
+        }
+    }
+
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/exception/detail/type_info.hpp b/vendor/pdalboost/boost/exception/detail/type_info.hpp
new file mode 100644
index 0000000..0ef3a31
--- /dev/null
+++ b/vendor/pdalboost/boost/exception/detail/type_info.hpp
@@ -0,0 +1,81 @@
+//Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_C3E1741C754311DDB2834CCA55D89593
+#define UUID_C3E1741C754311DDB2834CCA55D89593
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
+
+#include <boost/core/typeinfo.hpp>
+#include <boost/core/demangle.hpp>
+#include <boost/current_function.hpp>
+#include <boost/config.hpp>
+#include <string>
+
+namespace
+pdalboost
+    {
+    template <class T>
+    inline
+    std::string
+    tag_type_name()
+        {
+#ifdef BOOST_NO_TYPEID
+        return BOOST_CURRENT_FUNCTION;
+#else
+        return core::demangle(typeid(T*).name());
+#endif
+        }
+
+    template <class T>
+    inline
+    std::string
+    type_name()
+        {
+#ifdef BOOST_NO_TYPEID
+        return BOOST_CURRENT_FUNCTION;
+#else
+        return core::demangle(typeid(T).name());
+#endif
+        }
+
+    namespace
+    exception_detail
+        {
+        struct
+        type_info_
+            {
+            core::typeinfo const * type_;
+
+            explicit
+            type_info_( core::typeinfo const & type ):
+                type_(&type)
+                {
+                }
+
+            friend
+            bool
+            operator<( type_info_ const & a, type_info_ const & b )
+                {
+                return 0!=(a.type_->before(*b.type_));
+                }
+            };
+        }
+    }
+
+#define BOOST_EXCEPTION_STATIC_TYPEID(T) ::pdalboost::exception_detail::type_info_(BOOST_CORE_TYPEID(T))
+
+#ifndef BOOST_NO_RTTI
+#define BOOST_EXCEPTION_DYNAMIC_TYPEID(x) ::pdalboost::exception_detail::type_info_(typeid(x))
+#endif
+
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/exception/diagnostic_information.hpp b/vendor/pdalboost/boost/exception/diagnostic_information.hpp
new file mode 100644
index 0000000..842f7eb
--- /dev/null
+++ b/vendor/pdalboost/boost/exception/diagnostic_information.hpp
@@ -0,0 +1,201 @@
+//Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_0552D49838DD11DD90146B8956D89593
+#define UUID_0552D49838DD11DD90146B8956D89593
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
+
+#include <boost/config.hpp>
+#include <boost/exception/get_error_info.hpp>
+#include <boost/exception/info.hpp>
+#include <boost/utility/enable_if.hpp>
+#ifndef BOOST_NO_RTTI
+#include <boost/core/demangle.hpp>
+#endif
+#include <exception>
+#include <sstream>
+#include <string>
+
+#ifndef BOOST_NO_EXCEPTIONS
+#include <boost/exception/current_exception_cast.hpp>
+namespace
+pdalboost
+    {
+    namespace
+    exception_detail
+        {
+        std::string diagnostic_information_impl( pdalboost::exception const *, std::exception const *, bool, bool );
+        }
+
+    inline
+    std::string
+    current_exception_diagnostic_information( bool verbose=true)
+        {
+        pdalboost::exception const * be=current_exception_cast<pdalboost::exception const>();
+        std::exception const * se=current_exception_cast<std::exception const>();
+        if( be || se )
+            return exception_detail::diagnostic_information_impl(be,se,true,verbose);
+        else
+            return "No diagnostic information available.";
+        }
+    }
+#endif
+
+namespace
+pdalboost
+    {
+    namespace
+    exception_detail
+        {
+        inline
+        exception const *
+        get_boost_exception( exception const * e )
+            {
+            return e;
+            }
+
+        inline
+        exception const *
+        get_boost_exception( ... )
+            {
+            return 0;
+            }
+
+        inline
+        std::exception const *
+        get_std_exception( std::exception const * e )
+            {
+            return e;
+            }
+
+        inline
+        std::exception const *
+        get_std_exception( ... )
+            {
+            return 0;
+            }
+
+        inline
+        char const *
+        get_diagnostic_information( exception const & x, char const * header )
+            {
+#ifndef BOOST_NO_EXCEPTIONS
+            try
+                {
+#endif
+                error_info_container * c=x.data_.get();
+                if( !c )
+                    x.data_.adopt(c=new exception_detail::error_info_container_impl);
+                char const * di=c->diagnostic_information(header);
+                BOOST_ASSERT(di!=0);
+                return di;
+#ifndef BOOST_NO_EXCEPTIONS
+                }
+            catch(...)
+                {
+                return 0;
+                }
+#endif
+            }
+
+        inline
+        std::string
+        diagnostic_information_impl( pdalboost::exception const * be, std::exception const * se, bool with_what, bool verbose )
+            {
+            if( !be && !se )
+                return "Unknown exception.";
+#ifndef BOOST_NO_RTTI
+            if( !be )
+                be=dynamic_cast<pdalboost::exception const *>(se);
+            if( !se )
+                se=dynamic_cast<std::exception const *>(be);
+#endif
+            char const * wh=0;
+            if( with_what && se )
+                {
+                wh=se->what();
+                if( be && exception_detail::get_diagnostic_information(*be,0)==wh )
+                    return wh;
+                }
+            std::ostringstream tmp;
+            if( be && verbose )
+                {
+                char const * const * f=get_error_info<throw_file>(*be);
+                int const * l=get_error_info<throw_line>(*be);
+                char const * const * fn=get_error_info<throw_function>(*be);
+                if( !f && !l && !fn )
+                    tmp << "Throw location unknown (consider using BOOST_THROW_EXCEPTION)\n";
+                else
+                    {
+                    if( f )
+                        {
+                        tmp << *f;
+                        if( int const * l=get_error_info<throw_line>(*be) )
+                            tmp << '(' << *l << "): ";
+                        }
+                    tmp << "Throw in function ";
+                    if( char const * const * fn=get_error_info<throw_function>(*be) )
+                        tmp << *fn;
+                    else
+                        tmp << "(unknown)";
+                    tmp << '\n';
+                    }
+                }
+#ifndef BOOST_NO_RTTI
+            if ( verbose )
+                tmp << std::string("Dynamic exception type: ") <<
+                    core::demangle((be?(BOOST_EXCEPTION_DYNAMIC_TYPEID(*be)):(BOOST_EXCEPTION_DYNAMIC_TYPEID(*se))).type_->name()) << '\n';
+#endif
+            if( with_what && se && verbose )
+                tmp << "std::exception::what: " << wh << '\n';
+            if( be )
+                if( char const * s=exception_detail::get_diagnostic_information(*be,tmp.str().c_str()) )
+                    if( *s )
+                        return std::string(s);
+            return tmp.str();
+            }
+        }
+
+    template <class T>
+    std::string
+    diagnostic_information( T const & e, bool verbose=true )
+        {
+        return exception_detail::diagnostic_information_impl(exception_detail::get_boost_exception(&e),exception_detail::get_std_exception(&e),true,verbose);
+        }
+
+    inline
+    char const *
+    diagnostic_information_what( exception const & e, bool verbose=true ) throw()
+        {
+        char const * w=0;
+#ifndef BOOST_NO_EXCEPTIONS
+        try
+            {
+#endif
+            (void) exception_detail::diagnostic_information_impl(&e,0,false,verbose);
+            if( char const * di=exception_detail::get_diagnostic_information(e,0) )
+                return di;
+            else
+                return "Failed to produce pdalboost::diagnostic_information_what()";
+#ifndef BOOST_NO_EXCEPTIONS
+            }
+        catch(
+        ... )
+            {
+            }
+#endif
+        return w;
+        }
+    }
+
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/exception/exception.hpp b/vendor/pdalboost/boost/exception/exception.hpp
new file mode 100644
index 0000000..98d761a
--- /dev/null
+++ b/vendor/pdalboost/boost/exception/exception.hpp
@@ -0,0 +1,499 @@
+//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_274DA366004E11DCB1DDFE2E56D89593
+#define UUID_274DA366004E11DCB1DDFE2E56D89593
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
+
+namespace
+pdalboost
+    {
+    namespace
+    exception_detail
+        {
+        template <class T>
+        class
+        refcount_ptr
+            {
+            public:
+
+            refcount_ptr():
+                px_(0)
+                {
+                }
+
+            ~refcount_ptr()
+                {
+                release();
+                }
+
+            refcount_ptr( refcount_ptr const & x ):
+                px_(x.px_)
+                {
+                add_ref();
+                }
+
+            refcount_ptr &
+            operator=( refcount_ptr const & x )
+                {
+                adopt(x.px_);
+                return *this;
+                }
+
+            void
+            adopt( T * px )
+                {
+                release();
+                px_=px;
+                add_ref();
+                }
+
+            T *
+            get() const
+                {
+                return px_;
+                }
+
+            private:
+
+            T * px_;
+
+            void
+            add_ref()
+                {
+                if( px_ )
+                    px_->add_ref();
+                }
+
+            void
+            release()
+                {
+                if( px_ && px_->release() )
+                    px_=0;
+                }
+            };
+        }
+
+    ////////////////////////////////////////////////////////////////////////
+
+    template <class Tag,class T>
+    class error_info;
+
+    typedef error_info<struct throw_function_,char const *> throw_function;
+    typedef error_info<struct throw_file_,char const *> throw_file;
+    typedef error_info<struct throw_line_,int> throw_line;
+
+    template <>
+    class
+    error_info<throw_function_,char const *>
+        {
+        public:
+        typedef char const * value_type;
+        value_type v_;
+        explicit
+        error_info( value_type v ):
+            v_(v)
+            {
+            }
+        };
+
+    template <>
+    class
+    error_info<throw_file_,char const *>
+        {
+        public:
+        typedef char const * value_type;
+        value_type v_;
+        explicit
+        error_info( value_type v ):
+            v_(v)
+            {
+            }
+        };
+
+    template <>
+    class
+    error_info<throw_line_,int>
+        {
+        public:
+        typedef int value_type;
+        value_type v_;
+        explicit
+        error_info( value_type v ):
+            v_(v)
+            {
+            }
+        };
+
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility push (default)
+# endif
+#endif
+    class exception;
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility pop
+# endif
+#endif
+
+    template <class T>
+    class shared_ptr;
+
+    namespace
+    exception_detail
+        {
+        class error_info_base;
+        struct type_info_;
+
+        struct
+        error_info_container
+            {
+            virtual char const * diagnostic_information( char const * ) const = 0;
+            virtual shared_ptr<error_info_base> get( type_info_ const & ) const = 0;
+            virtual void set( shared_ptr<error_info_base> const &, type_info_ const & ) = 0;
+            virtual void add_ref() const = 0;
+            virtual bool release() const = 0;
+            virtual refcount_ptr<exception_detail::error_info_container> clone() const = 0;
+
+            protected:
+
+            ~error_info_container() throw()
+                {
+                }
+            };
+
+        template <class>
+        struct get_info;
+
+        template <>
+        struct get_info<throw_function>;
+
+        template <>
+        struct get_info<throw_file>;
+
+        template <>
+        struct get_info<throw_line>;
+
+        char const * get_diagnostic_information( exception const &, char const * );
+
+        void copy_boost_exception( exception *, exception const * );
+
+        template <class E,class Tag,class T>
+        E const & set_info( E const &, error_info<Tag,T> const & );
+
+        template <class E>
+        E const & set_info( E const &, throw_function const & );
+
+        template <class E>
+        E const & set_info( E const &, throw_file const & );
+
+        template <class E>
+        E const & set_info( E const &, throw_line const & );
+        }
+
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility push (default)
+# endif
+#endif
+    class
+    exception
+        {
+        //<N3757>
+        public:
+        template <class Tag> void set( typename Tag::type const & );
+        template <class Tag> typename Tag::type const * get() const;
+        //</N3757>
+
+        protected:
+
+        exception():
+            throw_function_(0),
+            throw_file_(0),
+            throw_line_(-1)
+            {
+            }
+
+#ifdef __HP_aCC
+        //On HP aCC, this protected copy constructor prevents throwing pdalboost::exception.
+        //On all other platforms, the same effect is achieved by the pure virtual destructor.
+        exception( exception const & x ) throw():
+            data_(x.data_),
+            throw_function_(x.throw_function_),
+            throw_file_(x.throw_file_),
+            throw_line_(x.throw_line_)
+            {
+            }
+#endif
+
+        virtual ~exception() throw()
+#ifndef __HP_aCC
+            = 0 //Workaround for HP aCC, =0 incorrectly leads to link errors.
+#endif
+            ;
+
+#if (defined(__MWERKS__) && __MWERKS__<=0x3207) || (defined(_MSC_VER) && _MSC_VER<=1310)
+        public:
+#else
+        private:
+
+        template <class E>
+        friend E const & exception_detail::set_info( E const &, throw_function const & );
+
+        template <class E>
+        friend E const & exception_detail::set_info( E const &, throw_file const & );
+
+        template <class E>
+        friend E const & exception_detail::set_info( E const &, throw_line const & );
+
+        template <class E,class Tag,class T>
+        friend E const & exception_detail::set_info( E const &, error_info<Tag,T> const & );
+
+        friend char const * exception_detail::get_diagnostic_information( exception const &, char const * );
+
+        template <class>
+        friend struct exception_detail::get_info;
+        friend struct exception_detail::get_info<throw_function>;
+        friend struct exception_detail::get_info<throw_file>;
+        friend struct exception_detail::get_info<throw_line>;
+        friend void exception_detail::copy_boost_exception( exception *, exception const * );
+#endif
+        mutable exception_detail::refcount_ptr<exception_detail::error_info_container> data_;
+        mutable char const * throw_function_;
+        mutable char const * throw_file_;
+        mutable int throw_line_;
+        };
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility pop
+# endif
+#endif
+
+    inline
+    exception::
+    ~exception() throw()
+        {
+        }
+
+    namespace
+    exception_detail
+        {
+        template <class E>
+        E const &
+        set_info( E const & x, throw_function const & y )
+            {
+            x.throw_function_=y.v_;
+            return x;
+            }
+
+        template <class E>
+        E const &
+        set_info( E const & x, throw_file const & y )
+            {
+            x.throw_file_=y.v_;
+            return x;
+            }
+
+        template <class E>
+        E const &
+        set_info( E const & x, throw_line const & y )
+            {
+            x.throw_line_=y.v_;
+            return x;
+            }
+        }
+
+    ////////////////////////////////////////////////////////////////////////
+
+    namespace
+    exception_detail
+        {
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility push (default)
+# endif
+#endif
+        template <class T>
+        struct
+        error_info_injector:
+            public T,
+            public exception
+            {
+            explicit
+            error_info_injector( T const & x ):
+                T(x)
+                {
+                }
+
+            ~error_info_injector() throw()
+                {
+                }
+            };
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility pop
+# endif
+#endif
+
+        struct large_size { char c[256]; };
+        large_size dispatch_boost_exception( exception const * );
+
+        struct small_size { };
+        small_size dispatch_boost_exception( void const * );
+
+        template <class,int>
+        struct enable_error_info_helper;
+
+        template <class T>
+        struct
+        enable_error_info_helper<T,sizeof(large_size)>
+            {
+            typedef T type;
+            };
+
+        template <class T>
+        struct
+        enable_error_info_helper<T,sizeof(small_size)>
+            {
+            typedef error_info_injector<T> type;
+            };
+
+        template <class T>
+        struct
+        enable_error_info_return_type
+            {
+            typedef typename enable_error_info_helper<T,sizeof(exception_detail::dispatch_boost_exception(static_cast<T *>(0)))>::type type;
+            };
+        }
+
+    template <class T>
+    inline
+    typename
+    exception_detail::enable_error_info_return_type<T>::type
+    enable_error_info( T const & x )
+        {
+        typedef typename exception_detail::enable_error_info_return_type<T>::type rt;
+        return rt(x);
+        }
+
+    ////////////////////////////////////////////////////////////////////////
+
+    namespace
+    exception_detail
+        {
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility push (default)
+# endif
+#endif
+        class
+        clone_base
+            {
+            public:
+
+            virtual clone_base const * clone() const = 0;
+            virtual void rethrow() const = 0;
+
+            virtual
+            ~clone_base() throw()
+                {
+                }
+            };
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility pop
+# endif
+#endif
+
+        inline
+        void
+        copy_boost_exception( exception * a, exception const * b )
+            {
+            refcount_ptr<error_info_container> data;
+            if( error_info_container * d=b->data_.get() )
+                data = d->clone();
+            a->throw_file_ = b->throw_file_;
+            a->throw_line_ = b->throw_line_;
+            a->throw_function_ = b->throw_function_;
+            a->data_ = data;
+            }
+
+        inline
+        void
+        copy_boost_exception( void *, void const * )
+            {
+            }
+
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility push (default)
+# endif
+#endif
+        template <class T>
+        class
+        clone_impl:
+            public T,
+            public virtual clone_base
+            {
+            struct clone_tag { };
+            clone_impl( clone_impl const & x, clone_tag ):
+                T(x)
+                {
+                copy_boost_exception(this,&x);
+                }
+
+            public:
+
+            explicit
+            clone_impl( T const & x ):
+                T(x)
+                {
+                copy_boost_exception(this,&x);
+                }
+
+            ~clone_impl() throw()
+                {
+                }
+
+            private:
+
+            clone_base const *
+            clone() const
+                {
+                return new clone_impl(*this,clone_tag());
+                }
+
+            void
+            rethrow() const
+                {
+                throw*this;
+                }
+            };
+        }
+#if defined(__GNUC__)
+# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
+#  pragma GCC visibility pop
+# endif
+#endif
+
+    template <class T>
+    inline
+    exception_detail::clone_impl<T>
+    enable_current_exception( T const & x )
+        {
+        return exception_detail::clone_impl<T>(x);
+        }
+    }
+
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/exception/get_error_info.hpp b/vendor/pdalboost/boost/exception/get_error_info.hpp
new file mode 100644
index 0000000..108ae7b
--- /dev/null
+++ b/vendor/pdalboost/boost/exception/get_error_info.hpp
@@ -0,0 +1,130 @@
+//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_1A590226753311DD9E4CCF6156D89593
+#define UUID_1A590226753311DD9E4CCF6156D89593
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
+
+#include <boost/exception/exception.hpp>
+#include <boost/exception/detail/error_info_impl.hpp>
+#include <boost/exception/detail/type_info.hpp>
+#include <boost/shared_ptr.hpp>
+
+namespace
+pdalboost
+    {
+    namespace
+    exception_detail
+        {
+        template <class ErrorInfo>
+        struct
+        get_info
+            {
+            static
+            typename ErrorInfo::value_type *
+            get( exception const & x )
+                {
+                if( exception_detail::error_info_container * c=x.data_.get() )
+                    if( shared_ptr<exception_detail::error_info_base> eib = c->get(BOOST_EXCEPTION_STATIC_TYPEID(ErrorInfo)) )
+                        {
+#ifndef BOOST_NO_RTTI
+                        BOOST_ASSERT( 0!=dynamic_cast<ErrorInfo *>(eib.get()) );
+#endif
+                        ErrorInfo * w = static_cast<ErrorInfo *>(eib.get());
+                        return &w->value();
+                        }
+                return 0;
+                }
+            };
+
+        template <>
+        struct
+        get_info<throw_function>
+            {
+            static
+            char const * *
+            get( exception const & x )
+                {
+                return x.throw_function_ ? &x.throw_function_ : 0;
+                }
+            };
+
+        template <>
+        struct
+        get_info<throw_file>
+            {
+            static
+            char const * *
+            get( exception const & x )
+                {
+                return x.throw_file_ ? &x.throw_file_ : 0;
+                }
+            };
+
+        template <>
+        struct
+        get_info<throw_line>
+            {
+            static
+            int *
+            get( exception const & x )
+                {
+                return x.throw_line_!=-1 ? &x.throw_line_ : 0;
+                }
+            };
+
+        template <class T,class R>
+        struct
+        get_error_info_return_type
+            {
+            typedef R * type;
+            };
+
+        template <class T,class R>
+        struct
+        get_error_info_return_type<T const,R>
+            {
+            typedef R const * type;
+            };
+        }
+
+#ifdef BOOST_NO_RTTI
+    template <class ErrorInfo>
+    inline
+    typename ErrorInfo::value_type const *
+    get_error_info( pdalboost::exception const & x )
+        {
+        return exception_detail::get_info<ErrorInfo>::get(x);
+        }
+    template <class ErrorInfo>
+    inline
+    typename ErrorInfo::value_type *
+    get_error_info( pdalboost::exception & x )
+        {
+        return exception_detail::get_info<ErrorInfo>::get(x);
+        }
+#else
+    template <class ErrorInfo,class E>
+    inline
+    typename exception_detail::get_error_info_return_type<E,typename ErrorInfo::value_type>::type
+    get_error_info( E & some_exception )
+        {
+        if( exception const * x = dynamic_cast<exception const *>(&some_exception) )
+            return exception_detail::get_info<ErrorInfo>::get(*x);
+        else
+            return 0;
+        }
+#endif
+    }
+
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/exception/info.hpp b/vendor/pdalboost/boost/exception/info.hpp
new file mode 100644
index 0000000..b6d939f
--- /dev/null
+++ b/vendor/pdalboost/boost/exception/info.hpp
@@ -0,0 +1,198 @@
+//Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_8D22C4CA9CC811DCAA9133D256D89593
+#define UUID_8D22C4CA9CC811DCAA9133D256D89593
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
+
+#include <boost/exception/exception.hpp>
+#include <boost/exception/to_string_stub.hpp>
+#include <boost/exception/detail/error_info_impl.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/config.hpp>
+#include <map>
+
+namespace
+pdalboost
+    {
+    template <class Tag,class T>
+    inline
+    std::string
+    error_info_name( error_info<Tag,T> const & x )
+        {
+        return tag_type_name<Tag>();
+        }
+
+    template <class Tag,class T>
+    inline
+    std::string
+    to_string( error_info<Tag,T> const & x )
+        {
+        return '[' + error_info_name(x) + "] = " + to_string_stub(x.value()) + '\n';
+        }
+
+    template <class Tag,class T>
+    inline
+    error_info<Tag,T>::
+    error_info( value_type const & value ):
+        value_(value)
+        {
+        }
+
+    template <class Tag,class T>
+    inline
+    error_info<Tag,T>::
+    ~error_info() throw()
+        {
+        }
+
+    template <class Tag,class T>
+    inline
+    std::string
+    error_info<Tag,T>::
+    name_value_string() const
+        {
+        return to_string_stub(*this);
+        }
+
+    namespace
+    exception_detail
+        {
+        class
+        error_info_container_impl:
+            public error_info_container
+            {
+            public:
+
+            error_info_container_impl():
+                count_(0)
+                {
+                }
+
+            ~error_info_container_impl() throw()
+                {
+                }
+
+            void
+            set( shared_ptr<error_info_base> const & x, type_info_ const & typeid_ )
+                {
+                BOOST_ASSERT(x);
+                info_[typeid_] = x;
+                diagnostic_info_str_.clear();
+                }
+
+            shared_ptr<error_info_base>
+            get( type_info_ const & ti ) const
+                {
+                error_info_map::const_iterator i=info_.find(ti);
+                if( info_.end()!=i )
+                    {
+                    shared_ptr<error_info_base> const & p = i->second;
+#ifndef BOOST_NO_RTTI
+                    BOOST_ASSERT( *BOOST_EXCEPTION_DYNAMIC_TYPEID(*p).type_==*ti.type_ );
+#endif
+                    return p;
+                    }
+                return shared_ptr<error_info_base>();
+                }
+
+            char const *
+            diagnostic_information( char const * header ) const
+                {
+                if( header )
+                    {
+                    std::ostringstream tmp;
+                    tmp << header;
+                    for( error_info_map::const_iterator i=info_.begin(),end=info_.end(); i!=end; ++i )
+                        {
+                        error_info_base const & x = *i->second;
+                        tmp << x.name_value_string();
+                        }
+                    tmp.str().swap(diagnostic_info_str_);
+                    }
+                return diagnostic_info_str_.c_str();
+                }
+
+            private:
+
+            friend class pdalboost::exception;
+
+            typedef std::map< type_info_, shared_ptr<error_info_base> > error_info_map;
+            error_info_map info_;
+            mutable std::string diagnostic_info_str_;
+            mutable int count_;
+
+            error_info_container_impl( error_info_container_impl const & );
+            error_info_container_impl & operator=( error_info_container const & );
+
+            void
+            add_ref() const
+                {
+                ++count_;
+                }
+
+            bool
+            release() const
+                {
+                if( --count_ )
+                    return false;
+                else
+                    {
+                    delete this;
+                    return true;
+                    }
+                }
+
+            refcount_ptr<error_info_container>
+            clone() const
+                {
+                refcount_ptr<error_info_container> p;
+                error_info_container_impl * c=new error_info_container_impl;
+                p.adopt(c);
+                c->info_ = info_;
+                return p;
+                }
+            };
+
+        template <class E,class Tag,class T>
+        inline
+        E const &
+        set_info( E const & x, error_info<Tag,T> const & v )
+            {
+            typedef error_info<Tag,T> error_info_tag_t;
+            shared_ptr<error_info_tag_t> p( new error_info_tag_t(v) );
+            exception_detail::error_info_container * c=x.data_.get();
+            if( !c )
+                x.data_.adopt(c=new exception_detail::error_info_container_impl);
+            c->set(p,BOOST_EXCEPTION_STATIC_TYPEID(error_info_tag_t));
+            return x;
+            }
+
+        template <class T>
+        struct
+        derives_boost_exception
+            {
+            enum e { value = (sizeof(dispatch_boost_exception((T*)0))==sizeof(large_size)) };
+            };
+        }
+
+    template <class E,class Tag,class T>
+    inline
+    typename enable_if<exception_detail::derives_boost_exception<E>,E const &>::type
+    operator<<( E const & x, error_info<Tag,T> const & v )
+        {
+        return exception_detail::set_info(x,v);
+        }
+    }
+
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/exception/to_string.hpp b/vendor/pdalboost/boost/exception/to_string.hpp
new file mode 100644
index 0000000..9efa85d
--- /dev/null
+++ b/vendor/pdalboost/boost/exception/to_string.hpp
@@ -0,0 +1,88 @@
+//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_7E48761AD92811DC9011477D56D89593
+#define UUID_7E48761AD92811DC9011477D56D89593
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/exception/detail/is_output_streamable.hpp>
+#include <sstream>
+
+namespace
+pdalboost
+    {
+    template <class T,class U>
+    std::string to_string( std::pair<T,U> const & );
+    std::string to_string( std::exception const & );
+
+    namespace
+    to_string_detail
+        {
+        template <class T>
+        typename disable_if<is_output_streamable<T>,char>::type to_string( T const & );
+        using pdalboost::to_string;
+
+        template <class,bool IsOutputStreamable>
+        struct has_to_string_impl;
+
+        template <class T>
+        struct
+        has_to_string_impl<T,true>
+            {
+            enum e { value=1 };
+            };
+
+        template <class T>
+        struct
+        has_to_string_impl<T,false>
+            {
+            static T const & f();
+            enum e { value=1!=sizeof(to_string(f())) };
+            };
+        }
+
+    template <class T>
+    inline
+    typename enable_if<is_output_streamable<T>,std::string>::type
+    to_string( T const & x )
+        {
+        std::ostringstream out;
+        out << x;
+        return out.str();
+        }
+
+    template <class T>
+    struct
+    has_to_string
+        {
+        enum e { value=to_string_detail::has_to_string_impl<T,is_output_streamable<T>::value>::value };
+        };
+
+    template <class T,class U>
+    inline
+    std::string
+    to_string( std::pair<T,U> const & x )
+        {
+        return std::string("(") + to_string(x.first) + ',' + to_string(x.second) + ')';
+        }
+
+    inline
+    std::string
+    to_string( std::exception const & x )
+        {
+        return x.what();
+        }
+    }
+
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/exception/to_string_stub.hpp b/vendor/pdalboost/boost/exception/to_string_stub.hpp
new file mode 100644
index 0000000..c3e5a68
--- /dev/null
+++ b/vendor/pdalboost/boost/exception/to_string_stub.hpp
@@ -0,0 +1,117 @@
+//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_E788439ED9F011DCB181F25B55D89593
+#define UUID_E788439ED9F011DCB181F25B55D89593
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
+
+#include <boost/exception/to_string.hpp>
+#include <boost/exception/detail/object_hex_dump.hpp>
+#include <boost/assert.hpp>
+
+namespace
+pdalboost
+    {
+    namespace
+    exception_detail
+        {
+        template <bool ToStringAvailable>
+        struct
+        to_string_dispatcher
+            {
+            template <class T,class Stub>
+            static
+            std::string
+            convert( T const & x, Stub )
+                {
+                return to_string(x);
+                }
+            };
+
+        template <>
+        struct
+        to_string_dispatcher<false>
+            {
+            template <class T,class Stub>
+            static
+            std::string
+            convert( T const & x, Stub s )
+                {
+                return s(x);
+                }
+
+            template <class T>
+            static
+            std::string
+            convert( T const & x, std::string s )
+                {
+                return s;
+                }
+
+            template <class T>
+            static
+            std::string
+            convert( T const & x, char const * s )
+                {
+                BOOST_ASSERT(s!=0);
+                return s;
+                }
+            };
+
+        namespace
+        to_string_dispatch
+            {
+            template <class T,class Stub>
+            inline
+            std::string
+            dispatch( T const & x, Stub s )
+                {
+                return to_string_dispatcher<has_to_string<T>::value>::convert(x,s);
+                }
+            }
+
+        template <class T>
+        inline
+        std::string
+        string_stub_dump( T const & x )
+            {
+            return "[ " + exception_detail::object_hex_dump(x) + " ]";
+            }
+        }
+
+    template <class T>
+    inline
+    std::string
+    to_string_stub( T const & x )
+        {
+        return exception_detail::to_string_dispatch::dispatch(x,&exception_detail::string_stub_dump<T>);
+        }
+
+    template <class T,class Stub>
+    inline
+    std::string
+    to_string_stub( T const & x, Stub s )
+        {
+        return exception_detail::to_string_dispatch::dispatch(x,s);
+        }
+
+    template <class T,class U,class Stub>
+    inline
+    std::string
+    to_string_stub( std::pair<T,U> const & x, Stub s )
+        {
+        return std::string("(") + to_string_stub(x.first,s) + ',' + to_string_stub(x.second,s) + ')';
+        }
+    }
+
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/exception_ptr.hpp b/vendor/pdalboost/boost/exception_ptr.hpp
new file mode 100644
index 0000000..d48cce9
--- /dev/null
+++ b/vendor/pdalboost/boost/exception_ptr.hpp
@@ -0,0 +1,11 @@
+//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef UUID_FA5836A2CADA11DC8CD47C8555D89593
+#define UUID_FA5836A2CADA11DC8CD47C8555D89593
+
+#include <boost/exception/detail/exception_ptr.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/filesystem.hpp b/vendor/pdalboost/boost/filesystem.hpp
new file mode 100644
index 0000000..0122634
--- /dev/null
+++ b/vendor/pdalboost/boost/filesystem.hpp
@@ -0,0 +1,21 @@
+//  boost/filesystem.hpp  --------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2010
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------// 
+
+#ifndef BOOST_FILESYSTEM_FILESYSTEM_HPP
+#define BOOST_FILESYSTEM_FILESYSTEM_HPP
+
+#  include <boost/filesystem/config.hpp>
+#  include <boost/filesystem/path.hpp>
+#  include <boost/filesystem/operations.hpp>
+#  include <boost/filesystem/convenience.hpp>
+#  include <boost/filesystem/string_file.hpp>
+
+#endif  // BOOST_FILESYSTEM_FILESYSTEM_HPP 
diff --git a/vendor/pdalboost/boost/filesystem/config.hpp b/vendor/pdalboost/boost/filesystem/config.hpp
new file mode 100644
index 0000000..6dcb97b
--- /dev/null
+++ b/vendor/pdalboost/boost/filesystem/config.hpp
@@ -0,0 +1,110 @@
+//  boost/filesystem/v3/config.hpp  ----------------------------------------------------//
+
+//  Copyright Beman Dawes 2003
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------// 
+
+#ifndef BOOST_FILESYSTEM3_CONFIG_HPP
+#define BOOST_FILESYSTEM3_CONFIG_HPP
+
+# if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION != 3
+#   error Compiling Filesystem version 3 file with BOOST_FILESYSTEM_VERSION defined != 3
+# endif
+
+# if !defined(BOOST_FILESYSTEM_VERSION)
+#   define BOOST_FILESYSTEM_VERSION 3
+# endif
+
+#define BOOST_FILESYSTEM_I18N  // aid users wishing to compile several versions
+
+// This header implements separate compilation features as described in
+// http://www.boost.org/more/separate_compilation.html
+
+#include <boost/config.hpp>
+#include <boost/system/api_config.hpp>  // for BOOST_POSIX_API or BOOST_WINDOWS_API
+#include <boost/detail/workaround.hpp>
+
+//  BOOST_FILESYSTEM_DEPRECATED needed for source compiles -----------------------------//
+
+# ifdef BOOST_FILESYSTEM_SOURCE
+#   define BOOST_FILESYSTEM_DEPRECATED
+#   undef BOOST_FILESYSTEM_NO_DEPRECATED   // fixes #9454, src bld fails if NO_DEP defined
+# endif
+
+//  throw an exception  ----------------------------------------------------------------//
+//
+//  Exceptions were originally thrown via pdalboost::throw_exception().
+//  As throw_exception() became more complex, it caused user error reporting
+//  to be harder to interpret, since the exception reported became much more complex.
+//  The immediate fix was to throw directly, wrapped in a macro to make any later change
+//  easier.
+
+#define BOOST_FILESYSTEM_THROW(EX) throw EX
+
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+//  This header implements separate compilation features as described in
+//  http://www.boost.org/more/separate_compilation.html
+
+//  normalize macros  ------------------------------------------------------------------//
+
+#if !defined(BOOST_FILESYSTEM_DYN_LINK) && !defined(BOOST_FILESYSTEM_STATIC_LINK) \
+  && !defined(BOOST_ALL_DYN_LINK) && !defined(BOOST_ALL_STATIC_LINK)
+# define BOOST_FILESYSTEM_STATIC_LINK
+#endif
+
+#if defined(BOOST_ALL_DYN_LINK) && !defined(BOOST_FILESYSTEM_DYN_LINK)
+# define BOOST_FILESYSTEM_DYN_LINK 
+#elif defined(BOOST_ALL_STATIC_LINK) && !defined(BOOST_FILESYSTEM_STATIC_LINK)
+# define BOOST_FILESYSTEM_STATIC_LINK 
+#endif
+
+#if defined(BOOST_FILESYSTEM_DYN_LINK) && defined(BOOST_FILESYSTEM_STATIC_LINK)
+# error Must not define both BOOST_FILESYSTEM_DYN_LINK and BOOST_FILESYSTEM_STATIC_LINK
+#endif
+
+#if defined(BOOST_ALL_NO_LIB) && !defined(BOOST_FILESYSTEM_NO_LIB)
+# define BOOST_FILESYSTEM_NO_LIB 
+#endif
+
+//  enable dynamic linking  ------------------------------------------------------------//
+
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK)
+# if defined(BOOST_FILESYSTEM_SOURCE)
+#   define BOOST_FILESYSTEM_DECL BOOST_SYMBOL_EXPORT
+# else 
+#   define BOOST_FILESYSTEM_DECL BOOST_SYMBOL_IMPORT
+# endif
+#else
+# define BOOST_FILESYSTEM_DECL
+#endif
+
+//  enable automatic library variant selection  ----------------------------------------// 
+
+#if !defined(BOOST_FILESYSTEM_SOURCE) && !defined(BOOST_ALL_NO_LIB) \
+  && !defined(BOOST_FILESYSTEM_NO_LIB)
+//
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#define BOOST_LIB_NAME pdalboost_filesystem
+//
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+//
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_FILESYSTEM_DYN_LINK)
+#  define BOOST_DYN_LINK
+#endif
+//
+// And include the header that does the work:
+//
+#include <boost/config/auto_link.hpp>
+#endif  // auto-linking disabled
+
+#endif // BOOST_FILESYSTEM3_CONFIG_HPP
diff --git a/vendor/pdalboost/boost/filesystem/convenience.hpp b/vendor/pdalboost/boost/filesystem/convenience.hpp
new file mode 100644
index 0000000..7232534
--- /dev/null
+++ b/vendor/pdalboost/boost/filesystem/convenience.hpp
@@ -0,0 +1,58 @@
+//  boost/filesystem/convenience.hpp  ----------------------------------------//
+
+//  Copyright Beman Dawes, 2002-2005
+//  Copyright Vladimir Prus, 2002
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/filesystem
+
+//----------------------------------------------------------------------------// 
+
+#ifndef BOOST_FILESYSTEM3_CONVENIENCE_HPP
+#define BOOST_FILESYSTEM3_CONVENIENCE_HPP
+
+#include <boost/config.hpp>
+
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/filesystem/operations.hpp>
+#include <boost/system/error_code.hpp>
+
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+
+namespace pdalboost
+{
+  namespace filesystem
+  {
+
+# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+
+    inline std::string extension(const path & p)
+    {
+      return p.extension().string();
+    }
+
+    inline std::string basename(const path & p)
+    {
+      return p.stem().string();
+    }
+
+    inline path change_extension( const path & p, const path & new_extension )
+    { 
+      path new_p( p );
+      new_p.replace_extension( new_extension );
+      return new_p;
+    }
+
+# endif
+
+
+  } // namespace filesystem
+} // namespace pdalboost
+
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
+#endif // BOOST_FILESYSTEM3_CONVENIENCE_HPP
diff --git a/vendor/pdalboost/boost/filesystem/detail/utf8_codecvt_facet.hpp b/vendor/pdalboost/boost/filesystem/detail/utf8_codecvt_facet.hpp
new file mode 100644
index 0000000..f8db0f5
--- /dev/null
+++ b/vendor/pdalboost/boost/filesystem/detail/utf8_codecvt_facet.hpp
@@ -0,0 +1,24 @@
+// Copyright (c) 2001 Ronald Garcia, Indiana University (garcia at osl.iu.edu)
+// Andrew Lumsdaine, Indiana University (lums at osl.iu.edu).
+
+// Distributed under the Boost Software License, Version 1.0.
+// (See http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_FILESYSTEM_UTF8_CODECVT_FACET_HPP
+#define BOOST_FILESYSTEM_UTF8_CODECVT_FACET_HPP
+
+#include <boost/filesystem/config.hpp>
+
+#define BOOST_UTF8_BEGIN_NAMESPACE \
+     namespace pdalboost { namespace filesystem { namespace detail {
+
+#define BOOST_UTF8_END_NAMESPACE }}}
+#define BOOST_UTF8_DECL BOOST_FILESYSTEM_DECL
+
+#include <boost/detail/utf8_codecvt_facet.hpp>
+
+#undef BOOST_UTF8_BEGIN_NAMESPACE
+#undef BOOST_UTF8_END_NAMESPACE
+#undef BOOST_UTF8_DECL
+
+#endif
diff --git a/vendor/pdalboost/boost/filesystem/exception.hpp b/vendor/pdalboost/boost/filesystem/exception.hpp
new file mode 100644
index 0000000..985cd8f
--- /dev/null
+++ b/vendor/pdalboost/boost/filesystem/exception.hpp
@@ -0,0 +1,9 @@
+//  boost/filesystem/exception.hpp  -----------------------------------------------------//
+
+//  Copyright Beman Dawes 2003
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  This header is no longer used. The contents have been moved to path.hpp.
+//  It is provided so that user code #includes do not have to be changed.
diff --git a/vendor/pdalboost/boost/filesystem/fstream.hpp b/vendor/pdalboost/boost/filesystem/fstream.hpp
new file mode 100644
index 0000000..806298a
--- /dev/null
+++ b/vendor/pdalboost/boost/filesystem/fstream.hpp
@@ -0,0 +1,182 @@
+//  boost/filesystem/fstream.hpp  ------------------------------------------------------//
+
+//  Copyright Beman Dawes 2002
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------// 
+
+#ifndef BOOST_FILESYSTEM3_FSTREAM_HPP
+#define BOOST_FILESYSTEM3_FSTREAM_HPP
+
+#include <boost/config.hpp>
+
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/filesystem/path.hpp>
+#include <iosfwd>
+#include <fstream>
+
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+
+//  on Windows, except for standard libaries known to have wchar_t overloads for
+//  file stream I/O, use path::string() to get a narrow character c_str()
+#if defined(BOOST_WINDOWS_API) \
+  && (!defined(_CPPLIB_VER) || _CPPLIB_VER < 405 || defined(_STLPORT_VERSION))
+  // !Dinkumware || early Dinkumware || STLPort masquerading as Dinkumware
+# define BOOST_FILESYSTEM_C_STR string().c_str()  // use narrow, since wide not available
+#else  // use the native c_str, which will be narrow on POSIX, wide on Windows
+# define BOOST_FILESYSTEM_C_STR c_str()
+#endif
+
+namespace pdalboost
+{
+namespace filesystem
+{
+
+//--------------------------------------------------------------------------------------//
+//                                  basic_filebuf                                       //
+//--------------------------------------------------------------------------------------//
+
+  template < class charT, class traits = std::char_traits<charT> >
+  class basic_filebuf : public std::basic_filebuf<charT,traits>
+  {
+  private: // disallow copying
+    basic_filebuf(const basic_filebuf&);
+    const basic_filebuf& operator=(const basic_filebuf&);
+
+  public:
+    basic_filebuf() {}
+    virtual ~basic_filebuf() {}
+
+    basic_filebuf<charT,traits>*
+      open(const path& p, std::ios_base::openmode mode) 
+    {
+      return std::basic_filebuf<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, mode)
+        ? this : 0;
+    }
+  };
+
+//--------------------------------------------------------------------------------------//
+//                                 basic_ifstream                                       //
+//--------------------------------------------------------------------------------------//
+
+  template < class charT, class traits = std::char_traits<charT> >
+  class basic_ifstream : public std::basic_ifstream<charT,traits>
+  {
+  private: // disallow copying
+    basic_ifstream(const basic_ifstream&);
+    const basic_ifstream& operator=(const basic_ifstream&);
+
+  public:
+    basic_ifstream() {}
+
+    // use two signatures, rather than one signature with default second
+    // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416)
+
+    explicit basic_ifstream(const path& p)
+      : std::basic_ifstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR, std::ios_base::in) {}
+
+    basic_ifstream(const path& p, std::ios_base::openmode mode)
+      : std::basic_ifstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR, mode) {}
+
+    void open(const path& p)
+      { std::basic_ifstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, std::ios_base::in); }
+
+    void open(const path& p, std::ios_base::openmode mode)
+      { std::basic_ifstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, mode); }
+
+    virtual ~basic_ifstream() {}
+  };
+
+//--------------------------------------------------------------------------------------//
+//                                 basic_ofstream                                       //
+//--------------------------------------------------------------------------------------//
+
+  template < class charT, class traits = std::char_traits<charT> >
+  class basic_ofstream : public std::basic_ofstream<charT,traits>
+  {
+  private: // disallow copying
+    basic_ofstream(const basic_ofstream&);
+    const basic_ofstream& operator=(const basic_ofstream&);
+
+  public:
+    basic_ofstream() {}
+
+    // use two signatures, rather than one signature with default second
+    // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416)
+
+    explicit basic_ofstream(const path& p)
+      : std::basic_ofstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR, std::ios_base::out) {}
+
+    basic_ofstream(const path& p, std::ios_base::openmode mode)
+      : std::basic_ofstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR, mode) {}
+
+    void open(const path& p)
+      { std::basic_ofstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, std::ios_base::out); }
+
+    void open(const path& p, std::ios_base::openmode mode)
+      { std::basic_ofstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, mode); }
+
+    virtual ~basic_ofstream() {}
+  };
+
+//--------------------------------------------------------------------------------------//
+//                                  basic_fstream                                       //
+//--------------------------------------------------------------------------------------//
+
+  template < class charT, class traits = std::char_traits<charT> >
+  class basic_fstream : public std::basic_fstream<charT,traits>
+  {
+  private: // disallow copying
+    basic_fstream(const basic_fstream&);
+    const basic_fstream & operator=(const basic_fstream&);
+
+  public:
+    basic_fstream() {}
+
+    // use two signatures, rather than one signature with default second
+    // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416)
+
+    explicit basic_fstream(const path& p)
+      : std::basic_fstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR,
+          std::ios_base::in | std::ios_base::out) {}
+
+    basic_fstream(const path& p, std::ios_base::openmode mode)
+      : std::basic_fstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR, mode) {}
+
+    void open(const path& p)
+      { std::basic_fstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR,
+          std::ios_base::in | std::ios_base::out); }
+
+    void open(const path& p, std::ios_base::openmode mode)
+      { std::basic_fstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, mode); }
+
+    virtual ~basic_fstream() {}
+
+  };
+
+//--------------------------------------------------------------------------------------//
+//                                    typedefs                                          //
+//--------------------------------------------------------------------------------------//
+
+  typedef basic_filebuf<char> filebuf;
+  typedef basic_ifstream<char> ifstream;
+  typedef basic_ofstream<char> ofstream;
+  typedef basic_fstream<char> fstream;
+
+  typedef basic_filebuf<wchar_t> wfilebuf;
+  typedef basic_ifstream<wchar_t> wifstream;
+  typedef basic_ofstream<wchar_t> wofstream;
+  typedef basic_fstream<wchar_t> wfstream;
+  
+} // namespace filesystem
+} // namespace pdalboost
+
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
+#endif  // BOOST_FILESYSTEM3_FSTREAM_HPP
diff --git a/vendor/pdalboost/boost/filesystem/operations.hpp b/vendor/pdalboost/boost/filesystem/operations.hpp
new file mode 100644
index 0000000..b357aa2
--- /dev/null
+++ b/vendor/pdalboost/boost/filesystem/operations.hpp
@@ -0,0 +1,1346 @@
+//  boost/filesystem/operations.hpp  ---------------------------------------------------//
+
+//  Copyright Beman Dawes 2002-2009
+//  Copyright Jan Langer 2002
+//  Copyright Dietmar Kuehl 2001                                        
+//  Copyright Vladimir Prus 2002
+   
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+#ifndef BOOST_FILESYSTEM3_OPERATIONS_HPP
+#define BOOST_FILESYSTEM3_OPERATIONS_HPP
+
+#include <boost/config.hpp>
+
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/path.hpp>
+
+#include <boost/detail/scoped_enum_emulation.hpp>
+#include <boost/detail/bitmask.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/system/system_error.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/range/mutable_iterator.hpp>
+#include <boost/range/const_iterator.hpp>
+#include <boost/assert.hpp>
+#include <string>
+#include <utility> // for pair
+#include <ctime>
+#include <vector>
+#include <stack>
+
+#ifdef BOOST_WINDOWS_API
+#  include <fstream>
+#endif
+
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+
+//--------------------------------------------------------------------------------------//
+
+namespace pdalboost
+{
+  namespace filesystem
+  {
+
+    //--------------------------------------------------------------------------------------//
+    //                                                                                      //
+    //                            class filesystem_error                                    //
+    //                                                                                      //
+    //--------------------------------------------------------------------------------------//
+
+    class BOOST_SYMBOL_VISIBLE filesystem_error : public system::system_error
+    {
+      // see http://www.boost.org/more/error_handling.html for design rationale
+
+      // all functions are inline to avoid issues with crossing dll boundaries
+
+      // functions previously throw() are now BOOST_NOEXCEPT_OR_NOTHROW
+      // functions previously without throw() are now BOOST_NOEXCEPT
+
+    public:
+      // compiler generates copy constructor and copy assignment
+
+      filesystem_error(
+        const std::string & what_arg, system::error_code ec) BOOST_NOEXCEPT
+        : system::system_error(ec, what_arg)
+      {
+        try
+        {
+          m_imp_ptr.reset(new m_imp);
+        }
+        catch (...) { m_imp_ptr.reset(); }
+      }
+
+      filesystem_error(
+        const std::string & what_arg, const path& path1_arg,
+        system::error_code ec) BOOST_NOEXCEPT
+        : system::system_error(ec, what_arg)
+      {
+        try
+        {
+          m_imp_ptr.reset(new m_imp);
+          m_imp_ptr->m_path1 = path1_arg;
+        }
+        catch (...) { m_imp_ptr.reset(); }
+      }
+
+      filesystem_error(
+        const std::string & what_arg, const path& path1_arg,
+        const path& path2_arg, system::error_code ec) BOOST_NOEXCEPT
+        : system::system_error(ec, what_arg)
+      {
+        try
+        {
+          m_imp_ptr.reset(new m_imp);
+          m_imp_ptr->m_path1 = path1_arg;
+          m_imp_ptr->m_path2 = path2_arg;
+        }
+        catch (...) { m_imp_ptr.reset(); }
+      }
+
+      ~filesystem_error() BOOST_NOEXCEPT_OR_NOTHROW{}
+
+        const path& path1() const BOOST_NOEXCEPT
+      {
+        static const path empty_path;
+        return m_imp_ptr.get() ? m_imp_ptr->m_path1 : empty_path;
+      }
+        const path& path2() const  BOOST_NOEXCEPT
+      {
+        static const path empty_path;
+        return m_imp_ptr.get() ? m_imp_ptr->m_path2 : empty_path;
+      }
+
+        const char* what() const BOOST_NOEXCEPT_OR_NOTHROW
+      {
+        if (!m_imp_ptr.get())
+        return system::system_error::what();
+
+        try
+        {
+          if (m_imp_ptr->m_what.empty())
+          {
+            m_imp_ptr->m_what = system::system_error::what();
+            if (!m_imp_ptr->m_path1.empty())
+            {
+              m_imp_ptr->m_what += ": \"";
+              m_imp_ptr->m_what += m_imp_ptr->m_path1.string();
+              m_imp_ptr->m_what += "\"";
+            }
+            if (!m_imp_ptr->m_path2.empty())
+            {
+              m_imp_ptr->m_what += ", \"";
+              m_imp_ptr->m_what += m_imp_ptr->m_path2.string();
+              m_imp_ptr->m_what += "\"";
+            }
+          }
+          return m_imp_ptr->m_what.c_str();
+        }
+        catch (...)
+        {
+          return system::system_error::what();
+        }
+      }
+
+    private:
+      struct m_imp
+      {
+        path         m_path1; // may be empty()
+        path         m_path2; // may be empty()
+        std::string  m_what;  // not built until needed
+      };
+      pdalboost::shared_ptr<m_imp> m_imp_ptr;
+    };
+
+//--------------------------------------------------------------------------------------//
+//                                     file_type                                        //
+//--------------------------------------------------------------------------------------//
+
+  enum file_type
+  { 
+    status_error,
+#   ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+    status_unknown = status_error,
+#   endif
+    file_not_found,
+    regular_file,
+    directory_file,
+    // the following may not apply to some operating systems or file systems
+    symlink_file,
+    block_file,
+    character_file,
+    fifo_file,
+    socket_file,
+    reparse_file,  // Windows: FILE_ATTRIBUTE_REPARSE_POINT that is not a symlink
+    type_unknown,  // file does exist, but isn't one of the above types or
+                   // we don't have strong enough permission to find its type
+
+    _detail_directory_symlink  // internal use only; never exposed to users
+  };
+
+//--------------------------------------------------------------------------------------//
+//                                       perms                                          //
+//--------------------------------------------------------------------------------------//
+
+  enum perms
+  {
+    no_perms = 0,       // file_not_found is no_perms rather than perms_not_known
+
+    // POSIX equivalent macros given in comments.
+    // Values are from POSIX and are given in octal per the POSIX standard.
+
+    // permission bits
+    
+    owner_read = 0400,  // S_IRUSR, Read permission, owner
+    owner_write = 0200, // S_IWUSR, Write permission, owner
+    owner_exe = 0100,   // S_IXUSR, Execute/search permission, owner
+    owner_all = 0700,   // S_IRWXU, Read, write, execute/search by owner
+
+    group_read = 040,   // S_IRGRP, Read permission, group
+    group_write = 020,  // S_IWGRP, Write permission, group
+    group_exe = 010,    // S_IXGRP, Execute/search permission, group
+    group_all = 070,    // S_IRWXG, Read, write, execute/search by group
+
+    others_read = 04,   // S_IROTH, Read permission, others
+    others_write = 02,  // S_IWOTH, Write permission, others
+    others_exe = 01,    // S_IXOTH, Execute/search permission, others
+    others_all = 07,    // S_IRWXO, Read, write, execute/search by others
+
+    all_all = 0777,     // owner_all|group_all|others_all
+
+    // other POSIX bits
+
+    set_uid_on_exe = 04000, // S_ISUID, Set-user-ID on execution
+    set_gid_on_exe = 02000, // S_ISGID, Set-group-ID on execution
+    sticky_bit     = 01000, // S_ISVTX,
+                            // (POSIX XSI) On directories, restricted deletion flag 
+                            // (V7) 'sticky bit': save swapped text even after use 
+                            // (SunOS) On non-directories: don't cache this file
+                            // (SVID-v4.2) On directories: restricted deletion flag
+                            // Also see http://en.wikipedia.org/wiki/Sticky_bit
+
+    perms_mask = 07777,     // all_all|set_uid_on_exe|set_gid_on_exe|sticky_bit
+
+    perms_not_known = 0xFFFF, // present when directory_entry cache not loaded
+
+    // options for permissions() function
+
+    add_perms = 0x1000,     // adds the given permission bits to the current bits
+    remove_perms = 0x2000,  // removes the given permission bits from the current bits;
+                            // choose add_perms or remove_perms, not both; if neither add_perms
+                            // nor remove_perms is given, replace the current bits with
+                            // the given bits.
+
+    symlink_perms = 0x4000  // on POSIX, don't resolve symlinks; implied on Windows
+  };
+
+  BOOST_BITMASK(perms)
+
+//--------------------------------------------------------------------------------------//
+//                                    file_status                                       //
+//--------------------------------------------------------------------------------------//
+
+  class BOOST_FILESYSTEM_DECL file_status
+  {
+  public:
+             file_status() BOOST_NOEXCEPT
+               : m_value(status_error), m_perms(perms_not_known) {}
+    explicit file_status(file_type v) BOOST_NOEXCEPT
+               : m_value(v), m_perms(perms_not_known)  {}
+             file_status(file_type v, perms prms) BOOST_NOEXCEPT
+               : m_value(v), m_perms(prms) {}
+
+  //  As of October 2015 the interaction between noexcept and =default is so troublesome
+  //  for VC++, GCC, and probably other compilers, that =default is not used with noexcept
+  //  functions. GCC is not even consistent for the same release on different platforms.
+
+    file_status(const file_status& rhs) BOOST_NOEXCEPT
+      : m_value(rhs.m_value), m_perms(rhs.m_perms) {}
+    file_status& operator=(const file_status& rhs) BOOST_NOEXCEPT
+    {
+      m_value = rhs.m_value;
+      m_perms = rhs.m_perms;
+      return *this;
+    }
+
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+    file_status(file_status&& rhs) BOOST_NOEXCEPT
+    {
+      m_value = std::move(rhs.m_value);
+      m_perms = std::move(rhs.m_perms);
+    }
+    file_status& operator=(file_status&& rhs) BOOST_NOEXCEPT
+    { 
+      m_value = std::move(rhs.m_value);
+      m_perms = std::move(rhs.m_perms);
+      return *this;
+    }
+# endif
+
+
+    // observers
+    file_type  type() const BOOST_NOEXCEPT            { return m_value; }
+    perms      permissions() const BOOST_NOEXCEPT     { return m_perms; } 
+
+    // modifiers
+    void       type(file_type v) BOOST_NOEXCEPT       { m_value = v; }
+    void       permissions(perms prms) BOOST_NOEXCEPT { m_perms = prms; }
+
+    bool operator==(const file_status& rhs) const BOOST_NOEXCEPT
+      { return type() == rhs.type() && 
+        permissions() == rhs.permissions(); }
+    bool operator!=(const file_status& rhs) const BOOST_NOEXCEPT
+      { return !(*this == rhs); }
+
+  private:
+    file_type   m_value;
+    enum perms  m_perms;
+  };
+
+  inline bool type_present(file_status f) BOOST_NOEXCEPT
+                                          { return f.type() != status_error; }
+  inline bool permissions_present(file_status f) BOOST_NOEXCEPT
+                                          {return f.permissions() != perms_not_known;}
+  inline bool status_known(file_status f) BOOST_NOEXCEPT
+                                          { return type_present(f) && permissions_present(f); }
+  inline bool exists(file_status f) BOOST_NOEXCEPT
+                                          { return f.type() != status_error
+                                                && f.type() != file_not_found; }
+  inline bool is_regular_file(file_status f) BOOST_NOEXCEPT
+                                          { return f.type() == regular_file; }
+  inline bool is_directory(file_status f) BOOST_NOEXCEPT
+                                          { return f.type() == directory_file; }
+  inline bool is_symlink(file_status f) BOOST_NOEXCEPT
+                                          { return f.type() == symlink_file; }
+  inline bool is_other(file_status f) BOOST_NOEXCEPT
+                                          { return exists(f) && !is_regular_file(f)
+                                                && !is_directory(f) && !is_symlink(f); }
+
+# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+  inline bool is_regular(file_status f) BOOST_NOEXCEPT { return f.type() == regular_file; }
+# endif
+
+  struct space_info
+  {
+    // all values are byte counts
+    pdalboost::uintmax_t capacity;
+    pdalboost::uintmax_t free;      // <= capacity
+    pdalboost::uintmax_t available; // <= free
+  };
+
+  BOOST_SCOPED_ENUM_START(copy_option)
+    {none=0, fail_if_exists = none, overwrite_if_exists};
+  BOOST_SCOPED_ENUM_END
+
+//--------------------------------------------------------------------------------------//
+//                             implementation details                                   //
+//--------------------------------------------------------------------------------------//
+
+  namespace detail
+  {
+    //  We cannot pass a BOOST_SCOPED_ENUM to a compled function because it will result
+    //  in an undefined reference if the library is compled with -std=c++0x but the use
+    //  is compiled in C++03 mode, or visa versa. See tickets 6124, 6779, 10038.
+    enum copy_option {none=0, fail_if_exists = none, overwrite_if_exists};
+
+    BOOST_FILESYSTEM_DECL
+    file_status status(const path&p, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    file_status symlink_status(const path& p, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    bool is_empty(const path& p, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    path initial_path(system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    path canonical(const path& p, const path& base, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    void copy(const path& from, const path& to, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    void copy_directory(const path& from, const path& to, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    void copy_file(const path& from, const path& to,  // See ticket #2925
+                    detail::copy_option option, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    bool create_directories(const path& p, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    bool create_directory(const path& p, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    void create_directory_symlink(const path& to, const path& from,
+                                  system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    void create_hard_link(const path& to, const path& from, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    void create_symlink(const path& to, const path& from, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    path current_path(system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    void current_path(const path& p, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    bool equivalent(const path& p1, const path& p2, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    pdalboost::uintmax_t file_size(const path& p, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    pdalboost::uintmax_t hard_link_count(const path& p, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    std::time_t last_write_time(const path& p, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    void last_write_time(const path& p, const std::time_t new_time,
+                         system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    void permissions(const path& p, perms prms, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    path read_symlink(const path& p, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    path relative(const path& p, const path& base, system::error_code* ec = 0);
+    BOOST_FILESYSTEM_DECL
+    bool remove(const path& p, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    pdalboost::uintmax_t remove_all(const path& p, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    void rename(const path& old_p, const path& new_p, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    void resize_file(const path& p, uintmax_t size, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    space_info space(const path& p, system::error_code* ec=0); 
+    BOOST_FILESYSTEM_DECL
+    path system_complete(const path& p, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    path temp_directory_path(system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    path unique_path(const path& p, system::error_code* ec=0);
+    BOOST_FILESYSTEM_DECL
+    path weakly_canonical(const path& p, system::error_code* ec = 0);
+  }  // namespace detail             
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                             status query functions                                   //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+  inline
+  file_status status(const path& p)    {return detail::status(p);}
+  inline 
+  file_status status(const path& p, system::error_code& ec)
+                                       {return detail::status(p, &ec);}
+  inline 
+  file_status symlink_status(const path& p) {return detail::symlink_status(p);}
+  inline
+  file_status symlink_status(const path& p, system::error_code& ec)
+                                       {return detail::symlink_status(p, &ec);}
+  inline 
+  bool exists(const path& p)           {return exists(detail::status(p));}
+  inline 
+  bool exists(const path& p, system::error_code& ec)
+                                       {return exists(detail::status(p, &ec));}
+  inline 
+  bool is_directory(const path& p)     {return is_directory(detail::status(p));}
+  inline 
+  bool is_directory(const path& p, system::error_code& ec)
+                                       {return is_directory(detail::status(p, &ec));}
+  inline 
+  bool is_regular_file(const path& p)  {return is_regular_file(detail::status(p));}
+  inline 
+  bool is_regular_file(const path& p, system::error_code& ec)
+                                       {return is_regular_file(detail::status(p, &ec));}
+  inline 
+  bool is_other(const path& p)         {return is_other(detail::status(p));}
+  inline 
+  bool is_other(const path& p, system::error_code& ec)
+                                       {return is_other(detail::status(p, &ec));}
+  inline
+  bool is_symlink(const path& p)       {return is_symlink(detail::symlink_status(p));}
+  inline 
+  bool is_symlink(const path& p, system::error_code& ec)
+                                       {return is_symlink(detail::symlink_status(p, &ec));}
+# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+  inline
+  bool is_regular(const path& p)       {return is_regular(detail::status(p));}
+  inline
+  bool is_regular(const path& p, system::error_code& ec)
+                                       {return is_regular(detail::status(p, &ec));}
+# endif
+
+  inline
+  bool is_empty(const path& p)         {return detail::is_empty(p);}
+  inline
+  bool is_empty(const path& p, system::error_code& ec)
+                                       {return detail::is_empty(p, &ec);}
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                             operational functions                                    //
+//                  in alphabetical order, unless otherwise noted                       //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+ 
+  //  forward declarations
+  path current_path();  // fwd declaration
+  path initial_path();
+
+  BOOST_FILESYSTEM_DECL
+  path absolute(const path& p, const path& base=current_path());
+  //  If base.is_absolute(), throws nothing. Thus no need for ec argument
+
+  inline
+  path canonical(const path& p, const path& base=current_path())
+                                       {return detail::canonical(p, base);}
+  inline
+  path canonical(const path& p, system::error_code& ec)
+                                       {return detail::canonical(p, current_path(), &ec);}
+  inline
+  path canonical(const path& p, const path& base, system::error_code& ec)
+                                       {return detail::canonical(p, base, &ec);}
+
+# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+  inline
+  path complete(const path& p)
+  {
+    return absolute(p, initial_path());
+  }
+
+  inline
+  path complete(const path& p, const path& base)
+  {
+    return absolute(p, base);
+  }
+# endif
+
+  inline
+  void copy(const path& from, const path& to) {detail::copy(from, to);}
+
+  inline
+  void copy(const path& from, const path& to, system::error_code& ec) BOOST_NOEXCEPT 
+                                       {detail::copy(from, to, &ec);}
+  inline
+  void copy_directory(const path& from, const path& to)
+                                       {detail::copy_directory(from, to);}
+  inline
+  void copy_directory(const path& from, const path& to, system::error_code& ec) BOOST_NOEXCEPT
+                                       {detail::copy_directory(from, to, &ec);}
+  inline
+  void copy_file(const path& from, const path& to,   // See ticket #2925
+                 BOOST_SCOPED_ENUM(copy_option) option)
+  {
+    detail::copy_file(from, to, static_cast<detail::copy_option>(option));
+  }
+  inline
+  void copy_file(const path& from, const path& to)
+  {
+    detail::copy_file(from, to, detail::fail_if_exists);
+  }
+  inline
+  void copy_file(const path& from, const path& to,   // See ticket #2925
+                 BOOST_SCOPED_ENUM(copy_option) option, system::error_code& ec) BOOST_NOEXCEPT
+  {
+    detail::copy_file(from, to, static_cast<detail::copy_option>(option), &ec);
+  }
+  inline
+  void copy_file(const path& from, const path& to, system::error_code& ec) BOOST_NOEXCEPT
+  {
+    detail::copy_file(from, to, detail::fail_if_exists, &ec);
+  }
+  inline
+  void copy_symlink(const path& existing_symlink,
+                    const path& new_symlink) {detail::copy_symlink(existing_symlink, new_symlink);}
+
+  inline
+  void copy_symlink(const path& existing_symlink, const path& new_symlink,
+                    system::error_code& ec) BOOST_NOEXCEPT
+                                       {detail::copy_symlink(existing_symlink, new_symlink, &ec);}
+  inline
+  bool create_directories(const path& p) {return detail::create_directories(p);}
+
+  inline
+  bool create_directories(const path& p, system::error_code& ec) BOOST_NOEXCEPT
+                                       {return detail::create_directories(p, &ec);}
+  inline
+  bool create_directory(const path& p) {return detail::create_directory(p);}
+
+  inline
+  bool create_directory(const path& p, system::error_code& ec) BOOST_NOEXCEPT
+                                       {return detail::create_directory(p, &ec);}
+  inline
+  void create_directory_symlink(const path& to, const path& from)
+                                       {detail::create_directory_symlink(to, from);}
+  inline
+  void create_directory_symlink(const path& to, const path& from, system::error_code& ec) BOOST_NOEXCEPT
+                                       {detail::create_directory_symlink(to, from, &ec);}
+  inline
+  void create_hard_link(const path& to, const path& new_hard_link) {detail::create_hard_link(to, new_hard_link);}
+
+  inline
+  void create_hard_link(const path& to, const path& new_hard_link, system::error_code& ec) BOOST_NOEXCEPT
+                                       {detail::create_hard_link(to, new_hard_link, &ec);}
+  inline
+  void create_symlink(const path& to, const path& new_symlink) {detail::create_symlink(to, new_symlink);}
+
+  inline
+  void create_symlink(const path& to, const path& new_symlink, system::error_code& ec) BOOST_NOEXCEPT
+                                       {detail::create_symlink(to, new_symlink, &ec);}
+  inline
+  path current_path()                  {return detail::current_path();}
+
+  inline
+  path current_path(system::error_code& ec) BOOST_NOEXCEPT {return detail::current_path(&ec);}
+
+  inline
+  void current_path(const path& p)     {detail::current_path(p);}
+
+  inline
+  void current_path(const path& p, system::error_code& ec) BOOST_NOEXCEPT {detail::current_path(p, &ec);}
+
+  inline
+  bool equivalent(const path& p1, const path& p2) {return detail::equivalent(p1, p2);}
+
+  inline
+  bool equivalent(const path& p1, const path& p2, system::error_code& ec) BOOST_NOEXCEPT
+                                       {return detail::equivalent(p1, p2, &ec);}
+  inline
+  pdalboost::uintmax_t file_size(const path& p) {return detail::file_size(p);}
+
+  inline
+  pdalboost::uintmax_t file_size(const path& p, system::error_code& ec) BOOST_NOEXCEPT
+                                       {return detail::file_size(p, &ec);}
+  inline
+  pdalboost::uintmax_t hard_link_count(const path& p) {return detail::hard_link_count(p);}
+
+  inline
+  pdalboost::uintmax_t hard_link_count(const path& p, system::error_code& ec) BOOST_NOEXCEPT
+                                       {return detail::hard_link_count(p, &ec);}
+  inline
+  path initial_path()                  {return detail::initial_path();}
+
+  inline
+  path initial_path(system::error_code& ec) {return detail::initial_path(&ec);}
+
+  template <class Path>
+  path initial_path() {return initial_path();}
+  template <class Path>
+  path initial_path(system::error_code& ec) {return detail::initial_path(&ec);}
+
+  inline
+  std::time_t last_write_time(const path& p) {return detail::last_write_time(p);}
+
+  inline
+  std::time_t last_write_time(const path& p, system::error_code& ec) BOOST_NOEXCEPT
+                                       {return detail::last_write_time(p, &ec);}
+  inline
+  void last_write_time(const path& p, const std::time_t new_time)
+                                       {detail::last_write_time(p, new_time);}
+  inline
+  void last_write_time(const path& p, const std::time_t new_time,
+                       system::error_code& ec) BOOST_NOEXCEPT
+                                       {detail::last_write_time(p, new_time, &ec);}
+  inline
+  void permissions(const path& p, perms prms)
+                                       {detail::permissions(p, prms);}
+  inline
+  void permissions(const path& p, perms prms, system::error_code& ec) BOOST_NOEXCEPT
+                                       {detail::permissions(p, prms, &ec);}
+
+  inline
+  path read_symlink(const path& p)     {return detail::read_symlink(p);}
+
+  inline
+  path read_symlink(const path& p, system::error_code& ec)
+                                       {return detail::read_symlink(p, &ec);}
+  inline
+    // For standardization, if the committee doesn't like "remove", consider "eliminate"
+  bool remove(const path& p)           {return detail::remove(p);}
+
+  inline
+  bool remove(const path& p, system::error_code& ec) BOOST_NOEXCEPT
+                                       {return detail::remove(p, &ec);}
+
+  inline
+  pdalboost::uintmax_t remove_all(const path& p) {return detail::remove_all(p);}
+    
+  inline
+  pdalboost::uintmax_t remove_all(const path& p, system::error_code& ec) BOOST_NOEXCEPT
+                                       {return detail::remove_all(p, &ec);}
+  inline
+  void rename(const path& old_p, const path& new_p) {detail::rename(old_p, new_p);}
+
+  inline
+  void rename(const path& old_p, const path& new_p, system::error_code& ec) BOOST_NOEXCEPT
+                                       {detail::rename(old_p, new_p, &ec);}
+  inline  // name suggested by Scott McMurray
+  void resize_file(const path& p, uintmax_t size) {detail::resize_file(p, size);}
+
+  inline
+  void resize_file(const path& p, uintmax_t size, system::error_code& ec) BOOST_NOEXCEPT
+                                       {detail::resize_file(p, size, &ec);}
+  inline
+  path relative(const path& p, const path& base=current_path())
+                                       {return detail::relative(p, base);}
+  inline
+  path relative(const path& p, system::error_code& ec)
+                                       {return detail::relative(p, current_path(), &ec);}
+  inline
+  path relative(const path& p, const path& base, system::error_code& ec)
+                                       {return detail::relative(p, base, &ec);}
+  inline
+  space_info space(const path& p)      {return detail::space(p);} 
+
+  inline
+  space_info space(const path& p, system::error_code& ec) BOOST_NOEXCEPT
+                                       {return detail::space(p, &ec);} 
+
+# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+  inline bool symbolic_link_exists(const path& p)
+                                       { return is_symlink(symlink_status(p)); }
+# endif
+
+  inline
+  path system_complete(const path& p)  {return detail::system_complete(p);}
+
+  inline
+  path system_complete(const path& p, system::error_code& ec)
+                                       {return detail::system_complete(p, &ec);}
+  inline
+  path temp_directory_path()           {return detail::temp_directory_path();}
+
+  inline
+  path temp_directory_path(system::error_code& ec) 
+                                       {return detail::temp_directory_path(&ec);}
+  inline
+  path unique_path(const path& p="%%%%-%%%%-%%%%-%%%%")
+                                       {return detail::unique_path(p);}
+  inline
+  path unique_path(const path& p, system::error_code& ec)
+                                       {return detail::unique_path(p, &ec);}
+  inline
+  path weakly_canonical(const path& p)   {return detail::weakly_canonical(p);}
+ 
+  inline
+  path weakly_canonical(const path& p, system::error_code& ec)
+                                       {return detail::weakly_canonical(p, &ec);}
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                                 directory_entry                                      //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+//  GCC has a problem with a member function named path within a namespace or 
+//  sub-namespace that also has a class named path. The workaround is to always
+//  fully qualify the name path when it refers to the class name.
+
+class BOOST_FILESYSTEM_DECL directory_entry
+{
+public:
+  typedef pdalboost::filesystem::path::value_type value_type;   // enables class path ctor taking directory_entry
+
+  directory_entry() BOOST_NOEXCEPT {}
+  explicit directory_entry(const pdalboost::filesystem::path& p)
+    : m_path(p), m_status(file_status()), m_symlink_status(file_status())
+    {}
+  directory_entry(const pdalboost::filesystem::path& p,
+    file_status st, file_status symlink_st = file_status())
+    : m_path(p), m_status(st), m_symlink_status(symlink_st) {}
+
+  directory_entry(const directory_entry& rhs)
+    : m_path(rhs.m_path), m_status(rhs.m_status), m_symlink_status(rhs.m_symlink_status){}
+
+  directory_entry& operator=(const directory_entry& rhs)
+  {
+    m_path = rhs.m_path;
+    m_status = rhs.m_status;
+    m_symlink_status = rhs.m_symlink_status;
+    return *this;
+  }
+
+  //  As of October 2015 the interaction between noexcept and =default is so troublesome
+  //  for VC++, GCC, and probably other compilers, that =default is not used with noexcept
+  //  functions. GCC is not even consistent for the same release on different platforms.
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+  directory_entry(directory_entry&& rhs) BOOST_NOEXCEPT
+  {
+    m_path = std::move(rhs.m_path);
+    m_status = std::move(rhs.m_status);
+    m_symlink_status = std::move(rhs.m_symlink_status);
+  }
+  directory_entry& operator=(directory_entry&& rhs) BOOST_NOEXCEPT
+  { 
+    m_path = std::move(rhs.m_path);
+    m_status = std::move(rhs.m_status);
+    m_symlink_status = std::move(rhs.m_symlink_status);
+    return *this;
+  }
+#endif
+
+  void assign(const pdalboost::filesystem::path& p,
+    file_status st = file_status(), file_status symlink_st = file_status())
+    { m_path = p; m_status = st; m_symlink_status = symlink_st; }
+
+  void replace_filename(const pdalboost::filesystem::path& p,
+    file_status st = file_status(), file_status symlink_st = file_status())
+  {
+    m_path.remove_filename();
+    m_path /= p;
+    m_status = st;
+    m_symlink_status = symlink_st;
+  }
+
+# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+  void replace_leaf(const pdalboost::filesystem::path& p,
+    file_status st, file_status symlink_st)
+      { replace_filename(p, st, symlink_st); }
+# endif
+
+  const pdalboost::filesystem::path&  path() const BOOST_NOEXCEPT {return m_path;}
+  operator const pdalboost::filesystem::path&() const BOOST_NOEXCEPT
+                                                              {return m_path;}
+  file_status   status() const                                {return m_get_status();}
+  file_status   status(system::error_code& ec) const BOOST_NOEXCEPT
+                                                              {return m_get_status(&ec); }
+  file_status   symlink_status() const                        {return m_get_symlink_status();}
+  file_status   symlink_status(system::error_code& ec) const BOOST_NOEXCEPT
+                                                              {return m_get_symlink_status(&ec); }
+
+  bool operator==(const directory_entry& rhs) const BOOST_NOEXCEPT {return m_path == rhs.m_path; }
+  bool operator!=(const directory_entry& rhs) const BOOST_NOEXCEPT {return m_path != rhs.m_path;} 
+  bool operator< (const directory_entry& rhs) const BOOST_NOEXCEPT {return m_path < rhs.m_path;} 
+  bool operator<=(const directory_entry& rhs) const BOOST_NOEXCEPT {return m_path <= rhs.m_path;} 
+  bool operator> (const directory_entry& rhs) const BOOST_NOEXCEPT {return m_path > rhs.m_path;} 
+  bool operator>=(const directory_entry& rhs) const BOOST_NOEXCEPT {return m_path >= rhs.m_path;} 
+
+private:
+  pdalboost::filesystem::path   m_path;
+  mutable file_status       m_status;           // stat()-like
+  mutable file_status       m_symlink_status;   // lstat()-like
+
+  file_status m_get_status(system::error_code* ec=0) const;
+  file_status m_get_symlink_status(system::error_code* ec=0) const;
+}; // directory_entry
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                            directory_iterator helpers                                //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+class directory_iterator;
+
+namespace detail
+{
+  BOOST_FILESYSTEM_DECL
+    system::error_code dir_itr_close(// never throws()
+    void *& handle
+#   if     defined(BOOST_POSIX_API)
+    , void *& buffer
+#   endif
+  ); 
+
+  struct dir_itr_imp
+  {
+    directory_entry  dir_entry;
+    void*            handle;
+
+#   ifdef BOOST_POSIX_API
+    void*            buffer;  // see dir_itr_increment implementation
+#   endif
+
+    dir_itr_imp() : handle(0)
+#   ifdef BOOST_POSIX_API
+      , buffer(0)
+#   endif
+    {}
+
+    ~dir_itr_imp() // never throws
+    {
+      dir_itr_close(handle
+#       if defined(BOOST_POSIX_API)
+         , buffer
+#       endif
+    );
+    }
+  };
+
+  // see path::iterator: comment below
+  BOOST_FILESYSTEM_DECL void directory_iterator_construct(directory_iterator& it,
+    const path& p, system::error_code* ec);
+  BOOST_FILESYSTEM_DECL void directory_iterator_increment(directory_iterator& it,
+    system::error_code* ec);
+
+}  // namespace detail
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                                directory_iterator                                    //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+  class directory_iterator
+    : public pdalboost::iterator_facade< directory_iterator,
+                                     directory_entry,
+                                     pdalboost::single_pass_traversal_tag >
+  {
+  public:
+
+    directory_iterator() BOOST_NOEXCEPT {}  // creates the "end" iterator
+
+    // iterator_facade derived classes don't seem to like implementations in
+    // separate translation unit dll's, so forward to detail functions
+    explicit directory_iterator(const path& p)
+        : m_imp(new detail::dir_itr_imp)
+          { detail::directory_iterator_construct(*this, p, 0); }
+
+    directory_iterator(const path& p, system::error_code& ec) BOOST_NOEXCEPT
+        : m_imp(new detail::dir_itr_imp)
+          { detail::directory_iterator_construct(*this, p, &ec); }
+
+   ~directory_iterator() {}
+
+    directory_iterator& increment(system::error_code& ec) BOOST_NOEXCEPT
+    { 
+      detail::directory_iterator_increment(*this, &ec);
+      return *this;
+    }
+
+  private:
+    friend struct detail::dir_itr_imp;
+    friend BOOST_FILESYSTEM_DECL void detail::directory_iterator_construct(directory_iterator& it,
+      const path& p, system::error_code* ec);
+    friend BOOST_FILESYSTEM_DECL void detail::directory_iterator_increment(directory_iterator& it,
+      system::error_code* ec);
+
+    // shared_ptr provides shallow-copy semantics required for InputIterators.
+    // m_imp.get()==0 indicates the end iterator.
+    pdalboost::shared_ptr< detail::dir_itr_imp >  m_imp;
+
+    friend class pdalboost::iterator_core_access;
+
+    pdalboost::iterator_facade<
+      directory_iterator,
+      directory_entry,
+      pdalboost::single_pass_traversal_tag >::reference dereference() const 
+    {
+      BOOST_ASSERT_MSG(m_imp.get(), "attempt to dereference end iterator");
+      return m_imp->dir_entry;
+    }
+
+    void increment() { detail::directory_iterator_increment(*this, 0); }
+
+    bool equal(const directory_iterator& rhs) const
+      { return m_imp == rhs.m_imp; }
+
+  };  // directory_iterator
+
+  //  enable directory_iterator C++11 range-base for statement use  --------------------//
+
+  //  begin() and end() are only used by a range-based for statement in the context of
+  //  auto - thus the top-level const is stripped - so returning const is harmless and
+  //  emphasizes begin() is just a pass through.
+  inline
+  const directory_iterator& begin(const directory_iterator& iter) BOOST_NOEXCEPT
+    {return iter;}
+  inline
+  directory_iterator end(const directory_iterator&) BOOST_NOEXCEPT
+    {return directory_iterator();}
+
+  //  enable directory_iterator BOOST_FOREACH  -----------------------------------------//
+
+  inline
+  directory_iterator& range_begin(directory_iterator& iter) BOOST_NOEXCEPT
+    {return iter;}
+  inline
+  directory_iterator range_begin(const directory_iterator& iter) BOOST_NOEXCEPT
+    {return iter;}
+  inline
+  directory_iterator range_end(const directory_iterator&) BOOST_NOEXCEPT
+    {return directory_iterator();}
+  }  // namespace filesystem
+
+  //  namespace pdalboost template specializations
+  template<>
+  struct range_mutable_iterator<pdalboost::filesystem::directory_iterator>
+    { typedef pdalboost::filesystem::directory_iterator type; };
+  template<>
+  struct range_const_iterator <pdalboost::filesystem::directory_iterator>
+    { typedef pdalboost::filesystem::directory_iterator type; };
+
+namespace filesystem
+{
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                      recursive_directory_iterator helpers                            //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+  BOOST_SCOPED_ENUM_START(symlink_option)
+  {
+    none,
+    no_recurse = none,         // don't follow directory symlinks (default behavior)
+    recurse,                   // follow directory symlinks
+    _detail_no_push = recurse << 1  // internal use only
+  };
+  BOOST_SCOPED_ENUM_END
+
+  BOOST_BITMASK(BOOST_SCOPED_ENUM(symlink_option))
+
+  namespace detail
+  {
+    struct recur_dir_itr_imp
+    {
+      typedef directory_iterator element_type;
+      std::stack< element_type, std::vector< element_type > > m_stack;
+      int  m_level;
+      BOOST_SCOPED_ENUM(symlink_option) m_options;
+
+      recur_dir_itr_imp() : m_level(0), m_options(symlink_option::none) {}
+
+      void increment(system::error_code* ec);  // ec == 0 means throw on error
+
+      bool push_directory(system::error_code& ec) BOOST_NOEXCEPT;
+
+      void pop();
+
+    };
+
+    //  Implementation is inline to avoid dynamic linking difficulties with m_stack:
+    //  Microsoft warning C4251, m_stack needs to have dll-interface to be used by
+    //  clients of struct 'pdalboost::filesystem::detail::recur_dir_itr_imp'
+
+    inline
+    bool recur_dir_itr_imp::push_directory(system::error_code& ec) BOOST_NOEXCEPT
+    // Returns: true if push occurs, otherwise false. Always returns false on error.
+    {
+      ec.clear();
+
+      //  Discover if the iterator is for a directory that needs to be recursed into,
+      //  taking symlinks and options into account.
+
+      if ((m_options & symlink_option::_detail_no_push) == symlink_option::_detail_no_push)
+        m_options &= ~symlink_option::_detail_no_push;
+
+      else
+      {
+        // Logic for following predicate was contributed by Daniel Aarno to handle cyclic
+        // symlinks correctly and efficiently, fixing ticket #5652.
+        //   if (((m_options & symlink_option::recurse) == symlink_option::recurse
+        //         || !is_symlink(m_stack.top()->symlink_status()))
+        //       && is_directory(m_stack.top()->status())) ...
+        // The predicate code has since been rewritten to pass error_code arguments,
+        // per ticket #5653.
+
+        file_status symlink_stat;
+
+        if ((m_options & symlink_option::recurse) != symlink_option::recurse)
+        {
+          symlink_stat = m_stack.top()->symlink_status(ec);
+          if (ec)
+            return false;
+        }
+
+        if ((m_options & symlink_option::recurse) == symlink_option::recurse
+          || !is_symlink(symlink_stat))
+        {
+          file_status stat = m_stack.top()->status(ec);
+          if (ec || !is_directory(stat))
+            return false;
+
+          directory_iterator next(m_stack.top()->path(), ec);
+          if (!ec && next != directory_iterator())
+          {
+            m_stack.push(next);
+            ++m_level;
+            return true;
+          }
+        }
+      }
+      return false;
+    }
+
+    inline
+    void recur_dir_itr_imp::increment(system::error_code* ec)
+    // ec == 0 means throw on error
+    // 
+    // Invariant: On return, the top of the iterator stack is the next valid (possibly
+    // end) iterator, regardless of whether or not an error is reported, and regardless of
+    // whether any error is reported by exception or error code. In other words, progress
+    // is always made so a loop on the iterator will always eventually terminate
+    // regardless of errors.
+    {
+      system::error_code ec_push_directory;
+
+      //  if various conditions are met, push a directory_iterator into the iterator stack
+      if (push_directory(ec_push_directory))
+      {
+        if (ec)
+          ec->clear();
+        return;
+      }
+
+      //  Do the actual increment operation on the top iterator in the iterator
+      //  stack, popping the stack if necessary, until either the stack is empty or a
+      //  non-end iterator is reached.
+      while (!m_stack.empty() && ++m_stack.top() == directory_iterator())
+      {
+        m_stack.pop();
+        --m_level;
+      }
+
+      // report errors if any
+      if (ec_push_directory)
+      {
+        if (ec)
+          *ec = ec_push_directory;
+        else
+        {
+          BOOST_FILESYSTEM_THROW(filesystem_error(
+            "filesystem::recursive_directory_iterator directory error",
+            ec_push_directory));
+        }
+      }
+      else if (ec)
+        ec->clear();
+    }
+
+    inline
+    void recur_dir_itr_imp::pop()
+    {
+      BOOST_ASSERT_MSG(m_level > 0,
+        "pop() on recursive_directory_iterator with level < 1");
+
+      do
+      {
+        m_stack.pop();
+        --m_level;
+      }
+      while (!m_stack.empty() && ++m_stack.top() == directory_iterator());
+    }
+  } // namespace detail
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                           recursive_directory_iterator                               //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+  class recursive_directory_iterator
+    : public pdalboost::iterator_facade<
+        recursive_directory_iterator,
+        directory_entry,
+        pdalboost::single_pass_traversal_tag >
+  {
+  public:
+
+    recursive_directory_iterator() BOOST_NOEXCEPT {}  // creates the "end" iterator
+
+    explicit recursive_directory_iterator(const path& dir_path)  // throws if !exists()
+      : m_imp(new detail::recur_dir_itr_imp)
+    {
+      m_imp->m_options = symlink_option::none;
+      m_imp->m_stack.push(directory_iterator(dir_path));
+      if (m_imp->m_stack.top() == directory_iterator())
+        { m_imp.reset(); }
+    }
+
+    recursive_directory_iterator(const path& dir_path,
+      BOOST_SCOPED_ENUM(symlink_option) opt)  // throws if !exists()
+      : m_imp(new detail::recur_dir_itr_imp)
+    {
+      m_imp->m_options = opt;
+      m_imp->m_stack.push(directory_iterator(dir_path));
+      if (m_imp->m_stack.top() == directory_iterator())
+        { m_imp.reset (); }
+    }
+
+    recursive_directory_iterator(const path& dir_path,
+      BOOST_SCOPED_ENUM(symlink_option) opt,
+      system::error_code & ec) BOOST_NOEXCEPT
+    : m_imp(new detail::recur_dir_itr_imp)
+    {
+      m_imp->m_options = opt;
+      m_imp->m_stack.push(directory_iterator(dir_path, ec));
+      if (m_imp->m_stack.top() == directory_iterator())
+        { m_imp.reset (); }
+    }
+
+    recursive_directory_iterator(const path& dir_path,
+      system::error_code & ec) BOOST_NOEXCEPT
+    : m_imp(new detail::recur_dir_itr_imp)
+    {
+      m_imp->m_options = symlink_option::none;
+      m_imp->m_stack.push(directory_iterator(dir_path, ec));
+      if (m_imp->m_stack.top() == directory_iterator())
+        { m_imp.reset (); }
+    }
+
+    recursive_directory_iterator& increment(system::error_code& ec) BOOST_NOEXCEPT
+    {
+      BOOST_ASSERT_MSG(m_imp.get(),
+        "increment() on end recursive_directory_iterator");
+      m_imp->increment(&ec);
+      if (m_imp->m_stack.empty())
+        m_imp.reset(); // done, so make end iterator
+      return *this;
+    }
+
+    int depth() const BOOST_NOEXCEPT
+    { 
+      BOOST_ASSERT_MSG(m_imp.get(),
+        "depth() on end recursive_directory_iterator");
+      return m_imp->m_level;
+    }
+  
+    int level() const BOOST_NOEXCEPT { return depth(); }
+
+    bool recursion_pending() const BOOST_NOEXCEPT
+    {
+      BOOST_ASSERT_MSG(m_imp.get(),
+        "is_no_push_requested() on end recursive_directory_iterator");
+      return (m_imp->m_options & symlink_option::_detail_no_push)
+        == symlink_option::_detail_no_push;
+    }
+  
+    bool no_push_pending() const BOOST_NOEXCEPT { return recursion_pending(); }
+
+#   ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+    bool no_push_request() const BOOST_NOEXCEPT { return no_push_pending(); }
+#   endif
+
+    void pop()
+    { 
+      BOOST_ASSERT_MSG(m_imp.get(),
+        "pop() on end recursive_directory_iterator");
+      m_imp->pop();
+      if (m_imp->m_stack.empty()) m_imp.reset(); // done, so make end iterator
+    }
+
+    void disable_recursion_pending(bool value=true) BOOST_NOEXCEPT
+    {
+      BOOST_ASSERT_MSG(m_imp.get(),
+        "no_push() on end recursive_directory_iterator");
+      if (value)
+        m_imp->m_options |= symlink_option::_detail_no_push;
+      else
+        m_imp->m_options &= ~symlink_option::_detail_no_push;
+    }
+  
+    void no_push(bool value=true) BOOST_NOEXCEPT { disable_recursion_pending(value); }
+
+    file_status status() const
+    {
+      BOOST_ASSERT_MSG(m_imp.get(),
+        "status() on end recursive_directory_iterator");
+      return m_imp->m_stack.top()->status();
+    }
+
+    file_status symlink_status() const
+    {
+      BOOST_ASSERT_MSG(m_imp.get(),
+        "symlink_status() on end recursive_directory_iterator");
+      return m_imp->m_stack.top()->symlink_status();
+    }
+
+  private:
+
+    // shared_ptr provides shallow-copy semantics required for InputIterators.
+    // m_imp.get()==0 indicates the end iterator.
+    pdalboost::shared_ptr< detail::recur_dir_itr_imp >  m_imp;
+
+    friend class pdalboost::iterator_core_access;
+
+    pdalboost::iterator_facade< 
+      recursive_directory_iterator,
+      directory_entry,
+      pdalboost::single_pass_traversal_tag >::reference
+    dereference() const 
+    {
+      BOOST_ASSERT_MSG(m_imp.get(),
+        "dereference of end recursive_directory_iterator");
+      return *m_imp->m_stack.top();
+    }
+
+    void increment()
+    { 
+      BOOST_ASSERT_MSG(m_imp.get(),
+        "increment of end recursive_directory_iterator");
+      m_imp->increment(0);
+      if (m_imp->m_stack.empty())
+        m_imp.reset(); // done, so make end iterator
+    }
+
+    bool equal(const recursive_directory_iterator& rhs) const
+      { return m_imp == rhs.m_imp; }
+
+  };  // recursive directory iterator
+
+  //  enable recursive directory iterator C++11 range-base for statement use  ----------//
+
+  //  begin() and end() are only used by a range-based for statement in the context of
+  //  auto - thus the top-level const is stripped - so returning const is harmless and
+  //  emphasizes begin() is just a pass through.
+  inline
+  const recursive_directory_iterator&
+    begin(const recursive_directory_iterator& iter) BOOST_NOEXCEPT
+                                                  {return iter;}
+  inline
+  recursive_directory_iterator end(const recursive_directory_iterator&) BOOST_NOEXCEPT
+                                                  {return recursive_directory_iterator();}
+
+  //  enable recursive directory iterator BOOST_FOREACH  -------------------------------//
+
+  inline
+  recursive_directory_iterator& 
+    range_begin(recursive_directory_iterator& iter) BOOST_NOEXCEPT
+                                                   {return iter;}
+  inline
+  recursive_directory_iterator
+    range_begin(const recursive_directory_iterator& iter) BOOST_NOEXCEPT
+                                                   {return iter;}
+  inline
+  recursive_directory_iterator range_end(const recursive_directory_iterator&) BOOST_NOEXCEPT
+                                                  {return recursive_directory_iterator();}
+  }  // namespace filesystem
+
+  //  namespace pdalboost template specializations
+  template<>
+  struct range_mutable_iterator<pdalboost::filesystem::recursive_directory_iterator>
+                        { typedef pdalboost::filesystem::recursive_directory_iterator type; };
+  template<>
+  struct range_const_iterator <pdalboost::filesystem::recursive_directory_iterator>
+                        { typedef pdalboost::filesystem::recursive_directory_iterator type; };
+
+namespace filesystem
+{
+
+# if !defined(BOOST_FILESYSTEM_NO_DEPRECATED)
+  typedef recursive_directory_iterator wrecursive_directory_iterator;
+# endif
+
+//  test helper  -----------------------------------------------------------------------//
+
+//  Not part of the documented interface since false positives are possible;
+//  there is no law that says that an OS that has large stat.st_size
+//  actually supports large file sizes.
+
+  namespace detail
+  {
+    BOOST_FILESYSTEM_DECL bool possible_large_file_size_support();
+  }
+
+  } // namespace filesystem
+} // namespace pdalboost
+
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
+#endif // BOOST_FILESYSTEM3_OPERATIONS_HPP
diff --git a/vendor/pdalboost/boost/filesystem/path.hpp b/vendor/pdalboost/boost/filesystem/path.hpp
new file mode 100644
index 0000000..ea4c80b
--- /dev/null
+++ b/vendor/pdalboost/boost/filesystem/path.hpp
@@ -0,0 +1,964 @@
+//  filesystem path.hpp  ---------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2002-2005, 2009
+//  Copyright Vladimir Prus 2002
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//  path::stem(), extension(), and replace_extension() are based on
+//  basename(), extension(), and change_extension() from the original
+//  filesystem/convenience.hpp header by Vladimir Prus.
+
+#ifndef BOOST_FILESYSTEM_PATH_HPP
+#define BOOST_FILESYSTEM_PATH_HPP
+
+#include <boost/config.hpp>
+
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/path_traits.hpp>  // includes <cwchar>
+#include <boost/system/error_code.hpp>
+#include <boost/system/system_error.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/io/detail/quoted_manip.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/functional/hash_fwd.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <string>
+#include <iterator>
+#include <cstring>
+#include <iosfwd>
+#include <stdexcept>
+#include <cassert>
+#include <locale>
+#include <algorithm>
+
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+
+namespace pdalboost
+{
+namespace filesystem
+{
+
+  //------------------------------------------------------------------------------------//
+  //                                                                                    //
+  //                                    class path                                      //
+  //                                                                                    //
+  //------------------------------------------------------------------------------------//
+
+  class BOOST_FILESYSTEM_DECL path
+  {
+  public:
+
+    //  value_type is the character type used by the operating system API to
+    //  represent paths.
+
+# ifdef BOOST_WINDOWS_API
+    typedef wchar_t                        value_type;
+    BOOST_STATIC_CONSTEXPR value_type      preferred_separator = L'\\';
+# else 
+    typedef char                           value_type;
+    BOOST_STATIC_CONSTEXPR value_type      preferred_separator = '/';
+# endif
+    typedef std::basic_string<value_type>  string_type;  
+    typedef std::codecvt<wchar_t, char,
+                         std::mbstate_t>   codecvt_type;
+
+
+    //  ----- character encoding conversions -----
+
+    //  Following the principle of least astonishment, path input arguments
+    //  passed to or obtained from the operating system via objects of
+    //  class path behave as if they were directly passed to or
+    //  obtained from the O/S API, unless conversion is explicitly requested.
+    //
+    //  POSIX specfies that path strings are passed unchanged to and from the
+    //  API. Note that this is different from the POSIX command line utilities,
+    //  which convert according to a locale.
+    //
+    //  Thus for POSIX, char strings do not undergo conversion.  wchar_t strings
+    //  are converted to/from char using the path locale or, if a conversion
+    //  argument is given, using a conversion object modeled on
+    //  std::wstring_convert.
+    //
+    //  The path locale, which is global to the thread, can be changed by the
+    //  imbue() function. It is initialized to an implementation defined locale.
+    //  
+    //  For Windows, wchar_t strings do not undergo conversion. char strings
+    //  are converted using the "ANSI" or "OEM" code pages, as determined by
+    //  the AreFileApisANSI() function, or, if a conversion argument is given,
+    //  using a conversion object modeled on std::wstring_convert.
+    //
+    //  See m_pathname comments for further important rationale.
+
+    //  TODO: rules needed for operating systems that use / or .
+    //  differently, or format directory paths differently from file paths. 
+    //
+    //  **********************************************************************************
+    //
+    //  More work needed: How to handle an operating system that may have
+    //  slash characters or dot characters in valid filenames, either because
+    //  it doesn't follow the POSIX standard, or because it allows MBCS
+    //  filename encodings that may contain slash or dot characters. For
+    //  example, ISO/IEC 2022 (JIS) encoding which allows switching to
+    //  JIS x0208-1983 encoding. A valid filename in this set of encodings is
+    //  0x1B 0x24 0x42 [switch to X0208-1983] 0x24 0x2F [U+304F Kiragana letter KU]
+    //                                             ^^^^
+    //  Note that 0x2F is the ASCII slash character
+    //
+    //  **********************************************************************************
+
+    //  Supported source arguments: half-open iterator range, container, c-array,
+    //  and single pointer to null terminated string.
+
+    //  All source arguments except pointers to null terminated byte strings support
+    //  multi-byte character strings which may have embedded nulls. Embedded null
+    //  support is required for some Asian languages on Windows.
+
+    //  "const codecvt_type& cvt=codecvt()" default arguments are not used because this
+    //  limits the impact of locale("") initialization failures on POSIX systems to programs
+    //  that actually depend on locale(""). It further ensures that exceptions thrown
+    //  as a result of such failues occur after main() has started, so can be caught. 
+
+    //  -----  constructors  -----
+
+    path() BOOST_NOEXCEPT {}                                          
+    path(const path& p) : m_pathname(p.m_pathname) {}
+
+    template <class Source>
+    path(Source const& source,
+      typename pdalboost::enable_if<path_traits::is_pathable<
+        typename pdalboost::decay<Source>::type> >::type* =0)
+    {
+      path_traits::dispatch(source, m_pathname);
+    }
+
+    path(const value_type* s) : m_pathname(s) {}
+    path(value_type* s) : m_pathname(s) {}
+    path(const string_type& s) : m_pathname(s) {}
+    path(string_type& s) : m_pathname(s) {}
+
+  //  As of October 2015 the interaction between noexcept and =default is so troublesome
+  //  for VC++, GCC, and probably other compilers, that =default is not used with noexcept
+  //  functions. GCC is not even consistent for the same release on different platforms.
+
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+    path(path&& p) BOOST_NOEXCEPT { m_pathname = std::move(p.m_pathname); }
+    path& operator=(path&& p) BOOST_NOEXCEPT
+      { m_pathname = std::move(p.m_pathname); return *this; }
+# endif
+
+    template <class Source>
+    path(Source const& source, const codecvt_type& cvt)
+    {
+      path_traits::dispatch(source, m_pathname, cvt);
+    }
+
+    template <class InputIterator>
+    path(InputIterator begin, InputIterator end)
+    { 
+      if (begin != end)
+      {
+        // convert requires contiguous string, so copy
+        std::basic_string<typename std::iterator_traits<InputIterator>::value_type>
+          seq(begin, end);
+        path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname);
+      }
+    }
+
+    template <class InputIterator>
+    path(InputIterator begin, InputIterator end, const codecvt_type& cvt)
+    { 
+      if (begin != end)
+      {
+        // convert requires contiguous string, so copy
+        std::basic_string<typename std::iterator_traits<InputIterator>::value_type>
+          seq(begin, end);
+        path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname, cvt);
+      }
+    }
+
+    //  -----  assignments  -----
+
+    path& operator=(const path& p)
+    {
+      m_pathname = p.m_pathname;
+      return *this;
+    }
+
+    template <class Source>
+      typename pdalboost::enable_if<path_traits::is_pathable<
+        typename pdalboost::decay<Source>::type>, path&>::type
+    operator=(Source const& source)
+    {
+      m_pathname.clear();
+      path_traits::dispatch(source, m_pathname);
+      return *this;
+    }
+
+    //  value_type overloads
+
+    path& operator=(const value_type* ptr)  // required in case ptr overlaps *this
+                                          {m_pathname = ptr; return *this;}
+    path& operator=(value_type* ptr)  // required in case ptr overlaps *this
+                                          {m_pathname = ptr; return *this;}
+    path& operator=(const string_type& s) {m_pathname = s; return *this;}
+    path& operator=(string_type& s)       {m_pathname = s; return *this;}
+
+    path& assign(const value_type* ptr, const codecvt_type&)  // required in case ptr overlaps *this
+                                          {m_pathname = ptr; return *this;}
+    template <class Source>
+    path& assign(Source const& source, const codecvt_type& cvt)
+    {
+      m_pathname.clear();
+      path_traits::dispatch(source, m_pathname, cvt);
+      return *this;
+    }
+
+    template <class InputIterator>
+    path& assign(InputIterator begin, InputIterator end)
+    {
+      m_pathname.clear();
+      if (begin != end)
+      {
+        std::basic_string<typename std::iterator_traits<InputIterator>::value_type>
+          seq(begin, end);
+        path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname);
+      }
+      return *this;
+    }
+
+    template <class InputIterator>
+    path& assign(InputIterator begin, InputIterator end, const codecvt_type& cvt)
+    { 
+      m_pathname.clear();
+      if (begin != end)
+      {
+        std::basic_string<typename std::iterator_traits<InputIterator>::value_type>
+          seq(begin, end);
+        path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname, cvt);
+      }
+      return *this;
+    }
+
+    //  -----  concatenation  -----
+
+    template <class Source>
+      typename pdalboost::enable_if<path_traits::is_pathable<
+        typename pdalboost::decay<Source>::type>, path&>::type
+    operator+=(Source const& source)
+    {
+      return concat(source);
+    }
+
+    //  value_type overloads. Same rationale as for constructors above
+    path& operator+=(const path& p)         { m_pathname += p.m_pathname; return *this; }
+    path& operator+=(const value_type* ptr) { m_pathname += ptr; return *this; }
+    path& operator+=(value_type* ptr)       { m_pathname += ptr; return *this; }
+    path& operator+=(const string_type& s)  { m_pathname += s; return *this; }
+    path& operator+=(string_type& s)        { m_pathname += s; return *this; }
+    path& operator+=(value_type c)          { m_pathname += c; return *this; }
+
+    template <class CharT>
+      typename pdalboost::enable_if<is_integral<CharT>, path&>::type
+    operator+=(CharT c)
+    {
+      CharT tmp[2];
+      tmp[0] = c;
+      tmp[1] = 0;
+      return concat(tmp);
+    }
+
+    template <class Source>
+    path& concat(Source const& source)
+    {
+      path_traits::dispatch(source, m_pathname);
+      return *this;
+    }
+
+    template <class Source>
+    path& concat(Source const& source, const codecvt_type& cvt)
+    {
+      path_traits::dispatch(source, m_pathname, cvt);
+      return *this;
+    }
+
+    template <class InputIterator>
+    path& concat(InputIterator begin, InputIterator end)
+    { 
+      if (begin == end)
+        return *this;
+      std::basic_string<typename std::iterator_traits<InputIterator>::value_type>
+        seq(begin, end);
+      path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname);
+      return *this;
+    }
+
+    template <class InputIterator>
+    path& concat(InputIterator begin, InputIterator end, const codecvt_type& cvt)
+    { 
+      if (begin == end)
+        return *this;
+      std::basic_string<typename std::iterator_traits<InputIterator>::value_type>
+        seq(begin, end);
+      path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname, cvt);
+      return *this;
+    }
+
+    //  -----  appends  -----
+
+    //  if a separator is added, it is the preferred separator for the platform;
+    //  slash for POSIX, backslash for Windows
+
+    path& operator/=(const path& p);
+
+    template <class Source>
+      typename pdalboost::enable_if<path_traits::is_pathable<
+        typename pdalboost::decay<Source>::type>, path&>::type
+    operator/=(Source const& source)
+    {
+      return append(source);
+    }
+
+    path& operator/=(const value_type* ptr);
+    path& operator/=(value_type* ptr)
+    {
+      return this->operator/=(const_cast<const value_type*>(ptr));
+    }
+    path& operator/=(const string_type& s) { return this->operator/=(path(s)); }
+    path& operator/=(string_type& s)       { return this->operator/=(path(s)); }
+
+    path& append(const value_type* ptr)  // required in case ptr overlaps *this
+    {
+      this->operator/=(ptr);
+      return *this;
+    }
+
+    path& append(const value_type* ptr, const codecvt_type&)  // required in case ptr overlaps *this
+    {
+      this->operator/=(ptr);
+      return *this;
+    }
+
+    template <class Source>
+    path& append(Source const& source);
+
+    template <class Source>
+    path& append(Source const& source, const codecvt_type& cvt);
+
+    template <class InputIterator>
+    path& append(InputIterator begin, InputIterator end);
+
+    template <class InputIterator>
+    path& append(InputIterator begin, InputIterator end, const codecvt_type& cvt);
+
+    //  -----  modifiers  -----
+
+    void   clear() BOOST_NOEXCEPT             { m_pathname.clear(); }
+    path&  make_preferred()
+#   ifdef BOOST_POSIX_API
+      { return *this; }  // POSIX no effect
+#   else // BOOST_WINDOWS_API
+      ;  // change slashes to backslashes
+#   endif
+    path&  remove_filename();
+    path&  remove_trailing_separator();
+    path&  replace_extension(const path& new_extension = path());
+    void   swap(path& rhs) BOOST_NOEXCEPT     { m_pathname.swap(rhs.m_pathname); }
+
+    //  -----  observers  -----
+  
+    //  For operating systems that format file paths differently than directory
+    //  paths, return values from observers are formatted as file names unless there
+    //  is a trailing separator, in which case returns are formatted as directory
+    //  paths. POSIX and Windows make no such distinction.
+
+    //  Implementations are permitted to return const values or const references.
+
+    //  The string or path returned by an observer are specified as being formatted
+    //  as "native" or "generic".
+    //
+    //  For POSIX, these are all the same format; slashes and backslashes are as input and
+    //  are not modified.
+    //
+    //  For Windows,   native:    as input; slashes and backslashes are not modified;
+    //                            this is the format of the internally stored string.
+    //                 generic:   backslashes are converted to slashes
+
+    //  -----  native format observers  -----
+
+    const string_type&  native() const BOOST_NOEXCEPT  { return m_pathname; }
+    const value_type*   c_str() const BOOST_NOEXCEPT   { return m_pathname.c_str(); }
+    string_type::size_type size() const BOOST_NOEXCEPT { return m_pathname.size(); }
+
+    template <class String>
+    String string() const;
+
+    template <class String>
+    String string(const codecvt_type& cvt) const;
+
+#   ifdef BOOST_WINDOWS_API
+    const std::string string() const
+    {
+      std::string tmp;
+      if (!m_pathname.empty())
+        path_traits::convert(&*m_pathname.begin(), &*m_pathname.begin()+m_pathname.size(),
+        tmp);
+      return tmp;
+    }
+    const std::string string(const codecvt_type& cvt) const
+    { 
+      std::string tmp;
+      if (!m_pathname.empty())
+        path_traits::convert(&*m_pathname.begin(), &*m_pathname.begin()+m_pathname.size(),
+          tmp, cvt);
+      return tmp;
+    }
+    
+    //  string_type is std::wstring, so there is no conversion
+    const std::wstring&  wstring() const { return m_pathname; }
+    const std::wstring&  wstring(const codecvt_type&) const { return m_pathname; }
+
+#   else   // BOOST_POSIX_API
+    //  string_type is std::string, so there is no conversion
+    const std::string&  string() const { return m_pathname; }
+    const std::string&  string(const codecvt_type&) const { return m_pathname; }
+
+    const std::wstring  wstring() const
+    {
+      std::wstring tmp;
+      if (!m_pathname.empty())
+        path_traits::convert(&*m_pathname.begin(), &*m_pathname.begin()+m_pathname.size(),
+          tmp);
+      return tmp;
+    }
+    const std::wstring  wstring(const codecvt_type& cvt) const
+    { 
+      std::wstring tmp;
+      if (!m_pathname.empty())
+        path_traits::convert(&*m_pathname.begin(), &*m_pathname.begin()+m_pathname.size(),
+          tmp, cvt);
+      return tmp;
+    }
+
+#   endif
+
+    //  -----  generic format observers  -----
+
+    //  Experimental generic function returning generic formatted path (i.e. separators
+    //  are forward slashes). Motivation: simpler than a family of generic_*string
+    //  functions.
+    path generic() const
+    {
+#   ifdef BOOST_WINDOWS_API
+      path tmp;
+      std::replace_copy(m_pathname.begin(), m_pathname.end(),
+        std::back_inserter(tmp.m_pathname), L'\\', L'/');
+      return tmp;
+#   else
+      return path(*this);
+#   endif
+    }
+
+    template <class String>
+    String generic_string() const;
+
+    template <class String>
+    String generic_string(const codecvt_type& cvt) const;
+
+#   ifdef BOOST_WINDOWS_API
+    const std::string   generic_string() const; 
+    const std::string   generic_string(const codecvt_type& cvt) const; 
+    const std::wstring  generic_wstring() const;
+    const std::wstring  generic_wstring(const codecvt_type&) const { return generic_wstring(); };
+
+#   else // BOOST_POSIX_API
+    //  On POSIX-like systems, the generic format is the same as the native format
+    const std::string&  generic_string() const  { return m_pathname; }
+    const std::string&  generic_string(const codecvt_type&) const  { return m_pathname; }
+    const std::wstring  generic_wstring() const { return wstring(); }
+    const std::wstring  generic_wstring(const codecvt_type& cvt) const { return wstring(cvt); }
+
+#   endif
+
+    //  -----  compare  -----
+
+    int compare(const path& p) const BOOST_NOEXCEPT;  // generic, lexicographical
+    int compare(const std::string& s) const { return compare(path(s)); }
+    int compare(const value_type* s) const  { return compare(path(s)); }
+
+    //  -----  decomposition  -----
+
+    path  root_path() const; 
+    path  root_name() const;         // returns 0 or 1 element path
+                                     // even on POSIX, root_name() is non-empty() for network paths
+    path  root_directory() const;    // returns 0 or 1 element path
+    path  relative_path() const;
+    path  parent_path() const;
+    path  filename() const;          // returns 0 or 1 element path
+    path  stem() const;              // returns 0 or 1 element path
+    path  extension() const;         // returns 0 or 1 element path
+
+    //  -----  query  -----
+
+    bool empty() const BOOST_NOEXCEPT{ return m_pathname.empty(); }
+    bool has_root_path() const       { return has_root_directory() || has_root_name(); }
+    bool has_root_name() const       { return !root_name().empty(); }
+    bool has_root_directory() const  { return !root_directory().empty(); }
+    bool has_relative_path() const   { return !relative_path().empty(); }
+    bool has_parent_path() const     { return !parent_path().empty(); }
+    bool has_filename() const        { return !m_pathname.empty(); }
+    bool has_stem() const            { return !stem().empty(); }
+    bool has_extension() const       { return !extension().empty(); }
+    bool is_relative() const         { return !is_absolute(); } 
+    bool is_absolute() const
+    {
+#     ifdef BOOST_WINDOWS_API
+      return has_root_name() && has_root_directory();
+#     else
+      return has_root_directory();
+#     endif
+    }
+
+    //  -----  lexical operations  -----
+
+    path  lexically_normal() const;
+    path  lexically_relative(const path& base) const;
+    path  lexically_proximate(const path& base) const
+    {
+      path tmp(lexically_relative(base));
+      return tmp.empty() ? *this : tmp;
+    }
+
+    //  -----  iterators  -----
+
+    class iterator;
+    typedef iterator const_iterator;
+    class reverse_iterator;
+    typedef reverse_iterator const_reverse_iterator;
+
+    iterator begin() const;
+    iterator end() const;
+    reverse_iterator rbegin() const;
+    reverse_iterator rend() const;
+
+    //  -----  static member functions  -----
+
+    static std::locale          imbue(const std::locale& loc);
+    static const codecvt_type&  codecvt();
+
+    //  -----  deprecated functions  -----
+
+# if defined(BOOST_FILESYSTEM_DEPRECATED) && defined(BOOST_FILESYSTEM_NO_DEPRECATED)
+#   error both BOOST_FILESYSTEM_DEPRECATED and BOOST_FILESYSTEM_NO_DEPRECATED are defined
+# endif
+
+# if !defined(BOOST_FILESYSTEM_NO_DEPRECATED)
+    //  recently deprecated functions supplied by default
+    path&  normalize()              { 
+                                      path tmp(lexically_normal());
+                                      m_pathname.swap(tmp.m_pathname);
+                                      return *this;
+                                    }
+    path&  remove_leaf()            { return remove_filename(); }
+    path   leaf() const             { return filename(); }
+    path   branch_path() const      { return parent_path(); }
+    bool   has_leaf() const         { return !m_pathname.empty(); }
+    bool   has_branch_path() const  { return !parent_path().empty(); }
+    bool   is_complete() const      { return is_absolute(); }
+# endif
+
+# if defined(BOOST_FILESYSTEM_DEPRECATED)
+    //  deprecated functions with enough signature or semantic changes that they are
+    //  not supplied by default 
+    const std::string file_string() const               { return string(); }
+    const std::string directory_string() const          { return string(); }
+    const std::string native_file_string() const        { return string(); }
+    const std::string native_directory_string() const   { return string(); }
+    const string_type external_file_string() const      { return native(); }
+    const string_type external_directory_string() const { return native(); }
+
+    //  older functions no longer supported
+    //typedef bool (*name_check)(const std::string & name);
+    //basic_path(const string_type& str, name_check) { operator/=(str); }
+    //basic_path(const typename string_type::value_type* s, name_check)
+    //  { operator/=(s);}
+    //static bool default_name_check_writable() { return false; } 
+    //static void default_name_check(name_check) {}
+    //static name_check default_name_check() { return 0; }
+    //basic_path& canonize();
+# endif
+
+//--------------------------------------------------------------------------------------//
+//                            class path private members                                //
+//--------------------------------------------------------------------------------------//
+
+  private:
+
+#   if defined(_MSC_VER)
+#     pragma warning(push) // Save warning settings
+#     pragma warning(disable : 4251) // disable warning: class 'std::basic_string<_Elem,_Traits,_Ax>'
+#   endif                            // needs to have dll-interface...
+/*
+      m_pathname has the type, encoding, and format required by the native
+      operating system. Thus for POSIX and Windows there is no conversion for
+      passing m_pathname.c_str() to the O/S API or when obtaining a path from the
+      O/S API. POSIX encoding is unspecified other than for dot and slash
+      characters; POSIX just treats paths as a sequence of bytes. Windows
+      encoding is UCS-2 or UTF-16 depending on the version.
+*/
+    string_type  m_pathname;  // Windows: as input; backslashes NOT converted to slashes,
+                              // slashes NOT converted to backslashes
+#   if defined(_MSC_VER)
+#     pragma warning(pop) // restore warning settings.
+#   endif 
+
+    string_type::size_type m_append_separator_if_needed();
+    //  Returns: If separator is to be appended, m_pathname.size() before append. Otherwise 0.
+    //  Note: An append is never performed if size()==0, so a returned 0 is unambiguous.
+
+    void m_erase_redundant_separator(string_type::size_type sep_pos);
+    string_type::size_type m_parent_path_end() const;
+
+    path& m_normalize();
+
+    // Was qualified; como433beta8 reports:
+    //    warning #427-D: qualified name is not allowed in member declaration 
+    friend class iterator;
+    friend bool operator<(const path& lhs, const path& rhs);
+
+    // see path::iterator::increment/decrement comment below
+    static void m_path_iterator_increment(path::iterator & it);
+    static void m_path_iterator_decrement(path::iterator & it);
+
+  };  // class path
+
+  namespace detail
+  {
+    BOOST_FILESYSTEM_DECL
+      int lex_compare(path::iterator first1, path::iterator last1,
+        path::iterator first2, path::iterator last2);
+    BOOST_FILESYSTEM_DECL
+      const path&  dot_path();
+    BOOST_FILESYSTEM_DECL
+      const path&  dot_dot_path();
+  }
+
+# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+  typedef path wpath;
+# endif
+
+  //------------------------------------------------------------------------------------//
+  //                             class path::iterator                                   //
+  //------------------------------------------------------------------------------------//
+ 
+  class path::iterator
+    : public pdalboost::iterator_facade<
+      path::iterator,
+      path const,
+      pdalboost::bidirectional_traversal_tag >
+  {
+  private:
+    friend class pdalboost::iterator_core_access;
+    friend class pdalboost::filesystem::path;
+    friend class pdalboost::filesystem::path::reverse_iterator;
+    friend void m_path_iterator_increment(path::iterator & it);
+    friend void m_path_iterator_decrement(path::iterator & it);
+
+    const path& dereference() const { return m_element; }
+
+    bool equal(const iterator & rhs) const
+    {
+      return m_path_ptr == rhs.m_path_ptr && m_pos == rhs.m_pos;
+    }
+
+    // iterator_facade derived classes don't seem to like implementations in
+    // separate translation unit dll's, so forward to class path static members
+    void increment() { m_path_iterator_increment(*this); }
+    void decrement() { m_path_iterator_decrement(*this); }
+
+    path                    m_element;   // current element
+    const path*             m_path_ptr;  // path being iterated over
+    string_type::size_type  m_pos;       // position of m_element in
+                                         // m_path_ptr->m_pathname.
+                                         // if m_element is implicit dot, m_pos is the
+                                         // position of the last separator in the path.
+                                         // end() iterator is indicated by 
+                                         // m_pos == m_path_ptr->m_pathname.size()
+  }; // path::iterator
+
+  //------------------------------------------------------------------------------------//
+  //                         class path::reverse_iterator                               //
+  //------------------------------------------------------------------------------------//
+ 
+  class path::reverse_iterator
+    : public pdalboost::iterator_facade<
+      path::reverse_iterator,
+      path const,
+      pdalboost::bidirectional_traversal_tag >
+  {
+  public:
+
+    explicit reverse_iterator(iterator itr) : m_itr(itr)
+    {
+      if (itr != itr.m_path_ptr->begin())
+        m_element = *--itr;
+    }
+  private:
+    friend class pdalboost::iterator_core_access;
+    friend class pdalboost::filesystem::path;
+
+    const path& dereference() const { return m_element; }
+    bool equal(const reverse_iterator& rhs) const { return m_itr == rhs.m_itr; }
+    void increment()
+    { 
+      --m_itr;
+      if (m_itr != m_itr.m_path_ptr->begin())
+      {
+        iterator tmp = m_itr;
+        m_element = *--tmp;
+      }
+    }
+    void decrement()
+    {
+      m_element = *m_itr;
+      ++m_itr;
+    }
+
+    iterator m_itr;
+    path     m_element;
+
+  }; // path::reverse_iterator
+
+  inline path::reverse_iterator path::rbegin() const { return reverse_iterator(end()); }
+  inline path::reverse_iterator path::rend() const   { return reverse_iterator(begin()); }
+
+
+  //------------------------------------------------------------------------------------//
+  //                                                                                    //
+  //                              non-member functions                                  //
+  //                                                                                    //
+  //------------------------------------------------------------------------------------//
+
+  //  std::lexicographical_compare would infinately recurse because path iterators
+  //  yield paths, so provide a path aware version
+  inline bool lexicographical_compare(path::iterator first1, path::iterator last1,
+    path::iterator first2, path::iterator last2)
+    { return detail::lex_compare(first1, last1, first2, last2) < 0; }
+  
+  inline bool operator==(const path& lhs, const path& rhs)              {return lhs.compare(rhs) == 0;}
+  inline bool operator==(const path& lhs, const path::string_type& rhs) {return lhs.compare(rhs) == 0;} 
+  inline bool operator==(const path::string_type& lhs, const path& rhs) {return rhs.compare(lhs) == 0;}
+  inline bool operator==(const path& lhs, const path::value_type* rhs)  {return lhs.compare(rhs) == 0;}
+  inline bool operator==(const path::value_type* lhs, const path& rhs)  {return rhs.compare(lhs) == 0;}
+  
+  inline bool operator!=(const path& lhs, const path& rhs)              {return lhs.compare(rhs) != 0;}
+  inline bool operator!=(const path& lhs, const path::string_type& rhs) {return lhs.compare(rhs) != 0;} 
+  inline bool operator!=(const path::string_type& lhs, const path& rhs) {return rhs.compare(lhs) != 0;}
+  inline bool operator!=(const path& lhs, const path::value_type* rhs)  {return lhs.compare(rhs) != 0;}
+  inline bool operator!=(const path::value_type* lhs, const path& rhs)  {return rhs.compare(lhs) != 0;}
+
+  // TODO: why do == and != have additional overloads, but the others don't?
+
+  inline bool operator<(const path& lhs, const path& rhs)  {return lhs.compare(rhs) < 0;}
+  inline bool operator<=(const path& lhs, const path& rhs) {return !(rhs < lhs);}
+  inline bool operator> (const path& lhs, const path& rhs) {return rhs < lhs;}
+  inline bool operator>=(const path& lhs, const path& rhs) {return !(lhs < rhs);}
+
+  inline std::size_t hash_value(const path& x)
+  {
+# ifdef BOOST_WINDOWS_API
+    std::size_t seed = 0;
+    for(const path::value_type* it = x.c_str(); *it; ++it)
+      hash_combine(seed, *it == '/' ? L'\\' : *it);
+    return seed;
+# else   // BOOST_POSIX_API
+    return hash_range(x.native().begin(), x.native().end());
+# endif
+  }
+
+  inline void swap(path& lhs, path& rhs)                   { lhs.swap(rhs); }
+
+  inline path operator/(const path& lhs, const path& rhs)  { return path(lhs) /= rhs; }
+
+  //  inserters and extractors
+  //    use pdalboost::io::quoted() to handle spaces in paths
+  //    use '&' as escape character to ease use for Windows paths
+
+  template <class Char, class Traits>
+  inline std::basic_ostream<Char, Traits>&
+  operator<<(std::basic_ostream<Char, Traits>& os, const path& p)
+  {
+    return os
+      << pdalboost::io::quoted(p.template string<std::basic_string<Char> >(), static_cast<Char>('&'));
+  }
+  
+  template <class Char, class Traits>
+  inline std::basic_istream<Char, Traits>&
+  operator>>(std::basic_istream<Char, Traits>& is, path& p)
+  {
+    std::basic_string<Char> str;
+    is >> pdalboost::io::quoted(str, static_cast<Char>('&'));
+    p = str;
+    return is;
+  }
+  
+  //  name_checks
+
+  //  These functions are holdovers from version 1. It isn't clear they have much
+  //  usefulness, or how to generalize them for later versions.
+
+  BOOST_FILESYSTEM_DECL bool portable_posix_name(const std::string & name);
+  BOOST_FILESYSTEM_DECL bool windows_name(const std::string & name);
+  BOOST_FILESYSTEM_DECL bool portable_name(const std::string & name);
+  BOOST_FILESYSTEM_DECL bool portable_directory_name(const std::string & name);
+  BOOST_FILESYSTEM_DECL bool portable_file_name(const std::string & name);
+  BOOST_FILESYSTEM_DECL bool native(const std::string & name);
+ 
+//--------------------------------------------------------------------------------------//
+//                     class path member template implementation                        //
+//--------------------------------------------------------------------------------------//
+
+  template <class InputIterator>
+  path& path::append(InputIterator begin, InputIterator end)
+  {
+    if (begin == end)
+      return *this;
+    string_type::size_type sep_pos(m_append_separator_if_needed());
+    std::basic_string<typename std::iterator_traits<InputIterator>::value_type>
+      seq(begin, end);
+    path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname);
+    if (sep_pos)
+      m_erase_redundant_separator(sep_pos);
+    return *this;
+  }
+
+  template <class InputIterator>
+  path& path::append(InputIterator begin, InputIterator end, const codecvt_type& cvt)
+  {
+    if (begin == end)
+      return *this;
+    string_type::size_type sep_pos(m_append_separator_if_needed());
+    std::basic_string<typename std::iterator_traits<InputIterator>::value_type>
+      seq(begin, end);
+    path_traits::convert(seq.c_str(), seq.c_str()+seq.size(), m_pathname, cvt);
+    if (sep_pos)
+      m_erase_redundant_separator(sep_pos);
+    return *this;
+  }
+
+  template <class Source>
+  path& path::append(Source const& source)
+  {
+    if (path_traits::empty(source))
+      return *this;
+    string_type::size_type sep_pos(m_append_separator_if_needed());
+    path_traits::dispatch(source, m_pathname);
+    if (sep_pos)
+      m_erase_redundant_separator(sep_pos);
+    return *this;
+  }
+
+  template <class Source>
+  path& path::append(Source const& source, const codecvt_type& cvt)
+  {
+    if (path_traits::empty(source))
+      return *this;
+    string_type::size_type sep_pos(m_append_separator_if_needed());
+    path_traits::dispatch(source, m_pathname, cvt);
+    if (sep_pos)
+      m_erase_redundant_separator(sep_pos);
+    return *this;
+  }
+
+//--------------------------------------------------------------------------------------//
+//                     class path member template specializations                       //
+//--------------------------------------------------------------------------------------//
+
+  template <> inline
+  std::string path::string<std::string>() const
+    { return string(); }
+
+  template <> inline
+  std::wstring path::string<std::wstring>() const
+    { return wstring(); }
+
+  template <> inline
+  std::string path::string<std::string>(const codecvt_type& cvt) const
+    { return string(cvt); }
+
+  template <> inline
+  std::wstring path::string<std::wstring>(const codecvt_type& cvt) const
+    { return wstring(cvt); }
+
+  template <> inline
+  std::string path::generic_string<std::string>() const
+    { return generic_string(); }
+
+  template <> inline
+  std::wstring path::generic_string<std::wstring>() const
+    { return generic_wstring(); }
+
+  template <> inline
+  std::string path::generic_string<std::string>(const codecvt_type& cvt) const
+    { return generic_string(cvt); }
+
+  template <> inline
+  std::wstring path::generic_string<std::wstring>(const codecvt_type& cvt) const
+    { return generic_wstring(cvt); }
+
+  //--------------------------------------------------------------------------------------//
+  //                     path_traits convert function implementations                     //
+  //                        requiring path::codecvt() be visable                          //
+  //--------------------------------------------------------------------------------------//
+
+namespace path_traits
+{  //  without codecvt
+
+  inline
+    void convert(const char* from,
+    const char* from_end,    // 0 for null terminated MBCS
+    std::wstring & to)
+  {
+    convert(from, from_end, to, path::codecvt());
+  }
+
+  inline
+    void convert(const wchar_t* from,
+    const wchar_t* from_end,  // 0 for null terminated MBCS
+    std::string & to)
+  {
+    convert(from, from_end, to, path::codecvt());
+  }
+
+  inline
+    void convert(const char* from,
+    std::wstring & to)
+  {
+    BOOST_ASSERT(from);
+    convert(from, 0, to, path::codecvt());
+  }
+
+  inline
+    void convert(const wchar_t* from,
+    std::string & to)
+  {
+    BOOST_ASSERT(from);
+    convert(from, 0, to, path::codecvt());
+  }
+}  // namespace path_traits
+}  // namespace filesystem
+}  // namespace pdalboost
+
+//----------------------------------------------------------------------------//
+
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
+
+#endif  // BOOST_FILESYSTEM_PATH_HPP
diff --git a/vendor/pdalboost/boost/filesystem/path_traits.hpp b/vendor/pdalboost/boost/filesystem/path_traits.hpp
new file mode 100644
index 0000000..1b81b88
--- /dev/null
+++ b/vendor/pdalboost/boost/filesystem/path_traits.hpp
@@ -0,0 +1,352 @@
+//  filesystem path_traits.hpp  --------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#ifndef BOOST_FILESYSTEM_PATH_TRAITS_HPP
+#define BOOST_FILESYSTEM_PATH_TRAITS_HPP
+
+#include <boost/config.hpp>
+
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/filesystem/config.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/decay.hpp>
+#include <boost/system/error_code.hpp>
+#include <cwchar>  // for mbstate_t
+#include <string>
+#include <vector>
+#include <list>
+#include <iterator>
+#include <locale>
+#include <boost/assert.hpp>
+// #include <iostream>   //**** comment me out ****
+
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+
+namespace pdalboost { namespace filesystem {
+
+  BOOST_FILESYSTEM_DECL const system::error_category& codecvt_error_category();
+  //  uses std::codecvt_base::result used for error codes:
+  //
+  //    ok:       Conversion successful.
+  //    partial:  Not all source characters converted; one or more additional source
+  //              characters are needed to produce the final target character, or the
+  //              size of the target intermediate buffer was too small to hold the result.
+  //    error:    A character in the source could not be converted to the target encoding.
+  //    noconv:   The source and target characters have the same type and encoding, so no
+  //              conversion was necessary.
+
+  class directory_entry;
+  
+namespace path_traits {
+ 
+  typedef std::codecvt<wchar_t, char, std::mbstate_t> codecvt_type;
+
+  //  is_pathable type trait; allows disabling over-agressive class path member templates
+
+  template <class T>
+  struct is_pathable { static const bool value = false; };
+
+  template<> struct is_pathable<char*>                  { static const bool value = true; };
+  template<> struct is_pathable<const char*>            { static const bool value = true; };
+  template<> struct is_pathable<wchar_t*>               { static const bool value = true; };
+  template<> struct is_pathable<const wchar_t*>         { static const bool value = true; };
+  template<> struct is_pathable<std::string>            { static const bool value = true; };
+  template<> struct is_pathable<std::wstring>           { static const bool value = true; };
+  template<> struct is_pathable<std::vector<char> >     { static const bool value = true; };
+  template<> struct is_pathable<std::vector<wchar_t> >  { static const bool value = true; };
+  template<> struct is_pathable<std::list<char> >       { static const bool value = true; };
+  template<> struct is_pathable<std::list<wchar_t> >    { static const bool value = true; };
+  template<> struct is_pathable<directory_entry>        { static const bool value = true; };
+
+  //  Pathable empty
+
+  template <class Container> inline
+    // disable_if aids broken compilers (IBM, old GCC, etc.) and is harmless for
+    // conforming compilers. Replace by plain "bool" at some future date (2012?) 
+    typename pdalboost::disable_if<pdalboost::is_array<Container>, bool>::type
+      empty(const Container & c)
+        { return c.begin() == c.end(); }
+
+  template <class T> inline
+    bool empty(T * const & c_str)
+  {
+    BOOST_ASSERT(c_str);
+    return !*c_str;
+  }
+
+  template <typename T, size_t N> inline
+     bool empty(T (&x)[N])
+       { return !x[0]; }
+
+  // value types differ  ---------------------------------------------------------------//
+  //
+  //   A from_end argument of 0 is less efficient than a known end, so use only if needed
+
+  //  with codecvt
+
+  BOOST_FILESYSTEM_DECL
+    void convert(const char* from,
+    const char* from_end,    // 0 for null terminated MBCS
+    std::wstring & to,
+    const codecvt_type& cvt);
+
+  BOOST_FILESYSTEM_DECL
+    void convert(const wchar_t* from,
+    const wchar_t* from_end,  // 0 for null terminated MBCS
+    std::string & to,
+    const codecvt_type& cvt);
+
+  inline
+    void convert(const char* from,
+    std::wstring & to,
+    const codecvt_type& cvt)
+  {
+    BOOST_ASSERT(from);
+    convert(from, 0, to, cvt);
+  }
+
+  inline
+    void convert(const wchar_t* from,
+    std::string & to,
+    const codecvt_type& cvt)
+  {
+    BOOST_ASSERT(from);
+    convert(from, 0, to, cvt);
+  }
+
+  //  without codecvt
+
+  inline
+    void convert(const char* from,
+    const char* from_end,    // 0 for null terminated MBCS
+    std::wstring & to);
+
+  inline
+    void convert(const wchar_t* from,
+    const wchar_t* from_end,  // 0 for null terminated MBCS
+    std::string & to);
+
+  inline
+    void convert(const char* from,
+    std::wstring & to);
+
+  inline
+    void convert(const wchar_t* from,
+    std::string & to);
+
+  // value types same  -----------------------------------------------------------------//
+
+  // char with codecvt
+
+  inline
+    void convert(const char* from, const char* from_end, std::string & to,
+    const codecvt_type&)
+  {
+    BOOST_ASSERT(from);
+    BOOST_ASSERT(from_end);
+    to.append(from, from_end);
+  }
+
+  inline
+    void convert(const char* from,
+    std::string & to,
+    const codecvt_type&)
+  {
+    BOOST_ASSERT(from);
+    to += from;
+  }
+
+  // wchar_t with codecvt
+
+  inline
+    void convert(const wchar_t* from, const wchar_t* from_end, std::wstring & to,
+    const codecvt_type&)
+  {
+    BOOST_ASSERT(from);
+    BOOST_ASSERT(from_end);
+    to.append(from, from_end);
+  }
+
+  inline
+    void convert(const wchar_t* from,
+    std::wstring & to,
+    const codecvt_type&)
+  {
+    BOOST_ASSERT(from);
+    to += from;
+  }
+
+  // char without codecvt
+
+  inline
+    void convert(const char* from, const char* from_end, std::string & to)
+  {
+    BOOST_ASSERT(from);
+    BOOST_ASSERT(from_end);
+    to.append(from, from_end);
+  }
+
+  inline
+    void convert(const char* from, std::string & to)
+  {
+    BOOST_ASSERT(from);
+    to += from;
+  }
+
+  // wchar_t without codecvt
+
+  inline
+    void convert(const wchar_t* from, const wchar_t* from_end, std::wstring & to)
+  {
+    BOOST_ASSERT(from);
+    BOOST_ASSERT(from_end);
+    to.append(from, from_end);
+  }
+
+  inline
+    void convert(const wchar_t* from, std::wstring & to)
+  {
+    BOOST_ASSERT(from);
+    to += from;
+  }
+
+  //  Source dispatch  -----------------------------------------------------------------//
+
+  //  contiguous containers with codecvt
+  template <class U> inline
+    void dispatch(const std::string& c, U& to, const codecvt_type& cvt)
+  {
+    if (c.size())
+      convert(&*c.begin(), &*c.begin() + c.size(), to, cvt);
+  }
+  template <class U> inline
+    void dispatch(const std::wstring& c, U& to, const codecvt_type& cvt)
+  {
+    if (c.size())
+      convert(&*c.begin(), &*c.begin() + c.size(), to, cvt);
+  }
+  template <class U> inline
+    void dispatch(const std::vector<char>& c, U& to, const codecvt_type& cvt)
+  {
+    if (c.size())
+      convert(&*c.begin(), &*c.begin() + c.size(), to, cvt);
+  }
+  template <class U> inline
+    void dispatch(const std::vector<wchar_t>& c, U& to, const codecvt_type& cvt)
+  {
+    if (c.size())
+      convert(&*c.begin(), &*c.begin() + c.size(), to, cvt);
+  }
+
+  //  contiguous containers without codecvt
+  template <class U> inline
+    void dispatch(const std::string& c, U& to)
+  {
+    if (c.size())
+      convert(&*c.begin(), &*c.begin() + c.size(), to);
+  }
+  template <class U> inline
+    void dispatch(const std::wstring& c, U& to)
+  {
+    if (c.size())
+      convert(&*c.begin(), &*c.begin() + c.size(), to);
+  }
+  template <class U> inline
+    void dispatch(const std::vector<char>& c, U& to)
+  {
+    if (c.size())
+      convert(&*c.begin(), &*c.begin() + c.size(), to);
+  }
+  template <class U> inline
+    void dispatch(const std::vector<wchar_t>& c, U& to)
+  {
+    if (c.size())
+      convert(&*c.begin(), &*c.begin() + c.size(), to);
+  }
+
+  //  non-contiguous containers with codecvt
+  template <class Container, class U> inline
+    // disable_if aids broken compilers (IBM, old GCC, etc.) and is harmless for
+    // conforming compilers. Replace by plain "void" at some future date (2012?) 
+    typename pdalboost::disable_if<pdalboost::is_array<Container>, void>::type
+    dispatch(const Container & c, U& to, const codecvt_type& cvt)
+  {
+    if (c.size())
+    {
+      std::basic_string<typename Container::value_type> s(c.begin(), c.end());
+      convert(s.c_str(), s.c_str()+s.size(), to, cvt);
+    }
+  }
+
+  //  c_str
+  template <class T, class U> inline
+    void dispatch(T * const & c_str, U& to, const codecvt_type& cvt)
+  {
+    //    std::cout << "dispatch() const T *\n";
+    BOOST_ASSERT(c_str);
+    convert(c_str, to, cvt);
+  }
+
+  //  Note: there is no dispatch on C-style arrays because the array may
+  //  contain a string smaller than the array size. 
+
+  BOOST_FILESYSTEM_DECL
+    void dispatch(const directory_entry & de,
+#                ifdef BOOST_WINDOWS_API
+    std::wstring & to,
+#                else   
+    std::string & to,
+#                endif
+    const codecvt_type&);
+
+  //  non-contiguous containers without codecvt
+  template <class Container, class U> inline
+    // disable_if aids broken compilers (IBM, old GCC, etc.) and is harmless for
+    // conforming compilers. Replace by plain "void" at some future date (2012?) 
+    typename pdalboost::disable_if<pdalboost::is_array<Container>, void>::type
+    dispatch(const Container & c, U& to)
+  {
+    if (c.size())
+    {
+      std::basic_string<typename Container::value_type> seq(c.begin(), c.end());
+      convert(seq.c_str(), seq.c_str()+seq.size(), to);
+    }
+  }
+
+  //  c_str
+  template <class T, class U> inline
+    void dispatch(T * const & c_str, U& to)
+  {
+    //    std::cout << "dispatch() const T *\n";
+    BOOST_ASSERT(c_str);
+    convert(c_str, to);
+  }
+
+  //  Note: there is no dispatch on C-style arrays because the array may
+  //  contain a string smaller than the array size. 
+
+  BOOST_FILESYSTEM_DECL
+    void dispatch(const directory_entry & de,
+#                ifdef BOOST_WINDOWS_API
+    std::wstring & to
+#                else   
+    std::string & to
+#                endif
+    );
+
+
+}}} // namespace pdalboost::filesystem::path_traits
+
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
+
+#endif  // BOOST_FILESYSTEM_PATH_TRAITS_HPP
diff --git a/vendor/pdalboost/boost/filesystem/string_file.hpp b/vendor/pdalboost/boost/filesystem/string_file.hpp
new file mode 100644
index 0000000..7450cf9
--- /dev/null
+++ b/vendor/pdalboost/boost/filesystem/string_file.hpp
@@ -0,0 +1,43 @@
+//  filesystem/string_file.hpp  --------------------------------------------------------//
+
+//  Copyright Beman Dawes 2015
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#ifndef BOOST_FILESYSTEM_STRING_FILE_HPP
+#define BOOST_FILESYSTEM_STRING_FILE_HPP
+
+#include <string>
+#include <boost/filesystem/fstream.hpp>
+#include <boost/filesystem/operations.hpp>
+
+namespace pdalboost
+{
+namespace filesystem
+{
+inline
+void save_string_file(const path& p, const std::string& str)
+{
+  ofstream file;
+  file.exceptions(std::ofstream::failbit | std::ofstream::badbit);
+  file.open(p, std::ios_base::binary);
+  file.write(str.c_str(), str.size());
+}
+
+inline
+void load_string_file(const path& p, std::string& str)
+{
+  ifstream file;
+  file.exceptions(std::ifstream::failbit | std::ifstream::badbit);
+  file.open(p, std::ios_base::binary);
+  std::size_t sz = static_cast<std::size_t>(file_size(p));
+  str.resize(sz, '\0');
+  file.read(&str[0], sz);
+}
+}  // namespace filesystem
+}  // namespace pdalboost
+
+#endif  // include guard
diff --git a/vendor/pdalboost/boost/foreach.hpp b/vendor/pdalboost/boost/foreach.hpp
new file mode 100644
index 0000000..a6cb3f8
--- /dev/null
+++ b/vendor/pdalboost/boost/foreach.hpp
@@ -0,0 +1,1127 @@
+///////////////////////////////////////////////////////////////////////////////
+// foreach.hpp header file
+//
+// Copyright 2004 Eric Niebler.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/foreach for documentation
+//
+// Credits:
+//  Anson Tsao        - for the initial inspiration and several good suggestions.
+//  Thorsten Ottosen  - for Boost.Range, and for suggesting a way to detect
+//                      const-qualified rvalues at compile time on VC7.1+
+//  Russell Hind      - For help porting to Borland
+//  Alisdair Meredith - For help porting to Borland
+//  Stefan Slapeta    - For help porting to Intel
+//  David Jenkins     - For help finding a Microsoft Code Analysis bug
+//  mimomorin at ...     - For a patch to use rvalue refs on supporting compilers
+
+#ifndef BOOST_FOREACH
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <cstddef>
+#include <utility>  // for std::pair
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+// Some compilers let us detect even const-qualified rvalues at compile-time
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)                                                   \
+ || defined(BOOST_MSVC) && !defined(_PREFAST_)                                 \
+ || (BOOST_WORKAROUND(__GNUC__, == 4) && (__GNUC_MINOR__ <= 5) && !defined(BOOST_INTEL) &&       \
+                                                                  !defined(BOOST_CLANG))         \
+ || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ >= 4) && !defined(BOOST_INTEL) &&       \
+                                                                  !defined(BOOST_CLANG))
+# define BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION
+#else
+// Some compilers allow temporaries to be bound to non-const references.
+// These compilers make it impossible to for BOOST_FOREACH to detect
+// temporaries and avoid reevaluation of the collection expression.
+# if BOOST_WORKAROUND(__BORLANDC__, < 0x593)                                                    \
+  || (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) && defined(_MSC_VER))                   \
+  || BOOST_WORKAROUND(__SUNPRO_CC, < 0x5100)                                                    \
+  || BOOST_WORKAROUND(__DECCXX_VER, <= 60590042)
+#  define BOOST_FOREACH_NO_RVALUE_DETECTION
+# endif
+// Some compilers do not correctly implement the lvalue/rvalue conversion
+// rules of the ternary conditional operator.
+# if defined(BOOST_FOREACH_NO_RVALUE_DETECTION)                                                 \
+  || defined(BOOST_NO_SFINAE)                                                                   \
+  || BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400))                                        \
+  || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(1400))                                   \
+  || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ <= 3) && defined(__APPLE_CC__))       \
+  || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))                                         \
+  || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206))                                      \
+  || BOOST_WORKAROUND(__SUNPRO_CC, >= 0x5100)                                                   \
+  || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x590))
+#  define BOOST_FOREACH_NO_CONST_RVALUE_DETECTION
+# else
+#  define BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
+# endif
+#endif
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/logical.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/rend.hpp>
+#include <boost/range/rbegin.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/reverse_iterator.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/is_rvalue_reference.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/utility/addressof.hpp>
+#include <boost/foreach_fwd.hpp>
+
+#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
+# include <new>
+# include <boost/aligned_storage.hpp>
+# include <boost/utility/enable_if.hpp>
+# include <boost/type_traits/remove_const.hpp>
+#endif
+
+namespace pdalboost
+{
+
+// forward declarations for iterator_range
+template<typename T>
+class iterator_range;
+
+// forward declarations for sub_range
+template<typename T>
+class sub_range;
+
+namespace foreach
+{
+    ///////////////////////////////////////////////////////////////////////////////
+    // in_range
+    //
+    template<typename T>
+    inline std::pair<T, T> in_range(T begin, T end)
+    {
+        return std::make_pair(begin, end);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////////
+    // pdalboost::foreach::is_lightweight_proxy
+    //   Specialize this for user-defined collection types if they are inexpensive to copy.
+    //   This tells BOOST_FOREACH it can avoid the rvalue/lvalue detection stuff.
+    template<typename T>
+    struct is_lightweight_proxy
+      : pdalboost::mpl::false_
+    {
+    };
+
+    ///////////////////////////////////////////////////////////////////////////////
+    // pdalboost::foreach::is_noncopyable
+    //   Specialize this for user-defined collection types if they cannot be copied.
+    //   This also tells BOOST_FOREACH to avoid the rvalue/lvalue detection stuff.
+    template<typename T>
+    struct is_noncopyable
+    #if !defined(BOOST_BROKEN_IS_BASE_AND_DERIVED) && !defined(BOOST_NO_IS_ABSTRACT)
+      : pdalboost::mpl::or_<
+            pdalboost::is_abstract<T>
+          , pdalboost::is_base_and_derived<pdalboost::noncopyable, T>
+        >
+    #elif !defined(BOOST_BROKEN_IS_BASE_AND_DERIVED)
+      : pdalboost::is_base_and_derived<pdalboost::noncopyable, T>
+    #elif !defined(BOOST_NO_IS_ABSTRACT)
+      : pdalboost::is_abstract<T>
+    #else
+      : pdalboost::mpl::false_
+    #endif
+    {
+    };
+
+} // namespace foreach
+
+} // namespace pdalboost
+
+// vc6/7 needs help ordering the following overloads
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+# define BOOST_FOREACH_TAG_DEFAULT ...
+#else
+# define BOOST_FOREACH_TAG_DEFAULT pdalboost::foreach::tag
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// boost_foreach_is_lightweight_proxy
+//   Another customization point for the is_lightweight_proxy optimization,
+//   this one works on legacy compilers. Overload boost_foreach_is_lightweight_proxy
+//   at the global namespace for your type.
+template<typename T>
+inline pdalboost::foreach::is_lightweight_proxy<T> *
+boost_foreach_is_lightweight_proxy(T *&, BOOST_FOREACH_TAG_DEFAULT) { return 0; }
+
+template<typename T>
+inline pdalboost::mpl::true_ *
+boost_foreach_is_lightweight_proxy(std::pair<T, T> *&, pdalboost::foreach::tag) { return 0; }
+
+template<typename T>
+inline pdalboost::mpl::true_ *
+boost_foreach_is_lightweight_proxy(pdalboost::iterator_range<T> *&, pdalboost::foreach::tag) { return 0; }
+
+template<typename T>
+inline pdalboost::mpl::true_ *
+boost_foreach_is_lightweight_proxy(pdalboost::sub_range<T> *&, pdalboost::foreach::tag) { return 0; }
+
+template<typename T>
+inline pdalboost::mpl::true_ *
+boost_foreach_is_lightweight_proxy(T **&, pdalboost::foreach::tag) { return 0; }
+
+///////////////////////////////////////////////////////////////////////////////
+// boost_foreach_is_noncopyable
+//   Another customization point for the is_noncopyable trait,
+//   this one works on legacy compilers. Overload boost_foreach_is_noncopyable
+//   at the global namespace for your type.
+template<typename T>
+inline pdalboost::foreach::is_noncopyable<T> *
+boost_foreach_is_noncopyable(T *&, BOOST_FOREACH_TAG_DEFAULT) { return 0; }
+
+namespace pdalboost
+{
+
+namespace foreach_detail_
+{
+
+///////////////////////////////////////////////////////////////////////////////
+// Define some utilities for assessing the properties of expressions
+//
+template<typename Bool1, typename Bool2>
+inline pdalboost::mpl::and_<Bool1, Bool2> *and_(Bool1 *, Bool2 *) { return 0; }
+
+template<typename Bool1, typename Bool2, typename Bool3>
+inline pdalboost::mpl::and_<Bool1, Bool2, Bool3> *and_(Bool1 *, Bool2 *, Bool3 *) { return 0; }
+
+template<typename Bool1, typename Bool2>
+inline pdalboost::mpl::or_<Bool1, Bool2> *or_(Bool1 *, Bool2 *) { return 0; }
+
+template<typename Bool1, typename Bool2, typename Bool3>
+inline pdalboost::mpl::or_<Bool1, Bool2, Bool3> *or_(Bool1 *, Bool2 *, Bool3 *) { return 0; }
+
+template<typename Bool1>
+inline pdalboost::mpl::not_<Bool1> *not_(Bool1 *) { return 0; }
+
+template<typename T>
+inline pdalboost::is_array<T> *is_array_(T const &) { return 0; }
+
+template<typename T>
+inline pdalboost::is_const<T> *is_const_(T &) { return 0; }
+
+#ifndef BOOST_FOREACH_NO_RVALUE_DETECTION
+template<typename T>
+inline pdalboost::mpl::true_ *is_const_(T const &) { return 0; }
+#endif
+
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+template<typename T>
+inline pdalboost::mpl::false_ *is_rvalue_(T &, int) { return 0; }
+
+template<typename T>
+inline pdalboost::mpl::true_ *is_rvalue_(T const &, ...) { return 0; }
+#else
+template<typename T>
+inline pdalboost::is_rvalue_reference<T &&> *is_rvalue_(T &&, int) { return 0; }
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// auto_any_t/auto_any
+//  General utility for putting an object of any type into automatic storage
+struct auto_any_base
+{
+    // auto_any_base must evaluate to false in boolean context so that
+    // they can be declared in if() statements.
+    operator bool() const
+    {
+        return false;
+    }
+};
+
+template<typename T>
+struct auto_any : auto_any_base
+{
+    explicit auto_any(T const &t)
+      : item(t)
+    {
+    }
+
+    // temporaries of type auto_any will be bound to const auto_any_base
+    // references, but we still want to be able to mutate the stored
+    // data, so declare it as mutable.
+    mutable T item;
+};
+
+typedef auto_any_base const &auto_any_t;
+
+template<typename T, typename C>
+inline BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_<C, T const, T>::type &auto_any_cast(auto_any_t a)
+{
+    return static_cast<auto_any<T> const &>(a).item;
+}
+
+typedef pdalboost::mpl::true_ const_;
+
+///////////////////////////////////////////////////////////////////////////////
+// type2type
+//
+template<typename T, typename C = pdalboost::mpl::false_>
+struct type2type
+  : pdalboost::mpl::if_<C, T const, T>
+{
+};
+
+template<typename T>
+struct wrap_cstr
+{
+    typedef T type;
+};
+
+template<>
+struct wrap_cstr<char *>
+{
+    typedef wrap_cstr<char *> type;
+    typedef char *iterator;
+    typedef char *const_iterator;
+};
+
+template<>
+struct wrap_cstr<char const *>
+{
+    typedef wrap_cstr<char const *> type;
+    typedef char const *iterator;
+    typedef char const *const_iterator;
+};
+
+template<>
+struct wrap_cstr<wchar_t *>
+{
+    typedef wrap_cstr<wchar_t *> type;
+    typedef wchar_t *iterator;
+    typedef wchar_t *const_iterator;
+};
+
+template<>
+struct wrap_cstr<wchar_t const *>
+{
+    typedef wrap_cstr<wchar_t const *> type;
+    typedef wchar_t const *iterator;
+    typedef wchar_t const *const_iterator;
+};
+
+template<typename T>
+struct is_char_array
+  : mpl::and_<
+        is_array<T>
+      , mpl::or_<
+            is_convertible<T, char const *>
+          , is_convertible<T, wchar_t const *>
+        >
+    >
+{};
+
+template<typename T, typename C = pdalboost::mpl::false_>
+struct foreach_iterator
+{
+    // **** READ THIS IF YOUR COMPILE BREAKS HERE ****
+    //
+    // There is an ambiguity about how to iterate over arrays of char and wchar_t. 
+    // Should the last array element be treated as a null terminator to be skipped, or
+    // is it just like any other element in the array? To fix the problem, you must
+    // say which behavior you want.
+    //
+    // To treat the container as a null-terminated string, merely cast it to a
+    // char const *, as in BOOST_FOREACH( char ch, (char const *)"hello" ) ...
+    //
+    // To treat the container as an array, use pdalboost::as_array() in <boost/range/as_array.hpp>,
+    // as in BOOST_FOREACH( char ch, pdalboost::as_array("hello") ) ...
+    BOOST_MPL_ASSERT_MSG( (!is_char_array<T>::value), IS_THIS_AN_ARRAY_OR_A_NULL_TERMINATED_STRING, (T&) );
+
+    // If the type is a pointer to a null terminated string (as opposed 
+    // to an array type), there is no ambiguity.
+    typedef BOOST_DEDUCED_TYPENAME wrap_cstr<T>::type container;
+
+    typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::eval_if<
+        C
+      , range_const_iterator<container>
+      , range_mutable_iterator<container>
+    >::type type;
+};
+
+
+template<typename T, typename C = pdalboost::mpl::false_>
+struct foreach_reverse_iterator
+{
+    // **** READ THIS IF YOUR COMPILE BREAKS HERE ****
+    //
+    // There is an ambiguity about how to iterate over arrays of char and wchar_t. 
+    // Should the last array element be treated as a null terminator to be skipped, or
+    // is it just like any other element in the array? To fix the problem, you must
+    // say which behavior you want.
+    //
+    // To treat the container as a null-terminated string, merely cast it to a
+    // char const *, as in BOOST_FOREACH( char ch, (char const *)"hello" ) ...
+    //
+    // To treat the container as an array, use pdalboost::as_array() in <boost/range/as_array.hpp>,
+    // as in BOOST_FOREACH( char ch, pdalboost::as_array("hello") ) ...
+    BOOST_MPL_ASSERT_MSG( (!is_char_array<T>::value), IS_THIS_AN_ARRAY_OR_A_NULL_TERMINATED_STRING, (T&) );
+
+    // If the type is a pointer to a null terminated string (as opposed 
+    // to an array type), there is no ambiguity.
+    typedef BOOST_DEDUCED_TYPENAME wrap_cstr<T>::type container;
+
+    typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::eval_if<
+        C
+      , range_reverse_iterator<container const>
+      , range_reverse_iterator<container>
+    >::type type;
+};
+
+template<typename T, typename C = pdalboost::mpl::false_>
+struct foreach_reference
+  : iterator_reference<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
+{
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// encode_type
+//
+template<typename T>
+inline type2type<T> *encode_type(T &, pdalboost::false_type*) { return 0; }
+
+template<typename T>
+inline type2type<T, const_> *encode_type(T const &, pdalboost::true_type*) { return 0; }
+
+template<typename T>
+inline type2type<T> *encode_type(T &, pdalboost::mpl::false_*) { return 0; }
+
+template<typename T>
+inline type2type<T, const_> *encode_type(T const &, pdalboost::mpl::true_*) { return 0; }
+
+///////////////////////////////////////////////////////////////////////////////
+// set_false
+//
+inline bool set_false(bool &b)
+{
+    b = false;
+    return false;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// to_ptr
+//
+template<typename T>
+inline T *&to_ptr(T const &)
+{
+    static T *t = 0;
+    return t;
+}
+
+// Borland needs a little extra help with arrays
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+template<typename T,std::size_t N>
+inline T (*&to_ptr(T (&)[N]))[N]
+{
+    static T (*t)[N] = 0;
+    return t;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// derefof
+//
+template<typename T>
+inline T &derefof(T *t)
+{
+    // This is a work-around for a compiler bug in Borland. If T* is a pointer to array type U(*)[N],
+    // then dereferencing it results in a U* instead of U(&)[N]. The cast forces the issue.
+    return reinterpret_cast<T &>(
+        *const_cast<char *>(
+            reinterpret_cast<char const volatile *>(t)
+        )
+    );
+}
+
+# define BOOST_FOREACH_DEREFOF(T) pdalboost::foreach_detail_::derefof(*T)
+#else
+# define BOOST_FOREACH_DEREFOF(T) (*T)
+#endif
+
+#if defined(BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION)                                  \
+ && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+///////////////////////////////////////////////////////////////////////////////
+// Rvalue references makes it drop-dead simple to detect at compile time
+// whether an expression is an rvalue.
+///////////////////////////////////////////////////////////////////////////////
+
+# define BOOST_FOREACH_IS_RVALUE(COL)                                                           \
+    pdalboost::foreach_detail_::is_rvalue_((COL), 0)
+
+#elif defined(BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION)                                \
+ && defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+///////////////////////////////////////////////////////////////////////////////
+// Detect at compile-time whether an expression yields an rvalue or
+// an lvalue. This is rather non-standard, but some popular compilers
+// accept it.
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+// rvalue_probe
+//
+template<typename T>
+struct rvalue_probe
+{
+    struct private_type_ {};
+    // can't ever return an array by value
+    typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_<
+        pdalboost::mpl::or_<pdalboost::is_abstract<T>, pdalboost::is_array<T> >, private_type_, T
+    >::type value_type;
+    operator value_type() { return *reinterpret_cast<value_type *>(this); } // never called
+    operator T &() const { return *reinterpret_cast<T *>(const_cast<rvalue_probe *>(this)); } // never called
+};
+
+template<typename T>
+rvalue_probe<T> const make_probe(T const &)
+{
+    return rvalue_probe<T>();
+}
+
+# define BOOST_FOREACH_IS_RVALUE(COL)                                                           \
+    pdalboost::foreach_detail_::and_(                                                               \
+        pdalboost::foreach_detail_::not_(pdalboost::foreach_detail_::is_array_(COL))                    \
+      , (true ? 0 : pdalboost::foreach_detail_::is_rvalue_(                                         \
+            (true ? pdalboost::foreach_detail_::make_probe(COL) : (COL)), 0)))
+
+#elif defined(BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION)
+///////////////////////////////////////////////////////////////////////////////
+// Detect at run-time whether an expression yields an rvalue
+// or an lvalue. This is 100% standard C++, but not all compilers
+// accept it. Also, it causes FOREACH to break when used with non-
+// copyable collection types.
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+// rvalue_probe
+//
+template<typename T>
+struct rvalue_probe
+{
+    rvalue_probe(T &t, bool &b)
+      : value(t)
+      , is_rvalue(b)
+    {
+    }
+
+    struct private_type_ {};
+    // can't ever return an array or an abstract type by value
+    #ifdef BOOST_NO_IS_ABSTRACT
+    typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_<
+        pdalboost::is_array<T>, private_type_, T
+    >::type value_type;
+    #else
+    typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_<
+        pdalboost::mpl::or_<pdalboost::is_abstract<T>, pdalboost::is_array<T> >, private_type_, T
+    >::type value_type;
+    #endif
+    
+    operator value_type()
+    {
+        this->is_rvalue = true;
+        return this->value;
+    }
+
+    operator T &() const
+    {
+        return this->value;
+    }
+
+private:
+    T &value;
+    bool &is_rvalue;
+};
+
+template<typename T>
+rvalue_probe<T> make_probe(T &t, bool &b) { return rvalue_probe<T>(t, b); }
+
+template<typename T>
+rvalue_probe<T const> make_probe(T const &t, bool &b)  { return rvalue_probe<T const>(t, b); }
+
+///////////////////////////////////////////////////////////////////////////////
+// simple_variant
+//  holds either a T or a T const*
+template<typename T>
+struct simple_variant
+{
+    simple_variant(T const *t)
+      : is_rvalue(false)
+    {
+        *static_cast<T const **>(this->data.address()) = t;
+    }
+
+    simple_variant(T const &t)
+      : is_rvalue(true)
+    {
+        ::new(this->data.address()) T(t);
+    }
+
+    simple_variant(simple_variant const &that)
+      : is_rvalue(that.is_rvalue)
+    {
+        if(this->is_rvalue)
+            ::new(this->data.address()) T(*that.get());
+        else
+            *static_cast<T const **>(this->data.address()) = that.get();
+    }
+
+    ~simple_variant()
+    {
+        if(this->is_rvalue)
+            this->get()->~T();
+    }
+
+    T const *get() const
+    {
+        if(this->is_rvalue)
+            return static_cast<T const *>(this->data.address());
+        else
+            return *static_cast<T const * const *>(this->data.address());
+    }
+
+private:
+    enum size_type { size = sizeof(T) > sizeof(T*) ? sizeof(T) : sizeof(T*) };
+    simple_variant &operator =(simple_variant const &); 
+    bool const is_rvalue;
+    aligned_storage<size> data;
+};
+
+// If the collection is an array or is noncopyable, it must be an lvalue.
+// If the collection is a lightweight proxy, treat it as an rvalue
+// BUGBUG what about a noncopyable proxy?
+template<typename LValue, typename IsProxy>
+inline BOOST_DEDUCED_TYPENAME pdalboost::enable_if<pdalboost::mpl::or_<LValue, IsProxy>, IsProxy>::type *
+should_copy_impl(LValue *, IsProxy *, bool *)
+{
+    return 0;
+}
+
+// Otherwise, we must determine at runtime whether it's an lvalue or rvalue
+inline bool *
+should_copy_impl(pdalboost::mpl::false_ *, pdalboost::mpl::false_ *, bool *is_rvalue)
+{
+    return is_rvalue;
+}
+
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// contain
+//
+template<typename T>
+inline auto_any<T> contain(T const &t, pdalboost::mpl::true_ *) // rvalue
+{
+    return auto_any<T>(t);
+}
+
+template<typename T>
+inline auto_any<T *> contain(T &t, pdalboost::mpl::false_ *) // lvalue
+{
+    // Cannot seem to get sunpro to handle addressof() with array types.
+    #if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x570))
+    return auto_any<T *>(&t);
+    #else
+    return auto_any<T *>(pdalboost::addressof(t));
+    #endif
+}
+
+#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
+template<typename T>
+inline auto_any<simple_variant<T> >
+contain(T const &t, bool *rvalue)
+{
+    return auto_any<simple_variant<T> >(*rvalue ? simple_variant<T>(t) : simple_variant<T>(&t));
+}
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// begin
+//
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
+begin(auto_any_t col, type2type<T, C> *, pdalboost::mpl::true_ *) // rvalue
+{
+    return auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>(
+        pdalboost::begin(auto_any_cast<T, C>(col)));
+}
+
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
+begin(auto_any_t col, type2type<T, C> *, pdalboost::mpl::false_ *) // lvalue
+{
+    typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
+    typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iterator;
+    return auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>(
+        iterator(pdalboost::begin(BOOST_FOREACH_DEREFOF((auto_any_cast<type *, pdalboost::mpl::false_>(col))))));
+}
+
+#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
+template<typename T>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, const_>::type>
+begin(auto_any_t col, type2type<T, const_> *, bool *)
+{
+    return auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, const_>::type>(
+        pdalboost::begin(*auto_any_cast<simple_variant<T>, pdalboost::mpl::false_>(col).get()));
+}
+#endif
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+template<typename T, typename C>
+inline auto_any<T *>
+begin(auto_any_t col, type2type<T *, C> *, pdalboost::mpl::true_ *) // null-terminated C-style strings
+{
+    return auto_any<T *>(auto_any_cast<T *, pdalboost::mpl::false_>(col));
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// end
+//
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
+end(auto_any_t col, type2type<T, C> *, pdalboost::mpl::true_ *) // rvalue
+{
+    return auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>(
+        pdalboost::end(auto_any_cast<T, C>(col)));
+}
+
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
+end(auto_any_t col, type2type<T, C> *, pdalboost::mpl::false_ *) // lvalue
+{
+    typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
+    typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iterator;
+    return auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>(
+        iterator(pdalboost::end(BOOST_FOREACH_DEREFOF((auto_any_cast<type *, pdalboost::mpl::false_>(col))))));
+}
+
+#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
+template<typename T>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, const_>::type>
+end(auto_any_t col, type2type<T, const_> *, bool *)
+{
+    return auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, const_>::type>(
+        pdalboost::end(*auto_any_cast<simple_variant<T>, pdalboost::mpl::false_>(col).get()));
+}
+#endif
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+template<typename T, typename C>
+inline auto_any<int>
+end(auto_any_t, type2type<T *, C> *, pdalboost::mpl::true_ *) // null-terminated C-style strings
+{
+    return auto_any<int>(0); // not used
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// done
+//
+template<typename T, typename C>
+inline bool done(auto_any_t cur, auto_any_t end, type2type<T, C> *)
+{
+    typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iter_t;
+    return auto_any_cast<iter_t, pdalboost::mpl::false_>(cur) == auto_any_cast<iter_t, pdalboost::mpl::false_>(end);
+}
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+template<typename T, typename C>
+inline bool done(auto_any_t cur, auto_any_t, type2type<T *, C> *) // null-terminated C-style strings
+{
+    return ! *auto_any_cast<T *, pdalboost::mpl::false_>(cur);
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// next
+//
+template<typename T, typename C>
+inline void next(auto_any_t cur, type2type<T, C> *)
+{
+    typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iter_t;
+    ++auto_any_cast<iter_t, pdalboost::mpl::false_>(cur);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// deref
+//
+template<typename T, typename C>
+inline BOOST_DEDUCED_TYPENAME foreach_reference<T, C>::type
+deref(auto_any_t cur, type2type<T, C> *)
+{
+    typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iter_t;
+    return *auto_any_cast<iter_t, pdalboost::mpl::false_>(cur);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// rbegin
+//
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>
+rbegin(auto_any_t col, type2type<T, C> *, pdalboost::mpl::true_ *) // rvalue
+{
+    return auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>(
+        pdalboost::rbegin(auto_any_cast<T, C>(col)));
+}
+
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>
+rbegin(auto_any_t col, type2type<T, C> *, pdalboost::mpl::false_ *) // lvalue
+{
+    typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
+    typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type iterator;
+    return auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>(
+        iterator(pdalboost::rbegin(BOOST_FOREACH_DEREFOF((auto_any_cast<type *, pdalboost::mpl::false_>(col))))));
+}
+
+#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
+template<typename T>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, const_>::type>
+rbegin(auto_any_t col, type2type<T, const_> *, bool *)
+{
+    return auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, const_>::type>(
+        pdalboost::rbegin(*auto_any_cast<simple_variant<T>, pdalboost::mpl::false_>(col).get()));
+}
+#endif
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+template<typename T, typename C>
+inline auto_any<reverse_iterator<T *> >
+rbegin(auto_any_t col, type2type<T *, C> *, pdalboost::mpl::true_ *) // null-terminated C-style strings
+{
+    T *p = auto_any_cast<T *, pdalboost::mpl::false_>(col);
+    while(0 != *p)
+        ++p;
+    return auto_any<reverse_iterator<T *> >(reverse_iterator<T *>(p));
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// rend
+//
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>
+rend(auto_any_t col, type2type<T, C> *, pdalboost::mpl::true_ *) // rvalue
+{
+    return auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>(
+        pdalboost::rend(auto_any_cast<T, C>(col)));
+}
+
+template<typename T, typename C>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>
+rend(auto_any_t col, type2type<T, C> *, pdalboost::mpl::false_ *) // lvalue
+{
+    typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
+    typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type iterator;
+    return auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>(
+        iterator(pdalboost::rend(BOOST_FOREACH_DEREFOF((auto_any_cast<type *, pdalboost::mpl::false_>(col))))));
+}
+
+#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
+template<typename T>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, const_>::type>
+rend(auto_any_t col, type2type<T, const_> *, bool *)
+{
+    return auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, const_>::type>(
+        pdalboost::rend(*auto_any_cast<simple_variant<T>, pdalboost::mpl::false_>(col).get()));
+}
+#endif
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+template<typename T, typename C>
+inline auto_any<reverse_iterator<T *> >
+rend(auto_any_t col, type2type<T *, C> *, pdalboost::mpl::true_ *) // null-terminated C-style strings
+{
+    return auto_any<reverse_iterator<T *> >(
+        reverse_iterator<T *>(auto_any_cast<T *, pdalboost::mpl::false_>(col)));
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// rdone
+//
+template<typename T, typename C>
+inline bool rdone(auto_any_t cur, auto_any_t end, type2type<T, C> *)
+{
+    typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type iter_t;
+    return auto_any_cast<iter_t, pdalboost::mpl::false_>(cur) == auto_any_cast<iter_t, pdalboost::mpl::false_>(end);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// rnext
+//
+template<typename T, typename C>
+inline void rnext(auto_any_t cur, type2type<T, C> *)
+{
+    typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type iter_t;
+    ++auto_any_cast<iter_t, pdalboost::mpl::false_>(cur);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// rderef
+//
+template<typename T, typename C>
+inline BOOST_DEDUCED_TYPENAME foreach_reference<T, C>::type
+rderef(auto_any_t cur, type2type<T, C> *)
+{
+    typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type iter_t;
+    return *auto_any_cast<iter_t, pdalboost::mpl::false_>(cur);
+}
+
+} // namespace foreach_detail_
+} // namespace pdalboost
+
+// Suppress a bogus code analysis warning on vc8+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+# define BOOST_FOREACH_SUPPRESS_WARNINGS() __pragma(warning(suppress:6001))
+#else
+# define BOOST_FOREACH_SUPPRESS_WARNINGS()
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// Define a macro for giving hidden variables a unique name. Not strictly
+// needed, but eliminates some warnings on some compilers.
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
+// With some versions of MSVC, use of __LINE__ to create unique identifiers
+// can fail when the Edit-and-Continue debug flag is used.
+# define BOOST_FOREACH_ID(x) x
+#else
+# define BOOST_FOREACH_ID(x) BOOST_PP_CAT(x, __LINE__)
+#endif
+
+// A sneaky way to get the type of the collection without evaluating the expression
+#define BOOST_FOREACH_TYPEOF(COL)                                                               \
+    (true ? 0 : pdalboost::foreach_detail_::encode_type(COL, pdalboost::foreach_detail_::is_const_(COL)))
+
+// returns true_* if the type is noncopyable
+#define BOOST_FOREACH_IS_NONCOPYABLE(COL)                                                       \
+    boost_foreach_is_noncopyable(                                                               \
+        pdalboost::foreach_detail_::to_ptr(COL)                                                     \
+      , boost_foreach_argument_dependent_lookup_hack_value)
+
+// returns true_* if the type is a lightweight proxy (and is not noncopyable)
+#define BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL)                                                 \
+    pdalboost::foreach_detail_::and_(                                                               \
+        pdalboost::foreach_detail_::not_(BOOST_FOREACH_IS_NONCOPYABLE(COL))                         \
+      , boost_foreach_is_lightweight_proxy(                                                     \
+            pdalboost::foreach_detail_::to_ptr(COL)                                                 \
+          , boost_foreach_argument_dependent_lookup_hack_value))
+
+#if defined(BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION)
+///////////////////////////////////////////////////////////////////////////////
+// R-values and const R-values supported here with zero runtime overhead
+///////////////////////////////////////////////////////////////////////////////
+
+// No variable is needed to track the rvalue-ness of the collection expression
+# define BOOST_FOREACH_PREAMBLE()                                                               \
+    BOOST_FOREACH_SUPPRESS_WARNINGS()
+
+// Evaluate the collection expression
+# define BOOST_FOREACH_EVALUATE(COL)                                                            \
+    (COL)
+
+# define BOOST_FOREACH_SHOULD_COPY(COL)                                                         \
+    (true ? 0 : pdalboost::foreach_detail_::or_(                                                    \
+        BOOST_FOREACH_IS_RVALUE(COL)                                                            \
+      , BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL)))
+
+#elif defined(BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION)
+///////////////////////////////////////////////////////////////////////////////
+// R-values and const R-values supported here
+///////////////////////////////////////////////////////////////////////////////
+
+// Declare a variable to track the rvalue-ness of the collection expression
+# define BOOST_FOREACH_PREAMBLE()                                                               \
+    BOOST_FOREACH_SUPPRESS_WARNINGS()                                                           \
+    if (bool BOOST_FOREACH_ID(_foreach_is_rvalue) = false) {} else
+
+// Evaluate the collection expression, and detect if it is an lvalue or and rvalue
+# define BOOST_FOREACH_EVALUATE(COL)                                                            \
+    (true ? pdalboost::foreach_detail_::make_probe((COL), BOOST_FOREACH_ID(_foreach_is_rvalue)) : (COL))
+
+// The rvalue/lvalue-ness of the collection expression is determined dynamically, unless
+// the type is an array or is noncopyable or is non-const, in which case we know it's an lvalue.
+// If the type happens to be a lightweight proxy, always make a copy.
+# define BOOST_FOREACH_SHOULD_COPY(COL)                                                         \
+    (pdalboost::foreach_detail_::should_copy_impl(                                                  \
+        true ? 0 : pdalboost::foreach_detail_::or_(                                                 \
+            pdalboost::foreach_detail_::is_array_(COL)                                              \
+          , BOOST_FOREACH_IS_NONCOPYABLE(COL)                                                   \
+          , pdalboost::foreach_detail_::not_(pdalboost::foreach_detail_::is_const_(COL)))               \
+      , true ? 0 : BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL)                                      \
+      , &BOOST_FOREACH_ID(_foreach_is_rvalue)))
+
+#elif !defined(BOOST_FOREACH_NO_RVALUE_DETECTION)
+///////////////////////////////////////////////////////////////////////////////
+// R-values supported here, const R-values NOT supported here
+///////////////////////////////////////////////////////////////////////////////
+
+// No variable is needed to track the rvalue-ness of the collection expression
+# define BOOST_FOREACH_PREAMBLE()                                                               \
+    BOOST_FOREACH_SUPPRESS_WARNINGS()
+
+// Evaluate the collection expression
+# define BOOST_FOREACH_EVALUATE(COL)                                                            \
+    (COL)
+
+// Determine whether the collection expression is an lvalue or an rvalue.
+// NOTE: this gets the answer wrong for const rvalues.
+# define BOOST_FOREACH_SHOULD_COPY(COL)                                                         \
+    (true ? 0 : pdalboost::foreach_detail_::or_(                                                    \
+        pdalboost::foreach_detail_::is_rvalue_((COL), 0)                                            \
+      , BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL)))
+
+#else
+///////////////////////////////////////////////////////////////////////////////
+// R-values NOT supported here
+///////////////////////////////////////////////////////////////////////////////
+
+// No variable is needed to track the rvalue-ness of the collection expression
+# define BOOST_FOREACH_PREAMBLE()                                                               \
+    BOOST_FOREACH_SUPPRESS_WARNINGS()
+
+// Evaluate the collection expression
+# define BOOST_FOREACH_EVALUATE(COL)                                                            \
+    (COL)
+
+// Can't use rvalues with BOOST_FOREACH (unless they are lightweight proxies)
+# define BOOST_FOREACH_SHOULD_COPY(COL)                                                         \
+    (true ? 0 : BOOST_FOREACH_IS_LIGHTWEIGHT_PROXY(COL))
+
+#endif
+
+#define BOOST_FOREACH_CONTAIN(COL)                                                              \
+    pdalboost::foreach_detail_::contain(                                                            \
+        BOOST_FOREACH_EVALUATE(COL)                                                             \
+      , BOOST_FOREACH_SHOULD_COPY(COL))
+
+#define BOOST_FOREACH_BEGIN(COL)                                                                \
+    pdalboost::foreach_detail_::begin(                                                              \
+        BOOST_FOREACH_ID(_foreach_col)                                                          \
+      , BOOST_FOREACH_TYPEOF(COL)                                                               \
+      , BOOST_FOREACH_SHOULD_COPY(COL))
+
+#define BOOST_FOREACH_END(COL)                                                                  \
+    pdalboost::foreach_detail_::end(                                                                \
+        BOOST_FOREACH_ID(_foreach_col)                                                          \
+      , BOOST_FOREACH_TYPEOF(COL)                                                               \
+      , BOOST_FOREACH_SHOULD_COPY(COL))
+
+#define BOOST_FOREACH_DONE(COL)                                                                 \
+    pdalboost::foreach_detail_::done(                                                               \
+        BOOST_FOREACH_ID(_foreach_cur)                                                          \
+      , BOOST_FOREACH_ID(_foreach_end)                                                          \
+      , BOOST_FOREACH_TYPEOF(COL))
+
+#define BOOST_FOREACH_NEXT(COL)                                                                 \
+    pdalboost::foreach_detail_::next(                                                               \
+        BOOST_FOREACH_ID(_foreach_cur)                                                          \
+      , BOOST_FOREACH_TYPEOF(COL))
+
+#define BOOST_FOREACH_DEREF(COL)                                                                \
+    pdalboost::foreach_detail_::deref(                                                              \
+        BOOST_FOREACH_ID(_foreach_cur)                                                          \
+      , BOOST_FOREACH_TYPEOF(COL))
+
+#define BOOST_FOREACH_RBEGIN(COL)                                                               \
+    pdalboost::foreach_detail_::rbegin(                                                             \
+        BOOST_FOREACH_ID(_foreach_col)                                                          \
+      , BOOST_FOREACH_TYPEOF(COL)                                                               \
+      , BOOST_FOREACH_SHOULD_COPY(COL))
+
+#define BOOST_FOREACH_REND(COL)                                                                 \
+    pdalboost::foreach_detail_::rend(                                                               \
+        BOOST_FOREACH_ID(_foreach_col)                                                          \
+      , BOOST_FOREACH_TYPEOF(COL)                                                               \
+      , BOOST_FOREACH_SHOULD_COPY(COL))
+
+#define BOOST_FOREACH_RDONE(COL)                                                                \
+    pdalboost::foreach_detail_::rdone(                                                              \
+        BOOST_FOREACH_ID(_foreach_cur)                                                          \
+      , BOOST_FOREACH_ID(_foreach_end)                                                          \
+      , BOOST_FOREACH_TYPEOF(COL))
+
+#define BOOST_FOREACH_RNEXT(COL)                                                                \
+    pdalboost::foreach_detail_::rnext(                                                              \
+        BOOST_FOREACH_ID(_foreach_cur)                                                          \
+      , BOOST_FOREACH_TYPEOF(COL))
+
+#define BOOST_FOREACH_RDEREF(COL)                                                               \
+    pdalboost::foreach_detail_::rderef(                                                             \
+        BOOST_FOREACH_ID(_foreach_cur)                                                          \
+      , BOOST_FOREACH_TYPEOF(COL))
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_FOREACH
+//
+//   For iterating over collections. Collections can be
+//   arrays, null-terminated strings, or STL containers.
+//   The loop variable can be a value or reference. For
+//   example:
+//
+//   std::list<int> int_list(/*stuff*/);
+//   BOOST_FOREACH(int &i, int_list)
+//   {
+//       /* 
+//        * loop body goes here.
+//        * i is a reference to the int in int_list.
+//        */
+//   }
+//
+//   Alternately, you can declare the loop variable first,
+//   so you can access it after the loop finishes. Obviously,
+//   if you do it this way, then the loop variable cannot be
+//   a reference.
+//
+//   int i;
+//   BOOST_FOREACH(i, int_list)
+//       { ... }
+//
+#define BOOST_FOREACH(VAR, COL)                                                                                   \
+    BOOST_FOREACH_PREAMBLE()                                                                                      \
+    if (pdalboost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_col) = BOOST_FOREACH_CONTAIN(COL)) {} else   \
+    if (pdalboost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_cur) = BOOST_FOREACH_BEGIN(COL)) {} else     \
+    if (pdalboost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_end) = BOOST_FOREACH_END(COL)) {} else       \
+    for (bool BOOST_FOREACH_ID(_foreach_continue) = true;                                                         \
+              BOOST_FOREACH_ID(_foreach_continue) && !BOOST_FOREACH_DONE(COL);                                    \
+              BOOST_FOREACH_ID(_foreach_continue) ? BOOST_FOREACH_NEXT(COL) : (void)0)                            \
+        if  (pdalboost::foreach_detail_::set_false(BOOST_FOREACH_ID(_foreach_continue))) {} else                      \
+        for (VAR = BOOST_FOREACH_DEREF(COL); !BOOST_FOREACH_ID(_foreach_continue); BOOST_FOREACH_ID(_foreach_continue) = true)
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_REVERSE_FOREACH
+//
+//   For iterating over collections in reverse order. In
+//   all other respects, BOOST_REVERSE_FOREACH is like
+//   BOOST_FOREACH.
+//
+#define BOOST_REVERSE_FOREACH(VAR, COL)                                                                           \
+    BOOST_FOREACH_PREAMBLE()                                                                                      \
+    if (pdalboost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_col) = BOOST_FOREACH_CONTAIN(COL)) {} else   \
+    if (pdalboost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_cur) = BOOST_FOREACH_RBEGIN(COL)) {} else    \
+    if (pdalboost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_end) = BOOST_FOREACH_REND(COL)) {} else      \
+    for (bool BOOST_FOREACH_ID(_foreach_continue) = true;                                                         \
+              BOOST_FOREACH_ID(_foreach_continue) && !BOOST_FOREACH_RDONE(COL);                                   \
+              BOOST_FOREACH_ID(_foreach_continue) ? BOOST_FOREACH_RNEXT(COL) : (void)0)                           \
+        if  (pdalboost::foreach_detail_::set_false(BOOST_FOREACH_ID(_foreach_continue))) {} else                      \
+        for (VAR = BOOST_FOREACH_RDEREF(COL); !BOOST_FOREACH_ID(_foreach_continue); BOOST_FOREACH_ID(_foreach_continue) = true)
+
+#endif
diff --git a/vendor/pdalboost/boost/foreach_fwd.hpp b/vendor/pdalboost/boost/foreach_fwd.hpp
new file mode 100644
index 0000000..fae9f69
--- /dev/null
+++ b/vendor/pdalboost/boost/foreach_fwd.hpp
@@ -0,0 +1,51 @@
+///////////////////////////////////////////////////////////////////////////////
+// foreach.hpp header file
+//
+// Copyright 2010 Eric Niebler.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/foreach for documentation
+//
+// Credits:
+// Kazutoshi Satoda: for suggesting the need for a _fwd header for foreach's
+//                      customization points.
+
+#ifndef BOOST_FOREACH_FWD_HPP
+#define BOOST_FOREACH_FWD_HPP
+
+// This must be at global scope, hence the uglified name
+enum boost_foreach_argument_dependent_lookup_hack
+{
+    boost_foreach_argument_dependent_lookup_hack_value
+};
+
+namespace pdalboost
+{
+
+namespace foreach
+{
+    ///////////////////////////////////////////////////////////////////////////////
+    // pdalboost::foreach::tag
+    //
+    typedef boost_foreach_argument_dependent_lookup_hack tag;
+
+    ///////////////////////////////////////////////////////////////////////////////
+    // pdalboost::foreach::is_lightweight_proxy
+    //   Specialize this for user-defined collection types if they are inexpensive to copy.
+    //   This tells BOOST_FOREACH it can avoid the rvalue/lvalue detection stuff.
+    template<typename T>
+    struct is_lightweight_proxy;
+
+    ///////////////////////////////////////////////////////////////////////////////
+    // pdalboost::foreach::is_noncopyable
+    //   Specialize this for user-defined collection types if they cannot be copied.
+    //   This also tells BOOST_FOREACH to avoid the rvalue/lvalue detection stuff.
+    template<typename T>
+    struct is_noncopyable;
+
+} // namespace foreach
+
+} // namespace pdalboost
+
+#endif
diff --git a/vendor/pdalboost/boost/format.hpp b/vendor/pdalboost/boost/format.hpp
new file mode 100644
index 0000000..73464a8
--- /dev/null
+++ b/vendor/pdalboost/boost/format.hpp
@@ -0,0 +1,59 @@
+// ----------------------------------------------------------------------------
+// format.hpp :  primary header
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/format for library home page
+
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_HPP
+#define BOOST_FORMAT_HPP
+
+#include <vector>
+#include <string>
+#include <boost/detail/workaround.hpp>
+#include <boost/config.hpp>
+
+#ifndef BOOST_NO_STD_LOCALE
+#include <locale>
+#endif
+
+// ***   Compatibility framework
+#include <boost/format/detail/compat_workarounds.hpp>
+
+#ifdef BOOST_NO_LOCALE_ISIDIGIT
+#include <cctype>  // we'll use the non-locale  <cctype>'s std::isdigit(int)
+#endif
+
+// ****  Forward declarations ----------------------------------
+#include <boost/format/format_fwd.hpp>     // basic_format<Ch,Tr>, and other frontends
+#include <boost/format/internals_fwd.hpp>  // misc forward declarations for internal use
+
+// ****  Auxiliary structs (stream_format_state<Ch,Tr> , and format_item<Ch,Tr> )
+#include <boost/format/internals.hpp>    
+
+// ****  Format  class  interface --------------------------------
+#include <boost/format/format_class.hpp>
+
+// **** Exceptions -----------------------------------------------
+#include <boost/format/exceptions.hpp>
+
+// **** Implementation -------------------------------------------
+#include <boost/format/format_implementation.hpp>   // member functions
+#include <boost/format/group.hpp>                   // class for grouping arguments
+#include <boost/format/feed_args.hpp>               // argument-feeding functions
+#include <boost/format/parsing.hpp>                 // format-string parsing (member-)functions
+
+// **** Implementation of the free functions ----------------------
+#include <boost/format/free_funcs.hpp>
+
+
+// *** Undefine 'local' macros :
+#include <boost/format/detail/unset_macros.hpp>
+
+#endif // BOOST_FORMAT_HPP
diff --git a/vendor/pdalboost/boost/format/alt_sstream.hpp b/vendor/pdalboost/boost/format/alt_sstream.hpp
new file mode 100644
index 0000000..70772bf
--- /dev/null
+++ b/vendor/pdalboost/boost/format/alt_sstream.hpp
@@ -0,0 +1,176 @@
+// ----------------------------------------------------------------------------
+//  alt_sstream.hpp : alternative stringstream 
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+
+
+#ifndef BOOST_SK_ALT_SSTREAM_HPP
+#define BOOST_SK_ALT_SSTREAM_HPP
+
+#include <string>
+#include <boost/format/detail/compat_workarounds.hpp>
+#include <boost/utility/base_from_member.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/assert.hpp>
+
+namespace pdalboost {
+    namespace io {
+
+        template<class Ch, class Tr=::std::char_traits<Ch>, 
+                 class Alloc=::std::allocator<Ch> >
+        class basic_altstringbuf;
+
+        template<class Ch, class Tr =::std::char_traits<Ch>, 
+                 class Alloc=::std::allocator<Ch> >
+        class basic_oaltstringstream;
+
+
+        template<class Ch, class Tr, class Alloc>
+        class basic_altstringbuf 
+            : public ::std::basic_streambuf<Ch, Tr>
+        {
+            typedef ::std::basic_streambuf<Ch, Tr>  streambuf_t;
+            typedef typename CompatAlloc<Alloc>::compatible_type compat_allocator_type;
+            typedef typename CompatTraits<Tr>::compatible_type   compat_traits_type;
+        public:
+            typedef Ch     char_type;
+            typedef Tr     traits_type;
+            typedef typename compat_traits_type::int_type     int_type;
+            typedef typename compat_traits_type::pos_type     pos_type;
+            typedef typename compat_traits_type::off_type     off_type;
+            typedef Alloc                     allocator_type;
+            typedef ::std::basic_string<Ch, Tr, Alloc> string_type;
+            typedef typename string_type::size_type    size_type;
+
+            typedef ::std::streamsize streamsize;
+
+
+            explicit basic_altstringbuf(std::ios_base::openmode mode
+                                        = std::ios_base::in | std::ios_base::out)
+                : putend_(NULL), is_allocated_(false), mode_(mode) 
+                {}
+            explicit basic_altstringbuf(const string_type& s,
+                                        ::std::ios_base::openmode mode
+                                        = ::std::ios_base::in | ::std::ios_base::out)
+                : putend_(NULL), is_allocated_(false), mode_(mode) 
+                { dealloc(); str(s); }
+            virtual ~basic_altstringbuf() 
+                { dealloc(); }
+            using streambuf_t::pbase;
+            using streambuf_t::pptr;
+            using streambuf_t::epptr;
+            using streambuf_t::eback;
+            using streambuf_t::gptr;
+            using streambuf_t::egptr;
+    
+            void clear_buffer();
+            void str(const string_type& s);
+
+            // 0-copy access :
+            Ch * begin() const; 
+            size_type size() const;
+            size_type cur_size() const; // stop at current pointer
+            Ch * pend() const // the highest position reached by pptr() since creation
+                { return ((putend_ < pptr()) ? pptr() : putend_); }
+            size_type pcount() const 
+                { return static_cast<size_type>( pptr() - pbase()) ;}
+
+            // copy buffer to string :
+            string_type str() const 
+                { return string_type(begin(), size()); }
+            string_type cur_str() const 
+                { return string_type(begin(), cur_size()); }
+        protected:
+            explicit basic_altstringbuf (basic_altstringbuf * s,
+                                         ::std::ios_base::openmode mode 
+                                         = ::std::ios_base::in | ::std::ios_base::out)
+                : putend_(NULL), is_allocated_(false), mode_(mode) 
+                { dealloc(); str(s); }
+
+            virtual pos_type seekoff(off_type off, ::std::ios_base::seekdir way, 
+                                     ::std::ios_base::openmode which 
+                                     = ::std::ios_base::in | ::std::ios_base::out);
+            virtual pos_type seekpos (pos_type pos, 
+                                      ::std::ios_base::openmode which 
+                                      = ::std::ios_base::in | ::std::ios_base::out);
+            virtual int_type underflow();
+            virtual int_type pbackfail(int_type meta = compat_traits_type::eof());
+            virtual int_type overflow(int_type meta = compat_traits_type::eof());
+            void dealloc();
+        private:
+            enum { alloc_min = 256}; // minimum size of allocations
+
+            Ch *putend_;  // remembers (over seeks) the highest value of pptr()
+            bool is_allocated_;
+            ::std::ios_base::openmode mode_;
+            compat_allocator_type alloc_;  // the allocator object
+        };
+
+
+// ---   class basic_oaltstringstream ----------------------------------------
+        template <class Ch, class Tr, class Alloc>
+        class basic_oaltstringstream 
+            : private base_from_member< shared_ptr< basic_altstringbuf< Ch, Tr, Alloc> > >,
+              public ::std::basic_ostream<Ch, Tr>
+        {
+            class No_Op { 
+                // used as no-op deleter for (not-owner) shared_pointers
+            public: 
+                template<class T>
+                const T & operator()(const T & arg) { return arg; }
+            };
+            typedef ::std::basic_ostream<Ch, Tr> stream_t;
+            typedef pdalboost::base_from_member<pdalboost::shared_ptr<
+                basic_altstringbuf<Ch,Tr, Alloc> > > 
+                pbase_type;
+            typedef ::std::basic_string<Ch, Tr, Alloc>  string_type;
+            typedef typename string_type::size_type     size_type;
+            typedef basic_altstringbuf<Ch, Tr, Alloc>   stringbuf_t;
+        public:
+            typedef Alloc  allocator_type;
+            basic_oaltstringstream() 
+                : pbase_type(new stringbuf_t), stream_t(rdbuf()) 
+                { }
+            basic_oaltstringstream(::pdalboost::shared_ptr<stringbuf_t> buf) 
+                : pbase_type(buf), stream_t(rdbuf()) 
+                { }
+            basic_oaltstringstream(stringbuf_t * buf) 
+                : pbase_type(buf, No_Op() ), stream_t(rdbuf()) 
+                { }
+            stringbuf_t * rdbuf() const 
+                { return pbase_type::member.get(); }
+            void clear_buffer() 
+                { rdbuf()->clear_buffer(); }
+
+            // 0-copy access :
+            Ch * begin() const 
+                { return rdbuf()->begin(); }
+            size_type size() const 
+                { return rdbuf()->size(); }
+            size_type cur_size() const // stops at current position
+                { return rdbuf()->cur_size(); }
+
+            // copy buffer to string :
+            string_type str()     const   // [pbase, epptr[
+                { return rdbuf()->str(); } 
+            string_type cur_str() const   // [pbase, pptr[
+                { return rdbuf()->cur_str(); }
+            void str(const string_type& s) 
+                { rdbuf()->str(s); }
+        };
+
+    } // N.S. io
+} // N.S. boost
+
+#include <boost/format/alt_sstream_impl.hpp>
+
+#endif // include guard
+
diff --git a/vendor/pdalboost/boost/format/alt_sstream_impl.hpp b/vendor/pdalboost/boost/format/alt_sstream_impl.hpp
new file mode 100644
index 0000000..36c04d7
--- /dev/null
+++ b/vendor/pdalboost/boost/format/alt_sstream_impl.hpp
@@ -0,0 +1,313 @@
+// ----------------------------------------------------------------------------
+//  alt_sstream_impl.hpp : alternative stringstream, templates implementation 
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_SK_ALT_SSTREAM_IMPL_HPP
+#define BOOST_SK_ALT_SSTREAM_IMPL_HPP
+
+namespace pdalboost {
+    namespace io {
+// --- Implementation  ------------------------------------------------------//
+
+        template<class Ch, class Tr, class Alloc>
+        void basic_altstringbuf<Ch, Tr, Alloc>:: 
+        clear_buffer () {
+            const Ch * p = pptr();
+            const Ch * b = pbase();
+            if(p != NULL && p != b) {
+                seekpos(0, ::std::ios_base::out); 
+            }
+            p = gptr();
+            b = eback();
+            if(p != NULL && p != b) {
+                seekpos(0, ::std::ios_base::in); 
+            }
+        }
+
+        template<class Ch, class Tr, class Alloc>
+        void basic_altstringbuf<Ch, Tr, Alloc>:: 
+        str (const string_type& s) {
+            size_type sz=s.size();
+            if(sz != 0 && mode_ & (::std::ios_base::in | ::std::ios_base::out) ) {
+#ifdef _RWSTD_NO_CLASS_PARTIAL_SPEC
+                void *vd_ptr = alloc_.allocate(sz, is_allocated_? eback() : 0);
+                Ch *new_ptr = static_cast<Ch *>(vd_ptr);
+#else
+                Ch *new_ptr = alloc_.allocate(sz, is_allocated_? eback() : 0);
+#endif
+                // if this didnt throw, we're safe, update the buffer
+                dealloc();
+                sz = s.copy(new_ptr, sz);
+                putend_ = new_ptr + sz;
+                if(mode_ & ::std::ios_base::in)
+                    streambuf_t::setg(new_ptr, new_ptr, new_ptr + sz);
+                if(mode_ & ::std::ios_base::out) {
+                    streambuf_t::setp(new_ptr, new_ptr + sz);
+                    if(mode_ & (::std::ios_base::app | ::std::ios_base::ate))
+                        streambuf_t::pbump(static_cast<int>(sz));
+                    if(gptr() == NULL)
+                        streambuf_t::setg(new_ptr, NULL, new_ptr);
+                }
+                is_allocated_ = true;
+            }
+            else 
+                dealloc();
+        }
+        template<class Ch, class Tr, class Alloc>
+        Ch*   basic_altstringbuf<Ch, Tr, Alloc>:: 
+        begin () const {
+            if(mode_ & ::std::ios_base::out && pptr() != NULL)
+                return pbase();
+            else if(mode_ & ::std::ios_base::in && gptr() != NULL)
+                return eback();
+            return NULL;
+        }
+
+        template<class Ch, class Tr, class Alloc>
+        typename std::basic_string<Ch,Tr,Alloc>::size_type
+        basic_altstringbuf<Ch, Tr, Alloc>:: 
+        size () const { 
+            if(mode_ & ::std::ios_base::out && pptr())
+                return static_cast<size_type>(pend() - pbase());
+            else if(mode_ & ::std::ios_base::in && gptr())
+                return static_cast<size_type>(egptr() - eback());
+            else 
+                return 0;
+        }
+
+        template<class Ch, class Tr, class Alloc>
+        typename std::basic_string<Ch,Tr,Alloc>::size_type
+        basic_altstringbuf<Ch, Tr, Alloc>:: 
+        cur_size () const { 
+            if(mode_ & ::std::ios_base::out && pptr())
+                return static_cast<streamsize>( pptr() - pbase());
+            else if(mode_ & ::std::ios_base::in && gptr())
+                return static_cast<streamsize>( gptr() - eback());
+            else 
+                return 0;
+        }
+
+        template<class Ch, class Tr, class Alloc>
+        typename basic_altstringbuf<Ch, Tr, Alloc>::pos_type  
+        basic_altstringbuf<Ch, Tr, Alloc>:: 
+        seekoff (off_type off, ::std::ios_base::seekdir way, ::std::ios_base::openmode which) {
+            if(pptr() != NULL && putend_ < pptr())
+                putend_ = pptr();
+            if(which & ::std::ios_base::in && gptr() != NULL) {
+                // get area
+                if(way == ::std::ios_base::end)
+                    off += static_cast<off_type>(putend_ - gptr());
+                else if(way == ::std::ios_base::beg)
+                    off += static_cast<off_type>(eback() - gptr());
+                else if(way != ::std::ios_base::cur || (which & ::std::ios_base::out) )
+                    // (altering in&out is only supported if way is beg or end, not cur)
+                    return pos_type(off_type(-1));
+                if(eback() <= off+gptr() && off+gptr() <= putend_ ) {
+                    // set gptr
+                    streambuf_t::gbump(static_cast<int>(off));
+                    if(which & ::std::ios_base::out && pptr() != NULL)
+                        // update pptr to match gptr
+                        streambuf_t::pbump(static_cast<int>(gptr()-pptr()));
+                }
+                else
+                    off = off_type(-1);
+            }
+            else if(which & ::std::ios_base::out && pptr() != NULL) {
+                // put area
+                if(way == ::std::ios_base::end)
+                    off += static_cast<off_type>(putend_ - pptr());
+                else if(way == ::std::ios_base::beg)
+                    off += static_cast<off_type>(pbase() - pptr());
+                else if(way != ::std::ios_base::beg)
+                    return pos_type(off_type(-1));                    
+                if(pbase() <= off+pptr() && off+pptr() <= putend_)
+                    // set pptr
+                    streambuf_t::pbump(static_cast<int>(off)); 
+                else
+                    off = off_type(-1);
+            }
+            else // neither in nor out
+                off = off_type(-1);
+            return (pos_type(off));
+        }
+        //- end seekoff(..)
+
+        
+        template<class Ch, class Tr, class Alloc>
+        typename basic_altstringbuf<Ch, Tr, Alloc>::pos_type 
+        basic_altstringbuf<Ch, Tr, Alloc>:: 
+        seekpos (pos_type pos, ::std::ios_base::openmode which) {
+            off_type off = off_type(pos); // operation guaranteed by 27.4.3.2 table 88
+            if(pptr() != NULL && putend_ < pptr())
+                putend_ = pptr();
+            if(off != off_type(-1)) {
+                if(which & ::std::ios_base::in && gptr() != NULL) {
+                    // get area
+                    if(0 <= off && off <= putend_ - eback()) {
+                        streambuf_t::gbump(static_cast<int>(eback() - gptr() + off));
+                        if(which & ::std::ios_base::out && pptr() != NULL) {
+                            // update pptr to match gptr
+                            streambuf_t::pbump(static_cast<int>(gptr()-pptr()));
+                        }
+                    }
+                    else
+                        off = off_type(-1);
+                }
+                else if(which & ::std::ios_base::out && pptr() != NULL) {
+                    // put area
+                    if(0 <= off && off <= putend_ - eback())
+                        streambuf_t::pbump(static_cast<int>(eback() - pptr() + off));
+                    else
+                        off = off_type(-1);
+                }
+                else // neither in nor out
+                    off = off_type(-1);
+                return (pos_type(off));
+            }
+            else {
+                BOOST_ASSERT(0); // �27.4.3.2 allows undefined-behaviour here
+                return pos_type(off_type(-1));
+            }
+        }
+        // -end seekpos(..)
+
+
+        template<class Ch, class Tr, class Alloc>
+        typename basic_altstringbuf<Ch, Tr, Alloc>::int_type
+        basic_altstringbuf<Ch, Tr, Alloc>:: 
+        underflow () {
+            if(gptr() == NULL) // no get area -> nothing to get.
+                return (compat_traits_type::eof()); 
+            else if(gptr() < egptr())  // ok, in buffer
+                return (compat_traits_type::to_int_type(*gptr())); 
+            else if(mode_ & ::std::ios_base::in && pptr() != NULL
+                    && (gptr() < pptr() || gptr() < putend_) )
+                {  // expand get area 
+                    if(putend_ < pptr()) 
+                        putend_ = pptr(); // remember pptr reached this far
+                    streambuf_t::setg(eback(), gptr(), putend_);
+                    return (compat_traits_type::to_int_type(*gptr()));
+                }
+            else // couldnt get anything. EOF.
+                return (compat_traits_type::eof());
+        }
+        // -end underflow(..)
+
+
+        template<class Ch, class Tr, class Alloc>
+        typename basic_altstringbuf<Ch, Tr, Alloc>::int_type 
+        basic_altstringbuf<Ch, Tr, Alloc>:: 
+        pbackfail (int_type meta) {
+            if(gptr() != NULL  &&  (eback() < gptr()) 
+               && (mode_ & (::std::ios_base::out)
+                   || compat_traits_type::eq_int_type(compat_traits_type::eof(), meta)
+                   || compat_traits_type::eq(compat_traits_type::to_char_type(meta), gptr()[-1]) ) ) { 
+                streambuf_t::gbump(-1); // back one character
+                if(!compat_traits_type::eq_int_type(compat_traits_type::eof(), meta))
+                    //  put-back meta into get area
+                    *gptr() = compat_traits_type::to_char_type(meta);
+                return (compat_traits_type::not_eof(meta));
+            }
+            else
+                return (compat_traits_type::eof());  // failed putback
+        }
+        // -end pbackfail(..)
+
+
+        template<class Ch, class Tr, class Alloc>
+        typename basic_altstringbuf<Ch, Tr, Alloc>::int_type 
+        basic_altstringbuf<Ch, Tr, Alloc>:: 
+        overflow (int_type meta) {
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4996)
+#endif
+            if(compat_traits_type::eq_int_type(compat_traits_type::eof(), meta))
+                return compat_traits_type::not_eof(meta); // nothing to do
+            else if(pptr() != NULL && pptr() < epptr()) {
+                streambuf_t::sputc(compat_traits_type::to_char_type(meta));
+                return meta;
+            }
+            else if(! (mode_ & ::std::ios_base::out)) 
+                // no write position, and cant make one
+                return compat_traits_type::eof(); 
+            else { // make a write position available
+                std::size_t prev_size = pptr() == NULL ? 0 : epptr() - eback();
+                std::size_t new_size = prev_size;
+                // exponential growth : size *= 1.5
+                std::size_t add_size = new_size / 2;
+                if(add_size < alloc_min)
+                    add_size = alloc_min;
+                Ch * newptr = NULL,  *oldptr = eback();
+
+                // make sure adding add_size wont overflow size_t
+                while (0 < add_size && ((std::numeric_limits<std::size_t>::max)()
+                                        - add_size < new_size) )
+                    add_size /= 2;
+                if(0 < add_size) {
+                    new_size += add_size;
+#ifdef _RWSTD_NO_CLASS_PARTIAL_SPEC
+                    void *vdptr = alloc_.allocate(new_size, is_allocated_? oldptr : 0);
+                    newptr = static_cast<Ch *>(vdptr);
+#else
+                    newptr = alloc_.allocate(new_size, is_allocated_? oldptr : 0);
+#endif
+                }
+
+                if(0 < prev_size)
+                    compat_traits_type::copy(newptr, oldptr, prev_size);
+                if(is_allocated_)
+                    alloc_.deallocate(oldptr, prev_size);
+                is_allocated_=true;
+
+                if(prev_size == 0) { // first allocation
+                    putend_ = newptr;
+                    streambuf_t::setp(newptr, newptr + new_size);
+                    if(mode_ & ::std::ios_base::in)
+                        streambuf_t::setg(newptr, newptr, newptr + 1);
+                    else
+                        streambuf_t::setg(newptr, 0, newptr);
+                }
+                else { // update pointers
+                    putend_ = putend_ - oldptr + newptr;
+                    int pptr_count = static_cast<int>(pptr()-pbase());
+                    int gptr_count = static_cast<int>(gptr()-eback());
+                    streambuf_t::setp(pbase() - oldptr + newptr, newptr + new_size);
+                    streambuf_t::pbump(pptr_count);
+                    if(mode_ & ::std::ios_base::in)
+                        streambuf_t::setg(newptr, newptr + gptr_count, pptr() + 1);
+                    else
+                        streambuf_t::setg(newptr, 0, newptr);
+                }
+                streambuf_t::sputc(compat_traits_type::to_char_type(meta));
+                return meta;
+            }
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+        }
+        // -end overflow(..)
+
+        template<class Ch, class Tr, class Alloc>
+        void basic_altstringbuf<Ch, Tr, Alloc>:: dealloc() {
+            if(is_allocated_)
+                alloc_.deallocate(eback(), (pptr() != NULL ? epptr() : egptr()) - eback());
+            is_allocated_ = false;
+            streambuf_t::setg(0, 0, 0);
+            streambuf_t::setp(0, 0);
+            putend_ = NULL;
+        }
+
+    }// N.S. io
+} // N.S. boost
+
+#endif // include guard
+
diff --git a/vendor/pdalboost/boost/format/detail/compat_workarounds.hpp b/vendor/pdalboost/boost/format/detail/compat_workarounds.hpp
new file mode 100644
index 0000000..89e3df1
--- /dev/null
+++ b/vendor/pdalboost/boost/format/detail/compat_workarounds.hpp
@@ -0,0 +1,86 @@
+// ----------------------------------------------------------------------------
+//  compat_workarounds : general framework for non-conformance workarounds
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// see http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+
+//  this file defines  wrapper classes to hide non-conforming 
+// std::char_traits<>  and std::allocator<> traits
+//  and Includes : config_macros.hpp (defines config macros
+//  and compiler-specific switches)
+
+// Non-conformant Std-libs fail to supply conformant traits (std::char_traits,
+//  std::allocator) and/or  the std::string doesnt support them.
+// We don't want to have hundreds of #ifdef workarounds, so we define 
+// replacement traits.
+// But both char_traits and allocator traits are visible in the interface, 
+// (inside the final string type),  thus we need to keep both 
+// the replacement type (typedefed to 'compatible_type') for real use,
+// and the original stdlib type (typedef to 'type_for_string') for interface
+//  visibility. This is what Compat* classes do (as well as be transparent 
+// when good allocator and char traits are present)
+
+#ifndef BOOST_FORMAT_COMPAT_WORKAROUNDS_HPP
+#define BOOST_FORMAT_COMPAT_WORKAROUNDS_HPP
+
+namespace pdalboost {
+    namespace io {
+
+        // gcc-2.95 char traits (non-conformantly named string_char_traits) 
+        // lack several functions so we extend them in a replacement class.
+        template<class Tr>
+        class CompatTraits; 
+
+        // std::allocator<Ch> in gcc-2.95 is ok, but basic_string only works 
+        // with plain 'std::alloc' still, alt_stringbuf requires a functionnal
+        // alloc template argument, so we need a replacement allocator
+        template<class Alloc>
+        class CompatAlloc; 
+    } // N.S. io
+}// N.S. boost
+
+
+#include <boost/format/detail/config_macros.hpp>
+   // sets-up macros and load compiler-specific workarounds headers.
+
+#if !defined(BOOST_FORMAT_STREAMBUF_DEFINED)
+// workarounds-gcc-2.95 might have defined own streambuf
+#include <streambuf>
+#endif
+
+#if !defined(BOOST_FORMAT_OSTREAM_DEFINED)
+// workarounds-gcc-2.95 might already have included <iostream>
+#include <ostream>
+#endif
+
+
+
+namespace pdalboost {
+    namespace io {
+
+        // **** CompatTraits general definitions : ----------------------------
+        template<class Tr>
+        class CompatTraits
+        {        // general case : be transparent
+        public:
+            typedef Tr  compatible_type;
+        };
+
+        // **** CompatAlloc general definitions : -----------------------------
+        template<class Alloc>
+        class CompatAlloc
+        {        // general case : be transparent
+        public:
+            typedef Alloc  compatible_type;
+        };
+
+    } //N.S. io
+} // N.S. boost
+#endif // include guard
diff --git a/vendor/pdalboost/boost/format/detail/config_macros.hpp b/vendor/pdalboost/boost/format/detail/config_macros.hpp
new file mode 100644
index 0000000..55f0762
--- /dev/null
+++ b/vendor/pdalboost/boost/format/detail/config_macros.hpp
@@ -0,0 +1,95 @@
+// -*- C++ -*-
+// ----------------------------------------------------------------------------
+// config_macros.hpp : configuration macros for the format library
+// only BOOST_IO_STD is absolutely needed (it should be 'std::' in general)
+// others are compiler-specific workaround macros used in #ifdef switches
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// see http://www.boost.org/libs/format for library home page
+
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_CONFIG_MACROS_HPP
+#define BOOST_FORMAT_CONFIG_MACROS_HPP
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+// make sure our local macros wont override something :
+#if defined(BOOST_NO_LOCALE_ISDIGIT) || defined(BOOST_OVERLOAD_FOR_NON_CONST) \
+  || defined(BOOST_IO_STD) || defined( BOOST_IO_NEEDS_USING_DECLARATION ) \
+    || defined(BOOST_NO_TEMPLATE_STD_STREAM) \
+    || defined(BOOST_FORMAT_STREAMBUF_DEFINED) || defined(BOOST_FORMAT_OSTREAM_DEFINED)
+#error "pdalboost::format uses a local macro that is already defined."
+#endif
+
+// specific workarounds. each header can define BOOS_IO_STD if it 
+// needs. (e.g. because of IO_NEEDS_USING_DECLARATION)
+#include <boost/format/detail/workarounds_gcc-2_95.hpp>
+#include <boost/format/detail/workarounds_stlport.hpp>
+
+#ifndef BOOST_IO_STD
+#  define BOOST_IO_STD ::std::
+#endif
+
+#if defined(BOOST_NO_STD_LOCALE) || \
+ ( BOOST_WORKAROUND(__BORLANDC__, <= 0x564) \
+   || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT( 0x570 ) )  )
+// some future __BORLANDC__ >0x564  versions might not need this
+// 0x570 is Borland's kylix branch
+#define BOOST_NO_LOCALE_ISDIGIT
+#endif
+
+#if  BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570) ) || BOOST_WORKAROUND( BOOST_MSVC, BOOST_TESTED_AT(1300))
+#define BOOST_NO_OVERLOAD_FOR_NON_CONST
+#endif
+
+// **** Workaround for io streams, stlport and msvc.
+#ifdef BOOST_IO_NEEDS_USING_DECLARATION
+namespace pdalboost {
+  using std::char_traits;
+  using std::basic_ostream;
+  namespace io {
+    using std::basic_ostream;
+    namespace detail {
+      using std::basic_ios;
+      using std::basic_ostream;
+    }
+  }
+#if ! defined(BOOST_NO_STD_LOCALE)
+    using std::locale;
+    namespace io {
+        using std::locale;
+        namespace detail {
+            using std::locale;
+        }
+    }
+#endif // locale
+}
+  // -end N.S. boost
+#endif // needs_using_declaration
+
+#if ! defined(BOOST_NO_STD_LOCALE)
+#include <locale>
+#endif
+
+
+// ***  hide std::locale if it doesnt exist. 
+// this typedef is either std::locale or int, avoids placing ifdefs everywhere
+namespace pdalboost { namespace io { namespace detail {
+#if ! defined(BOOST_NO_STD_LOCALE)
+    typedef BOOST_IO_STD locale locale_t;
+#else 
+    typedef int          locale_t;
+#endif
+} } }
+
+
+// ----------------------------------------------------------------------------
+
+#endif // BOOST_FORMAT_MACROS_DEFAULT_HPP
diff --git a/vendor/pdalboost/boost/format/detail/msvc_disambiguater.hpp b/vendor/pdalboost/boost/format/detail/msvc_disambiguater.hpp
new file mode 100644
index 0000000..7199cc3
--- /dev/null
+++ b/vendor/pdalboost/boost/format/detail/msvc_disambiguater.hpp
@@ -0,0 +1,54 @@
+// ----------------------------------------------------------------------------
+// msvc_disambiguater.hpp : msvc workarounds. (for put_{head|last} overloads)
+//               the trick was described in boost's list  by Aleksey Gurtovoy
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// see http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_MSVC_DISAMBIGUATER_HPP
+#define BOOST_MSVC_DISAMBIGUATER_HPP
+
+#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+
+#include <boost/format/group.hpp>
+#include <ostream>
+
+namespace pdalboost {
+namespace io {
+namespace detail {
+
+template< class Ch, class Tr, class T >
+struct disambiguater
+{
+   template< typename U >
+   static void put_head(BOOST_IO_STD basic_ostream<Ch, Tr>& os, group1<U> const& x, long)
+   {
+       os << group_head(x.a1_); 
+   }
+   static void put_head(BOOST_IO_STD basic_ostream<Ch, Tr>& os, T const& x, int)
+   {
+   }
+   template< typename U >
+   static void put_last(BOOST_IO_STD basic_ostream<Ch, Tr>& os, group1<U> const& x, long)
+   {
+       os << group_last(x.a1_); 
+   }
+   static void put_last(BOOST_IO_STD basic_ostream<Ch, Tr>& os, T const& x, int)
+   {
+     os << x;
+   }
+};
+
+} // namespace detail
+} // namespace io
+} // namespace pdalboost
+
+#endif // -__DECCXX_VER
+
+#endif // -BOOST_MSVC_DISAMBIGUATER_HPP
diff --git a/vendor/pdalboost/boost/format/detail/unset_macros.hpp b/vendor/pdalboost/boost/format/detail/unset_macros.hpp
new file mode 100644
index 0000000..b3ac47b
--- /dev/null
+++ b/vendor/pdalboost/boost/format/detail/unset_macros.hpp
@@ -0,0 +1,34 @@
+// ----------------------------------------------------------------------------
+// unset_macros.hpp
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+// *** Undefine 'local' macros :
+#ifdef BOOST_NO_OVERLOAD_FOR_NON_CONST
+#undef BOOST_NO_OVERLOAD_FOR_NON_CONST
+#endif
+#ifdef BOOST_NO_LOCALE_ISDIGIT
+#undef BOOST_NO_LOCALE_ISDIGIT
+#endif
+#ifdef BOOST_IO_STD
+#undef BOOST_IO_STD
+#endif
+#ifdef BOOST_IO_NEEDS_USING_DECLARATION
+#undef BOOST_IO_NEEDS_USING_DECLARATION
+#endif
+#ifdef BOOST_NO_TEMPLATE_STD_STREAM
+#undef BOOST_NO_TEMPLATE_STD_STREAM
+#endif
+#ifdef BOOST_FORMAT_STREAMBUF_DEFINED
+#undef BOOST_FORMAT_STREAMBUF_DEFINED
+#endif
+#ifdef BOOST_FORMAT_OSTREAM_DEFINED
+#undef BOOST_FORMAT_OSTREAM_DEFINED
+#endif
diff --git a/vendor/pdalboost/boost/format/detail/workarounds_gcc-2_95.hpp b/vendor/pdalboost/boost/format/detail/workarounds_gcc-2_95.hpp
new file mode 100644
index 0000000..095df19
--- /dev/null
+++ b/vendor/pdalboost/boost/format/detail/workarounds_gcc-2_95.hpp
@@ -0,0 +1,162 @@
+// ----------------------------------------------------------------------------
+//  workarounds for gcc < 3.0. 
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/format for library home page
+
+
+// ----------------------------------------------------------------------------
+
+// There's a lot to do, the stdlib shipped with gcc prior to 3.x 
+// was terribly non-conforming. 
+// . defines macros switches
+// . supplies template classes basic_foo<char,Tr> where gcc only supplies foo.
+//  i.e :
+//     -  basic_ios<char, Tr>        from ios
+//     -  basic_ostream<char, Tr>    from ostream
+//     -  basic_srteambuf<char, Tr>  from streambuf
+// these can be used transparently. (it obviously does not work for wchar_t)
+// . specialise CompatAlloc and CompatTraits to wrap gcc-2.95's 
+//    string_char_traits and std::alloc 
+
+#if  BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+   // only for gcc-2.95's native stdlib
+
+#ifndef BOOST_FORMAT_WORKAROUNDS_GCC295_H
+#define BOOST_FORMAT_WORKAROUNDS_GCC295_H
+
+// SGI STL doesnt have <ostream> and others, so we need iostream.
+#include <iostream> 
+#define BOOST_FORMAT_OSTREAM_DEFINED
+
+#include <streambuf.h>
+#define BOOST_FORMAT_STREAMBUF_DEFINED
+
+#define BOOST_NO_TEMPLATE_STD_STREAM
+
+#ifndef BOOST_IO_STD
+#  define BOOST_IO_STD std::
+#endif
+
+
+
+// *** 
+// gcc's simple classes turned into standard-like template classes :
+
+namespace std {
+
+
+    // gcc has string_char_traits, it's incomplete.
+    // we declare a std::char_traits, and specialize CompatTraits<..> on it
+    // to do what is required
+    template<class Ch>
+    class char_traits; // no definition here, we will just use it as a tag.
+
+    template <class Ch, class Tr>
+    class basic_streambuf;
+
+    template <class Tr> 
+    class basic_streambuf<char, Tr> : public streambuf {
+    };
+
+    template <class Ch, class Tr=::std::char_traits<Ch> >
+    class basic_ios;
+
+    template <class Tr>
+    class basic_ios<char, Tr> : public ostream {
+    public:
+        basic_ios(streambuf * p) : ostream(p) {};
+         char fill()  const { return ios::fill(); } // gcc returns wchar..
+         char fill(char c)  { return ios::fill(c); } // gcc takes wchar..
+         char widen(char c) { return c; }
+         char narrow(char c, char def) { return c; }
+        basic_ios& copyfmt(const ios& right) {
+            fill(right.fill());
+            flags(right.flags() );
+            exceptions(right.exceptions());
+            width(right.width());
+            precision(right.precision());
+            return *this;
+        }
+     };
+
+
+    typedef ios ios_base;
+
+    template <class Ch, class Tr>
+    class basic_ostream;
+
+     template <class Tr> 
+     class basic_ostream<char, Tr> : public basic_ios<char, Tr>
+     {
+     public:
+         basic_ostream(streambuf * p) : basic_ios<char,Tr> (p) {}
+     };
+
+} // namespace std
+
+
+namespace pdalboost {
+    namespace io {
+
+
+        // ** CompatTraits gcc2.95 specialisations ----------------------------
+        template<class Ch>
+        class CompatTraits< ::std::string_char_traits<Ch> >
+            : public ::std::string_char_traits<Ch> 
+        {
+        public:
+            typedef CompatTraits                compatible_type;
+
+            typedef Ch char_type;
+            typedef int int_type;
+            typedef ::std::streampos pos_type;
+            typedef ::std::streamoff off_type;
+        
+            static char_type 
+            to_char_type(const int_type& meta) {
+                return static_cast<char_type>(meta); }
+            static int_type 
+            to_int_type(const char_type& ch) {
+                return static_cast<int_type>(static_cast<unsigned char>(ch) );}
+            static bool 
+            eq_int_type(const int_type& left, const int_type& right) {
+                return left == right; }
+            static int_type 
+            eof() {
+                return static_cast<int_type>(EOF);
+            }
+            static int_type 
+            not_eof(const int_type& meta) {
+                return (meta == eof()) ? 0 : meta;
+            }
+        };
+
+        template<class Ch>
+        class CompatTraits< ::std::char_traits<Ch> > {
+        public:
+            typedef CompatTraits< ::std::string_char_traits<Ch> >  compatible_type;
+        };
+
+        // ** CompatAlloc gcc-2.95  specialisations ---------------------------
+        template<>
+        class CompatAlloc< ::std::alloc>
+        {
+        public:
+            typedef ::std::allocator<char> compatible_type;
+        };
+
+    } // N.S. io
+} // N.S. boost
+
+
+
+
+
+#endif // include guard
+
+#endif // if workaround
diff --git a/vendor/pdalboost/boost/format/detail/workarounds_stlport.hpp b/vendor/pdalboost/boost/format/detail/workarounds_stlport.hpp
new file mode 100644
index 0000000..5d435b9
--- /dev/null
+++ b/vendor/pdalboost/boost/format/detail/workarounds_stlport.hpp
@@ -0,0 +1,36 @@
+// ----------------------------------------------------------------------------
+// workarounds_stlport.hpp : workaround STLport issues
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// see http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_MACROS_STLPORT_HPP
+#define BOOST_MACROS_STLPORT_HPP
+
+// *** This should go to "boost/config/stdlib/stlport.hpp".
+
+// If the streams are not native and there are problems with using templates
+// accross namespaces, we define some macros to enable a workaround for this.
+
+// STLport 4.5
+#if !defined(_STLP_OWN_IOSTREAMS) && defined(_STLP_USE_NAMESPACES) && defined(BOOST_NO_USING_TEMPLATE)
+#  define BOOST_IO_STD 
+#  define BOOST_IO_NEEDS_USING_DECLARATION
+#endif
+
+// STLport 4.0
+#if !defined(__SGI_STL_OWN_IOSTREAMS) && defined(__STL_USE_OWN_NAMESPACE) && defined(BOOST_NO_USING_TEMPLATE)
+#  define BOOST_IO_STD 
+#  define BOOST_IO_NEEDS_USING_DECLARATION
+#endif
+
+
+// ----------------------------------------------------------------------------
+
+#endif // BOOST_MACROS_STLPORT_HPP
diff --git a/vendor/pdalboost/boost/format/exceptions.hpp b/vendor/pdalboost/boost/format/exceptions.hpp
new file mode 100644
index 0000000..f40cf0d
--- /dev/null
+++ b/vendor/pdalboost/boost/format/exceptions.hpp
@@ -0,0 +1,103 @@
+// ----------------------------------------------------------------------------
+// boost/format/exceptions.hpp 
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+//  See http://www.boost.org/libs/format/ for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_EXCEPTIONS_HPP
+#define BOOST_FORMAT_EXCEPTIONS_HPP
+
+
+#include <stdexcept>
+
+
+namespace pdalboost {
+
+    namespace io {
+
+// **** exceptions -----------------------------------------------
+
+        class format_error : public std::exception
+        {
+        public:
+            format_error()  {}
+            virtual const char *what() const throw() {
+                return "pdalboost::format_error: "
+                    "format generic failure";
+            }
+        };
+
+        class bad_format_string : public format_error
+        {
+            std::size_t pos_, next_;
+        public:
+            bad_format_string(std::size_t pos, std::size_t size) 
+                : pos_(pos), next_(size) {}
+            std::size_t get_pos() const { return pos_; }
+            std::size_t get_next() const { return next_; }
+            virtual const char *what() const throw() {
+                return "pdalboost::bad_format_string: format-string is ill-formed";
+            }
+        };
+
+        class too_few_args : public format_error
+        {
+            std::size_t cur_, expected_;
+        public:
+            too_few_args(std::size_t cur, std::size_t expected) 
+                : cur_(cur), expected_(expected) {}
+            std::size_t get_cur() const { return cur_; }
+            std::size_t get_expected() const { return expected_; }
+            virtual const char *what() const throw() {
+                return "pdalboost::too_few_args: "
+                    "format-string referred to more arguments than were passed";
+            }
+        };
+
+        class too_many_args : public format_error
+        {
+            std::size_t cur_, expected_;
+        public:
+            too_many_args(std::size_t cur, std::size_t expected) 
+                : cur_(cur), expected_(expected) {}
+            std::size_t get_cur() const { return cur_; }
+            std::size_t get_expected() const { return expected_; }
+            virtual const char *what() const throw() {
+                return "pdalboost::too_many_args: "
+                    "format-string referred to fewer arguments than were passed";
+            }
+        };
+
+
+        class  out_of_range : public format_error
+        {
+            int index_, beg_, end_;    // range is [ beg, end [
+        public:
+            out_of_range(int index, int beg, int end) 
+                : index_(index), beg_(beg), end_(end) {}
+            int get_index() const { return index_; }
+            int get_beg() const { return beg_; }
+            int get_end() const { return end_; }
+            virtual const char *what() const throw() {
+                return "pdalboost::out_of_range: "
+                    "tried to refer to an argument (or item) number which"
+                    " is out of range, according to the format string";
+            }
+        };
+
+
+    } // namespace io
+
+} // namespace pdalboost
+
+
+#endif // BOOST_FORMAT_EXCEPTIONS_HPP
diff --git a/vendor/pdalboost/boost/format/feed_args.hpp b/vendor/pdalboost/boost/format/feed_args.hpp
new file mode 100644
index 0000000..20d785d
--- /dev/null
+++ b/vendor/pdalboost/boost/format/feed_args.hpp
@@ -0,0 +1,319 @@
+// ----------------------------------------------------------------------------
+//  feed_args.hpp :  functions for processing each argument 
+//                      (feed, feed_manip, and distribute)
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_FEED_ARGS_HPP
+#define BOOST_FORMAT_FEED_ARGS_HPP
+
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/throw_exception.hpp>
+
+#include <boost/format/format_class.hpp>
+#include <boost/format/group.hpp>
+#include <boost/format/detail/msvc_disambiguater.hpp>
+
+namespace pdalboost {
+namespace io {
+namespace detail {
+
+    template<class Ch, class Tr, class Alloc>
+    void mk_str( std::basic_string<Ch,Tr, Alloc> & res, 
+                 const Ch * beg,
+                 typename std::basic_string<Ch,Tr,Alloc>::size_type size,
+                 std::streamsize w, 
+                 const Ch fill_char,
+                 std::ios_base::fmtflags f, 
+                 const Ch prefix_space, // 0 if no space-padding
+                 bool center) 
+    // applies centered/left/right  padding  to the string  [beg, beg+size[
+    // Effects : the result is placed in res.
+    {
+        typedef typename std::basic_string<Ch,Tr,Alloc>::size_type size_type;
+        res.resize(0);
+        if(w<=0 || static_cast<size_type>(w) <=size) {
+            // no need to pad.
+            res.reserve(size + !!prefix_space);
+            if(prefix_space) 
+              res.append(1, prefix_space);
+            if (size)
+              res.append(beg, size);
+        }
+        else { 
+            std::streamsize n=static_cast<std::streamsize>(w-size-!!prefix_space);
+            std::streamsize n_after = 0, n_before = 0; 
+            res.reserve(static_cast<size_type>(w)); // allocate once for the 2 inserts
+            if(center) 
+                n_after = n/2, n_before = n - n_after; 
+            else 
+                if(f & std::ios_base::left)
+                    n_after = n;
+                else
+                    n_before = n;
+            // now make the res string :
+            if(n_before) res.append(static_cast<size_type>(n_before), fill_char);
+            if(prefix_space) 
+              res.append(1, prefix_space);
+            if (size)  
+              res.append(beg, size);
+            if(n_after) res.append(static_cast<size_type>(n_after), fill_char);
+        }
+    } // -mk_str(..) 
+
+
+#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+// __DECCXX needs to be tricked to disambiguate this simple overload..
+// the trick is in "boost/format/msvc_disambiguater.hpp"
+  
+    template< class Ch, class Tr, class T> inline
+    void put_head (BOOST_IO_STD basic_ostream<Ch, Tr> & os, const T& x ) {
+        disambiguater<Ch, Tr, T>::put_head(os, x, 1L);
+    }
+    template< class Ch, class Tr, class T> inline
+    void put_last (BOOST_IO_STD basic_ostream<Ch, Tr> & os, const T& x ) {
+        disambiguater<Ch, Tr, T>::put_last(os, x, 1L);
+    }
+
+#else  
+
+    template< class Ch, class Tr, class T> inline
+    void put_head (BOOST_IO_STD basic_ostream<Ch, Tr> &, const T& ) {
+    }
+
+    template< class Ch, class Tr, class T> inline
+    void put_head( BOOST_IO_STD basic_ostream<Ch, Tr> & os, const group1<T>& x ) {
+        os << group_head(x.a1_); // send the first N-1 items, not the last
+    }
+
+    template< class Ch, class Tr, class T> inline
+    void put_last( BOOST_IO_STD basic_ostream<Ch, Tr> & os, const T& x ) {
+        os << x ;
+    }
+
+    template< class Ch, class Tr, class T> inline
+    void put_last( BOOST_IO_STD basic_ostream<Ch, Tr> & os, const group1<T>& x ) {
+        os << group_last(x.a1_); // this selects the last element
+    }
+
+#ifndef BOOST_NO_OVERLOAD_FOR_NON_CONST 
+    template< class Ch, class Tr, class T> inline
+    void put_head( BOOST_IO_STD basic_ostream<Ch, Tr> &, T& ) {
+    }
+
+    template< class Ch, class Tr, class T> inline
+    void put_last( BOOST_IO_STD basic_ostream<Ch, Tr> & os, T& x) {
+        os << x ;
+    }
+#endif
+#endif  // -__DECCXX workaround
+
+    template< class Ch, class Tr, class T>
+    void call_put_head(BOOST_IO_STD basic_ostream<Ch, Tr> & os, const void* x) {
+        put_head(os, *(typename ::pdalboost::remove_reference<T>::type*)x);
+    }
+
+    template< class Ch, class Tr, class T>
+    void call_put_last(BOOST_IO_STD basic_ostream<Ch, Tr> & os, const void* x) {
+        put_last(os, *(T*)x);
+    }
+
+    template< class Ch, class Tr>
+    struct put_holder {
+        template<class T>
+        put_holder(T& t)
+          : arg(&t),
+            put_head(&call_put_head<Ch, Tr, T>),
+            put_last(&call_put_last<Ch, Tr, T>)
+        {}
+        const void* arg;
+        void (*put_head)(BOOST_IO_STD basic_ostream<Ch, Tr> & os, const void* x);
+        void (*put_last)(BOOST_IO_STD basic_ostream<Ch, Tr> & os, const void* x);
+    };
+    
+    template< class Ch, class Tr> inline
+    void put_head( BOOST_IO_STD basic_ostream<Ch, Tr> & os, const put_holder<Ch, Tr>& t) {
+        t.put_head(os, t.arg);
+    }
+    
+    template< class Ch, class Tr> inline
+    void put_last( BOOST_IO_STD basic_ostream<Ch, Tr> & os, const put_holder<Ch, Tr>& t) {
+        t.put_last(os, t.arg);
+    }
+
+
+    template< class Ch, class Tr, class Alloc, class T> 
+    void put( T x, 
+              const format_item<Ch, Tr, Alloc>& specs, 
+              typename basic_format<Ch, Tr, Alloc>::string_type& res, 
+              typename basic_format<Ch, Tr, Alloc>::internal_streambuf_t & buf,
+              io::detail::locale_t *loc_p = NULL)
+    {
+#ifdef BOOST_MSVC
+       // If std::min<unsigned> or std::max<unsigned> are already instantiated
+       // at this point then we get a blizzard of warning messages when we call
+       // those templates with std::size_t as arguments.  Weird and very annoyning...
+#pragma warning(push)
+#pragma warning(disable:4267)
+#endif
+        // does the actual conversion of x, with given params, into a string
+        // using the supplied stringbuf.
+
+        typedef typename basic_format<Ch, Tr, Alloc>::string_type   string_type;
+        typedef typename basic_format<Ch, Tr, Alloc>::format_item_t format_item_t;
+        typedef typename string_type::size_type size_type;
+
+        basic_oaltstringstream<Ch, Tr, Alloc>  oss( &buf);
+
+        if(loc_p != NULL)
+            oss.imbue(*loc_p);
+        
+        specs.fmtstate_.apply_on(oss, loc_p);
+
+        // the stream format state can be modified by manipulators in the argument :
+        put_head( oss, x );
+        // in case x is a group, apply the manip part of it, 
+        // in order to find width
+
+        const std::ios_base::fmtflags fl=oss.flags();
+        const bool internal = (fl & std::ios_base::internal) != 0;
+        const std::streamsize w = oss.width();
+        const bool two_stepped_padding= internal && (w!=0);
+      
+        res.resize(0);
+        if(! two_stepped_padding) {
+            if(w>0) // handle padding via mk_str, not natively in stream 
+                oss.width(0);
+            put_last( oss, x);
+            const Ch * res_beg = buf.pbase();
+            Ch prefix_space = 0;
+            if(specs.pad_scheme_ & format_item_t::spacepad)
+                if(buf.pcount()== 0 || 
+                   (res_beg[0] !=oss.widen('+') && res_beg[0] !=oss.widen('-')  ))
+                    prefix_space = oss.widen(' ');
+            size_type res_size = (std::min)(
+                static_cast<size_type>(specs.truncate_ - !!prefix_space), 
+                buf.pcount() );
+            mk_str(res, res_beg, res_size, w, oss.fill(), fl, 
+                   prefix_space, (specs.pad_scheme_ & format_item_t::centered) !=0 );
+        }
+        else  { // 2-stepped padding
+            // internal can be implied by zeropad, or user-set.
+            // left, right, and centered alignment overrule internal,
+            // but spacepad or truncate might be mixed with internal (using manipulator)
+            put_last( oss, x); // may pad
+            const Ch * res_beg = buf.pbase();
+            size_type res_size = buf.pcount();
+            bool prefix_space=false;
+            if(specs.pad_scheme_ & format_item_t::spacepad)
+                if(buf.pcount()== 0 || 
+                   (res_beg[0] !=oss.widen('+') && res_beg[0] !=oss.widen('-')  ))
+                    prefix_space = true;
+            if(res_size == static_cast<size_type>(w) && w<=specs.truncate_ && !prefix_space) {
+                // okay, only one thing was printed and padded, so res is fine
+                res.assign(res_beg, res_size);
+            }
+            else { //   length w exceeded
+                // either it was multi-output with first output padding up all width..
+                // either it was one big arg and we are fine.
+                // Note that res_size<w is possible  (in case of bad user-defined formatting)
+                res.assign(res_beg, res_size);
+                res_beg=NULL;  // invalidate pointers.
+                
+                // make a new stream, to start re-formatting from scratch :
+                buf.clear_buffer();
+                basic_oaltstringstream<Ch, Tr, Alloc>  oss2( &buf);
+                specs.fmtstate_.apply_on(oss2, loc_p);
+                put_head( oss2, x );
+
+                oss2.width(0);
+                if(prefix_space)
+                    oss2 << ' ';
+                put_last(oss2, x );
+                if(buf.pcount()==0 && specs.pad_scheme_ & format_item_t::spacepad) {
+                    prefix_space =true;
+                    oss2 << ' ';
+                }
+                // we now have the minimal-length output
+                const Ch * tmp_beg = buf.pbase();
+                size_type tmp_size = (std::min)(static_cast<size_type>(specs.truncate_),
+                                                buf.pcount() );
+                                                    
+                
+                if(static_cast<size_type>(w) <= tmp_size) { 
+                    // minimal length is already >= w, so no padding (cool!)
+                        res.assign(tmp_beg, tmp_size);
+                }
+                else { // hum..  we need to pad (multi_output, or spacepad present)
+                    //find where we should pad
+                    size_type sz = (std::min)(res_size + (prefix_space ? 1 : 0), tmp_size);
+                    size_type i = prefix_space;
+                    for(; i<sz && tmp_beg[i] == res[i - (prefix_space ? 1 : 0)]; ++i) {}
+                    if(i>=tmp_size) i=prefix_space;
+                    res.assign(tmp_beg, i);
+                                        std::streamsize d = w - static_cast<std::streamsize>(tmp_size);
+                                        BOOST_ASSERT(d>0);
+                    res.append(static_cast<size_type>( d ), oss2.fill());
+                    res.append(tmp_beg+i, tmp_size-i);
+                    BOOST_ASSERT(i+(tmp_size-i)+(std::max)(d,(std::streamsize)0) 
+                                 == static_cast<size_type>(w));
+                    BOOST_ASSERT(res.size() == static_cast<size_type>(w));
+                }
+            }
+        }
+        buf.clear_buffer();
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+    } // end- put(..)
+
+
+    template< class Ch, class Tr, class Alloc, class T> 
+    void distribute (basic_format<Ch,Tr, Alloc>& self, T x) {
+        // call put(x, ..) on every occurrence of the current argument :
+        if(self.cur_arg_ >= self.num_args_)  {
+            if( self.exceptions() & too_many_args_bit )
+                pdalboost::throw_exception(too_many_args(self.cur_arg_, self.num_args_)); 
+            else return;
+        }
+        for(unsigned long i=0; i < self.items_.size(); ++i) {
+            if(self.items_[i].argN_ == self.cur_arg_) {
+                put<Ch, Tr, Alloc, T> (x, self.items_[i], self.items_[i].res_, 
+                                self.buf_, pdalboost::get_pointer(self.loc_) );
+            }
+        }
+    }
+
+    template<class Ch, class Tr, class Alloc, class T> 
+    basic_format<Ch, Tr, Alloc>&  
+    feed_impl (basic_format<Ch,Tr, Alloc>& self, T x) {
+        if(self.dumped_) self.clear();
+        distribute<Ch, Tr, Alloc, T> (self, x);
+        ++self.cur_arg_;
+        if(self.bound_.size() != 0) {
+                while( self.cur_arg_ < self.num_args_ && self.bound_[self.cur_arg_] )
+                    ++self.cur_arg_;
+        }
+        return self;
+    }
+
+    template<class Ch, class Tr, class Alloc, class T> inline
+    basic_format<Ch, Tr, Alloc>&  
+    feed (basic_format<Ch,Tr, Alloc>& self, T x) {
+        return feed_impl<Ch, Tr, Alloc, const put_holder<Ch, Tr>&>(self, put_holder<Ch, Tr>(x));
+    }
+    
+} // namespace detail
+} // namespace io
+} // namespace pdalboost
+
+
+#endif //  BOOST_FORMAT_FEED_ARGS_HPP
diff --git a/vendor/pdalboost/boost/format/format_class.hpp b/vendor/pdalboost/boost/format/format_class.hpp
new file mode 100644
index 0000000..64702d5
--- /dev/null
+++ b/vendor/pdalboost/boost/format/format_class.hpp
@@ -0,0 +1,168 @@
+// ----------------------------------------------------------------------------
+//  format_class.hpp :  class interface
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_CLASS_HPP
+#define BOOST_FORMAT_CLASS_HPP
+
+
+#include <vector>
+#include <string>
+
+#include <boost/optional.hpp> // to store locale when needed
+
+#include <boost/format/format_fwd.hpp>
+#include <boost/format/internals_fwd.hpp>
+#include <boost/format/internals.hpp>
+#include <boost/format/alt_sstream.hpp>
+
+namespace pdalboost {
+
+    template<class Ch, class Tr, class Alloc>
+    class basic_format 
+    {
+        typedef typename io::CompatTraits<Tr>::compatible_type compat_traits;  
+    public:
+        typedef Ch  CharT;   // borland fails in operator% if we use Ch and Tr directly
+        typedef std::basic_string<Ch, Tr, Alloc>              string_type;
+        typedef typename string_type::size_type               size_type;
+        typedef io::detail::format_item<Ch, Tr, Alloc>        format_item_t;
+        typedef io::basic_altstringbuf<Ch, Tr, Alloc>         internal_streambuf_t;
+        
+
+        explicit basic_format(const Ch* str=NULL);
+        explicit basic_format(const string_type& s);
+        basic_format(const basic_format& x);
+        basic_format& operator= (const basic_format& x);
+        void swap(basic_format& x);
+
+#if !defined(BOOST_NO_STD_LOCALE)
+        explicit basic_format(const Ch* str, const std::locale & loc);
+        explicit basic_format(const string_type& s, const std::locale & loc);
+#endif
+        io::detail::locale_t  getloc() const;
+
+        basic_format& clear();       // empty all converted string buffers (except bound items)
+        basic_format& clear_binds(); // unbind all bound items, and call clear()
+        basic_format& parse(const string_type&); // resets buffers and parse a new format string
+
+        // ** formatted result ** //
+        size_type   size() const;    // sum of the current string pieces sizes
+        string_type str()  const;    // final string 
+
+        // ** arguments passing ** //
+        template<class T>  
+        basic_format&   operator%(const T& x)
+            { return io::detail::feed<CharT, Tr, Alloc, const T&>(*this,x); }
+
+#ifndef BOOST_NO_OVERLOAD_FOR_NON_CONST
+        template<class T>  basic_format&   operator%(T& x) 
+            { return io::detail::feed<CharT, Tr, Alloc, T&>(*this,x); }
+#endif
+
+#if defined(__GNUC__)
+        // GCC can't handle anonymous enums without some help
+        // ** arguments passing ** //
+        basic_format&   operator%(const int& x)
+            { return io::detail::feed<CharT, Tr, Alloc, const int&>(*this,x); }
+
+#ifndef BOOST_NO_OVERLOAD_FOR_NON_CONST
+        basic_format&   operator%(int& x)
+            { return io::detail::feed<CharT, Tr, Alloc, int&>(*this,x); }
+#endif
+#endif
+
+        // The total number of arguments expected to be passed to the format objectt
+        int expected_args() const
+            { return num_args_; }
+        // The number of arguments currently bound (see bind_arg(..) )
+        int bound_args() const;
+        // The number of arguments currently fed to the format object
+        int fed_args() const;
+        // The index (1-based) of the current argument (i.e. next to be formatted)
+        int cur_arg() const;
+        // The number of arguments still required to be fed
+        int remaining_args() const; // same as expected_args() - bound_args() - fed_args()
+
+
+        // ** object modifying **//
+        template<class T>
+        basic_format&  bind_arg(int argN, const T& val) 
+            { return io::detail::bind_arg_body(*this, argN, val); }
+        basic_format&  clear_bind(int argN);
+        template<class T> 
+        basic_format&  modify_item(int itemN, T manipulator) 
+            { return io::detail::modify_item_body<Ch,Tr, Alloc, T> (*this, itemN, manipulator);}
+
+        // Choosing which errors will throw exceptions :
+        unsigned char exceptions() const;
+        unsigned char exceptions(unsigned char newexcept);
+
+#if !defined( BOOST_NO_MEMBER_TEMPLATE_FRIENDS )  \
+    && !BOOST_WORKAROUND(__BORLANDC__, <= 0x570) \
+    && !BOOST_WORKAROUND( _CRAYC, != 0) \
+    && !BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+        // use friend templates and private members only if supported
+
+#ifndef  BOOST_NO_TEMPLATE_STD_STREAM
+        template<class Ch2, class Tr2, class Alloc2>
+        friend std::basic_ostream<Ch2, Tr2> & 
+        operator<<( std::basic_ostream<Ch2, Tr2> & ,
+                    const basic_format<Ch2, Tr2, Alloc2>& );
+#else
+        template<class Ch2, class Tr2, class Alloc2>
+        friend std::ostream & 
+        operator<<( std::ostream & ,
+                    const basic_format<Ch2, Tr2, Alloc2>& );
+#endif
+
+        template<class Ch2, class Tr2, class Alloc2, class T>  
+        friend basic_format<Ch2, Tr2, Alloc2>&  
+        io::detail::feed_impl (basic_format<Ch2, Tr2, Alloc2>&, T);
+
+        template<class Ch2, class Tr2, class Alloc2, class T>  friend   
+        void io::detail::distribute (basic_format<Ch2, Tr2, Alloc2>&, T);
+        
+        template<class Ch2, class Tr2, class Alloc2, class T>  friend
+        basic_format<Ch2, Tr2, Alloc2>& 
+        io::detail::modify_item_body (basic_format<Ch2, Tr2, Alloc2>&, int, T);
+        
+        template<class Ch2, class Tr2, class Alloc2, class T> friend
+        basic_format<Ch2, Tr2, Alloc2>&  
+        io::detail::bind_arg_body (basic_format<Ch2, Tr2, Alloc2>&, int, const T&);
+
+    private:
+#endif
+        typedef io::detail::stream_format_state<Ch, Tr>  stream_format_state;
+        // flag bits, used for style_
+        enum style_values  { ordered = 1, // set only if all directives are  positional
+                             special_needs = 4 };     
+
+        void make_or_reuse_data(std::size_t nbitems);// used for (re-)initialisation
+
+        // member data --------------------------------------------//
+        std::vector<format_item_t>  items_; // each '%..' directive leads to a format_item
+        std::vector<bool> bound_; // stores which arguments were bound. size() == 0 || num_args
+
+        int              style_; // style of format-string :  positional or not, etc
+        int             cur_arg_; // keep track of wich argument is current
+        int            num_args_; // number of expected arguments
+        mutable bool     dumped_; // true only after call to str() or <<
+        string_type      prefix_; // piece of string to insert before first item
+        unsigned char exceptions_;
+        internal_streambuf_t   buf_; // the internal stream buffer.
+        pdalboost::optional<io::detail::locale_t>     loc_;
+    }; // class basic_format
+
+} // namespace pdalboost
+
+
+#endif // BOOST_FORMAT_CLASS_HPP
diff --git a/vendor/pdalboost/boost/format/format_fwd.hpp b/vendor/pdalboost/boost/format/format_fwd.hpp
new file mode 100644
index 0000000..71587e3
--- /dev/null
+++ b/vendor/pdalboost/boost/format/format_fwd.hpp
@@ -0,0 +1,43 @@
+// ----------------------------------------------------------------------------
+//  format_fwd.hpp :  forward declarations
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_FWD_HPP
+#define BOOST_FORMAT_FWD_HPP
+
+#include <string>
+#include <iosfwd>
+
+#include <boost/format/detail/compat_workarounds.hpp> 
+
+namespace pdalboost {
+
+    template <class Ch, 
+        class Tr = BOOST_IO_STD char_traits<Ch>, class Alloc = std::allocator<Ch> >
+    class basic_format;
+
+    typedef basic_format<char >     format;
+
+#if !defined(BOOST_NO_STD_WSTRING)  && !defined(BOOST_NO_STD_WSTREAMBUF)
+    typedef basic_format<wchar_t >  wformat;
+#endif
+
+    namespace io {
+        enum format_error_bits { bad_format_string_bit = 1, 
+                                 too_few_args_bit = 2, too_many_args_bit = 4,
+                                 out_of_range_bit = 8,
+                                 all_error_bits = 255, no_error_bits=0 };
+                  
+    } // namespace io
+
+} // namespace pdalboost
+
+#endif // BOOST_FORMAT_FWD_HPP
diff --git a/vendor/pdalboost/boost/format/format_implementation.hpp b/vendor/pdalboost/boost/format/format_implementation.hpp
new file mode 100644
index 0000000..14b5824
--- /dev/null
+++ b/vendor/pdalboost/boost/format/format_implementation.hpp
@@ -0,0 +1,329 @@
+// ----------------------------------------------------------------------------
+// format_implementation.hpp  Implementation of the basic_format class
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/format for library home page
+
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_IMPLEMENTATION_HPP
+#define BOOST_FORMAT_IMPLEMENTATION_HPP
+
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/assert.hpp>
+#include <boost/format/format_class.hpp>
+#include <algorithm> // std::swap
+
+namespace pdalboost {
+
+// ---  basic_format implementation -----------------------------------------//
+
+    template< class Ch, class Tr, class Alloc>
+    basic_format<Ch, Tr, Alloc>:: basic_format(const Ch* s)
+        : style_(0), cur_arg_(0), num_args_(0), dumped_(false),
+          exceptions_(io::all_error_bits)
+    {
+        if( s)
+            parse( s );
+    }
+
+#if !defined(BOOST_NO_STD_LOCALE)
+    template< class Ch, class Tr, class Alloc>
+    basic_format<Ch, Tr, Alloc>:: basic_format(const Ch* s, const std::locale & loc)
+        : style_(0), cur_arg_(0), num_args_(0), dumped_(false),
+          exceptions_(io::all_error_bits), loc_(loc)
+    {
+        if(s) parse( s );
+    }
+
+    template< class Ch, class Tr, class Alloc>
+    basic_format<Ch, Tr, Alloc>:: basic_format(const string_type& s, const std::locale & loc)
+        : style_(0), cur_arg_(0), num_args_(0), dumped_(false),
+          exceptions_(io::all_error_bits), loc_(loc)
+    {
+        parse(s);  
+    }
+#endif // ! BOOST_NO_STD_LOCALE
+    template< class Ch, class Tr, class Alloc>
+    io::detail::locale_t basic_format<Ch, Tr, Alloc>:: 
+    getloc() const {
+        return loc_ ? loc_.get() : io::detail::locale_t(); 
+    }
+
+    template< class Ch, class Tr, class Alloc>
+    basic_format<Ch, Tr, Alloc>:: basic_format(const string_type& s)
+        : style_(0), cur_arg_(0), num_args_(0), dumped_(false),
+          exceptions_(io::all_error_bits)
+    {
+        parse(s);  
+    }
+
+    template< class Ch, class Tr, class Alloc> // just don't copy the buf_ member
+    basic_format<Ch, Tr, Alloc>:: basic_format(const basic_format& x)
+        : items_(x.items_), bound_(x.bound_), style_(x.style_),
+          cur_arg_(x.cur_arg_), num_args_(x.num_args_), dumped_(x.dumped_),
+          prefix_(x.prefix_), exceptions_(x.exceptions_), loc_(x.loc_)
+    {
+    }
+
+    template< class Ch, class Tr, class Alloc>  // just don't copy the buf_ member
+    basic_format<Ch, Tr, Alloc>& basic_format<Ch, Tr, Alloc>:: 
+    operator= (const basic_format& x) {
+        if(this == &x)
+            return *this;
+        (basic_format<Ch, Tr, Alloc>(x)).swap(*this);
+        return *this;
+    }
+    template< class Ch, class Tr, class Alloc>
+    void  basic_format<Ch, Tr, Alloc>:: 
+    swap (basic_format & x) {
+        std::swap(exceptions_, x.exceptions_);
+        std::swap(style_, x.style_); 
+        std::swap(cur_arg_, x.cur_arg_); 
+        std::swap(num_args_, x.num_args_);
+        std::swap(dumped_, x.dumped_);
+
+        items_.swap(x.items_);
+        prefix_.swap(x.prefix_);
+        bound_.swap(x.bound_);
+    }
+
+    template< class Ch, class Tr, class Alloc>
+    unsigned char basic_format<Ch,Tr, Alloc>:: exceptions() const {
+        return exceptions_; 
+    }
+
+    template< class Ch, class Tr, class Alloc>
+    unsigned char basic_format<Ch,Tr, Alloc>:: exceptions(unsigned char newexcept) { 
+        unsigned char swp = exceptions_; 
+        exceptions_ = newexcept; 
+        return swp; 
+    }
+
+    template<class Ch, class Tr, class Alloc>
+    void basic_format<Ch, Tr, Alloc>:: 
+    make_or_reuse_data (std::size_t nbitems) {
+#if !defined(BOOST_NO_STD_LOCALE)
+        Ch fill = ( BOOST_USE_FACET(std::ctype<Ch>, getloc()) ). widen(' ');
+#else
+        Ch fill = ' ';
+#endif
+        if(items_.size() == 0)
+            items_.assign( nbitems, format_item_t(fill) );
+        else {
+            if(nbitems>items_.size())
+                items_.resize(nbitems, format_item_t(fill));
+            bound_.resize(0);
+            for(std::size_t i=0; i < nbitems; ++i)
+                items_[i].reset(fill); //  strings are resized, instead of reallocated
+        }
+        prefix_.resize(0);
+    }
+
+    template< class Ch, class Tr, class Alloc>
+    basic_format<Ch,Tr, Alloc>& basic_format<Ch,Tr, Alloc>:: 
+    clear () {
+        // empty the string buffers (except bound arguments)
+        // and make the format object ready for formatting a new set of arguments
+
+        BOOST_ASSERT( bound_.size()==0 || num_args_ == static_cast<int>(bound_.size()) );
+
+        for(unsigned long i=0; i<items_.size(); ++i) {
+            // clear converted strings only if the corresponding argument is not  bound :
+            if( bound_.size()==0 || items_[i].argN_<0 || !bound_[ items_[i].argN_ ] )
+                items_[i].res_.resize(0);
+        }
+        cur_arg_=0; dumped_=false;
+        // maybe first arg is bound:
+        if(bound_.size() != 0) {
+            for(; cur_arg_ < num_args_ && bound_[cur_arg_]; ++cur_arg_)
+                {}
+        }
+        return *this;
+    }
+
+    template< class Ch, class Tr, class Alloc>
+    basic_format<Ch,Tr, Alloc>& basic_format<Ch,Tr, Alloc>:: 
+    clear_binds () {
+        // remove all binds, then clear()
+        bound_.resize(0);
+        clear();
+        return *this;
+    }
+
+    template< class Ch, class Tr, class Alloc>
+    basic_format<Ch,Tr, Alloc>& basic_format<Ch,Tr, Alloc>:: 
+    clear_bind (int argN) {
+        // remove the bind of ONE argument then clear()
+        if(argN<1 || argN > num_args_ || bound_.size()==0 || !bound_[argN-1] ) {
+            if( exceptions() & io::out_of_range_bit)
+                pdalboost::throw_exception(io::out_of_range(argN, 1, num_args_+1 ) ); 
+            else return *this;
+        }
+        bound_[argN-1]=false;
+        clear();
+        return *this;
+    }
+
+    template< class Ch, class Tr, class Alloc>
+    int basic_format<Ch,Tr, Alloc>::
+    bound_args() const {
+        if(bound_.size()==0)
+            return 0;
+        int n=0;
+        for(int i=0; i<num_args_ ; ++i)
+            if(bound_[i])
+                ++n;
+        return n;
+    }
+
+    template< class Ch, class Tr, class Alloc>
+    int basic_format<Ch,Tr, Alloc>::
+    fed_args() const {
+        if(bound_.size()==0)
+            return cur_arg_;
+        int n=0;
+        for(int i=0; i<cur_arg_ ; ++i)
+            if(!bound_[i])
+                ++n;
+        return n;
+    }
+
+    template< class Ch, class Tr, class Alloc>
+    int basic_format<Ch,Tr, Alloc>::
+    cur_arg() const {
+      return cur_arg_+1; }
+
+    template< class Ch, class Tr, class Alloc>
+    int basic_format<Ch,Tr, Alloc>::
+    remaining_args() const {
+        if(bound_.size()==0)
+            return num_args_-cur_arg_;
+        int n=0;
+        for(int i=cur_arg_; i<num_args_ ; ++i)
+            if(!bound_[i])
+                ++n;
+        return n;
+    }
+
+    template< class Ch, class Tr, class Alloc>
+    typename basic_format<Ch, Tr, Alloc>::string_type 
+    basic_format<Ch,Tr, Alloc>:: 
+    str () const {
+        if(items_.size()==0)
+            return prefix_;
+        if( cur_arg_ < num_args_)
+            if( exceptions() & io::too_few_args_bit )
+                // not enough variables supplied
+                pdalboost::throw_exception(io::too_few_args(cur_arg_, num_args_)); 
+
+        unsigned long i;
+        string_type res;
+        res.reserve(size());
+        res += prefix_;
+        for(i=0; i < items_.size(); ++i) {
+            const format_item_t& item = items_[i];
+            res += item.res_;
+            if( item.argN_ == format_item_t::argN_tabulation) { 
+                BOOST_ASSERT( item.pad_scheme_ & format_item_t::tabulation);
+                if( static_cast<size_type>(item.fmtstate_.width_) > res.size() )
+                    res.append( static_cast<size_type>(item.fmtstate_.width_) - res.size(),
+                                        item.fmtstate_.fill_ );
+            }
+            res += item.appendix_;
+        }
+        dumped_=true;
+        return res;
+    }
+    template< class Ch, class Tr, class Alloc>
+    typename std::basic_string<Ch, Tr, Alloc>::size_type  basic_format<Ch,Tr, Alloc>:: 
+    size () const {
+#ifdef BOOST_MSVC
+       // If std::min<unsigned> or std::max<unsigned> are already instantiated
+       // at this point then we get a blizzard of warning messages when we call
+       // those templates with std::size_t as arguments.  Weird and very annoyning...
+#pragma warning(push)
+#pragma warning(disable:4267)
+#endif
+        BOOST_USING_STD_MAX();
+        size_type sz = prefix_.size();
+        unsigned long i;
+        for(i=0; i < items_.size(); ++i) {
+            const format_item_t& item = items_[i];
+            sz += item.res_.size();
+            if( item.argN_ == format_item_t::argN_tabulation)
+                sz = max BOOST_PREVENT_MACRO_SUBSTITUTION (sz,
+                                        static_cast<size_type>(item.fmtstate_.width_) );
+            sz += item.appendix_.size();
+        }
+        return sz;
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+    }
+
+namespace io {
+namespace detail {
+
+    template<class Ch, class Tr, class Alloc, class T> 
+    basic_format<Ch, Tr, Alloc>&  
+    bind_arg_body (basic_format<Ch, Tr, Alloc>& self, int argN, const T& val) {
+        // bind one argument to a fixed value
+        // this is persistent over clear() calls, thus also over str() and <<
+        if(self.dumped_) 
+            self.clear(); // needed because we will modify cur_arg_
+        if(argN<1 || argN > self.num_args_) {
+            if( self.exceptions() & io::out_of_range_bit )
+                pdalboost::throw_exception(io::out_of_range(argN, 1, self.num_args_+1 ) );
+            else return self;
+        }
+        if(self.bound_.size()==0) 
+            self.bound_.assign(self.num_args_,false);
+        else 
+            BOOST_ASSERT( self.num_args_ == static_cast<signed int>(self.bound_.size()) );
+        int o_cur_arg = self.cur_arg_;
+        self.cur_arg_ = argN-1; // arrays begin at 0
+
+        self.bound_[self.cur_arg_]=false; // if already set, we unset and re-sets..
+        self.operator%(val); // put val at the right place, because cur_arg is set
+    
+
+        // Now re-position cur_arg before leaving :
+        self.cur_arg_ = o_cur_arg; 
+        self.bound_[argN-1]=true;
+        if(self.cur_arg_ == argN-1 ) {
+            // hum, now this arg is bound, so move to next free arg
+            while(self.cur_arg_ < self.num_args_ && self.bound_[self.cur_arg_])   
+                ++self.cur_arg_;
+        }
+        // In any case, we either have all args, or are on an unbound arg :
+        BOOST_ASSERT( self.cur_arg_ >= self.num_args_ || ! self.bound_[self.cur_arg_]);
+        return self;
+    }
+
+    template<class Ch, class Tr, class Alloc, class T> basic_format<Ch, Tr, Alloc>&
+    modify_item_body (basic_format<Ch, Tr, Alloc>& self, int itemN, T manipulator) {
+        // applies a manipulator to the format_item describing a given directive.
+        // this is a permanent change, clear or reset won't cancel that.
+        if(itemN<1 || itemN > static_cast<signed int>(self.items_.size() )) {
+            if( self.exceptions() & io::out_of_range_bit ) 
+                pdalboost::throw_exception(io::out_of_range(itemN, 1, static_cast<int>(self.items_.size()) ));
+            else return self;
+        }
+        self.items_[itemN-1].fmtstate_. template apply_manip<T> ( manipulator );
+        return self;
+    }
+
+} // namespace detail
+} // namespace io
+} // namespace pdalboost
+
+
+
+#endif  // BOOST_FORMAT_IMPLEMENTATION_HPP
diff --git a/vendor/pdalboost/boost/format/free_funcs.hpp b/vendor/pdalboost/boost/format/free_funcs.hpp
new file mode 100644
index 0000000..1ed7803
--- /dev/null
+++ b/vendor/pdalboost/boost/format/free_funcs.hpp
@@ -0,0 +1,70 @@
+// ----------------------------------------------------------------------------
+// free_funcs.hpp :  implementation of the free functions of pdalboost::format
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_FUNCS_HPP
+#define BOOST_FORMAT_FUNCS_HPP
+
+#include <boost/format/format_class.hpp>
+#include <boost/throw_exception.hpp>
+
+namespace pdalboost {
+
+    template<class Ch, class Tr, class Alloc> inline 
+    std::basic_string<Ch, Tr, Alloc> str(const basic_format<Ch, Tr, Alloc>& f) {
+        // adds up all pieces of strings and converted items, and return the formatted string
+        return f.str();
+    }
+    namespace io {
+         using ::pdalboost::str; // keep compatibility with when it was defined in this N.S.
+    }   // - namespace io
+
+#ifndef  BOOST_NO_TEMPLATE_STD_STREAM
+        template<class Ch, class Tr, class Alloc>
+        std::basic_ostream<Ch, Tr> & 
+        operator<<( std::basic_ostream<Ch, Tr> & os,
+                    const basic_format<Ch, Tr, Alloc>& f)
+#else
+        template<class Ch, class Tr, class Alloc>
+        std::ostream & 
+        operator<<( std::ostream & os,
+                    const basic_format<Ch, Tr, Alloc>& f)
+#endif
+        // effect: "return os << str(f);" but we can do it faster
+    {
+        typedef pdalboost::basic_format<Ch, Tr, Alloc>   format_t;
+        if(f.items_.size()==0) 
+            os << f.prefix_;
+        else {
+            if(f.cur_arg_ < f.num_args_)
+                if( f.exceptions() & io::too_few_args_bit )
+                    // not enough variables supplied
+                    pdalboost::throw_exception(io::too_few_args(f.cur_arg_, f.num_args_)); 
+            if(f.style_ & format_t::special_needs) 
+                os << f.str();
+            else {
+                // else we dont have to count chars output, so we dump directly to os :
+                os << f.prefix_;
+                for(unsigned long i=0; i<f.items_.size(); ++i) {
+                    const typename format_t::format_item_t& item = f.items_[i];
+                    os << item.res_;
+                    os << item.appendix_;
+                }
+            }
+        }
+        f.dumped_=true;
+        return os;
+    }
+
+} // namespace pdalboost
+
+
+#endif // BOOST_FORMAT_FUNCS_HPP
diff --git a/vendor/pdalboost/boost/format/group.hpp b/vendor/pdalboost/boost/format/group.hpp
new file mode 100644
index 0000000..a8fd7e4
--- /dev/null
+++ b/vendor/pdalboost/boost/format/group.hpp
@@ -0,0 +1,684 @@
+
+// ----------------------------------------------------------------------------
+// group.hpp :  encapsulates a group of manipulators along with an argument
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+                      
+// group_head : cut the last element of a group out.
+// (is overloaded below on each type of group)
+
+// group_last : returns the last element of a group
+// (is overloaded below on each type of group)
+// ----------------------------------------------------------------------------
+
+
+#ifndef BOOST_FORMAT_GROUP_HPP
+#define BOOST_FORMAT_GROUP_HPP
+
+#include <boost/config.hpp>
+
+
+namespace pdalboost {
+namespace io {
+
+
+namespace detail {
+
+
+// empty group, but useful even though.
+struct group0 
+{
+    group0()      {}
+};
+
+template <class Ch, class Tr>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << ( BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+             const group0& )
+{ 
+   return os; 
+}
+
+template <class T1>
+struct group1
+{
+    T1 a1_;
+    group1(T1 a1)
+      : a1_(a1)
+      {}
+private:
+   group1& operator=(const group1&);
+};
+
+template <class Ch, class Tr, class T1>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+             const group1<T1>& x)
+{ 
+   os << x.a1_;  
+   return os; 
+}
+
+
+
+
+template <class T1,class T2>
+struct group2
+{
+    T1 a1_;
+    T2 a2_;
+    group2(T1 a1,T2 a2)
+      : a1_(a1),a2_(a2)
+      {}
+private:
+   group2& operator=(const group2&);
+};
+
+template <class Ch, class Tr, class T1,class T2>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+             const group2<T1,T2>& x)
+{ 
+   os << x.a1_<< x.a2_;  
+   return os; 
+}
+
+template <class T1,class T2,class T3>
+struct group3
+{
+    T1 a1_;
+    T2 a2_;
+    T3 a3_;
+    group3(T1 a1,T2 a2,T3 a3)
+      : a1_(a1),a2_(a2),a3_(a3)
+      {}
+private:
+   group3& operator=(const group3&);
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+             const group3<T1,T2,T3>& x)
+{ 
+   os << x.a1_<< x.a2_<< x.a3_;  
+   return os; 
+}
+
+template <class T1,class T2,class T3,class T4>
+struct group4
+{
+    T1 a1_;
+    T2 a2_;
+    T3 a3_;
+    T4 a4_;
+    group4(T1 a1,T2 a2,T3 a3,T4 a4)
+      : a1_(a1),a2_(a2),a3_(a3),a4_(a4)
+      {}
+private:
+   group4& operator=(const group4&);
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3,class T4>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+             const group4<T1,T2,T3,T4>& x)
+{ 
+   os << x.a1_<< x.a2_<< x.a3_<< x.a4_;  
+   return os; 
+}
+
+template <class T1,class T2,class T3,class T4,class T5>
+struct group5
+{
+    T1 a1_;
+    T2 a2_;
+    T3 a3_;
+    T4 a4_;
+    T5 a5_;
+    group5(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5)
+      : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5)
+      {}
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+             const group5<T1,T2,T3,T4,T5>& x)
+{ 
+   os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_;  
+   return os; 
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6>
+struct group6
+{
+    T1 a1_;
+    T2 a2_;
+    T3 a3_;
+    T4 a4_;
+    T5 a5_;
+    T6 a6_;
+    group6(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6)
+      : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6)
+      {}
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5,class T6>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+             const group6<T1,T2,T3,T4,T5,T6>& x)
+{ 
+   os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_;  
+   return os; 
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7>
+struct group7
+{
+    T1 a1_;
+    T2 a2_;
+    T3 a3_;
+    T4 a4_;
+    T5 a5_;
+    T6 a6_;
+    T7 a7_;
+    group7(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7)
+      : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7)
+      {}
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5,class T6,class T7>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+             const group7<T1,T2,T3,T4,T5,T6,T7>& x)
+{ 
+   os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_;  
+   return os; 
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8>
+struct group8
+{
+    T1 a1_;
+    T2 a2_;
+    T3 a3_;
+    T4 a4_;
+    T5 a5_;
+    T6 a6_;
+    T7 a7_;
+    T8 a8_;
+    group8(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8)
+      : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7),a8_(a8)
+      {}
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+             const group8<T1,T2,T3,T4,T5,T6,T7,T8>& x)
+{ 
+   os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_<< x.a8_;  
+   return os; 
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9>
+struct group9
+{
+    T1 a1_;
+    T2 a2_;
+    T3 a3_;
+    T4 a4_;
+    T5 a5_;
+    T6 a6_;
+    T7 a7_;
+    T8 a8_;
+    T9 a9_;
+    group9(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9)
+      : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7),a8_(a8),a9_(a9)
+      {}
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+             const group9<T1,T2,T3,T4,T5,T6,T7,T8,T9>& x)
+{ 
+   os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_<< x.a8_<< x.a9_;  
+   return os; 
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10>
+struct group10
+{
+    T1 a1_;
+    T2 a2_;
+    T3 a3_;
+    T4 a4_;
+    T5 a5_;
+    T6 a6_;
+    T7 a7_;
+    T8 a8_;
+    T9 a9_;
+    T10 a10_;
+    group10(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9,T10 a10)
+      : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7),a8_(a8),a9_(a9),a10_(a10)
+      {}
+};
+
+template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10>
+inline
+BOOST_IO_STD basic_ostream<Ch, Tr>&
+operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
+             const group10<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10>& x)
+{ 
+   os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_<< x.a8_<< x.a9_<< x.a10_;  
+   return os; 
+}
+
+
+
+
+template <class T1,class T2>
+inline
+group1<T1> 
+group_head( group2<T1,T2> const& x)
+{
+   return group1<T1> (x.a1_); 
+}
+
+template <class T1,class T2>
+inline
+group1<T2> 
+group_last( group2<T1,T2> const& x)
+{
+   return group1<T2> (x.a2_); 
+}
+
+
+
+template <class T1,class T2,class T3>
+inline
+group2<T1,T2> 
+group_head( group3<T1,T2,T3> const& x)
+{
+   return group2<T1,T2> (x.a1_,x.a2_); 
+}
+
+template <class T1,class T2,class T3>
+inline
+group1<T3> 
+group_last( group3<T1,T2,T3> const& x)
+{
+   return group1<T3> (x.a3_); 
+}
+
+
+
+template <class T1,class T2,class T3,class T4>
+inline
+group3<T1,T2,T3> 
+group_head( group4<T1,T2,T3,T4> const& x)
+{
+   return group3<T1,T2,T3> (x.a1_,x.a2_,x.a3_); 
+}
+
+template <class T1,class T2,class T3,class T4>
+inline
+group1<T4> 
+group_last( group4<T1,T2,T3,T4> const& x)
+{
+   return group1<T4> (x.a4_); 
+}
+
+
+
+template <class T1,class T2,class T3,class T4,class T5>
+inline
+group4<T1,T2,T3,T4> 
+group_head( group5<T1,T2,T3,T4,T5> const& x)
+{
+   return group4<T1,T2,T3,T4> (x.a1_,x.a2_,x.a3_,x.a4_); 
+}
+
+template <class T1,class T2,class T3,class T4,class T5>
+inline
+group1<T5> 
+group_last( group5<T1,T2,T3,T4,T5> const& x)
+{
+   return group1<T5> (x.a5_); 
+}
+
+
+
+template <class T1,class T2,class T3,class T4,class T5,class T6>
+inline
+group5<T1,T2,T3,T4,T5> 
+group_head( group6<T1,T2,T3,T4,T5,T6> const& x)
+{
+   return group5<T1,T2,T3,T4,T5> (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_); 
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6>
+inline
+group1<T6> 
+group_last( group6<T1,T2,T3,T4,T5,T6> const& x)
+{
+   return group1<T6> (x.a6_); 
+}
+
+
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7>
+inline
+group6<T1,T2,T3,T4,T5,T6> 
+group_head( group7<T1,T2,T3,T4,T5,T6,T7> const& x)
+{
+   return group6<T1,T2,T3,T4,T5,T6> (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_); 
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7>
+inline
+group1<T7> 
+group_last( group7<T1,T2,T3,T4,T5,T6,T7> const& x)
+{
+   return group1<T7> (x.a7_); 
+}
+
+
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8>
+inline
+group7<T1,T2,T3,T4,T5,T6,T7> 
+group_head( group8<T1,T2,T3,T4,T5,T6,T7,T8> const& x)
+{
+   return group7<T1,T2,T3,T4,T5,T6,T7> (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_,x.a7_); 
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8>
+inline
+group1<T8> 
+group_last( group8<T1,T2,T3,T4,T5,T6,T7,T8> const& x)
+{
+   return group1<T8> (x.a8_); 
+}
+
+
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9>
+inline
+group8<T1,T2,T3,T4,T5,T6,T7,T8> 
+group_head( group9<T1,T2,T3,T4,T5,T6,T7,T8,T9> const& x)
+{
+   return group8<T1,T2,T3,T4,T5,T6,T7,T8> (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_,x.a7_,x.a8_); 
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9>
+inline
+group1<T9> 
+group_last( group9<T1,T2,T3,T4,T5,T6,T7,T8,T9> const& x)
+{
+   return group1<T9> (x.a9_); 
+}
+
+
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10>
+inline
+group9<T1,T2,T3,T4,T5,T6,T7,T8,T9> 
+group_head( group10<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> const& x)
+{
+   return group9<T1,T2,T3,T4,T5,T6,T7,T8,T9> (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_,x.a7_,x.a8_,x.a9_); 
+}
+
+template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10>
+inline
+group1<T10> 
+group_last( group10<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> const& x)
+{
+   return group1<T10> (x.a10_); 
+}
+
+
+
+
+
+} // namespace detail
+
+
+
+// helper functions
+
+
+inline detail::group1< detail::group0 >  
+group() { return detail::group1< detail::group0 > ( detail::group0() ); }
+
+template  <class T1, class Var> 
+inline
+detail::group1< detail::group2<T1, Var const&> >
+  group(T1 a1, Var const& var)
+{ 
+   return detail::group1< detail::group2<T1, Var const&> >
+                   ( detail::group2<T1, Var const&> 
+                        (a1, var) 
+                  );
+}
+
+template  <class T1,class T2, class Var> 
+inline
+detail::group1< detail::group3<T1,T2, Var const&> >
+  group(T1 a1,T2 a2, Var const& var)
+{ 
+   return detail::group1< detail::group3<T1,T2, Var const&> >
+                   ( detail::group3<T1,T2, Var const&> 
+                        (a1,a2, var) 
+                  );
+}
+
+template  <class T1,class T2,class T3, class Var> 
+inline
+detail::group1< detail::group4<T1,T2,T3, Var const&> >
+  group(T1 a1,T2 a2,T3 a3, Var const& var)
+{ 
+   return detail::group1< detail::group4<T1,T2,T3, Var const&> >
+                   ( detail::group4<T1,T2,T3, Var const&> 
+                        (a1,a2,a3, var) 
+                  );
+}
+
+template  <class T1,class T2,class T3,class T4, class Var> 
+inline
+detail::group1< detail::group5<T1,T2,T3,T4, Var const&> >
+  group(T1 a1,T2 a2,T3 a3,T4 a4, Var const& var)
+{ 
+   return detail::group1< detail::group5<T1,T2,T3,T4, Var const&> >
+                   ( detail::group5<T1,T2,T3,T4, Var const&> 
+                        (a1,a2,a3,a4, var) 
+                  );
+}
+
+template  <class T1,class T2,class T3,class T4,class T5, class Var> 
+inline
+detail::group1< detail::group6<T1,T2,T3,T4,T5, Var const&> >
+  group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5, Var const& var)
+{ 
+   return detail::group1< detail::group6<T1,T2,T3,T4,T5, Var const&> >
+                   ( detail::group6<T1,T2,T3,T4,T5, Var const&> 
+                        (a1,a2,a3,a4,a5, var) 
+                  );
+}
+
+template  <class T1,class T2,class T3,class T4,class T5,class T6, class Var> 
+inline
+detail::group1< detail::group7<T1,T2,T3,T4,T5,T6, Var const&> >
+  group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6, Var const& var)
+{ 
+   return detail::group1< detail::group7<T1,T2,T3,T4,T5,T6, Var const&> >
+                   ( detail::group7<T1,T2,T3,T4,T5,T6, Var const&> 
+                        (a1,a2,a3,a4,a5,a6, var) 
+                  );
+}
+
+template  <class T1,class T2,class T3,class T4,class T5,class T6,class T7, class Var> 
+inline
+detail::group1< detail::group8<T1,T2,T3,T4,T5,T6,T7, Var const&> >
+  group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7, Var const& var)
+{ 
+   return detail::group1< detail::group8<T1,T2,T3,T4,T5,T6,T7, Var const&> >
+                   ( detail::group8<T1,T2,T3,T4,T5,T6,T7, Var const&> 
+                        (a1,a2,a3,a4,a5,a6,a7, var) 
+                  );
+}
+
+template  <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8, class Var> 
+inline
+detail::group1< detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var const&> >
+  group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, Var const& var)
+{ 
+   return detail::group1< detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var const&> >
+                   ( detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var const&> 
+                        (a1,a2,a3,a4,a5,a6,a7,a8, var) 
+                  );
+}
+
+template  <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9, class Var> 
+inline
+detail::group1< detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var const&> >
+  group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9, Var const& var)
+{ 
+   return detail::group1< detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var const&> >
+                   ( detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var const&> 
+                        (a1,a2,a3,a4,a5,a6,a7,a8,a9, var) 
+                  );
+}
+
+
+#ifndef BOOST_NO_OVERLOAD_FOR_NON_CONST
+
+template  <class T1, class Var> 
+inline
+detail::group1< detail::group2<T1, Var&> >
+  group(T1 a1, Var& var)
+{ 
+   return detail::group1< detail::group2<T1, Var&> >
+                   ( detail::group2<T1, Var&> 
+                        (a1, var) 
+                  );
+}
+
+template  <class T1,class T2, class Var> 
+inline
+detail::group1< detail::group3<T1,T2, Var&> >
+  group(T1 a1,T2 a2, Var& var)
+{ 
+   return detail::group1< detail::group3<T1,T2, Var&> >
+                   ( detail::group3<T1,T2, Var&> 
+                        (a1,a2, var) 
+                  );
+}
+
+template  <class T1,class T2,class T3, class Var> 
+inline
+detail::group1< detail::group4<T1,T2,T3, Var&> >
+  group(T1 a1,T2 a2,T3 a3, Var& var)
+{ 
+   return detail::group1< detail::group4<T1,T2,T3, Var&> >
+                   ( detail::group4<T1,T2,T3, Var&> 
+                        (a1,a2,a3, var) 
+                  );
+}
+
+template  <class T1,class T2,class T3,class T4, class Var> 
+inline
+detail::group1< detail::group5<T1,T2,T3,T4, Var&> >
+  group(T1 a1,T2 a2,T3 a3,T4 a4, Var& var)
+{ 
+   return detail::group1< detail::group5<T1,T2,T3,T4, Var&> >
+                   ( detail::group5<T1,T2,T3,T4, Var&> 
+                        (a1,a2,a3,a4, var) 
+                  );
+}
+
+template  <class T1,class T2,class T3,class T4,class T5, class Var> 
+inline
+detail::group1< detail::group6<T1,T2,T3,T4,T5, Var&> >
+  group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5, Var& var)
+{ 
+   return detail::group1< detail::group6<T1,T2,T3,T4,T5, Var&> >
+                   ( detail::group6<T1,T2,T3,T4,T5, Var&> 
+                        (a1,a2,a3,a4,a5, var) 
+                  );
+}
+
+template  <class T1,class T2,class T3,class T4,class T5,class T6, class Var> 
+inline
+detail::group1< detail::group7<T1,T2,T3,T4,T5,T6, Var&> >
+  group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6, Var& var)
+{ 
+   return detail::group1< detail::group7<T1,T2,T3,T4,T5,T6, Var&> >
+                   ( detail::group7<T1,T2,T3,T4,T5,T6, Var&> 
+                        (a1,a2,a3,a4,a5,a6, var) 
+                  );
+}
+
+template  <class T1,class T2,class T3,class T4,class T5,class T6,class T7, class Var> 
+inline
+detail::group1< detail::group8<T1,T2,T3,T4,T5,T6,T7, Var&> >
+  group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7, Var& var)
+{ 
+   return detail::group1< detail::group8<T1,T2,T3,T4,T5,T6,T7, Var&> >
+                   ( detail::group8<T1,T2,T3,T4,T5,T6,T7, Var&> 
+                        (a1,a2,a3,a4,a5,a6,a7, var) 
+                  );
+}
+
+template  <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8, class Var> 
+inline
+detail::group1< detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var&> >
+  group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, Var& var)
+{ 
+   return detail::group1< detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var&> >
+                   ( detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var&> 
+                        (a1,a2,a3,a4,a5,a6,a7,a8, var) 
+                  );
+}
+
+template  <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9, class Var> 
+inline
+detail::group1< detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var&> >
+  group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9, Var& var)
+{ 
+   return detail::group1< detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var&> >
+                   ( detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var&> 
+                        (a1,a2,a3,a4,a5,a6,a7,a8,a9, var) 
+                  );
+}
+
+
+#endif  // - BOOST_NO_OVERLOAD_FOR_NON_CONST
+
+
+} // namespace io
+
+} // namespace pdalboost
+
+
+#endif   // BOOST_FORMAT_GROUP_HPP
diff --git a/vendor/pdalboost/boost/format/internals.hpp b/vendor/pdalboost/boost/format/internals.hpp
new file mode 100644
index 0000000..8bed381
--- /dev/null
+++ b/vendor/pdalboost/boost/format/internals.hpp
@@ -0,0 +1,202 @@
+// ----------------------------------------------------------------------------
+// internals.hpp :  internal structs : stream_format_state, format_item. 
+//                  included by format.hpp
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_INTERNALS_HPP
+#define BOOST_FORMAT_INTERNALS_HPP
+
+
+#include <string>
+#include <boost/assert.hpp>
+#include <boost/optional.hpp>
+#include <boost/limits.hpp>
+#include <boost/format/detail/compat_workarounds.hpp>
+#include <boost/format/alt_sstream.hpp> // used as a dummy stream
+
+namespace pdalboost {
+namespace io {
+namespace detail {
+
+
+//---- stream_format_state --------------------------------------------------//
+
+//   set of params that define the format state of a stream
+    template<class Ch, class Tr> 
+    struct stream_format_state 
+    {
+        typedef BOOST_IO_STD basic_ios<Ch, Tr>   basic_ios;
+
+        stream_format_state(Ch fill)                 { reset(fill); }
+//        stream_format_state(const basic_ios& os)     { set_by_stream(os); }
+
+        void reset(Ch fill);                     //- sets to default state.
+        void set_by_stream(const basic_ios& os); //- sets to os's state.
+        void apply_on(basic_ios & os,            //- applies format_state to the stream
+                      pdalboost::io::detail::locale_t * loc_default = 0) const;
+        template<class T> 
+        void apply_manip(T manipulator)          //- modifies state by applying manipulator
+            { apply_manip_body<Ch, Tr, T>( *this, manipulator) ; }
+
+        // --- data ---
+        std::streamsize width_;
+        std::streamsize precision_;
+        Ch fill_; 
+        std::ios_base::fmtflags flags_;
+        std::ios_base::iostate  rdstate_;
+        std::ios_base::iostate  exceptions_;
+        pdalboost::optional<pdalboost::io::detail::locale_t>  loc_;
+    };  
+
+
+//---- format_item  ---------------------------------------------------------//
+
+//   stores all parameters that can be specified in format strings
+    template<class Ch, class Tr, class Alloc>  
+    struct format_item 
+    {     
+        enum pad_values { zeropad = 1, spacepad =2, centered=4, tabulation = 8 };
+                         // 1. if zeropad is set, all other bits are not, 
+                         // 2. if tabulation is set, all others are not.
+                         // centered and spacepad can be mixed freely.
+        enum arg_values { argN_no_posit   = -1, // non-positional directive. will set argN later
+                          argN_tabulation = -2, // tabulation directive. (no argument read) 
+                          argN_ignored    = -3  // ignored directive. (no argument read)
+        };
+        typedef BOOST_IO_STD basic_ios<Ch, Tr>                    basic_ios;
+        typedef detail::stream_format_state<Ch, Tr>               stream_format_state;
+        typedef ::std::basic_string<Ch, Tr, Alloc>                string_type;
+
+        format_item(Ch fill) :argN_(argN_no_posit), fmtstate_(fill), 
+                              truncate_(max_streamsize()), pad_scheme_(0)  {}
+        void reset(Ch fill);
+        void compute_states(); // sets states  according to truncate and pad_scheme.
+
+        static std::streamsize max_streamsize() { 
+            return (std::numeric_limits<std::streamsize>::max)();
+        }
+
+        // --- data ---
+        int         argN_;  //- argument number (starts at 0,  eg : %1 => argN=0)
+                            //  negative values for items that don't process an argument
+        string_type  res_;      //- result of the formatting of this item
+        string_type  appendix_; //- piece of string between this item and the next
+
+        stream_format_state fmtstate_;// set by parsing, is only affected by modify_item
+
+        std::streamsize truncate_;//- is set for directives like %.5s that ask truncation
+        unsigned int pad_scheme_;//- several possible padding schemes can mix. see pad_values
+    }; 
+
+
+
+//--- Definitions  ------------------------------------------------------------
+
+// -   stream_format_state:: -------------------------------------------------
+    template<class Ch, class Tr>
+    void stream_format_state<Ch,Tr>:: apply_on (basic_ios & os,
+                      pdalboost::io::detail::locale_t * loc_default) const {
+    // If a locale is available, set it first. "os.fill(fill_);" may chrash otherwise. 
+#if !defined(BOOST_NO_STD_LOCALE)
+        if(loc_)
+            os.imbue(loc_.get());
+        else if(loc_default)
+            os.imbue(*loc_default);
+#else
+        (void) loc_default; // keep compiler quiet if we don't support locales
+#endif        
+        // set the state of this stream according to our params
+        if(width_ != -1)
+            os.width(width_);
+        if(precision_ != -1)
+            os.precision(precision_);
+        if(fill_ != 0)
+            os.fill(fill_);
+        os.flags(flags_);
+        os.clear(rdstate_);
+        os.exceptions(exceptions_);
+    }
+
+    template<class Ch, class Tr>
+    void stream_format_state<Ch,Tr>:: set_by_stream(const basic_ios& os) {
+        // set our params according to the state of this stream
+        flags_ = os.flags();
+        width_ = os.width();
+        precision_ = os.precision();
+        fill_ = os.fill();
+        rdstate_ = os.rdstate();
+        exceptions_ = os.exceptions();
+    }
+
+
+    template<class Ch, class Tr, class T>
+    void apply_manip_body( stream_format_state<Ch, Tr>& self,
+                           T manipulator) {
+        // modify our params according to the manipulator
+        basic_oaltstringstream<Ch, Tr>  ss;
+        self.apply_on( ss );
+        ss << manipulator;
+        self.set_by_stream( ss );
+    }
+
+    template<class Ch, class Tr> inline
+    void stream_format_state<Ch,Tr>:: reset(Ch fill) {
+        // set our params to standard's default state.   cf 27.4.4.1 of the C++ norm
+        width_=0; precision_=6; 
+        fill_=fill; // default is widen(' '), but we cant compute it without the locale
+        flags_ = std::ios_base::dec | std::ios_base::skipws; 
+        // the adjust_field part is left equal to 0, which means right.
+        exceptions_ = std::ios_base::goodbit;
+        rdstate_ = std::ios_base::goodbit;
+    }
+
+
+// ---   format_item:: --------------------------------------------------------
+
+    template<class Ch, class Tr, class Alloc> 
+    void format_item<Ch, Tr, Alloc>:: 
+    reset (Ch fill) { 
+        argN_=argN_no_posit; truncate_ = max_streamsize(); pad_scheme_ =0; 
+        res_.resize(0); appendix_.resize(0);
+        fmtstate_.reset(fill);
+    }
+
+    template<class Ch, class Tr, class Alloc> 
+    void format_item<Ch, Tr, Alloc>:: 
+    compute_states() {
+        // reflect pad_scheme_   on  fmt_state_
+        //   because some pad_schemes has complex consequences on several state params.
+        if(pad_scheme_ & zeropad) {
+            // ignore zeropad in left alignment :
+            if(fmtstate_.flags_ & std::ios_base::left) {
+              BOOST_ASSERT(!(fmtstate_.flags_ &(std::ios_base::adjustfield ^std::ios_base::left)));
+              // only left bit might be set. (not right, nor internal)
+              pad_scheme_ = pad_scheme_ & (~zeropad); 
+            }
+            else { 
+                pad_scheme_ &= ~spacepad; // printf ignores spacepad when zeropadding
+                fmtstate_.fill_='0'; 
+                fmtstate_.flags_ = (fmtstate_.flags_ & ~std::ios_base::adjustfield) 
+                    | std::ios_base::internal;
+                // removes all adjustfield bits, and adds internal.
+            }
+        }
+        if(pad_scheme_ & spacepad) {
+            if(fmtstate_.flags_ & std::ios_base::showpos)
+                pad_scheme_ &= ~spacepad;
+        }
+    }
+
+
+} } } // namespaces pdalboost :: io :: detail
+
+
+#endif // BOOST_FORMAT_INTERNALS_HPP
diff --git a/vendor/pdalboost/boost/format/internals_fwd.hpp b/vendor/pdalboost/boost/format/internals_fwd.hpp
new file mode 100644
index 0000000..67d3678
--- /dev/null
+++ b/vendor/pdalboost/boost/format/internals_fwd.hpp
@@ -0,0 +1,64 @@
+// ----------------------------------------------------------------------------
+// internals_fwd.hpp :  forward declarations, for internal headers
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_INTERNAL_FWD_HPP
+#define BOOST_FORMAT_INTERNAL_FWD_HPP
+
+#include <boost/format/format_fwd.hpp>
+#include <boost/config.hpp>
+
+
+namespace pdalboost {
+namespace io {
+
+namespace detail {
+  template<class Ch, class Tr> struct stream_format_state;
+    template<class Ch, class Tr, class Alloc> struct format_item;
+
+
+  // these functions were intended as methods, 
+  // but MSVC have problems with template member functions :
+  // defined in format_implementation.hpp :
+    template<class Ch, class Tr, class Alloc, class T> 
+    basic_format<Ch, Tr, Alloc>&  
+    modify_item_body (basic_format<Ch, Tr, Alloc>& self, 
+                      int itemN, T manipulator);
+
+    template<class Ch, class Tr, class Alloc, class T> 
+    basic_format<Ch, Tr, Alloc>&  
+    bind_arg_body (basic_format<Ch, Tr, Alloc>& self,
+                   int argN, const T& val);
+
+    // in internals.hpp :
+    template<class Ch, class Tr, class T> 
+    void apply_manip_body (stream_format_state<Ch, Tr>& self,
+                           T manipulator);
+
+    // argument feeding (defined in feed_args.hpp ) :
+    template<class Ch, class Tr, class Alloc, class T> 
+    void distribute (basic_format<Ch,Tr, Alloc>& self, T x);
+
+    template<class Ch, class Tr, class Alloc, class T> 
+    basic_format<Ch, Tr, Alloc>& 
+    feed (basic_format<Ch,Tr, Alloc>& self, T x);
+
+    template<class Ch, class Tr, class Alloc, class T> 
+    basic_format<Ch, Tr, Alloc>& 
+    feed_impl (basic_format<Ch,Tr, Alloc>& self, T x);
+ 
+} // namespace detail
+
+} // namespace io
+} // namespace pdalboost
+
+
+#endif //  BOOST_FORMAT_INTERNAL_FWD_HPP
diff --git a/vendor/pdalboost/boost/format/parsing.hpp b/vendor/pdalboost/boost/format/parsing.hpp
new file mode 100644
index 0000000..2f5e006
--- /dev/null
+++ b/vendor/pdalboost/boost/format/parsing.hpp
@@ -0,0 +1,501 @@
+// ----------------------------------------------------------------------------
+// parsing.hpp :  implementation of the parsing member functions
+//                      ( parse, parse_printf_directive)
+// ----------------------------------------------------------------------------
+
+//  Copyright Samuel Krempp 2003. Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// see http://www.boost.org/libs/format for library home page
+
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_FORMAT_PARSING_HPP
+#define BOOST_FORMAT_PARSING_HPP
+
+
+#include <boost/format/format_class.hpp>
+#include <boost/format/exceptions.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/assert.hpp>
+
+
+namespace pdalboost {
+namespace io {
+namespace detail {
+
+#if defined(BOOST_NO_STD_LOCALE)
+    // streams will be used for narrow / widen. but these methods are not const
+    template<class T>
+    T& const_or_not(const T& x) { 
+        return const_cast<T&> (x);
+    }
+#else
+    template<class T>
+    const T& const_or_not(const T& x) { 
+        return x;
+    }
+#endif
+
+    template<class Ch, class Facet> inline
+    char wrap_narrow(const Facet& fac, Ch c, char deflt) {
+        return const_or_not(fac).narrow(c, deflt);
+    }
+
+    template<class Ch, class Facet> inline
+    bool wrap_isdigit(const Facet& fac, Ch c) {
+#if ! defined( BOOST_NO_LOCALE_ISDIGIT )
+        return fac.is(std::ctype<Ch>::digit, c);
+# else
+        (void) fac;     // remove "unused parameter" warning
+        using namespace std;
+        return isdigit(c) != 0; 
+#endif 
+    }
+ 
+    template<class Iter, class Facet> 
+    Iter wrap_scan_notdigit(const Facet & fac, Iter beg, Iter end) {
+        using namespace std;
+        for( ; beg!=end && wrap_isdigit(fac, *beg); ++beg) ;
+        return beg;
+    }
+
+
+    // Input : [start, last) iterators range and a
+    //          a Facet to use its widen/narrow member function
+    // Effects : read sequence and convert digits into integral n, of type Res
+    // Returns : n
+    template<class Res, class Iter, class Facet>
+    Iter str2int (const Iter & start, const Iter & last, Res & res, 
+                 const Facet& fac) 
+    {
+        using namespace std;
+        Iter it;
+        res=0;
+        for(it=start; it != last && wrap_isdigit(fac, *it); ++it ) {
+            char cur_ch = wrap_narrow(fac, *it, 0); // cant fail.
+            res *= 10;
+            res += cur_ch - '0'; // 22.2.1.1.2.13 of the C++ standard
+        }
+        return it;
+    }
+
+    // skip printf's "asterisk-fields" directives in the format-string buf
+    // Input : char string, with starting index *pos_p
+    //         a Facet merely to use its widen/narrow member function
+    // Effects : advance *pos_p by skipping printf's asterisk fields.
+    // Returns : nothing
+    template<class Iter, class Facet>
+    Iter skip_asterisk(Iter start, Iter last, const Facet& fac) 
+    {
+        using namespace std;
+        ++ start;
+        start = wrap_scan_notdigit(fac, start, last);
+        if(start!=last && *start== const_or_not(fac).widen( '$') )
+            ++start;
+        return start;
+    }
+
+
+    // auxiliary func called by parse_printf_directive
+    // for centralising error handling
+    // it either throws if user sets the corresponding flag, or does nothing.
+    inline void maybe_throw_exception(unsigned char exceptions, 
+                                      std::size_t pos, std::size_t size)
+    {
+        if(exceptions & io::bad_format_string_bit)
+            pdalboost::throw_exception(io::bad_format_string(pos, size) );
+    }
+    
+
+    // Input: the position of a printf-directive in the format-string
+    //    a basic_ios& merely to use its widen/narrow member function
+    //    a bitset'exceptions' telling whether to throw exceptions on errors.
+    // Returns:
+    //  true if parse succeeded (ignore some errors if exceptions disabled)
+    //  false if it failed so bad that the directive should be printed verbatim
+    // Effects:
+    //  start is incremented so that *start is the first char after
+    //     this directive
+    //  *fpar is set with the parameters read in the directive
+    template<class Ch, class Tr, class Alloc, class Iter, class Facet>
+    bool parse_printf_directive(Iter & start, const Iter& last, 
+                                detail::format_item<Ch, Tr, Alloc> * fpar,
+                                const Facet& fac,
+                                std::size_t offset, unsigned char exceptions)
+    {
+        typedef typename basic_format<Ch, Tr, Alloc>::format_item_t format_item_t;
+
+        fpar->argN_ = format_item_t::argN_no_posit;  // if no positional-directive
+        bool precision_set = false;
+        bool in_brackets=false;
+        Iter start0 = start;
+        std::size_t fstring_size = last-start0+offset;
+
+        if(start>= last) { // empty directive : this is a trailing %
+                maybe_throw_exception(exceptions, start-start0 + offset, fstring_size);
+                return false;
+        }          
+          
+        if(*start== const_or_not(fac).widen( '|')) {
+            in_brackets=true;
+            if( ++start >= last ) {
+                maybe_throw_exception(exceptions, start-start0 + offset, fstring_size);
+                return false;
+            }
+        }
+
+        // the flag '0' would be picked as a digit for argument order, but here it's a flag :
+        if(*start== const_or_not(fac).widen( '0')) 
+            goto parse_flags;
+
+        // handle argument order (%2$d)  or possibly width specification: %2d
+        if(wrap_isdigit(fac, *start)) {
+            int n;
+            start = str2int(start, last, n, fac);
+            if( start >= last ) {
+                maybe_throw_exception(exceptions, start-start0+offset, fstring_size);
+                return false;
+            }
+            
+            // %N% case : this is already the end of the directive
+            if( *start ==  const_or_not(fac).widen( '%') ) {
+                fpar->argN_ = n-1;
+                ++start;
+                if( in_brackets) 
+                    maybe_throw_exception(exceptions, start-start0+offset, fstring_size); 
+                // but don't return.  maybe "%" was used in lieu of '$', so we go on.
+                else
+                    return true;
+            }
+
+            if ( *start== const_or_not(fac).widen( '$') ) {
+                fpar->argN_ = n-1;
+                ++start;
+            } 
+            else {
+                // non-positionnal directive
+                fpar->fmtstate_.width_ = n;
+                fpar->argN_  = format_item_t::argN_no_posit;
+                goto parse_precision;
+            }
+        }
+    
+      parse_flags: 
+        // handle flags
+        while ( start != last) { // as long as char is one of + - = _ # 0 l h   or ' '
+            // misc switches
+            switch ( wrap_narrow(fac, *start, 0)) {
+            case '\'' : break; // no effect yet. (painful to implement)
+            case 'l':
+            case 'h':  // short/long modifier : for printf-comaptibility (no action needed)
+                break;
+            case '-':
+                fpar->fmtstate_.flags_ |= std::ios_base::left;
+                break;
+            case '=':
+                fpar->pad_scheme_ |= format_item_t::centered;
+                break;
+            case '_':
+                fpar->fmtstate_.flags_ |= std::ios_base::internal;
+                break;
+            case ' ':
+                fpar->pad_scheme_ |= format_item_t::spacepad;
+                break;
+            case '+':
+                fpar->fmtstate_.flags_ |= std::ios_base::showpos;
+                break;
+            case '0':
+                fpar->pad_scheme_ |= format_item_t::zeropad;
+                // need to know alignment before really setting flags,
+                // so just add 'zeropad' flag for now, it will be processed later.
+                break;
+            case '#':
+                fpar->fmtstate_.flags_ |= std::ios_base::showpoint | std::ios_base::showbase;
+                break;
+            default:
+                goto parse_width;
+            }
+            ++start;
+        } // loop on flag.
+
+        if( start>=last) {
+            maybe_throw_exception(exceptions, start-start0+offset, fstring_size);
+            return true; 
+        }
+      parse_width:
+        // handle width spec
+        // first skip 'asterisk fields' :  *, or *N$
+        if(*start == const_or_not(fac).widen( '*') )
+            start = skip_asterisk(start, last, fac); 
+        if(start!=last && wrap_isdigit(fac, *start))
+            start = str2int(start, last, fpar->fmtstate_.width_, fac);
+
+      parse_precision:
+        if( start>= last) { 
+            maybe_throw_exception(exceptions, start-start0+offset, fstring_size);
+            return true;
+        }
+        // handle precision spec
+        if (*start== const_or_not(fac).widen( '.')) {
+            ++start;
+            if(start != last && *start == const_or_not(fac).widen( '*') )
+                start = skip_asterisk(start, last, fac); 
+            if(start != last && wrap_isdigit(fac, *start)) {
+                start = str2int(start, last, fpar->fmtstate_.precision_, fac);
+                precision_set = true;
+            }
+            else
+                fpar->fmtstate_.precision_ =0;
+        }
+    
+        // handle  formatting-type flags :
+        while( start != last && ( *start== const_or_not(fac).widen( 'l') 
+                                  || *start== const_or_not(fac).widen( 'L') 
+                                  || *start== const_or_not(fac).widen( 'h')) )
+            ++start;
+        if( start>=last) {
+            maybe_throw_exception(exceptions, start-start0+offset, fstring_size);
+            return true;
+        }
+
+        if( in_brackets && *start== const_or_not(fac).widen( '|') ) {
+            ++start;
+            return true;
+        }
+        switch ( wrap_narrow(fac, *start, 0) ) {
+        case 'X':
+            fpar->fmtstate_.flags_ |= std::ios_base::uppercase;
+        case 'p': // pointer => set hex.
+        case 'x':
+            fpar->fmtstate_.flags_ &= ~std::ios_base::basefield;
+            fpar->fmtstate_.flags_ |= std::ios_base::hex;
+            break;
+
+        case 'o':
+            fpar->fmtstate_.flags_ &= ~std::ios_base::basefield;
+            fpar->fmtstate_.flags_ |=  std::ios_base::oct;
+            break;
+
+        case 'E':
+            fpar->fmtstate_.flags_ |=  std::ios_base::uppercase;
+        case 'e':
+            fpar->fmtstate_.flags_ &= ~std::ios_base::floatfield;
+            fpar->fmtstate_.flags_ |=  std::ios_base::scientific;
+
+            fpar->fmtstate_.flags_ &= ~std::ios_base::basefield;
+            fpar->fmtstate_.flags_ |=  std::ios_base::dec;
+            break;
+      
+        case 'f':
+            fpar->fmtstate_.flags_ &= ~std::ios_base::floatfield;
+            fpar->fmtstate_.flags_ |=  std::ios_base::fixed;
+        case 'u':
+        case 'd':
+        case 'i':
+            fpar->fmtstate_.flags_ &= ~std::ios_base::basefield;
+            fpar->fmtstate_.flags_ |=  std::ios_base::dec;
+            break;
+
+        case 'T':
+            ++start;
+            if( start >= last)
+                maybe_throw_exception(exceptions, start-start0+offset, fstring_size);
+            else
+                fpar->fmtstate_.fill_ = *start;
+            fpar->pad_scheme_ |= format_item_t::tabulation;
+            fpar->argN_ = format_item_t::argN_tabulation; 
+            break;
+        case 't': 
+            fpar->fmtstate_.fill_ = const_or_not(fac).widen( ' ');
+            fpar->pad_scheme_ |= format_item_t::tabulation;
+            fpar->argN_ = format_item_t::argN_tabulation; 
+            break;
+
+        case 'G':
+            fpar->fmtstate_.flags_ |= std::ios_base::uppercase;
+            break;
+        case 'g': // 'g' conversion is default for floats.
+            fpar->fmtstate_.flags_ &= ~std::ios_base::basefield;
+            fpar->fmtstate_.flags_ |=  std::ios_base::dec;
+
+            // CLEAR all floatield flags, so stream will CHOOSE
+            fpar->fmtstate_.flags_ &= ~std::ios_base::floatfield; 
+            break;
+
+        case 'C':
+        case 'c': 
+            fpar->truncate_ = 1;
+            break;
+        case 'S':
+        case 's': 
+            if(precision_set) // handle truncation manually, with own parameter.
+                fpar->truncate_ = fpar->fmtstate_.precision_;
+            fpar->fmtstate_.precision_ = 6; // default stream precision.
+            break;
+        case 'n' :  
+            fpar->argN_ = format_item_t::argN_ignored;
+            break;
+        default: 
+            maybe_throw_exception(exceptions, start-start0+offset, fstring_size);
+        }
+        ++start;
+
+        if( in_brackets ) {
+            if( start != last && *start== const_or_not(fac).widen( '|') ) {
+                ++start;
+                return true;
+            }
+            else  maybe_throw_exception(exceptions, start-start0+offset, fstring_size);
+        }
+        return true;
+    }
+    // -end parse_printf_directive()
+
+    template<class String, class Facet>
+    int upper_bound_from_fstring(const String& buf, 
+                                 const typename String::value_type arg_mark,
+                                 const Facet& fac, 
+                                 unsigned char exceptions) 
+    {
+        // quick-parsing of the format-string to count arguments mark (arg_mark, '%')
+        // returns : upper bound on the number of format items in the format strings
+        using namespace pdalboost::io;
+        typename String::size_type i1=0;
+        int num_items=0;
+        while( (i1=buf.find(arg_mark,i1)) != String::npos ) {
+            if( i1+1 >= buf.size() ) {
+                if(exceptions & bad_format_string_bit)
+                    pdalboost::throw_exception(bad_format_string(i1, buf.size() )); // must not end in ".. %"
+                else {
+                  ++num_items;
+                  break;
+                }
+            }
+            if(buf[i1+1] == buf[i1] ) {// escaped "%%"
+                i1+=2; continue; 
+            }
+
+            ++i1;
+            // in case of %N% directives, dont count it double (wastes allocations..) :
+            i1 = detail::wrap_scan_notdigit(fac, buf.begin()+i1, buf.end()) - buf.begin();
+            if( i1 < buf.size() && buf[i1] == arg_mark )
+                ++i1;
+            ++num_items;
+        }
+        return num_items;
+    }
+    template<class String> inline
+    void append_string(String& dst, const String& src, 
+                       const typename String::size_type beg, 
+                       const typename String::size_type end) {
+        dst.append(src.begin()+beg, src.begin()+end);
+    }
+
+} // detail namespace
+} // io namespace
+
+
+
+// -----------------------------------------------
+//  format :: parse(..)
+
+    template<class Ch, class Tr, class Alloc>
+    basic_format<Ch, Tr, Alloc>& basic_format<Ch, Tr, Alloc>:: 
+    parse (const string_type& buf) {
+        // parse the format-string 
+        using namespace std;
+#if !defined(BOOST_NO_STD_LOCALE)
+        const std::ctype<Ch> & fac = BOOST_USE_FACET( std::ctype<Ch>, getloc());
+#else
+        io::basic_oaltstringstream<Ch, Tr, Alloc> fac; 
+        //has widen and narrow even on compilers without locale
+#endif
+
+        const Ch arg_mark = io::detail::const_or_not(fac).widen( '%');
+        bool ordered_args=true; 
+        int max_argN=-1;
+
+        // A: find upper_bound on num_items and allocates arrays
+        int num_items = io::detail::upper_bound_from_fstring(buf, arg_mark, fac, exceptions());
+        make_or_reuse_data(num_items);
+
+        // B: Now the real parsing of the format string :
+        num_items=0;
+        typename string_type::size_type i0=0, i1=0;
+        typename string_type::const_iterator it;
+        bool special_things=false;
+        int cur_item=0;
+        while( (i1=buf.find(arg_mark,i1)) != string_type::npos ) {
+            string_type & piece = (cur_item==0) ? prefix_ : items_[cur_item-1].appendix_;
+            if( buf[i1+1] == buf[i1] ) { // escaped mark, '%%' 
+                io::detail::append_string(piece, buf, i0, i1+1);
+                i1+=2; i0=i1;
+                continue; 
+            }
+            BOOST_ASSERT(  static_cast<unsigned int>(cur_item) < items_.size() || cur_item==0);
+
+            if(i1!=i0) {
+                io::detail::append_string(piece, buf, i0, i1);
+                i0=i1;
+            }
+            ++i1;
+            it = buf.begin()+i1;
+            bool parse_ok = io::detail::parse_printf_directive(
+                it, buf.end(), &items_[cur_item], fac, i1, exceptions());
+            i1 = it - buf.begin();
+            if( ! parse_ok ) // the directive will be printed verbatim
+                continue; 
+            i0=i1;
+            items_[cur_item].compute_states(); // process complex options, like zeropad, into params
+
+            int argN=items_[cur_item].argN_;
+            if(argN == format_item_t::argN_ignored)
+                continue;
+            if(argN ==format_item_t::argN_no_posit)
+                ordered_args=false;
+            else if(argN == format_item_t::argN_tabulation) special_things=true;
+            else if(argN > max_argN) max_argN = argN;
+            ++num_items;
+            ++cur_item;
+        } // loop on %'s
+        BOOST_ASSERT(cur_item == num_items);
+    
+        // store the final piece of string
+        {
+            string_type & piece = (cur_item==0) ? prefix_ : items_[cur_item-1].appendix_;
+            io::detail::append_string(piece, buf, i0, buf.size());
+        }
+    
+        if( !ordered_args) {
+            if(max_argN >= 0 ) {  // dont mix positional with non-positionnal directives
+                if(exceptions() & io::bad_format_string_bit)
+                    pdalboost::throw_exception(
+                        io::bad_format_string(static_cast<std::size_t>(max_argN), 0));
+                // else do nothing. => positionnal arguments are processed as non-positionnal
+            }
+            // set things like it would have been with positional directives :
+            int non_ordered_items = 0;
+            for(int i=0; i< num_items; ++i)
+                if(items_[i].argN_ == format_item_t::argN_no_posit) {
+                    items_[i].argN_ = non_ordered_items;
+                    ++non_ordered_items;
+                }
+            max_argN = non_ordered_items-1;
+        }
+    
+        // C: set some member data :
+        items_.resize(num_items, format_item_t(io::detail::const_or_not(fac).widen( ' ')) );
+
+        if(special_things) style_ |= special_needs;
+        num_args_ = max_argN + 1;
+        if(ordered_args) style_ |=  ordered;
+        else style_ &= ~ordered;
+        return *this;
+    }
+
+} // namespace pdalboost
+
+
+#endif //  BOOST_FORMAT_PARSING_HPP
diff --git a/vendor/pdalboost/boost/function.hpp b/vendor/pdalboost/boost/function.hpp
new file mode 100644
index 0000000..b72842b
--- /dev/null
+++ b/vendor/pdalboost/boost/function.hpp
@@ -0,0 +1,66 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2001-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org/libs/function
+
+// William Kempf, Jesse Jones and Karl Nelson were all very helpful in the
+// design of this library.
+
+#include <functional> // unary_function, binary_function
+
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/detail/workaround.hpp>
+
+#ifndef BOOST_FUNCTION_MAX_ARGS
+#  define BOOST_FUNCTION_MAX_ARGS 10
+#endif // BOOST_FUNCTION_MAX_ARGS
+
+// Include the prologue here so that the use of file-level iteration
+// in anything that may be included by function_template.hpp doesn't break
+#include <boost/function/detail/prologue.hpp>
+
+// Older Visual Age C++ version do not handle the file iteration well
+#if BOOST_WORKAROUND(__IBMCPP__, >= 500) && BOOST_WORKAROUND(__IBMCPP__, < 800)
+#  if BOOST_FUNCTION_MAX_ARGS >= 0
+#    include <boost/function/function0.hpp>
+#  endif
+#  if BOOST_FUNCTION_MAX_ARGS >= 1
+#    include <boost/function/function1.hpp>
+#  endif
+#  if BOOST_FUNCTION_MAX_ARGS >= 2
+#    include <boost/function/function2.hpp>
+#  endif
+#  if BOOST_FUNCTION_MAX_ARGS >= 3
+#    include <boost/function/function3.hpp>
+#  endif
+#  if BOOST_FUNCTION_MAX_ARGS >= 4
+#    include <boost/function/function4.hpp>
+#  endif
+#  if BOOST_FUNCTION_MAX_ARGS >= 5
+#    include <boost/function/function5.hpp>
+#  endif
+#  if BOOST_FUNCTION_MAX_ARGS >= 6
+#    include <boost/function/function6.hpp>
+#  endif
+#  if BOOST_FUNCTION_MAX_ARGS >= 7
+#    include <boost/function/function7.hpp>
+#  endif
+#  if BOOST_FUNCTION_MAX_ARGS >= 8
+#    include <boost/function/function8.hpp>
+#  endif
+#  if BOOST_FUNCTION_MAX_ARGS >= 9
+#    include <boost/function/function9.hpp>
+#  endif
+#  if BOOST_FUNCTION_MAX_ARGS >= 10
+#    include <boost/function/function10.hpp>
+#  endif
+#else
+// What is the '3' for?
+#  define BOOST_PP_ITERATION_PARAMS_1 (3,(0,BOOST_FUNCTION_MAX_ARGS,<boost/function/detail/function_iterate.hpp>))
+#  include BOOST_PP_ITERATE()
+#  undef BOOST_PP_ITERATION_PARAMS_1
+#endif
diff --git a/vendor/pdalboost/boost/function/detail/function_iterate.hpp b/vendor/pdalboost/boost/function/detail/function_iterate.hpp
new file mode 100644
index 0000000..5370b36
--- /dev/null
+++ b/vendor/pdalboost/boost/function/detail/function_iterate.hpp
@@ -0,0 +1,16 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+#if !defined(BOOST_PP_IS_ITERATING)
+# error Boost.Function - do not include this file!
+#endif
+
+#define BOOST_FUNCTION_NUM_ARGS BOOST_PP_ITERATION()
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
+
diff --git a/vendor/pdalboost/boost/function/detail/gen_maybe_include.pl b/vendor/pdalboost/boost/function/detail/gen_maybe_include.pl
new file mode 100644
index 0000000..d062920
--- /dev/null
+++ b/vendor/pdalboost/boost/function/detail/gen_maybe_include.pl
@@ -0,0 +1,37 @@
+#!/usr/bin/perl -w
+#
+# Boost.Function library
+#
+# Copyright (C) 2001-2003 Douglas Gregor (gregod at cs.rpi.edu)
+#
+# Permission to copy, use, sell and distribute this software is granted
+# provided this copyright notice appears in all copies.
+# Permission to modify the code and to distribute modified code is granted
+# provided this copyright notice appears in all copies, and a notice
+# that the code was modified is included with the copyright notice.
+#
+# This software is provided "as is" without express or implied warranty,
+# and with no claim as to its suitability for any purpose.
+#
+# For more information, see http://www.boost.org
+use English;
+
+$max_args = $ARGV[0];
+
+open (OUT, ">maybe_include.hpp") or die("Cannot write to maybe_include.hpp");
+for($on_arg = 0; $on_arg <= $max_args; ++$on_arg) {
+    if ($on_arg == 0) {
+	print OUT "#if";
+    }
+    else {
+	print OUT "#elif";
+    }
+    print OUT " BOOST_FUNCTION_NUM_ARGS == $on_arg\n";
+    print OUT "#  ifndef BOOST_FUNCTION_$on_arg\n";
+    print OUT "#    define BOOST_FUNCTION_$on_arg\n";
+    print OUT "#    include <boost/function/function_template.hpp>\n";
+    print OUT "#  endif\n";
+}
+print OUT "#else\n";
+print OUT "#  error Cannot handle Boost.Function objects that accept more than $max_args arguments!\n";
+print OUT "#endif\n";
diff --git a/vendor/pdalboost/boost/function/detail/maybe_include.hpp b/vendor/pdalboost/boost/function/detail/maybe_include.hpp
new file mode 100644
index 0000000..92f71bb
--- /dev/null
+++ b/vendor/pdalboost/boost/function/detail/maybe_include.hpp
@@ -0,0 +1,267 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#if BOOST_FUNCTION_NUM_ARGS == 0
+#  ifndef BOOST_FUNCTION_0
+#    define BOOST_FUNCTION_0
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 1
+#  ifndef BOOST_FUNCTION_1
+#    define BOOST_FUNCTION_1
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 2
+#  ifndef BOOST_FUNCTION_2
+#    define BOOST_FUNCTION_2
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 3
+#  ifndef BOOST_FUNCTION_3
+#    define BOOST_FUNCTION_3
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 4
+#  ifndef BOOST_FUNCTION_4
+#    define BOOST_FUNCTION_4
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 5
+#  ifndef BOOST_FUNCTION_5
+#    define BOOST_FUNCTION_5
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 6
+#  ifndef BOOST_FUNCTION_6
+#    define BOOST_FUNCTION_6
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 7
+#  ifndef BOOST_FUNCTION_7
+#    define BOOST_FUNCTION_7
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 8
+#  ifndef BOOST_FUNCTION_8
+#    define BOOST_FUNCTION_8
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 9
+#  ifndef BOOST_FUNCTION_9
+#    define BOOST_FUNCTION_9
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 10
+#  ifndef BOOST_FUNCTION_10
+#    define BOOST_FUNCTION_10
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 11
+#  ifndef BOOST_FUNCTION_11
+#    define BOOST_FUNCTION_11
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 12
+#  ifndef BOOST_FUNCTION_12
+#    define BOOST_FUNCTION_12
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 13
+#  ifndef BOOST_FUNCTION_13
+#    define BOOST_FUNCTION_13
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 14
+#  ifndef BOOST_FUNCTION_14
+#    define BOOST_FUNCTION_14
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 15
+#  ifndef BOOST_FUNCTION_15
+#    define BOOST_FUNCTION_15
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 16
+#  ifndef BOOST_FUNCTION_16
+#    define BOOST_FUNCTION_16
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 17
+#  ifndef BOOST_FUNCTION_17
+#    define BOOST_FUNCTION_17
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 18
+#  ifndef BOOST_FUNCTION_18
+#    define BOOST_FUNCTION_18
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 19
+#  ifndef BOOST_FUNCTION_19
+#    define BOOST_FUNCTION_19
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 20
+#  ifndef BOOST_FUNCTION_20
+#    define BOOST_FUNCTION_20
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 21
+#  ifndef BOOST_FUNCTION_21
+#    define BOOST_FUNCTION_21
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 22
+#  ifndef BOOST_FUNCTION_22
+#    define BOOST_FUNCTION_22
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 23
+#  ifndef BOOST_FUNCTION_23
+#    define BOOST_FUNCTION_23
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 24
+#  ifndef BOOST_FUNCTION_24
+#    define BOOST_FUNCTION_24
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 25
+#  ifndef BOOST_FUNCTION_25
+#    define BOOST_FUNCTION_25
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 26
+#  ifndef BOOST_FUNCTION_26
+#    define BOOST_FUNCTION_26
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 27
+#  ifndef BOOST_FUNCTION_27
+#    define BOOST_FUNCTION_27
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 28
+#  ifndef BOOST_FUNCTION_28
+#    define BOOST_FUNCTION_28
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 29
+#  ifndef BOOST_FUNCTION_29
+#    define BOOST_FUNCTION_29
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 30
+#  ifndef BOOST_FUNCTION_30
+#    define BOOST_FUNCTION_30
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 31
+#  ifndef BOOST_FUNCTION_31
+#    define BOOST_FUNCTION_31
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 32
+#  ifndef BOOST_FUNCTION_32
+#    define BOOST_FUNCTION_32
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 33
+#  ifndef BOOST_FUNCTION_33
+#    define BOOST_FUNCTION_33
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 34
+#  ifndef BOOST_FUNCTION_34
+#    define BOOST_FUNCTION_34
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 35
+#  ifndef BOOST_FUNCTION_35
+#    define BOOST_FUNCTION_35
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 36
+#  ifndef BOOST_FUNCTION_36
+#    define BOOST_FUNCTION_36
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 37
+#  ifndef BOOST_FUNCTION_37
+#    define BOOST_FUNCTION_37
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 38
+#  ifndef BOOST_FUNCTION_38
+#    define BOOST_FUNCTION_38
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 39
+#  ifndef BOOST_FUNCTION_39
+#    define BOOST_FUNCTION_39
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 40
+#  ifndef BOOST_FUNCTION_40
+#    define BOOST_FUNCTION_40
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 41
+#  ifndef BOOST_FUNCTION_41
+#    define BOOST_FUNCTION_41
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 42
+#  ifndef BOOST_FUNCTION_42
+#    define BOOST_FUNCTION_42
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 43
+#  ifndef BOOST_FUNCTION_43
+#    define BOOST_FUNCTION_43
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 44
+#  ifndef BOOST_FUNCTION_44
+#    define BOOST_FUNCTION_44
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 45
+#  ifndef BOOST_FUNCTION_45
+#    define BOOST_FUNCTION_45
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 46
+#  ifndef BOOST_FUNCTION_46
+#    define BOOST_FUNCTION_46
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 47
+#  ifndef BOOST_FUNCTION_47
+#    define BOOST_FUNCTION_47
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 48
+#  ifndef BOOST_FUNCTION_48
+#    define BOOST_FUNCTION_48
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 49
+#  ifndef BOOST_FUNCTION_49
+#    define BOOST_FUNCTION_49
+#    include <boost/function/function_template.hpp>
+#  endif
+#elif BOOST_FUNCTION_NUM_ARGS == 50
+#  ifndef BOOST_FUNCTION_50
+#    define BOOST_FUNCTION_50
+#    include <boost/function/function_template.hpp>
+#  endif
+#else
+#  error Cannot handle Boost.Function objects that accept more than 50 arguments!
+#endif
diff --git a/vendor/pdalboost/boost/function/detail/prologue.hpp b/vendor/pdalboost/boost/function/detail/prologue.hpp
new file mode 100644
index 0000000..53d0f05
--- /dev/null
+++ b/vendor/pdalboost/boost/function/detail/prologue.hpp
@@ -0,0 +1,26 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2002-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_FUNCTION_PROLOGUE_HPP
+#define BOOST_FUNCTION_PROLOGUE_HPP
+#  include <cassert>
+#  include <algorithm>
+#  include <boost/config/no_tr1/functional.hpp> // unary_function, binary_function
+#  include <boost/throw_exception.hpp>
+#  include <boost/config.hpp>
+#  include <boost/function/function_base.hpp>
+#  include <boost/mem_fn.hpp>
+#  include <boost/type_traits/is_integral.hpp>
+#  include <boost/preprocessor/enum.hpp>
+#  include <boost/preprocessor/enum_params.hpp>
+#  include <boost/preprocessor/cat.hpp>
+#  include <boost/preprocessor/repeat.hpp>
+#  include <boost/preprocessor/inc.hpp>
+#  include <boost/type_traits/is_void.hpp>
+#endif // BOOST_FUNCTION_PROLOGUE_HPP
diff --git a/vendor/pdalboost/boost/function/function0.hpp b/vendor/pdalboost/boost/function/function0.hpp
new file mode 100644
index 0000000..65a02e5
--- /dev/null
+++ b/vendor/pdalboost/boost/function/function0.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2002-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 0
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/vendor/pdalboost/boost/function/function1.hpp b/vendor/pdalboost/boost/function/function1.hpp
new file mode 100644
index 0000000..9089715
--- /dev/null
+++ b/vendor/pdalboost/boost/function/function1.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2002-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 1
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/vendor/pdalboost/boost/function/function10.hpp b/vendor/pdalboost/boost/function/function10.hpp
new file mode 100644
index 0000000..6562724
--- /dev/null
+++ b/vendor/pdalboost/boost/function/function10.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2002-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 10
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/vendor/pdalboost/boost/function/function2.hpp b/vendor/pdalboost/boost/function/function2.hpp
new file mode 100644
index 0000000..dc8bf97
--- /dev/null
+++ b/vendor/pdalboost/boost/function/function2.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2002-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 2
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/vendor/pdalboost/boost/function/function3.hpp b/vendor/pdalboost/boost/function/function3.hpp
new file mode 100644
index 0000000..19d1a49
--- /dev/null
+++ b/vendor/pdalboost/boost/function/function3.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2002-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 3
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/vendor/pdalboost/boost/function/function4.hpp b/vendor/pdalboost/boost/function/function4.hpp
new file mode 100644
index 0000000..f3349e2
--- /dev/null
+++ b/vendor/pdalboost/boost/function/function4.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2002-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 4
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/vendor/pdalboost/boost/function/function5.hpp b/vendor/pdalboost/boost/function/function5.hpp
new file mode 100644
index 0000000..a1305eb
--- /dev/null
+++ b/vendor/pdalboost/boost/function/function5.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2002-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 5
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/vendor/pdalboost/boost/function/function6.hpp b/vendor/pdalboost/boost/function/function6.hpp
new file mode 100644
index 0000000..1f60914
--- /dev/null
+++ b/vendor/pdalboost/boost/function/function6.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2002-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 6
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/vendor/pdalboost/boost/function/function7.hpp b/vendor/pdalboost/boost/function/function7.hpp
new file mode 100644
index 0000000..68542ed
--- /dev/null
+++ b/vendor/pdalboost/boost/function/function7.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2002-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 7
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/vendor/pdalboost/boost/function/function8.hpp b/vendor/pdalboost/boost/function/function8.hpp
new file mode 100644
index 0000000..cf2c376
--- /dev/null
+++ b/vendor/pdalboost/boost/function/function8.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2002-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 8
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/vendor/pdalboost/boost/function/function9.hpp b/vendor/pdalboost/boost/function/function9.hpp
new file mode 100644
index 0000000..590e088
--- /dev/null
+++ b/vendor/pdalboost/boost/function/function9.hpp
@@ -0,0 +1,12 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2002-2003. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#define BOOST_FUNCTION_NUM_ARGS 9
+#include <boost/function/detail/maybe_include.hpp>
+#undef BOOST_FUNCTION_NUM_ARGS
diff --git a/vendor/pdalboost/boost/function/function_base.hpp b/vendor/pdalboost/boost/function/function_base.hpp
new file mode 100644
index 0000000..ff53be4
--- /dev/null
+++ b/vendor/pdalboost/boost/function/function_base.hpp
@@ -0,0 +1,892 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2001-2006
+//  Copyright Emil Dotchevski 2007
+//  Use, modification and distribution is subject to the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_FUNCTION_BASE_HEADER
+#define BOOST_FUNCTION_BASE_HEADER
+
+#include <stdexcept>
+#include <string>
+#include <memory>
+#include <new>
+#include <boost/config.hpp>
+#include <boost/detail/sp_typeinfo.hpp>
+#include <boost/assert.hpp>
+#include <boost/integer.hpp>
+#include <boost/type_traits/has_trivial_copy.hpp>
+#include <boost/type_traits/has_trivial_destructor.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/composite_traits.hpp>
+#include <boost/ref.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+#ifndef BOOST_NO_SFINAE
+#  include "boost/utility/enable_if.hpp"
+#else
+#  include "boost/mpl/bool.hpp"
+#endif
+#include <boost/function_equal.hpp>
+#include <boost/function/function_fwd.hpp>
+
+#if defined(BOOST_MSVC)
+#   pragma warning( push )
+#   pragma warning( disable : 4793 ) // complaint about native code generation
+#   pragma warning( disable : 4127 ) // "conditional expression is constant"
+#endif       
+
+// Define BOOST_FUNCTION_STD_NS to the namespace that contains type_info.
+#ifdef BOOST_NO_STD_TYPEINFO
+// Embedded VC++ does not have type_info in namespace std
+#  define BOOST_FUNCTION_STD_NS
+#else
+#  define BOOST_FUNCTION_STD_NS std
+#endif
+
+// Borrowed from Boost.Python library: determines the cases where we
+// need to use std::type_info::name to compare instead of operator==.
+#if defined( BOOST_NO_TYPEID )
+#  define BOOST_FUNCTION_COMPARE_TYPE_ID(X,Y) ((X)==(Y))
+#elif defined(__GNUC__) \
+ || defined(_AIX) \
+ || (   defined(__sgi) && defined(__host_mips))
+#  include <cstring>
+#  define BOOST_FUNCTION_COMPARE_TYPE_ID(X,Y) \
+     (std::strcmp((X).name(),(Y).name()) == 0)
+# else
+#  define BOOST_FUNCTION_COMPARE_TYPE_ID(X,Y) ((X)==(Y))
+#endif
+
+#if defined(__ICL) && __ICL <= 600 || defined(__MWERKS__) && __MWERKS__ < 0x2406 && !defined(BOOST_STRICT_CONFIG)
+#  define BOOST_FUNCTION_TARGET_FIX(x) x
+#else
+#  define BOOST_FUNCTION_TARGET_FIX(x)
+#endif // __ICL etc
+
+#  define BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor,Type)              \
+      typename ::pdalboost::enable_if_c<          \
+                           !(::pdalboost::is_integral<Functor>::value), \
+                           Type>::type
+
+namespace pdalboost {
+  namespace detail {
+    namespace function {
+      class X;
+
+      /**
+       * A buffer used to store small function objects in
+       * pdalboost::function. It is a union containing function pointers,
+       * object pointers, and a structure that resembles a bound
+       * member function pointer.
+       */
+      union function_buffer
+      {
+        // For pointers to function objects
+        mutable void* obj_ptr;
+
+        // For pointers to std::type_info objects
+        struct type_t {
+          // (get_functor_type_tag, check_functor_type_tag).
+          const detail::sp_typeinfo* type;
+
+          // Whether the type is const-qualified.
+          bool const_qualified;
+          // Whether the type is volatile-qualified.
+          bool volatile_qualified;
+        } type;
+
+        // For function pointers of all kinds
+        mutable void (*func_ptr)();
+
+        // For bound member pointers
+        struct bound_memfunc_ptr_t {
+          void (X::*memfunc_ptr)(int);
+          void* obj_ptr;
+        } bound_memfunc_ptr;
+
+        // For references to function objects. We explicitly keep
+        // track of the cv-qualifiers on the object referenced.
+        struct obj_ref_t {
+          mutable void* obj_ptr;
+          bool is_const_qualified;
+          bool is_volatile_qualified;
+        } obj_ref;
+
+        // To relax aliasing constraints
+        mutable char data;
+      };
+
+      /**
+       * The unusable class is a placeholder for unused function arguments
+       * It is also completely unusable except that it constructable from
+       * anything. This helps compilers without partial specialization to
+       * handle Boost.Function objects returning void.
+       */
+      struct unusable
+      {
+        unusable() {}
+        template<typename T> unusable(const T&) {}
+      };
+
+      /* Determine the return type. This supports compilers that do not support
+       * void returns or partial specialization by silently changing the return
+       * type to "unusable".
+       */
+      template<typename T> struct function_return_type { typedef T type; };
+
+      template<>
+      struct function_return_type<void>
+      {
+        typedef unusable type;
+      };
+
+      // The operation type to perform on the given functor/function pointer
+      enum functor_manager_operation_type {
+        clone_functor_tag,
+        move_functor_tag,
+        destroy_functor_tag,
+        check_functor_type_tag,
+        get_functor_type_tag
+      };
+
+      // Tags used to decide between different types of functions
+      struct function_ptr_tag {};
+      struct function_obj_tag {};
+      struct member_ptr_tag {};
+      struct function_obj_ref_tag {};
+
+      template<typename F>
+      class get_function_tag
+      {
+        typedef typename mpl::if_c<(is_pointer<F>::value),
+                                   function_ptr_tag,
+                                   function_obj_tag>::type ptr_or_obj_tag;
+
+        typedef typename mpl::if_c<(is_member_pointer<F>::value),
+                                   member_ptr_tag,
+                                   ptr_or_obj_tag>::type ptr_or_obj_or_mem_tag;
+
+        typedef typename mpl::if_c<(is_reference_wrapper<F>::value),
+                                   function_obj_ref_tag,
+                                   ptr_or_obj_or_mem_tag>::type or_ref_tag;
+
+      public:
+        typedef or_ref_tag type;
+      };
+
+      // The trivial manager does nothing but return the same pointer (if we
+      // are cloning) or return the null pointer (if we are deleting).
+      template<typename F>
+      struct reference_manager
+      {
+        static inline void
+        manage(const function_buffer& in_buffer, function_buffer& out_buffer, 
+               functor_manager_operation_type op)
+        {
+          switch (op) {
+          case clone_functor_tag: 
+            out_buffer.obj_ref = in_buffer.obj_ref;
+            return;
+
+          case move_functor_tag:
+            out_buffer.obj_ref = in_buffer.obj_ref;
+            in_buffer.obj_ref.obj_ptr = 0;
+            return;
+
+          case destroy_functor_tag:
+            out_buffer.obj_ref.obj_ptr = 0;
+            return;
+
+          case check_functor_type_tag:
+            {
+              const detail::sp_typeinfo& check_type 
+                = *out_buffer.type.type;
+
+              // Check whether we have the same type. We can add
+              // cv-qualifiers, but we can't take them away.
+              if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(F))
+                  && (!in_buffer.obj_ref.is_const_qualified 
+                      || out_buffer.type.const_qualified)
+                  && (!in_buffer.obj_ref.is_volatile_qualified
+                      || out_buffer.type.volatile_qualified))
+                out_buffer.obj_ptr = in_buffer.obj_ref.obj_ptr;
+              else
+                out_buffer.obj_ptr = 0;
+            }
+            return;
+
+          case get_functor_type_tag:
+            out_buffer.type.type = &BOOST_SP_TYPEID(F);
+            out_buffer.type.const_qualified = in_buffer.obj_ref.is_const_qualified;
+            out_buffer.type.volatile_qualified = in_buffer.obj_ref.is_volatile_qualified;
+            return;
+          }
+        }
+      };
+
+      /**
+       * Determine if pdalboost::function can use the small-object
+       * optimization with the function object type F.
+       */
+      template<typename F>
+      struct function_allows_small_object_optimization
+      {
+        BOOST_STATIC_CONSTANT
+          (bool, 
+           value = ((sizeof(F) <= sizeof(function_buffer) &&
+                     (alignment_of<function_buffer>::value 
+                      % alignment_of<F>::value == 0))));
+      };
+
+      template <typename F,typename A>
+      struct functor_wrapper: public F, public A
+      {
+        functor_wrapper( F f, A a ):
+          F(f),
+          A(a)
+        {
+        }
+        
+        functor_wrapper(const functor_wrapper& f) :
+          F(static_cast<const F&>(f)),
+          A(static_cast<const A&>(f))
+        {
+        }
+      };
+
+      /**
+       * The functor_manager class contains a static function "manage" which
+       * can clone or destroy the given function/function object pointer.
+       */
+      template<typename Functor>
+      struct functor_manager_common
+      {
+        typedef Functor functor_type;
+
+        // Function pointers
+        static inline void
+        manage_ptr(const function_buffer& in_buffer, function_buffer& out_buffer, 
+                functor_manager_operation_type op)
+        {
+          if (op == clone_functor_tag)
+            out_buffer.func_ptr = in_buffer.func_ptr;
+          else if (op == move_functor_tag) {
+            out_buffer.func_ptr = in_buffer.func_ptr;
+            in_buffer.func_ptr = 0;
+          } else if (op == destroy_functor_tag)
+            out_buffer.func_ptr = 0;
+          else if (op == check_functor_type_tag) {
+            const pdalboost::detail::sp_typeinfo& check_type
+              = *out_buffer.type.type;
+            if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor)))
+              out_buffer.obj_ptr = &in_buffer.func_ptr;
+            else
+              out_buffer.obj_ptr = 0;
+          } else /* op == get_functor_type_tag */ {
+            out_buffer.type.type = &BOOST_SP_TYPEID(Functor);
+            out_buffer.type.const_qualified = false;
+            out_buffer.type.volatile_qualified = false;
+          }
+        }
+
+        // Function objects that fit in the small-object buffer.
+        static inline void
+        manage_small(const function_buffer& in_buffer, function_buffer& out_buffer, 
+                functor_manager_operation_type op)
+        {
+          if (op == clone_functor_tag || op == move_functor_tag) {
+            const functor_type* in_functor = 
+              reinterpret_cast<const functor_type*>(&in_buffer.data);
+            new (reinterpret_cast<void*>(&out_buffer.data)) functor_type(*in_functor);
+
+            if (op == move_functor_tag) {
+              functor_type* f = reinterpret_cast<functor_type*>(&in_buffer.data);
+              (void)f; // suppress warning about the value of f not being used (MSVC)
+              f->~Functor();
+            }
+          } else if (op == destroy_functor_tag) {
+            // Some compilers (Borland, vc6, ...) are unhappy with ~functor_type.
+             functor_type* f = reinterpret_cast<functor_type*>(&out_buffer.data);
+             (void)f; // suppress warning about the value of f not being used (MSVC)
+             f->~Functor();
+          } else if (op == check_functor_type_tag) {
+            const detail::sp_typeinfo& check_type 
+              = *out_buffer.type.type;
+            if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor)))
+              out_buffer.obj_ptr = &in_buffer.data;
+            else
+              out_buffer.obj_ptr = 0;
+          } else /* op == get_functor_type_tag */ {
+            out_buffer.type.type = &BOOST_SP_TYPEID(Functor);
+            out_buffer.type.const_qualified = false;
+            out_buffer.type.volatile_qualified = false;            
+          }
+        }
+      };
+
+      template<typename Functor>
+      struct functor_manager
+      {
+      private:
+        typedef Functor functor_type;
+
+        // Function pointers
+        static inline void
+        manager(const function_buffer& in_buffer, function_buffer& out_buffer, 
+                functor_manager_operation_type op, function_ptr_tag)
+        {
+          functor_manager_common<Functor>::manage_ptr(in_buffer,out_buffer,op);
+        }
+
+        // Function objects that fit in the small-object buffer.
+        static inline void
+        manager(const function_buffer& in_buffer, function_buffer& out_buffer, 
+                functor_manager_operation_type op, mpl::true_)
+        {
+          functor_manager_common<Functor>::manage_small(in_buffer,out_buffer,op);
+        }
+        
+        // Function objects that require heap allocation
+        static inline void
+        manager(const function_buffer& in_buffer, function_buffer& out_buffer, 
+                functor_manager_operation_type op, mpl::false_)
+        {
+          if (op == clone_functor_tag) {
+            // Clone the functor
+            // GCC 2.95.3 gets the CV qualifiers wrong here, so we
+            // can't do the static_cast that we should do.
+            // jewillco: Changing this to static_cast because GCC 2.95.3 is
+            // obsolete.
+            const functor_type* f =
+              static_cast<const functor_type*>(in_buffer.obj_ptr);
+            functor_type* new_f = new functor_type(*f);
+            out_buffer.obj_ptr = new_f;
+          } else if (op == move_functor_tag) {
+            out_buffer.obj_ptr = in_buffer.obj_ptr;
+            in_buffer.obj_ptr = 0;
+          } else if (op == destroy_functor_tag) {
+            /* Cast from the void pointer to the functor pointer type */
+            functor_type* f =
+              static_cast<functor_type*>(out_buffer.obj_ptr);
+            delete f;
+            out_buffer.obj_ptr = 0;
+          } else if (op == check_functor_type_tag) {
+            const detail::sp_typeinfo& check_type
+              = *out_buffer.type.type;
+            if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor)))
+              out_buffer.obj_ptr = in_buffer.obj_ptr;
+            else
+              out_buffer.obj_ptr = 0;
+          } else /* op == get_functor_type_tag */ {
+            out_buffer.type.type = &BOOST_SP_TYPEID(Functor);
+            out_buffer.type.const_qualified = false;
+            out_buffer.type.volatile_qualified = false;
+          }
+        }
+
+        // For function objects, we determine whether the function
+        // object can use the small-object optimization buffer or
+        // whether we need to allocate it on the heap.
+        static inline void
+        manager(const function_buffer& in_buffer, function_buffer& out_buffer, 
+                functor_manager_operation_type op, function_obj_tag)
+        {
+          manager(in_buffer, out_buffer, op,
+                  mpl::bool_<(function_allows_small_object_optimization<functor_type>::value)>());
+        }
+
+        // For member pointers, we use the small-object optimization buffer.
+        static inline void
+        manager(const function_buffer& in_buffer, function_buffer& out_buffer, 
+                functor_manager_operation_type op, member_ptr_tag)
+        {
+          manager(in_buffer, out_buffer, op, mpl::true_());
+        }
+
+      public:
+        /* Dispatch to an appropriate manager based on whether we have a
+           function pointer or a function object pointer. */
+        static inline void
+        manage(const function_buffer& in_buffer, function_buffer& out_buffer, 
+               functor_manager_operation_type op)
+        {
+          typedef typename get_function_tag<functor_type>::type tag_type;
+          switch (op) {
+          case get_functor_type_tag:
+            out_buffer.type.type = &BOOST_SP_TYPEID(functor_type);
+            out_buffer.type.const_qualified = false;
+            out_buffer.type.volatile_qualified = false;
+            return;
+
+          default:
+            manager(in_buffer, out_buffer, op, tag_type());
+            return;
+          }
+        }
+      };
+
+      template<typename Functor, typename Allocator>
+      struct functor_manager_a
+      {
+      private:
+        typedef Functor functor_type;
+
+        // Function pointers
+        static inline void
+        manager(const function_buffer& in_buffer, function_buffer& out_buffer, 
+                functor_manager_operation_type op, function_ptr_tag)
+        {
+          functor_manager_common<Functor>::manage_ptr(in_buffer,out_buffer,op);
+        }
+
+        // Function objects that fit in the small-object buffer.
+        static inline void
+        manager(const function_buffer& in_buffer, function_buffer& out_buffer, 
+                functor_manager_operation_type op, mpl::true_)
+        {
+          functor_manager_common<Functor>::manage_small(in_buffer,out_buffer,op);
+        }
+        
+        // Function objects that require heap allocation
+        static inline void
+        manager(const function_buffer& in_buffer, function_buffer& out_buffer, 
+                functor_manager_operation_type op, mpl::false_)
+        {
+          typedef functor_wrapper<Functor,Allocator> functor_wrapper_type;
+          typedef typename Allocator::template rebind<functor_wrapper_type>::other
+            wrapper_allocator_type;
+          typedef typename wrapper_allocator_type::pointer wrapper_allocator_pointer_type;
+
+          if (op == clone_functor_tag) {
+            // Clone the functor
+            // GCC 2.95.3 gets the CV qualifiers wrong here, so we
+            // can't do the static_cast that we should do.
+            const functor_wrapper_type* f =
+              static_cast<const functor_wrapper_type*>(in_buffer.obj_ptr);
+            wrapper_allocator_type wrapper_allocator(static_cast<Allocator const &>(*f));
+            wrapper_allocator_pointer_type copy = wrapper_allocator.allocate(1);
+            wrapper_allocator.construct(copy, *f);
+
+            // Get back to the original pointer type
+            functor_wrapper_type* new_f = static_cast<functor_wrapper_type*>(copy);
+            out_buffer.obj_ptr = new_f;
+          } else if (op == move_functor_tag) {
+            out_buffer.obj_ptr = in_buffer.obj_ptr;
+            in_buffer.obj_ptr = 0;
+          } else if (op == destroy_functor_tag) {
+            /* Cast from the void pointer to the functor_wrapper_type */
+            functor_wrapper_type* victim =
+              static_cast<functor_wrapper_type*>(in_buffer.obj_ptr);
+            wrapper_allocator_type wrapper_allocator(static_cast<Allocator const &>(*victim));
+            wrapper_allocator.destroy(victim);
+            wrapper_allocator.deallocate(victim,1);
+            out_buffer.obj_ptr = 0;
+          } else if (op == check_functor_type_tag) {
+            const detail::sp_typeinfo& check_type 
+              = *out_buffer.type.type;
+            if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, BOOST_SP_TYPEID(Functor)))
+              out_buffer.obj_ptr = in_buffer.obj_ptr;
+            else
+              out_buffer.obj_ptr = 0;
+          } else /* op == get_functor_type_tag */ {
+            out_buffer.type.type = &BOOST_SP_TYPEID(Functor);
+            out_buffer.type.const_qualified = false;
+            out_buffer.type.volatile_qualified = false;
+          }
+        }
+
+        // For function objects, we determine whether the function
+        // object can use the small-object optimization buffer or
+        // whether we need to allocate it on the heap.
+        static inline void
+        manager(const function_buffer& in_buffer, function_buffer& out_buffer, 
+                functor_manager_operation_type op, function_obj_tag)
+        {
+          manager(in_buffer, out_buffer, op,
+                  mpl::bool_<(function_allows_small_object_optimization<functor_type>::value)>());
+        }
+
+      public:
+        /* Dispatch to an appropriate manager based on whether we have a
+           function pointer or a function object pointer. */
+        static inline void
+        manage(const function_buffer& in_buffer, function_buffer& out_buffer, 
+               functor_manager_operation_type op)
+        {
+          typedef typename get_function_tag<functor_type>::type tag_type;
+          switch (op) {
+          case get_functor_type_tag:
+            out_buffer.type.type = &BOOST_SP_TYPEID(functor_type);
+            out_buffer.type.const_qualified = false;
+            out_buffer.type.volatile_qualified = false;
+            return;
+
+          default:
+            manager(in_buffer, out_buffer, op, tag_type());
+            return;
+          }
+        }
+      };
+
+      // A type that is only used for comparisons against zero
+      struct useless_clear_type {};
+
+#ifdef BOOST_NO_SFINAE
+      // These routines perform comparisons between a Boost.Function
+      // object and an arbitrary function object (when the last
+      // parameter is mpl::bool_<false>) or against zero (when the
+      // last parameter is mpl::bool_<true>). They are only necessary
+      // for compilers that don't support SFINAE.
+      template<typename Function, typename Functor>
+        bool
+        compare_equal(const Function& f, const Functor&, int, mpl::bool_<true>)
+        { return f.empty(); }
+
+      template<typename Function, typename Functor>
+        bool
+        compare_not_equal(const Function& f, const Functor&, int,
+                          mpl::bool_<true>)
+        { return !f.empty(); }
+
+      template<typename Function, typename Functor>
+        bool
+        compare_equal(const Function& f, const Functor& g, long,
+                      mpl::bool_<false>)
+        {
+          if (const Functor* fp = f.template target<Functor>())
+            return function_equal(*fp, g);
+          else return false;
+        }
+
+      template<typename Function, typename Functor>
+        bool
+        compare_equal(const Function& f, const reference_wrapper<Functor>& g,
+                      int, mpl::bool_<false>)
+        {
+          if (const Functor* fp = f.template target<Functor>())
+            return fp == g.get_pointer();
+          else return false;
+        }
+
+      template<typename Function, typename Functor>
+        bool
+        compare_not_equal(const Function& f, const Functor& g, long,
+                          mpl::bool_<false>)
+        {
+          if (const Functor* fp = f.template target<Functor>())
+            return !function_equal(*fp, g);
+          else return true;
+        }
+
+      template<typename Function, typename Functor>
+        bool
+        compare_not_equal(const Function& f,
+                          const reference_wrapper<Functor>& g, int,
+                          mpl::bool_<false>)
+        {
+          if (const Functor* fp = f.template target<Functor>())
+            return fp != g.get_pointer();
+          else return true;
+        }
+#endif // BOOST_NO_SFINAE
+
+      /**
+       * Stores the "manager" portion of the vtable for a
+       * pdalboost::function object.
+       */
+      struct vtable_base
+      {
+        void (*manager)(const function_buffer& in_buffer, 
+                        function_buffer& out_buffer, 
+                        functor_manager_operation_type op);
+      };
+    } // end namespace function
+  } // end namespace detail
+
+/**
+ * The function_base class contains the basic elements needed for the
+ * function1, function2, function3, etc. classes. It is common to all
+ * functions (and as such can be used to tell if we have one of the
+ * functionN objects).
+ */
+class function_base
+{
+public:
+  function_base() : vtable(0) { }
+
+  /** Determine if the function is empty (i.e., has no target). */
+  bool empty() const { return !vtable; }
+
+  /** Retrieve the type of the stored function object, or BOOST_SP_TYPEID(void)
+      if this is empty. */
+  const detail::sp_typeinfo& target_type() const
+  {
+    if (!vtable) return BOOST_SP_TYPEID(void);
+
+    detail::function::function_buffer type;
+    get_vtable()->manager(functor, type, detail::function::get_functor_type_tag);
+    return *type.type.type;
+  }
+
+  template<typename Functor>
+    Functor* target()
+    {
+      if (!vtable) return 0;
+
+      detail::function::function_buffer type_result;
+      type_result.type.type = &BOOST_SP_TYPEID(Functor);
+      type_result.type.const_qualified = is_const<Functor>::value;
+      type_result.type.volatile_qualified = is_volatile<Functor>::value;
+      get_vtable()->manager(functor, type_result, 
+                      detail::function::check_functor_type_tag);
+      return static_cast<Functor*>(type_result.obj_ptr);
+    }
+
+  template<typename Functor>
+    const Functor* target() const
+    {
+      if (!vtable) return 0;
+
+      detail::function::function_buffer type_result;
+      type_result.type.type = &BOOST_SP_TYPEID(Functor);
+      type_result.type.const_qualified = true;
+      type_result.type.volatile_qualified = is_volatile<Functor>::value;
+      get_vtable()->manager(functor, type_result, 
+                      detail::function::check_functor_type_tag);
+      // GCC 2.95.3 gets the CV qualifiers wrong here, so we
+      // can't do the static_cast that we should do.
+      return static_cast<const Functor*>(type_result.obj_ptr);
+    }
+
+  template<typename F>
+    bool contains(const F& f) const
+    {
+      if (const F* fp = this->template target<F>())
+      {
+        return function_equal(*fp, f);
+      } else {
+        return false;
+      }
+    }
+
+#if defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3
+  // GCC 3.3 and newer cannot copy with the global operator==, due to
+  // problems with instantiation of function return types before it
+  // has been verified that the argument types match up.
+  template<typename Functor>
+    BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+    operator==(Functor g) const
+    {
+      if (const Functor* fp = target<Functor>())
+        return function_equal(*fp, g);
+      else return false;
+    }
+
+  template<typename Functor>
+    BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+    operator!=(Functor g) const
+    {
+      if (const Functor* fp = target<Functor>())
+        return !function_equal(*fp, g);
+      else return true;
+    }
+#endif
+
+public: // should be protected, but GCC 2.95.3 will fail to allow access
+  detail::function::vtable_base* get_vtable() const {
+    return reinterpret_cast<detail::function::vtable_base*>(
+             reinterpret_cast<std::size_t>(vtable) & ~static_cast<std::size_t>(0x01));
+  }
+
+  bool has_trivial_copy_and_destroy() const {
+    return reinterpret_cast<std::size_t>(vtable) & 0x01;
+  }
+
+  detail::function::vtable_base* vtable;
+  mutable detail::function::function_buffer functor;
+};
+
+/**
+ * The bad_function_call exception class is thrown when a pdalboost::function
+ * object is invoked
+ */
+class bad_function_call : public std::runtime_error
+{
+public:
+  bad_function_call() : std::runtime_error("call to empty pdalboost::function") {}
+};
+
+#ifndef BOOST_NO_SFINAE
+inline bool operator==(const function_base& f,
+                       detail::function::useless_clear_type*)
+{
+  return f.empty();
+}
+
+inline bool operator!=(const function_base& f,
+                       detail::function::useless_clear_type*)
+{
+  return !f.empty();
+}
+
+inline bool operator==(detail::function::useless_clear_type*,
+                       const function_base& f)
+{
+  return f.empty();
+}
+
+inline bool operator!=(detail::function::useless_clear_type*,
+                       const function_base& f)
+{
+  return !f.empty();
+}
+#endif
+
+#ifdef BOOST_NO_SFINAE
+// Comparisons between pdalboost::function objects and arbitrary function objects
+template<typename Functor>
+  inline bool operator==(const function_base& f, Functor g)
+  {
+    typedef mpl::bool_<(is_integral<Functor>::value)> integral;
+    return detail::function::compare_equal(f, g, 0, integral());
+  }
+
+template<typename Functor>
+  inline bool operator==(Functor g, const function_base& f)
+  {
+    typedef mpl::bool_<(is_integral<Functor>::value)> integral;
+    return detail::function::compare_equal(f, g, 0, integral());
+  }
+
+template<typename Functor>
+  inline bool operator!=(const function_base& f, Functor g)
+  {
+    typedef mpl::bool_<(is_integral<Functor>::value)> integral;
+    return detail::function::compare_not_equal(f, g, 0, integral());
+  }
+
+template<typename Functor>
+  inline bool operator!=(Functor g, const function_base& f)
+  {
+    typedef mpl::bool_<(is_integral<Functor>::value)> integral;
+    return detail::function::compare_not_equal(f, g, 0, integral());
+  }
+#else
+
+#  if !(defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3)
+// Comparisons between pdalboost::function objects and arbitrary function
+// objects. GCC 3.3 and before has an obnoxious bug that prevents this
+// from working.
+template<typename Functor>
+  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+  operator==(const function_base& f, Functor g)
+  {
+    if (const Functor* fp = f.template target<Functor>())
+      return function_equal(*fp, g);
+    else return false;
+  }
+
+template<typename Functor>
+  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+  operator==(Functor g, const function_base& f)
+  {
+    if (const Functor* fp = f.template target<Functor>())
+      return function_equal(g, *fp);
+    else return false;
+  }
+
+template<typename Functor>
+  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+  operator!=(const function_base& f, Functor g)
+  {
+    if (const Functor* fp = f.template target<Functor>())
+      return !function_equal(*fp, g);
+    else return true;
+  }
+
+template<typename Functor>
+  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+  operator!=(Functor g, const function_base& f)
+  {
+    if (const Functor* fp = f.template target<Functor>())
+      return !function_equal(g, *fp);
+    else return true;
+  }
+#  endif
+
+template<typename Functor>
+  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+  operator==(const function_base& f, reference_wrapper<Functor> g)
+  {
+    if (const Functor* fp = f.template target<Functor>())
+      return fp == g.get_pointer();
+    else return false;
+  }
+
+template<typename Functor>
+  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+  operator==(reference_wrapper<Functor> g, const function_base& f)
+  {
+    if (const Functor* fp = f.template target<Functor>())
+      return g.get_pointer() == fp;
+    else return false;
+  }
+
+template<typename Functor>
+  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+  operator!=(const function_base& f, reference_wrapper<Functor> g)
+  {
+    if (const Functor* fp = f.template target<Functor>())
+      return fp != g.get_pointer();
+    else return true;
+  }
+
+template<typename Functor>
+  BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL(Functor, bool)
+  operator!=(reference_wrapper<Functor> g, const function_base& f)
+  {
+    if (const Functor* fp = f.template target<Functor>())
+      return g.get_pointer() != fp;
+    else return true;
+  }
+
+#endif // Compiler supporting SFINAE
+
+namespace detail {
+  namespace function {
+    inline bool has_empty_target(const function_base* f)
+    {
+      return f->empty();
+    }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+    inline bool has_empty_target(const void*)
+    {
+      return false;
+    }
+#else
+    inline bool has_empty_target(...)
+    {
+      return false;
+    }
+#endif
+  } // end namespace function
+} // end namespace detail
+} // end namespace pdalboost
+
+#undef BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL
+#undef BOOST_FUNCTION_COMPARE_TYPE_ID
+
+#if defined(BOOST_MSVC)
+#   pragma warning( pop )
+#endif       
+
+#endif // BOOST_FUNCTION_BASE_HEADER
diff --git a/vendor/pdalboost/boost/function/function_fwd.hpp b/vendor/pdalboost/boost/function/function_fwd.hpp
new file mode 100644
index 0000000..9d67b8c
--- /dev/null
+++ b/vendor/pdalboost/boost/function/function_fwd.hpp
@@ -0,0 +1,69 @@
+// Boost.Function library
+//  Copyright (C) Douglas Gregor 2008
+//
+//  Use, modification and distribution is subject to the Boost
+//  Software License, Version 1.0.  (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org
+#ifndef BOOST_FUNCTION_FWD_HPP
+#define BOOST_FUNCTION_FWD_HPP
+#include <boost/config.hpp>
+
+#if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730 && !defined(BOOST_STRICT_CONFIG)
+// Work around a compiler bug.
+// pdalboost::python::objects::function has to be seen by the compiler before the
+// pdalboost::function class template.
+namespace pdalboost { namespace python { namespace objects {
+  class function;
+}}}
+#endif
+
+#if defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG)                         \
+ || !(defined(BOOST_STRICT_CONFIG) || !defined(__SUNPRO_CC) || __SUNPRO_CC > 0x540)
+#  define BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX
+#endif
+
+namespace pdalboost {
+  class bad_function_call;
+
+#if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)
+  // Preferred syntax
+  template<typename Signature> class function;
+
+  template<typename Signature>
+  inline void swap(function<Signature>& f1, function<Signature>& f2)
+  {
+    f1.swap(f2);
+  }
+#endif // have partial specialization
+
+  // Portable syntax
+  template<typename R> class function0;
+  template<typename R, typename T1> class function1;
+  template<typename R, typename T1, typename T2> class function2;
+  template<typename R, typename T1, typename T2, typename T3> class function3;
+  template<typename R, typename T1, typename T2, typename T3, typename T4> 
+    class function4;
+  template<typename R, typename T1, typename T2, typename T3, typename T4,
+           typename T5> 
+    class function5;
+  template<typename R, typename T1, typename T2, typename T3, typename T4,
+           typename T5, typename T6> 
+    class function6;
+  template<typename R, typename T1, typename T2, typename T3, typename T4,
+           typename T5, typename T6, typename T7> 
+    class function7;
+  template<typename R, typename T1, typename T2, typename T3, typename T4,
+           typename T5, typename T6, typename T7, typename T8> 
+    class function8;
+  template<typename R, typename T1, typename T2, typename T3, typename T4,
+           typename T5, typename T6, typename T7, typename T8, typename T9> 
+    class function9;
+  template<typename R, typename T1, typename T2, typename T3, typename T4,
+           typename T5, typename T6, typename T7, typename T8, typename T9,
+           typename T10> 
+    class function10;
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/function/function_template.hpp b/vendor/pdalboost/boost/function/function_template.hpp
new file mode 100644
index 0000000..63fb6d1
--- /dev/null
+++ b/vendor/pdalboost/boost/function/function_template.hpp
@@ -0,0 +1,1190 @@
+// Boost.Function library
+
+//  Copyright Douglas Gregor 2001-2006
+//  Copyright Emil Dotchevski 2007
+//  Use, modification and distribution is subject to the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+// Note: this header is a header template and must NOT have multiple-inclusion
+// protection.
+#include <boost/function/detail/prologue.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+
+#if defined(BOOST_MSVC)
+#   pragma warning( push )
+#   pragma warning( disable : 4127 ) // "conditional expression is constant"
+#endif       
+
+#define BOOST_FUNCTION_TEMPLATE_PARMS BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS, typename T)
+
+#define BOOST_FUNCTION_TEMPLATE_ARGS BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS, T)
+
+#define BOOST_FUNCTION_PARM(J,I,D) BOOST_PP_CAT(T,I) BOOST_PP_CAT(a,I)
+
+#define BOOST_FUNCTION_PARMS BOOST_PP_ENUM(BOOST_FUNCTION_NUM_ARGS,BOOST_FUNCTION_PARM,BOOST_PP_EMPTY)
+
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+#   define BOOST_FUNCTION_ARGS BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS, a)
+#else
+#   include <boost/move/utility_core.hpp>
+#   define BOOST_FUNCTION_ARG(J,I,D) ::pdalboost::forward< BOOST_PP_CAT(T,I) >(BOOST_PP_CAT(a,I))
+#   define BOOST_FUNCTION_ARGS BOOST_PP_ENUM(BOOST_FUNCTION_NUM_ARGS,BOOST_FUNCTION_ARG,BOOST_PP_EMPTY)
+#endif
+
+#define BOOST_FUNCTION_ARG_TYPE(J,I,D) \
+  typedef BOOST_PP_CAT(T,I) BOOST_PP_CAT(BOOST_PP_CAT(arg, BOOST_PP_INC(I)),_type);
+
+#define BOOST_FUNCTION_ARG_TYPES BOOST_PP_REPEAT(BOOST_FUNCTION_NUM_ARGS,BOOST_FUNCTION_ARG_TYPE,BOOST_PP_EMPTY)
+
+// Comma if nonzero number of arguments
+#if BOOST_FUNCTION_NUM_ARGS == 0
+#  define BOOST_FUNCTION_COMMA
+#else
+#  define BOOST_FUNCTION_COMMA ,
+#endif // BOOST_FUNCTION_NUM_ARGS > 0
+
+// Class names used in this version of the code
+#define BOOST_FUNCTION_FUNCTION BOOST_JOIN(function,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_FUNCTION_INVOKER \
+  BOOST_JOIN(function_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_VOID_FUNCTION_INVOKER \
+  BOOST_JOIN(void_function_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_FUNCTION_OBJ_INVOKER \
+  BOOST_JOIN(function_obj_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER \
+  BOOST_JOIN(void_function_obj_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_FUNCTION_REF_INVOKER \
+  BOOST_JOIN(function_ref_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_VOID_FUNCTION_REF_INVOKER \
+  BOOST_JOIN(void_function_ref_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_MEMBER_INVOKER \
+  BOOST_JOIN(function_mem_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_VOID_MEMBER_INVOKER \
+  BOOST_JOIN(function_void_mem_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_GET_FUNCTION_INVOKER \
+  BOOST_JOIN(get_function_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER \
+  BOOST_JOIN(get_function_obj_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER \
+  BOOST_JOIN(get_function_ref_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_GET_MEMBER_INVOKER \
+  BOOST_JOIN(get_member_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_GET_INVOKER \
+  BOOST_JOIN(get_invoker,BOOST_FUNCTION_NUM_ARGS)
+#define BOOST_FUNCTION_VTABLE BOOST_JOIN(basic_vtable,BOOST_FUNCTION_NUM_ARGS)
+
+#ifndef BOOST_NO_VOID_RETURNS
+#  define BOOST_FUNCTION_VOID_RETURN_TYPE void
+#  define BOOST_FUNCTION_RETURN(X) X
+#else
+#  define BOOST_FUNCTION_VOID_RETURN_TYPE pdalboost::detail::function::unusable
+#  define BOOST_FUNCTION_RETURN(X) X; return BOOST_FUNCTION_VOID_RETURN_TYPE ()
+#endif
+
+namespace pdalboost {
+  namespace detail {
+    namespace function {
+      template<
+        typename FunctionPtr,
+        typename R BOOST_FUNCTION_COMMA
+        BOOST_FUNCTION_TEMPLATE_PARMS
+        >
+      struct BOOST_FUNCTION_FUNCTION_INVOKER
+      {
+        static R invoke(function_buffer& function_ptr BOOST_FUNCTION_COMMA
+                        BOOST_FUNCTION_PARMS)
+        {
+          FunctionPtr f = reinterpret_cast<FunctionPtr>(function_ptr.func_ptr);
+          return f(BOOST_FUNCTION_ARGS);
+        }
+      };
+
+      template<
+        typename FunctionPtr,
+        typename R BOOST_FUNCTION_COMMA
+        BOOST_FUNCTION_TEMPLATE_PARMS
+        >
+      struct BOOST_FUNCTION_VOID_FUNCTION_INVOKER
+      {
+        static BOOST_FUNCTION_VOID_RETURN_TYPE
+        invoke(function_buffer& function_ptr BOOST_FUNCTION_COMMA
+               BOOST_FUNCTION_PARMS)
+
+        {
+          FunctionPtr f = reinterpret_cast<FunctionPtr>(function_ptr.func_ptr);
+          BOOST_FUNCTION_RETURN(f(BOOST_FUNCTION_ARGS));
+        }
+      };
+
+      template<
+        typename FunctionObj,
+        typename R BOOST_FUNCTION_COMMA
+        BOOST_FUNCTION_TEMPLATE_PARMS
+      >
+      struct BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
+      {
+        static R invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA
+                        BOOST_FUNCTION_PARMS)
+
+        {
+          FunctionObj* f;
+          if (function_allows_small_object_optimization<FunctionObj>::value)
+            f = reinterpret_cast<FunctionObj*>(&function_obj_ptr.data);
+          else
+            f = reinterpret_cast<FunctionObj*>(function_obj_ptr.obj_ptr);
+          return (*f)(BOOST_FUNCTION_ARGS);
+        }
+      };
+
+      template<
+        typename FunctionObj,
+        typename R BOOST_FUNCTION_COMMA
+        BOOST_FUNCTION_TEMPLATE_PARMS
+      >
+      struct BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
+      {
+        static BOOST_FUNCTION_VOID_RETURN_TYPE
+        invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA
+               BOOST_FUNCTION_PARMS)
+
+        {
+          FunctionObj* f;
+          if (function_allows_small_object_optimization<FunctionObj>::value)
+            f = reinterpret_cast<FunctionObj*>(&function_obj_ptr.data);
+          else
+            f = reinterpret_cast<FunctionObj*>(function_obj_ptr.obj_ptr);
+          BOOST_FUNCTION_RETURN((*f)(BOOST_FUNCTION_ARGS));
+        }
+      };
+
+      template<
+        typename FunctionObj,
+        typename R BOOST_FUNCTION_COMMA
+        BOOST_FUNCTION_TEMPLATE_PARMS
+      >
+      struct BOOST_FUNCTION_FUNCTION_REF_INVOKER
+      {
+        static R invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA
+                        BOOST_FUNCTION_PARMS)
+
+        {
+          FunctionObj* f = 
+            reinterpret_cast<FunctionObj*>(function_obj_ptr.obj_ptr);
+          return (*f)(BOOST_FUNCTION_ARGS);
+        }
+      };
+
+      template<
+        typename FunctionObj,
+        typename R BOOST_FUNCTION_COMMA
+        BOOST_FUNCTION_TEMPLATE_PARMS
+      >
+      struct BOOST_FUNCTION_VOID_FUNCTION_REF_INVOKER
+      {
+        static BOOST_FUNCTION_VOID_RETURN_TYPE
+        invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA
+               BOOST_FUNCTION_PARMS)
+
+        {
+          FunctionObj* f = 
+            reinterpret_cast<FunctionObj*>(function_obj_ptr.obj_ptr);
+          BOOST_FUNCTION_RETURN((*f)(BOOST_FUNCTION_ARGS));
+        }
+      };
+
+#if BOOST_FUNCTION_NUM_ARGS > 0
+      /* Handle invocation of member pointers. */
+      template<
+        typename MemberPtr,
+        typename R BOOST_FUNCTION_COMMA
+        BOOST_FUNCTION_TEMPLATE_PARMS
+      >
+      struct BOOST_FUNCTION_MEMBER_INVOKER
+      {
+        static R invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA
+                        BOOST_FUNCTION_PARMS)
+
+        {
+          MemberPtr* f = 
+            reinterpret_cast<MemberPtr*>(&function_obj_ptr.data);
+          return pdalboost::mem_fn(*f)(BOOST_FUNCTION_ARGS);
+        }
+      };
+
+      template<
+        typename MemberPtr,
+        typename R BOOST_FUNCTION_COMMA
+        BOOST_FUNCTION_TEMPLATE_PARMS
+      >
+      struct BOOST_FUNCTION_VOID_MEMBER_INVOKER
+      {
+        static BOOST_FUNCTION_VOID_RETURN_TYPE
+        invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA
+               BOOST_FUNCTION_PARMS)
+
+        {
+          MemberPtr* f = 
+            reinterpret_cast<MemberPtr*>(&function_obj_ptr.data);
+          BOOST_FUNCTION_RETURN(pdalboost::mem_fn(*f)(BOOST_FUNCTION_ARGS));
+        }
+      };
+#endif
+
+      template<
+        typename FunctionPtr,
+        typename R BOOST_FUNCTION_COMMA
+        BOOST_FUNCTION_TEMPLATE_PARMS
+      >
+      struct BOOST_FUNCTION_GET_FUNCTION_INVOKER
+      {
+        typedef typename mpl::if_c<(is_void<R>::value),
+                            BOOST_FUNCTION_VOID_FUNCTION_INVOKER<
+                            FunctionPtr,
+                            R BOOST_FUNCTION_COMMA
+                            BOOST_FUNCTION_TEMPLATE_ARGS
+                          >,
+                          BOOST_FUNCTION_FUNCTION_INVOKER<
+                            FunctionPtr,
+                            R BOOST_FUNCTION_COMMA
+                            BOOST_FUNCTION_TEMPLATE_ARGS
+                          >
+                       >::type type;
+      };
+
+      template<
+        typename FunctionObj,
+        typename R BOOST_FUNCTION_COMMA
+        BOOST_FUNCTION_TEMPLATE_PARMS
+       >
+      struct BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
+      {
+        typedef typename mpl::if_c<(is_void<R>::value),
+                            BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER<
+                            FunctionObj,
+                            R BOOST_FUNCTION_COMMA
+                            BOOST_FUNCTION_TEMPLATE_ARGS
+                          >,
+                          BOOST_FUNCTION_FUNCTION_OBJ_INVOKER<
+                            FunctionObj,
+                            R BOOST_FUNCTION_COMMA
+                            BOOST_FUNCTION_TEMPLATE_ARGS
+                          >
+                       >::type type;
+      };
+
+      template<
+        typename FunctionObj,
+        typename R BOOST_FUNCTION_COMMA
+        BOOST_FUNCTION_TEMPLATE_PARMS
+       >
+      struct BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER
+      {
+        typedef typename mpl::if_c<(is_void<R>::value),
+                            BOOST_FUNCTION_VOID_FUNCTION_REF_INVOKER<
+                            FunctionObj,
+                            R BOOST_FUNCTION_COMMA
+                            BOOST_FUNCTION_TEMPLATE_ARGS
+                          >,
+                          BOOST_FUNCTION_FUNCTION_REF_INVOKER<
+                            FunctionObj,
+                            R BOOST_FUNCTION_COMMA
+                            BOOST_FUNCTION_TEMPLATE_ARGS
+                          >
+                       >::type type;
+      };
+
+#if BOOST_FUNCTION_NUM_ARGS > 0
+      /* Retrieve the appropriate invoker for a member pointer.  */
+      template<
+        typename MemberPtr,
+        typename R BOOST_FUNCTION_COMMA
+        BOOST_FUNCTION_TEMPLATE_PARMS
+       >
+      struct BOOST_FUNCTION_GET_MEMBER_INVOKER
+      {
+        typedef typename mpl::if_c<(is_void<R>::value),
+                            BOOST_FUNCTION_VOID_MEMBER_INVOKER<
+                            MemberPtr,
+                            R BOOST_FUNCTION_COMMA
+                            BOOST_FUNCTION_TEMPLATE_ARGS
+                          >,
+                          BOOST_FUNCTION_MEMBER_INVOKER<
+                            MemberPtr,
+                            R BOOST_FUNCTION_COMMA
+                            BOOST_FUNCTION_TEMPLATE_ARGS
+                          >
+                       >::type type;
+      };
+#endif
+
+      /* Given the tag returned by get_function_tag, retrieve the
+         actual invoker that will be used for the given function
+         object. 
+
+         Each specialization contains an "apply" nested class template
+         that accepts the function object, return type, function
+         argument types, and allocator. The resulting "apply" class
+         contains two typedefs, "invoker_type" and "manager_type",
+         which correspond to the invoker and manager types. */
+      template<typename Tag>
+      struct BOOST_FUNCTION_GET_INVOKER { };
+
+      /* Retrieve the invoker for a function pointer. */
+      template<>
+      struct BOOST_FUNCTION_GET_INVOKER<function_ptr_tag>
+      {
+        template<typename FunctionPtr,
+                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
+        struct apply
+        {
+          typedef typename BOOST_FUNCTION_GET_FUNCTION_INVOKER<
+                             FunctionPtr,
+                             R BOOST_FUNCTION_COMMA
+                             BOOST_FUNCTION_TEMPLATE_ARGS
+                           >::type
+            invoker_type;
+
+          typedef functor_manager<FunctionPtr> manager_type;
+        };
+
+        template<typename FunctionPtr,
+                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
+                 typename Allocator>
+        struct apply_a
+        {
+          typedef typename BOOST_FUNCTION_GET_FUNCTION_INVOKER<
+                             FunctionPtr,
+                             R BOOST_FUNCTION_COMMA
+                             BOOST_FUNCTION_TEMPLATE_ARGS
+                           >::type
+            invoker_type;
+
+          typedef functor_manager<FunctionPtr> manager_type;
+        };
+      };
+
+#if BOOST_FUNCTION_NUM_ARGS > 0
+      /* Retrieve the invoker for a member pointer. */
+      template<>
+      struct BOOST_FUNCTION_GET_INVOKER<member_ptr_tag>
+      {
+        template<typename MemberPtr,
+                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
+        struct apply
+        {
+          typedef typename BOOST_FUNCTION_GET_MEMBER_INVOKER<
+                             MemberPtr,
+                             R BOOST_FUNCTION_COMMA
+                             BOOST_FUNCTION_TEMPLATE_ARGS
+                           >::type
+            invoker_type;
+
+          typedef functor_manager<MemberPtr> manager_type;
+        };
+
+        template<typename MemberPtr,
+                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
+                 typename Allocator>
+        struct apply_a
+        {
+          typedef typename BOOST_FUNCTION_GET_MEMBER_INVOKER<
+                             MemberPtr,
+                             R BOOST_FUNCTION_COMMA
+                             BOOST_FUNCTION_TEMPLATE_ARGS
+                           >::type
+            invoker_type;
+
+          typedef functor_manager<MemberPtr> manager_type;
+        };
+      };
+#endif
+
+      /* Retrieve the invoker for a function object. */
+      template<>
+      struct BOOST_FUNCTION_GET_INVOKER<function_obj_tag>
+      {
+        template<typename FunctionObj,
+                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
+        struct apply
+        {
+          typedef typename BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER<
+                             FunctionObj,
+                             R BOOST_FUNCTION_COMMA
+                             BOOST_FUNCTION_TEMPLATE_ARGS
+                           >::type
+            invoker_type;
+
+          typedef functor_manager<FunctionObj> manager_type;
+        };
+
+        template<typename FunctionObj,
+                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
+                 typename Allocator>
+        struct apply_a
+        {
+          typedef typename BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER<
+                             FunctionObj,
+                             R BOOST_FUNCTION_COMMA
+                             BOOST_FUNCTION_TEMPLATE_ARGS
+                           >::type
+            invoker_type;
+
+          typedef functor_manager_a<FunctionObj, Allocator> manager_type;
+        };
+      };
+
+      /* Retrieve the invoker for a reference to a function object. */
+      template<>
+      struct BOOST_FUNCTION_GET_INVOKER<function_obj_ref_tag>
+      {
+        template<typename RefWrapper,
+                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
+        struct apply
+        {
+          typedef typename BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER<
+                             typename RefWrapper::type,
+                             R BOOST_FUNCTION_COMMA
+                             BOOST_FUNCTION_TEMPLATE_ARGS
+                           >::type
+            invoker_type;
+
+          typedef reference_manager<typename RefWrapper::type> manager_type;
+        };
+
+        template<typename RefWrapper,
+                 typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
+                 typename Allocator>
+        struct apply_a
+        {
+          typedef typename BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER<
+                             typename RefWrapper::type,
+                             R BOOST_FUNCTION_COMMA
+                             BOOST_FUNCTION_TEMPLATE_ARGS
+                           >::type
+            invoker_type;
+
+          typedef reference_manager<typename RefWrapper::type> manager_type;
+        };
+      };
+
+
+      /**
+       * vtable for a specific pdalboost::function instance. This
+       * structure must be an aggregate so that we can use static
+       * initialization in pdalboost::function's assign_to and assign_to_a
+       * members. It therefore cannot have any constructors,
+       * destructors, base classes, etc.
+       */
+      template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
+      struct BOOST_FUNCTION_VTABLE
+      {
+#ifndef BOOST_NO_VOID_RETURNS
+        typedef R         result_type;
+#else
+        typedef typename function_return_type<R>::type result_type;
+#endif // BOOST_NO_VOID_RETURNS
+
+        typedef result_type (*invoker_type)(function_buffer&
+                                            BOOST_FUNCTION_COMMA
+                                            BOOST_FUNCTION_TEMPLATE_ARGS);
+
+        template<typename F>
+        bool assign_to(F f, function_buffer& functor) const
+        {
+          typedef typename get_function_tag<F>::type tag;
+          return assign_to(f, functor, tag());
+        }
+        template<typename F,typename Allocator>
+        bool assign_to_a(F f, function_buffer& functor, Allocator a) const
+        {
+          typedef typename get_function_tag<F>::type tag;
+          return assign_to_a(f, functor, a, tag());
+        }
+
+        void clear(function_buffer& functor) const
+        {
+          if (base.manager)
+            base.manager(functor, functor, destroy_functor_tag);
+        }
+
+      private:
+        // Function pointers
+        template<typename FunctionPtr>
+        bool 
+        assign_to(FunctionPtr f, function_buffer& functor, function_ptr_tag) const
+        {
+          this->clear(functor);
+          if (f) {
+            // should be a reinterpret cast, but some compilers insist
+            // on giving cv-qualifiers to free functions
+            functor.func_ptr = reinterpret_cast<void (*)()>(f);
+            return true;
+          } else {
+            return false;
+          }
+        }
+        template<typename FunctionPtr,typename Allocator>
+        bool 
+        assign_to_a(FunctionPtr f, function_buffer& functor, Allocator, function_ptr_tag) const
+        {
+          return assign_to(f,functor,function_ptr_tag());
+        }
+
+        // Member pointers
+#if BOOST_FUNCTION_NUM_ARGS > 0
+        template<typename MemberPtr>
+        bool assign_to(MemberPtr f, function_buffer& functor, member_ptr_tag) const
+        {
+          // DPG TBD: Add explicit support for member function
+          // objects, so we invoke through mem_fn() but we retain the
+          // right target_type() values.
+          if (f) {
+            this->assign_to(pdalboost::mem_fn(f), functor);
+            return true;
+          } else {
+            return false;
+          }
+        }
+        template<typename MemberPtr,typename Allocator>
+        bool assign_to_a(MemberPtr f, function_buffer& functor, Allocator a, member_ptr_tag) const
+        {
+          // DPG TBD: Add explicit support for member function
+          // objects, so we invoke through mem_fn() but we retain the
+          // right target_type() values.
+          if (f) {
+            this->assign_to_a(pdalboost::mem_fn(f), functor, a);
+            return true;
+          } else {
+            return false;
+          }
+        }
+#endif // BOOST_FUNCTION_NUM_ARGS > 0
+
+        // Function objects
+        // Assign to a function object using the small object optimization
+        template<typename FunctionObj>
+        void 
+        assign_functor(FunctionObj f, function_buffer& functor, mpl::true_) const
+        {
+          new (reinterpret_cast<void*>(&functor.data)) FunctionObj(f);
+        }
+        template<typename FunctionObj,typename Allocator>
+        void 
+        assign_functor_a(FunctionObj f, function_buffer& functor, Allocator, mpl::true_) const
+        {
+          assign_functor(f,functor,mpl::true_());
+        }
+
+        // Assign to a function object allocated on the heap.
+        template<typename FunctionObj>
+        void 
+        assign_functor(FunctionObj f, function_buffer& functor, mpl::false_) const
+        {
+          functor.obj_ptr = new FunctionObj(f);
+        }
+        template<typename FunctionObj,typename Allocator>
+        void 
+        assign_functor_a(FunctionObj f, function_buffer& functor, Allocator a, mpl::false_) const
+        {
+          typedef functor_wrapper<FunctionObj,Allocator> functor_wrapper_type;
+          typedef typename Allocator::template rebind<functor_wrapper_type>::other
+            wrapper_allocator_type;
+          typedef typename wrapper_allocator_type::pointer wrapper_allocator_pointer_type;
+          wrapper_allocator_type wrapper_allocator(a);
+          wrapper_allocator_pointer_type copy = wrapper_allocator.allocate(1);
+          wrapper_allocator.construct(copy, functor_wrapper_type(f,a));
+          functor_wrapper_type* new_f = static_cast<functor_wrapper_type*>(copy);
+          functor.obj_ptr = new_f;
+        }
+
+        template<typename FunctionObj>
+        bool 
+        assign_to(FunctionObj f, function_buffer& functor, function_obj_tag) const
+        {
+          if (!pdalboost::detail::function::has_empty_target(pdalboost::addressof(f))) {
+            assign_functor(f, functor, 
+                           mpl::bool_<(function_allows_small_object_optimization<FunctionObj>::value)>());
+            return true;
+          } else {
+            return false;
+          }
+        }
+        template<typename FunctionObj,typename Allocator>
+        bool 
+        assign_to_a(FunctionObj f, function_buffer& functor, Allocator a, function_obj_tag) const
+        {
+          if (!pdalboost::detail::function::has_empty_target(pdalboost::addressof(f))) {
+            assign_functor_a(f, functor, a,
+                           mpl::bool_<(function_allows_small_object_optimization<FunctionObj>::value)>());
+            return true;
+          } else {
+            return false;
+          }
+        }
+
+        // Reference to a function object
+        template<typename FunctionObj>
+        bool 
+        assign_to(const reference_wrapper<FunctionObj>& f, 
+                  function_buffer& functor, function_obj_ref_tag) const
+        {
+          functor.obj_ref.obj_ptr = (void *)(f.get_pointer());
+          functor.obj_ref.is_const_qualified = is_const<FunctionObj>::value;
+          functor.obj_ref.is_volatile_qualified = is_volatile<FunctionObj>::value;
+          return true;
+        }
+        template<typename FunctionObj,typename Allocator>
+        bool 
+        assign_to_a(const reference_wrapper<FunctionObj>& f, 
+                  function_buffer& functor, Allocator, function_obj_ref_tag) const
+        {
+          return assign_to(f,functor,function_obj_ref_tag());
+        }
+
+      public:
+        vtable_base base;
+        invoker_type invoker;
+      };
+    } // end namespace function
+  } // end namespace detail
+
+  template<
+    typename R BOOST_FUNCTION_COMMA
+    BOOST_FUNCTION_TEMPLATE_PARMS
+  >
+  class BOOST_FUNCTION_FUNCTION : public function_base
+
+#if BOOST_FUNCTION_NUM_ARGS == 1
+
+    , public std::unary_function<T0,R>
+
+#elif BOOST_FUNCTION_NUM_ARGS == 2
+
+    , public std::binary_function<T0,T1,R>
+
+#endif
+
+  {
+  public:
+#ifndef BOOST_NO_VOID_RETURNS
+    typedef R         result_type;
+#else
+    typedef  typename pdalboost::detail::function::function_return_type<R>::type
+      result_type;
+#endif // BOOST_NO_VOID_RETURNS
+
+  private:
+    typedef pdalboost::detail::function::BOOST_FUNCTION_VTABLE<
+              R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS>
+      vtable_type;
+
+    vtable_type* get_vtable() const {
+      return reinterpret_cast<vtable_type*>(
+               reinterpret_cast<std::size_t>(vtable) & ~static_cast<std::size_t>(0x01));
+    }
+
+    struct clear_type {};
+
+  public:
+    BOOST_STATIC_CONSTANT(int, args = BOOST_FUNCTION_NUM_ARGS);
+
+    // add signature for pdalboost::lambda
+    template<typename Args>
+    struct sig
+    {
+      typedef result_type type;
+    };
+
+#if BOOST_FUNCTION_NUM_ARGS == 1
+    typedef T0 argument_type;
+#elif BOOST_FUNCTION_NUM_ARGS == 2
+    typedef T0 first_argument_type;
+    typedef T1 second_argument_type;
+#endif
+
+    BOOST_STATIC_CONSTANT(int, arity = BOOST_FUNCTION_NUM_ARGS);
+    BOOST_FUNCTION_ARG_TYPES
+
+    typedef BOOST_FUNCTION_FUNCTION self_type;
+
+    BOOST_FUNCTION_FUNCTION() : function_base() { }
+
+    // MSVC chokes if the following two constructors are collapsed into
+    // one with a default parameter.
+    template<typename Functor>
+    BOOST_FUNCTION_FUNCTION(Functor BOOST_FUNCTION_TARGET_FIX(const &) f
+#ifndef BOOST_NO_SFINAE
+                            ,typename pdalboost::enable_if_c<
+                             !(is_integral<Functor>::value),
+                                        int>::type = 0
+#endif // BOOST_NO_SFINAE
+                            ) :
+      function_base()
+    {
+      this->assign_to(f);
+    }
+    template<typename Functor,typename Allocator>
+    BOOST_FUNCTION_FUNCTION(Functor BOOST_FUNCTION_TARGET_FIX(const &) f, Allocator a
+#ifndef BOOST_NO_SFINAE
+                            ,typename pdalboost::enable_if_c<
+                              !(is_integral<Functor>::value),
+                                        int>::type = 0
+#endif // BOOST_NO_SFINAE
+                            ) :
+      function_base()
+    {
+      this->assign_to_a(f,a);
+    }
+
+#ifndef BOOST_NO_SFINAE
+    BOOST_FUNCTION_FUNCTION(clear_type*) : function_base() { }
+#else
+    BOOST_FUNCTION_FUNCTION(int zero) : function_base()
+    {
+      BOOST_ASSERT(zero == 0);
+    }
+#endif
+
+    BOOST_FUNCTION_FUNCTION(const BOOST_FUNCTION_FUNCTION& f) : function_base()
+    {
+      this->assign_to_own(f);
+    }
+    
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+    BOOST_FUNCTION_FUNCTION(BOOST_FUNCTION_FUNCTION&& f) : function_base()
+    {
+      this->move_assign(f);
+    }
+#endif
+    
+    ~BOOST_FUNCTION_FUNCTION() { clear(); }
+
+    result_type operator()(BOOST_FUNCTION_PARMS) const
+    {
+      if (this->empty())
+        pdalboost::throw_exception(bad_function_call());
+
+      return get_vtable()->invoker
+               (this->functor BOOST_FUNCTION_COMMA BOOST_FUNCTION_ARGS);
+    }
+
+    // The distinction between when to use BOOST_FUNCTION_FUNCTION and
+    // when to use self_type is obnoxious. MSVC cannot handle self_type as
+    // the return type of these assignment operators, but Borland C++ cannot
+    // handle BOOST_FUNCTION_FUNCTION as the type of the temporary to
+    // construct.
+    template<typename Functor>
+#ifndef BOOST_NO_SFINAE
+    typename pdalboost::enable_if_c<
+                  !(is_integral<Functor>::value),
+               BOOST_FUNCTION_FUNCTION&>::type
+#else
+    BOOST_FUNCTION_FUNCTION&
+#endif
+    operator=(Functor BOOST_FUNCTION_TARGET_FIX(const &) f)
+    {
+      this->clear();
+      BOOST_TRY  {
+        this->assign_to(f);
+      } BOOST_CATCH (...) {
+        vtable = 0;
+        BOOST_RETHROW;
+      }
+      BOOST_CATCH_END
+      return *this;
+    }
+    template<typename Functor,typename Allocator>
+    void assign(Functor BOOST_FUNCTION_TARGET_FIX(const &) f, Allocator a)
+    {
+      this->clear();
+      BOOST_TRY{
+        this->assign_to_a(f,a);
+      } BOOST_CATCH (...) {
+        vtable = 0;
+        BOOST_RETHROW;
+      }
+      BOOST_CATCH_END
+    }
+
+#ifndef BOOST_NO_SFINAE
+    BOOST_FUNCTION_FUNCTION& operator=(clear_type*)
+    {
+      this->clear();
+      return *this;
+    }
+#else
+    BOOST_FUNCTION_FUNCTION& operator=(int zero)
+    {
+      BOOST_ASSERT(zero == 0);
+      this->clear();
+      return *this;
+    }
+#endif
+
+    // Assignment from another BOOST_FUNCTION_FUNCTION
+    BOOST_FUNCTION_FUNCTION& operator=(const BOOST_FUNCTION_FUNCTION& f)
+    {
+      if (&f == this)
+        return *this;
+
+      this->clear();
+      BOOST_TRY {
+        this->assign_to_own(f);
+      } BOOST_CATCH (...) {
+        vtable = 0;
+        BOOST_RETHROW;
+      }
+      BOOST_CATCH_END
+      return *this;
+    }
+    
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+    // Move assignment from another BOOST_FUNCTION_FUNCTION
+    BOOST_FUNCTION_FUNCTION& operator=(BOOST_FUNCTION_FUNCTION&& f)
+    {
+      
+      if (&f == this)
+        return *this;
+
+      this->clear();
+      BOOST_TRY {
+        this->move_assign(f);
+      } BOOST_CATCH (...) {
+        vtable = 0;
+        BOOST_RETHROW;
+      }
+      BOOST_CATCH_END
+      return *this;
+    }
+#endif
+
+    void swap(BOOST_FUNCTION_FUNCTION& other)
+    {
+      if (&other == this)
+        return;
+
+      BOOST_FUNCTION_FUNCTION tmp;
+      tmp.move_assign(*this);
+      this->move_assign(other);
+      other.move_assign(tmp);
+    }
+
+    // Clear out a target, if there is one
+    void clear()
+    {
+      if (vtable) {
+        if (!this->has_trivial_copy_and_destroy())
+          get_vtable()->clear(this->functor);
+        vtable = 0;
+      }
+    }
+
+#if (defined __SUNPRO_CC) && (__SUNPRO_CC <= 0x530) && !(defined BOOST_NO_COMPILER_CONFIG)
+    // Sun C++ 5.3 can't handle the safe_bool idiom, so don't use it
+    operator bool () const { return !this->empty(); }
+#else
+  private:
+    struct dummy {
+      void nonnull() {}
+    };
+
+    typedef void (dummy::*safe_bool)();
+
+  public:
+    operator safe_bool () const
+      { return (this->empty())? 0 : &dummy::nonnull; }
+
+    bool operator!() const
+      { return this->empty(); }
+#endif
+
+  private:
+    void assign_to_own(const BOOST_FUNCTION_FUNCTION& f)
+    {
+      if (!f.empty()) {
+        this->vtable = f.vtable;
+        if (this->has_trivial_copy_and_destroy())
+          this->functor = f.functor;
+        else
+          get_vtable()->base.manager(f.functor, this->functor,
+                                     pdalboost::detail::function::clone_functor_tag);
+      }
+    }
+
+    template<typename Functor>
+    void assign_to(Functor f)
+    {
+      using pdalboost::detail::function::vtable_base;
+
+      typedef typename pdalboost::detail::function::get_function_tag<Functor>::type tag;
+      typedef pdalboost::detail::function::BOOST_FUNCTION_GET_INVOKER<tag> get_invoker;
+      typedef typename get_invoker::
+                         template apply<Functor, R BOOST_FUNCTION_COMMA 
+                        BOOST_FUNCTION_TEMPLATE_ARGS>
+        handler_type;
+      
+      typedef typename handler_type::invoker_type invoker_type;
+      typedef typename handler_type::manager_type manager_type;
+
+      // Note: it is extremely important that this initialization use
+      // static initialization. Otherwise, we will have a race
+      // condition here in multi-threaded code. See
+      // http://thread.gmane.org/gmane.comp.lib.boost.devel/164902/.
+      static const vtable_type stored_vtable = 
+        { { &manager_type::manage }, &invoker_type::invoke };
+
+      if (stored_vtable.assign_to(f, functor)) {
+        std::size_t value = reinterpret_cast<std::size_t>(&stored_vtable.base);
+        // coverity[pointless_expression]: suppress coverity warnings on apparant if(const).
+        if (pdalboost::has_trivial_copy_constructor<Functor>::value &&
+            pdalboost::has_trivial_destructor<Functor>::value &&
+            pdalboost::detail::function::function_allows_small_object_optimization<Functor>::value)
+          value |= static_cast<std::size_t>(0x01);
+        vtable = reinterpret_cast<pdalboost::detail::function::vtable_base *>(value);
+      } else 
+        vtable = 0;
+    }
+
+    template<typename Functor,typename Allocator>
+    void assign_to_a(Functor f,Allocator a)
+    {
+      using pdalboost::detail::function::vtable_base;
+
+      typedef typename pdalboost::detail::function::get_function_tag<Functor>::type tag;
+      typedef pdalboost::detail::function::BOOST_FUNCTION_GET_INVOKER<tag> get_invoker;
+      typedef typename get_invoker::
+                         template apply_a<Functor, R BOOST_FUNCTION_COMMA 
+                         BOOST_FUNCTION_TEMPLATE_ARGS,
+                         Allocator>
+        handler_type;
+      
+      typedef typename handler_type::invoker_type invoker_type;
+      typedef typename handler_type::manager_type manager_type;
+
+      // Note: it is extremely important that this initialization use
+      // static initialization. Otherwise, we will have a race
+      // condition here in multi-threaded code. See
+      // http://thread.gmane.org/gmane.comp.lib.boost.devel/164902/.
+      static const vtable_type stored_vtable =
+        { { &manager_type::manage }, &invoker_type::invoke };
+
+      if (stored_vtable.assign_to_a(f, functor, a)) { 
+        std::size_t value = reinterpret_cast<std::size_t>(&stored_vtable.base);
+        // coverity[pointless_expression]: suppress coverity warnings on apparant if(const).
+        if (pdalboost::has_trivial_copy_constructor<Functor>::value &&
+            pdalboost::has_trivial_destructor<Functor>::value &&
+            pdalboost::detail::function::function_allows_small_object_optimization<Functor>::value)
+          value |= static_cast<std::size_t>(0x01);
+        vtable = reinterpret_cast<pdalboost::detail::function::vtable_base *>(value);
+      } else 
+        vtable = 0;
+    }
+
+    // Moves the value from the specified argument to *this. If the argument 
+    // has its function object allocated on the heap, move_assign will pass 
+    // its buffer to *this, and set the argument's buffer pointer to NULL. 
+    void move_assign(BOOST_FUNCTION_FUNCTION& f) 
+    { 
+      if (&f == this)
+        return;
+
+      BOOST_TRY {
+        if (!f.empty()) {
+          this->vtable = f.vtable;
+          if (this->has_trivial_copy_and_destroy())
+            this->functor = f.functor;
+          else
+            get_vtable()->base.manager(f.functor, this->functor,
+                                     pdalboost::detail::function::move_functor_tag);
+          f.vtable = 0;
+        } else {
+          clear();
+        }
+      } BOOST_CATCH (...) {
+        vtable = 0;
+        BOOST_RETHROW;
+      }
+      BOOST_CATCH_END
+    }
+  };
+
+  template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
+  inline void swap(BOOST_FUNCTION_FUNCTION<
+                     R BOOST_FUNCTION_COMMA
+                     BOOST_FUNCTION_TEMPLATE_ARGS
+                   >& f1,
+                   BOOST_FUNCTION_FUNCTION<
+                     R BOOST_FUNCTION_COMMA
+                     BOOST_FUNCTION_TEMPLATE_ARGS
+                   >& f2)
+  {
+    f1.swap(f2);
+  }
+
+// Poison comparisons between pdalboost::function objects of the same type.
+template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
+  void operator==(const BOOST_FUNCTION_FUNCTION<
+                          R BOOST_FUNCTION_COMMA
+                          BOOST_FUNCTION_TEMPLATE_ARGS>&,
+                  const BOOST_FUNCTION_FUNCTION<
+                          R BOOST_FUNCTION_COMMA
+                          BOOST_FUNCTION_TEMPLATE_ARGS>&);
+template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
+  void operator!=(const BOOST_FUNCTION_FUNCTION<
+                          R BOOST_FUNCTION_COMMA
+                          BOOST_FUNCTION_TEMPLATE_ARGS>&,
+                  const BOOST_FUNCTION_FUNCTION<
+                          R BOOST_FUNCTION_COMMA
+                          BOOST_FUNCTION_TEMPLATE_ARGS>& );
+
+#if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)
+
+#if BOOST_FUNCTION_NUM_ARGS == 0
+#define BOOST_FUNCTION_PARTIAL_SPEC R (void)
+#else
+#define BOOST_FUNCTION_PARTIAL_SPEC R (BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS,T))
+#endif
+
+template<typename R BOOST_FUNCTION_COMMA
+         BOOST_FUNCTION_TEMPLATE_PARMS>
+class function<BOOST_FUNCTION_PARTIAL_SPEC>
+  : public BOOST_FUNCTION_FUNCTION<R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS>
+{
+  typedef BOOST_FUNCTION_FUNCTION<R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS> base_type;
+  typedef function self_type;
+
+  struct clear_type {};
+
+public:
+
+  function() : base_type() {}
+
+  template<typename Functor>
+  function(Functor f
+#ifndef BOOST_NO_SFINAE
+           ,typename pdalboost::enable_if_c<
+                          !(is_integral<Functor>::value),
+                       int>::type = 0
+#endif
+           ) :
+    base_type(f)
+  {
+  }
+  template<typename Functor,typename Allocator>
+  function(Functor f, Allocator a
+#ifndef BOOST_NO_SFINAE
+           ,typename pdalboost::enable_if_c<
+                           !(is_integral<Functor>::value),
+                       int>::type = 0
+#endif
+           ) :
+    base_type(f,a)
+  {
+  }
+
+#ifndef BOOST_NO_SFINAE
+  function(clear_type*) : base_type() {}
+#endif
+
+  function(const self_type& f) : base_type(static_cast<const base_type&>(f)){}
+
+  function(const base_type& f) : base_type(static_cast<const base_type&>(f)){}
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+  // Move constructors
+  function(self_type&& f): base_type(static_cast<base_type&&>(f)){}
+  function(base_type&& f): base_type(static_cast<base_type&&>(f)){}
+#endif
+  
+  self_type& operator=(const self_type& f)
+  {
+    self_type(f).swap(*this);
+    return *this;
+  }
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+  self_type& operator=(self_type&& f)
+  {
+    self_type(static_cast<self_type&&>(f)).swap(*this);
+    return *this;
+  }
+#endif  
+
+  template<typename Functor>
+#ifndef BOOST_NO_SFINAE
+  typename pdalboost::enable_if_c<
+                         !(is_integral<Functor>::value),
+                      self_type&>::type
+#else
+  self_type&
+#endif
+  operator=(Functor f)
+  {
+    self_type(f).swap(*this);
+    return *this;
+  }
+
+#ifndef BOOST_NO_SFINAE
+  self_type& operator=(clear_type*)
+  {
+    this->clear();
+    return *this;
+  }
+#endif
+
+  self_type& operator=(const base_type& f)
+  {
+    self_type(f).swap(*this);
+    return *this;
+  }
+  
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+  self_type& operator=(base_type&& f)
+  {
+    self_type(static_cast<base_type&&>(f)).swap(*this);
+    return *this;
+  }
+#endif 
+};
+
+#undef BOOST_FUNCTION_PARTIAL_SPEC
+#endif // have partial specialization
+
+} // end namespace pdalboost
+
+// Cleanup after ourselves...
+#undef BOOST_FUNCTION_VTABLE
+#undef BOOST_FUNCTION_COMMA
+#undef BOOST_FUNCTION_FUNCTION
+#undef BOOST_FUNCTION_FUNCTION_INVOKER
+#undef BOOST_FUNCTION_VOID_FUNCTION_INVOKER
+#undef BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
+#undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
+#undef BOOST_FUNCTION_FUNCTION_REF_INVOKER
+#undef BOOST_FUNCTION_VOID_FUNCTION_REF_INVOKER
+#undef BOOST_FUNCTION_MEMBER_INVOKER
+#undef BOOST_FUNCTION_VOID_MEMBER_INVOKER
+#undef BOOST_FUNCTION_GET_FUNCTION_INVOKER
+#undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
+#undef BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER
+#undef BOOST_FUNCTION_GET_MEM_FUNCTION_INVOKER
+#undef BOOST_FUNCTION_GET_INVOKER
+#undef BOOST_FUNCTION_TEMPLATE_PARMS
+#undef BOOST_FUNCTION_TEMPLATE_ARGS
+#undef BOOST_FUNCTION_PARMS
+#undef BOOST_FUNCTION_PARM
+#ifdef BOOST_FUNCTION_ARG
+#   undef BOOST_FUNCTION_ARG
+#endif
+#undef BOOST_FUNCTION_ARGS
+#undef BOOST_FUNCTION_ARG_TYPE
+#undef BOOST_FUNCTION_ARG_TYPES
+#undef BOOST_FUNCTION_VOID_RETURN_TYPE
+#undef BOOST_FUNCTION_RETURN
+
+#if defined(BOOST_MSVC)
+#   pragma warning( pop )
+#endif       
diff --git a/vendor/pdalboost/boost/function_equal.hpp b/vendor/pdalboost/boost/function_equal.hpp
new file mode 100644
index 0000000..80b57a7
--- /dev/null
+++ b/vendor/pdalboost/boost/function_equal.hpp
@@ -0,0 +1,28 @@
+//  Copyright Douglas Gregor 2004.
+//  Copyright 2005 Peter Dimov
+
+//  Use, modification and distribution is subject to
+//  the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+#ifndef BOOST_FUNCTION_EQUAL_HPP
+#define BOOST_FUNCTION_EQUAL_HPP
+
+namespace pdalboost {
+
+template<typename F, typename G>
+  bool function_equal_impl(const F& f, const G& g, long)
+  { return f == g; }
+
+// function_equal_impl needs to be unqualified to pick
+// user overloads on two-phase compilers
+
+template<typename F, typename G>
+  bool function_equal(const F& f, const G& g)
+  { return function_equal_impl(f, g, 0); }
+
+} // end namespace pdalboost
+
+#endif // BOOST_FUNCTION_EQUAL_HPP
diff --git a/vendor/pdalboost/boost/functional/hash.hpp b/vendor/pdalboost/boost/functional/hash.hpp
new file mode 100644
index 0000000..44983f1
--- /dev/null
+++ b/vendor/pdalboost/boost/functional/hash.hpp
@@ -0,0 +1,7 @@
+
+// Copyright 2005-2009 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/functional/hash/hash.hpp>
+
diff --git a/vendor/pdalboost/boost/functional/hash/detail/float_functions.hpp b/vendor/pdalboost/boost/functional/hash/detail/float_functions.hpp
new file mode 100644
index 0000000..fa6baf5
--- /dev/null
+++ b/vendor/pdalboost/boost/functional/hash/detail/float_functions.hpp
@@ -0,0 +1,336 @@
+
+// Copyright 2005-2009 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_FLOAT_FUNCTIONS_HPP)
+#define BOOST_FUNCTIONAL_HASH_DETAIL_FLOAT_FUNCTIONS_HPP
+
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
+#endif
+
+#include <boost/config/no_tr1/cmath.hpp>
+
+// Set BOOST_HASH_CONFORMANT_FLOATS to 1 for libraries known to have
+// sufficiently good floating point support to not require any
+// workarounds.
+//
+// When set to 0, the library tries to automatically
+// use the best available implementation. This normally works well, but
+// breaks when ambiguities are created by odd namespacing of the functions.
+//
+// Note that if this is set to 0, the library should still take full
+// advantage of the platform's floating point support.
+
+#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+#   define BOOST_HASH_CONFORMANT_FLOATS 0
+#elif defined(__LIBCOMO__)
+#   define BOOST_HASH_CONFORMANT_FLOATS 0
+#elif defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)
+// Rogue Wave library:
+#   define BOOST_HASH_CONFORMANT_FLOATS 0
+#elif defined(_LIBCPP_VERSION)
+// libc++
+#   define BOOST_HASH_CONFORMANT_FLOATS 1
+#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)
+// GNU libstdc++ 3
+#   if defined(__GNUC__) && __GNUC__ >= 4
+#       define BOOST_HASH_CONFORMANT_FLOATS 1
+#   else
+#       define BOOST_HASH_CONFORMANT_FLOATS 0
+#   endif
+#elif defined(__STL_CONFIG_H)
+// generic SGI STL
+#   define BOOST_HASH_CONFORMANT_FLOATS 0
+#elif defined(__MSL_CPP__)
+// MSL standard lib:
+#   define BOOST_HASH_CONFORMANT_FLOATS 0
+#elif defined(__IBMCPP__)
+// VACPP std lib (probably conformant for much earlier version).
+#   if __IBMCPP__ >= 1210
+#       define BOOST_HASH_CONFORMANT_FLOATS 1
+#   else
+#       define BOOST_HASH_CONFORMANT_FLOATS 0
+#   endif
+#elif defined(MSIPL_COMPILE_H)
+// Modena C++ standard library
+#   define BOOST_HASH_CONFORMANT_FLOATS 0
+#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
+// Dinkumware Library (this has to appear after any possible replacement libraries):
+#   if _CPPLIB_VER >= 405
+#       define BOOST_HASH_CONFORMANT_FLOATS 1
+#   else
+#       define BOOST_HASH_CONFORMANT_FLOATS 0
+#   endif
+#else
+#   define BOOST_HASH_CONFORMANT_FLOATS 0
+#endif
+
+#if BOOST_HASH_CONFORMANT_FLOATS
+
+// The standard library is known to be compliant, so don't use the
+// configuration mechanism.
+
+namespace pdalboost {
+    namespace hash_detail {
+        template <typename Float>
+        struct call_ldexp {
+            typedef Float float_type;
+            inline Float operator()(Float x, int y) const {
+                return std::ldexp(x, y);
+            }
+        };
+
+        template <typename Float>
+        struct call_frexp {
+            typedef Float float_type;
+            inline Float operator()(Float x, int* y) const {
+                return std::frexp(x, y);
+            }
+        };
+
+        template <typename Float>
+        struct select_hash_type
+        {
+            typedef Float type;
+        };
+    }
+}
+
+#else // BOOST_HASH_CONFORMANT_FLOATS == 0
+
+// The C++ standard requires that the C float functions are overloarded
+// for float, double and long double in the std namespace, but some of the older
+// library implementations don't support this. On some that don't, the C99
+// float functions (frexpf, frexpl, etc.) are available.
+//
+// The following tries to automatically detect which are available.
+
+namespace pdalboost {
+    namespace hash_detail {
+
+        // Returned by dummy versions of the float functions.
+    
+        struct not_found {
+            // Implicitly convertible to float and long double in order to avoid
+            // a compile error when the dummy float functions are used.
+
+            inline operator float() const { return 0; }
+            inline operator long double() const { return 0; }
+        };
+          
+        // A type for detecting the return type of functions.
+
+        template <typename T> struct is;
+        template <> struct is<float> { char x[10]; };
+        template <> struct is<double> { char x[20]; };
+        template <> struct is<long double> { char x[30]; };
+        template <> struct is<pdalboost::hash_detail::not_found> { char x[40]; };
+            
+        // Used to convert the return type of a function to a type for sizeof.
+
+        template <typename T> is<T> float_type(T);
+
+        // call_ldexp
+        //
+        // This will get specialized for float and long double
+        
+        template <typename Float> struct call_ldexp
+        {
+            typedef double float_type;
+            
+            inline double operator()(double a, int b) const
+            {
+                using namespace std;
+                return ldexp(a, b);
+            }
+        };
+
+        // call_frexp
+        //
+        // This will get specialized for float and long double
+
+        template <typename Float> struct call_frexp
+        {
+            typedef double float_type;
+            
+            inline double operator()(double a, int* b) const
+            {
+                using namespace std;
+                return frexp(a, b);
+            }
+        };
+    }
+}
+            
+// A namespace for dummy functions to detect when the actual function we want
+// isn't available. ldexpl, ldexpf etc. might be added tby the macros below.
+//
+// AFAICT these have to be outside of the boost namespace, as if they're in
+// the boost namespace they'll always be preferable to any other function
+// (since the arguments are built in types, ADL can't be used).
+
+namespace pdalboost_hash_detect_float_functions {
+    template <class Float> pdalboost::hash_detail::not_found ldexp(Float, int);
+    template <class Float> pdalboost::hash_detail::not_found frexp(Float, int*);    
+}
+
+// Macros for generating specializations of call_ldexp and call_frexp.
+//
+// check_cpp and check_c99 check if the C++ or C99 functions are available.
+//
+// Then the call_* functions select an appropriate implementation.
+//
+// I used c99_func in a few places just to get a unique name.
+//
+// Important: when using 'using namespace' at namespace level, include as
+// little as possible in that namespace, as Visual C++ has an odd bug which
+// can cause the namespace to be imported at the global level. This seems to
+// happen mainly when there's a template in the same namesapce.
+
+#define BOOST_HASH_CALL_FLOAT_FUNC(cpp_func, c99_func, type1, type2)    \
+namespace pdalboost_hash_detect_float_functions {                           \
+    template <class Float>                                              \
+    pdalboost::hash_detail::not_found c99_func(Float, type2);               \
+}                                                                       \
+                                                                        \
+namespace pdalboost {                                                       \
+    namespace hash_detail {                                             \
+        namespace c99_func##_detect {                                   \
+            using namespace std;                                        \
+            using namespace pdalboost_hash_detect_float_functions;          \
+                                                                        \
+            struct check {                                              \
+                static type1 x;                                         \
+                static type2 y;                                         \
+                BOOST_STATIC_CONSTANT(bool, cpp =                       \
+                    sizeof(float_type(cpp_func(x,y)))                   \
+                        == sizeof(is<type1>));                          \
+                BOOST_STATIC_CONSTANT(bool, c99 =                       \
+                    sizeof(float_type(c99_func(x,y)))                   \
+                        == sizeof(is<type1>));                          \
+            };                                                          \
+        }                                                               \
+                                                                        \
+        template <bool x>                                               \
+        struct call_c99_##c99_func :                                    \
+            pdalboost::hash_detail::call_##cpp_func<double> {};             \
+                                                                        \
+        template <>                                                     \
+        struct call_c99_##c99_func<true> {                              \
+            typedef type1 float_type;                                   \
+                                                                        \
+            template <typename T>                                       \
+            inline type1 operator()(type1 a, T b)  const                \
+            {                                                           \
+                using namespace std;                                    \
+                return c99_func(a, b);                                  \
+            }                                                           \
+        };                                                              \
+                                                                        \
+        template <bool x>                                               \
+        struct call_cpp_##c99_func :                                    \
+            call_c99_##c99_func<                                        \
+                ::pdalboost::hash_detail::c99_func##_detect::check::c99     \
+            > {};                                                       \
+                                                                        \
+        template <>                                                     \
+        struct call_cpp_##c99_func<true> {                              \
+            typedef type1 float_type;                                   \
+                                                                        \
+            template <typename T>                                       \
+            inline type1 operator()(type1 a, T b)  const                \
+            {                                                           \
+                using namespace std;                                    \
+                return cpp_func(a, b);                                  \
+            }                                                           \
+        };                                                              \
+                                                                        \
+        template <>                                                     \
+        struct call_##cpp_func<type1> :                                 \
+            call_cpp_##c99_func<                                        \
+                ::pdalboost::hash_detail::c99_func##_detect::check::cpp     \
+            > {};                                                       \
+    }                                                                   \
+}
+
+#define BOOST_HASH_CALL_FLOAT_MACRO(cpp_func, c99_func, type1, type2)   \
+namespace pdalboost {                                                       \
+    namespace hash_detail {                                             \
+                                                                        \
+        template <>                                                     \
+        struct call_##cpp_func<type1> {                                 \
+            typedef type1 float_type;                                   \
+            inline type1 operator()(type1 x, type2 y) const {           \
+                return c99_func(x, y);                                  \
+            }                                                           \
+        };                                                              \
+    }                                                                   \
+}
+
+#if defined(ldexpf)
+BOOST_HASH_CALL_FLOAT_MACRO(ldexp, ldexpf, float, int)
+#else
+BOOST_HASH_CALL_FLOAT_FUNC(ldexp, ldexpf, float, int)
+#endif
+
+#if defined(ldexpl)
+BOOST_HASH_CALL_FLOAT_MACRO(ldexp, ldexpl, long double, int)
+#else
+BOOST_HASH_CALL_FLOAT_FUNC(ldexp, ldexpl, long double, int)
+#endif
+
+#if defined(frexpf)
+BOOST_HASH_CALL_FLOAT_MACRO(frexp, frexpf, float, int*)
+#else
+BOOST_HASH_CALL_FLOAT_FUNC(frexp, frexpf, float, int*)
+#endif
+
+#if defined(frexpl)
+BOOST_HASH_CALL_FLOAT_MACRO(frexp, frexpl, long double, int*)
+#else
+BOOST_HASH_CALL_FLOAT_FUNC(frexp, frexpl, long double, int*)
+#endif
+
+#undef BOOST_HASH_CALL_FLOAT_MACRO
+#undef BOOST_HASH_CALL_FLOAT_FUNC
+
+
+namespace pdalboost
+{
+    namespace hash_detail
+    {
+        template <typename Float1, typename Float2>
+        struct select_hash_type_impl {
+            typedef double type;
+        };
+
+        template <>
+        struct select_hash_type_impl<float, float> {
+            typedef float type;
+        };
+
+        template <>
+        struct select_hash_type_impl<long double, long double> {
+            typedef long double type;
+        };
+
+
+        // select_hash_type
+        //
+        // If there is support for a particular floating point type, use that
+        // otherwise use double (there's always support for double).
+             
+        template <typename Float>
+        struct select_hash_type : select_hash_type_impl<
+                BOOST_DEDUCED_TYPENAME call_ldexp<Float>::float_type,
+                BOOST_DEDUCED_TYPENAME call_frexp<Float>::float_type
+            > {};            
+    }
+}
+
+#endif // BOOST_HASH_CONFORMANT_FLOATS
+
+#endif
diff --git a/vendor/pdalboost/boost/functional/hash/detail/hash_float.hpp b/vendor/pdalboost/boost/functional/hash/detail/hash_float.hpp
new file mode 100644
index 0000000..b5df3bb
--- /dev/null
+++ b/vendor/pdalboost/boost/functional/hash/detail/hash_float.hpp
@@ -0,0 +1,271 @@
+
+// Copyright 2005-2012 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_HEADER)
+#define BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_HEADER
+
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
+#endif
+
+#include <boost/functional/hash/detail/float_functions.hpp>
+#include <boost/functional/hash/detail/limits.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/integer/static_log2.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/assert.hpp>
+#include <boost/limits.hpp>
+#include <cstring>
+
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+#if BOOST_MSVC >= 1400
+#pragma warning(disable:6294) // Ill-defined for-loop: initial condition does
+                              // not satisfy test. Loop body not executed
+#endif
+#endif
+
+// Can we use fpclassify?
+
+// STLport
+#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+#define BOOST_HASH_USE_FPCLASSIFY 0
+
+// GNU libstdc++ 3
+#elif defined(__GLIBCPP__) || defined(__GLIBCXX__)
+#  if (defined(__USE_ISOC99) || defined(_GLIBCXX_USE_C99_MATH)) && \
+      !(defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))
+#    define BOOST_HASH_USE_FPCLASSIFY 1
+#  else
+#    define BOOST_HASH_USE_FPCLASSIFY 0
+#  endif
+
+// Everything else
+#else
+#  define BOOST_HASH_USE_FPCLASSIFY 0
+#endif
+
+namespace pdalboost
+{
+    namespace hash_detail
+    {
+        inline void hash_float_combine(std::size_t& seed, std::size_t value)
+        {
+            seed ^= value + (seed<<6) + (seed>>2);
+        }
+
+        ////////////////////////////////////////////////////////////////////////
+        // Binary hash function
+        //
+        // Only used for floats with known iec559 floats, and certain values in
+        // numeric_limits
+
+        inline std::size_t hash_binary(char* ptr, std::size_t length)
+        {
+            std::size_t seed = 0;
+
+            if (length >= sizeof(std::size_t)) {
+                std::memcpy(&seed, ptr, sizeof(std::size_t));
+                length -= sizeof(std::size_t);
+                ptr += sizeof(std::size_t);
+
+                while(length >= sizeof(std::size_t)) {
+                    std::size_t buffer = 0;
+                    std::memcpy(&buffer, ptr, sizeof(std::size_t));
+                    hash_float_combine(seed, buffer);
+                    length -= sizeof(std::size_t);
+                    ptr += sizeof(std::size_t);
+                }
+            }
+
+            if (length > 0) {
+                std::size_t buffer = 0;
+                std::memcpy(&buffer, ptr, length);
+                hash_float_combine(seed, buffer);
+            }
+
+            return seed;
+        }
+
+        template <typename Float, unsigned digits, unsigned max_exponent>
+        struct enable_binary_hash
+        {
+            BOOST_STATIC_CONSTANT(bool, value =
+                std::numeric_limits<Float>::is_iec559 &&
+                std::numeric_limits<Float>::digits == digits &&
+                std::numeric_limits<Float>::radix == 2 &&
+                std::numeric_limits<Float>::max_exponent == max_exponent);
+        };
+
+        template <typename Float>
+        inline std::size_t float_hash_impl(Float v,
+            BOOST_DEDUCED_TYPENAME pdalboost::enable_if_c<
+                enable_binary_hash<Float, 24, 128>::value,
+                std::size_t>::type)
+        {
+            return hash_binary((char*) &v, 4);
+        }
+
+
+        template <typename Float>
+        inline std::size_t float_hash_impl(Float v,
+            BOOST_DEDUCED_TYPENAME pdalboost::enable_if_c<
+                enable_binary_hash<Float, 53, 1024>::value,
+                std::size_t>::type)
+        {
+            return hash_binary((char*) &v, 8);
+        }
+
+        template <typename Float>
+        inline std::size_t float_hash_impl(Float v,
+            BOOST_DEDUCED_TYPENAME pdalboost::enable_if_c<
+                enable_binary_hash<Float, 64, 16384>::value,
+                std::size_t>::type)
+        {
+            return hash_binary((char*) &v, 10);
+        }
+
+        template <typename Float>
+        inline std::size_t float_hash_impl(Float v,
+            BOOST_DEDUCED_TYPENAME pdalboost::enable_if_c<
+                enable_binary_hash<Float, 113, 16384>::value,
+                std::size_t>::type)
+        {
+            return hash_binary((char*) &v, 16);
+        }
+
+        ////////////////////////////////////////////////////////////////////////
+        // Portable hash function
+        //
+        // Used as a fallback when the binary hash function isn't supported.
+
+        template <class T>
+        inline std::size_t float_hash_impl2(T v)
+        {
+            pdalboost::hash_detail::call_frexp<T> frexp;
+            pdalboost::hash_detail::call_ldexp<T> ldexp;
+
+            int exp = 0;
+
+            v = frexp(v, &exp);
+
+            // A postive value is easier to hash, so combine the
+            // sign with the exponent and use the absolute value.
+            if(v < 0) {
+                v = -v;
+                exp += limits<T>::max_exponent -
+                    limits<T>::min_exponent;
+            }
+
+            v = ldexp(v, limits<std::size_t>::digits);
+            std::size_t seed = static_cast<std::size_t>(v);
+            v -= static_cast<T>(seed);
+
+            // ceiling(digits(T) * log2(radix(T))/ digits(size_t)) - 1;
+            std::size_t const length
+                = (limits<T>::digits *
+                        pdalboost::static_log2<limits<T>::radix>::value
+                        + limits<std::size_t>::digits - 1)
+                / limits<std::size_t>::digits;
+
+            for(std::size_t i = 0; i != length; ++i)
+            {
+                v = ldexp(v, limits<std::size_t>::digits);
+                std::size_t part = static_cast<std::size_t>(v);
+                v -= static_cast<T>(part);
+                hash_float_combine(seed, part);
+            }
+
+            hash_float_combine(seed, exp);
+
+            return seed;
+        }
+
+#if !defined(BOOST_HASH_DETAIL_TEST_WITHOUT_GENERIC)
+        template <class T>
+        inline std::size_t float_hash_impl(T v, ...)
+        {
+            typedef BOOST_DEDUCED_TYPENAME select_hash_type<T>::type type;
+            return float_hash_impl2(static_cast<type>(v));
+        }
+#endif
+    }
+}
+
+#if BOOST_HASH_USE_FPCLASSIFY
+
+#include <boost/config/no_tr1/cmath.hpp>
+
+namespace pdalboost
+{
+    namespace hash_detail
+    {
+        template <class T>
+        inline std::size_t float_hash_value(T v)
+        {
+#if defined(fpclassify)
+            switch (fpclassify(v))
+#elif BOOST_HASH_CONFORMANT_FLOATS
+            switch (std::fpclassify(v))
+#else
+            using namespace std;
+            switch (fpclassify(v))
+#endif
+            {
+            case FP_ZERO:
+                return 0;
+            case FP_INFINITE:
+                return (std::size_t)(v > 0 ? -1 : -2);
+            case FP_NAN:
+                return (std::size_t)(-3);
+            case FP_NORMAL:
+            case FP_SUBNORMAL:
+                return float_hash_impl(v, 0);
+            default:
+                BOOST_ASSERT(0);
+                return 0;
+            }
+        }
+    }
+}
+
+#else // !BOOST_HASH_USE_FPCLASSIFY
+
+namespace pdalboost
+{
+    namespace hash_detail
+    {
+        template <class T>
+        inline bool is_zero(T v)
+        {
+#if !defined(__GNUC__)
+            return v == 0;
+#else
+            // GCC's '-Wfloat-equal' will complain about comparing
+            // v to 0, but because it disables warnings for system
+            // headers it won't complain if you use std::equal_to to
+            // compare with 0. Resulting in this silliness:
+            return std::equal_to<T>()(v, 0);
+#endif
+        }
+
+        template <class T>
+        inline std::size_t float_hash_value(T v)
+        {
+            return pdalboost::hash_detail::is_zero(v) ? 0 : float_hash_impl(v, 0);
+        }
+    }
+}
+
+#endif // BOOST_HASH_USE_FPCLASSIFY
+
+#undef BOOST_HASH_USE_FPCLASSIFY
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/functional/hash/detail/limits.hpp b/vendor/pdalboost/boost/functional/hash/detail/limits.hpp
new file mode 100644
index 0000000..3db794c
--- /dev/null
+++ b/vendor/pdalboost/boost/functional/hash/detail/limits.hpp
@@ -0,0 +1,62 @@
+
+// Copyright 2005-2009 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// On some platforms std::limits gives incorrect values for long double.
+// This tries to work around them.
+
+#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_LIMITS_HEADER)
+#define BOOST_FUNCTIONAL_HASH_DETAIL_LIMITS_HEADER
+
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
+#endif
+
+#include <boost/limits.hpp>
+
+// On OpenBSD, numeric_limits is not reliable for long doubles, but
+// the macros defined in <float.h> are and support long double when STLport
+// doesn't.
+
+#if defined(__OpenBSD__) || defined(_STLP_NO_LONG_DOUBLE)
+#include <float.h>
+#endif
+
+namespace pdalboost
+{
+    namespace hash_detail
+    {
+        template <class T>
+        struct limits : std::numeric_limits<T> {};
+
+#if defined(__OpenBSD__) || defined(_STLP_NO_LONG_DOUBLE)
+        template <>
+        struct limits<long double>
+             : std::numeric_limits<long double>
+        {
+            static long double epsilon() {
+                return LDBL_EPSILON;
+            }
+
+            static long double (max)() {
+                return LDBL_MAX;
+            }
+
+            static long double (min)() {
+                return LDBL_MIN;
+            }
+
+            BOOST_STATIC_CONSTANT(int, digits = LDBL_MANT_DIG);
+            BOOST_STATIC_CONSTANT(int, max_exponent = LDBL_MAX_EXP);
+            BOOST_STATIC_CONSTANT(int, min_exponent = LDBL_MIN_EXP);
+#if defined(_STLP_NO_LONG_DOUBLE)
+            BOOST_STATIC_CONSTANT(int, radix = FLT_RADIX);
+#endif
+        };
+#endif // __OpenBSD__
+    }
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/functional/hash/extensions.hpp b/vendor/pdalboost/boost/functional/hash/extensions.hpp
new file mode 100644
index 0000000..c10cb2f
--- /dev/null
+++ b/vendor/pdalboost/boost/functional/hash/extensions.hpp
@@ -0,0 +1,318 @@
+
+// Copyright 2005-2009 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  Based on Peter Dimov's proposal
+//  http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
+//  issue 6.18. 
+
+// This implements the extensions to the standard.
+// It's undocumented, so you shouldn't use it....
+
+#if !defined(BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP)
+#define BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP
+
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
+#endif
+
+#include <boost/functional/hash/hash.hpp>
+#include <boost/detail/container_fwd.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+
+#if !defined(BOOST_NO_CXX11_HDR_ARRAY)
+#   include <array>
+#endif
+
+#if !defined(BOOST_NO_CXX11_HDR_TUPLE)
+#   include <tuple>
+#endif
+
+#if !defined(BOOST_NO_CXX11_HDR_MEMORY)
+#   include <memory>
+#endif
+
+#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+#include <boost/type_traits/is_array.hpp>
+#endif
+
+namespace pdalboost
+{
+    template <class A, class B>
+    std::size_t hash_value(std::pair<A, B> const&);
+    template <class T, class A>
+    std::size_t hash_value(std::vector<T, A> const&);
+    template <class T, class A>
+    std::size_t hash_value(std::list<T, A> const& v);
+    template <class T, class A>
+    std::size_t hash_value(std::deque<T, A> const& v);
+    template <class K, class C, class A>
+    std::size_t hash_value(std::set<K, C, A> const& v);
+    template <class K, class C, class A>
+    std::size_t hash_value(std::multiset<K, C, A> const& v);
+    template <class K, class T, class C, class A>
+    std::size_t hash_value(std::map<K, T, C, A> const& v);
+    template <class K, class T, class C, class A>
+    std::size_t hash_value(std::multimap<K, T, C, A> const& v);
+
+    template <class T>
+    std::size_t hash_value(std::complex<T> const&);
+
+    template <class A, class B>
+    std::size_t hash_value(std::pair<A, B> const& v)
+    {
+        std::size_t seed = 0;
+        pdalboost::hash_combine(seed, v.first);
+        pdalboost::hash_combine(seed, v.second);
+        return seed;
+    }
+
+    template <class T, class A>
+    std::size_t hash_value(std::vector<T, A> const& v)
+    {
+        return pdalboost::hash_range(v.begin(), v.end());
+    }
+
+    template <class T, class A>
+    std::size_t hash_value(std::list<T, A> const& v)
+    {
+        return pdalboost::hash_range(v.begin(), v.end());
+    }
+
+    template <class T, class A>
+    std::size_t hash_value(std::deque<T, A> const& v)
+    {
+        return pdalboost::hash_range(v.begin(), v.end());
+    }
+
+    template <class K, class C, class A>
+    std::size_t hash_value(std::set<K, C, A> const& v)
+    {
+        return pdalboost::hash_range(v.begin(), v.end());
+    }
+
+    template <class K, class C, class A>
+    std::size_t hash_value(std::multiset<K, C, A> const& v)
+    {
+        return pdalboost::hash_range(v.begin(), v.end());
+    }
+
+    template <class K, class T, class C, class A>
+    std::size_t hash_value(std::map<K, T, C, A> const& v)
+    {
+        return pdalboost::hash_range(v.begin(), v.end());
+    }
+
+    template <class K, class T, class C, class A>
+    std::size_t hash_value(std::multimap<K, T, C, A> const& v)
+    {
+        return pdalboost::hash_range(v.begin(), v.end());
+    }
+
+    template <class T>
+    std::size_t hash_value(std::complex<T> const& v)
+    {
+        pdalboost::hash<T> hasher;
+        std::size_t seed = hasher(v.imag());
+        seed ^= hasher(v.real()) + (seed<<6) + (seed>>2);
+        return seed;
+    }
+
+#if !defined(BOOST_NO_CXX11_HDR_ARRAY)
+    template <class T, std::size_t N>
+    std::size_t hash_value(std::array<T, N> const& v)
+    {
+        return pdalboost::hash_range(v.begin(), v.end());
+    }
+#endif
+
+#if !defined(BOOST_NO_CXX11_HDR_TUPLE)
+    namespace hash_detail {
+        template <std::size_t I, typename T>
+        inline typename pdalboost::enable_if_c<(I == std::tuple_size<T>::value),
+                void>::type
+            hash_combine_tuple(std::size_t&, T const&)
+        {
+        }
+
+        template <std::size_t I, typename T>
+        inline typename pdalboost::enable_if_c<(I < std::tuple_size<T>::value),
+                void>::type
+            hash_combine_tuple(std::size_t& seed, T const& v)
+        {
+            pdalboost::hash_combine(seed, std::get<I>(v));
+            pdalboost::hash_detail::hash_combine_tuple<I + 1>(seed, v);
+        }
+
+        template <typename T>
+        inline std::size_t hash_tuple(T const& v)
+        {
+            std::size_t seed = 0;
+            pdalboost::hash_detail::hash_combine_tuple<0>(seed, v);
+            return seed;
+        }
+    }
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+    template <typename... T>
+    inline std::size_t hash_value(std::tuple<T...> const& v)
+    {
+        return pdalboost::hash_detail::hash_tuple(v);
+    }
+#else
+
+    inline std::size_t hash_value(std::tuple<> const& v)
+    {
+        return pdalboost::hash_detail::hash_tuple(v);
+    }
+
+#   define BOOST_HASH_TUPLE_F(z, n, _)                                      \
+    template<                                                               \
+        BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)                            \
+    >                                                                       \
+    inline std::size_t hash_value(std::tuple<                               \
+        BOOST_PP_ENUM_PARAMS_Z(z, n, A)                                     \
+    > const& v)                                                             \
+    {                                                                       \
+        return pdalboost::hash_detail::hash_tuple(v);                           \
+    }
+
+    BOOST_PP_REPEAT_FROM_TO(1, 11, BOOST_HASH_TUPLE_F, _)
+#   undef BOOST_HASH_TUPLE_F
+#endif
+
+#endif
+
+#if !defined(BOOST_NO_CXX11_SMART_PTR)
+    template <typename T>
+    inline std::size_t hash_value(std::shared_ptr<T> const& x) {
+        return pdalboost::hash_value(x.get());
+    }
+
+    template <typename T, typename Deleter>
+    inline std::size_t hash_value(std::unique_ptr<T, Deleter> const& x) {
+        return pdalboost::hash_value(x.get());
+    }
+#endif
+
+    //
+    // call_hash_impl
+    //
+
+    // On compilers without function template ordering, this deals with arrays.
+
+#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+    namespace hash_detail
+    {
+        template <bool IsArray>
+        struct call_hash_impl
+        {
+            template <class T>
+            struct inner
+            {
+                static std::size_t call(T const& v)
+                {
+                    using namespace pdalboost;
+                    return hash_value(v);
+                }
+            };
+        };
+
+        template <>
+        struct call_hash_impl<true>
+        {
+            template <class Array>
+            struct inner
+            {
+                static std::size_t call(Array const& v)
+                {
+                    const int size = sizeof(v) / sizeof(*v);
+                    return pdalboost::hash_range(v, v + size);
+                }
+            };
+        };
+
+        template <class T>
+        struct call_hash
+            : public call_hash_impl<pdalboost::is_array<T>::value>
+                ::BOOST_NESTED_TEMPLATE inner<T>
+        {
+        };
+    }
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+    //
+    // pdalboost::hash
+    //
+
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+    template <class T> struct hash
+        : std::unary_function<T, std::size_t>
+    {
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+        std::size_t operator()(T const& val) const
+        {
+            return hash_value(val);
+        }
+#else
+        std::size_t operator()(T const& val) const
+        {
+            return hash_detail::call_hash<T>::call(val);
+        }
+#endif
+    };
+
+#if BOOST_WORKAROUND(__DMC__, <= 0x848)
+    template <class T, unsigned int n> struct hash<T[n]>
+        : std::unary_function<T[n], std::size_t>
+    {
+        std::size_t operator()(const T* val) const
+        {
+            return pdalboost::hash_range(val, val+n);
+        }
+    };
+#endif
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+    // On compilers without partial specialization, pdalboost::hash<T>
+    // has already been declared to deal with pointers, so just
+    // need to supply the non-pointer version of hash_impl.
+
+    namespace hash_detail
+    {
+        template <bool IsPointer>
+        struct hash_impl;
+
+        template <>
+        struct hash_impl<false>
+        {
+            template <class T>
+            struct inner
+                : std::unary_function<T, std::size_t>
+            {
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+                std::size_t operator()(T const& val) const
+                {
+                    return hash_value(val);
+                }
+#else
+                std::size_t operator()(T const& val) const
+                {
+                    return hash_detail::call_hash<T>::call(val);
+                }
+#endif
+            };
+        };
+    }
+#endif  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/functional/hash/hash.hpp b/vendor/pdalboost/boost/functional/hash/hash.hpp
new file mode 100644
index 0000000..ad42d2c
--- /dev/null
+++ b/vendor/pdalboost/boost/functional/hash/hash.hpp
@@ -0,0 +1,559 @@
+
+// Copyright 2005-2014 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  Based on Peter Dimov's proposal
+//  http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
+//  issue 6.18. 
+//
+//  This also contains public domain code from MurmurHash. From the
+//  MurmurHash header:
+
+// MurmurHash3 was written by Austin Appleby, and is placed in the public
+// domain. The author hereby disclaims copyright to this source code.
+
+#if !defined(BOOST_FUNCTIONAL_HASH_HASH_HPP)
+#define BOOST_FUNCTIONAL_HASH_HASH_HPP
+
+#include <boost/functional/hash/hash_fwd.hpp>
+#include <functional>
+#include <boost/functional/hash/detail/hash_float.hpp>
+#include <string>
+#include <boost/limits.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/cstdint.hpp>
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#include <boost/type_traits/is_pointer.hpp>
+#endif
+
+#if !defined(BOOST_NO_CXX11_HDR_TYPEINDEX)
+#include <typeindex>
+#endif
+
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+
+#if BOOST_MSVC >= 1400
+#pragma warning(disable:6295) // Ill-defined for-loop : 'unsigned int' values
+                              // are always of range '0' to '4294967295'.
+                              // Loop executes infinitely.
+#endif
+
+#endif
+
+#if BOOST_WORKAROUND(__GNUC__, < 3) \
+    && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+#define BOOST_HASH_CHAR_TRAITS string_char_traits
+#else
+#define BOOST_HASH_CHAR_TRAITS char_traits
+#endif
+
+#if defined(_MSC_VER)
+#   define BOOST_FUNCTIONAL_HASH_ROTL32(x, r) _rotl(x,r)
+#else
+#   define BOOST_FUNCTIONAL_HASH_ROTL32(x, r) (x << r) | (x >> (32 - r))
+#endif
+
+namespace pdalboost
+{
+    namespace hash_detail
+    {
+        struct enable_hash_value { typedef std::size_t type; };
+
+        template <typename T> struct basic_numbers {};
+        template <typename T> struct long_numbers;
+        template <typename T> struct ulong_numbers;
+        template <typename T> struct float_numbers {};
+
+        template <> struct basic_numbers<bool> :
+            pdalboost::hash_detail::enable_hash_value {};
+        template <> struct basic_numbers<char> :
+            pdalboost::hash_detail::enable_hash_value {};
+        template <> struct basic_numbers<unsigned char> :
+            pdalboost::hash_detail::enable_hash_value {};
+        template <> struct basic_numbers<signed char> :
+            pdalboost::hash_detail::enable_hash_value {};
+        template <> struct basic_numbers<short> :
+            pdalboost::hash_detail::enable_hash_value {};
+        template <> struct basic_numbers<unsigned short> :
+            pdalboost::hash_detail::enable_hash_value {};
+        template <> struct basic_numbers<int> :
+            pdalboost::hash_detail::enable_hash_value {};
+        template <> struct basic_numbers<unsigned int> :
+            pdalboost::hash_detail::enable_hash_value {};
+        template <> struct basic_numbers<long> :
+            pdalboost::hash_detail::enable_hash_value {};
+        template <> struct basic_numbers<unsigned long> :
+            pdalboost::hash_detail::enable_hash_value {};
+
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+        template <> struct basic_numbers<wchar_t> :
+            pdalboost::hash_detail::enable_hash_value {};
+#endif
+
+        // long_numbers is defined like this to allow for separate
+        // specialization for long_long and int128_type, in case
+        // they conflict.
+        template <typename T> struct long_numbers2 {};
+        template <typename T> struct ulong_numbers2 {};
+        template <typename T> struct long_numbers : long_numbers2<T> {};
+        template <typename T> struct ulong_numbers : ulong_numbers2<T> {};
+
+#if !defined(BOOST_NO_LONG_LONG)
+        template <> struct long_numbers<pdalboost::long_long_type> :
+            pdalboost::hash_detail::enable_hash_value {};
+        template <> struct ulong_numbers<pdalboost::ulong_long_type> :
+            pdalboost::hash_detail::enable_hash_value {};
+#endif
+
+#if defined(BOOST_HAS_INT128)
+        template <> struct long_numbers2<pdalboost::int128_type> :
+            pdalboost::hash_detail::enable_hash_value {};
+        template <> struct ulong_numbers2<pdalboost::uint128_type> :
+            pdalboost::hash_detail::enable_hash_value {};
+#endif
+
+        template <> struct float_numbers<float> :
+            pdalboost::hash_detail::enable_hash_value {};
+        template <> struct float_numbers<double> :
+            pdalboost::hash_detail::enable_hash_value {};
+        template <> struct float_numbers<long double> :
+            pdalboost::hash_detail::enable_hash_value {};
+    }
+
+    template <typename T>
+    typename pdalboost::hash_detail::basic_numbers<T>::type hash_value(T);
+    template <typename T>
+    typename pdalboost::hash_detail::long_numbers<T>::type hash_value(T);
+    template <typename T>
+    typename pdalboost::hash_detail::ulong_numbers<T>::type hash_value(T);
+
+    template <typename T>
+    typename pdalboost::enable_if<pdalboost::is_enum<T>, std::size_t>::type
+        hash_value(T);
+
+#if !BOOST_WORKAROUND(__DMC__, <= 0x848)
+    template <class T> std::size_t hash_value(T* const&);
+#else
+    template <class T> std::size_t hash_value(T*);
+#endif
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+    template< class T, unsigned N >
+    std::size_t hash_value(const T (&x)[N]);
+
+    template< class T, unsigned N >
+    std::size_t hash_value(T (&x)[N]);
+#endif
+
+    template <class Ch, class A>
+    std::size_t hash_value(
+        std::basic_string<Ch, std::BOOST_HASH_CHAR_TRAITS<Ch>, A> const&);
+
+    template <typename T>
+    typename pdalboost::hash_detail::float_numbers<T>::type hash_value(T);
+
+#if !defined(BOOST_NO_CXX11_HDR_TYPEINDEX)
+    std::size_t hash_value(std::type_index);
+#endif
+
+    // Implementation
+
+    namespace hash_detail
+    {
+        template <class T>
+        inline std::size_t hash_value_signed(T val)
+        {
+             const int size_t_bits = std::numeric_limits<std::size_t>::digits;
+             // ceiling(std::numeric_limits<T>::digits / size_t_bits) - 1
+             const int length = (std::numeric_limits<T>::digits - 1)
+                 / size_t_bits;
+
+             std::size_t seed = 0;
+             T positive = val < 0 ? -1 - val : val;
+
+             // Hopefully, this loop can be unrolled.
+             for(unsigned int i = length * size_t_bits; i > 0; i -= size_t_bits)
+             {
+                 seed ^= (std::size_t) (positive >> i) + (seed<<6) + (seed>>2);
+             }
+             seed ^= (std::size_t) val + (seed<<6) + (seed>>2);
+
+             return seed;
+        }
+
+        template <class T>
+        inline std::size_t hash_value_unsigned(T val)
+        {
+             const int size_t_bits = std::numeric_limits<std::size_t>::digits;
+             // ceiling(std::numeric_limits<T>::digits / size_t_bits) - 1
+             const int length = (std::numeric_limits<T>::digits - 1)
+                 / size_t_bits;
+
+             std::size_t seed = 0;
+
+             // Hopefully, this loop can be unrolled.
+             for(unsigned int i = length * size_t_bits; i > 0; i -= size_t_bits)
+             {
+                 seed ^= (std::size_t) (val >> i) + (seed<<6) + (seed>>2);
+             }
+             seed ^= (std::size_t) val + (seed<<6) + (seed>>2);
+
+             return seed;
+        }
+
+        template <typename SizeT>
+        inline void hash_combine_impl(SizeT& seed, SizeT value)
+        {
+            seed ^= value + 0x9e3779b9 + (seed<<6) + (seed>>2);
+        }
+
+        template <typename SizeT>
+        inline void hash_combine_impl(pdalboost::uint32_t& h1,
+                pdalboost::uint32_t k1)
+        {
+            const uint32_t c1 = 0xcc9e2d51;
+            const uint32_t c2 = 0x1b873593;
+
+            k1 *= c1;
+            k1 = BOOST_FUNCTIONAL_HASH_ROTL32(k1,15);
+            k1 *= c2;
+
+            h1 ^= k1;
+            h1 = BOOST_FUNCTIONAL_HASH_ROTL32(h1,13);
+            h1 = h1*5+0xe6546b64;
+        }
+
+
+// Don't define 64-bit hash combine on platforms with 64 bit integers,
+// and also not for 32-bit gcc as it warns about the 64-bit constant.
+#if !defined(BOOST_NO_INT64_T) && \
+        !(defined(__GNUC__) && ULONG_MAX == 0xffffffff)
+
+        template <typename SizeT>
+        inline void hash_combine_impl(pdalboost::uint64_t& h,
+                pdalboost::uint64_t k)
+        {
+            const uint64_t m = UINT64_C(0xc6a4a7935bd1e995);
+            const int r = 47;
+
+            k *= m;
+            k ^= k >> r;
+            k *= m;
+
+            h ^= k;
+            h *= m;
+        }
+
+#endif // BOOST_NO_INT64_T
+    }
+
+    template <typename T>
+    typename pdalboost::hash_detail::basic_numbers<T>::type hash_value(T v)
+    {
+        return static_cast<std::size_t>(v);
+    }
+
+    template <typename T>
+    typename pdalboost::hash_detail::long_numbers<T>::type hash_value(T v)
+    {
+        return hash_detail::hash_value_signed(v);
+    }
+
+    template <typename T>
+    typename pdalboost::hash_detail::ulong_numbers<T>::type hash_value(T v)
+    {
+        return hash_detail::hash_value_unsigned(v);
+    }
+
+    template <typename T>
+    typename pdalboost::enable_if<pdalboost::is_enum<T>, std::size_t>::type
+        hash_value(T v)
+    {
+        return static_cast<std::size_t>(v);
+    }
+
+    // Implementation by Alberto Barbati and Dave Harris.
+#if !BOOST_WORKAROUND(__DMC__, <= 0x848)
+    template <class T> std::size_t hash_value(T* const& v)
+#else
+    template <class T> std::size_t hash_value(T* v)
+#endif
+    {
+#if defined(__VMS) && __INITIAL_POINTER_SIZE == 64
+    // for some reason ptrdiff_t on OpenVMS compiler with
+    // 64 bit is not 64 bit !!!
+        std::size_t x = static_cast<std::size_t>(
+           reinterpret_cast<long long int>(v));
+#else
+        std::size_t x = static_cast<std::size_t>(
+           reinterpret_cast<std::ptrdiff_t>(v));
+#endif
+        return x + (x >> 3);
+    }
+
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+#if BOOST_MSVC <= 1400
+#pragma warning(disable:4267) // 'argument' : conversion from 'size_t' to
+                              // 'unsigned int', possible loss of data
+                              // A misguided attempt to detect 64-bit
+                              // incompatability.
+#endif
+#endif
+
+    template <class T>
+    inline void hash_combine(std::size_t& seed, T const& v)
+    {
+        pdalboost::hash<T> hasher;
+        return pdalboost::hash_detail::hash_combine_impl(seed, hasher(v));
+    }
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+
+    template <class It>
+    inline std::size_t hash_range(It first, It last)
+    {
+        std::size_t seed = 0;
+
+        for(; first != last; ++first)
+        {
+            hash_combine(seed, *first);
+        }
+
+        return seed;
+    }
+
+    template <class It>
+    inline void hash_range(std::size_t& seed, It first, It last)
+    {
+        for(; first != last; ++first)
+        {
+            hash_combine(seed, *first);
+        }
+    }
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+    template <class T>
+    inline std::size_t hash_range(T* first, T* last)
+    {
+        std::size_t seed = 0;
+
+        for(; first != last; ++first)
+        {
+            pdalboost::hash<T> hasher;
+            seed ^= hasher(*first) + 0x9e3779b9 + (seed<<6) + (seed>>2);
+        }
+
+        return seed;
+    }
+
+    template <class T>
+    inline void hash_range(std::size_t& seed, T* first, T* last)
+    {
+        for(; first != last; ++first)
+        {
+            pdalboost::hash<T> hasher;
+            seed ^= hasher(*first) + 0x9e3779b9 + (seed<<6) + (seed>>2);
+        }
+    }
+#endif
+
+#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+    template< class T, unsigned N >
+    inline std::size_t hash_value(const T (&x)[N])
+    {
+        return hash_range(x, x + N);
+    }
+
+    template< class T, unsigned N >
+    inline std::size_t hash_value(T (&x)[N])
+    {
+        return hash_range(x, x + N);
+    }
+#endif
+
+    template <class Ch, class A>
+    inline std::size_t hash_value(
+        std::basic_string<Ch, std::BOOST_HASH_CHAR_TRAITS<Ch>, A> const& v)
+    {
+        return hash_range(v.begin(), v.end());
+    }
+
+    template <typename T>
+    typename pdalboost::hash_detail::float_numbers<T>::type hash_value(T v)
+    {
+        return pdalboost::hash_detail::float_hash_value(v);
+    }
+
+#if !defined(BOOST_NO_CXX11_HDR_TYPEINDEX)
+    inline std::size_t hash_value(std::type_index v)
+    {
+        return v.hash_code();
+    }
+#endif
+
+    //
+    // pdalboost::hash
+    //
+    
+    // Define the specializations required by the standard. The general purpose
+    // pdalboost::hash is defined later in extensions.hpp if
+    // BOOST_HASH_NO_EXTENSIONS is not defined.
+    
+    // BOOST_HASH_SPECIALIZE - define a specialization for a type which is
+    // passed by copy.
+    //
+    // BOOST_HASH_SPECIALIZE_REF - define a specialization for a type which is
+    // passed by const reference.
+    //
+    // These are undefined later.
+
+#define BOOST_HASH_SPECIALIZE(type) \
+    template <> struct hash<type> \
+         : public std::unary_function<type, std::size_t> \
+    { \
+        std::size_t operator()(type v) const \
+        { \
+            return pdalboost::hash_value(v); \
+        } \
+    };
+
+#define BOOST_HASH_SPECIALIZE_REF(type) \
+    template <> struct hash<type> \
+         : public std::unary_function<type, std::size_t> \
+    { \
+        std::size_t operator()(type const& v) const \
+        { \
+            return pdalboost::hash_value(v); \
+        } \
+    };
+
+    BOOST_HASH_SPECIALIZE(bool)
+    BOOST_HASH_SPECIALIZE(char)
+    BOOST_HASH_SPECIALIZE(signed char)
+    BOOST_HASH_SPECIALIZE(unsigned char)
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+    BOOST_HASH_SPECIALIZE(wchar_t)
+#endif
+    BOOST_HASH_SPECIALIZE(short)
+    BOOST_HASH_SPECIALIZE(unsigned short)
+    BOOST_HASH_SPECIALIZE(int)
+    BOOST_HASH_SPECIALIZE(unsigned int)
+    BOOST_HASH_SPECIALIZE(long)
+    BOOST_HASH_SPECIALIZE(unsigned long)
+
+    BOOST_HASH_SPECIALIZE(float)
+    BOOST_HASH_SPECIALIZE(double)
+    BOOST_HASH_SPECIALIZE(long double)
+
+    BOOST_HASH_SPECIALIZE_REF(std::string)
+#if !defined(BOOST_NO_STD_WSTRING)
+    BOOST_HASH_SPECIALIZE_REF(std::wstring)
+#endif
+
+#if !defined(BOOST_NO_LONG_LONG)
+    BOOST_HASH_SPECIALIZE(pdalboost::long_long_type)
+    BOOST_HASH_SPECIALIZE(pdalboost::ulong_long_type)
+#endif
+
+#if defined(BOOST_HAS_INT128)
+    BOOST_HASH_SPECIALIZE(pdalboost::int128_type)
+    BOOST_HASH_SPECIALIZE(pdalboost::uint128_type)
+#endif
+
+#if !defined(BOOST_NO_CXX11_HDR_TYPEINDEX)
+    BOOST_HASH_SPECIALIZE(std::type_index)
+#endif
+
+#undef BOOST_HASH_SPECIALIZE
+#undef BOOST_HASH_SPECIALIZE_REF
+
+// Specializing pdalboost::hash for pointers.
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+    template <class T>
+    struct hash<T*>
+        : public std::unary_function<T*, std::size_t>
+    {
+        std::size_t operator()(T* v) const
+        {
+#if !BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590)
+            return pdalboost::hash_value(v);
+#else
+            std::size_t x = static_cast<std::size_t>(
+                reinterpret_cast<std::ptrdiff_t>(v));
+
+            return x + (x >> 3);
+#endif
+        }
+    };
+
+#else
+
+    // For compilers without partial specialization, we define a
+    // pdalboost::hash for all remaining types. But hash_impl is only defined
+    // for pointers in 'extensions.hpp' - so when BOOST_HASH_NO_EXTENSIONS
+    // is defined there will still be a compile error for types not supported
+    // in the standard.
+
+    namespace hash_detail
+    {
+        template <bool IsPointer>
+        struct hash_impl;
+
+        template <>
+        struct hash_impl<true>
+        {
+            template <class T>
+            struct inner
+                : public std::unary_function<T, std::size_t>
+            {
+                std::size_t operator()(T val) const
+                {
+#if !BOOST_WORKAROUND(__SUNPRO_CC, <= 590)
+                    return pdalboost::hash_value(val);
+#else
+                    std::size_t x = static_cast<std::size_t>(
+                        reinterpret_cast<std::ptrdiff_t>(val));
+
+                    return x + (x >> 3);
+#endif
+                }
+            };
+        };
+    }
+
+    template <class T> struct hash
+        : public pdalboost::hash_detail::hash_impl<pdalboost::is_pointer<T>::value>
+            ::BOOST_NESTED_TEMPLATE inner<T>
+    {
+    };
+
+#endif
+}
+
+#undef BOOST_HASH_CHAR_TRAITS
+#undef BOOST_FUNCTIONAL_HASH_ROTL32
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_FUNCTIONAL_HASH_HASH_HPP
+
+// Include this outside of the include guards in case the file is included
+// twice - once with BOOST_HASH_NO_EXTENSIONS defined, and then with it
+// undefined.
+
+#if !defined(BOOST_HASH_NO_EXTENSIONS) \
+    && !defined(BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP)
+#include <boost/functional/hash/extensions.hpp>
+#endif
diff --git a/vendor/pdalboost/boost/functional/hash/hash_fwd.hpp b/vendor/pdalboost/boost/functional/hash/hash_fwd.hpp
new file mode 100644
index 0000000..648c9a7
--- /dev/null
+++ b/vendor/pdalboost/boost/functional/hash/hash_fwd.hpp
@@ -0,0 +1,36 @@
+
+// Copyright 2005-2009 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  Based on Peter Dimov's proposal
+//  http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1756.pdf
+//  issue 6.18. 
+
+#if !defined(BOOST_FUNCTIONAL_HASH_FWD_HPP)
+#define BOOST_FUNCTIONAL_HASH_FWD_HPP
+
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
+#endif
+
+#include <cstddef>
+#include <boost/detail/workaround.hpp>
+
+namespace pdalboost
+{
+    template <class T> struct hash;
+
+    template <class T> void hash_combine(std::size_t& seed, T const& v);
+
+    template <class It> std::size_t hash_range(It, It);
+    template <class It> void hash_range(std::size_t&, It, It);
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+    template <class T> inline std::size_t hash_range(T*, T*);
+    template <class T> inline void hash_range(std::size_t&, T*, T*);
+#endif
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/functional/hash_fwd.hpp b/vendor/pdalboost/boost/functional/hash_fwd.hpp
new file mode 100644
index 0000000..eea9073
--- /dev/null
+++ b/vendor/pdalboost/boost/functional/hash_fwd.hpp
@@ -0,0 +1,11 @@
+
+// Copyright 2005-2009 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/config.hpp>
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#pragma once
+#endif
+
+#include <boost/functional/hash/hash_fwd.hpp>
diff --git a/vendor/pdalboost/boost/get_pointer.hpp b/vendor/pdalboost/boost/get_pointer.hpp
new file mode 100644
index 0000000..57e48a6
--- /dev/null
+++ b/vendor/pdalboost/boost/get_pointer.hpp
@@ -0,0 +1,76 @@
+// Copyright Peter Dimov and David Abrahams 2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+#ifndef GET_POINTER_DWA20021219_HPP
+#define GET_POINTER_DWA20021219_HPP
+
+#include <boost/config.hpp>
+
+// In order to avoid circular dependencies with Boost.TR1
+// we make sure that our include of <memory> doesn't try to
+// pull in the TR1 headers: that's why we use this header 
+// rather than including <memory> directly:
+#include <boost/config/no_tr1/memory.hpp>  // std::auto_ptr
+
+namespace pdalboost { 
+
+// get_pointer(p) extracts a ->* capable pointer from p
+
+template<class T> T * get_pointer(T * p)
+{
+    return p;
+}
+
+// get_pointer(shared_ptr<T> const & p) has been moved to shared_ptr.hpp
+
+#if !defined( BOOST_NO_AUTO_PTR )
+
+#if defined( __GNUC__ ) && (defined( __GXX_EXPERIMENTAL_CXX0X__ ) || (__cplusplus >= 201103L))
+#if defined( BOOST_GCC )
+#if BOOST_GCC >= 40600
+#define BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS
+#endif // BOOST_GCC >= 40600
+#elif defined( __clang__ ) && defined( __has_warning )
+#if __has_warning("-Wdeprecated-declarations")
+#define BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS
+#endif // __has_warning("-Wdeprecated-declarations")
+#endif
+#endif // defined( __GNUC__ ) && (defined( __GXX_EXPERIMENTAL_CXX0X__ ) || (__cplusplus >= 201103L))
+
+#if defined( BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS )
+// Disable libstdc++ warnings about std::auto_ptr being deprecated in C++11 mode
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#define BOOST_CORE_DETAIL_DISABLED_DEPRECATED_WARNINGS
+#endif
+
+template<class T> T * get_pointer(std::auto_ptr<T> const& p)
+{
+    return p.get();
+}
+
+#if defined( BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS )
+#pragma GCC diagnostic pop
+#undef BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS
+#endif
+
+#endif // !defined( BOOST_NO_AUTO_PTR )
+
+#if !defined( BOOST_NO_CXX11_SMART_PTR )
+
+template<class T> T * get_pointer( std::unique_ptr<T> const& p )
+{
+    return p.get();
+}
+
+template<class T> T * get_pointer( std::shared_ptr<T> const& p )
+{
+    return p.get();
+}
+
+#endif
+
+} // namespace pdalboost
+
+#endif // GET_POINTER_DWA20021219_HPP
diff --git a/vendor/pdalboost/boost/indirect_reference.hpp b/vendor/pdalboost/boost/indirect_reference.hpp
new file mode 100644
index 0000000..30e5b47
--- /dev/null
+++ b/vendor/pdalboost/boost/indirect_reference.hpp
@@ -0,0 +1,43 @@
+#ifndef INDIRECT_REFERENCE_DWA200415_HPP
+# define INDIRECT_REFERENCE_DWA200415_HPP
+
+//
+// Copyright David Abrahams 2004. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// typename indirect_reference<P>::type provides the type of *p.
+//
+// http://www.boost.org/libs/iterator/doc/pointee.html
+//
+
+# include <boost/detail/is_incrementable.hpp>
+# include <boost/iterator/iterator_traits.hpp>
+# include <boost/type_traits/remove_cv.hpp>
+# include <boost/mpl/eval_if.hpp>
+# include <boost/pointee.hpp>
+
+namespace pdalboost {
+
+namespace detail
+{
+  template <class P>
+  struct smart_ptr_reference
+  {
+      typedef typename pdalboost::pointee<P>::type& type;
+  };
+}
+
+template <class P>
+struct indirect_reference
+  : mpl::eval_if<
+        detail::is_incrementable<P>
+      , iterator_reference<P>
+      , detail::smart_ptr_reference<P>
+    >
+{
+};
+
+} // namespace pdalboost
+
+#endif // INDIRECT_REFERENCE_DWA200415_HPP
diff --git a/vendor/pdalboost/boost/integer.hpp b/vendor/pdalboost/boost/integer.hpp
new file mode 100644
index 0000000..a88007d
--- /dev/null
+++ b/vendor/pdalboost/boost/integer.hpp
@@ -0,0 +1,262 @@
+//  boost integer.hpp header file  -------------------------------------------//
+
+//  Copyright Beman Dawes and Daryle Walker 1999.  Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/integer for documentation.
+
+//  Revision History
+//   22 Sep 01  Added value-based integer templates. (Daryle Walker)
+//   01 Apr 01  Modified to use new <boost/limits.hpp> header. (John Maddock)
+//   30 Jul 00  Add typename syntax fix (Jens Maurer)
+//   28 Aug 99  Initial version
+
+#ifndef BOOST_INTEGER_HPP
+#define BOOST_INTEGER_HPP
+
+#include <boost/integer_fwd.hpp>  // self include
+
+#include <boost/integer_traits.hpp>  // for pdalboost::::pdalboost::integer_traits
+#include <boost/limits.hpp>          // for ::std::numeric_limits
+#include <boost/cstdint.hpp>         // for pdalboost::int64_t and BOOST_NO_INTEGRAL_INT64_T
+#include <boost/static_assert.hpp>
+
+//
+// We simply cannot include this header on gcc without getting copious warnings of the kind:
+//
+// boost/integer.hpp:77:30: warning: use of C99 long long integer constant
+//
+// And yet there is no other reasonable implementation, so we declare this a system header
+// to suppress these warnings.
+//
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+#pragma GCC system_header
+#endif
+
+namespace pdalboost
+{
+
+  //  Helper templates  ------------------------------------------------------//
+
+  //  fast integers from least integers
+  //  int_fast_t<> works correctly for unsigned too, in spite of the name.
+  template< typename LeastInt >
+  struct int_fast_t
+  {
+     typedef LeastInt fast;
+     typedef fast     type;
+  }; // imps may specialize
+
+  namespace detail{
+
+  //  convert category to type
+  template< int Category > struct int_least_helper {}; // default is empty
+  template< int Category > struct uint_least_helper {}; // default is empty
+
+  //  specializatons: 1=long, 2=int, 3=short, 4=signed char,
+  //     6=unsigned long, 7=unsigned int, 8=unsigned short, 9=unsigned char
+  //  no specializations for 0 and 5: requests for a type > long are in error
+#ifdef BOOST_HAS_LONG_LONG
+  template<> struct int_least_helper<1> { typedef pdalboost::long_long_type least; };
+#elif defined(BOOST_HAS_MS_INT64)
+  template<> struct int_least_helper<1> { typedef __int64 least; };
+#endif
+  template<> struct int_least_helper<2> { typedef long least; };
+  template<> struct int_least_helper<3> { typedef int least; };
+  template<> struct int_least_helper<4> { typedef short least; };
+  template<> struct int_least_helper<5> { typedef signed char least; };
+#ifdef BOOST_HAS_LONG_LONG
+  template<> struct uint_least_helper<1> { typedef pdalboost::ulong_long_type least; };
+#elif defined(BOOST_HAS_MS_INT64)
+  template<> struct uint_least_helper<1> { typedef unsigned __int64 least; };
+#endif
+  template<> struct uint_least_helper<2> { typedef unsigned long least; };
+  template<> struct uint_least_helper<3> { typedef unsigned int least; };
+  template<> struct uint_least_helper<4> { typedef unsigned short least; };
+  template<> struct uint_least_helper<5> { typedef unsigned char least; };
+
+  template <int Bits>
+  struct exact_signed_base_helper{};
+  template <int Bits>
+  struct exact_unsigned_base_helper{};
+
+  template <> struct exact_signed_base_helper<sizeof(signed char)* CHAR_BIT> { typedef signed char exact; };
+  template <> struct exact_unsigned_base_helper<sizeof(unsigned char)* CHAR_BIT> { typedef unsigned char exact; };
+#if USHRT_MAX != UCHAR_MAX
+  template <> struct exact_signed_base_helper<sizeof(short)* CHAR_BIT> { typedef short exact; };
+  template <> struct exact_unsigned_base_helper<sizeof(unsigned short)* CHAR_BIT> { typedef unsigned short exact; };
+#endif
+#if UINT_MAX != USHRT_MAX
+  template <> struct exact_signed_base_helper<sizeof(int)* CHAR_BIT> { typedef int exact; };
+  template <> struct exact_unsigned_base_helper<sizeof(unsigned int)* CHAR_BIT> { typedef unsigned int exact; };
+#endif
+#if ULONG_MAX != UINT_MAX && ( !defined __TI_COMPILER_VERSION__ || \
+    ( __TI_COMPILER_VERSION__ >= 7000000 && !defined __TI_40BIT_LONG__ ) )
+  template <> struct exact_signed_base_helper<sizeof(long)* CHAR_BIT> { typedef long exact; };
+  template <> struct exact_unsigned_base_helper<sizeof(unsigned long)* CHAR_BIT> { typedef unsigned long exact; };
+#endif
+#if defined(BOOST_HAS_LONG_LONG) &&\
+   ((defined(ULLONG_MAX) && (ULLONG_MAX != ULONG_MAX)) ||\
+    (defined(ULONG_LONG_MAX) && (ULONG_LONG_MAX != ULONG_MAX)) ||\
+    (defined(ULONGLONG_MAX) && (ULONGLONG_MAX != ULONG_MAX)) ||\
+    (defined(_ULLONG_MAX) && (_ULLONG_MAX != ULONG_MAX)))
+  template <> struct exact_signed_base_helper<sizeof(pdalboost::long_long_type)* CHAR_BIT> { typedef pdalboost::long_long_type exact; };
+  template <> struct exact_unsigned_base_helper<sizeof(pdalboost::ulong_long_type)* CHAR_BIT> { typedef pdalboost::ulong_long_type exact; };
+#endif
+
+
+  } // namespace detail
+
+  //  integer templates specifying number of bits  ---------------------------//
+
+  //  signed
+  template< int Bits >   // bits (including sign) required
+  struct int_t : public pdalboost::detail::exact_signed_base_helper<Bits>
+  {
+      BOOST_STATIC_ASSERT_MSG(Bits <= (int)(sizeof(pdalboost::intmax_t) * CHAR_BIT),
+         "No suitable signed integer type with the requested number of bits is available.");
+      typedef typename pdalboost::detail::int_least_helper
+        <
+#ifdef BOOST_HAS_LONG_LONG
+          (Bits <= (int)(sizeof(pdalboost::long_long_type) * CHAR_BIT)) +
+#else
+           1 +
+#endif
+          (Bits-1 <= ::std::numeric_limits<long>::digits) +
+          (Bits-1 <= ::std::numeric_limits<int>::digits) +
+          (Bits-1 <= ::std::numeric_limits<short>::digits) +
+          (Bits-1 <= ::std::numeric_limits<signed char>::digits)
+        >::least  least;
+      typedef typename int_fast_t<least>::type  fast;
+  };
+
+  //  unsigned
+  template< int Bits >   // bits required
+  struct uint_t : public pdalboost::detail::exact_unsigned_base_helper<Bits>
+  {
+     BOOST_STATIC_ASSERT_MSG(Bits <= (int)(sizeof(pdalboost::uintmax_t) * CHAR_BIT),
+         "No suitable unsigned integer type with the requested number of bits is available.");
+#if (defined(__BORLANDC__) || defined(__CODEGEAR__)) && defined(BOOST_NO_INTEGRAL_INT64_T)
+     // It's really not clear why this workaround should be needed... shrug I guess!  JM
+     BOOST_STATIC_CONSTANT(int, s =
+           6 +
+          (Bits <= ::std::numeric_limits<unsigned long>::digits) +
+          (Bits <= ::std::numeric_limits<unsigned int>::digits) +
+          (Bits <= ::std::numeric_limits<unsigned short>::digits) +
+          (Bits <= ::std::numeric_limits<unsigned char>::digits));
+     typedef typename detail::int_least_helper< ::pdalboost::uint_t<Bits>::s>::least least;
+#else
+      typedef typename pdalboost::detail::uint_least_helper
+        <
+#ifdef BOOST_HAS_LONG_LONG
+          (Bits <= (int)(sizeof(pdalboost::long_long_type) * CHAR_BIT)) +
+#else
+           1 +
+#endif
+          (Bits <= ::std::numeric_limits<unsigned long>::digits) +
+          (Bits <= ::std::numeric_limits<unsigned int>::digits) +
+          (Bits <= ::std::numeric_limits<unsigned short>::digits) +
+          (Bits <= ::std::numeric_limits<unsigned char>::digits)
+        >::least  least;
+#endif
+      typedef typename int_fast_t<least>::type  fast;
+      // int_fast_t<> works correctly for unsigned too, in spite of the name.
+  };
+
+  //  integer templates specifying extreme value  ----------------------------//
+
+  //  signed
+#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_LONG_LONG)
+  template< pdalboost::long_long_type MaxValue >   // maximum value to require support
+#else
+  template< long MaxValue >   // maximum value to require support
+#endif
+  struct int_max_value_t
+  {
+      typedef typename pdalboost::detail::int_least_helper
+        <
+#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_LONG_LONG)
+          (MaxValue <= ::pdalboost::integer_traits<pdalboost::long_long_type>::const_max) +
+#else
+           1 +
+#endif
+          (MaxValue <= ::pdalboost::integer_traits<long>::const_max) +
+          (MaxValue <= ::pdalboost::integer_traits<int>::const_max) +
+          (MaxValue <= ::pdalboost::integer_traits<short>::const_max) +
+          (MaxValue <= ::pdalboost::integer_traits<signed char>::const_max)
+        >::least  least;
+      typedef typename int_fast_t<least>::type  fast;
+  };
+
+#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_LONG_LONG)
+  template< pdalboost::long_long_type MinValue >   // minimum value to require support
+#else
+  template< long MinValue >   // minimum value to require support
+#endif
+  struct int_min_value_t
+  {
+      typedef typename pdalboost::detail::int_least_helper
+        <
+#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_LONG_LONG)
+          (MinValue >= ::pdalboost::integer_traits<pdalboost::long_long_type>::const_min) +
+#else
+           1 +
+#endif
+          (MinValue >= ::pdalboost::integer_traits<long>::const_min) +
+          (MinValue >= ::pdalboost::integer_traits<int>::const_min) +
+          (MinValue >= ::pdalboost::integer_traits<short>::const_min) +
+          (MinValue >= ::pdalboost::integer_traits<signed char>::const_min)
+        >::least  least;
+      typedef typename int_fast_t<least>::type  fast;
+  };
+
+  //  unsigned
+#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG)
+  template< pdalboost::ulong_long_type MaxValue >   // minimum value to require support
+#else
+  template< unsigned long MaxValue >   // minimum value to require support
+#endif
+  struct uint_value_t
+  {
+#if (defined(__BORLANDC__) || defined(__CODEGEAR__))
+     // It's really not clear why this workaround should be needed... shrug I guess!  JM
+#if defined(BOOST_NO_INTEGRAL_INT64_T)
+      BOOST_STATIC_CONSTANT(unsigned, which =
+           1 +
+          (MaxValue <= ::pdalboost::integer_traits<unsigned long>::const_max) +
+          (MaxValue <= ::pdalboost::integer_traits<unsigned int>::const_max) +
+          (MaxValue <= ::pdalboost::integer_traits<unsigned short>::const_max) +
+          (MaxValue <= ::pdalboost::integer_traits<unsigned char>::const_max));
+      typedef typename detail::int_least_helper< ::pdalboost::uint_value_t<MaxValue>::which>::least least;
+#else // BOOST_NO_INTEGRAL_INT64_T
+      BOOST_STATIC_CONSTANT(unsigned, which =
+           1 +
+          (MaxValue <= ::pdalboost::integer_traits<pdalboost::ulong_long_type>::const_max) +
+          (MaxValue <= ::pdalboost::integer_traits<unsigned long>::const_max) +
+          (MaxValue <= ::pdalboost::integer_traits<unsigned int>::const_max) +
+          (MaxValue <= ::pdalboost::integer_traits<unsigned short>::const_max) +
+          (MaxValue <= ::pdalboost::integer_traits<unsigned char>::const_max));
+      typedef typename detail::uint_least_helper< ::pdalboost::uint_value_t<MaxValue>::which>::least least;
+#endif // BOOST_NO_INTEGRAL_INT64_T
+#else
+      typedef typename pdalboost::detail::uint_least_helper
+        <
+#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG)
+          (MaxValue <= ::pdalboost::integer_traits<pdalboost::ulong_long_type>::const_max) +
+#else
+           1 +
+#endif
+          (MaxValue <= ::pdalboost::integer_traits<unsigned long>::const_max) +
+          (MaxValue <= ::pdalboost::integer_traits<unsigned int>::const_max) +
+          (MaxValue <= ::pdalboost::integer_traits<unsigned short>::const_max) +
+          (MaxValue <= ::pdalboost::integer_traits<unsigned char>::const_max)
+        >::least  least;
+#endif
+      typedef typename int_fast_t<least>::type  fast;
+  };
+
+
+} // namespace pdalboost
+
+#endif  // BOOST_INTEGER_HPP
diff --git a/vendor/pdalboost/boost/integer/common_factor_rt.hpp b/vendor/pdalboost/boost/integer/common_factor_rt.hpp
new file mode 100644
index 0000000..0687945
--- /dev/null
+++ b/vendor/pdalboost/boost/integer/common_factor_rt.hpp
@@ -0,0 +1,460 @@
+//  Boost common_factor_rt.hpp header file  ----------------------------------//
+
+//  (C) Copyright Daryle Walker and Paul Moore 2001-2002.  Permission to copy,
+//  use, modify, sell and distribute this software is granted provided this
+//  copyright notice appears in all copies.  This software is provided "as is"
+//  without express or implied warranty, and with no claim as to its suitability
+//  for any purpose. 
+
+// boostinspect:nolicense (don't complain about the lack of a Boost license)
+// (Paul Moore hasn't been in contact for years, so there's no way to change the
+// license.)
+
+//  See http://www.boost.org for updates, documentation, and revision history. 
+
+#ifndef BOOST_INTEGER_COMMON_FACTOR_RT_HPP
+#define BOOST_INTEGER_COMMON_FACTOR_RT_HPP
+
+#include <boost/integer_fwd.hpp>  // self include
+
+#include <boost/config.hpp>  // for BOOST_NESTED_TEMPLATE, etc.
+#include <boost/limits.hpp>  // for std::numeric_limits
+#include <climits>           // for CHAR_MIN
+#include <boost/detail/workaround.hpp>
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4127 4244)  // Conditional expression is constant
+#endif
+
+namespace pdalboost
+{
+namespace integer
+{
+
+
+//  Forward declarations for function templates  -----------------------------//
+
+template < typename IntegerType >
+    IntegerType  gcd( IntegerType const &a, IntegerType const &b );
+
+template < typename IntegerType >
+    IntegerType  lcm( IntegerType const &a, IntegerType const &b );
+
+
+//  Greatest common divisor evaluator class declaration  ---------------------//
+
+template < typename IntegerType >
+class gcd_evaluator
+{
+public:
+    // Types
+    typedef IntegerType  result_type, first_argument_type, second_argument_type;
+
+    // Function object interface
+    result_type  operator ()( first_argument_type const &a,
+     second_argument_type const &b ) const;
+
+};  // pdalboost::integer::gcd_evaluator
+
+
+//  Least common multiple evaluator class declaration  -----------------------//
+
+template < typename IntegerType >
+class lcm_evaluator
+{
+public:
+    // Types
+    typedef IntegerType  result_type, first_argument_type, second_argument_type;
+
+    // Function object interface
+    result_type  operator ()( first_argument_type const &a,
+     second_argument_type const &b ) const;
+
+};  // pdalboost::integer::lcm_evaluator
+
+
+//  Implementation details  --------------------------------------------------//
+
+namespace detail
+{
+    // Greatest common divisor for rings (including unsigned integers)
+    template < typename RingType >
+    RingType
+    gcd_euclidean
+    (
+        RingType a,
+        RingType b
+    )
+    {
+        // Avoid repeated construction
+        #ifndef __BORLANDC__
+        RingType const  zero = static_cast<RingType>( 0 );
+        #else
+        RingType  zero = static_cast<RingType>( 0 );
+        #endif
+
+        // Reduce by GCD-remainder property [GCD(a,b) == GCD(b,a MOD b)]
+        while ( true )
+        {
+            if ( a == zero )
+                return b;
+            b %= a;
+
+            if ( b == zero )
+                return a;
+            a %= b;
+        }
+    }
+
+    // Greatest common divisor for (signed) integers
+    template < typename IntegerType >
+    inline
+    IntegerType
+    gcd_integer
+    (
+        IntegerType const &  a,
+        IntegerType const &  b
+    )
+    {
+        // Avoid repeated construction
+        IntegerType const  zero = static_cast<IntegerType>( 0 );
+        IntegerType const  result = gcd_euclidean( a, b );
+
+        return ( result < zero ) ? static_cast<IntegerType>(-result) : result;
+    }
+
+    // Greatest common divisor for unsigned binary integers
+    template < typename BuiltInUnsigned >
+    BuiltInUnsigned
+    gcd_binary
+    (
+        BuiltInUnsigned  u,
+        BuiltInUnsigned  v
+    )
+    {
+        if ( u && v )
+        {
+            // Shift out common factors of 2
+            unsigned  shifts = 0;
+
+            while ( !(u & 1u) && !(v & 1u) )
+            {
+                ++shifts;
+                u >>= 1;
+                v >>= 1;
+            }
+
+            // Start with the still-even one, if any
+            BuiltInUnsigned  r[] = { u, v };
+            unsigned         which = static_cast<bool>( u & 1u );
+
+            // Whittle down the values via their differences
+            do
+            {
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+                while ( !(r[ which ] & 1u) )
+                {
+                    r[ which ] = (r[which] >> 1);
+                }
+#else
+                // Remove factors of two from the even one
+                while ( !(r[ which ] & 1u) )
+                {
+                    r[ which ] >>= 1;
+                }
+#endif
+
+                // Replace the larger of the two with their difference
+                if ( r[!which] > r[which] )
+                {
+                    which ^= 1u;
+                }
+
+                r[ which ] -= r[ !which ];
+            }
+            while ( r[which] );
+
+            // Shift-in the common factor of 2 to the residues' GCD
+            return r[ !which ] << shifts;
+        }
+        else
+        {
+            // At least one input is zero, return the other
+            // (adding since zero is the additive identity)
+            // or zero if both are zero.
+            return u + v;
+        }
+    }
+
+    // Least common multiple for rings (including unsigned integers)
+    template < typename RingType >
+    inline
+    RingType
+    lcm_euclidean
+    (
+        RingType const &  a,
+        RingType const &  b
+    )
+    {
+        RingType const  zero = static_cast<RingType>( 0 );
+        RingType const  temp = gcd_euclidean( a, b );
+
+        return ( temp != zero ) ? ( a / temp * b ) : zero;
+    }
+
+    // Least common multiple for (signed) integers
+    template < typename IntegerType >
+    inline
+    IntegerType
+    lcm_integer
+    (
+        IntegerType const &  a,
+        IntegerType const &  b
+    )
+    {
+        // Avoid repeated construction
+        IntegerType const  zero = static_cast<IntegerType>( 0 );
+        IntegerType const  result = lcm_euclidean( a, b );
+
+        return ( result < zero ) ? static_cast<IntegerType>(-result) : result;
+    }
+
+    // Function objects to find the best way of computing GCD or LCM
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+    template < typename T, bool IsSpecialized, bool IsSigned >
+    struct gcd_optimal_evaluator_helper_t
+    {
+        T  operator ()( T const &a, T const &b )
+        {
+            return gcd_euclidean( a, b );
+        }
+    };
+
+    template < typename T >
+    struct gcd_optimal_evaluator_helper_t< T, true, true >
+    {
+        T  operator ()( T const &a, T const &b )
+        {
+            return gcd_integer( a, b );
+        }
+    };
+
+    template < typename T >
+    struct gcd_optimal_evaluator
+    {
+        T  operator ()( T const &a, T const &b )
+        {
+            typedef ::std::numeric_limits<T>  limits_type;
+
+            typedef gcd_optimal_evaluator_helper_t<T,
+             limits_type::is_specialized, limits_type::is_signed>  helper_type;
+
+            helper_type  solver;
+
+            return solver( a, b );
+        }
+    };
+#else // BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+    template < typename T >
+    struct gcd_optimal_evaluator
+    {
+        T  operator ()( T const &a, T const &b )
+        {
+            return gcd_integer( a, b );
+        }
+    };
+#endif
+
+    // Specialize for the built-in integers
+#define BOOST_PRIVATE_GCD_UF( Ut )                  \
+    template < >  struct gcd_optimal_evaluator<Ut>  \
+    {  Ut  operator ()( Ut a, Ut b ) const  { return gcd_binary( a, b ); }  }
+
+    BOOST_PRIVATE_GCD_UF( unsigned char );
+    BOOST_PRIVATE_GCD_UF( unsigned short );
+    BOOST_PRIVATE_GCD_UF( unsigned );
+    BOOST_PRIVATE_GCD_UF( unsigned long );
+
+#ifdef BOOST_HAS_LONG_LONG
+    BOOST_PRIVATE_GCD_UF( pdalboost::ulong_long_type );
+#elif defined(BOOST_HAS_MS_INT64)
+    BOOST_PRIVATE_GCD_UF( unsigned __int64 );
+#endif
+
+#if CHAR_MIN == 0
+    BOOST_PRIVATE_GCD_UF( char ); // char is unsigned
+#endif
+
+#undef BOOST_PRIVATE_GCD_UF
+
+#define BOOST_PRIVATE_GCD_SF( St, Ut )                            \
+    template < >  struct gcd_optimal_evaluator<St>                \
+    {  St  operator ()( St a, St b ) const  { Ut const  a_abs =   \
+    static_cast<Ut>( a < 0 ? -a : +a ), b_abs = static_cast<Ut>(  \
+    b < 0 ? -b : +b ); return static_cast<St>(                    \
+    gcd_optimal_evaluator<Ut>()(a_abs, b_abs) ); }  }
+
+    BOOST_PRIVATE_GCD_SF( signed char, unsigned char );
+    BOOST_PRIVATE_GCD_SF( short, unsigned short );
+    BOOST_PRIVATE_GCD_SF( int, unsigned );
+    BOOST_PRIVATE_GCD_SF( long, unsigned long );
+
+#if CHAR_MIN < 0
+    BOOST_PRIVATE_GCD_SF( char, unsigned char ); // char is signed
+#endif
+
+#ifdef BOOST_HAS_LONG_LONG
+    BOOST_PRIVATE_GCD_SF( pdalboost::long_long_type, pdalboost::ulong_long_type );
+#elif defined(BOOST_HAS_MS_INT64)
+    BOOST_PRIVATE_GCD_SF( __int64, unsigned __int64 );
+#endif
+
+#undef BOOST_PRIVATE_GCD_SF
+
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+    template < typename T, bool IsSpecialized, bool IsSigned >
+    struct lcm_optimal_evaluator_helper_t
+    {
+        T  operator ()( T const &a, T const &b )
+        {
+            return lcm_euclidean( a, b );
+        }
+    };
+
+    template < typename T >
+    struct lcm_optimal_evaluator_helper_t< T, true, true >
+    {
+        T  operator ()( T const &a, T const &b )
+        {
+            return lcm_integer( a, b );
+        }
+    };
+
+    template < typename T >
+    struct lcm_optimal_evaluator
+    {
+        T  operator ()( T const &a, T const &b )
+        {
+            typedef ::std::numeric_limits<T>  limits_type;
+
+            typedef lcm_optimal_evaluator_helper_t<T,
+             limits_type::is_specialized, limits_type::is_signed>  helper_type;
+
+            helper_type  solver;
+
+            return solver( a, b );
+        }
+    };
+#else // BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+    template < typename T >
+    struct lcm_optimal_evaluator
+    {
+        T  operator ()( T const &a, T const &b )
+        {
+            return lcm_integer( a, b );
+        }
+    };
+#endif
+
+    // Functions to find the GCD or LCM in the best way
+    template < typename T >
+    inline
+    T
+    gcd_optimal
+    (
+        T const &  a,
+        T const &  b
+    )
+    {
+        gcd_optimal_evaluator<T>  solver;
+
+        return solver( a, b );
+    }
+
+    template < typename T >
+    inline
+    T
+    lcm_optimal
+    (
+        T const &  a,
+        T const &  b
+    )
+    {
+        lcm_optimal_evaluator<T>  solver;
+
+        return solver( a, b );
+    }
+
+}  // namespace detail
+
+
+//  Greatest common divisor evaluator member function definition  ------------//
+
+template < typename IntegerType >
+inline
+typename gcd_evaluator<IntegerType>::result_type
+gcd_evaluator<IntegerType>::operator ()
+(
+    first_argument_type const &   a,
+    second_argument_type const &  b
+) const
+{
+    return detail::gcd_optimal( a, b );
+}
+
+
+//  Least common multiple evaluator member function definition  --------------//
+
+template < typename IntegerType >
+inline
+typename lcm_evaluator<IntegerType>::result_type
+lcm_evaluator<IntegerType>::operator ()
+(
+    first_argument_type const &   a,
+    second_argument_type const &  b
+) const
+{
+    return detail::lcm_optimal( a, b );
+}
+
+
+//  Greatest common divisor and least common multiple function definitions  --//
+
+template < typename IntegerType >
+inline
+IntegerType
+gcd
+(
+    IntegerType const &  a,
+    IntegerType const &  b
+)
+{
+    gcd_evaluator<IntegerType>  solver;
+
+    return solver( a, b );
+}
+
+template < typename IntegerType >
+inline
+IntegerType
+lcm
+(
+    IntegerType const &  a,
+    IntegerType const &  b
+)
+{
+    lcm_evaluator<IntegerType>  solver;
+
+    return solver( a, b );
+}
+
+
+}  // namespace integer
+}  // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif  // BOOST_INTEGER_COMMON_FACTOR_RT_HPP
diff --git a/vendor/pdalboost/boost/integer/integer_log2.hpp b/vendor/pdalboost/boost/integer/integer_log2.hpp
new file mode 100644
index 0000000..247a136
--- /dev/null
+++ b/vendor/pdalboost/boost/integer/integer_log2.hpp
@@ -0,0 +1,112 @@
+// -----------------------------------------------------------
+// integer_log2.hpp
+//
+//   Gives the integer part of the logarithm, in base 2, of a
+// given number. Behavior is undefined if the argument is <= 0.
+//
+//         Copyright (c) 2003-2004, 2008 Gennaro Prota
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+//
+// -----------------------------------------------------------
+
+#ifndef BOOST_INTEGER_INTEGER_LOG2_HPP
+#define BOOST_INTEGER_INTEGER_LOG2_HPP
+
+#include <assert.h>
+#ifdef __BORLANDC__
+#include <climits>
+#endif
+#include <boost/limits.hpp>
+#include <boost/config.hpp>
+
+
+namespace pdalboost {
+ namespace detail {
+
+  template <typename T>
+  int integer_log2_impl(T x, int n) {
+
+      int result = 0;
+
+      while (x != 1) {
+
+          const T t = static_cast<T>(x >> n);
+          if (t) {
+              result += n;
+              x = t;
+          }
+          n /= 2;
+
+      }
+
+      return result;
+  }
+
+
+
+  // helper to find the maximum power of two
+  // less than p (more involved than necessary,
+  // to avoid PTS)
+  //
+  template <int p, int n>
+  struct max_pow2_less {
+
+      enum { c = 2*n < p };
+
+      BOOST_STATIC_CONSTANT(int, value =
+          c ? (max_pow2_less< c*p, 2*c*n>::value) : n);
+
+  };
+
+  template <>
+  struct max_pow2_less<0, 0> {
+
+      BOOST_STATIC_CONSTANT(int, value = 0);
+  };
+
+  // this template is here just for Borland :(
+  // we could simply rely on numeric_limits but sometimes
+  // Borland tries to use numeric_limits<const T>, because
+  // of its usual const-related problems in argument deduction
+  // - gps
+  template <typename T>
+  struct width {
+
+#ifdef __BORLANDC__
+      BOOST_STATIC_CONSTANT(int, value = sizeof(T) * CHAR_BIT);
+#else
+      BOOST_STATIC_CONSTANT(int, value = (std::numeric_limits<T>::digits));
+#endif
+
+  };
+
+ } // detail
+
+
+ // ---------
+ // integer_log2
+ // ---------------
+ //
+ template <typename T>
+ int integer_log2(T x) {
+
+     assert(x > 0);
+
+     const int n = detail::max_pow2_less<
+                     detail::width<T> :: value, 4
+                   > :: value;
+
+     return detail::integer_log2_impl(x, n);
+
+ }
+
+
+
+}
+
+
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/integer/integer_mask.hpp b/vendor/pdalboost/boost/integer/integer_mask.hpp
new file mode 100644
index 0000000..7c94a4d
--- /dev/null
+++ b/vendor/pdalboost/boost/integer/integer_mask.hpp
@@ -0,0 +1,126 @@
+//  Boost integer/integer_mask.hpp header file  ------------------------------//
+
+//  (C) Copyright Daryle Walker 2001.
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history. 
+
+#ifndef BOOST_INTEGER_INTEGER_MASK_HPP
+#define BOOST_INTEGER_INTEGER_MASK_HPP
+
+#include <boost/integer_fwd.hpp>  // self include
+
+#include <boost/config.hpp>   // for BOOST_STATIC_CONSTANT
+#include <boost/integer.hpp>  // for pdalboost::uint_t
+
+#include <climits>  // for UCHAR_MAX, etc.
+#include <cstddef>  // for std::size_t
+
+#include <boost/limits.hpp>  // for std::numeric_limits
+
+//
+// We simply cannot include this header on gcc without getting copious warnings of the kind:
+//
+// boost/integer/integer_mask.hpp:93:35: warning: use of C99 long long integer constant
+//
+// And yet there is no other reasonable implementation, so we declare this a system header
+// to suppress these warnings.
+//
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+#pragma GCC system_header
+#endif
+
+namespace pdalboost
+{
+
+
+//  Specified single-bit mask class declaration  -----------------------------//
+//  (Lowest bit starts counting at 0.)
+
+template < std::size_t Bit >
+struct high_bit_mask_t
+{
+    typedef typename uint_t<(Bit + 1)>::least  least;
+    typedef typename uint_t<(Bit + 1)>::fast   fast;
+
+    BOOST_STATIC_CONSTANT( least, high_bit = (least( 1u ) << Bit) );
+    BOOST_STATIC_CONSTANT( fast, high_bit_fast = (fast( 1u ) << Bit) );
+
+    BOOST_STATIC_CONSTANT( std::size_t, bit_position = Bit );
+
+};  // pdalboost::high_bit_mask_t
+
+
+//  Specified bit-block mask class declaration  ------------------------------//
+//  Makes masks for the lowest N bits
+//  (Specializations are needed when N fills up a type.)
+
+template < std::size_t Bits >
+struct low_bits_mask_t
+{
+    typedef typename uint_t<Bits>::least  least;
+    typedef typename uint_t<Bits>::fast   fast;
+
+    BOOST_STATIC_CONSTANT( least, sig_bits = (~( ~(least( 0u )) << Bits )) );
+    BOOST_STATIC_CONSTANT( fast, sig_bits_fast = fast(sig_bits) );
+
+    BOOST_STATIC_CONSTANT( std::size_t, bit_count = Bits );
+
+};  // pdalboost::low_bits_mask_t
+
+
+#define BOOST_LOW_BITS_MASK_SPECIALIZE( Type )                                  \
+  template <  >  struct low_bits_mask_t< std::numeric_limits<Type>::digits >  { \
+      typedef std::numeric_limits<Type>           limits_type;                  \
+      typedef uint_t<limits_type::digits>::least  least;                        \
+      typedef uint_t<limits_type::digits>::fast   fast;                         \
+      BOOST_STATIC_CONSTANT( least, sig_bits = (~( least(0u) )) );              \
+      BOOST_STATIC_CONSTANT( fast, sig_bits_fast = fast(sig_bits) );            \
+      BOOST_STATIC_CONSTANT( std::size_t, bit_count = limits_type::digits );    \
+  }
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4245)  // 'initializing' : conversion from 'int' to 'const pdalboost::low_bits_mask_t<8>::least', signed/unsigned mismatch
+#endif
+
+BOOST_LOW_BITS_MASK_SPECIALIZE( unsigned char );
+
+#if USHRT_MAX > UCHAR_MAX
+BOOST_LOW_BITS_MASK_SPECIALIZE( unsigned short );
+#endif
+
+#if UINT_MAX > USHRT_MAX
+BOOST_LOW_BITS_MASK_SPECIALIZE( unsigned int );
+#endif
+
+#if ULONG_MAX > UINT_MAX
+BOOST_LOW_BITS_MASK_SPECIALIZE( unsigned long );
+#endif
+
+#if defined(BOOST_HAS_LONG_LONG)
+    #if ((defined(ULLONG_MAX) && (ULLONG_MAX > ULONG_MAX)) ||\
+        (defined(ULONG_LONG_MAX) && (ULONG_LONG_MAX > ULONG_MAX)) ||\
+        (defined(ULONGLONG_MAX) && (ULONGLONG_MAX > ULONG_MAX)) ||\
+        (defined(_ULLONG_MAX) && (_ULLONG_MAX > ULONG_MAX)))
+    BOOST_LOW_BITS_MASK_SPECIALIZE( pdalboost::ulong_long_type );
+    #endif
+#elif defined(BOOST_HAS_MS_INT64)
+    #if 18446744073709551615ui64 > ULONG_MAX
+    BOOST_LOW_BITS_MASK_SPECIALIZE( unsigned __int64 );
+    #endif
+#endif
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#undef BOOST_LOW_BITS_MASK_SPECIALIZE
+
+
+}  // namespace pdalboost
+
+
+#endif  // BOOST_INTEGER_INTEGER_MASK_HPP
diff --git a/vendor/pdalboost/boost/integer/static_log2.hpp b/vendor/pdalboost/boost/integer/static_log2.hpp
new file mode 100644
index 0000000..64396c6
--- /dev/null
+++ b/vendor/pdalboost/boost/integer/static_log2.hpp
@@ -0,0 +1,127 @@
+// -------------- Boost static_log2.hpp header file  ----------------------- //
+//
+//                 Copyright (C) 2001 Daryle Walker.
+//                 Copyright (C) 2003 Vesa Karvonen.
+//                 Copyright (C) 2003 Gennaro Prota.
+//
+//     Distributed under the Boost Software License, Version 1.0.
+//        (See accompanying file LICENSE_1_0.txt or copy at
+//              http://www.boost.org/LICENSE_1_0.txt)
+//
+//         ---------------------------------------------------
+//       See http://www.boost.org/libs/integer for documentation.
+// ------------------------------------------------------------------------- //
+
+
+#ifndef BOOST_INTEGER_STATIC_LOG2_HPP
+#define BOOST_INTEGER_STATIC_LOG2_HPP
+
+#include "boost/integer_fwd.hpp" // for pdalboost::intmax_t
+
+namespace pdalboost {
+
+ namespace detail {
+
+     namespace static_log2_impl {
+
+     // choose_initial_n<>
+     //
+     // Recursively doubles its integer argument, until it
+     // becomes >= of the "width" (C99, 6.2.6.2p4) of
+     // static_log2_argument_type.
+     //
+     // Used to get the maximum power of two less then the width.
+     //
+     // Example: if on your platform argument_type has 48 value
+     //          bits it yields n=32.
+     //
+     // It's easy to prove that, starting from such a value
+     // of n, the core algorithm works correctly for any width
+     // of static_log2_argument_type and that recursion always
+     // terminates with x = 1 and n = 0 (see the algorithm's
+     // invariant).
+
+     typedef pdalboost::static_log2_argument_type argument_type;
+     typedef pdalboost::static_log2_result_type result_type;
+
+     template <result_type n>
+     struct choose_initial_n {
+
+         BOOST_STATIC_CONSTANT(bool, c = (argument_type(1) << n << n) != 0);
+         BOOST_STATIC_CONSTANT(
+             result_type,
+             value = !c*n + choose_initial_n<2*c*n>::value
+         );
+
+     };
+
+     template <>
+     struct choose_initial_n<0> {
+         BOOST_STATIC_CONSTANT(result_type, value = 0);
+     };
+
+
+
+     // start computing from n_zero - must be a power of two
+     const result_type n_zero = 16;
+     const result_type initial_n = choose_initial_n<n_zero>::value;
+
+     // static_log2_impl<>
+     //
+     // * Invariant:
+     //                 2n
+     //  1 <= x && x < 2    at the start of each recursion
+     //                     (see also choose_initial_n<>)
+     //
+     // * Type requirements:
+     //
+     //   argument_type maybe any unsigned type with at least n_zero + 1
+     //   value bits. (Note: If larger types will be standardized -e.g.
+     //   unsigned long long- then the argument_type typedef can be
+     //   changed without affecting the rest of the code.)
+     //
+
+     template <argument_type x, result_type n = initial_n>
+     struct static_log2_impl {
+
+         BOOST_STATIC_CONSTANT(bool, c = (x >> n) > 0); // x >= 2**n ?
+         BOOST_STATIC_CONSTANT(
+             result_type,
+             value = c*n + (static_log2_impl< (x>>c*n), n/2 >::value)
+         );
+
+     };
+
+     template <>
+     struct static_log2_impl<1, 0> {
+        BOOST_STATIC_CONSTANT(result_type, value = 0);
+     };
+
+     }
+ } // detail
+
+
+
+ // --------------------------------------
+ // static_log2<x>
+ // ----------------------------------------
+
+ template <static_log2_argument_type x>
+ struct static_log2 {
+
+     BOOST_STATIC_CONSTANT(
+         static_log2_result_type,
+         value = detail::static_log2_impl::static_log2_impl<x>::value
+     );
+
+ };
+
+
+ template <>
+ struct static_log2<0> { };
+
+}
+
+
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/integer_fwd.hpp b/vendor/pdalboost/boost/integer_fwd.hpp
new file mode 100644
index 0000000..85e53e8
--- /dev/null
+++ b/vendor/pdalboost/boost/integer_fwd.hpp
@@ -0,0 +1,187 @@
+//  Boost integer_fwd.hpp header file  ---------------------------------------//
+
+//  (C) Copyright Dave Abrahams and Daryle Walker 2001. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/integer for documentation.
+
+#ifndef BOOST_INTEGER_FWD_HPP
+#define BOOST_INTEGER_FWD_HPP
+
+#include <climits>  // for UCHAR_MAX, etc.
+#include <cstddef>  // for std::size_t
+
+#include <boost/config.hpp>  // for BOOST_NO_INTRINSIC_WCHAR_T
+#include <boost/limits.hpp>  // for std::numeric_limits
+#include <boost/cstdint.hpp>  // For intmax_t
+
+
+namespace pdalboost
+{
+
+#ifdef BOOST_NO_INTEGRAL_INT64_T
+     typedef unsigned long static_log2_argument_type;
+     typedef          int  static_log2_result_type;
+     typedef long          static_min_max_signed_type;
+     typedef unsigned long static_min_max_unsigned_type;
+#else
+     typedef pdalboost::uintmax_t static_min_max_unsigned_type;
+     typedef pdalboost::intmax_t  static_min_max_signed_type;
+     typedef pdalboost::uintmax_t static_log2_argument_type;
+     typedef int              static_log2_result_type;
+#endif
+
+//  From <boost/cstdint.hpp>  ------------------------------------------------//
+
+// Only has typedefs or using statements, with #conditionals
+
+
+//  From <boost/integer_traits.hpp>  -----------------------------------------//
+
+template < class T >
+    class integer_traits;
+
+template <  >
+    class integer_traits< bool >;
+
+template <  >
+    class integer_traits< char >;
+
+template <  >
+    class integer_traits< signed char >;
+
+template <  >
+    class integer_traits< unsigned char >;
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template <  >
+    class integer_traits< wchar_t >;
+#endif
+
+template <  >
+    class integer_traits< short >;
+
+template <  >
+    class integer_traits< unsigned short >;
+
+template <  >
+    class integer_traits< int >;
+
+template <  >
+    class integer_traits< unsigned int >;
+
+template <  >
+    class integer_traits< long >;
+
+template <  >
+    class integer_traits< unsigned long >;
+
+#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_LONG_LONG)
+template <  >
+class integer_traits<  ::pdalboost::long_long_type>;
+
+template <  >
+class integer_traits<  ::pdalboost::ulong_long_type >;
+#elif !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_MS_INT64)
+template <  >
+class integer_traits<__int64>;
+
+template <  >
+class integer_traits<unsigned __int64>;
+#endif
+
+
+//  From <boost/integer.hpp>  ------------------------------------------------//
+
+template < typename LeastInt >
+    struct int_fast_t;
+
+template< int Bits >
+    struct int_t;
+
+template< int Bits >
+    struct uint_t;
+
+#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG)
+    template< pdalboost::long_long_type MaxValue >   // maximum value to require support
+#else
+  template< long MaxValue >   // maximum value to require support
+#endif
+    struct int_max_value_t;
+
+#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG)
+  template< pdalboost::long_long_type MinValue >   // minimum value to require support
+#else
+  template< long MinValue >   // minimum value to require support
+#endif
+    struct int_min_value_t;
+
+#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG)
+  template< pdalboost::ulong_long_type MaxValue >   // maximum value to require support
+#else
+  template< unsigned long MaxValue >   // maximum value to require support
+#endif
+    struct uint_value_t;
+
+
+//  From <boost/integer/integer_mask.hpp>  -----------------------------------//
+
+template < std::size_t Bit >
+    struct high_bit_mask_t;
+
+template < std::size_t Bits >
+    struct low_bits_mask_t;
+
+template <  >
+    struct low_bits_mask_t< ::std::numeric_limits<unsigned char>::digits >;
+
+//  From <boost/integer/static_log2.hpp>  ------------------------------------//
+
+template <static_log2_argument_type Value >
+    struct static_log2;
+
+template <> struct static_log2<0u>;
+
+
+//  From <boost/integer/static_min_max.hpp>  ---------------------------------//
+
+template <static_min_max_signed_type Value1, static_min_max_signed_type Value2>
+    struct static_signed_min;
+
+template <static_min_max_signed_type Value1, static_min_max_signed_type Value2>
+    struct static_signed_max;
+
+template <static_min_max_unsigned_type Value1, static_min_max_unsigned_type Value2>
+    struct static_unsigned_min;
+
+template <static_min_max_unsigned_type Value1, static_min_max_unsigned_type Value2>
+    struct static_unsigned_max;
+
+
+//  From <boost/integer/common_factor_ct.hpp>
+
+#ifdef BOOST_NO_INTEGRAL_INT64_T
+     typedef unsigned long static_gcd_type;
+#else
+     typedef pdalboost::uintmax_t static_gcd_type;
+#endif
+
+template < static_gcd_type Value1, static_gcd_type Value2 >
+    struct static_gcd;
+template < static_gcd_type Value1, static_gcd_type Value2 >
+    struct static_lcm;
+
+
+//  From <boost/integer/common_factor_rt.hpp>
+
+template < typename IntegerType >
+    class gcd_evaluator;
+template < typename IntegerType >
+    class lcm_evaluator;
+
+
+}  // namespace pdalboost
+
+
+#endif  // BOOST_INTEGER_FWD_HPP
diff --git a/vendor/pdalboost/boost/integer_traits.hpp b/vendor/pdalboost/boost/integer_traits.hpp
new file mode 100644
index 0000000..48895b4
--- /dev/null
+++ b/vendor/pdalboost/boost/integer_traits.hpp
@@ -0,0 +1,256 @@
+/* boost integer_traits.hpp header file
+ *
+ * Copyright Jens Maurer 2000
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * $Id$
+ *
+ * Idea by Beman Dawes, Ed Brey, Steve Cleary, and Nathan Myers
+ */
+
+//  See http://www.boost.org/libs/integer for documentation.
+
+
+#ifndef BOOST_INTEGER_TRAITS_HPP
+#define BOOST_INTEGER_TRAITS_HPP
+
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+
+// These are an implementation detail and not part of the interface
+#include <limits.h>
+// we need wchar.h for WCHAR_MAX/MIN but not all platforms provide it,
+// and some may have <wchar.h> but not <cwchar> ...
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) && (!defined(BOOST_NO_CWCHAR) || defined(sun) || defined(__sun) || defined(__QNX__))
+#include <wchar.h>
+#endif
+
+//
+// We simply cannot include this header on gcc without getting copious warnings of the kind:
+//
+// ../../../boost/integer_traits.hpp:164:66: warning: use of C99 long long integer constant
+//
+// And yet there is no other reasonable implementation, so we declare this a system header
+// to suppress these warnings.
+//
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+#pragma GCC system_header
+#endif
+
+namespace pdalboost {
+template<class T>
+class integer_traits : public std::numeric_limits<T>
+{
+public:
+  BOOST_STATIC_CONSTANT(bool, is_integral = false);
+};
+
+namespace detail {
+template<class T, T min_val, T max_val>
+class integer_traits_base
+{
+public:
+  BOOST_STATIC_CONSTANT(bool, is_integral = true);
+  BOOST_STATIC_CONSTANT(T, const_min = min_val);
+  BOOST_STATIC_CONSTANT(T, const_max = max_val);
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+//  A definition is required even for integral static constants
+template<class T, T min_val, T max_val>
+const bool integer_traits_base<T, min_val, max_val>::is_integral;
+
+template<class T, T min_val, T max_val>
+const T integer_traits_base<T, min_val, max_val>::const_min;
+
+template<class T, T min_val, T max_val>
+const T integer_traits_base<T, min_val, max_val>::const_max;
+#endif
+
+} // namespace detail
+
+template<>
+class integer_traits<bool>
+  : public std::numeric_limits<bool>,
+    public detail::integer_traits_base<bool, false, true>
+{ };
+
+template<>
+class integer_traits<char>
+  : public std::numeric_limits<char>,
+    public detail::integer_traits_base<char, CHAR_MIN, CHAR_MAX>
+{ };
+
+template<>
+class integer_traits<signed char>
+  : public std::numeric_limits<signed char>,
+    public detail::integer_traits_base<signed char, SCHAR_MIN, SCHAR_MAX>
+{ };
+
+template<>
+class integer_traits<unsigned char>
+  : public std::numeric_limits<unsigned char>,
+    public detail::integer_traits_base<unsigned char, 0, UCHAR_MAX>
+{ };
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<>
+class integer_traits<wchar_t>
+  : public std::numeric_limits<wchar_t>,
+    // Don't trust WCHAR_MIN and WCHAR_MAX with Mac OS X's native
+    // library: they are wrong!
+#if defined(WCHAR_MIN) && defined(WCHAR_MAX) && !defined(__APPLE__)
+    public detail::integer_traits_base<wchar_t, WCHAR_MIN, WCHAR_MAX>
+#elif defined(__BORLANDC__) || defined(__CYGWIN__) || defined(__MINGW32__) || (defined(__BEOS__) && defined(__GNUC__))
+    // No WCHAR_MIN and WCHAR_MAX, whar_t is short and unsigned:
+    public detail::integer_traits_base<wchar_t, 0, 0xffff>
+#elif (defined(__sgi) && (!defined(__SGI_STL_PORT) || __SGI_STL_PORT < 0x400))\
+    || (defined __APPLE__)\
+    || (defined(__OpenBSD__) && defined(__GNUC__))\
+    || (defined(__NetBSD__) && defined(__GNUC__))\
+    || (defined(__FreeBSD__) && defined(__GNUC__))\
+    || (defined(__DragonFly__) && defined(__GNUC__))\
+    || (defined(__hpux) && defined(__GNUC__) && (__GNUC__ == 3) && !defined(__SGI_STL_PORT))
+    // No WCHAR_MIN and WCHAR_MAX, wchar_t has the same range as int.
+    //  - SGI MIPSpro with native library
+    //  - gcc 3.x on HP-UX
+    //  - Mac OS X with native library
+    //  - gcc on FreeBSD, OpenBSD and NetBSD
+    public detail::integer_traits_base<wchar_t, INT_MIN, INT_MAX>
+#else
+#error No WCHAR_MIN and WCHAR_MAX present, please adjust integer_traits<> for your compiler.
+#endif
+{ };
+#endif // BOOST_NO_INTRINSIC_WCHAR_T
+
+template<>
+class integer_traits<short>
+  : public std::numeric_limits<short>,
+    public detail::integer_traits_base<short, SHRT_MIN, SHRT_MAX>
+{ };
+
+template<>
+class integer_traits<unsigned short>
+  : public std::numeric_limits<unsigned short>,
+    public detail::integer_traits_base<unsigned short, 0, USHRT_MAX>
+{ };
+
+template<>
+class integer_traits<int>
+  : public std::numeric_limits<int>,
+    public detail::integer_traits_base<int, INT_MIN, INT_MAX>
+{ };
+
+template<>
+class integer_traits<unsigned int>
+  : public std::numeric_limits<unsigned int>,
+    public detail::integer_traits_base<unsigned int, 0, UINT_MAX>
+{ };
+
+template<>
+class integer_traits<long>
+  : public std::numeric_limits<long>,
+    public detail::integer_traits_base<long, LONG_MIN, LONG_MAX>
+{ };
+
+template<>
+class integer_traits<unsigned long>
+  : public std::numeric_limits<unsigned long>,
+    public detail::integer_traits_base<unsigned long, 0, ULONG_MAX>
+{ };
+
+#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T)
+#if defined(ULLONG_MAX) && defined(BOOST_HAS_LONG_LONG)
+
+template<>
+class integer_traits< ::pdalboost::long_long_type>
+  : public std::numeric_limits< ::pdalboost::long_long_type>,
+    public detail::integer_traits_base< ::pdalboost::long_long_type, LLONG_MIN, LLONG_MAX>
+{ };
+
+template<>
+class integer_traits< ::pdalboost::ulong_long_type>
+  : public std::numeric_limits< ::pdalboost::ulong_long_type>,
+    public detail::integer_traits_base< ::pdalboost::ulong_long_type, 0, ULLONG_MAX>
+{ };
+
+#elif defined(ULONG_LONG_MAX) && defined(BOOST_HAS_LONG_LONG)
+
+template<>
+class integer_traits< ::pdalboost::long_long_type>  : public std::numeric_limits< ::pdalboost::long_long_type>,    public detail::integer_traits_base< ::pdalboost::long_long_type, LONG_LONG_MIN, LONG_LONG_MAX>{ };
+template<>
+class integer_traits< ::pdalboost::ulong_long_type>
+  : public std::numeric_limits< ::pdalboost::ulong_long_type>,
+    public detail::integer_traits_base< ::pdalboost::ulong_long_type, 0, ULONG_LONG_MAX>
+{ };
+
+#elif defined(ULONGLONG_MAX) && defined(BOOST_HAS_LONG_LONG)
+
+template<>
+class integer_traits< ::pdalboost::long_long_type>
+  : public std::numeric_limits< ::pdalboost::long_long_type>,
+    public detail::integer_traits_base< ::pdalboost::long_long_type, LONGLONG_MIN, LONGLONG_MAX>
+{ };
+
+template<>
+class integer_traits< ::pdalboost::ulong_long_type>
+  : public std::numeric_limits< ::pdalboost::ulong_long_type>,
+    public detail::integer_traits_base< ::pdalboost::ulong_long_type, 0, ULONGLONG_MAX>
+{ };
+
+#elif defined(_LLONG_MAX) && defined(_C2) && defined(BOOST_HAS_LONG_LONG)
+
+template<>
+class integer_traits< ::pdalboost::long_long_type>
+  : public std::numeric_limits< ::pdalboost::long_long_type>,
+    public detail::integer_traits_base< ::pdalboost::long_long_type, -_LLONG_MAX - _C2, _LLONG_MAX>
+{ };
+
+template<>
+class integer_traits< ::pdalboost::ulong_long_type>
+  : public std::numeric_limits< ::pdalboost::ulong_long_type>,
+    public detail::integer_traits_base< ::pdalboost::ulong_long_type, 0, _ULLONG_MAX>
+{ };
+
+#elif defined(BOOST_HAS_LONG_LONG)
+//
+// we have long long but no constants, this happens for example with gcc in -ansi mode,
+// we'll just have to work out the values for ourselves (assumes 2's compliment representation):
+//
+template<>
+class integer_traits< ::pdalboost::long_long_type>
+  : public std::numeric_limits< ::pdalboost::long_long_type>,
+    public detail::integer_traits_base< ::pdalboost::long_long_type, (1LL << (sizeof(::pdalboost::long_long_type) * CHAR_BIT - 1)), ~(1LL << (sizeof(::pdalboost::long_long_type) * CHAR_BIT - 1))>
+{ };
+
+template<>
+class integer_traits< ::pdalboost::ulong_long_type>
+  : public std::numeric_limits< ::pdalboost::ulong_long_type>,
+    public detail::integer_traits_base< ::pdalboost::ulong_long_type, 0, ~0uLL>
+{ };
+
+#elif defined(BOOST_HAS_MS_INT64)
+
+template<>
+class integer_traits< __int64>
+  : public std::numeric_limits< __int64>,
+    public detail::integer_traits_base< __int64, _I64_MIN, _I64_MAX>
+{ };
+
+template<>
+class integer_traits< unsigned __int64>
+  : public std::numeric_limits< unsigned __int64>,
+    public detail::integer_traits_base< unsigned __int64, 0, _UI64_MAX>
+{ };
+
+#endif
+#endif
+
+} // namespace pdalboost
+
+#endif /* BOOST_INTEGER_TRAITS_HPP */
+
+
+
diff --git a/vendor/pdalboost/boost/intrusive/detail/algorithm.hpp b/vendor/pdalboost/boost/intrusive/detail/algorithm.hpp
new file mode 100644
index 0000000..835d8fb
--- /dev/null
+++ b/vendor/pdalboost/boost/intrusive/detail/algorithm.hpp
@@ -0,0 +1,90 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2014.
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/intrusive for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_INTRUSIVE_DETAIL_ALGORITHM_HPP
+#define BOOST_INTRUSIVE_DETAIL_ALGORITHM_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+namespace pdalboost {
+namespace intrusive {
+
+struct algo_pred_equal
+{
+   template<class T>
+   bool operator()(const T &x, const T &y) const
+   {  return x == y;  }
+};
+
+struct algo_pred_less
+{
+   template<class T>
+   bool operator()(const T &x, const T &y) const
+   {  return x < y;  }
+};
+
+template<class InputIt1, class InputIt2, class BinaryPredicate>
+bool algo_equal(InputIt1 first1, InputIt1 last1, InputIt2 first2, BinaryPredicate p)
+{
+    for (; first1 != last1; ++first1, ++first2) {
+        if (!p(*first1, *first2)) {
+            return false;
+        }
+    }
+    return true;
+}
+
+template<class InputIt1, class InputIt2>
+bool algo_equal(InputIt1 first1, InputIt1 last1, InputIt2 first2)
+{  return (algo_equal)(first1, last1, first2, algo_pred_equal());  }
+
+template<class InputIt1, class InputIt2, class BinaryPredicate>
+bool algo_equal(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, BinaryPredicate pred)
+{
+    for (; first1 != last1 && first2 != last2; ++first1, ++first2)
+        if (!pred(*first1, *first2))
+            return false;
+    return first1 == last1 && first2 == last2;
+}
+
+template<class InputIt1, class InputIt2>
+bool algo_equal(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2)
+{  return (algo_equal)(first1, last1, first2, last2, algo_pred_equal());  }
+
+template <class InputIterator1, class InputIterator2, class BinaryPredicate>
+  bool algo_lexicographical_compare (InputIterator1 first1, InputIterator1 last1,
+                                     InputIterator2 first2, InputIterator2 last2,
+                                     BinaryPredicate pred)
+{
+   while (first1 != last1){
+      if (first2 == last2 || *first2 < *first1) return false;
+      else if (pred(*first1, *first2)) return true;
+      ++first1; ++first2;
+   }
+   return (first2 != last2);
+}
+
+template <class InputIterator1, class InputIterator2>
+  bool algo_lexicographical_compare (InputIterator1 first1, InputIterator1 last1,
+                                     InputIterator2 first2, InputIterator2 last2)
+{  return (algo_lexicographical_compare)(first1, last1, first2, last2, algo_pred_less());  }
+
+}  //namespace intrusive {
+}  //namespace pdalboost {
+
+#endif   //#ifndef BOOST_INTRUSIVE_DETAIL_ALGORITHM_HPP
diff --git a/vendor/pdalboost/boost/intrusive/detail/config_begin.hpp b/vendor/pdalboost/boost/intrusive/detail/config_begin.hpp
new file mode 100644
index 0000000..6528f39
--- /dev/null
+++ b/vendor/pdalboost/boost/intrusive/detail/config_begin.hpp
@@ -0,0 +1,51 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga  2006-2013
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/intrusive for documentation.
+//
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_CONFIG_HPP
+#include <boost/config.hpp>
+#endif
+
+#ifdef BOOST_MSVC
+
+   #pragma warning (push)
+   //
+   //'function' : resolved overload was found by argument-dependent lookup
+   //A function found by argument-dependent lookup (Koenig lookup) was eventually
+   //chosen by overload resolution.
+   //
+   //In Visual C++ .NET and earlier compilers, a different function would have
+   //been called. To pick the original function, use an explicitly qualified name.
+   //
+
+   //warning C4275: non dll-interface class 'x' used as base for
+   //dll-interface class 'Y'
+   #pragma warning (disable : 4275)
+   //warning C4251: 'x' : class 'y' needs to have dll-interface to
+   //be used by clients of class 'z'
+   #pragma warning (disable : 4251)
+   #pragma warning (disable : 4675)
+   #pragma warning (disable : 4996)
+   #pragma warning (disable : 4503)
+   #pragma warning (disable : 4284) // odd return type for operator->
+   #pragma warning (disable : 4244) // possible loss of data
+   #pragma warning (disable : 4521) ////Disable "multiple copy constructors specified"
+   #pragma warning (disable : 4522)
+   #pragma warning (disable : 4146)
+   #pragma warning (disable : 4267) //conversion from 'X' to 'Y', possible loss of data
+   #pragma warning (disable : 4127) //conditional expression is constant
+   #pragma warning (disable : 4706) //assignment within conditional expression
+   #pragma warning (disable : 4541) //'typeid' used on polymorphic type 'pdalboost::exception' with /GR-
+   #pragma warning (disable : 4512) //'typeid' used on polymorphic type 'pdalboost::exception' with /GR-
+#endif
+
+//#define BOOST_INTRUSIVE_USE_ITERATOR_FACADE
+//#define BOOST_INTRUSIVE_USE_ITERATOR_ENABLE_IF_CONVERTIBLE
diff --git a/vendor/pdalboost/boost/intrusive/detail/config_end.hpp b/vendor/pdalboost/boost/intrusive/detail/config_end.hpp
new file mode 100644
index 0000000..a081443
--- /dev/null
+++ b/vendor/pdalboost/boost/intrusive/detail/config_end.hpp
@@ -0,0 +1,15 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga  2006-2013
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/intrusive for documentation.
+//
+/////////////////////////////////////////////////////////////////////////////
+
+#if defined BOOST_MSVC
+   #pragma warning (pop)
+#endif
diff --git a/vendor/pdalboost/boost/intrusive/detail/has_member_function_callable_with.hpp b/vendor/pdalboost/boost/intrusive/detail/has_member_function_callable_with.hpp
new file mode 100644
index 0000000..28f268c
--- /dev/null
+++ b/vendor/pdalboost/boost/intrusive/detail/has_member_function_callable_with.hpp
@@ -0,0 +1,340 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_CALLABLE_WITH_HPP
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_CALLABLE_WITH_HPP
+
+//Mark that we don't support 0 arg calls due to compiler ICE in GCC 3.4/4.0/4.1 and
+//wrong SFINAE for GCC 4.2/4.3
+#if defined(__GNUC__) && !defined(__clang__) && ((__GNUC__*100 + __GNUC_MINOR__*10) >= 340) && ((__GNUC__*100 + __GNUC_MINOR__*10) <= 430)
+   #define BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED
+#elif defined(BOOST_INTEL) && (BOOST_INTEL < 1200 )
+   #define BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED
+#endif
+#include <cstddef>
+#include <boost/move/utility_core.hpp>
+#include <boost/move/detail/fwd_macros.hpp>
+
+namespace pdalboost_intrusive_hmfcw {
+
+typedef char yes_type;
+struct no_type{ char dummy[2]; };
+
+#if defined(BOOST_NO_CXX11_DECLTYPE)
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+template<class T>
+struct make_dontcare
+{
+   typedef dont_care type;
+};
+
+#endif
+
+struct dont_care
+{
+   dont_care(...);
+};
+
+struct private_type
+{
+   static private_type p;
+   private_type const &operator,(int) const;
+};
+
+template<typename T>
+no_type is_private_type(T const &);
+yes_type is_private_type(private_type const &);
+
+#endif   //#if defined(BOOST_NO_CXX11_DECLTYPE)
+
+#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+template<typename T> struct remove_cv                    {  typedef T type;   };
+template<typename T> struct remove_cv<const T>           {  typedef T type;   };
+template<typename T> struct remove_cv<const volatile T>  {  typedef T type;   };
+template<typename T> struct remove_cv<volatile T>        {  typedef T type;   };
+
+#endif
+
+}  //namespace pdalboost_intrusive_hmfcw {
+
+#endif  //BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_CALLABLE_WITH_HPP
+
+#ifndef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME
+   #error "You MUST define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME before including this header!"
+#endif
+
+#ifndef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN
+   #error "You MUST define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN before including this header!"
+#endif
+
+#ifndef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX
+   #error "You MUST define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX before including this header!"
+#endif
+
+#if BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX < BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN
+   #error "BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX value MUST be greater or equal than BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN!"
+#endif
+
+#if BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX == 0
+   #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_COMMA_IF
+#else
+   #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_COMMA_IF ,
+#endif
+
+#ifndef  BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG
+   #error "BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG not defined!"
+#endif
+
+#ifndef  BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END
+   #error "BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END not defined!"
+#endif
+
+BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_DECLTYPE)
+   //With decltype and variadic templaes, things are pretty easy
+   template<typename Fun, class ...Args>
+   struct BOOST_MOVE_CAT(has_member_function_callable_with_,BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
+   {
+      template<class U>
+      static decltype(pdalboost::move_detail::declval<U>().
+         BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME(::pdalboost::move_detail::declval<Args>()...)
+            , pdalboost_intrusive_hmfcw::yes_type()) Test(U* f);
+      template<class U>
+      static pdalboost_intrusive_hmfcw::no_type Test(...);
+      static const bool value = sizeof(Test<Fun>((Fun*)0)) == sizeof(pdalboost_intrusive_hmfcw::yes_type);
+   };
+
+#else //defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_NO_CXX11_DECLTYPE)
+
+   /////////////////////////////////////////////////////////
+   /////////////////////////////////////////////////////////
+   //
+   //    has_member_function_callable_with_impl_XXX
+   //    declaration, special case and 0 arg specializaton
+   //
+   /////////////////////////////////////////////////////////
+   /////////////////////////////////////////////////////////
+
+   #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+      /////////////////////////////////////////////////////////
+      /////////////////////////////////////////////////////////
+      //
+      //    has_member_function_callable_with_impl_XXX for 1 to N arguments
+      //
+      /////////////////////////////////////////////////////////
+      /////////////////////////////////////////////////////////
+
+      //defined(BOOST_NO_CXX11_DECLTYPE) must be true
+      template<class Fun, class ...DontCares>
+      struct FunWrapTmpl : Fun
+      {
+         using Fun::BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME;
+         pdalboost_intrusive_hmfcw::private_type BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME(DontCares...) const;
+      };
+
+      template<typename Fun, class ...Args>
+      struct BOOST_MOVE_CAT(has_member_function_callable_with_,BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<Fun, Args...>
+      {
+         typedef FunWrapTmpl<typename pdalboost_intrusive_hmfcw::make_dontcare<Args>::type...> FunWrap;
+
+         static bool const value = (sizeof(pdalboost_intrusive_hmfcw::no_type) ==
+                                    sizeof(pdalboost_intrusive_hmfcw::is_private_type
+                                             ( (::pdalboost::move_detail::declval< FunWrap<Fun> >().
+                                                   BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME(::pdalboost::move_detail::declval<Args>()...), 0) )
+                                          )
+                                    );
+      };
+   #else //defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+      //Preprocessor must be used to generate specializations instead of variadic templates
+
+      template <typename Type>
+      class BOOST_MOVE_CAT(has_member_function_named_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
+      {
+         struct BaseMixin
+         {
+            void BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME();
+         };
+
+         struct Base
+            : public pdalboost_intrusive_hmfcw::remove_cv<Type>::type, public BaseMixin
+         {  //Declare the unneeded default constructor as some old compilers wrongly require it with is_convertible
+            Base();
+         };
+         template <typename T, T t> class Helper{};
+
+         template <typename U>
+         static pdalboost_intrusive_hmfcw::no_type  deduce
+            (U*, Helper<void (BaseMixin::*)(), &U::BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME>* = 0);
+         static pdalboost_intrusive_hmfcw::yes_type deduce(...);
+
+         public:
+         static const bool value = sizeof(pdalboost_intrusive_hmfcw::yes_type) == sizeof(deduce((Base*)0));
+      };
+
+      /////////////////////////////////////////////////////////
+      /////////////////////////////////////////////////////////
+      //
+      //    has_member_function_callable_with_impl_XXX specializations
+      //
+      /////////////////////////////////////////////////////////
+
+      template<typename Fun, bool HasFunc BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_COMMA_IF BOOST_MOVE_CAT(BOOST_MOVE_CLASSDFLT,BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX)>
+      struct BOOST_MOVE_CAT(has_member_function_callable_with_impl_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME);
+
+      //No BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME member specialization
+      template<typename Fun BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_COMMA_IF BOOST_MOVE_CAT(BOOST_MOVE_CLASS,BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX)>
+      struct BOOST_MOVE_CAT(has_member_function_callable_with_impl_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
+         <Fun, false BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_COMMA_IF BOOST_MOVE_CAT(BOOST_MOVE_TARG,BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX)>
+      {
+         static const bool value = false;
+      };
+
+      #if BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN == 0
+         //0 arg specialization when BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME is present
+         #if !defined(BOOST_NO_CXX11_DECLTYPE)
+
+            template<typename Fun>
+            struct BOOST_MOVE_CAT(has_member_function_callable_with_impl_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<Fun, true>
+            {
+               template<class U>
+               static decltype(pdalboost::move_detail::declval<U>().BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME()
+                  , pdalboost_intrusive_hmfcw::yes_type()) Test(U* f);
+
+               template<class U>
+               static pdalboost_intrusive_hmfcw::no_type Test(...);
+               static const bool value = sizeof(Test<Fun>((Fun*)0)) == sizeof(pdalboost_intrusive_hmfcw::yes_type);
+            };
+
+         #else //defined(BOOST_NO_CXX11_DECLTYPE)
+
+            #if !defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED)
+
+            template<class F, std::size_t N = sizeof(pdalboost::move_detail::declval<F>().BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME(), 0)>
+            struct BOOST_MOVE_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
+            {  pdalboost_intrusive_hmfcw::yes_type dummy[N ? 1 : 2];   };
+
+            template<typename Fun>
+            struct BOOST_MOVE_CAT(has_member_function_callable_with_impl_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<Fun, true>
+            {
+               template<class U> static BOOST_MOVE_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<U>
+                  Test(BOOST_MOVE_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<U>*);
+               template<class U> static pdalboost_intrusive_hmfcw::no_type Test(...);
+               static const bool value = sizeof(Test< Fun >(0)) == sizeof(pdalboost_intrusive_hmfcw::yes_type);
+            };
+
+            #else //defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED)
+
+               template<typename Fun>
+               struct BOOST_MOVE_CAT(has_member_function_callable_with_impl_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<Fun, true>
+               {//GCC [3.4-4.3) gives ICE when instantiating the 0 arg version so it is not supported.
+                  static const bool value = true;
+               };
+
+            #endif//!defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED)
+         #endif   //!defined(BOOST_NO_CXX11_DECLTYPE)
+      #endif   //#if BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN == 0
+
+      #if BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX > 0
+         //1 to N arg specialization when BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME is present
+         //Declare some unneeded default constructor as some old compilers wrongly require it with is_convertible
+         #if defined(BOOST_NO_CXX11_DECLTYPE)
+            #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_ITERATION(N)\
+            \
+            template<class Fun>\
+            struct BOOST_MOVE_CAT(FunWrap##N, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)\
+               : Fun\
+            {\
+               using Fun::BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME;\
+               BOOST_MOVE_CAT(FunWrap##N, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)();\
+               pdalboost_intrusive_hmfcw::private_type BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME\
+                  (BOOST_MOVE_REPEAT##N(pdalboost_intrusive_hmfcw::dont_care)) const;\
+            };\
+            \
+            template<typename Fun, BOOST_MOVE_CLASS##N>\
+            struct BOOST_MOVE_CAT(has_member_function_callable_with_impl_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<Fun, true, BOOST_MOVE_TARG##N>\
+            {\
+               static bool const value = (sizeof(pdalboost_intrusive_hmfcw::no_type) == sizeof(pdalboost_intrusive_hmfcw::is_private_type\
+                                                   ( (::pdalboost::move_detail::declval\
+                                                         < BOOST_MOVE_CAT(FunWrap##N, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<Fun> >().\
+                                                      BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME(BOOST_MOVE_DECLVAL##N), 0) )\
+                                                )\
+                                          );\
+            };\
+            //
+         #else
+            #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_ITERATION(N)\
+            template<typename Fun, BOOST_MOVE_CLASS##N>\
+            struct BOOST_MOVE_CAT(has_member_function_callable_with_impl_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)\
+               <Fun, true, BOOST_MOVE_TARG##N>\
+            {\
+               template<class U>\
+               static decltype(pdalboost::move_detail::declval<U>().\
+                  BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME(BOOST_MOVE_DECLVAL##N)\
+                     , pdalboost_intrusive_hmfcw::yes_type()) Test(U* f);\
+               template<class U>\
+               static pdalboost_intrusive_hmfcw::no_type Test(...);\
+               static const bool value = sizeof(Test<Fun>((Fun*)0)) == sizeof(pdalboost_intrusive_hmfcw::yes_type);\
+            };\
+            //
+         #endif
+         ////////////////////////////////////
+         // Build and invoke BOOST_MOVE_ITERATE_NTOM macrofunction, note that N has to be at least 1
+         ////////////////////////////////////
+         #if BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN == 0
+            #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_ITERATE_MIN 1
+         #else
+            #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_ITERATE_MIN BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN
+         #endif
+         BOOST_MOVE_CAT
+            (BOOST_MOVE_CAT(BOOST_MOVE_CAT(BOOST_MOVE_ITERATE_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_ITERATE_MIN), TO)
+            ,BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX)
+               (BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_ITERATION)
+         #undef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_ITERATION
+         #undef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_ITERATE_MIN
+         ////////////////////////////////////
+         // End of BOOST_MOVE_ITERATE_NTOM
+         ////////////////////////////////////
+      #endif   //BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX > 0
+
+      /////////////////////////////////////////////////////////
+      /////////////////////////////////////////////////////////
+      //
+      //       has_member_function_callable_with_FUNC
+      //
+      /////////////////////////////////////////////////////////
+      /////////////////////////////////////////////////////////
+
+      //Otherwise use the preprocessor
+      template<typename Fun BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_COMMA_IF BOOST_MOVE_CAT(BOOST_MOVE_CLASSDFLT,BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX)>
+      struct BOOST_MOVE_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
+         : public BOOST_MOVE_CAT(has_member_function_callable_with_impl_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
+            <Fun
+            , BOOST_MOVE_CAT(has_member_function_named_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<Fun>::value
+            BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_COMMA_IF BOOST_MOVE_CAT(BOOST_MOVE_TARG,BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX)>
+      {};
+   #endif   //defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+#endif
+
+BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END
+
+//Undef local macros
+#undef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_COMMA_IF
+
+//Undef user defined macros
+#undef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME
+#undef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN
+#undef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX
+#undef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG
+#undef BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END
diff --git a/vendor/pdalboost/boost/intrusive/detail/iterator.hpp b/vendor/pdalboost/boost/intrusive/detail/iterator.hpp
new file mode 100644
index 0000000..075fc70
--- /dev/null
+++ b/vendor/pdalboost/boost/intrusive/detail/iterator.hpp
@@ -0,0 +1,155 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga  2014-2014
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/intrusive for documentation.
+//
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_INTRUSIVE_DETAIL_ITERATOR_HPP
+#define BOOST_INTRUSIVE_DETAIL_ITERATOR_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <cstddef>
+#include <boost/intrusive/detail/std_fwd.hpp>
+#include <boost/move/detail/iterator_traits.hpp>
+#include <boost/move/detail/meta_utils_core.hpp>
+
+namespace pdalboost {
+namespace intrusive {
+
+using pdalboost::movelib::iterator_traits;
+
+////////////////////
+//    iterator
+////////////////////
+template<class Category, class T, class Distance, class Pointer = T*, class Reference = T&>
+struct iterator
+{
+   typedef Category  iterator_category;
+   typedef T         value_type;
+   typedef Distance  difference_type;
+   typedef Pointer   pointer;
+   typedef Reference reference;
+};
+
+////////////////////////////////////////
+//    iterator_[dis|en]able_if_tag
+////////////////////////////////////////
+template<class I, class Tag, class R = void>
+struct iterator_enable_if_tag
+   : ::pdalboost::move_detail::enable_if_c
+      < ::pdalboost::move_detail::is_same
+         < typename pdalboost::intrusive::iterator_traits<I>::iterator_category 
+         , Tag
+         >::value
+         , R>
+{};
+
+template<class I, class Tag, class R = void>
+struct iterator_disable_if_tag
+   : ::pdalboost::move_detail::enable_if_c
+      < !::pdalboost::move_detail::is_same
+         < typename pdalboost::intrusive::iterator_traits<I>::iterator_category 
+         , Tag
+         >::value
+         , R>
+{};
+
+////////////////////////////////////////
+//    iterator_[dis|en]able_if_tag_difference_type
+////////////////////////////////////////
+template<class I, class Tag>
+struct iterator_enable_if_tag_difference_type
+   : iterator_enable_if_tag<I, Tag, typename pdalboost::intrusive::iterator_traits<I>::difference_type>
+{};
+
+template<class I, class Tag>
+struct iterator_disable_if_tag_difference_type
+   : iterator_disable_if_tag<I, Tag, typename pdalboost::intrusive::iterator_traits<I>::difference_type>
+{};
+
+////////////////////
+//    advance
+////////////////////
+template<class InputIt, class Distance> inline
+typename iterator_enable_if_tag<InputIt, std::input_iterator_tag>::type
+   iterator_advance(InputIt& it, Distance n)
+{
+   while(n--)
+	   ++it;
+}
+
+template<class InputIt, class Distance> inline
+typename iterator_enable_if_tag<InputIt, std::forward_iterator_tag>::type
+   iterator_advance(InputIt& it, Distance n)
+{
+   while(n--)
+	   ++it;
+}
+
+template<class InputIt, class Distance> inline
+typename iterator_enable_if_tag<InputIt, std::bidirectional_iterator_tag>::type
+   iterator_advance(InputIt& it, Distance n)
+{
+   for (; 0 < n; --n)
+	   ++it;
+   for (; n < 0; ++n)
+	   --it;
+}
+
+template<class InputIt, class Distance> inline
+typename iterator_enable_if_tag<InputIt, std::random_access_iterator_tag>::type
+   iterator_advance(InputIt& it, Distance n)
+{
+   it += n;
+}
+
+////////////////////
+//    distance
+////////////////////
+template<class InputIt> inline
+typename iterator_disable_if_tag_difference_type
+   <InputIt, std::random_access_iterator_tag>::type
+      iterator_distance(InputIt first, InputIt last)
+{
+   typename iterator_traits<InputIt>::difference_type off = 0;
+   while(first != last){
+	   ++off;
+      ++first;
+   }
+   return off;
+}
+
+template<class InputIt> inline
+typename iterator_enable_if_tag_difference_type
+   <InputIt, std::random_access_iterator_tag>::type
+      iterator_distance(InputIt first, InputIt last)
+{
+   typename iterator_traits<InputIt>::difference_type off = last - first;
+   return off;
+}
+
+template<class I>
+typename iterator_traits<I>::pointer iterator_arrow_result(const I &i)
+{  return i.operator->();  }
+
+template<class T>
+T * iterator_arrow_result(T *p)
+{  return p;   }
+
+} //namespace intrusive
+} //namespace pdalboost
+
+#endif //BOOST_INTRUSIVE_DETAIL_ITERATOR_HPP
diff --git a/vendor/pdalboost/boost/intrusive/detail/minimal_pair_header.hpp b/vendor/pdalboost/boost/intrusive/detail/minimal_pair_header.hpp
new file mode 100644
index 0000000..1358a08
--- /dev/null
+++ b/vendor/pdalboost/boost/intrusive/detail/minimal_pair_header.hpp
@@ -0,0 +1,30 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga  2014-2015
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/intrusive for documentation.
+//
+/////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_INTRUSIVE_DETAIL_MINIMAL_PAIR_HEADER_HPP
+#define BOOST_INTRUSIVE_DETAIL_MINIMAL_PAIR_HEADER_HPP
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+#
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#//Try to avoid including <utility>, as it's quite big in C++11
+#if defined(BOOST_GNU_STDLIB)
+#  include <bits/stl_pair.h>
+#else
+#  include <utility>    //Fallback
+#endif
+#
+#endif //BOOST_INTRUSIVE_DETAIL_MINIMAL_PAIR_HEADER_HPP
diff --git a/vendor/pdalboost/boost/intrusive/detail/mpl.hpp b/vendor/pdalboost/boost/intrusive/detail/mpl.hpp
new file mode 100644
index 0000000..35a1395
--- /dev/null
+++ b/vendor/pdalboost/boost/intrusive/detail/mpl.hpp
@@ -0,0 +1,206 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga        2006-2014
+// (C) Copyright Microsoft Corporation  2014
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/intrusive for documentation.
+//
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_INTRUSIVE_DETAIL_MPL_HPP
+#define BOOST_INTRUSIVE_DETAIL_MPL_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/move/detail/type_traits.hpp>
+#include <cstddef>
+
+namespace pdalboost {
+namespace intrusive {
+namespace detail {
+   
+using pdalboost::move_detail::is_same;
+using pdalboost::move_detail::add_const;
+using pdalboost::move_detail::remove_const;
+using pdalboost::move_detail::remove_cv;
+using pdalboost::move_detail::remove_reference;
+using pdalboost::move_detail::add_reference;
+using pdalboost::move_detail::remove_pointer;
+using pdalboost::move_detail::add_pointer;
+using pdalboost::move_detail::true_type;
+using pdalboost::move_detail::false_type;
+using pdalboost::move_detail::enable_if_c;
+using pdalboost::move_detail::enable_if;
+using pdalboost::move_detail::disable_if_c;
+using pdalboost::move_detail::disable_if;
+using pdalboost::move_detail::is_convertible;
+using pdalboost::move_detail::if_c;
+using pdalboost::move_detail::if_;
+using pdalboost::move_detail::is_const;
+using pdalboost::move_detail::identity;
+using pdalboost::move_detail::alignment_of;
+using pdalboost::move_detail::is_empty;
+using pdalboost::move_detail::addressof;
+using pdalboost::move_detail::integral_constant;
+using pdalboost::move_detail::enable_if_convertible;
+using pdalboost::move_detail::disable_if_convertible;
+using pdalboost::move_detail::bool_;
+using pdalboost::move_detail::true_;
+using pdalboost::move_detail::false_;
+using pdalboost::move_detail::yes_type;
+using pdalboost::move_detail::no_type;
+using pdalboost::move_detail::apply;
+using pdalboost::move_detail::eval_if_c;
+using pdalboost::move_detail::eval_if;
+using pdalboost::move_detail::unvoid_ref;
+using pdalboost::move_detail::add_const_if_c;
+
+template<std::size_t S>
+struct ls_zeros
+{
+   static const std::size_t value = (S & std::size_t(1)) ? 0 : (1 + ls_zeros<(S>>1u)>::value);
+};
+
+template<>
+struct ls_zeros<0>
+{
+   static const std::size_t value = 0;
+};
+
+template<>
+struct ls_zeros<1>
+{
+   static const std::size_t value = 0;
+};
+
+// Infrastructure for providing a default type for T::TNAME if absent.
+#define BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(TNAME)     \
+   template <typename T, typename DefaultType>                    \
+   struct boost_intrusive_default_type_ ## TNAME                  \
+   {                                                              \
+      template <typename X>                                       \
+      static char test(int, typename X::TNAME*);                  \
+                                                                  \
+      template <typename X>                                       \
+      static int test(...);                                       \
+                                                                  \
+      struct DefaultWrap { typedef DefaultType TNAME; };          \
+                                                                  \
+      static const bool value = (1 == sizeof(test<T>(0, 0)));     \
+                                                                  \
+      typedef typename                                            \
+         ::pdalboost::intrusive::detail::if_c                         \
+            <value, T, DefaultWrap>::type::TNAME type;            \
+   };                                                             \
+   //
+
+#define BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(INSTANTIATION_NS_PREFIX, T, TNAME, TIMPL)   \
+      typename INSTANTIATION_NS_PREFIX                                                       \
+         boost_intrusive_default_type_ ## TNAME< T, TIMPL >::type                            \
+//
+
+#define BOOST_INTRUSIVE_INSTANTIATE_EVAL_DEFAULT_TYPE_TMPLT(TNAME)\
+   template <typename T, typename DefaultType>                    \
+   struct boost_intrusive_eval_default_type_ ## TNAME             \
+   {                                                              \
+      template <typename X>                                       \
+      static char test(int, typename X::TNAME*);                  \
+                                                                  \
+      template <typename X>                                       \
+      static int test(...);                                       \
+                                                                  \
+      struct DefaultWrap                                          \
+      { typedef typename DefaultType::type TNAME; };              \
+                                                                  \
+      static const bool value = (1 == sizeof(test<T>(0, 0)));     \
+                                                                  \
+      typedef typename                                            \
+         ::pdalboost::intrusive::detail::eval_if_c                    \
+            < value                                               \
+            , ::pdalboost::intrusive::detail::identity<T>             \
+            , ::pdalboost::intrusive::detail::identity<DefaultWrap>   \
+            >::type::TNAME type;                                  \
+   };                                                             \
+//
+
+#define BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(INSTANTIATION_NS_PREFIX, T, TNAME, TIMPL) \
+      typename INSTANTIATION_NS_PREFIX                                                          \
+         boost_intrusive_eval_default_type_ ## TNAME< T, TIMPL >::type                          \
+//
+
+#define BOOST_INTRUSIVE_INTERNAL_STATIC_BOOL_IS_TRUE(TRAITS_PREFIX, TYPEDEF_TO_FIND) \
+template <class T>\
+struct TRAITS_PREFIX##_bool\
+{\
+   template<bool Add>\
+   struct two_or_three {yes_type _[2 + Add];};\
+   template <class U> static yes_type test(...);\
+   template <class U> static two_or_three<U::TYPEDEF_TO_FIND> test (int);\
+   static const std::size_t value = sizeof(test<T>(0));\
+};\
+\
+template <class T>\
+struct TRAITS_PREFIX##_bool_is_true\
+{\
+   static const bool value = TRAITS_PREFIX##_bool<T>::value > sizeof(yes_type)*2;\
+};\
+//
+
+#define BOOST_INTRUSIVE_HAS_STATIC_MEMBER_FUNC_SIGNATURE(TRAITS_NAME, FUNC_NAME) \
+  template <typename U, typename Signature> \
+  class TRAITS_NAME \
+  { \
+  private: \
+  template<Signature> struct helper;\
+  template<typename T> \
+  static ::pdalboost::intrusive::detail::yes_type test(helper<&T::FUNC_NAME>*); \
+  template<typename T> static ::pdalboost::intrusive::detail::no_type test(...); \
+  public: \
+  static const bool value = sizeof(test<U>(0)) == sizeof(::pdalboost::intrusive::detail::yes_type); \
+  }; \
+//
+
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNC_CALLED(TRAITS_NAME, FUNC_NAME) \
+template <typename Type> \
+struct TRAITS_NAME \
+{ \
+   struct BaseMixin \
+   { \
+      void FUNC_NAME(); \
+   }; \
+   struct Base : public Type, public BaseMixin { Base(); }; \
+   template <typename T, T t> class Helper{}; \
+   template <typename U> \
+   static ::pdalboost::intrusive::detail::no_type  test(U*, Helper<void (BaseMixin::*)(), &U::FUNC_NAME>* = 0); \
+   static ::pdalboost::intrusive::detail::yes_type test(...); \
+   static const bool value = sizeof(::pdalboost::intrusive::detail::yes_type) == sizeof(test((Base*)(0))); \
+};\
+//
+
+#define BOOST_INTRUSIVE_HAS_MEMBER_FUNC_CALLED_IGNORE_SIGNATURE(TRAITS_NAME, FUNC_NAME) \
+BOOST_INTRUSIVE_HAS_MEMBER_FUNC_CALLED(TRAITS_NAME##_ignore_signature, FUNC_NAME) \
+\
+template <typename Type, class> \
+struct TRAITS_NAME \
+   : public TRAITS_NAME##_ignore_signature<Type> \
+{};\
+//
+
+} //namespace detail
+} //namespace intrusive
+} //namespace pdalboost
+
+#include <boost/intrusive/detail/config_end.hpp>
+
+#endif //BOOST_INTRUSIVE_DETAIL_MPL_HPP
diff --git a/vendor/pdalboost/boost/intrusive/detail/pointer_element.hpp b/vendor/pdalboost/boost/intrusive/detail/pointer_element.hpp
new file mode 100644
index 0000000..3e45a19
--- /dev/null
+++ b/vendor/pdalboost/boost/intrusive/detail/pointer_element.hpp
@@ -0,0 +1,168 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/intrusive for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_INTRUSIVE_DETAIL_POINTER_ELEMENT_HPP
+#define BOOST_INTRUSIVE_DETAIL_POINTER_ELEMENT_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#ifndef BOOST_INTRUSIVE_DETAIL_WORKAROUND_HPP
+#include <boost/intrusive/detail/workaround.hpp>
+#endif   //BOOST_INTRUSIVE_DETAIL_WORKAROUND_HPP
+
+namespace pdalboost {
+namespace intrusive {
+namespace detail{
+
+//////////////////////
+//struct first_param
+//////////////////////
+
+template <typename T> struct first_param
+{  typedef void type;   };
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+   template <template <typename, typename...> class TemplateClass, typename T, typename... Args>
+   struct first_param< TemplateClass<T, Args...> >
+   {
+      typedef T type;
+   };
+
+#else //C++03 compilers
+
+   template < template  //0arg
+               <class
+               > class TemplateClass, class T
+            >
+   struct first_param
+      < TemplateClass<T> >
+   {  typedef T type;   };
+
+   template < template  //1arg
+               <class,class
+               > class TemplateClass, class T
+            , class P0>
+   struct first_param
+      < TemplateClass<T, P0> >
+   {  typedef T type;   };
+
+   template < template  //2arg
+               <class,class,class
+               > class TemplateClass, class T
+            , class P0, class P1>
+   struct first_param
+      < TemplateClass<T, P0, P1> >
+   {  typedef T type;   };
+
+   template < template  //3arg
+               <class,class,class,class
+               > class TemplateClass, class T
+            , class P0, class P1, class P2>
+   struct first_param
+      < TemplateClass<T, P0, P1, P2> >
+   {  typedef T type;   };
+
+   template < template  //4arg
+               <class,class,class,class,class
+               > class TemplateClass, class T
+            , class P0, class P1, class P2, class P3>
+   struct first_param
+      < TemplateClass<T, P0, P1, P2, P3> >
+   {  typedef T type;   };
+
+   template < template  //5arg
+               <class,class,class,class,class,class
+               > class TemplateClass, class T
+            , class P0, class P1, class P2, class P3, class P4>
+   struct first_param
+      < TemplateClass<T, P0, P1, P2, P3, P4> >
+   {  typedef T type;   };
+
+   template < template  //6arg
+               <class,class,class,class,class,class,class
+               > class TemplateClass, class T
+            , class P0, class P1, class P2, class P3, class P4, class P5>
+   struct first_param
+      < TemplateClass<T, P0, P1, P2, P3, P4, P5> >
+   {  typedef T type;   };
+
+   template < template  //7arg
+               <class,class,class,class,class,class,class,class
+               > class TemplateClass, class T
+            , class P0, class P1, class P2, class P3, class P4, class P5, class P6>
+   struct first_param
+      < TemplateClass<T, P0, P1, P2, P3, P4, P5, P6> >
+   {  typedef T type;   };
+
+   template < template  //8arg
+               <class,class,class,class,class,class,class,class,class
+               > class TemplateClass, class T
+            , class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7>
+   struct first_param
+      < TemplateClass<T, P0, P1, P2, P3, P4, P5, P6, P7> >
+   {  typedef T type;   };
+
+   template < template  //9arg
+               <class,class,class,class,class,class,class,class,class,class
+               > class TemplateClass, class T
+            , class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8>
+   struct first_param
+      < TemplateClass<T, P0, P1, P2, P3, P4, P5, P6, P7, P8> >
+   {  typedef T type;   };
+
+#endif   //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+template <typename T>
+struct has_internal_pointer_element
+{
+   template <typename X>
+   static char test(int, typename X::element_type*);
+
+   template <typename X>
+   static int test(...);
+
+   static const bool value = (1 == sizeof(test<T>(0, 0)));
+};
+
+template<class Ptr, bool = has_internal_pointer_element<Ptr>::value>
+struct pointer_element_impl
+{
+   typedef typename Ptr::element_type type;
+};
+
+template<class Ptr>
+struct pointer_element_impl<Ptr, false>
+{
+   typedef typename pdalboost::intrusive::detail::first_param<Ptr>::type type;
+};
+
+}  //namespace detail{
+
+template <typename Ptr>
+struct pointer_element
+{
+   typedef typename ::pdalboost::intrusive::detail::pointer_element_impl<Ptr>::type type;
+};
+
+template <typename T>
+struct pointer_element<T*>
+{  typedef T type; };
+
+}  //namespace container {
+}  //namespace pdalboost {
+
+#endif // defined(BOOST_INTRUSIVE_DETAIL_POINTER_ELEMENT_HPP)
diff --git a/vendor/pdalboost/boost/intrusive/detail/reverse_iterator.hpp b/vendor/pdalboost/boost/intrusive/detail/reverse_iterator.hpp
new file mode 100644
index 0000000..b43eab6
--- /dev/null
+++ b/vendor/pdalboost/boost/intrusive/detail/reverse_iterator.hpp
@@ -0,0 +1,144 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga  2014-2014
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/intrusive for documentation.
+//
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_INTRUSIVE_DETAIL_REVERSE_ITERATOR_HPP
+#define BOOST_INTRUSIVE_DETAIL_REVERSE_ITERATOR_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/detail/iterator.hpp>
+#include <boost/intrusive/detail/mpl.hpp>
+
+namespace pdalboost {
+namespace intrusive {
+
+template<class It>
+class reverse_iterator
+{
+   public:
+   typedef typename pdalboost::intrusive::iterator_traits<It>::pointer             pointer;
+   typedef typename pdalboost::intrusive::iterator_traits<It>::reference           reference;
+   typedef typename pdalboost::intrusive::iterator_traits<It>::difference_type     difference_type;
+   typedef typename pdalboost::intrusive::iterator_traits<It>::iterator_category   iterator_category;
+   typedef typename pdalboost::intrusive::iterator_traits<It>::value_type          value_type;
+
+
+   typedef It iterator_type;
+
+   reverse_iterator()
+      : m_current()  //Value initialization to achieve "null iterators" (N3644)
+      {}
+
+   explicit reverse_iterator(It r)
+      : m_current(r)
+   {}
+
+   template<class OtherIt>
+   reverse_iterator( const reverse_iterator<OtherIt>& r
+                   , typename pdalboost::intrusive::detail::enable_if_convertible<OtherIt, It>::type* =0
+                   )
+      : m_current(r.base())
+   {}
+
+   template<class OtherIt>
+   typename pdalboost::intrusive::detail::enable_if_convertible<OtherIt, It, reverse_iterator &>::type
+         operator=( const reverse_iterator<OtherIt>& r)
+   {  m_current = r.base();   return *this;  }
+
+   It base() const
+   {  return m_current;  }
+
+   reference operator*() const
+   {  It temp(m_current);   --temp; return *temp; }
+
+   pointer operator->() const
+   {  It temp(m_current);   --temp; return iterator_arrow_result(temp); }
+
+   reference operator[](difference_type off) const
+   {  return this->m_current[-off - 1];  }
+
+   reverse_iterator& operator++()
+   {  --m_current;   return *this;   }
+
+   reverse_iterator operator++(int)
+   {
+      reverse_iterator temp = *this;
+      --m_current;
+      return temp;
+   }
+
+   reverse_iterator& operator--()
+   {
+      ++m_current;
+      return *this;
+   }
+
+   reverse_iterator operator--(int)
+   {
+      reverse_iterator temp(*this);
+      ++m_current;
+      return temp;
+   }
+
+   friend bool operator==(const reverse_iterator& l, const reverse_iterator& r)
+   {  return l.m_current == r.m_current;  }
+
+   friend bool operator!=(const reverse_iterator& l, const reverse_iterator& r)
+   {  return l.m_current != r.m_current;  }
+
+   friend bool operator<(const reverse_iterator& l, const reverse_iterator& r)
+   {  return l.m_current > r.m_current;  }
+
+   friend bool operator<=(const reverse_iterator& l, const reverse_iterator& r)
+   {  return l.m_current >= r.m_current;  }
+
+   friend bool operator>(const reverse_iterator& l, const reverse_iterator& r)
+   {  return l.m_current < r.m_current;  }
+
+   friend bool operator>=(const reverse_iterator& l, const reverse_iterator& r)
+   {  return l.m_current <= r.m_current;  }
+
+   reverse_iterator& operator+=(difference_type off)
+   {  m_current -= off; return *this;  }
+
+   friend reverse_iterator operator+(reverse_iterator l, difference_type off)
+   {  l.m_current -= off;  return l;  }
+
+   friend reverse_iterator operator+(difference_type off, reverse_iterator r)
+   {  return (r += off);   }
+
+   reverse_iterator& operator-=(difference_type off)
+   {  m_current += off; return *this;  }
+
+   friend reverse_iterator operator-(reverse_iterator l, difference_type off)
+   {  l.m_current += off;  return l;  }
+
+   friend difference_type operator-(const reverse_iterator& l, const reverse_iterator& r)
+   {  return r.m_current - l.m_current;  }
+
+   private:
+   It m_current;   // the wrapped iterator
+};
+
+} //namespace intrusive {
+} //namespace pdalboost {
+
+#include <boost/intrusive/detail/config_end.hpp>
+
+#endif //BOOST_INTRUSIVE_DETAIL_REVERSE_ITERATOR_HPP
diff --git a/vendor/pdalboost/boost/intrusive/detail/std_fwd.hpp b/vendor/pdalboost/boost/intrusive/detail/std_fwd.hpp
new file mode 100644
index 0000000..8193ea8
--- /dev/null
+++ b/vendor/pdalboost/boost/intrusive/detail/std_fwd.hpp
@@ -0,0 +1,43 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_INTRUSIVE_DETAIL_STD_FWD_HPP
+#define BOOST_INTRUSIVE_DETAIL_STD_FWD_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+//                        Standard predeclarations
+//////////////////////////////////////////////////////////////////////////////
+
+#include <boost/move/detail/std_ns_begin.hpp>
+BOOST_MOVE_STD_NS_BEG
+
+template<class T>
+struct less;
+
+template<class T>
+struct equal_to;
+
+struct input_iterator_tag;
+struct forward_iterator_tag;
+struct bidirectional_iterator_tag;
+struct random_access_iterator_tag;
+
+BOOST_MOVE_STD_NS_END
+#include <boost/move/detail/std_ns_end.hpp>
+
+#endif //#ifndef BOOST_INTRUSIVE_DETAIL_STD_FWD_HPP
diff --git a/vendor/pdalboost/boost/intrusive/detail/to_raw_pointer.hpp b/vendor/pdalboost/boost/intrusive/detail/to_raw_pointer.hpp
new file mode 100644
index 0000000..74de893
--- /dev/null
+++ b/vendor/pdalboost/boost/intrusive/detail/to_raw_pointer.hpp
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga  2014-2014
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/intrusive for documentation.
+//
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_INTRUSIVE_DETAIL_TO_RAW_POINTER_HPP
+#define BOOST_INTRUSIVE_DETAIL_TO_RAW_POINTER_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/detail/pointer_element.hpp>
+
+namespace pdalboost {
+namespace intrusive {
+namespace detail {
+
+template <class T>
+inline T* to_raw_pointer(T* p)
+{  return p; }
+
+template <class Pointer>
+inline typename pdalboost::intrusive::pointer_element<Pointer>::type*
+to_raw_pointer(const Pointer &p)
+{  return pdalboost::intrusive::detail::to_raw_pointer(p.operator->());  }
+
+} //namespace detail
+} //namespace intrusive
+} //namespace pdalboost
+
+#include <boost/intrusive/detail/config_end.hpp>
+
+#endif //BOOST_INTRUSIVE_DETAIL_UTILITIES_HPP
diff --git a/vendor/pdalboost/boost/intrusive/detail/workaround.hpp b/vendor/pdalboost/boost/intrusive/detail/workaround.hpp
new file mode 100644
index 0000000..b73f4ef
--- /dev/null
+++ b/vendor/pdalboost/boost/intrusive/detail/workaround.hpp
@@ -0,0 +1,38 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/interprocess for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_INTRUSIVE_DETAIL_WORKAROUND_HPP
+#define BOOST_INTRUSIVE_DETAIL_WORKAROUND_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#ifndef BOOST_CONFIG_HPP
+#include <boost/config.hpp>
+#endif
+
+#if    !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+   #define BOOST_INTRUSIVE_PERFECT_FORWARDING
+#endif
+
+//Macros for documentation purposes. For code, expands to the argument
+#define BOOST_INTRUSIVE_IMPDEF(TYPE) TYPE
+#define BOOST_INTRUSIVE_SEEDOC(TYPE) TYPE
+#define BOOST_INTRUSIVE_DOC1ST(TYPE1, TYPE2) TYPE2
+#define BOOST_INTRUSIVE_I ,
+#define BOOST_INTRUSIVE_DOCIGN(T1) T1
+
+
+#endif   //#ifndef BOOST_INTRUSIVE_DETAIL_WORKAROUND_HPP
diff --git a/vendor/pdalboost/boost/intrusive/pointer_rebind.hpp b/vendor/pdalboost/boost/intrusive/pointer_rebind.hpp
new file mode 100644
index 0000000..2aed58c
--- /dev/null
+++ b/vendor/pdalboost/boost/intrusive/pointer_rebind.hpp
@@ -0,0 +1,188 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/intrusive for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_INTRUSIVE_POINTER_REBIND_HPP
+#define BOOST_INTRUSIVE_POINTER_REBIND_HPP
+
+#ifndef BOOST_INTRUSIVE_DETAIL_WORKAROUND_HPP
+#include <boost/intrusive/detail/workaround.hpp>
+#endif   //BOOST_INTRUSIVE_DETAIL_WORKAROUND_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+namespace pdalboost {
+namespace intrusive {
+
+///////////////////////////
+//struct pointer_rebind_mode
+///////////////////////////
+template <typename Ptr, typename U>
+struct pointer_has_rebind
+{
+   template <typename V> struct any
+   {  any(const V&) { } };
+
+   template <typename X>
+   static char test(int, typename X::template rebind<U>*);
+
+   template <typename X>
+   static int test(any<int>, void*);
+
+   static const bool value = (1 == sizeof(test<Ptr>(0, 0)));
+};
+
+template <typename Ptr, typename U>
+struct pointer_has_rebind_other
+{
+   template <typename V> struct any
+   {  any(const V&) { } };
+
+   template <typename X>
+   static char test(int, typename X::template rebind<U>::other*);
+
+   template <typename X>
+   static int test(any<int>, void*);
+
+   static const bool value = (1 == sizeof(test<Ptr>(0, 0)));
+};
+
+template <typename Ptr, typename U>
+struct pointer_rebind_mode
+{
+   static const unsigned int rebind =       (unsigned int)pointer_has_rebind<Ptr, U>::value;
+   static const unsigned int rebind_other = (unsigned int)pointer_has_rebind_other<Ptr, U>::value;
+   static const unsigned int mode =         rebind + rebind*rebind_other;
+};
+
+////////////////////////
+//struct pointer_rebinder
+////////////////////////
+template <typename Ptr, typename U, unsigned int RebindMode>
+struct pointer_rebinder;
+
+// Implementation of pointer_rebinder<U>::type if Ptr has
+// its own rebind<U>::other type (C++03)
+template <typename Ptr, typename U>
+struct pointer_rebinder< Ptr, U, 2u >
+{
+   typedef typename Ptr::template rebind<U>::other type;
+};
+
+// Implementation of pointer_rebinder<U>::type if Ptr has
+// its own rebind template.
+template <typename Ptr, typename U>
+struct pointer_rebinder< Ptr, U, 1u >
+{
+   typedef typename Ptr::template rebind<U> type;
+};
+
+// Specialization of pointer_rebinder if Ptr does not
+// have its own rebind template but has a the form Ptr<A, An...>,
+// where An... comprises zero or more type parameters.
+// Many types fit this form, hence many pointers will get a
+// reasonable default for rebind.
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+template <template <class, class...> class Ptr, typename A, class... An, class U>
+struct pointer_rebinder<Ptr<A, An...>, U, 0u >
+{
+   typedef Ptr<U, An...> type;
+};
+
+//Needed for non-conforming compilers like GCC 4.3
+template <template <class> class Ptr, typename A, class U>
+struct pointer_rebinder<Ptr<A>, U, 0u >
+{
+   typedef Ptr<U> type;
+};
+
+#else //C++03 compilers
+
+template <template <class> class Ptr  //0arg
+         , typename A
+         , class U>
+struct pointer_rebinder<Ptr<A>, U, 0u>
+{  typedef Ptr<U> type;   };
+
+template <template <class, class> class Ptr  //1arg
+         , typename A, class P0
+         , class U>
+struct pointer_rebinder<Ptr<A, P0>, U, 0u>
+{  typedef Ptr<U, P0> type;   };
+
+template <template <class, class, class> class Ptr  //2arg
+         , typename A, class P0, class P1
+         , class U>
+struct pointer_rebinder<Ptr<A, P0, P1>, U, 0u>
+{  typedef Ptr<U, P0, P1> type;   };
+
+template <template <class, class, class, class> class Ptr  //3arg
+         , typename A, class P0, class P1, class P2
+         , class U>
+struct pointer_rebinder<Ptr<A, P0, P1, P2>, U, 0u>
+{  typedef Ptr<U, P0, P1, P2> type;   };
+
+template <template <class, class, class, class, class> class Ptr  //4arg
+         , typename A, class P0, class P1, class P2, class P3
+         , class U>
+struct pointer_rebinder<Ptr<A, P0, P1, P2, P3>, U, 0u>
+{  typedef Ptr<U, P0, P1, P2, P3> type;   };
+
+template <template <class, class, class, class, class, class> class Ptr  //5arg
+         , typename A, class P0, class P1, class P2, class P3, class P4
+         , class U>
+struct pointer_rebinder<Ptr<A, P0, P1, P2, P3, P4>, U, 0u>
+{  typedef Ptr<U, P0, P1, P2, P3, P4> type;   };
+
+template <template <class, class, class, class, class, class, class> class Ptr  //6arg
+         , typename A, class P0, class P1, class P2, class P3, class P4, class P5
+         , class U>
+struct pointer_rebinder<Ptr<A, P0, P1, P2, P3, P4, P5>, U, 0u>
+{  typedef Ptr<U, P0, P1, P2, P3, P4, P5> type;   };
+
+template <template <class, class, class, class, class, class, class, class> class Ptr  //7arg
+         , typename A, class P0, class P1, class P2, class P3, class P4, class P5, class P6
+         , class U>
+struct pointer_rebinder<Ptr<A, P0, P1, P2, P3, P4, P5, P6>, U, 0u>
+{  typedef Ptr<U, P0, P1, P2, P3, P4, P5, P6> type;   };
+
+template <template <class, class, class, class, class, class, class, class, class> class Ptr  //8arg
+         , typename A, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7
+         , class U>
+struct pointer_rebinder<Ptr<A, P0, P1, P2, P3, P4, P5, P6, P7>, U, 0u>
+{  typedef Ptr<U, P0, P1, P2, P3, P4, P5, P6, P7> type;   };
+
+template <template <class, class, class, class, class, class, class, class, class, class> class Ptr  //9arg
+         , typename A, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8
+         , class U>
+struct pointer_rebinder<Ptr<A, P0, P1, P2, P3, P4, P5, P6, P7, P8>, U, 0u>
+{  typedef Ptr<U, P0, P1, P2, P3, P4, P5, P6, P7, P8> type;   };
+
+#endif   //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+template <typename Ptr, typename U>
+struct pointer_rebind
+   : public pointer_rebinder<Ptr, U, pointer_rebind_mode<Ptr, U>::mode>
+{};
+
+template <typename T, typename U>
+struct pointer_rebind<T*, U>
+{  typedef U* type; };
+
+}  //namespace container {
+}  //namespace pdalboost {
+
+#endif // defined(BOOST_INTRUSIVE_POINTER_REBIND_HPP)
diff --git a/vendor/pdalboost/boost/intrusive/pointer_traits.hpp b/vendor/pdalboost/boost/intrusive/pointer_traits.hpp
new file mode 100644
index 0000000..f11f97d
--- /dev/null
+++ b/vendor/pdalboost/boost/intrusive/pointer_traits.hpp
@@ -0,0 +1,318 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Pablo Halpern 2009. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2011-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/intrusive for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_INTRUSIVE_POINTER_TRAITS_HPP
+#define BOOST_INTRUSIVE_POINTER_TRAITS_HPP
+
+#include <boost/intrusive/detail/config_begin.hpp>
+#include <boost/intrusive/detail/workaround.hpp>
+#include <boost/intrusive/pointer_rebind.hpp>
+#include <boost/intrusive/detail/pointer_element.hpp>
+#include <boost/intrusive/detail/mpl.hpp>
+#include <cstddef>
+
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+namespace pdalboost {
+namespace intrusive {
+namespace detail {
+
+#if !defined(BOOST_MSVC) || (BOOST_MSVC > 1310)
+BOOST_INTRUSIVE_HAS_STATIC_MEMBER_FUNC_SIGNATURE(has_member_function_callable_with_pointer_to, pointer_to)
+BOOST_INTRUSIVE_HAS_STATIC_MEMBER_FUNC_SIGNATURE(has_member_function_callable_with_dynamic_cast_from, dynamic_cast_from)
+BOOST_INTRUSIVE_HAS_STATIC_MEMBER_FUNC_SIGNATURE(has_member_function_callable_with_static_cast_from, static_cast_from)
+BOOST_INTRUSIVE_HAS_STATIC_MEMBER_FUNC_SIGNATURE(has_member_function_callable_with_const_cast_from, const_cast_from)
+#else
+BOOST_INTRUSIVE_HAS_MEMBER_FUNC_CALLED_IGNORE_SIGNATURE(has_member_function_callable_with_pointer_to, pointer_to)
+BOOST_INTRUSIVE_HAS_MEMBER_FUNC_CALLED_IGNORE_SIGNATURE(has_member_function_callable_with_dynamic_cast_from, dynamic_cast_from)
+BOOST_INTRUSIVE_HAS_MEMBER_FUNC_CALLED_IGNORE_SIGNATURE(has_member_function_callable_with_static_cast_from, static_cast_from)
+BOOST_INTRUSIVE_HAS_MEMBER_FUNC_CALLED_IGNORE_SIGNATURE(has_member_function_callable_with_const_cast_from, const_cast_from)
+#endif
+
+BOOST_INTRUSIVE_INSTANTIATE_EVAL_DEFAULT_TYPE_TMPLT(element_type)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(difference_type)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(reference)
+BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(value_traits_ptr)
+
+}  //namespace detail {
+
+
+//! pointer_traits is the implementation of C++11 std::pointer_traits class with some
+//! extensions like castings.
+//!
+//! pointer_traits supplies a uniform interface to certain attributes of pointer-like types.
+//!
+//! <b>Note</b>: When defining a custom family of pointers or references to be used with BI
+//! library, make sure the public static conversion functions accessed through
+//! the `pointer_traits` interface (`*_cast_from` and `pointer_to`) can
+//! properly convert between const and nonconst referred member types
+//! <b>without the use of implicit constructor calls</b>. It is suggested these
+//! conversions be implemented as function templates, where the template
+//! argument is the type of the object being converted from.
+template <typename Ptr>
+struct pointer_traits
+{
+   #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+      //!The pointer type
+      //!queried by this pointer_traits instantiation
+      typedef Ptr             pointer;
+
+      //!Ptr::element_type if such a type exists; otherwise, T if Ptr is a class
+      //!template instantiation of the form SomePointer<T, Args>, where Args is zero or
+      //!more type arguments ; otherwise , the specialization is ill-formed.
+      typedef unspecified_type element_type;
+
+      //!Ptr::difference_type if such a type exists; otherwise,
+      //!std::ptrdiff_t.
+      typedef unspecified_type difference_type;
+
+      //!Ptr::rebind<U> if such a type exists; otherwise, SomePointer<U, Args> if Ptr is
+      //!a class template instantiation of the form SomePointer<T, Args>, where Args is zero or
+      //!more type arguments ; otherwise, the instantiation of rebind is ill-formed.
+      //!
+      //!For portable code for C++03 and C++11, <pre>typename rebind_pointer<U>::type</pre>
+      //!shall be used instead of rebind<U> to obtain a pointer to U.
+      template <class U> using rebind = unspecified;
+
+      //!Ptr::reference if such a type exists (non-standard extension); otherwise, element_type &
+      //!
+      typedef unspecified_type reference;
+   #else
+      typedef Ptr                                                             pointer;
+      //
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT
+         ( pdalboost::intrusive::detail::, Ptr, element_type
+         , pdalboost::intrusive::detail::first_param<Ptr>)                        element_type;
+      //
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT
+         (pdalboost::intrusive::detail::, Ptr, difference_type, std::ptrdiff_t)   difference_type;
+
+      typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT
+         (pdalboost::intrusive::detail::, Ptr, reference, typename pdalboost::intrusive::detail::unvoid_ref<element_type>::type)   reference;
+      //
+      template <class U> struct rebind_pointer
+      {
+         typedef typename pdalboost::intrusive::pointer_rebind<Ptr, U>::type  type;
+      };
+
+      #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
+         template <class U> using rebind = typename pdalboost::intrusive::pointer_rebind<Ptr, U>::type;
+      #endif
+   #endif   //#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
+
+   //! <b>Remark</b>: If element_type is (possibly cv-qualified) void, r type is unspecified; otherwise,
+   //!   it is element_type &.
+   //!
+   //! <b>Returns</b>: A dereferenceable pointer to r obtained by calling Ptr::pointer_to(reference).
+   //!   Non-standard extension: If such function does not exist, returns pointer(addressof(r));
+   //!
+   //! <b>Note</b>: For non-conforming compilers only the existence of a member function called
+   //!   <code>pointer_to</code> is checked.
+   static pointer pointer_to(reference r)
+   {
+      //Non-standard extension, it does not require Ptr::pointer_to. If not present
+      //tries to converts &r to pointer.
+      const bool value = pdalboost::intrusive::detail::
+         has_member_function_callable_with_pointer_to
+            <Ptr, Ptr (*)(reference)>::value;
+      pdalboost::intrusive::detail::bool_<value> flag;
+      return pointer_traits::priv_pointer_to(flag, r);
+   }
+
+   //! <b>Remark</b>: Non-standard extension.
+   //!
+   //! <b>Returns</b>: A dereferenceable pointer to r obtained by calling the static template function
+   //!   Ptr::static_cast_from(UPpr/const UPpr &).
+   //!   If such function does not exist, returns pointer_to(static_cast<element_type&>(*uptr))
+   //!
+   //! <b>Note</b>: For non-conforming compilers only the existence of a member function called
+   //!   <code>static_cast_from</code> is checked.
+   template<class UPtr>
+   static pointer static_cast_from(const UPtr &uptr)
+   {
+      typedef const UPtr &RefArg;
+      const bool value = pdalboost::intrusive::detail::
+         has_member_function_callable_with_static_cast_from
+            <pointer, pointer(*)(RefArg)>::value
+         || pdalboost::intrusive::detail::
+               has_member_function_callable_with_static_cast_from
+                  <pointer, pointer(*)(UPtr)>::value;
+      return pointer_traits::priv_static_cast_from(pdalboost::intrusive::detail::bool_<value>(), uptr);
+   }
+
+   //! <b>Remark</b>: Non-standard extension.
+   //!
+   //! <b>Returns</b>: A dereferenceable pointer to r obtained by calling the static template function
+   //!   Ptr::const_cast_from<UPtr>(UPpr/const UPpr &).
+   //!   If such function does not exist, returns pointer_to(const_cast<element_type&>(*uptr))
+   //!
+   //! <b>Note</b>: For non-conforming compilers only the existence of a member function called
+   //!   <code>const_cast_from</code> is checked.
+   template<class UPtr>
+   static pointer const_cast_from(const UPtr &uptr)
+   {
+      typedef const UPtr &RefArg;
+      const bool value = pdalboost::intrusive::detail::
+         has_member_function_callable_with_const_cast_from
+            <pointer, pointer(*)(RefArg)>::value
+         || pdalboost::intrusive::detail::
+               has_member_function_callable_with_const_cast_from
+                  <pointer, pointer(*)(UPtr)>::value;
+      return pointer_traits::priv_const_cast_from(pdalboost::intrusive::detail::bool_<value>(), uptr);
+   }
+
+   //! <b>Remark</b>: Non-standard extension.
+   //!
+   //! <b>Returns</b>: A dereferenceable pointer to r obtained by calling the static template function
+   //!   Ptr::dynamic_cast_from<UPtr>(UPpr/const UPpr &).
+   //!   If such function does not exist, returns pointer_to(*dynamic_cast<element_type*>(&*uptr))
+   //!
+   //! <b>Note</b>: For non-conforming compilers only the existence of a member function called
+   //!   <code>dynamic_cast_from</code> is checked.
+   template<class UPtr>
+   static pointer dynamic_cast_from(const UPtr &uptr)
+   {
+      typedef const UPtr &RefArg;
+      const bool value = pdalboost::intrusive::detail::
+         has_member_function_callable_with_dynamic_cast_from
+            <pointer, pointer(*)(RefArg)>::value
+         || pdalboost::intrusive::detail::
+               has_member_function_callable_with_dynamic_cast_from
+                  <pointer, pointer(*)(UPtr)>::value;
+      return pointer_traits::priv_dynamic_cast_from(pdalboost::intrusive::detail::bool_<value>(), uptr);
+   }
+
+   ///@cond
+   private:
+   //priv_to_raw_pointer
+   template <class T>
+   static T* to_raw_pointer(T* p)
+   {  return p; }
+
+   template <class Pointer>
+   static typename pointer_traits<Pointer>::element_type*
+      to_raw_pointer(const Pointer &p)
+   {  return pointer_traits::to_raw_pointer(p.operator->());  }
+
+   //priv_pointer_to
+   static pointer priv_pointer_to(pdalboost::intrusive::detail::true_, reference r)
+   { return Ptr::pointer_to(r); }
+
+   static pointer priv_pointer_to(pdalboost::intrusive::detail::false_, reference r)
+   { return pointer(pdalboost::intrusive::detail::addressof(r)); }
+
+   //priv_static_cast_from
+   template<class UPtr>
+   static pointer priv_static_cast_from(pdalboost::intrusive::detail::true_, const UPtr &uptr)
+   { return Ptr::static_cast_from(uptr); }
+
+   template<class UPtr>
+   static pointer priv_static_cast_from(pdalboost::intrusive::detail::false_, const UPtr &uptr)
+   {  return uptr ? pointer_to(*static_cast<element_type*>(to_raw_pointer(uptr))) : pointer();  }
+
+   //priv_const_cast_from
+   template<class UPtr>
+   static pointer priv_const_cast_from(pdalboost::intrusive::detail::true_, const UPtr &uptr)
+   { return Ptr::const_cast_from(uptr); }
+
+   template<class UPtr>
+   static pointer priv_const_cast_from(pdalboost::intrusive::detail::false_, const UPtr &uptr)
+   {  return uptr ? pointer_to(const_cast<element_type&>(*uptr)) : pointer();  }
+
+   //priv_dynamic_cast_from
+   template<class UPtr>
+   static pointer priv_dynamic_cast_from(pdalboost::intrusive::detail::true_, const UPtr &uptr)
+   { return Ptr::dynamic_cast_from(uptr); }
+
+   template<class UPtr>
+   static pointer priv_dynamic_cast_from(pdalboost::intrusive::detail::false_, const UPtr &uptr)
+   {  return uptr ? pointer_to(dynamic_cast<element_type&>(*uptr)) : pointer();  }
+   ///@endcond
+};
+
+///@cond
+
+// Remove cv qualification from Ptr parameter to pointer_traits:
+template <typename Ptr>
+struct pointer_traits<const Ptr> : pointer_traits<Ptr> {};
+template <typename Ptr>
+struct pointer_traits<volatile Ptr> : pointer_traits<Ptr> { };
+template <typename Ptr>
+struct pointer_traits<const volatile Ptr> : pointer_traits<Ptr> { };
+// Remove reference from Ptr parameter to pointer_traits:
+template <typename Ptr>
+struct pointer_traits<Ptr&> : pointer_traits<Ptr> { };
+
+///@endcond
+
+//! Specialization of pointer_traits for raw pointers
+//!
+template <typename T>
+struct pointer_traits<T*>
+{
+   typedef T            element_type;
+   typedef T*           pointer;
+   typedef std::ptrdiff_t difference_type;
+
+   #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
+      typedef T &          reference;
+      //!typedef for <pre>U *</pre>
+      //!
+      //!For portable code for C++03 and C++11, <pre>typename rebind_pointer<U>::type</pre>
+      //!shall be used instead of rebind<U> to obtain a pointer to U.
+      template <class U> using rebind = U*;
+   #else
+      typedef typename pdalboost::intrusive::detail::unvoid_ref<element_type>::type reference;
+      #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
+         template <class U> using rebind = U*;
+      #endif
+   #endif
+
+   template <class U> struct rebind_pointer
+   {  typedef U* type;  };
+
+   //! <b>Returns</b>: addressof(r)
+   //!
+   static pointer pointer_to(reference r)
+   { return pdalboost::intrusive::detail::addressof(r); }
+
+   //! <b>Returns</b>: static_cast<pointer>(uptr)
+   //!
+   template<class U>
+   static pointer static_cast_from(U *uptr)
+   {  return static_cast<pointer>(uptr);  }
+
+   //! <b>Returns</b>: const_cast<pointer>(uptr)
+   //!
+   template<class U>
+   static pointer const_cast_from(U *uptr)
+   {  return const_cast<pointer>(uptr);  }
+
+   //! <b>Returns</b>: dynamic_cast<pointer>(uptr)
+   //!
+   template<class U>
+   static pointer dynamic_cast_from(U *uptr)
+   {  return dynamic_cast<pointer>(uptr);  }
+};
+
+}  //namespace container {
+}  //namespace pdalboost {
+
+#include <boost/intrusive/detail/config_end.hpp>
+
+#endif // ! defined(BOOST_INTRUSIVE_POINTER_TRAITS_HPP)
diff --git a/vendor/pdalboost/boost/intrusive_ptr.hpp b/vendor/pdalboost/boost/intrusive_ptr.hpp
new file mode 100644
index 0000000..63036dc
--- /dev/null
+++ b/vendor/pdalboost/boost/intrusive_ptr.hpp
@@ -0,0 +1,18 @@
+#ifndef BOOST_INTRUSIVE_PTR_HPP_INCLUDED
+#define BOOST_INTRUSIVE_PTR_HPP_INCLUDED
+
+//
+//  intrusive_ptr.hpp
+//
+//  Copyright (c) 2001, 2002 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  See http://www.boost.org/libs/smart_ptr/intrusive_ptr.html for documentation.
+//
+
+#include <boost/smart_ptr/intrusive_ptr.hpp>
+
+#endif  // #ifndef BOOST_INTRUSIVE_PTR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/io/detail/quoted_manip.hpp b/vendor/pdalboost/boost/io/detail/quoted_manip.hpp
new file mode 100644
index 0000000..a96b3d6
--- /dev/null
+++ b/vendor/pdalboost/boost/io/detail/quoted_manip.hpp
@@ -0,0 +1,190 @@
+//  boost/io/quoted_manip.hpp  ---------------------------------------------------------//
+
+//  Copyright Beman Dawes 2010
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page http://www.boost.org/libs/io
+
+//--------------------------------------------------------------------------------------// 
+
+#ifndef BOOST_IO_QUOTED_MANIP
+#define BOOST_IO_QUOTED_MANIP
+
+#include <iosfwd>
+#include <ios>
+#include <string>
+#include <iterator>
+#include <boost/io/ios_state.hpp>
+
+namespace pdalboost
+{
+  namespace io
+  {
+    namespace detail { template <class String, class Char> struct quoted_proxy; }
+
+    //  ------------  public interface  ------------------------------------------------//
+
+    //  manipulator for const std::basic_string&
+    template <class Char, class Traits, class Alloc>
+      detail::quoted_proxy<std::basic_string<Char, Traits, Alloc> const &, Char>
+        quoted(const std::basic_string<Char, Traits, Alloc>& s,
+               Char escape='\\', Char delim='\"');
+
+    //  manipulator for non-const std::basic_string&
+    template <class Char, class Traits, class Alloc>
+      detail::quoted_proxy<std::basic_string<Char, Traits, Alloc> &, Char>
+        quoted(std::basic_string<Char, Traits, Alloc>& s,
+               Char escape='\\', Char delim='\"');
+
+    //  manipulator for const C-string*
+    template <class Char>
+      detail::quoted_proxy<const Char*, Char>
+        quoted(const Char* s, Char escape='\\', Char delim='\"');
+
+    //  -----------  implementation details  -------------------------------------------//
+
+    namespace detail
+    {
+      //  proxy used as an argument pack 
+      template <class String, class Char>
+      struct quoted_proxy
+      {
+        String  string;
+        Char    escape;
+        Char    delim;
+
+        quoted_proxy(String s_, Char escape_, Char delim_)
+          : string(s_), escape(escape_), delim(delim_) {}
+      private:
+        // String may be a const type, so disable the assignment operator
+        quoted_proxy& operator=(const quoted_proxy&);  // = deleted
+      };
+
+      //  abstract away difference between proxies with const or non-const basic_strings
+      template <class Char, class Traits, class Alloc>
+      std::basic_ostream<Char, Traits>&
+      basic_string_inserter_imp(std::basic_ostream<Char, Traits>& os,
+        std::basic_string<Char, Traits, Alloc> const & string, Char escape, Char delim)
+      {
+        os << delim;
+        typename std::basic_string<Char, Traits, Alloc>::const_iterator
+          end_it = string.end();
+        for (typename std::basic_string<Char, Traits, Alloc>::const_iterator
+          it = string.begin();
+          it != end_it;
+          ++it )
+        {
+          if (*it == delim || *it == escape)
+            os << escape;
+          os << *it;
+        }
+        os << delim;
+        return os;
+      }
+
+      //  inserter for const std::basic_string& proxies
+      template <class Char, class Traits, class Alloc>
+      inline
+      std::basic_ostream<Char, Traits>& operator<<(std::basic_ostream<Char, Traits>& os, 
+        const quoted_proxy<std::basic_string<Char, Traits, Alloc> const &, Char>& proxy)
+      {
+        return basic_string_inserter_imp(os, proxy.string, proxy.escape, proxy.delim);
+      }
+
+      //  inserter for non-const std::basic_string& proxies
+      template <class Char, class Traits, class Alloc>
+      inline
+      std::basic_ostream<Char, Traits>& operator<<(std::basic_ostream<Char, Traits>& os, 
+        const quoted_proxy<std::basic_string<Char, Traits, Alloc>&, Char>& proxy)
+      {
+        return basic_string_inserter_imp(os, proxy.string, proxy.escape, proxy.delim);
+      }
+ 
+      //  inserter for const C-string* proxies
+      template <class Char, class Traits>
+      std::basic_ostream<Char, Traits>& operator<<(std::basic_ostream<Char, Traits>& os, 
+        const quoted_proxy<const Char*, Char>& proxy)
+      {
+        os << proxy.delim;
+        for (const Char* it = proxy.string;
+          *it;
+          ++it )
+        {
+          if (*it == proxy.delim || *it == proxy.escape)
+            os << proxy.escape;
+          os << *it;
+        }
+        os << proxy.delim;
+        return os;
+      }
+
+      //  extractor for non-const std::basic_string& proxies
+      template <class Char, class Traits, class Alloc>
+      std::basic_istream<Char, Traits>& operator>>(std::basic_istream<Char, Traits>& is, 
+        const quoted_proxy<std::basic_string<Char, Traits, Alloc>&, Char>& proxy)
+      {
+        proxy.string.clear();
+        Char c;
+        is >> c;
+        if (c != proxy.delim)
+        {
+          is.unget();
+          is >> proxy.string;
+          return is;
+        }
+        {
+          pdalboost::io::ios_flags_saver ifs(is);
+          is >> std::noskipws;
+          for (;;)  
+          {
+            is >> c;
+            if (!is.good())  // cope with I/O errors or end-of-file
+              break;
+            if (c == proxy.escape)
+            {
+              is >> c;
+              if (!is.good())  // cope with I/O errors or end-of-file
+                break;
+            }
+            else if (c == proxy.delim)
+              break;
+            proxy.string += c;
+          }
+        }
+        return is;
+      }
+
+    }  // namespace detail
+
+    //  manipulator implementation for const std::basic_string&
+    template <class Char, class Traits, class Alloc>
+    inline detail::quoted_proxy<std::basic_string<Char, Traits, Alloc> const &, Char>
+    quoted(const std::basic_string<Char, Traits, Alloc>& s, Char escape, Char delim)
+    {
+      return detail::quoted_proxy<std::basic_string<Char, Traits, Alloc> const &, Char>
+        (s, escape, delim);
+    }
+
+    //  manipulator implementation for non-const std::basic_string&
+    template <class Char, class Traits, class Alloc>
+    inline detail::quoted_proxy<std::basic_string<Char, Traits, Alloc> &, Char>
+    quoted(std::basic_string<Char, Traits, Alloc>& s, Char escape, Char delim)
+    {
+      return detail::quoted_proxy<std::basic_string<Char, Traits, Alloc>&, Char>
+        (s, escape, delim);
+    }
+
+    //  manipulator implementation for const C-string*
+    template <class Char>
+    inline detail::quoted_proxy<const Char*, Char>
+    quoted(const Char* s, Char escape, Char delim)
+    {
+      return detail::quoted_proxy<const Char*, Char> (s, escape, delim);
+    }
+
+  }  // namespace io
+}  // namespace pdalboost
+
+#endif // BOOST_IO_QUOTED_MANIP
diff --git a/vendor/pdalboost/boost/io/ios_state.hpp b/vendor/pdalboost/boost/io/ios_state.hpp
new file mode 100644
index 0000000..3335e8e
--- /dev/null
+++ b/vendor/pdalboost/boost/io/ios_state.hpp
@@ -0,0 +1,439 @@
+//  Boost io/ios_state.hpp header file  --------------------------------------//
+
+//  Copyright 2002, 2005 Daryle Walker.  Use, modification, and distribution
+//  are subject to the Boost Software License, Version 1.0.  (See accompanying
+//  file LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+//  See <http://www.boost.org/libs/io/> for the library's home page.
+
+#ifndef BOOST_IO_IOS_STATE_HPP
+#define BOOST_IO_IOS_STATE_HPP
+
+#include <boost/io_fwd.hpp>  // self include
+#include <boost/detail/workaround.hpp>
+
+#include <ios>        // for std::ios_base, std::basic_ios, etc.
+#ifndef BOOST_NO_STD_LOCALE
+#include <locale>     // for std::locale
+#endif
+#include <ostream>    // for std::basic_ostream
+#include <streambuf>  // for std::basic_streambuf
+#include <string>     // for std::char_traits
+
+
+namespace pdalboost
+{
+namespace io
+{
+
+
+//  Basic stream state saver class declarations  -----------------------------//
+
+class ios_flags_saver
+{
+public:
+    typedef ::std::ios_base            state_type;
+    typedef ::std::ios_base::fmtflags  aspect_type;
+
+    explicit  ios_flags_saver( state_type &s )
+        : s_save_( s ), a_save_( s.flags() )
+        {}
+    ios_flags_saver( state_type &s, aspect_type const &a )
+        : s_save_( s ), a_save_( s.flags(a) )
+        {}
+    ~ios_flags_saver()
+        { this->restore(); }
+
+    void  restore()
+        { s_save_.flags( a_save_ ); }
+
+private:
+    state_type &       s_save_;
+    aspect_type const  a_save_;
+
+    ios_flags_saver& operator=(const ios_flags_saver&);
+};
+
+class ios_precision_saver
+{
+public:
+    typedef ::std::ios_base    state_type;
+    typedef ::std::streamsize  aspect_type;
+
+    explicit  ios_precision_saver( state_type &s )
+        : s_save_( s ), a_save_( s.precision() )
+        {}
+    ios_precision_saver( state_type &s, aspect_type const &a )
+        : s_save_( s ), a_save_( s.precision(a) )
+        {}
+    ~ios_precision_saver()
+        { this->restore(); }
+
+    void  restore()
+        { s_save_.precision( a_save_ ); }
+
+private:
+    state_type &       s_save_;
+    aspect_type const  a_save_;
+
+    ios_precision_saver& operator=(const ios_precision_saver&);
+};
+
+class ios_width_saver
+{
+public:
+    typedef ::std::ios_base    state_type;
+    typedef ::std::streamsize  aspect_type;
+
+    explicit  ios_width_saver( state_type &s )
+        : s_save_( s ), a_save_( s.width() )
+        {}
+    ios_width_saver( state_type &s, aspect_type const &a )
+        : s_save_( s ), a_save_( s.width(a) )
+        {}
+    ~ios_width_saver()
+        { this->restore(); }
+
+    void  restore()
+        { s_save_.width( a_save_ ); }
+
+private:
+    state_type &       s_save_;
+    aspect_type const  a_save_;
+    ios_width_saver& operator=(const ios_width_saver&);
+};
+
+
+//  Advanced stream state saver class template declarations  -----------------//
+
+template < typename Ch, class Tr >
+class basic_ios_iostate_saver
+{
+public:
+    typedef ::std::basic_ios<Ch, Tr>  state_type;
+    typedef ::std::ios_base::iostate  aspect_type;
+
+    explicit  basic_ios_iostate_saver( state_type &s )
+        : s_save_( s ), a_save_( s.rdstate() )
+        {}
+    basic_ios_iostate_saver( state_type &s, aspect_type const &a )
+        : s_save_( s ), a_save_( s.rdstate() )
+        { s.clear(a); }
+    ~basic_ios_iostate_saver()
+        { this->restore(); }
+
+    void  restore()
+        { s_save_.clear( a_save_ ); }
+
+private:
+    state_type &       s_save_;
+    aspect_type const  a_save_;
+    basic_ios_iostate_saver& operator=(const basic_ios_iostate_saver&);
+};
+
+template < typename Ch, class Tr >
+class basic_ios_exception_saver
+{
+public:
+    typedef ::std::basic_ios<Ch, Tr>  state_type;
+    typedef ::std::ios_base::iostate  aspect_type;
+
+    explicit  basic_ios_exception_saver( state_type &s )
+        : s_save_( s ), a_save_( s.exceptions() )
+        {}
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+    basic_ios_exception_saver( state_type &s, aspect_type a )
+#else
+    basic_ios_exception_saver( state_type &s, aspect_type const &a )
+#endif
+        : s_save_( s ), a_save_( s.exceptions() )
+        { s.exceptions(a); }
+    ~basic_ios_exception_saver()
+        { this->restore(); }
+
+    void  restore()
+        { s_save_.exceptions( a_save_ ); }
+
+private:
+    state_type &       s_save_;
+    aspect_type const  a_save_;
+    basic_ios_exception_saver& operator=(const basic_ios_exception_saver&);
+};
+
+template < typename Ch, class Tr >
+class basic_ios_tie_saver
+{
+public:
+    typedef ::std::basic_ios<Ch, Tr>        state_type;
+    typedef ::std::basic_ostream<Ch, Tr> *  aspect_type;
+
+    explicit  basic_ios_tie_saver( state_type &s )
+        : s_save_( s ), a_save_( s.tie() )
+        {}
+    basic_ios_tie_saver( state_type &s, aspect_type const &a )
+        : s_save_( s ), a_save_( s.tie(a) )
+        {}
+    ~basic_ios_tie_saver()
+        { this->restore(); }
+
+    void  restore()
+        { s_save_.tie( a_save_ ); }
+
+private:
+    state_type &       s_save_;
+    aspect_type const  a_save_;
+    basic_ios_tie_saver& operator=(const basic_ios_tie_saver&);
+};
+
+template < typename Ch, class Tr >
+class basic_ios_rdbuf_saver
+{
+public:
+    typedef ::std::basic_ios<Ch, Tr>          state_type;
+    typedef ::std::basic_streambuf<Ch, Tr> *  aspect_type;
+
+    explicit  basic_ios_rdbuf_saver( state_type &s )
+        : s_save_( s ), a_save_( s.rdbuf() )
+        {}
+    basic_ios_rdbuf_saver( state_type &s, aspect_type const &a )
+        : s_save_( s ), a_save_( s.rdbuf(a) )
+        {}
+    ~basic_ios_rdbuf_saver()
+        { this->restore(); }
+
+    void  restore()
+        { s_save_.rdbuf( a_save_ ); }
+
+private:
+    state_type &       s_save_;
+    aspect_type const  a_save_;
+    basic_ios_rdbuf_saver& operator=(const basic_ios_rdbuf_saver&);
+};
+
+template < typename Ch, class Tr >
+class basic_ios_fill_saver
+{
+public:
+    typedef ::std::basic_ios<Ch, Tr>        state_type;
+    typedef typename state_type::char_type  aspect_type;
+
+    explicit  basic_ios_fill_saver( state_type &s )
+        : s_save_( s ), a_save_( s.fill() )
+        {}
+    basic_ios_fill_saver( state_type &s, aspect_type const &a )
+        : s_save_( s ), a_save_( s.fill(a) )
+        {}
+    ~basic_ios_fill_saver()
+        { this->restore(); }
+
+    void  restore()
+        { s_save_.fill( a_save_ ); }
+
+private:
+    state_type &       s_save_;
+    aspect_type const  a_save_;
+    basic_ios_fill_saver& operator=(const basic_ios_fill_saver&);
+};
+
+#ifndef BOOST_NO_STD_LOCALE
+template < typename Ch, class Tr >
+class basic_ios_locale_saver
+{
+public:
+    typedef ::std::basic_ios<Ch, Tr> state_type;
+    typedef ::std::locale aspect_type;
+
+    explicit basic_ios_locale_saver( state_type &s )
+        : s_save_( s ), a_save_( s.getloc() )
+        {}
+    basic_ios_locale_saver( state_type &s, aspect_type const &a )
+        : s_save_( s ), a_save_( s.imbue(a) )
+        {}
+    ~basic_ios_locale_saver()
+        { this->restore(); }
+
+    void  restore()
+        { s_save_.imbue( a_save_ ); }
+
+private:
+    state_type &       s_save_;
+    aspect_type const  a_save_;
+    basic_ios_locale_saver& operator=(const basic_ios_locale_saver&);
+};
+#endif
+
+
+//  User-defined stream state saver class declarations  ----------------------//
+
+class ios_iword_saver
+{
+public:
+    typedef ::std::ios_base  state_type;
+    typedef int              index_type;
+    typedef long             aspect_type;
+
+    explicit ios_iword_saver( state_type &s, index_type i )
+        : s_save_( s ), a_save_( s.iword(i) ), i_save_( i )
+        {}
+    ios_iword_saver( state_type &s, index_type i, aspect_type const &a )
+        : s_save_( s ), a_save_( s.iword(i) ), i_save_( i )
+        { s.iword(i) = a; }
+    ~ios_iword_saver()
+        { this->restore(); }
+
+    void  restore()
+        { s_save_.iword( i_save_ ) = a_save_; }
+
+private:
+    state_type &       s_save_;
+    aspect_type const  a_save_;
+    index_type const   i_save_;
+
+    ios_iword_saver& operator=(const ios_iword_saver&);
+};
+
+class ios_pword_saver
+{
+public:
+    typedef ::std::ios_base  state_type;
+    typedef int              index_type;
+    typedef void *           aspect_type;
+
+    explicit  ios_pword_saver( state_type &s, index_type i )
+        : s_save_( s ), a_save_( s.pword(i) ), i_save_( i )
+        {}
+    ios_pword_saver( state_type &s, index_type i, aspect_type const &a )
+        : s_save_( s ), a_save_( s.pword(i) ), i_save_( i )
+        { s.pword(i) = a; }
+    ~ios_pword_saver()
+        { this->restore(); }
+
+    void  restore()
+        { s_save_.pword( i_save_ ) = a_save_; }
+
+private:
+    state_type &       s_save_;
+    aspect_type const  a_save_;
+    index_type const   i_save_;
+
+    ios_pword_saver operator=(const ios_pword_saver&);
+};
+
+
+//  Combined stream state saver class (template) declarations  ---------------//
+
+class ios_base_all_saver
+{
+public:
+    typedef ::std::ios_base  state_type;
+
+    explicit  ios_base_all_saver( state_type &s )
+        : s_save_( s ), a1_save_( s.flags() ), a2_save_( s.precision() )
+        , a3_save_( s.width() )
+        {}
+
+    ~ios_base_all_saver()
+        { this->restore(); }
+
+    void  restore()
+    {
+        s_save_.width( a3_save_ );
+        s_save_.precision( a2_save_ );
+        s_save_.flags( a1_save_ );
+    }
+
+private:
+    state_type &                s_save_;
+    state_type::fmtflags const  a1_save_;
+    ::std::streamsize const     a2_save_;
+    ::std::streamsize const     a3_save_;
+
+    ios_base_all_saver& operator=(const ios_base_all_saver&);
+};
+
+template < typename Ch, class Tr >
+class basic_ios_all_saver
+{
+public:
+    typedef ::std::basic_ios<Ch, Tr>  state_type;
+
+    explicit  basic_ios_all_saver( state_type &s )
+        : s_save_( s ), a1_save_( s.flags() ), a2_save_( s.precision() )
+        , a3_save_( s.width() ), a4_save_( s.rdstate() )
+        , a5_save_( s.exceptions() ), a6_save_( s.tie() )
+        , a7_save_( s.rdbuf() ), a8_save_( s.fill() )
+        #ifndef BOOST_NO_STD_LOCALE
+        , a9_save_( s.getloc() )
+        #endif
+        {}
+
+    ~basic_ios_all_saver()
+        { this->restore(); }
+
+    void  restore()
+    {
+        #ifndef BOOST_NO_STD_LOCALE
+        s_save_.imbue( a9_save_ );
+        #endif
+        s_save_.fill( a8_save_ );
+        s_save_.rdbuf( a7_save_ );
+        s_save_.tie( a6_save_ );
+        s_save_.exceptions( a5_save_ );
+        s_save_.clear( a4_save_ );
+        s_save_.width( a3_save_ );
+        s_save_.precision( a2_save_ );
+        s_save_.flags( a1_save_ );
+    }
+
+private:
+    state_type &                            s_save_;
+    typename state_type::fmtflags const     a1_save_;
+    ::std::streamsize const                 a2_save_;
+    ::std::streamsize const                 a3_save_;
+    typename state_type::iostate const      a4_save_;
+    typename state_type::iostate const      a5_save_;
+    ::std::basic_ostream<Ch, Tr> * const    a6_save_;
+    ::std::basic_streambuf<Ch, Tr> * const  a7_save_;
+    typename state_type::char_type const    a8_save_;
+    #ifndef BOOST_NO_STD_LOCALE
+    ::std::locale const                     a9_save_;
+    #endif
+
+    basic_ios_all_saver& operator=(const basic_ios_all_saver&);
+};
+
+class ios_all_word_saver
+{
+public:
+    typedef ::std::ios_base  state_type;
+    typedef int              index_type;
+
+    ios_all_word_saver( state_type &s, index_type i )
+        : s_save_( s ), i_save_( i ), a1_save_( s.iword(i) )
+        , a2_save_( s.pword(i) )
+        {}
+
+    ~ios_all_word_saver()
+        { this->restore(); }
+
+    void  restore()
+    {
+        s_save_.pword( i_save_ ) = a2_save_;
+        s_save_.iword( i_save_ ) = a1_save_;
+    }
+
+private:
+    state_type &      s_save_;
+    index_type const  i_save_;
+    long const        a1_save_;
+    void * const      a2_save_;
+
+    ios_all_word_saver& operator=(const ios_all_word_saver&);
+};
+
+
+}  // namespace io
+}  // namespace pdalboost
+
+
+#endif  // BOOST_IO_IOS_STATE_HPP
diff --git a/vendor/pdalboost/boost/io_fwd.hpp b/vendor/pdalboost/boost/io_fwd.hpp
new file mode 100644
index 0000000..398a031
--- /dev/null
+++ b/vendor/pdalboost/boost/io_fwd.hpp
@@ -0,0 +1,67 @@
+//  Boost io_fwd.hpp header file  --------------------------------------------//
+
+//  Copyright 2002 Daryle Walker.  Use, modification, and distribution are subject
+//  to the Boost Software License, Version 1.0.  (See accompanying file
+//  LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+//  See <http://www.boost.org/libs/io/> for the library's home page.
+
+#ifndef BOOST_IO_FWD_HPP
+#define BOOST_IO_FWD_HPP
+
+#include <iosfwd>  // for std::char_traits (declaration)
+
+
+namespace pdalboost
+{
+namespace io
+{
+
+
+//  From <boost/io/ios_state.hpp>  -------------------------------------------//
+
+class ios_flags_saver;
+class ios_precision_saver;
+class ios_width_saver;
+class ios_base_all_saver;
+
+template < typename Ch, class Tr = ::std::char_traits<Ch> >
+    class basic_ios_iostate_saver;
+template < typename Ch, class Tr = ::std::char_traits<Ch> >
+    class basic_ios_exception_saver;
+template < typename Ch, class Tr = ::std::char_traits<Ch> >
+    class basic_ios_tie_saver;
+template < typename Ch, class Tr = ::std::char_traits<Ch> >
+    class basic_ios_rdbuf_saver;
+template < typename Ch, class Tr = ::std::char_traits<Ch> >
+    class basic_ios_fill_saver;
+template < typename Ch, class Tr = ::std::char_traits<Ch> >
+    class basic_ios_locale_saver;
+template < typename Ch, class Tr = ::std::char_traits<Ch> >
+    class basic_ios_all_saver;
+
+typedef basic_ios_iostate_saver<char>        ios_iostate_saver;
+typedef basic_ios_iostate_saver<wchar_t>    wios_iostate_saver;
+typedef basic_ios_exception_saver<char>      ios_exception_saver;
+typedef basic_ios_exception_saver<wchar_t>  wios_exception_saver;
+typedef basic_ios_tie_saver<char>            ios_tie_saver;
+typedef basic_ios_tie_saver<wchar_t>        wios_tie_saver;
+typedef basic_ios_rdbuf_saver<char>          ios_rdbuf_saver;
+typedef basic_ios_rdbuf_saver<wchar_t>      wios_rdbuf_saver;
+typedef basic_ios_fill_saver<char>           ios_fill_saver;
+typedef basic_ios_fill_saver<wchar_t>       wios_fill_saver;
+typedef basic_ios_locale_saver<char>         ios_locale_saver;
+typedef basic_ios_locale_saver<wchar_t>     wios_locale_saver;
+typedef basic_ios_all_saver<char>            ios_all_saver;
+typedef basic_ios_all_saver<wchar_t>        wios_all_saver;
+
+class ios_iword_saver;
+class ios_pword_saver;
+class ios_all_word_saver;
+
+
+}  // namespace io
+}  // namespace pdalboost
+
+
+#endif  // BOOST_IO_FWD_HPP
diff --git a/vendor/pdalboost/boost/iostreams/categories.hpp b/vendor/pdalboost/boost/iostreams/categories.hpp
new file mode 100644
index 0000000..e2120d2
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/categories.hpp
@@ -0,0 +1,175 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains category and mode tags for classifying filters, devices and 
+// standard stream and stream buffers types.
+
+#ifndef BOOST_IOSTREAMS_CATEGORIES_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CATEGORIES_HPP_INCLUDED 
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+namespace pdalboost { namespace iostreams {
+
+//------------------Tags for dispatch according to i/o mode-------------------//
+
+struct any_tag { };
+namespace detail { struct two_sequence : virtual any_tag { }; }
+namespace detail { struct random_access : virtual any_tag { }; }
+namespace detail { struct one_head : virtual any_tag { }; }
+namespace detail { struct two_head : virtual any_tag { }; }
+struct input : virtual any_tag { };
+struct output : virtual any_tag { };
+struct bidirectional : virtual input, virtual output, detail::two_sequence { };
+struct dual_use : virtual input, virtual output { }; // Pseudo-mode.
+struct input_seekable : virtual input, virtual detail::random_access { };
+struct output_seekable : virtual output, virtual detail::random_access { };
+struct seekable
+    : virtual input_seekable, 
+      virtual output_seekable,
+      detail::one_head
+    { };
+struct dual_seekable
+    : virtual input_seekable,
+      virtual output_seekable,
+      detail::two_head
+    { };  
+struct bidirectional_seekable
+    : input_seekable, output_seekable,
+      bidirectional, detail::two_head
+    { };
+
+//------------------Tags for use as i/o categories----------------------------//
+
+struct device_tag : virtual any_tag { };
+struct filter_tag : virtual any_tag { };
+
+    // 
+    // Tags for optional behavior.
+    //
+
+struct peekable_tag : virtual any_tag { };        // Devices.
+struct closable_tag : virtual any_tag { };
+struct flushable_tag : virtual any_tag { };
+struct localizable_tag : virtual any_tag { };
+struct optimally_buffered_tag : virtual any_tag { };
+struct direct_tag : virtual any_tag { };          // Devices.
+struct multichar_tag : virtual any_tag { };       // Filters.
+
+struct source_tag : device_tag, input { };
+struct sink_tag : device_tag, output { };
+struct bidirectional_device_tag : device_tag, bidirectional { };
+struct seekable_device_tag : virtual device_tag, seekable { };
+
+struct input_filter_tag : filter_tag, input { };
+struct output_filter_tag : filter_tag, output { };
+struct bidirectional_filter_tag : filter_tag, bidirectional { };
+struct seekable_filter_tag : filter_tag, seekable { };
+struct dual_use_filter_tag : filter_tag, dual_use { };
+
+struct multichar_input_filter_tag
+    : multichar_tag,
+      input_filter_tag
+    { };
+struct multichar_output_filter_tag
+    : multichar_tag,
+      output_filter_tag
+    { };
+struct multichar_bidirectional_filter_tag
+    : multichar_tag,
+      bidirectional_filter_tag
+    { };
+struct multichar_seekable_filter_tag
+    : multichar_tag,
+      seekable_filter_tag
+    { };
+struct multichar_dual_use_filter_tag 
+    : multichar_tag, 
+      dual_use_filter_tag
+    { };
+
+    //
+    // Tags for standard streams and streambufs.
+    //
+
+struct std_io_tag : virtual localizable_tag { };
+struct istream_tag
+    : virtual device_tag,
+      virtual peekable_tag,
+      virtual std_io_tag
+    { };
+struct ostream_tag
+    : virtual device_tag,
+      virtual std_io_tag
+    { };
+struct iostream_tag
+    : istream_tag,
+      ostream_tag
+    { };
+struct streambuf_tag
+    : device_tag,
+      peekable_tag,
+      std_io_tag
+    { };
+struct ifstream_tag
+    : input_seekable,
+      closable_tag,
+      istream_tag
+    { };
+struct ofstream_tag
+    : output_seekable,
+      closable_tag,
+      ostream_tag
+    { };
+struct fstream_tag
+    : seekable,
+      closable_tag,
+      iostream_tag
+    { };
+struct filebuf_tag
+    : seekable,
+      closable_tag,
+      streambuf_tag
+    { };
+struct istringstream_tag
+    : input_seekable,
+      istream_tag
+    { };
+struct ostringstream_tag
+    : output_seekable,
+      ostream_tag
+    { };
+struct stringstream_tag
+    : dual_seekable,
+      iostream_tag
+    { };
+struct stringbuf_tag
+    : dual_seekable,
+      streambuf_tag
+    { };
+struct generic_istream_tag 
+    : input_seekable,
+      istream_tag
+    { };
+struct generic_ostream_tag 
+    : output_seekable,
+      ostream_tag
+    { };
+struct generic_iostream_tag 
+    : seekable,
+      iostream_tag
+    { };
+struct generic_streambuf_tag 
+    : seekable,
+      streambuf_tag
+    { };
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_CATEGORIES_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/chain.hpp b/vendor/pdalboost/boost/iostreams/chain.hpp
new file mode 100644
index 0000000..049b667
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/chain.hpp
@@ -0,0 +1,598 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CHAIN_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CHAIN_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <exception>
+#include <functional>                           // unary_function.
+#include <iterator>                             // advance.
+#include <list>
+#include <memory>                               // allocator, auto_ptr.
+#include <typeinfo>
+#include <stdexcept>                            // logic_error, out_of_range.
+#include <boost/checked_delete.hpp>
+#include <boost/config.hpp>                     // BOOST_MSVC, template friends,
+#include <boost/detail/workaround.hpp>          // BOOST_NESTED_TEMPLATE 
+#include <boost/iostreams/constants.hpp>
+#include <boost/iostreams/detail/access_control.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/push.hpp>
+#include <boost/iostreams/detail/streambuf.hpp> // pubsync.
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/device/null.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/iostreams/traits.hpp>           // is_filter.
+#include <boost/iostreams/stream_buffer.hpp>
+#include <boost/next_prior.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type.hpp>
+#include <boost/iostreams/detail/execute.hpp>   // VC6.5 requires this
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1310)        // #include order
+# include <boost/mpl/int.hpp>
+#endif
+
+// Sometimes type_info objects must be compared by name. Borrowed from
+// Boost.Python and Boost.Function.
+#if (defined(__GNUC__) && __GNUC__ >= 3) || \
+     defined(_AIX) || \
+    (defined(__sgi) && defined(__host_mips)) || \
+    (defined(linux) && defined(__INTEL_COMPILER) && defined(__ICC)) \
+    /**/
+# include <cstring>
+# define BOOST_IOSTREAMS_COMPARE_TYPE_ID(X,Y) \
+     (std::strcmp((X).name(),(Y).name()) == 0)
+#else
+# define BOOST_IOSTREAMS_COMPARE_TYPE_ID(X,Y) ((X)==(Y))
+#endif
+
+// Deprecated
+#define BOOST_IOSTREAMS_COMPONENT_TYPE(chain, index) \
+    chain.component_type( index ) \
+    /**/
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+# define BOOST_IOSTREAMS_COMPONENT(chain, index, target) \
+    chain.component< target >( index ) \
+    /**/
+#else
+# define BOOST_IOSTREAMS_COMPONENT(chain, index, target) \
+    chain.component( index, ::pdalboost::type< target >() ) \
+    /**/
+#endif
+
+namespace pdalboost { namespace iostreams {
+
+//--------------Definition of chain and wchain--------------------------------//
+
+namespace detail {
+
+template<typename Chain> class chain_client;
+
+//
+// Concept name: Chain.
+// Description: Represents a chain of stream buffers which provides access
+//     to the first buffer in the chain and sends notifications when the
+//     streambufs are added to or removed from chain.
+// Refines: Closable device with mode equal to typename Chain::mode.
+// Models: chain, converting_chain.
+// Example:
+//
+//    class chain {
+//    public:
+//        typedef xxx chain_type;
+//        typedef xxx client_type;
+//        typedef xxx mode;
+//        bool is_complete() const;                  // Ready for i/o.
+//        template<typename T>
+//        void push( const T& t,                     // Adds a stream buffer to
+//                   streamsize,                     // chain, based on t, with
+//                   streamsize );                   // given buffer and putback
+//                                                   // buffer sizes. Pass -1 to
+//                                                   // request default size.
+//    protected:
+//        void register_client(client_type* client); // Associate client.
+//        void notify();                             // Notify client.
+//    };
+//
+
+//
+// Description: Represents a chain of filters with an optional device at the
+//      end.
+// Template parameters:
+//      Self - A class deriving from the current instantiation of this template.
+//          This is an example of the Curiously Recurring Template Pattern.
+//      Ch - The character type.
+//      Tr - The character traits type.
+//      Alloc - The allocator type.
+//      Mode - A mode tag.
+//
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+class chain_base {
+public:
+    typedef Ch                                     char_type;
+    BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+    typedef Alloc                                  allocator_type;
+    typedef Mode                                   mode;
+    struct category
+        : Mode,
+          device_tag
+        { };
+    typedef chain_client<Self>                     client_type;
+    friend class chain_client<Self>;
+private:
+    typedef linked_streambuf<Ch>                   streambuf_type;
+    typedef std::list<streambuf_type*>             list_type;
+    typedef chain_base<Self, Ch, Tr, Alloc, Mode>  my_type;
+protected:
+    chain_base() : pimpl_(new chain_impl) { }
+    chain_base(const chain_base& rhs): pimpl_(rhs.pimpl_) { }
+public:
+
+    // dual_use is a pseudo-mode to facilitate filter writing, 
+    // not a genuine mode.
+    BOOST_STATIC_ASSERT((!is_convertible<mode, dual_use>::value));
+
+    //----------Buffer sizing-------------------------------------------------//
+
+    // Sets the size of the buffer created for the devices to be added to this
+    // chain. Does not affect the size of the buffer for devices already
+    // added.
+    void set_device_buffer_size(std::streamsize n) 
+        { pimpl_->device_buffer_size_ = n; }
+
+    // Sets the size of the buffer created for the filters to be added
+    // to this chain. Does not affect the size of the buffer for filters already
+    // added.
+    void set_filter_buffer_size(std::streamsize n) 
+        { pimpl_->filter_buffer_size_ = n; }
+
+    // Sets the size of the putback buffer for filters and devices to be added
+    // to this chain. Does not affect the size of the buffer for filters or
+    // devices already added.
+    void set_pback_size(std::streamsize n) 
+        { pimpl_->pback_size_ = n; }
+
+    //----------Device interface----------------------------------------------//
+
+    std::streamsize read(char_type* s, std::streamsize n);
+    std::streamsize write(const char_type* s, std::streamsize n);
+    std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
+
+    //----------Direct component access---------------------------------------//
+
+    const std::type_info& component_type(int n) const
+    {
+        if (static_cast<size_type>(n) >= size())
+            pdalboost::throw_exception(std::out_of_range("bad chain offset"));
+        return (*pdalboost::next(list().begin(), n))->component_type();
+    }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+    // Deprecated.
+    template<int N>
+    const std::type_info& component_type() const { return component_type(N); }
+
+    template<typename T>
+    T* component(int n) const { return component(n, pdalboost::type<T>()); }
+
+    // Deprecated.
+    template<int N, typename T> 
+    T* component() const { return component<T>(N); }
+#endif
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+    private:
+#endif
+    template<typename T>
+    T* component(int n, pdalboost::type<T>) const
+    {
+        if (static_cast<size_type>(n) >= size())
+            pdalboost::throw_exception(std::out_of_range("bad chain offset"));
+        streambuf_type* link = *pdalboost::next(list().begin(), n);
+        if (BOOST_IOSTREAMS_COMPARE_TYPE_ID(link->component_type(), typeid(T)))
+            return static_cast<T*>(link->component_impl());
+        else
+            return 0;
+    }
+public:
+
+    //----------Container-like interface--------------------------------------//
+
+    typedef typename list_type::size_type size_type;
+    streambuf_type& front() { return *list().front(); }
+    BOOST_IOSTREAMS_DEFINE_PUSH(push, mode, char_type, push_impl)
+    void pop();
+    bool empty() const { return list().empty(); }
+    size_type size() const { return list().size(); }
+    void reset();
+
+    //----------Additional i/o functions--------------------------------------//
+
+    // Returns true if this chain is non-empty and its final link
+    // is a source or sink, i.e., if it is ready to perform i/o.
+    bool is_complete() const;
+    bool auto_close() const;
+    void set_auto_close(bool close);
+    bool sync() { return front().BOOST_IOSTREAMS_PUBSYNC() != -1; }
+    bool strict_sync();
+private:
+    template<typename T>
+    void push_impl(const T& t, std::streamsize buffer_size = -1, 
+                   std::streamsize pback_size = -1)
+    {
+        typedef typename iostreams::category_of<T>::type  category;
+        typedef typename unwrap_ios<T>::type              component_type;
+        typedef stream_buffer<
+                    component_type,
+                    BOOST_IOSTREAMS_CHAR_TRAITS(char_type),
+                    Alloc, Mode
+                >                                         streambuf_t;
+        typedef typename list_type::iterator              iterator;
+        BOOST_STATIC_ASSERT((is_convertible<category, Mode>::value));
+        if (is_complete())
+            pdalboost::throw_exception(std::logic_error("chain complete"));
+        streambuf_type* prev = !empty() ? list().back() : 0;
+        buffer_size =
+            buffer_size != -1 ?
+                buffer_size :
+                iostreams::optimal_buffer_size(t);
+        pback_size =
+            pback_size != -1 ?
+                pback_size :
+                pimpl_->pback_size_;
+        std::auto_ptr<streambuf_t>
+            buf(new streambuf_t(t, buffer_size, pback_size));
+        list().push_back(buf.get());
+        buf.release();
+        if (is_device<component_type>::value) {
+            pimpl_->flags_ |= f_complete | f_open;
+            for ( iterator first = list().begin(),
+                           last = list().end();
+                  first != last;
+                  ++first )
+            {
+                (*first)->set_needs_close();
+            }
+        }
+        if (prev) prev->set_next(list().back());
+        notify();
+    }
+
+    list_type& list() { return pimpl_->links_; }
+    const list_type& list() const { return pimpl_->links_; }
+    void register_client(client_type* client) { pimpl_->client_ = client; }
+    void notify() { if (pimpl_->client_) pimpl_->client_->notify(); }
+
+    //----------Nested classes------------------------------------------------//
+
+    static void close(streambuf_type* b, BOOST_IOS::openmode m)
+    {
+        if (m == BOOST_IOS::out && is_convertible<Mode, output>::value)
+            b->BOOST_IOSTREAMS_PUBSYNC();
+        b->close(m);
+    }
+
+    static void set_next(streambuf_type* b, streambuf_type* next)
+    { b->set_next(next); }
+
+    static void set_auto_close(streambuf_type* b, bool close)
+    { b->set_auto_close(close); }
+
+    struct closer  : public std::unary_function<streambuf_type*, void>  {
+        closer(BOOST_IOS::openmode m) : mode_(m) { }
+        void operator() (streambuf_type* b)
+        {
+            close(b, mode_);
+        }
+        BOOST_IOS::openmode mode_;
+    };
+    friend struct closer;
+
+    enum flags {
+        f_complete = 1,
+        f_open = 2,
+        f_auto_close = 4
+    };
+
+    struct chain_impl {
+        chain_impl()
+            : client_(0), device_buffer_size_(default_device_buffer_size),
+              filter_buffer_size_(default_filter_buffer_size),
+              pback_size_(default_pback_buffer_size),
+              flags_(f_auto_close)
+            { }
+        ~chain_impl()
+            {
+                try { close(); } catch (...) { }
+                try { reset(); } catch (...) { }
+            }
+        void close()
+            {
+                if ((flags_ & f_open) != 0) {
+                    flags_ &= ~f_open;
+                    stream_buffer< basic_null_device<Ch, Mode> > null;
+                    if ((flags_ & f_complete) == 0) {
+                        null.open(basic_null_device<Ch, Mode>());
+                        set_next(links_.back(), &null);
+                    }
+                    links_.front()->BOOST_IOSTREAMS_PUBSYNC();
+                    try {
+                        pdalboost::iostreams::detail::execute_foreach(
+                            links_.rbegin(), links_.rend(), 
+                            closer(BOOST_IOS::in)
+                        );
+                    } catch (...) {
+                        try {
+                            pdalboost::iostreams::detail::execute_foreach(
+                                links_.begin(), links_.end(), 
+                                closer(BOOST_IOS::out)
+                            );
+                        } catch (...) { }
+                        throw;
+                    }
+                    pdalboost::iostreams::detail::execute_foreach(
+                        links_.begin(), links_.end(), 
+                        closer(BOOST_IOS::out)
+                    );
+                }
+            }
+        void reset()
+            {
+                typedef typename list_type::iterator iterator;
+                for ( iterator first = links_.begin(),
+                               last = links_.end();
+                      first != last;
+                      ++first )
+                {
+                    if ( (flags_ & f_complete) == 0 ||
+                         (flags_ & f_auto_close) == 0 )
+                    {
+                        set_auto_close(*first, false);
+                    }
+                    streambuf_type* buf = 0;
+                    std::swap(buf, *first);
+                    delete buf;
+                }
+                links_.clear();
+                flags_ &= ~f_complete;
+                flags_ &= ~f_open;
+            }
+        list_type        links_;
+        client_type*     client_;
+        std::streamsize  device_buffer_size_,
+                         filter_buffer_size_,
+                         pback_size_;
+        int              flags_;
+    };
+    friend struct chain_impl;
+
+    //----------Member data---------------------------------------------------//
+
+private:
+    shared_ptr<chain_impl> pimpl_;
+};
+
+} // End namespace detail.
+
+//
+// Macro: BOOST_IOSTREAMS_DECL_CHAIN(name, category)
+// Description: Defines a template derived from chain_base appropriate for a
+//      particular i/o category. The template has the following parameters:
+//      Ch - The character type.
+//      Tr - The character traits type.
+//      Alloc - The allocator type.
+// Macro parameters:
+//      name_ - The name of the template to be defined.
+//      category_ - The i/o category of the template to be defined.
+//
+#define BOOST_IOSTREAMS_DECL_CHAIN(name_, default_char_) \
+    template< typename Mode, typename Ch = default_char_, \
+              typename Tr = BOOST_IOSTREAMS_CHAR_TRAITS(Ch), \
+              typename Alloc = std::allocator<Ch> > \
+    class name_ : public pdalboost::iostreams::detail::chain_base< \
+                            name_<Mode, Ch, Tr, Alloc>, \
+                            Ch, Tr, Alloc, Mode \
+                         > \
+    { \
+    public: \
+        struct category : device_tag, Mode { }; \
+        typedef Mode                                   mode; \
+    private: \
+        typedef pdalboost::iostreams::detail::chain_base< \
+                    name_<Mode, Ch, Tr, Alloc>, \
+                    Ch, Tr, Alloc, Mode \
+                >                                      base_type; \
+    public: \
+        typedef Ch                                     char_type; \
+        typedef Tr                                     traits_type; \
+        typedef typename traits_type::int_type         int_type; \
+        typedef typename traits_type::off_type         off_type; \
+        name_() { } \
+        name_(const name_& rhs) : base_type(rhs) { } \
+        name_& operator=(const name_& rhs) \
+        { base_type::operator=(rhs); return *this; } \
+    }; \
+    /**/
+BOOST_IOSTREAMS_DECL_CHAIN(chain, char)
+BOOST_IOSTREAMS_DECL_CHAIN(wchain, wchar_t)
+#undef BOOST_IOSTREAMS_DECL_CHAIN
+
+//--------------Definition of chain_client------------------------------------//
+
+namespace detail {
+
+//
+// Template name: chain_client
+// Description: Class whose instances provide access to an underlying chain
+//      using an interface similar to the chains.
+// Subclasses: the various stream and stream buffer templates.
+//
+template<typename Chain>
+class chain_client {
+public:
+    typedef Chain                             chain_type;
+    typedef typename chain_type::char_type    char_type;
+    typedef typename chain_type::traits_type  traits_type;
+    typedef typename chain_type::size_type    size_type;
+    typedef typename chain_type::mode         mode;
+
+    chain_client(chain_type* chn = 0) : chain_(chn ) { }
+    chain_client(chain_client* client) : chain_(client->chain_) { }
+    virtual ~chain_client() { }
+
+    const std::type_info& component_type(int n) const
+    { return chain_->component_type(n); }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+    // Deprecated.
+    template<int N>
+    const std::type_info& component_type() const
+    { return chain_->BOOST_NESTED_TEMPLATE component_type<N>(); }
+
+    template<typename T>
+    T* component(int n) const
+    { return chain_->BOOST_NESTED_TEMPLATE component<T>(n); }
+
+    // Deprecated.
+    template<int N, typename T>
+    T* component() const
+    { return chain_->BOOST_NESTED_TEMPLATE component<N, T>(); }
+#else
+    template<typename T>
+    T* component(int n, pdalboost::type<T> t) const
+    { return chain_->component(n, t); }
+#endif
+
+    bool is_complete() const { return chain_->is_complete(); }
+    bool auto_close() const { return chain_->auto_close(); }
+    void set_auto_close(bool close) { chain_->set_auto_close(close); }
+    bool strict_sync() { return chain_->strict_sync(); }
+    void set_device_buffer_size(std::streamsize n)
+        { chain_->set_device_buffer_size(n); }
+    void set_filter_buffer_size(std::streamsize n)
+        { chain_->set_filter_buffer_size(n); }
+    void set_pback_size(std::streamsize n) { chain_->set_pback_size(n); }
+    BOOST_IOSTREAMS_DEFINE_PUSH(push, mode, char_type, push_impl)
+    void pop() { chain_->pop(); }
+    bool empty() const { return chain_->empty(); }
+    size_type size() { return chain_->size(); }
+    void reset() { chain_->reset(); }
+
+    // Returns a copy of the underlying chain.
+    chain_type filters() { return *chain_; }
+    chain_type filters() const { return *chain_; }
+protected:
+    template<typename T>
+    void push_impl(const T& t BOOST_IOSTREAMS_PUSH_PARAMS())
+    { chain_->push(t BOOST_IOSTREAMS_PUSH_ARGS()); }
+    chain_type& ref() { return *chain_; }
+    void set_chain(chain_type* c)
+    { chain_ = c; chain_->register_client(this); }
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) && \
+    (!BOOST_WORKAROUND(__BORLANDC__, < 0x600))
+    template<typename S, typename C, typename T, typename A, typename M>
+    friend class chain_base;
+#else
+    public:
+#endif
+    virtual void notify() { }
+private:
+    chain_type* chain_;
+};
+
+//--------------Implementation of chain_base----------------------------------//
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+inline std::streamsize chain_base<Self, Ch, Tr, Alloc, Mode>::read
+    (char_type* s, std::streamsize n)
+{ return iostreams::read(*list().front(), s, n); }
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+inline std::streamsize chain_base<Self, Ch, Tr, Alloc, Mode>::write
+    (const char_type* s, std::streamsize n)
+{ return iostreams::write(*list().front(), s, n); }
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+inline std::streampos chain_base<Self, Ch, Tr, Alloc, Mode>::seek
+    (stream_offset off, BOOST_IOS::seekdir way)
+{ return iostreams::seek(*list().front(), off, way); }
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+void chain_base<Self, Ch, Tr, Alloc, Mode>::reset()
+{
+    using namespace std;
+    pimpl_->close();
+    pimpl_->reset();
+}
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+bool chain_base<Self, Ch, Tr, Alloc, Mode>::is_complete() const
+{
+    return (pimpl_->flags_ & f_complete) != 0;
+}
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+bool chain_base<Self, Ch, Tr, Alloc, Mode>::auto_close() const
+{
+    return (pimpl_->flags_ & f_auto_close) != 0;
+}
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+void chain_base<Self, Ch, Tr, Alloc, Mode>::set_auto_close(bool close)
+{
+    pimpl_->flags_ =
+        (pimpl_->flags_ & ~f_auto_close) |
+        (close ? f_auto_close : 0);
+}
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+bool chain_base<Self, Ch, Tr, Alloc, Mode>::strict_sync()
+{
+    typedef typename list_type::iterator iterator;
+    bool result = true;
+    for ( iterator first = list().begin(),
+                   last = list().end();
+          first != last;
+          ++first )
+    {
+        bool s = (*first)->strict_sync();
+        result = result && s;
+    }
+    return result;
+}
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+void chain_base<Self, Ch, Tr, Alloc, Mode>::pop()
+{
+    BOOST_ASSERT(!empty());
+    if (auto_close())
+        pimpl_->close();
+    streambuf_type* buf = 0;
+    std::swap(buf, list().back());
+    buf->set_auto_close(false);
+    buf->set_next(0);
+    delete buf;
+    list().pop_back();
+    pimpl_->flags_ &= ~f_complete;
+    if (auto_close() || list().empty())
+        pimpl_->flags_ &= ~f_open;
+}
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CHAIN_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/char_traits.hpp b/vendor/pdalboost/boost/iostreams/char_traits.hpp
new file mode 100644
index 0000000..f9581d8
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/char_traits.hpp
@@ -0,0 +1,73 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_CHAR_TRAITS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CHAR_TRAITS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif 
+
+#include <boost/config.hpp>
+#include <cstddef>
+#include <cstdio>  // EOF.
+#include <string>  // std::char_traits.
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+# include <cwchar>
+#endif
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::wint_t; }
+#endif
+
+namespace pdalboost { namespace iostreams {
+
+// Dinkumware that comes with QNX Momentics 6.3.0, 4.0.2, incorrectly defines
+// the EOF and WEOF macros to not std:: qualify the wint_t type (and so does
+// Sun C++ 5.8 + STLport 4). Fix by placing the def in this scope.
+// NOTE: Use BOOST_WORKAROUND?
+#if (defined(__QNX__) && defined(BOOST_DINKUMWARE_STDLIB))  \
+    || defined(__SUNPRO_CC)
+using ::std::wint_t;
+#endif
+
+const int WOULD_BLOCK = (int) (EOF - 1);
+
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+const std::wint_t WWOULD_BLOCK = (std::wint_t) (WEOF - 1);
+#endif
+
+template<typename Ch>
+struct char_traits;
+
+template<>
+struct char_traits<char> : BOOST_IOSTREAMS_CHAR_TRAITS(char) {
+    static char newline() { return '\n'; }
+    static int good() { return '\n'; }
+    static int would_block() { return WOULD_BLOCK; }
+    static bool is_good(int c) { return c != EOF && c != WOULD_BLOCK; }
+    static bool is_eof(int c) { return c == EOF; }
+    static bool would_block(int c) { return c == WOULD_BLOCK; }
+};
+
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+template<>
+struct char_traits<wchar_t> : std::char_traits<wchar_t> {
+    static wchar_t newline() { return L'\n'; }
+    static std::wint_t good() { return L'\n'; }
+    static std::wint_t would_block() { return WWOULD_BLOCK; }
+    static bool is_good(std::wint_t c) { return c != WEOF && c != WWOULD_BLOCK; }
+    static bool is_eof(std::wint_t c) { return c == WEOF; }
+    static bool would_block(std::wint_t c) { return c == WWOULD_BLOCK; }
+};
+#endif
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_CHAR_TRAITS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/checked_operations.hpp b/vendor/pdalboost/boost/iostreams/checked_operations.hpp
new file mode 100644
index 0000000..c857515
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/checked_operations.hpp
@@ -0,0 +1,158 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains implementations of get, read, put, write and seek which
+// check a device's mode at runtime instead of compile time.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CHECKED_OPERATIONS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CHECKED_OPERATIONS_HPP_INCLUDED
+
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/detail/config/unreachable_return.hpp>
+#include <boost/iostreams/get.hpp>
+#include <boost/iostreams/put.hpp>
+#include <boost/iostreams/read.hpp>
+#include <boost/iostreams/seek.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/write.hpp>
+#include <boost/throw_exception.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>  // MSVC.
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+template<typename T> 
+struct read_write_if_impl;
+
+template<typename T> 
+struct seek_if_impl;
+
+} // End namespace detail.
+
+template<typename T>
+typename int_type_of<T>::type get_if(T& t)
+{ 
+    typedef typename detail::dispatch<T, input, output>::type tag;
+    return detail::read_write_if_impl<tag>::get(t);
+}
+
+template<typename T>
+inline std::streamsize
+read_if(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+{ 
+    typedef typename detail::dispatch<T, input, output>::type tag;
+    return detail::read_write_if_impl<tag>::read(t, s, n);
+}
+
+template<typename T>
+bool put_if(T& t, typename char_type_of<T>::type c)
+{ 
+    typedef typename detail::dispatch<T, output, input>::type tag;
+    return detail::read_write_if_impl<tag>::put(t, c);
+}
+
+template<typename T>
+inline std::streamsize write_if
+    (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+{ 
+    typedef typename detail::dispatch<T, output, input>::type tag;
+    return detail::read_write_if_impl<tag>::write(t, s, n);
+}
+
+template<typename T>
+inline std::streampos
+seek_if( T& t, stream_offset off, BOOST_IOS::seekdir way, 
+         BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out )
+{ 
+    using namespace detail;
+    typedef typename dispatch<T, random_access, any_tag>::type tag;
+    return seek_if_impl<tag>::seek(t, off, way, which);
+}
+
+namespace detail {
+
+//------------------Specializations of read_write_if_impl---------------------//
+
+template<>
+struct read_write_if_impl<input> {
+    template<typename T>
+    static typename int_type_of<T>::type get(T& t)
+    { return iostreams::get(t); }
+
+    template<typename T>
+    static std::streamsize
+    read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+    { return iostreams::read(t, s, n); }
+
+    template<typename T>
+    static bool put(T&, typename char_type_of<T>::type)
+    { pdalboost::throw_exception(cant_write());
+      BOOST_IOSTREAMS_UNREACHABLE_RETURN(false) }
+
+    template<typename T>
+    static std::streamsize 
+    write(T&, const typename char_type_of<T>::type*, std::streamsize)
+    { pdalboost::throw_exception(cant_write());
+      BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+};
+
+template<>
+struct read_write_if_impl<output> {
+    template<typename T>
+    static typename int_type_of<T>::type get(T&)
+    { pdalboost::throw_exception(cant_read());
+      BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+
+    template<typename T>
+    static std::streamsize
+    read(T&, typename char_type_of<T>::type*, std::streamsize)
+    { pdalboost::throw_exception(cant_read());
+      BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+
+    template<typename T>
+    static bool put(T& t, typename char_type_of<T>::type c)
+    { return iostreams::put(t, c); }
+
+    template<typename T>
+    static std::streamsize 
+    write( T& t, const typename char_type_of<T>::type* s, 
+           std::streamsize n )
+    { return iostreams::write(t, s, n); }
+};
+
+//------------------Specializations of seek_if_impl---------------------------//
+
+template<>
+struct seek_if_impl<random_access> {
+    template<typename T>
+    static std::streampos 
+    seek( T& t, stream_offset off, BOOST_IOS::seekdir way, 
+          BOOST_IOS::openmode which )
+    { return iostreams::seek(t, off, way, which); }
+};
+
+template<>
+struct seek_if_impl<any_tag> {
+    template<typename T>
+    static std::streampos 
+    seek(T&, stream_offset, BOOST_IOS::seekdir, BOOST_IOS::openmode)
+    { pdalboost::throw_exception(cant_seek());
+      BOOST_IOSTREAMS_UNREACHABLE_RETURN(std::streampos()) }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>  // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CHECKED_OPERATIONS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/close.hpp b/vendor/pdalboost/boost/iostreams/close.hpp
new file mode 100644
index 0000000..64e20a4
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/close.hpp
@@ -0,0 +1,259 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_CLOSE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CLOSE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>  // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/flush.hpp>
+#include <boost/iostreams/detail/adapter/non_blocking_adapter.hpp>
+#include <boost/iostreams/detail/ios.hpp> // BOOST_IOS
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+template<typename T>
+void close(T& t);
+
+template<typename T>
+void close(T& t, BOOST_IOS::openmode which);
+
+template<typename T, typename Sink>
+void close(T& t, Sink& snk, BOOST_IOS::openmode which);
+    
+namespace detail {
+
+template<typename T>
+void close_all(T& t)
+{ 
+    try {
+        pdalboost::iostreams::close(t, BOOST_IOS::in);
+    } catch (...) {
+        try {
+            pdalboost::iostreams::close(t, BOOST_IOS::out);
+        } catch (...) { }
+        throw;
+    }
+    pdalboost::iostreams::close(t, BOOST_IOS::out);
+}
+
+template<typename T, typename Sink>
+void close_all(T& t, Sink& snk)
+{ 
+    try {
+        pdalboost::iostreams::close(t, snk, BOOST_IOS::in);
+    } catch (...) {
+        try {
+            pdalboost::iostreams::close(t, snk, BOOST_IOS::out);
+        } catch (...) { }
+        throw;
+    }
+    pdalboost::iostreams::close(t, snk, BOOST_IOS::out);
+}
+
+} // End namespace detail. 
+
+} } // End namespaces iostreams, boost.
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //-----------------------------------//
+# include <boost/iostreams/detail/vc6/close.hpp>
+#else // #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //--------------------------//
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct close_impl;
+
+} // End namespace detail.
+
+template<typename T>
+void close(T& t) { detail::close_all(t); }
+
+template<typename T>
+void close(T& t, BOOST_IOS::openmode which)
+{ 
+#ifdef BOOST_IOSTREAMS_STRICT
+    BOOST_ASSERT(which == BOOST_IOS::in || which == BOOST_IOS::out);
+#else
+    if (which == (BOOST_IOS::in | BOOST_IOS::out)) {
+        detail::close_all(t);
+        return;
+    }
+#endif
+    detail::close_impl<T>::close(detail::unwrap(t), which); 
+}
+
+template<typename T, typename Sink>
+void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+{ 
+#ifdef BOOST_IOSTREAMS_STRICT
+    BOOST_ASSERT(which == BOOST_IOS::in || which == BOOST_IOS::out);
+#else
+    if (which == (BOOST_IOS::in | BOOST_IOS::out)) {
+        detail::close_all(t, snk);
+        return;
+    }
+#endif
+    detail::close_impl<T>::close(detail::unwrap(t), snk, which); 
+}
+
+namespace detail {
+
+//------------------Definition of close_impl----------------------------------//
+
+struct close_boost_stream { };
+struct close_filtering_stream { };
+
+template<typename T>
+struct close_tag {
+    typedef typename category_of<T>::type             category;
+    typedef typename detail::unwrapped_type<T>::type  unwrapped;
+    typedef typename
+            iostreams::select<
+                mpl::not_< is_convertible<category, closable_tag> >,
+                any_tag,
+                mpl::or_<
+                    is_boost_stream<unwrapped>,
+                    is_boost_stream_buffer<unwrapped>
+                >,
+                close_boost_stream,
+                mpl::or_<
+                    is_filtering_stream<unwrapped>,
+                    is_filtering_streambuf<unwrapped>
+                >,
+                close_filtering_stream,
+                mpl::or_<
+                    is_convertible<category, two_sequence>,
+                    is_convertible<category, dual_use>
+                >,
+                two_sequence,
+                else_,
+                closable_tag
+            >::type type;
+};
+
+template<typename T>
+struct close_impl
+    : mpl::if_<
+          is_custom<T>,
+          operations<T>,
+          close_impl<BOOST_DEDUCED_TYPENAME close_tag<T>::type>
+      >::type
+    { };
+
+template<>
+struct close_impl<any_tag> {
+    template<typename T>
+    static void close(T& t, BOOST_IOS::openmode which)
+    {
+        if (which == BOOST_IOS::out)
+            iostreams::flush(t);
+    }
+
+    template<typename T, typename Sink>
+    static void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+    {
+        if (which == BOOST_IOS::out) {
+            non_blocking_adapter<Sink> nb(snk);
+            iostreams::flush(t, nb);
+        }
+    }
+};
+
+template<>
+struct close_impl<close_boost_stream> {
+    template<typename T>
+    static void close(T& t)
+    {
+        t.close();
+    }
+    template<typename T>
+    static void close(T& t, BOOST_IOS::openmode which)
+    {
+        if (which == BOOST_IOS::out)
+            t.close();
+    }
+};
+
+template<>
+struct close_impl<close_filtering_stream> {
+    template<typename T>
+    static void close(T& t, BOOST_IOS::openmode which)
+    {
+        typedef typename category_of<T>::type category;
+        const bool in =  is_convertible<category, input>::value &&
+                        !is_convertible<category, output>::value;
+        if (in == (which == BOOST_IOS::in) && t.is_complete())
+            t.pop();
+    }
+};
+
+template<>
+struct close_impl<closable_tag> {
+    template<typename T>
+    static void close(T& t, BOOST_IOS::openmode which)
+    {
+        typedef typename category_of<T>::type category;
+        const bool in =  is_convertible<category, input>::value &&
+                        !is_convertible<category, output>::value;
+        if (in == (which == BOOST_IOS::in))
+            t.close();
+    }
+    template<typename T, typename Sink>
+    static void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+    {
+        typedef typename category_of<T>::type category;
+        const bool in =  is_convertible<category, input>::value &&
+                        !is_convertible<category, output>::value;
+        if (in == (which == BOOST_IOS::in)) {
+            non_blocking_adapter<Sink> nb(snk);
+            t.close(nb);
+        }
+    }
+};
+
+template<>
+struct close_impl<two_sequence> {
+    template<typename T>
+    static void close(T& t, BOOST_IOS::openmode which) { t.close(which); }
+    template<typename T, typename Sink>
+    static void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+    {
+        non_blocking_adapter<Sink> nb(snk);
+        t.close(nb, which);
+    }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#endif // #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //-------------------------//
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_CLOSE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/code_converter.hpp b/vendor/pdalboost/boost/iostreams/code_converter.hpp
new file mode 100644
index 0000000..fb1e0fd
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/code_converter.hpp
@@ -0,0 +1,425 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains machinery for performing code conversion.
+
+#ifndef BOOST_IOSTREAMS_CODE_CONVERTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CODE_CONVERTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#if defined(BOOST_IOSTREAMS_NO_WIDE_STREAMS) || \
+    defined(BOOST_IOSTREAMS_NO_LOCALE) \
+    /**/
+# error code conversion not supported on this platform
+#endif
+
+#include <algorithm>                       // max.
+#include <cstring>                         // memcpy.
+#include <exception>
+#include <boost/config.hpp>                // DEDUCED_TYPENAME, 
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/constants.hpp>   // default_filter_buffer_size.
+#include <boost/iostreams/detail/adapter/concept_adapter.hpp>
+#include <boost/iostreams/detail/adapter/direct_adapter.hpp>
+#include <boost/iostreams/detail/buffer.hpp>
+#include <boost/iostreams/detail/call_traits.hpp>
+#include <boost/iostreams/detail/codecvt_holder.hpp>
+#include <boost/iostreams/detail/codecvt_helper.hpp>
+#include <boost/iostreams/detail/double_object.hpp>
+#include <boost/iostreams/detail/execute.hpp>
+#include <boost/iostreams/detail/forward.hpp>
+#include <boost/iostreams/detail/functional.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure, openmode, int types.
+#include <boost/iostreams/detail/optional.hpp>
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // Borland 5.x
+
+namespace pdalboost { namespace iostreams {
+
+struct code_conversion_error : BOOST_IOSTREAMS_FAILURE {
+    code_conversion_error() 
+        : BOOST_IOSTREAMS_FAILURE("code conversion error")
+        { }
+};
+
+namespace detail {
+
+//--------------Definition of strncpy_if_same---------------------------------//
+
+// Helper template for strncpy_if_same, below.
+template<bool B>
+struct strncpy_if_same_impl;
+
+template<>
+struct strncpy_if_same_impl<true> {
+    template<typename Ch>
+    static Ch* copy(Ch* tgt, const Ch* src, std::streamsize n)
+    { return BOOST_IOSTREAMS_CHAR_TRAITS(Ch)::copy(tgt, src, n); }
+};
+
+template<>
+struct strncpy_if_same_impl<false> {
+    template<typename Src, typename Tgt>
+    static Tgt* copy(Tgt* tgt, const Src*, std::streamsize) { return tgt; }
+};
+
+template<typename Src, typename Tgt>
+Tgt* strncpy_if_same(Tgt* tgt, const Src* src, std::streamsize n)
+{
+    typedef strncpy_if_same_impl<is_same<Src, Tgt>::value> impl;
+    return impl::copy(tgt, src, n);
+}
+
+//--------------Definition of conversion_buffer-------------------------------//
+
+// Buffer and conversion state for reading.
+template<typename Codecvt, typename Alloc>
+class conversion_buffer 
+    : public buffer<
+                 BOOST_DEDUCED_TYPENAME detail::codecvt_extern<Codecvt>::type,
+                 Alloc
+             > 
+{
+public:
+    typedef typename Codecvt::state_type state_type;
+    conversion_buffer() 
+        : buffer<
+              BOOST_DEDUCED_TYPENAME detail::codecvt_extern<Codecvt>::type,
+              Alloc
+          >(0) 
+    { 
+        reset(); 
+    }
+    state_type& state() { return state_; }
+    void reset() 
+    { 
+        if (this->size()) 
+            this->set(0, 0);
+        state_ = state_type(); 
+    }
+private:
+    state_type state_;
+};
+
+//--------------Definition of converter_impl----------------------------------//
+
+// Contains member data, open/is_open/close and buffer management functions.
+template<typename Device, typename Codecvt, typename Alloc>
+struct code_converter_impl {
+    typedef typename codecvt_extern<Codecvt>::type          extern_type;
+    typedef typename category_of<Device>::type              device_category;
+    typedef is_convertible<device_category, input>          can_read;
+    typedef is_convertible<device_category, output>         can_write;
+    typedef is_convertible<device_category, bidirectional>  is_bidir;
+    typedef typename 
+            iostreams::select<  // Disambiguation for Tru64.
+                is_bidir, bidirectional,
+                can_read, input,
+                can_write, output
+            >::type                                         mode;      
+    typedef typename
+            mpl::if_<
+                is_direct<Device>,
+                direct_adapter<Device>,
+                Device
+            >::type                                         device_type;
+    typedef optional< concept_adapter<device_type> >        storage_type;
+    typedef is_convertible<device_category, two_sequence>   is_double;
+    typedef conversion_buffer<Codecvt, Alloc>               buffer_type;
+
+    code_converter_impl() : cvt_(), flags_(0) { }
+
+    ~code_converter_impl()
+    { 
+        try { 
+            if (flags_ & f_open) close(); 
+        } catch (...) { /* */ } 
+    }
+
+    template <class T>
+    void open(const T& dev, int buffer_size)
+    {
+        if (flags_ & f_open)
+            pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("already open"));
+        if (buffer_size == -1)
+            buffer_size = default_filter_buffer_size;
+        int max_length = cvt_.get().max_length();
+        buffer_size = (std::max)(buffer_size, 2 * max_length);
+        if (can_read::value) {
+            buf_.first().resize(buffer_size);
+            buf_.first().set(0, 0);
+        }
+        if (can_write::value && !is_double::value) {
+            buf_.second().resize(buffer_size);
+            buf_.second().set(0, 0);
+        }
+        dev_.reset(concept_adapter<device_type>(dev));
+        flags_ = f_open;
+    }
+
+    void close()
+    {
+        detail::execute_all(
+            detail::call_member_close(*this, BOOST_IOS::in),
+            detail::call_member_close(*this, BOOST_IOS::out)
+        );
+    }
+
+    void close(BOOST_IOS::openmode which)
+    {
+        if (which == BOOST_IOS::in && (flags_ & f_input_closed) == 0) {
+            flags_ |= f_input_closed;
+            iostreams::close(dev(), BOOST_IOS::in);
+        }
+        if (which == BOOST_IOS::out && (flags_ & f_output_closed) == 0) {
+            flags_ |= f_output_closed;
+            detail::execute_all(
+                detail::flush_buffer(buf_.second(), dev(), can_write::value),
+                detail::call_close(dev(), BOOST_IOS::out),
+                detail::call_reset(dev_),
+                detail::call_reset(buf_.first()),
+                detail::call_reset(buf_.second())
+            );
+        }
+    }
+
+    bool is_open() const { return (flags_ & f_open) != 0;}
+
+    device_type& dev() { return **dev_; }
+
+    enum flag_type {
+        f_open             = 1,
+        f_input_closed     = f_open << 1,
+        f_output_closed    = f_input_closed << 1
+    };
+
+    codecvt_holder<Codecvt>  cvt_;
+    storage_type             dev_;
+    double_object<
+        buffer_type, 
+        is_double
+    >                        buf_;
+    int                      flags_;
+};
+
+} // End namespace detail.
+
+//--------------Definition of converter---------------------------------------//
+
+#define BOOST_IOSTREAMS_CONVERTER_PARAMS() , int buffer_size = -1
+#define BOOST_IOSTREAMS_CONVERTER_ARGS() , buffer_size
+
+template<typename Device, typename Codecvt, typename Alloc>
+struct code_converter_base {
+    typedef detail::code_converter_impl<
+                Device, Codecvt, Alloc
+            > impl_type;
+    code_converter_base() : pimpl_(new impl_type) { }
+    shared_ptr<impl_type> pimpl_;
+};
+
+template< typename Device, 
+          typename Codecvt = detail::default_codecvt, 
+          typename Alloc = std::allocator<char> >
+class code_converter 
+    : protected code_converter_base<Device, Codecvt, Alloc>
+{
+private:
+    typedef detail::code_converter_impl<
+                Device, Codecvt, Alloc
+            >                                                       impl_type;
+    typedef typename impl_type::device_type                         device_type;
+    typedef typename impl_type::buffer_type                         buffer_type;
+    typedef typename detail::codecvt_holder<Codecvt>::codecvt_type  codecvt_type;
+    typedef typename detail::codecvt_intern<Codecvt>::type          intern_type;
+    typedef typename detail::codecvt_extern<Codecvt>::type          extern_type;
+    typedef typename detail::codecvt_state<Codecvt>::type           state_type;
+public:
+    typedef intern_type                                             char_type;    
+    struct category 
+        : impl_type::mode, device_tag, closable_tag, localizable_tag
+        { };
+    BOOST_STATIC_ASSERT((
+        is_same<
+            extern_type, 
+            BOOST_DEDUCED_TYPENAME char_type_of<Device>::type
+        >::value
+    ));
+public:
+    code_converter() { }
+#if BOOST_WORKAROUND(__GNUC__, < 3)
+    code_converter(code_converter& rhs) 
+        : code_converter_base<Device, Codecvt, Alloc>(rhs)
+        { }
+    code_converter(const code_converter& rhs) 
+        : code_converter_base<Device, Codecvt, Alloc>(rhs)
+        { }
+#endif
+    BOOST_IOSTREAMS_FORWARD( code_converter, open_impl, Device,
+                             BOOST_IOSTREAMS_CONVERTER_PARAMS, 
+                             BOOST_IOSTREAMS_CONVERTER_ARGS )
+
+        // fstream-like interface.
+
+    bool is_open() const { return this->pimpl_->is_open(); }
+    void close(BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out )
+    { impl().close(which); }
+
+        // Device interface.
+
+    std::streamsize read(char_type*, std::streamsize);
+    std::streamsize write(const char_type*, std::streamsize);
+    void imbue(const std::locale& loc) { impl().cvt_.imbue(loc); }
+
+        // Direct device access.
+
+    Device& operator*() { return detail::unwrap_direct(dev()); }
+    Device* operator->() { return &detail::unwrap_direct(dev()); }
+private:
+    template<typename T> // Used for forwarding.
+    void open_impl(const T& t BOOST_IOSTREAMS_CONVERTER_PARAMS()) 
+    { 
+        impl().open(t BOOST_IOSTREAMS_CONVERTER_ARGS()); 
+    }
+
+    const codecvt_type& cvt() { return impl().cvt_.get(); }
+    device_type& dev() { return impl().dev(); }
+    buffer_type& in() { return impl().buf_.first(); }
+    buffer_type& out() { return impl().buf_.second(); }
+    impl_type& impl() { return *this->pimpl_; }
+};
+
+//--------------Implementation of converter-----------------------------------//
+
+// Implementation note: if end of stream contains a partial character,
+// it is ignored.
+template<typename Device, typename Codevt, typename Alloc>
+std::streamsize code_converter<Device, Codevt, Alloc>::read
+    (char_type* s, std::streamsize n)
+{
+    const extern_type*   next;        // Next external char.
+    intern_type*         nint;        // Next internal char.
+    std::streamsize      total = 0;   // Characters read.
+    int                  status = iostreams::char_traits<char>::good();
+    bool                 partial = false;
+    buffer_type&         buf = in();
+
+    do {
+
+        // Fill buffer.
+        if (buf.ptr() == buf.eptr() || partial) {
+            status = buf.fill(dev());
+            if (buf.ptr() == buf.eptr())
+                break;
+            partial = false;
+        }
+
+        // Convert.
+        std::codecvt_base::result result =
+            cvt().in( buf.state(),
+                      buf.ptr(), buf.eptr(), next,
+                      s + total, s + n, nint );
+        buf.ptr() += next - buf.ptr();
+        total = static_cast<std::streamsize>(nint - s);
+
+        switch (result) {
+        case std::codecvt_base::partial:
+            partial = true;
+            break;
+        case std::codecvt_base::ok:
+            break;
+        case std::codecvt_base::noconv:
+            {
+                std::streamsize amt = 
+                    std::min<std::streamsize>(next - buf.ptr(), n - total);
+                detail::strncpy_if_same(s + total, buf.ptr(), amt);
+                total += amt;
+            }
+            break;
+        case std::codecvt_base::error:
+        default:
+            buf.state() = state_type();
+            pdalboost::throw_exception(code_conversion_error());
+        }
+
+    } while (total < n && status != EOF && status != WOULD_BLOCK);
+
+    return total == 0 && status == EOF ? -1 : total;
+}
+
+template<typename Device, typename Codevt, typename Alloc>
+std::streamsize code_converter<Device, Codevt, Alloc>::write
+    (const char_type* s, std::streamsize n)
+{
+    buffer_type&        buf = out();
+    extern_type*        next;              // Next external char.
+    const intern_type*  nint;              // Next internal char.
+    std::streamsize     total = 0;         // Characters written.
+    bool                partial = false;
+
+    while (total < n) {
+
+        // Empty buffer.
+        if (buf.eptr() == buf.end() || partial) {
+            if (!buf.flush(dev()))
+                break;
+            partial = false;
+        }
+       
+        // Convert.
+        std::codecvt_base::result result =
+            cvt().out( buf.state(),
+                       s + total, s + n, nint,
+                       buf.eptr(), buf.end(), next );
+        int progress = (int) (next - buf.eptr());
+        buf.eptr() += progress;
+
+        switch (result) {
+        case std::codecvt_base::partial:
+            partial = true;
+            BOOST_FALLTHROUGH;
+        case std::codecvt_base::ok:
+            total = static_cast<std::streamsize>(nint - s);
+            break;
+        case std::codecvt_base::noconv:
+            {
+                std::streamsize amt = 
+                    std::min<std::streamsize>( nint - total - s, 
+                                               buf.end() - buf.eptr() );
+                detail::strncpy_if_same(buf.eptr(), s + total, amt);
+                total += amt;
+            }
+            break;
+        case std::codecvt_base::error:
+        default:
+            buf.state() = state_type();
+            pdalboost::throw_exception(code_conversion_error());
+        }
+    }
+    return total;
+}
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // Borland 5.x
+
+#endif // #ifndef BOOST_IOSTREAMS_CODE_CONVERTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/combine.hpp b/vendor/pdalboost/boost/iostreams/combine.hpp
new file mode 100644
index 0000000..646134c
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/combine.hpp
@@ -0,0 +1,260 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// To do: add support for random-access.
+
+#ifndef BOOST_IOSTREAMS_COMBINE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_COMBINE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <boost/config.hpp> // NO_STD_LOCALE, DEDUCED_TYPENAME.
+#ifndef BOOST_NO_STD_LOCALE
+# include <locale>
+#endif
+#include <boost/iostreams/detail/ios.hpp>   
+#include <boost/iostreams/detail/wrap_unwrap.hpp>       
+#include <boost/iostreams/traits.hpp>         
+#include <boost/iostreams/operations.hpp>        
+#include <boost/mpl/if.hpp>    
+#include <boost/static_assert.hpp>  
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp> 
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+//
+// Template name: combined_device.
+// Description: Model of Device defined in terms of a Source/Sink pair.
+// Template parameters:
+//      Source - A model of Source, with the same char_type and traits_type
+//          as Sink.
+//      Sink - A model of Sink, with the same char_type and traits_type
+//          as Source.
+//
+template<typename Source, typename Sink>
+class combined_device {
+private:
+    typedef typename category_of<Source>::type  in_category;
+    typedef typename category_of<Sink>::type    out_category;
+    typedef typename char_type_of<Sink>::type   sink_char_type;
+public:
+    typedef typename char_type_of<Source>::type char_type;
+    struct category
+        : bidirectional, 
+          device_tag, 
+          closable_tag, 
+          localizable_tag
+        { };
+    BOOST_STATIC_ASSERT(is_device<Source>::value);
+    BOOST_STATIC_ASSERT(is_device<Sink>::value);
+    BOOST_STATIC_ASSERT((is_convertible<in_category, input>::value));
+    BOOST_STATIC_ASSERT((is_convertible<out_category, output>::value));
+    BOOST_STATIC_ASSERT((is_same<char_type, sink_char_type>::value));
+    combined_device(const Source& src, const Sink& snk);
+    std::streamsize read(char_type* s, std::streamsize n);
+    std::streamsize write(const char_type* s, std::streamsize n);
+    void close(BOOST_IOS::openmode);
+    #ifndef BOOST_NO_STD_LOCALE
+        void imbue(const std::locale& loc);
+    #endif
+private:
+    Source  src_;
+    Sink    sink_;
+};
+
+//
+// Template name: combined_filter.
+// Description: Model of Device defined in terms of a Source/Sink pair.
+// Template parameters:
+//      InputFilter - A model of InputFilter, with the same char_type as 
+//          OutputFilter.
+//      OutputFilter - A model of OutputFilter, with the same char_type as 
+//          InputFilter.
+//
+template<typename InputFilter, typename OutputFilter>
+class combined_filter {
+private:
+    typedef typename category_of<InputFilter>::type    in_category;
+    typedef typename category_of<OutputFilter>::type   out_category;
+    typedef typename char_type_of<OutputFilter>::type  output_char_type;
+public:
+    typedef typename char_type_of<InputFilter>::type   char_type;
+    struct category 
+        : multichar_bidirectional_filter_tag,
+          closable_tag, 
+          localizable_tag
+        { };
+    BOOST_STATIC_ASSERT(is_filter<InputFilter>::value);
+    BOOST_STATIC_ASSERT(is_filter<OutputFilter>::value);
+    BOOST_STATIC_ASSERT((is_convertible<in_category, input>::value));
+    BOOST_STATIC_ASSERT((is_convertible<out_category, output>::value));
+    BOOST_STATIC_ASSERT((is_same<char_type, output_char_type>::value));
+    combined_filter(const InputFilter& in, const OutputFilter& out);
+
+    template<typename Source>
+    std::streamsize read(Source& src, char_type* s, std::streamsize n)
+    { return pdalboost::iostreams::read(in_, src, s, n); }
+
+    template<typename Sink>
+    std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+    { return pdalboost::iostreams::write(out_, snk, s, n); }
+
+    template<typename Sink>
+    void close(Sink& snk, BOOST_IOS::openmode which)
+    {
+        if (which == BOOST_IOS::in) {
+            if (is_convertible<in_category, dual_use>::value) {
+                iostreams::close(in_, snk, BOOST_IOS::in);
+            } else {
+                detail::close_all(in_, snk);
+            }
+        }
+        if (which == BOOST_IOS::out) {
+            if (is_convertible<out_category, dual_use>::value) {
+                iostreams::close(out_, snk, BOOST_IOS::out);
+            } else {
+                detail::close_all(out_, snk);
+            }
+        }
+    }
+    #ifndef BOOST_NO_STD_LOCALE
+        void imbue(const std::locale& loc);
+    #endif
+private:
+    InputFilter   in_;
+    OutputFilter  out_;
+};
+
+template<typename In, typename Out>
+struct combination_traits 
+    : mpl::if_<
+          is_device<In>,
+          combined_device<
+              typename wrapped_type<In>::type,
+              typename wrapped_type<Out>::type
+          >,
+          combined_filter<
+              typename wrapped_type<In>::type,
+              typename wrapped_type<Out>::type
+          >
+      >
+    { };
+
+} // End namespace detail.
+
+template<typename In, typename Out>
+struct combination : detail::combination_traits<In, Out>::type {
+    typedef typename detail::combination_traits<In, Out>::type  base_type;
+    typedef typename detail::wrapped_type<In>::type          in_type;
+    typedef typename detail::wrapped_type<Out>::type         out_type;
+    combination(const in_type& in, const out_type& out)
+        : base_type(in, out) { }
+};
+
+namespace detail {
+
+// Workaround for VC6 ETI bug.
+template<typename In, typename Out>
+struct combine_traits {
+    typedef combination<
+                BOOST_DEDUCED_TYPENAME detail::unwrapped_type<In>::type, 
+                BOOST_DEDUCED_TYPENAME detail::unwrapped_type<Out>::type
+            > type;
+};
+
+} // End namespace detail.
+
+//
+// Template name: combine.
+// Description: Takes a Source/Sink pair or InputFilter/OutputFilter pair and
+//      returns a Source or Filter which performs input using the first member
+//      of the pair and output using the second member of the pair.
+// Template parameters:
+//      In - A model of Source or InputFilter, with the same char_type as Out.
+//      Out - A model of Sink or OutputFilter, with the same char_type as In.
+//
+template<typename In, typename Out>
+typename detail::combine_traits<In, Out>::type
+combine(const In& in, const Out& out) 
+{ 
+    typedef typename detail::combine_traits<In, Out>::type return_type;
+    return return_type(in, out); 
+}
+
+//----------------------------------------------------------------------------//
+
+namespace detail {
+
+//--------------Implementation of combined_device-----------------------------//
+
+template<typename Source, typename Sink>
+inline combined_device<Source, Sink>::combined_device
+    (const Source& src, const Sink& snk)
+    : src_(src), sink_(snk) { }
+
+template<typename Source, typename Sink>
+inline std::streamsize
+combined_device<Source, Sink>::read(char_type* s, std::streamsize n)
+{ return iostreams::read(src_, s, n); }
+
+template<typename Source, typename Sink>
+inline std::streamsize
+combined_device<Source, Sink>::write(const char_type* s, std::streamsize n)
+{ return iostreams::write(sink_, s, n); }
+
+template<typename Source, typename Sink>
+inline void
+combined_device<Source, Sink>::close(BOOST_IOS::openmode which)
+{ 
+    if (which == BOOST_IOS::in)
+        detail::close_all(src_); 
+    if (which == BOOST_IOS::out)
+        detail::close_all(sink_); 
+}
+
+#ifndef BOOST_NO_STD_LOCALE
+    template<typename Source, typename Sink>
+    void combined_device<Source, Sink>::imbue(const std::locale& loc)
+    {
+        iostreams::imbue(src_, loc);
+        iostreams::imbue(sink_, loc);
+    }
+#endif
+
+//--------------Implementation of filter_pair---------------------------------//
+
+template<typename InputFilter, typename OutputFilter>
+inline combined_filter<InputFilter, OutputFilter>::combined_filter
+    (const InputFilter& in, const OutputFilter& out) : in_(in), out_(out)
+    { }
+
+#ifndef BOOST_NO_STD_LOCALE
+    template<typename InputFilter, typename OutputFilter>
+    void combined_filter<InputFilter, OutputFilter>::imbue
+        (const std::locale& loc)
+    {
+        iostreams::imbue(in_, loc);
+        iostreams::imbue(out_, loc);
+    }
+#endif
+
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_COMBINE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/compose.hpp b/vendor/pdalboost/boost/iostreams/compose.hpp
new file mode 100644
index 0000000..608381f
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/compose.hpp
@@ -0,0 +1,494 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Note: bidirectional streams are not supported.
+
+#ifndef BOOST_IOSTREAMS_COMPOSE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_COMPOSE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <algorithm>          // min.
+#include <utility>            // pair.
+#include <boost/config.hpp>   // DEDUCED_TYPENAME.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/adapter/direct_adapter.hpp>
+#include <boost/iostreams/detail/call_traits.hpp>
+#include <boost/iostreams/detail/enable_if_stream.hpp>
+#include <boost/iostreams/detail/execute.hpp>
+#include <boost/iostreams/detail/functional.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/traits.hpp>      // mode_of, is_direct.
+#include <boost/mpl/if.hpp>
+#include <boost/ref.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>  // MSVC.
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+template< typename First, 
+          typename Second,
+          typename FirstMode = 
+              BOOST_DEDUCED_TYPENAME mode_of<First>::type,
+          typename SecondMode = 
+              BOOST_DEDUCED_TYPENAME mode_of<Second>::type >
+struct composite_mode
+    : select<
+          is_convertible<SecondMode, FirstMode>, FirstMode,
+          is_convertible<FirstMode, SecondMode>, SecondMode,
+          is_convertible<SecondMode, input>,     input,
+          else_,                                 output
+      >
+    { };
+
+//
+// Template name: composite_device.
+// Description: Provides a Device view of a Filter, Device pair.
+// Template parameters:
+//      Filter - A model of Filter.
+//      Device - An indirect model of Device.
+//
+template< typename Filter,
+          typename Device,
+          typename Mode =
+              BOOST_DEDUCED_TYPENAME composite_mode<Filter, Device>::type >
+class composite_device {
+private:
+    typedef typename detail::param_type<Device>::type       param_type;
+    typedef typename mode_of<Filter>::type                  filter_mode;
+    typedef typename mode_of<Device>::type                  device_mode;
+    typedef typename
+            iostreams::select<  // Disambiguation for Tru64.
+                is_direct<Device>,  direct_adapter<Device>,
+                is_std_io<Device>,  Device&,
+                else_,              Device
+            >::type                                         value_type;
+    BOOST_STATIC_ASSERT(is_filter<Filter>::value);
+    BOOST_STATIC_ASSERT(is_device<Device>::value);
+public:
+    typedef typename char_type_of<Filter>::type             char_type;
+    struct category
+        : Mode,
+          device_tag,
+          closable_tag,
+          flushable_tag,
+          localizable_tag,
+          optimally_buffered_tag
+        { };
+    composite_device(const Filter& flt, param_type dev);
+    std::streamsize read(char_type* s, std::streamsize n);
+    std::streamsize write(const char_type* s, std::streamsize n);
+    std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+                         BOOST_IOS::openmode which =
+                             BOOST_IOS::in | BOOST_IOS::out );
+
+    void close();
+    void close(BOOST_IOS::openmode which);
+    bool flush();
+    std::streamsize optimal_buffer_size() const;
+
+    template<typename Locale> // Avoid dependency on <locale>
+    void imbue(const Locale& loc)
+    {
+        iostreams::imbue(filter_, loc);
+        iostreams::imbue(device_, loc);
+    }
+
+    Filter& first() { return filter_; }
+    Device& second() { return device_; }
+private:
+    Filter      filter_;
+    value_type  device_;
+};
+
+//
+// Template name: composite_device.
+// Description: Provides a Device view of a Filter, Device pair.
+// Template parameters:
+//      Filter - A model of Filter.
+//      Device - An indirect model of Device.
+//
+template< typename Filter1, 
+          typename Filter2,
+          typename Mode =
+              BOOST_DEDUCED_TYPENAME composite_mode<Filter1, Filter2>::type >
+class composite_filter {
+private:
+    typedef reference_wrapper<Filter2>           filter_ref;
+    typedef typename mode_of<Filter1>::type      first_mode;
+    typedef typename mode_of<Filter2>::type      second_mode;
+
+    // A dual-use filter cannot be composed with a read-write filter
+    BOOST_STATIC_ASSERT(
+        !(is_convertible<first_mode, dual_use>::value) ||
+        !(is_convertible<second_mode, input>::value) ||
+        !(is_convertible<second_mode, output>::value) ||
+         (is_convertible<second_mode, dual_use>::value)
+    );
+    BOOST_STATIC_ASSERT(
+        !(is_convertible<second_mode, dual_use>::value) ||
+        !(is_convertible<first_mode, input>::value) ||
+        !(is_convertible<first_mode, output>::value) ||
+         (is_convertible<first_mode, dual_use>::value)
+    );
+    BOOST_STATIC_ASSERT(is_filter<Filter1>::value);
+    BOOST_STATIC_ASSERT(is_filter<Filter2>::value);
+public:
+    typedef typename char_type_of<Filter1>::type  char_type;
+    struct category
+        : Mode,
+          filter_tag,
+          multichar_tag,
+          closable_tag,
+          flushable_tag,
+          localizable_tag,
+          optimally_buffered_tag
+        { };
+    composite_filter(const Filter1& filter1, const Filter2& filter2)
+        : filter1_(filter1), filter2_(filter2)
+        { }
+
+    template<typename Source>
+    std::streamsize read(Source& src, char_type* s, std::streamsize n)
+    {
+        composite_device<filter_ref, Source> cmp(pdalboost::ref(filter2_), src);
+        return iostreams::read(filter1_, cmp, s, n);
+    }
+
+    template<typename Sink>
+    std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+    {
+        composite_device<filter_ref, Sink> cmp(pdalboost::ref(filter2_), snk);
+        return iostreams::write(filter1_, cmp, s, n);
+    }
+
+    template<typename Device>
+    std::streampos seek( Device& dev, stream_offset off, BOOST_IOS::seekdir way,
+                         BOOST_IOS::openmode which =
+                             BOOST_IOS::in | BOOST_IOS::out )
+    {
+        composite_device<filter_ref, Device> cmp(pdalboost::ref(filter2_), dev);
+        return iostreams::seek(filter1_, cmp, off, way, which);
+    }
+
+    template<typename Device>
+    void close(Device& dev)
+    {
+        BOOST_STATIC_ASSERT((!is_convertible<category, two_sequence>::value));
+        BOOST_STATIC_ASSERT((!is_convertible<category, dual_use>::value));
+
+        // Create a new device by composing the second filter2_ with dev.
+        composite_device<filter_ref, Device> cmp(pdalboost::ref(filter2_), dev);
+
+        // Close input sequences in reverse order and output sequences in 
+        // forward order
+        if (!is_convertible<first_mode, dual_use>::value) {
+            detail::execute_all(
+                detail::call_close(filter2_, dev, BOOST_IOS::in),
+                detail::call_close(filter1_, cmp, BOOST_IOS::in),
+                detail::call_close(filter1_, cmp, BOOST_IOS::out),
+                detail::call_close(filter2_, dev, BOOST_IOS::out)
+            );
+        } else if (is_convertible<second_mode, input>::value) {
+            detail::execute_all(
+                detail::call_close(filter2_, dev, BOOST_IOS::in),
+                detail::call_close(filter1_, cmp, BOOST_IOS::in)
+            );
+        } else {
+            detail::execute_all(
+                detail::call_close(filter1_, cmp, BOOST_IOS::out),
+                detail::call_close(filter2_, dev, BOOST_IOS::out)
+            );
+        }
+    }
+
+    template<typename Device>
+    void close(Device& dev, BOOST_IOS::openmode which)
+    {
+        BOOST_STATIC_ASSERT(
+            (is_convertible<category, two_sequence>::value) ||
+            (is_convertible<category, dual_use>::value)
+        );
+
+        // Create a new device by composing the second filter2_ with dev.
+        composite_device<filter_ref, Device> cmp(pdalboost::ref(filter2_), dev);
+
+        // Close input sequences in reverse order
+        if ( which == BOOST_IOS::in &&
+             ( !is_convertible<first_mode, dual_use>::value ||
+                is_convertible<second_mode, input>::value ) )
+        {
+            detail::execute_all(
+                detail::call_close(filter2_, dev, BOOST_IOS::in),
+                detail::call_close(filter1_, cmp, BOOST_IOS::in)
+            );
+        }
+
+        // Close output sequences in forward order
+        if ( which == BOOST_IOS::out &&
+             ( !is_convertible<first_mode, dual_use>::value ||
+                is_convertible<second_mode, output>::value ) )
+        {
+            detail::execute_all(
+                detail::call_close(filter1_, cmp, BOOST_IOS::out),
+                detail::call_close(filter2_, dev, BOOST_IOS::out)
+            );
+        }
+    }
+
+    template<typename Device>
+    bool flush(Device& dev)
+    {
+        composite_device<Filter2, Device> cmp(filter2_, dev);
+        return iostreams::flush(filter1_, cmp);
+    }
+
+    std::streamsize optimal_buffer_size() const
+    {
+        std::streamsize first = iostreams::optimal_buffer_size(filter1_);
+        std::streamsize second = iostreams::optimal_buffer_size(filter2_);
+        return first < second ? second : first;
+    }
+
+    template<typename Locale> // Avoid dependency on <locale>
+    void imbue(const Locale& loc)
+    {   // To do: consider using RAII.
+        iostreams::imbue(filter1_, loc);
+        iostreams::imbue(filter2_, loc);
+    }
+
+    Filter1& first() { return filter1_; }
+    Filter2& second() { return filter2_; }
+private:
+    Filter1  filter1_;
+    Filter2  filter2_;
+};
+
+template<typename Filter, typename FilterOrDevice>
+struct composite_traits
+    : mpl::if_<
+          is_device<FilterOrDevice>,
+          composite_device<Filter, FilterOrDevice>,
+          composite_filter<Filter, FilterOrDevice>
+      >
+    { };
+
+} // End namespace detail.
+
+template<typename Filter, typename FilterOrDevice>
+struct composite : detail::composite_traits<Filter, FilterOrDevice>::type {
+    typedef typename detail::param_type<FilterOrDevice>::type param_type;
+    typedef typename detail::composite_traits<Filter, FilterOrDevice>::type base;
+    composite(const Filter& flt, param_type dev)
+        : base(flt, dev)
+        { }
+};
+
+//--------------Implementation of compose-------------------------------------//
+
+// Note: The following workarounds are patterned after resolve.hpp. It has not
+// yet been confirmed that they are necessary.
+
+#ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //-------------------------//
+# ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-------------------------------//
+
+template<typename Filter, typename FilterOrDevice>
+composite<Filter, FilterOrDevice>
+compose( const Filter& filter, const FilterOrDevice& fod
+         BOOST_IOSTREAMS_DISABLE_IF_STREAM(FilterOrDevice) )
+{ return composite<Filter, FilterOrDevice>(filter, fod); }
+
+template<typename Filter, typename Ch, typename Tr>
+composite< Filter, std::basic_streambuf<Ch, Tr> >
+compose(const Filter& filter, std::basic_streambuf<Ch, Tr>& sb)
+{ return composite< Filter, std::basic_streambuf<Ch, Tr> >(filter, sb); }
+
+template<typename Filter, typename Ch, typename Tr>
+composite< Filter, std::basic_istream<Ch, Tr> >
+compose(const Filter& filter, std::basic_istream<Ch, Tr>& is)
+{ return composite< Filter, std::basic_istream<Ch, Tr> >(filter, is); }
+
+template<typename Filter, typename Ch, typename Tr>
+composite< Filter, std::basic_ostream<Ch, Tr> >
+compose(const Filter& filter, std::basic_ostream<Ch, Tr>& os)
+{ return composite< Filter, std::basic_ostream<Ch, Tr> >(filter, os); }
+
+template<typename Filter, typename Ch, typename Tr>
+composite< Filter, std::basic_iostream<Ch, Tr> >
+compose(const Filter& filter, std::basic_iostream<Ch, Tr>& io)
+{ return composite< Filter, std::basic_iostream<Ch, Tr> >(filter, io); }
+
+# else // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //---------------------//
+
+template<typename Filter, typename FilterOrDevice>
+composite<Filter, FilterOrDevice>
+compose( const Filter& filter, const FilterOrDevice& fod
+         BOOST_IOSTREAMS_DISABLE_IF_STREAM(FilterOrDevice) )
+{ return composite<Filter, FilterOrDevice>(filter, fod); }
+
+template<typename Filter>
+composite<Filter, std::streambuf>
+compose(const Filter& filter, std::streambuf& sb)
+{ return composite<Filter, std::streambuf>(filter, sb); }
+
+template<typename Filter>
+composite<Filter, std::istream>
+compose(const Filter& filter, std::istream& is)
+{ return composite<Filter, std::istream>(filter, is); }
+
+template<typename Filter>
+composite<Filter, std::ostream>
+compose(const Filter& filter, std::ostream& os)
+{ return composite<Filter, std::ostream>(filter, os); }
+
+template<typename Filter>
+composite<Filter, std::iostream>
+compose(const Filter& filter, std::iostream& io)
+{ return composite<Filter, std::iostream>(filter, io); }
+
+# endif // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------//
+#else // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //----------------//
+
+template<typename Filter, typename Stream>
+composite<Filter, Stream>
+compose(const Filter& flt, const Stream& strm, mpl::true_)
+{   // Bad overload resolution.
+    return composite<Filter, Stream>(flt, const_cast<Stream&>(strm));
+}
+
+template<typename Filter, typename FilterOrDevice>
+composite<Filter, FilterOrDevice>
+compose(const Filter& flt, const FilterOrDevice& fod, mpl::false_)
+{ return composite<Filter, FilterOrDevice>(flt, fod); }
+
+template<typename Filter, typename FilterOrDevice>
+composite<Filter, FilterOrDevice>
+compose( const Filter& flt, const FilterOrDevice& fod
+         BOOST_IOSTREAMS_DISABLE_IF_STREAM(T) )
+{ return compose(flt, fod, is_std_io<FilterOrDevice>()); }
+
+# if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && \
+     !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && \
+     !defined(__GNUC__) // ---------------------------------------------------//
+
+template<typename Filter, typename FilterOrDevice>
+composite<Filter, FilterOrDevice>
+compose (const Filter& filter, FilterOrDevice& fod)
+{ return composite<Filter, FilterOrDevice>(filter, fod); }
+
+# endif // Borland 5.x, VC6-7.0 or GCC 2.9x //--------------------------------//
+#endif // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //---------------//
+
+//----------------------------------------------------------------------------//
+
+namespace detail {
+
+//--------------Implementation of composite_device---------------------------//
+
+template<typename Filter, typename Device, typename Mode>
+composite_device<Filter, Device, Mode>::composite_device
+    (const Filter& flt, param_type dev)
+    : filter_(flt), device_(dev)
+    { }
+
+template<typename Filter, typename Device, typename Mode>
+inline std::streamsize composite_device<Filter, Device, Mode>::read
+    (char_type* s, std::streamsize n)
+{ return iostreams::read(filter_, device_, s, n); }
+
+template<typename Filter, typename Device, typename Mode>
+inline std::streamsize composite_device<Filter, Device, Mode>::write
+    (const char_type* s, std::streamsize n)
+{ return iostreams::write(filter_, device_, s, n); }
+
+template<typename Filter, typename Device, typename Mode>
+std::streampos composite_device<Filter, Device, Mode>::seek
+    (stream_offset off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{ return iostreams::seek(filter_, device_, off, way, which); }
+
+template<typename Filter, typename Device, typename Mode>
+void composite_device<Filter, Device, Mode>::close()
+{
+    BOOST_STATIC_ASSERT((!is_convertible<Mode, two_sequence>::value));
+    BOOST_STATIC_ASSERT(
+        !(is_convertible<filter_mode, dual_use>::value) ||
+        !(is_convertible<device_mode, input>::value) ||
+        !(is_convertible<device_mode, output>::value)
+    );
+
+    // Close input sequences in reverse order and output sequences 
+    // in forward order
+    if (!is_convertible<filter_mode, dual_use>::value) {
+        detail::execute_all(
+            detail::call_close(device_, BOOST_IOS::in),
+            detail::call_close(filter_, device_, BOOST_IOS::in),
+            detail::call_close(filter_, device_, BOOST_IOS::out),
+            detail::call_close(device_, BOOST_IOS::out)
+        );
+    } else if (is_convertible<device_mode, input>::value) {
+        detail::execute_all(
+            detail::call_close(device_, BOOST_IOS::in),
+            detail::call_close(filter_, device_, BOOST_IOS::in)
+        );
+    } else {
+        detail::execute_all(
+            detail::call_close(filter_, device_, BOOST_IOS::out),
+            detail::call_close(device_, BOOST_IOS::out)
+        );
+    }
+}
+
+template<typename Filter, typename Device, typename Mode>
+void composite_device<Filter, Device, Mode>::close(BOOST_IOS::openmode which)
+{
+    BOOST_STATIC_ASSERT((is_convertible<Mode, two_sequence>::value));
+    BOOST_STATIC_ASSERT(!(is_convertible<filter_mode, dual_use>::value));
+
+    // Close input sequences in reverse order
+    if (which == BOOST_IOS::in) {
+        detail::execute_all(
+            detail::call_close(device_, BOOST_IOS::in),
+            detail::call_close(filter_, device_, BOOST_IOS::in) 
+        );
+    }
+
+    // Close output sequences in forward order
+    if (which == BOOST_IOS::out) {
+        detail::execute_all(
+            detail::call_close(filter_, device_, BOOST_IOS::out),
+            detail::call_close(device_, BOOST_IOS::out)
+        );
+    }
+}
+
+template<typename Filter, typename Device, typename Mode>
+bool composite_device<Filter, Device, Mode>::flush()
+{
+    bool r1 = iostreams::flush(filter_, device_);
+    bool r2 = iostreams::flush(device_);
+    return r1 && r2;
+}
+
+template<typename Filter, typename Device, typename Mode>
+std::streamsize
+composite_device<Filter, Device, Mode>::optimal_buffer_size() const
+{ return iostreams::optimal_buffer_size(device_); }
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_COMPOSE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/concepts.hpp b/vendor/pdalboost/boost/iostreams/concepts.hpp
new file mode 100644
index 0000000..4c51282
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/concepts.hpp
@@ -0,0 +1,129 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_CONCEPTS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CONCEPTS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>  // BOOST_MSVC
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/default_arg.hpp>
+#include <boost/iostreams/detail/ios.hpp>  // openmode.
+#include <boost/iostreams/positioning.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+//--------------Definitions of helper templates for device concepts-----------//
+
+template<typename Mode, typename Ch = BOOST_IOSTREAMS_DEFAULT_ARG(char)>
+struct device {
+    typedef Ch char_type;
+    struct category
+        : Mode,
+          device_tag,
+          closable_tag,
+          localizable_tag
+        { };
+
+    void close()
+    {
+        using namespace detail;
+        BOOST_STATIC_ASSERT((!is_convertible<Mode, two_sequence>::value));
+    }
+
+    void close(BOOST_IOS::openmode)
+    {
+        using namespace detail;
+        BOOST_STATIC_ASSERT((is_convertible<Mode, two_sequence>::value));
+    }
+
+    template<typename Locale>
+    void imbue(const Locale&) { }
+};
+
+template<typename Mode, typename Ch = BOOST_IOSTREAMS_DEFAULT_ARG(wchar_t)>
+struct wdevice : device<Mode, Ch> { };
+
+typedef device<input>    source;
+typedef wdevice<input>   wsource;
+typedef device<output>   sink;
+typedef wdevice<output>  wsink;
+
+//--------------Definitions of helper templates for simple filter concepts----//
+
+template<typename Mode, typename Ch = BOOST_IOSTREAMS_DEFAULT_ARG(char)>
+struct filter {
+    typedef Ch char_type;
+    struct category
+        : Mode,
+          filter_tag,
+          closable_tag,
+          localizable_tag
+        { };
+
+    template<typename Device>
+    void close(Device&)
+    {
+        using namespace detail;
+        BOOST_STATIC_ASSERT((!is_convertible<Mode, two_sequence>::value));
+        BOOST_STATIC_ASSERT((!is_convertible<Mode, dual_use>::value));
+    }
+
+    template<typename Device>
+    void close(Device&, BOOST_IOS::openmode)
+    {
+        using namespace detail;
+        BOOST_STATIC_ASSERT(
+            (is_convertible<Mode, two_sequence>::value) ||
+            (is_convertible<Mode, dual_use>::value)
+        );
+    }
+
+    template<typename Locale>
+    void imbue(const Locale&) { }
+};
+
+template<typename Mode, typename Ch = BOOST_IOSTREAMS_DEFAULT_ARG(wchar_t)>
+struct wfilter : filter<Mode, Ch> { };
+
+typedef filter<input>      input_filter;
+typedef wfilter<input>     input_wfilter;
+typedef filter<output>     output_filter;
+typedef wfilter<output>    output_wfilter;
+typedef filter<seekable>   seekable_filter;
+typedef wfilter<seekable>  seekable_wfilter;
+typedef filter<dual_use>   dual_use_filter;
+typedef wfilter<dual_use>  dual_use_wfilter;
+        
+//------Definitions of helper templates for multi-character filter cncepts----//
+
+template<typename Mode, typename Ch = char>
+struct multichar_filter : filter<Mode, Ch> {
+    struct category : filter<Mode, Ch>::category, multichar_tag { };
+};
+
+template<typename Mode, typename Ch = wchar_t>
+struct multichar_wfilter : multichar_filter<Mode, Ch> { };
+
+typedef multichar_filter<input>      multichar_input_filter;
+typedef multichar_wfilter<input>     multichar_input_wfilter;
+typedef multichar_filter<output>     multichar_output_filter;
+typedef multichar_wfilter<output>    multichar_output_wfilter;
+typedef multichar_filter<dual_use>   multichar_dual_use_filter;
+typedef multichar_wfilter<dual_use>  multichar_dual_use_wfilter;
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_CONCEPTS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/constants.hpp b/vendor/pdalboost/boost/iostreams/constants.hpp
new file mode 100644
index 0000000..974b7c1
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/constants.hpp
@@ -0,0 +1,42 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains constants used by library.
+
+#ifndef BOOST_IOSTREAMS_CONSTANTS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_CONSTANTS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#ifndef BOOST_IOSTREAMS_DEFAULT_DEVICE_BUFFER_SIZE
+# define BOOST_IOSTREAMS_DEFAULT_DEVICE_BUFFER_SIZE 4096
+#endif
+
+#ifndef BOOST_IOSTREAMS_DEFAULT_FILTER_BUFFER_SIZE
+# define BOOST_IOSTREAMS_DEFAULT_FILTER_BUFFER_SIZE 128
+#endif
+
+#ifndef BOOST_IOSTREAMS_DEFAULT_PBACK_BUFFER_SIZE
+# define BOOST_IOSTREAMS_DEFAULT_PBACK_BUFFER_SIZE 4
+#endif
+
+#include <boost/iostreams/detail/ios.hpp>  // streamsize.
+
+namespace pdalboost { namespace iostreams {
+
+const std::streamsize default_device_buffer_size = 
+    BOOST_IOSTREAMS_DEFAULT_DEVICE_BUFFER_SIZE; 
+const std::streamsize default_filter_buffer_size = 
+    BOOST_IOSTREAMS_DEFAULT_FILTER_BUFFER_SIZE;
+const std::streamsize default_pback_buffer_size = 
+    BOOST_IOSTREAMS_DEFAULT_PBACK_BUFFER_SIZE;
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_CONSTANTS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/copy.hpp b/vendor/pdalboost/boost/iostreams/copy.hpp
new file mode 100644
index 0000000..4ca1c55
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/copy.hpp
@@ -0,0 +1,252 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains: The function template copy, which reads data from a Source 
+// and writes it to a Sink until the end of the sequence is reached, returning 
+// the number of characters transfered.
+
+// The implementation is complicated by the need to handle smart adapters
+// and direct devices.
+
+#ifndef BOOST_IOSTREAMS_COPY_HPP_INCLUDED
+#define BOOST_IOSTREAMS_COPY_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <boost/config.hpp>                 // Make sure ptrdiff_t is in std.
+#include <algorithm>                        // copy, min.
+#include <cstddef>                          // ptrdiff_t.
+#include <utility>                          // pair.
+#include <boost/bind.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/chain.hpp>
+#include <boost/iostreams/constants.hpp>
+#include <boost/iostreams/detail/adapter/non_blocking_adapter.hpp>        
+#include <boost/iostreams/detail/buffer.hpp>
+#include <boost/iostreams/detail/enable_if_stream.hpp>  
+#include <boost/iostreams/detail/execute.hpp>
+#include <boost/iostreams/detail/functional.hpp>
+#include <boost/iostreams/detail/ios.hpp>   // failure, streamsize.                   
+#include <boost/iostreams/detail/resolve.hpp>                   
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations.hpp>  // read, write, close.
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/static_assert.hpp>  
+#include <boost/type_traits/is_same.hpp> 
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+    // The following four overloads of copy_impl() optimize 
+    // copying in the case that one or both of the two devices
+    // models Direct (see 
+    // http://www.boost.org/libs/iostreams/doc/index.html?path=4.1.1.4)
+
+// Copy from a direct source to a direct sink
+template<typename Source, typename Sink>
+std::streamsize copy_impl( Source& src, Sink& snk, 
+                           std::streamsize /* buffer_size */,
+                           mpl::true_, mpl::true_ )
+{   
+    using namespace std;
+    typedef typename char_type_of<Source>::type  char_type;
+    typedef std::pair<char_type*, char_type*>    pair_type;
+    pair_type p1 = iostreams::input_sequence(src);
+    pair_type p2 = iostreams::output_sequence(snk);
+    std::streamsize total = 
+        static_cast<std::streamsize>(
+            (std::min)(p1.second - p1.first, p2.second - p2.first)
+        );
+    std::copy(p1.first, p1.first + total, p2.first);
+    return total;
+}
+
+// Copy from a direct source to an indirect sink
+template<typename Source, typename Sink>
+std::streamsize copy_impl( Source& src, Sink& snk, 
+                           std::streamsize /* buffer_size */,
+                           mpl::true_, mpl::false_ )
+{
+    using namespace std;
+    typedef typename char_type_of<Source>::type  char_type;
+    typedef std::pair<char_type*, char_type*>    pair_type;
+    pair_type p = iostreams::input_sequence(src);
+    std::streamsize size, total;
+    for ( total = 0, size = static_cast<std::streamsize>(p.second - p.first);
+          total < size; )
+    {
+        std::streamsize amt = 
+            iostreams::write(snk, p.first + total, size - total); 
+        total += amt;
+    }
+    return total;
+}
+
+// Copy from an indirect source to a direct sink
+template<typename Source, typename Sink>
+std::streamsize copy_impl( Source& src, Sink& snk, 
+                           std::streamsize buffer_size,
+                           mpl::false_, mpl::true_ )
+{
+    typedef typename char_type_of<Source>::type  char_type;
+    typedef std::pair<char_type*, char_type*>    pair_type;
+    detail::basic_buffer<char_type>  buf(buffer_size);
+    pair_type                        p = snk.output_sequence();
+    std::streamsize                  total = 0;
+    std::ptrdiff_t                   capacity = p.second - p.first;
+    while (true) {
+        std::streamsize amt = 
+            iostreams::read(
+                src, 
+                buf.data(),
+                buffer_size < capacity - total ?
+                    buffer_size :
+                    static_cast<std::streamsize>(capacity - total)
+            );
+        if (amt == -1)
+            break;
+        std::copy(buf.data(), buf.data() + amt, p.first + total);
+        total += amt;
+    }
+    return total;
+}
+
+// Copy from an indirect source to an indirect sink
+template<typename Source, typename Sink>
+std::streamsize copy_impl( Source& src, Sink& snk, 
+                           std::streamsize buffer_size,
+                           mpl::false_, mpl::false_ )
+{ 
+    typedef typename char_type_of<Source>::type char_type;
+    detail::basic_buffer<char_type>  buf(buffer_size);
+    non_blocking_adapter<Sink>       nb(snk);
+    std::streamsize                  total = 0;
+    bool                             done = false;
+    while (!done) {
+        std::streamsize amt;
+        done = (amt = iostreams::read(src, buf.data(), buffer_size)) == -1;
+        if (amt != -1) {
+            iostreams::write(nb, buf.data(), amt);
+            total += amt;
+        }
+    }
+    return total;
+}
+
+    // The following function object is used with 
+    // pdalboost::iostreams::detail::execute() in the primary 
+    // overload of copy_impl(), below
+
+// Function object that delegates to one of the above four 
+// overloads of compl_impl()
+template<typename Source, typename Sink>
+class copy_operation {
+public:
+    typedef std::streamsize result_type;
+    copy_operation(Source& src, Sink& snk, std::streamsize buffer_size)
+        : src_(src), snk_(snk), buffer_size_(buffer_size)
+        { }
+    std::streamsize operator()() 
+    {
+        return copy_impl( src_, snk_, buffer_size_, 
+                          is_direct<Source>(), is_direct<Sink>() );
+    }
+private:
+    copy_operation& operator=(const copy_operation&);
+    Source&          src_;
+    Sink&            snk_;
+    std::streamsize  buffer_size_;
+};
+
+// Primary overload of copy_impl. Delegates to one of the above four 
+// overloads of compl_impl(), depending on which of the two given 
+// devices, if any, models Direct (see 
+// http://www.boost.org/libs/iostreams/doc/index.html?path=4.1.1.4)
+template<typename Source, typename Sink>
+std::streamsize copy_impl(Source src, Sink snk, std::streamsize buffer_size)
+{
+    using namespace std;
+    typedef typename char_type_of<Source>::type  src_char;
+    typedef typename char_type_of<Sink>::type    snk_char;
+    BOOST_STATIC_ASSERT((is_same<src_char, snk_char>::value));
+    return detail::execute_all(
+               copy_operation<Source, Sink>(src, snk, buffer_size),
+               detail::call_close_all(src),
+               detail::call_close_all(snk)
+           );
+}
+
+} // End namespace detail.
+                    
+//------------------Definition of copy----------------------------------------//
+
+// Overload of copy() for the case where neither the source nor the sink is
+// a standard stream or stream buffer
+template<typename Source, typename Sink>
+std::streamsize
+copy( const Source& src, const Sink& snk,
+      std::streamsize buffer_size = default_device_buffer_size
+      BOOST_IOSTREAMS_DISABLE_IF_STREAM(Source)
+      BOOST_IOSTREAMS_DISABLE_IF_STREAM(Sink) )
+{ 
+    typedef typename char_type_of<Source>::type char_type;
+    return detail::copy_impl( detail::resolve<input, char_type>(src), 
+                              detail::resolve<output, char_type>(snk), 
+                              buffer_size ); 
+}
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+
+// Overload of copy() for the case where the source, but not the sink, is
+// a standard stream or stream buffer
+template<typename Source, typename Sink>
+std::streamsize
+copy( Source& src, const Sink& snk,
+      std::streamsize buffer_size = default_device_buffer_size
+      BOOST_IOSTREAMS_ENABLE_IF_STREAM(Source)
+      BOOST_IOSTREAMS_DISABLE_IF_STREAM(Sink) ) 
+{ 
+    typedef typename char_type_of<Source>::type char_type;
+    return detail::copy_impl( detail::wrap(src), 
+                              detail::resolve<output, char_type>(snk), 
+                              buffer_size );
+}
+
+// Overload of copy() for the case where the sink, but not the source, is
+// a standard stream or stream buffer
+template<typename Source, typename Sink>
+std::streamsize
+copy( const Source& src, Sink& snk,
+      std::streamsize buffer_size = default_device_buffer_size
+      BOOST_IOSTREAMS_DISABLE_IF_STREAM(Source)
+      BOOST_IOSTREAMS_ENABLE_IF_STREAM(Sink) ) 
+{ 
+    typedef typename char_type_of<Source>::type char_type;
+    return detail::copy_impl( detail::resolve<input, char_type>(src), 
+                              detail::wrap(snk), buffer_size );
+}
+
+// Overload of copy() for the case where neither the source nor the sink is
+// a standard stream or stream buffer
+template<typename Source, typename Sink>
+std::streamsize
+copy( Source& src, Sink& snk,
+      std::streamsize buffer_size = default_device_buffer_size
+      BOOST_IOSTREAMS_ENABLE_IF_STREAM(Source)
+      BOOST_IOSTREAMS_ENABLE_IF_STREAM(Sink) ) 
+{ 
+    return detail::copy_impl(detail::wrap(src), detail::wrap(snk), buffer_size);
+}
+
+#endif // #if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //-----------------------//
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_COPY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/absolute_path.hpp b/vendor/pdalboost/boost/iostreams/detail/absolute_path.hpp
new file mode 100644
index 0000000..5566a5e
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/absolute_path.hpp
@@ -0,0 +1,46 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+
+ * File:        boost/iostreams/detail/execute.hpp
+ * Date:        Thu Dec 06 13:21:54 MST 2007
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ *
+ * Defines the function pdalboost::iostreams::detail::absolute_path, used for 
+ * debug output for mapped files.
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_ABSOLUTE_PATH_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_ABSOLUTE_PATH_HPP_INCLUDED
+
+#include <string>
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+#ifdef BOOST_IOSTREAMS_WINDOWS
+# include <cctype>
+#endif
+#include <boost/iostreams/detail/current_directory.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+// Resolves the given path relative to the current working directory
+inline std::string absolute_path(const std::string& path)
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    return path.size() && (path[0] == '/' || path[0] == '\\') ||
+           path.size() > 1 && std::isalpha(path[0]) && path[1] == ':' ?
+               path :
+               current_directory() + '\\' + path;
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS
+    return path.size() && (path[0] == '/') ?
+        path :
+        current_directory() + '/' + path;
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
+}
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_ABSOLUTE_PATH_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/access_control.hpp b/vendor/pdalboost/boost/iostreams/detail/access_control.hpp
new file mode 100644
index 0000000..2872833
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/access_control.hpp
@@ -0,0 +1,87 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains the definition of the class template access_control, which
+// allows the type of inheritance from a provided base class to be specified 
+// using a template parameter.
+
+
+#ifndef BOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED
+#define BOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+struct protected_ { };  // Represents protected inheritance.
+struct public_ { };     // Represents public inheritance.
+
+
+namespace detail {
+
+    // Implements protected inheritance.
+    template<typename U>
+    struct prot_ : protected U 
+    { 
+        prot_() { }
+        template<typename V> prot_(V v) : U(v) { }
+    };
+
+    // Implements public inheritance.
+    template<typename U> struct pub_ : public U { 
+        pub_() { }
+        template<typename V> pub_(V v) : U(v) { }
+    };
+
+//
+// Used to deduce the base type for the template access_control.
+//
+template<typename T, typename Access>
+struct access_control_base {
+    typedef int                                 bad_access_specifier;
+    typedef typename 
+            iostreams::select<  // Disambiguation for Tru64
+                ::pdalboost::is_same<
+                    Access, protected_
+                >,                              prot_<T>,
+                ::pdalboost::is_same<
+                    Access, public_
+                >,                              pub_<T>,
+                else_,                          bad_access_specifier
+            >::type                             type;
+};
+
+} // End namespace detail.
+
+//
+// Template name: access_control.
+// Description: Allows the type of inheritance from a provided base class
+//      to be specified using an int template parameter.
+// Template parameters:
+//      Base - The class from which to inherit (indirectly.)
+//      Access - The type of access desired. Must be one of the 
+//          values access_base::prot or access_base::pub.
+//
+template< typename T, typename Access,
+          typename Base = // VC6 workaraound (Compiler Error C2516)
+              typename detail::access_control_base<T, Access>::type >
+struct access_control : public Base { 
+    access_control() { }
+    template<typename U> explicit access_control(U u) : Base(u) { }
+};
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/adapter/concept_adapter.hpp b/vendor/pdalboost/boost/iostreams/detail/adapter/concept_adapter.hpp
new file mode 100644
index 0000000..3a32452
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/adapter/concept_adapter.hpp
@@ -0,0 +1,287 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONCEPT_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONCEPT_ADAPTER_HPP_INCLUDED
+
+#include <boost/config.hpp>                             // SFINAE.
+#include <boost/iostreams/concepts.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/adapter/non_blocking_adapter.hpp>
+#include <boost/iostreams/detail/call_traits.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/detail/streambuf.hpp>        // pubsync.
+#include <boost/iostreams/detail/config/unreachable_return.hpp>
+#include <boost/iostreams/device/null.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>  // MSVC.
+
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<typename Category> struct device_wrapper_impl;
+template<typename Category> struct flt_wrapper_impl;
+
+template<typename T>
+class concept_adapter {
+private:
+    typedef typename detail::value_type<T>::type       value_type;
+    typedef typename dispatch<T, input, output>::type  input_tag;
+    typedef typename dispatch<T, output, input>::type  output_tag;
+    typedef typename
+            mpl::if_<
+                is_device<T>,
+                device_wrapper_impl<input_tag>,
+                flt_wrapper_impl<input_tag>
+            >::type                                    input_impl;
+    typedef typename
+            mpl::if_<
+                is_device<T>,
+                device_wrapper_impl<output_tag>,
+                flt_wrapper_impl<output_tag>
+            >::type                                    output_impl;
+    typedef typename
+            mpl::if_<
+                is_device<T>,
+                device_wrapper_impl<any_tag>,
+                flt_wrapper_impl<any_tag>
+            >::type                                    any_impl;
+public:
+    typedef typename char_type_of<T>::type             char_type;
+    typedef typename category_of<T>::type              category;
+
+    explicit concept_adapter(const reference_wrapper<T>& ref) : t_(ref.get())
+    { BOOST_STATIC_ASSERT(is_std_io<T>::value); }
+    explicit concept_adapter(const T& t) : t_(t)
+    { BOOST_STATIC_ASSERT(!is_std_io<T>::value); }
+
+    T& operator*() { return t_; }
+    T* operator->() { return &t_; }
+
+    std::streamsize read(char_type* s, std::streamsize n)
+    { return this->read(s, n, (basic_null_source<char_type>*) 0); }
+
+    template<typename Source>
+    std::streamsize read(char_type* s, std::streamsize n, Source* src)
+    { return input_impl::read(t_, src, s, n); }
+
+    std::streamsize write(const char_type* s, std::streamsize n)
+    { return this->write(s, n, (basic_null_sink<char_type>*) 0); }
+
+    template<typename Sink>
+    std::streamsize write(const char_type* s, std::streamsize n, Sink* snk)
+    { return output_impl::write(t_, snk, s, n); }
+
+    std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+                         BOOST_IOS::openmode which )
+    { 
+        return this->seek( off, way, which, 
+                           (basic_null_device<char_type, seekable>*) 0); 
+    }
+
+    template<typename Device>
+    std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+                         BOOST_IOS::openmode which, Device* dev )
+    { return any_impl::seek(t_, dev, off, way, which); }
+
+    void close(BOOST_IOS::openmode which)
+    { this->close(which, (basic_null_device<char_type, seekable>*) 0); }
+
+    template<typename Device>
+    void close(BOOST_IOS::openmode which, Device* dev)
+    { any_impl::close(t_, dev, which); }
+
+    template<typename Device>
+    bool flush( Device* dev )
+    {
+        bool result = any_impl::flush(t_, dev);
+        if (dev && dev->BOOST_IOSTREAMS_PUBSYNC() == -1)
+            result = false;
+        return result;
+    }
+
+    template<typename Locale> // Avoid dependency on <locale>
+    void imbue(const Locale& loc) { iostreams::imbue(t_, loc); }
+
+    std::streamsize optimal_buffer_size() const
+    { return iostreams::optimal_buffer_size(t_); }
+public:
+    concept_adapter& operator=(const concept_adapter&);
+    value_type t_;
+};
+
+//------------------Specializations of device_wrapper_impl--------------------//
+
+template<>
+struct device_wrapper_impl<any_tag> {
+    template<typename Device, typename Dummy>
+    static std::streampos 
+    seek( Device& dev, Dummy*, stream_offset off, 
+          BOOST_IOS::seekdir way, BOOST_IOS::openmode which )
+    { 
+        typedef typename category_of<Device>::type category;
+        return seek(dev, off, way, which, category()); 
+    }
+
+    template<typename Device>
+    static std::streampos 
+    seek( Device&, stream_offset, BOOST_IOS::seekdir, 
+          BOOST_IOS::openmode, any_tag )
+    { 
+        pdalboost::throw_exception(cant_seek());
+        BOOST_IOSTREAMS_UNREACHABLE_RETURN(0)
+    }
+
+    template<typename Device>
+    static std::streampos 
+    seek( Device& dev, stream_offset off, 
+          BOOST_IOS::seekdir way, BOOST_IOS::openmode which, 
+          random_access )
+    { 
+        return iostreams::seek(dev, off, way, which); 
+    }
+
+    template<typename Device, typename Dummy>
+    static void close(Device& dev, Dummy*, BOOST_IOS::openmode which)
+    { iostreams::close(dev, which); }
+
+    template<typename Device, typename Dummy>
+    static bool flush(Device& dev, Dummy*)
+    { return iostreams::flush(dev); }
+};
+
+
+template<>
+struct device_wrapper_impl<input> : device_wrapper_impl<any_tag>  {
+    template<typename Device, typename Dummy>
+    static std::streamsize
+    read( Device& dev, Dummy*, typename char_type_of<Device>::type* s,
+          std::streamsize n )
+    { return iostreams::read(dev, s, n); }
+
+    template<typename Device, typename Dummy>
+    static std::streamsize 
+    write( Device&, Dummy*, const typename char_type_of<Device>::type*,
+           std::streamsize )
+    { pdalboost::throw_exception(cant_write());
+      BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+};
+
+template<>
+struct device_wrapper_impl<output> {
+    template<typename Device, typename Dummy>
+    static std::streamsize
+    read(Device&, Dummy*, typename char_type_of<Device>::type*, std::streamsize)
+    { pdalboost::throw_exception(cant_read());
+      BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+
+    template<typename Device, typename Dummy>
+    static std::streamsize 
+    write( Device& dev, Dummy*, const typename char_type_of<Device>::type* s,
+           std::streamsize n )
+    { return iostreams::write(dev, s, n); }
+};
+
+//------------------Specializations of flt_wrapper_impl--------------------//
+
+template<>
+struct flt_wrapper_impl<any_tag> {
+    template<typename Filter, typename Device>
+    static std::streampos
+    seek( Filter& f, Device* dev, stream_offset off,
+          BOOST_IOS::seekdir way, BOOST_IOS::openmode which )
+    {
+        typedef typename category_of<Filter>::type category;
+        return seek(f, dev, off, way, which, category());
+    }
+
+    template<typename Filter, typename Device>
+    static std::streampos
+    seek( Filter&, Device*, stream_offset,
+          BOOST_IOS::seekdir, BOOST_IOS::openmode, any_tag )
+    { pdalboost::throw_exception(cant_seek());
+      BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+
+    template<typename Filter, typename Device>
+    static std::streampos
+    seek( Filter& f, Device* dev, stream_offset off,
+          BOOST_IOS::seekdir way, BOOST_IOS::openmode which,
+          random_access tag )
+    {
+        typedef typename category_of<Filter>::type category;
+        return seek(f, dev, off, way, which, tag, category());
+    }
+
+    template<typename Filter, typename Device>
+    static std::streampos
+    seek( Filter& f, Device* dev, stream_offset off,
+          BOOST_IOS::seekdir way, BOOST_IOS::openmode,
+          random_access, any_tag )
+    { return f.seek(*dev, off, way); }
+
+    template<typename Filter, typename Device>
+    static std::streampos
+    seek( Filter& f, Device* dev, stream_offset off,
+          BOOST_IOS::seekdir way, BOOST_IOS::openmode which,
+          random_access, two_sequence )
+    { return f.seek(*dev, off, way, which);  }
+
+    template<typename Filter, typename Device>
+    static void close(Filter& f, Device* dev, BOOST_IOS::openmode which)
+    { iostreams::close(f, *dev, which); }
+
+    template<typename Filter, typename Device>
+    static bool flush(Filter& f, Device* dev)
+    { return iostreams::flush(f, *dev); }
+};
+
+template<>
+struct flt_wrapper_impl<input> {
+    template<typename Filter, typename Source>
+    static std::streamsize
+    read( Filter& f, Source* src, typename char_type_of<Filter>::type* s,
+          std::streamsize n )
+    { return iostreams::read(f, *src, s, n); }
+
+    template<typename Filter, typename Sink>
+    static std::streamsize 
+    write( Filter&, Sink*, const typename char_type_of<Filter>::type*, 
+           std::streamsize )
+    { pdalboost::throw_exception(cant_write());
+      BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+};
+
+template<>
+struct flt_wrapper_impl<output> {
+    template<typename Filter, typename Source>
+    static std::streamsize
+    read(Filter&, Source*, typename char_type_of<Filter>::type*,std::streamsize)
+    { pdalboost::throw_exception(cant_read());
+      BOOST_IOSTREAMS_UNREACHABLE_RETURN(0) }
+
+    template<typename Filter, typename Sink>
+    static std::streamsize 
+    write( Filter& f, Sink* snk, const typename char_type_of<Filter>::type* s,
+           std::streamsize n )
+    { return iostreams::write(f, *snk, s, n); }
+};
+
+//----------------------------------------------------------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>  // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONCEPT_ADAPTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/adapter/device_adapter.hpp b/vendor/pdalboost/boost/iostreams/detail/adapter/device_adapter.hpp
new file mode 100644
index 0000000..9a0d5f2
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/adapter/device_adapter.hpp
@@ -0,0 +1,67 @@
+/*
+ * Defines the class template pdalboost::iostreams::detail::device_adapter,
+ * a convenience base class for device adapters.
+ *
+ * File:        boost/iostreams/detail/adapter/filter_adapter.hpp
+ * Date:        Mon Nov 26 14:35:48 MST 2007
+ * 
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ *
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_DEVICE_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_DEVICE_ADAPTER_HPP_INCLUDED
+
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/call_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/static_assert.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<typename T>
+class device_adapter {
+private:
+    typedef typename detail::value_type<T>::type value_type;
+    typedef typename detail::param_type<T>::type param_type;
+public:
+    explicit device_adapter(param_type t) : t_(t) { }
+    T& component() { return t_; }
+
+    void close() 
+    {
+        detail::close_all(t_);
+    }
+
+    void close(BOOST_IOS::openmode which) 
+    { 
+        iostreams::close(t_, which); 
+    }
+
+    bool flush() 
+    { 
+        return iostreams::flush(t_); 
+    }
+
+    template<typename Locale> // Avoid dependency on <locale>
+    void imbue(const Locale& loc) { iostreams::imbue(t_, loc); }
+
+    std::streamsize optimal_buffer_size() const 
+    { return iostreams::optimal_buffer_size(t_); }
+public:
+    value_type t_;
+};
+
+//----------------------------------------------------------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_DEVICE_ADAPTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/adapter/direct_adapter.hpp b/vendor/pdalboost/boost/iostreams/detail/adapter/direct_adapter.hpp
new file mode 100644
index 0000000..1b29063
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/adapter/direct_adapter.hpp
@@ -0,0 +1,281 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_DIRECT_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_DIRECT_ADAPTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <boost/config.hpp>       // SFINAE, MSVC, put ptrdiff_t in std.
+#include <algorithm>              // copy, min.
+#include <cstddef>                // ptrdiff_t.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/config/limits.hpp>        // forwarding.
+#include <boost/iostreams/detail/config/wide_streams.hpp>  // locale.
+#include <boost/iostreams/detail/double_object.hpp>
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/detail/ios.hpp>  // openmode, seekdir, int types.
+#include <boost/iostreams/traits.hpp>      // mode_of, is_direct.
+#include <boost/iostreams/operations.hpp>
+#include <boost/mpl/bool.hpp> 
+#include <boost/mpl/or.hpp> 
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // VC7.1
+
+namespace pdalboost { namespace iostreams { namespace detail {
+                    
+//------------------Definition of direct_adapter_base-------------------------//
+
+// Put all initialization in base class to faciliate forwarding.
+template<typename Direct>
+class direct_adapter_base {
+public:
+    typedef typename char_type_of<Direct>::type  char_type;
+    typedef typename mode_of<Direct>::type       mode_type;
+    struct category 
+        : mode_type,
+          device_tag,
+          closable_tag
+          #ifndef BOOST_IOSTREAMS_NO_LOCALE
+          , localizable_tag
+          #endif
+        { };
+protected:
+    explicit direct_adapter_base(const Direct& d);
+    typedef is_convertible<category, two_sequence> is_double;
+    struct pointers {
+        char_type *beg, *ptr, *end;
+    };
+    void init_input(mpl::true_);
+    void init_input(mpl::false_) { }
+    void init_output(mpl::true_);
+    void init_output(mpl::false_) { }
+    double_object<pointers, is_double>  ptrs_;
+    Direct                              d_;
+};
+
+template<typename Direct>
+class direct_adapter : private direct_adapter_base<Direct> {
+private:
+    typedef direct_adapter_base<Direct>      base_type;
+    typedef typename base_type::pointers     pointers;
+    typedef typename base_type::is_double    is_double;
+    using base_type::ptrs_;
+    using base_type::d_;
+public:
+    typedef typename base_type::char_type    char_type;
+    typedef typename base_type::category     category;
+
+        // Constructors
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+    direct_adapter(const Direct& d) : base_type(d) { }   
+    direct_adapter(const direct_adapter& d) : base_type(d) { }
+# define BOOST_PP_LOCAL_LIMITS (1, BOOST_IOSTREAMS_MAX_FORWARDING_ARITY)
+#else
+    template<typename U>
+    struct is_direct
+        : mpl::or_< 
+              is_same<U, direct_adapter<Direct> >, 
+              is_same<U, Direct> 
+          >
+        { };
+    template<typename U>
+    direct_adapter(const U& u) 
+        : base_type(forward(u, is_direct<U>()))
+        { }
+# define BOOST_PP_LOCAL_LIMITS (2, BOOST_IOSTREAMS_MAX_FORWARDING_ARITY)
+#endif
+
+#define BOOST_PP_LOCAL_MACRO(n) \
+    template<BOOST_PP_ENUM_PARAMS(n, typename P)> \
+    direct_adapter(BOOST_PP_ENUM_BINARY_PARAMS(n, const P, &p)) \
+        : base_type(Direct(BOOST_PP_ENUM_PARAMS(n, p))) \
+        { } \
+    /**/
+#include BOOST_PP_LOCAL_ITERATE()
+#undef BOOST_PP_LOCAL_MACRO
+
+        // Device interface.
+
+    std::streamsize read(char_type* s, std::streamsize n);
+    std::streamsize write(const char_type* s, std::streamsize n);
+    std::streampos seek( stream_offset, BOOST_IOS::seekdir,
+                         BOOST_IOS::openmode = BOOST_IOS::in | BOOST_IOS::out );
+    void close();
+    void close(BOOST_IOS::openmode which);
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+    void imbue(const std::locale&);
+#endif
+
+        // Direct device access.
+
+    Direct& operator*() { return d_; }
+    Direct* operator->() { return &d_; }
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+private:
+    template<typename U>
+    static Direct forward(const U& u, mpl::true_) { return u; }
+    template<typename U>
+    static Direct forward(const U& u, mpl::false_) { return Direct(u); }
+#endif
+};
+
+//--------------Definition of wrap_direct and unwrap_direct-------------------//
+
+template<typename Device>
+struct wrap_direct_traits 
+    : mpl::if_<
+          is_direct<Device>,
+          direct_adapter<Device>,
+          Device
+      >
+    { };
+
+template<typename Device>
+typename wrap_direct_traits<Device>::type
+inline wrap_direct(Device dev) 
+{ 
+    typedef typename wrap_direct_traits<Device>::type type;
+    return type(dev); 
+}
+
+template<typename Device>
+inline Device& unwrap_direct(Device& d) { return d; }  
+
+template<typename Device>
+inline Device& unwrap_direct(direct_adapter<Device>& d) { return *d; }  
+
+//--------------Implementation of direct_adapter_base-------------------------//
+
+template<typename Direct>
+direct_adapter_base<Direct>::direct_adapter_base(const Direct& d) : d_(d)
+{
+    init_input(is_convertible<category, input>());
+    init_output(is_convertible<category, output>());
+}
+
+template<typename Direct>
+void direct_adapter_base<Direct>::init_input(mpl::true_) 
+{
+    std::pair<char_type*, char_type*> seq = iostreams::input_sequence(d_);
+    ptrs_.first().beg = seq.first;
+    ptrs_.first().ptr = seq.first;
+    ptrs_.first().end = seq.second;
+}
+
+template<typename Direct>
+void direct_adapter_base<Direct>::init_output(mpl::true_) 
+{
+    std::pair<char_type*, char_type*> seq = iostreams::output_sequence(d_);
+    ptrs_.second().beg = seq.first;
+    ptrs_.second().ptr = seq.first;
+    ptrs_.second().end = seq.second;
+}
+
+//--------------Implementation of direct_adapter------------------------------//
+
+template<typename Direct>
+inline std::streamsize direct_adapter<Direct>::read
+    (char_type* s, std::streamsize n)
+{
+    using namespace std;
+    pointers& get = ptrs_.first();
+    std::streamsize avail = 
+        static_cast<std::streamsize>(get.end - get.ptr);
+    std::streamsize result = (std::min)(n, avail);
+    std::copy(get.ptr, get.ptr + result, s);
+    get.ptr += result;
+    return result != 0 ? result : -1;
+}
+
+template<typename Direct>
+inline std::streamsize direct_adapter<Direct>::write
+    (const char_type* s, std::streamsize n)
+{
+    using namespace std;
+    pointers& put = ptrs_.second();
+    if (n > static_cast<std::streamsize>(put.end - put.ptr))
+        pdalboost::throw_exception(write_area_exhausted());
+    std::copy(s, s + n, put.ptr);
+    put.ptr += n;
+    return n;
+}
+
+template<typename Direct>
+inline std::streampos direct_adapter<Direct>::seek
+    ( stream_offset off, BOOST_IOS::seekdir way, 
+      BOOST_IOS::openmode which )
+{
+    using namespace std;
+    pointers& get = ptrs_.first();
+    pointers& put = ptrs_.second();
+    if (way == BOOST_IOS::cur && get.ptr != put.ptr)
+       pdalboost::throw_exception(bad_seek());
+    ptrdiff_t next = 0;
+    if ((which & BOOST_IOS::in) || !is_double::value) {
+        if (way == BOOST_IOS::beg)
+            next = off; 
+        else if (way == BOOST_IOS::cur)
+            next = get.ptr - get.beg + off; 
+        else
+            next = get.end - get.beg + off; 
+        if (next >= 0 && next <= get.end - get.beg)
+            get.ptr = get.beg + next;
+        else
+            pdalboost::throw_exception(bad_seek());
+    }
+    if ((which & BOOST_IOS::out) && is_double::value) {
+        if (way == BOOST_IOS::beg)
+            next = off; 
+        else if (way == BOOST_IOS::cur)
+            next = put.ptr - put.beg + off; 
+        else
+            next = put.end - put.beg + off; 
+        if (next >= 0 && next <= put.end - put.beg)
+            put.ptr = put.beg + next;
+        else
+            pdalboost::throw_exception(bad_seek());
+    }
+    return offset_to_position(next);
+}
+
+template<typename Direct>
+void direct_adapter<Direct>::close() 
+{ 
+    BOOST_STATIC_ASSERT((!is_convertible<category, two_sequence>::value));
+    detail::close_all(d_);
+}
+
+template<typename Direct>
+void direct_adapter<Direct>::close(BOOST_IOS::openmode which) 
+{ 
+    BOOST_STATIC_ASSERT((is_convertible<category, two_sequence>::value));
+    pdalboost::iostreams::close(d_, which);
+}
+
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+    template<typename Direct>
+    void direct_adapter<Direct>::imbue(const std::locale& loc) 
+    { pdalboost::iostreams::imbue(d_, loc); }
+#endif
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_DIRECT_ADAPTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/adapter/filter_adapter.hpp b/vendor/pdalboost/boost/iostreams/detail/adapter/filter_adapter.hpp
new file mode 100644
index 0000000..18969aa
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/adapter/filter_adapter.hpp
@@ -0,0 +1,69 @@
+/*
+ * Defines the class template pdalboost::iostreams::detail::filter_adapter,
+ * a convenience base class for filter adapters.
+ *
+ * File:        boost/iostreams/detail/adapter/filter_adapter.hpp
+ * Date:        Mon Nov 26 14:35:48 MST 2007
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ *
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_FILTER_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_FILTER_ADAPTER_HPP_INCLUDED
+
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/call_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/static_assert.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<typename T>
+class filter_adapter {
+private:
+    typedef typename detail::value_type<T>::type value_type;
+    typedef typename detail::param_type<T>::type param_type;
+public:
+    explicit filter_adapter(param_type t) : t_(t) { }
+    T& component() { return t_; }
+
+    template<typename Device>
+    void close(Device& dev) 
+    { 
+        detail::close_all(t_, dev); 
+    }
+
+    template<typename Device>
+    void close(Device& dev, BOOST_IOS::openmode which) 
+    { 
+        iostreams::close(t_, dev, which); 
+    }
+
+    template<typename Device>
+    void flush(Device& dev) 
+    { 
+        return iostreams::flush(t_, dev); 
+    }
+
+    template<typename Locale> // Avoid dependency on <locale>
+    void imbue(const Locale& loc) { iostreams::imbue(t_, loc); }
+
+    std::streamsize optimal_buffer_size() const 
+    { return iostreams::optimal_buffer_size(t_); }
+public:
+    value_type t_;
+};
+
+//----------------------------------------------------------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_FILTER_ADAPTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/adapter/mode_adapter.hpp b/vendor/pdalboost/boost/iostreams/detail/adapter/mode_adapter.hpp
new file mode 100644
index 0000000..ff2e1ec
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/adapter/mode_adapter.hpp
@@ -0,0 +1,123 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_MODE_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_MODE_ADAPTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+// Contains the definition of the class template mode_adapter, which allows
+// a filter or device to function as if it has a different i/o mode than that
+// deduced by the metafunction mode_of.
+
+#include <boost/config.hpp>                // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/ios.hpp>  // openmode, seekdir, int types. 
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/operations.hpp> 
+#include <boost/mpl/if.hpp> 
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<typename Mode, typename T>
+class mode_adapter {
+private:
+    struct empty_base { };
+public:
+    typedef typename wrapped_type<T>::type  component_type;
+    typedef typename char_type_of<T>::type  char_type;
+    struct category 
+        : Mode, 
+          device_tag,
+          mpl::if_<is_filter<T>, filter_tag, device_tag>,
+          mpl::if_<is_filter<T>, multichar_tag, empty_base>,
+          #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+              closable_tag, // VC6 can't see member close()!
+          #endif
+          localizable_tag
+        { };
+    explicit mode_adapter(const component_type& t) : t_(t) { }
+
+        // Device member functions.
+
+    std::streamsize read(char_type* s, std::streamsize n);
+    std::streamsize write(const char_type* s, std::streamsize n);
+    std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+                         BOOST_IOS::openmode which = 
+                             BOOST_IOS::in | BOOST_IOS::out );
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    void close();
+    void close(BOOST_IOS::openmode which);
+#endif
+
+        // Filter member functions.
+
+    template<typename Source>
+    std::streamsize read(Source& src, char_type* s, std::streamsize n)
+    { return iostreams::read(t_, src, s, n); }
+
+    template<typename Sink>
+    std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+    { return iostreams::write(t_, snk, s, n); }
+
+    template<typename Device>
+    std::streampos seek(Device& dev, stream_offset off, BOOST_IOS::seekdir way)
+    { return iostreams::seek(t_, dev, off, way); }
+
+    template<typename Device>
+    std::streampos seek( Device& dev, stream_offset off, 
+                         BOOST_IOS::seekdir way, BOOST_IOS::openmode which  )
+    { return iostreams::seek(t_, dev, off, way, which); }
+
+    template<typename Device>
+    void close(Device& dev)
+    { detail::close_all(t_, dev); }
+
+    template<typename Device>
+    void close(Device& dev, BOOST_IOS::openmode which)
+    { iostreams::close(t_, dev, which); }
+
+    template<typename Locale>
+    void imbue(const Locale& loc)
+    { iostreams::imbue(t_, loc); }
+private:
+    component_type t_;
+};
+                    
+//------------------Implementation of mode_adapter----------------------------//
+
+template<typename Mode, typename T>
+std::streamsize mode_adapter<Mode, T>::read
+    (char_type* s, std::streamsize n)
+{ return pdalboost::iostreams::read(t_, s, n); }
+
+template<typename Mode, typename T>
+std::streamsize mode_adapter<Mode, T>::write
+    (const char_type* s, std::streamsize n)
+{ return pdalboost::iostreams::write(t_, s, n); }
+
+template<typename Mode, typename T>
+std::streampos mode_adapter<Mode, T>::seek
+    (stream_offset off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{ return pdalboost::iostreams::seek(t_, off, way, which); }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    template<typename Mode, typename T>
+    void mode_adapter<Mode, T>::close() 
+    { detail::close_all(t_); }
+
+    template<typename Mode, typename T>
+    void mode_adapter<Mode, T>::close(BOOST_IOS::openmode which) 
+    { iostreams::close(t_, which); }
+#endif
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_MODE_ADAPTER_HPP_INCLUDED //-----//
diff --git a/vendor/pdalboost/boost/iostreams/detail/adapter/non_blocking_adapter.hpp b/vendor/pdalboost/boost/iostreams/detail/adapter/non_blocking_adapter.hpp
new file mode 100644
index 0000000..7132fa4
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/adapter/non_blocking_adapter.hpp
@@ -0,0 +1,59 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_NON_BLOCKING_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_NON_BLOCKING_ADAPTER_HPP_INCLUDED
+
+#include <boost/iostreams/detail/ios.hpp>  // streamsize, seekdir, openmode.
+#include <boost/iostreams/read.hpp>
+#include <boost/iostreams/seek.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/write.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+template<typename Device>
+class non_blocking_adapter {
+public:
+    typedef typename char_type_of<Device>::type char_type;
+    struct category
+        : mode_of<Device>::type, device_tag
+        { };
+    explicit non_blocking_adapter(Device& dev) : device_(dev) { }
+    std::streamsize read(char_type* s, std::streamsize n)
+    { 
+        std::streamsize result = 0;
+        while (result < n) {
+            std::streamsize amt = iostreams::read(device_, s, n);
+            if (amt == -1)
+                break;
+            result += amt;
+        }
+        return result != 0 ? result : -1;
+    }
+    std::streamsize write(const char_type* s, std::streamsize n)
+    { 
+        std::streamsize result = 0;
+        while (result < n) {
+            std::streamsize amt = 
+                iostreams::write(device_, s + result, n - result);
+            result += amt;
+        }
+        return result;    
+    }
+    std::streampos seek( stream_offset off, BOOST_IOS::seekdir way,
+                         BOOST_IOS::openmode which = 
+                             BOOST_IOS::in | BOOST_IOS::out )
+    { return iostreams::seek(device_, off, way, which); }
+public:
+    non_blocking_adapter& operator=(const non_blocking_adapter&);
+    Device& device_;
+};
+
+} } // End namespace iostreams.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_NON_BLOCKING_ADAPTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/adapter/output_iterator_adapter.hpp b/vendor/pdalboost/boost/iostreams/detail/adapter/output_iterator_adapter.hpp
new file mode 100644
index 0000000..e50850d
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/adapter/output_iterator_adapter.hpp
@@ -0,0 +1,41 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_OUTPUT_ITERATOR_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_OUTPUT_ITERATOR_ADAPTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <algorithm>                      // copy.
+#include <iosfwd>                         // streamsize.
+#include <boost/iostreams/categories.hpp> // tags.
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<typename Mode, typename Ch, typename OutIt>
+class output_iterator_adapter {
+public:
+    BOOST_STATIC_ASSERT((is_convertible<Mode, output>::value));
+    typedef Ch        char_type;
+    typedef sink_tag  category;
+    explicit output_iterator_adapter(OutIt out) : out_(out) { }
+    std::streamsize write(const char_type* s, std::streamsize n) 
+    { 
+        std::copy(s, s + n, out_); 
+        return n; 
+    }
+private:
+    OutIt out_;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_OUTPUT_ITERATOR_ADAPTER_HPP_INCLUDED //-----//
diff --git a/vendor/pdalboost/boost/iostreams/detail/adapter/range_adapter.hpp b/vendor/pdalboost/boost/iostreams/detail/adapter/range_adapter.hpp
new file mode 100644
index 0000000..325cf60
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/adapter/range_adapter.hpp
@@ -0,0 +1,187 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_RANGE_ADAPTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_RANGE_ADAPTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <algorithm>                             // min.
+#include <boost/assert.hpp>
+#include <cstddef>                               // ptrdiff_t.
+#include <iosfwd>                                // streamsize, streamoff.
+#include <boost/detail/iterator.hpp>             // pdalboost::iterator_traits.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/utility/enable_if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>  // MSVC.
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+// Used for simulated tag dispatch.
+template<typename Traversal> struct range_adapter_impl;
+
+//
+// Template name: range_adapter
+// Description: Device based on an instance of pdalboost::iterator_range.
+// Template parameters:
+//     Mode - A mode tag.
+//     Range - An instance of iterator_range.
+//
+template<typename Mode, typename Range>
+class range_adapter {
+private:
+    typedef typename Range::iterator                  iterator;
+    typedef pdalboost::detail::iterator_traits<iterator>  iter_traits;
+    typedef typename iter_traits::iterator_category   iter_cat;
+public:
+    typedef typename Range::value_type                char_type;
+    struct category : Mode, device_tag { };
+    typedef typename
+            mpl::if_<
+                is_convertible<
+                    iter_cat,
+                    std::random_access_iterator_tag
+                >,
+                std::random_access_iterator_tag,
+                std::forward_iterator_tag
+            >::type                                   tag;
+    typedef range_adapter_impl<tag>                   impl;
+
+    explicit range_adapter(const Range& rng);
+    range_adapter(iterator first, iterator last);
+    std::streamsize read(char_type* s, std::streamsize n);
+    std::streamsize write(const char_type* s, std::streamsize n);
+    std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
+private:
+    iterator first_, cur_, last_;
+};
+
+//------------------Implementation of range_adapter---------------------------//
+
+template<typename Mode, typename Range>
+range_adapter<Mode, Range>::range_adapter(const Range& rng)
+    : first_(rng.begin()), cur_(rng.begin()), last_(rng.end()) { }
+
+template<typename Mode, typename Range>
+range_adapter<Mode, Range>::range_adapter(iterator first, iterator last)
+    : first_(first), cur_(first), last_(last) { }
+
+template<typename Mode, typename Range>
+inline std::streamsize range_adapter<Mode, Range>::read
+    (char_type* s, std::streamsize n)
+{ return impl::read(cur_, last_, s, n); }
+
+template<typename Mode, typename Range>
+inline std::streamsize range_adapter<Mode, Range>::write
+    (const char_type* s, std::streamsize n)
+{ return impl::write(cur_, last_, s, n); }
+
+
+template<typename Mode, typename Range>
+std::streampos range_adapter<Mode, Range>::seek
+    (stream_offset off, BOOST_IOS::seekdir way)
+{ 
+    impl::seek(first_, cur_, last_, off, way); 
+    return offset_to_position(cur_ - first_);
+}
+
+//------------------Implementation of range_adapter_impl----------------------//
+
+template<>
+struct range_adapter_impl<std::forward_iterator_tag> {
+    template<typename Iter, typename Ch>
+    static std::streamsize read
+        (Iter& cur, Iter& last, Ch* s,std::streamsize n)
+    {
+        std::streamsize rem = n; // No. of chars remaining.
+        while (cur != last && rem-- > 0) *s++ = *cur++;
+        return n - rem != 0 ? n - rem : -1;
+    }
+
+    template<typename Iter, typename Ch>
+    static std::streamsize write
+        (Iter& cur, Iter& last, const Ch* s, std::streamsize n)
+    {
+        while (cur != last && n-- > 0) *cur++ = *s++;
+        if (cur == last && n > 0)
+            pdalboost::throw_exception(write_area_exhausted());
+        return n;
+    }
+};
+
+template<>
+struct range_adapter_impl<std::random_access_iterator_tag> {
+    template<typename Iter, typename Ch>
+    static std::streamsize read
+        (Iter& cur, Iter& last, Ch* s,std::streamsize n)
+    {
+        std::streamsize result = 
+            (std::min)(static_cast<std::streamsize>(last - cur), n);
+        if (result)
+            std::copy(cur, cur + result, s);
+        cur += result;
+        return result != 0 ? result : -1;
+    }
+
+    template<typename Iter, typename Ch>
+    static std::streamsize write
+        (Iter& cur, Iter& last, const Ch* s, std::streamsize n)
+    {
+        std::streamsize count =
+            (std::min)(static_cast<std::streamsize>(last - cur), n);
+        std::copy(s, s + count, cur);
+        cur += count;
+        if (count < n) 
+            pdalboost::throw_exception(write_area_exhausted());
+        return n;
+    }
+
+    template<typename Iter>
+    static void seek
+        ( Iter& first, Iter& cur, Iter& last, stream_offset off,
+          BOOST_IOS::seekdir way )
+    {
+        using namespace std;
+        switch (way) {
+        case BOOST_IOS::beg:
+            if (off > last - first || off < 0)
+                pdalboost::throw_exception(bad_seek());
+            cur = first + off;
+            break;
+        case BOOST_IOS::cur:
+            {
+                std::ptrdiff_t newoff = cur - first + off;
+                if (newoff > last - first || newoff < 0)
+                    pdalboost::throw_exception(bad_seek());
+                cur += off;
+                break;
+            }
+        case BOOST_IOS::end:
+            if (last - first + off < 0 || off > 0)
+                pdalboost::throw_exception(bad_seek());
+            cur = last + off;
+            break;
+        default:
+            BOOST_ASSERT(0);
+        }
+    }
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>  // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_RANGE_ADAPTER_HPP_INCLUDED //---------------//
diff --git a/vendor/pdalboost/boost/iostreams/detail/add_facet.hpp b/vendor/pdalboost/boost/iostreams/detail/add_facet.hpp
new file mode 100644
index 0000000..a226cd4
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/add_facet.hpp
@@ -0,0 +1,49 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Borrowed from <boost/archive/add_facet.hpp>
+
+#ifndef BOOST_IOSTREAMS_DETAIL_ADD_FACET_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_ADD_FACET_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>  // BOOST_DINKUMWARE_STDLIB.
+#include <boost/detail/workaround.hpp>
+
+//------------------Definition of add_facet-----------------------------------//
+
+// Does STLport uses old Dinkumware locale?
+#if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && \
+    defined(_STLP_NO_OWN_IOSTREAMS) \
+    /**/
+#  if (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
+#    define BOOST_IOSTREMS_STLPORT_WITH_OLD_DINKUMWARE
+#  endif
+#endif
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<class Facet>
+inline std::locale add_facet(const std::locale &l, Facet * f)
+{
+    return
+        #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) || \
+            defined(BOOST_IOSTREMS_STLPORT_WITH_OLD_DINKUMWARE) \
+            /**/
+            std::locale(std::_Addfac(l, f));
+        #else
+            // standard compatible
+            std::locale(l, f);
+        #endif
+}
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_ADD_FACET_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/bool_trait_def.hpp b/vendor/pdalboost/boost/iostreams/detail/bool_trait_def.hpp
new file mode 100644
index 0000000..73436ef
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/bool_trait_def.hpp
@@ -0,0 +1,58 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_BOOL_TRAIT_DEF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_BOOL_TRAIT_DEF_HPP_INCLUDED     
+
+#include <boost/config.hpp> // BOOST_STATIC_CONSTANT.
+#include <boost/iostreams/detail/template_params.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+ 
+// 
+// Macro name: BOOST_IOSTREAMS_BOOL_TRAIT_DEF
+// Description: Used to generate the traits classes is_istream, is_ostream,
+//      etc.
+//
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+# define BOOST_IOSTREAMS_TRAIT_NAMESPACE(trait)
+#else
+# define BOOST_IOSTREAMS_TRAIT_NAMESPACE(trait) BOOST_PP_CAT(trait, _impl_):: 
+#endif
+#define BOOST_IOSTREAMS_BOOL_TRAIT_DEF(trait, type, arity) \
+    namespace BOOST_PP_CAT(trait, _impl_) { \
+      BOOST_IOSTREAMS_TEMPLATE_PARAMS(arity, T) \
+      type_traits::yes_type helper \
+          (const volatile type BOOST_IOSTREAMS_TEMPLATE_ARGS(arity, T)*); \
+      type_traits::no_type helper(...); \
+      template<typename T> \
+      struct impl { \
+           BOOST_STATIC_CONSTANT(bool, value = \
+           (sizeof(BOOST_IOSTREAMS_TRAIT_NAMESPACE(trait) \
+              helper(static_cast<T*>(0))) == \
+                sizeof(type_traits::yes_type))); \
+      }; \
+    } \
+    template<typename T> \
+    struct trait \
+        : mpl::bool_<BOOST_PP_CAT(trait, _impl_)::impl<T>::value> \
+    { BOOST_MPL_AUX_LAMBDA_SUPPORT(1, trait, (T)) }; \
+    /**/
+
+#ifndef BOOST_IOSTREAMS_AUX_BOOL_C_BASE
+#   define BOOST_IOSTREAMS_AUX_BOOL_C_BASE(C) : public ::pdalboost::integral_constant<bool,C>
+#endif 
+
+#ifndef BOOST_IOSTREAMS_AUX_BOOL_TRAIT_VALUE_DECL
+#   define BOOST_IOSTREAMS_AUX_BOOL_TRAIT_VALUE_DECL(C) /**/
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_BOOL_TRAIT_DEF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/broken_overload_resolution/forward.hpp b/vendor/pdalboost/boost/iostreams/detail/broken_overload_resolution/forward.hpp
new file mode 100644
index 0000000..01d7989
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/broken_overload_resolution/forward.hpp
@@ -0,0 +1,31 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
+
+#include <boost/config.hpp>                     // BOOST_STATIC_CONSANT.
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<typename Device, typename U>
+struct forward_impl {
+    BOOST_STATIC_CONSTANT(bool, value =
+        ( !is_same< U, Device >::value &&
+          !is_same< U, reference_wrapper<Device> >::value ));
+};
+
+template<typename Device, typename U>
+struct forward
+    : mpl::bool_<forward_impl<Device, U>::value>
+    { };
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/broken_overload_resolution/stream.hpp b/vendor/pdalboost/boost/iostreams/detail/broken_overload_resolution/stream.hpp
new file mode 100644
index 0000000..f5510d2
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/broken_overload_resolution/stream.hpp
@@ -0,0 +1,184 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_STREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_STREAM_HPP_INCLUDED
+
+#include <boost/iostreams/detail/broken_overload_resolution/forward.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+template< typename Device,
+          typename Tr =
+              BOOST_IOSTREAMS_CHAR_TRAITS(
+                  BOOST_DEDUCED_TYPENAME char_type_of<Device>::type
+              ),
+          typename Alloc =
+              std::allocator<
+                  BOOST_DEDUCED_TYPENAME char_type_of<Device>::type
+              > >
+struct stream : detail::stream_base<Device, Tr, Alloc> {
+public:
+    typedef typename char_type_of<Device>::type  char_type;
+    struct category 
+        : mode_of<Device>::type,
+          closable_tag,
+          detail::stream_traits<Device, Tr>::stream_tag
+        { };
+    BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+private:
+    typedef typename
+            detail::stream_traits<
+                Device, Tr
+            >::stream_type                       stream_type;
+public:
+    stream() { }
+    template<typename U0>
+    stream(const U0& u0)
+    {
+        open_impl(detail::forward<Device, U0>(), u0);
+    }
+    template<typename U0, typename U1>
+    stream(const U0& u0, const U1& u1)
+    {
+        open_impl(detail::forward<Device, U0>(), u0, u1);
+    }
+    template<typename U0, typename U1, typename U2>
+    stream(const U0& u0, const U1& u1, const U2& u2)
+    {
+        open_impl(detail::forward<Device, U0>(), u0, u1, u2);
+    }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+    template<typename U0>
+    stream(U0& u0)
+    {
+        open_impl(detail::forward<Device, U0>(), u0);
+    }
+    template<typename U0, typename U1>
+    stream(U0& u0, const U1& u1)
+    {
+        open_impl(detail::forward<Device, U0>(), u0, u1);
+    }
+    template<typename U0, typename U1, typename U2>
+    stream(U0& u0, const U1& u1, const U2& u2)
+    {
+        open_impl(detail::forward<Device, U0>(), u0, u1, u2);
+    }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+    template<typename U0>
+    void open(const U0& u0)
+    {
+        open_impl(detail::forward<Device, U0>(), u0);
+    }
+    template<typename U0, typename U1>
+    void open(const U0& u0, const U1& u1)
+    {
+        open_impl(detail::forward<Device, U0>(), u0, u1);
+    }
+    template<typename U0, typename U1, typename U2>
+    void open(const U0& u0, const U1& u1, const U2& u2)
+    {
+        open_impl(detail::forward<Device, U0>(), u0, u1, u2);
+    }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+    template<typename U0>
+    void open(U0& u0)
+    {
+        open_impl(detail::forward<Device, U0>(), u0);
+    }
+    template<typename U0, typename U1>
+    void open(U0& u0, const U1& u1)
+    {
+        open_impl(detail::forward<Device, U0>(), u0, u1);
+    }
+    template<typename U0, typename U1, typename U2>
+    void open(U0& u0, const U1& u1, const U2& u2)
+    {
+        open_impl(detail::forward<Device, U0>(), u0, u1, u2);
+    }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+    bool is_open() const { return this->member.is_open(); }
+    void close() { this->member.close(); }
+    bool auto_close() const { return this->member.auto_close(); }
+    void set_auto_close(bool close) { this->member.set_auto_close(close); }
+    bool strict_sync() { return this->member.strict_sync(); }
+    Device& operator*() { return *this->member; }
+    Device* operator->() { return &*this->member; }
+private:
+    template<typename U0>
+    void open_impl(mpl::false_, const U0& u0)
+    {
+        this->clear(); 
+        this->member.open(u0);
+    }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+    template<typename U0>
+    void open_impl(mpl::false_, U0& u0)
+    {
+        this->clear(); 
+        this->member.open(detail::wrap(u0));
+    }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+    template<typename U0>
+    void open_impl(mpl::true_, const U0& u0)
+    {
+        this->clear(); 
+        this->member.open(Device(const_cast<U0&>(u0)));
+    }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+    template<typename U0>
+    void open_impl(mpl::true_, U0& u0)
+    {
+        this->clear(); 
+        this->member.open(Device(u0));
+    }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+    template<typename U0, typename U1>
+    void open_impl(mpl::false_, const U0& u0, const U1& u1)
+    {
+        this->clear(); 
+        this->member.open(u0, u1);
+    }
+    template<typename U0, typename U1>
+    void open_impl(mpl::true_, const U0& u0, const U1& u1)
+    {
+        this->clear(); 
+        this->member.open(Device(const_cast<U0&>(u0), u1));
+    }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+    template<typename U0, typename U1>
+    void open_impl(mpl::true_, U0& u0, const U1& u1)
+    {
+        this->clear(); 
+        this->member.open(Device(u0, u1));
+    }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+    template<typename U0, typename U1, typename U2>
+    void open_impl(mpl::false_, const U0& u0, const U1& u1, const U2& u2)
+    {
+        this->clear(); 
+        this->member.open(u0, u1, u2);
+    }
+    template<typename U0, typename U1, typename U2>
+    void open_impl(mpl::true_, const U0& u0, const U1& u1, const U2& u2)
+    {
+        this->clear(); 
+        this->member.open(Device(const_cast<U0&>(u0), u1, u2));
+    }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+    template<typename U0, typename U1, typename U2>
+    void open_impl(mpl::true_, U0& u0, const U1& u1, const U2& u2)
+    {
+        this->clear(); 
+        this->member.open(Device(u0, u1, u2));
+    }
+#endif
+};
+
+} } // End namespaces iostreams, boost.
+
+#endif BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_STREAM_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp b/vendor/pdalboost/boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp
new file mode 100644
index 0000000..8095f65
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp
@@ -0,0 +1,189 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_STREAM_BUFFER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_STREAM_BUFFER_HPP_INCLUDED
+
+#include <boost/iostreams/detail/broken_overload_resolution/forward.hpp>
+#include <boost/throw_exception.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+template< typename T, 
+          typename Tr = 
+              BOOST_IOSTREAMS_CHAR_TRAITS(
+                  BOOST_DEDUCED_TYPENAME char_type_of<T>::type 
+              ),
+          typename Alloc = 
+              std::allocator<
+                  BOOST_DEDUCED_TYPENAME char_type_of<T>::type 
+              >,
+          typename Mode = BOOST_DEDUCED_TYPENAME mode_of<T>::type >
+class stream_buffer
+    : public detail::stream_buffer_traits<T, Tr, Alloc, Mode>::type
+{
+private:
+    BOOST_STATIC_ASSERT((
+        is_convertible<
+            BOOST_DEDUCED_TYPENAME iostreams::category_of<T>::type, Mode
+        >::value
+    ));
+    typedef typename 
+            detail::stream_buffer_traits<
+                T, Tr, Alloc, Mode
+            >::type                           base_type;
+public:
+    typedef typename char_type_of<T>::type    char_type;
+    struct category 
+        : Mode,
+          closable_tag,
+          streambuf_tag
+        { };
+    BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+    stream_buffer() { }
+    ~stream_buffer()
+    { 
+        try { 
+            if (this->is_open() && this->auto_close()) 
+                this->close(); 
+        } catch (...) { } 
+    }
+    template<typename U0>
+    stream_buffer(const U0& u0)
+    {
+        open_impl(detail::forward<T, U0>(), u0);
+    }
+    template<typename U0, typename U1>
+    stream_buffer(const U0& u0, const U1& u1)
+    {
+        open_impl(detail::forward<T, U0>(), u0, u1);
+    }
+    template<typename U0, typename U1, typename U2>
+    stream_buffer(const U0& u0, const U1& u1, const U2& u2)
+    {
+        open_impl(detail::forward<T, U0>(), u0, u1, u2);
+    }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+    template<typename U0>
+    stream_buffer(U0& u0)
+    {
+        open_impl(detail::forward<T, U0>(), u0);
+    }
+    template<typename U0, typename U1>
+    stream_buffer(U0& u0, const U1& u1)
+    {
+        open_impl(detail::forward<T, U0>(), u0, u1);
+    }
+    template<typename U0, typename U1, typename U2>
+    stream_buffer(U0& u0, const U1& u1, const U2& u2)
+    {
+        open_impl(detail::forward<T, U0>(), u0, u1, u2);
+    }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+    template<typename U0>
+    void open(const U0& u0)
+    {
+        open_impl(detail::forward<T, U0>(), u0);
+    }
+    template<typename U0, typename U1>
+    void open(const U0& u0, const U1& u1)
+    {
+        open_impl(detail::forward<T, U0>(), u0, u1);
+    }
+    template<typename U0, typename U1, typename U2>
+    void open(const U0& u0, const U1& u1, const U2& u2)
+    {
+        open_impl(detail::forward<T, U0>(), u0, u1, u2);
+    }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+    template<typename U0>
+    void open(U0& u0)
+    {
+        open_impl(detail::forward<T, U0>(), u0);
+    }
+    template<typename U0, typename U1>
+    void open(U0& u0, const U1& u1)
+    {
+        open_impl(detail::forward<T, U0>(), u0, u1);
+    }
+    template<typename U0, typename U1, typename U2>
+    void open(U0& u0, const U1& u1, const U2& u2)
+    {
+        open_impl(detail::forward<T, U0>(), u0, u1, u2);
+    }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+    T& operator*() { return *this->component(); }
+    T* operator->() { return this->component(); }
+private:
+    template<typename U0>
+    void open_impl(mpl::false_, const U0& u0)
+    {
+        base_type::open(const_cast<U0&>(u0), -1, -1);
+    }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+    template<typename U0>
+    void open_impl(mpl::false_, U0& u0)
+    {
+        base_type::open(detail::wrap(u0), -1, -1);
+    }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+    template<typename U0>
+    void open_impl(mpl::true_, const U0& u0)
+    {
+        base_type::open(T(const_cast<U0&>(u0)), -1, -1);
+    }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+    template<typename U0>
+    void open_impl(mpl::true_, U0& u0)
+    {
+        base_type::open(T(u0), -1, -1);
+    }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+    template<typename U0, typename U1>
+    void open_impl(mpl::false_, const U0& u0, const U1& u1)
+    {
+        base_type::open(u0, u1, -1);
+    }
+    template<typename U0, typename U1>
+    void open_impl(mpl::true_, const U0& u0, const U1& u1)
+    {
+        base_type::open(T(const_cast<U0&>(u0), u1), -1, -1);
+    }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+    template<typename U0, typename U1>
+    void open_impl(mpl::true_, U0& u0, const U1& u1)
+    {
+        base_type::open(T(u0, u1), -1, -1);
+    }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+    template<typename U0, typename U1, typename U2>
+    void open_impl(mpl::false_, const U0& u0, const U1& u1, const U2& u2)
+    {
+        base_type::open(u0, u1, u2);
+    }
+    template<typename U0, typename U1, typename U2>
+    void open_impl(mpl::true_, const U0& u0, const U1& u1, const U2& u2)
+    {
+        base_type::open(T(const_cast<U0&>(u0), u1, u2), -1, -1);
+    }
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+    template<typename U0, typename U1, typename U2>
+    void open_impl(mpl::true_, U0& u0, const U1& u1, const U2& u2)
+    {
+        base_type::open(T(u0, u1, u2), -1, -1);
+    }
+#endif // !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------//
+    void check_open()
+    {
+        if (this->is_open()) 
+            pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("already open"));
+    }
+};
+
+} } // End namespaces iostreams, boost.
+
+#endif // BOOST_IOSTREAMS_DETAIL_BROKEN_OVERLOAD_RESOLUTION_STREAM_BUFFER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/buffer.hpp b/vendor/pdalboost/boost/iostreams/detail/buffer.hpp
new file mode 100644
index 0000000..bad5045
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/buffer.hpp
@@ -0,0 +1,200 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_BUFFERS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_BUFFERS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <algorithm>                           // swap.
+#include <memory>                              // allocator.
+#include <boost/config.hpp>                    // member templates.
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp>      // streamsize.
+#include <boost/iostreams/read.hpp>
+#include <boost/iostreams/traits.hpp>          // int_type_of.
+#include <boost/iostreams/checked_operations.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+//----------------Buffers-----------------------------------------------------//
+
+//
+// Template name: buffer
+// Description: Character buffer.
+// Template parameters:
+//     Ch - The character type.
+//     Alloc - The Allocator type.
+//
+template< typename Ch,
+          typename Alloc = std::allocator<Ch> >
+class basic_buffer {
+private:
+#ifndef BOOST_NO_STD_ALLOCATOR
+    typedef typename Alloc::template rebind<Ch>::other allocator_type;
+#else
+    typedef std::allocator<Ch> allocator_type;
+#endif
+public:
+    basic_buffer();
+    basic_buffer(int buffer_size);
+    ~basic_buffer();
+    void resize(int buffer_size);
+    Ch* begin() const { return buf_; }
+    Ch* end() const { return buf_ + size_; }
+    Ch* data() const { return buf_; }
+    std::streamsize size() const { return size_; }
+    void swap(basic_buffer& rhs);
+private:
+    // Disallow copying and assignment.
+    basic_buffer(const basic_buffer&);
+    basic_buffer& operator=(const basic_buffer&);
+    Ch*              buf_;
+    std::streamsize  size_;
+};
+
+template<typename Ch, typename Alloc>
+void swap(basic_buffer<Ch, Alloc>& lhs, basic_buffer<Ch, Alloc>& rhs)
+{ lhs.swap(rhs); }
+
+//
+// Template name: buffer
+// Description: Character buffer with two pointers accessible via ptr() and
+//      eptr().
+// Template parameters:
+//     Ch - A character type.
+//
+template< typename Ch,
+          typename Alloc = std::allocator<Ch> >
+class buffer : public basic_buffer<Ch, Alloc> {
+private:
+    typedef basic_buffer<Ch, Alloc> base;
+public:
+    typedef iostreams::char_traits<Ch> traits_type;
+    using base::resize; 
+    using base::data; 
+    using base::size;
+    typedef Ch* const const_pointer;
+    buffer(int buffer_size);
+    Ch* & ptr() { return ptr_; }
+    const_pointer& ptr() const { return ptr_; }
+    Ch* & eptr() { return eptr_; }
+    const_pointer& eptr() const { return eptr_; }
+    void set(std::streamsize ptr, std::streamsize end);
+    void swap(buffer& rhs);
+
+    // Returns an int_type as a status code.
+    template<typename Source>
+    typename int_type_of<Source>::type fill(Source& src) 
+    {
+        using namespace std;
+        std::streamsize keep;
+        if ((keep = static_cast<std::streamsize>(eptr_ - ptr_)) > 0)
+            traits_type::move(this->data(), ptr_, keep);
+        set(0, keep);
+        std::streamsize result = 
+            iostreams::read(src, this->data() + keep, this->size() - keep);
+        if (result != -1)
+            this->set(0, keep + result);
+        return result == -1 ?
+            traits_type::eof() :
+                result == 0 ?
+                    traits_type::would_block() :
+                    traits_type::good();
+
+    }
+
+    // Returns true if one or more characters were written.
+    template<typename Sink>
+    bool flush(Sink& dest) 
+    {
+        using namespace std;
+        std::streamsize amt = static_cast<std::streamsize>(eptr_ - ptr_);
+        std::streamsize result = iostreams::write_if(dest, ptr_, amt);
+        if (result < amt) {
+            traits_type::move( this->data(), 
+                               ptr_ + result, 
+                               amt - result );
+        }
+        this->set(0, amt - result);
+        return result != 0;
+    }
+private:
+    Ch *ptr_, *eptr_;
+};
+
+template<typename Ch, typename Alloc>
+void swap(buffer<Ch, Alloc>& lhs, buffer<Ch, Alloc>& rhs)
+{ lhs.swap(rhs); }
+
+//--------------Implementation of basic_buffer--------------------------------//
+
+template<typename Ch, typename Alloc>
+basic_buffer<Ch, Alloc>::basic_buffer() : buf_(0), size_(0) { }
+
+template<typename Ch, typename Alloc>
+basic_buffer<Ch, Alloc>::basic_buffer(int buffer_size)
+    : buf_(static_cast<Ch*>(allocator_type().allocate(buffer_size, 0))), 
+      size_(buffer_size) // Cast for SunPro 5.3.
+    { }
+
+template<typename Ch, typename Alloc>
+inline basic_buffer<Ch, Alloc>::~basic_buffer()
+{
+    if (buf_) {
+        allocator_type().deallocate(buf_,
+            static_cast<BOOST_DEDUCED_TYPENAME Alloc::size_type>(size_));
+    }
+}
+
+template<typename Ch, typename Alloc>
+inline void basic_buffer<Ch, Alloc>::resize(int buffer_size)
+{
+    if (size_ != buffer_size) {
+        basic_buffer<Ch, Alloc> temp(buffer_size);
+        std::swap(size_, temp.size_);
+        std::swap(buf_, temp.buf_);
+    }
+}
+
+template<typename Ch, typename Alloc>
+void basic_buffer<Ch, Alloc>::swap(basic_buffer& rhs) 
+{ 
+    std::swap(buf_, rhs.buf_); 
+    std::swap(size_, rhs.size_); 
+}
+
+//--------------Implementation of buffer--------------------------------------//
+
+template<typename Ch, typename Alloc>
+buffer<Ch, Alloc>::buffer(int buffer_size)
+    : basic_buffer<Ch, Alloc>(buffer_size) { }
+
+template<typename Ch, typename Alloc>
+inline void buffer<Ch, Alloc>::set(std::streamsize ptr, std::streamsize end)
+{ 
+    ptr_ = data() + ptr; 
+    eptr_ = data() + end; 
+}
+
+template<typename Ch, typename Alloc>
+inline void buffer<Ch, Alloc>::swap(buffer& rhs) 
+{ 
+    base::swap(rhs); 
+    std::swap(ptr_, rhs.ptr_); 
+    std::swap(eptr_, rhs.eptr_); 
+}
+
+//----------------------------------------------------------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_BUFFERS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/call_traits.hpp b/vendor/pdalboost/boost/iostreams/detail/call_traits.hpp
new file mode 100644
index 0000000..4a64cc0
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/call_traits.hpp
@@ -0,0 +1,32 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_VALUE_TYPE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_VALUE_TYPE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<typename T>
+struct param_type {
+    typedef typename mpl::if_<is_std_io<T>, T&, const T&>::type type;
+};
+
+template<typename T>
+struct value_type {
+    typedef typename mpl::if_<is_std_io<T>, T&, T>::type type;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_VALUE_TYPE_HPP_INCLUDED //-----------//
diff --git a/vendor/pdalboost/boost/iostreams/detail/char_traits.hpp b/vendor/pdalboost/boost/iostreams/detail/char_traits.hpp
new file mode 100644
index 0000000..468eb6e
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/char_traits.hpp
@@ -0,0 +1,63 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// Provides std::char_traits for libraries without templated streams. Should not
+// be confused with <boost/iostreams/char_traits.hpp>, which defines the
+// template pdalboost::iostreams::char_traits.
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CHAR_TRAITS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CHAR_TRAITS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <iosfwd>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifdef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# include <boost/config.hpp> // Make sure size_t is in std.
+# include <cstddef>
+# include <cstring>
+# include <cstdio>
+#endif
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------------------//
+# define BOOST_IOSTREAMS_CHAR_TRAITS(ch) std::char_traits< ch >
+#else
+# define BOOST_IOSTREAMS_CHAR_TRAITS(ch) pdalboost::iostreams::detail::char_traits
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+struct char_traits  {
+    typedef char            char_type;
+    typedef int             int_type;
+    typedef std::streampos  pos_type;
+    typedef std::streamoff  off_type;
+
+    // Note: this may not be not conforming, since it treats chars as unsigned,
+    // but is only used to test for equality.
+    static int compare(const char* lhs, const char* rhs, std::size_t n)
+    { return std::strncmp(lhs, rhs, n); }
+    static char* copy(char *dest, const char *src, std::size_t n)
+    { return static_cast<char*>(std::memcpy(dest, src, n)); }
+    static char* move(char *dest, const char *src, std::size_t n)
+    { return static_cast<char*>(std::memmove(dest, src, n)); }
+    static const char* find(const char* s, std::size_t n, const char& c)
+    { return (const char*) (const void*) std::memchr(s, c, n); }
+    static char to_char_type(const int& c) { return c; }
+    static int to_int_type(const char& c) { return c; }
+    static bool eq_int_type(const int& lhs, const int& rhs)
+    { return lhs == rhs; }
+    static int eof() { return EOF; }
+    static int not_eof(const int& c) { return c != EOF ? c : '\n'; }
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifdef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-----------------------//
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CHAR_TRAITS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/codecvt_helper.hpp b/vendor/pdalboost/boost/iostreams/detail/codecvt_helper.hpp
new file mode 100644
index 0000000..6b5259b
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/codecvt_helper.hpp
@@ -0,0 +1,237 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains the definition of the template codecvt_helper, useful for
+// defining specializations of std::codecvt where state_type != mbstate_t.
+// Compensates for the fact that some standard library implementations 
+// do not derive the primiary codecvt template from locale::facet or 
+// provide the correct member types and functions.
+
+// Usage: 
+//
+// // In global namespace:
+// BOOST_IOSTREAMS_CODECVT_SPEC(mystate)
+//
+// // In user namespace:
+// template<typename Intern, typename Extern>
+// struct mycodecvt : codecvt_helper<Intern, Extern, State> { ... };
+//
+// // Or:
+// struct mycodecvt : codecvt_helper<wchar_t, char, State> { ... };
+// 
+// Etc.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CODECVT_HELPER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CODECVT_HELPER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>  // Put size_t in std, BOOST_MSVC, Dinkum.
+#include <boost/detail/workaround.hpp>
+#include <algorithm>         // min.
+#include <cstddef>           // size_t.
+#include <locale>            // locale, codecvt_base, codecvt.
+#include <boost/iostreams/detail/config/codecvt.hpp>
+
+//------------------Definition of traits--------------------------------------//
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+#if !BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) //-----------------------//
+
+template<typename T>
+struct codecvt_intern { typedef typename T::intern_type type; };
+
+template<typename T>
+struct codecvt_extern { typedef typename T::extern_type type; };
+
+#else // #if !BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) //--------------//
+
+template<typename T>
+struct codecvt_intern { typedef typename T::from_type type; };
+
+template<typename T>
+struct codecvt_extern { typedef typename T::to_type type; };
+
+#endif // #if !BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) //-------------//
+
+template<typename T>
+struct codecvt_state { typedef typename T::state_type type; };
+
+} } } // End namespaces detail, iostreams, boost.
+
+//------------------Definition of codecvt_impl--------------------------------//
+
+#if defined(BOOST_IOSTREAMS_NO_PRIMARY_CODECVT_DEFINITION) || \
+    defined(BOOST_IOSTREAMS_EMPTY_PRIMARY_CODECVT_DEFINITION) || \
+    defined(BOOST_IOSTREAMS_NO_LOCALE) \
+    /**/
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<typename Intern, typename Extern, typename State>
+struct codecvt_impl : std::locale::facet, std::codecvt_base {
+public:
+    typedef Intern  intern_type;
+    typedef Extern  extern_type;
+    typedef State   state_type;
+
+    codecvt_impl(std::size_t refs = 0) : std::locale::facet(refs) { } 
+
+    std::codecvt_base::result
+    in( State& state, const Extern* first1, const Extern* last1,
+        const Extern*& next1, Intern* first2, Intern* last2,
+        Intern*& next2 ) const
+    {
+        return do_in(state, first1, last1, next1, first2, last2, next2);
+    }
+
+    std::codecvt_base::result
+    out( State& state, const Intern* first1, const Intern* last1,
+         const Intern*& next1, Extern* first2, Extern* last2,
+         Extern*& next2 ) const
+    {
+        return do_out(state, first1, last1, next1, first2, last2, next2);
+    }
+
+    std::codecvt_base::result
+    unshift(State& state, Extern* first2, Extern* last2, Extern*& next2) const
+    {
+        return do_unshift(state, first2, last2, next2);
+    }
+
+    bool always_noconv() const throw() { return do_always_noconv(); }
+
+    int max_length() const throw() { return do_max_length(); }
+
+    int encoding() const throw() { return do_encoding(); }
+
+    int length( BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER State& state, 
+                const Extern* first1, const Extern* last1,
+                std::size_t len2 ) const throw()
+    {
+        return do_length(state, first1, last1, len2);
+    }
+protected:
+    std::codecvt_base::result
+    virtual do_in( State&, const Extern*, const Extern*, const Extern*&, 
+                   Intern*, Intern*, Intern*& ) const
+    {
+        return std::codecvt_base::noconv;
+    }
+
+    std::codecvt_base::result
+    virtual do_out( State&, const Intern*, const Intern*, const Intern*&, 
+                    Extern*, Extern*, Extern*& ) const
+    {
+        return std::codecvt_base::noconv;
+    }
+
+    std::codecvt_base::result
+    virtual do_unshift(State&, Extern*, Extern*, Extern*&) const
+    {
+        return std::codecvt_base::ok;
+    }
+
+    virtual bool do_always_noconv() const throw() { return true; }
+
+    virtual int do_max_length() const throw() { return 1; }
+
+    virtual int do_encoding() const throw() { return 1; }
+
+    virtual int do_length( BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER State&, 
+                           const Extern* first1, const Extern* last1,
+                           std::size_t len2 ) const throw()
+    {
+        return (std::min)(static_cast<std::size_t>(last1 - first1), len2);
+    }
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // no primary codecvt definition, empty definition.
+
+//------------------Definition of BOOST_IOSTREAMS_CODECVT_SPEC----------------//
+
+#if defined(BOOST_IOSTREAMS_NO_PRIMARY_CODECVT_DEFINITION) || \
+    defined(BOOST_IOSTREAMS_EMPTY_PRIMARY_CODECVT_DEFINITION) \
+    /**/
+# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#  define BOOST_IOSTREAMS_CODECVT_SPEC(state) \
+    namespace std { \
+        template<typename Intern, typename Extern> \
+        class codecvt<Intern, Extern, state> \
+            : public ::pdalboost::iostreams::detail::codecvt_impl< \
+                         Intern, Extern, state \
+                     > \
+        { \
+        public: \
+            codecvt(std::size_t refs = 0) \
+                : ::pdalboost::iostreams::detail::codecvt_impl< \
+                      Intern, Extern, state \
+                  >(refs) \
+                { } \
+            static std::locale::id id; \
+        }; \
+        template<typename Intern, typename Extern> \
+        std::locale::id codecvt<Intern, Extern, state>::id; \
+    } \
+    /**/
+# else
+#  define BOOST_IOSTREAMS_CODECVT_SPEC(state) \
+    namespace std { \
+        template<> \
+        class codecvt<wchar_t, char, state> \
+            : public ::pdalboost::iostreams::detail::codecvt_impl< \
+                         wchar_t, char, state \
+                     > \
+        { \
+        public: \
+            codecvt(std::size_t refs = 0) \
+                : ::pdalboost::iostreams::detail::codecvt_impl< \
+                      wchar_t, char, state \
+                  >(refs) \
+                { } \
+            static std::locale::id id; \
+        }; \
+        template<> \
+        std::locale::id codecvt<wchar_t, char, state>::id; \
+    } \
+    /**/
+# endif
+#else
+# define BOOST_IOSTREAMS_CODECVT_SPEC(state)
+#endif // no primary codecvt definition, or empty definition.
+
+namespace pdalboost { namespace iostreams { namespace detail {
+                    
+//------------------Definition of codecvt_helper------------------------------//
+
+template<typename Intern, typename Extern, typename State>
+struct codecvt_helper : std::codecvt<Intern, Extern, State> { 
+    typedef Intern  intern_type;
+    typedef Extern  extern_type;
+    typedef State   state_type;
+    codecvt_helper(std::size_t refs = 0) 
+    #if !defined(BOOST_IOSTREAMS_NO_CODECVT_CTOR_FROM_SIZE_T)
+        : std::codecvt<Intern, Extern, State>(refs)
+    #else
+        : std::codecvt<Intern, Extern, State>()
+    #endif
+        { }
+#ifdef BOOST_IOSTREAMS_NO_CODECVT_MAX_LENGTH
+    int max_length() const throw() { return do_max_length(); }
+protected:
+    virtual int do_max_length() const throw() { return 1; }
+#endif
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CODECVT_HELPER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/codecvt_holder.hpp b/vendor/pdalboost/boost/iostreams/detail/codecvt_holder.hpp
new file mode 100644
index 0000000..f80210e
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/codecvt_holder.hpp
@@ -0,0 +1,63 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains machinery for performing code conversion.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CODECVT_HOLDER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CODECVT_HOLDER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <cwchar>            // mbstate_t.
+#include <locale>            // codecvt, locale.
+#include <boost/config.hpp>  // HAS_MACRO_USE_FACET.
+#include <boost/iostreams/detail/config/codecvt.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+struct default_codecvt { 
+    typedef wchar_t         intern_type, from_type;
+    typedef char            extern_type, to_type;
+    typedef std::mbstate_t  state_type;
+};
+
+template<typename Codecvt>
+struct codecvt_holder {
+    typedef Codecvt codecvt_type;
+    const codecvt_type& get() const { return codecvt_; }
+    void imbue(const std::locale&) { }
+    Codecvt codecvt_;
+};
+
+template<>
+struct codecvt_holder<default_codecvt> {
+    typedef std::codecvt<wchar_t, char, std::mbstate_t> codecvt_type;
+    codecvt_holder() { reset_codecvt(); }
+    const codecvt_type& get() const { return *codecvt_; }
+    void imbue(const std::locale& loc) 
+    { 
+        loc_ = loc;
+        reset_codecvt();
+    }
+    void reset_codecvt()
+    {
+        using namespace std;
+        #ifndef BOOST_HAS_MACRO_USE_FACET
+            codecvt_ = & use_facet< codecvt_type >(loc_);
+        #else
+            codecvt_ = & _USE(loc_, codecvt_type);
+        #endif
+    }
+    std::locale loc_; // Prevent codecvt_ from being freed.
+    const codecvt_type* codecvt_;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CODECVT_HOLDER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/config/auto_link.hpp b/vendor/pdalboost/boost/iostreams/detail/config/auto_link.hpp
new file mode 100644
index 0000000..4818c5d
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/config/auto_link.hpp
@@ -0,0 +1,49 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from <boost/config/auto_link.hpp> and from
+// http://www.boost.org/more/separate_compilation.html, by John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_AUTO_LINK_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_AUTO_LINK_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#if defined(BOOST_EXTERNAL_LIB_NAME)
+# if defined(BOOST_MSVC) \
+     || defined(__BORLANDC__) \
+     || (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) \
+     || (defined(__ICL) && defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200)) \
+     /**/
+#  pragma comment(lib, BOOST_EXTERNAL_LIB_NAME)
+# endif
+# undef BOOST_EXTERNAL_LIB_NAME
+#endif
+
+//------------------Enable automatic library variant selection----------------// 
+
+#if !defined(BOOST_IOSTREAMS_SOURCE) && \
+    !defined(BOOST_ALL_NO_LIB) && \
+    !defined(BOOST_IOSTREAMS_NO_LIB) \
+    /**/
+
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it.
+# define BOOST_LIB_NAME pdalboost_iostreams
+
+// If we're importing code from a dll, then tell auto_link.hpp about it.
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_IOSTREAMS_DYN_LINK)
+#  define BOOST_DYN_LINK
+# endif
+
+// And include the header that does the work.
+# include <boost/config/auto_link.hpp>
+#endif  // auto-linking disabled
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_AUTO_LINK_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/config/bzip2.hpp b/vendor/pdalboost/boost/iostreams/detail/config/bzip2.hpp
new file mode 100644
index 0000000..ed9c1d7
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/config/bzip2.hpp
@@ -0,0 +1,48 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from <boost/config/auto_link.hpp> and from
+// http://www.boost.org/more/separate_compilation.html, by John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_BZIP2_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_BZIP2_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#if defined(BOOST_BZIP2_BINARY)
+# if defined(BOOST_MSVC) || \
+     defined(__BORLANDC__) || \
+     (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) || \
+     (defined(__ICL) && defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200)) \
+     /**/
+
+// Specify the name of the .lib file.
+#  pragma comment(lib, BOOST_STRINGIZE(BOOST_BZIP2_BINARY))
+# endif
+#else 
+# if !defined(BOOST_IOSTREAMS_SOURCE) && \
+     !defined(BOOST_ALL_NO_LIB) && \
+     !defined(BOOST_IOSTREAMS_NO_LIB) \
+     /**/
+
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it.
+#  define BOOST_LIB_NAME pdalboost_bzip2
+
+// If we're importing code from a dll, then tell auto_link.hpp about it.
+#  if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_IOSTREAMS_DYN_LINK)
+#   define BOOST_DYN_LINK
+#  endif
+
+// And include the header that does the work.
+#  include <boost/config/auto_link.hpp>
+# endif
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_BZIP2_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/config/codecvt.hpp b/vendor/pdalboost/boost/iostreams/detail/config/codecvt.hpp
new file mode 100644
index 0000000..7c6cb1f
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/config/codecvt.hpp
@@ -0,0 +1,80 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_CODECVT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_CODECVT_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <cstddef>
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif       
+
+//------------------Support for codecvt with user-defined state types---------//
+
+#if defined(__MSL_CPP__) || defined(__LIBCOMO__) || \
+    BOOST_WORKAROUND(_STLPORT_VERSION, <= 0x450) \
+    /**/
+# define BOOST_IOSTREAMS_NO_PRIMARY_CODECVT_DEFINITION
+#endif
+
+#if defined(__GLIBCPP__) || defined(__GLIBCXX__) || \
+    BOOST_WORKAROUND(_STLPORT_VERSION, > 0x450) \
+    /**/
+# define BOOST_IOSTREAMS_EMPTY_PRIMARY_CODECVT_DEFINITION
+#endif
+
+//------------------Check for codecvt ctor taking a reference count-----------//
+
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) || \
+    BOOST_WORKAROUND(_STLPORT_VERSION, < 0x461) \
+    /**/
+# define BOOST_IOSTREAMS_NO_CODECVT_CTOR_FROM_SIZE_T
+#endif
+
+//------------------Normalize codecvt::length---------------------------------//
+
+#if !defined(__MSL_CPP__) && !defined(__LIBCOMO__) && \
+    (!defined(BOOST_RWSTD_VER) || BOOST_RWSTD_VER < 0x04010300) && \
+    (!defined(__MACH__) || !defined(__INTEL_COMPILER))
+    /**/
+# define BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER const
+#else
+# define BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER
+#endif
+
+//------------------Check for codecvt::max_length-----------------------------//
+
+#if BOOST_WORKAROUND(_STLPORT_VERSION, < 0x461)
+# define BOOST_IOSTREAMS_NO_CODECVT_MAX_LENGTH
+#endif
+                    
+//------------------Put mbstate_t and codecvt in std--------------------------//
+
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+# include <locale>
+#endif
+
+// From Robert Ramey's version of utf8_codecvt_facet.
+namespace std { 
+
+#if defined(__LIBCOMO__)
+    using ::mbstate_t;
+#elif defined(BOOST_DINKUMWARE_STDLIB) && !defined(__BORLANDC__)
+    using ::mbstate_t;
+#elif defined(__SGI_STL_PORT)
+#elif defined(BOOST_NO_STDC_NAMESPACE)
+    using ::codecvt;
+    using ::mbstate_t;
+#endif
+
+} // End namespace std.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_CODECVT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/config/disable_warnings.hpp b/vendor/pdalboost/boost/iostreams/detail/config/disable_warnings.hpp
new file mode 100644
index 0000000..ef25cdb
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/config/disable_warnings.hpp
@@ -0,0 +1,30 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <boost/config.hpp>             // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>  // BOOST_WORKAROUND.
+
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable:4127)    // Conditional expression is constant.
+# pragma warning(disable:4130)    // Logical operation on address of string constant.
+# pragma warning(disable:4224)    // Parameter previously defined as type.
+# pragma warning(disable:4244)    // Conversion: possible loss of data.
+# pragma warning(disable:4512)    // Assignment operator could not be generated.
+# pragma warning(disable:4706)    // Assignment within conditional expression.
+# if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#  pragma warning(disable:6334)   // sizeof applied to an expression with an operator.
+# endif
+#else
+# if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+#  pragma warn -8008     // Condition always true/false.
+#  pragma warn -8066     // Unreachable code.
+#  pragma warn -8071     // Conversion may lose significant digits.
+#  pragma warn -8072     // Suspicious pointer arithmetic.
+#  pragma warn -8080     // identifier declared but never used.
+# endif
+#endif
diff --git a/vendor/pdalboost/boost/iostreams/detail/config/dyn_link.hpp b/vendor/pdalboost/boost/iostreams/detail/config/dyn_link.hpp
new file mode 100644
index 0000000..518e0b0
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/config/dyn_link.hpp
@@ -0,0 +1,37 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from http://www.boost.org/more/separate_compilation.html, by
+// John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_DYN_LINK_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_DYN_LINK_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+//------------------Enable dynamic linking on windows-------------------------// 
+
+#ifdef BOOST_HAS_DECLSPEC 
+# if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_IOSTREAMS_DYN_LINK)
+#  ifdef BOOST_IOSTREAMS_SOURCE
+#   define BOOST_IOSTREAMS_DECL __declspec(dllexport)
+#  else
+#   define BOOST_IOSTREAMS_DECL __declspec(dllimport)
+#  endif  
+# endif  
+#endif 
+
+#ifndef BOOST_IOSTREAMS_DECL
+# define BOOST_IOSTREAMS_DECL
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_DYN_LINK_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/config/enable_warnings.hpp b/vendor/pdalboost/boost/iostreams/detail/config/enable_warnings.hpp
new file mode 100644
index 0000000..5712f36
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/config/enable_warnings.hpp
@@ -0,0 +1,18 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#else
+# if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+#  pragma warn .8008     // Condition always true/false.
+#  pragma warn .8066     // Unreachable code.
+#  pragma warn .8071     // Conversion may lose significant digits.
+#  pragma warn .8072     // Suspicious pointer arithmetic.
+#  pragma warn .8080     // identifier declared but never used.
+# endif
+#endif
diff --git a/vendor/pdalboost/boost/iostreams/detail/config/fpos.hpp b/vendor/pdalboost/boost/iostreams/detail/config/fpos.hpp
new file mode 100644
index 0000000..811a8d6
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/config/fpos.hpp
@@ -0,0 +1,31 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+
+ * File:        boost/iostreams/detail/execute.hpp
+ * Date:        Thu Dec 06 13:21:54 MST 2007
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ *
+ * Defines the preprocessor symbol BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS for
+ * platforms that use the implementation of std::fpos from the Dinkumware 
+ * Standard Library.
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_FPOS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_FPOS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+# if (defined(_YVALS) || defined(_CPPLIB_VER)) && !defined(__SGI_STL_PORT) && \
+     !defined(_STLPORT_VERSION) && !defined(__QNX__)
+     /**/
+#  define BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+# endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_FPOS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/config/gcc.hpp b/vendor/pdalboost/boost/iostreams/detail/config/gcc.hpp
new file mode 100644
index 0000000..a1d57b0
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/config/gcc.hpp
@@ -0,0 +1,27 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from <boost/config/auto_link.hpp> and from
+// http://www.boost.org/more/separate_compilation.html, by John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_GCC_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_GCC_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <boost/config.hpp> // BOOST_INTEL.
+
+#if defined(__GNUC__) && !defined(BOOST_INTEL)
+# define BOOST_IOSTREAMS_GCC (__GNUC__ * 100 + __GNUC_MINOR__)
+# define BOOST_IOSTREAMS_GCC_WORKAROUND_GUARD 1
+#else
+# define BOOST_IOSTREAMS_GCC_WORKAROUND_GUARD 0
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_GCC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/config/limits.hpp b/vendor/pdalboost/boost/iostreams/detail/config/limits.hpp
new file mode 100644
index 0000000..155d6b0
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/config/limits.hpp
@@ -0,0 +1,19 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_LIMITS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_LIMITS_HPP_INCLUDED
+
+#ifndef BOOST_IOSTREAMS_MAX_FORWARDING_ARITY
+# define BOOST_IOSTREAMS_MAX_FORWARDING_ARITY 3
+#endif
+
+#ifndef BOOST_IOSTREAMS_MAX_EXECUTE_ARITY
+# define BOOST_IOSTREAMS_MAX_EXECUTE_ARITY 5
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_LIMITS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/config/overload_resolution.hpp b/vendor/pdalboost/boost/iostreams/detail/config/overload_resolution.hpp
new file mode 100644
index 0000000..bbdd442
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/config/overload_resolution.hpp
@@ -0,0 +1,32 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from <boost/config/auto_link.hpp> and from
+// http://www.boost.org/more/separate_compilation.html, by John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif             
+
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/config/gcc.hpp>
+
+#if !defined(BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION)
+# if BOOST_WORKAROUND(__MWERKS__, <= 0x3003) || \
+     BOOST_WORKAROUND(__BORLANDC__, < 0x600) || \
+     BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || \
+     BOOST_WORKAROUND(BOOST_IOSTREAMS_GCC, <= 295) \
+     /**/
+#  define BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION
+# endif
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_BROKEN_OVERLOAD_RESOLUTION_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/config/rtl.hpp b/vendor/pdalboost/boost/iostreams/detail/config/rtl.hpp
new file mode 100644
index 0000000..d9fbe50
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/config/rtl.hpp
@@ -0,0 +1,72 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * Defines preprocessor symbols expanding to the names of functions in the 
+ * C runtime library used to access file descriptors and to the type used
+ * to store file offsets for seeking.
+ * 
+ * File:        boost/iostreams/detail/config/rtl.hpp
+ * Date:        Wed Dec 26 11:58:11 MST 2007
+ * 
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_RTL_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_RTL_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+
+// Handle open, close, read, and write
+#ifdef __BORLANDC__
+# define BOOST_IOSTREAMS_RTL(x) BOOST_JOIN(_rtl_, x)
+#elif defined BOOST_IOSTREAMS_WINDOWS
+# define BOOST_IOSTREAMS_RTL(x) BOOST_JOIN(_, x)
+#else
+# define BOOST_IOSTREAMS_RTL(x) ::x  // Distinguish from member function named x
+#endif
+#define BOOST_IOSTREAMS_FD_OPEN   BOOST_IOSTREAMS_RTL(open)
+#define BOOST_IOSTREAMS_FD_CLOSE  BOOST_IOSTREAMS_RTL(close)
+#define BOOST_IOSTREAMS_FD_READ   BOOST_IOSTREAMS_RTL(read)
+#define BOOST_IOSTREAMS_FD_WRITE  BOOST_IOSTREAMS_RTL(write)
+
+// Handle lseek, off_t, ftruncate, and stat
+#ifdef BOOST_IOSTREAMS_WINDOWS
+# if defined(BOOST_MSVC) || defined(__MSVCRT__) // MSVC, MinGW
+#  define BOOST_IOSTREAMS_FD_SEEK    _lseeki64
+#  define BOOST_IOSTREAMS_FD_OFFSET  __int64
+# else                                          // Borland, Metrowerks, ...
+#  define BOOST_IOSTREAMS_FD_SEEK    lseek  
+#  define BOOST_IOSTREAMS_FD_OFFSET  long
+# endif
+#else // Non-windows
+# if defined(_LARGEFILE64_SOURCE) && !defined(__APPLE__) && \
+         (!defined(_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS != 64) || \
+     defined(_AIX) && !defined(_LARGE_FILES) || \
+     defined(BOOST_IOSTREAMS_HAS_LARGE_FILE_EXTENSIONS)
+     /**/
+
+    /* Systems with transitional extensions for large file support */
+
+#  define BOOST_IOSTREAMS_FD_SEEK      lseek64
+#  define BOOST_IOSTREAMS_FD_TRUNCATE  ftruncate64
+#  define BOOST_IOSTREAMS_FD_MMAP      mmap64
+#  define BOOST_IOSTREAMS_FD_STAT      stat64
+#  define BOOST_IOSTREAMS_FD_FSTAT     fstat64
+#  define BOOST_IOSTREAMS_FD_OFFSET    off64_t
+# else
+#  define BOOST_IOSTREAMS_FD_SEEK      lseek
+#  define BOOST_IOSTREAMS_FD_TRUNCATE  ftruncate
+#  define BOOST_IOSTREAMS_FD_MMAP      mmap
+#  define BOOST_IOSTREAMS_FD_STAT      stat
+#  define BOOST_IOSTREAMS_FD_FSTAT     fstat
+#  define BOOST_IOSTREAMS_FD_OFFSET    off_t
+# endif
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_RTL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/config/unreachable_return.hpp b/vendor/pdalboost/boost/iostreams/detail/config/unreachable_return.hpp
new file mode 100644
index 0000000..9e40033
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/config/unreachable_return.hpp
@@ -0,0 +1,25 @@
+// (C) Copyright 2010 Daniel James
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_UNREACHABLE_RETURN_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_UNREACHABLE_RETURN_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <boost/config.hpp>
+
+// If Boost.Exception has BOOST_ATTRIBUTE_NORETURN
+#if defined(_MSC_VER) || defined(__GNUC__)
+#define BOOST_IOSTREAMS_UNREACHABLE_RETURN(x) \
+    BOOST_UNREACHABLE_RETURN(x)
+#else
+#define BOOST_IOSTREAMS_UNREACHABLE_RETURN(x) \
+    return x;
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/iostreams/detail/config/wide_streams.hpp b/vendor/pdalboost/boost/iostreams/detail/config/wide_streams.hpp
new file mode 100644
index 0000000..425875e
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/config/wide_streams.hpp
@@ -0,0 +1,55 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from http://www.boost.org/more/separate_compilation.html, by
+// John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_WIDE_STREAMS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_WIDE_STREAMS_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <cstddef>
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif       
+
+//------------------Templated stream support----------------------------------//
+
+// From boost/dynamic_bitset.hpp; thanks to Matthias Troyer for cray patch.
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# if defined(__STL_CONFIG_H) && \
+    !defined (__STL_USE_NEW_IOSTREAMS) && !defined(__crayx1) \
+    /**/
+#  define BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# endif
+#endif // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+
+//------------------Wide stream support---------------------------------------//
+
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+# if defined(BOOST_IOSTREAMS_NO_STREAM_TEMPLATES) || \
+     defined (BOOST_NO_STD_WSTREAMBUF) && \
+     ( !defined(__MSL_CPP__) || defined(_MSL_NO_WCHART_CPP_SUPPORT) ) \
+     /**/
+#  define BOOST_IOSTREAMS_NO_WIDE_STREAMS
+# endif
+#endif // #ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS   
+
+//------------------Locale support--------------------------------------------//
+
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+# if defined(BOOST_NO_STD_LOCALE) || \
+     defined(__CYGWIN__) && \
+     ( !defined(__MSL_CPP__) || defined(_MSL_NO_WCHART_CPP_SUPPORT) ) \
+     /**/
+#  define BOOST_IOSTREAMS_NO_LOCALE
+# endif
+#endif // #ifndef BOOST_IOSTREAMS_NO_LOCALE
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_WIDE_STREAMS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/config/windows_posix.hpp b/vendor/pdalboost/boost/iostreams/detail/config/windows_posix.hpp
new file mode 100644
index 0000000..4e73c50
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/config/windows_posix.hpp
@@ -0,0 +1,25 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// (C) Copyright 2002, 2003 Beman Dawes   Boost.Filesystem
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_WINDOWS_POSIX_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_WINDOWS_POSIX_HPP_INCLUDED
+
+//------------------From boost/libs/filesystem/src/path_posix_windows.cpp-----//
+
+// BOOST_IOSTREAMS_POSIX or BOOST_IOSTREAMS_WINDOWS specify which API to use.
+#if !defined( BOOST_IOSTREAMS_WINDOWS ) && !defined( BOOST_IOSTREAMS_POSIX )
+# if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && \
+     !defined(__CYGWIN__) \
+     /**/
+#  define BOOST_IOSTREAMS_WINDOWS
+# else
+#  define BOOST_IOSTREAMS_POSIX
+# endif
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_WINDOWS_POSIX_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/config/zlib.hpp b/vendor/pdalboost/boost/iostreams/detail/config/zlib.hpp
new file mode 100644
index 0000000..e5daa87
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/config/zlib.hpp
@@ -0,0 +1,50 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from <boost/config/auto_link.hpp> and from
+// http://www.boost.org/more/separate_compilation.html, by John Maddock.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_ZLIB_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CONFIG_ZLIB_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_STRINGIZE.
+
+#if defined(BOOST_ZLIB_BINARY)
+# if defined(BOOST_MSVC) || \
+     defined(__BORLANDC__) || \
+     (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) || \
+     (defined(__ICL) && defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200)) \
+     /**/
+
+// Specify the name of the .lib file.
+#  pragma comment(lib, BOOST_STRINGIZE(BOOST_ZLIB_BINARY))
+# endif
+#else 
+# if !defined(BOOST_IOSTREAMS_SOURCE) && \
+     !defined(BOOST_ALL_NO_LIB) && \
+     !defined(BOOST_IOSTREAMS_NO_LIB) \
+     /**/
+
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it.
+#  define BOOST_LIB_NAME pdalboost_zlib
+
+// If we're importing code from a dll, then tell auto_link.hpp about it.
+#  if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_IOSTREAMS_DYN_LINK)
+#   define BOOST_DYN_LINK
+#  endif
+
+// And include the header that does the work.
+#  include <boost/config/auto_link.hpp>
+# endif
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CONFIG_ZLIB_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/counted_array.hpp b/vendor/pdalboost/boost/iostreams/detail/counted_array.hpp
new file mode 100644
index 0000000..85c832e
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/counted_array.hpp
@@ -0,0 +1,64 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_COUNTED_ARRAY_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_COUNTED_ARRAY_HPP_INCLUDED
+
+#include <algorithm>                               // min.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp>          // streamsize.
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<typename Ch>
+class counted_array_source {
+public:
+    typedef Ch          char_type;
+    typedef source_tag  category;
+    counted_array_source(const Ch* buf, std::streamsize size) 
+        : buf_(buf), ptr_(0), end_(size)
+        { }
+    std::streamsize read(Ch* s, std::streamsize n)
+    {
+        std::streamsize result = (std::min)(n, end_ - ptr_);
+        BOOST_IOSTREAMS_CHAR_TRAITS(char_type)::copy
+            (s, buf_ + ptr_, result);
+        ptr_ += result;
+        return result;
+    }
+    std::streamsize count() const { return ptr_; }
+private:
+    const Ch*        buf_;
+    std::streamsize  ptr_, end_;
+};
+
+template<typename Ch>
+struct counted_array_sink {
+public:
+    typedef Ch        char_type;
+    typedef sink_tag  category;
+    counted_array_sink(Ch* buf, std::streamsize size) 
+        : buf_(buf), ptr_(0), end_(size)
+        { }
+        std::streamsize write(const Ch* s, std::streamsize n)
+    {
+        std::streamsize result = (std::min)(n, end_ - ptr_);
+        BOOST_IOSTREAMS_CHAR_TRAITS(char_type)::copy
+            (buf_ + ptr_, s, result);
+        ptr_ += result;
+        return result;
+    }
+    std::streamsize count() const { return ptr_; }
+private:
+    Ch*              buf_;
+    std::streamsize  ptr_, end_;
+};
+
+} } } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_COUNTED_ARRAY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/current_directory.hpp b/vendor/pdalboost/boost/iostreams/detail/current_directory.hpp
new file mode 100644
index 0000000..21d78a0
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/current_directory.hpp
@@ -0,0 +1,65 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+
+ * File:        boost/iostreams/detail/execute.hpp
+ * Date:        Thu Dec 06 13:21:54 MST 2007
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ *
+ * Defines the function pdalboost::iostreams::detail::current_directory, used by 
+ * pdalboost::iostreams::detail::absolute_path.
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CURRENT_DIRECTORY_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CURRENT_DIRECTORY_HPP_INCLUDED
+
+#include <boost/config.hpp>  // make sure size_t is in std.
+#include <cstddef>           // size_t
+#include <string>
+#include <boost/iostreams/detail/buffer.hpp>
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+#include <boost/iostreams/detail/system_failure.hpp>
+#ifdef BOOST_IOSTREAMS_WINDOWS
+# define WIN32_LEAN_AND_MEAN  // Exclude rarely-used stuff from Windows headers
+# include <windows.h>
+#else
+# include <unistd.h>        // sysconf.
+#endif
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+// Returns the current working directory
+inline std::string current_directory()
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    DWORD               length;
+    basic_buffer<char>  buf(MAX_PATH);
+    while (true) {
+        length = ::GetCurrentDirectoryA(buf.size(), buf.data());
+        if (!length)
+            throw_system_failure("failed determining current directory");
+        if (length < static_cast<DWORD>(buf.size()))
+            break;
+        buf.resize(buf.size() * 2);
+    }
+    return std::string(buf.data(), length);
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS
+    basic_buffer<char> buf(pathconf(".", _PC_PATH_MAX));
+    if (!getcwd(buf.data(), static_cast<size_t>(buf.size())))
+        throw_system_failure("failed determining current directory");
+    return std::string(buf.data());
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
+}
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CURRENT_DIRECTORY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/default_arg.hpp b/vendor/pdalboost/boost/iostreams/detail/default_arg.hpp
new file mode 100644
index 0000000..9364ca2
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/default_arg.hpp
@@ -0,0 +1,25 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_DEFAULT_ARG_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_DEFAULT_ARG_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif            
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# include <boost/mpl/identity.hpp>
+# define BOOST_IOSTREAMS_DEFAULT_ARG(arg) mpl::identity< arg >::type
+#else
+# define BOOST_IOSTREAMS_DEFAULT_ARG(arg) arg
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_DEFAULT_ARG_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/dispatch.hpp b/vendor/pdalboost/boost/iostreams/detail/dispatch.hpp
new file mode 100644
index 0000000..d06d514
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/dispatch.hpp
@@ -0,0 +1,41 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_DISPATCH_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_DISPATCH_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <boost/config.hpp>                   // BOOST_DEDUCED_TYPENAME. 
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/traits.hpp>         // category_of. 
+#include <boost/mpl/void.hpp>          
+#include <boost/type_traits/is_convertible.hpp>         
+
+namespace pdalboost { namespace iostreams {namespace detail {
+    
+template< typename T, typename Tag1, typename Tag2,
+          typename Tag3 = mpl::void_, typename Tag4 = mpl::void_,
+          typename Tag5 = mpl::void_, typename Tag6 = mpl::void_,
+          typename Category = 
+              BOOST_DEDUCED_TYPENAME category_of<T>::type >
+struct dispatch 
+    : iostreams::select<  // Disambiguation for Tru64.
+          is_convertible<Category, Tag1>, Tag1,
+          is_convertible<Category, Tag2>, Tag2,
+          is_convertible<Category, Tag3>, Tag3,
+          is_convertible<Category, Tag4>, Tag4,
+          is_convertible<Category, Tag5>, Tag5,
+          is_convertible<Category, Tag6>, Tag6
+      >
+    { };
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_DISPATCH_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/double_object.hpp b/vendor/pdalboost/boost/iostreams/detail/double_object.hpp
new file mode 100644
index 0000000..0c9c16b
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/double_object.hpp
@@ -0,0 +1,114 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains the definition of the class template 
+// pdalboost::iostreams::detail::double_object, which is similar to compressed pair
+// except that both members of the pair have the same type, and 
+// compression occurs only if requested using a boolean template
+// parameter.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_DOUBLE_OBJECT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_DOUBLE_OBJECT_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <algorithm>              // swap.
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/if.hpp>
+#if BOOST_WORKAROUND(__MWERKS__, > 0x3003)
+# include <msl_utility>
+#else
+# include <boost/call_traits.hpp>
+#endif
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<typename T>
+class single_object_holder {
+public:
+#if BOOST_WORKAROUND(__MWERKS__, > 0x3003)
+    typedef Metrowerks::call_traits<T>             traits_type;
+#else
+    typedef pdalboost::call_traits<T>                  traits_type;
+#endif
+    typedef typename traits_type::param_type       param_type;
+    typedef typename traits_type::reference        reference;
+    typedef typename traits_type::const_reference  const_reference;
+    single_object_holder() { }
+    single_object_holder(param_type t) : first_(t) { }
+    reference first() { return first_; }
+    const_reference first() const { return first_; }
+    reference second() { return first_; }
+    const_reference second() const { return first_; }
+    void swap(single_object_holder& o)
+    { std::swap(first_, o.first_); }
+private:
+    T first_;
+};
+
+template<typename T>
+struct double_object_holder {
+public:
+#if BOOST_WORKAROUND(__MWERKS__, > 0x3003)
+    typedef Metrowerks::call_traits<T>             traits_type;
+#else
+    typedef pdalboost::call_traits<T>                  traits_type;
+#endif
+    typedef typename traits_type::param_type       param_type;
+    typedef typename traits_type::reference        reference;
+    typedef typename traits_type::const_reference  const_reference;
+    double_object_holder() { }
+    double_object_holder(param_type t1, param_type t2)
+        : first_(t1), second_(t2) { }
+    reference first() { return first_; }
+    const_reference first() const { return first_; }
+    reference second() { return second_; }
+    const_reference second() const { return second_; }
+    void swap(double_object_holder& d)
+    { 
+        std::swap(first_, d.first_); 
+        std::swap(second_, d.second_); 
+    }
+private:
+    T first_, second_;
+};
+
+template<typename T, typename IsDouble>
+class double_object 
+    : public mpl::if_<
+                 IsDouble, 
+                 double_object_holder<T>, 
+                 single_object_holder<T>
+             >::type
+{
+private:
+    typedef typename 
+            mpl::if_<
+                IsDouble, 
+                double_object_holder<T>, 
+                single_object_holder<T>
+            >::type                                base_type;
+public:
+#if BOOST_WORKAROUND(__MWERKS__, > 0x3003)
+    typedef Metrowerks::call_traits<T>             traits_type;
+#else
+    typedef pdalboost::call_traits<T>                  traits_type;
+#endif
+    typedef typename traits_type::param_type       param_type;
+    typedef typename traits_type::reference        reference;
+    typedef typename traits_type::const_reference  const_reference;
+    double_object() : base_type() {}
+    double_object(param_type t1, param_type t2)
+        : base_type(t1, t2) { }
+    bool is_double() const { return IsDouble::value; }
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_DOUBLE_OBJECT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/enable_if_stream.hpp b/vendor/pdalboost/boost/iostreams/detail/enable_if_stream.hpp
new file mode 100644
index 0000000..5f469dd
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/enable_if_stream.hpp
@@ -0,0 +1,32 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_ENABLE_IF_STREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_ENABLE_IF_STREAM_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <boost/config.hpp>                // BOOST_NO_SFINAE.
+#include <boost/utility/enable_if.hpp>                  
+#include <boost/iostreams/traits_fwd.hpp>  // is_std_io.
+
+#if !defined(BOOST_NO_SFINAE) && \
+    !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
+# define BOOST_IOSTREAMS_ENABLE_IF_STREAM(T) \
+    , typename pdalboost::enable_if< pdalboost::iostreams::is_std_io<T> >::type* = 0 \
+    /**/
+# define BOOST_IOSTREAMS_DISABLE_IF_STREAM(T) \
+    , typename pdalboost::disable_if< pdalboost::iostreams::is_std_io<T> >::type* = 0 \
+    /**/
+#else 
+# define BOOST_IOSTREAMS_ENABLE_IF_STREAM(T)
+# define BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_ENABLE_IF_STREAM_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/error.hpp b/vendor/pdalboost/boost/iostreams/detail/error.hpp
new file mode 100644
index 0000000..e158f65
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/error.hpp
@@ -0,0 +1,45 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_ERROR_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_ERROR_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+                 
+#include <boost/iostreams/detail/ios.hpp>  // failure.
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+inline BOOST_IOSTREAMS_FAILURE cant_read() 
+{ return BOOST_IOSTREAMS_FAILURE("no read access"); }
+
+inline BOOST_IOSTREAMS_FAILURE cant_write() 
+{ return BOOST_IOSTREAMS_FAILURE("no write access"); }
+
+inline BOOST_IOSTREAMS_FAILURE cant_seek() 
+{ return BOOST_IOSTREAMS_FAILURE("no random access"); }
+
+inline BOOST_IOSTREAMS_FAILURE bad_read() 
+{ return BOOST_IOSTREAMS_FAILURE("bad read"); }
+
+inline BOOST_IOSTREAMS_FAILURE bad_putback() 
+{ return BOOST_IOSTREAMS_FAILURE("putback buffer full"); }
+
+inline BOOST_IOSTREAMS_FAILURE bad_write() 
+{ return BOOST_IOSTREAMS_FAILURE("bad write"); }
+
+inline BOOST_IOSTREAMS_FAILURE write_area_exhausted() 
+{ return BOOST_IOSTREAMS_FAILURE("write area exhausted"); }
+
+inline BOOST_IOSTREAMS_FAILURE bad_seek() 
+{ return BOOST_IOSTREAMS_FAILURE("bad seek"); }
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_ERROR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/execute.hpp b/vendor/pdalboost/boost/iostreams/detail/execute.hpp
new file mode 100644
index 0000000..951af0e
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/execute.hpp
@@ -0,0 +1,135 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+
+ * File:        boost/iostreams/detail/execute.hpp
+ * Date:        Thu Dec 06 13:21:54 MST 2007
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+
+ * Defines the overloaded function template 
+ * pdalboost::iostreams::detail::execute_all() and the function template 
+ * pdalboost::iostreams::detail::execute_foreach().
+ *
+ * execute_all() invokes a primary operation and performs a sequence of cleanup 
+ * operations, returning the result of the primary operation if no exceptions
+ * are thrown. If one of the operations throws an exception, performs the
+ * remaining operations and rethrows the initial exception.
+ *
+ * execute_foreach() is a variant of std::foreach which invokes a function 
+ * object for each item in a sequence, catching all execptions and rethrowing
+ * the first caught exception after the function object has been invoked on each
+ * item.
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_EXECUTE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_EXECUTE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/config/limits.hpp>   // MAX_EXECUTE_ARITY
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/utility/result_of.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+// Helper for class template execute_traits.
+template<typename Result>
+struct execute_traits_impl {
+    typedef Result result_type;
+    template<typename Op>
+    static Result execute(Op op) { return op(); }
+};
+
+// Specialization for void return. For simplicity, execute() returns int 
+// for operations returning void. This could be avoided with additional work.
+template<>
+struct execute_traits_impl<void> {
+    typedef int result_type;
+    template<typename Op>
+    static int execute(Op op) { op(); return 0; }
+};
+
+// Deduces the result type of Op and allows uniform treatment of operations 
+// returning void and non-void.
+template< typename Op, 
+          typename Result = // VC6.5 workaround.
+              #if !defined(BOOST_NO_RESULT_OF) && \
+                  !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
+                  typename pdalboost::result_of<Op()>::type
+              #else
+                  BOOST_DEDUCED_TYPENAME Op::result_type
+              #endif
+          >
+struct execute_traits 
+    : execute_traits_impl<Result>
+    { };
+
+// Implementation with no cleanup operations.
+template<typename Op>
+typename execute_traits<Op>::result_type 
+execute_all(Op op) 
+{ 
+    return execute_traits<Op>::execute(op);
+}
+
+// Implementation with one or more cleanup operations
+#define BOOST_PP_LOCAL_MACRO(n) \
+   template<typename Op, BOOST_PP_ENUM_PARAMS(n, typename C)> \
+   typename execute_traits<Op>::result_type \
+   execute_all(Op op, BOOST_PP_ENUM_BINARY_PARAMS(n, C, c)) \
+   { \
+       typename execute_traits<Op>::result_type r; \
+       try { \
+           r = pdalboost::iostreams::detail::execute_all( \
+                   op BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+                   BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(n), c) \
+               ); \
+       } catch (...) { \
+           try { \
+               BOOST_PP_CAT(c, BOOST_PP_DEC(n))(); \
+           } catch (...) { } \
+           throw; \
+       } \
+       BOOST_PP_CAT(c, BOOST_PP_DEC(n))(); \
+       return r; \
+   } \
+   /**/
+
+#define BOOST_PP_LOCAL_LIMITS (1, BOOST_IOSTREAMS_MAX_EXECUTE_ARITY)
+#include BOOST_PP_LOCAL_ITERATE()
+#undef BOOST_PP_LOCAL_MACRO
+
+template<class InIt, class Op>
+Op execute_foreach(InIt first, InIt last, Op op)
+{
+    if (first == last)
+        return op;
+    try {
+        op(*first);
+    } catch (...) {
+        try {
+            ++first;
+            pdalboost::iostreams::detail::execute_foreach(first, last, op);
+        } catch (...) { }
+        throw;
+    }
+    ++first;
+    return pdalboost::iostreams::detail::execute_foreach(first, last, op);
+}
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_EXECUTE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/file_handle.hpp b/vendor/pdalboost/boost/iostreams/detail/file_handle.hpp
new file mode 100644
index 0000000..d0a6857
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/file_handle.hpp
@@ -0,0 +1,32 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * File:        boost/iostreams/detail/file_handle.hpp
+ * Date:        Sun Jun 22 14:23:12 MDT 2008
+ * Copyright:   2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ *
+ * Defines the type pdalboost::iostreams::detail::file_handle, representing an
+ * operating system file handle.
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_FILE_HANDLE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_FILE_HANDLE_HPP_INCLUDED
+
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    typedef void*  file_handle;  // A.k.a. HANDLE
+#else
+    typedef int    file_handle;
+#endif
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_FILE_HANDLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/forward.hpp b/vendor/pdalboost/boost/iostreams/detail/forward.hpp
new file mode 100644
index 0000000..f5f2325
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/forward.hpp
@@ -0,0 +1,124 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_FORWARD_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_FORWARD_HPP_INCLUDED   
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif                  
+ 
+#include <boost/config.hpp> // BOOST_MSVC, BOOST_NO_SFINAE
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/config/limits.hpp>
+#include <boost/iostreams/detail/push_params.hpp>
+#include <boost/preprocessor/arithmetic/dec.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+//------Macros for defining forwarding constructors and open overloads--------//
+    
+//
+// Macro: BOOST_IOSTREAMS_FORWARD(class, impl, device, params, args)
+// Description: Defines constructors and overloads of 'open' which construct
+//      a device using the specified argument list and pass it to the specified
+//      helper function
+//   class - The class name
+//   impl - The helper function
+//   device - The device type
+//   params - The list of formal parameters trailing the device parameter in
+//     the helper function's signature
+//   params - The list of arguments passed to the helper function, following the
+//     device argument
+//
+#define BOOST_IOSTREAMS_FORWARD(class, impl, device, params, args) \
+    class(const device& t params()) \
+    { this->impl(::pdalboost::iostreams::detail::wrap(t) args()); } \
+    class(device& t params()) \
+    { this->impl(::pdalboost::iostreams::detail::wrap(t) args()); } \
+    class(const ::pdalboost::reference_wrapper<device>& ref params()) \
+    { this->impl(ref args()); } \
+    void open(const device& t params()) \
+    { this->impl(::pdalboost::iostreams::detail::wrap(t) args()); } \
+    void open(device& t params()) \
+    { this->impl(::pdalboost::iostreams::detail::wrap(t) args()); } \
+    void open(const ::pdalboost::reference_wrapper<device>& ref params()) \
+    { this->impl(ref args()); } \
+    BOOST_PP_REPEAT_FROM_TO( \
+        1, BOOST_PP_INC(BOOST_IOSTREAMS_MAX_FORWARDING_ARITY), \
+        BOOST_IOSTREAMS_FORWARDING_CTOR, (class, impl, device) \
+    ) \
+    BOOST_PP_REPEAT_FROM_TO( \
+        1, BOOST_PP_INC(BOOST_IOSTREAMS_MAX_FORWARDING_ARITY), \
+        BOOST_IOSTREAMS_FORWARDING_FN, (class, impl, device) \
+    ) \
+    /**/
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# define BOOST_IOSTREAMS_FORWARDING_CTOR_I(z, n, tuple) \
+    template< typename U100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+              BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), typename U) > \
+    BOOST_PP_TUPLE_ELEM(3, 0, tuple) \
+    ( U100& u100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+      BOOST_PP_ENUM_BINARY_PARAMS_Z(z, BOOST_PP_DEC(n), const U, &u) \
+      BOOST_IOSTREAMS_DISABLE_IF_SAME(U100, BOOST_PP_TUPLE_ELEM(3, 2, tuple))) \
+    { this->BOOST_PP_TUPLE_ELEM(3, 1, tuple) \
+      ( BOOST_PP_TUPLE_ELEM(3, 2, tuple) \
+        ( u100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+          BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), u)) ); } \
+    /**/
+# define BOOST_IOSTREAMS_FORWARDING_FN_I(z, n, tuple) \
+    template< typename U100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+              BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), typename U) > \
+    void open \
+    ( U100& u100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+      BOOST_PP_ENUM_BINARY_PARAMS_Z(z, BOOST_PP_DEC(n), const U, &u) \
+      BOOST_IOSTREAMS_DISABLE_IF_SAME(U100, BOOST_PP_TUPLE_ELEM(3, 2, tuple))) \
+    { this->BOOST_PP_TUPLE_ELEM(3, 1, tuple) \
+      ( u100 BOOST_PP_COMMA_IF(BOOST_PP_DEC(n)) \
+        BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_DEC(n), u) ); } \
+    /**/
+#else
+# define BOOST_IOSTREAMS_FORWARDING_CTOR_I(z, n, tuple)
+# define BOOST_IOSTREAMS_FORWARDING_FN_I(z, n, tuple)
+#endif
+#define BOOST_IOSTREAMS_FORWARDING_CTOR(z, n, tuple) \
+    template<BOOST_PP_ENUM_PARAMS_Z(z, n, typename U)> \
+    BOOST_PP_TUPLE_ELEM(3, 0, tuple) \
+    (BOOST_PP_ENUM_BINARY_PARAMS_Z(z, n, const U, &u) \
+      BOOST_IOSTREAMS_DISABLE_IF_SAME(U0, BOOST_PP_TUPLE_ELEM(3, 2, tuple))) \
+    { this->BOOST_PP_TUPLE_ELEM(3, 1, tuple) \
+      ( BOOST_PP_TUPLE_ELEM(3, 2, tuple) \
+        (BOOST_PP_ENUM_PARAMS_Z(z, n, u)) ); } \
+    BOOST_IOSTREAMS_FORWARDING_CTOR_I(z, n, tuple) \
+    /**/
+#define BOOST_IOSTREAMS_FORWARDING_FN(z, n, tuple) \
+    template<BOOST_PP_ENUM_PARAMS_Z(z, n, typename U)> \
+    void open(BOOST_PP_ENUM_BINARY_PARAMS_Z(z, n, const U, &u) \
+      BOOST_IOSTREAMS_DISABLE_IF_SAME(U0, BOOST_PP_TUPLE_ELEM(3, 2, tuple))) \
+    { this->BOOST_PP_TUPLE_ELEM(3, 1, tuple) \
+      ( BOOST_PP_TUPLE_ELEM(3, 2, tuple) \
+        (BOOST_PP_ENUM_PARAMS_Z(z, n, u)) ); } \
+    BOOST_IOSTREAMS_FORWARDING_FN_I(z, n, tuple) \
+    /**/
+
+// Disable forwarding constructors if first parameter type is the same
+// as the device type
+#if !defined(BOOST_NO_SFINAE) && \
+    !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
+# define BOOST_IOSTREAMS_DISABLE_IF_SAME(device, param) \
+    , typename pdalboost::disable_if< pdalboost::is_same<device, param> >::type* = 0 \
+    /**/
+#else 
+# define BOOST_IOSTREAMS_DISABLE_IF_SAME(device, param)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_FORWARD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/fstream.hpp b/vendor/pdalboost/boost/iostreams/detail/fstream.hpp
new file mode 100644
index 0000000..b8070a7
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/fstream.hpp
@@ -0,0 +1,33 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_FSTREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_FSTREAM_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+                 
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# include <fstream>
+#else
+# include <fstream.h>
+#endif 
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# define BOOST_IOSTREAMS_BASIC_IFSTREAM(Ch, Tr) std::basic_ifstream<Ch, Tr>
+# define BOOST_IOSTREAMS_BASIC_OFSTREAM(Ch, Tr) std::basic_ofstream<Ch, Tr>
+# define BOOST_IOSTREAMS_BASIC_FSTREAM(Ch, Tr) std::basic_fstream<Ch, Tr>
+# define BOOST_IOSTREAMS_BASIC_FILEBUF(Ch) std::basic_filebuf<Ch>
+#else 
+# define BOOST_IOSTREAMS_BASIC_IFSTREAM(Ch, Tr) std::ifstream
+# define BOOST_IOSTREAMS_BASIC_OFSTREAM(Ch, Tr) std::ofstream
+# define BOOST_IOSTREAMS_BASIC_FILEBUF(Ch) std::filebuf
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_FSTREAM_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/functional.hpp b/vendor/pdalboost/boost/iostreams/detail/functional.hpp
new file mode 100644
index 0000000..6435c91
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/functional.hpp
@@ -0,0 +1,189 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+
+ * File:        boost/iostreams/detail/functional.hpp
+ * Date:        Sun Dec 09 05:38:03 MST 2007
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+
+ * Defines several function objects and object generators for use with 
+ * execute_all()
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_FUNCTIONAL_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_FUNCTIONAL_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/close.hpp>
+#include <boost/iostreams/detail/ios.hpp> // BOOST_IOS
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+    // Function objects and object generators for invoking
+    // pdalboost::iostreams::close
+
+template<typename T>
+class device_close_operation {
+public:
+    typedef void result_type;
+    device_close_operation(T& t, BOOST_IOS::openmode which) 
+        : t_(t), which_(which) 
+        { }
+    void operator()() const { pdalboost::iostreams::close(t_, which_); }
+private:
+    device_close_operation& operator=(const device_close_operation&);
+    T&                   t_;
+    BOOST_IOS::openmode  which_;
+};
+
+template<typename T, typename Sink>
+class filter_close_operation {
+public:
+    typedef void result_type;
+    filter_close_operation(T& t, Sink& snk, BOOST_IOS::openmode which)
+        : t_(t), snk_(snk), which_(which)
+        { }
+    void operator()() const { pdalboost::iostreams::close(t_, snk_, which_); }
+private:
+    filter_close_operation& operator=(const filter_close_operation&);
+    T&                   t_;
+    Sink&                snk_;
+    BOOST_IOS::openmode  which_;
+};
+
+template<typename T>
+device_close_operation<T> 
+call_close(T& t, BOOST_IOS::openmode which) 
+{ return device_close_operation<T>(t, which); }
+
+template<typename T, typename Sink>
+filter_close_operation<T, Sink> 
+call_close(T& t, Sink& snk, BOOST_IOS::openmode which) 
+{ return filter_close_operation<T, Sink>(t, snk, which); }
+
+    // Function objects and object generators for invoking
+    // pdalboost::iostreams::detail::close_all
+
+template<typename T>
+class device_close_all_operation {
+public:
+    typedef void result_type;
+    device_close_all_operation(T& t) : t_(t) { }
+    void operator()() const { detail::close_all(t_); }
+private:
+    device_close_all_operation& operator=(const device_close_all_operation&);
+    T& t_;
+};
+
+template<typename T, typename Sink>
+class filter_close_all_operation {
+public:
+    typedef void result_type;
+    filter_close_all_operation(T& t, Sink& snk) : t_(t), snk_(snk) { }
+    void operator()() const { detail::close_all(t_, snk_); }
+private:
+    filter_close_all_operation& operator=(const filter_close_all_operation&);
+    T&     t_;
+    Sink&  snk_;
+};
+
+template<typename T>
+device_close_all_operation<T> call_close_all(T& t) 
+{ return device_close_all_operation<T>(t); }
+
+template<typename T, typename Sink>
+filter_close_all_operation<T, Sink> 
+call_close_all(T& t, Sink& snk) 
+{ return filter_close_all_operation<T, Sink>(t, snk); }
+
+    // Function object and object generator for invoking a
+    // member function void close(std::ios_base::openmode)
+
+template<typename T>
+class member_close_operation {
+public:
+    typedef void result_type;
+    member_close_operation(T& t, BOOST_IOS::openmode which) 
+        : t_(t), which_(which) 
+        { }
+    void operator()() const { t_.close(which_); }
+private:
+    member_close_operation& operator=(const member_close_operation&);
+    T&                   t_;
+    BOOST_IOS::openmode  which_;
+};
+
+template<typename T>
+member_close_operation<T> call_member_close(T& t, BOOST_IOS::openmode which) 
+{ return member_close_operation<T>(t, which); }
+
+    // Function object and object generator for invoking a
+    // member function void reset()
+
+template<typename T>
+class reset_operation {
+public:
+    reset_operation(T& t) : t_(t) { }
+    void operator()() const { t_.reset(); }
+private:
+    reset_operation& operator=(const reset_operation&);
+    T& t_;
+};
+
+template<typename T>
+reset_operation<T> call_reset(T& t) { return reset_operation<T>(t); }
+
+    // Function object and object generator for clearing a flag
+
+template<typename T>
+class clear_flags_operation {
+public:
+    typedef void result_type;
+    clear_flags_operation(T& t) : t_(t) { }
+    void operator()() const { t_ = 0; }
+private:
+    clear_flags_operation& operator=(const clear_flags_operation&);
+    T& t_;
+};
+
+template<typename T>
+clear_flags_operation<T> clear_flags(T& t) 
+{ return clear_flags_operation<T>(t); }
+
+    // Function object and generator for flushing a buffer
+
+// Function object for use with execute_all()
+template<typename Buffer, typename Device>
+class flush_buffer_operation {
+public:
+    typedef void result_type;
+    flush_buffer_operation(Buffer& buf, Device& dev, bool flush)
+        : buf_(buf), dev_(dev), flush_(flush)
+        { }
+    void operator()() const
+    {
+        if (flush_) 
+            buf_.flush(dev_);
+    }
+private:
+    flush_buffer_operation& operator=(const flush_buffer_operation&);
+    Buffer&  buf_;
+    Device&  dev_;
+    bool     flush_;
+};
+
+template<typename Buffer, typename Device>
+flush_buffer_operation<Buffer, Device> 
+flush_buffer(Buffer& buf, Device& dev, bool flush)
+{ return flush_buffer_operation<Buffer, Device>(buf, dev, flush); }
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_FUNCTIONAL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/ios.hpp b/vendor/pdalboost/boost/iostreams/detail/ios.hpp
new file mode 100644
index 0000000..72a7adf
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/ios.hpp
@@ -0,0 +1,66 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_IOS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_IOS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+                 
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# if !BOOST_WORKAROUND(__MWERKS__, <= 0x3003)
+#  include <ios>
+# else
+#  include <istream>
+#  include <ostream>
+# endif
+#else 
+# include <exception>
+# include <iosfwd>
+#endif 
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------------------//
+# define BOOST_IOSTREAMS_BASIC_IOS(ch, tr)  std::basic_ios< ch, tr >
+# if !BOOST_WORKAROUND(__MWERKS__, <= 0x3003) && \
+     !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && \
+     !BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
+     /**/
+
+#define BOOST_IOS                std::ios
+#define BOOST_IOSTREAMS_FAILURE  std::ios::failure
+
+# else
+
+#define BOOST_IOS                std::ios_base
+#define BOOST_IOSTREAMS_FAILURE  std::ios_base::failure
+
+# endif
+#else // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-----------------------//
+
+#define BOOST_IOS                          std::ios
+#define BOOST_IOSTREAMS_BASIC_IOS(ch, tr)  std::ios
+#define BOOST_IOSTREAMS_FAILURE            pdalboost::iostreams::detail::failure
+
+class failure : std::exception {    
+public:
+    explicit failure(const std::string& what_arg) : what_(what_arg) { }
+    const char* what() const { return what_.c_str(); }
+private:
+    std::string what_;
+};
+
+#endif // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //----------------------//
+
+} } } // End namespace failure, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_IOS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/iostream.hpp b/vendor/pdalboost/boost/iostreams/detail/iostream.hpp
new file mode 100644
index 0000000..45692b3
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/iostream.hpp
@@ -0,0 +1,34 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_IOSTREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_IOSTREAM_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+                 
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# include <istream>
+# include <ostream>
+#else
+# include <iostream.h>
+#endif
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# define BOOST_IOSTREAMS_BASIC_ISTREAM(ch, tr) std::basic_istream< ch, tr >
+# define BOOST_IOSTREAMS_BASIC_OSTREAM(ch, tr) std::basic_ostream< ch, tr >
+# define BOOST_IOSTREAMS_BASIC_IOSTREAM(ch, tr) std::basic_iostream< ch, tr >
+#else
+# define BOOST_IOSTREAMS_BASIC_STREAMBUF(ch, tr) std::streambuf
+# define BOOST_IOSTREAMS_BASIC_ISTREAM(ch, tr) std::istream
+# define BOOST_IOSTREAMS_BASIC_OSTREAM(ch, tr) std::ostream
+# define BOOST_IOSTREAMS_BASIC_IOSTREAM(ch, tr) std::iostream
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_IOSTREAM_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/is_dereferenceable.hpp b/vendor/pdalboost/boost/iostreams/detail/is_dereferenceable.hpp
new file mode 100644
index 0000000..89fb58d
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/is_dereferenceable.hpp
@@ -0,0 +1,84 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// (C) Copyright David Abrahams 2004.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_IS_DEREFERENCEABLE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_IS_DEREFERENCEABLE_HPP_INCLUDED
+
+# include <boost/iostreams/detail/bool_trait_def.hpp>
+
+# include <boost/type_traits/remove_cv.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+# include <boost/mpl/bool.hpp>
+# include <boost/detail/workaround.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail { 
+
+// is_dereferenceable<T> metafunction
+//
+// Requires: Given x of type T&, if the expression *x is well-formed
+// it must have complete type; otherwise, it must neither be ambiguous
+// nor violate access.
+
+// This namespace ensures that ADL doesn't mess things up.
+namespace is_dereferenceable_
+{
+  // a type returned from operator* when no increment is found in the
+  // type's own namespace
+  struct tag {};
+  
+  // any soaks up implicit conversions and makes the following
+  // operator* less-preferred than any other such operator that
+  // might be found via ADL.
+  struct any { template <class T> any(T const&); };
+
+  // This is a last-resort operator* for when none other is found
+  tag operator*(any const&);
+
+# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \
+    || BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+#  define BOOST_comma(a,b) (a)
+# else 
+  // In case an operator++ is found that returns void, we'll use ++x,0
+  tag operator,(tag,int);  
+#  define BOOST_comma(a,b) (a,b)
+# endif 
+  
+  // two check overloads help us identify which operator++ was picked
+  char (& check_increment(tag) )[2];
+  
+  template <class T>
+  char check_increment(T const&);
+  
+  template <class T>
+  struct impl
+  {
+      static typename pdalboost::remove_cv<T>::type& x;
+
+      BOOST_STATIC_CONSTANT(
+          bool
+        , value = sizeof(is_dereferenceable_::check_increment(BOOST_comma(*x,0))) == 1
+      );
+  };
+}
+
+# undef BOOST_comma
+
+template<typename T> 
+struct is_dereferenceable 
+
+BOOST_IOSTREAMS_AUX_BOOL_C_BASE(is_dereferenceable_::impl<T>::value)
+{ 
+BOOST_IOSTREAMS_AUX_BOOL_TRAIT_VALUE_DECL(is_dereferenceable_::impl<T>::value)
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_dereferenceable,(T))
+};
+
+} } 
+
+} // End namespaces detail, iostreams, boost.
+
+#endif // BOOST_IOSTREAMS_DETAIL_IS_DEREFERENCEABLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/is_iterator_range.hpp b/vendor/pdalboost/boost/iostreams/detail/is_iterator_range.hpp
new file mode 100644
index 0000000..6527dd5
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/is_iterator_range.hpp
@@ -0,0 +1,49 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_IS_ITERATOR_RANGE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_IS_ITERATOR_RANGE_HPP_INCLUDED       
+ 
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/bool_trait_def.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace pdalboost { 
+
+# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //---------------------------------//
+
+// We avoid dependence on Boost.Range by using a forward declaration.
+template<typename Iterator>
+class iterator_range;
+    
+namespace iostreams {
+
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_iterator_range, pdalboost::iterator_range, 1)
+
+} // End namespace iostreams.
+
+# else // # if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) //-----------------------//
+
+namespace iostreams {    
+
+    template<typename T>
+    struct is_iterator_range {
+        BOOST_STATIC_CONSTANT(bool, value = false);
+    };
+
+} // End namespace iostreams.
+
+# endif // # if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) //----------------------//
+
+} // End namespace pdalboost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_IS_ITERATOR_RANGE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/newline.hpp b/vendor/pdalboost/boost/iostreams/detail/newline.hpp
new file mode 100644
index 0000000..1b92ce4
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/newline.hpp
@@ -0,0 +1,32 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_NEWLINE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_NEWLINE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<typename Ch>
+struct newline;
+
+template<>
+struct newline<char> {
+    BOOST_STATIC_CONSTANT(char, value = '\n');
+};
+
+template<>
+struct newline<wchar_t> {
+    BOOST_STATIC_CONSTANT(wchar_t, value = L'\n');
+};
+
+} } } // End namespaces detaill, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_NEWLINE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/optional.hpp b/vendor/pdalboost/boost/iostreams/detail/optional.hpp
new file mode 100644
index 0000000..c6da010
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/optional.hpp
@@ -0,0 +1,114 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Recent changes to Boost.Optional involving assigment broke Boost.Iostreams,
+// in a way which could be remedied only by relying on the deprecated reset
+// functions; with VC6, even reset didn't work. Until this problem is 
+// understood, Iostreams will use a private version of optional with a smart 
+// pointer interface.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_OPTIONAL_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_OPTIONAL_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/type_traits/aligned_storage.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+// Taken from <boost/optional.hpp>.
+template<class T>
+class aligned_storage
+{
+    // Borland ICEs if unnamed unions are used for this!
+    union dummy_u
+    {
+        char data[ sizeof(T) ];
+        BOOST_DEDUCED_TYPENAME type_with_alignment<
+          ::pdalboost::alignment_of<T>::value >::type aligner_;
+    } dummy_ ;
+
+  public:
+
+    void const* address() const { return &dummy_.data[0]; }
+    void      * address()       { return &dummy_.data[0]; }
+};
+
+template<typename T>
+class optional {
+public:
+    typedef T element_type;
+    optional() : initialized_(false) { }
+    optional(const T& t) : initialized_(false) { reset(t); }
+    ~optional() { reset(); }
+    T& operator*() 
+    { 
+        BOOST_ASSERT(initialized_);
+        return *static_cast<T*>(address()); 
+    }
+    const T& operator*() const
+    { 
+        BOOST_ASSERT(initialized_);
+        return *static_cast<const T*>(address()); 
+    }
+    T* operator->() 
+    { 
+        BOOST_ASSERT(initialized_);
+        return static_cast<T*>(address()); 
+    }
+    const T* operator->() const
+    { 
+        BOOST_ASSERT(initialized_);
+        return static_cast<const T*>(address()); 
+    }
+    T* get() 
+    { 
+        BOOST_ASSERT(initialized_);
+        return static_cast<T*>(address()); 
+    }
+    const T* get() const
+    { 
+        BOOST_ASSERT(initialized_);
+        return static_cast<const T*>(address()); 
+    }
+    void reset() 
+    {
+        if (initialized_) { 
+        #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) || \
+            BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \
+            /**/
+            T* t = static_cast<T*>(address());
+            t->~T();
+        #else
+            static_cast<T*>(address())->T::~T();
+        #endif
+            initialized_ = false;
+        }
+    }
+    void reset(const T& t) 
+    {
+        reset();
+        new (address()) T(t); 
+        initialized_ = true;
+    }
+private:
+    optional(const optional&);
+    optional& operator=(const optional&);
+    void* address() { return &storage_; }
+    const void* address() const { return &storage_; }
+    aligned_storage<T>  storage_;
+    bool                initialized_;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_OPTIONAL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/param_type.hpp b/vendor/pdalboost/boost/iostreams/detail/param_type.hpp
new file mode 100644
index 0000000..74b2420
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/param_type.hpp
@@ -0,0 +1,27 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_PARAM_TYPE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_PARAM_TYPE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<typename T>
+struct param_type {
+    typedef typename mpl::if_<is_std_io<T>, T&, const T&>::type type;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_PARAM_TYPE_HPP_INCLUDED //-----------//
diff --git a/vendor/pdalboost/boost/iostreams/detail/path.hpp b/vendor/pdalboost/boost/iostreams/detail/path.hpp
new file mode 100644
index 0000000..7bea42e
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/path.hpp
@@ -0,0 +1,214 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * File:        boost/iostreams/detail/path.hpp
+ * Date:        Sat Jun 21 21:24:05 MDT 2008
+ * Copyright:   2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ *
+ * Defines the class pdalboost::iostreams::detail::path, for storing a 
+ * a std::string or std::wstring.
+ *
+ * This class allows interoperability with Boost.Filesystem without
+ * creating a dependence on Boost.Filesystem headers or implementation.
+ */
+
+#ifndef BOOST_IOSTREAMS_DETAIL_PATH_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_PATH_HPP_INCLUDED
+
+#include <cstring>
+#include <string>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+# include <cwchar>
+#endif
+#include <boost/static_assert.hpp>
+#include <boost/type.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS //------------------------------------//
+
+class path {
+    template<typename T, typename V>
+    struct sfinae
+    {
+        typedef V type;
+    };
+public:
+
+    // Default constructor
+    path() : narrow_(), wide_(), is_wide_(false) { }
+
+    // Constructor taking a std::string
+    path(const std::string& p) : narrow_(p), wide_(), is_wide_(false) { }
+
+    // Constructor taking a C-style string
+    path(const char* p) : narrow_(p), wide_(), is_wide_(false) { }
+
+    // Constructor taking a pdalboost::filesystem2::path or
+    // pdalboost::filesystem2::wpath
+    template<typename Path>
+    explicit path(const Path& p, typename Path::external_string_type* = 0)
+    {
+        init(p.external_file_string());
+    }
+
+    // Constructor taking a pdalboost::filesystem3::path (boost filesystem v3)
+    template<typename Path>
+    explicit path(const Path& p, typename Path::codecvt_type* = 0)
+    {
+        init(p.native());
+    }
+
+    // Copy constructor
+    path(const path& p) 
+        : narrow_(p.narrow_), wide_(p.wide_), is_wide_(p.is_wide_) 
+        { }
+
+    // Assignment operator taking another path
+    path& operator=(const path& p)
+    {
+        narrow_ = p.narrow_;
+        wide_ = p.wide_;
+        is_wide_ = p.is_wide_;
+        return *this;
+    }
+
+    // Assignment operator taking a std::string
+    path& operator=(const std::string& p)
+    {
+        narrow_ = p;
+        wide_.clear();
+        is_wide_ = false;
+        return *this;
+    }
+
+    // Assignment operator taking a C-style string
+    path& operator=(const char* p)
+    {
+        narrow_.assign(p);
+        wide_.clear();
+        is_wide_ = false;
+        return *this;
+    }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
+    // Assignment operator taking a pdalboost::filesystem2::path or
+    // pdalboost::filesystem2::wpath
+    // (not on Visual C++ 7.1/8.0, as it seems to have problems with
+    // SFINAE functions with the same parameters, doesn't seem
+    // worth working around).
+    template<typename Path>
+    typename sfinae<typename Path::external_string_type, path&>::type
+        operator=(const Path& p)
+    {
+        init(p.external_file_string());
+        return *this;
+    }
+#endif
+
+    // Assignment operator taking a pdalboost::filesystem3::path
+    template<typename Path>
+    typename sfinae<typename Path::codecvt_type, path&>::type
+        operator=(const Path& p)
+    {
+        init(p.native());
+        return *this;
+    }
+
+    bool is_wide() const { return is_wide_; }
+
+    // Returns a representation of the underlying path as a std::string
+    // Requires: is_wide() returns false
+    const char* c_str() const { return narrow_.c_str(); }
+
+    // Returns a representation of the underlying path as a std::wstring
+    // Requires: is_wide() returns true
+    const wchar_t* c_wstr() const { return wide_.c_str(); }
+private:
+    
+    // For wide-character paths, use a pdalboost::filesystem::wpath instead of a
+    // std::wstring
+    path(const std::wstring&);
+    path& operator=(const std::wstring&);
+
+    void init(std::string const& file_path)
+    {
+        narrow_ = file_path;
+        wide_.clear();
+        is_wide_ = false;
+    }
+
+    void init(std::wstring const& file_path)
+    {
+        narrow_.clear();
+        wide_ = file_path;
+        is_wide_ = true;
+    }
+
+    std::string   narrow_;
+    std::wstring  wide_;
+    bool          is_wide_;
+};
+
+inline bool operator==(const path& lhs, const path& rhs)
+{
+    return lhs.is_wide() ?
+        rhs.is_wide() && std::wcscmp(lhs.c_wstr(), rhs.c_wstr()) == 0 :
+        !rhs.is_wide() && std::strcmp(lhs.c_str(), rhs.c_str()) == 0;
+}
+
+#else // #ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS //---------------------------//
+
+class path {
+public:
+    path() { }
+    path(const std::string& p) : path_(p) { }
+    path(const char* p) : path_(p) { }
+    template<typename Path>
+        path(const Path& p) : path_(p.external_file_string()) { }
+    path(const path& p) : path_(p.path_) { }
+    path& operator=(const path& other) 
+    {
+        path_ = other.path_;
+        return *this;
+    }
+    path& operator=(const std::string& p) 
+    {
+        path_ = p;
+        return *this;
+    }
+    path& operator=(const char* p) 
+    {
+        path_ = p;
+        return *this;
+    }
+    template<typename Path>
+        path& operator=(const Path& p)
+        {
+            path_ = p.external_file_string();
+            return *this;
+        }
+    bool is_wide() const { return false; }
+    const char* c_str() const { return path_.c_str(); }
+    const wchar_t* c_wstr() const { return 0; }
+private:
+    std::string path_;
+};
+
+inline bool operator==(const path& lhs, const path& rhs)
+{
+    return std::strcmp(lhs.c_str(), rhs.c_str()) == 0 ;
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS //--------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_PATH_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/push.hpp b/vendor/pdalboost/boost/iostreams/detail/push.hpp
new file mode 100644
index 0000000..90e0675
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/push.hpp
@@ -0,0 +1,154 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_PUSH_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_PUSH_HPP_INCLUDED 
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif                    
+ 
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/adapter/range_adapter.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/enable_if_stream.hpp>   
+#include <boost/iostreams/pipeline.hpp>   
+#include <boost/iostreams/detail/push_params.hpp>   
+#include <boost/iostreams/detail/resolve.hpp>
+#include <boost/mpl/bool.hpp>   
+#include <boost/preprocessor/cat.hpp> 
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+//
+// Macro: BOOST_IOSTREAMS_DEFINE_PUSH_CONSTRUCTOR(name, mode, ch, helper).
+// Description: Defines overloads with name 'name' which forward to a function
+//      'helper' which takes a filter or devide by const reference.
+//
+#define BOOST_IOSTREAMS_DEFINE_PUSH_CONSTRUCTOR(name, mode, ch, helper) \
+    BOOST_IOSTREAMS_DEFINE_PUSH_IMPL(name, mode, ch, helper, 0, ?) \
+    /**/
+
+//
+// Macro: BOOST_IOSTREAMS_DEFINE_PUSH(name, mode, ch, helper).
+// Description: Defines constructors which forward to a function
+//      'helper' which takes a filter or device by const reference.
+//
+#define BOOST_IOSTREAMS_DEFINE_PUSH(name, mode, ch, helper) \
+    BOOST_IOSTREAMS_DEFINE_PUSH_IMPL(name, mode, ch, helper, 1, void) \
+    /**/
+
+//--------------------Definition of BOOST_IOSTREAMS_DEFINE_PUSH_IMPL----------//
+          
+#define BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, arg, helper, has_return) \
+    this->helper( ::pdalboost::iostreams::detail::resolve<mode, ch>(arg) \
+                  BOOST_IOSTREAMS_PUSH_ARGS() ); \
+    /**/
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && \
+    !BOOST_WORKAROUND(__BORLANDC__, < 0x600) \
+    /**/
+# ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+#  define BOOST_IOSTREAMS_DEFINE_PUSH_IMPL(name, mode, ch, helper, has_return, result) \
+    template<typename CharType, typename TraitsType> \
+    BOOST_PP_IIF(has_return, result, explicit) \
+    name(::std::basic_streambuf<CharType, TraitsType>& sb BOOST_IOSTREAMS_PUSH_PARAMS()) \
+    { BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, sb, helper, has_return); } \
+    template<typename CharType, typename TraitsType> \
+    BOOST_PP_IIF(has_return, result, explicit) \
+    name(::std::basic_istream<CharType, TraitsType>& is BOOST_IOSTREAMS_PUSH_PARAMS()) \
+    { BOOST_STATIC_ASSERT((!is_convertible<mode, output>::value)); \
+      BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, is, helper, has_return); } \
+    template<typename CharType, typename TraitsType> \
+    BOOST_PP_IIF(has_return, result, explicit) \
+    name(::std::basic_ostream<CharType, TraitsType>& os BOOST_IOSTREAMS_PUSH_PARAMS()) \
+    { BOOST_STATIC_ASSERT((!is_convertible<mode, input>::value)); \
+      BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, os, helper, has_return); } \
+    template<typename CharType, typename TraitsType> \
+    BOOST_PP_IIF(has_return, result, explicit) \
+    name(::std::basic_iostream<CharType, TraitsType>& io BOOST_IOSTREAMS_PUSH_PARAMS()) \
+    { BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, io, helper, has_return); } \
+    template<typename Iter> \
+    BOOST_PP_IIF(has_return, result, explicit) \
+    name(const iterator_range<Iter>& rng BOOST_IOSTREAMS_PUSH_PARAMS()) \
+    { BOOST_PP_EXPR_IF(has_return, return) \
+    this->helper( ::pdalboost::iostreams::detail::range_adapter< \
+                      mode, iterator_range<Iter> \
+                  >(rng) \
+                  BOOST_IOSTREAMS_PUSH_ARGS() ); } \
+    template<typename Pipeline, typename Concept> \
+    BOOST_PP_IIF(has_return, result, explicit) \
+    name(const ::pdalboost::iostreams::pipeline<Pipeline, Concept>& p) \
+    { p.push(*this); } \
+    template<typename T> \
+    BOOST_PP_IIF(has_return, result, explicit) \
+    name(const T& t BOOST_IOSTREAMS_PUSH_PARAMS() BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)) \
+    { this->helper( ::pdalboost::iostreams::detail::resolve<mode, ch>(t) \
+                    BOOST_IOSTREAMS_PUSH_ARGS() ); } \
+    /**/
+# else // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+#  define BOOST_IOSTREAMS_DEFINE_PUSH_IMPL(name, mode, ch, helper, has_return, result) \
+    BOOST_PP_IF(has_return, result, explicit) \
+    name(::std::streambuf& sb BOOST_IOSTREAMS_PUSH_PARAMS()) \
+    { BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, sb, helper, has_return); } \
+    BOOST_PP_IF(has_return, result, explicit) \
+    name(::std::istream& is BOOST_IOSTREAMS_PUSH_PARAMS()) \
+    { BOOST_STATIC_ASSERT((!is_convertible<mode, output>::value)); \
+      BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, is, helper, has_return); } \
+    BOOST_PP_IF(has_return, result, explicit) \
+    name(::std::ostream& os BOOST_IOSTREAMS_PUSH_PARAMS()) \
+    { BOOST_STATIC_ASSERT((!is_convertible<mode, input>::value)); \
+      BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, os, helper, has_return); } \
+    BOOST_PP_IF(has_return, result, explicit) \
+    name(::std::iostream& io BOOST_IOSTREAMS_PUSH_PARAMS()) \
+    { BOOST_IOSTREAMS_ADAPT_STREAM(mode, ch, io, helper, has_return); } \
+    template<typename Iter> \
+    BOOST_PP_IF(has_return, result, explicit) \
+    name(const iterator_range<Iter>& rng BOOST_IOSTREAMS_PUSH_PARAMS()) \
+    { BOOST_PP_EXPR_IF(has_return, return) \
+    this->helper( ::pdalboost::iostreams::detail::range_adapter< \
+                      mode, iterator_range<Iter> \
+                  >(rng) \
+                  BOOST_IOSTREAMS_PUSH_ARGS() ); } \
+    template<typename Pipeline, typename Concept> \
+    BOOST_PP_IF(has_return, result, explicit) \
+    name(const ::pdalboost::iostreams::pipeline<Pipeline, Concept>& p) \
+    { p.push(*this); } \
+    template<typename T> \
+    BOOST_PP_EXPR_IF(has_return, result) \
+    name(const T& t BOOST_IOSTREAMS_PUSH_PARAMS() BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)) \
+    { this->helper( ::pdalboost::iostreams::detail::resolve<mode, ch>(t) \
+                    BOOST_IOSTREAMS_PUSH_ARGS() ); } \
+    /**/
+# endif // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+#else // #if VC6, VC7.0, Borland 5.x
+# define BOOST_IOSTREAMS_DEFINE_PUSH_IMPL(name, mode, ch, helper, has_return, result) \
+    template<typename T> \
+    void BOOST_PP_CAT(name, _msvc_impl) \
+    ( ::pdalboost::mpl::true_, const T& t BOOST_IOSTREAMS_PUSH_PARAMS() ) \
+    { t.push(*this); } \
+    template<typename T> \
+    void BOOST_PP_CAT(name, _msvc_impl) \
+    ( ::pdalboost::mpl::false_, const T& t BOOST_IOSTREAMS_PUSH_PARAMS() ) \
+    { this->helper( ::pdalboost::iostreams::detail::resolve<mode, ch>(t) \
+                    BOOST_IOSTREAMS_PUSH_ARGS() ); } \
+    template<typename T> \
+    BOOST_PP_IF(has_return, result, explicit) \
+    name(const T& t BOOST_IOSTREAMS_PUSH_PARAMS()) \
+    { \
+        this->BOOST_PP_CAT(name, _msvc_impl) \
+              ( ::pdalboost::iostreams::detail::is_pipeline<T>(), \
+                t BOOST_IOSTREAMS_PUSH_ARGS() ); \
+    } \
+    /**/
+#endif // #if VC6, VC7.0, Borland 5.x
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_PUSH_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/push_params.hpp b/vendor/pdalboost/boost/iostreams/detail/push_params.hpp
new file mode 100644
index 0000000..7e80d09
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/push_params.hpp
@@ -0,0 +1,21 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_PUSH_PARAMS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_PUSH_PARAMS_HPP_INCLUDED 
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif                    
+
+#define BOOST_IOSTREAMS_PUSH_PARAMS() \
+    , std::streamsize buffer_size = -1 , std::streamsize pback_size = -1 \
+    /**/
+
+#define BOOST_IOSTREAMS_PUSH_ARGS() , buffer_size, pback_size     
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_PUSH_PARAMS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/resolve.hpp b/vendor/pdalboost/boost/iostreams/detail/resolve.hpp
new file mode 100644
index 0000000..8e8c410
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/resolve.hpp
@@ -0,0 +1,235 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_RESOLVE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_RESOLVE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <boost/config.hpp> // partial spec, put size_t in std.
+#include <cstddef>          // std::size_t.
+#include <boost/detail/is_incrementable.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/adapter/mode_adapter.hpp>
+#include <boost/iostreams/detail/adapter/output_iterator_adapter.hpp>
+#include <boost/iostreams/detail/adapter/range_adapter.hpp>
+#include <boost/iostreams/detail/config/gcc.hpp>
+#include <boost/iostreams/detail/config/overload_resolution.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/enable_if_stream.hpp>
+#include <boost/iostreams/detail/is_dereferenceable.hpp>
+#include <boost/iostreams/detail/is_iterator_range.hpp>
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/bool.hpp> // true_.
+#include <boost/mpl/if.hpp>
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# include <boost/range/iterator_range.hpp>
+#endif // #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+#include <boost/type_traits/is_array.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // VC7.1 C4224.
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+//------------------Definition of resolve-------------------------------------//
+
+#ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //-------------------------//
+
+template<typename Mode, typename Ch, typename T>
+struct resolve_traits {
+    typedef typename 
+            mpl::if_<
+                pdalboost::detail::is_incrementable<T>,
+                output_iterator_adapter<Mode, Ch, T>,
+                const T&
+            >::type type;
+};
+
+# ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-------------------------------//
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve( const T& t 
+         BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)
+
+         // I suspect that the compilers which require this workaround may
+         // be correct, but I'm not sure why :(
+         #if BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, BOOST_TESTED_AT(810)) ||\
+             BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) || \
+             BOOST_WORKAROUND(BOOST_IOSTREAMS_GCC, BOOST_TESTED_AT(400)) ||\
+             BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(1110))
+             /**/
+         , typename disable_if< is_iterator_range<T> >::type* = 0
+         #endif
+         )
+{
+    typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+    return return_type(t);
+}
+
+template<typename Mode, typename Ch, typename Tr>
+mode_adapter< Mode, std::basic_streambuf<Ch, Tr> > 
+resolve(std::basic_streambuf<Ch, Tr>& sb)
+{ return mode_adapter< Mode, std::basic_streambuf<Ch, Tr> >(wrap(sb)); }
+
+template<typename Mode, typename Ch, typename Tr>
+mode_adapter< Mode, std::basic_istream<Ch, Tr> > 
+resolve(std::basic_istream<Ch, Tr>& is)
+{ return mode_adapter< Mode, std::basic_istream<Ch, Tr> >(wrap(is)); }
+
+template<typename Mode, typename Ch, typename Tr>
+mode_adapter< Mode, std::basic_ostream<Ch, Tr> > 
+resolve(std::basic_ostream<Ch, Tr>& os)
+{ return mode_adapter< Mode, std::basic_ostream<Ch, Tr> >(wrap(os)); }
+
+template<typename Mode, typename Ch, typename Tr>
+mode_adapter< Mode, std::basic_iostream<Ch, Tr> > 
+resolve(std::basic_iostream<Ch, Tr>& io)
+{ return mode_adapter< Mode, std::basic_iostream<Ch, Tr> >(wrap(io)); }
+
+template<typename Mode, typename Ch, std::size_t N>
+array_adapter<Mode, Ch> resolve(Ch (&array)[N])
+{ return array_adapter<Mode, Ch>(array); }
+
+#  if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+    template<typename Mode, typename Ch, typename Iter>
+    range_adapter< Mode, pdalboost::iterator_range<Iter> > 
+    resolve(const pdalboost::iterator_range<Iter>& rng)
+    { return range_adapter< Mode, pdalboost::iterator_range<Iter> >(rng); }
+#  endif // #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+# else // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //---------------------//
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type
+resolve( const T& t 
+         BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)
+         #if defined(__GNUC__)
+         , typename disable_if< is_iterator_range<T> >::type* = 0
+         #endif
+         )
+{
+    typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+    return return_type(t);
+}
+
+template<typename Mode, typename Ch>
+mode_adapter<Mode, std::streambuf> 
+resolve(std::streambuf& sb) 
+{ return mode_adapter<Mode, std::streambuf>(wrap(sb)); }
+
+template<typename Mode, typename Ch>
+mode_adapter<Mode, std::istream> 
+resolve(std::istream& is)
+{ return mode_adapter<Mode, std::istream>(wrap(is)); }
+
+template<typename Mode, typename Ch>
+mode_adapter<Mode, std::ostream> 
+resolve(std::ostream& os)
+{ return mode_adapter<Mode, std::ostream>(wrap(os)); }
+
+template<typename Mode, typename Ch>
+mode_adapter<Mode, std::iostream> 
+resolve(std::iostream& io)
+{ return mode_adapter<Mode, std::iostream>(wrap(io)); }
+
+template<typename Mode, typename Ch, std::size_t N>
+array_adapter<Mode, Ch> resolve(Ch (&array)[N])
+{ return array_adapter<Mode, Ch>(array); }
+
+template<typename Mode, typename Ch, typename Iter>
+range_adapter< Mode, pdalboost::iterator_range<Iter> > 
+resolve(const pdalboost::iterator_range<Iter>& rng)
+{ return range_adapter< Mode, pdalboost::iterator_range<Iter> >(rng); }
+
+# endif // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------//
+#else // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //----------------//
+
+template<typename Mode, typename Ch, typename T>
+struct resolve_traits {
+    // Note: test for is_iterator_range must come before test for output
+    // iterator.
+    typedef typename 
+            iostreams::select<  // Disambiguation for Tru64.
+                is_std_io<T>,
+                mode_adapter<Mode, T>,
+                is_iterator_range<T>,
+                range_adapter<Mode, T>,
+                is_dereferenceable<T>,
+                output_iterator_adapter<Mode, Ch, T>,
+                is_array<T>,
+                array_adapter<Mode, T>,
+                else_,
+                #if !BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+                    const T&
+                #else
+                    T
+                #endif
+            >::type type;
+};
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type 
+resolve(const T& t, mpl::true_)
+{   // Bad overload resolution.
+    typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+    return return_type(wrap(const_cast<T&>(t)));
+}
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type 
+resolve(const T& t, mpl::false_)
+{ 
+    typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+    return return_type(t);
+}
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type 
+resolve(const T& t BOOST_IOSTREAMS_DISABLE_IF_STREAM(T))
+{ return resolve<Mode, Ch>(t, is_std_io<T>()); }
+
+# if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && \
+     !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && \
+     !defined(__GNUC__) // ---------------------------------------------------//
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type 
+resolve(T& t, mpl::true_)
+{ 
+    typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+    return return_type(wrap(t));
+}
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type 
+resolve(T& t, mpl::false_)
+{ 
+    typedef typename resolve_traits<Mode, Ch, T>::type return_type;
+    return return_type(t);
+}
+
+template<typename Mode, typename Ch, typename T>
+typename resolve_traits<Mode, Ch, T>::type 
+resolve(T& t BOOST_IOSTREAMS_ENABLE_IF_STREAM(T))
+{ return resolve<Mode, Ch>(t, is_std_io<T>()); }
+
+# endif // Borland 5.x, VC6-7.0 or GCC 2.9x //--------------------------------//
+#endif // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //---------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // VC7.1 4224.
+
+#endif // BOOST_IOSTREAMS_DETAIL_RESOLVE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/restrict_impl.hpp b/vendor/pdalboost/boost/iostreams/detail/restrict_impl.hpp
new file mode 100644
index 0000000..db2bb96
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/restrict_impl.hpp
@@ -0,0 +1,482 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+
+ * File:        boost/iostreams/detail/restrict_impl.hpp
+ * Date:        Sun Jan 06 12:57:30 MST 2008
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ *
+ * If included with the macro BOOST_IOSTREAMS_RESTRICT undefined, defines the 
+ * class template pdalboost::iostreams::restriction. If included with the macro
+ * BOOST_IOSTREAMS_RESTRICT defined as an identifier, defines the overloaded
+ * function template pdalboost::iostreams::BOOST_IOSTREAMS_RESTRICT, and object 
+ * generator for pdalboost::iostreams::restriction.
+ *
+ * This design allows <boost/iostreams/restrict.hpp> and 
+ * <boost/iostreams/slice.hpp> to share an implementation.
+ */
+
+#if !defined(BOOST_IOSTREAMS_RESTRICT_IMPL_HPP_INCLUDED) && \
+    !defined(BOOST_IOSTREAMS_RESTRICT)
+# define BOOST_IOSTREAMS_RESTRICT_IMPL_HPP_INCLUDED
+                    
+//------------------Implementation of restriction-----------------------------//
+
+# include <algorithm>          // min.
+# include <utility>            // pair.
+# include <boost/cstdint.hpp>  // intmax_t.
+# include <boost/config.hpp>   // DEDUCED_TYPENAME.
+# include <boost/iostreams/categories.hpp>
+# include <boost/iostreams/char_traits.hpp>
+# include <boost/iostreams/detail/adapter/device_adapter.hpp>
+# include <boost/iostreams/detail/adapter/filter_adapter.hpp>
+# include <boost/iostreams/detail/call_traits.hpp>
+# include <boost/iostreams/detail/enable_if_stream.hpp>
+# include <boost/iostreams/detail/error.hpp>
+# include <boost/iostreams/detail/ios.hpp>     // failure.
+# include <boost/iostreams/detail/select.hpp>
+# include <boost/iostreams/operations.hpp>
+# include <boost/iostreams/skip.hpp>
+# include <boost/iostreams/traits.hpp>         // mode_of, is_direct.
+# include <boost/mpl/bool.hpp>
+# include <boost/static_assert.hpp>
+# include <boost/throw_exception.hpp>
+# include <boost/type_traits/is_convertible.hpp>
+
+# include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+//
+// Template name: restricted_indirect_device.
+// Description: Provides an restricted view of an indirect Device.
+// Template parameters:
+//      Device - An indirect model of Device that models either Source or
+//          SeekableDevice.
+//
+template<typename Device>
+class restricted_indirect_device : public device_adapter<Device> {
+private:
+    typedef typename detail::param_type<Device>::type  param_type;
+public:
+    typedef typename char_type_of<Device>::type  char_type;
+    typedef typename mode_of<Device>::type       mode;
+    BOOST_STATIC_ASSERT(!(is_convertible<mode, detail::two_sequence>::value));
+    struct category
+        : mode,
+          device_tag,
+          closable_tag,
+          flushable_tag,
+          localizable_tag,
+          optimally_buffered_tag
+        { };
+    restricted_indirect_device( param_type dev, stream_offset off,
+                                stream_offset len = -1 );
+    std::streamsize read(char_type* s, std::streamsize n);
+    std::streamsize write(const char_type* s, std::streamsize n);
+    std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
+private:
+    stream_offset beg_, pos_, end_;
+};
+
+//
+// Template name: restricted_direct_device.
+// Description: Provides an restricted view of a Direct Device.
+// Template parameters:
+//      Device - A model of Direct and Device.
+//
+template<typename Device>
+class restricted_direct_device : public device_adapter<Device> {
+public:
+    typedef typename char_type_of<Device>::type  char_type;
+    typedef std::pair<char_type*, char_type*>    pair_type;
+    typedef typename mode_of<Device>::type       mode;
+    BOOST_STATIC_ASSERT(!(is_convertible<mode, detail::two_sequence>::value));
+    struct category
+        : mode_of<Device>::type,
+          device_tag,
+          direct_tag,
+          closable_tag,
+          localizable_tag
+        { };
+    restricted_direct_device( const Device& dev, stream_offset off,
+                              stream_offset len = -1 );
+    pair_type input_sequence();
+    pair_type output_sequence();
+private:
+    pair_type sequence(mpl::true_);
+    pair_type sequence(mpl::false_);
+    char_type *beg_, *end_;
+};
+
+//
+// Template name: restricted_filter.
+// Description: Provides an restricted view of a Filter.
+// Template parameters:
+//      Filter - An indirect model of Filter.
+//
+template<typename Filter>
+class restricted_filter : public filter_adapter<Filter> {
+public:
+    typedef typename char_type_of<Filter>::type char_type;
+    typedef typename mode_of<Filter>::type      mode;
+    BOOST_STATIC_ASSERT(!(is_convertible<mode, detail::two_sequence>::value));
+    struct category
+        : mode,
+          filter_tag,
+          multichar_tag,
+          closable_tag,
+          localizable_tag,
+          optimally_buffered_tag
+        { };
+    restricted_filter( const Filter& flt, stream_offset off, 
+                       stream_offset len = -1 );
+
+    template<typename Source>
+    std::streamsize read(Source& src, char_type* s, std::streamsize n)
+    {
+        using namespace std;
+        if (!open_)
+            open(src, BOOST_IOS::in);
+        std::streamsize amt =
+            end_ != -1 ?
+                (std::min) (n, static_cast<std::streamsize>(end_ - pos_)) :
+                n;
+        std::streamsize result = 
+            iostreams::read(this->component(), src, s, amt);
+        if (result != -1)
+            pos_ += result;
+        return result;
+    }
+
+    template<typename Sink>
+    std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+    {
+        if (!open_)
+            open(snk, BOOST_IOS::out);
+        if (end_ != -1 && pos_ + n >= end_) {
+            if(pos_ < end_)
+                pos_ += iostreams::write(this->component(),
+                    snk, s, end_ - pos_);
+            pdalboost::throw_exception(bad_write());
+        }
+        std::streamsize result = 
+            iostreams::write(this->component(), snk, s, n);
+        pos_ += result;
+        return result;
+    }
+
+    template<typename Device>
+    std::streampos seek(Device& dev, stream_offset off, BOOST_IOS::seekdir way)
+    {
+        stream_offset next;
+        if (way == BOOST_IOS::beg) {
+            next = beg_ + off;
+        } else if (way == BOOST_IOS::cur) {
+            next = pos_ + off;
+        } else if (end_ != -1) {
+            next = end_ + off;
+        } else {
+            // Restriction is half-open; seek relative to the actual end.
+            pos_ = this->component().seek(dev, off, BOOST_IOS::end);
+            if (pos_ < beg_)
+                pdalboost::throw_exception(bad_seek());
+            return offset_to_position(pos_ - beg_);
+        }
+        if (next < beg_ || (end_ != -1 && next >= end_))
+            pdalboost::throw_exception(bad_seek());
+        pos_ = this->component().seek(dev, next, BOOST_IOS::cur);
+        return offset_to_position(pos_ - beg_);
+    }
+
+    template<typename Device>
+    void close(Device& dev) 
+    { 
+        open_ = false;
+        detail::close_all(this->component(), dev); 
+    }
+
+    template<typename Device>
+    void close(Device& dev, BOOST_IOS::openmode which) 
+    { 
+        open_ = false;
+        iostreams::close(this->component(), dev, which); 
+    }
+private:
+    template<typename Device>
+    void open(Device& dev, BOOST_IOS::openmode which)
+    {
+        typedef typename is_convertible<mode, dual_use>::type is_dual_use;
+        open_ = true;
+        which = is_dual_use() ? which : (BOOST_IOS::in | BOOST_IOS::out);
+        iostreams::skip(this->component(), dev, beg_, which);
+    }
+
+    stream_offset  beg_, pos_, end_;
+    bool           open_;
+};
+
+template<typename T>
+struct restriction_traits
+    : iostreams::select<  // Disambiguation for Tru64.
+          is_filter<T>,  restricted_filter<T>,
+          is_direct<T>,  restricted_direct_device<T>,
+          else_,         restricted_indirect_device<T>
+      >
+    { };
+
+} // End namespace detail.
+
+template<typename T>
+struct restriction : public detail::restriction_traits<T>::type {
+    typedef typename detail::param_type<T>::type          param_type;
+    typedef typename detail::restriction_traits<T>::type  base_type;
+    restriction(param_type t, stream_offset off, stream_offset len = -1)
+        : base_type(t, off, len)
+        { }
+};
+
+namespace detail {
+
+//--------------Implementation of restricted_indirect_device------------------//
+
+template<typename Device>
+restricted_indirect_device<Device>::restricted_indirect_device
+    (param_type dev, stream_offset off, stream_offset len)
+    : device_adapter<Device>(dev), beg_(off), pos_(off), 
+      end_(len != -1 ? off + len : -1)
+{
+    if (len < -1 || off < 0)
+        pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad offset"));
+    iostreams::skip(this->component(), off);
+}
+
+template<typename Device>
+inline std::streamsize restricted_indirect_device<Device>::read
+    (char_type* s, std::streamsize n)
+{
+    using namespace std;
+    std::streamsize amt =
+        end_ != -1 ?
+            (std::min) (n, static_cast<std::streamsize>(end_ - pos_)) :
+            n;
+    std::streamsize result = iostreams::read(this->component(), s, amt);
+    if (result != -1)
+        pos_ += result;
+    return result;
+}
+
+template<typename Device>
+inline std::streamsize restricted_indirect_device<Device>::write
+    (const char_type* s, std::streamsize n)
+{
+    if (end_ != -1 && pos_ + n >= end_) {
+        if(pos_ < end_)
+            pos_ += iostreams::write(this->component(), s, end_ - pos_);
+        pdalboost::throw_exception(bad_write());
+    }
+    std::streamsize result = iostreams::write(this->component(), s, n);
+    pos_ += result;
+    return result;
+}
+
+template<typename Device>
+std::streampos restricted_indirect_device<Device>::seek
+    (stream_offset off, BOOST_IOS::seekdir way)
+{
+    stream_offset next;
+    if (way == BOOST_IOS::beg) {
+        next = beg_ + off;
+    } else if (way == BOOST_IOS::cur) {
+        next = pos_ + off;
+    } else if (end_ != -1) {
+        next = end_ + off;
+    } else {
+        // Restriction is half-open; seek relative to the actual end.
+        pos_ = iostreams::seek(this->component(), off, BOOST_IOS::end);
+        if (pos_ < beg_)
+            pdalboost::throw_exception(bad_seek());
+        return offset_to_position(pos_ - beg_);
+    }
+    if (next < beg_ || (end_ != -1 && next > end_))
+        pdalboost::throw_exception(bad_seek());
+    pos_ = iostreams::seek(this->component(), next - pos_, BOOST_IOS::cur);
+    return offset_to_position(pos_ - beg_);
+}
+
+//--------------Implementation of restricted_direct_device--------------------//
+
+template<typename Device>
+restricted_direct_device<Device>::restricted_direct_device
+    (const Device& dev, stream_offset off, stream_offset len)
+    : device_adapter<Device>(dev), beg_(0), end_(0)
+{
+    std::pair<char_type*, char_type*> seq =
+        sequence(is_convertible<category, input>());
+    if ( off < 0 || len < -1 || 
+         (len != -1 && off + len > seq.second - seq.first) )
+    {
+        pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad offset"));
+    }
+    beg_ = seq.first + off;
+    end_ = len != -1 ? 
+        seq.first + off + len :
+        seq.second;
+}
+
+template<typename Device>
+typename restricted_direct_device<Device>::pair_type
+restricted_direct_device<Device>::input_sequence()
+{
+    BOOST_STATIC_ASSERT((is_convertible<category, input>::value));
+    return std::make_pair(beg_, end_);
+}
+
+template<typename Device>
+typename restricted_direct_device<Device>::pair_type
+restricted_direct_device<Device>::output_sequence()
+{
+    BOOST_STATIC_ASSERT((is_convertible<category, output>::value));
+    return std::make_pair(beg_, end_);
+}
+
+template<typename Device>
+typename restricted_direct_device<Device>::pair_type
+restricted_direct_device<Device>::sequence(mpl::true_)
+{ return iostreams::input_sequence(this->component()); }
+
+template<typename Device>
+typename restricted_direct_device<Device>::pair_type
+restricted_direct_device<Device>::sequence(mpl::false_)
+{ return iostreams::output_sequence(this->component()); }
+
+//--------------Implementation of restricted_filter---------------------------//
+
+template<typename Filter>
+restricted_filter<Filter>::restricted_filter
+    (const Filter& flt, stream_offset off, stream_offset len)
+    : filter_adapter<Filter>(flt), beg_(off),
+      pos_(off), end_(len != -1 ? off + len : -1), open_(false)
+{
+    if (len < -1 || off < 0)
+        pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad offset"));
+}
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#elif defined(BOOST_IOSTREAMS_RESTRICT)
+
+namespace pdalboost { namespace iostreams {
+
+//--------------Implementation of restrict/slice------------------------------//
+
+// Note: The following workarounds are patterned after resolve.hpp. It has not
+// yet been confirmed that they are necessary.
+
+# ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //------------------------//
+#  ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //------------------------------//
+
+template<typename T>
+restriction<T> 
+BOOST_IOSTREAMS_RESTRICT( const T& t, stream_offset off, stream_offset len = -1
+                          BOOST_IOSTREAMS_DISABLE_IF_STREAM(T) )
+{ return restriction<T>(t, off, len); }
+
+template<typename Ch, typename Tr>
+restriction< std::basic_streambuf<Ch, Tr> >
+BOOST_IOSTREAMS_RESTRICT( std::basic_streambuf<Ch, Tr>& sb, stream_offset off, 
+                          stream_offset len = -1 )
+{ return restriction< std::basic_streambuf<Ch, Tr> >(sb, off, len); }
+
+template<typename Ch, typename Tr>
+restriction< std::basic_istream<Ch, Tr> >
+BOOST_IOSTREAMS_RESTRICT
+    (std::basic_istream<Ch, Tr>& is, stream_offset off, stream_offset len = -1)
+{ return restriction< std::basic_istream<Ch, Tr> >(is, off, len); }
+
+template<typename Ch, typename Tr>
+restriction< std::basic_ostream<Ch, Tr> >
+BOOST_IOSTREAMS_RESTRICT
+    (std::basic_ostream<Ch, Tr>& os, stream_offset off, stream_offset len = -1)
+{ return restriction< std::basic_ostream<Ch, Tr> >(os, off, len); }
+
+template<typename Ch, typename Tr>
+restriction< std::basic_iostream<Ch, Tr> >
+BOOST_IOSTREAMS_RESTRICT
+    (std::basic_iostream<Ch, Tr>& io, stream_offset off, stream_offset len = -1)
+{ return restriction< std::basic_iostream<Ch, Tr> >(io, off, len); }
+
+#  else // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------//
+
+template<typename T>
+restriction<T> 
+BOOST_IOSTREAMS_RESTRICT( const T& t, stream_offset off, stream_offset len = -1
+                          BOOST_IOSTREAMS_DISABLE_IF_STREAM(T) )
+{ return restriction<T>(t, off, len); }
+
+restriction<std::streambuf> 
+BOOST_IOSTREAMS_RESTRICT
+    (std::streambuf& sb, stream_offset off, stream_offset len = -1)
+{ return restriction<std::streambuf>(sb, off, len); }
+
+restriction<std::istream> 
+BOOST_IOSTREAMS_RESTRICT
+    (std::istream<Ch, Tr>& is, stream_offset off, stream_offset len = -1)
+{ return restriction<std::istream>(is, off, len); }
+
+restriction<std::ostream> 
+BOOST_IOSTREAMS_RESTRICT
+    (std::ostream<Ch, Tr>& os, stream_offset off, stream_offset len = -1)
+{ return restriction<std::ostream>(os, off, len); }
+
+restriction<std::iostream> 
+BOOST_IOSTREAMS_RESTRICT
+    (std::iostream<Ch, Tr>& io, stream_offset off, stream_offset len = -1)
+{ return restriction<std::iostream>(io, off, len); }
+
+#  endif // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-------------------//
+# else // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //---------------//
+
+template<typename T>
+restriction<T> 
+BOOST_IOSTREAMS_RESTRICT
+    (const T& t, stream_offset off, stream_offset len, mpl::true_)
+{   // Bad overload resolution.
+    return restriction<T>(const_cast<T&>(t, off, len));
+}
+
+template<typename T>
+restriction<T> 
+BOOST_IOSTREAMS_RESTRICT
+    (const T& t, stream_offset off, stream_offset len, mpl::false_)
+{ return restriction<T>(t, off, len); }
+
+template<typename T>
+restriction<T> 
+BOOST_IOSTREAMS_RESTRICT( const T& t, stream_offset off, stream_offset len = -1
+                          BOOST_IOSTREAMS_DISABLE_IF_STREAM(T) )
+{ return BOOST_IOSTREAMS_RESTRICT(t, off, len, is_std_io<T>()); }
+
+# if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && \
+     !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && \
+     !defined(__GNUC__) // ---------------------------------------------------//
+
+template<typename T>
+restriction<T>
+BOOST_IOSTREAMS_RESTRICT(T& t, stream_offset off, stream_offset len = -1)
+{ return restriction<T>(t, off, len); }
+
+#  endif // Borland 5.x, VC6-7.0 or GCC 2.9x //-------------------------------//
+# endif // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //--------------//
+
+} } // End namespaces iostreams, boost.
+
+#endif // #if !defined(BOOST_IOSTREAMS_RESTRICT_IMPL_HPP_INCLUDED) ...
diff --git a/vendor/pdalboost/boost/iostreams/detail/select.hpp b/vendor/pdalboost/boost/iostreams/detail/select.hpp
new file mode 100644
index 0000000..e361814
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/select.hpp
@@ -0,0 +1,86 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains the metafunction select, which mimics the effect of a chain of
+// nested mpl if_'s.
+//
+// -----------------------------------------------------------------------------
+//
+// Usage:
+//      
+// typedef typename select<
+//                      case1,  type1,
+//                      case2,  type2,
+//                      ...
+//                      true_,  typen
+//                  >::type selection;
+//
+// Here case1, case2, ... are models of MPL::IntegralConstant with value type
+// bool, and n <= 12.
+
+#ifndef BOOST_IOSTREAMS_SELECT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_SELECT_HPP_INCLUDED   
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif                  
+ 
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/void.hpp>
+
+namespace pdalboost { namespace iostreams { 
+
+typedef mpl::true_ else_;
+
+template< typename Case1 = mpl::true_,
+          typename Type1 = mpl::void_,
+          typename Case2 = mpl::true_,
+          typename Type2 = mpl::void_,
+          typename Case3 = mpl::true_,
+          typename Type3 = mpl::void_,
+          typename Case4 = mpl::true_,
+          typename Type4 = mpl::void_,
+          typename Case5 = mpl::true_,
+          typename Type5 = mpl::void_,
+          typename Case6 = mpl::true_,
+          typename Type6 = mpl::void_,
+          typename Case7 = mpl::true_,
+          typename Type7 = mpl::void_,
+          typename Case8 = mpl::true_,
+          typename Type8 = mpl::void_,
+          typename Case9 = mpl::true_,
+          typename Type9 = mpl::void_,
+          typename Case10 = mpl::true_,
+          typename Type10 = mpl::void_,
+          typename Case11 = mpl::true_,
+          typename Type11 = mpl::void_,
+          typename Case12 = mpl::true_,
+          typename Type12 = mpl::void_ >
+struct select {
+    typedef typename
+            mpl::eval_if<
+                Case1, mpl::identity<Type1>, mpl::eval_if<
+                Case2, mpl::identity<Type2>, mpl::eval_if<
+                Case3, mpl::identity<Type3>, mpl::eval_if<
+                Case4, mpl::identity<Type4>, mpl::eval_if<
+                Case5, mpl::identity<Type5>, mpl::eval_if<
+                Case6, mpl::identity<Type6>, mpl::eval_if<
+                Case7, mpl::identity<Type7>, mpl::eval_if<
+                Case8, mpl::identity<Type8>, mpl::eval_if<
+                Case9, mpl::identity<Type9>, mpl::eval_if<
+                Case10, mpl::identity<Type10>, mpl::eval_if<
+                Case11, mpl::identity<Type11>, mpl::if_<
+                Case12, Type12, mpl::void_ > > > > > > > > > > >
+            >::type type;
+};
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_SELECT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/select_by_size.hpp b/vendor/pdalboost/boost/iostreams/detail/select_by_size.hpp
new file mode 100644
index 0000000..e01d40a
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/select_by_size.hpp
@@ -0,0 +1,161 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+//
+// Intended as an alternative to type_traits::yes_type and type_traits::no_type.
+// Provides an arbitrary number of types (case_<0>, case_<1>, ...) for
+// determining the results of overload resultion using 'sizeof', plus a uniform
+// means of using the result. yes_type and no_type are typedefs for case_<1>
+// and case_<0>. A single case with negative argument, case_<-1>, is also 
+// provided, for convenience.
+//
+// This header may be included any number of times, with
+// BOOST_SELECT_BY_SIZE_MAX_CASE defined to be the largest N such that case_<N>
+// is needed for a particular application. It defaults to 20.
+//
+// This header depends only on Boost.Config and Boost.Preprocessor. Dependence
+// on Type Traits or MPL was intentionally avoided, to leave open the 
+// possibility that select_by_size could be used by these libraries.
+//
+// Example usage:
+//
+//    #define BOOST_SELECT_BY_SIZE_MAX_CASE 7   // (Needed when default was 2)
+//    #include <boost/utility/select_by_size.hpp>
+//
+//    using namespace pdalboost::utility;
+//
+//    case_<0> helper(bool);
+//    case_<1> helper(int);
+//    case_<2> helper(unsigned);
+//    case_<3> helper(long);
+//    case_<4> helper(unsigned long);
+//    case_<5> helper(float);
+//    case_<6> helper(double);
+//    case_<7> helper(const char*);
+//
+//    struct test {
+//        static const int value =
+//            select_by_size< sizeof(helper(9876UL)) >::value;
+//        BOOST_STATIC_ASSERT(value == 4);
+//    };
+//
+// For compilers with integral constant expression problems, e.g. Borland 5.x,
+// one can also write
+//
+//    struct test {
+//        BOOST_SELECT_BY_SIZE(int, value, helper(9876UL));
+//    };
+//
+// to define a static integral constant 'value' equal to
+//
+//    select_by_size< sizeof(helper(9876UL)) >::value.
+//
+
+// Include guards surround all contents of this header except for explicit
+// specializations of select_by_size for case_<N> with N > 2.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_SELECT_BY_SIZE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_SELECT_BY_SIZE_HPP_INCLUDED
+
+// The lowest N for which select_by_size< sizeof(case_<N>) > has not been
+// specialized.
+#define SELECT_BY_SIZE_MAX_SPECIALIZED 20
+
+#include <boost/config.hpp>    // BOOST_STATIC_CONSTANT.
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+
+/* Alternative implementation using max_align. 
+
+#include <boost/type_traits/alignment_of.hpp>
+#include <boost/type_traits/type_with_alignment.hpp>
+
+namespace pdalboost { namespace utility {
+
+template<int N>
+struct case_ { char c[(N + 1) * alignment_of<detail::max_align>::value]; };
+
+template<unsigned Size>
+struct select_by_size {
+    BOOST_STATIC_CONSTANT(int, value = 
+        (Size / alignment_of<detail::max_align>::value - 1));
+};
+
+} } // End namespaces utility, boost.
+
+*/              // End alternate implementation.
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+//--------------Definition of case_-------------------------------------------//
+
+template<int N> struct case_ { char c1; case_<N - 1> c2; };
+template<> struct case_<-1> { char c; };
+typedef case_<true> yes_type;
+typedef case_<false> no_type;
+
+//--------------Declaration of select_by_size---------------------------------//
+
+template<unsigned Size> struct select_by_size;
+
+} } } // End namespaces detail, iostreams, boost.
+
+//--------------Definition of SELECT_BY_SIZE_SPEC-----------------------------//
+
+// Sepecializes select_by_size for sizeof(case<n-1>). The decrement is used
+// here because the preprocessor library doesn't handle negative integers.
+#define SELECT_BY_SIZE_SPEC(n) \
+    namespace pdalboost { namespace iostreams { namespace detail { \
+      static const int BOOST_PP_CAT(sizeof_case_, n) = sizeof(case_<n - 1>); \
+      template<> \
+      struct select_by_size< BOOST_PP_CAT(sizeof_case_, n) > { \
+          struct type { BOOST_STATIC_CONSTANT(int, value = n - 1); }; \
+          BOOST_STATIC_CONSTANT(int, value = type::value); \
+      }; \
+    } } } \
+    /**/
+
+//--------------Default specializations of select_by_size---------------------//
+
+#define BOOST_PP_LOCAL_MACRO(n) SELECT_BY_SIZE_SPEC(n)
+#define BOOST_PP_LOCAL_LIMITS (0, 20)
+#include BOOST_PP_LOCAL_ITERATE()
+#undef BOOST_PP_LOCAL_MACRO
+
+//--------------Definition of SELECT_BY_SIZE----------------------------------//
+
+#define BOOST_SELECT_BY_SIZE(type_, name, expr) \
+    BOOST_STATIC_CONSTANT( \
+        unsigned, \
+        BOOST_PP_CAT(boost_select_by_size_temp_, name) = sizeof(expr) \
+    ); \
+    BOOST_STATIC_CONSTANT( \
+        type_, \
+        name = \
+            ( ::pdalboost::iostreams::detail::select_by_size< \
+                BOOST_PP_CAT(boost_select_by_size_temp_, name) \
+              >::value ) \
+    ) \
+    /**/
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_SELECT_BY_SIZE_HPP_INCLUDED
+
+//----------Specializations of SELECT_BY_SIZE (outside main inclued guards)---//
+
+#if defined(BOOST_SELECT_BY_SIZE_MAX_CASE) && \
+    BOOST_SELECT_BY_SIZE_MAX_CASE > SELECT_BY_SIZE_MAX_SPECIALIZED
+
+#define BOOST_PP_LOCAL_MACRO(n) SELECT_BY_SIZE_SPEC(n)
+#define BOOST_PP_LOCAL_LIMITS \
+    (SELECT_BY_SIZE_MAX_SPECIALIZED, BOOST_SELECT_BY_SIZE_MAX_CASE) \
+    /**/
+#include BOOST_PP_LOCAL_ITERATE()
+#undef BOOST_PP_LOCAL_MACRO
+#undef SELECT_BY_SIZE_MAX_SPECIALIZED
+#define SELECT_BY_SIZE_MAX_SPECIALIZED BOOST_SELECT_BY_SIZE_MAX_CASE
+
+#endif
diff --git a/vendor/pdalboost/boost/iostreams/detail/streambuf.hpp b/vendor/pdalboost/boost/iostreams/detail/streambuf.hpp
new file mode 100644
index 0000000..49a48ce
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/streambuf.hpp
@@ -0,0 +1,34 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_STREAMBUF_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+                 
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# include <streambuf>
+#else 
+# include <streambuf.h>
+#endif 
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# define BOOST_IOSTREAMS_BASIC_STREAMBUF(ch, tr) std::basic_streambuf< ch, tr >
+# define BOOST_IOSTREAMS_PUBSYNC pubsync
+# define BOOST_IOSTREAMS_PUBSEEKOFF pubseekoff
+# define BOOST_IOSTREAMS_PUBSEEKPOS pubseekpos
+#else
+# define BOOST_IOSTREAMS_BASIC_STREAMBUF(ch, tr) std::streambuf
+# define BOOST_IOSTREAMS_PUBSYNC sync
+# define BOOST_IOSTREAMS_PUBSEEKOFF seekoff
+# define BOOST_IOSTREAMS_PUBSEEKPOS seekpos
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_STREAMBUF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/streambuf/chainbuf.hpp b/vendor/pdalboost/boost/iostreams/detail/streambuf/chainbuf.hpp
new file mode 100644
index 0000000..883e3fe
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/streambuf/chainbuf.hpp
@@ -0,0 +1,116 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_CHAINBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_CHAINBUF_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif      
+
+#include <boost/config.hpp>                    // BOOST_MSVC, template friends.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/chain.hpp>
+#include <boost/iostreams/detail/access_control.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/streambuf/linked_streambuf.hpp>
+#include <boost/iostreams/detail/translate_int_type.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/noncopyable.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+//--------------Definition of chainbuf----------------------------------------//
+
+//
+// Template name: chainbuf.
+// Description: Stream buffer which operates by delegating to the first
+//      linked_streambuf in a chain.
+// Template parameters:
+//      Chain - The chain type.
+//
+template<typename Chain, typename Mode, typename Access>
+class chainbuf
+    : public BOOST_IOSTREAMS_BASIC_STREAMBUF(
+                 typename Chain::char_type,
+                 typename Chain::traits_type
+             ),
+      public access_control<typename Chain::client_type, Access>,
+      private noncopyable
+{
+private:
+    typedef access_control<chain_client<Chain>, Access>      client_type;
+public:
+    typedef typename Chain::char_type                        char_type;
+    BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(typename Chain::traits_type)
+protected:
+    typedef linked_streambuf<char_type, traits_type>         delegate_type;
+    chainbuf() { client_type::set_chain(&chain_); }
+    int_type underflow() 
+        { sentry t(this); return translate(delegate().underflow()); }
+    int_type pbackfail(int_type c)
+        { sentry t(this); return translate(delegate().pbackfail(c)); }
+    std::streamsize xsgetn(char_type* s, std::streamsize n)
+        { sentry t(this); return delegate().xsgetn(s, n); }
+    int_type overflow(int_type c)
+        { sentry t(this); return translate(delegate().overflow(c)); }
+    std::streamsize xsputn(const char_type* s, std::streamsize n)
+        { sentry t(this); return delegate().xsputn(s, n); }
+    int sync() { sentry t(this); return delegate().sync(); }
+    pos_type seekoff( off_type off, BOOST_IOS::seekdir way,
+                      BOOST_IOS::openmode which =
+                          BOOST_IOS::in | BOOST_IOS::out )
+        { sentry t(this); return delegate().seekoff(off, way, which); }
+    pos_type seekpos( pos_type sp,
+                      BOOST_IOS::openmode which =
+                          BOOST_IOS::in | BOOST_IOS::out )
+        { sentry t(this); return delegate().seekpos(sp, which); }
+protected:
+    typedef BOOST_IOSTREAMS_BASIC_STREAMBUF(
+                 typename Chain::char_type,
+                 typename Chain::traits_type
+             )                                               base_type;
+//#if !BOOST_WORKAROUND(__GNUC__, == 2)                                 
+//    BOOST_IOSTREAMS_USING_PROTECTED_STREAMBUF_MEMBERS(base_type)
+//#endif
+private:
+
+    // Translate from std int_type to chain's int_type.
+    typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type)           std_traits;
+    typedef typename Chain::traits_type                      chain_traits;
+    static typename chain_traits::int_type 
+    translate(typename std_traits::int_type c)
+        { return translate_int_type<std_traits, chain_traits>(c); }
+
+    delegate_type& delegate() 
+        { return static_cast<delegate_type&>(chain_.front()); }
+    void get_pointers()
+        {
+            this->setg(delegate().eback(), delegate().gptr(), delegate().egptr());
+            this->setp(delegate().pbase(), delegate().epptr());
+            this->pbump((int) (delegate().pptr() - delegate().pbase()));
+        }
+    void set_pointers()
+        {
+            delegate().setg(this->eback(), this->gptr(), this->egptr());
+            delegate().setp(this->pbase(), this->epptr());
+            delegate().pbump((int) (this->pptr() - this->pbase()));
+        }
+    struct sentry {
+        sentry(chainbuf<Chain, Mode, Access>* buf) : buf_(buf)
+            { buf_->set_pointers(); }
+        ~sentry() { buf_->get_pointers(); }
+        chainbuf<Chain, Mode, Access>* buf_;
+    };
+    friend struct sentry;
+    Chain chain_;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_CHAINBUF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/streambuf/direct_streambuf.hpp b/vendor/pdalboost/boost/iostreams/detail/streambuf/direct_streambuf.hpp
new file mode 100644
index 0000000..910e9f2
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/streambuf/direct_streambuf.hpp
@@ -0,0 +1,313 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_DIRECT_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_DIRECT_STREAMBUF_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <boost/assert.hpp>
+#include <cstddef>
+#include <typeinfo>
+#include <utility>                                 // pair.
+#include <boost/config.hpp>                        // BOOST_DEDUCED_TYPENAME, 
+#include <boost/iostreams/detail/char_traits.hpp>  // member template friends.
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/detail/execute.hpp>
+#include <boost/iostreams/detail/functional.hpp>
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/detail/optional.hpp>
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/streambuf/linked_streambuf.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/throw_exception.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace pdalboost { namespace iostreams { 
+    
+namespace detail {
+
+template< typename T,
+          typename Tr = 
+              BOOST_IOSTREAMS_CHAR_TRAITS(
+                 BOOST_DEDUCED_TYPENAME char_type_of<T>::type 
+              ) >
+class direct_streambuf 
+    : public linked_streambuf<BOOST_DEDUCED_TYPENAME char_type_of<T>::type, Tr>
+{
+public:
+    typedef typename char_type_of<T>::type                char_type;
+    BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+private:
+    typedef linked_streambuf<char_type, traits_type>      base_type;
+    typedef typename category_of<T>::type                 category;
+    typedef BOOST_IOSTREAMS_BASIC_STREAMBUF(
+                char_type, traits_type
+            )                                             streambuf_type;
+public: // stream needs access.
+    void open(const T& t, std::streamsize buffer_size, 
+              std::streamsize pback_size);
+    bool is_open() const;
+    void close();
+    bool auto_close() const { return auto_close_; }
+    void set_auto_close(bool close) { auto_close_ = close; }
+    bool strict_sync() { return true; }
+
+    // Declared in linked_streambuf.
+    T* component() { return storage_.get(); }
+protected:
+#if !BOOST_WORKAROUND(__GNUC__, == 2)
+    BOOST_IOSTREAMS_USING_PROTECTED_STREAMBUF_MEMBERS(base_type)
+#endif
+    direct_streambuf();
+
+    //--------------Virtual functions-----------------------------------------//
+
+    // Declared in linked_streambuf.
+    void close_impl(BOOST_IOS::openmode m);
+    const std::type_info& component_type() const { return typeid(T); }
+    void* component_impl() { return component(); } 
+#ifdef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+    public:
+#endif
+
+    // Declared in basic_streambuf.
+    int_type underflow();
+    int_type pbackfail(int_type c);
+    int_type overflow(int_type c);
+    pos_type seekoff( off_type off, BOOST_IOS::seekdir way,
+                      BOOST_IOS::openmode which );
+    pos_type seekpos(pos_type sp, BOOST_IOS::openmode which);
+private:
+    pos_type seek_impl( stream_offset off, BOOST_IOS::seekdir way,
+                        BOOST_IOS::openmode which );
+    void init_input(any_tag) { }
+    void init_input(input);
+    void init_output(any_tag) { }
+    void init_output(output);
+    void init_get_area();
+    void init_put_area();
+    bool one_head() const;
+    bool two_head() const;
+    optional<T>  storage_;
+    char_type   *ibeg_, *iend_, *obeg_, *oend_;
+    bool         auto_close_;
+};
+                    
+//------------------Implementation of direct_streambuf------------------------//
+
+template<typename T, typename Tr>
+direct_streambuf<T, Tr>::direct_streambuf() 
+    : ibeg_(0), iend_(0), obeg_(0), oend_(0), auto_close_(true) 
+{ this->set_true_eof(true); }
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::open
+    (const T& t, std::streamsize, std::streamsize)
+{
+    storage_.reset(t);
+    init_input(category());
+    init_output(category());
+    setg(0, 0, 0);
+    setp(0, 0);
+    this->set_needs_close();
+}
+
+template<typename T, typename Tr>
+bool direct_streambuf<T, Tr>::is_open() const 
+{ return ibeg_ != 0 || obeg_ != 0; }
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::close() 
+{ 
+    base_type* self = this;
+    detail::execute_all( detail::call_member_close(*self, BOOST_IOS::in),
+                         detail::call_member_close(*self, BOOST_IOS::out),
+                         detail::call_reset(storage_) );
+}
+
+template<typename T, typename Tr>
+typename direct_streambuf<T, Tr>::int_type 
+direct_streambuf<T, Tr>::underflow()
+{
+    if (!ibeg_) 
+        pdalboost::throw_exception(cant_read());
+    if (!gptr()) 
+        init_get_area();
+    return gptr() != iend_ ? 
+        traits_type::to_int_type(*gptr()) : 
+        traits_type::eof();
+}
+
+template<typename T, typename Tr>
+typename direct_streambuf<T, Tr>::int_type 
+direct_streambuf<T, Tr>::pbackfail(int_type c)
+{
+    using namespace std;
+    if (!ibeg_) 
+        pdalboost::throw_exception(cant_read());
+    if (gptr() != 0 && gptr() != ibeg_) {
+        gbump(-1);
+        if (!traits_type::eq_int_type(c, traits_type::eof()))
+            *gptr() = traits_type::to_char_type(c);
+        return traits_type::not_eof(c);
+    }
+    pdalboost::throw_exception(bad_putback());
+}
+
+template<typename T, typename Tr>
+typename direct_streambuf<T, Tr>::int_type 
+direct_streambuf<T, Tr>::overflow(int_type c)
+{
+    using namespace std;
+    if (!obeg_)
+        pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("no write access"));
+    if (!pptr()) init_put_area();
+    if (!traits_type::eq_int_type(c, traits_type::eof())) {
+        if (pptr() == oend_)
+            pdalboost::throw_exception(
+                BOOST_IOSTREAMS_FAILURE("write area exhausted")
+            );
+        *pptr() = traits_type::to_char_type(c);
+        pbump(1);
+        return c;
+    }
+    return traits_type::not_eof(c);
+}
+
+template<typename T, typename Tr>
+inline typename direct_streambuf<T, Tr>::pos_type
+direct_streambuf<T, Tr>::seekoff
+    (off_type off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{ return seek_impl(off, way, which); }
+
+template<typename T, typename Tr>
+inline typename direct_streambuf<T, Tr>::pos_type
+direct_streambuf<T, Tr>::seekpos
+    (pos_type sp, BOOST_IOS::openmode which)
+{ 
+    return seek_impl(position_to_offset(sp), BOOST_IOS::beg, which);
+}
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::close_impl(BOOST_IOS::openmode which)
+{
+    if (which == BOOST_IOS::in && ibeg_ != 0) {
+        setg(0, 0, 0);
+        ibeg_ = iend_ = 0;
+    }
+    if (which == BOOST_IOS::out && obeg_ != 0) {
+        sync();
+        setp(0, 0);
+        obeg_ = oend_ = 0;
+    }
+    pdalboost::iostreams::close(*storage_, which);
+}
+
+template<typename T, typename Tr>
+typename direct_streambuf<T, Tr>::pos_type direct_streambuf<T, Tr>::seek_impl
+    (stream_offset off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{
+    using namespace std;
+    BOOST_IOS::openmode both = BOOST_IOS::in | BOOST_IOS::out;
+    if (two_head() && (which & both) == both)
+        pdalboost::throw_exception(bad_seek());
+    stream_offset result = -1;
+    bool one = one_head();
+    if (one && (pptr() != 0 || gptr()== 0))
+        init_get_area(); // Switch to input mode, for code reuse.
+    if (one || ((which & BOOST_IOS::in) != 0 && ibeg_ != 0)) {
+        if (!gptr()) setg(ibeg_, ibeg_, iend_);
+        ptrdiff_t next = 0;
+        switch (way) {
+        case BOOST_IOS::beg: next = off; break;
+        case BOOST_IOS::cur: next = (gptr() - ibeg_) + off; break;
+        case BOOST_IOS::end: next = (iend_ - ibeg_) + off; break;
+        default: BOOST_ASSERT(0);
+        }
+        if (next < 0 || next > (iend_ - ibeg_))
+            pdalboost::throw_exception(bad_seek());
+        setg(ibeg_, ibeg_ + next, iend_);
+        result = next;
+    }
+    if (!one && (which & BOOST_IOS::out) != 0 && obeg_ != 0) {
+        if (!pptr()) setp(obeg_, oend_);
+        ptrdiff_t next = 0;
+        switch (way) {
+        case BOOST_IOS::beg: next = off; break;
+        case BOOST_IOS::cur: next = (pptr() - obeg_) + off; break;
+        case BOOST_IOS::end: next = (oend_ - obeg_) + off; break;
+        default: BOOST_ASSERT(0);
+        }
+        if (next < 0 || next > (oend_ - obeg_))
+            pdalboost::throw_exception(bad_seek());
+        pbump(static_cast<int>(next - (pptr() - obeg_)));
+        result = next;
+    }
+    return offset_to_position(result);
+}
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::init_input(input)
+{
+    std::pair<char_type*, char_type*> p = input_sequence(*storage_);
+    ibeg_ = p.first;
+    iend_ = p.second;
+}
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::init_output(output)
+{
+    std::pair<char_type*, char_type*> p = output_sequence(*storage_);
+    obeg_ = p.first;
+    oend_ = p.second;
+}
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::init_get_area()
+{
+    setg(ibeg_, ibeg_, iend_);
+    if (one_head() && pptr()) {
+        gbump(static_cast<int>(pptr() - obeg_));
+        setp(0, 0);
+    }
+}
+
+template<typename T, typename Tr>
+void direct_streambuf<T, Tr>::init_put_area()
+{
+    setp(obeg_, oend_);
+    if (one_head() && gptr()) {
+        pbump(static_cast<int>(gptr() - ibeg_));
+        setg(0, 0, 0);
+    }
+}
+
+template<typename T, typename Tr>
+inline bool direct_streambuf<T, Tr>::one_head() const
+{ return ibeg_ && obeg_ && ibeg_ == obeg_; }
+
+template<typename T, typename Tr>
+inline bool direct_streambuf<T, Tr>::two_head() const
+{ return ibeg_ && obeg_ && ibeg_ != obeg_; }
+
+//----------------------------------------------------------------------------//
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_DIRECT_STREAMBUF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/streambuf/indirect_streambuf.hpp b/vendor/pdalboost/boost/iostreams/detail/streambuf/indirect_streambuf.hpp
new file mode 100644
index 0000000..3265fb8
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/streambuf/indirect_streambuf.hpp
@@ -0,0 +1,432 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// This material is heavily indebted to the discussion and code samples in
+// A. Langer and K. Kreft, "Standard C++ IOStreams and Locales",
+// Addison-Wesley, 2000, pp. 228-43.
+
+// User "GMSB" provided an optimization for small seeks.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_INDIRECT_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_INDIRECT_STREAMBUF_HPP_INCLUDED
+
+#include <algorithm>                             // min, max.
+#include <cassert>
+#include <exception>
+#include <typeinfo>
+#include <boost/config.hpp>                      // Member template friends.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/constants.hpp>
+#include <boost/iostreams/detail/adapter/concept_adapter.hpp>
+#include <boost/iostreams/detail/buffer.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/double_object.hpp> 
+#include <boost/iostreams/detail/execute.hpp>
+#include <boost/iostreams/detail/functional.hpp>
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/detail/optional.hpp>
+#include <boost/iostreams/detail/push.hpp>
+#include <boost/iostreams/detail/streambuf/linked_streambuf.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>  // MSVC, BCC 5.x
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+//
+// Description: The implementation of basic_streambuf used by chains.
+//
+template<typename T, typename Tr, typename Alloc, typename Mode>
+class indirect_streambuf
+    : public linked_streambuf<BOOST_DEDUCED_TYPENAME char_type_of<T>::type, Tr>
+{
+public:
+    typedef typename char_type_of<T>::type                    char_type;
+    BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+private:
+    typedef typename category_of<T>::type                     category;
+    typedef concept_adapter<T>                                wrapper;
+    typedef detail::basic_buffer<char_type, Alloc>            buffer_type;
+    typedef indirect_streambuf<T, Tr, Alloc, Mode>            my_type;
+    typedef detail::linked_streambuf<char_type, traits_type>  base_type;
+    typedef linked_streambuf<char_type, Tr>                   streambuf_type;
+public:
+    indirect_streambuf();
+
+    void open(const T& t BOOST_IOSTREAMS_PUSH_PARAMS());
+    bool is_open() const;
+    void close();
+    bool auto_close() const;
+    void set_auto_close(bool close);
+    bool strict_sync();
+
+    // Declared in linked_streambuf.
+    T* component() { return &*obj(); }
+protected:
+#if !BOOST_WORKAROUND(__GNUC__, == 2)
+    BOOST_IOSTREAMS_USING_PROTECTED_STREAMBUF_MEMBERS(base_type)
+#endif
+
+    //----------virtual functions---------------------------------------------//
+
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+    void imbue(const std::locale& loc);
+#endif
+#ifdef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+    public:
+#endif
+    int_type underflow();
+    int_type pbackfail(int_type c);
+    int_type overflow(int_type c);
+    int sync();
+    pos_type seekoff( off_type off, BOOST_IOS::seekdir way,
+                      BOOST_IOS::openmode which );
+    pos_type seekpos(pos_type sp, BOOST_IOS::openmode which);
+
+    // Declared in linked_streambuf.
+    void set_next(streambuf_type* next);
+    void close_impl(BOOST_IOS::openmode m);
+    const std::type_info& component_type() const { return typeid(T); }
+    void* component_impl() { return component(); }
+private:
+
+    //----------Accessor functions--------------------------------------------//
+
+    wrapper& obj() { return *storage_; }
+    streambuf_type* next() const { return next_; }
+    buffer_type& in() { return buffer_.first(); }
+    buffer_type& out() { return buffer_.second(); }
+    bool can_read() const { return is_convertible<Mode, input>::value; }
+    bool can_write() const { return is_convertible<Mode, output>::value; }
+    bool output_buffered() const { return (flags_ & f_output_buffered) != 0; }
+    bool shared_buffer() const { return is_convertible<Mode, seekable>::value; }
+    void set_flags(int f) { flags_ = f; }
+
+    //----------State changing functions--------------------------------------//
+
+    virtual void init_get_area();
+    virtual void init_put_area();
+
+    //----------Utility function----------------------------------------------//
+
+    pos_type seek_impl( stream_offset off, BOOST_IOS::seekdir way,
+                        BOOST_IOS::openmode which );
+    void sync_impl();
+
+    enum flag_type {
+        f_open             = 1,
+        f_output_buffered  = f_open << 1,
+        f_auto_close       = f_output_buffered << 1
+    };
+
+    optional<wrapper>           storage_;
+    streambuf_type*             next_;
+    double_object<
+        buffer_type,
+        is_convertible<
+            Mode,
+            two_sequence
+        >
+    >                           buffer_;
+    std::streamsize             pback_size_;
+    int                         flags_;
+};
+
+//--------------Implementation of indirect_streambuf--------------------------//
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+indirect_streambuf<T, Tr, Alloc, Mode>::indirect_streambuf()
+    : next_(0), pback_size_(0), flags_(f_auto_close) { }
+
+//--------------Implementation of open, is_open and close---------------------//
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::open
+    (const T& t, std::streamsize buffer_size, std::streamsize pback_size)
+{
+    using namespace std;
+
+    // Normalize buffer sizes.
+    buffer_size =
+        (buffer_size != -1) ?
+        buffer_size :
+        iostreams::optimal_buffer_size(t);
+    pback_size =
+        (pback_size != -1) ?
+        pback_size :
+        default_pback_buffer_size;
+
+    // Construct input buffer.
+    if (can_read()) {
+        pback_size_ = (std::max)(std::streamsize(2), pback_size); // STLPort needs 2.
+        std::streamsize size =
+            pback_size_ +
+            ( buffer_size ? buffer_size: 1 );
+        in().resize(size);
+        if (!shared_buffer())
+            init_get_area();
+    }
+
+    // Construct output buffer.
+    if (can_write() && !shared_buffer()) {
+        if (buffer_size != 0)
+            out().resize(buffer_size);
+        init_put_area();
+    }
+
+    storage_.reset(wrapper(t));
+    flags_ |= f_open;
+    if (can_write() && buffer_size > 1)
+        flags_ |= f_output_buffered;
+    this->set_true_eof(false);
+    this->set_needs_close();
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline bool indirect_streambuf<T, Tr, Alloc, Mode>::is_open() const
+{ return (flags_ & f_open) != 0; }
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::close()
+{
+    using namespace std;
+    base_type* self = this;
+    detail::execute_all(
+        detail::call_member_close(*self, BOOST_IOS::in),
+        detail::call_member_close(*self, BOOST_IOS::out),
+        detail::call_reset(storage_),
+        detail::clear_flags(flags_)
+    );
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+bool indirect_streambuf<T, Tr, Alloc, Mode>::auto_close() const
+{ return (flags_ & f_auto_close) != 0; }
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::set_auto_close(bool close)
+{ flags_ = (flags_ & ~f_auto_close) | (close ? f_auto_close : 0); }
+
+//--------------Implementation virtual functions------------------------------//
+
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::imbue(const std::locale& loc)
+{
+    if (is_open()) {
+        obj().imbue(loc);
+        if (next_)
+            next_->pubimbue(loc);
+    }
+}
+#endif
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+typename indirect_streambuf<T, Tr, Alloc, Mode>::int_type
+indirect_streambuf<T, Tr, Alloc, Mode>::underflow()
+{
+    using namespace std;
+    if (!gptr()) init_get_area();
+    buffer_type& buf = in();
+    if (gptr() < egptr()) return traits_type::to_int_type(*gptr());
+
+    // Fill putback buffer.
+    std::streamsize keep = 
+        (std::min)( static_cast<std::streamsize>(gptr() - eback()),
+                    pback_size_ );
+    if (keep)
+        traits_type::move( buf.data() + (pback_size_ - keep),
+                           gptr() - keep, keep );
+
+    // Set pointers to reasonable values in case read throws.
+    setg( buf.data() + pback_size_ - keep,
+          buf.data() + pback_size_,
+          buf.data() + pback_size_ );
+
+    // Read from source.
+    std::streamsize chars =
+        obj().read(buf.data() + pback_size_, buf.size() - pback_size_, next_);
+    if (chars == -1) {
+        this->set_true_eof(true);
+        chars = 0;
+    }
+    setg(eback(), gptr(), buf.data() + pback_size_ + chars);
+    return chars != 0 ?
+        traits_type::to_int_type(*gptr()) :
+        traits_type::eof();
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+typename indirect_streambuf<T, Tr, Alloc, Mode>::int_type
+indirect_streambuf<T, Tr, Alloc, Mode>::pbackfail(int_type c)
+{
+    if (gptr() != eback()) {
+        gbump(-1);
+        if (!traits_type::eq_int_type(c, traits_type::eof()))
+            *gptr() = traits_type::to_char_type(c);
+        return traits_type::not_eof(c);
+    } else {
+        pdalboost::throw_exception(bad_putback());
+    }
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+typename indirect_streambuf<T, Tr, Alloc, Mode>::int_type
+indirect_streambuf<T, Tr, Alloc, Mode>::overflow(int_type c)
+{
+    if ( (output_buffered() && pptr() == 0) ||
+         (shared_buffer() && gptr() != 0) )
+    {
+        init_put_area();
+    }
+    if (!traits_type::eq_int_type(c, traits_type::eof())) {
+        if (output_buffered()) {
+            if (pptr() == epptr()) {
+                sync_impl();
+                if (pptr() == epptr())
+                    return traits_type::eof();
+            }
+            *pptr() = traits_type::to_char_type(c);
+            pbump(1);
+        } else {
+            char_type d = traits_type::to_char_type(c);
+            if (obj().write(&d, 1, next_) != 1)
+                return traits_type::eof();
+        }
+    }
+    return traits_type::not_eof(c);
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+int indirect_streambuf<T, Tr, Alloc, Mode>::sync()
+{
+    try { // sync() is no-throw.
+        sync_impl();
+        obj().flush(next_);
+        return 0;
+    } catch (...) { return -1; }
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+bool indirect_streambuf<T, Tr, Alloc, Mode>::strict_sync()
+{
+    try { // sync() is no-throw.
+        sync_impl();
+        return obj().flush(next_);
+    } catch (...) { return false; }
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline typename indirect_streambuf<T, Tr, Alloc, Mode>::pos_type
+indirect_streambuf<T, Tr, Alloc, Mode>::seekoff
+    (off_type off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{ return seek_impl(off, way, which); }
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline typename indirect_streambuf<T, Tr, Alloc, Mode>::pos_type
+indirect_streambuf<T, Tr, Alloc, Mode>::seekpos
+    (pos_type sp, BOOST_IOS::openmode which)
+{ 
+    return seek_impl(position_to_offset(sp), BOOST_IOS::beg, which); 
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+typename indirect_streambuf<T, Tr, Alloc, Mode>::pos_type
+indirect_streambuf<T, Tr, Alloc, Mode>::seek_impl
+    (stream_offset off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
+{
+    if ( gptr() != 0 && way == BOOST_IOS::cur && which == BOOST_IOS::in && 
+         eback() - gptr() <= off && off <= egptr() - gptr() ) 
+    {   // Small seek optimization
+        gbump(off);
+        return obj().seek(0, BOOST_IOS::cur, BOOST_IOS::in, next_) -
+               static_cast<off_type>(egptr() - gptr());
+    }
+    if (pptr() != 0) 
+        this->BOOST_IOSTREAMS_PUBSYNC(); // sync() confuses VisualAge 6.
+    if (way == BOOST_IOS::cur && gptr())
+        off -= static_cast<off_type>(egptr() - gptr());
+    setg(0, 0, 0);
+    setp(0, 0);
+    return obj().seek(off, way, which, next_);
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline void indirect_streambuf<T, Tr, Alloc, Mode>::set_next
+    (streambuf_type* next)
+{ next_ = next; }
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+inline void indirect_streambuf<T, Tr, Alloc, Mode>::close_impl
+    (BOOST_IOS::openmode which)
+{
+    if (which == BOOST_IOS::in && is_convertible<Mode, input>::value) {
+        setg(0, 0, 0);
+    }
+    if (which == BOOST_IOS::out && is_convertible<Mode, output>::value) {
+        sync();
+        setp(0, 0);
+    }
+    if ( !is_convertible<category, dual_use>::value ||
+         is_convertible<Mode, input>::value == (which == BOOST_IOS::in) )
+    {
+        obj().close(which, next_);
+    }
+}
+
+//----------State changing functions------------------------------------------//
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::sync_impl()
+{
+    std::streamsize avail, amt;
+    if ((avail = static_cast<std::streamsize>(pptr() - pbase())) > 0) {
+        if ((amt = obj().write(pbase(), avail, next())) == avail)
+            setp(out().begin(), out().end());
+        else {
+            const char_type* ptr = pptr();
+            setp(out().begin() + amt, out().end());
+            pbump(ptr - pptr());
+        }
+    }
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::init_get_area()
+{
+    if (shared_buffer() && pptr() != 0) {
+        sync_impl();
+        setp(0, 0);
+    }
+    setg(in().begin(), in().begin(), in().begin());
+}
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+void indirect_streambuf<T, Tr, Alloc, Mode>::init_put_area()
+{
+    using namespace std;
+    if (shared_buffer() && gptr() != 0)
+        setg(0, 0, 0);
+    if (output_buffered())
+        setp(out().begin(), out().end());
+    else
+        setp(0, 0);
+}
+
+//----------------------------------------------------------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC, BCC 5.x
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_INDIRECT_STREAMBUF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/streambuf/linked_streambuf.hpp b/vendor/pdalboost/boost/iostreams/detail/streambuf/linked_streambuf.hpp
new file mode 100644
index 0000000..22a4362
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/streambuf/linked_streambuf.hpp
@@ -0,0 +1,114 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_LINKED_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_LINKED_STREAMBUF_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <typeinfo>
+#include <boost/config.hpp>                        // member template friends.
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp>          // openmode.
+#include <boost/iostreams/detail/streambuf.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // MSVC.
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<typename Self, typename Ch, typename Tr, typename Alloc, typename Mode>
+class chain_base;
+
+template<typename Chain, typename Access, typename Mode> class chainbuf;
+
+#define BOOST_IOSTREAMS_USING_PROTECTED_STREAMBUF_MEMBERS(base) \
+    using base::eback; using base::gptr; using base::egptr; \
+    using base::setg; using base::gbump; using base::pbase; \
+    using base::pptr; using base::epptr; using base::setp; \
+    using base::pbump; using base::underflow; using base::pbackfail; \
+    using base::xsgetn; using base::overflow; using base::xsputn; \
+    using base::sync; using base::seekoff; using base::seekpos; \
+    /**/
+
+template<typename Ch, typename Tr = BOOST_IOSTREAMS_CHAR_TRAITS(Ch) >
+class linked_streambuf : public BOOST_IOSTREAMS_BASIC_STREAMBUF(Ch, Tr) {
+protected:
+    linked_streambuf() : flags_(0) { }
+    void set_true_eof(bool eof) 
+    { 
+        flags_ = (flags_ & ~f_true_eof) | (eof ? f_true_eof : 0); 
+    }
+public:
+
+    // Should be called only after receiving an ordinary EOF indication,
+    // to confirm that it represents EOF rather than WOULD_BLOCK.
+    bool true_eof() const { return (flags_ & f_true_eof) != 0; }
+protected:
+
+    //----------grant friendship to chain_base and chainbuf-------------------//
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+    template< typename Self, typename ChT, typename TrT,
+              typename Alloc, typename Mode >
+    friend class chain_base;
+    template<typename Chain, typename Mode, typename Access>
+    friend class chainbuf;
+    template<typename U>
+    friend class member_close_operation; 
+#else
+    public:
+        typedef BOOST_IOSTREAMS_BASIC_STREAMBUF(Ch, Tr) base;
+        BOOST_IOSTREAMS_USING_PROTECTED_STREAMBUF_MEMBERS(base)
+#endif
+    void close(BOOST_IOS::openmode which)
+    {
+        if ( which == BOOST_IOS::in && 
+            (flags_ & f_input_closed) == 0 )
+        {
+            flags_ |= f_input_closed;
+            close_impl(which);
+        }
+        if ( which == BOOST_IOS::out && 
+            (flags_ & f_output_closed) == 0 )
+        {
+            flags_ |= f_output_closed;
+            close_impl(which);
+        }
+    }
+    void set_needs_close()
+    {
+        flags_ &= ~(f_input_closed | f_output_closed);
+    }
+    virtual void set_next(linked_streambuf<Ch, Tr>* /* next */) { }
+    virtual void close_impl(BOOST_IOS::openmode) = 0;
+    virtual bool auto_close() const = 0;
+    virtual void set_auto_close(bool) = 0;
+    virtual bool strict_sync() = 0;
+    virtual const std::type_info& component_type() const = 0;
+    virtual void* component_impl() = 0;
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+    private:
+#else
+    public:
+#endif
+private:
+    enum flag_type {
+        f_true_eof       = 1,
+        f_input_closed   = f_true_eof << 1,
+        f_output_closed  = f_input_closed << 1
+    };
+    int flags_;
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_LINKED_STREAMBUF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/system_failure.hpp b/vendor/pdalboost/boost/iostreams/detail/system_failure.hpp
new file mode 100644
index 0000000..9b4e3b7
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/system_failure.hpp
@@ -0,0 +1,84 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// (C) Copyright Jonathan Graehl 2004.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Used by mapped_file.cpp.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_SYSTEM_FAILURE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_SYSTEM_FAILURE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <cstring>
+#include <string>
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+#include <boost/iostreams/detail/ios.hpp>  // failure.
+
+#if defined(BOOST_NO_STDC_NAMESPACE) && !defined(__LIBCOMO__)
+namespace std { using ::strlen; }
+#endif
+
+#ifdef BOOST_IOSTREAMS_WINDOWS
+# define WIN32_LEAN_AND_MEAN  // Exclude rarely-used stuff from Windows headers
+# include <windows.h>
+#else
+# include <errno.h>
+# include <string.h>
+#endif
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+inline BOOST_IOSTREAMS_FAILURE system_failure(const char* msg)
+{
+    std::string result;
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    DWORD err;
+    LPVOID lpMsgBuf;
+    if ( (err = ::GetLastError()) != NO_ERROR &&
+         ::FormatMessageA( FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                           FORMAT_MESSAGE_FROM_SYSTEM,
+                           NULL,
+                           err,
+                           MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+                           (LPSTR) &lpMsgBuf,
+                           0,
+                           NULL ) != 0 )
+    {
+        result.reserve(std::strlen(msg) + 2 + std::strlen((LPSTR)lpMsgBuf));
+        result.append(msg);
+        result.append(": ");
+        result.append((LPSTR) lpMsgBuf);
+        ::LocalFree(lpMsgBuf);
+    } else {
+        result += msg;
+    }
+#else
+    const char* system_msg = errno ? strerror(errno) : "";
+    result.reserve(std::strlen(msg) + 2 + std::strlen(system_msg));
+    result.append(msg);
+    result.append(": ");
+    result.append(system_msg);
+#endif
+    return BOOST_IOSTREAMS_FAILURE(result);
+}
+
+inline BOOST_IOSTREAMS_FAILURE system_failure(const std::string& msg)
+{ return system_failure(msg.c_str()); }
+
+inline void throw_system_failure(const char* msg)
+{ pdalboost::throw_exception(system_failure(msg)); }
+
+inline void throw_system_failure(const std::string& msg)
+{ pdalboost::throw_exception(system_failure(msg)); }
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_SYSTEM_FAILURE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/template_params.hpp b/vendor/pdalboost/boost/iostreams/detail/template_params.hpp
new file mode 100644
index 0000000..b07012f
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/template_params.hpp
@@ -0,0 +1,26 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_TEMPLATE_PARAMS_HPP_INCLUDED
+
+#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+
+#define BOOST_IOSTREAMS_TEMPLATE_PARAMS(arity, param) \
+    BOOST_PP_EXPR_IF(arity, template<) \
+    BOOST_PP_ENUM_PARAMS(arity, typename param) \
+    BOOST_PP_EXPR_IF(arity, >) \
+    /**/
+
+#define BOOST_IOSTREAMS_TEMPLATE_ARGS(arity, param) \
+    BOOST_PP_EXPR_IF(arity, <) \
+    BOOST_PP_ENUM_PARAMS(arity, param) \
+    BOOST_PP_EXPR_IF(arity, >) \
+    /**/
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_BUFFERS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/translate_int_type.hpp b/vendor/pdalboost/boost/iostreams/detail/translate_int_type.hpp
new file mode 100644
index 0000000..b01014d
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/translate_int_type.hpp
@@ -0,0 +1,62 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_TRANSLATE_INT_TYPE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_TRANSLATE_INT_TYPE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<bool IsSame>
+struct translate_int_type_impl;
+
+//
+// Template name: translate_char.
+// Description: Translates a character or an end-of-file indicator from the 
+//      int_type of one character traits type to the int_type of another.
+//
+template<typename SourceTr, typename TargetTr>
+typename TargetTr::int_type 
+translate_int_type(typename SourceTr::int_type c) 
+{ 
+    typedef translate_int_type_impl<is_same<SourceTr, TargetTr>::value> impl;
+    return impl::template inner<SourceTr, TargetTr>::translate(c);
+}
+
+//----------------------------------------------------------------------------//
+
+template<>
+struct translate_int_type_impl<true> {
+    template<typename SourceTr, typename TargetTr>
+    struct inner {
+        static typename TargetTr::int_type 
+        translate(typename SourceTr::int_type c) { return c; }
+    };
+};
+
+template<>
+struct translate_int_type_impl<false> {
+    template<typename SourceTr, typename TargetTr>
+    struct inner {
+        static typename TargetTr::int_type 
+        translate(typename SourceTr::int_type c)
+            { 
+                return SourceTr::eq_int_type(SourceTr::eof()) ?
+                           TargetTr::eof() :
+                           TargetTr::to_int_type(SourceTr::to_char_type(c));
+            }
+    };
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_TRANSLATE_INT_TYPE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/detail/vc6/close.hpp b/vendor/pdalboost/boost/iostreams/detail/vc6/close.hpp
new file mode 100644
index 0000000..8beb116
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/vc6/close.hpp
@@ -0,0 +1,129 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct close_impl;
+
+} // End namespace detail.
+
+template<typename T>
+void close(T& t) { detail::close_all(t); }
+
+template<typename T>
+void close(T& t, BOOST_IOS::openmode which)
+{
+    typedef typename detail::unwrapped_type<T>::type unwrapped;
+    detail::close_impl<T>::inner<unwrapped>::close(detail::unwrap(t), which);
+}
+
+template<typename T, typename Sink>
+void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+{
+    typedef typename detail::unwrapped_type<T>::type unwrapped;
+    detail::close_impl<T>::inner<unwrapped>::close(detail::unwrap(t), snk, which);
+}
+
+namespace detail {
+
+//------------------Definition of close_impl----------------------------------//
+
+template<typename T>
+struct close_tag {
+    typedef typename category_of<T>::type category;
+    typedef typename
+            mpl::eval_if<
+                is_convertible<category, closable_tag>,
+                mpl::if_<
+                    mpl::or_<
+                        is_convertible<category, two_sequence>,
+                        is_convertible<category, dual_use>
+                    >,
+                    two_sequence,
+                    closable_tag
+                >,
+                mpl::identity<any_tag>
+            >::type type;
+};
+
+template<typename T>
+struct close_impl
+    : mpl::if_<
+          is_custom<T>,
+          operations<T>,
+          close_impl<BOOST_DEDUCED_TYPENAME close_tag<T>::type>
+      >::type
+    { };
+
+template<>
+struct close_impl<any_tag> {
+    template<typename T>
+    struct inner {
+        static void close(T& t, BOOST_IOS::openmode which)
+        {
+            if (which == BOOST_IOS::out)
+                iostreams::flush(t);
+        }
+
+        template<typename Sink>
+        static void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+        {
+            if (which == BOOST_IOS::out) {
+                non_blocking_adapter<Sink> nb(snk);
+                iostreams::flush(t, nb);
+            }
+        }
+    };
+};
+
+template<>
+struct close_impl<closable_tag> {
+    template<typename T>
+    struct inner {
+        static void close(T& t, BOOST_IOS::openmode which)
+        {
+            typedef typename category_of<T>::type category;
+            const bool in =  is_convertible<category, input>::value &&
+                            !is_convertible<category, output>::value;
+            if (in == (which == BOOST_IOS::in))
+                t.close();
+        }
+        template<typename Sink>
+        static void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+        {
+            typedef typename category_of<T>::type category;
+            const bool in =  is_convertible<category, input>::value &&
+                            !is_convertible<category, output>::value;
+            if (in == (which == BOOST_IOS::in)) {
+                non_blocking_adapter<Sink> nb(snk);
+                t.close(nb);
+            }
+        }
+    };
+};
+
+template<>
+struct close_impl<two_sequence> {
+    template<typename T>
+    struct inner {
+        static void close(T& t, BOOST_IOS::openmode which) { t.close(which); }
+
+        template<typename Sink>
+        static void close(T& t, Sink& snk, BOOST_IOS::openmode which)
+        {
+            non_blocking_adapter<Sink> nb(snk);
+            t.close(nb, which);
+        }
+    };
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
diff --git a/vendor/pdalboost/boost/iostreams/detail/vc6/read.hpp b/vendor/pdalboost/boost/iostreams/detail/vc6/read.hpp
new file mode 100644
index 0000000..5e8d3b7
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/vc6/read.hpp
@@ -0,0 +1,238 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+template<typename T> 
+struct read_device_impl;
+
+template<typename T> 
+struct read_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+typename int_type_of<T>::type get(T& t)
+{
+    typedef typename detail::unwrapped_type<T>::type unwrapped;
+    return detail::read_device_impl<T>::inner<unwrapped>::get(detail::unwrap(t));
+}
+
+template<typename T>
+inline std::streamsize
+read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+{
+    typedef typename detail::unwrapped_type<T>::type unwrapped;
+    return detail::read_device_impl<T>::inner<unwrapped>::read(detail::unwrap(t), s, n);
+}
+
+template<typename T, typename Source>
+std::streamsize
+read(T& t, Source& src, typename char_type_of<T>::type* s, std::streamsize n)
+{
+    typedef typename detail::unwrapped_type<T>::type unwrapped;
+    return detail::read_filter_impl<T>::inner<unwrapped>::read(detail::unwrap(t), src, s, n);
+}
+
+template<typename T>
+bool putback(T& t, typename char_type_of<T>::type c)
+{
+    typedef typename detail::unwrapped_type<T>::type unwrapped;
+    return detail::read_device_impl<T>::inner<unwrapped>::putback(detail::unwrap(t), c);
+}
+
+//----------------------------------------------------------------------------//
+
+namespace detail {
+
+// Helper function for adding -1 as EOF indicator.
+inline std::streamsize check_eof(std::streamsize n) { return n != 0 ? n : -1; }
+
+// Helper templates for reading from streambufs.
+template<bool IsLinked>
+struct true_eof_impl;
+
+template<>
+struct true_eof_impl<true> {
+    template<typename T>
+    static bool true_eof(T& t) { return t.true_eof(); }
+};
+
+template<>
+struct true_eof_impl<false> {
+    template<typename T>
+    static bool true_eof(T& t) { return true; }
+};
+
+template<typename T>
+inline bool true_eof(T& t)
+{
+    const bool linked = is_linked<T>::value;
+    return true_eof_impl<linked>::true_eof(t);
+}
+                    
+//------------------Definition of read_device_impl----------------------------//
+
+template<typename T>
+struct read_device_impl
+    : mpl::if_<
+          detail::is_custom<T>,
+          operations<T>,
+          read_device_impl<
+              BOOST_DEDUCED_TYPENAME
+              detail::dispatch<
+                  T, istream_tag, streambuf_tag, input
+              >::type
+          >
+      >::type
+    { };
+
+template<>
+struct read_device_impl<istream_tag> {
+    template<typename T>
+    struct inner {
+        static typename int_type_of<T>::type get(T& t)
+        { return t.get(); }
+
+        static std::streamsize
+        read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+        { return check_eof(t.rdbuf()->sgetn(s, n)); }
+
+        static bool putback(T& t, typename char_type_of<T>::type c)
+        {
+            typedef typename char_type_of<T>::type          char_type;
+            typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type)  traits_type;
+            return !traits_type::eq_int_type( t.rdbuf()->sputbackc(c),
+                                              traits_type::eof() );
+        }
+    };
+};
+
+template<>
+struct read_device_impl<streambuf_tag> {
+    template<typename T>
+    struct inner {
+        static typename int_type_of<T>::type
+        get(T& t)
+        {
+            typedef typename char_type_of<T>::type  char_type;
+            typedef char_traits<char_type>          traits_type;
+            typename int_type_of<T>::type c;
+            return !traits_type::is_eof(c = t.sbumpc()) ||
+                    detail::true_eof(t)
+                        ?
+                    c : traits_type::would_block();
+        }
+
+        static std::streamsize
+        read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+        {
+            std::streamsize amt;
+            return (amt = t.sgetn(s, n)) != 0 ?
+                amt :
+                detail::true_eof(t) ?
+                    -1 :
+                    0;
+        }
+
+        static bool putback(T& t, typename char_type_of<T>::type c)
+        {
+            typedef typename char_type_of<T>::type  char_type;
+            typedef char_traits<char_type>          traits_type;
+            return !traits_type::is_eof(t.sputbackc(c));
+        }
+    };
+};
+
+template<>
+struct read_device_impl<input> {
+    template<typename T>
+    struct inner {
+        static typename int_type_of<T>::type
+        get(T& t)
+        {
+            typedef typename char_type_of<T>::type  char_type;
+            typedef char_traits<char_type>          traits_type;
+            char_type c;
+            std::streamsize amt;
+            return (amt = t.read(&c, 1)) == 1 ?
+                traits_type::to_int_type(c) :
+                amt == -1 ?
+                    traits_type::eof() :
+                    traits_type::would_block();
+        }
+
+        template<typename T>
+        static std::streamsize
+        read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+        { return t.read(s, n); }
+
+        template<typename T>
+        static bool putback(T& t, typename char_type_of<T>::type c)
+        {   // T must be Peekable.
+            return t.putback(c);
+        }
+    };
+};
+
+//------------------Definition of read_filter_impl----------------------------//
+
+template<typename T>
+struct read_filter_impl
+    : mpl::if_<
+          detail::is_custom<T>,
+          operations<T>,
+          read_filter_impl<
+              BOOST_DEDUCED_TYPENAME
+              detail::dispatch<
+                  T, multichar_tag, any_tag
+              >::type
+          >
+      >::type
+    { };
+
+template<>
+struct read_filter_impl<multichar_tag> {
+    template<typename T>
+    struct inner {
+        template<typename Source>
+        static std::streamsize read
+            ( T& t, Source& src, typename char_type_of<T>::type* s,   
+              std::streamsize n )
+        { return t.read(src, s, n); }
+    };
+};
+
+template<>
+struct read_filter_impl<any_tag> {
+    template<typename T>
+    struct inner {
+        template<typename Source>
+        static std::streamsize read
+            ( T& t, Source& src, typename char_type_of<T>::type* s, 
+              std::streamsize n )
+        {
+            typedef typename char_type_of<T>::type  char_type;
+            typedef char_traits<char_type>          traits_type;
+            for (std::streamsize off = 0; off < n; ++off) {
+                typename traits_type::int_type c = t.get(src);
+                if (traits_type::is_eof(c))
+                    return check_eof(off);
+                if (traits_type::would_block(c))
+                    return off;
+                s[off] = traits_type::to_char_type(c);
+            }
+            return n;
+        }
+    };
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
diff --git a/vendor/pdalboost/boost/iostreams/detail/vc6/write.hpp b/vendor/pdalboost/boost/iostreams/detail/vc6/write.hpp
new file mode 100644
index 0000000..a4ace42
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/vc6/write.hpp
@@ -0,0 +1,159 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+template<typename T> 
+struct write_device_impl;
+
+template<typename T> 
+struct write_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+bool put(T& t, typename char_type_of<T>::type c)
+{
+    typedef typename detail::unwrapped_type<T>::type unwrapped;
+    return detail::write_device_impl<T>::inner<unwrapped>::put(detail::unwrap(t), c);
+}
+
+template<typename T>
+inline std::streamsize write
+    (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+{
+    typedef typename detail::unwrapped_type<T>::type unwrapped;
+    return detail::write_device_impl<T>::inner<unwrapped>::write(detail::unwrap(t), s, n);
+}
+
+template<typename T, typename Sink>
+inline std::streamsize
+write( T& t, Sink& snk, const typename char_type_of<T>::type* s, 
+       std::streamsize n )
+{
+    typedef typename detail::unwrapped_type<T>::type unwrapped;
+    return detail::write_filter_impl<T>::inner<unwrapped>::write(detail::unwrap(t), snk, s, n);
+}
+
+namespace detail {
+
+//------------------Definition of write_device_impl---------------------------//
+
+template<typename T>
+struct write_device_impl
+    : mpl::if_<
+          is_custom<T>,
+          operations<T>,
+          write_device_impl<
+              BOOST_DEDUCED_TYPENAME
+              dispatch<
+                  T, ostream_tag, streambuf_tag, output
+              >::type
+          >
+      >::type
+    { };
+
+template<>
+struct write_device_impl<ostream_tag> {
+    template<typename T>
+    struct inner {
+        static bool put(T& t, typename char_type_of<T>::type c)
+        {
+            typedef typename char_type_of<T>::type          char_type;
+            typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type)  traits_type;
+            return !traits_type::eq_int_type( t.rdbuf()->s.sputc(),
+                                            traits_type::eof() );
+        }
+
+        static std::streamsize write
+            (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+        { return t.rdbuf()->sputn(s, n); }
+    };
+};
+
+template<>
+struct write_device_impl<streambuf_tag> {
+    template<typename T>
+    struct inner {
+        static bool put(T& t, typename char_type_of<T>::type c)
+        {
+            typedef typename char_type_of<T>::type          char_type;
+            typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type)  traits_type;
+            return !traits_type::eq_int_type(t.sputc(c), traits_type::eof());
+        }
+
+        template<typename T>
+        static std::streamsize write
+            (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+        { return t.sputn(s, n); }
+    };
+};
+
+template<>
+struct write_device_impl<output> {
+    template<typename T>
+    struct inner {
+        static bool put(T& t, typename char_type_of<T>::type c)
+        { return t.write(&c, 1) == 1; }
+
+        template<typename T>
+        static std::streamsize
+        write(T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+        { return t.write(s, n); }
+    };
+};
+
+//------------------Definition of write_filter_impl---------------------------//
+
+template<typename T>
+struct write_filter_impl
+    : mpl::if_<
+          is_custom<T>,
+          operations<T>,
+          write_filter_impl<
+              BOOST_DEDUCED_TYPENAME
+              dispatch<
+                  T, multichar_tag, any_tag
+              >::type
+          >
+      >::type
+    { };
+
+template<>
+struct write_filter_impl<multichar_tag> {
+    template<typename T>
+    struct inner {
+        template<typename Sink>
+        static std::streamsize
+        write( T& t, Sink& snk, const typename char_type_of<T>::type* s,
+               std::streamsize n )
+        { return t.write(snk, s, n); }
+    };
+};
+
+template<>
+struct write_filter_impl<any_tag> {
+    template<typename T>
+    struct inner {
+        template<typename Sink>
+        static std::streamsize
+        write( T& t, Sink& snk, const typename char_type_of<T>::type* s,
+               std::streamsize n )
+        {
+            for (std::streamsize off = 0; off < n; ++off)
+                if (!t.put(snk, s[off]))
+                    return off;
+            return n;
+        }
+    };
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
diff --git a/vendor/pdalboost/boost/iostreams/detail/wrap_unwrap.hpp b/vendor/pdalboost/boost/iostreams/detail/wrap_unwrap.hpp
new file mode 100644
index 0000000..80f1b69
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/detail/wrap_unwrap.hpp
@@ -0,0 +1,127 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DETAIL_WRAP_UNWRAP_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DETAIL_WRAP_UNWRAP_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <boost/config.hpp>                             // SFINAE, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/enable_if_stream.hpp>
+#include <boost/iostreams/traits_fwd.hpp>               // is_std_io.
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/ref.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+                    
+//------------------Definition of wrap/unwrap traits--------------------------//
+
+template<typename T>
+struct wrapped_type 
+    : mpl::if_<is_std_io<T>, reference_wrapper<T>, T>
+    { };
+
+template<typename T>
+struct unwrapped_type 
+    : unwrap_reference<T>
+    { };
+
+template<typename T>
+struct unwrap_ios 
+    : mpl::eval_if<
+          is_std_io<T>, 
+          unwrap_reference<T>, 
+          mpl::identity<T>
+      >
+    { };
+
+//------------------Definition of wrap----------------------------------------//
+
+#ifndef BOOST_NO_SFINAE //----------------------------------------------------//
+    template<typename T>
+    inline T wrap(const T& t BOOST_IOSTREAMS_DISABLE_IF_STREAM(T)) 
+    { return t; }
+
+    template<typename T>
+    inline typename wrapped_type<T>::type
+    wrap(T& t BOOST_IOSTREAMS_ENABLE_IF_STREAM(T)) { return pdalboost::ref(t); }
+#else // #ifndef BOOST_NO_SFINAE //-------------------------------------------//
+    template<typename T>
+    inline typename wrapped_type<T>::type // BCC 5.x needs namespace qualification.
+    wrap_impl(const T& t, mpl::true_) { return pdalboost::ref(const_cast<T&>(t)); }
+
+    template<typename T>
+    inline typename wrapped_type<T>::type // BCC 5.x needs namespace qualification.
+    wrap_impl(T& t, mpl::true_) { return pdalboost::ref(t); }
+
+    template<typename T>
+    inline typename wrapped_type<T>::type 
+    wrap_impl(const T& t, mpl::false_) { return t; }
+
+    template<typename T>
+    inline typename wrapped_type<T>::type 
+    wrap_impl(T& t, mpl::false_) { return t; }
+
+    template<typename T>
+    inline typename wrapped_type<T>::type 
+    wrap(const T& t) { return wrap_impl(t, is_std_io<T>()); }
+
+    template<typename T>
+    inline typename wrapped_type<T>::type 
+    wrap(T& t) { return wrap_impl(t, is_std_io<T>()); }
+#endif // #ifndef BOOST_NO_SFINAE //------------------------------------------//
+
+//------------------Definition of unwrap--------------------------------------//
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310) //----------------------------------//
+
+template<typename T>
+typename unwrapped_type<T>::type& 
+unwrap(const reference_wrapper<T>& ref) { return ref.get(); }
+
+template<typename T>
+typename unwrapped_type<T>::type& unwrap(T& t) { return t; }
+
+template<typename T>
+const typename unwrapped_type<T>::type& unwrap(const T& t) { return t; }
+
+#else // #if !BOOST_WORKAROUND(BOOST_MSVC, < 1310) //-------------------------//
+
+// Since unwrap is a potential bottleneck, we avoid runtime tag dispatch.
+template<bool IsRefWrap>
+struct unwrap_impl;
+
+template<>
+struct unwrap_impl<true> {
+    template<typename T>
+    static typename unwrapped_type<T>::type& unwrap(const T& t) 
+    { return t.get(); }
+};
+
+template<>
+struct unwrap_impl<false> {
+    template<typename T>
+    static typename unwrapped_type<T>::type& unwrap(const T& t) 
+    { return const_cast<T&>(t); }
+};
+
+template<typename T>
+typename unwrapped_type<T>::type& 
+unwrap(const T& t) 
+{ return unwrap_impl<is_reference_wrapper<T>::value>::unwrap(t); }
+
+#endif // #if !BOOST_WORKAROUND(BOOST_MSVC, < 1310) //------------------------//
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_DETAIL_WRAP_UNWRAP_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/device/array.hpp b/vendor/pdalboost/boost/iostreams/device/array.hpp
new file mode 100644
index 0000000..8b91d2e
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/device/array.hpp
@@ -0,0 +1,144 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_ARRAY_HPP_INCLUDED
+#define BOOST_IOSTREAMS_ARRAY_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>         // BOOST_MSVC, make sure size_t is in std.
+#include <boost/detail/workaround.hpp>
+#include <cstddef>                  // std::size_t.
+#include <utility>                  // pair.
+#include <boost/iostreams/categories.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+template<typename Mode, typename Ch>
+class array_adapter {
+public:
+    typedef Ch                                 char_type;
+    typedef std::pair<char_type*, char_type*>  pair_type;
+    struct category
+        : public Mode,
+          public device_tag,
+          public direct_tag
+        { };
+    array_adapter(char_type* begin, char_type* end);
+    array_adapter(char_type* begin, std::size_t length);
+    array_adapter(const char_type* begin, const char_type* end);
+    array_adapter(const char_type* begin, std::size_t length);
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    template<int N>
+    array_adapter(char_type (&ar)[N])
+        : begin_(ar), end_(ar + N) 
+        { }
+#endif
+    pair_type input_sequence();
+    pair_type output_sequence();
+private:
+    char_type* begin_;
+    char_type* end_;
+};
+
+} // End namespace detail.
+
+// Local macros, #undef'd below.
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# define BOOST_IOSTREAMS_ARRAY_CTOR(name, ch) \
+    template<int N> \
+    BOOST_PP_CAT(basic_, name)(ch (&ar)[N]) \
+        : base_type(ar) { } \
+    /**/
+#else
+# define BOOST_IOSTREAMS_ARRAY_CTOR(name, ch)
+#endif
+#define BOOST_IOSTREAMS_ARRAY(name, mode) \
+    template<typename Ch> \
+    struct BOOST_PP_CAT(basic_, name) : detail::array_adapter<mode, Ch> { \
+    private: \
+        typedef detail::array_adapter<mode, Ch>  base_type; \
+    public: \
+        typedef typename base_type::char_type    char_type; \
+        typedef typename base_type::category     category; \
+        BOOST_PP_CAT(basic_, name)(char_type* begin, char_type* end) \
+            : base_type(begin, end) { } \
+        BOOST_PP_CAT(basic_, name)(char_type* begin, std::size_t length) \
+            : base_type(begin, length) { } \
+        BOOST_PP_CAT(basic_, name)(const char_type* begin, const char_type* end) \
+            : base_type(begin, end) { } \
+        BOOST_PP_CAT(basic_, name)(const char_type* begin, std::size_t length) \
+            : base_type(begin, length) { } \
+        BOOST_IOSTREAMS_ARRAY_CTOR(name, Ch) \
+    }; \
+    typedef BOOST_PP_CAT(basic_, name)<char>     name; \
+    typedef BOOST_PP_CAT(basic_, name)<wchar_t>  BOOST_PP_CAT(w, name); \
+    /**/
+BOOST_IOSTREAMS_ARRAY(array_source, input_seekable)
+BOOST_IOSTREAMS_ARRAY(array_sink, output_seekable)
+BOOST_IOSTREAMS_ARRAY(array, seekable)
+#undef BOOST_IOSTREAMS_ARRAY_CTOR
+#undef BOOST_IOSTREAMS_ARRAY
+
+
+//------------------Implementation of array_adapter---------------------------//
+
+namespace detail {
+
+template<typename Mode, typename Ch>
+array_adapter<Mode, Ch>::array_adapter
+    (char_type* begin, char_type* end) 
+    : begin_(begin), end_(end) 
+    { }
+
+template<typename Mode, typename Ch>
+array_adapter<Mode, Ch>::array_adapter
+    (char_type* begin, std::size_t length) 
+    : begin_(begin), end_(begin + length) 
+    { }
+
+template<typename Mode, typename Ch>
+array_adapter<Mode, Ch>::array_adapter
+    (const char_type* begin, const char_type* end) 
+    : begin_(const_cast<char_type*>(begin)),  // Treated as read-only.
+      end_(const_cast<char_type*>(end))       // Treated as read-only.
+{ BOOST_STATIC_ASSERT((!is_convertible<Mode, output>::value)); }
+
+template<typename Mode, typename Ch>
+array_adapter<Mode, Ch>::array_adapter
+    (const char_type* begin, std::size_t length) 
+    : begin_(const_cast<char_type*>(begin)),       // Treated as read-only.
+      end_(const_cast<char_type*>(begin) + length) // Treated as read-only.
+{ BOOST_STATIC_ASSERT((!is_convertible<Mode, output>::value)); }
+
+template<typename Mode, typename Ch>
+typename array_adapter<Mode, Ch>::pair_type
+array_adapter<Mode, Ch>::input_sequence()
+{ BOOST_STATIC_ASSERT((is_convertible<Mode, input>::value));
+  return pair_type(begin_, end_); }
+
+template<typename Mode, typename Ch>
+typename array_adapter<Mode, Ch>::pair_type
+array_adapter<Mode, Ch>::output_sequence()
+{ BOOST_STATIC_ASSERT((is_convertible<Mode, output>::value));
+  return pair_type(begin_, end_); }
+
+} // End namespace detail.
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_ARRAY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/device/back_inserter.hpp b/vendor/pdalboost/boost/iostreams/device/back_inserter.hpp
new file mode 100644
index 0000000..e92e4ea
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/device/back_inserter.hpp
@@ -0,0 +1,41 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_BACK_INSERTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_BACK_INSERTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/ios.hpp> // streamsize.
+#include <boost/iostreams/categories.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+template<typename Container>
+class back_insert_device {
+public:
+    typedef typename Container::value_type  char_type;
+    typedef sink_tag                        category;
+    back_insert_device(Container& cnt) : container(&cnt) { }
+    std::streamsize write(const char_type* s, std::streamsize n)
+    { 
+        container->insert(container->end(), s, s + n); 
+        return n;
+    }
+protected:
+    Container* container;
+};
+
+template<typename Container>
+back_insert_device<Container> back_inserter(Container& cnt)
+{ return back_insert_device<Container>(cnt); }
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_BACK_INSERTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/device/file.hpp b/vendor/pdalboost/boost/iostreams/device/file.hpp
new file mode 100644
index 0000000..9b939aa
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/device/file.hpp
@@ -0,0 +1,191 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_FILE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FILE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+# include <locale>
+#endif
+#include <string>                               // pathnames, char_traits.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/ios.hpp>       // openmode, seekdir, int types.
+#include <boost/iostreams/detail/fstream.hpp>
+#include <boost/iostreams/operations.hpp>       // seek.
+#include <boost/shared_ptr.hpp>      
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>  // MSVC.
+
+namespace pdalboost { namespace iostreams {
+
+template<typename Ch>
+class basic_file {
+public:
+    typedef Ch char_type;
+    struct category
+        : public seekable_device_tag,
+          public closable_tag,
+          public localizable_tag,
+          public flushable_tag
+        { };
+    basic_file( const std::string& path,
+                BOOST_IOS::openmode mode =
+                    BOOST_IOS::in | BOOST_IOS::out,
+                BOOST_IOS::openmode base_mode =
+                    BOOST_IOS::in | BOOST_IOS::out );
+    std::streamsize read(char_type* s, std::streamsize n);
+    bool putback(char_type c);
+    std::streamsize write(const char_type* s, std::streamsize n);
+    std::streampos seek( stream_offset off, BOOST_IOS::seekdir way, 
+                         BOOST_IOS::openmode which = 
+                             BOOST_IOS::in | BOOST_IOS::out );
+    void open( const std::string& path,
+               BOOST_IOS::openmode mode =
+                   BOOST_IOS::in | BOOST_IOS::out,
+               BOOST_IOS::openmode base_mode =
+                   BOOST_IOS::in | BOOST_IOS::out );
+    bool is_open() const;
+    void close();
+    bool flush();
+#ifndef BOOST_IOSTREAMS_NO_LOCALE
+    void imbue(const std::locale& loc) { pimpl_->file_.pubimbue(loc);  }
+#endif
+private:
+    struct impl {
+        impl(const std::string& path, BOOST_IOS::openmode mode)
+            { file_.open(path.c_str(), mode); }
+        ~impl() { if (file_.is_open()) file_.close(); }
+        BOOST_IOSTREAMS_BASIC_FILEBUF(Ch) file_;
+    };
+    shared_ptr<impl> pimpl_;
+};
+
+typedef basic_file<char>     file;
+typedef basic_file<wchar_t>  wfile;
+
+template<typename Ch>
+struct basic_file_source : private basic_file<Ch> {
+    typedef Ch char_type;
+    struct category
+        : input_seekable,
+          device_tag,
+          closable_tag
+        { };
+    using basic_file<Ch>::read;
+    using basic_file<Ch>::putback;
+    using basic_file<Ch>::seek;
+    using basic_file<Ch>::is_open;
+    using basic_file<Ch>::close;
+    basic_file_source( const std::string& path,
+                       BOOST_IOS::openmode mode = 
+                           BOOST_IOS::in )
+        : basic_file<Ch>(path, mode & ~BOOST_IOS::out, BOOST_IOS::in)
+        { }
+    void open( const std::string& path,
+               BOOST_IOS::openmode mode = BOOST_IOS::in )
+    {
+        basic_file<Ch>::open(path, mode & ~BOOST_IOS::out, BOOST_IOS::in);
+    }
+};
+
+typedef basic_file_source<char>     file_source;
+typedef basic_file_source<wchar_t>  wfile_source;
+
+template<typename Ch>
+struct basic_file_sink : private basic_file<Ch> {
+    typedef Ch char_type;
+    struct category
+        : output_seekable,
+          device_tag,
+          closable_tag,
+          flushable_tag
+        { };
+    using basic_file<Ch>::write;
+    using basic_file<Ch>::seek;
+    using basic_file<Ch>::is_open;
+    using basic_file<Ch>::close;
+    using basic_file<Ch>::flush;
+    basic_file_sink( const std::string& path,
+                     BOOST_IOS::openmode mode = BOOST_IOS::out )
+        : basic_file<Ch>(path, mode & ~BOOST_IOS::in, BOOST_IOS::out)
+        { }
+    void open( const std::string& path,
+               BOOST_IOS::openmode mode = BOOST_IOS::out )
+    {
+        basic_file<Ch>::open(path, mode & ~BOOST_IOS::in, BOOST_IOS::out);
+    }
+};
+
+typedef basic_file_sink<char>     file_sink;
+typedef basic_file_sink<wchar_t>  wfile_sink;
+                                 
+//------------------Implementation of basic_file------------------------------//
+
+template<typename Ch>
+basic_file<Ch>::basic_file
+    ( const std::string& path, BOOST_IOS::openmode mode, 
+      BOOST_IOS::openmode base_mode )
+{ 
+    open(path, mode, base_mode);
+}
+
+template<typename Ch>
+inline std::streamsize basic_file<Ch>::read
+    (char_type* s, std::streamsize n)
+{ 
+    std::streamsize result = pimpl_->file_.sgetn(s, n); 
+    return result != 0 ? result : -1;
+}
+
+template<typename Ch>
+inline bool basic_file<Ch>::putback(char_type c)
+{ 
+    return !!pimpl_->file_.sputbackc(c); 
+}
+
+template<typename Ch>
+inline std::streamsize basic_file<Ch>::write
+    (const char_type* s, std::streamsize n)
+{ return pimpl_->file_.sputn(s, n); }
+
+template<typename Ch>
+std::streampos basic_file<Ch>::seek
+    ( stream_offset off, BOOST_IOS::seekdir way, 
+      BOOST_IOS::openmode )
+{ return iostreams::seek(pimpl_->file_, off, way); }
+
+template<typename Ch>
+void basic_file<Ch>::open
+    ( const std::string& path, BOOST_IOS::openmode mode, 
+      BOOST_IOS::openmode base_mode )
+{ 
+    pimpl_.reset(new impl(path, mode | base_mode));
+}
+
+template<typename Ch>
+bool basic_file<Ch>::is_open() const { return pimpl_->file_.is_open(); }
+
+template<typename Ch>
+void basic_file<Ch>::close() { pimpl_->file_.close(); }
+
+template<typename Ch>
+bool basic_file<Ch>::flush()
+{ return pimpl_->file_.BOOST_IOSTREAMS_PUBSYNC() == 0; }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC
+
+#endif // #ifndef BOOST_IOSTREAMS_FILE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/device/file_descriptor.hpp b/vendor/pdalboost/boost/iostreams/device/file_descriptor.hpp
new file mode 100644
index 0000000..9e7a8b3
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/device/file_descriptor.hpp
@@ -0,0 +1,318 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Inspired by fdstream.hpp, (C) Copyright Nicolai M. Josuttis 2001,
+// available at http://www.josuttis.com/cppcode/fdstream.html.
+
+#ifndef BOOST_IOSTREAMS_FILE_DESCRIPTOR_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FILE_DESCRIPTOR_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <string>
+#include <boost/cstdint.hpp>               // intmax_t.
+#include <boost/iostreams/categories.hpp>  // tags.
+#include <boost/iostreams/detail/config/auto_link.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+#include <boost/iostreams/detail/file_handle.hpp>
+#include <boost/iostreams/detail/ios.hpp>  // openmode, seekdir, int types.
+#include <boost/iostreams/detail/path.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/shared_ptr.hpp>
+
+// Must come last.
+#include <boost/config/abi_prefix.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+// Forward declarations
+class file_descriptor_source;
+class file_descriptor_sink;
+namespace detail { struct file_descriptor_impl; }
+
+enum file_descriptor_flags
+{
+    never_close_handle = 0,
+    close_handle = 3
+};
+
+class BOOST_IOSTREAMS_DECL file_descriptor {
+public:
+    friend class file_descriptor_source;
+    friend class file_descriptor_sink;
+    typedef detail::file_handle  handle_type;
+    typedef char                 char_type;
+    struct category
+        : seekable_device_tag,
+          closable_tag
+        { };
+
+    // Default constructor
+    file_descriptor();
+
+    // Constructors taking file desciptors
+    file_descriptor(handle_type fd, file_descriptor_flags);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    file_descriptor(int fd, file_descriptor_flags);
+#endif
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+    // Constructors taking file desciptors
+    explicit file_descriptor(handle_type fd, bool close_on_exit = false);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    explicit file_descriptor(int fd, bool close_on_exit = false);
+#endif
+#endif
+
+    // Constructor taking a std:: string
+    explicit file_descriptor( const std::string& path,
+                              BOOST_IOS::openmode mode =
+                                  BOOST_IOS::in | BOOST_IOS::out );
+
+    // Constructor taking a C-style string
+    explicit file_descriptor( const char* path,
+                              BOOST_IOS::openmode mode =
+                                  BOOST_IOS::in | BOOST_IOS::out );
+
+    // Constructor taking a Boost.Filesystem path
+    template<typename Path>
+    explicit file_descriptor( const Path& path,
+                              BOOST_IOS::openmode mode =
+                                  BOOST_IOS::in | BOOST_IOS::out )
+    { 
+        init();
+        open(detail::path(path), mode); 
+    }
+
+    // Copy constructor
+    file_descriptor(const file_descriptor& other);
+
+    // open overloads taking file descriptors
+    void open(handle_type fd, file_descriptor_flags);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    void open(int fd, file_descriptor_flags);
+#endif
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+    // open overloads taking file descriptors
+    void open(handle_type fd, bool close_on_exit = false);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    void open(int fd, bool close_on_exit = false);
+#endif
+#endif
+
+    // open overload taking a std::string
+    void open( const std::string& path,
+               BOOST_IOS::openmode mode =
+                   BOOST_IOS::in | BOOST_IOS::out );
+
+    // open overload taking C-style string
+    void open( const char* path,
+               BOOST_IOS::openmode mode =
+                   BOOST_IOS::in | BOOST_IOS::out );
+
+    // open overload taking a Boost.Filesystem path
+    template<typename Path>
+    void open( const Path& path,
+               BOOST_IOS::openmode mode =
+                   BOOST_IOS::in | BOOST_IOS::out )
+    { open(detail::path(path), mode); }
+
+    bool is_open() const;
+    void close();
+    std::streamsize read(char_type* s, std::streamsize n);
+    std::streamsize write(const char_type* s, std::streamsize n);
+    std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
+    handle_type handle() const;
+private:
+    void init();
+
+    // open overload taking a detail::path
+    void open( const detail::path& path, 
+               BOOST_IOS::openmode, 
+               BOOST_IOS::openmode = BOOST_IOS::openmode(0) );
+
+    typedef detail::file_descriptor_impl impl_type;
+    shared_ptr<impl_type> pimpl_;
+};
+
+class BOOST_IOSTREAMS_DECL file_descriptor_source : private file_descriptor {
+public:
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    typedef void*  handle_type;  // A.k.a HANDLE
+#else
+    typedef int    handle_type;
+#endif
+    typedef char   char_type;
+    struct category
+      : input_seekable,
+        device_tag,
+        closable_tag
+      { };
+    using file_descriptor::is_open;
+    using file_descriptor::close;
+    using file_descriptor::read;
+    using file_descriptor::seek;
+    using file_descriptor::handle;
+
+    // Default constructor
+    file_descriptor_source() { }
+
+    // Constructors taking file desciptors
+    explicit file_descriptor_source(handle_type fd, file_descriptor_flags);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    explicit file_descriptor_source(int fd, file_descriptor_flags);
+#endif
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+    // Constructors taking file desciptors
+    explicit file_descriptor_source(handle_type fd, bool close_on_exit = false);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    explicit file_descriptor_source(int fd, bool close_on_exit = false);
+#endif
+#endif
+
+    // Constructor taking a std:: string
+    explicit file_descriptor_source( const std::string& path,
+                                     BOOST_IOS::openmode mode = BOOST_IOS::in );
+
+    // Constructor taking a C-style string
+    explicit file_descriptor_source( const char* path,
+                                     BOOST_IOS::openmode mode = BOOST_IOS::in );
+
+    // Constructor taking a Boost.Filesystem path
+    template<typename Path>
+    explicit file_descriptor_source( const Path& path,
+                                     BOOST_IOS::openmode mode = BOOST_IOS::in )
+    { open(detail::path(path), mode); }
+
+    // Copy constructor
+    file_descriptor_source(const file_descriptor_source& other);
+
+    // Constructors taking file desciptors
+    void open(handle_type fd, file_descriptor_flags);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    void open(int fd, file_descriptor_flags);
+#endif
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+    // open overloads taking file descriptors
+    void open(handle_type fd, bool close_on_exit = false);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    void open(int fd, bool close_on_exit = false);
+#endif
+#endif
+
+    // open overload taking a std::string
+    void open(const std::string& path, BOOST_IOS::openmode mode = BOOST_IOS::in);
+
+    // open overload taking C-style string
+    void open(const char* path, BOOST_IOS::openmode mode = BOOST_IOS::in);
+
+    // open overload taking a Boost.Filesystem path
+    template<typename Path>
+    void open(const Path& path, BOOST_IOS::openmode mode = BOOST_IOS::in);
+private:
+
+    // open overload taking a detail::path
+    void open(const detail::path& path, BOOST_IOS::openmode);
+};
+
+class BOOST_IOSTREAMS_DECL file_descriptor_sink : private file_descriptor {
+public:
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    typedef void*  handle_type;  // A.k.a HANDLE
+#else
+    typedef int    handle_type;
+#endif
+    typedef char   char_type;
+    struct category
+      : output_seekable,
+        device_tag,
+        closable_tag
+      { };
+    using file_descriptor::is_open;
+    using file_descriptor::close;
+    using file_descriptor::write;
+    using file_descriptor::seek;
+    using file_descriptor::handle;
+
+    // Default constructor
+    file_descriptor_sink() { }
+
+    // Constructors taking file desciptors
+    file_descriptor_sink(handle_type fd, file_descriptor_flags);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    file_descriptor_sink(int fd, file_descriptor_flags);
+#endif
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+    // Constructors taking file desciptors
+    explicit file_descriptor_sink(handle_type fd, bool close_on_exit = false);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    explicit file_descriptor_sink(int fd, bool close_on_exit = false);
+#endif
+#endif
+
+    // Constructor taking a std:: string
+    explicit file_descriptor_sink( const std::string& path,
+                                   BOOST_IOS::openmode mode = BOOST_IOS::out );
+
+    // Constructor taking a C-style string
+    explicit file_descriptor_sink( const char* path,
+                                   BOOST_IOS::openmode mode = BOOST_IOS::out );
+
+    // Constructor taking a Boost.Filesystem path
+    template<typename Path>
+    explicit file_descriptor_sink( const Path& path,
+                                   BOOST_IOS::openmode mode = BOOST_IOS::out )
+    { open(detail::path(path), mode); }
+
+    // Copy constructor
+    file_descriptor_sink(const file_descriptor_sink& other);
+
+    // open overloads taking file descriptors
+    void open(handle_type fd, file_descriptor_flags);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    void open(int fd, file_descriptor_flags);
+#endif
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+    // open overloads taking file descriptors
+    void open(handle_type fd, bool close_on_exit = false);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    void open(int fd, bool close_on_exit = false);
+#endif
+#endif
+
+    // open overload taking a std::string
+    void open( const std::string& path, 
+               BOOST_IOS::openmode mode = BOOST_IOS::out );
+
+    // open overload taking C-style string
+    void open( const char* path, 
+               BOOST_IOS::openmode mode = BOOST_IOS::out );
+
+    // open overload taking a Boost.Filesystem path
+    template<typename Path>
+    void open( const Path& path, 
+               BOOST_IOS::openmode mode = BOOST_IOS::out )
+    { open(detail::path(path), mode); }
+private:
+
+    // open overload taking a detail::path
+    void open(const detail::path& path, BOOST_IOS::openmode);
+};
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // #ifndef BOOST_IOSTREAMS_FILE_DESCRIPTOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/device/mapped_file.hpp b/vendor/pdalboost/boost/iostreams/device/mapped_file.hpp
new file mode 100644
index 0000000..cb92ad0
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/device/mapped_file.hpp
@@ -0,0 +1,599 @@
+// (C) Copyright Jorge Lodos 2008.
+// (C) Copyright Jonathan Turkanis 2003.
+// (C) Copyright Craig Henderson 2002.   'boost/memmap.hpp' from sandbox
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+#ifndef BOOST_IOSTREAMS_MAPPED_FILE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_MAPPED_FILE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>                   // make sure size_t is in std.
+#include <cstddef>                            // size_t.
+#include <string>                             // pathnames.
+#include <utility>                            // pair.
+#include <boost/config.hpp>                   // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/close.hpp>
+#include <boost/iostreams/concepts.hpp>
+#include <boost/iostreams/detail/config/auto_link.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/ios.hpp>     // openmode, failure
+#include <boost/iostreams/detail/path.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+// Must come last.
+#include <boost/config/abi_prefix.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+//------------------Definition of mapped_file_base and mapped_file_params-----//
+
+// Forward declarations
+class mapped_file_source;
+class mapped_file_sink;
+class mapped_file;
+namespace detail { class mapped_file_impl; }
+
+class mapped_file_base {
+public:
+    enum mapmode {
+        readonly = 1,
+        readwrite = 2,
+        priv = 4
+    };
+};
+
+// Bitmask operations for mapped_file_base::mapmode
+mapped_file_base::mapmode 
+operator|(mapped_file_base::mapmode a, mapped_file_base::mapmode b);
+
+mapped_file_base::mapmode 
+operator&(mapped_file_base::mapmode a, mapped_file_base::mapmode b);
+
+mapped_file_base::mapmode 
+operator^(mapped_file_base::mapmode a, mapped_file_base::mapmode b);
+
+mapped_file_base::mapmode 
+operator~(mapped_file_base::mapmode a);
+
+mapped_file_base::mapmode 
+operator|=(mapped_file_base::mapmode& a, mapped_file_base::mapmode b);
+
+mapped_file_base::mapmode 
+operator&=(mapped_file_base::mapmode& a, mapped_file_base::mapmode b);
+
+mapped_file_base::mapmode 
+operator^=(mapped_file_base::mapmode& a, mapped_file_base::mapmode b);
+
+//------------------Definition of mapped_file_params--------------------------//
+
+namespace detail {
+
+struct mapped_file_params_base {
+    mapped_file_params_base()
+        : flags(static_cast<mapped_file_base::mapmode>(0)), 
+          mode(), offset(0), length(static_cast<std::size_t>(-1)), 
+          new_file_size(0), hint(0)
+        { }
+private:
+    friend class mapped_file_impl;
+    void normalize();
+public:
+    mapped_file_base::mapmode   flags;
+    BOOST_IOS::openmode         mode;  // Deprecated
+    stream_offset               offset;
+    std::size_t                 length;
+    stream_offset               new_file_size;
+    const char*                 hint;
+};
+
+} // End namespace detail.
+
+// This template allows Boost.Filesystem paths to be specified when creating or
+// reopening a memory mapped file, without creating a dependence on
+// Boost.Filesystem. Possible values of Path include std::string,
+// pdalboost::filesystem::path, pdalboost::filesystem::wpath, 
+// and pdalboost::iostreams::detail::path (used to store either a std::string or a
+// std::wstring).
+template<typename Path>
+struct basic_mapped_file_params 
+    : detail::mapped_file_params_base 
+{
+    typedef detail::mapped_file_params_base base_type;
+
+    // For wide paths, instantiate basic_mapped_file_params 
+    // with pdalboost::filesystem::wpath
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+    BOOST_STATIC_ASSERT((!is_same<Path, std::wstring>::value));
+#endif
+
+    // Default constructor
+    basic_mapped_file_params() { }
+
+    // Construction from a Path
+    explicit basic_mapped_file_params(const Path& p) : path(p) { }
+
+    // Construction from a path of a different type
+    template<typename PathT>
+    explicit basic_mapped_file_params(const PathT& p) : path(p) { }
+
+    // Copy constructor
+    basic_mapped_file_params(const basic_mapped_file_params& other)
+        : base_type(other), path(other.path)
+        { }
+
+    // Templated copy constructor
+    template<typename PathT>
+    basic_mapped_file_params(const basic_mapped_file_params<PathT>& other)
+        : base_type(other), path(other.path)
+        { }
+
+    typedef Path  path_type;
+    Path          path;
+};
+
+typedef basic_mapped_file_params<std::string> mapped_file_params;
+
+//------------------Definition of mapped_file_source--------------------------//
+
+class BOOST_IOSTREAMS_DECL mapped_file_source : public mapped_file_base {
+private:
+    struct safe_bool_helper { int x; };
+    typedef int safe_bool_helper::*                 safe_bool;
+    typedef detail::mapped_file_impl                impl_type;
+    typedef basic_mapped_file_params<detail::path>  param_type;
+    friend class mapped_file;
+    friend class detail::mapped_file_impl;
+    friend struct pdalboost::iostreams::operations<mapped_file_source>;
+public:
+    typedef char                                    char_type;
+    struct category
+        : public source_tag,
+          public direct_tag,
+          public closable_tag
+        { };
+    typedef std::size_t                             size_type;
+    typedef const char*                             iterator;
+    BOOST_STATIC_CONSTANT(size_type, max_length = static_cast<size_type>(-1));
+
+    // Default constructor
+    mapped_file_source();
+
+    // Constructor taking a parameters object
+    template<typename Path>
+    explicit mapped_file_source(const basic_mapped_file_params<Path>& p);
+
+    // Constructor taking a list of parameters
+    template<typename Path>
+    explicit mapped_file_source( const Path& path,
+                                 size_type length = max_length,
+                                 pdalboost::intmax_t offset = 0 );
+
+    // Copy Constructor
+    mapped_file_source(const mapped_file_source& other);
+
+    //--------------Stream interface------------------------------------------//
+
+    template<typename Path>
+    void open(const basic_mapped_file_params<Path>& p);
+
+    template<typename Path>
+    void open( const Path& path,
+               size_type length = max_length,
+               pdalboost::intmax_t offset = 0 );
+
+    bool is_open() const;
+    void close();
+    operator safe_bool() const;
+    bool operator!() const;
+    mapmode flags() const;
+
+    //--------------Container interface---------------------------------------//
+
+    size_type size() const;
+    const char* data() const;
+    iterator begin() const;
+    iterator end() const;
+
+    //--------------Query admissible offsets----------------------------------//
+
+    // Returns the allocation granularity for virtual memory. Values passed
+    // as offsets must be multiples of this value.
+    static int alignment();
+
+private:
+    void init();
+    void open_impl(const param_type& p);
+
+    pdalboost::shared_ptr<impl_type> pimpl_;
+};
+
+//------------------Definition of mapped_file---------------------------------//
+
+class BOOST_IOSTREAMS_DECL mapped_file : public mapped_file_base {
+private:
+    typedef mapped_file_source                      delegate_type;
+    typedef delegate_type::safe_bool                safe_bool;
+    typedef basic_mapped_file_params<detail::path>  param_type;
+    friend struct pdalboost::iostreams::operations<mapped_file >;
+    friend class mapped_file_sink;
+public:
+    typedef char                                    char_type;
+    struct category
+        : public seekable_device_tag,
+          public direct_tag,
+          public closable_tag
+        { };
+    typedef mapped_file_source::size_type           size_type;
+    typedef char*                                   iterator;
+    typedef const char*                             const_iterator;
+    BOOST_STATIC_CONSTANT(size_type, max_length = delegate_type::max_length);
+
+    // Default constructor
+    mapped_file() { }
+
+    // Construstor taking a parameters object
+    template<typename Path>
+    explicit mapped_file(const basic_mapped_file_params<Path>& p);
+
+    // Constructor taking a list of parameters
+    template<typename Path>
+    mapped_file( const Path& path,
+                 mapmode flags,
+                 size_type length = max_length,
+                 stream_offset offset = 0 );
+
+    // Constructor taking a list of parameters, including a 
+    // std::ios_base::openmode (deprecated)
+    template<typename Path>
+    explicit mapped_file( const Path& path,
+                          BOOST_IOS::openmode mode =
+                              BOOST_IOS::in | BOOST_IOS::out,
+                          size_type length = max_length,
+                          stream_offset offset = 0 );
+
+    // Copy Constructor
+    mapped_file(const mapped_file& other);
+
+    //--------------Conversion to mapped_file_source (deprecated)-------------//
+
+    operator mapped_file_source&() { return delegate_; }
+    operator const mapped_file_source&() const { return delegate_; }
+
+    //--------------Stream interface------------------------------------------//
+
+    // open overload taking a parameters object
+    template<typename Path>
+    void open(const basic_mapped_file_params<Path>& p);
+
+    // open overload taking a list of parameters
+    template<typename Path>
+    void open( const Path& path,
+               mapmode mode,
+               size_type length = max_length,
+               stream_offset offset = 0 );
+
+    // open overload taking a list of parameters, including a 
+    // std::ios_base::openmode (deprecated)
+    template<typename Path>
+    void open( const Path& path,
+               BOOST_IOS::openmode mode =
+                   BOOST_IOS::in | BOOST_IOS::out,
+               size_type length = max_length,
+               stream_offset offset = 0 );
+
+    bool is_open() const { return delegate_.is_open(); }
+    void close() { delegate_.close(); }
+    operator safe_bool() const { return delegate_; }
+    bool operator!() const { return !delegate_; }
+    mapmode flags() const { return delegate_.flags(); }
+
+    //--------------Container interface---------------------------------------//
+
+    size_type size() const { return delegate_.size(); }
+    char* data() const;
+    const char* const_data() const { return delegate_.data(); }
+    iterator begin() const { return data(); }
+    const_iterator const_begin() const { return const_data(); }
+    iterator end() const { return data() + size(); }
+    const_iterator const_end() const { return const_data() + size(); }
+
+    //--------------Query admissible offsets----------------------------------//
+
+    // Returns the allocation granularity for virtual memory. Values passed
+    // as offsets must be multiples of this value.
+    static int alignment() { return mapped_file_source::alignment(); }
+
+    //--------------File access----------------------------------------------//
+
+    void resize(stream_offset new_size);
+private:
+    delegate_type delegate_;
+};
+
+//------------------Definition of mapped_file_sink----------------------------//
+
+class BOOST_IOSTREAMS_DECL mapped_file_sink : private mapped_file {
+public:
+    friend struct pdalboost::iostreams::operations<mapped_file_sink>;
+    using mapped_file::mapmode;
+    using mapped_file::readonly;
+    using mapped_file::readwrite;
+    using mapped_file::priv;
+    using mapped_file::char_type;
+    struct category
+        : public sink_tag,
+          public direct_tag,
+          public closable_tag
+        { };
+    using mapped_file::size_type;
+    using mapped_file::iterator;
+    using mapped_file::max_length;
+    using mapped_file::is_open;
+    using mapped_file::close;
+    using mapped_file::operator safe_bool;
+    using mapped_file::operator !;
+    using mapped_file::flags;
+    using mapped_file::size;
+    using mapped_file::data;
+    using mapped_file::begin;
+    using mapped_file::end;
+    using mapped_file::alignment;
+    using mapped_file::resize;
+
+    // Default constructor
+    mapped_file_sink() { }
+
+    // Constructor taking a parameters object
+    template<typename Path>
+    explicit mapped_file_sink(const basic_mapped_file_params<Path>& p);
+
+    // Constructor taking a list of parameters
+    template<typename Path>
+    explicit mapped_file_sink( const Path& path,
+                               size_type length = max_length,
+                               pdalboost::intmax_t offset = 0,
+                               mapmode flags = readwrite );
+
+    // Copy Constructor
+    mapped_file_sink(const mapped_file_sink& other);
+
+    // open overload taking a parameters object
+    template<typename Path>
+    void open(const basic_mapped_file_params<Path>& p);
+
+    // open overload taking a list of parameters
+    template<typename Path>
+    void open( const Path& path,
+               size_type length = max_length,
+               pdalboost::intmax_t offset = 0,
+               mapmode flags = readwrite );
+};
+
+//------------------Implementation of mapped_file_source----------------------//
+
+template<typename Path>
+mapped_file_source::mapped_file_source(const basic_mapped_file_params<Path>& p)
+{ init(); open(p); }
+
+template<typename Path>
+mapped_file_source::mapped_file_source( 
+    const Path& path, size_type length, pdalboost::intmax_t offset)
+{ init(); open(path, length, offset); }
+
+template<typename Path>
+void mapped_file_source::open(const basic_mapped_file_params<Path>& p)
+{
+    param_type params(p);
+    if (params.flags) {
+        if (params.flags != mapped_file::readonly)
+            pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid flags"));
+    } else {
+        if (params.mode & BOOST_IOS::out)
+            pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid mode"));
+        params.mode |= BOOST_IOS::in;
+    }
+    open_impl(params);
+}
+
+template<typename Path>
+void mapped_file_source::open(
+    const Path& path, size_type length, pdalboost::intmax_t offset)
+{
+    param_type p(path);
+    p.length = length;
+    p.offset = offset;
+    open(p);
+}
+
+//------------------Implementation of mapped_file-----------------------------//
+
+template<typename Path>
+mapped_file::mapped_file(const basic_mapped_file_params<Path>& p)
+{ open(p); }
+
+template<typename Path>
+mapped_file::mapped_file( 
+    const Path& path, mapmode flags, 
+    size_type length, stream_offset offset )
+{ open(path, flags, length, offset); }
+
+template<typename Path>
+mapped_file::mapped_file( 
+    const Path& path, BOOST_IOS::openmode mode, 
+    size_type length, stream_offset offset )
+{ open(path, mode, length, offset); }
+
+template<typename Path>
+void mapped_file::open(const basic_mapped_file_params<Path>& p)
+{ delegate_.open_impl(p); }
+
+template<typename Path>
+void mapped_file::open( 
+    const Path& path, mapmode flags, 
+    size_type length, stream_offset offset )
+{
+    param_type p(path);
+    p.flags = flags;
+    p.length = length;
+    p.offset = offset;
+    open(p);
+}
+
+template<typename Path>
+void mapped_file::open( 
+    const Path& path, BOOST_IOS::openmode mode, 
+    size_type length, stream_offset offset )
+{
+    param_type p(path);
+    p.mode = mode;
+    p.length = length;
+    p.offset = offset;
+    open(p);
+}
+
+inline char* mapped_file::data() const 
+{ return (flags() != readonly) ? const_cast<char*>(delegate_.data()) : 0; }
+
+//------------------Implementation of mapped_file_sink------------------------//
+
+template<typename Path>
+mapped_file_sink::mapped_file_sink(const basic_mapped_file_params<Path>& p)
+{ open(p); }
+
+template<typename Path>
+mapped_file_sink::mapped_file_sink(
+    const Path& path, size_type length,
+    pdalboost::intmax_t offset, mapmode flags )
+{ open(path, length, offset, flags); }
+
+template<typename Path>
+void mapped_file_sink::open(const basic_mapped_file_params<Path>& p)
+{
+    param_type params(p);
+    if (params.flags) {
+        if (params.flags & mapped_file::readonly)
+            pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid flags"));
+    } else {
+        if (params.mode & BOOST_IOS::in)
+            pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid mode"));
+        params.mode |= BOOST_IOS::out;
+    }
+    mapped_file::open(params);
+}
+
+template<typename Path>
+void mapped_file_sink::open(
+    const Path& path, size_type length,
+    pdalboost::intmax_t offset, mapmode flags )
+{
+    param_type p(path);
+    p.flags = flags;
+    p.length = length;
+    p.offset = offset;
+    open(p);
+}
+
+//------------------Specialization of direct_impl-----------------------------//
+
+template<>
+struct operations<mapped_file_source>
+    : pdalboost::iostreams::detail::close_impl<closable_tag>
+{
+    static std::pair<char*, char*>
+    input_sequence(mapped_file_source& src)
+    {
+        return std::make_pair( const_cast<char*>(src.begin()),
+                               const_cast<char*>(src.end()) );
+    }
+};
+
+template<>
+struct operations<mapped_file>
+    : pdalboost::iostreams::detail::close_impl<closable_tag>
+{
+    static std::pair<char*, char*>
+    input_sequence(mapped_file& file)
+    { 
+        return std::make_pair(file.begin(), file.end()); 
+    }
+    static std::pair<char*, char*>
+    output_sequence(mapped_file& file)
+    { 
+        return std::make_pair(file.begin(), file.end()); 
+    }
+};
+
+template<>
+struct operations<mapped_file_sink>
+    : pdalboost::iostreams::detail::close_impl<closable_tag>
+{
+    static std::pair<char*, char*>
+    output_sequence(mapped_file_sink& sink)
+    { 
+        return std::make_pair(sink.begin(), sink.end()); 
+    }
+};
+                    
+//------------------Definition of mapmode operators---------------------------//
+
+inline mapped_file::mapmode 
+operator|(mapped_file::mapmode a, mapped_file::mapmode b)
+{
+    return static_cast<mapped_file::mapmode>
+        (static_cast<int>(a) | static_cast<int>(b));
+}
+
+inline mapped_file::mapmode 
+operator&(mapped_file::mapmode a, mapped_file::mapmode b)
+{
+    return static_cast<mapped_file::mapmode>
+        (static_cast<int>(a) & static_cast<int>(b));
+}
+
+inline mapped_file::mapmode 
+operator^(mapped_file::mapmode a, mapped_file::mapmode b)
+{
+    return static_cast<mapped_file::mapmode>
+        (static_cast<int>(a) ^ static_cast<int>(b));
+}
+
+inline mapped_file::mapmode
+operator~(mapped_file::mapmode a)
+{
+    return static_cast<mapped_file::mapmode>(~static_cast<int>(a));
+}
+
+inline mapped_file::mapmode 
+operator|=(mapped_file::mapmode& a, mapped_file::mapmode b)
+{
+    return a = a | b;
+}
+
+inline mapped_file::mapmode 
+operator&=(mapped_file::mapmode& a, mapped_file::mapmode b)
+{
+    return a = a & b;
+}
+
+inline mapped_file::mapmode 
+operator^=(mapped_file::mapmode& a, mapped_file::mapmode b)
+{
+    return a = a ^ b;
+}
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // #ifndef BOOST_IOSTREAMS_MAPPED_FILE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/device/null.hpp b/vendor/pdalboost/boost/iostreams/device/null.hpp
new file mode 100644
index 0000000..0ec1ccd
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/device/null.hpp
@@ -0,0 +1,66 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Inspired by Daryle Walker's nullbuf from his More I/O submission.
+
+#ifndef BOOST_IOSTREAMS_NULL_HPP_INCLUDED
+#define BOOST_IOSTREAMS_NULL_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/ios.hpp> // openmode, streamsize.
+#include <boost/iostreams/positioning.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+template<typename Ch, typename Mode>
+class basic_null_device {
+public:
+    typedef Ch char_type;
+    struct category
+        : public Mode,
+          public device_tag,
+          public closable_tag
+        { };
+    std::streamsize read(Ch*, std::streamsize) { return 0; }
+    std::streamsize write(const Ch*, std::streamsize n) { return n; }
+    std::streampos seek( stream_offset, BOOST_IOS::seekdir,
+                         BOOST_IOS::openmode = 
+                             BOOST_IOS::in | BOOST_IOS::out ) 
+    { return -1; }
+    void close() { }
+    void close(BOOST_IOS::openmode) { }
+};
+
+template<typename Ch>
+struct basic_null_source : private basic_null_device<Ch, input> {
+    typedef Ch          char_type;
+    typedef source_tag  category;
+    using basic_null_device<Ch, input>::read;
+    using basic_null_device<Ch, input>::close;
+};
+
+typedef basic_null_source<char>     null_source;
+typedef basic_null_source<wchar_t>  wnull_source;
+
+template<typename Ch>
+struct basic_null_sink : private basic_null_device<Ch, output> {
+    typedef Ch        char_type;
+    typedef sink_tag  category;
+    using basic_null_device<Ch, output>::write;
+    using basic_null_device<Ch, output>::close;
+};
+
+typedef basic_null_sink<char>     null_sink;
+typedef basic_null_sink<wchar_t>  wnull_sink;
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_NULL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/filter/aggregate.hpp b/vendor/pdalboost/boost/iostreams/filter/aggregate.hpp
new file mode 100644
index 0000000..3eb02ab
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/filter/aggregate.hpp
@@ -0,0 +1,168 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_AGGREGATE_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_AGGREGATE_FILTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <algorithm>                          // copy, min.
+#include <boost/assert.hpp>
+#include <iterator>                           // back_inserter
+#include <vector>
+#include <boost/iostreams/constants.hpp>      // default_device_buffer_size 
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp>     // openmode, streamsize.
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/iostreams/read.hpp>           // check_eof 
+#include <boost/iostreams/write.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>  // MSVC.
+
+namespace pdalboost { namespace iostreams {
+
+//
+// Template name: aggregate_filter.
+// Template parameters:
+//      Ch - The character type.
+//      Alloc - The allocator type.
+// Description: Utility for defining DualUseFilters which filter an
+//      entire stream at once. To use, override the protected virtual
+//      member do_filter.
+// Note: This filter should not be copied while it is in use.
+//
+template<typename Ch, typename Alloc = std::allocator<Ch> >
+class aggregate_filter  {
+public:
+    typedef Ch char_type;
+    struct category
+        : dual_use,
+          filter_tag,
+          multichar_tag,
+          closable_tag
+        { };
+    aggregate_filter() : ptr_(0), state_(0) { }
+    virtual ~aggregate_filter() { }
+
+    template<typename Source>
+    std::streamsize read(Source& src, char_type* s, std::streamsize n)
+    {
+        using namespace std;
+        BOOST_ASSERT(!(state_ & f_write));
+        state_ |= f_read;
+        if (!(state_ & f_eof))
+            do_read(src);
+        std::streamsize amt =
+            (std::min)(n, static_cast<std::streamsize>(data_.size() - ptr_));
+        if (amt) {
+            BOOST_IOSTREAMS_CHAR_TRAITS(char_type)::copy(s, &data_[ptr_], amt);
+            ptr_ += amt;
+        }
+        return detail::check_eof(amt);
+    }
+
+    template<typename Sink>
+    std::streamsize write(Sink&, const char_type* s, std::streamsize n)
+    {
+        BOOST_ASSERT(!(state_ & f_read));
+        state_ |= f_write;
+        data_.insert(data_.end(), s, s + n);
+        return n;
+    }
+
+    template<typename Sink>
+    void close(Sink& sink, BOOST_IOS::openmode which)
+    {
+        if ((state_ & f_read) != 0 && which == BOOST_IOS::in)
+            close_impl();
+        if ((state_ & f_write) != 0 && which == BOOST_IOS::out) {
+            try {
+                vector_type filtered;
+                do_filter(data_, filtered);
+                do_write( 
+                    sink, &filtered[0],
+                    static_cast<std::streamsize>(filtered.size())
+                );
+            } catch (...) {
+                close_impl();
+                throw;
+            }
+            close_impl();
+        }
+    }
+
+protected:
+    typedef std::vector<Ch, Alloc>           vector_type;
+    typedef typename vector_type::size_type  size_type;
+private:
+    virtual void do_filter(const vector_type& src, vector_type& dest) = 0;
+    virtual void do_close() { }
+
+    template<typename Source>
+    void do_read(Source& src)
+    {
+        using std::streamsize;
+        vector_type data;
+        while (true) {
+            const std::streamsize  size = default_device_buffer_size;
+            Ch                     buf[size];
+            std::streamsize        amt;
+            if ((amt = pdalboost::iostreams::read(src, buf, size)) == -1)
+                break;
+            data.insert(data.end(), buf, buf + amt);
+        }
+        do_filter(data, data_);
+        state_ |= f_eof;
+    }
+
+    template<typename Sink>
+    void do_write(Sink& sink, const char_type* s, std::streamsize n) 
+    { 
+        typedef typename iostreams::category_of<Sink>::type  category;
+        typedef is_convertible<category, output>             can_write;
+        do_write(sink, s, n, can_write()); 
+    }
+
+    template<typename Sink>
+    void do_write(Sink& sink, const char_type* s, std::streamsize n, mpl::true_) 
+    { iostreams::write(sink, s, n); }
+
+    template<typename Sink>
+    void do_write(Sink&, const char_type*, std::streamsize, mpl::false_) { }
+
+    void close_impl()
+    {
+        data_.clear();
+        ptr_ = 0;
+        state_ = 0;
+        do_close();
+    }
+
+    enum flag_type {
+        f_read   = 1,
+        f_write  = f_read << 1,
+        f_eof    = f_write << 1
+    };
+
+    // Note: typically will not be copied while vector contains data.
+    vector_type  data_;
+    size_type    ptr_;
+    int          state_;
+};
+BOOST_IOSTREAMS_PIPABLE(aggregate_filter, 1)
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>  // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_AGGREGATE_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/filter/bzip2.hpp b/vendor/pdalboost/boost/iostreams/filter/bzip2.hpp
new file mode 100644
index 0000000..6845df4
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/filter/bzip2.hpp
@@ -0,0 +1,414 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Note: custom allocators are not supported on VC6, since that compiler
+// had trouble finding the function zlib_base::do_init.
+
+#ifndef BOOST_IOSTREAMS_BZIP2_HPP_INCLUDED
+#define BOOST_IOSTREAMS_BZIP2_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+                   
+#include <cassert>                            
+#include <memory>            // allocator.
+#include <new>               // bad_alloc.
+#include <boost/config.hpp>  // MSVC, STATIC_CONSTANT, DEDUCED_TYPENAME, DINKUM.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/constants.hpp>   // buffer size.
+#include <boost/iostreams/detail/config/auto_link.hpp>
+#include <boost/iostreams/detail/config/bzip2.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/ios.hpp>  // failure, streamsize.
+#include <boost/iostreams/filter/symmetric.hpp>               
+#include <boost/iostreams/pipeline.hpp>       
+#include <boost/type_traits/is_same.hpp>     
+
+// Must come last.
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable:4251 4231 4660)
+#endif
+#include <boost/config/abi_prefix.hpp>           
+
+// Temporary fix.
+#undef small
+
+namespace pdalboost { namespace iostreams {
+
+namespace bzip2 {
+
+                    // Typedefs.
+
+typedef void* (*alloc_func)(void*, int, int);
+typedef void (*free_func)(void*, void*);
+
+                    // Status codes
+
+BOOST_IOSTREAMS_DECL extern const int ok;
+BOOST_IOSTREAMS_DECL extern const int run_ok;
+BOOST_IOSTREAMS_DECL extern const int flush_ok;
+BOOST_IOSTREAMS_DECL extern const int finish_ok;
+BOOST_IOSTREAMS_DECL extern const int stream_end;    
+BOOST_IOSTREAMS_DECL extern const int sequence_error;
+BOOST_IOSTREAMS_DECL extern const int param_error;
+BOOST_IOSTREAMS_DECL extern const int mem_error;
+BOOST_IOSTREAMS_DECL extern const int data_error;
+BOOST_IOSTREAMS_DECL extern const int data_error_magic;
+BOOST_IOSTREAMS_DECL extern const int io_error;
+BOOST_IOSTREAMS_DECL extern const int unexpected_eof;
+BOOST_IOSTREAMS_DECL extern const int outbuff_full;
+BOOST_IOSTREAMS_DECL extern const int config_error;
+
+                    // Action codes
+
+BOOST_IOSTREAMS_DECL extern const int finish;
+BOOST_IOSTREAMS_DECL extern const int run;
+
+                    // Default values
+
+const int default_block_size   = 9;
+const int default_work_factor  = 30;
+const bool default_small       = false;
+
+} // End namespace bzip2. 
+
+//
+// Class name: bzip2_params.
+// Description: Encapsulates the parameters passed to deflateInit2
+//      to customize compression.
+//
+struct bzip2_params {
+
+    // Non-explicit constructor for compression.
+    bzip2_params( int block_size   = bzip2::default_block_size,
+                  int work_factor  = bzip2::default_work_factor )
+        : block_size(block_size), work_factor(work_factor)
+        { }
+
+    // Constructor for decompression.
+    bzip2_params(bool small)
+        : small(small), work_factor(0)
+        { }
+
+    union {
+        int   block_size;    // For compression.
+        bool  small;         // For decompression.
+    };
+    int       work_factor;
+};
+
+//
+// Class name: bzip2_error.
+// Description: Subclass of std::ios_base::failure thrown to indicate
+//     bzip2 errors other than out-of-memory conditions.
+//
+class BOOST_IOSTREAMS_DECL bzip2_error : public BOOST_IOSTREAMS_FAILURE {
+public:
+    explicit bzip2_error(int error);
+    int error() const { return error_; }
+    static void check BOOST_PREVENT_MACRO_SUBSTITUTION(int error);
+private:
+    int error_;
+};
+
+namespace detail {
+
+template<typename Alloc>
+struct bzip2_allocator_traits {
+#ifndef BOOST_NO_STD_ALLOCATOR
+    typedef typename Alloc::template rebind<char>::other type;
+#else
+    typedef std::allocator<char> type;
+#endif
+};
+
+template< typename Alloc,
+          typename Base = // VC6 workaround (C2516)
+              BOOST_DEDUCED_TYPENAME bzip2_allocator_traits<Alloc>::type >
+struct bzip2_allocator : private Base {
+private:
+    typedef typename Base::size_type size_type;
+public:
+    BOOST_STATIC_CONSTANT(bool, custom = 
+        (!is_same<std::allocator<char>, Base>::value));
+    typedef typename bzip2_allocator_traits<Alloc>::type allocator_type;
+    static void* allocate(void* self, int items, int size);
+    static void deallocate(void* self, void* address);
+};
+
+class BOOST_IOSTREAMS_DECL bzip2_base  { 
+public:
+    typedef char char_type;
+protected:
+    bzip2_base(const bzip2_params& params);
+    ~bzip2_base();
+    bzip2_params& params() { return params_; }
+    bool& ready() { return ready_; }
+    template<typename Alloc> 
+    void init( bool compress,
+               bzip2_allocator<Alloc>& alloc )
+        {
+            bool custom = bzip2_allocator<Alloc>::custom;
+            do_init( compress,
+                     #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+                         custom ? bzip2_allocator<Alloc>::allocate : 0,
+                         custom ? bzip2_allocator<Alloc>::deallocate : 0,
+                     #endif
+                     custom ? &alloc : 0 );
+        }
+    void before( const char*& src_begin, const char* src_end,
+                 char*& dest_begin, char* dest_end );
+    void after(const char*& src_begin, char*& dest_begin);
+    int check_end(const char* src_begin, const char* dest_begin);
+    int compress(int action);
+    int decompress();
+    void end(bool compress);
+private:
+    void do_init( bool compress, 
+                  #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+                      bzip2::alloc_func, 
+                      bzip2::free_func, 
+                  #endif
+                  void* derived );
+    bzip2_params  params_;
+    void*         stream_; // Actual type: bz_stream*.
+    bool          ready_;
+};
+
+//
+// Template name: bzip2_compressor_impl
+// Description: Model of SymmetricFilter implementing compression by
+//      delegating to the libbzip2 function BZ_bzCompress.
+//
+template<typename Alloc = std::allocator<char> >
+class bzip2_compressor_impl 
+    : public bzip2_base, 
+      #if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+          public
+      #endif
+      bzip2_allocator<Alloc> 
+{
+public: 
+    bzip2_compressor_impl(const bzip2_params&);
+    bool filter( const char*& src_begin, const char* src_end,
+                 char*& dest_begin, char* dest_end, bool flush );
+    void close();
+private:
+    void init();
+    bool eof_; // Guard to make sure filter() isn't called after it returns false.
+};
+
+//
+// Template name: bzip2_compressor
+// Description: Model of SymmetricFilter implementing decompression by
+//      delegating to the libbzip2 function BZ_bzDecompress.
+//
+template<typename Alloc = std::allocator<char> >
+class bzip2_decompressor_impl 
+    : public bzip2_base, 
+      #if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+          public
+      #endif
+      bzip2_allocator<Alloc> 
+{ 
+public:
+    bzip2_decompressor_impl(bool small = bzip2::default_small);
+    bool filter( const char*& begin_in, const char* end_in,
+                 char*& begin_out, char* end_out, bool flush );
+    void close();
+private:
+    void init();
+    bool eof_; // Guard to make sure filter() isn't called after it returns false.
+};
+
+} // End namespace detail.
+
+//
+// Template name: bzip2_compressor
+// Description: Model of InputFilter and OutputFilter implementing
+//      compression using libbzip2.
+//
+template<typename Alloc = std::allocator<char> >
+struct basic_bzip2_compressor 
+    : symmetric_filter<detail::bzip2_compressor_impl<Alloc>, Alloc> 
+{
+private:
+    typedef detail::bzip2_compressor_impl<Alloc>        impl_type;
+    typedef symmetric_filter<impl_type, Alloc>  base_type;
+public:
+    typedef typename base_type::char_type               char_type;
+    typedef typename base_type::category                category;
+    basic_bzip2_compressor( const bzip2_params& = bzip2::default_block_size, 
+                            int buffer_size =  default_device_buffer_size );
+};
+BOOST_IOSTREAMS_PIPABLE(basic_bzip2_compressor, 1)
+
+typedef basic_bzip2_compressor<> bzip2_compressor;
+
+//
+// Template name: bzip2_decompressor
+// Description: Model of InputFilter and OutputFilter implementing
+//      decompression using libbzip2.
+//
+template<typename Alloc = std::allocator<char> >
+struct basic_bzip2_decompressor 
+    : symmetric_filter<detail::bzip2_decompressor_impl<Alloc>, Alloc> 
+{
+private:
+    typedef detail::bzip2_decompressor_impl<Alloc>      impl_type;
+    typedef symmetric_filter<impl_type, Alloc>  base_type;
+public:
+    typedef typename base_type::char_type               char_type;
+    typedef typename base_type::category                category;
+    basic_bzip2_decompressor( bool small = bzip2::default_small,
+                              int buffer_size = default_device_buffer_size );
+};
+BOOST_IOSTREAMS_PIPABLE(basic_bzip2_decompressor, 1)
+
+typedef basic_bzip2_decompressor<> bzip2_decompressor;
+
+//----------------------------------------------------------------------------//
+
+//------------------Implementation of bzip2_allocator-------------------------//
+
+namespace detail {
+
+template<typename Alloc, typename Base>
+void* bzip2_allocator<Alloc, Base>::allocate(void* self, int items, int size)
+{ 
+    size_type len = items * size;
+    char* ptr = 
+        static_cast<allocator_type*>(self)->allocate
+            (len + sizeof(size_type)
+            #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+                , (char*)0
+            #endif
+            );
+    *reinterpret_cast<size_type*>(ptr) = len;
+    return ptr + sizeof(size_type);
+}
+
+template<typename Alloc, typename Base>
+void bzip2_allocator<Alloc, Base>::deallocate(void* self, void* address)
+{ 
+    char* ptr = reinterpret_cast<char*>(address) - sizeof(size_type);
+    size_type len = *reinterpret_cast<size_type*>(ptr) + sizeof(size_type);
+    static_cast<allocator_type*>(self)->deallocate(ptr, len); 
+}
+
+//------------------Implementation of bzip2_compressor_impl-------------------//
+
+template<typename Alloc>
+bzip2_compressor_impl<Alloc>::bzip2_compressor_impl(const bzip2_params& p)
+    : bzip2_base(p), eof_(false) { }
+
+template<typename Alloc>
+bool bzip2_compressor_impl<Alloc>::filter
+    ( const char*& src_begin, const char* src_end,
+      char*& dest_begin, char* dest_end, bool flush )
+{
+    if (!ready()) init();
+    if (eof_) return false;
+    before(src_begin, src_end, dest_begin, dest_end);
+    int result = compress(flush ? bzip2::finish : bzip2::run);
+    after(src_begin, dest_begin);
+    bzip2_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(result);
+    return !(eof_ = result == bzip2::stream_end);
+}
+
+template<typename Alloc>
+void bzip2_compressor_impl<Alloc>::close() 
+{ 
+    try {
+        end(true);
+    } catch (...) { 
+        eof_ = false; 
+        throw;
+    }
+    eof_ = false;
+}
+
+template<typename Alloc>
+inline void bzip2_compressor_impl<Alloc>::init() 
+{ bzip2_base::init(true, static_cast<bzip2_allocator<Alloc>&>(*this)); }
+
+//------------------Implementation of bzip2_decompressor_impl-----------------//
+
+template<typename Alloc>
+bzip2_decompressor_impl<Alloc>::bzip2_decompressor_impl(bool small)
+    : bzip2_base(bzip2_params(small)), eof_(false) { }
+
+template<typename Alloc>
+bool bzip2_decompressor_impl<Alloc>::filter
+    ( const char*& src_begin, const char* src_end,
+      char*& dest_begin, char* dest_end, bool flush )
+{
+    if (eof_) {
+        // reset the stream if there are more characters
+        if(src_begin == src_end)
+            return false;
+        else
+            close();
+    }
+    if (!ready()) 
+        init();
+    before(src_begin, src_end, dest_begin, dest_end);
+    int result = decompress();
+    if(result == bzip2::ok && flush)
+        result = check_end(src_begin, dest_begin);
+    after(src_begin, dest_begin);
+    bzip2_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(result);
+    eof_ = result == bzip2::stream_end;
+    return true; 
+}
+
+template<typename Alloc>
+void bzip2_decompressor_impl<Alloc>::close() 
+{ 
+    try {
+        end(false);
+    } catch (...) { 
+        eof_ = false; 
+        throw;
+    }
+    eof_ = false;
+}
+
+template<typename Alloc>
+inline void bzip2_decompressor_impl<Alloc>::init()
+{ bzip2_base::init(false, static_cast<bzip2_allocator<Alloc>&>(*this)); }
+} // End namespace detail.
+
+//------------------Implementation of bzip2_decompressor----------------------//
+
+template<typename Alloc>
+basic_bzip2_compressor<Alloc>::basic_bzip2_compressor
+        (const bzip2_params& p, int buffer_size) 
+    : base_type(buffer_size, p) 
+    { }
+
+//------------------Implementation of bzip2_decompressor----------------------//
+
+template<typename Alloc>
+basic_bzip2_decompressor<Alloc>::basic_bzip2_decompressor
+        (bool small, int buffer_size) 
+    : base_type(buffer_size, small)
+    { }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/config/abi_suffix.hpp> // Pops abi_suffix.hpp pragmas.
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_BZIP2_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/filter/counter.hpp b/vendor/pdalboost/boost/iostreams/filter/counter.hpp
new file mode 100644
index 0000000..6145c9d
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/filter/counter.hpp
@@ -0,0 +1,82 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_COUNTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_COUNTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <algorithm>  // count.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/pipeline.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // VC7.1 C4244.
+
+namespace pdalboost { namespace iostreams {
+
+//
+// Template name: basic_counter.
+// Template parameters:
+//      Ch - The character type.
+// Description: Filter which counts lines and characters.
+//
+template<typename Ch>
+class basic_counter  {
+public:
+    typedef Ch char_type;
+    struct category
+        : dual_use,
+          filter_tag,
+          multichar_tag,
+          optimally_buffered_tag
+        { };
+    explicit basic_counter(int first_line = 0, int first_char = 0)
+        : lines_(first_line), chars_(first_char)
+        { }
+    int lines() const { return lines_; }
+    int characters() const { return chars_; }
+    std::streamsize optimal_buffer_size() const { return 0; }
+
+    template<typename Source>
+    std::streamsize read(Source& src, char_type* s, std::streamsize n)
+    {
+        std::streamsize result = iostreams::read(src, s, n);
+        if (result == -1)
+            return -1;
+        lines_ += std::count(s, s + result, char_traits<Ch>::newline());
+        chars_ += result;
+        return result;
+    }
+
+    template<typename Sink>
+    std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+    {
+        std::streamsize result = iostreams::write(snk, s, n);
+        lines_ += std::count(s, s + result, char_traits<Ch>::newline());
+        chars_ += result;
+        return result;
+    }
+private:
+    int lines_;
+    int chars_;
+};
+BOOST_IOSTREAMS_PIPABLE(basic_counter, 1)
+
+
+typedef basic_counter<char>     counter;
+typedef basic_counter<wchar_t>  wcounter;
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_COUNTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/filter/grep.hpp b/vendor/pdalboost/boost/iostreams/filter/grep.hpp
new file mode 100644
index 0000000..7dcb58e
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/filter/grep.hpp
@@ -0,0 +1,109 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+
+ * File:        boost/iostreams/filter/grep.hpp
+ * Date:        Mon May 26 17:48:45 MDT 2008
+ * Copyright:   2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ *
+ * Defines the class template basic_grep_filter and its specializations
+ * grep_filter and wgrep_filter.
+ */
+
+#ifndef BOOST_IOSTREAMS_GREP_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_GREP_FILTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <iostream>
+
+#include <memory>  // allocator.
+#include <boost/iostreams/char_traits.hpp>   
+#include <boost/iostreams/filter/line.hpp>              
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/regex.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+namespace grep {
+
+const int invert      = 1;
+const int whole_line  = invert << 1;
+
+} // End namespace grep.
+
+template< typename Ch,
+          typename Tr = regex_traits<Ch>,
+          typename Alloc = std::allocator<Ch> >
+class basic_grep_filter : public basic_line_filter<Ch, Alloc> {
+private:
+    typedef basic_line_filter<Ch, Alloc>               base_type;
+public:
+    typedef typename base_type::char_type              char_type;
+    typedef typename base_type::category               category;
+    typedef char_traits<char_type>                     traits_type;
+    typedef typename base_type::string_type            string_type;
+    typedef basic_regex<Ch, Tr>                        regex_type;
+    typedef regex_constants::match_flag_type           match_flag_type;
+    basic_grep_filter( const regex_type& re,
+                       match_flag_type match_flags = 
+                           regex_constants::match_default,
+                       int options = 0 );
+    int count() const { return count_; }
+
+    template<typename Sink>
+    void close(Sink& snk, BOOST_IOS::openmode which)
+    {
+        base_type::close(snk, which);
+        options_ &= ~f_initialized;
+    }
+private:
+    virtual string_type do_filter(const string_type& line)
+    {
+        if ((options_ & f_initialized) == 0) {
+            options_ |= f_initialized;
+            count_ = 0;
+        }
+        bool matches = (options_ & grep::whole_line) ?
+            regex_match(line, re_, match_flags_) :
+            regex_search(line, re_, match_flags_);
+        if (options_ & grep::invert)
+            matches = !matches;
+        if (matches)
+            ++count_;
+        return matches ? line + traits_type::newline() : string_type();
+    }
+
+    // Private flags bitwise OR'd with constants from namespace grep
+    enum flags_ {
+        f_initialized = 65536
+    };
+
+    regex_type       re_;
+    match_flag_type  match_flags_;
+    int              options_;
+    int              count_;
+};
+BOOST_IOSTREAMS_PIPABLE(basic_grep_filter, 3)
+
+typedef basic_grep_filter<char>     grep_filter;
+typedef basic_grep_filter<wchar_t>  wgrep_filter;
+                    
+//------------------Implementation of basic_grep_filter-----------------------//
+
+template<typename Ch, typename Tr, typename Alloc>
+basic_grep_filter<Ch, Tr, Alloc>::basic_grep_filter
+    (const regex_type& re, match_flag_type match_flags, int options)
+    : base_type(true), re_(re), match_flags_(match_flags), 
+      options_(options), count_(0)
+    { }
+
+} } // End namespaces iostreams, boost.
+
+#endif      // #ifndef BOOST_IOSTREAMS_REGEX_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/filter/gzip.hpp b/vendor/pdalboost/boost/iostreams/filter/gzip.hpp
new file mode 100644
index 0000000..12c6a0e
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/filter/gzip.hpp
@@ -0,0 +1,757 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains the definitions of the class templates gzip_compressor and
+// gzip_decompressor for reading and writing files in the gzip file format
+// (RFC 1952). Based in part on work of Jonathan de Halleux; see [...]
+
+#ifndef BOOST_IOSTREAMS_GZIP_HPP_INCLUDED
+#define BOOST_IOSTREAMS_GZIP_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // STATIC_CONSTANT, STDC_NAMESPACE, 
+                            // DINKUMWARE_STDLIB, __STL_CONFIG_H.
+#include <algorithm>                      // min.
+#include <boost/assert.hpp>
+#include <cstdio>                         // EOF.
+#include <cstddef>                        // size_t.
+#include <ctime>                          // std::time_t.
+#include <memory>                         // allocator.
+#include <boost/config.hpp>               // Put size_t in std.
+#include <boost/detail/workaround.hpp>
+#include <boost/cstdint.hpp>              // uint8_t, uint32_t.
+#include <boost/iostreams/constants.hpp>  // buffer size.
+#include <boost/iostreams/detail/adapter/non_blocking_adapter.hpp>
+#include <boost/iostreams/detail/adapter/range_adapter.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp> // failure.
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/device/back_inserter.hpp>
+#include <boost/iostreams/filter/zlib.hpp>
+#include <boost/iostreams/pipeline.hpp>     
+#include <boost/iostreams/putback.hpp>
+#include <boost/throw_exception.hpp>
+
+// Must come last.
+#if defined(BOOST_MSVC)
+# pragma warning(push)
+# pragma warning(disable: 4309)    // Truncation of constant value.
+#endif
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::time_t; }
+#endif
+
+namespace pdalboost { namespace iostreams {
+                    
+//------------------Definitions of constants----------------------------------//
+
+namespace gzip {
+
+using namespace pdalboost::iostreams::zlib;
+
+    // Error codes used by gzip_error.
+
+const int zlib_error        = 1;
+const int bad_crc           = 2; // Recorded crc doesn't match data.
+const int bad_length        = 3; // Recorded length doesn't match data.
+const int bad_header        = 4; // Malformed header.
+const int bad_footer        = 5; // Malformed footer.
+const int bad_method        = 6; // Unsupported compression method.
+
+namespace magic {
+
+    // Magic numbers used by gzip header.
+
+const int id1               = 0x1f;
+const int id2               = 0x8b;
+
+} // End namespace magic.
+
+namespace method {
+
+    // Codes used for the 'CM' byte of the gzip header.
+
+const int deflate           = 8;
+
+} // End namespace method.
+
+namespace flags {
+
+    // Codes used for the 'FLG' byte of the gzip header.
+
+const int text              = 1;
+const int header_crc        = 2;
+const int extra             = 4;
+const int name              = 8;
+const int comment           = 16;
+
+} // End namespace flags.
+
+namespace extra_flags {
+
+    // Codes used for the 'XFL' byte of the gzip header.
+
+const int best_compression  = 2;
+const int best_speed        = 4;
+
+} // End namespace extra_flags.
+
+    // Codes used for the 'OS' byte of the gzip header.
+
+const int os_fat            = 0;
+const int os_amiga          = 1;
+const int os_vms            = 2;
+const int os_unix           = 3;
+const int os_vm_cms         = 4;
+const int os_atari          = 5;
+const int os_hpfs           = 6;
+const int os_macintosh      = 7;
+const int os_z_system       = 8;
+const int os_cp_m           = 9;
+const int os_tops_20        = 10;
+const int os_ntfs           = 11;
+const int os_qdos           = 12;
+const int os_acorn          = 13;
+const int os_unknown        = 255;
+
+} // End namespace gzip.
+
+//------------------Definition of gzip_params---------------------------------//
+
+//
+// Class name: gzip_params.
+// Description: Subclass of zlib_params with an additional field
+//      representing a file name.
+//
+struct gzip_params : zlib_params {
+
+    // Non-explicit constructor.
+    gzip_params( int level              = gzip::default_compression,
+                 int method             = gzip::deflated,
+                 int window_bits        = gzip::default_window_bits,
+                 int mem_level          = gzip::default_mem_level,
+                 int strategy           = gzip::default_strategy,
+                 std::string file_name  = "",
+                 std::string comment    = "",
+                 std::time_t mtime      = 0 )
+        : zlib_params(level, method, window_bits, mem_level, strategy),
+          file_name(file_name), comment(comment), mtime(mtime)
+        { }
+    std::string  file_name;
+    std::string  comment;
+    std::time_t  mtime;
+};
+
+//------------------Definition of gzip_error----------------------------------//
+
+//
+// Class name: gzip_error.
+// Description: Subclass of std::ios_base::failure thrown to indicate
+//     zlib errors other than out-of-memory conditions.
+//
+class gzip_error : public BOOST_IOSTREAMS_FAILURE {
+public:
+    explicit gzip_error(int error)
+        : BOOST_IOSTREAMS_FAILURE("gzip error"),
+          error_(error), zlib_error_code_(zlib::okay) { }
+    explicit gzip_error(const zlib_error& e)
+        : BOOST_IOSTREAMS_FAILURE("gzip error"),
+          error_(gzip::zlib_error), zlib_error_code_(e.error())
+        { }
+    int error() const { return error_; }
+    int zlib_error_code() const { return zlib_error_code_; }
+private:
+    int error_;
+    int zlib_error_code_;
+};
+
+//------------------Definition of gzip_compressor-----------------------------//
+
+//
+// Template name: gzip_compressor
+// Description: Model of OutputFilter implementing compression in the
+//      gzip format.
+//
+template<typename Alloc = std::allocator<char> >
+class basic_gzip_compressor : basic_zlib_compressor<Alloc> {
+private:
+    typedef basic_zlib_compressor<Alloc>  base_type;
+public:
+    typedef char char_type;
+    struct category
+        : dual_use,
+          filter_tag,
+          multichar_tag,
+          closable_tag
+        { };
+    basic_gzip_compressor( const gzip_params& = gzip::default_compression,
+                           int buffer_size = default_device_buffer_size );
+
+    template<typename Source>
+    std::streamsize read(Source& src, char_type* s, std::streamsize n)
+    {
+        std::streamsize result = 0;
+
+        // Read header.
+        if (!(flags_ & f_header_done))
+            result += read_string(s, n, header_);
+
+        // Read body.
+        if (!(flags_ & f_body_done)) {
+
+            // Read from basic_zlib_filter.
+            std::streamsize amt = base_type::read(src, s + result, n - result);
+            if (amt != -1) {
+                result += amt;
+                if (amt < n - result) { // Double-check for EOF.
+                    amt = base_type::read(src, s + result, n - result);
+                    if (amt != -1)
+                        result += amt;
+                }
+            }
+            if (amt == -1)
+                prepare_footer();
+        }
+
+        // Read footer.
+        if ((flags_ & f_body_done) != 0 && result < n)
+            result += read_string(s + result, n - result, footer_);
+
+        return result != 0 ? result : -1;
+    }
+
+    template<typename Sink>
+    std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+    {
+        if (!(flags_ & f_header_done)) {
+            std::streamsize amt = 
+                static_cast<std::streamsize>(header_.size() - offset_);
+            offset_ += pdalboost::iostreams::write(snk, header_.data() + offset_, amt);
+            if (offset_ == header_.size())
+                flags_ |= f_header_done;
+            else
+                return 0;
+        }
+        return base_type::write(snk, s, n);
+    }
+
+    template<typename Sink>
+    void close(Sink& snk, BOOST_IOS::openmode m)
+    {
+        try {
+            // Close zlib compressor.
+            base_type::close(snk, m);
+
+            if (m == BOOST_IOS::out) {
+                if (flags_ & f_header_done) {
+
+                    // Write final fields of gzip file format.
+                    write_long(this->crc(), snk);
+                    write_long(this->total_in(), snk);
+                }
+            }
+        } catch(...) {
+            close_impl();
+            throw;
+        }
+        close_impl();
+    }
+private:
+    static gzip_params normalize_params(gzip_params p);
+    void prepare_footer();
+    std::streamsize read_string(char* s, std::streamsize n, std::string& str);
+
+    template<typename Sink>
+    static void write_long(long n, Sink& next, pdalboost::mpl::true_)
+    {
+        pdalboost::iostreams::put(next, static_cast<char>(0xFF & n));
+        pdalboost::iostreams::put(next, static_cast<char>(0xFF & (n >> 8)));
+        pdalboost::iostreams::put(next, static_cast<char>(0xFF & (n >> 16)));
+        pdalboost::iostreams::put(next, static_cast<char>(0xFF & (n >> 24)));
+    }
+    template<typename Sink>
+    static void write_long(long n, Sink& next, pdalboost::mpl::false_)
+    {
+    }
+    template<typename Sink>
+    static void write_long(long n, Sink& next)
+    {
+        typedef typename category_of<Sink>::type category;
+        typedef is_convertible<category, output> can_write;
+        write_long(n, next, can_write());
+    }
+
+    void close_impl()
+    {
+        #if BOOST_WORKAROUND(__GNUC__, == 2) && defined(__STL_CONFIG_H) || \
+            BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) \
+            /**/
+            footer_.erase(0, std::string::npos);
+        #else
+            footer_.clear();
+        #endif
+        offset_ = 0;
+        flags_ = 0;
+    }
+
+    enum state_type {
+        f_header_done = 1,
+        f_body_done = f_header_done << 1,
+        f_footer_done = f_body_done << 1
+    };
+    std::string  header_;
+    std::string  footer_;
+    std::size_t  offset_;
+    int          flags_;
+};
+BOOST_IOSTREAMS_PIPABLE(basic_gzip_compressor, 1)
+
+typedef basic_gzip_compressor<> gzip_compressor;
+
+//------------------Definition of helper templates for decompression----------//
+
+namespace detail {
+
+// Processes gzip headers
+class BOOST_IOSTREAMS_DECL gzip_header {
+public:
+    gzip_header() { reset(); }
+
+    // Members for processing header data
+    void process(char c);
+    bool done() const { return state_ == s_done; }
+    void reset();
+
+    // Members for accessing header data
+    std::string file_name() const { return file_name_; }
+    std::string comment() const { return comment_; }
+    bool text() const { return (flags_ & gzip::flags::text) != 0; }
+    int os() const { return os_; }
+    std::time_t mtime() const { return mtime_; }
+private:
+    enum state_type {
+        s_id1       = 1,
+        s_id2       = s_id1 + 1,
+        s_cm        = s_id2 + 1,
+        s_flg       = s_cm + 1,
+        s_mtime     = s_flg + 1,
+        s_xfl       = s_mtime + 1,
+        s_os        = s_xfl + 1,
+        s_xlen      = s_os + 1,
+        s_extra     = s_xlen + 1,
+        s_name      = s_extra + 1,
+        s_comment   = s_name + 1,
+        s_hcrc      = s_comment + 1,
+        s_done      = s_hcrc + 1
+    };
+    std::string  file_name_;
+    std::string  comment_;
+    int          os_;
+    std::time_t  mtime_;
+    int          flags_;
+    int          state_;
+    int          offset_;  // Offset within fixed-length region.
+    int          xlen_;    // Bytes remaining in extra field.
+};
+
+// Processes gzip footers
+class BOOST_IOSTREAMS_DECL gzip_footer {
+public:
+    gzip_footer() { reset(); }
+    
+    // Members for processing footer data
+    void process(char c);
+    bool done() const { return state_ == s_done; }
+    void reset();
+    
+    // Members for accessing footer data
+    zlib::ulong crc() const { return crc_; }
+    zlib::ulong uncompressed_size() const { return isize_; }
+private:
+    enum state_type {
+        s_crc     = 1,
+        s_isize   = s_crc + 1,
+        s_done    = s_isize + 1
+    };
+    zlib::ulong  crc_;
+    zlib::ulong  isize_;
+    int          state_;
+    int          offset_; 
+};
+
+} // End namespace pdalboost::iostreams::detail.
+
+//------------------Definition of basic_gzip_decompressor---------------------//
+
+//
+// Template name: basic_gzip_decompressor
+// Description: Model of InputFilter implementing compression in the
+//      gzip format.
+//
+template<typename Alloc = std::allocator<char> >
+class basic_gzip_decompressor : basic_zlib_decompressor<Alloc> {
+private:
+    typedef basic_zlib_decompressor<Alloc>   base_type;
+    typedef typename base_type::string_type  string_type;
+public:
+    typedef char char_type;
+    struct category
+        : dual_use,
+          filter_tag,
+          multichar_tag,
+          closable_tag
+        { };
+    basic_gzip_decompressor( int window_bits = gzip::default_window_bits,
+                             int buffer_size = default_device_buffer_size );
+
+    template<typename Sink>
+    std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+    {
+        std::streamsize result = 0;
+        while(result < n) {
+            if(state_ == s_start) {
+                state_ = s_header;
+                header_.reset();
+                footer_.reset();
+            }
+            if (state_ == s_header) {
+                int c = s[result++];
+                header_.process(c);
+                if (header_.done())
+                    state_ = s_body;
+            } else if (state_ == s_body) {
+                try {
+                    std::streamsize amt = 
+                        base_type::write(snk, s + result, n - result);
+                    result += amt;
+                    if (!this->eof()) {
+                        break;
+                    } else {
+                        state_ = s_footer;
+                    }
+                } catch (const zlib_error& e) {
+                    pdalboost::throw_exception(gzip_error(e));
+                }
+            } else { // state_ == s_footer
+                if (footer_.done()) {
+                    if (footer_.crc() != this->crc())
+                        pdalboost::throw_exception(gzip_error(gzip::bad_crc));
+
+                    base_type::close(snk, BOOST_IOS::out);
+                    state_ = s_start;
+                } else {
+                    int c = s[result++];
+                    footer_.process(c);
+                }
+            }
+        }
+        return result;
+    }
+
+    template<typename Source>
+    std::streamsize read(Source& src, char_type* s, std::streamsize n)
+    {
+        typedef char_traits<char>  traits_type;
+        std::streamsize            result = 0;
+        peekable_source<Source>    peek(src, putback_);
+        while (result < n && state_ != s_done) {
+            if (state_ == s_start) {
+                state_ = s_header;
+                header_.reset();
+                footer_.reset();
+            }
+            if (state_ == s_header) {
+                int c = pdalboost::iostreams::get(peek);
+                if (traits_type::is_eof(c)) {
+                    pdalboost::throw_exception(gzip_error(gzip::bad_header));
+                } else if (traits_type::would_block(c)) {
+                    break;
+                }
+                header_.process(c);
+                if (header_.done())
+                    state_ = s_body;
+            } else if (state_ == s_body) {
+                try {
+                    std::streamsize amt = 
+                        base_type::read(peek, s + result, n - result);
+                    if (amt != -1) {
+                        result += amt;
+                        if (amt < n - result)
+                            break;
+                    } else {
+                        peek.putback(this->unconsumed_input());
+                        state_ = s_footer;
+                    }
+                } catch (const zlib_error& e) {
+                    pdalboost::throw_exception(gzip_error(e));
+                }
+            } else { // state_ == s_footer
+                int c = pdalboost::iostreams::get(peek);
+                if (traits_type::is_eof(c)) {
+                    pdalboost::throw_exception(gzip_error(gzip::bad_footer));
+                } else if (traits_type::would_block(c)) {
+                    break;
+                }
+                footer_.process(c);
+                if (footer_.done()) {
+                    if (footer_.crc() != this->crc())
+                        pdalboost::throw_exception(gzip_error(gzip::bad_crc));
+                    int c = pdalboost::iostreams::get(peek);
+                    if (traits_type::is_eof(c)) {
+                        state_ = s_done;
+                    } else {
+                        peek.putback(c);
+                        base_type::close(peek, BOOST_IOS::in);
+                        state_ = s_start;
+                        header_.reset();
+                        footer_.reset();
+                    }
+                }
+            }
+        }
+        if (peek.has_unconsumed_input()) {
+            putback_ = peek.unconsumed_input();
+        } else {
+            putback_.clear();
+        }
+        return result != 0 || state_ != s_done ?
+            result :
+            -1;
+    }
+
+    template<typename Source>
+    void close(Source& src, BOOST_IOS::openmode m)
+    {
+        try {
+            base_type::close(src, m);
+        } catch (const zlib_error& e) {
+            state_ = s_start;
+            pdalboost::throw_exception(gzip_error(e));
+        }
+        if (m == BOOST_IOS::out) {
+            if (state_ == s_start || state_ == s_header)
+                pdalboost::throw_exception(gzip_error(gzip::bad_header));
+            else if (state_ == s_body)
+                pdalboost::throw_exception(gzip_error(gzip::bad_footer));
+            else if (state_ == s_footer) {
+                if (!footer_.done())
+                    pdalboost::throw_exception(gzip_error(gzip::bad_footer));
+                else if(footer_.crc() != this->crc())
+                    pdalboost::throw_exception(gzip_error(gzip::bad_crc));
+            } else {
+                BOOST_ASSERT(!"Bad state");
+            }
+        }
+        state_ = s_start;
+    }
+
+    std::string file_name() const { return header_.file_name(); }
+    std::string comment() const { return header_.comment(); }
+    bool text() const { return header_.text(); }
+    int os() const { return header_.os(); }
+    std::time_t mtime() const { return header_.mtime(); }
+private:
+    static gzip_params make_params(int window_bits);
+
+    // Source adapter allowing an arbitrary character sequence to be put back.
+    template<typename Source>
+    struct peekable_source {
+        typedef char char_type;
+        struct category : source_tag, peekable_tag { };
+        explicit peekable_source(Source& src, const string_type& putback = "") 
+            : src_(src), putback_(putback), offset_(0)
+            { }
+        std::streamsize read(char* s, std::streamsize n)
+        {
+            std::streamsize result = 0;
+
+            // Copy characters from putback buffer
+            std::streamsize pbsize = 
+                static_cast<std::streamsize>(putback_.size());
+            if (offset_ < pbsize) {
+                result = (std::min)(n, pbsize - offset_);
+                BOOST_IOSTREAMS_CHAR_TRAITS(char)::copy(
+                    s, putback_.data() + offset_, result);
+                offset_ += result;
+                if (result == n)
+                    return result;
+            }
+
+            // Read characters from src_
+            std::streamsize amt = 
+                pdalboost::iostreams::read(src_, s + result, n - result);
+            return amt != -1 ? 
+                result + amt : 
+                result ? result : -1;
+        }
+        bool putback(char c)
+        {
+            if (offset_) {
+                putback_[--offset_] = c;
+            } else {
+                pdalboost::throw_exception(
+                    pdalboost::iostreams::detail::bad_putback());
+            }
+            return true;
+        }
+        void putback(const string_type& s)
+        {
+            putback_.replace(0, offset_, s);
+            offset_ = 0;
+        }
+
+        // Returns true if some characters have been putback but not re-read.
+        bool has_unconsumed_input() const 
+        {
+            return offset_ < static_cast<std::streamsize>(putback_.size());
+        }
+
+        // Returns the sequence of characters that have been put back but not re-read.
+        string_type unconsumed_input() const
+        {
+            return string_type(putback_, offset_, putback_.size() - offset_);
+        }
+        Source&          src_;
+        string_type      putback_;
+        std::streamsize  offset_;
+    };
+
+    enum state_type {
+        s_start   = 1,
+        s_header  = s_start + 1,
+        s_body    = s_header + 1,
+        s_footer  = s_body + 1,
+        s_done    = s_footer + 1
+    };
+    detail::gzip_header  header_;
+    detail::gzip_footer  footer_;
+    string_type          putback_;
+    int                  state_;
+};
+BOOST_IOSTREAMS_PIPABLE(basic_gzip_decompressor, 1)
+
+typedef basic_gzip_decompressor<> gzip_decompressor;
+
+//------------------Implementation of gzip_compressor-------------------------//
+
+template<typename Alloc>
+basic_gzip_compressor<Alloc>::basic_gzip_compressor
+    (const gzip_params& p, int buffer_size)
+    : base_type(normalize_params(p), buffer_size),
+      offset_(0), flags_(0)
+{
+    // Calculate gzip header.
+    bool has_name = !p.file_name.empty();
+    bool has_comment = !p.comment.empty();
+
+    std::string::size_type length =
+        10 +
+        (has_name ? p.file_name.size() + 1 : 0) +
+        (has_comment ? p.comment.size() + 1 : 0);
+        // + 2; // Header crc confuses gunzip.
+    int flags =
+        //gzip::flags::header_crc +
+        (has_name ? gzip::flags::name : 0) +
+        (has_comment ? gzip::flags::comment : 0);
+    int extra_flags =
+        ( p.level == zlib::best_compression ?
+              gzip::extra_flags::best_compression :
+              0 ) +
+        ( p.level == zlib::best_speed ?
+              gzip::extra_flags::best_speed :
+              0 );
+    header_.reserve(length);
+    header_ += gzip::magic::id1;                         // ID1.
+    header_ += gzip::magic::id2;                         // ID2.
+    header_ += gzip::method::deflate;                    // CM.
+    header_ += static_cast<char>(flags);                 // FLG.
+    header_ += static_cast<char>(0xFF & p.mtime);        // MTIME.
+    header_ += static_cast<char>(0xFF & (p.mtime >> 8));
+    header_ += static_cast<char>(0xFF & (p.mtime >> 16));
+    header_ += static_cast<char>(0xFF & (p.mtime >> 24));
+    header_ += static_cast<char>(extra_flags);           // XFL.
+    header_ += static_cast<char>(gzip::os_unknown);      // OS.
+    if (has_name) {
+        header_ += p.file_name;
+        header_ += '\0';
+    }
+    if (has_comment) {
+        header_ += p.comment;
+        header_ += '\0';
+    }
+}
+
+template<typename Alloc>
+gzip_params basic_gzip_compressor<Alloc>::normalize_params(gzip_params p)
+{
+    p.noheader = true;
+    p.calculate_crc = true;
+    return p;
+}
+
+template<typename Alloc>
+void basic_gzip_compressor<Alloc>::prepare_footer()
+{
+    pdalboost::iostreams::back_insert_device<std::string> out(footer_);
+    write_long(this->crc(), out);
+    write_long(this->total_in(), out);
+    flags_ |= f_body_done;
+    offset_ = 0;
+}
+
+template<typename Alloc>
+std::streamsize basic_gzip_compressor<Alloc>::read_string
+    (char* s, std::streamsize n, std::string& str)
+{
+    std::streamsize avail =
+        static_cast<std::streamsize>(str.size() - offset_);
+    std::streamsize amt = (std::min)(avail, n);
+    std::copy( str.data() + offset_,
+               str.data() + offset_ + amt,
+               s );
+    offset_ += amt;
+    if ( !(flags_ & f_header_done) &&
+         offset_ == static_cast<std::size_t>(str.size()) )
+    {
+        flags_ |= f_header_done;
+    }
+    return amt;
+}
+
+//------------------Implementation of gzip_decompressor-----------------------//
+
+template<typename Alloc>
+basic_gzip_decompressor<Alloc>::basic_gzip_decompressor
+    (int window_bits, int buffer_size)
+    : base_type(make_params(window_bits), buffer_size),
+      state_(s_start)
+    { }
+
+template<typename Alloc>
+gzip_params basic_gzip_decompressor<Alloc>::make_params(int window_bits)
+{
+    gzip_params p;
+    p.window_bits = window_bits;
+    p.noheader = true;
+    p.calculate_crc = true;
+    return p;
+}
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_GZIP_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/filter/line.hpp b/vendor/pdalboost/boost/iostreams/filter/line.hpp
new file mode 100644
index 0000000..230f922
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/filter/line.hpp
@@ -0,0 +1,227 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_LINE_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_LINE_FILTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <algorithm>                               // min.
+#include <boost/assert.hpp>
+#include <memory>                                  // allocator.
+#include <string>
+#include <boost/config.hpp>                        // BOOST_STATIC_CONSTANT.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/checked_operations.hpp>
+#include <boost/iostreams/detail/ios.hpp>          // openmode, streamsize.
+#include <boost/iostreams/read.hpp>                // check_eof 
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/iostreams/write.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // VC7.1 C4244.
+
+namespace pdalboost { namespace iostreams {
+
+//
+// Template name: line_filter.
+// Template parameters:
+//      Ch - The character type.
+//      Alloc - The allocator type.
+// Description: Filter which processes data one line at a time.
+//
+template< typename Ch,
+          typename Alloc =
+          #if BOOST_WORKAROUND(__GNUC__, < 3)
+              typename std::basic_string<Ch>::allocator_type
+          #else
+              std::allocator<Ch>
+          #endif
+          >
+class basic_line_filter {
+private:
+    typedef typename std::basic_string<Ch>::traits_type  string_traits;
+public:
+    typedef Ch                                           char_type;
+    typedef char_traits<char_type>                       traits_type;
+    typedef std::basic_string<
+                Ch,
+                string_traits,
+                Alloc
+            >                                            string_type;
+    struct category
+        : dual_use,
+          filter_tag,
+          multichar_tag,
+          closable_tag
+        { };
+protected:
+    basic_line_filter(bool suppress_newlines = false) 
+        : pos_(string_type::npos), 
+          flags_(suppress_newlines ? f_suppress : 0) 
+        { }
+public:
+    virtual ~basic_line_filter() { }
+
+    template<typename Source>
+    std::streamsize read(Source& src, char_type* s, std::streamsize n)
+    {
+        using namespace std;
+        BOOST_ASSERT(!(flags_ & f_write));
+        flags_ |= f_read;
+
+        // Handle unfinished business.
+        std::streamsize result = 0;
+        if (!cur_line_.empty() && (result = read_line(s, n)) == n)
+            return n;
+
+        typename traits_type::int_type status = traits_type::good();
+        while (result < n && !traits_type::is_eof(status)) {
+
+            // Call next_line() to retrieve a line of filtered text, and
+            // read_line() to copy it into buffer s.
+            if (traits_type::would_block(status = next_line(src)))
+                return result;
+            result += read_line(s + result, n - result);
+        }
+
+        return detail::check_eof(result);
+    }
+
+    template<typename Sink>
+    std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+    {
+        using namespace std;
+        BOOST_ASSERT(!(flags_ & f_read));
+        flags_ |= f_write;
+
+        // Handle unfinished business.
+        if (pos_ != string_type::npos && !write_line(snk))
+            return 0;
+
+        const char_type *cur = s, *next;
+        while (true) {
+
+            // Search for the next full line in [cur, s + n), filter it
+            // and write it to snk.
+            typename string_type::size_type rest = n - (cur - s);
+            if ((next = traits_type::find(cur, rest, traits_type::newline()))) {
+                cur_line_.append(cur, next - cur);
+                cur = next + 1;
+                if (!write_line(snk))
+                    return static_cast<std::streamsize>(cur - s);
+            } else {
+                cur_line_.append(cur, rest);
+                return n;
+            }
+        }
+    }
+
+    template<typename Sink>
+    void close(Sink& snk, BOOST_IOS::openmode which)
+    {
+        if ((flags_ & f_read) && which == BOOST_IOS::in)
+            close_impl();
+
+        if ((flags_ & f_write) && which == BOOST_IOS::out) {
+            try {
+                if (!cur_line_.empty())
+                    write_line(snk);
+            } catch (...) {
+                try {
+                    close_impl();
+                } catch (...) { }
+                throw;
+            }
+            close_impl();
+        }
+    }
+private:
+    virtual string_type do_filter(const string_type& line) = 0;
+
+    // Copies filtered characters fron the current line into
+    // the given buffer.
+    std::streamsize read_line(char_type* s, std::streamsize n)
+    {
+        using namespace std;
+        std::streamsize result =
+            (std::min) (n, static_cast<std::streamsize>(cur_line_.size()));
+        traits_type::copy(s, cur_line_.data(), result);
+        cur_line_.erase(0, result);
+        return result;
+    }
+
+    // Attempts to retrieve a line of text from the given source; returns
+    // an int_type as a good/eof/would_block status code.
+    template<typename Source>
+    typename traits_type::int_type next_line(Source& src)
+    {
+        using namespace std;
+        typename traits_type::int_type c;
+        while ( traits_type::is_good(c = iostreams::get(src)) &&
+                c != traits_type::newline() )
+        {
+            cur_line_ += traits_type::to_int_type(c);
+        }
+        if (!traits_type::would_block(c)) {
+            if (!cur_line_.empty() || c == traits_type::newline())
+                cur_line_ = do_filter(cur_line_);
+            if (c == traits_type::newline() && (flags_ & f_suppress) == 0)
+                cur_line_ += c;
+        }
+        return c; // status indicator.
+    }
+
+    // Filters the current line and attemps to write it to the given sink.
+    // Returns true for success.
+    template<typename Sink>
+    bool write_line(Sink& snk)
+    {
+        string_type line = do_filter(cur_line_);
+        if ((flags_ & f_suppress) == 0)
+            line += traits_type::newline();
+        std::streamsize amt = static_cast<std::streamsize>(line.size());
+        bool result = iostreams::write_if(snk, line.data(), amt) == amt;
+        if (result)
+            clear();
+        return result;
+    }
+
+    void close_impl()
+    {
+        clear();
+        flags_ &= f_suppress;
+    }
+
+    void clear()
+    {
+        cur_line_.erase();
+        pos_ = string_type::npos;
+    }
+
+    enum flag_type {
+        f_read      = 1,
+        f_write     = f_read << 1,
+        f_suppress  = f_write << 1
+    };
+
+    string_type                      cur_line_;
+    typename string_type::size_type  pos_;
+    int                              flags_;
+};
+BOOST_IOSTREAMS_PIPABLE(basic_line_filter, 2)
+
+typedef basic_line_filter<char>     line_filter;
+typedef basic_line_filter<wchar_t>  wline_filter;
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_LINE_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/filter/newline.hpp b/vendor/pdalboost/boost/iostreams/filter/newline.hpp
new file mode 100644
index 0000000..ba98ecb
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/filter/newline.hpp
@@ -0,0 +1,442 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// NOTE: I hope to replace the current implementation with a much simpler
+// one.
+
+#ifndef BOOST_IOSTREAMS_NEWLINE_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_NEWLINE_FILTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <cstdio>
+#include <stdexcept>                       // logic_error.
+#include <boost/config.hpp>                // BOOST_STATIC_CONSTANT.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp>  // BOOST_IOSTREAMS_FAILURE 
+#include <boost/iostreams/read.hpp>        // get 
+#include <boost/iostreams/write.hpp>       // put 
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/iostreams/putback.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+#define BOOST_IOSTREAMS_ASSERT_UNREACHABLE(val) \
+    (BOOST_ASSERT("unreachable code" == 0), val) \
+    /**/
+
+namespace pdalboost { namespace iostreams {
+
+namespace newline {
+
+const char CR                   = 0x0D;
+const char LF                   = 0x0A;
+
+    // Flags for configuring newline_filter.
+
+// Exactly one of the following three flags must be present.
+
+const int posix             = 1;    // Use CR as line separator.
+const int mac               = 2;    // Use LF as line separator.
+const int dos               = 4;    // Use CRLF as line separator.
+const int mixed             = 8;    // Mixed line endings.
+const int final_newline     = 16;
+const int platform_mask     = posix | dos | mac;
+
+} // End namespace newline.
+
+namespace detail {
+
+class newline_base {
+public:
+    bool is_posix() const
+    {
+        return !is_mixed() && (flags_ & newline::posix) != 0;
+    }
+    bool is_dos() const
+    {
+        return !is_mixed() && (flags_ & newline::dos) != 0;
+    }
+    bool is_mac() const
+    {
+        return !is_mixed() && (flags_ & newline::mac) != 0;
+    }
+    bool is_mixed_posix() const { return (flags_ & newline::posix) != 0; }
+    bool is_mixed_dos() const { return (flags_ & newline::dos) != 0; }
+    bool is_mixed_mac() const { return (flags_ & newline::mac) != 0; }
+    bool is_mixed() const
+    {
+        int platform =
+            (flags_ & newline::posix) != 0 ?
+                newline::posix :
+                (flags_ & newline::dos) != 0 ?
+                    newline::dos :
+                    (flags_ & newline::mac) != 0 ?
+                        newline::mac :
+                        0;
+        return (flags_ & ~platform & newline::platform_mask) != 0;
+    }
+    bool has_final_newline() const
+    {
+        return (flags_ & newline::final_newline) != 0;
+    }
+protected:
+    newline_base(int flags) : flags_(flags) { }
+    int flags_;
+};
+
+} // End namespace detail.
+
+class newline_error
+    : public BOOST_IOSTREAMS_FAILURE, public detail::newline_base
+{
+private:
+    friend class newline_checker;
+    newline_error(int flags)
+        : BOOST_IOSTREAMS_FAILURE("bad line endings"),
+          detail::newline_base(flags)
+        { }
+};
+
+class newline_filter {
+public:
+    typedef char char_type;
+    struct category
+        : dual_use,
+          filter_tag,
+          closable_tag
+        { };
+
+    explicit newline_filter(int target) : flags_(target)
+    {
+        if ( target != iostreams::newline::posix &&
+             target != iostreams::newline::dos &&
+             target != iostreams::newline::mac )
+        {
+            pdalboost::throw_exception(std::logic_error("bad flags"));
+        }
+    }
+
+    template<typename Source>
+    int get(Source& src)
+    {
+        using iostreams::newline::CR;
+        using iostreams::newline::LF;
+
+        BOOST_ASSERT((flags_ & f_write) == 0);
+        flags_ |= f_read;
+
+        if (flags_ & (f_has_LF | f_has_EOF)) {
+            if (flags_ & f_has_LF)
+                return newline();
+            else
+                return EOF;
+        }
+
+        int c =
+            (flags_ & f_has_CR) == 0 ?
+                iostreams::get(src) :
+                CR;
+
+        if (c == WOULD_BLOCK )
+            return WOULD_BLOCK;
+
+        if (c == CR) {
+            flags_ |= f_has_CR;
+
+            int d;
+            if ((d = iostreams::get(src)) == WOULD_BLOCK)
+                return WOULD_BLOCK;
+
+            if (d == LF) {
+                flags_ &= ~f_has_CR;
+                return newline();
+            }
+
+            if (d == EOF) {
+                flags_ |= f_has_EOF;
+            } else {
+                iostreams::putback(src, d);
+            }
+
+            flags_ &= ~f_has_CR;
+            return newline();
+        }
+
+        if (c == LF)
+            return newline();
+
+        return c;
+    }
+
+    template<typename Sink>
+    bool put(Sink& dest, char c)
+    {
+        using iostreams::newline::CR;
+        using iostreams::newline::LF;
+
+        BOOST_ASSERT((flags_ & f_read) == 0);
+        flags_ |= f_write;
+
+        if ((flags_ & f_has_LF) != 0)
+            return c == LF ?
+                newline(dest) :
+                newline(dest) && this->put(dest, c);
+
+        if (c == LF)
+           return newline(dest);
+
+        if ((flags_ & f_has_CR) != 0)
+            return newline(dest) ?
+                this->put(dest, c) :
+                false;
+
+        if (c == CR) {
+            flags_ |= f_has_CR;
+            return true;
+        }
+
+        return iostreams::put(dest, c);
+    }
+
+    template<typename Sink>
+    void close(Sink& dest, BOOST_IOS::openmode)
+    {
+        typedef typename iostreams::category_of<Sink>::type category;
+        if ((flags_ & f_write) != 0 && (flags_ & f_has_CR) != 0)
+            newline_if_sink(dest);
+        flags_ &= ~f_has_LF; // Restore original flags.
+    }
+private:
+
+    // Returns the appropriate element of a newline sequence.
+    int newline()
+    {
+        using iostreams::newline::CR;
+        using iostreams::newline::LF;
+
+        switch (flags_ & iostreams::newline::platform_mask) {
+        case iostreams::newline::posix:
+            return LF;
+        case iostreams::newline::mac:
+            return CR;
+        case iostreams::newline::dos:
+            if (flags_ & f_has_LF) {
+                flags_ &= ~f_has_LF;
+                return LF;
+            } else {
+                flags_ |= f_has_LF;
+                return CR;
+            }
+        }
+        return BOOST_IOSTREAMS_ASSERT_UNREACHABLE(0);
+    }
+
+    // Writes a newline sequence.
+    template<typename Sink>
+    bool newline(Sink& dest)
+    {
+        using iostreams::newline::CR;
+        using iostreams::newline::LF;
+
+        bool success = false;
+        switch (flags_ & iostreams::newline::platform_mask) {
+        case iostreams::newline::posix:
+            success = pdalboost::iostreams::put(dest, LF);
+            break;
+        case iostreams::newline::mac:
+            success = pdalboost::iostreams::put(dest, CR);
+            break;
+        case iostreams::newline::dos:
+            if ((flags_ & f_has_LF) != 0) {
+                if ((success = pdalboost::iostreams::put(dest, LF)))
+                    flags_ &= ~f_has_LF;
+            } else if (pdalboost::iostreams::put(dest, CR)) {
+                if (!(success = pdalboost::iostreams::put(dest, LF)))
+                    flags_ |= f_has_LF;
+            }
+            break;
+        }
+        if (success)
+            flags_ &= ~f_has_CR;
+        return success;
+    }
+
+    // Writes a newline sequence if the given device is a Sink.
+    template<typename Device>
+    void newline_if_sink(Device& dest) 
+    { 
+        typedef typename iostreams::category_of<Device>::type category;
+        newline_if_sink(dest, is_convertible<category, output>()); 
+    }
+
+    template<typename Sink>
+    void newline_if_sink(Sink& dest, mpl::true_) { newline(dest); }
+
+    template<typename Source>
+    void newline_if_sink(Source&, mpl::false_) { }
+
+    enum flags {
+        f_has_LF         = 32768,
+        f_has_CR         = f_has_LF << 1,
+        f_has_newline    = f_has_CR << 1,
+        f_has_EOF        = f_has_newline << 1,
+        f_read           = f_has_EOF << 1,
+        f_write          = f_read << 1
+    };
+    int       flags_;
+};
+BOOST_IOSTREAMS_PIPABLE(newline_filter, 0)
+
+class newline_checker : public detail::newline_base {
+public:
+    typedef char                 char_type;
+    struct category
+        : dual_use_filter_tag,
+          closable_tag
+        { };
+    explicit newline_checker(int target = newline::mixed)
+        : detail::newline_base(0), target_(target), open_(false)
+        { }
+    template<typename Source>
+    int get(Source& src)
+    {
+        using newline::CR;
+        using newline::LF;
+
+        if (!open_) {
+            open_ = true;
+            source() = 0;
+        }
+
+        int c;
+        if ((c = iostreams::get(src)) == WOULD_BLOCK)
+            return WOULD_BLOCK;
+
+        // Update source flags.
+        if (c != EOF)
+            source() &= ~f_line_complete;
+        if ((source() & f_has_CR) != 0) {
+            if (c == LF) {
+                source() |= newline::dos;
+                source() |= f_line_complete;
+            } else {
+                source() |= newline::mac;
+                if (c == EOF)
+                    source() |= f_line_complete;
+            }
+        } else if (c == LF) {
+            source() |= newline::posix;
+            source() |= f_line_complete;
+        }
+        source() = (source() & ~f_has_CR) | (c == CR ? f_has_CR : 0);
+
+        // Check for errors.
+        if ( c == EOF &&
+            (target_ & newline::final_newline) != 0 &&
+            (source() & f_line_complete) == 0 )
+        {
+            fail();
+        }
+        if ( (target_ & newline::platform_mask) != 0 &&
+             (source() & ~target_ & newline::platform_mask) != 0 )
+        {
+            fail();
+        }
+
+        return c;
+    }
+
+    template<typename Sink>
+    bool put(Sink& dest, int c)
+    {
+        using iostreams::newline::CR;
+        using iostreams::newline::LF;
+
+        if (!open_) {
+            open_ = true;
+            source() = 0;
+        }
+
+        if (!iostreams::put(dest, c))
+            return false;
+
+         // Update source flags.
+        source() &= ~f_line_complete;
+        if ((source() & f_has_CR) != 0) {
+            if (c == LF) {
+                source() |= newline::dos;
+                source() |= f_line_complete;
+            } else {
+                source() |= newline::mac;
+            }
+        } else if (c == LF) {
+            source() |= newline::posix;
+            source() |= f_line_complete;
+        }
+        source() = (source() & ~f_has_CR) | (c == CR ? f_has_CR : 0);
+
+        // Check for errors.
+        if ( (target_ & newline::platform_mask) != 0 &&
+             (source() & ~target_ & newline::platform_mask) != 0 )
+        {
+            fail();
+        }
+
+        return true;
+    }
+
+    template<typename Sink>
+    void close(Sink&, BOOST_IOS::openmode)
+    {
+        using iostreams::newline::final_newline;
+
+        // Update final_newline flag.
+        if ( (source() & f_has_CR) != 0 ||
+             (source() & f_line_complete) != 0 )
+        {
+            source() |= final_newline;
+        }
+
+        // Clear non-sticky flags.
+        source() &= ~(f_has_CR | f_line_complete);
+
+        // Check for errors.
+        if ( (target_ & final_newline) != 0 &&
+             (source() & final_newline) == 0 )
+        {
+            fail();
+        }
+    }
+private:
+    void fail() { pdalboost::throw_exception(newline_error(source())); }
+    int& source() { return flags_; }
+    int source() const { return flags_; }
+
+    enum flags {
+        f_has_CR = 32768,
+        f_line_complete = f_has_CR << 1
+    };
+
+    int   target_;  // Represents expected input.
+    bool  open_;
+};
+BOOST_IOSTREAMS_PIPABLE(newline_checker, 0)
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_NEWLINE_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/filter/regex.hpp b/vendor/pdalboost/boost/iostreams/filter/regex.hpp
new file mode 100644
index 0000000..763b62c
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/filter/regex.hpp
@@ -0,0 +1,98 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_REGEX_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_REGEX_FILTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <memory>                         // allocator.
+#include <boost/function.hpp>        
+#include <boost/iostreams/filter/aggregate.hpp>              
+#include <boost/iostreams/pipeline.hpp>                
+#include <boost/regex.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+template< typename Ch,
+          typename Tr = regex_traits<Ch>,
+          typename Alloc = std::allocator<Ch> >
+class basic_regex_filter : public aggregate_filter<Ch, Alloc> {
+private:
+    typedef aggregate_filter<Ch, Alloc>                 base_type;
+public:
+    typedef typename base_type::char_type              char_type;
+    typedef typename base_type::category               category;
+    typedef std::basic_string<Ch>                      string_type;
+    typedef basic_regex<Ch, Tr>                        regex_type;
+    typedef regex_constants::match_flag_type           flag_type;
+    typedef match_results<const Ch*>                   match_type;
+    typedef function1<string_type, const match_type&>  formatter;
+
+    basic_regex_filter( const regex_type& re,
+                        const formatter& replace,
+                        flag_type flags = regex_constants::match_default )
+        : re_(re), replace_(replace), flags_(flags) { }
+    basic_regex_filter( const regex_type& re,
+                        const string_type& fmt,
+                        flag_type flags = regex_constants::match_default,
+                        flag_type fmt_flags = regex_constants::format_default )
+        : re_(re), replace_(simple_formatter(fmt, fmt_flags)), flags_(flags) { }
+    basic_regex_filter( const regex_type& re,
+                        const char_type* fmt,
+                        flag_type flags = regex_constants::match_default,
+                        flag_type fmt_flags = regex_constants::format_default )
+        : re_(re), replace_(simple_formatter(fmt, fmt_flags)), flags_(flags) { }
+private:
+    typedef typename base_type::vector_type       vector_type;
+    void do_filter(const vector_type& src, vector_type& dest)
+        {
+            typedef regex_iterator<const Ch*, Ch, Tr> iterator;
+            if (src.empty())
+                return;
+            iterator first(&src[0], &src[0] + src.size(), re_, flags_);
+            iterator last;
+            const Ch* suffix = 0;
+            for (; first != last; ++first) {
+                dest.insert( dest.end(), 
+                             first->prefix().first,
+                             first->prefix().second );
+                string_type replacement = replace_(*first);
+                dest.insert( dest.end(), 
+                             replacement.begin(),
+                             replacement.end() );
+                suffix = first->suffix().first;
+            }
+            if (suffix) {
+                dest.insert(dest.end(), suffix, &src[0] + src.size());
+            } else {
+                dest.insert(dest.end(), &src[0], &src[0] + src.size());
+            }
+        }
+    struct simple_formatter {
+        simple_formatter(const string_type& fmt, flag_type fmt_flags) 
+            : fmt_(fmt), fmt_flags_(fmt_flags) { }
+        string_type operator() (const match_type& match) const
+        { return match.format(fmt_, fmt_flags_); }
+        string_type  fmt_;
+        flag_type    fmt_flags_;
+    };
+    regex_type  re_;
+    formatter   replace_;
+    flag_type   flags_;
+};
+BOOST_IOSTREAMS_PIPABLE(basic_regex_filter, 3)
+
+typedef basic_regex_filter<char>     regex_filter;
+typedef basic_regex_filter<wchar_t>  wregex_filter;
+
+
+} } // End namespaces iostreams, boost.
+
+#endif      // #ifndef BOOST_IOSTREAMS_REGEX_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/filter/stdio.hpp b/vendor/pdalboost/boost/iostreams/filter/stdio.hpp
new file mode 100644
index 0000000..8b90000
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/filter/stdio.hpp
@@ -0,0 +1,84 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Based on the work of Christopher Diggins.
+
+#ifndef BOOST_IOSTREAMS_STDIO_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_STDIO_FILTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <iostream>
+#include <memory>    // allocator.
+#include <vector>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/device/back_inserter.hpp>
+#include <boost/iostreams/filter/aggregate.hpp>
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/iostreams/stream_buffer.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+} // End namespace detail.
+
+template<typename Ch, typename Alloc = std::allocator<Ch> >
+class basic_stdio_filter : public aggregate_filter<Ch, Alloc> {
+private:
+    typedef aggregate_filter<Ch, Alloc>       base_type;
+public:
+    typedef typename base_type::char_type    char_type;
+    typedef typename base_type::category     category;
+    typedef typename base_type::vector_type  vector_type;
+private:
+    static std::istream& standard_input(char*) { return std::cin; }
+    static std::ostream& standard_output(char*) { return std::cout; }
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+    static std::wistream& standard_input(wchar_t*) { return std::wcin; }
+    static std::wostream& standard_output(wchar_t*) { return std::wcout; }
+#endif // BOOST_IOSTREAMS_NO_WIDE_STREAMS
+
+    struct scoped_redirector { // Thanks to Maxim Egorushkin.
+        typedef BOOST_IOSTREAMS_CHAR_TRAITS(Ch)                  traits_type;
+        typedef BOOST_IOSTREAMS_BASIC_IOS(Ch, traits_type)       ios_type;
+        typedef BOOST_IOSTREAMS_BASIC_STREAMBUF(Ch, traits_type) streambuf_type;
+        scoped_redirector( ios_type& ios,
+                           streambuf_type* newbuf )
+            : ios_(ios), old_(ios.rdbuf(newbuf))
+            { }
+        ~scoped_redirector() { ios_.rdbuf(old_); }
+        scoped_redirector& operator=(const scoped_redirector&);
+        ios_type&        ios_;
+        streambuf_type*  old_;
+    };
+
+    virtual void do_filter() = 0;
+    virtual void do_filter(const vector_type& src, vector_type& dest)
+    {
+        stream_buffer< basic_array_source<Ch> >
+                          srcbuf(&src[0], &src[0] + src.size());
+        stream_buffer< back_insert_device<vector_type> >
+                          destbuf(iostreams::back_inserter(dest));
+        scoped_redirector redirect_input(standard_input((Ch*)0), &srcbuf);
+        scoped_redirector redirect_output(standard_output((Ch*)0), &destbuf);
+        do_filter();
+    }
+};
+BOOST_IOSTREAMS_PIPABLE(basic_stdio_filter, 2)
+
+typedef basic_stdio_filter<char>     stdio_filter;
+typedef basic_stdio_filter<wchar_t>  wstdio_wfilter;
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_STDIO_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/filter/symmetric.hpp b/vendor/pdalboost/boost/iostreams/filter/symmetric.hpp
new file mode 100644
index 0000000..2682591
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/filter/symmetric.hpp
@@ -0,0 +1,310 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains the definitions of the class templates symmetric_filter,
+// which models DualUseFilter based on a model of the Symmetric Filter.
+
+//
+// Roughly, a Symmetric Filter is a class type with the following interface:
+//
+//   struct symmetric_filter {
+//       typedef xxx char_type;
+//
+//       bool filter( const char*& begin_in, const char* end_in,
+//                    char*& begin_out, char* end_out, bool flush )
+//       {
+//          // Consume as many characters as possible from the interval
+//          // [begin_in, end_in), without exhausting the output range
+//          // [begin_out, end_out). If flush is true, write as mush output
+//          // as possible. 
+//          // A return value of true indicates that filter should be called 
+//          // again. More precisely, if flush is false, a return value of 
+//          // false indicates that the natural end of stream has been reached
+//          // and that all filtered data has been forwarded; if flush is
+//          // true, a return value of false indicates that all filtered data 
+//          // has been forwarded.
+//       }
+//       void close() { /* Reset filter's state. */ }
+//   };
+//
+// Symmetric Filter filters need not be CopyConstructable.
+//
+
+#ifndef BOOST_IOSTREAMS_SYMMETRIC_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_SYMMETRIC_FILTER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <memory>                               // allocator, auto_ptr.
+#include <boost/config.hpp>                     // BOOST_DEDUCED_TYPENAME.
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/constants.hpp>        // buffer size.
+#include <boost/iostreams/detail/buffer.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/config/limits.hpp>
+#include <boost/iostreams/detail/template_params.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/iostreams/operations.hpp>       // read, write.
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/shared_ptr.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>  // MSVC.
+
+namespace pdalboost { namespace iostreams {
+
+template< typename SymmetricFilter,
+          typename Alloc =
+              std::allocator<
+                  BOOST_DEDUCED_TYPENAME char_type_of<SymmetricFilter>::type
+              > >
+class symmetric_filter {
+public:
+    typedef typename char_type_of<SymmetricFilter>::type      char_type;
+    typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type)            traits_type;
+    typedef std::basic_string<char_type, traits_type, Alloc>  string_type;
+    struct category
+        : dual_use,
+          filter_tag,
+          multichar_tag,
+          closable_tag
+        { };
+
+    // Expands to a sequence of ctors which forward to impl.
+    #define BOOST_PP_LOCAL_MACRO(n) \
+        BOOST_IOSTREAMS_TEMPLATE_PARAMS(n, T) \
+        explicit symmetric_filter( \
+              int buffer_size BOOST_PP_COMMA_IF(n) \
+              BOOST_PP_ENUM_BINARY_PARAMS(n, const T, &t) ) \
+            : pimpl_(new impl(buffer_size BOOST_PP_COMMA_IF(n) \
+                     BOOST_PP_ENUM_PARAMS(n, t))) \
+            { BOOST_ASSERT(buffer_size > 0); } \
+        /**/
+    #define BOOST_PP_LOCAL_LIMITS (0, BOOST_IOSTREAMS_MAX_FORWARDING_ARITY)
+    #include BOOST_PP_LOCAL_ITERATE()
+    #undef BOOST_PP_LOCAL_MACRO
+
+    template<typename Source>
+    std::streamsize read(Source& src, char_type* s, std::streamsize n)
+    {
+        using namespace std;
+        if (!(state() & f_read))
+            begin_read();
+
+        buffer_type&  buf = pimpl_->buf_;
+        int           status = (state() & f_eof) != 0 ? f_eof : f_good;
+        char_type    *next_s = s,
+                     *end_s = s + n;
+        while (true)
+        {
+            // Invoke filter if there are unconsumed characters in buffer or if
+            // filter must be flushed.
+            bool flush = status == f_eof;
+            if (buf.ptr() != buf.eptr() || flush) {
+                const char_type* next = buf.ptr();
+                bool done =
+                    !filter().filter(next, buf.eptr(), next_s, end_s, flush);
+                buf.ptr() = buf.data() + (next - buf.data());
+                if (done)
+                    return detail::check_eof(
+                               static_cast<std::streamsize>(next_s - s)
+                           );
+            }
+
+            // If no more characters are available without blocking, or
+            // if read request has been satisfied, return.
+            if ( (status == f_would_block && buf.ptr() == buf.eptr()) ||
+                 next_s == end_s )
+            {
+                return static_cast<std::streamsize>(next_s - s);
+            }
+
+            // Fill buffer.
+            if (status == f_good)
+                status = fill(src);
+        }
+    }
+
+    template<typename Sink>
+    std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+    {
+        if (!(state() & f_write))
+            begin_write();
+
+        buffer_type&     buf = pimpl_->buf_;
+        const char_type *next_s, *end_s;
+        for (next_s = s, end_s = s + n; next_s != end_s; ) {
+            if (buf.ptr() == buf.eptr() && !flush(snk))
+                break;
+            if(!filter().filter(next_s, end_s, buf.ptr(), buf.eptr(), false)) {
+                flush(snk);
+                break;
+            }
+        }
+        return static_cast<std::streamsize>(next_s - s);
+    }
+
+    template<typename Sink>
+    void close(Sink& snk, BOOST_IOS::openmode mode)
+    {
+        if (mode == BOOST_IOS::out) {
+
+            if (!(state() & f_write))
+                begin_write();
+
+            // Repeatedly invoke filter() with no input.
+            try {
+                buffer_type&     buf = pimpl_->buf_;
+                char_type        dummy;
+                const char_type* end = &dummy;
+                bool             again = true;
+                while (again) {
+                    if (buf.ptr() != buf.eptr())
+                        again = filter().filter( end, end, buf.ptr(),
+                                                 buf.eptr(), true );
+                    flush(snk);
+                }
+            } catch (...) {
+                try { close_impl(); } catch (...) { }
+                throw;
+            }
+            close_impl();
+        } else {
+            close_impl();
+        }
+    }
+    SymmetricFilter& filter() { return *pimpl_; }
+    string_type unconsumed_input() const;
+
+// Give impl access to buffer_type on Tru64
+#if !BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042)) 
+    private:
+#endif
+    typedef detail::buffer<char_type, Alloc> buffer_type;
+private:
+    buffer_type& buf() { return pimpl_->buf_; }
+    const buffer_type& buf() const { return pimpl_->buf_; }
+    int& state() { return pimpl_->state_; }
+    void begin_read();
+    void begin_write();
+
+    template<typename Source>
+    int fill(Source& src)
+    {
+        std::streamsize amt = iostreams::read(src, buf().data(), buf().size());
+        if (amt == -1) {
+            state() |= f_eof;
+            return f_eof;
+        }
+        buf().set(0, amt);
+        return amt != 0 ? f_good : f_would_block;
+    }
+
+    // Attempts to write the contents of the buffer the given Sink.
+    // Returns true if at least on character was written.
+    template<typename Sink>
+    bool flush(Sink& snk)
+    {
+        typedef typename iostreams::category_of<Sink>::type  category;
+        typedef is_convertible<category, output>             can_write;
+        return flush(snk, can_write());
+    }
+
+    template<typename Sink>
+    bool flush(Sink& snk, mpl::true_)
+    {
+        std::streamsize amt =
+            static_cast<std::streamsize>(buf().ptr() - buf().data());
+        std::streamsize result =
+            pdalboost::iostreams::write(snk, buf().data(), amt);
+        if (result < amt && result > 0)
+            traits_type::move(buf().data(), buf().data() + result, amt - result);
+        buf().set(amt - result, buf().size());
+        return result != 0;
+    }
+
+    template<typename Sink>
+    bool flush(Sink&, mpl::false_) { return true;}
+
+    void close_impl();
+
+    enum flag_type {
+        f_read   = 1,
+        f_write  = f_read << 1,
+        f_eof    = f_write << 1,
+        f_good,
+        f_would_block
+    };
+
+    struct impl : SymmetricFilter {
+
+    // Expands to a sequence of ctors which forward to SymmetricFilter.
+    #define BOOST_PP_LOCAL_MACRO(n) \
+        BOOST_IOSTREAMS_TEMPLATE_PARAMS(n, T) \
+        impl( int buffer_size BOOST_PP_COMMA_IF(n) \
+              BOOST_PP_ENUM_BINARY_PARAMS(n, const T, &t) ) \
+            : SymmetricFilter(BOOST_PP_ENUM_PARAMS(n, t)), \
+              buf_(buffer_size), state_(0) \
+            { } \
+        /**/
+    #define BOOST_PP_LOCAL_LIMITS (0, BOOST_IOSTREAMS_MAX_FORWARDING_ARITY)
+    #include BOOST_PP_LOCAL_ITERATE()
+    #undef BOOST_PP_LOCAL_MACRO
+
+        buffer_type  buf_;
+        int          state_;
+    };
+
+    shared_ptr<impl> pimpl_;
+};
+BOOST_IOSTREAMS_PIPABLE(symmetric_filter, 2)
+
+//------------------Implementation of symmetric_filter----------------//
+
+template<typename SymmetricFilter, typename Alloc>
+void symmetric_filter<SymmetricFilter, Alloc>::begin_read()
+{
+    BOOST_ASSERT(!(state() & f_write));
+    state() |= f_read;
+    buf().set(0, 0);
+}
+
+template<typename SymmetricFilter, typename Alloc>
+void symmetric_filter<SymmetricFilter, Alloc>::begin_write()
+{
+    BOOST_ASSERT(!(state() & f_read));
+    state() |= f_write;
+    buf().set(0, buf().size());
+}
+
+template<typename SymmetricFilter, typename Alloc>
+void symmetric_filter<SymmetricFilter, Alloc>::close_impl()
+{
+    state() = 0;
+    buf().set(0, 0);
+    filter().close();
+}
+
+template<typename SymmetricFilter, typename Alloc>
+typename symmetric_filter<SymmetricFilter, Alloc>::string_type
+symmetric_filter<SymmetricFilter, Alloc>::unconsumed_input() const
+{ return string_type(buf().ptr(), buf().eptr()); }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>  // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_SYMMETRIC_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/filter/test.hpp b/vendor/pdalboost/boost/iostreams/filter/test.hpp
new file mode 100644
index 0000000..f59be6b
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/filter/test.hpp
@@ -0,0 +1,322 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_FILTER_TEST_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>               // BOOST_MSVC,put size_t in std.
+#include <boost/detail/workaround.hpp>
+#include <algorithm>                      // min.
+#include <cstddef>                        // size_t.
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || \
+    BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) || \
+    BOOST_WORKAROUND(__MWERKS__, <= 0x3003) \
+    /**/
+# include <cstdlib>                       // rand.
+#endif
+#include <cstring>                        // memcpy, strlen.
+#include <iterator>
+#include <string>
+#include <vector>
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && \
+    !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+    !BOOST_WORKAROUND(__MWERKS__, <= 0x3003) \
+    /**/
+# include <boost/random/linear_congruential.hpp>
+# include <boost/random/uniform_smallint.hpp>
+#endif
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/compose.hpp>
+#include <boost/iostreams/copy.hpp>
+#include <boost/iostreams/detail/bool_trait_def.hpp>
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/device/back_inserter.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#undef memcpy
+#undef rand
+#undef strlen
+
+#if defined(BOOST_NO_STDC_NAMESPACE) && !defined(__LIBCOMO__)
+namespace std { 
+    using ::memcpy; 
+    using ::strlen; 
+    #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || \
+        BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) || \
+        BOOST_WORKAROUND(__MWERKS__, <= 0x3003) \
+        /**/
+        using ::rand; 
+    #endif
+}
+#endif
+
+namespace pdalboost { namespace iostreams {
+
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_string, std::basic_string, 3)
+
+const std::streamsize default_increment = 5;
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && \
+    !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+    !BOOST_WORKAROUND(__MWERKS__, <= 0x3003) \
+    /**/
+    std::streamsize rand(int inc)
+    {
+        static rand48                random_gen;
+        static uniform_smallint<int> random_dist(0, inc);
+        return random_dist(random_gen);
+    }
+#else
+    std::streamsize rand(int inc) 
+    { 
+        return (std::rand() * inc + 1) / RAND_MAX; 
+    }
+#endif
+
+class non_blocking_source {
+public:
+    typedef char char_type;
+    struct category
+        : source_tag,
+          peekable_tag
+        { };
+    explicit non_blocking_source( const std::string& data, 
+                                  std::streamsize inc = default_increment ) 
+        : data_(data), inc_(inc), pos_(0)
+        { }
+    std::streamsize read(char* s, std::streamsize n)
+    {
+        if (pos_ == static_cast<std::streamsize>(data_.size()))
+            return -1;
+        std::streamsize avail = 
+            (std::min) (n, static_cast<std::streamsize>(data_.size() - pos_));
+        std::streamsize amt = (std::min) (rand(inc_), avail);
+        if (amt)
+            std::memcpy(s, data_.c_str() + pos_, amt);
+        pos_ += amt;
+        return amt;
+    }
+
+    bool putback(char c)
+    {
+        if (pos_ > 0) {
+            data_[--pos_] = c;
+            return true;
+        }
+        return false;
+    }
+private:
+    std::string      data_;
+    std::streamsize  inc_, pos_;
+};
+
+class non_blocking_sink : public sink {
+public:
+    non_blocking_sink( std::string& dest,
+                       std::streamsize inc = default_increment ) 
+        : dest_(dest), inc_(inc) 
+        { }
+    std::streamsize write(const char* s, std::streamsize n)
+    {
+        std::streamsize amt = (std::min) (rand(inc_), n);
+        dest_.insert(dest_.end(), s, s + amt);
+        return amt;
+    }
+private:
+    non_blocking_sink& operator=(const non_blocking_sink&);
+    std::string&     dest_;
+    std::streamsize  inc_;
+};
+                
+//--------------Definition of test_input_filter-------------------------------//
+
+template<typename Filter>
+bool test_input_filter( Filter filter, 
+                        const std::string& input, 
+                        const std::string& output, 
+                        mpl::true_ )
+{
+    for ( int inc = default_increment; 
+          inc < default_increment * 40; 
+          inc += default_increment )
+    {
+        non_blocking_source  src(input, inc);
+        std::string          dest;
+        iostreams::copy(compose(filter, src), iostreams::back_inserter(dest));
+        if (dest != output)
+            return false;
+    }
+    return true;
+}
+
+template<typename Filter, typename Source1, typename Source2>
+bool test_input_filter( Filter filter, 
+                        const Source1& input, 
+                        const Source2& output, 
+                        mpl::false_ )
+{
+    std::string in;
+    std::string out;
+    iostreams::copy(input, iostreams::back_inserter(in));
+    iostreams::copy(output, iostreams::back_inserter(out));
+    return test_input_filter(filter, in, out);
+}
+
+template<typename Filter, typename Source1, typename Source2>
+bool test_input_filter( Filter filter, 
+                        const Source1& input, 
+                        const Source2& output )
+{
+    // Use tag dispatch to compensate for bad overload resolution.
+    return test_input_filter( filter, input, output,    
+                              is_string<Source1>() );
+}
+
+//--------------Definition of test_output_filter------------------------------//
+
+template<typename Filter>
+bool test_output_filter( Filter filter, 
+                         const std::string& input, 
+                         const std::string& output, 
+                         mpl::true_ )
+{
+    for ( int inc = default_increment; 
+          inc < default_increment * 40; 
+          inc += default_increment )
+    {
+        array_source  src(input.data(), input.data() + input.size());
+        std::string   dest;
+        iostreams::copy(src, compose(filter, non_blocking_sink(dest, inc)));
+        if (dest != output )
+            return false;
+    }
+    return true;
+}
+
+template<typename Filter, typename Source1, typename Source2>
+bool test_output_filter( Filter filter, 
+                         const Source1& input, 
+                         const Source2& output, 
+                         mpl::false_ )
+{
+    std::string in;
+    std::string out;
+    iostreams::copy(input, iostreams::back_inserter(in));
+    iostreams::copy(output, iostreams::back_inserter(out));
+    return test_output_filter(filter, in, out);
+}
+
+template<typename Filter, typename Source1, typename Source2>
+bool test_output_filter( Filter filter, 
+                         const Source1& input, 
+                         const Source2& output )
+{
+    // Use tag dispatch to compensate for bad overload resolution.
+    return test_output_filter( filter, input, output,    
+                               is_string<Source1>() );
+}
+
+//--------------Definition of test_filter_pair--------------------------------//
+
+template<typename OutputFilter, typename InputFilter>
+bool test_filter_pair( OutputFilter out, 
+                       InputFilter in, 
+                       const std::string& data, 
+                       mpl::true_ )
+{
+    for ( int inc = default_increment; 
+          inc <= default_increment * 40; 
+          inc += default_increment )
+    {
+        {
+            array_source  src(data.data(), data.data() + data.size());
+            std::string   temp;
+            std::string   dest;
+            iostreams::copy(src, compose(out, non_blocking_sink(temp, inc)));
+            iostreams::copy( 
+                compose(in, non_blocking_source(temp, inc)),
+                iostreams::back_inserter(dest)
+            );
+            if (dest != data)
+                return false;
+        }
+        {
+            array_source  src(data.data(), data.data() + data.size());
+            std::string   temp;
+            std::string   dest;
+            iostreams::copy(src, compose(out, non_blocking_sink(temp, inc)));
+            // truncate the file, this should not loop, it may throw
+            // std::ios_base::failure, which we swallow.
+            try {
+                temp.resize(temp.size() / 2);
+                iostreams::copy( 
+                    compose(in, non_blocking_source(temp, inc)),
+                    iostreams::back_inserter(dest)
+                );
+            } catch(std::ios_base::failure&) {}
+        }
+        {
+            array_source  src(data.data(), data.data() + data.size());
+            std::string   temp;
+            std::string   dest;
+            iostreams::copy(compose(out, src), non_blocking_sink(temp, inc));
+            iostreams::copy( 
+                non_blocking_source(temp, inc),
+                compose(in, iostreams::back_inserter(dest))
+            );
+            if (dest != data)
+                return false;
+        }
+        {
+            array_source  src(data.data(), data.data() + data.size());
+            std::string   temp;
+            std::string   dest;
+            iostreams::copy(compose(out, src), non_blocking_sink(temp, inc));
+            // truncate the file, this should not loop, it may throw
+            // std::ios_base::failure, which we swallow.
+            try {
+                temp.resize(temp.size() / 2);
+                iostreams::copy( 
+                    non_blocking_source(temp, inc),
+                    compose(in, iostreams::back_inserter(dest))
+                );
+            } catch(std::ios_base::failure&) {}
+        }
+    }
+    return true;
+}
+
+template<typename OutputFilter, typename InputFilter, typename Source>
+bool test_filter_pair( OutputFilter out, 
+                       InputFilter in, 
+                       const Source& data, 
+                       mpl::false_ )
+{
+    std::string str;
+    iostreams::copy(data, iostreams::back_inserter(str));
+    return test_filter_pair(out, in, str);
+}
+
+template<typename OutputFilter, typename InputFilter, typename Source>
+bool test_filter_pair( OutputFilter out, 
+                       InputFilter in, 
+                       const Source& data )
+{
+    // Use tag dispatch to compensate for bad overload resolution.
+    return test_filter_pair(out, in, data, is_string<Source>());
+}
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_FILTER_TEST_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/filter/zlib.hpp b/vendor/pdalboost/boost/iostreams/filter/zlib.hpp
new file mode 100644
index 0000000..17d49c0
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/filter/zlib.hpp
@@ -0,0 +1,427 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Note: custom allocators are not supported on VC6, since that compiler
+// had trouble finding the function zlib_base::do_init.
+
+#ifndef BOOST_IOSTREAMS_ZLIB_HPP_INCLUDED
+#define BOOST_IOSTREAMS_ZLIB_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <cassert>                            
+#include <iosfwd>            // streamsize.                 
+#include <memory>            // allocator, bad_alloc.
+#include <new>          
+#include <boost/config.hpp>  // MSVC, STATIC_CONSTANT, DEDUCED_TYPENAME, DINKUM.
+#include <boost/cstdint.hpp> // uint*_t
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/constants.hpp>   // buffer size.
+#include <boost/iostreams/detail/config/auto_link.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/config/zlib.hpp>
+#include <boost/iostreams/detail/ios.hpp>  // failure, streamsize.
+#include <boost/iostreams/filter/symmetric.hpp>                
+#include <boost/iostreams/pipeline.hpp>                
+#include <boost/type_traits/is_same.hpp>
+
+// Must come last.
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable:4251 4231 4660)         // Dependencies not exported.
+#endif
+#include <boost/config/abi_prefix.hpp>           
+
+namespace pdalboost { namespace iostreams {
+
+namespace zlib {
+                    // Typedefs
+
+typedef uint32_t uint;
+typedef uint8_t byte;
+typedef uint32_t ulong;
+
+// Prefix 'x' prevents symbols from being redefined when Z_PREFIX is defined
+typedef void* (*xalloc_func)(void*, zlib::uint, zlib::uint);
+typedef void (*xfree_func)(void*, void*);
+
+                    // Compression levels
+
+BOOST_IOSTREAMS_DECL extern const int no_compression;
+BOOST_IOSTREAMS_DECL extern const int best_speed;
+BOOST_IOSTREAMS_DECL extern const int best_compression;
+BOOST_IOSTREAMS_DECL extern const int default_compression;
+
+                    // Compression methods
+
+BOOST_IOSTREAMS_DECL extern const int deflated;
+
+                    // Compression strategies
+
+BOOST_IOSTREAMS_DECL extern const int default_strategy;
+BOOST_IOSTREAMS_DECL extern const int filtered;
+BOOST_IOSTREAMS_DECL extern const int huffman_only;
+
+                    // Status codes
+
+BOOST_IOSTREAMS_DECL extern const int okay;
+BOOST_IOSTREAMS_DECL extern const int stream_end;
+BOOST_IOSTREAMS_DECL extern const int stream_error;
+BOOST_IOSTREAMS_DECL extern const int version_error;
+BOOST_IOSTREAMS_DECL extern const int data_error;
+BOOST_IOSTREAMS_DECL extern const int mem_error;
+BOOST_IOSTREAMS_DECL extern const int buf_error;
+
+                    // Flush codes
+
+BOOST_IOSTREAMS_DECL extern const int finish;
+BOOST_IOSTREAMS_DECL extern const int no_flush;
+BOOST_IOSTREAMS_DECL extern const int sync_flush;
+
+                    // Code for current OS
+
+//BOOST_IOSTREAMS_DECL extern const int os_code;
+
+                    // Null pointer constant.
+
+const int null                               = 0;
+
+                    // Default values
+
+const int default_window_bits                = 15;
+const int default_mem_level                  = 8;
+const bool default_crc                       = false;
+const bool default_noheader                  = false;
+
+} // End namespace zlib. 
+
+//
+// Class name: zlib_params.
+// Description: Encapsulates the parameters passed to deflateInit2
+//      and inflateInit2 to customize compression and decompression.
+//
+struct zlib_params {
+
+    // Non-explicit constructor.
+    zlib_params( int level           = zlib::default_compression,
+                 int method          = zlib::deflated,
+                 int window_bits     = zlib::default_window_bits, 
+                 int mem_level       = zlib::default_mem_level, 
+                 int strategy        = zlib::default_strategy,
+                 bool noheader       = zlib::default_noheader,
+                 bool calculate_crc  = zlib::default_crc )
+        : level(level), method(method), window_bits(window_bits),
+          mem_level(mem_level), strategy(strategy),  
+          noheader(noheader), calculate_crc(calculate_crc)
+        { }
+    int level;
+    int method;
+    int window_bits;
+    int mem_level;
+    int strategy;
+    bool noheader;
+    bool calculate_crc;
+};
+
+//
+// Class name: zlib_error.
+// Description: Subclass of std::ios::failure thrown to indicate
+//     zlib errors other than out-of-memory conditions.
+//
+class BOOST_IOSTREAMS_DECL zlib_error : public BOOST_IOSTREAMS_FAILURE {
+public:
+    explicit zlib_error(int error);
+    int error() const { return error_; }
+    static void check BOOST_PREVENT_MACRO_SUBSTITUTION(int error);
+private:
+    int error_;
+};
+
+namespace detail {
+
+template<typename Alloc>
+struct zlib_allocator_traits {
+#ifndef BOOST_NO_STD_ALLOCATOR
+    typedef typename Alloc::template rebind<char>::other type;
+#else
+    typedef std::allocator<char> type;
+#endif
+};
+
+template< typename Alloc,
+          typename Base = // VC6 workaround (C2516)
+              BOOST_DEDUCED_TYPENAME zlib_allocator_traits<Alloc>::type >
+struct zlib_allocator : private Base {
+private:
+    typedef typename Base::size_type size_type;
+public:
+    BOOST_STATIC_CONSTANT(bool, custom = 
+        (!is_same<std::allocator<char>, Base>::value));
+    typedef typename zlib_allocator_traits<Alloc>::type allocator_type;
+    static void* allocate(void* self, zlib::uint items, zlib::uint size);
+    static void deallocate(void* self, void* address);
+};
+
+class BOOST_IOSTREAMS_DECL zlib_base { 
+public:
+    typedef char char_type;
+protected:
+    zlib_base();
+    ~zlib_base();
+    void* stream() { return stream_; }
+    template<typename Alloc> 
+    void init( const zlib_params& p, 
+               bool compress,
+               zlib_allocator<Alloc>& zalloc )
+        {
+            bool custom = zlib_allocator<Alloc>::custom;
+            do_init( p, compress,
+                     #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+                         custom ? zlib_allocator<Alloc>::allocate : 0,
+                         custom ? zlib_allocator<Alloc>::deallocate : 0,
+                     #endif
+                     &zalloc );
+        }
+    void before( const char*& src_begin, const char* src_end,
+                 char*& dest_begin, char* dest_end );
+    void after( const char*& src_begin, char*& dest_begin, 
+                bool compress );
+    int xdeflate(int flush);  // Prefix 'x' prevents symbols from being 
+    int xinflate(int flush);  // redefined when Z_PREFIX is defined
+    void reset(bool compress, bool realloc);
+public:
+    zlib::ulong crc() const { return crc_; }
+    int total_in() const { return total_in_; }
+    int total_out() const { return total_out_; }
+private:
+    void do_init( const zlib_params& p, bool compress, 
+                  #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+                      zlib::xalloc_func, 
+                      zlib::xfree_func, 
+                  #endif
+                  void* derived );
+    void*        stream_;         // Actual type: z_stream*.
+    bool         calculate_crc_;
+    zlib::ulong  crc_;
+    zlib::ulong  crc_imp_;
+    int          total_in_;
+    int          total_out_;
+};
+
+//
+// Template name: zlib_compressor_impl
+// Description: Model of C-Style Filte implementing compression by
+//      delegating to the zlib function deflate.
+//
+template<typename Alloc = std::allocator<char> >
+class zlib_compressor_impl : public zlib_base, public zlib_allocator<Alloc> { 
+public: 
+    zlib_compressor_impl(const zlib_params& = zlib::default_compression);
+    ~zlib_compressor_impl();
+    bool filter( const char*& src_begin, const char* src_end,
+                 char*& dest_begin, char* dest_end, bool flush );
+    void close();
+};
+
+//
+// Template name: zlib_compressor
+// Description: Model of C-Style Filte implementing decompression by
+//      delegating to the zlib function inflate.
+//
+template<typename Alloc = std::allocator<char> >
+class zlib_decompressor_impl : public zlib_base, public zlib_allocator<Alloc> {
+public:
+    zlib_decompressor_impl(const zlib_params&);
+    zlib_decompressor_impl(int window_bits = zlib::default_window_bits);
+    ~zlib_decompressor_impl();
+    bool filter( const char*& begin_in, const char* end_in,
+                 char*& begin_out, char* end_out, bool flush );
+    void close();
+    bool eof() const { return eof_; }
+private:
+    bool eof_;
+};
+
+} // End namespace detail.
+
+//
+// Template name: zlib_compressor
+// Description: Model of InputFilter and OutputFilter implementing
+//      compression using zlib.
+//
+template<typename Alloc = std::allocator<char> >
+struct basic_zlib_compressor 
+    : symmetric_filter<detail::zlib_compressor_impl<Alloc>, Alloc> 
+{
+private:
+    typedef detail::zlib_compressor_impl<Alloc>         impl_type;
+    typedef symmetric_filter<impl_type, Alloc>  base_type;
+public:
+    typedef typename base_type::char_type               char_type;
+    typedef typename base_type::category                category;
+    basic_zlib_compressor( const zlib_params& = zlib::default_compression, 
+                           int buffer_size = default_device_buffer_size );
+    zlib::ulong crc() { return this->filter().crc(); }
+    int total_in() {  return this->filter().total_in(); }
+};
+BOOST_IOSTREAMS_PIPABLE(basic_zlib_compressor, 1)
+
+typedef basic_zlib_compressor<> zlib_compressor;
+
+//
+// Template name: zlib_decompressor
+// Description: Model of InputFilter and OutputFilter implementing
+//      decompression using zlib.
+//
+template<typename Alloc = std::allocator<char> >
+struct basic_zlib_decompressor 
+    : symmetric_filter<detail::zlib_decompressor_impl<Alloc>, Alloc> 
+{
+private:
+    typedef detail::zlib_decompressor_impl<Alloc>       impl_type;
+    typedef symmetric_filter<impl_type, Alloc>  base_type;
+public:
+    typedef typename base_type::char_type               char_type;
+    typedef typename base_type::category                category;
+    basic_zlib_decompressor( int window_bits = zlib::default_window_bits,
+                             int buffer_size = default_device_buffer_size );
+    basic_zlib_decompressor( const zlib_params& p,
+                             int buffer_size = default_device_buffer_size );
+    zlib::ulong crc() { return this->filter().crc(); }
+    int total_out() {  return this->filter().total_out(); }
+    bool eof() { return this->filter().eof(); }
+};
+BOOST_IOSTREAMS_PIPABLE(basic_zlib_decompressor, 1)
+
+typedef basic_zlib_decompressor<> zlib_decompressor;
+
+//----------------------------------------------------------------------------//
+
+//------------------Implementation of zlib_allocator--------------------------//
+
+namespace detail {
+
+template<typename Alloc, typename Base>
+void* zlib_allocator<Alloc, Base>::allocate
+    (void* self, zlib::uint items, zlib::uint size)
+{ 
+    size_type len = items * size;
+    char* ptr = 
+        static_cast<allocator_type*>(self)->allocate
+            (len + sizeof(size_type)
+            #if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1)
+                , (char*)0
+            #endif
+            );
+    *reinterpret_cast<size_type*>(ptr) = len;
+    return ptr + sizeof(size_type);
+}
+
+template<typename Alloc, typename Base>
+void zlib_allocator<Alloc, Base>::deallocate(void* self, void* address)
+{ 
+    char* ptr = reinterpret_cast<char*>(address) - sizeof(size_type);
+    size_type len = *reinterpret_cast<size_type*>(ptr) + sizeof(size_type);
+    static_cast<allocator_type*>(self)->deallocate(ptr, len); 
+}
+
+//------------------Implementation of zlib_compressor_impl--------------------//
+
+template<typename Alloc>
+zlib_compressor_impl<Alloc>::zlib_compressor_impl(const zlib_params& p)
+{ init(p, true, static_cast<zlib_allocator<Alloc>&>(*this)); }
+
+template<typename Alloc>
+zlib_compressor_impl<Alloc>::~zlib_compressor_impl()
+{ reset(true, false); }
+
+template<typename Alloc>
+bool zlib_compressor_impl<Alloc>::filter
+    ( const char*& src_begin, const char* src_end,
+      char*& dest_begin, char* dest_end, bool flush )
+{
+    before(src_begin, src_end, dest_begin, dest_end);
+    int result = xdeflate(flush ? zlib::finish : zlib::no_flush);
+    after(src_begin, dest_begin, true);
+    zlib_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(result);
+    return result != zlib::stream_end; 
+}
+
+template<typename Alloc>
+void zlib_compressor_impl<Alloc>::close() { reset(true, true); }
+
+//------------------Implementation of zlib_decompressor_impl------------------//
+
+template<typename Alloc>
+zlib_decompressor_impl<Alloc>::zlib_decompressor_impl(const zlib_params& p)
+  : eof_(false)
+{ init(p, false, static_cast<zlib_allocator<Alloc>&>(*this)); }
+
+template<typename Alloc>
+zlib_decompressor_impl<Alloc>::~zlib_decompressor_impl()
+{ reset(false, false); }
+
+template<typename Alloc>
+zlib_decompressor_impl<Alloc>::zlib_decompressor_impl(int window_bits)
+{ 
+    zlib_params p;
+    p.window_bits = window_bits;
+    init(p, false, static_cast<zlib_allocator<Alloc>&>(*this)); 
+}
+
+template<typename Alloc>
+bool zlib_decompressor_impl<Alloc>::filter
+    ( const char*& src_begin, const char* src_end,
+      char*& dest_begin, char* dest_end, bool /* flush */ )
+{
+    before(src_begin, src_end, dest_begin, dest_end);
+    int result = xinflate(zlib::sync_flush);
+    after(src_begin, dest_begin, false);
+    zlib_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(result);
+    return !(eof_ = result == zlib::stream_end);
+}
+
+template<typename Alloc>
+void zlib_decompressor_impl<Alloc>::close() {
+    eof_ = false;
+    reset(false, true);
+}
+
+} // End namespace detail.
+
+//------------------Implementation of zlib_decompressor-----------------------//
+
+template<typename Alloc>
+basic_zlib_compressor<Alloc>::basic_zlib_compressor
+    (const zlib_params& p, int buffer_size) 
+    : base_type(buffer_size, p) { }
+
+//------------------Implementation of zlib_decompressor-----------------------//
+
+template<typename Alloc>
+basic_zlib_decompressor<Alloc>::basic_zlib_decompressor
+    (int window_bits, int buffer_size) 
+    : base_type(buffer_size, window_bits) { }
+
+template<typename Alloc>
+basic_zlib_decompressor<Alloc>::basic_zlib_decompressor
+    (const zlib_params& p, int buffer_size) 
+    : base_type(buffer_size, p) { }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/config/abi_suffix.hpp> // Pops abi_suffix.hpp pragmas.
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_ZLIB_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/filtering_stream.hpp b/vendor/pdalboost/boost/iostreams/filtering_stream.hpp
new file mode 100644
index 0000000..bb0efd3
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/filtering_stream.hpp
@@ -0,0 +1,166 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_FILTER_STREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FILTER_STREAM_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <memory>                                     // allocator.
+#include <boost/iostreams/detail/access_control.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/iostream.hpp>        // standard streams.
+#include <boost/iostreams/detail/push.hpp>
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/detail/streambuf.hpp>       // pubsync.
+#include <boost/iostreams/filtering_streambuf.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>  // MSVC.
+
+namespace pdalboost { namespace iostreams {
+
+//--------------Definition of filtered_istream--------------------------------//
+
+namespace detail {
+
+template<typename Mode, typename Ch, typename Tr>
+struct filtering_stream_traits {
+    typedef typename 
+            iostreams::select<  // Disambiguation for Tru64  
+                mpl::and_< 
+                    is_convertible<Mode, input>, 
+                    is_convertible<Mode, output> 
+                >,          
+                BOOST_IOSTREAMS_BASIC_IOSTREAM(Ch, Tr),
+                is_convertible<Mode, input>, 
+                BOOST_IOSTREAMS_BASIC_ISTREAM(Ch, Tr),
+                else_,        
+                BOOST_IOSTREAMS_BASIC_OSTREAM(Ch, Tr)
+            >::type stream_type;
+    typedef typename
+            iostreams::select< // Dismbiguation required for Tru64.
+                mpl::and_<
+                    is_convertible<Mode, input>,
+                    is_convertible<Mode, output>
+                >,
+                iostream_tag,
+                is_convertible<Mode, input>,
+                istream_tag,
+                else_,
+                ostream_tag
+            >::type stream_tag;
+};
+
+template<typename Chain, typename Access>
+class filtering_stream_base 
+    : public access_control<
+                 pdalboost::iostreams::detail::chain_client<Chain>,
+                 Access
+             >,
+      public filtering_stream_traits<
+                 typename Chain::mode, 
+                 typename Chain::char_type, 
+                 typename Chain::traits_type
+             >::stream_type
+{
+public:
+    typedef Chain                                         chain_type;
+    typedef access_control<
+                 pdalboost::iostreams::detail::chain_client<Chain>,
+                 Access
+             >                                            client_type;
+protected:
+    typedef typename 
+            filtering_stream_traits<
+                 typename Chain::mode, 
+                 typename Chain::char_type, 
+                 typename Chain::traits_type
+            >::stream_type                                stream_type;
+    filtering_stream_base() : stream_type(0) { this->set_chain(&chain_); }
+private:
+    void notify() { this->rdbuf(chain_.empty() ? 0 : &chain_.front()); }
+    Chain chain_;
+};
+
+} // End namespace detail.
+
+//
+// Macro: BOOST_IOSTREAMS_DEFINE_FILTER_STREAM(name_, chain_type_, default_char_)
+// Description: Defines a template derived from std::basic_streambuf which uses
+//      a chain to perform i/o. The template has the following parameters:
+//      Mode - the i/o mode.
+//      Ch - The character type.
+//      Tr - The character traits type.
+//      Alloc - The allocator type.
+//      Access - Indicates accessibility of the chain interface; must be either
+//          public_ or protected_; defaults to public_.
+// Macro parameters:
+//      name_ - The name of the template to be defined.
+//      chain_type_ - The name of the chain template.
+//      default_char_ - The default value for the char template parameter.
+//
+#define BOOST_IOSTREAMS_DEFINE_FILTER_STREAM(name_, chain_type_, default_char_) \
+    template< typename Mode, \
+              typename Ch = default_char_, \
+              typename Tr = BOOST_IOSTREAMS_CHAR_TRAITS(Ch), \
+              typename Alloc = std::allocator<Ch>, \
+              typename Access = public_ > \
+    class name_ \
+        : public pdalboost::iostreams::detail::filtering_stream_base< \
+                     chain_type_<Mode, Ch, Tr, Alloc>, Access \
+                 > \
+    { \
+    public: \
+        typedef Ch                                char_type; \
+        struct category \
+            : Mode, \
+              closable_tag, \
+              detail::filtering_stream_traits<Mode, Ch, Tr>::stream_tag \
+            { }; \
+        BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr) \
+        typedef Mode                              mode; \
+        typedef chain_type_<Mode, Ch, Tr, Alloc>  chain_type; \
+        name_() { } \
+        BOOST_IOSTREAMS_DEFINE_PUSH_CONSTRUCTOR(name_, mode, Ch, push_impl) \
+        ~name_() { \
+            if (this->is_complete()) \
+                 this->rdbuf()->BOOST_IOSTREAMS_PUBSYNC(); \
+        } \
+    private: \
+        typedef access_control< \
+                    pdalboost::iostreams::detail::chain_client< \
+                        chain_type_<Mode, Ch, Tr, Alloc> \
+                    >, \
+                    Access \
+                > client_type; \
+        template<typename T> \
+        void push_impl(const T& t BOOST_IOSTREAMS_PUSH_PARAMS()) \
+        { client_type::push(t BOOST_IOSTREAMS_PUSH_ARGS()); } \
+    }; \
+    /**/    
+BOOST_IOSTREAMS_DEFINE_FILTER_STREAM(filtering_stream, pdalboost::iostreams::chain, char)
+BOOST_IOSTREAMS_DEFINE_FILTER_STREAM(wfiltering_stream, pdalboost::iostreams::chain, wchar_t)
+
+typedef filtering_stream<input>    filtering_istream;
+typedef filtering_stream<output>   filtering_ostream;
+typedef wfiltering_stream<input>   filtering_wistream;
+typedef wfiltering_stream<output>  filtering_wostream;
+
+//----------------------------------------------------------------------------//
+
+} } // End namespace iostreams, boost
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // MSVC
+
+#endif // #ifndef BOOST_IOSTREAMS_FILTER_STREAM_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/filtering_streambuf.hpp b/vendor/pdalboost/boost/iostreams/filtering_streambuf.hpp
new file mode 100644
index 0000000..f7dc100
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/filtering_streambuf.hpp
@@ -0,0 +1,70 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_FILTERING_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FILTERING_STREAMBUF_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <exception>
+#include <memory>                               // allocator.
+#include <boost/iostreams/chain.hpp>
+#include <boost/iostreams/detail/access_control.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/push.hpp>
+#include <boost/iostreams/detail/streambuf.hpp> // pubsync.
+#include <boost/iostreams/detail/streambuf/chainbuf.hpp>
+#include <boost/mpl/if.hpp>                    
+
+namespace pdalboost { namespace iostreams {
+
+//
+// Macro: BOOST_IOSTREAMS_DEFINE_FILTERBUF(name_, chain_type_, default_char_)
+// Description: Defines a template derived from std::basic_streambuf which uses
+//      a chain to perform i/o. The template has the following parameters:
+//      Ch - The character type.
+//      Tr - The character traits type.
+//      Alloc - The allocator type.
+//      Access - Indicates accessibility of the chain interface; must be either
+//          public_ or protected_; defaults to public_.
+//
+#define BOOST_IOSTREAMS_DEFINE_FILTER_STREAMBUF(name_, chain_type_, default_char_) \
+    template< typename Mode, \
+              typename Ch = default_char_, \
+              typename Tr = BOOST_IOSTREAMS_CHAR_TRAITS(Ch), \
+              typename Alloc = std::allocator<Ch>, \
+              typename Access = public_ > \
+    class name_ : public pdalboost::iostreams::detail::chainbuf< \
+                             chain_type_<Mode, Ch, Tr, Alloc>, Mode, Access \
+                         > \
+    { \
+    public: \
+        typedef Ch                                             char_type; \
+        struct category \
+            : Mode, closable_tag, streambuf_tag \
+            { }; \
+        BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr) \
+        typedef Mode                                           mode; \
+        typedef chain_type_<Mode, Ch, Tr, Alloc>               chain_type; \
+        name_() { } \
+        BOOST_IOSTREAMS_DEFINE_PUSH_CONSTRUCTOR(name_, mode, Ch, push_impl) \
+        ~name_() { if (this->is_complete()) this->BOOST_IOSTREAMS_PUBSYNC(); } \
+    }; \
+    /**/ 
+BOOST_IOSTREAMS_DEFINE_FILTER_STREAMBUF(filtering_streambuf, pdalboost::iostreams::chain, char)
+BOOST_IOSTREAMS_DEFINE_FILTER_STREAMBUF(filtering_wstreambuf, pdalboost::iostreams::chain, wchar_t)
+
+typedef filtering_streambuf<input>    filtering_istreambuf;
+typedef filtering_streambuf<output>   filtering_ostreambuf;
+typedef filtering_wstreambuf<input>   filtering_wistreambuf;
+typedef filtering_wstreambuf<output>  filtering_wostreambuf;
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_FILTERING_STREAMBUF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/flush.hpp b/vendor/pdalboost/boost/iostreams/flush.hpp
new file mode 100644
index 0000000..e426e25
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/flush.hpp
@@ -0,0 +1,125 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_FLUSH_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FLUSH_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>  // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct flush_device_impl;
+
+template<typename T>
+struct flush_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+bool flush(T& t)
+{ return detail::flush_device_impl<T>::flush(detail::unwrap(t)); }
+
+template<typename T, typename Sink>
+bool flush(T& t, Sink& snk)
+{ return detail::flush_filter_impl<T>::flush(detail::unwrap(t), snk); }
+
+namespace detail {
+
+//------------------Definition of flush_device_impl---------------------------//
+
+template<typename T>
+struct flush_device_impl
+    : mpl::if_<
+          is_custom<T>,
+          operations<T>,
+          flush_device_impl<
+              BOOST_DEDUCED_TYPENAME
+              dispatch<
+                  T, ostream_tag, streambuf_tag, flushable_tag, any_tag
+              >::type
+          >
+      >::type
+    { };
+
+template<>
+struct flush_device_impl<ostream_tag> {
+    template<typename T>
+    static bool flush(T& t)
+    { return t.rdbuf()->BOOST_IOSTREAMS_PUBSYNC() == 0; }
+};
+
+template<>
+struct flush_device_impl<streambuf_tag> {
+    template<typename T>
+    static bool flush(T& t)
+    { return t.BOOST_IOSTREAMS_PUBSYNC() == 0; }
+};
+
+template<>
+struct flush_device_impl<flushable_tag> {
+    template<typename T>
+    static bool flush(T& t) { return t.flush(); }
+};
+
+template<>
+struct flush_device_impl<any_tag> {
+    template<typename T>
+    static bool flush(T&) { return true; }
+};
+
+//------------------Definition of flush_filter_impl---------------------------//
+
+template<typename T>
+struct flush_filter_impl
+    : mpl::if_<
+          is_custom<T>,
+          operations<T>,
+          flush_filter_impl<
+              BOOST_DEDUCED_TYPENAME
+              dispatch<
+                  T, flushable_tag, any_tag
+              >::type
+          >
+      >::type
+    { };
+
+template<>
+struct flush_filter_impl<flushable_tag> {
+    template<typename T, typename Sink>
+    static bool flush(T& t, Sink& snk) { return t.flush(snk); }
+};
+
+template<>
+struct flush_filter_impl<any_tag> {
+    template<typename T, typename Sink>
+    static bool flush(T&, Sink&) { return false; }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_FLUSH_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/get.hpp b/vendor/pdalboost/boost/iostreams/get.hpp
new file mode 100644
index 0000000..bb82204
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/get.hpp
@@ -0,0 +1,17 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_GET_HPP_INCLUDED
+#define BOOST_IOSTREAMS_GET_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/read.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_GET_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/imbue.hpp b/vendor/pdalboost/boost/iostreams/imbue.hpp
new file mode 100644
index 0000000..7552b10
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/imbue.hpp
@@ -0,0 +1,82 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_IMBUE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_IMBUE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>  // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace pdalboost { namespace iostreams { 
+
+namespace detail {
+
+// Implementation templates for simulated tag dispatch.
+template<typename T> 
+struct imbue_impl;
+
+} // End namespace detail.
+
+template<typename T, typename Locale>
+void imbue(T& t, const Locale& loc)
+{ detail::imbue_impl<T>::imbue(detail::unwrap(t), loc); }
+
+namespace detail {
+
+//------------------Definition of imbue_impl----------------------------------//
+
+template<typename T>
+struct imbue_impl
+    : mpl::if_<
+          is_custom<T>,
+          operations<T>,
+          imbue_impl<
+              BOOST_DEDUCED_TYPENAME
+              dispatch<
+                  T, streambuf_tag, localizable_tag, any_tag
+              >::type
+          >
+      >::type
+    { };
+
+template<>
+struct imbue_impl<any_tag> {
+    template<typename T, typename Locale>
+    static void imbue(T&, const Locale&) { }
+};
+
+template<>
+struct imbue_impl<streambuf_tag> {
+    template<typename T, typename Locale>
+    static void imbue(T& t, const Locale& loc) { t.pubimbue(loc); }
+};
+
+template<>
+struct imbue_impl<localizable_tag> {
+    template<typename T, typename Locale>
+    static void imbue(T& t, const Locale& loc) { t.imbue(loc); }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_IMBUE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/input_sequence.hpp b/vendor/pdalboost/boost/iostreams/input_sequence.hpp
new file mode 100644
index 0000000..ea60ef4
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/input_sequence.hpp
@@ -0,0 +1,72 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_INPUT_SEQUENCE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_INPUT_SEQUENCE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <utility>           // pair.
+#include <boost/config.hpp>  // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>  // is_custom 
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct input_sequence_impl;
+
+} // End namespace detail.
+
+template<typename T>
+inline std::pair<
+    BOOST_DEDUCED_TYPENAME char_type_of<T>::type*,
+    BOOST_DEDUCED_TYPENAME char_type_of<T>::type*
+>
+input_sequence(T& t)
+{ return detail::input_sequence_impl<T>::input_sequence(t); }
+
+namespace detail {
+
+//------------------Definition of direct_impl-------------------------------//
+
+template<typename T>
+struct input_sequence_impl
+    : mpl::if_<
+          detail::is_custom<T>,
+          operations<T>,
+          input_sequence_impl<direct_tag>
+      >::type
+    { };
+
+template<>
+struct input_sequence_impl<direct_tag> {
+    template<typename U>
+    static std::pair<
+        BOOST_DEDUCED_TYPENAME char_type_of<U>::type*,
+        BOOST_DEDUCED_TYPENAME char_type_of<U>::type*
+    >
+    input_sequence(U& u) { return u.input_sequence(); }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_INPUT_SEQUENCE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/invert.hpp b/vendor/pdalboost/boost/iostreams/invert.hpp
new file mode 100644
index 0000000..76fb513
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/invert.hpp
@@ -0,0 +1,167 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_INVERT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_INVERT_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <algorithm>                             // copy, min.  
+#include <boost/assert.hpp>
+#include <boost/config.hpp>                      // BOOST_DEDUCED_TYPENAME.       
+#include <boost/detail/workaround.hpp>           // default_filter_buffer_size.
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/compose.hpp>
+#include <boost/iostreams/constants.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/detail/buffer.hpp>
+#include <boost/iostreams/detail/counted_array.hpp>
+#include <boost/iostreams/detail/execute.hpp>
+#include <boost/iostreams/detail/functional.hpp> // clear_flags, call_reset
+#include <boost/mpl/if.hpp>
+#include <boost/ref.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>  // MSVC.
+
+namespace pdalboost { namespace iostreams {
+
+//
+// Template name: inverse.
+// Template parameters:
+//      Filter - A model of InputFilter or OutputFilter.
+// Description: Generates an InputFilter from an OutputFilter or
+//      vice versa.
+//
+template<typename Filter>
+class inverse {
+private:
+    BOOST_STATIC_ASSERT(is_filter<Filter>::value);
+    typedef typename category_of<Filter>::type   base_category;
+    typedef reference_wrapper<Filter>            filter_ref;
+public:
+    typedef typename char_type_of<Filter>::type  char_type;
+    typedef typename int_type_of<Filter>::type   int_type;
+    typedef char_traits<char_type>               traits_type;
+    typedef typename 
+            mpl::if_<
+                is_convertible<
+                    base_category,
+                    input
+                >,
+                output,
+                input
+            >::type                              mode;
+    struct category 
+        : mode, 
+          filter_tag, 
+          multichar_tag, 
+          closable_tag 
+        { };
+    explicit inverse( const Filter& filter, 
+                      std::streamsize buffer_size = 
+                          default_filter_buffer_size) 
+        : pimpl_(new impl(filter, buffer_size))
+        { }
+
+    template<typename Source>
+    std::streamsize read(Source& src, char* s, std::streamsize n)
+    {
+        typedef detail::counted_array_sink<char_type>  array_sink;
+        typedef composite<filter_ref, array_sink>      filtered_array_sink;
+
+        BOOST_ASSERT((flags() & f_write) == 0);
+        if (flags() == 0) {
+            flags() = f_read;
+            buf().set(0, 0);
+        }
+
+        filtered_array_sink snk(filter(), array_sink(s, n));
+        int_type status;
+        for ( status = traits_type::good();
+              snk.second().count() < n && status == traits_type::good(); )
+        {
+            status = buf().fill(src);
+            buf().flush(snk);
+        }
+        return snk.second().count() == 0 &&
+               status == traits_type::eof() 
+                   ? 
+               -1
+                   : 
+               snk.second().count();
+    }
+
+    template<typename Sink>
+    std::streamsize write(Sink& dest, const char* s, std::streamsize n)
+    {
+        typedef detail::counted_array_source<char_type>  array_source;
+        typedef composite<filter_ref, array_source>      filtered_array_source;
+
+        BOOST_ASSERT((flags() & f_read) == 0);
+        if (flags() == 0) {
+            flags() = f_write;
+            buf().set(0, 0);
+        }
+        
+        filtered_array_source src(filter(), array_source(s, n));
+        for (bool good = true; src.second().count() < n && good; ) {
+            buf().fill(src);
+            good = buf().flush(dest);
+        }
+        return src.second().count();
+    }
+
+    template<typename Device>
+    void close(Device& dev)
+    {
+        detail::execute_all(
+            detail::flush_buffer(buf(), dev, (flags() & f_write) != 0),
+            detail::call_close_all(pimpl_->filter_, dev),
+            detail::clear_flags(flags())
+        );
+    }
+private:
+    filter_ref filter() { return pdalboost::ref(pimpl_->filter_); }
+    detail::buffer<char_type>& buf() { return pimpl_->buf_; }
+    int& flags() { return pimpl_->flags_; }
+    
+    enum flags_ {
+        f_read = 1, f_write = 2
+    };
+
+    struct impl {
+        impl(const Filter& filter, std::streamsize n) 
+            : filter_(filter), buf_(n), flags_(0)
+        { buf_.set(0, 0); }
+        Filter                     filter_;
+        detail::buffer<char_type>  buf_;
+        int                        flags_;
+    };
+    shared_ptr<impl> pimpl_;
+};
+
+//
+// Template name: invert.
+// Template parameters:
+//      Filter - A model of InputFilter or OutputFilter.
+// Description: Returns an instance of an appropriate specialization of inverse.
+//
+template<typename Filter>
+inverse<Filter> invert(const Filter& f) { return inverse<Filter>(f); }
+                    
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>  // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_INVERT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/operations.hpp b/vendor/pdalboost/boost/iostreams/operations.hpp
new file mode 100644
index 0000000..5da1610
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/operations.hpp
@@ -0,0 +1,26 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_OPERATIONS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_OPERATIONS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/close.hpp>
+#include <boost/iostreams/flush.hpp>
+#include <boost/iostreams/imbue.hpp>
+#include <boost/iostreams/input_sequence.hpp>
+#include <boost/iostreams/optimal_buffer_size.hpp>
+#include <boost/iostreams/output_sequence.hpp>
+#include <boost/iostreams/read.hpp>
+#include <boost/iostreams/seek.hpp>
+#include <boost/iostreams/write.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_OPERATIONS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/operations_fwd.hpp b/vendor/pdalboost/boost/iostreams/operations_fwd.hpp
new file mode 100644
index 0000000..38fd441
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/operations_fwd.hpp
@@ -0,0 +1,41 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_OPERATIONS_FWD_HPP_INCLUDED
+#define BOOST_IOSTREAMS_OPERATIONS_FWD_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+template<typename T>
+struct operations;
+
+namespace detail {
+
+struct custom_tag { };
+
+template<typename T>
+struct is_custom
+    : mpl::not_<
+          is_base_and_derived< custom_tag, operations<T> >
+      >
+    { };
+
+} // End namespace detail.
+
+template<typename T>
+struct operations : detail::custom_tag { };
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_OPERATIONS_FWD_HPP_INCLUDED //--------------//
diff --git a/vendor/pdalboost/boost/iostreams/optimal_buffer_size.hpp b/vendor/pdalboost/boost/iostreams/optimal_buffer_size.hpp
new file mode 100644
index 0000000..374f440
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/optimal_buffer_size.hpp
@@ -0,0 +1,87 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_OPTIMAL_BUFFER_SIZE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_OPTIMAL_BUFFER_SIZE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>  // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/constants.hpp>  // constants.
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct optimal_buffer_size_impl;
+
+} // End namespace detail.
+
+template<typename T>
+std::streamsize optimal_buffer_size(const T& t)
+{
+    typedef detail::optimal_buffer_size_impl<T> impl;
+    return impl::optimal_buffer_size(detail::unwrap(t));
+}
+
+namespace detail {
+
+//------------------Definition of optimal_buffer_size_impl--------------------//
+
+template<typename T>
+struct optimal_buffer_size_impl
+    : mpl::if_<
+          is_custom<T>,
+          operations<T>,
+          optimal_buffer_size_impl<
+              BOOST_DEDUCED_TYPENAME
+              dispatch<
+                  T, optimally_buffered_tag, device_tag, filter_tag
+              >::type
+          >
+      >::type
+    { };
+
+template<>
+struct optimal_buffer_size_impl<optimally_buffered_tag> {
+    template<typename T>
+    static std::streamsize optimal_buffer_size(const T& t)
+    { return t.optimal_buffer_size(); }
+};
+
+template<>
+struct optimal_buffer_size_impl<device_tag> {
+    template<typename T>
+    static std::streamsize optimal_buffer_size(const T&)
+    { return default_device_buffer_size; }
+};
+
+template<>
+struct optimal_buffer_size_impl<filter_tag> {
+    template<typename T>
+    static std::streamsize optimal_buffer_size(const T&)
+    { return default_filter_buffer_size; }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_OPTIMAL_BUFFER_SIZE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/output_sequence.hpp b/vendor/pdalboost/boost/iostreams/output_sequence.hpp
new file mode 100644
index 0000000..725e8ab
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/output_sequence.hpp
@@ -0,0 +1,72 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_OUTPUT_SEQUENCE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_OUTPUT_SEQUENCE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <utility>           // pair.
+#include <boost/config.hpp>  // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>  // is_custom 
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct output_sequence_impl;
+
+} // End namespace detail.
+
+template<typename T>
+inline std::pair<
+    BOOST_DEDUCED_TYPENAME char_type_of<T>::type*,
+    BOOST_DEDUCED_TYPENAME char_type_of<T>::type*
+>
+output_sequence(T& t)
+{ return detail::output_sequence_impl<T>::output_sequence(t); }
+
+namespace detail {
+
+//------------------Definition of output_sequence_impl------------------------//
+
+template<typename T>
+struct output_sequence_impl
+    : mpl::if_<
+          detail::is_custom<T>,
+          operations<T>,
+          output_sequence_impl<direct_tag>
+      >::type
+    { };
+
+template<>
+struct output_sequence_impl<direct_tag> {
+    template<typename U>
+    static std::pair<
+        BOOST_DEDUCED_TYPENAME char_type_of<U>::type*,
+        BOOST_DEDUCED_TYPENAME char_type_of<U>::type*
+    >
+    output_sequence(U& u) { return u.output_sequence(); }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_OUTPUT_SEQUENCE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/pipeline.hpp b/vendor/pdalboost/boost/iostreams/pipeline.hpp
new file mode 100644
index 0000000..eecaae1
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/pipeline.hpp
@@ -0,0 +1,128 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_PIPABLE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_PIPABLE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp> // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>           
+#include <boost/iostreams/detail/template_params.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/static_assert.hpp>
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# include <boost/type_traits/is_base_and_derived.hpp>
+#endif
+
+#define BOOST_IOSTREAMS_PIPABLE(filter, arity) \
+    template< BOOST_PP_ENUM_PARAMS(arity, typename T) \
+              BOOST_PP_COMMA_IF(arity) typename Component> \
+    ::pdalboost::iostreams::pipeline< \
+        ::pdalboost::iostreams::detail::pipeline_segment< \
+            filter BOOST_IOSTREAMS_TEMPLATE_ARGS(arity, T) \
+        >, \
+        Component \
+    > operator|( const filter BOOST_IOSTREAMS_TEMPLATE_ARGS(arity, T)& f, \
+                 const Component& c ) \
+    { \
+        typedef ::pdalboost::iostreams::detail::pipeline_segment< \
+                    filter BOOST_IOSTREAMS_TEMPLATE_ARGS(arity, T) \
+                > segment; \
+        return ::pdalboost::iostreams::pipeline<segment, Component> \
+                   (segment(f), c); \
+    } \
+    /**/
+
+namespace pdalboost { namespace iostreams {
+
+template<typename Pipeline, typename Component>
+struct pipeline;
+    
+namespace detail {
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) 
+    struct pipeline_base { };
+
+    template<typename T>
+    struct is_pipeline 
+        : is_base_and_derived<pipeline_base, T>
+        { };
+#endif 
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+    template<typename T>
+    struct is_pipeline : mpl::false_ { };
+
+    template<typename Pipeline, typename Component>
+    struct is_pipeline< pipeline<Pipeline, Component> > : mpl::true_ { };
+#endif
+
+template<typename Component>
+class pipeline_segment 
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+    : pipeline_base 
+#endif 
+{
+public:
+    pipeline_segment(const Component& component) 
+        : component_(component) 
+        { }
+    template<typename Fn>
+    void for_each(Fn fn) const { fn(component_); }
+    template<typename Chain>
+    void push(Chain& chn) const { chn.push(component_); }
+private:
+    pipeline_segment operator=(const pipeline_segment&);
+    const Component& component_;
+};
+
+} // End namespace detail.
+                    
+//------------------Definition of Pipeline------------------------------------//
+
+template<typename Pipeline, typename Component>
+struct pipeline : Pipeline {
+    typedef Pipeline   pipeline_type;
+    typedef Component  component_type;
+    pipeline(const Pipeline& p, const Component& component)
+        : Pipeline(p), component_(component)
+        { }
+    template<typename Fn>
+    void for_each(Fn fn) const
+    {
+        Pipeline::for_each(fn);
+        fn(component_);
+    }
+    template<typename Chain>
+    void push(Chain& chn) const
+    { 
+        Pipeline::push(chn);
+        chn.push(component_);
+    }
+    const Pipeline& tail() const { return *this; }
+    const Component& head() const { return component_; }
+private:
+    pipeline operator=(const pipeline&);
+    const Component& component_;
+};
+
+template<typename Pipeline, typename Filter, typename Component>
+pipeline<pipeline<Pipeline, Filter>, Component>
+operator|(const pipeline<Pipeline, Filter>& p, const Component& cmp)
+{
+    BOOST_STATIC_ASSERT(is_filter<Filter>::value);
+    return pipeline<pipeline<Pipeline, Filter>, Component>(p, cmp);
+}
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_PIPABLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/positioning.hpp b/vendor/pdalboost/boost/iostreams/positioning.hpp
new file mode 100644
index 0000000..cc57298
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/positioning.hpp
@@ -0,0 +1,117 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Thanks to Gareth Sylvester-Bradley for the Dinkumware versions of the
+// positioning functions.
+
+#ifndef BOOST_IOSTREAMS_POSITIONING_HPP_INCLUDED
+#define BOOST_IOSTREAMS_POSITIONING_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/iostreams/detail/config/codecvt.hpp> // mbstate_t.
+#include <boost/iostreams/detail/config/fpos.hpp>
+#include <boost/iostreams/detail/ios.hpp> // streamoff, streampos.
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> 
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::fpos_t; }
+#endif
+
+namespace pdalboost { namespace iostreams {
+                    
+//------------------Definition of stream_offset-------------------------------//
+
+typedef pdalboost::intmax_t stream_offset;
+
+//------------------Definition of stream_offset_to_streamoff------------------//
+
+inline std::streamoff stream_offset_to_streamoff(stream_offset off)
+{ return static_cast<stream_offset>(off); }
+
+//------------------Definition of offset_to_position--------------------------//
+
+# ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+
+inline std::streampos offset_to_position(stream_offset off) { return off; }
+
+# else // # ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+
+inline std::streampos offset_to_position(stream_offset off)
+{ return std::streampos(std::mbstate_t(), off); }
+
+# endif // # ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+
+//------------------Definition of position_to_offset--------------------------//
+
+// Hande custom pos_type's
+template<typename PosType> 
+inline stream_offset position_to_offset(PosType pos)
+{ return std::streamoff(pos); }
+
+# ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+
+inline stream_offset position_to_offset(std::streampos pos) { return pos; }
+
+# else // # ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+
+// In the Dinkumware standard library, a std::streampos consists of two stream
+// offsets -- _Fpos, of type std::fpos_t, and _Myoff, of type std::streamoff --
+// together with a conversion state. A std::streampos is converted to a 
+// pdalboost::iostreams::stream_offset by extracting the two stream offsets and
+// summing them. The value of _Fpos can be extracted using the implementation-
+// defined member functions seekpos() or get_fpos_t(), depending on the 
+// Dinkumware version. The value of _Myoff cannot be extracted directly, but can
+// be calculated as the difference between the result of converting the 
+// std::fpos to a std::streamoff and the result of converting the member _Fpos
+// to a long. The latter operation is accomplished with the macro _FPOSOFF, 
+// which works correctly on platforms where std::fpos_t is an integral type and 
+// platforms where it is a struct
+
+// Converts a std::fpos_t to a stream_offset
+inline stream_offset fpos_t_to_offset(std::fpos_t pos)
+{
+#  if defined(_POSIX_) || (_INTEGRAL_MAX_BITS >= 64) || defined(__IBMCPP__)
+    return pos;
+#  else
+    return _FPOSOFF(pos);
+#  endif
+}
+
+// Extracts the member _Fpos from a std::fpos
+inline std::fpos_t streampos_to_fpos_t(std::streampos pos)
+{
+#  if defined (_CPPLIB_VER) || defined(__IBMCPP__)
+    return pos.seekpos();
+#  else
+    return pos.get_fpos_t();
+#  endif
+}
+
+inline stream_offset position_to_offset(std::streampos pos)
+{
+    return fpos_t_to_offset(streampos_to_fpos_t(pos)) +
+        static_cast<stream_offset>(
+            static_cast<std::streamoff>(pos) -
+            _FPOSOFF(streampos_to_fpos_t(pos))
+        );
+}
+
+# endif // # ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS 
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> 
+
+#endif // #ifndef BOOST_IOSTREAMS_POSITIONING_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/put.hpp b/vendor/pdalboost/boost/iostreams/put.hpp
new file mode 100644
index 0000000..5ad96ce
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/put.hpp
@@ -0,0 +1,17 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_PUT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_PUT_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/write.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_PUT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/putback.hpp b/vendor/pdalboost/boost/iostreams/putback.hpp
new file mode 100644
index 0000000..d0fabb3
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/putback.hpp
@@ -0,0 +1,17 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_PUTBACK_HPP_INCLUDED
+#define BOOST_IOSTREAMS_PUTBACK_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/read.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_PUTBACK_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/read.hpp b/vendor/pdalboost/boost/iostreams/read.hpp
new file mode 100644
index 0000000..806f4e5
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/read.hpp
@@ -0,0 +1,247 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_READ_HPP_INCLUDED
+#define BOOST_IOSTREAMS_READ_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>  // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/ios.hpp>  // streamsize.
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //-----------------------------------//
+# include <boost/iostreams/detail/vc6/read.hpp>
+#else // #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //--------------------------//
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct read_device_impl;
+
+template<typename T>
+struct read_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+typename int_type_of<T>::type get(T& t)
+{ return detail::read_device_impl<T>::get(detail::unwrap(t)); }
+
+template<typename T>
+inline std::streamsize
+read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+{ return detail::read_device_impl<T>::read(detail::unwrap(t), s, n); }
+
+template<typename T, typename Source>
+std::streamsize
+read(T& t, Source& src, typename char_type_of<T>::type* s, std::streamsize n)
+{ return detail::read_filter_impl<T>::read(detail::unwrap(t), src, s, n); }
+
+template<typename T>
+bool putback(T& t, typename char_type_of<T>::type c)
+{ return detail::read_device_impl<T>::putback(detail::unwrap(t), c); }
+
+//----------------------------------------------------------------------------//
+
+namespace detail {
+
+// Helper function for adding -1 as EOF indicator.
+inline std::streamsize check_eof(std::streamsize n) { return n != 0 ? n : -1; }
+
+// Helper templates for reading from streambufs.
+template<bool IsLinked>
+struct true_eof_impl;
+
+template<>
+struct true_eof_impl<true> {
+    template<typename T>
+    static bool true_eof(T& t) { return t.true_eof(); }
+};
+
+template<>
+struct true_eof_impl<false> {
+    template<typename T>
+    static bool true_eof(T&) { return true; }
+};
+
+template<typename T>
+inline bool true_eof(T& t)
+{
+    const bool linked = is_linked<T>::value;
+    return true_eof_impl<linked>::true_eof(t);
+}
+
+//------------------Definition of read_device_impl----------------------------//
+
+template<typename T>
+struct read_device_impl
+    : mpl::if_<
+          detail::is_custom<T>,
+          operations<T>,
+          read_device_impl<
+              BOOST_DEDUCED_TYPENAME
+              detail::dispatch<
+                  T, istream_tag, streambuf_tag, input
+              >::type
+          >
+      >::type
+    { };
+
+template<>
+struct read_device_impl<istream_tag> {
+    template<typename T>
+    static typename int_type_of<T>::type get(T& t)
+    { return t.get(); }
+
+    template<typename T>
+    static std::streamsize
+    read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+    { return check_eof(t.rdbuf()->sgetn(s, n)); }
+
+    template<typename T>
+    static bool putback(T& t, typename char_type_of<T>::type c)
+    {
+        typedef typename char_type_of<T>::type          char_type;
+        typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type)  traits_type;
+        return !traits_type::eq_int_type( t.rdbuf()->sputbackc(c),
+                                          traits_type::eof() );
+    }
+};
+
+template<>
+struct read_device_impl<streambuf_tag> {
+    template<typename T>
+    static typename int_type_of<T>::type
+    get(T& t)
+    {   // gcc 2.95 needs namespace qualification for char_traits.
+        typedef typename char_type_of<T>::type     char_type;
+        typedef iostreams::char_traits<char_type>  traits_type;
+        typename int_type_of<T>::type c;
+        return !traits_type::is_eof(c = t.sbumpc()) ||
+                detail::true_eof(t)
+                    ?
+                c : traits_type::would_block();
+    }
+
+    template<typename T>
+    static std::streamsize
+    read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+    {
+        std::streamsize amt;
+        return (amt = t.sgetn(s, n)) != 0 ?
+            amt :
+            detail::true_eof(t) ?
+                -1 :
+                0;
+    }
+
+    template<typename T>
+    static bool putback(T& t, typename char_type_of<T>::type c)
+    {   // gcc 2.95 needs namespace qualification for char_traits.
+        typedef typename char_type_of<T>::type     char_type;
+        typedef iostreams::char_traits<char_type>  traits_type;
+        return !traits_type::is_eof(t.sputbackc(c));
+    }
+};
+
+template<>
+struct read_device_impl<input> {
+    template<typename T>
+    static typename int_type_of<T>::type
+    get(T& t)
+    {   // gcc 2.95 needs namespace qualification for char_traits.
+        typedef typename char_type_of<T>::type     char_type;
+        typedef iostreams::char_traits<char_type>  traits_type;
+        char_type c;
+        std::streamsize amt;
+        return (amt = t.read(&c, 1)) == 1 ?
+            traits_type::to_int_type(c) :
+            amt == -1 ?
+                traits_type::eof() :
+                traits_type::would_block();
+    }
+
+    template<typename T>
+    static std::streamsize
+    read(T& t, typename char_type_of<T>::type* s, std::streamsize n)
+    { return t.read(s, n); }
+
+    template<typename T>
+    static bool putback(T& t, typename char_type_of<T>::type c)
+    {   // T must be Peekable.
+        return t.putback(c);
+    }
+};
+
+//------------------Definition of read_filter_impl----------------------------//
+
+template<typename T>
+struct read_filter_impl
+    : mpl::if_<
+          detail::is_custom<T>,
+          operations<T>,
+          read_filter_impl<
+              BOOST_DEDUCED_TYPENAME
+              detail::dispatch<
+                  T, multichar_tag, any_tag
+              >::type
+          >
+      >::type
+    { };
+
+template<>
+struct read_filter_impl<multichar_tag> {
+    template<typename T, typename Source>
+    static std::streamsize read
+       (T& t, Source& src, typename char_type_of<T>::type* s, std::streamsize n)
+    { return t.read(src, s, n); }
+};
+
+template<>
+struct read_filter_impl<any_tag> {
+    template<typename T, typename Source>
+    static std::streamsize read
+       (T& t, Source& src, typename char_type_of<T>::type* s, std::streamsize n)
+    {   // gcc 2.95 needs namespace qualification for char_traits.
+        typedef typename char_type_of<T>::type     char_type;
+        typedef iostreams::char_traits<char_type>  traits_type;
+        for (std::streamsize off = 0; off < n; ++off) {
+            typename traits_type::int_type c = t.get(src);
+            if (traits_type::is_eof(c))
+                return check_eof(off);
+            if (traits_type::would_block(c))
+                return off;
+            s[off] = traits_type::to_char_type(c);
+        }
+        return n;
+    }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#endif // #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //-------------------------//
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_READ_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/restrict.hpp b/vendor/pdalboost/boost/iostreams/restrict.hpp
new file mode 100644
index 0000000..33dd440
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/restrict.hpp
@@ -0,0 +1,26 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * File:        boost/iostreams/detail/restrict.hpp
+ * Date:        Sun Jan 06 12:57:30 MST 2008
+ * Copyright:   2008 CodeRage, LLC
+                2004-2007 Jonathan Turkanis
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ *
+ * Defines the class template pdalboost::iostreams::restriction and the 
+ * overloaded function template pdalboost::iostreams::restrict
+ */
+
+#ifndef BOOST_IOSTREAMS_RESTRICT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_RESTRICT_HPP_INCLUDED
+
+#include <boost/iostreams/detail/restrict_impl.hpp>
+#define BOOST_IOSTREAMS_RESTRICT restrict
+#include <boost/iostreams/detail/restrict_impl.hpp>
+#undef BOOST_IOSTREAMS_RESTRICT
+
+#endif // #ifndef BOOST_IOSTREAMS_RESTRICT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/seek.hpp b/vendor/pdalboost/boost/iostreams/seek.hpp
new file mode 100644
index 0000000..b825a43
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/seek.hpp
@@ -0,0 +1,180 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_SEEK_HPP_INCLUDED
+#define BOOST_IOSTREAMS_SEEK_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>  // DEDUCED_TYPENAME, MSVC.
+#include <boost/integer_traits.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/ios.hpp>       // streamsize, seekdir, openmode.
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+template<typename T>
+struct seek_device_impl;
+
+template<typename T>
+struct seek_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+inline std::streampos
+seek( T& t, stream_offset off, BOOST_IOS::seekdir way,
+      BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out )
+{ 
+    using namespace detail;
+    return seek_device_impl<T>::seek(detail::unwrap(t), off, way, which); 
+}
+
+template<typename T, typename Device>
+inline std::streampos
+seek( T& t, Device& dev, stream_offset off, BOOST_IOS::seekdir way,
+      BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out )
+{ 
+    using namespace detail;
+    return seek_filter_impl<T>::seek(detail::unwrap(t), dev, off, way, which);
+}
+
+namespace detail {
+
+//------------------Definition of seek_device_impl----------------------------//
+
+template<typename T>
+struct seek_device_impl
+    : mpl::if_<
+          is_custom<T>,
+          operations<T>,
+          seek_device_impl<
+              BOOST_DEDUCED_TYPENAME
+              dispatch<
+                  T, iostream_tag, istream_tag, ostream_tag,
+                  streambuf_tag, two_head, any_tag
+              >::type
+          >
+      >::type
+    { };
+
+struct seek_impl_basic_ios {
+    template<typename T>
+    static std::streampos seek( T& t, stream_offset off,
+                                BOOST_IOS::seekdir way,
+                                BOOST_IOS::openmode which )
+    {
+        if ( way == BOOST_IOS::beg &&
+             ( off < integer_traits<std::streamoff>::const_min ||
+               off > integer_traits<std::streamoff>::const_max ) )
+        {
+            return t.rdbuf()->pubseekpos(offset_to_position(off));
+        } else {
+            return t.rdbuf()->pubseekoff(off, way, which);
+        }
+    }
+};
+
+template<>
+struct seek_device_impl<iostream_tag> : seek_impl_basic_ios { };
+
+template<>
+struct seek_device_impl<istream_tag> : seek_impl_basic_ios { };
+
+template<>
+struct seek_device_impl<ostream_tag> : seek_impl_basic_ios { };
+
+template<>
+struct seek_device_impl<streambuf_tag> {
+    template<typename T>
+    static std::streampos seek( T& t, stream_offset off,
+                                BOOST_IOS::seekdir way,
+                                BOOST_IOS::openmode which )
+    {
+        if ( way == BOOST_IOS::beg &&
+             ( off < integer_traits<std::streamoff>::const_min ||
+               off > integer_traits<std::streamoff>::const_max ) )
+        {
+            return t.BOOST_IOSTREAMS_PUBSEEKPOS(offset_to_position(off));
+        } else {
+            return t.BOOST_IOSTREAMS_PUBSEEKOFF(off, way, which);
+        }
+    }
+};
+
+template<>
+struct seek_device_impl<two_head> {
+    template<typename T>
+    static std::streampos seek( T& t, stream_offset off,
+                                BOOST_IOS::seekdir way,
+                                BOOST_IOS::openmode which )
+    { return t.seek(off, way, which); }
+};
+
+template<>
+struct seek_device_impl<any_tag> {
+    template<typename T>
+    static std::streampos seek( T& t, stream_offset off,
+                                BOOST_IOS::seekdir way,
+                                BOOST_IOS::openmode )
+    { return t.seek(off, way); }
+};
+
+//------------------Definition of seek_filter_impl----------------------------//
+
+template<typename T>
+struct seek_filter_impl
+    : mpl::if_<
+          is_custom<T>,
+          operations<T>,
+          seek_filter_impl<
+              BOOST_DEDUCED_TYPENAME
+              dispatch<T, two_head, any_tag>::type
+          >
+      >::type
+    { };
+
+template<>
+struct seek_filter_impl<two_head> {
+    template<typename T, typename Device>
+    static std::streampos seek( T& t, Device& d,
+                                stream_offset off,
+                                BOOST_IOS::seekdir way,
+                                BOOST_IOS::openmode which )
+    { return t.seek(d, off, way, which); }
+};
+
+template<>
+struct seek_filter_impl<any_tag> {
+    template<typename T, typename Device>
+    static std::streampos seek( T& t, Device& d,
+                                stream_offset off,
+                                BOOST_IOS::seekdir way,
+                                BOOST_IOS::openmode )
+    { return t.seek(d, off, way); }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_SEEK_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/skip.hpp b/vendor/pdalboost/boost/iostreams/skip.hpp
new file mode 100644
index 0000000..be938e3
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/skip.hpp
@@ -0,0 +1,112 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// To do: handle bidirection streams and output-seekable components.
+
+#ifndef BOOST_IOSTREAMS_SKIP_HPP_INCLUDED
+#define BOOST_IOSTREAMS_SKIP_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp>  // failure.
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/seek.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+template<typename Device>
+void skip(Device& dev, stream_offset off, mpl::true_)
+{ iostreams::seek(dev, off, BOOST_IOS::cur); }
+
+template<typename Device>
+void skip(Device& dev, stream_offset off, mpl::false_)
+{   // gcc 2.95 needs namespace qualification for char_traits.
+    typedef typename char_type_of<Device>::type  char_type;
+    typedef iostreams::char_traits<char_type>    traits_type;
+    for (stream_offset z = 0; z < off; ) {
+        typename traits_type::int_type c;
+        if (traits_type::is_eof(c = iostreams::get(dev)))
+            pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad skip offset"));
+        if (!traits_type::would_block(c))
+            ++z;
+    }
+}
+
+template<typename Filter, typename Device>
+void skip( Filter& flt, Device& dev, stream_offset off,
+           BOOST_IOS::openmode which, mpl::true_ )
+{ pdalboost::iostreams::seek(flt, dev, off, BOOST_IOS::cur, which); }
+
+template<typename Filter, typename Device>
+void skip( Filter& flt, Device& dev, stream_offset off,
+           BOOST_IOS::openmode, mpl::false_ )
+{ 
+    typedef typename char_type_of<Device>::type char_type;
+    char_type c;
+    for (stream_offset z = 0; z < off; ) {
+        std::streamsize amt;
+        if ((amt = iostreams::read(flt, dev, &c, 1)) == -1)
+            pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad skip offset"));
+        if (amt == 1)
+            ++z;
+    }
+}
+
+} // End namespace detail.
+
+template<typename Device>
+void skip(Device& dev, stream_offset off)
+{ 
+    typedef typename mode_of<Device>::type     mode;
+    typedef mpl::or_<
+        is_convertible<mode, input_seekable>,
+        is_convertible<mode, output_seekable>
+    >                                          can_seek;
+    BOOST_STATIC_ASSERT(
+        (can_seek::value || is_convertible<mode, input>::value)
+    );
+    detail::skip(dev, off, can_seek());
+}
+
+template<typename Filter, typename Device>
+void skip( Filter& flt, Device& dev, stream_offset off, 
+           BOOST_IOS::openmode which = BOOST_IOS::in | BOOST_IOS::out )
+{ 
+    typedef typename mode_of<Filter>::type                 filter_mode;
+    typedef typename mode_of<Device>::type                 device_mode;
+    typedef mpl::or_<
+        mpl::and_<
+            is_convertible<filter_mode, input_seekable>,
+            is_convertible<device_mode, input_seekable>
+        >,
+        mpl::and_<
+            is_convertible<filter_mode, output_seekable>,
+            is_convertible<device_mode, output_seekable>
+        >
+    >                                                      can_seek;
+    BOOST_STATIC_ASSERT(
+        ( can_seek::value || 
+          (is_convertible<filter_mode, input>::value &&
+          is_convertible<device_mode, input>::value) )
+    );
+    detail::skip(flt, dev, off, which, can_seek());
+}
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_SKIP_HPP_INCLUDED //------------------------//
diff --git a/vendor/pdalboost/boost/iostreams/slice.hpp b/vendor/pdalboost/boost/iostreams/slice.hpp
new file mode 100644
index 0000000..7a7f21f
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/slice.hpp
@@ -0,0 +1,28 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * File:        boost/iostreams/detail/restrict.hpp
+ * Date:        Sun Jan 06 12:57:30 MST 2008
+ * Copyright:   2008 CodeRage, LLC
+                2004-2007 Jonathan Turkanis
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ *
+ * Defines the class template pdalboost::iostreams::restriction and the 
+ * overloaded function template pdalboost::iostreams::slice.
+ *
+ * This header is provided for platforms on which "restrict" is a keyword.
+ */
+
+#ifndef BOOST_IOSTREAMS_RESTRICT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_RESTRICT_HPP_INCLUDED
+
+#include <boost/iostreams/detail/restrict_impl.hpp>
+#define BOOST_IOSTREAMS_RESTRICT slice
+#include <boost/iostreams/detail/restrict_impl.hpp>
+#undef BOOST_IOSTREAMS_RESTRICT
+
+#endif // #ifndef BOOST_IOSTREAMS_RESTRICT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/stream.hpp b/vendor/pdalboost/boost/iostreams/stream.hpp
new file mode 100644
index 0000000..5de4f20
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/stream.hpp
@@ -0,0 +1,151 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_STREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_STREAM_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/iostreams/constants.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/config/overload_resolution.hpp>
+#include <boost/iostreams/detail/forward.hpp>
+#include <boost/iostreams/detail/iostream.hpp>  // standard streams.
+#include <boost/iostreams/detail/select.hpp>
+#include <boost/iostreams/stream_buffer.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/utility/base_from_member.hpp>
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<typename Device, typename Tr>
+struct stream_traits {
+    typedef typename char_type_of<Device>::type                char_type;
+    typedef Tr                                                 traits_type;
+    typedef typename category_of<Device>::type                 mode;
+    typedef typename
+            iostreams::select< // Disambiguation required for Tru64.
+                mpl::and_<
+                    is_convertible<mode, input>,
+                    is_convertible<mode, output>
+                >,
+                BOOST_IOSTREAMS_BASIC_IOSTREAM(char_type, traits_type),
+                is_convertible<mode, input>,
+                BOOST_IOSTREAMS_BASIC_ISTREAM(char_type, traits_type),
+                else_,
+                BOOST_IOSTREAMS_BASIC_OSTREAM(char_type, traits_type)
+            >::type stream_type;
+    typedef typename
+            iostreams::select< // Disambiguation required for Tru64.
+                mpl::and_<
+                    is_convertible<mode, input>,
+                    is_convertible<mode, output>
+                >,
+                iostream_tag,
+                is_convertible<mode, input>,
+                istream_tag,
+                else_,
+                ostream_tag
+            >::type stream_tag;
+};
+
+// By encapsulating initialization in a base, we can define the macro
+// BOOST_IOSTREAMS_DEFINE_FORWARDING_FUNCTIONS to generate constructors
+// without base member initializer lists.
+template< typename Device,
+          typename Tr =
+              BOOST_IOSTREAMS_CHAR_TRAITS(
+                  BOOST_DEDUCED_TYPENAME char_type_of<Device>::type
+              ),
+          typename Alloc =
+              std::allocator<
+                  BOOST_DEDUCED_TYPENAME char_type_of<Device>::type
+              >,
+          typename Base = // VC6 Workaround.
+              BOOST_DEDUCED_TYPENAME
+              detail::stream_traits<Device, Tr>::stream_type >
+class stream_base
+    : protected base_from_member< stream_buffer<Device, Tr, Alloc> >,
+      public Base
+{
+private:
+    typedef base_from_member< stream_buffer<Device, Tr, Alloc> >  pbase_type;
+    typedef typename stream_traits<Device, Tr>::stream_type       stream_type;
+protected:
+    using pbase_type::member; // Avoid warning about 'this' in initializer list.
+public:
+    stream_base() : pbase_type(), stream_type(&member) { }
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#ifdef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION
+# include <boost/iostreams/detail/broken_overload_resolution/stream.hpp>
+#else
+
+namespace pdalboost { namespace iostreams {
+
+//
+// Template name: stream.
+// Description: A iostream which reads from and writes to an instance of a
+//      designated device type.
+// Template parameters:
+//      Device - A device type.
+//      Alloc - The allocator type.
+//
+template< typename Device,
+          typename Tr =
+              BOOST_IOSTREAMS_CHAR_TRAITS(
+                  BOOST_DEDUCED_TYPENAME char_type_of<Device>::type
+              ),
+          typename Alloc =
+              std::allocator<
+                  BOOST_DEDUCED_TYPENAME char_type_of<Device>::type
+              > >
+struct stream : detail::stream_base<Device, Tr, Alloc> {
+public:
+    typedef typename char_type_of<Device>::type  char_type;
+    struct category 
+        : mode_of<Device>::type,
+          closable_tag,
+          detail::stream_traits<Device, Tr>::stream_tag
+        { };
+    BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+private:
+    typedef typename
+            detail::stream_traits<
+                Device, Tr
+            >::stream_type                       stream_type;
+public:
+    stream() { }
+    BOOST_IOSTREAMS_FORWARD( stream, open_impl, Device,
+                             BOOST_IOSTREAMS_PUSH_PARAMS,
+                             BOOST_IOSTREAMS_PUSH_ARGS )
+    bool is_open() const { return this->member.is_open(); }
+    void close() { this->member.close(); }
+    bool auto_close() const { return this->member.auto_close(); }
+    void set_auto_close(bool close) { this->member.set_auto_close(close); }
+    bool strict_sync() { return this->member.strict_sync(); }
+    Device& operator*() { return *this->member; }
+    Device* operator->() { return &*this->member; }
+    Device* component() { return this->member.component(); }
+private:
+    void open_impl(const Device& dev BOOST_IOSTREAMS_PUSH_PARAMS()) // For forwarding.
+    { 
+        this->clear(); 
+        this->member.open(dev BOOST_IOSTREAMS_PUSH_ARGS()); 
+    }
+};
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifdef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION
+
+#endif // #ifndef BOOST_IOSTREAMS_stream_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/stream_buffer.hpp b/vendor/pdalboost/boost/iostreams/stream_buffer.hpp
new file mode 100644
index 0000000..9ea0505
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/stream_buffer.hpp
@@ -0,0 +1,116 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_STREAM_BUFFER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_STREAM_BUFFER_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <memory>            // allocator.
+#include <boost/config.hpp>  // BOOST_DEDUCED_TYPENAME.
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/config/overload_resolution.hpp>
+#include <boost/iostreams/detail/forward.hpp>
+#include <boost/iostreams/detail/ios.hpp>  // failure, streamsize.
+#include <boost/iostreams/detail/streambuf/direct_streambuf.hpp>
+#include <boost/iostreams/detail/streambuf/indirect_streambuf.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>  // MSVC.
+
+namespace pdalboost { namespace iostreams { namespace detail {
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+struct stream_buffer_traits {
+    typedef typename
+            mpl::if_<
+                is_convertible<
+                    BOOST_DEDUCED_TYPENAME category_of<T>::type,
+                    direct_tag
+                >,
+                direct_streambuf<T, Tr>,
+                indirect_streambuf<T, Tr, Alloc, Mode>
+            >::type type;
+};
+
+} } } // End namespaces detail, iostreams, boost
+
+#ifdef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION
+# include <boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp>
+#else
+
+namespace pdalboost { namespace iostreams {
+
+template< typename T,
+          typename Tr =
+              BOOST_IOSTREAMS_CHAR_TRAITS(
+                  BOOST_DEDUCED_TYPENAME char_type_of<T>::type
+              ),
+          typename Alloc =
+              std::allocator<
+                  BOOST_DEDUCED_TYPENAME char_type_of<T>::type
+              >,
+          typename Mode = BOOST_DEDUCED_TYPENAME mode_of<T>::type >
+class stream_buffer
+    : public detail::stream_buffer_traits<T, Tr, Alloc, Mode>::type
+{
+private:
+    BOOST_STATIC_ASSERT((
+        is_convertible<
+            BOOST_DEDUCED_TYPENAME iostreams::category_of<T>::type, Mode
+        >::value
+    ));
+    typedef typename
+            detail::stream_buffer_traits<
+                T, Tr, Alloc, Mode
+            >::type                           base_type;
+public:
+    typedef typename char_type_of<T>::type    char_type;
+    struct category 
+        : Mode,
+          closable_tag,
+          streambuf_tag
+        { };
+    BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr)
+public:
+    stream_buffer() { }
+    ~stream_buffer()
+    { 
+        try { 
+            if (this->is_open() && this->auto_close()) 
+                this->close(); 
+        } catch (...) { } 
+    }
+    BOOST_IOSTREAMS_FORWARD( stream_buffer, open_impl, T,
+                             BOOST_IOSTREAMS_PUSH_PARAMS,
+                             BOOST_IOSTREAMS_PUSH_ARGS )
+    T& operator*() { return *this->component(); }
+    T* operator->() { return this->component(); }
+private:
+    void open_impl(const T& t BOOST_IOSTREAMS_PUSH_PARAMS())
+        {   // Used for forwarding.
+            if (this->is_open())
+                pdalboost::throw_exception(
+                    BOOST_IOSTREAMS_FAILURE("already open")
+                );
+            base_type::open(t BOOST_IOSTREAMS_PUSH_ARGS());
+        }
+};
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifdef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>  // MSVC.
+
+#endif // #ifndef BOOST_IOSTREAMS_STREAM_BUFFER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/tee.hpp b/vendor/pdalboost/boost/iostreams/tee.hpp
new file mode 100644
index 0000000..46b2b31
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/tee.hpp
@@ -0,0 +1,232 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>  // BOOST_DEDUCE_TYPENAME.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/adapter/device_adapter.hpp>
+#include <boost/iostreams/detail/adapter/filter_adapter.hpp>
+#include <boost/iostreams/detail/call_traits.hpp>
+#include <boost/iostreams/detail/execute.hpp>
+#include <boost/iostreams/detail/functional.hpp>  // call_close_all 
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+//
+// Template name: tee_filter.
+// Template parameters:
+//      Device - A blocking Sink.
+//
+template<typename Device>
+class tee_filter : public detail::filter_adapter<Device> {
+public:
+    typedef typename detail::param_type<Device>::type  param_type;
+    typedef typename char_type_of<Device>::type        char_type;
+    struct category
+        : dual_use_filter_tag,
+          multichar_tag,
+          closable_tag,
+          flushable_tag,
+          localizable_tag,
+          optimally_buffered_tag
+        { };
+
+    BOOST_STATIC_ASSERT(is_device<Device>::value);
+    BOOST_STATIC_ASSERT((
+        is_convertible< // Using mode_of causes failures on VC6-7.0.
+            BOOST_DEDUCED_TYPENAME iostreams::category_of<Device>::type, output
+        >::value
+    ));
+
+    explicit tee_filter(param_type dev) 
+        : detail::filter_adapter<Device>(dev) 
+        { }
+
+    template<typename Source>
+    std::streamsize read(Source& src, char_type* s, std::streamsize n)
+    {
+        std::streamsize result = iostreams::read(src, s, n);
+        if (result != -1) {
+            std::streamsize result2 = iostreams::write(this->component(), s, result);
+            (void) result2; // Suppress 'unused variable' warning.
+            BOOST_ASSERT(result == result2);
+        }
+        return result;
+    }
+
+    template<typename Sink>
+    std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
+    {
+        std::streamsize result = iostreams::write(snk, s, n);
+        std::streamsize result2 = iostreams::write(this->component(), s, result);
+        (void) result2; // Suppress 'unused variable' warning.
+        BOOST_ASSERT(result == result2);
+        return result;
+    }
+
+    template<typename Next>
+    void close(Next&, BOOST_IOS::openmode)
+    { 
+        detail::close_all(this->component());
+    }
+
+    template<typename Sink>
+    bool flush(Sink& snk)
+    {
+        bool r1 = iostreams::flush(snk);
+        bool r2 = iostreams::flush(this->component());
+        return r1 && r2;
+    }
+};
+BOOST_IOSTREAMS_PIPABLE(tee_filter, 1)
+
+//
+// Template name: tee_device.
+// Template parameters:
+//      Device - A blocking Device.
+//      Sink - A blocking Sink.
+//
+template<typename Device, typename Sink>
+class tee_device {
+public:
+    typedef typename detail::param_type<Device>::type  device_param;
+    typedef typename detail::param_type<Sink>::type    sink_param;
+    typedef typename detail::value_type<Device>::type  device_value;
+    typedef typename detail::value_type<Sink>::type    sink_value;
+    typedef typename char_type_of<Device>::type        char_type;
+    typedef typename
+            mpl::if_<
+                 is_convertible<
+                     BOOST_DEDUCED_TYPENAME 
+                         iostreams::category_of<Device>::type, 
+                     output
+                 >,
+                 output,
+                 input
+            >::type                                    mode;
+    BOOST_STATIC_ASSERT(is_device<Device>::value);
+    BOOST_STATIC_ASSERT(is_device<Sink>::value);
+    BOOST_STATIC_ASSERT((
+        is_same<
+            char_type, 
+            BOOST_DEDUCED_TYPENAME char_type_of<Sink>::type
+        >::value
+    ));
+    BOOST_STATIC_ASSERT((
+        is_convertible<
+            BOOST_DEDUCED_TYPENAME iostreams::category_of<Sink>::type, 
+            output
+        >::value
+    ));
+    struct category
+        : mode,
+          device_tag,
+          closable_tag,
+          flushable_tag,
+          localizable_tag,
+          optimally_buffered_tag
+        { };
+    tee_device(device_param device, sink_param sink) 
+        : dev_(device), sink_(sink)
+        { }
+    std::streamsize read(char_type* s, std::streamsize n)
+    {
+        BOOST_STATIC_ASSERT((
+            is_convertible<
+                BOOST_DEDUCED_TYPENAME iostreams::category_of<Device>::type, input
+            >::value
+        ));
+        std::streamsize result1 = iostreams::read(dev_, s, n);
+        if (result1 != -1) {
+            std::streamsize result2 = iostreams::write(sink_, s, result1);
+            (void) result1; // Suppress 'unused variable' warning.
+            (void) result2;
+            BOOST_ASSERT(result1 == result2);
+        }
+        return result1;
+    }
+    std::streamsize write(const char_type* s, std::streamsize n)
+    {
+        BOOST_STATIC_ASSERT((
+            is_convertible<
+                BOOST_DEDUCED_TYPENAME iostreams::category_of<Device>::type, output
+            >::value
+        ));
+        std::streamsize result1 = iostreams::write(dev_, s, n);
+        std::streamsize result2 = iostreams::write(sink_, s, n);
+        (void) result1; // Suppress 'unused variable' warning.
+        (void) result2;
+        BOOST_ASSERT(result1 == n && result2 == n);
+        return n;
+    }
+    void close()
+    {
+        detail::execute_all( detail::call_close_all(dev_),
+                             detail::call_close_all(sink_) );
+    }
+    bool flush()
+    {
+        bool r1 = iostreams::flush(dev_);
+        bool r2 = iostreams::flush(sink_);
+        return r1 && r2;
+    }
+    template<typename Locale>
+    void imbue(const Locale& loc)
+    {
+        iostreams::imbue(dev_, loc);
+        iostreams::imbue(sink_, loc);
+    }
+    std::streamsize optimal_buffer_size() const 
+    {
+        return (std::max) ( iostreams::optimal_buffer_size(dev_), 
+                            iostreams::optimal_buffer_size(sink_) );
+    }
+private:
+    device_value  dev_;
+    sink_value    sink_;
+};
+
+template<typename Sink>
+tee_filter<Sink> tee(Sink& snk) 
+{ return tee_filter<Sink>(snk); }
+
+template<typename Sink>
+tee_filter<Sink> tee(const Sink& snk) 
+{ return tee_filter<Sink>(snk); }
+
+template<typename Device, typename Sink>
+tee_device<Device, Sink> tee(Device& dev, Sink& sink) 
+{ return tee_device<Device, Sink>(dev, sink); }
+
+template<typename Device, typename Sink>
+tee_device<Device, Sink> tee(const Device& dev, Sink& sink) 
+{ return tee_device<Device, Sink>(dev, sink); }
+
+template<typename Device, typename Sink>
+tee_device<Device, Sink> tee(Device& dev, const Sink& sink) 
+{ return tee_device<Device, Sink>(dev, sink); }
+
+template<typename Device, typename Sink>
+tee_device<Device, Sink> tee(const Device& dev, const Sink& sink) 
+{ return tee_device<Device, Sink>(dev, sink); }
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_TEE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/traits.hpp b/vendor/pdalboost/boost/iostreams/traits.hpp
new file mode 100644
index 0000000..2c8eb0e
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/traits.hpp
@@ -0,0 +1,391 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// 
+// Contains metafunctions char_type_of, category_of and mode_of used for
+// deducing the i/o category and i/o mode of a model of Filter or Device.
+//
+// Also contains several utility metafunctions, functions and macros.
+//
+
+#ifndef BOOST_IOSTREAMS_IO_TRAITS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_IO_TRAITS_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <iosfwd>            // stream types, char_traits.
+#include <boost/config.hpp>  // partial spec, deduced typename.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/bool_trait_def.hpp> 
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/is_iterator_range.hpp>    
+#include <boost/iostreams/detail/select.hpp>        
+#include <boost/iostreams/detail/select_by_size.hpp>      
+#include <boost/iostreams/detail/wrap_unwrap.hpp>       
+#include <boost/iostreams/traits_fwd.hpp> 
+#include <boost/mpl/bool.hpp>   
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>      
+#include <boost/mpl/int.hpp>  
+#include <boost/mpl/or.hpp>                 
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# include <boost/range/iterator_range.hpp>
+# include <boost/range/value_type.hpp>
+#endif // #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+#include <boost/ref.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+//----------Definitions of predicates for streams and stream buffers----------//
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------------------//
+
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_istream, std::basic_istream, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_ostream, std::basic_ostream, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_iostream, std::basic_iostream, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_streambuf, std::basic_streambuf, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_ifstream, std::basic_ifstream, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_ofstream, std::basic_ofstream, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_fstream, std::basic_fstream, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_filebuf, std::basic_filebuf, 2)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_istringstream, std::basic_istringstream, 3)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_ostringstream, std::basic_ostringstream, 3)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_stringstream, std::basic_stringstream, 3)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_stringbuf, std::basic_stringbuf, 3)
+
+#else // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-----------------------//
+
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_istream, std::istream, 0)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_ostream, std::ostream, 0)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_iostream, std::iostream, 0)
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_streambuf, std::streambuf, 0)
+
+#endif // #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //----------------------//
+
+template<typename T>
+struct is_std_io
+    : mpl::or_< is_istream<T>, is_ostream<T>, is_streambuf<T> >
+    { };
+
+template<typename T>
+struct is_std_file_device
+    : mpl::or_< 
+          is_ifstream<T>, 
+          is_ofstream<T>, 
+          is_fstream<T>, 
+          is_filebuf<T>
+      >
+    { };
+
+template<typename T>
+struct is_std_string_device
+    : mpl::or_< 
+          is_istringstream<T>, 
+          is_ostringstream<T>, 
+          is_stringstream<T>, 
+          is_stringbuf<T>
+      >
+    { };
+
+template<typename Device, typename Tr, typename Alloc>
+struct stream;
+
+template<typename T, typename Tr, typename Alloc, typename Mode>
+class stream_buffer;
+
+template< typename Mode, typename Ch, typename Tr, 
+          typename Alloc, typename Access >
+class filtering_stream;
+
+template< typename Mode, typename Ch, typename Tr, 
+          typename Alloc, typename Access >
+class wfiltering_stream;
+
+template< typename Mode, typename Ch, typename Tr, 
+          typename Alloc, typename Access >
+class filtering_streambuf;
+
+template< typename Mode, typename Ch, typename Tr, 
+          typename Alloc, typename Access >
+class filtering_wstreambuf;
+
+namespace detail {
+
+template<typename T, typename Tr>
+class linked_streambuf;
+
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF( is_boost_stream,
+                                pdalboost::iostreams::stream,
+                                3 )
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF( is_boost_stream_buffer,
+                                pdalboost::iostreams::stream_buffer,
+                                4 )
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF( is_filtering_stream_impl,
+                                pdalboost::iostreams::filtering_stream,
+                                5 )
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF( is_filtering_wstream_impl,
+                                pdalboost::iostreams::wfiltering_stream,
+                                5 )
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF( is_filtering_streambuf_impl,
+                                pdalboost::iostreams::filtering_streambuf,
+                                5 )
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF( is_filtering_wstreambuf_impl,
+                                pdalboost::iostreams::filtering_wstreambuf,
+                                5 )
+BOOST_IOSTREAMS_BOOL_TRAIT_DEF(is_linked, linked_streambuf, 2)
+
+template<typename T>
+struct is_filtering_stream
+    : mpl::or_<
+          is_filtering_stream_impl<T>,
+          is_filtering_wstream_impl<T>
+      >
+    { };
+
+template<typename T>
+struct is_filtering_streambuf
+    : mpl::or_<
+          is_filtering_streambuf_impl<T>,
+          is_filtering_wstreambuf_impl<T>
+      >
+    { };
+
+template<typename T>
+struct is_boost
+    : mpl::or_<
+          is_boost_stream<T>, 
+          is_boost_stream_buffer<T>, 
+          is_filtering_stream<T>, 
+          is_filtering_streambuf<T>
+      >
+    { };
+
+} // End namespace detail.
+                    
+//------------------Definitions of char_type_of-------------------------------//
+
+namespace detail {
+
+template<typename T>
+struct member_char_type { typedef typename T::char_type type; };
+
+} // End namespace detail.
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION //---------------------------//
+# ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-------------------------------//
+
+template<typename T>
+struct char_type_of 
+    : detail::member_char_type<
+          typename detail::unwrapped_type<T>::type
+      > 
+    { };
+
+# else // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //---------------------//
+
+template<typename T>
+struct char_type_of {
+    typedef typename detail::unwrapped_type<T>::type U;
+    typedef typename 
+            mpl::eval_if<
+                is_std_io<U>,
+                mpl::identity<char>,
+                detail::member_char_type<U>
+            >::type type;
+};
+
+# endif // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------//
+
+template<typename Iter>
+struct char_type_of< iterator_range<Iter> > {
+    typedef typename iterator_value<Iter>::type type;
+};
+
+#else // #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION //------------------//
+
+template<typename T>
+struct char_type_of {
+    template<typename U>
+    struct get_value_type {
+        #if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+            typedef typename range_value<U>::type type;
+        #endif // #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+    };
+    typedef typename 
+            mpl::eval_if<
+                is_iterator_range<T>,
+                get_value_type<T>,
+                detail::member_char_type<
+                    BOOST_DEDUCED_TYPENAME detail::unwrapped_type<T>::type
+                >
+            >::type type;
+};
+
+#endif // #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION //-----------------//
+
+//------------------Definitions of category_of--------------------------------//
+
+namespace detail {
+
+template<typename T>
+struct member_category { typedef typename T::category type; };
+
+} // End namespace detail.
+
+template<typename T>
+struct category_of {
+    template<typename U>
+    struct member_category { 
+        typedef typename U::category type; 
+    };
+    typedef typename detail::unwrapped_type<T>::type U;
+    typedef typename  
+            mpl::eval_if<
+                mpl::and_<
+                    is_std_io<U>,
+                    mpl::not_< detail::is_boost<U> >
+                >,
+                iostreams::select<  // Disambiguation for Tru64
+                    is_filebuf<U>,        filebuf_tag,
+                    is_ifstream<U>,       ifstream_tag,
+                    is_ofstream<U>,       ofstream_tag,
+                    is_fstream<U>,        fstream_tag,
+                    is_stringbuf<U>,      stringbuf_tag,
+                    is_istringstream<U>,  istringstream_tag,
+                    is_ostringstream<U>,  ostringstream_tag,
+                    is_stringstream<U>,   stringstream_tag,
+                    is_streambuf<U>,      generic_streambuf_tag,
+                    is_iostream<U>,       generic_iostream_tag,
+                    is_istream<U>,        generic_istream_tag, 
+                    is_ostream<U>,        generic_ostream_tag
+                >,
+                detail::member_category<U>
+            >::type type;
+};
+
+// Partial specialization for reference wrappers
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION //---------------------------//
+
+template<typename T>
+struct category_of< reference_wrapper<T> >
+    : category_of<T>
+    { };
+
+#endif // #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION //-----------------//
+
+//------------------Definition of get_category--------------------------------//
+
+// 
+// Returns an object of type category_of<T>::type.
+// 
+template<typename T>
+inline typename category_of<T>::type get_category(const T&) 
+{ typedef typename category_of<T>::type category; return category(); }
+
+//------------------Definition of int_type_of---------------------------------//
+
+template<typename T>
+struct int_type_of { 
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+    typedef std::char_traits<
+                BOOST_DEDUCED_TYPENAME char_type_of<T>::type
+            > traits_type;      
+    typedef typename traits_type::int_type type; 
+#else  
+    typedef int                            type; 
+#endif
+};
+
+//------------------Definition of mode_of-------------------------------------//
+
+namespace detail {
+
+template<int N> struct io_mode_impl;
+
+#define BOOST_IOSTREAMS_MODE_HELPER(tag_, id_) \
+    case_<id_> io_mode_impl_helper(tag_); \
+    template<> struct io_mode_impl<id_> { typedef tag_ type; }; \
+    /**/
+BOOST_IOSTREAMS_MODE_HELPER(input, 1)
+BOOST_IOSTREAMS_MODE_HELPER(output, 2)
+BOOST_IOSTREAMS_MODE_HELPER(bidirectional, 3)
+BOOST_IOSTREAMS_MODE_HELPER(input_seekable, 4)
+BOOST_IOSTREAMS_MODE_HELPER(output_seekable, 5)
+BOOST_IOSTREAMS_MODE_HELPER(seekable, 6)
+BOOST_IOSTREAMS_MODE_HELPER(dual_seekable, 7)
+BOOST_IOSTREAMS_MODE_HELPER(bidirectional_seekable, 8)
+BOOST_IOSTREAMS_MODE_HELPER(dual_use, 9)
+#undef BOOST_IOSTREAMS_MODE_HELPER
+
+template<typename T>
+struct io_mode_id {
+    typedef typename category_of<T>::type category;
+    BOOST_SELECT_BY_SIZE(int, value, detail::io_mode_impl_helper(category()));
+};
+
+} // End namespace detail.
+
+template<typename T> // Borland 5.6.4 requires this circumlocution.
+struct mode_of : detail::io_mode_impl< detail::io_mode_id<T>::value > { };
+
+// Partial specialization for reference wrappers
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION //---------------------------//
+
+template<typename T>
+struct mode_of< reference_wrapper<T> >
+    : mode_of<T>
+    { };
+
+#endif // #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION //-----------------//
+                    
+//------------------Definition of is_device, is_filter and is_direct----------//
+
+namespace detail {
+
+template<typename T, typename Tag>
+struct has_trait_impl {
+    typedef typename category_of<T>::type category;
+    BOOST_STATIC_CONSTANT(bool, value = (is_convertible<category, Tag>::value));
+};
+
+template<typename T, typename Tag>
+struct has_trait 
+    : mpl::bool_<has_trait_impl<T, Tag>::value>
+    { }; 
+
+} // End namespace detail.
+
+template<typename T>
+struct is_device : detail::has_trait<T, device_tag> { };
+
+template<typename T>
+struct is_filter : detail::has_trait<T, filter_tag> { };
+
+template<typename T>
+struct is_direct : detail::has_trait<T, direct_tag> { };
+                    
+//------------------Definition of BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS----------//
+
+#define BOOST_IOSTREAMS_STREAMBUF_TYPEDEFS(Tr) \
+    typedef Tr                              traits_type; \
+    typedef typename traits_type::int_type  int_type; \
+    typedef typename traits_type::off_type  off_type; \
+    typedef typename traits_type::pos_type  pos_type; \
+    /**/
+
+} } // End namespaces iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_IO_TRAITS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/traits_fwd.hpp b/vendor/pdalboost/boost/iostreams/traits_fwd.hpp
new file mode 100644
index 0000000..a79e7bb
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/traits_fwd.hpp
@@ -0,0 +1,111 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Forward declarations of templates defined in traits.hpp.
+
+#ifndef BOOST_IOSTREAMS_IO_TRAITS_FWD_HPP_INCLUDED
+#define BOOST_IOSTREAMS_IO_TRAITS_FWD_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif              
+
+#include <iosfwd> // stream types, char_traits.
+
+namespace pdalboost { namespace iostreams {      
+
+template<typename T>
+struct is_istream;
+
+template<typename T>
+struct is_ostream;
+
+template<typename T>
+struct is_iostream;
+
+template<typename T>
+struct is_streambuf;
+
+template<typename T>
+struct is_istringstream;
+
+template<typename T>
+struct is_ostringstream;
+
+template<typename T>
+struct is_stringstream;
+
+template<typename T>
+struct is_stringbuf;
+
+template<typename T>
+struct is_ifstream;
+
+template<typename T>
+struct is_ofstream;
+
+template<typename T>
+struct is_fstream;
+
+template<typename T>
+struct is_filebuf;
+
+template<typename T>
+struct is_std_io;
+
+template<typename T>
+struct is_std_file_device;
+
+template<typename T>
+struct is_std_string_device;
+
+template<typename T>
+struct char_type_of;
+
+template<typename T>
+struct category_of;
+
+template<typename T>
+struct int_type_of;
+
+template<typename T>
+struct mode_of;
+
+template<typename T>
+struct is_device;
+
+template<typename T>
+struct is_filter;
+
+template<typename T>
+struct is_direct;
+
+namespace detail {
+
+template<typename T>
+struct is_boost_stream;
+
+template<typename T>
+struct is_boost_stream_buffer;
+
+template<typename T>
+struct is_filtering_stream;
+
+template<typename T>
+struct is_filtering_streambuf;
+
+template<typename T>
+struct is_linked;
+
+template<typename T>
+struct is_boost;
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_IO_TRAITS_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iostreams/write.hpp b/vendor/pdalboost/boost/iostreams/write.hpp
new file mode 100644
index 0000000..1a51bce
--- /dev/null
+++ b/vendor/pdalboost/boost/iostreams/write.hpp
@@ -0,0 +1,171 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_WRITE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_WRITE_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <boost/config.hpp>  // DEDUCED_TYPENAME, MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/dispatch.hpp>
+#include <boost/iostreams/detail/ios.hpp>  // streamsize.
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/mpl/if.hpp>
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //-----------------------------------//
+# include <boost/iostreams/detail/vc6/write.hpp>
+#else // #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //--------------------------//
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+template<typename T> 
+struct write_device_impl;
+
+template<typename T> 
+struct write_filter_impl;
+
+} // End namespace detail.
+
+template<typename T>
+bool put(T& t, typename char_type_of<T>::type c)
+{ return detail::write_device_impl<T>::put(detail::unwrap(t), c); }
+
+template<typename T>
+inline std::streamsize write
+    (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+{ return detail::write_device_impl<T>::write(detail::unwrap(t), s, n); }
+
+template<typename T, typename Sink>
+inline std::streamsize
+write( T& t, Sink& snk, const typename char_type_of<T>::type* s, 
+       std::streamsize n )
+{ return detail::write_filter_impl<T>::write(detail::unwrap(t), snk, s, n); }
+
+namespace detail {
+
+//------------------Definition of write_device_impl---------------------------//
+
+template<typename T>
+struct write_device_impl
+    : mpl::if_<
+          is_custom<T>,
+          operations<T>,
+          write_device_impl<
+              BOOST_DEDUCED_TYPENAME
+              dispatch<
+                  T, ostream_tag, streambuf_tag, output
+              >::type
+          >
+      >::type
+    { };
+
+template<>
+struct write_device_impl<ostream_tag> {
+    template<typename T>
+    static bool put(T& t, typename char_type_of<T>::type c)
+    {
+        typedef typename char_type_of<T>::type          char_type;
+        typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type)  traits_type;
+        return !traits_type::eq_int_type( t.rdbuf()->sputc(c),
+                                          traits_type::eof() );
+    }
+
+    template<typename T>
+    static std::streamsize write
+        (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+    { return t.rdbuf()->sputn(s, n); }
+};
+
+template<>
+struct write_device_impl<streambuf_tag> {
+    template<typename T>
+    static bool put(T& t, typename char_type_of<T>::type c)
+    {
+        typedef typename char_type_of<T>::type          char_type;
+        typedef BOOST_IOSTREAMS_CHAR_TRAITS(char_type)  traits_type;
+        return !traits_type::eq_int_type(t.sputc(c), traits_type::eof());
+    }
+
+    template<typename T>
+    static std::streamsize write
+        (T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+    { return t.sputn(s, n); }
+};
+
+template<>
+struct write_device_impl<output> {
+    template<typename T>
+    static bool put(T& t, typename char_type_of<T>::type c)
+    { return t.write(&c, 1) == 1; }
+
+    template<typename T>
+    static std::streamsize
+    write(T& t, const typename char_type_of<T>::type* s, std::streamsize n)
+    { return t.write(s, n); }
+};
+
+//------------------Definition of write_filter_impl---------------------------//
+
+template<typename T>
+struct write_filter_impl
+    : mpl::if_<
+          is_custom<T>,
+          operations<T>,
+          write_filter_impl<
+              BOOST_DEDUCED_TYPENAME
+              dispatch<
+                  T, multichar_tag, any_tag
+              >::type
+          >
+      >::type
+    { };
+
+template<>
+struct write_filter_impl<multichar_tag> {
+    template<typename T, typename Sink>
+    static std::streamsize
+    write( T& t, Sink& snk, const typename char_type_of<T>::type* s,
+           std::streamsize n )
+    { return t.write(snk, s, n); }
+};
+
+template<>
+struct write_filter_impl<any_tag> {
+    template<typename T, typename Sink>
+    static std::streamsize
+    write( T& t, Sink& snk, const typename char_type_of<T>::type* s,
+           std::streamsize n )
+    {
+        for (std::streamsize off = 0; off < n; ++off)
+            if (!t.put(snk, s[off]))
+                return off;
+        return n;
+    }
+};
+
+} // End namespace detail.
+
+} } // End namespaces iostreams, boost.
+
+#endif // #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) //-------------------------//
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_WRITE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/is_placeholder.hpp b/vendor/pdalboost/boost/is_placeholder.hpp
new file mode 100644
index 0000000..cc12ee4
--- /dev/null
+++ b/vendor/pdalboost/boost/is_placeholder.hpp
@@ -0,0 +1,31 @@
+#ifndef BOOST_IS_PLACEHOLDER_HPP_INCLUDED
+#define BOOST_IS_PLACEHOLDER_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined( _MSC_VER ) && ( _MSC_VER >= 1020 )
+# pragma once
+#endif
+
+
+//  is_placeholder.hpp - TR1 is_placeholder metafunction
+//
+//  Copyright (c) 2006 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+
+
+namespace pdalboost
+{
+
+template< class T > struct is_placeholder
+{
+    enum _vt { value = 0 };
+};
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_IS_PLACEHOLDER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/iterator.hpp b/vendor/pdalboost/boost/iterator.hpp
new file mode 100644
index 0000000..3047536
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator.hpp
@@ -0,0 +1,20 @@
+//  (C) Copyright Beman Dawes 2000. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_ITERATOR_HPP
+#define BOOST_ITERATOR_HPP
+
+// This header is obsolete and will be deprecated.
+
+#include <iterator>
+#include <cstddef>           // std::ptrdiff_t
+
+namespace pdalboost
+{
+
+using std::iterator;
+
+} // namespace pdalboost
+
+#endif // BOOST_ITERATOR_HPP
diff --git a/vendor/pdalboost/boost/iterator/detail/config_def.hpp b/vendor/pdalboost/boost/iterator/detail/config_def.hpp
new file mode 100644
index 0000000..6c59258
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator/detail/config_def.hpp
@@ -0,0 +1,128 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek    2002.
+// (C) Copyright Thomas Witt    2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// no include guard multiple inclusion intended
+
+//
+// This is a temporary workaround until the bulk of this is
+// available in boost config.
+// 23/02/03 thw
+//
+
+#include <boost/config.hpp> // for prior
+#include <boost/detail/workaround.hpp>
+
+#ifdef BOOST_ITERATOR_CONFIG_DEF
+# error you have nested config_def #inclusion.
+#else 
+# define BOOST_ITERATOR_CONFIG_DEF
+#endif 
+
+// We enable this always now.  Otherwise, the simple case in
+// libs/iterator/test/constant_iterator_arrow.cpp fails to compile
+// because the operator-> return is improperly deduced as a non-const
+// pointer.
+#if 1 || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)           \
+    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x531))
+
+// Recall that in general, compilers without partial specialization
+// can't strip constness.  Consider counting_iterator, which normally
+// passes a const Value to iterator_facade.  As a result, any code
+// which makes a std::vector of the iterator's value_type will fail
+// when its allocator declares functions overloaded on reference and
+// const_reference (the same type).
+//
+// Furthermore, Borland 5.5.1 drops constness in enough ways that we
+// end up using a proxy for operator[] when we otherwise shouldn't.
+// Using reference constness gives it an extra hint that it can
+// return the value_type from operator[] directly, but is not
+// strictly necessary.  Not sure how best to resolve this one.
+
+# define BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY 1
+
+#endif
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x5A0))                      \
+    || (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) && defined(_MSC_VER)) \
+    || BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))                \
+    || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))
+    
+# define BOOST_NO_LVALUE_RETURN_DETECTION
+
+# if 0 // test code
+  struct v  {};
+
+  typedef  char (&no)[3];
+
+  template <class T>
+  no foo(T const&, ...);
+
+  template <class T>
+  char foo(T&, int);
+
+
+  struct value_iterator
+  {
+      v operator*() const;
+  };
+
+  template <class T>
+  struct lvalue_deref_helper
+  {
+      static T& x;
+      enum { value = (sizeof(foo(*x,0)) == 1) };
+  };
+
+  int z2[(lvalue_deref_helper<v*>::value == 1) ? 1 : -1];
+  int z[(lvalue_deref_helper<value_iterator>::value) == 1 ? -1 : 1 ];
+# endif 
+
+#endif
+
+#if BOOST_WORKAROUND(__MWERKS__, <=0x2407)
+#  define BOOST_NO_IS_CONVERTIBLE // "is_convertible doesn't work for simple types"
+#endif
+
+#if BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, < 4) && !defined(__EDG_VERSION__)   \
+    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+#  define BOOST_NO_IS_CONVERTIBLE_TEMPLATE // The following program fails to compile:
+
+#  if 0 // test code
+    #include <boost/type_traits/is_convertible.hpp>
+    template <class T>
+    struct foo
+    {
+        foo(T);
+
+        template <class U>
+        foo(foo<U> const& other) : p(other.p) { }
+
+        T p;
+    };
+
+    bool x = pdalboost::is_convertible<foo<int const*>, foo<int*> >::value;
+#  endif
+
+#endif
+
+
+#if !defined(BOOST_MSVC) && (defined(BOOST_NO_SFINAE) || defined(BOOST_NO_IS_CONVERTIBLE) || defined(BOOST_NO_IS_CONVERTIBLE_TEMPLATE))
+# define BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY
+#endif 
+
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+
+// GCC-2.95 (obsolete) eagerly instantiates templated constructors and conversion
+// operators in convertibility checks, causing premature errors.
+//
+// Borland's problems are harder to diagnose due to lack of an
+// instantiation stack backtrace.  They may be due in part to the fact
+// that it drops cv-qualification willy-nilly in templates.
+#  define BOOST_NO_ONE_WAY_ITERATOR_INTEROP
+# endif 
+
+// no include guard; multiple inclusion intended
diff --git a/vendor/pdalboost/boost/iterator/detail/config_undef.hpp b/vendor/pdalboost/boost/iterator/detail/config_undef.hpp
new file mode 100644
index 0000000..bf1b8d7
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator/detail/config_undef.hpp
@@ -0,0 +1,24 @@
+// (C) Copyright Thomas Witt    2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// no include guard multiple inclusion intended
+
+//
+// This is a temporary workaround until the bulk of this is
+// available in boost config.
+// 23/02/03 thw
+//
+
+#undef BOOST_NO_IS_CONVERTIBLE
+#undef BOOST_NO_IS_CONVERTIBLE_TEMPLATE
+#undef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY
+#undef BOOST_NO_LVALUE_RETURN_DETECTION
+#undef BOOST_NO_ONE_WAY_ITERATOR_INTEROP
+
+#ifdef BOOST_ITERATOR_CONFIG_DEF
+# undef BOOST_ITERATOR_CONFIG_DEF
+#else
+# error missing or nested #include config_def
+#endif 
diff --git a/vendor/pdalboost/boost/iterator/detail/enable_if.hpp b/vendor/pdalboost/boost/iterator/detail/enable_if.hpp
new file mode 100644
index 0000000..1f42d7d
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator/detail/enable_if.hpp
@@ -0,0 +1,83 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek    2002.
+// (C) Copyright Thomas Witt    2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_ENABLE_IF_23022003THW_HPP
+#define BOOST_ENABLE_IF_23022003THW_HPP
+
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/identity.hpp>
+
+#include <boost/iterator/detail/config_def.hpp>
+
+//
+// Boost iterators uses its own enable_if cause we need
+// special semantics for deficient compilers.
+// 23/02/03 thw
+//
+
+namespace pdalboost
+{
+
+  namespace iterators
+  {
+    //
+    // Base machinery for all kinds of enable if
+    //
+    template<bool>
+    struct enabled
+    {
+      template<typename T>
+      struct base
+      {
+        typedef T type;
+      };
+    };
+
+    //
+    // For compilers that don't support "Substitution Failure Is Not An Error"
+    // enable_if falls back to always enabled. See comments
+    // on operator implementation for consequences.
+    //
+    template<>
+    struct enabled<false>
+    {
+      template<typename T>
+      struct base
+      {
+#ifdef BOOST_NO_SFINAE
+
+        typedef T type;
+
+        // This way to do it would give a nice error message containing
+        // invalid overload, but has the big disadvantage that
+        // there is no reference to user code in the error message.
+        //
+        // struct invalid_overload;
+        // typedef invalid_overload type;
+        //
+#endif
+      };
+    };
+
+
+    template <class Cond,
+              class Return>
+    struct enable_if
+# if !defined(BOOST_NO_SFINAE) && !defined(BOOST_NO_IS_CONVERTIBLE)
+      : enabled<(Cond::value)>::template base<Return>
+# else
+      : mpl::identity<Return>
+# endif
+    {
+    };
+
+  } // namespace iterators
+
+} // namespace pdalboost
+
+#include <boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_ENABLE_IF_23022003THW_HPP
diff --git a/vendor/pdalboost/boost/iterator/detail/facade_iterator_category.hpp b/vendor/pdalboost/boost/iterator/detail/facade_iterator_category.hpp
new file mode 100644
index 0000000..1257366
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator/detail/facade_iterator_category.hpp
@@ -0,0 +1,193 @@
+// Copyright David Abrahams 2003. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef FACADE_ITERATOR_CATEGORY_DWA20031118_HPP
+# define FACADE_ITERATOR_CATEGORY_DWA20031118_HPP
+
+# include <boost/iterator/iterator_categories.hpp>
+
+# include <boost/mpl/or.hpp>  // used in iterator_tag inheritance logic
+# include <boost/mpl/and.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/identity.hpp>
+# include <boost/mpl/assert.hpp>
+
+# include <boost/type_traits/is_same.hpp>
+# include <boost/type_traits/is_const.hpp>
+# include <boost/type_traits/is_reference.hpp>
+# include <boost/type_traits/is_convertible.hpp>
+
+# include <boost/type_traits/is_same.hpp>
+
+# include <boost/iterator/detail/config_def.hpp> // try to keep this last
+
+# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY
+#  include <boost/detail/indirect_traits.hpp>
+# endif
+
+//
+// iterator_category deduction for iterator_facade
+//
+
+namespace pdalboost {
+namespace iterators {
+
+// forward declaration
+struct use_default;
+
+namespace detail {
+
+struct input_output_iterator_tag
+  : std::input_iterator_tag
+{
+    // Using inheritance for only input_iterator_tag helps to avoid
+    // ambiguities when a stdlib implementation dispatches on a
+    // function which is overloaded on both input_iterator_tag and
+    // output_iterator_tag, as STLPort does, in its __valid_range
+    // function.  I claim it's better to avoid the ambiguity in these
+    // cases.
+    operator std::output_iterator_tag() const
+    {
+        return std::output_iterator_tag();
+    }
+};
+
+//
+// True iff the user has explicitly disabled writability of this
+// iterator.  Pass the iterator_facade's Value parameter and its
+// nested ::reference type.
+//
+template <class ValueParam, class Reference>
+struct iterator_writability_disabled
+# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY // Adding Thomas' logic?
+  : mpl::or_<
+        is_const<Reference>
+      , pdalboost::detail::indirect_traits::is_reference_to_const<Reference>
+      , is_const<ValueParam>
+    >
+# else
+  : is_const<ValueParam>
+# endif
+{};
+
+
+//
+// Convert an iterator_facade's traversal category, Value parameter,
+// and ::reference type to an appropriate old-style category.
+//
+// Due to changeset 21683, this now never results in a category convertible
+// to output_iterator_tag.
+//
+// Change at: https://svn.boost.org/trac/boost/changeset/21683
+template <class Traversal, class ValueParam, class Reference>
+struct iterator_facade_default_category
+  : mpl::eval_if<
+        mpl::and_<
+            is_reference<Reference>
+          , is_convertible<Traversal,forward_traversal_tag>
+        >
+      , mpl::eval_if<
+            is_convertible<Traversal,random_access_traversal_tag>
+          , mpl::identity<std::random_access_iterator_tag>
+          , mpl::if_<
+                is_convertible<Traversal,bidirectional_traversal_tag>
+              , std::bidirectional_iterator_tag
+              , std::forward_iterator_tag
+            >
+        >
+      , typename mpl::eval_if<
+            mpl::and_<
+                is_convertible<Traversal, single_pass_traversal_tag>
+
+                // check for readability
+              , is_convertible<Reference, ValueParam>
+            >
+          , mpl::identity<std::input_iterator_tag>
+          , mpl::identity<Traversal>
+        >
+    >
+{
+};
+
+// True iff T is convertible to an old-style iterator category.
+template <class T>
+struct is_iterator_category
+  : mpl::or_<
+        is_convertible<T,std::input_iterator_tag>
+      , is_convertible<T,std::output_iterator_tag>
+    >
+{
+};
+
+template <class T>
+struct is_iterator_traversal
+  : is_convertible<T,incrementable_traversal_tag>
+{};
+
+//
+// A composite iterator_category tag convertible to Category (a pure
+// old-style category) and Traversal (a pure traversal tag).
+// Traversal must be a strict increase of the traversal power given by
+// Category.
+//
+template <class Category, class Traversal>
+struct iterator_category_with_traversal
+  : Category, Traversal
+{
+    // Make sure this isn't used to build any categories where
+    // convertibility to Traversal is redundant.  Should just use the
+    // Category element in that case.
+    BOOST_MPL_ASSERT_NOT((
+        is_convertible<
+              typename iterator_category_to_traversal<Category>::type
+            , Traversal
+          >));
+
+    BOOST_MPL_ASSERT((is_iterator_category<Category>));
+    BOOST_MPL_ASSERT_NOT((is_iterator_category<Traversal>));
+    BOOST_MPL_ASSERT_NOT((is_iterator_traversal<Category>));
+#  if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
+    BOOST_MPL_ASSERT((is_iterator_traversal<Traversal>));
+#  endif
+};
+
+// Computes an iterator_category tag whose traversal is Traversal and
+// which is appropriate for an iterator
+template <class Traversal, class ValueParam, class Reference>
+struct facade_iterator_category_impl
+{
+    BOOST_MPL_ASSERT_NOT((is_iterator_category<Traversal>));
+
+    typedef typename iterator_facade_default_category<
+        Traversal,ValueParam,Reference
+    >::type category;
+
+    typedef typename mpl::if_<
+        is_same<
+            Traversal
+          , typename iterator_category_to_traversal<category>::type
+        >
+      , category
+      , iterator_category_with_traversal<category,Traversal>
+    >::type type;
+};
+
+//
+// Compute an iterator_category for iterator_facade
+//
+template <class CategoryOrTraversal, class ValueParam, class Reference>
+struct facade_iterator_category
+  : mpl::eval_if<
+        is_iterator_category<CategoryOrTraversal>
+      , mpl::identity<CategoryOrTraversal> // old-style categories are fine as-is
+      , facade_iterator_category_impl<CategoryOrTraversal,ValueParam,Reference>
+    >
+{
+};
+
+}}} // namespace pdalboost::iterators::detail
+
+# include <boost/iterator/detail/config_undef.hpp>
+
+#endif // FACADE_ITERATOR_CATEGORY_DWA20031118_HPP
diff --git a/vendor/pdalboost/boost/iterator/filter_iterator.hpp b/vendor/pdalboost/boost/iterator/filter_iterator.hpp
new file mode 100644
index 0000000..9e399cd
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator/filter_iterator.hpp
@@ -0,0 +1,137 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek    2002.
+// (C) Copyright Thomas Witt    2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_FILTER_ITERATOR_23022003THW_HPP
+#define BOOST_FILTER_ITERATOR_23022003THW_HPP
+
+#include <boost/iterator.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+
+#include <boost/type_traits/is_class.hpp>
+#include <boost/static_assert.hpp>
+
+namespace pdalboost {
+namespace iterators {
+
+  template <class Predicate, class Iterator>
+  class filter_iterator;
+
+  namespace detail
+  {
+    template <class Predicate, class Iterator>
+    struct filter_iterator_base
+    {
+        typedef iterator_adaptor<
+            filter_iterator<Predicate, Iterator>
+          , Iterator
+          , use_default
+          , typename mpl::if_<
+                is_convertible<
+                    typename iterator_traversal<Iterator>::type
+                  , random_access_traversal_tag
+                >
+              , bidirectional_traversal_tag
+              , use_default
+            >::type
+        > type;
+    };
+  }
+
+  template <class Predicate, class Iterator>
+  class filter_iterator
+    : public detail::filter_iterator_base<Predicate, Iterator>::type
+  {
+      typedef typename detail::filter_iterator_base<
+          Predicate, Iterator
+      >::type super_t;
+
+      friend class iterator_core_access;
+
+   public:
+      filter_iterator() { }
+
+      filter_iterator(Predicate f, Iterator x, Iterator end_ = Iterator())
+          : super_t(x), m_predicate(f), m_end(end_)
+      {
+          satisfy_predicate();
+      }
+
+      filter_iterator(Iterator x, Iterator end_ = Iterator())
+        : super_t(x), m_predicate(), m_end(end_)
+      {
+        // Pro8 is a little too aggressive about instantiating the
+        // body of this function.
+#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+          // Don't allow use of this constructor if Predicate is a
+          // function pointer type, since it will be 0.
+          BOOST_STATIC_ASSERT(is_class<Predicate>::value);
+#endif
+          satisfy_predicate();
+      }
+
+      template<class OtherIterator>
+      filter_iterator(
+          filter_iterator<Predicate, OtherIterator> const& t
+          , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0
+          )
+          : super_t(t.base()), m_predicate(t.predicate()), m_end(t.end()) {}
+
+      Predicate predicate() const { return m_predicate; }
+
+      Iterator end() const { return m_end; }
+
+   private:
+      void increment()
+      {
+          ++(this->base_reference());
+          satisfy_predicate();
+      }
+
+      void decrement()
+      {
+        while(!this->m_predicate(*--(this->base_reference()))){};
+      }
+
+      void satisfy_predicate()
+      {
+          while (this->base() != this->m_end && !this->m_predicate(*this->base()))
+              ++(this->base_reference());
+      }
+
+      // Probably should be the initial base class so it can be
+      // optimized away via EBO if it is an empty class.
+      Predicate m_predicate;
+      Iterator m_end;
+  };
+
+  template <class Predicate, class Iterator>
+  inline filter_iterator<Predicate,Iterator>
+  make_filter_iterator(Predicate f, Iterator x, Iterator end = Iterator())
+  {
+      return filter_iterator<Predicate,Iterator>(f,x,end);
+  }
+
+  template <class Predicate, class Iterator>
+  inline filter_iterator<Predicate,Iterator>
+  make_filter_iterator(
+      typename iterators::enable_if<
+          is_class<Predicate>
+        , Iterator
+      >::type x
+    , Iterator end = Iterator())
+  {
+      return filter_iterator<Predicate,Iterator>(x,end);
+  }
+
+} // namespace iterators
+
+using iterators::filter_iterator;
+using iterators::make_filter_iterator;
+
+} // namespace pdalboost
+
+#endif // BOOST_FILTER_ITERATOR_23022003THW_HPP
diff --git a/vendor/pdalboost/boost/iterator/indirect_iterator.hpp b/vendor/pdalboost/boost/iterator/indirect_iterator.hpp
new file mode 100644
index 0000000..5039fa7
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator/indirect_iterator.hpp
@@ -0,0 +1,145 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek    2002.
+// (C) Copyright Thomas Witt    2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_INDIRECT_ITERATOR_23022003THW_HPP
+#define BOOST_INDIRECT_ITERATOR_23022003THW_HPP
+
+#include <boost/iterator.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+
+#include <boost/pointee.hpp>
+#include <boost/indirect_reference.hpp>
+#include <boost/detail/iterator.hpp>
+
+#include <boost/detail/indirect_traits.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/add_reference.hpp>
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/has_xxx.hpp>
+
+#ifdef BOOST_MPL_CFG_NO_HAS_XXX
+# include <boost/shared_ptr.hpp>
+# include <boost/scoped_ptr.hpp>
+# include <boost/mpl/bool.hpp>
+# include <memory>
+#endif
+
+#include <boost/iterator/detail/config_def.hpp> // must be last #include
+
+namespace pdalboost {
+namespace iterators {
+
+  template <class Iter, class Value, class Category, class Reference, class Difference>
+  class indirect_iterator;
+
+  namespace detail
+  {
+    template <class Iter, class Value, class Category, class Reference, class Difference>
+    struct indirect_base
+    {
+        typedef typename pdalboost::detail::iterator_traits<Iter>::value_type dereferenceable;
+
+        typedef iterator_adaptor<
+            indirect_iterator<Iter, Value, Category, Reference, Difference>
+          , Iter
+          , typename ia_dflt_help<
+                Value, pointee<dereferenceable>
+            >::type
+          , Category
+          , typename ia_dflt_help<
+                Reference
+              , mpl::eval_if<
+                    is_same<Value,use_default>
+                  , indirect_reference<dereferenceable>
+                  , add_reference<Value>
+                >
+            >::type
+          , Difference
+        > type;
+    };
+
+    template <>
+    struct indirect_base<int, int, int, int, int> {};
+  } // namespace detail
+
+
+  template <
+      class Iterator
+    , class Value = use_default
+    , class Category = use_default
+    , class Reference = use_default
+    , class Difference = use_default
+  >
+  class indirect_iterator
+    : public detail::indirect_base<
+        Iterator, Value, Category, Reference, Difference
+      >::type
+  {
+      typedef typename detail::indirect_base<
+          Iterator, Value, Category, Reference, Difference
+      >::type super_t;
+
+      friend class iterator_core_access;
+
+   public:
+      indirect_iterator() {}
+
+      indirect_iterator(Iterator iter)
+        : super_t(iter) {}
+
+      template <
+          class Iterator2, class Value2, class Category2
+        , class Reference2, class Difference2
+      >
+      indirect_iterator(
+          indirect_iterator<
+               Iterator2, Value2, Category2, Reference2, Difference2
+          > const& y
+        , typename enable_if_convertible<Iterator2, Iterator>::type* = 0
+      )
+        : super_t(y.base())
+      {}
+
+  private:
+      typename super_t::reference dereference() const
+      {
+# if BOOST_WORKAROUND(__BORLANDC__, < 0x5A0 )
+          return const_cast<super_t::reference>(**this->base());
+# else
+          return **this->base();
+# endif
+      }
+  };
+
+  template <class Iter>
+  inline
+  indirect_iterator<Iter> make_indirect_iterator(Iter x)
+  {
+    return indirect_iterator<Iter>(x);
+  }
+
+  template <class Traits, class Iter>
+  inline
+  indirect_iterator<Iter,Traits> make_indirect_iterator(Iter x, Traits* = 0)
+  {
+    return indirect_iterator<Iter, Traits>(x);
+  }
+
+} // namespace iterators
+
+using iterators::indirect_iterator;
+using iterators::make_indirect_iterator;
+
+} // namespace pdalboost
+
+#include <boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_INDIRECT_ITERATOR_23022003THW_HPP
diff --git a/vendor/pdalboost/boost/iterator/interoperable.hpp b/vendor/pdalboost/boost/iterator/interoperable.hpp
new file mode 100644
index 0000000..b6f385e
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator/interoperable.hpp
@@ -0,0 +1,54 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek    2002.
+// (C) Copyright Thomas Witt    2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_INTEROPERABLE_23022003THW_HPP
+# define BOOST_INTEROPERABLE_23022003THW_HPP
+
+# include <boost/mpl/bool.hpp>
+# include <boost/mpl/or.hpp>
+
+# include <boost/type_traits/is_convertible.hpp>
+
+# include <boost/iterator/detail/config_def.hpp> // must appear last
+
+namespace pdalboost {
+namespace iterators {
+
+  //
+  // Meta function that determines whether two
+  // iterator types are considered interoperable.
+  //
+  // Two iterator types A,B are considered interoperable if either
+  // A is convertible to B or vice versa.
+  // This interoperability definition is in sync with the
+  // standards requirements on constant/mutable container
+  // iterators (23.1 [lib.container.requirements]).
+  //
+  // For compilers that don't support is_convertible
+  // is_interoperable gives false positives. See comments
+  // on operator implementation for consequences.
+  //
+  template <typename A, typename B>
+  struct is_interoperable
+# ifdef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY
+    : mpl::true_
+# else
+    : mpl::or_<
+          is_convertible< A, B >
+        , is_convertible< B, A > >
+# endif
+  {
+  };
+
+} // namespace iterators
+
+using iterators::is_interoperable;
+
+} // namespace pdalboost
+
+# include <boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_INTEROPERABLE_23022003THW_HPP
diff --git a/vendor/pdalboost/boost/iterator/iterator_adaptor.hpp b/vendor/pdalboost/boost/iterator/iterator_adaptor.hpp
new file mode 100644
index 0000000..d00e91d
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator/iterator_adaptor.hpp
@@ -0,0 +1,360 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek    2002.
+// (C) Copyright Thomas Witt    2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_ITERATOR_ADAPTOR_23022003THW_HPP
+#define BOOST_ITERATOR_ADAPTOR_23022003THW_HPP
+
+#include <boost/static_assert.hpp>
+#include <boost/iterator.hpp>
+#include <boost/detail/iterator.hpp>
+
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/iterator/detail/enable_if.hpp>
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/or.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+#ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY
+# include <boost/type_traits/remove_reference.hpp>
+#endif
+
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/iterator/detail/config_def.hpp>
+
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace pdalboost {
+namespace iterators {
+
+  // Used as a default template argument internally, merely to
+  // indicate "use the default", this can also be passed by users
+  // explicitly in order to specify that the default should be used.
+  struct use_default;
+
+} // namespace iterators
+
+using iterators::use_default;
+
+// the incompleteness of use_default causes massive problems for
+// is_convertible (naturally).  This workaround is fortunately not
+// needed for vc6/vc7.
+template<class To>
+struct is_convertible<use_default,To>
+  : mpl::false_ {};
+
+namespace iterators {
+
+  namespace detail
+  {
+
+    //
+    // Result type used in enable_if_convertible meta function.
+    // This can be an incomplete type, as only pointers to
+    // enable_if_convertible< ... >::type are used.
+    // We could have used void for this, but conversion to
+    // void* is just to easy.
+    //
+    struct enable_type;
+  }
+
+
+  //
+  // enable_if for use in adapted iterators constructors.
+  //
+  // In order to provide interoperability between adapted constant and
+  // mutable iterators, adapted iterators will usually provide templated
+  // conversion constructors of the following form
+  //
+  // template <class BaseIterator>
+  // class adapted_iterator :
+  //   public iterator_adaptor< adapted_iterator<Iterator>, Iterator >
+  // {
+  // public:
+  //
+  //   ...
+  //
+  //   template <class OtherIterator>
+  //   adapted_iterator(
+  //       OtherIterator const& it
+  //     , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0);
+  //
+  //   ...
+  // };
+  //
+  // enable_if_convertible is used to remove those overloads from the overload
+  // set that cannot be instantiated. For all practical purposes only overloads
+  // for constant/mutable interaction will remain. This has the advantage that
+  // meta functions like pdalboost::is_convertible do not return false positives,
+  // as they can only look at the signature of the conversion constructor
+  // and not at the actual instantiation.
+  //
+  // enable_if_interoperable can be safely used in user code. It falls back to
+  // always enabled for compilers that don't support enable_if or is_convertible.
+  // There is no need for compiler specific workarounds in user code.
+  //
+  // The operators implementation relies on pdalboost::is_convertible not returning
+  // false positives for user/library defined iterator types. See comments
+  // on operator implementation for consequences.
+  //
+#  if defined(BOOST_NO_IS_CONVERTIBLE) || defined(BOOST_NO_SFINAE)
+
+  template <class From, class To>
+  struct enable_if_convertible
+  {
+      typedef pdalboost::iterators::detail::enable_type type;
+  };
+
+#  elif BOOST_WORKAROUND(_MSC_FULL_VER, BOOST_TESTED_AT(13102292))
+
+  // For some reason vc7.1 needs us to "cut off" instantiation
+  // of is_convertible in a few cases.
+  template<typename From, typename To>
+  struct enable_if_convertible
+    : iterators::enable_if<
+        mpl::or_<
+            is_same<From,To>
+          , is_convertible<From, To>
+        >
+      , pdalboost::iterators::detail::enable_type
+    >
+  {};
+
+#  else
+
+  template<typename From, typename To>
+  struct enable_if_convertible
+    : iterators::enable_if<
+          is_convertible<From, To>
+        , pdalboost::iterators::detail::enable_type
+      >
+  {};
+
+# endif
+
+  //
+  // Default template argument handling for iterator_adaptor
+  //
+  namespace detail
+  {
+    // If T is use_default, return the result of invoking
+    // DefaultNullaryFn, otherwise return T.
+    template <class T, class DefaultNullaryFn>
+    struct ia_dflt_help
+      : mpl::eval_if<
+            is_same<T, use_default>
+          , DefaultNullaryFn
+          , mpl::identity<T>
+        >
+    {
+    };
+
+    // A metafunction which computes an iterator_adaptor's base class,
+    // a specialization of iterator_facade.
+    template <
+        class Derived
+      , class Base
+      , class Value
+      , class Traversal
+      , class Reference
+      , class Difference
+    >
+    struct iterator_adaptor_base
+    {
+        typedef iterator_facade<
+            Derived
+
+# ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY
+          , typename pdalboost::iterators::detail::ia_dflt_help<
+                Value
+              , mpl::eval_if<
+                    is_same<Reference,use_default>
+                  , iterator_value<Base>
+                  , remove_reference<Reference>
+                >
+            >::type
+# else
+          , typename pdalboost::iterators::detail::ia_dflt_help<
+                Value, iterator_value<Base>
+            >::type
+# endif
+
+          , typename pdalboost::iterators::detail::ia_dflt_help<
+                Traversal
+              , iterator_traversal<Base>
+            >::type
+
+          , typename pdalboost::iterators::detail::ia_dflt_help<
+                Reference
+              , mpl::eval_if<
+                    is_same<Value,use_default>
+                  , iterator_reference<Base>
+                  , add_reference<Value>
+                >
+            >::type
+
+          , typename pdalboost::iterators::detail::ia_dflt_help<
+                Difference, iterator_difference<Base>
+            >::type
+        >
+        type;
+    };
+
+    // workaround for aC++ CR JAGaf33512
+    template <class Tr1, class Tr2>
+    inline void iterator_adaptor_assert_traversal ()
+    {
+      BOOST_STATIC_ASSERT((is_convertible<Tr1, Tr2>::value));
+    }
+  }
+
+  //
+  // Iterator Adaptor
+  //
+  // The parameter ordering changed slightly with respect to former
+  // versions of iterator_adaptor The idea is that when the user needs
+  // to fiddle with the reference type it is highly likely that the
+  // iterator category has to be adjusted as well.  Any of the
+  // following four template arguments may be ommitted or explicitly
+  // replaced by use_default.
+  //
+  //   Value - if supplied, the value_type of the resulting iterator, unless
+  //      const. If const, a conforming compiler strips constness for the
+  //      value_type. If not supplied, iterator_traits<Base>::value_type is used
+  //
+  //   Category - the traversal category of the resulting iterator. If not
+  //      supplied, iterator_traversal<Base>::type is used.
+  //
+  //   Reference - the reference type of the resulting iterator, and in
+  //      particular, the result type of operator*(). If not supplied but
+  //      Value is supplied, Value& is used. Otherwise
+  //      iterator_traits<Base>::reference is used.
+  //
+  //   Difference - the difference_type of the resulting iterator. If not
+  //      supplied, iterator_traits<Base>::difference_type is used.
+  //
+  template <
+      class Derived
+    , class Base
+    , class Value        = use_default
+    , class Traversal    = use_default
+    , class Reference    = use_default
+    , class Difference   = use_default
+  >
+  class iterator_adaptor
+    : public pdalboost::iterators::detail::iterator_adaptor_base<
+        Derived, Base, Value, Traversal, Reference, Difference
+      >::type
+  {
+      friend class iterator_core_access;
+
+   protected:
+      typedef typename pdalboost::iterators::detail::iterator_adaptor_base<
+          Derived, Base, Value, Traversal, Reference, Difference
+      >::type super_t;
+   public:
+      iterator_adaptor() {}
+
+      explicit iterator_adaptor(Base const &iter)
+          : m_iterator(iter)
+      {
+      }
+
+      typedef Base base_type;
+
+      Base const& base() const
+        { return m_iterator; }
+
+   protected:
+      // for convenience in derived classes
+      typedef iterator_adaptor<Derived,Base,Value,Traversal,Reference,Difference> iterator_adaptor_;
+
+      //
+      // lvalue access to the Base object for Derived
+      //
+      Base const& base_reference() const
+        { return m_iterator; }
+
+      Base& base_reference()
+        { return m_iterator; }
+
+   private:
+      //
+      // Core iterator interface for iterator_facade.  This is private
+      // to prevent temptation for Derived classes to use it, which
+      // will often result in an error.  Derived classes should use
+      // base_reference(), above, to get direct access to m_iterator.
+      //
+      typename super_t::reference dereference() const
+        { return *m_iterator; }
+
+      template <
+      class OtherDerived, class OtherIterator, class V, class C, class R, class D
+      >
+      bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const
+      {
+        // Maybe readd with same_distance
+        //           BOOST_STATIC_ASSERT(
+        //               (detail::same_category_and_difference<Derived,OtherDerived>::value)
+        //               );
+          return m_iterator == x.base();
+      }
+
+      typedef typename iterator_category_to_traversal<
+          typename super_t::iterator_category
+      >::type my_traversal;
+
+# define BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(cat) \
+      pdalboost::iterators::detail::iterator_adaptor_assert_traversal<my_traversal, cat>();
+
+      void advance(typename super_t::difference_type n)
+      {
+          BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(random_access_traversal_tag)
+          m_iterator += n;
+      }
+
+      void increment() { ++m_iterator; }
+
+      void decrement()
+      {
+          BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(bidirectional_traversal_tag)
+           --m_iterator;
+      }
+
+      template <
+          class OtherDerived, class OtherIterator, class V, class C, class R, class D
+      >
+      typename super_t::difference_type distance_to(
+          iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const
+      {
+          BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL(random_access_traversal_tag)
+          // Maybe readd with same_distance
+          //           BOOST_STATIC_ASSERT(
+          //               (detail::same_category_and_difference<Derived,OtherDerived>::value)
+          //               );
+          return y.base() - m_iterator;
+      }
+
+# undef BOOST_ITERATOR_ADAPTOR_ASSERT_TRAVERSAL
+
+   private: // data members
+      Base m_iterator;
+  };
+
+} // namespace iterators
+
+using iterators::iterator_adaptor;
+using iterators::enable_if_convertible;
+
+} // namespace pdalboost
+
+#include <boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_ITERATOR_ADAPTOR_23022003THW_HPP
diff --git a/vendor/pdalboost/boost/iterator/iterator_categories.hpp b/vendor/pdalboost/boost/iterator/iterator_categories.hpp
new file mode 100644
index 0000000..17087f7
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator/iterator_categories.hpp
@@ -0,0 +1,215 @@
+// (C) Copyright Jeremy Siek 2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_ITERATOR_CATEGORIES_HPP
+# define BOOST_ITERATOR_CATEGORIES_HPP
+
+# include <boost/config.hpp>
+# include <boost/detail/iterator.hpp>
+# include <boost/iterator/detail/config_def.hpp>
+
+# include <boost/detail/workaround.hpp>
+
+# include <boost/mpl/eval_if.hpp>
+# include <boost/mpl/identity.hpp>
+# include <boost/mpl/placeholders.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+
+# include <boost/type_traits/is_convertible.hpp>
+
+# include <boost/static_assert.hpp>
+
+namespace pdalboost {
+namespace iterators {
+
+//
+// Traversal Categories
+//
+
+struct no_traversal_tag {};
+
+struct incrementable_traversal_tag
+  : no_traversal_tag
+{
+//     incrementable_traversal_tag() {}
+//     incrementable_traversal_tag(std::output_iterator_tag const&) {};
+};
+
+struct single_pass_traversal_tag
+  : incrementable_traversal_tag
+{
+//     single_pass_traversal_tag() {}
+//     single_pass_traversal_tag(std::input_iterator_tag const&) {};
+};
+
+struct forward_traversal_tag
+  : single_pass_traversal_tag
+{
+//     forward_traversal_tag() {}
+//     forward_traversal_tag(std::forward_iterator_tag const&) {};
+};
+
+struct bidirectional_traversal_tag
+  : forward_traversal_tag
+{
+//     bidirectional_traversal_tag() {};
+//     bidirectional_traversal_tag(std::bidirectional_iterator_tag const&) {};
+};
+
+struct random_access_traversal_tag
+  : bidirectional_traversal_tag
+{
+//     random_access_traversal_tag() {};
+//     random_access_traversal_tag(std::random_access_iterator_tag const&) {};
+};
+
+namespace detail
+{
+  //
+  // Convert a "strictly old-style" iterator category to a traversal
+  // tag.  This is broken out into a separate metafunction to reduce
+  // the cost of instantiating iterator_category_to_traversal, below,
+  // for new-style types.
+  //
+  template <class Cat>
+  struct old_category_to_traversal
+    : mpl::eval_if<
+          is_convertible<Cat,std::random_access_iterator_tag>
+        , mpl::identity<random_access_traversal_tag>
+        , mpl::eval_if<
+              is_convertible<Cat,std::bidirectional_iterator_tag>
+            , mpl::identity<bidirectional_traversal_tag>
+            , mpl::eval_if<
+                  is_convertible<Cat,std::forward_iterator_tag>
+                , mpl::identity<forward_traversal_tag>
+                , mpl::eval_if<
+                      is_convertible<Cat,std::input_iterator_tag>
+                    , mpl::identity<single_pass_traversal_tag>
+                    , mpl::eval_if<
+                          is_convertible<Cat,std::output_iterator_tag>
+                        , mpl::identity<incrementable_traversal_tag>
+                        , void
+                      >
+                  >
+              >
+          >
+      >
+  {};
+
+} // namespace detail
+
+//
+// Convert an iterator category into a traversal tag
+//
+template <class Cat>
+struct iterator_category_to_traversal
+  : mpl::eval_if< // if already convertible to a traversal tag, we're done.
+        is_convertible<Cat,incrementable_traversal_tag>
+      , mpl::identity<Cat>
+      , pdalboost::iterators::detail::old_category_to_traversal<Cat>
+    >
+{};
+
+// Trait to get an iterator's traversal category
+template <class Iterator = mpl::_1>
+struct iterator_traversal
+  : iterator_category_to_traversal<
+        typename pdalboost::detail::iterator_traits<Iterator>::iterator_category
+    >
+{};
+
+# ifdef BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+// Hack because BOOST_MPL_AUX_LAMBDA_SUPPORT doesn't seem to work
+// out well.  Instantiating the nested apply template also
+// requires instantiating iterator_traits on the
+// placeholder. Instead we just specialize it as a metafunction
+// class.
+template <>
+struct iterator_traversal<mpl::_1>
+{
+    template <class T>
+    struct apply : iterator_traversal<T>
+    {};
+};
+template <>
+struct iterator_traversal<mpl::_>
+  : iterator_traversal<mpl::_1>
+{};
+# endif
+
+//
+// Convert an iterator traversal to one of the traversal tags.
+//
+template <class Traversal>
+struct pure_traversal_tag
+  : mpl::eval_if<
+        is_convertible<Traversal,random_access_traversal_tag>
+      , mpl::identity<random_access_traversal_tag>
+      , mpl::eval_if<
+            is_convertible<Traversal,bidirectional_traversal_tag>
+          , mpl::identity<bidirectional_traversal_tag>
+          , mpl::eval_if<
+                is_convertible<Traversal,forward_traversal_tag>
+              , mpl::identity<forward_traversal_tag>
+              , mpl::eval_if<
+                    is_convertible<Traversal,single_pass_traversal_tag>
+                  , mpl::identity<single_pass_traversal_tag>
+                  , mpl::eval_if<
+                        is_convertible<Traversal,incrementable_traversal_tag>
+                      , mpl::identity<incrementable_traversal_tag>
+                      , void
+                    >
+                >
+            >
+        >
+    >
+{
+};
+
+//
+// Trait to retrieve one of the iterator traversal tags from the iterator category or traversal.
+//
+template <class Iterator = mpl::_1>
+struct pure_iterator_traversal
+  : pure_traversal_tag<typename iterator_traversal<Iterator>::type>
+{};
+
+# ifdef BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+template <>
+struct pure_iterator_traversal<mpl::_1>
+{
+    template <class T>
+    struct apply : pure_iterator_traversal<T>
+    {};
+};
+template <>
+struct pure_iterator_traversal<mpl::_>
+  : pure_iterator_traversal<mpl::_1>
+{};
+# endif
+
+} // namespace iterators
+
+using iterators::no_traversal_tag;
+using iterators::incrementable_traversal_tag;
+using iterators::single_pass_traversal_tag;
+using iterators::forward_traversal_tag;
+using iterators::bidirectional_traversal_tag;
+using iterators::random_access_traversal_tag;
+using iterators::iterator_category_to_traversal;
+using iterators::iterator_traversal;
+
+// This import is needed for backward compatibility with Boost.Range:
+// boost/range/detail/demote_iterator_traversal_tag.hpp
+// It should be removed when that header is fixed.
+namespace detail {
+using iterators::pure_traversal_tag;
+} // namespace detail
+
+} // namespace pdalboost
+
+#include <boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_ITERATOR_CATEGORIES_HPP
diff --git a/vendor/pdalboost/boost/iterator/iterator_concepts.hpp b/vendor/pdalboost/boost/iterator/iterator_concepts.hpp
new file mode 100644
index 0000000..48d0458
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator/iterator_concepts.hpp
@@ -0,0 +1,275 @@
+// (C) Copyright Jeremy Siek 2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_ITERATOR_CONCEPTS_HPP
+#define BOOST_ITERATOR_CONCEPTS_HPP
+
+#include <boost/concept_check.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+
+// Use pdalboost::detail::iterator_traits to work around some MSVC/Dinkumware problems.
+#include <boost/detail/iterator.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_integral.hpp>
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/or.hpp>
+
+#include <boost/static_assert.hpp>
+
+// Use boost/limits to work around missing limits headers on some compilers
+#include <boost/limits.hpp>
+#include <boost/config.hpp>
+
+#include <algorithm>
+
+#include <boost/concept/detail/concept_def.hpp>
+
+namespace pdalboost_concepts
+{
+  // Used a different namespace here (instead of "boost") so that the
+  // concept descriptions do not take for granted the names in
+  // namespace pdalboost.
+
+  //===========================================================================
+  // Iterator Access Concepts
+
+  BOOST_concept(ReadableIterator,(Iterator))
+    : pdalboost::Assignable<Iterator>
+    , pdalboost::CopyConstructible<Iterator>
+
+  {
+      typedef BOOST_DEDUCED_TYPENAME pdalboost::detail::iterator_traits<Iterator>::value_type value_type;
+      typedef BOOST_DEDUCED_TYPENAME pdalboost::detail::iterator_traits<Iterator>::reference reference;
+
+      BOOST_CONCEPT_USAGE(ReadableIterator)
+      {
+
+          value_type v = *i;
+          pdalboost::ignore_unused_variable_warning(v);
+      }
+  private:
+      Iterator i;
+  };
+
+  template <
+      typename Iterator
+    , typename ValueType = BOOST_DEDUCED_TYPENAME pdalboost::detail::iterator_traits<Iterator>::value_type
+  >
+  struct WritableIterator
+    : pdalboost::CopyConstructible<Iterator>
+  {
+      BOOST_CONCEPT_USAGE(WritableIterator)
+      {
+          *i = v;
+      }
+  private:
+      ValueType v;
+      Iterator i;
+  };
+
+  template <
+      typename Iterator
+    , typename ValueType = BOOST_DEDUCED_TYPENAME pdalboost::detail::iterator_traits<Iterator>::value_type
+  >
+  struct WritableIteratorConcept : WritableIterator<Iterator,ValueType> {};
+
+  BOOST_concept(SwappableIterator,(Iterator))
+  {
+      BOOST_CONCEPT_USAGE(SwappableIterator)
+      {
+          std::iter_swap(i1, i2);
+      }
+  private:
+      Iterator i1;
+      Iterator i2;
+  };
+
+  BOOST_concept(LvalueIterator,(Iterator))
+  {
+      typedef typename pdalboost::detail::iterator_traits<Iterator>::value_type value_type;
+
+      BOOST_CONCEPT_USAGE(LvalueIterator)
+      {
+        value_type& r = const_cast<value_type&>(*i);
+        pdalboost::ignore_unused_variable_warning(r);
+      }
+  private:
+      Iterator i;
+  };
+
+
+  //===========================================================================
+  // Iterator Traversal Concepts
+
+  BOOST_concept(IncrementableIterator,(Iterator))
+    : pdalboost::Assignable<Iterator>
+    , pdalboost::CopyConstructible<Iterator>
+  {
+      typedef typename pdalboost::iterator_traversal<Iterator>::type traversal_category;
+
+      BOOST_CONCEPT_ASSERT((
+        pdalboost::Convertible<
+            traversal_category
+          , pdalboost::incrementable_traversal_tag
+        >));
+
+      BOOST_CONCEPT_USAGE(IncrementableIterator)
+      {
+          ++i;
+          (void)i++;
+      }
+  private:
+      Iterator i;
+  };
+
+  BOOST_concept(SinglePassIterator,(Iterator))
+    : IncrementableIterator<Iterator>
+    , pdalboost::EqualityComparable<Iterator>
+
+  {
+      BOOST_CONCEPT_ASSERT((
+          pdalboost::Convertible<
+             BOOST_DEDUCED_TYPENAME SinglePassIterator::traversal_category
+           , pdalboost::single_pass_traversal_tag
+          > ));
+  };
+
+  BOOST_concept(ForwardTraversal,(Iterator))
+    : SinglePassIterator<Iterator>
+    , pdalboost::DefaultConstructible<Iterator>
+  {
+      typedef typename pdalboost::detail::iterator_traits<Iterator>::difference_type difference_type;
+
+      BOOST_MPL_ASSERT((pdalboost::is_integral<difference_type>));
+      BOOST_MPL_ASSERT_RELATION(std::numeric_limits<difference_type>::is_signed, ==, true);
+
+      BOOST_CONCEPT_ASSERT((
+          pdalboost::Convertible<
+             BOOST_DEDUCED_TYPENAME ForwardTraversal::traversal_category
+           , pdalboost::forward_traversal_tag
+          > ));
+  };
+
+  BOOST_concept(BidirectionalTraversal,(Iterator))
+    : ForwardTraversal<Iterator>
+  {
+      BOOST_CONCEPT_ASSERT((
+          pdalboost::Convertible<
+             BOOST_DEDUCED_TYPENAME BidirectionalTraversal::traversal_category
+           , pdalboost::bidirectional_traversal_tag
+          > ));
+
+      BOOST_CONCEPT_USAGE(BidirectionalTraversal)
+      {
+          --i;
+          (void)i--;
+      }
+   private:
+      Iterator i;
+  };
+
+  BOOST_concept(RandomAccessTraversal,(Iterator))
+    : BidirectionalTraversal<Iterator>
+  {
+      BOOST_CONCEPT_ASSERT((
+          pdalboost::Convertible<
+             BOOST_DEDUCED_TYPENAME RandomAccessTraversal::traversal_category
+           , pdalboost::random_access_traversal_tag
+          > ));
+
+      BOOST_CONCEPT_USAGE(RandomAccessTraversal)
+      {
+          i += n;
+          i = i + n;
+          i = n + i;
+          i -= n;
+          i = i - n;
+          n = i - j;
+      }
+
+   private:
+      typename BidirectionalTraversal<Iterator>::difference_type n;
+      Iterator i, j;
+  };
+
+  //===========================================================================
+  // Iterator Interoperability
+
+  namespace detail
+  {
+    template <typename Iterator1, typename Iterator2>
+    void interop_single_pass_constraints(Iterator1 const& i1, Iterator2 const& i2)
+    {
+        bool b;
+        b = i1 == i2;
+        b = i1 != i2;
+
+        b = i2 == i1;
+        b = i2 != i1;
+        pdalboost::ignore_unused_variable_warning(b);
+    }
+
+    template <typename Iterator1, typename Iterator2>
+    void interop_rand_access_constraints(
+        Iterator1 const& i1, Iterator2 const& i2,
+        pdalboost::random_access_traversal_tag, pdalboost::random_access_traversal_tag)
+    {
+        bool b;
+        typename pdalboost::detail::iterator_traits<Iterator2>::difference_type n;
+        b = i1 <  i2;
+        b = i1 <= i2;
+        b = i1 >  i2;
+        b = i1 >= i2;
+        n = i1 -  i2;
+
+        b = i2 <  i1;
+        b = i2 <= i1;
+        b = i2 >  i1;
+        b = i2 >= i1;
+        n = i2 -  i1;
+        pdalboost::ignore_unused_variable_warning(b);
+        pdalboost::ignore_unused_variable_warning(n);
+    }
+
+    template <typename Iterator1, typename Iterator2>
+    void interop_rand_access_constraints(
+        Iterator1 const&, Iterator2 const&,
+        pdalboost::single_pass_traversal_tag, pdalboost::single_pass_traversal_tag)
+    { }
+
+  } // namespace detail
+
+  BOOST_concept(InteroperableIterator,(Iterator)(ConstIterator))
+  {
+   private:
+      typedef typename pdalboost::iterators::pure_iterator_traversal<Iterator>::type traversal_category;
+      typedef typename pdalboost::iterators::pure_iterator_traversal<ConstIterator>::type const_traversal_category;
+
+   public:
+      BOOST_CONCEPT_ASSERT((SinglePassIterator<Iterator>));
+      BOOST_CONCEPT_ASSERT((SinglePassIterator<ConstIterator>));
+
+      BOOST_CONCEPT_USAGE(InteroperableIterator)
+      {
+          detail::interop_single_pass_constraints(i, ci);
+          detail::interop_rand_access_constraints(i, ci, traversal_category(), const_traversal_category());
+
+          ci = i;
+      }
+
+   private:
+      Iterator      i;
+      ConstIterator ci;
+  };
+
+} // namespace pdalboost_concepts
+
+#include <boost/concept/detail/concept_undef.hpp>
+
+#endif // BOOST_ITERATOR_CONCEPTS_HPP
diff --git a/vendor/pdalboost/boost/iterator/iterator_facade.hpp b/vendor/pdalboost/boost/iterator/iterator_facade.hpp
new file mode 100644
index 0000000..d64da65
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator/iterator_facade.hpp
@@ -0,0 +1,980 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek    2002.
+// (C) Copyright Thomas Witt    2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_ITERATOR_FACADE_23022003THW_HPP
+#define BOOST_ITERATOR_FACADE_23022003THW_HPP
+
+#include <boost/config.hpp>
+#include <boost/iterator.hpp>
+#include <boost/iterator/interoperable.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+
+#include <boost/iterator/detail/facade_iterator_category.hpp>
+#include <boost/iterator/detail/enable_if.hpp>
+
+#include <boost/static_assert.hpp>
+#include <boost/utility/addressof.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_pointer.hpp>
+#include <boost/type_traits/add_lvalue_reference.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_pod.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/identity.hpp>
+
+#include <boost/iterator/detail/config_def.hpp> // this goes last
+
+namespace pdalboost {
+namespace iterators {
+
+  // This forward declaration is required for the friend declaration
+  // in iterator_core_access
+  template <class I, class V, class TC, class R, class D> class iterator_facade;
+
+  namespace detail
+  {
+    // A binary metafunction class that always returns bool.  VC6
+    // ICEs on mpl::always<bool>, probably because of the default
+    // parameters.
+    struct always_bool2
+    {
+        template <class T, class U>
+        struct apply
+        {
+            typedef bool type;
+        };
+    };
+
+    // The type trait checks if the category or traversal is at least as advanced as the specified required traversal
+    template< typename CategoryOrTraversal, typename Required >
+    struct is_traversal_at_least :
+        public pdalboost::is_convertible< typename iterator_category_to_traversal< CategoryOrTraversal >::type, Required >
+    {};
+
+    //
+    // enable if for use in operator implementation.
+    //
+    template <
+        class Facade1
+      , class Facade2
+      , class Return
+    >
+    struct enable_if_interoperable :
+        public pdalboost::iterators::enable_if<
+            is_interoperable< Facade1, Facade2 >
+          , Return
+        >
+    {};
+
+    //
+    // enable if for use in implementation of operators specific for random access traversal.
+    //
+    template <
+        class Facade1
+      , class Facade2
+      , class Return
+    >
+    struct enable_if_interoperable_and_random_access_traversal :
+        public pdalboost::iterators::enable_if<
+            mpl::and_<
+                is_interoperable< Facade1, Facade2 >
+              , is_traversal_at_least< typename iterator_category< Facade1 >::type, random_access_traversal_tag >
+              , is_traversal_at_least< typename iterator_category< Facade2 >::type, random_access_traversal_tag >
+            >
+          , Return
+        >
+    {};
+
+    //
+    // Generates associated types for an iterator_facade with the
+    // given parameters.
+    //
+    template <
+        class ValueParam
+      , class CategoryOrTraversal
+      , class Reference
+      , class Difference
+    >
+    struct iterator_facade_types
+    {
+        typedef typename facade_iterator_category<
+            CategoryOrTraversal, ValueParam, Reference
+        >::type iterator_category;
+
+        typedef typename remove_const<ValueParam>::type value_type;
+
+        // Not the real associated pointer type
+        typedef typename mpl::eval_if<
+            pdalboost::iterators::detail::iterator_writability_disabled<ValueParam,Reference>
+          , add_pointer<const value_type>
+          , add_pointer<value_type>
+        >::type pointer;
+
+# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)                          \
+    && (BOOST_WORKAROUND(_STLPORT_VERSION, BOOST_TESTED_AT(0x452))              \
+        || BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, BOOST_TESTED_AT(310)))     \
+    || BOOST_WORKAROUND(BOOST_RWSTD_VER, BOOST_TESTED_AT(0x20101))              \
+    || BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, <= 310)
+
+        // To interoperate with some broken library/compiler
+        // combinations, user-defined iterators must be derived from
+        // std::iterator.  It is possible to implement a standard
+        // library for broken compilers without this limitation.
+#  define BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE 1
+
+        typedef
+           iterator<iterator_category, value_type, Difference, pointer, Reference>
+        base;
+# endif
+    };
+
+    // iterators whose dereference operators reference the same value
+    // for all iterators into the same sequence (like many input
+    // iterators) need help with their postfix ++: the referenced
+    // value must be read and stored away before the increment occurs
+    // so that *a++ yields the originally referenced element and not
+    // the next one.
+    template <class Iterator>
+    class postfix_increment_proxy
+    {
+        typedef typename iterator_value<Iterator>::type value_type;
+     public:
+        explicit postfix_increment_proxy(Iterator const& x)
+          : stored_value(*x)
+        {}
+
+        // Returning a mutable reference allows nonsense like
+        // (*r++).mutate(), but it imposes fewer assumptions about the
+        // behavior of the value_type.  In particular, recall that
+        // (*r).mutate() is legal if operator* returns by value.
+        value_type&
+        operator*() const
+        {
+            return this->stored_value;
+        }
+     private:
+        mutable value_type stored_value;
+    };
+
+    //
+    // In general, we can't determine that such an iterator isn't
+    // writable -- we also need to store a copy of the old iterator so
+    // that it can be written into.
+    template <class Iterator>
+    class writable_postfix_increment_proxy
+    {
+        typedef typename iterator_value<Iterator>::type value_type;
+     public:
+        explicit writable_postfix_increment_proxy(Iterator const& x)
+          : stored_value(*x)
+          , stored_iterator(x)
+        {}
+
+        // Dereferencing must return a proxy so that both *r++ = o and
+        // value_type(*r++) can work.  In this case, *r is the same as
+        // *r++, and the conversion operator below is used to ensure
+        // readability.
+        writable_postfix_increment_proxy const&
+        operator*() const
+        {
+            return *this;
+        }
+
+        // Provides readability of *r++
+        operator value_type&() const
+        {
+            return stored_value;
+        }
+
+        // Provides writability of *r++
+        template <class T>
+        T const& operator=(T const& x) const
+        {
+            *this->stored_iterator = x;
+            return x;
+        }
+
+        // This overload just in case only non-const objects are writable
+        template <class T>
+        T& operator=(T& x) const
+        {
+            *this->stored_iterator = x;
+            return x;
+        }
+
+        // Provides X(r++)
+        operator Iterator const&() const
+        {
+            return stored_iterator;
+        }
+
+     private:
+        mutable value_type stored_value;
+        Iterator stored_iterator;
+    };
+
+# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+    template <class Reference, class Value>
+    struct is_non_proxy_reference_impl
+    {
+        static Reference r;
+
+        template <class R>
+        static typename mpl::if_<
+            is_convertible<
+                R const volatile*
+              , Value const volatile*
+            >
+          , char[1]
+          , char[2]
+        >::type& helper(R const&);
+
+        BOOST_STATIC_CONSTANT(bool, value = sizeof(helper(r)) == 1);
+    };
+
+    template <class Reference, class Value>
+    struct is_non_proxy_reference
+      : mpl::bool_<
+            is_non_proxy_reference_impl<Reference, Value>::value
+        >
+    {};
+# else
+    template <class Reference, class Value>
+    struct is_non_proxy_reference
+      : is_convertible<
+            typename remove_reference<Reference>::type
+            const volatile*
+          , Value const volatile*
+        >
+    {};
+# endif
+
+    // A metafunction to choose the result type of postfix ++
+    //
+    // Because the C++98 input iterator requirements say that *r++ has
+    // type T (value_type), implementations of some standard
+    // algorithms like lexicographical_compare may use constructions
+    // like:
+    //
+    //          *r++ < *s++
+    //
+    // If *r++ returns a proxy (as required if r is writable but not
+    // multipass), this sort of expression will fail unless the proxy
+    // supports the operator<.  Since there are any number of such
+    // operations, we're not going to try to support them.  Therefore,
+    // even if r++ returns a proxy, *r++ will only return a proxy if
+    // *r also returns a proxy.
+    template <class Iterator, class Value, class Reference, class CategoryOrTraversal>
+    struct postfix_increment_result
+      : mpl::eval_if<
+            mpl::and_<
+                // A proxy is only needed for readable iterators
+                is_convertible<
+                    Reference
+                    // Use add_lvalue_reference to form `reference to Value` due to
+                    // some (strict) C++03 compilers (e.g. `gcc -std=c++03`) reject
+                    // 'reference-to-reference' in the template which described in CWG
+                    // DR106.
+                    // http://www.open-std.org/Jtc1/sc22/wg21/docs/cwg_defects.html#106
+                  , typename add_lvalue_reference<Value const>::type
+                >
+
+                // No multipass iterator can have values that disappear
+                // before positions can be re-visited
+              , mpl::not_<
+                    is_convertible<
+                        typename iterator_category_to_traversal<CategoryOrTraversal>::type
+                      , forward_traversal_tag
+                    >
+                >
+            >
+          , mpl::if_<
+                is_non_proxy_reference<Reference,Value>
+              , postfix_increment_proxy<Iterator>
+              , writable_postfix_increment_proxy<Iterator>
+            >
+          , mpl::identity<Iterator>
+        >
+    {};
+
+    // operator->() needs special support for input iterators to strictly meet the
+    // standard's requirements. If *i is not a reference type, we must still
+    // produce an lvalue to which a pointer can be formed.  We do that by
+    // returning a proxy object containing an instance of the reference object.
+    template <class Reference, class Pointer>
+    struct operator_arrow_dispatch // proxy references
+    {
+        struct proxy
+        {
+            explicit proxy(Reference const & x) : m_ref(x) {}
+            Reference* operator->() { return pdalboost::addressof(m_ref); }
+            // This function is needed for MWCW and BCC, which won't call
+            // operator-> again automatically per 13.3.1.2 para 8
+            operator Reference*() { return pdalboost::addressof(m_ref); }
+            Reference m_ref;
+        };
+        typedef proxy result_type;
+        static result_type apply(Reference const & x)
+        {
+            return result_type(x);
+        }
+    };
+
+    template <class T, class Pointer>
+    struct operator_arrow_dispatch<T&, Pointer> // "real" references
+    {
+        typedef Pointer result_type;
+        static result_type apply(T& x)
+        {
+            return pdalboost::addressof(x);
+        }
+    };
+
+    // A proxy return type for operator[], needed to deal with
+    // iterators that may invalidate referents upon destruction.
+    // Consider the temporary iterator in *(a + n)
+    template <class Iterator>
+    class operator_brackets_proxy
+    {
+        // Iterator is actually an iterator_facade, so we do not have to
+        // go through iterator_traits to access the traits.
+        typedef typename Iterator::reference  reference;
+        typedef typename Iterator::value_type value_type;
+
+     public:
+        operator_brackets_proxy(Iterator const& iter)
+          : m_iter(iter)
+        {}
+
+        operator reference() const
+        {
+            return *m_iter;
+        }
+
+        operator_brackets_proxy& operator=(value_type const& val)
+        {
+            *m_iter = val;
+            return *this;
+        }
+
+     private:
+        Iterator m_iter;
+    };
+
+    // A metafunction that determines whether operator[] must return a
+    // proxy, or whether it can simply return a copy of the value_type.
+    template <class ValueType, class Reference>
+    struct use_operator_brackets_proxy
+      : mpl::not_<
+            mpl::and_<
+                // Really we want an is_copy_constructible trait here,
+                // but is_POD will have to suffice in the meantime.
+                pdalboost::is_POD<ValueType>
+              , iterator_writability_disabled<ValueType,Reference>
+            >
+        >
+    {};
+
+    template <class Iterator, class Value, class Reference>
+    struct operator_brackets_result
+    {
+        typedef typename mpl::if_<
+            use_operator_brackets_proxy<Value,Reference>
+          , operator_brackets_proxy<Iterator>
+          , Value
+        >::type type;
+    };
+
+    template <class Iterator>
+    operator_brackets_proxy<Iterator> make_operator_brackets_result(Iterator const& iter, mpl::true_)
+    {
+        return operator_brackets_proxy<Iterator>(iter);
+    }
+
+    template <class Iterator>
+    typename Iterator::value_type make_operator_brackets_result(Iterator const& iter, mpl::false_)
+    {
+      return *iter;
+    }
+
+    struct choose_difference_type
+    {
+        template <class I1, class I2>
+        struct apply
+          :
+# ifdef BOOST_NO_ONE_WAY_ITERATOR_INTEROP
+          iterator_difference<I1>
+# else
+          mpl::eval_if<
+              is_convertible<I2,I1>
+            , iterator_difference<I1>
+            , iterator_difference<I2>
+          >
+# endif
+        {};
+
+    };
+
+    template <
+        class Derived
+      , class Value
+      , class CategoryOrTraversal
+      , class Reference
+      , class Difference
+      , bool IsBidirectionalTraversal
+      , bool IsRandomAccessTraversal
+    >
+    class iterator_facade_base;
+
+  } // namespace detail
+
+
+  // Macros which describe the declarations of binary operators
+# ifdef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY
+#  define BOOST_ITERATOR_FACADE_INTEROP_HEAD_IMPL(prefix, op, result_type, enabler)       \
+    template <                                                              \
+        class Derived1, class V1, class TC1, class Reference1, class Difference1 \
+      , class Derived2, class V2, class TC2, class Reference2, class Difference2 \
+    >                                                                       \
+    prefix typename mpl::apply2<result_type,Derived1,Derived2>::type \
+    operator op(                                                            \
+        iterator_facade<Derived1, V1, TC1, Reference1, Difference1> const& lhs   \
+      , iterator_facade<Derived2, V2, TC2, Reference2, Difference2> const& rhs)
+# else
+#  define BOOST_ITERATOR_FACADE_INTEROP_HEAD_IMPL(prefix, op, result_type, enabler)   \
+    template <                                                          \
+        class Derived1, class V1, class TC1, class Reference1, class Difference1 \
+      , class Derived2, class V2, class TC2, class Reference2, class Difference2 \
+    >                                                                   \
+    prefix typename enabler<                                            \
+        Derived1, Derived2                                              \
+      , typename mpl::apply2<result_type,Derived1,Derived2>::type       \
+    >::type                                                             \
+    operator op(                                                        \
+        iterator_facade<Derived1, V1, TC1, Reference1, Difference1> const& lhs   \
+      , iterator_facade<Derived2, V2, TC2, Reference2, Difference2> const& rhs)
+# endif
+
+#  define BOOST_ITERATOR_FACADE_INTEROP_HEAD(prefix, op, result_type)       \
+    BOOST_ITERATOR_FACADE_INTEROP_HEAD_IMPL(prefix, op, result_type, pdalboost::iterators::detail::enable_if_interoperable)
+
+#  define BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD(prefix, op, result_type)       \
+    BOOST_ITERATOR_FACADE_INTEROP_HEAD_IMPL(prefix, op, result_type, pdalboost::iterators::detail::enable_if_interoperable_and_random_access_traversal)
+
+#  define BOOST_ITERATOR_FACADE_PLUS_HEAD(prefix,args)              \
+    template <class Derived, class V, class TC, class R, class D>   \
+    prefix typename pdalboost::iterators::enable_if<                    \
+        pdalboost::iterators::detail::is_traversal_at_least< TC, pdalboost::iterators::random_access_traversal_tag >,  \
+        Derived                                                     \
+    >::type operator+ args
+
+  //
+  // Helper class for granting access to the iterator core interface.
+  //
+  // The simple core interface is used by iterator_facade. The core
+  // interface of a user/library defined iterator type should not be made public
+  // so that it does not clutter the public interface. Instead iterator_core_access
+  // should be made friend so that iterator_facade can access the core
+  // interface through iterator_core_access.
+  //
+  class iterator_core_access
+  {
+# if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+      // Tasteless as this may seem, making all members public allows member templates
+      // to work in the absence of member template friends.
+   public:
+# else
+
+      template <class I, class V, class TC, class R, class D> friend class iterator_facade;
+      template <class I, class V, class TC, class R, class D, bool IsBidirectionalTraversal, bool IsRandomAccessTraversal>
+      friend class detail::iterator_facade_base;
+
+#  define BOOST_ITERATOR_FACADE_RELATION(op)                                \
+      BOOST_ITERATOR_FACADE_INTEROP_HEAD(friend,op, pdalboost::iterators::detail::always_bool2);
+
+      BOOST_ITERATOR_FACADE_RELATION(==)
+      BOOST_ITERATOR_FACADE_RELATION(!=)
+
+#  undef BOOST_ITERATOR_FACADE_RELATION
+
+#  define BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(op)                                \
+      BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD(friend,op, pdalboost::iterators::detail::always_bool2);
+
+      BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(<)
+      BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(>)
+      BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(<=)
+      BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(>=)
+
+#  undef BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION
+
+      BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD(
+          friend, -, pdalboost::iterators::detail::choose_difference_type)
+      ;
+
+      BOOST_ITERATOR_FACADE_PLUS_HEAD(
+          friend inline
+        , (iterator_facade<Derived, V, TC, R, D> const&
+        , typename Derived::difference_type)
+      )
+      ;
+
+      BOOST_ITERATOR_FACADE_PLUS_HEAD(
+          friend inline
+        , (typename Derived::difference_type
+        , iterator_facade<Derived, V, TC, R, D> const&)
+      )
+      ;
+
+# endif
+
+      template <class Facade>
+      static typename Facade::reference dereference(Facade const& f)
+      {
+          return f.dereference();
+      }
+
+      template <class Facade>
+      static void increment(Facade& f)
+      {
+          f.increment();
+      }
+
+      template <class Facade>
+      static void decrement(Facade& f)
+      {
+          f.decrement();
+      }
+
+      template <class Facade1, class Facade2>
+      static bool equal(Facade1 const& f1, Facade2 const& f2, mpl::true_)
+      {
+          return f1.equal(f2);
+      }
+
+      template <class Facade1, class Facade2>
+      static bool equal(Facade1 const& f1, Facade2 const& f2, mpl::false_)
+      {
+          return f2.equal(f1);
+      }
+
+      template <class Facade>
+      static void advance(Facade& f, typename Facade::difference_type n)
+      {
+          f.advance(n);
+      }
+
+      template <class Facade1, class Facade2>
+      static typename Facade1::difference_type distance_from(
+          Facade1 const& f1, Facade2 const& f2, mpl::true_)
+      {
+          return -f1.distance_to(f2);
+      }
+
+      template <class Facade1, class Facade2>
+      static typename Facade2::difference_type distance_from(
+          Facade1 const& f1, Facade2 const& f2, mpl::false_)
+      {
+          return f2.distance_to(f1);
+      }
+
+      //
+      // Curiously Recurring Template interface.
+      //
+      template <class I, class V, class TC, class R, class D>
+      static I& derived(iterator_facade<I,V,TC,R,D>& facade)
+      {
+          return *static_cast<I*>(&facade);
+      }
+
+      template <class I, class V, class TC, class R, class D>
+      static I const& derived(iterator_facade<I,V,TC,R,D> const& facade)
+      {
+          return *static_cast<I const*>(&facade);
+      }
+
+      // objects of this class are useless
+      BOOST_DELETED_FUNCTION(iterator_core_access())
+  };
+
+  namespace detail {
+
+    // Implementation for forward traversal iterators
+    template <
+        class Derived
+      , class Value
+      , class CategoryOrTraversal
+      , class Reference
+      , class Difference
+    >
+    class iterator_facade_base< Derived, Value, CategoryOrTraversal, Reference, Difference, false, false >
+# ifdef BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE
+        : public pdalboost::iterators::detail::iterator_facade_types<
+             Value, CategoryOrTraversal, Reference, Difference
+          >::base
+#  undef BOOST_ITERATOR_FACADE_NEEDS_ITERATOR_BASE
+# endif
+    {
+    private:
+        typedef pdalboost::iterators::detail::iterator_facade_types<
+            Value, CategoryOrTraversal, Reference, Difference
+        > associated_types;
+
+        typedef pdalboost::iterators::detail::operator_arrow_dispatch<
+            Reference
+          , typename associated_types::pointer
+        > operator_arrow_dispatch_;
+
+    public:
+        typedef typename associated_types::value_type value_type;
+        typedef Reference reference;
+        typedef Difference difference_type;
+
+        typedef typename operator_arrow_dispatch_::result_type pointer;
+
+        typedef typename associated_types::iterator_category iterator_category;
+
+    public:
+        reference operator*() const
+        {
+            return iterator_core_access::dereference(this->derived());
+        }
+
+        pointer operator->() const
+        {
+            return operator_arrow_dispatch_::apply(*this->derived());
+        }
+
+        Derived& operator++()
+        {
+            iterator_core_access::increment(this->derived());
+            return this->derived();
+        }
+
+    protected:
+        //
+        // Curiously Recurring Template interface.
+        //
+        Derived& derived()
+        {
+            return *static_cast<Derived*>(this);
+        }
+
+        Derived const& derived() const
+        {
+            return *static_cast<Derived const*>(this);
+        }
+    };
+
+    // Implementation for bidirectional traversal iterators
+    template <
+        class Derived
+      , class Value
+      , class CategoryOrTraversal
+      , class Reference
+      , class Difference
+    >
+    class iterator_facade_base< Derived, Value, CategoryOrTraversal, Reference, Difference, true, false > :
+        public iterator_facade_base< Derived, Value, CategoryOrTraversal, Reference, Difference, false, false >
+    {
+    public:
+        Derived& operator--()
+        {
+            iterator_core_access::decrement(this->derived());
+            return this->derived();
+        }
+
+        Derived operator--(int)
+        {
+            Derived tmp(this->derived());
+            --*this;
+            return tmp;
+        }
+    };
+
+    // Implementation for random access traversal iterators
+    template <
+        class Derived
+      , class Value
+      , class CategoryOrTraversal
+      , class Reference
+      , class Difference
+    >
+    class iterator_facade_base< Derived, Value, CategoryOrTraversal, Reference, Difference, true, true > :
+        public iterator_facade_base< Derived, Value, CategoryOrTraversal, Reference, Difference, true, false >
+    {
+    private:
+        typedef iterator_facade_base< Derived, Value, CategoryOrTraversal, Reference, Difference, true, false > base_type;
+
+    public:
+        typedef typename base_type::reference reference;
+        typedef typename base_type::difference_type difference_type;
+
+    public:
+        typename pdalboost::iterators::detail::operator_brackets_result<Derived, Value, reference>::type
+        operator[](difference_type n) const
+        {
+            typedef pdalboost::iterators::detail::use_operator_brackets_proxy<Value, Reference> use_proxy;
+
+            return pdalboost::iterators::detail::make_operator_brackets_result<Derived>(
+                this->derived() + n
+              , use_proxy()
+            );
+        }
+
+        Derived& operator+=(difference_type n)
+        {
+            iterator_core_access::advance(this->derived(), n);
+            return this->derived();
+        }
+
+        Derived& operator-=(difference_type n)
+        {
+            iterator_core_access::advance(this->derived(), -n);
+            return this->derived();
+        }
+
+        Derived operator-(difference_type x) const
+        {
+            Derived result(this->derived());
+            return result -= x;
+        }
+    };
+
+  } // namespace detail
+
+  //
+  // iterator_facade - use as a public base class for defining new
+  // standard-conforming iterators.
+  //
+  template <
+      class Derived             // The derived iterator type being constructed
+    , class Value
+    , class CategoryOrTraversal
+    , class Reference   = Value&
+    , class Difference  = std::ptrdiff_t
+  >
+  class iterator_facade :
+      public detail::iterator_facade_base<
+          Derived,
+          Value,
+          CategoryOrTraversal,
+          Reference,
+          Difference,
+          detail::is_traversal_at_least< CategoryOrTraversal, bidirectional_traversal_tag >::value,
+          detail::is_traversal_at_least< CategoryOrTraversal, random_access_traversal_tag >::value
+      >
+  {
+  protected:
+      // For use by derived classes
+      typedef iterator_facade<Derived,Value,CategoryOrTraversal,Reference,Difference> iterator_facade_;
+  };
+
+  template <class I, class V, class TC, class R, class D>
+  inline typename pdalboost::iterators::detail::postfix_increment_result<I,V,R,TC>::type
+  operator++(
+      iterator_facade<I,V,TC,R,D>& i
+    , int
+  )
+  {
+      typename pdalboost::iterators::detail::postfix_increment_result<I,V,R,TC>::type
+          tmp(*static_cast<I*>(&i));
+
+      ++i;
+
+      return tmp;
+  }
+
+
+  //
+  // Comparison operator implementation. The library supplied operators
+  // enables the user to provide fully interoperable constant/mutable
+  // iterator types. I.e. the library provides all operators
+  // for all mutable/constant iterator combinations.
+  //
+  // Note though that this kind of interoperability for constant/mutable
+  // iterators is not required by the standard for container iterators.
+  // All the standard asks for is a conversion mutable -> constant.
+  // Most standard library implementations nowadays provide fully interoperable
+  // iterator implementations, but there are still heavily used implementations
+  // that do not provide them. (Actually it's even worse, they do not provide
+  // them for only a few iterators.)
+  //
+  // ?? Maybe a BOOST_ITERATOR_NO_FULL_INTEROPERABILITY macro should
+  //    enable the user to turn off mixed type operators
+  //
+  // The library takes care to provide only the right operator overloads.
+  // I.e.
+  //
+  // bool operator==(Iterator,      Iterator);
+  // bool operator==(ConstIterator, Iterator);
+  // bool operator==(Iterator,      ConstIterator);
+  // bool operator==(ConstIterator, ConstIterator);
+  //
+  //   ...
+  //
+  // In order to do so it uses c++ idioms that are not yet widely supported
+  // by current compiler releases. The library is designed to degrade gracefully
+  // in the face of compiler deficiencies. In general compiler
+  // deficiencies result in less strict error checking and more obscure
+  // error messages, functionality is not affected.
+  //
+  // For full operation compiler support for "Substitution Failure Is Not An Error"
+  // (aka. enable_if) and pdalboost::is_convertible is required.
+  //
+  // The following problems occur if support is lacking.
+  //
+  // Pseudo code
+  //
+  // ---------------
+  // AdaptorA<Iterator1> a1;
+  // AdaptorA<Iterator2> a2;
+  //
+  // // This will result in a no such overload error in full operation
+  // // If enable_if or is_convertible is not supported
+  // // The instantiation will fail with an error hopefully indicating that
+  // // there is no operator== for Iterator1, Iterator2
+  // // The same will happen if no enable_if is used to remove
+  // // false overloads from the templated conversion constructor
+  // // of AdaptorA.
+  //
+  // a1 == a2;
+  // ----------------
+  //
+  // AdaptorA<Iterator> a;
+  // AdaptorB<Iterator> b;
+  //
+  // // This will result in a no such overload error in full operation
+  // // If enable_if is not supported the static assert used
+  // // in the operator implementation will fail.
+  // // This will accidently work if is_convertible is not supported.
+  //
+  // a == b;
+  // ----------------
+  //
+
+# ifdef BOOST_NO_ONE_WAY_ITERATOR_INTEROP
+#  define BOOST_ITERATOR_CONVERTIBLE(a,b) mpl::true_()
+# else
+#  define BOOST_ITERATOR_CONVERTIBLE(a,b) is_convertible<a,b>()
+# endif
+
+# define BOOST_ITERATOR_FACADE_INTEROP(op, result_type, return_prefix, base_op) \
+  BOOST_ITERATOR_FACADE_INTEROP_HEAD(inline, op, result_type)                   \
+  {                                                                             \
+      /* For those compilers that do not support enable_if */                   \
+      BOOST_STATIC_ASSERT((                                                     \
+          is_interoperable< Derived1, Derived2 >::value                         \
+      ));                                                                       \
+      return_prefix iterator_core_access::base_op(                              \
+          *static_cast<Derived1 const*>(&lhs)                                   \
+        , *static_cast<Derived2 const*>(&rhs)                                   \
+        , BOOST_ITERATOR_CONVERTIBLE(Derived2,Derived1)                         \
+      );                                                                        \
+  }
+
+# define BOOST_ITERATOR_FACADE_RELATION(op, return_prefix, base_op) \
+  BOOST_ITERATOR_FACADE_INTEROP(                                    \
+      op                                                            \
+    , pdalboost::iterators::detail::always_bool2                                   \
+    , return_prefix                                                 \
+    , base_op                                                       \
+  )
+
+  BOOST_ITERATOR_FACADE_RELATION(==, return, equal)
+  BOOST_ITERATOR_FACADE_RELATION(!=, return !, equal)
+
+# undef BOOST_ITERATOR_FACADE_RELATION
+
+
+# define BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS(op, result_type, return_prefix, base_op) \
+  BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD(inline, op, result_type)                   \
+  {                                                                             \
+      /* For those compilers that do not support enable_if */                   \
+      BOOST_STATIC_ASSERT((                                                     \
+          is_interoperable< Derived1, Derived2 >::value &&                      \
+          pdalboost::iterators::detail::is_traversal_at_least< typename iterator_category< Derived1 >::type, random_access_traversal_tag >::value && \
+          pdalboost::iterators::detail::is_traversal_at_least< typename iterator_category< Derived2 >::type, random_access_traversal_tag >::value \
+      ));                                                                       \
+      return_prefix iterator_core_access::base_op(                              \
+          *static_cast<Derived1 const*>(&lhs)                                   \
+        , *static_cast<Derived2 const*>(&rhs)                                   \
+        , BOOST_ITERATOR_CONVERTIBLE(Derived2,Derived1)                         \
+      );                                                                        \
+  }
+
+# define BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(op, return_prefix, base_op) \
+  BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS(                                    \
+      op                                                            \
+    , pdalboost::iterators::detail::always_bool2                                   \
+    , return_prefix                                                 \
+    , base_op                                                       \
+  )
+
+  BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(<, return 0 >, distance_from)
+  BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(>, return 0 <, distance_from)
+  BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(<=, return 0 >=, distance_from)
+  BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION(>=, return 0 <=, distance_from)
+
+# undef BOOST_ITERATOR_FACADE_RANDOM_ACCESS_RELATION
+
+  // operator- requires an additional part in the static assertion
+  BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS(
+      -
+    , pdalboost::iterators::detail::choose_difference_type
+    , return
+    , distance_from
+  )
+
+# undef BOOST_ITERATOR_FACADE_INTEROP
+# undef BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS
+
+# define BOOST_ITERATOR_FACADE_PLUS(args)           \
+  BOOST_ITERATOR_FACADE_PLUS_HEAD(inline, args)     \
+  {                                                 \
+      Derived tmp(static_cast<Derived const&>(i));  \
+      return tmp += n;                              \
+  }
+
+  BOOST_ITERATOR_FACADE_PLUS((
+      iterator_facade<Derived, V, TC, R, D> const& i
+    , typename Derived::difference_type n
+  ))
+
+  BOOST_ITERATOR_FACADE_PLUS((
+      typename Derived::difference_type n
+    , iterator_facade<Derived, V, TC, R, D> const& i
+  ))
+
+# undef BOOST_ITERATOR_FACADE_PLUS
+# undef BOOST_ITERATOR_FACADE_PLUS_HEAD
+
+# undef BOOST_ITERATOR_FACADE_INTEROP_HEAD
+# undef BOOST_ITERATOR_FACADE_INTEROP_RANDOM_ACCESS_HEAD
+# undef BOOST_ITERATOR_FACADE_INTEROP_HEAD_IMPL
+
+} // namespace iterators
+
+using iterators::iterator_core_access;
+using iterators::iterator_facade;
+
+} // namespace pdalboost
+
+#include <boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_ITERATOR_FACADE_23022003THW_HPP
diff --git a/vendor/pdalboost/boost/iterator/iterator_traits.hpp b/vendor/pdalboost/boost/iterator/iterator_traits.hpp
new file mode 100644
index 0000000..85055cd
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator/iterator_traits.hpp
@@ -0,0 +1,60 @@
+// Copyright David Abrahams 2003.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+#ifndef ITERATOR_TRAITS_DWA200347_HPP
+# define ITERATOR_TRAITS_DWA200347_HPP
+
+# include <boost/detail/iterator.hpp>
+# include <boost/detail/workaround.hpp>
+
+namespace pdalboost {
+namespace iterators {
+
+// Macro for supporting old compilers, no longer needed but kept
+// for backwards compatibility (it was documented).
+#define BOOST_ITERATOR_CATEGORY iterator_category
+
+
+template <class Iterator>
+struct iterator_value
+{
+    typedef typename pdalboost::detail::iterator_traits<Iterator>::value_type type;
+};
+
+template <class Iterator>
+struct iterator_reference
+{
+    typedef typename pdalboost::detail::iterator_traits<Iterator>::reference type;
+};
+
+
+template <class Iterator>
+struct iterator_pointer
+{
+    typedef typename pdalboost::detail::iterator_traits<Iterator>::pointer type;
+};
+
+template <class Iterator>
+struct iterator_difference
+{
+    typedef typename pdalboost::detail::iterator_traits<Iterator>::difference_type type;
+};
+
+template <class Iterator>
+struct iterator_category
+{
+    typedef typename pdalboost::detail::iterator_traits<Iterator>::iterator_category type;
+};
+
+} // namespace iterators
+
+using iterators::iterator_value;
+using iterators::iterator_reference;
+using iterators::iterator_pointer;
+using iterators::iterator_difference;
+using iterators::iterator_category;
+
+} // namespace pdalboost
+
+#endif // ITERATOR_TRAITS_DWA200347_HPP
diff --git a/vendor/pdalboost/boost/iterator/minimum_category.hpp b/vendor/pdalboost/boost/iterator/minimum_category.hpp
new file mode 100644
index 0000000..d851ba3
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator/minimum_category.hpp
@@ -0,0 +1,95 @@
+// Copyright David Abrahams 2003. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_ITERATOR_MINIMUM_CATEGORY_HPP_INCLUDED_
+# define BOOST_ITERATOR_MINIMUM_CATEGORY_HPP_INCLUDED_
+
+# include <boost/static_assert.hpp>
+# include <boost/type_traits/is_convertible.hpp>
+# include <boost/type_traits/is_same.hpp>
+
+# include <boost/mpl/placeholders.hpp>
+# include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost {
+namespace iterators {
+namespace detail {
+
+template <bool GreaterEqual, bool LessEqual>
+struct minimum_category_impl;
+
+template <class T1, class T2>
+struct error_not_related_by_convertibility;
+
+template <>
+struct minimum_category_impl<true,false>
+{
+    template <class T1, class T2> struct apply
+    {
+        typedef T2 type;
+    };
+};
+
+template <>
+struct minimum_category_impl<false,true>
+{
+    template <class T1, class T2> struct apply
+    {
+        typedef T1 type;
+    };
+};
+
+template <>
+struct minimum_category_impl<true,true>
+{
+    template <class T1, class T2> struct apply
+    {
+        BOOST_STATIC_ASSERT((is_same<T1,T2>::value));
+        typedef T1 type;
+    };
+};
+
+template <>
+struct minimum_category_impl<false,false>
+{
+    template <class T1, class T2> struct apply
+      : error_not_related_by_convertibility<T1,T2>
+    {
+    };
+};
+
+} // namespace detail
+
+//
+// Returns the minimum category type or fails to compile
+// if T1 and T2 are unrelated.
+//
+template <class T1 = mpl::_1, class T2 = mpl::_2>
+struct minimum_category
+{
+    typedef pdalboost::iterators::detail::minimum_category_impl<
+        ::pdalboost::is_convertible<T1,T2>::value
+      , ::pdalboost::is_convertible<T2,T1>::value
+    > outer;
+
+    typedef typename outer::template apply<T1,T2> inner;
+    typedef typename inner::type type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,minimum_category,(T1,T2))
+};
+
+template <>
+struct minimum_category<mpl::_1,mpl::_2>
+{
+    template <class T1, class T2>
+    struct apply : minimum_category<T1,T2>
+    {};
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2,minimum_category,(mpl::_1,mpl::_2))
+};
+
+} // namespace iterators
+
+} // namespace pdalboost
+
+#endif // BOOST_ITERATOR_MINIMUM_CATEGORY_HPP_INCLUDED_
diff --git a/vendor/pdalboost/boost/iterator/reverse_iterator.hpp b/vendor/pdalboost/boost/iterator/reverse_iterator.hpp
new file mode 100644
index 0000000..5bec664
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator/reverse_iterator.hpp
@@ -0,0 +1,74 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek    2002.
+// (C) Copyright Thomas Witt    2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_REVERSE_ITERATOR_23022003THW_HPP
+#define BOOST_REVERSE_ITERATOR_23022003THW_HPP
+
+#include <boost/next_prior.hpp>
+#include <boost/iterator.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+
+namespace pdalboost {
+namespace iterators {
+
+  //
+  //
+  //
+  template <class Iterator>
+  class reverse_iterator
+      : public iterator_adaptor< reverse_iterator<Iterator>, Iterator >
+  {
+      typedef iterator_adaptor< reverse_iterator<Iterator>, Iterator > super_t;
+
+      friend class iterator_core_access;
+
+   public:
+      reverse_iterator() {}
+
+      explicit reverse_iterator(Iterator x)
+          : super_t(x) {}
+
+      template<class OtherIterator>
+      reverse_iterator(
+          reverse_iterator<OtherIterator> const& r
+          , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0
+          )
+          : super_t(r.base())
+      {}
+
+   private:
+      typename super_t::reference dereference() const { return *pdalboost::prior(this->base()); }
+
+      void increment() { --this->base_reference(); }
+      void decrement() { ++this->base_reference(); }
+
+      void advance(typename super_t::difference_type n)
+      {
+          this->base_reference() += -n;
+      }
+
+      template <class OtherIterator>
+      typename super_t::difference_type
+      distance_to(reverse_iterator<OtherIterator> const& y) const
+      {
+          return this->base_reference() - y.base();
+      }
+  };
+
+  template <class BidirectionalIterator>
+  inline reverse_iterator<BidirectionalIterator> make_reverse_iterator(BidirectionalIterator x)
+  {
+      return reverse_iterator<BidirectionalIterator>(x);
+  }
+
+} // namespace iterators
+
+using iterators::reverse_iterator;
+using iterators::make_reverse_iterator;
+
+} // namespace pdalboost
+
+#endif // BOOST_REVERSE_ITERATOR_23022003THW_HPP
diff --git a/vendor/pdalboost/boost/iterator/transform_iterator.hpp b/vendor/pdalboost/boost/iterator/transform_iterator.hpp
new file mode 100644
index 0000000..033cc19
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator/transform_iterator.hpp
@@ -0,0 +1,171 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek    2002.
+// (C) Copyright Thomas Witt    2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+#ifndef BOOST_TRANSFORM_ITERATOR_23022003THW_HPP
+#define BOOST_TRANSFORM_ITERATOR_23022003THW_HPP
+
+#include <boost/iterator.hpp>
+#include <boost/iterator/detail/enable_if.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/function_traits.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/result_of.hpp>
+
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
+# include <boost/type_traits/is_base_and_derived.hpp>
+
+#endif
+#include <boost/iterator/detail/config_def.hpp>
+
+
+namespace pdalboost {
+namespace iterators {
+
+  template <class UnaryFunction, class Iterator, class Reference = use_default, class Value = use_default>
+  class transform_iterator;
+
+  namespace detail
+  {
+    // Compute the iterator_adaptor instantiation to be used for transform_iterator
+    template <class UnaryFunc, class Iterator, class Reference, class Value>
+    struct transform_iterator_base
+    {
+     private:
+        // By default, dereferencing the iterator yields the same as
+        // the function.
+        typedef typename ia_dflt_help<
+            Reference
+          , result_of<const UnaryFunc(typename std::iterator_traits<Iterator>::reference)>
+        >::type reference;
+
+        // To get the default for Value: remove any reference on the
+        // result type, but retain any constness to signal
+        // non-writability.  Note that if we adopt Thomas' suggestion
+        // to key non-writability *only* on the Reference argument,
+        // we'd need to strip constness here as well.
+        typedef typename ia_dflt_help<
+            Value
+          , remove_reference<reference>
+        >::type cv_value_type;
+
+     public:
+        typedef iterator_adaptor<
+            transform_iterator<UnaryFunc, Iterator, Reference, Value>
+          , Iterator
+          , cv_value_type
+          , use_default    // Leave the traversal category alone
+          , reference
+        > type;
+    };
+  }
+
+  template <class UnaryFunc, class Iterator, class Reference, class Value>
+  class transform_iterator
+    : public pdalboost::iterators::detail::transform_iterator_base<UnaryFunc, Iterator, Reference, Value>::type
+  {
+    typedef typename
+    pdalboost::iterators::detail::transform_iterator_base<UnaryFunc, Iterator, Reference, Value>::type
+    super_t;
+
+    friend class iterator_core_access;
+
+  public:
+    transform_iterator() { }
+
+    transform_iterator(Iterator const& x, UnaryFunc f)
+      : super_t(x), m_f(f) { }
+
+    explicit transform_iterator(Iterator const& x)
+      : super_t(x)
+    {
+        // Pro8 is a little too aggressive about instantiating the
+        // body of this function.
+#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+        // don't provide this constructor if UnaryFunc is a
+        // function pointer type, since it will be 0.  Too dangerous.
+        BOOST_STATIC_ASSERT(is_class<UnaryFunc>::value);
+#endif
+    }
+
+    template <
+        class OtherUnaryFunction
+      , class OtherIterator
+      , class OtherReference
+      , class OtherValue>
+    transform_iterator(
+         transform_iterator<OtherUnaryFunction, OtherIterator, OtherReference, OtherValue> const& t
+       , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0
+#if !BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+       , typename enable_if_convertible<OtherUnaryFunction, UnaryFunc>::type* = 0
+#endif
+    )
+      : super_t(t.base()), m_f(t.functor())
+   {}
+
+    UnaryFunc functor() const
+      { return m_f; }
+
+  private:
+    typename super_t::reference dereference() const
+    { return m_f(*this->base()); }
+
+    // Probably should be the initial base class so it can be
+    // optimized away via EBO if it is an empty class.
+    UnaryFunc m_f;
+  };
+
+  template <class UnaryFunc, class Iterator>
+  inline transform_iterator<UnaryFunc, Iterator>
+  make_transform_iterator(Iterator it, UnaryFunc fun)
+  {
+      return transform_iterator<UnaryFunc, Iterator>(it, fun);
+  }
+
+  // Version which allows explicit specification of the UnaryFunc
+  // type.
+  //
+  // This generator is not provided if UnaryFunc is a function
+  // pointer type, because it's too dangerous: the default-constructed
+  // function pointer in the iterator be 0, leading to a runtime
+  // crash.
+  template <class UnaryFunc, class Iterator>
+  inline typename iterators::enable_if<
+      is_class<UnaryFunc>   // We should probably find a cheaper test than is_class<>
+    , transform_iterator<UnaryFunc, Iterator>
+  >::type
+  make_transform_iterator(Iterator it)
+  {
+      return transform_iterator<UnaryFunc, Iterator>(it, UnaryFunc());
+  }
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+  template <class Return, class Argument, class Iterator>
+  inline transform_iterator< Return (*)(Argument), Iterator, Return>
+  make_transform_iterator(Iterator it, Return (*fun)(Argument))
+  {
+    return transform_iterator<Return (*)(Argument), Iterator, Return>(it, fun);
+  }
+#endif
+
+} // namespace iterators
+
+using iterators::transform_iterator;
+using iterators::make_transform_iterator;
+
+} // namespace pdalboost
+
+#include <boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_TRANSFORM_ITERATOR_23022003THW_HPP
diff --git a/vendor/pdalboost/boost/iterator_adaptors.hpp b/vendor/pdalboost/boost/iterator_adaptors.hpp
new file mode 100644
index 0000000..ed9579c
--- /dev/null
+++ b/vendor/pdalboost/boost/iterator_adaptors.hpp
@@ -0,0 +1,13 @@
+// Copyright David Abrahams 2004. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See www.boost.org/libs/iterator for documentation.
+
+#ifndef ITERATOR_ADAPTORS_DWA2004725_HPP
+# define ITERATOR_ADAPTORS_DWA2004725_HPP
+
+#define BOOST_ITERATOR_ADAPTORS_VERSION 0x0200
+#include <boost/iterator/iterator_adaptor.hpp>
+
+#endif // ITERATOR_ADAPTORS_DWA2004725_HPP
diff --git a/vendor/pdalboost/boost/lexical_cast.hpp b/vendor/pdalboost/boost/lexical_cast.hpp
new file mode 100644
index 0000000..ad9ae96
--- /dev/null
+++ b/vendor/pdalboost/boost/lexical_cast.hpp
@@ -0,0 +1,105 @@
+// Copyright Kevlin Henney, 2000-2005.
+// Copyright Alexander Nasonov, 2006-2010.
+// Copyright Antony Polukhin, 2011-2014.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// what:  lexical_cast custom keyword cast
+// who:   contributed by Kevlin Henney,
+//        enhanced with contributions from Terje Slettebo,
+//        with additional fixes and suggestions from Gennaro Prota,
+//        Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov,
+//        Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann,
+//        Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters
+// when:  November 2000, March 2003, June 2005, June 2006, March 2011 - 2014
+
+#ifndef BOOST_LEXICAL_CAST_INCLUDED
+#define BOOST_LEXICAL_CAST_INCLUDED
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#   pragma once
+#endif
+
+#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_WSTRING)
+#define BOOST_LCAST_NO_WCHAR_T
+#endif
+
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/lexical_cast/bad_lexical_cast.hpp>
+#include <boost/lexical_cast/try_lexical_convert.hpp>
+
+namespace pdalboost 
+{
+    template <typename Target, typename Source>
+    inline Target lexical_cast(const Source &arg)
+    {
+        Target result;
+
+        if (!pdalboost::conversion::detail::try_lexical_convert(arg, result)) {
+            pdalboost::conversion::detail::throw_bad_cast<Source, Target>();
+        }
+
+        return result;
+    }
+
+    template <typename Target>
+    inline Target lexical_cast(const char* chars, std::size_t count)
+    {
+        return ::pdalboost::lexical_cast<Target>(
+            ::pdalboost::iterator_range<const char*>(chars, chars + count)
+        );
+    }
+
+    template <typename Target>
+    inline Target lexical_cast(const unsigned char* chars, std::size_t count)
+    {
+        return ::pdalboost::lexical_cast<Target>(
+            ::pdalboost::iterator_range<const unsigned char*>(chars, chars + count)
+        );
+    }
+
+    template <typename Target>
+    inline Target lexical_cast(const signed char* chars, std::size_t count)
+    {
+        return ::pdalboost::lexical_cast<Target>(
+            ::pdalboost::iterator_range<const signed char*>(chars, chars + count)
+        );
+    }
+
+#ifndef BOOST_LCAST_NO_WCHAR_T
+    template <typename Target>
+    inline Target lexical_cast(const wchar_t* chars, std::size_t count)
+    {
+        return ::pdalboost::lexical_cast<Target>(
+            ::pdalboost::iterator_range<const wchar_t*>(chars, chars + count)
+        );
+    }
+#endif
+#ifndef BOOST_NO_CXX11_CHAR16_T
+    template <typename Target>
+    inline Target lexical_cast(const char16_t* chars, std::size_t count)
+    {
+        return ::pdalboost::lexical_cast<Target>(
+            ::pdalboost::iterator_range<const char16_t*>(chars, chars + count)
+        );
+    }
+#endif
+#ifndef BOOST_NO_CXX11_CHAR32_T
+    template <typename Target>
+    inline Target lexical_cast(const char32_t* chars, std::size_t count)
+    {
+        return ::pdalboost::lexical_cast<Target>(
+            ::pdalboost::iterator_range<const char32_t*>(chars, chars + count)
+        );
+    }
+#endif
+
+} // namespace pdalboost
+
+#undef BOOST_LCAST_NO_WCHAR_T
+
+#endif // BOOST_LEXICAL_CAST_INCLUDED
+
diff --git a/vendor/pdalboost/boost/lexical_cast/bad_lexical_cast.hpp b/vendor/pdalboost/boost/lexical_cast/bad_lexical_cast.hpp
new file mode 100644
index 0000000..66903f6
--- /dev/null
+++ b/vendor/pdalboost/boost/lexical_cast/bad_lexical_cast.hpp
@@ -0,0 +1,101 @@
+// Copyright Kevlin Henney, 2000-2005.
+// Copyright Alexander Nasonov, 2006-2010.
+// Copyright Antony Polukhin, 2011-2014.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// what:  lexical_cast custom keyword cast
+// who:   contributed by Kevlin Henney,
+//        enhanced with contributions from Terje Slettebo,
+//        with additional fixes and suggestions from Gennaro Prota,
+//        Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov,
+//        Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann,
+//        Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters
+// when:  November 2000, March 2003, June 2005, June 2006, March 2011 - 2014
+
+#ifndef BOOST_LEXICAL_CAST_BAD_LEXICAL_CAST_HPP
+#define BOOST_LEXICAL_CAST_BAD_LEXICAL_CAST_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#   pragma once
+#endif
+
+#include <typeinfo>
+#include <exception>
+#include <boost/throw_exception.hpp>
+
+namespace pdalboost
+{
+    // exception used to indicate runtime lexical_cast failure
+    class BOOST_SYMBOL_VISIBLE bad_lexical_cast :
+    // workaround MSVC bug with std::bad_cast when _HAS_EXCEPTIONS == 0 
+#if defined(BOOST_MSVC) && defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS 
+        public std::exception 
+#else 
+        public std::bad_cast 
+#endif 
+
+#if defined(__BORLANDC__) && BOOST_WORKAROUND( __BORLANDC__, < 0x560 )
+        // under bcc32 5.5.1 bad_cast doesn't derive from exception
+        , public std::exception
+#endif
+
+    {
+    public:
+        bad_lexical_cast() BOOST_NOEXCEPT
+#ifndef BOOST_NO_TYPEID
+           : source(&typeid(void)), target(&typeid(void))
+#endif
+        {}
+
+        virtual const char *what() const BOOST_NOEXCEPT_OR_NOTHROW {
+            return "bad lexical cast: "
+                   "source type value could not be interpreted as target";
+        }
+
+        virtual ~bad_lexical_cast() BOOST_NOEXCEPT_OR_NOTHROW
+        {}
+
+#ifndef BOOST_NO_TYPEID
+        bad_lexical_cast(
+                const std::type_info &source_type_arg,
+                const std::type_info &target_type_arg) BOOST_NOEXCEPT
+            : source(&source_type_arg), target(&target_type_arg)
+        {}
+
+        const std::type_info &source_type() const BOOST_NOEXCEPT {
+            return *source;
+        }
+
+        const std::type_info &target_type() const BOOST_NOEXCEPT {
+            return *target;
+        }
+
+    private:
+        const std::type_info *source;
+        const std::type_info *target;
+#endif
+    };
+
+    namespace conversion { namespace detail {
+#ifdef BOOST_NO_TYPEID
+        template <class S, class T>
+        inline void throw_bad_cast() {
+            pdalboost::throw_exception(bad_lexical_cast());
+        }
+#else
+        template <class S, class T>
+        inline void throw_bad_cast() {
+            pdalboost::throw_exception(bad_lexical_cast(typeid(S), typeid(T)));
+        }
+#endif
+    }} // namespace conversion::detail
+
+
+} // namespace pdalboost
+
+#endif // BOOST_LEXICAL_CAST_BAD_LEXICAL_CAST_HPP
+
diff --git a/vendor/pdalboost/boost/lexical_cast/detail/converter_lexical.hpp b/vendor/pdalboost/boost/lexical_cast/detail/converter_lexical.hpp
new file mode 100644
index 0000000..775329c
--- /dev/null
+++ b/vendor/pdalboost/boost/lexical_cast/detail/converter_lexical.hpp
@@ -0,0 +1,498 @@
+// Copyright Kevlin Henney, 2000-2005.
+// Copyright Alexander Nasonov, 2006-2010.
+// Copyright Antony Polukhin, 2011-2014.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// what:  lexical_cast custom keyword cast
+// who:   contributed by Kevlin Henney,
+//        enhanced with contributions from Terje Slettebo,
+//        with additional fixes and suggestions from Gennaro Prota,
+//        Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov,
+//        Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann,
+//        Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters
+// when:  November 2000, March 2003, June 2005, June 2006, March 2011 - 2014
+
+#ifndef BOOST_LEXICAL_CAST_DETAIL_CONVERTER_LEXICAL_HPP
+#define BOOST_LEXICAL_CAST_DETAIL_CONVERTER_LEXICAL_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#   pragma once
+#endif
+
+#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_WSTRING)
+#define BOOST_LCAST_NO_WCHAR_T
+#endif
+
+#include <cstddef>
+#include <string>
+#include <boost/limits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_float.hpp>
+#include <boost/type_traits/has_left_shift.hpp>
+#include <boost/type_traits/has_right_shift.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/detail/lcast_precision.hpp>
+
+#include <boost/lexical_cast/detail/widest_char.hpp>
+#include <boost/lexical_cast/detail/is_character.hpp>
+
+#ifndef BOOST_NO_CXX11_HDR_ARRAY
+#include <array>
+#endif
+
+#include <boost/array.hpp>
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/container/container_fwd.hpp>
+
+#include <boost/lexical_cast/detail/converter_lexical_streams.hpp>
+
+namespace pdalboost {
+
+    namespace detail // normalize_single_byte_char<Char>
+    {
+        // Converts signed/unsigned char to char
+        template < class Char >
+        struct normalize_single_byte_char 
+        {
+            typedef Char type;
+        };
+
+        template <>
+        struct normalize_single_byte_char< signed char >
+        {
+            typedef char type;
+        };
+
+        template <>
+        struct normalize_single_byte_char< unsigned char >
+        {
+            typedef char type;
+        };
+    }
+
+    namespace detail // deduce_character_type_later<T>
+    {
+        // Helper type, meaning that stram character for T must be deduced 
+        // at Stage 2 (See deduce_source_char<T> and deduce_target_char<T>)
+        template < class T > struct deduce_character_type_later {};
+    }
+
+    namespace detail // stream_char_common<T>
+    {
+        // Selectors to choose stream character type (common for Source and Target)
+        // Returns one of char, wchar_t, char16_t, char32_t or deduce_character_type_later<T> types
+        // Executed on Stage 1 (See deduce_source_char<T> and deduce_target_char<T>)
+        template < typename Type >
+        struct stream_char_common: public pdalboost::mpl::if_c<
+            pdalboost::detail::is_character< Type >::value,
+            Type,
+            pdalboost::detail::deduce_character_type_later< Type >
+        > {};
+
+        template < typename Char >
+        struct stream_char_common< Char* >: public pdalboost::mpl::if_c<
+            pdalboost::detail::is_character< Char >::value,
+            Char,
+            pdalboost::detail::deduce_character_type_later< Char* >
+        > {};
+
+        template < typename Char >
+        struct stream_char_common< const Char* >: public pdalboost::mpl::if_c<
+            pdalboost::detail::is_character< Char >::value,
+            Char,
+            pdalboost::detail::deduce_character_type_later< const Char* >
+        > {};
+
+        template < typename Char >
+        struct stream_char_common< pdalboost::iterator_range< Char* > >: public pdalboost::mpl::if_c<
+            pdalboost::detail::is_character< Char >::value,
+            Char,
+            pdalboost::detail::deduce_character_type_later< pdalboost::iterator_range< Char* > >
+        > {};
+    
+        template < typename Char >
+        struct stream_char_common< pdalboost::iterator_range< const Char* > >: public pdalboost::mpl::if_c<
+            pdalboost::detail::is_character< Char >::value,
+            Char,
+            pdalboost::detail::deduce_character_type_later< pdalboost::iterator_range< const Char* > >
+        > {};
+
+        template < class Char, class Traits, class Alloc >
+        struct stream_char_common< std::basic_string< Char, Traits, Alloc > >
+        {
+            typedef Char type;
+        };
+
+        template < class Char, class Traits, class Alloc >
+        struct stream_char_common< pdalboost::container::basic_string< Char, Traits, Alloc > >
+        {
+            typedef Char type;
+        };
+
+        template < typename Char, std::size_t N >
+        struct stream_char_common< pdalboost::array< Char, N > >: public pdalboost::mpl::if_c<
+            pdalboost::detail::is_character< Char >::value,
+            Char,
+            pdalboost::detail::deduce_character_type_later< pdalboost::array< Char, N > >
+        > {};
+
+        template < typename Char, std::size_t N >
+        struct stream_char_common< pdalboost::array< const Char, N > >: public pdalboost::mpl::if_c<
+            pdalboost::detail::is_character< Char >::value,
+            Char,
+            pdalboost::detail::deduce_character_type_later< pdalboost::array< const Char, N > >
+        > {};
+
+#ifndef BOOST_NO_CXX11_HDR_ARRAY
+        template < typename Char, std::size_t N >
+        struct stream_char_common< std::array<Char, N > >: public pdalboost::mpl::if_c<
+            pdalboost::detail::is_character< Char >::value,
+            Char,
+            pdalboost::detail::deduce_character_type_later< std::array< Char, N > >
+        > {};
+
+        template < typename Char, std::size_t N >
+        struct stream_char_common< std::array< const Char, N > >: public pdalboost::mpl::if_c<
+            pdalboost::detail::is_character< Char >::value,
+            Char,
+            pdalboost::detail::deduce_character_type_later< std::array< const Char, N > >
+        > {};
+#endif
+
+#ifdef BOOST_HAS_INT128
+        template <> struct stream_char_common< pdalboost::int128_type >: public pdalboost::mpl::identity< char > {};
+        template <> struct stream_char_common< pdalboost::uint128_type >: public pdalboost::mpl::identity< char > {};
+#endif
+
+#if !defined(BOOST_LCAST_NO_WCHAR_T) && defined(BOOST_NO_INTRINSIC_WCHAR_T)
+        template <>
+        struct stream_char_common< wchar_t >
+        {
+            typedef char type;
+        };
+#endif
+    }
+
+    namespace detail // deduce_source_char_impl<T>
+    {
+        // If type T is `deduce_character_type_later` type, then tries to deduce
+        // character type using pdalboost::has_left_shift<T> metafunction.
+        // Otherwise supplied type T is a character type, that must be normalized
+        // using normalize_single_byte_char<Char>.
+        // Executed at Stage 2  (See deduce_source_char<T> and deduce_target_char<T>)
+        template < class Char > 
+        struct deduce_source_char_impl
+        { 
+            typedef BOOST_DEDUCED_TYPENAME pdalboost::detail::normalize_single_byte_char< Char >::type type; 
+        };
+        
+        template < class T > 
+        struct deduce_source_char_impl< deduce_character_type_later< T > > 
+        {
+            typedef pdalboost::has_left_shift< std::basic_ostream< char >, T > result_t;
+
+#if defined(BOOST_LCAST_NO_WCHAR_T)
+            BOOST_STATIC_ASSERT_MSG((result_t::value), 
+                "Source type is not std::ostream`able and std::wostream`s are not supported by your STL implementation");
+            typedef char type;
+#else
+            typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_c<
+                result_t::value, char, wchar_t
+            >::type type;
+
+            BOOST_STATIC_ASSERT_MSG((result_t::value || pdalboost::has_left_shift< std::basic_ostream< type >, T >::value), 
+                "Source type is neither std::ostream`able nor std::wostream`able");
+#endif
+        };
+    }
+
+    namespace detail  // deduce_target_char_impl<T>
+    {
+        // If type T is `deduce_character_type_later` type, then tries to deduce
+        // character type using pdalboost::has_right_shift<T> metafunction.
+        // Otherwise supplied type T is a character type, that must be normalized
+        // using normalize_single_byte_char<Char>.
+        // Executed at Stage 2  (See deduce_source_char<T> and deduce_target_char<T>)
+        template < class Char > 
+        struct deduce_target_char_impl 
+        { 
+            typedef BOOST_DEDUCED_TYPENAME normalize_single_byte_char< Char >::type type; 
+        };
+        
+        template < class T > 
+        struct deduce_target_char_impl< deduce_character_type_later<T> > 
+        { 
+            typedef pdalboost::has_right_shift<std::basic_istream<char>, T > result_t;
+
+#if defined(BOOST_LCAST_NO_WCHAR_T)
+            BOOST_STATIC_ASSERT_MSG((result_t::value), 
+                "Target type is not std::istream`able and std::wistream`s are not supported by your STL implementation");
+            typedef char type;
+#else
+            typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_c<
+                result_t::value, char, wchar_t
+            >::type type;
+            
+            BOOST_STATIC_ASSERT_MSG((result_t::value || pdalboost::has_right_shift<std::basic_istream<wchar_t>, T >::value), 
+                "Target type is neither std::istream`able nor std::wistream`able");
+#endif
+        };
+    } 
+
+    namespace detail  // deduce_target_char<T> and deduce_source_char<T>
+    {
+        // We deduce stream character types in two stages.
+        //
+        // Stage 1 is common for Target and Source. At Stage 1 we get 
+        // non normalized character type (may contain unsigned/signed char)
+        // or deduce_character_type_later<T> where T is the original type.
+        // Stage 1 is executed by stream_char_common<T>
+        //
+        // At Stage 2 we normalize character types or try to deduce character 
+        // type using metafunctions. 
+        // Stage 2 is executed by deduce_target_char_impl<T> and 
+        // deduce_source_char_impl<T>
+        //
+        // deduce_target_char<T> and deduce_source_char<T> functions combine 
+        // both stages
+
+        template < class T >
+        struct deduce_target_char
+        {
+            typedef BOOST_DEDUCED_TYPENAME stream_char_common< T >::type stage1_type;
+            typedef BOOST_DEDUCED_TYPENAME deduce_target_char_impl< stage1_type >::type stage2_type;
+
+            typedef stage2_type type;
+        };
+
+        template < class T >
+        struct deduce_source_char
+        {
+            typedef BOOST_DEDUCED_TYPENAME stream_char_common< T >::type stage1_type;
+            typedef BOOST_DEDUCED_TYPENAME deduce_source_char_impl< stage1_type >::type stage2_type;
+
+            typedef stage2_type type;
+        };
+    }
+
+    namespace detail // extract_char_traits template
+    {
+        // We are attempting to get char_traits<> from T
+        // template parameter. Otherwise we'll be using std::char_traits<Char>
+        template < class Char, class T >
+        struct extract_char_traits
+                : pdalboost::false_type
+        {
+            typedef std::char_traits< Char > trait_t;
+        };
+
+        template < class Char, class Traits, class Alloc >
+        struct extract_char_traits< Char, std::basic_string< Char, Traits, Alloc > >
+            : pdalboost::true_type
+        {
+            typedef Traits trait_t;
+        };
+
+        template < class Char, class Traits, class Alloc>
+        struct extract_char_traits< Char, pdalboost::container::basic_string< Char, Traits, Alloc > >
+            : pdalboost::true_type
+        {
+            typedef Traits trait_t;
+        };
+    }
+
+    namespace detail // array_to_pointer_decay<T>
+    {
+        template<class T>
+        struct array_to_pointer_decay
+        {
+            typedef T type;
+        };
+
+        template<class T, std::size_t N>
+        struct array_to_pointer_decay<T[N]>
+        {
+            typedef const T * type;
+        };
+    }
+    
+    namespace detail // lcast_src_length
+    {
+        // Return max. length of string representation of Source;
+        template< class Source,         // Source type of lexical_cast.
+                  class Enable = void   // helper type
+                >
+        struct lcast_src_length
+        {
+            BOOST_STATIC_CONSTANT(std::size_t, value = 1);
+        };
+
+        // Helper for integral types.
+        // Notes on length calculation:
+        // Max length for 32bit int with grouping "\1" and thousands_sep ',':
+        // "-2,1,4,7,4,8,3,6,4,7"
+        //  ^                    - is_signed
+        //   ^                   - 1 digit not counted by digits10
+        //    ^^^^^^^^^^^^^^^^^^ - digits10 * 2
+        //
+        // Constant is_specialized is used instead of constant 1
+        // to prevent buffer overflow in a rare case when
+        // <boost/limits.hpp> doesn't add missing specialization for
+        // numeric_limits<T> for some integral type T.
+        // When is_specialized is false, the whole expression is 0.
+        template <class Source>
+        struct lcast_src_length<
+                    Source, BOOST_DEDUCED_TYPENAME pdalboost::enable_if<pdalboost::is_integral<Source> >::type
+                >
+        {
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+            BOOST_STATIC_CONSTANT(std::size_t, value =
+                  std::numeric_limits<Source>::is_signed +
+                  std::numeric_limits<Source>::is_specialized + /* == 1 */
+                  std::numeric_limits<Source>::digits10 * 2
+              );
+#else
+            BOOST_STATIC_CONSTANT(std::size_t, value = 156);
+            BOOST_STATIC_ASSERT(sizeof(Source) * CHAR_BIT <= 256);
+#endif
+        };
+
+        // Helper for floating point types.
+        // -1.23456789e-123456
+        // ^                   sign
+        //  ^                  leading digit
+        //   ^                 decimal point 
+        //    ^^^^^^^^         lcast_precision<Source>::value
+        //            ^        "e"
+        //             ^       exponent sign
+        //              ^^^^^^ exponent (assumed 6 or less digits)
+        // sign + leading digit + decimal point + "e" + exponent sign == 5
+        template<class Source>
+        struct lcast_src_length<
+                Source, BOOST_DEDUCED_TYPENAME pdalboost::enable_if<pdalboost::is_float<Source> >::type
+            >
+        {
+
+#ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION
+            BOOST_STATIC_ASSERT(
+                    std::numeric_limits<Source>::max_exponent10 <=  999999L &&
+                    std::numeric_limits<Source>::min_exponent10 >= -999999L
+                );
+
+            BOOST_STATIC_CONSTANT(std::size_t, value =
+                    5 + lcast_precision<Source>::value + 6
+                );
+#else // #ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION
+            BOOST_STATIC_CONSTANT(std::size_t, value = 156);
+#endif // #ifndef BOOST_LCAST_NO_COMPILE_TIME_PRECISION
+        };
+    }
+
+    namespace detail // lexical_cast_stream_traits<Source, Target>
+    {
+        template <class Source, class Target>
+        struct lexical_cast_stream_traits {
+            typedef BOOST_DEDUCED_TYPENAME pdalboost::detail::array_to_pointer_decay<Source>::type src;
+            typedef BOOST_DEDUCED_TYPENAME pdalboost::remove_cv<src>::type            no_cv_src;
+                
+            typedef pdalboost::detail::deduce_source_char<no_cv_src>                           deduce_src_char_metafunc;
+            typedef BOOST_DEDUCED_TYPENAME deduce_src_char_metafunc::type           src_char_t;
+            typedef BOOST_DEDUCED_TYPENAME pdalboost::detail::deduce_target_char<Target>::type target_char_t;
+                
+            typedef BOOST_DEDUCED_TYPENAME pdalboost::detail::widest_char<
+                target_char_t, src_char_t
+            >::type char_type;
+
+#if !defined(BOOST_NO_CXX11_CHAR16_T) && defined(BOOST_NO_CXX11_UNICODE_LITERALS)
+            BOOST_STATIC_ASSERT_MSG(( !pdalboost::is_same<char16_t, src_char_t>::value
+                                        && !pdalboost::is_same<char16_t, target_char_t>::value),
+                "Your compiler does not have full support for char16_t" );
+#endif
+#if !defined(BOOST_NO_CXX11_CHAR32_T) && defined(BOOST_NO_CXX11_UNICODE_LITERALS)
+            BOOST_STATIC_ASSERT_MSG(( !pdalboost::is_same<char32_t, src_char_t>::value
+                                        && !pdalboost::is_same<char32_t, target_char_t>::value),
+                "Your compiler does not have full support for char32_t" );
+#endif
+
+            typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_c<
+                pdalboost::detail::extract_char_traits<char_type, Target>::value,
+                BOOST_DEDUCED_TYPENAME pdalboost::detail::extract_char_traits<char_type, Target>,
+                BOOST_DEDUCED_TYPENAME pdalboost::detail::extract_char_traits<char_type, no_cv_src>
+            >::type::trait_t traits;
+            
+            typedef pdalboost::mpl::bool_
+            	<
+                pdalboost::is_same<char, src_char_t>::value &&                                 // source is not a wide character based type
+                (sizeof(char) != sizeof(target_char_t)) &&  // target type is based on wide character
+                (!(pdalboost::detail::is_character<no_cv_src>::value))
+            	> is_string_widening_required_t;
+
+            typedef pdalboost::mpl::bool_
+            	<
+            	!(pdalboost::is_integral<no_cv_src>::value || 
+                  pdalboost::detail::is_character<
+                    BOOST_DEDUCED_TYPENAME deduce_src_char_metafunc::stage1_type          // if we did not get character type at stage1
+                  >::value                                                           // then we have no optimization for that type
+            	 )
+            	> is_source_input_not_optimized_t;
+            
+            // If we have an optimized conversion for
+            // Source, we do not need to construct stringbuf.
+            BOOST_STATIC_CONSTANT(bool, requires_stringbuf = 
+            	(is_string_widening_required_t::value || is_source_input_not_optimized_t::value)
+            );
+            
+            typedef pdalboost::detail::lcast_src_length<no_cv_src> len_t;
+        };
+    }
+ 
+    namespace detail
+    {
+        template<typename Target, typename Source>
+        struct lexical_converter_impl
+        {
+            typedef lexical_cast_stream_traits<Source, Target>  stream_trait;
+
+            typedef detail::lexical_istream_limited_src<
+                BOOST_DEDUCED_TYPENAME stream_trait::char_type,
+                BOOST_DEDUCED_TYPENAME stream_trait::traits,
+                stream_trait::requires_stringbuf,
+                stream_trait::len_t::value + 1
+            > i_interpreter_type;
+
+            typedef detail::lexical_ostream_limited_src<
+                BOOST_DEDUCED_TYPENAME stream_trait::char_type,
+                BOOST_DEDUCED_TYPENAME stream_trait::traits
+            > o_interpreter_type;
+
+            static inline bool try_convert(const Source& arg, Target& result) {
+                i_interpreter_type i_interpreter;
+
+                // Disabling ADL, by directly specifying operators.
+                if (!(i_interpreter.operator <<(arg)))
+                    return false;
+
+                o_interpreter_type out(i_interpreter.cbegin(), i_interpreter.cend());
+
+                // Disabling ADL, by directly specifying operators.
+                if(!(out.operator >>(result)))
+                    return false;
+
+                return true;
+            }
+        };
+    }
+
+} // namespace pdalboost
+
+#undef BOOST_LCAST_NO_WCHAR_T
+
+#endif // BOOST_LEXICAL_CAST_DETAIL_CONVERTER_LEXICAL_HPP
+
diff --git a/vendor/pdalboost/boost/lexical_cast/detail/converter_lexical_streams.hpp b/vendor/pdalboost/boost/lexical_cast/detail/converter_lexical_streams.hpp
new file mode 100644
index 0000000..2293444
--- /dev/null
+++ b/vendor/pdalboost/boost/lexical_cast/detail/converter_lexical_streams.hpp
@@ -0,0 +1,787 @@
+// Copyright Kevlin Henney, 2000-2005.
+// Copyright Alexander Nasonov, 2006-2010.
+// Copyright Antony Polukhin, 2011-2014.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// what:  lexical_cast custom keyword cast
+// who:   contributed by Kevlin Henney,
+//        enhanced with contributions from Terje Slettebo,
+//        with additional fixes and suggestions from Gennaro Prota,
+//        Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov,
+//        Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann,
+//        Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters
+// when:  November 2000, March 2003, June 2005, June 2006, March 2011 - 2014
+
+#ifndef BOOST_LEXICAL_CAST_DETAIL_CONVERTER_LEXICAL_STREAMS_HPP
+#define BOOST_LEXICAL_CAST_DETAIL_CONVERTER_LEXICAL_STREAMS_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#   pragma once
+#endif
+
+
+#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_WSTRING)
+#define BOOST_LCAST_NO_WCHAR_T
+#endif
+
+#include <cstddef>
+#include <string>
+#include <cstring>
+#include <cstdio>
+#include <boost/limits.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/detail/workaround.hpp>
+
+
+#ifndef BOOST_NO_STD_LOCALE
+#   include <locale>
+#else
+#   ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE
+        // Getting error at this point means, that your STL library is old/lame/misconfigured.
+        // If nothing can be done with STL library, define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE,
+        // but beware: lexical_cast will understand only 'C' locale delimeters and thousands
+        // separators.
+#       error "Unable to use <locale> header. Define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE to force "
+#       error "pdalboost::lexical_cast to use only 'C' locale during conversions."
+#   endif
+#endif
+
+#ifdef BOOST_NO_STRINGSTREAM
+#include <strstream>
+#else
+#include <sstream>
+#endif
+
+#include <boost/lexical_cast/detail/lcast_char_constants.hpp>
+#include <boost/lexical_cast/detail/lcast_unsigned_converters.hpp>
+#include <boost/lexical_cast/detail/inf_nan.hpp>
+
+#include <istream>
+
+#ifndef BOOST_NO_CXX11_HDR_ARRAY
+#include <array>
+#endif
+
+#include <boost/array.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_float.hpp>
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/container/container_fwd.hpp>
+#include <boost/integer.hpp>
+#include <boost/detail/basic_pointerbuf.hpp>
+#include <boost/noncopyable.hpp>
+#ifndef BOOST_NO_CWCHAR
+#   include <cwchar>
+#endif
+
+namespace pdalboost {
+
+    namespace detail // basic_unlockedbuf
+    {
+        // acts as a stream buffer which wraps around a pair of pointers
+        // and gives acces to internals
+        template <class BufferType, class CharT>
+        class basic_unlockedbuf : public basic_pointerbuf<CharT, BufferType> {
+        public:
+           typedef basic_pointerbuf<CharT, BufferType> base_type;
+           typedef BOOST_DEDUCED_TYPENAME base_type::streamsize streamsize;
+
+#ifndef BOOST_NO_USING_TEMPLATE
+            using base_type::pptr;
+            using base_type::pbase;
+            using base_type::setbuf;
+#else
+            charT* pptr() const { return base_type::pptr(); }
+            charT* pbase() const { return base_type::pbase(); }
+            BufferType* setbuf(char_type* s, streamsize n) { return base_type::setbuf(s, n); }
+#endif
+        };
+    }
+
+    namespace detail
+    {
+        struct do_not_construct_out_stream_t{};
+        
+        template <class CharT, class Traits>
+        struct out_stream_helper_trait {
+#if defined(BOOST_NO_STRINGSTREAM)
+            typedef std::ostrstream                                 out_stream_t;
+            typedef void                                            buffer_t;
+#elif defined(BOOST_NO_STD_LOCALE)
+            typedef std::ostringstream                              out_stream_t;
+            typedef basic_unlockedbuf<std::streambuf, char>         buffer_t;
+#else
+            typedef std::basic_ostringstream<CharT, Traits> 
+                out_stream_t;
+            typedef basic_unlockedbuf<std::basic_streambuf<CharT, Traits>, CharT>  
+                buffer_t;
+#endif
+        };   
+    }
+
+    namespace detail // optimized stream wrappers
+    {
+        template< class CharT // a result of widest_char transformation
+                , class Traits
+                , bool RequiresStringbuffer
+                , std::size_t CharacterBufferSize
+                >
+        class lexical_istream_limited_src: pdalboost::noncopyable {
+            typedef BOOST_DEDUCED_TYPENAME out_stream_helper_trait<CharT, Traits>::buffer_t
+                buffer_t;
+
+            typedef BOOST_DEDUCED_TYPENAME out_stream_helper_trait<CharT, Traits>::out_stream_t
+                out_stream_t;
+    
+            typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_c<
+                RequiresStringbuffer,
+                out_stream_t,
+                do_not_construct_out_stream_t
+            >::type deduced_out_stream_t;
+
+            // A string representation of Source is written to `buffer`.
+            deduced_out_stream_t out_stream;
+            CharT   buffer[CharacterBufferSize];
+
+            // After the `operator <<`  finishes, `[start, finish)` is
+            // the range to output by `operator >>` 
+            const CharT*  start;
+            const CharT*  finish;
+
+        public:
+            lexical_istream_limited_src() BOOST_NOEXCEPT
+              : start(buffer)
+              , finish(buffer + CharacterBufferSize)
+            {}
+    
+            const CharT* cbegin() const BOOST_NOEXCEPT {
+                return start;
+            }
+
+            const CharT* cend() const BOOST_NOEXCEPT {
+                return finish;
+            }
+
+        private:
+            // Undefined:
+            lexical_istream_limited_src(lexical_istream_limited_src const&);
+            void operator=(lexical_istream_limited_src const&);
+
+/************************************ HELPER FUNCTIONS FOR OPERATORS << ( ... ) ********************************/
+            bool shl_char(CharT ch) BOOST_NOEXCEPT {
+                Traits::assign(buffer[0], ch);
+                finish = start + 1;
+                return true;
+            }
+
+#ifndef BOOST_LCAST_NO_WCHAR_T
+            template <class T>
+            bool shl_char(T ch) {
+                BOOST_STATIC_ASSERT_MSG(( sizeof(T) <= sizeof(CharT)) ,
+                    "pdalboost::lexical_cast does not support narrowing of char types."
+                    "Use pdalboost::locale instead" );
+#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE
+                std::locale loc;
+                CharT const w = BOOST_USE_FACET(std::ctype<CharT>, loc).widen(ch);
+#else
+                CharT const w = static_cast<CharT>(ch);
+#endif
+                Traits::assign(buffer[0], w);
+                finish = start + 1;
+                return true;
+            }
+#endif
+
+            bool shl_char_array(CharT const* str) BOOST_NOEXCEPT {
+                start = str;
+                finish = start + Traits::length(str);
+                return true;
+            }
+
+            template <class T>
+            bool shl_char_array(T const* str) {
+                BOOST_STATIC_ASSERT_MSG(( sizeof(T) <= sizeof(CharT)),
+                    "pdalboost::lexical_cast does not support narrowing of char types."
+                    "Use pdalboost::locale instead" );
+                return shl_input_streamable(str);
+            }
+            
+            bool shl_char_array_limited(CharT const* str, std::size_t max_size) BOOST_NOEXCEPT {
+                start = str;
+                finish = std::find(start, start + max_size, Traits::to_char_type(0));
+                return true;
+            }
+
+            template<typename InputStreamable>
+            bool shl_input_streamable(InputStreamable& input) {
+#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_LOCALE)
+                // If you have compilation error at this point, than your STL library
+                // does not support such conversions. Try updating it.
+                BOOST_STATIC_ASSERT((pdalboost::is_same<char, CharT>::value));
+#endif
+
+#ifndef BOOST_NO_EXCEPTIONS
+                out_stream.exceptions(std::ios::badbit);
+                try {
+#endif
+                bool const result = !(out_stream << input).fail();
+                const buffer_t* const p = static_cast<buffer_t*>(
+                    static_cast<std::basic_streambuf<CharT, Traits>*>(out_stream.rdbuf())
+                );
+                start = p->pbase();
+                finish = p->pptr();
+                return result;
+#ifndef BOOST_NO_EXCEPTIONS
+                } catch (const ::std::ios_base::failure& /*f*/) {
+                    return false;
+                }
+#endif
+            }
+
+            template <class T>
+            inline bool shl_unsigned(const T n) {
+                CharT* tmp_finish = buffer + CharacterBufferSize;
+                start = lcast_put_unsigned<Traits, T, CharT>(n, tmp_finish).convert();
+                finish = tmp_finish;
+                return true;
+            }
+
+            template <class T>
+            inline bool shl_signed(const T n) {
+                CharT* tmp_finish = buffer + CharacterBufferSize;
+                typedef BOOST_DEDUCED_TYPENAME pdalboost::make_unsigned<T>::type utype;
+                CharT* tmp_start = lcast_put_unsigned<Traits, utype, CharT>(lcast_to_unsigned(n), tmp_finish).convert();
+                if (n < 0) {
+                    --tmp_start;
+                    CharT const minus = lcast_char_constants<CharT>::minus;
+                    Traits::assign(*tmp_start, minus);
+                }
+                start = tmp_start;
+                finish = tmp_finish;
+                return true;
+            }
+
+            template <class T, class SomeCharT>
+            bool shl_real_type(const T& val, SomeCharT* /*begin*/) {
+                lcast_set_precision(out_stream, &val);
+                return shl_input_streamable(val);
+            }
+
+            bool shl_real_type(float val, char* begin) {
+                using namespace std;
+                const double val_as_double = val;
+                finish = start +
+#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+                    sprintf_s(begin, CharacterBufferSize,
+#else
+                    sprintf(begin, 
+#endif
+                    "%.*g", static_cast<int>(pdalboost::detail::lcast_get_precision<float>()), val_as_double);
+                return finish > start;
+            }
+
+            bool shl_real_type(double val, char* begin) {
+                using namespace std;
+                finish = start +
+#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+                    sprintf_s(begin, CharacterBufferSize,
+#else
+                    sprintf(begin, 
+#endif
+                    "%.*g", static_cast<int>(pdalboost::detail::lcast_get_precision<double>()), val);
+                return finish > start;
+            }
+
+#ifndef __MINGW32__
+            bool shl_real_type(long double val, char* begin) {
+                using namespace std;
+                finish = start +
+#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
+                    sprintf_s(begin, CharacterBufferSize,
+#else
+                    sprintf(begin, 
+#endif
+                    "%.*Lg", static_cast<int>(pdalboost::detail::lcast_get_precision<long double>()), val );
+                return finish > start;
+            }
+#endif
+
+
+#if !defined(BOOST_LCAST_NO_WCHAR_T) && !defined(BOOST_NO_SWPRINTF) && !defined(__MINGW32__)
+            bool shl_real_type(float val, wchar_t* begin) {
+                using namespace std;
+                const double val_as_double = val;
+                finish = start + swprintf(begin, CharacterBufferSize,
+                                       L"%.*g",
+                                       static_cast<int>(pdalboost::detail::lcast_get_precision<float >()),
+                                       val_as_double );
+                return finish > start;
+            }
+
+            bool shl_real_type(double val, wchar_t* begin) {
+                using namespace std;
+                finish = start + swprintf(begin, CharacterBufferSize,
+                                          L"%.*g", static_cast<int>(pdalboost::detail::lcast_get_precision<double >()), val );
+                return finish > start;
+            }
+
+            bool shl_real_type(long double val, wchar_t* begin) {
+                using namespace std;
+                finish = start + swprintf(begin, CharacterBufferSize,
+                                          L"%.*Lg", static_cast<int>(pdalboost::detail::lcast_get_precision<long double >()), val );
+                return finish > start;
+            }
+#endif
+            template <class T>
+            bool shl_real(T val) {
+                CharT* tmp_finish = buffer + CharacterBufferSize;
+                if (put_inf_nan(buffer, tmp_finish, val)) {
+                    finish = tmp_finish;
+                    return true;
+                }
+
+                return shl_real_type(val, static_cast<CharT*>(buffer));
+            }
+
+/************************************ OPERATORS << ( ... ) ********************************/
+        public:
+            template<class Alloc>
+            bool operator<<(std::basic_string<CharT,Traits,Alloc> const& str) BOOST_NOEXCEPT {
+                start = str.data();
+                finish = start + str.length();
+                return true;
+            }
+
+            template<class Alloc>
+            bool operator<<(pdalboost::container::basic_string<CharT,Traits,Alloc> const& str) BOOST_NOEXCEPT {
+                start = str.data();
+                finish = start + str.length();
+                return true;
+            }
+
+            bool operator<<(bool value) BOOST_NOEXCEPT {
+                CharT const czero = lcast_char_constants<CharT>::zero;
+                Traits::assign(buffer[0], Traits::to_char_type(czero + value));
+                finish = start + 1;
+                return true;
+            }
+
+            template <class C>
+            BOOST_DEDUCED_TYPENAME pdalboost::disable_if<pdalboost::is_const<C>, bool>::type 
+            operator<<(const iterator_range<C*>& rng) BOOST_NOEXCEPT {
+                return (*this) << iterator_range<const C*>(rng.begin(), rng.end());
+            }
+            
+            bool operator<<(const iterator_range<const CharT*>& rng) BOOST_NOEXCEPT {
+                start = rng.begin();
+                finish = rng.end();
+                return true; 
+            }
+
+            bool operator<<(const iterator_range<const signed char*>& rng) BOOST_NOEXCEPT {
+                return (*this) << iterator_range<const char*>(
+                    reinterpret_cast<const char*>(rng.begin()),
+                    reinterpret_cast<const char*>(rng.end())
+                );
+            }
+
+            bool operator<<(const iterator_range<const unsigned char*>& rng) BOOST_NOEXCEPT {
+                return (*this) << iterator_range<const char*>(
+                    reinterpret_cast<const char*>(rng.begin()),
+                    reinterpret_cast<const char*>(rng.end())
+                );
+            }
+
+            bool operator<<(char ch)                    { return shl_char(ch); }
+            bool operator<<(unsigned char ch)           { return ((*this) << static_cast<char>(ch)); }
+            bool operator<<(signed char ch)             { return ((*this) << static_cast<char>(ch)); }
+#if !defined(BOOST_LCAST_NO_WCHAR_T)
+            bool operator<<(wchar_t const* str)         { return shl_char_array(str); }
+            bool operator<<(wchar_t * str)              { return shl_char_array(str); }
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+            bool operator<<(wchar_t ch)                 { return shl_char(ch); }
+#endif
+#endif
+#if !defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS)
+            bool operator<<(char16_t ch)                { return shl_char(ch); }
+            bool operator<<(char16_t * str)             { return shl_char_array(str); }
+            bool operator<<(char16_t const * str)       { return shl_char_array(str); }
+#endif
+#if !defined(BOOST_NO_CXX11_CHAR32_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS)
+            bool operator<<(char32_t ch)                { return shl_char(ch); }
+            bool operator<<(char32_t * str)             { return shl_char_array(str); }
+            bool operator<<(char32_t const * str)       { return shl_char_array(str); }
+#endif
+            bool operator<<(unsigned char const* ch)    { return ((*this) << reinterpret_cast<char const*>(ch)); }
+            bool operator<<(unsigned char * ch)         { return ((*this) << reinterpret_cast<char *>(ch)); }
+            bool operator<<(signed char const* ch)      { return ((*this) << reinterpret_cast<char const*>(ch)); }
+            bool operator<<(signed char * ch)           { return ((*this) << reinterpret_cast<char *>(ch)); }
+            bool operator<<(char const* str)            { return shl_char_array(str); }
+            bool operator<<(char* str)                  { return shl_char_array(str); }
+            bool operator<<(short n)                    { return shl_signed(n); }
+            bool operator<<(int n)                      { return shl_signed(n); }
+            bool operator<<(long n)                     { return shl_signed(n); }
+            bool operator<<(unsigned short n)           { return shl_unsigned(n); }
+            bool operator<<(unsigned int n)             { return shl_unsigned(n); }
+            bool operator<<(unsigned long n)            { return shl_unsigned(n); }
+
+#if defined(BOOST_HAS_LONG_LONG)
+            bool operator<<(pdalboost::ulong_long_type n)   { return shl_unsigned(n); }
+            bool operator<<(pdalboost::long_long_type n)    { return shl_signed(n); }
+#elif defined(BOOST_HAS_MS_INT64)
+            bool operator<<(unsigned __int64 n)         { return shl_unsigned(n); }
+            bool operator<<(         __int64 n)         { return shl_signed(n); }
+#endif
+
+#ifdef BOOST_HAS_INT128
+            bool operator<<(const pdalboost::uint128_type& n)   { return shl_unsigned(n); }
+            bool operator<<(const pdalboost::int128_type& n)    { return shl_signed(n); }
+#endif
+            bool operator<<(float val)                  { return shl_real(val); }
+            bool operator<<(double val)                 { return shl_real(val); }
+            bool operator<<(long double val)            {
+#ifndef __MINGW32__
+                return shl_real(val);
+#else
+                return shl_real(static_cast<double>(val));
+#endif
+            }
+            
+            // Adding constness to characters. Constness does not change layout
+            template <class C, std::size_t N>
+            BOOST_DEDUCED_TYPENAME pdalboost::disable_if<pdalboost::is_const<C>, bool>::type
+            operator<<(pdalboost::array<C, N> const& input) BOOST_NOEXCEPT { 
+                BOOST_STATIC_ASSERT_MSG(
+                    (sizeof(pdalboost::array<const C, N>) == sizeof(pdalboost::array<C, N>)),
+                    "pdalboost::array<C, N> and pdalboost::array<const C, N> must have exactly the same layout."
+                );
+                return ((*this) << reinterpret_cast<pdalboost::array<const C, N> const& >(input)); 
+            }
+
+            template <std::size_t N>
+            bool operator<<(pdalboost::array<const CharT, N> const& input) BOOST_NOEXCEPT { 
+                return shl_char_array_limited(input.begin(), N); 
+            }
+
+            template <std::size_t N>
+            bool operator<<(pdalboost::array<const unsigned char, N> const& input) BOOST_NOEXCEPT { 
+                return ((*this) << reinterpret_cast<pdalboost::array<const char, N> const& >(input)); 
+            }
+
+            template <std::size_t N>
+            bool operator<<(pdalboost::array<const signed char, N> const& input) BOOST_NOEXCEPT { 
+                return ((*this) << reinterpret_cast<pdalboost::array<const char, N> const& >(input)); 
+            }
+ 
+#ifndef BOOST_NO_CXX11_HDR_ARRAY
+            // Making a Boost.Array from std::array
+            template <class C, std::size_t N>
+            bool operator<<(std::array<C, N> const& input) BOOST_NOEXCEPT { 
+                BOOST_STATIC_ASSERT_MSG(
+                    (sizeof(std::array<C, N>) == sizeof(pdalboost::array<C, N>)),
+                    "std::array and pdalboost::array must have exactly the same layout. "
+                    "Bug in implementation of std::array or pdalboost::array."
+                );
+                return ((*this) << reinterpret_cast<pdalboost::array<C, N> const& >(input)); 
+            }
+#endif
+            template <class InStreamable>
+            bool operator<<(const InStreamable& input)  { return shl_input_streamable(input); }
+        };
+
+
+        template <class CharT, class Traits>
+        class lexical_ostream_limited_src: pdalboost::noncopyable {
+            //`[start, finish)` is the range to output by `operator >>` 
+            const CharT*        start;
+            const CharT* const  finish;
+
+        public:
+            lexical_ostream_limited_src(const CharT* begin, const CharT* end) BOOST_NOEXCEPT
+              : start(begin)
+              , finish(end)
+            {}
+
+/************************************ HELPER FUNCTIONS FOR OPERATORS >> ( ... ) ********************************/
+        private:
+            template <typename Type>
+            bool shr_unsigned(Type& output) {
+                if (start == finish) return false;
+                CharT const minus = lcast_char_constants<CharT>::minus;
+                CharT const plus = lcast_char_constants<CharT>::plus;
+                bool const has_minus = Traits::eq(minus, *start);
+
+                /* We won`t use `start' any more, so no need in decrementing it after */
+                if (has_minus || Traits::eq(plus, *start)) {
+                    ++start;
+                }
+
+                bool const succeed = lcast_ret_unsigned<Traits, Type, CharT>(output, start, finish).convert();
+
+                if (has_minus) {
+                    output = static_cast<Type>(0u - output);
+                }
+
+                return succeed;
+            }
+
+            template <typename Type>
+            bool shr_signed(Type& output) {
+                if (start == finish) return false;
+                CharT const minus = lcast_char_constants<CharT>::minus;
+                CharT const plus = lcast_char_constants<CharT>::plus;
+                typedef BOOST_DEDUCED_TYPENAME make_unsigned<Type>::type utype;
+                utype out_tmp = 0;
+                bool const has_minus = Traits::eq(minus, *start);
+
+                /* We won`t use `start' any more, so no need in decrementing it after */
+                if (has_minus || Traits::eq(plus, *start)) {
+                    ++start;
+                }
+
+                bool succeed = lcast_ret_unsigned<Traits, utype, CharT>(out_tmp, start, finish).convert();
+                if (has_minus) {
+                    utype const comp_val = (static_cast<utype>(1) << std::numeric_limits<Type>::digits);
+                    succeed = succeed && out_tmp<=comp_val;
+                    output = static_cast<Type>(0u - out_tmp);
+                } else {
+                    utype const comp_val = static_cast<utype>((std::numeric_limits<Type>::max)());
+                    succeed = succeed && out_tmp<=comp_val;
+                    output = static_cast<Type>(out_tmp);
+                }
+                return succeed;
+            }
+
+            template<typename InputStreamable>
+            bool shr_using_base_class(InputStreamable& output)
+            {
+                BOOST_STATIC_ASSERT_MSG(
+                    (!pdalboost::is_pointer<InputStreamable>::value),
+                    "pdalboost::lexical_cast can not convert to pointers"
+                );
+
+#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_LOCALE)
+                BOOST_STATIC_ASSERT_MSG((pdalboost::is_same<char, CharT>::value),
+                    "pdalboost::lexical_cast can not convert, because your STL library does not "
+                    "support such conversions. Try updating it."
+                );
+#endif
+                typedef BOOST_DEDUCED_TYPENAME out_stream_helper_trait<CharT, Traits>::buffer_t
+                    buffer_t;
+
+#if defined(BOOST_NO_STRINGSTREAM)
+                std::istrstream stream(start, finish - start);
+#else
+
+                buffer_t buf;
+                // Usually `istream` and `basic_istream` do not modify 
+                // content of buffer; `buffer_t` assures that this is true
+                buf.setbuf(const_cast<CharT*>(start), finish - start);
+#if defined(BOOST_NO_STD_LOCALE)
+                std::istream stream(&buf);
+#else
+                std::basic_istream<CharT, Traits> stream(&buf);
+#endif // BOOST_NO_STD_LOCALE
+#endif // BOOST_NO_STRINGSTREAM
+
+#ifndef BOOST_NO_EXCEPTIONS
+                stream.exceptions(std::ios::badbit);
+                try {
+#endif
+                stream.unsetf(std::ios::skipws);
+                lcast_set_precision(stream, static_cast<InputStreamable*>(0));
+
+                return (stream >> output) 
+                    && (stream.get() == Traits::eof());
+
+#ifndef BOOST_NO_EXCEPTIONS
+                } catch (const ::std::ios_base::failure& /*f*/) {
+                    return false;
+                }
+#endif
+            }
+
+            template<class T>
+            inline bool shr_xchar(T& output) BOOST_NOEXCEPT {
+                BOOST_STATIC_ASSERT_MSG(( sizeof(CharT) == sizeof(T) ),
+                    "pdalboost::lexical_cast does not support narrowing of character types."
+                    "Use pdalboost::locale instead" );
+                bool const ok = (finish - start == 1);
+                if (ok) {
+                    CharT out;
+                    Traits::assign(out, *start);
+                    output = static_cast<T>(out);
+                }
+                return ok;
+            }
+
+            template <std::size_t N, class ArrayT>
+            bool shr_std_array(ArrayT& output) BOOST_NOEXCEPT {
+                using namespace std;
+                const std::size_t size = static_cast<std::size_t>(finish - start);
+                if (size > N - 1) { // `-1` because we need to store \0 at the end 
+                    return false;
+                }
+
+                memcpy(&output[0], start, size * sizeof(CharT));
+                output[size] = Traits::to_char_type(0);
+                return true;
+            }
+
+/************************************ OPERATORS >> ( ... ) ********************************/
+        public:
+            bool operator>>(unsigned short& output)             { return shr_unsigned(output); }
+            bool operator>>(unsigned int& output)               { return shr_unsigned(output); }
+            bool operator>>(unsigned long int& output)          { return shr_unsigned(output); }
+            bool operator>>(short& output)                      { return shr_signed(output); }
+            bool operator>>(int& output)                        { return shr_signed(output); }
+            bool operator>>(long int& output)                   { return shr_signed(output); }
+#if defined(BOOST_HAS_LONG_LONG)
+            bool operator>>(pdalboost::ulong_long_type& output)     { return shr_unsigned(output); }
+            bool operator>>(pdalboost::long_long_type& output)      { return shr_signed(output); }
+#elif defined(BOOST_HAS_MS_INT64)
+            bool operator>>(unsigned __int64& output)           { return shr_unsigned(output); }
+            bool operator>>(__int64& output)                    { return shr_signed(output); }
+#endif
+
+#ifdef BOOST_HAS_INT128
+            bool operator>>(pdalboost::uint128_type& output)        { return shr_unsigned(output); }
+            bool operator>>(pdalboost::int128_type& output)         { return shr_signed(output); }
+#endif
+
+            bool operator>>(char& output)                       { return shr_xchar(output); }
+            bool operator>>(unsigned char& output)              { return shr_xchar(output); }
+            bool operator>>(signed char& output)                { return shr_xchar(output); }
+#if !defined(BOOST_LCAST_NO_WCHAR_T) && !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+            bool operator>>(wchar_t& output)                    { return shr_xchar(output); }
+#endif
+#if !defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS)
+            bool operator>>(char16_t& output)                   { return shr_xchar(output); }
+#endif
+#if !defined(BOOST_NO_CXX11_CHAR32_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS)
+            bool operator>>(char32_t& output)                   { return shr_xchar(output); }
+#endif
+            template<class Alloc>
+            bool operator>>(std::basic_string<CharT,Traits,Alloc>& str) { 
+                str.assign(start, finish); return true; 
+            }
+
+            template<class Alloc>
+            bool operator>>(pdalboost::container::basic_string<CharT,Traits,Alloc>& str) { 
+                str.assign(start, finish); return true; 
+            }
+
+            template <std::size_t N>
+            bool operator>>(pdalboost::array<CharT, N>& output) BOOST_NOEXCEPT { 
+                return shr_std_array<N>(output); 
+            }
+
+            template <std::size_t N>
+            bool operator>>(pdalboost::array<unsigned char, N>& output) BOOST_NOEXCEPT { 
+                return ((*this) >> reinterpret_cast<pdalboost::array<char, N>& >(output)); 
+            }
+
+            template <std::size_t N>
+            bool operator>>(pdalboost::array<signed char, N>& output) BOOST_NOEXCEPT { 
+                return ((*this) >> reinterpret_cast<pdalboost::array<char, N>& >(output)); 
+            }
+ 
+#ifndef BOOST_NO_CXX11_HDR_ARRAY
+            template <class C, std::size_t N>
+            bool operator>>(std::array<C, N>& output) BOOST_NOEXCEPT { 
+                BOOST_STATIC_ASSERT_MSG(
+                    (sizeof(pdalboost::array<C, N>) == sizeof(pdalboost::array<C, N>)),
+                    "std::array<C, N> and pdalboost::array<C, N> must have exactly the same layout."
+                );
+                return ((*this) >> reinterpret_cast<pdalboost::array<C, N>& >(output));
+            }
+#endif
+
+            bool operator>>(bool& output) BOOST_NOEXCEPT {
+                output = false; // Suppress warning about uninitalized variable
+
+                if (start == finish) return false;
+                CharT const zero = lcast_char_constants<CharT>::zero;
+                CharT const plus = lcast_char_constants<CharT>::plus;
+                CharT const minus = lcast_char_constants<CharT>::minus;
+
+                const CharT* const dec_finish = finish - 1;
+                output = Traits::eq(*dec_finish, zero + 1);
+                if (!output && !Traits::eq(*dec_finish, zero)) {
+                    return false; // Does not ends on '0' or '1'
+                }
+
+                if (start == dec_finish) return true;
+
+                // We may have sign at the beginning
+                if (Traits::eq(plus, *start) || (Traits::eq(minus, *start) && !output)) {
+                    ++ start;
+                }
+
+                // Skipping zeros
+                while (start != dec_finish) {
+                    if (!Traits::eq(zero, *start)) {
+                        return false; // Not a zero => error
+                    }
+
+                    ++ start;
+                }
+
+                return true;
+            }
+
+        private:
+            // Not optimised converter
+            template <class T>
+            bool float_types_converter_internal(T& output) {
+                if (parse_inf_nan(start, finish, output)) return true;
+                bool const return_value = shr_using_base_class(output);
+
+                /* Some compilers and libraries successfully
+                 * parse 'inf', 'INFINITY', '1.0E', '1.0E-'...
+                 * We are trying to provide a unified behaviour,
+                 * so we just forbid such conversions (as some
+                 * of the most popular compilers/libraries do)
+                 * */
+                CharT const minus = lcast_char_constants<CharT>::minus;
+                CharT const plus = lcast_char_constants<CharT>::plus;
+                CharT const capital_e = lcast_char_constants<CharT>::capital_e;
+                CharT const lowercase_e = lcast_char_constants<CharT>::lowercase_e;
+                if ( return_value &&
+                     (
+                        Traits::eq(*(finish-1), lowercase_e)                   // 1.0e
+                        || Traits::eq(*(finish-1), capital_e)                  // 1.0E
+                        || Traits::eq(*(finish-1), minus)                      // 1.0e- or 1.0E-
+                        || Traits::eq(*(finish-1), plus)                       // 1.0e+ or 1.0E+
+                     )
+                ) return false;
+
+                return return_value;
+            }
+
+        public:
+            bool operator>>(float& output) { return float_types_converter_internal(output); }
+            bool operator>>(double& output) { return float_types_converter_internal(output); }
+            bool operator>>(long double& output) { return float_types_converter_internal(output); }
+
+            // Generic istream-based algorithm.
+            // lcast_streambuf_for_target<InputStreamable>::value is true.
+            template <typename InputStreamable>
+            bool operator>>(InputStreamable& output) { 
+                return shr_using_base_class(output); 
+            }
+        };
+    }
+} // namespace pdalboost
+
+#undef BOOST_LCAST_NO_WCHAR_T
+
+#endif // BOOST_LEXICAL_CAST_DETAIL_CONVERTER_LEXICAL_HPP
+
diff --git a/vendor/pdalboost/boost/lexical_cast/detail/converter_numeric.hpp b/vendor/pdalboost/boost/lexical_cast/detail/converter_numeric.hpp
new file mode 100644
index 0000000..9f0f39c
--- /dev/null
+++ b/vendor/pdalboost/boost/lexical_cast/detail/converter_numeric.hpp
@@ -0,0 +1,194 @@
+// Copyright Kevlin Henney, 2000-2005.
+// Copyright Alexander Nasonov, 2006-2010.
+// Copyright Antony Polukhin, 2011-2014.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// what:  lexical_cast custom keyword cast
+// who:   contributed by Kevlin Henney,
+//        enhanced with contributions from Terje Slettebo,
+//        with additional fixes and suggestions from Gennaro Prota,
+//        Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov,
+//        Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann,
+//        Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters
+// when:  November 2000, March 2003, June 2005, June 2006, March 2011 - 2014
+
+#ifndef BOOST_LEXICAL_CAST_DETAIL_CONVERTER_NUMERIC_HPP
+#define BOOST_LEXICAL_CAST_DETAIL_CONVERTER_NUMERIC_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#   pragma once
+#endif
+
+#include <boost/limits.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <boost/type_traits/is_signed.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/type_traits/is_float.hpp>
+
+#include <boost/numeric/conversion/cast.hpp>
+
+namespace pdalboost { namespace detail {
+
+template <class Source >
+struct detect_precision_loss
+{
+    typedef Source source_type;
+    typedef pdalboost::numeric::Trunc<Source> Rounder;
+    typedef BOOST_DEDUCED_TYPENAME mpl::if_<
+        pdalboost::is_arithmetic<Source>, Source, Source const&
+    >::type argument_type ;
+
+    static inline source_type nearbyint(argument_type s, bool& is_ok) BOOST_NOEXCEPT {
+        const source_type near_int = Rounder::nearbyint(s);
+        if (near_int && is_ok) {
+            const source_type orig_div_round = s / near_int;
+            const source_type eps = std::numeric_limits<source_type>::epsilon();
+
+            is_ok = !((orig_div_round > 1 ? orig_div_round - 1 : 1 - orig_div_round) > eps);
+        }
+
+        return s;
+    }
+
+    typedef typename Rounder::round_style round_style;
+};
+
+template <typename Base, class Source>
+struct fake_precision_loss: public Base
+{
+    typedef Source source_type ;
+    typedef BOOST_DEDUCED_TYPENAME mpl::if_<
+        pdalboost::is_arithmetic<Source>, Source, Source const&
+    >::type argument_type ;
+
+    static inline source_type nearbyint(argument_type s, bool& /*is_ok*/) BOOST_NOEXCEPT {
+        return s;
+    }
+};
+
+struct nothrow_overflow_handler
+{
+    inline bool operator() ( pdalboost::numeric::range_check_result r ) const BOOST_NOEXCEPT {
+        return (r == pdalboost::numeric::cInRange);
+    }
+};
+
+template <typename Target, typename Source>
+inline bool noexcept_numeric_convert(const Source& arg, Target& result) BOOST_NOEXCEPT {
+    typedef pdalboost::numeric::converter<
+            Target,
+            Source,
+            pdalboost::numeric::conversion_traits<Target, Source >,
+            nothrow_overflow_handler,
+            detect_precision_loss<Source >
+    > converter_orig_t;
+
+    typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_c<
+        pdalboost::is_base_of< detect_precision_loss<Source >, converter_orig_t >::value,
+        converter_orig_t,
+        fake_precision_loss<converter_orig_t, Source>
+    >::type converter_t;
+
+    bool res = nothrow_overflow_handler()(converter_t::out_of_range(arg));
+    result = converter_t::low_level_convert(converter_t::nearbyint(arg, res));
+    return res;
+}
+
+template <typename Target, typename Source>
+struct lexical_cast_dynamic_num_not_ignoring_minus
+{
+    static inline bool try_convert(const Source &arg, Target& result) BOOST_NOEXCEPT {
+        return noexcept_numeric_convert<Target, Source >(arg, result);
+    }
+};
+
+template <typename Target, typename Source>
+struct lexical_cast_dynamic_num_ignoring_minus
+{
+    static inline bool try_convert(const Source &arg, Target& result) BOOST_NOEXCEPT {
+        typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::eval_if_c<
+                pdalboost::is_float<Source>::value,
+                pdalboost::mpl::identity<Source>,
+                pdalboost::make_unsigned<Source>
+        >::type usource_t;
+
+        if (arg < 0) {
+            const bool res = noexcept_numeric_convert<Target, usource_t>(0u - arg, result);
+            result = static_cast<Target>(0u - result);
+            return res;
+        } else {
+            return noexcept_numeric_convert<Target, usource_t>(arg, result);
+        }
+    }
+};
+
+/*
+ * lexical_cast_dynamic_num follows the rules:
+ * 1) If Source can be converted to Target without precision loss and
+ * without overflows, then assign Source to Target and return
+ *
+ * 2) If Source is less than 0 and Target is an unsigned integer,
+ * then negate Source, check the requirements of rule 1) and if
+ * successful, assign static_casted Source to Target and return
+ *
+ * 3) Otherwise throw a bad_lexical_cast exception
+ *
+ *
+ * Rule 2) required because pdalboost::lexical_cast has the behavior of
+ * stringstream, which uses the rules of scanf for conversions. And
+ * in the C99 standard for unsigned input value minus sign is
+ * optional, so if a negative number is read, no errors will arise
+ * and the result will be the two's complement.
+ */
+template <typename Target, typename Source>
+struct dynamic_num_converter_impl
+{
+    static inline bool try_convert(const Source &arg, Target& result) BOOST_NOEXCEPT {
+        typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_c<
+        	pdalboost::is_unsigned<Target>::value &&
+        	(pdalboost::is_signed<Source>::value || pdalboost::is_float<Source>::value) &&
+        	!(pdalboost::is_same<Source, bool>::value) &&
+        	!(pdalboost::is_same<Target, bool>::value),
+            lexical_cast_dynamic_num_ignoring_minus<Target, Source>,
+            lexical_cast_dynamic_num_not_ignoring_minus<Target, Source>
+        >::type caster_type;
+        
+#if 0
+
+        typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_<
+            BOOST_DEDUCED_TYPENAME pdalboost::mpl::and_<
+                pdalboost::is_unsigned<Target>,
+                pdalboost::mpl::or_<
+                    pdalboost::is_signed<Source>,
+                    pdalboost::is_float<Source>
+                >,
+                pdalboost::mpl::not_<
+                    pdalboost::is_same<Source, bool>
+                >,
+                pdalboost::mpl::not_<
+                    pdalboost::is_same<Target, bool>
+                >
+            >::type,
+            lexical_cast_dynamic_num_ignoring_minus<Target, Source>,
+            lexical_cast_dynamic_num_not_ignoring_minus<Target, Source>
+        >::type caster_type;
+        
+#endif
+
+        return caster_type::try_convert(arg, result);
+    }
+};
+
+}} // namespace pdalboost::detail
+
+#endif // BOOST_LEXICAL_CAST_DETAIL_CONVERTER_NUMERIC_HPP
+
diff --git a/vendor/pdalboost/boost/lexical_cast/detail/inf_nan.hpp b/vendor/pdalboost/boost/lexical_cast/detail/inf_nan.hpp
new file mode 100644
index 0000000..6311458
--- /dev/null
+++ b/vendor/pdalboost/boost/lexical_cast/detail/inf_nan.hpp
@@ -0,0 +1,197 @@
+// Copyright Kevlin Henney, 2000-2005.
+// Copyright Alexander Nasonov, 2006-2010.
+// Copyright Antony Polukhin, 2011-2014.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// what:  lexical_cast custom keyword cast
+// who:   contributed by Kevlin Henney,
+//        enhanced with contributions from Terje Slettebo,
+//        with additional fixes and suggestions from Gennaro Prota,
+//        Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov,
+//        Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann,
+//        Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters
+// when:  November 2000, March 2003, June 2005, June 2006, March 2011 - 2014
+
+#ifndef BOOST_LEXICAL_CAST_DETAIL_INF_NAN_HPP
+#define BOOST_LEXICAL_CAST_DETAIL_INF_NAN_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#   pragma once
+#endif
+
+#if defined(BOOST_NO_STRINGSTREAM) || defined(BOOST_NO_STD_WSTRING)
+#define BOOST_LCAST_NO_WCHAR_T
+#endif
+
+#include <cstddef>
+#include <cstring>
+#include <boost/limits.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/math/special_functions/sign.hpp>
+#include <boost/math/special_functions/fpclassify.hpp>
+
+#include <boost/lexical_cast/detail/lcast_char_constants.hpp>
+
+namespace pdalboost {
+    namespace detail
+    {
+        template <class CharT>
+        bool lc_iequal(const CharT* val, const CharT* lcase, const CharT* ucase, unsigned int len) BOOST_NOEXCEPT {
+            for( unsigned int i=0; i < len; ++i ) {
+                if ( val[i] != lcase[i] && val[i] != ucase[i] ) return false;
+            }
+
+            return true;
+        }
+
+        /* Returns true and sets the correct value if found NaN or Inf. */
+        template <class CharT, class T>
+        inline bool parse_inf_nan_impl(const CharT* begin, const CharT* end, T& value
+            , const CharT* lc_NAN, const CharT* lc_nan
+            , const CharT* lc_INFINITY, const CharT* lc_infinity
+            , const CharT opening_brace, const CharT closing_brace) BOOST_NOEXCEPT
+        {
+            using namespace std;
+            if (begin == end) return false;
+            const CharT minus = lcast_char_constants<CharT>::minus;
+            const CharT plus = lcast_char_constants<CharT>::plus;
+            const int inifinity_size = 8; // == sizeof("infinity") - 1
+
+            /* Parsing +/- */
+            bool const has_minus = (*begin == minus);
+            if (has_minus || *begin == plus) {
+                ++ begin;
+            }
+
+            if (end - begin < 3) return false;
+            if (lc_iequal(begin, lc_nan, lc_NAN, 3)) {
+                begin += 3;
+                if (end != begin) {
+                    /* It is 'nan(...)' or some bad input*/
+                    
+                    if (end - begin < 2) return false; // bad input
+                    -- end;
+                    if (*begin != opening_brace || *end != closing_brace) return false; // bad input
+                }
+
+                if( !has_minus ) value = std::numeric_limits<T>::quiet_NaN();
+                else value = (pdalboost::math::changesign) (std::numeric_limits<T>::quiet_NaN());
+                return true;
+            } else if (
+                ( /* 'INF' or 'inf' */
+                  end - begin == 3      // 3 == sizeof('inf') - 1
+                  && lc_iequal(begin, lc_infinity, lc_INFINITY, 3)
+                )
+                ||
+                ( /* 'INFINITY' or 'infinity' */
+                  end - begin == inifinity_size
+                  && lc_iequal(begin, lc_infinity, lc_INFINITY, inifinity_size)
+                )
+             )
+            {
+                if( !has_minus ) value = std::numeric_limits<T>::infinity();
+                else value = (pdalboost::math::changesign) (std::numeric_limits<T>::infinity());
+                return true;
+            }
+
+            return false;
+        }
+
+        template <class CharT, class T>
+        bool put_inf_nan_impl(CharT* begin, CharT*& end, const T& value
+                         , const CharT* lc_nan
+                         , const CharT* lc_infinity) BOOST_NOEXCEPT
+        {
+            using namespace std;
+            const CharT minus = lcast_char_constants<CharT>::minus;
+            if ((pdalboost::math::isnan)(value)) {
+                if ((pdalboost::math::signbit)(value)) {
+                    *begin = minus;
+                    ++ begin;
+                }
+
+                memcpy(begin, lc_nan, 3 * sizeof(CharT));
+                end = begin + 3;
+                return true;
+            } else if ((pdalboost::math::isinf)(value)) {
+                if ((pdalboost::math::signbit)(value)) {
+                    *begin = minus;
+                    ++ begin;
+                }
+
+                memcpy(begin, lc_infinity, 3 * sizeof(CharT));
+                end = begin + 3;
+                return true;
+            }
+
+            return false;
+        }
+
+
+#ifndef BOOST_LCAST_NO_WCHAR_T
+        template <class T>
+        bool parse_inf_nan(const wchar_t* begin, const wchar_t* end, T& value) BOOST_NOEXCEPT {
+            return parse_inf_nan_impl(begin, end, value
+                               , L"NAN", L"nan"
+                               , L"INFINITY", L"infinity"
+                               , L'(', L')');
+        }
+
+        template <class T>
+        bool put_inf_nan(wchar_t* begin, wchar_t*& end, const T& value) BOOST_NOEXCEPT {
+            return put_inf_nan_impl(begin, end, value, L"nan", L"infinity");
+        }
+
+#endif
+#if !defined(BOOST_NO_CXX11_CHAR16_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS)
+        template <class T>
+        bool parse_inf_nan(const char16_t* begin, const char16_t* end, T& value) BOOST_NOEXCEPT {
+            return parse_inf_nan_impl(begin, end, value
+                               , u"NAN", u"nan"
+                               , u"INFINITY", u"infinity"
+                               , u'(', u')');
+        }
+
+        template <class T>
+        bool put_inf_nan(char16_t* begin, char16_t*& end, const T& value) BOOST_NOEXCEPT {
+            return put_inf_nan_impl(begin, end, value, u"nan", u"infinity");
+        }
+#endif
+#if !defined(BOOST_NO_CXX11_CHAR32_T) && !defined(BOOST_NO_CXX11_UNICODE_LITERALS)
+        template <class T>
+        bool parse_inf_nan(const char32_t* begin, const char32_t* end, T& value) BOOST_NOEXCEPT {
+            return parse_inf_nan_impl(begin, end, value
+                               , U"NAN", U"nan"
+                               , U"INFINITY", U"infinity"
+                               , U'(', U')');
+        }
+
+        template <class T>
+        bool put_inf_nan(char32_t* begin, char32_t*& end, const T& value) BOOST_NOEXCEPT {
+            return put_inf_nan_impl(begin, end, value, U"nan", U"infinity");
+        }
+#endif
+
+        template <class CharT, class T>
+        bool parse_inf_nan(const CharT* begin, const CharT* end, T& value) BOOST_NOEXCEPT {
+            return parse_inf_nan_impl(begin, end, value
+                               , "NAN", "nan"
+                               , "INFINITY", "infinity"
+                               , '(', ')');
+        }
+
+        template <class CharT, class T>
+        bool put_inf_nan(CharT* begin, CharT*& end, const T& value) BOOST_NOEXCEPT {
+            return put_inf_nan_impl(begin, end, value, "nan", "infinity");
+        }
+    }
+} // namespace pdalboost
+
+#undef BOOST_LCAST_NO_WCHAR_T
+
+#endif // BOOST_LEXICAL_CAST_DETAIL_INF_NAN_HPP
+
diff --git a/vendor/pdalboost/boost/lexical_cast/detail/is_character.hpp b/vendor/pdalboost/boost/lexical_cast/detail/is_character.hpp
new file mode 100644
index 0000000..867cd8d
--- /dev/null
+++ b/vendor/pdalboost/boost/lexical_cast/detail/is_character.hpp
@@ -0,0 +1,58 @@
+// Copyright Kevlin Henney, 2000-2005.
+// Copyright Alexander Nasonov, 2006-2010.
+// Copyright Antony Polukhin, 2011-2014.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// what:  lexical_cast custom keyword cast
+// who:   contributed by Kevlin Henney,
+//        enhanced with contributions from Terje Slettebo,
+//        with additional fixes and suggestions from Gennaro Prota,
+//        Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov,
+//        Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann,
+//        Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters
+// when:  November 2000, March 2003, June 2005, June 2006, March 2011 - 2014
+
+#ifndef BOOST_LEXICAL_CAST_DETAIL_IS_CHARACTER_HPP
+#define BOOST_LEXICAL_CAST_DETAIL_IS_CHARACTER_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#   pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost {
+
+    namespace detail // is_character<...>
+    {
+        // returns true, if T is one of the character types
+        template < typename T >
+        struct is_character
+        {
+            typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::bool_<
+                    pdalboost::is_same< T, char >::value ||
+                    #if !defined(BOOST_NO_STRINGSTREAM) && !defined(BOOST_NO_STD_WSTRING)
+                        pdalboost::is_same< T, wchar_t >::value ||
+                    #endif
+                    #ifndef BOOST_NO_CXX11_CHAR16_T
+                        pdalboost::is_same< T, char16_t >::value ||
+                    #endif
+                    #ifndef BOOST_NO_CXX11_CHAR32_T
+                        pdalboost::is_same< T, char32_t >::value ||
+                    #endif
+                   	pdalboost::is_same< T, unsigned char >::value ||
+                   	pdalboost::is_same< T, signed char >::value
+            > type;
+
+            BOOST_STATIC_CONSTANT(bool, value = (type::value) );
+        };
+    }
+}
+
+#endif // BOOST_LEXICAL_CAST_DETAIL_IS_CHARACTER_HPP
+
diff --git a/vendor/pdalboost/boost/lexical_cast/detail/lcast_char_constants.hpp b/vendor/pdalboost/boost/lexical_cast/detail/lcast_char_constants.hpp
new file mode 100644
index 0000000..f09793c
--- /dev/null
+++ b/vendor/pdalboost/boost/lexical_cast/detail/lcast_char_constants.hpp
@@ -0,0 +1,46 @@
+// Copyright Kevlin Henney, 2000-2005.
+// Copyright Alexander Nasonov, 2006-2010.
+// Copyright Antony Polukhin, 2011-2014.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// what:  lexical_cast custom keyword cast
+// who:   contributed by Kevlin Henney,
+//        enhanced with contributions from Terje Slettebo,
+//        with additional fixes and suggestions from Gennaro Prota,
+//        Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov,
+//        Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann,
+//        Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters
+// when:  November 2000, March 2003, June 2005, June 2006, March 2011 - 2014
+
+#ifndef BOOST_LEXICAL_CAST_DETAIL_LCAST_CHAR_CONSTANTS_HPP
+#define BOOST_LEXICAL_CAST_DETAIL_LCAST_CHAR_CONSTANTS_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#   pragma once
+#endif
+
+namespace pdalboost 
+{
+    namespace detail // '0', '-', '+', 'e', 'E' and '.' constants
+    {
+        template < typename Char >
+        struct lcast_char_constants {
+            // We check in tests assumption that static casted character is
+            // equal to correctly written C++ literal: U'0' == static_cast<char32_t>('0')
+            BOOST_STATIC_CONSTANT(Char, zero  = static_cast<Char>('0'));
+            BOOST_STATIC_CONSTANT(Char, minus = static_cast<Char>('-'));
+            BOOST_STATIC_CONSTANT(Char, plus = static_cast<Char>('+'));
+            BOOST_STATIC_CONSTANT(Char, lowercase_e = static_cast<Char>('e'));
+            BOOST_STATIC_CONSTANT(Char, capital_e = static_cast<Char>('E'));
+            BOOST_STATIC_CONSTANT(Char, c_decimal_separator = static_cast<Char>('.'));
+        };
+    }
+} // namespace pdalboost
+
+
+#endif // BOOST_LEXICAL_CAST_DETAIL_LCAST_CHAR_CONSTANTS_HPP
+
diff --git a/vendor/pdalboost/boost/lexical_cast/detail/lcast_unsigned_converters.hpp b/vendor/pdalboost/boost/lexical_cast/detail/lcast_unsigned_converters.hpp
new file mode 100644
index 0000000..b32af2b
--- /dev/null
+++ b/vendor/pdalboost/boost/lexical_cast/detail/lcast_unsigned_converters.hpp
@@ -0,0 +1,294 @@
+// Copyright Kevlin Henney, 2000-2005.
+// Copyright Alexander Nasonov, 2006-2010.
+// Copyright Antony Polukhin, 2011-2014.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// what:  lexical_cast custom keyword cast
+// who:   contributed by Kevlin Henney,
+//        enhanced with contributions from Terje Slettebo,
+//        with additional fixes and suggestions from Gennaro Prota,
+//        Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov,
+//        Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann,
+//        Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters
+// when:  November 2000, March 2003, June 2005, June 2006, March 2011 - 2014
+
+#ifndef BOOST_LEXICAL_CAST_DETAIL_LCAST_UNSIGNED_CONVERTERS_HPP
+#define BOOST_LEXICAL_CAST_DETAIL_LCAST_UNSIGNED_CONVERTERS_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#   pragma once
+#endif
+
+#include <climits>
+#include <cstddef>
+#include <string>
+#include <cstring>
+#include <cstdio>
+#include <boost/limits.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/detail/workaround.hpp>
+
+
+#ifndef BOOST_NO_STD_LOCALE
+#   include <locale>
+#else
+#   ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE
+        // Getting error at this point means, that your STL library is old/lame/misconfigured.
+        // If nothing can be done with STL library, define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE,
+        // but beware: lexical_cast will understand only 'C' locale delimeters and thousands
+        // separators.
+#       error "Unable to use <locale> header. Define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE to force "
+#       error "pdalboost::lexical_cast to use only 'C' locale during conversions."
+#   endif
+#endif
+
+#include <boost/lexical_cast/detail/lcast_char_constants.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <boost/type_traits/is_signed.hpp>
+#include <boost/noncopyable.hpp>
+
+namespace pdalboost 
+{
+    namespace detail // lcast_to_unsigned
+    {
+        template<class T>
+        inline
+        BOOST_DEDUCED_TYPENAME pdalboost::make_unsigned<T>::type lcast_to_unsigned(const T value) BOOST_NOEXCEPT {
+            typedef BOOST_DEDUCED_TYPENAME pdalboost::make_unsigned<T>::type result_type;
+            return value < 0 
+                ? static_cast<result_type>(0u - static_cast<result_type>(value)) 
+                : static_cast<result_type>(value);
+        }
+    }
+
+    namespace detail // lcast_put_unsigned
+    {
+        template <class Traits, class T, class CharT>
+        class lcast_put_unsigned: pdalboost::noncopyable {
+            typedef BOOST_DEDUCED_TYPENAME Traits::int_type int_type;
+            BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_c<
+                    (sizeof(int_type) > sizeof(T))
+                    , int_type
+                    , T
+            >::type         m_value;
+            CharT*          m_finish;
+            CharT    const  m_czero;
+            int_type const  m_zero;
+
+        public:
+            lcast_put_unsigned(const T n_param, CharT* finish) BOOST_NOEXCEPT 
+                : m_value(n_param), m_finish(finish)
+                , m_czero(lcast_char_constants<CharT>::zero), m_zero(Traits::to_int_type(m_czero))
+            {
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+                BOOST_STATIC_ASSERT(!std::numeric_limits<T>::is_signed);
+#endif
+            }
+
+            CharT* convert() {
+#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE
+                std::locale loc;
+                if (loc == std::locale::classic()) {
+                    return main_convert_loop();
+                }
+
+                typedef std::numpunct<CharT> numpunct;
+                numpunct const& np = BOOST_USE_FACET(numpunct, loc);
+                std::string const grouping = np.grouping();
+                std::string::size_type const grouping_size = grouping.size();
+
+                if (!grouping_size || grouping[0] <= 0) {
+                    return main_convert_loop();
+                }
+
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+                // Check that ulimited group is unreachable:
+                BOOST_STATIC_ASSERT(std::numeric_limits<T>::digits10 < CHAR_MAX);
+#endif
+                CharT const thousands_sep = np.thousands_sep();
+                std::string::size_type group = 0; // current group number
+                char last_grp_size = grouping[0];
+                char left = last_grp_size;
+
+                do {
+                    if (left == 0) {
+                        ++group;
+                        if (group < grouping_size) {
+                            char const grp_size = grouping[group];
+                            last_grp_size = (grp_size <= 0 ? static_cast<char>(CHAR_MAX) : grp_size);
+                        }
+
+                        left = last_grp_size;
+                        --m_finish;
+                        Traits::assign(*m_finish, thousands_sep);
+                    }
+
+                    --left;
+                } while (main_convert_iteration());
+
+                return m_finish;
+#else
+                return main_convert_loop();
+#endif
+            }
+
+        private:
+            inline bool main_convert_iteration() BOOST_NOEXCEPT {
+                --m_finish;
+                int_type const digit = static_cast<int_type>(m_value % 10U);
+                Traits::assign(*m_finish, Traits::to_char_type(m_zero + digit));
+                m_value /= 10;
+                return !!m_value; // suppressing warnings
+            }
+
+            inline CharT* main_convert_loop() BOOST_NOEXCEPT {
+                while (main_convert_iteration());
+                return m_finish;
+            }
+        };
+    }
+
+    namespace detail // lcast_ret_unsigned
+    {
+        template <class Traits, class T, class CharT>
+        class lcast_ret_unsigned: pdalboost::noncopyable {
+            bool m_multiplier_overflowed;
+            T m_multiplier;
+            T& m_value;
+            const CharT* const m_begin;
+            const CharT* m_end;
+    
+        public:
+            lcast_ret_unsigned(T& value, const CharT* const begin, const CharT* end) BOOST_NOEXCEPT
+                : m_multiplier_overflowed(false), m_multiplier(1), m_value(value), m_begin(begin), m_end(end)
+            {
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+                BOOST_STATIC_ASSERT(!std::numeric_limits<T>::is_signed);
+
+                // GCC when used with flag -std=c++0x may not have std::numeric_limits
+                // specializations for __int128 and unsigned __int128 types.
+                // Try compilation with -std=gnu++0x or -std=gnu++11.
+                //
+                // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40856
+                BOOST_STATIC_ASSERT_MSG(std::numeric_limits<T>::is_specialized,
+                    "std::numeric_limits are not specialized for integral type passed to pdalboost::lexical_cast"
+                );
+#endif
+            }
+
+            inline bool convert() {
+                CharT const czero = lcast_char_constants<CharT>::zero;
+                --m_end;
+                m_value = static_cast<T>(0);
+
+                if (m_begin > m_end || *m_end < czero || *m_end >= czero + 10)
+                    return false;
+                m_value = static_cast<T>(*m_end - czero);
+                --m_end;
+
+#ifdef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE
+                return main_convert_loop();
+#else
+                std::locale loc;
+                if (loc == std::locale::classic()) {
+                    return main_convert_loop();
+                }
+
+                typedef std::numpunct<CharT> numpunct;
+                numpunct const& np = BOOST_USE_FACET(numpunct, loc);
+                std::string const& grouping = np.grouping();
+                std::string::size_type const grouping_size = grouping.size();
+
+                /* According to Programming languages - C++
+                 * we MUST check for correct grouping
+                 */
+                if (!grouping_size || grouping[0] <= 0) {
+                    return main_convert_loop();
+                }
+
+                unsigned char current_grouping = 0;
+                CharT const thousands_sep = np.thousands_sep();
+                char remained = static_cast<char>(grouping[current_grouping] - 1);
+
+                for (;m_end >= m_begin; --m_end)
+                {
+                    if (remained) {
+                        if (!main_convert_iteration()) {
+                            return false;
+                        }
+                        --remained;
+                    } else {
+                        if ( !Traits::eq(*m_end, thousands_sep) ) //|| begin == end ) return false;
+                        {
+                            /*
+                             * According to Programming languages - C++
+                             * Digit grouping is checked. That is, the positions of discarded
+                             * separators is examined for consistency with
+                             * use_facet<numpunct<charT> >(loc ).grouping()
+                             *
+                             * BUT what if there is no separators at all and grouping()
+                             * is not empty? Well, we have no extraced separators, so we
+                             * won`t check them for consistency. This will allow us to
+                             * work with "C" locale from other locales
+                             */
+                            return main_convert_loop();
+                        } else {
+                            if (m_begin == m_end) return false;
+                            if (current_grouping < grouping_size - 1) ++current_grouping;
+                            remained = grouping[current_grouping];
+                        }
+                    }
+                } /*for*/
+
+                return true;
+#endif
+            }
+
+        private:
+            // Iteration that does not care about grouping/separators and assumes that all 
+            // input characters are digits
+            inline bool main_convert_iteration() BOOST_NOEXCEPT {
+                CharT const czero = lcast_char_constants<CharT>::zero;
+                T const maxv = (std::numeric_limits<T>::max)();
+
+                m_multiplier_overflowed = m_multiplier_overflowed || (maxv/10 < m_multiplier);
+                m_multiplier = static_cast<T>(m_multiplier * 10);
+
+                T const dig_value = static_cast<T>(*m_end - czero);
+                T const new_sub_value = static_cast<T>(m_multiplier * dig_value);
+
+                // We must correctly handle situations like `000000000000000000000000000001`.
+                // So we take care of overflow only if `dig_value` is not '0'.
+                if (*m_end < czero || *m_end >= czero + 10  // checking for correct digit
+                    || (dig_value && (                      // checking for overflow of ... 
+                        m_multiplier_overflowed                             // ... multiplier
+                        || static_cast<T>(maxv / dig_value) < m_multiplier  // ... subvalue
+                        || static_cast<T>(maxv - new_sub_value) < m_value   // ... whole expression
+                    ))
+                ) return false;
+
+                m_value = static_cast<T>(m_value + new_sub_value);
+                
+                return true;
+            }
+
+            bool main_convert_loop() BOOST_NOEXCEPT {
+                for ( ; m_end >= m_begin; --m_end) {
+                    if (!main_convert_iteration()) {
+                        return false;
+                    }
+                }
+            
+                return true;
+            }
+        };
+    }
+} // namespace pdalboost
+
+#endif // BOOST_LEXICAL_CAST_DETAIL_LCAST_UNSIGNED_CONVERTERS_HPP
+
diff --git a/vendor/pdalboost/boost/lexical_cast/detail/widest_char.hpp b/vendor/pdalboost/boost/lexical_cast/detail/widest_char.hpp
new file mode 100644
index 0000000..a63d229
--- /dev/null
+++ b/vendor/pdalboost/boost/lexical_cast/detail/widest_char.hpp
@@ -0,0 +1,40 @@
+// Copyright Kevlin Henney, 2000-2005.
+// Copyright Alexander Nasonov, 2006-2010.
+// Copyright Antony Polukhin, 2011-2014.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// what:  lexical_cast custom keyword cast
+// who:   contributed by Kevlin Henney,
+//        enhanced with contributions from Terje Slettebo,
+//        with additional fixes and suggestions from Gennaro Prota,
+//        Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov,
+//        Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann,
+//        Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters
+// when:  November 2000, March 2003, June 2005, June 2006, March 2011 - 2014
+
+#ifndef BOOST_LEXICAL_CAST_DETAIL_WIDEST_CHAR_HPP
+#define BOOST_LEXICAL_CAST_DETAIL_WIDEST_CHAR_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#   pragma once
+#endif
+
+namespace pdalboost { namespace detail {
+
+    template <typename TargetChar, typename SourceChar>
+    struct widest_char {
+        typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_c<
+            (sizeof(TargetChar) > sizeof(SourceChar))
+            , TargetChar
+            , SourceChar
+        >::type type;
+    };
+
+}} // namespace pdalboost::detail
+
+#endif // BOOST_LEXICAL_CAST_DETAIL_WIDEST_CHAR_HPP
+
diff --git a/vendor/pdalboost/boost/lexical_cast/try_lexical_convert.hpp b/vendor/pdalboost/boost/lexical_cast/try_lexical_convert.hpp
new file mode 100644
index 0000000..7371ec4
--- /dev/null
+++ b/vendor/pdalboost/boost/lexical_cast/try_lexical_convert.hpp
@@ -0,0 +1,212 @@
+// Copyright Kevlin Henney, 2000-2005.
+// Copyright Alexander Nasonov, 2006-2010.
+// Copyright Antony Polukhin, 2011-2014.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// what:  lexical_cast custom keyword cast
+// who:   contributed by Kevlin Henney,
+//        enhanced with contributions from Terje Slettebo,
+//        with additional fixes and suggestions from Gennaro Prota,
+//        Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov,
+//        Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann,
+//        Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters
+// when:  November 2000, March 2003, June 2005, June 2006, March 2011 - 2014
+
+#ifndef BOOST_LEXICAL_CAST_TRY_LEXICAL_CONVERT_HPP
+#define BOOST_LEXICAL_CAST_TRY_LEXICAL_CONVERT_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#   pragma once
+#endif
+
+#if defined(__clang__) || (defined(__GNUC__) && \
+    !(defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)) && \
+    (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)))
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wuninitialized"
+#endif
+
+#include <string>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_arithmetic.hpp>
+
+#include <boost/lexical_cast/detail/is_character.hpp>
+#include <boost/lexical_cast/detail/converter_numeric.hpp>
+#include <boost/lexical_cast/detail/converter_lexical.hpp>
+
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/container/container_fwd.hpp>
+
+namespace pdalboost {
+    namespace detail
+    {
+        template<typename T>
+        struct is_stdstring
+            : pdalboost::false_type
+        {};
+
+        template<typename CharT, typename Traits, typename Alloc>
+        struct is_stdstring< std::basic_string<CharT, Traits, Alloc> >
+            : pdalboost::true_type
+        {};
+
+        template<typename CharT, typename Traits, typename Alloc>
+        struct is_stdstring< pdalboost::container::basic_string<CharT, Traits, Alloc> >
+            : pdalboost::true_type
+        {};
+
+        template<typename Target, typename Source>
+        struct is_arithmetic_and_not_xchars
+        {
+            typedef pdalboost::mpl::bool_<
+                    !(pdalboost::detail::is_character<Target>::value) &&
+                    !(pdalboost::detail::is_character<Source>::value) &&
+                    pdalboost::is_arithmetic<Source>::value &&
+                    pdalboost::is_arithmetic<Target>::value
+                > type;
+        
+            BOOST_STATIC_CONSTANT(bool, value = (
+                type::value
+            ));
+        };
+
+        /*
+         * is_xchar_to_xchar<Target, Source>::value is true, 
+         * Target and Souce are char types of the same size 1 (char, signed char, unsigned char).
+         */
+        template<typename Target, typename Source>
+        struct is_xchar_to_xchar 
+        {
+            typedef pdalboost::mpl::bool_<
+                     sizeof(Source) == sizeof(Target) &&
+                     sizeof(Source) == sizeof(char) &&
+                     pdalboost::detail::is_character<Target>::value &&
+                     pdalboost::detail::is_character<Source>::value
+                > type;
+                
+            BOOST_STATIC_CONSTANT(bool, value = (
+                type::value
+            ));
+        };
+
+        template<typename Target, typename Source>
+        struct is_char_array_to_stdstring
+            : pdalboost::false_type
+        {};
+
+        template<typename CharT, typename Traits, typename Alloc>
+        struct is_char_array_to_stdstring< std::basic_string<CharT, Traits, Alloc>, CharT* >
+            : pdalboost::true_type
+        {};
+
+        template<typename CharT, typename Traits, typename Alloc>
+        struct is_char_array_to_stdstring< std::basic_string<CharT, Traits, Alloc>, const CharT* >
+            : pdalboost::true_type
+        {};
+
+        template<typename CharT, typename Traits, typename Alloc>
+        struct is_char_array_to_stdstring< pdalboost::container::basic_string<CharT, Traits, Alloc>, CharT* >
+            : pdalboost::true_type
+        {};
+
+        template<typename CharT, typename Traits, typename Alloc>
+        struct is_char_array_to_stdstring< pdalboost::container::basic_string<CharT, Traits, Alloc>, const CharT* >
+            : pdalboost::true_type
+        {};
+
+        template <typename Target, typename Source>
+        struct copy_converter_impl
+        {
+// MSVC fail to forward an array (DevDiv#555157 "SILENT BAD CODEGEN triggered by perfect forwarding",
+// fixed in 2013 RTM).
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && (!defined(BOOST_MSVC) || BOOST_MSVC >= 1800)
+            template <class T>
+            static inline bool try_convert(T&& arg, Target& result) {
+                result = static_cast<T&&>(arg); // eqaul to `result = std::forward<T>(arg);`
+                return true;
+            }
+#else
+            static inline bool try_convert(const Source& arg, Target& result) {
+                result = arg;
+                return true;
+            }
+#endif
+        };
+    }
+
+    namespace conversion { namespace detail {
+
+        template <typename Target, typename Source>
+        inline bool try_lexical_convert(const Source& arg, Target& result)
+        {
+            typedef BOOST_DEDUCED_TYPENAME pdalboost::detail::array_to_pointer_decay<Source>::type src;
+
+            typedef pdalboost::mpl::bool_<
+                pdalboost::detail::is_xchar_to_xchar<Target, src >::value ||
+                pdalboost::detail::is_char_array_to_stdstring<Target, src >::value ||
+                (
+                     pdalboost::is_same<Target, src >::value &&
+                     pdalboost::detail::is_stdstring<Target >::value
+                ) ||
+                (
+                     pdalboost::is_same<Target, src >::value &&
+                     pdalboost::detail::is_character<Target >::value
+                )
+            > shall_we_copy_t;
+
+            typedef pdalboost::detail::is_arithmetic_and_not_xchars<Target, src >
+                shall_we_copy_with_dynamic_check_t;
+
+            // We do evaluate second `if_` lazily to avoid unnecessary instantiations
+            // of `shall_we_copy_with_dynamic_check_t` and improve compilation times.
+            typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_c<
+                shall_we_copy_t::value,
+                pdalboost::mpl::identity<pdalboost::detail::copy_converter_impl<Target, src > >,
+                pdalboost::mpl::if_<
+                     shall_we_copy_with_dynamic_check_t,
+                     pdalboost::detail::dynamic_num_converter_impl<Target, src >,
+                     pdalboost::detail::lexical_converter_impl<Target, src >
+                >
+            >::type caster_type_lazy;
+
+            typedef BOOST_DEDUCED_TYPENAME caster_type_lazy::type caster_type;
+
+            return caster_type::try_convert(arg, result);
+        }
+
+        template <typename Target, typename CharacterT>
+        inline bool try_lexical_convert(const CharacterT* chars, std::size_t count, Target& result)
+        {
+            BOOST_STATIC_ASSERT_MSG(
+                pdalboost::detail::is_character<CharacterT>::value,
+                "This overload of try_lexical_convert is meant to be used only with arrays of characters."
+            );
+            return ::pdalboost::conversion::detail::try_lexical_convert(
+                ::pdalboost::iterator_range<const CharacterT*>(chars, chars + count), result
+            );
+        }
+
+    }} // namespace conversion::detail
+
+    namespace conversion {
+        // ADL barrier
+        using ::pdalboost::conversion::detail::try_lexical_convert;
+    }
+
+} // namespace pdalboost
+
+#if defined(__clang__) || (defined(__GNUC__) && \
+    !(defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)) && \
+    (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)))
+#pragma GCC diagnostic pop
+#endif
+
+#endif // BOOST_LEXICAL_CAST_TRY_LEXICAL_CONVERT_HPP
+
diff --git a/vendor/pdalboost/boost/limits.hpp b/vendor/pdalboost/boost/limits.hpp
new file mode 100644
index 0000000..2bcac2e
--- /dev/null
+++ b/vendor/pdalboost/boost/limits.hpp
@@ -0,0 +1,146 @@
+
+//  (C) Copyright John maddock 1999. 
+//  (C) David Abrahams 2002.  Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// use this header as a workaround for missing <limits>
+
+//  See http://www.boost.org/libs/compatibility/index.html for documentation.
+
+#ifndef BOOST_LIMITS
+#define BOOST_LIMITS
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_LIMITS
+#  error "There is no std::numeric_limits suppport available."
+#else
+# include <limits>
+#endif
+
+#if (defined(BOOST_HAS_LONG_LONG) && defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS)) \
+      || (defined(BOOST_HAS_MS_INT64) && defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS))
+// Add missing specializations for numeric_limits:
+#ifdef BOOST_HAS_MS_INT64
+#  define BOOST_LLT __int64
+#  define BOOST_ULLT unsigned __int64
+#else
+#  define BOOST_LLT  ::pdalboost::long_long_type
+#  define BOOST_ULLT  ::pdalboost::ulong_long_type
+#endif
+
+#include <climits>  // for CHAR_BIT
+
+namespace std
+{
+  template<>
+  class numeric_limits<BOOST_LLT> 
+  {
+   public:
+
+      BOOST_STATIC_CONSTANT(bool, is_specialized = true);
+#ifdef BOOST_HAS_MS_INT64
+      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0x8000000000000000i64; }
+      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0x7FFFFFFFFFFFFFFFi64; }
+#elif defined(LLONG_MAX)
+      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LLONG_MIN; }
+      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LLONG_MAX; }
+#elif defined(LONGLONG_MAX)
+      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LONGLONG_MIN; }
+      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LONGLONG_MAX; }
+#else
+      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 1LL << (sizeof(BOOST_LLT) * CHAR_BIT - 1); }
+      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ~(min)(); }
+#endif
+      BOOST_STATIC_CONSTANT(int, digits = sizeof(BOOST_LLT) * CHAR_BIT -1);
+      BOOST_STATIC_CONSTANT(int, digits10 = (CHAR_BIT * sizeof (BOOST_LLT) - 1) * 301L / 1000);
+      BOOST_STATIC_CONSTANT(bool, is_signed = true);
+      BOOST_STATIC_CONSTANT(bool, is_integer = true);
+      BOOST_STATIC_CONSTANT(bool, is_exact = true);
+      BOOST_STATIC_CONSTANT(int, radix = 2);
+      static BOOST_LLT epsilon() throw() { return 0; };
+      static BOOST_LLT round_error() throw() { return 0; };
+
+      BOOST_STATIC_CONSTANT(int, min_exponent = 0);
+      BOOST_STATIC_CONSTANT(int, min_exponent10 = 0);
+      BOOST_STATIC_CONSTANT(int, max_exponent = 0);
+      BOOST_STATIC_CONSTANT(int, max_exponent10 = 0);
+
+      BOOST_STATIC_CONSTANT(bool, has_infinity = false);
+      BOOST_STATIC_CONSTANT(bool, has_quiet_NaN = false);
+      BOOST_STATIC_CONSTANT(bool, has_signaling_NaN = false);
+      BOOST_STATIC_CONSTANT(bool, has_denorm = false);
+      BOOST_STATIC_CONSTANT(bool, has_denorm_loss = false);
+      static BOOST_LLT infinity() throw() { return 0; };
+      static BOOST_LLT quiet_NaN() throw() { return 0; };
+      static BOOST_LLT signaling_NaN() throw() { return 0; };
+      static BOOST_LLT denorm_min() throw() { return 0; };
+
+      BOOST_STATIC_CONSTANT(bool, is_iec559 = false);
+      BOOST_STATIC_CONSTANT(bool, is_bounded = true);
+      BOOST_STATIC_CONSTANT(bool, is_modulo = true);
+
+      BOOST_STATIC_CONSTANT(bool, traps = false);
+      BOOST_STATIC_CONSTANT(bool, tinyness_before = false);
+      BOOST_STATIC_CONSTANT(float_round_style, round_style = round_toward_zero);
+      
+  };
+
+  template<>
+  class numeric_limits<BOOST_ULLT> 
+  {
+   public:
+
+      BOOST_STATIC_CONSTANT(bool, is_specialized = true);
+#ifdef BOOST_HAS_MS_INT64
+      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0ui64; }
+      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0xFFFFFFFFFFFFFFFFui64; }
+#elif defined(ULLONG_MAX) && defined(ULLONG_MIN)
+      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULLONG_MIN; }
+      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULLONG_MAX; }
+#elif defined(ULONGLONG_MAX) && defined(ULONGLONG_MIN)
+      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULONGLONG_MIN; }
+      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULONGLONG_MAX; }
+#else
+      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0uLL; }
+      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ~0uLL; }
+#endif
+      BOOST_STATIC_CONSTANT(int, digits = sizeof(BOOST_LLT) * CHAR_BIT);
+      BOOST_STATIC_CONSTANT(int, digits10 = (CHAR_BIT * sizeof (BOOST_LLT)) * 301L / 1000);
+      BOOST_STATIC_CONSTANT(bool, is_signed = false);
+      BOOST_STATIC_CONSTANT(bool, is_integer = true);
+      BOOST_STATIC_CONSTANT(bool, is_exact = true);
+      BOOST_STATIC_CONSTANT(int, radix = 2);
+      static BOOST_ULLT epsilon() throw() { return 0; };
+      static BOOST_ULLT round_error() throw() { return 0; };
+
+      BOOST_STATIC_CONSTANT(int, min_exponent = 0);
+      BOOST_STATIC_CONSTANT(int, min_exponent10 = 0);
+      BOOST_STATIC_CONSTANT(int, max_exponent = 0);
+      BOOST_STATIC_CONSTANT(int, max_exponent10 = 0);
+
+      BOOST_STATIC_CONSTANT(bool, has_infinity = false);
+      BOOST_STATIC_CONSTANT(bool, has_quiet_NaN = false);
+      BOOST_STATIC_CONSTANT(bool, has_signaling_NaN = false);
+      BOOST_STATIC_CONSTANT(bool, has_denorm = false);
+      BOOST_STATIC_CONSTANT(bool, has_denorm_loss = false);
+      static BOOST_ULLT infinity() throw() { return 0; };
+      static BOOST_ULLT quiet_NaN() throw() { return 0; };
+      static BOOST_ULLT signaling_NaN() throw() { return 0; };
+      static BOOST_ULLT denorm_min() throw() { return 0; };
+
+      BOOST_STATIC_CONSTANT(bool, is_iec559 = false);
+      BOOST_STATIC_CONSTANT(bool, is_bounded = true);
+      BOOST_STATIC_CONSTANT(bool, is_modulo = true);
+
+      BOOST_STATIC_CONSTANT(bool, traps = false);
+      BOOST_STATIC_CONSTANT(bool, tinyness_before = false);
+      BOOST_STATIC_CONSTANT(float_round_style, round_style = round_toward_zero);
+      
+  };
+}
+#endif 
+
+#endif
+
diff --git a/vendor/pdalboost/boost/make_shared.hpp b/vendor/pdalboost/boost/make_shared.hpp
new file mode 100644
index 0000000..c04938f
--- /dev/null
+++ b/vendor/pdalboost/boost/make_shared.hpp
@@ -0,0 +1,17 @@
+#ifndef BOOST_MAKE_SHARED_HPP_INCLUDED
+#define BOOST_MAKE_SHARED_HPP_INCLUDED
+
+//  make_shared.hpp
+//
+//  Copyright (c) 2007, 2008 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  See http://www.boost.org/libs/smart_ptr/make_shared.html
+//  for documentation.
+
+#include <boost/smart_ptr/make_shared.hpp>
+
+#endif // #ifndef BOOST_MAKE_SHARED_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/math/policies/policy.hpp b/vendor/pdalboost/boost/math/policies/policy.hpp
new file mode 100644
index 0000000..21f6dad
--- /dev/null
+++ b/vendor/pdalboost/boost/math/policies/policy.hpp
@@ -0,0 +1,1042 @@
+//  Copyright John Maddock 2007.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_MATH_POLICY_HPP
+#define BOOST_MATH_POLICY_HPP
+
+#include <boost/mpl/list.hpp>
+#include <boost/mpl/contains.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/find_if.hpp>
+#include <boost/mpl/remove_if.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/push_back.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/comparison.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/assert.hpp>
+#include <boost/math/tools/config.hpp>
+#include <limits>
+// Sadly we do need the .h versions of these to be sure of getting
+// FLT_MANT_DIG etc.
+#include <limits.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <math.h>
+
+namespace pdalboost{ namespace math{ 
+
+namespace tools{
+
+template <class T>
+BOOST_MATH_CONSTEXPR int digits(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) BOOST_NOEXCEPT;
+template <class T>
+BOOST_MATH_CONSTEXPR T epsilon(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) BOOST_MATH_NOEXCEPT(T);
+
+}
+
+namespace policies{
+
+//
+// Define macros for our default policies, if they're not defined already:
+//
+// Special cases for exceptions disabled first:
+//
+#ifdef BOOST_NO_EXCEPTIONS
+#  ifndef BOOST_MATH_DOMAIN_ERROR_POLICY
+#    define BOOST_MATH_DOMAIN_ERROR_POLICY errno_on_error
+#  endif
+#  ifndef BOOST_MATH_POLE_ERROR_POLICY
+#     define BOOST_MATH_POLE_ERROR_POLICY errno_on_error
+#  endif
+#  ifndef BOOST_MATH_OVERFLOW_ERROR_POLICY
+#     define BOOST_MATH_OVERFLOW_ERROR_POLICY errno_on_error
+#  endif
+#  ifndef BOOST_MATH_EVALUATION_ERROR_POLICY
+#     define BOOST_MATH_EVALUATION_ERROR_POLICY errno_on_error
+#  endif
+#  ifndef BOOST_MATH_ROUNDING_ERROR_POLICY
+#     define BOOST_MATH_ROUNDING_ERROR_POLICY errno_on_error
+#  endif
+#endif
+//
+// Then the regular cases:
+//
+#ifndef BOOST_MATH_DOMAIN_ERROR_POLICY
+#define BOOST_MATH_DOMAIN_ERROR_POLICY throw_on_error
+#endif
+#ifndef BOOST_MATH_POLE_ERROR_POLICY
+#define BOOST_MATH_POLE_ERROR_POLICY throw_on_error
+#endif
+#ifndef BOOST_MATH_OVERFLOW_ERROR_POLICY
+#define BOOST_MATH_OVERFLOW_ERROR_POLICY throw_on_error
+#endif
+#ifndef BOOST_MATH_EVALUATION_ERROR_POLICY
+#define BOOST_MATH_EVALUATION_ERROR_POLICY throw_on_error
+#endif
+#ifndef BOOST_MATH_ROUNDING_ERROR_POLICY
+#define BOOST_MATH_ROUNDING_ERROR_POLICY throw_on_error
+#endif
+#ifndef BOOST_MATH_UNDERFLOW_ERROR_POLICY
+#define BOOST_MATH_UNDERFLOW_ERROR_POLICY ignore_error
+#endif
+#ifndef BOOST_MATH_DENORM_ERROR_POLICY
+#define BOOST_MATH_DENORM_ERROR_POLICY ignore_error
+#endif
+#ifndef BOOST_MATH_INDETERMINATE_RESULT_ERROR_POLICY
+#define BOOST_MATH_INDETERMINATE_RESULT_ERROR_POLICY ignore_error
+#endif
+#ifndef BOOST_MATH_DIGITS10_POLICY
+#define BOOST_MATH_DIGITS10_POLICY 0
+#endif
+#ifndef BOOST_MATH_PROMOTE_FLOAT_POLICY
+#define BOOST_MATH_PROMOTE_FLOAT_POLICY true
+#endif
+#ifndef BOOST_MATH_PROMOTE_DOUBLE_POLICY
+#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+#define BOOST_MATH_PROMOTE_DOUBLE_POLICY false
+#else
+#define BOOST_MATH_PROMOTE_DOUBLE_POLICY true
+#endif
+#endif
+#ifndef BOOST_MATH_DISCRETE_QUANTILE_POLICY
+#define BOOST_MATH_DISCRETE_QUANTILE_POLICY integer_round_outwards
+#endif
+#ifndef BOOST_MATH_ASSERT_UNDEFINED_POLICY
+#define BOOST_MATH_ASSERT_UNDEFINED_POLICY true
+#endif
+#ifndef BOOST_MATH_MAX_SERIES_ITERATION_POLICY
+#define BOOST_MATH_MAX_SERIES_ITERATION_POLICY 1000000
+#endif
+#ifndef BOOST_MATH_MAX_ROOT_ITERATION_POLICY
+#define BOOST_MATH_MAX_ROOT_ITERATION_POLICY 200
+#endif
+
+#if !defined(__BORLANDC__)
+#define BOOST_MATH_META_INT(type, name, Default)\
+   template <type N = Default> struct name : public pdalboost::mpl::int_<N>{};\
+   namespace detail{\
+   template <type N>\
+   char test_is_valid_arg(const name<N>*);\
+   char test_is_default_arg(const name<Default>*);\
+   template <class T> struct is_##name##_imp\
+   {\
+      template <type N> static char test(const name<N>*);\
+      static double test(...);\
+      BOOST_STATIC_CONSTANT(bool, value = sizeof(test(static_cast<T*>(0))) == 1);\
+   };\
+   }\
+   template <class T> struct is_##name : public pdalboost::mpl::bool_< ::pdalboost::math::policies::detail::is_##name##_imp<T>::value>{};
+
+#define BOOST_MATH_META_BOOL(name, Default)\
+   template <bool N = Default> struct name : public pdalboost::mpl::bool_<N>{};\
+   namespace detail{\
+   template <bool N>\
+   char test_is_valid_arg(const name<N>*);\
+   char test_is_default_arg(const name<Default>*);\
+   template <class T> struct is_##name##_imp\
+   {\
+      template <bool N> static char test(const name<N>*);\
+      static double test(...);\
+      BOOST_STATIC_CONSTANT(bool, value = sizeof(test(static_cast<T*>(0))) == 1);\
+   };\
+   }\
+   template <class T> struct is_##name : public pdalboost::mpl::bool_< ::pdalboost::math::policies::detail::is_##name##_imp<T>::value>{};
+#else
+#define BOOST_MATH_META_INT(Type, name, Default)\
+   template <Type N = Default> struct name : public pdalboost::mpl::int_<N>{};\
+   namespace detail{\
+   template <Type N>\
+   char test_is_valid_arg(const name<N>*);\
+   char test_is_default_arg(const name<Default>*);\
+   template <class T> struct is_##name##_tester\
+   {\
+      template <Type N> static char test(const name<N>&);\
+      static double test(...);\
+   };\
+   template <class T> struct is_##name##_imp\
+   {\
+      static T inst;\
+      BOOST_STATIC_CONSTANT(bool, value = sizeof( ::pdalboost::math::policies::detail::is_##name##_tester<T>::test(inst)) == 1);\
+   };\
+   }\
+   template <class T> struct is_##name : public pdalboost::mpl::bool_< ::pdalboost::math::policies::detail::is_##name##_imp<T>::value>\
+   {\
+      template <class U> struct apply{ typedef is_##name<U> type; };\
+   };
+
+#define BOOST_MATH_META_BOOL(name, Default)\
+   template <bool N = Default> struct name : public pdalboost::mpl::bool_<N>{};\
+   namespace detail{\
+   template <bool N>\
+   char test_is_valid_arg(const name<N>*);\
+   char test_is_default_arg(const name<Default>*);\
+   template <class T> struct is_##name##_tester\
+   {\
+      template <bool N> static char test(const name<N>&);\
+      static double test(...);\
+   };\
+   template <class T> struct is_##name##_imp\
+   {\
+      static T inst;\
+      BOOST_STATIC_CONSTANT(bool, value = sizeof( ::pdalboost::math::policies::detail::is_##name##_tester<T>::test(inst)) == 1);\
+   };\
+   }\
+   template <class T> struct is_##name : public pdalboost::mpl::bool_< ::pdalboost::math::policies::detail::is_##name##_imp<T>::value>\
+   {\
+      template <class U> struct apply{ typedef is_##name<U> type;  };\
+   };
+#endif
+//
+// Begin by defining policy types for error handling:
+//
+enum error_policy_type
+{
+   throw_on_error = 0,
+   errno_on_error = 1,
+   ignore_error = 2,
+   user_error = 3
+};
+
+BOOST_MATH_META_INT(error_policy_type, domain_error, BOOST_MATH_DOMAIN_ERROR_POLICY)
+BOOST_MATH_META_INT(error_policy_type, pole_error, BOOST_MATH_POLE_ERROR_POLICY)
+BOOST_MATH_META_INT(error_policy_type, overflow_error, BOOST_MATH_OVERFLOW_ERROR_POLICY)
+BOOST_MATH_META_INT(error_policy_type, underflow_error, BOOST_MATH_UNDERFLOW_ERROR_POLICY)
+BOOST_MATH_META_INT(error_policy_type, denorm_error, BOOST_MATH_DENORM_ERROR_POLICY)
+BOOST_MATH_META_INT(error_policy_type, evaluation_error, BOOST_MATH_EVALUATION_ERROR_POLICY)
+BOOST_MATH_META_INT(error_policy_type, rounding_error, BOOST_MATH_ROUNDING_ERROR_POLICY)
+BOOST_MATH_META_INT(error_policy_type, indeterminate_result_error, BOOST_MATH_INDETERMINATE_RESULT_ERROR_POLICY)
+
+//
+// Policy types for internal promotion:
+//
+BOOST_MATH_META_BOOL(promote_float, BOOST_MATH_PROMOTE_FLOAT_POLICY)
+BOOST_MATH_META_BOOL(promote_double, BOOST_MATH_PROMOTE_DOUBLE_POLICY)
+BOOST_MATH_META_BOOL(assert_undefined, BOOST_MATH_ASSERT_UNDEFINED_POLICY)
+//
+// Policy types for discrete quantiles:
+//
+enum discrete_quantile_policy_type
+{
+   real,
+   integer_round_outwards,
+   integer_round_inwards,
+   integer_round_down,
+   integer_round_up,
+   integer_round_nearest
+};
+
+BOOST_MATH_META_INT(discrete_quantile_policy_type, discrete_quantile, BOOST_MATH_DISCRETE_QUANTILE_POLICY)
+//
+// Precision:
+//
+BOOST_MATH_META_INT(int, digits10, BOOST_MATH_DIGITS10_POLICY)
+BOOST_MATH_META_INT(int, digits2, 0)
+//
+// Iterations:
+//
+BOOST_MATH_META_INT(unsigned long, max_series_iterations, BOOST_MATH_MAX_SERIES_ITERATION_POLICY)
+BOOST_MATH_META_INT(unsigned long, max_root_iterations, BOOST_MATH_MAX_ROOT_ITERATION_POLICY)
+//
+// Define the names for each possible policy:
+//
+#define BOOST_MATH_PARAMETER(name)\
+   BOOST_PARAMETER_TEMPLATE_KEYWORD(name##_name)\
+   BOOST_PARAMETER_NAME(name##_name)
+
+struct default_policy{};
+
+namespace detail{
+//
+// Trait to work out bits precision from digits10 and digits2:
+//
+template <class Digits10, class Digits2>
+struct precision
+{
+   //
+   // Now work out the precision:
+   //
+   typedef typename mpl::if_c<
+      (Digits10::value == 0),
+      digits2<0>,
+      digits2<((Digits10::value + 1) * 1000L) / 301L>
+   >::type digits2_type;
+public:
+#ifdef __BORLANDC__
+   typedef typename mpl::if_c<
+      (Digits2::value > ::pdalboost::math::policies::detail::precision<Digits10,Digits2>::digits2_type::value),
+      Digits2, digits2_type>::type type;
+#else
+   typedef typename mpl::if_c<
+      (Digits2::value > digits2_type::value),
+      Digits2, digits2_type>::type type;
+#endif
+};
+
+template <class A, class B, bool b>
+struct select_result
+{
+   typedef A type;
+};
+template <class A, class B>
+struct select_result<A, B, false>
+{
+   typedef typename mpl::deref<B>::type type;
+};
+
+template <class Seq, class Pred, class DefaultType>
+struct find_arg
+{
+private:
+   typedef typename mpl::find_if<Seq, Pred>::type iter;
+   typedef typename mpl::end<Seq>::type end_type;
+public:
+   typedef typename select_result<
+      DefaultType, iter,
+      ::pdalboost::is_same<iter, end_type>::value>::type type;
+};
+
+double test_is_valid_arg(...);
+double test_is_default_arg(...);
+char test_is_valid_arg(const default_policy*);
+char test_is_default_arg(const default_policy*);
+
+template <class T>
+struct is_valid_policy_imp 
+{
+   BOOST_STATIC_CONSTANT(bool, value = sizeof(::pdalboost::math::policies::detail::test_is_valid_arg(static_cast<T*>(0))) == 1);
+};
+
+template <class T>
+struct is_default_policy_imp
+{
+   BOOST_STATIC_CONSTANT(bool, value = sizeof(::pdalboost::math::policies::detail::test_is_default_arg(static_cast<T*>(0))) == 1);
+};
+
+template <class T> struct is_valid_policy 
+: public mpl::bool_< 
+   ::pdalboost::math::policies::detail::is_valid_policy_imp<T>::value>
+{};
+
+template <class T> struct is_default_policy 
+: public mpl::bool_< 
+   ::pdalboost::math::policies::detail::is_default_policy_imp<T>::value>
+{
+   template <class U>
+   struct apply
+   {
+      typedef is_default_policy<U> type;
+   };
+};
+
+template <class Seq, class T, int N>
+struct append_N
+{
+   typedef typename mpl::push_back<Seq, T>::type new_seq;
+   typedef typename append_N<new_seq, T, N-1>::type type;
+};
+
+template <class Seq, class T>
+struct append_N<Seq, T, 0>
+{
+   typedef Seq type;
+};
+
+//
+// Traits class to work out what template parameters our default
+// policy<> class will have when modified for forwarding:
+//
+template <bool f, bool d>
+struct default_args
+{
+   typedef promote_float<false> arg1;
+   typedef promote_double<false> arg2;
+};
+
+template <>
+struct default_args<false, false>
+{
+   typedef default_policy arg1;
+   typedef default_policy arg2;
+};
+
+template <>
+struct default_args<true, false>
+{
+   typedef promote_float<false> arg1;
+   typedef default_policy arg2;
+};
+
+template <>
+struct default_args<false, true>
+{
+   typedef promote_double<false> arg1;
+   typedef default_policy arg2;
+};
+
+typedef default_args<BOOST_MATH_PROMOTE_FLOAT_POLICY, BOOST_MATH_PROMOTE_DOUBLE_POLICY>::arg1 forwarding_arg1;
+typedef default_args<BOOST_MATH_PROMOTE_FLOAT_POLICY, BOOST_MATH_PROMOTE_DOUBLE_POLICY>::arg2 forwarding_arg2;
+
+} // detail
+//
+// Now define the policy type with enough arguments to handle all
+// the policies:
+//
+template <class A1 = default_policy, 
+          class A2 = default_policy, 
+          class A3 = default_policy,
+          class A4 = default_policy,
+          class A5 = default_policy,
+          class A6 = default_policy,
+          class A7 = default_policy,
+          class A8 = default_policy,
+          class A9 = default_policy,
+          class A10 = default_policy,
+          class A11 = default_policy,
+          class A12 = default_policy,
+          class A13 = default_policy>
+struct policy
+{
+private:
+   //
+   // Validate all our arguments:
+   //
+   BOOST_STATIC_ASSERT(::pdalboost::math::policies::detail::is_valid_policy<A1>::value);
+   BOOST_STATIC_ASSERT(::pdalboost::math::policies::detail::is_valid_policy<A2>::value);
+   BOOST_STATIC_ASSERT(::pdalboost::math::policies::detail::is_valid_policy<A3>::value);
+   BOOST_STATIC_ASSERT(::pdalboost::math::policies::detail::is_valid_policy<A4>::value);
+   BOOST_STATIC_ASSERT(::pdalboost::math::policies::detail::is_valid_policy<A5>::value);
+   BOOST_STATIC_ASSERT(::pdalboost::math::policies::detail::is_valid_policy<A6>::value);
+   BOOST_STATIC_ASSERT(::pdalboost::math::policies::detail::is_valid_policy<A7>::value);
+   BOOST_STATIC_ASSERT(::pdalboost::math::policies::detail::is_valid_policy<A8>::value);
+   BOOST_STATIC_ASSERT(::pdalboost::math::policies::detail::is_valid_policy<A9>::value);
+   BOOST_STATIC_ASSERT(::pdalboost::math::policies::detail::is_valid_policy<A10>::value);
+   BOOST_STATIC_ASSERT(::pdalboost::math::policies::detail::is_valid_policy<A11>::value);
+   BOOST_STATIC_ASSERT(::pdalboost::math::policies::detail::is_valid_policy<A12>::value);
+   BOOST_STATIC_ASSERT(::pdalboost::math::policies::detail::is_valid_policy<A13>::value);
+   //
+   // Typelist of the arguments:
+   //
+   typedef mpl::list<A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13> arg_list;
+
+public:
+   typedef typename detail::find_arg<arg_list, is_domain_error<mpl::_1>, domain_error<> >::type domain_error_type;
+   typedef typename detail::find_arg<arg_list, is_pole_error<mpl::_1>, pole_error<> >::type pole_error_type;
+   typedef typename detail::find_arg<arg_list, is_overflow_error<mpl::_1>, overflow_error<> >::type overflow_error_type;
+   typedef typename detail::find_arg<arg_list, is_underflow_error<mpl::_1>, underflow_error<> >::type underflow_error_type;
+   typedef typename detail::find_arg<arg_list, is_denorm_error<mpl::_1>, denorm_error<> >::type denorm_error_type;
+   typedef typename detail::find_arg<arg_list, is_evaluation_error<mpl::_1>, evaluation_error<> >::type evaluation_error_type;
+   typedef typename detail::find_arg<arg_list, is_rounding_error<mpl::_1>, rounding_error<> >::type rounding_error_type;
+   typedef typename detail::find_arg<arg_list, is_indeterminate_result_error<mpl::_1>, indeterminate_result_error<> >::type indeterminate_result_error_type;
+private:
+   //
+   // Now work out the precision:
+   //
+   typedef typename detail::find_arg<arg_list, is_digits10<mpl::_1>, digits10<> >::type digits10_type;
+   typedef typename detail::find_arg<arg_list, is_digits2<mpl::_1>, digits2<> >::type bits_precision_type;
+public:
+   typedef typename detail::precision<digits10_type, bits_precision_type>::type precision_type;
+   //
+   // Internal promotion:
+   //
+   typedef typename detail::find_arg<arg_list, is_promote_float<mpl::_1>, promote_float<> >::type promote_float_type;
+   typedef typename detail::find_arg<arg_list, is_promote_double<mpl::_1>, promote_double<> >::type promote_double_type;
+   //
+   // Discrete quantiles:
+   //
+   typedef typename detail::find_arg<arg_list, is_discrete_quantile<mpl::_1>, discrete_quantile<> >::type discrete_quantile_type;
+   //
+   // Mathematically undefined properties:
+   //
+   typedef typename detail::find_arg<arg_list, is_assert_undefined<mpl::_1>, assert_undefined<> >::type assert_undefined_type;
+   //
+   // Max iterations:
+   //
+   typedef typename detail::find_arg<arg_list, is_max_series_iterations<mpl::_1>, max_series_iterations<> >::type max_series_iterations_type;
+   typedef typename detail::find_arg<arg_list, is_max_root_iterations<mpl::_1>, max_root_iterations<> >::type max_root_iterations_type;
+};
+//
+// These full specializations are defined to reduce the amount of
+// template instantiations that have to take place when using the default
+// policies, they have quite a large impact on compile times:
+//
+template <>
+struct policy<default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy>
+{
+public:
+   typedef domain_error<> domain_error_type;
+   typedef pole_error<> pole_error_type;
+   typedef overflow_error<> overflow_error_type;
+   typedef underflow_error<> underflow_error_type;
+   typedef denorm_error<> denorm_error_type;
+   typedef evaluation_error<> evaluation_error_type;
+   typedef rounding_error<> rounding_error_type;
+   typedef indeterminate_result_error<> indeterminate_result_error_type;
+#if BOOST_MATH_DIGITS10_POLICY == 0
+   typedef digits2<> precision_type;
+#else
+   typedef detail::precision<digits10<>, digits2<> >::type precision_type;
+#endif
+   typedef promote_float<> promote_float_type;
+   typedef promote_double<> promote_double_type;
+   typedef discrete_quantile<> discrete_quantile_type;
+   typedef assert_undefined<> assert_undefined_type;
+   typedef max_series_iterations<> max_series_iterations_type;
+   typedef max_root_iterations<> max_root_iterations_type;
+};
+
+template <>
+struct policy<detail::forwarding_arg1, detail::forwarding_arg2, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy, default_policy>
+{
+public:
+   typedef domain_error<> domain_error_type;
+   typedef pole_error<> pole_error_type;
+   typedef overflow_error<> overflow_error_type;
+   typedef underflow_error<> underflow_error_type;
+   typedef denorm_error<> denorm_error_type;
+   typedef evaluation_error<> evaluation_error_type;
+   typedef rounding_error<> rounding_error_type;
+   typedef indeterminate_result_error<> indeterminate_result_error_type;
+#if BOOST_MATH_DIGITS10_POLICY == 0
+   typedef digits2<> precision_type;
+#else
+   typedef detail::precision<digits10<>, digits2<> >::type precision_type;
+#endif
+   typedef promote_float<false> promote_float_type;
+   typedef promote_double<false> promote_double_type;
+   typedef discrete_quantile<> discrete_quantile_type;
+   typedef assert_undefined<> assert_undefined_type;
+   typedef max_series_iterations<> max_series_iterations_type;
+   typedef max_root_iterations<> max_root_iterations_type;
+};
+
+template <class Policy, 
+          class A1 = default_policy, 
+          class A2 = default_policy, 
+          class A3 = default_policy,
+          class A4 = default_policy,
+          class A5 = default_policy,
+          class A6 = default_policy,
+          class A7 = default_policy,
+          class A8 = default_policy,
+          class A9 = default_policy,
+          class A10 = default_policy,
+          class A11 = default_policy,
+          class A12 = default_policy,
+          class A13 = default_policy>
+struct normalise
+{
+private:
+   typedef mpl::list<A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13> arg_list;
+   typedef typename detail::find_arg<arg_list, is_domain_error<mpl::_1>, typename Policy::domain_error_type >::type domain_error_type;
+   typedef typename detail::find_arg<arg_list, is_pole_error<mpl::_1>, typename Policy::pole_error_type >::type pole_error_type;
+   typedef typename detail::find_arg<arg_list, is_overflow_error<mpl::_1>, typename Policy::overflow_error_type >::type overflow_error_type;
+   typedef typename detail::find_arg<arg_list, is_underflow_error<mpl::_1>, typename Policy::underflow_error_type >::type underflow_error_type;
+   typedef typename detail::find_arg<arg_list, is_denorm_error<mpl::_1>, typename Policy::denorm_error_type >::type denorm_error_type;
+   typedef typename detail::find_arg<arg_list, is_evaluation_error<mpl::_1>, typename Policy::evaluation_error_type >::type evaluation_error_type;
+   typedef typename detail::find_arg<arg_list, is_rounding_error<mpl::_1>, typename Policy::rounding_error_type >::type rounding_error_type;
+   typedef typename detail::find_arg<arg_list, is_indeterminate_result_error<mpl::_1>, typename Policy::indeterminate_result_error_type >::type indeterminate_result_error_type;
+   //
+   // Now work out the precision:
+   //
+   typedef typename detail::find_arg<arg_list, is_digits10<mpl::_1>, digits10<> >::type digits10_type;
+   typedef typename detail::find_arg<arg_list, is_digits2<mpl::_1>, typename Policy::precision_type >::type bits_precision_type;
+   typedef typename detail::precision<digits10_type, bits_precision_type>::type precision_type;
+   //
+   // Internal promotion:
+   //
+   typedef typename detail::find_arg<arg_list, is_promote_float<mpl::_1>, typename Policy::promote_float_type >::type promote_float_type;
+   typedef typename detail::find_arg<arg_list, is_promote_double<mpl::_1>, typename Policy::promote_double_type >::type promote_double_type;
+   //
+   // Discrete quantiles:
+   //
+   typedef typename detail::find_arg<arg_list, is_discrete_quantile<mpl::_1>, typename Policy::discrete_quantile_type >::type discrete_quantile_type;
+   //
+   // Mathematically undefined properties:
+   //
+   typedef typename detail::find_arg<arg_list, is_assert_undefined<mpl::_1>, typename Policy::assert_undefined_type >::type assert_undefined_type;
+   //
+   // Max iterations:
+   //
+   typedef typename detail::find_arg<arg_list, is_max_series_iterations<mpl::_1>, typename Policy::max_series_iterations_type>::type max_series_iterations_type;
+   typedef typename detail::find_arg<arg_list, is_max_root_iterations<mpl::_1>, typename Policy::max_root_iterations_type>::type max_root_iterations_type;
+   //
+   // Define a typelist of the policies:
+   //
+   typedef mpl::vector<
+      domain_error_type,
+      pole_error_type,
+      overflow_error_type,
+      underflow_error_type,
+      denorm_error_type,
+      evaluation_error_type,
+      rounding_error_type,
+      indeterminate_result_error_type,
+      precision_type,
+      promote_float_type,
+      promote_double_type,
+      discrete_quantile_type,
+      assert_undefined_type,
+      max_series_iterations_type,
+      max_root_iterations_type> result_list;
+   //
+   // Remove all the policies that are the same as the default:
+   //
+   typedef typename mpl::remove_if<result_list, detail::is_default_policy<mpl::_> >::type reduced_list;
+   //
+   // Pad out the list with defaults:
+   //
+   typedef typename detail::append_N<reduced_list, default_policy, (14 - ::pdalboost::mpl::size<reduced_list>::value)>::type result_type;
+public:
+   typedef policy<
+      typename mpl::at<result_type, mpl::int_<0> >::type,
+      typename mpl::at<result_type, mpl::int_<1> >::type,
+      typename mpl::at<result_type, mpl::int_<2> >::type,
+      typename mpl::at<result_type, mpl::int_<3> >::type,
+      typename mpl::at<result_type, mpl::int_<4> >::type,
+      typename mpl::at<result_type, mpl::int_<5> >::type,
+      typename mpl::at<result_type, mpl::int_<6> >::type,
+      typename mpl::at<result_type, mpl::int_<7> >::type,
+      typename mpl::at<result_type, mpl::int_<8> >::type,
+      typename mpl::at<result_type, mpl::int_<9> >::type,
+      typename mpl::at<result_type, mpl::int_<10> >::type,
+      typename mpl::at<result_type, mpl::int_<11> >::type,
+      typename mpl::at<result_type, mpl::int_<12> >::type > type;
+};
+//
+// Full specialisation to speed up compilation of the common case:
+//
+template <>
+struct normalise<policy<>, 
+          promote_float<false>, 
+          promote_double<false>, 
+          discrete_quantile<>,
+          assert_undefined<>,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy>
+{
+   typedef policy<detail::forwarding_arg1, detail::forwarding_arg2> type;
+};
+
+template <>
+struct normalise<policy<detail::forwarding_arg1, detail::forwarding_arg2>,
+          promote_float<false>,
+          promote_double<false>,
+          discrete_quantile<>,
+          assert_undefined<>,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy,
+          default_policy>
+{
+   typedef policy<detail::forwarding_arg1, detail::forwarding_arg2> type;
+};
+
+inline BOOST_MATH_CONSTEXPR policy<> make_policy() BOOST_NOEXCEPT
+{ return policy<>(); }
+
+template <class A1>
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1>::type make_policy(const A1&) BOOST_NOEXCEPT
+{ 
+   typedef typename normalise<policy<>, A1>::type result_type;
+   return result_type(); 
+}
+
+template <class A1, class A2>
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2>::type make_policy(const A1&, const A2&) BOOST_NOEXCEPT
+{ 
+   typedef typename normalise<policy<>, A1, A2>::type result_type;
+   return result_type(); 
+}
+
+template <class A1, class A2, class A3>
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3>::type make_policy(const A1&, const A2&, const A3&) BOOST_NOEXCEPT
+{ 
+   typedef typename normalise<policy<>, A1, A2, A3>::type result_type;
+   return result_type(); 
+}
+
+template <class A1, class A2, class A3, class A4>
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4>::type make_policy(const A1&, const A2&, const A3&, const A4&) BOOST_NOEXCEPT
+{ 
+   typedef typename normalise<policy<>, A1, A2, A3, A4>::type result_type;
+   return result_type(); 
+}
+
+template <class A1, class A2, class A3, class A4, class A5>
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4, A5>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&) BOOST_NOEXCEPT
+{ 
+   typedef typename normalise<policy<>, A1, A2, A3, A4, A5>::type result_type;
+   return result_type(); 
+}
+
+template <class A1, class A2, class A3, class A4, class A5, class A6>
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&) BOOST_NOEXCEPT
+{ 
+   typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type result_type;
+   return result_type(); 
+}
+
+template <class A1, class A2, class A3, class A4, class A5, class A6, class A7>
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&) BOOST_NOEXCEPT
+{ 
+   typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7>::type result_type;
+   return result_type(); 
+}
+
+template <class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&) BOOST_NOEXCEPT
+{ 
+   typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8>::type result_type;
+   return result_type(); 
+}
+
+template <class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&, const A9&) BOOST_NOEXCEPT
+{ 
+   typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9>::type result_type;
+   return result_type(); 
+}
+
+template <class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&, const A9&, const A10&) BOOST_NOEXCEPT
+{ 
+   typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::type result_type;
+   return result_type(); 
+}
+
+template <class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
+inline BOOST_MATH_CONSTEXPR typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&, const A7&, const A8&, const A9&, const A10&, const A11&) BOOST_NOEXCEPT
+{
+   typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::type result_type;
+   return result_type();
+}
+
+//
+// Traits class to handle internal promotion:
+//
+template <class Real, class Policy>
+struct evaluation
+{
+   typedef Real type;
+};
+
+template <class Policy>
+struct evaluation<float, Policy>
+{
+   typedef typename mpl::if_<typename Policy::promote_float_type, double, float>::type type;
+};
+
+template <class Policy>
+struct evaluation<double, Policy>
+{
+   typedef typename mpl::if_<typename Policy::promote_double_type, long double, double>::type type;
+};
+
+#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+
+template <class Real>
+struct basic_digits : public mpl::int_<0>{ };
+template <>
+struct basic_digits<float> : public mpl::int_<FLT_MANT_DIG>{ };
+template <>
+struct basic_digits<double> : public mpl::int_<DBL_MANT_DIG>{ };
+template <>
+struct basic_digits<long double> : public mpl::int_<LDBL_MANT_DIG>{ };
+
+template <class Real, class Policy>
+struct precision
+{
+   BOOST_STATIC_ASSERT( ::std::numeric_limits<Real>::radix == 2);
+   typedef typename Policy::precision_type precision_type;
+   typedef basic_digits<Real> digits_t;
+   typedef typename mpl::if_<
+      mpl::equal_to<digits_t, mpl::int_<0> >,
+      // Possibly unknown precision:
+      precision_type,
+      typename mpl::if_<
+         mpl::or_<mpl::less_equal<digits_t, precision_type>, mpl::less_equal<precision_type, mpl::int_<0> > >,
+         // Default case, full precision for RealType:
+         digits2< ::std::numeric_limits<Real>::digits>,
+         // User customised precision:
+         precision_type
+      >::type
+   >::type type;
+};
+
+template <class Policy>
+struct precision<float, Policy>
+{
+   typedef digits2<FLT_MANT_DIG> type;
+};
+template <class Policy>
+struct precision<double, Policy>
+{
+   typedef digits2<DBL_MANT_DIG> type;
+};
+template <class Policy>
+struct precision<long double, Policy>
+{
+   typedef digits2<LDBL_MANT_DIG> type;
+};
+
+#else
+
+template <class Real, class Policy>
+struct precision
+{
+   BOOST_STATIC_ASSERT((::std::numeric_limits<Real>::radix == 2) || ((::std::numeric_limits<Real>::is_specialized == 0) || (::std::numeric_limits<Real>::digits == 0)));
+#ifndef __BORLANDC__
+   typedef typename Policy::precision_type precision_type;
+   typedef typename mpl::if_c<
+      ((::std::numeric_limits<Real>::is_specialized == 0) || (::std::numeric_limits<Real>::digits == 0)),
+      // Possibly unknown precision:
+      precision_type,
+      typename mpl::if_c<
+         ((::std::numeric_limits<Real>::digits <= precision_type::value) 
+         || (Policy::precision_type::value <= 0)),
+         // Default case, full precision for RealType:
+         digits2< ::std::numeric_limits<Real>::digits>,
+         // User customised precision:
+         precision_type
+      >::type
+   >::type type;
+#else
+   typedef typename Policy::precision_type precision_type;
+   typedef mpl::int_< ::std::numeric_limits<Real>::digits> digits_t;
+   typedef mpl::bool_< ::std::numeric_limits<Real>::is_specialized> spec_t;
+   typedef typename mpl::if_<
+      mpl::or_<mpl::equal_to<spec_t, mpl::false_>, mpl::equal_to<digits_t, mpl::int_<0> > >,
+      // Possibly unknown precision:
+      precision_type,
+      typename mpl::if_<
+         mpl::or_<mpl::less_equal<digits_t, precision_type>, mpl::less_equal<precision_type, mpl::int_<0> > >,
+         // Default case, full precision for RealType:
+         digits2< ::std::numeric_limits<Real>::digits>,
+         // User customised precision:
+         precision_type
+      >::type
+   >::type type;
+#endif
+};
+
+#endif
+
+#ifdef BOOST_MATH_USE_FLOAT128
+
+template <class Policy>
+struct precision<BOOST_MATH_FLOAT128_TYPE, Policy>
+{
+   typedef mpl::int_<113> type;
+};
+
+#endif
+
+namespace detail{
+
+template <class T, class Policy>
+inline BOOST_MATH_CONSTEXPR int digits_imp(mpl::true_ const&) BOOST_NOEXCEPT
+{
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+   BOOST_STATIC_ASSERT( ::std::numeric_limits<T>::is_specialized);
+#else
+   BOOST_ASSERT(::std::numeric_limits<T>::is_specialized);
+#endif
+   typedef typename pdalboost::math::policies::precision<T, Policy>::type p_t;
+   return p_t::value;
+}
+
+template <class T, class Policy>
+inline BOOST_MATH_CONSTEXPR int digits_imp(mpl::false_ const&) BOOST_NOEXCEPT
+{
+   return tools::digits<T>();
+}
+
+} // namespace detail
+
+template <class T, class Policy>
+inline BOOST_MATH_CONSTEXPR int digits(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) BOOST_NOEXCEPT
+{
+   typedef mpl::bool_< std::numeric_limits<T>::is_specialized > tag_type;
+   return detail::digits_imp<T, Policy>(tag_type());
+}
+template <class T, class Policy>
+inline BOOST_MATH_CONSTEXPR int digits_base10(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) BOOST_NOEXCEPT
+{
+   return pdalboost::math::policies::digits<T, Policy>() * 301 / 1000L;
+}
+
+template <class Policy>
+inline BOOST_MATH_CONSTEXPR unsigned long get_max_series_iterations() BOOST_NOEXCEPT
+{
+   typedef typename Policy::max_series_iterations_type iter_type;
+   return iter_type::value;
+}
+
+template <class Policy>
+inline BOOST_MATH_CONSTEXPR unsigned long get_max_root_iterations() BOOST_NOEXCEPT
+{
+   typedef typename Policy::max_root_iterations_type iter_type;
+   return iter_type::value;
+}
+
+namespace detail{
+
+template <class T, class Digits, class Small, class Default>
+struct series_factor_calc
+{
+   static T get() BOOST_MATH_NOEXCEPT(T)
+   {
+      return ldexp(T(1.0), 1 - Digits::value);
+   }
+};
+
+template <class T, class Digits>
+struct series_factor_calc<T, Digits, mpl::true_, mpl::true_>
+{
+   static BOOST_MATH_CONSTEXPR T get() BOOST_MATH_NOEXCEPT(T)
+   {
+      return pdalboost::math::tools::epsilon<T>();
+   }
+};
+template <class T, class Digits>
+struct series_factor_calc<T, Digits, mpl::true_, mpl::false_>
+{
+   BOOST_STATIC_CONSTANT(pdalboost::uintmax_t, v = static_cast<pdalboost::uintmax_t>(1u) << (Digits::value - 1));
+
+   static BOOST_MATH_CONSTEXPR T get() BOOST_MATH_NOEXCEPT(T)
+   {
+      return 1 / static_cast<T>(v);
+   }
+};
+template <class T, class Digits>
+struct series_factor_calc<T, Digits, mpl::false_, mpl::true_>
+{
+   static BOOST_MATH_CONSTEXPR T get() BOOST_MATH_NOEXCEPT(T)
+   {
+      return pdalboost::math::tools::epsilon<T>();
+   }
+};
+
+template <class T, class Policy>
+inline BOOST_MATH_CONSTEXPR T get_epsilon_imp(mpl::true_ const&) BOOST_MATH_NOEXCEPT(T)
+{
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+   BOOST_STATIC_ASSERT( ::std::numeric_limits<T>::is_specialized);
+   BOOST_STATIC_ASSERT( ::std::numeric_limits<T>::radix == 2);
+#else
+   BOOST_ASSERT(::std::numeric_limits<T>::is_specialized);
+   BOOST_ASSERT(::std::numeric_limits<T>::radix == 2);
+#endif
+   typedef typename pdalboost::math::policies::precision<T, Policy>::type p_t;
+   typedef mpl::bool_<p_t::value <= std::numeric_limits<pdalboost::uintmax_t>::digits> is_small_int;
+   typedef mpl::bool_<p_t::value >= std::numeric_limits<T>::digits> is_default_value;
+   return series_factor_calc<T, p_t, is_small_int, is_default_value>::get();
+}
+
+template <class T, class Policy>
+inline BOOST_MATH_CONSTEXPR T get_epsilon_imp(mpl::false_ const&) BOOST_MATH_NOEXCEPT(T)
+{
+   return tools::epsilon<T>();
+}
+
+} // namespace detail
+
+template <class T, class Policy>
+inline BOOST_MATH_CONSTEXPR T get_epsilon(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(T)) BOOST_MATH_NOEXCEPT(T)
+{
+   typedef mpl::bool_< (std::numeric_limits<T>::is_specialized && (std::numeric_limits<T>::radix == 2)) > tag_type;
+   return detail::get_epsilon_imp<T, Policy>(tag_type());
+}
+
+namespace detail{
+
+template <class A1, 
+          class A2, 
+          class A3,
+          class A4,
+          class A5,
+          class A6,
+          class A7,
+          class A8,
+          class A9,
+          class A10,
+          class A11>
+char test_is_policy(const policy<A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11>*);
+double test_is_policy(...);
+
+template <class P>
+struct is_policy_imp
+{
+   BOOST_STATIC_CONSTANT(bool, value = (sizeof(::pdalboost::math::policies::detail::test_is_policy(static_cast<P*>(0))) == 1));
+};
+
+}
+
+template <class P>
+struct is_policy : public mpl::bool_< ::pdalboost::math::policies::detail::is_policy_imp<P>::value> {};
+
+//
+// Helper traits class for distribution error handling:
+//
+template <class Policy>
+struct constructor_error_check
+{
+   typedef typename Policy::domain_error_type domain_error_type;
+   typedef typename mpl::if_c<
+      (domain_error_type::value == throw_on_error) || (domain_error_type::value == user_error) || (domain_error_type::value == errno_on_error),
+      mpl::true_,
+      mpl::false_>::type type;
+};
+
+template <class Policy>
+struct method_error_check
+{
+   typedef typename Policy::domain_error_type domain_error_type;
+   typedef typename mpl::if_c<
+      (domain_error_type::value == throw_on_error) && (domain_error_type::value != user_error),
+      mpl::false_,
+      mpl::true_>::type type;
+};
+//
+// Does the Policy ever throw on error?
+//
+template <class Policy>
+struct is_noexcept_error_policy
+{
+   typedef typename Policy::domain_error_type               t1;
+   typedef typename Policy::pole_error_type                 t2;
+   typedef typename Policy::overflow_error_type             t3;
+   typedef typename Policy::underflow_error_type            t4;
+   typedef typename Policy::denorm_error_type               t5;
+   typedef typename Policy::evaluation_error_type           t6;
+   typedef typename Policy::rounding_error_type             t7;
+   typedef typename Policy::indeterminate_result_error_type t8;
+
+   BOOST_STATIC_CONSTANT(bool, value = 
+      ((t1::value != throw_on_error) && (t1::value != user_error)
+      && (t2::value != throw_on_error) && (t2::value != user_error)
+      && (t3::value != throw_on_error) && (t3::value != user_error)
+      && (t4::value != throw_on_error) && (t4::value != user_error)
+      && (t5::value != throw_on_error) && (t5::value != user_error)
+      && (t6::value != throw_on_error) && (t6::value != user_error)
+      && (t7::value != throw_on_error) && (t7::value != user_error)
+      && (t8::value != throw_on_error) && (t8::value != user_error)));
+};
+
+}}} // namespaces
+
+#endif // BOOST_MATH_POLICY_HPP
+
diff --git a/vendor/pdalboost/boost/math/special_functions/detail/fp_traits.hpp b/vendor/pdalboost/boost/math/special_functions/detail/fp_traits.hpp
new file mode 100644
index 0000000..cf74634
--- /dev/null
+++ b/vendor/pdalboost/boost/math/special_functions/detail/fp_traits.hpp
@@ -0,0 +1,580 @@
+// fp_traits.hpp
+
+#ifndef BOOST_MATH_FP_TRAITS_HPP
+#define BOOST_MATH_FP_TRAITS_HPP
+
+// Copyright (c) 2006 Johan Rade
+
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/*
+To support old compilers, care has been taken to avoid partial template
+specialization and meta function forwarding.
+With these techniques, the code could be simplified.
+*/
+
+#if defined(__vms) && defined(__DECCXX) && !__IEEE_FLOAT
+// The VAX floating point formats are used (for float and double)
+#   define BOOST_FPCLASSIFY_VAX_FORMAT
+#endif
+
+#include <cstring>
+
+#include <boost/assert.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/detail/endian.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_floating_point.hpp>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+  namespace std{ using ::memcpy; }
+#endif
+
+#ifndef FP_NORMAL
+
+#define FP_ZERO        0
+#define FP_NORMAL      1
+#define FP_INFINITE    2
+#define FP_NAN         3
+#define FP_SUBNORMAL   4
+
+#else
+
+#define BOOST_HAS_FPCLASSIFY
+
+#ifndef fpclassify
+#  if (defined(__GLIBCPP__) || defined(__GLIBCXX__)) \
+         && defined(_GLIBCXX_USE_C99_MATH) \
+         && !(defined(_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC) \
+         && (_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC != 0))
+#     ifdef _STLP_VENDOR_CSTD
+#        if _STLPORT_VERSION >= 0x520
+#           define BOOST_FPCLASSIFY_PREFIX ::__std_alias:: 
+#        else
+#           define BOOST_FPCLASSIFY_PREFIX ::_STLP_VENDOR_CSTD:: 
+#        endif
+#     else
+#        define BOOST_FPCLASSIFY_PREFIX ::std::
+#     endif
+#  else
+#     undef BOOST_HAS_FPCLASSIFY
+#     define BOOST_FPCLASSIFY_PREFIX
+#  endif
+#elif (defined(__HP_aCC) && !defined(__hppa))
+// aCC 6 appears to do "#define fpclassify fpclassify" which messes us up a bit!
+#  define BOOST_FPCLASSIFY_PREFIX ::
+#else
+#  define BOOST_FPCLASSIFY_PREFIX
+#endif
+
+#ifdef __MINGW32__
+#  undef BOOST_HAS_FPCLASSIFY
+#endif
+
+#endif
+
+
+//------------------------------------------------------------------------------
+
+namespace pdalboost {
+namespace math {
+namespace detail {
+
+//------------------------------------------------------------------------------
+
+/* 
+The following classes are used to tag the different methods that are used
+for floating point classification
+*/
+
+struct native_tag {};
+template <bool has_limits>
+struct generic_tag {};
+struct ieee_tag {};
+struct ieee_copy_all_bits_tag : public ieee_tag {};
+struct ieee_copy_leading_bits_tag : public ieee_tag {};
+
+#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+//
+// These helper functions are used only when numeric_limits<>
+// members are not compile time constants:
+//
+inline bool is_generic_tag_false(const generic_tag<false>*)
+{
+   return true;
+}
+inline bool is_generic_tag_false(const void*)
+{
+   return false;
+}
+#endif
+
+//------------------------------------------------------------------------------
+
+/*
+Most processors support three different floating point precisions:
+single precision (32 bits), double precision (64 bits)
+and extended double precision (80 - 128 bits, depending on the processor)
+
+Note that the C++ type long double can be implemented
+both as double precision and extended double precision.
+*/
+
+struct unknown_precision{};
+struct single_precision {};
+struct double_precision {};
+struct extended_double_precision {};
+
+// native_tag version --------------------------------------------------------------
+
+template<class T> struct fp_traits_native
+{
+    typedef native_tag method;
+};
+
+// generic_tag version -------------------------------------------------------------
+
+template<class T, class U> struct fp_traits_non_native
+{
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+   typedef generic_tag<std::numeric_limits<T>::is_specialized> method;
+#else
+   typedef generic_tag<false> method;
+#endif
+};
+
+// ieee_tag versions ---------------------------------------------------------------
+
+/*
+These specializations of fp_traits_non_native contain information needed
+to "parse" the binary representation of a floating point number.
+
+Typedef members:
+
+  bits -- the target type when copying the leading bytes of a floating
+      point number. It is a typedef for uint32_t or uint64_t.
+
+  method -- tells us whether all bytes are copied or not.
+      It is a typedef for ieee_copy_all_bits_tag or ieee_copy_leading_bits_tag.
+
+Static data members:
+
+  sign, exponent, flag, significand -- bit masks that give the meaning of the
+  bits in the leading bytes.
+
+Static function members:
+
+  get_bits(), set_bits() -- provide access to the leading bytes.
+
+*/
+
+// ieee_tag version, float (32 bits) -----------------------------------------------
+
+#ifndef BOOST_FPCLASSIFY_VAX_FORMAT
+
+template<> struct fp_traits_non_native<float, single_precision>
+{
+    typedef ieee_copy_all_bits_tag method;
+
+    BOOST_STATIC_CONSTANT(uint32_t, sign        = 0x80000000u);
+    BOOST_STATIC_CONSTANT(uint32_t, exponent    = 0x7f800000);
+    BOOST_STATIC_CONSTANT(uint32_t, flag        = 0x00000000);
+    BOOST_STATIC_CONSTANT(uint32_t, significand = 0x007fffff);
+
+    typedef uint32_t bits;
+    static void get_bits(float x, uint32_t& a) { std::memcpy(&a, &x, 4); }
+    static void set_bits(float& x, uint32_t a) { std::memcpy(&x, &a, 4); }
+};
+
+// ieee_tag version, double (64 bits) ----------------------------------------------
+
+#if defined(BOOST_NO_INT64_T) || defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) \
+   || defined(__BORLANDC__) || defined(__CODEGEAR__)
+
+template<> struct fp_traits_non_native<double, double_precision>
+{
+    typedef ieee_copy_leading_bits_tag method;
+
+    BOOST_STATIC_CONSTANT(uint32_t, sign        = 0x80000000u);
+    BOOST_STATIC_CONSTANT(uint32_t, exponent    = 0x7ff00000);
+    BOOST_STATIC_CONSTANT(uint32_t, flag        = 0);
+    BOOST_STATIC_CONSTANT(uint32_t, significand = 0x000fffff);
+
+    typedef uint32_t bits;
+
+    static void get_bits(double x, uint32_t& a)
+    {
+        std::memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + offset_, 4);
+    }
+
+    static void set_bits(double& x, uint32_t a)
+    {
+        std::memcpy(reinterpret_cast<unsigned char*>(&x) + offset_, &a, 4);
+    }
+
+private:
+
+#if defined(BOOST_BIG_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 0);
+#elif defined(BOOST_LITTLE_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 4);
+#else
+    BOOST_STATIC_ASSERT(false);
+#endif
+};
+
+//..............................................................................
+
+#else
+
+template<> struct fp_traits_non_native<double, double_precision>
+{
+    typedef ieee_copy_all_bits_tag method;
+
+    static const uint64_t sign     = ((uint64_t)0x80000000u) << 32;
+    static const uint64_t exponent = ((uint64_t)0x7ff00000) << 32;
+    static const uint64_t flag     = 0;
+    static const uint64_t significand
+        = (((uint64_t)0x000fffff) << 32) + ((uint64_t)0xffffffffu);
+
+    typedef uint64_t bits;
+    static void get_bits(double x, uint64_t& a) { std::memcpy(&a, &x, 8); }
+    static void set_bits(double& x, uint64_t a) { std::memcpy(&x, &a, 8); }
+};
+
+#endif
+
+#endif  // #ifndef BOOST_FPCLASSIFY_VAX_FORMAT
+
+// long double (64 bits) -------------------------------------------------------
+
+#if defined(BOOST_NO_INT64_T) || defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)\
+   || defined(__BORLANDC__) || defined(__CODEGEAR__)
+
+template<> struct fp_traits_non_native<long double, double_precision>
+{
+    typedef ieee_copy_leading_bits_tag method;
+
+    BOOST_STATIC_CONSTANT(uint32_t, sign        = 0x80000000u);
+    BOOST_STATIC_CONSTANT(uint32_t, exponent    = 0x7ff00000);
+    BOOST_STATIC_CONSTANT(uint32_t, flag        = 0);
+    BOOST_STATIC_CONSTANT(uint32_t, significand = 0x000fffff);
+
+    typedef uint32_t bits;
+
+    static void get_bits(long double x, uint32_t& a)
+    {
+        std::memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + offset_, 4);
+    }
+
+    static void set_bits(long double& x, uint32_t a)
+    {
+        std::memcpy(reinterpret_cast<unsigned char*>(&x) + offset_, &a, 4);
+    }
+
+private:
+
+#if defined(BOOST_BIG_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 0);
+#elif defined(BOOST_LITTLE_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 4);
+#else
+    BOOST_STATIC_ASSERT(false);
+#endif
+};
+
+//..............................................................................
+
+#else
+
+template<> struct fp_traits_non_native<long double, double_precision>
+{
+    typedef ieee_copy_all_bits_tag method;
+
+    static const uint64_t sign     = (uint64_t)0x80000000u << 32;
+    static const uint64_t exponent = (uint64_t)0x7ff00000 << 32;
+    static const uint64_t flag     = 0;
+    static const uint64_t significand
+        = ((uint64_t)0x000fffff << 32) + (uint64_t)0xffffffffu;
+
+    typedef uint64_t bits;
+    static void get_bits(long double x, uint64_t& a) { std::memcpy(&a, &x, 8); }
+    static void set_bits(long double& x, uint64_t a) { std::memcpy(&x, &a, 8); }
+};
+
+#endif
+
+
+// long double (>64 bits), x86 and x64 -----------------------------------------
+
+#if defined(__i386) || defined(__i386__) || defined(_M_IX86) \
+    || defined(__amd64) || defined(__amd64__)  || defined(_M_AMD64) \
+    || defined(__x86_64) || defined(__x86_64__) || defined(_M_X64)
+
+// Intel extended double precision format (80 bits)
+
+template<>
+struct fp_traits_non_native<long double, extended_double_precision>
+{
+    typedef ieee_copy_leading_bits_tag method;
+
+    BOOST_STATIC_CONSTANT(uint32_t, sign        = 0x80000000u);
+    BOOST_STATIC_CONSTANT(uint32_t, exponent    = 0x7fff0000);
+    BOOST_STATIC_CONSTANT(uint32_t, flag        = 0x00008000);
+    BOOST_STATIC_CONSTANT(uint32_t, significand = 0x00007fff);
+
+    typedef uint32_t bits;
+
+    static void get_bits(long double x, uint32_t& a)
+    {
+        std::memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + 6, 4);
+    }
+
+    static void set_bits(long double& x, uint32_t a)
+    {
+        std::memcpy(reinterpret_cast<unsigned char*>(&x) + 6, &a, 4);
+    }
+};
+
+
+// long double (>64 bits), Itanium ---------------------------------------------
+
+#elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64)
+
+// The floating point format is unknown at compile time
+// No template specialization is provided.
+// The generic_tag definition is used.
+
+// The Itanium supports both
+// the Intel extended double precision format (80 bits) and
+// the IEEE extended double precision format with 15 exponent bits (128 bits).
+
+#elif defined(__GNUC__) && (LDBL_MANT_DIG == 106)
+
+//
+// Define nothing here and fall though to generic_tag:
+// We have GCC's "double double" in effect, and any attempt
+// to handle it via bit-fiddling is pretty much doomed to fail...
+//
+
+// long double (>64 bits), PowerPC ---------------------------------------------
+
+#elif defined(__powerpc) || defined(__powerpc__) || defined(__POWERPC__) \
+    || defined(__ppc) || defined(__ppc__) || defined(__PPC__)
+
+// PowerPC extended double precision format (128 bits)
+
+template<>
+struct fp_traits_non_native<long double, extended_double_precision>
+{
+    typedef ieee_copy_leading_bits_tag method;
+
+    BOOST_STATIC_CONSTANT(uint32_t, sign        = 0x80000000u);
+    BOOST_STATIC_CONSTANT(uint32_t, exponent    = 0x7ff00000);
+    BOOST_STATIC_CONSTANT(uint32_t, flag        = 0x00000000);
+    BOOST_STATIC_CONSTANT(uint32_t, significand = 0x000fffff);
+
+    typedef uint32_t bits;
+
+    static void get_bits(long double x, uint32_t& a)
+    {
+        std::memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + offset_, 4);
+    }
+
+    static void set_bits(long double& x, uint32_t a)
+    {
+        std::memcpy(reinterpret_cast<unsigned char*>(&x) + offset_, &a, 4);
+    }
+
+private:
+
+#if defined(BOOST_BIG_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 0);
+#elif defined(BOOST_LITTLE_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 12);
+#else
+    BOOST_STATIC_ASSERT(false);
+#endif
+};
+
+
+// long double (>64 bits), Motorola 68K ----------------------------------------
+
+#elif defined(__m68k) || defined(__m68k__) \
+    || defined(__mc68000) || defined(__mc68000__) \
+
+// Motorola extended double precision format (96 bits)
+
+// It is the same format as the Intel extended double precision format,
+// except that 1) it is big-endian, 2) the 3rd and 4th byte are padding, and
+// 3) the flag bit is not set for infinity
+
+template<>
+struct fp_traits_non_native<long double, extended_double_precision>
+{
+    typedef ieee_copy_leading_bits_tag method;
+
+    BOOST_STATIC_CONSTANT(uint32_t, sign        = 0x80000000u);
+    BOOST_STATIC_CONSTANT(uint32_t, exponent    = 0x7fff0000);
+    BOOST_STATIC_CONSTANT(uint32_t, flag        = 0x00008000);
+    BOOST_STATIC_CONSTANT(uint32_t, significand = 0x00007fff);
+
+    // copy 1st, 2nd, 5th and 6th byte. 3rd and 4th byte are padding.
+
+    typedef uint32_t bits;
+
+    static void get_bits(long double x, uint32_t& a)
+    {
+        std::memcpy(&a, &x, 2);
+        std::memcpy(reinterpret_cast<unsigned char*>(&a) + 2,
+               reinterpret_cast<const unsigned char*>(&x) + 4, 2);
+    }
+
+    static void set_bits(long double& x, uint32_t a)
+    {
+        std::memcpy(&x, &a, 2);
+        std::memcpy(reinterpret_cast<unsigned char*>(&x) + 4,
+               reinterpret_cast<const unsigned char*>(&a) + 2, 2);
+    }
+};
+
+
+// long double (>64 bits), All other processors --------------------------------
+
+#else
+
+// IEEE extended double precision format with 15 exponent bits (128 bits)
+
+template<>
+struct fp_traits_non_native<long double, extended_double_precision>
+{
+    typedef ieee_copy_leading_bits_tag method;
+
+    BOOST_STATIC_CONSTANT(uint32_t, sign        = 0x80000000u);
+    BOOST_STATIC_CONSTANT(uint32_t, exponent    = 0x7fff0000);
+    BOOST_STATIC_CONSTANT(uint32_t, flag        = 0x00000000);
+    BOOST_STATIC_CONSTANT(uint32_t, significand = 0x0000ffff);
+
+    typedef uint32_t bits;
+
+    static void get_bits(long double x, uint32_t& a)
+    {
+        std::memcpy(&a, reinterpret_cast<const unsigned char*>(&x) + offset_, 4);
+    }
+
+    static void set_bits(long double& x, uint32_t a)
+    {
+        std::memcpy(reinterpret_cast<unsigned char*>(&x) + offset_, &a, 4);
+    }
+
+private:
+
+#if defined(BOOST_BIG_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 0);
+#elif defined(BOOST_LITTLE_ENDIAN)
+    BOOST_STATIC_CONSTANT(int, offset_ = 12);
+#else
+    BOOST_STATIC_ASSERT(false);
+#endif
+};
+
+#endif
+
+//------------------------------------------------------------------------------
+
+// size_to_precision is a type switch for converting a C++ floating point type
+// to the corresponding precision type.
+
+template<int n, bool fp> struct size_to_precision
+{
+   typedef unknown_precision type;
+};
+
+template<> struct size_to_precision<4, true>
+{
+    typedef single_precision type;
+};
+
+template<> struct size_to_precision<8, true>
+{
+    typedef double_precision type;
+};
+
+template<> struct size_to_precision<10, true>
+{
+    typedef extended_double_precision type;
+};
+
+template<> struct size_to_precision<12, true>
+{
+    typedef extended_double_precision type;
+};
+
+template<> struct size_to_precision<16, true>
+{
+    typedef extended_double_precision type;
+};
+
+//------------------------------------------------------------------------------
+//
+// Figure out whether to use native classification functions based on
+// whether T is a built in floating point type or not:
+//
+template <class T>
+struct select_native
+{
+    typedef BOOST_DEDUCED_TYPENAME size_to_precision<sizeof(T), ::pdalboost::is_floating_point<T>::value>::type precision;
+    typedef fp_traits_non_native<T, precision> type;
+};
+template<>
+struct select_native<float>
+{
+    typedef fp_traits_native<float> type;
+};
+template<>
+struct select_native<double>
+{
+    typedef fp_traits_native<double> type;
+};
+template<>
+struct select_native<long double>
+{
+    typedef fp_traits_native<long double> type;
+};
+
+//------------------------------------------------------------------------------
+
+// fp_traits is a type switch that selects the right fp_traits_non_native
+
+#if (defined(BOOST_MATH_USE_C99) && !(defined(__GNUC__) && (__GNUC__ < 4))) \
+   && !defined(__hpux) \
+   && !defined(__DECCXX)\
+   && !defined(__osf__) \
+   && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)\
+   && !defined(__FAST_MATH__)\
+   && !defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY)\
+   && !defined(BOOST_INTEL)\
+   && !defined(sun)
+#  define BOOST_MATH_USE_STD_FPCLASSIFY
+#endif
+
+template<class T> struct fp_traits
+{
+    typedef BOOST_DEDUCED_TYPENAME size_to_precision<sizeof(T), ::pdalboost::is_floating_point<T>::value>::type precision;
+#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && !defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY)
+    typedef typename select_native<T>::type type;
+#else
+    typedef fp_traits_non_native<T, precision> type;
+#endif
+    typedef fp_traits_non_native<T, precision> sign_change_type;
+};
+
+//------------------------------------------------------------------------------
+
+}   // namespace detail
+}   // namespace math
+}   // namespace pdalboost
+
+#endif
diff --git a/vendor/pdalboost/boost/math/special_functions/detail/round_fwd.hpp b/vendor/pdalboost/boost/math/special_functions/detail/round_fwd.hpp
new file mode 100644
index 0000000..8709e1f
--- /dev/null
+++ b/vendor/pdalboost/boost/math/special_functions/detail/round_fwd.hpp
@@ -0,0 +1,93 @@
+// Copyright John Maddock 2008.
+
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_MATH_SPECIAL_ROUND_FWD_HPP
+#define BOOST_MATH_SPECIAL_ROUND_FWD_HPP
+
+#include <boost/config.hpp>
+#include <boost/math/tools/promotion.hpp>
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+namespace pdalboost
+{
+   namespace math
+   { 
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type trunc(const T& v, const Policy& pol);
+   template <class T>
+   typename tools::promote_args<T>::type trunc(const T& v);
+   template <class T, class Policy>
+   int itrunc(const T& v, const Policy& pol);
+   template <class T>
+   int itrunc(const T& v);
+   template <class T, class Policy>
+   long ltrunc(const T& v, const Policy& pol);
+   template <class T>
+   long ltrunc(const T& v);
+#ifdef BOOST_HAS_LONG_LONG
+   template <class T, class Policy>
+   pdalboost::long_long_type lltrunc(const T& v, const Policy& pol);
+   template <class T>
+   pdalboost::long_long_type lltrunc(const T& v);
+#endif
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type round(const T& v, const Policy& pol);
+   template <class T>
+   typename tools::promote_args<T>::type round(const T& v);
+   template <class T, class Policy>
+   int iround(const T& v, const Policy& pol);
+   template <class T>
+   int iround(const T& v);
+   template <class T, class Policy>
+   long lround(const T& v, const Policy& pol);
+   template <class T>
+   long lround(const T& v);
+#ifdef BOOST_HAS_LONG_LONG
+   template <class T, class Policy>
+   pdalboost::long_long_type llround(const T& v, const Policy& pol);
+   template <class T>
+   pdalboost::long_long_type llround(const T& v);
+#endif
+   template <class T, class Policy>
+   T modf(const T& v, T* ipart, const Policy& pol);
+   template <class T>
+   T modf(const T& v, T* ipart);
+   template <class T, class Policy>
+   T modf(const T& v, int* ipart, const Policy& pol);
+   template <class T>
+   T modf(const T& v, int* ipart);
+   template <class T, class Policy>
+   T modf(const T& v, long* ipart, const Policy& pol);
+   template <class T>
+   T modf(const T& v, long* ipart);
+#ifdef BOOST_HAS_LONG_LONG
+   template <class T, class Policy>
+   T modf(const T& v, pdalboost::long_long_type* ipart, const Policy& pol);
+   template <class T>
+   T modf(const T& v, pdalboost::long_long_type* ipart);
+#endif
+
+   }
+}
+
+#undef BOOST_MATH_STD_USING
+#define BOOST_MATH_STD_USING BOOST_MATH_STD_USING_CORE\
+   using pdalboost::math::round;\
+   using pdalboost::math::iround;\
+   using pdalboost::math::lround;\
+   using pdalboost::math::trunc;\
+   using pdalboost::math::itrunc;\
+   using pdalboost::math::ltrunc;\
+   using pdalboost::math::modf;
+
+
+#endif // BOOST_MATH_SPECIAL_ROUND_FWD_HPP
+
diff --git a/vendor/pdalboost/boost/math/special_functions/fpclassify.hpp b/vendor/pdalboost/boost/math/special_functions/fpclassify.hpp
new file mode 100644
index 0000000..c103ecd
--- /dev/null
+++ b/vendor/pdalboost/boost/math/special_functions/fpclassify.hpp
@@ -0,0 +1,626 @@
+//  Copyright John Maddock 2005-2008.
+//  Copyright (c) 2006-2008 Johan Rade
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_MATH_FPCLASSIFY_HPP
+#define BOOST_MATH_FPCLASSIFY_HPP
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+#include <math.h>
+#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/limits.hpp>
+#include <boost/math/tools/real_cast.hpp>
+#include <boost/type_traits/is_floating_point.hpp>
+#include <boost/math/special_functions/math_fwd.hpp>
+#include <boost/math/special_functions/detail/fp_traits.hpp>
+/*!
+  \file fpclassify.hpp
+  \brief Classify floating-point value as normal, subnormal, zero, infinite, or NaN.
+  \version 1.0
+  \author John Maddock
+ */
+
+/*
+
+1. If the platform is C99 compliant, then the native floating point
+classification functions are used.  However, note that we must only
+define the functions which call std::fpclassify etc if that function
+really does exist: otherwise a compiler may reject the code even though
+the template is never instantiated.
+
+2. If the platform is not C99 compliant, and the binary format for
+a floating point type (float, double or long double) can be determined
+at compile time, then the following algorithm is used:
+
+        If all exponent bits, the flag bit (if there is one),
+        and all significand bits are 0, then the number is zero.
+
+        If all exponent bits and the flag bit (if there is one) are 0,
+        and at least one significand bit is 1, then the number is subnormal.
+
+        If all exponent bits are 1 and all significand bits are 0,
+        then the number is infinity.
+
+        If all exponent bits are 1 and at least one significand bit is 1,
+        then the number is a not-a-number.
+
+        Otherwise the number is normal.
+
+        This algorithm works for the IEEE 754 representation,
+        and also for several non IEEE 754 formats.
+
+    Most formats have the structure
+        sign bit + exponent bits + significand bits.
+
+    A few have the structure
+        sign bit + exponent bits + flag bit + significand bits.
+    The flag bit is 0 for zero and subnormal numbers,
+        and 1 for normal numbers and NaN.
+        It is 0 (Motorola 68K) or 1 (Intel) for infinity.
+
+    To get the bits, the four or eight most significant bytes are copied
+    into an uint32_t or uint64_t and bit masks are applied.
+    This covers all the exponent bits and the flag bit (if there is one),
+    but not always all the significand bits.
+    Some of the functions below have two implementations,
+    depending on whether all the significand bits are copied or not.
+
+3. If the platform is not C99 compliant, and the binary format for
+a floating point type (float, double or long double) can not be determined
+at compile time, then comparison with std::numeric_limits values
+is used.
+
+*/
+
+#if defined(_MSC_VER) || defined(__BORLANDC__)
+#include <float.h>
+#endif
+#ifdef BOOST_MATH_USE_FLOAT128
+#include "quadmath.h"
+#endif
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+  namespace std{ using ::abs; using ::fabs; }
+#endif
+
+namespace pdalboost{
+
+//
+// This must not be located in any namespace under pdalboost::math
+// otherwise we can get into an infinite loop if isnan is
+// a #define for "isnan" !
+//
+namespace math_detail{
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4800)
+#endif
+
+template <class T>
+inline bool is_nan_helper(T t, const pdalboost::true_type&)
+{
+#ifdef isnan
+   return isnan(t);
+#elif defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY) || !defined(BOOST_HAS_FPCLASSIFY)
+   (void)t;
+   return false;
+#else // BOOST_HAS_FPCLASSIFY
+   return (BOOST_FPCLASSIFY_PREFIX fpclassify(t) == (int)FP_NAN);
+#endif
+}
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+template <class T>
+inline bool is_nan_helper(T, const pdalboost::false_type&)
+{
+   return false;
+}
+#ifdef BOOST_MATH_USE_FLOAT128
+inline bool is_nan_helper(__float128 f, const pdalboost::true_type&) { return ::isnanq(f); }
+inline bool is_nan_helper(__float128 f, const pdalboost::false_type&) { return ::isnanq(f); }
+#endif
+}
+
+namespace math{
+
+namespace detail{
+
+#ifdef BOOST_MATH_USE_STD_FPCLASSIFY
+template <class T>
+inline int fpclassify_imp BOOST_NO_MACRO_EXPAND(T t, const native_tag&)
+{
+   return (std::fpclassify)(t);
+}
+#endif
+
+template <class T>
+inline int fpclassify_imp BOOST_NO_MACRO_EXPAND(T t, const generic_tag<true>&)
+{
+   BOOST_MATH_INSTRUMENT_VARIABLE(t);
+
+   // whenever possible check for Nan's first:
+#if defined(BOOST_HAS_FPCLASSIFY)  && !defined(BOOST_MATH_DISABLE_STD_FPCLASSIFY)
+   if(::pdalboost::math_detail::is_nan_helper(t, ::pdalboost::is_floating_point<T>()))
+      return FP_NAN;
+#elif defined(isnan)
+   if(pdalboost::math_detail::is_nan_helper(t, ::pdalboost::is_floating_point<T>()))
+      return FP_NAN;
+#elif defined(_MSC_VER) || defined(__BORLANDC__)
+   if(::_isnan(pdalboost::math::tools::real_cast<double>(t)))
+      return FP_NAN;
+#endif
+   // std::fabs broken on a few systems especially for long long!!!!
+   T at = (t < T(0)) ? -t : t;
+
+   // Use a process of exclusion to figure out
+   // what kind of type we have, this relies on
+   // IEEE conforming reals that will treat
+   // Nan's as unordered.  Some compilers
+   // don't do this once optimisations are
+   // turned on, hence the check for nan's above.
+   if(at <= (std::numeric_limits<T>::max)())
+   {
+      if(at >= (std::numeric_limits<T>::min)())
+         return FP_NORMAL;
+      return (at != 0) ? FP_SUBNORMAL : FP_ZERO;
+   }
+   else if(at > (std::numeric_limits<T>::max)())
+      return FP_INFINITE;
+   return FP_NAN;
+}
+
+template <class T>
+inline int fpclassify_imp BOOST_NO_MACRO_EXPAND(T t, const generic_tag<false>&)
+{
+#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+   if(std::numeric_limits<T>::is_specialized)
+      return fpclassify_imp(t, generic_tag<true>());
+#endif
+   //
+   // An unknown type with no numeric_limits support,
+   // so what are we supposed to do we do here?
+   //
+   BOOST_MATH_INSTRUMENT_VARIABLE(t);
+
+   return t == 0 ? FP_ZERO : FP_NORMAL;
+}
+
+template<class T>
+int fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_all_bits_tag)
+{
+   typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
+
+   BOOST_MATH_INSTRUMENT_VARIABLE(x);
+
+   BOOST_DEDUCED_TYPENAME traits::bits a;
+   traits::get_bits(x,a);
+   BOOST_MATH_INSTRUMENT_VARIABLE(a);
+   a &= traits::exponent | traits::flag | traits::significand;
+   BOOST_MATH_INSTRUMENT_VARIABLE((traits::exponent | traits::flag | traits::significand));
+   BOOST_MATH_INSTRUMENT_VARIABLE(a);
+
+   if(a <= traits::significand) {
+      if(a == 0)
+         return FP_ZERO;
+      else
+         return FP_SUBNORMAL;
+   }
+
+   if(a < traits::exponent) return FP_NORMAL;
+
+   a &= traits::significand;
+   if(a == 0) return FP_INFINITE;
+
+   return FP_NAN;
+}
+
+template<class T>
+int fpclassify_imp BOOST_NO_MACRO_EXPAND(T x, ieee_copy_leading_bits_tag)
+{
+   typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
+
+   BOOST_MATH_INSTRUMENT_VARIABLE(x);
+
+   BOOST_DEDUCED_TYPENAME traits::bits a;
+   traits::get_bits(x,a);
+   a &= traits::exponent | traits::flag | traits::significand;
+
+   if(a <= traits::significand) {
+      if(x == 0)
+         return FP_ZERO;
+      else
+         return FP_SUBNORMAL;
+   }
+
+   if(a < traits::exponent) return FP_NORMAL;
+
+   a &= traits::significand;
+   traits::set_bits(x,a);
+   if(x == 0) return FP_INFINITE;
+
+   return FP_NAN;
+}
+
+#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && (defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY) || defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS))
+inline int fpclassify_imp BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
+{
+   return pdalboost::math::detail::fpclassify_imp(t, generic_tag<true>());
+}
+#endif
+
+}  // namespace detail
+
+template <class T>
+inline int fpclassify BOOST_NO_MACRO_EXPAND(T t)
+{
+   typedef typename detail::fp_traits<T>::type traits;
+   typedef typename traits::method method;
+   typedef typename tools::promote_args_permissive<T>::type value_type;
+#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+   if(std::numeric_limits<T>::is_specialized && detail::is_generic_tag_false(static_cast<method*>(0)))
+      return detail::fpclassify_imp(static_cast<value_type>(t), detail::generic_tag<true>());
+   return detail::fpclassify_imp(static_cast<value_type>(t), method());
+#else
+   return detail::fpclassify_imp(static_cast<value_type>(t), method());
+#endif
+}
+
+#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+template <>
+inline int fpclassify<long double> BOOST_NO_MACRO_EXPAND(long double t)
+{
+   typedef detail::fp_traits<long double>::type traits;
+   typedef traits::method method;
+   typedef long double value_type;
+#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+   if(std::numeric_limits<long double>::is_specialized && detail::is_generic_tag_false(static_cast<method*>(0)))
+      return detail::fpclassify_imp(static_cast<value_type>(t), detail::generic_tag<true>());
+   return detail::fpclassify_imp(static_cast<value_type>(t), method());
+#else
+   return detail::fpclassify_imp(static_cast<value_type>(t), method());
+#endif
+}
+#endif
+
+namespace detail {
+
+#ifdef BOOST_MATH_USE_STD_FPCLASSIFY
+    template<class T>
+    inline bool isfinite_impl(T x, native_tag const&)
+    {
+        return (std::isfinite)(x);
+    }
+#endif
+
+    template<class T>
+    inline bool isfinite_impl(T x, generic_tag<true> const&)
+    {
+        return x >= -(std::numeric_limits<T>::max)()
+            && x <= (std::numeric_limits<T>::max)();
+    }
+
+    template<class T>
+    inline bool isfinite_impl(T x, generic_tag<false> const&)
+    {
+#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+      if(std::numeric_limits<T>::is_specialized)
+         return isfinite_impl(x, generic_tag<true>());
+#endif
+       (void)x; // warning suppression.
+       return true;
+    }
+
+    template<class T>
+    inline bool isfinite_impl(T x, ieee_tag const&)
+    {
+        typedef BOOST_DEDUCED_TYPENAME detail::fp_traits<T>::type traits;
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+        a &= traits::exponent;
+        return a != traits::exponent;
+    }
+
+#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY)
+inline bool isfinite_impl BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
+{
+   return pdalboost::math::detail::isfinite_impl(t, generic_tag<true>());
+}
+#endif
+
+}
+
+template<class T>
+inline bool (isfinite)(T x)
+{ //!< \brief return true if floating-point type t is finite.
+   typedef typename detail::fp_traits<T>::type traits;
+   typedef typename traits::method method;
+   // typedef typename pdalboost::is_floating_point<T>::type fp_tag;
+   typedef typename tools::promote_args_permissive<T>::type value_type;
+   return detail::isfinite_impl(static_cast<value_type>(x), method());
+}
+
+#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+template<>
+inline bool (isfinite)(long double x)
+{ //!< \brief return true if floating-point type t is finite.
+   typedef detail::fp_traits<long double>::type traits;
+   typedef traits::method method;
+   //typedef pdalboost::is_floating_point<long double>::type fp_tag;
+   typedef long double value_type;
+   return detail::isfinite_impl(static_cast<value_type>(x), method());
+}
+#endif
+
+//------------------------------------------------------------------------------
+
+namespace detail {
+
+#ifdef BOOST_MATH_USE_STD_FPCLASSIFY
+    template<class T>
+    inline bool isnormal_impl(T x, native_tag const&)
+    {
+        return (std::isnormal)(x);
+    }
+#endif
+
+    template<class T>
+    inline bool isnormal_impl(T x, generic_tag<true> const&)
+    {
+        if(x < 0) x = -x;
+        return x >= (std::numeric_limits<T>::min)()
+            && x <= (std::numeric_limits<T>::max)();
+    }
+
+    template<class T>
+    inline bool isnormal_impl(T x, generic_tag<false> const&)
+    {
+#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+      if(std::numeric_limits<T>::is_specialized)
+         return isnormal_impl(x, generic_tag<true>());
+#endif
+       return !(x == 0);
+    }
+
+    template<class T>
+    inline bool isnormal_impl(T x, ieee_tag const&)
+    {
+        typedef BOOST_DEDUCED_TYPENAME detail::fp_traits<T>::type traits;
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+        a &= traits::exponent | traits::flag;
+        return (a != 0) && (a < traits::exponent);
+    }
+
+#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY)
+inline bool isnormal_impl BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
+{
+   return pdalboost::math::detail::isnormal_impl(t, generic_tag<true>());
+}
+#endif
+
+}
+
+template<class T>
+inline bool (isnormal)(T x)
+{
+   typedef typename detail::fp_traits<T>::type traits;
+   typedef typename traits::method method;
+   //typedef typename pdalboost::is_floating_point<T>::type fp_tag;
+   typedef typename tools::promote_args_permissive<T>::type value_type;
+   return detail::isnormal_impl(static_cast<value_type>(x), method());
+}
+
+#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+template<>
+inline bool (isnormal)(long double x)
+{
+   typedef detail::fp_traits<long double>::type traits;
+   typedef traits::method method;
+   //typedef pdalboost::is_floating_point<long double>::type fp_tag;
+   typedef long double value_type;
+   return detail::isnormal_impl(static_cast<value_type>(x), method());
+}
+#endif
+
+//------------------------------------------------------------------------------
+
+namespace detail {
+
+#ifdef BOOST_MATH_USE_STD_FPCLASSIFY
+    template<class T>
+    inline bool isinf_impl(T x, native_tag const&)
+    {
+        return (std::isinf)(x);
+    }
+#endif
+
+    template<class T>
+    inline bool isinf_impl(T x, generic_tag<true> const&)
+    {
+        (void)x; // in case the compiler thinks that x is unused because std::numeric_limits<T>::has_infinity is false
+        return std::numeric_limits<T>::has_infinity
+            && ( x == std::numeric_limits<T>::infinity()
+                 || x == -std::numeric_limits<T>::infinity());
+    }
+
+    template<class T>
+    inline bool isinf_impl(T x, generic_tag<false> const&)
+    {
+#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+      if(std::numeric_limits<T>::is_specialized)
+         return isinf_impl(x, generic_tag<true>());
+#endif
+        (void)x; // warning suppression.
+        return false;
+    }
+
+    template<class T>
+    inline bool isinf_impl(T x, ieee_copy_all_bits_tag const&)
+    {
+        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
+
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+        a &= traits::exponent | traits::significand;
+        return a == traits::exponent;
+    }
+
+    template<class T>
+    inline bool isinf_impl(T x, ieee_copy_leading_bits_tag const&)
+    {
+        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
+
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+        a &= traits::exponent | traits::significand;
+        if(a != traits::exponent)
+            return false;
+
+        traits::set_bits(x,0);
+        return x == 0;
+    }
+
+#if defined(BOOST_MATH_USE_STD_FPCLASSIFY) && defined(BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY)
+inline bool isinf_impl BOOST_NO_MACRO_EXPAND(long double t, const native_tag&)
+{
+   return pdalboost::math::detail::isinf_impl(t, generic_tag<true>());
+}
+#endif
+
+}   // namespace detail
+
+template<class T>
+inline bool (isinf)(T x)
+{
+   typedef typename detail::fp_traits<T>::type traits;
+   typedef typename traits::method method;
+   // typedef typename pdalboost::is_floating_point<T>::type fp_tag;
+   typedef typename tools::promote_args_permissive<T>::type value_type;
+   return detail::isinf_impl(static_cast<value_type>(x), method());
+}
+
+#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+template<>
+inline bool (isinf)(long double x)
+{
+   typedef detail::fp_traits<long double>::type traits;
+   typedef traits::method method;
+   //typedef pdalboost::is_floating_point<long double>::type fp_tag;
+   typedef long double value_type;
+   return detail::isinf_impl(static_cast<value_type>(x), method());
+}
+#endif
+#ifdef BOOST_MATH_USE_FLOAT128
+template<>
+inline bool (isinf)(__float128 x)
+{
+   return ::isinfq(x);
+}
+#endif
+
+//------------------------------------------------------------------------------
+
+namespace detail {
+
+#ifdef BOOST_MATH_USE_STD_FPCLASSIFY
+    template<class T>
+    inline bool isnan_impl(T x, native_tag const&)
+    {
+        return (std::isnan)(x);
+    }
+#endif
+
+    template<class T>
+    inline bool isnan_impl(T x, generic_tag<true> const&)
+    {
+        return std::numeric_limits<T>::has_infinity
+            ? !(x <= std::numeric_limits<T>::infinity())
+            : x != x;
+    }
+
+    template<class T>
+    inline bool isnan_impl(T x, generic_tag<false> const&)
+    {
+#ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+      if(std::numeric_limits<T>::is_specialized)
+         return isnan_impl(x, generic_tag<true>());
+#endif
+        (void)x; // warning suppression
+        return false;
+    }
+
+    template<class T>
+    inline bool isnan_impl(T x, ieee_copy_all_bits_tag const&)
+    {
+        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
+
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+        a &= traits::exponent | traits::significand;
+        return a > traits::exponent;
+    }
+
+    template<class T>
+    inline bool isnan_impl(T x, ieee_copy_leading_bits_tag const&)
+    {
+        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
+
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+
+        a &= traits::exponent | traits::significand;
+        if(a < traits::exponent)
+            return false;
+
+        a &= traits::significand;
+        traits::set_bits(x,a);
+        return x != 0;
+    }
+
+}   // namespace detail
+
+template<class T>
+inline bool (isnan)(T x)
+{ //!< \brief return true if floating-point type t is NaN (Not A Number).
+   typedef typename detail::fp_traits<T>::type traits;
+   typedef typename traits::method method;
+   // typedef typename pdalboost::is_floating_point<T>::type fp_tag;
+   return detail::isnan_impl(x, method());
+}
+
+#ifdef isnan
+template <> inline bool isnan BOOST_NO_MACRO_EXPAND<float>(float t){ return ::pdalboost::math_detail::is_nan_helper(t, pdalboost::true_type()); }
+template <> inline bool isnan BOOST_NO_MACRO_EXPAND<double>(double t){ return ::pdalboost::math_detail::is_nan_helper(t, pdalboost::true_type()); }
+template <> inline bool isnan BOOST_NO_MACRO_EXPAND<long double>(long double t){ return ::pdalboost::math_detail::is_nan_helper(t, pdalboost::true_type()); }
+#elif defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)
+template<>
+inline bool (isnan)(long double x)
+{ //!< \brief return true if floating-point type t is NaN (Not A Number).
+   typedef detail::fp_traits<long double>::type traits;
+   typedef traits::method method;
+   //typedef pdalboost::is_floating_point<long double>::type fp_tag;
+   return detail::isnan_impl(x, method());
+}
+#endif
+#ifdef BOOST_MATH_USE_FLOAT128
+template<>
+inline bool (isnan)(__float128 x)
+{
+   return ::isnanq(x);
+}
+#endif
+
+} // namespace math
+} // namespace pdalboost
+
+#endif // BOOST_MATH_FPCLASSIFY_HPP
+
diff --git a/vendor/pdalboost/boost/math/special_functions/math_fwd.hpp b/vendor/pdalboost/boost/math/special_functions/math_fwd.hpp
new file mode 100644
index 0000000..bf9413c
--- /dev/null
+++ b/vendor/pdalboost/boost/math/special_functions/math_fwd.hpp
@@ -0,0 +1,1586 @@
+// math_fwd.hpp
+
+// TODO revise completely for new distribution classes.
+
+// Copyright Paul A. Bristow 2006.
+// Copyright John Maddock 2006.
+
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// Omnibus list of forward declarations of math special functions.
+
+// IT = Integer type.
+// RT = Real type (built-in floating-point types, float, double, long double) & User Defined Types
+// AT = Integer or Real type
+
+#ifndef BOOST_MATH_SPECIAL_MATH_FWD_HPP
+#define BOOST_MATH_SPECIAL_MATH_FWD_HPP
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+#include <boost/math/special_functions/detail/round_fwd.hpp>
+#include <boost/math/tools/promotion.hpp> // for argument promotion.
+#include <boost/math/policies/policy.hpp>
+#include <boost/mpl/comparison.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/config/no_tr1/complex.hpp>
+
+#define BOOST_NO_MACRO_EXPAND /**/
+
+namespace pdalboost
+{
+   namespace math
+   { // Math functions (in roughly alphabetic order).
+
+   // Beta functions.
+   template <class RT1, class RT2>
+   typename tools::promote_args<RT1, RT2>::type
+         beta(RT1 a, RT2 b); // Beta function (2 arguments).
+
+   template <class RT1, class RT2, class A>
+   typename tools::promote_args<RT1, RT2, A>::type
+         beta(RT1 a, RT2 b, A x); // Beta function (3 arguments).
+
+   template <class RT1, class RT2, class RT3, class Policy>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         beta(RT1 a, RT2 b, RT3 x, const Policy& pol); // Beta function (3 arguments).
+
+   template <class RT1, class RT2, class RT3>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         betac(RT1 a, RT2 b, RT3 x);
+
+   template <class RT1, class RT2, class RT3, class Policy>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         betac(RT1 a, RT2 b, RT3 x, const Policy& pol);
+
+   template <class RT1, class RT2, class RT3>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibeta(RT1 a, RT2 b, RT3 x); // Incomplete beta function.
+
+   template <class RT1, class RT2, class RT3, class Policy>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibeta(RT1 a, RT2 b, RT3 x, const Policy& pol); // Incomplete beta function.
+
+   template <class RT1, class RT2, class RT3>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibetac(RT1 a, RT2 b, RT3 x); // Incomplete beta complement function.
+
+   template <class RT1, class RT2, class RT3, class Policy>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibetac(RT1 a, RT2 b, RT3 x, const Policy& pol); // Incomplete beta complement function.
+
+   template <class T1, class T2, class T3, class T4>
+   typename tools::promote_args<T1, T2, T3, T4>::type
+         ibeta_inv(T1 a, T2 b, T3 p, T4* py);
+
+   template <class T1, class T2, class T3, class T4, class Policy>
+   typename tools::promote_args<T1, T2, T3, T4>::type
+         ibeta_inv(T1 a, T2 b, T3 p, T4* py, const Policy& pol);
+
+   template <class RT1, class RT2, class RT3>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibeta_inv(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function.
+
+   template <class RT1, class RT2, class RT3, class Policy>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibeta_inv(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function.
+
+   template <class RT1, class RT2, class RT3>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibeta_inva(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function.
+
+   template <class RT1, class RT2, class RT3, class Policy>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibeta_inva(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function.
+
+   template <class RT1, class RT2, class RT3>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibeta_invb(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function.
+
+   template <class RT1, class RT2, class RT3, class Policy>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibeta_invb(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function.
+
+   template <class T1, class T2, class T3, class T4>
+   typename tools::promote_args<T1, T2, T3, T4>::type
+         ibetac_inv(T1 a, T2 b, T3 q, T4* py);
+
+   template <class T1, class T2, class T3, class T4, class Policy>
+   typename tools::promote_args<T1, T2, T3, T4>::type
+         ibetac_inv(T1 a, T2 b, T3 q, T4* py, const Policy& pol);
+
+   template <class RT1, class RT2, class RT3>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibetac_inv(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function.
+
+   template <class RT1, class RT2, class RT3, class Policy>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibetac_inv(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function.
+
+   template <class RT1, class RT2, class RT3>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibetac_inva(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function.
+
+   template <class RT1, class RT2, class RT3, class Policy>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibetac_inva(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function.
+
+   template <class RT1, class RT2, class RT3>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibetac_invb(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function.
+
+   template <class RT1, class RT2, class RT3, class Policy>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibetac_invb(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function.
+
+   template <class RT1, class RT2, class RT3>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibeta_derivative(RT1 a, RT2 b, RT3 x);  // derivative of incomplete beta
+
+   template <class RT1, class RT2, class RT3, class Policy>
+   typename tools::promote_args<RT1, RT2, RT3>::type
+         ibeta_derivative(RT1 a, RT2 b, RT3 x, const Policy& pol);  // derivative of incomplete beta
+
+   // Binomial:
+   template <class T, class Policy>
+   T binomial_coefficient(unsigned n, unsigned k, const Policy& pol);
+   template <class T>
+   T binomial_coefficient(unsigned n, unsigned k);
+
+   // erf & erfc error functions.
+   template <class RT> // Error function.
+   typename tools::promote_args<RT>::type erf(RT z);
+   template <class RT, class Policy> // Error function.
+   typename tools::promote_args<RT>::type erf(RT z, const Policy&);
+
+   template <class RT>// Error function complement.
+   typename tools::promote_args<RT>::type erfc(RT z);
+   template <class RT, class Policy>// Error function complement.
+   typename tools::promote_args<RT>::type erfc(RT z, const Policy&);
+
+   template <class RT>// Error function inverse.
+   typename tools::promote_args<RT>::type erf_inv(RT z);
+   template <class RT, class Policy>// Error function inverse.
+   typename tools::promote_args<RT>::type erf_inv(RT z, const Policy& pol);
+
+   template <class RT>// Error function complement inverse.
+   typename tools::promote_args<RT>::type erfc_inv(RT z);
+   template <class RT, class Policy>// Error function complement inverse.
+   typename tools::promote_args<RT>::type erfc_inv(RT z, const Policy& pol);
+
+   // Polynomials:
+   template <class T1, class T2, class T3>
+   typename tools::promote_args<T1, T2, T3>::type
+         legendre_next(unsigned l, T1 x, T2 Pl, T3 Plm1);
+
+   template <class T>
+   typename tools::promote_args<T>::type
+         legendre_p(int l, T x);
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+   template <class T, class Policy>
+   typename pdalboost::enable_if_c<policies::is_policy<Policy>::value, typename tools::promote_args<T>::type>::type
+         legendre_p(int l, T x, const Policy& pol);
+#endif
+   template <class T>
+   typename tools::promote_args<T>::type
+         legendre_q(unsigned l, T x);
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+   template <class T, class Policy>
+   typename pdalboost::enable_if_c<policies::is_policy<Policy>::value, typename tools::promote_args<T>::type>::type
+         legendre_q(unsigned l, T x, const Policy& pol);
+#endif
+   template <class T1, class T2, class T3>
+   typename tools::promote_args<T1, T2, T3>::type
+         legendre_next(unsigned l, unsigned m, T1 x, T2 Pl, T3 Plm1);
+
+   template <class T>
+   typename tools::promote_args<T>::type
+         legendre_p(int l, int m, T x);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type
+         legendre_p(int l, int m, T x, const Policy& pol);
+
+   template <class T1, class T2, class T3>
+   typename tools::promote_args<T1, T2, T3>::type
+         laguerre_next(unsigned n, T1 x, T2 Ln, T3 Lnm1);
+
+   template <class T1, class T2, class T3>
+   typename tools::promote_args<T1, T2, T3>::type
+      laguerre_next(unsigned n, unsigned l, T1 x, T2 Pl, T3 Plm1);
+
+   template <class T>
+   typename tools::promote_args<T>::type
+      laguerre(unsigned n, T x);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type
+      laguerre(unsigned n, unsigned m, T x, const Policy& pol);
+
+   template <class T1, class T2>
+   struct laguerre_result
+   {
+      typedef typename mpl::if_<
+         policies::is_policy<T2>,
+         typename tools::promote_args<T1>::type,
+         typename tools::promote_args<T2>::type
+      >::type type;
+   };
+
+   template <class T1, class T2>
+   typename laguerre_result<T1, T2>::type
+      laguerre(unsigned n, T1 m, T2 x);
+
+   template <class T>
+   typename tools::promote_args<T>::type
+      hermite(unsigned n, T x);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type
+      hermite(unsigned n, T x, const Policy& pol);
+
+   template <class T1, class T2, class T3>
+   typename tools::promote_args<T1, T2, T3>::type
+      hermite_next(unsigned n, T1 x, T2 Hn, T3 Hnm1);
+
+   template <class T1, class T2>
+   std::complex<typename tools::promote_args<T1, T2>::type>
+         spherical_harmonic(unsigned n, int m, T1 theta, T2 phi);
+
+   template <class T1, class T2, class Policy>
+   std::complex<typename tools::promote_args<T1, T2>::type>
+      spherical_harmonic(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type
+         spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type
+      spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type
+         spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type
+      spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);
+
+   // Elliptic integrals:
+   template <class T1, class T2, class T3>
+   typename tools::promote_args<T1, T2, T3>::type
+         ellint_rf(T1 x, T2 y, T3 z);
+
+   template <class T1, class T2, class T3, class Policy>
+   typename tools::promote_args<T1, T2, T3>::type
+         ellint_rf(T1 x, T2 y, T3 z, const Policy& pol);
+
+   template <class T1, class T2, class T3>
+   typename tools::promote_args<T1, T2, T3>::type
+         ellint_rd(T1 x, T2 y, T3 z);
+
+   template <class T1, class T2, class T3, class Policy>
+   typename tools::promote_args<T1, T2, T3>::type
+         ellint_rd(T1 x, T2 y, T3 z, const Policy& pol);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type
+         ellint_rc(T1 x, T2 y);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type
+         ellint_rc(T1 x, T2 y, const Policy& pol);
+
+   template <class T1, class T2, class T3, class T4>
+   typename tools::promote_args<T1, T2, T3, T4>::type
+         ellint_rj(T1 x, T2 y, T3 z, T4 p);
+
+   template <class T1, class T2, class T3, class T4, class Policy>
+   typename tools::promote_args<T1, T2, T3, T4>::type
+         ellint_rj(T1 x, T2 y, T3 z, T4 p, const Policy& pol);
+
+   template <class T1, class T2, class T3>
+   typename tools::promote_args<T1, T2, T3>::type
+      ellint_rg(T1 x, T2 y, T3 z);
+
+   template <class T1, class T2, class T3, class Policy>
+   typename tools::promote_args<T1, T2, T3>::type
+      ellint_rg(T1 x, T2 y, T3 z, const Policy& pol);
+
+   template <typename T>
+   typename tools::promote_args<T>::type ellint_2(T k);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type ellint_2(T1 k, T2 phi);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type ellint_2(T1 k, T2 phi, const Policy& pol);
+
+   template <typename T>
+   typename tools::promote_args<T>::type ellint_1(T k);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type ellint_1(T1 k, T2 phi);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type ellint_1(T1 k, T2 phi, const Policy& pol);
+
+   template <typename T>
+   typename tools::promote_args<T>::type ellint_d(T k);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type ellint_d(T1 k, T2 phi);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type ellint_d(T1 k, T2 phi, const Policy& pol);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type jacobi_zeta(T1 k, T2 phi);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type jacobi_zeta(T1 k, T2 phi, const Policy& pol);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type heuman_lambda(T1 k, T2 phi);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type heuman_lambda(T1 k, T2 phi, const Policy& pol);
+
+   namespace detail{
+
+   template <class T, class U, class V>
+   struct ellint_3_result
+   {
+      typedef typename mpl::if_<
+         policies::is_policy<V>,
+         typename tools::promote_args<T, U>::type,
+         typename tools::promote_args<T, U, V>::type
+      >::type type;
+   };
+
+   } // namespace detail
+
+
+   template <class T1, class T2, class T3>
+   typename detail::ellint_3_result<T1, T2, T3>::type ellint_3(T1 k, T2 v, T3 phi);
+
+   template <class T1, class T2, class T3, class Policy>
+   typename tools::promote_args<T1, T2, T3>::type ellint_3(T1 k, T2 v, T3 phi, const Policy& pol);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type ellint_3(T1 k, T2 v);
+
+   // Factorial functions.
+   // Note: not for integral types, at present.
+   template <class RT>
+   struct max_factorial;
+   template <class RT>
+   RT factorial(unsigned int);
+   template <class RT, class Policy>
+   RT factorial(unsigned int, const Policy& pol);
+   template <class RT>
+   RT unchecked_factorial(unsigned int BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(RT));
+   template <class RT>
+   RT double_factorial(unsigned i);
+   template <class RT, class Policy>
+   RT double_factorial(unsigned i, const Policy& pol);
+
+   template <class RT>
+   typename tools::promote_args<RT>::type falling_factorial(RT x, unsigned n);
+
+   template <class RT, class Policy>
+   typename tools::promote_args<RT>::type falling_factorial(RT x, unsigned n, const Policy& pol);
+
+   template <class RT>
+   typename tools::promote_args<RT>::type rising_factorial(RT x, int n);
+
+   template <class RT, class Policy>
+   typename tools::promote_args<RT>::type rising_factorial(RT x, int n, const Policy& pol);
+
+   // Gamma functions.
+   template <class RT>
+   typename tools::promote_args<RT>::type tgamma(RT z);
+
+   template <class RT>
+   typename tools::promote_args<RT>::type tgamma1pm1(RT z);
+
+   template <class RT, class Policy>
+   typename tools::promote_args<RT>::type tgamma1pm1(RT z, const Policy& pol);
+
+   template <class RT1, class RT2>
+   typename tools::promote_args<RT1, RT2>::type tgamma(RT1 a, RT2 z);
+
+   template <class RT1, class RT2, class Policy>
+   typename tools::promote_args<RT1, RT2>::type tgamma(RT1 a, RT2 z, const Policy& pol);
+
+   template <class RT>
+   typename tools::promote_args<RT>::type lgamma(RT z, int* sign);
+
+   template <class RT, class Policy>
+   typename tools::promote_args<RT>::type lgamma(RT z, int* sign, const Policy& pol);
+
+   template <class RT>
+   typename tools::promote_args<RT>::type lgamma(RT x);
+
+   template <class RT, class Policy>
+   typename tools::promote_args<RT>::type lgamma(RT x, const Policy& pol);
+
+   template <class RT1, class RT2>
+   typename tools::promote_args<RT1, RT2>::type tgamma_lower(RT1 a, RT2 z);
+
+   template <class RT1, class RT2, class Policy>
+   typename tools::promote_args<RT1, RT2>::type tgamma_lower(RT1 a, RT2 z, const Policy&);
+
+   template <class RT1, class RT2>
+   typename tools::promote_args<RT1, RT2>::type gamma_q(RT1 a, RT2 z);
+
+   template <class RT1, class RT2, class Policy>
+   typename tools::promote_args<RT1, RT2>::type gamma_q(RT1 a, RT2 z, const Policy&);
+
+   template <class RT1, class RT2>
+   typename tools::promote_args<RT1, RT2>::type gamma_p(RT1 a, RT2 z);
+
+   template <class RT1, class RT2, class Policy>
+   typename tools::promote_args<RT1, RT2>::type gamma_p(RT1 a, RT2 z, const Policy&);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type tgamma_delta_ratio(T1 z, T2 delta);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type tgamma_delta_ratio(T1 z, T2 delta, const Policy&);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type tgamma_ratio(T1 a, T2 b);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type tgamma_ratio(T1 a, T2 b, const Policy&);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type gamma_p_derivative(T1 a, T2 x);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type gamma_p_derivative(T1 a, T2 x, const Policy&);
+
+   // gamma inverse.
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type gamma_p_inv(T1 a, T2 p);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type gamma_p_inva(T1 a, T2 p, const Policy&);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type gamma_p_inva(T1 a, T2 p);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type gamma_p_inv(T1 a, T2 p, const Policy&);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type gamma_q_inv(T1 a, T2 q);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type gamma_q_inv(T1 a, T2 q, const Policy&);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type gamma_q_inva(T1 a, T2 q);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type gamma_q_inva(T1 a, T2 q, const Policy&);
+
+   // digamma:
+   template <class T>
+   typename tools::promote_args<T>::type digamma(T x);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type digamma(T x, const Policy&);
+
+   // trigamma:
+   template <class T>
+   typename tools::promote_args<T>::type trigamma(T x);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type trigamma(T x, const Policy&);
+
+   // polygamma:
+   template <class T>
+   typename tools::promote_args<T>::type polygamma(int n, T x);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type polygamma(int n, T x, const Policy&);
+
+   // Hypotenuse function sqrt(x ^ 2 + y ^ 2).
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type
+         hypot(T1 x, T2 y);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type
+         hypot(T1 x, T2 y, const Policy&);
+
+   // cbrt - cube root.
+   template <class RT>
+   typename tools::promote_args<RT>::type cbrt(RT z);
+
+   template <class RT, class Policy>
+   typename tools::promote_args<RT>::type cbrt(RT z, const Policy&);
+
+   // log1p is log(x + 1)
+   template <class T>
+   typename tools::promote_args<T>::type log1p(T);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type log1p(T, const Policy&);
+
+   // log1pmx is log(x + 1) - x
+   template <class T>
+   typename tools::promote_args<T>::type log1pmx(T);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type log1pmx(T, const Policy&);
+
+   // Exp (x) minus 1 functions.
+   template <class T>
+   typename tools::promote_args<T>::type expm1(T);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type expm1(T, const Policy&);
+
+   // Power - 1
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type
+         powm1(const T1 a, const T2 z);
+
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type
+         powm1(const T1 a, const T2 z, const Policy&);
+
+   // sqrt(1+x) - 1
+   template <class T>
+   typename tools::promote_args<T>::type sqrt1pm1(const T& val);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type sqrt1pm1(const T& val, const Policy&);
+
+   // sinus cardinals:
+   template <class T>
+   typename tools::promote_args<T>::type sinc_pi(T x);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type sinc_pi(T x, const Policy&);
+
+   template <class T>
+   typename tools::promote_args<T>::type sinhc_pi(T x);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type sinhc_pi(T x, const Policy&);
+
+   // inverse hyperbolics:
+   template<typename T>
+   typename tools::promote_args<T>::type asinh(T x);
+
+   template<typename T, class Policy>
+   typename tools::promote_args<T>::type asinh(T x, const Policy&);
+
+   template<typename T>
+   typename tools::promote_args<T>::type acosh(T x);
+
+   template<typename T, class Policy>
+   typename tools::promote_args<T>::type acosh(T x, const Policy&);
+
+   template<typename T>
+   typename tools::promote_args<T>::type atanh(T x);
+
+   template<typename T, class Policy>
+   typename tools::promote_args<T>::type atanh(T x, const Policy&);
+
+   namespace detail{
+
+      typedef mpl::int_<0> bessel_no_int_tag;      // No integer optimisation possible.
+      typedef mpl::int_<1> bessel_maybe_int_tag;   // Maybe integer optimisation.
+      typedef mpl::int_<2> bessel_int_tag;         // Definite integer optimistaion.
+
+      template <class T1, class T2, class Policy>
+      struct bessel_traits
+      {
+         typedef typename mpl::if_<
+            is_integral<T1>,
+            typename tools::promote_args<T2>::type,
+            typename tools::promote_args<T1, T2>::type
+         >::type result_type;
+
+         typedef typename policies::precision<result_type, Policy>::type precision_type;
+
+         typedef typename mpl::if_<
+            mpl::or_<
+               mpl::less_equal<precision_type, mpl::int_<0> >,
+               mpl::greater<precision_type, mpl::int_<64> > >,
+            bessel_no_int_tag,
+            typename mpl::if_<
+               is_integral<T1>,
+               bessel_int_tag,
+               bessel_maybe_int_tag
+            >::type
+         >::type optimisation_tag;
+      };
+   } // detail
+
+   // Bessel functions:
+   template <class T1, class T2, class Policy>
+   typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_j(T1 v, T2 x, const Policy& pol);
+   template <class T1, class T2, class Policy>
+   typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_j_prime(T1 v, T2 x, const Policy& pol);
+
+   template <class T1, class T2>
+   typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_j(T1 v, T2 x);
+   template <class T1, class T2>
+   typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_j_prime(T1 v, T2 x);
+
+   template <class T, class Policy>
+   typename detail::bessel_traits<T, T, Policy>::result_type sph_bessel(unsigned v, T x, const Policy& pol);
+   template <class T, class Policy>
+   typename detail::bessel_traits<T, T, Policy>::result_type sph_bessel_prime(unsigned v, T x, const Policy& pol);
+
+   template <class T>
+   typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_bessel(unsigned v, T x);
+   template <class T>
+   typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_bessel_prime(unsigned v, T x);
+
+   template <class T1, class T2, class Policy>
+   typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_i(T1 v, T2 x, const Policy& pol);
+   template <class T1, class T2, class Policy>
+   typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_i_prime(T1 v, T2 x, const Policy& pol);
+
+   template <class T1, class T2>
+   typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_i(T1 v, T2 x);
+   template <class T1, class T2>
+   typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_i_prime(T1 v, T2 x);
+
+   template <class T1, class T2, class Policy>
+   typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_k(T1 v, T2 x, const Policy& pol);
+   template <class T1, class T2, class Policy>
+   typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_k_prime(T1 v, T2 x, const Policy& pol);
+
+   template <class T1, class T2>
+   typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_k(T1 v, T2 x);
+   template <class T1, class T2>
+   typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_k_prime(T1 v, T2 x);
+
+   template <class T1, class T2, class Policy>
+   typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_neumann(T1 v, T2 x, const Policy& pol);
+   template <class T1, class T2, class Policy>
+   typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_neumann_prime(T1 v, T2 x, const Policy& pol);
+
+   template <class T1, class T2>
+   typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_neumann(T1 v, T2 x);
+   template <class T1, class T2>
+   typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_neumann_prime(T1 v, T2 x);
+
+   template <class T, class Policy>
+   typename detail::bessel_traits<T, T, Policy>::result_type sph_neumann(unsigned v, T x, const Policy& pol);
+   template <class T, class Policy>
+   typename detail::bessel_traits<T, T, Policy>::result_type sph_neumann_prime(unsigned v, T x, const Policy& pol);
+
+   template <class T>
+   typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_neumann(unsigned v, T x);
+   template <class T>
+   typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_neumann_prime(unsigned v, T x);
+
+   template <class T, class Policy>
+   typename detail::bessel_traits<T, T, Policy>::result_type cyl_bessel_j_zero(T v, int m, const Policy& pol);
+
+   template <class T>
+   typename detail::bessel_traits<T, T, policies::policy<> >::result_type cyl_bessel_j_zero(T v, int m);
+
+   template <class T, class OutputIterator>
+   OutputIterator cyl_bessel_j_zero(T v,
+                          int start_index,
+                          unsigned number_of_zeros,
+                          OutputIterator out_it);
+
+   template <class T, class OutputIterator, class Policy>
+   OutputIterator cyl_bessel_j_zero(T v,
+                          int start_index,
+                          unsigned number_of_zeros,
+                          OutputIterator out_it,
+                          const Policy&);
+
+   template <class T, class Policy>
+   typename detail::bessel_traits<T, T, Policy>::result_type cyl_neumann_zero(T v, int m, const Policy& pol);
+
+   template <class T>
+   typename detail::bessel_traits<T, T, policies::policy<> >::result_type cyl_neumann_zero(T v, int m);
+
+   template <class T, class OutputIterator>
+   OutputIterator cyl_neumann_zero(T v,
+                         int start_index,
+                         unsigned number_of_zeros,
+                         OutputIterator out_it);
+
+   template <class T, class OutputIterator, class Policy>
+   OutputIterator cyl_neumann_zero(T v,
+                         int start_index,
+                         unsigned number_of_zeros,
+                         OutputIterator out_it,
+                         const Policy&);
+
+   template <class T1, class T2>
+   std::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> cyl_hankel_1(T1 v, T2 x);
+
+   template <class T1, class T2, class Policy>
+   std::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> cyl_hankel_1(T1 v, T2 x, const Policy& pol);
+
+   template <class T1, class T2, class Policy>
+   std::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> cyl_hankel_2(T1 v, T2 x, const Policy& pol);
+
+   template <class T1, class T2>
+   std::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> cyl_hankel_2(T1 v, T2 x);
+
+   template <class T1, class T2, class Policy>
+   std::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> sph_hankel_1(T1 v, T2 x, const Policy& pol);
+
+   template <class T1, class T2>
+   std::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> sph_hankel_1(T1 v, T2 x);
+
+   template <class T1, class T2, class Policy>
+   std::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> sph_hankel_2(T1 v, T2 x, const Policy& pol);
+
+   template <class T1, class T2>
+   std::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> sph_hankel_2(T1 v, T2 x);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type airy_ai(T x, const Policy&);
+
+   template <class T>
+   typename tools::promote_args<T>::type airy_ai(T x);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type airy_bi(T x, const Policy&);
+
+   template <class T>
+   typename tools::promote_args<T>::type airy_bi(T x);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type airy_ai_prime(T x, const Policy&);
+
+   template <class T>
+   typename tools::promote_args<T>::type airy_ai_prime(T x);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type airy_bi_prime(T x, const Policy&);
+
+   template <class T>
+   typename tools::promote_args<T>::type airy_bi_prime(T x);
+
+   template <class T>
+   T airy_ai_zero(int m);
+   template <class T, class Policy>
+   T airy_ai_zero(int m, const Policy&);
+
+   template <class OutputIterator>
+   OutputIterator airy_ai_zero(
+                     int start_index,
+                     unsigned number_of_zeros,
+                     OutputIterator out_it);
+   template <class OutputIterator, class Policy>
+   OutputIterator airy_ai_zero(
+                     int start_index,
+                     unsigned number_of_zeros,
+                     OutputIterator out_it,
+                     const Policy&);
+
+   template <class T>
+   T airy_bi_zero(int m);
+   template <class T, class Policy>
+   T airy_bi_zero(int m, const Policy&);
+
+   template <class OutputIterator>
+   OutputIterator airy_bi_zero(
+                     int start_index,
+                     unsigned number_of_zeros,
+                     OutputIterator out_it);
+   template <class OutputIterator, class Policy>
+   OutputIterator airy_bi_zero(
+                     int start_index,
+                     unsigned number_of_zeros,
+                     OutputIterator out_it,
+                     const Policy&);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type sin_pi(T x, const Policy&);
+
+   template <class T>
+   typename tools::promote_args<T>::type sin_pi(T x);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type cos_pi(T x, const Policy&);
+
+   template <class T>
+   typename tools::promote_args<T>::type cos_pi(T x);
+
+   template <class T>
+   int fpclassify BOOST_NO_MACRO_EXPAND(T t);
+
+   template <class T>
+   bool isfinite BOOST_NO_MACRO_EXPAND(T z);
+
+   template <class T>
+   bool isinf BOOST_NO_MACRO_EXPAND(T t);
+
+   template <class T>
+   bool isnan BOOST_NO_MACRO_EXPAND(T t);
+
+   template <class T>
+   bool isnormal BOOST_NO_MACRO_EXPAND(T t);
+
+   template<class T>
+   int signbit BOOST_NO_MACRO_EXPAND(T x);
+
+   template <class T>
+   int sign BOOST_NO_MACRO_EXPAND(const T& z);
+
+   template <class T, class U>
+   typename tools::promote_args_permissive<T, U>::type copysign BOOST_NO_MACRO_EXPAND(const T& x, const U& y);
+
+   template <class T>
+   typename tools::promote_args_permissive<T>::type changesign BOOST_NO_MACRO_EXPAND(const T& z);
+
+   // Exponential integrals:
+   namespace detail{
+
+   template <class T, class U>
+   struct expint_result
+   {
+      typedef typename mpl::if_<
+         policies::is_policy<U>,
+         typename tools::promote_args<T>::type,
+         typename tools::promote_args<U>::type
+      >::type type;
+   };
+
+   } // namespace detail
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type expint(unsigned n, T z, const Policy&);
+
+   template <class T, class U>
+   typename detail::expint_result<T, U>::type expint(T const z, U const u);
+
+   template <class T>
+   typename tools::promote_args<T>::type expint(T z);
+
+   // Zeta:
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type zeta(T s, const Policy&);
+
+   // Owen's T function:
+   template <class T1, class T2, class Policy>
+   typename tools::promote_args<T1, T2>::type owens_t(T1 h, T2 a, const Policy& pol);
+
+   template <class T1, class T2>
+   typename tools::promote_args<T1, T2>::type owens_t(T1 h, T2 a);
+
+   // Jacobi Functions:
+   template <class T, class U, class V, class Policy>
+   typename tools::promote_args<T, U, V>::type jacobi_elliptic(T k, U theta, V* pcn, V* pdn, const Policy&);
+
+   template <class T, class U, class V>
+   typename tools::promote_args<T, U, V>::type jacobi_elliptic(T k, U theta, V* pcn = 0, V* pdn = 0);
+
+   template <class U, class T, class Policy>
+   typename tools::promote_args<T, U>::type jacobi_sn(U k, T theta, const Policy& pol);
+
+   template <class U, class T>
+   typename tools::promote_args<T, U>::type jacobi_sn(U k, T theta);
+
+   template <class T, class U, class Policy>
+   typename tools::promote_args<T, U>::type jacobi_cn(T k, U theta, const Policy& pol);
+
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type jacobi_cn(T k, U theta);
+
+   template <class T, class U, class Policy>
+   typename tools::promote_args<T, U>::type jacobi_dn(T k, U theta, const Policy& pol);
+
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type jacobi_dn(T k, U theta);
+
+   template <class T, class U, class Policy>
+   typename tools::promote_args<T, U>::type jacobi_cd(T k, U theta, const Policy& pol);
+
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type jacobi_cd(T k, U theta);
+
+   template <class T, class U, class Policy>
+   typename tools::promote_args<T, U>::type jacobi_dc(T k, U theta, const Policy& pol);
+
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type jacobi_dc(T k, U theta);
+
+   template <class T, class U, class Policy>
+   typename tools::promote_args<T, U>::type jacobi_ns(T k, U theta, const Policy& pol);
+
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type jacobi_ns(T k, U theta);
+
+   template <class T, class U, class Policy>
+   typename tools::promote_args<T, U>::type jacobi_sd(T k, U theta, const Policy& pol);
+
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type jacobi_sd(T k, U theta);
+
+   template <class T, class U, class Policy>
+   typename tools::promote_args<T, U>::type jacobi_ds(T k, U theta, const Policy& pol);
+
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type jacobi_ds(T k, U theta);
+
+   template <class T, class U, class Policy>
+   typename tools::promote_args<T, U>::type jacobi_nc(T k, U theta, const Policy& pol);
+
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type jacobi_nc(T k, U theta);
+
+   template <class T, class U, class Policy>
+   typename tools::promote_args<T, U>::type jacobi_nd(T k, U theta, const Policy& pol);
+
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type jacobi_nd(T k, U theta);
+
+   template <class T, class U, class Policy>
+   typename tools::promote_args<T, U>::type jacobi_sc(T k, U theta, const Policy& pol);
+
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type jacobi_sc(T k, U theta);
+
+   template <class T, class U, class Policy>
+   typename tools::promote_args<T, U>::type jacobi_cs(T k, U theta, const Policy& pol);
+
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type jacobi_cs(T k, U theta);
+
+
+   template <class T>
+   typename tools::promote_args<T>::type zeta(T s);
+
+   // pow:
+   template <int N, typename T, class Policy>
+   typename tools::promote_args<T>::type pow(T base, const Policy& policy);
+
+   template <int N, typename T>
+   typename tools::promote_args<T>::type pow(T base);
+
+   // next:
+   template <class T, class U, class Policy>
+   typename tools::promote_args<T, U>::type nextafter(const T&, const U&, const Policy&);
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type nextafter(const T&, const U&);
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type float_next(const T&, const Policy&);
+   template <class T>
+   typename tools::promote_args<T>::type float_next(const T&);
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type float_prior(const T&, const Policy&);
+   template <class T>
+   typename tools::promote_args<T>::type float_prior(const T&);
+   template <class T, class U, class Policy>
+   typename tools::promote_args<T, U>::type float_distance(const T&, const U&, const Policy&);
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type float_distance(const T&, const U&);
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type float_advance(T val, int distance, const Policy& pol);
+   template <class T>
+   typename tools::promote_args<T>::type float_advance(const T& val, int distance);
+
+   template <class T, class Policy>
+   typename tools::promote_args<T>::type ulp(const T& val, const Policy& pol);
+   template <class T>
+   typename tools::promote_args<T>::type ulp(const T& val);
+
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type relative_difference(const T&, const U&);
+   template <class T, class U>
+   typename tools::promote_args<T, U>::type epsilon_difference(const T&, const U&);
+
+   template<class T>
+   T unchecked_bernoulli_b2n(const std::size_t n);
+   template <class T, class Policy>
+   T bernoulli_b2n(const int i, const Policy &pol);
+   template <class T>
+   T bernoulli_b2n(const int i);
+   template <class T, class OutputIterator, class Policy>
+   OutputIterator bernoulli_b2n(const int start_index,
+                                       const unsigned number_of_bernoullis_b2n,
+                                       OutputIterator out_it,
+                                       const Policy& pol);
+   template <class T, class OutputIterator>
+   OutputIterator bernoulli_b2n(const int start_index,
+                                       const unsigned number_of_bernoullis_b2n,
+                                       OutputIterator out_it);
+   template <class T, class Policy>
+   T tangent_t2n(const int i, const Policy &pol);
+   template <class T>
+   T tangent_t2n(const int i);
+   template <class T, class OutputIterator, class Policy>
+   OutputIterator tangent_t2n(const int start_index,
+                                       const unsigned number_of_bernoullis_b2n,
+                                       OutputIterator out_it,
+                                       const Policy& pol);
+   template <class T, class OutputIterator>
+   OutputIterator tangent_t2n(const int start_index,
+                                       const unsigned number_of_bernoullis_b2n,
+                                       OutputIterator out_it);
+
+    } // namespace math
+} // namespace pdalboost
+
+#ifdef BOOST_HAS_LONG_LONG
+#define BOOST_MATH_DETAIL_LL_FUNC(Policy)\
+   \
+   template <class T>\
+   inline T modf(const T& v, pdalboost::long_long_type* ipart){ using pdalboost::math::modf; return modf(v, ipart, Policy()); }\
+   \
+   template <class T>\
+   inline pdalboost::long_long_type lltrunc(const T& v){ using pdalboost::math::lltrunc; return lltrunc(v, Policy()); }\
+   \
+   template <class T>\
+   inline pdalboost::long_long_type llround(const T& v){ using pdalboost::math::llround; return llround(v, Policy()); }\
+
+#else
+#define BOOST_MATH_DETAIL_LL_FUNC(Policy)
+#endif
+
+#define BOOST_MATH_DECLARE_SPECIAL_FUNCTIONS(Policy)\
+   \
+   BOOST_MATH_DETAIL_LL_FUNC(Policy)\
+   \
+   template <class RT1, class RT2>\
+   inline typename pdalboost::math::tools::promote_args<RT1, RT2>::type \
+   beta(RT1 a, RT2 b) { return ::pdalboost::math::beta(a, b, Policy()); }\
+\
+   template <class RT1, class RT2, class A>\
+   inline typename pdalboost::math::tools::promote_args<RT1, RT2, A>::type \
+   beta(RT1 a, RT2 b, A x){ return ::pdalboost::math::beta(a, b, x, Policy()); }\
+\
+   template <class RT1, class RT2, class RT3>\
+   inline typename pdalboost::math::tools::promote_args<RT1, RT2, RT3>::type \
+   betac(RT1 a, RT2 b, RT3 x) { return ::pdalboost::math::betac(a, b, x, Policy()); }\
+\
+   template <class RT1, class RT2, class RT3>\
+   inline typename pdalboost::math::tools::promote_args<RT1, RT2, RT3>::type \
+   ibeta(RT1 a, RT2 b, RT3 x){ return ::pdalboost::math::ibeta(a, b, x, Policy()); }\
+\
+   template <class RT1, class RT2, class RT3>\
+   inline typename pdalboost::math::tools::promote_args<RT1, RT2, RT3>::type \
+   ibetac(RT1 a, RT2 b, RT3 x){ return ::pdalboost::math::ibetac(a, b, x, Policy()); }\
+\
+   template <class T1, class T2, class T3, class T4>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2, T3, T4>::type  \
+   ibeta_inv(T1 a, T2 b, T3 p, T4* py){ return ::pdalboost::math::ibeta_inv(a, b, p, py, Policy()); }\
+\
+   template <class RT1, class RT2, class RT3>\
+   inline typename pdalboost::math::tools::promote_args<RT1, RT2, RT3>::type \
+   ibeta_inv(RT1 a, RT2 b, RT3 p){ return ::pdalboost::math::ibeta_inv(a, b, p, Policy()); }\
+\
+   template <class T1, class T2, class T3, class T4>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2, T3, T4>::type \
+   ibetac_inv(T1 a, T2 b, T3 q, T4* py){ return ::pdalboost::math::ibetac_inv(a, b, q, py, Policy()); }\
+\
+   template <class RT1, class RT2, class RT3>\
+   inline typename pdalboost::math::tools::promote_args<RT1, RT2, RT3>::type \
+   ibeta_inva(RT1 a, RT2 b, RT3 p){ return ::pdalboost::math::ibeta_inva(a, b, p, Policy()); }\
+\
+   template <class T1, class T2, class T3>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2, T3>::type \
+   ibetac_inva(T1 a, T2 b, T3 q){ return ::pdalboost::math::ibetac_inva(a, b, q, Policy()); }\
+\
+   template <class RT1, class RT2, class RT3>\
+   inline typename pdalboost::math::tools::promote_args<RT1, RT2, RT3>::type \
+   ibeta_invb(RT1 a, RT2 b, RT3 p){ return ::pdalboost::math::ibeta_invb(a, b, p, Policy()); }\
+\
+   template <class T1, class T2, class T3>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2, T3>::type \
+   ibetac_invb(T1 a, T2 b, T3 q){ return ::pdalboost::math::ibetac_invb(a, b, q, Policy()); }\
+\
+   template <class RT1, class RT2, class RT3>\
+   inline typename pdalboost::math::tools::promote_args<RT1, RT2, RT3>::type \
+   ibetac_inv(RT1 a, RT2 b, RT3 q){ return ::pdalboost::math::ibetac_inv(a, b, q, Policy()); }\
+\
+   template <class RT1, class RT2, class RT3>\
+   inline typename pdalboost::math::tools::promote_args<RT1, RT2, RT3>::type \
+   ibeta_derivative(RT1 a, RT2 b, RT3 x){ return ::pdalboost::math::ibeta_derivative(a, b, x, Policy()); }\
+\
+   template <class T> T binomial_coefficient(unsigned n, unsigned k){ return ::pdalboost::math::binomial_coefficient<T, Policy>(n, k, Policy()); }\
+\
+   template <class RT>\
+   inline typename pdalboost::math::tools::promote_args<RT>::type erf(RT z) { return ::pdalboost::math::erf(z, Policy()); }\
+\
+   template <class RT>\
+   inline typename pdalboost::math::tools::promote_args<RT>::type erfc(RT z){ return ::pdalboost::math::erfc(z, Policy()); }\
+\
+   template <class RT>\
+   inline typename pdalboost::math::tools::promote_args<RT>::type erf_inv(RT z) { return ::pdalboost::math::erf_inv(z, Policy()); }\
+\
+   template <class RT>\
+   inline typename pdalboost::math::tools::promote_args<RT>::type erfc_inv(RT z){ return ::pdalboost::math::erfc_inv(z, Policy()); }\
+\
+   using pdalboost::math::legendre_next;\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type \
+   legendre_p(int l, T x){ return ::pdalboost::math::legendre_p(l, x, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type \
+   legendre_q(unsigned l, T x){ return ::pdalboost::math::legendre_q(l, x, Policy()); }\
+\
+   using ::pdalboost::math::legendre_next;\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type \
+   legendre_p(int l, int m, T x){ return ::pdalboost::math::legendre_p(l, m, x, Policy()); }\
+\
+   using ::pdalboost::math::laguerre_next;\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type \
+   laguerre(unsigned n, T x){ return ::pdalboost::math::laguerre(n, x, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::laguerre_result<T1, T2>::type \
+   laguerre(unsigned n, T1 m, T2 x) { return ::pdalboost::math::laguerre(n, m, x, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type \
+   hermite(unsigned n, T x){ return ::pdalboost::math::hermite(n, x, Policy()); }\
+\
+   using pdalboost::math::hermite_next;\
+\
+   template <class T1, class T2>\
+   inline std::complex<typename pdalboost::math::tools::promote_args<T1, T2>::type> \
+   spherical_harmonic(unsigned n, int m, T1 theta, T2 phi){ return pdalboost::math::spherical_harmonic(n, m, theta, phi, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type \
+   spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi){ return ::pdalboost::math::spherical_harmonic_r(n, m, theta, phi, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type \
+   spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi){ return pdalboost::math::spherical_harmonic_i(n, m, theta, phi, Policy()); }\
+\
+   template <class T1, class T2, class Policy>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type \
+      spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);\
+\
+   template <class T1, class T2, class T3>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2, T3>::type \
+   ellint_rf(T1 x, T2 y, T3 z){ return ::pdalboost::math::ellint_rf(x, y, z, Policy()); }\
+\
+   template <class T1, class T2, class T3>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2, T3>::type \
+   ellint_rd(T1 x, T2 y, T3 z){ return ::pdalboost::math::ellint_rd(x, y, z, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type \
+   ellint_rc(T1 x, T2 y){ return ::pdalboost::math::ellint_rc(x, y, Policy()); }\
+\
+   template <class T1, class T2, class T3, class T4>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2, T3, T4>::type \
+   ellint_rj(T1 x, T2 y, T3 z, T4 p){ return pdalboost::math::ellint_rj(x, y, z, p, Policy()); }\
+\
+   template <class T1, class T2, class T3>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2, T3>::type \
+   ellint_rg(T1 x, T2 y, T3 z){ return ::pdalboost::math::ellint_rg(x, y, z, Policy()); }\
+   \
+   template <typename T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type ellint_2(T k){ return pdalboost::math::ellint_2(k, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type ellint_2(T1 k, T2 phi){ return pdalboost::math::ellint_2(k, phi, Policy()); }\
+\
+   template <typename T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type ellint_d(T k){ return pdalboost::math::ellint_d(k, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type ellint_d(T1 k, T2 phi){ return pdalboost::math::ellint_d(k, phi, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type jacobi_zeta(T1 k, T2 phi){ return pdalboost::math::jacobi_zeta(k, phi, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type heuman_lambda(T1 k, T2 phi){ return pdalboost::math::heuman_lambda(k, phi, Policy()); }\
+\
+   template <typename T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type ellint_1(T k){ return pdalboost::math::ellint_1(k, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type ellint_1(T1 k, T2 phi){ return pdalboost::math::ellint_1(k, phi, Policy()); }\
+\
+   template <class T1, class T2, class T3>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2, T3>::type ellint_3(T1 k, T2 v, T3 phi){ return pdalboost::math::ellint_3(k, v, phi, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type ellint_3(T1 k, T2 v){ return pdalboost::math::ellint_3(k, v, Policy()); }\
+\
+   using pdalboost::math::max_factorial;\
+   template <class RT>\
+   inline RT factorial(unsigned int i) { return pdalboost::math::factorial<RT>(i, Policy()); }\
+   using pdalboost::math::unchecked_factorial;\
+   template <class RT>\
+   inline RT double_factorial(unsigned i){ return pdalboost::math::double_factorial<RT>(i, Policy()); }\
+   template <class RT>\
+   inline typename pdalboost::math::tools::promote_args<RT>::type falling_factorial(RT x, unsigned n){ return pdalboost::math::falling_factorial(x, n, Policy()); }\
+   template <class RT>\
+   inline typename pdalboost::math::tools::promote_args<RT>::type rising_factorial(RT x, unsigned n){ return pdalboost::math::rising_factorial(x, n, Policy()); }\
+\
+   template <class RT>\
+   inline typename pdalboost::math::tools::promote_args<RT>::type tgamma(RT z){ return pdalboost::math::tgamma(z, Policy()); }\
+\
+   template <class RT>\
+   inline typename pdalboost::math::tools::promote_args<RT>::type tgamma1pm1(RT z){ return pdalboost::math::tgamma1pm1(z, Policy()); }\
+\
+   template <class RT1, class RT2>\
+   inline typename pdalboost::math::tools::promote_args<RT1, RT2>::type tgamma(RT1 a, RT2 z){ return pdalboost::math::tgamma(a, z, Policy()); }\
+\
+   template <class RT>\
+   inline typename pdalboost::math::tools::promote_args<RT>::type lgamma(RT z, int* sign){ return pdalboost::math::lgamma(z, sign, Policy()); }\
+\
+   template <class RT>\
+   inline typename pdalboost::math::tools::promote_args<RT>::type lgamma(RT x){ return pdalboost::math::lgamma(x, Policy()); }\
+\
+   template <class RT1, class RT2>\
+   inline typename pdalboost::math::tools::promote_args<RT1, RT2>::type tgamma_lower(RT1 a, RT2 z){ return pdalboost::math::tgamma_lower(a, z, Policy()); }\
+\
+   template <class RT1, class RT2>\
+   inline typename pdalboost::math::tools::promote_args<RT1, RT2>::type gamma_q(RT1 a, RT2 z){ return pdalboost::math::gamma_q(a, z, Policy()); }\
+\
+   template <class RT1, class RT2>\
+   inline typename pdalboost::math::tools::promote_args<RT1, RT2>::type gamma_p(RT1 a, RT2 z){ return pdalboost::math::gamma_p(a, z, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type tgamma_delta_ratio(T1 z, T2 delta){ return pdalboost::math::tgamma_delta_ratio(z, delta, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type tgamma_ratio(T1 a, T2 b) { return pdalboost::math::tgamma_ratio(a, b, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type gamma_p_derivative(T1 a, T2 x){ return pdalboost::math::gamma_p_derivative(a, x, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type gamma_p_inv(T1 a, T2 p){ return pdalboost::math::gamma_p_inv(a, p, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type gamma_p_inva(T1 a, T2 p){ return pdalboost::math::gamma_p_inva(a, p, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type gamma_q_inv(T1 a, T2 q){ return pdalboost::math::gamma_q_inv(a, q, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type gamma_q_inva(T1 a, T2 q){ return pdalboost::math::gamma_q_inva(a, q, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type digamma(T x){ return pdalboost::math::digamma(x, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type trigamma(T x){ return pdalboost::math::trigamma(x, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type polygamma(int n, T x){ return pdalboost::math::polygamma(n, x, Policy()); }\
+   \
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type \
+   hypot(T1 x, T2 y){ return pdalboost::math::hypot(x, y, Policy()); }\
+\
+   template <class RT>\
+   inline typename pdalboost::math::tools::promote_args<RT>::type cbrt(RT z){ return pdalboost::math::cbrt(z, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type log1p(T x){ return pdalboost::math::log1p(x, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type log1pmx(T x){ return pdalboost::math::log1pmx(x, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type expm1(T x){ return pdalboost::math::expm1(x, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::tools::promote_args<T1, T2>::type \
+   powm1(const T1 a, const T2 z){ return pdalboost::math::powm1(a, z, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type sqrt1pm1(const T& val){ return pdalboost::math::sqrt1pm1(val, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type sinc_pi(T x){ return pdalboost::math::sinc_pi(x, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type sinhc_pi(T x){ return pdalboost::math::sinhc_pi(x, Policy()); }\
+\
+   template<typename T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type asinh(const T x){ return pdalboost::math::asinh(x, Policy()); }\
+\
+   template<typename T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type acosh(const T x){ return pdalboost::math::acosh(x, Policy()); }\
+\
+   template<typename T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type atanh(const T x){ return pdalboost::math::atanh(x, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::detail::bessel_traits<T1, T2, Policy >::result_type cyl_bessel_j(T1 v, T2 x)\
+   { return pdalboost::math::cyl_bessel_j(v, x, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::detail::bessel_traits<T1, T2, Policy >::result_type cyl_bessel_j_prime(T1 v, T2 x)\
+   { return pdalboost::math::cyl_bessel_j_prime(v, x, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::detail::bessel_traits<T, T, Policy >::result_type sph_bessel(unsigned v, T x)\
+   { return pdalboost::math::sph_bessel(v, x, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::detail::bessel_traits<T, T, Policy >::result_type sph_bessel_prime(unsigned v, T x)\
+   { return pdalboost::math::sph_bessel_prime(v, x, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
+   cyl_bessel_i(T1 v, T2 x) { return pdalboost::math::cyl_bessel_i(v, x, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
+   cyl_bessel_i_prime(T1 v, T2 x) { return pdalboost::math::cyl_bessel_i_prime(v, x, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
+   cyl_bessel_k(T1 v, T2 x) { return pdalboost::math::cyl_bessel_k(v, x, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
+   cyl_bessel_k_prime(T1 v, T2 x) { return pdalboost::math::cyl_bessel_k_prime(v, x, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
+   cyl_neumann(T1 v, T2 x){ return pdalboost::math::cyl_neumann(v, x, Policy()); }\
+\
+   template <class T1, class T2>\
+   inline typename pdalboost::math::detail::bessel_traits<T1, T2, Policy >::result_type \
+   cyl_neumann_prime(T1 v, T2 x){ return pdalboost::math::cyl_neumann_prime(v, x, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::detail::bessel_traits<T, T, Policy >::result_type \
+   sph_neumann(unsigned v, T x){ return pdalboost::math::sph_neumann(v, x, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::detail::bessel_traits<T, T, Policy >::result_type \
+   sph_neumann_prime(unsigned v, T x){ return pdalboost::math::sph_neumann_prime(v, x, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::detail::bessel_traits<T, T, Policy >::result_type cyl_bessel_j_zero(T v, int m)\
+   { return pdalboost::math::cyl_bessel_j_zero(v, m, Policy()); }\
+\
+template <class OutputIterator, class T>\
+   inline void cyl_bessel_j_zero(T v,\
+                                 int start_index,\
+                                 unsigned number_of_zeros,\
+                                 OutputIterator out_it)\
+   { pdalboost::math::cyl_bessel_j_zero(v, start_index, number_of_zeros, out_it, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::detail::bessel_traits<T, T, Policy >::result_type cyl_neumann_zero(T v, int m)\
+   { return pdalboost::math::cyl_neumann_zero(v, m, Policy()); }\
+\
+template <class OutputIterator, class T>\
+   inline void cyl_neumann_zero(T v,\
+                                int start_index,\
+                                unsigned number_of_zeros,\
+                                OutputIterator out_it)\
+   { pdalboost::math::cyl_neumann_zero(v, start_index, number_of_zeros, out_it, Policy()); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type sin_pi(T x){ return pdalboost::math::sin_pi(x); }\
+\
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type cos_pi(T x){ return pdalboost::math::cos_pi(x); }\
+\
+   using pdalboost::math::fpclassify;\
+   using pdalboost::math::isfinite;\
+   using pdalboost::math::isinf;\
+   using pdalboost::math::isnan;\
+   using pdalboost::math::isnormal;\
+   using pdalboost::math::signbit;\
+   using pdalboost::math::sign;\
+   using pdalboost::math::copysign;\
+   using pdalboost::math::changesign;\
+   \
+   template <class T, class U>\
+   inline typename pdalboost::math::tools::promote_args<T,U>::type expint(T const& z, U const& u)\
+   { return pdalboost::math::expint(z, u, Policy()); }\
+   \
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type expint(T z){ return pdalboost::math::expint(z, Policy()); }\
+   \
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type zeta(T s){ return pdalboost::math::zeta(s, Policy()); }\
+   \
+   template <class T>\
+   inline T round(const T& v){ using pdalboost::math::round; return round(v, Policy()); }\
+   \
+   template <class T>\
+   inline int iround(const T& v){ using pdalboost::math::iround; return iround(v, Policy()); }\
+   \
+   template <class T>\
+   inline long lround(const T& v){ using pdalboost::math::lround; return lround(v, Policy()); }\
+   \
+   template <class T>\
+   inline T trunc(const T& v){ using pdalboost::math::trunc; return trunc(v, Policy()); }\
+   \
+   template <class T>\
+   inline int itrunc(const T& v){ using pdalboost::math::itrunc; return itrunc(v, Policy()); }\
+   \
+   template <class T>\
+   inline long ltrunc(const T& v){ using pdalboost::math::ltrunc; return ltrunc(v, Policy()); }\
+   \
+   template <class T>\
+   inline T modf(const T& v, T* ipart){ using pdalboost::math::modf; return modf(v, ipart, Policy()); }\
+   \
+   template <class T>\
+   inline T modf(const T& v, int* ipart){ using pdalboost::math::modf; return modf(v, ipart, Policy()); }\
+   \
+   template <class T>\
+   inline T modf(const T& v, long* ipart){ using pdalboost::math::modf; return modf(v, ipart, Policy()); }\
+   \
+   template <int N, class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type pow(T v){ return pdalboost::math::pow<N>(v, Policy()); }\
+   \
+   template <class T> T nextafter(const T& a, const T& b){ return pdalboost::math::nextafter(a, b, Policy()); }\
+   template <class T> T float_next(const T& a){ return pdalboost::math::float_next(a, Policy()); }\
+   template <class T> T float_prior(const T& a){ return pdalboost::math::float_prior(a, Policy()); }\
+   template <class T> T float_distance(const T& a, const T& b){ return pdalboost::math::float_distance(a, b, Policy()); }\
+   template <class T> T ulp(const T& a){ return pdalboost::math::ulp(a, Policy()); }\
+   \
+   template <class RT1, class RT2>\
+   inline typename pdalboost::math::tools::promote_args<RT1, RT2>::type owens_t(RT1 a, RT2 z){ return pdalboost::math::owens_t(a, z, Policy()); }\
+   \
+   template <class T1, class T2>\
+   inline std::complex<typename pdalboost::math::detail::bessel_traits<T1, T2, Policy >::result_type> cyl_hankel_1(T1 v, T2 x)\
+   {  return pdalboost::math::cyl_hankel_1(v, x, Policy()); }\
+   \
+   template <class T1, class T2>\
+   inline std::complex<typename pdalboost::math::detail::bessel_traits<T1, T2, Policy >::result_type> cyl_hankel_2(T1 v, T2 x)\
+   { return pdalboost::math::cyl_hankel_2(v, x, Policy()); }\
+   \
+   template <class T1, class T2>\
+   inline std::complex<typename pdalboost::math::detail::bessel_traits<T1, T2, Policy >::result_type> sph_hankel_1(T1 v, T2 x)\
+   { return pdalboost::math::sph_hankel_1(v, x, Policy()); }\
+   \
+   template <class T1, class T2>\
+   inline std::complex<typename pdalboost::math::detail::bessel_traits<T1, T2, Policy >::result_type> sph_hankel_2(T1 v, T2 x)\
+   { return pdalboost::math::sph_hankel_2(v, x, Policy()); }\
+   \
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type jacobi_elliptic(T k, T theta, T* pcn, T* pdn)\
+   { return pdalboost::math::jacobi_elliptic(k, theta, pcn, pdn, Policy()); }\
+   \
+   template <class U, class T>\
+   inline typename pdalboost::math::tools::promote_args<T, U>::type jacobi_sn(U k, T theta)\
+   { return pdalboost::math::jacobi_sn(k, theta, Policy()); }\
+   \
+   template <class T, class U>\
+   inline typename pdalboost::math::tools::promote_args<T, U>::type jacobi_cn(T k, U theta)\
+   { return pdalboost::math::jacobi_cn(k, theta, Policy()); }\
+   \
+   template <class T, class U>\
+   inline typename pdalboost::math::tools::promote_args<T, U>::type jacobi_dn(T k, U theta)\
+   { return pdalboost::math::jacobi_dn(k, theta, Policy()); }\
+   \
+   template <class T, class U>\
+   inline typename pdalboost::math::tools::promote_args<T, U>::type jacobi_cd(T k, U theta)\
+   { return pdalboost::math::jacobi_cd(k, theta, Policy()); }\
+   \
+   template <class T, class U>\
+   inline typename pdalboost::math::tools::promote_args<T, U>::type jacobi_dc(T k, U theta)\
+   { return pdalboost::math::jacobi_dc(k, theta, Policy()); }\
+   \
+   template <class T, class U>\
+   inline typename pdalboost::math::tools::promote_args<T, U>::type jacobi_ns(T k, U theta)\
+   { return pdalboost::math::jacobi_ns(k, theta, Policy()); }\
+   \
+   template <class T, class U>\
+   inline typename pdalboost::math::tools::promote_args<T, U>::type jacobi_sd(T k, U theta)\
+   { return pdalboost::math::jacobi_sd(k, theta, Policy()); }\
+   \
+   template <class T, class U>\
+   inline typename pdalboost::math::tools::promote_args<T, U>::type jacobi_ds(T k, U theta)\
+   { return pdalboost::math::jacobi_ds(k, theta, Policy()); }\
+   \
+   template <class T, class U>\
+   inline typename pdalboost::math::tools::promote_args<T, U>::type jacobi_nc(T k, U theta)\
+   { return pdalboost::math::jacobi_nc(k, theta, Policy()); }\
+   \
+   template <class T, class U>\
+   inline typename pdalboost::math::tools::promote_args<T, U>::type jacobi_nd(T k, U theta)\
+   { return pdalboost::math::jacobi_nd(k, theta, Policy()); }\
+   \
+   template <class T, class U>\
+   inline typename pdalboost::math::tools::promote_args<T, U>::type jacobi_sc(T k, U theta)\
+   { return pdalboost::math::jacobi_sc(k, theta, Policy()); }\
+   \
+   template <class T, class U>\
+   inline typename pdalboost::math::tools::promote_args<T, U>::type jacobi_cs(T k, U theta)\
+   { return pdalboost::math::jacobi_cs(k, theta, Policy()); }\
+   \
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type airy_ai(T x)\
+   {  return pdalboost::math::airy_ai(x, Policy());  }\
+   \
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type airy_bi(T x)\
+   {  return pdalboost::math::airy_bi(x, Policy());  }\
+   \
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type airy_ai_prime(T x)\
+   {  return pdalboost::math::airy_ai_prime(x, Policy());  }\
+   \
+   template <class T>\
+   inline typename pdalboost::math::tools::promote_args<T>::type airy_bi_prime(T x)\
+   {  return pdalboost::math::airy_bi_prime(x, Policy());  }\
+   \
+   template <class T>\
+   inline T airy_ai_zero(int m)\
+   { return pdalboost::math::airy_ai_zero<T>(m, Policy()); }\
+   template <class T, class OutputIterator>\
+   OutputIterator airy_ai_zero(int start_index, unsigned number_of_zeros, OutputIterator out_it)\
+   { return pdalboost::math::airy_ai_zero<T>(start_index, number_of_zeros, out_it, Policy()); }\
+   \
+   template <class T>\
+   inline T airy_bi_zero(int m)\
+   { return pdalboost::math::airy_bi_zero<T>(m, Policy()); }\
+   template <class T, class OutputIterator>\
+   OutputIterator airy_bi_zero(int start_index, unsigned number_of_zeros, OutputIterator out_it)\
+   { return pdalboost::math::airy_bi_zero<T>(start_index, number_of_zeros, out_it, Policy()); }\
+   \
+   template <class T>\
+   T bernoulli_b2n(const int i)\
+   { return pdalboost::math::bernoulli_b2n<T>(i, Policy()); }\
+   template <class T, class OutputIterator>\
+   OutputIterator bernoulli_b2n(int start_index, unsigned number_of_bernoullis_b2n, OutputIterator out_it)\
+   { return pdalboost::math::bernoulli_b2n<T>(start_index, number_of_bernoullis_b2n, out_it, Policy()); }\
+   \
+   template <class T>\
+   T tangent_t2n(const int i)\
+   { return pdalboost::math::tangent_t2n<T>(i, Policy()); }\
+   template <class T, class OutputIterator>\
+   OutputIterator tangent_t2n(int start_index, unsigned number_of_bernoullis_b2n, OutputIterator out_it)\
+   { return pdalboost::math::tangent_t2n<T>(start_index, number_of_bernoullis_b2n, out_it, Policy()); }\
+   \
+
+
+
+
+
+#endif // BOOST_MATH_SPECIAL_MATH_FWD_HPP
+
+
diff --git a/vendor/pdalboost/boost/math/special_functions/sign.hpp b/vendor/pdalboost/boost/math/special_functions/sign.hpp
new file mode 100644
index 0000000..82615f5
--- /dev/null
+++ b/vendor/pdalboost/boost/math/special_functions/sign.hpp
@@ -0,0 +1,194 @@
+//  (C) Copyright John Maddock 2006.
+//  (C) Copyright Johan Rade 2006.
+//  (C) Copyright Paul A. Bristow 2011 (added changesign).
+
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_MATH_TOOLS_SIGN_HPP
+#define BOOST_MATH_TOOLS_SIGN_HPP
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+#include <boost/math/tools/config.hpp>
+#include <boost/math/special_functions/math_fwd.hpp>
+#include <boost/math/special_functions/detail/fp_traits.hpp>
+
+namespace pdalboost{ namespace math{ 
+
+namespace detail {
+
+  // signbit
+
+#ifdef BOOST_MATH_USE_STD_FPCLASSIFY
+    template<class T> 
+    inline int signbit_impl(T x, native_tag const&)
+    {
+        return (std::signbit)(x);
+    }
+#endif
+
+    // Generic versions first, note that these do not handle
+    // signed zero or NaN.
+
+    template<class T>
+    inline int signbit_impl(T x, generic_tag<true> const&)
+    {
+        return x < 0;
+    }
+
+    template<class T> 
+    inline int signbit_impl(T x, generic_tag<false> const&)
+    {
+        return x < 0;
+    }
+
+#if defined(__GNUC__) && (LDBL_MANT_DIG == 106)
+    //
+    // Special handling for GCC's "double double" type, 
+    // in this case the sign is the same as the sign we
+    // get by casting to double, no overflow/underflow
+    // can occur since the exponents are the same magnitude
+    // for the two types:
+    //
+    inline int signbit_impl(long double x, generic_tag<true> const&)
+    {
+       return (pdalboost::math::signbit)(static_cast<double>(x));
+    }
+    inline int signbit_impl(long double x, generic_tag<false> const&)
+    {
+       return (pdalboost::math::signbit)(static_cast<double>(x));
+    }
+#endif
+
+    template<class T>
+    inline int signbit_impl(T x, ieee_copy_all_bits_tag const&)
+    {
+        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
+
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+        return a & traits::sign ? 1 : 0;
+    }
+
+    template<class T> 
+    inline int signbit_impl(T x, ieee_copy_leading_bits_tag const&)
+    {
+        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::type traits;
+
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+
+        return a & traits::sign ? 1 : 0;
+    }
+
+    // Changesign
+    
+    // Generic versions first, note that these do not handle
+    // signed zero or NaN.
+
+    template<class T>
+    inline T (changesign_impl)(T x, generic_tag<true> const&)
+    {
+        return -x;
+    }
+
+    template<class T>
+    inline T (changesign_impl)(T x, generic_tag<false> const&)
+    {
+        return -x;
+    }
+#if defined(__GNUC__) && (LDBL_MANT_DIG == 106)
+    //
+    // Special handling for GCC's "double double" type, 
+    // in this case we need to change the sign of both
+    // components of the "double double":
+    //
+    inline long double (changesign_impl)(long double x, generic_tag<true> const&)
+    {
+       double* pd = reinterpret_cast<double*>(&x);
+       pd[0] = pdalboost::math::changesign(pd[0]);
+       pd[1] = pdalboost::math::changesign(pd[1]);
+       return x;
+    }
+    inline long double (changesign_impl)(long double x, generic_tag<false> const&)
+    {
+       double* pd = reinterpret_cast<double*>(&x);
+       pd[0] = pdalboost::math::changesign(pd[0]);
+       pd[1] = pdalboost::math::changesign(pd[1]);
+       return x;
+    }
+#endif
+
+    template<class T>
+    inline T changesign_impl(T x, ieee_copy_all_bits_tag const&)
+    {
+        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::sign_change_type traits;
+
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+        a ^= traits::sign;
+        traits::set_bits(x,a);
+        return x;
+    }
+
+    template<class T>
+    inline T (changesign_impl)(T x, ieee_copy_leading_bits_tag const&)
+    {
+        typedef BOOST_DEDUCED_TYPENAME fp_traits<T>::sign_change_type traits;
+
+        BOOST_DEDUCED_TYPENAME traits::bits a;
+        traits::get_bits(x,a);
+        a ^= traits::sign;
+        traits::set_bits(x,a);
+        return x;
+    }
+
+
+}   // namespace detail
+
+template<class T> int (signbit)(T x)
+{ 
+   typedef typename detail::fp_traits<T>::type traits;
+   typedef typename traits::method method;
+   // typedef typename pdalboost::is_floating_point<T>::type fp_tag;
+   typedef typename tools::promote_args_permissive<T>::type result_type;
+   return detail::signbit_impl(static_cast<result_type>(x), method());
+}
+
+template <class T>
+inline int sign BOOST_NO_MACRO_EXPAND(const T& z)
+{
+   return (z == 0) ? 0 : (pdalboost::math::signbit)(z) ? -1 : 1;
+}
+
+template <class T> typename tools::promote_args_permissive<T>::type (changesign)(const T& x)
+{ //!< \brief return unchanged binary pattern of x, except for change of sign bit. 
+   typedef typename detail::fp_traits<T>::sign_change_type traits;
+   typedef typename traits::method method;
+   // typedef typename pdalboost::is_floating_point<T>::type fp_tag;
+   typedef typename tools::promote_args_permissive<T>::type result_type;
+
+   return detail::changesign_impl(static_cast<result_type>(x), method());
+}
+
+template <class T, class U>
+inline typename tools::promote_args_permissive<T, U>::type 
+   copysign BOOST_NO_MACRO_EXPAND(const T& x, const U& y)
+{
+   BOOST_MATH_STD_USING
+   typedef typename tools::promote_args_permissive<T, U>::type result_type;
+   return (pdalboost::math::signbit)(static_cast<result_type>(x)) != (pdalboost::math::signbit)(static_cast<result_type>(y)) 
+      ? (pdalboost::math::changesign)(static_cast<result_type>(x)) : static_cast<result_type>(x);
+}
+
+} // namespace math
+} // namespace pdalboost
+
+
+#endif // BOOST_MATH_TOOLS_SIGN_HPP
+
+
diff --git a/vendor/pdalboost/boost/math/tools/config.hpp b/vendor/pdalboost/boost/math/tools/config.hpp
new file mode 100644
index 0000000..c3f73ce
--- /dev/null
+++ b/vendor/pdalboost/boost/math/tools/config.hpp
@@ -0,0 +1,462 @@
+//  Copyright (c) 2006-7 John Maddock
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_MATH_TOOLS_CONFIG_HPP
+#define BOOST_MATH_TOOLS_CONFIG_HPP
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/predef.h>
+#include <boost/cstdint.hpp> // for pdalboost::uintmax_t
+#include <boost/detail/workaround.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <algorithm>  // for min and max
+#include <boost/config/no_tr1/cmath.hpp>
+#include <climits>
+#include <cfloat>
+#if (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))
+#  include <math.h>
+#endif
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+#  include <limits>
+#endif
+
+#include <boost/math/tools/user.hpp>
+
+#if (defined(__CYGWIN__) || defined(__FreeBSD__) || defined(__NetBSD__) \
+   || (defined(__hppa) && !defined(__OpenBSD__)) || (defined(__NO_LONG_DOUBLE_MATH) && (DBL_MANT_DIG != LDBL_MANT_DIG))) \
+   && !defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)
+#  define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+#endif
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+//
+// Borland post 5.8.2 uses Dinkumware's std C lib which
+// doesn't have true long double precision.  Earlier
+// versions are problematic too:
+//
+#  define BOOST_MATH_NO_REAL_CONCEPT_TESTS
+#  define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+#  define BOOST_MATH_CONTROL_FP _control87(MCW_EM,MCW_EM)
+#  include <float.h>
+#endif
+#ifdef __IBMCPP__
+//
+// For reasons I don't unserstand, the tests with IMB's compiler all
+// pass at long double precision, but fail with real_concept, those tests
+// are disabled for now.  (JM 2012).
+#  define BOOST_MATH_NO_REAL_CONCEPT_TESTS
+#endif
+#ifdef sun
+// Any use of __float128 in program startup code causes a segfault  (tested JM 2015, Solaris 11).
+#  define BOOST_MATH_DISABLE_FLOAT128
+#endif
+#ifdef __HAIKU__
+//
+// Not sure what's up with the math detection on Haiku, but linking fails with
+// float128 code enabled, and we don't have an implementation of __expl, so
+// disabling long double functions for now as well.
+#  define BOOST_MATH_DISABLE_FLOAT128
+#  define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+#endif
+#if (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) && ((LDBL_MANT_DIG == 106) || (__LDBL_MANT_DIG__ == 106)) && !defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)
+//
+// Darwin's rather strange "double double" is rather hard to
+// support, it should be possible given enough effort though...
+//
+#  define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+#endif
+#if defined(unix) && defined(__INTEL_COMPILER) && (__INTEL_COMPILER <= 1000) && !defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)
+//
+// Intel compiler prior to version 10 has sporadic problems
+// calling the long double overloads of the std lib math functions:
+// calling ::powl is OK, but std::pow(long double, long double) 
+// may segfault depending upon the value of the arguments passed 
+// and the specific Linux distribution.
+//
+// We'll be conservative and disable long double support for this compiler.
+//
+// Comment out this #define and try building the tests to determine whether
+// your Intel compiler version has this issue or not.
+//
+#  define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+#endif
+#if defined(unix) && defined(__INTEL_COMPILER)
+//
+// Intel compiler has sporadic issues compiling std::fpclassify depending on
+// the exact OS version used.  Use our own code for this as we know it works
+// well on Intel processors:
+//
+#define BOOST_MATH_DISABLE_STD_FPCLASSIFY
+#endif
+
+#if defined(BOOST_MSVC) && !defined(_WIN32_WCE)
+   // Better safe than sorry, our tests don't support hardware exceptions:
+#  define BOOST_MATH_CONTROL_FP _control87(MCW_EM,MCW_EM)
+#endif
+
+#ifdef __IBMCPP__
+#  define BOOST_MATH_NO_DEDUCED_FUNCTION_POINTERS
+#endif
+
+#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901))
+#  define BOOST_MATH_USE_C99
+#endif
+
+#if (defined(__hpux) && !defined(__hppa))
+#  define BOOST_MATH_USE_C99
+#endif
+
+#if defined(__GNUC__) && defined(_GLIBCXX_USE_C99)
+#  define BOOST_MATH_USE_C99
+#endif
+
+#if defined(_LIBCPP_VERSION) && !defined(_MSC_VER)
+#  define BOOST_MATH_USE_C99
+#endif
+
+#if defined(__CYGWIN__) || defined(__HP_aCC) || defined(BOOST_INTEL) \
+  || defined(BOOST_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY) \
+  || (defined(__GNUC__) && !defined(BOOST_MATH_USE_C99))\
+  || defined(BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS)
+#  define BOOST_MATH_NO_NATIVE_LONG_DOUBLE_FP_CLASSIFY
+#endif
+
+#if BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590)
+
+#  include "boost/type.hpp"
+#  include "boost/non_type.hpp"
+
+#  define BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(t)         pdalboost::type<t>* = 0
+#  define BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(t)    pdalboost::type<t>*
+#  define BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE(t, v)  pdalboost::non_type<t, v>* = 0
+#  define BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)  pdalboost::non_type<t, v>*
+
+#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(t)         \
+             , BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(t)
+#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t)    \
+             , BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
+#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v)  \
+             , BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
+#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)  \
+             , BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
+
+#else
+
+// no workaround needed: expand to nothing
+
+#  define BOOST_MATH_EXPLICIT_TEMPLATE_TYPE(t)
+#  define BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
+#  define BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
+#  define BOOST_MATH_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
+
+#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(t)
+#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(t)
+#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t, v)
+#  define BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_NON_TYPE_SPEC(t, v)
+
+
+#endif // __SUNPRO_CC
+
+#if (defined(__SUNPRO_CC) || defined(__hppa) || defined(__GNUC__)) && !defined(BOOST_MATH_SMALL_CONSTANT)
+// Sun's compiler emits a hard error if a constant underflows,
+// as does aCC on PA-RISC, while gcc issues a large number of warnings:
+#  define BOOST_MATH_SMALL_CONSTANT(x) 0.0
+#else
+#  define BOOST_MATH_SMALL_CONSTANT(x) x
+#endif
+
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+//
+// Define if constants too large for a float cause "bad"
+// values to be stored in the data, rather than infinity
+// or a suitably large value.
+//
+#  define BOOST_MATH_BUGGY_LARGE_FLOAT_CONSTANTS
+#endif
+//
+// Tune performance options for specific compilers:
+//
+#ifdef BOOST_MSVC
+#  define BOOST_MATH_POLY_METHOD 2
+#  define BOOST_MATH_RATIONAL_METHOD 1
+#elif defined(BOOST_INTEL)
+#  define BOOST_MATH_POLY_METHOD 2
+#  define BOOST_MATH_RATIONAL_METHOD 1
+#elif defined(__GNUC__)
+#if __GNUC__ < 4
+#  define BOOST_MATH_POLY_METHOD 3
+#  define BOOST_MATH_RATIONAL_METHOD 3
+#  define BOOST_MATH_INT_TABLE_TYPE(RT, IT) RT
+#  define BOOST_MATH_INT_VALUE_SUFFIX(RV, SUF) RV##.0L
+#else
+#  define BOOST_MATH_POLY_METHOD 3
+#  define BOOST_MATH_RATIONAL_METHOD 1
+#endif
+#endif
+
+#if defined(BOOST_NO_LONG_LONG) && !defined(BOOST_MATH_INT_TABLE_TYPE)
+#  define BOOST_MATH_INT_TABLE_TYPE(RT, IT) RT
+#  define BOOST_MATH_INT_VALUE_SUFFIX(RV, SUF) RV##.0L
+#endif
+
+//
+// constexpr support, early GCC implementations can't cope so disable
+// constexpr for them:
+//
+#if !defined(__clang) && defined(__GNUC__)
+#if (__GNUC__ * 100 + __GNUC_MINOR__) < 490
+#  define BOOST_MATH_DISABLE_CONSTEXPR
+#endif
+#endif
+
+#ifdef BOOST_MATH_DISABLE_CONSTEXPR
+#  define BOOST_MATH_CONSTEXPR
+#else
+#  define BOOST_MATH_CONSTEXPR BOOST_CONSTEXPR
+#endif
+
+//
+// noexcept support:
+//
+#ifndef BOOST_NO_CXX11_NOEXCEPT
+#ifndef BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#include <type_traits>
+#  define BOOST_MATH_NOEXCEPT(T) noexcept(std::is_floating_point<T>::value)
+#  define BOOST_MATH_IS_FLOAT(T) (std::is_floating_point<T>::value)
+#else
+#include <boost/type_traits/is_floating_point.hpp>
+#  define BOOST_MATH_NOEXCEPT(T) noexcept(pdalboost::is_floating_point<T>::value)
+#  define BOOST_MATH_IS_FLOAT(T) (pdalboost::is_floating_point<T>::value)
+#endif
+#else
+#  define BOOST_MATH_NOEXCEPT(T)
+#  define BOOST_MATH_IS_FLOAT(T) false
+#endif
+
+//
+// The maximum order of polynomial that will be evaluated 
+// via an unrolled specialisation:
+//
+#ifndef BOOST_MATH_MAX_POLY_ORDER
+#  define BOOST_MATH_MAX_POLY_ORDER 20
+#endif 
+//
+// Set the method used to evaluate polynomials and rationals:
+//
+#ifndef BOOST_MATH_POLY_METHOD
+#  define BOOST_MATH_POLY_METHOD 2
+#endif 
+#ifndef BOOST_MATH_RATIONAL_METHOD
+#  define BOOST_MATH_RATIONAL_METHOD 1
+#endif 
+//
+// decide whether to store constants as integers or reals:
+//
+#ifndef BOOST_MATH_INT_TABLE_TYPE
+#  define BOOST_MATH_INT_TABLE_TYPE(RT, IT) IT
+#endif
+#ifndef BOOST_MATH_INT_VALUE_SUFFIX
+#  define BOOST_MATH_INT_VALUE_SUFFIX(RV, SUF) RV##SUF
+#endif
+//
+// Test whether to support __float128, if we don't have quadmath.h then this can't currently work:
+//
+#ifndef BOOST_MATH_USE_FLOAT128
+#ifdef __has_include
+#if ! __has_include("quadmath.h")
+#define BOOST_MATH_DISABLE_FLOAT128
+#endif
+#elif !defined(BOOST_ARCH_X86)
+#define BOOST_MATH_DISABLE_FLOAT128
+#endif
+#endif
+//
+// And then the actual configuration:
+//
+#if defined(_GLIBCXX_USE_FLOAT128) && defined(BOOST_GCC) && !defined(__STRICT_ANSI__) \
+   && !defined(BOOST_MATH_DISABLE_FLOAT128) || defined(BOOST_MATH_USE_FLOAT128)
+//
+// Only enable this when the compiler really is GCC as clang and probably 
+// intel too don't support __float128 yet :-(
+//
+#ifndef BOOST_MATH_USE_FLOAT128
+#  define BOOST_MATH_USE_FLOAT128
+#endif
+
+#  if defined(BOOST_INTEL) && defined(BOOST_INTEL_CXX_VERSION) && (BOOST_INTEL_CXX_VERSION >= 1310) && defined(__GNUC__)
+#    if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6))
+#      define BOOST_MATH_FLOAT128_TYPE __float128
+#    endif
+#  elif defined(__GNUC__)
+#      define BOOST_MATH_FLOAT128_TYPE __float128
+#  endif
+
+#  ifndef BOOST_MATH_FLOAT128_TYPE
+#      define BOOST_MATH_FLOAT128_TYPE _Quad
+#  endif
+#endif
+//
+// Check for WinCE with no iostream support:
+//
+#if defined(_WIN32_WCE) && !defined(__SGI_STL_PORT)
+#  define BOOST_MATH_NO_LEXICAL_CAST
+#endif
+
+//
+// Helper macro for controlling the FP behaviour:
+//
+#ifndef BOOST_MATH_CONTROL_FP
+#  define BOOST_MATH_CONTROL_FP
+#endif
+//
+// Helper macro for using statements:
+//
+#define BOOST_MATH_STD_USING_CORE \
+   using std::abs;\
+   using std::acos;\
+   using std::cos;\
+   using std::fmod;\
+   using std::modf;\
+   using std::tan;\
+   using std::asin;\
+   using std::cosh;\
+   using std::frexp;\
+   using std::pow;\
+   using std::tanh;\
+   using std::atan;\
+   using std::exp;\
+   using std::ldexp;\
+   using std::sin;\
+   using std::atan2;\
+   using std::fabs;\
+   using std::log;\
+   using std::sinh;\
+   using std::ceil;\
+   using std::floor;\
+   using std::log10;\
+   using std::sqrt;
+
+#define BOOST_MATH_STD_USING BOOST_MATH_STD_USING_CORE
+
+namespace pdalboost{ namespace math{
+namespace tools
+{
+
+template <class T>
+inline T max BOOST_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c) BOOST_MATH_NOEXCEPT(T)
+{
+   return (std::max)((std::max)(a, b), c);
+}
+
+template <class T>
+inline T max BOOST_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c, T d) BOOST_MATH_NOEXCEPT(T)
+{
+   return (std::max)((std::max)(a, b), (std::max)(c, d));
+}
+
+} // namespace tools
+
+template <class T>
+void suppress_unused_variable_warning(const T&) BOOST_MATH_NOEXCEPT(T)
+{
+}
+
+namespace detail{
+
+template <class T>
+struct is_integer_for_rounding
+{
+   static const bool value = pdalboost::is_integral<T>::value
+#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
+      || (std::numeric_limits<T>::is_specialized && std::numeric_limits<T>::is_integer)
+#endif
+      ;
+};
+
+}
+
+}} // namespace pdalboost namespace math
+
+#ifdef __GLIBC_PREREQ
+#  if __GLIBC_PREREQ(2,14)
+#     define BOOST_MATH_HAVE_FIXED_GLIBC
+#  endif
+#endif
+
+#if ((defined(__linux__) && !defined(__UCLIBC__) && !defined(BOOST_MATH_HAVE_FIXED_GLIBC)) || defined(__QNX__) || defined(__IBMCPP__)) && !defined(BOOST_NO_FENV_H)
+//
+// This code was introduced in response to this glibc bug: http://sourceware.org/bugzilla/show_bug.cgi?id=2445
+// Basically powl and expl can return garbage when the result is small and certain exception flags are set
+// on entrance to these functions.  This appears to have been fixed in Glibc 2.14 (May 2011).
+// Much more information in this message thread: https://groups.google.com/forum/#!topic/boost-list/ZT99wtIFlb4
+//
+
+   #include <boost/detail/fenv.hpp>
+
+#  ifdef FE_ALL_EXCEPT
+
+namespace pdalboost{ namespace math{
+   namespace detail
+   {
+   struct fpu_guard
+   {
+      fpu_guard()
+      {
+         fegetexceptflag(&m_flags, FE_ALL_EXCEPT);
+         feclearexcept(FE_ALL_EXCEPT);
+      }
+      ~fpu_guard()
+      {
+         fesetexceptflag(&m_flags, FE_ALL_EXCEPT);
+      }
+   private:
+      fexcept_t m_flags;
+   };
+
+   } // namespace detail
+   }} // namespaces
+
+#    define BOOST_FPU_EXCEPTION_GUARD pdalboost::math::detail::fpu_guard local_guard_object;
+#    define BOOST_MATH_INSTRUMENT_FPU do{ fexcept_t cpu_flags; fegetexceptflag(&cpu_flags, FE_ALL_EXCEPT); BOOST_MATH_INSTRUMENT_VARIABLE(cpu_flags); } while(0); 
+
+#  else
+
+#    define BOOST_FPU_EXCEPTION_GUARD
+#    define BOOST_MATH_INSTRUMENT_FPU
+
+#  endif
+
+#else // All other platforms.
+#  define BOOST_FPU_EXCEPTION_GUARD
+#  define BOOST_MATH_INSTRUMENT_FPU
+#endif
+
+#ifdef BOOST_MATH_INSTRUMENT
+
+#  include <iostream>
+#  include <iomanip>
+#  include <typeinfo>
+
+#  define BOOST_MATH_INSTRUMENT_CODE(x) \
+      std::cout << std::setprecision(35) << __FILE__ << ":" << __LINE__ << " " << x << std::endl;
+#  define BOOST_MATH_INSTRUMENT_VARIABLE(name) BOOST_MATH_INSTRUMENT_CODE(BOOST_STRINGIZE(name) << " = " << name)
+
+#else
+
+#  define BOOST_MATH_INSTRUMENT_CODE(x)
+#  define BOOST_MATH_INSTRUMENT_VARIABLE(name)
+
+#endif
+
+#endif // BOOST_MATH_TOOLS_CONFIG_HPP
+
+
+
+
+
diff --git a/vendor/pdalboost/boost/math/tools/promotion.hpp b/vendor/pdalboost/boost/math/tools/promotion.hpp
new file mode 100644
index 0000000..87baf1f
--- /dev/null
+++ b/vendor/pdalboost/boost/math/tools/promotion.hpp
@@ -0,0 +1,182 @@
+// boost\math\tools\promotion.hpp
+
+// Copyright John Maddock 2006.
+// Copyright Paul A. Bristow 2006.
+
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// Promote arguments functions to allow math functions to have arguments
+// provided as integer OR real (floating-point, built-in or UDT)
+// (called ArithmeticType in functions that use promotion)
+// that help to reduce the risk of creating multiple instantiations.
+// Allows creation of an inline wrapper that forwards to a foo(RT, RT) function,
+// so you never get to instantiate any mixed foo(RT, IT) functions.
+
+#ifndef BOOST_MATH_PROMOTION_HPP
+#define BOOST_MATH_PROMOTION_HPP
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+// Boost type traits:
+#include <boost/math/tools/config.hpp>
+#include <boost/type_traits/is_floating_point.hpp> // for pdalboost::is_floating_point;
+#include <boost/type_traits/is_integral.hpp> // for pdalboost::is_integral
+#include <boost/type_traits/is_convertible.hpp> // for pdalboost::is_convertible
+#include <boost/type_traits/is_same.hpp>// for pdalboost::is_same
+#include <boost/type_traits/remove_cv.hpp>// for pdalboost::remove_cv
+// Boost Template meta programming:
+#include <boost/mpl/if.hpp> // for pdalboost::mpl::if_c.
+#include <boost/mpl/and.hpp> // for pdalboost::mpl::if_c.
+#include <boost/mpl/or.hpp> // for pdalboost::mpl::if_c.
+#include <boost/mpl/not.hpp> // for pdalboost::mpl::if_c.
+
+#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+#include <boost/static_assert.hpp>
+#endif
+
+namespace pdalboost
+{
+  namespace math
+  {
+    namespace tools
+    {
+      // If either T1 or T2 is an integer type,
+      // pretend it was a double (for the purposes of further analysis).
+      // Then pick the wider of the two floating-point types
+      // as the actual signature to forward to.
+      // For example:
+      // foo(int, short) -> double foo(double, double);
+      // foo(int, float) -> double foo(double, double);
+      // Note: NOT float foo(float, float)
+      // foo(int, double) -> foo(double, double);
+      // foo(double, float) -> double foo(double, double);
+      // foo(double, float) -> double foo(double, double);
+      // foo(any-int-or-float-type, long double) -> foo(long double, long double);
+      // but ONLY float foo(float, float) is unchanged.
+      // So the only way to get an entirely float version is to call foo(1.F, 2.F),
+      // But since most (all?) the math functions convert to double internally,
+      // probably there would not be the hoped-for gain by using float here.
+
+      // This follows the C-compatible conversion rules of pow, etc
+      // where pow(int, float) is converted to pow(double, double).
+
+      template <class T>
+      struct promote_arg
+      { // If T is integral type, then promote to double.
+        typedef typename mpl::if_<is_integral<T>, double, T>::type type;
+      };
+      // These full specialisations reduce mpl::if_ usage and speed up
+      // compilation:
+      template <> struct promote_arg<float> { typedef float type; };
+      template <> struct promote_arg<double>{ typedef double type; };
+      template <> struct promote_arg<long double> { typedef long double type; };
+      template <> struct promote_arg<int> {  typedef double type; };
+
+      template <class T1, class T2>
+      struct promote_args_2
+      { // Promote, if necessary, & pick the wider of the two floating-point types.
+        // for both parameter types, if integral promote to double.
+        typedef typename promote_arg<T1>::type T1P; // T1 perhaps promoted.
+        typedef typename promote_arg<T2>::type T2P; // T2 perhaps promoted.
+
+        typedef typename mpl::if_<
+          typename mpl::and_<is_floating_point<T1P>, is_floating_point<T2P> >::type, // both T1P and T2P are floating-point?
+#ifdef BOOST_MATH_USE_FLOAT128
+           typename mpl::if_< typename mpl::or_<is_same<__float128, T1P>, is_same<__float128, T2P> >::type, // either long double?
+            __float128,
+#endif
+             typename mpl::if_< typename mpl::or_<is_same<long double, T1P>, is_same<long double, T2P> >::type, // either long double?
+               long double, // then result type is long double.
+               typename mpl::if_< typename mpl::or_<is_same<double, T1P>, is_same<double, T2P> >::type, // either double?
+                  double, // result type is double.
+                  float // else result type is float.
+             >::type
+#ifdef BOOST_MATH_USE_FLOAT128
+             >::type
+#endif
+             >::type,
+          // else one or the other is a user-defined type:
+          typename mpl::if_< typename mpl::and_<mpl::not_<is_floating_point<T2P> >, ::pdalboost::is_convertible<T1P, T2P> >, T2P, T1P>::type>::type type;
+      }; // promote_arg2
+      // These full specialisations reduce mpl::if_ usage and speed up
+      // compilation:
+      template <> struct promote_args_2<float, float> { typedef float type; };
+      template <> struct promote_args_2<double, double>{ typedef double type; };
+      template <> struct promote_args_2<long double, long double> { typedef long double type; };
+      template <> struct promote_args_2<int, int> {  typedef double type; };
+      template <> struct promote_args_2<int, float> {  typedef double type; };
+      template <> struct promote_args_2<float, int> {  typedef double type; };
+      template <> struct promote_args_2<int, double> {  typedef double type; };
+      template <> struct promote_args_2<double, int> {  typedef double type; };
+      template <> struct promote_args_2<int, long double> {  typedef long double type; };
+      template <> struct promote_args_2<long double, int> {  typedef long double type; };
+      template <> struct promote_args_2<float, double> {  typedef double type; };
+      template <> struct promote_args_2<double, float> {  typedef double type; };
+      template <> struct promote_args_2<float, long double> {  typedef long double type; };
+      template <> struct promote_args_2<long double, float> {  typedef long double type; };
+      template <> struct promote_args_2<double, long double> {  typedef long double type; };
+      template <> struct promote_args_2<long double, double> {  typedef long double type; };
+
+      template <class T1, class T2=float, class T3=float, class T4=float, class T5=float, class T6=float>
+      struct promote_args
+      {
+         typedef typename promote_args_2<
+            typename remove_cv<T1>::type,
+            typename promote_args_2<
+               typename remove_cv<T2>::type,
+               typename promote_args_2<
+                  typename remove_cv<T3>::type,
+                  typename promote_args_2<
+                     typename remove_cv<T4>::type,
+                     typename promote_args_2<
+                        typename remove_cv<T5>::type, typename remove_cv<T6>::type
+                     >::type
+                  >::type
+               >::type
+            >::type
+         >::type type;
+
+#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+         //
+         // Guard against use of long double if it's not supported:
+         //
+         BOOST_STATIC_ASSERT_MSG((0 == ::pdalboost::is_same<type, long double>::value), "Sorry, but this platform does not have sufficient long double support for the special functions to be reliably implemented.");
+#endif
+      };
+
+      //
+      // This struct is the same as above, but has no static assert on long double usage,
+      // it should be used only on functions that can be implemented for long double
+      // even when std lib support is missing or broken for that type.
+      //
+      template <class T1, class T2=float, class T3=float, class T4=float, class T5=float, class T6=float>
+      struct promote_args_permissive
+      {
+         typedef typename promote_args_2<
+            typename remove_cv<T1>::type,
+            typename promote_args_2<
+               typename remove_cv<T2>::type,
+               typename promote_args_2<
+                  typename remove_cv<T3>::type,
+                  typename promote_args_2<
+                     typename remove_cv<T4>::type,
+                     typename promote_args_2<
+                        typename remove_cv<T5>::type, typename remove_cv<T6>::type
+                     >::type
+                  >::type
+               >::type
+            >::type
+         >::type type;
+      };
+
+    } // namespace tools
+  } // namespace math
+} // namespace pdalboost
+
+#endif // BOOST_MATH_PROMOTION_HPP
+
diff --git a/vendor/pdalboost/boost/math/tools/real_cast.hpp b/vendor/pdalboost/boost/math/tools/real_cast.hpp
new file mode 100644
index 0000000..26794bf
--- /dev/null
+++ b/vendor/pdalboost/boost/math/tools/real_cast.hpp
@@ -0,0 +1,31 @@
+//  Copyright John Maddock 2006.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_MATH_TOOLS_REAL_CAST_HPP
+#define BOOST_MATH_TOOLS_REAL_CAST_HPP
+
+#include <boost/math/tools/config.hpp>
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+namespace pdalboost{ namespace math
+{
+  namespace tools
+  {
+    template <class To, class T>
+    inline BOOST_MATH_CONSTEXPR To real_cast(T t) BOOST_NOEXCEPT_IF(BOOST_MATH_IS_FLOAT(T) && BOOST_MATH_IS_FLOAT(To))
+    {
+       return static_cast<To>(t);
+    }
+  } // namespace tools
+} // namespace math
+} // namespace pdalboost
+
+#endif // BOOST_MATH_TOOLS_REAL_CAST_HPP
+
+
+
diff --git a/vendor/pdalboost/boost/math/tools/user.hpp b/vendor/pdalboost/boost/math/tools/user.hpp
new file mode 100644
index 0000000..08a7e53
--- /dev/null
+++ b/vendor/pdalboost/boost/math/tools/user.hpp
@@ -0,0 +1,105 @@
+// Copyright John Maddock 2007.
+// Copyright Paul A. Bristow 2007.
+
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_MATH_TOOLS_USER_HPP
+#define BOOST_MATH_TOOLS_USER_HPP
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+// This file can be modified by the user to change the default policies.
+// See "Changing the Policy Defaults" in documentation.
+
+// define this if the platform has no long double functions,
+// or if the long double versions have only double precision:
+//
+// #define BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+//
+// Performance tuning options:
+//
+// #define BOOST_MATH_POLY_METHOD 3
+// #define BOOST_MATH_RATIONAL_METHOD 3
+//
+// The maximum order of polynomial that will be evaluated
+// via an unrolled specialisation:
+//
+// #define BOOST_MATH_MAX_POLY_ORDER 17
+//
+// decide whether to store constants as integers or reals:
+//
+// #define BOOST_MATH_INT_TABLE_TYPE(RT, IT) IT
+
+//
+// Default policies follow:
+//
+// Domain errors:
+//
+// #define BOOST_MATH_DOMAIN_ERROR_POLICY throw_on_error
+//
+// Pole errors:
+//
+// #define BOOST_MATH_POLE_ERROR_POLICY throw_on_error
+//
+// Overflow Errors:
+//
+// #define BOOST_MATH_OVERFLOW_ERROR_POLICY throw_on_error
+//
+// Internal Evaluation Errors:
+//
+// #define BOOST_MATH_EVALUATION_ERROR_POLICY throw_on_error
+//
+// Underfow:
+//
+// #define BOOST_MATH_UNDERFLOW_ERROR_POLICY ignore_error
+//
+// Denorms:
+//
+// #define BOOST_MATH_DENORM_ERROR_POLICY ignore_error
+//
+// Max digits to use for internal calculations:
+//
+// #define BOOST_MATH_DIGITS10_POLICY 0
+//
+// Promote floats to doubles internally?
+//
+// #define BOOST_MATH_PROMOTE_FLOAT_POLICY true
+//
+// Promote doubles to long double internally:
+//
+// #define BOOST_MATH_PROMOTE_DOUBLE_POLICY true
+//
+// What do discrete quantiles return?
+//
+// #define BOOST_MATH_DISCRETE_QUANTILE_POLICY integer_round_outwards
+//
+// If a function is mathematically undefined
+// (for example the Cauchy distribution has no mean),
+// then do we stop the code from compiling?
+//
+// #define BOOST_MATH_ASSERT_UNDEFINED_POLICY true
+//
+// Maximum series iterstions permitted:
+//
+// #define BOOST_MATH_MAX_SERIES_ITERATION_POLICY 1000000
+//
+// Maximum root finding steps permitted:
+//
+// define BOOST_MATH_MAX_ROOT_ITERATION_POLICY 200
+//
+// Enable use of __float128 in numeric constants:
+//
+// #define BOOST_MATH_USE_FLOAT128
+//
+// Disable use of __float128 in numeric_constants even if the compiler looks to support it:
+//
+// #define BOOST_MATH_DISABLE_FLOAT128
+
+#endif // BOOST_MATH_TOOLS_USER_HPP
+
+
diff --git a/vendor/pdalboost/boost/mem_fn.hpp b/vendor/pdalboost/boost/mem_fn.hpp
new file mode 100644
index 0000000..3bcd2c5
--- /dev/null
+++ b/vendor/pdalboost/boost/mem_fn.hpp
@@ -0,0 +1,24 @@
+#ifndef BOOST_MEM_FN_HPP_INCLUDED
+#define BOOST_MEM_FN_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  mem_fn.hpp - a generalization of std::mem_fun[_ref]
+//
+//  Copyright (c) 2009 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  See http://www.boost.org/libs/bind/mem_fn.html for documentation.
+//
+
+#include <boost/bind/mem_fn.hpp>
+
+#endif // #ifndef BOOST_MEM_FN_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/memory_order.hpp b/vendor/pdalboost/boost/memory_order.hpp
new file mode 100644
index 0000000..35cdbfb
--- /dev/null
+++ b/vendor/pdalboost/boost/memory_order.hpp
@@ -0,0 +1,57 @@
+#ifndef BOOST_MEMORY_ORDER_HPP_INCLUDED
+#define BOOST_MEMORY_ORDER_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//  boost/memory_order.hpp
+//
+//  Defines enum pdalboost::memory_order per the C++0x working draft
+//
+//  Copyright (c) 2008, 2009 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+
+namespace pdalboost
+{
+
+//
+// Enum values are chosen so that code that needs to insert
+// a trailing fence for acquire semantics can use a single
+// test such as:
+//
+// if( mo & memory_order_acquire ) { ...fence... }
+//
+// For leading fences one can use:
+//
+// if( mo & memory_order_release ) { ...fence... }
+//
+// Architectures such as Alpha that need a fence on consume
+// can use:
+//
+// if( mo & ( memory_order_acquire | memory_order_consume ) ) { ...fence... }
+//
+// The values are also in the order of increasing "strength"
+// of the fences so that success/failure orders can be checked
+// efficiently in compare_exchange methods.
+//
+
+enum memory_order
+{
+    memory_order_relaxed = 0,
+    memory_order_consume = 1,
+    memory_order_acquire = 2,
+    memory_order_release = 4,
+    memory_order_acq_rel = 6, // acquire | release
+    memory_order_seq_cst = 14 // acq_rel | 8
+};
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_MEMORY_ORDER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/move/adl_move_swap.hpp b/vendor/pdalboost/boost/move/adl_move_swap.hpp
new file mode 100644
index 0000000..ca8583f
--- /dev/null
+++ b/vendor/pdalboost/boost/move/adl_move_swap.hpp
@@ -0,0 +1,233 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright 2007, 2008 Steven Watanabe, Joseph Gauterin, Niels Dekker
+// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_MOVE_ADL_MOVE_SWAP_HPP
+#define BOOST_MOVE_ADL_MOVE_SWAP_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+//Based on Boost.Core's swap.
+//Many thanks to Steven Watanabe, Joseph Gauterin and Niels Dekker.
+
+#include <boost/config.hpp>
+#include <cstddef> //for std::size_t
+
+//Try to avoid including <algorithm>, as it's quite big
+#if defined(_MSC_VER) && defined(BOOST_DINKUMWARE_STDLIB)
+   #include <utility>   //Dinkum libraries define std::swap in utility which is lighter than algorithm
+#elif defined(BOOST_GNU_STDLIB)
+   //For non-GCC compilers, where GNUC version is not very reliable, or old GCC versions
+   //use the good old stl_algobase header, which is quite lightweight
+   #if !defined(BOOST_GCC) || ((__GNUC__ < 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ < 3)))
+      #include <bits/stl_algobase.h>
+   #elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 3)
+      //In GCC 4.3 a tiny stl_move.h was created with swap and move utilities
+      #include <bits/stl_move.h>
+   #else
+      //In GCC 4.4 stl_move.h was renamed to move.h
+      #include <bits/move.h>
+   #endif
+#elif defined(_LIBCPP_VERSION)
+   #include <type_traits>  //The initial import of libc++ defines std::swap and still there
+#elif __cplusplus >= 201103L
+   #include <utility>    //Fallback for C++ >= 2011
+#else
+   #include <algorithm>  //Fallback for C++98/03
+#endif
+
+#include <boost/move/utility_core.hpp> //for pdalboost::move
+
+#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+namespace pdalboost_move_member_swap {
+
+struct dont_care
+{
+   dont_care(...);
+};
+
+struct private_type
+{
+   static private_type p;
+   private_type const &operator,(int) const;
+};
+
+typedef char yes_type;            
+struct no_type{ char dummy[2]; }; 
+
+template<typename T>
+no_type is_private_type(T const &);
+
+yes_type is_private_type(private_type const &);
+
+template <typename Type>
+class has_member_function_named_swap
+{
+   struct BaseMixin
+   {
+      void swap();
+   };
+
+   struct Base : public Type, public BaseMixin { Base(); };
+   template <typename T, T t> class Helper{};
+
+   template <typename U>
+   static no_type deduce(U*, Helper<void (BaseMixin::*)(), &U::swap>* = 0);
+   static yes_type deduce(...);
+
+   public:
+   static const bool value = sizeof(yes_type) == sizeof(deduce((Base*)(0)));
+};
+
+template<typename Fun, bool HasFunc>
+struct has_member_swap_impl
+{
+   static const bool value = false;
+};
+
+template<typename Fun>
+struct has_member_swap_impl<Fun, true>
+{
+   struct FunWrap : Fun
+   {
+      FunWrap();
+
+      using Fun::swap;
+      private_type swap(dont_care) const;
+   };
+
+   static Fun &declval_fun();
+   static FunWrap declval_wrap();
+
+   static bool const value =
+      sizeof(no_type) == sizeof(is_private_type( (declval_wrap().swap(declval_fun()), 0)) );
+};
+
+template<typename Fun>
+struct has_member_swap : public has_member_swap_impl
+      <Fun, has_member_function_named_swap<Fun>::value>
+{};
+
+}  //namespace pdalboost_move_member_swap
+
+namespace pdalboost_move_adl_swap{
+
+template<class P1, class P2, bool = P1::value>
+struct and_op_impl
+{  static const bool value = false; };
+
+template<class P1, class P2>
+struct and_op_impl<P1, P2, true>
+{  static const bool value = P2::value;   };
+
+template<class P1, class P2>
+struct and_op
+   : and_op_impl<P1, P2>
+{};
+
+//////
+
+template<class P1, class P2, bool = P1::value>
+struct and_op_not_impl
+{  static const bool value = false; };
+
+template<class P1, class P2>
+struct and_op_not_impl<P1, P2, true>
+{  static const bool value = !P2::value;   };
+
+template<class P1, class P2>
+struct and_op_not
+   : and_op_not_impl<P1, P2>
+{};
+
+template<class T>
+void swap_proxy(T& x, T& y, typename pdalboost::move_detail::enable_if_c<!pdalboost::move_detail::has_move_emulation_enabled_impl<T>::value>::type* = 0)
+{
+   //use std::swap if argument dependent lookup fails
+   //Use using directive ("using namespace xxx;") instead as some older compilers
+   //don't do ADL with using declarations ("using ns::func;").
+   using namespace std;
+   swap(x, y);
+}
+
+template<class T>
+void swap_proxy(T& x, T& y
+               , typename pdalboost::move_detail::enable_if< and_op_not_impl<pdalboost::move_detail::has_move_emulation_enabled_impl<T>
+                                                                        , pdalboost_move_member_swap::has_member_swap<T> >
+                                                       >::type* = 0)
+{  T t(::pdalboost::move(x)); x = ::pdalboost::move(y); y = ::pdalboost::move(t);  }
+
+template<class T>
+void swap_proxy(T& x, T& y
+               , typename pdalboost::move_detail::enable_if< and_op_impl< pdalboost::move_detail::has_move_emulation_enabled_impl<T>
+                                                                    , pdalboost_move_member_swap::has_member_swap<T> >
+                                                       >::type* = 0)
+{  x.swap(y);  }
+
+}  //namespace pdalboost_move_adl_swap{
+
+#else
+
+namespace pdalboost_move_adl_swap{
+
+template<class T>
+void swap_proxy(T& x, T& y)
+{
+   using std::swap;
+   swap(x, y);
+}
+
+}  //namespace pdalboost_move_adl_swap{
+
+#endif   //#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
+namespace pdalboost_move_adl_swap{
+
+template<class T, std::size_t N>
+void swap_proxy(T (& x)[N], T (& y)[N])
+{
+   for (std::size_t i = 0; i < N; ++i){
+      ::pdalboost_move_adl_swap::swap_proxy(x[i], y[i]);
+   }
+}
+
+}  //namespace pdalboost_move_adl_swap {
+
+#endif   //!defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+namespace pdalboost{
+
+//! Exchanges the values of a and b, using Argument Dependent Lookup (ADL) to select a
+//! specialized swap function if available. If no specialized swap function is available,
+//! std::swap is used.
+//!
+//! <b>Exception</b>: If T uses Boost.Move's move emulation and the compiler has
+//! no rvalue references then:
+//!
+//!   -  If T has a <code>T::swap(T&)</code> member, that member is called.
+//!   -  Otherwise a move-based swap is called, equivalent to: 
+//!      <code>T t(::pdalboost::move(x)); x = ::pdalboost::move(y); y = ::pdalboost::move(t);</code>.
+template<class T>
+void adl_move_swap(T& x, T& y)
+{
+   ::pdalboost_move_adl_swap::swap_proxy(x, y);
+}
+
+}  //namespace pdalboost{
+
+#endif   //#ifndef BOOST_MOVE_ADL_MOVE_SWAP_HPP
diff --git a/vendor/pdalboost/boost/move/core.hpp b/vendor/pdalboost/boost/move/core.hpp
new file mode 100644
index 0000000..7eabd37
--- /dev/null
+++ b/vendor/pdalboost/boost/move/core.hpp
@@ -0,0 +1,501 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2012-2012.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! \file
+//! This header implements macros to define movable classes and
+//! move-aware functions
+
+#ifndef BOOST_MOVE_CORE_HPP
+#define BOOST_MOVE_CORE_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/move/detail/config_begin.hpp>
+#include <boost/move/detail/workaround.hpp>
+
+// @cond
+
+//boost_move_no_copy_constructor_or_assign typedef
+//used to detect noncopyable types for other Boost libraries.
+#if defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) || defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+   #define BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE) \
+      private:\
+      TYPE(TYPE &);\
+      TYPE& operator=(TYPE &);\
+      public:\
+      typedef int boost_move_no_copy_constructor_or_assign; \
+      private:\
+   //
+#else
+   #define BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE) \
+      public:\
+      TYPE(TYPE const &) = delete;\
+      TYPE& operator=(TYPE const &) = delete;\
+      public:\
+      typedef int boost_move_no_copy_constructor_or_assign; \
+      private:\
+   //
+#endif   //BOOST_NO_CXX11_DELETED_FUNCTIONS
+
+// @endcond
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+   #include <boost/move/detail/type_traits.hpp>
+
+   #if defined(BOOST_MOVE_ADDRESS_SANITIZER_ON)
+      #define BOOST_MOVE_TO_RV_CAST(RV_TYPE, ARG) reinterpret_cast<RV_TYPE>(ARG)
+   #else
+      #define BOOST_MOVE_TO_RV_CAST(RV_TYPE, ARG) static_cast<RV_TYPE>(ARG)
+   #endif
+
+   //Move emulation rv breaks standard aliasing rules so add workarounds for some compilers
+   #if defined(__GNUC__) && (__GNUC__ >= 4) && \
+      (\
+         defined(BOOST_GCC) ||   \
+         (defined(BOOST_INTEL) && (BOOST_INTEL_CXX_VERSION >= 1300)) \
+      )
+      #define BOOST_MOVE_ATTRIBUTE_MAY_ALIAS __attribute__((__may_alias__))
+   #else
+      #define BOOST_MOVE_ATTRIBUTE_MAY_ALIAS
+   #endif
+
+   namespace pdalboost {
+
+   //////////////////////////////////////////////////////////////////////////////
+   //
+   //                            struct rv
+   //
+   //////////////////////////////////////////////////////////////////////////////
+   template <class T>
+   class rv
+      : public ::pdalboost::move_detail::if_c
+         < ::pdalboost::move_detail::is_class<T>::value
+         , T
+         , ::pdalboost::move_detail::nat
+         >::type
+   {
+      rv();
+      ~rv() throw();
+      rv(rv const&);
+      void operator=(rv const&);
+   } BOOST_MOVE_ATTRIBUTE_MAY_ALIAS;
+
+
+   //////////////////////////////////////////////////////////////////////////////
+   //
+   //                            is_rv
+   //
+   //////////////////////////////////////////////////////////////////////////////
+
+   namespace move_detail {
+
+   template <class T>
+   struct is_rv
+        //Derive from integral constant because some Boost code assummes it has
+        //a "type" internal typedef
+      : integral_constant<bool, ::pdalboost::move_detail::is_rv_impl<T>::value >
+   {};
+
+   template <class T>
+   struct is_not_rv
+   {
+      static const bool value = !is_rv<T>::value;
+   };
+
+   }  //namespace move_detail {
+
+   //////////////////////////////////////////////////////////////////////////////
+   //
+   //                               has_move_emulation_enabled
+   //
+   //////////////////////////////////////////////////////////////////////////////
+   template<class T>
+   struct has_move_emulation_enabled
+      : ::pdalboost::move_detail::has_move_emulation_enabled_impl<T>
+   {};
+
+   template<class T>
+   struct has_move_emulation_disabled
+   {
+      static const bool value = !::pdalboost::move_detail::has_move_emulation_enabled_impl<T>::value;
+   };
+
+   }  //namespace pdalboost {
+
+   #define BOOST_RV_REF(TYPE)\
+      ::pdalboost::rv< TYPE >& \
+   //
+
+   #define BOOST_RV_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\
+      ::pdalboost::rv< TYPE<ARG1, ARG2> >& \
+   //
+
+   #define BOOST_RV_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\
+      ::pdalboost::rv< TYPE<ARG1, ARG2, ARG3> >& \
+   //
+
+   #define BOOST_RV_REF_BEG\
+      ::pdalboost::rv<   \
+   //
+
+   #define BOOST_RV_REF_END\
+      >& \
+   //
+
+   #define BOOST_RV_REF_BEG_IF_CXX11 \
+      \
+   //
+
+   #define BOOST_RV_REF_END_IF_CXX11 \
+      \
+   //
+
+   #define BOOST_FWD_REF(TYPE)\
+      const TYPE & \
+   //
+
+   #define BOOST_COPY_ASSIGN_REF(TYPE)\
+      const ::pdalboost::rv< TYPE >& \
+   //
+
+   #define BOOST_COPY_ASSIGN_REF_BEG \
+      const ::pdalboost::rv<  \
+   //
+
+   #define BOOST_COPY_ASSIGN_REF_END \
+      >& \
+   //
+
+   #define BOOST_COPY_ASSIGN_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\
+      const ::pdalboost::rv< TYPE<ARG1, ARG2> >& \
+   //
+
+   #define BOOST_COPY_ASSIGN_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\
+      const ::pdalboost::rv< TYPE<ARG1, ARG2, ARG3> >& \
+   //
+
+   #define BOOST_CATCH_CONST_RLVALUE(TYPE)\
+      const ::pdalboost::rv< TYPE >& \
+   //
+
+   namespace pdalboost {
+   namespace move_detail {
+
+   template <class Ret, class T>
+   inline typename ::pdalboost::move_detail::enable_if_c
+      <  ::pdalboost::move_detail::is_lvalue_reference<Ret>::value ||
+        !::pdalboost::has_move_emulation_enabled<T>::value
+      , T&>::type
+         move_return(T& x) BOOST_NOEXCEPT
+   {
+      return x;
+   }
+
+   template <class Ret, class T>
+   inline typename ::pdalboost::move_detail::enable_if_c
+      < !::pdalboost::move_detail::is_lvalue_reference<Ret>::value &&
+         ::pdalboost::has_move_emulation_enabled<T>::value
+      , ::pdalboost::rv<T>&>::type
+         move_return(T& x) BOOST_NOEXCEPT
+   {
+      return *BOOST_MOVE_TO_RV_CAST(::pdalboost::rv<T>*, ::pdalboost::move_detail::addressof(x));
+   }
+
+   template <class Ret, class T>
+   inline typename ::pdalboost::move_detail::enable_if_c
+      < !::pdalboost::move_detail::is_lvalue_reference<Ret>::value &&
+         ::pdalboost::has_move_emulation_enabled<T>::value
+      , ::pdalboost::rv<T>&>::type
+         move_return(::pdalboost::rv<T>& x) BOOST_NOEXCEPT
+   {
+      return x;
+   }
+
+   }  //namespace move_detail {
+   }  //namespace pdalboost {
+
+   #define BOOST_MOVE_RET(RET_TYPE, REF)\
+      pdalboost::move_detail::move_return< RET_TYPE >(REF)
+   //
+
+   #define BOOST_MOVE_BASE(BASE_TYPE, ARG) \
+      ::pdalboost::move((BASE_TYPE&)(ARG))
+   //
+
+   //////////////////////////////////////////////////////////////////////////////
+   //
+   //                         BOOST_MOVABLE_BUT_NOT_COPYABLE
+   //
+   //////////////////////////////////////////////////////////////////////////////
+   #define BOOST_MOVABLE_BUT_NOT_COPYABLE(TYPE)\
+      BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE)\
+      public:\
+      operator ::pdalboost::rv<TYPE>&() \
+      {  return *BOOST_MOVE_TO_RV_CAST(::pdalboost::rv<TYPE>*, this);  }\
+      operator const ::pdalboost::rv<TYPE>&() const \
+      {  return *BOOST_MOVE_TO_RV_CAST(const ::pdalboost::rv<TYPE>*, this);  }\
+      private:\
+   //
+
+   //////////////////////////////////////////////////////////////////////////////
+   //
+   //                         BOOST_COPYABLE_AND_MOVABLE
+   //
+   //////////////////////////////////////////////////////////////////////////////
+
+   #define BOOST_COPYABLE_AND_MOVABLE(TYPE)\
+      public:\
+      TYPE& operator=(TYPE &t)\
+      {  this->operator=(const_cast<const TYPE &>(t)); return *this;}\
+      public:\
+      operator ::pdalboost::rv<TYPE>&() \
+      {  return *BOOST_MOVE_TO_RV_CAST(::pdalboost::rv<TYPE>*, this);  }\
+      operator const ::pdalboost::rv<TYPE>&() const \
+      {  return *BOOST_MOVE_TO_RV_CAST(const ::pdalboost::rv<TYPE>*, this);  }\
+      private:\
+   //
+
+   #define BOOST_COPYABLE_AND_MOVABLE_ALT(TYPE)\
+      public:\
+      operator ::pdalboost::rv<TYPE>&() \
+      {  return *BOOST_MOVE_TO_RV_CAST(::pdalboost::rv<TYPE>*, this);  }\
+      operator const ::pdalboost::rv<TYPE>&() const \
+      {  return *BOOST_MOVE_TO_RV_CAST(const ::pdalboost::rv<TYPE>*, this);  }\
+      private:\
+   //
+
+   namespace pdalboost{
+   namespace move_detail{
+
+   template< class T>
+   struct forward_type
+   { typedef const T &type; };
+
+   template< class T>
+   struct forward_type< pdalboost::rv<T> >
+   { typedef T type; };
+
+   }}
+
+#else    //BOOST_NO_CXX11_RVALUE_REFERENCES
+
+   //! This macro marks a type as movable but not copyable, disabling copy construction
+   //! and assignment. The user will need to write a move constructor/assignment as explained
+   //! in the documentation to fully write a movable but not copyable class.
+   #define BOOST_MOVABLE_BUT_NOT_COPYABLE(TYPE)\
+      BOOST_MOVE_IMPL_NO_COPY_CTOR_OR_ASSIGN(TYPE)\
+      public:\
+      typedef int boost_move_emulation_t;\
+   //
+
+   //! This macro marks a type as copyable and movable.
+   //! The user will need to write a move constructor/assignment and a copy assignment
+   //! as explained in the documentation to fully write a copyable and movable class.
+   #define BOOST_COPYABLE_AND_MOVABLE(TYPE)\
+   //
+
+   #if !defined(BOOST_MOVE_DOXYGEN_INVOKED)
+   #define BOOST_COPYABLE_AND_MOVABLE_ALT(TYPE)\
+   //
+   #endif   //#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+   namespace pdalboost {
+
+   //!This trait yields to a compile-time true boolean if T was marked as
+   //!BOOST_MOVABLE_BUT_NOT_COPYABLE or BOOST_COPYABLE_AND_MOVABLE and
+   //!rvalue references are not available on the platform. False otherwise.
+   template<class T>
+   struct has_move_emulation_enabled
+   {
+      static const bool value = false;
+   };
+
+   template<class T>
+   struct has_move_emulation_disabled
+   {
+      static const bool value = true;
+   };
+
+   }  //namespace pdalboost{
+
+   //!This macro is used to achieve portable syntax in move
+   //!constructors and assignments for classes marked as
+   //!BOOST_COPYABLE_AND_MOVABLE or BOOST_MOVABLE_BUT_NOT_COPYABLE
+   #define BOOST_RV_REF(TYPE)\
+      TYPE && \
+   //
+
+   //!This macro is used to achieve portable syntax in move
+   //!constructors and assignments for template classes marked as
+   //!BOOST_COPYABLE_AND_MOVABLE or BOOST_MOVABLE_BUT_NOT_COPYABLE.
+   //!As macros have problems with comma-separated template arguments,
+   //!the template argument must be preceded with BOOST_RV_REF_BEG
+   //!and ended with BOOST_RV_REF_END
+   #define BOOST_RV_REF_BEG\
+         \
+   //
+
+   //!This macro is used to achieve portable syntax in move
+   //!constructors and assignments for template classes marked as
+   //!BOOST_COPYABLE_AND_MOVABLE or BOOST_MOVABLE_BUT_NOT_COPYABLE.
+   //!As macros have problems with comma-separated template arguments,
+   //!the template argument must be preceded with BOOST_RV_REF_BEG
+   //!and ended with BOOST_RV_REF_END
+   #define BOOST_RV_REF_END\
+      && \
+   //
+
+   //!This macro expands to BOOST_RV_REF_BEG if BOOST_NO_CXX11_RVALUE_REFERENCES
+   //!is not defined, empty otherwise
+   #define BOOST_RV_REF_BEG_IF_CXX11 \
+      BOOST_RV_REF_BEG \
+   //
+
+   //!This macro expands to BOOST_RV_REF_END if BOOST_NO_CXX11_RVALUE_REFERENCES
+   //!is not defined, empty otherwise
+   #define BOOST_RV_REF_END_IF_CXX11 \
+      BOOST_RV_REF_END \
+   //
+
+   //!This macro is used to achieve portable syntax in copy
+   //!assignment for classes marked as BOOST_COPYABLE_AND_MOVABLE.
+   #define BOOST_COPY_ASSIGN_REF(TYPE)\
+      const TYPE & \
+   //
+
+   //! This macro is used to implement portable perfect forwarding
+   //! as explained in the documentation.
+   #define BOOST_FWD_REF(TYPE)\
+      TYPE && \
+   //
+
+   #if !defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+   #define BOOST_RV_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\
+      TYPE<ARG1, ARG2> && \
+   //
+
+   #define BOOST_RV_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\
+      TYPE<ARG1, ARG2, ARG3> && \
+   //
+
+   #define BOOST_COPY_ASSIGN_REF_BEG \
+      const \
+   //
+
+   #define BOOST_COPY_ASSIGN_REF_END \
+      & \
+   //
+
+   #define BOOST_COPY_ASSIGN_REF_2_TEMPL_ARGS(TYPE, ARG1, ARG2)\
+      const TYPE<ARG1, ARG2> & \
+   //
+
+   #define BOOST_COPY_ASSIGN_REF_3_TEMPL_ARGS(TYPE, ARG1, ARG2, ARG3)\
+      const TYPE<ARG1, ARG2, ARG3>& \
+   //
+
+   #define BOOST_CATCH_CONST_RLVALUE(TYPE)\
+      const TYPE & \
+   //
+
+   #endif   //#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+   #if !defined(BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG) || defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+      //!This macro is used to achieve portable move return semantics.
+      //!The C++11 Standard allows implicit move returns when the object to be returned
+      //!is designated by a lvalue and:
+      //!   - The criteria for elision of a copy operation are met OR
+      //!   - The criteria would be met save for the fact that the source object is a function parameter
+      //!
+      //!For C++11 conforming compilers this macros only yields to REF:
+      //! <code>return BOOST_MOVE_RET(RET_TYPE, REF);</code> -> <code>return REF;</code>
+      //!
+      //!For compilers without rvalue references
+      //!this macro does an explicit move if the move emulation is activated
+      //!and the return type (RET_TYPE) is not a reference.
+      //!
+      //!For non-conforming compilers with rvalue references like Visual 2010 & 2012,
+      //!an explicit move is performed if RET_TYPE is not a reference.
+      //!
+      //! <b>Caution</b>: When using this macro in non-conforming or C++03
+      //!compilers, a move will be performed even if the C++11 standard does not allow it
+      //!(e.g. returning a static variable). The user is responsible for using this macro
+      //!only to return local objects that met C++11 criteria.
+      #define BOOST_MOVE_RET(RET_TYPE, REF)\
+         REF
+      //
+
+   #else //!defined(BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG) || defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+      #include <boost/move/detail/meta_utils.hpp>
+
+      namespace pdalboost {
+      namespace move_detail {
+
+      template <class Ret, class T>
+      inline typename ::pdalboost::move_detail::enable_if_c
+         <  ::pdalboost::move_detail::is_lvalue_reference<Ret>::value
+         , T&>::type
+            move_return(T& x) BOOST_NOEXCEPT
+      {
+         return x;
+      }
+
+      template <class Ret, class T>
+      inline typename ::pdalboost::move_detail::enable_if_c
+         < !::pdalboost::move_detail::is_lvalue_reference<Ret>::value
+         , Ret && >::type
+            move_return(T&& t) BOOST_NOEXCEPT
+      {
+         return static_cast< Ret&& >(t);
+      }
+
+      }  //namespace move_detail {
+      }  //namespace pdalboost {
+
+      #define BOOST_MOVE_RET(RET_TYPE, REF)\
+         pdalboost::move_detail::move_return< RET_TYPE >(REF)
+      //
+
+   #endif   //!defined(BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG) || defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+   //!This macro is used to achieve portable optimal move constructors.
+   //!
+   //!When implementing the move constructor, in C++03 compilers the moved-from argument must be
+   //!cast to the base type before calling `::pdalboost::move()` due to rvalue reference limitations.
+   //!
+   //!In C++11 compilers the cast from a rvalue reference of a derived type to a rvalue reference of
+   //!a base type is implicit.
+   #define BOOST_MOVE_BASE(BASE_TYPE, ARG) \
+      ::pdalboost::move((BASE_TYPE&)(ARG))
+   //
+
+   namespace pdalboost {
+   namespace move_detail {
+
+   template< class T> struct forward_type { typedef T type; };
+
+   }}
+
+#endif   //BOOST_NO_CXX11_RVALUE_REFERENCES
+
+#include <boost/move/detail/config_end.hpp>
+
+#endif //#ifndef BOOST_MOVE_CORE_HPP
diff --git a/vendor/pdalboost/boost/move/default_delete.hpp b/vendor/pdalboost/boost/move/default_delete.hpp
new file mode 100644
index 0000000..aae6748
--- /dev/null
+++ b/vendor/pdalboost/boost/move/default_delete.hpp
@@ -0,0 +1,201 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_MOVE_DEFAULT_DELETE_HPP_INCLUDED
+#define BOOST_MOVE_DEFAULT_DELETE_HPP_INCLUDED
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/move/detail/config_begin.hpp>
+#include <boost/move/detail/workaround.hpp>
+#include <boost/move/detail/unique_ptr_meta_utils.hpp>
+#include <boost/move/utility_core.hpp>
+#include <boost/static_assert.hpp>
+
+#include <cstddef>   //For std::size_t,std::nullptr_t
+
+//!\file
+//! Describes the default deleter (destruction policy) of <tt>unique_ptr</tt>: <tt>default_delete</tt>.
+
+namespace pdalboost{
+// @cond
+namespace move_upd {
+
+namespace bmupmu = ::pdalboost::move_upmu;
+
+////////////////////////////////////////
+////        enable_def_del
+////////////////////////////////////////
+
+//compatible with a pointer type T*:
+//When either Y* is convertible to T*
+//Y is U[N] and T is U cv []
+template<class U, class T>
+struct def_del_compatible_cond
+   : bmupmu::is_convertible<U*, T*>
+{};
+
+template<class U, class T, std::size_t N>
+struct def_del_compatible_cond<U[N], T[]>
+   : def_del_compatible_cond<U[], T[]>
+{};
+
+template<class U, class T, class Type = bmupmu::nat>
+struct enable_def_del
+   : bmupmu::enable_if_c<def_del_compatible_cond<U, T>::value, Type>
+{};
+
+////////////////////////////////////////
+////        enable_defdel_call
+////////////////////////////////////////
+
+//When 2nd is T[N], 1st(*)[N] shall be convertible to T(*)[N]; 
+//When 2nd is T[],  1st(*)[] shall be convertible to T(*)[]; 
+//Otherwise, 1st* shall be convertible to 2nd*.
+
+template<class U, class T, class Type = bmupmu::nat>
+struct enable_defdel_call
+   : public enable_def_del<U, T, Type>
+{};
+
+template<class U, class T, class Type>
+struct enable_defdel_call<U, T[], Type>
+   : public enable_def_del<U[], T[], Type>
+{};
+
+template<class U, class T, class Type, std::size_t N>
+struct enable_defdel_call<U, T[N], Type>
+   : public enable_def_del<U[N], T[N], Type>
+{};
+
+////////////////////////////////////////
+////     Some bool literal zero conversion utilities
+////////////////////////////////////////
+
+struct bool_conversion {int for_bool; int for_arg(); };
+typedef int bool_conversion::* explicit_bool_arg;
+
+#if !defined(BOOST_NO_CXX11_NULLPTR) && !defined(BOOST_NO_CXX11_DECLTYPE)
+   typedef decltype(nullptr) nullptr_type;
+#elif !defined(BOOST_NO_CXX11_NULLPTR)
+   typedef std::nullptr_t nullptr_type;
+#else
+   typedef int (bool_conversion::*nullptr_type)();
+#endif
+
+}  //namespace move_upd {
+// @endcond
+
+namespace movelib {
+
+namespace bmupd = pdalboost::move_upd;
+namespace bmupmu = ::pdalboost::move_upmu;
+
+//!The class template <tt>default_delete</tt> serves as the default deleter
+//!(destruction policy) for the class template <tt>unique_ptr</tt>.
+//!
+//! \tparam T The type to be deleted. It may be an incomplete type
+template <class T>
+struct default_delete
+{
+   //! Default constructor.
+   //!
+   BOOST_CONSTEXPR default_delete()
+   //Avoid "defaulted on its first declaration must not have an exception-specification" error for GCC 4.6
+   #if !defined(BOOST_GCC) || (BOOST_GCC < 40600 && BOOST_GCC >= 40700) || defined(BOOST_MOVE_DOXYGEN_INVOKED)
+   BOOST_NOEXCEPT
+   #endif
+   #if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || defined(BOOST_MOVE_DOXYGEN_INVOKED)
+   = default;
+   #else
+   {};
+   #endif
+
+   #if defined(BOOST_MOVE_DOXYGEN_INVOKED)
+   //! Trivial copy constructor
+   //!
+   default_delete(const default_delete&) BOOST_NOEXCEPT = default;
+   //! Trivial assignment
+   //!
+   default_delete &operator=(const default_delete&) BOOST_NOEXCEPT = default;
+   #else
+   typedef typename bmupmu::remove_extent<T>::type element_type;
+   #endif
+
+   //! <b>Effects</b>: Constructs a default_delete object from another <tt>default_delete<U></tt> object.
+   //!
+   //! <b>Remarks</b>: This constructor shall not participate in overload resolution unless:
+   //!   - If T is not an array type and U* is implicitly convertible to T*.
+   //!   - If T is an array type and U* is a more CV qualified pointer to remove_extent<T>::type.
+   template <class U>
+   default_delete(const default_delete<U>&
+      BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_def_del<U BOOST_MOVE_I T>::type* =0)
+      ) BOOST_NOEXCEPT
+   {
+      //If T is not an array type, U derives from T
+      //and T has no virtual destructor, then you have a problem
+      BOOST_STATIC_ASSERT(( !::pdalboost::move_upmu::missing_virtual_destructor<default_delete, U>::value ));
+   }
+
+   //! <b>Effects</b>: Constructs a default_delete object from another <tt>default_delete<U></tt> object.
+   //!
+   //! <b>Remarks</b>: This constructor shall not participate in overload resolution unless:
+   //!   - If T is not an array type and U* is implicitly convertible to T*.
+   //!   - If T is an array type and U* is a more CV qualified pointer to remove_extent<T>::type.
+   template <class U>
+   BOOST_MOVE_DOC1ST(default_delete&, 
+      typename bmupd::enable_def_del<U BOOST_MOVE_I T BOOST_MOVE_I default_delete &>::type)
+      operator=(const default_delete<U>&) BOOST_NOEXCEPT
+   {
+      //If T is not an array type, U derives from T
+      //and T has no virtual destructor, then you have a problem
+      BOOST_STATIC_ASSERT(( !::pdalboost::move_upmu::missing_virtual_destructor<default_delete, U>::value ));
+      return *this;
+   }
+
+   //! <b>Effects</b>: if T is not an array type, calls <tt>delete</tt> on static_cast<T*>(ptr),
+   //!   otherwise calls <tt>delete[]</tt> on static_cast<remove_extent<T>::type*>(ptr).
+   //!
+   //! <b>Remarks</b>: If U is an incomplete type, the program is ill-formed.
+   //!   This operator shall not participate in overload resolution unless:
+   //!      - T is not an array type and U* is convertible to T*, OR
+   //!      - T is an array type, and remove_cv<U>::type is the same type as
+   //!         remove_cv<remove_extent<T>::type>::type and U* is convertible to remove_extent<T>::type*.
+   template <class U>
+   BOOST_MOVE_DOC1ST(void, typename bmupd::enable_defdel_call<U BOOST_MOVE_I T BOOST_MOVE_I void>::type)
+      operator()(U* ptr) const BOOST_NOEXCEPT
+   {
+      //U must be a complete type
+      BOOST_STATIC_ASSERT(sizeof(U) > 0);
+      //If T is not an array type, U derives from T
+      //and T has no virtual destructor, then you have a problem
+      BOOST_STATIC_ASSERT(( !::pdalboost::move_upmu::missing_virtual_destructor<default_delete, U>::value ));
+      element_type * const p = static_cast<element_type*>(ptr);
+      bmupmu::is_array<T>::value ? delete [] p : delete p;
+   }
+
+   //! <b>Effects</b>: Same as <tt>(*this)(static_cast<element_type*>(nullptr))</tt>.
+   //!
+   void operator()(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) const BOOST_NOEXCEPT
+   {  BOOST_STATIC_ASSERT(sizeof(element_type) > 0);  }
+};
+
+}  //namespace movelib {
+}  //namespace pdalboost{
+
+#include <boost/move/detail/config_end.hpp>
+
+#endif   //#ifndef BOOST_MOVE_DEFAULT_DELETE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/move/detail/config_begin.hpp b/vendor/pdalboost/boost/move/detail/config_begin.hpp
new file mode 100644
index 0000000..342390b
--- /dev/null
+++ b/vendor/pdalboost/boost/move/detail/config_begin.hpp
@@ -0,0 +1,19 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2012-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_CONFIG_HPP
+#include <boost/config.hpp>
+#endif
+
+#ifdef BOOST_MSVC
+#  pragma warning (push)
+#  pragma warning (disable : 4324) // structure was padded due to __declspec(align())
+#  pragma warning (disable : 4675) // "function":  resolved overload was found by argument-dependent lookup
+#  pragma warning (disable : 4996) // "function": was declared deprecated (_CRT_SECURE_NO_DEPRECATE/_SCL_SECURE_NO_WARNINGS)
+#endif
diff --git a/vendor/pdalboost/boost/move/detail/config_end.hpp b/vendor/pdalboost/boost/move/detail/config_end.hpp
new file mode 100644
index 0000000..71a99e9
--- /dev/null
+++ b/vendor/pdalboost/boost/move/detail/config_end.hpp
@@ -0,0 +1,12 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2012-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+#if defined BOOST_MSVC
+#  pragma warning (pop)
+#endif
diff --git a/vendor/pdalboost/boost/move/detail/fwd_macros.hpp b/vendor/pdalboost/boost/move/detail/fwd_macros.hpp
new file mode 100644
index 0000000..5519816
--- /dev/null
+++ b/vendor/pdalboost/boost/move/detail/fwd_macros.hpp
@@ -0,0 +1,661 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/container for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_MOVE_DETAIL_FWD_MACROS_HPP
+#define BOOST_MOVE_DETAIL_FWD_MACROS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/move/detail/workaround.hpp>
+
+namespace pdalboost {
+namespace move_detail {
+
+template <typename T> struct unvoid { typedef T type; };
+template <> struct unvoid<void> { struct type { }; };
+template <> struct unvoid<const void> { struct type { }; };
+
+}  //namespace move_detail {
+}  //namespace pdalboost {
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
+#if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG)
+
+namespace pdalboost {
+namespace move_detail {
+
+   template<class T>
+   struct mref;
+
+   template<class T>
+   struct mref<T &>
+   {
+      explicit mref(T &t) : t_(t){}
+      T &t_;
+      T & get() {  return t_;   }
+   };
+
+   template<class T>
+   struct mref
+   {
+      explicit mref(T &&t) : t_(t) {}
+      T &t_;
+      T &&get() {  return ::pdalboost::move(t_);   }
+   };
+
+}  //namespace move_detail {
+}  //namespace pdalboost {
+
+#endif   //BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG
+#endif   //!defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
+//BOOST_MOVE_REPEATN(MACRO)
+#define BOOST_MOVE_REPEAT0(MACRO)
+#define BOOST_MOVE_REPEAT1(MACRO)                            MACRO
+#define BOOST_MOVE_REPEAT2(MACRO) BOOST_MOVE_REPEAT1(MACRO), MACRO
+#define BOOST_MOVE_REPEAT3(MACRO) BOOST_MOVE_REPEAT2(MACRO), MACRO
+#define BOOST_MOVE_REPEAT4(MACRO) BOOST_MOVE_REPEAT3(MACRO), MACRO
+#define BOOST_MOVE_REPEAT5(MACRO) BOOST_MOVE_REPEAT4(MACRO), MACRO
+#define BOOST_MOVE_REPEAT6(MACRO) BOOST_MOVE_REPEAT5(MACRO), MACRO
+#define BOOST_MOVE_REPEAT7(MACRO) BOOST_MOVE_REPEAT6(MACRO), MACRO
+#define BOOST_MOVE_REPEAT8(MACRO) BOOST_MOVE_REPEAT7(MACRO), MACRO
+#define BOOST_MOVE_REPEAT9(MACRO) BOOST_MOVE_REPEAT8(MACRO), MACRO
+
+//BOOST_MOVE_FWDN
+#define BOOST_MOVE_FWD0
+#define BOOST_MOVE_FWD1                  ::pdalboost::forward<P0>(p0)
+#define BOOST_MOVE_FWD2 BOOST_MOVE_FWD1, ::pdalboost::forward<P1>(p1)
+#define BOOST_MOVE_FWD3 BOOST_MOVE_FWD2, ::pdalboost::forward<P2>(p2)
+#define BOOST_MOVE_FWD4 BOOST_MOVE_FWD3, ::pdalboost::forward<P3>(p3)
+#define BOOST_MOVE_FWD5 BOOST_MOVE_FWD4, ::pdalboost::forward<P4>(p4)
+#define BOOST_MOVE_FWD6 BOOST_MOVE_FWD5, ::pdalboost::forward<P5>(p5)
+#define BOOST_MOVE_FWD7 BOOST_MOVE_FWD6, ::pdalboost::forward<P6>(p6)
+#define BOOST_MOVE_FWD8 BOOST_MOVE_FWD7, ::pdalboost::forward<P7>(p7)
+#define BOOST_MOVE_FWD9 BOOST_MOVE_FWD8, ::pdalboost::forward<P8>(p8)
+
+//BOOST_MOVE_FWDQN
+#define BOOST_MOVE_FWDQ0
+#define BOOST_MOVE_FWDQ1                   ::pdalboost::forward<Q0>(q0)
+#define BOOST_MOVE_FWDQ2 BOOST_MOVE_FWDQ1, ::pdalboost::forward<Q1>(q1)
+#define BOOST_MOVE_FWDQ3 BOOST_MOVE_FWDQ2, ::pdalboost::forward<Q2>(q2)
+#define BOOST_MOVE_FWDQ4 BOOST_MOVE_FWDQ3, ::pdalboost::forward<Q3>(q3)
+#define BOOST_MOVE_FWDQ5 BOOST_MOVE_FWDQ4, ::pdalboost::forward<Q4>(q4)
+#define BOOST_MOVE_FWDQ6 BOOST_MOVE_FWDQ5, ::pdalboost::forward<Q5>(q5)
+#define BOOST_MOVE_FWDQ7 BOOST_MOVE_FWDQ6, ::pdalboost::forward<Q6>(q6)
+#define BOOST_MOVE_FWDQ8 BOOST_MOVE_FWDQ7, ::pdalboost::forward<Q7>(q7)
+#define BOOST_MOVE_FWDQ9 BOOST_MOVE_FWDQ8, ::pdalboost::forward<Q8>(q8)
+
+//BOOST_MOVE_ARGN
+#define BOOST_MOVE_ARG0
+#define BOOST_MOVE_ARG1                  p0
+#define BOOST_MOVE_ARG2 BOOST_MOVE_ARG1, p1
+#define BOOST_MOVE_ARG3 BOOST_MOVE_ARG2, p2
+#define BOOST_MOVE_ARG4 BOOST_MOVE_ARG3, p3
+#define BOOST_MOVE_ARG5 BOOST_MOVE_ARG4, p4
+#define BOOST_MOVE_ARG6 BOOST_MOVE_ARG5, p5
+#define BOOST_MOVE_ARG7 BOOST_MOVE_ARG6, p6
+#define BOOST_MOVE_ARG8 BOOST_MOVE_ARG7, p7
+#define BOOST_MOVE_ARG9 BOOST_MOVE_ARG8, p8
+
+//BOOST_MOVE_ARGQN
+#define BOOST_MOVE_ARGQ0
+#define BOOST_MOVE_ARGQ1                   q0
+#define BOOST_MOVE_ARGQ2 BOOST_MOVE_ARGQ1, q1
+#define BOOST_MOVE_ARGQ3 BOOST_MOVE_ARGQ2, q2
+#define BOOST_MOVE_ARGQ4 BOOST_MOVE_ARGQ3, q3
+#define BOOST_MOVE_ARGQ5 BOOST_MOVE_ARGQ4, q4
+#define BOOST_MOVE_ARGQ6 BOOST_MOVE_ARGQ5, q5
+#define BOOST_MOVE_ARGQ7 BOOST_MOVE_ARGQ6, q6
+#define BOOST_MOVE_ARGQ8 BOOST_MOVE_ARGQ7, q7
+#define BOOST_MOVE_ARGQ9 BOOST_MOVE_ARGQ8, q8
+
+//BOOST_MOVE_DECLVALN
+#define BOOST_MOVE_DECLVAL0
+#define BOOST_MOVE_DECLVAL1                      ::pdalboost::move_detail::declval<P0>()
+#define BOOST_MOVE_DECLVAL2 BOOST_MOVE_DECLVAL1, ::pdalboost::move_detail::declval<P1>()
+#define BOOST_MOVE_DECLVAL3 BOOST_MOVE_DECLVAL2, ::pdalboost::move_detail::declval<P2>()
+#define BOOST_MOVE_DECLVAL4 BOOST_MOVE_DECLVAL3, ::pdalboost::move_detail::declval<P3>()
+#define BOOST_MOVE_DECLVAL5 BOOST_MOVE_DECLVAL4, ::pdalboost::move_detail::declval<P4>()
+#define BOOST_MOVE_DECLVAL6 BOOST_MOVE_DECLVAL5, ::pdalboost::move_detail::declval<P5>()
+#define BOOST_MOVE_DECLVAL7 BOOST_MOVE_DECLVAL6, ::pdalboost::move_detail::declval<P6>()
+#define BOOST_MOVE_DECLVAL8 BOOST_MOVE_DECLVAL7, ::pdalboost::move_detail::declval<P7>()
+#define BOOST_MOVE_DECLVAL9 BOOST_MOVE_DECLVAL8, ::pdalboost::move_detail::declval<P8>()
+
+//BOOST_MOVE_DECLVALQN
+#define BOOST_MOVE_DECLVALQ0
+#define BOOST_MOVE_DECLVALQ1                       ::pdalboost::move_detail::declval<Q0>()
+#define BOOST_MOVE_DECLVALQ2 BOOST_MOVE_DECLVALQ1, ::pdalboost::move_detail::declval<Q1>()
+#define BOOST_MOVE_DECLVALQ3 BOOST_MOVE_DECLVALQ2, ::pdalboost::move_detail::declval<Q2>()
+#define BOOST_MOVE_DECLVALQ4 BOOST_MOVE_DECLVALQ3, ::pdalboost::move_detail::declval<Q3>()
+#define BOOST_MOVE_DECLVALQ5 BOOST_MOVE_DECLVALQ4, ::pdalboost::move_detail::declval<Q4>()
+#define BOOST_MOVE_DECLVALQ6 BOOST_MOVE_DECLVALQ5, ::pdalboost::move_detail::declval<Q5>()
+#define BOOST_MOVE_DECLVALQ7 BOOST_MOVE_DECLVALQ6, ::pdalboost::move_detail::declval<Q6>()
+#define BOOST_MOVE_DECLVALQ8 BOOST_MOVE_DECLVALQ7, ::pdalboost::move_detail::declval<Q7>()
+#define BOOST_MOVE_DECLVALQ9 BOOST_MOVE_DECLVALQ8, ::pdalboost::move_detail::declval<Q8>()
+
+#ifdef BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG
+   #define BOOST_MOVE_MREF(T)    ::pdalboost::move_detail::mref<T>
+   #define BOOST_MOVE_MFWD(N)    ::pdalboost::forward<P##N>(this->m_p##N.get())
+   #define BOOST_MOVE_MFWDQ(N)   ::pdalboost::forward<Q##N>(this->m_q##N.get())
+#else
+   #define BOOST_MOVE_MREF(T)    BOOST_FWD_REF(T)
+   #define BOOST_MOVE_MFWD(N)    ::pdalboost::forward<P##N>(this->m_p##N)
+   #define BOOST_MOVE_MFWDQ(N)   ::pdalboost::forward<Q##N>(this->m_q##N)
+#endif
+#define BOOST_MOVE_MITFWD(N)  *this->m_p##N
+#define BOOST_MOVE_MINC(N)    ++this->m_p##N
+#define BOOST_MOVE_MITFWDQ(N) *this->m_q##N
+#define BOOST_MOVE_MINCQ(N)   ++this->m_q##N
+
+
+//BOOST_MOVE_MFWDN
+#define BOOST_MOVE_MFWD0
+#define BOOST_MOVE_MFWD1                   BOOST_MOVE_MFWD(0)
+#define BOOST_MOVE_MFWD2 BOOST_MOVE_MFWD1, BOOST_MOVE_MFWD(1)
+#define BOOST_MOVE_MFWD3 BOOST_MOVE_MFWD2, BOOST_MOVE_MFWD(2)
+#define BOOST_MOVE_MFWD4 BOOST_MOVE_MFWD3, BOOST_MOVE_MFWD(3)
+#define BOOST_MOVE_MFWD5 BOOST_MOVE_MFWD4, BOOST_MOVE_MFWD(4)
+#define BOOST_MOVE_MFWD6 BOOST_MOVE_MFWD5, BOOST_MOVE_MFWD(5)
+#define BOOST_MOVE_MFWD7 BOOST_MOVE_MFWD6, BOOST_MOVE_MFWD(6)
+#define BOOST_MOVE_MFWD8 BOOST_MOVE_MFWD7, BOOST_MOVE_MFWD(7)
+#define BOOST_MOVE_MFWD9 BOOST_MOVE_MFWD8, BOOST_MOVE_MFWD(8)
+
+//BOOST_MOVE_MFWDN
+#define BOOST_MOVE_MFWDQ0
+#define BOOST_MOVE_MFWDQ1                    BOOST_MOVE_MFWDQ(0)
+#define BOOST_MOVE_MFWDQ2 BOOST_MOVE_MFWDQ1, BOOST_MOVE_MFWDQ(1)
+#define BOOST_MOVE_MFWDQ3 BOOST_MOVE_MFWDQ2, BOOST_MOVE_MFWDQ(2)
+#define BOOST_MOVE_MFWDQ4 BOOST_MOVE_MFWDQ3, BOOST_MOVE_MFWDQ(3)
+#define BOOST_MOVE_MFWDQ5 BOOST_MOVE_MFWDQ4, BOOST_MOVE_MFWDQ(4)
+#define BOOST_MOVE_MFWDQ6 BOOST_MOVE_MFWDQ5, BOOST_MOVE_MFWDQ(5)
+#define BOOST_MOVE_MFWDQ7 BOOST_MOVE_MFWDQ6, BOOST_MOVE_MFWDQ(6)
+#define BOOST_MOVE_MFWDQ8 BOOST_MOVE_MFWDQ7, BOOST_MOVE_MFWDQ(7)
+#define BOOST_MOVE_MFWDQ9 BOOST_MOVE_MFWDQ8, BOOST_MOVE_MFWDQ(8)
+
+//BOOST_MOVE_MINCN
+#define BOOST_MOVE_MINC0
+#define BOOST_MOVE_MINC1                   BOOST_MOVE_MINC(0)
+#define BOOST_MOVE_MINC2 BOOST_MOVE_MINC1, BOOST_MOVE_MINC(1)
+#define BOOST_MOVE_MINC3 BOOST_MOVE_MINC2, BOOST_MOVE_MINC(2)
+#define BOOST_MOVE_MINC4 BOOST_MOVE_MINC3, BOOST_MOVE_MINC(3)
+#define BOOST_MOVE_MINC5 BOOST_MOVE_MINC4, BOOST_MOVE_MINC(4)
+#define BOOST_MOVE_MINC6 BOOST_MOVE_MINC5, BOOST_MOVE_MINC(5)
+#define BOOST_MOVE_MINC7 BOOST_MOVE_MINC6, BOOST_MOVE_MINC(6)
+#define BOOST_MOVE_MINC8 BOOST_MOVE_MINC7, BOOST_MOVE_MINC(7)
+#define BOOST_MOVE_MINC9 BOOST_MOVE_MINC8, BOOST_MOVE_MINC(8)
+
+//BOOST_MOVE_MINCQN
+#define BOOST_MOVE_MINCQ0
+#define BOOST_MOVE_MINCQ1                    BOOST_MOVE_MINCQ(0)
+#define BOOST_MOVE_MINCQ2 BOOST_MOVE_MINCQ1, BOOST_MOVE_MINCQ(1)
+#define BOOST_MOVE_MINCQ3 BOOST_MOVE_MINCQ2, BOOST_MOVE_MINCQ(2)
+#define BOOST_MOVE_MINCQ4 BOOST_MOVE_MINCQ3, BOOST_MOVE_MINCQ(3)
+#define BOOST_MOVE_MINCQ5 BOOST_MOVE_MINCQ4, BOOST_MOVE_MINCQ(4)
+#define BOOST_MOVE_MINCQ6 BOOST_MOVE_MINCQ5, BOOST_MOVE_MINCQ(5)
+#define BOOST_MOVE_MINCQ7 BOOST_MOVE_MINCQ6, BOOST_MOVE_MINCQ(6)
+#define BOOST_MOVE_MINCQ8 BOOST_MOVE_MINCQ7, BOOST_MOVE_MINCQ(7)
+#define BOOST_MOVE_MINCQ9 BOOST_MOVE_MINCQ8, BOOST_MOVE_MINCQ(8)
+
+//BOOST_MOVE_MITFWDN
+#define BOOST_MOVE_MITFWD0
+#define BOOST_MOVE_MITFWD1                     BOOST_MOVE_MITFWD(0)
+#define BOOST_MOVE_MITFWD2 BOOST_MOVE_MITFWD1, BOOST_MOVE_MITFWD(1)
+#define BOOST_MOVE_MITFWD3 BOOST_MOVE_MITFWD2, BOOST_MOVE_MITFWD(2)
+#define BOOST_MOVE_MITFWD4 BOOST_MOVE_MITFWD3, BOOST_MOVE_MITFWD(3)
+#define BOOST_MOVE_MITFWD5 BOOST_MOVE_MITFWD4, BOOST_MOVE_MITFWD(4)
+#define BOOST_MOVE_MITFWD6 BOOST_MOVE_MITFWD5, BOOST_MOVE_MITFWD(5)
+#define BOOST_MOVE_MITFWD7 BOOST_MOVE_MITFWD6, BOOST_MOVE_MITFWD(6)
+#define BOOST_MOVE_MITFWD8 BOOST_MOVE_MITFWD7, BOOST_MOVE_MITFWD(7)
+#define BOOST_MOVE_MITFWD9 BOOST_MOVE_MITFWD8, BOOST_MOVE_MITFWD(8)
+
+//BOOST_MOVE_MITFWDQN
+#define BOOST_MOVE_MITFWDQ0
+#define BOOST_MOVE_MITFWDQ1                      BOOST_MOVE_MITFWDQ(0)
+#define BOOST_MOVE_MITFWDQ2 BOOST_MOVE_MITFWDQ1, BOOST_MOVE_MITFWDQ(1)
+#define BOOST_MOVE_MITFWDQ3 BOOST_MOVE_MITFWDQ2, BOOST_MOVE_MITFWDQ(2)
+#define BOOST_MOVE_MITFWDQ4 BOOST_MOVE_MITFWDQ3, BOOST_MOVE_MITFWDQ(3)
+#define BOOST_MOVE_MITFWDQ5 BOOST_MOVE_MITFWDQ4, BOOST_MOVE_MITFWDQ(4)
+#define BOOST_MOVE_MITFWDQ6 BOOST_MOVE_MITFWDQ5, BOOST_MOVE_MITFWDQ(5)
+#define BOOST_MOVE_MITFWDQ7 BOOST_MOVE_MITFWDQ6, BOOST_MOVE_MITFWDQ(6)
+#define BOOST_MOVE_MITFWDQ8 BOOST_MOVE_MITFWDQ7, BOOST_MOVE_MITFWDQ(7)
+#define BOOST_MOVE_MITFWDQ9 BOOST_MOVE_MITFWDQ8, BOOST_MOVE_MITFWDQ(8)
+
+//BOOST_MOVE_FWD_INITN
+#define BOOST_MOVE_FWD_INIT0
+#define BOOST_MOVE_FWD_INIT1                       m_p0(::pdalboost::forward<P0>(p0))
+#define BOOST_MOVE_FWD_INIT2 BOOST_MOVE_FWD_INIT1, m_p1(::pdalboost::forward<P1>(p1))
+#define BOOST_MOVE_FWD_INIT3 BOOST_MOVE_FWD_INIT2, m_p2(::pdalboost::forward<P2>(p2))
+#define BOOST_MOVE_FWD_INIT4 BOOST_MOVE_FWD_INIT3, m_p3(::pdalboost::forward<P3>(p3))
+#define BOOST_MOVE_FWD_INIT5 BOOST_MOVE_FWD_INIT4, m_p4(::pdalboost::forward<P4>(p4))
+#define BOOST_MOVE_FWD_INIT6 BOOST_MOVE_FWD_INIT5, m_p5(::pdalboost::forward<P5>(p5))
+#define BOOST_MOVE_FWD_INIT7 BOOST_MOVE_FWD_INIT6, m_p6(::pdalboost::forward<P6>(p6))
+#define BOOST_MOVE_FWD_INIT8 BOOST_MOVE_FWD_INIT7, m_p7(::pdalboost::forward<P7>(p7))
+#define BOOST_MOVE_FWD_INIT9 BOOST_MOVE_FWD_INIT8, m_p8(::pdalboost::forward<P8>(p8))
+
+//BOOST_MOVE_FWD_INITQN
+#define BOOST_MOVE_FWD_INITQ0
+#define BOOST_MOVE_FWD_INITQ1                        m_q0(::pdalboost::forward<Q0>(q0))
+#define BOOST_MOVE_FWD_INITQ2 BOOST_MOVE_FWD_INITQ1, m_q1(::pdalboost::forward<Q1>(q1))
+#define BOOST_MOVE_FWD_INITQ3 BOOST_MOVE_FWD_INITQ2, m_q2(::pdalboost::forward<Q2>(q2))
+#define BOOST_MOVE_FWD_INITQ4 BOOST_MOVE_FWD_INITQ3, m_q3(::pdalboost::forward<Q3>(q3))
+#define BOOST_MOVE_FWD_INITQ5 BOOST_MOVE_FWD_INITQ4, m_q4(::pdalboost::forward<Q4>(q4))
+#define BOOST_MOVE_FWD_INITQ6 BOOST_MOVE_FWD_INITQ5, m_q5(::pdalboost::forward<Q5>(q5))
+#define BOOST_MOVE_FWD_INITQ7 BOOST_MOVE_FWD_INITQ6, m_q6(::pdalboost::forward<Q6>(q6))
+#define BOOST_MOVE_FWD_INITQ8 BOOST_MOVE_FWD_INITQ7, m_q7(::pdalboost::forward<Q7>(q7))
+#define BOOST_MOVE_FWD_INITQ9 BOOST_MOVE_FWD_INITQ8, m_q8(::pdalboost::forward<Q8>(q8))
+
+//BOOST_MOVE_VAL_INITN
+#define BOOST_MOVE_VAL_INIT0
+#define BOOST_MOVE_VAL_INIT1                       m_p0(p0)
+#define BOOST_MOVE_VAL_INIT2 BOOST_MOVE_VAL_INIT1, m_p1(p1)
+#define BOOST_MOVE_VAL_INIT3 BOOST_MOVE_VAL_INIT2, m_p2(p2)
+#define BOOST_MOVE_VAL_INIT4 BOOST_MOVE_VAL_INIT3, m_p3(p3)
+#define BOOST_MOVE_VAL_INIT5 BOOST_MOVE_VAL_INIT4, m_p4(p4)
+#define BOOST_MOVE_VAL_INIT6 BOOST_MOVE_VAL_INIT5, m_p5(p5)
+#define BOOST_MOVE_VAL_INIT7 BOOST_MOVE_VAL_INIT6, m_p6(p6)
+#define BOOST_MOVE_VAL_INIT8 BOOST_MOVE_VAL_INIT7, m_p7(p7)
+#define BOOST_MOVE_VAL_INIT9 BOOST_MOVE_VAL_INIT8, m_p8(p8)
+
+//BOOST_MOVE_VAL_INITQN
+#define BOOST_MOVE_VAL_INITQ0
+#define BOOST_MOVE_VAL_INITQ1                        m_q0(q0)
+#define BOOST_MOVE_VAL_INITQ2 BOOST_MOVE_VAL_INITQ1, m_q1(q1)
+#define BOOST_MOVE_VAL_INITQ3 BOOST_MOVE_VAL_INITQ2, m_q2(q2)
+#define BOOST_MOVE_VAL_INITQ4 BOOST_MOVE_VAL_INITQ3, m_q3(q3)
+#define BOOST_MOVE_VAL_INITQ5 BOOST_MOVE_VAL_INITQ4, m_q4(q4)
+#define BOOST_MOVE_VAL_INITQ6 BOOST_MOVE_VAL_INITQ5, m_q5(q5)
+#define BOOST_MOVE_VAL_INITQ7 BOOST_MOVE_VAL_INITQ6, m_q6(q6)
+#define BOOST_MOVE_VAL_INITQ8 BOOST_MOVE_VAL_INITQ7, m_q7(q7)
+#define BOOST_MOVE_VAL_INITQ9 BOOST_MOVE_VAL_INITQ8, m_q8(q8)
+
+//BOOST_MOVE_UREFN
+#define BOOST_MOVE_UREF0
+#define BOOST_MOVE_UREF1                   BOOST_FWD_REF(P0) p0
+#define BOOST_MOVE_UREF2 BOOST_MOVE_UREF1, BOOST_FWD_REF(P1) p1
+#define BOOST_MOVE_UREF3 BOOST_MOVE_UREF2, BOOST_FWD_REF(P2) p2
+#define BOOST_MOVE_UREF4 BOOST_MOVE_UREF3, BOOST_FWD_REF(P3) p3
+#define BOOST_MOVE_UREF5 BOOST_MOVE_UREF4, BOOST_FWD_REF(P4) p4
+#define BOOST_MOVE_UREF6 BOOST_MOVE_UREF5, BOOST_FWD_REF(P5) p5
+#define BOOST_MOVE_UREF7 BOOST_MOVE_UREF6, BOOST_FWD_REF(P6) p6
+#define BOOST_MOVE_UREF8 BOOST_MOVE_UREF7, BOOST_FWD_REF(P7) p7
+#define BOOST_MOVE_UREF9 BOOST_MOVE_UREF8, BOOST_FWD_REF(P8) p8
+
+//BOOST_MOVE_UREFQN
+#define BOOST_MOVE_UREFQ0
+#define BOOST_MOVE_UREFQ1                    BOOST_FWD_REF(Q0) q0
+#define BOOST_MOVE_UREFQ2 BOOST_MOVE_UREFQ1, BOOST_FWD_REF(Q1) q1
+#define BOOST_MOVE_UREFQ3 BOOST_MOVE_UREFQ2, BOOST_FWD_REF(Q2) q2
+#define BOOST_MOVE_UREFQ4 BOOST_MOVE_UREFQ3, BOOST_FWD_REF(Q3) q3
+#define BOOST_MOVE_UREFQ5 BOOST_MOVE_UREFQ4, BOOST_FWD_REF(Q4) q4
+#define BOOST_MOVE_UREFQ6 BOOST_MOVE_UREFQ5, BOOST_FWD_REF(Q5) q5
+#define BOOST_MOVE_UREFQ7 BOOST_MOVE_UREFQ6, BOOST_FWD_REF(Q6) q6
+#define BOOST_MOVE_UREFQ8 BOOST_MOVE_UREFQ7, BOOST_FWD_REF(Q7) q7
+#define BOOST_MOVE_UREFQ9 BOOST_MOVE_UREFQ8, BOOST_FWD_REF(Q8) q8
+
+//BOOST_MOVE_VALN
+#define BOOST_MOVE_VAL0
+#define BOOST_MOVE_VAL1                  BOOST_FWD_REF(P0) p0
+#define BOOST_MOVE_VAL2 BOOST_MOVE_VAL1, BOOST_FWD_REF(P1) p1
+#define BOOST_MOVE_VAL3 BOOST_MOVE_VAL2, BOOST_FWD_REF(P2) p2
+#define BOOST_MOVE_VAL4 BOOST_MOVE_VAL3, BOOST_FWD_REF(P3) p3
+#define BOOST_MOVE_VAL5 BOOST_MOVE_VAL4, BOOST_FWD_REF(P4) p4
+#define BOOST_MOVE_VAL6 BOOST_MOVE_VAL5, BOOST_FWD_REF(P5) p5
+#define BOOST_MOVE_VAL7 BOOST_MOVE_VAL6, BOOST_FWD_REF(P6) p6
+#define BOOST_MOVE_VAL8 BOOST_MOVE_VAL7, BOOST_FWD_REF(P7) p7
+#define BOOST_MOVE_VAL9 BOOST_MOVE_VAL8, BOOST_FWD_REF(P8) p8
+
+//BOOST_MOVE_VALQN
+#define BOOST_MOVE_VALQ0
+#define BOOST_MOVE_VALQ1                   BOOST_FWD_REF(Q0) q0
+#define BOOST_MOVE_VALQ2 BOOST_MOVE_VALQ1, BOOST_FWD_REF(Q1) q1
+#define BOOST_MOVE_VALQ3 BOOST_MOVE_VALQ2, BOOST_FWD_REF(Q2) q2
+#define BOOST_MOVE_VALQ4 BOOST_MOVE_VALQ3, BOOST_FWD_REF(Q3) q3
+#define BOOST_MOVE_VALQ5 BOOST_MOVE_VALQ4, BOOST_FWD_REF(Q4) q4
+#define BOOST_MOVE_VALQ6 BOOST_MOVE_VALQ5, BOOST_FWD_REF(Q5) q5
+#define BOOST_MOVE_VALQ7 BOOST_MOVE_VALQ6, BOOST_FWD_REF(Q6) q6
+#define BOOST_MOVE_VALQ8 BOOST_MOVE_VALQ7, BOOST_FWD_REF(Q7) q7
+#define BOOST_MOVE_VALQ9 BOOST_MOVE_VALQ8, BOOST_FWD_REF(Q8) q8
+
+
+#define BOOST_MOVE_UNVOIDCREF(T) const typename pdalboost::move_detail::unvoid<T>::type&
+//BOOST_MOVE_CREFN
+#define BOOST_MOVE_CREF0
+#define BOOST_MOVE_CREF1                   BOOST_MOVE_UNVOIDCREF(P0) p0
+#define BOOST_MOVE_CREF2 BOOST_MOVE_CREF1, BOOST_MOVE_UNVOIDCREF(P1) p1
+#define BOOST_MOVE_CREF3 BOOST_MOVE_CREF2, BOOST_MOVE_UNVOIDCREF(P2) p2
+#define BOOST_MOVE_CREF4 BOOST_MOVE_CREF3, BOOST_MOVE_UNVOIDCREF(P3) p3
+#define BOOST_MOVE_CREF5 BOOST_MOVE_CREF4, BOOST_MOVE_UNVOIDCREF(P4) p4
+#define BOOST_MOVE_CREF6 BOOST_MOVE_CREF5, BOOST_MOVE_UNVOIDCREF(P5) p5
+#define BOOST_MOVE_CREF7 BOOST_MOVE_CREF6, BOOST_MOVE_UNVOIDCREF(P6) p6
+#define BOOST_MOVE_CREF8 BOOST_MOVE_CREF7, BOOST_MOVE_UNVOIDCREF(P7) p7
+#define BOOST_MOVE_CREF9 BOOST_MOVE_CREF8, BOOST_MOVE_UNVOIDCREF(P8) p8
+
+//BOOST_MOVE_CREFQN
+#define BOOST_MOVE_CREFQ0
+#define BOOST_MOVE_CREFQ1                    BOOST_MOVE_UNVOIDCREF(Q0) q0
+#define BOOST_MOVE_CREFQ2 BOOST_MOVE_CREFQ1, BOOST_MOVE_UNVOIDCREF(Q1) q1
+#define BOOST_MOVE_CREFQ3 BOOST_MOVE_CREFQ2, BOOST_MOVE_UNVOIDCREF(Q2) q2
+#define BOOST_MOVE_CREFQ4 BOOST_MOVE_CREFQ3, BOOST_MOVE_UNVOIDCREF(Q3) q3
+#define BOOST_MOVE_CREFQ5 BOOST_MOVE_CREFQ4, BOOST_MOVE_UNVOIDCREF(Q4) q4
+#define BOOST_MOVE_CREFQ6 BOOST_MOVE_CREFQ5, BOOST_MOVE_UNVOIDCREF(Q5) q5
+#define BOOST_MOVE_CREFQ7 BOOST_MOVE_CREFQ6, BOOST_MOVE_UNVOIDCREF(Q6) q6
+#define BOOST_MOVE_CREFQ8 BOOST_MOVE_CREFQ7, BOOST_MOVE_UNVOIDCREF(Q7) q7
+#define BOOST_MOVE_CREFQ9 BOOST_MOVE_CREFQ8, BOOST_MOVE_UNVOIDCREF(Q8) q8
+
+//BOOST_MOVE_CLASSN
+#define BOOST_MOVE_CLASS0
+#define BOOST_MOVE_CLASS1                    class P0
+#define BOOST_MOVE_CLASS2 BOOST_MOVE_CLASS1, class P1
+#define BOOST_MOVE_CLASS3 BOOST_MOVE_CLASS2, class P2
+#define BOOST_MOVE_CLASS4 BOOST_MOVE_CLASS3, class P3
+#define BOOST_MOVE_CLASS5 BOOST_MOVE_CLASS4, class P4
+#define BOOST_MOVE_CLASS6 BOOST_MOVE_CLASS5, class P5
+#define BOOST_MOVE_CLASS7 BOOST_MOVE_CLASS6, class P6
+#define BOOST_MOVE_CLASS8 BOOST_MOVE_CLASS7, class P7
+#define BOOST_MOVE_CLASS9 BOOST_MOVE_CLASS8, class P8
+
+//BOOST_MOVE_CLASSQN
+#define BOOST_MOVE_CLASSQ0
+#define BOOST_MOVE_CLASSQ1                     class Q0
+#define BOOST_MOVE_CLASSQ2 BOOST_MOVE_CLASSQ1, class Q1
+#define BOOST_MOVE_CLASSQ3 BOOST_MOVE_CLASSQ2, class Q2
+#define BOOST_MOVE_CLASSQ4 BOOST_MOVE_CLASSQ3, class Q3
+#define BOOST_MOVE_CLASSQ5 BOOST_MOVE_CLASSQ4, class Q4
+#define BOOST_MOVE_CLASSQ6 BOOST_MOVE_CLASSQ5, class Q5
+#define BOOST_MOVE_CLASSQ7 BOOST_MOVE_CLASSQ6, class Q6
+#define BOOST_MOVE_CLASSQ8 BOOST_MOVE_CLASSQ7, class Q7
+#define BOOST_MOVE_CLASSQ9 BOOST_MOVE_CLASSQ8, class Q8
+
+//BOOST_MOVE_CLASSDFLTN
+#define BOOST_MOVE_CLASSDFLT0
+#define BOOST_MOVE_CLASSDFLT1                        class P0 = void
+#define BOOST_MOVE_CLASSDFLT2 BOOST_MOVE_CLASSDFLT1, class P1 = void
+#define BOOST_MOVE_CLASSDFLT3 BOOST_MOVE_CLASSDFLT2, class P2 = void
+#define BOOST_MOVE_CLASSDFLT4 BOOST_MOVE_CLASSDFLT3, class P3 = void
+#define BOOST_MOVE_CLASSDFLT5 BOOST_MOVE_CLASSDFLT4, class P4 = void
+#define BOOST_MOVE_CLASSDFLT6 BOOST_MOVE_CLASSDFLT5, class P5 = void
+#define BOOST_MOVE_CLASSDFLT7 BOOST_MOVE_CLASSDFLT6, class P6 = void
+#define BOOST_MOVE_CLASSDFLT8 BOOST_MOVE_CLASSDFLT7, class P7 = void
+#define BOOST_MOVE_CLASSDFLT9 BOOST_MOVE_CLASSDFLT8, class P8 = void
+
+//BOOST_MOVE_CLASSDFLTQN
+#define BOOST_MOVE_CLASSDFLTQ0
+#define BOOST_MOVE_CLASSDFLTQ1                         class Q0 = void
+#define BOOST_MOVE_CLASSDFLTQ2 BOOST_MOVE_CLASSDFLTQ1, class Q1 = void
+#define BOOST_MOVE_CLASSDFLTQ3 BOOST_MOVE_CLASSDFLTQ2, class Q2 = void
+#define BOOST_MOVE_CLASSDFLTQ4 BOOST_MOVE_CLASSDFLTQ3, class Q3 = void
+#define BOOST_MOVE_CLASSDFLTQ5 BOOST_MOVE_CLASSDFLTQ4, class Q4 = void
+#define BOOST_MOVE_CLASSDFLTQ6 BOOST_MOVE_CLASSDFLTQ5, class Q5 = void
+#define BOOST_MOVE_CLASSDFLTQ7 BOOST_MOVE_CLASSDFLTQ6, class Q6 = void
+#define BOOST_MOVE_CLASSDFLTQ8 BOOST_MOVE_CLASSDFLTQ7, class Q7 = void
+#define BOOST_MOVE_CLASSDFLTQ9 BOOST_MOVE_CLASSDFLTQ8, class Q8 = void
+
+//BOOST_MOVE_TARGN
+#define BOOST_MOVE_TARG0
+#define BOOST_MOVE_TARG1                   P0
+#define BOOST_MOVE_TARG2 BOOST_MOVE_TARG1, P1
+#define BOOST_MOVE_TARG3 BOOST_MOVE_TARG2, P2
+#define BOOST_MOVE_TARG4 BOOST_MOVE_TARG3, P3
+#define BOOST_MOVE_TARG5 BOOST_MOVE_TARG4, P4
+#define BOOST_MOVE_TARG6 BOOST_MOVE_TARG5, P5
+#define BOOST_MOVE_TARG7 BOOST_MOVE_TARG6, P6
+#define BOOST_MOVE_TARG8 BOOST_MOVE_TARG7, P7
+#define BOOST_MOVE_TARG9 BOOST_MOVE_TARG8, P8
+
+//BOOST_MOVE_TARGQN
+#define BOOST_MOVE_TARGQ0
+#define BOOST_MOVE_TARGQ1                    Q0
+#define BOOST_MOVE_TARGQ2 BOOST_MOVE_TARGQ1, Q1
+#define BOOST_MOVE_TARGQ3 BOOST_MOVE_TARGQ2, Q2
+#define BOOST_MOVE_TARGQ4 BOOST_MOVE_TARGQ3, Q3
+#define BOOST_MOVE_TARGQ5 BOOST_MOVE_TARGQ4, Q4
+#define BOOST_MOVE_TARGQ6 BOOST_MOVE_TARGQ5, Q5
+#define BOOST_MOVE_TARGQ7 BOOST_MOVE_TARGQ6, Q6
+#define BOOST_MOVE_TARGQ8 BOOST_MOVE_TARGQ7, Q7
+#define BOOST_MOVE_TARGQ9 BOOST_MOVE_TARGQ8, Q8
+
+//BOOST_MOVE_FWD_TN
+#define BOOST_MOVE_FWD_T0
+#define BOOST_MOVE_FWD_T1                    typename ::pdalboost::move_detail::forward_type<P0>::type
+#define BOOST_MOVE_FWD_T2 BOOST_MOVE_FWD_T1, typename ::pdalboost::move_detail::forward_type<P1>::type
+#define BOOST_MOVE_FWD_T3 BOOST_MOVE_FWD_T2, typename ::pdalboost::move_detail::forward_type<P2>::type
+#define BOOST_MOVE_FWD_T4 BOOST_MOVE_FWD_T3, typename ::pdalboost::move_detail::forward_type<P3>::type
+#define BOOST_MOVE_FWD_T5 BOOST_MOVE_FWD_T4, typename ::pdalboost::move_detail::forward_type<P4>::type
+#define BOOST_MOVE_FWD_T6 BOOST_MOVE_FWD_T5, typename ::pdalboost::move_detail::forward_type<P5>::type
+#define BOOST_MOVE_FWD_T7 BOOST_MOVE_FWD_T6, typename ::pdalboost::move_detail::forward_type<P6>::type
+#define BOOST_MOVE_FWD_T8 BOOST_MOVE_FWD_T7, typename ::pdalboost::move_detail::forward_type<P7>::type
+#define BOOST_MOVE_FWD_T9 BOOST_MOVE_FWD_T8, typename ::pdalboost::move_detail::forward_type<P8>::type
+
+//BOOST_MOVE_FWD_TQN
+#define BOOST_MOVE_FWD_TQ0
+#define BOOST_MOVE_FWD_TQ1                     typename ::pdalboost::move_detail::forward_type<Q0>::type
+#define BOOST_MOVE_FWD_TQ2 BOOST_MOVE_FWD_TQ1, typename ::pdalboost::move_detail::forward_type<Q1>::type
+#define BOOST_MOVE_FWD_TQ3 BOOST_MOVE_FWD_TQ2, typename ::pdalboost::move_detail::forward_type<Q2>::type
+#define BOOST_MOVE_FWD_TQ4 BOOST_MOVE_FWD_TQ3, typename ::pdalboost::move_detail::forward_type<Q3>::type
+#define BOOST_MOVE_FWD_TQ5 BOOST_MOVE_FWD_TQ4, typename ::pdalboost::move_detail::forward_type<Q4>::type
+#define BOOST_MOVE_FWD_TQ6 BOOST_MOVE_FWD_TQ5, typename ::pdalboost::move_detail::forward_type<Q5>::type
+#define BOOST_MOVE_FWD_TQ7 BOOST_MOVE_FWD_TQ6, typename ::pdalboost::move_detail::forward_type<Q6>::type
+#define BOOST_MOVE_FWD_TQ8 BOOST_MOVE_FWD_TQ7, typename ::pdalboost::move_detail::forward_type<Q7>::type
+#define BOOST_MOVE_FWD_TQ9 BOOST_MOVE_FWD_TQ8, typename ::pdalboost::move_detail::forward_type<Q8>::type
+
+//BOOST_MOVE_MREFX
+#define BOOST_MOVE_MREF0
+#define BOOST_MOVE_MREF1                  BOOST_MOVE_MREF(P0) m_p0;
+#define BOOST_MOVE_MREF2 BOOST_MOVE_MREF1 BOOST_MOVE_MREF(P1) m_p1;
+#define BOOST_MOVE_MREF3 BOOST_MOVE_MREF2 BOOST_MOVE_MREF(P2) m_p2;
+#define BOOST_MOVE_MREF4 BOOST_MOVE_MREF3 BOOST_MOVE_MREF(P3) m_p3;
+#define BOOST_MOVE_MREF5 BOOST_MOVE_MREF4 BOOST_MOVE_MREF(P4) m_p4;
+#define BOOST_MOVE_MREF6 BOOST_MOVE_MREF5 BOOST_MOVE_MREF(P5) m_p5;
+#define BOOST_MOVE_MREF7 BOOST_MOVE_MREF6 BOOST_MOVE_MREF(P6) m_p6;
+#define BOOST_MOVE_MREF8 BOOST_MOVE_MREF7 BOOST_MOVE_MREF(P7) m_p7;
+#define BOOST_MOVE_MREF9 BOOST_MOVE_MREF8 BOOST_MOVE_MREF(P8) m_p8;
+
+//BOOST_MOVE_MREFQX
+#define BOOST_MOVE_MREFQ0
+#define BOOST_MOVE_MREFQ1                   BOOST_MOVE_MREFQ(Q0) m_q0;
+#define BOOST_MOVE_MREFQ2 BOOST_MOVE_MREFQ1 BOOST_MOVE_MREFQ(Q1) m_q1;
+#define BOOST_MOVE_MREFQ3 BOOST_MOVE_MREFQ2 BOOST_MOVE_MREFQ(Q2) m_q2;
+#define BOOST_MOVE_MREFQ4 BOOST_MOVE_MREFQ3 BOOST_MOVE_MREFQ(Q3) m_q3;
+#define BOOST_MOVE_MREFQ5 BOOST_MOVE_MREFQ4 BOOST_MOVE_MREFQ(Q4) m_q4;
+#define BOOST_MOVE_MREFQ6 BOOST_MOVE_MREFQ5 BOOST_MOVE_MREFQ(Q5) m_q5;
+#define BOOST_MOVE_MREFQ7 BOOST_MOVE_MREFQ6 BOOST_MOVE_MREFQ(Q6) m_q6;
+#define BOOST_MOVE_MREFQ8 BOOST_MOVE_MREFQ7 BOOST_MOVE_MREFQ(Q7) m_q7;
+#define BOOST_MOVE_MREFQ9 BOOST_MOVE_MREFQ8 BOOST_MOVE_MREFQ(Q8) m_q8;
+
+//BOOST_MOVE_MEMBX
+#define BOOST_MOVE_MEMB0
+#define BOOST_MOVE_MEMB1                  P0 m_p0;
+#define BOOST_MOVE_MEMB2 BOOST_MOVE_MEMB1 P1 m_p1;
+#define BOOST_MOVE_MEMB3 BOOST_MOVE_MEMB2 P2 m_p2;
+#define BOOST_MOVE_MEMB4 BOOST_MOVE_MEMB3 P3 m_p3;
+#define BOOST_MOVE_MEMB5 BOOST_MOVE_MEMB4 P4 m_p4;
+#define BOOST_MOVE_MEMB6 BOOST_MOVE_MEMB5 P5 m_p5;
+#define BOOST_MOVE_MEMB7 BOOST_MOVE_MEMB6 P6 m_p6;
+#define BOOST_MOVE_MEMB8 BOOST_MOVE_MEMB7 P7 m_p7;
+#define BOOST_MOVE_MEMB9 BOOST_MOVE_MEMB8 P8 m_p8;
+
+//BOOST_MOVE_MEMBQX
+#define BOOST_MOVE_MEMBQ0
+#define BOOST_MOVE_MEMBQ1                   Q0 m_q0;
+#define BOOST_MOVE_MEMBQ2 BOOST_MOVE_MEMBQ1 Q1 m_q1;
+#define BOOST_MOVE_MEMBQ3 BOOST_MOVE_MEMBQ2 Q2 m_q2;
+#define BOOST_MOVE_MEMBQ4 BOOST_MOVE_MEMBQ3 Q3 m_q3;
+#define BOOST_MOVE_MEMBQ5 BOOST_MOVE_MEMBQ4 Q4 m_q4;
+#define BOOST_MOVE_MEMBQ6 BOOST_MOVE_MEMBQ5 Q5 m_q5;
+#define BOOST_MOVE_MEMBQ7 BOOST_MOVE_MEMBQ6 Q6 m_q6;
+#define BOOST_MOVE_MEMBQ8 BOOST_MOVE_MEMBQ7 Q7 m_q7;
+#define BOOST_MOVE_MEMBQ9 BOOST_MOVE_MEMBQ8 Q8 m_q8;
+
+//BOOST_MOVE_TMPL_LTN
+#define BOOST_MOVE_TMPL_LT0
+#define BOOST_MOVE_TMPL_LT1 template<
+#define BOOST_MOVE_TMPL_LT2 BOOST_MOVE_TMPL_LT1
+#define BOOST_MOVE_TMPL_LT3 BOOST_MOVE_TMPL_LT1
+#define BOOST_MOVE_TMPL_LT4 BOOST_MOVE_TMPL_LT1
+#define BOOST_MOVE_TMPL_LT5 BOOST_MOVE_TMPL_LT1
+#define BOOST_MOVE_TMPL_LT6 BOOST_MOVE_TMPL_LT1
+#define BOOST_MOVE_TMPL_LT7 BOOST_MOVE_TMPL_LT1
+#define BOOST_MOVE_TMPL_LT8 BOOST_MOVE_TMPL_LT1
+#define BOOST_MOVE_TMPL_LT9 BOOST_MOVE_TMPL_LT1
+
+//BOOST_MOVE_LTN
+#define BOOST_MOVE_LT0
+#define BOOST_MOVE_LT1 <
+#define BOOST_MOVE_LT2 BOOST_MOVE_LT1
+#define BOOST_MOVE_LT3 BOOST_MOVE_LT1
+#define BOOST_MOVE_LT4 BOOST_MOVE_LT1
+#define BOOST_MOVE_LT5 BOOST_MOVE_LT1
+#define BOOST_MOVE_LT6 BOOST_MOVE_LT1
+#define BOOST_MOVE_LT7 BOOST_MOVE_LT1
+#define BOOST_MOVE_LT8 BOOST_MOVE_LT1
+#define BOOST_MOVE_LT9 BOOST_MOVE_LT1
+
+//BOOST_MOVE_GTN
+#define BOOST_MOVE_GT0
+#define BOOST_MOVE_GT1 >
+#define BOOST_MOVE_GT2 BOOST_MOVE_GT1
+#define BOOST_MOVE_GT3 BOOST_MOVE_GT1
+#define BOOST_MOVE_GT4 BOOST_MOVE_GT1
+#define BOOST_MOVE_GT5 BOOST_MOVE_GT1
+#define BOOST_MOVE_GT6 BOOST_MOVE_GT1
+#define BOOST_MOVE_GT7 BOOST_MOVE_GT1
+#define BOOST_MOVE_GT8 BOOST_MOVE_GT1
+#define BOOST_MOVE_GT9 BOOST_MOVE_GT1
+
+//BOOST_MOVE_LPN
+#define BOOST_MOVE_LP0
+#define BOOST_MOVE_LP1 (
+#define BOOST_MOVE_LP2 BOOST_MOVE_LP1
+#define BOOST_MOVE_LP3 BOOST_MOVE_LP1
+#define BOOST_MOVE_LP4 BOOST_MOVE_LP1
+#define BOOST_MOVE_LP5 BOOST_MOVE_LP1
+#define BOOST_MOVE_LP6 BOOST_MOVE_LP1
+#define BOOST_MOVE_LP7 BOOST_MOVE_LP1
+#define BOOST_MOVE_LP8 BOOST_MOVE_LP1
+#define BOOST_MOVE_LP9 BOOST_MOVE_LP1
+
+//BOOST_MOVE_RPN
+#define BOOST_MOVE_RP0
+#define BOOST_MOVE_RP1 )
+#define BOOST_MOVE_RP2 BOOST_MOVE_RP1
+#define BOOST_MOVE_RP3 BOOST_MOVE_RP1
+#define BOOST_MOVE_RP4 BOOST_MOVE_RP1
+#define BOOST_MOVE_RP5 BOOST_MOVE_RP1
+#define BOOST_MOVE_RP6 BOOST_MOVE_RP1
+#define BOOST_MOVE_RP7 BOOST_MOVE_RP1
+#define BOOST_MOVE_RP8 BOOST_MOVE_RP1
+#define BOOST_MOVE_RP9 BOOST_MOVE_RP1
+
+//BOOST_MOVE_IN
+#define BOOST_MOVE_I0
+#define BOOST_MOVE_I1 ,
+#define BOOST_MOVE_I2 BOOST_MOVE_I1
+#define BOOST_MOVE_I3 BOOST_MOVE_I1
+#define BOOST_MOVE_I4 BOOST_MOVE_I1
+#define BOOST_MOVE_I5 BOOST_MOVE_I1
+#define BOOST_MOVE_I6 BOOST_MOVE_I1
+#define BOOST_MOVE_I7 BOOST_MOVE_I1
+#define BOOST_MOVE_I8 BOOST_MOVE_I1
+#define BOOST_MOVE_I9 BOOST_MOVE_I1
+
+//BOOST_MOVE_COLON
+#define BOOST_MOVE_COLON0
+#define BOOST_MOVE_COLON1 :
+#define BOOST_MOVE_COLON2 BOOST_MOVE_COLON1
+#define BOOST_MOVE_COLON3 BOOST_MOVE_COLON1
+#define BOOST_MOVE_COLON4 BOOST_MOVE_COLON1
+#define BOOST_MOVE_COLON5 BOOST_MOVE_COLON1
+#define BOOST_MOVE_COLON6 BOOST_MOVE_COLON1
+#define BOOST_MOVE_COLON7 BOOST_MOVE_COLON1
+#define BOOST_MOVE_COLON8 BOOST_MOVE_COLON1
+#define BOOST_MOVE_COLON9 BOOST_MOVE_COLON1
+
+//BOOST_MOVE_ITERATE_2TON
+#define BOOST_MOVE_ITERATE_2TO2(MACROFUNC)                                       MACROFUNC(2)
+#define BOOST_MOVE_ITERATE_2TO3(MACROFUNC)   BOOST_MOVE_ITERATE_2TO2(MACROFUNC)  MACROFUNC(3)
+#define BOOST_MOVE_ITERATE_2TO4(MACROFUNC)   BOOST_MOVE_ITERATE_2TO3(MACROFUNC)  MACROFUNC(4)
+#define BOOST_MOVE_ITERATE_2TO5(MACROFUNC)   BOOST_MOVE_ITERATE_2TO4(MACROFUNC)  MACROFUNC(5)
+#define BOOST_MOVE_ITERATE_2TO6(MACROFUNC)   BOOST_MOVE_ITERATE_2TO5(MACROFUNC)  MACROFUNC(6)
+#define BOOST_MOVE_ITERATE_2TO7(MACROFUNC)   BOOST_MOVE_ITERATE_2TO6(MACROFUNC)  MACROFUNC(7)
+#define BOOST_MOVE_ITERATE_2TO8(MACROFUNC)   BOOST_MOVE_ITERATE_2TO7(MACROFUNC)  MACROFUNC(8)
+#define BOOST_MOVE_ITERATE_2TO9(MACROFUNC)   BOOST_MOVE_ITERATE_2TO8(MACROFUNC)  MACROFUNC(9)
+
+//BOOST_MOVE_ITERATE_1TON
+#define BOOST_MOVE_ITERATE_1TO1(MACROFUNC)                                       MACROFUNC(1)
+#define BOOST_MOVE_ITERATE_1TO2(MACROFUNC)   BOOST_MOVE_ITERATE_1TO1(MACROFUNC)  MACROFUNC(2)
+#define BOOST_MOVE_ITERATE_1TO3(MACROFUNC)   BOOST_MOVE_ITERATE_1TO2(MACROFUNC)  MACROFUNC(3)
+#define BOOST_MOVE_ITERATE_1TO4(MACROFUNC)   BOOST_MOVE_ITERATE_1TO3(MACROFUNC)  MACROFUNC(4)
+#define BOOST_MOVE_ITERATE_1TO5(MACROFUNC)   BOOST_MOVE_ITERATE_1TO4(MACROFUNC)  MACROFUNC(5)
+#define BOOST_MOVE_ITERATE_1TO6(MACROFUNC)   BOOST_MOVE_ITERATE_1TO5(MACROFUNC)  MACROFUNC(6)
+#define BOOST_MOVE_ITERATE_1TO7(MACROFUNC)   BOOST_MOVE_ITERATE_1TO6(MACROFUNC)  MACROFUNC(7)
+#define BOOST_MOVE_ITERATE_1TO8(MACROFUNC)   BOOST_MOVE_ITERATE_1TO7(MACROFUNC)  MACROFUNC(8)
+#define BOOST_MOVE_ITERATE_1TO9(MACROFUNC)   BOOST_MOVE_ITERATE_1TO8(MACROFUNC)  MACROFUNC(9)
+
+//BOOST_MOVE_ITERATE_0TON
+#define BOOST_MOVE_ITERATE_0TO0(MACROFUNC)                                       MACROFUNC(0)
+#define BOOST_MOVE_ITERATE_0TO1(MACROFUNC)   BOOST_MOVE_ITERATE_0TO0(MACROFUNC)  MACROFUNC(1)
+#define BOOST_MOVE_ITERATE_0TO2(MACROFUNC)   BOOST_MOVE_ITERATE_0TO1(MACROFUNC)  MACROFUNC(2)
+#define BOOST_MOVE_ITERATE_0TO3(MACROFUNC)   BOOST_MOVE_ITERATE_0TO2(MACROFUNC)  MACROFUNC(3)
+#define BOOST_MOVE_ITERATE_0TO4(MACROFUNC)   BOOST_MOVE_ITERATE_0TO3(MACROFUNC)  MACROFUNC(4)
+#define BOOST_MOVE_ITERATE_0TO5(MACROFUNC)   BOOST_MOVE_ITERATE_0TO4(MACROFUNC)  MACROFUNC(5)
+#define BOOST_MOVE_ITERATE_0TO6(MACROFUNC)   BOOST_MOVE_ITERATE_0TO5(MACROFUNC)  MACROFUNC(6)
+#define BOOST_MOVE_ITERATE_0TO7(MACROFUNC)   BOOST_MOVE_ITERATE_0TO6(MACROFUNC)  MACROFUNC(7)
+#define BOOST_MOVE_ITERATE_0TO8(MACROFUNC)   BOOST_MOVE_ITERATE_0TO7(MACROFUNC)  MACROFUNC(8)
+#define BOOST_MOVE_ITERATE_0TO9(MACROFUNC)   BOOST_MOVE_ITERATE_0TO8(MACROFUNC)  MACROFUNC(9)
+
+//BOOST_MOVE_ITERATE_NTON
+#define BOOST_MOVE_ITERATE_0TO0(MACROFUNC)   MACROFUNC(0)
+#define BOOST_MOVE_ITERATE_1TO1(MACROFUNC)   MACROFUNC(1)
+#define BOOST_MOVE_ITERATE_2TO2(MACROFUNC)   MACROFUNC(2)
+#define BOOST_MOVE_ITERATE_3TO3(MACROFUNC)   MACROFUNC(3)
+#define BOOST_MOVE_ITERATE_4TO4(MACROFUNC)   MACROFUNC(4)
+#define BOOST_MOVE_ITERATE_5TO5(MACROFUNC)   MACROFUNC(5)
+#define BOOST_MOVE_ITERATE_6TO6(MACROFUNC)   MACROFUNC(6)
+#define BOOST_MOVE_ITERATE_7TO7(MACROFUNC)   MACROFUNC(7)
+#define BOOST_MOVE_ITERATE_8TO8(MACROFUNC)   MACROFUNC(8)
+#define BOOST_MOVE_ITERATE_9TO9(MACROFUNC)   MACROFUNC(9)
+
+//BOOST_MOVE_ITER2D_0TO9
+#define BOOST_MOVE_ITER2DLOW_0TO0(MACROFUNC2D, M)                                            MACROFUNC2D(M, 0)
+#define BOOST_MOVE_ITER2DLOW_0TO1(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO0(MACROFUNC2D, M) MACROFUNC2D(M, 1)
+#define BOOST_MOVE_ITER2DLOW_0TO2(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO1(MACROFUNC2D, M) MACROFUNC2D(M, 2)
+#define BOOST_MOVE_ITER2DLOW_0TO3(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO2(MACROFUNC2D, M) MACROFUNC2D(M, 3)
+#define BOOST_MOVE_ITER2DLOW_0TO4(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO3(MACROFUNC2D, M) MACROFUNC2D(M, 4)
+#define BOOST_MOVE_ITER2DLOW_0TO5(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO4(MACROFUNC2D, M) MACROFUNC2D(M, 5)
+#define BOOST_MOVE_ITER2DLOW_0TO6(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO5(MACROFUNC2D, M) MACROFUNC2D(M, 6)
+#define BOOST_MOVE_ITER2DLOW_0TO7(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO6(MACROFUNC2D, M) MACROFUNC2D(M, 7)
+#define BOOST_MOVE_ITER2DLOW_0TO8(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO7(MACROFUNC2D, M) MACROFUNC2D(M, 8)
+#define BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, M)  BOOST_MOVE_ITER2DLOW_0TO8(MACROFUNC2D, M) MACROFUNC2D(M, 9)
+//
+#define BOOST_MOVE_ITER2D_0TO0(MACROFUNC2D)                                        BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 0)
+#define BOOST_MOVE_ITER2D_0TO1(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO0(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 1)
+#define BOOST_MOVE_ITER2D_0TO2(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO1(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 2)
+#define BOOST_MOVE_ITER2D_0TO3(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO2(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 3)
+#define BOOST_MOVE_ITER2D_0TO4(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO3(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 4)
+#define BOOST_MOVE_ITER2D_0TO5(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO4(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 5)
+#define BOOST_MOVE_ITER2D_0TO6(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO5(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 6)
+#define BOOST_MOVE_ITER2D_0TO7(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO6(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 7)
+#define BOOST_MOVE_ITER2D_0TO8(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO7(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 8)
+#define BOOST_MOVE_ITER2D_0TO9(MACROFUNC2D)   BOOST_MOVE_ITER2D_0TO8(MACROFUNC2D)  BOOST_MOVE_ITER2DLOW_0TO9(MACROFUNC2D, 9)
+
+//BOOST_MOVE_CAT
+#define BOOST_MOVE_CAT(a, b) BOOST_MOVE_CAT_I(a, b)
+#define BOOST_MOVE_CAT_I(a, b) a ## b
+//#    define BOOST_MOVE_CAT_I(a, b) BOOST_MOVE_CAT_II(~, a ## b)
+//#    define BOOST_MOVE_CAT_II(p, res) res
+
+#endif //#ifndef BOOST_MOVE_DETAIL_FWD_MACROS_HPP
diff --git a/vendor/pdalboost/boost/move/detail/iterator_traits.hpp b/vendor/pdalboost/boost/move/detail/iterator_traits.hpp
new file mode 100644
index 0000000..2c93860
--- /dev/null
+++ b/vendor/pdalboost/boost/move/detail/iterator_traits.hpp
@@ -0,0 +1,73 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2014.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! \file
+
+#ifndef BOOST_MOVE_DETAIL_ITERATOR_TRAITS_HPP
+#define BOOST_MOVE_DETAIL_ITERATOR_TRAITS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <cstddef>
+
+#include <boost/move/detail/std_ns_begin.hpp>
+BOOST_MOVE_STD_NS_BEG
+
+struct input_iterator_tag;
+struct forward_iterator_tag;
+struct bidirectional_iterator_tag;
+struct random_access_iterator_tag;
+struct output_iterator_tag;
+
+BOOST_MOVE_STD_NS_END
+#include <boost/move/detail/std_ns_end.hpp>
+
+namespace pdalboost{  namespace movelib{
+
+template<class Iterator>
+struct iterator_traits
+{
+   typedef typename Iterator::difference_type   difference_type;
+   typedef typename Iterator::value_type        value_type;
+   typedef typename Iterator::pointer           pointer;
+   typedef typename Iterator::reference         reference;
+   typedef typename Iterator::iterator_category iterator_category;
+};
+
+template<class T>
+struct iterator_traits<T*>
+{
+   typedef std::ptrdiff_t                    difference_type;
+   typedef T                                 value_type;
+   typedef T*                                pointer;
+   typedef T&                                reference;
+   typedef std::random_access_iterator_tag   iterator_category;
+};
+
+template<class T>
+struct iterator_traits<const T*>
+{
+   typedef std::ptrdiff_t                    difference_type;
+   typedef T                                 value_type;
+   typedef const T*                          pointer;
+   typedef const T&                          reference;
+   typedef std::random_access_iterator_tag   iterator_category;
+};
+
+}} //namespace pdalboost {  namespace movelib{
+
+#endif //#ifndef BOOST_MOVE_DETAIL_ITERATOR_TRAITS_HPP
diff --git a/vendor/pdalboost/boost/move/detail/meta_utils.hpp b/vendor/pdalboost/boost/move/detail/meta_utils.hpp
new file mode 100644
index 0000000..a848a32
--- /dev/null
+++ b/vendor/pdalboost/boost/move/detail/meta_utils.hpp
@@ -0,0 +1,564 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2012-2015.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! \file
+
+#ifndef BOOST_MOVE_DETAIL_META_UTILS_HPP
+#define BOOST_MOVE_DETAIL_META_UTILS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+#include <boost/move/detail/meta_utils_core.hpp>
+#include <cstddef>   //for std::size_t
+
+//Small meta-typetraits to support move
+
+namespace pdalboost {
+
+//Forward declare pdalboost::rv
+template <class T> class rv;
+
+namespace move_detail {
+
+//////////////////////////////////////
+//          is_different
+//////////////////////////////////////
+template<class T, class U>
+struct is_different
+{
+   static const bool value = !is_same<T, U>::value;
+};
+
+//////////////////////////////////////
+//             apply
+//////////////////////////////////////
+template<class F, class Param>
+struct apply
+{
+   typedef typename F::template apply<Param>::type type;
+};
+
+//////////////////////////////////////
+//             bool_
+//////////////////////////////////////
+
+template< bool C_ >
+struct bool_ : integral_constant<bool, C_>
+{
+     operator bool() const { return C_; }
+   bool operator()() const { return C_; }
+};
+
+typedef bool_<true>        true_;
+typedef bool_<false>       false_;
+
+//////////////////////////////////////
+//              nat
+//////////////////////////////////////
+struct nat{};
+
+//////////////////////////////////////
+//          yes_type/no_type
+//////////////////////////////////////
+typedef char yes_type;
+
+struct no_type
+{
+   char _[2];
+};
+
+//////////////////////////////////////
+//            natify
+//////////////////////////////////////
+template <class T> struct natify{};
+
+//////////////////////////////////////
+//          remove_reference
+//////////////////////////////////////
+template<class T>
+struct remove_reference
+{
+   typedef T type;
+};
+
+template<class T>
+struct remove_reference<T&>
+{
+   typedef T type;
+};
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+template<class T>
+struct remove_reference<T&&>
+{
+   typedef T type;
+};
+
+#else
+
+template<class T>
+struct remove_reference< rv<T> >
+{
+   typedef T type;
+};
+
+template<class T>
+struct remove_reference< rv<T> &>
+{
+   typedef T type;
+};
+
+template<class T>
+struct remove_reference< const rv<T> &>
+{
+   typedef T type;
+};
+
+#endif
+
+//////////////////////////////////////
+//             remove_pointer
+//////////////////////////////////////
+
+template< class T > struct remove_pointer                    { typedef T type;   };
+template< class T > struct remove_pointer<T*>                { typedef T type;   };
+template< class T > struct remove_pointer<T* const>          { typedef T type;   };
+template< class T > struct remove_pointer<T* volatile>       { typedef T type;   };
+template< class T > struct remove_pointer<T* const volatile> { typedef T type;   };
+
+//////////////////////////////////////
+//             add_pointer
+//////////////////////////////////////
+template< class T >
+struct add_pointer
+{
+   typedef typename remove_reference<T>::type* type;
+};
+
+//////////////////////////////////////
+//             add_const
+//////////////////////////////////////
+template<class T>
+struct add_const
+{
+   typedef const T type;
+};
+
+template<class T>
+struct add_const<T&>
+{
+   typedef const T& type;
+};
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+template<class T>
+struct add_const<T&&>
+{
+   typedef T&& type;
+};
+
+#endif
+
+//////////////////////////////////////
+//      add_lvalue_reference
+//////////////////////////////////////
+template<class T>
+struct add_lvalue_reference
+{  typedef T& type;  };
+
+template<class T> struct add_lvalue_reference<T&>                 {  typedef T& type;  };
+template<>        struct add_lvalue_reference<void>               {  typedef void type;   };
+template<>        struct add_lvalue_reference<const void>         {  typedef const void type;  };
+template<>        struct add_lvalue_reference<volatile void>      {  typedef volatile void type;   };
+template<>        struct add_lvalue_reference<const volatile void>{  typedef const volatile void type;   };
+
+template<class T>
+struct add_const_lvalue_reference
+{
+   typedef typename remove_reference<T>::type         t_unreferenced;
+   typedef typename add_const<t_unreferenced>::type   t_unreferenced_const;
+   typedef typename add_lvalue_reference
+      <t_unreferenced_const>::type                    type;
+};
+
+//////////////////////////////////////
+//             is_lvalue_reference
+//////////////////////////////////////
+template<class T>
+struct is_lvalue_reference
+{
+    static const bool value = false;
+};
+
+template<class T>
+struct is_lvalue_reference<T&>
+{
+    static const bool value = true;
+};
+
+
+//////////////////////////////////////
+//             identity
+//////////////////////////////////////
+template <class T>
+struct identity
+{
+   typedef T type;
+   typedef typename add_const_lvalue_reference<T>::type reference;
+   reference operator()(reference t)
+   {  return t;   }
+};
+
+//////////////////////////////////////
+//          is_class_or_union
+//////////////////////////////////////
+template<class T>
+struct is_class_or_union
+{
+   struct twochar { char dummy[2]; };
+   template <class U>
+   static char is_class_or_union_tester(void(U::*)(void));
+   template <class U>
+   static twochar is_class_or_union_tester(...);
+   static const bool value = sizeof(is_class_or_union_tester<T>(0)) == sizeof(char);
+};
+
+//////////////////////////////////////
+//             addressof
+//////////////////////////////////////
+template<class T>
+struct addr_impl_ref
+{
+   T & v_;
+   inline addr_impl_ref( T & v ): v_( v ) {}
+   inline operator T& () const { return v_; }
+
+   private:
+   addr_impl_ref & operator=(const addr_impl_ref &);
+};
+
+template<class T>
+struct addressof_impl
+{
+   static inline T * f( T & v, long )
+   {
+      return reinterpret_cast<T*>(
+         &const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
+   }
+
+   static inline T * f( T * v, int )
+   {  return v;  }
+};
+
+template<class T>
+inline T * addressof( T & v )
+{
+   return ::pdalboost::move_detail::addressof_impl<T>::f
+      ( ::pdalboost::move_detail::addr_impl_ref<T>( v ), 0 );
+}
+
+//////////////////////////////////////
+//          has_pointer_type
+//////////////////////////////////////
+template <class T>
+struct has_pointer_type
+{
+   struct two { char c[2]; };
+   template <class U> static two test(...);
+   template <class U> static char test(typename U::pointer* = 0);
+   static const bool value = sizeof(test<T>(0)) == 1;
+};
+
+//////////////////////////////////////
+//           is_convertible
+//////////////////////////////////////
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+
+//use intrinsic since in MSVC
+//overaligned types can't go through ellipsis
+template <class T, class U>
+struct is_convertible
+{
+   static const bool value = __is_convertible_to(T, U);
+};
+
+#else
+
+template <class T, class U>
+class is_convertible
+{
+   typedef typename add_lvalue_reference<T>::type t_reference;
+   typedef char true_t;
+   class false_t { char dummy[2]; };
+   static false_t dispatch(...);
+   static true_t  dispatch(U);
+   static t_reference       trigger();
+   public:
+   static const bool value = sizeof(dispatch(trigger())) == sizeof(true_t);
+};
+
+#endif
+
+template<
+      bool C
+    , typename F1
+    , typename F2
+    >
+struct eval_if_c
+    : if_c<C,F1,F2>::type
+{};
+
+template<
+      typename C
+    , typename T1
+    , typename T2
+    >
+struct eval_if
+    : if_<C,T1,T2>::type
+{};
+
+
+#if defined(BOOST_GCC) && (BOOST_GCC <= 40000)
+#define BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN
+#endif
+
+template<class T, class U, class R = void>
+struct enable_if_convertible
+   : enable_if< is_convertible<T, U>, R>
+{};
+
+template<class T, class U, class R = void>
+struct disable_if_convertible
+   : disable_if< is_convertible<T, U>, R>
+{};
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                         and_
+//
+//////////////////////////////////////////////////////////////////////////////
+template<bool, class B = true_, class C = true_, class D = true_>
+struct and_impl
+   : and_impl<B::value, C, D>
+{};
+
+template<>
+struct and_impl<true, true_, true_, true_>
+{
+   static const bool value = true;
+};
+
+template<class B, class C, class D>
+struct and_impl<false, B, C, D>
+{
+   static const bool value = false;
+};
+
+template<class A, class B, class C = true_, class D = true_>
+struct and_
+   : and_impl<A::value, B, C, D>
+{};
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                            or_
+//
+//////////////////////////////////////////////////////////////////////////////
+template<bool, class B = false_, class C = false_, class D = false_>
+struct or_impl
+   : or_impl<B::value, C, D>
+{};
+
+template<>
+struct or_impl<false, false_, false_, false_>
+{
+   static const bool value = false;
+};
+
+template<class B, class C, class D>
+struct or_impl<true, B, C, D>
+{
+   static const bool value = true;
+};
+
+template<class A, class B, class C = false_, class D = false_>
+struct or_
+   : or_impl<A::value, B, C, D>
+{};
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                         not_
+//
+//////////////////////////////////////////////////////////////////////////////
+template<class T>
+struct not_
+{
+   static const bool value = !T::value;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// enable_if_and / disable_if_and / enable_if_or / disable_if_or
+//
+//////////////////////////////////////////////////////////////////////////////
+
+template<class R, class A, class B, class C = true_, class D = true_>
+struct enable_if_and
+   : enable_if_c< and_<A, B, C, D>::value, R>
+{};
+
+template<class R, class A, class B, class C = true_, class D = true_>
+struct disable_if_and
+   : disable_if_c< and_<A, B, C, D>::value, R>
+{};
+
+template<class R, class A, class B, class C = false_, class D = false_>
+struct enable_if_or
+   : enable_if_c< or_<A, B, C, D>::value, R>
+{};
+
+template<class R, class A, class B, class C = false_, class D = false_>
+struct disable_if_or
+   : disable_if_c< or_<A, B, C, D>::value, R>
+{};
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                      has_move_emulation_enabled_impl
+//
+//////////////////////////////////////////////////////////////////////////////
+template<class T>
+struct has_move_emulation_enabled_impl
+   : is_convertible< T, ::pdalboost::rv<T>& >
+{};
+
+template<class T>
+struct has_move_emulation_enabled_impl<T&>
+{  static const bool value = false;  };
+
+template<class T>
+struct has_move_emulation_enabled_impl< ::pdalboost::rv<T> >
+{  static const bool value = false;  };
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                            is_rv_impl
+//
+//////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+struct is_rv_impl
+{  static const bool value = false;  };
+
+template <class T>
+struct is_rv_impl< rv<T> >
+{  static const bool value = true;  };
+
+template <class T>
+struct is_rv_impl< const rv<T> >
+{  static const bool value = true;  };
+
+// Code from Jeffrey Lee Hellrung, many thanks
+
+template< class T >
+struct is_rvalue_reference
+{  static const bool value = false;  };
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+template< class T >
+struct is_rvalue_reference< T&& >
+{  static const bool value = true;  };
+
+#else // #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+template< class T >
+struct is_rvalue_reference< pdalboost::rv<T>& >
+{  static const bool value = true;  };
+
+template< class T >
+struct is_rvalue_reference< const pdalboost::rv<T>& >
+{  static const bool value = true;  };
+
+#endif // #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+template< class T >
+struct add_rvalue_reference
+{ typedef T&& type; };
+
+#else // #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+namespace detail_add_rvalue_reference
+{
+   template< class T
+            , bool emulation = has_move_emulation_enabled_impl<T>::value
+            , bool rv        = is_rv_impl<T>::value  >
+   struct add_rvalue_reference_impl { typedef T type; };
+
+   template< class T, bool emulation>
+   struct add_rvalue_reference_impl< T, emulation, true > { typedef T & type; };
+
+   template< class T, bool rv >
+   struct add_rvalue_reference_impl< T, true, rv > { typedef ::pdalboost::rv<T>& type; };
+} // namespace detail_add_rvalue_reference
+
+template< class T >
+struct add_rvalue_reference
+   : detail_add_rvalue_reference::add_rvalue_reference_impl<T>
+{ };
+
+template< class T >
+struct add_rvalue_reference<T &>
+{  typedef T & type; };
+
+#endif // #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+template< class T > struct remove_rvalue_reference { typedef T type; };
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+   template< class T > struct remove_rvalue_reference< T&& >                  { typedef T type; };
+#else // #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+   template< class T > struct remove_rvalue_reference< rv<T> >                { typedef T type; };
+   template< class T > struct remove_rvalue_reference< const rv<T> >          { typedef T type; };
+   template< class T > struct remove_rvalue_reference< volatile rv<T> >       { typedef T type; };
+   template< class T > struct remove_rvalue_reference< const volatile rv<T> > { typedef T type; };
+   template< class T > struct remove_rvalue_reference< rv<T>& >               { typedef T type; };
+   template< class T > struct remove_rvalue_reference< const rv<T>& >         { typedef T type; };
+   template< class T > struct remove_rvalue_reference< volatile rv<T>& >      { typedef T type; };
+   template< class T > struct remove_rvalue_reference< const volatile rv<T>& >{ typedef T type; };
+#endif // #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+// Ideas from Boost.Move review, Jeffrey Lee Hellrung:
+//
+//- TypeTraits metafunctions is_lvalue_reference, add_lvalue_reference, and remove_lvalue_reference ?
+//  Perhaps add_reference and remove_reference can be modified so that they behave wrt emulated rvalue
+//  references the same as wrt real rvalue references, i.e., add_reference< rv<T>& > -> T& rather than
+//  rv<T>& (since T&& & -> T&).
+//
+//- Add'l TypeTraits has_[trivial_]move_{constructor,assign}...?
+//
+//- An as_lvalue(T& x) function, which amounts to an identity operation in C++0x, but strips emulated
+//  rvalue references in C++03.  This may be necessary to prevent "accidental moves".
+
+}  //namespace move_detail {
+}  //namespace pdalboost {
+
+#endif //#ifndef BOOST_MOVE_DETAIL_META_UTILS_HPP
diff --git a/vendor/pdalboost/boost/move/detail/meta_utils_core.hpp b/vendor/pdalboost/boost/move/detail/meta_utils_core.hpp
new file mode 100644
index 0000000..114b99a
--- /dev/null
+++ b/vendor/pdalboost/boost/move/detail/meta_utils_core.hpp
@@ -0,0 +1,120 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2015-2015.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! \file
+
+#ifndef BOOST_MOVE_DETAIL_META_UTILS_CORE_HPP
+#define BOOST_MOVE_DETAIL_META_UTILS_CORE_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+//Small meta-typetraits to support move
+
+namespace pdalboost {
+namespace move_detail {
+
+//////////////////////////////////////
+//             if_c
+//////////////////////////////////////
+template<bool C, typename T1, typename T2>
+struct if_c
+{
+   typedef T1 type;
+};
+
+template<typename T1, typename T2>
+struct if_c<false,T1,T2>
+{
+   typedef T2 type;
+};
+
+//////////////////////////////////////
+//             if_
+//////////////////////////////////////
+template<typename T1, typename T2, typename T3>
+struct if_ : if_c<0 != T1::value, T2, T3>
+{};
+
+//////////////////////////////////////
+//          enable_if_c
+//////////////////////////////////////
+template <bool B, class T = void>
+struct enable_if_c
+{
+   typedef T type;
+};
+
+template <class T>
+struct enable_if_c<false, T> {};
+
+//////////////////////////////////////
+//           enable_if
+//////////////////////////////////////
+template <class Cond, class T = void>
+struct enable_if : enable_if_c<Cond::value, T> {};
+
+//////////////////////////////////////
+//          disable_if_c
+//////////////////////////////////////
+template <bool B, class T = void>
+struct disable_if_c
+   : enable_if_c<!B, T>
+{};
+
+//////////////////////////////////////
+//          disable_if
+//////////////////////////////////////
+template <class Cond, class T = void>
+struct disable_if : enable_if_c<!Cond::value, T> {};
+
+//////////////////////////////////////
+//          integral_constant
+//////////////////////////////////////
+template<class T, T v>
+struct integral_constant
+{
+   static const T value = v;
+   typedef T value_type;
+   typedef integral_constant<T, v> type;
+
+     operator T() const { return value; }
+   T operator()() const { return value; }
+};
+
+typedef integral_constant<bool, true >  true_type;
+typedef integral_constant<bool, false > false_type;
+
+
+//////////////////////////////////////
+//             is_same
+//////////////////////////////////////
+template<class T, class U>
+struct is_same
+{
+   static const bool value = false;
+};
+ 
+template<class T>
+struct is_same<T, T>
+{
+   static const bool value = true;
+};
+
+}  //namespace move_detail {
+}  //namespace pdalboost {
+
+#endif //#ifndef BOOST_MOVE_DETAIL_META_UTILS_CORE_HPP
diff --git a/vendor/pdalboost/boost/move/detail/move_helpers.hpp b/vendor/pdalboost/boost/move/detail/move_helpers.hpp
new file mode 100644
index 0000000..a66d7f5
--- /dev/null
+++ b/vendor/pdalboost/boost/move/detail/move_helpers.hpp
@@ -0,0 +1,252 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2010-2012.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_MOVE_MOVE_HELPERS_HPP
+#define BOOST_MOVE_MOVE_HELPERS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/move/utility_core.hpp>
+#include <boost/move/detail/meta_utils.hpp>
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
+#define BOOST_MOVE_CATCH_CONST(U)  \
+   typename ::pdalboost::move_detail::if_< ::pdalboost::move_detail::is_class<U>, BOOST_CATCH_CONST_RLVALUE(U), const U &>::type
+#define BOOST_MOVE_CATCH_RVALUE(U)\
+   typename ::pdalboost::move_detail::if_< ::pdalboost::move_detail::is_class<U>, BOOST_RV_REF(U), ::pdalboost::move_detail::nat>::type
+#define BOOST_MOVE_CATCH_FWD(U) BOOST_FWD_REF(U)
+#else
+#define BOOST_MOVE_CATCH_CONST(U)  const U &
+#define BOOST_MOVE_CATCH_RVALUE(U) U &&
+#define BOOST_MOVE_CATCH_FWD(U)    U &&
+#endif
+
+////////////////////////////////////////
+//
+// BOOST_MOVE_CONVERSION_AWARE_CATCH
+//
+////////////////////////////////////////
+
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+   #define BOOST_MOVE_CONVERSION_AWARE_CATCH_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
+      RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\
+      {  return FWD_FUNCTION(static_cast<const TYPE&>(x)); }\
+      \
+      RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \
+      {  return FWD_FUNCTION(::pdalboost::move(x));  }\
+      \
+      RETURN_VALUE PUB_FUNCTION(TYPE &x)\
+      {  return FWD_FUNCTION(const_cast<const TYPE &>(x)); }\
+   //
+   #if defined(BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN)
+      #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
+         BOOST_MOVE_CONVERSION_AWARE_CATCH_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
+         \
+         template<class BOOST_MOVE_TEMPL_PARAM>\
+         RETURN_VALUE PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u,\
+            typename ::pdalboost::move_detail::enable_if_and\
+                                 < ::pdalboost::move_detail::nat \
+                                 , ::pdalboost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\
+                                 , ::pdalboost::move_detail::is_class<TYPE>\
+                                 , ::pdalboost::has_move_emulation_disabled<BOOST_MOVE_TEMPL_PARAM>\
+                                 >::type* = 0)\
+         { return FWD_FUNCTION(u); }\
+         \
+         template<class BOOST_MOVE_TEMPL_PARAM>\
+         RETURN_VALUE PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u,\
+            typename ::pdalboost::move_detail::disable_if_or\
+                              < ::pdalboost::move_detail::nat \
+                              , ::pdalboost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM> \
+                              , ::pdalboost::move_detail::and_ \
+                                 < ::pdalboost::move_detail::is_rv<BOOST_MOVE_TEMPL_PARAM> \
+                                 , ::pdalboost::move_detail::is_class<BOOST_MOVE_TEMPL_PARAM> \
+                                 > \
+                              >::type* = 0)\
+         {\
+            TYPE t(u);\
+            return FWD_FUNCTION(::pdalboost::move(t));\
+         }\
+      //
+   #else
+      #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
+         BOOST_MOVE_CONVERSION_AWARE_CATCH_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
+         \
+         template<class BOOST_MOVE_TEMPL_PARAM>\
+         typename ::pdalboost::move_detail::enable_if_and\
+                                       < RETURN_VALUE \
+                                       , ::pdalboost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\
+                                       , ::pdalboost::move_detail::is_class<TYPE>\
+                                       , ::pdalboost::has_move_emulation_disabled<BOOST_MOVE_TEMPL_PARAM>\
+                                       >::type\
+            PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u)\
+         { return FWD_FUNCTION(u); }\
+         \
+         template<class BOOST_MOVE_TEMPL_PARAM>\
+         typename ::pdalboost::move_detail::disable_if_or\
+                           < RETURN_VALUE \
+                           , ::pdalboost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM> \
+                           , ::pdalboost::move_detail::and_ \
+                              < ::pdalboost::move_detail::is_rv<BOOST_MOVE_TEMPL_PARAM> \
+                              , ::pdalboost::move_detail::is_class<BOOST_MOVE_TEMPL_PARAM> \
+                              > \
+                           >::type\
+            PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u)\
+         {\
+            TYPE t(u);\
+            return FWD_FUNCTION(::pdalboost::move(t));\
+         }\
+      //
+   #endif
+#elif (defined(_MSC_VER) && (_MSC_VER == 1600))
+
+   #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
+      RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\
+      {  return FWD_FUNCTION(static_cast<const TYPE&>(x)); }\
+      \
+      RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \
+      {  return FWD_FUNCTION(::pdalboost::move(x));  }\
+      \
+      template<class BOOST_MOVE_TEMPL_PARAM>\
+      typename ::pdalboost::move_detail::enable_if_c\
+                        < !::pdalboost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>::value\
+                        , RETURN_VALUE >::type\
+      PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u)\
+      {\
+         TYPE t(u);\
+         return FWD_FUNCTION(::pdalboost::move(t));\
+      }\
+   //
+
+#else    //BOOST_NO_CXX11_RVALUE_REFERENCES
+
+   #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
+      RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\
+      {  return FWD_FUNCTION(static_cast<const TYPE&>(x)); }\
+      \
+      RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \
+      {  return FWD_FUNCTION(::pdalboost::move(x));  }\
+   //
+
+#endif   //BOOST_NO_CXX11_RVALUE_REFERENCES
+
+////////////////////////////////////////
+//
+// BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG
+//
+////////////////////////////////////////
+
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+   #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
+      RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\
+      {  return FWD_FUNCTION(arg1, static_cast<const TYPE&>(x)); }\
+      \
+      RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \
+      {  return FWD_FUNCTION(arg1, ::pdalboost::move(x));  }\
+      \
+      RETURN_VALUE PUB_FUNCTION(ARG1 arg1, TYPE &x)\
+      {  return FWD_FUNCTION(arg1, const_cast<const TYPE &>(x)); }\
+   //
+   #if defined(BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN)
+      #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
+         BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
+         \
+         template<class BOOST_MOVE_TEMPL_PARAM>\
+         RETURN_VALUE PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u,\
+            typename ::pdalboost::move_detail::enable_if_and\
+                              < ::pdalboost::move_detail::nat \
+                              , ::pdalboost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\
+                              , ::pdalboost::has_move_emulation_disabled<BOOST_MOVE_TEMPL_PARAM>\
+                              >::type* = 0)\
+         { return FWD_FUNCTION(arg1, u); }\
+         \
+         template<class BOOST_MOVE_TEMPL_PARAM>\
+         RETURN_VALUE PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u,\
+            typename ::pdalboost::move_detail::disable_if_or\
+                              < void \
+                              , ::pdalboost::move_detail::is_rv<BOOST_MOVE_TEMPL_PARAM>\
+                              , ::pdalboost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\
+                              , ::pdalboost::move_detail::is_convertible<BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO>\
+                              >::type* = 0)\
+         {\
+            TYPE t(u);\
+            return FWD_FUNCTION(arg1, ::pdalboost::move(t));\
+         }\
+      //
+   #else
+      #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
+         BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
+         \
+         template<class BOOST_MOVE_TEMPL_PARAM>\
+         typename ::pdalboost::move_detail::enable_if_and\
+                           < RETURN_VALUE \
+                           , ::pdalboost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\
+                           , ::pdalboost::has_move_emulation_disabled<BOOST_MOVE_TEMPL_PARAM>\
+                           >::type\
+            PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\
+         { return FWD_FUNCTION(arg1, u); }\
+         \
+         template<class BOOST_MOVE_TEMPL_PARAM>\
+         typename ::pdalboost::move_detail::disable_if_or\
+                           < RETURN_VALUE \
+                           , ::pdalboost::move_detail::is_rv<BOOST_MOVE_TEMPL_PARAM>\
+                           , ::pdalboost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\
+                           , ::pdalboost::move_detail::is_convertible<BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO>\
+                           >::type\
+            PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\
+         {\
+            TYPE t(u);\
+            return FWD_FUNCTION(arg1, ::pdalboost::move(t));\
+         }\
+      //
+   #endif
+
+#elif (defined(_MSC_VER) && (_MSC_VER == 1600))
+
+   #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
+      RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\
+      {  return FWD_FUNCTION(arg1, static_cast<const TYPE&>(x)); }\
+      \
+      RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \
+      {  return FWD_FUNCTION(arg1, ::pdalboost::move(x));  }\
+      \
+      template<class BOOST_MOVE_TEMPL_PARAM>\
+      typename ::pdalboost::move_detail::disable_if_or\
+                        < RETURN_VALUE \
+                        , ::pdalboost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM> \
+                        , ::pdalboost::move_detail::is_convertible<BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO> \
+                        >::type\
+      PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\
+      {\
+         TYPE t(u);\
+         return FWD_FUNCTION(arg1, ::pdalboost::move(t));\
+      }\
+   //
+
+#else
+
+   #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
+      RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\
+      {  return FWD_FUNCTION(arg1, static_cast<const TYPE&>(x)); }\
+      \
+      RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \
+      {  return FWD_FUNCTION(arg1, ::pdalboost::move(x));  }\
+   //
+
+#endif
+
+#endif //#ifndef BOOST_MOVE_MOVE_HELPERS_HPP
diff --git a/vendor/pdalboost/boost/move/detail/std_ns_begin.hpp b/vendor/pdalboost/boost/move/detail/std_ns_begin.hpp
new file mode 100644
index 0000000..a768e61
--- /dev/null
+++ b/vendor/pdalboost/boost/move/detail/std_ns_begin.hpp
@@ -0,0 +1,30 @@
+#//////////////////////////////////////////////////////////////////////////////
+#//
+#// (C) Copyright Ion Gaztanaga 2015-2015.
+#// Distributed under the Boost Software License, Version 1.0.
+#// (See accompanying file LICENSE_1_0.txt or copy at
+#// http://www.boost.org/LICENSE_1_0.txt)
+#//
+#// See http://www.boost.org/libs/move for documentation.
+#//
+#//////////////////////////////////////////////////////////////////////////////
+#
+#if defined(_LIBCPP_VERSION)
+   #if defined(__clang__)
+      #define BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH
+      #pragma GCC diagnostic push
+      #pragma GCC diagnostic ignored "-Wc++11-extensions"
+   #endif
+   #define BOOST_MOVE_STD_NS_BEG _LIBCPP_BEGIN_NAMESPACE_STD
+   #define BOOST_MOVE_STD_NS_END _LIBCPP_END_NAMESPACE_STD
+#elif defined(BOOST_GNU_STDLIB) && defined(_GLIBCXX_BEGIN_NAMESPACE_VERSION)  //GCC >= 4.6
+   #define BOOST_MOVE_STD_NS_BEG namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION
+   #define BOOST_MOVE_STD_NS_END _GLIBCXX_END_NAMESPACE_VERSION  } // namespace
+#elif defined(BOOST_GNU_STDLIB) && defined(_GLIBCXX_BEGIN_NAMESPACE)  //GCC >= 4.2
+   #define BOOST_MOVE_STD_NS_BEG _GLIBCXX_BEGIN_NAMESPACE(std)
+   #define BOOST_MOVE_STD_NS_END _GLIBCXX_END_NAMESPACE
+#else
+   #define BOOST_MOVE_STD_NS_BEG namespace std{
+   #define BOOST_MOVE_STD_NS_END }
+#endif
+
diff --git a/vendor/pdalboost/boost/move/detail/std_ns_end.hpp b/vendor/pdalboost/boost/move/detail/std_ns_end.hpp
new file mode 100644
index 0000000..0975059
--- /dev/null
+++ b/vendor/pdalboost/boost/move/detail/std_ns_end.hpp
@@ -0,0 +1,14 @@
+#//////////////////////////////////////////////////////////////////////////////
+#//
+#// (C) Copyright Ion Gaztanaga 2015-2015.
+#// Distributed under the Boost Software License, Version 1.0.
+#// (See accompanying file LICENSE_1_0.txt or copy at
+#// http://www.boost.org/LICENSE_1_0.txt)
+#//
+#// See http://www.boost.org/libs/move for documentation.
+#//
+#//////////////////////////////////////////////////////////////////////////////
+#ifdef BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH
+   #pragma GCC diagnostic pop
+   #undef BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH
+#endif   //BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH
diff --git a/vendor/pdalboost/boost/move/detail/type_traits.hpp b/vendor/pdalboost/boost/move/detail/type_traits.hpp
new file mode 100644
index 0000000..104e9c9
--- /dev/null
+++ b/vendor/pdalboost/boost/move/detail/type_traits.hpp
@@ -0,0 +1,1078 @@
+//////////////////////////////////////////////////////////////////////////////
+// (C) Copyright John Maddock 2000.
+// (C) Copyright Ion Gaztanaga 2005-2015.
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+// The alignment and Type traits implementation comes from
+// John Maddock's TypeTraits library.
+//
+// Some other tricks come from Howard Hinnant's papers and StackOverflow replies
+//////////////////////////////////////////////////////////////////////////////
+#ifndef BOOST_MOVE_DETAIL_TYPE_TRAITS_HPP
+#define BOOST_MOVE_DETAIL_TYPE_TRAITS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/move/detail/config_begin.hpp>
+#include <boost/move/detail/workaround.hpp>
+
+// move/detail
+#include <boost/move/detail/meta_utils.hpp>
+// other
+#include <boost/assert.hpp>
+#include <boost/static_assert.hpp>
+// std
+#include <cstddef>
+
+//Use of Boost.TypeTraits leads to long preprocessed source code due to
+//MPL dependencies. We'll use intrinsics directly and make or own
+//simplified version of TypeTraits.
+//If someday Boost.TypeTraits dependencies are minimized, we should
+//revisit this file redirecting code to Boost.TypeTraits traits.
+
+//These traits don't care about volatile, reference or other checks
+//made by Boost.TypeTraits because no volatile or reference types
+//can be hold in Boost.Containers. This helps to avoid any Boost.TypeTraits
+//dependency.
+
+// Helper macros for builtin compiler support.
+// If your compiler has builtin support for any of the following
+// traits concepts, then redefine the appropriate macros to pick
+// up on the compiler support:
+//
+// (these should largely ignore cv-qualifiers)
+// BOOST_MOVE_IS_POD(T) should evaluate to true if T is a POD type
+// BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) should evaluate to true if "T x;" has no effect
+// BOOST_MOVE_HAS_TRIVIAL_COPY(T) should evaluate to true if T(t) <==> memcpy
+// BOOST_MOVE_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) should evaluate to true if T(pdalboost::move(t)) <==> memcpy
+// BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) should evaluate to true if t = u <==> memcpy
+// BOOST_MOVE_HAS_TRIVIAL_MOVE_ASSIGN(T) should evaluate to true if t = pdalboost::move(u) <==> memcpy
+// BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T) should evaluate to true if ~T() has no effect
+// BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T) should evaluate to true if "T x;" can not throw
+// BOOST_MOVE_HAS_NOTHROW_COPY(T) should evaluate to true if T(t) can not throw
+// BOOST_MOVE_HAS_NOTHROW_ASSIGN(T) should evaluate to true if t = u can not throw
+// BOOST_MOVE_IS_ENUM(T) should evaluate to true it t is a union type.
+//
+// The following can also be defined: when detected our implementation is greatly simplified.
+//
+// BOOST_ALIGNMENT_OF(T) should evaluate to the alignment requirements of type T.
+
+#if defined(__MSL_CPP__) && (__MSL_CPP__ >= 0x8000)
+    // Metrowerks compiler is acquiring intrinsic type traits support
+    // post version 8.  We hook into the published interface to pick up
+    // user defined specializations as well as compiler intrinsics as
+    // and when they become available:
+#   include <msl_utility>
+#   define BOOST_MOVE_IS_UNION(T) BOOST_STD_EXTENSION_NAMESPACE::is_union<T>::value
+#   define BOOST_MOVE_IS_POD(T) BOOST_STD_EXTENSION_NAMESPACE::is_POD<T>::value
+#   define BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_default_ctor<T>::value
+#   define BOOST_MOVE_HAS_TRIVIAL_COPY(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_copy_ctor<T>::value
+#   define BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_assignment<T>::value
+#   define BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_dtor<T>::value
+#endif
+
+#if (defined(BOOST_MSVC) && defined(BOOST_MSVC_FULL_VER) && (BOOST_MSVC_FULL_VER >=140050215))\
+         || (defined(BOOST_INTEL) && defined(_MSC_VER) && (_MSC_VER >= 1500))
+#   define BOOST_MOVE_IS_UNION(T) __is_union(T)
+#   define BOOST_MOVE_IS_POD(T)                    (__is_pod(T) && __has_trivial_constructor(T))
+#   define BOOST_MOVE_IS_EMPTY(T)                  __is_empty(T)
+#   define BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T)   __has_trivial_constructor(T)
+#   define BOOST_MOVE_HAS_TRIVIAL_COPY(T)          (__has_trivial_copy(T)|| ::pdalboost::move_detail::is_pod<T>::value)
+#   define BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T)        (__has_trivial_assign(T) || ::pdalboost::move_detail::is_pod<T>::value)
+#   define BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T)    (__has_trivial_destructor(T) || ::pdalboost::move_detail::is_pod<T>::value)
+#   define BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T)   (__has_nothrow_constructor(T) || ::pdalboost::move_detail::is_trivially_default_constructible<T>::value)
+#   define BOOST_MOVE_HAS_NOTHROW_COPY(T)          (__has_nothrow_copy(T) || ::pdalboost::move_detail::is_trivially_copy_constructible<T>::value)
+#   define BOOST_MOVE_HAS_NOTHROW_ASSIGN(T)        (__has_nothrow_assign(T) || ::pdalboost::move_detail::is_trivially_copy_assignable<T>::value)
+
+#   define BOOST_MOVE_IS_ENUM(T) __is_enum(T)
+#   if defined(_MSC_VER) && (_MSC_VER >= 1700)
+#       define BOOST_MOVE_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T)   (__has_trivial_move_constructor(T) || ::pdalboost::move_detail::is_pod<T>::value)
+#       define BOOST_MOVE_HAS_TRIVIAL_MOVE_ASSIGN(T)        (__has_trivial_move_assign(T) || ::pdalboost::move_detail::is_pod<T>::value)
+#   endif
+#endif
+
+#if defined(BOOST_CLANG) && defined(__has_feature)
+
+#   if __has_feature(is_union)
+#     define BOOST_MOVE_IS_UNION(T) __is_union(T)
+#   endif
+#   if (!defined(__GLIBCXX__) || (__GLIBCXX__ >= 20080306 && __GLIBCXX__ != 20080519)) && __has_feature(is_pod)
+#     define BOOST_MOVE_IS_POD(T) __is_pod(T)
+#   endif
+#   if (!defined(__GLIBCXX__) || (__GLIBCXX__ >= 20080306 && __GLIBCXX__ != 20080519)) && __has_feature(is_empty)
+#     define BOOST_MOVE_IS_EMPTY(T) __is_empty(T)
+#   endif
+#   if __has_feature(has_trivial_constructor)
+#     define BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)
+#   endif
+#   if __has_feature(has_trivial_copy)
+#     //There are problems with deleted copy constructors detected as trivially copyable.
+#     //http://stackoverflow.com/questions/12754886/has-trivial-copy-behaves-differently-in-clang-and-gcc-whos-right
+#     define BOOST_MOVE_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && ::pdalboost::move_detail::is_copy_constructible<T>::value)
+#   endif
+#   if __has_feature(has_trivial_assign)
+#     define BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) )
+#   endif
+#   if __has_feature(has_trivial_destructor)
+#     define BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
+#   endif
+#   if __has_feature(has_nothrow_constructor)
+#     define BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T)
+#   endif
+#   if __has_feature(has_nothrow_copy)
+#     define BOOST_MOVE_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T))
+#   endif
+#   if __has_feature(is_nothrow_copy_assignable)
+#     define BOOST_MOVE_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T))
+#   endif
+#   if __has_feature(is_enum)
+#     define BOOST_MOVE_IS_ENUM(T) __is_enum(T)
+#   endif
+#   if __has_feature(has_trivial_move_constructor)
+#     define BOOST_MOVE_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) __has_trivial_move_constructor(T)
+#   endif
+#   if __has_feature(has_trivial_move_assign)
+#     define BOOST_MOVE_HAS_TRIVIAL_MOVE_ASSIGN(T) __has_trivial_move_assign(T)
+#   endif
+#   define BOOST_MOVE_ALIGNMENT_OF(T) __alignof(T)
+#endif
+
+#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3) && !defined(__GCCXML__))) && !defined(BOOST_CLANG)
+
+#ifdef BOOST_INTEL
+#  define BOOST_MOVE_INTEL_TT_OPTS || ::pdalboost::move_detail::is_pod<T>::value
+#else
+#  define BOOST_MOVE_INTEL_TT_OPTS
+#endif
+
+#   define BOOST_MOVE_IS_UNION(T) __is_union(T)
+#   define BOOST_MOVE_IS_POD(T) __is_pod(T)
+#   define BOOST_MOVE_IS_EMPTY(T) __is_empty(T)
+#   define BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) ((__has_trivial_constructor(T) BOOST_MOVE_INTEL_TT_OPTS))
+#   define BOOST_MOVE_HAS_TRIVIAL_COPY(T) ((__has_trivial_copy(T) BOOST_MOVE_INTEL_TT_OPTS))
+#   define BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) ((__has_trivial_assign(T) BOOST_MOVE_INTEL_TT_OPTS) )
+#   define BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) BOOST_MOVE_INTEL_TT_OPTS)
+#   define BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) BOOST_MOVE_INTEL_TT_OPTS)
+#   define BOOST_MOVE_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T) BOOST_MOVE_INTEL_TT_OPTS))
+#   define BOOST_MOVE_HAS_NOTHROW_ASSIGN(T) ((__has_nothrow_assign(T) BOOST_MOVE_INTEL_TT_OPTS))
+
+#   define BOOST_MOVE_IS_ENUM(T) __is_enum(T)
+#   if (!defined(unix) && !defined(__unix__)) || defined(__LP64__)
+      // GCC sometimes lies about alignment requirements
+      // of type double on 32-bit unix platforms, use the
+      // old implementation instead in that case:
+#     define BOOST_MOVE_ALIGNMENT_OF(T) __alignof__(T)
+#   endif
+#endif
+
+#if defined(__ghs__) && (__GHS_VERSION_NUMBER >= 600)
+
+#   define BOOST_MOVE_IS_UNION(T) __is_union(T)
+#   define BOOST_MOVE_IS_POD(T) __is_pod(T)
+#   define BOOST_MOVE_IS_EMPTY(T) __is_empty(T)
+#   define BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)
+#   define BOOST_MOVE_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T))
+#   define BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T))
+#   define BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
+#   define BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T)
+#   define BOOST_MOVE_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T))
+#   define BOOST_MOVE_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T))
+
+#   define BOOST_MOVE_IS_ENUM(T) __is_enum(T)
+#   define BOOST_MOVE_ALIGNMENT_OF(T) __alignof__(T)
+#endif
+
+# if defined(__CODEGEARC__)
+#   define BOOST_MOVE_IS_UNION(T) __is_union(T)
+#   define BOOST_MOVE_IS_POD(T) __is_pod(T)
+#   define BOOST_MOVE_IS_EMPTY(T) __is_empty(T)
+#   define BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) (__has_trivial_default_constructor(T))
+#   define BOOST_MOVE_HAS_TRIVIAL_COPY(T) (__has_trivial_copy_constructor(T))
+#   define BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T))
+#   define BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T))
+#   define BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_default_constructor(T))
+#   define BOOST_MOVE_HAS_NOTHROW_COPY(T) (__has_nothrow_copy_constructor(T))
+#   define BOOST_MOVE_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T))
+
+#   define BOOST_MOVE_IS_ENUM(T) __is_enum(T)
+#   define BOOST_MOVE_ALIGNMENT_OF(T) alignof(T)
+
+#endif
+
+//Fallback definitions
+
+#ifdef BOOST_MOVE_IS_UNION
+   #define BOOST_MOVE_IS_UNION_IMPL(T) BOOST_MOVE_IS_UNION(T)
+#else
+   #define BOOST_MOVE_IS_UNION_IMPL(T) false
+#endif
+
+#ifdef BOOST_MOVE_IS_POD
+   //in some compilers the intrinsic is limited to class types so add scalar and void
+   #define BOOST_MOVE_IS_POD_IMPL(T) (::pdalboost::move_detail::is_scalar<T>::value ||\
+                                      ::pdalboost::move_detail::is_void<T>::value   ||\
+                                       BOOST_MOVE_IS_POD(T))
+#else
+   #define BOOST_MOVE_IS_POD_IMPL(T) \
+      (::pdalboost::move_detail::is_scalar<T>::value || ::pdalboost::move_detail::is_void<T>::value)
+#endif
+
+#ifdef BOOST_MOVE_IS_EMPTY
+   #define BOOST_MOVE_IS_EMPTY_IMPL(T) BOOST_MOVE_IS_EMPTY(T)
+#else
+   #define BOOST_MOVE_IS_EMPTY_IMPL(T)    ::pdalboost::move_detail::is_empty_nonintrinsic<T>::value
+#endif
+
+#ifdef BOOST_MOVE_HAS_TRIVIAL_COPY
+   #define BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T)   BOOST_MOVE_HAS_TRIVIAL_COPY(T)
+#else
+   #define BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T)   ::pdalboost::move_detail::is_pod<T>::value
+#endif
+
+#ifdef BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR
+   #define BOOST_MOVE_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE(T)  BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T)
+#else
+   #define BOOST_MOVE_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE(T)  ::pdalboost::move_detail::is_pod<T>::value
+#endif
+
+#ifdef BOOST_MOVE_HAS_TRIVIAL_COPY
+   #define BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T)   BOOST_MOVE_HAS_TRIVIAL_COPY(T)
+#else
+   #define BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T)   ::pdalboost::move_detail::is_pod<T>::value
+#endif
+
+#ifdef BOOST_MOVE_HAS_TRIVIAL_MOVE_CONSTRUCTOR
+   #define BOOST_MOVE_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE(T)   BOOST_MOVE_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T)
+#else
+   #define BOOST_MOVE_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE(T)   ::pdalboost::move_detail::is_pod<T>::value
+#endif
+
+#ifdef BOOST_MOVE_HAS_TRIVIAL_ASSIGN
+   #define BOOST_MOVE_IS_TRIVIALLY_COPY_ASSIGNABLE(T) BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T)
+#else
+   #define BOOST_MOVE_IS_TRIVIALLY_COPY_ASSIGNABLE(T) ::pdalboost::move_detail::is_pod<T>::value
+#endif
+
+#ifdef BOOST_MOVE_HAS_TRIVIAL_MOVE_ASSIGN
+   #define BOOST_MOVE_IS_TRIVIALLY_MOVE_ASSIGNABLE(T)  BOOST_MOVE_HAS_TRIVIAL_MOVE_ASSIGN(T)
+#else
+   #define BOOST_MOVE_IS_TRIVIALLY_MOVE_ASSIGNABLE(T)  ::pdalboost::move_detail::is_pod<T>::value
+#endif
+
+#ifdef BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR
+   #define BOOST_MOVE_IS_TRIVIALLY_DESTRUCTIBLE(T)   BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T)
+#else
+   #define BOOST_MOVE_IS_TRIVIALLY_DESTRUCTIBLE(T)   ::pdalboost::move_detail::is_pod<T>::value
+#endif
+
+#ifdef BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR
+   #define BOOST_MOVE_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE(T)  BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T)
+#else
+   #define BOOST_MOVE_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE(T)  ::pdalboost::move_detail::is_pod<T>::value
+#endif
+
+#ifdef BOOST_MOVE_HAS_NOTHROW_COPY
+   #define BOOST_MOVE_IS_NOTHROW_COPY_CONSTRUCTIBLE(T)   BOOST_MOVE_HAS_NOTHROW_COPY(T)
+#else
+   #define BOOST_MOVE_IS_NOTHROW_COPY_CONSTRUCTIBLE(T)   ::pdalboost::move_detail::is_pod<T>::value
+#endif
+
+#ifdef BOOST_MOVE_HAS_NOTHROW_MOVE
+   #define BOOST_MOVE_IS_NOTHROW_MOVE_CONSTRUCTIBLE(T)   BOOST_MOVE_HAS_NOTHROW_MOVE(T)
+#else
+   #define BOOST_MOVE_IS_NOTHROW_MOVE_CONSTRUCTIBLE(T)   ::pdalboost::move_detail::is_pod<T>::value
+#endif
+
+#ifdef BOOST_MOVE_HAS_NOTHROW_ASSIGN
+   #define BOOST_MOVE_IS_NOTHROW_COPY_ASSIGNABLE(T) BOOST_MOVE_HAS_NOTHROW_ASSIGN(T)
+#else
+   #define BOOST_MOVE_IS_NOTHROW_COPY_ASSIGNABLE(T) ::pdalboost::move_detail::is_pod<T>::value
+#endif
+
+#ifdef BOOST_MOVE_HAS_NOTHROW_MOVE_ASSIGN
+   #define BOOST_MOVE_IS_NOTHROW_MOVE_ASSIGNABLE(T) BOOST_MOVE_HAS_NOTHROW_MOVE_ASSIGN(T)
+#else
+   #define BOOST_MOVE_IS_NOTHROW_MOVE_ASSIGNABLE(T) ::pdalboost::move_detail::is_pod<T>::value
+#endif
+
+#ifdef BOOST_MOVE_IS_ENUM
+   #define BOOST_MOVE_IS_ENUM_IMPL(T)   BOOST_MOVE_IS_ENUM(T)
+#else
+   #define BOOST_MOVE_IS_ENUM_IMPL(T)   ::pdalboost::move_detail::is_enum_nonintrinsic<T>::value
+#endif
+
+namespace pdalboost {
+namespace move_detail {
+
+//////////////////////////
+//    is_reference
+//////////////////////////
+template<class T>
+struct is_reference
+{  static const bool value = false; };
+
+template<class T>
+struct is_reference<T&>
+{  static const bool value = true; };
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+template<class T>
+struct is_reference<T&&>
+{  static const bool value = true; };
+#endif
+
+//////////////////////////
+//    is_pointer
+//////////////////////////
+template<class T>
+struct is_pointer
+{  static const bool value = false; };
+
+template<class T>
+struct is_pointer<T*>
+{  static const bool value = true; };
+
+//////////////////////////
+//       is_const
+//////////////////////////
+template<class T>
+struct is_const
+{  static const bool value = false; };
+
+template<class T>
+struct is_const<const T>
+{  static const bool value = true; };
+
+//////////////////////////
+//       unvoid_ref
+//////////////////////////
+template <typename T> struct unvoid_ref : add_lvalue_reference<T>{};
+template <> struct unvoid_ref<void>                { typedef unvoid_ref & type; };
+template <> struct unvoid_ref<const void>          { typedef unvoid_ref & type; };
+template <> struct unvoid_ref<volatile void>       { typedef unvoid_ref & type; };
+template <> struct unvoid_ref<const volatile void> { typedef unvoid_ref & type; };
+
+template <typename T>
+struct add_reference : add_lvalue_reference<T>
+{};
+
+//////////////////////////
+//    add_const_reference
+//////////////////////////
+template <class T>
+struct add_const_reference
+{  typedef const T &type;   };
+
+template <class T>
+struct add_const_reference<T&>
+{  typedef T& type;   };
+
+//////////////////////////
+//    add_const_if_c
+//////////////////////////
+template<class T, bool Add>
+struct add_const_if_c
+   : if_c<Add, typename add_const<T>::type, T>
+{};
+
+//////////////////////////
+//    remove_const
+//////////////////////////
+template<class T>
+struct remove_const
+{  typedef T type;   };
+
+template<class T>
+struct remove_const< const T>
+{  typedef T type;   };
+
+//////////////////////////
+//    remove_cv
+//////////////////////////
+template<typename T> struct remove_cv                    {  typedef T type;   };
+template<typename T> struct remove_cv<const T>           {  typedef T type;   };
+template<typename T> struct remove_cv<const volatile T>  {  typedef T type;   };
+template<typename T> struct remove_cv<volatile T>        {  typedef T type;   };
+
+//////////////////////////
+//    make_unsigned
+//////////////////////////
+template <class T>
+struct make_unsigned_impl                                         {  typedef T type;   };
+template <> struct make_unsigned_impl<signed char>                {  typedef unsigned char  type; };
+template <> struct make_unsigned_impl<signed short>               {  typedef unsigned short type; };
+template <> struct make_unsigned_impl<signed int>                 {  typedef unsigned int   type; };
+template <> struct make_unsigned_impl<signed long>                {  typedef unsigned long  type; };
+#ifdef BOOST_HAS_LONG_LONG
+template <> struct make_unsigned_impl< ::pdalboost::long_long_type >  {  typedef ::pdalboost::ulong_long_type type; };
+#endif
+
+template <class T>
+struct make_unsigned
+   : make_unsigned_impl<typename remove_cv<T>::type>
+{};
+
+//////////////////////////
+//    is_floating_point
+//////////////////////////
+template<class T> struct is_floating_point_cv               {  static const bool value = false; };
+template<>        struct is_floating_point_cv<float>        {  static const bool value = true; };
+template<>        struct is_floating_point_cv<double>       {  static const bool value = true; };
+template<>        struct is_floating_point_cv<long double>  {  static const bool value = true; };
+
+template<class T>
+struct is_floating_point
+   : is_floating_point_cv<typename remove_cv<T>::type>
+{};
+
+//////////////////////////
+//    is_integral
+//////////////////////////
+template<class T> struct is_integral_cv                    {  static const bool value = false; };
+template<> struct is_integral_cv<                     bool>{  static const bool value = true; };
+template<> struct is_integral_cv<                     char>{  static const bool value = true; };
+template<> struct is_integral_cv<            unsigned char>{  static const bool value = true; };
+template<> struct is_integral_cv<              signed char>{  static const bool value = true; };
+#ifndef BOOST_NO_CXX11_CHAR16_T
+template<> struct is_integral_cv<                 char16_t>{  static const bool value = true; };
+#endif
+#ifndef BOOST_NO_CXX11_CHAR32_T
+template<> struct is_integral_cv<                 char32_t>{  static const bool value = true; };
+#endif
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+template<> struct is_integral_cv<                  wchar_t>{  static const bool value = true; };
+#endif
+template<> struct is_integral_cv<                    short>{  static const bool value = true; };
+template<> struct is_integral_cv<           unsigned short>{  static const bool value = true; };
+template<> struct is_integral_cv<                      int>{  static const bool value = true; };
+template<> struct is_integral_cv<             unsigned int>{  static const bool value = true; };
+template<> struct is_integral_cv<                     long>{  static const bool value = true; };
+template<> struct is_integral_cv<            unsigned long>{  static const bool value = true; };
+#ifdef BOOST_HAS_LONG_LONG
+template<> struct is_integral_cv< ::pdalboost:: long_long_type>{  static const bool value = true; };
+template<> struct is_integral_cv< ::pdalboost::ulong_long_type>{  static const bool value = true; };
+#endif
+
+template<class T>
+struct is_integral
+   : public is_integral_cv<typename remove_cv<T>::type>
+{};
+
+//////////////////////////////////////
+//          remove_all_extents
+//////////////////////////////////////
+template <class T>
+struct remove_all_extents
+{  typedef T type;};
+
+template <class T>
+struct remove_all_extents<T[]>
+{  typedef typename remove_all_extents<T>::type type; };
+
+template <class T, std::size_t N>
+struct remove_all_extents<T[N]>
+{  typedef typename remove_all_extents<T>::type type;};
+
+//////////////////////////
+//    is_scalar
+//////////////////////////
+template<class T>
+struct is_scalar
+{  static const bool value = is_integral<T>::value || is_floating_point<T>::value; };
+
+//////////////////////////
+//       is_void
+//////////////////////////
+template<class T>
+struct is_void_cv
+{  static const bool value = false; };
+
+template<>
+struct is_void_cv<void>
+{  static const bool value = true; };
+
+template<class T>
+struct is_void
+   : is_void_cv<typename remove_cv<T>::type>
+{};
+
+//////////////////////////////////////
+//          is_array
+//////////////////////////////////////
+template<class T>
+struct is_array
+{  static const bool value = false; };
+
+template<class T>
+struct is_array<T[]>
+{  static const bool value = true;  };
+
+template<class T, std::size_t N>
+struct is_array<T[N]>
+{  static const bool value = true;  };
+
+//////////////////////////////////////
+//           is_member_pointer
+//////////////////////////////////////
+template <class T>         struct is_member_pointer_cv         {  static const bool value = false; };
+template <class T, class U>struct is_member_pointer_cv<T U::*> {  static const bool value = true; };
+
+template <class T>
+struct is_member_pointer
+    : is_member_pointer_cv<typename remove_cv<T>::type>
+{};
+
+//////////////////////////////////////
+//          is_nullptr_t
+//////////////////////////////////////
+template <class T>
+struct is_nullptr_t_cv
+{  static const bool value = false; };
+
+#if !defined(BOOST_NO_CXX11_NULLPTR)
+template <>
+struct is_nullptr_t_cv
+   #if !defined(BOOST_NO_CXX11_DECLTYPE)
+   <decltype(nullptr)>
+   #else
+   <std::nullptr_t>
+   #endif
+{  static const bool value = true; };
+#endif
+
+template <class T>
+struct is_nullptr_t
+   : is_nullptr_t_cv<typename remove_cv<T>::type>
+{};
+
+//////////////////////////////////////
+//          is_function
+//////////////////////////////////////
+//Inspired by libc++, thanks to Howard Hinnant
+//For a function to pointer an lvalue of function type T can be implicitly converted to a prvalue
+//pointer to that function. This does not apply to non-static member functions because lvalues
+//that refer to non-static member functions do not exist.
+template <class T>
+struct is_reference_convertible_to_pointer
+{
+   struct twochar { char dummy[2]; };
+   template <class U> static char    test(U*);
+   template <class U> static twochar test(...);
+   static T& source();
+   static const bool value = sizeof(char) == sizeof(test<T>(source()));
+};
+//Filter out:
+// - class types that might have implicit conversions
+// - void (to avoid forming a reference to void later)
+// - references (e.g.: filtering reference to functions)
+// - nullptr_t (convertible to pointer)
+template < class T
+         , bool Filter = is_class_or_union<T>::value  ||
+                         is_void<T>::value            ||
+                         is_reference<T>::value       ||
+                         is_nullptr_t<T>::value       >
+struct is_function_impl
+{  static const bool value = is_reference_convertible_to_pointer<T>::value; };
+
+template <class T>
+struct is_function_impl<T, true>
+{  static const bool value = false; };
+
+template <class T>
+struct is_function
+   : is_function_impl<T>
+{};
+
+//////////////////////////////////////
+//       is_union
+//////////////////////////////////////
+template<class T>
+struct is_union_noextents_cv
+{  static const bool value = BOOST_MOVE_IS_UNION_IMPL(T); };
+
+template<class T>
+struct is_union
+   : is_union_noextents_cv<typename remove_cv<typename remove_all_extents<T>::type>::type>
+{};
+
+//////////////////////////////////////
+//             is_class
+//////////////////////////////////////
+template <class T>
+struct is_class
+{
+   static const bool value = is_class_or_union<T>::value && ! is_union<T>::value;
+};
+
+
+//////////////////////////////////////
+//             is_arithmetic
+//////////////////////////////////////
+template <class T>
+struct is_arithmetic
+{
+   static const bool value = is_floating_point<T>::value ||
+                             is_integral<T>::value;
+};
+
+//////////////////////////////////////
+//    is_member_function_pointer
+//////////////////////////////////////
+template <class T>
+struct is_member_function_pointer_cv
+{
+   static const bool value = false;
+};
+
+template <class T, class C>
+struct is_member_function_pointer_cv<T C::*>
+   : is_function<T>
+{};
+
+template <class T>
+struct is_member_function_pointer
+    : is_member_function_pointer_cv<typename remove_cv<T>::type>
+{};
+
+//////////////////////////////////////
+//             is_enum
+//////////////////////////////////////
+#if !defined(BOOST_MOVE_IS_ENUM)
+//Based on (http://howardhinnant.github.io/TypeHiearchy.pdf)
+template <class T>
+struct is_enum_nonintrinsic
+{
+   static const bool value =  !is_arithmetic<T>::value     &&
+                              !is_reference<T>::value      &&
+                              !is_class_or_union<T>::value &&
+                              !is_array<T>::value          &&
+                              !is_void<T>::value           &&
+                              !is_nullptr_t<T>::value      &&
+                              !is_member_pointer<T>::value &&
+                              !is_pointer<T>::value        &&
+                              !is_function<T>::value;
+};
+#endif
+
+template <class T>
+struct is_enum
+{  static const bool value = BOOST_MOVE_IS_ENUM_IMPL(T);  };
+
+//////////////////////////////////////
+//       is_pod
+//////////////////////////////////////
+template<class T>
+struct is_pod_noextents_cv  //for non-c++11 compilers, a safe fallback
+{  static const bool value = BOOST_MOVE_IS_POD_IMPL(T); };
+
+template<class T>
+struct is_pod
+   : is_pod_noextents_cv<typename remove_cv<typename remove_all_extents<T>::type>::type>
+{};
+
+//////////////////////////////////////
+//             is_empty
+//////////////////////////////////////
+#if !defined(BOOST_MOVE_IS_EMPTY)
+
+template <typename T>
+struct empty_helper_t1 : public T
+{
+   empty_helper_t1();  // hh compiler bug workaround
+   int i[256];
+   private:
+
+   empty_helper_t1(const empty_helper_t1&);
+   empty_helper_t1& operator=(const empty_helper_t1&);
+};
+
+struct empty_helper_t2 { int i[256]; };
+
+template <typename T, bool IsClass = is_class<T>::value >
+struct is_empty_nonintrinsic
+{
+   static const bool value = false;
+};
+
+template <typename T>
+struct is_empty_nonintrinsic<T, true>
+{
+   static const bool value = sizeof(empty_helper_t1<T>) == sizeof(empty_helper_t2);
+};
+#endif
+
+template <class T>
+struct is_empty
+{  static const bool value = BOOST_MOVE_IS_EMPTY_IMPL(T);  };
+
+
+template<class T>
+struct has_boost_move_no_copy_constructor_or_assign_type
+{
+   template <class U>
+   static yes_type test(typename U::boost_move_no_copy_constructor_or_assign*);
+
+   template <class U>
+   static no_type test(...);
+
+   static const bool value = sizeof(test<T>(0)) == sizeof(yes_type);
+};
+
+//////////////////////////////////////
+//       is_copy_constructible
+//////////////////////////////////////
+#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_NO_CXX11_DECLTYPE) \
+   && !defined(BOOST_INTEL_CXX_VERSION) && \
+      !(defined(BOOST_MSVC) && _MSC_VER == 1800)
+#define BOOST_MOVE_TT_CXX11_IS_COPY_CONSTRUCTIBLE
+#endif
+
+template<class T>
+struct is_copy_constructible
+{
+   // Intel compiler has problems with SFINAE for copy constructors and deleted functions:
+   //
+   // error: function *function_name* cannot be referenced -- it is a deleted function
+   // static yes_type test(U&, decltype(U(pdalboost::declval<U&>()))* = 0);
+   //                                                        ^ 
+   // MSVC 12.0 (Visual 2013) has problems when the copy constructor has been deleted. See:
+   // https://connect.microsoft.com/VisualStudio/feedback/details/800328/std-is-copy-constructible-is-broken
+   #if defined(BOOST_MOVE_TT_CXX11_IS_COPY_CONSTRUCTIBLE)
+      template<class U> static typename add_reference<U>::type source();
+      static no_type test(...);
+      #ifdef BOOST_NO_CXX11_DECLTYPE
+         template <class U>
+         static yes_type test(U&, bool_<sizeof(U(source<U>()))>* = 0);
+      #else
+         template <class U>
+         static yes_type test(U&, decltype(U(source<U>()))* = 0);
+      #endif
+      static const bool value = sizeof(test(source<T>())) == sizeof(yes_type);
+   #else
+   static const bool value = !has_boost_move_no_copy_constructor_or_assign_type<T>::value;
+   #endif
+};
+
+
+//////////////////////////////////////
+//       is_copy_assignable
+//////////////////////////////////////
+#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_NO_CXX11_DECLTYPE) \
+   && !defined(BOOST_INTEL_CXX_VERSION) && \
+      !(defined(BOOST_MSVC) && _MSC_VER == 1800)
+#define BOOST_MOVE_TT_CXX11_IS_COPY_ASSIGNABLE
+#endif
+
+template <class T>
+struct is_copy_assignable
+{
+// Intel compiler has problems with SFINAE for copy constructors and deleted functions:
+//
+// error: function *function_name* cannot be referenced -- it is a deleted function
+// static pdalboost::type_traits::yes_type test(T1&, decltype(T1(pdalboost::declval<T1&>()))* = 0);
+//                                                        ^ 
+//
+// MSVC 12.0 (Visual 2013) has problems when the copy constructor has been deleted. See:
+// https://connect.microsoft.com/VisualStudio/feedback/details/800328/std-is-copy-constructible-is-broken
+#if defined(BOOST_MOVE_TT_CXX11_IS_COPY_ASSIGNABLE)
+   typedef char yes_type;
+   struct no_type { char dummy[2]; };
+   
+   template <class U>   static typename add_reference<U>::type source();
+   template <class U>   static decltype(source<U&>() = source<const U&>(), yes_type() ) test(int);
+   template <class>     static no_type test(...);
+
+   static const bool value = sizeof(test<T>(0)) == sizeof(yes_type);
+#else
+   static const bool value = !has_boost_move_no_copy_constructor_or_assign_type<T>::value;
+#endif
+};
+
+//////////////////////////////////////
+//       is_trivially_destructible
+//////////////////////////////////////
+template<class T>
+struct is_trivially_destructible
+{  static const bool value = BOOST_MOVE_IS_TRIVIALLY_DESTRUCTIBLE(T); };
+
+//////////////////////////////////////
+//       is_trivially_default_constructible
+//////////////////////////////////////
+template<class T>
+struct is_trivially_default_constructible
+{  static const bool value = BOOST_MOVE_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE(T); };
+
+//////////////////////////////////////
+//       is_trivially_copy_constructible
+//////////////////////////////////////
+template<class T>
+struct is_trivially_copy_constructible
+{
+   //In several compilers BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE return true even with
+   //deleted copy constructors so make sure the type is copy constructible.
+   static const bool value = ::pdalboost::move_detail::is_pod<T>::value ||
+                             ( ::pdalboost::move_detail::is_copy_constructible<T>::value &&
+                               BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T) );
+};
+
+//////////////////////////////////////
+//       is_trivially_move_constructible
+//////////////////////////////////////
+template<class T>
+struct is_trivially_move_constructible
+{  static const bool value = BOOST_MOVE_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE(T); };
+
+//////////////////////////////////////
+//       is_trivially_copy_assignable
+//////////////////////////////////////
+template<class T>
+struct is_trivially_copy_assignable
+{
+   //In several compilers BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE return true even with
+   //deleted copy constructors so make sure the type is copy constructible.
+   static const bool value = ::pdalboost::move_detail::is_pod<T>::value ||
+                             ( ::pdalboost::move_detail::is_copy_assignable<T>::value &&
+                               BOOST_MOVE_IS_TRIVIALLY_COPY_ASSIGNABLE(T) );
+};                             
+
+//////////////////////////////////////
+//       is_trivially_move_assignable
+//////////////////////////////////////
+template<class T>
+struct is_trivially_move_assignable
+{  static const bool value = BOOST_MOVE_IS_TRIVIALLY_MOVE_ASSIGNABLE(T);  };
+
+//////////////////////////////////////
+//       is_nothrow_default_constructible
+//////////////////////////////////////
+template<class T>
+struct is_nothrow_default_constructible
+   : is_pod<T>
+{  static const bool value = BOOST_MOVE_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE(T);  };
+
+//////////////////////////////////////
+//    is_nothrow_copy_constructible
+//////////////////////////////////////
+template<class T>
+struct is_nothrow_copy_constructible
+{  static const bool value = BOOST_MOVE_IS_NOTHROW_COPY_CONSTRUCTIBLE(T);  };
+
+//////////////////////////////////////
+//    is_nothrow_move_constructible
+//////////////////////////////////////
+template<class T>
+struct is_nothrow_move_constructible
+{  static const bool value = BOOST_MOVE_IS_NOTHROW_MOVE_CONSTRUCTIBLE(T);  };
+
+//////////////////////////////////////
+//       is_nothrow_copy_assignable
+//////////////////////////////////////
+template<class T>
+struct is_nothrow_copy_assignable
+{  static const bool value = BOOST_MOVE_IS_NOTHROW_COPY_ASSIGNABLE(T);  };
+
+//////////////////////////////////////
+//    is_nothrow_move_assignable
+//////////////////////////////////////
+template<class T>
+struct is_nothrow_move_assignable
+{  static const bool value = BOOST_MOVE_IS_NOTHROW_MOVE_ASSIGNABLE(T);  };
+
+//////////////////////////////////////
+//    is_nothrow_swappable
+//////////////////////////////////////
+template<class T>
+struct is_nothrow_swappable
+{
+   static const bool value = is_empty<T>::value || is_pod<T>::value;
+};
+
+//////////////////////////////////////
+//       alignment_of
+//////////////////////////////////////
+template <typename T>
+struct alignment_of_hack
+{
+   T t1;
+   char c;
+   T t2;
+   alignment_of_hack();
+};
+
+template <unsigned A, unsigned S>
+struct alignment_logic
+{  static const std::size_t value = A < S ? A : S; };
+
+template< typename T >
+struct alignment_of_impl
+#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1400)
+    // With MSVC both the native __alignof operator
+    // and our own logic gets things wrong from time to time :-(
+    // Using a combination of the two seems to make the most of a bad job:
+   : alignment_logic< sizeof(alignment_of_hack<T>) - 2*sizeof(T), __alignof(T)>
+{};
+#elif !defined(BOOST_MOVE_ALIGNMENT_OF)
+   : alignment_logic< sizeof(alignment_of_hack<T>) - 2*sizeof(T), sizeof(T)>
+{};
+#else
+{  static const std::size_t value = BOOST_MOVE_ALIGNMENT_OF(T);  };
+#endif
+
+template< typename T >
+struct alignment_of
+   : alignment_of_impl<T>
+{};
+
+class alignment_dummy;
+typedef void (*function_ptr)();
+typedef int (alignment_dummy::*member_ptr);
+typedef int (alignment_dummy::*member_function_ptr)();
+struct alignment_struct
+{  long double dummy[4];  };
+
+/////////////////////////////
+//    max_align_t
+/////////////////////////////
+//This is not standard, but should work with all compilers
+union max_align
+{
+   char        char_;
+   short       short_;
+   int         int_;
+   long        long_;
+   #ifdef BOOST_HAS_LONG_LONG
+   ::pdalboost::long_long_type   long_long_;
+   #endif
+   float       float_;
+   double      double_;
+   void *      void_ptr_;
+   long double long_double_[4];
+   alignment_dummy *unknown_class_ptr_;
+   function_ptr function_ptr_;
+   member_function_ptr member_function_ptr_;
+   alignment_struct alignment_struct_;
+};
+
+typedef union max_align max_align_t;
+
+/////////////////////////////
+//    aligned_storage
+/////////////////////////////
+
+#if !defined(BOOST_NO_ALIGNMENT)
+
+template<std::size_t Len, std::size_t Align>
+struct aligned_storage_impl;
+
+#define BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(A)\
+template<std::size_t Len>\
+struct BOOST_ALIGNMENT(A) aligned_storage_impl<Len, A>\
+{\
+   char dummy[Len];\
+   typedef aligned_storage_impl<Len, A> type;\
+};\
+//
+
+//Up to 4K alignment (typical page size)
+BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x1)
+BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x2)
+BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x4)
+BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x8)
+BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x10)
+BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x20)
+BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x40)
+BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x80)
+BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x100)
+BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x200)
+BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x400)
+BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x800)
+BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT(0x1000)
+
+#undef BOOST_MOVE_ALIGNED_STORAGE_WITH_BOOST_ALIGNMENT
+
+#else //BOOST_NO_ALIGNMENT
+
+template<class T, std::size_t Len>
+union aligned_union
+{	
+   T aligner;
+   char dummy[Len];
+};
+
+template<std::size_t Len, std::size_t Align, class T, bool Ok>
+struct aligned_next;
+
+template<std::size_t Len, std::size_t Align, class T>
+struct aligned_next<Len, Align, T, true>
+{
+   BOOST_STATIC_ASSERT((alignment_of<T>::value == Align));
+   typedef aligned_union<T, Len> type;
+};
+
+//End of search defaults to max_align_t
+template<std::size_t Len, std::size_t Align>
+struct aligned_next<Len, Align, max_align_t, false>
+{	typedef aligned_union<max_align_t, Len> type;   };
+
+//Now define a search list through types
+#define BOOST_MOVE_ALIGNED_NEXT_STEP(TYPE, NEXT_TYPE)\
+   template<std::size_t Len, std::size_t Align>\
+   struct aligned_next<Len, Align, TYPE, false>\
+      : aligned_next<Len, Align, NEXT_TYPE, Align == alignment_of<NEXT_TYPE>::value>\
+   {};\
+   //
+   BOOST_MOVE_ALIGNED_NEXT_STEP(long double, max_align_t)
+   BOOST_MOVE_ALIGNED_NEXT_STEP(double, long double)
+   #ifdef BOOST_HAS_LONG_LONG
+      BOOST_MOVE_ALIGNED_NEXT_STEP(::pdalboost::long_long_type, double)
+      BOOST_MOVE_ALIGNED_NEXT_STEP(long, ::pdalboost::long_long_type)
+   #else
+      BOOST_MOVE_ALIGNED_NEXT_STEP(long, double)
+   #endif
+   BOOST_MOVE_ALIGNED_NEXT_STEP(int, long)
+   BOOST_MOVE_ALIGNED_NEXT_STEP(short, int)
+   BOOST_MOVE_ALIGNED_NEXT_STEP(char, short)
+#undef BOOST_MOVE_ALIGNED_NEXT_STEP
+
+template<std::size_t Len, std::size_t Align>
+struct aligned_storage_impl
+   : aligned_next<Len, Align, char, Align == alignment_of<char>::value>
+{};
+
+#endif
+
+template<std::size_t Len, std::size_t Align = alignment_of<max_align_t>::value>
+struct aligned_storage
+{
+   //Sanity checks for input parameters
+   BOOST_STATIC_ASSERT(Align > 0);
+
+   //Sanity checks for output type
+   typedef typename aligned_storage_impl<Len ? Len : 1, Align>::type type;
+   static const std::size_t value = alignment_of<type>::value;
+   BOOST_STATIC_ASSERT(value >= Align);
+   BOOST_STATIC_ASSERT((value % Align) == 0);
+
+   //Just in case someone instantiates aligned_storage
+   //instead of aligned_storage::type (typical error).
+   private:
+   aligned_storage();
+};
+
+}  //namespace move_detail {
+}  //namespace pdalboost {
+
+#include <boost/move/detail/config_end.hpp>
+
+#endif   //#ifndef BOOST_MOVE_DETAIL_TYPE_TRAITS_HPP
diff --git a/vendor/pdalboost/boost/move/detail/unique_ptr_meta_utils.hpp b/vendor/pdalboost/boost/move/detail/unique_ptr_meta_utils.hpp
new file mode 100644
index 0000000..bf513b9
--- /dev/null
+++ b/vendor/pdalboost/boost/move/detail/unique_ptr_meta_utils.hpp
@@ -0,0 +1,591 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2012-2012.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! \file
+
+#ifndef BOOST_MOVE_UNIQUE_PTR_DETAIL_META_UTILS_HPP
+#define BOOST_MOVE_UNIQUE_PTR_DETAIL_META_UTILS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <cstddef>   //for std::size_t
+
+//Small meta-typetraits to support move
+
+namespace pdalboost {
+
+namespace movelib {
+
+template <class T>
+struct default_delete;
+
+}  //namespace movelib {
+
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+//Forward declare pdalboost::rv
+template <class T> class rv;
+#endif
+
+namespace move_upmu {
+
+//////////////////////////////////////
+//              nat
+//////////////////////////////////////
+struct nat{};
+
+//////////////////////////////////////
+//            natify
+//////////////////////////////////////
+template <class T> struct natify{};
+
+//////////////////////////////////////
+//             if_c
+//////////////////////////////////////
+template<bool C, typename T1, typename T2>
+struct if_c
+{
+   typedef T1 type;
+};
+
+template<typename T1, typename T2>
+struct if_c<false,T1,T2>
+{
+   typedef T2 type;
+};
+
+//////////////////////////////////////
+//             if_
+//////////////////////////////////////
+template<typename T1, typename T2, typename T3>
+struct if_ : if_c<0 != T1::value, T2, T3>
+{};
+
+//enable_if_
+template <bool B, class T = nat>
+struct enable_if_c
+{
+   typedef T type;
+};
+
+//////////////////////////////////////
+//          enable_if_c
+//////////////////////////////////////
+template <class T>
+struct enable_if_c<false, T> {};
+
+//////////////////////////////////////
+//           enable_if
+//////////////////////////////////////
+template <class Cond, class T = nat>
+struct enable_if : public enable_if_c<Cond::value, T> {};
+
+//////////////////////////////////////
+//          remove_reference
+//////////////////////////////////////
+template<class T>
+struct remove_reference
+{
+   typedef T type;
+};
+
+template<class T>
+struct remove_reference<T&>
+{
+   typedef T type;
+};
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+template<class T>
+struct remove_reference<T&&>
+{
+   typedef T type;
+};
+
+#else
+
+template<class T>
+struct remove_reference< rv<T> >
+{
+   typedef T type;
+};
+
+template<class T>
+struct remove_reference< rv<T> &>
+{
+   typedef T type;
+};
+
+template<class T>
+struct remove_reference< const rv<T> &>
+{
+   typedef T type;
+};
+
+
+#endif
+
+//////////////////////////////////////
+//             remove_const
+//////////////////////////////////////
+template< class T >
+struct remove_const
+{
+   typedef T type;
+};
+
+template< class T >
+struct remove_const<const T>
+{
+   typedef T type;
+};
+
+//////////////////////////////////////
+//             remove_volatile
+//////////////////////////////////////
+template< class T >
+struct remove_volatile
+{
+   typedef T type;
+};
+
+template< class T >
+struct remove_volatile<volatile T>
+{
+   typedef T type;
+};
+
+//////////////////////////////////////
+//             remove_cv
+//////////////////////////////////////
+template< class T >
+struct remove_cv
+{
+    typedef typename remove_volatile
+      <typename remove_const<T>::type>::type type;
+};
+
+//////////////////////////////////////
+//          remove_extent
+//////////////////////////////////////
+template<class T>
+struct remove_extent
+{
+   typedef T type;
+};
+ 
+template<class T>
+struct remove_extent<T[]>
+{
+   typedef T type;
+};
+ 
+template<class T, std::size_t N>
+struct remove_extent<T[N]>
+{
+   typedef T type;
+};
+
+//////////////////////////////////////
+//             extent
+//////////////////////////////////////
+
+template<class T, unsigned N = 0>
+struct extent
+{
+   static const std::size_t value = 0;
+};
+ 
+template<class T>
+struct extent<T[], 0> 
+{
+   static const std::size_t value = 0;
+};
+
+template<class T, unsigned N>
+struct extent<T[], N>
+{
+   static const std::size_t value = extent<T, N-1>::value;
+};
+
+template<class T, std::size_t N>
+struct extent<T[N], 0> 
+{
+   static const std::size_t value = N;
+};
+ 
+template<class T, std::size_t I, unsigned N>
+struct extent<T[I], N>
+{
+   static const std::size_t value = extent<T, N-1>::value;
+};
+
+//////////////////////////////////////
+//      add_lvalue_reference
+//////////////////////////////////////
+template<class T>
+struct add_lvalue_reference
+{
+   typedef T& type;
+};
+
+template<class T>
+struct add_lvalue_reference<T&>
+{
+   typedef T& type;
+};
+
+template<>
+struct add_lvalue_reference<void>
+{
+   typedef void type;
+};
+
+template<>
+struct add_lvalue_reference<const void>
+{
+   typedef const void type;
+};
+
+template<>
+struct add_lvalue_reference<volatile void>
+{
+   typedef volatile void type;
+};
+
+template<>
+struct add_lvalue_reference<const volatile void>
+{
+   typedef const volatile void type;
+};
+
+template<class T>
+struct add_const_lvalue_reference
+{
+   typedef typename remove_reference<T>::type   t_unreferenced;
+   typedef const t_unreferenced                 t_unreferenced_const;
+   typedef typename add_lvalue_reference
+      <t_unreferenced_const>::type              type;
+};
+
+//////////////////////////////////////
+//             is_same
+//////////////////////////////////////
+template<class T, class U>
+struct is_same
+{
+   static const bool value = false;
+};
+ 
+template<class T>
+struct is_same<T, T>
+{
+   static const bool value = true;
+};
+
+//////////////////////////////////////
+//             is_pointer
+//////////////////////////////////////
+template< class T >
+struct is_pointer
+{
+    static const bool value = false;
+};
+
+template< class T >
+struct is_pointer<T*>
+{
+    static const bool value = true;
+};
+
+//////////////////////////////////////
+//             is_reference
+//////////////////////////////////////
+template< class T >
+struct is_reference
+{
+    static const bool value = false;
+};
+
+template< class T >
+struct is_reference<T&>
+{
+    static const bool value = true;
+};
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+template< class T >
+struct is_reference<T&&>
+{
+    static const bool value = true;
+};
+
+#endif
+
+//////////////////////////////////////
+//             is_lvalue_reference
+//////////////////////////////////////
+template<class T>
+struct is_lvalue_reference
+{
+    static const bool value = false;
+};
+
+template<class T>
+struct is_lvalue_reference<T&>
+{
+    static const bool value = true;
+};
+
+//////////////////////////////////////
+//          is_array
+//////////////////////////////////////
+template<class T>
+struct is_array
+{
+   static const bool value = false;
+};
+ 
+template<class T>
+struct is_array<T[]>
+{
+   static const bool value = true;
+};
+ 
+template<class T, std::size_t N>
+struct is_array<T[N]>
+{
+   static const bool value = true;
+};
+
+//////////////////////////////////////
+//          has_pointer_type
+//////////////////////////////////////
+template <class T>
+struct has_pointer_type
+{
+   struct two { char c[2]; };
+   template <class U> static two test(...);
+   template <class U> static char test(typename U::pointer* = 0);
+   static const bool value = sizeof(test<T>(0)) == 1;
+};
+
+//////////////////////////////////////
+//             pointer_type
+//////////////////////////////////////
+template <class T, class D, bool = has_pointer_type<D>::value>
+struct pointer_type_imp
+{
+    typedef typename D::pointer type;
+};
+
+template <class T, class D>
+struct pointer_type_imp<T, D, false>
+{
+    typedef typename remove_extent<T>::type* type;
+};
+
+template <class T, class D>
+struct pointer_type
+{
+    typedef typename pointer_type_imp
+      <typename remove_extent<T>::type, typename remove_reference<D>::type>::type type;
+};
+
+//////////////////////////////////////
+//           is_convertible
+//////////////////////////////////////
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+
+//use intrinsic since in MSVC
+//overaligned types can't go through ellipsis
+template <class T, class U>
+struct is_convertible
+{
+   static const bool value = __is_convertible_to(T, U);
+};
+
+#else
+
+template <class T, class U>
+class is_convertible
+{
+   typedef typename add_lvalue_reference<T>::type t_reference;
+   typedef char true_t;
+   class false_t { char dummy[2]; };
+   static false_t dispatch(...);
+   static true_t  dispatch(U);
+   static t_reference       trigger();
+   public:
+   static const bool value = sizeof(dispatch(trigger())) == sizeof(true_t);
+};
+
+#endif
+
+//////////////////////////////////////
+//       is_unary_function
+//////////////////////////////////////
+#if defined(BOOST_MSVC) || defined(__BORLANDC_)
+#define BOOST_MOVE_TT_DECL __cdecl
+#else
+#define BOOST_MOVE_TT_DECL
+#endif
+
+#if defined(_MSC_EXTENSIONS) && !defined(__BORLAND__) && !defined(_WIN64) && !defined(_M_ARM) && !defined(UNDER_CE)
+#define BOOST_MOVE_TT_TEST_MSC_FUNC_SIGS
+#endif
+
+template <typename T>
+struct is_unary_function_impl
+{  static const bool value = false; };
+
+// avoid duplicate definitions of is_unary_function_impl
+#ifndef BOOST_MOVE_TT_TEST_MSC_FUNC_SIGS
+
+template <typename R>
+struct is_unary_function_impl<R (*)()>
+{  static const bool value = true;  };
+
+template <typename R>
+struct is_unary_function_impl<R (*)(...)>
+{  static const bool value = true;  };
+
+#else // BOOST_MOVE_TT_TEST_MSC_FUNC_SIGS
+
+template <typename R>
+struct is_unary_function_impl<R (__stdcall*)()>
+{  static const bool value = true;  };
+
+#ifndef _MANAGED
+
+template <typename R>
+struct is_unary_function_impl<R (__fastcall*)()>
+{  static const bool value = true;  };
+
+#endif
+
+template <typename R>
+struct is_unary_function_impl<R (__cdecl*)()>
+{  static const bool value = true;  };
+
+template <typename R>
+struct is_unary_function_impl<R (__cdecl*)(...)>
+{  static const bool value = true;  };
+
+#endif
+
+// avoid duplicate definitions of is_unary_function_impl
+#ifndef BOOST_MOVE_TT_TEST_MSC_FUNC_SIGS
+
+template <typename R, class T0>
+struct is_unary_function_impl<R (*)(T0)>
+{  static const bool value = true;  };
+
+template <typename R, class T0>
+struct is_unary_function_impl<R (*)(T0...)>
+{  static const bool value = true;  };
+
+#else // BOOST_MOVE_TT_TEST_MSC_FUNC_SIGS
+
+template <typename R, class T0>
+struct is_unary_function_impl<R (__stdcall*)(T0)>
+{  static const bool value = true;  };
+
+#ifndef _MANAGED
+
+template <typename R, class T0>
+struct is_unary_function_impl<R (__fastcall*)(T0)>
+{  static const bool value = true;  };
+
+#endif
+
+template <typename R, class T0>
+struct is_unary_function_impl<R (__cdecl*)(T0)>
+{  static const bool value = true;  };
+
+template <typename R, class T0>
+struct is_unary_function_impl<R (__cdecl*)(T0...)>
+{  static const bool value = true;  };
+
+#endif
+
+template <typename T>
+struct is_unary_function_impl<T&>
+{  static const bool value = false; };
+
+template<typename T>
+struct is_unary_function
+{  static const bool value = is_unary_function_impl<T>::value;   };
+
+//////////////////////////////////////
+//       has_virtual_destructor
+//////////////////////////////////////
+#if (defined(BOOST_MSVC) && defined(BOOST_MSVC_FULL_VER) && (BOOST_MSVC_FULL_VER >=140050215))\
+         || (defined(BOOST_INTEL) && defined(_MSC_VER) && (_MSC_VER >= 1500))
+#  define BOOST_MOVEUP_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
+#elif defined(BOOST_CLANG) && defined(__has_feature)
+#  if __has_feature(has_virtual_destructor)
+#     define BOOST_MOVEUP_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
+#  endif
+#elif defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3) && !defined(__GCCXML__))) && !defined(BOOST_CLANG)
+#  define BOOST_MOVEUP_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
+#elif defined(__ghs__) && (__GHS_VERSION_NUMBER >= 600)
+#  define BOOST_MOVEUP_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
+#elif defined(__CODEGEARC__)
+#  define BOOST_MOVEUP_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
+#endif
+
+#ifdef BOOST_MOVEUP_HAS_VIRTUAL_DESTRUCTOR
+   template<class T>
+   struct has_virtual_destructor{   static const bool value = BOOST_MOVEUP_HAS_VIRTUAL_DESTRUCTOR(T);  };
+#else
+   //If no intrinsic is available you trust the programmer knows what is doing
+   template<class T>
+   struct has_virtual_destructor{   static const bool value = true;  };
+#endif
+
+//////////////////////////////////////
+//       missing_virtual_destructor
+//////////////////////////////////////
+
+template< class T, class U
+        , bool enable =  is_convertible< U*, T*>::value &&
+                        !is_array<T>::value &&
+                        !is_same<typename remove_cv<T>::type, void>::value &&
+                        !is_same<typename remove_cv<U>::type, typename remove_cv<T>::type>::value
+        >
+struct missing_virtual_destructor_default_delete
+{  static const bool value = !has_virtual_destructor<T>::value;  };
+
+template<class T, class U>
+struct missing_virtual_destructor_default_delete<T, U, false>
+{  static const bool value = false;  };
+
+template<class Deleter, class U>
+struct missing_virtual_destructor
+{  static const bool value = false;  };
+
+template<class T, class U>
+struct missing_virtual_destructor< ::pdalboost::movelib::default_delete<T>, U >
+   : missing_virtual_destructor_default_delete<T, U>
+{};
+
+}  //namespace move_upmu {
+}  //namespace pdalboost {
+
+#endif //#ifndef BOOST_MOVE_UNIQUE_PTR_DETAIL_META_UTILS_HPP
diff --git a/vendor/pdalboost/boost/move/detail/workaround.hpp b/vendor/pdalboost/boost/move/detail/workaround.hpp
new file mode 100644
index 0000000..b3f81b1
--- /dev/null
+++ b/vendor/pdalboost/boost/move/detail/workaround.hpp
@@ -0,0 +1,55 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/interprocess for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_MOVE_DETAIL_WORKAROUND_HPP
+#define BOOST_MOVE_DETAIL_WORKAROUND_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#if    !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+   #define BOOST_MOVE_PERFECT_FORWARDING
+#endif
+
+#if defined(__has_feature)
+   #define BOOST_MOVE_HAS_FEATURE __has_feature
+#else
+   #define BOOST_MOVE_HAS_FEATURE(x) 0
+#endif
+
+#if BOOST_MOVE_HAS_FEATURE(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
+   #define BOOST_MOVE_ADDRESS_SANITIZER_ON
+#endif
+
+//Macros for documentation purposes. For code, expands to the argument
+#define BOOST_MOVE_IMPDEF(TYPE) TYPE
+#define BOOST_MOVE_SEEDOC(TYPE) TYPE
+#define BOOST_MOVE_DOC0PTR(TYPE) TYPE
+#define BOOST_MOVE_DOC1ST(TYPE1, TYPE2) TYPE2
+#define BOOST_MOVE_I ,
+#define BOOST_MOVE_DOCIGN(T1) T1
+
+#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ < 5) && !defined(__clang__)
+   //Pre-standard rvalue binding rules
+   #define BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES
+#elif defined(_MSC_VER) && (_MSC_VER == 1600)
+   //Standard rvalue binding rules but with some bugs
+   #define BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG
+   #define BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG
+#elif defined(_MSC_VER) && (_MSC_VER == 1700)
+   #define BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG
+#endif
+
+#endif   //#ifndef BOOST_MOVE_DETAIL_WORKAROUND_HPP
diff --git a/vendor/pdalboost/boost/move/iterator.hpp b/vendor/pdalboost/boost/move/iterator.hpp
new file mode 100644
index 0000000..c56ab95
--- /dev/null
+++ b/vendor/pdalboost/boost/move/iterator.hpp
@@ -0,0 +1,312 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2012-2012.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! \file
+
+#ifndef BOOST_MOVE_ITERATOR_HPP
+#define BOOST_MOVE_ITERATOR_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/move/detail/config_begin.hpp>
+#include <boost/move/detail/iterator_traits.hpp>
+#include <boost/move/utility_core.hpp>
+
+namespace pdalboost {
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                            move_iterator
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! Class template move_iterator is an iterator adaptor with the same behavior
+//! as the underlying iterator except that its dereference operator implicitly
+//! converts the value returned by the underlying iterator's dereference operator
+//! to an rvalue reference. Some generic algorithms can be called with move
+//! iterators to replace copying with moving.
+template <class It>
+class move_iterator
+{
+   public:
+   typedef It                                                              iterator_type;
+   typedef typename pdalboost::movelib::iterator_traits<iterator_type>::value_type        value_type;
+   #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_MOVE_DOXYGEN_INVOKED)
+   typedef value_type &&                                                   reference;
+   #else
+   typedef typename ::pdalboost::move_detail::if_
+      < ::pdalboost::has_move_emulation_enabled<value_type>
+      , ::pdalboost::rv<value_type>&
+      , value_type & >::type                                               reference;
+   #endif
+   typedef It                                                              pointer;
+   typedef typename pdalboost::movelib::iterator_traits<iterator_type>::difference_type   difference_type;
+   typedef typename pdalboost::movelib::iterator_traits<iterator_type>::iterator_category iterator_category;
+
+   move_iterator()
+   {}
+
+   explicit move_iterator(It i)
+      :  m_it(i)
+   {}
+
+   template <class U>
+   move_iterator(const move_iterator<U>& u)
+      :  m_it(u.base())
+   {}
+
+   iterator_type base() const
+   {  return m_it;   }
+
+   reference operator*() const
+   {
+      #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES)
+      return *m_it;
+      #else
+      return ::pdalboost::move(*m_it);
+      #endif
+   }
+
+   pointer   operator->() const
+   {  return m_it;   }
+
+   move_iterator& operator++()
+   {  ++m_it; return *this;   }
+
+   move_iterator<iterator_type>  operator++(int)
+   {  move_iterator<iterator_type> tmp(*this); ++(*this); return tmp;   }
+
+   move_iterator& operator--()
+   {  --m_it; return *this;   }
+
+   move_iterator<iterator_type>  operator--(int)
+   {  move_iterator<iterator_type> tmp(*this); --(*this); return tmp;   }
+
+   move_iterator<iterator_type>  operator+ (difference_type n) const
+   {  return move_iterator<iterator_type>(m_it + n);  }
+
+   move_iterator& operator+=(difference_type n)
+   {  m_it += n; return *this;   }
+
+   move_iterator<iterator_type>  operator- (difference_type n) const
+   {  return move_iterator<iterator_type>(m_it - n);  }
+
+   move_iterator& operator-=(difference_type n)
+   {  m_it -= n; return *this;   }
+
+   reference operator[](difference_type n) const
+   {
+      #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES)
+      return m_it[n];
+      #else
+      return ::pdalboost::move(m_it[n]);
+      #endif
+   }
+
+   friend bool operator==(const move_iterator& x, const move_iterator& y)
+   {  return x.base() == y.base();  }
+
+   friend bool operator!=(const move_iterator& x, const move_iterator& y)
+   {  return x.base() != y.base();  }
+
+   friend bool operator< (const move_iterator& x, const move_iterator& y)
+   {  return x.base() < y.base();   }
+
+   friend bool operator<=(const move_iterator& x, const move_iterator& y)
+   {  return x.base() <= y.base();  }
+
+   friend bool operator> (const move_iterator& x, const move_iterator& y)
+   {  return x.base() > y.base();  }
+
+   friend bool operator>=(const move_iterator& x, const move_iterator& y)
+   {  return x.base() >= y.base();  }
+
+   friend difference_type operator-(const move_iterator& x, const move_iterator& y)
+   {  return x.base() - y.base();   }
+
+   friend move_iterator operator+(difference_type n, const move_iterator& x)
+   {  return move_iterator(x.base() + n);   }
+
+   private:
+   It m_it;
+};
+
+//is_move_iterator
+namespace move_detail {
+
+template <class I>
+struct is_move_iterator
+{
+   static const bool value = false;
+};
+
+template <class I>
+struct is_move_iterator< ::pdalboost::move_iterator<I> >
+{
+   static const bool value = true;
+};
+
+}  //namespace move_detail {
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                            move_iterator
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//!
+//! <b>Returns</b>: move_iterator<It>(i).
+template<class It>
+inline move_iterator<It> make_move_iterator(const It &it)
+{  return move_iterator<It>(it); }
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                         back_move_insert_iterator
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+//! A move insert iterator that move constructs elements at the
+//! back of a container
+template <typename C> // C models Container
+class back_move_insert_iterator
+{
+   C* container_m;
+
+   public:
+   typedef C                           container_type;
+   typedef typename C::value_type      value_type;
+   typedef typename C::reference       reference;
+   typedef typename C::pointer         pointer;
+   typedef typename C::difference_type difference_type;
+   typedef std::output_iterator_tag    iterator_category;
+
+   explicit back_move_insert_iterator(C& x) : container_m(&x) { }
+
+   back_move_insert_iterator& operator=(reference x)
+   { container_m->push_back(pdalboost::move(x)); return *this; }
+
+   back_move_insert_iterator& operator=(BOOST_RV_REF(value_type) x)
+   {  reference rx = x; return this->operator=(rx);  }
+
+   back_move_insert_iterator& operator*()     { return *this; }
+   back_move_insert_iterator& operator++()    { return *this; }
+   back_move_insert_iterator& operator++(int) { return *this; }
+};
+
+//!
+//! <b>Returns</b>: back_move_insert_iterator<C>(x).
+template <typename C> // C models Container
+inline back_move_insert_iterator<C> back_move_inserter(C& x)
+{
+   return back_move_insert_iterator<C>(x);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                         front_move_insert_iterator
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! A move insert iterator that move constructs elements int the
+//! front of a container
+template <typename C> // C models Container
+class front_move_insert_iterator
+{
+   C* container_m;
+
+public:
+   typedef C                           container_type;
+   typedef typename C::value_type      value_type;
+   typedef typename C::reference       reference;
+   typedef typename C::pointer         pointer;
+   typedef typename C::difference_type difference_type;
+   typedef std::output_iterator_tag    iterator_category;
+
+   explicit front_move_insert_iterator(C& x) : container_m(&x) { }
+
+   front_move_insert_iterator& operator=(reference x)
+   { container_m->push_front(pdalboost::move(x)); return *this; }
+
+   front_move_insert_iterator& operator=(BOOST_RV_REF(value_type) x)
+   {  reference rx = x; return this->operator=(rx);  }
+
+   front_move_insert_iterator& operator*()     { return *this; }
+   front_move_insert_iterator& operator++()    { return *this; }
+   front_move_insert_iterator& operator++(int) { return *this; }
+};
+
+//!
+//! <b>Returns</b>: front_move_insert_iterator<C>(x).
+template <typename C> // C models Container
+inline front_move_insert_iterator<C> front_move_inserter(C& x)
+{
+   return front_move_insert_iterator<C>(x);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//                         insert_move_iterator
+//
+//////////////////////////////////////////////////////////////////////////////
+template <typename C> // C models Container
+class move_insert_iterator
+{
+   C* container_m;
+   typename C::iterator pos_;
+
+   public:
+   typedef C                           container_type;
+   typedef typename C::value_type      value_type;
+   typedef typename C::reference       reference;
+   typedef typename C::pointer         pointer;
+   typedef typename C::difference_type difference_type;
+   typedef std::output_iterator_tag    iterator_category;
+
+   explicit move_insert_iterator(C& x, typename C::iterator pos)
+      : container_m(&x), pos_(pos)
+   {}
+
+   move_insert_iterator& operator=(reference x)
+   {
+      pos_ = container_m->insert(pos_, ::pdalboost::move(x));
+      ++pos_;
+      return *this;
+   }
+
+   move_insert_iterator& operator=(BOOST_RV_REF(value_type) x)
+   {  reference rx = x; return this->operator=(rx);  }
+
+   move_insert_iterator& operator*()     { return *this; }
+   move_insert_iterator& operator++()    { return *this; }
+   move_insert_iterator& operator++(int) { return *this; }
+};
+
+//!
+//! <b>Returns</b>: move_insert_iterator<C>(x, it).
+template <typename C> // C models Container
+inline move_insert_iterator<C> move_inserter(C& x, typename C::iterator it)
+{
+   return move_insert_iterator<C>(x, it);
+}
+
+}  //namespace pdalboost {
+
+#include <boost/move/detail/config_end.hpp>
+
+#endif //#ifndef BOOST_MOVE_ITERATOR_HPP
diff --git a/vendor/pdalboost/boost/move/make_unique.hpp b/vendor/pdalboost/boost/move/make_unique.hpp
new file mode 100644
index 0000000..d65792d
--- /dev/null
+++ b/vendor/pdalboost/boost/move/make_unique.hpp
@@ -0,0 +1,237 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2006-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_MOVE_MAKE_UNIQUE_HPP_INCLUDED
+#define BOOST_MOVE_MAKE_UNIQUE_HPP_INCLUDED
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/move/detail/config_begin.hpp>
+#include <boost/move/detail/workaround.hpp>
+#include <boost/move/utility_core.hpp>
+#include <boost/move/unique_ptr.hpp>
+#include <cstddef>   //for std::size_t
+#include <boost/move/detail/unique_ptr_meta_utils.hpp>
+#ifdef BOOST_NO_CXX11_VARIADIC_TEMPLATES
+#  include <boost/move/detail/fwd_macros.hpp>
+#endif
+
+//!\file
+//! Defines "make_unique" functions, which are factories to create instances
+//! of unique_ptr depending on the passed arguments.
+//!
+//! This header can be a bit heavyweight in C++03 compilers due to the use of the
+//! preprocessor library, that's why it's a a separate header from <tt>unique_ptr.hpp</tt>
+ 
+#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+namespace std {   //no namespace versioning in clang+libc++
+
+struct nothrow_t;
+
+}  //namespace std {
+
+namespace pdalboost{
+namespace move_upmu {
+
+//Compile time switch between
+//single element, unknown bound array
+//and known bound array
+template<class T>
+struct unique_ptr_if
+{
+   typedef ::pdalboost::movelib::unique_ptr<T> t_is_not_array;
+};
+
+template<class T>
+struct unique_ptr_if<T[]>
+{
+   typedef ::pdalboost::movelib::unique_ptr<T[]> t_is_array_of_unknown_bound;
+};
+
+template<class T, std::size_t N>
+struct unique_ptr_if<T[N]>
+{
+   typedef void t_is_array_of_known_bound;
+};
+
+template <int Dummy = 0>
+struct nothrow_holder
+{
+   static std::nothrow_t *pnothrow;   
+};
+
+template <int Dummy>
+std::nothrow_t *nothrow_holder<Dummy>::pnothrow;
+
+}  //namespace move_upmu {
+}  //namespace pdalboost{
+
+#endif   //!defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+namespace pdalboost{
+namespace movelib {
+
+#if defined(BOOST_MOVE_DOXYGEN_INVOKED) || !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is not an array.
+//!
+//! <b>Returns</b>: <tt>unique_ptr<T>(new T(std::forward<Args>(args)...))</tt>.
+template<class T, class... Args>
+inline BOOST_MOVE_DOC1ST(unique_ptr<T>, 
+   typename ::pdalboost::move_upmu::unique_ptr_if<T>::t_is_not_array)
+      make_unique(BOOST_FWD_REF(Args)... args)
+{  return unique_ptr<T>(new T(::pdalboost::forward<Args>(args)...));  }
+
+//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is not an array.
+//!
+//! <b>Returns</b>: <tt>unique_ptr<T>(new T(std::nothrow)(std::forward<Args>(args)...))</tt>.
+template<class T, class... Args>
+inline BOOST_MOVE_DOC1ST(unique_ptr<T>, 
+   typename ::pdalboost::move_upmu::unique_ptr_if<T>::t_is_not_array)
+      make_unique_nothrow(BOOST_FWD_REF(Args)... args)
+{  return unique_ptr<T>(new (*pdalboost::move_upmu::nothrow_holder<>::pnothrow)T(::pdalboost::forward<Args>(args)...));  }
+
+#else
+   #define BOOST_MOVE_MAKE_UNIQUE_CODE(N)\
+      template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N>\
+      typename ::pdalboost::move_upmu::unique_ptr_if<T>::t_is_not_array\
+         make_unique( BOOST_MOVE_UREF##N)\
+      {  return unique_ptr<T>( new T( BOOST_MOVE_FWD##N ) );  }\
+      \
+      template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N>\
+      typename ::pdalboost::move_upmu::unique_ptr_if<T>::t_is_not_array\
+         make_unique_nothrow( BOOST_MOVE_UREF##N)\
+      {  return unique_ptr<T>( new (*pdalboost::move_upmu::nothrow_holder<>::pnothrow)T ( BOOST_MOVE_FWD##N ) );  }\
+      //
+   BOOST_MOVE_ITERATE_0TO9(BOOST_MOVE_MAKE_UNIQUE_CODE)
+   #undef BOOST_MOVE_MAKE_UNIQUE_CODE
+
+#endif
+
+//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is not an array.
+//!
+//! <b>Returns</b>: <tt>unique_ptr<T>(new T)</tt> (default initialization)
+template<class T>
+inline BOOST_MOVE_DOC1ST(unique_ptr<T>, 
+   typename ::pdalboost::move_upmu::unique_ptr_if<T>::t_is_not_array)
+      make_unique_definit()
+{
+    return unique_ptr<T>(new T);
+}
+
+//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is not an array.
+//!
+//! <b>Returns</b>: <tt>unique_ptr<T>(new T(std::nothrow)</tt> (default initialization)
+template<class T>
+inline BOOST_MOVE_DOC1ST(unique_ptr<T>, 
+   typename ::pdalboost::move_upmu::unique_ptr_if<T>::t_is_not_array)
+      make_unique_nothrow_definit()
+{
+    return unique_ptr<T>(new (*pdalboost::move_upmu::nothrow_holder<>::pnothrow)T);
+}
+
+//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is an array of 
+//!   unknown bound.
+//!
+//! <b>Returns</b>: <tt>unique_ptr<T>(new remove_extent_t<T>[n]())</tt> (value initialization)
+template<class T>
+inline BOOST_MOVE_DOC1ST(unique_ptr<T>, 
+   typename ::pdalboost::move_upmu::unique_ptr_if<T>::t_is_array_of_unknown_bound)
+      make_unique(std::size_t n)
+{
+    typedef typename ::pdalboost::move_upmu::remove_extent<T>::type U;
+    return unique_ptr<T>(new U[n]());
+}
+
+//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is an array of 
+//!   unknown bound.
+//!
+//! <b>Returns</b>: <tt>unique_ptr<T>(new (std::nothrow)remove_extent_t<T>[n]())</tt> (value initialization)
+template<class T>
+inline BOOST_MOVE_DOC1ST(unique_ptr<T>, 
+   typename ::pdalboost::move_upmu::unique_ptr_if<T>::t_is_array_of_unknown_bound)
+      make_unique_nothrow(std::size_t n)
+{
+    typedef typename ::pdalboost::move_upmu::remove_extent<T>::type U;
+    return unique_ptr<T>(new (*pdalboost::move_upmu::nothrow_holder<>::pnothrow)U[n]());
+}
+
+//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is an array of 
+//!   unknown bound.
+//!
+//! <b>Returns</b>: <tt>unique_ptr<T>(new remove_extent_t<T>[n])</tt> (default initialization)
+template<class T>
+inline BOOST_MOVE_DOC1ST(unique_ptr<T>, 
+   typename ::pdalboost::move_upmu::unique_ptr_if<T>::t_is_array_of_unknown_bound)
+      make_unique_definit(std::size_t n)
+{
+    typedef typename ::pdalboost::move_upmu::remove_extent<T>::type U;
+    return unique_ptr<T>(new U[n]);
+}
+
+//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is an array of 
+//!   unknown bound.
+//!
+//! <b>Returns</b>: <tt>unique_ptr<T>(new (std::nothrow)remove_extent_t<T>[n])</tt> (default initialization)
+template<class T>
+inline BOOST_MOVE_DOC1ST(unique_ptr<T>, 
+   typename ::pdalboost::move_upmu::unique_ptr_if<T>::t_is_array_of_unknown_bound)
+      make_unique_nothrow_definit(std::size_t n)
+{
+    typedef typename ::pdalboost::move_upmu::remove_extent<T>::type U;
+    return unique_ptr<T>(new (*pdalboost::move_upmu::nothrow_holder<>::pnothrow) U[n]);
+}
+
+#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
+
+//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is
+//!   an array of known bound.
+template<class T, class... Args>
+inline BOOST_MOVE_DOC1ST(unspecified, 
+   typename ::pdalboost::move_upmu::unique_ptr_if<T>::t_is_array_of_known_bound)
+      make_unique(BOOST_FWD_REF(Args) ...) = delete;
+
+//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is
+//!   an array of known bound.
+template<class T, class... Args>
+inline BOOST_MOVE_DOC1ST(unspecified, 
+   typename ::pdalboost::move_upmu::unique_ptr_if<T>::t_is_array_of_known_bound)
+      make_unique_definit(BOOST_FWD_REF(Args) ...) = delete;
+
+//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is
+//!   an array of known bound.
+template<class T, class... Args>
+inline BOOST_MOVE_DOC1ST(unspecified, 
+   typename ::pdalboost::move_upmu::unique_ptr_if<T>::t_is_array_of_known_bound)
+      make_unique_nothrow(BOOST_FWD_REF(Args) ...) = delete;
+
+//! <b>Remarks</b>: This function shall not participate in overload resolution unless T is
+//!   an array of known bound.
+template<class T, class... Args>
+inline BOOST_MOVE_DOC1ST(unspecified, 
+   typename ::pdalboost::move_upmu::unique_ptr_if<T>::t_is_array_of_known_bound)
+      make_unique_nothrow_definit(BOOST_FWD_REF(Args) ...) = delete;
+
+#endif
+
+}  //namespace movelib {
+
+}  //namespace pdalboost{
+
+#include <boost/move/detail/config_end.hpp>
+
+#endif   //#ifndef BOOST_MOVE_MAKE_UNIQUE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/move/traits.hpp b/vendor/pdalboost/boost/move/traits.hpp
new file mode 100644
index 0000000..033c0b1
--- /dev/null
+++ b/vendor/pdalboost/boost/move/traits.hpp
@@ -0,0 +1,77 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2009-2012.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! \file
+
+#ifndef BOOST_MOVE_TRAITS_HPP
+#define BOOST_MOVE_TRAITS_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/move/detail/config_begin.hpp>
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+#include <boost/move/core.hpp>
+#endif
+#include <boost/move/detail/meta_utils.hpp>
+#include <boost/move/detail/type_traits.hpp>
+
+namespace pdalboost {
+
+//! If this trait yields to true
+//! (<i>has_trivial_destructor_after_move <T>::value == true</i>)
+//! means that if T is used as argument of a move construction/assignment,
+//! there is no need to call T's destructor.
+//! This optimization tipically is used to improve containers' performance.
+//!
+//! By default this trait is true if the type has trivial destructor,
+//! every class should specialize this trait if it wants to improve performance
+//! when inserted in containers.
+template <class T>
+struct has_trivial_destructor_after_move
+   : ::pdalboost::move_detail::is_trivially_destructible<T>
+{};
+
+//! By default this traits returns
+//! <pre>pdalboost::is_nothrow_move_constructible<T>::value && pdalboost::is_nothrow_move_assignable<T>::value </pre>.
+//! Classes with non-throwing move constructor
+//! and assignment can specialize this trait to obtain some performance improvements.
+template <class T>
+struct has_nothrow_move
+{
+   static const bool value = pdalboost::move_detail::is_nothrow_move_constructible<T>::value &&
+                             pdalboost::move_detail::is_nothrow_move_assignable<T>::value;
+};
+
+namespace move_detail {
+
+template <class T>
+struct is_nothrow_move_constructible_or_uncopyable
+{
+   //The standard requires is_nothrow_move_constructible for move_if_noexcept
+   //but a user (usually in C++03) might specialize has_nothrow_move which includes it
+   static const bool value = is_nothrow_move_constructible<T>::value ||
+                             has_nothrow_move<T>::value ||
+                            !is_copy_constructible<T>::value;
+};
+
+}  //move_detail {
+}  //namespace pdalboost {
+
+#include <boost/move/detail/config_end.hpp>
+
+#endif //#ifndef BOOST_MOVE_TRAITS_HPP
diff --git a/vendor/pdalboost/boost/move/unique_ptr.hpp b/vendor/pdalboost/boost/move/unique_ptr.hpp
new file mode 100644
index 0000000..2512ecd
--- /dev/null
+++ b/vendor/pdalboost/boost/move/unique_ptr.hpp
@@ -0,0 +1,871 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_MOVE_UNIQUE_PTR_HPP_INCLUDED
+#define BOOST_MOVE_UNIQUE_PTR_HPP_INCLUDED
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/move/detail/config_begin.hpp>
+#include <boost/move/detail/workaround.hpp>
+#include <boost/move/detail/unique_ptr_meta_utils.hpp>
+#include <boost/move/default_delete.hpp>
+#include <boost/move/utility_core.hpp>
+#include <boost/move/adl_move_swap.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/assert.hpp>
+
+#include <cstddef>   //For std::nullptr_t and std::size_t
+
+//!\file
+//! Describes the smart pointer unique_ptr, a drop-in replacement for std::unique_ptr,
+//! usable also from C++03 compilers.
+//!
+//! Main differences from std::unique_ptr to avoid heavy dependencies,
+//! specially in C++03 compilers:
+//!   - <tt>operator < </tt> uses pointer <tt>operator < </tt>instead of <tt>std::less<common_type></tt>. 
+//!      This avoids dependencies on <tt>std::common_type</tt> and <tt>std::less</tt>
+//!      (<tt><type_traits>/<functional></tt> headers). In C++03 this avoid pulling Boost.Typeof and other
+//!      cascading dependencies. As in all Boost platforms <tt>operator <</tt> on raw pointers and
+//!      other smart pointers provides strict weak ordering in practice this should not be a problem for users.
+//!   - assignable from literal 0 for compilers without nullptr
+//!   - <tt>unique_ptr<T[]></tt> is constructible and assignable from <tt>unique_ptr<U[]></tt> if
+//!      cv-less T and cv-less U are the same type and T is more CV qualified than U.
+
+namespace pdalboost{
+// @cond
+namespace move_upd {
+
+////////////////////////////////////////////
+//          deleter types
+////////////////////////////////////////////
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+template <class T>
+class is_noncopyable
+{
+   typedef char true_t;
+   class false_t { char dummy[2]; };
+   template<class U> static false_t dispatch(...);
+   template<class U> static true_t  dispatch(typename U::boost_move_no_copy_constructor_or_assign*);
+   public:
+   static const bool value = sizeof(dispatch<T>(0)) == sizeof(true_t);
+};
+#endif   //defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
+template <class D>
+struct deleter_types
+{
+   typedef typename bmupmu::add_lvalue_reference<D>::type            del_ref;
+   typedef typename bmupmu::add_const_lvalue_reference<D>::type      del_cref;
+   #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+   typedef typename bmupmu::if_c
+      < bmupmu::is_lvalue_reference<D>::value, D, del_cref >::type   deleter_arg_type1;
+   typedef typename bmupmu::remove_reference<D>::type &&             deleter_arg_type2;
+   #else
+   typedef typename bmupmu::if_c
+      < is_noncopyable<D>::value, bmupmu::nat, del_cref>::type       non_ref_deleter_arg1;
+   typedef typename bmupmu::if_c< bmupmu::is_lvalue_reference<D>::value
+                       , D, non_ref_deleter_arg1 >::type          deleter_arg_type1;
+   typedef ::pdalboost::rv<D> &                                       deleter_arg_type2;
+   #endif
+};
+
+////////////////////////////////////////////
+//          unique_ptr_data
+////////////////////////////////////////////
+template <class P, class D, bool = bmupmu::is_unary_function<D>::value || bmupmu::is_reference<D>::value >
+struct unique_ptr_data
+{
+   typedef typename deleter_types<D>::deleter_arg_type1  deleter_arg_type1;
+   typedef typename deleter_types<D>::del_ref            del_ref;
+   typedef typename deleter_types<D>::del_cref           del_cref;
+
+   unique_ptr_data() BOOST_NOEXCEPT
+      : m_p(), d()
+   {}
+
+   explicit unique_ptr_data(P p) BOOST_NOEXCEPT
+      : m_p(p), d()
+   {}
+
+   unique_ptr_data(P p, deleter_arg_type1 d1) BOOST_NOEXCEPT
+      : m_p(p), d(d1)
+   {}
+
+   template <class U>
+   unique_ptr_data(P p, BOOST_FWD_REF(U) d1) BOOST_NOEXCEPT
+      : m_p(p), d(::pdalboost::forward<U>(d1))
+   {}
+
+   del_ref deleter()       { return d; }
+   del_cref deleter() const{ return d; }
+
+   P m_p;
+   D d;
+
+   private:
+   unique_ptr_data& operator=(const unique_ptr_data&);
+   unique_ptr_data(const unique_ptr_data&);
+};
+
+template <class P, class D>
+struct unique_ptr_data<P, D, false>
+   : private D
+{
+   typedef typename deleter_types<D>::deleter_arg_type1  deleter_arg_type1;
+   typedef typename deleter_types<D>::del_ref            del_ref;
+   typedef typename deleter_types<D>::del_cref           del_cref;
+
+   unique_ptr_data() BOOST_NOEXCEPT
+      : D(), m_p()
+   {}
+
+   explicit unique_ptr_data(P p) BOOST_NOEXCEPT
+      : D(), m_p(p)
+   {}
+
+   unique_ptr_data(P p, deleter_arg_type1 d1) BOOST_NOEXCEPT
+      : D(d1), m_p(p)
+   {}
+
+   template <class U>
+   unique_ptr_data(P p, BOOST_FWD_REF(U) d) BOOST_NOEXCEPT
+      : D(::pdalboost::forward<U>(d)), m_p(p)
+   {}
+
+   del_ref deleter()        BOOST_NOEXCEPT   {  return static_cast<del_ref>(*this);   }
+   del_cref deleter() const BOOST_NOEXCEPT   {  return static_cast<del_cref>(*this);  }
+
+   P m_p;
+
+   private:
+   unique_ptr_data& operator=(const unique_ptr_data&);
+   unique_ptr_data(const unique_ptr_data&);
+};
+
+////////////////////////////////////////////
+//          is_unique_ptr_convertible
+////////////////////////////////////////////
+
+//Although non-standard, we avoid using pointer_traits
+//to avoid heavy dependencies
+template <typename T>
+struct get_element_type
+{
+   struct DefaultWrap { typedef bmupmu::natify<T> element_type; };
+   template <typename X>   static char test(int, typename X::element_type*);
+   template <typename X>   static int test(...);
+   static const bool value = (1 == sizeof(test<T>(0, 0)));
+   typedef typename bmupmu::if_c<value, T, DefaultWrap>::type::element_type type;
+};
+
+template<class T>
+struct get_element_type<T*>
+{
+   typedef T type;
+};
+
+template<class T>
+struct get_cvelement
+   : bmupmu::remove_cv<typename get_element_type<T>::type>
+{};
+
+template <class P1, class P2>
+struct is_same_cvelement_and_convertible
+{
+   typedef typename bmupmu::remove_reference<P1>::type arg1;
+   typedef typename bmupmu::remove_reference<P2>::type arg2;
+   static const bool same_cvless =
+      bmupmu::is_same<typename get_cvelement<arg1>::type,typename get_cvelement<arg2>::type>::value;
+   static const bool value = same_cvless && bmupmu::is_convertible<arg1, arg2>::value;
+};
+
+template<bool IsArray, class FromPointer, class ThisPointer>
+struct is_unique_ptr_convertible
+   : is_same_cvelement_and_convertible<FromPointer, ThisPointer>
+{};
+
+template<class FromPointer, class ThisPointer>
+struct is_unique_ptr_convertible<false, FromPointer, ThisPointer>
+   : bmupmu::is_convertible<FromPointer, ThisPointer>
+{};
+
+////////////////////////////////////////
+////     enable_up_moveconv_assign
+////////////////////////////////////////
+
+template<class T, class FromPointer, class ThisPointer, class Type = bmupmu::nat>
+struct enable_up_ptr
+   : bmupmu::enable_if_c< is_unique_ptr_convertible
+      < bmupmu::is_array<T>::value, FromPointer, ThisPointer>::value, Type>
+{};
+
+////////////////////////////////////////
+////     enable_up_moveconv_assign
+////////////////////////////////////////
+
+template<class T, class D, class U, class E>
+struct unique_moveconvert_assignable
+{
+   static const bool t_is_array = bmupmu::is_array<T>::value;
+   static const bool value =
+      t_is_array == bmupmu::is_array<U>::value &&
+      bmupmu::extent<T>::value == bmupmu::extent<U>::value &&
+      is_unique_ptr_convertible
+         < t_is_array
+         , typename bmupmu::pointer_type<U, E>::type, typename bmupmu::pointer_type<T, D>::type
+         >::value;
+};
+
+template<class T, class D, class U, class E, std::size_t N>
+struct unique_moveconvert_assignable<T[], D, U[N], E>
+   : unique_moveconvert_assignable<T[], D, U[], E>
+{};
+
+template<class T, class D, class U, class E, class Type = bmupmu::nat>
+struct enable_up_moveconv_assign
+   : bmupmu::enable_if_c<unique_moveconvert_assignable<T, D, U, E>::value, Type>
+{};
+
+////////////////////////////////////////
+////     enable_up_moveconv_constr
+////////////////////////////////////////
+
+template<class D, class E, bool IsReference = bmupmu::is_reference<D>::value>
+struct unique_deleter_is_initializable
+   : bmupmu::is_same<D, E>
+{};
+
+template <class T, class U>
+class is_rvalue_convertible
+{
+   #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+   typedef typename bmupmu::remove_reference<T>::type&& t_from;
+   #else
+   typedef typename bmupmu::if_c
+      < ::pdalboost::has_move_emulation_enabled<T>::value && !bmupmu::is_reference<T>::value
+      , ::pdalboost::rv<T>&
+      , typename bmupmu::add_lvalue_reference<T>::type
+      >::type t_from;
+   #endif
+
+   typedef char true_t;
+   class false_t { char dummy[2]; };
+   static false_t dispatch(...);
+   static true_t  dispatch(U);
+   static t_from trigger();
+   public:
+   static const bool value = sizeof(dispatch(trigger())) == sizeof(true_t);
+};
+
+template<class D, class E>
+struct unique_deleter_is_initializable<D, E, false>
+{
+   #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+   //Clang has some problems with is_rvalue_convertible with non-copyable types
+   //so use intrinsic if available
+   #if defined(BOOST_CLANG)
+      #if __has_feature(is_convertible_to)
+      static const bool value = __is_convertible_to(E, D);
+      #else
+      static const bool value = is_rvalue_convertible<E, D>::value;
+      #endif
+   #else
+   static const bool value = is_rvalue_convertible<E, D>::value;
+   #endif
+
+   #else //!defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+   //No hope for compilers with move emulation for now. In several compilers is_convertible
+   // leads to errors, so just move the Deleter and see if the conversion works
+   static const bool value = true;  /*is_rvalue_convertible<E, D>::value*/
+   #endif
+};
+
+template<class T, class D, class U, class E, class Type = bmupmu::nat>
+struct enable_up_moveconv_constr
+   : bmupmu::enable_if_c
+      < unique_moveconvert_assignable<T, D, U, E>::value && unique_deleter_is_initializable<D, E>::value
+      , Type>
+{};
+
+}  //namespace move_upd {
+// @endcond
+
+namespace movelib {
+
+//! A unique pointer is an object that owns another object and
+//! manages that other object through a pointer.
+//! 
+//! More precisely, a unique pointer is an object u that stores a pointer to a second object p and will dispose
+//! of p when u is itself destroyed (e.g., when leaving block scope). In this context, u is said to own p.
+//! 
+//! The mechanism by which u disposes of p is known as p's associated deleter, a function object whose correct
+//! invocation results in p's appropriate disposition (typically its deletion).
+//! 
+//! Let the notation u.p denote the pointer stored by u, and let u.d denote the associated deleter. Upon request,
+//! u can reset (replace) u.p and u.d with another pointer and deleter, but must properly dispose of its owned
+//! object via the associated deleter before such replacement is considered completed.
+//! 
+//! Additionally, u can, upon request, transfer ownership to another unique pointer u2. Upon completion of
+//! such a transfer, the following postconditions hold:
+//!   - u2.p is equal to the pre-transfer u.p,
+//!   - u.p is equal to nullptr, and
+//!   - if the pre-transfer u.d maintained state, such state has been transferred to u2.d.
+//! 
+//! As in the case of a reset, u2 must properly dispose of its pre-transfer owned object via the pre-transfer
+//! associated deleter before the ownership transfer is considered complete.
+//! 
+//! Each object of a type U instantiated from the unique_ptr template specified in this subclause has the strict
+//! ownership semantics, specified above, of a unique pointer. In partial satisfaction of these semantics, each
+//! such U is MoveConstructible and MoveAssignable, but is not CopyConstructible nor CopyAssignable.
+//! The template parameter T of unique_ptr may be an incomplete type.
+//! 
+//! The uses of unique_ptr include providing exception safety for dynamically allocated memory, passing
+//! ownership of dynamically allocated memory to a function, and returning dynamically allocated memory from
+//! a function.
+//!
+//! If T is an array type (e.g. unique_ptr<MyType[]>) the interface is slightly altered:
+//!   - Pointers to types derived from T are rejected by the constructors, and by reset.
+//!   - The observers <tt>operator*</tt> and <tt>operator-></tt> are not provided.
+//!   - The indexing observer <tt>operator[]</tt> is provided.
+//!
+//! \tparam T Provides the type of the stored pointer.
+//! \tparam D The deleter type:
+//!   -  The default type for the template parameter D is default_delete. A client-supplied template argument
+//!      D shall be a function object type, lvalue-reference to function, or lvalue-reference to function object type
+//!      for which, given a value d of type D and a value ptr of type unique_ptr<T, D>::pointer, the expression
+//!      d(ptr) is valid and has the effect of disposing of the pointer as appropriate for that deleter.
+//!   -  If the deleter's type D is not a reference type, D shall satisfy the requirements of Destructible.
+//!   -  If the type <tt>remove_reference<D>::type::pointer</tt> exists, it shall satisfy the requirements of NullablePointer.
+template <class T, class D = default_delete<T> >
+class unique_ptr
+{
+   #if defined(BOOST_MOVE_DOXYGEN_INVOKED)
+   public:
+   unique_ptr(const unique_ptr&) = delete;
+   unique_ptr& operator=(const unique_ptr&) = delete;
+   private:
+   #else
+   BOOST_MOVABLE_BUT_NOT_COPYABLE(unique_ptr)
+
+   typedef bmupmu::pointer_type<T, D >                            pointer_type_obtainer;
+   typedef bmupd::unique_ptr_data
+      <typename pointer_type_obtainer::type, D>                data_type;
+   typedef typename bmupd::deleter_types<D>::deleter_arg_type1 deleter_arg_type1;
+   typedef typename bmupd::deleter_types<D>::deleter_arg_type2 deleter_arg_type2;
+   data_type m_data;
+   #endif
+
+   public:
+   //! If the type <tt>remove_reference<D>::type::pointer</tt> exists, then it shall be a
+   //! synonym for <tt>remove_reference<D>::type::pointer</tt>. Otherwise it shall be a
+   //! synonym for T*.
+   typedef typename BOOST_MOVE_SEEDOC(pointer_type_obtainer::type) pointer;
+   //! If T is an array type, then element_type is equal to T. Otherwise, if T is a type
+   //! in the form U[], element_type is equal to U.
+   typedef typename BOOST_MOVE_SEEDOC(bmupmu::remove_extent<T>::type) element_type;
+   typedef D deleter_type;
+
+   //! <b>Requires</b>: D shall satisfy the requirements of DefaultConstructible, and
+   //!   that construction shall not throw an exception.
+   //!
+   //! <b>Effects</b>: Constructs a unique_ptr object that owns nothing, value-initializing the
+   //!   stored pointer and the stored deleter.
+   //!
+   //! <b>Postconditions</b>: <tt>get() == nullptr</tt>. <tt>get_deleter()</tt> returns a reference to the stored deleter.
+   //!
+   //! <b>Remarks</b>: If this constructor is instantiated with a pointer type or reference type
+   //!   for the template argument D, the program is ill-formed.   
+   BOOST_CONSTEXPR unique_ptr() BOOST_NOEXCEPT
+      : m_data()
+   {
+      //If this constructor is instantiated with a pointer type or reference type
+      //for the template argument D, the program is ill-formed.
+      BOOST_STATIC_ASSERT(!bmupmu::is_pointer<D>::value);
+      BOOST_STATIC_ASSERT(!bmupmu::is_reference<D>::value);
+   }
+
+   //! <b>Effects</b>: Same as <tt>unique_ptr()</tt> (default constructor).
+   //! 
+   BOOST_CONSTEXPR unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT
+      : m_data()
+   {
+      //If this constructor is instantiated with a pointer type or reference type
+      //for the template argument D, the program is ill-formed.
+      BOOST_STATIC_ASSERT(!bmupmu::is_pointer<D>::value);
+      BOOST_STATIC_ASSERT(!bmupmu::is_reference<D>::value);
+   }
+
+   //! <b>Requires</b>: D shall satisfy the requirements of DefaultConstructible, and
+   //!   that construction shall not throw an exception.
+   //!
+   //! <b>Effects</b>: Constructs a unique_ptr which owns p, initializing the stored pointer 
+   //!   with p and value initializing the stored deleter.
+   //!
+   //! <b>Postconditions</b>: <tt>get() == p</tt>. <tt>get_deleter()</tt> returns a reference to the stored deleter.
+   //!
+   //! <b>Remarks</b>: If this constructor is instantiated with a pointer type or reference type
+   //!   for the template argument D, the program is ill-formed.
+   //!   This constructor shall not participate in overload resolution unless:
+   //!      - If T is not an array type and Pointer is implicitly convertible to pointer.
+   //!      - If T is an array type and Pointer is a more CV qualified pointer to element_type.
+   template<class Pointer>
+   explicit unique_ptr(Pointer p
+      BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_ptr<T BOOST_MOVE_I Pointer BOOST_MOVE_I pointer>::type* =0)
+                 ) BOOST_NOEXCEPT
+      : m_data(p)
+   {
+      //If T is not an array type, element_type_t<Pointer> derives from T
+      //it uses the default deleter and T has no virtual destructor, then you have a problem
+      BOOST_STATIC_ASSERT(( !::pdalboost::move_upmu::missing_virtual_destructor
+                            <D, typename bmupd::get_element_type<Pointer>::type>::value ));
+      //If this constructor is instantiated with a pointer type or reference type
+      //for the template argument D, the program is ill-formed.
+      BOOST_STATIC_ASSERT(!bmupmu::is_pointer<D>::value);
+      BOOST_STATIC_ASSERT(!bmupmu::is_reference<D>::value);
+   }
+
+   //!The signature of this constructor depends upon whether D is a reference type.
+   //!   - If D is non-reference type A, then the signature is <tt>unique_ptr(pointer p, const A& d)</tt>.
+   //!   - If D is an lvalue-reference type A&, then the signature is <tt>unique_ptr(pointer p, A& d)</tt>.
+   //!   - If D is an lvalue-reference type const A&, then the signature is <tt>unique_ptr(pointer p, const A& d)</tt>.
+   //!
+   //!
+   //! <b>Requires</b>: Either
+   //!   - D is not an lvalue-reference type and d is an lvalue or const rvalue. 
+   //!         D shall satisfy the requirements of CopyConstructible, and the copy constructor of D
+   //!         shall not throw an exception. This unique_ptr will hold a copy of d.
+   //!   - D is an lvalue-reference type and d is an lvalue. the type which D references need not be CopyConstructible nor
+   //!      MoveConstructible. This unique_ptr will hold a D which refers to the lvalue d.
+   //!
+   //! <b>Effects</b>: Constructs a unique_ptr object which owns p, initializing the stored pointer with p and
+   //!   initializing the deleter as described above.
+   //! 
+   //! <b>Postconditions</b>: <tt>get() == p</tt>. <tt>get_deleter()</tt> returns a reference to the stored deleter. If D is a
+   //!   reference type then <tt>get_deleter()</tt> returns a reference to the lvalue d.
+   //!
+   //! <b>Remarks</b>: This constructor shall not participate in overload resolution unless:
+   //!      - If T is not an array type and Pointer is implicitly convertible to pointer.
+   //!      - If T is an array type and Pointer is a more CV qualified pointer to element_type.
+   template<class Pointer>
+   unique_ptr(Pointer p, BOOST_MOVE_SEEDOC(deleter_arg_type1) d1
+      BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_ptr<T BOOST_MOVE_I Pointer BOOST_MOVE_I pointer>::type* =0)
+              ) BOOST_NOEXCEPT
+      : m_data(p, d1)
+   {
+      //If T is not an array type, element_type_t<Pointer> derives from T
+      //it uses the default deleter and T has no virtual destructor, then you have a problem
+      BOOST_STATIC_ASSERT(( !::pdalboost::move_upmu::missing_virtual_destructor
+                            <D, typename bmupd::get_element_type<Pointer>::type>::value ));
+   }
+
+   //! <b>Effects</b>: Same effects as <tt>template<class Pointer> unique_ptr(Pointer p, deleter_arg_type1 d1)</tt>
+   //!   and additionally <tt>get() == nullptr</tt>
+   unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), BOOST_MOVE_SEEDOC(deleter_arg_type1) d1) BOOST_NOEXCEPT
+      : m_data(pointer(), d1)
+   {}
+
+   //! The signature of this constructor depends upon whether D is a reference type.
+   //!   - If D is non-reference type A, then the signature is <tt>unique_ptr(pointer p, A&& d)</tt>.
+   //!   - If D is an lvalue-reference type A&, then the signature is <tt>unique_ptr(pointer p, A&& d)</tt>.
+   //!   - If D is an lvalue-reference type const A&, then the signature is <tt>unique_ptr(pointer p, const A&& d)</tt>.
+   //!
+   //! <b>Requires</b>: Either
+   //!   - D is not an lvalue-reference type and d is a non-const rvalue. D
+   //!      shall satisfy the requirements of MoveConstructible, and the move constructor
+   //!      of D shall not throw an exception. This unique_ptr will hold a value move constructed from d.
+   //!   - D is an lvalue-reference type and d is an rvalue, the program is ill-formed.
+   //!
+   //! <b>Effects</b>: Constructs a unique_ptr object which owns p, initializing the stored pointer with p and
+   //!   initializing the deleter as described above.
+   //! 
+   //! <b>Postconditions</b>: <tt>get() == p</tt>. <tt>get_deleter()</tt> returns a reference to the stored deleter. If D is a
+   //!   reference type then <tt>get_deleter()</tt> returns a reference to the lvalue d.
+   //!
+   //! <b>Remarks</b>: This constructor shall not participate in overload resolution unless:
+   //!      - If T is not an array type and Pointer is implicitly convertible to pointer.
+   //!      - If T is an array type and Pointer is a more CV qualified pointer to element_type.
+   template<class Pointer>
+   unique_ptr(Pointer p, BOOST_MOVE_SEEDOC(deleter_arg_type2) d2
+      BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_ptr<T BOOST_MOVE_I Pointer BOOST_MOVE_I pointer>::type* =0)
+             ) BOOST_NOEXCEPT
+      : m_data(p, ::pdalboost::move(d2))
+   {
+      //If T is not an array type, element_type_t<Pointer> derives from T
+      //it uses the default deleter and T has no virtual destructor, then you have a problem
+      BOOST_STATIC_ASSERT(( !::pdalboost::move_upmu::missing_virtual_destructor
+                            <D, typename bmupd::get_element_type<Pointer>::type>::value ));
+   }
+
+   //! <b>Effects</b>: Same effects as <tt>template<class Pointer> unique_ptr(Pointer p, deleter_arg_type2 d2)</tt>
+   //!   and additionally <tt>get() == nullptr</tt>
+   unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), BOOST_MOVE_SEEDOC(deleter_arg_type2) d2) BOOST_NOEXCEPT
+      : m_data(pointer(), ::pdalboost::move(d2))
+   {}
+
+   //! <b>Requires</b>: If D is not a reference type, D shall satisfy the requirements of MoveConstructible.
+   //! Construction of the deleter from an rvalue of type D shall not throw an exception.
+   //! 
+   //! <b>Effects</b>: Constructs a unique_ptr by transferring ownership from u to *this. If D is a reference type,
+   //! this deleter is copy constructed from u's deleter; otherwise, this deleter is move constructed from u's
+   //! deleter.
+   //! 
+   //! <b>Postconditions</b>: <tt>get()</tt> yields the value u.get() yielded before the construction. <tt>get_deleter()</tt>
+   //! returns a reference to the stored deleter that was constructed from u.get_deleter(). If D is a
+   //! reference type then <tt>get_deleter()</tt> and <tt>u.get_deleter()</tt> both reference the same lvalue deleter.
+   unique_ptr(BOOST_RV_REF(unique_ptr) u) BOOST_NOEXCEPT
+      : m_data(u.release(), ::pdalboost::move_if_not_lvalue_reference<D>(u.get_deleter()))
+   {}
+
+   //! <b>Requires</b>: If E is not a reference type, construction of the deleter from an rvalue of type E shall be
+   //!   well formed and shall not throw an exception. Otherwise, E is a reference type and construction of the
+   //!   deleter from an lvalue of type E shall be well formed and shall not throw an exception.
+   //!
+   //! <b>Remarks</b>: This constructor shall not participate in overload resolution unless:
+   //!   - <tt>unique_ptr<U, E>::pointer</tt> is implicitly convertible to pointer,
+   //!   - U is not an array type, and
+   //!   - either D is a reference type and E is the same type as D, or D is not a reference type and E is
+   //!      implicitly convertible to D.
+   //!
+   //! <b>Effects</b>: Constructs a unique_ptr by transferring ownership from u to *this. If E is a reference type,
+   //!   this deleter is copy constructed from u's deleter; otherwise, this deleter is move constructed from u's deleter.
+   //!
+   //! <b>Postconditions</b>: <tt>get()</tt> yields the value <tt>u.get()</tt> yielded before the construction. <tt>get_deleter()</tt>
+   //!   returns a reference to the stored deleter that was constructed from <tt>u.get_deleter()</tt>.
+   template <class U, class E>
+   unique_ptr( BOOST_RV_REF_BEG_IF_CXX11 unique_ptr<U, E> BOOST_RV_REF_END_IF_CXX11 u
+      BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_moveconv_constr<T BOOST_MOVE_I D BOOST_MOVE_I U BOOST_MOVE_I E>::type* =0)
+      ) BOOST_NOEXCEPT
+      : m_data(u.release(), ::pdalboost::move_if_not_lvalue_reference<E>(u.get_deleter()))
+   {
+      //If T is not an array type, U derives from T
+      //it uses the default deleter and T has no virtual destructor, then you have a problem
+      BOOST_STATIC_ASSERT(( !::pdalboost::move_upmu::missing_virtual_destructor
+                            <D, typename unique_ptr<U, E>::pointer>::value ));
+   }
+
+   //! <b>Requires</b>: The expression <tt>get_deleter()(get())</tt> shall be well formed, shall have well-defined behavior,
+   //!   and shall not throw exceptions.
+   //!
+   //! <b>Effects</b>: If <tt>get() == nullpt1r</tt> there are no effects. Otherwise <tt>get_deleter()(get())</tt>.
+   //!
+   //! <b>Note</b>: The use of default_delete requires T to be a complete type
+   ~unique_ptr()
+   {  if(m_data.m_p) m_data.deleter()(m_data.m_p);   }
+
+   //! <b>Requires</b>: If D is not a reference type, D shall satisfy the requirements of MoveAssignable
+   //!   and assignment of the deleter from an rvalue of type D shall not throw an exception. Otherwise, D
+   //!   is a reference type; <tt>remove_reference<D>::type</tt> shall satisfy the CopyAssignable requirements and
+   //!   assignment of the deleter from an lvalue of type D shall not throw an exception.
+   //!
+   //! <b>Effects</b>: Transfers ownership from u to *this as if by calling <tt>reset(u.release())</tt> followed
+   //!   by <tt>get_deleter() = std::forward<D>(u.get_deleter())</tt>.
+   //!
+   //! <b>Returns</b>: *this.
+   unique_ptr& operator=(BOOST_RV_REF(unique_ptr) u) BOOST_NOEXCEPT
+   {
+      this->reset(u.release());
+      m_data.deleter() = ::pdalboost::move_if_not_lvalue_reference<D>(u.get_deleter());
+      return *this;
+   }
+
+   //! <b>Requires</b>: If E is not a reference type, assignment of the deleter from an rvalue of type E shall be
+   //!   well-formed and shall not throw an exception. Otherwise, E is a reference type and assignment of the
+   //!   deleter from an lvalue of type E shall be well-formed and shall not throw an exception.
+   //!
+   //! <b>Remarks</b>: This operator shall not participate in overload resolution unless:
+   //!   - <tt>unique_ptr<U, E>::pointer</tt> is implicitly convertible to pointer and
+   //!   - U is not an array type.
+   //!
+   //! <b>Effects</b>: Transfers ownership from u to *this as if by calling <tt>reset(u.release())</tt> followed by
+   //!   <tt>get_deleter() = std::forward<E>(u.get_deleter())</tt>.
+   //!
+   //! <b>Returns</b>: *this.
+   template <class U, class E>
+   BOOST_MOVE_DOC1ST(unique_ptr&, typename bmupd::enable_up_moveconv_assign
+         <T BOOST_MOVE_I D BOOST_MOVE_I U BOOST_MOVE_I E BOOST_MOVE_I unique_ptr &>::type)
+      operator=(BOOST_RV_REF_BEG unique_ptr<U, E> BOOST_RV_REF_END u) BOOST_NOEXCEPT
+   {
+      this->reset(u.release());
+      m_data.deleter() = ::pdalboost::move_if_not_lvalue_reference<E>(u.get_deleter());
+      return *this;
+   }
+
+   //! <b>Effects</b>: <tt>reset()</tt>.
+   //!
+   //! <b>Postcondition</b>: <tt>get() == nullptr</tt>
+   //!
+   //! <b>Returns</b>: *this.
+   unique_ptr& operator=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT
+   {  this->reset(); return *this;  }
+
+   //! <b>Requires</b>: <tt>get() != nullptr</tt>.
+   //!
+   //! <b>Returns</b>: <tt>*get()</tt>.
+   //!
+   //! <b>Remarks</b: If T is an array type, the program is ill-formed.
+   BOOST_MOVE_DOC1ST(element_type&, typename bmupmu::add_lvalue_reference<element_type>::type)
+      operator*() const BOOST_NOEXCEPT
+   {
+      BOOST_STATIC_ASSERT((!bmupmu::is_array<T>::value));
+      return *m_data.m_p;
+   }
+
+   //! <b>Requires</b>: i < the number of elements in the array to which the stored pointer points.
+   //!
+   //! <b>Returns</b>: <tt>get()[i]</tt>.
+   //!
+   //! <b>Remarks</b: If T is not an array type, the program is ill-formed.
+   BOOST_MOVE_DOC1ST(element_type&, typename bmupmu::add_lvalue_reference<element_type>::type)
+      operator[](std::size_t i) const BOOST_NOEXCEPT
+   {
+      BOOST_ASSERT( bmupmu::extent<T>::value == 0 || i < bmupmu::extent<T>::value );
+      BOOST_ASSERT(m_data.m_p);
+      return m_data.m_p[i];
+   }
+
+   //! <b>Requires</b>: <tt>get() != nullptr</tt>.
+   //!
+   //! <b>Returns</b>: <tt>get()</tt>.
+   //!
+   //! <b>Note</b>: use typically requires that T be a complete type.
+   //!
+   //! <b>Remarks</b: If T is an array type, the program is ill-formed.
+   pointer operator->() const BOOST_NOEXCEPT
+   {
+      BOOST_STATIC_ASSERT((!bmupmu::is_array<T>::value));
+      BOOST_ASSERT(m_data.m_p);
+      return m_data.m_p;
+   }
+
+   //! <b>Returns</b>: The stored pointer.
+   //!
+   pointer get() const BOOST_NOEXCEPT
+   {  return m_data.m_p;  }
+
+   //! <b>Returns</b>: A reference to the stored deleter.
+   //!
+   BOOST_MOVE_DOC1ST(D&, typename bmupmu::add_lvalue_reference<D>::type)
+      get_deleter() BOOST_NOEXCEPT
+   {  return m_data.deleter();  }   
+
+   //! <b>Returns</b>: A reference to the stored deleter.
+   //!
+   BOOST_MOVE_DOC1ST(const D&, typename bmupmu::add_const_lvalue_reference<D>::type)
+      get_deleter() const BOOST_NOEXCEPT
+   {  return m_data.deleter();  }
+
+   #ifdef BOOST_MOVE_DOXYGEN_INVOKED
+   //! <b>Returns</b>: Returns: get() != nullptr.
+   //!
+   explicit operator bool
+   #else
+   operator bmupd::explicit_bool_arg
+   #endif
+      ()const BOOST_NOEXCEPT
+   {
+      return m_data.m_p
+         ? &bmupd::bool_conversion::for_bool
+         : bmupd::explicit_bool_arg(0);
+   }
+
+   //! <b>Postcondition</b>: <tt>get() == nullptr</tt>.
+   //!
+   //! <b>Returns</b>: The value <tt>get()</tt> had at the start of the call to release.   
+   pointer release() BOOST_NOEXCEPT
+   {
+      const pointer tmp = m_data.m_p;
+      m_data.m_p = pointer();
+      return tmp;
+   }
+
+   //! <b>Requires</b>: The expression <tt>get_deleter()(get())</tt> shall be well formed, shall have well-defined behavior,
+   //!   and shall not throw exceptions.
+   //!
+   //! <b>Effects</b>: assigns p to the stored pointer, and then if the old value of the stored pointer, old_p, was not
+   //!   equal to nullptr, calls <tt>get_deleter()(old_p)</tt>. Note: The order of these operations is significant
+   //!   because the call to <tt>get_deleter()</tt> may destroy *this.
+   //!
+   //! <b>Postconditions</b>: <tt>get() == p</tt>. Note: The postcondition does not hold if the call to <tt>get_deleter()</tt>
+   //!   destroys *this since <tt>this->get()</tt> is no longer a valid expression.
+   //!
+   //! <b>Remarks</b>: This constructor shall not participate in overload resolution unless:
+   //!      - If T is not an array type and Pointer is implicitly convertible to pointer.
+   //!      - If T is an array type and Pointer is a more CV qualified pointer to element_type.
+   template<class Pointer>
+   BOOST_MOVE_DOC1ST(void, typename bmupd::enable_up_ptr<T BOOST_MOVE_I Pointer BOOST_MOVE_I pointer BOOST_MOVE_I void>::type)
+      reset(Pointer p) BOOST_NOEXCEPT
+   {
+      //If T is not an array type, element_type_t<Pointer> derives from T
+      //it uses the default deleter and T has no virtual destructor, then you have a problem
+      BOOST_STATIC_ASSERT(( !::pdalboost::move_upmu::missing_virtual_destructor
+                            <D, typename bmupd::get_element_type<Pointer>::type>::value ));
+      pointer tmp = m_data.m_p;
+      m_data.m_p = p;
+      if(tmp) m_data.deleter()(tmp);
+   }
+
+   //! <b>Requires</b>: The expression <tt>get_deleter()(get())</tt> shall be well formed, shall have well-defined behavior,
+   //!   and shall not throw exceptions.
+   //!
+   //! <b>Effects</b>: assigns nullptr to the stored pointer, and then if the old value of the stored pointer, old_p, was not
+   //!   equal to nullptr, calls <tt>get_deleter()(old_p)</tt>. Note: The order of these operations is significant
+   //!   because the call to <tt>get_deleter()</tt> may destroy *this.
+   //!
+   //! <b>Postconditions</b>: <tt>get() == p</tt>. Note: The postcondition does not hold if the call to <tt>get_deleter()</tt>
+   //!   destroys *this since <tt>this->get()</tt> is no longer a valid expression.
+   void reset() BOOST_NOEXCEPT
+   {  this->reset(pointer());  }
+
+   //! <b>Effects</b>: Same as <tt>reset()</tt>
+   //! 
+   void reset(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT
+   {  this->reset(); }
+
+   //! <b>Requires</b>: <tt>get_deleter()</tt> shall be swappable and shall not throw an exception under swap.
+   //!
+   //! <b>Effects</b>: Invokes swap on the stored pointers and on the stored deleters of *this and u.
+   void swap(unique_ptr& u) BOOST_NOEXCEPT
+   {
+      ::pdalboost::adl_move_swap(m_data.m_p, u.m_data.m_p);
+      ::pdalboost::adl_move_swap(m_data.deleter(), u.m_data.deleter());
+   }
+};
+
+//! <b>Effects</b>: Calls <tt>x.swap(y)</tt>.
+//!
+template <class T, class D>
+inline void swap(unique_ptr<T, D> &x, unique_ptr<T, D> &y) BOOST_NOEXCEPT
+{  x.swap(y); }
+
+//! <b>Returns</b>: <tt>x.get() == y.get()</tt>.
+//!
+template <class T1, class D1, class T2, class D2>
+inline bool operator==(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y)
+{  return x.get() == y.get(); }
+
+//! <b>Returns</b>: <tt>x.get() != y.get()</tt>.
+//!
+template <class T1, class D1, class T2, class D2>
+inline bool operator!=(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y)
+{  return x.get() != y.get(); }
+
+//! <b>Returns</b>: x.get() < y.get().
+//!
+//! <b>Remarks</b>: This comparison shall induce a
+//!   strict weak ordering betwen pointers.
+template <class T1, class D1, class T2, class D2>
+inline bool operator<(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y)
+{  return x.get() < y.get();  }
+
+//! <b>Returns</b>: !(y < x).
+//!
+template <class T1, class D1, class T2, class D2>
+inline bool operator<=(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y)
+{  return !(y < x);  }
+
+//! <b>Returns</b>: y < x.
+//!
+template <class T1, class D1, class T2, class D2>
+inline bool operator>(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y)
+{  return y < x;  }
+
+//! <b>Returns</b>:!(x < y).
+//!
+template <class T1, class D1, class T2, class D2>
+inline bool operator>=(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y)
+{  return !(x < y);  }
+
+//! <b>Returns</b>:!x.
+//!
+template <class T, class D>
+inline bool operator==(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT
+{  return !x;  }
+
+//! <b>Returns</b>:!x.
+//!
+template <class T, class D>
+inline bool operator==(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) BOOST_NOEXCEPT
+{  return !x;  }
+
+//! <b>Returns</b>: (bool)x.
+//!
+template <class T, class D>
+inline bool operator!=(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT
+{  return !!x;  }
+
+//! <b>Returns</b>: (bool)x.
+//!
+template <class T, class D>
+inline bool operator!=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) BOOST_NOEXCEPT
+{  return !!x;  }
+
+//! <b>Requires</b>: <tt>operator </tt> shall induce a strict weak ordering on unique_ptr<T, D>::pointer values.
+//!
+//! <b>Returns</b>: Returns <tt>x.get() < pointer()</tt>.
+template <class T, class D>
+inline bool operator<(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type))
+{  return x.get() < typename unique_ptr<T, D>::pointer();  }
+
+//! <b>Requires</b>: <tt>operator </tt> shall induce a strict weak ordering on unique_ptr<T, D>::pointer values.
+//!
+//! <b>Returns</b>: Returns <tt>pointer() < x.get()</tt>.
+template <class T, class D>
+inline bool operator<(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x)
+{  return typename unique_ptr<T, D>::pointer() < x.get();  }
+
+//! <b>Returns</b>: <tt>nullptr < x</tt>.
+//!
+template <class T, class D>
+inline bool operator>(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type))
+{  return x.get() > typename unique_ptr<T, D>::pointer();  }
+
+//! <b>Returns</b>: <tt>x < nullptr</tt>.
+//!
+template <class T, class D>
+inline bool operator>(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x)
+{  return typename unique_ptr<T, D>::pointer() > x.get();  }
+
+//! <b>Returns</b>: <tt>!(nullptr < x)</tt>.
+//!
+template <class T, class D>
+inline bool operator<=(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type))
+{  return !(bmupd::nullptr_type() < x);  }
+
+//! <b>Returns</b>: <tt>!(x < nullptr)</tt>.
+//!
+template <class T, class D>
+inline bool operator<=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x)
+{  return !(x < bmupd::nullptr_type());  }
+
+//! <b>Returns</b>: <tt>!(x < nullptr)</tt>.
+//!
+template <class T, class D>
+inline bool operator>=(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type))
+{  return !(x < bmupd::nullptr_type());  }
+
+//! <b>Returns</b>: <tt>!(nullptr < x)</tt>.
+//!
+template <class T, class D>
+inline bool operator>=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x)
+{  return !(bmupd::nullptr_type() < x);  }
+
+}  //namespace movelib {
+}  //namespace pdalboost{
+
+#include <boost/move/detail/config_end.hpp>
+
+#endif   //#ifndef BOOST_MOVE_UNIQUE_PTR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/move/utility.hpp b/vendor/pdalboost/boost/move/utility.hpp
new file mode 100644
index 0000000..fc27f67
--- /dev/null
+++ b/vendor/pdalboost/boost/move/utility.hpp
@@ -0,0 +1,149 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2012-2012.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! \file
+//! This header includes core utilities from <tt><boost/move/utility_core.hpp></tt> and defines
+//! some more advanced utilities such as:
+
+#ifndef BOOST_MOVE_MOVE_UTILITY_HPP
+#define BOOST_MOVE_MOVE_UTILITY_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/move/detail/config_begin.hpp>
+#include <boost/move/utility_core.hpp>
+#include <boost/move/traits.hpp>
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+   namespace pdalboost {
+
+   //////////////////////////////////////////////////////////////////////////////
+   //
+   //                            move_if_noexcept()
+   //
+   //////////////////////////////////////////////////////////////////////////////
+
+   template <class T>
+   inline typename ::pdalboost::move_detail::enable_if_c
+      < enable_move_utility_emulation<T>::value && !has_move_emulation_enabled<T>::value
+      , typename ::pdalboost::move_detail::add_const<T>::type &
+      >::type
+         move_if_noexcept(T& x) BOOST_NOEXCEPT
+   {
+      return x;
+   }
+
+   template <class T>
+   inline typename ::pdalboost::move_detail::enable_if_c
+      < enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value
+            && ::pdalboost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value, rv<T>&>::type
+         move_if_noexcept(T& x) BOOST_NOEXCEPT
+   {
+      return *static_cast<rv<T>* >(::pdalboost::move_detail::addressof(x));
+   }
+
+   template <class T>
+   inline typename ::pdalboost::move_detail::enable_if_c
+      < enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value
+            && ::pdalboost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value
+      , rv<T>&
+      >::type
+         move_if_noexcept(rv<T>& x) BOOST_NOEXCEPT
+   {
+      return x;
+   }
+
+   template <class T>
+   inline typename ::pdalboost::move_detail::enable_if_c
+      < enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value
+            && !::pdalboost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value
+      , typename ::pdalboost::move_detail::add_const<T>::type &
+      >::type
+         move_if_noexcept(T& x) BOOST_NOEXCEPT
+   {
+      return x;
+   }
+
+   template <class T>
+   inline typename ::pdalboost::move_detail::enable_if_c
+      < enable_move_utility_emulation<T>::value && has_move_emulation_enabled<T>::value
+            && !::pdalboost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value
+      , typename ::pdalboost::move_detail::add_const<T>::type &
+      >::type
+         move_if_noexcept(rv<T>& x) BOOST_NOEXCEPT
+   {
+      return x;
+   }
+
+   }  //namespace pdalboost
+
+#else    //#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+   #if defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE)
+      #include <utility>
+
+      namespace pdalboost{
+
+      using ::std::move_if_noexcept;
+
+      }  //namespace pdalboost
+
+   #else //!BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+
+      namespace pdalboost {
+
+      //////////////////////////////////////////////////////////////////////////////
+      //
+      //                            move_if_noexcept()
+      //
+      //////////////////////////////////////////////////////////////////////////////
+      #if defined(BOOST_MOVE_DOXYGEN_INVOKED)
+         //! This function provides a way to convert a reference into a rvalue reference
+         //! in compilers with rvalue references. For other compilers converts T & into
+         //! <i>::pdalboost::rv<T> &</i> so that move emulation is activated. Reference
+         //! would be converted to rvalue reference only if input type is nothrow move
+         //! constructible or if it has no copy constructor. In all other cases const
+         //! reference would be returned
+         template <class T>
+         rvalue_reference_or_const_lvalue_reference move_if_noexcept(input_reference) noexcept;
+
+      #else //BOOST_MOVE_DOXYGEN_INVOKED
+
+         template <class T>
+         typename ::pdalboost::move_detail::enable_if_c
+            < ::pdalboost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value, T&&>::type
+               move_if_noexcept(T& x) BOOST_NOEXCEPT
+         {  return ::pdalboost::move(x);   }
+
+         template <class T>
+         typename ::pdalboost::move_detail::enable_if_c
+            < !::pdalboost::move_detail::is_nothrow_move_constructible_or_uncopyable<T>::value, const T&>::type
+               move_if_noexcept(T& x) BOOST_NOEXCEPT
+         {  return x;  }
+
+      #endif //BOOST_MOVE_DOXYGEN_INVOKED
+
+      }  //namespace pdalboost {
+
+   #endif   //#if defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE)
+
+#endif   //BOOST_NO_CXX11_RVALUE_REFERENCES
+
+#include <boost/move/detail/config_end.hpp>
+
+#endif //#ifndef BOOST_MOVE_MOVE_UTILITY_HPP
diff --git a/vendor/pdalboost/boost/move/utility_core.hpp b/vendor/pdalboost/boost/move/utility_core.hpp
new file mode 100644
index 0000000..0be9cb3
--- /dev/null
+++ b/vendor/pdalboost/boost/move/utility_core.hpp
@@ -0,0 +1,317 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2012-2012.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/move for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+//! \file
+//! This header defines core utilities to ease the development
+//! of move-aware functions. This header minimizes dependencies
+//! from other libraries.
+
+#ifndef BOOST_MOVE_MOVE_UTILITY_CORE_HPP
+#define BOOST_MOVE_MOVE_UTILITY_CORE_HPP
+
+#ifndef BOOST_CONFIG_HPP
+#  include <boost/config.hpp>
+#endif
+#
+#if defined(BOOST_HAS_PRAGMA_ONCE)
+#  pragma once
+#endif
+
+#include <boost/move/detail/config_begin.hpp>
+#include <boost/move/core.hpp>
+#include <boost/move/detail/meta_utils.hpp>
+#include <boost/static_assert.hpp>
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+   namespace pdalboost {
+
+   template<class T>
+   struct enable_move_utility_emulation
+   {
+      static const bool value = true;
+   };
+    
+   //////////////////////////////////////////////////////////////////////////////
+   //
+   //                            move()
+   //
+   //////////////////////////////////////////////////////////////////////////////
+
+   template <class T>
+   inline typename ::pdalboost::move_detail::enable_if_and
+      < T &
+      , enable_move_utility_emulation<T>
+      , has_move_emulation_disabled<T>
+      >::type
+         move(T& x) BOOST_NOEXCEPT
+   {
+      return x;
+   }
+
+   template <class T>
+   inline typename ::pdalboost::move_detail::enable_if_and
+      < rv<T>&
+      , enable_move_utility_emulation<T>
+      , has_move_emulation_enabled<T>
+      >::type
+         move(T& x) BOOST_NOEXCEPT
+   {
+      return *BOOST_MOVE_TO_RV_CAST(::pdalboost::rv<T>*, ::pdalboost::move_detail::addressof(x) );
+   }
+
+   template <class T>
+   inline typename ::pdalboost::move_detail::enable_if_and
+      < rv<T>&
+      , enable_move_utility_emulation<T>
+      , has_move_emulation_enabled<T>
+      >::type
+         move(rv<T>& x) BOOST_NOEXCEPT
+   {
+      return x;
+   }
+
+   //////////////////////////////////////////////////////////////////////////////
+   //
+   //                            forward()
+   //
+   //////////////////////////////////////////////////////////////////////////////
+
+   template <class T>
+   inline typename ::pdalboost::move_detail::enable_if_and
+      < T &
+      , enable_move_utility_emulation<T>
+      , ::pdalboost::move_detail::is_rv<T>
+      >::type
+         forward(const typename ::pdalboost::move_detail::identity<T>::type &x) BOOST_NOEXCEPT
+   {
+      return const_cast<T&>(x);
+   }
+
+   template <class T>
+   inline typename ::pdalboost::move_detail::enable_if_and
+      < const T &
+      , enable_move_utility_emulation<T>
+      , ::pdalboost::move_detail::is_not_rv<T>
+      >::type
+         forward(const typename ::pdalboost::move_detail::identity<T>::type &x) BOOST_NOEXCEPT
+   {
+      return x;
+   }
+
+   //////////////////////////////////////////////////////////////////////////////
+   //
+   //                        move_if_not_lvalue_reference()
+   //
+   //////////////////////////////////////////////////////////////////////////////
+
+   template <class T>
+   inline typename ::pdalboost::move_detail::enable_if_and
+      < T &
+      , enable_move_utility_emulation<T>
+      , ::pdalboost::move_detail::is_rv<T>
+      >::type
+         move_if_not_lvalue_reference(const typename ::pdalboost::move_detail::identity<T>::type &x) BOOST_NOEXCEPT
+   {
+      return const_cast<T&>(x);
+   }
+
+   template <class T>
+   inline typename ::pdalboost::move_detail::enable_if_and
+      < typename ::pdalboost::move_detail::add_lvalue_reference<T>::type
+      , enable_move_utility_emulation<T>
+      , ::pdalboost::move_detail::is_not_rv<T>
+      , ::pdalboost::move_detail::or_
+         < ::pdalboost::move_detail::is_lvalue_reference<T>
+         , has_move_emulation_disabled<T>
+         >
+      >::type
+         move_if_not_lvalue_reference(typename ::pdalboost::move_detail::remove_reference<T>::type &x) BOOST_NOEXCEPT
+   {
+      return x;
+   }
+
+   template <class T>
+   inline typename ::pdalboost::move_detail::enable_if_and
+      < rv<T>&
+      , enable_move_utility_emulation<T>
+      , ::pdalboost::move_detail::is_not_rv<T>
+      , ::pdalboost::move_detail::and_
+         < ::pdalboost::move_detail::not_< ::pdalboost::move_detail::is_lvalue_reference<T> >
+         , has_move_emulation_enabled<T>
+         >
+      >::type
+         move_if_not_lvalue_reference(typename ::pdalboost::move_detail::remove_reference<T>::type &x) BOOST_NOEXCEPT
+   {
+      return move(x);
+   }
+
+   }  //namespace pdalboost
+
+#else    //#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+   #if defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE)
+      #include <utility>
+
+      namespace pdalboost{
+
+      using ::std::move;
+      using ::std::forward;
+
+      }  //namespace pdalboost
+
+   #else //!BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE
+
+      namespace pdalboost {
+
+      //! This trait's internal boolean `value` is false in compilers with rvalue references
+      //! and true in compilers without rvalue references.
+      //!
+      //! A user can specialize this trait for a type T to false to SFINAE out `move` and `forward`
+      //! so that the user can define a different move emulation for that type in namespace pdalboost
+      //! (e.g. another Boost library for its types) and avoid any overload ambiguity.
+      template<class T>
+      struct enable_move_utility_emulation
+      {
+         static const bool value = false;
+      };
+
+      //////////////////////////////////////////////////////////////////////////////
+      //
+      //                                  move
+      //
+      //////////////////////////////////////////////////////////////////////////////
+
+      #if defined(BOOST_MOVE_DOXYGEN_INVOKED)
+         //! This function provides a way to convert a reference into a rvalue reference
+         //! in compilers with rvalue references. For other compilers if `T` is Boost.Move
+         //! enabled type then it converts `T&` into <tt>::pdalboost::rv<T> &</tt> so that
+         //! move emulation is activated, else it returns `T &`.
+         template <class T>
+         rvalue_reference move(input_reference) noexcept;
+
+      #elif defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES)
+
+         //Old move approach, lvalues could bind to rvalue references
+         template <class T>
+         inline typename ::pdalboost::move_detail::remove_reference<T>::type && move(T&& t) BOOST_NOEXCEPT
+         {  return t;   }
+
+      #else //BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES
+
+         template <class T>
+         inline typename ::pdalboost::move_detail::remove_reference<T>::type && move(T&& t) BOOST_NOEXCEPT
+         { return static_cast<typename ::pdalboost::move_detail::remove_reference<T>::type &&>(t); }
+
+      #endif   //BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES
+
+      //////////////////////////////////////////////////////////////////////////////
+      //
+      //                                  forward
+      //
+      //////////////////////////////////////////////////////////////////////////////
+
+
+      #if defined(BOOST_MOVE_DOXYGEN_INVOKED)
+         //! This function provides limited form of forwarding that is usually enough for
+         //! in-place construction and avoids the exponential overloading for
+         //! achieve the limited forwarding in C++03.
+         //!
+         //! For compilers with rvalue references this function provides perfect forwarding.
+         //!
+         //! Otherwise:
+         //! * If input_reference binds to const ::pdalboost::rv<T> & then it output_reference is
+         //!   ::pdalboost::rv<T> &
+         //!
+         //! * Else, output_reference is equal to input_reference.
+         template <class T> output_reference forward(input_reference) noexcept;
+      #elif defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES)
+
+         //Old move approach, lvalues could bind to rvalue references
+
+         template <class T>
+         inline T&& forward(typename ::pdalboost::move_detail::identity<T>::type&& t) BOOST_NOEXCEPT
+         {  return t;   }
+
+      #else //Old move
+
+         template <class T>
+         inline T&& forward(typename ::pdalboost::move_detail::remove_reference<T>::type& t) BOOST_NOEXCEPT
+         {  return static_cast<T&&>(t);   }
+
+         template <class T>
+         inline T&& forward(typename ::pdalboost::move_detail::remove_reference<T>::type&& t) BOOST_NOEXCEPT
+         {
+            //"pdalboost::forward<T> error: 'T' is a lvalue reference, can't forward as rvalue.";
+            BOOST_STATIC_ASSERT(!pdalboost::move_detail::is_lvalue_reference<T>::value);
+            return static_cast<T&&>(t);
+         }
+
+      #endif   //BOOST_MOVE_DOXYGEN_INVOKED
+
+      //////////////////////////////////////////////////////////////////////////////
+      //
+      //                         move_if_not_lvalue_reference
+      //
+      //////////////////////////////////////////////////////////////////////////////
+
+
+      #if defined(BOOST_MOVE_DOXYGEN_INVOKED)
+         //! <b>Effects</b>: Calls `pdalboost::move` if `input_reference` is not a lvalue reference.
+         //!   Otherwise returns the reference
+         template <class T> output_reference move_if_not_lvalue_reference(input_reference) noexcept;
+      #elif defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES)
+
+         //Old move approach, lvalues could bind to rvalue references
+
+         template <class T>
+         inline T&& move_if_not_lvalue_reference(typename ::pdalboost::move_detail::identity<T>::type&& t) BOOST_NOEXCEPT
+         {  return t;   }
+
+      #else //Old move
+
+         template <class T>
+         inline T&& move_if_not_lvalue_reference(typename ::pdalboost::move_detail::remove_reference<T>::type& t) BOOST_NOEXCEPT
+         {  return static_cast<T&&>(t);   }
+
+         template <class T>
+         inline T&& move_if_not_lvalue_reference(typename ::pdalboost::move_detail::remove_reference<T>::type&& t) BOOST_NOEXCEPT
+         {
+            //"pdalboost::forward<T> error: 'T' is a lvalue reference, can't forward as rvalue.";
+            BOOST_STATIC_ASSERT(!pdalboost::move_detail::is_lvalue_reference<T>::value);
+            return static_cast<T&&>(t);
+         }
+
+      #endif   //BOOST_MOVE_DOXYGEN_INVOKED
+
+      }  //namespace pdalboost {
+
+   #endif   //#if defined(BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE)
+
+#endif   //BOOST_NO_CXX11_RVALUE_REFERENCES
+
+#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+namespace pdalboost{
+namespace move_detail{
+
+template <typename T>
+typename pdalboost::move_detail::add_rvalue_reference<T>::type declval();
+
+}  //namespace move_detail{
+}  //namespace pdalboost{
+
+#endif   //#if !defined(BOOST_MOVE_DOXYGEN_INVOKED)
+
+
+#include <boost/move/detail/config_end.hpp>
+
+#endif //#ifndef BOOST_MOVE_MOVE_UTILITY_CORE_HPP
diff --git a/vendor/pdalboost/boost/mpl/O1_size.hpp b/vendor/pdalboost/boost/mpl/O1_size.hpp
new file mode 100644
index 0000000..92a0b52
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/O1_size.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_O1_SIZE_HPP_INCLUDED
+#define BOOST_MPL_O1_SIZE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/O1_size_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/O1_size_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// returns sequence size if it's an O(1) operation; otherwise returns -1
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    >
+struct O1_size
+    : O1_size_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, O1_size, (Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, O1_size)
+
+}}
+
+#endif // BOOST_MPL_O1_SIZE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/O1_size_fwd.hpp b/vendor/pdalboost/boost/mpl/O1_size_fwd.hpp
new file mode 100644
index 0000000..249789e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/O1_size_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_O1_SIZE_FWD_HPP_INCLUDED
+#define BOOST_MPL_O1_SIZE_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct O1_size_impl;
+template< typename Sequence > struct O1_size;
+
+}}
+
+#endif // BOOST_MPL_O1_SIZE_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/advance.hpp b/vendor/pdalboost/boost/mpl/advance.hpp
new file mode 100644
index 0000000..8c038b0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/advance.hpp
@@ -0,0 +1,76 @@
+
+#ifndef BOOST_MPL_ADVANCE_HPP_INCLUDED
+#define BOOST_MPL_ADVANCE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/advance_fwd.hpp>
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/negate.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/tag.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/aux_/advance_forward.hpp>
+#include <boost/mpl/aux_/advance_backward.hpp>
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// default implementation for forward/bidirectional iterators
+template< typename Tag >
+struct advance_impl
+{
+    template< typename Iterator, typename N > struct apply
+    {
+        typedef typename less< N,long_<0> >::type backward_;
+        typedef typename if_< backward_, negate<N>, N >::type offset_;
+
+        typedef typename if_<
+              backward_
+            , aux::advance_backward< BOOST_MPL_AUX_VALUE_WKND(offset_)::value >
+            , aux::advance_forward< BOOST_MPL_AUX_VALUE_WKND(offset_)::value >
+            >::type f_;
+
+        typedef typename apply_wrap1<f_,Iterator>::type type;
+    };
+};
+
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Iterator)
+    , typename BOOST_MPL_AUX_NA_PARAM(N)
+    >
+struct advance
+    : advance_impl< typename tag<Iterator>::type >
+        ::template apply<Iterator,N>
+{
+};
+
+template<
+      typename Iterator
+    , BOOST_MPL_AUX_NTTP_DECL(long, N)
+    >
+struct advance_c
+    : advance_impl< typename tag<Iterator>::type >
+        ::template apply<Iterator,long_<N> >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, advance)
+
+}}
+
+#endif // BOOST_MPL_ADVANCE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/advance_fwd.hpp b/vendor/pdalboost/boost/mpl/advance_fwd.hpp
new file mode 100644
index 0000000..a84f1a4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/advance_fwd.hpp
@@ -0,0 +1,28 @@
+
+#ifndef BOOST_MPL_ADVANCE_FWD_HPP_INCLUDED
+#define BOOST_MPL_ADVANCE_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/common_name_wknd.hpp>
+
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_COMMON_NAME_WKND(advance)
+
+template< typename Tag > struct advance_impl;
+template< typename Iterator, typename N > struct advance;
+
+}}
+
+#endif // BOOST_MPL_ADVANCE_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/always.hpp b/vendor/pdalboost/boost/mpl/always.hpp
new file mode 100644
index 0000000..c5e860e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/always.hpp
@@ -0,0 +1,38 @@
+
+#ifndef BOOST_MPL_ALWAYS_HPP_INCLUDED
+#define BOOST_MPL_ALWAYS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/preprocessor/default_params.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/arity_spec.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template< typename Value > struct always
+{
+    template<
+        BOOST_MPL_PP_DEFAULT_PARAMS(BOOST_MPL_LIMIT_METAFUNCTION_ARITY, typename T, na)
+        >
+    struct apply
+    {
+        typedef Value type;
+    };
+};
+
+BOOST_MPL_AUX_ARITY_SPEC(0, always)
+
+}}
+
+#endif // BOOST_MPL_ALWAYS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/and.hpp b/vendor/pdalboost/boost/mpl/and.hpp
new file mode 100644
index 0000000..454aaf2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/and.hpp
@@ -0,0 +1,60 @@
+
+#ifndef BOOST_MPL_AND_HPP_INCLUDED
+#define BOOST_MPL_AND_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   include <boost/mpl/bool.hpp>
+#   include <boost/mpl/aux_/nested_type_wknd.hpp>
+#   include <boost/mpl/aux_/na_spec.hpp>
+#   include <boost/mpl/aux_/lambda_support.hpp>
+
+// agurt, 19/may/04: workaround a conflict with <iso646.h> header's 
+// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(and)'
+// has to be checked in a separate condition, otherwise GCC complains 
+// about 'and' being an alternative token
+#if defined(_MSC_VER) && !defined(__clang__)
+#ifndef __GCCXML__
+#if defined(and) 
+#   pragma push_macro("and")
+#   undef and
+#   define and(x)
+#endif
+#endif
+#endif
+
+#   define BOOST_MPL_PREPROCESSED_HEADER and.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#if defined(_MSC_VER) && !defined(__clang__)
+#ifndef __GCCXML__
+#if defined(and) 
+#   pragma pop_macro("and")
+#endif
+#endif
+#endif
+
+#else
+
+#   define AUX778076_OP_NAME and_
+#   define AUX778076_OP_VALUE1 false
+#   define AUX778076_OP_VALUE2 true
+#   include <boost/mpl/aux_/logical_op.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AND_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/apply.hpp b/vendor/pdalboost/boost/mpl/apply.hpp
new file mode 100644
index 0000000..a5cfdee
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/apply.hpp
@@ -0,0 +1,229 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_APPLY_HPP_INCLUDED
+#define BOOST_MPL_APPLY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/apply_fwd.hpp>
+#   include <boost/mpl/apply_wrap.hpp>
+#   include <boost/mpl/placeholders.hpp>
+#   include <boost/mpl/lambda.hpp>
+#   include <boost/mpl/aux_/na.hpp>
+#   include <boost/mpl/aux_/lambda_support.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER apply.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/limits/arity.hpp>
+#   include <boost/mpl/aux_/preprocessor/params.hpp>
+#   include <boost/mpl/aux_/preprocessor/default_params.hpp>
+#   include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>
+#   include <boost/mpl/aux_/preprocessor/enum.hpp>
+#   include <boost/mpl/aux_/config/lambda.hpp>
+#   include <boost/mpl/aux_/config/dtp.hpp>
+#   include <boost/mpl/aux_/nttp_decl.hpp>
+#   include <boost/mpl/aux_/config/eti.hpp>
+#   include <boost/mpl/aux_/config/msvc.hpp>
+#   include <boost/mpl/aux_/config/workaround.hpp>
+
+#   include <boost/preprocessor/comma_if.hpp>
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// local macros, #undef-ined at the end of the header
+#   define AUX778076_APPLY_PARAMS(param) \
+    BOOST_MPL_PP_PARAMS( \
+          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+        , param \
+        ) \
+    /**/
+
+#   define AUX778076_APPLY_DEF_PARAMS(param, value) \
+    BOOST_MPL_PP_DEFAULT_PARAMS( \
+          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+        , param \
+        , value \
+        ) \
+    /**/
+
+#   define AUX778076_APPLY_N_PARAMS(n, param) \
+    BOOST_MPL_PP_PARAMS(n, param) \
+    /**/
+
+#   define AUX778076_APPLY_N_COMMA_PARAMS(n, param) \
+    BOOST_PP_COMMA_IF(n) \
+    BOOST_MPL_PP_PARAMS(n, param) \
+    /**/
+
+#   define AUX778076_APPLY_N_PARTIAL_SPEC_PARAMS(n, param, def) \
+    BOOST_PP_COMMA_IF(n) \
+    BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(n, param, def) \
+    /**/
+    
+#   define AUX778076_APPLY_N_SPEC_PARAMS(n, param) \
+    BOOST_MPL_PP_ENUM(BOOST_PP_INC(n), param) \
+    /**/
+
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/apply.hpp>))
+#include BOOST_PP_ITERATE()
+
+#   if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)
+// real C++ version is already taken care of
+#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+namespace aux {
+// apply_count_args
+#define AUX778076_COUNT_ARGS_PREFIX apply
+#define AUX778076_COUNT_ARGS_DEFAULT na
+#define AUX778076_COUNT_ARGS_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+#include <boost/mpl/aux_/count_args.hpp>
+}
+
+
+template<
+      typename F, AUX778076_APPLY_DEF_PARAMS(typename T, na)
+    >
+struct apply
+    : aux::apply_chooser< 
+          aux::apply_count_args< AUX778076_APPLY_PARAMS(T) >::value
+        >::template result_< F, AUX778076_APPLY_PARAMS(T) >::type
+{
+};
+
+#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#   endif // BOOST_MPL_CFG_NO_APPLY_TEMPLATE
+
+#   undef AUX778076_APPLY_N_SPEC_PARAMS
+#   undef AUX778076_APPLY_N_PARTIAL_SPEC_PARAMS
+#   undef AUX778076_APPLY_N_COMMA_PARAMS
+#   undef AUX778076_APPLY_N_PARAMS
+#   undef AUX778076_APPLY_DEF_PARAMS
+#   undef AUX778076_APPLY_PARAMS
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_APPLY_HPP_INCLUDED
+
+///// iteration, depth == 1
+
+// For gcc 4.4 compatability, we must include the
+// BOOST_PP_ITERATION_DEPTH test inside an #else clause.
+#else // BOOST_PP_IS_ITERATING
+#if BOOST_PP_ITERATION_DEPTH() == 1
+
+#   define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<
+      typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)
+    >
+struct BOOST_PP_CAT(apply,i_)
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    : BOOST_PP_CAT(apply_wrap,i_)< 
+          typename lambda<F>::type
+        AUX778076_APPLY_N_COMMA_PARAMS(i_, T)
+        >
+{
+#else
+{
+    typedef typename BOOST_PP_CAT(apply_wrap,i_)< 
+          typename lambda<F>::type
+        AUX778076_APPLY_N_COMMA_PARAMS(i_, T)
+        >::type type;
+#endif
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          BOOST_PP_INC(i_)
+        , BOOST_PP_CAT(apply,i_)
+        , (F AUX778076_APPLY_N_COMMA_PARAMS(i_,T))
+        )
+};
+
+
+#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+/// workaround for ETI bug
+template<>
+struct BOOST_PP_CAT(apply,i_)<AUX778076_APPLY_N_SPEC_PARAMS(i_, int)>
+{
+    typedef int type;
+};
+#endif
+
+#   if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)
+#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+#if i_ == BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+/// primary template (not a specialization!)
+template<
+      typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)
+    >
+struct apply
+    : BOOST_PP_CAT(apply,i_)< F AUX778076_APPLY_N_COMMA_PARAMS(i_, T) >
+{
+};
+#else
+template<
+      typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)
+    >
+struct apply< F AUX778076_APPLY_N_PARTIAL_SPEC_PARAMS(i_, T, na) >
+    : BOOST_PP_CAT(apply,i_)< F AUX778076_APPLY_N_COMMA_PARAMS(i_, T) >
+{
+};
+#endif
+
+#   else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)
+namespace aux {
+
+template<>
+struct apply_chooser<i_>
+{
+    template<
+          typename F, AUX778076_APPLY_PARAMS(typename T)
+        >
+    struct result_
+    {
+        typedef BOOST_PP_CAT(apply,i_)<
+              F AUX778076_APPLY_N_COMMA_PARAMS(i_, T)
+            > type;
+    };
+};
+
+} // namespace aux
+#endif
+
+#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#   endif // BOOST_MPL_CFG_NO_APPLY_TEMPLATE
+
+#   undef i_
+
+#endif // BOOST_PP_ITERATION_DEPTH()
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/apply_fwd.hpp b/vendor/pdalboost/boost/mpl/apply_fwd.hpp
new file mode 100644
index 0000000..20d753a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/apply_fwd.hpp
@@ -0,0 +1,107 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_APPLY_FWD_HPP_INCLUDED
+#define BOOST_MPL_APPLY_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/aux_/na.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER apply_fwd.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/limits/arity.hpp>
+#   include <boost/mpl/aux_/preprocessor/params.hpp>
+#   include <boost/mpl/aux_/preprocessor/default_params.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/mpl/aux_/nttp_decl.hpp>
+
+#   include <boost/preprocessor/comma_if.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+// agurt, 15/jan/02: top-level 'apply' template gives an ICE on MSVC
+// (for known reasons)
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+#   define BOOST_MPL_CFG_NO_APPLY_TEMPLATE
+#endif
+
+namespace pdalboost { namespace mpl {
+
+// local macro, #undef-ined at the end of the header
+#   define AUX778076_APPLY_DEF_PARAMS(param, value) \
+    BOOST_MPL_PP_DEFAULT_PARAMS( \
+          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+        , param \
+        , value \
+        ) \
+    /**/
+
+#   define AUX778076_APPLY_N_COMMA_PARAMS(n, param) \
+    BOOST_PP_COMMA_IF(n) \
+    BOOST_MPL_PP_PARAMS(n, param) \
+    /**/
+
+#   if !defined(BOOST_MPL_CFG_NO_APPLY_TEMPLATE)
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+// forward declaration
+template<
+      typename F, AUX778076_APPLY_DEF_PARAMS(typename T, na)
+    >
+struct apply;
+#else
+namespace aux {
+template< BOOST_AUX_NTTP_DECL(int, arity_) > struct apply_chooser;
+}
+#endif
+
+#   endif // BOOST_MPL_CFG_NO_APPLY_TEMPLATE
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/apply_fwd.hpp>))
+#include BOOST_PP_ITERATE()
+
+
+#   undef AUX778076_APPLY_N_COMMA_PARAMS
+#   undef AUX778076_APPLY_DEF_PARAMS
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_APPLY_FWD_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<
+      typename F AUX778076_APPLY_N_COMMA_PARAMS(i_, typename T)
+    >
+struct BOOST_PP_CAT(apply,i_);
+
+#undef i_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/apply_wrap.hpp b/vendor/pdalboost/boost/mpl/apply_wrap.hpp
new file mode 100644
index 0000000..02ff7c5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/apply_wrap.hpp
@@ -0,0 +1,234 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_APPLY_WRAP_HPP_INCLUDED
+#define BOOST_MPL_APPLY_WRAP_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/aux_/arity.hpp>
+#   include <boost/mpl/aux_/has_apply.hpp>
+#   include <boost/mpl/aux_/na.hpp>
+#   include <boost/mpl/aux_/msvc_never_true.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER apply_wrap.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/limits/arity.hpp>
+#   include <boost/mpl/aux_/preprocessor/params.hpp>
+#   include <boost/mpl/aux_/preprocessor/enum.hpp>
+#   include <boost/mpl/aux_/preprocessor/add.hpp>
+#   include <boost/mpl/aux_/config/bcc.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/mpl/aux_/config/dtp.hpp>
+#   include <boost/mpl/aux_/config/eti.hpp>
+#   include <boost/mpl/aux_/config/msvc.hpp>
+#   include <boost/mpl/aux_/config/workaround.hpp>
+
+#   include <boost/preprocessor/comma_if.hpp>
+#   include <boost/preprocessor/logical/and.hpp>
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+
+
+namespace pdalboost { namespace mpl {
+
+// local macros, #undef-ined at the end of the header
+#   define AUX778076_APPLY_WRAP_PARAMS(n, param) \
+    BOOST_MPL_PP_PARAMS(n, param) \
+    /**/
+
+#   define AUX778076_APPLY_WRAP_SPEC_PARAMS(n, param) \
+    BOOST_MPL_PP_ENUM(BOOST_PP_INC(n), param) \
+    /**/
+
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/apply_wrap.hpp>))
+#include BOOST_PP_ITERATE()
+
+
+#   undef AUX778076_APPLY_WRAP_SPEC_PARAMS
+#   undef AUX778076_APPLY_WRAP_PARAMS
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_APPLY_WRAP_HPP_INCLUDED
+
+///// iteration, depth == 1
+
+// For gcc 4.4 compatability, we must include the
+// BOOST_PP_ITERATION_DEPTH test inside an #else clause.
+#else // BOOST_PP_IS_ITERATING
+#if BOOST_PP_ITERATION_DEPTH() == 1
+
+#   define i_ BOOST_PP_FRAME_ITERATION(1)
+
+#   if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+// MSVC version
+
+#define AUX778076_MSVC_DTW_NAME BOOST_PP_CAT(msvc_apply,i_)
+#define AUX778076_MSVC_DTW_ORIGINAL_NAME apply
+#define AUX778076_MSVC_DTW_ARITY i_
+#include <boost/mpl/aux_/msvc_dtw.hpp>
+
+template<
+      typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)
+    >
+struct BOOST_PP_CAT(apply_wrap,i_)
+{
+    // Metafunction forwarding confuses vc6
+    typedef typename BOOST_PP_CAT(msvc_apply,i_)<F>::template result_<
+          AUX778076_APPLY_WRAP_PARAMS(i_, T)
+        >::type type;
+};
+
+#   elif defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+// MWCW/Borland version
+
+template<
+      int N, typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)
+    >
+struct BOOST_PP_CAT(apply_wrap_impl,i_);
+
+#define BOOST_PP_ITERATION_PARAMS_2 \
+    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY - i_, <boost/mpl/apply_wrap.hpp>))
+#include BOOST_PP_ITERATE()
+
+template<
+      typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)
+    >
+struct BOOST_PP_CAT(apply_wrap,i_)
+    : BOOST_PP_CAT(apply_wrap_impl,i_)<
+          ::pdalboost::mpl::aux::arity<F,i_>::value
+        , F
+        BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, T)
+        >::type
+{
+};
+
+#   else
+// ISO98 C++, with minor concession to vc7
+
+template<
+      typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)
+#if i_ == 0
+    , typename has_apply_ = typename aux::has_apply<F>::type
+#endif
+    >
+struct BOOST_PP_CAT(apply_wrap,i_)
+// metafunction forwarding confuses MSVC 7.0
+#if !BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+    : F::template apply< AUX778076_APPLY_WRAP_PARAMS(i_, T) >
+{
+#else
+{    
+    typedef typename F::template apply<
+         AUX778076_APPLY_WRAP_PARAMS(i_, T)
+        >::type type;
+#endif
+};
+
+#if i_ == 0 && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+template< typename F >
+struct BOOST_PP_CAT(apply_wrap,i_)<F,true_>
+    : F::apply
+{
+};
+#endif
+
+#   endif // workarounds
+
+#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+/// workaround for ETI bug
+template<>
+struct BOOST_PP_CAT(apply_wrap,i_)<AUX778076_APPLY_WRAP_SPEC_PARAMS(i_, int)>
+{
+    typedef int type;
+};
+#endif
+
+#   undef i_
+
+///// iteration, depth == 2
+
+#elif BOOST_PP_ITERATION_DEPTH() == 2
+
+#   define j_ BOOST_PP_FRAME_ITERATION(2)
+
+#if i_ == 0 && j_ == 0 \
+    && defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS) \
+    && !defined(BOOST_MPL_CFG_NO_HAS_APPLY)
+
+template< typename F, bool F_has_apply >
+struct apply_wrap_impl0_bcb {
+    typedef typename F::template apply< na > type;
+};
+
+template< typename F >
+struct apply_wrap_impl0_bcb< F, true > {
+    typedef typename F::apply type;
+};
+
+template<
+      typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)
+    >
+struct BOOST_PP_CAT(apply_wrap_impl,i_)<
+          BOOST_MPL_PP_ADD(i_, j_)
+        , F
+        BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, T)
+        >
+{
+    typedef apply_wrap_impl0_bcb< F, aux::has_apply< F >::value >::type type;
+};
+#else
+
+template<
+      typename F BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, typename T)
+    >
+struct BOOST_PP_CAT(apply_wrap_impl,i_)<
+          BOOST_MPL_PP_ADD(i_, j_)
+        , F
+        BOOST_PP_COMMA_IF(i_) AUX778076_APPLY_WRAP_PARAMS(i_, T)
+        >
+{
+    typedef typename F::template apply<
+          AUX778076_APPLY_WRAP_PARAMS(i_, T)
+#if i_ == 0 && j_ == 0
+/// since the defaults are "lost", we have to pass *something* even for nullary
+/// metafunction classes
+        na
+#else
+        BOOST_PP_COMMA_IF(BOOST_PP_AND(i_, j_)) BOOST_MPL_PP_ENUM(j_, na)
+#endif
+        > type;
+};
+
+#endif
+
+#   undef j_
+
+#endif // BOOST_PP_ITERATION_DEPTH()
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/arg.hpp b/vendor/pdalboost/boost/mpl/arg.hpp
new file mode 100644
index 0000000..f51adfa
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/arg.hpp
@@ -0,0 +1,131 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_ARG_HPP_INCLUDED
+#define BOOST_MPL_ARG_HPP_INCLUDED
+
+// Copyright Peter Dimov 2001-2002
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/arg_fwd.hpp>
+#   include <boost/mpl/aux_/na.hpp>
+#   include <boost/mpl/aux_/na_assert.hpp>
+#   include <boost/mpl/aux_/arity_spec.hpp>
+#   include <boost/mpl/aux_/arg_typedef.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER arg.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/limits/arity.hpp>
+#   include <boost/mpl/aux_/preprocessor/default_params.hpp>
+#   include <boost/mpl/aux_/preprocessor/params.hpp>
+#   include <boost/mpl/aux_/config/lambda.hpp>
+#   include <boost/mpl/aux_/config/dtp.hpp>
+#   include <boost/mpl/aux_/nttp_decl.hpp>
+
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+// local macro, #undef-ined at the end of the header
+#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+#   define AUX778076_ARG_N_DEFAULT_PARAMS(param,value) \
+    BOOST_MPL_PP_DEFAULT_PARAMS( \
+          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+        , param \
+        , value \
+        ) \
+    /**/
+#else
+#   define AUX778076_ARG_N_DEFAULT_PARAMS(param,value) \
+    BOOST_MPL_PP_PARAMS( \
+          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+        , param \
+        ) \
+    /**/
+#endif
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/arg.hpp>))
+#include BOOST_PP_ITERATE()
+
+
+#   undef AUX778076_ARG_N_DEFAULT_PARAMS
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int,arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_ARG_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+#if i_ > 0
+
+template<> struct arg<i_>
+{
+    BOOST_STATIC_CONSTANT(int, value = i_);
+    typedef arg<BOOST_PP_INC(i_)> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          AUX778076_ARG_N_DEFAULT_PARAMS(typename U, na)
+        >
+    struct apply
+    {
+        typedef BOOST_PP_CAT(U,i_) type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+#else
+
+template<> struct arg<-1>
+{
+    BOOST_STATIC_CONSTANT(int, value = -1);
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          AUX778076_ARG_N_DEFAULT_PARAMS(typename U, na)
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+#endif // i_ > 0
+
+#undef i_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/arg_fwd.hpp b/vendor/pdalboost/boost/mpl/arg_fwd.hpp
new file mode 100644
index 0000000..7346dc3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/arg_fwd.hpp
@@ -0,0 +1,28 @@
+
+#ifndef BOOST_MPL_ARG_FWD_HPP_INCLUDED
+#define BOOST_MPL_ARG_FWD_HPP_INCLUDED
+
+// Copyright Peter Dimov 2001-2002
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/adl_barrier.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct arg;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+BOOST_MPL_AUX_ADL_BARRIER_DECL(arg)
+
+#endif // BOOST_MPL_ARG_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/assert.hpp b/vendor/pdalboost/boost/mpl/assert.hpp
new file mode 100644
index 0000000..12b882d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/assert.hpp
@@ -0,0 +1,439 @@
+
+#ifndef BOOST_MPL_ASSERT_HPP_INCLUDED
+#define BOOST_MPL_ASSERT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2006
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/nested_type_wknd.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/adl_barrier.hpp>
+
+#include <boost/mpl/aux_/config/nttp.hpp>
+#include <boost/mpl/aux_/config/dtp.hpp>
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/gpu.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/pp_counter.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+
+#include <boost/config.hpp> // make sure 'size_t' is placed into 'std'
+#include <cstddef>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1700)
+#include <boost/mpl/if.hpp>
+#endif
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
+    || (BOOST_MPL_CFG_GCC != 0) \
+    || BOOST_WORKAROUND(__IBMCPP__, <= 600)
+#   define BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES
+#endif
+
+#if BOOST_WORKAROUND(__MWERKS__, < 0x3202) \
+    || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \
+    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
+    || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+#   define BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER
+#endif
+
+// agurt, 10/nov/06: use enums for Borland (which cannot cope with static constants) 
+// and GCC (which issues "unused variable" warnings when static constants are used 
+// at a function scope)
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
+    || (BOOST_MPL_CFG_GCC != 0) || (BOOST_MPL_CFG_GPU != 0)
+#   define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) enum { expr }
+#else
+#   define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) BOOST_STATIC_CONSTANT(T, expr)
+#endif
+
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+struct failed {};
+
+// agurt, 24/aug/04: MSVC 7.1 workaround here and below: return/accept 
+// 'assert<false>' by reference; can't apply it unconditionally -- apparently it
+// degrades the quality of GCC diagnostics
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+#   define AUX778076_ASSERT_ARG(x) x&
+#else
+#   define AUX778076_ASSERT_ARG(x) x
+#endif
+
+template< bool C >  struct assert        { typedef void* type; };
+template<>          struct assert<false> { typedef AUX778076_ASSERT_ARG(assert) type; };
+
+template< bool C >
+int assertion_failed( typename assert<C>::type );
+
+template< bool C >
+struct assertion
+{
+    static int failed( assert<false> );
+};
+
+template<>
+struct assertion<true>
+{
+    static int failed( void* );
+};
+
+struct assert_
+{
+#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+    template< typename T1, typename T2 = na, typename T3 = na, typename T4 = na > struct types {};
+#endif
+    static assert_ const arg;
+    enum relations { equal = 1, not_equal, greater, greater_equal, less, less_equal };
+};
+
+
+#if !defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)
+
+bool operator==( failed, failed );
+bool operator!=( failed, failed );
+bool operator>( failed, failed );
+bool operator>=( failed, failed );
+bool operator<( failed, failed );
+bool operator<=( failed, failed );
+
+#if defined(__EDG_VERSION__)
+template< bool (*)(failed, failed), long x, long y > struct assert_relation {};
+#   define BOOST_MPL_AUX_ASSERT_RELATION(x, y, r) assert_relation<r,x,y>
+#else
+template< BOOST_MPL_AUX_NTTP_DECL(long, x), BOOST_MPL_AUX_NTTP_DECL(long, y), bool (*)(failed, failed) > 
+struct assert_relation {};
+#   define BOOST_MPL_AUX_ASSERT_RELATION(x, y, r) assert_relation<x,y,r>
+#endif
+
+#else // BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES
+
+pdalboost::mpl::aux::weighted_tag<1>::type operator==( assert_, assert_ );
+pdalboost::mpl::aux::weighted_tag<2>::type operator!=( assert_, assert_ );
+pdalboost::mpl::aux::weighted_tag<3>::type operator>(  assert_, assert_ );
+pdalboost::mpl::aux::weighted_tag<4>::type operator>=( assert_, assert_ );
+pdalboost::mpl::aux::weighted_tag<5>::type operator<( assert_, assert_ );
+pdalboost::mpl::aux::weighted_tag<6>::type operator<=( assert_, assert_ );
+
+template< assert_::relations r, long x, long y > struct assert_relation {};
+
+#endif 
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1700)
+
+template<class Pred>
+struct extract_assert_pred;
+
+template<class Pred>
+struct extract_assert_pred<void(Pred)> { typedef Pred type; };
+
+template<class Pred>
+struct eval_assert {
+    typedef typename extract_assert_pred<Pred>::type P;
+    typedef typename P::type p_type;
+    typedef typename ::pdalboost::mpl::if_c<p_type::value,
+        AUX778076_ASSERT_ARG(assert<false>),
+        failed ************ P::************
+    >::type type;
+};
+
+template<class Pred>
+struct eval_assert_not {
+    typedef typename extract_assert_pred<Pred>::type P;
+    typedef typename P::type p_type;
+    typedef typename ::pdalboost::mpl::if_c<!p_type::value,
+        AUX778076_ASSERT_ARG(assert<false>),
+        failed ************ ::pdalboost::mpl::not_<P>::************
+    >::type type;
+};
+
+template< typename T >
+T make_assert_arg();
+
+#elif !defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)
+
+template< bool > struct assert_arg_pred_impl { typedef int type; };
+template<> struct assert_arg_pred_impl<true> { typedef void* type; };
+
+template< typename P > struct assert_arg_pred
+{
+    typedef typename P::type p_type;
+    typedef typename assert_arg_pred_impl< p_type::value >::type type;
+};
+
+template< typename P > struct assert_arg_pred_not
+{
+    typedef typename P::type p_type;
+    BOOST_MPL_AUX_ASSERT_CONSTANT( bool, p = !p_type::value );
+    typedef typename assert_arg_pred_impl<p>::type type;
+};
+
+template< typename Pred >
+failed ************ (Pred::************ 
+      assert_arg( void (*)(Pred), typename assert_arg_pred<Pred>::type )
+    );
+
+template< typename Pred >
+failed ************ (pdalboost::mpl::not_<Pred>::************ 
+      assert_not_arg( void (*)(Pred), typename assert_arg_pred_not<Pred>::type )
+    );
+
+template< typename Pred >
+AUX778076_ASSERT_ARG(assert<false>)
+assert_arg( void (*)(Pred), typename assert_arg_pred_not<Pred>::type );
+
+template< typename Pred >
+AUX778076_ASSERT_ARG(assert<false>)
+assert_not_arg( void (*)(Pred), typename assert_arg_pred<Pred>::type );
+
+
+#else // BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER
+        
+template< bool c, typename Pred > struct assert_arg_type_impl
+{
+    typedef failed      ************ Pred::* mwcw83_wknd;
+    typedef mwcw83_wknd ************* type;
+};
+
+template< typename Pred > struct assert_arg_type_impl<true,Pred>
+{
+    typedef AUX778076_ASSERT_ARG(assert<false>) type;
+};
+
+template< typename Pred > struct assert_arg_type
+    : assert_arg_type_impl< BOOST_MPL_AUX_VALUE_WKND(BOOST_MPL_AUX_NESTED_TYPE_WKND(Pred))::value, Pred >
+{
+};
+
+template< typename Pred >
+typename assert_arg_type<Pred>::type 
+assert_arg(void (*)(Pred), int);
+
+template< typename Pred >
+typename assert_arg_type< pdalboost::mpl::not_<Pred> >::type 
+assert_not_arg(void (*)(Pred), int);
+
+#   if !defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)
+template< long x, long y, bool (*r)(failed, failed) >
+typename assert_arg_type_impl< false,BOOST_MPL_AUX_ASSERT_RELATION(x,y,r) >::type
+assert_rel_arg( BOOST_MPL_AUX_ASSERT_RELATION(x,y,r) );
+#   else
+template< assert_::relations r, long x, long y >
+typename assert_arg_type_impl< false,assert_relation<r,x,y> >::type
+assert_rel_arg( assert_relation<r,x,y> );
+#   endif
+
+#endif // BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER
+
+#undef AUX778076_ASSERT_ARG
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1700)
+
+// BOOST_MPL_ASSERT((pred<x,...>))
+
+#define BOOST_MPL_ASSERT(pred) \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+      std::size_t \
+    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \
+          pdalboost::mpl::assertion_failed<false>( \
+              pdalboost::mpl::make_assert_arg< \
+                  typename pdalboost::mpl::eval_assert<void pred>::type \
+                >() \
+            ) \
+        ) \
+    ) \
+/**/
+
+// BOOST_MPL_ASSERT_NOT((pred<x,...>))
+
+#define BOOST_MPL_ASSERT_NOT(pred) \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+      std::size_t \
+    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \
+          pdalboost::mpl::assertion_failed<false>( \
+              pdalboost::mpl::make_assert_arg< \
+                  typename pdalboost::mpl::eval_assert_not<void pred>::type \
+                >() \
+            ) \
+        ) \
+    ) \
+/**/
+
+#else
+
+// BOOST_MPL_ASSERT((pred<x,...>))
+
+#define BOOST_MPL_ASSERT(pred) \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+      std::size_t \
+    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \
+          pdalboost::mpl::assertion_failed<false>( \
+              pdalboost::mpl::assert_arg( (void (*) pred)0, 1 ) \
+            ) \
+        ) \
+    ) \
+/**/
+
+// BOOST_MPL_ASSERT_NOT((pred<x,...>))
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+#   define BOOST_MPL_ASSERT_NOT(pred) \
+enum { \
+      BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \
+          pdalboost::mpl::assertion<false>::failed( \
+              pdalboost::mpl::assert_not_arg( (void (*) pred)0, 1 ) \
+            ) \
+        ) \
+}\
+/**/
+#else
+#   define BOOST_MPL_ASSERT_NOT(pred) \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+      std::size_t \
+    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \
+          pdalboost::mpl::assertion_failed<false>( \
+              pdalboost::mpl::assert_not_arg( (void (*) pred)0, 1 ) \
+            ) \
+        ) \
+   ) \
+/**/
+#endif
+
+#endif
+
+// BOOST_MPL_ASSERT_RELATION(x, ==|!=|<=|<|>=|>, y)
+
+#if defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)
+
+#   if !defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)
+// agurt, 9/nov/06: 'enum' below is a workaround for gcc 4.0.4/4.1.1 bugs #29522 and #29518
+#   define BOOST_MPL_ASSERT_RELATION_IMPL(counter, x, rel, y)      \
+enum { BOOST_PP_CAT(mpl_assert_rel_value,counter) = (x rel y) }; \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+      std::size_t \
+    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \
+        pdalboost::mpl::assertion_failed<BOOST_PP_CAT(mpl_assert_rel_value,counter)>( \
+            (pdalboost::mpl::failed ************ ( pdalboost::mpl::assert_relation< \
+                  pdalboost::mpl::assert_::relations( sizeof( \
+                      pdalboost::mpl::assert_::arg rel pdalboost::mpl::assert_::arg \
+                    ) ) \
+                , x \
+                , y \
+                >::************)) 0 ) \
+        ) \
+    ) \
+/**/
+#   else
+#   define BOOST_MPL_ASSERT_RELATION_IMPL(counter, x, rel, y)    \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+      std::size_t \
+    , BOOST_PP_CAT(mpl_assert_rel,counter) = sizeof( \
+          pdalboost::mpl::assert_::arg rel pdalboost::mpl::assert_::arg \
+        ) \
+    ); \
+BOOST_MPL_AUX_ASSERT_CONSTANT( bool, BOOST_PP_CAT(mpl_assert_rel_value,counter) = (x rel y) ); \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+      std::size_t \
+    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \
+        pdalboost::mpl::assertion_failed<BOOST_PP_CAT(mpl_assert_rel_value,counter)>( \
+              pdalboost::mpl::assert_rel_arg( pdalboost::mpl::assert_relation< \
+                  pdalboost::mpl::assert_::relations(BOOST_PP_CAT(mpl_assert_rel,counter)) \
+                , x \
+                , y \
+                >() ) \
+            ) \
+        ) \
+    ) \
+/**/
+#   endif
+
+#   define BOOST_MPL_ASSERT_RELATION(x, rel, y) \
+BOOST_MPL_ASSERT_RELATION_IMPL(BOOST_MPL_AUX_PP_COUNTER(), x, rel, y) \
+/**/
+
+#else // !BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES
+
+#   if defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)
+#   define BOOST_MPL_ASSERT_RELATION(x, rel, y) \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+      std::size_t \
+    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \
+        pdalboost::mpl::assertion_failed<(x rel y)>( pdalboost::mpl::assert_rel_arg( \
+              pdalboost::mpl::BOOST_MPL_AUX_ASSERT_RELATION(x,y,(&pdalboost::mpl::operator rel))() \
+            ) ) \
+        ) \
+    ) \
+/**/
+#   else
+#   define BOOST_MPL_ASSERT_RELATION(x, rel, y) \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+      std::size_t \
+    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \
+        pdalboost::mpl::assertion_failed<(x rel y)>( (pdalboost::mpl::failed ************ ( \
+            pdalboost::mpl::BOOST_MPL_AUX_ASSERT_RELATION(x,y,(&pdalboost::mpl::operator rel))::************))0 ) \
+        ) \
+    ) \
+/**/
+#   endif
+
+#endif
+
+
+// BOOST_MPL_ASSERT_MSG( (pred<x,...>::value), USER_PROVIDED_MESSAGE, (types<x,...>) ) 
+
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202))
+#   define BOOST_MPL_ASSERT_MSG_IMPL( counter, c, msg, types_ ) \
+struct msg; \
+typedef struct BOOST_PP_CAT(msg,counter) : pdalboost::mpl::assert_ \
+{ \
+    using pdalboost::mpl::assert_::types; \
+    static pdalboost::mpl::failed ************ (msg::************ assert_arg()) types_ \
+    { return 0; } \
+} BOOST_PP_CAT(mpl_assert_arg,counter); \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+      std::size_t \
+    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \
+        pdalboost::mpl::assertion<(c)>::failed( BOOST_PP_CAT(mpl_assert_arg,counter)::assert_arg() ) \
+        ) \
+    ) \
+/**/
+#else
+#   define BOOST_MPL_ASSERT_MSG_IMPL( counter, c, msg, types_ )  \
+struct msg; \
+typedef struct BOOST_PP_CAT(msg,counter) : pdalboost::mpl::assert_ \
+{ \
+    static pdalboost::mpl::failed ************ (msg::************ assert_arg()) types_ \
+    { return 0; } \
+} BOOST_PP_CAT(mpl_assert_arg,counter); \
+BOOST_MPL_AUX_ASSERT_CONSTANT( \
+      std::size_t \
+    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \
+        pdalboost::mpl::assertion_failed<(c)>( BOOST_PP_CAT(mpl_assert_arg,counter)::assert_arg() ) \
+        ) \
+    ) \
+/**/
+#endif
+
+#define BOOST_MPL_ASSERT_MSG( c, msg, types_ ) \
+BOOST_MPL_ASSERT_MSG_IMPL( BOOST_MPL_AUX_PP_COUNTER(), c, msg, types_ ) \
+/**/
+
+#endif // BOOST_MPL_ASSERT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/at.hpp b/vendor/pdalboost/boost/mpl/at.hpp
new file mode 100644
index 0000000..4c1c0bb
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/at.hpp
@@ -0,0 +1,52 @@
+
+#ifndef BOOST_MPL_AT_HPP_INCLUDED
+#define BOOST_MPL_AT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/at_fwd.hpp>
+#include <boost/mpl/aux_/at_impl.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(N)
+    >
+struct at
+    : at_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence,N >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,at,(Sequence,N))
+};
+
+template<
+      typename Sequence
+    , BOOST_MPL_AUX_NTTP_DECL(long, N)
+    >
+struct at_c
+    : at_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence,mpl::long_<N> >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, at)
+
+}}
+
+#endif // BOOST_MPL_AT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/at_fwd.hpp b/vendor/pdalboost/boost/mpl/at_fwd.hpp
new file mode 100644
index 0000000..6ee04a8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/at_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_AT_FWD_HPP_INCLUDED
+#define BOOST_MPL_AT_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct at_impl;
+template< typename Sequence, typename N > struct at;
+
+}}
+
+#endif // BOOST_MPL_AT_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/O1_size_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/O1_size_impl.hpp
new file mode 100644
index 0000000..0a1c9ef
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/O1_size_impl.hpp
@@ -0,0 +1,87 @@
+
+#ifndef BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/O1_size_fwd.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/has_size.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// default implementation - returns 'Sequence::size' if sequence has a 'size'
+// member, and -1 otherwise; conrete sequences might override it by 
+// specializing either the 'O1_size_impl' or the primary 'O1_size' template
+
+#   if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
+    && !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+
+namespace aux {
+template< typename Sequence > struct O1_size_impl
+    : Sequence::size
+{
+};
+}
+
+template< typename Tag >
+struct O1_size_impl
+{
+    template< typename Sequence > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+        : if_<
+              aux::has_size<Sequence>
+            , aux::O1_size_impl<Sequence>
+            , long_<-1>
+            >::type
+    {
+#else
+    {
+        typedef typename if_<
+              aux::has_size<Sequence>
+            , aux::O1_size_impl<Sequence>
+            , long_<-1>
+            >::type type;
+
+        BOOST_STATIC_CONSTANT(long, value =
+              (if_<
+                  aux::has_size<Sequence>
+                , aux::O1_size_impl<Sequence>
+                , long_<-1>
+                >::type::value)
+            );
+#endif
+    };
+};
+
+#   else // BOOST_MSVC
+
+template< typename Tag >
+struct O1_size_impl
+{
+    template< typename Sequence > struct apply
+        : long_<-1>
+        {
+        };
+};
+
+#   endif
+
+}}
+
+#endif // BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/adl_barrier.hpp b/vendor/pdalboost/boost/mpl/aux_/adl_barrier.hpp
new file mode 100644
index 0000000..33c37e4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/adl_barrier.hpp
@@ -0,0 +1,48 @@
+
+#ifndef BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED
+#define BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/adl.hpp>
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE)
+
+#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE mpl_
+#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN namespace mpl_ {
+#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE }
+#   define BOOST_MPL_AUX_ADL_BARRIER_DECL(type) \
+    namespace pdalboost { namespace mpl { \
+    using ::BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::type; \
+    } } \
+/**/
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+namespace BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE { namespace aux {} }
+namespace pdalboost { namespace mpl { using namespace BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE; 
+namespace aux { using namespace BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::aux; }
+}}
+#endif
+
+#else // BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE
+
+#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE pdalboost::mpl
+#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN namespace pdalboost { namespace mpl {
+#   define BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE }}
+#   define BOOST_MPL_AUX_ADL_BARRIER_DECL(type) /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_ADL_BARRIER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/advance_backward.hpp b/vendor/pdalboost/boost/mpl/aux_/advance_backward.hpp
new file mode 100644
index 0000000..7df5c82
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/advance_backward.hpp
@@ -0,0 +1,128 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_AUX778076_ADVANCE_BACKWARD_HPP_INCLUDED
+#define BOOST_MPL_AUX778076_ADVANCE_BACKWARD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/prior.hpp>
+#   include <boost/mpl/apply_wrap.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if    !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER advance_backward.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/limits/unrolling.hpp>
+#   include <boost/mpl/aux_/nttp_decl.hpp>
+#   include <boost/mpl/aux_/config/eti.hpp>
+
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/cat.hpp>
+#   include <boost/preprocessor/inc.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+// forward declaration
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct advance_backward;
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/advance_backward.hpp>))
+#   include BOOST_PP_ITERATE()
+
+// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) >
+struct advance_backward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_backward<BOOST_MPL_LIMIT_UNROLLING>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_backward<(
+                (N - BOOST_MPL_LIMIT_UNROLLING) < 0
+                    ? 0
+                    : N - BOOST_MPL_LIMIT_UNROLLING
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX778076_ADVANCE_BACKWARD_HPP_INCLUDED
+
+///// iteration, depth == 1
+
+// For gcc 4.4 compatability, we must include the
+// BOOST_PP_ITERATION_DEPTH test inside an #else clause.
+#else // BOOST_PP_IS_ITERATING
+#if BOOST_PP_ITERATION_DEPTH() == 1
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<>
+struct advance_backward< BOOST_PP_FRAME_ITERATION(1) >
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+
+#if i_ > 0
+#   define BOOST_PP_ITERATION_PARAMS_2 \
+    (3,(1, BOOST_PP_FRAME_ITERATION(1), <boost/mpl/aux_/advance_backward.hpp>))
+#   include BOOST_PP_ITERATE()
+#endif
+
+        typedef BOOST_PP_CAT(iter,BOOST_PP_FRAME_ITERATION(1)) type;
+    };
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+    /// ETI workaround
+    template<> struct apply<int>
+    {
+        typedef int type;
+    };
+#endif
+};
+
+#undef i_
+
+///// iteration, depth == 2
+
+#elif BOOST_PP_ITERATION_DEPTH() == 2
+
+#   define AUX778076_ITER_0 BOOST_PP_CAT(iter,BOOST_PP_DEC(BOOST_PP_FRAME_ITERATION(2)))
+#   define AUX778076_ITER_1 BOOST_PP_CAT(iter,BOOST_PP_FRAME_ITERATION(2))
+
+        typedef typename prior<AUX778076_ITER_0>::type AUX778076_ITER_1;
+        
+#   undef AUX778076_ITER_1
+#   undef AUX778076_ITER_0
+
+#endif // BOOST_PP_ITERATION_DEPTH()
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/aux_/advance_forward.hpp b/vendor/pdalboost/boost/mpl/aux_/advance_forward.hpp
new file mode 100644
index 0000000..01977f0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/advance_forward.hpp
@@ -0,0 +1,127 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_AUX_ADVANCE_FORWARD_HPP_INCLUDED
+#define BOOST_MPL_AUX_ADVANCE_FORWARD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/next.hpp>
+#   include <boost/mpl/apply_wrap.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if    !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER advance_forward.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/limits/unrolling.hpp>
+#   include <boost/mpl/aux_/nttp_decl.hpp>
+#   include <boost/mpl/aux_/config/eti.hpp>
+
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/cat.hpp>
+#   include <boost/preprocessor/inc.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+// forward declaration
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct advance_forward;
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/advance_forward.hpp>))
+#   include BOOST_PP_ITERATE()
+
+// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) > 
+struct advance_forward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_forward<BOOST_MPL_LIMIT_UNROLLING>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_forward<(
+                (N - BOOST_MPL_LIMIT_UNROLLING) < 0
+                    ? 0
+                    : N - BOOST_MPL_LIMIT_UNROLLING
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_ADVANCE_FORWARD_HPP_INCLUDED
+
+///// iteration, depth == 1
+
+// For gcc 4.4 compatability, we must include the
+// BOOST_PP_ITERATION_DEPTH test inside an #else clause.
+#else // BOOST_PP_IS_ITERATING
+#if BOOST_PP_ITERATION_DEPTH() == 1
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<>
+struct advance_forward< BOOST_PP_FRAME_ITERATION(1) >
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+
+#if i_ > 0
+#   define BOOST_PP_ITERATION_PARAMS_2 \
+    (3,(1, i_, <boost/mpl/aux_/advance_forward.hpp>))
+#   include BOOST_PP_ITERATE()
+#endif
+        typedef BOOST_PP_CAT(iter,i_) type;
+    };
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+    /// ETI workaround
+    template<> struct apply<int>
+    {
+        typedef int type;
+    };
+#endif
+};
+
+#undef i_
+
+///// iteration, depth == 2
+
+#elif BOOST_PP_ITERATION_DEPTH() == 2
+
+#   define AUX778076_ITER_0 BOOST_PP_CAT(iter,BOOST_PP_DEC(BOOST_PP_FRAME_ITERATION(2)))
+#   define AUX778076_ITER_1 BOOST_PP_CAT(iter,BOOST_PP_FRAME_ITERATION(2))
+
+        typedef typename next<AUX778076_ITER_0>::type AUX778076_ITER_1;
+        
+#   undef AUX778076_ITER_1
+#   undef AUX778076_ITER_0
+
+#endif // BOOST_PP_ITERATION_DEPTH()
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/aux_/arg_typedef.hpp b/vendor/pdalboost/boost/mpl/aux_/arg_typedef.hpp
new file mode 100644
index 0000000..362db16
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/arg_typedef.hpp
@@ -0,0 +1,31 @@
+
+#ifndef BOOST_MPL_AUX_ARG_TYPEDEF_HPP_INCLUDED
+#define BOOST_MPL_AUX_ARG_TYPEDEF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/lambda.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \
+    || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+    
+#   define BOOST_MPL_AUX_ARG_TYPEDEF(T, name) typedef T name;
+
+#else
+
+#   define BOOST_MPL_AUX_ARG_TYPEDEF(T, name) /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_ARG_TYPEDEF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/arithmetic_op.hpp b/vendor/pdalboost/boost/mpl/aux_/arithmetic_op.hpp
new file mode 100644
index 0000000..29f7436
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/arithmetic_op.hpp
@@ -0,0 +1,92 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/integral_c.hpp>
+#   include <boost/mpl/aux_/largest_int.hpp>
+#   include <boost/mpl/aux_/value_wknd.hpp>
+#endif
+
+#if !defined(AUX778076_OP_PREFIX)
+#   define AUX778076_OP_PREFIX AUX778076_OP_NAME
+#endif
+
+#include <boost/mpl/aux_/numeric_op.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER AUX778076_OP_PREFIX.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/aux_/config/workaround.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+
+namespace pdalboost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
+namespace aux {
+template< typename T, T n1, T n2 >
+struct BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd)
+{
+    BOOST_STATIC_CONSTANT(T, value = (n1 AUX778076_OP_TOKEN n2));
+    typedef integral_c<T,value> type;
+};
+}
+#endif
+
+template<>
+struct AUX778076_OP_IMPL_NAME<integral_c_tag,integral_c_tag>
+{
+    template< typename N1, typename N2 > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  AUX778076_OP_TOKEN BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+#else
+        : aux::BOOST_PP_CAT(AUX778076_OP_PREFIX,_wknd)<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+#endif
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#undef AUX778076_OP_TAG_NAME
+#undef AUX778076_OP_IMPL_NAME
+#undef AUX778076_OP_ARITY
+#undef AUX778076_OP_PREFIX
+#undef AUX778076_OP_NAME
+#undef AUX778076_OP_TOKEN
diff --git a/vendor/pdalboost/boost/mpl/aux_/arity.hpp b/vendor/pdalboost/boost/mpl/aux_/arity.hpp
new file mode 100644
index 0000000..e8c0d6b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/arity.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_AUX_ARITY_HPP_INCLUDED
+#define BOOST_MPL_AUX_ARITY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/dtp.hpp>
+
+#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+
+#   include <boost/mpl/aux_/nttp_decl.hpp>
+#   include <boost/mpl/aux_/config/static_constant.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+// agurt, 15/mar/02: it's possible to implement the template so that it will 
+// "just work" and do not require any specialization, but not on the compilers
+// that require the arity workaround in the first place
+template< typename F, BOOST_MPL_AUX_NTTP_DECL(int, N) >
+struct arity
+{
+    BOOST_STATIC_CONSTANT(int, value = N);
+};
+
+}}}
+
+#endif // BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES
+
+#endif // BOOST_MPL_AUX_ARITY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/arity_spec.hpp b/vendor/pdalboost/boost/mpl/aux_/arity_spec.hpp
new file mode 100644
index 0000000..7c82214
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/arity_spec.hpp
@@ -0,0 +1,67 @@
+
+#ifndef BOOST_MPL_AUX_ARITY_SPEC_HPP_INCLUDED
+#define BOOST_MPL_AUX_ARITY_SPEC_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/limits/arity.hpp>
+#include <boost/mpl/aux_/config/dtp.hpp>
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/arity.hpp>
+#include <boost/mpl/aux_/template_arity_fwd.hpp>
+#include <boost/mpl/aux_/config/ttp.hpp>
+#include <boost/mpl/aux_/config/lambda.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+#   define BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(i,type,name) \
+namespace aux { \
+template< BOOST_MPL_AUX_NTTP_DECL(int, N), BOOST_MPL_PP_PARAMS(i,type T) > \
+struct arity< \
+      name< BOOST_MPL_PP_PARAMS(i,T) > \
+    , N \
+    > \
+{ \
+    BOOST_STATIC_CONSTANT(int \
+        , value = BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+        ); \
+}; \
+} \
+/**/
+#else
+#   define BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(i,type,name) /**/
+#endif
+
+#   define BOOST_MPL_AUX_ARITY_SPEC(i,name) \
+    BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(i,typename,name) \
+/**/
+
+
+#if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \
+    && !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+#   define BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(i, name) \
+namespace aux { \
+template< BOOST_MPL_PP_PARAMS(i,typename T) > \
+struct template_arity< name<BOOST_MPL_PP_PARAMS(i,T)> > \
+    : int_<i> \
+{ \
+}; \
+} \
+/**/
+#else
+#   define BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(i, name) /**/
+#endif
+
+
+#endif // BOOST_MPL_AUX_ARITY_SPEC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/at_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/at_impl.hpp
new file mode 100644
index 0000000..8045bbd
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/at_impl.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_AUX_AT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_AT_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/advance.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// default implementation; conrete sequences might override it by 
+// specializing either the 'at_impl' or the primary 'at' template
+
+template< typename Tag >
+struct at_impl
+{
+    template< typename Sequence, typename N > struct apply
+    {
+        typedef typename advance<
+              typename begin<Sequence>::type
+            , N
+            >::type iter_;
+
+        typedef typename deref<iter_>::type type;
+    };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, at_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_AT_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/begin_end_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/begin_end_impl.hpp
new file mode 100644
index 0000000..54474dc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/begin_end_impl.hpp
@@ -0,0 +1,101 @@
+
+#ifndef BOOST_MPL_AUX_BEGIN_END_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_BEGIN_END_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/begin_end_fwd.hpp>
+#include <boost/mpl/sequence_tag_fwd.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/has_begin.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+
+namespace pdalboost { namespace mpl {
+
+
+namespace aux { 
+
+template< typename Sequence > 
+struct begin_type 
+{ 
+    typedef typename Sequence::begin type; 
+};
+template< typename Sequence > 
+struct end_type
+{ 
+    typedef typename Sequence::end type; 
+};
+
+}
+
+// default implementation; conrete sequences might override it by 
+// specializing either the 'begin_impl/end_impl' or the primary 
+// 'begin/end' templates
+
+template< typename Tag >
+struct begin_impl
+{
+    template< typename Sequence > struct apply
+    {
+        typedef typename eval_if<aux::has_begin<Sequence, true_>,
+                                 aux::begin_type<Sequence>, void_>::type type;
+    };
+};
+
+template< typename Tag >
+struct end_impl
+{
+    template< typename Sequence > struct apply
+    {
+        typedef typename eval_if<aux::has_begin<Sequence, true_>,
+                                 aux::end_type<Sequence>, void_>::type type;
+    };
+};
+
+// specialize 'begin_trait/end_trait' for two pre-defined tags
+
+#   define AUX778076_IMPL_SPEC(name, tag, result) \
+template<> \
+struct name##_impl<tag> \
+{ \
+    template< typename Sequence > struct apply \
+    { \
+        typedef result type; \
+    }; \
+}; \
+/**/
+
+// a sequence with nested 'begin/end' typedefs; just query them
+AUX778076_IMPL_SPEC(begin, nested_begin_end_tag, typename Sequence::begin)
+AUX778076_IMPL_SPEC(end, nested_begin_end_tag, typename Sequence::end)
+
+// if a type 'T' does not contain 'begin/end' or 'tag' members 
+// and doesn't specialize either 'begin/end' or 'begin_impl/end_impl' 
+// templates, then we end up here
+AUX778076_IMPL_SPEC(begin, non_sequence_tag, void_)
+AUX778076_IMPL_SPEC(end, non_sequence_tag, void_)
+AUX778076_IMPL_SPEC(begin, na, void_)
+AUX778076_IMPL_SPEC(end, na, void_)
+
+#   undef AUX778076_IMPL_SPEC
+
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(1,begin_impl)
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(1,end_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_BEGIN_END_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/clear_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/clear_impl.hpp
new file mode 100644
index 0000000..ed572e1
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/clear_impl.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/clear_fwd.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// no default implementation; the definition is needed to make MSVC happy
+
+template< typename Tag >
+struct clear_impl
+{
+    template< typename Sequence > struct apply;
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, clear_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/common_name_wknd.hpp b/vendor/pdalboost/boost/mpl/aux_/common_name_wknd.hpp
new file mode 100644
index 0000000..00758b2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/common_name_wknd.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_AUX_COMMON_NAME_WKND_HPP_INCLUDED
+#define BOOST_MPL_AUX_COMMON_NAME_WKND_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x561)
+// agurt, 12/nov/02: to suppress the bogus "Cannot have both a template class 
+// and function named 'xxx'" diagnostic
+#   define BOOST_MPL_AUX_COMMON_NAME_WKND(name) \
+namespace name_##wknd { \
+template< typename > void name(); \
+} \
+/**/
+
+#else
+
+#   define BOOST_MPL_AUX_COMMON_NAME_WKND(name) /**/
+
+#endif // __BORLANDC__
+
+#endif // BOOST_MPL_AUX_COMMON_NAME_WKND_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/comparison_op.hpp b/vendor/pdalboost/boost/mpl/aux_/comparison_op.hpp
new file mode 100644
index 0000000..73170a5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/comparison_op.hpp
@@ -0,0 +1,83 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/bool.hpp>
+#   include <boost/mpl/aux_/value_wknd.hpp>
+#endif
+
+#if !defined(AUX778076_OP_PREFIX)
+#   define AUX778076_OP_PREFIX AUX778076_OP_NAME
+#endif
+
+#define AUX778076_OP_ARITY 2
+
+#include <boost/mpl/aux_/numeric_op.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER AUX778076_OP_PREFIX.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/aux_/config/integral.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// MSVC workaround: implement less in terms of greater
+#if 0 AUX778076_OP_TOKEN 1 && !(1 AUX778076_OP_TOKEN 0) && !(0 AUX778076_OP_TOKEN 0)
+#   define AUX778076_OP(N1, N2) \
+    ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) \
+/**/
+#else
+#   define AUX778076_OP(N1, N2) \
+    ( BOOST_MPL_AUX_VALUE_WKND(N1)::value \
+          AUX778076_OP_TOKEN BOOST_MPL_AUX_VALUE_WKND(N2)::value \
+        ) \
+/**/
+#endif
+
+template<>
+struct AUX778076_OP_IMPL_NAME<integral_c_tag,integral_c_tag>
+{
+    template< typename N1, typename N2 > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
+        : bool_< AUX778076_OP(N1, N2) >
+    {
+#else
+    {
+        BOOST_STATIC_CONSTANT(bool, value = AUX778076_OP(N1, N2));
+        typedef bool_<value> type;
+#endif
+    };
+};
+
+#undef AUX778076_OP
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#undef AUX778076_OP_TAG_NAME
+#undef AUX778076_OP_IMPL_NAME
+#undef AUX778076_OP_ARITY
+#undef AUX778076_OP_PREFIX
+#undef AUX778076_OP_NAME
+#undef AUX778076_OP_TOKEN
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/adl.hpp b/vendor/pdalboost/boost/mpl/aux_/config/adl.hpp
new file mode 100644
index 0000000..e9bdf11
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/adl.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/intel.hpp>
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+// agurt, 25/apr/04: technically, the ADL workaround is only needed for GCC,
+// but putting everything expect public, user-specializable metafunctions into
+// a separate global namespace has a nice side effect of reducing the length 
+// of template instantiation symbols, so we apply the workaround on all 
+// platforms that can handle it
+
+#if !defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE) \
+    && (   BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+        || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
+        || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) \
+        || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \
+        || BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, BOOST_TESTED_AT(810)) \
+        )
+
+#   define BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_ADL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/arrays.hpp b/vendor/pdalboost/boost/mpl/aux_/config/arrays.hpp
new file mode 100644
index 0000000..a9ea68a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/arrays.hpp
@@ -0,0 +1,30 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_ARRAYS_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_ARRAYS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if    !defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && ( BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
+        || BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+        )
+
+#   define BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_ARRAYS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/bcc.hpp b/vendor/pdalboost/boost/mpl/aux_/config/bcc.hpp
new file mode 100644
index 0000000..fe4941a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/bcc.hpp
@@ -0,0 +1,28 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_BCC_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_BCC_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date: 2004-09-02 10:41:37 -0500 (Thu, 02 Sep 2004) $
+// $Revision: 24874 $
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if    !defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && BOOST_WORKAROUND(__BORLANDC__, >= 0x590) \
+    && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))
+
+#   define BOOST_MPL_CFG_BCC590_WORKAROUNDS
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_BCC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/bind.hpp b/vendor/pdalboost/boost/mpl/aux_/config/bind.hpp
new file mode 100644
index 0000000..10bcb94
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/bind.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_BIND_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_BIND_HPP_INCLUDED
+
+// Copyright David Abrahams 2002
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if    !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && (   BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+        || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
+        )
+
+#   define BOOST_MPL_CFG_NO_BIND_TEMPLATE
+
+#endif
+
+//#define BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT
+
+#endif // BOOST_MPL_AUX_CONFIG_BIND_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/compiler.hpp b/vendor/pdalboost/boost/mpl/aux_/config/compiler.hpp
new file mode 100644
index 0000000..7d3e3b6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/compiler.hpp
@@ -0,0 +1,66 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_CFG_COMPILER_DIR)
+
+#   include <boost/mpl/aux_/config/dtp.hpp>
+#   include <boost/mpl/aux_/config/ttp.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/mpl/aux_/config/msvc.hpp>
+#   include <boost/mpl/aux_/config/gcc.hpp>
+#   include <boost/mpl/aux_/config/workaround.hpp>
+
+#   if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+#       define BOOST_MPL_CFG_COMPILER_DIR msvc60
+
+#   elif BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+#       define BOOST_MPL_CFG_COMPILER_DIR msvc70
+
+#   elif BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304))
+#       define BOOST_MPL_CFG_COMPILER_DIR gcc
+
+#   elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))
+#       if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+#           define BOOST_MPL_CFG_COMPILER_DIR bcc551
+#       elif BOOST_WORKAROUND(__BORLANDC__, >= 0x590)
+#           define BOOST_MPL_CFG_COMPILER_DIR bcc
+#       else
+#           define BOOST_MPL_CFG_COMPILER_DIR bcc_pre590
+#       endif
+
+#   elif BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+#       define BOOST_MPL_CFG_COMPILER_DIR dmc
+
+#   elif defined(__MWERKS__)
+#       if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+#           define BOOST_MPL_CFG_COMPILER_DIR mwcw
+#       else
+#           define BOOST_MPL_CFG_COMPILER_DIR plain
+#       endif
+
+#   elif defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#       define BOOST_MPL_CFG_COMPILER_DIR no_ctps
+
+#   elif defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS)
+#       define BOOST_MPL_CFG_COMPILER_DIR no_ttp
+
+#   else
+#       define BOOST_MPL_CFG_COMPILER_DIR plain
+#   endif
+
+#endif // BOOST_MPL_CFG_COMPILER_DIR
+
+#endif // BOOST_MPL_AUX_CONFIG_COMPILER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/ctps.hpp b/vendor/pdalboost/boost/mpl/aux_/config/ctps.hpp
new file mode 100644
index 0000000..af78f47
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/ctps.hpp
@@ -0,0 +1,30 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_CTPS_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_CTPS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+#include <boost/config.hpp>
+
+#if    !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && BOOST_WORKAROUND(__BORLANDC__, < 0x582)
+
+#   define BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC
+
+#endif
+
+// BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION is defined in <boost/config.hpp>
+
+#endif // BOOST_MPL_AUX_CONFIG_CTPS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/dependent_nttp.hpp b/vendor/pdalboost/boost/mpl/aux_/config/dependent_nttp.hpp
new file mode 100644
index 0000000..5c2e24d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/dependent_nttp.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_DEPENDENT_NTTP_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_DEPENDENT_NTTP_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+// GCC and EDG-based compilers incorrectly reject the following code:
+//   template< typename T, T n > struct a;
+//   template< typename T > struct b;
+//   template< typename T, T n > struct b< a<T,n> > {};
+
+#if    !defined(BOOST_MPL_CFG_NO_DEPENDENT_NONTYPE_PARAMETER_IN_PARTIAL_SPEC) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && (   BOOST_WORKAROUND(__EDG_VERSION__, BOOST_TESTED_AT(300)) \
+        || BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0302)) \
+        )
+
+#   define BOOST_MPL_CFG_NO_DEPENDENT_NONTYPE_PARAMETER_IN_PARTIAL_SPEC
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_DEPENDENT_NTTP_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp b/vendor/pdalboost/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp
new file mode 100644
index 0000000..9f8ea8c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp
@@ -0,0 +1,27 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_DMC_AMBIGUOUS_CTPS_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_DMC_AMBIGUOUS_CTPS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if    !defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+
+#   define BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_DMC_AMBIGUOUS_CTPS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/dtp.hpp b/vendor/pdalboost/boost/mpl/aux_/config/dtp.hpp
new file mode 100644
index 0000000..4379b6b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/dtp.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_DTP_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_DTP_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+// MWCW 7.x-8.0 "losts" default template parameters of nested class 
+// templates when their owner classes are passed as arguments to other 
+// templates; Borland 5.5.1 "forgets" them from the very beginning (if 
+// the owner class is a class template), and Borland 5.6 isn't even
+// able to compile a definition of nested class template with DTP
+
+#if    !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && BOOST_WORKAROUND(__BORLANDC__, >= 0x560) \
+    && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))
+
+#   define BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES
+
+#endif
+
+
+#if    !defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && (   BOOST_WORKAROUND(__MWERKS__, <= 0x3001) \
+        || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
+        || defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES) \
+        )
+        
+#   define BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_DTP_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/eti.hpp b/vendor/pdalboost/boost/mpl/aux_/config/eti.hpp
new file mode 100644
index 0000000..519d433
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/eti.hpp
@@ -0,0 +1,47 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_ETI_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_ETI_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+// flags for MSVC 6.5's so-called "early template instantiation bug"
+#if    !defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+#   define BOOST_MPL_CFG_MSVC_60_ETI_BUG
+
+#endif
+
+#if    !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+
+#   define BOOST_MPL_CFG_MSVC_70_ETI_BUG
+
+#endif
+
+#if    !defined(BOOST_MPL_CFG_MSVC_ETI_BUG) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && ( defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) \
+        || defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG) \
+        )
+
+#   define BOOST_MPL_CFG_MSVC_ETI_BUG
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_ETI_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/forwarding.hpp b/vendor/pdalboost/boost/mpl/aux_/config/forwarding.hpp
new file mode 100644
index 0000000..b4296ad
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/forwarding.hpp
@@ -0,0 +1,27 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_FORWARDING_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_FORWARDING_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if    !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))
+
+#   define BOOST_MPL_CFG_NO_NESTED_FORWARDING
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_FORWARDING_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/gcc.hpp b/vendor/pdalboost/boost/mpl/aux_/config/gcc.hpp
new file mode 100644
index 0000000..080495d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/gcc.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if defined(__GNUC__) && !defined(__EDG_VERSION__)
+#   define BOOST_MPL_CFG_GCC ((__GNUC__ << 8) | __GNUC_MINOR__)
+#else
+#   define BOOST_MPL_CFG_GCC 0
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_GCC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/gpu.hpp b/vendor/pdalboost/boost/mpl/aux_/config/gpu.hpp
new file mode 100644
index 0000000..0e5ed78
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/gpu.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_GPU_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_GPU_HPP_INCLUDED
+
+// Copyright Eric Niebler 2014
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/config.hpp>
+
+#if !defined(BOOST_MPL_CFG_GPU_ENABLED) \
+
+#   define BOOST_MPL_CFG_GPU_ENABLED BOOST_GPU_ENABLED
+
+#endif
+
+#if defined __CUDACC__
+
+#    define BOOST_MPL_CFG_GPU 1
+
+#else
+
+#    define BOOST_MPL_CFG_GPU 0
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_GPU_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/has_apply.hpp b/vendor/pdalboost/boost/mpl/aux_/config/has_apply.hpp
new file mode 100644
index 0000000..4dc01c6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/has_apply.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_HAS_APPLY_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_HAS_APPLY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_HAS_APPLY) \
+    && (   defined(BOOST_MPL_CFG_NO_HAS_XXX) \
+        || BOOST_WORKAROUND(__EDG_VERSION__, < 300) \
+        || BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+        || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \
+        )
+
+#   define BOOST_MPL_CFG_NO_HAS_APPLY
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_HAS_APPLY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/has_xxx.hpp b/vendor/pdalboost/boost/mpl/aux_/config/has_xxx.hpp
new file mode 100644
index 0000000..b0f2f8c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/has_xxx.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+// Copyright David Abrahams 2002-2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/overload_resolution.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+// agurt, 11/jan/03: signals a stub-only 'has_xxx' implementation
+
+#if !defined(BOOST_MPL_CFG_NO_HAS_XXX) \
+    && (   defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION) \
+        || BOOST_WORKAROUND(__GNUC__, <= 2) \
+        || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) \
+        )
+
+#   define BOOST_MPL_CFG_NO_HAS_XXX
+#   define BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_HAS_XXX_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/integral.hpp b/vendor/pdalboost/boost/mpl/aux_/config/integral.hpp
new file mode 100644
index 0000000..144542d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/integral.hpp
@@ -0,0 +1,38 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_INTEGRAL_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_INTEGRAL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if    !defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))
+
+#   define BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS
+
+#endif
+
+#if    !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && ( BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+        || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \
+        )
+
+#   define BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_INTEGRAL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/intel.hpp b/vendor/pdalboost/boost/mpl/aux_/config/intel.hpp
new file mode 100644
index 0000000..5bd9159
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/intel.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+
+// BOOST_INTEL_CXX_VERSION is defined here:
+#include <boost/config.hpp>
+
+#endif // BOOST_MPL_AUX_CONFIG_INTEL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/lambda.hpp b/vendor/pdalboost/boost/mpl/aux_/config/lambda.hpp
new file mode 100644
index 0000000..93fbafe
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/lambda.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_LAMBDA_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_LAMBDA_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/ttp.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+// agurt, 15/jan/02: full-fledged implementation requires both 
+// template template parameters _and_ partial specialization
+
+#if    !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \
+    && (   defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \
+        || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+        )
+
+#   define BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_LAMBDA_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/msvc.hpp b/vendor/pdalboost/boost/mpl/aux_/config/msvc.hpp
new file mode 100644
index 0000000..8a6b924
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/msvc.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+
+// BOOST_MSVC is defined here:
+#include <boost/config.hpp>
+
+#endif // BOOST_MPL_AUX_CONFIG_MSVC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/msvc_typename.hpp b/vendor/pdalboost/boost/mpl/aux_/config/msvc_typename.hpp
new file mode 100644
index 0000000..feedc16
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/msvc_typename.hpp
@@ -0,0 +1,26 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+#   define BOOST_MSVC_TYPENAME
+#else
+#   define BOOST_MSVC_TYPENAME typename
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_MSVC_TYPENAME_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/nttp.hpp b/vendor/pdalboost/boost/mpl/aux_/config/nttp.hpp
new file mode 100644
index 0000000..9004795
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/nttp.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+// MSVC 6.5 ICE-s on the code as simple as this (see "aux_/nttp_decl.hpp"
+// for a workaround):
+//
+//    namespace std {
+//    template< typename Char > struct string;
+//    }
+//
+//    void foo(std::string<char>);
+//
+//    namespace pdalboost { namespace mpl {
+//    template< int > struct arg;
+//    }}
+
+#if    !defined(BOOST_MPL_CFG_NTTP_BUG) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+#   define BOOST_MPL_CFG_NTTP_BUG
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_NTTP_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/operators.hpp b/vendor/pdalboost/boost/mpl/aux_/config/operators.hpp
new file mode 100644
index 0000000..3fb9db3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/operators.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_OPERATORS_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_OPERATORS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING) \
+    && ( BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+        || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
+        || BOOST_WORKAROUND(__EDG_VERSION__, <= 245) \
+        || BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, <= 0x0295) \
+        || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \
+        || BOOST_WORKAROUND(__NVCC__, BOOST_TESTED_AT(1)) \
+        )
+
+#   define BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_OPERATORS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/overload_resolution.hpp b/vendor/pdalboost/boost/mpl/aux_/config/overload_resolution.hpp
new file mode 100644
index 0000000..61e4486
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/overload_resolution.hpp
@@ -0,0 +1,29 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if    !defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && (   BOOST_WORKAROUND(__BORLANDC__, < 0x590) \
+        || BOOST_WORKAROUND(__MWERKS__, < 0x3001) \
+        )
+
+#   define BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_OVERLOAD_RESOLUTION_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/pp_counter.hpp b/vendor/pdalboost/boost/mpl/aux_/config/pp_counter.hpp
new file mode 100644
index 0000000..e7fb8d6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/pp_counter.hpp
@@ -0,0 +1,26 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_PP_COUNTER_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_PP_COUNTER_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2006
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_AUX_PP_COUNTER)
+#   include <boost/mpl/aux_/config/msvc.hpp>
+#   if BOOST_WORKAROUND(BOOST_MSVC, >= 1300)
+#       define BOOST_MPL_AUX_PP_COUNTER() __COUNTER__
+#   else
+#       define BOOST_MPL_AUX_PP_COUNTER() __LINE__
+#   endif
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_PP_COUNTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/preprocessor.hpp b/vendor/pdalboost/boost/mpl/aux_/config/preprocessor.hpp
new file mode 100644
index 0000000..82ebc68
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/preprocessor.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_PREPROCESSOR_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_PREPROCESSOR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION) \
+    && (   BOOST_WORKAROUND(__MWERKS__, <= 0x3003) \
+        || BOOST_WORKAROUND(__BORLANDC__, < 0x582) \
+        || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(502)) \
+        )
+
+#   define BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION
+
+#endif
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+#   define BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES
+#endif
+
+#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING) \
+    && BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+#   define BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING
+#endif
+
+
+#endif // BOOST_MPL_AUX_CONFIG_PREPROCESSOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/static_constant.hpp b/vendor/pdalboost/boost/mpl/aux_/config/static_constant.hpp
new file mode 100644
index 0000000..ece38fb
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/static_constant.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+// BOOST_STATIC_CONSTANT is defined here:
+#   include <boost/config.hpp>
+#else
+// undef the macro for the preprocessing mode
+#   undef BOOST_STATIC_CONSTANT
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_STATIC_CONSTANT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/ttp.hpp b/vendor/pdalboost/boost/mpl/aux_/config/ttp.hpp
new file mode 100644
index 0000000..3aff3f8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/ttp.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_TTP_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_TTP_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \
+    && ( defined(BOOST_NO_TEMPLATE_TEMPLATES) \
+      || BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x590) ) \
+       )
+
+#   define BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS
+
+#endif
+
+
+#if    !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && (   BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0302)) \
+        || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
+        )
+
+#   define BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_TTP_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/typeof.hpp b/vendor/pdalboost/boost/mpl/aux_/config/typeof.hpp
new file mode 100644
index 0000000..cde6179
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/typeof.hpp
@@ -0,0 +1,38 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_TYPEOF_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_TYPEOF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/gcc.hpp>
+
+#if !defined(BOOST_MPL_CFG_HAS_TYPEOF) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && (   defined(BOOST_MPL_CFG_GCC) && BOOST_MPL_CFG_GCC >= 0x0302 \
+        || defined(__MWERKS__) && __MWERKS__ >= 0x3000 \
+        )
+
+#   define BOOST_MPL_CFG_HAS_TYPEOF
+
+#endif
+
+
+#if !defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && defined(BOOST_MPL_CFG_HAS_TYPEOF)
+
+#   define BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#endif
+
+#endif // BOOST_MPL_AUX_CONFIG_TYPEOF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/use_preprocessed.hpp b/vendor/pdalboost/boost/mpl/aux_/config/use_preprocessed.hpp
new file mode 100644
index 0000000..8fd5c60
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/use_preprocessed.hpp
@@ -0,0 +1,19 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+// #define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_AUX_CONFIG_USE_PREPROCESSED_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/config/workaround.hpp b/vendor/pdalboost/boost/mpl/aux_/config/workaround.hpp
new file mode 100644
index 0000000..82c6329
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/config/workaround.hpp
@@ -0,0 +1,19 @@
+
+#ifndef BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/detail/workaround.hpp>
+
+#endif // BOOST_MPL_AUX_CONFIG_WORKAROUND_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/contains_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/contains_impl.hpp
new file mode 100644
index 0000000..e3fe62f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/contains_impl.hpp
@@ -0,0 +1,61 @@
+
+#ifndef BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED
+
+// Copyright Eric Friedman 2002
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/contains_fwd.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/find.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag >
+struct contains_impl
+{
+    template< typename Sequence, typename T > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+        : not_< is_same<
+              typename find<Sequence,T>::type
+            , typename end<Sequence>::type
+            > >
+    {
+#else
+    {
+        typedef not_< is_same<
+              typename find<Sequence,T>::type
+            , typename end<Sequence>::type
+            > > type;
+
+        BOOST_STATIC_CONSTANT(bool, value = 
+              (not_< is_same<
+                  typename find<Sequence,T>::type
+                , typename end<Sequence>::type
+                > >::value)
+            );
+#endif
+    };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,contains_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/count_args.hpp b/vendor/pdalboost/boost/mpl/aux_/count_args.hpp
new file mode 100644
index 0000000..b432d37
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/count_args.hpp
@@ -0,0 +1,105 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/preprocessor/expr_if.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#if !defined(AUX778076_COUNT_ARGS_PARAM_NAME)
+#   define AUX778076_COUNT_ARGS_PARAM_NAME T
+#endif
+
+#if !defined(AUX778076_COUNT_ARGS_TEMPLATE_PARAM)
+#   define AUX778076_COUNT_ARGS_TEMPLATE_PARAM typename AUX778076_COUNT_ARGS_PARAM_NAME
+#endif
+
+// local macros, #undef-ined at the end of the header
+
+#if !defined(AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES)
+
+#   include <boost/mpl/aux_/preprocessor/repeat.hpp>
+#   include <boost/mpl/aux_/preprocessor/params.hpp>
+
+#   define AUX778076_COUNT_ARGS_REPEAT BOOST_MPL_PP_REPEAT
+#   define AUX778076_COUNT_ARGS_PARAMS(param) \
+    BOOST_MPL_PP_PARAMS( \
+          AUX778076_COUNT_ARGS_ARITY \
+        , param \
+        ) \
+    /**/
+
+#else
+
+#   include <boost/preprocessor/enum_shifted_params.hpp>
+#   include <boost/preprocessor/repeat.hpp>
+#   include <boost/preprocessor/inc.hpp>
+
+#   define AUX778076_COUNT_ARGS_REPEAT BOOST_PP_REPEAT
+#   define AUX778076_COUNT_ARGS_PARAMS(param) \
+    BOOST_PP_ENUM_SHIFTED_PARAMS( \
+          BOOST_PP_INC(AUX778076_COUNT_ARGS_ARITY) \
+        , param \
+        ) \
+    /**/
+
+#endif // AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES
+
+
+#define AUX778076_IS_ARG_TEMPLATE_NAME \
+    BOOST_PP_CAT(is_,BOOST_PP_CAT(AUX778076_COUNT_ARGS_PREFIX,_arg)) \
+/**/
+
+#define AUX778076_COUNT_ARGS_FUNC(unused, i, param) \
+    BOOST_PP_EXPR_IF(i, +) \
+    AUX778076_IS_ARG_TEMPLATE_NAME<BOOST_PP_CAT(param,BOOST_PP_INC(i))>::value \
+/**/
+
+// is_<xxx>_arg
+template< AUX778076_COUNT_ARGS_TEMPLATE_PARAM >
+struct AUX778076_IS_ARG_TEMPLATE_NAME
+{
+    BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template<>
+struct AUX778076_IS_ARG_TEMPLATE_NAME<AUX778076_COUNT_ARGS_DEFAULT>
+{
+    BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+// <xxx>_count_args
+template<
+      AUX778076_COUNT_ARGS_PARAMS(AUX778076_COUNT_ARGS_TEMPLATE_PARAM)
+    >
+struct BOOST_PP_CAT(AUX778076_COUNT_ARGS_PREFIX,_count_args)
+{
+    BOOST_STATIC_CONSTANT(int, value = AUX778076_COUNT_ARGS_REPEAT(
+          AUX778076_COUNT_ARGS_ARITY
+        , AUX778076_COUNT_ARGS_FUNC
+        , AUX778076_COUNT_ARGS_PARAM_NAME
+        ));
+};
+
+#undef AUX778076_COUNT_ARGS_FUNC
+#undef AUX778076_IS_ARG_TEMPLATE_NAME
+#undef AUX778076_COUNT_ARGS_PARAMS
+#undef AUX778076_COUNT_ARGS_REPEAT
+
+#undef AUX778076_COUNT_ARGS_ARITY
+#undef AUX778076_COUNT_ARGS_DEFAULT
+#undef AUX778076_COUNT_ARGS_PREFIX
+#undef AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES
+#undef AUX778076_COUNT_ARGS_TEMPLATE_PARAM
+#undef AUX778076_COUNT_ARGS_PARAM_NAME
diff --git a/vendor/pdalboost/boost/mpl/aux_/empty_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/empty_impl.hpp
new file mode 100644
index 0000000..6380dd0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/empty_impl.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_AUX_EMPTY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_EMPTY_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/empty_fwd.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// default implementation; conrete sequences might override it by 
+// specializing either the 'empty_impl' or the primary 'empty' template
+
+template< typename Tag >
+struct empty_impl
+{
+    template< typename Sequence > struct apply
+        : is_same<
+              typename begin<Sequence>::type
+            , typename end<Sequence>::type
+            >
+    {
+    };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1,empty_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_EMPTY_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/find_if_pred.hpp b/vendor/pdalboost/boost/mpl/aux_/find_if_pred.hpp
new file mode 100644
index 0000000..591d008
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/find_if_pred.hpp
@@ -0,0 +1,31 @@
+
+#ifndef BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED
+#define BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Eric Friedman 2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+#include <boost/mpl/aux_/iter_apply.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename Predicate >
+struct find_if_pred
+{
+    template< typename Iterator >
+    struct apply
+    {
+        typedef not_< aux::iter_apply1<Predicate,Iterator> > type;
+    };
+};
+
+}}}
+
+#endif // BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/fold_impl.hpp
new file mode 100644
index 0000000..97c88c5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/fold_impl.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/next_prior.hpp>
+#   include <boost/mpl/apply.hpp>
+#   include <boost/mpl/deref.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#       include <boost/mpl/if.hpp>
+#       include <boost/type_traits/is_same.hpp>
+#   endif
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER fold_impl.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   define AUX778076_FOLD_IMPL_OP(iter) typename deref<iter>::type
+#   define AUX778076_FOLD_IMPL_NAME_PREFIX fold
+#   include <boost/mpl/aux_/fold_impl_body.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/fold_impl_body.hpp b/vendor/pdalboost/boost/mpl/aux_/fold_impl_body.hpp
new file mode 100644
index 0000000..2cb8a68
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/fold_impl_body.hpp
@@ -0,0 +1,365 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#   include <boost/mpl/limits/unrolling.hpp>
+#   include <boost/mpl/aux_/preprocessor/repeat.hpp>
+#   include <boost/mpl/aux_/config/workaround.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/mpl/aux_/nttp_decl.hpp>
+#   include <boost/mpl/aux_/config/eti.hpp>
+
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/dec.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+// local macros, #undef-ined at the end of the header
+
+#   define AUX778076_ITER_FOLD_STEP(unused, i, unused2) \
+    typedef typename apply2< \
+          ForwardOp \
+        , BOOST_PP_CAT(state,i) \
+        , AUX778076_FOLD_IMPL_OP(BOOST_PP_CAT(iter,i)) \
+        >::type BOOST_PP_CAT(state,BOOST_PP_INC(i)); \
+    typedef typename mpl::next<BOOST_PP_CAT(iter,i)>::type \
+        BOOST_PP_CAT(iter,BOOST_PP_INC(i)); \
+    /**/
+
+#   define AUX778076_FOLD_IMPL_NAME \
+    BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_impl) \
+    /**/
+
+#   define AUX778076_FOLD_CHUNK_NAME \
+    BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_chunk) \
+    /**/
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+template<
+      BOOST_MPL_AUX_NTTP_DECL(int, N)
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    > 
+struct AUX778076_FOLD_IMPL_NAME;
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+#   if !BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/fold_impl_body.hpp>))
+#   include BOOST_PP_ITERATE()
+
+// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
+template<
+      BOOST_MPL_AUX_NTTP_DECL(int, N)
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    > 
+struct AUX778076_FOLD_IMPL_NAME
+{
+    typedef AUX778076_FOLD_IMPL_NAME<
+          BOOST_MPL_LIMIT_UNROLLING
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef AUX778076_FOLD_IMPL_NAME<
+          ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+        
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+// fallback implementation for sequences of unknown size
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    > 
+struct AUX778076_FOLD_IMPL_NAME<-1,First,Last,State,ForwardOp>
+    : AUX778076_FOLD_IMPL_NAME<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    > 
+struct AUX778076_FOLD_IMPL_NAME<-1,Last,Last,State,ForwardOp>
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+#   else // BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+
+// Borland have some serious problems with the unrolled version, so
+// we always use a basic implementation
+template<
+      BOOST_MPL_AUX_NTTP_DECL(int, N)
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    > 
+struct AUX778076_FOLD_IMPL_NAME
+{
+    typedef AUX778076_FOLD_IMPL_NAME<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+    typedef state type;
+};
+
+template<
+      BOOST_MPL_AUX_NTTP_DECL(int, N)
+     , typename Last
+    , typename State
+    , typename ForwardOp
+    > 
+struct AUX778076_FOLD_IMPL_NAME<N,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+    typedef state type;
+};
+
+#   endif // BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+ 
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) >
+struct AUX778076_FOLD_CHUNK_NAME;
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/fold_impl_body.hpp>))
+#   include BOOST_PP_ITERATE()
+
+// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) > 
+struct AUX778076_FOLD_CHUNK_NAME
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        > 
+    struct result_
+    {
+        typedef AUX778076_FOLD_IMPL_NAME<
+              BOOST_MPL_LIMIT_UNROLLING
+            , First
+            , Last
+            , State
+            , ForwardOp
+            > chunk_;
+
+        typedef AUX778076_FOLD_IMPL_NAME<
+              ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )
+            , typename chunk_::iterator
+            , Last
+            , typename chunk_::state
+            , ForwardOp
+            > res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+// fallback implementation for sequences of unknown size
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    > 
+struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step);
+
+template<
+      typename Last
+    , typename State
+    >
+struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step)
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<> 
+struct AUX778076_FOLD_CHUNK_NAME<-1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        > 
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same<First,Last>::type
+            , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step)<Last,State>
+            , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step)<First,Last,State,ForwardOp>
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+    /// ETI workaround
+    template<> struct result_<int,int,int,int>
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+#endif
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    > 
+struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step)
+{
+    // can't inherit here - it breaks MSVC 7.0
+    typedef AUX778076_FOLD_CHUNK_NAME<-1>::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type
+        , ForwardOp
+        > chunk_;
+
+    typedef typename chunk_::state state;
+    typedef typename chunk_::iterator iterator;
+};
+
+template<
+      BOOST_MPL_AUX_NTTP_DECL(int, N)
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    > 
+struct AUX778076_FOLD_IMPL_NAME
+    : AUX778076_FOLD_CHUNK_NAME<N>
+        ::template result_<First,Last,State,ForwardOp>
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}}}
+
+#   undef AUX778076_FOLD_IMPL_NAME
+#   undef AUX778076_FOLD_CHUNK_NAME
+#   undef AUX778076_ITER_FOLD_STEP
+
+#undef AUX778076_FOLD_IMPL_OP
+#undef AUX778076_FOLD_IMPL_NAME_PREFIX
+
+///// iteration
+
+#else
+
+#   define n_ BOOST_PP_FRAME_ITERATION(1)
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct AUX778076_FOLD_IMPL_NAME<n_,First,Last,State,ForwardOp>
+{
+    typedef First iter0;
+    typedef State state0;
+
+    BOOST_MPL_PP_REPEAT(n_, AUX778076_ITER_FOLD_STEP, unused)
+
+    typedef BOOST_PP_CAT(state,n_) state;
+    typedef BOOST_PP_CAT(iter,n_) iterator;
+};
+
+#else
+
+template<> struct AUX778076_FOLD_CHUNK_NAME<n_>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+
+        BOOST_MPL_PP_REPEAT(n_, AUX778076_ITER_FOLD_STEP, unused)
+
+        typedef BOOST_PP_CAT(state,n_) state;
+        typedef BOOST_PP_CAT(iter,n_) iterator;
+    };
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+    /// ETI workaround
+    template<> struct result_<int,int,int,int>
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+#endif
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#   undef n_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/aux_/full_lambda.hpp b/vendor/pdalboost/boost/mpl/aux_/full_lambda.hpp
new file mode 100644
index 0000000..74cc38f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/full_lambda.hpp
@@ -0,0 +1,354 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED
+#define BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/lambda_fwd.hpp>
+#   include <boost/mpl/bind_fwd.hpp>
+#   include <boost/mpl/protect.hpp>
+#   include <boost/mpl/quote.hpp>
+#   include <boost/mpl/arg.hpp>
+#   include <boost/mpl/bool.hpp>
+#   include <boost/mpl/int_fwd.hpp>
+#   include <boost/mpl/aux_/template_arity.hpp>
+#   include <boost/mpl/aux_/na_spec.hpp>
+#   include <boost/mpl/aux_/config/ttp.hpp>
+#   if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
+#       include <boost/mpl/if.hpp>
+#   endif
+#endif
+
+#include <boost/mpl/aux_/lambda_arity_param.hpp>
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER full_lambda.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/limits/arity.hpp>
+#   include <boost/mpl/aux_/preprocessor/default_params.hpp>
+#   include <boost/mpl/aux_/preprocessor/params.hpp>
+#   include <boost/mpl/aux_/preprocessor/enum.hpp>
+#   include <boost/mpl/aux_/preprocessor/repeat.hpp>
+#   include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>
+
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/comma_if.hpp>
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// local macros, #undef-ined at the end of the header
+#   define AUX778076_LAMBDA_PARAMS(i_, param) \
+    BOOST_MPL_PP_PARAMS(i_, param) \
+    /**/
+
+#   define AUX778076_BIND_PARAMS(param) \
+    BOOST_MPL_PP_PARAMS( \
+          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+        , param \
+        ) \
+    /**/
+
+#   define AUX778076_BIND_N_PARAMS(i_, param) \
+    BOOST_PP_COMMA_IF(i_) \
+    BOOST_MPL_PP_PARAMS(i_, param) \
+    /**/
+
+#   define AUX778076_ARITY_PARAM(param) \
+    BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param) \
+    /**/
+
+
+#define n_ BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+namespace aux {
+
+template<
+      BOOST_MPL_PP_DEFAULT_PARAMS(n_,bool C,false)
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< BOOST_MPL_PP_ENUM(n_,false) >
+    : false_
+{
+};
+
+} // namespace aux
+#undef n_
+
+template<
+      typename T
+    , typename Tag
+    AUX778076_ARITY_PARAM(typename Arity)
+    >
+struct lambda
+{
+    typedef false_ is_le;
+    typedef T result_;
+    typedef T type;
+};
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+
+template< int N, typename Tag >
+struct lambda< arg<N>,Tag AUX778076_ARITY_PARAM(int_<-1>) >
+{
+    typedef true_ is_le;
+    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+    typedef mpl::protect<result_> type; 
+};
+
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/aux_/full_lambda.hpp>))
+#include BOOST_PP_ITERATE()
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>,Tag AUX778076_ARITY_PARAM(int_<1>) >
+{
+    typedef false_ is_le;
+    typedef mpl::protect<T> result_;
+    typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+template<
+      typename F, AUX778076_BIND_PARAMS(typename T)
+    , typename Tag
+    >
+struct lambda<
+          bind<F,AUX778076_BIND_PARAMS(T)>
+        , Tag
+        AUX778076_ARITY_PARAM(int_<BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)>)
+        >
+{
+    typedef false_ is_le;
+    typedef bind<F, AUX778076_BIND_PARAMS(T)> result_;
+    typedef result_ type;
+};
+
+
+#if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
+
+template<
+      typename F
+    , typename Tag1
+    , typename Tag2
+    , typename Arity
+    >
+struct lambda<
+          lambda<F,Tag1,Arity>
+        , Tag2
+        , int_<3>
+        >
+{
+    typedef lambda< F,Tag2 > l1;
+    typedef lambda< Tag1,Tag2 > l2;
+
+    typedef typename l1::is_le is_le;
+    typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;
+    typedef lambda< typename if_<is_le,arity_,Arity>::type,Tag2 > l3;
+    
+    typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+#elif !defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)
+
+/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
+template<
+      typename F, typename Tag1, typename Tag2
+    >
+struct lambda<
+          lambda< F,Tag1 >
+        , Tag2
+        >
+{
+    typedef lambda< F,Tag2 > l1;
+    typedef lambda< Tag1,Tag2 > l2;
+    
+    typedef typename l1::is_le is_le;
+    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+#endif
+
+#   undef AUX778076_ARITY_PARAM
+#   undef AUX778076_BIND_N_PARAMS
+#   undef AUX778076_BIND_PARAMS
+#   undef AUX778076_LAMBDA_PARAMS
+
+#if !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+#else
+BOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)
+#endif
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_FULL_LAMBDA_HPP_INCLUDED
+
+///// iteration, depth == 1
+
+// For gcc 4.4 compatability, we must include the
+// BOOST_PP_ITERATION_DEPTH test inside an #else clause.
+#else // BOOST_PP_IS_ITERATING
+#if BOOST_PP_ITERATION_DEPTH() == 1
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+#if i_ > 0
+
+namespace aux {
+
+#   define AUX778076_RESULT(unused, i_, T) \
+    BOOST_PP_COMMA_IF(i_) \
+    typename BOOST_PP_CAT(T, BOOST_PP_INC(i_))::result_ \
+    /**/
+
+#   define AUX778076_TYPE(unused, i_, T) \
+    BOOST_PP_COMMA_IF(i_) \
+    typename BOOST_PP_CAT(T, BOOST_PP_INC(i_))::type \
+    /**/
+
+template<
+      typename IsLE, typename Tag
+    , template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F
+    , AUX778076_LAMBDA_PARAMS(i_, typename L)
+    >
+struct BOOST_PP_CAT(le_result,i_)
+{
+    typedef F<
+          BOOST_MPL_PP_REPEAT(i_, AUX778076_TYPE, L)
+        > result_;
+    
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F
+    , AUX778076_LAMBDA_PARAMS(i_, typename L)
+    >
+struct BOOST_PP_CAT(le_result,i_)< true_,Tag,F,AUX778076_LAMBDA_PARAMS(i_, L) >
+{
+    typedef BOOST_PP_CAT(bind,i_)<
+          BOOST_PP_CAT(quote,i_)<F,Tag>
+        , BOOST_MPL_PP_REPEAT(i_, AUX778076_RESULT, L)
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+#   undef AUX778076_TYPE
+#   undef AUX778076_RESULT
+
+} // namespace aux
+
+
+#   define AUX778076_LAMBDA_TYPEDEF(unused, i_, T) \
+    typedef lambda< BOOST_PP_CAT(T, BOOST_PP_INC(i_)), Tag > \
+        BOOST_PP_CAT(l,BOOST_PP_INC(i_)); \
+/**/
+
+#   define AUX778076_IS_LE_TYPEDEF(unused, i_, unused2) \
+    typedef typename BOOST_PP_CAT(l,BOOST_PP_INC(i_))::is_le \
+        BOOST_PP_CAT(is_le,BOOST_PP_INC(i_)); \
+/**/
+
+#   define AUX778076_IS_LAMBDA_EXPR(unused, i_, unused2) \
+    BOOST_PP_COMMA_IF(i_) \
+    BOOST_PP_CAT(is_le,BOOST_PP_INC(i_))::value \
+/**/
+
+template<
+      template< AUX778076_LAMBDA_PARAMS(i_, typename P) > class F
+    , AUX778076_LAMBDA_PARAMS(i_, typename T)
+    , typename Tag
+    >
+struct lambda< 
+          F<AUX778076_LAMBDA_PARAMS(i_, T)>
+        , Tag
+        AUX778076_ARITY_PARAM(int_<i_>)
+        >
+{
+    BOOST_MPL_PP_REPEAT(i_, AUX778076_LAMBDA_TYPEDEF, T)
+    BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LE_TYPEDEF, unused)
+
+    typedef typename aux::lambda_or<
+          BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LAMBDA_EXPR, unused)
+        >::type is_le;
+
+    typedef aux::BOOST_PP_CAT(le_result,i_)<
+          is_le, Tag, F, AUX778076_LAMBDA_PARAMS(i_, l)
+        > le_result_;
+    
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+
+#   undef AUX778076_IS_LAMBDA_EXPR
+#   undef AUX778076_IS_LE_TYPEDEF
+#   undef AUX778076_LAMBDA_TYPEDEF
+
+#endif // i_ > 0
+
+template<
+      typename F AUX778076_BIND_N_PARAMS(i_, typename T)
+    , typename Tag
+    >
+struct lambda<
+          BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_, T)>
+        , Tag
+        AUX778076_ARITY_PARAM(int_<BOOST_PP_INC(i_)>)
+        >
+{
+    typedef false_ is_le;
+    typedef BOOST_PP_CAT(bind,i_)<
+          F
+        AUX778076_BIND_N_PARAMS(i_, T)
+        > result_;
+        
+    typedef result_ type;
+};
+
+#undef i_
+#endif // BOOST_PP_ITERATION_DEPTH()
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/aux_/has_apply.hpp b/vendor/pdalboost/boost/mpl/aux_/has_apply.hpp
new file mode 100644
index 0000000..e026a38
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/has_apply.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_AUX_HAS_APPLY_HPP_INCLUDED
+#define BOOST_MPL_AUX_HAS_APPLY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/aux_/config/has_apply.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+#if !defined(BOOST_MPL_CFG_NO_HAS_APPLY)
+BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_apply, apply, false)
+#else
+template< typename T, typename fallback_ = false_ >
+struct has_apply
+    : fallback_
+{
+};
+#endif
+}}}
+
+#endif // BOOST_MPL_AUX_HAS_APPLY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/has_begin.hpp b/vendor/pdalboost/boost/mpl/aux_/has_begin.hpp
new file mode 100644
index 0000000..5cd4de5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/has_begin.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_AUX_HAS_BEGIN_HPP_INCLUDED
+#define BOOST_MPL_AUX_HAS_BEGIN_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_begin, begin, true)
+}}}
+
+#endif // BOOST_MPL_AUX_HAS_BEGIN_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/has_key_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/has_key_impl.hpp
new file mode 100644
index 0000000..ad2547e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/has_key_impl.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_AUX_HAS_KEY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_HAS_KEY_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+// Copyright David Abrahams 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/has_key_fwd.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// no default implementation; the definition is needed to make MSVC happy 
+
+template< typename Tag > struct has_key_impl
+{
+    template< typename AssociativeSequence, typename Key > struct apply;
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,has_key_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_HAS_KEY_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/has_rebind.hpp b/vendor/pdalboost/boost/mpl/aux_/has_rebind.hpp
new file mode 100644
index 0000000..d280c91
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/has_rebind.hpp
@@ -0,0 +1,99 @@
+
+#ifndef BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED
+#define BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/intel.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION)
+#   include <boost/mpl/has_xxx.hpp>
+#elif BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+#   include <boost/mpl/has_xxx.hpp>
+#   include <boost/mpl/if.hpp>
+#   include <boost/mpl/bool.hpp>
+#   include <boost/mpl/aux_/msvc_is_class.hpp>
+#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))
+#   include <boost/mpl/if.hpp>
+#   include <boost/mpl/bool.hpp>
+#   include <boost/mpl/aux_/yes_no.hpp>
+#   include <boost/mpl/aux_/config/static_constant.hpp>
+#   include <boost/type_traits/is_class.hpp>
+#else
+#   include <boost/mpl/aux_/type_wrapper.hpp>
+#   include <boost/mpl/aux_/yes_no.hpp>
+#   include <boost/mpl/aux_/config/static_constant.hpp>
+#endif
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION)
+
+BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_rebind, rebind, false)
+
+#elif BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_rebind_impl, rebind, false)
+
+template< typename T >
+struct has_rebind
+    : if_< 
+          msvc_is_class<T>
+        , has_rebind_impl<T>
+        , bool_<false>
+        >::type
+{
+};
+
+#else // the rest
+
+template< typename T > struct has_rebind_tag {};
+no_tag operator|(has_rebind_tag<int>, void const volatile*);
+
+#   if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))
+template< typename T >
+struct has_rebind
+{
+    static has_rebind_tag<T>* get();
+    BOOST_STATIC_CONSTANT(bool, value = 
+          sizeof(has_rebind_tag<int>() | get()) == sizeof(yes_tag)
+        );
+};
+#   else // __BORLANDC__
+template< typename T >
+struct has_rebind_impl
+{
+    static T* get();
+    BOOST_STATIC_CONSTANT(bool, value = 
+          sizeof(has_rebind_tag<int>() | get()) == sizeof(yes_tag)
+        );
+};
+
+template< typename T >
+struct has_rebind
+    : if_< 
+          is_class<T>
+        , has_rebind_impl<T>
+        , bool_<false>
+        >::type
+{
+};
+#   endif // __BORLANDC__
+
+#endif
+
+}}}
+
+#endif // BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/has_size.hpp b/vendor/pdalboost/boost/mpl/aux_/has_size.hpp
new file mode 100644
index 0000000..fad7f0a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/has_size.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED
+#define BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+BOOST_MPL_HAS_XXX_TRAIT_DEF(size)
+}}}
+
+#endif // BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/has_tag.hpp b/vendor/pdalboost/boost/mpl/aux_/has_tag.hpp
new file mode 100644
index 0000000..5d068ea
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/has_tag.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_AUX_HAS_TAG_HPP_INCLUDED
+#define BOOST_MPL_AUX_HAS_TAG_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_tag, tag, false)
+}}}
+
+#endif // BOOST_MPL_AUX_HAS_TAG_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/has_type.hpp b/vendor/pdalboost/boost/mpl/aux_/has_type.hpp
new file mode 100644
index 0000000..bf6ce8b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/has_type.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_AUX_HAS_TYPE_HPP_INCLUDED
+#define BOOST_MPL_AUX_HAS_TYPE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_type, type, true)
+}}}
+
+#endif // BOOST_MPL_AUX_HAS_TYPE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/include_preprocessed.hpp b/vendor/pdalboost/boost/mpl/aux_/include_preprocessed.hpp
new file mode 100644
index 0000000..c13434c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/include_preprocessed.hpp
@@ -0,0 +1,42 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// Copyright Aleksey Gurtovoy 2000-2006
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/compiler.hpp>
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/stringize.hpp>
+
+#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
+#   define AUX778076_PREPROCESSED_HEADER \
+    BOOST_MPL_CFG_COMPILER_DIR/BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+#else
+#   define AUX778076_PREPROCESSED_HEADER \
+    BOOST_PP_CAT(BOOST_MPL_CFG_COMPILER_DIR,/)##BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+#endif
+
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))
+#   define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/aux_/preprocessed/AUX778076_PREPROCESSED_HEADER)
+#   include AUX778076_INCLUDE_STRING
+#   undef AUX778076_INCLUDE_STRING
+#else
+#   include BOOST_PP_STRINGIZE(boost/mpl/aux_/preprocessed/AUX778076_PREPROCESSED_HEADER)
+#endif
+
+#   undef AUX778076_PREPROCESSED_HEADER
+
+#undef BOOST_MPL_PREPROCESSED_HEADER
diff --git a/vendor/pdalboost/boost/mpl/aux_/insert_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/insert_impl.hpp
new file mode 100644
index 0000000..6fb5f12
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/insert_impl.hpp
@@ -0,0 +1,68 @@
+
+#ifndef BOOST_MPL_INSERT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_INSERT_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/reverse_fold.hpp>
+#include <boost/mpl/iterator_range.hpp>
+#include <boost/mpl/clear.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// default implementation; conrete sequences might override it by 
+// specializing either the 'insert_impl' or the primary 'insert' template
+
+template< typename Tag >
+struct insert_impl
+{
+    template<
+          typename Sequence
+        , typename Pos
+        , typename T
+        >
+    struct apply
+    {
+        typedef iterator_range<
+              typename begin<Sequence>::type
+            , Pos
+            > first_half_;
+
+        typedef iterator_range<
+              Pos
+            , typename end<Sequence>::type
+            > second_half_;
+
+        typedef typename reverse_fold<
+              second_half_
+            , typename clear<Sequence>::type
+            , push_front<_,_>
+            >::type half_sequence_;
+
+        typedef typename reverse_fold<
+              first_half_
+            , typename push_front<half_sequence_,T>::type
+            , push_front<_,_>
+            >::type type;
+    };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(3,insert_impl)
+
+}}
+
+#endif // BOOST_MPL_INSERT_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/inserter_algorithm.hpp b/vendor/pdalboost/boost/mpl/aux_/inserter_algorithm.hpp
new file mode 100644
index 0000000..20ae816
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/inserter_algorithm.hpp
@@ -0,0 +1,159 @@
+
+#ifndef BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED
+#define BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/back_inserter.hpp>
+#include <boost/mpl/front_inserter.hpp>
+#include <boost/mpl/push_back.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/mpl/back_inserter.hpp>
+#include <boost/mpl/front_inserter.hpp>
+#include <boost/mpl/clear.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/common_name_wknd.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/preprocessor/default_params.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+#include <boost/preprocessor/arithmetic/dec.hpp>
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+#   define BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(arity, name) \
+BOOST_MPL_AUX_COMMON_NAME_WKND(name) \
+template< \
+      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \
+    > \
+struct name \
+    : aux::name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \
+{ \
+}; \
+\
+template< \
+      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \
+    > \
+struct name< BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P),na > \
+    : if_< has_push_back< typename clear<P1>::type> \
+        , aux::name##_impl< \
+              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+            , back_inserter< typename clear<P1>::type > \
+            > \
+        , aux::reverse_##name##_impl< \
+              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+            , front_inserter< typename clear<P1>::type > \
+            > \
+        >::type \
+{ \
+}; \
+\
+template< \
+      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \
+    > \
+struct reverse_##name \
+    : aux::reverse_##name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \
+{ \
+}; \
+\
+template< \
+      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \
+    > \
+struct reverse_##name< BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P),na > \
+    : if_< has_push_back<P1> \
+        , aux::reverse_##name##_impl< \
+              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+            , back_inserter< typename clear<P1>::type > \
+            > \
+        , aux::name##_impl< \
+              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+            , front_inserter< typename clear<P1>::type > \
+            > \
+        >::type \
+{ \
+}; \
+BOOST_MPL_AUX_NA_SPEC(arity, name) \
+BOOST_MPL_AUX_NA_SPEC(arity, reverse_##name) \
+/**/
+
+#else
+
+#   define BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(arity, name) \
+BOOST_MPL_AUX_COMMON_NAME_WKND(name) \
+template< \
+      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \
+    > \
+struct def_##name##_impl \
+    : if_< has_push_back<P1> \
+        , aux::name##_impl< \
+              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+            , back_inserter< typename clear<P1>::type > \
+            > \
+        , aux::reverse_##name##_impl< \
+              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+            , front_inserter< typename clear<P1>::type > \
+            > \
+        >::type \
+{ \
+}; \
+\
+template< \
+      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \
+    > \
+struct name \
+{ \
+    typedef typename eval_if< \
+          is_na<BOOST_PP_CAT(P, arity)> \
+        , def_##name##_impl<BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P)> \
+        , aux::name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \
+        >::type type; \
+}; \
+\
+template< \
+      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \
+    > \
+struct def_reverse_##name##_impl \
+    : if_< has_push_back<P1> \
+        , aux::reverse_##name##_impl< \
+              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+            , back_inserter< typename clear<P1>::type > \
+            > \
+        , aux::name##_impl< \
+              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+            , front_inserter< typename clear<P1>::type > \
+            > \
+        >::type \
+{ \
+}; \
+template< \
+      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \
+    > \
+struct reverse_##name \
+{ \
+    typedef typename eval_if< \
+          is_na<BOOST_PP_CAT(P, arity)> \
+        , def_reverse_##name##_impl<BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P)> \
+        , aux::reverse_##name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \
+        >::type type; \
+}; \
+BOOST_MPL_AUX_NA_SPEC(arity, name) \
+BOOST_MPL_AUX_NA_SPEC(arity, reverse_##name) \
+/**/
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/integral_wrapper.hpp b/vendor/pdalboost/boost/mpl/aux_/integral_wrapper.hpp
new file mode 100644
index 0000000..6bc05f7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/integral_wrapper.hpp
@@ -0,0 +1,93 @@
+
+// Copyright Aleksey Gurtovoy 2000-2006
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
+
+#include <boost/mpl/integral_c_tag.hpp>
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+
+#if !defined(AUX_WRAPPER_NAME)
+#   define AUX_WRAPPER_NAME BOOST_PP_CAT(AUX_WRAPPER_VALUE_TYPE,_)
+#endif
+
+#if !defined(AUX_WRAPPER_PARAMS)
+#   define AUX_WRAPPER_PARAMS(N) BOOST_MPL_AUX_NTTP_DECL(AUX_WRAPPER_VALUE_TYPE, N)
+#endif
+
+#if !defined(AUX_WRAPPER_INST)
+#   if BOOST_WORKAROUND(__MWERKS__, <= 0x2407)
+#       define AUX_WRAPPER_INST(value) AUX_WRAPPER_NAME< value >
+#   else 
+#       define AUX_WRAPPER_INST(value) BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::AUX_WRAPPER_NAME< value >
+#   endif
+#endif
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+template< AUX_WRAPPER_PARAMS(N) >
+struct AUX_WRAPPER_NAME
+{
+    BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, value = N);
+// agurt, 08/mar/03: SGI MIPSpro C++ workaround, have to #ifdef because some 
+// other compilers (e.g. MSVC) are not particulary happy about it
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+    typedef struct AUX_WRAPPER_NAME type;
+#else
+    typedef AUX_WRAPPER_NAME type;
+#endif
+    typedef AUX_WRAPPER_VALUE_TYPE value_type;
+    typedef integral_c_tag tag;
+
+// have to #ifdef here: some compilers don't like the 'N + 1' form (MSVC),
+// while some other don't like 'value + 1' (Borland), and some don't like
+// either
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 243)
+ private:
+    BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, next_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N + 1)));
+    BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, prior_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N - 1)));
+ public:
+    typedef AUX_WRAPPER_INST(next_value) next;
+    typedef AUX_WRAPPER_INST(prior_value) prior;
+#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \
+    || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(502)) \
+    || (BOOST_WORKAROUND(__HP_aCC, <= 53800) && (BOOST_WORKAROUND(__hpxstd98, != 1)))
+    typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N + 1)) ) next;
+    typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N - 1)) ) prior;
+#else
+    typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value + 1)) ) next;
+    typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value - 1)) ) prior;
+#endif
+
+    // enables uniform function call syntax for families of overloaded 
+    // functions that return objects of both arithmetic ('int', 'long',
+    // 'double', etc.) and wrapped integral types (for an example, see 
+    // "mpl/example/power.cpp")
+    BOOST_CONSTEXPR operator AUX_WRAPPER_VALUE_TYPE() const { return static_cast<AUX_WRAPPER_VALUE_TYPE>(this->value); } 
+};
+
+#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
+template< AUX_WRAPPER_PARAMS(N) >
+AUX_WRAPPER_VALUE_TYPE const AUX_WRAPPER_INST(N)::value;
+#endif
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+#undef AUX_WRAPPER_NAME
+#undef AUX_WRAPPER_PARAMS
+#undef AUX_WRAPPER_INST
+#undef AUX_WRAPPER_VALUE_TYPE
diff --git a/vendor/pdalboost/boost/mpl/aux_/is_msvc_eti_arg.hpp b/vendor/pdalboost/boost/mpl/aux_/is_msvc_eti_arg.hpp
new file mode 100644
index 0000000..1f4607c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/is_msvc_eti_arg.hpp
@@ -0,0 +1,64 @@
+
+#ifndef BOOST_MPL_AUX_IS_MSVC_ETI_ARG_HPP_INCLUDED
+#define BOOST_MPL_AUX_IS_MSVC_ETI_ARG_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+
+template< typename T >
+struct is_msvc_eti_arg
+{ 
+    BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+#else // BOOST_MPL_CFG_MSVC_60_ETI_BUG
+
+struct eti_int_convertible
+{
+    eti_int_convertible(int);
+};
+
+template< typename T >
+struct is_msvc_eti_arg
+{ 
+    static no_tag test(...);
+    static yes_tag test(eti_int_convertible);
+    static T& get();
+
+    BOOST_STATIC_CONSTANT(bool, value = 
+          sizeof(test(get())) == sizeof(yes_tag)
+        );
+};
+
+#endif
+
+template<>
+struct is_msvc_eti_arg<int>
+{ 
+    BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+#endif // BOOST_MPL_CFG_MSVC_ETI_BUG
+
+}}}
+
+#endif // BOOST_MPL_AUX_IS_MSVC_ETI_ARG_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/iter_apply.hpp b/vendor/pdalboost/boost/mpl/aux_/iter_apply.hpp
new file mode 100644
index 0000000..3a3f702
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/iter_apply.hpp
@@ -0,0 +1,47 @@
+
+#ifndef BOOST_MPL_ITER_APPLY_HPP_INCLUDED
+#define BOOST_MPL_ITER_APPLY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/deref.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template<
+      typename F
+    , typename Iterator
+    >
+struct iter_apply1
+    : apply1< F,typename deref<Iterator>::type >
+{
+};
+
+template<
+      typename F
+    , typename Iterator1
+    , typename Iterator2
+    >
+struct iter_apply2
+    : apply2<
+          F
+        , typename deref<Iterator1>::type
+        , typename deref<Iterator2>::type
+        >
+{
+};
+
+}}}
+
+#endif // BOOST_MPL_ITER_APPLY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/iter_fold_if_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/iter_fold_if_impl.hpp
new file mode 100644
index 0000000..1a58433
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/iter_fold_if_impl.hpp
@@ -0,0 +1,210 @@
+
+#ifndef BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/identity.hpp>
+#   include <boost/mpl/next.hpp>
+#   include <boost/mpl/if.hpp>
+#   include <boost/mpl/apply.hpp>
+#   include <boost/mpl/aux_/value_wknd.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER iter_fold_if_impl.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/limits/unrolling.hpp>
+#   include <boost/preprocessor/arithmetic/sub.hpp>
+#   include <boost/preprocessor/repeat.hpp>
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/dec.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename Iterator, typename State >
+struct iter_fold_if_null_step
+{
+    typedef State state;
+    typedef Iterator iterator;
+};
+
+template< bool >
+struct iter_fold_if_step_impl
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef typename apply2<StateOp,State,Iterator>::type state;
+        typedef typename IteratorOp::type iterator;
+    };
+};
+
+template<>
+struct iter_fold_if_step_impl<false>
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef State state;
+        typedef Iterator iterator;
+    };
+};
+
+// agurt, 25/jun/02: MSVC 6.5 workaround, had to get rid of inheritance 
+// here and in 'iter_fold_if_backward_step', because sometimes it interfered 
+// with the "early template instantiation bug" in _really_ ugly ways
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_forward_step
+{
+    typedef typename apply2<Predicate,State,Iterator>::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,ForwardOp,mpl::next<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename BackwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_backward_step
+{
+    typedef typename apply2<Predicate,State,Iterator>::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,BackwardOp,identity<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+
+// local macros, #undef-ined at the end of the header
+
+#   define AUX_ITER_FOLD_FORWARD_STEP(unused, i, unused2) \
+    typedef iter_fold_if_forward_step< \
+          typename BOOST_PP_CAT(forward_step,i)::iterator \
+        , typename BOOST_PP_CAT(forward_step,i)::state \
+        , ForwardOp \
+        , ForwardPredicate \
+        > BOOST_PP_CAT(forward_step, BOOST_PP_INC(i)); \
+    /**/
+
+#   define AUX_ITER_FOLD_BACKWARD_STEP_FUNC(i) \
+    typedef iter_fold_if_backward_step< \
+          typename BOOST_PP_CAT(forward_step,BOOST_PP_DEC(i))::iterator \
+        , typename BOOST_PP_CAT(backward_step,i)::state \
+        , BackwardOp \
+        , BackwardPredicate \
+        > BOOST_PP_CAT(backward_step,BOOST_PP_DEC(i)); \
+    /**/
+
+#   define AUX_ITER_FOLD_BACKWARD_STEP(unused, i, unused2) \
+    AUX_ITER_FOLD_BACKWARD_STEP_FUNC( \
+        BOOST_PP_SUB_D(1,BOOST_MPL_LIMIT_UNROLLING,i) \
+        ) \
+    /**/
+
+#   define AUX_LAST_FORWARD_STEP \
+    BOOST_PP_CAT(forward_step, BOOST_MPL_LIMIT_UNROLLING) \
+    /**/
+
+#   define AUX_LAST_BACKWARD_STEP \
+    BOOST_PP_CAT(backward_step, BOOST_MPL_LIMIT_UNROLLING) \
+    /**/
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename ForwardPredicate
+    , typename BackwardOp
+    , typename BackwardPredicate
+    >
+struct iter_fold_if_impl
+{
+ private:
+    typedef iter_fold_if_null_step<Iterator,State> forward_step0;
+    BOOST_PP_REPEAT(
+          BOOST_MPL_LIMIT_UNROLLING
+        , AUX_ITER_FOLD_FORWARD_STEP
+        , unused
+        )
+    
+    typedef typename if_<
+          typename AUX_LAST_FORWARD_STEP::not_last
+        , iter_fold_if_impl<
+              typename AUX_LAST_FORWARD_STEP::iterator
+            , typename AUX_LAST_FORWARD_STEP::state
+            , ForwardOp
+            , ForwardPredicate
+            , BackwardOp
+            , BackwardPredicate
+            >
+        , iter_fold_if_null_step<
+              typename AUX_LAST_FORWARD_STEP::iterator
+            , typename AUX_LAST_FORWARD_STEP::state
+            >
+        >::type AUX_LAST_BACKWARD_STEP;
+
+    BOOST_PP_REPEAT(
+          BOOST_MPL_LIMIT_UNROLLING
+        , AUX_ITER_FOLD_BACKWARD_STEP
+        , unused
+        )
+
+ public:
+    typedef typename backward_step0::state state;
+    typedef typename AUX_LAST_BACKWARD_STEP::iterator iterator;
+};
+
+#   undef AUX_LAST_BACKWARD_STEP
+#   undef AUX_LAST_FORWARD_STEP
+#   undef AUX_ITER_FOLD_BACKWARD_STEP
+#   undef AUX_ITER_FOLD_BACKWARD_STEP_FUNC
+#   undef AUX_ITER_FOLD_FORWARD_STEP
+
+}}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/iter_fold_impl.hpp
new file mode 100644
index 0000000..b4d2922
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/iter_fold_impl.hpp
@@ -0,0 +1,42 @@
+
+#ifndef BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/next_prior.hpp>
+#   include <boost/mpl/apply.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#       include <boost/mpl/if.hpp>
+#       include <boost/type_traits/is_same.hpp>
+#   endif
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER iter_fold_impl.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   define AUX778076_FOLD_IMPL_OP(iter) iter
+#   define AUX778076_FOLD_IMPL_NAME_PREFIX iter_fold
+#   include <boost/mpl/aux_/fold_impl_body.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/lambda_arity_param.hpp b/vendor/pdalboost/boost/mpl/aux_/lambda_arity_param.hpp
new file mode 100644
index 0000000..63cfcd4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/lambda_arity_param.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_AUX_LAMBDA_ARITY_PARAM_HPP_INCLUDED
+#define BOOST_MPL_AUX_LAMBDA_ARITY_PARAM_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/ttp.hpp>
+
+#if !defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
+#   define BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param)    
+#else
+#   define BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(param) , param
+#endif
+
+#endif // BOOST_MPL_AUX_LAMBDA_ARITY_PARAM_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/lambda_no_ctps.hpp b/vendor/pdalboost/boost/mpl/aux_/lambda_no_ctps.hpp
new file mode 100644
index 0000000..8158216
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/lambda_no_ctps.hpp
@@ -0,0 +1,193 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_AUX_LAMBDA_NO_CTPS_HPP_INCLUDED
+#define BOOST_MPL_AUX_LAMBDA_NO_CTPS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/lambda_fwd.hpp>
+#   include <boost/mpl/bind_fwd.hpp>
+#   include <boost/mpl/protect.hpp>
+#   include <boost/mpl/is_placeholder.hpp>
+#   include <boost/mpl/if.hpp>
+#   include <boost/mpl/identity.hpp>
+#   include <boost/mpl/bool.hpp>
+#   include <boost/mpl/aux_/na_spec.hpp>
+#   include <boost/mpl/aux_/lambda_support.hpp>
+#   include <boost/mpl/aux_/template_arity.hpp>
+#   include <boost/mpl/aux_/value_wknd.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if    !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER lambda_no_ctps.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/limits/arity.hpp>
+#   include <boost/mpl/aux_/preprocessor/params.hpp>
+#   include <boost/mpl/aux_/preprocessor/default_params.hpp>
+#   include <boost/mpl/aux_/preprocessor/repeat.hpp>
+#   include <boost/mpl/aux_/preprocessor/enum.hpp>
+#   include <boost/mpl/aux_/config/msvc.hpp>
+#   include <boost/mpl/aux_/config/workaround.hpp>
+
+#   include <boost/preprocessor/comma_if.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define AUX778076_LAMBDA_PARAMS(i_, param) \
+    BOOST_MPL_PP_PARAMS(i_, param) \
+    /**/
+
+namespace aux {
+
+#define n_ BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+template<
+      BOOST_MPL_PP_DEFAULT_PARAMS(n_,bool C,false)
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< BOOST_MPL_PP_ENUM(n_,false) >
+    : false_
+{
+};
+#undef n_
+
+template< typename Arity > struct lambda_impl
+{
+    template< typename T, typename Tag, typename Protect > struct result_
+    {
+        typedef T type;
+        typedef is_placeholder<T> is_le;
+    };
+};
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/aux_/lambda_no_ctps.hpp>))
+#include BOOST_PP_ITERATE()
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Protect
+    >
+struct lambda
+{
+    /// Metafunction forwarding confuses MSVC 6.x
+    typedef typename aux::template_arity<T>::type arity_;
+    typedef typename aux::lambda_impl<arity_>
+        ::template result_< T,Tag,Protect > l_;
+
+    typedef typename l_::type type;
+    typedef typename l_::is_le is_le;
+    
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+#   undef AUX778076_LAMBDA_PARAMS
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_LAMBDA_NO_CTPS_HPP_INCLUDED
+
+///// iteration, depth == 1
+
+#else
+
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+#   define AUX778076_LAMBDA_TYPEDEF(unused, i_, F) \
+    typedef lambda< \
+          typename F::BOOST_PP_CAT(arg,BOOST_PP_INC(i_)) \
+        , Tag \
+        , false_ \
+        > BOOST_PP_CAT(l,BOOST_PP_INC(i_)); \
+    /**/
+
+#   define AUX778076_IS_LE_TYPEDEF(unused, i_, unused2) \
+    typedef typename BOOST_PP_CAT(l,BOOST_PP_INC(i_))::is_le \
+        BOOST_PP_CAT(is_le,BOOST_PP_INC(i_)); \
+    /**/
+
+#   define AUX778076_IS_LAMBDA_EXPR(unused, i_, unused2) \
+    BOOST_PP_COMMA_IF(i_) \
+    BOOST_MPL_AUX_MSVC_VALUE_WKND(BOOST_PP_CAT(is_le,BOOST_PP_INC(i_)))::value \
+    /**/
+
+#   define AUX778076_LAMBDA_RESULT(unused, i_, unused2) \
+    , typename BOOST_PP_CAT(l,BOOST_PP_INC(i_))::type \
+    /**/
+
+template<> struct lambda_impl< int_<i_> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        BOOST_MPL_PP_REPEAT(i_, AUX778076_LAMBDA_TYPEDEF, F)
+        BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LE_TYPEDEF, unused)
+
+        typedef aux::lambda_or<
+              BOOST_MPL_PP_REPEAT(i_, AUX778076_IS_LAMBDA_EXPR, unused)
+            > is_le;
+
+        typedef BOOST_PP_CAT(bind,i_)<
+              typename F::rebind
+            BOOST_MPL_PP_REPEAT(i_, AUX778076_LAMBDA_RESULT, unused)
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+    
+        typedef typename type_::type type;
+    };
+};
+
+#   undef AUX778076_LAMBDA_RESULT
+#   undef AUX778076_IS_LAMBDA_EXPR
+#   undef AUX778076_IS_LE_TYPEDEF
+#   undef AUX778076_LAMBDA_TYPEDEF
+
+#undef i_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/aux_/lambda_spec.hpp b/vendor/pdalboost/boost/mpl/aux_/lambda_spec.hpp
new file mode 100644
index 0000000..6ffacc0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/lambda_spec.hpp
@@ -0,0 +1,49 @@
+
+#ifndef BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED
+#define BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2007
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/lambda_fwd.hpp>
+#include <boost/mpl/int_fwd.hpp>
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/lambda_arity_param.hpp>
+#include <boost/mpl/aux_/config/lambda.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+
+#   define BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(i, name) \
+template< \
+      BOOST_MPL_PP_PARAMS(i, typename T) \
+    , typename Tag \
+    > \
+struct lambda< \
+      name< BOOST_MPL_PP_PARAMS(i, T) > \
+    , Tag \
+    BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(int_<i>) \
+    > \
+{ \
+    typedef false_ is_le; \
+    typedef name< BOOST_MPL_PP_PARAMS(i, T) > result_; \
+    typedef result_ type; \
+}; \
+/**/
+
+#else
+
+#   define BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(i, name) /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/lambda_support.hpp b/vendor/pdalboost/boost/mpl/aux_/lambda_support.hpp
new file mode 100644
index 0000000..28e65c3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/lambda_support.hpp
@@ -0,0 +1,169 @@
+
+#ifndef BOOST_MPL_AUX_LAMBDA_SUPPORT_HPP_INCLUDED
+#define BOOST_MPL_AUX_LAMBDA_SUPPORT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/lambda.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+
+#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) /**/
+#   define BOOST_MPL_AUX_LAMBDA_SUPPORT(i,name,params) /**/
+
+#else
+
+#   include <boost/mpl/int_fwd.hpp>
+#   include <boost/mpl/aux_/yes_no.hpp>
+#   include <boost/mpl/aux_/na_fwd.hpp>
+#   include <boost/mpl/aux_/preprocessor/params.hpp>
+#   include <boost/mpl/aux_/preprocessor/enum.hpp>
+#   include <boost/mpl/aux_/config/msvc.hpp>
+#   include <boost/mpl/aux_/config/workaround.hpp>
+
+#   include <boost/preprocessor/tuple/to_list.hpp>
+#   include <boost/preprocessor/list/for_each_i.hpp>
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC(R,typedef_,i,param) \
+    typedef_ param BOOST_PP_CAT(arg,BOOST_PP_INC(i)); \
+    /**/
+
+// agurt, 07/mar/03: restore an old revision for the sake of SGI MIPSpro C++
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238) 
+
+#   define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \
+    typedef BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::int_<i> arity; \
+    BOOST_PP_LIST_FOR_EACH_I_R( \
+          1 \
+        , BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC \
+        , typedef \
+        , BOOST_PP_TUPLE_TO_LIST(i,params) \
+        ) \
+    struct rebind \
+    { \
+        template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \
+            : name< BOOST_MPL_PP_PARAMS(i,U) > \
+        { \
+        }; \
+    }; \
+    /**/
+
+#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \
+    /**/
+
+#elif BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION)
+// agurt, 18/jan/03: old EDG-based compilers actually enforce 11.4 para 9
+// (in strict mode), so we have to provide an alternative to the 
+// MSVC-optimized implementation
+
+#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \
+    typedef BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::int_<i> arity; \
+    BOOST_PP_LIST_FOR_EACH_I_R( \
+          1 \
+        , BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC \
+        , typedef \
+        , BOOST_PP_TUPLE_TO_LIST(i,params) \
+        ) \
+    struct rebind; \
+/**/
+
+#   define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \
+}; \
+template< BOOST_MPL_PP_PARAMS(i,typename T) > \
+struct name<BOOST_MPL_PP_PARAMS(i,T)>::rebind \
+{ \
+    template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \
+        : name< BOOST_MPL_PP_PARAMS(i,U) > \
+    { \
+    }; \
+/**/
+
+#else // __EDG_VERSION__
+
+namespace pdalboost { namespace mpl { namespace aux {
+template< typename T > struct has_rebind_tag;
+}}}
+
+#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \
+    typedef BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::int_<i> arity; \
+    BOOST_PP_LIST_FOR_EACH_I_R( \
+          1 \
+        , BOOST_MPL_AUX_LAMBDA_SUPPORT_ARG_TYPEDEF_FUNC \
+        , typedef \
+        , BOOST_PP_TUPLE_TO_LIST(i,params) \
+        ) \
+    friend class BOOST_PP_CAT(name,_rebind); \
+    typedef BOOST_PP_CAT(name,_rebind) rebind; \
+/**/
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))
+#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \
+template< BOOST_MPL_PP_PARAMS(i,typename T) > \
+::pdalboost::mpl::aux::yes_tag operator|( \
+      ::pdalboost::mpl::aux::has_rebind_tag<int> \
+    , name<BOOST_MPL_PP_PARAMS(i,T)>* \
+    ); \
+::pdalboost::mpl::aux::no_tag operator|( \
+      ::pdalboost::mpl::aux::has_rebind_tag<int> \
+    , name< BOOST_MPL_PP_ENUM(i,::pdalboost::mpl::na) >* \
+    ); \
+/**/
+#elif !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \
+template< BOOST_MPL_PP_PARAMS(i,typename T) > \
+::pdalboost::mpl::aux::yes_tag operator|( \
+      ::pdalboost::mpl::aux::has_rebind_tag<int> \
+    , ::pdalboost::mpl::aux::has_rebind_tag< name<BOOST_MPL_PP_PARAMS(i,T)> >* \
+    ); \
+/**/
+#else
+#   define BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) /**/
+#endif
+
+#   if !defined(__BORLANDC__)
+#   define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \
+}; \
+BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \
+class BOOST_PP_CAT(name,_rebind) \
+{ \
+ public: \
+    template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \
+        : name< BOOST_MPL_PP_PARAMS(i,U) > \
+    { \
+    }; \
+/**/
+#   else
+#   define BOOST_MPL_AUX_LAMBDA_SUPPORT(i, name, params) \
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(i, name, params) \
+}; \
+BOOST_MPL_AUX_LAMBDA_SUPPORT_HAS_REBIND(i, name, params) \
+class BOOST_PP_CAT(name,_rebind) \
+{ \
+ public: \
+    template< BOOST_MPL_PP_PARAMS(i,typename U) > struct apply \
+    { \
+        typedef typename name< BOOST_MPL_PP_PARAMS(i,U) >::type type; \
+    }; \
+/**/
+#   endif // __BORLANDC__
+
+#endif // __EDG_VERSION__
+
+#endif // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+
+#endif // BOOST_MPL_AUX_LAMBDA_SUPPORT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/largest_int.hpp b/vendor/pdalboost/boost/mpl/aux_/largest_int.hpp
new file mode 100644
index 0000000..f348d34
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/largest_int.hpp
@@ -0,0 +1,63 @@
+
+#ifndef BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED
+#define BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/aux_/config/integral.hpp>
+#include <boost/config.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename T > struct integral_rank;
+
+template<> struct integral_rank<bool>           : int_<1> {};
+template<> struct integral_rank<signed char>    : int_<2> {};
+template<> struct integral_rank<char>           : int_<3> {};
+template<> struct integral_rank<unsigned char>  : int_<4> {};
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+template<> struct integral_rank<wchar_t>        : int_<5> {};
+#endif
+template<> struct integral_rank<short>          : int_<6> {};
+template<> struct integral_rank<unsigned short> : int_<7> {};
+template<> struct integral_rank<int>            : int_<8> {};
+template<> struct integral_rank<unsigned int>   : int_<9> {};
+template<> struct integral_rank<long>           : int_<10> {};
+template<> struct integral_rank<unsigned long>  : int_<11> {};
+
+#if defined(BOOST_HAS_LONG_LONG)
+template<> struct integral_rank<long_long_type> : int_<12> {};
+template<> struct integral_rank<ulong_long_type>: int_<13> {};
+#endif
+
+template< typename T1, typename T2 > struct largest_int
+#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
+    : if_c< 
+          ( integral_rank<T1>::value >= integral_rank<T2>::value )
+        , T1
+        , T2
+        >
+{
+#else
+{
+    enum { rank1 = integral_rank<T1>::value };
+    enum { rank2 = integral_rank<T2>::value };
+    typedef typename if_c< (rank1 >= rank2),T1,T2 >::type type;
+#endif
+};
+
+}}}
+
+#endif // BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/logical_op.hpp b/vendor/pdalboost/boost/mpl/aux_/logical_op.hpp
new file mode 100644
index 0000000..d9c63ea
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/logical_op.hpp
@@ -0,0 +1,165 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/bool.hpp>
+#   include <boost/mpl/aux_/nested_type_wknd.hpp>
+#   include <boost/mpl/aux_/na_spec.hpp>
+#   include <boost/mpl/aux_/lambda_support.hpp>
+#endif
+
+#include <boost/mpl/limits/arity.hpp>
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/preprocessor/ext_params.hpp>
+#include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>
+#include <boost/mpl/aux_/preprocessor/enum.hpp>
+#include <boost/mpl/aux_/preprocessor/sub.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/inc.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define AUX778076_PARAMS(param, sub) \
+    BOOST_MPL_PP_PARAMS( \
+          BOOST_MPL_PP_SUB(BOOST_MPL_LIMIT_METAFUNCTION_ARITY, sub) \
+        , param \
+        ) \
+    /**/
+
+#   define AUX778076_SHIFTED_PARAMS(param, sub) \
+    BOOST_MPL_PP_EXT_PARAMS( \
+          2, BOOST_MPL_PP_SUB(BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY), sub) \
+        , param \
+        ) \
+    /**/
+
+#   define AUX778076_SPEC_PARAMS(param) \
+    BOOST_MPL_PP_ENUM( \
+          BOOST_PP_DEC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY) \
+        , param \
+        ) \
+    /**/
+
+namespace aux {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< bool C_, AUX778076_PARAMS(typename T, 1) >
+struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)
+    : BOOST_PP_CAT(AUX778076_OP_VALUE1,_)
+{
+};
+
+template< AUX778076_PARAMS(typename T, 1) >
+struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)< AUX778076_OP_VALUE2,AUX778076_PARAMS(T, 1) >
+    : BOOST_PP_CAT(AUX778076_OP_NAME,impl)<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , AUX778076_SHIFTED_PARAMS(T, 1)
+        , BOOST_PP_CAT(AUX778076_OP_VALUE2,_)
+        >
+{
+};
+
+template<>
+struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)<
+          AUX778076_OP_VALUE2
+        , AUX778076_SPEC_PARAMS(BOOST_PP_CAT(AUX778076_OP_VALUE2,_))
+        >
+    : BOOST_PP_CAT(AUX778076_OP_VALUE2,_)
+{
+};
+
+#else
+
+template< bool C_ > struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)
+{
+    template< AUX778076_PARAMS(typename T, 1) > struct result_
+        : BOOST_PP_CAT(AUX778076_OP_VALUE1,_)
+    {
+    };
+};
+
+template<> struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)<AUX778076_OP_VALUE2>
+{
+    template< AUX778076_PARAMS(typename T, 1) > struct result_
+        : BOOST_PP_CAT(AUX778076_OP_NAME,impl)< 
+              BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+            >::template result_< AUX778076_SHIFTED_PARAMS(T,1),BOOST_PP_CAT(AUX778076_OP_VALUE2,_) >
+    {
+    };
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+    template<> struct result_<AUX778076_SPEC_PARAMS(BOOST_PP_CAT(AUX778076_OP_VALUE2,_))>
+        : BOOST_PP_CAT(AUX778076_OP_VALUE2,_)
+    {
+    };
+};
+#else
+};
+
+template<>
+struct BOOST_PP_CAT(AUX778076_OP_NAME,impl)<AUX778076_OP_VALUE2>
+    ::result_< AUX778076_SPEC_PARAMS(BOOST_PP_CAT(AUX778076_OP_VALUE2,_)) >
+        : BOOST_PP_CAT(AUX778076_OP_VALUE2,_)
+{
+};
+#endif // BOOST_MSVC == 1300
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    BOOST_MPL_PP_DEF_PARAMS_TAIL(2, typename T, BOOST_PP_CAT(AUX778076_OP_VALUE2,_))
+    >
+struct AUX778076_OP_NAME
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+    : aux::BOOST_PP_CAT(AUX778076_OP_NAME,impl)<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , AUX778076_SHIFTED_PARAMS(T,0)
+        >
+#else
+    : aux::BOOST_PP_CAT(AUX778076_OP_NAME,impl)< 
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        >::template result_< AUX778076_SHIFTED_PARAMS(T,0) >
+#endif
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+        , AUX778076_OP_NAME
+        , (AUX778076_PARAMS(T, 0))
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+    , AUX778076_OP_NAME
+    )
+
+}}
+
+#undef AUX778076_SPEC_PARAMS
+#undef AUX778076_SHIFTED_PARAMS
+#undef AUX778076_PARAMS
+#undef AUX778076_OP_NAME
+#undef AUX778076_OP_VALUE1
+#undef AUX778076_OP_VALUE2
diff --git a/vendor/pdalboost/boost/mpl/aux_/msvc_dtw.hpp b/vendor/pdalboost/boost/mpl/aux_/msvc_dtw.hpp
new file mode 100644
index 0000000..d595b23
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/msvc_dtw.hpp
@@ -0,0 +1,68 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
+
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+
+// local macros, #undef-ined at the end of the header
+#define AUX778076_DTW_PARAMS(param) \
+    BOOST_MPL_PP_PARAMS(AUX778076_MSVC_DTW_ARITY, param) \
+/**/
+
+#define AUX778076_DTW_ORIGINAL_NAME \
+    AUX778076_MSVC_DTW_ORIGINAL_NAME \
+/**/
+
+// warning: not a well-formed C++
+// workaround for MSVC 6.5's "dependent template typedef bug"
+
+template< typename F>
+struct AUX778076_MSVC_DTW_NAME
+{
+    template< bool > struct f_ : F {};
+    template<> struct f_<true>
+    {
+#if AUX778076_MSVC_DTW_ARITY > 0
+        template< AUX778076_DTW_PARAMS(typename P) > struct AUX778076_DTW_ORIGINAL_NAME
+        {
+            typedef int type;
+        };
+    };
+
+    template< AUX778076_DTW_PARAMS(typename T) > struct result_
+        : f_< aux::msvc_never_true<F>::value >
+            ::template AUX778076_DTW_ORIGINAL_NAME< AUX778076_DTW_PARAMS(T) >
+    {
+    };
+#else
+        template< typename P = int > struct AUX778076_DTW_ORIGINAL_NAME
+        {
+            typedef int type;
+        };
+    };
+
+    template< typename T = int > struct result_
+        : f_< aux::msvc_never_true<F>::value >
+            ::template AUX778076_DTW_ORIGINAL_NAME<>
+    {
+    };
+#endif
+};
+
+#undef AUX778076_DTW_ORIGINAL_NAME
+#undef AUX778076_DTW_PARAMS
+
+#undef AUX778076_MSVC_DTW_NAME
+#undef AUX778076_MSVC_DTW_ORIGINAL_NAME
+#undef AUX778076_MSVC_DTW_ARITY
diff --git a/vendor/pdalboost/boost/mpl/aux_/msvc_eti_base.hpp b/vendor/pdalboost/boost/mpl/aux_/msvc_eti_base.hpp
new file mode 100644
index 0000000..a8777bc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/msvc_eti_base.hpp
@@ -0,0 +1,77 @@
+
+#ifndef BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED
+#define BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/is_msvc_eti_arg.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+#if defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)
+
+template< bool > struct msvc_eti_base_impl
+{
+    template< typename T > struct result_
+        : T
+    {
+        typedef T type;
+    };
+};
+
+template<> struct msvc_eti_base_impl<true>
+{
+    template< typename T > struct result_
+    {
+        typedef result_ type;
+        typedef result_ first;
+        typedef result_ second;
+        typedef result_ tag;
+        enum { value = 0 };
+    };
+};
+
+template< typename T > struct msvc_eti_base
+    : msvc_eti_base_impl< is_msvc_eti_arg<T>::value >
+        ::template result_<T>
+{
+};
+
+#else // !BOOST_MPL_CFG_MSVC_70_ETI_BUG
+
+template< typename T > struct msvc_eti_base
+    : T
+{
+#if BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304))
+    msvc_eti_base();
+#endif
+    typedef T type;
+};
+
+#endif 
+
+template<> struct msvc_eti_base<int>
+{
+    typedef msvc_eti_base type;
+    typedef msvc_eti_base first;
+    typedef msvc_eti_base second;
+    typedef msvc_eti_base tag;
+    enum { value = 0 };
+};
+
+}}}
+
+#endif // BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/msvc_is_class.hpp b/vendor/pdalboost/boost/mpl/aux_/msvc_is_class.hpp
new file mode 100644
index 0000000..715ff4a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/msvc_is_class.hpp
@@ -0,0 +1,58 @@
+
+#ifndef BOOST_MPL_AUX_MSVC_IS_CLASS_HPP_INCLUDED
+#define BOOST_MPL_AUX_MSVC_IS_CLASS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+
+#include <boost/type_traits/is_reference.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename T > struct is_class_helper
+{
+    typedef int (T::* type)();
+};
+
+// MSVC 6.x-specific lightweight 'is_class' implementation; 
+// Distinguishing feature: does not instantiate the type being tested.
+template< typename T >
+struct msvc_is_class_impl
+{
+    template< typename U>
+    static yes_tag  test(type_wrapper<U>*, /*typename*/ is_class_helper<U>::type = 0);
+    static no_tag   test(void const volatile*, ...);
+
+    enum { value = sizeof(test((type_wrapper<T>*)0)) == sizeof(yes_tag) };
+    typedef bool_<value> type;
+};
+
+// agurt, 17/sep/04: have to check for 'is_reference' upfront to avoid ICEs in
+// complex metaprograms
+template< typename T >
+struct msvc_is_class
+    : if_<
+          is_reference<T>
+        , false_
+        , msvc_is_class_impl<T>
+        >::type
+{
+};
+
+}}}
+
+#endif // BOOST_MPL_AUX_MSVC_IS_CLASS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/msvc_never_true.hpp b/vendor/pdalboost/boost/mpl/aux_/msvc_never_true.hpp
new file mode 100644
index 0000000..ba5c399
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/msvc_never_true.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED
+#define BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename T >
+struct msvc_never_true
+{
+    enum { value = false };
+};
+
+}}}
+
+#endif // BOOST_MSVC
+
+#endif // BOOST_MPL_AUX_MSVC_NEVER_TRUE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/msvc_type.hpp b/vendor/pdalboost/boost/mpl/aux_/msvc_type.hpp
new file mode 100644
index 0000000..4fa51c8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/msvc_type.hpp
@@ -0,0 +1,62 @@
+
+#ifndef BOOST_MPL_AUX_MSVC_TYPE_HPP_INCLUDED
+#define BOOST_MPL_AUX_MSVC_TYPE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/eti.hpp>
+#include <boost/mpl/aux_/is_msvc_eti_arg.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+#if defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)
+
+template< bool > struct msvc_type_impl
+{
+    template< typename T > struct result_
+    {
+        typedef typename T::type type;
+    };
+};
+
+template<> struct msvc_type_impl<true>
+{
+    template< typename T > struct result_
+    {
+        typedef result_ type;
+    };
+};
+
+template< typename T > struct msvc_type
+    : msvc_type_impl< is_msvc_eti_arg<T>::value >
+        ::template result_<T>
+{
+};
+
+#else // BOOST_MPL_CFG_MSVC_70_ETI_BUG
+
+template< typename T > struct msvc_type 
+{
+    typedef typename T::type type;
+};
+
+template<> struct msvc_type<int>
+{
+    typedef int type;
+};
+
+#endif
+
+}}}
+
+#endif // BOOST_MPL_AUX_MSVC_TYPE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/na.hpp b/vendor/pdalboost/boost/mpl/aux_/na.hpp
new file mode 100644
index 0000000..3d98fb9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/na.hpp
@@ -0,0 +1,95 @@
+
+#ifndef BOOST_MPL_AUX_NA_HPP_INCLUDED
+#define BOOST_MPL_AUX_NA_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/na_fwd.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template< typename T >
+struct is_na
+    : false_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    using false_::value;
+#endif
+};
+
+template<>
+struct is_na<na>
+    : true_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    using true_::value;
+#endif
+};
+
+template< typename T >
+struct is_not_na
+    : true_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    using true_::value;
+#endif
+};
+
+template<>
+struct is_not_na<na>
+    : false_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    using false_::value;
+#endif
+};
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+template< typename T, typename U > struct if_na
+{
+    typedef T type;
+};
+
+template< typename U > struct if_na<na,U>
+{
+    typedef U type;
+};
+#else
+template< typename T > struct if_na_impl
+{
+    template< typename U > struct apply
+    {
+        typedef T type;
+    };
+};
+
+template<> struct if_na_impl<na>
+{
+    template< typename U > struct apply
+    {
+        typedef U type;
+    };
+};
+
+template< typename T, typename U > struct if_na
+    : if_na_impl<T>::template apply<U>
+{
+};
+#endif
+
+}}
+
+#endif // BOOST_MPL_AUX_NA_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/na_assert.hpp b/vendor/pdalboost/boost/mpl/aux_/na_assert.hpp
new file mode 100644
index 0000000..d12f6a5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/na_assert.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_AUX_NA_ASSERT_HPP_INCLUDED
+#define BOOST_MPL_AUX_NA_ASSERT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if !BOOST_WORKAROUND(_MSC_FULL_VER, <= 140050601)    \
+    && !BOOST_WORKAROUND(__EDG_VERSION__, <= 243)
+#   include <boost/mpl/assert.hpp>
+#   define BOOST_MPL_AUX_ASSERT_NOT_NA(x) \
+    BOOST_MPL_ASSERT_NOT((pdalboost::mpl::is_na<type>)) \
+/**/
+#else
+#   include <boost/static_assert.hpp>
+#   define BOOST_MPL_AUX_ASSERT_NOT_NA(x) \
+    BOOST_STATIC_ASSERT(!pdalboost::mpl::is_na<x>::value) \
+/**/
+#endif
+
+#endif // BOOST_MPL_AUX_NA_ASSERT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/na_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/na_fwd.hpp
new file mode 100644
index 0000000..4388241
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/na_fwd.hpp
@@ -0,0 +1,31 @@
+
+#ifndef BOOST_MPL_AUX_NA_FWD_HPP_INCLUDED
+#define BOOST_MPL_AUX_NA_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/adl_barrier.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+// n.a. == not available
+struct na
+{
+    typedef na type;
+    enum { value = 0 };
+};
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+BOOST_MPL_AUX_ADL_BARRIER_DECL(na)
+
+#endif // BOOST_MPL_AUX_NA_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/na_spec.hpp b/vendor/pdalboost/boost/mpl/aux_/na_spec.hpp
new file mode 100644
index 0000000..d052fce
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/na_spec.hpp
@@ -0,0 +1,175 @@
+
+#ifndef BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED
+#define BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/lambda_fwd.hpp>
+#   include <boost/mpl/int.hpp>
+#   include <boost/mpl/bool.hpp>
+#   include <boost/mpl/aux_/na.hpp>
+#   include <boost/mpl/aux_/arity.hpp>
+#   include <boost/mpl/aux_/template_arity_fwd.hpp>
+#endif
+
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/preprocessor/enum.hpp>
+#include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>
+#include <boost/mpl/aux_/lambda_arity_param.hpp>
+#include <boost/mpl/aux_/config/dtp.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/config/ttp.hpp>
+#include <boost/mpl/aux_/config/lambda.hpp>
+#include <boost/mpl/aux_/config/overload_resolution.hpp>
+
+
+#define BOOST_MPL_AUX_NA_PARAMS(i) \
+    BOOST_MPL_PP_ENUM(i, na) \
+/**/
+
+#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+#   define BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \
+namespace aux { \
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) > \
+struct arity< \
+          name< BOOST_MPL_AUX_NA_PARAMS(i) > \
+        , N \
+        > \
+    : int_< BOOST_MPL_LIMIT_METAFUNCTION_ARITY > \
+{ \
+}; \
+} \
+/**/
+#else
+#   define BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) /**/
+#endif
+
+#define BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \
+template<> \
+struct name< BOOST_MPL_AUX_NA_PARAMS(i) > \
+{ \
+    template< \
+          BOOST_MPL_PP_PARAMS(i, typename T) \
+        BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, typename T, na) \
+        > \
+    struct apply \
+        : name< BOOST_MPL_PP_PARAMS(i, T) > \
+    { \
+    }; \
+}; \
+/**/
+
+#if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+#   define BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
+template<> \
+struct lambda< \
+      name< BOOST_MPL_AUX_NA_PARAMS(i) > \
+    , void_ \
+    , true_ \
+    > \
+{ \
+    typedef false_ is_le; \
+    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \
+}; \
+template<> \
+struct lambda< \
+      name< BOOST_MPL_AUX_NA_PARAMS(i) > \
+    , void_ \
+    , false_ \
+    > \
+{ \
+    typedef false_ is_le; \
+    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \
+}; \
+/**/
+#else
+#   define BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
+template< typename Tag > \
+struct lambda< \
+      name< BOOST_MPL_AUX_NA_PARAMS(i) > \
+    , Tag \
+    BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(int_<-1>) \
+    > \
+{ \
+    typedef false_ is_le; \
+    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > result_; \
+    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \
+}; \
+/**/
+#endif
+
+#if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \
+    || defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \
+        && defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION)
+#   define BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) \
+namespace aux { \
+template< BOOST_MPL_PP_PARAMS(j, typename T) > \
+struct template_arity< \
+          name< BOOST_MPL_PP_PARAMS(j, T) > \
+        > \
+    : int_<j> \
+{ \
+}; \
+\
+template<> \
+struct template_arity< \
+          name< BOOST_MPL_PP_ENUM(i, na) > \
+        > \
+    : int_<-1> \
+{ \
+}; \
+} \
+/**/
+#else
+#   define BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) /**/
+#endif
+
+#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+#   define BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \
+template<> \
+struct name< BOOST_MPL_PP_ENUM(i, int) > \
+{ \
+    typedef int type; \
+    enum { value = 0 }; \
+}; \
+/**/
+#else
+#   define BOOST_MPL_AUX_NA_SPEC_ETI(i, name) /**/
+#endif
+
+#define BOOST_MPL_AUX_NA_PARAM(param) param = na
+
+#define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
+BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
+BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, i, name) \
+/**/
+
+#define BOOST_MPL_AUX_NA_SPEC(i, name) \
+BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
+BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \
+/**/
+
+#define BOOST_MPL_AUX_NA_SPEC2(i, j, name) \
+BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \
+BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
+BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) \
+/**/
+
+
+#endif // BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/nested_type_wknd.hpp b/vendor/pdalboost/boost/mpl/aux_/nested_type_wknd.hpp
new file mode 100644
index 0000000..fd8a247
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/nested_type_wknd.hpp
@@ -0,0 +1,48 @@
+
+#ifndef BOOST_MPL_AUX_NESTED_TYPE_WKND_HPP_INCLUDED
+#define BOOST_MPL_AUX_NESTED_TYPE_WKND_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0302)) \
+    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \
+    || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530)) \
+    || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+
+namespace pdalboost { namespace mpl { namespace aux {
+template< typename T > struct nested_type_wknd
+    : T::type
+{
+};
+}}}
+
+#if BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+#   define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) \
+    aux::nested_type_wknd<T> \
+/**/
+#else
+#   define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) \
+    ::pdalboost::mpl::aux::nested_type_wknd<T> \
+/**/
+#endif
+
+#else // !BOOST_MPL_CFG_GCC et al.
+
+#   define BOOST_MPL_AUX_NESTED_TYPE_WKND(T) T::type
+
+#endif 
+
+#endif // BOOST_MPL_AUX_NESTED_TYPE_WKND_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/nttp_decl.hpp b/vendor/pdalboost/boost/mpl/aux_/nttp_decl.hpp
new file mode 100644
index 0000000..8c344d8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/nttp_decl.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_AUX_NTTP_DECL_HPP_INCLUDED
+#define BOOST_MPL_AUX_NTTP_DECL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/nttp.hpp>
+
+#if defined(BOOST_MPL_CFG_NTTP_BUG)
+
+typedef bool        _mpl_nttp_bool;
+typedef int         _mpl_nttp_int;
+typedef unsigned    _mpl_nttp_unsigned;
+typedef long        _mpl_nttp_long;
+
+#   include <boost/preprocessor/cat.hpp>
+#   define BOOST_MPL_AUX_NTTP_DECL(T, x) BOOST_PP_CAT(_mpl_nttp_,T) x /**/
+
+#else
+
+#   define BOOST_MPL_AUX_NTTP_DECL(T, x) T x /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_NTTP_DECL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/numeric_cast_utils.hpp b/vendor/pdalboost/boost/mpl/aux_/numeric_cast_utils.hpp
new file mode 100644
index 0000000..524050a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/numeric_cast_utils.hpp
@@ -0,0 +1,77 @@
+
+#ifndef BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED
+#define BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/numeric_cast.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template<
+      typename F
+    , typename Tag1
+    , typename Tag2
+    >
+struct cast1st_impl
+{
+    template< typename N1, typename N2 > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+        : apply_wrap2< 
+              F
+            , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag1,Tag2>,N1 >::type
+            , N2
+            >
+    {
+#else
+    {
+    typedef typename apply_wrap2< 
+              F
+            , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag1,Tag2>,N1 >::type
+            , N2
+            >::type type;
+#endif
+    };
+};
+
+template<
+      typename F
+    , typename Tag1
+    , typename Tag2
+    >
+struct cast2nd_impl
+{
+    template< typename N1, typename N2 > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+        : apply_wrap2< 
+              F
+            , N1
+            , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag2,Tag1>,N2 >::type
+            >
+    {
+#else
+    {
+        typedef typename apply_wrap2< 
+              F
+            , N1
+            , typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag2,Tag1>,N2 >::type
+            >::type type;
+#endif
+    };
+};
+
+}}}
+
+#endif // BOOST_MPL_AUX_NUMERIC_CAST_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/numeric_op.hpp b/vendor/pdalboost/boost/mpl/aux_/numeric_op.hpp
new file mode 100644
index 0000000..f0029f7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/numeric_op.hpp
@@ -0,0 +1,315 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/numeric_cast.hpp>
+#   include <boost/mpl/apply_wrap.hpp>
+#   include <boost/mpl/if.hpp>
+#   include <boost/mpl/tag.hpp>
+#   include <boost/mpl/aux_/numeric_cast_utils.hpp>
+#   include <boost/mpl/aux_/na.hpp>
+#   include <boost/mpl/aux_/na_spec.hpp>
+#   include <boost/mpl/aux_/lambda_support.hpp>
+#   include <boost/mpl/aux_/msvc_eti_base.hpp>
+#   include <boost/mpl/aux_/value_wknd.hpp>
+#   include <boost/mpl/aux_/config/eti.hpp>
+#   include <boost/mpl/aux_/nttp_decl.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+#if defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    || defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   include <boost/mpl/limits/arity.hpp>
+#   include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>
+#   include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>
+#   include <boost/mpl/aux_/preprocessor/repeat.hpp>
+#   include <boost/mpl/aux_/preprocessor/ext_params.hpp>
+#   include <boost/mpl/aux_/preprocessor/params.hpp>
+#   include <boost/mpl/aux_/preprocessor/enum.hpp>
+#   include <boost/mpl/aux_/preprocessor/add.hpp>
+#   include <boost/mpl/aux_/preprocessor/sub.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/mpl/aux_/config/eti.hpp>
+#   include <boost/mpl/aux_/config/msvc.hpp>
+#   include <boost/mpl/aux_/config/workaround.hpp>
+
+#   include <boost/preprocessor/dec.hpp>
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+
+#if !defined(AUX778076_OP_ARITY)
+#   define AUX778076_OP_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+#endif
+
+#if !defined(AUX778076_OP_IMPL_NAME)
+#   define AUX778076_OP_IMPL_NAME BOOST_PP_CAT(AUX778076_OP_PREFIX,_impl)
+#endif
+
+#if !defined(AUX778076_OP_TAG_NAME)
+#   define AUX778076_OP_TAG_NAME BOOST_PP_CAT(AUX778076_OP_PREFIX,_tag)
+#endif
+
+namespace pdalboost { namespace mpl {
+
+template< 
+      typename Tag1
+    , typename Tag2
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value 
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value 
+    >
+struct AUX778076_OP_IMPL_NAME
+    : if_c<
+          ( tag1_ > tag2_ )
+#else
+    >
+struct AUX778076_OP_IMPL_NAME
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+#endif
+        , aux::cast2nd_impl< AUX778076_OP_IMPL_NAME<Tag1,Tag1>,Tag1,Tag2 >
+        , aux::cast1st_impl< AUX778076_OP_IMPL_NAME<Tag2,Tag2>,Tag1,Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct AUX778076_OP_IMPL_NAME<na,na>
+{
+    template< typename U1, typename U2 > struct apply 
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value = 0);
+    };
+};
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+template< typename Tag > struct AUX778076_OP_IMPL_NAME<na,Tag>
+{
+    template< typename U1, typename U2 > struct apply 
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value = 0);
+    };
+};
+
+template< typename Tag > struct AUX778076_OP_IMPL_NAME<Tag,na>
+{
+    template< typename U1, typename U2 > struct apply 
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value = 0);
+    };
+};
+#else
+template<> struct AUX778076_OP_IMPL_NAME<na,integral_c_tag>
+{
+    template< typename U1, typename U2 > struct apply 
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value = 0);
+    };
+};
+
+template<> struct AUX778076_OP_IMPL_NAME<integral_c_tag,na>
+{
+    template< typename U1, typename U2 > struct apply 
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value = 0);
+    };
+};
+#endif
+
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+    && BOOST_WORKAROUND(BOOST_MSVC, >= 1300)
+template< typename T > struct AUX778076_OP_TAG_NAME
+    : tag<T,na>
+{
+};
+#else
+template< typename T > struct AUX778076_OP_TAG_NAME
+{
+    typedef typename T::tag type;
+};
+#endif
+
+
+#if AUX778076_OP_ARITY != 2
+
+#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+#   define AUX778076_OP_RIGHT_OPERAND(unused, i, N) , BOOST_PP_CAT(N, BOOST_MPL_PP_ADD(i, 2))>
+#   define AUX778076_OP_N_CALLS(i, N) \
+    BOOST_MPL_PP_REPEAT( BOOST_PP_DEC(i), BOOST_MPL_PP_REPEAT_IDENTITY_FUNC, AUX778076_OP_NAME< ) \
+    N1 BOOST_MPL_PP_REPEAT( BOOST_MPL_PP_SUB(i, 1), AUX778076_OP_RIGHT_OPERAND, N ) \
+/**/
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    BOOST_MPL_PP_DEF_PARAMS_TAIL(2, typename N, na)
+    >
+struct AUX778076_OP_NAME
+    : AUX778076_OP_N_CALLS(AUX778076_OP_ARITY, N)
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          AUX778076_OP_ARITY
+        , AUX778076_OP_NAME
+        , ( BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) )
+        )
+};
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,( BOOST_PP_DEC(AUX778076_OP_ARITY), 2, <boost/mpl/aux_/numeric_op.hpp> ))
+#include BOOST_PP_ITERATE()
+
+#   undef AUX778076_OP_N_CALLS
+#   undef AUX778076_OP_RIGHT_OPERAND
+
+#   else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+/// forward declaration
+template< 
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct BOOST_PP_CAT(AUX778076_OP_NAME,2);
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    BOOST_MPL_PP_DEF_PARAMS_TAIL(2, typename N, na)
+    >
+struct AUX778076_OP_NAME
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+    : aux::msvc_eti_base< typename if_<
+#else
+    : if_<
+#endif
+          is_na<N3>
+        , BOOST_PP_CAT(AUX778076_OP_NAME,2)<N1,N2>
+        , AUX778076_OP_NAME<
+              BOOST_PP_CAT(AUX778076_OP_NAME,2)<N1,N2>
+            , BOOST_MPL_PP_EXT_PARAMS(3, BOOST_PP_INC(AUX778076_OP_ARITY), N)
+            >
+        >::type
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+    >
+#endif
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          AUX778076_OP_ARITY
+        , AUX778076_OP_NAME
+        , ( BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) )
+        )
+};
+
+template< 
+      typename N1
+    , typename N2
+    >
+struct BOOST_PP_CAT(AUX778076_OP_NAME,2)
+
+#endif
+
+#else // AUX778076_OP_ARITY == 2
+
+template< 
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct AUX778076_OP_NAME
+
+#endif
+
+#if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+    : AUX778076_OP_IMPL_NAME<
+          typename AUX778076_OP_TAG_NAME<N1>::type
+        , typename AUX778076_OP_TAG_NAME<N2>::type
+        >::template apply<N1,N2>::type
+#else
+    : aux::msvc_eti_base< typename apply_wrap2<
+          AUX778076_OP_IMPL_NAME<
+              typename AUX778076_OP_TAG_NAME<N1>::type
+            , typename AUX778076_OP_TAG_NAME<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+#endif
+{
+#if AUX778076_OP_ARITY != 2
+
+#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          AUX778076_OP_ARITY
+        , AUX778076_OP_NAME
+        , ( BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(2, N, na) )
+        )
+#   else
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, BOOST_PP_CAT(AUX778076_OP_NAME,2), (N1, N2))
+#   endif
+
+#else
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, AUX778076_OP_NAME, (N1, N2))
+#endif
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, AUX778076_OP_ARITY, AUX778076_OP_NAME)
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+///// iteration, depth == 1
+
+// For gcc 4.4 compatability, we must include the
+// BOOST_PP_ITERATION_DEPTH test inside an #else clause.
+#else // BOOST_PP_IS_ITERATING
+#if BOOST_PP_ITERATION_DEPTH() == 1
+
+#   define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<
+      BOOST_MPL_PP_PARAMS(i_, typename N)
+    >
+struct AUX778076_OP_NAME<BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(i_, N, na)>
+#if i_ != 2
+    : AUX778076_OP_N_CALLS(i_, N)
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          AUX778076_OP_ARITY
+        , AUX778076_OP_NAME
+        , ( BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(i_, N, na) )
+        )
+};
+#endif
+
+#   undef i_
+
+#endif // BOOST_PP_ITERATION_DEPTH()
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/aux_/overload_names.hpp b/vendor/pdalboost/boost/mpl/aux_/overload_names.hpp
new file mode 100644
index 0000000..f9bbb39
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/overload_names.hpp
@@ -0,0 +1,48 @@
+
+#ifndef BOOST_MPL_AUX_OVERLOAD_NAMES_HPP_INCLUDED
+#define BOOST_MPL_AUX_OVERLOAD_NAMES_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/ptr_to_ref.hpp>
+#include <boost/mpl/aux_/config/operators.hpp>
+
+#if defined(BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING)
+
+#   include <boost/mpl/aux_/static_cast.hpp>
+
+#   define BOOST_MPL_AUX_OVERLOAD_VALUE_BY_KEY  operator/
+#   define BOOST_MPL_AUX_OVERLOAD_ITEM_BY_ORDER operator|
+#   define BOOST_MPL_AUX_OVERLOAD_ORDER_BY_KEY  operator||
+#   define BOOST_MPL_AUX_OVERLOAD_IS_MASKED     operator%
+
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_VALUE_BY_KEY(T, x)   BOOST_MPL_AUX_PTR_TO_REF(T) / x
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_ITEM_BY_ORDER(T, x)  BOOST_MPL_AUX_PTR_TO_REF(T) | x
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_ORDER_BY_KEY(T, x)   BOOST_MPL_AUX_PTR_TO_REF(T) || x
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(T, x)      BOOST_MPL_AUX_PTR_TO_REF(T) % x
+
+#else
+
+#   define BOOST_MPL_AUX_OVERLOAD_VALUE_BY_KEY  value_by_key_
+#   define BOOST_MPL_AUX_OVERLOAD_ITEM_BY_ORDER item_by_order_
+#   define BOOST_MPL_AUX_OVERLOAD_ORDER_BY_KEY  order_by_key_
+#   define BOOST_MPL_AUX_OVERLOAD_IS_MASKED     is_masked_
+
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_VALUE_BY_KEY(T, x)   T::BOOST_MPL_AUX_OVERLOAD_VALUE_BY_KEY( BOOST_MPL_AUX_PTR_TO_REF(T), x )
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_ITEM_BY_ORDER(T, x)  T::BOOST_MPL_AUX_OVERLOAD_ITEM_BY_ORDER( BOOST_MPL_AUX_PTR_TO_REF(T), x )
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_ORDER_BY_KEY(T, x)   T::BOOST_MPL_AUX_OVERLOAD_ORDER_BY_KEY( BOOST_MPL_AUX_PTR_TO_REF(T), x )
+#   define BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(T, x)      T::BOOST_MPL_AUX_OVERLOAD_IS_MASKED( BOOST_MPL_AUX_PTR_TO_REF(T), x )
+
+#endif
+
+#endif // BOOST_MPL_AUX_OVERLOAD_NAMES_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp
new file mode 100644
index 0000000..ae878c6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_backward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_backward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_backward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_backward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef typename prior<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_backward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_backward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_backward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp
new file mode 100644
index 0000000..1cd4025
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_forward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_forward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_forward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_forward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef typename next<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_forward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_forward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_forward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/and.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/and.hpp
new file mode 100644
index 0000000..fdc8ff3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/and.hpp
@@ -0,0 +1,69 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+    : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+    : and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , true_
+        >
+{
+};
+
+template<>
+struct and_impl<
+          true
+        , true_, true_, true_, true_
+        >
+    : true_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = true_, typename T4 = true_, typename T5 = true_
+    >
+struct and_
+
+    : aux::and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , and_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , and_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/apply.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/apply.hpp
new file mode 100644
index 0000000..9bfa11b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/apply.hpp
@@ -0,0 +1,169 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct apply0
+
+    : apply_wrap0<
+          typename lambda<F>::type
+       
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          1
+        , apply0
+        , (F )
+        )
+};
+
+template<
+      typename F
+    >
+struct apply< F,na,na,na,na,na >
+    : apply0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply1
+
+    : apply_wrap1<
+          typename lambda<F>::type
+        , T1
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          2
+        , apply1
+        , (F, T1)
+        )
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply< F,T1,na,na,na,na >
+    : apply1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2
+
+    : apply_wrap2<
+          typename lambda<F>::type
+        , T1, T2
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , apply2
+        , (F, T1, T2)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply< F,T1,T2,na,na,na >
+    : apply2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3
+
+    : apply_wrap3<
+          typename lambda<F>::type
+        , T1, T2, T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , apply3
+        , (F, T1, T2, T3)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply< F,T1,T2,T3,na,na >
+    : apply3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4
+
+    : apply_wrap4<
+          typename lambda<F>::type
+        , T1, T2, T3, T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , apply4
+        , (F, T1, T2, T3, T4)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply< F,T1,T2,T3,T4,na >
+    : apply4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5
+
+    : apply_wrap5<
+          typename lambda<F>::type
+        , T1, T2, T3, T4, T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          6
+        , apply5
+        , (F, T1, T2, T3, T4, T5)
+        )
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply
+    : apply5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp
new file mode 100644
index 0000000..3c27c97
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp
@@ -0,0 +1,52 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na
+    >
+struct apply;
+
+template<
+      typename F
+    >
+struct apply0;
+
+template<
+      typename F, typename T1
+    >
+struct apply1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp
new file mode 100644
index 0000000..c7895aa
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp
@@ -0,0 +1,461 @@
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      int N, typename F
+    >
+struct apply_wrap_impl0;
+
+template< typename F, bool F_has_apply >
+struct apply_wrap_impl0_bcb {
+    typedef typename F::template apply<na> type;
+};
+
+template< typename F >
+struct apply_wrap_impl0_bcb< F,true > {
+    typedef typename F::apply type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          0
+        , F
+       
+        >
+{
+    typedef apply_wrap_impl0_bcb< F, aux::has_apply<F>::value >::type type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          1
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          2
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          3
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          4
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na, na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          5
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na, na, na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap0
+    : apply_wrap_impl0<
+          ::pdalboost::mpl::aux::arity< F,0 >::value
+        , F
+       
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1
+    >
+struct apply_wrap_impl1;
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          1
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          2
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          3
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          4
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na, na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          5
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na, na, na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap1
+    : apply_wrap_impl1<
+          ::pdalboost::mpl::aux::arity< F,1 >::value
+        , F
+        , T1
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          2
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          3
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          4
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        , na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          5
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        , na, na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap2
+    : apply_wrap_impl2<
+          ::pdalboost::mpl::aux::arity< F,2 >::value
+        , F
+        , T1, T2
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3<
+          3
+        , F
+        , T1, T2, T3
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3<
+          4
+        , F
+        , T1, T2, T3
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3
+
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3<
+          5
+        , F
+        , T1, T2, T3
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3
+
+        , na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap3
+    : apply_wrap_impl3<
+          ::pdalboost::mpl::aux::arity< F,3 >::value
+        , F
+        , T1, T2, T3
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap_impl4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap_impl4<
+          4
+        , F
+        , T1, T2, T3, T4
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3, T4
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap_impl4<
+          5
+        , F
+        , T1, T2, T3, T4
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3, T4
+
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap4
+    : apply_wrap_impl4<
+          ::pdalboost::mpl::aux::arity< F,4 >::value
+        , F
+        , T1, T2, T3, T4
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap_impl5;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap_impl5<
+          5
+        , F
+        , T1, T2, T3, T4, T5
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3, T4, T5
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap5
+    : apply_wrap_impl5<
+          ::pdalboost::mpl::aux::arity< F,5 >::value
+        , F
+        , T1, T2, T3, T4, T5
+        >::type
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/arg.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/arg.hpp
new file mode 100644
index 0000000..3ac4340
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/arg.hpp
@@ -0,0 +1,117 @@
+
+// Copyright Peter Dimov 2001-2002
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+    BOOST_STATIC_CONSTANT(int, value  = -1);
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<1>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 1);
+    typedef arg<2> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<2>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 2);
+    typedef arg<3> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+        typedef U2 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<3>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 3);
+    typedef arg<4> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+        typedef U3 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<4>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 4);
+    typedef arg<5> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+        typedef U4 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<5>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 5);
+    typedef arg<6> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+        typedef U5 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp
new file mode 100644
index 0000000..e484efc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp
@@ -0,0 +1,300 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/bind.hpp
new file mode 100644
index 0000000..e093b0e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/bind.hpp
@@ -0,0 +1,397 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      typename T
+    , typename Arg
+    >
+struct replace_unnamed_arg
+{
+    typedef Arg next;
+    typedef T type;
+};
+
+template<
+      typename Arg
+    >
+struct replace_unnamed_arg< arg< -1 >, Arg >
+{
+    typedef typename Arg::next next;
+    typedef Arg type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+        typedef aux::replace_unnamed_arg< T5,n5 > r5;
+        typedef typename r5::type a5;
+        typedef typename r5::next n6;
+        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+        ///
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp
new file mode 100644
index 0000000..56fa5cf
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp
@@ -0,0 +1,46 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct bind0;
+
+template<
+      typename F, typename T1
+    >
+struct bind1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/bitand.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/bitand.hpp
new file mode 100644
index 0000000..a1f9adb
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/bitand.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitand_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitand_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitand_
+    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitand_< N1,N2,N3,N4,na >
+
+    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitand_< N1,N2,N3,na,na >
+
+    : bitand_< bitand_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitand_< N1,N2,na,na,na >
+    : bitand_impl<
+          typename bitand_tag<N1>::type
+        , typename bitand_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/bitor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/bitor.hpp
new file mode 100644
index 0000000..16a0974
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/bitor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitor_
+    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitor_< N1,N2,N3,N4,na >
+
+    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitor_< N1,N2,N3,na,na >
+
+    : bitor_< bitor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitor_< N1,N2,na,na,na >
+    : bitor_impl<
+          typename bitor_tag<N1>::type
+        , typename bitor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp
new file mode 100644
index 0000000..0194570
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitxor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitxor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitxor_
+    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitxor_< N1,N2,N3,N4,na >
+
+    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitxor_< N1,N2,N3,na,na >
+
+    : bitxor_< bitxor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitxor_< N1,N2,na,na,na >
+    : bitxor_impl<
+          typename bitxor_tag<N1>::type
+        , typename bitxor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/deque.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/deque.hpp
new file mode 100644
index 0000000..e072884
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/deque.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct deque;
+
+template<
+     
+    >
+struct deque<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct deque<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct deque<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct deque<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct deque<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct deque<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct deque
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/divides.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/divides.hpp
new file mode 100644
index 0000000..11cce34
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/divides.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct divides_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct divides_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct divides
+    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , divides
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct divides< N1,N2,N3,N4,na >
+
+    : divides< divides< divides< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct divides< N1,N2,N3,na,na >
+
+    : divides< divides< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct divides< N1,N2,na,na,na >
+    : divides_impl<
+          typename divides_tag<N1>::type
+        , typename divides_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp
new file mode 100644
index 0000000..1d731da
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct equal_to
+
+    : equal_to_impl<
+          typename equal_to_tag<N1>::type
+        , typename equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp
new file mode 100644
index 0000000..a3bcda9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl
+{
+    typedef fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,First,Last,State,ForwardOp >
+    : fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp
new file mode 100644
index 0000000..3dcfe7e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp
@@ -0,0 +1,558 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Arity
+    >
+struct lambda
+{
+    typedef false_ is_le;
+    typedef T result_;
+    typedef T type;
+};
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>,Tag, int_< -1 > >
+{
+    typedef true_ is_le;
+    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+    typedef mpl::protect<result_> type;
+};
+
+template<
+      typename F
+    , typename Tag
+    >
+struct lambda<
+          bind0<F>
+        , Tag
+        , int_<1>
+        >
+{
+    typedef false_ is_le;
+    typedef bind0<
+          F
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1
+{
+    typedef F<
+          typename L1::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1< true_,Tag,F,L1 >
+{
+    typedef bind1<
+          quote1< F,Tag >
+        , typename L1::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1 > class F
+    , typename T1
+    , typename Tag
+    >
+struct lambda<
+          F<T1>
+        , Tag
+        , int_<1>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef typename l1::is_le is_le1;
+    typedef typename aux::lambda_or<
+          is_le1::value
+        >::type is_le;
+
+    typedef aux::le_result1<
+          is_le, Tag, F, l1
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1
+    , typename Tag
+    >
+struct lambda<
+          bind1< F,T1 >
+        , Tag
+        , int_<2>
+        >
+{
+    typedef false_ is_le;
+    typedef bind1<
+          F
+        , T1
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2
+{
+    typedef F<
+          typename L1::type, typename L2::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+    typedef bind2<
+          quote2< F,Tag >
+        , typename L1::result_, typename L2::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2 >
+        , Tag
+        , int_<2>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value
+        >::type is_le;
+
+    typedef aux::le_result2<
+          is_le, Tag, F, l1, l2
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          bind2< F,T1,T2 >
+        , Tag
+        , int_<3>
+        >
+{
+    typedef false_ is_le;
+    typedef bind2<
+          F
+        , T1, T2
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+    typedef bind3<
+          quote3< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3 >
+        , Tag
+        , int_<3>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value
+        >::type is_le;
+
+    typedef aux::le_result3<
+          is_le, Tag, F, l1, l2, l3
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          bind3< F,T1,T2,T3 >
+        , Tag
+        , int_<4>
+        >
+{
+    typedef false_ is_le;
+    typedef bind3<
+          F
+        , T1, T2, T3
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+    typedef bind4<
+          quote4< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4 >
+        , Tag
+        , int_<4>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        >::type is_le;
+
+    typedef aux::le_result4<
+          is_le, Tag, F, l1, l2, l3, l4
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          bind4< F,T1,T2,T3,T4 >
+        , Tag
+        , int_<5>
+        >
+{
+    typedef false_ is_le;
+    typedef bind4<
+          F
+        , T1, T2, T3, T4
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type, typename L5::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+    typedef bind5<
+          quote5< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_, typename L5::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4,T5 >
+        , Tag
+        , int_<5>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    typedef lambda< T5,Tag > l5;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    typedef typename l5::is_le is_le5;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        , is_le5::value
+        >::type is_le;
+
+    typedef aux::le_result5<
+          is_le, Tag, F, l1, l2, l3, l4, l5
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind5< F,T1,T2,T3,T4,T5 >
+        , Tag
+        , int_<6>
+        >
+{
+    typedef false_ is_le;
+    typedef bind5<
+          F
+        , T1, T2, T3, T4, T5
+        > result_;
+
+    typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>,Tag, int_<1> >
+{
+    typedef false_ is_le;
+    typedef mpl::protect<T> result_;
+    typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind< F,T1,T2,T3,T4,T5 >
+        , Tag
+        , int_<6>
+        >
+{
+    typedef false_ is_le;
+    typedef bind< F,T1,T2,T3,T4,T5 > result_;
+    typedef result_ type;
+};
+
+template<
+      typename F
+    , typename Tag1
+    , typename Tag2
+    , typename Arity
+    >
+struct lambda<
+          lambda< F,Tag1,Arity >
+        , Tag2
+        , int_<3>
+        >
+{
+    typedef lambda< F,Tag2 > l1;
+    typedef lambda< Tag1,Tag2 > l2;
+    typedef typename l1::is_le is_le;
+    typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;
+    typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3;
+    typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/greater.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/greater.hpp
new file mode 100644
index 0000000..1fc8360
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/greater.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater
+
+    : greater_impl<
+          typename greater_tag<N1>::type
+        , typename greater_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp
new file mode 100644
index 0000000..494e043
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater_equal
+
+    : greater_equal_impl<
+          typename greater_equal_tag<N1>::type
+        , typename greater_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/inherit.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/inherit.hpp
new file mode 100644
index 0000000..21ab009
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/inherit.hpp
@@ -0,0 +1,139 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    >
+struct inherit2
+    : T1, T2
+{
+    typedef inherit2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+template< typename T1 >
+struct inherit2< T1,empty_base >
+{
+    typedef T1 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
+};
+
+template< typename T2 >
+struct inherit2< empty_base,T2 >
+{
+    typedef T2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
+};
+
+template<>
+struct inherit2< empty_base,empty_base >
+{
+    typedef empty_base type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na
+    >
+struct inherit3
+    : inherit2<
+          typename inherit2<
+              T1, T2
+            >::type
+        , T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , inherit3
+        , ( T1, T2, T3)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    >
+struct inherit4
+    : inherit2<
+          typename inherit3<
+              T1, T2, T3
+            >::type
+        , T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , inherit4
+        , ( T1, T2, T3, T4)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    , typename T5 = na
+    >
+struct inherit5
+    : inherit2<
+          typename inherit4<
+              T1, T2, T3, T4
+            >::type
+        , T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , inherit5
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+      typename T1 = empty_base, typename T2 = empty_base
+    , typename T3 = empty_base, typename T4 = empty_base
+    , typename T5 = empty_base
+    >
+struct inherit
+    : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+    template<
+
+          typename T1, typename T2, typename T3, typename T4, typename T5
+
+        >
+    struct apply
+        : inherit< T1,T2,T3,T4,T5 >
+    {
+    };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp
new file mode 100644
index 0000000..73a86af
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename Iterator, typename State >
+struct iter_fold_if_null_step
+{
+    typedef State state;
+    typedef Iterator iterator;
+};
+
+template< bool >
+struct iter_fold_if_step_impl
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef typename apply2< StateOp,State,Iterator >::type state;
+        typedef typename IteratorOp::type iterator;
+    };
+};
+
+template<>
+struct iter_fold_if_step_impl<false>
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef State state;
+        typedef Iterator iterator;
+    };
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_forward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename BackwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_backward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename ForwardPredicate
+    , typename BackwardOp
+    , typename BackwardPredicate
+    >
+struct iter_fold_if_impl
+{
+ private:
+    typedef iter_fold_if_null_step< Iterator,State > forward_step0;
+    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+    
+
+    typedef typename if_<
+          typename forward_step4::not_last
+        , iter_fold_if_impl<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            , ForwardOp
+            , ForwardPredicate
+            , BackwardOp
+            , BackwardPredicate
+            >
+        , iter_fold_if_null_step<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            >
+        >::type backward_step4;
+
+    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+    
+
+ public:
+    typedef typename backward_step0::state state;
+    typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp
new file mode 100644
index 0000000..f8b46e5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl
+{
+    typedef iter_fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef iter_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,First,Last,State,ForwardOp >
+    : iter_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp
new file mode 100644
index 0000000..a84cbc3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp
@@ -0,0 +1,229 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+    template< typename T, typename Tag, typename Protect > struct result_
+    {
+        typedef T type;
+        typedef is_placeholder<T> is_le;
+    };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef typename l1::is_le is_le1;
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+            > is_le;
+
+        typedef bind1<
+              typename F::rebind
+            , typename l1::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+            > is_le;
+
+        typedef bind2<
+              typename F::rebind
+            , typename l1::type, typename l2::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+            > is_le;
+
+        typedef bind3<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+            > is_le;
+
+        typedef bind4<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        typedef lambda< typename F::arg5, Tag, false_ > l5;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        typedef typename l5::is_le is_le5;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+            > is_le;
+
+        typedef bind5<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type, typename l5::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Protect
+    >
+struct lambda
+{
+    /// Metafunction forwarding confuses MSVC 6.x
+    typedef typename aux::template_arity<T>::type arity_;
+    typedef typename aux::lambda_impl<arity_>
+        ::template result_< T,Tag,Protect > l_;
+
+    typedef typename l_::type type;
+    typedef typename l_::is_le is_le;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/less.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/less.hpp
new file mode 100644
index 0000000..814ae0c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/less.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less
+
+    : less_impl<
+          typename less_tag<N1>::type
+        , typename less_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp
new file mode 100644
index 0000000..7c14b03
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less_equal
+
+    : less_equal_impl<
+          typename less_equal_tag<N1>::type
+        , typename less_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/list.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/list.hpp
new file mode 100644
index 0000000..accc792
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/list.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "list.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct list;
+
+template<
+     
+    >
+struct list<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list0<  >
+{
+    typedef list0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct list<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list1<T0>
+{
+    typedef typename list1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct list<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list2< T0,T1 >
+{
+    typedef typename list2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct list<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list3< T0,T1,T2 >
+{
+    typedef typename list3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct list<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list4< T0,T1,T2,T3 >
+{
+    typedef typename list4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct list<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list5< T0,T1,T2,T3,T4 >
+{
+    typedef typename list5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : list15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : list16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : list17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : list18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : list19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct list
+    : list20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/list_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/list_c.hpp
new file mode 100644
index 0000000..5e15dd3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/list_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "list_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct list_c;
+
+template<
+      typename T
+    >
+struct list_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list0_c<T>
+{
+    typedef typename list0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct list_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list1_c< T,C0 >
+{
+    typedef typename list1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct list_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list2_c< T,C0,C1 >
+{
+    typedef typename list2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct list_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list3_c< T,C0,C1,C2 >
+{
+    typedef typename list3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct list_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : list18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : list19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct list_c
+    : list20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/map.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/map.hpp
new file mode 100644
index 0000000..91a1251
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/map.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct map;
+
+template<
+     
+    >
+struct map<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map0<  >
+{
+    typedef map0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct map<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map1<T0>
+{
+    typedef typename map1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct map<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map2< T0,T1 >
+{
+    typedef typename map2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct map<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map3< T0,T1,T2 >
+{
+    typedef typename map3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct map<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map4< T0,T1,T2,T3 >
+{
+    typedef typename map4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct map<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map5< T0,T1,T2,T3,T4 >
+{
+    typedef typename map5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : map15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : map16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : map17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : map18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : map19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct map
+    : map20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/minus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/minus.hpp
new file mode 100644
index 0000000..17cd7f1
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/minus.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct minus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct minus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct minus
+    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , minus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct minus< N1,N2,N3,N4,na >
+
+    : minus< minus< minus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct minus< N1,N2,N3,na,na >
+
+    : minus< minus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct minus< N1,N2,na,na,na >
+    : minus_impl<
+          typename minus_tag<N1>::type
+        , typename minus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/modulus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/modulus.hpp
new file mode 100644
index 0000000..5aa861a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/modulus.hpp
@@ -0,0 +1,101 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct modulus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct modulus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct modulus
+
+    : modulus_impl<
+          typename modulus_tag<N1>::type
+        , typename modulus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp
new file mode 100644
index 0000000..9e9a6ac
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct not_equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct not_equal_to
+
+    : not_equal_to_impl<
+          typename not_equal_to_tag<N1>::type
+        , typename not_equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/or.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/or.hpp
new file mode 100644
index 0000000..4444488
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/or.hpp
@@ -0,0 +1,69 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct or_impl
+    : true_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct or_impl< false,T1,T2,T3,T4 >
+    : or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , false_
+        >
+{
+};
+
+template<>
+struct or_impl<
+          false
+        , false_, false_, false_, false_
+        >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = false_, typename T4 = false_, typename T5 = false_
+    >
+struct or_
+
+    : aux::or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , or_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , or_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp
new file mode 100644
index 0000000..0a4d62d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#' 
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/plus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/plus.hpp
new file mode 100644
index 0000000..10aaebd
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/plus.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct plus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct plus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct plus
+    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , plus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct plus< N1,N2,N3,N4,na >
+
+    : plus< plus< plus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct plus< N1,N2,N3,na,na >
+
+    : plus< plus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct plus< N1,N2,na,na,na >
+    : plus_impl<
+          typename plus_tag<N1>::type
+        , typename plus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/quote.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/quote.hpp
new file mode 100644
index 0000000..3bd9755
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/quote.hpp
@@ -0,0 +1,119 @@
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "quote.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template< typename T, bool has_type_ >
+struct quote_impl
+
+{
+    typedef typename T::type type;
+};
+
+template< typename T >
+struct quote_impl< T,false >
+{
+    typedef T type;
+};
+
+template<
+      template< typename P1 > class F
+    , typename Tag = void_
+    >
+struct quote1
+{
+    template< typename U1 > struct apply
+
+    {
+        typedef typename quote_impl<
+              F<U1>
+            , aux::has_type< F<U1> >::value
+            >::type type;
+    };
+};
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename Tag = void_
+    >
+struct quote2
+{
+    template< typename U1, typename U2 > struct apply
+
+    {
+        typedef typename quote_impl<
+              F< U1,U2 >
+            , aux::has_type< F< U1,U2 > >::value
+            >::type type;
+    };
+};
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename Tag = void_
+    >
+struct quote3
+{
+    template< typename U1, typename U2, typename U3 > struct apply
+
+    {
+        typedef typename quote_impl<
+              F< U1,U2,U3 >
+            , aux::has_type< F< U1,U2,U3 > >::value
+            >::type type;
+    };
+};
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename Tag = void_
+    >
+struct quote4
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4
+        >
+    struct apply
+
+    {
+        typedef typename quote_impl<
+              F< U1,U2,U3,U4 >
+            , aux::has_type< F< U1,U2,U3,U4 > >::value
+            >::type type;
+    };
+};
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename Tag = void_
+    >
+struct quote5
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4
+        , typename U5
+        >
+    struct apply
+
+    {
+        typedef typename quote_impl<
+              F< U1,U2,U3,U4,U5 >
+            , aux::has_type< F< U1,U2,U3,U4,U5 > >::value
+            >::type type;
+    };
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp
new file mode 100644
index 0000000..b0d3902
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl;
+
+template< long N >
+struct reverse_fold_chunk;
+
+template<> struct reverse_fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef fwd_state0 bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter0 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef fwd_state1 bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter1 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef fwd_state2 bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter2 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef fwd_state3 bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter3 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef fwd_state4 bkwd_state4;
+        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter4 iterator;
+    };
+};
+
+template< long N >
+struct reverse_fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef reverse_fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , iter4
+            , Last
+            , fwd_state4
+            , BackwardOp
+            , ForwardOp
+            > nested_chunk;
+
+        typedef typename nested_chunk::state bkwd_state4;
+        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef typename nested_chunk::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct reverse_fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct reverse_fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , reverse_fold_null_step< Last,State >
+            , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_step
+{
+    typedef reverse_fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , typename deref<First>::type
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl
+    : reverse_fold_chunk<N>
+        ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp
new file mode 100644
index 0000000..208f064
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl;
+
+template< long N >
+struct reverse_iter_fold_chunk;
+
+template<> struct reverse_iter_fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef fwd_state0 bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter0 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef fwd_state1 bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter1 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef fwd_state2 bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter2 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef fwd_state3 bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter3 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef fwd_state4 bkwd_state4;
+        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter4 iterator;
+    };
+};
+
+template< long N >
+struct reverse_iter_fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef reverse_iter_fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , iter4
+            , Last
+            , fwd_state4
+            , BackwardOp
+            , ForwardOp
+            > nested_chunk;
+
+        typedef typename nested_chunk::state bkwd_state4;
+        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef typename nested_chunk::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct reverse_iter_fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct reverse_iter_fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , reverse_iter_fold_null_step< Last,State >
+            , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_step
+{
+    typedef reverse_iter_fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , First
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl
+    : reverse_iter_fold_chunk<N>
+        ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/set.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/set.hpp
new file mode 100644
index 0000000..4651630
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/set.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct set;
+
+template<
+     
+    >
+struct set<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set0<  >
+{
+    typedef set0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct set<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set1<T0>
+{
+    typedef typename set1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct set<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set2< T0,T1 >
+{
+    typedef typename set2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct set<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set3< T0,T1,T2 >
+{
+    typedef typename set3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct set<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set4< T0,T1,T2,T3 >
+{
+    typedef typename set4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct set<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set5< T0,T1,T2,T3,T4 >
+{
+    typedef typename set5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : set15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : set16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : set17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : set18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : set19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct set
+    : set20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/set_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/set_c.hpp
new file mode 100644
index 0000000..ff4bbe7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/set_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct set_c;
+
+template<
+      typename T
+    >
+struct set_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set0_c<T>
+{
+    typedef typename set0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct set_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set1_c< T,C0 >
+{
+    typedef typename set1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct set_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set2_c< T,C0,C1 >
+{
+    typedef typename set2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct set_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set3_c< T,C0,C1,C2 >
+{
+    typedef typename set3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct set_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : set18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : set19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct set_c
+    : set20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp
new file mode 100644
index 0000000..5564b01
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_left_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_left_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_left
+
+    : shift_left_impl<
+          typename shift_left_tag<N1>::type
+        , typename shift_left_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  << BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp
new file mode 100644
index 0000000..f4e34a6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_right_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_right_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_right
+
+    : shift_right_impl<
+          typename shift_right_tag<N1>::type
+        , typename shift_right_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp
new file mode 100644
index 0000000..f127957
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp
@@ -0,0 +1,40 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "template_arity.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< bool >
+struct template_arity_impl
+{
+    template< typename F > struct result_
+        : mpl::int_< -1 >
+    {
+    };
+};
+
+template<>
+struct template_arity_impl<true>
+{
+    template< typename F > struct result_
+        : F::arity
+    {
+    };
+};
+
+template< typename F >
+struct template_arity
+    : template_arity_impl< ::pdalboost::mpl::aux::has_rebind<F>::value >
+        ::template result_<F>
+{
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/times.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/times.hpp
new file mode 100644
index 0000000..12413ae
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/times.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct times_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct times_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct times
+    : times< times< times< times< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , times
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct times< N1,N2,N3,N4,na >
+
+    : times< times< times< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct times< N1,N2,N3,na,na >
+
+    : times< times< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct times< N1,N2,na,na,na >
+    : times_impl<
+          typename times_tag<N1>::type
+        , typename times_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp
new file mode 100644
index 0000000..06dad32
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+
+template< typename F, typename Args >
+struct unpack_args_impl< 0,F,Args >
+    : apply0<
+          F
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 1,F,Args >
+    : apply1<
+          F
+        , typename at_c< Args,0 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 2,F,Args >
+    : apply2<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 3,F,Args >
+    : apply3<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 4,F,Args >
+    : apply4<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 5,F,Args >
+    : apply5<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        , typename at_c< Args,4 >::type
+        >
+{
+};
+
+}
+
+template<
+      typename F
+    >
+struct unpack_args
+{
+    template< typename Args > struct apply
+    {
+        typedef typename aux::unpack_args_impl<
+              size<Args>::value
+            , F
+            , Args
+            >::type type;
+
+    };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/vector.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/vector.hpp
new file mode 100644
index 0000000..2143fe0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/vector.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct vector;
+
+template<
+     
+    >
+struct vector<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct vector<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct vector<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct vector<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct vector<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct vector<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct vector
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp
new file mode 100644
index 0000000..f149d38
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp
@@ -0,0 +1,309 @@
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct vector_c;
+
+template<
+      typename T
+    >
+struct vector_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector0_c<T>
+{
+    typedef typename vector0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct vector_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector1_c< T, T(C0) >
+{
+    typedef typename vector1_c< T, T(C0) >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct vector_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector2_c< T, T(C0), T(C1) >
+{
+    typedef typename vector2_c< T, T(C0), T(C1) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct vector_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector3_c< T, T(C0), T(C1), T(C2) >
+{
+    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >
+{
+    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >
+{
+    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >
+{
+    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >
+{
+    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >
+{
+    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >
+{
+    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >
+{
+    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >
+{
+    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >
+{
+    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >
+{
+    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >
+{
+    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >
+{
+    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >
+{
+    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >
+{
+    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >
+{
+    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >
+{
+    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct vector_c
+    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >
+{
+    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp
new file mode 100644
index 0000000..8d91863
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_backward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_backward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_backward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_backward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef typename prior<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_backward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_backward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_backward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp
new file mode 100644
index 0000000..1d13df3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_forward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_forward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_forward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_forward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef typename next<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_forward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_forward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_forward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/and.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/and.hpp
new file mode 100644
index 0000000..f55cb1c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/and.hpp
@@ -0,0 +1,69 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+    : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+    : and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , true_
+        >
+{
+};
+
+template<>
+struct and_impl<
+          true
+        , true_, true_, true_, true_
+        >
+    : true_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = true_, typename T4 = true_, typename T5 = true_
+    >
+struct and_
+
+    : aux::and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , and_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , and_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/apply.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/apply.hpp
new file mode 100644
index 0000000..eeec182
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/apply.hpp
@@ -0,0 +1,169 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct apply0
+
+    : apply_wrap0<
+          typename lambda<F>::type
+       
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          1
+        , apply0
+        , (F )
+        )
+};
+
+template<
+      typename F
+    >
+struct apply< F,na,na,na,na,na >
+    : apply0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply1
+
+    : apply_wrap1<
+          typename lambda<F>::type
+        , T1
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          2
+        , apply1
+        , (F, T1)
+        )
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply< F,T1,na,na,na,na >
+    : apply1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2
+
+    : apply_wrap2<
+          typename lambda<F>::type
+        , T1, T2
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , apply2
+        , (F, T1, T2)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply< F,T1,T2,na,na,na >
+    : apply2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3
+
+    : apply_wrap3<
+          typename lambda<F>::type
+        , T1, T2, T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , apply3
+        , (F, T1, T2, T3)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply< F,T1,T2,T3,na,na >
+    : apply3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4
+
+    : apply_wrap4<
+          typename lambda<F>::type
+        , T1, T2, T3, T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , apply4
+        , (F, T1, T2, T3, T4)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply< F,T1,T2,T3,T4,na >
+    : apply4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5
+
+    : apply_wrap5<
+          typename lambda<F>::type
+        , T1, T2, T3, T4, T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          6
+        , apply5
+        , (F, T1, T2, T3, T4, T5)
+        )
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply
+    : apply5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp
new file mode 100644
index 0000000..a309ea1
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp
@@ -0,0 +1,52 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na
+    >
+struct apply;
+
+template<
+      typename F
+    >
+struct apply0;
+
+template<
+      typename F, typename T1
+    >
+struct apply1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp
new file mode 100644
index 0000000..9340cb7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp
@@ -0,0 +1,456 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      int N, typename F
+    >
+struct apply_wrap_impl0;
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          0
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+/// since the defaults are "lost", we have to pass *something* even for nullary
+/// metafunction classes
+        na
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          1
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          2
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          3
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          4
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na, na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          5
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na, na, na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap0
+    : apply_wrap_impl0<
+          ::pdalboost::mpl::aux::arity< F,0 >::value
+        , F
+       
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1
+    >
+struct apply_wrap_impl1;
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          1
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          2
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          3
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          4
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na, na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          5
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na, na, na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap1
+    : apply_wrap_impl1<
+          ::pdalboost::mpl::aux::arity< F,1 >::value
+        , F
+        , T1
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          2
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          3
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          4
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        , na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          5
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        , na, na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap2
+    : apply_wrap_impl2<
+          ::pdalboost::mpl::aux::arity< F,2 >::value
+        , F
+        , T1, T2
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3<
+          3
+        , F
+        , T1, T2, T3
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3<
+          4
+        , F
+        , T1, T2, T3
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3
+
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3<
+          5
+        , F
+        , T1, T2, T3
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3
+
+        , na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap3
+    : apply_wrap_impl3<
+          ::pdalboost::mpl::aux::arity< F,3 >::value
+        , F
+        , T1, T2, T3
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap_impl4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap_impl4<
+          4
+        , F
+        , T1, T2, T3, T4
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3, T4
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap_impl4<
+          5
+        , F
+        , T1, T2, T3, T4
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3, T4
+
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap4
+    : apply_wrap_impl4<
+          ::pdalboost::mpl::aux::arity< F,4 >::value
+        , F
+        , T1, T2, T3, T4
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap_impl5;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap_impl5<
+          5
+        , F
+        , T1, T2, T3, T4, T5
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3, T4, T5
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap5
+    : apply_wrap_impl5<
+          ::pdalboost::mpl::aux::arity< F,5 >::value
+        , F
+        , T1, T2, T3, T4, T5
+        >::type
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/arg.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/arg.hpp
new file mode 100644
index 0000000..6f2f8a8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+    BOOST_STATIC_CONSTANT(int, value  = -1);
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<1>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 1);
+    typedef arg<2> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<2>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 2);
+    typedef arg<3> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U2 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<3>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 3);
+    typedef arg<4> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U3 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<4>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 4);
+    typedef arg<5> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U4 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<5>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 5);
+    typedef arg<6> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U5 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp
new file mode 100644
index 0000000..7735de2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp
@@ -0,0 +1,306 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/bind.hpp
new file mode 100644
index 0000000..e45d3ae
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/bind.hpp
@@ -0,0 +1,403 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      typename T
+    , typename Arg
+    >
+struct replace_unnamed_arg
+{
+    typedef Arg next;
+    typedef T type;
+};
+
+template<
+      typename Arg
+    >
+struct replace_unnamed_arg< arg< -1 >, Arg >
+{
+    typedef typename Arg::next next;
+    typedef Arg type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+        typedef aux::replace_unnamed_arg< T5,n5 > r5;
+        typedef typename r5::type a5;
+        typedef typename r5::next n6;
+        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+        ///
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp
new file mode 100644
index 0000000..dc6687f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp
@@ -0,0 +1,46 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct bind0;
+
+template<
+      typename F, typename T1
+    >
+struct bind1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp
new file mode 100644
index 0000000..cb583c9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitand_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitand_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitand_
+    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitand_< N1,N2,N3,N4,na >
+
+    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitand_< N1,N2,N3,na,na >
+
+    : bitand_< bitand_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitand_< N1,N2,na,na,na >
+    : bitand_impl<
+          typename bitand_tag<N1>::type
+        , typename bitand_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp
new file mode 100644
index 0000000..d161c4f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitor_
+    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitor_< N1,N2,N3,N4,na >
+
+    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitor_< N1,N2,N3,na,na >
+
+    : bitor_< bitor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitor_< N1,N2,na,na,na >
+    : bitor_impl<
+          typename bitor_tag<N1>::type
+        , typename bitor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp
new file mode 100644
index 0000000..b29bfd7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitxor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitxor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitxor_
+    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitxor_< N1,N2,N3,N4,na >
+
+    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitxor_< N1,N2,N3,na,na >
+
+    : bitxor_< bitxor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitxor_< N1,N2,na,na,na >
+    : bitxor_impl<
+          typename bitxor_tag<N1>::type
+        , typename bitxor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/deque.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/deque.hpp
new file mode 100644
index 0000000..bc99b03
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/deque.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct deque;
+
+template<
+     
+    >
+struct deque<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct deque<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct deque<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct deque<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct deque<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct deque<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct deque
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/divides.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/divides.hpp
new file mode 100644
index 0000000..e9032b0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/divides.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct divides_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct divides_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct divides
+    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , divides
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct divides< N1,N2,N3,N4,na >
+
+    : divides< divides< divides< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct divides< N1,N2,N3,na,na >
+
+    : divides< divides< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct divides< N1,N2,na,na,na >
+    : divides_impl<
+          typename divides_tag<N1>::type
+        , typename divides_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp
new file mode 100644
index 0000000..3855c94
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct equal_to
+
+    : equal_to_impl<
+          typename equal_to_tag<N1>::type
+        , typename equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp
new file mode 100644
index 0000000..728565c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl
+{
+    typedef fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,First,Last,State,ForwardOp >
+    : fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp
new file mode 100644
index 0000000..aaa1ec4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp
@@ -0,0 +1,558 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Arity
+    >
+struct lambda
+{
+    typedef false_ is_le;
+    typedef T result_;
+    typedef T type;
+};
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>,Tag, int_< -1 > >
+{
+    typedef true_ is_le;
+    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+    typedef mpl::protect<result_> type;
+};
+
+template<
+      typename F
+    , typename Tag
+    >
+struct lambda<
+          bind0<F>
+        , Tag
+        , int_<1>
+        >
+{
+    typedef false_ is_le;
+    typedef bind0<
+          F
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1
+{
+    typedef F<
+          typename L1::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1< true_,Tag,F,L1 >
+{
+    typedef bind1<
+          quote1< F,Tag >
+        , typename L1::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1 > class F
+    , typename T1
+    , typename Tag
+    >
+struct lambda<
+          F<T1>
+        , Tag
+        , int_<1>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef typename l1::is_le is_le1;
+    typedef typename aux::lambda_or<
+          is_le1::value
+        >::type is_le;
+
+    typedef aux::le_result1<
+          is_le, Tag, F, l1
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1
+    , typename Tag
+    >
+struct lambda<
+          bind1< F,T1 >
+        , Tag
+        , int_<2>
+        >
+{
+    typedef false_ is_le;
+    typedef bind1<
+          F
+        , T1
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2
+{
+    typedef F<
+          typename L1::type, typename L2::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+    typedef bind2<
+          quote2< F,Tag >
+        , typename L1::result_, typename L2::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2 >
+        , Tag
+        , int_<2>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value
+        >::type is_le;
+
+    typedef aux::le_result2<
+          is_le, Tag, F, l1, l2
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          bind2< F,T1,T2 >
+        , Tag
+        , int_<3>
+        >
+{
+    typedef false_ is_le;
+    typedef bind2<
+          F
+        , T1, T2
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+    typedef bind3<
+          quote3< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3 >
+        , Tag
+        , int_<3>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value
+        >::type is_le;
+
+    typedef aux::le_result3<
+          is_le, Tag, F, l1, l2, l3
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          bind3< F,T1,T2,T3 >
+        , Tag
+        , int_<4>
+        >
+{
+    typedef false_ is_le;
+    typedef bind3<
+          F
+        , T1, T2, T3
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+    typedef bind4<
+          quote4< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4 >
+        , Tag
+        , int_<4>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        >::type is_le;
+
+    typedef aux::le_result4<
+          is_le, Tag, F, l1, l2, l3, l4
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          bind4< F,T1,T2,T3,T4 >
+        , Tag
+        , int_<5>
+        >
+{
+    typedef false_ is_le;
+    typedef bind4<
+          F
+        , T1, T2, T3, T4
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type, typename L5::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+    typedef bind5<
+          quote5< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_, typename L5::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4,T5 >
+        , Tag
+        , int_<5>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    typedef lambda< T5,Tag > l5;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    typedef typename l5::is_le is_le5;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        , is_le5::value
+        >::type is_le;
+
+    typedef aux::le_result5<
+          is_le, Tag, F, l1, l2, l3, l4, l5
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind5< F,T1,T2,T3,T4,T5 >
+        , Tag
+        , int_<6>
+        >
+{
+    typedef false_ is_le;
+    typedef bind5<
+          F
+        , T1, T2, T3, T4, T5
+        > result_;
+
+    typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>,Tag, int_<1> >
+{
+    typedef false_ is_le;
+    typedef mpl::protect<T> result_;
+    typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind< F,T1,T2,T3,T4,T5 >
+        , Tag
+        , int_<6>
+        >
+{
+    typedef false_ is_le;
+    typedef bind< F,T1,T2,T3,T4,T5 > result_;
+    typedef result_ type;
+};
+
+template<
+      typename F
+    , typename Tag1
+    , typename Tag2
+    , typename Arity
+    >
+struct lambda<
+          lambda< F,Tag1,Arity >
+        , Tag2
+        , int_<3>
+        >
+{
+    typedef lambda< F,Tag2 > l1;
+    typedef lambda< Tag1,Tag2 > l2;
+    typedef typename l1::is_le is_le;
+    typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;
+    typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3;
+    typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/greater.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/greater.hpp
new file mode 100644
index 0000000..afebdd6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/greater.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater
+
+    : greater_impl<
+          typename greater_tag<N1>::type
+        , typename greater_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp
new file mode 100644
index 0000000..dd3bd5a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater_equal
+
+    : greater_equal_impl<
+          typename greater_equal_tag<N1>::type
+        , typename greater_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp
new file mode 100644
index 0000000..90eaeb2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp
@@ -0,0 +1,141 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    >
+struct inherit2
+    : T1, T2
+{
+    typedef inherit2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+template< typename T1 >
+struct inherit2< T1,empty_base >
+{
+    typedef T1 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
+};
+
+template< typename T2 >
+struct inherit2< empty_base,T2 >
+{
+    typedef T2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
+};
+
+template<>
+struct inherit2< empty_base,empty_base >
+{
+    typedef empty_base type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na
+    >
+struct inherit3
+    : inherit2<
+          typename inherit2<
+              T1, T2
+            >::type
+        , T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , inherit3
+        , ( T1, T2, T3)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    >
+struct inherit4
+    : inherit2<
+          typename inherit3<
+              T1, T2, T3
+            >::type
+        , T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , inherit4
+        , ( T1, T2, T3, T4)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    , typename T5 = na
+    >
+struct inherit5
+    : inherit2<
+          typename inherit4<
+              T1, T2, T3, T4
+            >::type
+        , T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , inherit5
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+      typename T1 = empty_base, typename T2 = empty_base
+    , typename T3 = empty_base, typename T4 = empty_base
+    , typename T5 = empty_base
+    >
+struct inherit
+    : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+    template<
+
+          typename T1 = empty_base, typename T2 = empty_base
+        , typename T3 = empty_base, typename T4 = empty_base
+        , typename T5 = empty_base
+
+        >
+    struct apply
+        : inherit< T1,T2,T3,T4,T5 >
+    {
+    };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp
new file mode 100644
index 0000000..74c0cc6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename Iterator, typename State >
+struct iter_fold_if_null_step
+{
+    typedef State state;
+    typedef Iterator iterator;
+};
+
+template< bool >
+struct iter_fold_if_step_impl
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef typename apply2< StateOp,State,Iterator >::type state;
+        typedef typename IteratorOp::type iterator;
+    };
+};
+
+template<>
+struct iter_fold_if_step_impl<false>
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef State state;
+        typedef Iterator iterator;
+    };
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_forward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename BackwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_backward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename ForwardPredicate
+    , typename BackwardOp
+    , typename BackwardPredicate
+    >
+struct iter_fold_if_impl
+{
+ private:
+    typedef iter_fold_if_null_step< Iterator,State > forward_step0;
+    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+    
+
+    typedef typename if_<
+          typename forward_step4::not_last
+        , iter_fold_if_impl<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            , ForwardOp
+            , ForwardPredicate
+            , BackwardOp
+            , BackwardPredicate
+            >
+        , iter_fold_if_null_step<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            >
+        >::type backward_step4;
+
+    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+    
+
+ public:
+    typedef typename backward_step0::state state;
+    typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp
new file mode 100644
index 0000000..78329b3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl
+{
+    typedef iter_fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef iter_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,First,Last,State,ForwardOp >
+    : iter_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp
new file mode 100644
index 0000000..5cb26dc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp
@@ -0,0 +1,229 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+    template< typename T, typename Tag, typename Protect > struct result_
+    {
+        typedef T type;
+        typedef is_placeholder<T> is_le;
+    };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef typename l1::is_le is_le1;
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+            > is_le;
+
+        typedef bind1<
+              typename F::rebind
+            , typename l1::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+            > is_le;
+
+        typedef bind2<
+              typename F::rebind
+            , typename l1::type, typename l2::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+            > is_le;
+
+        typedef bind3<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+            > is_le;
+
+        typedef bind4<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        typedef lambda< typename F::arg5, Tag, false_ > l5;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        typedef typename l5::is_le is_le5;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+            > is_le;
+
+        typedef bind5<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type, typename l5::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Protect
+    >
+struct lambda
+{
+    /// Metafunction forwarding confuses MSVC 6.x
+    typedef typename aux::template_arity<T>::type arity_;
+    typedef typename aux::lambda_impl<arity_>
+        ::template result_< T,Tag,Protect > l_;
+
+    typedef typename l_::type type;
+    typedef typename l_::is_le is_le;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/less.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/less.hpp
new file mode 100644
index 0000000..e70710d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/less.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less
+
+    : less_impl<
+          typename less_tag<N1>::type
+        , typename less_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp
new file mode 100644
index 0000000..dd11112
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less_equal
+
+    : less_equal_impl<
+          typename less_equal_tag<N1>::type
+        , typename less_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/list.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/list.hpp
new file mode 100644
index 0000000..cdef853
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/list.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct list;
+
+template<
+     
+    >
+struct list<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list0<  >
+{
+    typedef list0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct list<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list1<T0>
+{
+    typedef typename list1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct list<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list2< T0,T1 >
+{
+    typedef typename list2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct list<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list3< T0,T1,T2 >
+{
+    typedef typename list3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct list<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list4< T0,T1,T2,T3 >
+{
+    typedef typename list4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct list<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list5< T0,T1,T2,T3,T4 >
+{
+    typedef typename list5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : list15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : list16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : list17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : list18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : list19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct list
+    : list20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp
new file mode 100644
index 0000000..8194c09
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct list_c;
+
+template<
+      typename T
+    >
+struct list_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list0_c<T>
+{
+    typedef typename list0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct list_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list1_c< T,C0 >
+{
+    typedef typename list1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct list_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list2_c< T,C0,C1 >
+{
+    typedef typename list2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct list_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list3_c< T,C0,C1,C2 >
+{
+    typedef typename list3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct list_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : list18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : list19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct list_c
+    : list20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/map.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/map.hpp
new file mode 100644
index 0000000..54c9678
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/map.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct map;
+
+template<
+     
+    >
+struct map<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map0<  >
+{
+    typedef map0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct map<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map1<T0>
+{
+    typedef typename map1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct map<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map2< T0,T1 >
+{
+    typedef typename map2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct map<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map3< T0,T1,T2 >
+{
+    typedef typename map3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct map<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map4< T0,T1,T2,T3 >
+{
+    typedef typename map4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct map<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map5< T0,T1,T2,T3,T4 >
+{
+    typedef typename map5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : map15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : map16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : map17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : map18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : map19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct map
+    : map20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/minus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/minus.hpp
new file mode 100644
index 0000000..1a434ea
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/minus.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct minus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct minus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct minus
+    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , minus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct minus< N1,N2,N3,N4,na >
+
+    : minus< minus< minus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct minus< N1,N2,N3,na,na >
+
+    : minus< minus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct minus< N1,N2,na,na,na >
+    : minus_impl<
+          typename minus_tag<N1>::type
+        , typename minus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp
new file mode 100644
index 0000000..06498ef
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp
@@ -0,0 +1,101 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct modulus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct modulus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct modulus
+
+    : modulus_impl<
+          typename modulus_tag<N1>::type
+        , typename modulus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp
new file mode 100644
index 0000000..2ee61b8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct not_equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct not_equal_to
+
+    : not_equal_to_impl<
+          typename not_equal_to_tag<N1>::type
+        , typename not_equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/or.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/or.hpp
new file mode 100644
index 0000000..f0c868d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/or.hpp
@@ -0,0 +1,69 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct or_impl
+    : true_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct or_impl< false,T1,T2,T3,T4 >
+    : or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , false_
+        >
+{
+};
+
+template<>
+struct or_impl<
+          false
+        , false_, false_, false_, false_
+        >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = false_, typename T4 = false_, typename T5 = false_
+    >
+struct or_
+
+    : aux::or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , or_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , or_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp
new file mode 100644
index 0000000..0b0cc25
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#' 
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/plus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/plus.hpp
new file mode 100644
index 0000000..8468c28
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/plus.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct plus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct plus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct plus
+    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , plus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct plus< N1,N2,N3,N4,na >
+
+    : plus< plus< plus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct plus< N1,N2,N3,na,na >
+
+    : plus< plus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct plus< N1,N2,na,na,na >
+    : plus_impl<
+          typename plus_tag<N1>::type
+        , typename plus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/quote.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/quote.hpp
new file mode 100644
index 0000000..e7a7f00
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/quote.hpp
@@ -0,0 +1,11 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/quote.hpp" header
+// -- DO NOT modify by hand!
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp
new file mode 100644
index 0000000..fee5d0f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl;
+
+template< long N >
+struct reverse_fold_chunk;
+
+template<> struct reverse_fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef fwd_state0 bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter0 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef fwd_state1 bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter1 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef fwd_state2 bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter2 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef fwd_state3 bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter3 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef fwd_state4 bkwd_state4;
+        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter4 iterator;
+    };
+};
+
+template< long N >
+struct reverse_fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef reverse_fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , iter4
+            , Last
+            , fwd_state4
+            , BackwardOp
+            , ForwardOp
+            > nested_chunk;
+
+        typedef typename nested_chunk::state bkwd_state4;
+        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef typename nested_chunk::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct reverse_fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct reverse_fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , reverse_fold_null_step< Last,State >
+            , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_step
+{
+    typedef reverse_fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , typename deref<First>::type
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl
+    : reverse_fold_chunk<N>
+        ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp
new file mode 100644
index 0000000..14caf06
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl;
+
+template< long N >
+struct reverse_iter_fold_chunk;
+
+template<> struct reverse_iter_fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef fwd_state0 bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter0 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef fwd_state1 bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter1 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef fwd_state2 bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter2 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef fwd_state3 bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter3 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef fwd_state4 bkwd_state4;
+        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter4 iterator;
+    };
+};
+
+template< long N >
+struct reverse_iter_fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef reverse_iter_fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , iter4
+            , Last
+            , fwd_state4
+            , BackwardOp
+            , ForwardOp
+            > nested_chunk;
+
+        typedef typename nested_chunk::state bkwd_state4;
+        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef typename nested_chunk::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct reverse_iter_fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct reverse_iter_fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , reverse_iter_fold_null_step< Last,State >
+            , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_step
+{
+    typedef reverse_iter_fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , First
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl
+    : reverse_iter_fold_chunk<N>
+        ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/set.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/set.hpp
new file mode 100644
index 0000000..7ab0242
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/set.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct set;
+
+template<
+     
+    >
+struct set<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set0<  >
+{
+    typedef set0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct set<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set1<T0>
+{
+    typedef typename set1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct set<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set2< T0,T1 >
+{
+    typedef typename set2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct set<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set3< T0,T1,T2 >
+{
+    typedef typename set3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct set<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set4< T0,T1,T2,T3 >
+{
+    typedef typename set4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct set<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set5< T0,T1,T2,T3,T4 >
+{
+    typedef typename set5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : set15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : set16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : set17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : set18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : set19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct set
+    : set20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp
new file mode 100644
index 0000000..337e930
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct set_c;
+
+template<
+      typename T
+    >
+struct set_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set0_c<T>
+{
+    typedef typename set0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct set_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set1_c< T,C0 >
+{
+    typedef typename set1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct set_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set2_c< T,C0,C1 >
+{
+    typedef typename set2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct set_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set3_c< T,C0,C1,C2 >
+{
+    typedef typename set3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct set_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : set18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : set19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct set_c
+    : set20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp
new file mode 100644
index 0000000..17bcfc6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_left_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_left_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_left
+
+    : shift_left_impl<
+          typename shift_left_tag<N1>::type
+        , typename shift_left_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  << BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp
new file mode 100644
index 0000000..1c29ee0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_right_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_right_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_right
+
+    : shift_right_impl<
+          typename shift_right_tag<N1>::type
+        , typename shift_right_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp
new file mode 100644
index 0000000..c989170
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp
@@ -0,0 +1,40 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< bool >
+struct template_arity_impl
+{
+    template< typename F > struct result_
+        : mpl::int_< -1 >
+    {
+    };
+};
+
+template<>
+struct template_arity_impl<true>
+{
+    template< typename F > struct result_
+        : F::arity
+    {
+    };
+};
+
+template< typename F >
+struct template_arity
+    : template_arity_impl< ::pdalboost::mpl::aux::has_rebind<F>::value >
+        ::template result_<F>
+{
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/times.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/times.hpp
new file mode 100644
index 0000000..50bca2a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/times.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct times_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct times_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct times
+    : times< times< times< times< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , times
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct times< N1,N2,N3,N4,na >
+
+    : times< times< times< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct times< N1,N2,N3,na,na >
+
+    : times< times< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct times< N1,N2,na,na,na >
+    : times_impl<
+          typename times_tag<N1>::type
+        , typename times_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp
new file mode 100644
index 0000000..8f52ef3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+
+template< typename F, typename Args >
+struct unpack_args_impl< 0,F,Args >
+    : apply0<
+          F
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 1,F,Args >
+    : apply1<
+          F
+        , typename at_c< Args,0 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 2,F,Args >
+    : apply2<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 3,F,Args >
+    : apply3<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 4,F,Args >
+    : apply4<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 5,F,Args >
+    : apply5<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        , typename at_c< Args,4 >::type
+        >
+{
+};
+
+}
+
+template<
+      typename F
+    >
+struct unpack_args
+{
+    template< typename Args > struct apply
+    {
+        typedef typename aux::unpack_args_impl<
+              size<Args>::value
+            , F
+            , Args
+            >::type type;
+
+    };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/vector.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/vector.hpp
new file mode 100644
index 0000000..809efca
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/vector.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct vector;
+
+template<
+     
+    >
+struct vector<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct vector<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct vector<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct vector<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct vector<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct vector<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct vector
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp
new file mode 100644
index 0000000..323872c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp
@@ -0,0 +1,309 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct vector_c;
+
+template<
+      typename T
+    >
+struct vector_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector0_c<T>
+{
+    typedef typename vector0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct vector_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector1_c< T, T(C0) >
+{
+    typedef typename vector1_c< T, T(C0) >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct vector_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector2_c< T, T(C0), T(C1) >
+{
+    typedef typename vector2_c< T, T(C0), T(C1) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct vector_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector3_c< T, T(C0), T(C1), T(C2) >
+{
+    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >
+{
+    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >
+{
+    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >
+{
+    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >
+{
+    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >
+{
+    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >
+{
+    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >
+{
+    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >
+{
+    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >
+{
+    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >
+{
+    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >
+{
+    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >
+{
+    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >
+{
+    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >
+{
+    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >
+{
+    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >
+{
+    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct vector_c
+    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >
+{
+    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp
new file mode 100644
index 0000000..ae878c6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_backward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_backward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_backward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_backward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef typename prior<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_backward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_backward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_backward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp
new file mode 100644
index 0000000..1cd4025
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_forward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_forward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_forward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_forward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef typename next<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_forward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_forward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_forward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp
new file mode 100644
index 0000000..fdc8ff3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp
@@ -0,0 +1,69 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+    : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+    : and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , true_
+        >
+{
+};
+
+template<>
+struct and_impl<
+          true
+        , true_, true_, true_, true_
+        >
+    : true_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = true_, typename T4 = true_, typename T5 = true_
+    >
+struct and_
+
+    : aux::and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , and_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , and_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp
new file mode 100644
index 0000000..9bfa11b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp
@@ -0,0 +1,169 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct apply0
+
+    : apply_wrap0<
+          typename lambda<F>::type
+       
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          1
+        , apply0
+        , (F )
+        )
+};
+
+template<
+      typename F
+    >
+struct apply< F,na,na,na,na,na >
+    : apply0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply1
+
+    : apply_wrap1<
+          typename lambda<F>::type
+        , T1
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          2
+        , apply1
+        , (F, T1)
+        )
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply< F,T1,na,na,na,na >
+    : apply1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2
+
+    : apply_wrap2<
+          typename lambda<F>::type
+        , T1, T2
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , apply2
+        , (F, T1, T2)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply< F,T1,T2,na,na,na >
+    : apply2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3
+
+    : apply_wrap3<
+          typename lambda<F>::type
+        , T1, T2, T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , apply3
+        , (F, T1, T2, T3)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply< F,T1,T2,T3,na,na >
+    : apply3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4
+
+    : apply_wrap4<
+          typename lambda<F>::type
+        , T1, T2, T3, T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , apply4
+        , (F, T1, T2, T3, T4)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply< F,T1,T2,T3,T4,na >
+    : apply4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5
+
+    : apply_wrap5<
+          typename lambda<F>::type
+        , T1, T2, T3, T4, T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          6
+        , apply5
+        , (F, T1, T2, T3, T4, T5)
+        )
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply
+    : apply5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp
new file mode 100644
index 0000000..3c27c97
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp
@@ -0,0 +1,52 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na
+    >
+struct apply;
+
+template<
+      typename F
+    >
+struct apply0;
+
+template<
+      typename F, typename T1
+    >
+struct apply1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp
new file mode 100644
index 0000000..86be585
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp
@@ -0,0 +1,456 @@
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      int N, typename F
+    >
+struct apply_wrap_impl0;
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          0
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+/// since the defaults are "lost", we have to pass *something* even for nullary
+/// metafunction classes
+        na
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          1
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          2
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          3
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          4
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na, na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          5
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na, na, na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap0
+    : apply_wrap_impl0<
+          ::pdalboost::mpl::aux::arity< F,0 >::value
+        , F
+       
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1
+    >
+struct apply_wrap_impl1;
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          1
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          2
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          3
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          4
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na, na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          5
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na, na, na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap1
+    : apply_wrap_impl1<
+          ::pdalboost::mpl::aux::arity< F,1 >::value
+        , F
+        , T1
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          2
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          3
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          4
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        , na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          5
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        , na, na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap2
+    : apply_wrap_impl2<
+          ::pdalboost::mpl::aux::arity< F,2 >::value
+        , F
+        , T1, T2
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3<
+          3
+        , F
+        , T1, T2, T3
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3<
+          4
+        , F
+        , T1, T2, T3
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3
+
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3<
+          5
+        , F
+        , T1, T2, T3
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3
+
+        , na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap3
+    : apply_wrap_impl3<
+          ::pdalboost::mpl::aux::arity< F,3 >::value
+        , F
+        , T1, T2, T3
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap_impl4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap_impl4<
+          4
+        , F
+        , T1, T2, T3, T4
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3, T4
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap_impl4<
+          5
+        , F
+        , T1, T2, T3, T4
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3, T4
+
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap4
+    : apply_wrap_impl4<
+          ::pdalboost::mpl::aux::arity< F,4 >::value
+        , F
+        , T1, T2, T3, T4
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap_impl5;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap_impl5<
+          5
+        , F
+        , T1, T2, T3, T4, T5
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3, T4, T5
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap5
+    : apply_wrap_impl5<
+          ::pdalboost::mpl::aux::arity< F,5 >::value
+        , F
+        , T1, T2, T3, T4, T5
+        >::type
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp
new file mode 100644
index 0000000..3ac4340
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp
@@ -0,0 +1,117 @@
+
+// Copyright Peter Dimov 2001-2002
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+    BOOST_STATIC_CONSTANT(int, value  = -1);
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<1>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 1);
+    typedef arg<2> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<2>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 2);
+    typedef arg<3> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+        typedef U2 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<3>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 3);
+    typedef arg<4> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+        typedef U3 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<4>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 4);
+    typedef arg<5> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+        typedef U4 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<5>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 5);
+    typedef arg<6> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+        typedef U5 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp
new file mode 100644
index 0000000..e484efc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp
@@ -0,0 +1,300 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp
new file mode 100644
index 0000000..e093b0e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp
@@ -0,0 +1,397 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      typename T
+    , typename Arg
+    >
+struct replace_unnamed_arg
+{
+    typedef Arg next;
+    typedef T type;
+};
+
+template<
+      typename Arg
+    >
+struct replace_unnamed_arg< arg< -1 >, Arg >
+{
+    typedef typename Arg::next next;
+    typedef Arg type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4, typename U5
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+        typedef aux::replace_unnamed_arg< T5,n5 > r5;
+        typedef typename r5::type a5;
+        typedef typename r5::next n6;
+        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+        ///
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp
new file mode 100644
index 0000000..56fa5cf
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp
@@ -0,0 +1,46 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct bind0;
+
+template<
+      typename F, typename T1
+    >
+struct bind1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp
new file mode 100644
index 0000000..a1f9adb
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitand_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitand_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitand_
+    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitand_< N1,N2,N3,N4,na >
+
+    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitand_< N1,N2,N3,na,na >
+
+    : bitand_< bitand_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitand_< N1,N2,na,na,na >
+    : bitand_impl<
+          typename bitand_tag<N1>::type
+        , typename bitand_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp
new file mode 100644
index 0000000..16a0974
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitor_
+    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitor_< N1,N2,N3,N4,na >
+
+    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitor_< N1,N2,N3,na,na >
+
+    : bitor_< bitor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitor_< N1,N2,na,na,na >
+    : bitor_impl<
+          typename bitor_tag<N1>::type
+        , typename bitor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp
new file mode 100644
index 0000000..0194570
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitxor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitxor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitxor_
+    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitxor_< N1,N2,N3,N4,na >
+
+    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitxor_< N1,N2,N3,na,na >
+
+    : bitxor_< bitxor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitxor_< N1,N2,na,na,na >
+    : bitxor_impl<
+          typename bitxor_tag<N1>::type
+        , typename bitxor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp
new file mode 100644
index 0000000..e072884
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct deque;
+
+template<
+     
+    >
+struct deque<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct deque<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct deque<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct deque<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct deque<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct deque<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct deque
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp
new file mode 100644
index 0000000..11cce34
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct divides_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct divides_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct divides
+    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , divides
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct divides< N1,N2,N3,N4,na >
+
+    : divides< divides< divides< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct divides< N1,N2,N3,na,na >
+
+    : divides< divides< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct divides< N1,N2,na,na,na >
+    : divides_impl<
+          typename divides_tag<N1>::type
+        , typename divides_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp
new file mode 100644
index 0000000..1d731da
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct equal_to
+
+    : equal_to_impl<
+          typename equal_to_tag<N1>::type
+        , typename equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp
new file mode 100644
index 0000000..a3bcda9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl
+{
+    typedef fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,First,Last,State,ForwardOp >
+    : fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp
new file mode 100644
index 0000000..3dcfe7e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp
@@ -0,0 +1,558 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Arity
+    >
+struct lambda
+{
+    typedef false_ is_le;
+    typedef T result_;
+    typedef T type;
+};
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>,Tag, int_< -1 > >
+{
+    typedef true_ is_le;
+    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+    typedef mpl::protect<result_> type;
+};
+
+template<
+      typename F
+    , typename Tag
+    >
+struct lambda<
+          bind0<F>
+        , Tag
+        , int_<1>
+        >
+{
+    typedef false_ is_le;
+    typedef bind0<
+          F
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1
+{
+    typedef F<
+          typename L1::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1< true_,Tag,F,L1 >
+{
+    typedef bind1<
+          quote1< F,Tag >
+        , typename L1::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1 > class F
+    , typename T1
+    , typename Tag
+    >
+struct lambda<
+          F<T1>
+        , Tag
+        , int_<1>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef typename l1::is_le is_le1;
+    typedef typename aux::lambda_or<
+          is_le1::value
+        >::type is_le;
+
+    typedef aux::le_result1<
+          is_le, Tag, F, l1
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1
+    , typename Tag
+    >
+struct lambda<
+          bind1< F,T1 >
+        , Tag
+        , int_<2>
+        >
+{
+    typedef false_ is_le;
+    typedef bind1<
+          F
+        , T1
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2
+{
+    typedef F<
+          typename L1::type, typename L2::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+    typedef bind2<
+          quote2< F,Tag >
+        , typename L1::result_, typename L2::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2 >
+        , Tag
+        , int_<2>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value
+        >::type is_le;
+
+    typedef aux::le_result2<
+          is_le, Tag, F, l1, l2
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          bind2< F,T1,T2 >
+        , Tag
+        , int_<3>
+        >
+{
+    typedef false_ is_le;
+    typedef bind2<
+          F
+        , T1, T2
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+    typedef bind3<
+          quote3< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3 >
+        , Tag
+        , int_<3>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value
+        >::type is_le;
+
+    typedef aux::le_result3<
+          is_le, Tag, F, l1, l2, l3
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          bind3< F,T1,T2,T3 >
+        , Tag
+        , int_<4>
+        >
+{
+    typedef false_ is_le;
+    typedef bind3<
+          F
+        , T1, T2, T3
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+    typedef bind4<
+          quote4< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4 >
+        , Tag
+        , int_<4>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        >::type is_le;
+
+    typedef aux::le_result4<
+          is_le, Tag, F, l1, l2, l3, l4
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          bind4< F,T1,T2,T3,T4 >
+        , Tag
+        , int_<5>
+        >
+{
+    typedef false_ is_le;
+    typedef bind4<
+          F
+        , T1, T2, T3, T4
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type, typename L5::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+    typedef bind5<
+          quote5< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_, typename L5::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4,T5 >
+        , Tag
+        , int_<5>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    typedef lambda< T5,Tag > l5;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    typedef typename l5::is_le is_le5;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        , is_le5::value
+        >::type is_le;
+
+    typedef aux::le_result5<
+          is_le, Tag, F, l1, l2, l3, l4, l5
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind5< F,T1,T2,T3,T4,T5 >
+        , Tag
+        , int_<6>
+        >
+{
+    typedef false_ is_le;
+    typedef bind5<
+          F
+        , T1, T2, T3, T4, T5
+        > result_;
+
+    typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>,Tag, int_<1> >
+{
+    typedef false_ is_le;
+    typedef mpl::protect<T> result_;
+    typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind< F,T1,T2,T3,T4,T5 >
+        , Tag
+        , int_<6>
+        >
+{
+    typedef false_ is_le;
+    typedef bind< F,T1,T2,T3,T4,T5 > result_;
+    typedef result_ type;
+};
+
+template<
+      typename F
+    , typename Tag1
+    , typename Tag2
+    , typename Arity
+    >
+struct lambda<
+          lambda< F,Tag1,Arity >
+        , Tag2
+        , int_<3>
+        >
+{
+    typedef lambda< F,Tag2 > l1;
+    typedef lambda< Tag1,Tag2 > l2;
+    typedef typename l1::is_le is_le;
+    typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;
+    typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3;
+    typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp
new file mode 100644
index 0000000..1fc8360
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater
+
+    : greater_impl<
+          typename greater_tag<N1>::type
+        , typename greater_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp
new file mode 100644
index 0000000..494e043
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater_equal
+
+    : greater_equal_impl<
+          typename greater_equal_tag<N1>::type
+        , typename greater_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp
new file mode 100644
index 0000000..21ab009
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp
@@ -0,0 +1,139 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    >
+struct inherit2
+    : T1, T2
+{
+    typedef inherit2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+template< typename T1 >
+struct inherit2< T1,empty_base >
+{
+    typedef T1 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
+};
+
+template< typename T2 >
+struct inherit2< empty_base,T2 >
+{
+    typedef T2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
+};
+
+template<>
+struct inherit2< empty_base,empty_base >
+{
+    typedef empty_base type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na
+    >
+struct inherit3
+    : inherit2<
+          typename inherit2<
+              T1, T2
+            >::type
+        , T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , inherit3
+        , ( T1, T2, T3)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    >
+struct inherit4
+    : inherit2<
+          typename inherit3<
+              T1, T2, T3
+            >::type
+        , T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , inherit4
+        , ( T1, T2, T3, T4)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    , typename T5 = na
+    >
+struct inherit5
+    : inherit2<
+          typename inherit4<
+              T1, T2, T3, T4
+            >::type
+        , T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , inherit5
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+      typename T1 = empty_base, typename T2 = empty_base
+    , typename T3 = empty_base, typename T4 = empty_base
+    , typename T5 = empty_base
+    >
+struct inherit
+    : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+    template<
+
+          typename T1, typename T2, typename T3, typename T4, typename T5
+
+        >
+    struct apply
+        : inherit< T1,T2,T3,T4,T5 >
+    {
+    };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp
new file mode 100644
index 0000000..73a86af
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename Iterator, typename State >
+struct iter_fold_if_null_step
+{
+    typedef State state;
+    typedef Iterator iterator;
+};
+
+template< bool >
+struct iter_fold_if_step_impl
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef typename apply2< StateOp,State,Iterator >::type state;
+        typedef typename IteratorOp::type iterator;
+    };
+};
+
+template<>
+struct iter_fold_if_step_impl<false>
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef State state;
+        typedef Iterator iterator;
+    };
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_forward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename BackwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_backward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename ForwardPredicate
+    , typename BackwardOp
+    , typename BackwardPredicate
+    >
+struct iter_fold_if_impl
+{
+ private:
+    typedef iter_fold_if_null_step< Iterator,State > forward_step0;
+    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+    
+
+    typedef typename if_<
+          typename forward_step4::not_last
+        , iter_fold_if_impl<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            , ForwardOp
+            , ForwardPredicate
+            , BackwardOp
+            , BackwardPredicate
+            >
+        , iter_fold_if_null_step<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            >
+        >::type backward_step4;
+
+    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+    
+
+ public:
+    typedef typename backward_step0::state state;
+    typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp
new file mode 100644
index 0000000..f8b46e5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl
+{
+    typedef iter_fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef iter_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,First,Last,State,ForwardOp >
+    : iter_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp
new file mode 100644
index 0000000..a84cbc3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp
@@ -0,0 +1,229 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+    template< typename T, typename Tag, typename Protect > struct result_
+    {
+        typedef T type;
+        typedef is_placeholder<T> is_le;
+    };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef typename l1::is_le is_le1;
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+            > is_le;
+
+        typedef bind1<
+              typename F::rebind
+            , typename l1::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+            > is_le;
+
+        typedef bind2<
+              typename F::rebind
+            , typename l1::type, typename l2::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+            > is_le;
+
+        typedef bind3<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+            > is_le;
+
+        typedef bind4<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        typedef lambda< typename F::arg5, Tag, false_ > l5;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        typedef typename l5::is_le is_le5;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+            > is_le;
+
+        typedef bind5<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type, typename l5::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Protect
+    >
+struct lambda
+{
+    /// Metafunction forwarding confuses MSVC 6.x
+    typedef typename aux::template_arity<T>::type arity_;
+    typedef typename aux::lambda_impl<arity_>
+        ::template result_< T,Tag,Protect > l_;
+
+    typedef typename l_::type type;
+    typedef typename l_::is_le is_le;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp
new file mode 100644
index 0000000..814ae0c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less
+
+    : less_impl<
+          typename less_tag<N1>::type
+        , typename less_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp
new file mode 100644
index 0000000..7c14b03
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less_equal
+
+    : less_equal_impl<
+          typename less_equal_tag<N1>::type
+        , typename less_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp
new file mode 100644
index 0000000..accc792
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "list.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct list;
+
+template<
+     
+    >
+struct list<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list0<  >
+{
+    typedef list0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct list<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list1<T0>
+{
+    typedef typename list1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct list<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list2< T0,T1 >
+{
+    typedef typename list2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct list<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list3< T0,T1,T2 >
+{
+    typedef typename list3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct list<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list4< T0,T1,T2,T3 >
+{
+    typedef typename list4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct list<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list5< T0,T1,T2,T3,T4 >
+{
+    typedef typename list5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : list15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : list16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : list17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : list18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : list19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct list
+    : list20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp
new file mode 100644
index 0000000..5e15dd3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "list_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct list_c;
+
+template<
+      typename T
+    >
+struct list_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list0_c<T>
+{
+    typedef typename list0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct list_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list1_c< T,C0 >
+{
+    typedef typename list1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct list_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list2_c< T,C0,C1 >
+{
+    typedef typename list2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct list_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list3_c< T,C0,C1,C2 >
+{
+    typedef typename list3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct list_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : list18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : list19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct list_c
+    : list20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp
new file mode 100644
index 0000000..91a1251
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct map;
+
+template<
+     
+    >
+struct map<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map0<  >
+{
+    typedef map0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct map<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map1<T0>
+{
+    typedef typename map1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct map<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map2< T0,T1 >
+{
+    typedef typename map2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct map<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map3< T0,T1,T2 >
+{
+    typedef typename map3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct map<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map4< T0,T1,T2,T3 >
+{
+    typedef typename map4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct map<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map5< T0,T1,T2,T3,T4 >
+{
+    typedef typename map5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : map15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : map16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : map17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : map18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : map19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct map
+    : map20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp
new file mode 100644
index 0000000..17cd7f1
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct minus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct minus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct minus
+    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , minus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct minus< N1,N2,N3,N4,na >
+
+    : minus< minus< minus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct minus< N1,N2,N3,na,na >
+
+    : minus< minus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct minus< N1,N2,na,na,na >
+    : minus_impl<
+          typename minus_tag<N1>::type
+        , typename minus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp
new file mode 100644
index 0000000..5aa861a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp
@@ -0,0 +1,101 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct modulus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct modulus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct modulus
+
+    : modulus_impl<
+          typename modulus_tag<N1>::type
+        , typename modulus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp
new file mode 100644
index 0000000..9e9a6ac
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct not_equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct not_equal_to
+
+    : not_equal_to_impl<
+          typename not_equal_to_tag<N1>::type
+        , typename not_equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp
new file mode 100644
index 0000000..4444488
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp
@@ -0,0 +1,69 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct or_impl
+    : true_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct or_impl< false,T1,T2,T3,T4 >
+    : or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , false_
+        >
+{
+};
+
+template<>
+struct or_impl<
+          false
+        , false_, false_, false_, false_
+        >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = false_, typename T4 = false_, typename T5 = false_
+    >
+struct or_
+
+    : aux::or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , or_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , or_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp
new file mode 100644
index 0000000..0a4d62d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#' 
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp
new file mode 100644
index 0000000..10aaebd
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct plus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct plus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct plus
+    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , plus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct plus< N1,N2,N3,N4,na >
+
+    : plus< plus< plus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct plus< N1,N2,N3,na,na >
+
+    : plus< plus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct plus< N1,N2,na,na,na >
+    : plus_impl<
+          typename plus_tag<N1>::type
+        , typename plus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp
new file mode 100644
index 0000000..7f9d18b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp
@@ -0,0 +1,11 @@
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "quote.hpp" header
+// -- DO NOT modify by hand!
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp
new file mode 100644
index 0000000..b0d3902
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl;
+
+template< long N >
+struct reverse_fold_chunk;
+
+template<> struct reverse_fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef fwd_state0 bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter0 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef fwd_state1 bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter1 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef fwd_state2 bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter2 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef fwd_state3 bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter3 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef fwd_state4 bkwd_state4;
+        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter4 iterator;
+    };
+};
+
+template< long N >
+struct reverse_fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef reverse_fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , iter4
+            , Last
+            , fwd_state4
+            , BackwardOp
+            , ForwardOp
+            > nested_chunk;
+
+        typedef typename nested_chunk::state bkwd_state4;
+        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef typename nested_chunk::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct reverse_fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct reverse_fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , reverse_fold_null_step< Last,State >
+            , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_step
+{
+    typedef reverse_fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , typename deref<First>::type
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl
+    : reverse_fold_chunk<N>
+        ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp
new file mode 100644
index 0000000..208f064
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl;
+
+template< long N >
+struct reverse_iter_fold_chunk;
+
+template<> struct reverse_iter_fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef fwd_state0 bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter0 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef fwd_state1 bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter1 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef fwd_state2 bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter2 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef fwd_state3 bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter3 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef fwd_state4 bkwd_state4;
+        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter4 iterator;
+    };
+};
+
+template< long N >
+struct reverse_iter_fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef reverse_iter_fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , iter4
+            , Last
+            , fwd_state4
+            , BackwardOp
+            , ForwardOp
+            > nested_chunk;
+
+        typedef typename nested_chunk::state bkwd_state4;
+        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef typename nested_chunk::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct reverse_iter_fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct reverse_iter_fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , reverse_iter_fold_null_step< Last,State >
+            , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_step
+{
+    typedef reverse_iter_fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , First
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl
+    : reverse_iter_fold_chunk<N>
+        ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp
new file mode 100644
index 0000000..4651630
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct set;
+
+template<
+     
+    >
+struct set<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set0<  >
+{
+    typedef set0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct set<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set1<T0>
+{
+    typedef typename set1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct set<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set2< T0,T1 >
+{
+    typedef typename set2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct set<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set3< T0,T1,T2 >
+{
+    typedef typename set3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct set<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set4< T0,T1,T2,T3 >
+{
+    typedef typename set4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct set<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set5< T0,T1,T2,T3,T4 >
+{
+    typedef typename set5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : set15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : set16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : set17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : set18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : set19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct set
+    : set20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp
new file mode 100644
index 0000000..ff4bbe7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct set_c;
+
+template<
+      typename T
+    >
+struct set_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set0_c<T>
+{
+    typedef typename set0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct set_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set1_c< T,C0 >
+{
+    typedef typename set1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct set_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set2_c< T,C0,C1 >
+{
+    typedef typename set2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct set_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set3_c< T,C0,C1,C2 >
+{
+    typedef typename set3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct set_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : set18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : set19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct set_c
+    : set20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp
new file mode 100644
index 0000000..5564b01
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_left_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_left_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_left
+
+    : shift_left_impl<
+          typename shift_left_tag<N1>::type
+        , typename shift_left_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  << BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp
new file mode 100644
index 0000000..f4e34a6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_right_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_right_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_right
+
+    : shift_right_impl<
+          typename shift_right_tag<N1>::type
+        , typename shift_right_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp
new file mode 100644
index 0000000..f127957
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp
@@ -0,0 +1,40 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "template_arity.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< bool >
+struct template_arity_impl
+{
+    template< typename F > struct result_
+        : mpl::int_< -1 >
+    {
+    };
+};
+
+template<>
+struct template_arity_impl<true>
+{
+    template< typename F > struct result_
+        : F::arity
+    {
+    };
+};
+
+template< typename F >
+struct template_arity
+    : template_arity_impl< ::pdalboost::mpl::aux::has_rebind<F>::value >
+        ::template result_<F>
+{
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp
new file mode 100644
index 0000000..12413ae
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct times_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct times_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct times
+    : times< times< times< times< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , times
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct times< N1,N2,N3,N4,na >
+
+    : times< times< times< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct times< N1,N2,N3,na,na >
+
+    : times< times< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct times< N1,N2,na,na,na >
+    : times_impl<
+          typename times_tag<N1>::type
+        , typename times_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp
new file mode 100644
index 0000000..06dad32
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+
+template< typename F, typename Args >
+struct unpack_args_impl< 0,F,Args >
+    : apply0<
+          F
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 1,F,Args >
+    : apply1<
+          F
+        , typename at_c< Args,0 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 2,F,Args >
+    : apply2<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 3,F,Args >
+    : apply3<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 4,F,Args >
+    : apply4<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 5,F,Args >
+    : apply5<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        , typename at_c< Args,4 >::type
+        >
+{
+};
+
+}
+
+template<
+      typename F
+    >
+struct unpack_args
+{
+    template< typename Args > struct apply
+    {
+        typedef typename aux::unpack_args_impl<
+              size<Args>::value
+            , F
+            , Args
+            >::type type;
+
+    };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp
new file mode 100644
index 0000000..2143fe0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct vector;
+
+template<
+     
+    >
+struct vector<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct vector<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct vector<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct vector<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct vector<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct vector<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct vector
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp
new file mode 100644
index 0000000..f149d38
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp
@@ -0,0 +1,309 @@
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct vector_c;
+
+template<
+      typename T
+    >
+struct vector_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector0_c<T>
+{
+    typedef typename vector0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct vector_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector1_c< T, T(C0) >
+{
+    typedef typename vector1_c< T, T(C0) >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct vector_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector2_c< T, T(C0), T(C1) >
+{
+    typedef typename vector2_c< T, T(C0), T(C1) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct vector_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector3_c< T, T(C0), T(C1), T(C2) >
+{
+    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >
+{
+    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >
+{
+    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >
+{
+    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >
+{
+    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >
+{
+    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >
+{
+    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >
+{
+    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >
+{
+    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >
+{
+    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >
+{
+    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >
+{
+    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >
+{
+    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >
+{
+    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >
+{
+    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >
+{
+    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >
+{
+    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct vector_c
+    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >
+{
+    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp
new file mode 100644
index 0000000..8d91863
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_backward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_backward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_backward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_backward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef typename prior<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_backward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_backward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_backward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp
new file mode 100644
index 0000000..1d13df3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_forward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_forward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_forward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_forward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef typename next<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_forward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_forward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_forward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/and.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/and.hpp
new file mode 100644
index 0000000..f55cb1c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/and.hpp
@@ -0,0 +1,69 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+    : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+    : and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , true_
+        >
+{
+};
+
+template<>
+struct and_impl<
+          true
+        , true_, true_, true_, true_
+        >
+    : true_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = true_, typename T4 = true_, typename T5 = true_
+    >
+struct and_
+
+    : aux::and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , and_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , and_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/apply.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/apply.hpp
new file mode 100644
index 0000000..eeec182
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/apply.hpp
@@ -0,0 +1,169 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct apply0
+
+    : apply_wrap0<
+          typename lambda<F>::type
+       
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          1
+        , apply0
+        , (F )
+        )
+};
+
+template<
+      typename F
+    >
+struct apply< F,na,na,na,na,na >
+    : apply0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply1
+
+    : apply_wrap1<
+          typename lambda<F>::type
+        , T1
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          2
+        , apply1
+        , (F, T1)
+        )
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply< F,T1,na,na,na,na >
+    : apply1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2
+
+    : apply_wrap2<
+          typename lambda<F>::type
+        , T1, T2
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , apply2
+        , (F, T1, T2)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply< F,T1,T2,na,na,na >
+    : apply2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3
+
+    : apply_wrap3<
+          typename lambda<F>::type
+        , T1, T2, T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , apply3
+        , (F, T1, T2, T3)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply< F,T1,T2,T3,na,na >
+    : apply3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4
+
+    : apply_wrap4<
+          typename lambda<F>::type
+        , T1, T2, T3, T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , apply4
+        , (F, T1, T2, T3, T4)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply< F,T1,T2,T3,T4,na >
+    : apply4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5
+
+    : apply_wrap5<
+          typename lambda<F>::type
+        , T1, T2, T3, T4, T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          6
+        , apply5
+        , (F, T1, T2, T3, T4, T5)
+        )
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply
+    : apply5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp
new file mode 100644
index 0000000..a309ea1
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp
@@ -0,0 +1,52 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na
+    >
+struct apply;
+
+template<
+      typename F
+    >
+struct apply0;
+
+template<
+      typename F, typename T1
+    >
+struct apply1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp
new file mode 100644
index 0000000..407bbd6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp
@@ -0,0 +1,84 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+
+    , typename has_apply_ = typename aux::has_apply<F>::type
+
+    >
+struct apply_wrap0
+
+    : F::template apply<  >
+{
+};
+
+template< typename F >
+struct apply_wrap0< F,true_ >
+    : F::apply
+{
+};
+
+template<
+      typename F, typename T1
+
+    >
+struct apply_wrap1
+
+    : F::template apply<T1>
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+
+    >
+struct apply_wrap2
+
+    : F::template apply< T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+
+    >
+struct apply_wrap3
+
+    : F::template apply< T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+
+    >
+struct apply_wrap4
+
+    : F::template apply< T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+
+    >
+struct apply_wrap5
+
+    : F::template apply< T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/arg.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/arg.hpp
new file mode 100644
index 0000000..6f2f8a8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+    BOOST_STATIC_CONSTANT(int, value  = -1);
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<1>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 1);
+    typedef arg<2> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<2>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 2);
+    typedef arg<3> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U2 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<3>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 3);
+    typedef arg<4> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U3 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<4>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 4);
+    typedef arg<5> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U4 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<5>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 5);
+    typedef arg<6> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U5 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp
new file mode 100644
index 0000000..a5be40d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp
@@ -0,0 +1,406 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+    typedef bind< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F, int dummy_
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F, int dummy_
+    >
+struct bind< F,na,na,na,na,na >
+    : bind0<F>
+{
+};
+
+template<
+      typename F, typename T1, int dummy_
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1, int dummy_
+    >
+struct bind< F,T1,na,na,na,na >
+    : bind1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, int dummy_
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2, int dummy_
+    >
+struct bind< F,T1,T2,na,na,na >
+    : bind2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, int dummy_
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3, int dummy_
+    >
+struct bind< F,T1,T2,T3,na,na >
+    : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , int dummy_
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , int dummy_
+    >
+struct bind< F,T1,T2,T3,T4,na >
+    : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, int dummy_
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, int dummy_
+    >
+struct bind
+    : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+      typename Tag, typename T1, typename T2, typename T3
+    >
+struct bind3<
+      quote3< if_,Tag >
+    , T1, T2, T3
+    >
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef mpl::arg<1> n1;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef typename if_<
+              typename t1::type
+            , t2, t3
+            >::type f_;
+
+     public:
+        typedef typename f_::type type;
+    };
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/bind.hpp
new file mode 100644
index 0000000..8d785b1
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/bind.hpp
@@ -0,0 +1,515 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      typename T
+    , typename Arg
+    >
+struct replace_unnamed_arg
+{
+    typedef Arg next;
+    typedef T type;
+};
+
+template<
+      typename Arg
+    >
+struct replace_unnamed_arg< arg< -1 >, Arg >
+{
+    typedef typename Arg::next next;
+    typedef Arg type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+    typedef bind< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F, int dummy_
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F, int dummy_
+    >
+struct bind< F,na,na,na,na,na >
+    : bind0<F>
+{
+};
+
+template<
+      typename F, typename T1, int dummy_
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1, int dummy_
+    >
+struct bind< F,T1,na,na,na,na >
+    : bind1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, int dummy_
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2, int dummy_
+    >
+struct bind< F,T1,T2,na,na,na >
+    : bind2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, int dummy_
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3, int dummy_
+    >
+struct bind< F,T1,T2,T3,na,na >
+    : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , int dummy_
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , int dummy_
+    >
+struct bind< F,T1,T2,T3,T4,na >
+    : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, int dummy_
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+        typedef aux::replace_unnamed_arg< T5,n5 > r5;
+        typedef typename r5::type a5;
+        typedef typename r5::next n6;
+        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+        ///
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, int dummy_
+    >
+struct bind
+    : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+      typename Tag, typename T1, typename T2, typename T3
+    >
+struct bind3<
+      quote3< if_,Tag >
+    , T1, T2, T3
+    >
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef mpl::arg<1> n1;
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef typename if_<
+              typename t1::type
+            , t2, t3
+            >::type f_;
+
+     public:
+        typedef typename f_::type type;
+    };
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp
new file mode 100644
index 0000000..cc0c3bf
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp
@@ -0,0 +1,53 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, int dummy_ = 0
+    >
+struct bind;
+
+template<
+      typename F, int dummy_ = 0
+    >
+struct bind0;
+
+template<
+      typename F, typename T1, int dummy_ = 0
+    >
+struct bind1;
+
+template<
+      typename F, typename T1, typename T2, int dummy_ = 0
+    >
+struct bind2;
+
+template<
+      typename F, typename T1, typename T2, typename T3, int dummy_ = 0
+    >
+struct bind3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , int dummy_ = 0
+    >
+struct bind4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, int dummy_ = 0
+    >
+struct bind5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/bitand.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/bitand.hpp
new file mode 100644
index 0000000..cb583c9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/bitand.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitand_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitand_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitand_
+    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitand_< N1,N2,N3,N4,na >
+
+    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitand_< N1,N2,N3,na,na >
+
+    : bitand_< bitand_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitand_< N1,N2,na,na,na >
+    : bitand_impl<
+          typename bitand_tag<N1>::type
+        , typename bitand_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/bitor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/bitor.hpp
new file mode 100644
index 0000000..d161c4f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/bitor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitor_
+    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitor_< N1,N2,N3,N4,na >
+
+    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitor_< N1,N2,N3,na,na >
+
+    : bitor_< bitor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitor_< N1,N2,na,na,na >
+    : bitor_impl<
+          typename bitor_tag<N1>::type
+        , typename bitor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp
new file mode 100644
index 0000000..b29bfd7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitxor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitxor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitxor_
+    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitxor_< N1,N2,N3,N4,na >
+
+    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitxor_< N1,N2,N3,na,na >
+
+    : bitxor_< bitxor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitxor_< N1,N2,na,na,na >
+    : bitxor_impl<
+          typename bitxor_tag<N1>::type
+        , typename bitxor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/deque.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/deque.hpp
new file mode 100644
index 0000000..bc99b03
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/deque.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct deque;
+
+template<
+     
+    >
+struct deque<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct deque<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct deque<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct deque<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct deque<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct deque<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct deque
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/divides.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/divides.hpp
new file mode 100644
index 0000000..e9032b0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/divides.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct divides_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct divides_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct divides
+    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , divides
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct divides< N1,N2,N3,N4,na >
+
+    : divides< divides< divides< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct divides< N1,N2,N3,na,na >
+
+    : divides< divides< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct divides< N1,N2,na,na,na >
+    : divides_impl<
+          typename divides_tag<N1>::type
+        , typename divides_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp
new file mode 100644
index 0000000..3855c94
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct equal_to
+
+    : equal_to_impl<
+          typename equal_to_tag<N1>::type
+        , typename equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp
new file mode 100644
index 0000000..728565c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl
+{
+    typedef fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,First,Last,State,ForwardOp >
+    : fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp
new file mode 100644
index 0000000..7d4290e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp
@@ -0,0 +1,536 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+   
+    >
+struct lambda
+{
+    typedef false_ is_le;
+    typedef T result_;
+    typedef T type;
+};
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>, Tag >
+{
+    typedef true_ is_le;
+    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+    typedef mpl::protect<result_> type;
+};
+
+template<
+      typename F
+    , typename Tag
+    >
+struct lambda<
+          bind0<F>
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind0<
+          F
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1
+{
+    typedef F<
+          typename L1::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1< true_,Tag,F,L1 >
+{
+    typedef bind1<
+          quote1< F,Tag >
+        , typename L1::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1 > class F
+    , typename T1
+    , typename Tag
+    >
+struct lambda<
+          F<T1>
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef typename l1::is_le is_le1;
+    typedef typename aux::lambda_or<
+          is_le1::value
+        >::type is_le;
+
+    typedef aux::le_result1<
+          is_le, Tag, F, l1
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1
+    , typename Tag
+    >
+struct lambda<
+          bind1< F,T1 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind1<
+          F
+        , T1
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2
+{
+    typedef F<
+          typename L1::type, typename L2::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+    typedef bind2<
+          quote2< F,Tag >
+        , typename L1::result_, typename L2::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value
+        >::type is_le;
+
+    typedef aux::le_result2<
+          is_le, Tag, F, l1, l2
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          bind2< F,T1,T2 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind2<
+          F
+        , T1, T2
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+    typedef bind3<
+          quote3< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value
+        >::type is_le;
+
+    typedef aux::le_result3<
+          is_le, Tag, F, l1, l2, l3
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          bind3< F,T1,T2,T3 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind3<
+          F
+        , T1, T2, T3
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+    typedef bind4<
+          quote4< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        >::type is_le;
+
+    typedef aux::le_result4<
+          is_le, Tag, F, l1, l2, l3, l4
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          bind4< F,T1,T2,T3,T4 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind4<
+          F
+        , T1, T2, T3, T4
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type, typename L5::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+    typedef bind5<
+          quote5< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_, typename L5::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    typedef lambda< T5,Tag > l5;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    typedef typename l5::is_le is_le5;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        , is_le5::value
+        >::type is_le;
+
+    typedef aux::le_result5<
+          is_le, Tag, F, l1, l2, l3, l4, l5
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind5< F,T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind5<
+          F
+        , T1, T2, T3, T4, T5
+        > result_;
+
+    typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>, Tag >
+{
+    typedef false_ is_le;
+    typedef mpl::protect<T> result_;
+    typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind< F,T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind< F,T1,T2,T3,T4,T5 > result_;
+    typedef result_ type;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/greater.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/greater.hpp
new file mode 100644
index 0000000..afebdd6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/greater.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater
+
+    : greater_impl<
+          typename greater_tag<N1>::type
+        , typename greater_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp
new file mode 100644
index 0000000..dd3bd5a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater_equal
+
+    : greater_equal_impl<
+          typename greater_equal_tag<N1>::type
+        , typename greater_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/inherit.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/inherit.hpp
new file mode 100644
index 0000000..90eaeb2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/inherit.hpp
@@ -0,0 +1,141 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    >
+struct inherit2
+    : T1, T2
+{
+    typedef inherit2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+template< typename T1 >
+struct inherit2< T1,empty_base >
+{
+    typedef T1 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
+};
+
+template< typename T2 >
+struct inherit2< empty_base,T2 >
+{
+    typedef T2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
+};
+
+template<>
+struct inherit2< empty_base,empty_base >
+{
+    typedef empty_base type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na
+    >
+struct inherit3
+    : inherit2<
+          typename inherit2<
+              T1, T2
+            >::type
+        , T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , inherit3
+        , ( T1, T2, T3)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    >
+struct inherit4
+    : inherit2<
+          typename inherit3<
+              T1, T2, T3
+            >::type
+        , T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , inherit4
+        , ( T1, T2, T3, T4)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    , typename T5 = na
+    >
+struct inherit5
+    : inherit2<
+          typename inherit4<
+              T1, T2, T3, T4
+            >::type
+        , T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , inherit5
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+      typename T1 = empty_base, typename T2 = empty_base
+    , typename T3 = empty_base, typename T4 = empty_base
+    , typename T5 = empty_base
+    >
+struct inherit
+    : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+    template<
+
+          typename T1 = empty_base, typename T2 = empty_base
+        , typename T3 = empty_base, typename T4 = empty_base
+        , typename T5 = empty_base
+
+        >
+    struct apply
+        : inherit< T1,T2,T3,T4,T5 >
+    {
+    };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp
new file mode 100644
index 0000000..74c0cc6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename Iterator, typename State >
+struct iter_fold_if_null_step
+{
+    typedef State state;
+    typedef Iterator iterator;
+};
+
+template< bool >
+struct iter_fold_if_step_impl
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef typename apply2< StateOp,State,Iterator >::type state;
+        typedef typename IteratorOp::type iterator;
+    };
+};
+
+template<>
+struct iter_fold_if_step_impl<false>
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef State state;
+        typedef Iterator iterator;
+    };
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_forward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename BackwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_backward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename ForwardPredicate
+    , typename BackwardOp
+    , typename BackwardPredicate
+    >
+struct iter_fold_if_impl
+{
+ private:
+    typedef iter_fold_if_null_step< Iterator,State > forward_step0;
+    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+    
+
+    typedef typename if_<
+          typename forward_step4::not_last
+        , iter_fold_if_impl<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            , ForwardOp
+            , ForwardPredicate
+            , BackwardOp
+            , BackwardPredicate
+            >
+        , iter_fold_if_null_step<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            >
+        >::type backward_step4;
+
+    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+    
+
+ public:
+    typedef typename backward_step0::state state;
+    typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp
new file mode 100644
index 0000000..78329b3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl
+{
+    typedef iter_fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef iter_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,First,Last,State,ForwardOp >
+    : iter_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp
new file mode 100644
index 0000000..5cb26dc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp
@@ -0,0 +1,229 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+    template< typename T, typename Tag, typename Protect > struct result_
+    {
+        typedef T type;
+        typedef is_placeholder<T> is_le;
+    };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef typename l1::is_le is_le1;
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+            > is_le;
+
+        typedef bind1<
+              typename F::rebind
+            , typename l1::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+            > is_le;
+
+        typedef bind2<
+              typename F::rebind
+            , typename l1::type, typename l2::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+            > is_le;
+
+        typedef bind3<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+            > is_le;
+
+        typedef bind4<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        typedef lambda< typename F::arg5, Tag, false_ > l5;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        typedef typename l5::is_le is_le5;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+            > is_le;
+
+        typedef bind5<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type, typename l5::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Protect
+    >
+struct lambda
+{
+    /// Metafunction forwarding confuses MSVC 6.x
+    typedef typename aux::template_arity<T>::type arity_;
+    typedef typename aux::lambda_impl<arity_>
+        ::template result_< T,Tag,Protect > l_;
+
+    typedef typename l_::type type;
+    typedef typename l_::is_le is_le;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/less.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/less.hpp
new file mode 100644
index 0000000..e70710d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/less.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less
+
+    : less_impl<
+          typename less_tag<N1>::type
+        , typename less_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp
new file mode 100644
index 0000000..dd11112
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less_equal
+
+    : less_equal_impl<
+          typename less_equal_tag<N1>::type
+        , typename less_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/list.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/list.hpp
new file mode 100644
index 0000000..cdef853
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/list.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct list;
+
+template<
+     
+    >
+struct list<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list0<  >
+{
+    typedef list0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct list<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list1<T0>
+{
+    typedef typename list1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct list<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list2< T0,T1 >
+{
+    typedef typename list2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct list<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list3< T0,T1,T2 >
+{
+    typedef typename list3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct list<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list4< T0,T1,T2,T3 >
+{
+    typedef typename list4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct list<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list5< T0,T1,T2,T3,T4 >
+{
+    typedef typename list5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : list15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : list16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : list17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : list18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : list19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct list
+    : list20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/list_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/list_c.hpp
new file mode 100644
index 0000000..8194c09
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/list_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct list_c;
+
+template<
+      typename T
+    >
+struct list_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list0_c<T>
+{
+    typedef typename list0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct list_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list1_c< T,C0 >
+{
+    typedef typename list1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct list_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list2_c< T,C0,C1 >
+{
+    typedef typename list2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct list_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list3_c< T,C0,C1,C2 >
+{
+    typedef typename list3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct list_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : list18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : list19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct list_c
+    : list20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/map.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/map.hpp
new file mode 100644
index 0000000..54c9678
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/map.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct map;
+
+template<
+     
+    >
+struct map<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map0<  >
+{
+    typedef map0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct map<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map1<T0>
+{
+    typedef typename map1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct map<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map2< T0,T1 >
+{
+    typedef typename map2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct map<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map3< T0,T1,T2 >
+{
+    typedef typename map3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct map<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map4< T0,T1,T2,T3 >
+{
+    typedef typename map4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct map<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map5< T0,T1,T2,T3,T4 >
+{
+    typedef typename map5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : map15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : map16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : map17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : map18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : map19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct map
+    : map20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/minus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/minus.hpp
new file mode 100644
index 0000000..1a434ea
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/minus.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct minus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct minus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct minus
+    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , minus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct minus< N1,N2,N3,N4,na >
+
+    : minus< minus< minus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct minus< N1,N2,N3,na,na >
+
+    : minus< minus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct minus< N1,N2,na,na,na >
+    : minus_impl<
+          typename minus_tag<N1>::type
+        , typename minus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/modulus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/modulus.hpp
new file mode 100644
index 0000000..06498ef
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/modulus.hpp
@@ -0,0 +1,101 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct modulus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct modulus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct modulus
+
+    : modulus_impl<
+          typename modulus_tag<N1>::type
+        , typename modulus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp
new file mode 100644
index 0000000..2ee61b8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct not_equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct not_equal_to
+
+    : not_equal_to_impl<
+          typename not_equal_to_tag<N1>::type
+        , typename not_equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/or.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/or.hpp
new file mode 100644
index 0000000..f0c868d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/or.hpp
@@ -0,0 +1,69 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct or_impl
+    : true_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct or_impl< false,T1,T2,T3,T4 >
+    : or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , false_
+        >
+{
+};
+
+template<>
+struct or_impl<
+          false
+        , false_, false_, false_, false_
+        >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = false_, typename T4 = false_, typename T5 = false_
+    >
+struct or_
+
+    : aux::or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , or_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , or_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp
new file mode 100644
index 0000000..0b0cc25
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#' 
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/plus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/plus.hpp
new file mode 100644
index 0000000..8468c28
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/plus.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct plus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct plus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct plus
+    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , plus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct plus< N1,N2,N3,N4,na >
+
+    : plus< plus< plus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct plus< N1,N2,N3,na,na >
+
+    : plus< plus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct plus< N1,N2,na,na,na >
+    : plus_impl<
+          typename plus_tag<N1>::type
+        , typename plus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/quote.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/quote.hpp
new file mode 100644
index 0000000..1ef9aa3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/quote.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/quote.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template< typename T, bool has_type_ >
+struct quote_impl
+    : T
+{
+};
+
+template< typename T >
+struct quote_impl< T,false >
+{
+    typedef T type;
+};
+
+template<
+      template< typename P1 > class F
+    , typename Tag = void_
+    >
+struct quote1
+{
+    template< typename U1 > struct apply
+
+        : quote_impl<
+              F<U1>
+            , aux::has_type< F<U1> >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename Tag = void_
+    >
+struct quote2
+{
+    template< typename U1, typename U2 > struct apply
+
+        : quote_impl<
+              F< U1,U2 >
+            , aux::has_type< F< U1,U2 > >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename Tag = void_
+    >
+struct quote3
+{
+    template< typename U1, typename U2, typename U3 > struct apply
+
+        : quote_impl<
+              F< U1,U2,U3 >
+            , aux::has_type< F< U1,U2,U3 > >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename Tag = void_
+    >
+struct quote4
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4
+        >
+    struct apply
+
+        : quote_impl<
+              F< U1,U2,U3,U4 >
+            , aux::has_type< F< U1,U2,U3,U4 > >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename Tag = void_
+    >
+struct quote5
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4
+        , typename U5
+        >
+    struct apply
+
+        : quote_impl<
+              F< U1,U2,U3,U4,U5 >
+            , aux::has_type< F< U1,U2,U3,U4,U5 > >::value
+            >
+
+    {
+    };
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp
new file mode 100644
index 0000000..cf80c4b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef fwd_state0 bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef fwd_state1 bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef fwd_state2 bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef fwd_state3 bkwd_state3;
+    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef fwd_state4 bkwd_state4;
+    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter4 iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef reverse_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , iter4
+        , Last
+        , fwd_state4
+        , BackwardOp
+        , ForwardOp
+        > nested_chunk;
+
+    typedef typename nested_chunk::state bkwd_state4;
+    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef reverse_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , typename deref<First>::type
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp
new file mode 100644
index 0000000..037c15e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef fwd_state0 bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef fwd_state1 bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef fwd_state2 bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef fwd_state3 bkwd_state3;
+    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef fwd_state4 bkwd_state4;
+    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter4 iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef reverse_iter_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , iter4
+        , Last
+        , fwd_state4
+        , BackwardOp
+        , ForwardOp
+        > nested_chunk;
+
+    typedef typename nested_chunk::state bkwd_state4;
+    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef reverse_iter_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , First
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/set.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/set.hpp
new file mode 100644
index 0000000..7ab0242
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/set.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct set;
+
+template<
+     
+    >
+struct set<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set0<  >
+{
+    typedef set0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct set<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set1<T0>
+{
+    typedef typename set1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct set<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set2< T0,T1 >
+{
+    typedef typename set2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct set<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set3< T0,T1,T2 >
+{
+    typedef typename set3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct set<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set4< T0,T1,T2,T3 >
+{
+    typedef typename set4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct set<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set5< T0,T1,T2,T3,T4 >
+{
+    typedef typename set5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : set15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : set16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : set17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : set18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : set19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct set
+    : set20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/set_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/set_c.hpp
new file mode 100644
index 0000000..337e930
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/set_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct set_c;
+
+template<
+      typename T
+    >
+struct set_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set0_c<T>
+{
+    typedef typename set0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct set_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set1_c< T,C0 >
+{
+    typedef typename set1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct set_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set2_c< T,C0,C1 >
+{
+    typedef typename set2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct set_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set3_c< T,C0,C1,C2 >
+{
+    typedef typename set3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct set_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : set18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : set19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct set_c
+    : set20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp
new file mode 100644
index 0000000..17bcfc6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_left_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_left_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_left
+
+    : shift_left_impl<
+          typename shift_left_tag<N1>::type
+        , typename shift_left_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  << BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp
new file mode 100644
index 0000000..1c29ee0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_right_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_right_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_right
+
+    : shift_right_impl<
+          typename shift_right_tag<N1>::type
+        , typename shift_right_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp
new file mode 100644
index 0000000..a23fc23
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp
@@ -0,0 +1,11 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/times.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/times.hpp
new file mode 100644
index 0000000..50bca2a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/times.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct times_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct times_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct times
+    : times< times< times< times< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , times
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct times< N1,N2,N3,N4,na >
+
+    : times< times< times< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct times< N1,N2,N3,na,na >
+
+    : times< times< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct times< N1,N2,na,na,na >
+    : times_impl<
+          typename times_tag<N1>::type
+        , typename times_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp
new file mode 100644
index 0000000..2d78b38
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+
+template< typename F, typename Args >
+struct unpack_args_impl< 0,F,Args >
+    : apply0<
+          F
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 1,F,Args >
+    : apply1<
+          F
+        , typename at_c< Args,0 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 2,F,Args >
+    : apply2<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 3,F,Args >
+    : apply3<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 4,F,Args >
+    : apply4<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 5,F,Args >
+    : apply5<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        , typename at_c< Args,4 >::type
+        >
+{
+};
+
+}
+
+template<
+      typename F
+    >
+struct unpack_args
+{
+    template< typename Args > struct apply
+
+        : aux::unpack_args_impl< size<Args>::value,F, Args >
+
+    {
+    };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/vector.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/vector.hpp
new file mode 100644
index 0000000..809efca
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/vector.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct vector;
+
+template<
+     
+    >
+struct vector<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct vector<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct vector<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct vector<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct vector<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct vector<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct vector
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp
new file mode 100644
index 0000000..323872c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp
@@ -0,0 +1,309 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct vector_c;
+
+template<
+      typename T
+    >
+struct vector_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector0_c<T>
+{
+    typedef typename vector0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct vector_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector1_c< T, T(C0) >
+{
+    typedef typename vector1_c< T, T(C0) >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct vector_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector2_c< T, T(C0), T(C1) >
+{
+    typedef typename vector2_c< T, T(C0), T(C1) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct vector_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector3_c< T, T(C0), T(C1), T(C2) >
+{
+    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >
+{
+    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >
+{
+    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >
+{
+    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >
+{
+    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >
+{
+    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >
+{
+    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >
+{
+    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >
+{
+    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >
+{
+    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >
+{
+    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >
+{
+    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >
+{
+    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >
+{
+    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >
+{
+    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >
+{
+    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >
+{
+    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct vector_c
+    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >
+{
+    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp
new file mode 100644
index 0000000..8d91863
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_backward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_backward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_backward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_backward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef typename prior<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_backward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_backward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_backward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp
new file mode 100644
index 0000000..1d13df3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_forward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_forward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_forward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_forward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef typename next<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_forward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_forward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_forward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/and.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/and.hpp
new file mode 100644
index 0000000..f55cb1c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/and.hpp
@@ -0,0 +1,69 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+    : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+    : and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , true_
+        >
+{
+};
+
+template<>
+struct and_impl<
+          true
+        , true_, true_, true_, true_
+        >
+    : true_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = true_, typename T4 = true_, typename T5 = true_
+    >
+struct and_
+
+    : aux::and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , and_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , and_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/apply.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/apply.hpp
new file mode 100644
index 0000000..eeec182
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/apply.hpp
@@ -0,0 +1,169 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct apply0
+
+    : apply_wrap0<
+          typename lambda<F>::type
+       
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          1
+        , apply0
+        , (F )
+        )
+};
+
+template<
+      typename F
+    >
+struct apply< F,na,na,na,na,na >
+    : apply0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply1
+
+    : apply_wrap1<
+          typename lambda<F>::type
+        , T1
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          2
+        , apply1
+        , (F, T1)
+        )
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply< F,T1,na,na,na,na >
+    : apply1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2
+
+    : apply_wrap2<
+          typename lambda<F>::type
+        , T1, T2
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , apply2
+        , (F, T1, T2)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply< F,T1,T2,na,na,na >
+    : apply2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3
+
+    : apply_wrap3<
+          typename lambda<F>::type
+        , T1, T2, T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , apply3
+        , (F, T1, T2, T3)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply< F,T1,T2,T3,na,na >
+    : apply3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4
+
+    : apply_wrap4<
+          typename lambda<F>::type
+        , T1, T2, T3, T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , apply4
+        , (F, T1, T2, T3, T4)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply< F,T1,T2,T3,T4,na >
+    : apply4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5
+
+    : apply_wrap5<
+          typename lambda<F>::type
+        , T1, T2, T3, T4, T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          6
+        , apply5
+        , (F, T1, T2, T3, T4, T5)
+        )
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply
+    : apply5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp
new file mode 100644
index 0000000..a309ea1
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp
@@ -0,0 +1,52 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na
+    >
+struct apply;
+
+template<
+      typename F
+    >
+struct apply0;
+
+template<
+      typename F, typename T1
+    >
+struct apply1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp
new file mode 100644
index 0000000..407bbd6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp
@@ -0,0 +1,84 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+
+    , typename has_apply_ = typename aux::has_apply<F>::type
+
+    >
+struct apply_wrap0
+
+    : F::template apply<  >
+{
+};
+
+template< typename F >
+struct apply_wrap0< F,true_ >
+    : F::apply
+{
+};
+
+template<
+      typename F, typename T1
+
+    >
+struct apply_wrap1
+
+    : F::template apply<T1>
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+
+    >
+struct apply_wrap2
+
+    : F::template apply< T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+
+    >
+struct apply_wrap3
+
+    : F::template apply< T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+
+    >
+struct apply_wrap4
+
+    : F::template apply< T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+
+    >
+struct apply_wrap5
+
+    : F::template apply< T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/arg.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/arg.hpp
new file mode 100644
index 0000000..6f2f8a8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+    BOOST_STATIC_CONSTANT(int, value  = -1);
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<1>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 1);
+    typedef arg<2> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<2>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 2);
+    typedef arg<3> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U2 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<3>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 3);
+    typedef arg<4> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U3 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<4>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 4);
+    typedef arg<5> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U4 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<5>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 5);
+    typedef arg<6> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U5 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp
new file mode 100644
index 0000000..ef30acc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp
@@ -0,0 +1,440 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+    typedef bind< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F
+    >
+struct bind< F,na,na,na,na,na >
+    : bind0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1
+    >
+struct bind< F,T1,na,na,na,na >
+    : bind1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind< F,T1,T2,na,na,na >
+    : bind2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind< F,T1,T2,T3,na,na >
+    : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind< F,T1,T2,T3,T4,na >
+    : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind
+    : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+      typename Tag, typename T1, typename T2, typename T3
+    >
+struct bind3<
+      quote3< if_,Tag >
+    , T1, T2, T3
+    >
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef mpl::arg<1> n1;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef typename if_<
+              typename t1::type
+            , t2, t3
+            >::type f_;
+
+     public:
+        typedef typename f_::type type;
+    };
+};
+
+template<
+      template< typename T1, typename T2, typename T3 > class F, typename Tag
+    >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct eval_if;
+
+template<
+      typename Tag, typename T1, typename T2, typename T3
+    >
+struct bind3<
+      quote3< eval_if,Tag >
+    , T1, T2, T3
+    >
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef mpl::arg<1> n1;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef typename eval_if<
+              typename t1::type
+            , t2, t3
+            >::type f_;
+
+     public:
+        typedef typename f_::type type;
+    };
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/bind.hpp
new file mode 100644
index 0000000..14ed6a3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/bind.hpp
@@ -0,0 +1,561 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      typename T
+    , typename Arg
+    >
+struct replace_unnamed_arg
+{
+    typedef Arg next;
+    typedef T type;
+};
+
+template<
+      typename Arg
+    >
+struct replace_unnamed_arg< arg< -1 >, Arg >
+{
+    typedef typename Arg::next next;
+    typedef Arg type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+    typedef bind< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F
+    >
+struct bind< F,na,na,na,na,na >
+    : bind0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1
+    >
+struct bind< F,T1,na,na,na,na >
+    : bind1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind< F,T1,T2,na,na,na >
+    : bind2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind< F,T1,T2,T3,na,na >
+    : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind< F,T1,T2,T3,T4,na >
+    : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+        typedef aux::replace_unnamed_arg< T5,n5 > r5;
+        typedef typename r5::type a5;
+        typedef typename r5::next n6;
+        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+        ///
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind
+    : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+      typename Tag, typename T1, typename T2, typename T3
+    >
+struct bind3<
+      quote3< if_,Tag >
+    , T1, T2, T3
+    >
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef mpl::arg<1> n1;
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef typename if_<
+              typename t1::type
+            , t2, t3
+            >::type f_;
+
+     public:
+        typedef typename f_::type type;
+    };
+};
+
+template<
+      template< typename T1, typename T2, typename T3 > class F, typename Tag
+    >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct eval_if;
+
+template<
+      typename Tag, typename T1, typename T2, typename T3
+    >
+struct bind3<
+      quote3< eval_if,Tag >
+    , T1, T2, T3
+    >
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef mpl::arg<1> n1;
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef typename eval_if<
+              typename t1::type
+            , t2, t3
+            >::type f_;
+
+     public:
+        typedef typename f_::type type;
+    };
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp
new file mode 100644
index 0000000..439d82f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp
@@ -0,0 +1,52 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na
+    >
+struct bind;
+
+template<
+      typename F
+    >
+struct bind0;
+
+template<
+      typename F, typename T1
+    >
+struct bind1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/bitand.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/bitand.hpp
new file mode 100644
index 0000000..cb583c9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/bitand.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitand_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitand_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitand_
+    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitand_< N1,N2,N3,N4,na >
+
+    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitand_< N1,N2,N3,na,na >
+
+    : bitand_< bitand_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitand_< N1,N2,na,na,na >
+    : bitand_impl<
+          typename bitand_tag<N1>::type
+        , typename bitand_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/bitor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/bitor.hpp
new file mode 100644
index 0000000..d161c4f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/bitor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitor_
+    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitor_< N1,N2,N3,N4,na >
+
+    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitor_< N1,N2,N3,na,na >
+
+    : bitor_< bitor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitor_< N1,N2,na,na,na >
+    : bitor_impl<
+          typename bitor_tag<N1>::type
+        , typename bitor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp
new file mode 100644
index 0000000..b29bfd7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitxor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitxor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitxor_
+    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitxor_< N1,N2,N3,N4,na >
+
+    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitxor_< N1,N2,N3,na,na >
+
+    : bitxor_< bitxor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitxor_< N1,N2,na,na,na >
+    : bitxor_impl<
+          typename bitxor_tag<N1>::type
+        , typename bitxor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/deque.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/deque.hpp
new file mode 100644
index 0000000..bc99b03
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/deque.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct deque;
+
+template<
+     
+    >
+struct deque<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct deque<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct deque<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct deque<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct deque<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct deque<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct deque
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/divides.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/divides.hpp
new file mode 100644
index 0000000..e9032b0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/divides.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct divides_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct divides_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct divides
+    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , divides
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct divides< N1,N2,N3,N4,na >
+
+    : divides< divides< divides< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct divides< N1,N2,N3,na,na >
+
+    : divides< divides< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct divides< N1,N2,na,na,na >
+    : divides_impl<
+          typename divides_tag<N1>::type
+        , typename divides_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp
new file mode 100644
index 0000000..3855c94
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct equal_to
+
+    : equal_to_impl<
+          typename equal_to_tag<N1>::type
+        , typename equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp
new file mode 100644
index 0000000..728565c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl
+{
+    typedef fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,First,Last,State,ForwardOp >
+    : fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp
new file mode 100644
index 0000000..aaa1ec4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp
@@ -0,0 +1,558 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Arity
+    >
+struct lambda
+{
+    typedef false_ is_le;
+    typedef T result_;
+    typedef T type;
+};
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>,Tag, int_< -1 > >
+{
+    typedef true_ is_le;
+    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+    typedef mpl::protect<result_> type;
+};
+
+template<
+      typename F
+    , typename Tag
+    >
+struct lambda<
+          bind0<F>
+        , Tag
+        , int_<1>
+        >
+{
+    typedef false_ is_le;
+    typedef bind0<
+          F
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1
+{
+    typedef F<
+          typename L1::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1< true_,Tag,F,L1 >
+{
+    typedef bind1<
+          quote1< F,Tag >
+        , typename L1::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1 > class F
+    , typename T1
+    , typename Tag
+    >
+struct lambda<
+          F<T1>
+        , Tag
+        , int_<1>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef typename l1::is_le is_le1;
+    typedef typename aux::lambda_or<
+          is_le1::value
+        >::type is_le;
+
+    typedef aux::le_result1<
+          is_le, Tag, F, l1
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1
+    , typename Tag
+    >
+struct lambda<
+          bind1< F,T1 >
+        , Tag
+        , int_<2>
+        >
+{
+    typedef false_ is_le;
+    typedef bind1<
+          F
+        , T1
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2
+{
+    typedef F<
+          typename L1::type, typename L2::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+    typedef bind2<
+          quote2< F,Tag >
+        , typename L1::result_, typename L2::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2 >
+        , Tag
+        , int_<2>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value
+        >::type is_le;
+
+    typedef aux::le_result2<
+          is_le, Tag, F, l1, l2
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          bind2< F,T1,T2 >
+        , Tag
+        , int_<3>
+        >
+{
+    typedef false_ is_le;
+    typedef bind2<
+          F
+        , T1, T2
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+    typedef bind3<
+          quote3< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3 >
+        , Tag
+        , int_<3>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value
+        >::type is_le;
+
+    typedef aux::le_result3<
+          is_le, Tag, F, l1, l2, l3
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          bind3< F,T1,T2,T3 >
+        , Tag
+        , int_<4>
+        >
+{
+    typedef false_ is_le;
+    typedef bind3<
+          F
+        , T1, T2, T3
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+    typedef bind4<
+          quote4< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4 >
+        , Tag
+        , int_<4>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        >::type is_le;
+
+    typedef aux::le_result4<
+          is_le, Tag, F, l1, l2, l3, l4
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          bind4< F,T1,T2,T3,T4 >
+        , Tag
+        , int_<5>
+        >
+{
+    typedef false_ is_le;
+    typedef bind4<
+          F
+        , T1, T2, T3, T4
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type, typename L5::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+    typedef bind5<
+          quote5< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_, typename L5::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4,T5 >
+        , Tag
+        , int_<5>
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    typedef lambda< T5,Tag > l5;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    typedef typename l5::is_le is_le5;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        , is_le5::value
+        >::type is_le;
+
+    typedef aux::le_result5<
+          is_le, Tag, F, l1, l2, l3, l4, l5
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind5< F,T1,T2,T3,T4,T5 >
+        , Tag
+        , int_<6>
+        >
+{
+    typedef false_ is_le;
+    typedef bind5<
+          F
+        , T1, T2, T3, T4, T5
+        > result_;
+
+    typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>,Tag, int_<1> >
+{
+    typedef false_ is_le;
+    typedef mpl::protect<T> result_;
+    typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind< F,T1,T2,T3,T4,T5 >
+        , Tag
+        , int_<6>
+        >
+{
+    typedef false_ is_le;
+    typedef bind< F,T1,T2,T3,T4,T5 > result_;
+    typedef result_ type;
+};
+
+template<
+      typename F
+    , typename Tag1
+    , typename Tag2
+    , typename Arity
+    >
+struct lambda<
+          lambda< F,Tag1,Arity >
+        , Tag2
+        , int_<3>
+        >
+{
+    typedef lambda< F,Tag2 > l1;
+    typedef lambda< Tag1,Tag2 > l2;
+    typedef typename l1::is_le is_le;
+    typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_;
+    typedef lambda< typename if_< is_le,arity_,Arity >::type, Tag2 > l3;
+    typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_;
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 3, lambda)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/greater.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/greater.hpp
new file mode 100644
index 0000000..afebdd6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/greater.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater
+
+    : greater_impl<
+          typename greater_tag<N1>::type
+        , typename greater_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp
new file mode 100644
index 0000000..dd3bd5a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater_equal
+
+    : greater_equal_impl<
+          typename greater_equal_tag<N1>::type
+        , typename greater_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/inherit.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/inherit.hpp
new file mode 100644
index 0000000..90eaeb2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/inherit.hpp
@@ -0,0 +1,141 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    >
+struct inherit2
+    : T1, T2
+{
+    typedef inherit2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+template< typename T1 >
+struct inherit2< T1,empty_base >
+{
+    typedef T1 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
+};
+
+template< typename T2 >
+struct inherit2< empty_base,T2 >
+{
+    typedef T2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
+};
+
+template<>
+struct inherit2< empty_base,empty_base >
+{
+    typedef empty_base type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na
+    >
+struct inherit3
+    : inherit2<
+          typename inherit2<
+              T1, T2
+            >::type
+        , T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , inherit3
+        , ( T1, T2, T3)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    >
+struct inherit4
+    : inherit2<
+          typename inherit3<
+              T1, T2, T3
+            >::type
+        , T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , inherit4
+        , ( T1, T2, T3, T4)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    , typename T5 = na
+    >
+struct inherit5
+    : inherit2<
+          typename inherit4<
+              T1, T2, T3, T4
+            >::type
+        , T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , inherit5
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+      typename T1 = empty_base, typename T2 = empty_base
+    , typename T3 = empty_base, typename T4 = empty_base
+    , typename T5 = empty_base
+    >
+struct inherit
+    : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+    template<
+
+          typename T1 = empty_base, typename T2 = empty_base
+        , typename T3 = empty_base, typename T4 = empty_base
+        , typename T5 = empty_base
+
+        >
+    struct apply
+        : inherit< T1,T2,T3,T4,T5 >
+    {
+    };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp
new file mode 100644
index 0000000..74c0cc6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename Iterator, typename State >
+struct iter_fold_if_null_step
+{
+    typedef State state;
+    typedef Iterator iterator;
+};
+
+template< bool >
+struct iter_fold_if_step_impl
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef typename apply2< StateOp,State,Iterator >::type state;
+        typedef typename IteratorOp::type iterator;
+    };
+};
+
+template<>
+struct iter_fold_if_step_impl<false>
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef State state;
+        typedef Iterator iterator;
+    };
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_forward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename BackwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_backward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename ForwardPredicate
+    , typename BackwardOp
+    , typename BackwardPredicate
+    >
+struct iter_fold_if_impl
+{
+ private:
+    typedef iter_fold_if_null_step< Iterator,State > forward_step0;
+    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+    
+
+    typedef typename if_<
+          typename forward_step4::not_last
+        , iter_fold_if_impl<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            , ForwardOp
+            , ForwardPredicate
+            , BackwardOp
+            , BackwardPredicate
+            >
+        , iter_fold_if_null_step<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            >
+        >::type backward_step4;
+
+    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+    
+
+ public:
+    typedef typename backward_step0::state state;
+    typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp
new file mode 100644
index 0000000..78329b3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl
+{
+    typedef iter_fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef iter_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,First,Last,State,ForwardOp >
+    : iter_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp
new file mode 100644
index 0000000..5cb26dc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp
@@ -0,0 +1,229 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+    template< typename T, typename Tag, typename Protect > struct result_
+    {
+        typedef T type;
+        typedef is_placeholder<T> is_le;
+    };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef typename l1::is_le is_le1;
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+            > is_le;
+
+        typedef bind1<
+              typename F::rebind
+            , typename l1::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+            > is_le;
+
+        typedef bind2<
+              typename F::rebind
+            , typename l1::type, typename l2::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+            > is_le;
+
+        typedef bind3<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+            > is_le;
+
+        typedef bind4<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        typedef lambda< typename F::arg5, Tag, false_ > l5;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        typedef typename l5::is_le is_le5;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+            > is_le;
+
+        typedef bind5<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type, typename l5::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Protect
+    >
+struct lambda
+{
+    /// Metafunction forwarding confuses MSVC 6.x
+    typedef typename aux::template_arity<T>::type arity_;
+    typedef typename aux::lambda_impl<arity_>
+        ::template result_< T,Tag,Protect > l_;
+
+    typedef typename l_::type type;
+    typedef typename l_::is_le is_le;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/less.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/less.hpp
new file mode 100644
index 0000000..e70710d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/less.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less
+
+    : less_impl<
+          typename less_tag<N1>::type
+        , typename less_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp
new file mode 100644
index 0000000..dd11112
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less_equal
+
+    : less_equal_impl<
+          typename less_equal_tag<N1>::type
+        , typename less_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/list.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/list.hpp
new file mode 100644
index 0000000..cdef853
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/list.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct list;
+
+template<
+     
+    >
+struct list<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list0<  >
+{
+    typedef list0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct list<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list1<T0>
+{
+    typedef typename list1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct list<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list2< T0,T1 >
+{
+    typedef typename list2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct list<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list3< T0,T1,T2 >
+{
+    typedef typename list3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct list<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list4< T0,T1,T2,T3 >
+{
+    typedef typename list4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct list<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list5< T0,T1,T2,T3,T4 >
+{
+    typedef typename list5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : list15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : list16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : list17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : list18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : list19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct list
+    : list20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/list_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/list_c.hpp
new file mode 100644
index 0000000..8194c09
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/list_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct list_c;
+
+template<
+      typename T
+    >
+struct list_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list0_c<T>
+{
+    typedef typename list0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct list_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list1_c< T,C0 >
+{
+    typedef typename list1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct list_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list2_c< T,C0,C1 >
+{
+    typedef typename list2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct list_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list3_c< T,C0,C1,C2 >
+{
+    typedef typename list3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct list_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : list18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : list19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct list_c
+    : list20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/map.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/map.hpp
new file mode 100644
index 0000000..54c9678
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/map.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct map;
+
+template<
+     
+    >
+struct map<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map0<  >
+{
+    typedef map0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct map<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map1<T0>
+{
+    typedef typename map1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct map<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map2< T0,T1 >
+{
+    typedef typename map2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct map<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map3< T0,T1,T2 >
+{
+    typedef typename map3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct map<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map4< T0,T1,T2,T3 >
+{
+    typedef typename map4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct map<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map5< T0,T1,T2,T3,T4 >
+{
+    typedef typename map5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : map15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : map16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : map17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : map18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : map19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct map
+    : map20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/minus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/minus.hpp
new file mode 100644
index 0000000..1a434ea
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/minus.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct minus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct minus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct minus
+    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , minus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct minus< N1,N2,N3,N4,na >
+
+    : minus< minus< minus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct minus< N1,N2,N3,na,na >
+
+    : minus< minus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct minus< N1,N2,na,na,na >
+    : minus_impl<
+          typename minus_tag<N1>::type
+        , typename minus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/modulus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/modulus.hpp
new file mode 100644
index 0000000..06498ef
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/modulus.hpp
@@ -0,0 +1,101 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct modulus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct modulus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct modulus
+
+    : modulus_impl<
+          typename modulus_tag<N1>::type
+        , typename modulus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp
new file mode 100644
index 0000000..2ee61b8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct not_equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct not_equal_to
+
+    : not_equal_to_impl<
+          typename not_equal_to_tag<N1>::type
+        , typename not_equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/or.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/or.hpp
new file mode 100644
index 0000000..f0c868d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/or.hpp
@@ -0,0 +1,69 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct or_impl
+    : true_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct or_impl< false,T1,T2,T3,T4 >
+    : or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , false_
+        >
+{
+};
+
+template<>
+struct or_impl<
+          false
+        , false_, false_, false_, false_
+        >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = false_, typename T4 = false_, typename T5 = false_
+    >
+struct or_
+
+    : aux::or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , or_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , or_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp
new file mode 100644
index 0000000..0b0cc25
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#' 
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/plus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/plus.hpp
new file mode 100644
index 0000000..8468c28
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/plus.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct plus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct plus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct plus
+    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , plus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct plus< N1,N2,N3,N4,na >
+
+    : plus< plus< plus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct plus< N1,N2,N3,na,na >
+
+    : plus< plus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct plus< N1,N2,na,na,na >
+    : plus_impl<
+          typename plus_tag<N1>::type
+        , typename plus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/quote.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/quote.hpp
new file mode 100644
index 0000000..d96ff2f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/quote.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/quote.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template< typename T, bool has_type_ >
+struct quote_impl
+{
+    typedef typename T::type type;
+};
+
+template< typename T >
+struct quote_impl< T,false >
+{
+    typedef T type;
+};
+
+template<
+      template< typename P1 > class F
+    , typename Tag = void_
+    >
+struct quote1
+{
+    template< typename U1 > struct apply
+
+        : quote_impl<
+              F<U1>
+            , aux::has_type< F<U1> >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename Tag = void_
+    >
+struct quote2
+{
+    template< typename U1, typename U2 > struct apply
+
+        : quote_impl<
+              F< U1,U2 >
+            , aux::has_type< F< U1,U2 > >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename Tag = void_
+    >
+struct quote3
+{
+    template< typename U1, typename U2, typename U3 > struct apply
+
+        : quote_impl<
+              F< U1,U2,U3 >
+            , aux::has_type< F< U1,U2,U3 > >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename Tag = void_
+    >
+struct quote4
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4
+        >
+    struct apply
+
+        : quote_impl<
+              F< U1,U2,U3,U4 >
+            , aux::has_type< F< U1,U2,U3,U4 > >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename Tag = void_
+    >
+struct quote5
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4
+        , typename U5
+        >
+    struct apply
+
+        : quote_impl<
+              F< U1,U2,U3,U4,U5 >
+            , aux::has_type< F< U1,U2,U3,U4,U5 > >::value
+            >
+
+    {
+    };
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp
new file mode 100644
index 0000000..cf80c4b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef fwd_state0 bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef fwd_state1 bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef fwd_state2 bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef fwd_state3 bkwd_state3;
+    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef fwd_state4 bkwd_state4;
+    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter4 iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef reverse_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , iter4
+        , Last
+        , fwd_state4
+        , BackwardOp
+        , ForwardOp
+        > nested_chunk;
+
+    typedef typename nested_chunk::state bkwd_state4;
+    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef reverse_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , typename deref<First>::type
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp
new file mode 100644
index 0000000..037c15e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef fwd_state0 bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef fwd_state1 bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef fwd_state2 bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef fwd_state3 bkwd_state3;
+    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef fwd_state4 bkwd_state4;
+    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter4 iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef reverse_iter_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , iter4
+        , Last
+        , fwd_state4
+        , BackwardOp
+        , ForwardOp
+        > nested_chunk;
+
+    typedef typename nested_chunk::state bkwd_state4;
+    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef reverse_iter_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , First
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/set.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/set.hpp
new file mode 100644
index 0000000..7ab0242
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/set.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct set;
+
+template<
+     
+    >
+struct set<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set0<  >
+{
+    typedef set0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct set<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set1<T0>
+{
+    typedef typename set1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct set<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set2< T0,T1 >
+{
+    typedef typename set2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct set<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set3< T0,T1,T2 >
+{
+    typedef typename set3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct set<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set4< T0,T1,T2,T3 >
+{
+    typedef typename set4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct set<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set5< T0,T1,T2,T3,T4 >
+{
+    typedef typename set5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : set15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : set16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : set17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : set18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : set19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct set
+    : set20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/set_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/set_c.hpp
new file mode 100644
index 0000000..337e930
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/set_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct set_c;
+
+template<
+      typename T
+    >
+struct set_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set0_c<T>
+{
+    typedef typename set0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct set_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set1_c< T,C0 >
+{
+    typedef typename set1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct set_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set2_c< T,C0,C1 >
+{
+    typedef typename set2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct set_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set3_c< T,C0,C1,C2 >
+{
+    typedef typename set3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct set_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : set18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : set19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct set_c
+    : set20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp
new file mode 100644
index 0000000..17bcfc6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_left_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_left_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_left
+
+    : shift_left_impl<
+          typename shift_left_tag<N1>::type
+        , typename shift_left_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  << BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp
new file mode 100644
index 0000000..1c29ee0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_right_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_right_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_right
+
+    : shift_right_impl<
+          typename shift_right_tag<N1>::type
+        , typename shift_right_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp
new file mode 100644
index 0000000..3799f53
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// *Preprocessed* version of the main "template_arity.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+template< int N > struct arity_tag
+{
+    typedef char (&type)[N + 1];
+};
+
+template<
+      int C1, int C2, int C3, int C4, int C5, int C6
+    >
+struct max_arity
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          ( C6 > 0 ? C6 : ( C5 > 0 ? C5 : ( C4 > 0 ? C4 : ( C3 > 0 ? C3 : ( C2 > 0 ? C2 : ( C1 > 0 ? C1 : -1 ) ) ) ) ) )
+        );
+};
+
+arity_tag<0>::type arity_helper(...);
+
+template<
+      template< typename P1 > class F
+    , typename T1
+    >
+typename arity_tag<1>::type
+arity_helper(type_wrapper< F<T1> >, arity_tag<1>);
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename T1, typename T2
+    >
+typename arity_tag<2>::type
+arity_helper(type_wrapper< F< T1,T2 > >, arity_tag<2>);
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename T1, typename T2, typename T3
+    >
+typename arity_tag<3>::type
+arity_helper(type_wrapper< F< T1,T2,T3 > >, arity_tag<3>);
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename T1, typename T2, typename T3, typename T4
+    >
+typename arity_tag<4>::type
+arity_helper(type_wrapper< F< T1,T2,T3,T4 > >, arity_tag<4>);
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename T1, typename T2, typename T3, typename T4, typename T5
+    >
+typename arity_tag<5>::type
+arity_helper(type_wrapper< F< T1,T2,T3,T4,T5 > >, arity_tag<5>);
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5, typename P6
+        >
+      class F
+    , typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6
+    >
+typename arity_tag<6>::type
+arity_helper(type_wrapper< F< T1,T2,T3,T4,T5,T6 > >, arity_tag<6>);
+template< typename F, int N >
+struct template_arity_impl
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          sizeof(::pdalboost::mpl::aux::arity_helper(type_wrapper<F>(), arity_tag<N>())) - 1
+        );
+};
+
+template< typename F >
+struct template_arity
+{
+    BOOST_STATIC_CONSTANT(int, value  = (
+          max_arity< template_arity_impl< F,1 >::value, template_arity_impl< F,2 >::value, template_arity_impl< F,3 >::value, template_arity_impl< F,4 >::value, template_arity_impl< F,5 >::value, template_arity_impl< F,6 >::value >::value
+        ));
+    typedef mpl::int_<value> type;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/times.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/times.hpp
new file mode 100644
index 0000000..50bca2a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/times.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct times_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct times_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct times
+    : times< times< times< times< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , times
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct times< N1,N2,N3,N4,na >
+
+    : times< times< times< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct times< N1,N2,N3,na,na >
+
+    : times< times< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct times< N1,N2,na,na,na >
+    : times_impl<
+          typename times_tag<N1>::type
+        , typename times_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp
new file mode 100644
index 0000000..2d78b38
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+
+template< typename F, typename Args >
+struct unpack_args_impl< 0,F,Args >
+    : apply0<
+          F
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 1,F,Args >
+    : apply1<
+          F
+        , typename at_c< Args,0 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 2,F,Args >
+    : apply2<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 3,F,Args >
+    : apply3<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 4,F,Args >
+    : apply4<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 5,F,Args >
+    : apply5<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        , typename at_c< Args,4 >::type
+        >
+{
+};
+
+}
+
+template<
+      typename F
+    >
+struct unpack_args
+{
+    template< typename Args > struct apply
+
+        : aux::unpack_args_impl< size<Args>::value,F, Args >
+
+    {
+    };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/vector.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/vector.hpp
new file mode 100644
index 0000000..809efca
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/vector.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct vector;
+
+template<
+     
+    >
+struct vector<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct vector<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct vector<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct vector<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct vector<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct vector<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct vector
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp
new file mode 100644
index 0000000..323872c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp
@@ -0,0 +1,309 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct vector_c;
+
+template<
+      typename T
+    >
+struct vector_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector0_c<T>
+{
+    typedef typename vector0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct vector_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector1_c< T, T(C0) >
+{
+    typedef typename vector1_c< T, T(C0) >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct vector_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector2_c< T, T(C0), T(C1) >
+{
+    typedef typename vector2_c< T, T(C0), T(C1) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct vector_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector3_c< T, T(C0), T(C1), T(C2) >
+{
+    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >
+{
+    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >
+{
+    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >
+{
+    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >
+{
+    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >
+{
+    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >
+{
+    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >
+{
+    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >
+{
+    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >
+{
+    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >
+{
+    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >
+{
+    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >
+{
+    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >
+{
+    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >
+{
+    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >
+{
+    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >
+{
+    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct vector_c
+    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >
+{
+    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp
new file mode 100644
index 0000000..3009f81
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp
@@ -0,0 +1,132 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+
+    /// ETI workaround
+    template<> struct apply<int>
+    {
+        typedef int type;
+    };
+
+};
+
+template<>
+struct advance_backward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef iter1 type;
+    };
+
+    /// ETI workaround
+    template<> struct apply<int>
+    {
+        typedef int type;
+    };
+
+};
+
+template<>
+struct advance_backward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef iter2 type;
+    };
+
+    /// ETI workaround
+    template<> struct apply<int>
+    {
+        typedef int type;
+    };
+
+};
+
+template<>
+struct advance_backward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef iter3 type;
+    };
+
+    /// ETI workaround
+    template<> struct apply<int>
+    {
+        typedef int type;
+    };
+
+};
+
+template<>
+struct advance_backward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef typename prior<iter3>::type iter4;
+        typedef iter4 type;
+    };
+
+    /// ETI workaround
+    template<> struct apply<int>
+    {
+        typedef int type;
+    };
+
+};
+
+template< long N >
+struct advance_backward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_backward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_backward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp
new file mode 100644
index 0000000..9d5e63d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp
@@ -0,0 +1,132 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+
+    /// ETI workaround
+    template<> struct apply<int>
+    {
+        typedef int type;
+    };
+
+};
+
+template<>
+struct advance_forward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef iter1 type;
+    };
+
+    /// ETI workaround
+    template<> struct apply<int>
+    {
+        typedef int type;
+    };
+
+};
+
+template<>
+struct advance_forward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef iter2 type;
+    };
+
+    /// ETI workaround
+    template<> struct apply<int>
+    {
+        typedef int type;
+    };
+
+};
+
+template<>
+struct advance_forward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef iter3 type;
+    };
+
+    /// ETI workaround
+    template<> struct apply<int>
+    {
+        typedef int type;
+    };
+
+};
+
+template<>
+struct advance_forward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef typename next<iter3>::type iter4;
+        typedef iter4 type;
+    };
+
+    /// ETI workaround
+    template<> struct apply<int>
+    {
+        typedef int type;
+    };
+
+};
+
+template< long N >
+struct advance_forward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_forward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_forward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/and.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/and.hpp
new file mode 100644
index 0000000..6ca5b2b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/and.hpp
@@ -0,0 +1,73 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< bool C_ > struct and_impl
+{
+    template<
+          typename T1, typename T2, typename T3, typename T4
+        >
+    struct result_
+        : false_
+    {
+    };
+};
+
+template<> struct and_impl<true>
+{
+    template<
+          typename T1, typename T2, typename T3, typename T4
+        >
+    struct result_
+        : and_impl<
+              BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+            >::template result_< T2,T3,T4,true_ >
+    {
+    };
+};
+
+template<>
+struct and_impl<true>
+    ::result_< true_,true_,true_,true_ >
+        : true_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = true_, typename T4 = true_, typename T5 = true_
+    >
+struct and_
+
+    : aux::and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        >::template result_< T2,T3,T4,T5 >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , and_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , and_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/apply.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/apply.hpp
new file mode 100644
index 0000000..e4eb8bb
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/apply.hpp
@@ -0,0 +1,166 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct apply0
+
+{
+    typedef typename apply_wrap0<
+          typename lambda<F>::type
+       
+        >::type type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          1
+        , apply0
+        , (F )
+        )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply0<int>
+{
+    typedef int type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply1
+
+{
+    typedef typename apply_wrap1<
+          typename lambda<F>::type
+        , T1
+        >::type type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          2
+        , apply1
+        , (F, T1)
+        )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply1< int,int >
+{
+    typedef int type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2
+
+{
+    typedef typename apply_wrap2<
+          typename lambda<F>::type
+        , T1, T2
+        >::type type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , apply2
+        , (F, T1, T2)
+        )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply2< int,int,int >
+{
+    typedef int type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3
+
+{
+    typedef typename apply_wrap3<
+          typename lambda<F>::type
+        , T1, T2, T3
+        >::type type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , apply3
+        , (F, T1, T2, T3)
+        )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply3< int,int,int,int >
+{
+    typedef int type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4
+
+{
+    typedef typename apply_wrap4<
+          typename lambda<F>::type
+        , T1, T2, T3, T4
+        >::type type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , apply4
+        , (F, T1, T2, T3, T4)
+        )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply4< int,int,int,int,int >
+{
+    typedef int type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5
+
+{
+    typedef typename apply_wrap5<
+          typename lambda<F>::type
+        , T1, T2, T3, T4, T5
+        >::type type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          6
+        , apply5
+        , (F, T1, T2, T3, T4, T5)
+        )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply5< int,int,int,int,int,int >
+{
+    typedef int type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp
new file mode 100644
index 0000000..3175a51
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp
@@ -0,0 +1,46 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct apply0;
+
+template<
+      typename F, typename T1
+    >
+struct apply1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp
new file mode 100644
index 0000000..c91a539
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp
@@ -0,0 +1,247 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template< typename F>
+struct msvc_apply0
+{
+    template< bool > struct f_ : F {};
+    template<> struct f_<true>
+    {
+        template< typename P  = int > struct apply
+        {
+            typedef int type;
+        };
+    };
+
+    template< typename T  = int > struct result_
+        : f_< aux::msvc_never_true<F>::value >
+            ::template apply<>
+    {
+    };
+
+};
+
+template<
+      typename F
+    >
+struct apply_wrap0
+{
+    typedef typename msvc_apply0<F>::template result_<
+         
+        >::type type;
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap0<int>
+{
+    typedef int type;
+};
+
+template< typename F>
+struct msvc_apply1
+{
+    template< bool > struct f_ : F {};
+    template<> struct f_<true>
+    {
+        template< typename P1 > struct apply
+        {
+            typedef int type;
+        };
+    };
+
+    template< typename T1 > struct result_
+        : f_< aux::msvc_never_true<F>::value >
+            ::template apply<T1>
+    {
+    };
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap1
+{
+    typedef typename msvc_apply1<F>::template result_<
+          T1
+        >::type type;
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap1< int,int >
+{
+    typedef int type;
+};
+
+template< typename F>
+struct msvc_apply2
+{
+    template< bool > struct f_ : F {};
+    template<> struct f_<true>
+    {
+        template< typename P1, typename P2 > struct apply
+        {
+            typedef int type;
+        };
+    };
+
+    template< typename T1, typename T2 > struct result_
+        : f_< aux::msvc_never_true<F>::value >
+            ::template apply< T1,T2 >
+    {
+    };
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap2
+{
+    typedef typename msvc_apply2<F>::template result_<
+          T1, T2
+        >::type type;
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap2< int,int,int >
+{
+    typedef int type;
+};
+
+template< typename F>
+struct msvc_apply3
+{
+    template< bool > struct f_ : F {};
+    template<> struct f_<true>
+    {
+        template< typename P1, typename P2, typename P3 > struct apply
+        {
+            typedef int type;
+        };
+    };
+
+    template< typename T1, typename T2, typename T3 > struct result_
+        : f_< aux::msvc_never_true<F>::value >
+            ::template apply< T1,T2,T3 >
+    {
+    };
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap3
+{
+    typedef typename msvc_apply3<F>::template result_<
+          T1, T2, T3
+        >::type type;
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap3< int,int,int,int >
+{
+    typedef int type;
+};
+
+template< typename F>
+struct msvc_apply4
+{
+    template< bool > struct f_ : F {};
+    template<> struct f_<true>
+    {
+        template<
+              typename P1, typename P2, typename P3, typename P4
+            >
+        struct apply
+        {
+            typedef int type;
+        };
+    };
+
+    template<
+          typename T1, typename T2, typename T3, typename T4
+        >
+    struct result_
+        : f_< aux::msvc_never_true<F>::value >
+            ::template apply< T1,T2,T3,T4 >
+    {
+    };
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap4
+{
+    typedef typename msvc_apply4<F>::template result_<
+          T1, T2, T3, T4
+        >::type type;
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap4< int,int,int,int,int >
+{
+    typedef int type;
+};
+
+template< typename F>
+struct msvc_apply5
+{
+    template< bool > struct f_ : F {};
+    template<> struct f_<true>
+    {
+        template<
+              typename P1, typename P2, typename P3, typename P4
+            , typename P5
+            >
+        struct apply
+        {
+            typedef int type;
+        };
+    };
+
+    template<
+          typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+        : f_< aux::msvc_never_true<F>::value >
+            ::template apply< T1,T2,T3,T4,T5 >
+    {
+    };
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap5
+{
+    typedef typename msvc_apply5<F>::template result_<
+          T1, T2, T3, T4, T5
+        >::type type;
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap5< int,int,int,int,int,int >
+{
+    typedef int type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/arg.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/arg.hpp
new file mode 100644
index 0000000..6f2f8a8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+    BOOST_STATIC_CONSTANT(int, value  = -1);
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<1>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 1);
+    typedef arg<2> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<2>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 2);
+    typedef arg<3> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U2 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<3>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 3);
+    typedef arg<4> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U3 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<4>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 4);
+    typedef arg<5> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U4 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<5>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 5);
+    typedef arg<6> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U5 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp
new file mode 100644
index 0000000..99ac7f3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< bool >
+struct resolve_arg_impl
+{
+    template<
+          typename T, typename U1, typename U2, typename U3
+        , typename U4, typename U5
+        >
+    struct result_
+    {
+        typedef T type;
+    };
+};
+
+template<>
+struct resolve_arg_impl<true>
+{
+    template<
+          typename T, typename U1, typename U2, typename U3
+        , typename U4, typename U5
+        >
+    struct result_
+    {
+        typedef typename apply_wrap5<
+              T
+            , U1, U2, U3, U4, U5
+            >::type type;
+    };
+};
+
+template< typename T > struct is_bind_template;
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+    : resolve_arg_impl< is_bind_template<T>::value >
+            ::template result_< T,U1,U2,U3,U4,U5 >
+{
+};
+
+template< int arity_ > struct bind_chooser;
+
+aux::no_tag is_bind_helper(...);
+template< typename T > aux::no_tag is_bind_helper(protect<T>*);
+
+template< int N >
+aux::yes_tag is_bind_helper(arg<N>*);
+
+template< bool is_ref_  = true >
+struct is_bind_template_impl
+{
+    template< typename T > struct result_
+    {
+        BOOST_STATIC_CONSTANT(bool, value  = false);
+    };
+};
+
+template<>
+struct is_bind_template_impl<false>
+{
+    template< typename T > struct result_
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+              sizeof(aux::is_bind_helper(static_cast<T*>(0)))
+                == sizeof(aux::yes_tag)
+            );
+    };
+};
+
+template< typename T > struct is_bind_template
+    : is_bind_template_impl< ::pdalboost::detail::is_reference_impl<T>::value >
+        ::template result_<T>
+{
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F
+    >
+aux::yes_tag
+is_bind_helper(bind0<F>*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1
+    >
+aux::yes_tag
+is_bind_helper(bind1< F,T1 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2
+    >
+aux::yes_tag
+is_bind_helper(bind2< F,T1,T2 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+aux::yes_tag
+is_bind_helper(bind3< F,T1,T2,T3 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+aux::yes_tag
+is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+aux::yes_tag
+is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/bind.hpp
new file mode 100644
index 0000000..26d2d33
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/bind.hpp
@@ -0,0 +1,432 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< bool >
+struct resolve_arg_impl
+{
+    template<
+          typename T, typename U1, typename U2, typename U3
+        , typename U4, typename U5
+        >
+    struct result_
+    {
+        typedef T type;
+    };
+};
+
+template<>
+struct resolve_arg_impl<true>
+{
+    template<
+          typename T, typename U1, typename U2, typename U3
+        , typename U4, typename U5
+        >
+    struct result_
+    {
+        typedef typename apply_wrap5<
+              T
+            , U1, U2, U3, U4, U5
+            >::type type;
+    };
+};
+
+template< typename T > struct is_bind_template;
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+    : resolve_arg_impl< is_bind_template<T>::value >
+            ::template result_< T,U1,U2,U3,U4,U5 >
+{
+};
+
+template< typename T >
+struct replace_unnamed_arg_impl
+{
+    template< typename Arg > struct result_
+    {
+        typedef Arg next;
+        typedef T type;
+    };
+};
+
+template<>
+struct replace_unnamed_arg_impl< arg< -1 > >
+{
+    template< typename Arg > struct result_
+    {
+        typedef typename next<Arg>::type next;
+        typedef Arg type;
+    };
+};
+
+template< typename T, typename Arg >
+struct replace_unnamed_arg
+    : replace_unnamed_arg_impl<T>::template result_<Arg>
+{
+};
+
+template< int arity_ > struct bind_chooser;
+
+aux::no_tag is_bind_helper(...);
+template< typename T > aux::no_tag is_bind_helper(protect<T>*);
+
+template< int N >
+aux::yes_tag is_bind_helper(arg<N>*);
+
+template< bool is_ref_  = true >
+struct is_bind_template_impl
+{
+    template< typename T > struct result_
+    {
+        BOOST_STATIC_CONSTANT(bool, value  = false);
+    };
+};
+
+template<>
+struct is_bind_template_impl<false>
+{
+    template< typename T > struct result_
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+              sizeof(aux::is_bind_helper(static_cast<T*>(0)))
+                == sizeof(aux::yes_tag)
+            );
+    };
+};
+
+template< typename T > struct is_bind_template
+    : is_bind_template_impl< ::pdalboost::detail::is_reference_impl<T>::value >
+        ::template result_<T>
+{
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F
+    >
+aux::yes_tag
+is_bind_helper(bind0<F>*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1
+    >
+aux::yes_tag
+is_bind_helper(bind1< F,T1 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2
+    >
+aux::yes_tag
+is_bind_helper(bind2< F,T1,T2 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+aux::yes_tag
+is_bind_helper(bind3< F,T1,T2,T3 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+aux::yes_tag
+is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+        typedef aux::replace_unnamed_arg< T5,n5 > r5;
+        typedef typename r5::type a5;
+        typedef typename r5::next n6;
+        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+        ///
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+aux::yes_tag
+is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp
new file mode 100644
index 0000000..dc6687f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp
@@ -0,0 +1,46 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct bind0;
+
+template<
+      typename F, typename T1
+    >
+struct bind1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp
new file mode 100644
index 0000000..eb51079
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp
@@ -0,0 +1,149 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct bitand_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitand_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitand_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitand_tag
+{
+    typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct bitand_2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitand_
+
+    : if_<
+
+          is_na<N3>
+        , bitand_2< N1,N2 >
+        , bitand_<
+              bitand_2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct bitand_2
+    : aux::msvc_eti_base< typename apply_wrap2<
+          bitand_impl<
+              typename bitand_tag<N1>::type
+            , typename bitand_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitand_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitand_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 & n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::bitand_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp
new file mode 100644
index 0000000..a8e88cc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp
@@ -0,0 +1,149 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct bitor_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitor_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitor_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitor_tag
+{
+    typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct bitor_2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitor_
+
+    : if_<
+
+          is_na<N3>
+        , bitor_2< N1,N2 >
+        , bitor_<
+              bitor_2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct bitor_2
+    : aux::msvc_eti_base< typename apply_wrap2<
+          bitor_impl<
+              typename bitor_tag<N1>::type
+            , typename bitor_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitor_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitor_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 | n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::bitor_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp
new file mode 100644
index 0000000..58b9f6a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp
@@ -0,0 +1,149 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct bitxor_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitxor_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitxor_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitxor_tag
+{
+    typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct bitxor_2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitxor_
+
+    : if_<
+
+          is_na<N3>
+        , bitxor_2< N1,N2 >
+        , bitxor_<
+              bitxor_2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct bitxor_2
+    : aux::msvc_eti_base< typename apply_wrap2<
+          bitxor_impl<
+              typename bitxor_tag<N1>::type
+            , typename bitxor_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitxor_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 ^ n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::bitxor_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/deque.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/deque.hpp
new file mode 100644
index 0000000..1fd4b18
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/deque.hpp
@@ -0,0 +1,556 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct deque_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct deque_chooser<0>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef vector0<
+             
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<1>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector1<
+              T0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<2>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector2<
+              T0, T1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<3>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector3<
+              T0, T1, T2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<4>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector4<
+              T0, T1, T2, T3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<5>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector5<
+              T0, T1, T2, T3, T4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<6>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector6<
+              T0, T1, T2, T3, T4, T5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<7>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector7<
+              T0, T1, T2, T3, T4, T5, T6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<8>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector8<
+              T0, T1, T2, T3, T4, T5, T6, T7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<9>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector9<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<10>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector10<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<11>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector11<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<12>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector12<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<13>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector13<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<14>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector14<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<15>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector15<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<16>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector16<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<17>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector17<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<18>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector18<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<19>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector19<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<20>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector20<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_deque_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_deque_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6, typename T7, typename T8, typename T9, typename T10
+    , typename T11, typename T12, typename T13, typename T14, typename T15
+    , typename T16, typename T17, typename T18, typename T19, typename T20
+    >
+struct deque_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_deque_arg<T1>::value + is_deque_arg<T2>::value 
+        + is_deque_arg<T3>::value + is_deque_arg<T4>::value 
+        + is_deque_arg<T5>::value + is_deque_arg<T6>::value 
+        + is_deque_arg<T7>::value + is_deque_arg<T8>::value 
+        + is_deque_arg<T9>::value + is_deque_arg<T10>::value 
+        + is_deque_arg<T11>::value + is_deque_arg<T12>::value 
+        + is_deque_arg<T13>::value + is_deque_arg<T14>::value 
+        + is_deque_arg<T15>::value + is_deque_arg<T16>::value 
+        + is_deque_arg<T17>::value + is_deque_arg<T18>::value 
+        + is_deque_arg<T19>::value + is_deque_arg<T20>::value
+        );
+
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct deque_impl
+{
+    typedef aux::deque_count_args<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        > arg_num_;
+
+    typedef typename aux::deque_chooser< arg_num_::value >
+        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct deque
+    : aux::deque_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type
+{
+    typedef typename aux::deque_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/divides.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/divides.hpp
new file mode 100644
index 0000000..46ba02b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/divides.hpp
@@ -0,0 +1,148 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct divides_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct divides_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct divides_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct divides_tag
+{
+    typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct divides2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct divides
+
+    : if_<
+
+          is_na<N3>
+        , divides2< N1,N2 >
+        , divides<
+              divides2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , divides
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct divides2
+    : aux::msvc_eti_base< typename apply_wrap2<
+          divides_impl<
+              typename divides_tag<N1>::type
+            , typename divides_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, divides2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct divides_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 / n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::divides_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp
new file mode 100644
index 0000000..23019b9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp
@@ -0,0 +1,102 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct equal_to_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct equal_to_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct equal_to_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct equal_to
+    : aux::msvc_eti_base< typename apply_wrap2<
+          equal_to_impl<
+              typename equal_to_tag<N1>::type
+            , typename equal_to_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value ==
+             BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp
new file mode 100644
index 0000000..36245d7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp
@@ -0,0 +1,293 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl;
+
+template< int N >
+struct fold_chunk;
+
+template<> struct fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef state0 state;
+        typedef iter0 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef state1 state;
+        typedef iter1 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef state2 state;
+        typedef iter2 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef state3 state;
+        typedef iter3 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef state4 state;
+        typedef iter4 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template< int N >
+struct fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef fold_impl<
+              4
+            , First
+            , Last
+            , State
+            , ForwardOp
+            > chunk_;
+
+        typedef fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , typename chunk_::iterator
+            , Last
+            , typename chunk_::state
+            , ForwardOp
+            > res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , fold_null_step< Last,State >
+            , fold_step< First,Last,State,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_step
+{
+    typedef fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , ForwardOp
+        > chunk_;
+
+    typedef typename chunk_::state state;
+    typedef typename chunk_::iterator iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl
+    : fold_chunk<N>
+        ::template result_< First,Last,State,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp
new file mode 100644
index 0000000..6acccb2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp
@@ -0,0 +1,554 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+   
+    >
+struct lambda
+{
+    typedef false_ is_le;
+    typedef T result_;
+    typedef T type;
+};
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>, Tag >
+{
+    typedef true_ is_le;
+    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+    typedef mpl::protect<result_> type;
+};
+
+template<
+      typename F
+    , typename Tag
+    >
+struct lambda<
+          bind0<F>
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind0<
+          F
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1
+{
+    typedef F<
+          typename L1::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1< true_,Tag,F,L1 >
+{
+    typedef bind1<
+          quote1< F,Tag >
+        , typename L1::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1 > class F
+    , typename T1
+    , typename Tag
+    >
+struct lambda<
+          F<T1>
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef typename l1::is_le is_le1;
+    typedef typename aux::lambda_or<
+          is_le1::value
+        >::type is_le;
+
+    typedef aux::le_result1<
+          is_le, Tag, F, l1
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1
+    , typename Tag
+    >
+struct lambda<
+          bind1< F,T1 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind1<
+          F
+        , T1
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2
+{
+    typedef F<
+          typename L1::type, typename L2::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+    typedef bind2<
+          quote2< F,Tag >
+        , typename L1::result_, typename L2::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value
+        >::type is_le;
+
+    typedef aux::le_result2<
+          is_le, Tag, F, l1, l2
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          bind2< F,T1,T2 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind2<
+          F
+        , T1, T2
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+    typedef bind3<
+          quote3< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value
+        >::type is_le;
+
+    typedef aux::le_result3<
+          is_le, Tag, F, l1, l2, l3
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          bind3< F,T1,T2,T3 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind3<
+          F
+        , T1, T2, T3
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+    typedef bind4<
+          quote4< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        >::type is_le;
+
+    typedef aux::le_result4<
+          is_le, Tag, F, l1, l2, l3, l4
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          bind4< F,T1,T2,T3,T4 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind4<
+          F
+        , T1, T2, T3, T4
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type, typename L5::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+    typedef bind5<
+          quote5< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_, typename L5::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    typedef lambda< T5,Tag > l5;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    typedef typename l5::is_le is_le5;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        , is_le5::value
+        >::type is_le;
+
+    typedef aux::le_result5<
+          is_le, Tag, F, l1, l2, l3, l4, l5
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind5< F,T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind5<
+          F
+        , T1, T2, T3, T4, T5
+        > result_;
+
+    typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>, Tag >
+{
+    typedef false_ is_le;
+    typedef mpl::protect<T> result_;
+    typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind< F,T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind< F,T1,T2,T3,T4,T5 > result_;
+    typedef result_ type;
+};
+
+/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
+
+template<
+      typename F, typename Tag1, typename Tag2
+    >
+struct lambda<
+          lambda< F,Tag1 >
+        , Tag2
+        >
+{
+    typedef lambda< F,Tag2 > l1;
+    typedef lambda< Tag1,Tag2 > l2;
+    typedef typename l1::is_le is_le;
+    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/greater.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/greater.hpp
new file mode 100644
index 0000000..b34ea51
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/greater.hpp
@@ -0,0 +1,102 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct greater_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct greater_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct greater_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater
+    : aux::msvc_eti_base< typename apply_wrap2<
+          greater_impl<
+              typename greater_tag<N1>::type
+            , typename greater_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >
+             BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp
new file mode 100644
index 0000000..7aa6430
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp
@@ -0,0 +1,102 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct greater_equal_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct greater_equal_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct greater_equal_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater_equal
+    : aux::msvc_eti_base< typename apply_wrap2<
+          greater_equal_impl<
+              typename greater_equal_tag<N1>::type
+            , typename greater_equal_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >=
+             BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp
new file mode 100644
index 0000000..1510352
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp
@@ -0,0 +1,166 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C1, bool C2 >
+struct inherit2_impl
+{
+    template< typename Derived, typename T1, typename T2 > struct result_
+        : T1, T2
+    {
+        typedef Derived type_;
+    };
+};
+
+template<>
+struct inherit2_impl< false,true >
+{
+    template< typename Derived, typename T1, typename T2 > struct result_
+        : T1
+    {
+        typedef T1 type_;
+    };
+};
+
+template<>
+struct inherit2_impl< true,false >
+{
+    template< typename Derived, typename T1, typename T2 > struct result_
+        : T2
+    {
+        typedef T2 type_;
+    };
+};
+
+template<>
+struct inherit2_impl< true,true >
+{
+    template< typename Derived, typename T1, typename T2 > struct result_
+    {
+        typedef T1 type_;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    >
+struct inherit2
+    : aux::inherit2_impl<
+          is_empty_base<T1>::value
+        , is_empty_base<T2>::value
+        >::template result_< inherit2< T1,T2 >,T1, T2 >
+{
+    typedef typename inherit2::type_ type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na
+    >
+struct inherit3
+    : inherit2<
+          typename inherit2<
+              T1, T2
+            >::type
+        , T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , inherit3
+        , ( T1, T2, T3)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    >
+struct inherit4
+    : inherit2<
+          typename inherit3<
+              T1, T2, T3
+            >::type
+        , T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , inherit4
+        , ( T1, T2, T3, T4)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    , typename T5 = na
+    >
+struct inherit5
+    : inherit2<
+          typename inherit4<
+              T1, T2, T3, T4
+            >::type
+        , T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , inherit5
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+      typename T1 = empty_base, typename T2 = empty_base
+    , typename T3 = empty_base, typename T4 = empty_base
+    , typename T5 = empty_base
+    >
+struct inherit
+    : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+    template<
+
+          typename T1 = empty_base, typename T2 = empty_base
+        , typename T3 = empty_base, typename T4 = empty_base
+        , typename T5 = empty_base
+
+        >
+    struct apply
+        : inherit< T1,T2,T3,T4,T5 >
+    {
+    };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp
new file mode 100644
index 0000000..74c0cc6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename Iterator, typename State >
+struct iter_fold_if_null_step
+{
+    typedef State state;
+    typedef Iterator iterator;
+};
+
+template< bool >
+struct iter_fold_if_step_impl
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef typename apply2< StateOp,State,Iterator >::type state;
+        typedef typename IteratorOp::type iterator;
+    };
+};
+
+template<>
+struct iter_fold_if_step_impl<false>
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef State state;
+        typedef Iterator iterator;
+    };
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_forward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename BackwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_backward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename ForwardPredicate
+    , typename BackwardOp
+    , typename BackwardPredicate
+    >
+struct iter_fold_if_impl
+{
+ private:
+    typedef iter_fold_if_null_step< Iterator,State > forward_step0;
+    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+    
+
+    typedef typename if_<
+          typename forward_step4::not_last
+        , iter_fold_if_impl<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            , ForwardOp
+            , ForwardPredicate
+            , BackwardOp
+            , BackwardPredicate
+            >
+        , iter_fold_if_null_step<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            >
+        >::type backward_step4;
+
+    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+    
+
+ public:
+    typedef typename backward_step0::state state;
+    typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp
new file mode 100644
index 0000000..7b91acf
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp
@@ -0,0 +1,293 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl;
+
+template< int N >
+struct iter_fold_chunk;
+
+template<> struct iter_fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef state0 state;
+        typedef iter0 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct iter_fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef state1 state;
+        typedef iter1 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct iter_fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef state2 state;
+        typedef iter2 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct iter_fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef state3 state;
+        typedef iter3 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct iter_fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef state4 state;
+        typedef iter4 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template< int N >
+struct iter_fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef iter_fold_impl<
+              4
+            , First
+            , Last
+            , State
+            , ForwardOp
+            > chunk_;
+
+        typedef iter_fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , typename chunk_::iterator
+            , Last
+            , typename chunk_::state
+            , ForwardOp
+            > res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct iter_fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct iter_fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , iter_fold_null_step< Last,State >
+            , iter_fold_step< First,Last,State,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_step
+{
+    typedef iter_fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , ForwardOp
+        > chunk_;
+
+    typedef typename chunk_::state state;
+    typedef typename chunk_::iterator iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl
+    : iter_fold_chunk<N>
+        ::template result_< First,Last,State,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp
new file mode 100644
index 0000000..5cb26dc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp
@@ -0,0 +1,229 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+    template< typename T, typename Tag, typename Protect > struct result_
+    {
+        typedef T type;
+        typedef is_placeholder<T> is_le;
+    };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef typename l1::is_le is_le1;
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+            > is_le;
+
+        typedef bind1<
+              typename F::rebind
+            , typename l1::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+            > is_le;
+
+        typedef bind2<
+              typename F::rebind
+            , typename l1::type, typename l2::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+            > is_le;
+
+        typedef bind3<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+            > is_le;
+
+        typedef bind4<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        typedef lambda< typename F::arg5, Tag, false_ > l5;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        typedef typename l5::is_le is_le5;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+            > is_le;
+
+        typedef bind5<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type, typename l5::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Protect
+    >
+struct lambda
+{
+    /// Metafunction forwarding confuses MSVC 6.x
+    typedef typename aux::template_arity<T>::type arity_;
+    typedef typename aux::lambda_impl<arity_>
+        ::template result_< T,Tag,Protect > l_;
+
+    typedef typename l_::type type;
+    typedef typename l_::is_le is_le;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/less.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/less.hpp
new file mode 100644
index 0000000..1043d80
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/less.hpp
@@ -0,0 +1,102 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct less_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct less_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct less_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less
+    : aux::msvc_eti_base< typename apply_wrap2<
+          less_impl<
+              typename less_tag<N1>::type
+            , typename less_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N2)::value >
+             BOOST_MPL_AUX_VALUE_WKND(N1)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp
new file mode 100644
index 0000000..f18ed4d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp
@@ -0,0 +1,102 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct less_equal_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct less_equal_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct less_equal_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less_equal
+    : aux::msvc_eti_base< typename apply_wrap2<
+          less_equal_impl<
+              typename less_equal_tag<N1>::type
+            , typename less_equal_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <=
+             BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/list.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/list.hpp
new file mode 100644
index 0000000..43ddbe4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/list.hpp
@@ -0,0 +1,556 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct list_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct list_chooser<0>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef list0<
+             
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<1>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list1<
+              T0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<2>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list2<
+              T0, T1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<3>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list3<
+              T0, T1, T2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<4>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list4<
+              T0, T1, T2, T3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<5>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list5<
+              T0, T1, T2, T3, T4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<6>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list6<
+              T0, T1, T2, T3, T4, T5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<7>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list7<
+              T0, T1, T2, T3, T4, T5, T6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<8>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list8<
+              T0, T1, T2, T3, T4, T5, T6, T7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<9>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list9<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<10>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list10<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<11>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list11<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<12>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list12<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<13>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list13<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<14>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list14<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<15>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list15<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<16>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list16<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<17>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list17<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<18>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list18<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<19>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list19<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<20>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list20<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_list_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_list_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6, typename T7, typename T8, typename T9, typename T10
+    , typename T11, typename T12, typename T13, typename T14, typename T15
+    , typename T16, typename T17, typename T18, typename T19, typename T20
+    >
+struct list_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_list_arg<T1>::value + is_list_arg<T2>::value 
+        + is_list_arg<T3>::value + is_list_arg<T4>::value 
+        + is_list_arg<T5>::value + is_list_arg<T6>::value 
+        + is_list_arg<T7>::value + is_list_arg<T8>::value 
+        + is_list_arg<T9>::value + is_list_arg<T10>::value 
+        + is_list_arg<T11>::value + is_list_arg<T12>::value 
+        + is_list_arg<T13>::value + is_list_arg<T14>::value 
+        + is_list_arg<T15>::value + is_list_arg<T16>::value 
+        + is_list_arg<T17>::value + is_list_arg<T18>::value 
+        + is_list_arg<T19>::value + is_list_arg<T20>::value
+        );
+
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct list_impl
+{
+    typedef aux::list_count_args<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        > arg_num_;
+
+    typedef typename aux::list_chooser< arg_num_::value >
+        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct list
+    : aux::list_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type
+{
+    typedef typename aux::list_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp
new file mode 100644
index 0000000..33b8b23
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp
@@ -0,0 +1,534 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct list_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct list_c_chooser<0>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list0_c<
+              T
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<1>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list1_c<
+              T, C0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<2>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list2_c<
+              T, C0, C1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<3>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list3_c<
+              T, C0, C1, C2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<4>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list4_c<
+              T, C0, C1, C2, C3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<5>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list5_c<
+              T, C0, C1, C2, C3, C4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<6>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list6_c<
+              T, C0, C1, C2, C3, C4, C5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<7>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list7_c<
+              T, C0, C1, C2, C3, C4, C5, C6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<8>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list8_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<9>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list9_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<10>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list10_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<11>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list11_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<12>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list12_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<13>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list13_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<14>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list14_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<15>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list15_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<16>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list16_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<17>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list17_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<18>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list18_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<19>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list19_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<20>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list20_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_list_c_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_list_c_arg<LONG_MAX>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+    , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+    , long C16, long C17, long C18, long C19, long C20
+    >
+struct list_c_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_list_c_arg<C1>::value + is_list_c_arg<C2>::value 
+        + is_list_c_arg<C3>::value + is_list_c_arg<C4>::value 
+        + is_list_c_arg<C5>::value + is_list_c_arg<C6>::value 
+        + is_list_c_arg<C7>::value + is_list_c_arg<C8>::value 
+        + is_list_c_arg<C9>::value + is_list_c_arg<C10>::value 
+        + is_list_c_arg<C11>::value + is_list_c_arg<C12>::value 
+        + is_list_c_arg<C13>::value + is_list_c_arg<C14>::value 
+        + is_list_c_arg<C15>::value + is_list_c_arg<C16>::value 
+        + is_list_c_arg<C17>::value + is_list_c_arg<C18>::value 
+        + is_list_c_arg<C19>::value + is_list_c_arg<C20>::value
+        );
+
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct list_c_impl
+{
+    typedef aux::list_c_count_args<
+          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        > arg_num_;
+
+    typedef typename aux::list_c_chooser< arg_num_::value >
+        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct list_c
+    : aux::list_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type
+{
+    typedef typename aux::list_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/map.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/map.hpp
new file mode 100644
index 0000000..05acd89
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/map.hpp
@@ -0,0 +1,556 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct map_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct map_chooser<0>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef map0<
+             
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<1>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map1<
+              T0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<2>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map2<
+              T0, T1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<3>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map3<
+              T0, T1, T2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<4>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map4<
+              T0, T1, T2, T3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<5>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map5<
+              T0, T1, T2, T3, T4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<6>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map6<
+              T0, T1, T2, T3, T4, T5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<7>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map7<
+              T0, T1, T2, T3, T4, T5, T6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<8>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map8<
+              T0, T1, T2, T3, T4, T5, T6, T7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<9>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map9<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<10>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map10<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<11>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map11<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<12>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map12<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<13>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map13<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<14>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map14<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<15>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map15<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<16>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map16<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<17>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map17<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<18>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map18<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<19>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map19<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<20>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map20<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_map_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_map_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6, typename T7, typename T8, typename T9, typename T10
+    , typename T11, typename T12, typename T13, typename T14, typename T15
+    , typename T16, typename T17, typename T18, typename T19, typename T20
+    >
+struct map_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_map_arg<T1>::value + is_map_arg<T2>::value 
+        + is_map_arg<T3>::value + is_map_arg<T4>::value 
+        + is_map_arg<T5>::value + is_map_arg<T6>::value 
+        + is_map_arg<T7>::value + is_map_arg<T8>::value 
+        + is_map_arg<T9>::value + is_map_arg<T10>::value 
+        + is_map_arg<T11>::value + is_map_arg<T12>::value 
+        + is_map_arg<T13>::value + is_map_arg<T14>::value 
+        + is_map_arg<T15>::value + is_map_arg<T16>::value 
+        + is_map_arg<T17>::value + is_map_arg<T18>::value 
+        + is_map_arg<T19>::value + is_map_arg<T20>::value
+        );
+
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct map_impl
+{
+    typedef aux::map_count_args<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        > arg_num_;
+
+    typedef typename aux::map_chooser< arg_num_::value >
+        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct map
+    : aux::map_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type
+{
+    typedef typename aux::map_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/minus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/minus.hpp
new file mode 100644
index 0000000..ffe8439
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/minus.hpp
@@ -0,0 +1,148 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct minus_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct minus_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct minus_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct minus_tag
+{
+    typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct minus2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct minus
+
+    : if_<
+
+          is_na<N3>
+        , minus2< N1,N2 >
+        , minus<
+              minus2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , minus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct minus2
+    : aux::msvc_eti_base< typename apply_wrap2<
+          minus_impl<
+              typename minus_tag<N1>::type
+            , typename minus_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, minus2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct minus_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 - n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::minus_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp
new file mode 100644
index 0000000..c0e0e34
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp
@@ -0,0 +1,115 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct modulus_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct modulus_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct modulus_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct modulus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct modulus
+    : aux::msvc_eti_base< typename apply_wrap2<
+          modulus_impl<
+              typename modulus_tag<N1>::type
+            , typename modulus_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct modulus_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 % n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::modulus_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp
new file mode 100644
index 0000000..42467e6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp
@@ -0,0 +1,102 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct not_equal_to_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct not_equal_to_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct not_equal_to_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct not_equal_to
+    : aux::msvc_eti_base< typename apply_wrap2<
+          not_equal_to_impl<
+              typename not_equal_to_tag<N1>::type
+            , typename not_equal_to_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value !=
+             BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/or.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/or.hpp
new file mode 100644
index 0000000..73c4494
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/or.hpp
@@ -0,0 +1,73 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< bool C_ > struct or_impl
+{
+    template<
+          typename T1, typename T2, typename T3, typename T4
+        >
+    struct result_
+        : true_
+    {
+    };
+};
+
+template<> struct or_impl<false>
+{
+    template<
+          typename T1, typename T2, typename T3, typename T4
+        >
+    struct result_
+        : or_impl<
+              BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+            >::template result_< T2,T3,T4,false_ >
+    {
+    };
+};
+
+template<>
+struct or_impl<false>
+    ::result_< false_,false_,false_,false_ >
+        : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = false_, typename T4 = false_, typename T5 = false_
+    >
+struct or_
+
+    : aux::or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        >::template result_< T2,T3,T4,T5 >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , or_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , or_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp
new file mode 100644
index 0000000..0b0cc25
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#' 
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/plus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/plus.hpp
new file mode 100644
index 0000000..30b075a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/plus.hpp
@@ -0,0 +1,148 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct plus_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct plus_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct plus_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct plus_tag
+{
+    typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct plus2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct plus
+
+    : if_<
+
+          is_na<N3>
+        , plus2< N1,N2 >
+        , plus<
+              plus2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , plus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct plus2
+    : aux::msvc_eti_base< typename apply_wrap2<
+          plus_impl<
+              typename plus_tag<N1>::type
+            , typename plus_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct plus_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 + n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::plus_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/quote.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/quote.hpp
new file mode 100644
index 0000000..e7a7f00
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/quote.hpp
@@ -0,0 +1,11 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/quote.hpp" header
+// -- DO NOT modify by hand!
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp
new file mode 100644
index 0000000..f6f6367
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp
@@ -0,0 +1,343 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl;
+
+template< long N >
+struct reverse_fold_chunk;
+
+template<> struct reverse_fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef fwd_state0 bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter0 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct reverse_fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef fwd_state1 bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter1 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct reverse_fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef fwd_state2 bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter2 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct reverse_fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef fwd_state3 bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter3 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct reverse_fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef fwd_state4 bkwd_state4;
+        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter4 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template< long N >
+struct reverse_fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef reverse_fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , iter4
+            , Last
+            , fwd_state4
+            , BackwardOp
+            , ForwardOp
+            > nested_chunk;
+
+        typedef typename nested_chunk::state bkwd_state4;
+        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef typename nested_chunk::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct reverse_fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct reverse_fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , reverse_fold_null_step< Last,State >
+            , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_step
+{
+    typedef reverse_fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , typename deref<First>::type
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl
+    : reverse_fold_chunk<N>
+        ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp
new file mode 100644
index 0000000..62c15f7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp
@@ -0,0 +1,343 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl;
+
+template< long N >
+struct reverse_iter_fold_chunk;
+
+template<> struct reverse_iter_fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef fwd_state0 bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter0 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct reverse_iter_fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef fwd_state1 bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter1 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct reverse_iter_fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef fwd_state2 bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter2 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct reverse_iter_fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef fwd_state3 bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter3 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<> struct reverse_iter_fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef fwd_state4 bkwd_state4;
+        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter4 iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template< long N >
+struct reverse_iter_fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef reverse_iter_fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , iter4
+            , Last
+            , fwd_state4
+            , BackwardOp
+            , ForwardOp
+            > nested_chunk;
+
+        typedef typename nested_chunk::state bkwd_state4;
+        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef typename nested_chunk::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct reverse_iter_fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct reverse_iter_fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , reverse_iter_fold_null_step< Last,State >
+            , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+
+    /// ETI workaround
+    template<> struct result_< int,int,int,int,int >
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_step
+{
+    typedef reverse_iter_fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , First
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl
+    : reverse_iter_fold_chunk<N>
+        ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/set.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/set.hpp
new file mode 100644
index 0000000..60c3af6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/set.hpp
@@ -0,0 +1,556 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct set_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct set_chooser<0>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef set0<
+             
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<1>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set1<
+              T0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<2>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set2<
+              T0, T1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<3>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set3<
+              T0, T1, T2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<4>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set4<
+              T0, T1, T2, T3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<5>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set5<
+              T0, T1, T2, T3, T4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<6>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set6<
+              T0, T1, T2, T3, T4, T5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<7>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set7<
+              T0, T1, T2, T3, T4, T5, T6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<8>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set8<
+              T0, T1, T2, T3, T4, T5, T6, T7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<9>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set9<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<10>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set10<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<11>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set11<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<12>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set12<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<13>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set13<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<14>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set14<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<15>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set15<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<16>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set16<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<17>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set17<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<18>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set18<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<19>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set19<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<20>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set20<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_set_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_set_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6, typename T7, typename T8, typename T9, typename T10
+    , typename T11, typename T12, typename T13, typename T14, typename T15
+    , typename T16, typename T17, typename T18, typename T19, typename T20
+    >
+struct set_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_set_arg<T1>::value + is_set_arg<T2>::value 
+        + is_set_arg<T3>::value + is_set_arg<T4>::value 
+        + is_set_arg<T5>::value + is_set_arg<T6>::value 
+        + is_set_arg<T7>::value + is_set_arg<T8>::value 
+        + is_set_arg<T9>::value + is_set_arg<T10>::value 
+        + is_set_arg<T11>::value + is_set_arg<T12>::value 
+        + is_set_arg<T13>::value + is_set_arg<T14>::value 
+        + is_set_arg<T15>::value + is_set_arg<T16>::value 
+        + is_set_arg<T17>::value + is_set_arg<T18>::value 
+        + is_set_arg<T19>::value + is_set_arg<T20>::value
+        );
+
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct set_impl
+{
+    typedef aux::set_count_args<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        > arg_num_;
+
+    typedef typename aux::set_chooser< arg_num_::value >
+        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct set
+    : aux::set_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type
+{
+    typedef typename aux::set_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp
new file mode 100644
index 0000000..0d2967a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp
@@ -0,0 +1,534 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct set_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct set_c_chooser<0>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set0_c<
+              T
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<1>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set1_c<
+              T, C0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<2>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set2_c<
+              T, C0, C1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<3>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set3_c<
+              T, C0, C1, C2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<4>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set4_c<
+              T, C0, C1, C2, C3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<5>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set5_c<
+              T, C0, C1, C2, C3, C4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<6>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set6_c<
+              T, C0, C1, C2, C3, C4, C5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<7>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set7_c<
+              T, C0, C1, C2, C3, C4, C5, C6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<8>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set8_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<9>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set9_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<10>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set10_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<11>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set11_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<12>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set12_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<13>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set13_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<14>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set14_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<15>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set15_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<16>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set16_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<17>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set17_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<18>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set18_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<19>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set19_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<20>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set20_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_set_c_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_set_c_arg<LONG_MAX>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+    , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+    , long C16, long C17, long C18, long C19, long C20
+    >
+struct set_c_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_set_c_arg<C1>::value + is_set_c_arg<C2>::value 
+        + is_set_c_arg<C3>::value + is_set_c_arg<C4>::value 
+        + is_set_c_arg<C5>::value + is_set_c_arg<C6>::value 
+        + is_set_c_arg<C7>::value + is_set_c_arg<C8>::value 
+        + is_set_c_arg<C9>::value + is_set_c_arg<C10>::value 
+        + is_set_c_arg<C11>::value + is_set_c_arg<C12>::value 
+        + is_set_c_arg<C13>::value + is_set_c_arg<C14>::value 
+        + is_set_c_arg<C15>::value + is_set_c_arg<C16>::value 
+        + is_set_c_arg<C17>::value + is_set_c_arg<C18>::value 
+        + is_set_c_arg<C19>::value + is_set_c_arg<C20>::value
+        );
+
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct set_c_impl
+{
+    typedef aux::set_c_count_args<
+          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        > arg_num_;
+
+    typedef typename aux::set_c_chooser< arg_num_::value >
+        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct set_c
+    : aux::set_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type
+{
+    typedef typename aux::set_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp
new file mode 100644
index 0000000..0f4e3bb
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp
@@ -0,0 +1,114 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct shift_left_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct shift_left_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct shift_left_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_left_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_left
+    : aux::msvc_eti_base< typename apply_wrap2<
+          shift_left_impl<
+              typename shift_left_tag<N1>::type
+            , typename shift_left_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, typename Shift, T n, Shift s >
+struct shift_left_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n << s));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+        : aux::shift_left_wknd<
+              typename N::value_type
+            , typename S::value_type
+            , N::value
+            , S::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp
new file mode 100644
index 0000000..c71bc11
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp
@@ -0,0 +1,114 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct shift_right_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct shift_right_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct shift_right_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_right_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_right
+    : aux::msvc_eti_base< typename apply_wrap2<
+          shift_right_impl<
+              typename shift_right_tag<N1>::type
+            , typename shift_right_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, typename Shift, T n, Shift s >
+struct shift_right_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n >> s));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+        : aux::shift_right_wknd<
+              typename N::value_type
+            , typename S::value_type
+            , N::value
+            , S::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp
new file mode 100644
index 0000000..a5a48a8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp
@@ -0,0 +1,46 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< bool >
+struct template_arity_impl
+{
+    template< typename F > struct result_
+        : mpl::int_< -1 >
+    {
+    };
+};
+
+template<>
+struct template_arity_impl<true>
+{
+    template< typename F > struct result_
+        : F::arity
+    {
+    };
+};
+
+template< typename F >
+struct template_arity
+    : template_arity_impl< ::pdalboost::mpl::aux::has_rebind<F>::value >
+        ::template result_<F>
+{
+};
+
+template<>
+struct template_arity<int>
+    : mpl::int_< -1 >
+{
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/times.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/times.hpp
new file mode 100644
index 0000000..8afa5e4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/times.hpp
@@ -0,0 +1,148 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct times_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct times_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct times_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct times_tag
+{
+    typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct times2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct times
+
+    : if_<
+
+          is_na<N3>
+        , times2< N1,N2 >
+        , times<
+              times2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , times
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct times2
+    : aux::msvc_eti_base< typename apply_wrap2<
+          times_impl<
+              typename times_tag<N1>::type
+            , typename times_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct times_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 * n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::times_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp
new file mode 100644
index 0000000..d5bad07
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp
@@ -0,0 +1,109 @@
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl
+{
+    template< typename F, typename Args > struct apply;
+};
+
+template<> struct unpack_args_impl<0>
+{
+    template< typename F, typename Args > struct apply
+        : apply0<
+              F
+            >
+    {
+    };
+};
+
+template<> struct unpack_args_impl<1>
+{
+    template< typename F, typename Args > struct apply
+        : apply1<
+              F
+            , typename at_c< Args,0 >::type
+            >
+    {
+    };
+};
+
+template<> struct unpack_args_impl<2>
+{
+    template< typename F, typename Args > struct apply
+        : apply2<
+              F
+            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+            >
+    {
+    };
+};
+
+template<> struct unpack_args_impl<3>
+{
+    template< typename F, typename Args > struct apply
+        : apply3<
+              F
+            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+            , typename at_c< Args,2 >::type
+            >
+    {
+    };
+};
+
+template<> struct unpack_args_impl<4>
+{
+    template< typename F, typename Args > struct apply
+        : apply4<
+              F
+            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+            , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+            >
+    {
+    };
+};
+
+template<> struct unpack_args_impl<5>
+{
+    template< typename F, typename Args > struct apply
+        : apply5<
+              F
+            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+            , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+            , typename at_c< Args,4 >::type
+            >
+    {
+    };
+};
+
+}
+
+template<
+      typename F
+    >
+struct unpack_args
+{
+    template< typename Args > struct apply
+
+        : aux::unpack_args_impl< size<Args>::value >
+            ::template apply< F,Args >
+
+    {
+    };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/vector.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/vector.hpp
new file mode 100644
index 0000000..55fa508
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/vector.hpp
@@ -0,0 +1,556 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct vector_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct vector_chooser<0>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef vector0<
+             
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<1>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector1<
+              T0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<2>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector2<
+              T0, T1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<3>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector3<
+              T0, T1, T2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<4>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector4<
+              T0, T1, T2, T3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<5>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector5<
+              T0, T1, T2, T3, T4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<6>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector6<
+              T0, T1, T2, T3, T4, T5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<7>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector7<
+              T0, T1, T2, T3, T4, T5, T6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<8>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector8<
+              T0, T1, T2, T3, T4, T5, T6, T7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<9>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector9<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<10>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector10<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<11>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector11<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<12>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector12<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<13>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector13<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<14>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector14<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<15>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector15<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<16>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector16<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<17>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector17<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<18>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector18<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<19>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector19<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<20>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector20<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_vector_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_vector_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6, typename T7, typename T8, typename T9, typename T10
+    , typename T11, typename T12, typename T13, typename T14, typename T15
+    , typename T16, typename T17, typename T18, typename T19, typename T20
+    >
+struct vector_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_vector_arg<T1>::value + is_vector_arg<T2>::value 
+        + is_vector_arg<T3>::value + is_vector_arg<T4>::value 
+        + is_vector_arg<T5>::value + is_vector_arg<T6>::value 
+        + is_vector_arg<T7>::value + is_vector_arg<T8>::value 
+        + is_vector_arg<T9>::value + is_vector_arg<T10>::value 
+        + is_vector_arg<T11>::value + is_vector_arg<T12>::value 
+        + is_vector_arg<T13>::value + is_vector_arg<T14>::value 
+        + is_vector_arg<T15>::value + is_vector_arg<T16>::value 
+        + is_vector_arg<T17>::value + is_vector_arg<T18>::value 
+        + is_vector_arg<T19>::value + is_vector_arg<T20>::value
+        );
+
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct vector_impl
+{
+    typedef aux::vector_count_args<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        > arg_num_;
+
+    typedef typename aux::vector_chooser< arg_num_::value >
+        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct vector
+    : aux::vector_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type
+{
+    typedef typename aux::vector_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp
new file mode 100644
index 0000000..4448475
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp
@@ -0,0 +1,534 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct vector_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<0>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector0_c<
+              T
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<1>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector1_c<
+              T, T(C0)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<2>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector2_c<
+              T, T(C0), T(C1)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<3>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector3_c<
+              T, T(C0), T(C1), T(C2)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<4>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector4_c<
+              T, T(C0), T(C1), T(C2), T(C3)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<5>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector5_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<6>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector6_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<7>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector7_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<8>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector8_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<9>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector9_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<10>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector10_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<11>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector11_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<12>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector12_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<13>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector13_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<14>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector14_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<15>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector15_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<16>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector16_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<17>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector17_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<18>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector18_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<19>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector19_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<20>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector20_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_vector_c_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_vector_c_arg<LONG_MAX>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+    , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+    , long C16, long C17, long C18, long C19, long C20
+    >
+struct vector_c_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_vector_c_arg<C1>::value + is_vector_c_arg<C2>::value 
+        + is_vector_c_arg<C3>::value + is_vector_c_arg<C4>::value 
+        + is_vector_c_arg<C5>::value + is_vector_c_arg<C6>::value 
+        + is_vector_c_arg<C7>::value + is_vector_c_arg<C8>::value 
+        + is_vector_c_arg<C9>::value + is_vector_c_arg<C10>::value 
+        + is_vector_c_arg<C11>::value + is_vector_c_arg<C12>::value 
+        + is_vector_c_arg<C13>::value + is_vector_c_arg<C14>::value 
+        + is_vector_c_arg<C15>::value + is_vector_c_arg<C16>::value 
+        + is_vector_c_arg<C17>::value + is_vector_c_arg<C18>::value 
+        + is_vector_c_arg<C19>::value + is_vector_c_arg<C20>::value
+        );
+
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct vector_c_impl
+{
+    typedef aux::vector_c_count_args<
+          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        > arg_num_;
+
+    typedef typename aux::vector_c_chooser< arg_num_::value >
+        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct vector_c
+    : aux::vector_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type
+{
+    typedef typename aux::vector_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp
new file mode 100644
index 0000000..8d91863
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_backward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_backward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_backward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_backward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef typename prior<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_backward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_backward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_backward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp
new file mode 100644
index 0000000..1d13df3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_forward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_forward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_forward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_forward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef typename next<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_forward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_forward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_forward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/and.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/and.hpp
new file mode 100644
index 0000000..bb9dbfa
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/and.hpp
@@ -0,0 +1,71 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< bool C_ > struct and_impl
+{
+    template<
+          typename T1, typename T2, typename T3, typename T4
+        >
+    struct result_
+        : false_
+    {
+    };
+};
+
+template<> struct and_impl<true>
+{
+    template<
+          typename T1, typename T2, typename T3, typename T4
+        >
+    struct result_
+        : and_impl<
+              BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+            >::template result_< T2,T3,T4,true_ >
+    {
+    };
+
+    template<> struct result_< true_,true_,true_,true_ >
+        : true_
+    {
+    };
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = true_, typename T4 = true_, typename T5 = true_
+    >
+struct and_
+
+    : aux::and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        >::template result_< T2,T3,T4,T5 >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , and_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , and_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/apply.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/apply.hpp
new file mode 100644
index 0000000..841192c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/apply.hpp
@@ -0,0 +1,160 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct apply0
+
+    : apply_wrap0<
+          typename lambda<F>::type
+       
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          1
+        , apply0
+        , (F )
+        )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply0<int>
+{
+    typedef int type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply1
+
+    : apply_wrap1<
+          typename lambda<F>::type
+        , T1
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          2
+        , apply1
+        , (F, T1)
+        )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply1< int,int >
+{
+    typedef int type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2
+
+    : apply_wrap2<
+          typename lambda<F>::type
+        , T1, T2
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , apply2
+        , (F, T1, T2)
+        )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply2< int,int,int >
+{
+    typedef int type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3
+
+    : apply_wrap3<
+          typename lambda<F>::type
+        , T1, T2, T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , apply3
+        , (F, T1, T2, T3)
+        )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply3< int,int,int,int >
+{
+    typedef int type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4
+
+    : apply_wrap4<
+          typename lambda<F>::type
+        , T1, T2, T3, T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , apply4
+        , (F, T1, T2, T3, T4)
+        )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply4< int,int,int,int,int >
+{
+    typedef int type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5
+
+    : apply_wrap5<
+          typename lambda<F>::type
+        , T1, T2, T3, T4, T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          6
+        , apply5
+        , (F, T1, T2, T3, T4, T5)
+        )
+};
+
+/// workaround for ETI bug
+template<>
+struct apply5< int,int,int,int,int,int >
+{
+    typedef int type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp
new file mode 100644
index 0000000..3175a51
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp
@@ -0,0 +1,46 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct apply0;
+
+template<
+      typename F, typename T1
+    >
+struct apply1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp
new file mode 100644
index 0000000..c2527ff
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp
@@ -0,0 +1,138 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+
+    , typename has_apply_ = typename aux::has_apply<F>::type
+
+    >
+struct apply_wrap0
+
+{
+    typedef typename F::template apply<
+        
+        >::type type;
+
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap0<int>
+{
+    typedef int type;
+};
+
+template<
+      typename F, typename T1
+
+    >
+struct apply_wrap1
+
+{
+    typedef typename F::template apply<
+         T1
+        >::type type;
+
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap1< int,int >
+{
+    typedef int type;
+};
+
+template<
+      typename F, typename T1, typename T2
+
+    >
+struct apply_wrap2
+
+{
+    typedef typename F::template apply<
+         T1, T2
+        >::type type;
+
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap2< int,int,int >
+{
+    typedef int type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+
+    >
+struct apply_wrap3
+
+{
+    typedef typename F::template apply<
+         T1, T2, T3
+        >::type type;
+
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap3< int,int,int,int >
+{
+    typedef int type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+
+    >
+struct apply_wrap4
+
+{
+    typedef typename F::template apply<
+         T1, T2, T3, T4
+        >::type type;
+
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap4< int,int,int,int,int >
+{
+    typedef int type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+
+    >
+struct apply_wrap5
+
+{
+    typedef typename F::template apply<
+         T1, T2, T3, T4, T5
+        >::type type;
+
+};
+
+/// workaround for ETI bug
+template<>
+struct apply_wrap5< int,int,int,int,int,int >
+{
+    typedef int type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/arg.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/arg.hpp
new file mode 100644
index 0000000..6f2f8a8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+    BOOST_STATIC_CONSTANT(int, value  = -1);
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<1>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 1);
+    typedef arg<2> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<2>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 2);
+    typedef arg<3> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U2 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<3>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 3);
+    typedef arg<4> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U3 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<4>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 4);
+    typedef arg<5> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U4 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<5>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 5);
+    typedef arg<6> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U5 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp
new file mode 100644
index 0000000..99ac7f3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< bool >
+struct resolve_arg_impl
+{
+    template<
+          typename T, typename U1, typename U2, typename U3
+        , typename U4, typename U5
+        >
+    struct result_
+    {
+        typedef T type;
+    };
+};
+
+template<>
+struct resolve_arg_impl<true>
+{
+    template<
+          typename T, typename U1, typename U2, typename U3
+        , typename U4, typename U5
+        >
+    struct result_
+    {
+        typedef typename apply_wrap5<
+              T
+            , U1, U2, U3, U4, U5
+            >::type type;
+    };
+};
+
+template< typename T > struct is_bind_template;
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+    : resolve_arg_impl< is_bind_template<T>::value >
+            ::template result_< T,U1,U2,U3,U4,U5 >
+{
+};
+
+template< int arity_ > struct bind_chooser;
+
+aux::no_tag is_bind_helper(...);
+template< typename T > aux::no_tag is_bind_helper(protect<T>*);
+
+template< int N >
+aux::yes_tag is_bind_helper(arg<N>*);
+
+template< bool is_ref_  = true >
+struct is_bind_template_impl
+{
+    template< typename T > struct result_
+    {
+        BOOST_STATIC_CONSTANT(bool, value  = false);
+    };
+};
+
+template<>
+struct is_bind_template_impl<false>
+{
+    template< typename T > struct result_
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+              sizeof(aux::is_bind_helper(static_cast<T*>(0)))
+                == sizeof(aux::yes_tag)
+            );
+    };
+};
+
+template< typename T > struct is_bind_template
+    : is_bind_template_impl< ::pdalboost::detail::is_reference_impl<T>::value >
+        ::template result_<T>
+{
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F
+    >
+aux::yes_tag
+is_bind_helper(bind0<F>*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1
+    >
+aux::yes_tag
+is_bind_helper(bind1< F,T1 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2
+    >
+aux::yes_tag
+is_bind_helper(bind2< F,T1,T2 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+aux::yes_tag
+is_bind_helper(bind3< F,T1,T2,T3 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+aux::yes_tag
+is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+aux::yes_tag
+is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/bind.hpp
new file mode 100644
index 0000000..26d2d33
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/bind.hpp
@@ -0,0 +1,432 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< bool >
+struct resolve_arg_impl
+{
+    template<
+          typename T, typename U1, typename U2, typename U3
+        , typename U4, typename U5
+        >
+    struct result_
+    {
+        typedef T type;
+    };
+};
+
+template<>
+struct resolve_arg_impl<true>
+{
+    template<
+          typename T, typename U1, typename U2, typename U3
+        , typename U4, typename U5
+        >
+    struct result_
+    {
+        typedef typename apply_wrap5<
+              T
+            , U1, U2, U3, U4, U5
+            >::type type;
+    };
+};
+
+template< typename T > struct is_bind_template;
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+    : resolve_arg_impl< is_bind_template<T>::value >
+            ::template result_< T,U1,U2,U3,U4,U5 >
+{
+};
+
+template< typename T >
+struct replace_unnamed_arg_impl
+{
+    template< typename Arg > struct result_
+    {
+        typedef Arg next;
+        typedef T type;
+    };
+};
+
+template<>
+struct replace_unnamed_arg_impl< arg< -1 > >
+{
+    template< typename Arg > struct result_
+    {
+        typedef typename next<Arg>::type next;
+        typedef Arg type;
+    };
+};
+
+template< typename T, typename Arg >
+struct replace_unnamed_arg
+    : replace_unnamed_arg_impl<T>::template result_<Arg>
+{
+};
+
+template< int arity_ > struct bind_chooser;
+
+aux::no_tag is_bind_helper(...);
+template< typename T > aux::no_tag is_bind_helper(protect<T>*);
+
+template< int N >
+aux::yes_tag is_bind_helper(arg<N>*);
+
+template< bool is_ref_  = true >
+struct is_bind_template_impl
+{
+    template< typename T > struct result_
+    {
+        BOOST_STATIC_CONSTANT(bool, value  = false);
+    };
+};
+
+template<>
+struct is_bind_template_impl<false>
+{
+    template< typename T > struct result_
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+              sizeof(aux::is_bind_helper(static_cast<T*>(0)))
+                == sizeof(aux::yes_tag)
+            );
+    };
+};
+
+template< typename T > struct is_bind_template
+    : is_bind_template_impl< ::pdalboost::detail::is_reference_impl<T>::value >
+        ::template result_<T>
+{
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F
+    >
+aux::yes_tag
+is_bind_helper(bind0<F>*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1
+    >
+aux::yes_tag
+is_bind_helper(bind1< F,T1 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2
+    >
+aux::yes_tag
+is_bind_helper(bind2< F,T1,T2 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+aux::yes_tag
+is_bind_helper(bind3< F,T1,T2,T3 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+aux::yes_tag
+is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+        typedef aux::replace_unnamed_arg< T5,n5 > r5;
+        typedef typename r5::type a5;
+        typedef typename r5::next n6;
+        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+        ///
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+aux::yes_tag
+is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp
new file mode 100644
index 0000000..dc6687f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp
@@ -0,0 +1,46 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct bind0;
+
+template<
+      typename F, typename T1
+    >
+struct bind1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp
new file mode 100644
index 0000000..82551d8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp
@@ -0,0 +1,151 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct bitand_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitand_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitand_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitand_tag
+    : tag< T,na >
+{
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct bitand_2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitand_
+
+    : aux::msvc_eti_base< typename if_<
+
+          is_na<N3>
+        , bitand_2< N1,N2 >
+        , bitand_<
+              bitand_2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+    >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct bitand_2
+    : aux::msvc_eti_base< typename apply_wrap2<
+          bitand_impl<
+              typename bitand_tag<N1>::type
+            , typename bitand_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitand_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitand_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 & n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::bitand_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp
new file mode 100644
index 0000000..065af88
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp
@@ -0,0 +1,151 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct bitor_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitor_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitor_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitor_tag
+    : tag< T,na >
+{
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct bitor_2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitor_
+
+    : aux::msvc_eti_base< typename if_<
+
+          is_na<N3>
+        , bitor_2< N1,N2 >
+        , bitor_<
+              bitor_2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+    >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct bitor_2
+    : aux::msvc_eti_base< typename apply_wrap2<
+          bitor_impl<
+              typename bitor_tag<N1>::type
+            , typename bitor_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitor_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitor_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 | n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::bitor_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp
new file mode 100644
index 0000000..eb90188
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp
@@ -0,0 +1,151 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct bitxor_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitxor_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitxor_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitxor_tag
+    : tag< T,na >
+{
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct bitxor_2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitxor_
+
+    : aux::msvc_eti_base< typename if_<
+
+          is_na<N3>
+        , bitxor_2< N1,N2 >
+        , bitxor_<
+              bitxor_2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+    >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct bitxor_2
+    : aux::msvc_eti_base< typename apply_wrap2<
+          bitxor_impl<
+              typename bitxor_tag<N1>::type
+            , typename bitxor_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitxor_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 ^ n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::bitxor_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/deque.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/deque.hpp
new file mode 100644
index 0000000..1fd4b18
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/deque.hpp
@@ -0,0 +1,556 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct deque_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct deque_chooser<0>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef vector0<
+             
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<1>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector1<
+              T0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<2>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector2<
+              T0, T1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<3>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector3<
+              T0, T1, T2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<4>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector4<
+              T0, T1, T2, T3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<5>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector5<
+              T0, T1, T2, T3, T4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<6>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector6<
+              T0, T1, T2, T3, T4, T5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<7>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector7<
+              T0, T1, T2, T3, T4, T5, T6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<8>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector8<
+              T0, T1, T2, T3, T4, T5, T6, T7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<9>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector9<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<10>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector10<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<11>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector11<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<12>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector12<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<13>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector13<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<14>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector14<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<15>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector15<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<16>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector16<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<17>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector17<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<18>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector18<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<19>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector19<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<20>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector20<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_deque_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_deque_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6, typename T7, typename T8, typename T9, typename T10
+    , typename T11, typename T12, typename T13, typename T14, typename T15
+    , typename T16, typename T17, typename T18, typename T19, typename T20
+    >
+struct deque_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_deque_arg<T1>::value + is_deque_arg<T2>::value 
+        + is_deque_arg<T3>::value + is_deque_arg<T4>::value 
+        + is_deque_arg<T5>::value + is_deque_arg<T6>::value 
+        + is_deque_arg<T7>::value + is_deque_arg<T8>::value 
+        + is_deque_arg<T9>::value + is_deque_arg<T10>::value 
+        + is_deque_arg<T11>::value + is_deque_arg<T12>::value 
+        + is_deque_arg<T13>::value + is_deque_arg<T14>::value 
+        + is_deque_arg<T15>::value + is_deque_arg<T16>::value 
+        + is_deque_arg<T17>::value + is_deque_arg<T18>::value 
+        + is_deque_arg<T19>::value + is_deque_arg<T20>::value
+        );
+
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct deque_impl
+{
+    typedef aux::deque_count_args<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        > arg_num_;
+
+    typedef typename aux::deque_chooser< arg_num_::value >
+        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct deque
+    : aux::deque_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type
+{
+    typedef typename aux::deque_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/divides.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/divides.hpp
new file mode 100644
index 0000000..4539016
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/divides.hpp
@@ -0,0 +1,150 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct divides_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct divides_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct divides_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct divides_tag
+    : tag< T,na >
+{
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct divides2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct divides
+
+    : aux::msvc_eti_base< typename if_<
+
+          is_na<N3>
+        , divides2< N1,N2 >
+        , divides<
+              divides2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+    >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , divides
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct divides2
+    : aux::msvc_eti_base< typename apply_wrap2<
+          divides_impl<
+              typename divides_tag<N1>::type
+            , typename divides_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, divides2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct divides_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 / n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::divides_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp
new file mode 100644
index 0000000..074f3f5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp
@@ -0,0 +1,102 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct equal_to_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct equal_to_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct equal_to_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct equal_to_tag
+    : tag< T,na >
+{
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct equal_to
+    : aux::msvc_eti_base< typename apply_wrap2<
+          equal_to_impl<
+              typename equal_to_tag<N1>::type
+            , typename equal_to_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value ==
+             BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp
new file mode 100644
index 0000000..b34a6f6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp
@@ -0,0 +1,245 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl;
+
+template< int N >
+struct fold_chunk;
+
+template<> struct fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef state0 state;
+        typedef iter0 iterator;
+    };
+};
+
+template<> struct fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef state1 state;
+        typedef iter1 iterator;
+    };
+};
+
+template<> struct fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef state2 state;
+        typedef iter2 iterator;
+    };
+};
+
+template<> struct fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef state3 state;
+        typedef iter3 iterator;
+    };
+};
+
+template<> struct fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef state4 state;
+        typedef iter4 iterator;
+    };
+};
+
+template< int N >
+struct fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef fold_impl<
+              4
+            , First
+            , Last
+            , State
+            , ForwardOp
+            > chunk_;
+
+        typedef fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , typename chunk_::iterator
+            , Last
+            , typename chunk_::state
+            , ForwardOp
+            > res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , fold_null_step< Last,State >
+            , fold_step< First,Last,State,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_step
+{
+    typedef fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , ForwardOp
+        > chunk_;
+
+    typedef typename chunk_::state state;
+    typedef typename chunk_::iterator iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl
+    : fold_chunk<N>
+        ::template result_< First,Last,State,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp
new file mode 100644
index 0000000..6acccb2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp
@@ -0,0 +1,554 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+   
+    >
+struct lambda
+{
+    typedef false_ is_le;
+    typedef T result_;
+    typedef T type;
+};
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>, Tag >
+{
+    typedef true_ is_le;
+    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+    typedef mpl::protect<result_> type;
+};
+
+template<
+      typename F
+    , typename Tag
+    >
+struct lambda<
+          bind0<F>
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind0<
+          F
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1
+{
+    typedef F<
+          typename L1::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1< true_,Tag,F,L1 >
+{
+    typedef bind1<
+          quote1< F,Tag >
+        , typename L1::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1 > class F
+    , typename T1
+    , typename Tag
+    >
+struct lambda<
+          F<T1>
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef typename l1::is_le is_le1;
+    typedef typename aux::lambda_or<
+          is_le1::value
+        >::type is_le;
+
+    typedef aux::le_result1<
+          is_le, Tag, F, l1
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1
+    , typename Tag
+    >
+struct lambda<
+          bind1< F,T1 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind1<
+          F
+        , T1
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2
+{
+    typedef F<
+          typename L1::type, typename L2::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+    typedef bind2<
+          quote2< F,Tag >
+        , typename L1::result_, typename L2::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value
+        >::type is_le;
+
+    typedef aux::le_result2<
+          is_le, Tag, F, l1, l2
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          bind2< F,T1,T2 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind2<
+          F
+        , T1, T2
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+    typedef bind3<
+          quote3< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value
+        >::type is_le;
+
+    typedef aux::le_result3<
+          is_le, Tag, F, l1, l2, l3
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          bind3< F,T1,T2,T3 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind3<
+          F
+        , T1, T2, T3
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+    typedef bind4<
+          quote4< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        >::type is_le;
+
+    typedef aux::le_result4<
+          is_le, Tag, F, l1, l2, l3, l4
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          bind4< F,T1,T2,T3,T4 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind4<
+          F
+        , T1, T2, T3, T4
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type, typename L5::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+    typedef bind5<
+          quote5< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_, typename L5::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    typedef lambda< T5,Tag > l5;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    typedef typename l5::is_le is_le5;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        , is_le5::value
+        >::type is_le;
+
+    typedef aux::le_result5<
+          is_le, Tag, F, l1, l2, l3, l4, l5
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind5< F,T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind5<
+          F
+        , T1, T2, T3, T4, T5
+        > result_;
+
+    typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>, Tag >
+{
+    typedef false_ is_le;
+    typedef mpl::protect<T> result_;
+    typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind< F,T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind< F,T1,T2,T3,T4,T5 > result_;
+    typedef result_ type;
+};
+
+/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
+
+template<
+      typename F, typename Tag1, typename Tag2
+    >
+struct lambda<
+          lambda< F,Tag1 >
+        , Tag2
+        >
+{
+    typedef lambda< F,Tag2 > l1;
+    typedef lambda< Tag1,Tag2 > l2;
+    typedef typename l1::is_le is_le;
+    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/greater.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/greater.hpp
new file mode 100644
index 0000000..4133e56
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/greater.hpp
@@ -0,0 +1,102 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct greater_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct greater_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct greater_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_tag
+    : tag< T,na >
+{
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater
+    : aux::msvc_eti_base< typename apply_wrap2<
+          greater_impl<
+              typename greater_tag<N1>::type
+            , typename greater_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >
+             BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp
new file mode 100644
index 0000000..befaaa9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp
@@ -0,0 +1,102 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct greater_equal_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct greater_equal_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct greater_equal_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_equal_tag
+    : tag< T,na >
+{
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater_equal
+    : aux::msvc_eti_base< typename apply_wrap2<
+          greater_equal_impl<
+              typename greater_equal_tag<N1>::type
+            , typename greater_equal_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >=
+             BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp
new file mode 100644
index 0000000..1510352
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp
@@ -0,0 +1,166 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C1, bool C2 >
+struct inherit2_impl
+{
+    template< typename Derived, typename T1, typename T2 > struct result_
+        : T1, T2
+    {
+        typedef Derived type_;
+    };
+};
+
+template<>
+struct inherit2_impl< false,true >
+{
+    template< typename Derived, typename T1, typename T2 > struct result_
+        : T1
+    {
+        typedef T1 type_;
+    };
+};
+
+template<>
+struct inherit2_impl< true,false >
+{
+    template< typename Derived, typename T1, typename T2 > struct result_
+        : T2
+    {
+        typedef T2 type_;
+    };
+};
+
+template<>
+struct inherit2_impl< true,true >
+{
+    template< typename Derived, typename T1, typename T2 > struct result_
+    {
+        typedef T1 type_;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    >
+struct inherit2
+    : aux::inherit2_impl<
+          is_empty_base<T1>::value
+        , is_empty_base<T2>::value
+        >::template result_< inherit2< T1,T2 >,T1, T2 >
+{
+    typedef typename inherit2::type_ type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na
+    >
+struct inherit3
+    : inherit2<
+          typename inherit2<
+              T1, T2
+            >::type
+        , T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , inherit3
+        , ( T1, T2, T3)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    >
+struct inherit4
+    : inherit2<
+          typename inherit3<
+              T1, T2, T3
+            >::type
+        , T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , inherit4
+        , ( T1, T2, T3, T4)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    , typename T5 = na
+    >
+struct inherit5
+    : inherit2<
+          typename inherit4<
+              T1, T2, T3, T4
+            >::type
+        , T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , inherit5
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+      typename T1 = empty_base, typename T2 = empty_base
+    , typename T3 = empty_base, typename T4 = empty_base
+    , typename T5 = empty_base
+    >
+struct inherit
+    : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+    template<
+
+          typename T1 = empty_base, typename T2 = empty_base
+        , typename T3 = empty_base, typename T4 = empty_base
+        , typename T5 = empty_base
+
+        >
+    struct apply
+        : inherit< T1,T2,T3,T4,T5 >
+    {
+    };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp
new file mode 100644
index 0000000..74c0cc6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename Iterator, typename State >
+struct iter_fold_if_null_step
+{
+    typedef State state;
+    typedef Iterator iterator;
+};
+
+template< bool >
+struct iter_fold_if_step_impl
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef typename apply2< StateOp,State,Iterator >::type state;
+        typedef typename IteratorOp::type iterator;
+    };
+};
+
+template<>
+struct iter_fold_if_step_impl<false>
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef State state;
+        typedef Iterator iterator;
+    };
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_forward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename BackwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_backward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename ForwardPredicate
+    , typename BackwardOp
+    , typename BackwardPredicate
+    >
+struct iter_fold_if_impl
+{
+ private:
+    typedef iter_fold_if_null_step< Iterator,State > forward_step0;
+    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+    
+
+    typedef typename if_<
+          typename forward_step4::not_last
+        , iter_fold_if_impl<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            , ForwardOp
+            , ForwardPredicate
+            , BackwardOp
+            , BackwardPredicate
+            >
+        , iter_fold_if_null_step<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            >
+        >::type backward_step4;
+
+    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+    
+
+ public:
+    typedef typename backward_step0::state state;
+    typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp
new file mode 100644
index 0000000..7f7857f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp
@@ -0,0 +1,245 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl;
+
+template< int N >
+struct iter_fold_chunk;
+
+template<> struct iter_fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef state0 state;
+        typedef iter0 iterator;
+    };
+};
+
+template<> struct iter_fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef state1 state;
+        typedef iter1 iterator;
+    };
+};
+
+template<> struct iter_fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef state2 state;
+        typedef iter2 iterator;
+    };
+};
+
+template<> struct iter_fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef state3 state;
+        typedef iter3 iterator;
+    };
+};
+
+template<> struct iter_fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef state4 state;
+        typedef iter4 iterator;
+    };
+};
+
+template< int N >
+struct iter_fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef iter_fold_impl<
+              4
+            , First
+            , Last
+            , State
+            , ForwardOp
+            > chunk_;
+
+        typedef iter_fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , typename chunk_::iterator
+            , Last
+            , typename chunk_::state
+            , ForwardOp
+            > res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct iter_fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct iter_fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , iter_fold_null_step< Last,State >
+            , iter_fold_step< First,Last,State,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_step
+{
+    typedef iter_fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , ForwardOp
+        > chunk_;
+
+    typedef typename chunk_::state state;
+    typedef typename chunk_::iterator iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl
+    : iter_fold_chunk<N>
+        ::template result_< First,Last,State,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp
new file mode 100644
index 0000000..5cb26dc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp
@@ -0,0 +1,229 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+    template< typename T, typename Tag, typename Protect > struct result_
+    {
+        typedef T type;
+        typedef is_placeholder<T> is_le;
+    };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef typename l1::is_le is_le1;
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+            > is_le;
+
+        typedef bind1<
+              typename F::rebind
+            , typename l1::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+            > is_le;
+
+        typedef bind2<
+              typename F::rebind
+            , typename l1::type, typename l2::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+            > is_le;
+
+        typedef bind3<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+            > is_le;
+
+        typedef bind4<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        typedef lambda< typename F::arg5, Tag, false_ > l5;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        typedef typename l5::is_le is_le5;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+            > is_le;
+
+        typedef bind5<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type, typename l5::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Protect
+    >
+struct lambda
+{
+    /// Metafunction forwarding confuses MSVC 6.x
+    typedef typename aux::template_arity<T>::type arity_;
+    typedef typename aux::lambda_impl<arity_>
+        ::template result_< T,Tag,Protect > l_;
+
+    typedef typename l_::type type;
+    typedef typename l_::is_le is_le;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/less.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/less.hpp
new file mode 100644
index 0000000..354ea52
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/less.hpp
@@ -0,0 +1,102 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct less_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct less_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct less_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_tag
+    : tag< T,na >
+{
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less
+    : aux::msvc_eti_base< typename apply_wrap2<
+          less_impl<
+              typename less_tag<N1>::type
+            , typename less_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N2)::value >
+             BOOST_MPL_AUX_VALUE_WKND(N1)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp
new file mode 100644
index 0000000..83b43ca
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp
@@ -0,0 +1,102 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct less_equal_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct less_equal_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct less_equal_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_equal_tag
+    : tag< T,na >
+{
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less_equal
+    : aux::msvc_eti_base< typename apply_wrap2<
+          less_equal_impl<
+              typename less_equal_tag<N1>::type
+            , typename less_equal_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <=
+             BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/list.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/list.hpp
new file mode 100644
index 0000000..43ddbe4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/list.hpp
@@ -0,0 +1,556 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct list_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct list_chooser<0>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef list0<
+             
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<1>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list1<
+              T0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<2>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list2<
+              T0, T1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<3>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list3<
+              T0, T1, T2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<4>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list4<
+              T0, T1, T2, T3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<5>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list5<
+              T0, T1, T2, T3, T4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<6>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list6<
+              T0, T1, T2, T3, T4, T5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<7>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list7<
+              T0, T1, T2, T3, T4, T5, T6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<8>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list8<
+              T0, T1, T2, T3, T4, T5, T6, T7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<9>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list9<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<10>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list10<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<11>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list11<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<12>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list12<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<13>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list13<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<14>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list14<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<15>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list15<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<16>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list16<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<17>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list17<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<18>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list18<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<19>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list19<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<20>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list20<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_list_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_list_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6, typename T7, typename T8, typename T9, typename T10
+    , typename T11, typename T12, typename T13, typename T14, typename T15
+    , typename T16, typename T17, typename T18, typename T19, typename T20
+    >
+struct list_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_list_arg<T1>::value + is_list_arg<T2>::value 
+        + is_list_arg<T3>::value + is_list_arg<T4>::value 
+        + is_list_arg<T5>::value + is_list_arg<T6>::value 
+        + is_list_arg<T7>::value + is_list_arg<T8>::value 
+        + is_list_arg<T9>::value + is_list_arg<T10>::value 
+        + is_list_arg<T11>::value + is_list_arg<T12>::value 
+        + is_list_arg<T13>::value + is_list_arg<T14>::value 
+        + is_list_arg<T15>::value + is_list_arg<T16>::value 
+        + is_list_arg<T17>::value + is_list_arg<T18>::value 
+        + is_list_arg<T19>::value + is_list_arg<T20>::value
+        );
+
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct list_impl
+{
+    typedef aux::list_count_args<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        > arg_num_;
+
+    typedef typename aux::list_chooser< arg_num_::value >
+        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct list
+    : aux::list_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type
+{
+    typedef typename aux::list_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp
new file mode 100644
index 0000000..33b8b23
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp
@@ -0,0 +1,534 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct list_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct list_c_chooser<0>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list0_c<
+              T
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<1>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list1_c<
+              T, C0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<2>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list2_c<
+              T, C0, C1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<3>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list3_c<
+              T, C0, C1, C2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<4>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list4_c<
+              T, C0, C1, C2, C3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<5>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list5_c<
+              T, C0, C1, C2, C3, C4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<6>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list6_c<
+              T, C0, C1, C2, C3, C4, C5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<7>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list7_c<
+              T, C0, C1, C2, C3, C4, C5, C6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<8>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list8_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<9>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list9_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<10>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list10_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<11>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list11_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<12>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list12_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<13>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list13_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<14>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list14_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<15>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list15_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<16>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list16_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<17>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list17_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<18>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list18_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<19>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list19_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<20>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list20_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_list_c_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_list_c_arg<LONG_MAX>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+    , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+    , long C16, long C17, long C18, long C19, long C20
+    >
+struct list_c_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_list_c_arg<C1>::value + is_list_c_arg<C2>::value 
+        + is_list_c_arg<C3>::value + is_list_c_arg<C4>::value 
+        + is_list_c_arg<C5>::value + is_list_c_arg<C6>::value 
+        + is_list_c_arg<C7>::value + is_list_c_arg<C8>::value 
+        + is_list_c_arg<C9>::value + is_list_c_arg<C10>::value 
+        + is_list_c_arg<C11>::value + is_list_c_arg<C12>::value 
+        + is_list_c_arg<C13>::value + is_list_c_arg<C14>::value 
+        + is_list_c_arg<C15>::value + is_list_c_arg<C16>::value 
+        + is_list_c_arg<C17>::value + is_list_c_arg<C18>::value 
+        + is_list_c_arg<C19>::value + is_list_c_arg<C20>::value
+        );
+
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct list_c_impl
+{
+    typedef aux::list_c_count_args<
+          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        > arg_num_;
+
+    typedef typename aux::list_c_chooser< arg_num_::value >
+        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct list_c
+    : aux::list_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type
+{
+    typedef typename aux::list_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/map.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/map.hpp
new file mode 100644
index 0000000..05acd89
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/map.hpp
@@ -0,0 +1,556 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct map_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct map_chooser<0>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef map0<
+             
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<1>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map1<
+              T0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<2>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map2<
+              T0, T1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<3>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map3<
+              T0, T1, T2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<4>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map4<
+              T0, T1, T2, T3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<5>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map5<
+              T0, T1, T2, T3, T4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<6>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map6<
+              T0, T1, T2, T3, T4, T5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<7>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map7<
+              T0, T1, T2, T3, T4, T5, T6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<8>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map8<
+              T0, T1, T2, T3, T4, T5, T6, T7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<9>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map9<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<10>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map10<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<11>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map11<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<12>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map12<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<13>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map13<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<14>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map14<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<15>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map15<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<16>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map16<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<17>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map17<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<18>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map18<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<19>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map19<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<20>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map20<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_map_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_map_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6, typename T7, typename T8, typename T9, typename T10
+    , typename T11, typename T12, typename T13, typename T14, typename T15
+    , typename T16, typename T17, typename T18, typename T19, typename T20
+    >
+struct map_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_map_arg<T1>::value + is_map_arg<T2>::value 
+        + is_map_arg<T3>::value + is_map_arg<T4>::value 
+        + is_map_arg<T5>::value + is_map_arg<T6>::value 
+        + is_map_arg<T7>::value + is_map_arg<T8>::value 
+        + is_map_arg<T9>::value + is_map_arg<T10>::value 
+        + is_map_arg<T11>::value + is_map_arg<T12>::value 
+        + is_map_arg<T13>::value + is_map_arg<T14>::value 
+        + is_map_arg<T15>::value + is_map_arg<T16>::value 
+        + is_map_arg<T17>::value + is_map_arg<T18>::value 
+        + is_map_arg<T19>::value + is_map_arg<T20>::value
+        );
+
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct map_impl
+{
+    typedef aux::map_count_args<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        > arg_num_;
+
+    typedef typename aux::map_chooser< arg_num_::value >
+        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct map
+    : aux::map_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type
+{
+    typedef typename aux::map_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/minus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/minus.hpp
new file mode 100644
index 0000000..a0b920a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/minus.hpp
@@ -0,0 +1,150 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct minus_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct minus_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct minus_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct minus_tag
+    : tag< T,na >
+{
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct minus2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct minus
+
+    : aux::msvc_eti_base< typename if_<
+
+          is_na<N3>
+        , minus2< N1,N2 >
+        , minus<
+              minus2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+    >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , minus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct minus2
+    : aux::msvc_eti_base< typename apply_wrap2<
+          minus_impl<
+              typename minus_tag<N1>::type
+            , typename minus_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, minus2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct minus_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 - n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::minus_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp
new file mode 100644
index 0000000..ff5d075
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp
@@ -0,0 +1,115 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct modulus_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct modulus_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct modulus_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct modulus_tag
+    : tag< T,na >
+{
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct modulus
+    : aux::msvc_eti_base< typename apply_wrap2<
+          modulus_impl<
+              typename modulus_tag<N1>::type
+            , typename modulus_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct modulus_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 % n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::modulus_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp
new file mode 100644
index 0000000..cd7f2ba
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp
@@ -0,0 +1,102 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct not_equal_to_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct not_equal_to_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct not_equal_to_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct not_equal_to_tag
+    : tag< T,na >
+{
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct not_equal_to
+    : aux::msvc_eti_base< typename apply_wrap2<
+          not_equal_to_impl<
+              typename not_equal_to_tag<N1>::type
+            , typename not_equal_to_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value !=
+             BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/or.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/or.hpp
new file mode 100644
index 0000000..8ec178f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/or.hpp
@@ -0,0 +1,71 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< bool C_ > struct or_impl
+{
+    template<
+          typename T1, typename T2, typename T3, typename T4
+        >
+    struct result_
+        : true_
+    {
+    };
+};
+
+template<> struct or_impl<false>
+{
+    template<
+          typename T1, typename T2, typename T3, typename T4
+        >
+    struct result_
+        : or_impl<
+              BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+            >::template result_< T2,T3,T4,false_ >
+    {
+    };
+
+    template<> struct result_< false_,false_,false_,false_ >
+        : false_
+    {
+    };
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = false_, typename T4 = false_, typename T5 = false_
+    >
+struct or_
+
+    : aux::or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        >::template result_< T2,T3,T4,T5 >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , or_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , or_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp
new file mode 100644
index 0000000..0b0cc25
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#' 
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/plus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/plus.hpp
new file mode 100644
index 0000000..6573a68
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/plus.hpp
@@ -0,0 +1,150 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct plus_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct plus_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct plus_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct plus_tag
+    : tag< T,na >
+{
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct plus2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct plus
+
+    : aux::msvc_eti_base< typename if_<
+
+          is_na<N3>
+        , plus2< N1,N2 >
+        , plus<
+              plus2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+    >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , plus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct plus2
+    : aux::msvc_eti_base< typename apply_wrap2<
+          plus_impl<
+              typename plus_tag<N1>::type
+            , typename plus_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct plus_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 + n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::plus_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/quote.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/quote.hpp
new file mode 100644
index 0000000..cf1a65b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/quote.hpp
@@ -0,0 +1,116 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/quote.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+template< bool > struct quote_impl
+{
+    template< typename T > struct result_
+        : T
+    {
+    };
+};
+
+template<> struct quote_impl<false>
+{
+    template< typename T > struct result_
+    {
+        typedef T type;
+    };
+};
+
+template<
+      template< typename P1 > class F
+    , typename Tag = void_
+    >
+struct quote1
+{
+    template< typename U1 > struct apply
+
+        : quote_impl< aux::has_type< F<U1> >::value >
+            ::template result_< F<U1> >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename Tag = void_
+    >
+struct quote2
+{
+    template< typename U1, typename U2 > struct apply
+
+        : quote_impl< aux::has_type< F< U1,U2 > >::value >
+            ::template result_< F< U1,U2 > >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename Tag = void_
+    >
+struct quote3
+{
+    template< typename U1, typename U2, typename U3 > struct apply
+
+        : quote_impl< aux::has_type< F< U1,U2,U3 > >::value >
+            ::template result_< F< U1,U2,U3 > >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename Tag = void_
+    >
+struct quote4
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4
+        >
+    struct apply
+
+        : quote_impl< aux::has_type< F< U1,U2,U3,U4 > >::value >
+            ::template result_< F< U1,U2,U3,U4 > >
+
+    {
+    };
+};
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename Tag = void_
+    >
+struct quote5
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4
+        , typename U5
+        >
+    struct apply
+
+        : quote_impl< aux::has_type< F< U1,U2,U3,U4,U5 > >::value >
+            ::template result_< F< U1,U2,U3,U4,U5 > >
+
+    {
+    };
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp
new file mode 100644
index 0000000..fee5d0f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl;
+
+template< long N >
+struct reverse_fold_chunk;
+
+template<> struct reverse_fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef fwd_state0 bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter0 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef fwd_state1 bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter1 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef fwd_state2 bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter2 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef fwd_state3 bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter3 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef fwd_state4 bkwd_state4;
+        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter4 iterator;
+    };
+};
+
+template< long N >
+struct reverse_fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef reverse_fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , iter4
+            , Last
+            , fwd_state4
+            , BackwardOp
+            , ForwardOp
+            > nested_chunk;
+
+        typedef typename nested_chunk::state bkwd_state4;
+        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef typename nested_chunk::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct reverse_fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct reverse_fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , reverse_fold_null_step< Last,State >
+            , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_step
+{
+    typedef reverse_fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , typename deref<First>::type
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl
+    : reverse_fold_chunk<N>
+        ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp
new file mode 100644
index 0000000..14caf06
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl;
+
+template< long N >
+struct reverse_iter_fold_chunk;
+
+template<> struct reverse_iter_fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef fwd_state0 bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter0 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef fwd_state1 bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter1 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef fwd_state2 bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter2 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef fwd_state3 bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter3 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef fwd_state4 bkwd_state4;
+        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter4 iterator;
+    };
+};
+
+template< long N >
+struct reverse_iter_fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef reverse_iter_fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , iter4
+            , Last
+            , fwd_state4
+            , BackwardOp
+            , ForwardOp
+            > nested_chunk;
+
+        typedef typename nested_chunk::state bkwd_state4;
+        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef typename nested_chunk::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct reverse_iter_fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct reverse_iter_fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , reverse_iter_fold_null_step< Last,State >
+            , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_step
+{
+    typedef reverse_iter_fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , First
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl
+    : reverse_iter_fold_chunk<N>
+        ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/set.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/set.hpp
new file mode 100644
index 0000000..60c3af6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/set.hpp
@@ -0,0 +1,556 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct set_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct set_chooser<0>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef set0<
+             
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<1>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set1<
+              T0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<2>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set2<
+              T0, T1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<3>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set3<
+              T0, T1, T2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<4>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set4<
+              T0, T1, T2, T3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<5>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set5<
+              T0, T1, T2, T3, T4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<6>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set6<
+              T0, T1, T2, T3, T4, T5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<7>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set7<
+              T0, T1, T2, T3, T4, T5, T6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<8>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set8<
+              T0, T1, T2, T3, T4, T5, T6, T7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<9>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set9<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<10>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set10<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<11>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set11<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<12>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set12<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<13>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set13<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<14>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set14<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<15>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set15<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<16>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set16<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<17>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set17<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<18>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set18<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<19>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set19<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<20>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set20<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_set_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_set_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6, typename T7, typename T8, typename T9, typename T10
+    , typename T11, typename T12, typename T13, typename T14, typename T15
+    , typename T16, typename T17, typename T18, typename T19, typename T20
+    >
+struct set_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_set_arg<T1>::value + is_set_arg<T2>::value 
+        + is_set_arg<T3>::value + is_set_arg<T4>::value 
+        + is_set_arg<T5>::value + is_set_arg<T6>::value 
+        + is_set_arg<T7>::value + is_set_arg<T8>::value 
+        + is_set_arg<T9>::value + is_set_arg<T10>::value 
+        + is_set_arg<T11>::value + is_set_arg<T12>::value 
+        + is_set_arg<T13>::value + is_set_arg<T14>::value 
+        + is_set_arg<T15>::value + is_set_arg<T16>::value 
+        + is_set_arg<T17>::value + is_set_arg<T18>::value 
+        + is_set_arg<T19>::value + is_set_arg<T20>::value
+        );
+
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct set_impl
+{
+    typedef aux::set_count_args<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        > arg_num_;
+
+    typedef typename aux::set_chooser< arg_num_::value >
+        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct set
+    : aux::set_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type
+{
+    typedef typename aux::set_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp
new file mode 100644
index 0000000..0d2967a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp
@@ -0,0 +1,534 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct set_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct set_c_chooser<0>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set0_c<
+              T
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<1>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set1_c<
+              T, C0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<2>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set2_c<
+              T, C0, C1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<3>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set3_c<
+              T, C0, C1, C2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<4>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set4_c<
+              T, C0, C1, C2, C3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<5>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set5_c<
+              T, C0, C1, C2, C3, C4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<6>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set6_c<
+              T, C0, C1, C2, C3, C4, C5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<7>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set7_c<
+              T, C0, C1, C2, C3, C4, C5, C6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<8>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set8_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<9>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set9_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<10>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set10_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<11>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set11_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<12>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set12_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<13>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set13_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<14>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set14_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<15>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set15_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<16>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set16_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<17>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set17_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<18>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set18_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<19>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set19_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<20>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set20_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_set_c_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_set_c_arg<LONG_MAX>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+    , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+    , long C16, long C17, long C18, long C19, long C20
+    >
+struct set_c_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_set_c_arg<C1>::value + is_set_c_arg<C2>::value 
+        + is_set_c_arg<C3>::value + is_set_c_arg<C4>::value 
+        + is_set_c_arg<C5>::value + is_set_c_arg<C6>::value 
+        + is_set_c_arg<C7>::value + is_set_c_arg<C8>::value 
+        + is_set_c_arg<C9>::value + is_set_c_arg<C10>::value 
+        + is_set_c_arg<C11>::value + is_set_c_arg<C12>::value 
+        + is_set_c_arg<C13>::value + is_set_c_arg<C14>::value 
+        + is_set_c_arg<C15>::value + is_set_c_arg<C16>::value 
+        + is_set_c_arg<C17>::value + is_set_c_arg<C18>::value 
+        + is_set_c_arg<C19>::value + is_set_c_arg<C20>::value
+        );
+
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct set_c_impl
+{
+    typedef aux::set_c_count_args<
+          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        > arg_num_;
+
+    typedef typename aux::set_c_chooser< arg_num_::value >
+        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct set_c
+    : aux::set_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type
+{
+    typedef typename aux::set_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp
new file mode 100644
index 0000000..3c23dd2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp
@@ -0,0 +1,114 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct shift_left_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct shift_left_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct shift_left_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_left_tag
+    : tag< T,na >
+{
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_left
+    : aux::msvc_eti_base< typename apply_wrap2<
+          shift_left_impl<
+              typename shift_left_tag<N1>::type
+            , typename shift_left_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, typename Shift, T n, Shift s >
+struct shift_left_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n << s));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+        : aux::shift_left_wknd<
+              typename N::value_type
+            , typename S::value_type
+            , N::value
+            , S::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp
new file mode 100644
index 0000000..f2818e5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp
@@ -0,0 +1,114 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct shift_right_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct shift_right_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct shift_right_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_right_tag
+    : tag< T,na >
+{
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_right
+    : aux::msvc_eti_base< typename apply_wrap2<
+          shift_right_impl<
+              typename shift_right_tag<N1>::type
+            , typename shift_right_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, typename Shift, T n, Shift s >
+struct shift_right_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n >> s));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+        : aux::shift_right_wknd<
+              typename N::value_type
+            , typename S::value_type
+            , N::value
+            , S::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp
new file mode 100644
index 0000000..a5a48a8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp
@@ -0,0 +1,46 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< bool >
+struct template_arity_impl
+{
+    template< typename F > struct result_
+        : mpl::int_< -1 >
+    {
+    };
+};
+
+template<>
+struct template_arity_impl<true>
+{
+    template< typename F > struct result_
+        : F::arity
+    {
+    };
+};
+
+template< typename F >
+struct template_arity
+    : template_arity_impl< ::pdalboost::mpl::aux::has_rebind<F>::value >
+        ::template result_<F>
+{
+};
+
+template<>
+struct template_arity<int>
+    : mpl::int_< -1 >
+{
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/times.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/times.hpp
new file mode 100644
index 0000000..76d30c2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/times.hpp
@@ -0,0 +1,150 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value
+    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_)  = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value
+    >
+struct times_impl
+    : if_c<
+          ( tag1_ > tag2_ )
+        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct times_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct times_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct times_tag
+    : tag< T,na >
+{
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct times2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct times
+
+    : aux::msvc_eti_base< typename if_<
+
+          is_na<N3>
+        , times2< N1,N2 >
+        , times<
+              times2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+    >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , times
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct times2
+    : aux::msvc_eti_base< typename apply_wrap2<
+          times_impl<
+              typename times_tag<N1>::type
+            , typename times_tag<N2>::type
+            >
+        , N1
+        , N2
+        >::type >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct times_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 * n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::times_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp
new file mode 100644
index 0000000..d5bad07
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp
@@ -0,0 +1,109 @@
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl
+{
+    template< typename F, typename Args > struct apply;
+};
+
+template<> struct unpack_args_impl<0>
+{
+    template< typename F, typename Args > struct apply
+        : apply0<
+              F
+            >
+    {
+    };
+};
+
+template<> struct unpack_args_impl<1>
+{
+    template< typename F, typename Args > struct apply
+        : apply1<
+              F
+            , typename at_c< Args,0 >::type
+            >
+    {
+    };
+};
+
+template<> struct unpack_args_impl<2>
+{
+    template< typename F, typename Args > struct apply
+        : apply2<
+              F
+            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+            >
+    {
+    };
+};
+
+template<> struct unpack_args_impl<3>
+{
+    template< typename F, typename Args > struct apply
+        : apply3<
+              F
+            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+            , typename at_c< Args,2 >::type
+            >
+    {
+    };
+};
+
+template<> struct unpack_args_impl<4>
+{
+    template< typename F, typename Args > struct apply
+        : apply4<
+              F
+            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+            , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+            >
+    {
+    };
+};
+
+template<> struct unpack_args_impl<5>
+{
+    template< typename F, typename Args > struct apply
+        : apply5<
+              F
+            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+            , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+            , typename at_c< Args,4 >::type
+            >
+    {
+    };
+};
+
+}
+
+template<
+      typename F
+    >
+struct unpack_args
+{
+    template< typename Args > struct apply
+
+        : aux::unpack_args_impl< size<Args>::value >
+            ::template apply< F,Args >
+
+    {
+    };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/vector.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/vector.hpp
new file mode 100644
index 0000000..55fa508
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/vector.hpp
@@ -0,0 +1,556 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct vector_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct vector_chooser<0>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef vector0<
+             
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<1>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector1<
+              T0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<2>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector2<
+              T0, T1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<3>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector3<
+              T0, T1, T2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<4>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector4<
+              T0, T1, T2, T3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<5>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector5<
+              T0, T1, T2, T3, T4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<6>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector6<
+              T0, T1, T2, T3, T4, T5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<7>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector7<
+              T0, T1, T2, T3, T4, T5, T6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<8>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector8<
+              T0, T1, T2, T3, T4, T5, T6, T7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<9>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector9<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<10>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector10<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<11>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector11<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<12>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector12<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<13>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector13<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<14>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector14<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<15>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector15<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<16>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector16<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<17>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector17<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<18>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector18<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<19>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector19<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<20>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector20<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_vector_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_vector_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6, typename T7, typename T8, typename T9, typename T10
+    , typename T11, typename T12, typename T13, typename T14, typename T15
+    , typename T16, typename T17, typename T18, typename T19, typename T20
+    >
+struct vector_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_vector_arg<T1>::value + is_vector_arg<T2>::value 
+        + is_vector_arg<T3>::value + is_vector_arg<T4>::value 
+        + is_vector_arg<T5>::value + is_vector_arg<T6>::value 
+        + is_vector_arg<T7>::value + is_vector_arg<T8>::value 
+        + is_vector_arg<T9>::value + is_vector_arg<T10>::value 
+        + is_vector_arg<T11>::value + is_vector_arg<T12>::value 
+        + is_vector_arg<T13>::value + is_vector_arg<T14>::value 
+        + is_vector_arg<T15>::value + is_vector_arg<T16>::value 
+        + is_vector_arg<T17>::value + is_vector_arg<T18>::value 
+        + is_vector_arg<T19>::value + is_vector_arg<T20>::value
+        );
+
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct vector_impl
+{
+    typedef aux::vector_count_args<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        > arg_num_;
+
+    typedef typename aux::vector_chooser< arg_num_::value >
+        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct vector
+    : aux::vector_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type
+{
+    typedef typename aux::vector_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp
new file mode 100644
index 0000000..4448475
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp
@@ -0,0 +1,534 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct vector_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<0>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector0_c<
+              T
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<1>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector1_c<
+              T, T(C0)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<2>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector2_c<
+              T, T(C0), T(C1)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<3>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector3_c<
+              T, T(C0), T(C1), T(C2)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<4>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector4_c<
+              T, T(C0), T(C1), T(C2), T(C3)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<5>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector5_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<6>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector6_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<7>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector7_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<8>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector8_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<9>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector9_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<10>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector10_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<11>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector11_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<12>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector12_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<13>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector13_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<14>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector14_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<15>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector15_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<16>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector16_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<17>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector17_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<18>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector18_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<19>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector19_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<20>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector20_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_vector_c_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_vector_c_arg<LONG_MAX>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+    , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+    , long C16, long C17, long C18, long C19, long C20
+    >
+struct vector_c_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_vector_c_arg<C1>::value + is_vector_c_arg<C2>::value 
+        + is_vector_c_arg<C3>::value + is_vector_c_arg<C4>::value 
+        + is_vector_c_arg<C5>::value + is_vector_c_arg<C6>::value 
+        + is_vector_c_arg<C7>::value + is_vector_c_arg<C8>::value 
+        + is_vector_c_arg<C9>::value + is_vector_c_arg<C10>::value 
+        + is_vector_c_arg<C11>::value + is_vector_c_arg<C12>::value 
+        + is_vector_c_arg<C13>::value + is_vector_c_arg<C14>::value 
+        + is_vector_c_arg<C15>::value + is_vector_c_arg<C16>::value 
+        + is_vector_c_arg<C17>::value + is_vector_c_arg<C18>::value 
+        + is_vector_c_arg<C19>::value + is_vector_c_arg<C20>::value
+        );
+
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct vector_c_impl
+{
+    typedef aux::vector_c_count_args<
+          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        > arg_num_;
+
+    typedef typename aux::vector_c_chooser< arg_num_::value >
+        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct vector_c
+    : aux::vector_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type
+{
+    typedef typename aux::vector_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp
new file mode 100644
index 0000000..8d91863
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_backward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_backward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_backward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_backward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef typename prior<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_backward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_backward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_backward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp
new file mode 100644
index 0000000..1d13df3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_forward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_forward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_forward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_forward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef typename next<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_forward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_forward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_forward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/and.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/and.hpp
new file mode 100644
index 0000000..f55cb1c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/and.hpp
@@ -0,0 +1,69 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+    : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+    : and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , true_
+        >
+{
+};
+
+template<>
+struct and_impl<
+          true
+        , true_, true_, true_, true_
+        >
+    : true_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = true_, typename T4 = true_, typename T5 = true_
+    >
+struct and_
+
+    : aux::and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , and_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , and_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/apply.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/apply.hpp
new file mode 100644
index 0000000..eeec182
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/apply.hpp
@@ -0,0 +1,169 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct apply0
+
+    : apply_wrap0<
+          typename lambda<F>::type
+       
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          1
+        , apply0
+        , (F )
+        )
+};
+
+template<
+      typename F
+    >
+struct apply< F,na,na,na,na,na >
+    : apply0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply1
+
+    : apply_wrap1<
+          typename lambda<F>::type
+        , T1
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          2
+        , apply1
+        , (F, T1)
+        )
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply< F,T1,na,na,na,na >
+    : apply1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2
+
+    : apply_wrap2<
+          typename lambda<F>::type
+        , T1, T2
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , apply2
+        , (F, T1, T2)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply< F,T1,T2,na,na,na >
+    : apply2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3
+
+    : apply_wrap3<
+          typename lambda<F>::type
+        , T1, T2, T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , apply3
+        , (F, T1, T2, T3)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply< F,T1,T2,T3,na,na >
+    : apply3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4
+
+    : apply_wrap4<
+          typename lambda<F>::type
+        , T1, T2, T3, T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , apply4
+        , (F, T1, T2, T3, T4)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply< F,T1,T2,T3,T4,na >
+    : apply4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5
+
+    : apply_wrap5<
+          typename lambda<F>::type
+        , T1, T2, T3, T4, T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          6
+        , apply5
+        , (F, T1, T2, T3, T4, T5)
+        )
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply
+    : apply5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp
new file mode 100644
index 0000000..a309ea1
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp
@@ -0,0 +1,52 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na
+    >
+struct apply;
+
+template<
+      typename F
+    >
+struct apply0;
+
+template<
+      typename F, typename T1
+    >
+struct apply1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp
new file mode 100644
index 0000000..9340cb7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp
@@ -0,0 +1,456 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      int N, typename F
+    >
+struct apply_wrap_impl0;
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          0
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+/// since the defaults are "lost", we have to pass *something* even for nullary
+/// metafunction classes
+        na
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          1
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          2
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          3
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          4
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na, na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap_impl0<
+          5
+        , F
+       
+        >
+{
+    typedef typename F::template apply<
+         
+        na, na, na, na, na
+
+        > type;
+};
+
+template<
+      typename F
+    >
+struct apply_wrap0
+    : apply_wrap_impl0<
+          ::pdalboost::mpl::aux::arity< F,0 >::value
+        , F
+       
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1
+    >
+struct apply_wrap_impl1;
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          1
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          2
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          3
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          4
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na, na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap_impl1<
+          5
+        , F
+        , T1
+        >
+{
+    typedef typename F::template apply<
+          T1
+        , na, na, na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply_wrap1
+    : apply_wrap_impl1<
+          ::pdalboost::mpl::aux::arity< F,1 >::value
+        , F
+        , T1
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          2
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          3
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          4
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        , na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap_impl2<
+          5
+        , F
+        , T1, T2
+        >
+{
+    typedef typename F::template apply<
+          T1, T2
+
+        , na, na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply_wrap2
+    : apply_wrap_impl2<
+          ::pdalboost::mpl::aux::arity< F,2 >::value
+        , F
+        , T1, T2
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3<
+          3
+        , F
+        , T1, T2, T3
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3<
+          4
+        , F
+        , T1, T2, T3
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3
+
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap_impl3<
+          5
+        , F
+        , T1, T2, T3
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3
+
+        , na, na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply_wrap3
+    : apply_wrap_impl3<
+          ::pdalboost::mpl::aux::arity< F,3 >::value
+        , F
+        , T1, T2, T3
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap_impl4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap_impl4<
+          4
+        , F
+        , T1, T2, T3, T4
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3, T4
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap_impl4<
+          5
+        , F
+        , T1, T2, T3, T4
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3, T4
+
+        , na
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply_wrap4
+    : apply_wrap_impl4<
+          ::pdalboost::mpl::aux::arity< F,4 >::value
+        , F
+        , T1, T2, T3, T4
+        >::type
+{
+};
+
+template<
+      int N, typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap_impl5;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap_impl5<
+          5
+        , F
+        , T1, T2, T3, T4, T5
+        >
+{
+    typedef typename F::template apply<
+          T1, T2, T3, T4, T5
+
+        > type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply_wrap5
+    : apply_wrap_impl5<
+          ::pdalboost::mpl::aux::arity< F,5 >::value
+        , F
+        , T1, T2, T3, T4, T5
+        >::type
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/arg.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/arg.hpp
new file mode 100644
index 0000000..6f2f8a8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+    BOOST_STATIC_CONSTANT(int, value  = -1);
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<1>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 1);
+    typedef arg<2> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<2>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 2);
+    typedef arg<3> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U2 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<3>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 3);
+    typedef arg<4> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U3 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<4>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 4);
+    typedef arg<5> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U4 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<5>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 5);
+    typedef arg<6> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U5 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp
new file mode 100644
index 0000000..ef30acc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp
@@ -0,0 +1,440 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+    typedef bind< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F
+    >
+struct bind< F,na,na,na,na,na >
+    : bind0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1
+    >
+struct bind< F,T1,na,na,na,na >
+    : bind1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind< F,T1,T2,na,na,na >
+    : bind2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind< F,T1,T2,T3,na,na >
+    : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind< F,T1,T2,T3,T4,na >
+    : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind
+    : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+      typename Tag, typename T1, typename T2, typename T3
+    >
+struct bind3<
+      quote3< if_,Tag >
+    , T1, T2, T3
+    >
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef mpl::arg<1> n1;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef typename if_<
+              typename t1::type
+            , t2, t3
+            >::type f_;
+
+     public:
+        typedef typename f_::type type;
+    };
+};
+
+template<
+      template< typename T1, typename T2, typename T3 > class F, typename Tag
+    >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct eval_if;
+
+template<
+      typename Tag, typename T1, typename T2, typename T3
+    >
+struct bind3<
+      quote3< eval_if,Tag >
+    , T1, T2, T3
+    >
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef mpl::arg<1> n1;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef typename eval_if<
+              typename t1::type
+            , t2, t3
+            >::type f_;
+
+     public:
+        typedef typename f_::type type;
+    };
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/bind.hpp
new file mode 100644
index 0000000..14ed6a3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/bind.hpp
@@ -0,0 +1,561 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      typename T
+    , typename Arg
+    >
+struct replace_unnamed_arg
+{
+    typedef Arg next;
+    typedef T type;
+};
+
+template<
+      typename Arg
+    >
+struct replace_unnamed_arg< arg< -1 >, Arg >
+{
+    typedef typename Arg::next next;
+    typedef Arg type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+    typedef bind< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F
+    >
+struct bind< F,na,na,na,na,na >
+    : bind0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1
+    >
+struct bind< F,T1,na,na,na,na >
+    : bind1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind< F,T1,T2,na,na,na >
+    : bind2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind< F,T1,T2,T3,na,na >
+    : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind< F,T1,T2,T3,T4,na >
+    : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+        typedef aux::replace_unnamed_arg< T5,n5 > r5;
+        typedef typename r5::type a5;
+        typedef typename r5::next n6;
+        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+        ///
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind
+    : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+      typename Tag, typename T1, typename T2, typename T3
+    >
+struct bind3<
+      quote3< if_,Tag >
+    , T1, T2, T3
+    >
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef mpl::arg<1> n1;
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef typename if_<
+              typename t1::type
+            , t2, t3
+            >::type f_;
+
+     public:
+        typedef typename f_::type type;
+    };
+};
+
+template<
+      template< typename T1, typename T2, typename T3 > class F, typename Tag
+    >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct eval_if;
+
+template<
+      typename Tag, typename T1, typename T2, typename T3
+    >
+struct bind3<
+      quote3< eval_if,Tag >
+    , T1, T2, T3
+    >
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef mpl::arg<1> n1;
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef typename eval_if<
+              typename t1::type
+            , t2, t3
+            >::type f_;
+
+     public:
+        typedef typename f_::type type;
+    };
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp
new file mode 100644
index 0000000..439d82f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp
@@ -0,0 +1,52 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na
+    >
+struct bind;
+
+template<
+      typename F
+    >
+struct bind0;
+
+template<
+      typename F, typename T1
+    >
+struct bind1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp
new file mode 100644
index 0000000..cb583c9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitand_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitand_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitand_
+    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitand_< N1,N2,N3,N4,na >
+
+    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitand_< N1,N2,N3,na,na >
+
+    : bitand_< bitand_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitand_< N1,N2,na,na,na >
+    : bitand_impl<
+          typename bitand_tag<N1>::type
+        , typename bitand_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp
new file mode 100644
index 0000000..d161c4f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitor_
+    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitor_< N1,N2,N3,N4,na >
+
+    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitor_< N1,N2,N3,na,na >
+
+    : bitor_< bitor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitor_< N1,N2,na,na,na >
+    : bitor_impl<
+          typename bitor_tag<N1>::type
+        , typename bitor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp
new file mode 100644
index 0000000..b29bfd7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp
@@ -0,0 +1,147 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitxor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitxor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitxor_
+    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitxor_< N1,N2,N3,N4,na >
+
+    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitxor_< N1,N2,N3,na,na >
+
+    : bitxor_< bitxor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitxor_< N1,N2,na,na,na >
+    : bitxor_impl<
+          typename bitxor_tag<N1>::type
+        , typename bitxor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/deque.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/deque.hpp
new file mode 100644
index 0000000..bc99b03
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/deque.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct deque;
+
+template<
+     
+    >
+struct deque<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct deque<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct deque<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct deque<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct deque<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct deque<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct deque
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/divides.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/divides.hpp
new file mode 100644
index 0000000..e9032b0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/divides.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct divides_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct divides_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct divides
+    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , divides
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct divides< N1,N2,N3,N4,na >
+
+    : divides< divides< divides< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct divides< N1,N2,N3,na,na >
+
+    : divides< divides< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct divides< N1,N2,na,na,na >
+    : divides_impl<
+          typename divides_tag<N1>::type
+        , typename divides_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp
new file mode 100644
index 0000000..3855c94
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct equal_to
+
+    : equal_to_impl<
+          typename equal_to_tag<N1>::type
+        , typename equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp
new file mode 100644
index 0000000..728565c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl
+{
+    typedef fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,First,Last,State,ForwardOp >
+    : fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp
new file mode 100644
index 0000000..6acccb2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp
@@ -0,0 +1,554 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+   
+    >
+struct lambda
+{
+    typedef false_ is_le;
+    typedef T result_;
+    typedef T type;
+};
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>, Tag >
+{
+    typedef true_ is_le;
+    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+    typedef mpl::protect<result_> type;
+};
+
+template<
+      typename F
+    , typename Tag
+    >
+struct lambda<
+          bind0<F>
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind0<
+          F
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1
+{
+    typedef F<
+          typename L1::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1< true_,Tag,F,L1 >
+{
+    typedef bind1<
+          quote1< F,Tag >
+        , typename L1::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1 > class F
+    , typename T1
+    , typename Tag
+    >
+struct lambda<
+          F<T1>
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef typename l1::is_le is_le1;
+    typedef typename aux::lambda_or<
+          is_le1::value
+        >::type is_le;
+
+    typedef aux::le_result1<
+          is_le, Tag, F, l1
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1
+    , typename Tag
+    >
+struct lambda<
+          bind1< F,T1 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind1<
+          F
+        , T1
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2
+{
+    typedef F<
+          typename L1::type, typename L2::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+    typedef bind2<
+          quote2< F,Tag >
+        , typename L1::result_, typename L2::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value
+        >::type is_le;
+
+    typedef aux::le_result2<
+          is_le, Tag, F, l1, l2
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          bind2< F,T1,T2 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind2<
+          F
+        , T1, T2
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+    typedef bind3<
+          quote3< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value
+        >::type is_le;
+
+    typedef aux::le_result3<
+          is_le, Tag, F, l1, l2, l3
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          bind3< F,T1,T2,T3 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind3<
+          F
+        , T1, T2, T3
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+    typedef bind4<
+          quote4< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        >::type is_le;
+
+    typedef aux::le_result4<
+          is_le, Tag, F, l1, l2, l3, l4
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          bind4< F,T1,T2,T3,T4 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind4<
+          F
+        , T1, T2, T3, T4
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type, typename L5::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+    typedef bind5<
+          quote5< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_, typename L5::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    typedef lambda< T5,Tag > l5;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    typedef typename l5::is_le is_le5;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        , is_le5::value
+        >::type is_le;
+
+    typedef aux::le_result5<
+          is_le, Tag, F, l1, l2, l3, l4, l5
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind5< F,T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind5<
+          F
+        , T1, T2, T3, T4, T5
+        > result_;
+
+    typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>, Tag >
+{
+    typedef false_ is_le;
+    typedef mpl::protect<T> result_;
+    typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind< F,T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind< F,T1,T2,T3,T4,T5 > result_;
+    typedef result_ type;
+};
+
+/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
+
+template<
+      typename F, typename Tag1, typename Tag2
+    >
+struct lambda<
+          lambda< F,Tag1 >
+        , Tag2
+        >
+{
+    typedef lambda< F,Tag2 > l1;
+    typedef lambda< Tag1,Tag2 > l2;
+    typedef typename l1::is_le is_le;
+    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/greater.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/greater.hpp
new file mode 100644
index 0000000..afebdd6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/greater.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater
+
+    : greater_impl<
+          typename greater_tag<N1>::type
+        , typename greater_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp
new file mode 100644
index 0000000..dd3bd5a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater_equal
+
+    : greater_equal_impl<
+          typename greater_equal_tag<N1>::type
+        , typename greater_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp
new file mode 100644
index 0000000..90eaeb2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp
@@ -0,0 +1,141 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    >
+struct inherit2
+    : T1, T2
+{
+    typedef inherit2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+template< typename T1 >
+struct inherit2< T1,empty_base >
+{
+    typedef T1 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
+};
+
+template< typename T2 >
+struct inherit2< empty_base,T2 >
+{
+    typedef T2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
+};
+
+template<>
+struct inherit2< empty_base,empty_base >
+{
+    typedef empty_base type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na
+    >
+struct inherit3
+    : inherit2<
+          typename inherit2<
+              T1, T2
+            >::type
+        , T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , inherit3
+        , ( T1, T2, T3)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    >
+struct inherit4
+    : inherit2<
+          typename inherit3<
+              T1, T2, T3
+            >::type
+        , T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , inherit4
+        , ( T1, T2, T3, T4)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    , typename T5 = na
+    >
+struct inherit5
+    : inherit2<
+          typename inherit4<
+              T1, T2, T3, T4
+            >::type
+        , T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , inherit5
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+      typename T1 = empty_base, typename T2 = empty_base
+    , typename T3 = empty_base, typename T4 = empty_base
+    , typename T5 = empty_base
+    >
+struct inherit
+    : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+    template<
+
+          typename T1 = empty_base, typename T2 = empty_base
+        , typename T3 = empty_base, typename T4 = empty_base
+        , typename T5 = empty_base
+
+        >
+    struct apply
+        : inherit< T1,T2,T3,T4,T5 >
+    {
+    };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp
new file mode 100644
index 0000000..74c0cc6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename Iterator, typename State >
+struct iter_fold_if_null_step
+{
+    typedef State state;
+    typedef Iterator iterator;
+};
+
+template< bool >
+struct iter_fold_if_step_impl
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef typename apply2< StateOp,State,Iterator >::type state;
+        typedef typename IteratorOp::type iterator;
+    };
+};
+
+template<>
+struct iter_fold_if_step_impl<false>
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef State state;
+        typedef Iterator iterator;
+    };
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_forward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename BackwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_backward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename ForwardPredicate
+    , typename BackwardOp
+    , typename BackwardPredicate
+    >
+struct iter_fold_if_impl
+{
+ private:
+    typedef iter_fold_if_null_step< Iterator,State > forward_step0;
+    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+    
+
+    typedef typename if_<
+          typename forward_step4::not_last
+        , iter_fold_if_impl<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            , ForwardOp
+            , ForwardPredicate
+            , BackwardOp
+            , BackwardPredicate
+            >
+        , iter_fold_if_null_step<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            >
+        >::type backward_step4;
+
+    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+    
+
+ public:
+    typedef typename backward_step0::state state;
+    typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp
new file mode 100644
index 0000000..78329b3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl
+{
+    typedef iter_fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef iter_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,First,Last,State,ForwardOp >
+    : iter_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp
new file mode 100644
index 0000000..5cb26dc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp
@@ -0,0 +1,229 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+    template< typename T, typename Tag, typename Protect > struct result_
+    {
+        typedef T type;
+        typedef is_placeholder<T> is_le;
+    };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef typename l1::is_le is_le1;
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+            > is_le;
+
+        typedef bind1<
+              typename F::rebind
+            , typename l1::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+            > is_le;
+
+        typedef bind2<
+              typename F::rebind
+            , typename l1::type, typename l2::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+            > is_le;
+
+        typedef bind3<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+            > is_le;
+
+        typedef bind4<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        typedef lambda< typename F::arg5, Tag, false_ > l5;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        typedef typename l5::is_le is_le5;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+            > is_le;
+
+        typedef bind5<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type, typename l5::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Protect
+    >
+struct lambda
+{
+    /// Metafunction forwarding confuses MSVC 6.x
+    typedef typename aux::template_arity<T>::type arity_;
+    typedef typename aux::lambda_impl<arity_>
+        ::template result_< T,Tag,Protect > l_;
+
+    typedef typename l_::type type;
+    typedef typename l_::is_le is_le;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/less.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/less.hpp
new file mode 100644
index 0000000..e70710d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/less.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less
+
+    : less_impl<
+          typename less_tag<N1>::type
+        , typename less_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp
new file mode 100644
index 0000000..dd11112
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less_equal
+
+    : less_equal_impl<
+          typename less_equal_tag<N1>::type
+        , typename less_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/list.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/list.hpp
new file mode 100644
index 0000000..cdef853
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/list.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct list;
+
+template<
+     
+    >
+struct list<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list0<  >
+{
+    typedef list0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct list<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list1<T0>
+{
+    typedef typename list1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct list<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list2< T0,T1 >
+{
+    typedef typename list2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct list<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list3< T0,T1,T2 >
+{
+    typedef typename list3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct list<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list4< T0,T1,T2,T3 >
+{
+    typedef typename list4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct list<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list5< T0,T1,T2,T3,T4 >
+{
+    typedef typename list5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : list15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : list16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : list17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : list18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : list19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct list
+    : list20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp
new file mode 100644
index 0000000..8194c09
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct list_c;
+
+template<
+      typename T
+    >
+struct list_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list0_c<T>
+{
+    typedef typename list0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct list_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list1_c< T,C0 >
+{
+    typedef typename list1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct list_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list2_c< T,C0,C1 >
+{
+    typedef typename list2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct list_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list3_c< T,C0,C1,C2 >
+{
+    typedef typename list3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct list_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : list18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : list19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct list_c
+    : list20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/map.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/map.hpp
new file mode 100644
index 0000000..54c9678
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/map.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct map;
+
+template<
+     
+    >
+struct map<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map0<  >
+{
+    typedef map0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct map<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map1<T0>
+{
+    typedef typename map1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct map<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map2< T0,T1 >
+{
+    typedef typename map2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct map<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map3< T0,T1,T2 >
+{
+    typedef typename map3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct map<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map4< T0,T1,T2,T3 >
+{
+    typedef typename map4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct map<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map5< T0,T1,T2,T3,T4 >
+{
+    typedef typename map5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : map15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : map16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : map17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : map18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : map19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct map
+    : map20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/minus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/minus.hpp
new file mode 100644
index 0000000..1a434ea
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/minus.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct minus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct minus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct minus
+    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , minus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct minus< N1,N2,N3,N4,na >
+
+    : minus< minus< minus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct minus< N1,N2,N3,na,na >
+
+    : minus< minus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct minus< N1,N2,na,na,na >
+    : minus_impl<
+          typename minus_tag<N1>::type
+        , typename minus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp
new file mode 100644
index 0000000..06498ef
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp
@@ -0,0 +1,101 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct modulus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct modulus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct modulus
+
+    : modulus_impl<
+          typename modulus_tag<N1>::type
+        , typename modulus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp
new file mode 100644
index 0000000..2ee61b8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct not_equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct not_equal_to
+
+    : not_equal_to_impl<
+          typename not_equal_to_tag<N1>::type
+        , typename not_equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/or.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/or.hpp
new file mode 100644
index 0000000..f0c868d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/or.hpp
@@ -0,0 +1,69 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct or_impl
+    : true_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct or_impl< false,T1,T2,T3,T4 >
+    : or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , false_
+        >
+{
+};
+
+template<>
+struct or_impl<
+          false
+        , false_, false_, false_, false_
+        >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = false_, typename T4 = false_, typename T5 = false_
+    >
+struct or_
+
+    : aux::or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , or_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , or_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp
new file mode 100644
index 0000000..0b0cc25
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#' 
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/plus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/plus.hpp
new file mode 100644
index 0000000..8468c28
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/plus.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct plus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct plus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct plus
+    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , plus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct plus< N1,N2,N3,N4,na >
+
+    : plus< plus< plus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct plus< N1,N2,N3,na,na >
+
+    : plus< plus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct plus< N1,N2,na,na,na >
+    : plus_impl<
+          typename plus_tag<N1>::type
+        , typename plus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/quote.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/quote.hpp
new file mode 100644
index 0000000..1ef9aa3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/quote.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/quote.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template< typename T, bool has_type_ >
+struct quote_impl
+    : T
+{
+};
+
+template< typename T >
+struct quote_impl< T,false >
+{
+    typedef T type;
+};
+
+template<
+      template< typename P1 > class F
+    , typename Tag = void_
+    >
+struct quote1
+{
+    template< typename U1 > struct apply
+
+        : quote_impl<
+              F<U1>
+            , aux::has_type< F<U1> >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename Tag = void_
+    >
+struct quote2
+{
+    template< typename U1, typename U2 > struct apply
+
+        : quote_impl<
+              F< U1,U2 >
+            , aux::has_type< F< U1,U2 > >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename Tag = void_
+    >
+struct quote3
+{
+    template< typename U1, typename U2, typename U3 > struct apply
+
+        : quote_impl<
+              F< U1,U2,U3 >
+            , aux::has_type< F< U1,U2,U3 > >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename Tag = void_
+    >
+struct quote4
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4
+        >
+    struct apply
+
+        : quote_impl<
+              F< U1,U2,U3,U4 >
+            , aux::has_type< F< U1,U2,U3,U4 > >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename Tag = void_
+    >
+struct quote5
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4
+        , typename U5
+        >
+    struct apply
+
+        : quote_impl<
+              F< U1,U2,U3,U4,U5 >
+            , aux::has_type< F< U1,U2,U3,U4,U5 > >::value
+            >
+
+    {
+    };
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp
new file mode 100644
index 0000000..cf80c4b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef fwd_state0 bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef fwd_state1 bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef fwd_state2 bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef fwd_state3 bkwd_state3;
+    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef fwd_state4 bkwd_state4;
+    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter4 iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef reverse_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , iter4
+        , Last
+        , fwd_state4
+        , BackwardOp
+        , ForwardOp
+        > nested_chunk;
+
+    typedef typename nested_chunk::state bkwd_state4;
+    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef reverse_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , typename deref<First>::type
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp
new file mode 100644
index 0000000..037c15e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef fwd_state0 bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef fwd_state1 bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef fwd_state2 bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef fwd_state3 bkwd_state3;
+    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef fwd_state4 bkwd_state4;
+    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter4 iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef reverse_iter_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , iter4
+        , Last
+        , fwd_state4
+        , BackwardOp
+        , ForwardOp
+        > nested_chunk;
+
+    typedef typename nested_chunk::state bkwd_state4;
+    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef reverse_iter_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , First
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/set.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/set.hpp
new file mode 100644
index 0000000..7ab0242
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/set.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct set;
+
+template<
+     
+    >
+struct set<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set0<  >
+{
+    typedef set0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct set<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set1<T0>
+{
+    typedef typename set1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct set<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set2< T0,T1 >
+{
+    typedef typename set2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct set<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set3< T0,T1,T2 >
+{
+    typedef typename set3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct set<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set4< T0,T1,T2,T3 >
+{
+    typedef typename set4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct set<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set5< T0,T1,T2,T3,T4 >
+{
+    typedef typename set5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : set15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : set16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : set17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : set18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : set19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct set
+    : set20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp
new file mode 100644
index 0000000..337e930
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct set_c;
+
+template<
+      typename T
+    >
+struct set_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set0_c<T>
+{
+    typedef typename set0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct set_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set1_c< T,C0 >
+{
+    typedef typename set1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct set_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set2_c< T,C0,C1 >
+{
+    typedef typename set2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct set_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set3_c< T,C0,C1,C2 >
+{
+    typedef typename set3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct set_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : set18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : set19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct set_c
+    : set20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp
new file mode 100644
index 0000000..17bcfc6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_left_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_left_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_left
+
+    : shift_left_impl<
+          typename shift_left_tag<N1>::type
+        , typename shift_left_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  << BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp
new file mode 100644
index 0000000..1c29ee0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_right_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_right_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_right
+
+    : shift_right_impl<
+          typename shift_right_tag<N1>::type
+        , typename shift_right_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp
new file mode 100644
index 0000000..a23fc23
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp
@@ -0,0 +1,11 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/times.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/times.hpp
new file mode 100644
index 0000000..50bca2a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/times.hpp
@@ -0,0 +1,146 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct times_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct times_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct times
+    : times< times< times< times< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , times
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct times< N1,N2,N3,N4,na >
+
+    : times< times< times< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct times< N1,N2,N3,na,na >
+
+    : times< times< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct times< N1,N2,na,na,na >
+    : times_impl<
+          typename times_tag<N1>::type
+        , typename times_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp
new file mode 100644
index 0000000..2d78b38
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+
+template< typename F, typename Args >
+struct unpack_args_impl< 0,F,Args >
+    : apply0<
+          F
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 1,F,Args >
+    : apply1<
+          F
+        , typename at_c< Args,0 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 2,F,Args >
+    : apply2<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 3,F,Args >
+    : apply3<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 4,F,Args >
+    : apply4<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 5,F,Args >
+    : apply5<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        , typename at_c< Args,4 >::type
+        >
+{
+};
+
+}
+
+template<
+      typename F
+    >
+struct unpack_args
+{
+    template< typename Args > struct apply
+
+        : aux::unpack_args_impl< size<Args>::value,F, Args >
+
+    {
+    };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/vector.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/vector.hpp
new file mode 100644
index 0000000..809efca
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/vector.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct vector;
+
+template<
+     
+    >
+struct vector<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct vector<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct vector<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct vector<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct vector<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct vector<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct vector
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp
new file mode 100644
index 0000000..323872c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp
@@ -0,0 +1,309 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct vector_c;
+
+template<
+      typename T
+    >
+struct vector_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector0_c<T>
+{
+    typedef typename vector0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct vector_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector1_c< T, T(C0) >
+{
+    typedef typename vector1_c< T, T(C0) >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct vector_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector2_c< T, T(C0), T(C1) >
+{
+    typedef typename vector2_c< T, T(C0), T(C1) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct vector_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector3_c< T, T(C0), T(C1), T(C2) >
+{
+    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >
+{
+    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >
+{
+    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >
+{
+    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >
+{
+    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >
+{
+    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >
+{
+    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >
+{
+    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >
+{
+    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >
+{
+    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >
+{
+    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >
+{
+    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >
+{
+    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >
+{
+    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >
+{
+    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >
+{
+    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >
+{
+    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct vector_c
+    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >
+{
+    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp
new file mode 100644
index 0000000..8d91863
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_backward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_backward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_backward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_backward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef typename prior<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_backward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_backward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_backward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp
new file mode 100644
index 0000000..1d13df3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_forward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_forward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_forward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_forward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef typename next<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_forward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_forward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_forward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/and.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/and.hpp
new file mode 100644
index 0000000..6ca5b2b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/and.hpp
@@ -0,0 +1,73 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< bool C_ > struct and_impl
+{
+    template<
+          typename T1, typename T2, typename T3, typename T4
+        >
+    struct result_
+        : false_
+    {
+    };
+};
+
+template<> struct and_impl<true>
+{
+    template<
+          typename T1, typename T2, typename T3, typename T4
+        >
+    struct result_
+        : and_impl<
+              BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+            >::template result_< T2,T3,T4,true_ >
+    {
+    };
+};
+
+template<>
+struct and_impl<true>
+    ::result_< true_,true_,true_,true_ >
+        : true_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = true_, typename T4 = true_, typename T5 = true_
+    >
+struct and_
+
+    : aux::and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        >::template result_< T2,T3,T4,T5 >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , and_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , and_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp
new file mode 100644
index 0000000..09dc846
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp
@@ -0,0 +1,268 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct apply0
+
+    : apply_wrap0<
+          typename lambda<F>::type
+       
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          1
+        , apply0
+        , (F )
+        )
+};
+
+namespace aux {
+
+template<>
+struct apply_chooser<0>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef apply0<
+              F
+            > type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename F, typename T1
+    >
+struct apply1
+
+    : apply_wrap1<
+          typename lambda<F>::type
+        , T1
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          2
+        , apply1
+        , (F, T1)
+        )
+};
+
+namespace aux {
+
+template<>
+struct apply_chooser<1>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef apply1<
+              F, T1
+            > type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2
+
+    : apply_wrap2<
+          typename lambda<F>::type
+        , T1, T2
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , apply2
+        , (F, T1, T2)
+        )
+};
+
+namespace aux {
+
+template<>
+struct apply_chooser<2>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef apply2<
+              F, T1, T2
+            > type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3
+
+    : apply_wrap3<
+          typename lambda<F>::type
+        , T1, T2, T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , apply3
+        , (F, T1, T2, T3)
+        )
+};
+
+namespace aux {
+
+template<>
+struct apply_chooser<3>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef apply3<
+              F, T1, T2, T3
+            > type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4
+
+    : apply_wrap4<
+          typename lambda<F>::type
+        , T1, T2, T3, T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , apply4
+        , (F, T1, T2, T3, T4)
+        )
+};
+
+namespace aux {
+
+template<>
+struct apply_chooser<4>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef apply4<
+              F, T1, T2, T3, T4
+            > type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5
+
+    : apply_wrap5<
+          typename lambda<F>::type
+        , T1, T2, T3, T4, T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          6
+        , apply5
+        , (F, T1, T2, T3, T4, T5)
+        )
+};
+
+namespace aux {
+
+template<>
+struct apply_chooser<5>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef apply5<
+              F, T1, T2, T3, T4, T5
+            > type;
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_apply_arg
+{
+    static bool const value  = true;
+};
+
+template<>
+struct is_apply_arg<na>
+{
+    static bool const value  = false;
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    >
+struct apply_count_args
+{
+    static int const value  = is_apply_arg<T1>::value + is_apply_arg<T2>::value + is_apply_arg<T3>::value + is_apply_arg<T4>::value + is_apply_arg<T5>::value;
+
+};
+
+}
+
+template<
+      typename F, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na
+    >
+struct apply
+    : aux::apply_chooser<
+          aux::apply_count_args< T1,T2,T3,T4,T5 >::value
+        >::template result_< F,T1,T2,T3,T4,T5 >::type
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp
new file mode 100644
index 0000000..8dc5337
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp
@@ -0,0 +1,50 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< BOOST_AUX_NTTP_DECL(int, arity_) > struct apply_chooser;
+}
+
+template<
+      typename F
+    >
+struct apply0;
+
+template<
+      typename F, typename T1
+    >
+struct apply1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp
new file mode 100644
index 0000000..29c67c5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp
@@ -0,0 +1,78 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+
+    , typename has_apply_ = typename aux::has_apply<F>::type
+
+    >
+struct apply_wrap0
+
+    : F::template apply<  >
+{
+};
+
+template<
+      typename F, typename T1
+
+    >
+struct apply_wrap1
+
+    : F::template apply<T1>
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+
+    >
+struct apply_wrap2
+
+    : F::template apply< T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+
+    >
+struct apply_wrap3
+
+    : F::template apply< T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+
+    >
+struct apply_wrap4
+
+    : F::template apply< T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+
+    >
+struct apply_wrap5
+
+    : F::template apply< T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp
new file mode 100644
index 0000000..6f2f8a8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+    BOOST_STATIC_CONSTANT(int, value  = -1);
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<1>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 1);
+    typedef arg<2> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<2>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 2);
+    typedef arg<3> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U2 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<3>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 3);
+    typedef arg<4> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U3 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<4>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 4);
+    typedef arg<5> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U4 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<5>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 5);
+    typedef arg<6> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U5 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp
new file mode 100644
index 0000000..1bfb2c8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp
@@ -0,0 +1,486 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< bool >
+struct resolve_arg_impl
+{
+    template<
+          typename T, typename U1, typename U2, typename U3
+        , typename U4, typename U5
+        >
+    struct result_
+    {
+        typedef T type;
+    };
+};
+
+template<>
+struct resolve_arg_impl<true>
+{
+    template<
+          typename T, typename U1, typename U2, typename U3
+        , typename U4, typename U5
+        >
+    struct result_
+    {
+        typedef typename apply_wrap5<
+              T
+            , U1, U2, U3, U4, U5
+            >::type type;
+    };
+};
+
+template< typename T > struct is_bind_template;
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+    : resolve_arg_impl< is_bind_template<T>::value >
+            ::template result_< T,U1,U2,U3,U4,U5 >
+{
+};
+
+template< int arity_ > struct bind_chooser;
+
+aux::no_tag is_bind_helper(...);
+template< typename T > aux::no_tag is_bind_helper(protect<T>*);
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+aux::yes_tag is_bind_helper(bind< F,T1,T2,T3,T4,T5 >*);
+
+template< int N >
+aux::yes_tag is_bind_helper(arg<N>*);
+
+template< bool is_ref_  = true >
+struct is_bind_template_impl
+{
+    template< typename T > struct result_
+    {
+        BOOST_STATIC_CONSTANT(bool, value  = false);
+    };
+};
+
+template<>
+struct is_bind_template_impl<false>
+{
+    template< typename T > struct result_
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+              sizeof(aux::is_bind_helper(static_cast<T*>(0)))
+                == sizeof(aux::yes_tag)
+            );
+    };
+};
+
+template< typename T > struct is_bind_template
+    : is_bind_template_impl< ::pdalboost::detail::is_reference_impl<T>::value >
+        ::template result_<T>
+{
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F
+    >
+aux::yes_tag
+is_bind_helper(bind0<F>*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+namespace aux {
+
+template<>
+struct bind_chooser<0>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef bind0<F> type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1
+    >
+aux::yes_tag
+is_bind_helper(bind1< F,T1 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+namespace aux {
+
+template<>
+struct bind_chooser<1>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef bind1< F,T1 > type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2
+    >
+aux::yes_tag
+is_bind_helper(bind2< F,T1,T2 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+namespace aux {
+
+template<>
+struct bind_chooser<2>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef bind2< F,T1,T2 > type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+aux::yes_tag
+is_bind_helper(bind3< F,T1,T2,T3 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+namespace aux {
+
+template<>
+struct bind_chooser<3>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef bind3< F,T1,T2,T3 > type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+aux::yes_tag
+is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+namespace aux {
+
+template<>
+struct bind_chooser<4>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef bind4< F,T1,T2,T3,T4 > type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+aux::yes_tag
+is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+namespace aux {
+
+template<>
+struct bind_chooser<5>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef bind5< F,T1,T2,T3,T4,T5 > type;
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_bind_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_bind_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    >
+struct bind_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_bind_arg<T1>::value + is_bind_arg<T2>::value 
+        + is_bind_arg<T3>::value + is_bind_arg<T4>::value 
+        + is_bind_arg<T5>::value
+        );
+
+};
+
+}
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind
+    : aux::bind_chooser<
+          aux::bind_count_args< T1,T2,T3,T4,T5 >::value
+        >::template result_< F,T1,T2,T3,T4,T5 >::type
+{
+};
+
+BOOST_MPL_AUX_ARITY_SPEC(
+      6
+    , bind
+    )
+
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(
+      6
+    , bind
+    )
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp
new file mode 100644
index 0000000..ad2bdc3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp
@@ -0,0 +1,590 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< bool >
+struct resolve_arg_impl
+{
+    template<
+          typename T, typename U1, typename U2, typename U3
+        , typename U4, typename U5
+        >
+    struct result_
+    {
+        typedef T type;
+    };
+};
+
+template<>
+struct resolve_arg_impl<true>
+{
+    template<
+          typename T, typename U1, typename U2, typename U3
+        , typename U4, typename U5
+        >
+    struct result_
+    {
+        typedef typename apply_wrap5<
+              T
+            , U1, U2, U3, U4, U5
+            >::type type;
+    };
+};
+
+template< typename T > struct is_bind_template;
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+    : resolve_arg_impl< is_bind_template<T>::value >
+            ::template result_< T,U1,U2,U3,U4,U5 >
+{
+};
+
+template< typename T >
+struct replace_unnamed_arg_impl
+{
+    template< typename Arg > struct result_
+    {
+        typedef Arg next;
+        typedef T type;
+    };
+};
+
+template<>
+struct replace_unnamed_arg_impl< arg< -1 > >
+{
+    template< typename Arg > struct result_
+    {
+        typedef typename next<Arg>::type next;
+        typedef Arg type;
+    };
+};
+
+template< typename T, typename Arg >
+struct replace_unnamed_arg
+    : replace_unnamed_arg_impl<T>::template result_<Arg>
+{
+};
+
+template< int arity_ > struct bind_chooser;
+
+aux::no_tag is_bind_helper(...);
+template< typename T > aux::no_tag is_bind_helper(protect<T>*);
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+aux::yes_tag is_bind_helper(bind< F,T1,T2,T3,T4,T5 >*);
+
+template< int N >
+aux::yes_tag is_bind_helper(arg<N>*);
+
+template< bool is_ref_  = true >
+struct is_bind_template_impl
+{
+    template< typename T > struct result_
+    {
+        BOOST_STATIC_CONSTANT(bool, value  = false);
+    };
+};
+
+template<>
+struct is_bind_template_impl<false>
+{
+    template< typename T > struct result_
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+              sizeof(aux::is_bind_helper(static_cast<T*>(0)))
+                == sizeof(aux::yes_tag)
+            );
+    };
+};
+
+template< typename T > struct is_bind_template
+    : is_bind_template_impl< ::pdalboost::detail::is_reference_impl<T>::value >
+        ::template result_<T>
+{
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F
+    >
+aux::yes_tag
+is_bind_helper(bind0<F>*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+namespace aux {
+
+template<>
+struct bind_chooser<0>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef bind0<F> type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1
+    >
+aux::yes_tag
+is_bind_helper(bind1< F,T1 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+namespace aux {
+
+template<>
+struct bind_chooser<1>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef bind1< F,T1 > type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2
+    >
+aux::yes_tag
+is_bind_helper(bind2< F,T1,T2 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+namespace aux {
+
+template<>
+struct bind_chooser<2>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef bind2< F,T1,T2 > type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+aux::yes_tag
+is_bind_helper(bind3< F,T1,T2,T3 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+namespace aux {
+
+template<>
+struct bind_chooser<3>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef bind3< F,T1,T2,T3 > type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+aux::yes_tag
+is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+namespace aux {
+
+template<>
+struct bind_chooser<4>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef bind4< F,T1,T2,T3,T4 > type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+        typedef aux::replace_unnamed_arg< T5,n5 > r5;
+        typedef typename r5::type a5;
+        typedef typename r5::next n6;
+        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+        ///
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+aux::yes_tag
+is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+namespace aux {
+
+template<>
+struct bind_chooser<5>
+{
+    template<
+          typename F, typename T1, typename T2, typename T3, typename T4
+        , typename T5
+        >
+    struct result_
+    {
+        typedef bind5< F,T1,T2,T3,T4,T5 > type;
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_bind_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_bind_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    >
+struct bind_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_bind_arg<T1>::value + is_bind_arg<T2>::value 
+        + is_bind_arg<T3>::value + is_bind_arg<T4>::value 
+        + is_bind_arg<T5>::value
+        );
+
+};
+
+}
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind
+    : aux::bind_chooser<
+          aux::bind_count_args< T1,T2,T3,T4,T5 >::value
+        >::template result_< F,T1,T2,T3,T4,T5 >::type
+{
+};
+
+BOOST_MPL_AUX_ARITY_SPEC(
+      6
+    , bind
+    )
+
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(
+      6
+    , bind
+    )
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp
new file mode 100644
index 0000000..439d82f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp
@@ -0,0 +1,52 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na
+    >
+struct bind;
+
+template<
+      typename F
+    >
+struct bind0;
+
+template<
+      typename F, typename T1
+    >
+struct bind1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp
new file mode 100644
index 0000000..2774bae
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp
@@ -0,0 +1,134 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitand_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitand_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitand_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitand_tag
+{
+    typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct bitand_2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitand_
+
+    : if_<
+
+          is_na<N3>
+        , bitand_2< N1,N2 >
+        , bitand_<
+              bitand_2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct bitand_2
+    : bitand_impl<
+          typename bitand_tag<N1>::type
+        , typename bitand_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitand_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp
new file mode 100644
index 0000000..8691689
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp
@@ -0,0 +1,134 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitor_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitor_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitor_tag
+{
+    typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct bitor_2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitor_
+
+    : if_<
+
+          is_na<N3>
+        , bitor_2< N1,N2 >
+        , bitor_<
+              bitor_2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct bitor_2
+    : bitor_impl<
+          typename bitor_tag<N1>::type
+        , typename bitor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitor_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp
new file mode 100644
index 0000000..ca21f5c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp
@@ -0,0 +1,134 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitxor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitxor_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct bitxor_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitxor_tag
+{
+    typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct bitxor_2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitxor_
+
+    : if_<
+
+          is_na<N3>
+        , bitxor_2< N1,N2 >
+        , bitxor_<
+              bitxor_2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct bitxor_2
+    : bitxor_impl<
+          typename bitxor_tag<N1>::type
+        , typename bitxor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, bitxor_2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp
new file mode 100644
index 0000000..1fd4b18
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp
@@ -0,0 +1,556 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct deque_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct deque_chooser<0>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef vector0<
+             
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<1>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector1<
+              T0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<2>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector2<
+              T0, T1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<3>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector3<
+              T0, T1, T2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<4>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector4<
+              T0, T1, T2, T3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<5>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector5<
+              T0, T1, T2, T3, T4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<6>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector6<
+              T0, T1, T2, T3, T4, T5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<7>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector7<
+              T0, T1, T2, T3, T4, T5, T6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<8>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector8<
+              T0, T1, T2, T3, T4, T5, T6, T7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<9>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector9<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<10>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector10<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<11>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector11<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<12>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector12<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<13>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector13<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<14>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector14<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<15>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector15<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<16>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector16<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<17>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector17<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<18>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector18<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<19>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector19<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct deque_chooser<20>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector20<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_deque_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_deque_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6, typename T7, typename T8, typename T9, typename T10
+    , typename T11, typename T12, typename T13, typename T14, typename T15
+    , typename T16, typename T17, typename T18, typename T19, typename T20
+    >
+struct deque_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_deque_arg<T1>::value + is_deque_arg<T2>::value 
+        + is_deque_arg<T3>::value + is_deque_arg<T4>::value 
+        + is_deque_arg<T5>::value + is_deque_arg<T6>::value 
+        + is_deque_arg<T7>::value + is_deque_arg<T8>::value 
+        + is_deque_arg<T9>::value + is_deque_arg<T10>::value 
+        + is_deque_arg<T11>::value + is_deque_arg<T12>::value 
+        + is_deque_arg<T13>::value + is_deque_arg<T14>::value 
+        + is_deque_arg<T15>::value + is_deque_arg<T16>::value 
+        + is_deque_arg<T17>::value + is_deque_arg<T18>::value 
+        + is_deque_arg<T19>::value + is_deque_arg<T20>::value
+        );
+
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct deque_impl
+{
+    typedef aux::deque_count_args<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        > arg_num_;
+
+    typedef typename aux::deque_chooser< arg_num_::value >
+        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct deque
+    : aux::deque_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type
+{
+    typedef typename aux::deque_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp
new file mode 100644
index 0000000..31711bf
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp
@@ -0,0 +1,133 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct divides_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct divides_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct divides_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct divides_tag
+{
+    typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct divides2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct divides
+
+    : if_<
+
+          is_na<N3>
+        , divides2< N1,N2 >
+        , divides<
+              divides2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , divides
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct divides2
+    : divides_impl<
+          typename divides_tag<N1>::type
+        , typename divides_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, divides2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp
new file mode 100644
index 0000000..d151a78
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct equal_to_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct equal_to_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct equal_to
+
+    : equal_to_impl<
+          typename equal_to_tag<N1>::type
+        , typename equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp
new file mode 100644
index 0000000..b34a6f6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp
@@ -0,0 +1,245 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl;
+
+template< int N >
+struct fold_chunk;
+
+template<> struct fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef state0 state;
+        typedef iter0 iterator;
+    };
+};
+
+template<> struct fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef state1 state;
+        typedef iter1 iterator;
+    };
+};
+
+template<> struct fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef state2 state;
+        typedef iter2 iterator;
+    };
+};
+
+template<> struct fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef state3 state;
+        typedef iter3 iterator;
+    };
+};
+
+template<> struct fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef state4 state;
+        typedef iter4 iterator;
+    };
+};
+
+template< int N >
+struct fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef fold_impl<
+              4
+            , First
+            , Last
+            , State
+            , ForwardOp
+            > chunk_;
+
+        typedef fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , typename chunk_::iterator
+            , Last
+            , typename chunk_::state
+            , ForwardOp
+            > res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , fold_null_step< Last,State >
+            , fold_step< First,Last,State,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_step
+{
+    typedef fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , ForwardOp
+        > chunk_;
+
+    typedef typename chunk_::state state;
+    typedef typename chunk_::iterator iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl
+    : fold_chunk<N>
+        ::template result_< First,Last,State,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp
new file mode 100644
index 0000000..6acccb2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp
@@ -0,0 +1,554 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+   
+    >
+struct lambda
+{
+    typedef false_ is_le;
+    typedef T result_;
+    typedef T type;
+};
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>, Tag >
+{
+    typedef true_ is_le;
+    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+    typedef mpl::protect<result_> type;
+};
+
+template<
+      typename F
+    , typename Tag
+    >
+struct lambda<
+          bind0<F>
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind0<
+          F
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1
+{
+    typedef F<
+          typename L1::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1< true_,Tag,F,L1 >
+{
+    typedef bind1<
+          quote1< F,Tag >
+        , typename L1::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1 > class F
+    , typename T1
+    , typename Tag
+    >
+struct lambda<
+          F<T1>
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef typename l1::is_le is_le1;
+    typedef typename aux::lambda_or<
+          is_le1::value
+        >::type is_le;
+
+    typedef aux::le_result1<
+          is_le, Tag, F, l1
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1
+    , typename Tag
+    >
+struct lambda<
+          bind1< F,T1 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind1<
+          F
+        , T1
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2
+{
+    typedef F<
+          typename L1::type, typename L2::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+    typedef bind2<
+          quote2< F,Tag >
+        , typename L1::result_, typename L2::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value
+        >::type is_le;
+
+    typedef aux::le_result2<
+          is_le, Tag, F, l1, l2
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          bind2< F,T1,T2 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind2<
+          F
+        , T1, T2
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+    typedef bind3<
+          quote3< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value
+        >::type is_le;
+
+    typedef aux::le_result3<
+          is_le, Tag, F, l1, l2, l3
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          bind3< F,T1,T2,T3 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind3<
+          F
+        , T1, T2, T3
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+    typedef bind4<
+          quote4< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        >::type is_le;
+
+    typedef aux::le_result4<
+          is_le, Tag, F, l1, l2, l3, l4
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          bind4< F,T1,T2,T3,T4 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind4<
+          F
+        , T1, T2, T3, T4
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type, typename L5::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+    typedef bind5<
+          quote5< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_, typename L5::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    typedef lambda< T5,Tag > l5;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    typedef typename l5::is_le is_le5;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        , is_le5::value
+        >::type is_le;
+
+    typedef aux::le_result5<
+          is_le, Tag, F, l1, l2, l3, l4, l5
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind5< F,T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind5<
+          F
+        , T1, T2, T3, T4, T5
+        > result_;
+
+    typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>, Tag >
+{
+    typedef false_ is_le;
+    typedef mpl::protect<T> result_;
+    typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind< F,T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind< F,T1,T2,T3,T4,T5 > result_;
+    typedef result_ type;
+};
+
+/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
+
+template<
+      typename F, typename Tag1, typename Tag2
+    >
+struct lambda<
+          lambda< F,Tag1 >
+        , Tag2
+        >
+{
+    typedef lambda< F,Tag2 > l1;
+    typedef lambda< Tag1,Tag2 > l2;
+    typedef typename l1::is_le is_le;
+    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp
new file mode 100644
index 0000000..4510b48
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct greater_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct greater_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater
+
+    : greater_impl<
+          typename greater_tag<N1>::type
+        , typename greater_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp
new file mode 100644
index 0000000..30b3bdb
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct greater_equal_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct greater_equal_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater_equal
+
+    : greater_equal_impl<
+          typename greater_equal_tag<N1>::type
+        , typename greater_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp
new file mode 100644
index 0000000..1510352
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp
@@ -0,0 +1,166 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C1, bool C2 >
+struct inherit2_impl
+{
+    template< typename Derived, typename T1, typename T2 > struct result_
+        : T1, T2
+    {
+        typedef Derived type_;
+    };
+};
+
+template<>
+struct inherit2_impl< false,true >
+{
+    template< typename Derived, typename T1, typename T2 > struct result_
+        : T1
+    {
+        typedef T1 type_;
+    };
+};
+
+template<>
+struct inherit2_impl< true,false >
+{
+    template< typename Derived, typename T1, typename T2 > struct result_
+        : T2
+    {
+        typedef T2 type_;
+    };
+};
+
+template<>
+struct inherit2_impl< true,true >
+{
+    template< typename Derived, typename T1, typename T2 > struct result_
+    {
+        typedef T1 type_;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    >
+struct inherit2
+    : aux::inherit2_impl<
+          is_empty_base<T1>::value
+        , is_empty_base<T2>::value
+        >::template result_< inherit2< T1,T2 >,T1, T2 >
+{
+    typedef typename inherit2::type_ type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na
+    >
+struct inherit3
+    : inherit2<
+          typename inherit2<
+              T1, T2
+            >::type
+        , T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , inherit3
+        , ( T1, T2, T3)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    >
+struct inherit4
+    : inherit2<
+          typename inherit3<
+              T1, T2, T3
+            >::type
+        , T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , inherit4
+        , ( T1, T2, T3, T4)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    , typename T5 = na
+    >
+struct inherit5
+    : inherit2<
+          typename inherit4<
+              T1, T2, T3, T4
+            >::type
+        , T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , inherit5
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+      typename T1 = empty_base, typename T2 = empty_base
+    , typename T3 = empty_base, typename T4 = empty_base
+    , typename T5 = empty_base
+    >
+struct inherit
+    : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+    template<
+
+          typename T1 = empty_base, typename T2 = empty_base
+        , typename T3 = empty_base, typename T4 = empty_base
+        , typename T5 = empty_base
+
+        >
+    struct apply
+        : inherit< T1,T2,T3,T4,T5 >
+    {
+    };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp
new file mode 100644
index 0000000..74c0cc6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename Iterator, typename State >
+struct iter_fold_if_null_step
+{
+    typedef State state;
+    typedef Iterator iterator;
+};
+
+template< bool >
+struct iter_fold_if_step_impl
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef typename apply2< StateOp,State,Iterator >::type state;
+        typedef typename IteratorOp::type iterator;
+    };
+};
+
+template<>
+struct iter_fold_if_step_impl<false>
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef State state;
+        typedef Iterator iterator;
+    };
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_forward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename BackwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_backward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename ForwardPredicate
+    , typename BackwardOp
+    , typename BackwardPredicate
+    >
+struct iter_fold_if_impl
+{
+ private:
+    typedef iter_fold_if_null_step< Iterator,State > forward_step0;
+    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+    
+
+    typedef typename if_<
+          typename forward_step4::not_last
+        , iter_fold_if_impl<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            , ForwardOp
+            , ForwardPredicate
+            , BackwardOp
+            , BackwardPredicate
+            >
+        , iter_fold_if_null_step<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            >
+        >::type backward_step4;
+
+    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+    
+
+ public:
+    typedef typename backward_step0::state state;
+    typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp
new file mode 100644
index 0000000..7f7857f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp
@@ -0,0 +1,245 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl;
+
+template< int N >
+struct iter_fold_chunk;
+
+template<> struct iter_fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef state0 state;
+        typedef iter0 iterator;
+    };
+};
+
+template<> struct iter_fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef state1 state;
+        typedef iter1 iterator;
+    };
+};
+
+template<> struct iter_fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef state2 state;
+        typedef iter2 iterator;
+    };
+};
+
+template<> struct iter_fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef state3 state;
+        typedef iter3 iterator;
+    };
+};
+
+template<> struct iter_fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State state0;
+        typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef state4 state;
+        typedef iter4 iterator;
+    };
+};
+
+template< int N >
+struct iter_fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef iter_fold_impl<
+              4
+            , First
+            , Last
+            , State
+            , ForwardOp
+            > chunk_;
+
+        typedef iter_fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , typename chunk_::iterator
+            , Last
+            , typename chunk_::state
+            , ForwardOp
+            > res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct iter_fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct iter_fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , iter_fold_null_step< Last,State >
+            , iter_fold_step< First,Last,State,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_step
+{
+    typedef iter_fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , ForwardOp
+        > chunk_;
+
+    typedef typename chunk_::state state;
+    typedef typename chunk_::iterator iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl
+    : iter_fold_chunk<N>
+        ::template result_< First,Last,State,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp
new file mode 100644
index 0000000..5cb26dc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp
@@ -0,0 +1,229 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+    template< typename T, typename Tag, typename Protect > struct result_
+    {
+        typedef T type;
+        typedef is_placeholder<T> is_le;
+    };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef typename l1::is_le is_le1;
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+            > is_le;
+
+        typedef bind1<
+              typename F::rebind
+            , typename l1::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+            > is_le;
+
+        typedef bind2<
+              typename F::rebind
+            , typename l1::type, typename l2::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+            > is_le;
+
+        typedef bind3<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+            > is_le;
+
+        typedef bind4<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        typedef lambda< typename F::arg5, Tag, false_ > l5;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        typedef typename l5::is_le is_le5;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+            > is_le;
+
+        typedef bind5<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type, typename l5::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Protect
+    >
+struct lambda
+{
+    /// Metafunction forwarding confuses MSVC 6.x
+    typedef typename aux::template_arity<T>::type arity_;
+    typedef typename aux::lambda_impl<arity_>
+        ::template result_< T,Tag,Protect > l_;
+
+    typedef typename l_::type type;
+    typedef typename l_::is_le is_le;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/less.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/less.hpp
new file mode 100644
index 0000000..ce1209b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/less.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct less_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct less_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less
+
+    : less_impl<
+          typename less_tag<N1>::type
+        , typename less_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp
new file mode 100644
index 0000000..bc7d102
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct less_equal_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct less_equal_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less_equal
+
+    : less_equal_impl<
+          typename less_equal_tag<N1>::type
+        , typename less_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/list.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/list.hpp
new file mode 100644
index 0000000..43ddbe4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/list.hpp
@@ -0,0 +1,556 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct list_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct list_chooser<0>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef list0<
+             
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<1>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list1<
+              T0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<2>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list2<
+              T0, T1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<3>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list3<
+              T0, T1, T2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<4>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list4<
+              T0, T1, T2, T3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<5>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list5<
+              T0, T1, T2, T3, T4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<6>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list6<
+              T0, T1, T2, T3, T4, T5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<7>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list7<
+              T0, T1, T2, T3, T4, T5, T6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<8>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list8<
+              T0, T1, T2, T3, T4, T5, T6, T7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<9>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list9<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<10>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list10<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<11>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list11<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<12>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list12<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<13>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list13<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<14>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list14<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<15>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list15<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<16>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list16<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<17>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list17<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<18>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list18<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<19>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list19<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_chooser<20>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename list20<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_list_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_list_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6, typename T7, typename T8, typename T9, typename T10
+    , typename T11, typename T12, typename T13, typename T14, typename T15
+    , typename T16, typename T17, typename T18, typename T19, typename T20
+    >
+struct list_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_list_arg<T1>::value + is_list_arg<T2>::value 
+        + is_list_arg<T3>::value + is_list_arg<T4>::value 
+        + is_list_arg<T5>::value + is_list_arg<T6>::value 
+        + is_list_arg<T7>::value + is_list_arg<T8>::value 
+        + is_list_arg<T9>::value + is_list_arg<T10>::value 
+        + is_list_arg<T11>::value + is_list_arg<T12>::value 
+        + is_list_arg<T13>::value + is_list_arg<T14>::value 
+        + is_list_arg<T15>::value + is_list_arg<T16>::value 
+        + is_list_arg<T17>::value + is_list_arg<T18>::value 
+        + is_list_arg<T19>::value + is_list_arg<T20>::value
+        );
+
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct list_impl
+{
+    typedef aux::list_count_args<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        > arg_num_;
+
+    typedef typename aux::list_chooser< arg_num_::value >
+        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct list
+    : aux::list_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type
+{
+    typedef typename aux::list_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp
new file mode 100644
index 0000000..33b8b23
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp
@@ -0,0 +1,534 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct list_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct list_c_chooser<0>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list0_c<
+              T
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<1>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list1_c<
+              T, C0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<2>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list2_c<
+              T, C0, C1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<3>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list3_c<
+              T, C0, C1, C2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<4>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list4_c<
+              T, C0, C1, C2, C3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<5>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list5_c<
+              T, C0, C1, C2, C3, C4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<6>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list6_c<
+              T, C0, C1, C2, C3, C4, C5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<7>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list7_c<
+              T, C0, C1, C2, C3, C4, C5, C6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<8>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list8_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<9>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list9_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<10>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list10_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<11>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list11_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<12>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list12_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<13>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list13_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<14>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list14_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<15>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list15_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<16>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list16_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<17>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list17_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<18>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list18_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<19>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list19_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct list_c_chooser<20>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename list20_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_list_c_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_list_c_arg<LONG_MAX>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+    , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+    , long C16, long C17, long C18, long C19, long C20
+    >
+struct list_c_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_list_c_arg<C1>::value + is_list_c_arg<C2>::value 
+        + is_list_c_arg<C3>::value + is_list_c_arg<C4>::value 
+        + is_list_c_arg<C5>::value + is_list_c_arg<C6>::value 
+        + is_list_c_arg<C7>::value + is_list_c_arg<C8>::value 
+        + is_list_c_arg<C9>::value + is_list_c_arg<C10>::value 
+        + is_list_c_arg<C11>::value + is_list_c_arg<C12>::value 
+        + is_list_c_arg<C13>::value + is_list_c_arg<C14>::value 
+        + is_list_c_arg<C15>::value + is_list_c_arg<C16>::value 
+        + is_list_c_arg<C17>::value + is_list_c_arg<C18>::value 
+        + is_list_c_arg<C19>::value + is_list_c_arg<C20>::value
+        );
+
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct list_c_impl
+{
+    typedef aux::list_c_count_args<
+          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        > arg_num_;
+
+    typedef typename aux::list_c_chooser< arg_num_::value >
+        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct list_c
+    : aux::list_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type
+{
+    typedef typename aux::list_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/map.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/map.hpp
new file mode 100644
index 0000000..05acd89
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/map.hpp
@@ -0,0 +1,556 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct map_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct map_chooser<0>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef map0<
+             
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<1>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map1<
+              T0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<2>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map2<
+              T0, T1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<3>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map3<
+              T0, T1, T2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<4>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map4<
+              T0, T1, T2, T3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<5>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map5<
+              T0, T1, T2, T3, T4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<6>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map6<
+              T0, T1, T2, T3, T4, T5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<7>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map7<
+              T0, T1, T2, T3, T4, T5, T6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<8>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map8<
+              T0, T1, T2, T3, T4, T5, T6, T7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<9>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map9<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<10>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map10<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<11>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map11<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<12>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map12<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<13>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map13<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<14>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map14<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<15>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map15<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<16>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map16<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<17>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map17<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<18>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map18<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<19>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map19<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct map_chooser<20>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename map20<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_map_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_map_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6, typename T7, typename T8, typename T9, typename T10
+    , typename T11, typename T12, typename T13, typename T14, typename T15
+    , typename T16, typename T17, typename T18, typename T19, typename T20
+    >
+struct map_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_map_arg<T1>::value + is_map_arg<T2>::value 
+        + is_map_arg<T3>::value + is_map_arg<T4>::value 
+        + is_map_arg<T5>::value + is_map_arg<T6>::value 
+        + is_map_arg<T7>::value + is_map_arg<T8>::value 
+        + is_map_arg<T9>::value + is_map_arg<T10>::value 
+        + is_map_arg<T11>::value + is_map_arg<T12>::value 
+        + is_map_arg<T13>::value + is_map_arg<T14>::value 
+        + is_map_arg<T15>::value + is_map_arg<T16>::value 
+        + is_map_arg<T17>::value + is_map_arg<T18>::value 
+        + is_map_arg<T19>::value + is_map_arg<T20>::value
+        );
+
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct map_impl
+{
+    typedef aux::map_count_args<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        > arg_num_;
+
+    typedef typename aux::map_chooser< arg_num_::value >
+        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct map
+    : aux::map_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type
+{
+    typedef typename aux::map_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp
new file mode 100644
index 0000000..1218079
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp
@@ -0,0 +1,133 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct minus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct minus_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct minus_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct minus_tag
+{
+    typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct minus2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct minus
+
+    : if_<
+
+          is_na<N3>
+        , minus2< N1,N2 >
+        , minus<
+              minus2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , minus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct minus2
+    : minus_impl<
+          typename minus_tag<N1>::type
+        , typename minus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, minus2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp
new file mode 100644
index 0000000..02e553f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp
@@ -0,0 +1,101 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct modulus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct modulus_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct modulus_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct modulus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct modulus
+
+    : modulus_impl<
+          typename modulus_tag<N1>::type
+        , typename modulus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp
new file mode 100644
index 0000000..03c8c93
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct not_equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct not_equal_to_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct not_equal_to_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct not_equal_to
+
+    : not_equal_to_impl<
+          typename not_equal_to_tag<N1>::type
+        , typename not_equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/or.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/or.hpp
new file mode 100644
index 0000000..73c4494
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/or.hpp
@@ -0,0 +1,73 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< bool C_ > struct or_impl
+{
+    template<
+          typename T1, typename T2, typename T3, typename T4
+        >
+    struct result_
+        : true_
+    {
+    };
+};
+
+template<> struct or_impl<false>
+{
+    template<
+          typename T1, typename T2, typename T3, typename T4
+        >
+    struct result_
+        : or_impl<
+              BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+            >::template result_< T2,T3,T4,false_ >
+    {
+    };
+};
+
+template<>
+struct or_impl<false>
+    ::result_< false_,false_,false_,false_ >
+        : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = false_, typename T4 = false_, typename T5 = false_
+    >
+struct or_
+
+    : aux::or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        >::template result_< T2,T3,T4,T5 >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , or_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , or_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp
new file mode 100644
index 0000000..0b0cc25
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#' 
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp
new file mode 100644
index 0000000..179416c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp
@@ -0,0 +1,133 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct plus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct plus_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct plus_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct plus_tag
+{
+    typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct plus2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct plus
+
+    : if_<
+
+          is_na<N3>
+        , plus2< N1,N2 >
+        , plus<
+              plus2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , plus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct plus2
+    : plus_impl<
+          typename plus_tag<N1>::type
+        , typename plus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, plus2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp
new file mode 100644
index 0000000..cf1a65b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp
@@ -0,0 +1,116 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/quote.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+template< bool > struct quote_impl
+{
+    template< typename T > struct result_
+        : T
+    {
+    };
+};
+
+template<> struct quote_impl<false>
+{
+    template< typename T > struct result_
+    {
+        typedef T type;
+    };
+};
+
+template<
+      template< typename P1 > class F
+    , typename Tag = void_
+    >
+struct quote1
+{
+    template< typename U1 > struct apply
+
+        : quote_impl< aux::has_type< F<U1> >::value >
+            ::template result_< F<U1> >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename Tag = void_
+    >
+struct quote2
+{
+    template< typename U1, typename U2 > struct apply
+
+        : quote_impl< aux::has_type< F< U1,U2 > >::value >
+            ::template result_< F< U1,U2 > >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename Tag = void_
+    >
+struct quote3
+{
+    template< typename U1, typename U2, typename U3 > struct apply
+
+        : quote_impl< aux::has_type< F< U1,U2,U3 > >::value >
+            ::template result_< F< U1,U2,U3 > >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename Tag = void_
+    >
+struct quote4
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4
+        >
+    struct apply
+
+        : quote_impl< aux::has_type< F< U1,U2,U3,U4 > >::value >
+            ::template result_< F< U1,U2,U3,U4 > >
+
+    {
+    };
+};
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename Tag = void_
+    >
+struct quote5
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4
+        , typename U5
+        >
+    struct apply
+
+        : quote_impl< aux::has_type< F< U1,U2,U3,U4,U5 > >::value >
+            ::template result_< F< U1,U2,U3,U4,U5 > >
+
+    {
+    };
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp
new file mode 100644
index 0000000..fee5d0f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl;
+
+template< long N >
+struct reverse_fold_chunk;
+
+template<> struct reverse_fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef fwd_state0 bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter0 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef fwd_state1 bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter1 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef fwd_state2 bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter2 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef fwd_state3 bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter3 iterator;
+    };
+};
+
+template<> struct reverse_fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef fwd_state4 bkwd_state4;
+        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter4 iterator;
+    };
+};
+
+template< long N >
+struct reverse_fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef reverse_fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , iter4
+            , Last
+            , fwd_state4
+            , BackwardOp
+            , ForwardOp
+            > nested_chunk;
+
+        typedef typename nested_chunk::state bkwd_state4;
+        typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+        typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+        typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+        typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef typename nested_chunk::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct reverse_fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct reverse_fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , reverse_fold_null_step< Last,State >
+            , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_step
+{
+    typedef reverse_fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , typename deref<First>::type
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl
+    : reverse_fold_chunk<N>
+        ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp
new file mode 100644
index 0000000..14caf06
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp
@@ -0,0 +1,295 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl;
+
+template< long N >
+struct reverse_iter_fold_chunk;
+
+template<> struct reverse_iter_fold_chunk<0>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef fwd_state0 bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter0 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        
+
+        typedef fwd_state1 bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        typedef bkwd_state0 state;
+        typedef iter1 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<2>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        
+
+        typedef fwd_state2 bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter2 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<3>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        
+
+        typedef fwd_state3 bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter3 iterator;
+    };
+};
+
+template<> struct reverse_iter_fold_chunk<4>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef fwd_state4 bkwd_state4;
+        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef iter4 iterator;
+    };
+};
+
+template< long N >
+struct reverse_iter_fold_chunk
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+        typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+        typedef typename mpl::next<iter0>::type iter1;
+        typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+        typedef typename mpl::next<iter1>::type iter2;
+        typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+        typedef typename mpl::next<iter2>::type iter3;
+        typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+        typedef typename mpl::next<iter3>::type iter4;
+        
+
+        typedef reverse_iter_fold_impl<
+              ( (N - 4) < 0 ? 0 : N - 4 )
+            , iter4
+            , Last
+            , fwd_state4
+            , BackwardOp
+            , ForwardOp
+            > nested_chunk;
+
+        typedef typename nested_chunk::state bkwd_state4;
+        typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+        typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+        typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+        typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+        
+
+        typedef bkwd_state0 state;
+        typedef typename nested_chunk::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_step;
+
+template<
+      typename Last
+    , typename State
+    >
+struct reverse_iter_fold_null_step
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<>
+struct reverse_iter_fold_chunk< -1 >
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same< First,Last >::type
+            , reverse_iter_fold_null_step< Last,State >
+            , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_step
+{
+    typedef reverse_iter_fold_chunk< -1 >::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , First
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl
+    : reverse_iter_fold_chunk<N>
+        ::template result_< First,Last,State,BackwardOp,ForwardOp >
+{
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/set.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/set.hpp
new file mode 100644
index 0000000..60c3af6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/set.hpp
@@ -0,0 +1,556 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct set_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct set_chooser<0>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef set0<
+             
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<1>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set1<
+              T0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<2>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set2<
+              T0, T1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<3>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set3<
+              T0, T1, T2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<4>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set4<
+              T0, T1, T2, T3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<5>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set5<
+              T0, T1, T2, T3, T4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<6>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set6<
+              T0, T1, T2, T3, T4, T5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<7>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set7<
+              T0, T1, T2, T3, T4, T5, T6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<8>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set8<
+              T0, T1, T2, T3, T4, T5, T6, T7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<9>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set9<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<10>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set10<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<11>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set11<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<12>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set12<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<13>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set13<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<14>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set14<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<15>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set15<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<16>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set16<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<17>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set17<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<18>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set18<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<19>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set19<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_chooser<20>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename set20<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_set_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_set_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6, typename T7, typename T8, typename T9, typename T10
+    , typename T11, typename T12, typename T13, typename T14, typename T15
+    , typename T16, typename T17, typename T18, typename T19, typename T20
+    >
+struct set_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_set_arg<T1>::value + is_set_arg<T2>::value 
+        + is_set_arg<T3>::value + is_set_arg<T4>::value 
+        + is_set_arg<T5>::value + is_set_arg<T6>::value 
+        + is_set_arg<T7>::value + is_set_arg<T8>::value 
+        + is_set_arg<T9>::value + is_set_arg<T10>::value 
+        + is_set_arg<T11>::value + is_set_arg<T12>::value 
+        + is_set_arg<T13>::value + is_set_arg<T14>::value 
+        + is_set_arg<T15>::value + is_set_arg<T16>::value 
+        + is_set_arg<T17>::value + is_set_arg<T18>::value 
+        + is_set_arg<T19>::value + is_set_arg<T20>::value
+        );
+
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct set_impl
+{
+    typedef aux::set_count_args<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        > arg_num_;
+
+    typedef typename aux::set_chooser< arg_num_::value >
+        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct set
+    : aux::set_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type
+{
+    typedef typename aux::set_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp
new file mode 100644
index 0000000..0d2967a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp
@@ -0,0 +1,534 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct set_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct set_c_chooser<0>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set0_c<
+              T
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<1>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set1_c<
+              T, C0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<2>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set2_c<
+              T, C0, C1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<3>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set3_c<
+              T, C0, C1, C2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<4>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set4_c<
+              T, C0, C1, C2, C3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<5>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set5_c<
+              T, C0, C1, C2, C3, C4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<6>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set6_c<
+              T, C0, C1, C2, C3, C4, C5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<7>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set7_c<
+              T, C0, C1, C2, C3, C4, C5, C6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<8>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set8_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<9>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set9_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<10>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set10_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<11>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set11_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<12>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set12_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<13>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set13_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<14>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set14_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<15>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set15_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<16>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set16_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<17>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set17_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<18>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set18_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<19>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set19_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct set_c_chooser<20>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename set20_c<
+              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_set_c_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_set_c_arg<LONG_MAX>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+    , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+    , long C16, long C17, long C18, long C19, long C20
+    >
+struct set_c_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_set_c_arg<C1>::value + is_set_c_arg<C2>::value 
+        + is_set_c_arg<C3>::value + is_set_c_arg<C4>::value 
+        + is_set_c_arg<C5>::value + is_set_c_arg<C6>::value 
+        + is_set_c_arg<C7>::value + is_set_c_arg<C8>::value 
+        + is_set_c_arg<C9>::value + is_set_c_arg<C10>::value 
+        + is_set_c_arg<C11>::value + is_set_c_arg<C12>::value 
+        + is_set_c_arg<C13>::value + is_set_c_arg<C14>::value 
+        + is_set_c_arg<C15>::value + is_set_c_arg<C16>::value 
+        + is_set_c_arg<C17>::value + is_set_c_arg<C18>::value 
+        + is_set_c_arg<C19>::value + is_set_c_arg<C20>::value
+        );
+
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct set_c_impl
+{
+    typedef aux::set_c_count_args<
+          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        > arg_num_;
+
+    typedef typename aux::set_c_chooser< arg_num_::value >
+        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct set_c
+    : aux::set_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type
+{
+    typedef typename aux::set_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp
new file mode 100644
index 0000000..558c555
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_left_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct shift_left_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct shift_left_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_left_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_left
+
+    : shift_left_impl<
+          typename shift_left_tag<N1>::type
+        , typename shift_left_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  << BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp
new file mode 100644
index 0000000..7bde761
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_right_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct shift_right_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct shift_right_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_right_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_right
+
+    : shift_right_impl<
+          typename shift_right_tag<N1>::type
+        , typename shift_right_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp
new file mode 100644
index 0000000..c989170
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp
@@ -0,0 +1,40 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< bool >
+struct template_arity_impl
+{
+    template< typename F > struct result_
+        : mpl::int_< -1 >
+    {
+    };
+};
+
+template<>
+struct template_arity_impl<true>
+{
+    template< typename F > struct result_
+        : F::arity
+    {
+    };
+};
+
+template< typename F >
+struct template_arity
+    : template_arity_impl< ::pdalboost::mpl::aux::has_rebind<F>::value >
+        ::template result_<F>
+{
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/times.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/times.hpp
new file mode 100644
index 0000000..bad2b08
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/times.hpp
@@ -0,0 +1,133 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct times_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct times_impl< na,integral_c_tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template<> struct times_impl< integral_c_tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct times_tag
+{
+    typedef typename T::tag type;
+};
+
+/// forward declaration
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct times2;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct times
+
+    : if_<
+
+          is_na<N3>
+        , times2< N1,N2 >
+        , times<
+              times2< N1,N2 >
+            , N3, N4, N5
+            >
+        >::type
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , times
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1
+    , typename N2
+    >
+struct times2
+    : times_impl<
+          typename times_tag<N1>::type
+        , typename times_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, times2, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp
new file mode 100644
index 0000000..d5bad07
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp
@@ -0,0 +1,109 @@
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl
+{
+    template< typename F, typename Args > struct apply;
+};
+
+template<> struct unpack_args_impl<0>
+{
+    template< typename F, typename Args > struct apply
+        : apply0<
+              F
+            >
+    {
+    };
+};
+
+template<> struct unpack_args_impl<1>
+{
+    template< typename F, typename Args > struct apply
+        : apply1<
+              F
+            , typename at_c< Args,0 >::type
+            >
+    {
+    };
+};
+
+template<> struct unpack_args_impl<2>
+{
+    template< typename F, typename Args > struct apply
+        : apply2<
+              F
+            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+            >
+    {
+    };
+};
+
+template<> struct unpack_args_impl<3>
+{
+    template< typename F, typename Args > struct apply
+        : apply3<
+              F
+            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+            , typename at_c< Args,2 >::type
+            >
+    {
+    };
+};
+
+template<> struct unpack_args_impl<4>
+{
+    template< typename F, typename Args > struct apply
+        : apply4<
+              F
+            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+            , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+            >
+    {
+    };
+};
+
+template<> struct unpack_args_impl<5>
+{
+    template< typename F, typename Args > struct apply
+        : apply5<
+              F
+            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+            , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+            , typename at_c< Args,4 >::type
+            >
+    {
+    };
+};
+
+}
+
+template<
+      typename F
+    >
+struct unpack_args
+{
+    template< typename Args > struct apply
+
+        : aux::unpack_args_impl< size<Args>::value >
+            ::template apply< F,Args >
+
+    {
+    };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp
new file mode 100644
index 0000000..55fa508
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp
@@ -0,0 +1,556 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct vector_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct vector_chooser<0>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef vector0<
+             
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<1>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector1<
+              T0
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<2>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector2<
+              T0, T1
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<3>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector3<
+              T0, T1, T2
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<4>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector4<
+              T0, T1, T2, T3
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<5>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector5<
+              T0, T1, T2, T3, T4
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<6>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector6<
+              T0, T1, T2, T3, T4, T5
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<7>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector7<
+              T0, T1, T2, T3, T4, T5, T6
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<8>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector8<
+              T0, T1, T2, T3, T4, T5, T6, T7
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<9>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector9<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<10>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector10<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<11>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector11<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<12>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector12<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<13>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector13<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<14>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector14<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<15>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector15<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<16>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector16<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<17>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector17<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<18>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector18<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<19>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector19<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_chooser<20>
+{
+    template<
+          typename T0, typename T1, typename T2, typename T3, typename T4
+        , typename T5, typename T6, typename T7, typename T8, typename T9
+        , typename T10, typename T11, typename T12, typename T13, typename T14
+        , typename T15, typename T16, typename T17, typename T18, typename T19
+        >
+    struct result_
+    {
+        typedef typename vector20<
+              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< typename T >
+struct is_vector_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_vector_arg<na>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename T6, typename T7, typename T8, typename T9, typename T10
+    , typename T11, typename T12, typename T13, typename T14, typename T15
+    , typename T16, typename T17, typename T18, typename T19, typename T20
+    >
+struct vector_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_vector_arg<T1>::value + is_vector_arg<T2>::value 
+        + is_vector_arg<T3>::value + is_vector_arg<T4>::value 
+        + is_vector_arg<T5>::value + is_vector_arg<T6>::value 
+        + is_vector_arg<T7>::value + is_vector_arg<T8>::value 
+        + is_vector_arg<T9>::value + is_vector_arg<T10>::value 
+        + is_vector_arg<T11>::value + is_vector_arg<T12>::value 
+        + is_vector_arg<T13>::value + is_vector_arg<T14>::value 
+        + is_vector_arg<T15>::value + is_vector_arg<T16>::value 
+        + is_vector_arg<T17>::value + is_vector_arg<T18>::value 
+        + is_vector_arg<T19>::value + is_vector_arg<T20>::value
+        );
+
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct vector_impl
+{
+    typedef aux::vector_count_args<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        > arg_num_;
+
+    typedef typename aux::vector_chooser< arg_num_::value >
+        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct vector
+    : aux::vector_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type
+{
+    typedef typename aux::vector_impl<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp
new file mode 100644
index 0000000..4448475
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp
@@ -0,0 +1,534 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< int N >
+struct vector_c_chooser;
+
+}
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<0>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector0_c<
+              T
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<1>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector1_c<
+              T, T(C0)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<2>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector2_c<
+              T, T(C0), T(C1)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<3>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector3_c<
+              T, T(C0), T(C1), T(C2)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<4>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector4_c<
+              T, T(C0), T(C1), T(C2), T(C3)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<5>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector5_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<6>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector6_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<7>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector7_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<8>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector8_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<9>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector9_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<10>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector10_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<11>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector11_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<12>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector12_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<13>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector13_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<14>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector14_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<15>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector15_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<16>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector16_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<17>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector17_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<18>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector18_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<19>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector19_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template<>
+struct vector_c_chooser<20>
+{
+    template<
+          typename T, long C0, long C1, long C2, long C3, long C4, long C5
+        , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+        , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+        >
+    struct result_
+    {
+        typedef typename vector20_c<
+              T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19)
+            >::type type;
+
+    };
+};
+
+} // namespace aux
+
+namespace aux {
+
+template< long C >
+struct is_vector_c_arg
+{
+    BOOST_STATIC_CONSTANT(bool, value  = true);
+};
+
+template<>
+struct is_vector_c_arg<LONG_MAX>
+{
+    BOOST_STATIC_CONSTANT(bool, value  = false);
+};
+
+template<
+      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8
+    , long C9, long C10, long C11, long C12, long C13, long C14, long C15
+    , long C16, long C17, long C18, long C19, long C20
+    >
+struct vector_c_count_args
+{
+    BOOST_STATIC_CONSTANT(int, value =
+          is_vector_c_arg<C1>::value + is_vector_c_arg<C2>::value 
+        + is_vector_c_arg<C3>::value + is_vector_c_arg<C4>::value 
+        + is_vector_c_arg<C5>::value + is_vector_c_arg<C6>::value 
+        + is_vector_c_arg<C7>::value + is_vector_c_arg<C8>::value 
+        + is_vector_c_arg<C9>::value + is_vector_c_arg<C10>::value 
+        + is_vector_c_arg<C11>::value + is_vector_c_arg<C12>::value 
+        + is_vector_c_arg<C13>::value + is_vector_c_arg<C14>::value 
+        + is_vector_c_arg<C15>::value + is_vector_c_arg<C16>::value 
+        + is_vector_c_arg<C17>::value + is_vector_c_arg<C18>::value 
+        + is_vector_c_arg<C19>::value + is_vector_c_arg<C20>::value
+        );
+
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct vector_c_impl
+{
+    typedef aux::vector_c_count_args<
+          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        > arg_num_;
+
+    typedef typename aux::vector_c_chooser< arg_num_::value >
+        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct vector_c
+    : aux::vector_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type
+{
+    typedef typename aux::vector_c_impl<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19
+        >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp
new file mode 100644
index 0000000..8d91863
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_backward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_backward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_backward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_backward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef typename prior<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_backward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_backward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_backward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp
new file mode 100644
index 0000000..1d13df3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_forward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_forward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_forward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_forward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef typename next<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_forward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_forward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_forward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/and.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/and.hpp
new file mode 100644
index 0000000..f55cb1c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/and.hpp
@@ -0,0 +1,69 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+    : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+    : and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , true_
+        >
+{
+};
+
+template<>
+struct and_impl<
+          true
+        , true_, true_, true_, true_
+        >
+    : true_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = true_, typename T4 = true_, typename T5 = true_
+    >
+struct and_
+
+    : aux::and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , and_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , and_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp
new file mode 100644
index 0000000..eeec182
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp
@@ -0,0 +1,169 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct apply0
+
+    : apply_wrap0<
+          typename lambda<F>::type
+       
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          1
+        , apply0
+        , (F )
+        )
+};
+
+template<
+      typename F
+    >
+struct apply< F,na,na,na,na,na >
+    : apply0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply1
+
+    : apply_wrap1<
+          typename lambda<F>::type
+        , T1
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          2
+        , apply1
+        , (F, T1)
+        )
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply< F,T1,na,na,na,na >
+    : apply1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2
+
+    : apply_wrap2<
+          typename lambda<F>::type
+        , T1, T2
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , apply2
+        , (F, T1, T2)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply< F,T1,T2,na,na,na >
+    : apply2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3
+
+    : apply_wrap3<
+          typename lambda<F>::type
+        , T1, T2, T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , apply3
+        , (F, T1, T2, T3)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply< F,T1,T2,T3,na,na >
+    : apply3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4
+
+    : apply_wrap4<
+          typename lambda<F>::type
+        , T1, T2, T3, T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , apply4
+        , (F, T1, T2, T3, T4)
+        )
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply< F,T1,T2,T3,T4,na >
+    : apply4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5
+
+    : apply_wrap5<
+          typename lambda<F>::type
+        , T1, T2, T3, T4, T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          6
+        , apply5
+        , (F, T1, T2, T3, T4, T5)
+        )
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply
+    : apply5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp
new file mode 100644
index 0000000..a309ea1
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp
@@ -0,0 +1,52 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na
+    >
+struct apply;
+
+template<
+      typename F
+    >
+struct apply0;
+
+template<
+      typename F, typename T1
+    >
+struct apply1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp
new file mode 100644
index 0000000..407bbd6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp
@@ -0,0 +1,84 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+
+    , typename has_apply_ = typename aux::has_apply<F>::type
+
+    >
+struct apply_wrap0
+
+    : F::template apply<  >
+{
+};
+
+template< typename F >
+struct apply_wrap0< F,true_ >
+    : F::apply
+{
+};
+
+template<
+      typename F, typename T1
+
+    >
+struct apply_wrap1
+
+    : F::template apply<T1>
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+
+    >
+struct apply_wrap2
+
+    : F::template apply< T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+
+    >
+struct apply_wrap3
+
+    : F::template apply< T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+
+    >
+struct apply_wrap4
+
+    : F::template apply< T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+
+    >
+struct apply_wrap5
+
+    : F::template apply< T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp
new file mode 100644
index 0000000..6f2f8a8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+    BOOST_STATIC_CONSTANT(int, value  = -1);
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<1>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 1);
+    typedef arg<2> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<2>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 2);
+    typedef arg<3> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U2 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<3>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 3);
+    typedef arg<4> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U3 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<4>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 4);
+    typedef arg<5> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U4 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<5>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 5);
+    typedef arg<6> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U5 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp
new file mode 100644
index 0000000..90c8dba
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp
@@ -0,0 +1,369 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+    typedef bind< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F
+    >
+struct bind< F,na,na,na,na,na >
+    : bind0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1
+    >
+struct bind< F,T1,na,na,na,na >
+    : bind1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind< F,T1,T2,na,na,na >
+    : bind2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind< F,T1,T2,T3,na,na >
+    : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind< F,T1,T2,T3,T4,na >
+    : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind
+    : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp
new file mode 100644
index 0000000..cb24338
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp
@@ -0,0 +1,466 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      typename T
+    , typename Arg
+    >
+struct replace_unnamed_arg
+{
+    typedef Arg next;
+    typedef T type;
+};
+
+template<
+      typename Arg
+    >
+struct replace_unnamed_arg< arg< -1 >, Arg >
+{
+    typedef typename Arg::next next;
+    typedef Arg type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+    typedef bind< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F
+    >
+struct bind< F,na,na,na,na,na >
+    : bind0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1
+    >
+struct bind< F,T1,na,na,na,na >
+    : bind1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind< F,T1,T2,na,na,na >
+    : bind2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind< F,T1,T2,T3,na,na >
+    : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind< F,T1,T2,T3,T4,na >
+    : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+        typedef aux::replace_unnamed_arg< T5,n5 > r5;
+        typedef typename r5::type a5;
+        typedef typename r5::next n6;
+        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+        ///
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind
+    : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp
new file mode 100644
index 0000000..439d82f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp
@@ -0,0 +1,52 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na
+    >
+struct bind;
+
+template<
+      typename F
+    >
+struct bind0;
+
+template<
+      typename F, typename T1
+    >
+struct bind1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp
new file mode 100644
index 0000000..047bfb8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp
@@ -0,0 +1,157 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitand_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitand_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitand_
+    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitand_< N1,N2,N3,N4,na >
+
+    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitand_< N1,N2,N3,na,na >
+
+    : bitand_< bitand_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitand_< N1,N2,na,na,na >
+    : bitand_impl<
+          typename bitand_tag<N1>::type
+        , typename bitand_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitand_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 & n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::bitand_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp
new file mode 100644
index 0000000..dc1fbba
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp
@@ -0,0 +1,157 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitor_
+    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitor_< N1,N2,N3,N4,na >
+
+    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitor_< N1,N2,N3,na,na >
+
+    : bitor_< bitor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitor_< N1,N2,na,na,na >
+    : bitor_impl<
+          typename bitor_tag<N1>::type
+        , typename bitor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitor_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 | n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::bitor_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp
new file mode 100644
index 0000000..34430a6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp
@@ -0,0 +1,157 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitxor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitxor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitxor_
+    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitxor_< N1,N2,N3,N4,na >
+
+    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitxor_< N1,N2,N3,na,na >
+
+    : bitxor_< bitxor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitxor_< N1,N2,na,na,na >
+    : bitxor_impl<
+          typename bitxor_tag<N1>::type
+        , typename bitxor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct bitxor_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 ^ n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::bitxor_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp
new file mode 100644
index 0000000..bc99b03
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct deque;
+
+template<
+     
+    >
+struct deque<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct deque<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct deque<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct deque<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct deque<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct deque<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct deque
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp
new file mode 100644
index 0000000..84a3da5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp
@@ -0,0 +1,156 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct divides_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct divides_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct divides
+    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , divides
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct divides< N1,N2,N3,N4,na >
+
+    : divides< divides< divides< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct divides< N1,N2,N3,na,na >
+
+    : divides< divides< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct divides< N1,N2,na,na,na >
+    : divides_impl<
+          typename divides_tag<N1>::type
+        , typename divides_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct divides_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 / n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::divides_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp
new file mode 100644
index 0000000..68bb231
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp
@@ -0,0 +1,98 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct equal_to
+
+    : equal_to_impl<
+          typename equal_to_tag<N1>::type
+        , typename equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value ==
+             BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp
new file mode 100644
index 0000000..728565c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl
+{
+    typedef fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,First,Last,State,ForwardOp >
+    : fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp
new file mode 100644
index 0000000..6acccb2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp
@@ -0,0 +1,554 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+   
+    >
+struct lambda
+{
+    typedef false_ is_le;
+    typedef T result_;
+    typedef T type;
+};
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>, Tag >
+{
+    typedef true_ is_le;
+    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+    typedef mpl::protect<result_> type;
+};
+
+template<
+      typename F
+    , typename Tag
+    >
+struct lambda<
+          bind0<F>
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind0<
+          F
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1
+{
+    typedef F<
+          typename L1::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1< true_,Tag,F,L1 >
+{
+    typedef bind1<
+          quote1< F,Tag >
+        , typename L1::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1 > class F
+    , typename T1
+    , typename Tag
+    >
+struct lambda<
+          F<T1>
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef typename l1::is_le is_le1;
+    typedef typename aux::lambda_or<
+          is_le1::value
+        >::type is_le;
+
+    typedef aux::le_result1<
+          is_le, Tag, F, l1
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1
+    , typename Tag
+    >
+struct lambda<
+          bind1< F,T1 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind1<
+          F
+        , T1
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2
+{
+    typedef F<
+          typename L1::type, typename L2::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+    typedef bind2<
+          quote2< F,Tag >
+        , typename L1::result_, typename L2::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value
+        >::type is_le;
+
+    typedef aux::le_result2<
+          is_le, Tag, F, l1, l2
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          bind2< F,T1,T2 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind2<
+          F
+        , T1, T2
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+    typedef bind3<
+          quote3< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value
+        >::type is_le;
+
+    typedef aux::le_result3<
+          is_le, Tag, F, l1, l2, l3
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          bind3< F,T1,T2,T3 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind3<
+          F
+        , T1, T2, T3
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+    typedef bind4<
+          quote4< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        >::type is_le;
+
+    typedef aux::le_result4<
+          is_le, Tag, F, l1, l2, l3, l4
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          bind4< F,T1,T2,T3,T4 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind4<
+          F
+        , T1, T2, T3, T4
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type, typename L5::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+    typedef bind5<
+          quote5< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_, typename L5::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    typedef lambda< T5,Tag > l5;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    typedef typename l5::is_le is_le5;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        , is_le5::value
+        >::type is_le;
+
+    typedef aux::le_result5<
+          is_le, Tag, F, l1, l2, l3, l4, l5
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind5< F,T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind5<
+          F
+        , T1, T2, T3, T4, T5
+        > result_;
+
+    typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>, Tag >
+{
+    typedef false_ is_le;
+    typedef mpl::protect<T> result_;
+    typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind< F,T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind< F,T1,T2,T3,T4,T5 > result_;
+    typedef result_ type;
+};
+
+/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
+
+template<
+      typename F, typename Tag1, typename Tag2
+    >
+struct lambda<
+          lambda< F,Tag1 >
+        , Tag2
+        >
+{
+    typedef lambda< F,Tag2 > l1;
+    typedef lambda< Tag1,Tag2 > l2;
+    typedef typename l1::is_le is_le;
+    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp
new file mode 100644
index 0000000..f57f4b3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp
@@ -0,0 +1,98 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater
+
+    : greater_impl<
+          typename greater_tag<N1>::type
+        , typename greater_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >
+             BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp
new file mode 100644
index 0000000..14f1e9c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp
@@ -0,0 +1,98 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater_equal
+
+    : greater_equal_impl<
+          typename greater_equal_tag<N1>::type
+        , typename greater_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >=
+             BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp
new file mode 100644
index 0000000..90eaeb2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp
@@ -0,0 +1,141 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    >
+struct inherit2
+    : T1, T2
+{
+    typedef inherit2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, inherit2, (T1, T2))
+};
+
+template< typename T1 >
+struct inherit2< T1,empty_base >
+{
+    typedef T1 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
+};
+
+template< typename T2 >
+struct inherit2< empty_base,T2 >
+{
+    typedef T2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
+};
+
+template<>
+struct inherit2< empty_base,empty_base >
+{
+    typedef empty_base type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na
+    >
+struct inherit3
+    : inherit2<
+          typename inherit2<
+              T1, T2
+            >::type
+        , T3
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          3
+        , inherit3
+        , ( T1, T2, T3)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    >
+struct inherit4
+    : inherit2<
+          typename inherit3<
+              T1, T2, T3
+            >::type
+        , T4
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , inherit4
+        , ( T1, T2, T3, T4)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    , typename T5 = na
+    >
+struct inherit5
+    : inherit2<
+          typename inherit4<
+              T1, T2, T3, T4
+            >::type
+        , T5
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , inherit5
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+      typename T1 = empty_base, typename T2 = empty_base
+    , typename T3 = empty_base, typename T4 = empty_base
+    , typename T5 = empty_base
+    >
+struct inherit
+    : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+    template<
+
+          typename T1 = empty_base, typename T2 = empty_base
+        , typename T3 = empty_base, typename T4 = empty_base
+        , typename T5 = empty_base
+
+        >
+    struct apply
+        : inherit< T1,T2,T3,T4,T5 >
+    {
+    };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp
new file mode 100644
index 0000000..74c0cc6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename Iterator, typename State >
+struct iter_fold_if_null_step
+{
+    typedef State state;
+    typedef Iterator iterator;
+};
+
+template< bool >
+struct iter_fold_if_step_impl
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef typename apply2< StateOp,State,Iterator >::type state;
+        typedef typename IteratorOp::type iterator;
+    };
+};
+
+template<>
+struct iter_fold_if_step_impl<false>
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef State state;
+        typedef Iterator iterator;
+    };
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_forward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename BackwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_backward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename ForwardPredicate
+    , typename BackwardOp
+    , typename BackwardPredicate
+    >
+struct iter_fold_if_impl
+{
+ private:
+    typedef iter_fold_if_null_step< Iterator,State > forward_step0;
+    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+    
+
+    typedef typename if_<
+          typename forward_step4::not_last
+        , iter_fold_if_impl<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            , ForwardOp
+            , ForwardPredicate
+            , BackwardOp
+            , BackwardPredicate
+            >
+        , iter_fold_if_null_step<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            >
+        >::type backward_step4;
+
+    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+    
+
+ public:
+    typedef typename backward_step0::state state;
+    typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp
new file mode 100644
index 0000000..78329b3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl
+{
+    typedef iter_fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef iter_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,First,Last,State,ForwardOp >
+    : iter_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp
new file mode 100644
index 0000000..5cb26dc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp
@@ -0,0 +1,229 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+    template< typename T, typename Tag, typename Protect > struct result_
+    {
+        typedef T type;
+        typedef is_placeholder<T> is_le;
+    };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef typename l1::is_le is_le1;
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+            > is_le;
+
+        typedef bind1<
+              typename F::rebind
+            , typename l1::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+            > is_le;
+
+        typedef bind2<
+              typename F::rebind
+            , typename l1::type, typename l2::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+            > is_le;
+
+        typedef bind3<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+            > is_le;
+
+        typedef bind4<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        typedef lambda< typename F::arg5, Tag, false_ > l5;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        typedef typename l5::is_le is_le5;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+            > is_le;
+
+        typedef bind5<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type, typename l5::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Protect
+    >
+struct lambda
+{
+    /// Metafunction forwarding confuses MSVC 6.x
+    typedef typename aux::template_arity<T>::type arity_;
+    typedef typename aux::lambda_impl<arity_>
+        ::template result_< T,Tag,Protect > l_;
+
+    typedef typename l_::type type;
+    typedef typename l_::is_le is_le;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect))
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/less.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/less.hpp
new file mode 100644
index 0000000..6d5200c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/less.hpp
@@ -0,0 +1,98 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less
+
+    : less_impl<
+          typename less_tag<N1>::type
+        , typename less_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N2)::value >
+             BOOST_MPL_AUX_VALUE_WKND(N1)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp
new file mode 100644
index 0000000..ca408b4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp
@@ -0,0 +1,98 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less_equal
+
+    : less_equal_impl<
+          typename less_equal_tag<N1>::type
+        , typename less_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, less_equal, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <=
+             BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/list.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/list.hpp
new file mode 100644
index 0000000..cdef853
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/list.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct list;
+
+template<
+     
+    >
+struct list<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list0<  >
+{
+    typedef list0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct list<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list1<T0>
+{
+    typedef typename list1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct list<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list2< T0,T1 >
+{
+    typedef typename list2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct list<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list3< T0,T1,T2 >
+{
+    typedef typename list3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct list<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list4< T0,T1,T2,T3 >
+{
+    typedef typename list4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct list<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list5< T0,T1,T2,T3,T4 >
+{
+    typedef typename list5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : list15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : list16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : list17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : list18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : list19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct list
+    : list20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp
new file mode 100644
index 0000000..8194c09
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct list_c;
+
+template<
+      typename T
+    >
+struct list_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list0_c<T>
+{
+    typedef typename list0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct list_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list1_c< T,C0 >
+{
+    typedef typename list1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct list_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list2_c< T,C0,C1 >
+{
+    typedef typename list2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct list_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list3_c< T,C0,C1,C2 >
+{
+    typedef typename list3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct list_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : list18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : list19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct list_c
+    : list20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/map.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/map.hpp
new file mode 100644
index 0000000..54c9678
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/map.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct map;
+
+template<
+     
+    >
+struct map<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map0<  >
+{
+    typedef map0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct map<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map1<T0>
+{
+    typedef typename map1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct map<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map2< T0,T1 >
+{
+    typedef typename map2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct map<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map3< T0,T1,T2 >
+{
+    typedef typename map3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct map<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map4< T0,T1,T2,T3 >
+{
+    typedef typename map4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct map<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map5< T0,T1,T2,T3,T4 >
+{
+    typedef typename map5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : map15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : map16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : map17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : map18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : map19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct map
+    : map20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp
new file mode 100644
index 0000000..ae83970
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp
@@ -0,0 +1,156 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct minus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct minus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct minus
+    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , minus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct minus< N1,N2,N3,N4,na >
+
+    : minus< minus< minus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct minus< N1,N2,N3,na,na >
+
+    : minus< minus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct minus< N1,N2,na,na,na >
+    : minus_impl<
+          typename minus_tag<N1>::type
+        , typename minus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct minus_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 - n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::minus_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp
new file mode 100644
index 0000000..07b20e5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp
@@ -0,0 +1,111 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct modulus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct modulus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct modulus
+
+    : modulus_impl<
+          typename modulus_tag<N1>::type
+        , typename modulus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, modulus, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct modulus_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 % n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::modulus_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp
new file mode 100644
index 0000000..e5b8543
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp
@@ -0,0 +1,98 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct not_equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct not_equal_to
+
+    : not_equal_to_impl<
+          typename not_equal_to_tag<N1>::type
+        , typename not_equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, not_equal_to, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+    {
+        BOOST_STATIC_CONSTANT(bool, value =
+             ( BOOST_MPL_AUX_VALUE_WKND(N1)::value !=
+             BOOST_MPL_AUX_VALUE_WKND(N2)::value )
+            );
+        typedef bool_<value> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/or.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/or.hpp
new file mode 100644
index 0000000..f0c868d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/or.hpp
@@ -0,0 +1,69 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct or_impl
+    : true_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct or_impl< false,T1,T2,T3,T4 >
+    : or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , false_
+        >
+{
+};
+
+template<>
+struct or_impl<
+          false
+        , false_, false_, false_, false_
+        >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = false_, typename T4 = false_, typename T5 = false_
+    >
+struct or_
+
+    : aux::or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , or_
+        , ( T1, T2, T3, T4, T5)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , or_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp
new file mode 100644
index 0000000..0b0cc25
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#' 
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp
new file mode 100644
index 0000000..e600269
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp
@@ -0,0 +1,156 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct plus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct plus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct plus
+    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , plus
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct plus< N1,N2,N3,N4,na >
+
+    : plus< plus< plus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct plus< N1,N2,N3,na,na >
+
+    : plus< plus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct plus< N1,N2,na,na,na >
+    : plus_impl<
+          typename plus_tag<N1>::type
+        , typename plus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct plus_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 + n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::plus_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp
new file mode 100644
index 0000000..e7a7f00
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp
@@ -0,0 +1,11 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/quote.hpp" header
+// -- DO NOT modify by hand!
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp
new file mode 100644
index 0000000..cf80c4b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef fwd_state0 bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef fwd_state1 bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef fwd_state2 bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef fwd_state3 bkwd_state3;
+    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef fwd_state4 bkwd_state4;
+    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter4 iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef reverse_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , iter4
+        , Last
+        , fwd_state4
+        , BackwardOp
+        , ForwardOp
+        > nested_chunk;
+
+    typedef typename nested_chunk::state bkwd_state4;
+    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef reverse_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , typename deref<First>::type
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp
new file mode 100644
index 0000000..037c15e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef fwd_state0 bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef fwd_state1 bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef fwd_state2 bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef fwd_state3 bkwd_state3;
+    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef fwd_state4 bkwd_state4;
+    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter4 iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef reverse_iter_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , iter4
+        , Last
+        , fwd_state4
+        , BackwardOp
+        , ForwardOp
+        > nested_chunk;
+
+    typedef typename nested_chunk::state bkwd_state4;
+    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef reverse_iter_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , First
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/set.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/set.hpp
new file mode 100644
index 0000000..7ab0242
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/set.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct set;
+
+template<
+     
+    >
+struct set<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set0<  >
+{
+    typedef set0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct set<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set1<T0>
+{
+    typedef typename set1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct set<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set2< T0,T1 >
+{
+    typedef typename set2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct set<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set3< T0,T1,T2 >
+{
+    typedef typename set3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct set<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set4< T0,T1,T2,T3 >
+{
+    typedef typename set4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct set<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set5< T0,T1,T2,T3,T4 >
+{
+    typedef typename set5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : set15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : set16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : set17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : set18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : set19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct set
+    : set20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp
new file mode 100644
index 0000000..337e930
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct set_c;
+
+template<
+      typename T
+    >
+struct set_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set0_c<T>
+{
+    typedef typename set0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct set_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set1_c< T,C0 >
+{
+    typedef typename set1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct set_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set2_c< T,C0,C1 >
+{
+    typedef typename set2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct set_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set3_c< T,C0,C1,C2 >
+{
+    typedef typename set3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct set_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : set18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : set19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct set_c
+    : set20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp
new file mode 100644
index 0000000..d296cd4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp
@@ -0,0 +1,110 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_left_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_left_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_left
+
+    : shift_left_impl<
+          typename shift_left_tag<N1>::type
+        , typename shift_left_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_left, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, typename Shift, T n, Shift s >
+struct shift_left_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n << s));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+        : aux::shift_left_wknd<
+              typename N::value_type
+            , typename S::value_type
+            , N::value
+            , S::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp
new file mode 100644
index 0000000..f0b7f09
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp
@@ -0,0 +1,110 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_right_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_right_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_right
+
+    : shift_right_impl<
+          typename shift_right_tag<N1>::type
+        , typename shift_right_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, shift_right, (N1, N2))
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, typename Shift, T n, Shift s >
+struct shift_right_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n >> s));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+        : aux::shift_right_wknd<
+              typename N::value_type
+            , typename S::value_type
+            , N::value
+            , S::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp
new file mode 100644
index 0000000..c989170
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp
@@ -0,0 +1,40 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< bool >
+struct template_arity_impl
+{
+    template< typename F > struct result_
+        : mpl::int_< -1 >
+    {
+    };
+};
+
+template<>
+struct template_arity_impl<true>
+{
+    template< typename F > struct result_
+        : F::arity
+    {
+    };
+};
+
+template< typename F >
+struct template_arity
+    : template_arity_impl< ::pdalboost::mpl::aux::has_rebind<F>::value >
+        ::template result_<F>
+{
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/times.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/times.hpp
new file mode 100644
index 0000000..f36c964
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/times.hpp
@@ -0,0 +1,156 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct times_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct times_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct times
+    : times< times< times< times< N1,N2 >, N3>, N4>, N5>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          5
+        , times
+        , ( N1, N2, N3, N4, N5 )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct times< N1,N2,N3,N4,na >
+
+    : times< times< times< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct times< N1,N2,N3,na,na >
+
+    : times< times< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct times< N1,N2,na,na,na >
+    : times_impl<
+          typename times_tag<N1>::type
+        , typename times_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T, T n1, T n2 >
+struct times_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value  = (n1 * n2));
+    typedef integral_c< T,value > type;
+};
+
+}
+
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+        : aux::times_wknd<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , N1::value
+            , N2::value
+            >::type
+
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp
new file mode 100644
index 0000000..2d78b38
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+
+template< typename F, typename Args >
+struct unpack_args_impl< 0,F,Args >
+    : apply0<
+          F
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 1,F,Args >
+    : apply1<
+          F
+        , typename at_c< Args,0 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 2,F,Args >
+    : apply2<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 3,F,Args >
+    : apply3<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 4,F,Args >
+    : apply4<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 5,F,Args >
+    : apply5<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        , typename at_c< Args,4 >::type
+        >
+{
+};
+
+}
+
+template<
+      typename F
+    >
+struct unpack_args
+{
+    template< typename Args > struct apply
+
+        : aux::unpack_args_impl< size<Args>::value,F, Args >
+
+    {
+    };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp
new file mode 100644
index 0000000..809efca
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct vector;
+
+template<
+     
+    >
+struct vector<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct vector<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct vector<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct vector<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct vector<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct vector<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct vector
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp
new file mode 100644
index 0000000..323872c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp
@@ -0,0 +1,309 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct vector_c;
+
+template<
+      typename T
+    >
+struct vector_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector0_c<T>
+{
+    typedef typename vector0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct vector_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector1_c< T, T(C0) >
+{
+    typedef typename vector1_c< T, T(C0) >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct vector_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector2_c< T, T(C0), T(C1) >
+{
+    typedef typename vector2_c< T, T(C0), T(C1) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct vector_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector3_c< T, T(C0), T(C1), T(C2) >
+{
+    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >
+{
+    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >
+{
+    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >
+{
+    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >
+{
+    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >
+{
+    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >
+{
+    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >
+{
+    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >
+{
+    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >
+{
+    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >
+{
+    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >
+{
+    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >
+{
+    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >
+{
+    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >
+{
+    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >
+{
+    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >
+{
+    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct vector_c
+    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >
+{
+    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp
new file mode 100644
index 0000000..8d91863
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_backward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_backward;
+template<>
+struct advance_backward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_backward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_backward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_backward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_backward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename prior<iter0>::type iter1;
+        typedef typename prior<iter1>::type iter2;
+        typedef typename prior<iter2>::type iter3;
+        typedef typename prior<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_backward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_backward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_backward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp
new file mode 100644
index 0000000..1d13df3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/advance_forward.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< long N > struct advance_forward;
+template<>
+struct advance_forward<0>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef iter0 type;
+    };
+};
+
+template<>
+struct advance_forward<1>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef iter1 type;
+    };
+};
+
+template<>
+struct advance_forward<2>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef iter2 type;
+    };
+};
+
+template<>
+struct advance_forward<3>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef iter3 type;
+    };
+};
+
+template<>
+struct advance_forward<4>
+{
+    template< typename Iterator > struct apply
+    {
+        typedef Iterator iter0;
+        typedef typename next<iter0>::type iter1;
+        typedef typename next<iter1>::type iter2;
+        typedef typename next<iter2>::type iter3;
+        typedef typename next<iter3>::type iter4;
+        typedef iter4 type;
+    };
+};
+
+template< long N >
+struct advance_forward
+{
+    template< typename Iterator > struct apply
+    {
+        typedef typename apply_wrap1<
+              advance_forward<4>
+            , Iterator
+            >::type chunk_result_;
+
+        typedef typename apply_wrap1<
+              advance_forward<(
+                (N - 4) < 0
+                    ? 0
+                    : N - 4
+                    )>
+            , chunk_result_
+            >::type type;
+    };
+};
+
+}}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/and.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/and.hpp
new file mode 100644
index 0000000..d3153c5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/and.hpp
@@ -0,0 +1,64 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/and.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+    : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+    : and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , true_
+        >
+{
+};
+
+template<>
+struct and_impl<
+          true
+        , true_, true_, true_, true_
+        >
+    : true_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = true_, typename T4 = true_, typename T5 = true_
+    >
+struct and_
+
+    : aux::and_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , and_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/apply.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/apply.hpp
new file mode 100644
index 0000000..06a79c4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/apply.hpp
@@ -0,0 +1,139 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+    >
+struct apply0
+
+    : apply_wrap0<
+          typename lambda<F>::type
+       
+        >
+{
+};
+
+template<
+      typename F
+    >
+struct apply< F,na,na,na,na,na >
+    : apply0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply1
+
+    : apply_wrap1<
+          typename lambda<F>::type
+        , T1
+        >
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct apply< F,T1,na,na,na,na >
+    : apply1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2
+
+    : apply_wrap2<
+          typename lambda<F>::type
+        , T1, T2
+        >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply< F,T1,T2,na,na,na >
+    : apply2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3
+
+    : apply_wrap3<
+          typename lambda<F>::type
+        , T1, T2, T3
+        >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply< F,T1,T2,T3,na,na >
+    : apply3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4
+
+    : apply_wrap4<
+          typename lambda<F>::type
+        , T1, T2, T3, T4
+        >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply< F,T1,T2,T3,T4,na >
+    : apply4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5
+
+    : apply_wrap5<
+          typename lambda<F>::type
+        , T1, T2, T3, T4, T5
+        >
+{
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply
+    : apply5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp
new file mode 100644
index 0000000..a309ea1
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp
@@ -0,0 +1,52 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na
+    >
+struct apply;
+
+template<
+      typename F
+    >
+struct apply0;
+
+template<
+      typename F, typename T1
+    >
+struct apply1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct apply2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct apply3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct apply4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct apply5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp
new file mode 100644
index 0000000..407bbd6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp
@@ -0,0 +1,84 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/apply_wrap.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F
+
+    , typename has_apply_ = typename aux::has_apply<F>::type
+
+    >
+struct apply_wrap0
+
+    : F::template apply<  >
+{
+};
+
+template< typename F >
+struct apply_wrap0< F,true_ >
+    : F::apply
+{
+};
+
+template<
+      typename F, typename T1
+
+    >
+struct apply_wrap1
+
+    : F::template apply<T1>
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+
+    >
+struct apply_wrap2
+
+    : F::template apply< T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+
+    >
+struct apply_wrap3
+
+    : F::template apply< T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+
+    >
+struct apply_wrap4
+
+    : F::template apply< T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+
+    >
+struct apply_wrap5
+
+    : F::template apply< T1,T2,T3,T4,T5 >
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/arg.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/arg.hpp
new file mode 100644
index 0000000..6f2f8a8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/arg.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Peter Dimov 2001-2002
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/arg.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+template<> struct arg< -1 >
+{
+    BOOST_STATIC_CONSTANT(int, value  = -1);
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<1>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 1);
+    typedef arg<2> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U1 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<2>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 2);
+    typedef arg<3> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U2 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<3>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 3);
+    typedef arg<4> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U3 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<4>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 4);
+    typedef arg<5> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U4 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+template<> struct arg<5>
+{
+    BOOST_STATIC_CONSTANT(int, value  = 5);
+    typedef arg<6> next;
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, tag)
+    BOOST_MPL_AUX_ARG_TYPEDEF(na, type)
+
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+        typedef U5 type;
+        BOOST_MPL_AUX_ASSERT_NOT_NA(type);
+    };
+};
+
+BOOST_MPL_AUX_NONTYPE_ARITY_SPEC(1,int, arg)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp
new file mode 100644
index 0000000..ef30acc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp
@@ -0,0 +1,440 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+    typedef bind< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F
+    >
+struct bind< F,na,na,na,na,na >
+    : bind0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1
+    >
+struct bind< F,T1,na,na,na,na >
+    : bind1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind< F,T1,T2,na,na,na >
+    : bind2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind< F,T1,T2,T3,na,na >
+    : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind< F,T1,T2,T3,T4,na >
+    : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
+        typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
+
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind
+    : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+      typename Tag, typename T1, typename T2, typename T3
+    >
+struct bind3<
+      quote3< if_,Tag >
+    , T1, T2, T3
+    >
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef mpl::arg<1> n1;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef typename if_<
+              typename t1::type
+            , t2, t3
+            >::type f_;
+
+     public:
+        typedef typename f_::type type;
+    };
+};
+
+template<
+      template< typename T1, typename T2, typename T3 > class F, typename Tag
+    >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct eval_if;
+
+template<
+      typename Tag, typename T1, typename T2, typename T3
+    >
+struct bind3<
+      quote3< eval_if,Tag >
+    , T1, T2, T3
+    >
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef mpl::arg<1> n1;
+        typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
+        typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
+        typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
+        typedef typename eval_if<
+              typename t1::type
+            , t2, t3
+            >::type f_;
+
+     public:
+        typedef typename f_::type type;
+    };
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/bind.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/bind.hpp
new file mode 100644
index 0000000..14ed6a3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/bind.hpp
@@ -0,0 +1,561 @@
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      typename T, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+template<
+      typename T
+    , typename Arg
+    >
+struct replace_unnamed_arg
+{
+    typedef Arg next;
+    typedef T type;
+};
+
+template<
+      typename Arg
+    >
+struct replace_unnamed_arg< arg< -1 >, Arg >
+{
+    typedef typename Arg::next next;
+    typedef Arg type;
+};
+
+template<
+      int N, typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
+{
+    typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
+{
+    typedef bind< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+template<
+      typename F
+    >
+struct bind0
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+     public:
+        typedef typename apply_wrap0<
+              f_
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind0<F>, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind0<F> f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
+
+template<
+      typename F
+    >
+struct bind< F,na,na,na,na,na >
+    : bind0<F>
+{
+};
+
+template<
+      typename F, typename T1
+    >
+struct bind1
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+     public:
+        typedef typename apply_wrap1<
+              f_
+            , typename t1::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename U1, typename U2, typename U3
+    , typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind1< F,T1 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind1< F,T1 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
+
+template<
+      typename F, typename T1
+    >
+struct bind< F,T1,na,na,na,na >
+    : bind1< F,T1 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+     public:
+        typedef typename apply_wrap2<
+              f_
+            , typename t1::type, typename t2::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename U1, typename U2
+    , typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind2< F,T1,T2 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind2< F,T1,T2 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind< F,T1,T2,na,na,na >
+    : bind2< F,T1,T2 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+     public:
+        typedef typename apply_wrap3<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename U1
+    , typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind3< F,T1,T2,T3 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind< F,T1,T2,T3,na,na >
+    : bind3< F,T1,T2,T3 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+     public:
+        typedef typename apply_wrap4<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename U1, typename U2, typename U3, typename U4, typename U5
+    >
+struct resolve_bind_arg<
+      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind4< F,T1,T2,T3,T4 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind< F,T1,T2,T3,T4,na >
+    : bind4< F,T1,T2,T3,T4 >
+{
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
+        ///
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef aux::replace_unnamed_arg< T4,n4 > r4;
+        typedef typename r4::type a4;
+        typedef typename r4::next n5;
+        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
+        ///
+        typedef aux::replace_unnamed_arg< T5,n5 > r5;
+        typedef typename r5::type a5;
+        typedef typename r5::next n6;
+        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
+        ///
+     public:
+        typedef typename apply_wrap5<
+              f_
+            , typename t1::type, typename t2::type, typename t3::type
+            , typename t4::type, typename t5::type
+            >::type type;
+
+    };
+};
+
+namespace aux {
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename U1, typename U2, typename U3, typename U4
+    , typename U5
+    >
+struct resolve_bind_arg<
+      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
+    >
+{
+    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
+    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
+
+/// primary template (not a specialization!)
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind
+    : bind5< F,T1,T2,T3,T4,T5 >
+{
+};
+
+/// if_/eval_if specializations
+template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct if_;
+
+template<
+      typename Tag, typename T1, typename T2, typename T3
+    >
+struct bind3<
+      quote3< if_,Tag >
+    , T1, T2, T3
+    >
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef mpl::arg<1> n1;
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef typename if_<
+              typename t1::type
+            , t2, t3
+            >::type f_;
+
+     public:
+        typedef typename f_::type type;
+    };
+};
+
+template<
+      template< typename T1, typename T2, typename T3 > class F, typename Tag
+    >
+struct quote3;
+
+template< typename T1, typename T2, typename T3 > struct eval_if;
+
+template<
+      typename Tag, typename T1, typename T2, typename T3
+    >
+struct bind3<
+      quote3< eval_if,Tag >
+    , T1, T2, T3
+    >
+{
+    template<
+          typename U1 = na, typename U2 = na, typename U3 = na
+        , typename U4 = na, typename U5 = na
+        >
+    struct apply
+    {
+     private:
+        typedef mpl::arg<1> n1;
+        typedef aux::replace_unnamed_arg< T1,n1 > r1;
+        typedef typename r1::type a1;
+        typedef typename r1::next n2;
+        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
+        ///
+        typedef aux::replace_unnamed_arg< T2,n2 > r2;
+        typedef typename r2::type a2;
+        typedef typename r2::next n3;
+        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
+        ///
+        typedef aux::replace_unnamed_arg< T3,n3 > r3;
+        typedef typename r3::type a3;
+        typedef typename r3::next n4;
+        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
+        ///
+        typedef typename eval_if<
+              typename t1::type
+            , t2, t3
+            >::type f_;
+
+     public:
+        typedef typename f_::type type;
+    };
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp
new file mode 100644
index 0000000..439d82f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp
@@ -0,0 +1,52 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bind_fwd.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename F, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na
+    >
+struct bind;
+
+template<
+      typename F
+    >
+struct bind0;
+
+template<
+      typename F, typename T1
+    >
+struct bind1;
+
+template<
+      typename F, typename T1, typename T2
+    >
+struct bind2;
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    >
+struct bind3;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    >
+struct bind4;
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct bind5;
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/bitand.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/bitand.hpp
new file mode 100644
index 0000000..e83d7dc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/bitand.hpp
@@ -0,0 +1,142 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitand.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitand_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitand_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitand_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitand_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitand_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitand_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitand_
+    : bitand_< bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>, N5>
+{
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitand_< N1,N2,N3,N4,na >
+
+    : bitand_< bitand_< bitand_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitand_< N1,N2,N3,na,na >
+
+    : bitand_< bitand_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitand_< N1,N2,na,na,na >
+    : bitand_impl<
+          typename bitand_tag<N1>::type
+        , typename bitand_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitand_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitand_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitand_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  & BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/bitor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/bitor.hpp
new file mode 100644
index 0000000..328b8f1
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/bitor.hpp
@@ -0,0 +1,142 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitor_
+    : bitor_< bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>, N5>
+{
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitor_< N1,N2,N3,N4,na >
+
+    : bitor_< bitor_< bitor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitor_< N1,N2,N3,na,na >
+
+    : bitor_< bitor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitor_< N1,N2,na,na,na >
+    : bitor_impl<
+          typename bitor_tag<N1>::type
+        , typename bitor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  | BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/bitxor.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/bitxor.hpp
new file mode 100644
index 0000000..aaa8e71
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/bitxor.hpp
@@ -0,0 +1,142 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/bitxor.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct bitxor_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< bitxor_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< bitxor_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct bitxor_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct bitxor_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct bitxor_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct bitxor_
+    : bitxor_< bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>, N5>
+{
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct bitxor_< N1,N2,N3,N4,na >
+
+    : bitxor_< bitxor_< bitxor_< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct bitxor_< N1,N2,N3,na,na >
+
+    : bitxor_< bitxor_< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct bitxor_< N1,N2,na,na,na >
+    : bitxor_impl<
+          typename bitxor_tag<N1>::type
+        , typename bitxor_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , bitxor_
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, bitxor_)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct bitxor_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  ^ BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/deque.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/deque.hpp
new file mode 100644
index 0000000..bc99b03
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/deque.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/deque.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct deque;
+
+template<
+     
+    >
+struct deque<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct deque<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct deque<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct deque<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct deque<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct deque<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct deque<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct deque
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/divides.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/divides.hpp
new file mode 100644
index 0000000..72376e5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/divides.hpp
@@ -0,0 +1,141 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/divides.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct divides_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< divides_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< divides_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct divides_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct divides_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct divides_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct divides
+    : divides< divides< divides< divides< N1,N2 >, N3>, N4>, N5>
+{
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct divides< N1,N2,N3,N4,na >
+
+    : divides< divides< divides< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct divides< N1,N2,N3,na,na >
+
+    : divides< divides< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct divides< N1,N2,na,na,na >
+    : divides_impl<
+          typename divides_tag<N1>::type
+        , typename divides_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , divides
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, divides)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct divides_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  / BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/equal_to.hpp
new file mode 100644
index 0000000..811a209
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/equal_to.hpp
@@ -0,0 +1,92 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct equal_to
+
+    : equal_to_impl<
+          typename equal_to_tag<N1>::type
+        , typename equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value  == BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp
new file mode 100644
index 0000000..728565c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl
+{
+    typedef fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,First,Last,State,ForwardOp >
+    : fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp
new file mode 100644
index 0000000..6acccb2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp
@@ -0,0 +1,554 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+   
+    >
+struct lambda
+{
+    typedef false_ is_le;
+    typedef T result_;
+    typedef T type;
+};
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+template< int N, typename Tag >
+struct lambda< arg<N>, Tag >
+{
+    typedef true_ is_le;
+    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
+    typedef mpl::protect<result_> type;
+};
+
+template<
+      typename F
+    , typename Tag
+    >
+struct lambda<
+          bind0<F>
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind0<
+          F
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1
+{
+    typedef F<
+          typename L1::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1 > class F
+    , typename L1
+    >
+struct le_result1< true_,Tag,F,L1 >
+{
+    typedef bind1<
+          quote1< F,Tag >
+        , typename L1::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1 > class F
+    , typename T1
+    , typename Tag
+    >
+struct lambda<
+          F<T1>
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef typename l1::is_le is_le1;
+    typedef typename aux::lambda_or<
+          is_le1::value
+        >::type is_le;
+
+    typedef aux::le_result1<
+          is_le, Tag, F, l1
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1
+    , typename Tag
+    >
+struct lambda<
+          bind1< F,T1 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind1<
+          F
+        , T1
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2
+{
+    typedef F<
+          typename L1::type, typename L2::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2 > class F
+    , typename L1, typename L2
+    >
+struct le_result2< true_,Tag,F,L1,L2 >
+{
+    typedef bind2<
+          quote2< F,Tag >
+        , typename L1::result_, typename L2::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value
+        >::type is_le;
+
+    typedef aux::le_result2<
+          is_le, Tag, F, l1, l2
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2
+    , typename Tag
+    >
+struct lambda<
+          bind2< F,T1,T2 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind2<
+          F
+        , T1, T2
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3 > class F
+    , typename L1, typename L2, typename L3
+    >
+struct le_result3< true_,Tag,F,L1,L2,L3 >
+{
+    typedef bind3<
+          quote3< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value
+        >::type is_le;
+
+    typedef aux::le_result3<
+          is_le, Tag, F, l1, l2, l3
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3
+    , typename Tag
+    >
+struct lambda<
+          bind3< F,T1,T2,T3 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind3<
+          F
+        , T1, T2, T3
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename L1, typename L2, typename L3, typename L4
+    >
+struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
+{
+    typedef bind4<
+          quote4< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        >::type is_le;
+
+    typedef aux::le_result4<
+          is_le, Tag, F, l1, l2, l3, l4
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename Tag
+    >
+struct lambda<
+          bind4< F,T1,T2,T3,T4 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind4<
+          F
+        , T1, T2, T3, T4
+        > result_;
+
+    typedef result_ type;
+};
+
+namespace aux {
+
+template<
+      typename IsLE, typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5
+{
+    typedef F<
+          typename L1::type, typename L2::type, typename L3::type
+        , typename L4::type, typename L5::type
+        > result_;
+
+    typedef result_ type;
+};
+
+template<
+      typename Tag
+    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
+    , typename L1, typename L2, typename L3, typename L4, typename L5
+    >
+struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
+{
+    typedef bind5<
+          quote5< F,Tag >
+        , typename L1::result_, typename L2::result_, typename L3::result_
+        , typename L4::result_, typename L5::result_
+        > result_;
+
+    typedef mpl::protect<result_> type;
+};
+
+} // namespace aux
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename T1, typename T2, typename T3, typename T4, typename T5
+    , typename Tag
+    >
+struct lambda<
+          F< T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef lambda< T1,Tag > l1;
+    typedef lambda< T2,Tag > l2;
+    typedef lambda< T3,Tag > l3;
+    typedef lambda< T4,Tag > l4;
+    typedef lambda< T5,Tag > l5;
+    
+    typedef typename l1::is_le is_le1;
+    typedef typename l2::is_le is_le2;
+    typedef typename l3::is_le is_le3;
+    typedef typename l4::is_le is_le4;
+    typedef typename l5::is_le is_le5;
+    
+
+    typedef typename aux::lambda_or<
+          is_le1::value, is_le2::value, is_le3::value, is_le4::value
+        , is_le5::value
+        >::type is_le;
+
+    typedef aux::le_result5<
+          is_le, Tag, F, l1, l2, l3, l4, l5
+        > le_result_;
+
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind5< F,T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind5<
+          F
+        , T1, T2, T3, T4, T5
+        > result_;
+
+    typedef result_ type;
+};
+
+/// special case for 'protect'
+template< typename T, typename Tag >
+struct lambda< mpl::protect<T>, Tag >
+{
+    typedef false_ is_le;
+    typedef mpl::protect<T> result_;
+    typedef result_ type;
+};
+
+/// specializations for the main 'bind' form
+
+template<
+      typename F, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    , typename Tag
+    >
+struct lambda<
+          bind< F,T1,T2,T3,T4,T5 >
+        , Tag
+       
+        >
+{
+    typedef false_ is_le;
+    typedef bind< F,T1,T2,T3,T4,T5 > result_;
+    typedef result_ type;
+};
+
+/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
+
+template<
+      typename F, typename Tag1, typename Tag2
+    >
+struct lambda<
+          lambda< F,Tag1 >
+        , Tag2
+        >
+{
+    typedef lambda< F,Tag2 > l1;
+    typedef lambda< Tag1,Tag2 > l2;
+    typedef typename l1::is_le is_le;
+    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
+    typedef typename le_result_::result_ result_;
+    typedef typename le_result_::type type;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, lambda)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/greater.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/greater.hpp
new file mode 100644
index 0000000..b3373f9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/greater.hpp
@@ -0,0 +1,92 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater
+
+    : greater_impl<
+          typename greater_tag<N1>::type
+        , typename greater_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value > BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp
new file mode 100644
index 0000000..c7246d8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp
@@ -0,0 +1,92 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/greater_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct greater_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct greater_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct greater_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct greater_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct greater_equal
+
+    : greater_equal_impl<
+          typename greater_equal_tag<N1>::type
+        , typename greater_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct greater_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/inherit.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/inherit.hpp
new file mode 100644
index 0000000..ed32771
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/inherit.hpp
@@ -0,0 +1,125 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/inherit.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    >
+struct inherit2
+    : T1, T2
+{
+    typedef inherit2 type;
+};
+
+template< typename T1 >
+struct inherit2< T1,empty_base >
+{
+    typedef T1 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
+};
+
+template< typename T2 >
+struct inherit2< empty_base,T2 >
+{
+    typedef T2 type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
+};
+
+template<>
+struct inherit2< empty_base,empty_base >
+{
+    typedef empty_base type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, inherit2)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na
+    >
+struct inherit3
+    : inherit2<
+          typename inherit2<
+              T1, T2
+            >::type
+        , T3
+        >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, inherit3)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    >
+struct inherit4
+    : inherit2<
+          typename inherit3<
+              T1, T2, T3
+            >::type
+        , T4
+        >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC(4, inherit4)
+
+template<
+      typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
+    , typename T5 = na
+    >
+struct inherit5
+    : inherit2<
+          typename inherit4<
+              T1, T2, T3, T4
+            >::type
+        , T5
+        >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC(5, inherit5)
+
+/// primary template
+
+template<
+      typename T1 = empty_base, typename T2 = empty_base
+    , typename T3 = empty_base, typename T4 = empty_base
+    , typename T5 = empty_base
+    >
+struct inherit
+    : inherit5< T1,T2,T3,T4,T5 >
+{
+};
+
+template<>
+struct inherit< na,na,na,na,na >
+{
+    template<
+
+          typename T1 = empty_base, typename T2 = empty_base
+        , typename T3 = empty_base, typename T4 = empty_base
+        , typename T5 = empty_base
+
+        >
+    struct apply
+        : inherit< T1,T2,T3,T4,T5 >
+    {
+    };
+};
+
+BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp
new file mode 100644
index 0000000..74c0cc6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp
@@ -0,0 +1,133 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename Iterator, typename State >
+struct iter_fold_if_null_step
+{
+    typedef State state;
+    typedef Iterator iterator;
+};
+
+template< bool >
+struct iter_fold_if_step_impl
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef typename apply2< StateOp,State,Iterator >::type state;
+        typedef typename IteratorOp::type iterator;
+    };
+};
+
+template<>
+struct iter_fold_if_step_impl<false>
+{
+    template<
+          typename Iterator
+        , typename State
+        , typename StateOp
+        , typename IteratorOp
+        >
+    struct result_
+    {
+        typedef State state;
+        typedef Iterator iterator;
+    };
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_forward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename BackwardOp
+    , typename Predicate
+    >
+struct iter_fold_if_backward_step
+{
+    typedef typename apply2< Predicate,State,Iterator >::type not_last;
+    typedef typename iter_fold_if_step_impl<
+          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+        >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;
+
+    typedef typename impl_::state state;
+    typedef typename impl_::iterator iterator;
+};
+
+template<
+      typename Iterator
+    , typename State
+    , typename ForwardOp
+    , typename ForwardPredicate
+    , typename BackwardOp
+    , typename BackwardPredicate
+    >
+struct iter_fold_if_impl
+{
+ private:
+    typedef iter_fold_if_null_step< Iterator,State > forward_step0;
+    typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
+    typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
+    typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
+    typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
+    
+
+    typedef typename if_<
+          typename forward_step4::not_last
+        , iter_fold_if_impl<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            , ForwardOp
+            , ForwardPredicate
+            , BackwardOp
+            , BackwardPredicate
+            >
+        , iter_fold_if_null_step<
+              typename forward_step4::iterator
+            , typename forward_step4::state
+            >
+        >::type backward_step4;
+
+    typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
+    typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
+    typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
+    typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
+    
+
+ public:
+    typedef typename backward_step0::state state;
+    typedef typename backward_step4::iterator iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp
new file mode 100644
index 0000000..78329b3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp
@@ -0,0 +1,180 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 0,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 1,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef state1 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 2,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef state2 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 3,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef state3 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< 4,First,Last,State,ForwardOp >
+{
+    typedef First iter0;
+    typedef State state0;
+    typedef typename apply2< ForwardOp,state0,iter0 >::type state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,state1,iter1 >::type state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,state2,iter2 >::type state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,state3,iter3 >::type state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef state4 state;
+    typedef iter4 iterator;
+};
+
+template<
+      int N
+    , typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl
+{
+    typedef iter_fold_impl<
+          4
+        , First
+        , Last
+        , State
+        , ForwardOp
+        > chunk_;
+
+    typedef iter_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , typename chunk_::iterator
+        , Last
+        , typename chunk_::state
+        , ForwardOp
+        > res_;
+
+    typedef typename res_::state state;
+    typedef typename res_::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,First,Last,State,ForwardOp >
+    : iter_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , ForwardOp
+        >
+{
+};
+
+template<
+      typename Last
+    , typename State
+    , typename ForwardOp
+    >
+struct iter_fold_impl< -1,Last,Last,State,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp
new file mode 100644
index 0000000..17a5767
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp
@@ -0,0 +1,228 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template<
+      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
+    , bool C5 = false
+    >
+struct lambda_or
+    : true_
+{
+};
+
+template<>
+struct lambda_or< false,false,false,false,false >
+    : false_
+{
+};
+
+template< typename Arity > struct lambda_impl
+{
+    template< typename T, typename Tag, typename Protect > struct result_
+    {
+        typedef T type;
+        typedef is_placeholder<T> is_le;
+    };
+};
+
+template<> struct lambda_impl< int_<1> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef typename l1::is_le is_le1;
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
+            > is_le;
+
+        typedef bind1<
+              typename F::rebind
+            , typename l1::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<2> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
+            > is_le;
+
+        typedef bind2<
+              typename F::rebind
+            , typename l1::type, typename l2::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<3> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
+            > is_le;
+
+        typedef bind3<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<4> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
+            > is_le;
+
+        typedef bind4<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+template<> struct lambda_impl< int_<5> >
+{
+    template< typename F, typename Tag, typename Protect > struct result_
+    {
+        typedef lambda< typename F::arg1, Tag, false_ > l1;
+        typedef lambda< typename F::arg2, Tag, false_ > l2;
+        typedef lambda< typename F::arg3, Tag, false_ > l3;
+        typedef lambda< typename F::arg4, Tag, false_ > l4;
+        typedef lambda< typename F::arg5, Tag, false_ > l5;
+        
+        typedef typename l1::is_le is_le1;
+        typedef typename l2::is_le is_le2;
+        typedef typename l3::is_le is_le3;
+        typedef typename l4::is_le is_le4;
+        typedef typename l5::is_le is_le5;
+        
+
+        typedef aux::lambda_or<
+              BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
+            > is_le;
+
+        typedef bind5<
+              typename F::rebind
+            , typename l1::type, typename l2::type, typename l3::type
+            , typename l4::type, typename l5::type
+            > bind_;
+
+        typedef typename if_<
+              is_le
+            , if_< Protect, mpl::protect<bind_>, bind_ >
+            , identity<F>
+            >::type type_;
+
+        typedef typename type_::type type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename T
+    , typename Tag
+    , typename Protect
+    >
+struct lambda
+{
+    /// Metafunction forwarding confuses MSVC 6.x
+    typedef typename aux::template_arity<T>::type arity_;
+    typedef typename aux::lambda_impl<arity_>
+        ::template result_< T,Tag,Protect > l_;
+
+    typedef typename l_::type type;
+    typedef typename l_::is_le is_le;
+};
+
+BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
+
+template<
+      typename T
+    >
+struct is_lambda_expression
+    : lambda<T>::is_le
+{
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/less.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/less.hpp
new file mode 100644
index 0000000..261014f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/less.hpp
@@ -0,0 +1,92 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less
+
+    : less_impl<
+          typename less_tag<N1>::type
+        , typename less_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N2)::value > BOOST_MPL_AUX_VALUE_WKND(N1)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/less_equal.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/less_equal.hpp
new file mode 100644
index 0000000..91b6d66
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/less_equal.hpp
@@ -0,0 +1,92 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/less_equal.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct less_equal_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< less_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< less_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct less_equal_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct less_equal_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct less_equal_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct less_equal
+
+    : less_equal_impl<
+          typename less_equal_tag<N1>::type
+        , typename less_equal_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, less_equal)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct less_equal_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value <= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/list.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/list.hpp
new file mode 100644
index 0000000..cdef853
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/list.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct list;
+
+template<
+     
+    >
+struct list<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list0<  >
+{
+    typedef list0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct list<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list1<T0>
+{
+    typedef typename list1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct list<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list2< T0,T1 >
+{
+    typedef typename list2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct list<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list3< T0,T1,T2 >
+{
+    typedef typename list3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct list<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list4< T0,T1,T2,T3 >
+{
+    typedef typename list4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct list<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list5< T0,T1,T2,T3,T4 >
+{
+    typedef typename list5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename list6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename list7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename list8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename list9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename list10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename list11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename list12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename list13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename list14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : list15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename list15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : list16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename list16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : list17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename list17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : list18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename list18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct list<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : list19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename list19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct list
+    : list20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename list20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/list_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/list_c.hpp
new file mode 100644
index 0000000..8194c09
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/list_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct list_c;
+
+template<
+      typename T
+    >
+struct list_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list0_c<T>
+{
+    typedef typename list0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct list_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list1_c< T,C0 >
+{
+    typedef typename list1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct list_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list2_c< T,C0,C1 >
+{
+    typedef typename list2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct list_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list3_c< T,C0,C1,C2 >
+{
+    typedef typename list3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct list_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename list4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename list5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename list6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename list7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename list8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename list9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename list10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename list11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename list12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename list13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename list14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename list15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename list16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : list17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename list17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : list18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename list18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct list_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : list19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename list19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct list_c
+    : list20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename list20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/map.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/map.hpp
new file mode 100644
index 0000000..54c9678
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/map.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/map.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct map;
+
+template<
+     
+    >
+struct map<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map0<  >
+{
+    typedef map0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct map<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map1<T0>
+{
+    typedef typename map1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct map<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map2< T0,T1 >
+{
+    typedef typename map2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct map<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map3< T0,T1,T2 >
+{
+    typedef typename map3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct map<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map4< T0,T1,T2,T3 >
+{
+    typedef typename map4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct map<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map5< T0,T1,T2,T3,T4 >
+{
+    typedef typename map5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename map6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename map7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename map8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename map9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename map10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename map11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename map12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename map13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename map14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : map15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename map15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : map16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename map16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : map17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename map17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : map18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename map18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct map<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : map19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename map19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct map
+    : map20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename map20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/minus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/minus.hpp
new file mode 100644
index 0000000..b96904a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/minus.hpp
@@ -0,0 +1,141 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/minus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct minus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< minus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< minus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct minus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct minus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct minus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct minus
+    : minus< minus< minus< minus< N1,N2 >, N3>, N4>, N5>
+{
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct minus< N1,N2,N3,N4,na >
+
+    : minus< minus< minus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct minus< N1,N2,N3,na,na >
+
+    : minus< minus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct minus< N1,N2,na,na,na >
+    : minus_impl<
+          typename minus_tag<N1>::type
+        , typename minus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , minus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, minus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct minus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  - BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/modulus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/modulus.hpp
new file mode 100644
index 0000000..4a4e24d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/modulus.hpp
@@ -0,0 +1,99 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/modulus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct modulus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< modulus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< modulus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct modulus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct modulus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct modulus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct modulus
+
+    : modulus_impl<
+          typename modulus_tag<N1>::type
+        , typename modulus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, modulus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct modulus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  % BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp
new file mode 100644
index 0000000..afd6d09
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp
@@ -0,0 +1,92 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/not_equal_to.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct not_equal_to_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< not_equal_to_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< not_equal_to_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct not_equal_to_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct not_equal_to_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct not_equal_to_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct not_equal_to
+
+    : not_equal_to_impl<
+          typename not_equal_to_tag<N1>::type
+        , typename not_equal_to_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, not_equal_to)
+
+}}
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct not_equal_to_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value != BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/or.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/or.hpp
new file mode 100644
index 0000000..24b02e9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/or.hpp
@@ -0,0 +1,64 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/or.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct or_impl
+    : true_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct or_impl< false,T1,T2,T3,T4 >
+    : or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4
+        , false_
+        >
+{
+};
+
+template<>
+struct or_impl<
+          false
+        , false_, false_, false_, false_
+        >
+    : false_
+{
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename T3 = false_, typename T4 = false_, typename T5 = false_
+    >
+struct or_
+
+    : aux::or_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T1)::value
+        , T2, T3, T4, T5
+        >
+
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(
+      2
+    , 5
+    , or_
+    )
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/placeholders.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/placeholders.hpp
new file mode 100644
index 0000000..0b0cc25
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/placeholders.hpp
@@ -0,0 +1,105 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/placeholders.hpp" header
+// -- DO NOT modify by hand!
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg< -1 > _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#' 
+/// specialization
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<1> _1;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_1)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_1;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<2> _2;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_2)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_2;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<3> _3;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_3)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_3;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<4> _4;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_4)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_4;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<5> _5;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_5)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_5;
+}
+
+}}
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<6> _6;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_6)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_6;
+}
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/plus.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/plus.hpp
new file mode 100644
index 0000000..a3334c6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/plus.hpp
@@ -0,0 +1,141 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/plus.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct plus_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< plus_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< plus_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct plus_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct plus_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct plus_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct plus
+    : plus< plus< plus< plus< N1,N2 >, N3>, N4>, N5>
+{
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct plus< N1,N2,N3,N4,na >
+
+    : plus< plus< plus< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct plus< N1,N2,N3,na,na >
+
+    : plus< plus< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct plus< N1,N2,na,na,na >
+    : plus_impl<
+          typename plus_tag<N1>::type
+        , typename plus_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , plus
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, plus)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct plus_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  + BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/quote.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/quote.hpp
new file mode 100644
index 0000000..1ef9aa3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/quote.hpp
@@ -0,0 +1,123 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/quote.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template< typename T, bool has_type_ >
+struct quote_impl
+    : T
+{
+};
+
+template< typename T >
+struct quote_impl< T,false >
+{
+    typedef T type;
+};
+
+template<
+      template< typename P1 > class F
+    , typename Tag = void_
+    >
+struct quote1
+{
+    template< typename U1 > struct apply
+
+        : quote_impl<
+              F<U1>
+            , aux::has_type< F<U1> >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2 > class F
+    , typename Tag = void_
+    >
+struct quote2
+{
+    template< typename U1, typename U2 > struct apply
+
+        : quote_impl<
+              F< U1,U2 >
+            , aux::has_type< F< U1,U2 > >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2, typename P3 > class F
+    , typename Tag = void_
+    >
+struct quote3
+{
+    template< typename U1, typename U2, typename U3 > struct apply
+
+        : quote_impl<
+              F< U1,U2,U3 >
+            , aux::has_type< F< U1,U2,U3 > >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template< typename P1, typename P2, typename P3, typename P4 > class F
+    , typename Tag = void_
+    >
+struct quote4
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4
+        >
+    struct apply
+
+        : quote_impl<
+              F< U1,U2,U3,U4 >
+            , aux::has_type< F< U1,U2,U3,U4 > >::value
+            >
+
+    {
+    };
+};
+
+template<
+      template<
+          typename P1, typename P2, typename P3, typename P4
+        , typename P5
+        >
+      class F
+    , typename Tag = void_
+    >
+struct quote5
+{
+    template<
+          typename U1, typename U2, typename U3, typename U4
+        , typename U5
+        >
+    struct apply
+
+        : quote_impl<
+              F< U1,U2,U3,U4,U5 >
+            , aux::has_type< F< U1,U2,U3,U4,U5 > >::value
+            >
+
+    {
+    };
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp
new file mode 100644
index 0000000..cf80c4b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef fwd_state0 bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef fwd_state1 bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef fwd_state2 bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef fwd_state3 bkwd_state3;
+    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef fwd_state4 bkwd_state4;
+    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter4 iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef reverse_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , iter4
+        , Last
+        , fwd_state4
+        , BackwardOp
+        , ForwardOp
+        > nested_chunk;
+
+    typedef typename nested_chunk::state bkwd_state4;
+    typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
+    typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
+    typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
+    typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef reverse_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State, typename deref<First>::type>::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , typename deref<First>::type
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp
new file mode 100644
index 0000000..037c15e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp
@@ -0,0 +1,231 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl;
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 0,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef fwd_state0 bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter0 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    
+
+    typedef fwd_state1 bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    typedef bkwd_state0 state;
+    typedef iter1 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 2,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    
+
+    typedef fwd_state2 bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter2 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 3,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    
+
+    typedef fwd_state3 bkwd_state3;
+    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter3 iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< 4,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef fwd_state4 bkwd_state4;
+    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef iter4 iterator;
+};
+
+template<
+      long N
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+    typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
+    typedef typename mpl::next<iter0>::type iter1;
+    typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
+    typedef typename mpl::next<iter1>::type iter2;
+    typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
+    typedef typename mpl::next<iter2>::type iter3;
+    typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
+    typedef typename mpl::next<iter3>::type iter4;
+    
+
+    typedef reverse_iter_fold_impl<
+          ( (N - 4) < 0 ? 0 : N - 4 )
+        , iter4
+        , Last
+        , fwd_state4
+        , BackwardOp
+        , ForwardOp
+        > nested_chunk;
+
+    typedef typename nested_chunk::state bkwd_state4;
+    typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
+    typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
+    typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
+    typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
+    
+
+    typedef bkwd_state0 state;
+    typedef typename nested_chunk::iterator iterator;
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< -1,First,Last,State,BackwardOp,ForwardOp >
+{
+    typedef reverse_iter_fold_impl<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2< ForwardOp,State,First >::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , First
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct reverse_iter_fold_impl< -1,Last,Last,State,BackwardOp,ForwardOp >
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+}}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/set.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/set.hpp
new file mode 100644
index 0000000..7ab0242
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/set.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct set;
+
+template<
+     
+    >
+struct set<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set0<  >
+{
+    typedef set0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct set<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set1<T0>
+{
+    typedef typename set1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct set<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set2< T0,T1 >
+{
+    typedef typename set2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct set<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set3< T0,T1,T2 >
+{
+    typedef typename set3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct set<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set4< T0,T1,T2,T3 >
+{
+    typedef typename set4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct set<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set5< T0,T1,T2,T3,T4 >
+{
+    typedef typename set5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename set6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename set7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename set8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename set9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename set10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename set11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename set12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename set13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename set14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : set15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename set15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : set16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename set16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : set17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename set17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : set18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename set18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct set<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : set19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename set19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct set
+    : set20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename set20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/set_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/set_c.hpp
new file mode 100644
index 0000000..337e930
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/set_c.hpp
@@ -0,0 +1,328 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/set_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct set_c;
+
+template<
+      typename T
+    >
+struct set_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set0_c<T>
+{
+    typedef typename set0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct set_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set1_c< T,C0 >
+{
+    typedef typename set1_c< T,C0 >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct set_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set2_c< T,C0,C1 >
+{
+    typedef typename set2_c< T,C0,C1 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct set_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set3_c< T,C0,C1,C2 >
+{
+    typedef typename set3_c< T,C0,C1,C2 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct set_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set4_c< T,C0,C1,C2,C3 >
+{
+    typedef typename set4_c< T,C0,C1,C2,C3 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set5_c< T,C0,C1,C2,C3,C4 >
+{
+    typedef typename set5_c< T,C0,C1,C2,C3,C4 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set6_c< T,C0,C1,C2,C3,C4,C5 >
+{
+    typedef typename set6_c< T,C0,C1,C2,C3,C4,C5 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+{
+    typedef typename set7_c< T,C0,C1,C2,C3,C4,C5,C6 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+{
+    typedef typename set8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+{
+    typedef typename set9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+{
+    typedef typename set10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+{
+    typedef typename set11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+{
+    typedef typename set12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+{
+    typedef typename set13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set14_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        >
+{
+    typedef typename set14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set15_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        >
+{
+    typedef typename set15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set16_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15
+        >
+{
+    typedef typename set16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : set17_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16
+        >
+{
+    typedef typename set17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : set18_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17
+        >
+{
+    typedef typename set18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct set_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : set19_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18
+        >
+{
+    typedef typename set19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct set_c
+    : set20_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, C19
+        >
+{
+    typedef typename set20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/shift_left.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/shift_left.hpp
new file mode 100644
index 0000000..719bee0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/shift_left.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_left.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_left_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_left_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_left_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_left_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_left_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_left_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_left
+
+    : shift_left_impl<
+          typename shift_left_tag<N1>::type
+        , typename shift_left_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_left)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_left_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  << BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/shift_right.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/shift_right.hpp
new file mode 100644
index 0000000..b8e5be1
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/shift_right.hpp
@@ -0,0 +1,97 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Jaap Suter 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/shift_right.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct shift_right_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< shift_right_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< shift_right_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct shift_right_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct shift_right_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct shift_right_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct shift_right
+
+    : shift_right_impl<
+          typename shift_right_tag<N1>::type
+        , typename shift_right_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 2, shift_right)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct shift_right_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N, typename S > struct apply
+
+        : integral_c<
+              typename N::value_type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N)::value
+                  >> BOOST_MPL_AUX_VALUE_WKND(S)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/template_arity.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/template_arity.hpp
new file mode 100644
index 0000000..a23fc23
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/template_arity.hpp
@@ -0,0 +1,11 @@
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/aux_/template_arity.hpp" header
+// -- DO NOT modify by hand!
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/times.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/times.hpp
new file mode 100644
index 0000000..db9329f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/times.hpp
@@ -0,0 +1,141 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/times.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Tag1
+    , typename Tag2
+    >
+struct times_impl
+    : if_c<
+          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
+              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
+            )
+
+        , aux::cast2nd_impl< times_impl< Tag1,Tag1 >,Tag1, Tag2 >
+        , aux::cast1st_impl< times_impl< Tag2,Tag2 >,Tag1, Tag2 >
+        >::type
+{
+};
+
+/// for Digital Mars C++/compilers with no CTPS/TTP support
+template<> struct times_impl< na,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< na,Tag >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename Tag > struct times_impl< Tag,na >
+{
+    template< typename U1, typename U2 > struct apply
+    {
+        typedef apply type;
+        BOOST_STATIC_CONSTANT(int, value  = 0);
+    };
+};
+
+template< typename T > struct times_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    , typename N3 = na, typename N4 = na, typename N5 = na
+    >
+struct times
+    : times< times< times< times< N1,N2 >, N3>, N4>, N5>
+{
+};
+
+template<
+      typename N1, typename N2, typename N3, typename N4
+    >
+struct times< N1,N2,N3,N4,na >
+
+    : times< times< times< N1,N2 >, N3>, N4>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, N4, na )
+        )
+};
+
+template<
+      typename N1, typename N2, typename N3
+    >
+struct times< N1,N2,N3,na,na >
+
+    : times< times< N1,N2 >, N3>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, N3, na, na )
+        )
+};
+
+template<
+      typename N1, typename N2
+    >
+struct times< N1,N2,na,na,na >
+    : times_impl<
+          typename times_tag<N1>::type
+        , typename times_tag<N2>::type
+        >::template apply< N1,N2 >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
+          5
+        , times
+        , ( N1, N2, na, na, na )
+        )
+
+};
+
+BOOST_MPL_AUX_NA_SPEC2(2, 5, times)
+
+}}
+
+namespace pdalboost { namespace mpl {
+template<>
+struct times_impl< integral_c_tag,integral_c_tag >
+{
+    template< typename N1, typename N2 > struct apply
+
+        : integral_c<
+              typename aux::largest_int<
+                  typename N1::value_type
+                , typename N2::value_type
+                >::type
+            , ( BOOST_MPL_AUX_VALUE_WKND(N1)::value
+                  * BOOST_MPL_AUX_VALUE_WKND(N2)::value
+                )
+            >
+    {
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp
new file mode 100644
index 0000000..2d78b38
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp
@@ -0,0 +1,94 @@
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/unpack_args.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< int size, typename F, typename Args >
+struct unpack_args_impl;
+
+template< typename F, typename Args >
+struct unpack_args_impl< 0,F,Args >
+    : apply0<
+          F
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 1,F,Args >
+    : apply1<
+          F
+        , typename at_c< Args,0 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 2,F,Args >
+    : apply2<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 3,F,Args >
+    : apply3<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 4,F,Args >
+    : apply4<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        >
+{
+};
+
+template< typename F, typename Args >
+struct unpack_args_impl< 5,F,Args >
+    : apply5<
+          F
+        , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type
+        , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type
+        , typename at_c< Args,4 >::type
+        >
+{
+};
+
+}
+
+template<
+      typename F
+    >
+struct unpack_args
+{
+    template< typename Args > struct apply
+
+        : aux::unpack_args_impl< size<Args>::value,F, Args >
+
+    {
+    };
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/vector.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/vector.hpp
new file mode 100644
index 0000000..809efca
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/vector.hpp
@@ -0,0 +1,323 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na
+    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na
+    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na
+    , typename T12 = na, typename T13 = na, typename T14 = na
+    , typename T15 = na, typename T16 = na, typename T17 = na
+    , typename T18 = na, typename T19 = na
+    >
+struct vector;
+
+template<
+     
+    >
+struct vector<
+          na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector0<  >
+{
+    typedef vector0<  >::type type;
+};
+
+template<
+      typename T0
+    >
+struct vector<
+          T0, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector1<T0>
+{
+    typedef typename vector1<T0>::type type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct vector<
+          T0, T1, na, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector2< T0,T1 >
+{
+    typedef typename vector2< T0,T1 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct vector<
+          T0, T1, T2, na, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector3< T0,T1,T2 >
+{
+    typedef typename vector3< T0,T1,T2 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct vector<
+          T0, T1, T2, T3, na, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector4< T0,T1,T2,T3 >
+{
+    typedef typename vector4< T0,T1,T2,T3 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct vector<
+          T0, T1, T2, T3, T4, na, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector5< T0,T1,T2,T3,T4 >
+{
+    typedef typename vector5< T0,T1,T2,T3,T4 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, na, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector6< T0,T1,T2,T3,T4,T5 >
+{
+    typedef typename vector6< T0,T1,T2,T3,T4,T5 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, na, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector7< T0,T1,T2,T3,T4,T5,T6 >
+{
+    typedef typename vector7< T0,T1,T2,T3,T4,T5,T6 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, na, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+{
+    typedef typename vector8< T0,T1,T2,T3,T4,T5,T6,T7 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, na, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+{
+    typedef typename vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, na, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+{
+    typedef typename vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, na, na, na, na, na, na
+        , na, na, na
+        >
+    : vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+{
+    typedef typename vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, na, na, na, na
+        , na, na, na, na
+        >
+    : vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+{
+    typedef typename vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, na, na, na
+        , na, na, na, na
+        >
+    : vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+{
+    typedef typename vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, na, na
+        , na, na, na, na
+        >
+    : vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+{
+    typedef typename vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, na
+        , na, na, na, na
+        >
+    : vector15<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        >
+{
+    typedef typename vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, na, na, na, na
+        >
+    : vector16<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15
+        >
+{
+    typedef typename vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, na, na, na
+        >
+    : vector17<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16
+        >
+{
+    typedef typename vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, na, na
+        >
+    : vector18<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17
+        >
+{
+    typedef typename vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >::type type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct vector<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, na
+        >
+    : vector19<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18
+        >
+{
+    typedef typename vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct vector
+    : vector20<
+          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
+        , T15, T16, T17, T18, T19
+        >
+{
+    typedef typename vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/vector_c.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/vector_c.hpp
new file mode 100644
index 0000000..323872c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessed/plain/vector_c.hpp
@@ -0,0 +1,309 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX
+    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX
+    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX
+    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX
+    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX
+    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX
+    , long C18 = LONG_MAX, long C19 = LONG_MAX
+    >
+struct vector_c;
+
+template<
+      typename T
+    >
+struct vector_c<
+          T, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector0_c<T>
+{
+    typedef typename vector0_c<T>::type type;
+};
+
+template<
+      typename T, long C0
+    >
+struct vector_c<
+          T, C0, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector1_c< T, T(C0) >
+{
+    typedef typename vector1_c< T, T(C0) >::type type;
+};
+
+template<
+      typename T, long C0, long C1
+    >
+struct vector_c<
+          T, C0, C1, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector2_c< T, T(C0), T(C1) >
+{
+    typedef typename vector2_c< T, T(C0), T(C1) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2
+    >
+struct vector_c<
+          T, C0, C1, C2, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector3_c< T, T(C0), T(C1), T(C2) >
+{
+    typedef typename vector3_c< T, T(C0), T(C1), T(C2) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector4_c< T, T(C0), T(C1), T(C2), T(C3) >
+{
+    typedef typename vector4_c< T, T(C0), T(C1), T(C2), T(C3) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >
+{
+    typedef typename vector5_c< T, T(C0), T(C1), T(C2), T(C3), T(C4) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >
+{
+    typedef typename vector6_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >
+{
+    typedef typename vector7_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX
+        >
+    : vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >
+{
+    typedef typename vector8_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >
+{
+    typedef typename vector9_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        , LONG_MAX
+        >
+    : vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >
+{
+    typedef typename vector10_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, LONG_MAX, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >
+{
+    typedef typename vector11_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >
+{
+    typedef typename vector12_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, LONG_MAX
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >
+{
+    typedef typename vector13_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >
+{
+    typedef typename vector14_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >
+{
+    typedef typename vector15_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, LONG_MAX, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >
+{
+    typedef typename vector16_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, LONG_MAX, LONG_MAX, LONG_MAX
+        >
+    : vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >
+{
+    typedef typename vector17_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, LONG_MAX, LONG_MAX
+        >
+    : vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >
+{
+    typedef typename vector18_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17) >::type type;
+};
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18
+    >
+struct vector_c<
+          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14
+        , C15, C16, C17, C18, LONG_MAX
+        >
+    : vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >
+{
+    typedef typename vector19_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18) >::type type;
+};
+
+/// primary template (not a specialization!)
+
+template<
+      typename T, long C0, long C1, long C2, long C3, long C4, long C5
+    , long C6, long C7, long C8, long C9, long C10, long C11, long C12
+    , long C13, long C14, long C15, long C16, long C17, long C18, long C19
+    >
+struct vector_c
+    : vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >
+{
+    typedef typename vector20_c< T, T(C0), T(C1), T(C2), T(C3), T(C4), T(C5), T(C6), T(C7), T(C8), T(C9), T(C10), T(C11), T(C12), T(C13), T(C14), T(C15), T(C16), T(C17), T(C18), T(C19) >::type type;
+};
+
+}}
+
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessor/add.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessor/add.hpp
new file mode 100644
index 0000000..53e646e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessor/add.hpp
@@ -0,0 +1,65 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_ADD_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_ADD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+#   include <boost/mpl/aux_/preprocessor/tuple.hpp>
+
+#if defined(BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION)
+#   include <boost/preprocessor/cat.hpp>
+
+#   define BOOST_MPL_PP_ADD(i,j) \
+    BOOST_MPL_PP_ADD_DELAY(i,j) \
+    /**/
+
+#   define BOOST_MPL_PP_ADD_DELAY(i,j) \
+    BOOST_PP_CAT(BOOST_MPL_PP_TUPLE_11_ELEM_##i,BOOST_MPL_PP_ADD_##j) \
+    /**/
+#else
+#   define BOOST_MPL_PP_ADD(i,j) \
+    BOOST_MPL_PP_ADD_DELAY(i,j) \
+    /**/
+
+#   define BOOST_MPL_PP_ADD_DELAY(i,j) \
+    BOOST_MPL_PP_TUPLE_11_ELEM_##i BOOST_MPL_PP_ADD_##j \
+    /**/
+#endif
+
+#   define BOOST_MPL_PP_ADD_0 (0,1,2,3,4,5,6,7,8,9,10)
+#   define BOOST_MPL_PP_ADD_1 (1,2,3,4,5,6,7,8,9,10,0)
+#   define BOOST_MPL_PP_ADD_2 (2,3,4,5,6,7,8,9,10,0,0)
+#   define BOOST_MPL_PP_ADD_3 (3,4,5,6,7,8,9,10,0,0,0)
+#   define BOOST_MPL_PP_ADD_4 (4,5,6,7,8,9,10,0,0,0,0)
+#   define BOOST_MPL_PP_ADD_5 (5,6,7,8,9,10,0,0,0,0,0)
+#   define BOOST_MPL_PP_ADD_6 (6,7,8,9,10,0,0,0,0,0,0)
+#   define BOOST_MPL_PP_ADD_7 (7,8,9,10,0,0,0,0,0,0,0)
+#   define BOOST_MPL_PP_ADD_8 (8,9,10,0,0,0,0,0,0,0,0)
+#   define BOOST_MPL_PP_ADD_9 (9,10,0,0,0,0,0,0,0,0,0)
+#   define BOOST_MPL_PP_ADD_10 (10,0,0,0,0,0,0,0,0,0,0)
+
+#else
+
+#   include <boost/preprocessor/arithmetic/add.hpp>
+
+#   define BOOST_MPL_PP_ADD(i,j) \
+    BOOST_PP_ADD(i,j) \
+    /**/
+    
+#endif 
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_ADD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessor/def_params_tail.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessor/def_params_tail.hpp
new file mode 100644
index 0000000..cab3989
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessor/def_params_tail.hpp
@@ -0,0 +1,105 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_DEF_PARAMS_TAIL_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_DEF_PARAMS_TAIL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/limits/arity.hpp>
+#include <boost/mpl/aux_/config/dtp.hpp>
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+#include <boost/preprocessor/comma_if.hpp>
+#include <boost/preprocessor/logical/and.hpp>
+#include <boost/preprocessor/identity.hpp>
+#include <boost/preprocessor/empty.hpp>
+
+// BOOST_MPL_PP_DEF_PARAMS_TAIL(1,T,value): , T1 = value, .., Tn = value
+// BOOST_MPL_PP_DEF_PARAMS_TAIL(2,T,value): , T2 = value, .., Tn = value
+// BOOST_MPL_PP_DEF_PARAMS_TAIL(n,T,value): <nothing>
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+#   include <boost/mpl/aux_/preprocessor/filter_params.hpp>
+#   include <boost/mpl/aux_/preprocessor/sub.hpp>
+
+#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, value_func) \
+    BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_1( \
+          i \
+        , BOOST_MPL_PP_SUB(BOOST_MPL_LIMIT_METAFUNCTION_ARITY,i) \
+        , param \
+        , value_func \
+        ) \
+    /**/
+
+#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_1(i, n, param, value_func) \
+    BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_2(i,n,param,value_func) \
+    /**/
+
+#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_DELAY_2(i, n, param, value_func) \
+    BOOST_PP_COMMA_IF(BOOST_PP_AND(i,n)) \
+    BOOST_MPL_PP_DEF_PARAMS_TAIL_##i(n,param,value_func) \
+    /**/
+
+#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_0(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##1 v(),p##2 v(),p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v())
+#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_1(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##2 v(),p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1)
+#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_2(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##3 v(),p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2)
+#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_3(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##4 v(),p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2,p3)
+#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_4(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##5 v(),p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2,p3,p4)
+#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_5(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##6 v(),p##7 v(),p##8 v(),p##9 v(),p1,p2,p3,p4,p5)
+#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_6(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##7 v(),p##8 v(),p##9 v(),p1,p2,p3,p4,p5,p6)
+#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_7(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##8 v(),p##9 v(),p1,p2,p3,p4,p5,p6,p7)
+#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_8(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p##9 v(),p1,p2,p3,p4,p5,p6,p7,p8)
+#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_9(i,p,v) BOOST_MPL_PP_FILTER_PARAMS_##i(p1,p2,p3,p4,p5,p6,p7,p8,p9)
+
+#else
+
+#   include <boost/preprocessor/arithmetic/add.hpp>
+#   include <boost/preprocessor/arithmetic/sub.hpp>
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/tuple/elem.hpp>
+#   include <boost/preprocessor/repeat.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+#   define BOOST_MPL_PP_AUX_TAIL_PARAM_FUNC(unused, i, op) \
+    , BOOST_PP_CAT( \
+          BOOST_PP_TUPLE_ELEM(3, 1, op) \
+        , BOOST_PP_ADD_D(1, i, BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(3, 0, op))) \
+        ) BOOST_PP_TUPLE_ELEM(3, 2, op)() \
+    /**/
+
+#   define BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, value_func) \
+    BOOST_PP_REPEAT( \
+          BOOST_PP_SUB_D(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, i) \
+        , BOOST_MPL_PP_AUX_TAIL_PARAM_FUNC \
+        , (i, param, value_func) \
+        ) \
+    /**/
+
+
+#endif // BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES
+
+#define BOOST_MPL_PP_DEF_PARAMS_TAIL(i, param, value) \
+    BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_IDENTITY(=value)) \
+    /**/
+
+#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+#   define BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, param, value) \
+    BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_IDENTITY(=value)) \
+    /**/
+#else
+#   define BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, param, value) \
+    BOOST_MPL_PP_DEF_PARAMS_TAIL_IMPL(i, param, BOOST_PP_EMPTY) \
+    /**/
+#endif
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_DEF_PARAMS_TAIL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessor/default_params.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessor/default_params.hpp
new file mode 100644
index 0000000..c3548c6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessor/default_params.hpp
@@ -0,0 +1,67 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_DEFAULT_PARAMS_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_DEFAULT_PARAMS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+// BOOST_MPL_PP_DEFAULT_PARAMS(0,T,int): <nothing>
+// BOOST_MPL_PP_DEFAULT_PARAMS(1,T,int): T1 = int
+// BOOST_MPL_PP_DEFAULT_PARAMS(2,T,int): T1 = int, T2 = int
+// BOOST_MPL_PP_DEFAULT_PARAMS(n,T,int): T1 = int, T2 = int, .., Tn = int
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+#   include <boost/preprocessor/cat.hpp>
+
+#   define BOOST_MPL_PP_DEFAULT_PARAMS(n,p,v) \
+    BOOST_PP_CAT(BOOST_MPL_PP_DEFAULT_PARAMS_,n)(p,v) \
+    /**/
+    
+#   define BOOST_MPL_PP_DEFAULT_PARAMS_0(p,v)
+#   define BOOST_MPL_PP_DEFAULT_PARAMS_1(p,v) p##1=v
+#   define BOOST_MPL_PP_DEFAULT_PARAMS_2(p,v) p##1=v,p##2=v
+#   define BOOST_MPL_PP_DEFAULT_PARAMS_3(p,v) p##1=v,p##2=v,p##3=v
+#   define BOOST_MPL_PP_DEFAULT_PARAMS_4(p,v) p##1=v,p##2=v,p##3=v,p##4=v
+#   define BOOST_MPL_PP_DEFAULT_PARAMS_5(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v
+#   define BOOST_MPL_PP_DEFAULT_PARAMS_6(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v
+#   define BOOST_MPL_PP_DEFAULT_PARAMS_7(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v,p##7=v
+#   define BOOST_MPL_PP_DEFAULT_PARAMS_8(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v,p##7=v,p##8=v
+#   define BOOST_MPL_PP_DEFAULT_PARAMS_9(p,v) p##1=v,p##2=v,p##3=v,p##4=v,p##5=v,p##6=v,p##7=v,p##8=v,p##9=v
+
+#else
+
+#   include <boost/preprocessor/tuple/elem.hpp>
+#   include <boost/preprocessor/comma_if.hpp>
+#   include <boost/preprocessor/repeat.hpp>
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+#   define BOOST_MPL_PP_AUX_DEFAULT_PARAM_FUNC(unused, i, pv) \
+    BOOST_PP_COMMA_IF(i) \
+    BOOST_PP_CAT( BOOST_PP_TUPLE_ELEM(2,0,pv), BOOST_PP_INC(i) ) \
+        = BOOST_PP_TUPLE_ELEM(2,1,pv) \
+    /**/
+
+#   define BOOST_MPL_PP_DEFAULT_PARAMS(n, param, value) \
+    BOOST_PP_REPEAT( \
+          n \
+        , BOOST_MPL_PP_AUX_DEFAULT_PARAM_FUNC \
+        , (param,value) \
+        ) \
+    /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_DEFAULT_PARAMS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessor/enum.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessor/enum.hpp
new file mode 100644
index 0000000..64c5e6a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessor/enum.hpp
@@ -0,0 +1,62 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_ENUM_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_ENUM_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+// BOOST_MPL_PP_ENUM(0,int): <nothing>
+// BOOST_MPL_PP_ENUM(1,int): int
+// BOOST_MPL_PP_ENUM(2,int): int, int
+// BOOST_MPL_PP_ENUM(n,int): int, int, .., int
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+#   include <boost/preprocessor/cat.hpp>
+
+#   define BOOST_MPL_PP_ENUM(n, param) \
+    BOOST_PP_CAT(BOOST_MPL_PP_ENUM_,n)(param) \
+    /**/
+    
+#   define BOOST_MPL_PP_ENUM_0(p)
+#   define BOOST_MPL_PP_ENUM_1(p) p
+#   define BOOST_MPL_PP_ENUM_2(p) p,p
+#   define BOOST_MPL_PP_ENUM_3(p) p,p,p
+#   define BOOST_MPL_PP_ENUM_4(p) p,p,p,p
+#   define BOOST_MPL_PP_ENUM_5(p) p,p,p,p,p
+#   define BOOST_MPL_PP_ENUM_6(p) p,p,p,p,p,p
+#   define BOOST_MPL_PP_ENUM_7(p) p,p,p,p,p,p,p
+#   define BOOST_MPL_PP_ENUM_8(p) p,p,p,p,p,p,p,p
+#   define BOOST_MPL_PP_ENUM_9(p) p,p,p,p,p,p,p,p,p
+
+#else
+
+#   include <boost/preprocessor/comma_if.hpp>
+#   include <boost/preprocessor/repeat.hpp>
+
+#   define BOOST_MPL_PP_AUX_ENUM_FUNC(unused, i, param) \
+    BOOST_PP_COMMA_IF(i) param \
+    /**/
+
+#   define BOOST_MPL_PP_ENUM(n, param) \
+    BOOST_PP_REPEAT( \
+          n \
+        , BOOST_MPL_PP_AUX_ENUM_FUNC \
+        , param \
+        ) \
+    /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_ENUM_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessor/ext_params.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessor/ext_params.hpp
new file mode 100644
index 0000000..f5e6e50
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessor/ext_params.hpp
@@ -0,0 +1,78 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_EXT_PARAMS_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_EXT_PARAMS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+// BOOST_MPL_PP_EXT_PARAMS(2,2,T): <nothing>
+// BOOST_MPL_PP_EXT_PARAMS(2,3,T): T2
+// BOOST_MPL_PP_EXT_PARAMS(2,4,T): T2, T3
+// BOOST_MPL_PP_EXT_PARAMS(2,n,T): T2, T3, .., Tn-1
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+#   include <boost/mpl/aux_/preprocessor/filter_params.hpp>
+#   include <boost/mpl/aux_/preprocessor/sub.hpp>
+
+#   define BOOST_MPL_PP_EXT_PARAMS(i,j,p) \
+    BOOST_MPL_PP_EXT_PARAMS_DELAY_1(i,BOOST_MPL_PP_SUB(j,i),p) \
+    /**/
+
+#   define BOOST_MPL_PP_EXT_PARAMS_DELAY_1(i,n,p) \
+    BOOST_MPL_PP_EXT_PARAMS_DELAY_2(i,n,p) \
+    /**/
+
+#   define BOOST_MPL_PP_EXT_PARAMS_DELAY_2(i,n,p) \
+    BOOST_MPL_PP_EXT_PARAMS_##i(n,p) \
+    /**/
+
+#   define BOOST_MPL_PP_EXT_PARAMS_1(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##1,p##2,p##3,p##4,p##5,p##6,p##7,p##8,p##9)
+#   define BOOST_MPL_PP_EXT_PARAMS_2(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##2,p##3,p##4,p##5,p##6,p##7,p##8,p##9,p1)
+#   define BOOST_MPL_PP_EXT_PARAMS_3(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##3,p##4,p##5,p##6,p##7,p##8,p##9,p1,p2)
+#   define BOOST_MPL_PP_EXT_PARAMS_4(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##4,p##5,p##6,p##7,p##8,p##9,p1,p2,p3)
+#   define BOOST_MPL_PP_EXT_PARAMS_5(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##5,p##6,p##7,p##8,p##9,p1,p2,p3,p4)
+#   define BOOST_MPL_PP_EXT_PARAMS_6(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##6,p##7,p##8,p##9,p1,p2,p3,p4,p5)
+#   define BOOST_MPL_PP_EXT_PARAMS_7(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##7,p##8,p##9,p1,p2,p3,p4,p5,p6)
+#   define BOOST_MPL_PP_EXT_PARAMS_8(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##8,p##9,p1,p2,p3,p4,p5,p6,p7)
+#   define BOOST_MPL_PP_EXT_PARAMS_9(i,p) BOOST_MPL_PP_FILTER_PARAMS_##i(p##9,p1,p2,p3,p4,p5,p6,p7,p8)
+
+#else
+
+#   include <boost/preprocessor/arithmetic/add.hpp>
+#   include <boost/preprocessor/arithmetic/sub.hpp>
+#   include <boost/preprocessor/comma_if.hpp>
+#   include <boost/preprocessor/repeat.hpp>
+#   include <boost/preprocessor/tuple/elem.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+#   define BOOST_MPL_PP_AUX_EXT_PARAM_FUNC(unused, i, op) \
+    BOOST_PP_COMMA_IF(i) \
+    BOOST_PP_CAT( \
+          BOOST_PP_TUPLE_ELEM(2,1,op) \
+        , BOOST_PP_ADD_D(1, i, BOOST_PP_TUPLE_ELEM(2,0,op)) \
+        ) \
+    /**/
+
+#   define BOOST_MPL_PP_EXT_PARAMS(i, j, param) \
+    BOOST_PP_REPEAT( \
+          BOOST_PP_SUB_D(1,j,i) \
+        , BOOST_MPL_PP_AUX_EXT_PARAM_FUNC \
+        , (i,param) \
+        ) \
+    /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_EXT_PARAMS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessor/filter_params.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessor/filter_params.hpp
new file mode 100644
index 0000000..7c0df4f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessor/filter_params.hpp
@@ -0,0 +1,28 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_FILTER_PARAMS_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_FILTER_PARAMS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#define BOOST_MPL_PP_FILTER_PARAMS_0(p1,p2,p3,p4,p5,p6,p7,p8,p9) 
+#define BOOST_MPL_PP_FILTER_PARAMS_1(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1
+#define BOOST_MPL_PP_FILTER_PARAMS_2(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2
+#define BOOST_MPL_PP_FILTER_PARAMS_3(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3
+#define BOOST_MPL_PP_FILTER_PARAMS_4(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4
+#define BOOST_MPL_PP_FILTER_PARAMS_5(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5
+#define BOOST_MPL_PP_FILTER_PARAMS_6(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6
+#define BOOST_MPL_PP_FILTER_PARAMS_7(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6,p7
+#define BOOST_MPL_PP_FILTER_PARAMS_8(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6,p7,p8
+#define BOOST_MPL_PP_FILTER_PARAMS_9(p1,p2,p3,p4,p5,p6,p7,p8,p9) p1,p2,p3,p4,p5,p6,p7,p8,p9
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_FILTER_PARAMS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessor/params.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessor/params.hpp
new file mode 100644
index 0000000..acad321
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessor/params.hpp
@@ -0,0 +1,65 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_PARAMS_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_PARAMS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+// BOOST_MPL_PP_PARAMS(0,T): <nothing>
+// BOOST_MPL_PP_PARAMS(1,T): T1
+// BOOST_MPL_PP_PARAMS(2,T): T1, T2
+// BOOST_MPL_PP_PARAMS(n,T): T1, T2, .., Tn
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+#   include <boost/preprocessor/cat.hpp>
+
+#   define BOOST_MPL_PP_PARAMS(n,p) \
+    BOOST_PP_CAT(BOOST_MPL_PP_PARAMS_,n)(p) \
+    /**/
+
+#   define BOOST_MPL_PP_PARAMS_0(p)
+#   define BOOST_MPL_PP_PARAMS_1(p) p##1
+#   define BOOST_MPL_PP_PARAMS_2(p) p##1,p##2
+#   define BOOST_MPL_PP_PARAMS_3(p) p##1,p##2,p##3
+#   define BOOST_MPL_PP_PARAMS_4(p) p##1,p##2,p##3,p##4
+#   define BOOST_MPL_PP_PARAMS_5(p) p##1,p##2,p##3,p##4,p##5
+#   define BOOST_MPL_PP_PARAMS_6(p) p##1,p##2,p##3,p##4,p##5,p##6
+#   define BOOST_MPL_PP_PARAMS_7(p) p##1,p##2,p##3,p##4,p##5,p##6,p##7
+#   define BOOST_MPL_PP_PARAMS_8(p) p##1,p##2,p##3,p##4,p##5,p##6,p##7,p##8
+#   define BOOST_MPL_PP_PARAMS_9(p) p##1,p##2,p##3,p##4,p##5,p##6,p##7,p##8,p##9
+
+#else
+
+#   include <boost/preprocessor/comma_if.hpp>
+#   include <boost/preprocessor/repeat.hpp>
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+#   define BOOST_MPL_PP_AUX_PARAM_FUNC(unused, i, param) \
+    BOOST_PP_COMMA_IF(i) \
+    BOOST_PP_CAT(param, BOOST_PP_INC(i)) \
+    /**/
+
+#   define BOOST_MPL_PP_PARAMS(n, param) \
+    BOOST_PP_REPEAT( \
+          n \
+        , BOOST_MPL_PP_AUX_PARAM_FUNC \
+        , param \
+        ) \
+    /**/
+
+#endif 
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_PARAMS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessor/partial_spec_params.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessor/partial_spec_params.hpp
new file mode 100644
index 0000000..de5535c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessor/partial_spec_params.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_PARTIAL_SPEC_PARAMS_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_PARTIAL_SPEC_PARAMS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/limits/arity.hpp>
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/preprocessor/enum.hpp>
+#include <boost/mpl/aux_/preprocessor/sub.hpp>
+#include <boost/preprocessor/comma_if.hpp>
+
+#define BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(n, param, def) \
+BOOST_MPL_PP_PARAMS(n, param) \
+BOOST_PP_COMMA_IF(BOOST_MPL_PP_SUB(BOOST_MPL_LIMIT_METAFUNCTION_ARITY,n)) \
+BOOST_MPL_PP_ENUM( \
+      BOOST_MPL_PP_SUB(BOOST_MPL_LIMIT_METAFUNCTION_ARITY,n) \
+    , def \
+    ) \
+/**/
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_PARTIAL_SPEC_PARAMS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessor/range.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessor/range.hpp
new file mode 100644
index 0000000..d66eeb5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessor/range.hpp
@@ -0,0 +1,30 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_RANGE_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_RANGE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/preprocessor/seq/subseq.hpp>
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/arithmetic/add.hpp>
+
+#define BOOST_MPL_PP_RANGE_ITEM(z,n,_) (n)
+
+#define BOOST_MPL_PP_RANGE(first, length) \
+    BOOST_PP_SEQ_SUBSEQ( \
+        BOOST_PP_REPEAT(BOOST_PP_ADD(first,length), BOOST_MPL_PP_RANGE_ITEM, _), \
+        first, length \
+    ) \
+/**/
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_RANGE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessor/repeat.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessor/repeat.hpp
new file mode 100644
index 0000000..0511367
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessor/repeat.hpp
@@ -0,0 +1,51 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_REPEAT_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_REPEAT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+#   include <boost/preprocessor/cat.hpp>
+
+#   define BOOST_MPL_PP_REPEAT(n,f,param) \
+    BOOST_PP_CAT(BOOST_MPL_PP_REPEAT_,n)(f,param) \
+    /**/
+    
+#   define BOOST_MPL_PP_REPEAT_0(f,p)
+#   define BOOST_MPL_PP_REPEAT_1(f,p) f(0,0,p)
+#   define BOOST_MPL_PP_REPEAT_2(f,p) f(0,0,p) f(0,1,p)
+#   define BOOST_MPL_PP_REPEAT_3(f,p) f(0,0,p) f(0,1,p) f(0,2,p)
+#   define BOOST_MPL_PP_REPEAT_4(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p)
+#   define BOOST_MPL_PP_REPEAT_5(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p)
+#   define BOOST_MPL_PP_REPEAT_6(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p) f(0,5,p)
+#   define BOOST_MPL_PP_REPEAT_7(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p) f(0,5,p) f(0,6,p)
+#   define BOOST_MPL_PP_REPEAT_8(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p) f(0,5,p) f(0,6,p) f(0,7,p)
+#   define BOOST_MPL_PP_REPEAT_9(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p) f(0,5,p) f(0,6,p) f(0,7,p) f(0,8,p)
+#   define BOOST_MPL_PP_REPEAT_10(f,p) f(0,0,p) f(0,1,p) f(0,2,p) f(0,3,p) f(0,4,p) f(0,5,p) f(0,6,p) f(0,7,p) f(0,8,p) f(0,9,p)
+
+#else 
+
+#   include <boost/preprocessor/repeat.hpp>
+
+#   define BOOST_MPL_PP_REPEAT(n,f,param) \
+    BOOST_PP_REPEAT(n,f,param) \
+    /**/
+
+#endif 
+
+#define BOOST_MPL_PP_REPEAT_IDENTITY_FUNC(unused1, unused2, x) x
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_REPEAT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessor/sub.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessor/sub.hpp
new file mode 100644
index 0000000..c794c74
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessor/sub.hpp
@@ -0,0 +1,65 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_SUB_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_SUB_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES)
+
+#   include <boost/mpl/aux_/preprocessor/tuple.hpp>
+
+#if defined(BOOST_MPL_CFG_BROKEN_PP_MACRO_EXPANSION)
+#   include <boost/preprocessor/cat.hpp>
+
+#   define BOOST_MPL_PP_SUB(i,j) \
+    BOOST_MPL_PP_SUB_DELAY(i,j) \
+    /**/
+
+#   define BOOST_MPL_PP_SUB_DELAY(i,j) \
+    BOOST_PP_CAT(BOOST_MPL_PP_TUPLE_11_ELEM_##i,BOOST_MPL_PP_SUB_##j) \
+    /**/
+#else
+#   define BOOST_MPL_PP_SUB(i,j) \
+    BOOST_MPL_PP_SUB_DELAY(i,j) \
+    /**/
+
+#   define BOOST_MPL_PP_SUB_DELAY(i,j) \
+    BOOST_MPL_PP_TUPLE_11_ELEM_##i BOOST_MPL_PP_SUB_##j \
+    /**/
+#endif
+
+#   define BOOST_MPL_PP_SUB_0 (0,1,2,3,4,5,6,7,8,9,10)
+#   define BOOST_MPL_PP_SUB_1 (0,0,1,2,3,4,5,6,7,8,9)
+#   define BOOST_MPL_PP_SUB_2 (0,0,0,1,2,3,4,5,6,7,8)
+#   define BOOST_MPL_PP_SUB_3 (0,0,0,0,1,2,3,4,5,6,7)
+#   define BOOST_MPL_PP_SUB_4 (0,0,0,0,0,1,2,3,4,5,6)
+#   define BOOST_MPL_PP_SUB_5 (0,0,0,0,0,0,1,2,3,4,5)
+#   define BOOST_MPL_PP_SUB_6 (0,0,0,0,0,0,0,1,2,3,4)
+#   define BOOST_MPL_PP_SUB_7 (0,0,0,0,0,0,0,0,1,2,3)
+#   define BOOST_MPL_PP_SUB_8 (0,0,0,0,0,0,0,0,0,1,2)
+#   define BOOST_MPL_PP_SUB_9 (0,0,0,0,0,0,0,0,0,0,1)
+#   define BOOST_MPL_PP_SUB_10 (0,0,0,0,0,0,0,0,0,0,0)
+
+#else
+
+#   include <boost/preprocessor/arithmetic/sub.hpp>
+
+#   define BOOST_MPL_PP_SUB(i,j) \
+    BOOST_PP_SUB(i,j) \
+    /**/
+    
+#endif
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_SUB_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/preprocessor/tuple.hpp b/vendor/pdalboost/boost/mpl/aux_/preprocessor/tuple.hpp
new file mode 100644
index 0000000..755bbc5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/preprocessor/tuple.hpp
@@ -0,0 +1,29 @@
+
+#ifndef BOOST_MPL_AUX_PREPROCESSOR_TUPLE_HPP_INCLUDED
+#define BOOST_MPL_AUX_PREPROCESSOR_TUPLE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#define BOOST_MPL_PP_TUPLE_11_ELEM_0(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e0
+#define BOOST_MPL_PP_TUPLE_11_ELEM_1(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e1
+#define BOOST_MPL_PP_TUPLE_11_ELEM_2(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e2
+#define BOOST_MPL_PP_TUPLE_11_ELEM_3(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e3
+#define BOOST_MPL_PP_TUPLE_11_ELEM_4(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e4
+#define BOOST_MPL_PP_TUPLE_11_ELEM_5(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e5
+#define BOOST_MPL_PP_TUPLE_11_ELEM_6(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e6
+#define BOOST_MPL_PP_TUPLE_11_ELEM_7(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e7
+#define BOOST_MPL_PP_TUPLE_11_ELEM_8(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e8
+#define BOOST_MPL_PP_TUPLE_11_ELEM_9(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e9
+#define BOOST_MPL_PP_TUPLE_11_ELEM_10(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10) e10
+
+#endif // BOOST_MPL_AUX_PREPROCESSOR_TUPLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/ptr_to_ref.hpp b/vendor/pdalboost/boost/mpl/aux_/ptr_to_ref.hpp
new file mode 100644
index 0000000..9ab69cb
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/ptr_to_ref.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_AUX_PTR_TO_REF_HPP_INCLUDED
+#define BOOST_MPL_AUX_PTR_TO_REF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+    ||  ( BOOST_WORKAROUND(__EDG_VERSION__, <= 245) \
+        && !(defined(__STD_STRICT_ANSI) \
+            || defined(__STD_STRICT_ANSI_ERRORS)) )
+
+#   define BOOST_MPL_AUX_PTR_TO_REF(X) \
+    *BOOST_MPL_AUX_STATIC_CAST(X*, 0) \
+/**/
+
+#else
+
+#   define BOOST_MPL_AUX_PTR_TO_REF(X) \
+    aux::ptr_to_ref(BOOST_MPL_AUX_STATIC_CAST(X*, 0)) \
+/**/
+
+#endif
+
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename T > static T const& ptr_to_ref(T*);
+
+}}}
+
+#endif // BOOST_MPL_AUX_PTR_TO_REF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/push_back_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/push_back_impl.hpp
new file mode 100644
index 0000000..a00a321
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/push_back_impl.hpp
@@ -0,0 +1,70 @@
+
+#ifndef BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/push_back_fwd.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace mpl {
+
+struct has_push_back_arg {};
+
+// agurt 05/feb/04: no default implementation; the stub definition is needed 
+// to enable the default 'has_push_back' implementation below
+template< typename Tag >
+struct push_back_impl
+{
+    template< typename Sequence, typename T > struct apply
+    {
+        // should be instantiated only in the context of 'has_push_back_impl';
+        // if you've got an assert here, you are requesting a 'push_back' 
+        // specialization that doesn't exist.
+        BOOST_MPL_ASSERT_MSG(
+              ( pdalboost::is_same< T, has_push_back_arg >::value )
+            , REQUESTED_PUSH_BACK_SPECIALIZATION_FOR_SEQUENCE_DOES_NOT_EXIST
+            , ( Sequence )
+            );
+    };
+};
+
+template< typename Tag >
+struct has_push_back_impl
+{
+    template< typename Seq > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+        : aux::has_type< push_back< Seq, has_push_back_arg > >
+    {
+#else
+    {
+        typedef aux::has_type< push_back< Seq, has_push_back_arg > > type;
+        BOOST_STATIC_CONSTANT(bool, value = 
+              (aux::has_type< push_back< Seq, has_push_back_arg > >::value)
+            );
+#endif
+    };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, push_back_impl)
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, has_push_back_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/push_front_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/push_front_impl.hpp
new file mode 100644
index 0000000..4ab629e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/push_front_impl.hpp
@@ -0,0 +1,71 @@
+
+#ifndef BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/push_front_fwd.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace mpl {
+
+struct has_push_front_arg {};
+
+// agurt 05/feb/04: no default implementation; the stub definition is needed 
+// to enable the default 'has_push_front' implementation below
+
+template< typename Tag >
+struct push_front_impl
+{
+    template< typename Sequence, typename T > struct apply
+    {
+        // should be instantiated only in the context of 'has_push_front_impl';
+        // if you've got an assert here, you are requesting a 'push_front' 
+        // specialization that doesn't exist.
+        BOOST_MPL_ASSERT_MSG(
+              ( pdalboost::is_same< T, has_push_front_arg >::value )
+            , REQUESTED_PUSH_FRONT_SPECIALIZATION_FOR_SEQUENCE_DOES_NOT_EXIST
+            , ( Sequence )
+            );
+    };
+};
+
+template< typename Tag >
+struct has_push_front_impl
+{
+    template< typename Seq > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+        : aux::has_type< push_front< Seq, has_push_front_arg > >
+    {
+#else
+    {
+        typedef aux::has_type< push_front< Seq, has_push_front_arg > > type;
+        BOOST_STATIC_CONSTANT(bool, value = 
+              (aux::has_type< push_front< Seq, has_push_front_arg > >::value)
+            );
+#endif
+    };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, push_front_impl)
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, has_push_front_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/reverse_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/reverse_fold_impl.hpp
new file mode 100644
index 0000000..a27a35f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/reverse_fold_impl.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/next_prior.hpp>
+#   include <boost/mpl/deref.hpp>
+#   include <boost/mpl/apply.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+    || defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)
+#       include <boost/mpl/if.hpp>
+#       include <boost/type_traits/is_same.hpp>
+#   endif
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER reverse_fold_impl.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   define AUX778076_FOLD_IMPL_OP(iter) typename deref<iter>::type
+#   define AUX778076_FOLD_IMPL_NAME_PREFIX reverse_fold
+#   include <boost/mpl/aux_/reverse_fold_impl_body.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/reverse_fold_impl_body.hpp b/vendor/pdalboost/boost/mpl/aux_/reverse_fold_impl_body.hpp
new file mode 100644
index 0000000..0c07e03
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/reverse_fold_impl_body.hpp
@@ -0,0 +1,412 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#   include <boost/mpl/limits/unrolling.hpp>
+#   include <boost/mpl/aux_/preprocessor/repeat.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/mpl/aux_/nttp_decl.hpp>
+
+#   include <boost/preprocessor/arithmetic/sub.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/dec.hpp>
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+// local macros, #undef-ined at the end of the header
+
+#   define AUX778076_ITER_FOLD_FORWARD_STEP(unused, n_, unused2) \
+    typedef typename apply2< \
+          ForwardOp \
+        , BOOST_PP_CAT(fwd_state,n_) \
+        , AUX778076_FOLD_IMPL_OP(BOOST_PP_CAT(iter,n_)) \
+        >::type BOOST_PP_CAT(fwd_state,BOOST_PP_INC(n_)); \
+    typedef typename mpl::next<BOOST_PP_CAT(iter,n_)>::type \
+        BOOST_PP_CAT(iter,BOOST_PP_INC(n_)); \
+    /**/
+
+#   define AUX778076_ITER_FOLD_BACKWARD_STEP_FUNC(n_) \
+    typedef typename apply2< \
+          BackwardOp \
+        , BOOST_PP_CAT(bkwd_state,n_) \
+        , AUX778076_FOLD_IMPL_OP(BOOST_PP_CAT(iter,BOOST_PP_DEC(n_))) \
+        >::type BOOST_PP_CAT(bkwd_state,BOOST_PP_DEC(n_)); \
+    /**/
+
+#   define AUX778076_ITER_FOLD_BACKWARD_STEP(unused, n_, j) \
+    AUX778076_ITER_FOLD_BACKWARD_STEP_FUNC( \
+          BOOST_PP_SUB_D(1,j,n_) \
+        ) \
+    /**/
+
+#   define AUX778076_FIRST_BACKWARD_STATE_TYPEDEF(n_) \
+    typedef typename nested_chunk::state BOOST_PP_CAT(bkwd_state,n_);
+    /**/
+
+#   define AUX778076_FOLD_IMPL_NAME \
+    BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_impl) \
+    /**/
+
+#   define AUX778076_FOLD_CHUNK_NAME \
+    BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_chunk) \
+    /**/
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+/// forward declaration
+template<
+      BOOST_MPL_AUX_NTTP_DECL(long, N)
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    > 
+struct AUX778076_FOLD_IMPL_NAME;
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+    && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/reverse_fold_impl_body.hpp>))
+#   include BOOST_PP_ITERATE()
+
+// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
+template<
+      BOOST_MPL_AUX_NTTP_DECL(long, N)
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    > 
+struct AUX778076_FOLD_IMPL_NAME
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+
+    BOOST_MPL_PP_REPEAT(
+          BOOST_MPL_LIMIT_UNROLLING
+        , AUX778076_ITER_FOLD_FORWARD_STEP
+        , unused
+        )
+
+    typedef AUX778076_FOLD_IMPL_NAME<
+          ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )
+        , BOOST_PP_CAT(iter,BOOST_MPL_LIMIT_UNROLLING)
+        , Last
+        , BOOST_PP_CAT(fwd_state,BOOST_MPL_LIMIT_UNROLLING)
+        , BackwardOp
+        , ForwardOp
+        > nested_chunk;
+        
+    AUX778076_FIRST_BACKWARD_STATE_TYPEDEF(BOOST_MPL_LIMIT_UNROLLING)
+
+    BOOST_MPL_PP_REPEAT(
+          BOOST_MPL_LIMIT_UNROLLING
+        , AUX778076_ITER_FOLD_BACKWARD_STEP
+        , BOOST_MPL_LIMIT_UNROLLING
+        )
+
+    typedef bkwd_state0 state;
+    typedef typename nested_chunk::iterator iterator;
+};
+
+// fallback implementation for sequences of unknown size
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    > 
+struct AUX778076_FOLD_IMPL_NAME<-1,First,Last,State,BackwardOp,ForwardOp>
+{
+    typedef AUX778076_FOLD_IMPL_NAME<
+          -1
+        , typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , AUX778076_FOLD_IMPL_OP(First)
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    > 
+struct AUX778076_FOLD_IMPL_NAME<-1,Last,Last,State,BackwardOp,ForwardOp>
+{
+    typedef State state;
+    typedef Last iterator;
+};
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) >
+struct AUX778076_FOLD_CHUNK_NAME;
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/reverse_fold_impl_body.hpp>))
+#   include BOOST_PP_ITERATE()
+
+// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) > 
+struct AUX778076_FOLD_CHUNK_NAME
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        > 
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+
+        BOOST_MPL_PP_REPEAT(
+              BOOST_MPL_LIMIT_UNROLLING
+            , AUX778076_ITER_FOLD_FORWARD_STEP
+            , unused
+            )
+
+        typedef AUX778076_FOLD_IMPL_NAME<
+              ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )
+            , BOOST_PP_CAT(iter,BOOST_MPL_LIMIT_UNROLLING)
+            , Last
+            , BOOST_PP_CAT(fwd_state,BOOST_MPL_LIMIT_UNROLLING)
+            , BackwardOp
+            , ForwardOp
+            > nested_chunk;
+            
+        AUX778076_FIRST_BACKWARD_STATE_TYPEDEF(BOOST_MPL_LIMIT_UNROLLING)
+
+        BOOST_MPL_PP_REPEAT(
+              BOOST_MPL_LIMIT_UNROLLING
+            , AUX778076_ITER_FOLD_BACKWARD_STEP
+            , BOOST_MPL_LIMIT_UNROLLING
+            )
+
+        typedef bkwd_state0 state;
+        typedef typename nested_chunk::iterator iterator;
+    };
+};
+
+// fallback implementation for sequences of unknown size
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    > 
+struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step);
+
+template<
+      typename Last
+    , typename State
+    >
+struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step)
+{
+    typedef Last iterator;
+    typedef State state;
+};
+
+template<> 
+struct AUX778076_FOLD_CHUNK_NAME<-1>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        > 
+    struct result_
+    {
+        typedef typename if_<
+              typename is_same<First,Last>::type
+            , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step)<Last,State>
+            , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step)<First,Last,State,BackwardOp,ForwardOp>
+            >::type res_;
+
+        typedef typename res_::state state;
+        typedef typename res_::iterator iterator;
+    };
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+    /// ETI workaround
+    template<> struct result_<int,int,int,int,int>
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+#endif
+};
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    > 
+struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step)
+{
+    typedef AUX778076_FOLD_CHUNK_NAME<-1>::template result_<
+          typename mpl::next<First>::type
+        , Last
+        , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type
+        , BackwardOp
+        , ForwardOp
+        > nested_step;
+
+    typedef typename apply2<
+          BackwardOp
+        , typename nested_step::state
+        , AUX778076_FOLD_IMPL_OP(First)
+        >::type state;
+
+    typedef typename nested_step::iterator iterator;
+};
+
+template<
+      BOOST_MPL_AUX_NTTP_DECL(long, N)
+    , typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    > 
+struct AUX778076_FOLD_IMPL_NAME
+    : AUX778076_FOLD_CHUNK_NAME<N>
+        ::template result_<First,Last,State,BackwardOp,ForwardOp>
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}}}
+
+#   undef AUX778076_FIRST_BACKWARD_STATE_TYPEDEF
+#   undef AUX778076_ITER_FOLD_BACKWARD_STEP
+#   undef AUX778076_ITER_FOLD_BACKWARD_STEP_FUNC
+#   undef AUX778076_ITER_FOLD_FORWARD_STEP
+
+#undef AUX778076_FOLD_IMPL_OP
+#undef AUX778076_FOLD_IMPL_NAME_PREFIX
+
+///// iteration
+
+#else
+
+#   define n_ BOOST_PP_FRAME_ITERATION(1)
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+    && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)
+
+template<
+      typename First
+    , typename Last
+    , typename State
+    , typename BackwardOp
+    , typename ForwardOp
+    >
+struct AUX778076_FOLD_IMPL_NAME<n_,First,Last,State,BackwardOp,ForwardOp>
+{
+    typedef First iter0;
+    typedef State fwd_state0;
+
+    BOOST_MPL_PP_REPEAT(
+          n_
+        , AUX778076_ITER_FOLD_FORWARD_STEP
+        , unused
+        )
+
+    typedef BOOST_PP_CAT(fwd_state,n_) BOOST_PP_CAT(bkwd_state,n_);
+
+    BOOST_MPL_PP_REPEAT(
+          n_
+        , AUX778076_ITER_FOLD_BACKWARD_STEP
+        , n_
+        )
+
+    typedef bkwd_state0 state;
+    typedef BOOST_PP_CAT(iter,n_) iterator;
+};
+
+#else
+
+template<> struct AUX778076_FOLD_CHUNK_NAME<n_>
+{
+    template<
+          typename First
+        , typename Last
+        , typename State
+        , typename BackwardOp
+        , typename ForwardOp
+        >
+    struct result_
+    {
+        typedef First iter0;
+        typedef State fwd_state0;
+
+        BOOST_MPL_PP_REPEAT(
+              n_
+            , AUX778076_ITER_FOLD_FORWARD_STEP
+            , unused
+            )
+
+        typedef BOOST_PP_CAT(fwd_state,n_) BOOST_PP_CAT(bkwd_state,n_);
+
+        BOOST_MPL_PP_REPEAT(
+              n_
+            , AUX778076_ITER_FOLD_BACKWARD_STEP
+            , n_
+            )
+
+        typedef bkwd_state0 state;
+        typedef BOOST_PP_CAT(iter,n_) iterator;
+    };
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+    /// ETI workaround
+    template<> struct result_<int,int,int,int,int>
+    {
+        typedef int state;
+        typedef int iterator;
+    };
+#endif
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#   undef n_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/aux_/reverse_iter_fold_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/reverse_iter_fold_impl.hpp
new file mode 100644
index 0000000..83182a2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/reverse_iter_fold_impl.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_AUX_ITER_FOLD_BACKWARD_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_ITER_FOLD_BACKWARD_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/next_prior.hpp>
+#   include <boost/mpl/apply.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+    || defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)
+#       include <boost/mpl/if.hpp>
+#       include <boost/type_traits/is_same.hpp>
+#   endif
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER reverse_iter_fold_impl.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   define AUX778076_FOLD_IMPL_OP(iter) iter
+#   define AUX778076_FOLD_IMPL_NAME_PREFIX reverse_iter_fold
+#   include <boost/mpl/aux_/reverse_fold_impl_body.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_ITER_FOLD_BACKWARD_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/sequence_wrapper.hpp b/vendor/pdalboost/boost/mpl/aux_/sequence_wrapper.hpp
new file mode 100644
index 0000000..7f8357f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/sequence_wrapper.hpp
@@ -0,0 +1,292 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/mpl/aux_/config/static_constant.hpp>
+#   include <boost/mpl/aux_/nttp_decl.hpp>
+
+#   include <boost/preprocessor/arithmetic/sub.hpp>
+#   include <boost/preprocessor/tuple/elem.hpp>
+#   include <boost/preprocessor/enum_params_with_a_default.hpp>
+#   include <boost/preprocessor/enum_params.hpp>
+#   include <boost/preprocessor/enum.hpp>
+#   include <boost/preprocessor/repeat.hpp>
+#   include <boost/preprocessor/comma_if.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+
+#if defined(BOOST_MPL_PREPROCESSING_MODE)
+#   undef LONG_MAX
+#endif
+
+namespace pdalboost { namespace mpl {
+
+#if !defined(AUX778076_SEQUENCE_BASE_NAME)
+#   define AUX778076_SEQUENCE_BASE_NAME AUX778076_SEQUENCE_NAME
+#endif
+
+#if !defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)
+
+#   define AUX778076_SEQUENCE_PARAM_NAME T
+#   define AUX778076_SEQUENCE_TEMPLATE_PARAM typename T
+#   define AUX778076_SEQUENCE_DEFAULT na
+
+#   define AUX778076_SEQUENCE_NAME_N(n) \
+    BOOST_PP_CAT(AUX778076_SEQUENCE_BASE_NAME,n) \
+    /**/
+
+#   define AUX778076_SEQUENCE_PARAMS() \
+    BOOST_PP_ENUM_PARAMS( \
+          AUX778076_SEQUENCE_LIMIT \
+        , AUX778076_SEQUENCE_TEMPLATE_PARAM \
+        ) \
+    /**/
+
+#   define AUX778076_SEQUENCE_ARGS() \
+    BOOST_PP_ENUM_PARAMS( \
+          AUX778076_SEQUENCE_LIMIT \
+        , T \
+        ) \
+    /**/
+
+#   define AUX778076_SEQUENCE_DEFAULT_PARAMS() \
+     BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( \
+          AUX778076_SEQUENCE_LIMIT \
+        , AUX778076_SEQUENCE_TEMPLATE_PARAM \
+        , AUX778076_SEQUENCE_DEFAULT \
+        ) \
+    /**/
+
+#   define AUX778076_SEQUENCE_N_PARAMS(n) \
+    BOOST_PP_ENUM_PARAMS(n, AUX778076_SEQUENCE_TEMPLATE_PARAM) \
+    /**/
+
+#   define AUX778076_SEQUENCE_N_ARGS(n) \
+    BOOST_PP_ENUM_PARAMS(n, T) \
+    /**/
+
+#   define AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS(n) \
+    BOOST_PP_ENUM_PARAMS(n, T) \
+    BOOST_PP_COMMA_IF(n) \
+    BOOST_PP_ENUM( \
+          BOOST_PP_SUB_D(1,AUX778076_SEQUENCE_LIMIT,n) \
+        , BOOST_PP_TUPLE_ELEM_3_2 \
+        , AUX778076_SEQUENCE_DEFAULT \
+        ) \
+    /**/
+
+#else // AUX778076_SEQUENCE_INTEGRAL_WRAPPER
+
+#   define AUX778076_SEQUENCE_PARAM_NAME C
+#   define AUX778076_SEQUENCE_TEMPLATE_PARAM BOOST_MPL_AUX_NTTP_DECL(long, C)
+#   define AUX778076_SEQUENCE_DEFAULT LONG_MAX
+
+#   define AUX778076_SEQUENCE_PARAMS() \
+    typename T, BOOST_PP_ENUM_PARAMS( \
+          AUX778076_SEQUENCE_LIMIT \
+        , AUX778076_SEQUENCE_TEMPLATE_PARAM \
+        ) \
+    /**/
+
+#   define AUX778076_SEQUENCE_ARGS() \
+    T, BOOST_PP_ENUM_PARAMS( \
+          AUX778076_SEQUENCE_LIMIT \
+        , C \
+        ) \
+    /**/
+
+#   define AUX778076_SEQUENCE_DEFAULT_PARAMS() \
+    typename T, \
+    BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( \
+          AUX778076_SEQUENCE_LIMIT \
+        , AUX778076_SEQUENCE_TEMPLATE_PARAM \
+        , AUX778076_SEQUENCE_DEFAULT \
+        ) \
+    /**/
+
+#   define AUX778076_SEQUENCE_N_PARAMS(n) \
+    typename T BOOST_PP_COMMA_IF(n) \
+    BOOST_PP_ENUM_PARAMS(n, AUX778076_SEQUENCE_TEMPLATE_PARAM) \
+    /**/
+
+#   if !defined(AUX778076_SEQUENCE_CONVERT_CN_TO)
+#       define AUX778076_SEQUENCE_CONVERT_CN_TO(z,n,TARGET) BOOST_PP_CAT(C,n)
+#   endif
+
+#   define AUX778076_SEQUENCE_N_ARGS(n) \
+    T BOOST_PP_COMMA_IF(n) \
+    BOOST_PP_ENUM(n,AUX778076_SEQUENCE_CONVERT_CN_TO,T) \
+    /**/
+
+#   define AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS(n) \
+    T, BOOST_PP_ENUM_PARAMS(n, C) \
+    BOOST_PP_COMMA_IF(n) \
+    BOOST_PP_ENUM( \
+          BOOST_PP_SUB_D(1,AUX778076_SEQUENCE_LIMIT,n) \
+        , BOOST_PP_TUPLE_ELEM_3_2 \
+        , AUX778076_SEQUENCE_DEFAULT \
+        ) \
+    /**/
+
+#endif // AUX778076_SEQUENCE_INTEGRAL_WRAPPER
+
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+// forward declaration
+template<
+      AUX778076_SEQUENCE_DEFAULT_PARAMS()
+    >
+struct AUX778076_SEQUENCE_NAME;
+#else
+namespace aux {
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) > 
+struct BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_chooser);
+}
+#endif
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(0, AUX778076_SEQUENCE_LIMIT, <boost/mpl/aux_/sequence_wrapper.hpp>))
+#include BOOST_PP_ITERATE()
+
+// real C++ version is already taken care of
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+namespace aux {
+// ???_count_args
+#define AUX778076_COUNT_ARGS_PREFIX         AUX778076_SEQUENCE_NAME
+#define AUX778076_COUNT_ARGS_DEFAULT        AUX778076_SEQUENCE_DEFAULT
+#define AUX778076_COUNT_ARGS_PARAM_NAME     AUX778076_SEQUENCE_PARAM_NAME
+#define AUX778076_COUNT_ARGS_TEMPLATE_PARAM AUX778076_SEQUENCE_TEMPLATE_PARAM
+#define AUX778076_COUNT_ARGS_ARITY          AUX778076_SEQUENCE_LIMIT
+#define AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES
+#include <boost/mpl/aux_/count_args.hpp>
+
+template<
+      AUX778076_SEQUENCE_PARAMS()
+    >
+struct BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_impl)
+{
+    typedef aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_count_args)<
+          BOOST_PP_ENUM_PARAMS(AUX778076_SEQUENCE_LIMIT, AUX778076_SEQUENCE_PARAM_NAME)
+        > arg_num_;
+    
+    typedef typename aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_chooser)< arg_num_::value >
+        ::template result_< AUX778076_SEQUENCE_ARGS() >::type type;
+};
+
+} // namespace aux
+
+template<
+      AUX778076_SEQUENCE_DEFAULT_PARAMS()
+    >
+struct AUX778076_SEQUENCE_NAME
+    : aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_impl)<
+          AUX778076_SEQUENCE_ARGS()
+        >::type
+{
+    typedef typename aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_impl)<
+          AUX778076_SEQUENCE_ARGS()
+        >::type type;
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#   undef AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS
+#   undef AUX778076_SEQUENCE_N_ARGS
+#   undef AUX778076_SEQUENCE_CONVERT_CN_TO
+#   undef AUX778076_SEQUENCE_N_PARAMS
+#   undef AUX778076_SEQUENCE_DEFAULT_PARAMS
+#   undef AUX778076_SEQUENCE_ARGS
+#   undef AUX778076_SEQUENCE_PARAMS
+#   undef AUX778076_SEQUENCE_NAME_N
+#   undef AUX778076_SEQUENCE_DEFAULT
+#   undef AUX778076_SEQUENCE_TEMPLATE_PARAM
+#   undef AUX778076_SEQUENCE_PARAM_NAME
+#   undef AUX778076_SEQUENCE_LIMIT
+#   undef AUX778076_SEQUENCE_BASE_NAME
+#   undef AUX778076_SEQUENCE_NAME
+#   undef AUX778076_SEQUENCE_INTEGRAL_WRAPPER
+
+}}
+
+///// iteration
+
+#else
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+#if i_ == AUX778076_SEQUENCE_LIMIT
+
+/// primary template (not a specialization!)
+template<
+      AUX778076_SEQUENCE_N_PARAMS(i_)
+    >
+struct AUX778076_SEQUENCE_NAME
+    : AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >
+{
+    typedef typename AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >::type type;
+};
+
+#else
+
+template<
+      AUX778076_SEQUENCE_N_PARAMS(i_)
+    >
+struct AUX778076_SEQUENCE_NAME< AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS(i_) >
+    : AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >
+{
+#if i_ > 0 || defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)
+    typedef typename AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >::type type;
+#else
+    typedef AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >::type type;
+#endif
+};
+
+#endif // i_ == AUX778076_SEQUENCE_LIMIT
+
+#   else
+
+namespace aux {
+
+template<>
+struct BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_chooser)<i_>
+{
+    template<
+          AUX778076_SEQUENCE_PARAMS()
+        >
+    struct result_
+    {
+#if i_ > 0 || defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)
+        typedef typename AUX778076_SEQUENCE_NAME_N(i_)<
+              AUX778076_SEQUENCE_N_ARGS(i_)
+            >::type type;
+#else
+        typedef AUX778076_SEQUENCE_NAME_N(i_)<
+              AUX778076_SEQUENCE_N_ARGS(i_)
+            >::type type;
+#endif
+    };
+};
+
+} // namespace aux
+
+#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#undef i_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/aux_/size_impl.hpp b/vendor/pdalboost/boost/mpl/aux_/size_impl.hpp
new file mode 100644
index 0000000..229aadd
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/size_impl.hpp
@@ -0,0 +1,52 @@
+
+#ifndef BOOST_MPL_AUX_SIZE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_SIZE_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/distance.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// default implementation; conrete sequences might override it by 
+// specializing either the 'size_impl' or the primary 'size' template
+
+template< typename Tag >
+struct size_impl
+{
+    template< typename Sequence > struct apply
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561))
+        : distance<
+              typename begin<Sequence>::type
+            , typename end<Sequence>::type
+            >
+    {
+#else
+    {
+        typedef typename distance<
+              typename begin<Sequence>::type
+            , typename end<Sequence>::type
+            >::type type;
+#endif
+    };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, size_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_SIZE_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/static_cast.hpp b/vendor/pdalboost/boost/mpl/aux_/static_cast.hpp
new file mode 100644
index 0000000..f72d1c7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/static_cast.hpp
@@ -0,0 +1,27 @@
+
+#ifndef BOOST_MPL_AUX_STATIC_CAST_HPP_INCLUDED
+#define BOOST_MPL_AUX_STATIC_CAST_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x561)) \
+ || BOOST_WORKAROUND(__GNUC__, < 3) \
+ || BOOST_WORKAROUND(__MWERKS__, <= 0x3001)
+#   define BOOST_MPL_AUX_STATIC_CAST(T, expr) (T)(expr)
+#else
+#   define BOOST_MPL_AUX_STATIC_CAST(T, expr) static_cast<T>(expr)
+#endif
+
+#endif // BOOST_MPL_AUX_STATIC_CAST_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/template_arity.hpp b/vendor/pdalboost/boost/mpl/aux_/template_arity.hpp
new file mode 100644
index 0000000..c5e459a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/template_arity.hpp
@@ -0,0 +1,189 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_AUX_TEMPLATE_ARITY_HPP_INCLUDED
+#define BOOST_MPL_AUX_TEMPLATE_ARITY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/ttp.hpp>
+#include <boost/mpl/aux_/config/lambda.hpp>
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/aux_/template_arity_fwd.hpp>
+#   include <boost/mpl/int.hpp>
+#   if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+#   if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
+#       include <boost/mpl/aux_/type_wrapper.hpp>
+#   endif
+#   else
+#       include <boost/mpl/aux_/has_rebind.hpp>
+#   endif
+#endif
+
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER template_arity.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+#   if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING)
+
+#   include <boost/mpl/limits/arity.hpp>
+#   include <boost/mpl/aux_/preprocessor/range.hpp>
+#   include <boost/mpl/aux_/preprocessor/repeat.hpp>
+#   include <boost/mpl/aux_/preprocessor/params.hpp>
+#   include <boost/mpl/aux_/nttp_decl.hpp>
+
+#   include <boost/preprocessor/seq/fold_left.hpp>
+#   include <boost/preprocessor/comma_if.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+#   define AUX778076_ARITY BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct arity_tag
+{
+    typedef char (&type)[N + 1];
+};
+
+#   define AUX778076_MAX_ARITY_OP(unused, state, i_) \
+    ( BOOST_PP_CAT(C,i_) > 0 ? BOOST_PP_CAT(C,i_) : state ) \
+/**/
+
+template<
+      BOOST_MPL_PP_PARAMS(AUX778076_ARITY, BOOST_MPL_AUX_NTTP_DECL(int, C))
+    >
+struct max_arity
+{
+    BOOST_STATIC_CONSTANT(int, value = 
+          BOOST_PP_SEQ_FOLD_LEFT(
+              AUX778076_MAX_ARITY_OP
+            , -1
+            , BOOST_MPL_PP_RANGE(1, AUX778076_ARITY)
+            )
+        );
+};
+
+#   undef AUX778076_MAX_ARITY_OP
+
+arity_tag<0>::type arity_helper(...);
+
+#   define BOOST_PP_ITERATION_LIMITS (1, AUX778076_ARITY)
+#   define BOOST_PP_FILENAME_1 <boost/mpl/aux_/template_arity.hpp>
+#   include BOOST_PP_ITERATE()
+
+template< typename F, BOOST_MPL_AUX_NTTP_DECL(int, N) >
+struct template_arity_impl
+{
+    BOOST_STATIC_CONSTANT(int, value = 
+          sizeof(::pdalboost::mpl::aux::arity_helper(type_wrapper<F>(),arity_tag<N>())) - 1
+        );
+};
+
+#   define AUX778076_TEMPLATE_ARITY_IMPL_INVOCATION(unused, i_, F) \
+    BOOST_PP_COMMA_IF(i_) template_arity_impl<F,BOOST_PP_INC(i_)>::value \
+/**/
+
+template< typename F >
+struct template_arity
+{
+    BOOST_STATIC_CONSTANT(int, value = (
+          max_arity< BOOST_MPL_PP_REPEAT(
+              AUX778076_ARITY
+            , AUX778076_TEMPLATE_ARITY_IMPL_INVOCATION
+            , F
+            ) >::value
+        ));
+        
+    typedef mpl::int_<value> type;
+};
+
+#   undef AUX778076_TEMPLATE_ARITY_IMPL_INVOCATION
+
+#   undef AUX778076_ARITY
+
+}}}
+
+#   endif // BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING
+#   else // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+
+#   include <boost/mpl/aux_/config/eti.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< bool >
+struct template_arity_impl
+{
+    template< typename F > struct result_
+        : mpl::int_<-1>
+    {
+    };
+};
+
+template<>
+struct template_arity_impl<true>
+{
+    template< typename F > struct result_
+        : F::arity
+    {
+    };
+};
+
+template< typename F >
+struct template_arity
+    : template_arity_impl< ::pdalboost::mpl::aux::has_rebind<F>::value >
+        ::template result_<F>
+{
+};
+
+#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+template<>
+struct template_arity<int>
+    : mpl::int_<-1>
+{
+};
+#endif
+
+}}}
+
+#   endif // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_TEMPLATE_ARITY_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<
+      template< BOOST_MPL_PP_PARAMS(i_, typename P) > class F
+    , BOOST_MPL_PP_PARAMS(i_, typename T)
+    >
+typename arity_tag<i_>::type
+arity_helper(type_wrapper< F<BOOST_MPL_PP_PARAMS(i_, T)> >, arity_tag<i_>);
+
+#undef i_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/aux_/template_arity_fwd.hpp b/vendor/pdalboost/boost/mpl/aux_/template_arity_fwd.hpp
new file mode 100644
index 0000000..b514353
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/template_arity_fwd.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_HPP_INCLUDED
+#define BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename F > struct template_arity;
+
+}}}
+
+#endif // BOOST_MPL_AUX_TEMPLATE_ARITY_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/traits_lambda_spec.hpp b/vendor/pdalboost/boost/mpl/aux_/traits_lambda_spec.hpp
new file mode 100644
index 0000000..4a7ff26
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/traits_lambda_spec.hpp
@@ -0,0 +1,63 @@
+
+#ifndef BOOST_MPL_AUX_TRAITS_LAMBDA_SPEC_HPP_INCLUDED
+#define BOOST_MPL_AUX_TRAITS_LAMBDA_SPEC_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/sequence_tag_fwd.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/config/lambda.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+
+#   define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) /**/
+
+#elif !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+
+#   define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) \
+template<> struct trait<void_> \
+{ \
+    template< BOOST_MPL_PP_PARAMS(i, typename T) > struct apply \
+    { \
+    }; \
+}; \
+/**/
+
+#else
+
+#   define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) \
+template<> struct trait<void_> \
+{ \
+    template< BOOST_MPL_PP_PARAMS(i, typename T) > struct apply \
+    { \
+    }; \
+}; \
+template<> struct trait<int> \
+{ \
+    template< BOOST_MPL_PP_PARAMS(i, typename T) > struct apply \
+    { \
+        typedef int type; \
+    }; \
+}; \
+/**/
+
+#endif // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+
+
+#define BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(i, trait) \
+    BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC_IMPL(i, trait) \
+    template<> struct trait<non_sequence_tag> {}; \
+/**/
+
+#endif // BOOST_MPL_AUX_TRAITS_LAMBDA_SPEC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/type_wrapper.hpp b/vendor/pdalboost/boost/mpl/aux_/type_wrapper.hpp
new file mode 100644
index 0000000..37a401e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/type_wrapper.hpp
@@ -0,0 +1,47 @@
+
+#ifndef BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED
+#define BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Peter Dimov 2000-2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename T > struct type_wrapper
+{
+    typedef T type;
+};
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+// agurt 08/may/03: a complicated way to extract the wrapped type; need it 
+// mostly for the sake of GCC (3.2.x), which ICEs if you try to extract the 
+// nested 'type' from 'type_wrapper<T>' when the latter was the result of a
+// 'typeof' expression
+template< typename T > struct wrapped_type;
+
+template< typename T > struct wrapped_type< type_wrapper<T> >
+{
+    typedef T type;
+};
+#else
+template< typename W > struct wrapped_type
+{
+    typedef typename W::type type;
+};
+#endif
+
+}}}
+
+#endif // BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/unwrap.hpp b/vendor/pdalboost/boost/mpl/aux_/unwrap.hpp
new file mode 100644
index 0000000..f9a8a13
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/unwrap.hpp
@@ -0,0 +1,51 @@
+
+#ifndef BOOST_MPL_AUX_UNWRAP_HPP_INCLUDED
+#define BOOST_MPL_AUX_UNWRAP_HPP_INCLUDED
+
+// Copyright Peter Dimov and Multi Media Ltd 2001, 2002
+// Copyright David Abrahams 2001
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/ref.hpp>
+#include <boost/mpl/aux_/config/gpu.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename F >
+BOOST_MPL_CFG_GPU_ENABLED
+inline
+F& unwrap(F& f, long)
+{
+    return f;
+}
+
+template< typename F >
+BOOST_MPL_CFG_GPU_ENABLED
+inline
+F&
+unwrap(reference_wrapper<F>& f, int)
+{
+    return f;
+}
+
+template< typename F >
+BOOST_MPL_CFG_GPU_ENABLED
+inline
+F&
+unwrap(reference_wrapper<F> const& f, int)
+{
+    return f;
+}
+
+}}}
+
+#endif // BOOST_MPL_AUX_UNWRAP_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/value_wknd.hpp b/vendor/pdalboost/boost/mpl/aux_/value_wknd.hpp
new file mode 100644
index 0000000..6ffde0b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/value_wknd.hpp
@@ -0,0 +1,89 @@
+
+#ifndef BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED
+#define BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/config/integral.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS) \
+    || defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+
+#   include <boost/mpl/int.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+template< typename C_ > struct value_wknd
+    : C_
+{
+};
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+template<> struct value_wknd<int>
+    : int_<1>
+{
+    using int_<1>::value;
+};
+#endif
+}}}
+
+
+#if !defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+#   define BOOST_MPL_AUX_VALUE_WKND(C) \
+    ::BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::aux::value_wknd< C > \
+/**/
+#    define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) BOOST_MPL_AUX_VALUE_WKND(C)
+#else
+#   define BOOST_MPL_AUX_VALUE_WKND(C) C
+#   define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) \
+    ::pdalboost::mpl::aux::value_wknd< C > \
+/**/
+#endif
+
+#else // BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS
+
+#   define BOOST_MPL_AUX_VALUE_WKND(C) C
+#   define BOOST_MPL_AUX_MSVC_VALUE_WKND(C) C
+
+#endif
+
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
+#   define BOOST_MPL_AUX_NESTED_VALUE_WKND(T, C) \
+    BOOST_MPL_AUX_STATIC_CAST(T, C::value) \
+/**/
+#else
+#   define BOOST_MPL_AUX_NESTED_VALUE_WKND(T, C) \
+    BOOST_MPL_AUX_VALUE_WKND(C)::value \
+/**/
+#endif
+
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+template< typename T > struct value_type_wknd
+{
+    typedef typename T::value_type type;
+};
+
+#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+template<> struct value_type_wknd<int>
+{
+    typedef int type;
+};
+#endif
+
+}}}
+
+#endif // BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/aux_/yes_no.hpp b/vendor/pdalboost/boost/mpl/aux_/yes_no.hpp
new file mode 100644
index 0000000..b2d7f12
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/aux_/yes_no.hpp
@@ -0,0 +1,58 @@
+
+#ifndef BOOST_MPL_AUX_YES_NO_HPP_INCLUDED
+#define BOOST_MPL_AUX_YES_NO_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/config/arrays.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+typedef char (&no_tag)[1];
+typedef char (&yes_tag)[2];
+
+template< bool C_ > struct yes_no_tag
+{
+    typedef no_tag type;
+};
+
+template<> struct yes_no_tag<true>
+{
+    typedef yes_tag type;
+};
+
+
+template< BOOST_MPL_AUX_NTTP_DECL(long, n) > struct weighted_tag
+{
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    typedef char (&type)[n];
+#else
+    char buf[n];
+    typedef weighted_tag type;
+#endif
+};
+
+#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
+template<> struct weighted_tag<0>
+{
+    typedef char (&type)[1];
+};
+#endif
+
+}}}
+
+#endif // BOOST_MPL_AUX_YES_NO_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/back_fwd.hpp b/vendor/pdalboost/boost/mpl/back_fwd.hpp
new file mode 100644
index 0000000..f22b845
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/back_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_BACK_FWD_HPP_INCLUDED
+#define BOOST_MPL_BACK_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct back_impl;
+template< typename Sequence > struct back;
+
+}}
+
+#endif // BOOST_MPL_BACK_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/back_inserter.hpp b/vendor/pdalboost/boost/mpl/back_inserter.hpp
new file mode 100644
index 0000000..61c4926
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/back_inserter.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_BACK_INSERTER_HPP_INCLUDED
+#define BOOST_MPL_BACK_INSERTER_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/push_back.hpp>
+#include <boost/mpl/inserter.hpp>
+
+namespace pdalboost {
+namespace mpl {
+
+template<
+      typename Sequence
+    >
+struct back_inserter
+    : inserter< Sequence,push_back<> >
+{
+};
+
+}}
+
+#endif // BOOST_MPL_BACK_INSERTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/base.hpp b/vendor/pdalboost/boost/mpl/base.hpp
new file mode 100644
index 0000000..e9c2c38
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/base.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_BASE_HPP_INCLUDED
+#define BOOST_MPL_BASE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct base
+{
+    typedef typename T::base type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,base,(T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, base)
+
+}}
+
+#endif // BOOST_MPL_BASE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/begin_end.hpp b/vendor/pdalboost/boost/mpl/begin_end.hpp
new file mode 100644
index 0000000..c353f7d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/begin_end.hpp
@@ -0,0 +1,57 @@
+
+#ifndef BOOST_MPL_BEGIN_END_HPP_INCLUDED
+#define BOOST_MPL_BEGIN_END_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/begin_end_fwd.hpp>
+#include <boost/mpl/aux_/begin_end_impl.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// agurt, 13/sep/02: switched from inheritance to typedef; MSVC is more
+// happy this way (less ETI-related errors), and it doesn't affect 
+// anything else
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    >
+struct begin
+{
+    typedef typename sequence_tag<Sequence>::type tag_;
+    typedef typename begin_impl< tag_ >
+        ::template apply< Sequence >::type type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,begin,(Sequence))
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    >
+struct end
+{
+    typedef typename sequence_tag<Sequence>::type tag_;
+    typedef typename end_impl< tag_ >
+        ::template apply< Sequence >::type type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,end,(Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, begin)
+BOOST_MPL_AUX_NA_SPEC(1, end)
+
+}}
+
+#endif // BOOST_MPL_BEGIN_END_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/begin_end_fwd.hpp b/vendor/pdalboost/boost/mpl/begin_end_fwd.hpp
new file mode 100644
index 0000000..8f367f0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/begin_end_fwd.hpp
@@ -0,0 +1,27 @@
+
+#ifndef BOOST_MPL_BEGIN_END_FWD_HPP_INCLUDED
+#define BOOST_MPL_BEGIN_END_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct begin_impl;
+template< typename Tag > struct end_impl;
+
+template< typename Sequence > struct begin;
+template< typename Sequence > struct end;
+
+}}
+
+#endif // BOOST_MPL_BEGIN_END_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/bind.hpp b/vendor/pdalboost/boost/mpl/bind.hpp
new file mode 100644
index 0000000..847d075
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/bind.hpp
@@ -0,0 +1,551 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_BIND_HPP_INCLUDED
+#define BOOST_MPL_BIND_HPP_INCLUDED
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/bind_fwd.hpp>
+#   include <boost/mpl/placeholders.hpp>
+#   include <boost/mpl/next.hpp>
+#   include <boost/mpl/protect.hpp>
+#   include <boost/mpl/apply_wrap.hpp>
+#   include <boost/mpl/limits/arity.hpp>
+#   include <boost/mpl/aux_/na.hpp>
+#   include <boost/mpl/aux_/arity_spec.hpp>
+#   include <boost/mpl/aux_/type_wrapper.hpp>
+#   include <boost/mpl/aux_/yes_no.hpp>
+#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#       include <boost/type_traits/is_reference.hpp>
+#   endif 
+#endif
+
+#include <boost/mpl/aux_/config/bind.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   if defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
+#       define BOOST_MPL_PREPROCESSED_HEADER basic_bind.hpp
+#   else
+#       define BOOST_MPL_PREPROCESSED_HEADER bind.hpp
+#   endif
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/aux_/preprocessor/params.hpp>
+#   include <boost/mpl/aux_/preprocessor/default_params.hpp>
+#   include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>
+#   include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>
+#   include <boost/mpl/aux_/preprocessor/ext_params.hpp>
+#   include <boost/mpl/aux_/preprocessor/repeat.hpp>
+#   include <boost/mpl/aux_/preprocessor/enum.hpp>
+#   include <boost/mpl/aux_/preprocessor/add.hpp>
+#   include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/mpl/aux_/config/ttp.hpp>
+#   include <boost/mpl/aux_/config/dtp.hpp>
+#   include <boost/mpl/aux_/nttp_decl.hpp>
+
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/comma_if.hpp>
+#   include <boost/preprocessor/cat.hpp>
+#   include <boost/preprocessor/inc.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// local macros, #undef-ined at the end of the header
+#   define AUX778076_APPLY \
+    BOOST_PP_CAT(apply_wrap,BOOST_MPL_LIMIT_METAFUNCTION_ARITY) \
+    /**/
+
+#   if defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)
+#       define AUX778076_DMC_PARAM() , int dummy_
+#   else
+#       define AUX778076_DMC_PARAM()
+#   endif
+
+#   define AUX778076_BIND_PARAMS(param) \
+    BOOST_MPL_PP_PARAMS( \
+          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+        , param \
+        ) \
+    /**/
+
+#   define AUX778076_BIND_DEFAULT_PARAMS(param, value) \
+    BOOST_MPL_PP_DEFAULT_PARAMS( \
+          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+        , param \
+        , value \
+        ) \
+    /**/
+
+#   define AUX778076_BIND_N_PARAMS(n, param) \
+    BOOST_PP_COMMA_IF(n) BOOST_MPL_PP_PARAMS(n, param) \
+    /**/
+
+#   define AUX778076_BIND_N_SPEC_PARAMS(n, param, def) \
+    BOOST_PP_COMMA_IF(n) \
+    BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(n, param, def) \
+    /**/
+
+#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+#   define AUX778076_BIND_NESTED_DEFAULT_PARAMS(param, value) \
+    AUX778076_BIND_DEFAULT_PARAMS(param, value) \
+    /**/
+#else
+#   define AUX778076_BIND_NESTED_DEFAULT_PARAMS(param, value) \
+    AUX778076_BIND_PARAMS(param) \
+    /**/
+#endif
+
+namespace aux {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+      typename T, AUX778076_BIND_PARAMS(typename U)
+    >
+struct resolve_bind_arg
+{
+    typedef T type;
+};
+
+#   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
+
+template<
+      typename T
+    , typename Arg
+    >
+struct replace_unnamed_arg
+{
+    typedef Arg next;
+    typedef T type;
+};
+
+template<
+      typename Arg
+    >
+struct replace_unnamed_arg< arg<-1>,Arg >
+{
+    typedef typename Arg::next next;
+    typedef Arg type;
+};
+
+#   endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT
+
+template<
+      BOOST_MPL_AUX_NTTP_DECL(int, N), AUX778076_BIND_PARAMS(typename U)
+    >
+struct resolve_bind_arg< arg<N>,AUX778076_BIND_PARAMS(U) >
+{
+    typedef typename AUX778076_APPLY<mpl::arg<N>, AUX778076_BIND_PARAMS(U)>::type type;
+};
+
+#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)
+template<
+      typename F, AUX778076_BIND_PARAMS(typename T), AUX778076_BIND_PARAMS(typename U)
+    >
+struct resolve_bind_arg< bind<F,AUX778076_BIND_PARAMS(T)>,AUX778076_BIND_PARAMS(U) >
+{
+    typedef bind<F,AUX778076_BIND_PARAMS(T)> f_;
+    typedef typename AUX778076_APPLY<f_, AUX778076_BIND_PARAMS(U)>::type type;
+};
+#endif
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+// agurt, 15/jan/02: it's not a intended to be used as a function class, and 
+// MSVC6.5 has problems with 'apply' name here (the code compiles, but doesn't
+// work), so I went with the 'result_' here, and in all other similar cases
+template< bool >
+struct resolve_arg_impl
+{
+    template< typename T, AUX778076_BIND_PARAMS(typename U) > struct result_
+    {
+        typedef T type;
+    };
+};
+
+template<> 
+struct resolve_arg_impl<true>
+{
+    template< typename T, AUX778076_BIND_PARAMS(typename U) > struct result_
+    {
+        typedef typename AUX778076_APPLY<
+              T
+            , AUX778076_BIND_PARAMS(U)
+            >::type type;
+    };
+};
+
+// for 'resolve_bind_arg'
+template< typename T > struct is_bind_template;
+
+template< 
+      typename T, AUX778076_BIND_PARAMS(typename U)
+    >
+struct resolve_bind_arg
+    : resolve_arg_impl< is_bind_template<T>::value >
+            ::template result_< T,AUX778076_BIND_PARAMS(U) >
+{
+};
+
+#   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
+
+template< typename T > 
+struct replace_unnamed_arg_impl
+{
+    template< typename Arg > struct result_
+    {
+        typedef Arg next;
+        typedef T type;
+    };
+};
+
+template<> 
+struct replace_unnamed_arg_impl< arg<-1> >
+{
+    template< typename Arg > struct result_
+    {
+        typedef typename next<Arg>::type next;
+        typedef Arg type;
+    };
+};
+
+template< typename T, typename Arg > 
+struct replace_unnamed_arg
+    : replace_unnamed_arg_impl<T>::template result_<Arg>
+{
+};
+
+#   endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT
+
+// agurt, 10/mar/02: the forward declaration has to appear before any of
+// 'is_bind_helper' overloads, otherwise MSVC6.5 issues an ICE on it
+template< BOOST_MPL_AUX_NTTP_DECL(int, arity_) > struct bind_chooser;
+
+aux::no_tag is_bind_helper(...);
+template< typename T > aux::no_tag is_bind_helper(protect<T>*);
+
+// overload for "main" form
+// agurt, 15/mar/02: MSVC 6.5 fails to properly resolve the overload 
+// in case if we use 'aux::type_wrapper< bind<...> >' here, and all 
+// 'bind' instantiations form a complete type anyway
+#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)
+template<
+      typename F, AUX778076_BIND_PARAMS(typename T)
+    >
+aux::yes_tag is_bind_helper(bind<F,AUX778076_BIND_PARAMS(T)>*);
+#endif
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) >
+aux::yes_tag is_bind_helper(arg<N>*);
+
+template< bool is_ref_ = true >
+struct is_bind_template_impl
+{
+    template< typename T > struct result_
+    {
+        BOOST_STATIC_CONSTANT(bool, value = false);
+    };
+};
+
+template<>
+struct is_bind_template_impl<false>
+{
+    template< typename T > struct result_
+    {
+        BOOST_STATIC_CONSTANT(bool, value = 
+              sizeof(aux::is_bind_helper(static_cast<T*>(0))) 
+                == sizeof(aux::yes_tag)
+            );
+    };
+};
+
+template< typename T > struct is_bind_template
+    : is_bind_template_impl< ::pdalboost::detail::is_reference_impl<T>::value >
+        ::template result_<T>
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace aux
+
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/bind.hpp>))
+#include BOOST_PP_ITERATE()
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+    && !defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS)
+/// if_/eval_if specializations
+#   define AUX778076_SPEC_NAME if_
+#   define BOOST_PP_ITERATION_PARAMS_1 (3,(3, 3, <boost/mpl/bind.hpp>))
+#   include BOOST_PP_ITERATE()
+
+#if !defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)
+#   define AUX778076_SPEC_NAME eval_if
+#   define BOOST_PP_ITERATION_PARAMS_1 (3,(3, 3, <boost/mpl/bind.hpp>))
+#   include BOOST_PP_ITERATE()
+#endif
+#endif
+
+// real C++ version is already taken care of
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+    && !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)
+
+namespace aux {
+// apply_count_args
+#define AUX778076_COUNT_ARGS_PREFIX bind
+#define AUX778076_COUNT_ARGS_DEFAULT na
+#define AUX778076_COUNT_ARGS_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+#include <boost/mpl/aux_/count_args.hpp>
+}
+
+// bind
+template<
+      typename F, AUX778076_BIND_PARAMS(typename T) AUX778076_DMC_PARAM()
+    >
+struct bind
+    : aux::bind_chooser<
+          aux::bind_count_args<AUX778076_BIND_PARAMS(T)>::value
+        >::template result_< F,AUX778076_BIND_PARAMS(T) >::type
+{
+};
+
+BOOST_MPL_AUX_ARITY_SPEC(
+      BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)
+    , bind
+    )
+
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(
+      BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)
+    , bind
+    )
+
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#   undef AUX778076_BIND_NESTED_DEFAULT_PARAMS
+#   undef AUX778076_BIND_N_SPEC_PARAMS
+#   undef AUX778076_BIND_N_PARAMS
+#   undef AUX778076_BIND_DEFAULT_PARAMS
+#   undef AUX778076_BIND_PARAMS
+#   undef AUX778076_DMC_PARAM
+#   undef AUX778076_APPLY
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_BIND_HPP_INCLUDED
+
+///// iteration, depth == 1
+
+// For gcc 4.4 compatability, we must include the
+// BOOST_PP_ITERATION_DEPTH test inside an #else clause.
+#else // BOOST_PP_IS_ITERATING
+#if BOOST_PP_ITERATION_DEPTH() == 1
+
+#   define i_ BOOST_PP_FRAME_ITERATION(1)
+
+#if defined(AUX778076_SPEC_NAME)
+
+// lazy metafunction specialization
+template< template< BOOST_MPL_PP_PARAMS(i_, typename T) > class F, typename Tag >
+struct BOOST_PP_CAT(quote,i_);
+
+template< BOOST_MPL_PP_PARAMS(i_, typename T) > struct AUX778076_SPEC_NAME;
+
+template<
+      typename Tag AUX778076_BIND_N_PARAMS(i_, typename T)
+    >
+struct BOOST_PP_CAT(bind,i_)< 
+      BOOST_PP_CAT(quote,i_)<AUX778076_SPEC_NAME,Tag>
+    AUX778076_BIND_N_PARAMS(i_,T)
+    >
+{
+    template<
+          AUX778076_BIND_NESTED_DEFAULT_PARAMS(typename U, na)
+        >
+    struct apply
+    {
+     private:
+        typedef mpl::arg<1> n1;
+#       define BOOST_PP_ITERATION_PARAMS_2 (3,(1, i_, <boost/mpl/bind.hpp>))
+#       include BOOST_PP_ITERATE()
+
+        typedef typename AUX778076_SPEC_NAME<
+              typename t1::type
+            , BOOST_MPL_PP_EXT_PARAMS(2, BOOST_PP_INC(i_), t)
+            >::type f_;
+
+     public:
+        typedef typename f_::type type;
+    };
+};
+
+#undef AUX778076_SPEC_NAME
+
+#else // AUX778076_SPEC_NAME
+
+template<
+      typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()
+    >
+struct BOOST_PP_CAT(bind,i_)
+{
+    template<
+          AUX778076_BIND_NESTED_DEFAULT_PARAMS(typename U, na)
+        >
+    struct apply
+    {
+     private:
+#   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
+
+        typedef aux::replace_unnamed_arg< F,mpl::arg<1> > r0;
+        typedef typename r0::type a0;
+        typedef typename r0::next n1;
+        typedef typename aux::resolve_bind_arg<a0,AUX778076_BIND_PARAMS(U)>::type f_;
+        ///
+#   else
+        typedef typename aux::resolve_bind_arg<F,AUX778076_BIND_PARAMS(U)>::type f_;
+
+#   endif // BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT
+
+#   if i_ > 0
+#       define BOOST_PP_ITERATION_PARAMS_2 (3,(1, i_, <boost/mpl/bind.hpp>))
+#       include BOOST_PP_ITERATE()
+#   endif
+
+     public:
+
+#   define AUX778076_ARG(unused, i_, t) \
+    BOOST_PP_COMMA_IF(i_) \
+    typename BOOST_PP_CAT(t,BOOST_PP_INC(i_))::type \
+/**/
+
+        typedef typename BOOST_PP_CAT(apply_wrap,i_)<
+              f_ 
+            BOOST_PP_COMMA_IF(i_) BOOST_MPL_PP_REPEAT(i_, AUX778076_ARG, t)
+            >::type type;
+
+#   undef AUX778076_ARG
+    };
+};
+
+namespace aux {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+      typename F AUX778076_BIND_N_PARAMS(i_, typename T), AUX778076_BIND_PARAMS(typename U)
+    >
+struct resolve_bind_arg<
+      BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)>,AUX778076_BIND_PARAMS(U)
+    >
+{
+    typedef BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)> f_;
+    typedef typename AUX778076_APPLY<f_, AUX778076_BIND_PARAMS(U)>::type type;
+};
+
+#else
+
+template<
+      typename F AUX778076_BIND_N_PARAMS(i_, typename T)
+    >
+aux::yes_tag
+is_bind_helper(BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T)>*);
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+} // namespace aux
+
+BOOST_MPL_AUX_ARITY_SPEC(BOOST_PP_INC(i_), BOOST_PP_CAT(bind,i_))
+BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(BOOST_PP_INC(i_), BOOST_PP_CAT(bind,i_))
+
+#   if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)
+#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+    
+#if i_ == BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+/// primary template (not a specialization!)
+template<
+      typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()
+    >
+struct bind
+    : BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T) >
+{
+};
+#else
+template<
+      typename F AUX778076_BIND_N_PARAMS(i_, typename T) AUX778076_DMC_PARAM()
+    >
+struct bind< F AUX778076_BIND_N_SPEC_PARAMS(i_, T, na) >
+    : BOOST_PP_CAT(bind,i_)<F AUX778076_BIND_N_PARAMS(i_,T) >
+{
+};
+#endif
+
+#   else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+namespace aux {
+
+template<>
+struct bind_chooser<i_>
+{
+    template<
+          typename F, AUX778076_BIND_PARAMS(typename T)
+        >
+    struct result_
+    {
+        typedef BOOST_PP_CAT(bind,i_)< F AUX778076_BIND_N_PARAMS(i_,T) > type;
+    };
+};
+
+} // namespace aux
+
+#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#   endif // BOOST_MPL_CFG_NO_BIND_TEMPLATE
+
+#endif // AUX778076_SPEC_NAME
+
+#   undef i_
+
+///// iteration, depth == 2
+
+#elif BOOST_PP_ITERATION_DEPTH() == 2
+
+#   define j_ BOOST_PP_FRAME_ITERATION(2)
+#   if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
+
+        typedef aux::replace_unnamed_arg< BOOST_PP_CAT(T,j_),BOOST_PP_CAT(n,j_) > BOOST_PP_CAT(r,j_);
+        typedef typename BOOST_PP_CAT(r,j_)::type BOOST_PP_CAT(a,j_);
+        typedef typename BOOST_PP_CAT(r,j_)::next BOOST_PP_CAT(n,BOOST_PP_INC(j_));
+        typedef aux::resolve_bind_arg<BOOST_PP_CAT(a,j_), AUX778076_BIND_PARAMS(U)> BOOST_PP_CAT(t,j_);
+        ///
+#   else
+        typedef aux::resolve_bind_arg< BOOST_PP_CAT(T,j_),AUX778076_BIND_PARAMS(U)> BOOST_PP_CAT(t,j_);
+
+#   endif
+#   undef j_
+
+#endif // BOOST_PP_ITERATION_DEPTH()
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/bind_fwd.hpp b/vendor/pdalboost/boost/mpl/bind_fwd.hpp
new file mode 100644
index 0000000..b02b376
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/bind_fwd.hpp
@@ -0,0 +1,99 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_BIND_FWD_HPP_INCLUDED
+#define BOOST_MPL_BIND_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/aux_/na.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/bind.hpp>
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER bind_fwd.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/limits/arity.hpp>
+#   include <boost/mpl/aux_/preprocessor/params.hpp>
+#   include <boost/mpl/aux_/preprocessor/default_params.hpp>
+#   include <boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp>
+
+#   include <boost/preprocessor/comma_if.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// local macros, #undef-ined at the end of the header
+
+#   if defined(BOOST_MPL_CFG_DMC_AMBIGUOUS_CTPS)
+#       define AUX778076_DMC_PARAM() , int dummy_ = 0
+#   else
+#       define AUX778076_DMC_PARAM()
+#   endif
+
+#   define AUX778076_BIND_DEFAULT_PARAMS(param, value) \
+    BOOST_MPL_PP_DEFAULT_PARAMS( \
+          BOOST_MPL_LIMIT_METAFUNCTION_ARITY \
+        , param \
+        , value \
+        ) \
+    AUX778076_DMC_PARAM() \
+    /**/
+
+#   define AUX778076_BIND_N_PARAMS(n, param) \
+    BOOST_PP_COMMA_IF(n) BOOST_MPL_PP_PARAMS(n, param) \
+    AUX778076_DMC_PARAM() \
+    /**/
+
+#if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE)
+template<
+      typename F, AUX778076_BIND_DEFAULT_PARAMS(typename T, na)
+    >
+struct bind;
+#endif
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(0, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/bind_fwd.hpp>))
+#include BOOST_PP_ITERATE()
+
+#   undef AUX778076_BIND_N_PARAMS
+#   undef AUX778076_BIND_DEFAULT_PARAMS
+#   undef AUX778076_DMC_PARAM
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_BIND_FWD_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<
+      typename F AUX778076_BIND_N_PARAMS(i_, typename T)
+    >
+struct BOOST_PP_CAT(bind,i_);
+
+#undef i_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/bool.hpp b/vendor/pdalboost/boost/mpl/bool.hpp
new file mode 100644
index 0000000..0a6180c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/bool.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_BOOL_HPP_INCLUDED
+#define BOOST_MPL_BOOL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/bool_fwd.hpp>
+#include <boost/mpl/integral_c_tag.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+template< bool C_ > struct bool_
+{
+    BOOST_STATIC_CONSTANT(bool, value = C_);
+    typedef integral_c_tag tag;
+    typedef bool_ type;
+    typedef bool value_type;
+    BOOST_CONSTEXPR operator bool() const { return this->value; }
+};
+
+#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
+template< bool C_ >
+bool const bool_<C_>::value;
+#endif
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+#endif // BOOST_MPL_BOOL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/bool_fwd.hpp b/vendor/pdalboost/boost/mpl/bool_fwd.hpp
new file mode 100644
index 0000000..e629252
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/bool_fwd.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_BOOL_FWD_HPP_INCLUDED
+#define BOOST_MPL_BOOL_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/adl_barrier.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+template< bool C_ > struct bool_;
+
+// shorcuts
+typedef bool_<true> true_;
+typedef bool_<false> false_;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+BOOST_MPL_AUX_ADL_BARRIER_DECL(bool_)
+BOOST_MPL_AUX_ADL_BARRIER_DECL(true_)
+BOOST_MPL_AUX_ADL_BARRIER_DECL(false_)
+
+#endif // BOOST_MPL_BOOL_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/clear.hpp b/vendor/pdalboost/boost/mpl/clear.hpp
new file mode 100644
index 0000000..4069d55
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/clear.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_CLEAR_HPP_INCLUDED
+#define BOOST_MPL_CLEAR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/clear_fwd.hpp>
+#include <boost/mpl/aux_/clear_impl.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    >
+struct clear
+    : clear_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,clear,(Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, clear)
+
+}}
+
+#endif // BOOST_MPL_CLEAR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/clear_fwd.hpp b/vendor/pdalboost/boost/mpl/clear_fwd.hpp
new file mode 100644
index 0000000..a03d730
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/clear_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_CLEAR_FWD_HPP_INCLUDED
+#define BOOST_MPL_CLEAR_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct clear_impl;
+template< typename Sequence > struct clear;
+
+}}
+
+#endif // BOOST_MPL_CLEAR_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/comparison.hpp b/vendor/pdalboost/boost/mpl/comparison.hpp
new file mode 100644
index 0000000..99dca9d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/comparison.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_COMPARISON_HPP_INCLUDED
+#define BOOST_MPL_COMPARISON_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/not_equal_to.hpp>
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/greater.hpp>
+#include <boost/mpl/less_equal.hpp>
+#include <boost/mpl/greater_equal.hpp>
+
+#endif // BOOST_MPL_COMPARISON_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/contains.hpp b/vendor/pdalboost/boost/mpl/contains.hpp
new file mode 100644
index 0000000..9deff4e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/contains.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_CONTAINS_HPP_INCLUDED
+#define BOOST_MPL_CONTAINS_HPP_INCLUDED
+
+// Copyright Eric Friedman 2002
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/contains_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/contains_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct contains
+    : contains_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence,T >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,contains,(Sequence,T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, contains)
+
+}}
+
+#endif // BOOST_MPL_CONTAINS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/contains_fwd.hpp b/vendor/pdalboost/boost/mpl/contains_fwd.hpp
new file mode 100644
index 0000000..e43f8a0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/contains_fwd.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_CONTAINS_FWD_HPP_INCLUDED
+#define BOOST_MPL_CONTAINS_FWD_HPP_INCLUDED
+
+// Copyright Eric Friedman 2002
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct contains_impl;
+template< typename Sequence, typename T > struct contains;
+
+}}
+
+#endif // BOOST_MPL_CONTAINS_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/deref.hpp b/vendor/pdalboost/boost/mpl/deref.hpp
new file mode 100644
index 0000000..da2bf13
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/deref.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_DEREF_HPP_INCLUDED
+#define BOOST_MPL_DEREF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/msvc_type.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Iterator)
+    >
+struct deref
+{
+#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)
+    typedef typename Iterator::type type;
+#else
+    typedef typename aux::msvc_type<Iterator>::type type;
+#endif
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,deref,(Iterator))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, deref)
+
+}}
+
+#endif // BOOST_MPL_DEREF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/distance.hpp b/vendor/pdalboost/boost/mpl/distance.hpp
new file mode 100644
index 0000000..6ab10c0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/distance.hpp
@@ -0,0 +1,78 @@
+
+#ifndef BOOST_MPL_DISTANCE_HPP_INCLUDED
+#define BOOST_MPL_DISTANCE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/distance_fwd.hpp>
+#include <boost/mpl/iter_fold.hpp>
+#include <boost/mpl/iterator_range.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/tag.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/aux_/msvc_eti_base.hpp>
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+
+namespace pdalboost { namespace mpl {
+
+// default implementation for forward/bidirectional iterators
+template< typename Tag > struct distance_impl
+{
+    template< typename First, typename Last > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+        : aux::msvc_eti_base< typename iter_fold<
+              iterator_range<First,Last>
+            , mpl::long_<0>
+            , next<>
+            >::type >
+    {
+#else
+    {
+        typedef typename iter_fold<
+              iterator_range<First,Last>
+            , mpl::long_<0>
+            , next<>
+            >::type type;
+        
+        BOOST_STATIC_CONSTANT(long, value =
+              (iter_fold<
+                  iterator_range<First,Last>
+                , mpl::long_<0>
+                , next<>
+                >::type::value)
+            );
+#endif
+    };
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(First)
+    , typename BOOST_MPL_AUX_NA_PARAM(Last)
+    >
+struct distance
+    : distance_impl< typename tag<First>::type >
+        ::template apply<First, Last>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, distance, (First, Last))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, distance)
+
+}}
+
+#endif // BOOST_MPL_DISTANCE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/distance_fwd.hpp b/vendor/pdalboost/boost/mpl/distance_fwd.hpp
new file mode 100644
index 0000000..67ab959
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/distance_fwd.hpp
@@ -0,0 +1,28 @@
+
+#ifndef BOOST_MPL_DISTANCE_FWD_HPP_INCLUDED
+#define BOOST_MPL_DISTANCE_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/common_name_wknd.hpp>
+
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_COMMON_NAME_WKND(distance)
+
+template< typename Tag > struct distance_impl;
+template< typename First, typename Last > struct distance;
+
+}}
+
+#endif // BOOST_MPL_DISTANCE_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/empty.hpp b/vendor/pdalboost/boost/mpl/empty.hpp
new file mode 100644
index 0000000..2026df8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/empty.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_EMPTY_HPP_INCLUDED
+#define BOOST_MPL_EMPTY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/empty_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/empty_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    >
+struct empty
+    : empty_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,empty,(Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, empty)
+
+}}
+
+#endif // BOOST_MPL_EMPTY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/empty_fwd.hpp b/vendor/pdalboost/boost/mpl/empty_fwd.hpp
new file mode 100644
index 0000000..f6988cc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/empty_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_EMPTY_FWD_HPP_INCLUDED
+#define BOOST_MPL_EMPTY_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct empty_impl;
+template< typename Sequence > struct empty;
+
+}}
+
+#endif // BOOST_MPL_EMPTY_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/equal_to.hpp b/vendor/pdalboost/boost/mpl/equal_to.hpp
new file mode 100644
index 0000000..5dfc87d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/equal_to.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_EQUAL_TO_HPP_INCLUDED
+#define BOOST_MPL_EQUAL_TO_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#define AUX778076_OP_NAME equal_to
+#define AUX778076_OP_TOKEN ==
+#include <boost/mpl/aux_/comparison_op.hpp>
+
+#endif // BOOST_MPL_EQUAL_TO_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/erase_fwd.hpp b/vendor/pdalboost/boost/mpl/erase_fwd.hpp
new file mode 100644
index 0000000..1930b4d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/erase_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_ERASE_FWD_HPP_INCLUDED
+#define BOOST_MPL_ERASE_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct erase_impl;
+template< typename Sequence, typename First, typename Last > struct erase;
+
+}}
+
+#endif // BOOST_MPL_ERASE_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/erase_key_fwd.hpp b/vendor/pdalboost/boost/mpl/erase_key_fwd.hpp
new file mode 100644
index 0000000..7058155
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/erase_key_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_ERASE_KEY_FWD_HPP_INCLUDED
+#define BOOST_MPL_ERASE_KEY_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct erase_key_impl;
+template< typename Sequence, typename Key > struct erase_key;
+
+}}
+
+#endif // BOOST_MPL_ERASE_KEY_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/eval_if.hpp b/vendor/pdalboost/boost/mpl/eval_if.hpp
new file mode 100644
index 0000000..25a45b1
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/eval_if.hpp
@@ -0,0 +1,71 @@
+
+#ifndef BOOST_MPL_EVAL_IF_HPP_INCLUDED
+#define BOOST_MPL_EVAL_IF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(C)
+    , typename BOOST_MPL_AUX_NA_PARAM(F1)
+    , typename BOOST_MPL_AUX_NA_PARAM(F2)
+    >
+struct eval_if
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+     || ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \
+        && BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304)) \
+        )
+{
+    typedef typename if_<C,F1,F2>::type f_;
+    typedef typename f_::type type;
+#else
+    : if_<C,F1,F2>::type
+{
+#endif
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,eval_if,(C,F1,F2))
+};
+
+// (almost) copy & paste in order to save one more
+// recursively nested template instantiation to user
+template<
+      bool C
+    , typename F1
+    , typename F2
+    >
+struct eval_if_c
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+     || ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \
+        && BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304)) \
+        )
+{
+    typedef typename if_c<C,F1,F2>::type f_;
+    typedef typename f_::type type;
+#else
+    : if_c<C,F1,F2>::type
+{
+#endif
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, eval_if)
+
+}}
+
+#endif // BOOST_MPL_EVAL_IF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/find.hpp b/vendor/pdalboost/boost/mpl/find.hpp
new file mode 100644
index 0000000..8c8be22
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/find.hpp
@@ -0,0 +1,38 @@
+
+#ifndef BOOST_MPL_FIND_HPP_INCLUDED
+#define BOOST_MPL_FIND_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/find_if.hpp>
+#include <boost/mpl/same_as.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct find
+    : find_if< Sequence,same_as<T> >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,find,(Sequence,T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, find)
+
+}}
+
+#endif // BOOST_MPL_FIND_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/find_if.hpp b/vendor/pdalboost/boost/mpl/find_if.hpp
new file mode 100644
index 0000000..55cbb95
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/find_if.hpp
@@ -0,0 +1,50 @@
+
+#ifndef BOOST_MPL_FIND_IF_HPP_INCLUDED
+#define BOOST_MPL_FIND_IF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/find_if_pred.hpp>
+#include <boost/mpl/arg.hpp>
+#include <boost/mpl/iter_fold_if.hpp>
+#include <boost/mpl/aux_/common_name_wknd.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_COMMON_NAME_WKND(find_if)
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(Predicate)
+    >
+struct find_if
+{
+    typedef typename iter_fold_if<
+          Sequence
+        , void
+        , mpl::arg<1> // ignore
+        , protect< aux::find_if_pred<Predicate> >
+        >::type result_;
+
+    typedef typename second<result_>::type type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,find_if,(Sequence,Predicate))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2,find_if)
+
+}}
+
+#endif // BOOST_MPL_FIND_IF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/fold.hpp b/vendor/pdalboost/boost/mpl/fold.hpp
new file mode 100644
index 0000000..244c463
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/fold.hpp
@@ -0,0 +1,48 @@
+
+#ifndef BOOST_MPL_FOLD_HPP_INCLUDED
+#define BOOST_MPL_FOLD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/O1_size.hpp>
+#include <boost/mpl/aux_/fold_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(State)
+    , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp)
+    >
+struct fold
+{
+    typedef typename aux::fold_impl<
+          ::pdalboost::mpl::O1_size<Sequence>::value
+        , typename begin<Sequence>::type
+        , typename end<Sequence>::type
+        , State
+        , ForwardOp
+        >::state type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,fold,(Sequence,State,ForwardOp))
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, fold)
+
+}}
+
+#endif // BOOST_MPL_FOLD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/for_each.hpp b/vendor/pdalboost/boost/mpl/for_each.hpp
new file mode 100644
index 0000000..b3c9c6e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/for_each.hpp
@@ -0,0 +1,123 @@
+
+#ifndef BOOST_MPL_FOR_EACH_HPP_INCLUDED
+#define BOOST_MPL_FOR_EACH_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/is_sequence.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/aux_/config/gpu.hpp>
+#include <boost/mpl/aux_/unwrap.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/value_init.hpp>
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< bool done = true >
+struct for_each_impl
+{
+    template<
+          typename Iterator
+        , typename LastIterator
+        , typename TransformFunc
+        , typename F
+        >
+    BOOST_MPL_CFG_GPU_ENABLED
+    static void execute(
+          Iterator*
+        , LastIterator*
+        , TransformFunc*
+        , F
+        )
+    {
+    }
+};
+
+template<>
+struct for_each_impl<false>
+{
+    template<
+          typename Iterator
+        , typename LastIterator
+        , typename TransformFunc
+        , typename F
+        >
+    BOOST_MPL_CFG_GPU_ENABLED
+    static void execute(
+          Iterator*
+        , LastIterator*
+        , TransformFunc* 
+        , F f
+        )
+    {
+        typedef typename deref<Iterator>::type item;
+        typedef typename apply1<TransformFunc,item>::type arg;
+    
+        // dwa 2002/9/10 -- make sure not to invoke undefined behavior
+        // when we pass arg.
+        value_initialized<arg> x;
+        aux::unwrap(f, 0)(pdalboost::get(x));
+        
+        typedef typename mpl::next<Iterator>::type iter;
+        for_each_impl<pdalboost::is_same<iter,LastIterator>::value>
+            ::execute( static_cast<iter*>(0), static_cast<LastIterator*>(0), static_cast<TransformFunc*>(0), f);
+    }
+};
+
+} // namespace aux
+
+// agurt, 17/mar/02: pointer default parameters are necessary to workaround 
+// MSVC 6.5 function template signature's mangling bug
+template<
+      typename Sequence
+    , typename TransformOp
+    , typename F
+    >
+BOOST_MPL_CFG_GPU_ENABLED
+inline
+void for_each(F f, Sequence* = 0, TransformOp* = 0)
+{
+    BOOST_MPL_ASSERT(( is_sequence<Sequence> ));
+
+    typedef typename begin<Sequence>::type first;
+    typedef typename end<Sequence>::type last;
+
+    aux::for_each_impl< pdalboost::is_same<first,last>::value >
+        ::execute(static_cast<first*>(0), static_cast<last*>(0), static_cast<TransformOp*>(0), f);
+}
+
+template<
+      typename Sequence
+    , typename F
+    >
+BOOST_MPL_CFG_GPU_ENABLED
+inline
+void for_each(F f, Sequence* = 0)
+{
+  // jfalcou: fully qualifying this call so it doesnt clash with pdalboostphoenix::for_each
+  // ons ome compilers -- done on 02/28/2011
+  pdalboost::mpl::for_each<Sequence, identity<> >(f);
+}
+
+}}
+
+#endif // BOOST_MPL_FOR_EACH_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/front_fwd.hpp b/vendor/pdalboost/boost/mpl/front_fwd.hpp
new file mode 100644
index 0000000..5fdfafe
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/front_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_FRONT_FWD_HPP_INCLUDED
+#define BOOST_MPL_FRONT_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct front_impl;
+template< typename Sequence > struct front;
+
+}}
+
+#endif // BOOST_MPL_FRONT_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/front_inserter.hpp b/vendor/pdalboost/boost/mpl/front_inserter.hpp
new file mode 100644
index 0000000..5b2a745
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/front_inserter.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED
+#define BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/push_front.hpp>
+#include <boost/mpl/inserter.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Sequence
+    >
+struct front_inserter
+    : inserter< Sequence,push_front<> >
+{
+};
+
+}}
+
+#endif // BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/greater.hpp b/vendor/pdalboost/boost/mpl/greater.hpp
new file mode 100644
index 0000000..b1f0a2c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/greater.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_GREATER_HPP_INCLUDED
+#define BOOST_MPL_GREATER_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#define AUX778076_OP_NAME greater
+#define AUX778076_OP_TOKEN >
+#include <boost/mpl/aux_/comparison_op.hpp>
+
+#endif // BOOST_MPL_GREATER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/greater_equal.hpp b/vendor/pdalboost/boost/mpl/greater_equal.hpp
new file mode 100644
index 0000000..7a06a62
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/greater_equal.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_GREATER_EQUAL_HPP_INCLUDED
+#define BOOST_MPL_GREATER_EQUAL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#define AUX778076_OP_NAME greater_equal
+#define AUX778076_OP_TOKEN >=
+#include <boost/mpl/aux_/comparison_op.hpp>
+
+#endif // BOOST_MPL_GREATER_EQUAL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/has_key.hpp b/vendor/pdalboost/boost/mpl/has_key.hpp
new file mode 100644
index 0000000..67561f9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/has_key.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_HAS_KEY_HPP_INCLUDED
+#define BOOST_MPL_HAS_KEY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/has_key_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/has_key_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(AssociativeSequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(Key)
+    >
+struct has_key
+    : has_key_impl< typename sequence_tag<AssociativeSequence>::type >
+        ::template apply<AssociativeSequence,Key>
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,has_key,(AssociativeSequence,Key))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, has_key)
+
+}}
+
+#endif // BOOST_MPL_HAS_KEY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/has_key_fwd.hpp b/vendor/pdalboost/boost/mpl/has_key_fwd.hpp
new file mode 100644
index 0000000..b334f26
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/has_key_fwd.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_HAS_KEY_FWD_HPP_INCLUDED
+#define BOOST_MPL_HAS_KEY_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct has_key_impl;
+template< typename AssociativeSequence, typename Key > struct has_key;
+
+}}
+
+#endif // BOOST_MPL_HAS_KEY_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/has_xxx.hpp b/vendor/pdalboost/boost/mpl/has_xxx.hpp
new file mode 100644
index 0000000..b65a74a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/has_xxx.hpp
@@ -0,0 +1,647 @@
+
+#ifndef BOOST_MPL_HAS_XXX_HPP_INCLUDED
+#define BOOST_MPL_HAS_XXX_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2006
+// Copyright David Abrahams 2002-2003
+// Copyright Daniel Walker 2007
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/config/gcc.hpp>
+#include <boost/mpl/aux_/config/has_xxx.hpp>
+#include <boost/mpl/aux_/config/msvc_typename.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/preprocessor/array/elem.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+
+#if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x590) )
+# include <boost/type_traits/is_class.hpp>
+#endif
+
+#if !defined(BOOST_MPL_CFG_NO_HAS_XXX)
+
+#   if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+// agurt, 11/sep/02: MSVC-specific version (< 7.1), based on a USENET 
+// newsgroup's posting by John Madsen (comp.lang.c++.moderated, 
+// 1999-11-12 19:17:06 GMT); the code is _not_ standard-conforming, but 
+// it works way more reliably than the SFINAE-based implementation
+
+// Modified dwa 8/Oct/02 to handle reference types.
+
+#   include <boost/mpl/if.hpp>
+#   include <boost/mpl/bool.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+struct has_xxx_tag;
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+template< typename U > struct msvc_incomplete_array
+{
+    typedef char (&type)[sizeof(U) + 1];
+};
+#endif
+
+template< typename T >
+struct msvc_is_incomplete
+{
+    // MSVC is capable of some kinds of SFINAE.  If U is an incomplete
+    // type, it won't pick the second overload
+    static char tester(...);
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+    template< typename U >
+    static typename msvc_incomplete_array<U>::type tester(type_wrapper<U>);
+#else
+    template< typename U >
+    static char (& tester(type_wrapper<U>) )[sizeof(U)+1];
+#endif 
+    
+    BOOST_STATIC_CONSTANT(bool, value = 
+          sizeof(tester(type_wrapper<T>())) == 1
+        );
+};
+
+template<>
+struct msvc_is_incomplete<int>
+{
+    BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+}}}
+
+#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, default_) \
+template< typename T, typename name = ::pdalboost::mpl::aux::has_xxx_tag > \
+struct BOOST_PP_CAT(trait,_impl) : T \
+{ \
+    static pdalboost::mpl::aux::no_tag \
+    test(void(*)(::pdalboost::mpl::aux::has_xxx_tag)); \
+    \
+    static pdalboost::mpl::aux::yes_tag test(...); \
+    \
+    BOOST_STATIC_CONSTANT(bool, value = \
+          sizeof(test(static_cast<void(*)(name)>(0))) \
+            != sizeof(pdalboost::mpl::aux::no_tag) \
+        ); \
+    typedef pdalboost::mpl::bool_<value> type; \
+}; \
+\
+template< typename T, typename fallback_ = pdalboost::mpl::bool_<default_> > \
+struct trait \
+    : pdalboost::mpl::if_c< \
+          pdalboost::mpl::aux::msvc_is_incomplete<T>::value \
+        , pdalboost::mpl::bool_<false> \
+        , BOOST_PP_CAT(trait,_impl)<T> \
+        >::type \
+{ \
+}; \
+\
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, void) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, bool) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, char) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed char) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned char) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed short) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned short) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed int) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned int) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, signed long) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, unsigned long) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, float) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, double) \
+BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, long double) \
+/**/
+
+#   define BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, T) \
+template<> struct trait<T> \
+{ \
+    BOOST_STATIC_CONSTANT(bool, value = false); \
+    typedef pdalboost::mpl::bool_<false> type; \
+}; \
+/**/
+
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, unused) \
+    BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, unused) \
+    BOOST_MPL_AUX_HAS_XXX_TRAIT_SPEC(trait, wchar_t) \
+/**/
+#else
+#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, unused) \
+    BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF_(trait, name, unused) \
+/**/
+#endif
+
+
+// SFINAE-based implementations below are derived from a USENET newsgroup's 
+// posting by Rani Sharoni (comp.lang.c++.moderated, 2002-03-17 07:45:09 PST)
+
+#   elif BOOST_WORKAROUND(BOOST_MSVC, <= 1400) \
+      || (BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1800)) && defined(__CUDACC__)) \
+      || BOOST_WORKAROUND(__IBMCPP__, <= 700)
+
+// MSVC 7.1 & MSVC 8.0 & VACPP
+
+// agurt, 15/jun/05: replace overload-based SFINAE implementation with SFINAE
+// applied to partial specialization to fix some apparently random failures 
+// (thanks to Daniel Wallin for researching this!)
+
+#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \
+template< typename T > \
+struct BOOST_PP_CAT(trait, _msvc_sfinae_helper) \
+{ \
+    typedef void type; \
+};\
+\
+template< typename T, typename U = void > \
+struct BOOST_PP_CAT(trait,_impl_) \
+{ \
+    BOOST_STATIC_CONSTANT(bool, value = false); \
+    typedef pdalboost::mpl::bool_<value> type; \
+}; \
+\
+template< typename T > \
+struct BOOST_PP_CAT(trait,_impl_)< \
+      T \
+    , typename BOOST_PP_CAT(trait, _msvc_sfinae_helper)< typename T::name >::type \
+    > \
+{ \
+    BOOST_STATIC_CONSTANT(bool, value = true); \
+    typedef pdalboost::mpl::bool_<value> type; \
+}; \
+\
+template< typename T, typename fallback_ = pdalboost::mpl::bool_<default_> > \
+struct trait \
+    : BOOST_PP_CAT(trait,_impl_)<T> \
+{ \
+}; \
+/**/
+
+#   elif BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x590) )
+
+#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_BCB_DEF(trait, trait_tester, name, default_) \
+template< typename T, bool IS_CLASS > \
+struct trait_tester \
+{ \
+    BOOST_STATIC_CONSTANT( bool,  value = false ); \
+}; \
+template< typename T > \
+struct trait_tester< T, true > \
+{ \
+    struct trait_tester_impl \
+    { \
+        template < class U > \
+        static int  resolve( pdalboost::mpl::aux::type_wrapper<U> const volatile * \
+                           , pdalboost::mpl::aux::type_wrapper<typename U::name >* = 0 ); \
+        static char resolve( ... ); \
+    }; \
+    typedef pdalboost::mpl::aux::type_wrapper<T> t_; \
+    BOOST_STATIC_CONSTANT( bool, value = ( sizeof( trait_tester_impl::resolve( static_cast< t_ * >(0) ) ) == sizeof(int) ) ); \
+}; \
+template< typename T, typename fallback_ = pdalboost::mpl::bool_<default_> > \
+struct trait           \
+{                      \
+    BOOST_STATIC_CONSTANT( bool, value = (trait_tester< T, pdalboost::is_class< T >::value >::value) );     \
+    typedef pdalboost::mpl::bool_< trait< T, fallback_ >::value > type; \
+};
+
+#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \
+    BOOST_MPL_HAS_XXX_TRAIT_NAMED_BCB_DEF( trait \
+                                         , BOOST_PP_CAT(trait,_tester)      \
+                                         , name       \
+                                         , default_ ) \
+/**/
+
+#   else // other SFINAE-capable compilers
+
+#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \
+template< typename T, typename fallback_ = pdalboost::mpl::bool_<default_> > \
+struct trait \
+{ \
+    struct gcc_3_2_wknd \
+    { \
+        template< typename U > \
+        static pdalboost::mpl::aux::yes_tag test( \
+              pdalboost::mpl::aux::type_wrapper<U> const volatile* \
+            , pdalboost::mpl::aux::type_wrapper<BOOST_MSVC_TYPENAME U::name>* = 0 \
+            ); \
+    \
+        static pdalboost::mpl::aux::no_tag test(...); \
+    }; \
+    \
+    typedef pdalboost::mpl::aux::type_wrapper<T> t_; \
+    BOOST_STATIC_CONSTANT(bool, value = \
+          sizeof(gcc_3_2_wknd::test(static_cast<t_*>(0))) \
+            == sizeof(pdalboost::mpl::aux::yes_tag) \
+        ); \
+    typedef pdalboost::mpl::bool_<value> type; \
+}; \
+/**/
+
+#   endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+
+#else // BOOST_MPL_CFG_NO_HAS_XXX
+
+// placeholder implementation
+
+#   define BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, default_) \
+template< typename T, typename fallback_ = pdalboost::mpl::bool_<default_> > \
+struct trait \
+{ \
+    BOOST_STATIC_CONSTANT(bool, value = fallback_::value); \
+    typedef fallback_ type; \
+}; \
+/**/
+
+#endif
+
+#define BOOST_MPL_HAS_XXX_TRAIT_DEF(name) \
+    BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(BOOST_PP_CAT(has_,name), name, false) \
+/**/
+
+
+#if !defined(BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE)
+
+// Create a boolean Metafunction to detect a nested template
+// member. This implementation is based on a USENET newsgroup's
+// posting by Aleksey Gurtovoy (comp.lang.c++.moderated, 2002-03-19),
+// Rani Sharoni's USENET posting cited above, the non-template has_xxx
+// implementations above, and discussion on the Boost mailing list.
+
+#   if !defined(BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES)
+#     if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
+#       define BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES 1
+#     else
+#       define BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES 0
+#     endif
+#   endif
+
+#   if !defined(BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION)
+#     if (defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS))
+#       define BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION 1
+#     else
+#       define BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION 0
+#     endif
+#   endif
+
+#   if !defined(BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE)
+#     if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
+#       define BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE 1
+#     else
+#       define BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE 0
+#     endif
+#   endif
+
+// NOTE: Many internal implementation macros take a Boost.Preprocessor
+// array argument called args which is of the following form.
+//           ( 4, ( trait, name, max_arity, default_ ) )
+
+#   define BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args) \
+      BOOST_PP_CAT(BOOST_PP_ARRAY_ELEM(0, args) , _introspect) \
+    /**/
+
+#   define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) \
+      BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_ARRAY_ELEM(0, args) , _substitute), n) \
+    /**/
+
+#   define BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args) \
+      BOOST_PP_CAT(BOOST_PP_ARRAY_ELEM(0, args) , _test) \
+    /**/
+
+// Thanks to Guillaume Melquiond for pointing out the need for the
+// "substitute" template as an argument to the overloaded test
+// functions to get SFINAE to work for member templates with the
+// correct name but different number of arguments.
+#   define BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE(z, n, args) \
+      template< \
+          template< BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n), typename V) > class V \
+       > \
+      struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) { \
+      }; \
+    /**/
+
+#   define BOOST_MPL_HAS_MEMBER_SUBSTITUTE(args, substitute_macro) \
+      BOOST_PP_REPEAT( \
+          BOOST_PP_ARRAY_ELEM(2, args) \
+        , BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE \
+        , args \
+      ) \
+    /**/
+
+#   if !BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION
+#     define BOOST_MPL_HAS_MEMBER_REJECT(args, member_macro) \
+        template< typename V > \
+        static pdalboost::mpl::aux::no_tag \
+        BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)(...); \
+      /**/
+#   else
+#     define BOOST_MPL_HAS_MEMBER_REJECT(args, member_macro) \
+        static pdalboost::mpl::aux::no_tag \
+        BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)(...); \
+      /**/
+#   endif
+
+#   if !BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES
+#     define BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT(z, n, args) \
+        template< typename V > \
+        static pdalboost::mpl::aux::yes_tag \
+        BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \
+            pdalboost::mpl::aux::type_wrapper< V > const volatile* \
+          , BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) < \
+                V::template BOOST_PP_ARRAY_ELEM(1, args) \
+            >* = 0 \
+        ); \
+      /**/
+#     define BOOST_MPL_HAS_MEMBER_ACCEPT(args, member_macro) \
+        BOOST_PP_REPEAT( \
+            BOOST_PP_ARRAY_ELEM(2, args) \
+          , BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT \
+          , args \
+        ) \
+      /**/
+#   else
+#     define BOOST_MPL_HAS_MEMBER_ACCEPT(args, member_macro) \
+        template< typename V > \
+        static pdalboost::mpl::aux::yes_tag \
+        BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \
+            V const volatile* \
+          , member_macro(args, V, T)* = 0 \
+        ); \
+      /**/
+#   endif
+
+#   if !BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION
+#     define BOOST_MPL_HAS_MEMBER_TEST(args) \
+          sizeof(BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)< U >(0)) \
+              == sizeof(pdalboost::mpl::aux::yes_tag) \
+      /**/
+#   else
+#     if !BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES
+#       define BOOST_MPL_HAS_MEMBER_TEST(args) \
+          sizeof( \
+              BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \
+                  static_cast< pdalboost::mpl::aux::type_wrapper< U >* >(0) \
+              ) \
+          ) == sizeof(pdalboost::mpl::aux::yes_tag) \
+        /**/
+#     else
+#       define BOOST_MPL_HAS_MEMBER_TEST(args) \
+          sizeof( \
+              BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)( \
+                  static_cast< U* >(0) \
+              ) \
+          ) == sizeof(pdalboost::mpl::aux::yes_tag) \
+        /**/
+#     endif
+#   endif
+
+#   define BOOST_MPL_HAS_MEMBER_INTROSPECT( \
+               args, substitute_macro, member_macro \
+           ) \
+      template< typename U > \
+      struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args) { \
+          BOOST_MPL_HAS_MEMBER_SUBSTITUTE(args, substitute_macro) \
+          BOOST_MPL_HAS_MEMBER_REJECT(args, member_macro) \
+          BOOST_MPL_HAS_MEMBER_ACCEPT(args, member_macro) \
+          BOOST_STATIC_CONSTANT( \
+              bool, value = BOOST_MPL_HAS_MEMBER_TEST(args) \
+          ); \
+          typedef pdalboost::mpl::bool_< value > type; \
+      }; \
+    /**/
+
+#   define BOOST_MPL_HAS_MEMBER_IMPLEMENTATION( \
+               args, introspect_macro, substitute_macro, member_macro \
+           ) \
+      template< \
+          typename T \
+        , typename fallback_ \
+              = pdalboost::mpl::bool_< BOOST_PP_ARRAY_ELEM(3, args) > \
+      > \
+      class BOOST_PP_ARRAY_ELEM(0, args) { \
+          introspect_macro(args, substitute_macro, member_macro) \
+      public: \
+          static const bool value \
+              = BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args)< T >::value; \
+          typedef typename BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args)< \
+              T \
+          >::type type; \
+      }; \
+    /**/
+
+// BOOST_MPL_HAS_MEMBER_WITH_FUNCTION_SFINAE expands to the full
+// implementation of the function-based metafunction. Compile with -E
+// to see the preprocessor output for this macro.
+#   define BOOST_MPL_HAS_MEMBER_WITH_FUNCTION_SFINAE( \
+               args, substitute_macro, member_macro \
+           ) \
+      BOOST_MPL_HAS_MEMBER_IMPLEMENTATION( \
+          args \
+        , BOOST_MPL_HAS_MEMBER_INTROSPECT \
+        , substitute_macro \
+        , member_macro \
+      ) \
+    /**/
+
+#   if BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE
+
+#     if !defined(BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE)
+#       if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
+#         define BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE 1
+#       endif
+#     endif
+
+#     if !BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE
+#       define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \
+                   args, n \
+               ) \
+          BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) \
+        /**/
+#     else
+#       define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \
+                   args, n \
+               ) \
+          BOOST_PP_CAT( \
+              boost_mpl_has_xxx_ \
+            , BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME(args, n) \
+          ) \
+        /**/
+#     endif
+
+#     define BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME( \
+                 args \
+             ) \
+        BOOST_PP_CAT( \
+            BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \
+                args, 0 \
+            ) \
+          , _tag \
+        ) \
+      /**/
+
+#     define BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE_WITH_TEMPLATE_SFINAE( \
+                 z, n, args \
+             ) \
+        template< \
+             template< BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n), typename U) > class U \
+        > \
+        struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \
+                args, n \
+               ) { \
+            typedef \
+                BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME(args) \
+                type; \
+        }; \
+      /**/
+
+#     define BOOST_MPL_HAS_MEMBER_SUBSTITUTE_WITH_TEMPLATE_SFINAE( \
+                 args, substitute_macro \
+             ) \
+        typedef void \
+            BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME(args); \
+        BOOST_PP_REPEAT( \
+            BOOST_PP_ARRAY_ELEM(2, args) \
+          , BOOST_MPL_HAS_MEMBER_MULTI_SUBSTITUTE_WITH_TEMPLATE_SFINAE \
+          , args \
+        ) \
+      /**/
+
+#     define BOOST_MPL_HAS_MEMBER_REJECT_WITH_TEMPLATE_SFINAE( \
+                 args, member_macro \
+             ) \
+        template< \
+            typename U \
+          , typename V \
+                = BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_TAG_NAME(args) \
+        > \
+        struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args) { \
+            BOOST_STATIC_CONSTANT(bool, value = false); \
+            typedef pdalboost::mpl::bool_< value > type; \
+        }; \
+      /**/
+
+#     define BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT_WITH_TEMPLATE_SFINAE( \
+                 z, n, args \
+             ) \
+        template< typename U > \
+        struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)< \
+            U \
+          , typename \
+                BOOST_MPL_HAS_MEMBER_INTROSPECTION_SUBSTITUTE_NAME_WITH_TEMPLATE_SFINAE( \
+                    args, n \
+                )< \
+                    BOOST_MSVC_TYPENAME U::BOOST_PP_ARRAY_ELEM(1, args)< > \
+                >::type \
+        > { \
+            BOOST_STATIC_CONSTANT(bool, value = true); \
+            typedef pdalboost::mpl::bool_< value > type; \
+        }; \
+      /**/
+
+#     define BOOST_MPL_HAS_MEMBER_ACCEPT_WITH_TEMPLATE_SFINAE( \
+                 args, member_macro \
+             ) \
+        BOOST_PP_REPEAT( \
+            BOOST_PP_ARRAY_ELEM(2, args) \
+          , BOOST_MPL_HAS_MEMBER_MULTI_ACCEPT_WITH_TEMPLATE_SFINAE \
+          , args \
+        ) \
+      /**/
+
+#     define BOOST_MPL_HAS_MEMBER_INTROSPECT_WITH_TEMPLATE_SFINAE( \
+                 args, substitute_macro, member_macro \
+             ) \
+        BOOST_MPL_HAS_MEMBER_REJECT_WITH_TEMPLATE_SFINAE(args, member_macro) \
+        BOOST_MPL_HAS_MEMBER_ACCEPT_WITH_TEMPLATE_SFINAE(args, member_macro) \
+        template< typename U > \
+        struct BOOST_MPL_HAS_MEMBER_INTROSPECTION_NAME(args) \
+            : BOOST_MPL_HAS_MEMBER_INTROSPECTION_TEST_NAME(args)< U > { \
+        }; \
+      /**/
+ 
+// BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE expands to the full
+// implementation of the template-based metafunction. Compile with -E
+// to see the preprocessor output for this macro.
+//
+// Note that if BOOST_MPL_HAS_XXX_NEEDS_NAMESPACE_LEVEL_SUBSTITUTE is
+// defined BOOST_MPL_HAS_MEMBER_SUBSTITUTE_WITH_TEMPLATE_SFINAE needs
+// to be expanded at namespace level before
+// BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE can be used.
+#     define BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE( \
+                 args, substitute_macro, member_macro \
+             ) \
+        BOOST_MPL_HAS_MEMBER_SUBSTITUTE_WITH_TEMPLATE_SFINAE( \
+            args, substitute_macro \
+        ) \
+        BOOST_MPL_HAS_MEMBER_IMPLEMENTATION( \
+            args \
+          , BOOST_MPL_HAS_MEMBER_INTROSPECT_WITH_TEMPLATE_SFINAE \
+          , substitute_macro \
+          , member_macro \
+        ) \
+      /**/
+
+#   endif // BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE
+
+// Note: In the current implementation the parameter and access macros
+// are no longer expanded.
+#   if !BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
+#     define BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF(trait, name, default_) \
+        BOOST_MPL_HAS_MEMBER_WITH_FUNCTION_SFINAE( \
+            ( 4, ( trait, name, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, default_ ) ) \
+          , BOOST_MPL_HAS_MEMBER_TEMPLATE_SUBSTITUTE_PARAMETER \
+          , BOOST_MPL_HAS_MEMBER_TEMPLATE_ACCESS \
+        ) \
+      /**/
+#   else
+#     define BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF(trait, name, default_) \
+        BOOST_MPL_HAS_MEMBER_WITH_TEMPLATE_SFINAE( \
+            ( 4, ( trait, name, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, default_ ) ) \
+          , BOOST_MPL_HAS_MEMBER_TEMPLATE_SUBSTITUTE_PARAMETER \
+          , BOOST_MPL_HAS_MEMBER_TEMPLATE_ACCESS \
+        ) \
+      /**/
+#   endif
+
+#else // BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE
+
+// placeholder implementation
+
+#   define BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF(trait, name, default_) \
+      template< typename T \
+              , typename fallback_ = pdalboost::mpl::bool_< default_ > > \
+      struct trait { \
+          BOOST_STATIC_CONSTANT(bool, value = fallback_::value); \
+          typedef fallback_ type; \
+      }; \
+    /**/
+
+#endif // BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE
+
+#   define BOOST_MPL_HAS_XXX_TEMPLATE_DEF(name) \
+      BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF( \
+          BOOST_PP_CAT(has_, name), name, false \
+      ) \
+    /**/
+
+#endif // BOOST_MPL_HAS_XXX_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/identity.hpp b/vendor/pdalboost/boost/mpl/identity.hpp
new file mode 100644
index 0000000..d061323
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/identity.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_IDENTITY_HPP_INCLUDED
+#define BOOST_MPL_IDENTITY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct identity
+{
+    typedef T type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, identity, (T))
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct make_identity
+{
+    typedef identity<T> type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, make_identity, (T))
+};
+
+BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, identity)
+BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, make_identity)
+
+}}
+
+#endif // BOOST_MPL_IDENTITY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/if.hpp b/vendor/pdalboost/boost/mpl/if.hpp
new file mode 100644
index 0000000..51dcfa5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/if.hpp
@@ -0,0 +1,135 @@
+
+#ifndef BOOST_MPL_IF_HPP_INCLUDED
+#define BOOST_MPL_IF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/integral.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+      bool C
+    , typename T1
+    , typename T2
+    >
+struct if_c
+{
+    typedef T1 type;
+};
+
+template<
+      typename T1
+    , typename T2
+    >
+struct if_c<false,T1,T2>
+{
+    typedef T2 type;
+};
+
+// agurt, 05/sep/04: nondescriptive parameter names for the sake of DigitalMars
+// (and possibly MWCW < 8.0); see http://article.gmane.org/gmane.comp.lib.boost.devel/108959
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    , typename BOOST_MPL_AUX_NA_PARAM(T3)
+    >
+struct if_
+{
+ private:
+    // agurt, 02/jan/03: two-step 'type' definition for the sake of aCC 
+    typedef if_c<
+#if defined(BOOST_MPL_CFG_BCC_INTEGRAL_CONSTANTS)
+          BOOST_MPL_AUX_VALUE_WKND(T1)::value
+#else
+          BOOST_MPL_AUX_STATIC_CAST(bool, BOOST_MPL_AUX_VALUE_WKND(T1)::value)
+#endif
+        , T2
+        , T3
+        > almost_type_;
+ 
+ public:
+    typedef typename almost_type_::type type;
+    
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(T1,T2,T3))
+};
+
+#else
+
+// no partial class template specialization
+
+namespace aux {
+
+template< bool C >
+struct if_impl
+{
+    template< typename T1, typename T2 > struct result_
+    {
+        typedef T1 type;
+    };
+};
+
+template<>
+struct if_impl<false>
+{
+    template< typename T1, typename T2 > struct result_
+    { 
+        typedef T2 type;
+    };
+};
+
+} // namespace aux
+
+template<
+      bool C_
+    , typename T1
+    , typename T2
+    >
+struct if_c
+{
+    typedef typename aux::if_impl< C_ >
+        ::template result_<T1,T2>::type type;
+};
+
+// (almost) copy & paste in order to save one more 
+// recursively nested template instantiation to user
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(C_)
+    , typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    >
+struct if_
+{
+    enum { msvc_wknd_ = BOOST_MPL_AUX_MSVC_VALUE_WKND(C_)::value };
+
+    typedef typename aux::if_impl< BOOST_MPL_AUX_STATIC_CAST(bool, msvc_wknd_) >
+        ::template result_<T1,T2>::type type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,if_,(C_,T1,T2))
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+BOOST_MPL_AUX_NA_SPEC(3, if_)
+
+}}
+
+#endif // BOOST_MPL_IF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/insert.hpp b/vendor/pdalboost/boost/mpl/insert.hpp
new file mode 100644
index 0000000..4b8d496
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/insert.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_INSERT_HPP_INCLUDED
+#define BOOST_MPL_INSERT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/insert_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/insert_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(Pos_or_T)
+    , typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct insert
+    : insert_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence,Pos_or_T,T >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,insert,(Sequence,Pos_or_T,T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, insert)
+
+}}
+
+#endif // BOOST_MPL_INSERT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/insert_fwd.hpp b/vendor/pdalboost/boost/mpl/insert_fwd.hpp
new file mode 100644
index 0000000..22df5b2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/insert_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_INSERT_FWD_HPP_INCLUDED
+#define BOOST_MPL_INSERT_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct insert_impl;
+template< typename Sequence, typename Pos_or_T, typename T > struct insert;
+
+}}
+
+#endif // BOOST_MPL_INSERT_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/insert_range_fwd.hpp b/vendor/pdalboost/boost/mpl/insert_range_fwd.hpp
new file mode 100644
index 0000000..5c8aeac
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/insert_range_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_INSERT_RANGE_FWD_HPP_INCLUDED
+#define BOOST_MPL_INSERT_RANGE_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct insert_range_impl;
+template< typename Sequence, typename Pos, typename Range > struct insert_range;
+
+}}
+
+#endif // BOOST_MPL_INSERT_RANGE_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/inserter.hpp b/vendor/pdalboost/boost/mpl/inserter.hpp
new file mode 100644
index 0000000..ec92d4d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/inserter.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_INSERTER_HPP_INCLUDED
+#define BOOST_MPL_INSERTER_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Sequence
+    , typename Operation
+    >
+struct inserter
+{
+    typedef Sequence    state;
+    typedef Operation   operation;
+};
+
+}}
+
+#endif // BOOST_MPL_INSERTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/int.hpp b/vendor/pdalboost/boost/mpl/int.hpp
new file mode 100644
index 0000000..b7fa0a7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/int.hpp
@@ -0,0 +1,22 @@
+
+#ifndef BOOST_MPL_INT_HPP_INCLUDED
+#define BOOST_MPL_INT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/int_fwd.hpp>
+
+#define AUX_WRAPPER_VALUE_TYPE int
+#include <boost/mpl/aux_/integral_wrapper.hpp>
+
+#endif // BOOST_MPL_INT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/int_fwd.hpp b/vendor/pdalboost/boost/mpl/int_fwd.hpp
new file mode 100644
index 0000000..03d20c1
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/int_fwd.hpp
@@ -0,0 +1,27 @@
+
+#ifndef BOOST_MPL_INT_FWD_HPP_INCLUDED
+#define BOOST_MPL_INT_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/adl_barrier.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct int_;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+BOOST_MPL_AUX_ADL_BARRIER_DECL(int_)
+
+#endif // BOOST_MPL_INT_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/integral_c.hpp b/vendor/pdalboost/boost/mpl/integral_c.hpp
new file mode 100644
index 0000000..7a692dc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/integral_c.hpp
@@ -0,0 +1,51 @@
+
+#ifndef BOOST_MPL_INTEGRAL_C_HPP_INCLUDED
+#define BOOST_MPL_INTEGRAL_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2006
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/integral_c_fwd.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#if BOOST_WORKAROUND(__HP_aCC, <= 53800)
+// the type of non-type template arguments may not depend on template arguments
+#   define AUX_WRAPPER_PARAMS(N) typename T, long N
+#else
+#   define AUX_WRAPPER_PARAMS(N) typename T, T N
+#endif
+
+#define AUX_WRAPPER_NAME integral_c
+#define AUX_WRAPPER_VALUE_TYPE T
+#define AUX_WRAPPER_INST(value) AUX_WRAPPER_NAME< T, value >
+#include <boost/mpl/aux_/integral_wrapper.hpp>
+
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !BOOST_WORKAROUND(__BORLANDC__, <= 0x551)
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+// 'bool' constant doesn't have 'next'/'prior' members
+template< bool C >
+struct integral_c<bool, C>
+{
+    BOOST_STATIC_CONSTANT(bool, value = C);
+    typedef integral_c_tag tag;
+    typedef integral_c type;
+    typedef bool value_type;
+    operator bool() const { return this->value; }
+};
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+#endif
+
+#endif // BOOST_MPL_INTEGRAL_C_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/integral_c_fwd.hpp b/vendor/pdalboost/boost/mpl/integral_c_fwd.hpp
new file mode 100644
index 0000000..05e311d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/integral_c_fwd.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_INTEGRAL_C_FWD_HPP_INCLUDED
+#define BOOST_MPL_INTEGRAL_C_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2006
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+#include <boost/mpl/aux_/adl_barrier.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+#if BOOST_WORKAROUND(__HP_aCC, <= 53800)
+// the type of non-type template arguments may not depend on template arguments
+template< typename T, long N > struct integral_c;
+#else
+template< typename T, T N > struct integral_c;
+#endif
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+BOOST_MPL_AUX_ADL_BARRIER_DECL(integral_c)
+
+#endif // BOOST_MPL_INTEGRAL_C_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/integral_c_tag.hpp b/vendor/pdalboost/boost/mpl/integral_c_tag.hpp
new file mode 100644
index 0000000..b604692
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/integral_c_tag.hpp
@@ -0,0 +1,26 @@
+
+#ifndef BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED
+#define BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+
+#include <boost/mpl/aux_/adl_barrier.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+struct integral_c_tag { BOOST_STATIC_CONSTANT(int, value = 0); };
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+BOOST_MPL_AUX_ADL_BARRIER_DECL(integral_c_tag)
+
+#endif // BOOST_MPL_INTEGRAL_C_TAG_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/is_placeholder.hpp b/vendor/pdalboost/boost/mpl/is_placeholder.hpp
new file mode 100644
index 0000000..209256e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/is_placeholder.hpp
@@ -0,0 +1,67 @@
+
+#ifndef BOOST_MPL_IS_PLACEHOLDER_HPP_INCLUDED
+#define BOOST_MPL_IS_PLACEHOLDER_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/arg_fwd.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename T >
+struct is_placeholder
+    : bool_<false>
+{
+};
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) >
+struct is_placeholder< arg<N> >
+    : bool_<true>
+{
+};
+
+#else
+
+namespace aux {
+
+aux::no_tag is_placeholder_helper(...);
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) >
+aux::yes_tag is_placeholder_helper(aux::type_wrapper< arg<N> >*);
+
+} // namespace aux
+
+template< typename T >
+struct is_placeholder
+{
+    static aux::type_wrapper<T>* get();
+    BOOST_STATIC_CONSTANT(bool, value = 
+          sizeof(aux::is_placeholder_helper(get())) == sizeof(aux::yes_tag)
+        );
+    
+    typedef bool_<value> type;
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}}
+
+#endif // BOOST_MPL_IS_PLACEHOLDER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/is_sequence.hpp b/vendor/pdalboost/boost/mpl/is_sequence.hpp
new file mode 100644
index 0000000..723187d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/is_sequence.hpp
@@ -0,0 +1,112 @@
+
+#ifndef BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED
+#define BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/sequence_tag_fwd.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/has_tag.hpp>
+#include <boost/mpl/aux_/has_begin.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+#   include <boost/mpl/aux_/msvc_is_class.hpp>
+#elif BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+#   include <boost/type_traits/is_class.hpp>
+#endif
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+namespace aux {
+
+// agurt, 11/jun/03: 
+// MSVC 6.5/7.0 fails if 'has_begin' is instantiated on a class type that has a
+// 'begin' member that doesn't name a type; e.g. 'has_begin< std::vector<int> >'
+// would fail; requiring 'T' to have _both_ 'tag' and 'begin' members workarounds
+// the issue for most real-world cases
+template< typename T > struct is_sequence_impl
+    : and_<
+          identity< aux::has_tag<T> >
+        , identity< aux::has_begin<T> >
+        >
+{
+};
+
+} // namespace aux
+        
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct is_sequence
+    : if_<
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+          aux::msvc_is_class<T> 
+#else
+          pdalboost::is_class<T> 
+#endif
+        , aux::is_sequence_impl<T>
+        , bool_<false>
+        >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_sequence, (T))
+};
+
+#elif defined(BOOST_MPL_CFG_NO_HAS_XXX)
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct is_sequence
+    : bool_<false>
+{
+};
+
+#else
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct is_sequence
+    : not_< is_same< typename begin<T>::type, void_ > >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_sequence, (T))
+};
+
+#endif // BOOST_MSVC
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+template<> struct is_sequence<int>
+    : bool_<false>
+{
+};
+#endif
+
+BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, is_sequence)
+
+}}
+
+#endif // BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/iter_fold.hpp b/vendor/pdalboost/boost/mpl/iter_fold.hpp
new file mode 100644
index 0000000..d318b4a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/iter_fold.hpp
@@ -0,0 +1,49 @@
+
+#ifndef BOOST_MPL_ITER_FOLD_HPP_INCLUDED
+#define BOOST_MPL_ITER_FOLD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/O1_size.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/aux_/iter_fold_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(State)
+    , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp)
+    >
+struct iter_fold
+{
+    typedef typename aux::iter_fold_impl<
+          ::pdalboost::mpl::O1_size<Sequence>::value
+        , typename begin<Sequence>::type
+        , typename end<Sequence>::type
+        , State
+        , typename lambda<ForwardOp>::type
+        >::state type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,iter_fold,(Sequence,State,ForwardOp))
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, iter_fold)
+
+}}
+
+#endif // BOOST_MPL_ITER_FOLD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/iter_fold_if.hpp b/vendor/pdalboost/boost/mpl/iter_fold_if.hpp
new file mode 100644
index 0000000..a6f0929
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/iter_fold_if.hpp
@@ -0,0 +1,117 @@
+
+#ifndef BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED
+#define BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright Eric Friedman 2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/logical.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/pair.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/aux_/iter_fold_if_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< typename Predicate, typename LastIterator >
+struct iter_fold_if_pred
+{
+    template< typename State, typename Iterator > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+        : and_<
+              not_< is_same<Iterator,LastIterator> >
+            , apply1<Predicate,Iterator>
+            >
+    {
+#else
+    {
+        typedef and_<
+              not_< is_same<Iterator,LastIterator> >
+            , apply1<Predicate,Iterator>
+            > type;
+#endif
+    };
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(State)
+    , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp)
+    , typename BOOST_MPL_AUX_NA_PARAM(ForwardPredicate)
+    , typename BOOST_MPL_AUX_NA_PARAM(BackwardOp)
+    , typename BOOST_MPL_AUX_NA_PARAM(BackwardPredicate)
+    >
+struct iter_fold_if
+{
+
+    typedef typename begin<Sequence>::type first_;
+    typedef typename end<Sequence>::type last_;
+
+    typedef typename eval_if<
+          is_na<BackwardPredicate>
+        , if_< is_na<BackwardOp>, always<false_>, always<true_> >
+        , identity<BackwardPredicate>
+        >::type backward_pred_;
+
+// cwpro8 doesn't like 'cut-off' type here (use typedef instead)
+#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) && !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+    struct result_ :
+#else
+    typedef
+#endif
+        aux::iter_fold_if_impl<
+          first_
+        , State
+        , ForwardOp
+        , protect< aux::iter_fold_if_pred< ForwardPredicate,last_ > >
+        , BackwardOp
+        , backward_pred_
+        >
+#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) && !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+    { };
+#else
+    result_;
+#endif
+
+public:
+
+    typedef pair<
+          typename result_::state
+        , typename result_::iterator
+        > type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          6
+        , iter_fold_if
+        , (Sequence,State,ForwardOp,ForwardPredicate,BackwardOp,BackwardPredicate)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(6, iter_fold_if)
+
+}}
+
+#endif // BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/iterator_category.hpp b/vendor/pdalboost/boost/mpl/iterator_category.hpp
new file mode 100644
index 0000000..1b390cd
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/iterator_category.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_ITERATOR_CATEGORY_HPP_INCLUDED
+#define BOOST_MPL_ITERATOR_CATEGORY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost {  namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Iterator)
+    >
+struct iterator_category
+{
+    typedef typename Iterator::category type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,iterator_category,(Iterator))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, iterator_category)
+
+}}
+
+#endif // BOOST_MPL_ITERATOR_CATEGORY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/iterator_range.hpp b/vendor/pdalboost/boost/mpl/iterator_range.hpp
new file mode 100644
index 0000000..d51b1e3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/iterator_range.hpp
@@ -0,0 +1,42 @@
+
+#ifndef BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED
+#define BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+struct iterator_range_tag;
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(First)
+    , typename BOOST_MPL_AUX_NA_PARAM(Last)
+    >
+struct iterator_range
+{
+    typedef iterator_range_tag tag;
+    typedef iterator_range type;
+    typedef First begin;
+    typedef Last end;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,iterator_range,(First,Last))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, iterator_range)
+
+}}
+
+#endif // BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/iterator_tags.hpp b/vendor/pdalboost/boost/mpl/iterator_tags.hpp
new file mode 100644
index 0000000..e24df6b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/iterator_tags.hpp
@@ -0,0 +1,27 @@
+
+#ifndef BOOST_MPL_ITERATOR_TAG_HPP_INCLUDED
+#define BOOST_MPL_ITERATOR_TAG_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/int.hpp>
+
+namespace pdalboost { namespace mpl {
+
+struct forward_iterator_tag       : int_<0> { typedef forward_iterator_tag type; };
+struct bidirectional_iterator_tag : int_<1> { typedef bidirectional_iterator_tag type; };
+struct random_access_iterator_tag : int_<2> { typedef random_access_iterator_tag type; };
+
+}}
+
+#endif // BOOST_MPL_ITERATOR_TAG_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/key_type_fwd.hpp b/vendor/pdalboost/boost/mpl/key_type_fwd.hpp
new file mode 100644
index 0000000..7b0f8e0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/key_type_fwd.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_KEY_TYPE_FWD_HPP_INCLUDED
+#define BOOST_MPL_KEY_TYPE_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct key_type_impl;
+template< typename AssociativeSequence, typename T > struct key_type;
+
+}}
+
+#endif // BOOST_MPL_KEY_TYPE_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/lambda.hpp b/vendor/pdalboost/boost/mpl/lambda.hpp
new file mode 100644
index 0000000..cc8f607
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/lambda.hpp
@@ -0,0 +1,29 @@
+
+#ifndef BOOST_MPL_LAMBDA_HPP_INCLUDED
+#define BOOST_MPL_LAMBDA_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/lambda_fwd.hpp>
+#include <boost/mpl/bind.hpp>
+#include <boost/mpl/aux_/config/lambda.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+#   include <boost/mpl/aux_/full_lambda.hpp>
+#else
+#   include <boost/mpl/aux_/lambda_no_ctps.hpp>
+#   include <boost/mpl/aux_/lambda_support.hpp>
+#   define BOOST_MPL_CFG_NO_IMPLICIT_METAFUNCTIONS
+#endif
+
+#endif // BOOST_MPL_LAMBDA_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/lambda_fwd.hpp b/vendor/pdalboost/boost/mpl/lambda_fwd.hpp
new file mode 100644
index 0000000..988e950
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/lambda_fwd.hpp
@@ -0,0 +1,57 @@
+
+#ifndef BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED
+#define BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/void_fwd.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/config/lambda.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+
+#   include <boost/mpl/int.hpp>
+#   include <boost/mpl/aux_/lambda_arity_param.hpp>
+#   include <boost/mpl/aux_/template_arity_fwd.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template< 
+      typename T = na
+    , typename Tag = void_
+    BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(
+          typename Arity = int_< aux::template_arity<T>::value >
+        )
+    >
+struct lambda;
+
+}}
+
+#else // BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT
+
+#   include <boost/mpl/bool.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template< 
+      typename T = na
+    , typename Tag = void_
+    , typename Protect = true_
+    > 
+struct lambda;
+
+}}
+
+#endif
+
+#endif // BOOST_MPL_LAMBDA_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/less.hpp b/vendor/pdalboost/boost/mpl/less.hpp
new file mode 100644
index 0000000..63da5aa
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/less.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LESS_HPP_INCLUDED
+#define BOOST_MPL_LESS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#define AUX778076_OP_NAME less
+#define AUX778076_OP_TOKEN <
+#include <boost/mpl/aux_/comparison_op.hpp>
+
+#endif // BOOST_MPL_LESS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/less_equal.hpp b/vendor/pdalboost/boost/mpl/less_equal.hpp
new file mode 100644
index 0000000..3d668c2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/less_equal.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LESS_EQUAL_HPP_INCLUDED
+#define BOOST_MPL_LESS_EQUAL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#define AUX778076_OP_NAME less_equal
+#define AUX778076_OP_TOKEN <=
+#include <boost/mpl/aux_/comparison_op.hpp>
+
+#endif // BOOST_MPL_LESS_EQUAL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/limits/arity.hpp b/vendor/pdalboost/boost/mpl/limits/arity.hpp
new file mode 100644
index 0000000..8c3eb36
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/limits/arity.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LIMITS_ARITY_HPP_INCLUDED
+#define BOOST_MPL_LIMITS_ARITY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_LIMIT_METAFUNCTION_ARITY)
+#   define BOOST_MPL_LIMIT_METAFUNCTION_ARITY 5
+#endif
+
+#endif // BOOST_MPL_LIMITS_ARITY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/limits/list.hpp b/vendor/pdalboost/boost/mpl/limits/list.hpp
new file mode 100644
index 0000000..b22d6a7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/limits/list.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LIMITS_LIST_HPP_INCLUDED
+#define BOOST_MPL_LIMITS_LIST_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_LIMIT_LIST_SIZE)
+#   define BOOST_MPL_LIMIT_LIST_SIZE 20
+#endif
+
+#endif // BOOST_MPL_LIMITS_LIST_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/limits/unrolling.hpp b/vendor/pdalboost/boost/mpl/limits/unrolling.hpp
new file mode 100644
index 0000000..6dba942
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/limits/unrolling.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LIMITS_UNROLLING_HPP_INCLUDED
+#define BOOST_MPL_LIMITS_UNROLLING_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_LIMIT_UNROLLING)
+#   define BOOST_MPL_LIMIT_UNROLLING 4
+#endif
+
+#endif // BOOST_MPL_LIMITS_UNROLLING_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/limits/vector.hpp b/vendor/pdalboost/boost/mpl/limits/vector.hpp
new file mode 100644
index 0000000..9007589
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/limits/vector.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LIMITS_VECTOR_HPP_INCLUDED
+#define BOOST_MPL_LIMITS_VECTOR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_LIMIT_VECTOR_SIZE)
+#   define BOOST_MPL_LIMIT_VECTOR_SIZE 20
+#endif
+
+#endif // BOOST_MPL_LIMITS_VECTOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list.hpp b/vendor/pdalboost/boost/mpl/list.hpp
new file mode 100644
index 0000000..cff8a4d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list.hpp
@@ -0,0 +1,57 @@
+
+#ifndef BOOST_MPL_LIST_HPP_INCLUDED
+#define BOOST_MPL_LIST_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/limits/list.hpp>
+#   include <boost/mpl/aux_/na.hpp>
+#   include <boost/mpl/aux_/config/preprocessor.hpp>
+
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/cat.hpp>
+#   include <boost/preprocessor/stringize.hpp>
+
+#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
+#   define AUX778076_LIST_HEADER \
+    BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE).hpp \
+    /**/
+#else
+#   define AUX778076_LIST_HEADER \
+    BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE)##.hpp \
+    /**/
+#endif
+
+#   include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_LIST_HEADER)
+#   undef AUX778076_LIST_HEADER
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER list.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/limits/list.hpp>
+
+#   define AUX778076_SEQUENCE_NAME list
+#   define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_LIST_SIZE
+#   include <boost/mpl/aux_/sequence_wrapper.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_LIST_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/O1_size.hpp b/vendor/pdalboost/boost/mpl/list/aux_/O1_size.hpp
new file mode 100644
index 0000000..b6ca808
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/O1_size.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/O1_size_fwd.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct O1_size_impl< aux::list_tag >
+{
+    template< typename List > struct apply
+        : List::size
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/begin_end.hpp b/vendor/pdalboost/boost/mpl/list/aux_/begin_end.hpp
new file mode 100644
index 0000000..ffc0f42
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/begin_end.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/begin_end_fwd.hpp>
+#include <boost/mpl/list/aux_/iterator.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+#include <boost/mpl/list/aux_/item.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct begin_impl< aux::list_tag >
+{
+    template< typename List > struct apply
+    {
+        typedef l_iter<typename List::type> type;
+    };
+};
+
+template<>
+struct end_impl< aux::list_tag >
+{
+    template< typename > struct apply
+    {
+        typedef l_iter<l_end> type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/clear.hpp b/vendor/pdalboost/boost/mpl/list/aux_/clear.hpp
new file mode 100644
index 0000000..5305c08
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/clear.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/clear_fwd.hpp>
+#include <boost/mpl/list/aux_/item.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct clear_impl< aux::list_tag >
+{
+    template< typename List > struct apply
+    {
+        typedef l_end type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/empty.hpp b/vendor/pdalboost/boost/mpl/list/aux_/empty.hpp
new file mode 100644
index 0000000..e32a1be
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/empty.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/empty_fwd.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct empty_impl< aux::list_tag >
+{
+    template< typename List > struct apply
+        : not_<typename List::size>
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/front.hpp b/vendor/pdalboost/boost/mpl/list/aux_/front.hpp
new file mode 100644
index 0000000..8d6fd26
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/front.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/front_fwd.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct front_impl< aux::list_tag >
+{
+    template< typename List > struct apply
+    {
+        typedef typename List::item type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/include_preprocessed.hpp b/vendor/pdalboost/boost/mpl/list/aux_/include_preprocessed.hpp
new file mode 100644
index 0000000..4f7cab2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/include_preprocessed.hpp
@@ -0,0 +1,35 @@
+
+// Copyright Aleksey Gurtovoy 2001-2006
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/stringize.hpp>
+
+#   define AUX778076_HEADER \
+    aux_/preprocessed/plain/BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))
+#   define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_HEADER)
+#   include AUX778076_INCLUDE_STRING
+#   undef AUX778076_INCLUDE_STRING
+#else
+#   include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_HEADER)
+#endif
+
+#   undef AUX778076_HEADER
+
+#undef BOOST_MPL_PREPROCESSED_HEADER
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/item.hpp b/vendor/pdalboost/boost/mpl/list/aux_/item.hpp
new file mode 100644
index 0000000..18653bc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/item.hpp
@@ -0,0 +1,55 @@
+
+#ifndef BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Size
+    , typename T
+    , typename Next
+    >
+struct l_item
+{
+// agurt, 17/jul/03: to facilitate the deficient 'is_sequence' implementation 
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+    typedef int begin;
+#endif
+    typedef aux::list_tag tag;
+    typedef l_item type;
+
+    typedef Size size;
+    typedef T item;
+    typedef Next next;
+};
+
+struct l_end
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+    typedef int begin;
+#endif
+    typedef aux::list_tag tag;
+    typedef l_end type;
+    typedef long_<0> size;
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/iterator.hpp b/vendor/pdalboost/boost/mpl/list/aux_/iterator.hpp
new file mode 100644
index 0000000..9edb9dd
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/iterator.hpp
@@ -0,0 +1,76 @@
+
+#ifndef BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/list/aux_/item.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/lambda_spec.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename Node >
+struct l_iter
+{
+    typedef aux::l_iter_tag tag;
+    typedef forward_iterator_tag category;
+};
+
+template< typename Node >
+struct deref< l_iter<Node> >
+{
+    typedef typename Node::item type;
+};
+
+template< typename Node >
+struct next< l_iter<Node> >
+{
+    typedef l_iter< typename Node::next > type;
+};
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template< typename Node >
+struct l_iter
+{
+    typedef aux::l_iter_tag tag;
+    typedef forward_iterator_tag category;
+    typedef typename Node::item type;
+    typedef l_iter< typename mpl::next<Node>::type > next;
+};
+
+#endif
+
+
+template<> struct l_iter<l_end>
+{
+    typedef aux::l_iter_tag tag;
+    typedef forward_iterator_tag category;
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+    typedef na type;
+    typedef l_iter next;
+#endif
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, l_iter)
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/numbered.hpp b/vendor/pdalboost/boost/mpl/list/aux_/numbered.hpp
new file mode 100644
index 0000000..0cd49a6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/numbered.hpp
@@ -0,0 +1,68 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// Copyright Peter Dimov 2000-2002
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if defined(BOOST_PP_IS_ITERATING)
+
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/enum_shifted_params.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define i BOOST_PP_FRAME_ITERATION(1)
+
+#if i == 1
+
+template<
+      BOOST_PP_ENUM_PARAMS(i, typename T)
+    >
+struct list1
+    : l_item<
+          long_<1>
+        , T0
+        , l_end
+        >
+{
+    typedef list1 type;
+};
+
+#else
+
+#   define MPL_AUX_LIST_TAIL(list, i, T) \
+    BOOST_PP_CAT(list,BOOST_PP_DEC(i))< \
+      BOOST_PP_ENUM_SHIFTED_PARAMS(i, T) \
+    > \
+    /**/
+    
+template<
+      BOOST_PP_ENUM_PARAMS(i, typename T)
+    >
+struct BOOST_PP_CAT(list,i)
+    : l_item<
+          long_<i>
+        , T0
+        , MPL_AUX_LIST_TAIL(list,i,T)
+        >
+{
+    typedef BOOST_PP_CAT(list,i) type;
+};
+
+#   undef MPL_AUX_LIST_TAIL
+
+#endif // i == 1
+
+#undef i
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/numbered_c.hpp b/vendor/pdalboost/boost/mpl/list/aux_/numbered_c.hpp
new file mode 100644
index 0000000..0006fd6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/numbered_c.hpp
@@ -0,0 +1,71 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if defined(BOOST_PP_IS_ITERATING)
+
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/enum_shifted_params.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define i BOOST_PP_FRAME_ITERATION(1)
+
+#if i == 1
+
+template<
+      typename T
+    , BOOST_PP_ENUM_PARAMS(i, T C)
+    >
+struct list1_c
+    : l_item<
+          long_<1>
+        , integral_c<T,C0>
+        , l_end
+        >
+{
+    typedef list1_c type;
+    typedef T value_type;
+};
+
+#else
+
+#   define MPL_AUX_LIST_C_TAIL(list, i, C) \
+    BOOST_PP_CAT(BOOST_PP_CAT(list,BOOST_PP_DEC(i)),_c)<T, \
+      BOOST_PP_ENUM_SHIFTED_PARAMS(i, C) \
+    > \
+    /**/
+    
+template<
+      typename T
+    , BOOST_PP_ENUM_PARAMS(i, T C)
+    >
+struct BOOST_PP_CAT(BOOST_PP_CAT(list,i),_c)
+    : l_item<
+          long_<i>
+        , integral_c<T,C0>
+        , MPL_AUX_LIST_C_TAIL(list,i,C)
+        >
+{
+    typedef BOOST_PP_CAT(BOOST_PP_CAT(list,i),_c) type;
+    typedef T value_type;
+};
+
+#   undef MPL_AUX_LIST_C_TAIL
+
+#endif // i == 1
+
+#undef i
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/pop_front.hpp b/vendor/pdalboost/boost/mpl/list/aux_/pop_front.hpp
new file mode 100644
index 0000000..84b3b7e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/pop_front.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/pop_front_fwd.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct pop_front_impl< aux::list_tag >
+{
+    template< typename List > struct apply
+    {
+        typedef typename mpl::next<List>::type type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list10.hpp b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list10.hpp
new file mode 100644
index 0000000..99c41a7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list10.hpp
@@ -0,0 +1,149 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list10.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0
+    >
+struct list1
+    : l_item<
+          long_<1>
+        , T0
+        , l_end
+        >
+{
+    typedef list1 type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct list2
+    : l_item<
+          long_<2>
+        , T0
+        , list1<T1>
+        >
+{
+    typedef list2 type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct list3
+    : l_item<
+          long_<3>
+        , T0
+        , list2< T1,T2 >
+        >
+{
+    typedef list3 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct list4
+    : l_item<
+          long_<4>
+        , T0
+        , list3< T1,T2,T3 >
+        >
+{
+    typedef list4 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct list5
+    : l_item<
+          long_<5>
+        , T0
+        , list4< T1,T2,T3,T4 >
+        >
+{
+    typedef list5 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct list6
+    : l_item<
+          long_<6>
+        , T0
+        , list5< T1,T2,T3,T4,T5 >
+        >
+{
+    typedef list6 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct list7
+    : l_item<
+          long_<7>
+        , T0
+        , list6< T1,T2,T3,T4,T5,T6 >
+        >
+{
+    typedef list7 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct list8
+    : l_item<
+          long_<8>
+        , T0
+        , list7< T1,T2,T3,T4,T5,T6,T7 >
+        >
+{
+    typedef list8 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct list9
+    : l_item<
+          long_<9>
+        , T0
+        , list8< T1,T2,T3,T4,T5,T6,T7,T8 >
+        >
+{
+    typedef list9 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct list10
+    : l_item<
+          long_<10>
+        , T0
+        , list9< T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+        >
+{
+    typedef list10 type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp
new file mode 100644
index 0000000..a335a57
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp
@@ -0,0 +1,164 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list10_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0
+    >
+struct list1_c
+    : l_item<
+          long_<1>
+        , integral_c< T,C0 >
+        , l_end
+        >
+{
+    typedef list1_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1
+    >
+struct list2_c
+    : l_item<
+          long_<2>
+        , integral_c< T,C0 >
+        , list1_c< T,C1 >
+        >
+{
+    typedef list2_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2
+    >
+struct list3_c
+    : l_item<
+          long_<3>
+        , integral_c< T,C0 >
+        , list2_c< T,C1,C2 >
+        >
+{
+    typedef list3_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3
+    >
+struct list4_c
+    : l_item<
+          long_<4>
+        , integral_c< T,C0 >
+        , list3_c< T,C1,C2,C3 >
+        >
+{
+    typedef list4_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4
+    >
+struct list5_c
+    : l_item<
+          long_<5>
+        , integral_c< T,C0 >
+        , list4_c< T,C1,C2,C3,C4 >
+        >
+{
+    typedef list5_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5
+    >
+struct list6_c
+    : l_item<
+          long_<6>
+        , integral_c< T,C0 >
+        , list5_c< T,C1,C2,C3,C4,C5 >
+        >
+{
+    typedef list6_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6
+    >
+struct list7_c
+    : l_item<
+          long_<7>
+        , integral_c< T,C0 >
+        , list6_c< T,C1,C2,C3,C4,C5,C6 >
+        >
+{
+    typedef list7_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7
+    >
+struct list8_c
+    : l_item<
+          long_<8>
+        , integral_c< T,C0 >
+        , list7_c< T,C1,C2,C3,C4,C5,C6,C7 >
+        >
+{
+    typedef list8_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8
+    >
+struct list9_c
+    : l_item<
+          long_<9>
+        , integral_c< T,C0 >
+        , list8_c< T,C1,C2,C3,C4,C5,C6,C7,C8 >
+        >
+{
+    typedef list9_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9
+    >
+struct list10_c
+    : l_item<
+          long_<10>
+        , integral_c< T,C0 >
+        , list9_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+        >
+{
+    typedef list10_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list20.hpp b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list20.hpp
new file mode 100644
index 0000000..a426c11
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list20.hpp
@@ -0,0 +1,169 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list20.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct list11
+    : l_item<
+          long_<11>
+        , T0
+        , list10< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+        >
+{
+    typedef list11 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct list12
+    : l_item<
+          long_<12>
+        , T0
+        , list11< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+        >
+{
+    typedef list12 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct list13
+    : l_item<
+          long_<13>
+        , T0
+        , list12< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+        >
+{
+    typedef list13 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct list14
+    : l_item<
+          long_<14>
+        , T0
+        , list13< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+        >
+{
+    typedef list14 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct list15
+    : l_item<
+          long_<15>
+        , T0
+        , list14< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >
+        >
+{
+    typedef list15 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct list16
+    : l_item<
+          long_<16>
+        , T0
+        , list15< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >
+        >
+{
+    typedef list16 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct list17
+    : l_item<
+          long_<17>
+        , T0
+        , list16< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >
+        >
+{
+    typedef list17 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct list18
+    : l_item<
+          long_<18>
+        , T0
+        , list17< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >
+        >
+{
+    typedef list18 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct list19
+    : l_item<
+          long_<19>
+        , T0
+        , list18< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >
+        >
+{
+    typedef list19 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct list20
+    : l_item<
+          long_<20>
+        , T0
+        , list19< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >
+        >
+{
+    typedef list20 type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp
new file mode 100644
index 0000000..51fd21d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp
@@ -0,0 +1,173 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list20_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    >
+struct list11_c
+    : l_item<
+          long_<11>
+        , integral_c< T,C0 >
+        , list10_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+        >
+{
+    typedef list11_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11
+    >
+struct list12_c
+    : l_item<
+          long_<12>
+        , integral_c< T,C0 >
+        , list11_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+        >
+{
+    typedef list12_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12
+    >
+struct list13_c
+    : l_item<
+          long_<13>
+        , integral_c< T,C0 >
+        , list12_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+        >
+{
+    typedef list13_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13
+    >
+struct list14_c
+    : l_item<
+          long_<14>
+        , integral_c< T,C0 >
+        , list13_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >
+        >
+{
+    typedef list14_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14
+    >
+struct list15_c
+    : l_item<
+          long_<15>
+        , integral_c< T,C0 >
+        , list14_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >
+        >
+{
+    typedef list15_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15
+    >
+struct list16_c
+    : l_item<
+          long_<16>
+        , integral_c< T,C0 >
+        , list15_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >
+        >
+{
+    typedef list16_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16
+    >
+struct list17_c
+    : l_item<
+          long_<17>
+        , integral_c< T,C0 >
+        , list16_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >
+        >
+{
+    typedef list17_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17
+    >
+struct list18_c
+    : l_item<
+          long_<18>
+        , integral_c< T,C0 >
+        , list17_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >
+        >
+{
+    typedef list18_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18
+    >
+struct list19_c
+    : l_item<
+          long_<19>
+        , integral_c< T,C0 >
+        , list18_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >
+        >
+{
+    typedef list19_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19
+    >
+struct list20_c
+    : l_item<
+          long_<20>
+        , integral_c< T,C0 >
+        , list19_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >
+        >
+{
+    typedef list20_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list30.hpp b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list30.hpp
new file mode 100644
index 0000000..abb5a29
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list30.hpp
@@ -0,0 +1,189 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list30.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20
+    >
+struct list21
+    : l_item<
+          long_<21>
+        , T0
+        , list20< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20 >
+        >
+{
+    typedef list21 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21
+    >
+struct list22
+    : l_item<
+          long_<22>
+        , T0
+        , list21< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21 >
+        >
+{
+    typedef list22 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22
+    >
+struct list23
+    : l_item<
+          long_<23>
+        , T0
+        , list22< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22 >
+        >
+{
+    typedef list23 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23
+    >
+struct list24
+    : l_item<
+          long_<24>
+        , T0
+        , list23< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23 >
+        >
+{
+    typedef list24 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    >
+struct list25
+    : l_item<
+          long_<25>
+        , T0
+        , list24< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24 >
+        >
+{
+    typedef list25 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25
+    >
+struct list26
+    : l_item<
+          long_<26>
+        , T0
+        , list25< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25 >
+        >
+{
+    typedef list26 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26
+    >
+struct list27
+    : l_item<
+          long_<27>
+        , T0
+        , list26< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26 >
+        >
+{
+    typedef list27 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27
+    >
+struct list28
+    : l_item<
+          long_<28>
+        , T0
+        , list27< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27 >
+        >
+{
+    typedef list28 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28
+    >
+struct list29
+    : l_item<
+          long_<29>
+        , T0
+        , list28< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28 >
+        >
+{
+    typedef list29 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    >
+struct list30
+    : l_item<
+          long_<30>
+        , T0
+        , list29< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29 >
+        >
+{
+    typedef list30 type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp
new file mode 100644
index 0000000..c9d15dd
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp
@@ -0,0 +1,183 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list30_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    >
+struct list21_c
+    : l_item<
+          long_<21>
+        , integral_c< T,C0 >
+        , list20_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20 >
+        >
+{
+    typedef list21_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21
+    >
+struct list22_c
+    : l_item<
+          long_<22>
+        , integral_c< T,C0 >
+        , list21_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21 >
+        >
+{
+    typedef list22_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22
+    >
+struct list23_c
+    : l_item<
+          long_<23>
+        , integral_c< T,C0 >
+        , list22_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22 >
+        >
+{
+    typedef list23_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23
+    >
+struct list24_c
+    : l_item<
+          long_<24>
+        , integral_c< T,C0 >
+        , list23_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23 >
+        >
+{
+    typedef list24_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24
+    >
+struct list25_c
+    : l_item<
+          long_<25>
+        , integral_c< T,C0 >
+        , list24_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24 >
+        >
+{
+    typedef list25_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25
+    >
+struct list26_c
+    : l_item<
+          long_<26>
+        , integral_c< T,C0 >
+        , list25_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25 >
+        >
+{
+    typedef list26_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26
+    >
+struct list27_c
+    : l_item<
+          long_<27>
+        , integral_c< T,C0 >
+        , list26_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26 >
+        >
+{
+    typedef list27_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27
+    >
+struct list28_c
+    : l_item<
+          long_<28>
+        , integral_c< T,C0 >
+        , list27_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27 >
+        >
+{
+    typedef list28_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28
+    >
+struct list29_c
+    : l_item<
+          long_<29>
+        , integral_c< T,C0 >
+        , list28_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28 >
+        >
+{
+    typedef list29_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29
+    >
+struct list30_c
+    : l_item<
+          long_<30>
+        , integral_c< T,C0 >
+        , list29_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29 >
+        >
+{
+    typedef list30_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list40.hpp b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list40.hpp
new file mode 100644
index 0000000..d43c406
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list40.hpp
@@ -0,0 +1,209 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list40.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30
+    >
+struct list31
+    : l_item<
+          long_<31>
+        , T0
+        , list30< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30 >
+        >
+{
+    typedef list31 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31
+    >
+struct list32
+    : l_item<
+          long_<32>
+        , T0
+        , list31< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31 >
+        >
+{
+    typedef list32 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32
+    >
+struct list33
+    : l_item<
+          long_<33>
+        , T0
+        , list32< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32 >
+        >
+{
+    typedef list33 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33
+    >
+struct list34
+    : l_item<
+          long_<34>
+        , T0
+        , list33< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33 >
+        >
+{
+    typedef list34 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    >
+struct list35
+    : l_item<
+          long_<35>
+        , T0
+        , list34< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34 >
+        >
+{
+    typedef list35 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35
+    >
+struct list36
+    : l_item<
+          long_<36>
+        , T0
+        , list35< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35 >
+        >
+{
+    typedef list36 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36
+    >
+struct list37
+    : l_item<
+          long_<37>
+        , T0
+        , list36< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36 >
+        >
+{
+    typedef list37 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37
+    >
+struct list38
+    : l_item<
+          long_<38>
+        , T0
+        , list37< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37 >
+        >
+{
+    typedef list38 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38
+    >
+struct list39
+    : l_item<
+          long_<39>
+        , T0
+        , list38< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38 >
+        >
+{
+    typedef list39 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    >
+struct list40
+    : l_item<
+          long_<40>
+        , T0
+        , list39< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39 >
+        >
+{
+    typedef list40 type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp
new file mode 100644
index 0000000..0d6c823
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp
@@ -0,0 +1,193 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list40_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    >
+struct list31_c
+    : l_item<
+          long_<31>
+        , integral_c< T,C0 >
+        , list30_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30 >
+        >
+{
+    typedef list31_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31
+    >
+struct list32_c
+    : l_item<
+          long_<32>
+        , integral_c< T,C0 >
+        , list31_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31 >
+        >
+{
+    typedef list32_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32
+    >
+struct list33_c
+    : l_item<
+          long_<33>
+        , integral_c< T,C0 >
+        , list32_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32 >
+        >
+{
+    typedef list33_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33
+    >
+struct list34_c
+    : l_item<
+          long_<34>
+        , integral_c< T,C0 >
+        , list33_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33 >
+        >
+{
+    typedef list34_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34
+    >
+struct list35_c
+    : l_item<
+          long_<35>
+        , integral_c< T,C0 >
+        , list34_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34 >
+        >
+{
+    typedef list35_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35
+    >
+struct list36_c
+    : l_item<
+          long_<36>
+        , integral_c< T,C0 >
+        , list35_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35 >
+        >
+{
+    typedef list36_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36
+    >
+struct list37_c
+    : l_item<
+          long_<37>
+        , integral_c< T,C0 >
+        , list36_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36 >
+        >
+{
+    typedef list37_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37
+    >
+struct list38_c
+    : l_item<
+          long_<38>
+        , integral_c< T,C0 >
+        , list37_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37 >
+        >
+{
+    typedef list38_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38
+    >
+struct list39_c
+    : l_item<
+          long_<39>
+        , integral_c< T,C0 >
+        , list38_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38 >
+        >
+{
+    typedef list39_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39
+    >
+struct list40_c
+    : l_item<
+          long_<40>
+        , integral_c< T,C0 >
+        , list39_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39 >
+        >
+{
+    typedef list40_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list50.hpp b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list50.hpp
new file mode 100644
index 0000000..f5147e6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list50.hpp
@@ -0,0 +1,229 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list50.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40
+    >
+struct list41
+    : l_item<
+          long_<41>
+        , T0
+        , list40< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40 >
+        >
+{
+    typedef list41 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41
+    >
+struct list42
+    : l_item<
+          long_<42>
+        , T0
+        , list41< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41 >
+        >
+{
+    typedef list42 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42
+    >
+struct list43
+    : l_item<
+          long_<43>
+        , T0
+        , list42< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42 >
+        >
+{
+    typedef list43 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43
+    >
+struct list44
+    : l_item<
+          long_<44>
+        , T0
+        , list43< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43 >
+        >
+{
+    typedef list44 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    >
+struct list45
+    : l_item<
+          long_<45>
+        , T0
+        , list44< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44 >
+        >
+{
+    typedef list45 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45
+    >
+struct list46
+    : l_item<
+          long_<46>
+        , T0
+        , list45< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45 >
+        >
+{
+    typedef list46 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46
+    >
+struct list47
+    : l_item<
+          long_<47>
+        , T0
+        , list46< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46 >
+        >
+{
+    typedef list47 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46, typename T47
+    >
+struct list48
+    : l_item<
+          long_<48>
+        , T0
+        , list47< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47 >
+        >
+{
+    typedef list48 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46, typename T47, typename T48
+    >
+struct list49
+    : l_item<
+          long_<49>
+        , T0
+        , list48< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47,T48 >
+        >
+{
+    typedef list49 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46, typename T47, typename T48, typename T49
+    >
+struct list50
+    : l_item<
+          long_<50>
+        , T0
+        , list49< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47,T48,T49 >
+        >
+{
+    typedef list50 type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp
new file mode 100644
index 0000000..6922489
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp
@@ -0,0 +1,203 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list50_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    >
+struct list41_c
+    : l_item<
+          long_<41>
+        , integral_c< T,C0 >
+        , list40_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40 >
+        >
+{
+    typedef list41_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41
+    >
+struct list42_c
+    : l_item<
+          long_<42>
+        , integral_c< T,C0 >
+        , list41_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41 >
+        >
+{
+    typedef list42_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42
+    >
+struct list43_c
+    : l_item<
+          long_<43>
+        , integral_c< T,C0 >
+        , list42_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42 >
+        >
+{
+    typedef list43_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43
+    >
+struct list44_c
+    : l_item<
+          long_<44>
+        , integral_c< T,C0 >
+        , list43_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43 >
+        >
+{
+    typedef list44_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44
+    >
+struct list45_c
+    : l_item<
+          long_<45>
+        , integral_c< T,C0 >
+        , list44_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44 >
+        >
+{
+    typedef list45_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45
+    >
+struct list46_c
+    : l_item<
+          long_<46>
+        , integral_c< T,C0 >
+        , list45_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45 >
+        >
+{
+    typedef list46_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46
+    >
+struct list47_c
+    : l_item<
+          long_<47>
+        , integral_c< T,C0 >
+        , list46_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46 >
+        >
+{
+    typedef list47_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46, T C47
+    >
+struct list48_c
+    : l_item<
+          long_<48>
+        , integral_c< T,C0 >
+        , list47_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47 >
+        >
+{
+    typedef list48_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48
+    >
+struct list49_c
+    : l_item<
+          long_<49>
+        , integral_c< T,C0 >
+        , list48_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47,C48 >
+        >
+{
+    typedef list49_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48, T C49
+    >
+struct list50_c
+    : l_item<
+          long_<50>
+        , integral_c< T,C0 >
+        , list49_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47,C48,C49 >
+        >
+{
+    typedef list50_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/push_back.hpp b/vendor/pdalboost/boost/mpl/list/aux_/push_back.hpp
new file mode 100644
index 0000000..e64dda0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/push_back.hpp
@@ -0,0 +1,36 @@
+
+#ifndef BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/push_back_fwd.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct has_push_back_impl;
+
+template<>
+struct has_push_back_impl< aux::list_tag >
+{
+    template< typename Seq > struct apply
+        : false_
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/push_front.hpp b/vendor/pdalboost/boost/mpl/list/aux_/push_front.hpp
new file mode 100644
index 0000000..b03c194
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/push_front.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/push_front_fwd.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/list/aux_/item.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct push_front_impl< aux::list_tag >
+{
+    template< typename List, typename T > struct apply
+    {
+        typedef l_item<
+              typename next<typename List::size>::type
+            , T
+            , typename List::type
+            > type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/size.hpp b/vendor/pdalboost/boost/mpl/list/aux_/size.hpp
new file mode 100644
index 0000000..0ea3fdc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/size.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct size_impl< aux::list_tag >
+{
+    template< typename List > struct apply
+        : List::size
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/aux_/tag.hpp b/vendor/pdalboost/boost/mpl/list/aux_/tag.hpp
new file mode 100644
index 0000000..2c6e5e2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/aux_/tag.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+struct list_tag;
+struct l_iter_tag;
+
+}}}
+
+#endif // BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/list0.hpp b/vendor/pdalboost/boost/mpl/list/list0.hpp
new file mode 100644
index 0000000..025ab07
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/list0.hpp
@@ -0,0 +1,42 @@
+
+#ifndef BOOST_MPL_LIST_LIST0_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST0_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/list/aux_/push_front.hpp>
+#include <boost/mpl/list/aux_/pop_front.hpp>
+#include <boost/mpl/list/aux_/push_back.hpp>
+#include <boost/mpl/list/aux_/front.hpp>
+#include <boost/mpl/list/aux_/clear.hpp>
+#include <boost/mpl/list/aux_/O1_size.hpp>
+#include <boost/mpl/list/aux_/size.hpp>
+#include <boost/mpl/list/aux_/empty.hpp>
+#include <boost/mpl/list/aux_/begin_end.hpp>
+#include <boost/mpl/list/aux_/item.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template< typename Dummy = na > struct list0;
+
+template<> struct list0<na>
+    : l_end
+{
+    typedef l_end type;
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_LIST0_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/list0_c.hpp b/vendor/pdalboost/boost/mpl/list/list0_c.hpp
new file mode 100644
index 0000000..d3f7604
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/list0_c.hpp
@@ -0,0 +1,31 @@
+
+#ifndef BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/list/list0.hpp>
+#include <boost/mpl/integral_c.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template< typename T > struct list0_c
+    : l_end
+{
+    typedef l_end type;
+    typedef T value_type;
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/list10.hpp b/vendor/pdalboost/boost/mpl/list/list10.hpp
new file mode 100644
index 0000000..e7a7e37
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/list10.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST10_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST10_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/list/list0.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER list10.hpp
+#   include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(1, 10, <boost/mpl/list/aux_/numbered.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST10_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/list10_c.hpp b/vendor/pdalboost/boost/mpl/list/list10_c.hpp
new file mode 100644
index 0000000..45e2c34
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/list10_c.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/list/list0_c.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER list10_c.hpp
+#   include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(1, 10, <boost/mpl/list/aux_/numbered_c.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/list20.hpp b/vendor/pdalboost/boost/mpl/list/list20.hpp
new file mode 100644
index 0000000..00a36d4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/list20.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST20_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST20_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/list/list10.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER list20.hpp
+#   include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(11, 20, <boost/mpl/list/aux_/numbered.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST20_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/list20_c.hpp b/vendor/pdalboost/boost/mpl/list/list20_c.hpp
new file mode 100644
index 0000000..a22bce1
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/list20_c.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/list/list10_c.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER list20_c.hpp
+#   include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(11, 20, <boost/mpl/list/aux_/numbered_c.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/list30.hpp b/vendor/pdalboost/boost/mpl/list/list30.hpp
new file mode 100644
index 0000000..242c019
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/list30.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST30_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST30_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/list/list20.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER list30.hpp
+#   include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(21, 30, <boost/mpl/list/aux_/numbered.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST30_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/list30_c.hpp b/vendor/pdalboost/boost/mpl/list/list30_c.hpp
new file mode 100644
index 0000000..2766ef5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/list30_c.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/list/list20_c.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER list30_c.hpp
+#   include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(21, 30, <boost/mpl/list/aux_/numbered_c.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/list40.hpp b/vendor/pdalboost/boost/mpl/list/list40.hpp
new file mode 100644
index 0000000..c7a28d6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/list40.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST40_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST40_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/list/list30.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER list40.hpp
+#   include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(31, 40, <boost/mpl/list/aux_/numbered.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST40_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/list40_c.hpp b/vendor/pdalboost/boost/mpl/list/list40_c.hpp
new file mode 100644
index 0000000..5d862bd
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/list40_c.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/list/list30_c.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER list40_c.hpp
+#   include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(31, 40, <boost/mpl/list/aux_/numbered_c.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/list50.hpp b/vendor/pdalboost/boost/mpl/list/list50.hpp
new file mode 100644
index 0000000..0c41f63
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/list50.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST50_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST50_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/list/list40.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER list50.hpp
+#   include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(41, 50, <boost/mpl/list/aux_/numbered.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST50_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/list/list50_c.hpp b/vendor/pdalboost/boost/mpl/list/list50_c.hpp
new file mode 100644
index 0000000..7d8c3ce
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/list/list50_c.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/list/list40_c.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER list50_c.hpp
+#   include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(41, 50, <boost/mpl/list/aux_/numbered_c.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/logical.hpp b/vendor/pdalboost/boost/mpl/logical.hpp
new file mode 100644
index 0000000..c8236b5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/logical.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LOGICAL_HPP_INCLUDED
+#define BOOST_MPL_LOGICAL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+
+#endif // BOOST_MPL_LOGICAL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/long.hpp b/vendor/pdalboost/boost/mpl/long.hpp
new file mode 100644
index 0000000..c455267
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/long.hpp
@@ -0,0 +1,22 @@
+
+#ifndef BOOST_MPL_LONG_HPP_INCLUDED
+#define BOOST_MPL_LONG_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/long_fwd.hpp>
+
+#define AUX_WRAPPER_VALUE_TYPE long
+#include <boost/mpl/aux_/integral_wrapper.hpp>
+
+#endif // BOOST_MPL_LONG_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/long_fwd.hpp b/vendor/pdalboost/boost/mpl/long_fwd.hpp
new file mode 100644
index 0000000..5f62f2b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/long_fwd.hpp
@@ -0,0 +1,27 @@
+
+#ifndef BOOST_MPL_LONG_FWD_HPP_INCLUDED
+#define BOOST_MPL_LONG_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/adl_barrier.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct long_;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+BOOST_MPL_AUX_ADL_BARRIER_DECL(long_)
+
+#endif // BOOST_MPL_LONG_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/min_max.hpp b/vendor/pdalboost/boost/mpl/min_max.hpp
new file mode 100644
index 0000000..16ed696
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/min_max.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_MIN_MAX_HPP_INCLUDED
+#define BOOST_MPL_MIN_MAX_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct min
+    : if_< less<N1,N2>,N1,N2 >
+{
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct max
+    : if_< less<N1,N2>,N2,N1 >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, min)
+BOOST_MPL_AUX_NA_SPEC(2, max)
+
+}}
+
+#endif // BOOST_MPL_MIN_MAX_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/minus.hpp b/vendor/pdalboost/boost/mpl/minus.hpp
new file mode 100644
index 0000000..9f29f74
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/minus.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_MINUS_HPP_INCLUDED
+#define BOOST_MPL_MINUS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#define AUX778076_OP_NAME minus
+#define AUX778076_OP_TOKEN -
+#include <boost/mpl/aux_/arithmetic_op.hpp>
+
+#endif // BOOST_MPL_MINUS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/multiplies.hpp b/vendor/pdalboost/boost/mpl/multiplies.hpp
new file mode 100644
index 0000000..09cd847
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/multiplies.hpp
@@ -0,0 +1,53 @@
+
+#ifndef BOOST_MPL_MULTIPLIES_HPP_INCLUDED
+#define BOOST_MPL_MULTIPLIES_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/times.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/preprocessor/default_params.hpp>
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+// backward compatibility header, deprecated
+
+namespace pdalboost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+#   define AUX778076_OP_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+#else
+#   define AUX778076_OP_ARITY 2
+#endif
+
+template<
+      BOOST_MPL_PP_DEFAULT_PARAMS(AUX778076_OP_ARITY, typename N, na)
+    >
+struct multiplies
+    : times< BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          AUX778076_OP_ARITY
+        , multiplies
+        , ( BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) )
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(AUX778076_OP_ARITY, multiplies)
+
+#undef AUX778076_OP_ARITY
+
+}}
+
+#endif // BOOST_MPL_MULTIPLIES_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/negate.hpp b/vendor/pdalboost/boost/mpl/negate.hpp
new file mode 100644
index 0000000..9e89b20
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/negate.hpp
@@ -0,0 +1,81 @@
+
+#ifndef BOOST_MPL_NEGATE_HPP_INCLUDED
+#define BOOST_MPL_NEGATE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/aux_/msvc_eti_base.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+#include <boost/mpl/aux_/config/integral.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct negate_impl;
+
+template< typename T > struct negate_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N)
+    >
+struct negate
+#if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+    : negate_impl<
+          typename negate_tag<N>::type
+        >::template apply<N>::type
+#else
+    : aux::msvc_eti_base< typename apply_wrap1<
+          negate_impl< typename negate_tag<N>::type >
+        , N
+        >::type >::type
+#endif
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, negate, (N))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, negate)
+
+
+#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
+namespace aux {
+template< typename T, T n > struct negate_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value = -n);
+    typedef integral_c<T,value> type;
+};
+}
+#endif
+
+template<>
+struct negate_impl<integral_c_tag>
+{
+#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
+    template< typename N > struct apply
+        : aux::negate_wknd< typename N::value_type, N::value >
+#else
+    template< typename N > struct apply
+        : integral_c< typename N::value_type, (-N::value) >
+#endif    
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_NEGATE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/next.hpp b/vendor/pdalboost/boost/mpl/next.hpp
new file mode 100644
index 0000000..954b222
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/next.hpp
@@ -0,0 +1,19 @@
+
+#ifndef BOOST_MPL_NEXT_HPP_INCLUDED
+#define BOOST_MPL_NEXT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/next_prior.hpp>
+
+#endif // BOOST_MPL_NEXT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/next_prior.hpp b/vendor/pdalboost/boost/mpl/next_prior.hpp
new file mode 100644
index 0000000..2ac100a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/next_prior.hpp
@@ -0,0 +1,49 @@
+
+#ifndef BOOST_MPL_NEXT_PRIOR_HPP_INCLUDED
+#define BOOST_MPL_NEXT_PRIOR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/common_name_wknd.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+BOOST_MPL_AUX_COMMON_NAME_WKND(next)
+BOOST_MPL_AUX_COMMON_NAME_WKND(prior)
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct next
+{
+    typedef typename T::next type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,next,(T))
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct prior
+{
+    typedef typename T::prior type;
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,prior,(T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, next)
+BOOST_MPL_AUX_NA_SPEC(1, prior)
+
+}}
+
+#endif // BOOST_MPL_NEXT_PRIOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/not.hpp b/vendor/pdalboost/boost/mpl/not.hpp
new file mode 100644
index 0000000..68b5459
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/not.hpp
@@ -0,0 +1,51 @@
+
+#ifndef BOOST_MPL_NOT_HPP_INCLUDED
+#define BOOST_MPL_NOT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/nested_type_wknd.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< BOOST_MPL_AUX_NTTP_DECL(long, C_) > // 'long' is intentional here
+struct not_impl
+    : bool_<!C_>
+{
+};
+
+} // namespace aux
+
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct not_
+    : aux::not_impl<
+          BOOST_MPL_AUX_NESTED_TYPE_WKND(T)::value
+        >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,not_,(T))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1,not_)
+
+}}
+
+#endif // BOOST_MPL_NOT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/not_equal_to.hpp b/vendor/pdalboost/boost/mpl/not_equal_to.hpp
new file mode 100644
index 0000000..11ef342
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/not_equal_to.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_NOT_EQUAL_TO_HPP_INCLUDED
+#define BOOST_MPL_NOT_EQUAL_TO_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#define AUX778076_OP_NAME not_equal_to
+#define AUX778076_OP_TOKEN !=
+#include <boost/mpl/aux_/comparison_op.hpp>
+
+#endif // BOOST_MPL_NOT_EQUAL_TO_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/numeric_cast.hpp b/vendor/pdalboost/boost/mpl/numeric_cast.hpp
new file mode 100644
index 0000000..02bd4ff
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/numeric_cast.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_NUMERIC_CAST_HPP_INCLUDED
+#define BOOST_MPL_NUMERIC_CAST_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+// agurt 21/sep/04: portability macro for the sake of MSVC 6.x-7.0;
+// resolves conflicts with 'pdalboost::numeric_cast' function template.
+// use it in your own code _only_ if you care about compatibility with
+// these outdated compilers!
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570) )
+#   define BOOST_MPL_AUX_NUMERIC_CAST numeric_cast_
+#else
+#   define BOOST_MPL_AUX_NUMERIC_CAST numeric_cast
+#endif
+
+namespace pdalboost { namespace mpl {
+
+// no default implementation; the definition is needed to make MSVC happy
+
+template< typename SourceTag, typename TargetTag > struct BOOST_MPL_AUX_NUMERIC_CAST
+{
+    template< typename N > struct apply;
+};
+
+}}
+
+#endif // BOOST_MPL_NUMERIC_CAST_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/or.hpp b/vendor/pdalboost/boost/mpl/or.hpp
new file mode 100644
index 0000000..f9704d5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/or.hpp
@@ -0,0 +1,61 @@
+
+#ifndef BOOST_MPL_OR_HPP_INCLUDED
+#define BOOST_MPL_OR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   include <boost/mpl/bool.hpp>
+#   include <boost/mpl/aux_/nested_type_wknd.hpp>
+#   include <boost/mpl/aux_/na_spec.hpp>
+#   include <boost/mpl/aux_/lambda_support.hpp>
+#   include <boost/mpl/aux_/config/msvc.hpp>
+
+// agurt, 19/may/04: workaround a conflict with <iso646.h> header's 
+// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(or)'
+// has to be checked in a separate condition, otherwise GCC complains 
+// about 'or' being an alternative token
+#if defined(_MSC_VER) && !defined(__clang__)
+#ifndef __GCCXML__
+#if defined(or)
+#   pragma push_macro("or")
+#   undef or
+#   define or(x)
+#endif
+#endif
+#endif
+
+#   define BOOST_MPL_PREPROCESSED_HEADER or.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#if defined(_MSC_VER) && !defined(__clang__)
+#ifndef __GCCXML__
+#if defined(or)
+#   pragma pop_macro("or")
+#endif
+#endif
+#endif
+
+#else
+
+#   define AUX778076_OP_NAME or_
+#   define AUX778076_OP_VALUE1 true
+#   define AUX778076_OP_VALUE2 false
+#   include <boost/mpl/aux_/logical_op.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_OR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/pair.hpp b/vendor/pdalboost/boost/mpl/pair.hpp
new file mode 100644
index 0000000..f424ab6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/pair.hpp
@@ -0,0 +1,70 @@
+
+#ifndef BOOST_MPL_PAIR_HPP_INCLUDED
+#define BOOST_MPL_PAIR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/msvc_eti_base.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T1)
+    , typename BOOST_MPL_AUX_NA_PARAM(T2)
+    >
+struct pair
+{
+    typedef pair type;
+    typedef T1 first;
+    typedef T2 second;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,pair,(T1,T2))
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(P)
+    >
+struct first
+{
+#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)
+    typedef typename P::first type;
+#else
+    typedef typename aux::msvc_eti_base<P>::first type;
+#endif
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,first,(P))
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(P)
+    >
+struct second
+{
+#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)
+    typedef typename P::second type;
+#else
+    typedef typename aux::msvc_eti_base<P>::second type;
+#endif
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,second,(P))
+};
+
+
+BOOST_MPL_AUX_NA_SPEC_NO_ETI(2, pair)
+BOOST_MPL_AUX_NA_SPEC(1, first)
+BOOST_MPL_AUX_NA_SPEC(1, second)
+
+}}
+
+#endif // BOOST_MPL_PAIR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/pair_view.hpp b/vendor/pdalboost/boost/mpl/pair_view.hpp
new file mode 100644
index 0000000..443b8cc
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/pair_view.hpp
@@ -0,0 +1,169 @@
+
+#ifndef BOOST_MPL_PAIR_VIEW_HPP_INCLUDED
+#define BOOST_MPL_PAIR_VIEW_HPP_INCLUDED
+
+// Copyright David Abrahams 2003-2004
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/iterator_category.hpp>
+#include <boost/mpl/advance.hpp>
+#include <boost/mpl/distance.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/min_max.hpp>
+#include <boost/mpl/pair.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+struct pair_iter_tag;
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename Iter1, typename Iter2, typename Category >
+struct pair_iter;
+
+template< typename Category > struct prior_pair_iter
+{
+    template< typename Iter1, typename Iter2 > struct apply
+    {
+        typedef typename mpl::prior<Iter1>::type i1_;
+        typedef typename mpl::prior<Iter2>::type i2_;
+        typedef pair_iter<i1_,i2_,Category> type;
+    };
+};
+
+template<> struct prior_pair_iter<forward_iterator_tag>
+{
+    template< typename Iter1, typename Iter2 > struct apply
+    {
+        typedef pair_iter<Iter1,Iter2,forward_iterator_tag> type;
+    };
+};
+
+#endif
+}
+
+template< 
+      typename Iter1
+    , typename Iter2
+    , typename Category
+    >
+struct pair_iter
+{
+    typedef aux::pair_iter_tag tag;
+    typedef Category category;
+    typedef Iter1 first;
+    typedef Iter2 second;
+    
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+    typedef pair< 
+          typename deref<Iter1>::type
+        , typename deref<Iter2>::type
+        > type;
+
+    typedef typename mpl::next<Iter1>::type i1_;
+    typedef typename mpl::next<Iter2>::type i2_;
+    typedef pair_iter<i1_,i2_,Category> next;
+    
+    typedef apply_wrap2< aux::prior_pair_iter<Category>,Iter1,Iter2 >::type prior;
+#endif
+};
+
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename Iter1, typename Iter2, typename C >
+struct deref< pair_iter<Iter1,Iter2,C> >
+{
+    typedef pair< 
+          typename deref<Iter1>::type
+        , typename deref<Iter2>::type
+        > type;
+};
+
+template< typename Iter1, typename Iter2, typename C >
+struct next< pair_iter<Iter1,Iter2,C> >
+{
+    typedef typename mpl::next<Iter1>::type i1_;
+    typedef typename mpl::next<Iter2>::type i2_;
+    typedef pair_iter<i1_,i2_,C> type;
+};
+
+template< typename Iter1, typename Iter2, typename C >
+struct prior< pair_iter<Iter1,Iter2,C> >
+{
+    typedef typename mpl::prior<Iter1>::type i1_;
+    typedef typename mpl::prior<Iter2>::type i2_;
+    typedef pair_iter<i1_,i2_,C> type;
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+
+template<> struct advance_impl<aux::pair_iter_tag>
+{
+    template< typename Iter, typename D > struct apply
+    {
+        typedef typename mpl::advance< typename Iter::first,D >::type i1_;
+        typedef typename mpl::advance< typename Iter::second,D >::type i2_;
+        typedef pair_iter<i1_,i2_,typename Iter::category> type;
+    };
+};
+
+template<> struct distance_impl<aux::pair_iter_tag>
+{
+    template< typename Iter1, typename Iter2 > struct apply
+    {
+        // agurt, 10/nov/04: MSVC 6.5 ICE-s on forwarding
+        typedef typename mpl::distance<
+              typename first<Iter1>::type
+            , typename first<Iter2>::type
+            >::type type;
+    };
+};
+
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence1)
+    , typename BOOST_MPL_AUX_NA_PARAM(Sequence2)
+    >
+struct pair_view
+{
+    typedef nested_begin_end_tag tag;
+
+    typedef typename begin<Sequence1>::type iter1_;
+    typedef typename begin<Sequence2>::type iter2_;
+    typedef typename min<
+          typename iterator_category<iter1_>::type
+        , typename iterator_category<iter2_>::type
+        >::type category_;
+    
+    typedef pair_iter<iter1_,iter2_,category_> begin;
+    
+    typedef pair_iter<
+          typename end<Sequence1>::type
+        , typename end<Sequence2>::type
+        , category_
+        > end;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, pair_view)
+
+}}
+
+#endif // BOOST_MPL_PAIR_VIEW_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/placeholders.hpp b/vendor/pdalboost/boost/mpl/placeholders.hpp
new file mode 100644
index 0000000..ebf365f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/placeholders.hpp
@@ -0,0 +1,100 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_PLACEHOLDERS_HPP_INCLUDED
+#define BOOST_MPL_PLACEHOLDERS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-2003
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/arg.hpp>
+#   include <boost/mpl/aux_/adl_barrier.hpp>
+
+#   if !defined(BOOST_MPL_CFG_NO_ADL_BARRIER_NAMESPACE)
+#       define BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(type) \
+        using ::BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::type; \
+        /**/
+#   else
+#       define BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(type) /**/
+#   endif
+
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER placeholders.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/aux_/nttp_decl.hpp>
+#   include <boost/mpl/limits/arity.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+// watch out for GNU gettext users, who #define _(x)
+#if !defined(_) || defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT)
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+typedef arg<-1> _;
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+namespace pdalboost { namespace mpl { 
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(_)
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::_;
+}
+
+}}
+#endif
+
+/// agurt, 17/mar/02: one more placeholder for the last 'apply#' 
+/// specialization
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY + 1, <boost/mpl/placeholders.hpp>))
+#include BOOST_PP_ITERATE()
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_PLACEHOLDERS_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+typedef arg<i_> BOOST_PP_CAT(_,i_);
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+namespace pdalboost { namespace mpl { 
+
+BOOST_MPL_AUX_ARG_ADL_BARRIER_DECL(BOOST_PP_CAT(_,i_))
+
+namespace placeholders {
+using BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE::BOOST_PP_CAT(_,i_);
+}
+
+}}
+
+#undef i_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/plus.hpp b/vendor/pdalboost/boost/mpl/plus.hpp
new file mode 100644
index 0000000..455920b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/plus.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_PLUS_HPP_INCLUDED
+#define BOOST_MPL_PLUS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#define AUX778076_OP_NAME plus
+#define AUX778076_OP_TOKEN +
+#include <boost/mpl/aux_/arithmetic_op.hpp>
+
+#endif // BOOST_MPL_PLUS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/pop_back_fwd.hpp b/vendor/pdalboost/boost/mpl/pop_back_fwd.hpp
new file mode 100644
index 0000000..8f5cacb
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/pop_back_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_POP_BACK_FWD_HPP_INCLUDED
+#define BOOST_MPL_POP_BACK_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct pop_back_impl;
+template< typename Sequence > struct pop_back;
+
+}}
+
+#endif // BOOST_MPL_POP_BACK_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/pop_front_fwd.hpp b/vendor/pdalboost/boost/mpl/pop_front_fwd.hpp
new file mode 100644
index 0000000..9518bb8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/pop_front_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_POP_FRONT_FWD_HPP_INCLUDED
+#define BOOST_MPL_POP_FRONT_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct pop_front_impl;
+template< typename Sequence > struct pop_front;
+
+}}
+
+#endif // BOOST_MPL_POP_FRONT_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/print.hpp b/vendor/pdalboost/boost/mpl/print.hpp
new file mode 100644
index 0000000..9933616
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/print.hpp
@@ -0,0 +1,75 @@
+
+#ifndef BOOST_MPL_PRINT_HPP_INCLUDED
+#define BOOST_MPL_PRINT_HPP_INCLUDED
+
+// Copyright David Abrahams 2003
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace pdalboost { namespace mpl {
+  
+namespace aux {
+#if defined(BOOST_MSVC)
+# pragma warning(push, 3)
+// we only want one warning from MSVC, so turn off the other one
+# pragma warning(disable: 4307)
+#elif defined(__MWERKS__)
+# pragma warn_hidevirtual on
+   struct print_base { virtual void f() {} };
+#endif
+
+#if defined(__EDG_VERSION__)
+  template <class T>
+  struct dependent_unsigned
+  {
+      static const unsigned value = 1;
+  };
+#endif
+} // namespace aux
+
+template <class T>
+struct print
+    : mpl::identity<T>
+#if defined(__MWERKS__)
+    , aux::print_base
+#endif 
+{
+#if defined(__clang__)
+    const int m_x = 1 / (sizeof(T) - sizeof(T));
+#elif defined(BOOST_MSVC)
+    enum { n = sizeof(T) + -1 };
+#elif defined(__MWERKS__)
+    void f(int);
+#else 
+    enum {
+        n =
+# if defined(__EDG_VERSION__)
+           aux::dependent_unsigned<T>::value > -1
+# else 
+           sizeof(T) > -1
+# endif 
+        };
+#endif 
+};
+
+#if defined(BOOST_MSVC)
+# pragma warning(pop)
+#elif defined(__MWERKS__)
+# pragma warn_hidevirtual reset
+#endif
+
+}}
+
+#endif // BOOST_MPL_PRINT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/prior.hpp b/vendor/pdalboost/boost/mpl/prior.hpp
new file mode 100644
index 0000000..849802c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/prior.hpp
@@ -0,0 +1,19 @@
+
+#ifndef BOOST_MPL_PRIOR_HPP_INCLUDED
+#define BOOST_MPL_PRIOR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/next_prior.hpp>
+
+#endif // BOOST_MPL_PRIOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/protect.hpp b/vendor/pdalboost/boost/mpl/protect.hpp
new file mode 100644
index 0000000..ecda3d6
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/protect.hpp
@@ -0,0 +1,55 @@
+
+#ifndef BOOST_MPL_PROTECT_HPP_INCLUDED
+#define BOOST_MPL_PROTECT_HPP_INCLUDED
+
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/arity.hpp>
+#include <boost/mpl/aux_/config/dtp.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(T)
+    , int not_le_ = 0
+    >
+struct protect : T
+{
+#if BOOST_WORKAROUND(__EDG_VERSION__, == 238)
+    typedef mpl::protect type;
+#else
+    typedef protect type;
+#endif
+};
+
+#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
+namespace aux { 
+template< BOOST_MPL_AUX_NTTP_DECL(int, N), typename T >
+struct arity< protect<T>, N > 
+    : arity<T,N>
+{ 
+};
+} // namespace aux
+#endif
+
+BOOST_MPL_AUX_NA_SPEC_MAIN(1, protect)
+#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(1, 1, protect)
+#endif
+
+}}
+
+#endif // BOOST_MPL_PROTECT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/push_back.hpp b/vendor/pdalboost/boost/mpl/push_back.hpp
new file mode 100644
index 0000000..89644fa
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/push_back.hpp
@@ -0,0 +1,53 @@
+
+#ifndef BOOST_MPL_PUSH_BACK_HPP_INCLUDED
+#define BOOST_MPL_PUSH_BACK_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/push_back_fwd.hpp>
+#include <boost/mpl/aux_/push_back_impl.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct push_back
+    : push_back_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence,T >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,push_back,(Sequence,T))
+};
+
+
+template< 
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    >
+struct has_push_back
+    : has_push_back_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,has_push_back,(Sequence))
+};
+
+
+BOOST_MPL_AUX_NA_SPEC(2, push_back)
+BOOST_MPL_AUX_NA_SPEC(1, has_push_back)
+
+}}
+
+#endif // BOOST_MPL_PUSH_BACK_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/push_back_fwd.hpp b/vendor/pdalboost/boost/mpl/push_back_fwd.hpp
new file mode 100644
index 0000000..6300b59
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/push_back_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_PUSH_BACK_FWD_HPP_INCLUDED
+#define BOOST_MPL_PUSH_BACK_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct push_back_impl;
+template< typename Sequence, typename T > struct push_back;
+
+}}
+
+#endif // BOOST_MPL_PUSH_BACK_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/push_front.hpp b/vendor/pdalboost/boost/mpl/push_front.hpp
new file mode 100644
index 0000000..a883c34
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/push_front.hpp
@@ -0,0 +1,52 @@
+
+#ifndef BOOST_MPL_PUSH_FRONT_HPP_INCLUDED
+#define BOOST_MPL_PUSH_FRONT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/push_front_fwd.hpp>
+#include <boost/mpl/aux_/push_front_impl.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(T)
+    >
+struct push_front
+    : push_front_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence,T >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,push_front,(Sequence,T))
+};
+
+
+template< 
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    >
+struct has_push_front
+    : has_push_front_impl< typename sequence_tag<Sequence>::type >
+        ::template apply< Sequence >
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,has_push_front,(Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, push_front)
+BOOST_MPL_AUX_NA_SPEC(1, has_push_front)
+
+}}
+
+#endif // BOOST_MPL_PUSH_FRONT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/push_front_fwd.hpp b/vendor/pdalboost/boost/mpl/push_front_fwd.hpp
new file mode 100644
index 0000000..54e120b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/push_front_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_PUSH_FRONT_FWD_HPP_INCLUDED
+#define BOOST_MPL_PUSH_FRONT_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct push_front_impl;
+template< typename Sequence, typename T > struct push_front;
+
+}}
+
+#endif // BOOST_MPL_PUSH_FRONT_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/quote.hpp b/vendor/pdalboost/boost/mpl/quote.hpp
new file mode 100644
index 0000000..465bf1b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/quote.hpp
@@ -0,0 +1,151 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_MPL_QUOTE_HPP_INCLUDED
+#define BOOST_MPL_QUOTE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/void.hpp>
+#   include <boost/mpl/aux_/has_type.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/bcc.hpp>
+#include <boost/mpl/aux_/config/ttp.hpp>
+
+#if defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \
+    && !defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS)
+#   define BOOST_MPL_CFG_NO_QUOTE_TEMPLATE
+#endif
+
+#if !defined(BOOST_MPL_CFG_NO_IMPLICIT_METAFUNCTIONS) \
+    && defined(BOOST_MPL_CFG_NO_HAS_XXX)
+#   define BOOST_MPL_CFG_NO_IMPLICIT_METAFUNCTIONS
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER quote.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/limits/arity.hpp>
+#   include <boost/mpl/aux_/preprocessor/params.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/mpl/aux_/config/workaround.hpp>
+
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/preprocessor/cat.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_QUOTE_TEMPLATE)
+
+namespace pdalboost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename T, bool has_type_ >
+struct quote_impl
+// GCC has a problem with metafunction forwarding when T is a
+// specialization of a template called 'type'.
+# if BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4)) \
+    && BOOST_WORKAROUND(__GNUC_MINOR__, BOOST_TESTED_AT(0)) \
+    && BOOST_WORKAROUND(__GNUC_PATCHLEVEL__, BOOST_TESTED_AT(2))
+{
+    typedef typename T::type type;
+};
+# else 
+    : T
+{
+};
+# endif 
+
+template< typename T >
+struct quote_impl<T,false>
+{
+    typedef T type;
+};
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template< bool > struct quote_impl
+{
+    template< typename T > struct result_
+        : T
+    {
+    };
+};
+
+template<> struct quote_impl<false>
+{
+    template< typename T > struct result_
+    {
+        typedef T type;
+    };
+};
+
+#endif 
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/quote.hpp>))
+#include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_QUOTE_TEMPLATE
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_QUOTE_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+template<
+      template< BOOST_MPL_PP_PARAMS(i_, typename P) > class F
+    , typename Tag = void_
+    >
+struct BOOST_PP_CAT(quote,i_)
+{
+    template< BOOST_MPL_PP_PARAMS(i_, typename U) > struct apply
+#if defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS)
+    {
+        typedef typename quote_impl<
+              F< BOOST_MPL_PP_PARAMS(i_, U) >
+            , aux::has_type< F< BOOST_MPL_PP_PARAMS(i_, U) > >::value
+            >::type type;
+    };
+#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+        : quote_impl<
+              F< BOOST_MPL_PP_PARAMS(i_, U) >
+            , aux::has_type< F< BOOST_MPL_PP_PARAMS(i_, U) > >::value
+            >
+    {
+    };
+#else
+        : quote_impl< aux::has_type< F< BOOST_MPL_PP_PARAMS(i_, U) > >::value >
+            ::template result_< F< BOOST_MPL_PP_PARAMS(i_, U) > >
+    {
+    };
+#endif
+};
+
+#undef i_
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/remove_if.hpp b/vendor/pdalboost/boost/mpl/remove_if.hpp
new file mode 100644
index 0000000..906d991
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/remove_if.hpp
@@ -0,0 +1,83 @@
+
+#ifndef BOOST_MPL_REMOVE_IF_HPP_INCLUDED
+#define BOOST_MPL_REMOVE_IF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/reverse_fold.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/protect.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/aux_/inserter_algorithm.hpp>
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+
+template< typename Pred, typename InsertOp > struct remove_if_helper
+{
+    template< typename Sequence, typename U > struct apply
+    {
+        typedef typename eval_if<
+              typename apply1<Pred,U>::type
+            , identity<Sequence>
+            , apply2<InsertOp,Sequence,U>
+            >::type type;
+    };
+};
+
+template<
+      typename Sequence
+    , typename Predicate
+    , typename Inserter
+    >
+struct remove_if_impl
+    : fold<
+          Sequence
+        , typename Inserter::state
+        , protect< aux::remove_if_helper<
+              typename lambda<Predicate>::type
+            , typename Inserter::operation
+            > >
+        >
+{
+};
+
+template<
+      typename Sequence
+    , typename Predicate
+    , typename Inserter
+    >
+struct reverse_remove_if_impl
+    : reverse_fold<
+          Sequence
+        , typename Inserter::state
+        , protect< aux::remove_if_helper<
+              typename lambda<Predicate>::type
+            , typename Inserter::operation
+            > >
+        >
+{
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, remove_if)
+
+}}
+
+#endif // BOOST_MPL_REMOVE_IF_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/reverse_fold.hpp b/vendor/pdalboost/boost/mpl/reverse_fold.hpp
new file mode 100644
index 0000000..b134e1f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/reverse_fold.hpp
@@ -0,0 +1,50 @@
+
+#ifndef BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED
+#define BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/O1_size.hpp>
+#include <boost/mpl/arg.hpp>
+#include <boost/mpl/aux_/reverse_fold_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(State)
+    , typename BOOST_MPL_AUX_NA_PARAM(BackwardOp)
+    , typename ForwardOp = arg<1>
+    >
+struct reverse_fold
+{
+    typedef typename aux::reverse_fold_impl<
+          ::pdalboost::mpl::O1_size<Sequence>::value
+        , typename begin<Sequence>::type
+        , typename end<Sequence>::type
+        , State
+        , BackwardOp
+        , ForwardOp
+        >::state type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,reverse_fold,(Sequence,State,BackwardOp))
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, reverse_fold)
+
+}}
+
+#endif // BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/reverse_iter_fold.hpp b/vendor/pdalboost/boost/mpl/reverse_iter_fold.hpp
new file mode 100644
index 0000000..180015a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/reverse_iter_fold.hpp
@@ -0,0 +1,56 @@
+
+#ifndef BOOST_MPL_ITER_FOLD_BACKWARD_HPP_INCLUDED
+#define BOOST_MPL_ITER_FOLD_BACKWARD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Dave Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/O1_size.hpp>
+#include <boost/mpl/arg.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/aux_/reverse_iter_fold_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    , typename BOOST_MPL_AUX_NA_PARAM(State)
+    , typename BOOST_MPL_AUX_NA_PARAM(BackwardOp)
+    , typename ForwardOp = arg<1>
+    >
+struct reverse_iter_fold
+{
+    typedef typename aux::reverse_iter_fold_impl<
+          ::pdalboost::mpl::O1_size<Sequence>::value
+        , typename begin<Sequence>::type
+        , typename end<Sequence>::type
+        , State
+        , typename lambda<BackwardOp>::type
+        , typename lambda<ForwardOp>::type
+        >::state type;
+
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(
+          4
+        , reverse_iter_fold
+        , (Sequence,State,BackwardOp,ForwardOp)
+        )
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, reverse_iter_fold)
+
+}}
+
+#endif // BOOST_MPL_ITER_FOLD_BACKWARD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/same_as.hpp b/vendor/pdalboost/boost/mpl/same_as.hpp
new file mode 100644
index 0000000..921515e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/same_as.hpp
@@ -0,0 +1,55 @@
+
+#ifndef BOOST_MPL_SAME_AS_HPP_INCLUDED
+#define BOOST_MPL_SAME_AS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/aux_/lambda_spec.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template< typename T1 >
+struct same_as
+{
+    template< typename T2 > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+        : is_same<T1,T2>
+    {
+#else
+    {
+        typedef typename is_same<T1,T2>::type type;
+#endif
+    };
+};
+
+template< typename T1 >
+struct not_same_as
+{
+    template< typename T2 > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+        : not_< is_same<T1,T2> >
+    {
+#else
+    {
+        typedef typename not_< is_same<T1,T2> >::type type;
+#endif
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_SAME_AS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/sequence_tag.hpp b/vendor/pdalboost/boost/mpl/sequence_tag.hpp
new file mode 100644
index 0000000..2bd4b1d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/sequence_tag.hpp
@@ -0,0 +1,124 @@
+
+#ifndef BOOST_MPL_SEQUENCE_TAG_HPP_INCLUDED
+#define BOOST_MPL_SEQUENCE_TAG_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/sequence_tag_fwd.hpp>
+#include <boost/mpl/aux_/has_tag.hpp>
+#include <boost/mpl/aux_/has_begin.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/is_msvc_eti_arg.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// agurt, 27/nov/02: have to use a simplistic 'sequence_tag' implementation
+// on MSVC to avoid dreadful "internal structure overflow" error
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
+    || defined(BOOST_MPL_CFG_NO_HAS_XXX)
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    >
+struct sequence_tag
+{
+    typedef typename Sequence::tag type;
+};
+
+#elif BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+
+// agurt, 07/feb/03: workaround for what seems to be MSVC 7.0-specific ETI issue
+
+namespace aux {
+
+template< bool >
+struct sequence_tag_impl
+{
+    template< typename Sequence > struct result_
+    {
+        typedef typename Sequence::tag type;
+    };
+};
+
+template<>
+struct sequence_tag_impl<false>
+{
+    template< typename Sequence > struct result_
+    {
+        typedef int type;
+    };
+};
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    >
+struct sequence_tag
+    : aux::sequence_tag_impl< !aux::is_msvc_eti_arg<Sequence>::value >
+        ::template result_<Sequence>
+{
+};
+
+#else
+
+namespace aux {
+
+template< bool has_tag_, bool has_begin_ >
+struct sequence_tag_impl
+{
+    // agurt 24/nov/02: MSVC 6.5 gets confused in 'sequence_tag_impl<true>' 
+    // specialization below, if we name it 'result_' here
+    template< typename Sequence > struct result2_;
+};
+
+#   define AUX_CLASS_SEQUENCE_TAG_SPEC(has_tag, has_begin, result_type) \
+template<> struct sequence_tag_impl<has_tag,has_begin> \
+{ \
+    template< typename Sequence > struct result2_ \
+    { \
+        typedef result_type type; \
+    }; \
+}; \
+/**/
+
+AUX_CLASS_SEQUENCE_TAG_SPEC(true, true, typename Sequence::tag)
+AUX_CLASS_SEQUENCE_TAG_SPEC(true, false, typename Sequence::tag)
+AUX_CLASS_SEQUENCE_TAG_SPEC(false, true, nested_begin_end_tag)
+AUX_CLASS_SEQUENCE_TAG_SPEC(false, false, non_sequence_tag)
+
+#   undef AUX_CLASS_SEQUENCE_TAG_SPEC
+
+} // namespace aux
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    >
+struct sequence_tag
+    : aux::sequence_tag_impl<
+          ::pdalboost::mpl::aux::has_tag<Sequence>::value
+        , ::pdalboost::mpl::aux::has_begin<Sequence>::value
+        >::template result2_<Sequence>
+{
+};
+
+#endif // BOOST_MSVC
+
+BOOST_MPL_AUX_NA_SPEC(1, sequence_tag)
+
+}}
+
+#endif // BOOST_MPL_SEQUENCE_TAG_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/sequence_tag_fwd.hpp b/vendor/pdalboost/boost/mpl/sequence_tag_fwd.hpp
new file mode 100644
index 0000000..e1bd385
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/sequence_tag_fwd.hpp
@@ -0,0 +1,26 @@
+
+#ifndef BOOST_MPL_SEQUENCE_TAG_FWD_HPP_INCLUDED
+#define BOOST_MPL_SEQUENCE_TAG_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+struct nested_begin_end_tag;
+struct non_sequence_tag;
+
+template< typename Sequence > struct sequence_tag;
+
+}}
+
+#endif // BOOST_MPL_SEQUENCE_TAG_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/at_impl.hpp b/vendor/pdalboost/boost/mpl/set/aux_/at_impl.hpp
new file mode 100644
index 0000000..74a112b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/at_impl.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_SET_AUX_AT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_AT_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/at_fwd.hpp>
+#include <boost/mpl/set/aux_/has_key_impl.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/void.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct at_impl< aux::set_tag >
+{
+    template< typename Set, typename T > struct apply
+    {
+        typedef typename if_< 
+              has_key_impl<aux::set_tag>::apply<Set,T>
+            , T
+            , void_
+            >::type type;            
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_AT_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/begin_end_impl.hpp b/vendor/pdalboost/boost/mpl/set/aux_/begin_end_impl.hpp
new file mode 100644
index 0000000..e8e0d49
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/begin_end_impl.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_SET_AUX_BEGIN_END_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_BEGIN_END_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2007
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/begin_end_fwd.hpp>
+#include <boost/mpl/set/aux_/iterator.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct begin_impl< aux::set_tag >
+{
+    template< typename Set > struct apply
+        : s_iter_get<Set,typename Set::item_>
+    {
+    };
+};
+
+template<>
+struct end_impl< aux::set_tag >
+{
+    template< typename Set > struct apply
+    {
+        typedef s_iter< Set,set0<> > type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_BEGIN_END_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/clear_impl.hpp b/vendor/pdalboost/boost/mpl/set/aux_/clear_impl.hpp
new file mode 100644
index 0000000..b4d1083
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/clear_impl.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_SET_AUX_CLEAR_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_CLEAR_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/clear_fwd.hpp>
+#include <boost/mpl/set/aux_/set0.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct clear_impl< aux::set_tag >
+{
+    template< typename Set > struct apply
+    {
+        typedef set0<> type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_CLEAR_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/empty_impl.hpp b/vendor/pdalboost/boost/mpl/set/aux_/empty_impl.hpp
new file mode 100644
index 0000000..f4be732
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/empty_impl.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_SET_AUX_EMPTY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_EMPTY_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/empty_fwd.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct empty_impl< aux::set_tag >
+{
+    template< typename Set > struct apply
+        : not_< typename Set::size >
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_EMPTY_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/erase_impl.hpp b/vendor/pdalboost/boost/mpl/set/aux_/erase_impl.hpp
new file mode 100644
index 0000000..9e1545f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/erase_impl.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_SET_AUX_ERASE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_ERASE_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/erase_fwd.hpp>
+#include <boost/mpl/set/aux_/erase_key_impl.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct erase_impl< aux::set_tag >
+{
+    template< 
+          typename Set
+        , typename Pos
+        , typename unused_
+        > 
+    struct apply
+        : erase_key_impl<aux::set_tag>
+            ::apply<Set,typename Pos::type>
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_ERASE_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/erase_key_impl.hpp b/vendor/pdalboost/boost/mpl/set/aux_/erase_key_impl.hpp
new file mode 100644
index 0000000..f1db8b5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/erase_key_impl.hpp
@@ -0,0 +1,53 @@
+
+#ifndef BOOST_MPL_SET_AUX_ERASE_KEY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_ERASE_KEY_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2007
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/erase_key_fwd.hpp>
+#include <boost/mpl/set/aux_/has_key_impl.hpp>
+#include <boost/mpl/set/aux_/item.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/base.hpp>
+#include <boost/mpl/eval_if.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct erase_key_impl< aux::set_tag >
+{
+    template< 
+          typename Set
+        , typename T
+        > 
+    struct apply
+        : eval_if< 
+              has_key_impl<aux::set_tag>::apply<Set,T>
+            , eval_if< 
+                  is_same< T,typename Set::item_type_ > 
+                , base<Set>
+                , identity< s_mask<T,typename Set::item_> >
+                >
+            , identity<Set>
+            >
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_ERASE_KEY_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/has_key_impl.hpp b/vendor/pdalboost/boost/mpl/set/aux_/has_key_impl.hpp
new file mode 100644
index 0000000..64ab22e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/has_key_impl.hpp
@@ -0,0 +1,60 @@
+
+#ifndef BOOST_MPL_SET_AUX_HAS_KEY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_HAS_KEY_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/set/aux_/tag.hpp>
+#include <boost/mpl/has_key_fwd.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/overload_names.hpp>
+#include <boost/mpl/aux_/static_cast.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct has_key_impl< aux::set_tag >
+{
+    template< typename Set, typename T > struct apply
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+    || BOOST_WORKAROUND(__EDG_VERSION__, <= 245)
+    {
+        BOOST_STATIC_CONSTANT(bool, value = 
+              ( sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(
+                    Set
+                  , BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<T>*, 0)
+                  ) ) == sizeof(aux::no_tag) )
+            );
+
+        typedef bool_<value> type;
+
+#else // ISO98 C++
+        : bool_< 
+              ( sizeof( BOOST_MPL_AUX_OVERLOAD_CALL_IS_MASKED(
+                    Set
+                  , BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<T>*, 0)
+                  ) ) == sizeof(aux::no_tag) )
+            >
+    {
+#endif
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_HAS_KEY_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/insert_impl.hpp b/vendor/pdalboost/boost/mpl/set/aux_/insert_impl.hpp
new file mode 100644
index 0000000..dacb019
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/insert_impl.hpp
@@ -0,0 +1,65 @@
+
+#ifndef BOOST_MPL_SET_AUX_INSERT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_INSERT_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2007
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/insert_fwd.hpp>
+#include <boost/mpl/set/aux_/has_key_impl.hpp>
+#include <boost/mpl/set/aux_/item.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/base.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/aux_/na.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template<  typename Set, typename T > struct set_insert_impl
+    : eval_if< 
+          has_key_impl<aux::set_tag>::apply<Set,T>
+        , identity<Set>
+        , eval_if< 
+              is_same< T,typename Set::last_masked_ > 
+            , base<Set>
+            , identity< s_item<T,typename Set::item_> >
+            >
+        >
+{
+};
+}
+
+template<>
+struct insert_impl< aux::set_tag >
+{
+    template< 
+          typename Set
+        , typename PosOrKey
+        , typename KeyOrNA
+        > 
+    struct apply
+        : aux::set_insert_impl<
+              Set
+            , typename if_na<KeyOrNA,PosOrKey>::type
+            >
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_INSERT_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/insert_range_impl.hpp b/vendor/pdalboost/boost/mpl/set/aux_/insert_range_impl.hpp
new file mode 100644
index 0000000..ebfdeb3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/insert_range_impl.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_SET_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED
+
+// Copyright Bruno Dutra 2015
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/insert_range_fwd.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/insert.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct insert_range_impl< aux::set_tag >
+{
+    template<
+          typename Sequence
+        , typename /*Pos*/
+        , typename Range
+        >
+    struct apply
+        : fold<Range, Sequence, insert<_1, _2> >
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/item.hpp b/vendor/pdalboost/boost/mpl/set/aux_/item.hpp
new file mode 100644
index 0000000..5fd45a5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/item.hpp
@@ -0,0 +1,82 @@
+
+#ifndef BOOST_MPL_SET_AUX_ITEM_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_ITEM_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2007
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/prior.hpp>
+#include <boost/mpl/set/aux_/set0.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/config/arrays.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template< typename T, typename Base >
+struct s_item
+    : Base
+{
+    typedef s_item<T,Base> item_;
+    typedef void_       last_masked_;
+    typedef T           item_type_;
+    typedef typename Base::item_ base;
+    typedef s_item type;
+    
+    typedef typename next< typename Base::size >::type  size;
+    typedef typename next< typename Base::order >::type order;
+
+#if defined(BOOST_MPL_CFG_NO_DEPENDENT_ARRAY_TYPES)
+    typedef typename aux::weighted_tag<BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value>::type order_tag_;
+#else
+    typedef char (&order_tag_)[BOOST_MPL_AUX_MSVC_VALUE_WKND(order)::value];
+#endif
+
+    BOOST_MPL_AUX_SET_OVERLOAD( order_tag_, ORDER_BY_KEY, s_item, aux::type_wrapper<T>* );
+    BOOST_MPL_AUX_SET_OVERLOAD( aux::no_tag, IS_MASKED, s_item, aux::type_wrapper<T>* );
+};
+
+
+template< typename T, typename Base >
+struct s_mask
+    : Base
+{
+    typedef s_mask<T,Base> item_;
+    typedef T       last_masked_;
+    typedef void_   item_type_;
+    typedef typename Base::item_ base;
+    typedef typename prior< typename Base::size >::type  size;
+    typedef s_mask type;
+
+    BOOST_MPL_AUX_SET_OVERLOAD( aux::yes_tag, IS_MASKED, s_mask, aux::type_wrapper<T>* );
+};
+
+
+template< typename T, typename Base >
+struct s_unmask
+    : Base
+{
+    typedef s_unmask<T,Base> item_;
+    typedef void_   last_masked_;
+    typedef T       item_type_;
+    typedef typename Base::item_ base;
+    typedef typename next< typename Base::size >::type  size;
+
+    BOOST_MPL_AUX_SET_OVERLOAD( aux::no_tag, IS_MASKED, s_unmask, aux::type_wrapper<T>* );
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_ITEM_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/iterator.hpp b/vendor/pdalboost/boost/mpl/set/aux_/iterator.hpp
new file mode 100644
index 0000000..9390f9f
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/iterator.hpp
@@ -0,0 +1,98 @@
+
+#ifndef BOOST_MPL_SET_AUX_ITERATOR_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_ITERATOR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2007
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/set/aux_/set0.hpp>
+#include <boost/mpl/has_key.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace pdalboost { namespace mpl {
+
+// used by 's_iter_get'
+template< typename Set, typename Tail > struct s_iter;
+
+template< typename Set, typename Tail > struct s_iter_get
+    : eval_if< 
+          has_key< Set,typename Tail::item_type_ >
+        , identity< s_iter<Set,Tail> >
+        , next< s_iter<Set,Tail> >
+        >
+{
+};
+
+template< typename Set, typename Tail > struct s_iter_impl
+{
+    typedef Tail                        tail_;
+    typedef forward_iterator_tag        category;
+    typedef typename Tail::item_type_   type;
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+    typedef typename s_iter_get< Set,typename Tail::base >::type next;
+#endif
+};
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename Set, typename Tail > 
+struct next< s_iter<Set,Tail> >
+    : s_iter_get< Set,typename Tail::base >
+{
+};
+
+template< typename Set > 
+struct next< s_iter<Set,set0<> > >
+{
+    typedef s_iter<Set,set0<> > type;
+};
+
+template< typename Set, typename Tail > struct s_iter
+    : s_iter_impl<Set,Tail>
+{
+};
+
+template< typename Set > struct s_iter<Set, set0<> >
+{
+    typedef forward_iterator_tag category;
+};
+
+#else
+
+template< typename Set >
+struct s_end_iter
+{
+    typedef forward_iterator_tag    category;
+    typedef s_iter<Set,set0<> >     next;
+};
+
+template< typename Set, typename Tail > struct s_iter
+    : if_< 
+          is_same< Tail,set0<> >
+        , s_end_iter<Set>
+        , s_iter_impl<Set,Tail>
+        >::type
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_ITERATOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/key_type_impl.hpp b/vendor/pdalboost/boost/mpl/set/aux_/key_type_impl.hpp
new file mode 100644
index 0000000..8e0ab05
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/key_type_impl.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_SET_AUX_KEY_TYPE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_KEY_TYPE_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/key_type_fwd.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct key_type_impl< aux::set_tag >
+{
+    template< typename Set, typename T > struct apply
+    {
+        typedef T type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_KEY_TYPE_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/set0.hpp b/vendor/pdalboost/boost/mpl/set/aux_/set0.hpp
new file mode 100644
index 0000000..2cf31e5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/set0.hpp
@@ -0,0 +1,69 @@
+
+#ifndef BOOST_MPL_SET_AUX_SET0_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_SET0_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+#include <boost/mpl/aux_/yes_no.hpp>
+#include <boost/mpl/aux_/overload_names.hpp>
+#include <boost/mpl/aux_/config/operators.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING)
+
+#   define BOOST_MPL_AUX_SET0_OVERLOAD(R, f, X, T) \
+    friend R BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f)(X const&, T) \
+/**/
+
+#   define BOOST_MPL_AUX_SET_OVERLOAD(R, f, X, T) \
+    BOOST_MPL_AUX_SET0_OVERLOAD(R, f, X, T) \
+/**/
+
+#else
+
+#   define BOOST_MPL_AUX_SET0_OVERLOAD(R, f, X, T) \
+    static R BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f)(X const&, T) \
+/**/
+
+#   define BOOST_MPL_AUX_SET_OVERLOAD(R, f, X, T) \
+    BOOST_MPL_AUX_SET0_OVERLOAD(R, f, X, T); \
+    using Base::BOOST_PP_CAT(BOOST_MPL_AUX_OVERLOAD_,f) \
+/**/
+
+#endif
+
+template< typename Dummy = na > struct set0
+{
+    typedef set0<>          item_;
+    typedef item_           type;
+    typedef aux::set_tag    tag;
+    typedef void_           last_masked_;
+    typedef void_           item_type_;
+    typedef long_<0>        size;
+    typedef long_<1>        order;
+
+    BOOST_MPL_AUX_SET0_OVERLOAD( aux::no_tag, ORDER_BY_KEY, set0<>, void const volatile* );
+    BOOST_MPL_AUX_SET0_OVERLOAD( aux::yes_tag, IS_MASKED, set0<>, void const volatile* );
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_SET0_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/size_impl.hpp b/vendor/pdalboost/boost/mpl/set/aux_/size_impl.hpp
new file mode 100644
index 0000000..89976ed
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/size_impl.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_SET_AUX_SIZE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_SIZE_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct size_impl< aux::set_tag >
+{
+    template< typename Set > struct apply
+        : Set::size
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_SIZE_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/tag.hpp b/vendor/pdalboost/boost/mpl/set/aux_/tag.hpp
new file mode 100644
index 0000000..96750c4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/tag.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_SET_AUX_TAG_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_TAG_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+struct set_tag;
+
+}}}
+
+#endif // BOOST_MPL_SET_AUX_TAG_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/aux_/value_type_impl.hpp b/vendor/pdalboost/boost/mpl/set/aux_/value_type_impl.hpp
new file mode 100644
index 0000000..1c2ae48
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/aux_/value_type_impl.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_SET_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_SET_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/value_type_fwd.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct value_type_impl< aux::set_tag >
+{
+    template< typename Set, typename T > struct apply
+    {
+        typedef T type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_SET_AUX_VALUE_TYPE_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/set/set0.hpp b/vendor/pdalboost/boost/mpl/set/set0.hpp
new file mode 100644
index 0000000..1c424e4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/set/set0.hpp
@@ -0,0 +1,36 @@
+
+#ifndef BOOST_MPL_SET_SET0_HPP_INCLUDED
+#define BOOST_MPL_SET_SET0_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/set/aux_/at_impl.hpp>
+#include <boost/mpl/set/aux_/clear_impl.hpp>
+//#include <boost/mpl/set/aux_/O1_size.hpp>
+#include <boost/mpl/set/aux_/size_impl.hpp>
+#include <boost/mpl/set/aux_/empty_impl.hpp>
+#include <boost/mpl/set/aux_/insert_impl.hpp>
+#include <boost/mpl/set/aux_/insert_range_impl.hpp>
+#include <boost/mpl/set/aux_/erase_impl.hpp>
+#include <boost/mpl/set/aux_/erase_key_impl.hpp>
+#include <boost/mpl/set/aux_/has_key_impl.hpp>
+#include <boost/mpl/set/aux_/key_type_impl.hpp>
+#include <boost/mpl/set/aux_/value_type_impl.hpp>
+#include <boost/mpl/set/aux_/begin_end_impl.hpp>
+#include <boost/mpl/set/aux_/iterator.hpp>
+#include <boost/mpl/set/aux_/item.hpp>
+#include <boost/mpl/set/aux_/set0.hpp>
+#include <boost/mpl/set/aux_/tag.hpp>
+
+#endif // BOOST_MPL_SET_SET0_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/size.hpp b/vendor/pdalboost/boost/mpl/size.hpp
new file mode 100644
index 0000000..edab583
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/size.hpp
@@ -0,0 +1,42 @@
+
+#ifndef BOOST_MPL_SIZE_HPP_INCLUDED
+#define BOOST_MPL_SIZE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/size_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/msvc_eti_base.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+    >
+struct size
+    : aux::msvc_eti_base<
+        typename size_impl< typename sequence_tag<Sequence>::type >
+            ::template apply< Sequence >::type
+      >::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, size, (Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, size)
+
+}}
+
+#endif // BOOST_MPL_SIZE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/size_fwd.hpp b/vendor/pdalboost/boost/mpl/size_fwd.hpp
new file mode 100644
index 0000000..33816f8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/size_fwd.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_SIZE_FWD_HPP_INCLUDED
+#define BOOST_MPL_SIZE_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct size_impl;
+template< typename Sequence > struct size;
+
+}}
+
+#endif // BOOST_MPL_SIZE_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/tag.hpp b/vendor/pdalboost/boost/mpl/tag.hpp
new file mode 100644
index 0000000..2124e4a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/tag.hpp
@@ -0,0 +1,52 @@
+
+#ifndef BOOST_MPL_TAG_HPP_INCLUDED
+#define BOOST_MPL_TAG_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/has_tag.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template< typename T > struct tag_impl
+{
+    typedef typename T::tag type;
+};
+}
+
+template< typename T, typename Default = void_ > struct tag
+#if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
+    : if_< 
+          aux::has_tag<T>
+        , aux::tag_impl<T>
+        , Default
+        >::type
+{
+#else
+{
+    typedef typename eval_if< 
+          aux::has_tag<T>
+        , aux::tag_impl<T>
+        , Default
+        >::type type;
+
+#endif
+};
+
+}}
+
+#endif // BOOST_MPL_TAG_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/times.hpp b/vendor/pdalboost/boost/mpl/times.hpp
new file mode 100644
index 0000000..f309557
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/times.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_TIMES_HPP_INCLUDED
+#define BOOST_MPL_TIMES_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#define AUX778076_OP_NAME times
+#define AUX778076_OP_TOKEN *
+#include <boost/mpl/aux_/arithmetic_op.hpp>
+
+#endif // BOOST_MPL_TIMES_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/transform.hpp b/vendor/pdalboost/boost/mpl/transform.hpp
new file mode 100644
index 0000000..4add1af
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/transform.hpp
@@ -0,0 +1,145 @@
+
+#ifndef BOOST_MPL_TRANSFORM_HPP_INCLUDED
+#define BOOST_MPL_TRANSFORM_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/reverse_fold.hpp>
+#include <boost/mpl/pair_view.hpp>
+#include <boost/mpl/is_sequence.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/bind.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/inserter_algorithm.hpp>
+
+namespace pdalboost { namespace mpl {
+
+namespace aux { 
+
+template< 
+      typename Seq
+    , typename Op
+    , typename In
+    >
+struct transform1_impl
+    : fold< 
+          Seq
+        , typename In::state
+        , bind2< typename lambda< typename In::operation >::type
+            , _1
+            , bind1< typename lambda<Op>::type, _2>
+            > 
+        >
+{
+};
+
+template< 
+      typename Seq
+    , typename Op
+    , typename In
+    >
+struct reverse_transform1_impl
+    : reverse_fold< 
+          Seq
+        , typename In::state
+        , bind2< typename lambda< typename In::operation >::type
+            , _1
+            , bind1< typename lambda<Op>::type, _2>
+            > 
+        >
+{
+};
+
+template< 
+      typename Seq1
+    , typename Seq2
+    , typename Op
+    , typename In
+    >
+struct transform2_impl
+    : fold< 
+          pair_view<Seq1,Seq2>
+        , typename In::state
+        , bind2< typename lambda< typename In::operation >::type
+            , _1
+            , bind2<
+                  typename lambda<Op>::type
+                , bind1<first<>,_2>
+                , bind1<second<>,_2>
+                >
+            > 
+        >
+{
+};
+
+template< 
+      typename Seq1
+    , typename Seq2
+    , typename Op
+    , typename In
+    >
+struct reverse_transform2_impl
+    : reverse_fold< 
+          pair_view<Seq1,Seq2>
+        , typename In::state
+        , bind2< typename lambda< typename In::operation >::type
+            , _1
+            , bind2< typename lambda< Op >::type
+                , bind1<first<>,_2>
+                , bind1<second<>,_2>
+                >
+            > 
+        >
+{
+};
+
+} // namespace aux 
+
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, transform1)                    
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, transform2)
+    
+#define AUX778076_TRANSFORM_DEF(name)                                   \
+template<                                                               \
+      typename BOOST_MPL_AUX_NA_PARAM(Seq1)                             \
+    , typename BOOST_MPL_AUX_NA_PARAM(Seq2OrOperation)                  \
+    , typename BOOST_MPL_AUX_NA_PARAM(OperationOrInserter)              \
+    , typename BOOST_MPL_AUX_NA_PARAM(Inserter)                         \
+    >                                                                   \
+struct name                                                             \
+{                                                                       \
+    typedef typename eval_if<                                           \
+          or_<                                                          \
+              is_na<OperationOrInserter>                                \
+            , is_lambda_expression< Seq2OrOperation >                   \
+            , not_< is_sequence<Seq2OrOperation> >                      \
+            >                                                           \
+        , name##1<Seq1,Seq2OrOperation,OperationOrInserter>             \
+        , name##2<Seq1,Seq2OrOperation,OperationOrInserter,Inserter>    \
+        >::type type;                                                   \
+};                                                                      \
+BOOST_MPL_AUX_NA_SPEC(4, name)                                          \
+/**/
+
+AUX778076_TRANSFORM_DEF(transform)
+AUX778076_TRANSFORM_DEF(reverse_transform)
+
+#undef AUX778076_TRANSFORM_DEF
+
+}}
+
+#endif // BOOST_MPL_TRANSFORM_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/value_type_fwd.hpp b/vendor/pdalboost/boost/mpl/value_type_fwd.hpp
new file mode 100644
index 0000000..065ded3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/value_type_fwd.hpp
@@ -0,0 +1,25 @@
+
+#ifndef BOOST_MPL_VALUE_TYPE_FWD_HPP_INCLUDED
+#define BOOST_MPL_VALUE_TYPE_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct value_type_impl;
+template< typename AssociativeSequence, typename T > struct value_type;
+
+}}
+
+#endif // BOOST_MPL_VALUE_TYPE_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector.hpp b/vendor/pdalboost/boost/mpl/vector.hpp
new file mode 100644
index 0000000..479983d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector.hpp
@@ -0,0 +1,57 @@
+
+#ifndef BOOST_MPL_VECTOR_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/limits/vector.hpp>
+#   include <boost/mpl/aux_/na.hpp>
+#   include <boost/mpl/aux_/config/preprocessor.hpp>
+
+#   include <boost/preprocessor/inc.hpp>
+#   include <boost/preprocessor/cat.hpp>
+#   include <boost/preprocessor/stringize.hpp>
+
+#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
+#   define AUX778076_VECTOR_HEADER \
+    BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE).hpp \
+    /**/
+#else
+#   define AUX778076_VECTOR_HEADER \
+    BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE)##.hpp \
+    /**/
+#endif
+
+#   include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_VECTOR_HEADER)
+#   undef AUX778076_VECTOR_HEADER
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER vector.hpp
+#   include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/limits/vector.hpp>
+
+#   define AUX778076_SEQUENCE_NAME vector
+#   define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_VECTOR_SIZE
+#   include <boost/mpl/aux_/sequence_wrapper.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_VECTOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/O1_size.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/O1_size.hpp
new file mode 100644
index 0000000..a0a9768
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/O1_size.hpp
@@ -0,0 +1,56 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_O1_SIZE_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_O1_SIZE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/O1_size_fwd.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template<>
+struct O1_size_impl< aux::vector_tag >
+{
+    template< typename Vector > struct apply
+        : Vector::size
+    {
+    };
+};
+
+#else
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< long N >
+struct O1_size_impl< aux::vector_tag<N> >
+{
+    template< typename Vector > struct apply
+        : mpl::long_<N>
+    {
+    };
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_O1_SIZE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/at.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/at.hpp
new file mode 100644
index 0000000..2fb1eff
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/at.hpp
@@ -0,0 +1,116 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_AT_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_AT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/at_fwd.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template< typename Vector, long n_ >
+struct v_at_impl
+{
+    typedef long_< (Vector::lower_bound_::value + n_) > index_;
+    typedef __typeof__( Vector::item_(index_()) ) type;
+};
+
+
+template< typename Vector, long n_ >
+struct v_at
+    : aux::wrapped_type< typename v_at_impl<Vector,n_>::type >
+{
+};
+
+template<>
+struct at_impl< aux::vector_tag >
+{
+    template< typename Vector, typename N > struct apply
+        : v_at<
+              Vector
+            , BOOST_MPL_AUX_VALUE_WKND(N)::value
+            >
+    {
+    };
+};
+
+#else
+
+#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+    && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)
+
+template< typename Vector, BOOST_MPL_AUX_NTTP_DECL(long, n_) > struct v_at;
+
+template< BOOST_MPL_AUX_NTTP_DECL(long, n_) >
+struct at_impl< aux::vector_tag<n_> >
+{
+    template< typename Vector, typename N > struct apply
+#if !defined(__BORLANDC__)
+        : v_at<
+              Vector
+            , BOOST_MPL_AUX_VALUE_WKND(N)::value
+            >
+    {
+#else
+    {
+        typedef typename v_at<
+              Vector
+            , BOOST_MPL_AUX_VALUE_WKND(N)::value
+            >::type type;
+#endif
+    };
+};
+
+#   else
+
+namespace aux {
+
+template< BOOST_MPL_AUX_NTTP_DECL(long, n_) > struct v_at_impl
+{
+    template< typename V > struct result_;
+};
+
+// to work around ETI, etc.
+template<> struct v_at_impl<-1>
+{
+    template< typename V > struct result_
+    {
+        typedef void_ type;
+    };
+};
+
+} // namespace aux
+
+template< typename T, BOOST_MPL_AUX_NTTP_DECL(long, n_) >
+struct v_at
+    : aux::v_at_impl<n_>::template result_<T>
+{
+};
+
+#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_AT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/back.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/back.hpp
new file mode 100644
index 0000000..edd0850
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/back.hpp
@@ -0,0 +1,59 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_BACK_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_BACK_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/back_fwd.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/vector/aux_/at.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template<>
+struct back_impl< aux::vector_tag >
+{
+    template< typename Vector > struct apply
+        : v_at<
+              Vector
+            , prior<typename Vector::size>::type::value
+            >
+    {
+    };
+};
+
+#else
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< long n_ >
+struct back_impl< aux::vector_tag<n_> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_BACK_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/begin_end.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/begin_end.hpp
new file mode 100644
index 0000000..3029111
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/begin_end.hpp
@@ -0,0 +1,49 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_BEGIN_END_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_BEGIN_END_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+#   include <boost/mpl/begin_end_fwd.hpp>
+#   include <boost/mpl/vector/aux_/iterator.hpp>
+#   include <boost/mpl/vector/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct begin_impl< aux::vector_tag >
+{
+    template< typename Vector > struct apply
+    {
+        typedef v_iter<Vector,0> type;
+    };
+};
+
+template<>
+struct end_impl< aux::vector_tag >
+{
+    template< typename Vector > struct apply
+    {
+        typedef v_iter<Vector,Vector::size::value> type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#endif // BOOST_MPL_VECTOR_AUX_BEGIN_END_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/clear.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/clear.hpp
new file mode 100644
index 0000000..4f682f5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/clear.hpp
@@ -0,0 +1,55 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_CLEAR_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_CLEAR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/clear_fwd.hpp>
+#include <boost/mpl/vector/aux_/vector0.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template<>
+struct clear_impl< aux::vector_tag >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+#else
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< long N >
+struct clear_impl< aux::vector_tag<N> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_CLEAR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/empty.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/empty.hpp
new file mode 100644
index 0000000..33955a3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/empty.hpp
@@ -0,0 +1,68 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_EMPTY_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_EMPTY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/empty_fwd.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template<>
+struct empty_impl< aux::vector_tag >
+{
+    template< typename Vector > struct apply
+        : is_same<
+              typename Vector::lower_bound_
+            , typename Vector::upper_bound_
+            >
+    {
+    };
+};
+
+#else
+
+template<>
+struct empty_impl< aux::vector_tag<0> >
+{
+    template< typename Vector > struct apply
+        : true_
+    {
+    };
+};
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< long N >
+struct empty_impl< aux::vector_tag<N> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_EMPTY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/front.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/front.hpp
new file mode 100644
index 0000000..86eef47
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/front.hpp
@@ -0,0 +1,56 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_FRONT_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_FRONT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/front_fwd.hpp>
+#include <boost/mpl/vector/aux_/at.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template<>
+struct front_impl< aux::vector_tag >
+{
+    template< typename Vector > struct apply
+        : v_at<Vector,0>
+    {
+    };
+};
+
+#else
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< BOOST_MPL_AUX_NTTP_DECL(long, n_) >
+struct front_impl< aux::vector_tag<n_> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_FRONT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/include_preprocessed.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/include_preprocessed.hpp
new file mode 100644
index 0000000..a676116
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/include_preprocessed.hpp
@@ -0,0 +1,55 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// Copyright Aleksey Gurtovoy 2000-2006
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/config/preprocessor.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/stringize.hpp>
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+#   define AUX778076_INCLUDE_DIR typeof_based
+#elif defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+   || defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)
+#   define AUX778076_INCLUDE_DIR no_ctps
+#else
+#   define AUX778076_INCLUDE_DIR plain
+#endif
+
+#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
+#   define AUX778076_HEADER \
+    AUX778076_INCLUDE_DIR/BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+#else
+#   define AUX778076_HEADER \
+    BOOST_PP_CAT(AUX778076_INCLUDE_DIR,/)##BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+#endif
+
+
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))
+#   define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/vector/aux_/preprocessed/AUX778076_HEADER)
+#   include AUX778076_INCLUDE_STRING
+#   undef AUX778076_INCLUDE_STRING
+#else
+#   include BOOST_PP_STRINGIZE(boost/mpl/vector/aux_/preprocessed/AUX778076_HEADER)
+#endif
+
+#   undef AUX778076_HEADER
+#   undef AUX778076_INCLUDE_DIR
+
+#undef BOOST_MPL_PREPROCESSED_HEADER
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/item.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/item.hpp
new file mode 100644
index 0000000..8cc9d00
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/item.hpp
@@ -0,0 +1,103 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template< 
+      typename T
+    , typename Base
+    , int at_front = 0
+    >
+struct v_item
+    : Base
+{
+    typedef typename Base::upper_bound_ index_;
+    typedef typename next<index_>::type upper_bound_;
+    typedef typename next<typename Base::size>::type size;
+    typedef Base base;
+    typedef v_item type;
+
+    // agurt 10/sep/04: MWCW <= 9.3 workaround here and below; the compiler
+    // breaks if using declaration comes _before_ the new overload
+    static aux::type_wrapper<T> item_(index_);
+    using Base::item_;
+};
+
+template<
+      typename T
+    , typename Base
+    >
+struct v_item<T,Base,1>
+    : Base
+{
+    typedef typename prior<typename Base::lower_bound_>::type index_;
+    typedef index_ lower_bound_;
+    typedef typename next<typename Base::size>::type size;
+    typedef Base base;
+    typedef v_item type;
+
+    static aux::type_wrapper<T> item_(index_);
+    using Base::item_;
+};
+
+// "erasure" item
+template< 
+      typename Base
+    , int at_front
+    >
+struct v_mask
+    : Base
+{
+    typedef typename prior<typename Base::upper_bound_>::type index_;
+    typedef index_ upper_bound_;
+    typedef typename prior<typename Base::size>::type size;
+    typedef Base base;
+    typedef v_mask type;
+
+    static aux::type_wrapper<void_> item_(index_);
+    using Base::item_;
+};
+
+template< 
+      typename Base
+    >
+struct v_mask<Base,1>
+    : Base
+{
+    typedef typename Base::lower_bound_ index_;
+    typedef typename next<index_>::type lower_bound_;
+    typedef typename prior<typename Base::size>::type size;
+    typedef Base base;
+    typedef v_mask type;
+
+    static aux::type_wrapper<void_> item_(index_);
+    using Base::item_;
+};
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_ITEM_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/iterator.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/iterator.hpp
new file mode 100644
index 0000000..cd5e300
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/iterator.hpp
@@ -0,0 +1,130 @@
+
+#ifndef BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED
+#define BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/vector/aux_/at.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/plus.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/advance_fwd.hpp>
+#include <boost/mpl/distance_fwd.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/prior.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename Vector
+    , BOOST_MPL_AUX_NTTP_DECL(long, n_)
+    >
+struct v_iter
+{
+    typedef aux::v_iter_tag tag;
+    typedef random_access_iterator_tag category;
+    typedef typename v_at<Vector,n_>::type type;
+
+    typedef Vector vector_;
+    typedef mpl::long_<n_> pos;
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+    enum { 
+          next_ = n_ + 1
+        , prior_ = n_ - 1
+        , pos_ = n_
+    };
+    
+    typedef v_iter<Vector,next_> next;
+    typedef v_iter<Vector,prior_> prior;
+#endif
+
+};
+
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+      typename Vector
+    , BOOST_MPL_AUX_NTTP_DECL(long, n_)
+    >
+struct next< v_iter<Vector,n_> >
+{
+    typedef v_iter<Vector,(n_ + 1)> type;
+};
+
+template<
+      typename Vector
+    , BOOST_MPL_AUX_NTTP_DECL(long, n_)
+    >
+struct prior< v_iter<Vector,n_> >
+{
+    typedef v_iter<Vector,(n_ - 1)> type;
+};
+
+template<
+      typename Vector
+    , BOOST_MPL_AUX_NTTP_DECL(long, n_)
+    , typename Distance
+    >
+struct advance< v_iter<Vector,n_>,Distance>
+{
+    typedef v_iter<
+          Vector
+        , (n_ + BOOST_MPL_AUX_NESTED_VALUE_WKND(long, Distance))
+        > type;
+};
+
+template< 
+      typename Vector
+    , BOOST_MPL_AUX_NTTP_DECL(long, n_)
+    , BOOST_MPL_AUX_NTTP_DECL(long, m_)
+    > 
+struct distance< v_iter<Vector,n_>, v_iter<Vector,m_> >
+    : mpl::long_<(m_ - n_)>
+{
+};
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template<> struct advance_impl<aux::v_iter_tag>
+{
+    template< typename Iterator, typename N > struct apply
+    {
+        enum { pos_ = Iterator::pos_, n_ = N::value };
+        typedef v_iter<
+              typename Iterator::vector_
+            , (pos_ + n_)
+            > type;
+    };
+};
+
+template<> struct distance_impl<aux::v_iter_tag>
+{
+    template< typename Iter1, typename Iter2 > struct apply
+    {
+        enum { pos1_ = Iter1::pos_, pos2_ = Iter2::pos_ };
+        typedef long_<( pos2_ - pos1_ )> type;
+        BOOST_STATIC_CONSTANT(long, value = ( pos2_ - pos1_ ));
+    };
+};
+
+#endif
+
+}}
+
+#endif // BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/numbered.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/numbered.hpp
new file mode 100644
index 0000000..b3f0387
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/numbered.hpp
@@ -0,0 +1,218 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+#if defined(BOOST_PP_IS_ITERATING)
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/enum_shifted_params.hpp>
+#include <boost/preprocessor/comma_if.hpp>
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+#   define AUX778076_VECTOR_TAIL(vector, i_, T) \
+    BOOST_PP_CAT(vector,i_)< \
+          BOOST_PP_ENUM_PARAMS(i_, T) \
+        > \
+    /**/
+
+#if i_ > 0
+template<
+      BOOST_PP_ENUM_PARAMS(i_, typename T)
+    >
+struct BOOST_PP_CAT(vector,i_)
+    : v_item<
+          BOOST_PP_CAT(T,BOOST_PP_DEC(i_))
+        , AUX778076_VECTOR_TAIL(vector,BOOST_PP_DEC(i_),T)
+        >
+{
+    typedef BOOST_PP_CAT(vector,i_) type;
+};
+#endif
+
+#   undef AUX778076_VECTOR_TAIL
+
+#else // "brute force" implementation
+
+#   if i_ > 0
+
+template<
+      BOOST_PP_ENUM_PARAMS(i_, typename T)
+    >
+struct BOOST_PP_CAT(vector,i_)
+{
+    typedef aux::vector_tag<i_> tag;
+    typedef BOOST_PP_CAT(vector,i_) type;
+
+#   define AUX778076_VECTOR_ITEM(unused, i_, unused2) \
+    typedef BOOST_PP_CAT(T,i_) BOOST_PP_CAT(item,i_); \
+    /**/
+
+    BOOST_PP_REPEAT(i_, AUX778076_VECTOR_ITEM, unused)
+#   undef AUX778076_VECTOR_ITEM
+    typedef void_ BOOST_PP_CAT(item,i_);
+    typedef BOOST_PP_CAT(T,BOOST_PP_DEC(i_)) back;
+
+    // Borland forces us to use 'type' here (instead of the class name)
+    typedef v_iter<type,0> begin;
+    typedef v_iter<type,i_> end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<BOOST_PP_DEC(i_)> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef BOOST_PP_CAT(vector,i_)<
+              T
+              BOOST_PP_COMMA_IF(BOOST_PP_DEC(i_))
+              BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(i_), typename Vector::item)
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<i_> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef BOOST_PP_CAT(vector,BOOST_PP_DEC(i_))<
+              BOOST_PP_ENUM_SHIFTED_PARAMS(i_, typename Vector::item)
+            > type;
+    };
+};
+
+
+template<>
+struct push_back_impl< aux::vector_tag<BOOST_PP_DEC(i_)> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef BOOST_PP_CAT(vector,i_)<
+              BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(i_), typename Vector::item)
+              BOOST_PP_COMMA_IF(BOOST_PP_DEC(i_))
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<i_> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef BOOST_PP_CAT(vector,BOOST_PP_DEC(i_))<
+              BOOST_PP_ENUM_PARAMS(BOOST_PP_DEC(i_), typename Vector::item)
+            > type;
+    };
+};
+
+#   endif // i_ > 0
+
+#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+    && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)
+
+template< typename V >
+struct v_at<V,i_>
+{
+    typedef typename V::BOOST_PP_CAT(item,i_) type;
+};
+
+#   else
+
+namespace aux {
+template<> struct v_at_impl<i_>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::BOOST_PP_CAT(item,i_) type;
+    };
+};
+}
+
+template<>
+struct at_impl< aux::vector_tag<i_> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+#if i_ > 0
+template<>
+struct front_impl< aux::vector_tag<i_> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<i_> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<i_> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+#endif
+
+template<>
+struct size_impl< aux::vector_tag<i_> >
+{
+    template< typename Vector > struct apply
+        : long_<i_>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<i_> >
+    : size_impl< aux::vector_tag<i_> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<i_> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+#   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#undef i_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/numbered_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/numbered_c.hpp
new file mode 100644
index 0000000..4c159f9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/numbered_c.hpp
@@ -0,0 +1,77 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+#if defined(BOOST_PP_IS_ITERATING)
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/enum_shifted_params.hpp>
+#include <boost/preprocessor/comma_if.hpp>
+#include <boost/preprocessor/repeat.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define i_ BOOST_PP_FRAME_ITERATION(1)
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+#   define AUX778076_VECTOR_TAIL(vector, i_, C) \
+    BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c)<T \
+          BOOST_PP_COMMA_IF(i_) BOOST_PP_ENUM_PARAMS(i_, C) \
+        > \
+    /**/
+
+#if i_ > 0
+template<
+      typename T
+    , BOOST_PP_ENUM_PARAMS(i_, T C)
+    >
+struct BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c)
+    : v_item<
+          integral_c<T,BOOST_PP_CAT(C,BOOST_PP_DEC(i_))>
+        , AUX778076_VECTOR_TAIL(vector,BOOST_PP_DEC(i_),C)
+        >
+{
+    typedef BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c) type;
+    typedef T value_type;
+};
+#endif
+
+#   undef AUX778076_VECTOR_TAIL
+
+#else // "brute force" implementation
+
+#   define AUX778076_VECTOR_C_PARAM_FUNC(unused, i_, param) \
+    BOOST_PP_COMMA_IF(i_) \
+    integral_c<T,BOOST_PP_CAT(param,i_)> \
+    /**/
+
+template<
+      typename T
+    , BOOST_PP_ENUM_PARAMS(i_, T C)
+    >
+struct BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c)
+    : BOOST_PP_CAT(vector,i_)< BOOST_PP_REPEAT(i_,AUX778076_VECTOR_C_PARAM_FUNC,C) >
+{
+    typedef BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c) type;
+    typedef T value_type;
+};
+
+#   undef AUX778076_VECTOR_C_PARAM_FUNC
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#undef i_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/pop_back.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/pop_back.hpp
new file mode 100644
index 0000000..8613c23
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/pop_back.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_POP_BACK_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_POP_BACK_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/pop_back_fwd.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+#   include <boost/mpl/vector/aux_/item.hpp>
+#   include <boost/mpl/vector/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct pop_back_impl< aux::vector_tag >
+{
+    template< typename Vector > struct apply
+    {
+        typedef v_mask<Vector,0> type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#endif // BOOST_MPL_VECTOR_AUX_POP_BACK_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/pop_front.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/pop_front.hpp
new file mode 100644
index 0000000..70571ca
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/pop_front.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_POP_FRONT_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_POP_FRONT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/pop_front_fwd.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+#   include <boost/mpl/vector/aux_/item.hpp>
+#   include <boost/mpl/vector/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct pop_front_impl< aux::vector_tag >
+{
+    template< typename Vector > struct apply
+    {
+        typedef v_mask<Vector,1> type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#endif // BOOST_MPL_VECTOR_AUX_POP_FRONT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp
new file mode 100644
index 0000000..fb564b5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp
@@ -0,0 +1,1528 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector10.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+namespace aux {
+template<> struct v_at_impl<0>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item0 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<0> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<0> >
+{
+    template< typename Vector > struct apply
+        : long_<0>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<0> >
+    : size_impl< aux::vector_tag<0> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<0> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0
+    >
+struct vector1
+{
+    typedef aux::vector_tag<1> tag;
+    typedef vector1 type;
+    typedef T0 item0;
+    typedef void_ item1;
+    typedef T0 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,1 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<0> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector1<
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<1> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<
+             
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<0> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector1<
+             
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<1> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<
+             
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<1>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item1 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<1> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<1> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<1> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<1> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<1> >
+{
+    template< typename Vector > struct apply
+        : long_<1>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<1> >
+    : size_impl< aux::vector_tag<1> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<1> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1
+    >
+struct vector2
+{
+    typedef aux::vector_tag<2> tag;
+    typedef vector2 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    
+
+    typedef void_ item2;
+    typedef T1 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,2 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<1> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector2<
+              T
+              ,
+              typename Vector::item0
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<2> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector1<
+              typename Vector::item1
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<1> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector2<
+              typename Vector::item0
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<2> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector1<
+              typename Vector::item0
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<2>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item2 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<2> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<2> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<2> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<2> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<2> >
+{
+    template< typename Vector > struct apply
+        : long_<2>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<2> >
+    : size_impl< aux::vector_tag<2> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<2> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct vector3
+{
+    typedef aux::vector_tag<3> tag;
+    typedef vector3 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    
+
+    typedef void_ item3;
+    typedef T2 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,3 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<2> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector3<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<3> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector2<
+              typename Vector::item1, typename Vector::item2
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<2> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector3<
+              typename Vector::item0, typename Vector::item1
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<3> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector2<
+              typename Vector::item0, typename Vector::item1
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<3>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item3 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<3> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<3> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<3> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<3> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<3> >
+{
+    template< typename Vector > struct apply
+        : long_<3>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<3> >
+    : size_impl< aux::vector_tag<3> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<3> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct vector4
+{
+    typedef aux::vector_tag<4> tag;
+    typedef vector4 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    
+
+    typedef void_ item4;
+    typedef T3 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,4 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<3> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector4<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<4> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector3<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<3> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector4<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<4> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector3<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<4>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item4 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<4> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<4> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<4> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<4> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<4> >
+{
+    template< typename Vector > struct apply
+        : long_<4>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<4> >
+    : size_impl< aux::vector_tag<4> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<4> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct vector5
+{
+    typedef aux::vector_tag<5> tag;
+    typedef vector5 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    
+
+    typedef void_ item5;
+    typedef T4 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,5 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<4> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector5<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<5> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector4<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<4> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector5<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<5> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector4<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<5>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item5 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<5> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<5> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<5> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<5> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<5> >
+{
+    template< typename Vector > struct apply
+        : long_<5>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<5> >
+    : size_impl< aux::vector_tag<5> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<5> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct vector6
+{
+    typedef aux::vector_tag<6> tag;
+    typedef vector6 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    
+
+    typedef void_ item6;
+    typedef T5 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,6 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<5> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector6<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<6> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector5<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<5> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector6<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<6> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector5<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<6>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item6 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<6> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<6> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<6> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<6> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<6> >
+{
+    template< typename Vector > struct apply
+        : long_<6>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<6> >
+    : size_impl< aux::vector_tag<6> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<6> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct vector7
+{
+    typedef aux::vector_tag<7> tag;
+    typedef vector7 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    
+
+    typedef void_ item7;
+    typedef T6 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,7 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<6> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector7<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<7> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector6<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<6> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector7<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<7> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector6<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<7>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item7 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<7> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<7> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<7> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<7> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<7> >
+{
+    template< typename Vector > struct apply
+        : long_<7>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<7> >
+    : size_impl< aux::vector_tag<7> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<7> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct vector8
+{
+    typedef aux::vector_tag<8> tag;
+    typedef vector8 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    
+
+    typedef void_ item8;
+    typedef T7 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,8 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<7> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector8<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<8> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector7<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<7> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector8<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<8> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector7<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<8>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item8 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<8> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<8> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<8> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<8> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<8> >
+{
+    template< typename Vector > struct apply
+        : long_<8>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<8> >
+    : size_impl< aux::vector_tag<8> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<8> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct vector9
+{
+    typedef aux::vector_tag<9> tag;
+    typedef vector9 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    
+
+    typedef void_ item9;
+    typedef T8 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,9 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<8> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector9<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<9> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector8<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<8> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector9<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<9> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector8<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<9>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item9 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<9> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<9> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<9> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<9> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<9> >
+{
+    template< typename Vector > struct apply
+        : long_<9>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<9> >
+    : size_impl< aux::vector_tag<9> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<9> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct vector10
+{
+    typedef aux::vector_tag<10> tag;
+    typedef vector10 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    
+
+    typedef void_ item10;
+    typedef T9 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,10 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<9> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector10<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<10> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector9<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<9> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector10<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<10> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector9<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<10>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item10 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<10> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<10> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<10> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<10> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<10> >
+{
+    template< typename Vector > struct apply
+        : long_<10>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<10> >
+    : size_impl< aux::vector_tag<10> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<10> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp
new file mode 100644
index 0000000..c4b9796
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp
@@ -0,0 +1,149 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector10_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0
+    >
+struct vector1_c
+    : vector1< integral_c< T,C0 > >
+{
+    typedef vector1_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1
+    >
+struct vector2_c
+    : vector2< integral_c< T,C0 >, integral_c< T,C1 > >
+{
+    typedef vector2_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2
+    >
+struct vector3_c
+    : vector3< integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 > >
+{
+    typedef vector3_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3
+    >
+struct vector4_c
+    : vector4<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >, integral_c<T
+        , C3> 
+ >
+{
+    typedef vector4_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4
+    >
+struct vector5_c
+    : vector5<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 > 
+ >
+{
+    typedef vector5_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5
+    >
+struct vector6_c
+    : vector6<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 > 
+ >
+{
+    typedef vector6_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6
+    >
+struct vector7_c
+    : vector7<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c<T
+        , C6> 
+ >
+{
+    typedef vector7_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7
+    >
+struct vector8_c
+    : vector8<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 > 
+ >
+{
+    typedef vector8_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8
+    >
+struct vector9_c
+    : vector9<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 > 
+ >
+{
+    typedef vector9_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9
+    >
+struct vector10_c
+    : vector10<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 > 
+ >
+{
+    typedef vector10_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp
new file mode 100644
index 0000000..c051d74
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp
@@ -0,0 +1,1804 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector20.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct vector11
+{
+    typedef aux::vector_tag<11> tag;
+    typedef vector11 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    
+
+    typedef void_ item11;
+    typedef T10 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,11 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<10> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector11<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<11> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector10<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<10> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector11<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<11> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector10<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<11>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item11 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<11> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<11> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<11> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<11> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<11> >
+{
+    template< typename Vector > struct apply
+        : long_<11>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<11> >
+    : size_impl< aux::vector_tag<11> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<11> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct vector12
+{
+    typedef aux::vector_tag<12> tag;
+    typedef vector12 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    
+
+    typedef void_ item12;
+    typedef T11 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,12 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<11> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector12<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<12> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector11<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<11> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector12<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<12> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector11<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<12>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item12 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<12> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<12> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<12> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<12> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<12> >
+{
+    template< typename Vector > struct apply
+        : long_<12>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<12> >
+    : size_impl< aux::vector_tag<12> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<12> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct vector13
+{
+    typedef aux::vector_tag<13> tag;
+    typedef vector13 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    
+
+    typedef void_ item13;
+    typedef T12 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,13 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<12> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector13<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<13> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector12<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<12> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector13<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<13> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector12<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<13>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item13 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<13> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<13> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<13> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<13> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<13> >
+{
+    template< typename Vector > struct apply
+        : long_<13>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<13> >
+    : size_impl< aux::vector_tag<13> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<13> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct vector14
+{
+    typedef aux::vector_tag<14> tag;
+    typedef vector14 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    
+
+    typedef void_ item14;
+    typedef T13 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,14 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<13> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector14<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<14> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector13<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<13> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector14<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<14> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector13<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<14>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item14 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<14> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<14> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<14> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<14> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<14> >
+{
+    template< typename Vector > struct apply
+        : long_<14>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<14> >
+    : size_impl< aux::vector_tag<14> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<14> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct vector15
+{
+    typedef aux::vector_tag<15> tag;
+    typedef vector15 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    
+
+    typedef void_ item15;
+    typedef T14 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,15 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<14> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector15<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<15> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector14<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<14> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector15<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<15> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector14<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<15>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item15 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<15> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<15> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<15> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<15> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<15> >
+{
+    template< typename Vector > struct apply
+        : long_<15>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<15> >
+    : size_impl< aux::vector_tag<15> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<15> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct vector16
+{
+    typedef aux::vector_tag<16> tag;
+    typedef vector16 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    
+
+    typedef void_ item16;
+    typedef T15 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,16 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<15> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector16<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<16> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector15<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<15> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector16<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<16> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector15<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<16>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item16 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<16> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<16> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<16> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<16> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<16> >
+{
+    template< typename Vector > struct apply
+        : long_<16>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<16> >
+    : size_impl< aux::vector_tag<16> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<16> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct vector17
+{
+    typedef aux::vector_tag<17> tag;
+    typedef vector17 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    
+
+    typedef void_ item17;
+    typedef T16 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,17 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<16> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector17<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<17> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector16<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<16> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector17<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<17> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector16<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<17>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item17 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<17> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<17> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<17> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<17> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<17> >
+{
+    template< typename Vector > struct apply
+        : long_<17>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<17> >
+    : size_impl< aux::vector_tag<17> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<17> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct vector18
+{
+    typedef aux::vector_tag<18> tag;
+    typedef vector18 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    
+
+    typedef void_ item18;
+    typedef T17 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,18 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<17> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector18<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<18> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector17<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<17> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector18<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<18> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector17<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<18>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item18 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<18> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<18> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<18> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<18> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<18> >
+{
+    template< typename Vector > struct apply
+        : long_<18>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<18> >
+    : size_impl< aux::vector_tag<18> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<18> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct vector19
+{
+    typedef aux::vector_tag<19> tag;
+    typedef vector19 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    
+
+    typedef void_ item19;
+    typedef T18 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,19 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<18> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector19<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<19> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector18<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<18> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector19<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<19> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector18<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<19>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item19 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<19> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<19> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<19> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<19> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<19> >
+{
+    template< typename Vector > struct apply
+        : long_<19>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<19> >
+    : size_impl< aux::vector_tag<19> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<19> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct vector20
+{
+    typedef aux::vector_tag<20> tag;
+    typedef vector20 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    
+
+    typedef void_ item20;
+    typedef T19 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,20 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<19> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector20<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<20> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector19<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<19> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector20<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<20> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector19<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<20>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item20 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<20> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<20> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<20> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<20> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<20> >
+{
+    template< typename Vector > struct apply
+        : long_<20>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<20> >
+    : size_impl< aux::vector_tag<20> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<20> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp
new file mode 100644
index 0000000..b7f748e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp
@@ -0,0 +1,195 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector20_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    >
+struct vector11_c
+    : vector11<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >, integral_c<T
+        , C10> 
+ >
+{
+    typedef vector11_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11
+    >
+struct vector12_c
+    : vector12<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 > 
+ >
+{
+    typedef vector12_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12
+    >
+struct vector13_c
+    : vector13<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 > 
+ >
+{
+    typedef vector13_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13
+    >
+struct vector14_c
+    : vector14<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >, integral_c<T
+        , C13> 
+ >
+{
+    typedef vector14_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14
+    >
+struct vector15_c
+    : vector15<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 > 
+ >
+{
+    typedef vector15_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15
+    >
+struct vector16_c
+    : vector16<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 > 
+ >
+{
+    typedef vector16_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16
+    >
+struct vector17_c
+    : vector17<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >, integral_c<T
+        , C16> 
+ >
+{
+    typedef vector17_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17
+    >
+struct vector18_c
+    : vector18<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 > 
+ >
+{
+    typedef vector18_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18
+    >
+struct vector19_c
+    : vector19<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 > 
+ >
+{
+    typedef vector19_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19
+    >
+struct vector20_c
+    : vector20<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >, integral_c<T
+        , C19> 
+ >
+{
+    typedef vector20_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp
new file mode 100644
index 0000000..401314c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp
@@ -0,0 +1,2124 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector30.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20
+    >
+struct vector21
+{
+    typedef aux::vector_tag<21> tag;
+    typedef vector21 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    
+
+    typedef void_ item21;
+    typedef T20 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,21 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<20> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector21<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<21> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector20<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<20> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector21<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<21> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector20<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<21>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item21 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<21> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<21> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<21> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<21> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<21> >
+{
+    template< typename Vector > struct apply
+        : long_<21>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<21> >
+    : size_impl< aux::vector_tag<21> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<21> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21
+    >
+struct vector22
+{
+    typedef aux::vector_tag<22> tag;
+    typedef vector22 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    
+
+    typedef void_ item22;
+    typedef T21 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,22 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<21> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector22<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<22> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector21<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<21> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector22<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<22> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector21<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<22>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item22 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<22> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<22> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<22> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<22> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<22> >
+{
+    template< typename Vector > struct apply
+        : long_<22>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<22> >
+    : size_impl< aux::vector_tag<22> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<22> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22
+    >
+struct vector23
+{
+    typedef aux::vector_tag<23> tag;
+    typedef vector23 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    
+
+    typedef void_ item23;
+    typedef T22 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,23 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<22> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector23<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<23> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector22<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<22> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector23<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<23> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector22<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<23>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item23 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<23> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<23> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<23> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<23> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<23> >
+{
+    template< typename Vector > struct apply
+        : long_<23>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<23> >
+    : size_impl< aux::vector_tag<23> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<23> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23
+    >
+struct vector24
+{
+    typedef aux::vector_tag<24> tag;
+    typedef vector24 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    
+
+    typedef void_ item24;
+    typedef T23 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,24 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<23> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector24<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<24> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector23<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<23> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector24<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<24> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector23<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<24>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item24 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<24> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<24> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<24> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<24> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<24> >
+{
+    template< typename Vector > struct apply
+        : long_<24>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<24> >
+    : size_impl< aux::vector_tag<24> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<24> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    >
+struct vector25
+{
+    typedef aux::vector_tag<25> tag;
+    typedef vector25 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    
+
+    typedef void_ item25;
+    typedef T24 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,25 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<24> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector25<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<25> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector24<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<24> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector25<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<25> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector24<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<25>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item25 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<25> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<25> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<25> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<25> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<25> >
+{
+    template< typename Vector > struct apply
+        : long_<25>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<25> >
+    : size_impl< aux::vector_tag<25> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<25> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25
+    >
+struct vector26
+{
+    typedef aux::vector_tag<26> tag;
+    typedef vector26 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    
+
+    typedef void_ item26;
+    typedef T25 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,26 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<25> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector26<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<26> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector25<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<25> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector26<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<26> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector25<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<26>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item26 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<26> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<26> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<26> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<26> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<26> >
+{
+    template< typename Vector > struct apply
+        : long_<26>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<26> >
+    : size_impl< aux::vector_tag<26> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<26> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26
+    >
+struct vector27
+{
+    typedef aux::vector_tag<27> tag;
+    typedef vector27 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    
+
+    typedef void_ item27;
+    typedef T26 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,27 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<26> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector27<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<27> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector26<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<26> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector27<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<27> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector26<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<27>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item27 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<27> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<27> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<27> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<27> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<27> >
+{
+    template< typename Vector > struct apply
+        : long_<27>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<27> >
+    : size_impl< aux::vector_tag<27> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<27> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27
+    >
+struct vector28
+{
+    typedef aux::vector_tag<28> tag;
+    typedef vector28 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    
+
+    typedef void_ item28;
+    typedef T27 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,28 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<27> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector28<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<28> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector27<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<27> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector28<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<28> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector27<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<28>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item28 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<28> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<28> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<28> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<28> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<28> >
+{
+    template< typename Vector > struct apply
+        : long_<28>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<28> >
+    : size_impl< aux::vector_tag<28> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<28> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28
+    >
+struct vector29
+{
+    typedef aux::vector_tag<29> tag;
+    typedef vector29 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    
+
+    typedef void_ item29;
+    typedef T28 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,29 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<28> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector29<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<29> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector28<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<28> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector29<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<29> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector28<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<29>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item29 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<29> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<29> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<29> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<29> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<29> >
+{
+    template< typename Vector > struct apply
+        : long_<29>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<29> >
+    : size_impl< aux::vector_tag<29> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<29> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    >
+struct vector30
+{
+    typedef aux::vector_tag<30> tag;
+    typedef vector30 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    
+
+    typedef void_ item30;
+    typedef T29 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,30 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<29> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector30<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<30> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector29<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<29> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector30<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<30> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector29<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<30>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item30 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<30> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<30> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<30> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<30> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<30> >
+{
+    template< typename Vector > struct apply
+        : long_<30>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<30> >
+    : size_impl< aux::vector_tag<30> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<30> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp
new file mode 100644
index 0000000..7b23502
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp
@@ -0,0 +1,238 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector30_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    >
+struct vector21_c
+    : vector21<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 > 
+ >
+{
+    typedef vector21_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21
+    >
+struct vector22_c
+    : vector22<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 > 
+ >
+{
+    typedef vector22_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22
+    >
+struct vector23_c
+    : vector23<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >, integral_c<T
+        , C22> 
+ >
+{
+    typedef vector23_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23
+    >
+struct vector24_c
+    : vector24<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 > 
+ >
+{
+    typedef vector24_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24
+    >
+struct vector25_c
+    : vector25<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 > 
+ >
+{
+    typedef vector25_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25
+    >
+struct vector26_c
+    : vector26<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >, integral_c<T
+        , C25> 
+ >
+{
+    typedef vector26_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26
+    >
+struct vector27_c
+    : vector27<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 > 
+ >
+{
+    typedef vector27_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27
+    >
+struct vector28_c
+    : vector28<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 > 
+ >
+{
+    typedef vector28_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28
+    >
+struct vector29_c
+    : vector29<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >, integral_c<T
+        , C28> 
+ >
+{
+    typedef vector29_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29
+    >
+struct vector30_c
+    : vector30<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 > 
+ >
+{
+    typedef vector30_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp
new file mode 100644
index 0000000..f6832d4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp
@@ -0,0 +1,2444 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector40.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30
+    >
+struct vector31
+{
+    typedef aux::vector_tag<31> tag;
+    typedef vector31 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    
+
+    typedef void_ item31;
+    typedef T30 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,31 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<30> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector31<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<31> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector30<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<30> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector31<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<31> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector30<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<31>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item31 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<31> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<31> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<31> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<31> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<31> >
+{
+    template< typename Vector > struct apply
+        : long_<31>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<31> >
+    : size_impl< aux::vector_tag<31> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<31> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31
+    >
+struct vector32
+{
+    typedef aux::vector_tag<32> tag;
+    typedef vector32 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    
+
+    typedef void_ item32;
+    typedef T31 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,32 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<31> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector32<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<32> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector31<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<31> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector32<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<32> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector31<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<32>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item32 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<32> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<32> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<32> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<32> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<32> >
+{
+    template< typename Vector > struct apply
+        : long_<32>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<32> >
+    : size_impl< aux::vector_tag<32> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<32> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32
+    >
+struct vector33
+{
+    typedef aux::vector_tag<33> tag;
+    typedef vector33 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    
+
+    typedef void_ item33;
+    typedef T32 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,33 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<32> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector33<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<33> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector32<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<32> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector33<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<33> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector32<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<33>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item33 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<33> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<33> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<33> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<33> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<33> >
+{
+    template< typename Vector > struct apply
+        : long_<33>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<33> >
+    : size_impl< aux::vector_tag<33> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<33> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33
+    >
+struct vector34
+{
+    typedef aux::vector_tag<34> tag;
+    typedef vector34 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    
+
+    typedef void_ item34;
+    typedef T33 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,34 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<33> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector34<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<34> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector33<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<33> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector34<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<34> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector33<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<34>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item34 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<34> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<34> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<34> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<34> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<34> >
+{
+    template< typename Vector > struct apply
+        : long_<34>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<34> >
+    : size_impl< aux::vector_tag<34> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<34> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    >
+struct vector35
+{
+    typedef aux::vector_tag<35> tag;
+    typedef vector35 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    
+
+    typedef void_ item35;
+    typedef T34 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,35 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<34> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector35<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<35> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector34<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<34> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector35<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<35> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector34<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<35>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item35 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<35> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<35> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<35> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<35> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<35> >
+{
+    template< typename Vector > struct apply
+        : long_<35>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<35> >
+    : size_impl< aux::vector_tag<35> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<35> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35
+    >
+struct vector36
+{
+    typedef aux::vector_tag<36> tag;
+    typedef vector36 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    
+
+    typedef void_ item36;
+    typedef T35 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,36 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<35> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector36<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<36> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector35<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<35> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector36<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<36> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector35<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<36>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item36 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<36> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<36> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<36> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<36> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<36> >
+{
+    template< typename Vector > struct apply
+        : long_<36>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<36> >
+    : size_impl< aux::vector_tag<36> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<36> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36
+    >
+struct vector37
+{
+    typedef aux::vector_tag<37> tag;
+    typedef vector37 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    
+
+    typedef void_ item37;
+    typedef T36 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,37 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<36> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector37<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<37> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector36<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<36> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector37<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<37> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector36<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<37>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item37 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<37> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<37> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<37> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<37> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<37> >
+{
+    template< typename Vector > struct apply
+        : long_<37>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<37> >
+    : size_impl< aux::vector_tag<37> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<37> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37
+    >
+struct vector38
+{
+    typedef aux::vector_tag<38> tag;
+    typedef vector38 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    
+
+    typedef void_ item38;
+    typedef T37 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,38 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<37> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector38<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<38> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector37<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<37> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector38<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<38> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector37<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<38>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item38 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<38> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<38> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<38> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<38> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<38> >
+{
+    template< typename Vector > struct apply
+        : long_<38>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<38> >
+    : size_impl< aux::vector_tag<38> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<38> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38
+    >
+struct vector39
+{
+    typedef aux::vector_tag<39> tag;
+    typedef vector39 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    
+
+    typedef void_ item39;
+    typedef T38 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,39 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<38> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector39<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<39> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector38<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<38> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector39<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<39> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector38<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<39>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item39 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<39> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<39> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<39> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<39> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<39> >
+{
+    template< typename Vector > struct apply
+        : long_<39>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<39> >
+    : size_impl< aux::vector_tag<39> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<39> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    >
+struct vector40
+{
+    typedef aux::vector_tag<40> tag;
+    typedef vector40 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    
+
+    typedef void_ item40;
+    typedef T39 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,40 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<39> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector40<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<40> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector39<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<39> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector40<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<40> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector39<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<40>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item40 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<40> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<40> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<40> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<40> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<40> >
+{
+    template< typename Vector > struct apply
+        : long_<40>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<40> >
+    : size_impl< aux::vector_tag<40> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<40> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp
new file mode 100644
index 0000000..35d610b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp
@@ -0,0 +1,281 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector40_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    >
+struct vector31_c
+    : vector31<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 > 
+ >
+{
+    typedef vector31_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31
+    >
+struct vector32_c
+    : vector32<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >, integral_c<T
+        , C31> 
+ >
+{
+    typedef vector32_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32
+    >
+struct vector33_c
+    : vector33<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 > 
+ >
+{
+    typedef vector33_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33
+    >
+struct vector34_c
+    : vector34<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 > 
+ >
+{
+    typedef vector34_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34
+    >
+struct vector35_c
+    : vector35<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >, integral_c<T
+        , C34> 
+ >
+{
+    typedef vector35_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35
+    >
+struct vector36_c
+    : vector36<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 > 
+ >
+{
+    typedef vector36_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36
+    >
+struct vector37_c
+    : vector37<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 > 
+ >
+{
+    typedef vector37_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37
+    >
+struct vector38_c
+    : vector38<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >, integral_c<T
+        , C37> 
+ >
+{
+    typedef vector38_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38
+    >
+struct vector39_c
+    : vector39<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 > 
+ >
+{
+    typedef vector39_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39
+    >
+struct vector40_c
+    : vector40<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 > 
+ >
+{
+    typedef vector40_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp
new file mode 100644
index 0000000..94a228b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp
@@ -0,0 +1,2764 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector50.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40
+    >
+struct vector41
+{
+    typedef aux::vector_tag<41> tag;
+    typedef vector41 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    
+
+    typedef void_ item41;
+    typedef T40 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,41 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<40> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector41<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<41> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector40<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<40> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector41<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<41> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector40<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<41>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item41 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<41> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<41> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<41> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<41> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<41> >
+{
+    template< typename Vector > struct apply
+        : long_<41>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<41> >
+    : size_impl< aux::vector_tag<41> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<41> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41
+    >
+struct vector42
+{
+    typedef aux::vector_tag<42> tag;
+    typedef vector42 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    
+
+    typedef void_ item42;
+    typedef T41 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,42 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<41> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector42<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<42> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector41<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<41> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector42<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<42> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector41<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<42>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item42 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<42> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<42> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<42> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<42> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<42> >
+{
+    template< typename Vector > struct apply
+        : long_<42>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<42> >
+    : size_impl< aux::vector_tag<42> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<42> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42
+    >
+struct vector43
+{
+    typedef aux::vector_tag<43> tag;
+    typedef vector43 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    
+
+    typedef void_ item43;
+    typedef T42 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,43 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<42> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector43<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<43> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector42<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<42> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector43<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<43> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector42<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<43>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item43 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<43> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<43> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<43> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<43> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<43> >
+{
+    template< typename Vector > struct apply
+        : long_<43>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<43> >
+    : size_impl< aux::vector_tag<43> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<43> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43
+    >
+struct vector44
+{
+    typedef aux::vector_tag<44> tag;
+    typedef vector44 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    typedef T43 item43;
+    
+
+    typedef void_ item44;
+    typedef T43 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,44 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<43> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector44<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<44> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector43<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            , typename Vector::item43
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<43> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector44<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<44> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector43<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<44>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item44 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<44> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<44> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<44> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<44> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<44> >
+{
+    template< typename Vector > struct apply
+        : long_<44>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<44> >
+    : size_impl< aux::vector_tag<44> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<44> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    >
+struct vector45
+{
+    typedef aux::vector_tag<45> tag;
+    typedef vector45 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    typedef T43 item43;
+    typedef T44 item44;
+    
+
+    typedef void_ item45;
+    typedef T44 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,45 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<44> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector45<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<45> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector44<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            , typename Vector::item43, typename Vector::item44
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<44> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector45<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<45> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector44<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<45>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item45 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<45> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<45> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<45> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<45> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<45> >
+{
+    template< typename Vector > struct apply
+        : long_<45>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<45> >
+    : size_impl< aux::vector_tag<45> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<45> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45
+    >
+struct vector46
+{
+    typedef aux::vector_tag<46> tag;
+    typedef vector46 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    typedef T43 item43;
+    typedef T44 item44;
+    typedef T45 item45;
+    
+
+    typedef void_ item46;
+    typedef T45 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,46 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<45> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector46<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<46> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector45<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            , typename Vector::item43, typename Vector::item44
+            , typename Vector::item45
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<45> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector46<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<46> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector45<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<46>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item46 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<46> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<46> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<46> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<46> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<46> >
+{
+    template< typename Vector > struct apply
+        : long_<46>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<46> >
+    : size_impl< aux::vector_tag<46> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<46> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46
+    >
+struct vector47
+{
+    typedef aux::vector_tag<47> tag;
+    typedef vector47 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    typedef T43 item43;
+    typedef T44 item44;
+    typedef T45 item45;
+    typedef T46 item46;
+    
+
+    typedef void_ item47;
+    typedef T46 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,47 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<46> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector47<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<47> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector46<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            , typename Vector::item43, typename Vector::item44
+            , typename Vector::item45, typename Vector::item46
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<46> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector47<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<47> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector46<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<47>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item47 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<47> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<47> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<47> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<47> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<47> >
+{
+    template< typename Vector > struct apply
+        : long_<47>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<47> >
+    : size_impl< aux::vector_tag<47> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<47> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46, typename T47
+    >
+struct vector48
+{
+    typedef aux::vector_tag<48> tag;
+    typedef vector48 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    typedef T43 item43;
+    typedef T44 item44;
+    typedef T45 item45;
+    typedef T46 item46;
+    typedef T47 item47;
+    
+
+    typedef void_ item48;
+    typedef T47 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,48 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<47> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector48<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<48> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector47<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            , typename Vector::item43, typename Vector::item44
+            , typename Vector::item45, typename Vector::item46
+            , typename Vector::item47
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<47> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector48<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<48> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector47<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<48>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item48 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<48> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<48> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<48> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<48> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<48> >
+{
+    template< typename Vector > struct apply
+        : long_<48>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<48> >
+    : size_impl< aux::vector_tag<48> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<48> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46, typename T47, typename T48
+    >
+struct vector49
+{
+    typedef aux::vector_tag<49> tag;
+    typedef vector49 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    typedef T43 item43;
+    typedef T44 item44;
+    typedef T45 item45;
+    typedef T46 item46;
+    typedef T47 item47;
+    typedef T48 item48;
+    
+
+    typedef void_ item49;
+    typedef T48 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,49 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<48> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector49<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46, typename Vector::item47
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<49> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector48<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            , typename Vector::item43, typename Vector::item44
+            , typename Vector::item45, typename Vector::item46
+            , typename Vector::item47, typename Vector::item48
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<48> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector49<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46, typename Vector::item47
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<49> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector48<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46, typename Vector::item47
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<49>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item49 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<49> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<49> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<49> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<49> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<49> >
+{
+    template< typename Vector > struct apply
+        : long_<49>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<49> >
+    : size_impl< aux::vector_tag<49> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<49> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46, typename T47, typename T48, typename T49
+    >
+struct vector50
+{
+    typedef aux::vector_tag<50> tag;
+    typedef vector50 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    typedef T43 item43;
+    typedef T44 item44;
+    typedef T45 item45;
+    typedef T46 item46;
+    typedef T47 item47;
+    typedef T48 item48;
+    typedef T49 item49;
+    
+
+    typedef void_ item50;
+    typedef T49 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,50 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<49> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector50<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46, typename Vector::item47
+            , typename Vector::item48
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<50> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector49<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            , typename Vector::item43, typename Vector::item44
+            , typename Vector::item45, typename Vector::item46
+            , typename Vector::item47, typename Vector::item48
+            , typename Vector::item49
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<49> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector50<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46, typename Vector::item47
+            , typename Vector::item48
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<50> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector49<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46, typename Vector::item47
+            , typename Vector::item48
+            > type;
+    };
+};
+
+namespace aux {
+template<> struct v_at_impl<50>
+{
+    template< typename V_ > struct result_
+    {
+        typedef typename V_::item50 type;
+    };
+};
+
+}
+
+template<>
+struct at_impl< aux::vector_tag<50> >
+{
+    template< typename V_, typename N > struct apply
+    {
+        typedef typename aux::v_at_impl<BOOST_MPL_AUX_VALUE_WKND(N)::value>
+            ::template result_<V_>::type type;
+    };
+};
+
+template<>
+struct front_impl< aux::vector_tag<50> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::item0 type;
+    };
+};
+
+template<>
+struct back_impl< aux::vector_tag<50> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef typename Vector::back type;
+    };
+};
+
+template<>
+struct empty_impl< aux::vector_tag<50> >
+{
+    template< typename Vector > struct apply
+        : false_
+    {
+    };
+};
+
+template<>
+struct size_impl< aux::vector_tag<50> >
+{
+    template< typename Vector > struct apply
+        : long_<50>
+    {
+    };
+};
+
+template<>
+struct O1_size_impl< aux::vector_tag<50> >
+    : size_impl< aux::vector_tag<50> >
+{
+};
+
+template<>
+struct clear_impl< aux::vector_tag<50> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<> type;
+    };
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp
new file mode 100644
index 0000000..d27cb61
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp
@@ -0,0 +1,325 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector50_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    >
+struct vector41_c
+    : vector41<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >, integral_c<T
+        , C40> 
+ >
+{
+    typedef vector41_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41
+    >
+struct vector42_c
+    : vector42<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 > 
+ >
+{
+    typedef vector42_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42
+    >
+struct vector43_c
+    : vector43<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 > 
+ >
+{
+    typedef vector43_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43
+    >
+struct vector44_c
+    : vector44<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >, integral_c<T
+        , C43> 
+ >
+{
+    typedef vector44_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44
+    >
+struct vector45_c
+    : vector45<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+        , integral_c< T,C43 >, integral_c< T,C44 > 
+ >
+{
+    typedef vector45_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45
+    >
+struct vector46_c
+    : vector46<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 > 
+ >
+{
+    typedef vector46_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46
+    >
+struct vector47_c
+    : vector47<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >, integral_c<T
+        , C46> 
+ >
+{
+    typedef vector47_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46, T C47
+    >
+struct vector48_c
+    : vector48<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >
+        , integral_c< T,C46 >, integral_c< T,C47 > 
+ >
+{
+    typedef vector48_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48
+    >
+struct vector49_c
+    : vector49<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >
+        , integral_c< T,C46 >, integral_c< T,C47 >, integral_c< T,C48 > 
+ >
+{
+    typedef vector49_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48, T C49
+    >
+struct vector50_c
+    : vector50<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >
+        , integral_c< T,C46 >, integral_c< T,C47 >, integral_c< T,C48 >, integral_c<T
+        , C49> 
+ >
+{
+    typedef vector50_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp
new file mode 100644
index 0000000..9e46869
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp
@@ -0,0 +1,829 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector10.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template< typename V >
+struct v_at< V,0 >
+{
+    typedef typename V::item0 type;
+};
+
+template<
+      typename T0
+    >
+struct vector1
+{
+    typedef aux::vector_tag<1> tag;
+    typedef vector1 type;
+    typedef T0 item0;
+    typedef void_ item1;
+    typedef T0 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,1 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<0> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector1<
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<1> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<
+             
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<0> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector1<
+             
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<1> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector0<
+             
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,1 >
+{
+    typedef typename V::item1 type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct vector2
+{
+    typedef aux::vector_tag<2> tag;
+    typedef vector2 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    
+
+    typedef void_ item2;
+    typedef T1 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,2 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<1> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector2<
+              T
+              ,
+              typename Vector::item0
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<2> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector1<
+              typename Vector::item1
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<1> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector2<
+              typename Vector::item0
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<2> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector1<
+              typename Vector::item0
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,2 >
+{
+    typedef typename V::item2 type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct vector3
+{
+    typedef aux::vector_tag<3> tag;
+    typedef vector3 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    
+
+    typedef void_ item3;
+    typedef T2 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,3 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<2> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector3<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<3> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector2<
+              typename Vector::item1, typename Vector::item2
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<2> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector3<
+              typename Vector::item0, typename Vector::item1
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<3> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector2<
+              typename Vector::item0, typename Vector::item1
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,3 >
+{
+    typedef typename V::item3 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct vector4
+{
+    typedef aux::vector_tag<4> tag;
+    typedef vector4 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    
+
+    typedef void_ item4;
+    typedef T3 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,4 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<3> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector4<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<4> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector3<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<3> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector4<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<4> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector3<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,4 >
+{
+    typedef typename V::item4 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct vector5
+{
+    typedef aux::vector_tag<5> tag;
+    typedef vector5 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    
+
+    typedef void_ item5;
+    typedef T4 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,5 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<4> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector5<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<5> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector4<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<4> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector5<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<5> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector4<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,5 >
+{
+    typedef typename V::item5 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct vector6
+{
+    typedef aux::vector_tag<6> tag;
+    typedef vector6 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    
+
+    typedef void_ item6;
+    typedef T5 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,6 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<5> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector6<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<6> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector5<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<5> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector6<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<6> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector5<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,6 >
+{
+    typedef typename V::item6 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct vector7
+{
+    typedef aux::vector_tag<7> tag;
+    typedef vector7 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    
+
+    typedef void_ item7;
+    typedef T6 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,7 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<6> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector7<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<7> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector6<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<6> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector7<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<7> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector6<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,7 >
+{
+    typedef typename V::item7 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct vector8
+{
+    typedef aux::vector_tag<8> tag;
+    typedef vector8 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    
+
+    typedef void_ item8;
+    typedef T7 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,8 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<7> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector8<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<8> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector7<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<7> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector8<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<8> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector7<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,8 >
+{
+    typedef typename V::item8 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct vector9
+{
+    typedef aux::vector_tag<9> tag;
+    typedef vector9 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    
+
+    typedef void_ item9;
+    typedef T8 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,9 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<8> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector9<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<9> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector8<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<8> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector9<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<9> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector8<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,9 >
+{
+    typedef typename V::item9 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct vector10
+{
+    typedef aux::vector_tag<10> tag;
+    typedef vector10 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    
+
+    typedef void_ item10;
+    typedef T9 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,10 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<9> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector10<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<10> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector9<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<9> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector10<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<10> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector9<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,10 >
+{
+    typedef typename V::item10 type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp
new file mode 100644
index 0000000..c4b9796
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp
@@ -0,0 +1,149 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector10_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0
+    >
+struct vector1_c
+    : vector1< integral_c< T,C0 > >
+{
+    typedef vector1_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1
+    >
+struct vector2_c
+    : vector2< integral_c< T,C0 >, integral_c< T,C1 > >
+{
+    typedef vector2_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2
+    >
+struct vector3_c
+    : vector3< integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 > >
+{
+    typedef vector3_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3
+    >
+struct vector4_c
+    : vector4<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >, integral_c<T
+        , C3> 
+ >
+{
+    typedef vector4_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4
+    >
+struct vector5_c
+    : vector5<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 > 
+ >
+{
+    typedef vector5_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5
+    >
+struct vector6_c
+    : vector6<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 > 
+ >
+{
+    typedef vector6_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6
+    >
+struct vector7_c
+    : vector7<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c<T
+        , C6> 
+ >
+{
+    typedef vector7_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7
+    >
+struct vector8_c
+    : vector8<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 > 
+ >
+{
+    typedef vector8_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8
+    >
+struct vector9_c
+    : vector9<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 > 
+ >
+{
+    typedef vector9_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9
+    >
+struct vector10_c
+    : vector10<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 > 
+ >
+{
+    typedef vector10_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp
new file mode 100644
index 0000000..f526ae3
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp
@@ -0,0 +1,1144 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector20.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct vector11
+{
+    typedef aux::vector_tag<11> tag;
+    typedef vector11 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    
+
+    typedef void_ item11;
+    typedef T10 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,11 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<10> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector11<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<11> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector10<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<10> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector11<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<11> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector10<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,11 >
+{
+    typedef typename V::item11 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct vector12
+{
+    typedef aux::vector_tag<12> tag;
+    typedef vector12 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    
+
+    typedef void_ item12;
+    typedef T11 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,12 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<11> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector12<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<12> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector11<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<11> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector12<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<12> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector11<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,12 >
+{
+    typedef typename V::item12 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct vector13
+{
+    typedef aux::vector_tag<13> tag;
+    typedef vector13 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    
+
+    typedef void_ item13;
+    typedef T12 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,13 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<12> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector13<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<13> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector12<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<12> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector13<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<13> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector12<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,13 >
+{
+    typedef typename V::item13 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct vector14
+{
+    typedef aux::vector_tag<14> tag;
+    typedef vector14 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    
+
+    typedef void_ item14;
+    typedef T13 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,14 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<13> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector14<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<14> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector13<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<13> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector14<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<14> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector13<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,14 >
+{
+    typedef typename V::item14 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct vector15
+{
+    typedef aux::vector_tag<15> tag;
+    typedef vector15 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    
+
+    typedef void_ item15;
+    typedef T14 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,15 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<14> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector15<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<15> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector14<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<14> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector15<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<15> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector14<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,15 >
+{
+    typedef typename V::item15 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct vector16
+{
+    typedef aux::vector_tag<16> tag;
+    typedef vector16 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    
+
+    typedef void_ item16;
+    typedef T15 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,16 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<15> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector16<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<16> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector15<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<15> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector16<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<16> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector15<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,16 >
+{
+    typedef typename V::item16 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct vector17
+{
+    typedef aux::vector_tag<17> tag;
+    typedef vector17 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    
+
+    typedef void_ item17;
+    typedef T16 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,17 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<16> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector17<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<17> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector16<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<16> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector17<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<17> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector16<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,17 >
+{
+    typedef typename V::item17 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct vector18
+{
+    typedef aux::vector_tag<18> tag;
+    typedef vector18 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    
+
+    typedef void_ item18;
+    typedef T17 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,18 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<17> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector18<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<18> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector17<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<17> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector18<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<18> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector17<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,18 >
+{
+    typedef typename V::item18 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct vector19
+{
+    typedef aux::vector_tag<19> tag;
+    typedef vector19 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    
+
+    typedef void_ item19;
+    typedef T18 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,19 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<18> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector19<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<19> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector18<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<18> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector19<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<19> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector18<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,19 >
+{
+    typedef typename V::item19 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct vector20
+{
+    typedef aux::vector_tag<20> tag;
+    typedef vector20 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    
+
+    typedef void_ item20;
+    typedef T19 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,20 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<19> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector20<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<20> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector19<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<19> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector20<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<20> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector19<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,20 >
+{
+    typedef typename V::item20 type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp
new file mode 100644
index 0000000..b7f748e
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp
@@ -0,0 +1,195 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector20_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    >
+struct vector11_c
+    : vector11<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >, integral_c<T
+        , C10> 
+ >
+{
+    typedef vector11_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11
+    >
+struct vector12_c
+    : vector12<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 > 
+ >
+{
+    typedef vector12_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12
+    >
+struct vector13_c
+    : vector13<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 > 
+ >
+{
+    typedef vector13_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13
+    >
+struct vector14_c
+    : vector14<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >, integral_c<T
+        , C13> 
+ >
+{
+    typedef vector14_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14
+    >
+struct vector15_c
+    : vector15<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 > 
+ >
+{
+    typedef vector15_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15
+    >
+struct vector16_c
+    : vector16<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 > 
+ >
+{
+    typedef vector16_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16
+    >
+struct vector17_c
+    : vector17<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >, integral_c<T
+        , C16> 
+ >
+{
+    typedef vector17_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17
+    >
+struct vector18_c
+    : vector18<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 > 
+ >
+{
+    typedef vector18_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18
+    >
+struct vector19_c
+    : vector19<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 > 
+ >
+{
+    typedef vector19_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19
+    >
+struct vector20_c
+    : vector20<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >, integral_c<T
+        , C19> 
+ >
+{
+    typedef vector20_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp
new file mode 100644
index 0000000..6dbc814
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp
@@ -0,0 +1,1464 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector30.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20
+    >
+struct vector21
+{
+    typedef aux::vector_tag<21> tag;
+    typedef vector21 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    
+
+    typedef void_ item21;
+    typedef T20 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,21 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<20> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector21<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<21> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector20<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<20> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector21<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<21> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector20<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,21 >
+{
+    typedef typename V::item21 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21
+    >
+struct vector22
+{
+    typedef aux::vector_tag<22> tag;
+    typedef vector22 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    
+
+    typedef void_ item22;
+    typedef T21 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,22 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<21> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector22<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<22> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector21<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<21> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector22<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<22> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector21<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,22 >
+{
+    typedef typename V::item22 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22
+    >
+struct vector23
+{
+    typedef aux::vector_tag<23> tag;
+    typedef vector23 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    
+
+    typedef void_ item23;
+    typedef T22 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,23 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<22> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector23<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<23> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector22<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<22> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector23<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<23> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector22<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,23 >
+{
+    typedef typename V::item23 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23
+    >
+struct vector24
+{
+    typedef aux::vector_tag<24> tag;
+    typedef vector24 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    
+
+    typedef void_ item24;
+    typedef T23 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,24 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<23> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector24<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<24> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector23<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<23> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector24<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<24> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector23<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,24 >
+{
+    typedef typename V::item24 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    >
+struct vector25
+{
+    typedef aux::vector_tag<25> tag;
+    typedef vector25 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    
+
+    typedef void_ item25;
+    typedef T24 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,25 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<24> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector25<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<25> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector24<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<24> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector25<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<25> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector24<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,25 >
+{
+    typedef typename V::item25 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25
+    >
+struct vector26
+{
+    typedef aux::vector_tag<26> tag;
+    typedef vector26 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    
+
+    typedef void_ item26;
+    typedef T25 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,26 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<25> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector26<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<26> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector25<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<25> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector26<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<26> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector25<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,26 >
+{
+    typedef typename V::item26 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26
+    >
+struct vector27
+{
+    typedef aux::vector_tag<27> tag;
+    typedef vector27 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    
+
+    typedef void_ item27;
+    typedef T26 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,27 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<26> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector27<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<27> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector26<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<26> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector27<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<27> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector26<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,27 >
+{
+    typedef typename V::item27 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27
+    >
+struct vector28
+{
+    typedef aux::vector_tag<28> tag;
+    typedef vector28 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    
+
+    typedef void_ item28;
+    typedef T27 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,28 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<27> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector28<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<28> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector27<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<27> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector28<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<28> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector27<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,28 >
+{
+    typedef typename V::item28 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28
+    >
+struct vector29
+{
+    typedef aux::vector_tag<29> tag;
+    typedef vector29 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    
+
+    typedef void_ item29;
+    typedef T28 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,29 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<28> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector29<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<29> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector28<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<28> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector29<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<29> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector28<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,29 >
+{
+    typedef typename V::item29 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    >
+struct vector30
+{
+    typedef aux::vector_tag<30> tag;
+    typedef vector30 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    
+
+    typedef void_ item30;
+    typedef T29 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,30 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<29> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector30<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<30> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector29<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<29> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector30<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<30> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector29<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,30 >
+{
+    typedef typename V::item30 type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp
new file mode 100644
index 0000000..7b23502
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp
@@ -0,0 +1,238 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector30_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    >
+struct vector21_c
+    : vector21<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 > 
+ >
+{
+    typedef vector21_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21
+    >
+struct vector22_c
+    : vector22<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 > 
+ >
+{
+    typedef vector22_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22
+    >
+struct vector23_c
+    : vector23<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >, integral_c<T
+        , C22> 
+ >
+{
+    typedef vector23_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23
+    >
+struct vector24_c
+    : vector24<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 > 
+ >
+{
+    typedef vector24_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24
+    >
+struct vector25_c
+    : vector25<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 > 
+ >
+{
+    typedef vector25_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25
+    >
+struct vector26_c
+    : vector26<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >, integral_c<T
+        , C25> 
+ >
+{
+    typedef vector26_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26
+    >
+struct vector27_c
+    : vector27<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 > 
+ >
+{
+    typedef vector27_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27
+    >
+struct vector28_c
+    : vector28<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 > 
+ >
+{
+    typedef vector28_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28
+    >
+struct vector29_c
+    : vector29<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >, integral_c<T
+        , C28> 
+ >
+{
+    typedef vector29_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29
+    >
+struct vector30_c
+    : vector30<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 > 
+ >
+{
+    typedef vector30_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp
new file mode 100644
index 0000000..f4e3288
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp
@@ -0,0 +1,1784 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector40.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30
+    >
+struct vector31
+{
+    typedef aux::vector_tag<31> tag;
+    typedef vector31 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    
+
+    typedef void_ item31;
+    typedef T30 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,31 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<30> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector31<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<31> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector30<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<30> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector31<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<31> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector30<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,31 >
+{
+    typedef typename V::item31 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31
+    >
+struct vector32
+{
+    typedef aux::vector_tag<32> tag;
+    typedef vector32 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    
+
+    typedef void_ item32;
+    typedef T31 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,32 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<31> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector32<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<32> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector31<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<31> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector32<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<32> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector31<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,32 >
+{
+    typedef typename V::item32 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32
+    >
+struct vector33
+{
+    typedef aux::vector_tag<33> tag;
+    typedef vector33 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    
+
+    typedef void_ item33;
+    typedef T32 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,33 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<32> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector33<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<33> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector32<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<32> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector33<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<33> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector32<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,33 >
+{
+    typedef typename V::item33 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33
+    >
+struct vector34
+{
+    typedef aux::vector_tag<34> tag;
+    typedef vector34 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    
+
+    typedef void_ item34;
+    typedef T33 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,34 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<33> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector34<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<34> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector33<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<33> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector34<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<34> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector33<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,34 >
+{
+    typedef typename V::item34 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    >
+struct vector35
+{
+    typedef aux::vector_tag<35> tag;
+    typedef vector35 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    
+
+    typedef void_ item35;
+    typedef T34 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,35 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<34> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector35<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<35> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector34<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<34> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector35<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<35> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector34<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,35 >
+{
+    typedef typename V::item35 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35
+    >
+struct vector36
+{
+    typedef aux::vector_tag<36> tag;
+    typedef vector36 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    
+
+    typedef void_ item36;
+    typedef T35 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,36 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<35> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector36<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<36> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector35<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<35> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector36<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<36> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector35<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,36 >
+{
+    typedef typename V::item36 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36
+    >
+struct vector37
+{
+    typedef aux::vector_tag<37> tag;
+    typedef vector37 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    
+
+    typedef void_ item37;
+    typedef T36 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,37 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<36> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector37<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<37> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector36<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<36> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector37<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<37> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector36<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,37 >
+{
+    typedef typename V::item37 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37
+    >
+struct vector38
+{
+    typedef aux::vector_tag<38> tag;
+    typedef vector38 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    
+
+    typedef void_ item38;
+    typedef T37 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,38 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<37> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector38<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<38> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector37<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<37> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector38<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<38> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector37<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,38 >
+{
+    typedef typename V::item38 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38
+    >
+struct vector39
+{
+    typedef aux::vector_tag<39> tag;
+    typedef vector39 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    
+
+    typedef void_ item39;
+    typedef T38 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,39 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<38> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector39<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<39> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector38<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<38> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector39<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<39> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector38<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,39 >
+{
+    typedef typename V::item39 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    >
+struct vector40
+{
+    typedef aux::vector_tag<40> tag;
+    typedef vector40 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    
+
+    typedef void_ item40;
+    typedef T39 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,40 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<39> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector40<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<40> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector39<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<39> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector40<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<40> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector39<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,40 >
+{
+    typedef typename V::item40 type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp
new file mode 100644
index 0000000..35d610b
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp
@@ -0,0 +1,281 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector40_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    >
+struct vector31_c
+    : vector31<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 > 
+ >
+{
+    typedef vector31_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31
+    >
+struct vector32_c
+    : vector32<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >, integral_c<T
+        , C31> 
+ >
+{
+    typedef vector32_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32
+    >
+struct vector33_c
+    : vector33<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 > 
+ >
+{
+    typedef vector33_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33
+    >
+struct vector34_c
+    : vector34<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 > 
+ >
+{
+    typedef vector34_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34
+    >
+struct vector35_c
+    : vector35<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >, integral_c<T
+        , C34> 
+ >
+{
+    typedef vector35_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35
+    >
+struct vector36_c
+    : vector36<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 > 
+ >
+{
+    typedef vector36_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36
+    >
+struct vector37_c
+    : vector37<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 > 
+ >
+{
+    typedef vector37_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37
+    >
+struct vector38_c
+    : vector38<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >, integral_c<T
+        , C37> 
+ >
+{
+    typedef vector38_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38
+    >
+struct vector39_c
+    : vector39<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 > 
+ >
+{
+    typedef vector39_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39
+    >
+struct vector40_c
+    : vector40<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 > 
+ >
+{
+    typedef vector40_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp
new file mode 100644
index 0000000..61554ce
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp
@@ -0,0 +1,2104 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector50.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40
+    >
+struct vector41
+{
+    typedef aux::vector_tag<41> tag;
+    typedef vector41 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    
+
+    typedef void_ item41;
+    typedef T40 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,41 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<40> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector41<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<41> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector40<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<40> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector41<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<41> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector40<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,41 >
+{
+    typedef typename V::item41 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41
+    >
+struct vector42
+{
+    typedef aux::vector_tag<42> tag;
+    typedef vector42 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    
+
+    typedef void_ item42;
+    typedef T41 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,42 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<41> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector42<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<42> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector41<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<41> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector42<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<42> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector41<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,42 >
+{
+    typedef typename V::item42 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42
+    >
+struct vector43
+{
+    typedef aux::vector_tag<43> tag;
+    typedef vector43 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    
+
+    typedef void_ item43;
+    typedef T42 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,43 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<42> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector43<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<43> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector42<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<42> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector43<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<43> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector42<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,43 >
+{
+    typedef typename V::item43 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43
+    >
+struct vector44
+{
+    typedef aux::vector_tag<44> tag;
+    typedef vector44 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    typedef T43 item43;
+    
+
+    typedef void_ item44;
+    typedef T43 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,44 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<43> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector44<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<44> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector43<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            , typename Vector::item43
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<43> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector44<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<44> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector43<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,44 >
+{
+    typedef typename V::item44 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    >
+struct vector45
+{
+    typedef aux::vector_tag<45> tag;
+    typedef vector45 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    typedef T43 item43;
+    typedef T44 item44;
+    
+
+    typedef void_ item45;
+    typedef T44 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,45 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<44> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector45<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<45> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector44<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            , typename Vector::item43, typename Vector::item44
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<44> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector45<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<45> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector44<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,45 >
+{
+    typedef typename V::item45 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45
+    >
+struct vector46
+{
+    typedef aux::vector_tag<46> tag;
+    typedef vector46 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    typedef T43 item43;
+    typedef T44 item44;
+    typedef T45 item45;
+    
+
+    typedef void_ item46;
+    typedef T45 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,46 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<45> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector46<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<46> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector45<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            , typename Vector::item43, typename Vector::item44
+            , typename Vector::item45
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<45> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector46<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<46> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector45<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,46 >
+{
+    typedef typename V::item46 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46
+    >
+struct vector47
+{
+    typedef aux::vector_tag<47> tag;
+    typedef vector47 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    typedef T43 item43;
+    typedef T44 item44;
+    typedef T45 item45;
+    typedef T46 item46;
+    
+
+    typedef void_ item47;
+    typedef T46 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,47 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<46> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector47<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<47> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector46<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            , typename Vector::item43, typename Vector::item44
+            , typename Vector::item45, typename Vector::item46
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<46> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector47<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<47> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector46<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,47 >
+{
+    typedef typename V::item47 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46, typename T47
+    >
+struct vector48
+{
+    typedef aux::vector_tag<48> tag;
+    typedef vector48 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    typedef T43 item43;
+    typedef T44 item44;
+    typedef T45 item45;
+    typedef T46 item46;
+    typedef T47 item47;
+    
+
+    typedef void_ item48;
+    typedef T47 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,48 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<47> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector48<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<48> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector47<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            , typename Vector::item43, typename Vector::item44
+            , typename Vector::item45, typename Vector::item46
+            , typename Vector::item47
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<47> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector48<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<48> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector47<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,48 >
+{
+    typedef typename V::item48 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46, typename T47, typename T48
+    >
+struct vector49
+{
+    typedef aux::vector_tag<49> tag;
+    typedef vector49 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    typedef T43 item43;
+    typedef T44 item44;
+    typedef T45 item45;
+    typedef T46 item46;
+    typedef T47 item47;
+    typedef T48 item48;
+    
+
+    typedef void_ item49;
+    typedef T48 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,49 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<48> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector49<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46, typename Vector::item47
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<49> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector48<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            , typename Vector::item43, typename Vector::item44
+            , typename Vector::item45, typename Vector::item46
+            , typename Vector::item47, typename Vector::item48
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<48> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector49<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46, typename Vector::item47
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<49> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector48<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46, typename Vector::item47
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,49 >
+{
+    typedef typename V::item49 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46, typename T47, typename T48, typename T49
+    >
+struct vector50
+{
+    typedef aux::vector_tag<50> tag;
+    typedef vector50 type;
+    typedef T0 item0;
+    typedef T1 item1;
+    typedef T2 item2;
+    typedef T3 item3;
+    typedef T4 item4;
+    typedef T5 item5;
+    typedef T6 item6;
+    typedef T7 item7;
+    typedef T8 item8;
+    typedef T9 item9;
+    typedef T10 item10;
+    typedef T11 item11;
+    typedef T12 item12;
+    typedef T13 item13;
+    typedef T14 item14;
+    typedef T15 item15;
+    typedef T16 item16;
+    typedef T17 item17;
+    typedef T18 item18;
+    typedef T19 item19;
+    typedef T20 item20;
+    typedef T21 item21;
+    typedef T22 item22;
+    typedef T23 item23;
+    typedef T24 item24;
+    typedef T25 item25;
+    typedef T26 item26;
+    typedef T27 item27;
+    typedef T28 item28;
+    typedef T29 item29;
+    typedef T30 item30;
+    typedef T31 item31;
+    typedef T32 item32;
+    typedef T33 item33;
+    typedef T34 item34;
+    typedef T35 item35;
+    typedef T36 item36;
+    typedef T37 item37;
+    typedef T38 item38;
+    typedef T39 item39;
+    typedef T40 item40;
+    typedef T41 item41;
+    typedef T42 item42;
+    typedef T43 item43;
+    typedef T44 item44;
+    typedef T45 item45;
+    typedef T46 item46;
+    typedef T47 item47;
+    typedef T48 item48;
+    typedef T49 item49;
+    
+
+    typedef void_ item50;
+    typedef T49 back;
+    typedef v_iter< type,0 > begin;
+    typedef v_iter< type,50 > end;
+};
+
+template<>
+struct push_front_impl< aux::vector_tag<49> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector50<
+              T
+              ,
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46, typename Vector::item47
+            , typename Vector::item48
+            > type;
+    };
+};
+
+template<>
+struct pop_front_impl< aux::vector_tag<50> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector49<
+              typename Vector::item1, typename Vector::item2
+            , typename Vector::item3, typename Vector::item4
+            , typename Vector::item5, typename Vector::item6
+            , typename Vector::item7, typename Vector::item8
+            , typename Vector::item9, typename Vector::item10
+            , typename Vector::item11, typename Vector::item12
+            , typename Vector::item13, typename Vector::item14
+            , typename Vector::item15, typename Vector::item16
+            , typename Vector::item17, typename Vector::item18
+            , typename Vector::item19, typename Vector::item20
+            , typename Vector::item21, typename Vector::item22
+            , typename Vector::item23, typename Vector::item24
+            , typename Vector::item25, typename Vector::item26
+            , typename Vector::item27, typename Vector::item28
+            , typename Vector::item29, typename Vector::item30
+            , typename Vector::item31, typename Vector::item32
+            , typename Vector::item33, typename Vector::item34
+            , typename Vector::item35, typename Vector::item36
+            , typename Vector::item37, typename Vector::item38
+            , typename Vector::item39, typename Vector::item40
+            , typename Vector::item41, typename Vector::item42
+            , typename Vector::item43, typename Vector::item44
+            , typename Vector::item45, typename Vector::item46
+            , typename Vector::item47, typename Vector::item48
+            , typename Vector::item49
+            > type;
+    };
+};
+
+template<>
+struct push_back_impl< aux::vector_tag<49> >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef vector50<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46, typename Vector::item47
+            , typename Vector::item48
+              ,
+              T
+            > type;
+    };
+};
+
+template<>
+struct pop_back_impl< aux::vector_tag<50> >
+{
+    template< typename Vector > struct apply
+    {
+        typedef vector49<
+              typename Vector::item0, typename Vector::item1
+            , typename Vector::item2, typename Vector::item3
+            , typename Vector::item4, typename Vector::item5
+            , typename Vector::item6, typename Vector::item7
+            , typename Vector::item8, typename Vector::item9
+            , typename Vector::item10, typename Vector::item11
+            , typename Vector::item12, typename Vector::item13
+            , typename Vector::item14, typename Vector::item15
+            , typename Vector::item16, typename Vector::item17
+            , typename Vector::item18, typename Vector::item19
+            , typename Vector::item20, typename Vector::item21
+            , typename Vector::item22, typename Vector::item23
+            , typename Vector::item24, typename Vector::item25
+            , typename Vector::item26, typename Vector::item27
+            , typename Vector::item28, typename Vector::item29
+            , typename Vector::item30, typename Vector::item31
+            , typename Vector::item32, typename Vector::item33
+            , typename Vector::item34, typename Vector::item35
+            , typename Vector::item36, typename Vector::item37
+            , typename Vector::item38, typename Vector::item39
+            , typename Vector::item40, typename Vector::item41
+            , typename Vector::item42, typename Vector::item43
+            , typename Vector::item44, typename Vector::item45
+            , typename Vector::item46, typename Vector::item47
+            , typename Vector::item48
+            > type;
+    };
+};
+
+template< typename V >
+struct v_at< V,50 >
+{
+    typedef typename V::item50 type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp
new file mode 100644
index 0000000..d27cb61
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp
@@ -0,0 +1,325 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector50_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    >
+struct vector41_c
+    : vector41<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >, integral_c<T
+        , C40> 
+ >
+{
+    typedef vector41_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41
+    >
+struct vector42_c
+    : vector42<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 > 
+ >
+{
+    typedef vector42_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42
+    >
+struct vector43_c
+    : vector43<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 > 
+ >
+{
+    typedef vector43_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43
+    >
+struct vector44_c
+    : vector44<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >, integral_c<T
+        , C43> 
+ >
+{
+    typedef vector44_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44
+    >
+struct vector45_c
+    : vector45<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+        , integral_c< T,C43 >, integral_c< T,C44 > 
+ >
+{
+    typedef vector45_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45
+    >
+struct vector46_c
+    : vector46<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 > 
+ >
+{
+    typedef vector46_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46
+    >
+struct vector47_c
+    : vector47<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >, integral_c<T
+        , C46> 
+ >
+{
+    typedef vector47_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46, T C47
+    >
+struct vector48_c
+    : vector48<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >
+        , integral_c< T,C46 >, integral_c< T,C47 > 
+ >
+{
+    typedef vector48_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48
+    >
+struct vector49_c
+    : vector49<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >
+        , integral_c< T,C46 >, integral_c< T,C47 >, integral_c< T,C48 > 
+ >
+{
+    typedef vector49_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48, T C49
+    >
+struct vector50_c
+    : vector50<
+          integral_c< T,C0 >, integral_c< T,C1 >, integral_c< T,C2 >
+        , integral_c< T,C3 >, integral_c< T,C4 >, integral_c< T,C5 >, integral_c< T,C6 >
+        , integral_c< T,C7 >, integral_c< T,C8 >, integral_c< T,C9 >
+        , integral_c< T,C10 >, integral_c< T,C11 >, integral_c< T,C12 >
+        , integral_c< T,C13 >, integral_c< T,C14 >, integral_c< T,C15 >
+        , integral_c< T,C16 >, integral_c< T,C17 >, integral_c< T,C18 >
+        , integral_c< T,C19 >, integral_c< T,C20 >, integral_c< T,C21 >
+        , integral_c< T,C22 >, integral_c< T,C23 >, integral_c< T,C24 >
+        , integral_c< T,C25 >, integral_c< T,C26 >, integral_c< T,C27 >
+        , integral_c< T,C28 >, integral_c< T,C29 >, integral_c< T,C30 >
+        , integral_c< T,C31 >, integral_c< T,C32 >, integral_c< T,C33 >
+        , integral_c< T,C34 >, integral_c< T,C35 >, integral_c< T,C36 >
+        , integral_c< T,C37 >, integral_c< T,C38 >, integral_c< T,C39 >
+        , integral_c< T,C40 >, integral_c< T,C41 >, integral_c< T,C42 >
+        , integral_c< T,C43 >, integral_c< T,C44 >, integral_c< T,C45 >
+        , integral_c< T,C46 >, integral_c< T,C47 >, integral_c< T,C48 >, integral_c<T
+        , C49> 
+ >
+{
+    typedef vector50_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp
new file mode 100644
index 0000000..20964f0
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp
@@ -0,0 +1,139 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector10.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0
+    >
+struct vector1
+    : v_item<
+          T0
+        , vector0<  >
+        >
+{
+    typedef vector1 type;
+};
+
+template<
+      typename T0, typename T1
+    >
+struct vector2
+    : v_item<
+          T1
+        , vector1<T0>
+        >
+{
+    typedef vector2 type;
+};
+
+template<
+      typename T0, typename T1, typename T2
+    >
+struct vector3
+    : v_item<
+          T2
+        , vector2< T0,T1 >
+        >
+{
+    typedef vector3 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3
+    >
+struct vector4
+    : v_item<
+          T3
+        , vector3< T0,T1,T2 >
+        >
+{
+    typedef vector4 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    >
+struct vector5
+    : v_item<
+          T4
+        , vector4< T0,T1,T2,T3 >
+        >
+{
+    typedef vector5 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5
+    >
+struct vector6
+    : v_item<
+          T5
+        , vector5< T0,T1,T2,T3,T4 >
+        >
+{
+    typedef vector6 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6
+    >
+struct vector7
+    : v_item<
+          T6
+        , vector6< T0,T1,T2,T3,T4,T5 >
+        >
+{
+    typedef vector7 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7
+    >
+struct vector8
+    : v_item<
+          T7
+        , vector7< T0,T1,T2,T3,T4,T5,T6 >
+        >
+{
+    typedef vector8 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8
+    >
+struct vector9
+    : v_item<
+          T8
+        , vector8< T0,T1,T2,T3,T4,T5,T6,T7 >
+        >
+{
+    typedef vector9 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    >
+struct vector10
+    : v_item<
+          T9
+        , vector9< T0,T1,T2,T3,T4,T5,T6,T7,T8 >
+        >
+{
+    typedef vector10 type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp
new file mode 100644
index 0000000..50b6bd9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp
@@ -0,0 +1,154 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector10_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0
+    >
+struct vector1_c
+    : v_item<
+          integral_c< T,C0 >
+        , vector0_c<T>
+        >
+{
+    typedef vector1_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1
+    >
+struct vector2_c
+    : v_item<
+          integral_c< T,C1 >
+        , vector1_c< T,C0 >
+        >
+{
+    typedef vector2_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2
+    >
+struct vector3_c
+    : v_item<
+          integral_c< T,C2 >
+        , vector2_c< T,C0,C1 >
+        >
+{
+    typedef vector3_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3
+    >
+struct vector4_c
+    : v_item<
+          integral_c< T,C3 >
+        , vector3_c< T,C0,C1,C2 >
+        >
+{
+    typedef vector4_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4
+    >
+struct vector5_c
+    : v_item<
+          integral_c< T,C4 >
+        , vector4_c< T,C0,C1,C2,C3 >
+        >
+{
+    typedef vector5_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5
+    >
+struct vector6_c
+    : v_item<
+          integral_c< T,C5 >
+        , vector5_c< T,C0,C1,C2,C3,C4 >
+        >
+{
+    typedef vector6_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6
+    >
+struct vector7_c
+    : v_item<
+          integral_c< T,C6 >
+        , vector6_c< T,C0,C1,C2,C3,C4,C5 >
+        >
+{
+    typedef vector7_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7
+    >
+struct vector8_c
+    : v_item<
+          integral_c< T,C7 >
+        , vector7_c< T,C0,C1,C2,C3,C4,C5,C6 >
+        >
+{
+    typedef vector8_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8
+    >
+struct vector9_c
+    : v_item<
+          integral_c< T,C8 >
+        , vector8_c< T,C0,C1,C2,C3,C4,C5,C6,C7 >
+        >
+{
+    typedef vector9_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9
+    >
+struct vector10_c
+    : v_item<
+          integral_c< T,C9 >
+        , vector9_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8 >
+        >
+{
+    typedef vector10_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp
new file mode 100644
index 0000000..b346906
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp
@@ -0,0 +1,159 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector20.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10
+    >
+struct vector11
+    : v_item<
+          T10
+        , vector10< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+        >
+{
+    typedef vector11 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11
+    >
+struct vector12
+    : v_item<
+          T11
+        , vector11< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+        >
+{
+    typedef vector12 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12
+    >
+struct vector13
+    : v_item<
+          T12
+        , vector12< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+        >
+{
+    typedef vector13 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13
+    >
+struct vector14
+    : v_item<
+          T13
+        , vector13< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+        >
+{
+    typedef vector14 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    >
+struct vector15
+    : v_item<
+          T14
+        , vector14< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+        >
+{
+    typedef vector15 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15
+    >
+struct vector16
+    : v_item<
+          T15
+        , vector15< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >
+        >
+{
+    typedef vector16 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16
+    >
+struct vector17
+    : v_item<
+          T16
+        , vector16< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >
+        >
+{
+    typedef vector17 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17
+    >
+struct vector18
+    : v_item<
+          T17
+        , vector17< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >
+        >
+{
+    typedef vector18 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18
+    >
+struct vector19
+    : v_item<
+          T18
+        , vector18< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >
+        >
+{
+    typedef vector19 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    >
+struct vector20
+    : v_item<
+          T19
+        , vector19< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >
+        >
+{
+    typedef vector20 type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp
new file mode 100644
index 0000000..0a56881
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp
@@ -0,0 +1,163 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector20_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    >
+struct vector11_c
+    : v_item<
+          integral_c< T,C10 >
+        , vector10_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+        >
+{
+    typedef vector11_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11
+    >
+struct vector12_c
+    : v_item<
+          integral_c< T,C11 >
+        , vector11_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+        >
+{
+    typedef vector12_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12
+    >
+struct vector13_c
+    : v_item<
+          integral_c< T,C12 >
+        , vector12_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+        >
+{
+    typedef vector13_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13
+    >
+struct vector14_c
+    : v_item<
+          integral_c< T,C13 >
+        , vector13_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+        >
+{
+    typedef vector14_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14
+    >
+struct vector15_c
+    : v_item<
+          integral_c< T,C14 >
+        , vector14_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >
+        >
+{
+    typedef vector15_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15
+    >
+struct vector16_c
+    : v_item<
+          integral_c< T,C15 >
+        , vector15_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >
+        >
+{
+    typedef vector16_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16
+    >
+struct vector17_c
+    : v_item<
+          integral_c< T,C16 >
+        , vector16_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >
+        >
+{
+    typedef vector17_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17
+    >
+struct vector18_c
+    : v_item<
+          integral_c< T,C17 >
+        , vector17_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >
+        >
+{
+    typedef vector18_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18
+    >
+struct vector19_c
+    : v_item<
+          integral_c< T,C18 >
+        , vector18_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >
+        >
+{
+    typedef vector19_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19
+    >
+struct vector20_c
+    : v_item<
+          integral_c< T,C19 >
+        , vector19_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >
+        >
+{
+    typedef vector20_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp
new file mode 100644
index 0000000..ae80252
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp
@@ -0,0 +1,179 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector30.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20
+    >
+struct vector21
+    : v_item<
+          T20
+        , vector20< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >
+        >
+{
+    typedef vector21 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21
+    >
+struct vector22
+    : v_item<
+          T21
+        , vector21< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20 >
+        >
+{
+    typedef vector22 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22
+    >
+struct vector23
+    : v_item<
+          T22
+        , vector22< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21 >
+        >
+{
+    typedef vector23 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23
+    >
+struct vector24
+    : v_item<
+          T23
+        , vector23< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22 >
+        >
+{
+    typedef vector24 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    >
+struct vector25
+    : v_item<
+          T24
+        , vector24< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23 >
+        >
+{
+    typedef vector25 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25
+    >
+struct vector26
+    : v_item<
+          T25
+        , vector25< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24 >
+        >
+{
+    typedef vector26 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26
+    >
+struct vector27
+    : v_item<
+          T26
+        , vector26< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25 >
+        >
+{
+    typedef vector27 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27
+    >
+struct vector28
+    : v_item<
+          T27
+        , vector27< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26 >
+        >
+{
+    typedef vector28 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28
+    >
+struct vector29
+    : v_item<
+          T28
+        , vector28< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27 >
+        >
+{
+    typedef vector29 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    >
+struct vector30
+    : v_item<
+          T29
+        , vector29< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28 >
+        >
+{
+    typedef vector30 type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp
new file mode 100644
index 0000000..2753d61
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp
@@ -0,0 +1,173 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector30_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    >
+struct vector21_c
+    : v_item<
+          integral_c< T,C20 >
+        , vector20_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >
+        >
+{
+    typedef vector21_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21
+    >
+struct vector22_c
+    : v_item<
+          integral_c< T,C21 >
+        , vector21_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20 >
+        >
+{
+    typedef vector22_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22
+    >
+struct vector23_c
+    : v_item<
+          integral_c< T,C22 >
+        , vector22_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21 >
+        >
+{
+    typedef vector23_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23
+    >
+struct vector24_c
+    : v_item<
+          integral_c< T,C23 >
+        , vector23_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22 >
+        >
+{
+    typedef vector24_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24
+    >
+struct vector25_c
+    : v_item<
+          integral_c< T,C24 >
+        , vector24_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23 >
+        >
+{
+    typedef vector25_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25
+    >
+struct vector26_c
+    : v_item<
+          integral_c< T,C25 >
+        , vector25_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24 >
+        >
+{
+    typedef vector26_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26
+    >
+struct vector27_c
+    : v_item<
+          integral_c< T,C26 >
+        , vector26_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25 >
+        >
+{
+    typedef vector27_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27
+    >
+struct vector28_c
+    : v_item<
+          integral_c< T,C27 >
+        , vector27_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26 >
+        >
+{
+    typedef vector28_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28
+    >
+struct vector29_c
+    : v_item<
+          integral_c< T,C28 >
+        , vector28_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27 >
+        >
+{
+    typedef vector29_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29
+    >
+struct vector30_c
+    : v_item<
+          integral_c< T,C29 >
+        , vector29_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28 >
+        >
+{
+    typedef vector30_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp
new file mode 100644
index 0000000..a265437
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp
@@ -0,0 +1,199 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector40.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30
+    >
+struct vector31
+    : v_item<
+          T30
+        , vector30< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29 >
+        >
+{
+    typedef vector31 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31
+    >
+struct vector32
+    : v_item<
+          T31
+        , vector31< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30 >
+        >
+{
+    typedef vector32 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32
+    >
+struct vector33
+    : v_item<
+          T32
+        , vector32< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31 >
+        >
+{
+    typedef vector33 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33
+    >
+struct vector34
+    : v_item<
+          T33
+        , vector33< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32 >
+        >
+{
+    typedef vector34 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    >
+struct vector35
+    : v_item<
+          T34
+        , vector34< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33 >
+        >
+{
+    typedef vector35 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35
+    >
+struct vector36
+    : v_item<
+          T35
+        , vector35< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34 >
+        >
+{
+    typedef vector36 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36
+    >
+struct vector37
+    : v_item<
+          T36
+        , vector36< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35 >
+        >
+{
+    typedef vector37 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37
+    >
+struct vector38
+    : v_item<
+          T37
+        , vector37< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36 >
+        >
+{
+    typedef vector38 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38
+    >
+struct vector39
+    : v_item<
+          T38
+        , vector38< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37 >
+        >
+{
+    typedef vector39 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    >
+struct vector40
+    : v_item<
+          T39
+        , vector39< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38 >
+        >
+{
+    typedef vector40 type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp
new file mode 100644
index 0000000..0354689
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp
@@ -0,0 +1,183 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector40_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    >
+struct vector31_c
+    : v_item<
+          integral_c< T,C30 >
+        , vector30_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29 >
+        >
+{
+    typedef vector31_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31
+    >
+struct vector32_c
+    : v_item<
+          integral_c< T,C31 >
+        , vector31_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30 >
+        >
+{
+    typedef vector32_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32
+    >
+struct vector33_c
+    : v_item<
+          integral_c< T,C32 >
+        , vector32_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31 >
+        >
+{
+    typedef vector33_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33
+    >
+struct vector34_c
+    : v_item<
+          integral_c< T,C33 >
+        , vector33_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32 >
+        >
+{
+    typedef vector34_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34
+    >
+struct vector35_c
+    : v_item<
+          integral_c< T,C34 >
+        , vector34_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33 >
+        >
+{
+    typedef vector35_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35
+    >
+struct vector36_c
+    : v_item<
+          integral_c< T,C35 >
+        , vector35_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34 >
+        >
+{
+    typedef vector36_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36
+    >
+struct vector37_c
+    : v_item<
+          integral_c< T,C36 >
+        , vector36_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35 >
+        >
+{
+    typedef vector37_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37
+    >
+struct vector38_c
+    : v_item<
+          integral_c< T,C37 >
+        , vector37_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36 >
+        >
+{
+    typedef vector38_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38
+    >
+struct vector39_c
+    : v_item<
+          integral_c< T,C38 >
+        , vector38_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37 >
+        >
+{
+    typedef vector39_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39
+    >
+struct vector40_c
+    : v_item<
+          integral_c< T,C39 >
+        , vector39_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38 >
+        >
+{
+    typedef vector40_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp
new file mode 100644
index 0000000..58d273c
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp
@@ -0,0 +1,219 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector50.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40
+    >
+struct vector41
+    : v_item<
+          T40
+        , vector40< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39 >
+        >
+{
+    typedef vector41 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41
+    >
+struct vector42
+    : v_item<
+          T41
+        , vector41< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40 >
+        >
+{
+    typedef vector42 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42
+    >
+struct vector43
+    : v_item<
+          T42
+        , vector42< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41 >
+        >
+{
+    typedef vector43 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43
+    >
+struct vector44
+    : v_item<
+          T43
+        , vector43< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42 >
+        >
+{
+    typedef vector44 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    >
+struct vector45
+    : v_item<
+          T44
+        , vector44< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43 >
+        >
+{
+    typedef vector45 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45
+    >
+struct vector46
+    : v_item<
+          T45
+        , vector45< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44 >
+        >
+{
+    typedef vector46 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46
+    >
+struct vector47
+    : v_item<
+          T46
+        , vector46< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45 >
+        >
+{
+    typedef vector47 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46, typename T47
+    >
+struct vector48
+    : v_item<
+          T47
+        , vector47< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46 >
+        >
+{
+    typedef vector48 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46, typename T47, typename T48
+    >
+struct vector49
+    : v_item<
+          T48
+        , vector48< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47 >
+        >
+{
+    typedef vector49 type;
+};
+
+template<
+      typename T0, typename T1, typename T2, typename T3, typename T4
+    , typename T5, typename T6, typename T7, typename T8, typename T9
+    , typename T10, typename T11, typename T12, typename T13, typename T14
+    , typename T15, typename T16, typename T17, typename T18, typename T19
+    , typename T20, typename T21, typename T22, typename T23, typename T24
+    , typename T25, typename T26, typename T27, typename T28, typename T29
+    , typename T30, typename T31, typename T32, typename T33, typename T34
+    , typename T35, typename T36, typename T37, typename T38, typename T39
+    , typename T40, typename T41, typename T42, typename T43, typename T44
+    , typename T45, typename T46, typename T47, typename T48, typename T49
+    >
+struct vector50
+    : v_item<
+          T49
+        , vector49< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47,T48 >
+        >
+{
+    typedef vector50 type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp
new file mode 100644
index 0000000..10c3d07
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp
@@ -0,0 +1,193 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/vector/vector50_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace pdalboost { namespace mpl {
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    >
+struct vector41_c
+    : v_item<
+          integral_c< T,C40 >
+        , vector40_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39 >
+        >
+{
+    typedef vector41_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41
+    >
+struct vector42_c
+    : v_item<
+          integral_c< T,C41 >
+        , vector41_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40 >
+        >
+{
+    typedef vector42_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42
+    >
+struct vector43_c
+    : v_item<
+          integral_c< T,C42 >
+        , vector42_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41 >
+        >
+{
+    typedef vector43_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43
+    >
+struct vector44_c
+    : v_item<
+          integral_c< T,C43 >
+        , vector43_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42 >
+        >
+{
+    typedef vector44_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44
+    >
+struct vector45_c
+    : v_item<
+          integral_c< T,C44 >
+        , vector44_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43 >
+        >
+{
+    typedef vector45_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45
+    >
+struct vector46_c
+    : v_item<
+          integral_c< T,C45 >
+        , vector45_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44 >
+        >
+{
+    typedef vector46_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46
+    >
+struct vector47_c
+    : v_item<
+          integral_c< T,C46 >
+        , vector46_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45 >
+        >
+{
+    typedef vector47_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46, T C47
+    >
+struct vector48_c
+    : v_item<
+          integral_c< T,C47 >
+        , vector47_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46 >
+        >
+{
+    typedef vector48_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48
+    >
+struct vector49_c
+    : v_item<
+          integral_c< T,C48 >
+        , vector48_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47 >
+        >
+{
+    typedef vector49_c type;
+    typedef T value_type;
+};
+
+template<
+      typename T
+    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48, T C49
+    >
+struct vector50_c
+    : v_item<
+          integral_c< T,C49 >
+        , vector49_c< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47,C48 >
+        >
+{
+    typedef vector50_c type;
+    typedef T value_type;
+};
+
+}}
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/push_back.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/push_back.hpp
new file mode 100644
index 0000000..eb96131
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/push_back.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_PUSH_BACK_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_PUSH_BACK_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/push_back_fwd.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+#   include <boost/mpl/vector/aux_/item.hpp>
+#   include <boost/mpl/vector/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct push_back_impl< aux::vector_tag >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef v_item<T,Vector,0> type;
+    };
+};
+
+}}
+
+#endif 
+
+#endif // BOOST_MPL_VECTOR_AUX_PUSH_BACK_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/push_front.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/push_front.hpp
new file mode 100644
index 0000000..ea54241
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/push_front.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_PUSH_FRONT_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_PUSH_FRONT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/push_front_fwd.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+#   include <boost/mpl/vector/aux_/item.hpp>
+#   include <boost/mpl/vector/aux_/tag.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template<>
+struct push_front_impl< aux::vector_tag >
+{
+    template< typename Vector, typename T > struct apply
+    {
+        typedef v_item<T,Vector,1> type;
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+#endif // BOOST_MPL_VECTOR_AUX_PUSH_FRONT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/size.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/size.hpp
new file mode 100644
index 0000000..3f9d012
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/size.hpp
@@ -0,0 +1,49 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_SIZE_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_SIZE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/vector/aux_/O1_size.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+
+template<>
+struct size_impl< aux::vector_tag >
+    : O1_size_impl< aux::vector_tag >
+{
+};
+
+#else
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< long N >
+struct size_impl< aux::vector_tag<N> >
+    : O1_size_impl< aux::vector_tag<N> >
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_SIZE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/tag.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/tag.hpp
new file mode 100644
index 0000000..a3cb496
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/tag.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_TAG_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_TAG_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/config/typeof.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+
+namespace pdalboost { namespace mpl { namespace aux {
+
+struct v_iter_tag;
+
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+struct vector_tag;
+#else
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct vector_tag;
+#endif
+
+}}}
+
+#endif // BOOST_MPL_VECTOR_AUX_TAG_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/aux_/vector0.hpp b/vendor/pdalboost/boost/mpl/vector/aux_/vector0.hpp
new file mode 100644
index 0000000..8f40d52
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/aux_/vector0.hpp
@@ -0,0 +1,52 @@
+
+#ifndef BOOST_MPL_VECTOR_AUX_VECTOR0_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_AUX_VECTOR0_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/type_wrapper.hpp>
+
+#include <boost/mpl/vector/aux_/iterator.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+#include <boost/mpl/aux_/config/typeof.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template< typename Dummy = na > struct vector0;
+
+template<> struct vector0<na>
+{
+#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
+    typedef aux::vector_tag tag;
+    typedef vector0         type;
+    typedef long_<32768>    lower_bound_;
+    typedef lower_bound_    upper_bound_;
+    typedef long_<0>        size;
+
+    static aux::type_wrapper<void_> item_(...);
+#else
+    typedef aux::vector_tag<0> tag;
+    typedef vector0 type;
+    typedef void_ item0;
+    
+    typedef v_iter<vector0<>,0> begin;
+    typedef v_iter<vector0<>,0> end;
+#endif
+};
+
+}}
+
+#endif // BOOST_MPL_VECTOR_AUX_VECTOR0_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/vector0.hpp b/vendor/pdalboost/boost/mpl/vector/vector0.hpp
new file mode 100644
index 0000000..39759dd
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/vector0.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR0_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR0_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/vector/aux_/at.hpp>
+#include <boost/mpl/vector/aux_/front.hpp>
+#include <boost/mpl/vector/aux_/push_front.hpp>
+#include <boost/mpl/vector/aux_/pop_front.hpp>
+#include <boost/mpl/vector/aux_/push_back.hpp>
+#include <boost/mpl/vector/aux_/pop_back.hpp>
+#include <boost/mpl/vector/aux_/back.hpp>
+#include <boost/mpl/vector/aux_/clear.hpp>
+#include <boost/mpl/vector/aux_/O1_size.hpp>
+#include <boost/mpl/vector/aux_/size.hpp>
+#include <boost/mpl/vector/aux_/empty.hpp>
+#include <boost/mpl/vector/aux_/item.hpp>
+#include <boost/mpl/vector/aux_/iterator.hpp>
+#include <boost/mpl/vector/aux_/vector0.hpp>
+#include <boost/mpl/vector/aux_/begin_end.hpp>
+#include <boost/mpl/vector/aux_/tag.hpp>
+
+#endif // BOOST_MPL_VECTOR_VECTOR0_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/vector0_c.hpp b/vendor/pdalboost/boost/mpl/vector/vector0_c.hpp
new file mode 100644
index 0000000..6e5bde9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/vector0_c.hpp
@@ -0,0 +1,31 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR0_C_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR0_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/vector/vector0.hpp>
+#include <boost/mpl/integral_c.hpp>
+
+namespace pdalboost { namespace mpl {
+
+template< typename T > struct vector0_c
+    : vector0<>
+{
+    typedef vector0_c type;
+    typedef T value_type;
+};
+
+}}
+
+#endif // BOOST_MPL_VECTOR_VECTOR0_C_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/vector10.hpp b/vendor/pdalboost/boost/mpl/vector/vector10.hpp
new file mode 100644
index 0000000..744b6d4
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/vector10.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR10_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR10_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/vector/vector0.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER vector10.hpp
+#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/aux_/config/typeof.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(0, 10, <boost/mpl/vector/aux_/numbered.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR10_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/vector10_c.hpp b/vendor/pdalboost/boost/mpl/vector/vector10_c.hpp
new file mode 100644
index 0000000..75a347a
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/vector10_c.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR10_C_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR10_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/vector/vector0_c.hpp>
+#   include <boost/mpl/vector/vector10.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER vector10_c.hpp
+#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/aux_/config/typeof.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(1, 10, <boost/mpl/vector/aux_/numbered_c.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR10_C_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/vector20.hpp b/vendor/pdalboost/boost/mpl/vector/vector20.hpp
new file mode 100644
index 0000000..f2869da
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/vector20.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR20_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR20_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/vector/vector10.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER vector20.hpp
+#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/aux_/config/typeof.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(11, 20, <boost/mpl/vector/aux_/numbered.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR20_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/vector20_c.hpp b/vendor/pdalboost/boost/mpl/vector/vector20_c.hpp
new file mode 100644
index 0000000..28037c7
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/vector20_c.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR20_C_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR20_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/vector/vector10_c.hpp>
+#   include <boost/mpl/vector/vector20.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER vector20_c.hpp
+#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/aux_/config/typeof.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(11, 20, <boost/mpl/vector/aux_/numbered_c.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR20_C_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/vector30.hpp b/vendor/pdalboost/boost/mpl/vector/vector30.hpp
new file mode 100644
index 0000000..3a83662
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/vector30.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR30_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR30_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/vector/vector20.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER vector30.hpp
+#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/aux_/config/typeof.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(21, 30, <boost/mpl/vector/aux_/numbered.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR30_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/vector30_c.hpp b/vendor/pdalboost/boost/mpl/vector/vector30_c.hpp
new file mode 100644
index 0000000..26143f2
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/vector30_c.hpp
@@ -0,0 +1,47 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR30_C_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR30_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/vector/vector20_c.hpp>
+#   include <boost/mpl/vector/vector30.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER vector30_c.hpp
+#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/aux_/config/typeof.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+#   include <boost/config.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(21, 30, <boost/mpl/vector/aux_/numbered_c.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_USE_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR30_C_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/vector40.hpp b/vendor/pdalboost/boost/mpl/vector/vector40.hpp
new file mode 100644
index 0000000..638d7a9
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/vector40.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR40_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR40_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/vector/vector30.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER vector40.hpp
+#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/aux_/config/typeof.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(31, 40, <boost/mpl/vector/aux_/numbered.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR40_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/vector40_c.hpp b/vendor/pdalboost/boost/mpl/vector/vector40_c.hpp
new file mode 100644
index 0000000..d6a4ae5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/vector40_c.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR40_C_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR40_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/vector/vector30_c.hpp>
+#   include <boost/mpl/vector/vector40.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER vector40_c.hpp
+#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/aux_/config/typeof.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(31, 40, <boost/mpl/vector/aux_/numbered_c.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR40_C_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/vector50.hpp b/vendor/pdalboost/boost/mpl/vector/vector50.hpp
new file mode 100644
index 0000000..ce538d8
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/vector50.hpp
@@ -0,0 +1,45 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR50_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR50_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/vector/vector40.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER vector50.hpp
+#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/aux_/config/typeof.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(41, 50, <boost/mpl/vector/aux_/numbered.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR50_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/vector/vector50_c.hpp b/vendor/pdalboost/boost/mpl/vector/vector50_c.hpp
new file mode 100644
index 0000000..aeeca7d
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/vector/vector50_c.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_VECTOR_VECTOR50_C_HPP_INCLUDED
+#define BOOST_MPL_VECTOR_VECTOR50_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+#   include <boost/mpl/vector/vector40_c.hpp>
+#   include <boost/mpl/vector/vector50.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+#   define BOOST_MPL_PREPROCESSED_HEADER vector50_c.hpp
+#   include <boost/mpl/vector/aux_/include_preprocessed.hpp>
+
+#else
+
+#   include <boost/mpl/aux_/config/typeof.hpp>
+#   include <boost/mpl/aux_/config/ctps.hpp>
+#   include <boost/preprocessor/iterate.hpp>
+
+namespace pdalboost { namespace mpl {
+
+#   define BOOST_PP_ITERATION_PARAMS_1 \
+    (3,(41, 50, <boost/mpl/vector/aux_/numbered_c.hpp>))
+#   include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_VECTOR_VECTOR50_C_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/void.hpp b/vendor/pdalboost/boost/mpl/void.hpp
new file mode 100644
index 0000000..124babe
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/void.hpp
@@ -0,0 +1,76 @@
+
+#ifndef BOOST_MPL_VOID_HPP_INCLUDED
+#define BOOST_MPL_VOID_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/void_fwd.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+//  [JDG Feb-4-2003] made void_ a complete type to allow it to be
+//  instantiated so that it can be passed in as an object that can be
+//  used to select an overloaded function. Possible use includes signaling
+//  a zero arity functor evaluation call.
+struct void_ { typedef void_ type; };
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+
+namespace pdalboost { namespace mpl {
+
+template< typename T >
+struct is_void_
+    : false_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    using false_::value;
+#endif
+};
+
+template<>
+struct is_void_<void_>
+    : true_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    using true_::value;
+#endif
+};
+
+template< typename T >
+struct is_not_void_
+    : true_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    using true_::value;
+#endif
+};
+
+template<>
+struct is_not_void_<void_>
+    : false_
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    using false_::value;
+#endif
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, is_void_)
+BOOST_MPL_AUX_NA_SPEC(1, is_not_void_)
+
+}}
+
+#endif // BOOST_MPL_VOID_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/mpl/void_fwd.hpp b/vendor/pdalboost/boost/mpl/void_fwd.hpp
new file mode 100644
index 0000000..86078b5
--- /dev/null
+++ b/vendor/pdalboost/boost/mpl/void_fwd.hpp
@@ -0,0 +1,26 @@
+
+#ifndef BOOST_MPL_VOID_FWD_HPP_INCLUDED
+#define BOOST_MPL_VOID_FWD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id$
+// $Date$
+// $Revision$
+
+#include <boost/mpl/aux_/adl_barrier.hpp>
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
+
+struct void_;
+
+BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
+BOOST_MPL_AUX_ADL_BARRIER_DECL(void_)
+
+#endif // BOOST_MPL_VOID_FWD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/multi_index/detail/access_specifier.hpp b/vendor/pdalboost/boost/multi_index/detail/access_specifier.hpp
new file mode 100644
index 0000000..f3346e8
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/access_specifier.hpp
@@ -0,0 +1,54 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_ACCESS_SPECIFIER_HPP
+#define BOOST_MULTI_INDEX_DETAIL_ACCESS_SPECIFIER_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+/* In those compilers that do not accept the member template friend syntax,
+ * some protected and private sections might need to be specified as
+ * public.
+ */
+
+#if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+#define BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS public
+#define BOOST_MULTI_INDEX_PRIVATE_IF_MEMBER_TEMPLATE_FRIENDS public
+#else
+#define BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS protected
+#define BOOST_MULTI_INDEX_PRIVATE_IF_MEMBER_TEMPLATE_FRIENDS private
+#endif
+
+/* GCC does not correctly support in-class using declarations for template
+ * functions. See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9810
+ * MSVC 7.1/8.0 seem to have a similar problem, though the conditions in
+ * which the error happens are not that simple. I have yet to isolate this
+ * into a snippet suitable for bug reporting.
+ * Sun Studio also has this problem, which might be related, from the
+ * information gathered at Sun forums, with a known issue notified at the
+ * internal bug report 6421933. The bug is present up to Studio Express 2,
+ * the latest preview version of the future Sun Studio 12. As of this writing
+ * (October 2006) it is not known whether a fix will finally make it into the
+ * official Sun Studio 12.
+ */
+
+#if BOOST_WORKAROUND(__GNUC__,==3)&&(__GNUC_MINOR__<4)||\
+    BOOST_WORKAROUND(BOOST_MSVC,==1310)||\
+    BOOST_WORKAROUND(BOOST_MSVC,==1400)||\
+    BOOST_WORKAROUND(__SUNPRO_CC,BOOST_TESTED_AT(0x590))
+#define BOOST_MULTI_INDEX_PRIVATE_IF_USING_DECL_FOR_TEMPL_FUNCTIONS public
+#else
+#define BOOST_MULTI_INDEX_PRIVATE_IF_USING_DECL_FOR_TEMPL_FUNCTIONS private
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/adl_swap.hpp b/vendor/pdalboost/boost/multi_index/detail/adl_swap.hpp
new file mode 100644
index 0000000..0ca289e
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/adl_swap.hpp
@@ -0,0 +1,44 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_ADL_SWAP_HPP
+#define BOOST_MULTI_INDEX_DETAIL_ADL_SWAP_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+template<typename T>
+void adl_swap(T& x,T& y)
+{
+
+#if !defined(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL)
+  using std::swap;
+  swap(x,y);
+#else
+  std::swap(x,y);
+#endif
+
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/archive_constructed.hpp b/vendor/pdalboost/boost/multi_index/detail/archive_constructed.hpp
new file mode 100644
index 0000000..7ca54bb
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/archive_constructed.hpp
@@ -0,0 +1,79 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_ARCHIVE_CONSTRUCTED_HPP
+#define BOOST_MULTI_INDEX_DETAIL_ARCHIVE_CONSTRUCTED_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/serialization/serialization.hpp>
+#include <boost/type_traits/aligned_storage.hpp>
+#include <boost/type_traits/alignment_of.hpp> 
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* constructs a stack-based object from a serialization archive */
+
+template<typename T>
+struct archive_constructed:private noncopyable
+{
+  template<class Archive>
+  archive_constructed(Archive& ar,const unsigned int version)
+  {
+    serialization::load_construct_data_adl(ar,&get(),version);
+    BOOST_TRY{
+      ar>>get();
+    }
+    BOOST_CATCH(...){
+      (&get())->~T();
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+  }
+
+  template<class Archive>
+  archive_constructed(const char* name,Archive& ar,const unsigned int version)
+  {
+    serialization::load_construct_data_adl(ar,&get(),version);
+    BOOST_TRY{
+      ar>>serialization::make_nvp(name,get());
+    }
+    BOOST_CATCH(...){
+      (&get())->~T();
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+  }
+
+  ~archive_constructed()
+  {
+    (&get())->~T();
+  }
+
+  T& get(){return *reinterpret_cast<T*>(&space);}
+
+private:
+  typename aligned_storage<sizeof(T),alignment_of<T>::value>::type space;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/auto_space.hpp b/vendor/pdalboost/boost/multi_index/detail/auto_space.hpp
new file mode 100644
index 0000000..5f911ae
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/auto_space.hpp
@@ -0,0 +1,91 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_AUTO_SPACE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_AUTO_SPACE_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/detail/allocator_utilities.hpp>
+#include <boost/multi_index/detail/adl_swap.hpp>
+#include <boost/noncopyable.hpp>
+#include <memory>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* auto_space provides uninitialized space suitably to store
+ * a given number of elements of a given type.
+ */
+
+/* NB: it is not clear whether using an allocator to handle
+ * zero-sized arrays of elements is conformant or not. GCC 3.3.1
+ * and prior fail here, other stdlibs handle the issue gracefully.
+ * To be on the safe side, the case n==0 is given special treatment.
+ * References:
+ *   GCC Bugzilla, "standard allocator crashes when deallocating segment
+ *    "of zero length", http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14176
+ *   C++ Standard Library Defect Report List (Revision 28), issue 199
+ *     "What does allocate(0) return?",
+ *     http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#199
+ */
+
+template<typename T,typename Allocator=std::allocator<T> >
+struct auto_space:private noncopyable
+{
+  typedef typename pdalboost::detail::allocator::rebind_to<
+    Allocator,T
+  >::type::pointer pointer;
+
+  explicit auto_space(const Allocator& al=Allocator(),std::size_t n=1):
+  al_(al),n_(n),data_(n_?al_.allocate(n_):pointer(0))
+  {}
+
+  ~auto_space()
+  {
+    if(n_)al_.deallocate(data_,n_);
+  }
+
+  Allocator get_allocator()const{return al_;}
+
+  pointer data()const{return data_;}
+
+  void swap(auto_space& x)
+  {
+    if(al_!=x.al_)adl_swap(al_,x.al_);
+    std::swap(n_,x.n_);
+    std::swap(data_,x.data_);
+  }
+    
+private:
+  typename pdalboost::detail::allocator::rebind_to<
+    Allocator,T>::type                          al_;
+  std::size_t                                   n_;
+  pointer                                       data_;
+};
+
+template<typename T,typename Allocator>
+void swap(auto_space<T,Allocator>& x,auto_space<T,Allocator>& y)
+{
+  x.swap(y);
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/base_type.hpp b/vendor/pdalboost/boost/multi_index/detail/base_type.hpp
new file mode 100644
index 0000000..795224e
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/base_type.hpp
@@ -0,0 +1,74 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_BASE_TYPE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_BASE_TYPE_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/multi_index/detail/index_base.hpp>
+#include <boost/multi_index/detail/is_index_list.hpp>
+#include <boost/static_assert.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* MPL machinery to construct a linear hierarchy of indices out of
+ * a index list.
+ */
+
+struct index_applier
+{
+  template<typename IndexSpecifierMeta,typename SuperMeta>
+  struct apply
+  {
+    typedef typename IndexSpecifierMeta::type            index_specifier;
+    typedef typename index_specifier::
+      BOOST_NESTED_TEMPLATE index_class<SuperMeta>::type type;
+  }; 
+};
+
+template<int N,typename Value,typename IndexSpecifierList,typename Allocator>
+struct nth_layer
+{
+  BOOST_STATIC_CONSTANT(int,length=mpl::size<IndexSpecifierList>::value);
+
+  typedef typename  mpl::eval_if_c<
+    N==length,
+    mpl::identity<index_base<Value,IndexSpecifierList,Allocator> >,
+    mpl::apply2<
+      index_applier,
+      mpl::at_c<IndexSpecifierList,N>,
+      nth_layer<N+1,Value,IndexSpecifierList,Allocator>
+    >
+  >::type type;
+};
+
+template<typename Value,typename IndexSpecifierList,typename Allocator>
+struct multi_index_base_type:nth_layer<0,Value,IndexSpecifierList,Allocator>
+{
+  BOOST_STATIC_ASSERT(detail::is_index_list<IndexSpecifierList>::value);
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/bidir_node_iterator.hpp b/vendor/pdalboost/boost/multi_index/detail/bidir_node_iterator.hpp
new file mode 100644
index 0000000..b55355b
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/bidir_node_iterator.hpp
@@ -0,0 +1,114 @@
+/* Copyright 2003-2014 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_BIDIR_NODE_ITERATOR_HPP
+#define BOOST_MULTI_INDEX_DETAIL_BIDIR_NODE_ITERATOR_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/operators.hpp>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/split_member.hpp>
+#endif
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Iterator class for node-based indices with bidirectional
+ * iterators (ordered and sequenced indices.)
+ */
+
+template<typename Node>
+class bidir_node_iterator:
+  public bidirectional_iterator_helper<
+    bidir_node_iterator<Node>,
+    typename Node::value_type,
+    std::ptrdiff_t,
+    const typename Node::value_type*,
+    const typename Node::value_type&>
+{
+public:
+  /* coverity[uninit_ctor]: suppress warning */
+  bidir_node_iterator(){}
+  explicit bidir_node_iterator(Node* node_):node(node_){}
+
+  const typename Node::value_type& operator*()const
+  {
+    return node->value();
+  }
+
+  bidir_node_iterator& operator++()
+  {
+    Node::increment(node);
+    return *this;
+  }
+
+  bidir_node_iterator& operator--()
+  {
+    Node::decrement(node);
+    return *this;
+  }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+  /* Serialization. As for why the following is public,
+   * see explanation in safe_mode_iterator notes in safe_mode.hpp.
+   */
+
+  BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+  typedef typename Node::base_type node_base_type;
+
+  template<class Archive>
+  void save(Archive& ar,const unsigned int)const
+  {
+    node_base_type* bnode=node;
+    ar<<serialization::make_nvp("pointer",bnode);
+  }
+
+  template<class Archive>
+  void load(Archive& ar,const unsigned int)
+  {
+    node_base_type* bnode;
+    ar>>serialization::make_nvp("pointer",bnode);
+    node=static_cast<Node*>(bnode);
+  }
+#endif
+
+  /* get_node is not to be used by the user */
+
+  typedef Node node_type;
+
+  Node* get_node()const{return node;}
+
+private:
+  Node* node;
+};
+
+template<typename Node>
+bool operator==(
+  const bidir_node_iterator<Node>& x,
+  const bidir_node_iterator<Node>& y)
+{
+  return x.get_node()==y.get_node();
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/converter.hpp b/vendor/pdalboost/boost/multi_index/detail/converter.hpp
new file mode 100644
index 0000000..b0678d8
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/converter.hpp
@@ -0,0 +1,52 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_CONVERTER_HPP
+#define BOOST_MULTI_INDEX_DETAIL_CONVERTER_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* converter offers means to access indices of a given multi_index_container
+ * and for convertibilty between index iterators, so providing a
+ * localized access point for get() and project() functions.
+ */
+
+template<typename MultiIndexContainer,typename Index>
+struct converter
+{
+  static const Index& index(const MultiIndexContainer& x){return x;}
+  static Index&       index(MultiIndexContainer& x){return x;}
+
+  static typename Index::const_iterator const_iterator(
+    const MultiIndexContainer& x,typename MultiIndexContainer::node_type* node)
+  {
+    return x.Index::make_iterator(node);
+  }
+
+  static typename Index::iterator iterator(
+    MultiIndexContainer& x,typename MultiIndexContainer::node_type* node)
+  {
+    return x.Index::make_iterator(node);
+  }
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/copy_map.hpp b/vendor/pdalboost/boost/multi_index/detail/copy_map.hpp
new file mode 100644
index 0000000..37a3858
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/copy_map.hpp
@@ -0,0 +1,142 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_COPY_MAP_HPP
+#define BOOST_MULTI_INDEX_DETAIL_COPY_MAP_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/multi_index/detail/auto_space.hpp>
+#include <boost/multi_index/detail/raw_ptr.hpp>
+#include <boost/noncopyable.hpp>
+#include <cstddef>
+#include <functional>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* copy_map is used as an auxiliary structure during copy_() operations.
+ * When a container with n nodes is replicated, node_map holds the pairings
+ * between original and copied nodes, and provides a fast way to find a
+ * copied node from an original one.
+ * The semantics of the class are not simple, and no attempt has been made
+ * to enforce it: multi_index_container handles it right. On the other hand,
+ * the const interface, which is the one provided to index implementations,
+ * only allows for:
+ *   - Enumeration of pairs of (original,copied) nodes (excluding the headers),
+ *   - fast retrieval of copied nodes (including the headers.)
+ */
+
+template <typename Node>
+struct copy_map_entry
+{
+  copy_map_entry(Node* f,Node* s):first(f),second(s){}
+
+  Node* first;
+  Node* second;
+
+  bool operator<(const copy_map_entry<Node>& x)const
+  {
+    return std::less<Node*>()(first,x.first);
+  }
+};
+
+template <typename Node,typename Allocator>
+class copy_map:private noncopyable
+{
+public:
+  typedef const copy_map_entry<Node>* const_iterator;
+
+  copy_map(
+    const Allocator& al,std::size_t size,Node* header_org,Node* header_cpy):
+    al_(al),size_(size),spc(al_,size_),n(0),
+    header_org_(header_org),header_cpy_(header_cpy),released(false)
+  {}
+
+  ~copy_map()
+  {
+    if(!released){
+      for(std::size_t i=0;i<n;++i){
+        pdalboost::detail::allocator::destroy(&(spc.data()+i)->second->value());
+        deallocate((spc.data()+i)->second);
+      }
+    }
+  }
+
+  const_iterator begin()const{return raw_ptr<const_iterator>(spc.data());}
+  const_iterator end()const{return raw_ptr<const_iterator>(spc.data()+n);}
+
+  void clone(Node* node)
+  {
+    (spc.data()+n)->first=node;
+    (spc.data()+n)->second=raw_ptr<Node*>(al_.allocate(1));
+    BOOST_TRY{
+      pdalboost::detail::allocator::construct(
+        &(spc.data()+n)->second->value(),node->value());
+    }
+    BOOST_CATCH(...){
+      deallocate((spc.data()+n)->second);
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+    ++n;
+
+    if(n==size_){
+      std::sort(
+        raw_ptr<copy_map_entry<Node>*>(spc.data()),
+        raw_ptr<copy_map_entry<Node>*>(spc.data())+size_);
+    }
+  }
+
+  Node* find(Node* node)const
+  {
+    if(node==header_org_)return header_cpy_;
+    return std::lower_bound(
+      begin(),end(),copy_map_entry<Node>(node,0))->second;
+  }
+
+  void release()
+  {
+    released=true;
+  }
+
+private:
+  typedef typename pdalboost::detail::allocator::rebind_to<
+    Allocator,Node
+  >::type                                               allocator_type;
+  typedef typename allocator_type::pointer              allocator_pointer;
+
+  allocator_type                                        al_;
+  std::size_t                                           size_;
+  auto_space<copy_map_entry<Node>,Allocator>            spc;
+  std::size_t                                           n;
+  Node*                                                 header_org_;
+  Node*                                                 header_cpy_;
+  bool                                                  released;
+
+  void deallocate(Node* node)
+  {
+    al_.deallocate(static_cast<allocator_pointer>(node),1);
+  }
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/do_not_copy_elements_tag.hpp b/vendor/pdalboost/boost/multi_index/detail/do_not_copy_elements_tag.hpp
new file mode 100644
index 0000000..adfdced
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/do_not_copy_elements_tag.hpp
@@ -0,0 +1,34 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_DO_NOT_COPY_ELEMENTS_TAG_HPP
+#define BOOST_MULTI_INDEX_DETAIL_DO_NOT_COPY_ELEMENTS_TAG_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Used to mark a special ctor variant that copies the internal objects of
+ * a container but not its elements.
+ */
+
+struct do_not_copy_elements_tag{};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/duplicates_iterator.hpp b/vendor/pdalboost/boost/multi_index/detail/duplicates_iterator.hpp
new file mode 100644
index 0000000..cba9f1e
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/duplicates_iterator.hpp
@@ -0,0 +1,120 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_DUPLICATES_ITERATOR_HPP
+#define BOOST_MULTI_INDEX_DETAIL_DUPLICATES_ITERATOR_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <cstddef>
+#include <iterator>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* duplicates_operator is given a range of ordered elements and
+ * passes only over those which are duplicated.
+ */
+
+template<typename Node,typename Predicate>
+class duplicates_iterator
+{
+public:
+  typedef typename Node::value_type        value_type;
+  typedef std::ptrdiff_t                   difference_type;
+  typedef const typename Node::value_type* pointer;
+  typedef const typename Node::value_type& reference;
+  typedef std::forward_iterator_tag        iterator_category;
+
+  duplicates_iterator(Node* node_,Node* end_,Predicate pred_):
+    node(node_),begin_chunk(0),end(end_),pred(pred_)
+  {
+    advance();
+  }
+
+  duplicates_iterator(Node* end_,Predicate pred_):
+    node(end_),begin_chunk(end_),end(end_),pred(pred_)
+  {
+  }
+
+  reference operator*()const
+  {
+    return node->value();
+  }
+
+  pointer operator->()const
+  {
+    return &node->value();
+  }
+
+  duplicates_iterator& operator++()
+  {
+    Node::increment(node);
+    sync();
+    return *this;
+  }
+
+  duplicates_iterator operator++(int)
+  {
+    duplicates_iterator tmp(*this);
+    ++(*this);
+    return tmp;
+  }
+
+  Node* get_node()const{return node;}
+
+private:
+  void sync()
+  {
+    if(node!=end&&pred(begin_chunk->value(),node->value()))advance();
+  }
+
+  void advance()
+  {
+    for(Node* node2=node;node!=end;node=node2){
+      Node::increment(node2);
+      if(node2!=end&&!pred(node->value(),node2->value()))break;
+    }
+    begin_chunk=node;
+  }
+
+  Node*     node;
+  Node*     begin_chunk;
+  Node*     end;
+  Predicate pred;
+};
+
+template<typename Node,typename Predicate>
+bool operator==(
+  const duplicates_iterator<Node,Predicate>& x,
+  const duplicates_iterator<Node,Predicate>& y)
+{
+  return x.get_node()==y.get_node();
+}
+
+template<typename Node,typename Predicate>
+bool operator!=(
+  const duplicates_iterator<Node,Predicate>& x,
+  const duplicates_iterator<Node,Predicate>& y)
+{
+  return !(x==y);
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/has_tag.hpp b/vendor/pdalboost/boost/multi_index/detail/has_tag.hpp
new file mode 100644
index 0000000..fc4ecec
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/has_tag.hpp
@@ -0,0 +1,42 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_HAS_TAG_HPP
+#define BOOST_MULTI_INDEX_DETAIL_HAS_TAG_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/contains.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* determines whether an index type has a given tag in its tag list */
+
+template<typename Tag>
+struct has_tag
+{
+  template<typename Index>
+  struct apply:mpl::contains<BOOST_DEDUCED_TYPENAME Index::tag_list,Tag>
+  {
+  }; 
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/header_holder.hpp b/vendor/pdalboost/boost/multi_index/detail/header_holder.hpp
new file mode 100644
index 0000000..9bbb0ed
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/header_holder.hpp
@@ -0,0 +1,50 @@
+/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_HEADER_HOLDER_HPP
+#define BOOST_MULTI_INDEX_DETAIL_HEADER_HOLDER_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/noncopyable.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* A utility class used to hold a pointer to the header node.
+ * The base from member idiom is used because index classes, which are
+ * superclasses of multi_index_container, need this header in construction
+ * time. The allocation is made by the allocator of the multi_index_container
+ * class --hence, this allocator needs also be stored resorting
+ * to the base from member trick.
+ */
+
+template<typename NodeTypePtr,typename Final>
+struct header_holder:private noncopyable
+{
+  header_holder():member(final().allocate_node()){}
+  ~header_holder(){final().deallocate_node(&*member);}
+
+  NodeTypePtr member;
+
+private:
+  Final& final(){return *static_cast<Final*>(this);}
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/index_base.hpp b/vendor/pdalboost/boost/multi_index/detail/index_base.hpp
new file mode 100644
index 0000000..7415fd8
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/index_base.hpp
@@ -0,0 +1,293 @@
+/* Copyright 2003-2014 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_INDEX_BASE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_INDEX_BASE_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/allocator_utilities.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/move/core.hpp>
+#include <boost/move/utility.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/multi_index/detail/copy_map.hpp>
+#include <boost/multi_index/detail/do_not_copy_elements_tag.hpp>
+#include <boost/multi_index/detail/node_type.hpp>
+#include <boost/multi_index/detail/vartempl_support.hpp>
+#include <boost/multi_index_container_fwd.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <utility>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/multi_index/detail/index_loader.hpp>
+#include <boost/multi_index/detail/index_saver.hpp>
+#endif
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* The role of this class is threefold:
+ *   - tops the linear hierarchy of indices.
+ *   - terminates some cascading backbone function calls (insert_, etc.),
+ *   - grants access to the backbone functions of the final
+ *     multi_index_container class (for access restriction reasons, these
+ *     cannot be called directly from the index classes.)
+ */
+
+struct lvalue_tag{};
+struct rvalue_tag{};
+struct emplaced_tag{};
+
+template<typename Value,typename IndexSpecifierList,typename Allocator>
+class index_base
+{
+protected:
+  typedef index_node_base<Value,Allocator>    node_type;
+  typedef typename multi_index_node_type<
+    Value,IndexSpecifierList,Allocator>::type final_node_type;
+  typedef multi_index_container<
+    Value,IndexSpecifierList,Allocator>       final_type;
+  typedef tuples::null_type                   ctor_args_list;
+  typedef typename 
+  pdalboost::detail::allocator::rebind_to<
+    Allocator,
+    typename Allocator::value_type
+  >::type                                     final_allocator_type;
+  typedef mpl::vector0<>                      index_type_list;
+  typedef mpl::vector0<>                      iterator_type_list;
+  typedef mpl::vector0<>                      const_iterator_type_list;
+  typedef copy_map<
+    final_node_type,
+    final_allocator_type>                     copy_map_type;
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+  typedef index_saver<
+    node_type,
+    final_allocator_type>                     index_saver_type;
+  typedef index_loader<
+    node_type,
+    final_node_type,
+    final_allocator_type>                     index_loader_type;
+#endif
+
+private:
+  typedef Value                               value_type;
+
+protected:
+  explicit index_base(const ctor_args_list&,const Allocator&){}
+
+  index_base(
+    const index_base<Value,IndexSpecifierList,Allocator>&,
+    do_not_copy_elements_tag)
+  {}
+
+  void copy_(
+    const index_base<Value,IndexSpecifierList,Allocator>&,const copy_map_type&)
+  {}
+
+  final_node_type* insert_(const value_type& v,final_node_type*& x,lvalue_tag)
+  {
+    x=final().allocate_node();
+    BOOST_TRY{
+      pdalboost::detail::allocator::construct(&x->value(),v);
+    }
+    BOOST_CATCH(...){
+      final().deallocate_node(x);
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+    return x;
+  }
+
+  final_node_type* insert_(const value_type& v,final_node_type*& x,rvalue_tag)
+  {
+    x=final().allocate_node();
+    BOOST_TRY{
+      /* This shoud have used a modified, T&&-compatible version of
+       * pdalboost::detail::allocator::construct, but 
+       * <boost/detail/allocator_utilities.hpp> is too old and venerable to
+       * mess with; besides, it is a general internal utility and the imperfect
+       * perfect forwarding emulation of Boost.Move might break other libs.
+       */
+
+      new (&x->value()) value_type(pdalboost::move(const_cast<value_type&>(v)));
+    }
+    BOOST_CATCH(...){
+      final().deallocate_node(x);
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+    return x;
+  }
+
+  final_node_type* insert_(const value_type&,final_node_type*& x,emplaced_tag)
+  {
+    return x;
+  }
+
+  final_node_type* insert_(
+    const value_type& v,node_type*,final_node_type*& x,lvalue_tag)
+  {
+    return insert_(v,x,lvalue_tag());
+  }
+
+  final_node_type* insert_(
+    const value_type& v,node_type*,final_node_type*& x,rvalue_tag)
+  {
+    return insert_(v,x,rvalue_tag());
+  }
+
+  final_node_type* insert_(
+    const value_type&,node_type*,final_node_type*& x,emplaced_tag)
+  {
+    return x;
+  }
+
+  void erase_(node_type* x)
+  {
+    pdalboost::detail::allocator::destroy(&x->value());
+  }
+
+  void delete_node_(node_type* x)
+  {
+    pdalboost::detail::allocator::destroy(&x->value());
+  }
+
+  void clear_(){}
+
+  void swap_(index_base<Value,IndexSpecifierList,Allocator>&){}
+
+  void swap_elements_(index_base<Value,IndexSpecifierList,Allocator>&){}
+
+  bool replace_(const value_type& v,node_type* x,lvalue_tag)
+  {
+    x->value()=v;
+    return true;
+  }
+
+  bool replace_(const value_type& v,node_type* x,rvalue_tag)
+  {
+    x->value()=pdalboost::move(const_cast<value_type&>(v));
+    return true;
+  }
+
+  bool modify_(node_type*){return true;}
+
+  bool modify_rollback_(node_type*){return true;}
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+  /* serialization */
+
+  template<typename Archive>
+  void save_(Archive&,const unsigned int,const index_saver_type&)const{}
+
+  template<typename Archive>
+  void load_(Archive&,const unsigned int,const index_loader_type&){}
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+  /* invariant stuff */
+
+  bool invariant_()const{return true;}
+#endif
+
+  /* access to backbone memfuns of Final class */
+
+  final_type&       final(){return *static_cast<final_type*>(this);}
+  const final_type& final()const{return *static_cast<const final_type*>(this);}
+
+  final_node_type* final_header()const{return final().header();}
+
+  bool        final_empty_()const{return final().empty_();}
+  std::size_t final_size_()const{return final().size_();}
+  std::size_t final_max_size_()const{return final().max_size_();}
+
+  std::pair<final_node_type*,bool> final_insert_(const value_type& x)
+    {return final().insert_(x);}
+  std::pair<final_node_type*,bool> final_insert_rv_(const value_type& x)
+    {return final().insert_rv_(x);}
+  template<typename T>
+  std::pair<final_node_type*,bool> final_insert_ref_(const T& t)
+    {return final().insert_ref_(t);}
+  template<typename T>
+  std::pair<final_node_type*,bool> final_insert_ref_(T& t)
+    {return final().insert_ref_(t);}
+
+  template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+  std::pair<final_node_type*,bool> final_emplace_(
+    BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+  {
+    return final().emplace_(BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+  }
+
+  std::pair<final_node_type*,bool> final_insert_(
+    const value_type& x,final_node_type* position)
+    {return final().insert_(x,position);}
+  std::pair<final_node_type*,bool> final_insert_rv_(
+    const value_type& x,final_node_type* position)
+    {return final().insert_rv_(x,position);}
+  template<typename T>
+  std::pair<final_node_type*,bool> final_insert_ref_(
+    const T& t,final_node_type* position)
+    {return final().insert_ref_(t,position);}
+  template<typename T>
+  std::pair<final_node_type*,bool> final_insert_ref_(
+    T& t,final_node_type* position)
+    {return final().insert_ref_(t,position);}
+
+  template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+  std::pair<final_node_type*,bool> final_emplace_hint_(
+    final_node_type* position,BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+  {
+    return final().emplace_hint_(
+      position,BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+  }
+
+  void final_erase_(final_node_type* x){final().erase_(x);}
+
+  void final_delete_node_(final_node_type* x){final().delete_node_(x);}
+  void final_delete_all_nodes_(){final().delete_all_nodes_();}
+  void final_clear_(){final().clear_();}
+
+  void final_swap_(final_type& x){final().swap_(x);}
+
+  bool final_replace_(
+    const value_type& k,final_node_type* x)
+    {return final().replace_(k,x);}
+  bool final_replace_rv_(
+    const value_type& k,final_node_type* x)
+    {return final().replace_rv_(k,x);}
+
+  template<typename Modifier>
+  bool final_modify_(Modifier& mod,final_node_type* x)
+    {return final().modify_(mod,x);}
+
+  template<typename Modifier,typename Rollback>
+  bool final_modify_(Modifier& mod,Rollback& back,final_node_type* x)
+    {return final().modify_(mod,back,x);}
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+  void final_check_invariant_()const{final().check_invariant_();}
+#endif
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/index_loader.hpp b/vendor/pdalboost/boost/multi_index/detail/index_loader.hpp
new file mode 100644
index 0000000..1ce3a4d
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/index_loader.hpp
@@ -0,0 +1,139 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_INDEX_LOADER_HPP
+#define BOOST_MULTI_INDEX_DETAIL_INDEX_LOADER_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/multi_index/detail/auto_space.hpp>
+#include <boost/multi_index/detail/raw_ptr.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/throw_exception.hpp> 
+#include <cstddef>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Counterpart of index_saver (check index_saver.hpp for serialization
+ * details.)* multi_index_container is in charge of supplying the info about
+ * the base sequence, and each index can subsequently load itself using the
+ * const interface of index_loader.
+ */
+
+template<typename Node,typename FinalNode,typename Allocator>
+class index_loader:private noncopyable
+{
+public:
+  index_loader(const Allocator& al,std::size_t size):
+    spc(al,size),size_(size),n(0),sorted(false)
+  {
+  }
+
+  template<class Archive>
+  void add(Node* node,Archive& ar,const unsigned int)
+  {
+    ar>>serialization::make_nvp("position",*node);
+    entries()[n++]=node;
+  }
+
+  template<class Archive>
+  void add_track(Node* node,Archive& ar,const unsigned int)
+  {
+    ar>>serialization::make_nvp("position",*node);
+  }
+
+  /* A rearranger is passed two nodes, and is expected to
+   * reposition the second after the first.
+   * If the first node is 0, then the second should be moved
+   * to the beginning of the sequence.
+   */
+
+  template<typename Rearranger,class Archive>
+  void load(Rearranger r,Archive& ar,const unsigned int)const
+  {
+    FinalNode* prev=unchecked_load_node(ar);
+    if(!prev)return;
+
+    if(!sorted){
+      std::sort(entries(),entries()+size_);
+      sorted=true;
+    }
+
+    check_node(prev);
+
+    for(;;){
+      for(;;){
+        FinalNode* node=load_node(ar);
+        if(!node)break;
+
+        if(node==prev)prev=0;
+        r(prev,node);
+
+        prev=node;
+      }
+      prev=load_node(ar);
+      if(!prev)break;
+    }
+  }
+
+private:
+  Node** entries()const{return raw_ptr<Node**>(spc.data());}
+
+  /* We try to delay sorting as much as possible just in case it
+   * is not necessary, hence this version of load_node.
+   */
+
+  template<class Archive>
+  FinalNode* unchecked_load_node(Archive& ar)const
+  {
+    Node* node=0;
+    ar>>serialization::make_nvp("pointer",node);
+    return static_cast<FinalNode*>(node);
+  }
+
+  template<class Archive>
+  FinalNode* load_node(Archive& ar)const
+  {
+    Node* node=0;
+    ar>>serialization::make_nvp("pointer",node);
+    check_node(node);
+    return static_cast<FinalNode*>(node);
+  }
+
+  void check_node(Node* node)const
+  {
+    if(node!=0&&!std::binary_search(entries(),entries()+size_,node)){
+      throw_exception(
+        archive::archive_exception(
+          archive::archive_exception::other_exception));
+    }
+  }
+
+  auto_space<Node*,Allocator> spc;
+  std::size_t                 size_;
+  std::size_t                 n;
+  mutable bool                sorted;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/index_matcher.hpp b/vendor/pdalboost/boost/multi_index/detail/index_matcher.hpp
new file mode 100644
index 0000000..e9c198c
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/index_matcher.hpp
@@ -0,0 +1,249 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_INDEX_MATCHER_HPP
+#define BOOST_MULTI_INDEX_DETAIL_INDEX_MATCHER_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/noncopyable.hpp>
+#include <boost/multi_index/detail/auto_space.hpp>
+#include <boost/multi_index/detail/raw_ptr.hpp>
+#include <cstddef>
+#include <functional>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* index_matcher compares a sequence of elements against a
+ * base sequence, identifying those elements that belong to the
+ * longest subsequence which is ordered with respect to the base.
+ * For instance, if the base sequence is:
+ *
+ *   0 1 2 3 4 5 6 7 8 9
+ *
+ * and the compared sequence (not necesarilly the same length):
+ *
+ *   1 4 2 3 0 7 8 9
+ *
+ * the elements of the longest ordered subsequence are:
+ *
+ *   1 2 3 7 8 9
+ * 
+ * The algorithm for obtaining such a subsequence is called
+ * Patience Sorting, described in ch. 1 of:
+ *   Aldous, D., Diaconis, P.: "Longest increasing subsequences: from
+ *   patience sorting to the Baik-Deift-Johansson Theorem", Bulletin
+ *   of the American Mathematical Society, vol. 36, no 4, pp. 413-432,
+ *   July 1999.
+ *   http://www.ams.org/bull/1999-36-04/S0273-0979-99-00796-X/
+ *   S0273-0979-99-00796-X.pdf
+ *
+ * This implementation is not fully generic since it assumes that
+ * the sequences given are pointed to by index iterators (having a
+ * get_node() memfun.)
+ */
+
+namespace index_matcher{
+
+/* The algorithm stores the nodes of the base sequence and a number
+ * of "piles" that are dynamically updated during the calculation
+ * stage. From a logical point of view, nodes form an independent
+ * sequence from piles. They are stored together so as to minimize
+ * allocated memory.
+ */
+
+struct entry
+{
+  entry(void* node_,std::size_t pos_=0):node(node_),pos(pos_){}
+
+  /* node stuff */
+
+  void*       node;
+  std::size_t pos;
+  entry*      previous;
+  bool        ordered;
+
+  struct less_by_node
+  {
+    bool operator()(
+      const entry& x,const entry& y)const
+    {
+      return std::less<void*>()(x.node,y.node);
+    }
+  };
+
+  /* pile stuff */
+
+  std::size_t pile_top;
+  entry*      pile_top_entry;
+
+  struct less_by_pile_top
+  {
+    bool operator()(
+      const entry& x,const entry& y)const
+    {
+      return x.pile_top<y.pile_top;
+    }
+  };
+};
+
+/* common code operating on void *'s */
+
+template<typename Allocator>
+class algorithm_base:private noncopyable
+{
+protected:
+  algorithm_base(const Allocator& al,std::size_t size):
+    spc(al,size),size_(size),n_(0),sorted(false)
+  {
+  }
+
+  void add(void* node)
+  {
+    entries()[n_]=entry(node,n_);
+    ++n_;
+  }
+
+  void begin_algorithm()const
+  {
+    if(!sorted){
+      std::sort(entries(),entries()+size_,entry::less_by_node());
+      sorted=true;
+    }
+    num_piles=0;
+  }
+
+  void add_node_to_algorithm(void* node)const
+  {
+    entry* ent=
+      std::lower_bound(
+        entries(),entries()+size_,
+        entry(node),entry::less_by_node()); /* localize entry */
+    ent->ordered=false;
+    std::size_t n=ent->pos;                 /* get its position */
+
+    entry dummy(0);
+    dummy.pile_top=n;
+
+    entry* pile_ent=                        /* find the first available pile */
+      std::lower_bound(                     /* to stack the entry            */
+        entries(),entries()+num_piles,
+        dummy,entry::less_by_pile_top());
+
+    pile_ent->pile_top=n;                   /* stack the entry */
+    pile_ent->pile_top_entry=ent;        
+
+    /* if not the first pile, link entry to top of the preceding pile */
+    if(pile_ent>&entries()[0]){ 
+      ent->previous=(pile_ent-1)->pile_top_entry;
+    }
+
+    if(pile_ent==&entries()[num_piles]){    /* new pile? */
+      ++num_piles;
+    }
+  }
+
+  void finish_algorithm()const
+  {
+    if(num_piles>0){
+      /* Mark those elements which are in their correct position, i.e. those
+       * belonging to the longest increasing subsequence. These are those
+       * elements linked from the top of the last pile.
+       */
+
+      entry* ent=entries()[num_piles-1].pile_top_entry;
+      for(std::size_t n=num_piles;n--;){
+        ent->ordered=true;
+        ent=ent->previous;
+      }
+    }
+  }
+
+  bool is_ordered(void * node)const
+  {
+    return std::lower_bound(
+      entries(),entries()+size_,
+      entry(node),entry::less_by_node())->ordered;
+  }
+
+private:
+  entry* entries()const{return raw_ptr<entry*>(spc.data());}
+
+  auto_space<entry,Allocator> spc;
+  std::size_t                 size_;
+  std::size_t                 n_;
+  mutable bool                sorted;
+  mutable std::size_t         num_piles;
+};
+
+/* The algorithm has three phases:
+ *   - Initialization, during which the nodes of the base sequence are added.
+ *   - Execution.
+ *   - Results querying, through the is_ordered memfun.
+ */
+
+template<typename Node,typename Allocator>
+class algorithm:private algorithm_base<Allocator>
+{
+  typedef algorithm_base<Allocator> super;
+
+public:
+  algorithm(const Allocator& al,std::size_t size):super(al,size){}
+
+  void add(Node* node)
+  {
+    super::add(node);
+  }
+
+  template<typename IndexIterator>
+  void execute(IndexIterator first,IndexIterator last)const
+  {
+    super::begin_algorithm();
+
+    for(IndexIterator it=first;it!=last;++it){
+      add_node_to_algorithm(get_node(it));
+    }
+
+    super::finish_algorithm();
+  }
+
+  bool is_ordered(Node* node)const
+  {
+    return super::is_ordered(node);
+  }
+
+private:
+  void add_node_to_algorithm(Node* node)const
+  {
+    super::add_node_to_algorithm(node);
+  }
+
+  template<typename IndexIterator>
+  static Node* get_node(IndexIterator it)
+  {
+    return static_cast<Node*>(it.get_node());
+  }
+};
+
+} /* namespace multi_index::detail::index_matcher */
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/index_node_base.hpp b/vendor/pdalboost/boost/multi_index/detail/index_node_base.hpp
new file mode 100644
index 0000000..bcaad1e
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/index_node_base.hpp
@@ -0,0 +1,131 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_INDEX_NODE_BASE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_INDEX_NODE_BASE_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/type_traits/aligned_storage.hpp>
+#include <boost/type_traits/alignment_of.hpp> 
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/archive/archive_exception.hpp>
+#include <boost/serialization/access.hpp>
+#include <boost/throw_exception.hpp> 
+#endif
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* index_node_base tops the node hierarchy of multi_index_container. It holds
+ * the value of the element contained.
+ */
+
+template<typename Value>
+struct pod_value_holder
+{
+  typename aligned_storage<
+    sizeof(Value),
+    alignment_of<Value>::value
+  >::type                      space;
+};
+
+template<typename Value,typename Allocator>
+struct index_node_base:private pod_value_holder<Value>
+{
+  typedef index_node_base base_type; /* used for serialization purposes */
+  typedef Value           value_type;
+  typedef Allocator       allocator_type;
+
+  value_type& value()
+  {
+    return *reinterpret_cast<value_type*>(&this->space);
+  }
+
+  const value_type& value()const
+  {
+    return *reinterpret_cast<const value_type*>(&this->space);
+  }
+
+  static index_node_base* from_value(const value_type* p)
+  {
+    return static_cast<index_node_base *>(
+      reinterpret_cast<pod_value_holder<Value>*>( /* std 9.2.17 */
+        const_cast<value_type*>(p))); 
+  }
+
+private:
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+  friend class pdalboost::serialization::access;
+  
+  /* nodes do not emit any kind of serialization info. They are
+   * fed to Boost.Serialization so that pointers to nodes are
+   * tracked correctly.
+   */
+
+  template<class Archive>
+  void serialize(Archive&,const unsigned int)
+  {
+  }
+#endif
+};
+
+template<typename Node,typename Value>
+Node* node_from_value(const Value* p)
+{
+  typedef typename Node::allocator_type allocator_type;
+  return static_cast<Node*>(
+    index_node_base<Value,allocator_type>::from_value(p));
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+/* Index nodes never get constructed directly by Boost.Serialization,
+ * as archives are always fed pointers to previously existent
+ * nodes. So, if this is called it means we are dealing with a
+ * somehow invalid archive.
+ */
+
+#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+namespace serialization{
+#else
+namespace multi_index{
+namespace detail{
+#endif
+
+template<class Archive,typename Value,typename Allocator>
+inline void load_construct_data(
+  Archive&,pdalboost::multi_index::detail::index_node_base<Value,Allocator>*,
+  const unsigned int)
+{
+  throw_exception(
+    archive::archive_exception(archive::archive_exception::other_exception));
+}
+
+#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
+} /* namespace serialization */
+#else
+} /* namespace multi_index::detail */
+} /* namespace multi_index */
+#endif
+
+#endif
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/index_saver.hpp b/vendor/pdalboost/boost/multi_index/detail/index_saver.hpp
new file mode 100644
index 0000000..78bc6e3
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/index_saver.hpp
@@ -0,0 +1,135 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_INDEX_SAVER_HPP
+#define BOOST_MULTI_INDEX_DETAIL_INDEX_SAVER_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/multi_index/detail/index_matcher.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <cstddef>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* index_saver accepts a base sequence of previously saved elements
+ * and saves a possibly reordered subsequence in an efficient manner,
+ * serializing only the information needed to rearrange the subsequence
+ * based on the original order of the base.
+ * multi_index_container is in charge of supplying the info about the
+ * base sequence, and each index can subsequently save itself using the
+ * const interface of index_saver.
+ */
+
+template<typename Node,typename Allocator>
+class index_saver:private noncopyable
+{
+public:
+  index_saver(const Allocator& al,std::size_t size):alg(al,size){}
+
+  template<class Archive>
+  void add(Node* node,Archive& ar,const unsigned int)
+  {
+    ar<<serialization::make_nvp("position",*node);
+    alg.add(node);
+  }
+
+  template<class Archive>
+  void add_track(Node* node,Archive& ar,const unsigned int)
+  {
+    ar<<serialization::make_nvp("position",*node);
+  }
+
+  template<typename IndexIterator,class Archive>
+  void save(
+    IndexIterator first,IndexIterator last,Archive& ar,
+    const unsigned int)const
+  {
+    /* calculate ordered positions */
+
+    alg.execute(first,last);
+
+    /* Given a consecutive subsequence of displaced elements
+     * x1,...,xn, the following information is serialized:
+     *
+     *   p0,p1,...,pn,0
+     *
+     * where pi is a pointer to xi and p0 is a pointer to the element
+     * preceding x1. Crealy, from this information is possible to
+     * restore the original order on loading time. If x1 is the first
+     * element in the sequence, the following is serialized instead:
+     *
+     *   p1,p1,...,pn,0
+     *
+     * For each subsequence of n elements, n+2 pointers are serialized.
+     * An optimization policy is applied: consider for instance the
+     * sequence
+     *
+     *   a,B,c,D
+     * 
+     * where B and D are displaced, but c is in its correct position.
+     * Applying the schema described above we would serialize 6 pointers:
+     *
+     *  p(a),p(B),0
+     *  p(c),p(D),0
+     * 
+     * but this can be reduced to 5 pointers by treating c as a displaced
+     * element:
+     *
+     *  p(a),p(B),p(c),p(D),0
+     */
+
+    std::size_t last_saved=3; /* distance to last pointer saved */
+    for(IndexIterator it=first,prev=first;it!=last;prev=it++,++last_saved){
+      if(!alg.is_ordered(get_node(it))){
+        if(last_saved>1)save_node(get_node(prev),ar);
+        save_node(get_node(it),ar);
+        last_saved=0;
+      }
+      else if(last_saved==2)save_node(null_node(),ar);
+    }
+    if(last_saved<=2)save_node(null_node(),ar);
+
+    /* marks the end of the serialization info for [first,last) */
+
+    save_node(null_node(),ar);
+  }
+
+private:
+  template<typename IndexIterator>
+  static Node* get_node(IndexIterator it)
+  {
+    return it.get_node();
+  }
+
+  static Node* null_node(){return 0;}
+
+  template<typename Archive>
+  static void save_node(Node* node,Archive& ar)
+  {
+    ar<<serialization::make_nvp("pointer",node);
+  }
+
+  index_matcher::algorithm<Node,Allocator> alg;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/invariant_assert.hpp b/vendor/pdalboost/boost/multi_index/detail/invariant_assert.hpp
new file mode 100644
index 0000000..c6c547c
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/invariant_assert.hpp
@@ -0,0 +1,21 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_INVARIANT_ASSERT_HPP
+#define BOOST_MULTI_INDEX_DETAIL_INVARIANT_ASSERT_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#if !defined(BOOST_MULTI_INDEX_INVARIANT_ASSERT)
+#include <boost/assert.hpp>
+#define BOOST_MULTI_INDEX_INVARIANT_ASSERT BOOST_ASSERT
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/is_index_list.hpp b/vendor/pdalboost/boost/multi_index/detail/is_index_list.hpp
new file mode 100644
index 0000000..118172a
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/is_index_list.hpp
@@ -0,0 +1,40 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_IS_INDEX_LIST_HPP
+#define BOOST_MULTI_INDEX_DETAIL_IS_INDEX_LIST_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/empty.hpp>
+#include <boost/mpl/is_sequence.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+template<typename T>
+struct is_index_list
+{
+  BOOST_STATIC_CONSTANT(bool,mpl_sequence=mpl::is_sequence<T>::value);
+  BOOST_STATIC_CONSTANT(bool,non_empty=!mpl::empty<T>::value);
+  BOOST_STATIC_CONSTANT(bool,value=mpl_sequence&&non_empty);
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/is_transparent.hpp b/vendor/pdalboost/boost/multi_index/detail/is_transparent.hpp
new file mode 100644
index 0000000..39bff12
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/is_transparent.hpp
@@ -0,0 +1,135 @@
+/* Copyright 2003-2014 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_IS_TRANSPARENT_HPP
+#define BOOST_MULTI_INDEX_DETAIL_IS_TRANSPARENT_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Metafunction that checks if f(arg,arg2) executes without argument type
+ * conversion. By default (i.e. when it cannot be determined) it evaluates to
+ * true.
+ */
+
+template<typename F,typename Arg1,typename Arg2,typename=void>
+struct is_transparent:mpl::true_{};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#if !defined(BOOST_NO_SFINAE)&&!defined(BOOST_NO_SFINAE_EXPR)&& \
+    !defined(BOOST_NO_CXX11_DECLTYPE)&& \
+    (defined(BOOST_NO_CXX11_FINAL)||defined(BOOST_IS_FINAL))
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/function_traits.hpp>
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_final.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/utility/declval.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+struct not_is_transparent_result_type{};
+
+template<typename F,typename Arg1,typename Arg2>
+struct is_transparent_class_helper:F
+{
+  using F::operator();
+  template<typename T,typename Q>
+  not_is_transparent_result_type operator()(const T&,const Q&)const;
+};
+
+template<typename F,typename Arg1,typename Arg2,typename=void>
+struct is_transparent_class:mpl::true_{};
+
+template<typename F,typename Arg1,typename Arg2>
+struct is_transparent_class<
+  F,Arg1,Arg2,
+  typename enable_if<
+    is_same<
+      decltype(
+        declval<const is_transparent_class_helper<F,Arg1,Arg2> >()(
+          declval<const Arg1&>(),declval<const Arg2&>())
+      ),
+      not_is_transparent_result_type
+    >
+  >::type
+>:mpl::false_{};
+
+template<typename F,typename Arg1,typename Arg2>
+struct is_transparent<
+  F,Arg1,Arg2,
+  typename enable_if<
+    mpl::and_<
+      is_class<F>,
+      mpl::not_<is_final<F> > /* is_transparent_class_helper derives from F */
+    >
+  >::type
+>:is_transparent_class<F,Arg1,Arg2>{};
+
+template<typename F,typename Arg1,typename Arg2,typename=void>
+struct is_transparent_function:mpl::true_{};
+
+template<typename F,typename Arg1,typename Arg2>
+struct is_transparent_function<
+  F,Arg1,Arg2,
+  typename enable_if<
+    mpl::or_<
+      mpl::not_<mpl::or_<
+        is_same<typename function_traits<F>::arg1_type,const Arg1&>,
+        is_same<typename function_traits<F>::arg1_type,Arg1>
+      > >,
+      mpl::not_<mpl::or_<
+        is_same<typename function_traits<F>::arg2_type,const Arg2&>,
+        is_same<typename function_traits<F>::arg2_type,Arg2>
+      > >
+    >
+  >::type
+>:mpl::false_{};
+
+template<typename F,typename Arg1,typename Arg2>
+struct is_transparent<
+  F,Arg1,Arg2,
+  typename enable_if<
+    is_function<typename remove_pointer<F>::type>
+  >::type
+>:is_transparent_function<typename remove_pointer<F>::type,Arg1,Arg2>{};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/iter_adaptor.hpp b/vendor/pdalboost/boost/multi_index/detail/iter_adaptor.hpp
new file mode 100644
index 0000000..31e1066
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/iter_adaptor.hpp
@@ -0,0 +1,321 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_ITER_ADAPTOR_HPP
+#define BOOST_MULTI_INDEX_DETAIL_ITER_ADAPTOR_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/apply.hpp>
+#include <boost/operators.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Poor man's version of pdalboost::iterator_adaptor. Used instead of the
+ * original as compile times for the latter are significantly higher.
+ * The interface is not replicated exactly, only to the extent necessary
+ * for internal consumption.
+ */
+
+/* NB. The purpose of the (non-inclass) global operators ==, < and - defined
+ * above is to partially alleviate a problem of MSVC++ 6.0 by * which
+ * friend-injected operators on T are not visible if T is instantiated only
+ * in template code where T is a dependent type.
+ */
+
+class iter_adaptor_access
+{
+public:
+  template<class Class>
+    static typename Class::reference dereference(const Class& x)
+  {
+    return x.dereference();
+  }
+
+  template<class Class>
+  static bool equal(const Class& x,const Class& y)
+  {
+    return x.equal(y);
+  }
+
+  template<class Class>
+  static void increment(Class& x)
+  {
+    x.increment();
+  }
+
+  template<class Class>
+  static void decrement(Class& x)
+  {
+    x.decrement();
+  }
+
+  template<class Class>
+  static void advance(Class& x,typename Class::difference_type n)
+  {
+    x.advance(n);
+  }
+
+  template<class Class>
+  static typename Class::difference_type distance_to(
+    const Class& x,const Class& y)
+  {
+    return x.distance_to(y);
+  }
+};
+
+template<typename Category>
+struct iter_adaptor_selector;
+
+template<class Derived,class Base>
+class forward_iter_adaptor_base:
+  public forward_iterator_helper<
+    Derived,
+    typename Base::value_type,
+    typename Base::difference_type,
+    typename Base::pointer,
+    typename Base::reference>
+{
+public:
+  typedef typename Base::reference reference;
+
+  reference operator*()const
+  {
+    return iter_adaptor_access::dereference(final());
+  }
+
+  friend bool operator==(const Derived& x,const Derived& y)
+  {
+    return iter_adaptor_access::equal(x,y);
+  }
+
+  Derived& operator++()
+  {
+    iter_adaptor_access::increment(final());
+    return final();
+  }
+
+private:
+  Derived& final(){return *static_cast<Derived*>(this);}
+  const Derived& final()const{return *static_cast<const Derived*>(this);}
+};
+
+template<class Derived,class Base>
+bool operator==(
+  const forward_iter_adaptor_base<Derived,Base>& x,
+  const forward_iter_adaptor_base<Derived,Base>& y)
+{
+  return iter_adaptor_access::equal(
+    static_cast<const Derived&>(x),static_cast<const Derived&>(y));
+}
+
+template<>
+struct iter_adaptor_selector<std::forward_iterator_tag>
+{
+  template<class Derived,class Base>
+  struct apply
+  {
+    typedef forward_iter_adaptor_base<Derived,Base> type;
+  };
+};
+
+template<class Derived,class Base>
+class bidirectional_iter_adaptor_base:
+  public bidirectional_iterator_helper<
+    Derived,
+    typename Base::value_type,
+    typename Base::difference_type,
+    typename Base::pointer,
+    typename Base::reference>
+{
+public:
+  typedef typename Base::reference reference;
+
+  reference operator*()const
+  {
+    return iter_adaptor_access::dereference(final());
+  }
+
+  friend bool operator==(const Derived& x,const Derived& y)
+  {
+    return iter_adaptor_access::equal(x,y);
+  }
+
+  Derived& operator++()
+  {
+    iter_adaptor_access::increment(final());
+    return final();
+  }
+
+  Derived& operator--()
+  {
+    iter_adaptor_access::decrement(final());
+    return final();
+  }
+
+private:
+  Derived& final(){return *static_cast<Derived*>(this);}
+  const Derived& final()const{return *static_cast<const Derived*>(this);}
+};
+
+template<class Derived,class Base>
+bool operator==(
+  const bidirectional_iter_adaptor_base<Derived,Base>& x,
+  const bidirectional_iter_adaptor_base<Derived,Base>& y)
+{
+  return iter_adaptor_access::equal(
+    static_cast<const Derived&>(x),static_cast<const Derived&>(y));
+}
+
+template<>
+struct iter_adaptor_selector<std::bidirectional_iterator_tag>
+{
+  template<class Derived,class Base>
+  struct apply
+  {
+    typedef bidirectional_iter_adaptor_base<Derived,Base> type;
+  };
+};
+
+template<class Derived,class Base>
+class random_access_iter_adaptor_base:
+  public random_access_iterator_helper<
+    Derived,
+    typename Base::value_type,
+    typename Base::difference_type,
+    typename Base::pointer,
+    typename Base::reference>
+{
+public:
+  typedef typename Base::reference       reference;
+  typedef typename Base::difference_type difference_type;
+
+  reference operator*()const
+  {
+    return iter_adaptor_access::dereference(final());
+  }
+
+  friend bool operator==(const Derived& x,const Derived& y)
+  {
+    return iter_adaptor_access::equal(x,y);
+  }
+
+  friend bool operator<(const Derived& x,const Derived& y)
+  {
+    return iter_adaptor_access::distance_to(x,y)>0;
+  }
+
+  Derived& operator++()
+  {
+    iter_adaptor_access::increment(final());
+    return final();
+  }
+
+  Derived& operator--()
+  {
+    iter_adaptor_access::decrement(final());
+    return final();
+  }
+
+  Derived& operator+=(difference_type n)
+  {
+    iter_adaptor_access::advance(final(),n);
+    return final();
+  }
+
+  Derived& operator-=(difference_type n)
+  {
+    iter_adaptor_access::advance(final(),-n);
+    return final();
+  }
+
+  friend difference_type operator-(const Derived& x,const Derived& y)
+  {
+    return iter_adaptor_access::distance_to(y,x);
+  }
+
+private:
+  Derived& final(){return *static_cast<Derived*>(this);}
+  const Derived& final()const{return *static_cast<const Derived*>(this);}
+};
+
+template<class Derived,class Base>
+bool operator==(
+  const random_access_iter_adaptor_base<Derived,Base>& x,
+  const random_access_iter_adaptor_base<Derived,Base>& y)
+{
+  return iter_adaptor_access::equal(
+    static_cast<const Derived&>(x),static_cast<const Derived&>(y));
+}
+
+template<class Derived,class Base>
+bool operator<(
+  const random_access_iter_adaptor_base<Derived,Base>& x,
+  const random_access_iter_adaptor_base<Derived,Base>& y)
+{
+  return iter_adaptor_access::distance_to(
+    static_cast<const Derived&>(x),static_cast<const Derived&>(y))>0;
+}
+
+template<class Derived,class Base>
+typename random_access_iter_adaptor_base<Derived,Base>::difference_type
+operator-(
+  const random_access_iter_adaptor_base<Derived,Base>& x,
+  const random_access_iter_adaptor_base<Derived,Base>& y)
+{
+  return iter_adaptor_access::distance_to(
+    static_cast<const Derived&>(y),static_cast<const Derived&>(x));
+}
+
+template<>
+struct iter_adaptor_selector<std::random_access_iterator_tag>
+{
+  template<class Derived,class Base>
+  struct apply
+  {
+    typedef random_access_iter_adaptor_base<Derived,Base> type;
+  };
+};
+
+template<class Derived,class Base>
+struct iter_adaptor_base
+{
+  typedef iter_adaptor_selector<
+    typename Base::iterator_category> selector;
+  typedef typename mpl::apply2<
+    selector,Derived,Base>::type      type;
+};
+
+template<class Derived,class Base>
+class iter_adaptor:public iter_adaptor_base<Derived,Base>::type
+{
+protected:
+  iter_adaptor(){}
+  explicit iter_adaptor(const Base& b_):b(b_){}
+
+  const Base& base_reference()const{return b;}
+  Base&       base_reference(){return b;}
+
+private:
+  Base b;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/modify_key_adaptor.hpp b/vendor/pdalboost/boost/multi_index/detail/modify_key_adaptor.hpp
new file mode 100644
index 0000000..e8fbeb3
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/modify_key_adaptor.hpp
@@ -0,0 +1,49 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_MODIFY_KEY_ADAPTOR_HPP
+#define BOOST_MULTI_INDEX_DETAIL_MODIFY_KEY_ADAPTOR_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Functional adaptor to resolve modify_key as a call to modify.
+ * Preferred over compose_f_gx and stuff cause it eliminates problems
+ * with references to references, dealing with function pointers, etc.
+ */
+
+template<typename Fun,typename Value,typename KeyFromValue>
+struct modify_key_adaptor
+{
+
+  modify_key_adaptor(Fun f_,KeyFromValue kfv_):f(f_),kfv(kfv_){}
+
+  void operator()(Value& x)
+  {
+    f(kfv(x));
+  }
+
+private:
+  Fun          f;
+  KeyFromValue kfv;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/no_duplicate_tags.hpp b/vendor/pdalboost/boost/multi_index/detail/no_duplicate_tags.hpp
new file mode 100644
index 0000000..f70f8f0
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/no_duplicate_tags.hpp
@@ -0,0 +1,97 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_NO_DUPLICATE_TAGS_HPP
+#define BOOST_MULTI_INDEX_DETAIL_NO_DUPLICATE_TAGS_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/set/set0.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* no_duplicate_tags check at compile-time that a tag list
+ * has no duplicate tags.
+ * The algorithm deserves some explanation: tags
+ * are sequentially inserted into a mpl::set if they were
+ * not already present. Due to the magic of mpl::set
+ * (mpl::has_key is contant time), this operation takes linear
+ * time, and even MSVC++ 6.5 handles it gracefully (other obvious
+ * solutions are quadratic.)
+ */
+
+struct duplicate_tag_mark{};
+
+struct duplicate_tag_marker
+{
+  template <typename MplSet,typename Tag>
+  struct apply
+  {
+    typedef mpl::s_item<
+      typename mpl::if_<mpl::has_key<MplSet,Tag>,duplicate_tag_mark,Tag>::type,
+      MplSet
+    > type;
+  };
+};
+
+template<typename TagList>
+struct no_duplicate_tags
+{
+  typedef typename mpl::fold<
+    TagList,
+    mpl::set0<>,
+    duplicate_tag_marker
+  >::type aux;
+ 
+  BOOST_STATIC_CONSTANT(
+    bool,value=!(mpl::has_key<aux,duplicate_tag_mark>::value));
+};
+
+/* Variant for an index list: duplication is checked
+ * across all the indices.
+ */
+
+struct duplicate_tag_list_marker
+{
+  template <typename MplSet,typename Index>
+  struct apply:mpl::fold<
+    BOOST_DEDUCED_TYPENAME Index::tag_list,
+    MplSet,
+    duplicate_tag_marker>
+  {
+  };
+};
+
+template<typename IndexList>
+struct no_duplicate_tags_in_index_list
+{
+  typedef typename mpl::fold<
+    IndexList,
+    mpl::set0<>,
+    duplicate_tag_list_marker
+  >::type aux;
+ 
+  BOOST_STATIC_CONSTANT(
+    bool,value=!(mpl::has_key<aux,duplicate_tag_mark>::value));
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/node_type.hpp b/vendor/pdalboost/boost/multi_index/detail/node_type.hpp
new file mode 100644
index 0000000..900fa10
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/node_type.hpp
@@ -0,0 +1,66 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_NODE_TYPE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_NODE_TYPE_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/bind.hpp>
+#include <boost/mpl/reverse_iter_fold.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/multi_index_container_fwd.hpp>
+#include <boost/multi_index/detail/header_holder.hpp>
+#include <boost/multi_index/detail/index_node_base.hpp>
+#include <boost/multi_index/detail/is_index_list.hpp>
+#include <boost/static_assert.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* MPL machinery to construct the internal node type associated to an
+ * index list.
+ */
+
+struct index_node_applier
+{
+  template<typename IndexSpecifierIterator,typename Super>
+  struct apply
+  {
+    typedef typename mpl::deref<IndexSpecifierIterator>::type index_specifier;
+    typedef typename index_specifier::
+      BOOST_NESTED_TEMPLATE node_class<Super>::type type;
+  }; 
+};
+
+template<typename Value,typename IndexSpecifierList,typename Allocator>
+struct multi_index_node_type
+{
+  BOOST_STATIC_ASSERT(detail::is_index_list<IndexSpecifierList>::value);
+
+  typedef typename mpl::reverse_iter_fold<
+    IndexSpecifierList,
+    index_node_base<Value,Allocator>,
+    mpl::bind2<index_node_applier,mpl::_2,mpl::_1>
+  >::type type;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/ord_index_args.hpp b/vendor/pdalboost/boost/multi_index/detail/ord_index_args.hpp
new file mode 100644
index 0000000..47e38fc
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/ord_index_args.hpp
@@ -0,0 +1,83 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_ARGS_HPP
+#define BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_ARGS_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/multi_index/tag.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <functional>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Oredered index specifiers can be instantiated in two forms:
+ *
+ *   (ordered_unique|ordered_non_unique)<
+ *     KeyFromValue,Compare=std::less<KeyFromValue::result_type> >
+ *   (ordered_unique|ordered_non_unique)<
+ *     TagList,KeyFromValue,Compare=std::less<KeyFromValue::result_type> >
+ *
+ * index_args implements the machinery to accept this argument-dependent
+ * polymorphism.
+ */
+
+template<typename KeyFromValue>
+struct index_args_default_compare
+{
+  typedef std::less<typename KeyFromValue::result_type> type;
+};
+
+template<typename Arg1,typename Arg2,typename Arg3>
+struct ordered_index_args
+{
+  typedef is_tag<Arg1> full_form;
+
+  typedef typename mpl::if_<
+    full_form,
+    Arg1,
+    tag< > >::type                                   tag_list_type;
+  typedef typename mpl::if_<
+    full_form,
+    Arg2,
+    Arg1>::type                                      key_from_value_type;
+  typedef typename mpl::if_<
+    full_form,
+    Arg3,
+    Arg2>::type                                      supplied_compare_type;
+  typedef typename mpl::eval_if<
+    mpl::is_na<supplied_compare_type>,
+    index_args_default_compare<key_from_value_type>,
+    mpl::identity<supplied_compare_type>
+  >::type                                            compare_type;
+
+  BOOST_STATIC_ASSERT(is_tag<tag_list_type>::value);
+  BOOST_STATIC_ASSERT(!mpl::is_na<key_from_value_type>::value);
+  BOOST_STATIC_ASSERT(!mpl::is_na<compare_type>::value);
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/ord_index_impl.hpp b/vendor/pdalboost/boost/multi_index/detail/ord_index_impl.hpp
new file mode 100644
index 0000000..831a40d
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/ord_index_impl.hpp
@@ -0,0 +1,1567 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ *
+ * The internal implementation of red-black trees is based on that of SGI STL
+ * stl_tree.h file: 
+ *
+ * Copyright (c) 1996,1997
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.  Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied warranty.
+ *
+ *
+ * Copyright (c) 1994
+ * Hewlett-Packard Company
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.  Hewlett-Packard Company makes no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied warranty.
+ *
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_IMPL_HPP
+#define BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_IMPL_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/call_traits.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/foreach_fwd.hpp>
+#include <boost/iterator/reverse_iterator.hpp>
+#include <boost/move/core.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/multi_index/detail/access_specifier.hpp>
+#include <boost/multi_index/detail/bidir_node_iterator.hpp>
+#include <boost/multi_index/detail/do_not_copy_elements_tag.hpp>
+#include <boost/multi_index/detail/index_node_base.hpp>
+#include <boost/multi_index/detail/modify_key_adaptor.hpp>
+#include <boost/multi_index/detail/ord_index_node.hpp>
+#include <boost/multi_index/detail/ord_index_ops.hpp>
+#include <boost/multi_index/detail/safe_mode.hpp>
+#include <boost/multi_index/detail/scope_guard.hpp>
+#include <boost/multi_index/detail/unbounded.hpp>
+#include <boost/multi_index/detail/value_compare.hpp>
+#include <boost/multi_index/detail/vartempl_support.hpp>
+#include <boost/multi_index/detail/ord_index_impl_fwd.hpp>
+#include <boost/ref.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <utility>
+
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+#include <initializer_list>
+#endif
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/archive/archive_exception.hpp>
+#include <boost/bind.hpp>
+#include <boost/multi_index/detail/duplicates_iterator.hpp>
+#include <boost/throw_exception.hpp> 
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+#define BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT_OF(x)                    \
+  detail::scope_guard BOOST_JOIN(check_invariant_,__LINE__)=                 \
+    detail::make_obj_guard(x,&ordered_index_impl::check_invariant_);         \
+  BOOST_JOIN(check_invariant_,__LINE__).touch();
+#define BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT                          \
+  BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT_OF(*this)
+#else
+#define BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT_OF(x)
+#define BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT
+#endif
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* ordered_index adds a layer of ordered indexing to a given Super and accepts
+ * an augmenting policy for optional addition of order statistics.
+ */
+
+/* Most of the implementation of unique and non-unique indices is
+ * shared. We tell from one another on instantiation time by using
+ * these tags.
+ */
+
+struct ordered_unique_tag{};
+struct ordered_non_unique_tag{};
+
+template<
+  typename KeyFromValue,typename Compare,
+  typename SuperMeta,typename TagList,typename Category,typename AugmentPolicy
+>
+class ordered_index;
+
+template<
+  typename KeyFromValue,typename Compare,
+  typename SuperMeta,typename TagList,typename Category,typename AugmentPolicy
+>
+class ordered_index_impl:
+  BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS SuperMeta::type
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+  ,public safe_mode::safe_container<
+    ordered_index_impl<
+      KeyFromValue,Compare,SuperMeta,TagList,Category,AugmentPolicy> >
+#endif
+
+{ 
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+    BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+/* The "ISO C++ Template Parser" option in CW8.3 has a problem with the
+ * lifetime of const references bound to temporaries --precisely what
+ * scopeguards are.
+ */
+
+#pragma parse_mfunc_templ off
+#endif
+
+  typedef typename SuperMeta::type                   super;
+
+protected:
+  typedef ordered_index_node<
+    AugmentPolicy,typename super::node_type>         node_type;
+
+protected: /* for the benefit of AugmentPolicy::augmented_interface */
+  typedef typename node_type::impl_type              node_impl_type;
+  typedef typename node_impl_type::pointer           node_impl_pointer;
+
+public:
+  /* types */
+
+  typedef typename KeyFromValue::result_type         key_type;
+  typedef typename node_type::value_type             value_type;
+  typedef KeyFromValue                               key_from_value;
+  typedef Compare                                    key_compare;
+  typedef value_comparison<
+    value_type,KeyFromValue,Compare>                 value_compare;
+  typedef tuple<key_from_value,key_compare>          ctor_args;
+  typedef typename super::final_allocator_type       allocator_type;
+  typedef typename allocator_type::reference         reference;
+  typedef typename allocator_type::const_reference   const_reference;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+  typedef safe_mode::safe_iterator<
+    bidir_node_iterator<node_type>,
+    ordered_index_impl>                              iterator;
+#else
+  typedef bidir_node_iterator<node_type>             iterator;
+#endif
+
+  typedef iterator                                   const_iterator;
+
+  typedef std::size_t                                size_type;      
+  typedef std::ptrdiff_t                             difference_type;
+  typedef typename allocator_type::pointer           pointer;
+  typedef typename allocator_type::const_pointer     const_pointer;
+  typedef typename
+    pdalboost::reverse_iterator<iterator>                reverse_iterator;
+  typedef typename
+    pdalboost::reverse_iterator<const_iterator>          const_reverse_iterator;
+  typedef TagList                                    tag_list;
+
+protected:
+  typedef typename super::final_node_type            final_node_type;
+  typedef tuples::cons<
+    ctor_args, 
+    typename super::ctor_args_list>                  ctor_args_list;
+  typedef typename mpl::push_front<
+    typename super::index_type_list,
+    ordered_index<
+      KeyFromValue,Compare,
+      SuperMeta,TagList,Category,AugmentPolicy
+    > >::type                                        index_type_list;
+  typedef typename mpl::push_front<
+    typename super::iterator_type_list,
+    iterator>::type    iterator_type_list;
+  typedef typename mpl::push_front<
+    typename super::const_iterator_type_list,
+    const_iterator>::type                            const_iterator_type_list;
+  typedef typename super::copy_map_type              copy_map_type;
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+  typedef typename super::index_saver_type           index_saver_type;
+  typedef typename super::index_loader_type          index_loader_type;
+#endif
+
+protected:
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+  typedef safe_mode::safe_container<
+    ordered_index_impl>                              safe_super;
+#endif
+
+  typedef typename call_traits<
+    value_type>::param_type                          value_param_type;
+  typedef typename call_traits<
+    key_type>::param_type                            key_param_type;
+
+  /* Needed to avoid commas in BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL
+   * expansion.
+   */
+
+  typedef std::pair<iterator,bool>                   emplace_return_type;
+
+public:
+
+  /* construct/copy/destroy
+   * Default and copy ctors are in the protected section as indices are
+   * not supposed to be created on their own. No range ctor either.
+   * Assignment operators defined at ordered_index rather than here.
+   */
+
+  allocator_type get_allocator()const BOOST_NOEXCEPT
+  {
+    return this->final().get_allocator();
+  }
+
+  /* iterators */
+
+  iterator
+    begin()BOOST_NOEXCEPT{return make_iterator(leftmost());}
+  const_iterator
+    begin()const BOOST_NOEXCEPT{return make_iterator(leftmost());}
+  iterator
+    end()BOOST_NOEXCEPT{return make_iterator(header());}
+  const_iterator
+    end()const BOOST_NOEXCEPT{return make_iterator(header());}
+  reverse_iterator
+    rbegin()BOOST_NOEXCEPT{return pdalboost::make_reverse_iterator(end());}
+  const_reverse_iterator
+    rbegin()const BOOST_NOEXCEPT{return pdalboost::make_reverse_iterator(end());}
+  reverse_iterator
+    rend()BOOST_NOEXCEPT{return pdalboost::make_reverse_iterator(begin());}
+  const_reverse_iterator
+    rend()const BOOST_NOEXCEPT{return pdalboost::make_reverse_iterator(begin());}
+  const_iterator
+    cbegin()const BOOST_NOEXCEPT{return begin();}
+  const_iterator
+    cend()const BOOST_NOEXCEPT{return end();}
+  const_reverse_iterator
+    crbegin()const BOOST_NOEXCEPT{return rbegin();}
+  const_reverse_iterator
+    crend()const BOOST_NOEXCEPT{return rend();}
+ 
+  iterator iterator_to(const value_type& x)
+  {
+    return make_iterator(node_from_value<node_type>(&x));
+  }
+
+  const_iterator iterator_to(const value_type& x)const
+  {
+    return make_iterator(node_from_value<node_type>(&x));
+  }
+
+  /* capacity */
+
+  bool      empty()const BOOST_NOEXCEPT{return this->final_empty_();}
+  size_type size()const BOOST_NOEXCEPT{return this->final_size_();}
+  size_type max_size()const BOOST_NOEXCEPT{return this->final_max_size_();}
+
+  /* modifiers */
+
+  BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL(
+    emplace_return_type,emplace,emplace_impl)
+
+  BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG(
+    iterator,emplace_hint,emplace_hint_impl,iterator,position)
+
+  std::pair<iterator,bool> insert(const value_type& x)
+  {
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    std::pair<final_node_type*,bool> p=this->final_insert_(x);
+    return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+  }
+
+  std::pair<iterator,bool> insert(BOOST_RV_REF(value_type) x)
+  {
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    std::pair<final_node_type*,bool> p=this->final_insert_rv_(x);
+    return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+  }
+
+  iterator insert(iterator position,const value_type& x)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    std::pair<final_node_type*,bool> p=this->final_insert_(
+      x,static_cast<final_node_type*>(position.get_node()));
+    return make_iterator(p.first);
+  }
+    
+  iterator insert(iterator position,BOOST_RV_REF(value_type) x)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    std::pair<final_node_type*,bool> p=this->final_insert_rv_(
+      x,static_cast<final_node_type*>(position.get_node()));
+    return make_iterator(p.first);
+  }
+
+  template<typename InputIterator>
+  void insert(InputIterator first,InputIterator last)
+  {
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    node_type* hint=header(); /* end() */
+    for(;first!=last;++first){
+      hint=this->final_insert_ref_(
+        *first,static_cast<final_node_type*>(hint)).first;
+      node_type::increment(hint);
+    }
+  }
+
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+  void insert(std::initializer_list<value_type> list)
+  {
+    insert(list.begin(),list.end());
+  }
+#endif
+
+  iterator erase(iterator position)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    this->final_erase_(static_cast<final_node_type*>(position++.get_node()));
+    return position;
+  }
+  
+  size_type erase(key_param_type x)
+  {
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    std::pair<iterator,iterator> p=equal_range(x);
+    size_type s=0;
+    while(p.first!=p.second){
+      p.first=erase(p.first);
+      ++s;
+    }
+    return s;
+  }
+
+  iterator erase(iterator first,iterator last)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(first);
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(last);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(first,*this);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(last,*this);
+    BOOST_MULTI_INDEX_CHECK_VALID_RANGE(first,last);
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    while(first!=last){
+      first=erase(first);
+    }
+    return first;
+  }
+
+  bool replace(iterator position,const value_type& x)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    return this->final_replace_(
+      x,static_cast<final_node_type*>(position.get_node()));
+  }
+
+  bool replace(iterator position,BOOST_RV_REF(value_type) x)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    return this->final_replace_rv_(
+      x,static_cast<final_node_type*>(position.get_node()));
+  }
+
+  template<typename Modifier>
+  bool modify(iterator position,Modifier mod)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    /* MSVC++ 6.0 optimizer on safe mode code chokes if this
+     * this is not added. Left it for all compilers as it does no
+     * harm.
+     */
+
+    position.detach();
+#endif
+
+    return this->final_modify_(
+      mod,static_cast<final_node_type*>(position.get_node()));
+  }
+
+  template<typename Modifier,typename Rollback>
+  bool modify(iterator position,Modifier mod,Rollback back_)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    /* MSVC++ 6.0 optimizer on safe mode code chokes if this
+     * this is not added. Left it for all compilers as it does no
+     * harm.
+     */
+
+    position.detach();
+#endif
+
+    return this->final_modify_(
+      mod,back_,static_cast<final_node_type*>(position.get_node()));
+  }
+  
+  template<typename Modifier>
+  bool modify_key(iterator position,Modifier mod)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    return modify(
+      position,modify_key_adaptor<Modifier,value_type,KeyFromValue>(mod,key));
+  }
+
+  template<typename Modifier,typename Rollback>
+  bool modify_key(iterator position,Modifier mod,Rollback back_)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    return modify(
+      position,
+      modify_key_adaptor<Modifier,value_type,KeyFromValue>(mod,key),
+      modify_key_adaptor<Rollback,value_type,KeyFromValue>(back_,key));
+  }
+
+  void swap(
+    ordered_index<
+      KeyFromValue,Compare,SuperMeta,TagList,Category,AugmentPolicy>& x)
+  {
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT_OF(x);
+    this->final_swap_(x.final());
+  }
+
+  void clear()BOOST_NOEXCEPT
+  {
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    this->final_clear_();
+  }
+
+  /* observers */
+
+  key_from_value key_extractor()const{return key;}
+  key_compare    key_comp()const{return comp_;}
+  value_compare  value_comp()const{return value_compare(key,comp_);}
+
+  /* set operations */
+
+  /* Internally, these ops rely on const_iterator being the same
+   * type as iterator.
+   */
+
+  template<typename CompatibleKey>
+  iterator find(const CompatibleKey& x)const
+  {
+    return make_iterator(ordered_index_find(root(),header(),key,x,comp_));
+  }
+
+  template<typename CompatibleKey,typename CompatibleCompare>
+  iterator find(
+    const CompatibleKey& x,const CompatibleCompare& comp)const
+  {
+    return make_iterator(ordered_index_find(root(),header(),key,x,comp));
+  }
+
+  template<typename CompatibleKey>
+  size_type count(const CompatibleKey& x)const
+  {
+    return count(x,comp_);
+  }
+
+  template<typename CompatibleKey,typename CompatibleCompare>
+  size_type count(const CompatibleKey& x,const CompatibleCompare& comp)const
+  {
+    std::pair<iterator,iterator> p=equal_range(x,comp);
+    size_type n=std::distance(p.first,p.second);
+    return n;
+  }
+
+  template<typename CompatibleKey>
+  iterator lower_bound(const CompatibleKey& x)const
+  {
+    return make_iterator(
+      ordered_index_lower_bound(root(),header(),key,x,comp_));
+  }
+
+  template<typename CompatibleKey,typename CompatibleCompare>
+  iterator lower_bound(
+    const CompatibleKey& x,const CompatibleCompare& comp)const
+  {
+    return make_iterator(
+      ordered_index_lower_bound(root(),header(),key,x,comp));
+  }
+
+  template<typename CompatibleKey>
+  iterator upper_bound(const CompatibleKey& x)const
+  {
+    return make_iterator(
+      ordered_index_upper_bound(root(),header(),key,x,comp_));
+  }
+
+  template<typename CompatibleKey,typename CompatibleCompare>
+  iterator upper_bound(
+    const CompatibleKey& x,const CompatibleCompare& comp)const
+  {
+    return make_iterator(
+      ordered_index_upper_bound(root(),header(),key,x,comp));
+  }
+
+  template<typename CompatibleKey>
+  std::pair<iterator,iterator> equal_range(
+    const CompatibleKey& x)const
+  {
+    std::pair<node_type*,node_type*> p=
+      ordered_index_equal_range(root(),header(),key,x,comp_);
+    return std::pair<iterator,iterator>(
+      make_iterator(p.first),make_iterator(p.second));
+  }
+
+  template<typename CompatibleKey,typename CompatibleCompare>
+  std::pair<iterator,iterator> equal_range(
+    const CompatibleKey& x,const CompatibleCompare& comp)const
+  {
+    std::pair<node_type*,node_type*> p=
+      ordered_index_equal_range(root(),header(),key,x,comp);
+    return std::pair<iterator,iterator>(
+      make_iterator(p.first),make_iterator(p.second));
+  }
+
+  /* range */
+
+  template<typename LowerBounder,typename UpperBounder>
+  std::pair<iterator,iterator>
+  range(LowerBounder lower,UpperBounder upper)const
+  {
+    typedef typename mpl::if_<
+      is_same<LowerBounder,unbounded_type>,
+      BOOST_DEDUCED_TYPENAME mpl::if_<
+        is_same<UpperBounder,unbounded_type>,
+        both_unbounded_tag,
+        lower_unbounded_tag
+      >::type,
+      BOOST_DEDUCED_TYPENAME mpl::if_<
+        is_same<UpperBounder,unbounded_type>,
+        upper_unbounded_tag,
+        none_unbounded_tag
+      >::type
+    >::type dispatch;
+
+    return range(lower,upper,dispatch());
+  }
+
+BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
+  ordered_index_impl(const ctor_args_list& args_list,const allocator_type& al):
+    super(args_list.get_tail(),al),
+    key(tuples::get<0>(args_list.get_head())),
+    comp_(tuples::get<1>(args_list.get_head()))
+  {
+    empty_initialize();
+  }
+
+  ordered_index_impl(
+    const ordered_index_impl<
+      KeyFromValue,Compare,SuperMeta,TagList,Category,AugmentPolicy>& x):
+    super(x),
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    safe_super(),
+#endif
+
+    key(x.key),
+    comp_(x.comp_)
+  {
+    /* Copy ctor just takes the key and compare objects from x. The rest is
+     * done in a subsequent call to copy_().
+     */
+  }
+
+  ordered_index_impl(
+     const ordered_index_impl<
+       KeyFromValue,Compare,SuperMeta,TagList,Category,AugmentPolicy>& x,
+     do_not_copy_elements_tag):
+    super(x,do_not_copy_elements_tag()),
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    safe_super(),
+#endif
+
+    key(x.key),
+    comp_(x.comp_)
+  {
+    empty_initialize();
+  }
+
+  ~ordered_index_impl()
+  {
+    /* the container is guaranteed to be empty by now */
+  }
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+  iterator       make_iterator(node_type* node){return iterator(node,this);}
+  const_iterator make_iterator(node_type* node)const
+    {return const_iterator(node,const_cast<ordered_index_impl*>(this));}
+#else
+  iterator       make_iterator(node_type* node){return iterator(node);}
+  const_iterator make_iterator(node_type* node)const
+                   {return const_iterator(node);}
+#endif
+
+  void copy_(
+    const ordered_index_impl<
+      KeyFromValue,Compare,SuperMeta,TagList,Category,AugmentPolicy>& x,
+    const copy_map_type& map)
+  {
+    if(!x.root()){
+      empty_initialize();
+    }
+    else{
+      header()->color()=x.header()->color();
+      AugmentPolicy::copy(x.header()->impl(),header()->impl());
+
+      node_type* root_cpy=map.find(static_cast<final_node_type*>(x.root()));
+      header()->parent()=root_cpy->impl();
+
+      node_type* leftmost_cpy=map.find(
+        static_cast<final_node_type*>(x.leftmost()));
+      header()->left()=leftmost_cpy->impl();
+
+      node_type* rightmost_cpy=map.find(
+        static_cast<final_node_type*>(x.rightmost()));
+      header()->right()=rightmost_cpy->impl();
+
+      typedef typename copy_map_type::const_iterator copy_map_iterator;
+      for(copy_map_iterator it=map.begin(),it_end=map.end();it!=it_end;++it){
+        node_type* org=it->first;
+        node_type* cpy=it->second;
+
+        cpy->color()=org->color();
+        AugmentPolicy::copy(org->impl(),cpy->impl());
+
+        node_impl_pointer parent_org=org->parent();
+        if(parent_org==node_impl_pointer(0))cpy->parent()=node_impl_pointer(0);
+        else{
+          node_type* parent_cpy=map.find(
+            static_cast<final_node_type*>(node_type::from_impl(parent_org)));
+          cpy->parent()=parent_cpy->impl();
+          if(parent_org->left()==org->impl()){
+            parent_cpy->left()=cpy->impl();
+          }
+          else if(parent_org->right()==org->impl()){
+            /* header() does not satisfy this nor the previous check */
+            parent_cpy->right()=cpy->impl();
+          }
+        }
+
+        if(org->left()==node_impl_pointer(0))
+          cpy->left()=node_impl_pointer(0);
+        if(org->right()==node_impl_pointer(0))
+          cpy->right()=node_impl_pointer(0);
+      }
+    }
+    
+    super::copy_(x,map);
+  }
+
+  template<typename Variant>
+  final_node_type* insert_(
+    value_param_type v,final_node_type*& x,Variant variant)
+  {
+    link_info inf;
+    if(!link_point(key(v),inf,Category())){
+      return static_cast<final_node_type*>(node_type::from_impl(inf.pos));
+    }
+
+    final_node_type* res=super::insert_(v,x,variant);
+    if(res==x){
+      node_impl_type::link(
+        static_cast<node_type*>(x)->impl(),inf.side,inf.pos,header()->impl());
+    }
+    return res;
+  }
+
+  template<typename Variant>
+  final_node_type* insert_(
+    value_param_type v,node_type* position,final_node_type*& x,Variant variant)
+  {
+    link_info inf;
+    if(!hinted_link_point(key(v),position,inf,Category())){
+      return static_cast<final_node_type*>(node_type::from_impl(inf.pos));
+    }
+
+    final_node_type* res=super::insert_(v,position,x,variant);
+    if(res==x){
+      node_impl_type::link(
+        static_cast<node_type*>(x)->impl(),inf.side,inf.pos,header()->impl());
+    }
+    return res;
+  }
+
+  void erase_(node_type* x)
+  {
+    node_impl_type::rebalance_for_erase(
+      x->impl(),header()->parent(),header()->left(),header()->right());
+    super::erase_(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    detach_iterators(x);
+#endif
+  }
+
+  void delete_all_nodes_()
+  {
+    delete_all_nodes(root());
+  }
+
+  void clear_()
+  {
+    super::clear_();
+    empty_initialize();
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    safe_super::detach_dereferenceable_iterators();
+#endif
+  }
+
+  void swap_(
+    ordered_index_impl<
+      KeyFromValue,Compare,SuperMeta,TagList,Category,AugmentPolicy>& x)
+  {
+    std::swap(key,x.key);
+    std::swap(comp_,x.comp_);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    safe_super::swap(x);
+#endif
+
+    super::swap_(x);
+  }
+
+  void swap_elements_(
+    ordered_index_impl<
+      KeyFromValue,Compare,SuperMeta,TagList,Category,AugmentPolicy>& x)
+  {
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    safe_super::swap(x);
+#endif
+
+    super::swap_elements_(x);
+  }
+
+  template<typename Variant>
+  bool replace_(value_param_type v,node_type* x,Variant variant)
+  {
+    if(in_place(v,x,Category())){
+      return super::replace_(v,x,variant);
+    }
+
+    node_type* next=x;
+    node_type::increment(next);
+
+    node_impl_type::rebalance_for_erase(
+      x->impl(),header()->parent(),header()->left(),header()->right());
+
+    BOOST_TRY{
+      link_info inf;
+      if(link_point(key(v),inf,Category())&&super::replace_(v,x,variant)){
+        node_impl_type::link(x->impl(),inf.side,inf.pos,header()->impl());
+        return true;
+      }
+      node_impl_type::restore(x->impl(),next->impl(),header()->impl());
+      return false;
+    }
+    BOOST_CATCH(...){
+      node_impl_type::restore(x->impl(),next->impl(),header()->impl());
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+  }
+
+  bool modify_(node_type* x)
+  {
+    bool b;
+    BOOST_TRY{
+      b=in_place(x->value(),x,Category());
+    }
+    BOOST_CATCH(...){
+      erase_(x);
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+    if(!b){
+      node_impl_type::rebalance_for_erase(
+        x->impl(),header()->parent(),header()->left(),header()->right());
+      BOOST_TRY{
+        link_info inf;
+        if(!link_point(key(x->value()),inf,Category())){
+          super::erase_(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+          detach_iterators(x);
+#endif
+          return false;
+        }
+        node_impl_type::link(x->impl(),inf.side,inf.pos,header()->impl());
+      }
+      BOOST_CATCH(...){
+        super::erase_(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+        detach_iterators(x);
+#endif
+
+        BOOST_RETHROW;
+      }
+      BOOST_CATCH_END
+    }
+
+    BOOST_TRY{
+      if(!super::modify_(x)){
+        node_impl_type::rebalance_for_erase(
+          x->impl(),header()->parent(),header()->left(),header()->right());
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+        detach_iterators(x);
+#endif
+
+        return false;
+      }
+      else return true;
+    }
+    BOOST_CATCH(...){
+      node_impl_type::rebalance_for_erase(
+        x->impl(),header()->parent(),header()->left(),header()->right());
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+      detach_iterators(x);
+#endif
+
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+  }
+
+  bool modify_rollback_(node_type* x)
+  {
+    if(in_place(x->value(),x,Category())){
+      return super::modify_rollback_(x);
+    }
+
+    node_type* next=x;
+    node_type::increment(next);
+
+    node_impl_type::rebalance_for_erase(
+      x->impl(),header()->parent(),header()->left(),header()->right());
+
+    BOOST_TRY{
+      link_info inf;
+      if(link_point(key(x->value()),inf,Category())&&
+         super::modify_rollback_(x)){
+        node_impl_type::link(x->impl(),inf.side,inf.pos,header()->impl());
+        return true;
+      }
+      node_impl_type::restore(x->impl(),next->impl(),header()->impl());
+      return false;
+    }
+    BOOST_CATCH(...){
+      node_impl_type::restore(x->impl(),next->impl(),header()->impl());
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+  }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+  /* serialization */
+
+  template<typename Archive>
+  void save_(
+    Archive& ar,const unsigned int version,const index_saver_type& sm)const
+  {
+    save_(ar,version,sm,Category());
+  }
+
+  template<typename Archive>
+  void load_(Archive& ar,const unsigned int version,const index_loader_type& lm)
+  {
+    load_(ar,version,lm,Category());
+  }
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+  /* invariant stuff */
+
+  bool invariant_()const
+  {
+    if(size()==0||begin()==end()){
+      if(size()!=0||begin()!=end()||
+         header()->left()!=header()->impl()||
+         header()->right()!=header()->impl())return false;
+    }
+    else{
+      if((size_type)std::distance(begin(),end())!=size())return false;
+
+      std::size_t len=node_impl_type::black_count(
+        leftmost()->impl(),root()->impl());
+      for(const_iterator it=begin(),it_end=end();it!=it_end;++it){
+        node_type* x=it.get_node();
+        node_type* left_x=node_type::from_impl(x->left());
+        node_type* right_x=node_type::from_impl(x->right());
+
+        if(x->color()==red){
+          if((left_x&&left_x->color()==red)||
+             (right_x&&right_x->color()==red))return false;
+        }
+        if(left_x&&comp_(key(x->value()),key(left_x->value())))return false;
+        if(right_x&&comp_(key(right_x->value()),key(x->value())))return false;
+        if(!left_x&&!right_x&&
+           node_impl_type::black_count(x->impl(),root()->impl())!=len)
+          return false;
+        if(!AugmentPolicy::invariant(x->impl()))return false;
+      }
+    
+      if(leftmost()->impl()!=node_impl_type::minimum(root()->impl()))
+        return false;
+      if(rightmost()->impl()!=node_impl_type::maximum(root()->impl()))
+        return false;
+    }
+
+    return super::invariant_();
+  }
+
+  
+  /* This forwarding function eases things for the pdalboost::mem_fn construct
+   * in BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT. Actually,
+   * final_check_invariant is already an inherited member function of
+   * ordered_index_impl.
+   */
+  void check_invariant_()const{this->final_check_invariant_();}
+#endif
+
+protected: /* for the benefit of AugmentPolicy::augmented_interface */
+  node_type* header()const{return this->final_header();}
+  node_type* root()const{return node_type::from_impl(header()->parent());}
+  node_type* leftmost()const{return node_type::from_impl(header()->left());}
+  node_type* rightmost()const{return node_type::from_impl(header()->right());}
+
+private:
+  void empty_initialize()
+  {
+    header()->color()=red;
+    /* used to distinguish header() from root, in iterator.operator++ */
+    
+    header()->parent()=node_impl_pointer(0);
+    header()->left()=header()->impl();
+    header()->right()=header()->impl();
+  }
+
+  struct link_info
+  {
+    /* coverity[uninit_ctor]: suppress warning */
+    link_info():side(to_left){}
+
+    ordered_index_side side;
+    node_impl_pointer  pos;
+  };
+
+  bool link_point(key_param_type k,link_info& inf,ordered_unique_tag)
+  {
+    node_type* y=header();
+    node_type* x=root();
+    bool c=true;
+    while(x){
+      y=x;
+      c=comp_(k,key(x->value()));
+      x=node_type::from_impl(c?x->left():x->right());
+    }
+    node_type* yy=y;
+    if(c){
+      if(yy==leftmost()){
+        inf.side=to_left;
+        inf.pos=y->impl();
+        return true;
+      }
+      else node_type::decrement(yy);
+    }
+
+    if(comp_(key(yy->value()),k)){
+      inf.side=c?to_left:to_right;
+      inf.pos=y->impl();
+      return true;
+    }
+    else{
+      inf.pos=yy->impl();
+      return false;
+    }
+  }
+
+  bool link_point(key_param_type k,link_info& inf,ordered_non_unique_tag)
+  {
+    node_type* y=header();
+    node_type* x=root();
+    bool c=true;
+    while (x){
+     y=x;
+     c=comp_(k,key(x->value()));
+     x=node_type::from_impl(c?x->left():x->right());
+    }
+    inf.side=c?to_left:to_right;
+    inf.pos=y->impl();
+    return true;
+  }
+
+  bool lower_link_point(key_param_type k,link_info& inf,ordered_non_unique_tag)
+  {
+    node_type* y=header();
+    node_type* x=root();
+    bool c=false;
+    while (x){
+     y=x;
+     c=comp_(key(x->value()),k);
+     x=node_type::from_impl(c?x->right():x->left());
+    }
+    inf.side=c?to_right:to_left;
+    inf.pos=y->impl();
+    return true;
+  }
+
+  bool hinted_link_point(
+    key_param_type k,node_type* position,link_info& inf,ordered_unique_tag)
+  {
+    if(position->impl()==header()->left()){ 
+      if(size()>0&&comp_(k,key(position->value()))){
+        inf.side=to_left;
+        inf.pos=position->impl();
+        return true;
+      }
+      else return link_point(k,inf,ordered_unique_tag());
+    } 
+    else if(position==header()){ 
+      if(comp_(key(rightmost()->value()),k)){
+        inf.side=to_right;
+        inf.pos=rightmost()->impl();
+        return true;
+      }
+      else return link_point(k,inf,ordered_unique_tag());
+    } 
+    else{
+      node_type* before=position;
+      node_type::decrement(before);
+      if(comp_(key(before->value()),k)&&comp_(k,key(position->value()))){
+        if(before->right()==node_impl_pointer(0)){
+          inf.side=to_right;
+          inf.pos=before->impl();
+          return true;
+        }
+        else{
+          inf.side=to_left;
+          inf.pos=position->impl();
+          return true;
+        }
+      } 
+      else return link_point(k,inf,ordered_unique_tag());
+    }
+  }
+
+  bool hinted_link_point(
+    key_param_type k,node_type* position,link_info& inf,ordered_non_unique_tag)
+  {
+    if(position->impl()==header()->left()){ 
+      if(size()>0&&!comp_(key(position->value()),k)){
+        inf.side=to_left;
+        inf.pos=position->impl();
+        return true;
+      }
+      else return lower_link_point(k,inf,ordered_non_unique_tag());
+    } 
+    else if(position==header()){
+      if(!comp_(k,key(rightmost()->value()))){
+        inf.side=to_right;
+        inf.pos=rightmost()->impl();
+        return true;
+      }
+      else return link_point(k,inf,ordered_non_unique_tag());
+    } 
+    else{
+      node_type* before=position;
+      node_type::decrement(before);
+      if(!comp_(k,key(before->value()))){
+        if(!comp_(key(position->value()),k)){
+          if(before->right()==node_impl_pointer(0)){
+            inf.side=to_right;
+            inf.pos=before->impl();
+            return true;
+          }
+          else{
+            inf.side=to_left;
+            inf.pos=position->impl();
+            return true;
+          }
+        }
+        else return lower_link_point(k,inf,ordered_non_unique_tag());
+      } 
+      else return link_point(k,inf,ordered_non_unique_tag());
+    }
+  }
+
+  void delete_all_nodes(node_type* x)
+  {
+    if(!x)return;
+
+    delete_all_nodes(node_type::from_impl(x->left()));
+    delete_all_nodes(node_type::from_impl(x->right()));
+    this->final_delete_node_(static_cast<final_node_type*>(x));
+  }
+
+  bool in_place(value_param_type v,node_type* x,ordered_unique_tag)
+  {
+    node_type* y;
+    if(x!=leftmost()){
+      y=x;
+      node_type::decrement(y);
+      if(!comp_(key(y->value()),key(v)))return false;
+    }
+
+    y=x;
+    node_type::increment(y);
+    return y==header()||comp_(key(v),key(y->value()));
+  }
+
+  bool in_place(value_param_type v,node_type* x,ordered_non_unique_tag)
+  {
+    node_type* y;
+    if(x!=leftmost()){
+      y=x;
+      node_type::decrement(y);
+      if(comp_(key(v),key(y->value())))return false;
+    }
+
+    y=x;
+    node_type::increment(y);
+    return y==header()||!comp_(key(y->value()),key(v));
+  }
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+  void detach_iterators(node_type* x)
+  {
+    iterator it=make_iterator(x);
+    safe_mode::detach_equivalent_iterators(it);
+  }
+#endif
+
+  template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+  std::pair<iterator,bool> emplace_impl(BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+  {
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    std::pair<final_node_type*,bool>p=
+      this->final_emplace_(BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+    return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+  }
+
+  template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+  iterator emplace_hint_impl(
+    iterator position,BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT;
+    std::pair<final_node_type*,bool>p=
+      this->final_emplace_hint_(
+        static_cast<final_node_type*>(position.get_node()),
+        BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+    return make_iterator(p.first);
+  }
+
+  template<typename LowerBounder,typename UpperBounder>
+  std::pair<iterator,iterator>
+  range(LowerBounder lower,UpperBounder upper,none_unbounded_tag)const
+  {
+    node_type* y=header();
+    node_type* z=root();
+
+    while(z){
+      if(!lower(key(z->value()))){
+        z=node_type::from_impl(z->right());
+      }
+      else if(!upper(key(z->value()))){
+        y=z;
+        z=node_type::from_impl(z->left());
+      }
+      else{
+        return std::pair<iterator,iterator>(
+          make_iterator(
+            lower_range(node_type::from_impl(z->left()),z,lower)),
+          make_iterator(
+            upper_range(node_type::from_impl(z->right()),y,upper)));
+      }
+    }
+
+    return std::pair<iterator,iterator>(make_iterator(y),make_iterator(y));
+  }
+
+  template<typename LowerBounder,typename UpperBounder>
+  std::pair<iterator,iterator>
+  range(LowerBounder,UpperBounder upper,lower_unbounded_tag)const
+  {
+    return std::pair<iterator,iterator>(
+      begin(),
+      make_iterator(upper_range(root(),header(),upper)));
+  }
+
+  template<typename LowerBounder,typename UpperBounder>
+  std::pair<iterator,iterator>
+  range(LowerBounder lower,UpperBounder,upper_unbounded_tag)const
+  {
+    return std::pair<iterator,iterator>(
+      make_iterator(lower_range(root(),header(),lower)),
+      end());
+  }
+
+  template<typename LowerBounder,typename UpperBounder>
+  std::pair<iterator,iterator>
+  range(LowerBounder,UpperBounder,both_unbounded_tag)const
+  {
+    return std::pair<iterator,iterator>(begin(),end());
+  }
+
+  template<typename LowerBounder>
+  node_type * lower_range(node_type* top,node_type* y,LowerBounder lower)const
+  {
+    while(top){
+      if(lower(key(top->value()))){
+        y=top;
+        top=node_type::from_impl(top->left());
+      }
+      else top=node_type::from_impl(top->right());
+    }
+
+    return y;
+  }
+
+  template<typename UpperBounder>
+  node_type * upper_range(node_type* top,node_type* y,UpperBounder upper)const
+  {
+    while(top){
+      if(!upper(key(top->value()))){
+        y=top;
+        top=node_type::from_impl(top->left());
+      }
+      else top=node_type::from_impl(top->right());
+    }
+
+    return y;
+  }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+  template<typename Archive>
+  void save_(
+    Archive& ar,const unsigned int version,const index_saver_type& sm,
+    ordered_unique_tag)const
+  {
+    super::save_(ar,version,sm);
+  }
+
+  template<typename Archive>
+  void load_(
+    Archive& ar,const unsigned int version,const index_loader_type& lm,
+    ordered_unique_tag)
+  {
+    super::load_(ar,version,lm);
+  }
+
+  template<typename Archive>
+  void save_(
+    Archive& ar,const unsigned int version,const index_saver_type& sm,
+    ordered_non_unique_tag)const
+  {
+    typedef duplicates_iterator<node_type,value_compare> dup_iterator;
+
+    sm.save(
+      dup_iterator(begin().get_node(),end().get_node(),value_comp()),
+      dup_iterator(end().get_node(),value_comp()),
+      ar,version);
+    super::save_(ar,version,sm);
+  }
+
+  template<typename Archive>
+  void load_(
+    Archive& ar,const unsigned int version,const index_loader_type& lm,
+    ordered_non_unique_tag)
+  {
+    lm.load(
+      ::pdalboost::bind(
+        &ordered_index_impl::rearranger,this,
+        ::pdalboost::arg<1>(),::pdalboost::arg<2>()),
+      ar,version);
+    super::load_(ar,version,lm);
+  }
+
+  void rearranger(node_type* position,node_type *x)
+  {
+    if(!position||comp_(key(position->value()),key(x->value()))){
+      position=lower_bound(key(x->value())).get_node();
+    }
+    else if(comp_(key(x->value()),key(position->value()))){
+      /* inconsistent rearrangement */
+      throw_exception(
+        archive::archive_exception(
+          archive::archive_exception::other_exception));
+    }
+    else node_type::increment(position);
+
+    if(position!=x){
+      node_impl_type::rebalance_for_erase(
+        x->impl(),header()->parent(),header()->left(),header()->right());
+      node_impl_type::restore(
+        x->impl(),position->impl(),header()->impl());
+    }
+  }
+#endif /* serialization */
+
+protected: /* for the benefit of AugmentPolicy::augmented_interface */
+  key_from_value key;
+  key_compare    comp_;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+    BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+#pragma parse_mfunc_templ reset
+#endif
+};
+
+template<
+  typename KeyFromValue,typename Compare,
+  typename SuperMeta,typename TagList,typename Category,typename AugmentPolicy
+>
+class ordered_index:
+  public AugmentPolicy::template augmented_interface<
+    ordered_index_impl<
+      KeyFromValue,Compare,SuperMeta,TagList,Category,AugmentPolicy
+    >
+  >::type
+{
+  typedef typename AugmentPolicy::template
+    augmented_interface<
+      ordered_index_impl<
+        KeyFromValue,Compare,
+        SuperMeta,TagList,Category,AugmentPolicy
+      >
+    >::type                                       super;
+public:
+  typedef typename super::ctor_args_list          ctor_args_list;
+  typedef typename super::allocator_type          allocator_type;
+  typedef typename super::iterator                iterator;
+
+  /* construct/copy/destroy
+   * Default and copy ctors are in the protected section as indices are
+   * not supposed to be created on their own. No range ctor either.
+   */
+
+  ordered_index& operator=(const ordered_index& x)
+  {
+    this->final()=x.final();
+    return *this;
+  }
+
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+  ordered_index& operator=(
+    std::initializer_list<BOOST_DEDUCED_TYPENAME super::value_type> list)
+  {
+    this->final()=list;
+    return *this;
+  }
+#endif
+
+protected:
+  ordered_index(
+    const ctor_args_list& args_list,const allocator_type& al):
+    super(args_list,al){}
+
+  ordered_index(const ordered_index& x):super(x){};
+
+  ordered_index(const ordered_index& x,do_not_copy_elements_tag):
+    super(x,do_not_copy_elements_tag()){};
+};
+
+/* comparison */
+
+template<
+  typename KeyFromValue1,typename Compare1,
+  typename SuperMeta1,typename TagList1,typename Category1,
+  typename AugmentPolicy1,
+  typename KeyFromValue2,typename Compare2,
+  typename SuperMeta2,typename TagList2,typename Category2,
+  typename AugmentPolicy2
+>
+bool operator==(
+  const ordered_index<
+    KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1,AugmentPolicy1>& x,
+  const ordered_index<
+    KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2,AugmentPolicy2>& y)
+{
+  return x.size()==y.size()&&std::equal(x.begin(),x.end(),y.begin());
+}
+
+template<
+  typename KeyFromValue1,typename Compare1,
+  typename SuperMeta1,typename TagList1,typename Category1,
+  typename AugmentPolicy1,
+  typename KeyFromValue2,typename Compare2,
+  typename SuperMeta2,typename TagList2,typename Category2,
+  typename AugmentPolicy2
+>
+bool operator<(
+  const ordered_index<
+    KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1,AugmentPolicy1>& x,
+  const ordered_index<
+    KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2,AugmentPolicy2>& y)
+{
+  return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end());
+}
+
+template<
+  typename KeyFromValue1,typename Compare1,
+  typename SuperMeta1,typename TagList1,typename Category1,
+  typename AugmentPolicy1,
+  typename KeyFromValue2,typename Compare2,
+  typename SuperMeta2,typename TagList2,typename Category2,
+  typename AugmentPolicy2
+>
+bool operator!=(
+  const ordered_index<
+    KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1,AugmentPolicy1>& x,
+  const ordered_index<
+    KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2,AugmentPolicy2>& y)
+{
+  return !(x==y);
+}
+
+template<
+  typename KeyFromValue1,typename Compare1,
+  typename SuperMeta1,typename TagList1,typename Category1,
+  typename AugmentPolicy1,
+  typename KeyFromValue2,typename Compare2,
+  typename SuperMeta2,typename TagList2,typename Category2,
+  typename AugmentPolicy2
+>
+bool operator>(
+  const ordered_index<
+    KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1,AugmentPolicy1>& x,
+  const ordered_index<
+    KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2,AugmentPolicy2>& y)
+{
+  return y<x;
+}
+
+template<
+  typename KeyFromValue1,typename Compare1,
+  typename SuperMeta1,typename TagList1,typename Category1,
+  typename AugmentPolicy1,
+  typename KeyFromValue2,typename Compare2,
+  typename SuperMeta2,typename TagList2,typename Category2,
+  typename AugmentPolicy2
+>
+bool operator>=(
+  const ordered_index<
+    KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1,AugmentPolicy1>& x,
+  const ordered_index<
+    KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2,AugmentPolicy2>& y)
+{
+  return !(x<y);
+}
+
+template<
+  typename KeyFromValue1,typename Compare1,
+  typename SuperMeta1,typename TagList1,typename Category1,
+  typename AugmentPolicy1,
+  typename KeyFromValue2,typename Compare2,
+  typename SuperMeta2,typename TagList2,typename Category2,
+  typename AugmentPolicy2
+>
+bool operator<=(
+  const ordered_index<
+    KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1,AugmentPolicy1>& x,
+  const ordered_index<
+    KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2,AugmentPolicy2>& y)
+{
+  return !(x>y);
+}
+
+/*  specialized algorithms */
+
+template<
+  typename KeyFromValue,typename Compare,
+  typename SuperMeta,typename TagList,typename Category,typename AugmentPolicy
+>
+void swap(
+  ordered_index<
+    KeyFromValue,Compare,SuperMeta,TagList,Category,AugmentPolicy>& x,
+  ordered_index<
+    KeyFromValue,Compare,SuperMeta,TagList,Category,AugmentPolicy>& y)
+{
+  x.swap(y);
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+/* Boost.Foreach compatibility */
+
+template<
+  typename KeyFromValue,typename Compare,
+  typename SuperMeta,typename TagList,typename Category,typename AugmentPolicy
+>
+inline pdalboost::mpl::true_* boost_foreach_is_noncopyable(
+  pdalboost::multi_index::detail::ordered_index<
+    KeyFromValue,Compare,SuperMeta,TagList,Category,AugmentPolicy>*&,
+  boost_foreach_argument_dependent_lookup_hack)
+{
+  return 0;
+}
+
+#undef BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT
+#undef BOOST_MULTI_INDEX_ORD_INDEX_CHECK_INVARIANT_OF
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/ord_index_impl_fwd.hpp b/vendor/pdalboost/boost/multi_index/detail/ord_index_impl_fwd.hpp
new file mode 100644
index 0000000..9b2abca
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/ord_index_impl_fwd.hpp
@@ -0,0 +1,128 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_IMPL_FWD_HPP
+#define BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_IMPL_FWD_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+template<
+  typename KeyFromValue,typename Compare,
+  typename SuperMeta,typename TagList,typename Category,typename AugmentPolicy
+>
+class ordered_index;
+
+template<
+  typename KeyFromValue1,typename Compare1,
+  typename SuperMeta1,typename TagList1,typename Category1,
+  typename AugmentPolicy1,
+  typename KeyFromValue2,typename Compare2,
+  typename SuperMeta2,typename TagList2,typename Category2,
+  typename AugmentPolicy2
+>
+bool operator==(
+  const ordered_index<
+    KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1,AugmentPolicy1>& x,
+  const ordered_index<
+    KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2,AugmentPolicy2>& y);
+
+template<
+  typename KeyFromValue1,typename Compare1,
+  typename SuperMeta1,typename TagList1,typename Category1,
+  typename AugmentPolicy1,
+  typename KeyFromValue2,typename Compare2,
+  typename SuperMeta2,typename TagList2,typename Category2,
+  typename AugmentPolicy2
+>
+bool operator<(
+  const ordered_index<
+    KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1,AugmentPolicy1>& x,
+  const ordered_index<
+    KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2,AugmentPolicy2>& y);
+
+template<
+  typename KeyFromValue1,typename Compare1,
+  typename SuperMeta1,typename TagList1,typename Category1,
+  typename AugmentPolicy1,
+  typename KeyFromValue2,typename Compare2,
+  typename SuperMeta2,typename TagList2,typename Category2,
+  typename AugmentPolicy2
+>
+bool operator!=(
+  const ordered_index<
+    KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1,AugmentPolicy1>& x,
+  const ordered_index<
+    KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2,AugmentPolicy2>& y);
+
+template<
+  typename KeyFromValue1,typename Compare1,
+  typename SuperMeta1,typename TagList1,typename Category1,
+  typename AugmentPolicy1,
+  typename KeyFromValue2,typename Compare2,
+  typename SuperMeta2,typename TagList2,typename Category2,
+  typename AugmentPolicy2
+>
+bool operator>(
+  const ordered_index<
+    KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1,AugmentPolicy1>& x,
+  const ordered_index<
+    KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2,AugmentPolicy2>& y);
+
+template<
+  typename KeyFromValue1,typename Compare1,
+  typename SuperMeta1,typename TagList1,typename Category1,
+  typename AugmentPolicy1,
+  typename KeyFromValue2,typename Compare2,
+  typename SuperMeta2,typename TagList2,typename Category2,
+  typename AugmentPolicy2
+>
+bool operator>=(
+  const ordered_index<
+    KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1,AugmentPolicy1>& x,
+  const ordered_index<
+    KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2,AugmentPolicy2>& y);
+
+template<
+  typename KeyFromValue1,typename Compare1,
+  typename SuperMeta1,typename TagList1,typename Category1,
+  typename AugmentPolicy1,
+  typename KeyFromValue2,typename Compare2,
+  typename SuperMeta2,typename TagList2,typename Category2,
+  typename AugmentPolicy2
+>
+bool operator<=(
+  const ordered_index<
+    KeyFromValue1,Compare1,SuperMeta1,TagList1,Category1,AugmentPolicy1>& x,
+  const ordered_index<
+    KeyFromValue2,Compare2,SuperMeta2,TagList2,Category2,AugmentPolicy2>& y);
+
+template<
+  typename KeyFromValue,typename Compare,
+  typename SuperMeta,typename TagList,typename Category,typename AugmentPolicy
+>
+void swap(
+  ordered_index<
+    KeyFromValue,Compare,SuperMeta,TagList,Category,AugmentPolicy>& x,
+  ordered_index<
+    KeyFromValue,Compare,SuperMeta,TagList,Category,AugmentPolicy>& y);
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/ord_index_node.hpp b/vendor/pdalboost/boost/multi_index/detail/ord_index_node.hpp
new file mode 100644
index 0000000..d0f2a30
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/ord_index_node.hpp
@@ -0,0 +1,658 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ *
+ * The internal implementation of red-black trees is based on that of SGI STL
+ * stl_tree.h file: 
+ *
+ * Copyright (c) 1996,1997
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.  Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied warranty.
+ *
+ *
+ * Copyright (c) 1994
+ * Hewlett-Packard Company
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.  Hewlett-Packard Company makes no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied warranty.
+ *
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_NODE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_NODE_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <cstddef>
+#include <boost/detail/allocator_utilities.hpp>
+#include <boost/multi_index/detail/raw_ptr.hpp>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_COMPRESSED_ORDERED_INDEX_NODES)
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/multi_index/detail/uintptr_type.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+#include <boost/type_traits/is_same.hpp>
+#endif
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* definition of red-black nodes for ordered_index */
+
+enum ordered_index_color{red=false,black=true};
+enum ordered_index_side{to_left=false,to_right=true};
+
+template<typename AugmentPolicy,typename Allocator>
+struct ordered_index_node_impl; /* fwd decl. */
+
+template<typename AugmentPolicy,typename Allocator>
+struct ordered_index_node_std_base
+{
+  typedef typename
+  pdalboost::detail::allocator::rebind_to<
+    Allocator,
+    ordered_index_node_impl<AugmentPolicy,Allocator>
+  >::type::pointer                                   pointer;
+  typedef typename
+  pdalboost::detail::allocator::rebind_to<
+    Allocator,
+    ordered_index_node_impl<AugmentPolicy,Allocator>
+  >::type::const_pointer                             const_pointer;
+  typedef ordered_index_color&                       color_ref;
+  typedef pointer&                                   parent_ref;
+
+  ordered_index_color& color(){return color_;}
+  ordered_index_color  color()const{return color_;}
+  pointer&             parent(){return parent_;}
+  pointer              parent()const{return parent_;}
+  pointer&             left(){return left_;}
+  pointer              left()const{return left_;}
+  pointer&             right(){return right_;}
+  pointer              right()const{return right_;}
+
+private:
+  ordered_index_color color_; 
+  pointer             parent_;
+  pointer             left_;
+  pointer             right_;
+};
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_COMPRESSED_ORDERED_INDEX_NODES)
+/* If ordered_index_node_impl has even alignment, we can use the least
+ * significant bit of one of the ordered_index_node_impl pointers to
+ * store color information. This typically reduces the size of
+ * ordered_index_node_impl by 25%.
+ */
+
+#if defined(BOOST_MSVC)
+/* This code casts pointers to an integer type that has been computed
+ * to be large enough to hold the pointer, however the metaprogramming
+ * logic is not always spotted by the VC++ code analyser that issues a
+ * long list of warnings.
+ */
+
+#pragma warning(push)
+#pragma warning(disable:4312 4311)
+#endif
+
+template<typename AugmentPolicy,typename Allocator>
+struct ordered_index_node_compressed_base
+{
+  typedef ordered_index_node_impl<
+    AugmentPolicy,Allocator>*            pointer;
+  typedef const ordered_index_node_impl<
+    AugmentPolicy,Allocator>*            const_pointer;
+
+  struct color_ref
+  {
+    color_ref(uintptr_type* r_):r(r_){}
+    
+    operator ordered_index_color()const
+    {
+      return ordered_index_color(*r&uintptr_type(1));
+    }
+    
+    color_ref& operator=(ordered_index_color c)
+    {
+      *r&=~uintptr_type(1);
+      *r|=uintptr_type(c);
+      return *this;
+    }
+    
+    color_ref& operator=(const color_ref& x)
+    {
+      return operator=(x.operator ordered_index_color());
+    }
+    
+  private:
+    uintptr_type* r;
+  };
+  
+  struct parent_ref
+  {
+    parent_ref(uintptr_type* r_):r(r_){}
+    
+    operator pointer()const
+    {
+      return (pointer)(void*)(*r&~uintptr_type(1));
+    }
+    
+    parent_ref& operator=(pointer p)
+    {
+      *r=((uintptr_type)(void*)p)|(*r&uintptr_type(1));
+      return *this;
+    }
+    
+    parent_ref& operator=(const parent_ref& x)
+    {
+      return operator=(x.operator pointer());
+    }
+
+    pointer operator->()const
+    {
+      return operator pointer();
+    }
+
+  private:
+    uintptr_type* r;
+  };
+  
+  color_ref           color(){return color_ref(&parentcolor_);}
+  ordered_index_color color()const
+  {
+    return ordered_index_color(parentcolor_&uintptr_type(1));
+  }
+
+  parent_ref parent(){return parent_ref(&parentcolor_);}
+  pointer    parent()const
+  {
+    return (pointer)(void*)(parentcolor_&~uintptr_type(1));
+  }
+
+  pointer& left(){return left_;}
+  pointer  left()const{return left_;}
+  pointer& right(){return right_;}
+  pointer  right()const{return right_;}
+
+private:
+  uintptr_type parentcolor_;
+  pointer      left_;
+  pointer      right_;
+};
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+#endif
+
+template<typename AugmentPolicy,typename Allocator>
+struct ordered_index_node_impl_base:
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_COMPRESSED_ORDERED_INDEX_NODES)
+  AugmentPolicy::template augmented_node<
+    typename mpl::if_c<
+      !(has_uintptr_type::value)||
+      (alignment_of<
+        ordered_index_node_compressed_base<AugmentPolicy,Allocator>
+       >::value%2)||
+      !(is_same<
+        typename pdalboost::detail::allocator::rebind_to<
+          Allocator,
+          ordered_index_node_impl<AugmentPolicy,Allocator>
+        >::type::pointer,
+        ordered_index_node_impl<AugmentPolicy,Allocator>*>::value),
+      ordered_index_node_std_base<AugmentPolicy,Allocator>,
+      ordered_index_node_compressed_base<AugmentPolicy,Allocator>
+    >::type
+  >::type
+#else
+  AugmentPolicy::template augmented_node<
+    ordered_index_node_std_base<AugmentPolicy,Allocator>
+  >::type
+#endif
+
+{};
+
+template<typename AugmentPolicy,typename Allocator>
+struct ordered_index_node_impl:
+  ordered_index_node_impl_base<AugmentPolicy,Allocator>
+{
+private:
+  typedef ordered_index_node_impl_base<AugmentPolicy,Allocator> super;
+
+public:
+  typedef typename super::color_ref                             color_ref;
+  typedef typename super::parent_ref                            parent_ref;
+  typedef typename super::pointer                               pointer;
+  typedef typename super::const_pointer                         const_pointer;
+
+  /* interoperability with bidir_node_iterator */
+
+  static void increment(pointer& x)
+  {
+    if(x->right()!=pointer(0)){
+      x=x->right();
+      while(x->left()!=pointer(0))x=x->left();
+    }
+    else{
+      pointer y=x->parent();
+      while(x==y->right()){
+        x=y;
+        y=y->parent();
+      }
+      if(x->right()!=y)x=y;
+    }
+  }
+
+  static void decrement(pointer& x)
+  {
+    if(x->color()==red&&x->parent()->parent()==x){
+      x=x->right();
+    }
+    else if(x->left()!=pointer(0)){
+      pointer y=x->left();
+      while(y->right()!=pointer(0))y=y->right();
+      x=y;
+    }else{
+      pointer y=x->parent();
+      while(x==y->left()){
+        x=y;
+        y=y->parent();
+      }
+      x=y;
+    }
+  }
+
+  /* algorithmic stuff */
+
+  static void rotate_left(pointer x,parent_ref root)
+  {
+    pointer y=x->right();
+    x->right()=y->left();
+    if(y->left()!=pointer(0))y->left()->parent()=x;
+    y->parent()=x->parent();
+    
+    if(x==root)                    root=y;
+    else if(x==x->parent()->left())x->parent()->left()=y;
+    else                           x->parent()->right()=y;
+    y->left()=x;
+    x->parent()=y;
+    AugmentPolicy::rotate_left(x,y);
+  }
+
+  static pointer minimum(pointer x)
+  {
+    while(x->left()!=pointer(0))x=x->left();
+    return x;
+  }
+
+  static pointer maximum(pointer x)
+  {
+    while(x->right()!=pointer(0))x=x->right();
+    return x;
+  }
+
+  static void rotate_right(pointer x,parent_ref root)
+  {
+    pointer y=x->left();
+    x->left()=y->right();
+    if(y->right()!=pointer(0))y->right()->parent()=x;
+    y->parent()=x->parent();
+
+    if(x==root)                     root=y;
+    else if(x==x->parent()->right())x->parent()->right()=y;
+    else                            x->parent()->left()=y;
+    y->right()=x;
+    x->parent()=y;
+    AugmentPolicy::rotate_right(x,y);
+  }
+
+  static void rebalance(pointer x,parent_ref root)
+  {
+    x->color()=red;
+    while(x!=root&&x->parent()->color()==red){
+      if(x->parent()==x->parent()->parent()->left()){
+        pointer y=x->parent()->parent()->right();
+        if(y!=pointer(0)&&y->color()==red){
+          x->parent()->color()=black;
+          y->color()=black;
+          x->parent()->parent()->color()=red;
+          x=x->parent()->parent();
+        }
+        else{
+          if(x==x->parent()->right()){
+            x=x->parent();
+            rotate_left(x,root);
+          }
+          x->parent()->color()=black;
+          x->parent()->parent()->color()=red;
+          rotate_right(x->parent()->parent(),root);
+        }
+      }
+      else{
+        pointer y=x->parent()->parent()->left();
+        if(y!=pointer(0)&&y->color()==red){
+          x->parent()->color()=black;
+          y->color()=black;
+          x->parent()->parent()->color()=red;
+          x=x->parent()->parent();
+        }
+        else{
+          if(x==x->parent()->left()){
+            x=x->parent();
+            rotate_right(x,root);
+          }
+          x->parent()->color()=black;
+          x->parent()->parent()->color()=red;
+          rotate_left(x->parent()->parent(),root);
+        }
+      }
+    }
+    root->color()=black;
+  }
+
+  static void link(
+    pointer x,ordered_index_side side,pointer position,pointer header)
+  {
+    if(side==to_left){
+      position->left()=x;  /* also makes leftmost=x when parent==header */
+      if(position==header){
+        header->parent()=x;
+        header->right()=x;
+      }
+      else if(position==header->left()){
+        header->left()=x;  /* maintain leftmost pointing to min node */
+      }
+    }
+    else{
+      position->right()=x;
+      if(position==header->right()){
+        header->right()=x; /* maintain rightmost pointing to max node */
+      }
+    }
+    x->parent()=position;
+    x->left()=pointer(0);
+    x->right()=pointer(0);
+    AugmentPolicy::add(x,pointer(header->parent()));
+    ordered_index_node_impl::rebalance(x,header->parent());
+  }
+
+  static pointer rebalance_for_erase(
+    pointer z,parent_ref root,pointer& leftmost,pointer& rightmost)
+  {
+    pointer y=z;
+    pointer x=pointer(0);
+    pointer x_parent=pointer(0);
+    if(y->left()==pointer(0)){    /* z has at most one non-null child. y==z. */
+      x=y->right();               /* x might be null */
+    }
+    else{
+      if(y->right()==pointer(0)){ /* z has exactly one non-null child. y==z. */
+        x=y->left();              /* x is not null */
+      }
+      else{                       /* z has two non-null children.  Set y to */
+        y=y->right();             /* z's successor. x might be null.        */
+        while(y->left()!=pointer(0))y=y->left();
+        x=y->right();
+      }
+    }
+    AugmentPolicy::remove(y,pointer(root));
+    if(y!=z){
+      AugmentPolicy::copy(z,y);
+      z->left()->parent()=y;   /* relink y in place of z. y is z's successor */
+      y->left()=z->left();
+      if(y!=z->right()){
+        x_parent=y->parent();
+        if(x!=pointer(0))x->parent()=y->parent();
+        y->parent()->left()=x; /* y must be a child of left */
+        y->right()=z->right();
+        z->right()->parent()=y;
+      }
+      else{
+        x_parent=y;
+      }
+
+      if(root==z)                    root=y;
+      else if(z->parent()->left()==z)z->parent()->left()=y;
+      else                           z->parent()->right()=y;
+      y->parent()=z->parent();
+      ordered_index_color c=y->color();
+      y->color()=z->color();
+      z->color()=c;
+      y=z;                    /* y now points to node to be actually deleted */
+    }
+    else{                     /* y==z */
+      x_parent=y->parent();
+      if(x!=pointer(0))x->parent()=y->parent();   
+      if(root==z){
+        root=x;
+      }
+      else{
+        if(z->parent()->left()==z)z->parent()->left()=x;
+        else                      z->parent()->right()=x;
+      }
+      if(leftmost==z){
+        if(z->right()==pointer(0)){ /* z->left() must be null also */
+          leftmost=z->parent();
+        }
+        else{              
+          leftmost=minimum(x);      /* makes leftmost==header if z==root */
+        }
+      }
+      if(rightmost==z){
+        if(z->left()==pointer(0)){  /* z->right() must be null also */
+          rightmost=z->parent();
+        }
+        else{                   /* x==z->left() */
+          rightmost=maximum(x); /* makes rightmost==header if z==root */
+        }
+      }
+    }
+    if(y->color()!=red){
+      while(x!=root&&(x==pointer(0)|| x->color()==black)){
+        if(x==x_parent->left()){
+          pointer w=x_parent->right();
+          if(w->color()==red){
+            w->color()=black;
+            x_parent->color()=red;
+            rotate_left(x_parent,root);
+            w=x_parent->right();
+          }
+          if((w->left()==pointer(0)||w->left()->color()==black) &&
+             (w->right()==pointer(0)||w->right()->color()==black)){
+            w->color()=red;
+            x=x_parent;
+            x_parent=x_parent->parent();
+          } 
+          else{
+            if(w->right()==pointer(0 )
+                || w->right()->color()==black){
+              if(w->left()!=pointer(0)) w->left()->color()=black;
+              w->color()=red;
+              rotate_right(w,root);
+              w=x_parent->right();
+            }
+            w->color()=x_parent->color();
+            x_parent->color()=black;
+            if(w->right()!=pointer(0))w->right()->color()=black;
+            rotate_left(x_parent,root);
+            break;
+          }
+        } 
+        else{                   /* same as above,with right <-> left */
+          pointer w=x_parent->left();
+          if(w->color()==red){
+            w->color()=black;
+            x_parent->color()=red;
+            rotate_right(x_parent,root);
+            w=x_parent->left();
+          }
+          if((w->right()==pointer(0)||w->right()->color()==black) &&
+             (w->left()==pointer(0)||w->left()->color()==black)){
+            w->color()=red;
+            x=x_parent;
+            x_parent=x_parent->parent();
+          }
+          else{
+            if(w->left()==pointer(0)||w->left()->color()==black){
+              if(w->right()!=pointer(0))w->right()->color()=black;
+              w->color()=red;
+              rotate_left(w,root);
+              w=x_parent->left();
+            }
+            w->color()=x_parent->color();
+            x_parent->color()=black;
+            if(w->left()!=pointer(0))w->left()->color()=black;
+            rotate_right(x_parent,root);
+            break;
+          }
+        }
+      }
+      if(x!=pointer(0))x->color()=black;
+    }
+    return y;
+  }
+
+  static void restore(pointer x,pointer position,pointer header)
+  {
+    if(position->left()==pointer(0)||position->left()==header){
+      link(x,to_left,position,header);
+    }
+    else{
+      decrement(position);
+      link(x,to_right,position,header);
+    }
+  }
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+  /* invariant stuff */
+
+  static std::size_t black_count(pointer node,pointer root)
+  {
+    if(node==pointer(0))return 0;
+    std::size_t sum=0;
+    for(;;){
+      if(node->color()==black)++sum;
+      if(node==root)break;
+      node=node->parent();
+    } 
+    return sum;
+  }
+#endif
+};
+
+template<typename AugmentPolicy,typename Super>
+struct ordered_index_node_trampoline:
+  ordered_index_node_impl<
+    AugmentPolicy,
+    typename pdalboost::detail::allocator::rebind_to<
+      typename Super::allocator_type,
+      char
+    >::type
+  >
+{
+  typedef ordered_index_node_impl<
+    AugmentPolicy,
+    typename pdalboost::detail::allocator::rebind_to<
+      typename Super::allocator_type,
+      char
+    >::type
+  > impl_type;
+};
+
+template<typename AugmentPolicy,typename Super>
+struct ordered_index_node:
+  Super,ordered_index_node_trampoline<AugmentPolicy,Super>
+{
+private:
+  typedef ordered_index_node_trampoline<AugmentPolicy,Super> trampoline;
+
+public:
+  typedef typename trampoline::impl_type     impl_type;
+  typedef typename trampoline::color_ref     impl_color_ref;
+  typedef typename trampoline::parent_ref    impl_parent_ref;
+  typedef typename trampoline::pointer       impl_pointer;
+  typedef typename trampoline::const_pointer const_impl_pointer;
+
+  impl_color_ref      color(){return trampoline::color();}
+  ordered_index_color color()const{return trampoline::color();}
+  impl_parent_ref     parent(){return trampoline::parent();}
+  impl_pointer        parent()const{return trampoline::parent();}
+  impl_pointer&       left(){return trampoline::left();}
+  impl_pointer        left()const{return trampoline::left();}
+  impl_pointer&       right(){return trampoline::right();}
+  impl_pointer        right()const{return trampoline::right();}
+
+  impl_pointer impl()
+  {
+    return static_cast<impl_pointer>(
+      static_cast<impl_type*>(static_cast<trampoline*>(this)));
+  }
+
+  const_impl_pointer impl()const
+  {
+    return static_cast<const_impl_pointer>(
+      static_cast<const impl_type*>(static_cast<const trampoline*>(this)));
+  }
+
+  static ordered_index_node* from_impl(impl_pointer x)
+  {
+    return
+      static_cast<ordered_index_node*>(
+        static_cast<trampoline*>(
+          raw_ptr<impl_type*>(x)));
+  }
+
+  static const ordered_index_node* from_impl(const_impl_pointer x)
+  {
+    return
+      static_cast<const ordered_index_node*>(
+        static_cast<const trampoline*>(
+          raw_ptr<const impl_type*>(x)));
+  }
+
+  /* interoperability with bidir_node_iterator */
+
+  static void increment(ordered_index_node*& x)
+  {
+    impl_pointer xi=x->impl();
+    trampoline::increment(xi);
+    x=from_impl(xi);
+  }
+
+  static void decrement(ordered_index_node*& x)
+  {
+    impl_pointer xi=x->impl();
+    trampoline::decrement(xi);
+    x=from_impl(xi);
+  }
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/ord_index_ops.hpp b/vendor/pdalboost/boost/multi_index/detail/ord_index_ops.hpp
new file mode 100644
index 0000000..27d8852
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/ord_index_ops.hpp
@@ -0,0 +1,266 @@
+/* Copyright 2003-2014 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ *
+ * The internal implementation of red-black trees is based on that of SGI STL
+ * stl_tree.h file: 
+ *
+ * Copyright (c) 1996,1997
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.  Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied warranty.
+ *
+ *
+ * Copyright (c) 1994
+ * Hewlett-Packard Company
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.  Hewlett-Packard Company makes no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied warranty.
+ *
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_OPS_HPP
+#define BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_OPS_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/and.hpp>
+#include <boost/multi_index/detail/promotes_arg.hpp>
+#include <utility>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Common code for index memfuns having templatized and
+ * non-templatized versions.
+ * Implementation note: When CompatibleKey is consistently promoted to
+ * KeyFromValue::result_type for comparison, the promotion is made once in
+ * advance to increase efficiency.
+ */
+
+template<
+  typename Node,typename KeyFromValue,
+  typename CompatibleKey,typename CompatibleCompare
+>
+inline Node* ordered_index_find(
+  Node* top,Node* y,const KeyFromValue& key,const CompatibleKey& x,
+  const CompatibleCompare& comp)
+{
+  typedef typename KeyFromValue::result_type key_type;
+
+  return ordered_index_find(
+    top,y,key,x,comp,
+    mpl::and_<
+      promotes_1st_arg<CompatibleCompare,CompatibleKey,key_type>,
+      promotes_2nd_arg<CompatibleCompare,key_type,CompatibleKey> >());
+}
+
+template<
+  typename Node,typename KeyFromValue,
+  typename CompatibleCompare
+>
+inline Node* ordered_index_find(
+  Node* top,Node* y,const KeyFromValue& key,
+  const BOOST_DEDUCED_TYPENAME KeyFromValue::result_type& x,
+  const CompatibleCompare& comp,mpl::true_)
+{
+  return ordered_index_find(top,y,key,x,comp,mpl::false_());
+}
+
+template<
+  typename Node,typename KeyFromValue,
+  typename CompatibleKey,typename CompatibleCompare
+>
+inline Node* ordered_index_find(
+  Node* top,Node* y,const KeyFromValue& key,const CompatibleKey& x,
+  const CompatibleCompare& comp,mpl::false_)
+{
+  Node* y0=y;
+
+  while (top){
+    if(!comp(key(top->value()),x)){
+      y=top;
+      top=Node::from_impl(top->left());
+    }
+    else top=Node::from_impl(top->right());
+  }
+    
+  return (y==y0||comp(x,key(y->value())))?y0:y;
+}
+
+template<
+  typename Node,typename KeyFromValue,
+  typename CompatibleKey,typename CompatibleCompare
+>
+inline Node* ordered_index_lower_bound(
+  Node* top,Node* y,const KeyFromValue& key,const CompatibleKey& x,
+  const CompatibleCompare& comp)
+{
+  typedef typename KeyFromValue::result_type key_type;
+
+  return ordered_index_lower_bound(
+    top,y,key,x,comp,
+    promotes_2nd_arg<CompatibleCompare,key_type,CompatibleKey>());
+}
+
+template<
+  typename Node,typename KeyFromValue,
+  typename CompatibleCompare
+>
+inline Node* ordered_index_lower_bound(
+  Node* top,Node* y,const KeyFromValue& key,
+  const BOOST_DEDUCED_TYPENAME KeyFromValue::result_type& x,
+  const CompatibleCompare& comp,mpl::true_)
+{
+  return ordered_index_lower_bound(top,y,key,x,comp,mpl::false_());
+}
+
+template<
+  typename Node,typename KeyFromValue,
+  typename CompatibleKey,typename CompatibleCompare
+>
+inline Node* ordered_index_lower_bound(
+  Node* top,Node* y,const KeyFromValue& key,const CompatibleKey& x,
+  const CompatibleCompare& comp,mpl::false_)
+{
+  while(top){
+    if(!comp(key(top->value()),x)){
+      y=top;
+      top=Node::from_impl(top->left());
+    }
+    else top=Node::from_impl(top->right());
+  }
+
+  return y;
+}
+
+template<
+  typename Node,typename KeyFromValue,
+  typename CompatibleKey,typename CompatibleCompare
+>
+inline Node* ordered_index_upper_bound(
+  Node* top,Node* y,const KeyFromValue& key,const CompatibleKey& x,
+  const CompatibleCompare& comp)
+{
+  typedef typename KeyFromValue::result_type key_type;
+
+  return ordered_index_upper_bound(
+    top,y,key,x,comp,
+    promotes_1st_arg<CompatibleCompare,CompatibleKey,key_type>());
+}
+
+template<
+  typename Node,typename KeyFromValue,
+  typename CompatibleCompare
+>
+inline Node* ordered_index_upper_bound(
+  Node* top,Node* y,const KeyFromValue& key,
+  const BOOST_DEDUCED_TYPENAME KeyFromValue::result_type& x,
+  const CompatibleCompare& comp,mpl::true_)
+{
+  return ordered_index_upper_bound(top,y,key,x,comp,mpl::false_());
+}
+
+template<
+  typename Node,typename KeyFromValue,
+  typename CompatibleKey,typename CompatibleCompare
+>
+inline Node* ordered_index_upper_bound(
+  Node* top,Node* y,const KeyFromValue& key,const CompatibleKey& x,
+  const CompatibleCompare& comp,mpl::false_)
+{
+  while(top){
+    if(comp(x,key(top->value()))){
+      y=top;
+      top=Node::from_impl(top->left());
+    }
+    else top=Node::from_impl(top->right());
+  }
+
+  return y;
+}
+
+template<
+  typename Node,typename KeyFromValue,
+  typename CompatibleKey,typename CompatibleCompare
+>
+inline std::pair<Node*,Node*> ordered_index_equal_range(
+  Node* top,Node* y,const KeyFromValue& key,const CompatibleKey& x,
+  const CompatibleCompare& comp)
+{
+  typedef typename KeyFromValue::result_type key_type;
+
+  return ordered_index_equal_range(
+    top,y,key,x,comp,
+    mpl::and_<
+      promotes_1st_arg<CompatibleCompare,CompatibleKey,key_type>,
+      promotes_2nd_arg<CompatibleCompare,key_type,CompatibleKey> >());
+}
+
+template<
+  typename Node,typename KeyFromValue,
+  typename CompatibleCompare
+>
+inline std::pair<Node*,Node*> ordered_index_equal_range(
+  Node* top,Node* y,const KeyFromValue& key,
+  const BOOST_DEDUCED_TYPENAME KeyFromValue::result_type& x,
+  const CompatibleCompare& comp,mpl::true_)
+{
+  return ordered_index_equal_range(top,y,key,x,comp,mpl::false_());
+}
+
+template<
+  typename Node,typename KeyFromValue,
+  typename CompatibleKey,typename CompatibleCompare
+>
+inline std::pair<Node*,Node*> ordered_index_equal_range(
+  Node* top,Node* y,const KeyFromValue& key,const CompatibleKey& x,
+  const CompatibleCompare& comp,mpl::false_)
+{
+  while(top){
+    if(comp(key(top->value()),x)){
+      top=Node::from_impl(top->right());
+    }
+    else if(comp(x,key(top->value()))){
+      y=top;
+      top=Node::from_impl(top->left());
+    }
+    else{
+      return std::pair<Node*,Node*>(
+        ordered_index_lower_bound(
+          Node::from_impl(top->left()),top,key,x,comp,mpl::false_()),
+        ordered_index_upper_bound(
+          Node::from_impl(top->right()),y,key,x,comp,mpl::false_()));
+    }
+  }
+
+  return std::pair<Node*,Node*>(y,y);
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/promotes_arg.hpp b/vendor/pdalboost/boost/multi_index/detail/promotes_arg.hpp
new file mode 100644
index 0000000..6694cdd
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/promotes_arg.hpp
@@ -0,0 +1,83 @@
+/* Copyright 2003-2014 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_PROMOTES_ARG_HPP
+#define BOOST_MULTI_INDEX_DETAIL_PROMOTES_ARG_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+
+/* Metafunctions to check if f(arg1,arg2) promotes either arg1 to the type of
+ * arg2 or viceversa. By default, (i.e. if it cannot be determined), no
+ * promotion is assumed.
+ */
+
+#if !defined(BOOST_IS_CONVERTIBLE)
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+template<typename F,typename Arg1,typename Arg2>
+struct promotes_1st_arg:mpl::false_{};
+
+template<typename F,typename Arg1,typename Arg2>
+struct promotes_2nd_arg:mpl::false_{};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#else
+
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/multi_index/detail/is_transparent.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+  
+template<typename F,typename Arg1,typename Arg2>
+struct promotes_1st_arg:
+  mpl::and_<
+    mpl::not_<is_transparent<F,Arg1,Arg2> >,
+    is_convertible<const Arg1,Arg2>,
+    is_transparent<F,Arg2,Arg2>
+  >
+{};
+
+template<typename F,typename Arg1,typename Arg2>
+struct promotes_2nd_arg:
+  mpl::and_<
+    mpl::not_<is_transparent<F,Arg1,Arg2> >,
+    is_convertible<const Arg2,Arg1>,
+    is_transparent<F,Arg1,Arg1>
+  >
+{};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif /* defined(BOOST_IS_CONVERTIBLE) */
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/raw_ptr.hpp b/vendor/pdalboost/boost/multi_index/detail/raw_ptr.hpp
new file mode 100644
index 0000000..ec03edd
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/raw_ptr.hpp
@@ -0,0 +1,52 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_RAW_PTR_HPP
+#define BOOST_MULTI_INDEX_DETAIL_RAW_PTR_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* gets the underlying pointer of a pointer-like value */
+
+template<typename RawPointer>
+inline RawPointer raw_ptr(RawPointer const& p,mpl::true_)
+{
+  return p;
+}
+
+template<typename RawPointer,typename Pointer>
+inline RawPointer raw_ptr(Pointer const& p,mpl::false_)
+{
+  return p==Pointer(0)?0:&*p;
+}
+
+template<typename RawPointer,typename Pointer>
+inline RawPointer raw_ptr(Pointer const& p)
+{
+  return raw_ptr<RawPointer>(p,is_same<RawPointer,Pointer>());
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/safe_mode.hpp b/vendor/pdalboost/boost/multi_index/detail/safe_mode.hpp
new file mode 100644
index 0000000..0aeffe5
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/safe_mode.hpp
@@ -0,0 +1,588 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_SAFE_MODE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_SAFE_MODE_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+/* Safe mode machinery, in the spirit of Cay Hortmann's "Safe STL"
+ * (http://www.horstmann.com/safestl.html).
+ * In this mode, containers of type Container are derived from
+ * safe_container<Container>, and their corresponding iterators
+ * are wrapped with safe_iterator. These classes provide
+ * an internal record of which iterators are at a given moment associated
+ * to a given container, and properly mark the iterators as invalid
+ * when the container gets destroyed.
+ * Iterators are chained in a single attached list, whose header is
+ * kept by the container. More elaborate data structures would yield better
+ * performance, but I decided to keep complexity to a minimum since
+ * speed is not an issue here.
+ * Safe mode iterators automatically check that only proper operations
+ * are performed on them: for instance, an invalid iterator cannot be
+ * dereferenced. Additionally, a set of utilty macros and functions are
+ * provided that serve to implement preconditions and cooperate with
+ * the framework within the container.
+ * Iterators can also be unchecked, i.e. they do not have info about
+ * which container they belong in. This situation arises when the iterator
+ * is restored from a serialization archive: only information on the node
+ * is available, and it is not possible to determine to which container
+ * the iterator is associated to. The only sensible policy is to assume
+ * unchecked iterators are valid, though this can certainly generate false
+ * positive safe mode checks.
+ * This is not a full-fledged safe mode framework, and is only intended
+ * for use within the limits of Boost.MultiIndex.
+ */
+
+/* Assertion macros. These resolve to no-ops if
+ * !defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE).
+ */
+
+#if !defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#undef BOOST_MULTI_INDEX_SAFE_MODE_ASSERT
+#define BOOST_MULTI_INDEX_SAFE_MODE_ASSERT(expr,error_code) ((void)0)
+#else
+#if !defined(BOOST_MULTI_INDEX_SAFE_MODE_ASSERT)
+#include <boost/assert.hpp>
+#define BOOST_MULTI_INDEX_SAFE_MODE_ASSERT(expr,error_code) BOOST_ASSERT(expr)
+#endif
+#endif
+
+#define BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it)                           \
+  BOOST_MULTI_INDEX_SAFE_MODE_ASSERT(                                        \
+    safe_mode::check_valid_iterator(it),                                     \
+    safe_mode::invalid_iterator);
+
+#define BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(it)                 \
+  BOOST_MULTI_INDEX_SAFE_MODE_ASSERT(                                        \
+    safe_mode::check_dereferenceable_iterator(it),                           \
+    safe_mode::not_dereferenceable_iterator);
+
+#define BOOST_MULTI_INDEX_CHECK_INCREMENTABLE_ITERATOR(it)                   \
+  BOOST_MULTI_INDEX_SAFE_MODE_ASSERT(                                        \
+    safe_mode::check_incrementable_iterator(it),                             \
+    safe_mode::not_incrementable_iterator);
+
+#define BOOST_MULTI_INDEX_CHECK_DECREMENTABLE_ITERATOR(it)                   \
+  BOOST_MULTI_INDEX_SAFE_MODE_ASSERT(                                        \
+    safe_mode::check_decrementable_iterator(it),                             \
+    safe_mode::not_decrementable_iterator);
+
+#define BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,cont)                            \
+  BOOST_MULTI_INDEX_SAFE_MODE_ASSERT(                                        \
+    safe_mode::check_is_owner(it,cont),                                      \
+    safe_mode::not_owner);
+
+#define BOOST_MULTI_INDEX_CHECK_SAME_OWNER(it0,it1)                          \
+  BOOST_MULTI_INDEX_SAFE_MODE_ASSERT(                                        \
+    safe_mode::check_same_owner(it0,it1),                                    \
+    safe_mode::not_same_owner);
+
+#define BOOST_MULTI_INDEX_CHECK_VALID_RANGE(it0,it1)                         \
+  BOOST_MULTI_INDEX_SAFE_MODE_ASSERT(                                        \
+    safe_mode::check_valid_range(it0,it1),                                   \
+    safe_mode::invalid_range);
+
+#define BOOST_MULTI_INDEX_CHECK_OUTSIDE_RANGE(it,it0,it1)                    \
+  BOOST_MULTI_INDEX_SAFE_MODE_ASSERT(                                        \
+    safe_mode::check_outside_range(it,it0,it1),                              \
+    safe_mode::inside_range);
+
+#define BOOST_MULTI_INDEX_CHECK_IN_BOUNDS(it,n)                              \
+  BOOST_MULTI_INDEX_SAFE_MODE_ASSERT(                                        \
+    safe_mode::check_in_bounds(it,n),                                        \
+    safe_mode::out_of_bounds);
+
+#define BOOST_MULTI_INDEX_CHECK_DIFFERENT_CONTAINER(cont0,cont1)             \
+  BOOST_MULTI_INDEX_SAFE_MODE_ASSERT(                                        \
+    safe_mode::check_different_container(cont0,cont1),                       \
+    safe_mode::same_container);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/detail/iterator.hpp>
+#include <boost/multi_index/detail/access_specifier.hpp>
+#include <boost/multi_index/detail/iter_adaptor.hpp>
+#include <boost/multi_index/safe_mode_errors.hpp>
+#include <boost/noncopyable.hpp>
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/version.hpp>
+#endif
+
+#if defined(BOOST_HAS_THREADS)
+#include <boost/detail/lightweight_mutex.hpp>
+#endif
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace safe_mode{
+
+/* Checking routines. Assume the best for unchecked iterators
+ * (i.e. they pass the checking when there is not enough info
+ * to know.)
+ */
+
+template<typename Iterator>
+inline bool check_valid_iterator(const Iterator& it)
+{
+  return it.valid()||it.unchecked();
+}
+
+template<typename Iterator>
+inline bool check_dereferenceable_iterator(const Iterator& it)
+{
+  return (it.valid()&&it!=it.owner()->end())||it.unchecked();
+}
+
+template<typename Iterator>
+inline bool check_incrementable_iterator(const Iterator& it)
+{
+  return (it.valid()&&it!=it.owner()->end())||it.unchecked();
+}
+
+template<typename Iterator>
+inline bool check_decrementable_iterator(const Iterator& it)
+{
+  return (it.valid()&&it!=it.owner()->begin())||it.unchecked();
+}
+
+template<typename Iterator>
+inline bool check_is_owner(
+  const Iterator& it,const typename Iterator::container_type& cont)
+{
+  return (it.valid()&&it.owner()==&cont)||it.unchecked();
+}
+
+template<typename Iterator>
+inline bool check_same_owner(const Iterator& it0,const Iterator& it1)
+{
+  return (it0.valid()&&it1.valid()&&it0.owner()==it1.owner())||
+         it0.unchecked()||it1.unchecked();
+}
+
+template<typename Iterator>
+inline bool check_valid_range(const Iterator& it0,const Iterator& it1)
+{
+  if(!check_same_owner(it0,it1))return false;
+
+  if(it0.valid()){
+    Iterator last=it0.owner()->end();
+    if(it1==last)return true;
+
+    for(Iterator first=it0;first!=last;++first){
+      if(first==it1)return true;
+    }
+    return false;
+  }
+  return true;
+}
+
+template<typename Iterator>
+inline bool check_outside_range(
+  const Iterator& it,const Iterator& it0,const Iterator& it1)
+{
+  if(!check_same_owner(it0,it1))return false;
+
+  if(it0.valid()){
+    Iterator last=it0.owner()->end();
+    bool found=false;
+
+    Iterator first=it0;
+    for(;first!=last;++first){
+      if(first==it1)break;
+    
+      /* crucial that this check goes after previous break */
+    
+      if(first==it)found=true;
+    }
+    if(first!=it1)return false;
+    return !found;
+  }
+  return true;
+}
+
+template<typename Iterator,typename Difference>
+inline bool check_in_bounds(const Iterator& it,Difference n)
+{
+  if(it.unchecked())return true;
+  if(!it.valid())   return false;
+  if(n>0)           return it.owner()->end()-it>=n;
+  else              return it.owner()->begin()-it<=n;
+}
+
+template<typename Container>
+inline bool check_different_container(
+  const Container& cont0,const Container& cont1)
+{
+  return &cont0!=&cont1;
+}
+
+/* Invalidates all iterators equivalent to that given. Safe containers
+ * must call this when deleting elements: the safe mode framework cannot
+ * perform this operation automatically without outside help.
+ */
+
+template<typename Iterator>
+inline void detach_equivalent_iterators(Iterator& it)
+{
+  if(it.valid()){
+    {
+#if defined(BOOST_HAS_THREADS)
+      pdalboost::detail::lightweight_mutex::scoped_lock lock(it.cont->mutex);
+#endif
+
+      Iterator *prev_,*next_;
+      for(
+        prev_=static_cast<Iterator*>(&it.cont->header);
+        (next_=static_cast<Iterator*>(prev_->next))!=0;){
+        if(next_!=&it&&*next_==it){
+          prev_->next=next_->next;
+          next_->cont=0;
+        }
+        else prev_=next_;
+      }
+    }
+    it.detach();
+  }
+}
+
+template<typename Container> class safe_container; /* fwd decl. */
+
+} /* namespace multi_index::safe_mode */
+
+namespace detail{
+
+class safe_container_base;                 /* fwd decl. */
+
+class safe_iterator_base
+{
+public:
+  bool valid()const{return cont!=0;}
+  bool unchecked()const{return unchecked_;}
+
+  inline void detach();
+
+  void uncheck()
+  {
+    detach();
+    unchecked_=true;
+  }
+
+protected:
+  safe_iterator_base():cont(0),next(0),unchecked_(false){}
+
+  explicit safe_iterator_base(safe_container_base* cont_):
+    unchecked_(false)
+  {
+    attach(cont_);
+  }
+
+  safe_iterator_base(const safe_iterator_base& it):
+    unchecked_(it.unchecked_)
+  {
+    attach(it.cont);
+  }
+
+  safe_iterator_base& operator=(const safe_iterator_base& it)
+  {
+    unchecked_=it.unchecked_;
+    safe_container_base* new_cont=it.cont;
+    if(cont!=new_cont){
+      detach();
+      attach(new_cont);
+    }
+    return *this;
+  }
+
+  ~safe_iterator_base()
+  {
+    detach();
+  }
+
+  const safe_container_base* owner()const{return cont;}
+
+BOOST_MULTI_INDEX_PRIVATE_IF_MEMBER_TEMPLATE_FRIENDS:
+  friend class safe_container_base;
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+  template<typename>          friend class safe_mode::safe_container;
+  template<typename Iterator> friend
+    void safe_mode::detach_equivalent_iterators(Iterator&);
+#endif
+
+  inline void attach(safe_container_base* cont_);
+
+  safe_container_base* cont;
+  safe_iterator_base*  next;
+  bool                 unchecked_;
+};
+
+class safe_container_base:private noncopyable
+{
+public:
+  safe_container_base(){}
+
+BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
+  friend class safe_iterator_base;
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+  template<typename Iterator> friend
+    void safe_mode::detach_equivalent_iterators(Iterator&);
+#endif
+
+  ~safe_container_base()
+  {
+    /* Detaches all remaining iterators, which by now will
+     * be those pointing to the end of the container.
+     */
+
+    for(safe_iterator_base* it=header.next;it;it=it->next)it->cont=0;
+    header.next=0;
+  }
+
+  void swap(safe_container_base& x)
+  {
+    for(safe_iterator_base* it0=header.next;it0;it0=it0->next)it0->cont=&x;
+    for(safe_iterator_base* it1=x.header.next;it1;it1=it1->next)it1->cont=this;
+    std::swap(header.cont,x.header.cont);
+    std::swap(header.next,x.header.next);
+  }
+
+  safe_iterator_base header;
+
+#if defined(BOOST_HAS_THREADS)
+  pdalboost::detail::lightweight_mutex mutex;
+#endif
+};
+
+void safe_iterator_base::attach(safe_container_base* cont_)
+{
+  cont=cont_;
+  if(cont){
+#if defined(BOOST_HAS_THREADS)
+    pdalboost::detail::lightweight_mutex::scoped_lock lock(cont->mutex);
+#endif
+
+    next=cont->header.next;
+    cont->header.next=this;
+  }
+}
+
+void safe_iterator_base::detach()
+{
+  if(cont){
+#if defined(BOOST_HAS_THREADS)
+    pdalboost::detail::lightweight_mutex::scoped_lock lock(cont->mutex);
+#endif
+
+    safe_iterator_base *prev_,*next_;
+    for(prev_=&cont->header;(next_=prev_->next)!=this;prev_=next_){}
+    prev_->next=next;
+    cont=0;
+  }
+}
+
+} /* namespace multi_index::detail */
+
+namespace safe_mode{
+
+/* In order to enable safe mode on a container:
+ *   - The container must derive from safe_container<container_type>,
+ *   - iterators must be generated via safe_iterator, which adapts a
+ *     preexistent unsafe iterator class.
+ */
+ 
+template<typename Container>
+class safe_container;
+
+template<typename Iterator,typename Container>
+class safe_iterator:
+  public detail::iter_adaptor<safe_iterator<Iterator,Container>,Iterator>,
+  public detail::safe_iterator_base
+{
+  typedef detail::iter_adaptor<safe_iterator,Iterator> super;
+  typedef detail::safe_iterator_base                   safe_super;
+
+public:
+  typedef Container                                    container_type;
+  typedef typename Iterator::reference                 reference;
+  typedef typename Iterator::difference_type           difference_type;
+
+  safe_iterator(){}
+  explicit safe_iterator(safe_container<container_type>* cont_):
+    safe_super(cont_){}
+  template<typename T0>
+  safe_iterator(const T0& t0,safe_container<container_type>* cont_):
+    super(Iterator(t0)),safe_super(cont_){}
+  template<typename T0,typename T1>
+  safe_iterator(
+    const T0& t0,const T1& t1,safe_container<container_type>* cont_):
+    super(Iterator(t0,t1)),safe_super(cont_){}
+
+  safe_iterator& operator=(const safe_iterator& x)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(x);
+    this->base_reference()=x.base_reference();
+    safe_super::operator=(x);
+    return *this;
+  }
+
+  const container_type* owner()const
+  {
+    return
+      static_cast<const container_type*>(
+        static_cast<const safe_container<container_type>*>(
+          this->safe_super::owner()));
+  }
+
+  /* get_node is not to be used by the user */
+
+  typedef typename Iterator::node_type node_type;
+
+  node_type* get_node()const{return this->base_reference().get_node();}
+
+private:
+  friend class pdalboost::multi_index::detail::iter_adaptor_access;
+
+  reference dereference()const
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(*this);
+    BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(*this);
+    return *(this->base_reference());
+  }
+
+  bool equal(const safe_iterator& x)const
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(*this);
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(x);
+    BOOST_MULTI_INDEX_CHECK_SAME_OWNER(*this,x);
+    return this->base_reference()==x.base_reference();
+  }
+
+  void increment()
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(*this);
+    BOOST_MULTI_INDEX_CHECK_INCREMENTABLE_ITERATOR(*this);
+    ++(this->base_reference());
+  }
+
+  void decrement()
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(*this);
+    BOOST_MULTI_INDEX_CHECK_DECREMENTABLE_ITERATOR(*this);
+    --(this->base_reference());
+  }
+
+  void advance(difference_type n)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(*this);
+    BOOST_MULTI_INDEX_CHECK_IN_BOUNDS(*this,n);
+    this->base_reference()+=n;
+  }
+
+  difference_type distance_to(const safe_iterator& x)const
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(*this);
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(x);
+    BOOST_MULTI_INDEX_CHECK_SAME_OWNER(*this,x);
+    return x.base_reference()-this->base_reference();
+  }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+  /* Serialization. Note that Iterator::save and Iterator:load
+   * are assumed to be defined and public: at first sight it seems
+   * like we could have resorted to the public serialization interface
+   * for doing the forwarding to the adapted iterator class:
+   *   ar<<base_reference();
+   *   ar>>base_reference();
+   * but this would cause incompatibilities if a saving
+   * program is in safe mode and the loading program is not, or
+   * viceversa --in safe mode, the archived iterator data is one layer
+   * deeper, this is especially relevant with XML archives.
+   * It'd be nice if Boost.Serialization provided some forwarding
+   * facility for use by adaptor classes.
+   */ 
+
+  friend class pdalboost::serialization::access;
+
+  BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+  template<class Archive>
+  void save(Archive& ar,const unsigned int version)const
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(*this);
+    this->base_reference().save(ar,version);
+  }
+
+  template<class Archive>
+  void load(Archive& ar,const unsigned int version)
+  {
+    this->base_reference().load(ar,version);
+    safe_super::uncheck();
+  }
+#endif
+};
+
+template<typename Container>
+class safe_container:public detail::safe_container_base
+{
+  typedef detail::safe_container_base super;
+
+public:
+  void detach_dereferenceable_iterators()
+  {
+    typedef typename Container::iterator iterator;
+
+    iterator end_=static_cast<Container*>(this)->end();
+    iterator *prev_,*next_;
+    for(
+      prev_=static_cast<iterator*>(&this->header);
+      (next_=static_cast<iterator*>(prev_->next))!=0;){
+      if(*next_!=end_){
+        prev_->next=next_->next;
+        next_->cont=0;
+      }
+      else prev_=next_;
+    }
+  }
+
+  void swap(safe_container<Container>& x)
+  {
+    super::swap(x);
+  }
+};
+
+} /* namespace multi_index::safe_mode */
+
+} /* namespace multi_index */
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+namespace serialization{
+template<typename Iterator,typename Container>
+struct version<
+  pdalboost::multi_index::safe_mode::safe_iterator<Iterator,Container>
+>
+{
+  BOOST_STATIC_CONSTANT(
+    int,value=pdalboost::serialization::version<Iterator>::value);
+};
+} /* namespace serialization */
+#endif
+
+} /* namespace pdalboost */
+
+#endif /* BOOST_MULTI_INDEX_ENABLE_SAFE_MODE */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/scope_guard.hpp b/vendor/pdalboost/boost/multi_index/detail/scope_guard.hpp
new file mode 100644
index 0000000..0b68eeb
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/scope_guard.hpp
@@ -0,0 +1,453 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_SCOPE_GUARD_HPP
+#define BOOST_MULTI_INDEX_DETAIL_SCOPE_GUARD_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Until some official version of the ScopeGuard idiom makes it into Boost,
+ * we locally define our own. This is a merely reformated version of
+ * ScopeGuard.h as defined in:
+ *   Alexandrescu, A., Marginean, P.:"Generic<Programming>: Change the Way You
+ *     Write Exception-Safe Code - Forever", C/C++ Users Jornal, Dec 2000,
+ *     http://www.drdobbs.com/184403758
+ * with the following modifications:
+ *   - General pretty formatting (pretty to my taste at least.)
+ *   - Naming style changed to standard C++ library requirements.
+ *   - Added scope_guard_impl4 and obj_scope_guard_impl3, (Boost.MultiIndex
+ *     needs them). A better design would provide guards for many more
+ *     arguments through the Boost Preprocessor Library.
+ *   - Added scope_guard_impl_base::touch (see below.)
+ *   - Removed RefHolder and ByRef, whose functionality is provided
+ *     already by Boost.Ref.
+ *   - Removed static make_guard's and make_obj_guard's, so that the code
+ *     will work even if BOOST_NO_MEMBER_TEMPLATES is defined. This forces
+ *     us to move some private ctors to public, though.
+ *
+ * NB: CodeWarrior Pro 8 seems to have problems looking up safe_execute
+ * without an explicit qualification.
+ * 
+ * We also define the following variants of the idiom:
+ * 
+ *   - make_guard_if_c<bool>( ... )
+ *   - make_guard_if<IntegralConstant>( ... )
+ *   - make_obj_guard_if_c<bool>( ... )
+ *   - make_obj_guard_if<IntegralConstant>( ... )
+ * which may be used with a compile-time constant to yield
+ * a "null_guard" if the boolean compile-time parameter is false,
+ * or conversely, the guard is only constructed if the constant is true.
+ * This is useful to avoid extra tagging, because the returned
+ * null_guard can be optimzed comlpetely away by the compiler.
+ */
+
+class scope_guard_impl_base
+{
+public:
+  scope_guard_impl_base():dismissed_(false){}
+  void dismiss()const{dismissed_=true;}
+
+  /* This helps prevent some "unused variable" warnings under, for instance,
+   * GCC 3.2.
+   */
+  void touch()const{}
+
+protected:
+  ~scope_guard_impl_base(){}
+
+  scope_guard_impl_base(const scope_guard_impl_base& other):
+    dismissed_(other.dismissed_)
+  {
+    other.dismiss();
+  }
+
+  template<typename J>
+  static void safe_execute(J& j){
+    BOOST_TRY{
+      if(!j.dismissed_)j.execute();
+    }
+    BOOST_CATCH(...){}
+    BOOST_CATCH_END
+  }
+  
+  mutable bool dismissed_;
+
+private:
+  scope_guard_impl_base& operator=(const scope_guard_impl_base&);
+};
+
+typedef const scope_guard_impl_base& scope_guard;
+
+struct null_guard : public scope_guard_impl_base
+{
+    template< class T1 >
+    null_guard( const T1& )
+    { }
+
+    template< class T1, class T2 >
+    null_guard( const T1&, const T2& )
+    { }
+
+    template< class T1, class T2, class T3 >
+    null_guard( const T1&, const T2&, const T3& )
+    { }
+
+    template< class T1, class T2, class T3, class T4 >
+    null_guard( const T1&, const T2&, const T3&, const T4& )
+    { }
+
+    template< class T1, class T2, class T3, class T4, class T5 >
+    null_guard( const T1&, const T2&, const T3&, const T4&, const T5& )
+    { }
+};
+
+template< bool cond, class T >
+struct null_guard_return
+{
+    typedef typename pdalboost::mpl::if_c<cond,T,null_guard>::type type;
+};
+
+template<typename F>
+class scope_guard_impl0:public scope_guard_impl_base
+{
+public:
+  scope_guard_impl0(F fun):fun_(fun){}
+  ~scope_guard_impl0(){scope_guard_impl_base::safe_execute(*this);}
+  void execute(){fun_();}
+
+protected:
+
+  F fun_;
+};
+
+template<typename F> 
+inline scope_guard_impl0<F> make_guard(F fun)
+{
+  return scope_guard_impl0<F>(fun);
+}
+
+template<bool cond, typename F> 
+inline typename null_guard_return<cond,scope_guard_impl0<F> >::type  
+make_guard_if_c(F fun)
+{
+  return typename null_guard_return<cond,scope_guard_impl0<F> >::type(fun);
+}
+
+template<typename C, typename F> 
+inline typename null_guard_return<C::value,scope_guard_impl0<F> >::type  
+make_guard_if(F fun)
+{
+  return make_guard_if<C::value>(fun);
+}
+
+template<typename F,typename P1>
+class scope_guard_impl1:public scope_guard_impl_base
+{
+public:
+  scope_guard_impl1(F fun,P1 p1):fun_(fun),p1_(p1){}
+  ~scope_guard_impl1(){scope_guard_impl_base::safe_execute(*this);}
+  void execute(){fun_(p1_);}
+
+protected:
+  F        fun_;
+  const P1 p1_;
+};
+
+template<typename F,typename P1> 
+inline scope_guard_impl1<F,P1> make_guard(F fun,P1 p1)
+{
+  return scope_guard_impl1<F,P1>(fun,p1);
+}
+
+template<bool cond, typename F,typename P1> 
+inline typename null_guard_return<cond,scope_guard_impl1<F,P1> >::type 
+make_guard_if_c(F fun,P1 p1)
+{
+  return typename null_guard_return<cond,scope_guard_impl1<F,P1> >::type(fun,p1);
+}
+
+template<typename C, typename F,typename P1> 
+inline typename null_guard_return<C::value,scope_guard_impl1<F,P1> >::type 
+make_guard_if(F fun,P1 p1)
+{
+  return make_guard_if_c<C::value>(fun,p1);
+}
+
+template<typename F,typename P1,typename P2>
+class scope_guard_impl2:public scope_guard_impl_base
+{
+public:
+  scope_guard_impl2(F fun,P1 p1,P2 p2):fun_(fun),p1_(p1),p2_(p2){}
+  ~scope_guard_impl2(){scope_guard_impl_base::safe_execute(*this);}
+  void execute(){fun_(p1_,p2_);}
+
+protected:
+  F        fun_;
+  const P1 p1_;
+  const P2 p2_;
+};
+
+template<typename F,typename P1,typename P2>
+inline scope_guard_impl2<F,P1,P2> make_guard(F fun,P1 p1,P2 p2)
+{
+  return scope_guard_impl2<F,P1,P2>(fun,p1,p2);
+}
+
+template<bool cond, typename F,typename P1,typename P2>
+inline typename null_guard_return<cond,scope_guard_impl2<F,P1,P2> >::type
+make_guard_if_c(F fun,P1 p1,P2 p2)
+{
+  return typename null_guard_return<cond,scope_guard_impl2<F,P1,P2> >::type(fun,p1,p2);
+}
+
+template<typename C, typename F,typename P1,typename P2>
+inline typename null_guard_return<C::value,scope_guard_impl2<F,P1,P2> >::type
+make_guard_if(F fun,P1 p1,P2 p2)
+{
+  return make_guard_if_c<C::value>(fun,p1,p2);
+}
+
+template<typename F,typename P1,typename P2,typename P3>
+class scope_guard_impl3:public scope_guard_impl_base
+{
+public:
+  scope_guard_impl3(F fun,P1 p1,P2 p2,P3 p3):fun_(fun),p1_(p1),p2_(p2),p3_(p3){}
+  ~scope_guard_impl3(){scope_guard_impl_base::safe_execute(*this);}
+  void execute(){fun_(p1_,p2_,p3_);}
+
+protected:
+  F        fun_;
+  const P1 p1_;
+  const P2 p2_;
+  const P3 p3_;
+};
+
+template<typename F,typename P1,typename P2,typename P3>
+inline scope_guard_impl3<F,P1,P2,P3> make_guard(F fun,P1 p1,P2 p2,P3 p3)
+{
+  return scope_guard_impl3<F,P1,P2,P3>(fun,p1,p2,p3);
+}
+
+template<bool cond,typename F,typename P1,typename P2,typename P3>
+inline typename null_guard_return<cond,scope_guard_impl3<F,P1,P2,P3> >::type 
+make_guard_if_c(F fun,P1 p1,P2 p2,P3 p3)
+{
+  return typename null_guard_return<cond,scope_guard_impl3<F,P1,P2,P3> >::type(fun,p1,p2,p3);
+}
+
+template<typename C,typename F,typename P1,typename P2,typename P3>
+inline typename null_guard_return< C::value,scope_guard_impl3<F,P1,P2,P3> >::type 
+make_guard_if(F fun,P1 p1,P2 p2,P3 p3)
+{
+  return make_guard_if_c<C::value>(fun,p1,p2,p3);
+}
+
+template<typename F,typename P1,typename P2,typename P3,typename P4>
+class scope_guard_impl4:public scope_guard_impl_base
+{
+public:
+  scope_guard_impl4(F fun,P1 p1,P2 p2,P3 p3,P4 p4):
+    fun_(fun),p1_(p1),p2_(p2),p3_(p3),p4_(p4){}
+  ~scope_guard_impl4(){scope_guard_impl_base::safe_execute(*this);}
+  void execute(){fun_(p1_,p2_,p3_,p4_);}
+
+protected:
+  F        fun_;
+  const P1 p1_;
+  const P2 p2_;
+  const P3 p3_;
+  const P4 p4_;
+};
+
+template<typename F,typename P1,typename P2,typename P3,typename P4>
+inline scope_guard_impl4<F,P1,P2,P3,P4> make_guard(
+  F fun,P1 p1,P2 p2,P3 p3,P4 p4)
+{
+  return scope_guard_impl4<F,P1,P2,P3,P4>(fun,p1,p2,p3,p4);
+}
+
+template<bool cond, typename F,typename P1,typename P2,typename P3,typename P4>
+inline typename null_guard_return<cond,scope_guard_impl4<F,P1,P2,P3,P4> >::type 
+make_guard_if_c(
+  F fun,P1 p1,P2 p2,P3 p3,P4 p4)
+{
+  return typename null_guard_return<cond,scope_guard_impl4<F,P1,P2,P3,P4> >::type(fun,p1,p2,p3,p4);
+}
+
+template<typename C, typename F,typename P1,typename P2,typename P3,typename P4>
+inline typename null_guard_return<C::value,scope_guard_impl4<F,P1,P2,P3,P4> >::type 
+make_guard_if(
+  F fun,P1 p1,P2 p2,P3 p3,P4 p4)
+{
+  return make_guard_if_c<C::value>(fun,p1,p2,p3,p4);
+}
+
+template<class Obj,typename MemFun>
+class obj_scope_guard_impl0:public scope_guard_impl_base
+{
+public:
+  obj_scope_guard_impl0(Obj& obj,MemFun mem_fun):obj_(obj),mem_fun_(mem_fun){}
+  ~obj_scope_guard_impl0(){scope_guard_impl_base::safe_execute(*this);}
+  void execute(){(obj_.*mem_fun_)();}
+
+protected:
+  Obj&   obj_;
+  MemFun mem_fun_;
+};
+
+template<class Obj,typename MemFun>
+inline obj_scope_guard_impl0<Obj,MemFun> make_obj_guard(Obj& obj,MemFun mem_fun)
+{
+  return obj_scope_guard_impl0<Obj,MemFun>(obj,mem_fun);
+}
+
+template<bool cond, class Obj,typename MemFun>
+inline typename null_guard_return<cond,obj_scope_guard_impl0<Obj,MemFun> >::type 
+make_obj_guard_if_c(Obj& obj,MemFun mem_fun)
+{
+  return typename null_guard_return<cond,obj_scope_guard_impl0<Obj,MemFun> >::type(obj,mem_fun);
+}
+
+template<typename C, class Obj,typename MemFun>
+inline typename null_guard_return<C::value,obj_scope_guard_impl0<Obj,MemFun> >::type 
+make_obj_guard_if(Obj& obj,MemFun mem_fun)
+{
+  return make_obj_guard_if_c<C::value>(obj,mem_fun);
+}
+
+template<class Obj,typename MemFun,typename P1>
+class obj_scope_guard_impl1:public scope_guard_impl_base
+{
+public:
+  obj_scope_guard_impl1(Obj& obj,MemFun mem_fun,P1 p1):
+    obj_(obj),mem_fun_(mem_fun),p1_(p1){}
+  ~obj_scope_guard_impl1(){scope_guard_impl_base::safe_execute(*this);}
+  void execute(){(obj_.*mem_fun_)(p1_);}
+
+protected:
+  Obj&     obj_;
+  MemFun   mem_fun_;
+  const P1 p1_;
+};
+
+template<class Obj,typename MemFun,typename P1>
+inline obj_scope_guard_impl1<Obj,MemFun,P1> make_obj_guard(
+  Obj& obj,MemFun mem_fun,P1 p1)
+{
+  return obj_scope_guard_impl1<Obj,MemFun,P1>(obj,mem_fun,p1);
+}
+
+template<bool cond, class Obj,typename MemFun,typename P1>
+inline typename null_guard_return<cond,obj_scope_guard_impl1<Obj,MemFun,P1> >::type 
+make_obj_guard_if_c(  Obj& obj,MemFun mem_fun,P1 p1)
+{
+  return typename null_guard_return<cond,obj_scope_guard_impl1<Obj,MemFun,P1> >::type(obj,mem_fun,p1);
+}
+
+template<typename C, class Obj,typename MemFun,typename P1>
+inline typename null_guard_return<C::value,obj_scope_guard_impl1<Obj,MemFun,P1> >::type 
+make_obj_guard_if( Obj& obj,MemFun mem_fun,P1 p1)
+{
+  return make_obj_guard_if_c<C::value>(obj,mem_fun,p1);
+}
+
+template<class Obj,typename MemFun,typename P1,typename P2>
+class obj_scope_guard_impl2:public scope_guard_impl_base
+{
+public:
+  obj_scope_guard_impl2(Obj& obj,MemFun mem_fun,P1 p1,P2 p2):
+    obj_(obj),mem_fun_(mem_fun),p1_(p1),p2_(p2)
+  {}
+  ~obj_scope_guard_impl2(){scope_guard_impl_base::safe_execute(*this);}
+  void execute(){(obj_.*mem_fun_)(p1_,p2_);}
+
+protected:
+  Obj&     obj_;
+  MemFun   mem_fun_;
+  const P1 p1_;
+  const P2 p2_;
+};
+
+template<class Obj,typename MemFun,typename P1,typename P2>
+inline obj_scope_guard_impl2<Obj,MemFun,P1,P2>
+make_obj_guard(Obj& obj,MemFun mem_fun,P1 p1,P2 p2)
+{
+  return obj_scope_guard_impl2<Obj,MemFun,P1,P2>(obj,mem_fun,p1,p2);
+}
+
+template<bool cond, class Obj,typename MemFun,typename P1,typename P2>
+inline typename null_guard_return<cond,obj_scope_guard_impl2<Obj,MemFun,P1,P2> >::type
+make_obj_guard_if_c(Obj& obj,MemFun mem_fun,P1 p1,P2 p2)
+{
+  return typename null_guard_return<cond,obj_scope_guard_impl2<Obj,MemFun,P1,P2> >::type(obj,mem_fun,p1,p2);
+}
+
+template<typename C, class Obj,typename MemFun,typename P1,typename P2>
+inline typename null_guard_return<C::value,obj_scope_guard_impl2<Obj,MemFun,P1,P2> >::type
+make_obj_guard_if(Obj& obj,MemFun mem_fun,P1 p1,P2 p2)
+{
+  return make_obj_guard_if_c<C::value>(obj,mem_fun,p1,p2);
+}
+
+template<class Obj,typename MemFun,typename P1,typename P2,typename P3>
+class obj_scope_guard_impl3:public scope_guard_impl_base
+{
+public:
+  obj_scope_guard_impl3(Obj& obj,MemFun mem_fun,P1 p1,P2 p2,P3 p3):
+    obj_(obj),mem_fun_(mem_fun),p1_(p1),p2_(p2),p3_(p3)
+  {}
+  ~obj_scope_guard_impl3(){scope_guard_impl_base::safe_execute(*this);}
+  void execute(){(obj_.*mem_fun_)(p1_,p2_,p3_);}
+
+protected:
+  Obj&     obj_;
+  MemFun   mem_fun_;
+  const P1 p1_;
+  const P2 p2_;
+  const P3 p3_;
+};
+
+template<class Obj,typename MemFun,typename P1,typename P2,typename P3>
+inline obj_scope_guard_impl3<Obj,MemFun,P1,P2,P3>
+make_obj_guard(Obj& obj,MemFun mem_fun,P1 p1,P2 p2,P3 p3)
+{
+  return obj_scope_guard_impl3<Obj,MemFun,P1,P2,P3>(obj,mem_fun,p1,p2,p3);
+}
+
+template<bool cond, class Obj,typename MemFun,typename P1,typename P2,typename P3>
+inline typename null_guard_return<cond,obj_scope_guard_impl3<Obj,MemFun,P1,P2,P3> >::type
+make_obj_guard_if_c(Obj& obj,MemFun mem_fun,P1 p1,P2 p2,P3 p3)
+{
+  return typename null_guard_return<cond,obj_scope_guard_impl3<Obj,MemFun,P1,P2,P3> >::type(obj,mem_fun,p1,p2,p3);
+}
+
+template<typename C, class Obj,typename MemFun,typename P1,typename P2,typename P3>
+inline typename null_guard_return<C::value,obj_scope_guard_impl3<Obj,MemFun,P1,P2,P3> >::type
+make_obj_guard_if(Obj& obj,MemFun mem_fun,P1 p1,P2 p2,P3 p3)
+{
+  return make_obj_guard_if_c<C::value>(obj,mem_fun,p1,p2,p3);
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/seq_index_node.hpp b/vendor/pdalboost/boost/multi_index/detail/seq_index_node.hpp
new file mode 100644
index 0000000..d351d62
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/seq_index_node.hpp
@@ -0,0 +1,217 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_SEQ_INDEX_NODE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_SEQ_INDEX_NODE_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/detail/allocator_utilities.hpp>
+#include <boost/multi_index/detail/raw_ptr.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* doubly-linked node for use by sequenced_index */
+
+template<typename Allocator>
+struct sequenced_index_node_impl
+{
+  typedef typename
+  pdalboost::detail::allocator::rebind_to<
+    Allocator,sequenced_index_node_impl
+  >::type::pointer                      pointer;
+  typedef typename
+  pdalboost::detail::allocator::rebind_to<
+    Allocator,sequenced_index_node_impl
+  >::type::const_pointer                const_pointer;
+
+  pointer& prior(){return prior_;}
+  pointer  prior()const{return prior_;}
+  pointer& next(){return next_;}
+  pointer  next()const{return next_;}
+
+  /* interoperability with bidir_node_iterator */
+
+  static void increment(pointer& x){x=x->next();}
+  static void decrement(pointer& x){x=x->prior();}
+
+  /* algorithmic stuff */
+
+  static void link(pointer x,pointer header)
+  {
+    x->prior()=header->prior();
+    x->next()=header;
+    x->prior()->next()=x->next()->prior()=x;
+  };
+
+  static void unlink(pointer x)
+  {
+    x->prior()->next()=x->next();
+    x->next()->prior()=x->prior();
+  }
+
+  static void relink(pointer position,pointer x)
+  {
+    unlink(x);
+    x->prior()=position->prior();
+    x->next()=position;
+    x->prior()->next()=x->next()->prior()=x;
+  }
+
+  static void relink(pointer position,pointer x,pointer y)
+  {
+    /* position is assumed not to be in [x,y) */
+
+    if(x!=y){
+      pointer z=y->prior();
+      x->prior()->next()=y;
+      y->prior()=x->prior();
+      x->prior()=position->prior();
+      z->next()=position;
+      x->prior()->next()=x;
+      z->next()->prior()=z;
+    }
+  }
+
+  static void reverse(pointer header)
+  {
+    pointer x=header;
+    do{
+      pointer y=x->next();
+      std::swap(x->prior(),x->next());
+      x=y;
+    }while(x!=header);
+  }
+
+  static void swap(pointer x,pointer y)
+  {
+    /* This swap function does not exchange the header nodes,
+     * but rather their pointers. This is *not* used for implementing
+     * sequenced_index::swap.
+     */
+
+    if(x->next()!=x){
+      if(y->next()!=y){
+        std::swap(x->next(),y->next());
+        std::swap(x->prior(),y->prior());
+        x->next()->prior()=x->prior()->next()=x;
+        y->next()->prior()=y->prior()->next()=y;
+      }
+      else{
+        y->next()=x->next();
+        y->prior()=x->prior();
+        x->next()=x->prior()=x;
+        y->next()->prior()=y->prior()->next()=y;
+      }
+    }
+    else if(y->next()!=y){
+      x->next()=y->next();
+      x->prior()=y->prior();
+      y->next()=y->prior()=y;
+      x->next()->prior()=x->prior()->next()=x;
+    }
+  }
+
+private:
+  pointer prior_;
+  pointer next_;
+};
+
+template<typename Super>
+struct sequenced_index_node_trampoline:
+  sequenced_index_node_impl<
+    typename pdalboost::detail::allocator::rebind_to<
+      typename Super::allocator_type,
+      char
+    >::type
+  >
+{
+  typedef sequenced_index_node_impl<
+    typename pdalboost::detail::allocator::rebind_to<
+      typename Super::allocator_type,
+      char
+    >::type
+  > impl_type;
+};
+
+template<typename Super>
+struct sequenced_index_node:Super,sequenced_index_node_trampoline<Super>
+{
+private:
+  typedef sequenced_index_node_trampoline<Super> trampoline;
+
+public:
+  typedef typename trampoline::impl_type         impl_type;
+  typedef typename trampoline::pointer           impl_pointer;
+  typedef typename trampoline::const_pointer     const_impl_pointer;
+
+  impl_pointer& prior(){return trampoline::prior();}
+  impl_pointer  prior()const{return trampoline::prior();}
+  impl_pointer& next(){return trampoline::next();}
+  impl_pointer  next()const{return trampoline::next();}
+
+  impl_pointer impl()
+  {
+    return static_cast<impl_pointer>(
+      static_cast<impl_type*>(static_cast<trampoline*>(this)));
+  }
+
+  const_impl_pointer impl()const
+  {
+    return static_cast<const_impl_pointer>(
+      static_cast<const impl_type*>(static_cast<const trampoline*>(this)));
+  }
+
+  static sequenced_index_node* from_impl(impl_pointer x)
+  {
+    return
+      static_cast<sequenced_index_node*>(
+        static_cast<trampoline*>(
+          raw_ptr<impl_type*>(x)));
+  }
+
+  static const sequenced_index_node* from_impl(const_impl_pointer x)
+  {
+    return
+      static_cast<const sequenced_index_node*>(
+        static_cast<const trampoline*>(
+          raw_ptr<const impl_type*>(x)));
+  }
+
+  /* interoperability with bidir_node_iterator */
+
+  static void increment(sequenced_index_node*& x)
+  {
+    impl_pointer xi=x->impl();
+    trampoline::increment(xi);
+    x=from_impl(xi);
+  }
+
+  static void decrement(sequenced_index_node*& x)
+  {
+    impl_pointer xi=x->impl();
+    trampoline::decrement(xi);
+    x=from_impl(xi);
+  }
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/seq_index_ops.hpp b/vendor/pdalboost/boost/multi_index/detail/seq_index_ops.hpp
new file mode 100644
index 0000000..9407127
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/seq_index_ops.hpp
@@ -0,0 +1,199 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_SEQ_INDEX_OPS_HPP
+#define BOOST_MULTI_INDEX_DETAIL_SEQ_INDEX_OPS_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/multi_index/detail/seq_index_node.hpp>
+#include <boost/limits.hpp>
+#include <boost/type_traits/aligned_storage.hpp>
+#include <boost/type_traits/alignment_of.hpp> 
+#include <cstddef>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Common code for sequenced_index memfuns having templatized and
+ * non-templatized versions.
+ */
+
+template <typename SequencedIndex,typename Predicate>
+void sequenced_index_remove(SequencedIndex& x,Predicate pred)
+{
+  typedef typename SequencedIndex::iterator iterator;
+  iterator first=x.begin(),last=x.end();
+  while(first!=last){
+    if(pred(*first))x.erase(first++);
+    else ++first;
+  }
+}
+
+template <typename SequencedIndex,class BinaryPredicate>
+void sequenced_index_unique(SequencedIndex& x,BinaryPredicate binary_pred)
+{
+  typedef typename SequencedIndex::iterator iterator;
+  iterator first=x.begin();
+  iterator last=x.end();
+  if(first!=last){
+    for(iterator middle=first;++middle!=last;middle=first){
+      if(binary_pred(*middle,*first))x.erase(middle);
+      else first=middle;
+    }
+  }
+}
+
+template <typename SequencedIndex,typename Compare>
+void sequenced_index_merge(SequencedIndex& x,SequencedIndex& y,Compare comp)
+{
+  typedef typename SequencedIndex::iterator iterator;
+  if(&x!=&y){
+    iterator first0=x.begin(),last0=x.end();
+    iterator first1=y.begin(),last1=y.end();
+    while(first0!=last0&&first1!=last1){
+      if(comp(*first1,*first0))x.splice(first0,y,first1++);
+      else ++first0;
+    }
+    x.splice(last0,y,first1,last1);
+  }
+}
+
+/* sorting  */
+
+/* auxiliary stuff */
+
+template<typename Node,typename Compare>
+void sequenced_index_collate(
+  BOOST_DEDUCED_TYPENAME Node::impl_type* x,
+  BOOST_DEDUCED_TYPENAME Node::impl_type* y,
+  Compare comp)
+{
+  typedef typename Node::impl_type    impl_type;
+  typedef typename Node::impl_pointer impl_pointer;
+
+  impl_pointer first0=x->next();
+  impl_pointer last0=x;
+  impl_pointer first1=y->next();
+  impl_pointer last1=y;
+  while(first0!=last0&&first1!=last1){
+    if(comp(
+        Node::from_impl(first1)->value(),Node::from_impl(first0)->value())){
+      impl_pointer tmp=first1->next();
+      impl_type::relink(first0,first1);
+      first1=tmp;
+    }
+    else first0=first0->next();
+  }
+  impl_type::relink(last0,first1,last1);
+}
+
+/* Some versions of CGG require a bogus typename in counter_spc
+ * inside sequenced_index_sort if the following is defined
+ * also inside sequenced_index_sort.
+ */
+
+BOOST_STATIC_CONSTANT(
+  std::size_t,
+  sequenced_index_sort_max_fill=
+    (std::size_t)std::numeric_limits<std::size_t>::digits+1);
+
+template<typename Node,typename Compare>
+void sequenced_index_sort(Node* header,Compare comp)
+{
+  /* Musser's mergesort, see http://www.cs.rpi.edu/~musser/gp/List/lists1.html.
+   * The implementation is a little convoluted: in the original code
+   * counter elements and carry are std::lists: here we do not want
+   * to use multi_index instead, so we do things at a lower level, managing
+   * directly the internal node representation.
+   * Incidentally, the implementations I've seen of this algorithm (SGI,
+   * Dinkumware, STLPort) are not exception-safe: this is. Moreover, we do not
+   * use any dynamic storage.
+   */
+
+  if(header->next()==header->impl()||
+     header->next()->next()==header->impl())return;
+
+  typedef typename Node::impl_type      impl_type;
+  typedef typename Node::impl_pointer   impl_pointer;
+
+  typedef typename aligned_storage<
+    sizeof(impl_type),
+    alignment_of<impl_type>::value
+  >::type                               carry_spc_type;
+  carry_spc_type                        carry_spc;
+  impl_type&                            carry=
+    *reinterpret_cast<impl_type*>(&carry_spc);
+  typedef typename aligned_storage<
+    sizeof(
+      impl_type
+        [sequenced_index_sort_max_fill]),
+    alignment_of<
+      impl_type
+        [sequenced_index_sort_max_fill]
+    >::value
+  >::type                               counter_spc_type;
+  counter_spc_type                      counter_spc;
+  impl_type*                            counter=
+    reinterpret_cast<impl_type*>(&counter_spc);
+  std::size_t                           fill=0;
+
+  carry.prior()=carry.next()=static_cast<impl_pointer>(&carry);
+  counter[0].prior()=counter[0].next()=static_cast<impl_pointer>(&counter[0]);
+
+  BOOST_TRY{
+    while(header->next()!=header->impl()){
+      impl_type::relink(carry.next(),header->next());
+      std::size_t i=0;
+      while(i<fill&&counter[i].next()!=static_cast<impl_pointer>(&counter[i])){
+        sequenced_index_collate<Node>(&carry,&counter[i++],comp);
+      }
+      impl_type::swap(
+        static_cast<impl_pointer>(&carry),
+        static_cast<impl_pointer>(&counter[i]));
+      if(i==fill){
+        ++fill;
+        counter[fill].prior()=counter[fill].next()=
+          static_cast<impl_pointer>(&counter[fill]);
+      }
+    }
+
+    for(std::size_t i=1;i<fill;++i){
+      sequenced_index_collate<Node>(&counter[i],&counter[i-1],comp);
+    }
+    impl_type::swap(
+      header->impl(),static_cast<impl_pointer>(&counter[fill-1]));
+  }
+  BOOST_CATCH(...)
+  {
+    impl_type::relink(
+      header->impl(),carry.next(),static_cast<impl_pointer>(&carry));
+    for(std::size_t i=0;i<=fill;++i){
+      impl_type::relink(
+        header->impl(),counter[i].next(),
+        static_cast<impl_pointer>(&counter[i]));
+    }
+    BOOST_RETHROW;
+  }
+  BOOST_CATCH_END
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/serialization_version.hpp b/vendor/pdalboost/boost/multi_index/detail/serialization_version.hpp
new file mode 100644
index 0000000..54036e1
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/serialization_version.hpp
@@ -0,0 +1,73 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_SERIALIZATION_VERSION_HPP
+#define BOOST_MULTI_INDEX_DETAIL_SERIALIZATION_VERSION_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/version.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* Helper class for storing and retrieving a given type serialization class
+ * version while avoiding saving the number multiple times in the same
+ * archive.
+ * Behavior undefined if template partial specialization is not supported.
+ */
+
+template<typename T>
+struct serialization_version
+{
+  serialization_version():
+    value(pdalboost::serialization::version<serialization_version>::value){}
+
+  serialization_version& operator=(unsigned int x){value=x;return *this;};
+
+  operator unsigned int()const{return value;}
+
+private:
+  friend class pdalboost::serialization::access;
+
+  BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+  template<class Archive>
+  void save(Archive&,const unsigned int)const{}
+
+  template<class Archive>
+  void load(Archive&,const unsigned int version)
+  {
+    this->value=version;
+  }
+
+  unsigned int value;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+namespace serialization {
+template<typename T>
+struct version<pdalboost::multi_index::detail::serialization_version<T> >
+{
+  BOOST_STATIC_CONSTANT(int,value=version<T>::value);
+};
+} /* namespace serialization */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/uintptr_type.hpp b/vendor/pdalboost/boost/multi_index/detail/uintptr_type.hpp
new file mode 100644
index 0000000..4a5b312
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/uintptr_type.hpp
@@ -0,0 +1,76 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_UINTPTR_TYPE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_UINTPTR_TYPE_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/bool.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* has_uintptr_type is an MPL integral constant determining whether
+ * there exists an unsigned integral type with the same size as
+ * void *.
+ * uintptr_type is such a type if has_uintptr is true, or unsigned int
+ * otherwise.
+ * Note that uintptr_type is more restrictive than C99 uintptr_t,
+ * where an integral type with size greater than that of void *
+ * would be conformant.
+ */
+
+template<int N>struct uintptr_candidates;
+template<>struct uintptr_candidates<-1>{typedef unsigned int           type;};
+template<>struct uintptr_candidates<0> {typedef unsigned int           type;};
+template<>struct uintptr_candidates<1> {typedef unsigned short         type;};
+template<>struct uintptr_candidates<2> {typedef unsigned long          type;};
+
+#if defined(BOOST_HAS_LONG_LONG)
+template<>struct uintptr_candidates<3> {typedef pdalboost::ulong_long_type type;};
+#else
+template<>struct uintptr_candidates<3> {typedef unsigned int           type;};
+#endif
+
+#if defined(BOOST_HAS_MS_INT64)
+template<>struct uintptr_candidates<4> {typedef unsigned __int64       type;};
+#else
+template<>struct uintptr_candidates<4> {typedef unsigned int           type;};
+#endif
+
+struct uintptr_aux
+{
+  BOOST_STATIC_CONSTANT(int,index=
+    sizeof(void*)==sizeof(uintptr_candidates<0>::type)?0:
+    sizeof(void*)==sizeof(uintptr_candidates<1>::type)?1:
+    sizeof(void*)==sizeof(uintptr_candidates<2>::type)?2:
+    sizeof(void*)==sizeof(uintptr_candidates<3>::type)?3:
+    sizeof(void*)==sizeof(uintptr_candidates<4>::type)?4:-1);
+
+  BOOST_STATIC_CONSTANT(bool,has_uintptr_type=(index>=0));
+
+  typedef uintptr_candidates<index>::type type;
+};
+
+typedef mpl::bool_<uintptr_aux::has_uintptr_type> has_uintptr_type;
+typedef uintptr_aux::type                         uintptr_type;
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/unbounded.hpp b/vendor/pdalboost/boost/multi_index/detail/unbounded.hpp
new file mode 100644
index 0000000..ae7e9e1
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/unbounded.hpp
@@ -0,0 +1,66 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_UNBOUNDED_HPP
+#define BOOST_MULTI_INDEX_DETAIL_UNBOUNDED_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/detail/workaround.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+/* dummy type and variable for use in ordered_index::range() */
+
+/* ODR-abiding technique shown at the example attached to
+ * http://lists.boost.org/Archives/boost/2006/07/108355.php
+ */
+
+namespace detail{class unbounded_helper;}
+
+detail::unbounded_helper unbounded(detail::unbounded_helper);
+
+namespace detail{
+
+class unbounded_helper
+{
+  unbounded_helper(){}
+  unbounded_helper(const unbounded_helper&){}
+  friend unbounded_helper multi_index::unbounded(unbounded_helper);
+};
+
+typedef unbounded_helper (*unbounded_type)(unbounded_helper);
+
+} /* namespace multi_index::detail */
+
+inline detail::unbounded_helper unbounded(detail::unbounded_helper)
+{
+  return detail::unbounded_helper();
+}
+
+/* tags used in the implementation of range */
+
+namespace detail{
+
+struct none_unbounded_tag{};
+struct lower_unbounded_tag{};
+struct upper_unbounded_tag{};
+struct both_unbounded_tag{};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/value_compare.hpp b/vendor/pdalboost/boost/multi_index/detail/value_compare.hpp
new file mode 100644
index 0000000..c7a9974
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/value_compare.hpp
@@ -0,0 +1,56 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_VALUE_COMPARE_HPP
+#define BOOST_MULTI_INDEX_DETAIL_VALUE_COMPARE_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/call_traits.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+template<typename Value,typename KeyFromValue,typename Compare>
+struct value_comparison
+{
+  typedef Value first_argument_type;
+  typedef Value second_argument_type;
+  typedef bool  result_type;
+
+  value_comparison(
+    const KeyFromValue& key_=KeyFromValue(),const Compare& comp_=Compare()):
+    key(key_),comp(comp_)
+  {
+  }
+
+  bool operator()(
+    typename call_traits<Value>::param_type x,
+    typename call_traits<Value>::param_type y)const
+  {
+    return comp(key(x),key(y));
+  }
+
+private:
+  KeyFromValue key;
+  Compare      comp;
+};
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/detail/vartempl_support.hpp b/vendor/pdalboost/boost/multi_index/detail/vartempl_support.hpp
new file mode 100644
index 0000000..ca88f2b
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/detail/vartempl_support.hpp
@@ -0,0 +1,247 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_DETAIL_VARTEMPL_SUPPORT_HPP
+#define BOOST_MULTI_INDEX_DETAIL_VARTEMPL_SUPPORT_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+/* Utilities for emulation of variadic template functions. Variadic packs are
+ * replaced by lists of BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS parameters:
+ *
+ *   - typename... Args            --> BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK
+ *   - Args&&... args              --> BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK
+ *   - std::forward<Args>(args)... --> BOOST_MULTI_INDEX_FORWARD_PARAM_PACK
+ *
+ * Forwarding emulated with Boost.Move. A template functions foo_imp
+ * defined in such way accepts *exactly* BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS
+ * arguments: variable number of arguments is emulated by providing a set of
+ * overloads foo forwarding to foo_impl with
+ * 
+ *   BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL
+ *   BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG (initial extra arg)
+ *
+ * which fill the extra args with pdalboost::multi_index::detail::noarg's.
+ * pdalboost::multi_index::detail::vartempl_placement_new works the opposite
+ * way: it acceps a full a pointer x to Value and a
+ * BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK and forwards to
+ * new(x) Value(args) where args is the argument pack after discarding
+ * noarg's.
+ *
+ * Emulation decays to the real thing when the compiler supports variadic
+ * templates and move semantics natively.
+ */
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)||\
+    defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+#include <boost/move/core.hpp>
+#include <boost/move/utility.hpp>
+#include <boost/preprocessor/arithmetic/add.hpp>
+#include <boost/preprocessor/arithmetic/sub.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+#include <boost/preprocessor/logical/and.hpp>
+#include <boost/preprocessor/punctuation/comma.hpp>
+#include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+
+#if !defined(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS)
+#define BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS 5
+#endif
+
+#define BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK                        \
+BOOST_PP_ENUM_PARAMS(                                                \
+  BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,typename T)
+
+#define BOOST_MULTI_INDEX_VARTEMPL_ARG(z,n,_)                        \
+BOOST_FWD_REF(BOOST_PP_CAT(T,n)) BOOST_PP_CAT(t,n)
+
+#define BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK                        \
+BOOST_PP_ENUM(                                                       \
+  BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,                             \
+  BOOST_MULTI_INDEX_VARTEMPL_ARG,~)
+
+#define BOOST_MULTI_INDEX_VARTEMPL_FORWARD_ARG(z,n,_)                \
+pdalboost::forward<BOOST_PP_CAT(T,n)>(BOOST_PP_CAT(t,n))
+
+#define BOOST_MULTI_INDEX_FORWARD_PARAM_PACK                         \
+BOOST_PP_ENUM(                                                       \
+  BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,                             \
+  BOOST_MULTI_INDEX_VARTEMPL_FORWARD_ARG,~)
+
+namespace pdalboost{namespace multi_index{namespace detail{
+struct noarg{};
+}}}
+
+/* call vartempl function without args */
+
+#define BOOST_MULTI_INDEX_NULL_PARAM_PACK                            \
+BOOST_PP_ENUM_PARAMS(                                                \
+  BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,                             \
+  pdalboost::multi_index::detail::noarg() BOOST_PP_INTERCEPT)
+
+#define BOOST_MULTI_INDEX_TEMPLATE_N(n)                              \
+template<BOOST_PP_ENUM_PARAMS(n,typename T)>
+
+#define BOOST_MULTI_INDEX_TEMPLATE_0(n)
+
+#define BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_AUX(z,n,data)        \
+BOOST_PP_IF(n,                                                       \
+  BOOST_MULTI_INDEX_TEMPLATE_N,                                      \
+  BOOST_MULTI_INDEX_TEMPLATE_0)(n)                                   \
+BOOST_PP_SEQ_ELEM(0,data) /* ret */                                  \
+BOOST_PP_SEQ_ELEM(1,data) /* name_from */ (                          \
+  BOOST_PP_ENUM(n,BOOST_MULTI_INDEX_VARTEMPL_ARG,~))                 \
+{                                                                    \
+  return BOOST_PP_SEQ_ELEM(2,data) /* name_to */ (                   \
+    BOOST_PP_ENUM(n,BOOST_MULTI_INDEX_VARTEMPL_FORWARD_ARG,~)        \
+    BOOST_PP_COMMA_IF(                                               \
+      BOOST_PP_AND(                                                  \
+        n,BOOST_PP_SUB(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,n)))    \
+    BOOST_PP_ENUM_PARAMS(                                            \
+      BOOST_PP_SUB(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,n),         \
+      pdalboost::multi_index::detail::noarg() BOOST_PP_INTERCEPT)        \
+  );                                                                 \
+}
+
+#define BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL(                     \
+  ret,name_from,name_to)                                             \
+BOOST_PP_REPEAT_FROM_TO(                                             \
+  0,BOOST_PP_ADD(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,1),           \
+  BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_AUX,                       \
+  (ret)(name_from)(name_to))
+
+#define BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG_AUX(       \
+  z,n,data)                                                          \
+BOOST_PP_IF(n,                                                       \
+  BOOST_MULTI_INDEX_TEMPLATE_N,                                      \
+  BOOST_MULTI_INDEX_TEMPLATE_0)(n)                                   \
+BOOST_PP_SEQ_ELEM(0,data) /* ret */                                  \
+BOOST_PP_SEQ_ELEM(1,data) /* name_from */ (                          \
+  BOOST_PP_SEQ_ELEM(3,data) BOOST_PP_SEQ_ELEM(4,data) /* extra arg */\
+  BOOST_PP_COMMA_IF(n)                                               \
+  BOOST_PP_ENUM(n,BOOST_MULTI_INDEX_VARTEMPL_ARG,~))                 \
+{                                                                    \
+  return BOOST_PP_SEQ_ELEM(2,data) /* name_to */ (                   \
+    BOOST_PP_SEQ_ELEM(4,data) /* extra_arg_name */                   \
+    BOOST_PP_COMMA_IF(n)                                             \
+    BOOST_PP_ENUM(n,BOOST_MULTI_INDEX_VARTEMPL_FORWARD_ARG,~)        \
+    BOOST_PP_COMMA_IF(                                               \
+      BOOST_PP_SUB(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,n))         \
+    BOOST_PP_ENUM_PARAMS(                                            \
+      BOOST_PP_SUB(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,n),         \
+      pdalboost::multi_index::detail::noarg() BOOST_PP_INTERCEPT)        \
+  );                                                                 \
+}
+
+#define BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG(           \
+  ret,name_from,name_to,extra_arg_type,extra_arg_name)               \
+BOOST_PP_REPEAT_FROM_TO(                                             \
+  0,BOOST_PP_ADD(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,1),           \
+  BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG_AUX,             \
+  (ret)(name_from)(name_to)(extra_arg_type)(extra_arg_name))
+
+namespace pdalboost{
+  
+namespace multi_index{
+  
+namespace detail{
+
+#define BOOST_MULTI_INDEX_VARTEMPL_TO_PLACEMENT_NEW_AUX(z,n,name)    \
+template<                                                            \
+  typename Value                                                     \
+  BOOST_PP_COMMA_IF(n)                                               \
+  BOOST_PP_ENUM_PARAMS(n,typename T)                                 \
+>                                                                    \
+Value* name(                                                         \
+  Value* x                                                           \
+  BOOST_PP_COMMA_IF(n)                                               \
+  BOOST_PP_ENUM(n,BOOST_MULTI_INDEX_VARTEMPL_ARG,~)                  \
+  BOOST_PP_COMMA_IF(                                                 \
+    BOOST_PP_SUB(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,n))           \
+  BOOST_PP_ENUM_PARAMS(                                              \
+    BOOST_PP_SUB(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,n),           \
+    BOOST_FWD_REF(noarg) BOOST_PP_INTERCEPT))                        \
+{                                                                    \
+  return new(x) Value(                                               \
+    BOOST_PP_ENUM(n,BOOST_MULTI_INDEX_VARTEMPL_FORWARD_ARG,~));      \
+}
+
+#define BOOST_MULTI_INDEX_VARTEMPL_TO_PLACEMENT_NEW(name)            \
+BOOST_PP_REPEAT_FROM_TO(                                             \
+  0,BOOST_PP_ADD(BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS,1),           \
+  BOOST_MULTI_INDEX_VARTEMPL_TO_PLACEMENT_NEW_AUX,                   \
+  name)
+
+BOOST_MULTI_INDEX_VARTEMPL_TO_PLACEMENT_NEW(vartempl_placement_new)
+
+#undef BOOST_MULTI_INDEX_VARTEMPL_TO_PLACEMENT_NEW_AUX
+#undef BOOST_MULTI_INDEX_VARTEMPL_TO_PLACEMENT_NEW
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#else
+
+/* native variadic templates support */
+
+#include <utility>
+
+#define BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK typename... Args
+#define BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK Args&&... args
+#define BOOST_MULTI_INDEX_FORWARD_PARAM_PACK  std::forward<Args>(args)...
+#define BOOST_MULTI_INDEX_NULL_PARAM_PACK
+
+#define BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL(                     \
+  ret,name_from,name_to)                                             \
+template<typename... Args> ret name_from(Args&&... args)             \
+{                                                                    \
+  return name_to(std::forward<Args>(args)...);                       \
+}
+
+#define BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG(           \
+  ret,name_from,name_to,extra_arg_type,extra_arg_name)               \
+template<typename... Args> ret name_from(                            \
+  extra_arg_type extra_arg_name,Args&&... args)                      \
+{                                                                    \
+  return name_to(extra_arg_name,std::forward<Args>(args)...);        \
+}
+
+namespace pdalboost{
+  
+namespace multi_index{
+  
+namespace detail{
+
+template<typename Value,typename... Args>
+Value* vartempl_placement_new(Value*x,Args&&... args)
+{
+  return new(x) Value(std::forward<Args>(args)...);
+}
+
+} /* namespace multi_index::detail */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/identity.hpp b/vendor/pdalboost/boost/multi_index/identity.hpp
new file mode 100644
index 0000000..341a4ff
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/identity.hpp
@@ -0,0 +1,145 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_IDENTITY_HPP
+#define BOOST_MULTI_INDEX_IDENTITY_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/multi_index/identity_fwd.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#if !defined(BOOST_NO_SFINAE)
+#include <boost/type_traits/is_convertible.hpp>
+#endif
+
+namespace pdalboost{
+
+template<class Type> class reference_wrapper; /* fwd decl. */
+
+namespace multi_index{
+
+namespace detail{
+
+/* identity is a do-nothing key extractor that returns the [const] Type&
+ * object passed.
+ * Additionally, identity is overloaded to support referece_wrappers
+ * of Type and "chained pointers" to Type's. By chained pointer to Type we
+ * mean a  type  P such that, given a p of type P
+ *   *...n...*x is convertible to Type&, for some n>=1.
+ * Examples of chained pointers are raw and smart pointers, iterators and
+ * arbitrary combinations of these (vg. Type** or unique_ptr<Type*>.)
+ */
+
+template<typename Type>
+struct const_identity_base
+{
+  typedef Type result_type;
+
+  template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+  typename disable_if<is_convertible<const ChainedPtr&,Type&>,Type&>::type
+#else
+  Type&
+#endif 
+  
+  operator()(const ChainedPtr& x)const
+  {
+    return operator()(*x);
+  }
+
+  Type& operator()(Type& x)const
+  {
+    return x;
+  }
+
+  Type& operator()(const reference_wrapper<Type>& x)const
+  { 
+    return x.get();
+  }
+
+  Type& operator()(
+    const reference_wrapper<typename remove_const<Type>::type>& x
+
+#if BOOST_WORKAROUND(BOOST_MSVC,==1310)
+/* http://lists.boost.org/Archives/boost/2015/10/226135.php */
+    ,int=0
+#endif
+
+  )const
+  { 
+    return x.get();
+  }
+};
+
+template<typename Type>
+struct non_const_identity_base
+{
+  typedef Type result_type;
+
+  /* templatized for pointer-like types */
+  
+  template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+  typename disable_if<
+    is_convertible<const ChainedPtr&,const Type&>,Type&>::type
+#else
+  Type&
+#endif 
+    
+  operator()(const ChainedPtr& x)const
+  {
+    return operator()(*x);
+  }
+
+  const Type& operator()(const Type& x)const
+  {
+    return x;
+  }
+
+  Type& operator()(Type& x)const
+  {
+    return x;
+  }
+
+  const Type& operator()(const reference_wrapper<const Type>& x)const
+  { 
+    return x.get();
+  }
+
+  Type& operator()(const reference_wrapper<Type>& x)const
+  { 
+    return x.get();
+  }
+};
+
+} /* namespace multi_index::detail */
+
+template<class Type>
+struct identity:
+  mpl::if_c<
+    is_const<Type>::value,
+    detail::const_identity_base<Type>,detail::non_const_identity_base<Type>
+  >::type
+{
+};
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/identity_fwd.hpp b/vendor/pdalboost/boost/multi_index/identity_fwd.hpp
new file mode 100644
index 0000000..d5e9c40
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/identity_fwd.hpp
@@ -0,0 +1,26 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_IDENTITY_FWD_HPP
+#define BOOST_MULTI_INDEX_IDENTITY_FWD_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+namespace pdalboost{
+
+namespace multi_index{
+
+template<class Type> struct identity;
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/indexed_by.hpp b/vendor/pdalboost/boost/multi_index/indexed_by.hpp
new file mode 100644
index 0000000..26e5388
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/indexed_by.hpp
@@ -0,0 +1,68 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_INDEXED_BY_HPP
+#define BOOST_MULTI_INDEX_INDEXED_BY_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/vector.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp> 
+
+/* An alias to mpl::vector used to hide MPL from the user.
+ * indexed_by contains the index specifiers for instantiation
+ * of a multi_index_container.
+ */
+
+/* This user_definable macro limits the number of elements of an index list;
+ * useful for shortening resulting symbol names (MSVC++ 6.0, for instance,
+ * has problems coping with very long symbol names.)
+ */
+
+#if !defined(BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE)
+#define BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE BOOST_MPL_LIMIT_VECTOR_SIZE
+#endif
+
+#if BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE<BOOST_MPL_LIMIT_VECTOR_SIZE
+#define BOOST_MULTI_INDEX_INDEXED_BY_SIZE \
+  BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE
+#else
+#define BOOST_MULTI_INDEX_INDEXED_BY_SIZE BOOST_MPL_LIMIT_VECTOR_SIZE
+#endif
+
+#define BOOST_MULTI_INDEX_INDEXED_BY_TEMPLATE_PARM(z,n,var) \
+  typename BOOST_PP_CAT(var,n) BOOST_PP_EXPR_IF(n,=mpl::na)
+
+namespace pdalboost{
+
+namespace multi_index{
+
+template<
+  BOOST_PP_ENUM(
+    BOOST_MULTI_INDEX_INDEXED_BY_SIZE,
+    BOOST_MULTI_INDEX_INDEXED_BY_TEMPLATE_PARM,T)
+>
+struct indexed_by:
+  mpl::vector<BOOST_PP_ENUM_PARAMS(BOOST_MULTI_INDEX_INDEXED_BY_SIZE,T)>
+{
+};
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#undef BOOST_MULTI_INDEX_INDEXED_BY_TEMPLATE_PARM
+#undef BOOST_MULTI_INDEX_INDEXED_BY_SIZE
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/member.hpp b/vendor/pdalboost/boost/multi_index/member.hpp
new file mode 100644
index 0000000..dccb276
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/member.hpp
@@ -0,0 +1,262 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_MEMBER_HPP
+#define BOOST_MULTI_INDEX_MEMBER_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <cstddef>
+
+#if !defined(BOOST_NO_SFINAE)
+#include <boost/type_traits/is_convertible.hpp>
+#endif
+
+namespace pdalboost{
+
+template<class T> class reference_wrapper; /* fwd decl. */
+
+namespace multi_index{
+
+namespace detail{
+
+/* member is a read/write key extractor for accessing a given
+ * member of a class.
+ * Additionally, member is overloaded to support referece_wrappers
+ * of T and "chained pointers" to T's. By chained pointer to T we mean
+ * a type P  such that, given a p of Type P
+ *   *...n...*x is convertible to T&, for some n>=1.
+ * Examples of chained pointers are raw and smart pointers, iterators and
+ * arbitrary combinations of these (vg. T** or unique_ptr<T*>.)
+ */
+
+template<class Class,typename Type,Type Class::*PtrToMember>
+struct const_member_base
+{
+  typedef Type result_type;
+
+  template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+  typename disable_if<
+    is_convertible<const ChainedPtr&,const Class&>,Type&>::type
+#else
+  Type&
+#endif
+  
+  operator()(const ChainedPtr& x)const
+  {
+    return operator()(*x);
+  }
+
+  Type& operator()(const Class& x)const
+  {
+    return x.*PtrToMember;
+  }
+
+  Type& operator()(const reference_wrapper<const Class>& x)const
+  {
+    return operator()(x.get());
+  }
+
+  Type& operator()(const reference_wrapper<Class>& x)const
+  { 
+    return operator()(x.get());
+  }
+};
+
+template<class Class,typename Type,Type Class::*PtrToMember>
+struct non_const_member_base
+{
+  typedef Type result_type;
+
+  template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+  typename disable_if<
+    is_convertible<const ChainedPtr&,const Class&>,Type&>::type
+#else
+  Type&
+#endif
+
+  operator()(const ChainedPtr& x)const
+  {
+    return operator()(*x);
+  }
+
+  const Type& operator()(const Class& x)const
+  {
+    return x.*PtrToMember;
+  }
+
+  Type& operator()(Class& x)const
+  { 
+    return x.*PtrToMember;
+  }
+
+  const Type& operator()(const reference_wrapper<const Class>& x)const
+  {
+    return operator()(x.get());
+  }
+
+  Type& operator()(const reference_wrapper<Class>& x)const
+  { 
+    return operator()(x.get());
+  }
+};
+
+} /* namespace multi_index::detail */
+
+template<class Class,typename Type,Type Class::*PtrToMember>
+struct member:
+  mpl::if_c<
+    is_const<Type>::value,
+    detail::const_member_base<Class,Type,PtrToMember>,
+    detail::non_const_member_base<Class,Type,PtrToMember>
+  >::type
+{
+};
+
+namespace detail{
+
+/* MSVC++ 6.0 does not support properly pointers to members as
+ * non-type template arguments, as reported in
+ *   http://support.microsoft.com/default.aspx?scid=kb;EN-US;249045
+ * A similar problem (though not identical) is shown by MSVC++ 7.0.
+ * We provide an alternative to member<> accepting offsets instead
+ * of pointers to members. This happens to work even for non-POD
+ * types (although the standard forbids use of offsetof on these),
+ * so it serves as a workaround in this compiler for all practical
+ * purposes.
+ * Surprisingly enough, other compilers, like Intel C++ 7.0/7.1 and
+ * Visual Age 6.0, have similar bugs. This replacement of member<>
+ * can be used for them too.
+ *
+ * Support for such old compilers is dropped and
+ * [non_]const_member_offset_base is deprecated.
+ */
+
+template<class Class,typename Type,std::size_t OffsetOfMember>
+struct const_member_offset_base
+{
+  typedef Type result_type;
+
+  template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+  typename disable_if<
+    is_convertible<const ChainedPtr&,const Class&>,Type&>::type
+#else
+  Type&
+#endif 
+    
+  operator()(const ChainedPtr& x)const
+  {
+    return operator()(*x);
+  }
+
+  Type& operator()(const Class& x)const
+  {
+    return *static_cast<const Type*>(
+      static_cast<const void*>(
+        static_cast<const char*>(
+          static_cast<const void *>(&x))+OffsetOfMember));
+  }
+
+  Type& operator()(const reference_wrapper<const Class>& x)const
+  {
+    return operator()(x.get());
+  }
+
+  Type& operator()(const reference_wrapper<Class>& x)const
+  {
+    return operator()(x.get());
+  }
+};
+
+template<class Class,typename Type,std::size_t OffsetOfMember>
+struct non_const_member_offset_base
+{
+  typedef Type result_type;
+
+  template<typename ChainedPtr>
+
+#if !defined(BOOST_NO_SFINAE)
+  typename disable_if<
+    is_convertible<const ChainedPtr&,const Class&>,Type&>::type
+#else
+  Type&
+#endif 
+  
+  operator()(const ChainedPtr& x)const
+  {
+    return operator()(*x);
+  }
+
+  const Type& operator()(const Class& x)const
+  {
+    return *static_cast<const Type*>(
+      static_cast<const void*>(
+        static_cast<const char*>(
+          static_cast<const void *>(&x))+OffsetOfMember));
+  }
+
+  Type& operator()(Class& x)const
+  { 
+    return *static_cast<Type*>(
+      static_cast<void*>(
+        static_cast<char*>(static_cast<void *>(&x))+OffsetOfMember));
+  }
+
+  const Type& operator()(const reference_wrapper<const Class>& x)const
+  {
+    return operator()(x.get());
+  }
+
+  Type& operator()(const reference_wrapper<Class>& x)const
+  {
+    return operator()(x.get());
+  }
+};
+
+} /* namespace multi_index::detail */
+
+template<class Class,typename Type,std::size_t OffsetOfMember>
+struct member_offset:
+  mpl::if_c<
+    is_const<Type>::value,
+    detail::const_member_offset_base<Class,Type,OffsetOfMember>,
+    detail::non_const_member_offset_base<Class,Type,OffsetOfMember>
+  >::type
+{
+};
+
+/* BOOST_MULTI_INDEX_MEMBER resolves to member in the normal cases,
+ * and to member_offset as a workaround in those defective compilers for
+ * which BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS is defined.
+ */
+
+#if defined(BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS)
+#define BOOST_MULTI_INDEX_MEMBER(Class,Type,MemberName) \
+::pdalboost::multi_index::member_offset< Class,Type,offsetof(Class,MemberName) >
+#else
+#define BOOST_MULTI_INDEX_MEMBER(Class,Type,MemberName) \
+::pdalboost::multi_index::member< Class,Type,&Class::MemberName >
+#endif
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/ordered_index.hpp b/vendor/pdalboost/boost/multi_index/ordered_index.hpp
new file mode 100644
index 0000000..2990bd5
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/ordered_index.hpp
@@ -0,0 +1,114 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_ORDERED_INDEX_HPP
+#define BOOST_MULTI_INDEX_ORDERED_INDEX_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/multi_index/detail/ord_index_impl.hpp>
+#include <boost/multi_index/ordered_index_fwd.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* no augment policy for plain ordered indices */
+
+struct null_augment_policy
+{
+  template<typename OrderedIndexImpl>
+  struct augmented_interface
+  {
+    typedef OrderedIndexImpl type;
+  };
+
+  template<typename OrderedIndexNodeImpl>
+  struct augmented_node
+  {
+    typedef OrderedIndexNodeImpl type;
+  };
+
+  template<typename Pointer> static void add(Pointer,Pointer){}
+  template<typename Pointer> static void remove(Pointer,Pointer){}
+  template<typename Pointer> static void copy(Pointer,Pointer){}
+  template<typename Pointer> static void rotate_left(Pointer,Pointer){}
+  template<typename Pointer> static void rotate_right(Pointer,Pointer){}
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+  /* invariant stuff */
+
+  template<typename Pointer> static bool invariant(Pointer){return true;}
+
+#endif
+};
+
+} /* namespace multi_index::detail */
+
+/* ordered_index specifiers */
+
+template<typename Arg1,typename Arg2,typename Arg3>
+struct ordered_unique
+{
+  typedef typename detail::ordered_index_args<
+    Arg1,Arg2,Arg3>                                index_args;
+  typedef typename index_args::tag_list_type::type tag_list_type;
+  typedef typename index_args::key_from_value_type key_from_value_type;
+  typedef typename index_args::compare_type        compare_type;
+
+  template<typename Super>
+  struct node_class
+  {
+    typedef detail::ordered_index_node<detail::null_augment_policy,Super> type;
+  };
+
+  template<typename SuperMeta>
+  struct index_class
+  {
+    typedef detail::ordered_index<
+      key_from_value_type,compare_type,
+      SuperMeta,tag_list_type,detail::ordered_unique_tag,
+      detail::null_augment_policy>                        type;
+  };
+};
+
+template<typename Arg1,typename Arg2,typename Arg3>
+struct ordered_non_unique
+{
+  typedef detail::ordered_index_args<
+    Arg1,Arg2,Arg3>                                index_args;
+  typedef typename index_args::tag_list_type::type tag_list_type;
+  typedef typename index_args::key_from_value_type key_from_value_type;
+  typedef typename index_args::compare_type        compare_type;
+
+  template<typename Super>
+  struct node_class
+  {
+    typedef detail::ordered_index_node<detail::null_augment_policy,Super> type;
+  };
+
+  template<typename SuperMeta>
+  struct index_class
+  {
+    typedef detail::ordered_index<
+      key_from_value_type,compare_type,
+      SuperMeta,tag_list_type,detail::ordered_non_unique_tag,
+      detail::null_augment_policy>                            type;
+  };
+};
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/ordered_index_fwd.hpp b/vendor/pdalboost/boost/multi_index/ordered_index_fwd.hpp
new file mode 100644
index 0000000..70cac8e
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/ordered_index_fwd.hpp
@@ -0,0 +1,35 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_ORDERED_INDEX_FWD_HPP
+#define BOOST_MULTI_INDEX_ORDERED_INDEX_FWD_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/multi_index/detail/ord_index_args.hpp>
+#include <boost/multi_index/detail/ord_index_impl_fwd.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+/* ordered_index specifiers */
+
+template<typename Arg1,typename Arg2=mpl::na,typename Arg3=mpl::na>
+struct ordered_unique;
+
+template<typename Arg1,typename Arg2=mpl::na,typename Arg3=mpl::na>
+struct ordered_non_unique;
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/safe_mode_errors.hpp b/vendor/pdalboost/boost/multi_index/safe_mode_errors.hpp
new file mode 100644
index 0000000..964a859
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/safe_mode_errors.hpp
@@ -0,0 +1,48 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_SAFE_MODE_ERRORS_HPP
+#define BOOST_MULTI_INDEX_SAFE_MODE_ERRORS_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace safe_mode{
+
+/* Error codes for Boost.MultiIndex safe mode. These go in a separate
+ * header so that the user can include it when redefining
+ * BOOST_MULTI_INDEX_SAFE_MODE_ASSERT prior to the inclusion of
+ * any other header of Boost.MultiIndex.
+ */
+
+enum error_code
+{
+  invalid_iterator=0,
+  not_dereferenceable_iterator,
+  not_incrementable_iterator,
+  not_decrementable_iterator,
+  not_owner,
+  not_same_owner,
+  invalid_range,
+  inside_range,
+  out_of_bounds,
+  same_container
+};
+
+} /* namespace multi_index::safe_mode */
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/sequenced_index.hpp b/vendor/pdalboost/boost/multi_index/sequenced_index.hpp
new file mode 100644
index 0000000..452ede1
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/sequenced_index.hpp
@@ -0,0 +1,1062 @@
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_SEQUENCED_INDEX_HPP
+#define BOOST_MULTI_INDEX_SEQUENCED_INDEX_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/bind.hpp>
+#include <boost/call_traits.hpp>
+#include <boost/detail/allocator_utilities.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/foreach_fwd.hpp>
+#include <boost/iterator/reverse_iterator.hpp>
+#include <boost/move/core.hpp>
+#include <boost/move/utility.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/multi_index/detail/access_specifier.hpp>
+#include <boost/multi_index/detail/bidir_node_iterator.hpp>
+#include <boost/multi_index/detail/do_not_copy_elements_tag.hpp>
+#include <boost/multi_index/detail/index_node_base.hpp>
+#include <boost/multi_index/detail/safe_mode.hpp>
+#include <boost/multi_index/detail/scope_guard.hpp>
+#include <boost/multi_index/detail/seq_index_node.hpp>
+#include <boost/multi_index/detail/seq_index_ops.hpp>
+#include <boost/multi_index/detail/vartempl_support.hpp>
+#include <boost/multi_index/sequenced_index_fwd.hpp>
+#include <boost/tuple/tuple.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <cstddef>
+#include <functional>
+#include <utility>
+
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+#include<initializer_list>
+#endif
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/bind.hpp>
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+#define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF(x)                    \
+  detail::scope_guard BOOST_JOIN(check_invariant_,__LINE__)=                 \
+    detail::make_obj_guard(x,&sequenced_index::check_invariant_);            \
+  BOOST_JOIN(check_invariant_,__LINE__).touch();
+#define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT                          \
+  BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF(*this)
+#else
+#define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF(x)
+#define BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT
+#endif
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+/* sequenced_index adds a layer of sequenced indexing to a given Super */
+
+template<typename SuperMeta,typename TagList>
+class sequenced_index:
+  BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS SuperMeta::type
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+  ,public safe_mode::safe_container<
+    sequenced_index<SuperMeta,TagList> >
+#endif
+
+{ 
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+    BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+/* The "ISO C++ Template Parser" option in CW8.3 has a problem with the
+ * lifetime of const references bound to temporaries --precisely what
+ * scopeguards are.
+ */
+
+#pragma parse_mfunc_templ off
+#endif
+
+  typedef typename SuperMeta::type                    super;
+
+protected:
+  typedef sequenced_index_node<
+    typename super::node_type>                        node_type;
+
+private:
+  typedef typename node_type::impl_type               node_impl_type;
+ 
+public:
+  /* types */
+
+  typedef typename node_type::value_type              value_type;
+  typedef tuples::null_type                           ctor_args;
+  typedef typename super::final_allocator_type        allocator_type;
+  typedef typename allocator_type::reference          reference;
+  typedef typename allocator_type::const_reference    const_reference;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+  typedef safe_mode::safe_iterator<
+    bidir_node_iterator<node_type>,
+    sequenced_index>                                  iterator;
+#else
+  typedef bidir_node_iterator<node_type>              iterator;
+#endif
+
+  typedef iterator                                    const_iterator;
+
+  typedef std::size_t                                 size_type;      
+  typedef std::ptrdiff_t                              difference_type;
+  typedef typename allocator_type::pointer            pointer;
+  typedef typename allocator_type::const_pointer      const_pointer;
+  typedef typename
+    pdalboost::reverse_iterator<iterator>                 reverse_iterator;
+  typedef typename
+    pdalboost::reverse_iterator<const_iterator>           const_reverse_iterator;
+  typedef TagList                                     tag_list;
+
+protected:
+  typedef typename super::final_node_type     final_node_type;
+  typedef tuples::cons<
+    ctor_args, 
+    typename super::ctor_args_list>           ctor_args_list;
+  typedef typename mpl::push_front<
+    typename super::index_type_list,
+    sequenced_index>::type                    index_type_list;
+  typedef typename mpl::push_front<
+    typename super::iterator_type_list,
+    iterator>::type                           iterator_type_list;
+  typedef typename mpl::push_front<
+    typename super::const_iterator_type_list,
+    const_iterator>::type                     const_iterator_type_list;
+  typedef typename super::copy_map_type       copy_map_type;
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+  typedef typename super::index_saver_type    index_saver_type;
+  typedef typename super::index_loader_type   index_loader_type;
+#endif
+
+private:
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+  typedef safe_mode::safe_container<
+    sequenced_index>                          safe_super;
+#endif
+
+  typedef typename call_traits<value_type>::param_type value_param_type;
+
+  /* Needed to avoid commas in BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL
+   * expansion.
+   */
+
+  typedef std::pair<iterator,bool>                     emplace_return_type;
+
+public:
+
+  /* construct/copy/destroy
+   * Default and copy ctors are in the protected section as indices are
+   * not supposed to be created on their own. No range ctor either.
+   */
+
+  sequenced_index<SuperMeta,TagList>& operator=(
+    const sequenced_index<SuperMeta,TagList>& x)
+  {
+    this->final()=x.final();
+    return *this;
+  }
+
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+  sequenced_index<SuperMeta,TagList>& operator=(
+    std::initializer_list<value_type> list)
+  {
+    this->final()=list;
+    return *this;
+  }
+#endif
+
+  template <class InputIterator>
+  void assign(InputIterator first,InputIterator last)
+  {
+    assign_iter(first,last,mpl::not_<is_integral<InputIterator> >());
+  }
+
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+  void assign(std::initializer_list<value_type> list)
+  {
+    assign(list.begin(),list.end());
+  }
+#endif
+
+  void assign(size_type n,value_param_type value)
+  {
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    clear();
+    for(size_type i=0;i<n;++i)push_back(value);
+  }
+    
+  allocator_type get_allocator()const BOOST_NOEXCEPT
+  {
+    return this->final().get_allocator();
+  }
+
+  /* iterators */
+
+  iterator  begin()BOOST_NOEXCEPT
+    {return make_iterator(node_type::from_impl(header()->next()));}
+  const_iterator begin()const BOOST_NOEXCEPT
+    {return make_iterator(node_type::from_impl(header()->next()));}
+  iterator
+    end()BOOST_NOEXCEPT{return make_iterator(header());}
+  const_iterator
+    end()const BOOST_NOEXCEPT{return make_iterator(header());}
+  reverse_iterator
+    rbegin()BOOST_NOEXCEPT{return pdalboost::make_reverse_iterator(end());}
+  const_reverse_iterator
+    rbegin()const BOOST_NOEXCEPT{return pdalboost::make_reverse_iterator(end());}
+  reverse_iterator
+    rend()BOOST_NOEXCEPT{return pdalboost::make_reverse_iterator(begin());}
+  const_reverse_iterator
+    rend()const BOOST_NOEXCEPT{return pdalboost::make_reverse_iterator(begin());}
+  const_iterator
+    cbegin()const BOOST_NOEXCEPT{return begin();}
+  const_iterator
+    cend()const BOOST_NOEXCEPT{return end();}
+  const_reverse_iterator
+    crbegin()const BOOST_NOEXCEPT{return rbegin();}
+  const_reverse_iterator
+    crend()const BOOST_NOEXCEPT{return rend();}
+
+  iterator iterator_to(const value_type& x)
+  {
+    return make_iterator(node_from_value<node_type>(&x));
+  }
+
+  const_iterator iterator_to(const value_type& x)const
+  {
+    return make_iterator(node_from_value<node_type>(&x));
+  }
+
+  /* capacity */
+
+  bool      empty()const BOOST_NOEXCEPT{return this->final_empty_();}
+  size_type size()const BOOST_NOEXCEPT{return this->final_size_();}
+  size_type max_size()const BOOST_NOEXCEPT{return this->final_max_size_();}
+
+  void resize(size_type n)
+  {
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    if(n>size()){
+      for(size_type m=n-size();m--;)
+        this->final_emplace_(BOOST_MULTI_INDEX_NULL_PARAM_PACK);
+    }
+    else if(n<size()){for(size_type m=size()-n;m--;)pop_back();}
+  }
+
+  void resize(size_type n,value_param_type x)
+  {
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    if(n>size())insert(end(),n-size(),x);
+    else if(n<size())for(size_type m=size()-n;m--;)pop_back();
+  }
+
+  /* access: no non-const versions provided as sequenced_index
+   * handles const elements.
+   */
+
+  const_reference front()const{return *begin();}
+  const_reference back()const{return *--end();}
+
+  /* modifiers */
+
+  BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL(
+    emplace_return_type,emplace_front,emplace_front_impl)
+
+  std::pair<iterator,bool> push_front(const value_type& x)
+                             {return insert(begin(),x);}
+  std::pair<iterator,bool> push_front(BOOST_RV_REF(value_type) x)
+                             {return insert(begin(),pdalboost::move(x));}
+  void                     pop_front(){erase(begin());}
+
+  BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL(
+    emplace_return_type,emplace_back,emplace_back_impl)
+
+  std::pair<iterator,bool> push_back(const value_type& x)
+                             {return insert(end(),x);}
+  std::pair<iterator,bool> push_back(BOOST_RV_REF(value_type) x)
+                             {return insert(end(),pdalboost::move(x));}
+  void                     pop_back(){erase(--end());}
+
+  BOOST_MULTI_INDEX_OVERLOADS_TO_VARTEMPL_EXTRA_ARG(
+    emplace_return_type,emplace,emplace_impl,iterator,position)
+
+  std::pair<iterator,bool> insert(iterator position,const value_type& x)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    std::pair<final_node_type*,bool> p=this->final_insert_(x);
+    if(p.second&&position.get_node()!=header()){
+      relink(position.get_node(),p.first);
+    }
+    return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+  }
+
+  std::pair<iterator,bool> insert(iterator position,BOOST_RV_REF(value_type) x)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    std::pair<final_node_type*,bool> p=this->final_insert_rv_(x);
+    if(p.second&&position.get_node()!=header()){
+      relink(position.get_node(),p.first);
+    }
+    return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+  }
+
+  void insert(iterator position,size_type n,value_param_type x)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    for(size_type i=0;i<n;++i)insert(position,x);
+  }
+ 
+  template<typename InputIterator>
+  void insert(iterator position,InputIterator first,InputIterator last)
+  {
+    insert_iter(position,first,last,mpl::not_<is_integral<InputIterator> >());
+  }
+
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+  void insert(iterator position,std::initializer_list<value_type> list)
+  {
+    insert(position,list.begin(),list.end());
+  }
+#endif
+
+  iterator erase(iterator position)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    this->final_erase_(static_cast<final_node_type*>(position++.get_node()));
+    return position;
+  }
+  
+  iterator erase(iterator first,iterator last)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(first);
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(last);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(first,*this);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(last,*this);
+    BOOST_MULTI_INDEX_CHECK_VALID_RANGE(first,last);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    while(first!=last){
+      first=erase(first);
+    }
+    return first;
+  }
+
+  bool replace(iterator position,const value_type& x)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    return this->final_replace_(
+      x,static_cast<final_node_type*>(position.get_node()));
+  }
+
+  bool replace(iterator position,BOOST_RV_REF(value_type) x)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    return this->final_replace_rv_(
+      x,static_cast<final_node_type*>(position.get_node()));
+  }
+
+  template<typename Modifier>
+  bool modify(iterator position,Modifier mod)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    /* MSVC++ 6.0 optimizer on safe mode code chokes if this
+     * this is not added. Left it for all compilers as it does no
+     * harm.
+     */
+
+    position.detach();
+#endif
+
+    return this->final_modify_(
+      mod,static_cast<final_node_type*>(position.get_node()));
+  }
+
+  template<typename Modifier,typename Rollback>
+  bool modify(iterator position,Modifier mod,Rollback back_)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    /* MSVC++ 6.0 optimizer on safe mode code chokes if this
+     * this is not added. Left it for all compilers as it does no
+     * harm.
+     */
+
+    position.detach();
+#endif
+
+    return this->final_modify_(
+      mod,back_,static_cast<final_node_type*>(position.get_node()));
+  }
+
+  void swap(sequenced_index<SuperMeta,TagList>& x)
+  {
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF(x);
+    this->final_swap_(x.final());
+  }
+
+  void clear()BOOST_NOEXCEPT
+  {
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    this->final_clear_();
+  }
+
+  /* list operations */
+
+  void splice(iterator position,sequenced_index<SuperMeta,TagList>& x)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_CHECK_DIFFERENT_CONTAINER(*this,x);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    iterator first=x.begin(),last=x.end();
+    while(first!=last){
+      if(insert(position,*first).second)first=x.erase(first);
+      else ++first;
+    }
+  }
+
+  void splice(iterator position,sequenced_index<SuperMeta,TagList>& x,iterator i)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(i);
+    BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(i);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(i,x);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    if(&x==this){
+      if(position!=i)relink(position.get_node(),i.get_node());
+    }
+    else{
+      if(insert(position,*i).second){
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    /* MSVC++ 6.0 optimizer has a hard time with safe mode, and the following
+     * workaround is needed. Left it for all compilers as it does no
+     * harm.
+     */
+        i.detach();
+        x.erase(x.make_iterator(i.get_node()));
+#else
+        x.erase(i);
+#endif
+
+      }
+    }
+  }
+
+  void splice(
+    iterator position,sequenced_index<SuperMeta,TagList>& x,
+    iterator first,iterator last)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(first);
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(last);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(first,x);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(last,x);
+    BOOST_MULTI_INDEX_CHECK_VALID_RANGE(first,last);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    if(&x==this){
+      BOOST_MULTI_INDEX_CHECK_OUTSIDE_RANGE(position,first,last);
+      if(position!=last)relink(
+        position.get_node(),first.get_node(),last.get_node());
+    }
+    else{
+      while(first!=last){
+        if(insert(position,*first).second)first=x.erase(first);
+        else ++first;
+      }
+    }
+  }
+
+  void remove(value_param_type value)
+  {
+    sequenced_index_remove(
+      *this,
+      ::pdalboost::bind(std::equal_to<value_type>(),::pdalboost::arg<1>(),value));
+  }
+
+  template<typename Predicate>
+  void remove_if(Predicate pred)
+  {
+    sequenced_index_remove(*this,pred);
+  }
+
+  void unique()
+  {
+    sequenced_index_unique(*this,std::equal_to<value_type>());
+  }
+
+  template <class BinaryPredicate>
+  void unique(BinaryPredicate binary_pred)
+  {
+    sequenced_index_unique(*this,binary_pred);
+  }
+
+  void merge(sequenced_index<SuperMeta,TagList>& x)
+  {
+    sequenced_index_merge(*this,x,std::less<value_type>());
+  }
+
+  template <typename Compare>
+  void merge(sequenced_index<SuperMeta,TagList>& x,Compare comp)
+  {
+    sequenced_index_merge(*this,x,comp);
+  }
+
+  void sort()
+  {
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    sequenced_index_sort(header(),std::less<value_type>());
+  }
+
+  template <typename Compare>
+  void sort(Compare comp)
+  {
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    sequenced_index_sort(header(),comp);
+  }
+
+  void reverse()BOOST_NOEXCEPT
+  {
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    node_impl_type::reverse(header()->impl());
+  }
+
+  /* rearrange operations */
+
+  void relocate(iterator position,iterator i)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(i);
+    BOOST_MULTI_INDEX_CHECK_DEREFERENCEABLE_ITERATOR(i);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(i,*this);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    if(position!=i)relink(position.get_node(),i.get_node());
+  }
+
+  void relocate(iterator position,iterator first,iterator last)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(first);
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(last);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(first,*this);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(last,*this);
+    BOOST_MULTI_INDEX_CHECK_VALID_RANGE(first,last);
+    BOOST_MULTI_INDEX_CHECK_OUTSIDE_RANGE(position,first,last);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    if(position!=last)relink(
+      position.get_node(),first.get_node(),last.get_node());
+  }
+    
+  template<typename InputIterator>
+  void rearrange(InputIterator first)
+  {
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    node_type* pos=header();
+    for(size_type s=size();s--;){
+      const value_type& v=*first++;
+      relink(pos,node_from_value<node_type>(&v));
+    }
+  }
+
+BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
+  sequenced_index(const ctor_args_list& args_list,const allocator_type& al):
+    super(args_list.get_tail(),al)
+  {
+    empty_initialize();
+  }
+
+  sequenced_index(const sequenced_index<SuperMeta,TagList>& x):
+    super(x)
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    ,safe_super()
+#endif
+
+  {
+    /* the actual copying takes place in subsequent call to copy_() */
+  }
+
+  sequenced_index(
+    const sequenced_index<SuperMeta,TagList>& x,do_not_copy_elements_tag):
+    super(x,do_not_copy_elements_tag())
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    ,safe_super()
+#endif
+
+  {
+    empty_initialize();
+  }
+
+  ~sequenced_index()
+  {
+    /* the container is guaranteed to be empty by now */
+  }
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+  iterator       make_iterator(node_type* node){return iterator(node,this);}
+  const_iterator make_iterator(node_type* node)const
+    {return const_iterator(node,const_cast<sequenced_index*>(this));}
+#else
+  iterator       make_iterator(node_type* node){return iterator(node);}
+  const_iterator make_iterator(node_type* node)const
+                   {return const_iterator(node);}
+#endif
+
+  void copy_(
+    const sequenced_index<SuperMeta,TagList>& x,const copy_map_type& map)
+  {
+    node_type* org=x.header();
+    node_type* cpy=header();
+    do{
+      node_type* next_org=node_type::from_impl(org->next());
+      node_type* next_cpy=map.find(static_cast<final_node_type*>(next_org));
+      cpy->next()=next_cpy->impl();
+      next_cpy->prior()=cpy->impl();
+      org=next_org;
+      cpy=next_cpy;
+    }while(org!=x.header());
+
+    super::copy_(x,map);
+  }
+
+  template<typename Variant>
+  final_node_type* insert_(
+    value_param_type v,final_node_type*& x,Variant variant)
+  {
+    final_node_type* res=super::insert_(v,x,variant);
+    if(res==x)link(static_cast<node_type*>(x));
+    return res;
+  }
+
+  template<typename Variant>
+  final_node_type* insert_(
+    value_param_type v,node_type* position,final_node_type*& x,Variant variant)
+  {
+    final_node_type* res=super::insert_(v,position,x,variant);
+    if(res==x)link(static_cast<node_type*>(x));
+    return res;
+  }
+
+  void erase_(node_type* x)
+  {
+    unlink(x);
+    super::erase_(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    detach_iterators(x);
+#endif
+  }
+
+  void delete_all_nodes_()
+  {
+    for(node_type* x=node_type::from_impl(header()->next());x!=header();){
+      node_type* y=node_type::from_impl(x->next());
+      this->final_delete_node_(static_cast<final_node_type*>(x));
+      x=y;
+    }
+  }
+
+  void clear_()
+  {
+    super::clear_();
+    empty_initialize();
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    safe_super::detach_dereferenceable_iterators();
+#endif
+  }
+
+  void swap_(sequenced_index<SuperMeta,TagList>& x)
+  {
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    safe_super::swap(x);
+#endif
+
+    super::swap_(x);
+  }
+
+  void swap_elements_(sequenced_index<SuperMeta,TagList>& x)
+  {
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+    safe_super::swap(x);
+#endif
+
+    super::swap_elements_(x);
+  }
+
+  template<typename Variant>
+  bool replace_(value_param_type v,node_type* x,Variant variant)
+  {
+    return super::replace_(v,x,variant);
+  }
+
+  bool modify_(node_type* x)
+  {
+    BOOST_TRY{
+      if(!super::modify_(x)){
+        unlink(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+        detach_iterators(x);
+#endif
+
+        return false;
+      }
+      else return true;
+    }
+    BOOST_CATCH(...){
+      unlink(x);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+      detach_iterators(x);
+#endif
+
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+  }
+
+  bool modify_rollback_(node_type* x)
+  {
+    return super::modify_rollback_(x);
+  }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+  /* serialization */
+
+  template<typename Archive>
+  void save_(
+    Archive& ar,const unsigned int version,const index_saver_type& sm)const
+  {
+    sm.save(begin(),end(),ar,version);
+    super::save_(ar,version,sm);
+  }
+
+  template<typename Archive>
+  void load_(
+    Archive& ar,const unsigned int version,const index_loader_type& lm)
+  {
+    lm.load(
+      ::pdalboost::bind(
+        &sequenced_index::rearranger,this,::pdalboost::arg<1>(),::pdalboost::arg<2>()),
+      ar,version);
+    super::load_(ar,version,lm);
+  }
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+  /* invariant stuff */
+
+  bool invariant_()const
+  {
+    if(size()==0||begin()==end()){
+      if(size()!=0||begin()!=end()||
+         header()->next()!=header()->impl()||
+         header()->prior()!=header()->impl())return false;
+    }
+    else{
+      size_type s=0;
+      for(const_iterator it=begin(),it_end=end();it!=it_end;++it,++s){
+        if(it.get_node()->next()->prior()!=it.get_node()->impl())return false;
+        if(it.get_node()->prior()->next()!=it.get_node()->impl())return false;
+      }
+      if(s!=size())return false;
+    }
+
+    return super::invariant_();
+  }
+
+  /* This forwarding function eases things for the pdalboost::mem_fn construct
+   * in BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT. Actually,
+   * final_check_invariant is already an inherited member function of index.
+   */
+  void check_invariant_()const{this->final_check_invariant_();}
+#endif
+
+private:
+  node_type* header()const{return this->final_header();}
+
+  void empty_initialize()
+  {
+    header()->prior()=header()->next()=header()->impl();
+  }
+
+  void link(node_type* x)
+  {
+    node_impl_type::link(x->impl(),header()->impl());
+  };
+
+  static void unlink(node_type* x)
+  {
+    node_impl_type::unlink(x->impl());
+  }
+
+  static void relink(node_type* position,node_type* x)
+  {
+    node_impl_type::relink(position->impl(),x->impl());
+  }
+
+  static void relink(node_type* position,node_type* first,node_type* last)
+  {
+    node_impl_type::relink(
+      position->impl(),first->impl(),last->impl());
+  }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+  void rearranger(node_type* position,node_type *x)
+  {
+    if(!position)position=header();
+    node_type::increment(position);
+    if(position!=x)relink(position,x);
+  }
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+  void detach_iterators(node_type* x)
+  {
+    iterator it=make_iterator(x);
+    safe_mode::detach_equivalent_iterators(it);
+  }
+#endif
+
+  template <class InputIterator>
+  void assign_iter(InputIterator first,InputIterator last,mpl::true_)
+  {
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    clear();
+    for(;first!=last;++first)this->final_insert_ref_(*first);
+  }
+
+  void assign_iter(size_type n,value_param_type value,mpl::false_)
+  {
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    clear();
+    for(size_type i=0;i<n;++i)push_back(value);
+  }
+
+  template<typename InputIterator>
+  void insert_iter(
+    iterator position,InputIterator first,InputIterator last,mpl::true_)
+  {
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    for(;first!=last;++first){
+      std::pair<final_node_type*,bool> p=
+        this->final_insert_ref_(*first);
+      if(p.second&&position.get_node()!=header()){
+        relink(position.get_node(),p.first);
+      }
+    }
+  }
+
+  void insert_iter(
+    iterator position,size_type n,value_param_type x,mpl::false_)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    for(size_type i=0;i<n;++i)insert(position,x);
+  }
+
+  template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+  std::pair<iterator,bool> emplace_front_impl(
+    BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+  {
+    return emplace_impl(begin(),BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+  }
+
+  template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+  std::pair<iterator,bool> emplace_back_impl(
+    BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+  {
+    return emplace_impl(end(),BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+  }
+
+  template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+  std::pair<iterator,bool> emplace_impl(
+    iterator position,BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+  {
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(position);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(position,*this);
+    BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT;
+    std::pair<final_node_type*,bool> p=
+      this->final_emplace_(BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+    if(p.second&&position.get_node()!=header()){
+      relink(position.get_node(),p.first);
+    }
+    return std::pair<iterator,bool>(make_iterator(p.first),p.second);
+  }
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+    BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+#pragma parse_mfunc_templ reset
+#endif
+};
+
+/* comparison */
+
+template<
+  typename SuperMeta1,typename TagList1,
+  typename SuperMeta2,typename TagList2
+>
+bool operator==(
+  const sequenced_index<SuperMeta1,TagList1>& x,
+  const sequenced_index<SuperMeta2,TagList2>& y)
+{
+  return x.size()==y.size()&&std::equal(x.begin(),x.end(),y.begin());
+}
+
+template<
+  typename SuperMeta1,typename TagList1,
+  typename SuperMeta2,typename TagList2
+>
+bool operator<(
+  const sequenced_index<SuperMeta1,TagList1>& x,
+  const sequenced_index<SuperMeta2,TagList2>& y)
+{
+  return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end());
+}
+
+template<
+  typename SuperMeta1,typename TagList1,
+  typename SuperMeta2,typename TagList2
+>
+bool operator!=(
+  const sequenced_index<SuperMeta1,TagList1>& x,
+  const sequenced_index<SuperMeta2,TagList2>& y)
+{
+  return !(x==y);
+}
+
+template<
+  typename SuperMeta1,typename TagList1,
+  typename SuperMeta2,typename TagList2
+>
+bool operator>(
+  const sequenced_index<SuperMeta1,TagList1>& x,
+  const sequenced_index<SuperMeta2,TagList2>& y)
+{
+  return y<x;
+}
+
+template<
+  typename SuperMeta1,typename TagList1,
+  typename SuperMeta2,typename TagList2
+>
+bool operator>=(
+  const sequenced_index<SuperMeta1,TagList1>& x,
+  const sequenced_index<SuperMeta2,TagList2>& y)
+{
+  return !(x<y);
+}
+
+template<
+  typename SuperMeta1,typename TagList1,
+  typename SuperMeta2,typename TagList2
+>
+bool operator<=(
+  const sequenced_index<SuperMeta1,TagList1>& x,
+  const sequenced_index<SuperMeta2,TagList2>& y)
+{
+  return !(x>y);
+}
+
+/*  specialized algorithms */
+
+template<typename SuperMeta,typename TagList>
+void swap(
+  sequenced_index<SuperMeta,TagList>& x,
+  sequenced_index<SuperMeta,TagList>& y)
+{
+  x.swap(y);
+}
+
+} /* namespace multi_index::detail */
+
+/* sequenced index specifier */
+
+template <typename TagList>
+struct sequenced
+{
+  BOOST_STATIC_ASSERT(detail::is_tag<TagList>::value);
+
+  template<typename Super>
+  struct node_class
+  {
+    typedef detail::sequenced_index_node<Super> type;
+  };
+
+  template<typename SuperMeta>
+  struct index_class
+  {
+    typedef detail::sequenced_index<SuperMeta,typename TagList::type> type;
+  };
+};
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+/* Boost.Foreach compatibility */
+
+template<typename SuperMeta,typename TagList>
+inline pdalboost::mpl::true_* boost_foreach_is_noncopyable(
+  pdalboost::multi_index::detail::sequenced_index<SuperMeta,TagList>*&,
+  boost_foreach_argument_dependent_lookup_hack)
+{
+  return 0;
+}
+
+#undef BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT
+#undef BOOST_MULTI_INDEX_SEQ_INDEX_CHECK_INVARIANT_OF
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/sequenced_index_fwd.hpp b/vendor/pdalboost/boost/multi_index/sequenced_index_fwd.hpp
new file mode 100644
index 0000000..2a01c94
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/sequenced_index_fwd.hpp
@@ -0,0 +1,91 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_SEQUENCED_INDEX_FWD_HPP
+#define BOOST_MULTI_INDEX_SEQUENCED_INDEX_FWD_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/multi_index/tag.hpp>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+template<typename SuperMeta,typename TagList>
+class sequenced_index;
+
+template<
+  typename SuperMeta1,typename TagList1,
+  typename SuperMeta2,typename TagList2
+>
+bool operator==(
+  const sequenced_index<SuperMeta1,TagList1>& x,
+  const sequenced_index<SuperMeta2,TagList2>& y);
+
+template<
+  typename SuperMeta1,typename TagList1,
+  typename SuperMeta2,typename TagList2
+>
+bool operator<(
+  const sequenced_index<SuperMeta1,TagList1>& x,
+  const sequenced_index<SuperMeta2,TagList2>& y);
+
+template<
+  typename SuperMeta1,typename TagList1,
+  typename SuperMeta2,typename TagList2
+>
+bool operator!=(
+  const sequenced_index<SuperMeta1,TagList1>& x,
+  const sequenced_index<SuperMeta2,TagList2>& y);
+
+template<
+  typename SuperMeta1,typename TagList1,
+  typename SuperMeta2,typename TagList2
+>
+bool operator>(
+  const sequenced_index<SuperMeta1,TagList1>& x,
+  const sequenced_index<SuperMeta2,TagList2>& y);
+
+template<
+  typename SuperMeta1,typename TagList1,
+  typename SuperMeta2,typename TagList2
+>
+bool operator>=(
+  const sequenced_index<SuperMeta1,TagList1>& x,
+  const sequenced_index<SuperMeta2,TagList2>& y);
+
+template<
+  typename SuperMeta1,typename TagList1,
+  typename SuperMeta2,typename TagList2
+>
+bool operator<=(
+  const sequenced_index<SuperMeta1,TagList1>& x,
+  const sequenced_index<SuperMeta2,TagList2>& y);
+
+template<typename SuperMeta,typename TagList>
+void swap(
+  sequenced_index<SuperMeta,TagList>& x,
+  sequenced_index<SuperMeta,TagList>& y);
+
+} /* namespace multi_index::detail */
+
+/* index specifiers */
+
+template <typename TagList=tag<> >
+struct sequenced;
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index/tag.hpp b/vendor/pdalboost/boost/multi_index/tag.hpp
new file mode 100644
index 0000000..d56bb4d
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index/tag.hpp
@@ -0,0 +1,88 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_TAG_HPP
+#define BOOST_MULTI_INDEX_TAG_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/multi_index/detail/no_duplicate_tags.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/transform.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp> 
+#include <boost/preprocessor/repetition/enum_binary_params.hpp> 
+#include <boost/preprocessor/repetition/enum_params.hpp> 
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+
+/* A wrapper of mpl::vector used to hide MPL from the user.
+ * tag contains types used as tag names for indices in get() functions.
+ */
+
+/* This user_definable macro limits the number of elements of a tag;
+ * useful for shortening resulting symbol names (MSVC++ 6.0, for instance,
+ * has problems coping with very long symbol names.)
+ */
+
+#if !defined(BOOST_MULTI_INDEX_LIMIT_TAG_SIZE)
+#define BOOST_MULTI_INDEX_LIMIT_TAG_SIZE BOOST_MPL_LIMIT_VECTOR_SIZE
+#endif
+
+#if BOOST_MULTI_INDEX_LIMIT_TAG_SIZE<BOOST_MPL_LIMIT_VECTOR_SIZE
+#define BOOST_MULTI_INDEX_TAG_SIZE BOOST_MULTI_INDEX_LIMIT_TAG_SIZE
+#else
+#define BOOST_MULTI_INDEX_TAG_SIZE BOOST_MPL_LIMIT_VECTOR_SIZE
+#endif
+
+namespace pdalboost{
+
+namespace multi_index{
+
+namespace detail{
+
+struct tag_marker{};
+
+template<typename T>
+struct is_tag
+{
+  BOOST_STATIC_CONSTANT(bool,value=(is_base_and_derived<tag_marker,T>::value));
+};
+
+} /* namespace multi_index::detail */
+
+template<
+  BOOST_PP_ENUM_BINARY_PARAMS(
+    BOOST_MULTI_INDEX_TAG_SIZE,
+    typename T,
+    =mpl::na BOOST_PP_INTERCEPT) 
+>
+struct tag:private detail::tag_marker
+{
+  /* The mpl::transform pass produces shorter symbols (without
+   * trailing mpl::na's.)
+   */
+
+  typedef typename mpl::transform<
+    mpl::vector<BOOST_PP_ENUM_PARAMS(BOOST_MULTI_INDEX_TAG_SIZE,T)>,
+    mpl::identity<mpl::_1>
+  >::type type;
+
+  BOOST_STATIC_ASSERT(detail::no_duplicate_tags<type>::value);
+};
+
+} /* namespace multi_index */
+
+} /* namespace pdalboost */
+
+#undef BOOST_MULTI_INDEX_TAG_SIZE
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index_container.hpp b/vendor/pdalboost/boost/multi_index_container.hpp
new file mode 100644
index 0000000..47cde9d
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index_container.hpp
@@ -0,0 +1,1362 @@
+/* Multiply indexed container.
+ *
+ * Copyright 2003-2014 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_HPP
+#define BOOST_MULTI_INDEX_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <algorithm>
+#include <boost/detail/allocator_utilities.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/move/core.hpp>
+#include <boost/mpl/at.hpp>
+#include <boost/mpl/contains.hpp>
+#include <boost/mpl/find_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/multi_index_container_fwd.hpp>
+#include <boost/multi_index/detail/access_specifier.hpp>
+#include <boost/multi_index/detail/adl_swap.hpp>
+#include <boost/multi_index/detail/base_type.hpp>
+#include <boost/multi_index/detail/do_not_copy_elements_tag.hpp>
+#include <boost/multi_index/detail/converter.hpp>
+#include <boost/multi_index/detail/header_holder.hpp>
+#include <boost/multi_index/detail/has_tag.hpp>
+#include <boost/multi_index/detail/no_duplicate_tags.hpp>
+#include <boost/multi_index/detail/safe_mode.hpp>
+#include <boost/multi_index/detail/scope_guard.hpp>
+#include <boost/multi_index/detail/vartempl_support.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/utility/base_from_member.hpp>
+
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+#include <initializer_list>
+#endif
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+#include <boost/multi_index/detail/archive_constructed.hpp>
+#include <boost/multi_index/detail/serialization_version.hpp>
+#include <boost/serialization/collection_size_type.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/version.hpp>
+#include <boost/throw_exception.hpp> 
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+#include <boost/multi_index/detail/invariant_assert.hpp>
+#define BOOST_MULTI_INDEX_CHECK_INVARIANT_OF(x)                              \
+  detail::scope_guard BOOST_JOIN(check_invariant_,__LINE__)=                 \
+    detail::make_obj_guard(x,&multi_index_container::check_invariant_);      \
+  BOOST_JOIN(check_invariant_,__LINE__).touch();
+#define BOOST_MULTI_INDEX_CHECK_INVARIANT                                    \
+  BOOST_MULTI_INDEX_CHECK_INVARIANT_OF(*this)
+#else
+#define BOOST_MULTI_INDEX_CHECK_INVARIANT_OF(x)
+#define BOOST_MULTI_INDEX_CHECK_INVARIANT
+#endif
+
+namespace pdalboost{
+
+namespace multi_index{
+
+#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1500))
+#pragma warning(push)
+#pragma warning(disable:4522) /* spurious warning on multiple operator=()'s */
+#endif
+
+template<typename Value,typename IndexSpecifierList,typename Allocator>
+class multi_index_container:
+  private ::pdalboost::base_from_member<
+    typename pdalboost::detail::allocator::rebind_to<
+      Allocator,
+      typename detail::multi_index_node_type<
+        Value,IndexSpecifierList,Allocator>::type
+    >::type>,
+  BOOST_MULTI_INDEX_PRIVATE_IF_MEMBER_TEMPLATE_FRIENDS detail::header_holder<
+    typename pdalboost::detail::allocator::rebind_to<
+      Allocator,
+      typename detail::multi_index_node_type<
+        Value,IndexSpecifierList,Allocator>::type
+    >::type::pointer,
+    multi_index_container<Value,IndexSpecifierList,Allocator> >,
+  public detail::multi_index_base_type<
+    Value,IndexSpecifierList,Allocator>::type
+{
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+    BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+/* The "ISO C++ Template Parser" option in CW8.3 has a problem with the
+ * lifetime of const references bound to temporaries --precisely what
+ * scopeguards are.
+ */
+
+#pragma parse_mfunc_templ off
+#endif
+
+private:
+  BOOST_COPYABLE_AND_MOVABLE(multi_index_container)
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+  template <typename,typename,typename> friend class  detail::index_base;
+  template <typename,typename>          friend struct detail::header_holder;
+  template <typename,typename>          friend struct detail::converter;
+#endif
+
+  typedef typename detail::multi_index_base_type<
+      Value,IndexSpecifierList,Allocator>::type   super;
+  typedef typename
+  pdalboost::detail::allocator::rebind_to<
+    Allocator,
+    typename super::node_type
+  >::type                                         node_allocator;
+  typedef ::pdalboost::base_from_member<
+    node_allocator>                               bfm_allocator;
+  typedef detail::header_holder<
+    typename node_allocator::pointer,
+    multi_index_container>                        bfm_header;
+
+
+public:
+  /* All types are inherited from super, a few are explicitly
+   * brought forward here to save us some typename's.
+   */
+
+  typedef typename super::ctor_args_list           ctor_args_list;
+  typedef IndexSpecifierList                       index_specifier_type_list;
+ 
+  typedef typename super::index_type_list          index_type_list;
+
+  typedef typename super::iterator_type_list       iterator_type_list;
+  typedef typename super::const_iterator_type_list const_iterator_type_list;
+  typedef typename super::value_type               value_type;
+  typedef typename super::final_allocator_type     allocator_type;
+  typedef typename super::iterator                 iterator;
+  typedef typename super::const_iterator           const_iterator;
+
+  BOOST_STATIC_ASSERT(
+    detail::no_duplicate_tags_in_index_list<index_type_list>::value);
+
+  /* global project() needs to see this publicly */
+
+  typedef typename super::node_type node_type;
+
+  /* construct/copy/destroy */
+
+  explicit multi_index_container(
+
+#if BOOST_WORKAROUND(__IBMCPP__,<=600)
+    /* VisualAge seems to have an ETI issue with the default values
+     * for arguments args_list and al.
+     */
+
+    const ctor_args_list& args_list=
+      typename mpl::identity<multi_index_container>::type::
+        ctor_args_list(),
+    const allocator_type& al=
+      typename mpl::identity<multi_index_container>::type::
+        allocator_type()):
+#else
+    const ctor_args_list& args_list=ctor_args_list(),
+    const allocator_type& al=allocator_type()):
+#endif
+
+    bfm_allocator(al),
+    super(args_list,bfm_allocator::member),
+    node_count(0)
+  {
+    BOOST_MULTI_INDEX_CHECK_INVARIANT;
+  }
+
+  explicit multi_index_container(const allocator_type& al):
+    bfm_allocator(al),
+    super(ctor_args_list(),bfm_allocator::member),
+    node_count(0)
+  {
+    BOOST_MULTI_INDEX_CHECK_INVARIANT;
+  }
+  
+  template<typename InputIterator>
+  multi_index_container(
+    InputIterator first,InputIterator last,
+
+#if BOOST_WORKAROUND(__IBMCPP__,<=600)
+    /* VisualAge seems to have an ETI issue with the default values
+     * for arguments args_list and al.
+     */
+
+    const ctor_args_list& args_list=
+      typename mpl::identity<multi_index_container>::type::
+        ctor_args_list(),
+    const allocator_type& al=
+      typename mpl::identity<multi_index_container>::type::
+        allocator_type()):
+#else
+    const ctor_args_list& args_list=ctor_args_list(),
+    const allocator_type& al=allocator_type()):
+#endif
+
+    bfm_allocator(al),
+    super(args_list,bfm_allocator::member),
+    node_count(0)
+  {
+    BOOST_MULTI_INDEX_CHECK_INVARIANT;
+    BOOST_TRY{
+      iterator hint=super::end();
+      for(;first!=last;++first){
+        hint=super::make_iterator(
+          insert_ref_(*first,hint.get_node()).first);
+        ++hint;
+      }
+    }
+    BOOST_CATCH(...){
+      clear_();
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+  }
+
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+  multi_index_container(
+    std::initializer_list<Value> list,
+    const ctor_args_list& args_list=ctor_args_list(),
+    const allocator_type& al=allocator_type()):
+    bfm_allocator(al),
+    super(args_list,bfm_allocator::member),
+    node_count(0)
+  {
+    BOOST_MULTI_INDEX_CHECK_INVARIANT;
+    BOOST_TRY{
+      typedef const Value* init_iterator;
+
+      iterator hint=super::end();
+      for(init_iterator first=list.begin(),last=list.end();
+          first!=last;++first){
+        hint=super::make_iterator(insert_(*first,hint.get_node()).first);
+        ++hint;
+      }
+    }
+    BOOST_CATCH(...){
+      clear_();
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+  }
+#endif
+
+  multi_index_container(
+    const multi_index_container<Value,IndexSpecifierList,Allocator>& x):
+    bfm_allocator(x.bfm_allocator::member),
+    bfm_header(),
+    super(x),
+    node_count(0)
+  {
+    copy_map_type map(bfm_allocator::member,x.size(),x.header(),header());
+    for(const_iterator it=x.begin(),it_end=x.end();it!=it_end;++it){
+      map.clone(it.get_node());
+    }
+    super::copy_(x,map);
+    map.release();
+    node_count=x.size();
+
+    /* Not until this point are the indices required to be consistent,
+     * hence the position of the invariant checker.
+     */
+
+    BOOST_MULTI_INDEX_CHECK_INVARIANT;
+  }
+
+  multi_index_container(BOOST_RV_REF(multi_index_container) x):
+    bfm_allocator(x.bfm_allocator::member),
+    bfm_header(),
+    super(x,detail::do_not_copy_elements_tag()),
+    node_count(0)
+  {
+    BOOST_MULTI_INDEX_CHECK_INVARIANT;
+    BOOST_MULTI_INDEX_CHECK_INVARIANT_OF(x);
+    swap_elements_(x);
+  }
+
+  ~multi_index_container()
+  {
+    delete_all_nodes_();
+  }
+
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+  /* As per http://www.boost.org/doc/html/move/emulation_limitations.html
+   * #move.emulation_limitations.assignment_operator
+   */
+
+  multi_index_container<Value,IndexSpecifierList,Allocator>& operator=(
+    const multi_index_container<Value,IndexSpecifierList,Allocator>& x)
+  {
+    multi_index_container y(x);
+    this->swap(y);
+    return *this;
+  }
+#endif
+
+  multi_index_container<Value,IndexSpecifierList,Allocator>& operator=(
+    BOOST_COPY_ASSIGN_REF(multi_index_container) x)
+  {
+    multi_index_container y(x);
+    this->swap(y);
+    return *this;
+  }
+
+  multi_index_container<Value,IndexSpecifierList,Allocator>& operator=(
+    BOOST_RV_REF(multi_index_container) x)
+  {
+    this->swap(x);
+    return *this;
+  }
+
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+  multi_index_container<Value,IndexSpecifierList,Allocator>& operator=(
+    std::initializer_list<Value> list)
+  {
+    BOOST_MULTI_INDEX_CHECK_INVARIANT;
+    typedef const Value* init_iterator;
+
+    multi_index_container x(*this,detail::do_not_copy_elements_tag());    
+    iterator hint=x.end();
+    for(init_iterator first=list.begin(),last=list.end();
+        first!=last;++first){
+      hint=x.make_iterator(x.insert_(*first,hint.get_node()).first);
+      ++hint;
+    }
+    x.swap_elements_(*this);
+    return*this;
+  }
+#endif
+
+  allocator_type get_allocator()const BOOST_NOEXCEPT
+  {
+    return allocator_type(bfm_allocator::member);
+  }
+
+  /* retrieval of indices by number */
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES)
+  template<int N>
+  struct nth_index
+  {
+    BOOST_STATIC_ASSERT(N>=0&&N<mpl::size<index_type_list>::type::value);
+    typedef typename mpl::at_c<index_type_list,N>::type type;
+  };
+
+  template<int N>
+  typename nth_index<N>::type& get()BOOST_NOEXCEPT
+  {
+    BOOST_STATIC_ASSERT(N>=0&&N<mpl::size<index_type_list>::type::value);
+    return *this;
+  }
+
+  template<int N>
+  const typename nth_index<N>::type& get()const BOOST_NOEXCEPT
+  {
+    BOOST_STATIC_ASSERT(N>=0&&N<mpl::size<index_type_list>::type::value);
+    return *this;
+  }
+#endif
+
+  /* retrieval of indices by tag */
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES)
+  template<typename Tag>
+  struct index
+  {
+    typedef typename mpl::find_if<
+      index_type_list,
+      detail::has_tag<Tag>
+    >::type                                    iter;
+
+    BOOST_STATIC_CONSTANT(
+      bool,index_found=!(is_same<iter,typename mpl::end<index_type_list>::type >::value));
+    BOOST_STATIC_ASSERT(index_found);
+
+    typedef typename mpl::deref<iter>::type    type;
+  };
+
+  template<typename Tag>
+  typename index<Tag>::type& get()BOOST_NOEXCEPT
+  {
+    return *this;
+  }
+
+  template<typename Tag>
+  const typename index<Tag>::type& get()const BOOST_NOEXCEPT
+  {
+    return *this;
+  }
+#endif
+
+  /* projection of iterators by number */
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES)
+  template<int N>
+  struct nth_index_iterator
+  {
+    typedef typename nth_index<N>::type::iterator type;
+  };
+
+  template<int N>
+  struct nth_index_const_iterator
+  {
+    typedef typename nth_index<N>::type::const_iterator type;
+  };
+
+  template<int N,typename IteratorType>
+  typename nth_index_iterator<N>::type project(IteratorType it)
+  {
+    typedef typename nth_index<N>::type index_type;
+
+#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */
+    BOOST_STATIC_ASSERT(
+      (mpl::contains<iterator_type_list,IteratorType>::value));
+#endif
+
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(
+      it,static_cast<typename IteratorType::container_type&>(*this));
+
+    return index_type::make_iterator(static_cast<node_type*>(it.get_node()));
+  }
+
+  template<int N,typename IteratorType>
+  typename nth_index_const_iterator<N>::type project(IteratorType it)const
+  {
+    typedef typename nth_index<N>::type index_type;
+
+#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */
+    BOOST_STATIC_ASSERT((
+      mpl::contains<iterator_type_list,IteratorType>::value||
+      mpl::contains<const_iterator_type_list,IteratorType>::value));
+#endif
+
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(
+      it,static_cast<const typename IteratorType::container_type&>(*this));
+    return index_type::make_iterator(static_cast<node_type*>(it.get_node()));
+  }
+#endif
+
+  /* projection of iterators by tag */
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES)
+  template<typename Tag>
+  struct index_iterator
+  {
+    typedef typename index<Tag>::type::iterator type;
+  };
+
+  template<typename Tag>
+  struct index_const_iterator
+  {
+    typedef typename index<Tag>::type::const_iterator type;
+  };
+
+  template<typename Tag,typename IteratorType>
+  typename index_iterator<Tag>::type project(IteratorType it)
+  {
+    typedef typename index<Tag>::type index_type;
+
+#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */
+    BOOST_STATIC_ASSERT(
+      (mpl::contains<iterator_type_list,IteratorType>::value));
+#endif
+
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(
+      it,static_cast<typename IteratorType::container_type&>(*this));
+    return index_type::make_iterator(static_cast<node_type*>(it.get_node()));
+  }
+
+  template<typename Tag,typename IteratorType>
+  typename index_const_iterator<Tag>::type project(IteratorType it)const
+  {
+    typedef typename index<Tag>::type index_type;
+
+#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* fails in Sun C++ 5.7 */
+    BOOST_STATIC_ASSERT((
+      mpl::contains<iterator_type_list,IteratorType>::value||
+      mpl::contains<const_iterator_type_list,IteratorType>::value));
+#endif
+
+    BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+    BOOST_MULTI_INDEX_CHECK_IS_OWNER(
+      it,static_cast<const typename IteratorType::container_type&>(*this));
+    return index_type::make_iterator(static_cast<node_type*>(it.get_node()));
+  }
+#endif
+
+BOOST_MULTI_INDEX_PROTECTED_IF_MEMBER_TEMPLATE_FRIENDS:
+  typedef typename super::copy_map_type copy_map_type;
+
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+  multi_index_container(
+    const multi_index_container<Value,IndexSpecifierList,Allocator>& x,
+    detail::do_not_copy_elements_tag):
+    bfm_allocator(x.bfm_allocator::member),
+    bfm_header(),
+    super(x,detail::do_not_copy_elements_tag()),
+    node_count(0)
+  {
+    BOOST_MULTI_INDEX_CHECK_INVARIANT;
+  }
+#endif
+
+  node_type* header()const
+  {
+    return &*bfm_header::member;
+  }
+
+  node_type* allocate_node()
+  {
+    return &*bfm_allocator::member.allocate(1);
+  }
+
+  void deallocate_node(node_type* x)
+  {
+    typedef typename node_allocator::pointer node_pointer;
+    bfm_allocator::member.deallocate(static_cast<node_pointer>(x),1);
+  }
+
+  bool empty_()const
+  {
+    return node_count==0;
+  }
+
+  std::size_t size_()const
+  {
+    return node_count;
+  }
+
+  std::size_t max_size_()const
+  {
+    return static_cast<std::size_t >(-1);
+  }
+
+  template<typename Variant>
+  std::pair<node_type*,bool> insert_(const Value& v,Variant variant)
+  {
+    node_type* x=0;
+    node_type* res=super::insert_(v,x,variant);
+    if(res==x){
+      ++node_count;
+      return std::pair<node_type*,bool>(res,true);
+    }
+    else{
+      return std::pair<node_type*,bool>(res,false);
+    }
+  }
+
+  std::pair<node_type*,bool> insert_(const Value& v)
+  {
+    return insert_(v,detail::lvalue_tag());
+  }
+
+  std::pair<node_type*,bool> insert_rv_(const Value& v)
+  {
+    return insert_(v,detail::rvalue_tag());
+  }
+
+  template<typename T>
+  std::pair<node_type*,bool> insert_ref_(T& t)
+  {
+    node_type* x=allocate_node();
+    BOOST_TRY{
+      new(&x->value()) value_type(t);
+      BOOST_TRY{
+        node_type* res=super::insert_(x->value(),x,detail::emplaced_tag());
+        if(res==x){
+          ++node_count;
+          return std::pair<node_type*,bool>(res,true);
+        }
+        else{
+          pdalboost::detail::allocator::destroy(&x->value());
+          deallocate_node(x);
+          return std::pair<node_type*,bool>(res,false);
+        }
+      }
+      BOOST_CATCH(...){
+        pdalboost::detail::allocator::destroy(&x->value());
+        BOOST_RETHROW;
+      }
+      BOOST_CATCH_END
+    }
+    BOOST_CATCH(...){
+      deallocate_node(x);
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+  }
+
+  std::pair<node_type*,bool> insert_ref_(const value_type& x)
+  {
+    return insert_(x);
+  }
+
+  std::pair<node_type*,bool> insert_ref_(value_type& x)
+  {
+    return insert_(x);
+  }
+
+  template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+  std::pair<node_type*,bool> emplace_(
+    BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+  {
+    node_type* x=allocate_node();
+    BOOST_TRY{
+      detail::vartempl_placement_new(
+        &x->value(),BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+      BOOST_TRY{
+        node_type* res=super::insert_(x->value(),x,detail::emplaced_tag());
+        if(res==x){
+          ++node_count;
+          return std::pair<node_type*,bool>(res,true);
+        }
+        else{
+          pdalboost::detail::allocator::destroy(&x->value());
+          deallocate_node(x);
+          return std::pair<node_type*,bool>(res,false);
+        }
+      }
+      BOOST_CATCH(...){
+        pdalboost::detail::allocator::destroy(&x->value());
+        BOOST_RETHROW;
+      }
+      BOOST_CATCH_END
+    }
+    BOOST_CATCH(...){
+      deallocate_node(x);
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+  }
+
+  template<typename Variant>
+  std::pair<node_type*,bool> insert_(
+    const Value& v,node_type* position,Variant variant)
+  {
+    node_type* x=0;
+    node_type* res=super::insert_(v,position,x,variant);
+    if(res==x){
+      ++node_count;
+      return std::pair<node_type*,bool>(res,true);
+    }
+    else{
+      return std::pair<node_type*,bool>(res,false);
+    }
+  }
+
+  std::pair<node_type*,bool> insert_(const Value& v,node_type* position)
+  {
+    return insert_(v,position,detail::lvalue_tag());
+  }
+
+  std::pair<node_type*,bool> insert_rv_(const Value& v,node_type* position)
+  {
+    return insert_(v,position,detail::rvalue_tag());
+  }
+
+  template<typename T>
+  std::pair<node_type*,bool> insert_ref_(
+    T& t,node_type* position)
+  {
+    node_type* x=allocate_node();
+    BOOST_TRY{
+      new(&x->value()) value_type(t);
+      BOOST_TRY{
+        node_type* res=super::insert_(
+          x->value(),position,x,detail::emplaced_tag());
+        if(res==x){
+          ++node_count;
+          return std::pair<node_type*,bool>(res,true);
+        }
+        else{
+          pdalboost::detail::allocator::destroy(&x->value());
+          deallocate_node(x);
+          return std::pair<node_type*,bool>(res,false);
+        }
+      }
+      BOOST_CATCH(...){
+        pdalboost::detail::allocator::destroy(&x->value());
+        BOOST_RETHROW;
+      }
+      BOOST_CATCH_END
+    }
+    BOOST_CATCH(...){
+      deallocate_node(x);
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+  }
+
+  std::pair<node_type*,bool> insert_ref_(
+    const value_type& x,node_type* position)
+  {
+    return insert_(x,position);
+  }
+
+  std::pair<node_type*,bool> insert_ref_(
+    value_type& x,node_type* position)
+  {
+    return insert_(x,position);
+  }
+
+  template<BOOST_MULTI_INDEX_TEMPLATE_PARAM_PACK>
+  std::pair<node_type*,bool> emplace_hint_(
+    node_type* position,
+    BOOST_MULTI_INDEX_FUNCTION_PARAM_PACK)
+  {
+    node_type* x=allocate_node();
+    BOOST_TRY{
+      detail::vartempl_placement_new(
+        &x->value(),BOOST_MULTI_INDEX_FORWARD_PARAM_PACK);
+      BOOST_TRY{
+        node_type* res=super::insert_(
+          x->value(),position,x,detail::emplaced_tag());
+        if(res==x){
+          ++node_count;
+          return std::pair<node_type*,bool>(res,true);
+        }
+        else{
+          pdalboost::detail::allocator::destroy(&x->value());
+          deallocate_node(x);
+          return std::pair<node_type*,bool>(res,false);
+        }
+      }
+      BOOST_CATCH(...){
+        pdalboost::detail::allocator::destroy(&x->value());
+        BOOST_RETHROW;
+      }
+      BOOST_CATCH_END
+    }
+    BOOST_CATCH(...){
+      deallocate_node(x);
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+  }
+
+  void erase_(node_type* x)
+  {
+    --node_count;
+    super::erase_(x);
+    deallocate_node(x);
+  }
+
+  void delete_node_(node_type* x)
+  {
+    super::delete_node_(x);
+    deallocate_node(x);
+  }
+
+  void delete_all_nodes_()
+  {
+    super::delete_all_nodes_();
+  }
+
+  void clear_()
+  {
+    delete_all_nodes_();
+    super::clear_();
+    node_count=0;
+  }
+
+  void swap_(multi_index_container<Value,IndexSpecifierList,Allocator>& x)
+  {
+    if(bfm_allocator::member!=x.bfm_allocator::member){
+      detail::adl_swap(bfm_allocator::member,x.bfm_allocator::member);
+    }
+    std::swap(bfm_header::member,x.bfm_header::member);
+    super::swap_(x);
+    std::swap(node_count,x.node_count);
+  }
+
+  void swap_elements_(
+    multi_index_container<Value,IndexSpecifierList,Allocator>& x)
+  {
+    std::swap(bfm_header::member,x.bfm_header::member);
+    super::swap_elements_(x);
+    std::swap(node_count,x.node_count);
+  }
+
+  bool replace_(const Value& k,node_type* x)
+  {
+    return super::replace_(k,x,detail::lvalue_tag());
+  }
+
+  bool replace_rv_(const Value& k,node_type* x)
+  {
+    return super::replace_(k,x,detail::rvalue_tag());
+  }
+
+  template<typename Modifier>
+  bool modify_(Modifier& mod,node_type* x)
+  {
+    mod(const_cast<value_type&>(x->value()));
+
+    BOOST_TRY{
+      if(!super::modify_(x)){
+        deallocate_node(x);
+        --node_count;
+        return false;
+      }
+      else return true;
+    }
+    BOOST_CATCH(...){
+      deallocate_node(x);
+      --node_count;
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+  }
+
+  template<typename Modifier,typename Rollback>
+  bool modify_(Modifier& mod,Rollback& back_,node_type* x)
+  {
+    mod(const_cast<value_type&>(x->value()));
+
+    bool b;
+    BOOST_TRY{
+      b=super::modify_rollback_(x);
+    }
+    BOOST_CATCH(...){
+      BOOST_TRY{
+        back_(const_cast<value_type&>(x->value()));
+        BOOST_RETHROW;
+      }
+      BOOST_CATCH(...){
+        this->erase_(x);
+        BOOST_RETHROW;
+      }
+      BOOST_CATCH_END
+    }
+    BOOST_CATCH_END
+
+    BOOST_TRY{
+      if(!b){
+        back_(const_cast<value_type&>(x->value()));
+        return false;
+      }
+      else return true;
+    }
+    BOOST_CATCH(...){
+      this->erase_(x);
+      BOOST_RETHROW;
+    }
+    BOOST_CATCH_END
+  }
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+  /* serialization */
+
+  friend class pdalboost::serialization::access;
+
+  BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+  typedef typename super::index_saver_type        index_saver_type;
+  typedef typename super::index_loader_type       index_loader_type;
+
+  template<class Archive>
+  void save(Archive& ar,const unsigned int version)const
+  {
+    const serialization::collection_size_type       s(size_());
+    const detail::serialization_version<value_type> value_version;
+    ar<<serialization::make_nvp("count",s);
+    ar<<serialization::make_nvp("value_version",value_version);
+
+    index_saver_type sm(bfm_allocator::member,s);
+
+    for(iterator it=super::begin(),it_end=super::end();it!=it_end;++it){
+      serialization::save_construct_data_adl(ar,&*it,value_version);
+      ar<<serialization::make_nvp("item",*it);
+      sm.add(it.get_node(),ar,version);
+    }
+    sm.add_track(header(),ar,version);
+
+    super::save_(ar,version,sm);
+  }
+
+  template<class Archive>
+  void load(Archive& ar,const unsigned int version)
+  {
+    BOOST_MULTI_INDEX_CHECK_INVARIANT;
+
+    clear_(); 
+    serialization::collection_size_type       s;
+    detail::serialization_version<value_type> value_version;
+    if(version<1){
+      std::size_t sz;
+      ar>>serialization::make_nvp("count",sz);
+      s=static_cast<serialization::collection_size_type>(sz);
+    }
+    else{
+      ar>>serialization::make_nvp("count",s);
+    }
+    if(version<2){
+      value_version=0;
+    }
+    else{
+      ar>>serialization::make_nvp("value_version",value_version);
+    }
+
+    index_loader_type lm(bfm_allocator::member,s);
+
+    for(std::size_t n=0;n<s;++n){
+      detail::archive_constructed<Value> value("item",ar,value_version);
+      std::pair<node_type*,bool> p=insert_(
+        value.get(),super::end().get_node());
+      if(!p.second)throw_exception(
+        archive::archive_exception(
+          archive::archive_exception::other_exception));
+      ar.reset_object_address(&p.first->value(),&value.get());
+      lm.add(p.first,ar,version);
+    }
+    lm.add_track(header(),ar,version);
+
+    super::load_(ar,version,lm);
+  }
+#endif
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
+  /* invariant stuff */
+
+  bool invariant_()const
+  {
+    return super::invariant_();
+  }
+
+  void check_invariant_()const
+  {
+    BOOST_MULTI_INDEX_INVARIANT_ASSERT(invariant_());
+  }
+#endif
+
+private:
+  std::size_t node_count;
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)&&\
+    BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+#pragma parse_mfunc_templ reset
+#endif
+};
+
+#if BOOST_WORKAROUND(BOOST_MSVC,BOOST_TESTED_AT(1500))
+#pragma warning(pop) /* C4522 */
+#endif
+
+/* retrieval of indices by number */
+
+template<typename MultiIndexContainer,int N>
+struct nth_index
+{
+  BOOST_STATIC_CONSTANT(
+    int,
+    M=mpl::size<typename MultiIndexContainer::index_type_list>::type::value);
+  BOOST_STATIC_ASSERT(N>=0&&N<M);
+  typedef typename mpl::at_c<
+    typename MultiIndexContainer::index_type_list,N>::type type;
+};
+
+template<int N,typename Value,typename IndexSpecifierList,typename Allocator>
+typename nth_index<
+  multi_index_container<Value,IndexSpecifierList,Allocator>,N>::type&
+get(
+  multi_index_container<Value,IndexSpecifierList,Allocator>& m)BOOST_NOEXCEPT
+{
+  typedef multi_index_container<
+    Value,IndexSpecifierList,Allocator>    multi_index_type;
+  typedef typename nth_index<
+    multi_index_container<
+      Value,IndexSpecifierList,Allocator>,
+    N
+  >::type                                  index_type;
+
+  BOOST_STATIC_ASSERT(N>=0&&
+    N<
+    mpl::size<
+      BOOST_DEDUCED_TYPENAME multi_index_type::index_type_list
+    >::type::value);
+
+  return detail::converter<multi_index_type,index_type>::index(m);
+}
+
+template<int N,typename Value,typename IndexSpecifierList,typename Allocator>
+const typename nth_index<
+  multi_index_container<Value,IndexSpecifierList,Allocator>,N>::type&
+get(
+  const multi_index_container<Value,IndexSpecifierList,Allocator>& m
+)BOOST_NOEXCEPT
+{
+  typedef multi_index_container<
+    Value,IndexSpecifierList,Allocator>    multi_index_type;
+  typedef typename nth_index<
+    multi_index_container<
+      Value,IndexSpecifierList,Allocator>,
+    N
+  >::type                                  index_type;
+
+  BOOST_STATIC_ASSERT(N>=0&&
+    N<
+    mpl::size<
+      BOOST_DEDUCED_TYPENAME multi_index_type::index_type_list
+    >::type::value);
+
+  return detail::converter<multi_index_type,index_type>::index(m);
+}
+
+/* retrieval of indices by tag */
+
+template<typename MultiIndexContainer,typename Tag>
+struct index
+{
+  typedef typename MultiIndexContainer::index_type_list index_type_list;
+
+  typedef typename mpl::find_if<
+    index_type_list,
+    detail::has_tag<Tag>
+  >::type                                      iter;
+
+  BOOST_STATIC_CONSTANT(
+    bool,index_found=!(is_same<iter,typename mpl::end<index_type_list>::type >::value));
+  BOOST_STATIC_ASSERT(index_found);
+
+  typedef typename mpl::deref<iter>::type       type;
+};
+
+template<
+  typename Tag,typename Value,typename IndexSpecifierList,typename Allocator
+>
+typename ::pdalboost::multi_index::index<
+  multi_index_container<Value,IndexSpecifierList,Allocator>,Tag>::type&
+get(
+  multi_index_container<Value,IndexSpecifierList,Allocator>& m)BOOST_NOEXCEPT
+{
+  typedef multi_index_container<
+    Value,IndexSpecifierList,Allocator>         multi_index_type;
+  typedef typename ::pdalboost::multi_index::index<
+    multi_index_container<
+      Value,IndexSpecifierList,Allocator>,
+    Tag
+  >::type                                       index_type;
+
+  return detail::converter<multi_index_type,index_type>::index(m);
+}
+
+template<
+  typename Tag,typename Value,typename IndexSpecifierList,typename Allocator
+>
+const typename ::pdalboost::multi_index::index<
+  multi_index_container<Value,IndexSpecifierList,Allocator>,Tag>::type&
+get(
+  const multi_index_container<Value,IndexSpecifierList,Allocator>& m
+)BOOST_NOEXCEPT
+{
+  typedef multi_index_container<
+    Value,IndexSpecifierList,Allocator>         multi_index_type;
+  typedef typename ::pdalboost::multi_index::index<
+    multi_index_container<
+      Value,IndexSpecifierList,Allocator>,
+    Tag
+  >::type                                       index_type;
+
+  return detail::converter<multi_index_type,index_type>::index(m);
+}
+
+/* projection of iterators by number */
+
+template<typename MultiIndexContainer,int N>
+struct nth_index_iterator
+{
+  typedef typename nth_index<MultiIndexContainer,N>::type::iterator type;
+};
+
+template<typename MultiIndexContainer,int N>
+struct nth_index_const_iterator
+{
+  typedef typename nth_index<MultiIndexContainer,N>::type::const_iterator type;
+};
+
+template<
+  int N,typename IteratorType,
+  typename Value,typename IndexSpecifierList,typename Allocator>
+typename nth_index_iterator<
+  multi_index_container<Value,IndexSpecifierList,Allocator>,N>::type
+project(
+  multi_index_container<Value,IndexSpecifierList,Allocator>& m,
+  IteratorType it)
+{
+  typedef multi_index_container<
+    Value,IndexSpecifierList,Allocator>                multi_index_type;
+  typedef typename nth_index<multi_index_type,N>::type index_type;
+
+#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* Sun C++ 5.7 fails */
+  BOOST_STATIC_ASSERT((
+    mpl::contains<
+      BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list,
+      IteratorType>::value));
+#endif
+
+  BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+  typedef detail::converter<
+    multi_index_type,
+    BOOST_DEDUCED_TYPENAME IteratorType::container_type> converter;
+  BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m));
+#endif
+
+  return detail::converter<multi_index_type,index_type>::iterator(
+    m,static_cast<typename multi_index_type::node_type*>(it.get_node()));
+}
+
+template<
+  int N,typename IteratorType,
+  typename Value,typename IndexSpecifierList,typename Allocator>
+typename nth_index_const_iterator<
+  multi_index_container<Value,IndexSpecifierList,Allocator>,N>::type
+project(
+  const multi_index_container<Value,IndexSpecifierList,Allocator>& m,
+  IteratorType it)
+{
+  typedef multi_index_container<
+    Value,IndexSpecifierList,Allocator>                multi_index_type;
+  typedef typename nth_index<multi_index_type,N>::type index_type;
+
+#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* Sun C++ 5.7 fails */
+  BOOST_STATIC_ASSERT((
+    mpl::contains<
+      BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list,
+      IteratorType>::value||
+    mpl::contains<
+      BOOST_DEDUCED_TYPENAME multi_index_type::const_iterator_type_list,
+      IteratorType>::value));
+#endif
+
+  BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+  typedef detail::converter<
+    multi_index_type,
+    BOOST_DEDUCED_TYPENAME IteratorType::container_type> converter;
+  BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m));
+#endif
+
+  return detail::converter<multi_index_type,index_type>::const_iterator(
+    m,static_cast<typename multi_index_type::node_type*>(it.get_node()));
+}
+
+/* projection of iterators by tag */
+
+template<typename MultiIndexContainer,typename Tag>
+struct index_iterator
+{
+  typedef typename ::pdalboost::multi_index::index<
+    MultiIndexContainer,Tag>::type::iterator    type;
+};
+
+template<typename MultiIndexContainer,typename Tag>
+struct index_const_iterator
+{
+  typedef typename ::pdalboost::multi_index::index<
+    MultiIndexContainer,Tag>::type::const_iterator type;
+};
+
+template<
+  typename Tag,typename IteratorType,
+  typename Value,typename IndexSpecifierList,typename Allocator>
+typename index_iterator<
+  multi_index_container<Value,IndexSpecifierList,Allocator>,Tag>::type
+project(
+  multi_index_container<Value,IndexSpecifierList,Allocator>& m,
+  IteratorType it)
+{
+  typedef multi_index_container<
+    Value,IndexSpecifierList,Allocator>         multi_index_type;
+  typedef typename ::pdalboost::multi_index::index<
+    multi_index_type,Tag>::type                 index_type;
+
+#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* Sun C++ 5.7 fails */
+  BOOST_STATIC_ASSERT((
+    mpl::contains<
+      BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list,
+      IteratorType>::value));
+#endif
+
+  BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+  typedef detail::converter<
+    multi_index_type,
+    BOOST_DEDUCED_TYPENAME IteratorType::container_type> converter;
+  BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m));
+#endif
+
+  return detail::converter<multi_index_type,index_type>::iterator(
+    m,static_cast<typename multi_index_type::node_type*>(it.get_node()));
+}
+
+template<
+  typename Tag,typename IteratorType,
+  typename Value,typename IndexSpecifierList,typename Allocator>
+typename index_const_iterator<
+  multi_index_container<Value,IndexSpecifierList,Allocator>,Tag>::type
+project(
+  const multi_index_container<Value,IndexSpecifierList,Allocator>& m,
+  IteratorType it)
+{
+  typedef multi_index_container<
+    Value,IndexSpecifierList,Allocator>         multi_index_type;
+  typedef typename ::pdalboost::multi_index::index<
+    multi_index_type,Tag>::type                 index_type;
+
+#if !defined(__SUNPRO_CC)||!(__SUNPRO_CC<0x580) /* Sun C++ 5.7 fails */
+  BOOST_STATIC_ASSERT((
+    mpl::contains<
+      BOOST_DEDUCED_TYPENAME multi_index_type::iterator_type_list,
+      IteratorType>::value||
+    mpl::contains<
+      BOOST_DEDUCED_TYPENAME multi_index_type::const_iterator_type_list,
+      IteratorType>::value));
+#endif
+
+  BOOST_MULTI_INDEX_CHECK_VALID_ITERATOR(it);
+
+#if defined(BOOST_MULTI_INDEX_ENABLE_SAFE_MODE)
+  typedef detail::converter<
+    multi_index_type,
+    BOOST_DEDUCED_TYPENAME IteratorType::container_type> converter;
+  BOOST_MULTI_INDEX_CHECK_IS_OWNER(it,converter::index(m));
+#endif
+
+  return detail::converter<multi_index_type,index_type>::const_iterator(
+    m,static_cast<typename multi_index_type::node_type*>(it.get_node()));
+}
+
+/* Comparison. Simple forward to first index. */
+
+template<
+  typename Value1,typename IndexSpecifierList1,typename Allocator1,
+  typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator==(
+  const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+  const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y)
+{
+  return get<0>(x)==get<0>(y);
+}
+
+template<
+  typename Value1,typename IndexSpecifierList1,typename Allocator1,
+  typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator<(
+  const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+  const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y)
+{
+  return get<0>(x)<get<0>(y);
+}
+
+template<
+  typename Value1,typename IndexSpecifierList1,typename Allocator1,
+  typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator!=(
+  const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+  const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y)
+{
+  return get<0>(x)!=get<0>(y);
+}
+
+template<
+  typename Value1,typename IndexSpecifierList1,typename Allocator1,
+  typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator>(
+  const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+  const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y)
+{
+  return get<0>(x)>get<0>(y);
+}
+
+template<
+  typename Value1,typename IndexSpecifierList1,typename Allocator1,
+  typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator>=(
+  const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+  const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y)
+{
+  return get<0>(x)>=get<0>(y);
+}
+
+template<
+  typename Value1,typename IndexSpecifierList1,typename Allocator1,
+  typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator<=(
+  const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+  const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y)
+{
+  return get<0>(x)<=get<0>(y);
+}
+
+/*  specialized algorithms */
+
+template<typename Value,typename IndexSpecifierList,typename Allocator>
+void swap(
+  multi_index_container<Value,IndexSpecifierList,Allocator>& x,
+  multi_index_container<Value,IndexSpecifierList,Allocator>& y)
+{
+  x.swap(y);
+}
+
+} /* namespace multi_index */
+
+#if !defined(BOOST_MULTI_INDEX_DISABLE_SERIALIZATION)
+/* class version = 1 : we now serialize the size through
+ * pdalboost::serialization::collection_size_type.
+ * class version = 2 : proper use of {save|load}_construct_data.
+ */
+
+namespace serialization {
+template<typename Value,typename IndexSpecifierList,typename Allocator>
+struct version<
+  pdalboost::multi_index_container<Value,IndexSpecifierList,Allocator>
+>
+{
+  BOOST_STATIC_CONSTANT(int,value=2);
+};
+} /* namespace serialization */
+#endif
+
+/* Associated global functions are promoted to namespace pdalboost, except
+ * comparison operators and swap, which are meant to be Koenig looked-up.
+ */
+
+using multi_index::get;
+using multi_index::project;
+
+} /* namespace pdalboost */
+
+#undef BOOST_MULTI_INDEX_CHECK_INVARIANT
+#undef BOOST_MULTI_INDEX_CHECK_INVARIANT_OF
+
+#endif
diff --git a/vendor/pdalboost/boost/multi_index_container_fwd.hpp b/vendor/pdalboost/boost/multi_index_container_fwd.hpp
new file mode 100644
index 0000000..07877cb
--- /dev/null
+++ b/vendor/pdalboost/boost/multi_index_container_fwd.hpp
@@ -0,0 +1,121 @@
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org/libs/multi_index for library home page.
+ */
+
+#ifndef BOOST_MULTI_INDEX_FWD_HPP
+#define BOOST_MULTI_INDEX_FWD_HPP
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
+#include <boost/multi_index/identity.hpp>
+#include <boost/multi_index/indexed_by.hpp>
+#include <boost/multi_index/ordered_index_fwd.hpp>
+#include <memory>
+
+namespace pdalboost{
+
+namespace multi_index{
+
+/* Default value for IndexSpecifierList specifies a container
+ * equivalent to std::set<Value>.
+ */
+
+template<
+  typename Value,
+  typename IndexSpecifierList=indexed_by<ordered_unique<identity<Value> > >,
+  typename Allocator=std::allocator<Value> >
+class multi_index_container;
+
+template<typename MultiIndexContainer,int N>
+struct nth_index;
+
+template<typename MultiIndexContainer,typename Tag>
+struct index;
+
+template<typename MultiIndexContainer,int N>
+struct nth_index_iterator;
+
+template<typename MultiIndexContainer,int N>
+struct nth_index_const_iterator;
+
+template<typename MultiIndexContainer,typename Tag>
+struct index_iterator;
+
+template<typename MultiIndexContainer,typename Tag>
+struct index_const_iterator;
+
+/* get and project functions not fwd declared due to problems
+ * with dependent typenames
+ */
+
+template<
+  typename Value1,typename IndexSpecifierList1,typename Allocator1,
+  typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator==(
+  const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+  const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y);
+
+template<
+  typename Value1,typename IndexSpecifierList1,typename Allocator1,
+  typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator<(
+  const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+  const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y);
+
+template<
+  typename Value1,typename IndexSpecifierList1,typename Allocator1,
+  typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator!=(
+  const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+  const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y);
+
+template<
+  typename Value1,typename IndexSpecifierList1,typename Allocator1,
+  typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator>(
+  const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+  const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y);
+
+template<
+  typename Value1,typename IndexSpecifierList1,typename Allocator1,
+  typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator>=(
+  const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+  const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y);
+
+template<
+  typename Value1,typename IndexSpecifierList1,typename Allocator1,
+  typename Value2,typename IndexSpecifierList2,typename Allocator2
+>
+bool operator<=(
+  const multi_index_container<Value1,IndexSpecifierList1,Allocator1>& x,
+  const multi_index_container<Value2,IndexSpecifierList2,Allocator2>& y);
+
+template<typename Value,typename IndexSpecifierList,typename Allocator>
+void swap(
+  multi_index_container<Value,IndexSpecifierList,Allocator>& x,
+  multi_index_container<Value,IndexSpecifierList,Allocator>& y);
+
+} /* namespace multi_index */
+
+/* multi_index_container, being the main type of this library, is promoted to
+ * namespace pdalboost.
+ */
+
+using multi_index::multi_index_container;
+
+} /* namespace pdalboost */
+
+#endif
diff --git a/vendor/pdalboost/boost/next_prior.hpp b/vendor/pdalboost/boost/next_prior.hpp
new file mode 100644
index 0000000..38c2fae
--- /dev/null
+++ b/vendor/pdalboost/boost/next_prior.hpp
@@ -0,0 +1,165 @@
+//  Boost next_prior.hpp header file  ---------------------------------------//
+
+//  (C) Copyright Dave Abrahams and Daniel Walker 1999-2003. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/utility for documentation.
+
+//  Revision History
+//  13 Dec 2003  Added next(x, n) and prior(x, n) (Daniel Walker)
+
+#ifndef BOOST_NEXT_PRIOR_HPP_INCLUDED
+#define BOOST_NEXT_PRIOR_HPP_INCLUDED
+
+#include <iterator>
+#if defined(_MSC_VER) && _MSC_VER <= 1310
+#include <boost/mpl/and.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#endif
+#include <boost/type_traits/is_unsigned.hpp>
+#include <boost/type_traits/integral_promotion.hpp>
+#include <boost/type_traits/make_signed.hpp>
+#include <boost/type_traits/has_plus.hpp>
+#include <boost/type_traits/has_plus_assign.hpp>
+#include <boost/type_traits/has_minus.hpp>
+#include <boost/type_traits/has_minus_assign.hpp>
+
+namespace pdalboost {
+
+//  Helper functions for classes like bidirectional iterators not supporting
+//  operator+ and operator-
+//
+//  Usage:
+//    const std::list<T>::iterator p = get_some_iterator();
+//    const std::list<T>::iterator prev = pdalboost::prior(p);
+//    const std::list<T>::iterator next = pdalboost::next(prev, 2);
+
+//  Contributed by Dave Abrahams
+
+namespace next_prior_detail {
+
+template< typename T, typename Distance, bool HasPlus = has_plus< T, Distance >::value >
+struct next_impl2
+{
+    static T call(T x, Distance n)
+    {
+        std::advance(x, n);
+        return x;
+    }
+};
+
+template< typename T, typename Distance >
+struct next_impl2< T, Distance, true >
+{
+    static T call(T x, Distance n)
+    {
+        return x + n;
+    }
+};
+
+
+template< typename T, typename Distance, bool HasPlusAssign = has_plus_assign< T, Distance >::value >
+struct next_impl1 :
+    public next_impl2< T, Distance >
+{
+};
+
+template< typename T, typename Distance >
+struct next_impl1< T, Distance, true >
+{
+    static T call(T x, Distance n)
+    {
+        x += n;
+        return x;
+    }
+};
+
+
+template<
+    typename T,
+    typename Distance,
+    typename PromotedDistance = typename integral_promotion< Distance >::type,
+#if !defined(_MSC_VER) || _MSC_VER > 1310
+    bool IsUInt = is_unsigned< PromotedDistance >::value
+#else
+    // MSVC 7.1 has problems with applying is_unsigned to non-integral types
+    bool IsUInt = mpl::and_< is_integral< PromotedDistance >, is_unsigned< PromotedDistance > >::value
+#endif
+>
+struct prior_impl3
+{
+    static T call(T x, Distance n)
+    {
+        std::advance(x, -n);
+        return x;
+    }
+};
+
+template< typename T, typename Distance, typename PromotedDistance >
+struct prior_impl3< T, Distance, PromotedDistance, true >
+{
+    static T call(T x, Distance n)
+    {
+        typedef typename make_signed< PromotedDistance >::type signed_distance;
+        std::advance(x, -static_cast< signed_distance >(static_cast< PromotedDistance >(n)));
+        return x;
+    }
+};
+
+
+template< typename T, typename Distance, bool HasMinus = has_minus< T, Distance >::value >
+struct prior_impl2 :
+    public prior_impl3< T, Distance >
+{
+};
+
+template< typename T, typename Distance >
+struct prior_impl2< T, Distance, true >
+{
+    static T call(T x, Distance n)
+    {
+        return x - n;
+    }
+};
+
+
+template< typename T, typename Distance, bool HasMinusAssign = has_minus_assign< T, Distance >::value >
+struct prior_impl1 :
+    public prior_impl2< T, Distance >
+{
+};
+
+template< typename T, typename Distance >
+struct prior_impl1< T, Distance, true >
+{
+    static T call(T x, Distance n)
+    {
+        x -= n;
+        return x;
+    }
+};
+
+} // namespace next_prior_detail
+
+template <class T>
+inline T next(T x) { return ++x; }
+
+template <class T, class Distance>
+inline T next(T x, Distance n)
+{
+    return next_prior_detail::next_impl1< T, Distance >::call(x, n);
+}
+
+template <class T>
+inline T prior(T x) { return --x; }
+
+template <class T, class Distance>
+inline T prior(T x, Distance n)
+{
+    return next_prior_detail::prior_impl1< T, Distance >::call(x, n);
+}
+
+} // namespace pdalboost
+
+#endif  // BOOST_NEXT_PRIOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/non_type.hpp b/vendor/pdalboost/boost/non_type.hpp
new file mode 100644
index 0000000..4a4b595
--- /dev/null
+++ b/vendor/pdalboost/boost/non_type.hpp
@@ -0,0 +1,27 @@
+// -------------------------------------
+//
+//           (C) Copyright Gennaro Prota 2003.
+//
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+//
+// ------------------------------------------------------
+
+#ifndef BOOST_NON_TYPE_HPP_GP_20030417
+#define BOOST_NON_TYPE_HPP_GP_20030417
+
+
+namespace pdalboost {
+
+  // Just a simple "envelope" for non-type template parameters. Useful
+  // to work around some MSVC deficiencies.
+
+ template <typename T, T n>
+ struct non_type { };
+
+
+}
+
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/noncopyable.hpp b/vendor/pdalboost/boost/noncopyable.hpp
new file mode 100644
index 0000000..e998ee8
--- /dev/null
+++ b/vendor/pdalboost/boost/noncopyable.hpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#ifndef BOOST_NONCOPYABLE_HPP
+#define BOOST_NONCOPYABLE_HPP
+
+// The header file at this path is deprecated;
+// use boost/core/noncopyable.hpp instead.
+
+#include <boost/core/noncopyable.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/none.hpp b/vendor/pdalboost/boost/none.hpp
new file mode 100644
index 0000000..d8367bf
--- /dev/null
+++ b/vendor/pdalboost/boost/none.hpp
@@ -0,0 +1,59 @@
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+// Copyright (C) 2014 Andrzej Krzemienski.
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/optional for documentation.
+//
+// You are welcome to contact the author at:
+//  fernando_cacciola at hotmail.com
+//
+#ifndef BOOST_NONE_17SEP2003_HPP
+#define BOOST_NONE_17SEP2003_HPP
+
+#include "boost/none_t.hpp"
+
+// NOTE: Borland users have to include this header outside any precompiled headers
+// (bcc<=5.64 cannot include instance data in a precompiled header)
+//  -- * To be verified, now that there's no unnamed namespace
+
+namespace pdalboost {
+
+#ifdef BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE
+
+none_t const none = (static_cast<none_t>(0)) ;
+
+#elif defined BOOST_OPTIONAL_USE_SINGLETON_DEFINITION_OF_NONE
+
+namespace detail { namespace optional_detail {
+
+  // the trick here is to make pdalboost::none defined once as a global but in a header file
+  template <typename T>
+  struct none_instance
+  {
+    static const T instance;
+  };
+  
+  template <typename T>
+  const T none_instance<T>::instance = T(); // global, but because 'tis a template, no cpp file required
+
+} } // namespace detail::optional_detail
+
+
+namespace {
+  // TU-local
+  const none_t& none = detail::optional_detail::none_instance<none_t>::instance; 
+}
+
+#else
+
+const none_t none ((none_t::init_tag()));
+
+#endif // older definitions
+
+} // namespace pdalboost
+
+#endif // header guard
+
diff --git a/vendor/pdalboost/boost/none_t.hpp b/vendor/pdalboost/boost/none_t.hpp
new file mode 100644
index 0000000..2de2d85
--- /dev/null
+++ b/vendor/pdalboost/boost/none_t.hpp
@@ -0,0 +1,40 @@
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+// Copyright (C) 2014 Andrzej Krzemienski.
+//
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/optional for documentation.
+//
+// You are welcome to contact the author at:
+//  fernando_cacciola at hotmail.com
+//
+#ifndef BOOST_NONE_T_17SEP2003_HPP
+#define BOOST_NONE_T_17SEP2003_HPP
+
+namespace pdalboost {
+
+#ifdef BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE
+
+namespace detail { struct none_helper{}; }
+typedef int detail::none_helper::*none_t ;
+
+#elif defined BOOST_OPTIONAL_USE_SINGLETON_DEFINITION_OF_NONE
+
+class none_t {};
+
+#else
+
+struct none_t
+{
+  struct init_tag{};
+  explicit none_t(init_tag){} // to prevent default constructor
+};
+
+#endif // old implementation workarounds
+
+} // namespace pdalboost
+
+#endif // header guard
+
diff --git a/vendor/pdalboost/boost/numeric/conversion/bounds.hpp b/vendor/pdalboost/boost/numeric/conversion/bounds.hpp
new file mode 100644
index 0000000..d598d28
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/bounds.hpp
@@ -0,0 +1,24 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+// 
+#ifndef BOOST_NUMERIC_CONVERSION_BOUNDS_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_BOUNDS_12NOV2002_HPP
+
+#include "boost/numeric/conversion/detail/bounds.hpp"
+
+namespace pdalboost { namespace numeric 
+{
+
+template<class N>
+struct bounds : boundsdetail::get_impl<N>::type
+{} ;
+
+} } // namespace pdalboost::numeric
+
+#endif
diff --git a/vendor/pdalboost/boost/numeric/conversion/cast.hpp b/vendor/pdalboost/boost/numeric/conversion/cast.hpp
new file mode 100644
index 0000000..c5fe5ab
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/cast.hpp
@@ -0,0 +1,61 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+//
+//
+//  Revision History
+//
+//    19 Nov 2001 Syntatic changes as suggested by Darin Adler (Fernando Cacciola)
+//    08 Nov 2001 Fixes to accommodate MSVC (Fernando Cacciola)
+//    04 Nov 2001 Fixes to accommodate gcc2.92 (Fernando Cacciola)
+//    30 Oct 2001 Some fixes suggested by Daryle Walker (Fernando Cacciola)
+//    25 Oct 2001 Initial boostification (Fernando Cacciola)
+//    23 Jan 2004 Inital add to cvs (post review)s
+//    22 Jun 2011 Added support for specializing cast policies via numeric_cast_traits (Brandon Kohn).
+//
+#ifndef BOOST_NUMERIC_CONVERSION_CAST_25OCT2001_HPP
+#define BOOST_NUMERIC_CONVERSION_CAST_25OCT2001_HPP
+
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+
+#  include<boost/numeric/conversion/detail/old_numeric_cast.hpp>
+
+#else
+
+#include <boost/type.hpp>
+#include <boost/numeric/conversion/converter.hpp>
+#include <boost/numeric/conversion/numeric_cast_traits.hpp>
+
+namespace pdalboost
+{
+    template <typename Target, typename Source> 
+    inline Target numeric_cast( Source arg )
+    {
+        typedef numeric::conversion_traits<Target, Source>   conv_traits;
+        typedef numeric::numeric_cast_traits<Target, Source> cast_traits;
+        typedef pdalboost::numeric::converter
+            <
+                Target,
+                Source, 
+                conv_traits,
+                typename cast_traits::overflow_policy, 
+                typename cast_traits::rounding_policy, 
+                pdalboost::numeric::raw_converter< conv_traits >,
+                typename cast_traits::range_checking_policy
+            > converter;
+        return converter::convert(arg);
+    }
+    
+    using numeric::bad_numeric_cast;
+} // namespace pdalboost
+
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/numeric/conversion/conversion_traits.hpp b/vendor/pdalboost/boost/numeric/conversion/conversion_traits.hpp
new file mode 100644
index 0000000..b97aca0
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/conversion_traits.hpp
@@ -0,0 +1,39 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+// 
+#ifndef BOOST_NUMERIC_CONVERSION_CONVERSION_TRAITS_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_CONVERSION_TRAITS_FLC_12NOV2002_HPP
+
+#include "boost/numeric/conversion/detail/conversion_traits.hpp"
+#include "boost/detail/workaround.hpp"
+#include "boost/config.hpp"
+
+namespace pdalboost { namespace numeric
+{
+
+template<class T, class S>
+struct conversion_traits 
+    : convdetail::get_conversion_traits<T,S>::type 
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+    typedef typename convdetail::get_conversion_traits<T,S>::type base_;
+    typedef typename base_::target_type     target_type;
+    typedef typename base_::source_type     source_type;
+    typedef typename base_::result_type     result_type;
+    typedef typename base_::argument_type   argument_type;
+#endif
+} ;
+
+} } // namespace pdalboost::numeric
+
+#endif
+//
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/vendor/pdalboost/boost/numeric/conversion/converter.hpp b/vendor/pdalboost/boost/numeric/conversion/converter.hpp
new file mode 100644
index 0000000..112fa8d
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/converter.hpp
@@ -0,0 +1,68 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+// 
+#ifndef BOOST_NUMERIC_CONVERSION_CONVERTER_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_CONVERTER_FLC_12NOV2002_HPP
+
+#include "boost/numeric/conversion/conversion_traits.hpp"
+#include "boost/numeric/conversion/converter_policies.hpp"
+
+#include "boost/numeric/conversion/detail/converter.hpp"
+
+namespace pdalboost { namespace numeric 
+{
+
+template<class T,
+         class S,
+         class Traits           = conversion_traits<T,S>,
+         class OverflowHandler  = def_overflow_handler,
+         class Float2IntRounder = Trunc< BOOST_DEDUCED_TYPENAME Traits::source_type>  ,
+         class RawConverter     = raw_converter<Traits>,
+         class UserRangeChecker = UseInternalRangeChecker
+        >
+struct converter : convdetail::get_converter_impl<Traits,
+                                                  OverflowHandler,
+                                                  Float2IntRounder,
+                                                  RawConverter,
+                                                  UserRangeChecker
+                                                 >::type
+{
+  typedef Traits traits ;
+
+  typedef typename Traits::argument_type argument_type ;
+  typedef typename Traits::result_type   result_type   ;
+
+  result_type operator() ( argument_type s ) const { return this->convert(s) ; }
+} ;
+
+
+
+template<class S,
+         class OverflowHandler  = def_overflow_handler,
+         class Float2IntRounder = Trunc<S>  ,
+         class UserRangeChecker = UseInternalRangeChecker
+        >
+struct make_converter_from
+{
+  template<class T,
+           class Traits       = conversion_traits<T,S>,
+           class RawConverter = raw_converter<Traits>
+          > 
+  struct to
+  {
+    typedef converter<T,S,Traits,OverflowHandler,Float2IntRounder,RawConverter,UserRangeChecker> type ;
+  } ;
+
+} ;
+
+} } // namespace pdalboost::numeric
+
+#endif
+
+
diff --git a/vendor/pdalboost/boost/numeric/conversion/converter_policies.hpp b/vendor/pdalboost/boost/numeric/conversion/converter_policies.hpp
new file mode 100644
index 0000000..0aa3e97
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/converter_policies.hpp
@@ -0,0 +1,194 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_CONVERTER_POLICIES_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_CONVERTER_POLICIES_FLC_12NOV2002_HPP
+
+#include <typeinfo> // for std::bad_cast
+
+#include <boost/config/no_tr1/cmath.hpp> // for std::floor and std::ceil
+#include <boost/throw_exception.hpp>
+
+#include <functional>
+
+#include "boost/type_traits/is_arithmetic.hpp"
+
+#include "boost/mpl/if.hpp"
+#include "boost/mpl/integral_c.hpp"
+
+namespace pdalboost { namespace numeric
+{
+
+template<class S>
+struct Trunc
+{
+  typedef S source_type ;
+
+  typedef typename mpl::if_< is_arithmetic<S>,S,S const&>::type argument_type ;
+
+  static source_type nearbyint ( argument_type s )
+  {
+#if !defined(BOOST_NO_STDC_NAMESPACE)
+    using std::floor ;
+    using std::ceil  ;
+#endif
+
+    return s < static_cast<S>(0) ? ceil(s) : floor(s) ;
+  }
+
+  typedef mpl::integral_c< std::float_round_style, std::round_toward_zero> round_style ;
+} ;
+
+
+
+template<class S>
+struct Floor
+{
+  typedef S source_type ;
+
+  typedef typename mpl::if_< is_arithmetic<S>,S,S const&>::type argument_type ;
+
+  static source_type nearbyint ( argument_type s )
+  {
+#if !defined(BOOST_NO_STDC_NAMESPACE)
+    using std::floor ;
+#endif
+
+    return floor(s) ;
+  }
+
+  typedef mpl::integral_c< std::float_round_style, std::round_toward_neg_infinity> round_style ;
+} ;
+
+template<class S>
+struct Ceil
+{
+  typedef S source_type ;
+
+  typedef typename mpl::if_< is_arithmetic<S>,S,S const&>::type argument_type ;
+
+  static source_type nearbyint ( argument_type s )
+  {
+#if !defined(BOOST_NO_STDC_NAMESPACE)
+    using std::ceil ;
+#endif
+
+    return ceil(s) ;
+  }
+
+  typedef mpl::integral_c< std::float_round_style, std::round_toward_infinity> round_style ;
+} ;
+
+template<class S>
+struct RoundEven
+{
+  typedef S source_type ;
+
+  typedef typename mpl::if_< is_arithmetic<S>,S,S const&>::type argument_type ;
+
+  static source_type nearbyint ( argument_type s )
+  {
+    // Algorithm contributed by Guillaume Melquiond
+
+#if !defined(BOOST_NO_STDC_NAMESPACE)
+    using std::floor ;
+    using std::ceil  ;
+#endif
+
+    // only works inside the range not at the boundaries
+    S prev = floor(s);
+    S next = ceil(s);
+
+    S rt = (s - prev) - (next - s); // remainder type
+
+    S const zero(0.0);
+    S const two(2.0);
+
+    if ( rt < zero )
+      return prev;
+    else if ( rt > zero )
+      return next;
+    else
+    {
+      bool is_prev_even = two * floor(prev / two) == prev ;
+      return ( is_prev_even ? prev : next ) ;
+    }
+  }
+
+  typedef mpl::integral_c< std::float_round_style, std::round_to_nearest> round_style ;
+} ;
+
+
+enum range_check_result
+{
+  cInRange     = 0 ,
+  cNegOverflow = 1 ,
+  cPosOverflow = 2
+} ;
+
+class bad_numeric_cast : public std::bad_cast
+{
+  public:
+
+    virtual const char * what() const throw()
+      {  return "bad numeric conversion: overflow"; }
+};
+
+class negative_overflow : public bad_numeric_cast
+{
+  public:
+
+    virtual const char * what() const throw()
+      {  return "bad numeric conversion: negative overflow"; }
+};
+class positive_overflow : public bad_numeric_cast
+{
+  public:
+
+    virtual const char * what() const throw()
+      { return "bad numeric conversion: positive overflow"; }
+};
+
+struct def_overflow_handler
+{
+  void operator() ( range_check_result r ) // throw(negative_overflow,positive_overflow)
+  {
+#ifndef BOOST_NO_EXCEPTIONS
+    if ( r == cNegOverflow )
+      throw negative_overflow() ;
+    else if ( r == cPosOverflow )
+           throw positive_overflow() ;
+#else
+    if ( r == cNegOverflow )
+      ::pdalboost::throw_exception(negative_overflow()) ;
+    else if ( r == cPosOverflow )
+           ::pdalboost::throw_exception(positive_overflow()) ;
+#endif
+  }
+} ;
+
+struct silent_overflow_handler
+{
+  void operator() ( range_check_result ) {} // throw()
+} ;
+
+template<class Traits>
+struct raw_converter
+{
+  typedef typename Traits::result_type   result_type   ;
+  typedef typename Traits::argument_type argument_type ;
+
+  static result_type low_level_convert ( argument_type s ) { return static_cast<result_type>(s) ; }
+} ;
+
+struct UseInternalRangeChecker {} ;
+
+} } // namespace pdalboost::numeric
+
+#endif
diff --git a/vendor/pdalboost/boost/numeric/conversion/detail/bounds.hpp b/vendor/pdalboost/boost/numeric/conversion/detail/bounds.hpp
new file mode 100644
index 0000000..8554bd0
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/detail/bounds.hpp
@@ -0,0 +1,58 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+// 
+#ifndef BOOST_NUMERIC_CONVERSION_BOUNDS_DETAIL_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_BOUNDS_DETAIL_FLC_12NOV2002_HPP
+
+#include "boost/limits.hpp"
+#include "boost/config.hpp"
+#include "boost/mpl/if.hpp"
+
+namespace pdalboost { namespace numeric { namespace boundsdetail
+{
+  template<class N>
+  class Integral
+  {
+      typedef std::numeric_limits<N> limits ;
+
+    public :
+    
+      static N lowest  () { return limits::min BOOST_PREVENT_MACRO_SUBSTITUTION (); }
+      static N highest () { return limits::max BOOST_PREVENT_MACRO_SUBSTITUTION (); }
+      static N smallest() { return static_cast<N>(1); }
+  } ;
+
+  template<class N>
+  class Float
+  {
+      typedef std::numeric_limits<N> limits ;
+
+    public :
+    
+      static N lowest  () { return static_cast<N>(-limits::max BOOST_PREVENT_MACRO_SUBSTITUTION ()) ; }
+      static N highest () { return limits::max BOOST_PREVENT_MACRO_SUBSTITUTION (); }
+      static N smallest() { return limits::min BOOST_PREVENT_MACRO_SUBSTITUTION (); }
+  } ;
+
+  template<class N>
+  struct get_impl
+  {
+    typedef mpl::bool_< ::std::numeric_limits<N>::is_integer > is_int ;
+
+    typedef Integral<N> impl_int   ;
+    typedef Float   <N> impl_float ;
+
+    typedef typename mpl::if_<is_int,impl_int,impl_float>::type type ;
+  } ;
+
+} } } // namespace pdalboost::numeric::boundsdetail.
+
+#endif
+//
+///////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/vendor/pdalboost/boost/numeric/conversion/detail/conversion_traits.hpp b/vendor/pdalboost/boost/numeric/conversion/detail/conversion_traits.hpp
new file mode 100644
index 0000000..fde2c7d
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/detail/conversion_traits.hpp
@@ -0,0 +1,97 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+// 
+#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_CONVERSION_TRAITS_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_DETAIL_CONVERSION_TRAITS_FLC_12NOV2002_HPP
+
+#include "boost/type_traits/is_arithmetic.hpp"
+#include "boost/type_traits/is_same.hpp"
+#include "boost/type_traits/remove_cv.hpp"
+
+#include "boost/numeric/conversion/detail/meta.hpp"
+#include "boost/numeric/conversion/detail/int_float_mixture.hpp"
+#include "boost/numeric/conversion/detail/sign_mixture.hpp"
+#include "boost/numeric/conversion/detail/udt_builtin_mixture.hpp"
+#include "boost/numeric/conversion/detail/is_subranged.hpp"
+
+namespace pdalboost { namespace numeric { namespace convdetail
+{
+  //-------------------------------------------------------------------
+  // Implementation of the Conversion Traits for T != S
+  //
+  // This is a VISIBLE base class of the user-level conversion_traits<> class.
+  //-------------------------------------------------------------------
+  template<class T,class S>
+  struct non_trivial_traits_impl
+  {
+    typedef typename get_int_float_mixture   <T,S>::type int_float_mixture ;
+    typedef typename get_sign_mixture        <T,S>::type sign_mixture ;
+    typedef typename get_udt_builtin_mixture <T,S>::type udt_builtin_mixture ;
+
+    typedef typename get_is_subranged<T,S>::type subranged ;
+
+    typedef mpl::false_ trivial ;
+
+    typedef T target_type ;
+    typedef S source_type ;
+    typedef T result_type ;
+
+    typedef typename mpl::if_< is_arithmetic<S>, S, S const&>::type argument_type ;
+
+    typedef typename mpl::if_<subranged,S,T>::type supertype ;
+    typedef typename mpl::if_<subranged,T,S>::type subtype   ;
+  } ;
+
+  //-------------------------------------------------------------------
+  // Implementation of the Conversion Traits for T == S
+  //
+  // This is a VISIBLE base class of the user-level conversion_traits<> class.
+  //-------------------------------------------------------------------
+  template<class N>
+  struct trivial_traits_impl
+  {
+    typedef typename get_int_float_mixture  <N,N>::type int_float_mixture ;
+    typedef typename get_sign_mixture       <N,N>::type sign_mixture ;
+    typedef typename get_udt_builtin_mixture<N,N>::type udt_builtin_mixture ;
+
+    typedef mpl::false_ subranged ;
+    typedef mpl::true_  trivial ;
+
+    typedef N        target_type ;
+    typedef N        source_type ;
+    typedef N const& result_type ;
+    typedef N const& argument_type ;
+
+    typedef N supertype ;
+    typedef N subtype  ;
+
+  } ;
+
+  //-------------------------------------------------------------------
+  // Top level implementation selector.
+  //-------------------------------------------------------------------
+  template<class T, class S>
+  struct get_conversion_traits
+  {
+    typedef typename remove_cv<T>::type target_type ;
+    typedef typename remove_cv<S>::type source_type ;
+
+    typedef typename is_same<target_type,source_type>::type is_trivial ;
+
+    typedef trivial_traits_impl    <target_type>             trivial_imp ;
+    typedef non_trivial_traits_impl<target_type,source_type> non_trivial_imp ;
+
+    typedef typename mpl::if_<is_trivial,trivial_imp,non_trivial_imp>::type type ;
+  } ;
+
+} } } // namespace pdalboost::numeric::convdetail
+
+#endif
+
+
diff --git a/vendor/pdalboost/boost/numeric/conversion/detail/converter.hpp b/vendor/pdalboost/boost/numeric/conversion/detail/converter.hpp
new file mode 100644
index 0000000..a8f610a
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/detail/converter.hpp
@@ -0,0 +1,602 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+//
+#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_CONVERTER_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_DETAIL_CONVERTER_FLC_12NOV2002_HPP
+
+#include <functional>
+
+#include "boost/numeric/conversion/detail/meta.hpp"
+#include "boost/numeric/conversion/detail/conversion_traits.hpp"
+#include "boost/numeric/conversion/bounds.hpp"
+
+#include "boost/type_traits/is_same.hpp"
+
+#include "boost/mpl/integral_c.hpp"
+
+namespace pdalboost { namespace numeric { namespace convdetail
+{
+  // Integral Constants representing rounding modes
+  typedef mpl::integral_c<std::float_round_style, std::round_toward_zero>         round2zero_c ;
+  typedef mpl::integral_c<std::float_round_style, std::round_to_nearest>          round2nearest_c ;
+  typedef mpl::integral_c<std::float_round_style, std::round_toward_infinity>     round2inf_c ;
+  typedef mpl::integral_c<std::float_round_style, std::round_toward_neg_infinity> round2neg_inf_c ;
+
+  // Metafunction:
+  //
+  //   for_round_style<RoundStyle,RoundToZero,RoundToNearest,RoundToInf,RoundToNegInf>::type
+  //
+  // {RoundStyle} Integral Constant specifying a round style as declared above.
+  // {RoundToZero,RoundToNearest,RoundToInf,RoundToNegInf} arbitrary types.
+  //
+  // Selects one of the 4 types according to the value of RoundStyle.
+  //
+  template<class RoundStyle,class RoundToZero,class RoundToNearest,class RoundToInf,class RoundToNegInf>
+  struct for_round_style
+  {
+    typedef ct_switch4<RoundStyle
+                       , round2zero_c, round2nearest_c, round2inf_c // round2neg_inf_c
+                       , RoundToZero , RoundToNearest , RoundToInf , RoundToNegInf
+                      > selector ;
+
+    typedef typename selector::type type ;
+  } ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+//--------------------------------------------------------------------------
+//                             Range Checking Logic.
+//
+// The range checking logic is built up by combining 1 or 2 predicates.
+// Each predicate is encapsulated in a template class and exposes
+// the static member function 'apply'.
+//
+//--------------------------------------------------------------------------
+
+
+  // Because a particular logic can combine either 1 or two predicates, the following
+  // tags are used to allow the predicate applier to receive 2 preds, but optimize away
+  // one of them if it is 'non-applicable'
+  struct non_applicable { typedef mpl::false_ do_apply ; } ;
+  struct applicable     { typedef mpl::true_  do_apply ; } ;
+
+
+  //--------------------------------------------------------------------------
+  //
+  //                      Range Checking Logic implementations.
+  //
+  // The following classes, collectivelly named 'Predicates', are instantiated within
+  // the corresponding range checkers.
+  // Their static member function 'apply' is called to perform the actual range checking logic.
+  //--------------------------------------------------------------------------
+
+    // s < Lowest(T) ? cNegOverflow : cInRange
+    //
+    template<class Traits>
+    struct LT_LoT : applicable
+    {
+      typedef typename Traits::target_type T ;
+      typedef typename Traits::source_type S ;
+      typedef typename Traits::argument_type argument_type ;
+
+      static range_check_result apply ( argument_type s )
+      {
+        return s < static_cast<S>(bounds<T>::lowest()) ? cNegOverflow : cInRange ;
+      }
+    } ;
+
+    // s < 0 ? cNegOverflow : cInRange
+    //
+    template<class Traits>
+    struct LT_Zero : applicable
+    {
+      typedef typename Traits::source_type S ;
+      typedef typename Traits::argument_type argument_type ;
+
+      static range_check_result apply ( argument_type s )
+      {
+        return s < static_cast<S>(0) ? cNegOverflow : cInRange ;
+      }
+    } ;
+
+    // s <= Lowest(T)-1 ? cNegOverflow : cInRange
+    //
+    template<class Traits>
+    struct LE_PrevLoT : applicable
+    {
+      typedef typename Traits::target_type T ;
+      typedef typename Traits::source_type S ;
+      typedef typename Traits::argument_type argument_type ;
+
+      static range_check_result apply ( argument_type s )
+      {
+        return s <= static_cast<S>(bounds<T>::lowest()) - static_cast<S>(1.0)
+                 ? cNegOverflow : cInRange ;
+      }
+    } ;
+
+    // s < Lowest(T)-0.5 ? cNegOverflow : cInRange
+    //
+    template<class Traits>
+    struct LT_HalfPrevLoT : applicable
+    {
+      typedef typename Traits::target_type T ;
+      typedef typename Traits::source_type S ;
+      typedef typename Traits::argument_type argument_type ;
+
+      static range_check_result apply ( argument_type s )
+      {
+        return s < static_cast<S>(bounds<T>::lowest()) - static_cast<S>(0.5)
+                 ? cNegOverflow : cInRange ;
+      }
+    } ;
+
+    // s > Highest(T) ? cPosOverflow : cInRange
+    //
+    template<class Traits>
+    struct GT_HiT : applicable
+    {
+      typedef typename Traits::target_type T ;
+      typedef typename Traits::source_type S ;
+      typedef typename Traits::argument_type argument_type ;
+
+      static range_check_result apply ( argument_type s )
+      {
+        return s > static_cast<S>(bounds<T>::highest())
+                 ? cPosOverflow : cInRange ;
+      }
+    } ;
+
+    // s >= Lowest(T) + 1 ? cPosOverflow : cInRange
+    //
+    template<class Traits>
+    struct GE_SuccHiT : applicable
+    {
+      typedef typename Traits::target_type T ;
+      typedef typename Traits::source_type S ;
+      typedef typename Traits::argument_type argument_type ;
+
+      static range_check_result apply ( argument_type s )
+      {
+        return s >= static_cast<S>(bounds<T>::highest()) + static_cast<S>(1.0)
+                 ? cPosOverflow : cInRange ;
+      }
+    } ;
+
+    // s >= Lowest(T) + 0.5 ? cPosgOverflow : cInRange
+    //
+    template<class Traits>
+    struct GT_HalfSuccHiT : applicable
+    {
+      typedef typename Traits::target_type T ;
+      typedef typename Traits::source_type S ;
+      typedef typename Traits::argument_type argument_type ;
+
+      static range_check_result apply ( argument_type s )
+      {
+        return s >= static_cast<S>(bounds<T>::highest()) + static_cast<S>(0.5)
+                 ? cPosOverflow : cInRange ;
+      }
+    } ;
+
+
+  //--------------------------------------------------------------------------
+  //
+  // Predicate Combiner.
+  //
+  // This helper classes are used to possibly combine the range checking logic
+  // individually performed by the predicates
+  //
+  //--------------------------------------------------------------------------
+
+
+    // Applies both predicates: first 'PredA', and if it equals 'cInRange', 'PredB'
+    template<class PredA, class PredB>
+    struct applyBoth
+    {
+      typedef typename PredA::argument_type argument_type ;
+
+      static range_check_result apply ( argument_type s )
+      {
+        range_check_result r = PredA::apply(s) ;
+        if ( r == cInRange )
+          r = PredB::apply(s);
+        return r ;
+      }
+    } ;
+
+    template<class PredA, class PredB>
+    struct combine
+    {
+      typedef applyBoth<PredA,PredB> Both ;
+      typedef void                   NNone ; // 'None' is defined as a macro in (/usr/X11R6/include/X11/X.h)
+
+      typedef typename PredA::do_apply do_applyA ;
+      typedef typename PredB::do_apply do_applyB ;
+
+      typedef typename for_both<do_applyA, do_applyB, Both, PredA, PredB, NNone>::type type ;
+    } ;
+
+
+
+
+
+
+
+
+
+
+
+
+//--------------------------------------------------------------------------
+//                             Range Checker classes.
+//
+// The following classes are VISIBLE base classes of the user-level converter<> class.
+// They supply the optimized 'out_of_range()' and 'validate_range()' static member functions
+// visible in the user interface.
+//
+//--------------------------------------------------------------------------
+
+  // Dummy range checker.
+  template<class Traits>
+  struct dummy_range_checker
+  {
+    typedef typename Traits::argument_type argument_type ;
+
+    static range_check_result out_of_range ( argument_type ) { return cInRange ; }
+    static void validate_range ( argument_type ) {}
+  } ;
+
+  // Generic range checker.
+  //
+  // All the range checking logic for all possible combinations of source and target
+  // can be arranged in terms of one or two predicates, which test overflow on both neg/pos 'sides'
+  // of the ranges.
+  //
+  // These predicates are given here as IsNegOverflow and IsPosOverflow.
+  //
+  template<class Traits, class IsNegOverflow, class IsPosOverflow, class OverflowHandler>
+  struct generic_range_checker
+  {
+    typedef OverflowHandler overflow_handler ;
+
+    typedef typename Traits::argument_type argument_type ;
+
+    static range_check_result out_of_range ( argument_type s )
+    {
+      typedef typename combine<IsNegOverflow,IsPosOverflow>::type Predicate ;
+
+      return Predicate::apply(s);
+    }
+
+    static void validate_range ( argument_type s )
+      { OverflowHandler()( out_of_range(s) ) ; }
+  } ;
+
+
+
+//--------------------------------------------------------------------------
+//
+// Selectors for the optimized Range Checker class.
+//
+//--------------------------------------------------------------------------
+
+  template<class Traits,class OverflowHandler>
+  struct GetRC_Sig2Sig_or_Unsig2Unsig
+  {
+    typedef dummy_range_checker<Traits> Dummy ;
+
+    typedef LT_LoT<Traits> Pred1 ;
+    typedef GT_HiT<Traits> Pred2 ;
+
+    typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> Normal ;
+
+    typedef typename Traits::subranged subranged ;
+
+    typedef typename mpl::if_<subranged,Normal,Dummy>::type type ;
+  } ;
+
+  template<class Traits, class OverflowHandler>
+  struct GetRC_Sig2Unsig
+  {
+    typedef LT_Zero<Traits> Pred1 ;
+    typedef GT_HiT <Traits> Pred2 ;
+
+    typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> ChoiceA ;
+
+    typedef generic_range_checker<Traits,Pred1,non_applicable,OverflowHandler> ChoiceB ;
+
+    typedef typename Traits::target_type T ;
+    typedef typename Traits::source_type S ;
+
+    typedef typename subranged_Unsig2Sig<S,T>::type oposite_subranged ;
+
+    typedef typename mpl::not_<oposite_subranged>::type positively_subranged ;
+
+    typedef typename mpl::if_<positively_subranged,ChoiceA,ChoiceB>::type type ;
+  } ;
+
+  template<class Traits, class OverflowHandler>
+  struct GetRC_Unsig2Sig
+  {
+    typedef GT_HiT<Traits> Pred1 ;
+
+    typedef generic_range_checker<Traits,non_applicable,Pred1,OverflowHandler> type ;
+  } ;
+
+  template<class Traits,class OverflowHandler>
+  struct GetRC_Int2Int
+  {
+    typedef GetRC_Sig2Sig_or_Unsig2Unsig<Traits,OverflowHandler> Sig2SigQ     ;
+    typedef GetRC_Sig2Unsig             <Traits,OverflowHandler> Sig2UnsigQ   ;
+    typedef GetRC_Unsig2Sig             <Traits,OverflowHandler> Unsig2SigQ   ;
+    typedef Sig2SigQ                                             Unsig2UnsigQ ;
+
+    typedef typename Traits::sign_mixture sign_mixture ;
+
+    typedef typename
+      for_sign_mixture<sign_mixture,Sig2SigQ,Sig2UnsigQ,Unsig2SigQ,Unsig2UnsigQ>::type
+        selector ;
+
+    typedef typename selector::type type ;
+  } ;
+
+  template<class Traits>
+  struct GetRC_Int2Float
+  {
+    typedef dummy_range_checker<Traits> type ;
+  } ;
+
+  template<class Traits, class OverflowHandler, class Float2IntRounder>
+  struct GetRC_Float2Int
+  {
+    typedef LE_PrevLoT    <Traits> Pred1 ;
+    typedef GE_SuccHiT    <Traits> Pred2 ;
+    typedef LT_HalfPrevLoT<Traits> Pred3 ;
+    typedef GT_HalfSuccHiT<Traits> Pred4 ;
+    typedef GT_HiT        <Traits> Pred5 ;
+    typedef LT_LoT        <Traits> Pred6 ;
+
+    typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> ToZero    ;
+    typedef generic_range_checker<Traits,Pred3,Pred4,OverflowHandler> ToNearest ;
+    typedef generic_range_checker<Traits,Pred1,Pred5,OverflowHandler> ToInf     ;
+    typedef generic_range_checker<Traits,Pred6,Pred2,OverflowHandler> ToNegInf  ;
+
+    typedef typename Float2IntRounder::round_style round_style ;
+
+    typedef typename for_round_style<round_style,ToZero,ToNearest,ToInf,ToNegInf>::type type ;
+  } ;
+
+  template<class Traits, class OverflowHandler>
+  struct GetRC_Float2Float
+  {
+    typedef dummy_range_checker<Traits> Dummy ;
+
+    typedef LT_LoT<Traits> Pred1 ;
+    typedef GT_HiT<Traits> Pred2 ;
+
+    typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> Normal ;
+
+    typedef typename Traits::subranged subranged ;
+
+    typedef typename mpl::if_<subranged,Normal,Dummy>::type type ;
+  } ;
+
+  template<class Traits, class OverflowHandler, class Float2IntRounder>
+  struct GetRC_BuiltIn2BuiltIn
+  {
+    typedef GetRC_Int2Int<Traits,OverflowHandler>                    Int2IntQ ;
+    typedef GetRC_Int2Float<Traits>                                  Int2FloatQ ;
+    typedef GetRC_Float2Int<Traits,OverflowHandler,Float2IntRounder> Float2IntQ ;
+    typedef GetRC_Float2Float<Traits,OverflowHandler>                Float2FloatQ ;
+
+    typedef typename Traits::int_float_mixture int_float_mixture ;
+
+    typedef typename for_int_float_mixture<int_float_mixture, Int2IntQ, Int2FloatQ, Float2IntQ, Float2FloatQ>::type selector ;
+
+    typedef typename selector::type type ;
+  } ;
+
+  template<class Traits, class OverflowHandler, class Float2IntRounder>
+  struct GetRC
+  {
+    typedef GetRC_BuiltIn2BuiltIn<Traits,OverflowHandler,Float2IntRounder> BuiltIn2BuiltInQ ;
+
+    typedef dummy_range_checker<Traits> Dummy ;
+
+    typedef mpl::identity<Dummy> DummyQ ;
+
+    typedef typename Traits::udt_builtin_mixture udt_builtin_mixture ;
+
+    typedef typename for_udt_builtin_mixture<udt_builtin_mixture,BuiltIn2BuiltInQ,DummyQ,DummyQ,DummyQ>::type selector ;
+
+    typedef typename selector::type type ;
+  } ;
+
+
+
+
+//--------------------------------------------------------------------------
+//                             Converter classes.
+//
+// The following classes are VISIBLE base classes of the user-level converter<> class.
+// They supply the optimized 'nearbyint()' and 'convert()' static member functions
+// visible in the user interface.
+//
+//--------------------------------------------------------------------------
+
+  //
+  // Trivial Converter : used when (cv-unqualified) T == (cv-unqualified)  S
+  //
+  template<class Traits>
+  struct trivial_converter_impl : public std::unary_function<  BOOST_DEDUCED_TYPENAME Traits::argument_type
+                                                              ,BOOST_DEDUCED_TYPENAME Traits::result_type
+                                                            >
+                                 ,public dummy_range_checker<Traits>
+  {
+    typedef Traits traits ;
+
+    typedef typename Traits::source_type   source_type   ;
+    typedef typename Traits::argument_type argument_type ;
+    typedef typename Traits::result_type   result_type   ;
+
+    static result_type low_level_convert ( argument_type s ) { return s ; }
+    static source_type nearbyint         ( argument_type s ) { return s ; }
+    static result_type convert           ( argument_type s ) { return s ; }
+  } ;
+
+
+  //
+  // Rounding Converter : used for float to integral conversions.
+  //
+  template<class Traits,class RangeChecker,class RawConverter,class Float2IntRounder>
+  struct rounding_converter : public std::unary_function<  BOOST_DEDUCED_TYPENAME Traits::argument_type
+                                                          ,BOOST_DEDUCED_TYPENAME Traits::result_type
+                                                        >
+                             ,public RangeChecker
+                             ,public Float2IntRounder
+                             ,public RawConverter
+  {
+    typedef RangeChecker     RangeCheckerBase ;
+    typedef Float2IntRounder Float2IntRounderBase ;
+    typedef RawConverter     RawConverterBase ;
+
+    typedef Traits traits ;
+
+    typedef typename Traits::source_type   source_type   ;
+    typedef typename Traits::argument_type argument_type ;
+    typedef typename Traits::result_type   result_type   ;
+
+    static result_type convert ( argument_type s )
+    {
+      RangeCheckerBase::validate_range(s);
+      source_type s1 = Float2IntRounderBase::nearbyint(s);
+      return RawConverterBase::low_level_convert(s1);
+    }
+  } ;
+
+
+  //
+  // Non-Rounding Converter : used for all other conversions.
+  //
+  template<class Traits,class RangeChecker,class RawConverter>
+  struct non_rounding_converter : public std::unary_function< BOOST_DEDUCED_TYPENAME Traits::argument_type
+                                                             ,BOOST_DEDUCED_TYPENAME Traits::result_type
+                                                           >
+                                 ,public RangeChecker
+                                 ,public RawConverter
+  {
+    typedef RangeChecker RangeCheckerBase ;
+    typedef RawConverter RawConverterBase ;
+
+    typedef Traits traits ;
+
+    typedef typename Traits::source_type   source_type   ;
+    typedef typename Traits::argument_type argument_type ;
+    typedef typename Traits::result_type   result_type   ;
+
+    static source_type nearbyint ( argument_type s ) { return s ; }
+
+    static result_type convert ( argument_type s )
+    {
+      RangeCheckerBase::validate_range(s);
+      return RawConverterBase::low_level_convert(s);
+    }
+  } ;
+
+
+
+
+//--------------------------------------------------------------------------
+//
+// Selectors for the optimized Converter class.
+//
+//--------------------------------------------------------------------------
+
+  template<class Traits,class OverflowHandler,class Float2IntRounder,class RawConverter, class UserRangeChecker>
+  struct get_non_trivial_converter
+  {
+    typedef GetRC<Traits,OverflowHandler,Float2IntRounder> InternalRangeCheckerQ ;
+
+    typedef is_same<UserRangeChecker,UseInternalRangeChecker> use_internal_RC ;
+
+    typedef mpl::identity<UserRangeChecker> UserRangeCheckerQ ;
+
+    typedef typename
+      mpl::eval_if<use_internal_RC,InternalRangeCheckerQ,UserRangeCheckerQ>::type
+        RangeChecker ;
+
+    typedef non_rounding_converter<Traits,RangeChecker,RawConverter>              NonRounding ;
+    typedef rounding_converter<Traits,RangeChecker,RawConverter,Float2IntRounder> Rounding ;
+
+    typedef mpl::identity<NonRounding> NonRoundingQ ;
+    typedef mpl::identity<Rounding>    RoundingQ    ;
+
+    typedef typename Traits::int_float_mixture int_float_mixture ;
+
+    typedef typename
+      for_int_float_mixture<int_float_mixture, NonRoundingQ, NonRoundingQ, RoundingQ, NonRoundingQ>::type
+        selector ;
+
+    typedef typename selector::type type ;
+  } ;
+
+  template< class Traits
+           ,class OverflowHandler
+           ,class Float2IntRounder
+           ,class RawConverter
+           ,class UserRangeChecker
+          >
+  struct get_converter_impl
+  {
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT( 0x0561 ) )
+    // bcc55 prefers sometimes template parameters to be explicit local types.
+    // (notice that is is illegal to reuse the names like this)
+    typedef Traits           Traits ;
+    typedef OverflowHandler  OverflowHandler ;
+    typedef Float2IntRounder Float2IntRounder ;
+    typedef RawConverter     RawConverter ;
+    typedef UserRangeChecker UserRangeChecker ;
+#endif
+
+    typedef trivial_converter_impl<Traits> Trivial ;
+    typedef mpl::identity        <Trivial> TrivialQ ;
+
+    typedef get_non_trivial_converter< Traits
+                                      ,OverflowHandler
+                                      ,Float2IntRounder
+                                      ,RawConverter
+                                      ,UserRangeChecker
+                                     > NonTrivialQ ;
+
+    typedef typename Traits::trivial trivial ;
+
+    typedef typename mpl::eval_if<trivial,TrivialQ,NonTrivialQ>::type type ;
+  } ;
+
+} } } // namespace pdalboost::numeric::convdetail
+
+#endif
+
+
diff --git a/vendor/pdalboost/boost/numeric/conversion/detail/int_float_mixture.hpp b/vendor/pdalboost/boost/numeric/conversion/detail/int_float_mixture.hpp
new file mode 100644
index 0000000..75c61e6
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/detail/int_float_mixture.hpp
@@ -0,0 +1,72 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+// 
+#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_INT_FLOAT_MIXTURE_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_DETAIL_INT_FLOAT_MIXTURE_FLC_12NOV2002_HPP
+
+#include "boost/config.hpp"
+#include "boost/limits.hpp"
+
+#include "boost/numeric/conversion/int_float_mixture_enum.hpp"
+#include "boost/numeric/conversion/detail/meta.hpp"
+
+#include "boost/mpl/integral_c.hpp"
+
+namespace pdalboost { namespace numeric { namespace convdetail
+{
+  // Integral Constants for 'IntFloatMixture'
+  typedef mpl::integral_c<int_float_mixture_enum, integral_to_integral> int2int_c ;
+  typedef mpl::integral_c<int_float_mixture_enum, integral_to_float>    int2float_c ;
+  typedef mpl::integral_c<int_float_mixture_enum, float_to_integral>    float2int_c ;
+  typedef mpl::integral_c<int_float_mixture_enum, float_to_float>       float2float_c ;
+
+  // Metafunction:
+  //
+  //   get_int_float_mixture<T,S>::type
+  //
+  // Selects the appropriate Int-Float Mixture Integral Constant for the combination T,S.
+  //
+  template<class T,class S>
+  struct get_int_float_mixture
+  {
+    typedef mpl::bool_< ::std::numeric_limits<S>::is_integer > S_int ;
+    typedef mpl::bool_< ::std::numeric_limits<T>::is_integer > T_int ;
+
+    typedef typename
+      for_both<S_int, T_int, int2int_c, int2float_c, float2int_c, float2float_c>::type
+        type ;
+  } ;
+
+  // Metafunction:
+  //
+  //   for_int_float_mixture<Mixture,int_int,int_float,float_int,float_float>::type
+  //
+  // {Mixture} is one of the Integral Constants for Mixture, declared above.
+  // {int_int,int_float,float_int,float_float} are aribtrary types. (not metafunctions)
+  //
+  // According to the value of 'IntFloatMixture', selects the corresponding type.
+  //
+  template<class IntFloatMixture, class Int2Int, class Int2Float, class Float2Int, class Float2Float>
+  struct for_int_float_mixture
+  {
+    typedef typename
+      ct_switch4<IntFloatMixture
+                 ,int2int_c, int2float_c, float2int_c  // default
+                 ,Int2Int  , Int2Float  , Float2Int  , Float2Float
+                >::type
+        type ;
+  } ;
+
+} } } // namespace pdalboost::numeric::convdetail
+
+#endif
+//
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/vendor/pdalboost/boost/numeric/conversion/detail/is_subranged.hpp b/vendor/pdalboost/boost/numeric/conversion/detail/is_subranged.hpp
new file mode 100644
index 0000000..6e92990
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/detail/is_subranged.hpp
@@ -0,0 +1,234 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+// 
+#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_IS_SUBRANGED_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_DETAIL_IS_SUBRANGED_FLC_12NOV2002_HPP
+
+#include "boost/config.hpp"
+#include "boost/limits.hpp"
+
+#include "boost/mpl/int.hpp"
+#include "boost/mpl/multiplies.hpp"
+#include "boost/mpl/less.hpp"
+#include "boost/mpl/equal_to.hpp"
+
+#include "boost/type_traits/is_same.hpp"
+
+#include "boost/numeric/conversion/detail/meta.hpp"
+#include "boost/numeric/conversion/detail/int_float_mixture.hpp"
+#include "boost/numeric/conversion/detail/sign_mixture.hpp"
+#include "boost/numeric/conversion/detail/udt_builtin_mixture.hpp"
+
+namespace pdalboost { namespace numeric { namespace convdetail
+{
+  //---------------------------------------------------------------
+  // Implementations of the compile time predicate "T is subranged"
+  //---------------------------------------------------------------
+
+    // for integral to integral conversions
+    template<class T,class S>
+    struct subranged_Sig2Unsig
+    {
+      // Signed to unsigned conversions are 'subranged' because of possible loose
+      // of negative values.
+      typedef mpl::true_ type ;
+    } ;
+
+    // for unsigned integral to signed integral conversions
+    template<class T,class S>
+    struct subranged_Unsig2Sig
+    {
+       // IMPORTANT NOTE:
+       //
+       // This code assumes that signed/unsigned integral values are represented
+       // such that:
+       //
+       //  numeric_limits<signed T>::digits + 1 == numeric_limits<unsigned T>::digits
+       //
+       // The '+1' is required since numeric_limits<>::digits gives 1 bit less for signed integral types.
+       //
+       // This fact is used by the following logic:
+       //
+       //  if ( (numeric_limits<T>::digits+1) < (2*numeric_limits<S>::digits) )
+       //    then the conversion is subranged.
+       //
+
+       typedef mpl::int_< ::std::numeric_limits<S>::digits > S_digits ;
+       typedef mpl::int_< ::std::numeric_limits<T>::digits > T_digits ;
+
+       // T is signed, so take digits+1
+       typedef typename T_digits::next u_T_digits ;
+
+       typedef mpl::int_<2> Two ;
+
+       typedef typename mpl::multiplies<S_digits,Two>::type S_digits_times_2 ;
+
+       typedef typename mpl::less<u_T_digits,S_digits_times_2>::type type ;
+    } ;
+
+    // for integral to integral conversions of the same sign.
+    template<class T,class S>
+    struct subranged_SameSign
+    {
+       // An integral conversion of the same sign is subranged if digits(T) < digits(S).
+
+       typedef mpl::int_< ::std::numeric_limits<S>::digits > S_digits ;
+       typedef mpl::int_< ::std::numeric_limits<T>::digits > T_digits ;
+
+       typedef typename mpl::less<T_digits,S_digits>::type type ;
+    } ;
+
+    // for integral to float conversions
+    template<class T,class S>
+    struct subranged_Int2Float
+    {
+      typedef mpl::false_ type ;
+    } ;
+
+    // for float to integral conversions
+    template<class T,class S>
+    struct subranged_Float2Int
+    {
+      typedef mpl::true_ type ;
+    } ;
+
+    // for float to float conversions
+    template<class T,class S>
+    struct subranged_Float2Float
+    {
+      // If both T and S are floats,
+      // compare exponent bits and if they match, mantisa bits.
+
+      typedef mpl::int_< ::std::numeric_limits<S>::digits > S_mantisa ;
+      typedef mpl::int_< ::std::numeric_limits<T>::digits > T_mantisa ;
+
+      typedef mpl::int_< ::std::numeric_limits<S>::max_exponent > S_exponent ;
+      typedef mpl::int_< ::std::numeric_limits<T>::max_exponent > T_exponent ;
+
+      typedef typename mpl::less<T_exponent,S_exponent>::type T_smaller_exponent ;
+
+      typedef typename mpl::equal_to<T_exponent,S_exponent>::type equal_exponents ;
+
+      typedef mpl::less<T_mantisa,S_mantisa> T_smaller_mantisa ;
+
+      typedef mpl::eval_if<equal_exponents,T_smaller_mantisa,mpl::false_> not_bigger_exponent_case ;
+
+      typedef typename
+        mpl::eval_if<T_smaller_exponent,mpl::true_,not_bigger_exponent_case>::type
+          type ;
+    } ;
+
+    // for Udt to built-in conversions
+    template<class T,class S>
+    struct subranged_Udt2BuiltIn
+    {
+      typedef mpl::true_ type ;
+    } ;
+
+    // for built-in to Udt conversions
+    template<class T,class S>
+    struct subranged_BuiltIn2Udt
+    {
+      typedef mpl::false_ type ;
+    } ;
+
+    // for Udt to Udt conversions
+    template<class T,class S>
+    struct subranged_Udt2Udt
+    {
+      typedef mpl::false_ type ;
+    } ;
+
+  //-------------------------------------------------------------------
+  // Selectors for the implementations of the subranged predicate
+  //-------------------------------------------------------------------
+
+    template<class T,class S>
+    struct get_subranged_Int2Int
+    {
+      typedef subranged_SameSign<T,S>  Sig2Sig     ;
+      typedef subranged_Sig2Unsig<T,S> Sig2Unsig   ;
+      typedef subranged_Unsig2Sig<T,S> Unsig2Sig   ;
+      typedef Sig2Sig                  Unsig2Unsig ;
+
+      typedef typename get_sign_mixture<T,S>::type sign_mixture ;
+
+      typedef typename
+        for_sign_mixture<sign_mixture, Sig2Sig, Sig2Unsig, Unsig2Sig, Unsig2Unsig>::type
+           type ;
+    } ;
+
+    template<class T,class S>
+    struct get_subranged_BuiltIn2BuiltIn
+    {
+      typedef get_subranged_Int2Int<T,S> Int2IntQ ;
+
+      typedef subranged_Int2Float  <T,S> Int2Float   ;
+      typedef subranged_Float2Int  <T,S> Float2Int   ;
+      typedef subranged_Float2Float<T,S> Float2Float ;
+
+      typedef mpl::identity<Int2Float  > Int2FloatQ   ;
+      typedef mpl::identity<Float2Int  > Float2IntQ   ;
+      typedef mpl::identity<Float2Float> Float2FloatQ ;
+
+      typedef typename get_int_float_mixture<T,S>::type int_float_mixture ;
+
+      typedef for_int_float_mixture<int_float_mixture, Int2IntQ, Int2FloatQ, Float2IntQ, Float2FloatQ> for_ ;
+
+      typedef typename for_::type selected ;
+
+      typedef typename selected::type type ;
+    } ;
+
+    template<class T,class S>
+    struct get_subranged
+    {
+      typedef get_subranged_BuiltIn2BuiltIn<T,S> BuiltIn2BuiltInQ ;
+
+      typedef subranged_BuiltIn2Udt<T,S> BuiltIn2Udt ;
+      typedef subranged_Udt2BuiltIn<T,S> Udt2BuiltIn ;
+      typedef subranged_Udt2Udt<T,S>     Udt2Udt ;
+
+      typedef mpl::identity<BuiltIn2Udt> BuiltIn2UdtQ ;
+      typedef mpl::identity<Udt2BuiltIn> Udt2BuiltInQ ;
+      typedef mpl::identity<Udt2Udt    > Udt2UdtQ     ;
+
+      typedef typename get_udt_builtin_mixture<T,S>::type udt_builtin_mixture ;
+      
+      typedef typename
+        for_udt_builtin_mixture<udt_builtin_mixture, BuiltIn2BuiltInQ, BuiltIn2UdtQ, Udt2BuiltInQ, Udt2UdtQ>::type
+          selected ;
+
+      typedef typename selected::type selected2 ;
+ 
+      typedef typename selected2::type type ;
+    } ;
+
+
+  //-------------------------------------------------------------------
+  // Top level implementation selector.
+  //-------------------------------------------------------------------
+  template<class T, class S>
+  struct get_is_subranged
+  {
+    typedef get_subranged<T,S>         non_trivial_case ;
+    typedef mpl::identity<mpl::false_> trivial_case ;
+
+    typedef is_same<T,S> is_trivial ;
+   
+    typedef typename mpl::if_<is_trivial,trivial_case,non_trivial_case>::type selected ;
+    
+    typedef typename selected::type type ;
+  } ;
+
+} } } // namespace pdalboost::numeric::convdetail
+
+#endif
+
+
diff --git a/vendor/pdalboost/boost/numeric/conversion/detail/meta.hpp b/vendor/pdalboost/boost/numeric/conversion/detail/meta.hpp
new file mode 100644
index 0000000..45eb3e5
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/detail/meta.hpp
@@ -0,0 +1,120 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+// 
+#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_META_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_DETAIL_META_FLC_12NOV2002_HPP
+
+#include "boost/type_traits/remove_cv.hpp"
+
+#include "boost/mpl/if.hpp"
+#include "boost/mpl/eval_if.hpp"
+#include "boost/mpl/equal_to.hpp"
+#include "boost/mpl/not.hpp"
+#include "boost/mpl/and.hpp"
+#include "boost/mpl/bool.hpp"
+#include "boost/mpl/identity.hpp"
+
+namespace pdalboost { namespace numeric { namespace convdetail
+{
+   template< class T1, class T2>
+   struct equal_to
+   {
+   #if !defined(__BORLANDC__)
+   
+       enum { x = ( BOOST_MPL_AUX_VALUE_WKND(T1)::value == BOOST_MPL_AUX_VALUE_WKND(T2)::value ) };
+           
+       BOOST_STATIC_CONSTANT(bool, value = x);
+           
+       typedef mpl::bool_<value> type;
+       
+   #else
+   
+       BOOST_STATIC_CONSTANT(bool, value = (
+             BOOST_MPL_AUX_VALUE_WKND(T1)::value 
+               == BOOST_MPL_AUX_VALUE_WKND(T2)::value
+           ));
+           
+       typedef mpl::bool_<(
+             BOOST_MPL_AUX_VALUE_WKND(T1)::value 
+               == BOOST_MPL_AUX_VALUE_WKND(T2)::value
+           )> type;
+   #endif
+   };
+    
+// Metafunction:
+  //
+  //   ct_switch4<Value,Case0Val,Case1Val,Case2Val,Case0Type,Case1Type,Case2Type,DefaultType>::type
+  //
+  // {Value,Case(X)Val} are Integral Constants (such as: mpl::int_<>)
+  // {Case(X)Type,DefaultType} are arbitrary types. (not metafunctions)
+  //
+  // Returns Case(X)Type if Val==Case(X)Val; DefaultType otherwise.
+  //
+  template<class Value,
+           class Case0Val,
+           class Case1Val,
+           class Case2Val,
+           class Case0Type,
+           class Case1Type,
+           class Case2Type,
+           class DefaultType
+          >
+  struct ct_switch4
+  {
+    typedef mpl::identity<Case0Type> Case0TypeQ ;
+    typedef mpl::identity<Case1Type> Case1TypeQ ;
+
+    typedef equal_to<Value,Case0Val> is_case0 ;
+    typedef equal_to<Value,Case1Val> is_case1 ;
+    typedef equal_to<Value,Case2Val> is_case2 ;
+
+    typedef mpl::if_<is_case2,Case2Type,DefaultType> choose_2_3Q ;
+    typedef mpl::eval_if<is_case1,Case1TypeQ,choose_2_3Q> choose_1_2_3Q ;
+
+    typedef typename
+      mpl::eval_if<is_case0,Case0TypeQ,choose_1_2_3Q>::type
+        type ;
+  } ;
+
+
+
+
+  // Metafunction:
+  //
+  //   for_both<expr0,expr1,TT,TF,FT,FF>::type
+  //
+  // {exp0,expr1} are Boolean Integral Constants
+  // {TT,TF,FT,FF} are aribtrary types. (not metafunctions)
+  //
+  // According to the combined boolean value of 'expr0 && expr1', selects the corresponding type.
+  //
+  template<class expr0, class expr1, class TT, class TF, class FT, class FF>
+  struct for_both
+  {
+    typedef mpl::identity<TF> TF_Q ;
+    typedef mpl::identity<TT> TT_Q ;
+
+    typedef typename mpl::not_<expr0>::type not_expr0 ;
+    typedef typename mpl::not_<expr1>::type not_expr1 ;
+
+    typedef typename mpl::and_<expr0,expr1>::type     caseTT ;
+    typedef typename mpl::and_<expr0,not_expr1>::type caseTF ;
+    typedef typename mpl::and_<not_expr0,expr1>::type caseFT ;
+
+    typedef mpl::if_<caseFT,FT,FF>                    choose_FT_FF_Q ;
+    typedef mpl::eval_if<caseTF,TF_Q,choose_FT_FF_Q> choose_TF_FT_FF_Q ;
+
+    typedef typename mpl::eval_if<caseTT,TT_Q,choose_TF_FT_FF_Q>::type type ;
+  } ;
+
+} } } // namespace pdalboost::numeric::convdetail
+
+#endif
+
+
diff --git a/vendor/pdalboost/boost/numeric/conversion/detail/numeric_cast_traits.hpp b/vendor/pdalboost/boost/numeric/conversion/detail/numeric_cast_traits.hpp
new file mode 100644
index 0000000..637170a
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/detail/numeric_cast_traits.hpp
@@ -0,0 +1,138 @@
+//
+//! Copyright (c) 2011-2012
+//! Brandon Kohn
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#if !defined(BOOST_NUMERIC_CONVERSION_DONT_USE_PREPROCESSED_FILES)
+
+    #include <boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp>
+	
+	#if !defined(BOOST_NO_LONG_LONG)
+        #include <boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp>
+	#endif
+	
+#else
+#if !BOOST_PP_IS_ITERATING
+
+    #include <boost/preprocessor/seq/elem.hpp>
+    #include <boost/preprocessor/seq/size.hpp>
+    #include <boost/preprocessor/iteration/iterate.hpp>
+    
+    #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)
+        #pragma wave option(preserve: 2, line: 0, output: "preprocessed/numeric_cast_traits_common.hpp")
+    #endif
+//
+//! Copyright (c) 2011-2012
+//! Brandon Kohn
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+    #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)
+        #pragma wave option(preserve: 1)
+    #endif
+	
+	//! These are the assumed common built in fundamental types (not typedefs/macros.)
+	#define BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES() \
+        (char)                                            \
+        (signed char)                                     \
+        (unsigned char)                                   \
+        (short)                                           \
+        (unsigned short)                                  \
+        (int)                                             \
+        (unsigned int)                                    \
+        (long)                                            \
+        (unsigned long)                                   \
+        (float)                                           \
+        (double)                                          \
+        (long double)                                     \
+    /***/
+	
+    #define BOOST_NUMERIC_CONVERSION_SEQ_A() BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES()
+	#define BOOST_NUMERIC_CONVERSION_SEQ_B() BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES()
+
+namespace pdalboost { namespace numeric {
+
+    #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_SEQ_A())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>))
+    #include BOOST_PP_ITERATE()    
+
+}}//namespace pdalboost::numeric;
+
+    #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)
+        #pragma wave option(output: null)
+    #endif   
+	
+	#if ( defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES) ) || !defined(BOOST_NO_LONG_LONG)
+	
+	    #undef BOOST_NUMERIC_CONVERSION_SEQ_A
+	    #undef BOOST_NUMERIC_CONVERSION_SEQ_B
+
+	    #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)
+            #pragma wave option(preserve: 2, line: 0, output: "preprocessed/numeric_cast_traits_long_long.hpp")
+        #endif
+
+//
+//! Copyright (c) 2011-2012
+//! Brandon Kohn
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+        #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)
+            #pragma wave option(preserve: 1)
+        #endif
+
+namespace pdalboost { namespace numeric {
+
+    #define BOOST_NUMERIC_CONVERSION_SEQ_A() BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES()(pdalboost::long_long_type)(pdalboost::ulong_long_type)
+	#define BOOST_NUMERIC_CONVERSION_SEQ_B() (pdalboost::long_long_type)(pdalboost::ulong_long_type)
+    
+    #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_SEQ_A())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>))
+    #include BOOST_PP_ITERATE()    
+
+}}//namespace pdalboost::numeric;
+
+        #if defined(__WAVE__) && defined(BOOST_NUMERIC_CONVERSION_CREATE_PREPROCESSED_FILES)
+            #pragma wave option(output: null)
+        #endif   
+	
+	#endif
+		
+    #undef BOOST_NUMERIC_CONVERSION_BASE_BUILTIN_TYPES
+	#undef BOOST_NUMERIC_CONVERSION_SEQ_A
+	#undef BOOST_NUMERIC_CONVERSION_SEQ_B
+    
+#elif BOOST_PP_ITERATION_DEPTH() == 1
+
+    #define BOOST_PP_ITERATION_PARAMS_2 (3, (0, BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(BOOST_NUMERIC_CONVERSION_SEQ_B())), <boost/numeric/conversion/detail/numeric_cast_traits.hpp>))
+    #include BOOST_PP_ITERATE()
+
+#elif BOOST_PP_ITERATION_DEPTH() == 2
+
+    //! Generate default traits for the specified source and target.
+    #define BOOST_NUMERIC_CONVERSION_A BOOST_PP_FRAME_ITERATION(1)
+    #define BOOST_NUMERIC_CONVERSION_B BOOST_PP_FRAME_ITERATION(2)
+
+    template <>
+    struct numeric_cast_traits
+        <
+            BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_A, BOOST_NUMERIC_CONVERSION_SEQ_A())
+          , BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_B, BOOST_NUMERIC_CONVERSION_SEQ_B())
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<BOOST_PP_SEQ_ELEM(BOOST_NUMERIC_CONVERSION_B, BOOST_NUMERIC_CONVERSION_SEQ_B())> rounding_policy;
+    };     
+
+    #undef BOOST_NUMERIC_CONVERSION_A
+    #undef BOOST_NUMERIC_CONVERSION_B
+
+#endif//! Depth 2.
+#endif// BOOST_NUMERIC_CONVERSION_DONT_USE_PREPROCESSED_FILES
diff --git a/vendor/pdalboost/boost/numeric/conversion/detail/old_numeric_cast.hpp b/vendor/pdalboost/boost/numeric/conversion/detail/old_numeric_cast.hpp
new file mode 100644
index 0000000..a906623
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/detail/old_numeric_cast.hpp
@@ -0,0 +1,339 @@
+//  boost cast.hpp header file  ----------------------------------------------//
+
+//  (C) Copyright Kevlin Henney and Dave Abrahams 1999.
+//  Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/conversion for Documentation.
+
+//  Revision History
+//  23 JUN 05  Code extracted from /boost/cast.hpp into this new header.
+//             Keeps this legacy version of numeric_cast<> for old compilers
+//             wich can't compile the new version in /boost/numeric/conversion/cast.hpp
+//             (Fernando Cacciola)
+//  02 Apr 01  Removed BOOST_NO_LIMITS workarounds and included
+//             <boost/limits.hpp> instead (the workaround did not
+//             actually compile when BOOST_NO_LIMITS was defined in
+//             any case, so we loose nothing). (John Maddock)
+//  21 Jan 01  Undid a bug I introduced yesterday. numeric_cast<> never
+//             worked with stock GCC; trying to get it to do that broke
+//             vc-stlport.
+//  20 Jan 01  Moved BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS to config.hpp.
+//             Removed unused BOOST_EXPLICIT_TARGET macro. Moved
+//             pdalboost::detail::type to boost/type.hpp. Made it compile with
+//             stock gcc again (Dave Abrahams)
+//  29 Nov 00  Remove nested namespace cast, cleanup spacing before Formal
+//             Review (Beman Dawes)
+//  19 Oct 00  Fix numeric_cast for floating-point types (Dave Abrahams)
+//  15 Jul 00  Suppress numeric_cast warnings for GCC, Borland and MSVC
+//             (Dave Abrahams)
+//  30 Jun 00  More MSVC6 wordarounds.  See comments below.  (Dave Abrahams)
+//  28 Jun 00  Removed implicit_cast<>.  See comment below. (Beman Dawes)
+//  27 Jun 00  More MSVC6 workarounds
+//  15 Jun 00  Add workarounds for MSVC6
+//   2 Feb 00  Remove bad_numeric_cast ";" syntax error (Doncho Angelov)
+//  26 Jan 00  Add missing throw() to bad_numeric_cast::what(0 (Adam Levar)
+//  29 Dec 99  Change using declarations so usages in other namespaces work
+//             correctly (Dave Abrahams)
+//  23 Sep 99  Change polymorphic_downcast assert to also detect M.I. errors
+//             as suggested Darin Adler and improved by Valentin Bonnard.
+//   2 Sep 99  Remove controversial asserts, simplify, rename.
+//  30 Aug 99  Move to cast.hpp, replace value_cast with numeric_cast,
+//             place in nested namespace.
+//   3 Aug 99  Initial version
+
+#ifndef BOOST_OLD_NUMERIC_CAST_HPP
+#define BOOST_OLD_NUMERIC_CAST_HPP
+
+# include <boost/config.hpp>
+# include <cassert>
+# include <typeinfo>
+# include <boost/type.hpp>
+# include <boost/limits.hpp>
+# include <boost/numeric/conversion/converter_policies.hpp>
+
+//  It has been demonstrated numerous times that MSVC 6.0 fails silently at link
+//  time if you use a template function which has template parameters that don't
+//  appear in the function's argument list.
+//
+//  TODO: Add this to config.hpp?
+//  FLC: This macro is repeated in boost/cast.hpp but only locally (is undefined at the bottom)
+//       so is OK to reproduce it here.
+# if defined(BOOST_MSVC) && BOOST_MSVC < 1300
+#  define BOOST_EXPLICIT_DEFAULT_TARGET , ::pdalboost::type<Target>* = 0
+# else
+#  define BOOST_EXPLICIT_DEFAULT_TARGET
+# endif
+
+namespace pdalboost
+{
+  using numeric::bad_numeric_cast;
+
+//  LEGACY numeric_cast [only for some old broken compilers] --------------------------------------//
+
+//  Contributed by Kevlin Henney
+
+//  numeric_cast  ------------------------------------------------------------//
+
+#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) || defined(BOOST_SGI_CPP_LIMITS)
+
+    namespace detail
+    {
+      template <class T>
+      struct signed_numeric_limits : std::numeric_limits<T>
+      {
+             static inline T min BOOST_PREVENT_MACRO_SUBSTITUTION ()
+         {
+             return (std::numeric_limits<T>::min)() >= 0
+                     // unary minus causes integral promotion, thus the static_cast<>
+                     ? static_cast<T>(-(std::numeric_limits<T>::max)())
+                     : (std::numeric_limits<T>::min)();
+         };
+      };
+
+      // Move to namespace pdalboost in utility.hpp?
+      template <class T, bool specialized>
+      struct fixed_numeric_limits_base
+          : public if_true< std::numeric_limits<T>::is_signed >
+           ::BOOST_NESTED_TEMPLATE then< signed_numeric_limits<T>,
+                            std::numeric_limits<T>
+                   >::type
+      {};
+
+      template <class T>
+      struct fixed_numeric_limits
+          : fixed_numeric_limits_base<T,(std::numeric_limits<T>::is_specialized)>
+      {};
+
+# ifdef BOOST_HAS_LONG_LONG
+      // cover implementations which supply no specialization for long
+      // long / unsigned long long. Not intended to be full
+      // numeric_limits replacements, but good enough for numeric_cast<>
+      template <>
+      struct fixed_numeric_limits_base< ::pdalboost::long_long_type, false>
+      {
+          BOOST_STATIC_CONSTANT(bool, is_specialized = true);
+          BOOST_STATIC_CONSTANT(bool, is_signed = true);
+          static  ::pdalboost::long_long_type max BOOST_PREVENT_MACRO_SUBSTITUTION ()
+          {
+#  ifdef LONGLONG_MAX
+              return LONGLONG_MAX;
+#  else
+              return 9223372036854775807LL; // hope this is portable
+#  endif
+          }
+
+          static  ::pdalboost::long_long_type min BOOST_PREVENT_MACRO_SUBSTITUTION ()
+          {
+#  ifdef LONGLONG_MIN
+              return LONGLONG_MIN;
+#  else
+               return -( 9223372036854775807LL )-1; // hope this is portable
+#  endif
+          }
+      };
+
+      template <>
+      struct fixed_numeric_limits_base< ::pdalboost::ulong_long_type, false>
+      {
+          BOOST_STATIC_CONSTANT(bool, is_specialized = true);
+          BOOST_STATIC_CONSTANT(bool, is_signed = false);
+          static  ::pdalboost::ulong_long_type max BOOST_PREVENT_MACRO_SUBSTITUTION ()
+          {
+#  ifdef ULONGLONG_MAX
+              return ULONGLONG_MAX;
+#  else
+              return 0xffffffffffffffffULL; // hope this is portable
+#  endif
+          }
+
+          static  ::pdalboost::ulong_long_type min BOOST_PREVENT_MACRO_SUBSTITUTION () { return 0; }
+      };
+# endif
+    } // namespace detail
+
+// less_than_type_min -
+  //    x_is_signed should be numeric_limits<X>::is_signed
+  //    y_is_signed should be numeric_limits<Y>::is_signed
+  //    y_min should be numeric_limits<Y>::min()
+  //
+  //    check(x, y_min) returns true iff x < y_min without invoking comparisons
+  //    between signed and unsigned values.
+  //
+  //    "poor man's partial specialization" is in use here.
+    template <bool x_is_signed, bool y_is_signed>
+    struct less_than_type_min
+    {
+        template <class X, class Y>
+        static bool check(X x, Y y_min)
+            { return x < y_min; }
+    };
+
+    template <>
+    struct less_than_type_min<false, true>
+    {
+        template <class X, class Y>
+        static bool check(X, Y)
+            { return false; }
+    };
+
+    template <>
+    struct less_than_type_min<true, false>
+    {
+        template <class X, class Y>
+        static bool check(X x, Y)
+            { return x < 0; }
+    };
+
+  // greater_than_type_max -
+  //    same_sign should be:
+  //            numeric_limits<X>::is_signed == numeric_limits<Y>::is_signed
+  //    y_max should be numeric_limits<Y>::max()
+  //
+  //    check(x, y_max) returns true iff x > y_max without invoking comparisons
+  //    between signed and unsigned values.
+  //
+  //    "poor man's partial specialization" is in use here.
+    template <bool same_sign, bool x_is_signed>
+    struct greater_than_type_max;
+
+    template<>
+    struct greater_than_type_max<true, true>
+    {
+        template <class X, class Y>
+        static inline bool check(X x, Y y_max)
+            { return x > y_max; }
+    };
+
+    template <>
+    struct greater_than_type_max<false, true>
+    {
+        // What does the standard say about this? I think it's right, and it
+        // will work with every compiler I know of.
+        template <class X, class Y>
+        static inline bool check(X x, Y)
+            { return x >= 0 && static_cast<X>(static_cast<Y>(x)) != x; }
+
+# if defined(BOOST_MSVC) && BOOST_MSVC < 1300
+        // MSVC6 can't static_cast  unsigned __int64 -> floating types
+#  define BOOST_UINT64_CAST(src_type)                                   \
+        static inline bool check(src_type x, unsigned __int64)          \
+        {                                                               \
+            if (x < 0) return false;                                    \
+            unsigned __int64 y = static_cast<unsigned __int64>(x);      \
+            bool odd = y & 0x1;                                         \
+            __int64 div2 = static_cast<__int64>(y >> 1);                \
+            return ((static_cast<src_type>(div2) * 2.0) + odd) != x;    \
+        }
+
+        BOOST_UINT64_CAST(long double);
+        BOOST_UINT64_CAST(double);
+        BOOST_UINT64_CAST(float);
+#  undef BOOST_UINT64_CAST
+# endif
+    };
+
+    template<>
+    struct greater_than_type_max<true, false>
+    {
+        template <class X, class Y>
+        static inline bool check(X x, Y y_max)
+            { return x > y_max; }
+    };
+
+    template <>
+    struct greater_than_type_max<false, false>
+    {
+        // What does the standard say about this? I think it's right, and it
+        // will work with every compiler I know of.
+        template <class X, class Y>
+        static inline bool check(X x, Y)
+            { return static_cast<X>(static_cast<Y>(x)) != x; }
+    };
+
+#else // use #pragma hacks if available
+
+  namespace detail
+  {
+# if BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4018)
+#  pragma warning(disable : 4146)
+#elif defined(__BORLANDC__)
+#  pragma option push -w-8041
+# endif
+
+       // Move to namespace pdalboost in utility.hpp?
+       template <class T>
+       struct fixed_numeric_limits : public std::numeric_limits<T>
+       {
+           static inline T min BOOST_PREVENT_MACRO_SUBSTITUTION ()
+           {
+               return std::numeric_limits<T>::is_signed && (std::numeric_limits<T>::min)() >= 0
+                   ? T(-(std::numeric_limits<T>::max)()) : (std::numeric_limits<T>::min)();
+           }
+       };
+
+# if BOOST_MSVC
+#  pragma warning(pop)
+#elif defined(__BORLANDC__)
+#  pragma option pop
+# endif
+  } // namespace detail
+
+#endif
+
+    template<typename Target, typename Source>
+    inline Target numeric_cast(Source arg BOOST_EXPLICIT_DEFAULT_TARGET)
+    {
+        // typedefs abbreviating respective trait classes
+        typedef detail::fixed_numeric_limits<Source> arg_traits;
+        typedef detail::fixed_numeric_limits<Target> result_traits;
+
+#if defined(BOOST_STRICT_CONFIG) \
+    || (!defined(__HP_aCC) || __HP_aCC > 33900) \
+         && (!defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) \
+             || defined(BOOST_SGI_CPP_LIMITS))
+        // typedefs that act as compile time assertions
+        // (to be replaced by boost compile time assertions
+        // as and when they become available and are stable)
+        typedef bool argument_must_be_numeric[arg_traits::is_specialized];
+        typedef bool result_must_be_numeric[result_traits::is_specialized];
+
+        const bool arg_is_signed = arg_traits::is_signed;
+        const bool result_is_signed = result_traits::is_signed;
+        const bool same_sign = arg_is_signed == result_is_signed;
+
+        if (less_than_type_min<arg_is_signed, result_is_signed>::check(arg, (result_traits::min)())
+            || greater_than_type_max<same_sign, arg_is_signed>::check(arg, (result_traits::max)())
+            )
+
+#else // We need to use #pragma hacks if available
+
+# if BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4018)
+#elif defined(__BORLANDC__)
+#pragma option push -w-8012
+# endif
+        if ((arg < 0 && !result_traits::is_signed)  // loss of negative range
+             || (arg_traits::is_signed && arg < (result_traits::min)())  // underflow
+             || arg > (result_traits::max)())            // overflow
+# if BOOST_MSVC
+#  pragma warning(pop)
+#elif defined(__BORLANDC__)
+#pragma option pop
+# endif
+#endif
+        {
+            throw bad_numeric_cast();
+        }
+        return static_cast<Target>(arg);
+    } // numeric_cast
+
+#  undef BOOST_EXPLICIT_DEFAULT_TARGET
+
+} // namespace pdalboost
+
+#endif  // BOOST_OLD_NUMERIC_CAST_HPP
diff --git a/vendor/pdalboost/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp b/vendor/pdalboost/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp
new file mode 100644
index 0000000..a4d809b
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp
@@ -0,0 +1,1741 @@
+//
+//! Copyright (c) 2011-2012
+//! Brandon Kohn
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+	
+	
+	
+namespace pdalboost { namespace numeric {
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            char
+          , char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            char
+          , signed char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<signed char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            char
+          , unsigned char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            char
+          , short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            char
+          , unsigned short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            char
+          , int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            char
+          , unsigned int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            char
+          , long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            char
+          , unsigned long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            char
+          , float
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<float> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            char
+          , double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            char
+          , long double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            signed char
+          , char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            signed char
+          , signed char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<signed char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            signed char
+          , unsigned char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            signed char
+          , short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            signed char
+          , unsigned short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            signed char
+          , int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            signed char
+          , unsigned int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            signed char
+          , long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            signed char
+          , unsigned long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            signed char
+          , float
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<float> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            signed char
+          , double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            signed char
+          , long double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned char
+          , char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned char
+          , signed char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<signed char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned char
+          , unsigned char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned char
+          , short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned char
+          , unsigned short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned char
+          , int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned char
+          , unsigned int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned char
+          , long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned char
+          , unsigned long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned char
+          , float
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<float> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned char
+          , double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned char
+          , long double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            short
+          , char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            short
+          , signed char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<signed char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            short
+          , unsigned char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            short
+          , short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            short
+          , unsigned short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            short
+          , int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            short
+          , unsigned int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            short
+          , long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            short
+          , unsigned long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            short
+          , float
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<float> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            short
+          , double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            short
+          , long double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned short
+          , char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned short
+          , signed char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<signed char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned short
+          , unsigned char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned short
+          , short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned short
+          , unsigned short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned short
+          , int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned short
+          , unsigned int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned short
+          , long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned short
+          , unsigned long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned short
+          , float
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<float> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned short
+          , double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned short
+          , long double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            int
+          , char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            int
+          , signed char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<signed char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            int
+          , unsigned char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            int
+          , short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            int
+          , unsigned short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            int
+          , int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            int
+          , unsigned int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            int
+          , long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            int
+          , unsigned long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            int
+          , float
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<float> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            int
+          , double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            int
+          , long double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned int
+          , char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned int
+          , signed char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<signed char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned int
+          , unsigned char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned int
+          , short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned int
+          , unsigned short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned int
+          , int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned int
+          , unsigned int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned int
+          , long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned int
+          , unsigned long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned int
+          , float
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<float> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned int
+          , double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned int
+          , long double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long
+          , char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long
+          , signed char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<signed char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long
+          , unsigned char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long
+          , short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long
+          , unsigned short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long
+          , int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long
+          , unsigned int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long
+          , long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long
+          , unsigned long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long
+          , float
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<float> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long
+          , double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long
+          , long double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned long
+          , char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned long
+          , signed char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<signed char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned long
+          , unsigned char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned long
+          , short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned long
+          , unsigned short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned long
+          , int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned long
+          , unsigned int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned long
+          , long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned long
+          , unsigned long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned long
+          , float
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<float> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned long
+          , double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned long
+          , long double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            float
+          , char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            float
+          , signed char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<signed char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            float
+          , unsigned char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            float
+          , short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            float
+          , unsigned short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            float
+          , int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            float
+          , unsigned int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            float
+          , long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            float
+          , unsigned long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            float
+          , float
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<float> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            float
+          , double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            float
+          , long double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            double
+          , char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            double
+          , signed char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<signed char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            double
+          , unsigned char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            double
+          , short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            double
+          , unsigned short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            double
+          , int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            double
+          , unsigned int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            double
+          , long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            double
+          , unsigned long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            double
+          , float
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<float> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            double
+          , double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            double
+          , long double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long double
+          , char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long double
+          , signed char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<signed char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long double
+          , unsigned char
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned char> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long double
+          , short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long double
+          , unsigned short
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned short> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long double
+          , int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long double
+          , unsigned int
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned int> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long double
+          , long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long double
+          , unsigned long
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<unsigned long> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long double
+          , float
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<float> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long double
+          , double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<double> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long double
+          , long double
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<long double> rounding_policy;
+    }; 
+}}
diff --git a/vendor/pdalboost/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp b/vendor/pdalboost/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp
new file mode 100644
index 0000000..9f8181f
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp
@@ -0,0 +1,347 @@
+//
+//! Copyright (c) 2011-2012
+//! Brandon Kohn
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+namespace pdalboost { namespace numeric {
+    
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            char
+          , pdalboost::long_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::long_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            char
+          , pdalboost::ulong_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::ulong_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            signed char
+          , pdalboost::long_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::long_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            signed char
+          , pdalboost::ulong_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::ulong_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned char
+          , pdalboost::long_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::long_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned char
+          , pdalboost::ulong_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::ulong_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            short
+          , pdalboost::long_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::long_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            short
+          , pdalboost::ulong_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::ulong_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned short
+          , pdalboost::long_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::long_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned short
+          , pdalboost::ulong_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::ulong_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            int
+          , pdalboost::long_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::long_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            int
+          , pdalboost::ulong_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::ulong_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned int
+          , pdalboost::long_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::long_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned int
+          , pdalboost::ulong_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::ulong_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long
+          , pdalboost::long_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::long_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long
+          , pdalboost::ulong_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::ulong_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned long
+          , pdalboost::long_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::long_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            unsigned long
+          , pdalboost::ulong_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::ulong_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            float
+          , pdalboost::long_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::long_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            float
+          , pdalboost::ulong_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::ulong_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            double
+          , pdalboost::long_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::long_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            double
+          , pdalboost::ulong_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::ulong_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long double
+          , pdalboost::long_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::long_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            long double
+          , pdalboost::ulong_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::ulong_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            pdalboost::long_long_type
+          , pdalboost::long_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::long_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            pdalboost::long_long_type
+          , pdalboost::ulong_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::ulong_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            pdalboost::ulong_long_type
+          , pdalboost::long_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::long_long_type> rounding_policy;
+    }; 
+    
+    template <>
+    struct numeric_cast_traits
+        <
+            pdalboost::ulong_long_type
+          , pdalboost::ulong_long_type
+        >
+    {
+        typedef def_overflow_handler overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<pdalboost::ulong_long_type> rounding_policy;
+    }; 
+}}
diff --git a/vendor/pdalboost/boost/numeric/conversion/detail/sign_mixture.hpp b/vendor/pdalboost/boost/numeric/conversion/detail/sign_mixture.hpp
new file mode 100644
index 0000000..b028ee0
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/detail/sign_mixture.hpp
@@ -0,0 +1,72 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+// 
+#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_SIGN_MIXTURE_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_DETAIL_SIGN_MIXTURE_FLC_12NOV2002_HPP
+
+#include "boost/config.hpp"
+#include "boost/limits.hpp"
+
+#include "boost/numeric/conversion/sign_mixture_enum.hpp"
+#include "boost/numeric/conversion/detail/meta.hpp"
+
+#include "boost/mpl/integral_c.hpp"
+
+namespace pdalboost { namespace numeric { namespace convdetail
+{
+  // Integral Constants for 'SignMixture'
+  typedef mpl::integral_c<sign_mixture_enum, unsigned_to_unsigned> unsig2unsig_c ;
+  typedef mpl::integral_c<sign_mixture_enum, signed_to_signed>     sig2sig_c ;
+  typedef mpl::integral_c<sign_mixture_enum, signed_to_unsigned>   sig2unsig_c ;
+  typedef mpl::integral_c<sign_mixture_enum, unsigned_to_signed>   unsig2sig_c ;
+
+  // Metafunction:
+  //
+  //   get_sign_mixture<T,S>::type
+  //
+  // Selects the appropriate SignMixture Integral Constant for the combination T,S.
+  //
+  template<class T,class S>
+  struct get_sign_mixture
+  {
+    typedef mpl::bool_< ::std::numeric_limits<S>::is_signed > S_signed ;
+    typedef mpl::bool_< ::std::numeric_limits<T>::is_signed > T_signed ;
+
+    typedef typename
+      for_both<S_signed, T_signed, sig2sig_c, sig2unsig_c, unsig2sig_c, unsig2unsig_c>::type
+        type ;
+  } ;
+
+  // Metafunction:
+  //
+  //   for_sign_mixture<SignMixture,Sig2Sig,Sig2Unsig,Unsig2Sig,Unsig2Unsig>::type
+  //
+  // {SignMixture} is one of the Integral Constants for SignMixture, declared above.
+  // {Sig2Sig,Sig2Unsig,Unsig2Sig,Unsig2Unsig} are aribtrary types. (not metafunctions)
+  //
+  // According to the value of 'SignMixture', selects the corresponding type.
+  //
+  template<class SignMixture, class Sig2Sig, class Sig2Unsig, class Unsig2Sig, class Unsig2Unsig>
+  struct for_sign_mixture
+  {
+    typedef typename
+      ct_switch4<SignMixture
+                 , sig2sig_c, sig2unsig_c, unsig2sig_c  // default
+                 , Sig2Sig  , Sig2Unsig  , Unsig2Sig  , Unsig2Unsig
+                >::type
+        type ;
+  } ;
+
+} } } // namespace pdalboost::numeric::convdetail
+
+#endif
+//
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/vendor/pdalboost/boost/numeric/conversion/detail/udt_builtin_mixture.hpp b/vendor/pdalboost/boost/numeric/conversion/detail/udt_builtin_mixture.hpp
new file mode 100644
index 0000000..69ac362
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/detail/udt_builtin_mixture.hpp
@@ -0,0 +1,69 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+// 
+#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_UDT_BUILTIN_MIXTURE_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_DETAIL_UDT_BUILTIN_MIXTURE_FLC_12NOV2002_HPP
+
+#include "boost/type_traits/is_arithmetic.hpp"
+
+#include "boost/numeric/conversion/udt_builtin_mixture_enum.hpp"
+#include "boost/numeric/conversion/detail/meta.hpp"
+
+#include "boost/mpl/integral_c.hpp"
+
+namespace pdalboost { namespace numeric { namespace convdetail
+{
+  // Integral Constants for 'UdtMixture'
+  typedef mpl::integral_c<udt_builtin_mixture_enum, builtin_to_builtin> builtin2builtin_c ;
+  typedef mpl::integral_c<udt_builtin_mixture_enum, builtin_to_udt>     builtin2udt_c ;
+  typedef mpl::integral_c<udt_builtin_mixture_enum, udt_to_builtin>     udt2builtin_c ;
+  typedef mpl::integral_c<udt_builtin_mixture_enum, udt_to_udt>         udt2udt_c ;
+
+  // Metafunction:
+  //
+  //   for_udt_mixture<UdtMixture,BuiltIn2BuiltIn,BuiltIn2Udt,Udt2BuiltIn,Udt2Udt>::type
+  //
+  // {UdtMixture} is one of the Integral Constants for UdMixture, declared above.
+  // {BuiltIn2BuiltIn,BuiltIn2Udt,Udt2BuiltIn,Udt2Udt} are aribtrary types. (not metafunctions)
+  //
+  // According to the value of 'UdtMixture', selects the corresponding type.
+  //
+  template<class UdtMixture, class BuiltIn2BuiltIn, class BuiltIn2Udt, class Udt2BuiltIn, class Udt2Udt>
+  struct for_udt_builtin_mixture
+  {
+    typedef typename
+      ct_switch4<UdtMixture
+                 , builtin2builtin_c, builtin2udt_c, udt2builtin_c // default
+                 , BuiltIn2BuiltIn  , BuiltIn2Udt  , Udt2BuiltIn  , Udt2Udt
+                >::type
+        type ;
+  } ;
+
+  // Metafunction:
+  //
+  //   get_udt_mixture<T,S>::type
+  //
+  // Selects the appropriate UdtMixture Integral Constant for the combination T,S.
+  //
+  template<class T,class S>
+  struct get_udt_builtin_mixture
+  {
+    typedef is_arithmetic<S> S_builtin ;
+    typedef is_arithmetic<T> T_builtin ;
+
+    typedef typename
+      for_both<S_builtin, T_builtin, builtin2builtin_c, builtin2udt_c, udt2builtin_c, udt2udt_c>::type
+        type ;
+  } ;
+
+} } } // namespace pdalboost::numeric::convdetail
+
+#endif
+
+
diff --git a/vendor/pdalboost/boost/numeric/conversion/int_float_mixture_enum.hpp b/vendor/pdalboost/boost/numeric/conversion/int_float_mixture_enum.hpp
new file mode 100644
index 0000000..44d501c
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/int_float_mixture_enum.hpp
@@ -0,0 +1,29 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+// 
+#ifndef BOOST_NUMERIC_CONVERSION_INT_FLOAT_MIXTURE_ENUM_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_INT_FLOAT_MIXTURE_ENUM_FLC_12NOV2002_HPP
+
+namespace pdalboost { namespace numeric
+{
+  enum int_float_mixture_enum
+  {
+     integral_to_integral
+    ,integral_to_float
+    ,float_to_integral
+    ,float_to_float
+  } ;
+
+} } // namespace pdalboost::numeric
+
+#endif
+//
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/vendor/pdalboost/boost/numeric/conversion/numeric_cast_traits.hpp b/vendor/pdalboost/boost/numeric/conversion/numeric_cast_traits.hpp
new file mode 100644
index 0000000..8c9c698
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/numeric_cast_traits.hpp
@@ -0,0 +1,31 @@
+//
+//! Copyright (c) 2011
+//! Brandon Kohn
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+#ifndef BOOST_NUMERIC_CAST_TRAITS_HPP
+#define BOOST_NUMERIC_CAST_TRAITS_HPP
+
+#include <boost/numeric/conversion/converter_policies.hpp>
+
+namespace pdalboost { namespace numeric {
+
+    template <typename Target, typename Source, typename EnableIf = void>
+    struct numeric_cast_traits
+    {
+        typedef def_overflow_handler    overflow_policy;
+        typedef UseInternalRangeChecker range_checking_policy;
+        typedef Trunc<Source>           rounding_policy;
+    };
+
+}}//namespace pdalboost::numeric;
+
+#if !defined( BOOST_NUMERIC_CONVERSION_RELAX_BUILT_IN_CAST_TRAITS )
+#include <boost/cstdint.hpp>
+#include <boost/numeric/conversion/detail/numeric_cast_traits.hpp>
+#endif//!defined BOOST_NUMERIC_CONVERSION_RELAX_BUILT_IN_CAST_TRAITS
+
+#endif//BOOST_NUMERIC_CAST_TRAITS_HPP
diff --git a/vendor/pdalboost/boost/numeric/conversion/sign_mixture_enum.hpp b/vendor/pdalboost/boost/numeric/conversion/sign_mixture_enum.hpp
new file mode 100644
index 0000000..846c952
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/sign_mixture_enum.hpp
@@ -0,0 +1,29 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+// 
+#ifndef BOOST_NUMERIC_CONVERSION_SIGN_MIXTURE_ENUM_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_SIGN_MIXTURE_ENUM_FLC_12NOV2002_HPP
+
+namespace pdalboost { namespace numeric
+{
+  enum sign_mixture_enum
+  {
+     unsigned_to_unsigned
+    ,signed_to_signed
+    ,signed_to_unsigned
+    ,unsigned_to_signed
+  } ;
+
+} } // namespace pdalboost::numeric
+
+#endif
+//
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+
diff --git a/vendor/pdalboost/boost/numeric/conversion/udt_builtin_mixture_enum.hpp b/vendor/pdalboost/boost/numeric/conversion/udt_builtin_mixture_enum.hpp
new file mode 100644
index 0000000..1e84f48
--- /dev/null
+++ b/vendor/pdalboost/boost/numeric/conversion/udt_builtin_mixture_enum.hpp
@@ -0,0 +1,26 @@
+//  (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/numeric/conversion
+//
+// Contact the author at: fernando_cacciola at hotmail.com
+// 
+#ifndef BOOST_NUMERIC_CONVERSION_UDT_BUILTIN_MIXTURE_ENUM_FLC_12NOV2002_HPP
+#define BOOST_NUMERIC_CONVERSION_UDT_BUILTIN_MIXTURE_ENUM_FLC_12NOV2002_HPP
+
+namespace pdalboost { namespace numeric
+{
+  enum udt_builtin_mixture_enum
+  {
+     builtin_to_builtin
+    ,builtin_to_udt
+    ,udt_to_builtin
+    ,udt_to_udt
+  } ;
+
+} } // namespace pdalboost::numeric
+
+#endif
+
diff --git a/vendor/pdalboost/boost/operators.hpp b/vendor/pdalboost/boost/operators.hpp
new file mode 100644
index 0000000..a4d8481
--- /dev/null
+++ b/vendor/pdalboost/boost/operators.hpp
@@ -0,0 +1,950 @@
+//  Boost operators.hpp header file  ----------------------------------------//
+
+//  (C) Copyright David Abrahams, Jeremy Siek, Daryle Walker 1999-2001.
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/utility/operators.htm for documentation.
+
+//  Revision History
+//  16 Dec 10 Limit warning suppression for 4284 to older versions of VC++
+//            (Matthew Bradbury, fixes #4432)
+//  07 Aug 08 Added "euclidean" spelling. (Daniel Frey)
+//  03 Apr 08 Make sure "convertible to bool" is sufficient
+//            for T::operator<, etc. (Daniel Frey)
+//  24 May 07 Changed empty_base to depend on T, see
+//            http://svn.boost.org/trac/boost/ticket/979
+//  21 Oct 02 Modified implementation of operators to allow compilers with a
+//            correct named return value optimization (NRVO) to produce optimal
+//            code.  (Daniel Frey)
+//  02 Dec 01 Bug fixed in random_access_iteratable.  (Helmut Zeisel)
+//  28 Sep 01 Factored out iterator operator groups.  (Daryle Walker)
+//  27 Aug 01 'left' form for non commutative operators added;
+//            additional classes for groups of related operators added;
+//            workaround for empty base class optimization
+//            bug of GCC 3.0 (Helmut Zeisel)
+//  25 Jun 01 output_iterator_helper changes: removed default template 
+//            parameters, added support for self-proxying, additional 
+//            documentation and tests (Aleksey Gurtovoy)
+//  29 May 01 Added operator classes for << and >>.  Added input and output
+//            iterator helper classes.  Added classes to connect equality and
+//            relational operators.  Added classes for groups of related
+//            operators.  Reimplemented example operator and iterator helper
+//            classes in terms of the new groups.  (Daryle Walker, with help
+//            from Alexy Gurtovoy)
+//  11 Feb 01 Fixed bugs in the iterator helpers which prevented explicitly
+//            supplied arguments from actually being used (Dave Abrahams)
+//  04 Jul 00 Fixed NO_OPERATORS_IN_NAMESPACE bugs, major cleanup and
+//            refactoring of compiler workarounds, additional documentation
+//            (Alexy Gurtovoy and Mark Rodgers with some help and prompting from
+//            Dave Abrahams) 
+//  28 Jun 00 General cleanup and integration of bugfixes from Mark Rodgers and
+//            Jeremy Siek (Dave Abrahams)
+//  20 Jun 00 Changes to accommodate Borland C++Builder 4 and Borland C++ 5.5
+//            (Mark Rodgers)
+//  20 Jun 00 Minor fixes to the prior revision (Aleksey Gurtovoy)
+//  10 Jun 00 Support for the base class chaining technique was added
+//            (Aleksey Gurtovoy). See documentation and the comments below 
+//            for the details. 
+//  12 Dec 99 Initial version with iterator operators (Jeremy Siek)
+//  18 Nov 99 Change name "divideable" to "dividable", remove unnecessary
+//            specializations of dividable, subtractable, modable (Ed Brey) 
+//  17 Nov 99 Add comments (Beman Dawes)
+//            Remove unnecessary specialization of operators<> (Ed Brey)
+//  15 Nov 99 Fix less_than_comparable<T,U> second operand type for first two
+//            operators.(Beman Dawes)
+//  12 Nov 99 Add operators templates (Ed Brey)
+//  11 Nov 99 Add single template parameter version for compilers without
+//            partial specialization (Beman Dawes)
+//  10 Nov 99 Initial version
+
+// 10 Jun 00:
+// An additional optional template parameter was added to most of 
+// operator templates to support the base class chaining technique (see 
+// documentation for the details). Unfortunately, a straightforward
+// implementation of this change would have broken compatibility with the
+// previous version of the library by making it impossible to use the same
+// template name (e.g. 'addable') for both the 1- and 2-argument versions of
+// an operator template. This implementation solves the backward-compatibility
+// issue at the cost of some simplicity.
+//
+// One of the complications is an existence of special auxiliary class template
+// 'is_chained_base<>' (see 'detail' namespace below), which is used
+// to determine whether its template parameter is a library's operator template
+// or not. You have to specialize 'is_chained_base<>' for each new 
+// operator template you add to the library.
+//
+// However, most of the non-trivial implementation details are hidden behind 
+// several local macros defined below, and as soon as you understand them,
+// you understand the whole library implementation. 
+
+#ifndef BOOST_OPERATORS_HPP
+#define BOOST_OPERATORS_HPP
+
+#include <cstddef>
+#include <iterator>
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if defined(__sgi) && !defined(__GNUC__)
+#   pragma set woff 1234
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1600)
+#   pragma warning( disable : 4284 ) // complaint about return type of 
+#endif                               // operator-> not begin a UDT
+
+namespace pdalboost {
+namespace detail {
+
+template <typename T> class empty_base {};
+
+} // namespace detail
+} // namespace pdalboost
+
+// In this section we supply the xxxx1 and xxxx2 forms of the operator
+// templates, which are explicitly targeted at the 1-type-argument and
+// 2-type-argument operator forms, respectively. Some compilers get confused
+// when inline friend functions are overloaded in namespaces other than the
+// global namespace. When BOOST_NO_OPERATORS_IN_NAMESPACE is defined, all of
+// these templates must go in the global namespace.
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+namespace pdalboost
+{
+#endif
+
+//  Basic operator classes (contributed by Dave Abrahams) ------------------//
+
+//  Note that friend functions defined in a class are implicitly inline.
+//  See the C++ std, 11.4 [class.friend] paragraph 5
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct less_than_comparable2 : B
+{
+     friend bool operator<=(const T& x, const U& y) { return !static_cast<bool>(x > y); }
+     friend bool operator>=(const T& x, const U& y) { return !static_cast<bool>(x < y); }
+     friend bool operator>(const U& x, const T& y)  { return y < x; }
+     friend bool operator<(const U& x, const T& y)  { return y > x; }
+     friend bool operator<=(const U& x, const T& y) { return !static_cast<bool>(y < x); }
+     friend bool operator>=(const U& x, const T& y) { return !static_cast<bool>(y > x); }
+};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct less_than_comparable1 : B
+{
+     friend bool operator>(const T& x, const T& y)  { return y < x; }
+     friend bool operator<=(const T& x, const T& y) { return !static_cast<bool>(y < x); }
+     friend bool operator>=(const T& x, const T& y) { return !static_cast<bool>(x < y); }
+};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct equality_comparable2 : B
+{
+     friend bool operator==(const U& y, const T& x) { return x == y; }
+     friend bool operator!=(const U& y, const T& x) { return !static_cast<bool>(x == y); }
+     friend bool operator!=(const T& y, const U& x) { return !static_cast<bool>(y == x); }
+};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct equality_comparable1 : B
+{
+     friend bool operator!=(const T& x, const T& y) { return !static_cast<bool>(x == y); }
+};
+
+// A macro which produces "name_2left" from "name".
+#define BOOST_OPERATOR2_LEFT(name) name##2##_##left
+
+//  NRVO-friendly implementation (contributed by Daniel Frey) ---------------//
+
+#if defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)
+
+// This is the optimal implementation for ISO/ANSI C++,
+// but it requires the compiler to implement the NRVO.
+// If the compiler has no NRVO, this is the best symmetric
+// implementation available.
+
+#define BOOST_BINARY_OPERATOR_COMMUTATIVE( NAME, OP )                         \
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >        \
+struct NAME##2 : B                                                            \
+{                                                                             \
+  friend T operator OP( const T& lhs, const U& rhs )                          \
+    { T nrv( lhs ); nrv OP##= rhs; return nrv; }                              \
+  friend T operator OP( const U& lhs, const T& rhs )                          \
+    { T nrv( rhs ); nrv OP##= lhs; return nrv; }                              \
+};                                                                            \
+                                                                              \
+template <class T, class B = ::pdalboost::detail::empty_base<T> >                 \
+struct NAME##1 : B                                                            \
+{                                                                             \
+  friend T operator OP( const T& lhs, const T& rhs )                          \
+    { T nrv( lhs ); nrv OP##= rhs; return nrv; }                              \
+};
+
+#define BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( NAME, OP )               \
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >  \
+struct NAME##2 : B                                                      \
+{                                                                       \
+  friend T operator OP( const T& lhs, const U& rhs )                    \
+    { T nrv( lhs ); nrv OP##= rhs; return nrv; }                        \
+};                                                                      \
+                                                                        \
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >  \
+struct BOOST_OPERATOR2_LEFT(NAME) : B                                   \
+{                                                                       \
+  friend T operator OP( const U& lhs, const T& rhs )                    \
+    { T nrv( lhs ); nrv OP##= rhs; return nrv; }                        \
+};                                                                      \
+                                                                        \
+template <class T, class B = ::pdalboost::detail::empty_base<T> >           \
+struct NAME##1 : B                                                      \
+{                                                                       \
+  friend T operator OP( const T& lhs, const T& rhs )                    \
+    { T nrv( lhs ); nrv OP##= rhs; return nrv; }                        \
+};
+
+#else // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)
+
+// For compilers without NRVO the following code is optimal, but not
+// symmetric!  Note that the implementation of
+// BOOST_OPERATOR2_LEFT(NAME) only looks cool, but doesn't provide
+// optimization opportunities to the compiler :)
+
+#define BOOST_BINARY_OPERATOR_COMMUTATIVE( NAME, OP )                   \
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >  \
+struct NAME##2 : B                                                      \
+{                                                                       \
+  friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \
+  friend T operator OP( const U& lhs, T rhs ) { return rhs OP##= lhs; } \
+};                                                                      \
+                                                                        \
+template <class T, class B = ::pdalboost::detail::empty_base<T> >           \
+struct NAME##1 : B                                                      \
+{                                                                       \
+  friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; } \
+};
+
+#define BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( NAME, OP )               \
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >  \
+struct NAME##2 : B                                                      \
+{                                                                       \
+  friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; } \
+};                                                                      \
+                                                                        \
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >  \
+struct BOOST_OPERATOR2_LEFT(NAME) : B                                   \
+{                                                                       \
+  friend T operator OP( const U& lhs, const T& rhs )                    \
+    { return T( lhs ) OP##= rhs; }                                      \
+};                                                                      \
+                                                                        \
+template <class T, class B = ::pdalboost::detail::empty_base<T> >           \
+struct NAME##1 : B                                                      \
+{                                                                       \
+  friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; } \
+};
+
+#endif // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)
+
+BOOST_BINARY_OPERATOR_COMMUTATIVE( multipliable, * )
+BOOST_BINARY_OPERATOR_COMMUTATIVE( addable, + )
+BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( subtractable, - )
+BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( dividable, / )
+BOOST_BINARY_OPERATOR_NON_COMMUTATIVE( modable, % )
+BOOST_BINARY_OPERATOR_COMMUTATIVE( xorable, ^ )
+BOOST_BINARY_OPERATOR_COMMUTATIVE( andable, & )
+BOOST_BINARY_OPERATOR_COMMUTATIVE( orable, | )
+
+#undef BOOST_BINARY_OPERATOR_COMMUTATIVE
+#undef BOOST_BINARY_OPERATOR_NON_COMMUTATIVE
+#undef BOOST_OPERATOR2_LEFT
+
+//  incrementable and decrementable contributed by Jeremy Siek
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct incrementable : B
+{
+  friend T operator++(T& x, int)
+  {
+    incrementable_type nrv(x);
+    ++x;
+    return nrv;
+  }
+private: // The use of this typedef works around a Borland bug
+  typedef T incrementable_type;
+};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct decrementable : B
+{
+  friend T operator--(T& x, int)
+  {
+    decrementable_type nrv(x);
+    --x;
+    return nrv;
+  }
+private: // The use of this typedef works around a Borland bug
+  typedef T decrementable_type;
+};
+
+//  Iterator operator classes (contributed by Jeremy Siek) ------------------//
+
+template <class T, class P, class B = ::pdalboost::detail::empty_base<T> >
+struct dereferenceable : B
+{
+  P operator->() const
+  { 
+    return &*static_cast<const T&>(*this); 
+  }
+};
+
+template <class T, class I, class R, class B = ::pdalboost::detail::empty_base<T> >
+struct indexable : B
+{
+  R operator[](I n) const
+  {
+    return *(static_cast<const T&>(*this) + n);
+  }
+};
+
+//  More operator classes (contributed by Daryle Walker) --------------------//
+//  (NRVO-friendly implementation contributed by Daniel Frey) ---------------//
+
+#if defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)
+
+#define BOOST_BINARY_OPERATOR( NAME, OP )                                     \
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >        \
+struct NAME##2 : B                                                            \
+{                                                                             \
+  friend T operator OP( const T& lhs, const U& rhs )                          \
+    { T nrv( lhs ); nrv OP##= rhs; return nrv; }                              \
+};                                                                            \
+                                                                              \
+template <class T, class B = ::pdalboost::detail::empty_base<T> >                 \
+struct NAME##1 : B                                                            \
+{                                                                             \
+  friend T operator OP( const T& lhs, const T& rhs )                          \
+    { T nrv( lhs ); nrv OP##= rhs; return nrv; }                              \
+};
+
+#else // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)
+
+#define BOOST_BINARY_OPERATOR( NAME, OP )                                     \
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >        \
+struct NAME##2 : B                                                            \
+{                                                                             \
+  friend T operator OP( T lhs, const U& rhs ) { return lhs OP##= rhs; }       \
+};                                                                            \
+                                                                              \
+template <class T, class B = ::pdalboost::detail::empty_base<T> >                 \
+struct NAME##1 : B                                                            \
+{                                                                             \
+  friend T operator OP( T lhs, const T& rhs ) { return lhs OP##= rhs; }       \
+};
+
+#endif // defined(BOOST_HAS_NRVO) || defined(BOOST_FORCE_SYMMETRIC_OPERATORS)
+
+BOOST_BINARY_OPERATOR( left_shiftable, << )
+BOOST_BINARY_OPERATOR( right_shiftable, >> )
+
+#undef BOOST_BINARY_OPERATOR
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct equivalent2 : B
+{
+  friend bool operator==(const T& x, const U& y)
+  {
+    return !static_cast<bool>(x < y) && !static_cast<bool>(x > y);
+  }
+};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct equivalent1 : B
+{
+  friend bool operator==(const T&x, const T&y)
+  {
+    return !static_cast<bool>(x < y) && !static_cast<bool>(y < x);
+  }
+};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct partially_ordered2 : B
+{
+  friend bool operator<=(const T& x, const U& y)
+    { return static_cast<bool>(x < y) || static_cast<bool>(x == y); }
+  friend bool operator>=(const T& x, const U& y)
+    { return static_cast<bool>(x > y) || static_cast<bool>(x == y); }
+  friend bool operator>(const U& x, const T& y)
+    { return y < x; }
+  friend bool operator<(const U& x, const T& y)
+    { return y > x; }
+  friend bool operator<=(const U& x, const T& y)
+    { return static_cast<bool>(y > x) || static_cast<bool>(y == x); }
+  friend bool operator>=(const U& x, const T& y)
+    { return static_cast<bool>(y < x) || static_cast<bool>(y == x); }
+};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct partially_ordered1 : B
+{
+  friend bool operator>(const T& x, const T& y)
+    { return y < x; }
+  friend bool operator<=(const T& x, const T& y)
+    { return static_cast<bool>(x < y) || static_cast<bool>(x == y); }
+  friend bool operator>=(const T& x, const T& y)
+    { return static_cast<bool>(y < x) || static_cast<bool>(x == y); }
+};
+
+//  Combined operator classes (contributed by Daryle Walker) ----------------//
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct totally_ordered2
+    : less_than_comparable2<T, U
+    , equality_comparable2<T, U, B
+      > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct totally_ordered1
+    : less_than_comparable1<T
+    , equality_comparable1<T, B
+      > > {};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct additive2
+    : addable2<T, U
+    , subtractable2<T, U, B
+      > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct additive1
+    : addable1<T
+    , subtractable1<T, B
+      > > {};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct multiplicative2
+    : multipliable2<T, U
+    , dividable2<T, U, B
+      > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct multiplicative1
+    : multipliable1<T
+    , dividable1<T, B
+      > > {};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct integer_multiplicative2
+    : multiplicative2<T, U
+    , modable2<T, U, B
+      > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct integer_multiplicative1
+    : multiplicative1<T
+    , modable1<T, B
+      > > {};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct arithmetic2
+    : additive2<T, U
+    , multiplicative2<T, U, B
+      > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct arithmetic1
+    : additive1<T
+    , multiplicative1<T, B
+      > > {};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct integer_arithmetic2
+    : additive2<T, U
+    , integer_multiplicative2<T, U, B
+      > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct integer_arithmetic1
+    : additive1<T
+    , integer_multiplicative1<T, B
+      > > {};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct bitwise2
+    : xorable2<T, U
+    , andable2<T, U
+    , orable2<T, U, B
+      > > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct bitwise1
+    : xorable1<T
+    , andable1<T
+    , orable1<T, B
+      > > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct unit_steppable
+    : incrementable<T
+    , decrementable<T, B
+      > > {};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct shiftable2
+    : left_shiftable2<T, U
+    , right_shiftable2<T, U, B
+      > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct shiftable1
+    : left_shiftable1<T
+    , right_shiftable1<T, B
+      > > {};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct ring_operators2
+    : additive2<T, U
+    , subtractable2_left<T, U
+    , multipliable2<T, U, B
+      > > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct ring_operators1
+    : additive1<T
+    , multipliable1<T, B
+      > > {};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct ordered_ring_operators2
+    : ring_operators2<T, U
+    , totally_ordered2<T, U, B
+      > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct ordered_ring_operators1
+    : ring_operators1<T
+    , totally_ordered1<T, B
+      > > {};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct field_operators2
+    : ring_operators2<T, U
+    , dividable2<T, U
+    , dividable2_left<T, U, B
+      > > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct field_operators1
+    : ring_operators1<T
+    , dividable1<T, B
+      > > {};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct ordered_field_operators2
+    : field_operators2<T, U
+    , totally_ordered2<T, U, B
+      > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct ordered_field_operators1
+    : field_operators1<T
+    , totally_ordered1<T, B
+      > > {};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct euclidian_ring_operators2
+    : ring_operators2<T, U
+    , dividable2<T, U
+    , dividable2_left<T, U
+    , modable2<T, U
+    , modable2_left<T, U, B
+      > > > > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct euclidian_ring_operators1
+    : ring_operators1<T
+    , dividable1<T
+    , modable1<T, B
+      > > > {};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct ordered_euclidian_ring_operators2
+    : totally_ordered2<T, U
+    , euclidian_ring_operators2<T, U, B
+      > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct ordered_euclidian_ring_operators1
+    : totally_ordered1<T
+    , euclidian_ring_operators1<T, B
+      > > {};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct euclidean_ring_operators2
+    : ring_operators2<T, U
+    , dividable2<T, U
+    , dividable2_left<T, U
+    , modable2<T, U
+    , modable2_left<T, U, B
+      > > > > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct euclidean_ring_operators1
+    : ring_operators1<T
+    , dividable1<T
+    , modable1<T, B
+      > > > {};
+
+template <class T, class U, class B = ::pdalboost::detail::empty_base<T> >
+struct ordered_euclidean_ring_operators2
+    : totally_ordered2<T, U
+    , euclidean_ring_operators2<T, U, B
+      > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct ordered_euclidean_ring_operators1
+    : totally_ordered1<T
+    , euclidean_ring_operators1<T, B
+      > > {};
+
+template <class T, class P, class B = ::pdalboost::detail::empty_base<T> >
+struct input_iteratable
+    : equality_comparable1<T
+    , incrementable<T
+    , dereferenceable<T, P, B
+      > > > {};
+
+template <class T, class B = ::pdalboost::detail::empty_base<T> >
+struct output_iteratable
+    : incrementable<T, B
+      > {};
+
+template <class T, class P, class B = ::pdalboost::detail::empty_base<T> >
+struct forward_iteratable
+    : input_iteratable<T, P, B
+      > {};
+
+template <class T, class P, class B = ::pdalboost::detail::empty_base<T> >
+struct bidirectional_iteratable
+    : forward_iteratable<T, P
+    , decrementable<T, B
+      > > {};
+
+//  To avoid repeated derivation from equality_comparable,
+//  which is an indirect base class of bidirectional_iterable,
+//  random_access_iteratable must not be derived from totally_ordered1
+//  but from less_than_comparable1 only. (Helmut Zeisel, 02-Dec-2001)
+template <class T, class P, class D, class R, class B = ::pdalboost::detail::empty_base<T> >
+struct random_access_iteratable
+    : bidirectional_iteratable<T, P
+    , less_than_comparable1<T
+    , additive2<T, D
+    , indexable<T, D, R, B
+      > > > > {};
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+} // namespace pdalboost
+#endif // BOOST_NO_OPERATORS_IN_NAMESPACE
+
+
+// BOOST_IMPORT_TEMPLATE1 .. BOOST_IMPORT_TEMPLATE4 -
+//
+// When BOOST_NO_OPERATORS_IN_NAMESPACE is defined we need a way to import an
+// operator template into the boost namespace. BOOST_IMPORT_TEMPLATE1 is used
+// for one-argument forms of operator templates; BOOST_IMPORT_TEMPLATE2 for
+// two-argument forms. Note that these macros expect to be invoked from within
+// boost.
+
+#ifndef BOOST_NO_OPERATORS_IN_NAMESPACE
+
+  // The template is already in boost so we have nothing to do.
+# define BOOST_IMPORT_TEMPLATE4(template_name)
+# define BOOST_IMPORT_TEMPLATE3(template_name)
+# define BOOST_IMPORT_TEMPLATE2(template_name)
+# define BOOST_IMPORT_TEMPLATE1(template_name)
+
+#else // BOOST_NO_OPERATORS_IN_NAMESPACE
+
+#  ifndef BOOST_NO_USING_TEMPLATE
+
+     // Bring the names in with a using-declaration
+     // to avoid stressing the compiler.
+#    define BOOST_IMPORT_TEMPLATE4(template_name) using ::template_name;
+#    define BOOST_IMPORT_TEMPLATE3(template_name) using ::template_name;
+#    define BOOST_IMPORT_TEMPLATE2(template_name) using ::template_name;
+#    define BOOST_IMPORT_TEMPLATE1(template_name) using ::template_name;
+
+#  else
+
+     // Otherwise, because a Borland C++ 5.5 bug prevents a using declaration
+     // from working, we are forced to use inheritance for that compiler.
+#    define BOOST_IMPORT_TEMPLATE4(template_name)                                             \
+     template <class T, class U, class V, class W, class B = ::pdalboost::detail::empty_base<T> > \
+     struct template_name : ::template_name<T, U, V, W, B> {};
+
+#    define BOOST_IMPORT_TEMPLATE3(template_name)                                    \
+     template <class T, class U, class V, class B = ::pdalboost::detail::empty_base<T> > \
+     struct template_name : ::template_name<T, U, V, B> {};
+
+#    define BOOST_IMPORT_TEMPLATE2(template_name)                           \
+     template <class T, class U, class B = ::pdalboost::detail::empty_base<T> > \
+     struct template_name : ::template_name<T, U, B> {};
+
+#    define BOOST_IMPORT_TEMPLATE1(template_name)                  \
+     template <class T, class B = ::pdalboost::detail::empty_base<T> > \
+     struct template_name : ::template_name<T, B> {};
+
+#  endif // BOOST_NO_USING_TEMPLATE
+
+#endif // BOOST_NO_OPERATORS_IN_NAMESPACE
+
+//
+// Here's where we put it all together, defining the xxxx forms of the templates
+// in namespace pdalboost. We also define specializations of is_chained_base<> for
+// the xxxx, xxxx1, and xxxx2 templates, importing them into pdalboost:: as
+// necessary.
+//
+
+// is_chained_base<> - a traits class used to distinguish whether an operator
+// template argument is being used for base class chaining, or is specifying a
+// 2nd argument type.
+
+namespace pdalboost {
+// A type parameter is used instead of a plain bool because Borland's compiler
+// didn't cope well with the more obvious non-type template parameter.
+namespace detail {
+  struct true_t {};
+  struct false_t {};
+} // namespace detail
+
+// Unspecialized version assumes that most types are not being used for base
+// class chaining. We specialize for the operator templates defined in this
+// library.
+template<class T> struct is_chained_base {
+  typedef ::pdalboost::detail::false_t value;
+};
+
+} // namespace pdalboost
+
+// Import a 4-type-argument operator template into boost (if necessary) and
+// provide a specialization of 'is_chained_base<>' for it.
+# define BOOST_OPERATOR_TEMPLATE4(template_name4)                     \
+  BOOST_IMPORT_TEMPLATE4(template_name4)                              \
+  template<class T, class U, class V, class W, class B>               \
+  struct is_chained_base< ::pdalboost::template_name4<T, U, V, W, B> > {  \
+    typedef ::pdalboost::detail::true_t value;                            \
+  };
+
+// Import a 3-type-argument operator template into boost (if necessary) and
+// provide a specialization of 'is_chained_base<>' for it.
+# define BOOST_OPERATOR_TEMPLATE3(template_name3)                     \
+  BOOST_IMPORT_TEMPLATE3(template_name3)                              \
+  template<class T, class U, class V, class B>                        \
+  struct is_chained_base< ::pdalboost::template_name3<T, U, V, B> > {     \
+    typedef ::pdalboost::detail::true_t value;                            \
+  };
+
+// Import a 2-type-argument operator template into boost (if necessary) and
+// provide a specialization of 'is_chained_base<>' for it.
+# define BOOST_OPERATOR_TEMPLATE2(template_name2)                  \
+  BOOST_IMPORT_TEMPLATE2(template_name2)                           \
+  template<class T, class U, class B>                              \
+  struct is_chained_base< ::pdalboost::template_name2<T, U, B> > {     \
+    typedef ::pdalboost::detail::true_t value;                         \
+  };
+
+// Import a 1-type-argument operator template into boost (if necessary) and
+// provide a specialization of 'is_chained_base<>' for it.
+# define BOOST_OPERATOR_TEMPLATE1(template_name1)                  \
+  BOOST_IMPORT_TEMPLATE1(template_name1)                           \
+  template<class T, class B>                                       \
+  struct is_chained_base< ::pdalboost::template_name1<T, B> > {        \
+    typedef ::pdalboost::detail::true_t value;                         \
+  };
+
+// BOOST_OPERATOR_TEMPLATE(template_name) defines template_name<> such that it
+// can be used for specifying both 1-argument and 2-argument forms. Requires the
+// existence of two previously defined class templates named '<template_name>1'
+// and '<template_name>2' which must implement the corresponding 1- and 2-
+// argument forms.
+//
+// The template type parameter O == is_chained_base<U>::value is used to
+// distinguish whether the 2nd argument to <template_name> is being used for
+// base class chaining from another boost operator template or is describing a
+// 2nd operand type. O == true_t only when U is actually an another operator
+// template from the library. Partial specialization is used to select an
+// implementation in terms of either '<template_name>1' or '<template_name>2'.
+//
+
+# define BOOST_OPERATOR_TEMPLATE(template_name)                    \
+template <class T                                                  \
+         ,class U = T                                              \
+         ,class B = ::pdalboost::detail::empty_base<T>                 \
+         ,class O = typename is_chained_base<U>::value             \
+         >                                                         \
+struct template_name : template_name##2<T, U, B> {};               \
+                                                                   \
+template<class T, class U, class B>                                \
+struct template_name<T, U, B, ::pdalboost::detail::true_t>             \
+  : template_name##1<T, U> {};                                     \
+                                                                   \
+template <class T, class B>                                        \
+struct template_name<T, T, B, ::pdalboost::detail::false_t>            \
+  : template_name##1<T, B> {};                                     \
+                                                                   \
+template<class T, class U, class B, class O>                       \
+struct is_chained_base< ::pdalboost::template_name<T, U, B, O> > {     \
+  typedef ::pdalboost::detail::true_t value;                           \
+};                                                                 \
+                                                                   \
+BOOST_OPERATOR_TEMPLATE2(template_name##2)                         \
+BOOST_OPERATOR_TEMPLATE1(template_name##1)
+
+
+
+namespace pdalboost {
+    
+BOOST_OPERATOR_TEMPLATE(less_than_comparable)
+BOOST_OPERATOR_TEMPLATE(equality_comparable)
+BOOST_OPERATOR_TEMPLATE(multipliable)
+BOOST_OPERATOR_TEMPLATE(addable)
+BOOST_OPERATOR_TEMPLATE(subtractable)
+BOOST_OPERATOR_TEMPLATE2(subtractable2_left)
+BOOST_OPERATOR_TEMPLATE(dividable)
+BOOST_OPERATOR_TEMPLATE2(dividable2_left)
+BOOST_OPERATOR_TEMPLATE(modable)
+BOOST_OPERATOR_TEMPLATE2(modable2_left)
+BOOST_OPERATOR_TEMPLATE(xorable)
+BOOST_OPERATOR_TEMPLATE(andable)
+BOOST_OPERATOR_TEMPLATE(orable)
+
+BOOST_OPERATOR_TEMPLATE1(incrementable)
+BOOST_OPERATOR_TEMPLATE1(decrementable)
+
+BOOST_OPERATOR_TEMPLATE2(dereferenceable)
+BOOST_OPERATOR_TEMPLATE3(indexable)
+
+BOOST_OPERATOR_TEMPLATE(left_shiftable)
+BOOST_OPERATOR_TEMPLATE(right_shiftable)
+BOOST_OPERATOR_TEMPLATE(equivalent)
+BOOST_OPERATOR_TEMPLATE(partially_ordered)
+
+BOOST_OPERATOR_TEMPLATE(totally_ordered)
+BOOST_OPERATOR_TEMPLATE(additive)
+BOOST_OPERATOR_TEMPLATE(multiplicative)
+BOOST_OPERATOR_TEMPLATE(integer_multiplicative)
+BOOST_OPERATOR_TEMPLATE(arithmetic)
+BOOST_OPERATOR_TEMPLATE(integer_arithmetic)
+BOOST_OPERATOR_TEMPLATE(bitwise)
+BOOST_OPERATOR_TEMPLATE1(unit_steppable)
+BOOST_OPERATOR_TEMPLATE(shiftable)
+BOOST_OPERATOR_TEMPLATE(ring_operators)
+BOOST_OPERATOR_TEMPLATE(ordered_ring_operators)
+BOOST_OPERATOR_TEMPLATE(field_operators)
+BOOST_OPERATOR_TEMPLATE(ordered_field_operators)
+BOOST_OPERATOR_TEMPLATE(euclidian_ring_operators)
+BOOST_OPERATOR_TEMPLATE(ordered_euclidian_ring_operators)
+BOOST_OPERATOR_TEMPLATE(euclidean_ring_operators)
+BOOST_OPERATOR_TEMPLATE(ordered_euclidean_ring_operators)
+BOOST_OPERATOR_TEMPLATE2(input_iteratable)
+BOOST_OPERATOR_TEMPLATE1(output_iteratable)
+BOOST_OPERATOR_TEMPLATE2(forward_iteratable)
+BOOST_OPERATOR_TEMPLATE2(bidirectional_iteratable)
+BOOST_OPERATOR_TEMPLATE4(random_access_iteratable)
+
+#undef BOOST_OPERATOR_TEMPLATE
+#undef BOOST_OPERATOR_TEMPLATE4
+#undef BOOST_OPERATOR_TEMPLATE3
+#undef BOOST_OPERATOR_TEMPLATE2
+#undef BOOST_OPERATOR_TEMPLATE1
+#undef BOOST_IMPORT_TEMPLATE1
+#undef BOOST_IMPORT_TEMPLATE2
+#undef BOOST_IMPORT_TEMPLATE3
+#undef BOOST_IMPORT_TEMPLATE4
+
+// The following 'operators' classes can only be used portably if the derived class
+// declares ALL of the required member operators.
+template <class T, class U>
+struct operators2
+    : totally_ordered2<T,U
+    , integer_arithmetic2<T,U
+    , bitwise2<T,U
+      > > > {};
+
+template <class T, class U = T>
+struct operators : operators2<T, U> {};
+
+template <class T> struct operators<T, T>
+    : totally_ordered<T
+    , integer_arithmetic<T
+    , bitwise<T
+    , unit_steppable<T
+      > > > > {};
+
+//  Iterator helper classes (contributed by Jeremy Siek) -------------------//
+//  (Input and output iterator helpers contributed by Daryle Walker) -------//
+//  (Changed to use combined operator classes by Daryle Walker) ------------//
+template <class T,
+          class V,
+          class D = std::ptrdiff_t,
+          class P = V const *,
+          class R = V const &>
+struct input_iterator_helper
+  : input_iteratable<T, P
+  , std::iterator<std::input_iterator_tag, V, D, P, R
+    > > {};
+
+template<class T>
+struct output_iterator_helper
+  : output_iteratable<T
+  , std::iterator<std::output_iterator_tag, void, void, void, void
+  > >
+{
+  T& operator*()  { return static_cast<T&>(*this); }
+  T& operator++() { return static_cast<T&>(*this); }
+};
+
+template <class T,
+          class V,
+          class D = std::ptrdiff_t,
+          class P = V*,
+          class R = V&>
+struct forward_iterator_helper
+  : forward_iteratable<T, P
+  , std::iterator<std::forward_iterator_tag, V, D, P, R
+    > > {};
+
+template <class T,
+          class V,
+          class D = std::ptrdiff_t,
+          class P = V*,
+          class R = V&>
+struct bidirectional_iterator_helper
+  : bidirectional_iteratable<T, P
+  , std::iterator<std::bidirectional_iterator_tag, V, D, P, R
+    > > {};
+
+template <class T,
+          class V, 
+          class D = std::ptrdiff_t,
+          class P = V*,
+          class R = V&>
+struct random_access_iterator_helper
+  : random_access_iteratable<T, P, D, R
+  , std::iterator<std::random_access_iterator_tag, V, D, P, R
+    > >
+{
+  friend D requires_difference_operator(const T& x, const T& y) {
+    return x - y;
+  }
+}; // random_access_iterator_helper
+
+} // namespace pdalboost
+
+#if defined(__sgi) && !defined(__GNUC__)
+#pragma reset woff 1234
+#endif
+
+#endif // BOOST_OPERATORS_HPP
diff --git a/vendor/pdalboost/boost/optional.hpp b/vendor/pdalboost/boost/optional.hpp
new file mode 100644
index 0000000..40cf12e
--- /dev/null
+++ b/vendor/pdalboost/boost/optional.hpp
@@ -0,0 +1,18 @@
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+//
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/optional for documentation.
+//
+// You are welcome to contact the author at:
+//  fernando_cacciola at hotmail.com
+//
+#ifndef BOOST_OPTIONAL_FLC_19NOV2002_HPP
+#define BOOST_OPTIONAL_FLC_19NOV2002_HPP
+
+#include "boost/optional/optional.hpp"
+
+#endif
+
diff --git a/vendor/pdalboost/boost/optional/bad_optional_access.hpp b/vendor/pdalboost/boost/optional/bad_optional_access.hpp
new file mode 100644
index 0000000..b7b8b4c
--- /dev/null
+++ b/vendor/pdalboost/boost/optional/bad_optional_access.hpp
@@ -0,0 +1,32 @@
+// Copyright (C) 2014, Andrzej Krzemienski.
+//
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/optional for documentation.
+//
+// You are welcome to contact the author at:
+//  akrzemi1 at gmail.com
+//
+#ifndef BOOST_BAD_OPTIONAL_ACCESS_22MAY2014_HPP
+#define BOOST_BAD_OPTIONAL_ACCESS_22MAY2014_HPP
+
+#include <stdexcept>
+#if __cplusplus < 201103L
+#include <string> // to make converting-ctor std::string(char const*) visible
+#endif
+
+namespace pdalboost {
+
+class bad_optional_access : public std::logic_error
+{
+public:
+  bad_optional_access()
+    : std::logic_error("Attempted to access the value of an uninitialized optional object.")
+    {}
+};
+
+} // namespace pdalboost
+
+#endif
diff --git a/vendor/pdalboost/boost/optional/optional.hpp b/vendor/pdalboost/boost/optional/optional.hpp
new file mode 100644
index 0000000..b7f5f75
--- /dev/null
+++ b/vendor/pdalboost/boost/optional/optional.hpp
@@ -0,0 +1,1567 @@
+// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
+// Copyright (C) 2014, 2015 Andrzej Krzemienski.
+//
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/optional for documentation.
+//
+// You are welcome to contact the author at:
+//  fernando_cacciola at hotmail.com
+//
+// Revisions:
+// 27 Apr 2008 (improved swap) Fernando Cacciola, Niels Dekker, Thorsten Ottosen
+// 05 May 2014 (Added move semantics) Andrzej Krzemienski
+//
+#ifndef BOOST_OPTIONAL_OPTIONAL_FLC_19NOV2002_HPP
+#define BOOST_OPTIONAL_OPTIONAL_FLC_19NOV2002_HPP
+
+#include <new>
+#include <iosfwd>
+
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/core/addressof.hpp>
+#include <boost/core/enable_if.hpp>
+#include <boost/core/explicit_operator_bool.hpp>
+#include <boost/core/swap.hpp>
+#include <boost/optional/bad_optional_access.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/type.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+#include <boost/type_traits/has_nothrow_constructor.hpp>
+#include <boost/type_traits/type_with_alignment.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/decay.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/type_traits/is_lvalue_reference.hpp>
+#include <boost/type_traits/is_nothrow_move_assignable.hpp>
+#include <boost/type_traits/is_nothrow_move_constructible.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_rvalue_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/detail/reference_content.hpp>
+#include <boost/move/utility.hpp>
+#include <boost/none.hpp>
+#include <boost/utility/compare_pointees.hpp>
+
+#include <boost/optional/optional_fwd.hpp>
+
+#if (defined BOOST_NO_CXX11_RVALUE_REFERENCES) || (defined BOOST_OPTIONAL_CONFIG_NO_RVALUE_REFERENCES)
+#define BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+#endif
+
+#if BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION,<=700)
+// AFAICT only Intel 7 correctly resolves the overload set
+// that includes the in-place factory taking functions,
+// so for the other icc versions, in-place factory support
+// is disabled
+#define BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
+#endif
+
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x551)
+// BCB (5.5.1) cannot parse the nested template struct in an inplace factory.
+#define BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
+#endif
+
+#if !defined(BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT) \
+    && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581) )
+// BCB (up to 5.64) has the following bug:
+//   If there is a member function/operator template of the form
+//     template<class Expr> mfunc( Expr expr ) ;
+//   some calls are resolved to this even if there are other better matches.
+//   The effect of this bug is that calls to converting ctors and assignments
+//   are incrorrectly sink to this general catch-all member function template as shown above.
+#define BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION
+#endif
+
+#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
+// GCC since 3.3 has may_alias attribute that helps to alleviate optimizer issues with
+// regard to violation of the strict aliasing rules. The optional< T > storage type is marked
+// with this attribute in order to let the compiler know that it will alias objects of type T
+// and silence compilation warnings.
+#define BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS
+#endif
+
+// Daniel Wallin discovered that bind/apply.hpp badly interacts with the apply<>
+// member template of a factory as used in the optional<> implementation.
+// He proposed this simple fix which is to move the call to apply<> outside
+// namespace pdalboost.
+namespace pdalboost_optional_detail
+{
+  template <class T, class Factory>
+  inline void construct(Factory const& factory, void* address)
+  {
+    factory.BOOST_NESTED_TEMPLATE apply<T>(address);
+  }
+}
+
+
+namespace pdalboost {
+
+class in_place_factory_base ;
+class typed_in_place_factory_base ;
+
+// This forward is needed to refer to namespace scope swap from the member swap
+template<class T> void swap ( optional<T>& x, optional<T>& y );
+
+namespace optional_detail {
+// This local class is used instead of that in "aligned_storage.hpp"
+// because I've found the 'official' class to ICE BCB5.5
+// when some types are used with optional<>
+// (due to sizeof() passed down as a non-type template parameter)
+template <class T>
+class aligned_storage
+{
+    // Borland ICEs if unnamed unions are used for this!
+    union
+    // This works around GCC warnings about breaking strict aliasing rules when casting storage address to T*
+#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)
+    __attribute__((__may_alias__))
+#endif
+    dummy_u
+    {
+        char data[ sizeof(T) ];
+        BOOST_DEDUCED_TYPENAME type_with_alignment<
+          ::pdalboost::alignment_of<T>::value >::type aligner_;
+    } dummy_ ;
+
+  public:
+
+#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)
+    void const* address() const { return &dummy_; }
+    void      * address()       { return &dummy_; }
+#else
+    void const* address() const { return dummy_.data; }
+    void      * address()       { return dummy_.data; }
+#endif
+} ;
+
+template<class T>
+struct types_when_isnt_ref
+{
+  typedef T const& reference_const_type ;
+  typedef T &      reference_type ;
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+  typedef T &&     rval_reference_type ;
+  typedef T &&     reference_type_of_temporary_wrapper;
+#ifdef BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES
+  // GCC 4.4 has support for an early draft of rvalue references. The conforming version below
+  // causes warnings about returning references to a temporary.
+  static T&& move(T&& r) { return r; }
+#else
+  static rval_reference_type move(reference_type r) { return pdalboost::move(r); }
+#endif
+#endif
+  typedef T const* pointer_const_type ;
+  typedef T *      pointer_type ;
+  typedef T const& argument_type ;
+} ;
+
+template<class T>
+struct types_when_is_ref
+{
+  typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type raw_type ;
+
+  typedef raw_type&  reference_const_type ;
+  typedef raw_type&  reference_type ;
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+  typedef BOOST_DEDUCED_TYPENAME remove_const<raw_type>::type&& rval_reference_type ;
+  typedef raw_type&  reference_type_of_temporary_wrapper;
+  static reference_type move(reference_type r) { return r; }
+#endif
+  typedef raw_type*  pointer_const_type ;
+  typedef raw_type*  pointer_type ;
+  typedef raw_type&  argument_type ;
+} ;
+
+template <class To, class From>
+void prevent_binding_rvalue_ref_to_optional_lvalue_ref()
+{
+#ifndef BOOST_OPTIONAL_CONFIG_ALLOW_BINDING_TO_RVALUES
+  BOOST_STATIC_ASSERT_MSG(
+    !pdalboost::is_lvalue_reference<To>::value || !pdalboost::is_rvalue_reference<From>::value, 
+    "binding rvalue references to optional lvalue references is disallowed");
+#endif    
+}
+
+struct optional_tag {} ;
+
+template<class T>
+class optional_base : public optional_tag
+{
+  private :
+
+    typedef
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+    BOOST_DEDUCED_TYPENAME
+#endif
+    ::pdalboost::detail::make_reference_content<T>::type internal_type ;
+
+    typedef aligned_storage<internal_type> storage_type ;
+
+    typedef types_when_isnt_ref<T> types_when_not_ref ;
+    typedef types_when_is_ref<T>   types_when_ref   ;
+
+    typedef optional_base<T> this_type ;
+
+  protected :
+
+    typedef T value_type ;
+
+    typedef mpl::true_  is_reference_tag ;
+    typedef mpl::false_ is_not_reference_tag ;
+
+    typedef BOOST_DEDUCED_TYPENAME is_reference<T>::type is_reference_predicate ;
+
+  public:
+    typedef BOOST_DEDUCED_TYPENAME mpl::if_<is_reference_predicate,types_when_ref,types_when_not_ref>::type types ;
+
+  protected:
+    typedef BOOST_DEDUCED_TYPENAME types::reference_type       reference_type ;
+    typedef BOOST_DEDUCED_TYPENAME types::reference_const_type reference_const_type ;
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    typedef BOOST_DEDUCED_TYPENAME types::rval_reference_type  rval_reference_type ;
+    typedef BOOST_DEDUCED_TYPENAME types::reference_type_of_temporary_wrapper reference_type_of_temporary_wrapper ;
+#endif
+    typedef BOOST_DEDUCED_TYPENAME types::pointer_type         pointer_type ;
+    typedef BOOST_DEDUCED_TYPENAME types::pointer_const_type   pointer_const_type ;
+    typedef BOOST_DEDUCED_TYPENAME types::argument_type        argument_type ;
+
+    // Creates an optional<T> uninitialized.
+    // No-throw
+    optional_base()
+      :
+      m_initialized(false) {}
+
+    // Creates an optional<T> uninitialized.
+    // No-throw
+    optional_base ( none_t )
+      :
+      m_initialized(false) {}
+
+    // Creates an optional<T> initialized with 'val'.
+    // Can throw if T::T(T const&) does
+    optional_base ( argument_type val )
+      :
+      m_initialized(false)
+    {
+      construct(val);
+    }
+
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    // move-construct an optional<T> initialized from an rvalue-ref to 'val'.
+    // Can throw if T::T(T&&) does
+    optional_base ( rval_reference_type val )
+      :
+      m_initialized(false)
+    {
+      construct( pdalboost::move(val) );
+    }
+#endif
+
+    // Creates an optional<T> initialized with 'val' IFF cond is true, otherwise creates an uninitialzed optional<T>.
+    // Can throw if T::T(T const&) does
+    optional_base ( bool cond, argument_type val )
+      :
+      m_initialized(false)
+    {
+      if ( cond )
+        construct(val);
+    }
+
+    // Creates a deep copy of another optional<T>
+    // Can throw if T::T(T const&) does
+    optional_base ( optional_base const& rhs )
+      :
+      m_initialized(false)
+    {
+      if ( rhs.is_initialized() )
+        construct(rhs.get_impl());
+    }
+
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    // Creates a deep move of another optional<T>
+    // Can throw if T::T(T&&) does
+    optional_base ( optional_base&& rhs )
+      :
+      m_initialized(false)
+    {
+      if ( rhs.is_initialized() )
+        construct( pdalboost::move(rhs.get_impl()) );
+    }
+#endif
+
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+
+    template<class Expr, class PtrExpr>
+    explicit optional_base ( Expr&& expr, PtrExpr const* tag )
+      :
+      m_initialized(false)
+    {
+      construct(pdalboost::forward<Expr>(expr),tag);
+    }
+
+#else
+    // This is used for both converting and in-place constructions.
+    // Derived classes use the 'tag' to select the appropriate
+    // implementation (the correct 'construct()' overload)
+    template<class Expr>
+    explicit optional_base ( Expr const& expr, Expr const* tag )
+      :
+      m_initialized(false)
+    {
+      construct(expr,tag);
+    }
+
+#endif
+
+
+    // No-throw (assuming T::~T() doesn't)
+    ~optional_base() { destroy() ; }
+
+    // Assigns from another optional<T> (deep-copies the rhs value)
+    void assign ( optional_base const& rhs )
+    {
+      if (is_initialized())
+      {
+        if ( rhs.is_initialized() )
+             assign_value(rhs.get_impl(), is_reference_predicate() );
+        else destroy();
+      }
+      else
+      {
+        if ( rhs.is_initialized() )
+          construct(rhs.get_impl());
+      }
+    }
+    
+#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    // Assigns from another optional<T> (deep-moves the rhs value)
+    void assign ( optional_base&& rhs )
+    {
+      if (is_initialized())
+      {
+        if ( rhs.is_initialized() )
+             assign_value(pdalboost::move(rhs.get_impl()), is_reference_predicate() );
+        else destroy();
+      }
+      else
+      {
+        if ( rhs.is_initialized() )
+          construct(pdalboost::move(rhs.get_impl()));
+      }
+    }
+#endif 
+
+    // Assigns from another _convertible_ optional<U> (deep-copies the rhs value)
+    template<class U>
+    void assign ( optional<U> const& rhs )
+    {
+      if (is_initialized())
+      {
+        if ( rhs.is_initialized() )
+#ifndef BOOST_OPTIONAL_CONFIG_RESTORE_ASSIGNMENT_OF_NONCONVERTIBLE_TYPES
+          assign_value(rhs.get(), is_reference_predicate() );
+#else
+          assign_value(static_cast<value_type>(rhs.get()), is_reference_predicate() );
+#endif
+          
+        else destroy();
+      }
+      else
+      {
+        if ( rhs.is_initialized() )
+#ifndef BOOST_OPTIONAL_CONFIG_RESTORE_ASSIGNMENT_OF_NONCONVERTIBLE_TYPES
+          construct(rhs.get());
+#else
+          construct(static_cast<value_type>(rhs.get()));
+#endif
+      }
+    }
+
+#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    // move-assigns from another _convertible_ optional<U> (deep-moves from the rhs value)
+    template<class U>
+    void assign ( optional<U>&& rhs )
+    {
+      typedef BOOST_DEDUCED_TYPENAME optional<U>::rval_reference_type ref_type;
+      if (is_initialized())
+      {
+        if ( rhs.is_initialized() )
+             assign_value(static_cast<ref_type>(rhs.get()), is_reference_predicate() );
+        else destroy();
+      }
+      else
+      {
+        if ( rhs.is_initialized() )
+          construct(static_cast<ref_type>(rhs.get()));
+      }
+    }
+#endif
+    
+    // Assigns from a T (deep-copies the rhs value)
+    void assign ( argument_type val )
+    {
+      if (is_initialized())
+           assign_value(val, is_reference_predicate() );
+      else construct(val);
+    }
+    
+#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    // Assigns from a T (deep-moves the rhs value)
+    void assign ( rval_reference_type val )
+    {
+      if (is_initialized())
+           assign_value( pdalboost::move(val), is_reference_predicate() );
+      else construct( pdalboost::move(val) );
+    }
+#endif
+
+    // Assigns from "none", destroying the current value, if any, leaving this UNINITIALIZED
+    // No-throw (assuming T::~T() doesn't)
+    void assign ( none_t ) BOOST_NOEXCEPT { destroy(); }
+
+#ifndef BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
+
+#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    template<class Expr, class ExprPtr>
+    void assign_expr ( Expr&& expr, ExprPtr const* tag )
+    {
+      if (is_initialized())
+        assign_expr_to_initialized(pdalboost::forward<Expr>(expr),tag);
+      else construct(pdalboost::forward<Expr>(expr),tag);
+    }
+#else
+    template<class Expr>
+    void assign_expr ( Expr const& expr, Expr const* tag )
+    {
+      if (is_initialized())
+        assign_expr_to_initialized(expr,tag);
+      else construct(expr,tag);
+    }
+#endif
+
+#endif
+
+  public :
+
+    // **DEPPRECATED** Destroys the current value, if any, leaving this UNINITIALIZED
+    // No-throw (assuming T::~T() doesn't)
+    void reset() BOOST_NOEXCEPT { destroy(); }
+
+    // **DEPPRECATED** Replaces the current value -if any- with 'val'
+    void reset ( argument_type val ) { assign(val); }
+
+    // Returns a pointer to the value if this is initialized, otherwise,
+    // returns NULL.
+    // No-throw
+    pointer_const_type get_ptr() const { return m_initialized ? get_ptr_impl() : 0 ; }
+    pointer_type       get_ptr()       { return m_initialized ? get_ptr_impl() : 0 ; }
+
+    bool is_initialized() const { return m_initialized ; }
+
+  protected :
+
+    void construct ( argument_type val )
+     {
+       ::new (m_storage.address()) internal_type(val) ;
+       m_initialized = true ;
+     }
+     
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    void construct ( rval_reference_type val )
+     {
+       ::new (m_storage.address()) internal_type( types::move(val) ) ;
+       m_initialized = true ;
+     }
+#endif
+
+
+#if (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES) && (!defined BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+    // Constructs in-place
+    // upon exception *this is always uninitialized
+    template<class... Args>
+    void emplace_assign ( Args&&... args )
+     {
+       destroy();
+       ::new (m_storage.address()) internal_type( pdalboost::forward<Args>(args)... );
+       m_initialized = true ;
+     }
+#elif (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES)
+    template<class Arg>
+    void emplace_assign ( Arg&& arg )
+     {
+       destroy();
+       ::new (m_storage.address()) internal_type( pdalboost::forward<Arg>(arg) );
+       m_initialized = true ;
+     }
+     
+    void emplace_assign ()
+     {
+       destroy();
+       ::new (m_storage.address()) internal_type();
+       m_initialized = true ;
+     }
+#else
+    template<class Arg>
+    void emplace_assign ( const Arg& arg )
+     {
+       destroy();
+       ::new (m_storage.address()) internal_type( arg );
+       m_initialized = true ;
+     }
+     
+    template<class Arg>
+    void emplace_assign ( Arg& arg )
+     {
+       destroy();
+       ::new (m_storage.address()) internal_type( arg );
+       m_initialized = true ;
+     }
+     
+    void emplace_assign ()
+     {
+       destroy();
+       ::new (m_storage.address()) internal_type();
+       m_initialized = true ;
+     }
+#endif
+
+#ifndef BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
+
+#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    // Constructs in-place using the given factory
+    template<class Expr>
+    void construct ( Expr&& factory, in_place_factory_base const* )
+     {
+       BOOST_STATIC_ASSERT ( ::pdalboost::mpl::not_<is_reference_predicate>::value ) ;
+       pdalboost_optional_detail::construct<value_type>(factory, m_storage.address());
+       m_initialized = true ;
+     }
+
+    // Constructs in-place using the given typed factory
+    template<class Expr>
+    void construct ( Expr&& factory, typed_in_place_factory_base const* )
+     {
+       BOOST_STATIC_ASSERT ( ::pdalboost::mpl::not_<is_reference_predicate>::value ) ;
+       factory.apply(m_storage.address()) ;
+       m_initialized = true ;
+     }
+
+    template<class Expr>
+    void assign_expr_to_initialized ( Expr&& factory, in_place_factory_base const* tag )
+     {
+       destroy();
+       construct(factory,tag);
+     }
+
+    // Constructs in-place using the given typed factory
+    template<class Expr>
+    void assign_expr_to_initialized ( Expr&& factory, typed_in_place_factory_base const* tag )
+     {
+       destroy();
+       construct(factory,tag);
+     }
+
+#else
+    // Constructs in-place using the given factory
+    template<class Expr>
+    void construct ( Expr const& factory, in_place_factory_base const* )
+     {
+       BOOST_STATIC_ASSERT ( ::pdalboost::mpl::not_<is_reference_predicate>::value ) ;
+       pdalboost_optional_detail::construct<value_type>(factory, m_storage.address());
+       m_initialized = true ;
+     }
+
+    // Constructs in-place using the given typed factory
+    template<class Expr>
+    void construct ( Expr const& factory, typed_in_place_factory_base const* )
+     {
+       BOOST_STATIC_ASSERT ( ::pdalboost::mpl::not_<is_reference_predicate>::value ) ;
+       factory.apply(m_storage.address()) ;
+       m_initialized = true ;
+     }
+
+    template<class Expr>
+    void assign_expr_to_initialized ( Expr const& factory, in_place_factory_base const* tag )
+     {
+       destroy();
+       construct(factory,tag);
+     }
+
+    // Constructs in-place using the given typed factory
+    template<class Expr>
+    void assign_expr_to_initialized ( Expr const& factory, typed_in_place_factory_base const* tag )
+     {
+       destroy();
+       construct(factory,tag);
+     }
+#endif
+
+#endif
+
+#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    // Constructs using any expression implicitly convertible to the single argument
+    // of a one-argument T constructor.
+    // Converting constructions of optional<T> from optional<U> uses this function with
+    // 'Expr' being of type 'U' and relying on a converting constructor of T from U.
+    template<class Expr>
+    void construct ( Expr&& expr, void const* )
+    {
+      new (m_storage.address()) internal_type(pdalboost::forward<Expr>(expr)) ;
+      m_initialized = true ;
+    }
+
+    // Assigns using a form any expression implicitly convertible to the single argument
+    // of a T's assignment operator.
+    // Converting assignments of optional<T> from optional<U> uses this function with
+    // 'Expr' being of type 'U' and relying on a converting assignment of T from U.
+    template<class Expr>
+    void assign_expr_to_initialized ( Expr&& expr, void const* )
+    {
+      assign_value(pdalboost::forward<Expr>(expr), is_reference_predicate());
+    }
+#else
+    // Constructs using any expression implicitly convertible to the single argument
+    // of a one-argument T constructor.
+    // Converting constructions of optional<T> from optional<U> uses this function with
+    // 'Expr' being of type 'U' and relying on a converting constructor of T from U.
+    template<class Expr>
+    void construct ( Expr const& expr, void const* )
+     {
+       new (m_storage.address()) internal_type(expr) ;
+       m_initialized = true ;
+     }
+
+    // Assigns using a form any expression implicitly convertible to the single argument
+    // of a T's assignment operator.
+    // Converting assignments of optional<T> from optional<U> uses this function with
+    // 'Expr' being of type 'U' and relying on a converting assignment of T from U.
+    template<class Expr>
+    void assign_expr_to_initialized ( Expr const& expr, void const* )
+     {
+       assign_value(expr, is_reference_predicate());
+     }
+
+#endif
+
+#ifdef BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION
+    // BCB5.64 (and probably lower versions) workaround.
+    //   The in-place factories are supported by means of catch-all constructors
+    //   and assignment operators (the functions are parameterized in terms of
+    //   an arbitrary 'Expr' type)
+    //   This compiler incorrectly resolves the overload set and sinks optional<T> and optional<U>
+    //   to the 'Expr'-taking functions even though explicit overloads are present for them.
+    //   Thus, the following overload is needed to properly handle the case when the 'lhs'
+    //   is another optional.
+    //
+    // For VC<=70 compilers this workaround dosen't work becasue the comnpiler issues and error
+    // instead of choosing the wrong overload
+    //
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    // Notice that 'Expr' will be optional<T> or optional<U> (but not optional_base<..>)
+    template<class Expr>
+    void construct ( Expr&& expr, optional_tag const* )
+     {
+       if ( expr.is_initialized() )
+       {
+         // An exception can be thrown here.
+         // It it happens, THIS will be left uninitialized.
+         new (m_storage.address()) internal_type(types::move(expr.get())) ;
+         m_initialized = true ;
+       }
+     }
+#else
+    // Notice that 'Expr' will be optional<T> or optional<U> (but not optional_base<..>)
+    template<class Expr>
+    void construct ( Expr const& expr, optional_tag const* )
+     {
+       if ( expr.is_initialized() )
+       {
+         // An exception can be thrown here.
+         // It it happens, THIS will be left uninitialized.
+         new (m_storage.address()) internal_type(expr.get()) ;
+         m_initialized = true ;
+       }
+     }
+#endif
+#endif // defined BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION
+
+    void assign_value ( argument_type val, is_not_reference_tag ) { get_impl() = val; }
+    void assign_value ( argument_type val, is_reference_tag     ) { construct(val); }
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    void assign_value ( rval_reference_type val, is_not_reference_tag ) { get_impl() = static_cast<rval_reference_type>(val); }
+    void assign_value ( rval_reference_type val, is_reference_tag     ) { construct( static_cast<rval_reference_type>(val) ); }
+#endif
+
+    void destroy()
+    {
+      if ( m_initialized )
+        destroy_impl(is_reference_predicate()) ;
+    }
+
+    reference_const_type get_impl() const { return dereference(get_object(), is_reference_predicate() ) ; }
+    reference_type       get_impl()       { return dereference(get_object(), is_reference_predicate() ) ; }
+
+    pointer_const_type get_ptr_impl() const { return cast_ptr(get_object(), is_reference_predicate() ) ; }
+    pointer_type       get_ptr_impl()       { return cast_ptr(get_object(), is_reference_predicate() ) ; }
+
+  private :
+
+    // internal_type can be either T or reference_content<T>
+#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS)
+    // This workaround is supposed to silence GCC warnings about broken strict aliasing rules
+    internal_type const* get_object() const
+    {
+        union { void const* ap_pvoid; internal_type const* as_ptype; } caster = { m_storage.address() };
+        return caster.as_ptype;
+    }
+    internal_type *      get_object()
+    {
+        union { void* ap_pvoid; internal_type* as_ptype; } caster = { m_storage.address() };
+        return caster.as_ptype;
+    }
+#else
+    internal_type const* get_object() const { return static_cast<internal_type const*>(m_storage.address()); }
+    internal_type *      get_object()       { return static_cast<internal_type *>     (m_storage.address()); }
+#endif
+
+    // reference_content<T> lacks an implicit conversion to T&, so the following is needed to obtain a proper reference.
+    reference_const_type dereference( internal_type const* p, is_not_reference_tag ) const { return *p ; }
+    reference_type       dereference( internal_type*       p, is_not_reference_tag )       { return *p ; }
+    reference_const_type dereference( internal_type const* p, is_reference_tag     ) const { return p->get() ; }
+    reference_type       dereference( internal_type*       p, is_reference_tag     )       { return p->get() ; }
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))
+    void destroy_impl ( is_not_reference_tag ) { get_ptr_impl()->internal_type::~internal_type() ; m_initialized = false ; }
+#else
+    void destroy_impl ( is_not_reference_tag ) { get_ptr_impl()->~T() ; m_initialized = false ; }
+#endif
+
+    void destroy_impl ( is_reference_tag     ) { m_initialized = false ; }
+
+    // If T is of reference type, trying to get a pointer to the held value must result in a compile-time error.
+    // Decent compilers should disallow conversions from reference_content<T>* to T*, but just in case,
+    // the following olverloads are used to filter out the case and guarantee an error in case of T being a reference.
+    pointer_const_type cast_ptr( internal_type const* p, is_not_reference_tag ) const { return p ; }
+    pointer_type       cast_ptr( internal_type *      p, is_not_reference_tag )       { return p ; }
+    pointer_const_type cast_ptr( internal_type const* p, is_reference_tag     ) const { return &p->get() ; }
+    pointer_type       cast_ptr( internal_type *      p, is_reference_tag     )       { return &p->get() ; }
+
+    bool m_initialized ;
+    storage_type m_storage ;
+} ;
+
+} // namespace optional_detail
+
+template<class T>
+class optional : public optional_detail::optional_base<T>
+{
+    typedef optional_detail::optional_base<T> base ;
+
+  public :
+
+    typedef optional<T> this_type ;
+
+    typedef BOOST_DEDUCED_TYPENAME base::value_type           value_type ;
+    typedef BOOST_DEDUCED_TYPENAME base::reference_type       reference_type ;
+    typedef BOOST_DEDUCED_TYPENAME base::reference_const_type reference_const_type ;
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    typedef BOOST_DEDUCED_TYPENAME base::rval_reference_type  rval_reference_type ;
+    typedef BOOST_DEDUCED_TYPENAME base::reference_type_of_temporary_wrapper reference_type_of_temporary_wrapper ;
+#endif
+    typedef BOOST_DEDUCED_TYPENAME base::pointer_type         pointer_type ;
+    typedef BOOST_DEDUCED_TYPENAME base::pointer_const_type   pointer_const_type ;
+    typedef BOOST_DEDUCED_TYPENAME base::argument_type        argument_type ;
+
+    // Creates an optional<T> uninitialized.
+    // No-throw
+    optional() BOOST_NOEXCEPT : base() {}
+
+    // Creates an optional<T> uninitialized.
+    // No-throw
+    optional( none_t none_ ) BOOST_NOEXCEPT : base(none_) {}
+
+    // Creates an optional<T> initialized with 'val'.
+    // Can throw if T::T(T const&) does
+    optional ( argument_type val ) : base(val) {}
+
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    // Creates an optional<T> initialized with 'move(val)'.
+    // Can throw if T::T(T &&) does
+    optional ( rval_reference_type val ) : base( pdalboost::forward<T>(val) ) 
+      {optional_detail::prevent_binding_rvalue_ref_to_optional_lvalue_ref<T, rval_reference_type>();}
+#endif
+
+    // Creates an optional<T> initialized with 'val' IFF cond is true, otherwise creates an uninitialized optional.
+    // Can throw if T::T(T const&) does
+    optional ( bool cond, argument_type val ) : base(cond,val) {}
+
+    // NOTE: MSVC needs templated versions first
+
+    // Creates a deep copy of another convertible optional<U>
+    // Requires a valid conversion from U to T.
+    // Can throw if T::T(U const&) does
+    template<class U>
+    explicit optional ( optional<U> const& rhs )
+      :
+      base()
+    {
+      if ( rhs.is_initialized() )
+        this->construct(rhs.get());
+    }
+    
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    // Creates a deep move of another convertible optional<U>
+    // Requires a valid conversion from U to T.
+    // Can throw if T::T(U&&) does
+    template<class U>
+    explicit optional ( optional<U> && rhs )
+      :
+      base()
+    {
+      if ( rhs.is_initialized() )
+        this->construct( pdalboost::move(rhs.get()) );
+    }
+#endif
+
+#ifndef BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
+    // Creates an optional<T> with an expression which can be either
+    //  (a) An instance of InPlaceFactory (i.e. in_place(a,b,...,n);
+    //  (b) An instance of TypedInPlaceFactory ( i.e. in_place<T>(a,b,...,n);
+    //  (c) Any expression implicitly convertible to the single type
+    //      of a one-argument T's constructor.
+    //  (d*) Weak compilers (BCB) might also resolved Expr as optional<T> and optional<U>
+    //       even though explicit overloads are present for these.
+    // Depending on the above some T ctor is called.
+    // Can throw if the resolved T ctor throws.
+#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+
+
+  template<class Expr>
+  explicit optional ( Expr&& expr, 
+                      BOOST_DEDUCED_TYPENAME pdalboost::disable_if_c<
+                        (pdalboost::is_base_of<optional_detail::optional_tag, BOOST_DEDUCED_TYPENAME pdalboost::decay<Expr>::type>::value) || 
+                        pdalboost::is_same<BOOST_DEDUCED_TYPENAME pdalboost::decay<Expr>::type, none_t>::value >::type* = 0 
+  ) 
+    : base(pdalboost::forward<Expr>(expr),pdalboost::addressof(expr)) 
+    {optional_detail::prevent_binding_rvalue_ref_to_optional_lvalue_ref<T, Expr&&>();}
+
+#else
+    template<class Expr>
+    explicit optional ( Expr const& expr ) : base(expr,pdalboost::addressof(expr)) {}
+#endif // !defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+#endif // !defined BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT
+
+    // Creates a deep copy of another optional<T>
+    // Can throw if T::T(T const&) does
+    optional ( optional const& rhs ) : base( static_cast<base const&>(rhs) ) {}
+
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+	// Creates a deep move of another optional<T>
+	// Can throw if T::T(T&&) does
+	optional ( optional && rhs ) 
+	  BOOST_NOEXCEPT_IF(::pdalboost::is_nothrow_move_constructible<T>::value)
+	  : base( pdalboost::move(rhs) ) 
+	{}
+
+#endif
+   // No-throw (assuming T::~T() doesn't)
+    ~optional() {}
+
+#if !defined(BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT) && !defined(BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION)
+    // Assigns from an expression. See corresponding constructor.
+    // Basic Guarantee: If the resolved T ctor throws, this is left UNINITIALIZED
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+
+    template<class Expr>
+    BOOST_DEDUCED_TYPENAME pdalboost::disable_if_c<
+      pdalboost::is_base_of<optional_detail::optional_tag, BOOST_DEDUCED_TYPENAME pdalboost::decay<Expr>::type>::value || 
+        pdalboost::is_same<BOOST_DEDUCED_TYPENAME pdalboost::decay<Expr>::type, none_t>::value,
+      optional&
+    >::type 
+    operator= ( Expr&& expr )
+      {
+        optional_detail::prevent_binding_rvalue_ref_to_optional_lvalue_ref<T, Expr&&>();
+        this->assign_expr(pdalboost::forward<Expr>(expr),pdalboost::addressof(expr));
+        return *this ;
+      }
+
+#else
+    template<class Expr>
+    optional& operator= ( Expr const& expr )
+      {
+        this->assign_expr(expr,pdalboost::addressof(expr));
+        return *this ;
+      }
+#endif // !defined  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+#endif // !defined(BOOST_OPTIONAL_NO_INPLACE_FACTORY_SUPPORT) && !defined(BOOST_OPTIONAL_WEAK_OVERLOAD_RESOLUTION)
+
+    // Copy-assigns from another convertible optional<U> (converts && deep-copies the rhs value)
+    // Requires a valid conversion from U to T.
+    // Basic Guarantee: If T::T( U const& ) throws, this is left UNINITIALIZED
+    template<class U>
+    optional& operator= ( optional<U> const& rhs )
+      {
+        this->assign(rhs);
+        return *this ;
+      }
+      
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    // Move-assigns from another convertible optional<U> (converts && deep-moves the rhs value)
+    // Requires a valid conversion from U to T.
+    // Basic Guarantee: If T::T( U && ) throws, this is left UNINITIALIZED
+    template<class U>
+    optional& operator= ( optional<U> && rhs )
+      {
+        this->assign(pdalboost::move(rhs));
+        return *this ;
+      }
+#endif
+
+    // Assigns from another optional<T> (deep-copies the rhs value)
+    // Basic Guarantee: If T::T( T const& ) throws, this is left UNINITIALIZED
+    //  (NOTE: On BCB, this operator is not actually called and left is left UNMODIFIED in case of a throw)
+    optional& operator= ( optional const& rhs )
+      {
+        this->assign( static_cast<base const&>(rhs) ) ;
+        return *this ;
+      }
+
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    // Assigns from another optional<T> (deep-moves the rhs value)
+    optional& operator= ( optional && rhs ) 
+	  BOOST_NOEXCEPT_IF(::pdalboost::is_nothrow_move_constructible<T>::value && ::pdalboost::is_nothrow_move_assignable<T>::value)
+      {
+        this->assign( static_cast<base &&>(rhs) ) ;
+        return *this ;
+      }
+#endif
+
+    // Assigns from a T (deep-copies the rhs value)
+    // Basic Guarantee: If T::( T const& ) throws, this is left UNINITIALIZED
+    optional& operator= ( argument_type val )
+      {
+        this->assign( val ) ;
+        return *this ;
+      }
+
+#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    // Assigns from a T (deep-moves the rhs value)
+    optional& operator= ( rval_reference_type val )
+      {
+        optional_detail::prevent_binding_rvalue_ref_to_optional_lvalue_ref<T, rval_reference_type>();
+        this->assign( pdalboost::move(val) ) ;
+        return *this ;
+      }
+#endif
+
+    // Assigns from a "none"
+    // Which destroys the current value, if any, leaving this UNINITIALIZED
+    // No-throw (assuming T::~T() doesn't)
+    optional& operator= ( none_t none_ ) BOOST_NOEXCEPT
+      {
+        this->assign( none_ ) ;
+        return *this ;
+      }
+      
+#if (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES) && (!defined BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+    // Constructs in-place
+    // upon exception *this is always uninitialized
+    template<class... Args>
+    void emplace ( Args&&... args )
+     {
+       this->emplace_assign( pdalboost::forward<Args>(args)... );
+     }
+#elif (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES)
+    template<class Arg>
+    void emplace ( Arg&& arg )
+     {
+       this->emplace_assign( pdalboost::forward<Arg>(arg) );
+     }
+     
+    void emplace ()
+     {
+       this->emplace_assign();
+     }
+#else
+    template<class Arg>
+    void emplace ( const Arg& arg )
+     {
+       this->emplace_assign( arg );
+     }
+     
+    template<class Arg>
+    void emplace ( Arg& arg )
+     {
+       this->emplace_assign( arg );
+     }
+     
+    void emplace ()
+     {
+       this->emplace_assign();
+     }
+#endif
+
+    void swap( optional & arg )
+	  BOOST_NOEXCEPT_IF(::pdalboost::is_nothrow_move_constructible<T>::value && ::pdalboost::is_nothrow_move_assignable<T>::value)
+      {
+        // allow for Koenig lookup
+        pdalboost::swap(*this, arg);
+      }
+
+
+    // Returns a reference to the value if this is initialized, otherwise,
+    // the behaviour is UNDEFINED
+    // No-throw
+    reference_const_type get() const { BOOST_ASSERT(this->is_initialized()) ; return this->get_impl(); }
+    reference_type       get()       { BOOST_ASSERT(this->is_initialized()) ; return this->get_impl(); }
+
+    // Returns a copy of the value if this is initialized, 'v' otherwise
+    reference_const_type get_value_or ( reference_const_type v ) const { return this->is_initialized() ? get() : v ; }
+    reference_type       get_value_or ( reference_type       v )       { return this->is_initialized() ? get() : v ; }
+
+    // Returns a pointer to the value if this is initialized, otherwise,
+    // the behaviour is UNDEFINED
+    // No-throw
+    pointer_const_type operator->() const { BOOST_ASSERT(this->is_initialized()) ; return this->get_ptr_impl() ; }
+    pointer_type       operator->()       { BOOST_ASSERT(this->is_initialized()) ; return this->get_ptr_impl() ; }
+
+    // Returns a reference to the value if this is initialized, otherwise,
+    // the behaviour is UNDEFINED
+    // No-throw
+#if (!defined BOOST_NO_CXX11_REF_QUALIFIERS) && (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES) 
+    reference_const_type operator *() const& { return this->get() ; }
+    reference_type       operator *() &      { return this->get() ; }
+    reference_type_of_temporary_wrapper operator *() && { return base::types::move(this->get()) ; }
+#else
+    reference_const_type operator *() const { return this->get() ; }
+    reference_type       operator *()       { return this->get() ; }
+#endif // !defined BOOST_NO_CXX11_REF_QUALIFIERS
+
+#if (!defined BOOST_NO_CXX11_REF_QUALIFIERS) && (!defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES) 
+    reference_const_type value() const&
+      { 
+        if (this->is_initialized())
+          return this->get() ;
+        else
+          throw_exception(bad_optional_access());
+      }
+      
+    reference_type value() &
+      { 
+        if (this->is_initialized())
+          return this->get() ;
+        else
+          throw_exception(bad_optional_access());
+      }
+      
+    reference_type_of_temporary_wrapper value() &&
+      { 
+        if (this->is_initialized())
+          return base::types::move(this->get()) ;
+        else
+          throw_exception(bad_optional_access());
+      }
+
+#else 
+    reference_const_type value() const
+      { 
+        if (this->is_initialized())
+          return this->get() ;
+        else
+          throw_exception(bad_optional_access());
+      }
+      
+    reference_type value()
+      { 
+        if (this->is_initialized())
+          return this->get() ;
+        else
+          throw_exception(bad_optional_access());
+      }
+#endif
+
+
+#ifndef BOOST_NO_CXX11_REF_QUALIFIERS
+    template <class U>
+    value_type value_or ( U&& v ) const&
+      { 
+        if (this->is_initialized())
+          return get();
+        else
+          return pdalboost::forward<U>(v);
+      }
+    
+    template <class U>
+    value_type value_or ( U&& v ) && 
+      { 
+        if (this->is_initialized())
+          return base::types::move(get());
+        else
+          return pdalboost::forward<U>(v);
+      }
+#elif !defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+    template <class U>
+    value_type value_or ( U&& v ) const 
+      {
+        if (this->is_initialized())
+          return get();
+        else
+          return pdalboost::forward<U>(v);
+      }
+#else
+    template <class U>
+    value_type value_or ( U const& v ) const 
+      { 
+        if (this->is_initialized())
+          return get();
+        else
+          return v;
+      }
+      
+    template <class U>
+    value_type value_or ( U& v ) const 
+      { 
+        if (this->is_initialized())
+          return get();
+        else
+          return v;
+      }
+#endif
+
+
+#ifndef BOOST_NO_CXX11_REF_QUALIFIERS
+    template <typename F>
+    value_type value_or_eval ( F f ) const&
+      {
+        if (this->is_initialized())
+          return get();
+        else
+          return f();
+      }
+      
+    template <typename F>
+    value_type value_or_eval ( F f ) &&
+      {
+        if (this->is_initialized())
+          return base::types::move(get());
+        else
+          return f();
+      }
+#else
+    template <typename F>
+    value_type value_or_eval ( F f ) const
+      {
+        if (this->is_initialized())
+          return get();
+        else
+          return f();
+      }
+#endif
+      
+    bool operator!() const BOOST_NOEXCEPT { return !this->is_initialized() ; }
+    
+    BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
+} ;
+
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+template<class T>
+class optional<T&&>
+{
+  BOOST_STATIC_ASSERT_MSG(sizeof(T) == 0, "Optional rvalue references are illegal.");
+} ;
+#endif
+
+// Returns optional<T>(v)
+template<class T>
+inline
+optional<T> make_optional ( T const& v  )
+{
+  return optional<T>(v);
+}
+
+// Returns optional<T>(cond,v)
+template<class T>
+inline
+optional<T> make_optional ( bool cond, T const& v )
+{
+  return optional<T>(cond,v);
+}
+
+// Returns a reference to the value if this is initialized, otherwise, the behaviour is UNDEFINED.
+// No-throw
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::reference_const_type
+get ( optional<T> const& opt )
+{
+  return opt.get() ;
+}
+
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::reference_type
+get ( optional<T>& opt )
+{
+  return opt.get() ;
+}
+
+// Returns a pointer to the value if this is initialized, otherwise, returns NULL.
+// No-throw
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::pointer_const_type
+get ( optional<T> const* opt )
+{
+  return opt->get_ptr() ;
+}
+
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::pointer_type
+get ( optional<T>* opt )
+{
+  return opt->get_ptr() ;
+}
+
+// Returns a reference to the value if this is initialized, otherwise, the behaviour is UNDEFINED.
+// No-throw
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::reference_const_type
+get_optional_value_or ( optional<T> const& opt, BOOST_DEDUCED_TYPENAME optional<T>::reference_const_type v )
+{
+  return opt.get_value_or(v) ;
+}
+
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::reference_type
+get_optional_value_or ( optional<T>& opt, BOOST_DEDUCED_TYPENAME optional<T>::reference_type v )
+{
+  return opt.get_value_or(v) ;
+}
+
+// Returns a pointer to the value if this is initialized, otherwise, returns NULL.
+// No-throw
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::pointer_const_type
+get_pointer ( optional<T> const& opt )
+{
+  return opt.get_ptr() ;
+}
+
+template<class T>
+inline
+BOOST_DEDUCED_TYPENAME optional<T>::pointer_type
+get_pointer ( optional<T>& opt )
+{
+  return opt.get_ptr() ;
+}
+
+// The following declaration prevents a bug where operator safe-bool is used upon streaming optional object if you forget the IO header.
+template<class CharType, class CharTrait>
+std::basic_ostream<CharType, CharTrait>&
+operator<<(std::basic_ostream<CharType, CharTrait>& os, optional_detail::optional_tag const&)
+{
+  BOOST_STATIC_ASSERT_MSG(sizeof(CharType) == 0, "If you want to output pdalboost::optional, include header <boost/optional/optional_io.hpp>");
+  return os;  
+}
+
+// optional's relational operators ( ==, !=, <, >, <=, >= ) have deep-semantics (compare values).
+// WARNING: This is UNLIKE pointers. Use equal_pointees()/less_pointess() in generic code instead.
+
+
+//
+// optional<T> vs optional<T> cases
+//
+
+template<class T>
+inline
+bool operator == ( optional<T> const& x, optional<T> const& y )
+{ return equal_pointees(x,y); }
+
+template<class T>
+inline
+bool operator < ( optional<T> const& x, optional<T> const& y )
+{ return less_pointees(x,y); }
+
+template<class T>
+inline
+bool operator != ( optional<T> const& x, optional<T> const& y )
+{ return !( x == y ) ; }
+
+template<class T>
+inline
+bool operator > ( optional<T> const& x, optional<T> const& y )
+{ return y < x ; }
+
+template<class T>
+inline
+bool operator <= ( optional<T> const& x, optional<T> const& y )
+{ return !( y < x ) ; }
+
+template<class T>
+inline
+bool operator >= ( optional<T> const& x, optional<T> const& y )
+{ return !( x < y ) ; }
+
+
+//
+// optional<T> vs T cases
+//
+template<class T>
+inline
+bool operator == ( optional<T> const& x, T const& y )
+{ return equal_pointees(x, optional<T>(y)); }
+
+template<class T>
+inline
+bool operator < ( optional<T> const& x, T const& y )
+{ return less_pointees(x, optional<T>(y)); }
+
+template<class T>
+inline
+bool operator != ( optional<T> const& x, T const& y )
+{ return !( x == y ) ; }
+
+template<class T>
+inline
+bool operator > ( optional<T> const& x, T const& y )
+{ return y < x ; }
+
+template<class T>
+inline
+bool operator <= ( optional<T> const& x, T const& y )
+{ return !( y < x ) ; }
+
+template<class T>
+inline
+bool operator >= ( optional<T> const& x, T const& y )
+{ return !( x < y ) ; }
+
+//
+// T vs optional<T> cases
+//
+
+template<class T>
+inline
+bool operator == ( T const& x, optional<T> const& y )
+{ return equal_pointees( optional<T>(x), y ); }
+
+template<class T>
+inline
+bool operator < ( T const& x, optional<T> const& y )
+{ return less_pointees( optional<T>(x), y ); }
+
+template<class T>
+inline
+bool operator != ( T const& x, optional<T> const& y )
+{ return !( x == y ) ; }
+
+template<class T>
+inline
+bool operator > ( T const& x, optional<T> const& y )
+{ return y < x ; }
+
+template<class T>
+inline
+bool operator <= ( T const& x, optional<T> const& y )
+{ return !( y < x ) ; }
+
+template<class T>
+inline
+bool operator >= ( T const& x, optional<T> const& y )
+{ return !( x < y ) ; }
+
+
+//
+// optional<T> vs none cases
+//
+
+template<class T>
+inline
+bool operator == ( optional<T> const& x, none_t ) BOOST_NOEXCEPT
+{ return !x; }
+
+template<class T>
+inline
+bool operator < ( optional<T> const& x, none_t )
+{ return less_pointees(x,optional<T>() ); }
+
+template<class T>
+inline
+bool operator != ( optional<T> const& x, none_t ) BOOST_NOEXCEPT
+{ return bool(x); }
+
+template<class T>
+inline
+bool operator > ( optional<T> const& x, none_t y )
+{ return y < x ; }
+
+template<class T>
+inline
+bool operator <= ( optional<T> const& x, none_t y )
+{ return !( y < x ) ; }
+
+template<class T>
+inline
+bool operator >= ( optional<T> const& x, none_t y )
+{ return !( x < y ) ; }
+
+//
+// none vs optional<T> cases
+//
+
+template<class T>
+inline
+bool operator == ( none_t , optional<T> const& y ) BOOST_NOEXCEPT
+{ return !y; }
+
+template<class T>
+inline
+bool operator < ( none_t , optional<T> const& y )
+{ return less_pointees(optional<T>() ,y); }
+
+template<class T>
+inline
+bool operator != ( none_t, optional<T> const& y ) BOOST_NOEXCEPT
+{ return bool(y); }
+
+template<class T>
+inline
+bool operator > ( none_t x, optional<T> const& y )
+{ return y < x ; }
+
+template<class T>
+inline
+bool operator <= ( none_t x, optional<T> const& y )
+{ return !( y < x ) ; }
+
+template<class T>
+inline
+bool operator >= ( none_t x, optional<T> const& y )
+{ return !( x < y ) ; }
+
+namespace optional_detail {
+
+template<bool use_default_constructor> struct swap_selector;
+
+template<>
+struct swap_selector<true>
+{
+    template<class T>
+    static void optional_swap ( optional<T>& x, optional<T>& y )
+    {
+        const bool hasX = !!x;
+        const bool hasY = !!y;
+
+        if ( !hasX && !hasY )
+            return;
+
+        if( !hasX )
+            x.emplace();
+        else if ( !hasY )
+            y.emplace();
+
+        // Boost.Utility.Swap will take care of ADL and workarounds for broken compilers
+        pdalboost::swap(x.get(),y.get());
+
+        if( !hasX )
+            y = pdalboost::none ;
+        else if( !hasY )
+            x = pdalboost::none ;
+    }
+};
+
+#ifndef BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+template<>
+struct swap_selector<false>
+{
+    template<class T>
+    static void optional_swap ( optional<T>& x, optional<T>& y ) 
+    //BOOST_NOEXCEPT_IF(::pdalboost::is_nothrow_move_constructible<T>::value && BOOST_NOEXCEPT_EXPR(pdalboost::swap(*x, *y)))
+    {
+        if(x)
+        {
+            if (y)
+            {
+                pdalboost::swap(*x, *y);
+            }
+            else
+            {
+                y = pdalboost::move(*x);
+                x = pdalboost::none;
+            }
+        }
+        else
+        {
+            if (y)
+            {
+                x = pdalboost::move(*y);
+                y = pdalboost::none;
+            }
+        }
+    }
+};
+#else
+template<>
+struct swap_selector<false>
+{
+    template<class T>
+    static void optional_swap ( optional<T>& x, optional<T>& y )
+    {
+        const bool hasX = !!x;
+        const bool hasY = !!y;
+
+        if ( !hasX && hasY )
+        {
+            x = y.get();
+            y = pdalboost::none ;
+        }
+        else if ( hasX && !hasY )
+        {
+            y = x.get();
+            x = pdalboost::none ;
+        }
+        else if ( hasX && hasY )
+        {
+            // Boost.Utility.Swap will take care of ADL and workarounds for broken compilers
+            pdalboost::swap(x.get(),y.get());
+        }
+    }
+};
+#endif // !defined BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+
+} // namespace optional_detail
+
+#if (!defined BOOST_NO_CXX11_RVALUE_REFERENCES) && (!defined BOOST_CONFIG_RESTORE_OBSOLETE_SWAP_IMPLEMENTATION)
+
+template<class T>
+struct optional_swap_should_use_default_constructor : pdalboost::false_type {} ;
+
+#else
+
+template<class T>
+struct optional_swap_should_use_default_constructor : has_nothrow_default_constructor<T> {} ;
+
+#endif //BOOST_NO_CXX11_RVALUE_REFERENCES
+
+template<class T> inline void swap ( optional<T>& x, optional<T>& y )
+  //BOOST_NOEXCEPT_IF(::pdalboost::is_nothrow_move_constructible<T>::value && BOOST_NOEXCEPT_EXPR(pdalboost::swap(*x, *y)))
+{
+    optional_detail::swap_selector<optional_swap_should_use_default_constructor<T>::value>::optional_swap(x, y);
+}
+
+} // namespace pdalboost
+
+#endif
diff --git a/vendor/pdalboost/boost/optional/optional_fwd.hpp b/vendor/pdalboost/boost/optional/optional_fwd.hpp
new file mode 100644
index 0000000..17adc8c
--- /dev/null
+++ b/vendor/pdalboost/boost/optional/optional_fwd.hpp
@@ -0,0 +1,30 @@
+// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
+//
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/optional for documentation.
+//
+// You are welcome to contact the author at:
+//  fernando_cacciola at hotmail.com
+//
+// Revisions:
+// 10 May 2008 (added swap related forward declaration) Niels Dekker
+//
+#ifndef BOOST_OPTIONAL_OPTIONAL_FWD_FLC_19NOV2002_HPP
+#define BOOST_OPTIONAL_OPTIONAL_FWD_FLC_19NOV2002_HPP
+
+
+namespace pdalboost {
+
+template<class T> class optional ;
+
+template<class T> void swap ( optional<T>& , optional<T>& );
+
+template<class T> struct optional_swap_should_use_default_constructor ;
+
+} // namespace pdalboost
+
+#endif
+
diff --git a/vendor/pdalboost/boost/optional/optional_io.hpp b/vendor/pdalboost/boost/optional/optional_io.hpp
new file mode 100644
index 0000000..d3c1d0d
--- /dev/null
+++ b/vendor/pdalboost/boost/optional/optional_io.hpp
@@ -0,0 +1,94 @@
+// Copyright (C) 2005, Fernando Luis Cacciola Carballal.
+//
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/optional for documentation.
+//
+// You are welcome to contact the author at:
+//  fernando_cacciola at hotmail.com
+//
+#ifndef BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
+#define BOOST_OPTIONAL_OPTIONAL_IO_FLC_19NOV2002_HPP
+
+#include <istream>
+#include <ostream>
+
+#include "boost/none.hpp"
+#include "boost/optional/optional.hpp"
+
+
+namespace pdalboost
+{
+
+template<class CharType, class CharTrait>
+inline
+std::basic_ostream<CharType, CharTrait>&
+operator<<(std::basic_ostream<CharType, CharTrait>& out, none_t)
+{
+  if (out.good())
+  {
+    out << "--";
+  }
+   
+  return out;
+}
+
+template<class CharType, class CharTrait, class T>
+inline
+std::basic_ostream<CharType, CharTrait>&
+operator<<(std::basic_ostream<CharType, CharTrait>& out, optional<T> const& v)
+{
+  if (out.good())
+  {
+    if (!v)
+         out << "--" ;
+    else out << ' ' << *v ;
+  }
+
+  return out;
+}
+
+template<class CharType, class CharTrait, class T>
+inline
+std::basic_istream<CharType, CharTrait>&
+operator>>(std::basic_istream<CharType, CharTrait>& in, optional<T>& v)
+{
+  if (in.good())
+  {
+    int d = in.get();
+    if (d == ' ')
+    {
+      T x;
+      in >> x;
+#ifndef  BOOST_OPTIONAL_DETAIL_NO_RVALUE_REFERENCES
+      v = pdalboost::move(x);
+#else
+      v = x;
+#endif
+    }
+    else
+    {
+      if (d == '-')
+      {
+        d = in.get();
+
+        if (d == '-')
+        {
+          v = none;
+          return in;
+        }
+      }
+
+      in.setstate( std::ios::failbit );
+    }
+  }
+
+  return in;
+}
+
+} // namespace pdalboost
+
+#endif
+
diff --git a/vendor/pdalboost/boost/pending/integer_log2.hpp b/vendor/pdalboost/boost/pending/integer_log2.hpp
new file mode 100644
index 0000000..023ec7a
--- /dev/null
+++ b/vendor/pdalboost/boost/pending/integer_log2.hpp
@@ -0,0 +1,9 @@
+#ifndef BOOST_PENDING_INTEGER_LOG2_HPP
+#define BOOST_PENDING_INTEGER_LOG2_HPP
+
+// The header file at this path is deprecated;
+// use boost/integer/integer_log2.hpp instead.
+
+#include <boost/integer/integer_log2.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/pointee.hpp b/vendor/pdalboost/boost/pointee.hpp
new file mode 100644
index 0000000..c9ce0bc
--- /dev/null
+++ b/vendor/pdalboost/boost/pointee.hpp
@@ -0,0 +1,74 @@
+#ifndef POINTEE_DWA200415_HPP
+# define POINTEE_DWA200415_HPP
+
+//
+// Copyright David Abrahams 2004. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// typename pointee<P>::type provides the pointee type of P.
+//
+// For example, it is T for T* and X for shared_ptr<X>.
+//
+// http://www.boost.org/libs/iterator/doc/pointee.html
+//
+
+# include <boost/detail/is_incrementable.hpp>
+# include <boost/iterator/iterator_traits.hpp>
+# include <boost/type_traits/add_const.hpp>
+# include <boost/type_traits/remove_cv.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/eval_if.hpp>
+
+namespace pdalboost {
+
+namespace detail
+{
+  template <class P>
+  struct smart_ptr_pointee
+  {
+      typedef typename P::element_type type;
+  };
+
+  template <class Iterator>
+  struct iterator_pointee
+  {
+      typedef typename iterator_traits<Iterator>::value_type value_type;
+
+      struct impl
+      {
+          template <class T>
+          static char test(T const&);
+
+          static char (& test(value_type&) )[2];
+
+          static Iterator& x;
+      };
+
+      BOOST_STATIC_CONSTANT(bool, is_constant = sizeof(impl::test(*impl::x)) == 1);
+
+      typedef typename mpl::if_c<
+#  if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+          ::pdalboost::detail::iterator_pointee<Iterator>::is_constant
+#  else
+          is_constant
+#  endif
+        , typename add_const<value_type>::type
+        , value_type
+      >::type type;
+  };
+}
+
+template <class P>
+struct pointee
+  : mpl::eval_if<
+        detail::is_incrementable<P>
+      , detail::iterator_pointee<P>
+      , detail::smart_ptr_pointee<P>
+    >
+{
+};
+
+} // namespace pdalboost
+
+#endif // POINTEE_DWA200415_HPP
diff --git a/vendor/pdalboost/boost/predef.h b/vendor/pdalboost/boost/predef.h
new file mode 100644
index 0000000..4965337
--- /dev/null
+++ b/vendor/pdalboost/boost/predef.h
@@ -0,0 +1,24 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#if !defined(BOOST_PREDEF_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_H
+#define BOOST_PREDEF_H
+#endif
+
+#include <boost/predef/language.h>
+#include <boost/predef/architecture.h>
+#include <boost/predef/compiler.h>
+#include <boost/predef/library.h>
+#include <boost/predef/os.h>
+#include <boost/predef/other.h>
+#include <boost/predef/platform.h>
+#include <boost/predef/hardware.h>
+
+#include <boost/predef/version.h>
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/architecture.h b/vendor/pdalboost/boost/predef/architecture.h
new file mode 100644
index 0000000..c433d43
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture.h
@@ -0,0 +1,32 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#if !defined(BOOST_PREDEF_ARCHITECTURE_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_ARCHITECTURE_H
+#define BOOST_PREDEF_ARCHITECTURE_H
+#endif
+
+#include <boost/predef/architecture/alpha.h>
+#include <boost/predef/architecture/arm.h>
+#include <boost/predef/architecture/blackfin.h>
+#include <boost/predef/architecture/convex.h>
+#include <boost/predef/architecture/ia64.h>
+#include <boost/predef/architecture/m68k.h>
+#include <boost/predef/architecture/mips.h>
+#include <boost/predef/architecture/parisc.h>
+#include <boost/predef/architecture/ppc.h>
+#include <boost/predef/architecture/pyramid.h>
+#include <boost/predef/architecture/rs6k.h>
+#include <boost/predef/architecture/sparc.h>
+#include <boost/predef/architecture/superh.h>
+#include <boost/predef/architecture/sys370.h>
+#include <boost/predef/architecture/sys390.h>
+#include <boost/predef/architecture/x86.h>
+#include <boost/predef/architecture/z.h>
+/*#include <boost/predef/architecture/.h>*/
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/architecture/alpha.h b/vendor/pdalboost/boost/predef/architecture/alpha.h
new file mode 100644
index 0000000..5bcade1
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/alpha.h
@@ -0,0 +1,59 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_ALPHA_H
+#define BOOST_PREDEF_ARCHITECTURE_ALPHA_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_ALPHA`]
+
+[@http://en.wikipedia.org/wiki/DEC_Alpha DEC Alpha] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+    [[`__alpha__`] [__predef_detection__]]
+    [[`__alpha`] [__predef_detection__]]
+    [[`_M_ALPHA`] [__predef_detection__]]
+
+    [[`__alpha_ev4__`] [4.0.0]]
+    [[`__alpha_ev5__`] [5.0.0]]
+    [[`__alpha_ev6__`] [6.0.0]]
+    ]
+ */
+
+#define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__alpha__) || defined(__alpha) || \
+    defined(_M_ALPHA)
+#   undef BOOST_ARCH_ALPHA
+#   if !defined(BOOST_ARCH_ALPHA) && defined(__alpha_ev4__)
+#       define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER(4,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ALPHA) && defined(__alpha_ev5__)
+#       define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER(5,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ALPHA) && defined(__alpha_ev6__)
+#       define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER(6,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ALPHA)
+#       define BOOST_ARCH_ALPHA BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_ALPHA
+#   define BOOST_ARCH_ALPHA_AVAILABLE
+#endif
+
+#define BOOST_ARCH_ALPHA_NAME "DEC Alpha"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_ALPHA,BOOST_ARCH_ALPHA_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/arm.h b/vendor/pdalboost/boost/predef/architecture/arm.h
new file mode 100644
index 0000000..b200c62
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/arm.h
@@ -0,0 +1,70 @@
+/*
+Copyright Rene Rivera 2008-2015
+Copyright Franz Detro 2014
+Copyright (c) Microsoft Corporation 2014
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_ARM_H
+#define BOOST_PREDEF_ARCHITECTURE_ARM_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_ARM`]
+
+[@http://en.wikipedia.org/wiki/ARM_architecture ARM] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__arm__`] [__predef_detection__]]
+    [[`__arm64`] [__predef_detection__]]
+    [[`__thumb__`] [__predef_detection__]]
+    [[`__TARGET_ARCH_ARM`] [__predef_detection__]]
+    [[`__TARGET_ARCH_THUMB`] [__predef_detection__]]
+    [[`_M_ARM`] [__predef_detection__]]
+
+    [[`__arm64`] [8.0.0]]
+    [[`__TARGET_ARCH_ARM`] [V.0.0]]
+    [[`__TARGET_ARCH_THUMB`] [V.0.0]]
+    [[`_M_ARM`] [V.0.0]]
+    ]
+ */
+
+#define BOOST_ARCH_ARM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__arm__) || defined(__arm64) || defined(__thumb__) || \
+    defined(__TARGET_ARCH_ARM) || defined(__TARGET_ARCH_THUMB) || \
+    defined(_M_ARM)
+#   undef BOOST_ARCH_ARM
+#   if !defined(BOOST_ARCH_ARM) && defined(__arm64)
+#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(8,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ARM) && defined(__TARGET_ARCH_ARM)
+#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(__TARGET_ARCH_ARM,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ARM) && defined(__TARGET_ARCH_THUMB)
+#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(__TARGET_ARCH_THUMB,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ARM) && defined(_M_ARM)
+#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(_M_ARM,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_ARM)
+#       define BOOST_ARCH_ARM BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_ARM
+#   define BOOST_ARCH_ARM_AVAILABLE
+#endif
+
+#define BOOST_ARCH_ARM_NAME "ARM"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_ARM,BOOST_ARCH_ARM_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/blackfin.h b/vendor/pdalboost/boost/predef/architecture/blackfin.h
new file mode 100644
index 0000000..84c58a2
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/blackfin.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2013-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_BLACKFIN_H
+#define BOOST_PREDEF_ARCHITECTURE_BLACKFIN_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_BLACKFIN`]
+
+Blackfin Processors from Analog Devices.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__bfin__`] [__predef_detection__]]
+    [[`__BFIN__`] [__predef_detection__]]
+    [[`bfin`] [__predef_detection__]]
+    [[`BFIN`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_BLACKFIN BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__bfin__) || defined(__BFIN__) || \
+    defined(bfin) || defined(BFIN)
+#   undef BOOST_ARCH_BLACKFIN
+#   define BOOST_ARCH_BLACKFIN BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_BLACKFIN
+#   define BOOST_ARCH_BLACKFIN_AVAILABLE
+#endif
+
+#define BOOST_ARCH_BLACKFIN_NAME "Blackfin"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_BLACKFIN,BOOST_ARCH_BLACKFIN_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/convex.h b/vendor/pdalboost/boost/predef/architecture/convex.h
new file mode 100644
index 0000000..ac783a9
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/convex.h
@@ -0,0 +1,65 @@
+/*
+Copyright Rene Rivera 2011-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_CONVEX_H
+#define BOOST_PREDEF_ARCHITECTURE_CONVEX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_CONVEX`]
+
+[@http://en.wikipedia.org/wiki/Convex_Computer Convex Computer] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__convex__`] [__predef_detection__]]
+
+    [[`__convex_c1__`] [1.0.0]]
+    [[`__convex_c2__`] [2.0.0]]
+    [[`__convex_c32__`] [3.2.0]]
+    [[`__convex_c34__`] [3.4.0]]
+    [[`__convex_c38__`] [3.8.0]]
+    ]
+ */
+
+#define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__convex__)
+#   undef BOOST_ARCH_CONVEX
+#   if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c1__)
+#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(1,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c2__)
+#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(2,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c32__)
+#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(3,2,0)
+#   endif
+#   if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c34__)
+#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(3,4,0)
+#   endif
+#   if !defined(BOOST_ARCH_CONVEX) && defined(__convex_c38__)
+#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER(3,8,0)
+#   endif
+#   if !defined(BOOST_ARCH_CONVEX)
+#       define BOOST_ARCH_CONVEX BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_CONVEX
+#   define BOOST_ARCH_CONVEX_AVAILABLE
+#endif
+
+#define BOOST_ARCH_CONVEX_NAME "Convex Computer"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_CONVEX,BOOST_ARCH_CONVEX_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/ia64.h b/vendor/pdalboost/boost/predef/architecture/ia64.h
new file mode 100644
index 0000000..9b1972b
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/ia64.h
@@ -0,0 +1,49 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_IA64_H
+#define BOOST_PREDEF_ARCHITECTURE_IA64_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_IA64`]
+
+[@http://en.wikipedia.org/wiki/Ia64 Intel Itanium 64] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__ia64__`] [__predef_detection__]]
+    [[`_IA64`] [__predef_detection__]]
+    [[`__IA64__`] [__predef_detection__]]
+    [[`__ia64`] [__predef_detection__]]
+    [[`_M_IA64`] [__predef_detection__]]
+    [[`__itanium__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_IA64 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__ia64__) || defined(_IA64) || \
+    defined(__IA64__) || defined(__ia64) || \
+    defined(_M_IA64) || defined(__itanium__)
+#   undef BOOST_ARCH_IA64
+#   define BOOST_ARCH_IA64 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_IA64
+#   define BOOST_ARCH_IA64_AVAILABLE
+#endif
+
+#define BOOST_ARCH_IA64_NAME "Intel Itanium 64"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_IA64,BOOST_ARCH_IA64_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/m68k.h b/vendor/pdalboost/boost/predef/architecture/m68k.h
new file mode 100644
index 0000000..63ed5f8
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/m68k.h
@@ -0,0 +1,82 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_M68K_H
+#define BOOST_PREDEF_ARCHITECTURE_M68K_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_M68K`]
+
+[@http://en.wikipedia.org/wiki/M68k Motorola 68k] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__m68k__`] [__predef_detection__]]
+    [[`M68000`] [__predef_detection__]]
+
+    [[`__mc68060__`] [6.0.0]]
+    [[`mc68060`] [6.0.0]]
+    [[`__mc68060`] [6.0.0]]
+    [[`__mc68040__`] [4.0.0]]
+    [[`mc68040`] [4.0.0]]
+    [[`__mc68040`] [4.0.0]]
+    [[`__mc68030__`] [3.0.0]]
+    [[`mc68030`] [3.0.0]]
+    [[`__mc68030`] [3.0.0]]
+    [[`__mc68020__`] [2.0.0]]
+    [[`mc68020`] [2.0.0]]
+    [[`__mc68020`] [2.0.0]]
+    [[`__mc68010__`] [1.0.0]]
+    [[`mc68010`] [1.0.0]]
+    [[`__mc68010`] [1.0.0]]
+    [[`__mc68000__`] [0.0.1]]
+    [[`mc68000`] [0.0.1]]
+    [[`__mc68000`] [0.0.1]]
+    ]
+ */
+
+#define BOOST_ARCH_M68K BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__m68k__) || defined(M68000)
+#   undef BOOST_ARCH_M68K
+#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68060__) || defined(mc68060) || defined(__mc68060))
+#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(6,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68040__) || defined(mc68040) || defined(__mc68040))
+#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(4,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68030__) || defined(mc68030) || defined(__mc68030))
+#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(3,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68020__) || defined(mc68020) || defined(__mc68020))
+#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(2,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68010__) || defined(mc68010) || defined(__mc68010))
+#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER(1,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_M68K) && (defined(__mc68000__) || defined(mc68000) || defined(__mc68000))
+#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#   if !defined(BOOST_ARCH_M68K)
+#       define BOOST_ARCH_M68K BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_M68K
+#   define BOOST_ARCH_M68K_AVAILABLE
+#endif
+
+#define BOOST_ARCH_M68K_NAME "Motorola 68k"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_M68K,BOOST_ARCH_M68K_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/mips.h b/vendor/pdalboost/boost/predef/architecture/mips.h
new file mode 100644
index 0000000..0189d7d
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/mips.h
@@ -0,0 +1,73 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_MIPS_H
+#define BOOST_PREDEF_ARCHITECTURE_MIPS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_MIPS`]
+
+[@http://en.wikipedia.org/wiki/MIPS_architecture MIPS] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__mips__`] [__predef_detection__]]
+    [[`__mips`] [__predef_detection__]]
+    [[`__MIPS__`] [__predef_detection__]]
+
+    [[`__mips`] [V.0.0]]
+    [[`_MIPS_ISA_MIPS1`] [1.0.0]]
+    [[`_R3000`] [1.0.0]]
+    [[`_MIPS_ISA_MIPS2`] [2.0.0]]
+    [[`__MIPS_ISA2__`] [2.0.0]]
+    [[`_R4000`] [2.0.0]]
+    [[`_MIPS_ISA_MIPS3`] [3.0.0]]
+    [[`__MIPS_ISA3__`] [3.0.0]]
+    [[`_MIPS_ISA_MIPS4`] [4.0.0]]
+    [[`__MIPS_ISA4__`] [4.0.0]]
+    ]
+ */
+
+#define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__mips__) || defined(__mips) || \
+    defined(__MIPS__)
+#   undef BOOST_ARCH_MIPS
+#   if !defined(BOOST_ARCH_MIPS) && (defined(__mips))
+#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(__mips,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS1) || defined(_R3000))
+#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(1,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS2) || defined(__MIPS_ISA2__) || defined(_R4000))
+#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(2,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS3) || defined(__MIPS_ISA3__))
+#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(3,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_MIPS) && (defined(_MIPS_ISA_MIPS4) || defined(__MIPS_ISA4__))
+#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER(4,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_MIPS)
+#       define BOOST_ARCH_MIPS BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_MIPS
+#   define BOOST_ARCH_MIPS_AVAILABLE
+#endif
+
+#define BOOST_ARCH_MIPS_NAME "MIPS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_MIPS,BOOST_ARCH_MIPS_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/parisc.h b/vendor/pdalboost/boost/predef/architecture/parisc.h
new file mode 100644
index 0000000..7c7625f
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/parisc.h
@@ -0,0 +1,64 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_PARISC_H
+#define BOOST_PREDEF_ARCHITECTURE_PARISC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_PARISK`]
+
+[@http://en.wikipedia.org/wiki/PA-RISC_family HP/PA RISC] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__hppa__`] [__predef_detection__]]
+    [[`__hppa`] [__predef_detection__]]
+    [[`__HPPA__`] [__predef_detection__]]
+
+    [[`_PA_RISC1_0`] [1.0.0]]
+    [[`_PA_RISC1_1`] [1.1.0]]
+    [[`__HPPA11__`] [1.1.0]]
+    [[`__PA7100__`] [1.1.0]]
+    [[`_PA_RISC2_0`] [2.0.0]]
+    [[`__RISC2_0__`] [2.0.0]]
+    [[`__HPPA20__`] [2.0.0]]
+    [[`__PA8000__`] [2.0.0]]
+    ]
+ */
+
+#define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__hppa__) || defined(__hppa) || defined(__HPPA__)
+#   undef BOOST_ARCH_PARISC
+#   if !defined(BOOST_ARCH_PARISC) && (defined(_PA_RISC1_0))
+#       define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER(1,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_PARISC) && (defined(_PA_RISC1_1) || defined(__HPPA11__) || defined(__PA7100__))
+#       define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER(1,1,0)
+#   endif
+#   if !defined(BOOST_ARCH_PARISC) && (defined(_PA_RISC2_0) || defined(__RISC2_0__) || defined(__HPPA20__) || defined(__PA8000__))
+#       define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER(2,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_PARISC)
+#       define BOOST_ARCH_PARISC BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_PARISC
+#   define BOOST_ARCH_PARISC_AVAILABLE
+#endif
+
+#define BOOST_ARCH_PARISC_NAME "HP/PA RISC"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_PARISC,BOOST_ARCH_PARISC_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/ppc.h b/vendor/pdalboost/boost/predef/architecture/ppc.h
new file mode 100644
index 0000000..e8c57c9
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/ppc.h
@@ -0,0 +1,72 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_PPC_H
+#define BOOST_PREDEF_ARCHITECTURE_PPC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_PPC`]
+
+[@http://en.wikipedia.org/wiki/PowerPC PowerPC] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__powerpc`] [__predef_detection__]]
+    [[`__powerpc__`] [__predef_detection__]]
+    [[`__POWERPC__`] [__predef_detection__]]
+    [[`__ppc__`] [__predef_detection__]]
+    [[`_M_PPC`] [__predef_detection__]]
+    [[`_ARCH_PPC`] [__predef_detection__]]
+    [[`__PPCGECKO__`] [__predef_detection__]]
+    [[`__PPCBROADWAY__`] [__predef_detection__]]
+    [[`_XENON`] [__predef_detection__]]
+
+    [[`__ppc601__`] [6.1.0]]
+    [[`_ARCH_601`] [6.1.0]]
+    [[`__ppc603__`] [6.3.0]]
+    [[`_ARCH_603`] [6.3.0]]
+    [[`__ppc604__`] [6.4.0]]
+    [[`__ppc604__`] [6.4.0]]
+    ]
+ */
+
+#define BOOST_ARCH_PPC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__powerpc) || defined(__powerpc__) || \
+    defined(__POWERPC__) || defined(__ppc__) || \
+    defined(_M_PPC) || defined(_ARCH_PPC) || \
+    defined(__PPCGECKO__) || defined(__PPCBROADWAY__) || \
+    defined(_XENON)
+#   undef BOOST_ARCH_PPC
+#   if !defined (BOOST_ARCH_PPC) && (defined(__ppc601__) || defined(_ARCH_601))
+#       define BOOST_ARCH_PPC BOOST_VERSION_NUMBER(6,1,0)
+#   endif
+#   if !defined (BOOST_ARCH_PPC) && (defined(__ppc603__) || defined(_ARCH_603))
+#       define BOOST_ARCH_PPC BOOST_VERSION_NUMBER(6,3,0)
+#   endif
+#   if !defined (BOOST_ARCH_PPC) && (defined(__ppc604__) || defined(__ppc604__))
+#       define BOOST_ARCH_PPC BOOST_VERSION_NUMBER(6,4,0)
+#   endif
+#   if !defined (BOOST_ARCH_PPC)
+#       define BOOST_ARCH_PPC BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_PPC
+#   define BOOST_ARCH_PPC_AVAILABLE
+#endif
+
+#define BOOST_ARCH_PPC_NAME "PowerPC"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_PPC,BOOST_ARCH_PPC_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/pyramid.h b/vendor/pdalboost/boost/predef/architecture/pyramid.h
new file mode 100644
index 0000000..4f13253
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/pyramid.h
@@ -0,0 +1,42 @@
+/*
+Copyright Rene Rivera 2011-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_PYRAMID_H
+#define BOOST_PREDEF_ARCHITECTURE_PYRAMID_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_PYRAMID`]
+
+Pyramid 9810 architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`pyr`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_PYRAMID BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(pyr)
+#   undef BOOST_ARCH_PYRAMID
+#   define BOOST_ARCH_PYRAMID BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_PYRAMID
+#   define BOOST_ARCH_PYRAMID_AVAILABLE
+#endif
+
+#define BOOST_ARCH_PYRAMID_NAME "Pyramid 9810"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_PYRAMID,BOOST_ARCH_PYRAMID_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/rs6k.h b/vendor/pdalboost/boost/predef/architecture/rs6k.h
new file mode 100644
index 0000000..8a6e9b6
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/rs6k.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_RS6K_H
+#define BOOST_PREDEF_ARCHITECTURE_RS6K_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_RS6000`]
+
+[@http://en.wikipedia.org/wiki/RS/6000 RS/6000] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__THW_RS6000`] [__predef_detection__]]
+    [[`_IBMR2`] [__predef_detection__]]
+    [[`_POWER`] [__predef_detection__]]
+    [[`_ARCH_PWR`] [__predef_detection__]]
+    [[`_ARCH_PWR2`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_RS6000 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__THW_RS6000) || defined(_IBMR2) || \
+    defined(_POWER) || defined(_ARCH_PWR) || \
+    defined(_ARCH_PWR2)
+#   undef BOOST_ARCH_RS6000
+#   define BOOST_ARCH_RS6000 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_RS6000
+#   define BOOST_ARCH_RS6000_AVAILABLE
+#endif
+
+#define BOOST_ARCH_RS6000_NAME "RS/6000"
+
+#define BOOST_ARCH_PWR BOOST_ARCH_RS6000
+
+#if BOOST_ARCH_PWR
+#   define BOOST_ARCH_PWR_AVAILABLE
+#endif
+
+#define BOOST_ARCH_PWR_NAME BOOST_ARCH_RS6000_NAME
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_RS6000,BOOST_ARCH_RS6000_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/sparc.h b/vendor/pdalboost/boost/predef/architecture/sparc.h
new file mode 100644
index 0000000..a89a510
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/sparc.h
@@ -0,0 +1,54 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_SPARC_H
+#define BOOST_PREDEF_ARCHITECTURE_SPARC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_SPARC`]
+
+[@http://en.wikipedia.org/wiki/SPARC SPARC] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__sparc__`] [__predef_detection__]]
+    [[`__sparc`] [__predef_detection__]]
+
+    [[`__sparcv9`] [9.0.0]]
+    [[`__sparcv8`] [8.0.0]]
+    ]
+ */
+
+#define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__sparc__) || defined(__sparc)
+#   undef BOOST_ARCH_SPARC
+#   if !defined(BOOST_ARCH_SPARC) && defined(__sparcv9)
+#       define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER(9,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_SPARC) && defined(__sparcv8)
+#       define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER(8,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_SPARC)
+#       define BOOST_ARCH_SPARC BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_SPARC
+#   define BOOST_ARCH_SPARC_AVAILABLE
+#endif
+
+#define BOOST_ARCH_SPARC_NAME "SPARC"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SPARC,BOOST_ARCH_SPARC_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/superh.h b/vendor/pdalboost/boost/predef/architecture/superh.h
new file mode 100644
index 0000000..da0529e
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/superh.h
@@ -0,0 +1,67 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_SUPERH_H
+#define BOOST_PREDEF_ARCHITECTURE_SUPERH_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_SH`]
+
+[@http://en.wikipedia.org/wiki/SuperH SuperH] architecture:
+If available versions \[1-5\] are specifically detected.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__sh__`] [__predef_detection__]]
+
+    [[`__SH5__`] [5.0.0]]
+    [[`__SH4__`] [4.0.0]]
+    [[`__sh3__`] [3.0.0]]
+    [[`__SH3__`] [3.0.0]]
+    [[`__sh2__`] [2.0.0]]
+    [[`__sh1__`] [1.0.0]]
+    ]
+ */
+
+#define BOOST_ARCH_SH BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__sh__)
+#   undef BOOST_ARCH_SH
+#   if !defined(BOOST_ARCH_SH) && (defined(__SH5__))
+#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(5,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_SH) && (defined(__SH4__))
+#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(4,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_SH) && (defined(__sh3__) || defined(__SH3__))
+#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(3,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_SH) && (defined(__sh2__))
+#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(2,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_SH) && (defined(__sh1__))
+#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER(1,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_SH)
+#       define BOOST_ARCH_SH BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_SH
+#   define BOOST_ARCH_SH_AVAILABLE
+#endif
+
+#define BOOST_ARCH_SH_NAME "SuperH"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SH,BOOST_ARCH_SH_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/sys370.h b/vendor/pdalboost/boost/predef/architecture/sys370.h
new file mode 100644
index 0000000..cfd85dc
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/sys370.h
@@ -0,0 +1,43 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_SYS370_H
+#define BOOST_PREDEF_ARCHITECTURE_SYS370_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_SYS370`]
+
+[@http://en.wikipedia.org/wiki/System/370 System/370] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__370__`] [__predef_detection__]]
+    [[`__THW_370__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_SYS370 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__370__) || defined(__THW_370__)
+#   undef BOOST_ARCH_SYS370
+#   define BOOST_ARCH_SYS370 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_SYS370
+#   define BOOST_ARCH_SYS370_AVAILABLE
+#endif
+
+#define BOOST_ARCH_SYS370_NAME "System/370"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SYS370,BOOST_ARCH_SYS370_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/sys390.h b/vendor/pdalboost/boost/predef/architecture/sys390.h
new file mode 100644
index 0000000..47aff6a
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/sys390.h
@@ -0,0 +1,43 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_SYS390_H
+#define BOOST_PREDEF_ARCHITECTURE_SYS390_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_SYS390`]
+
+[@http://en.wikipedia.org/wiki/System/390 System/390] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__s390__`] [__predef_detection__]]
+    [[`__s390x__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_SYS390 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__s390__) || defined(__s390x__)
+#   undef BOOST_ARCH_SYS390
+#   define BOOST_ARCH_SYS390 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_SYS390
+#   define BOOST_ARCH_SYS390_AVAILABLE
+#endif
+
+#define BOOST_ARCH_SYS390_NAME "System/390"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_SYS390,BOOST_ARCH_SYS390_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/x86.h b/vendor/pdalboost/boost/predef/architecture/x86.h
new file mode 100644
index 0000000..0ef3ef4
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/x86.h
@@ -0,0 +1,38 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#include <boost/predef/architecture/x86/32.h>
+#include <boost/predef/architecture/x86/64.h>
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_X86_H
+#define BOOST_PREDEF_ARCHITECTURE_X86_H
+
+/*`
+[heading `BOOST_ARCH_X86`]
+
+[@http://en.wikipedia.org/wiki/X86 Intel x86] architecture. This is
+a category to indicate that either `BOOST_ARCH_X86_32` or
+`BOOST_ARCH_X86_64` is detected.
+ */
+
+#define BOOST_ARCH_X86 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_ARCH_X86_32 || BOOST_ARCH_X86_64
+#   undef BOOST_ARCH_X86
+#   define BOOST_ARCH_X86 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_X86
+#   define BOOST_ARCH_X86_AVAILABLE
+#endif
+
+#define BOOST_ARCH_X86_NAME "Intel x86"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_X86,BOOST_ARCH_X86_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/x86/32.h b/vendor/pdalboost/boost/predef/architecture/x86/32.h
new file mode 100644
index 0000000..17fbff5
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/x86/32.h
@@ -0,0 +1,87 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_X86_32_H
+#define BOOST_PREDEF_ARCHITECTURE_X86_32_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_X86_32`]
+
+[@http://en.wikipedia.org/wiki/X86 Intel x86] architecture:
+If available versions \[3-6\] are specifically detected.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`i386`] [__predef_detection__]]
+    [[`__i386__`] [__predef_detection__]]
+    [[`__i486__`] [__predef_detection__]]
+    [[`__i586__`] [__predef_detection__]]
+    [[`__i686__`] [__predef_detection__]]
+    [[`__i386`] [__predef_detection__]]
+    [[`_M_IX86`] [__predef_detection__]]
+    [[`_X86_`] [__predef_detection__]]
+    [[`__THW_INTEL__`] [__predef_detection__]]
+    [[`__I86__`] [__predef_detection__]]
+    [[`__INTEL__`] [__predef_detection__]]
+
+    [[`__I86__`] [V.0.0]]
+    [[`_M_IX86`] [V.0.0]]
+    [[`__i686__`] [6.0.0]]
+    [[`__i586__`] [5.0.0]]
+    [[`__i486__`] [4.0.0]]
+    [[`__i386__`] [3.0.0]]
+    ]
+ */
+
+#define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(i386) || defined(__i386__) || \
+    defined(__i486__) || defined(__i586__) || \
+    defined(__i686__) || defined(__i386) || \
+    defined(_M_IX86) || defined(_X86_) || \
+    defined(__THW_INTEL__) || defined(__I86__) || \
+    defined(__INTEL__)
+#   undef BOOST_ARCH_X86_32
+#   if !defined(BOOST_ARCH_X86_32) && defined(__I86__)
+#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(__I86__,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_X86_32) && defined(_M_IX86)
+#       define BOOST_ARCH_X86_32 BOOST_PREDEF_MAKE_10_VV00(_M_IX86)
+#   endif
+#   if !defined(BOOST_ARCH_X86_32) && defined(__i686__)
+#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(6,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_X86_32) && defined(__i586__)
+#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(5,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_X86_32) && defined(__i486__)
+#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(4,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_X86_32) && defined(__i386__)
+#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER(3,0,0)
+#   endif
+#   if !defined(BOOST_ARCH_X86_32)
+#       define BOOST_ARCH_X86_32 BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_ARCH_X86_32
+#   define BOOST_ARCH_X86_32_AVAILABLE
+#endif
+
+#define BOOST_ARCH_X86_32_NAME "Intel x86-32"
+
+#include <boost/predef/architecture/x86.h>
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_X86_32,BOOST_ARCH_X86_32_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/x86/64.h b/vendor/pdalboost/boost/predef/architecture/x86/64.h
new file mode 100644
index 0000000..f761c92
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/x86/64.h
@@ -0,0 +1,50 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_X86_64_H
+#define BOOST_PREDEF_ARCHITECTURE_X86_64_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_X86_64`]
+
+[@http://en.wikipedia.org/wiki/Ia64 Intel IA-64] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__x86_64`] [__predef_detection__]]
+    [[`__x86_64__`] [__predef_detection__]]
+    [[`__amd64__`] [__predef_detection__]]
+    [[`__amd64`] [__predef_detection__]]
+    [[`_M_X64`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_X86_64 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__x86_64) || defined(__x86_64__) || \
+    defined(__amd64__) || defined(__amd64) || \
+    defined(_M_X64)
+#   undef BOOST_ARCH_X86_64
+#   define BOOST_ARCH_X86_64 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_X86_64
+#   define BOOST_ARCH_X86_64_AVAILABLE
+#endif
+
+#define BOOST_ARCH_X86_64_NAME "Intel x86-64"
+
+#include <boost/predef/architecture/x86.h>
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_X86_64,BOOST_ARCH_X86_64_NAME)
diff --git a/vendor/pdalboost/boost/predef/architecture/z.h b/vendor/pdalboost/boost/predef/architecture/z.h
new file mode 100644
index 0000000..3d218aa
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/architecture/z.h
@@ -0,0 +1,42 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ARCHITECTURE_Z_H
+#define BOOST_PREDEF_ARCHITECTURE_Z_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_ARCH_Z`]
+
+[@http://en.wikipedia.org/wiki/Z/Architecture z/Architecture] architecture.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__SYSC_ZARCH__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_ARCH_Z BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__SYSC_ZARCH__)
+#   undef BOOST_ARCH_Z
+#   define BOOST_ARCH_Z BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_ARCH_Z
+#   define BOOST_ARCH_Z_AVAILABLE
+#endif
+
+#define BOOST_ARCH_Z_NAME "z/Architecture"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ARCH_Z,BOOST_ARCH_Z_NAME)
diff --git a/vendor/pdalboost/boost/predef/compiler.h b/vendor/pdalboost/boost/predef/compiler.h
new file mode 100644
index 0000000..61a4c52
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler.h
@@ -0,0 +1,43 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#if !defined(BOOST_PREDEF_COMPILER_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_COMPILER_H
+#define BOOST_PREDEF_COMPILER_H
+#endif
+
+#include <boost/predef/compiler/borland.h>
+#include <boost/predef/compiler/clang.h>
+#include <boost/predef/compiler/comeau.h>
+#include <boost/predef/compiler/compaq.h>
+#include <boost/predef/compiler/diab.h>
+#include <boost/predef/compiler/digitalmars.h>
+#include <boost/predef/compiler/dignus.h>
+#include <boost/predef/compiler/edg.h>
+#include <boost/predef/compiler/ekopath.h>
+#include <boost/predef/compiler/gcc_xml.h>
+#include <boost/predef/compiler/gcc.h>
+#include <boost/predef/compiler/greenhills.h>
+#include <boost/predef/compiler/hp_acc.h>
+#include <boost/predef/compiler/iar.h>
+#include <boost/predef/compiler/ibm.h>
+#include <boost/predef/compiler/intel.h>
+#include <boost/predef/compiler/kai.h>
+#include <boost/predef/compiler/llvm.h>
+#include <boost/predef/compiler/metaware.h>
+#include <boost/predef/compiler/metrowerks.h>
+#include <boost/predef/compiler/microtec.h>
+#include <boost/predef/compiler/mpw.h>
+#include <boost/predef/compiler/palm.h>
+#include <boost/predef/compiler/pgi.h>
+#include <boost/predef/compiler/sgi_mipspro.h>
+#include <boost/predef/compiler/sunpro.h>
+#include <boost/predef/compiler/tendra.h>
+#include <boost/predef/compiler/visualc.h>
+#include <boost/predef/compiler/watcom.h>
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/borland.h b/vendor/pdalboost/boost/predef/compiler/borland.h
new file mode 100644
index 0000000..3677cca
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/borland.h
@@ -0,0 +1,63 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_BORLAND_H
+#define BOOST_PREDEF_COMPILER_BORLAND_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_BORLAND`]
+
+[@http://en.wikipedia.org/wiki/C_plus_plus_builder Borland C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__BORLANDC__`] [__predef_detection__]]
+    [[`__CODEGEARC__`] [__predef_detection__]]
+
+    [[`__BORLANDC__`] [V.R.P]]
+    [[`__CODEGEARC__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_BORLAND BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__BORLANDC__) || defined(__CODEGEARC__)
+#   if !defined(BOOST_COMP_BORLAND_DETECTION) && (defined(__CODEGEARC__))
+#       define BOOST_COMP_BORLAND_DETECTION BOOST_PREDEF_MAKE_0X_VVRP(__CODEGEARC__)
+#   endif
+#   if !defined(BOOST_COMP_BORLAND_DETECTION)
+#       define BOOST_COMP_BORLAND_DETECTION BOOST_PREDEF_MAKE_0X_VVRP(__BORLANDC__)
+#   endif
+#endif
+
+#ifdef BOOST_COMP_BORLAND_DETECTION
+#   define BOOST_COMP_BORLAND_AVAILABLE
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_BORLAND_EMULATED BOOST_COMP_BORLAND_DETECTION
+#   else
+#       undef BOOST_COMP_BORLAND
+#       define BOOST_COMP_BORLAND BOOST_COMP_BORLAND_DETECTION
+#   endif
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_BORLAND_NAME "Borland C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_BORLAND,BOOST_COMP_BORLAND_NAME)
+
+#ifdef BOOST_COMP_BORLAND_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_BORLAND_EMULATED,BOOST_COMP_BORLAND_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/clang.h b/vendor/pdalboost/boost/predef/compiler/clang.h
new file mode 100644
index 0000000..56678fe
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/clang.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_CLANG_H
+#define BOOST_PREDEF_COMPILER_CLANG_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_CLANG`]
+
+[@http://en.wikipedia.org/wiki/Clang Clang] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__clang__`] [__predef_detection__]]
+
+    [[`__clang_major__`, `__clang_minor__`, `__clang_patchlevel__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_CLANG BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__clang__)
+#   define BOOST_COMP_CLANG_DETECTION BOOST_VERSION_NUMBER(__clang_major__,__clang_minor__,__clang_patchlevel__)
+#endif
+
+#ifdef BOOST_COMP_CLANG_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_CLANG_EMULATED BOOST_COMP_CLANG_DETECTION
+#   else
+#       undef BOOST_COMP_CLANG
+#       define BOOST_COMP_CLANG BOOST_COMP_CLANG_DETECTION
+#   endif
+#   define BOOST_COMP_CLANG_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_CLANG_NAME "Clang"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_CLANG,BOOST_COMP_CLANG_NAME)
+
+#ifdef BOOST_COMP_CLANG_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_CLANG_EMULATED,BOOST_COMP_CLANG_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/comeau.h b/vendor/pdalboost/boost/predef/compiler/comeau.h
new file mode 100644
index 0000000..15a4564
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/comeau.h
@@ -0,0 +1,61 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_COMEAU_H
+#define BOOST_PREDEF_COMPILER_COMEAU_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+#define BOOST_COMP_COMO BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+/*`
+[heading `BOOST_COMP_COMO`]
+
+[@http://en.wikipedia.org/wiki/Comeau_C/C%2B%2B Comeau C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__COMO__`] [__predef_detection__]]
+
+    [[`__COMO_VERSION__`] [V.R.P]]
+    ]
+ */
+
+#if defined(__COMO__)
+#   if !defined(BOOST_COMP_COMO_DETECTION) && defined(__COMO_VERSION__)
+#       define BOOST_COMP_COMO_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__COMO_VERSION__)
+#   endif
+#   if !defined(BOOST_COMP_COMO_DETECTION)
+#       define BOOST_COMP_COMO_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_COMO_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_COMO_EMULATED BOOST_COMP_COMO_DETECTION
+#   else
+#       undef BOOST_COMP_COMO
+#       define BOOST_COMP_COMO BOOST_COMP_COMO_DETECTION
+#   endif
+#   define BOOST_COMP_COMO_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_COMO_NAME "Comeau C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_COMO,BOOST_COMP_COMO_NAME)
+
+#ifdef BOOST_COMP_COMO_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_COMO_EMULATED,BOOST_COMP_COMO_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/compaq.h b/vendor/pdalboost/boost/predef/compiler/compaq.h
new file mode 100644
index 0000000..96a79e6
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/compaq.h
@@ -0,0 +1,66 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_COMPAQ_H
+#define BOOST_PREDEF_COMPILER_COMPAQ_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_DEC`]
+
+[@http://www.openvms.compaq.com/openvms/brochures/deccplus/ Compaq C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__DECCXX`] [__predef_detection__]]
+    [[`__DECC`] [__predef_detection__]]
+
+    [[`__DECCXX_VER`] [V.R.P]]
+    [[`__DECC_VER`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_DEC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__DECC) || defined(__DECCXX)
+#   if !defined(BOOST_COMP_DEC_DETECTION) && defined(__DECCXX_VER)
+#       define BOOST_COMP_DEC_DETECTION BOOST_PREDEF_MAKE_10_VVRR0PP00(__DECCXX_VER)
+#   endif
+#   if !defined(BOOST_COMP_DEC_DETECTION) && defined(__DECC_VER)
+#       define BOOST_COMP_DEC_DETECTION BOOST_PREDEF_MAKE_10_VVRR0PP00(__DECC_VER)
+#   endif
+#   if !defined(BOOST_COMP_DEC_DETECTION)
+#       define BOOST_COM_DEC_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_DEC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_DEC_EMULATED BOOST_COMP_DEC_DETECTION
+#   else
+#       undef BOOST_COMP_DEC
+#       define BOOST_COMP_DEC BOOST_COMP_DEC_DETECTION
+#   endif
+#   define BOOST_COMP_DEC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_DEC_NAME "Compaq C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DEC,BOOST_COMP_DEC_NAME)
+
+#ifdef BOOST_COMP_DEC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DEC_EMULATED,BOOST_COMP_DEC_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/diab.h b/vendor/pdalboost/boost/predef/compiler/diab.h
new file mode 100644
index 0000000..f5a37de
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/diab.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_DIAB_H
+#define BOOST_PREDEF_COMPILER_DIAB_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_DIAB`]
+
+[@http://www.windriver.com/products/development_suite/wind_river_compiler/ Diab C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__DCC__`] [__predef_detection__]]
+
+    [[`__VERSION_NUMBER__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_DIAB BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__DCC__)
+#   define BOOST_COMP_DIAB_DETECTION BOOST_PREDEF_MAKE_10_VRPP(__VERSION_NUMBER__)
+#endif
+
+#ifdef BOOST_COMP_DIAB_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_DIAB_EMULATED BOOST_COMP_DIAB_DETECTION
+#   else
+#       undef BOOST_COMP_DIAB
+#       define BOOST_COMP_DIAB BOOST_COMP_DIAB_DETECTION
+#   endif
+#   define BOOST_COMP_DIAB_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_DIAB_NAME "Diab C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DIAB,BOOST_COMP_DIAB_NAME)
+
+#ifdef BOOST_COMP_DIAB_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DIAB_EMULATED,BOOST_COMP_DIAB_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/digitalmars.h b/vendor/pdalboost/boost/predef/compiler/digitalmars.h
new file mode 100644
index 0000000..9bd5850
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/digitalmars.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_DIGITALMARS_H
+#define BOOST_PREDEF_COMPILER_DIGITALMARS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_DMC`]
+
+[@http://en.wikipedia.org/wiki/Digital_Mars Digital Mars] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__DMC__`] [__predef_detection__]]
+
+    [[`__DMC__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_DMC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__DMC__)
+#   define BOOST_COMP_DMC_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__DMC__)
+#endif
+
+#ifdef BOOST_COMP_DMC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_DMC_EMULATED BOOST_COMP_DMC_DETECTION
+#   else
+#       undef BOOST_COMP_DMC
+#       define BOOST_COMP_DMC BOOST_COMP_DMC_DETECTION
+#   endif
+#   define BOOST_COMP_DMC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_DMC_NAME "Digital Mars"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DMC,BOOST_COMP_DMC_NAME)
+
+#ifdef BOOST_COMP_DMC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_DMC_EMULATED,BOOST_COMP_DMC_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/dignus.h b/vendor/pdalboost/boost/predef/compiler/dignus.h
new file mode 100644
index 0000000..c65d3dc
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/dignus.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_DIGNUS_H
+#define BOOST_PREDEF_COMPILER_DIGNUS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_SYSC`]
+
+[@http://www.dignus.com/dcxx/ Dignus Systems/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__SYSC__`] [__predef_detection__]]
+
+    [[`__SYSC_VER__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_SYSC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__SYSC__)
+#   define BOOST_COMP_SYSC_DETECTION BOOST_PREDEF_MAKE_10_VRRPP(__SYSC_VER__)
+#endif
+
+#ifdef BOOST_COMP_SYSC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_SYSC_EMULATED BOOST_COMP_SYSC_DETECTION
+#   else
+#       undef BOOST_COMP_SYSC
+#       define BOOST_COMP_SYSC BOOST_COMP_SYSC_DETECTION
+#   endif
+#   define BOOST_COMP_SYSC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_SYSC_NAME "Dignus Systems/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SYSC,BOOST_COMP_SYSC_NAME)
+
+#ifdef BOOST_COMP_SYSC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SYSC_EMULATED,BOOST_COMP_SYSC_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/edg.h b/vendor/pdalboost/boost/predef/compiler/edg.h
new file mode 100644
index 0000000..2ffb9b0
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/edg.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_EDG_H
+#define BOOST_PREDEF_COMPILER_EDG_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_EDG`]
+
+[@http://en.wikipedia.org/wiki/Edison_Design_Group EDG C++ Frontend] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__EDG__`] [__predef_detection__]]
+
+    [[`__EDG_VERSION__`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_COMP_EDG BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__EDG__)
+#   define BOOST_COMP_EDG_DETECTION BOOST_PREDEF_MAKE_10_VRR(__EDG_VERSION__)
+#endif
+
+#ifdef BOOST_COMP_EDG_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_EDG_EMULATED BOOST_COMP_EDG_DETECTION
+#   else
+#       undef BOOST_COMP_EDG
+#       define BOOST_COMP_EDG BOOST_COMP_EDG_DETECTION
+#   endif
+#   define BOOST_COMP_EDG_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_EDG_NAME "EDG C++ Frontend"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_EDG,BOOST_COMP_EDG_NAME)
+
+#ifdef BOOST_COMP_EDG_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_EDG_EMULATED,BOOST_COMP_EDG_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/ekopath.h b/vendor/pdalboost/boost/predef/compiler/ekopath.h
new file mode 100644
index 0000000..e5cde36
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/ekopath.h
@@ -0,0 +1,57 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_EKOPATH_H
+#define BOOST_PREDEF_COMPILER_EKOPATH_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_PATH`]
+
+[@http://en.wikipedia.org/wiki/PathScale EKOpath] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__PATHCC__`] [__predef_detection__]]
+
+    [[`__PATHCC__`, `__PATHCC_MINOR__`, `__PATHCC_PATCHLEVEL__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_PATH BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__PATHCC__)
+#   define BOOST_COMP_PATH_DETECTION \
+        BOOST_VERSION_NUMBER(__PATHCC__,__PATHCC_MINOR__,__PATHCC_PATCHLEVEL__)
+#endif
+
+#ifdef BOOST_COMP_PATH_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_PATH_EMULATED BOOST_COMP_PATH_DETECTION
+#   else
+#       undef BOOST_COMP_PATH
+#       define BOOST_COMP_PATH BOOST_COMP_PATH_DETECTION
+#   endif
+#   define BOOST_COMP_PATH_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_PATH_NAME "EKOpath"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PATH,BOOST_COMP_PATH_NAME)
+
+#ifdef BOOST_COMP_PATH_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PATH_EMULATED,BOOST_COMP_PATH_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/gcc.h b/vendor/pdalboost/boost/predef/compiler/gcc.h
new file mode 100644
index 0000000..c2d7fff
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/gcc.h
@@ -0,0 +1,68 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_GCC_H
+#define BOOST_PREDEF_COMPILER_GCC_H
+
+/* Other compilers that emulate this one need to be detected first. */
+
+#include <boost/predef/compiler/clang.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_GNUC`]
+
+[@http://en.wikipedia.org/wiki/GNU_Compiler_Collection Gnu GCC C/C++] compiler.
+Version number available as major, minor, and patch (if available).
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__GNUC__`] [__predef_detection__]]
+
+    [[`__GNUC__`, `__GNUC_MINOR__`, `__GNUC_PATCHLEVEL__`] [V.R.P]]
+    [[`__GNUC__`, `__GNUC_MINOR__`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_COMP_GNUC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__GNUC__)
+#   if !defined(BOOST_COMP_GNUC_DETECTION) && defined(__GNUC_PATCHLEVEL__)
+#       define BOOST_COMP_GNUC_DETECTION \
+            BOOST_VERSION_NUMBER(__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__)
+#   endif
+#   if !defined(BOOST_COMP_GNUC_DETECTION)
+#       define BOOST_COMP_GNUC_DETECTION \
+            BOOST_VERSION_NUMBER(__GNUC__,__GNUC_MINOR__,0)
+#   endif
+#endif
+
+#ifdef BOOST_COMP_GNUC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_GNUC_EMULATED BOOST_COMP_GNUC_DETECTION
+#   else
+#       undef BOOST_COMP_GNUC
+#       define BOOST_COMP_GNUC BOOST_COMP_GNUC_DETECTION
+#   endif
+#   define BOOST_COMP_GNUC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_GNUC_NAME "Gnu GCC C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GNUC,BOOST_COMP_GNUC_NAME)
+
+#ifdef BOOST_COMP_GNUC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GNUC_EMULATED,BOOST_COMP_GNUC_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/gcc_xml.h b/vendor/pdalboost/boost/predef/compiler/gcc_xml.h
new file mode 100644
index 0000000..acae600
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/gcc_xml.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_GCC_XML_H
+#define BOOST_PREDEF_COMPILER_GCC_XML_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_GCCXML`]
+
+[@http://www.gccxml.org/ GCC XML] compiler.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__GCCXML__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_COMP_GCCXML BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__GCCXML__)
+#   define BOOST_COMP_GCCXML_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#ifdef BOOST_COMP_GCCXML_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_GCCXML_EMULATED BOOST_COMP_GCCXML_DETECTION
+#   else
+#       undef BOOST_COMP_GCCXML
+#       define BOOST_COMP_GCCXML BOOST_COMP_GCCXML_DETECTION
+#   endif
+#   define BOOST_COMP_GCCXML_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_GCCXML_NAME "GCC XML"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GCCXML,BOOST_COMP_GCCXML_NAME)
+
+#ifdef BOOST_COMP_GCCXML_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GCCXML_EMULATED,BOOST_COMP_GCCXML_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/greenhills.h b/vendor/pdalboost/boost/predef/compiler/greenhills.h
new file mode 100644
index 0000000..23b8f01
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/greenhills.h
@@ -0,0 +1,66 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_GREENHILLS_H
+#define BOOST_PREDEF_COMPILER_GREENHILLS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_GHS`]
+
+[@http://en.wikipedia.org/wiki/Green_Hills_Software Green Hills C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__ghs`] [__predef_detection__]]
+    [[`__ghs__`] [__predef_detection__]]
+
+    [[`__GHS_VERSION_NUMBER__`] [V.R.P]]
+    [[`__ghs`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_GHS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__ghs) || defined(__ghs__)
+#   if !defined(BOOST_COMP_GHS_DETECTION) && defined(__GHS_VERSION_NUMBER__)
+#       define BOOST_COMP_GHS_DETECTION BOOST_PREDEF_MAKE_10_VRP(__GHS_VERSION_NUMBER__)
+#   endif
+#   if !defined(BOOST_COMP_GHS_DETECTION) && defined(__ghs)
+#       define BOOST_COMP_GHS_DETECTION BOOST_PREDEF_MAKE_10_VRP(__ghs)
+#   endif
+#   if !defined(BOOST_COMP_GHS_DETECTION)
+#       define BOOST_COMP_GHS_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_GHS_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_GHS_EMULATED BOOST_COMP_GHS_DETECTION
+#   else
+#       undef BOOST_COMP_GHS
+#       define BOOST_COMP_GHS BOOST_COMP_GHS_DETECTION
+#   endif
+#   define BOOST_COMP_GHS_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_GHS_NAME "Green Hills C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GHS,BOOST_COMP_GHS_NAME)
+
+#ifdef BOOST_COMP_GHS_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_GHS_EMULATED,BOOST_COMP_GHS_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/hp_acc.h b/vendor/pdalboost/boost/predef/compiler/hp_acc.h
new file mode 100644
index 0000000..7b3ffe9
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/hp_acc.h
@@ -0,0 +1,61 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_HP_ACC_H
+#define BOOST_PREDEF_COMPILER_HP_ACC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_HPACC`]
+
+HP aC++ compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__HP_aCC`] [__predef_detection__]]
+
+    [[`__HP_aCC`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_HPACC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__HP_aCC)
+#   if !defined(BOOST_COMP_HPACC_DETECTION) && (__HP_aCC > 1)
+#       define BOOST_COMP_HPACC_DETECTION BOOST_PREDEF_MAKE_10_VVRRPP(__HP_aCC)
+#   endif
+#   if !defined(BOOST_COMP_HPACC_DETECTION)
+#       define BOOST_COMP_HPACC_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_HPACC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_HPACC_EMULATED BOOST_COMP_HPACC_DETECTION
+#   else
+#       undef BOOST_COMP_HPACC
+#       define BOOST_COMP_HPACC BOOST_COMP_HPACC_DETECTION
+#   endif
+#   define BOOST_COMP_HPACC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_HPACC_NAME "HP aC++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HPACC,BOOST_COMP_HPACC_NAME)
+
+#ifdef BOOST_COMP_HPACC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HPACC_EMULATED,BOOST_COMP_HPACC_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/iar.h b/vendor/pdalboost/boost/predef/compiler/iar.h
new file mode 100644
index 0000000..237f492
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/iar.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_IAR_H
+#define BOOST_PREDEF_COMPILER_IAR_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_IAR`]
+
+IAR C/C++ compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__IAR_SYSTEMS_ICC__`] [__predef_detection__]]
+
+    [[`__VER__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_IAR BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__IAR_SYSTEMS_ICC__)
+#   define BOOST_COMP_IAR_DETECTION BOOST_PREDEF_MAKE_10_VVRR(__VER__)
+#endif
+
+#ifdef BOOST_COMP_IAR_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_IAR_EMULATED BOOST_COMP_IAR_DETECTION
+#   else
+#       undef BOOST_COMP_IAR
+#       define BOOST_COMP_IAR BOOST_COMP_IAR_DETECTION
+#   endif
+#   define BOOST_COMP_IAR_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_IAR_NAME "IAR C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IAR,BOOST_COMP_IAR_NAME)
+
+#ifdef BOOST_COMP_IAR_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IAR_EMULATED,BOOST_COMP_IAR_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/ibm.h b/vendor/pdalboost/boost/predef/compiler/ibm.h
new file mode 100644
index 0000000..6931ebd
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/ibm.h
@@ -0,0 +1,72 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_IBM_H
+#define BOOST_PREDEF_COMPILER_IBM_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_IBM`]
+
+[@http://en.wikipedia.org/wiki/VisualAge IBM XL C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__IBMCPP__`] [__predef_detection__]]
+    [[`__xlC__`] [__predef_detection__]]
+    [[`__xlc__`] [__predef_detection__]]
+
+    [[`__COMPILER_VER__`] [V.R.P]]
+    [[`__xlC__`] [V.R.P]]
+    [[`__xlc__`] [V.R.P]]
+    [[`__IBMCPP__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_IBM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__IBMCPP__) || defined(__xlC__) || defined(__xlc__)
+#   if !defined(BOOST_COMP_IBM_DETECTION) && defined(__COMPILER_VER__)
+#       define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_0X_VRRPPPP(__COMPILER_VER__)
+#   endif
+#   if !defined(BOOST_COMP_IBM_DETECTION) && defined(__xlC__)
+#       define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_0X_VVRR(__xlC__)
+#   endif
+#   if !defined(BOOST_COMP_IBM_DETECTION) && defined(__xlc__)
+#       define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_0X_VVRR(__xlc__)
+#   endif
+#   if !defined(BOOST_COMP_IBM_DETECTION)
+#       define BOOST_COMP_IBM_DETECTION BOOST_PREDEF_MAKE_10_VRP(__IBMCPP__)
+#   endif
+#endif
+
+#ifdef BOOST_COMP_IBM_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_IBM_EMULATED BOOST_COMP_IBM_DETECTION
+#   else
+#       undef BOOST_COMP_IBM
+#       define BOOST_COMP_IBM BOOST_COMP_IBM_DETECTION
+#   endif
+#   define BOOST_COMP_IBM_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_IBM_NAME "IBM XL C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IBM,BOOST_COMP_IBM_NAME)
+
+#ifdef BOOST_COMP_IBM_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_IBM_EMULATED,BOOST_COMP_IBM_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/intel.h b/vendor/pdalboost/boost/predef/compiler/intel.h
new file mode 100644
index 0000000..65bde67
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/intel.h
@@ -0,0 +1,65 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_INTEL_H
+#define BOOST_PREDEF_COMPILER_INTEL_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_INTEL`]
+
+[@http://en.wikipedia.org/wiki/Intel_C%2B%2B Intel C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__INTEL_COMPILER`] [__predef_detection__]]
+    [[`__ICL`] [__predef_detection__]]
+    [[`__ICC`] [__predef_detection__]]
+    [[`__ECC`] [__predef_detection__]]
+
+    [[`__INTEL_COMPILER`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_INTEL BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || \
+    defined(__ECC)
+#   if !defined(BOOST_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER)
+#       define BOOST_COMP_INTEL_DETECTION BOOST_PREDEF_MAKE_10_VRP(__INTEL_COMPILER)
+#   endif
+#   if !defined(BOOST_COMP_INTEL_DETECTION)
+#       define BOOST_COMP_INTEL_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_INTEL_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_INTEL_EMULATED BOOST_COMP_INTEL_DETECTION
+#   else
+#       undef BOOST_COMP_INTEL
+#       define BOOST_COMP_INTEL BOOST_COMP_INTEL_DETECTION
+#   endif
+#   define BOOST_COMP_INTEL_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_INTEL_NAME "Intel C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_INTEL,BOOST_COMP_INTEL_NAME)
+
+#ifdef BOOST_COMP_INTEL_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_INTEL_EMULATED,BOOST_COMP_INTEL_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/kai.h b/vendor/pdalboost/boost/predef/compiler/kai.h
new file mode 100644
index 0000000..68ce84e
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/kai.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_KAI_H
+#define BOOST_PREDEF_COMPILER_KAI_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_KCC`]
+
+Kai C++ compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__KCC`] [__predef_detection__]]
+
+    [[`__KCC_VERSION`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_KCC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__KCC)
+#   define BOOST_COMP_KCC_DETECTION BOOST_PREDEF_MAKE_0X_VRPP(__KCC_VERSION)
+#endif
+
+#ifdef BOOST_COMP_KCC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_KCC_EMULATED BOOST_COMP_KCC_DETECTION
+#   else
+#       undef BOOST_COMP_KCC
+#       define BOOST_COMP_KCC BOOST_COMP_KCC_DETECTION
+#   endif
+#   define BOOST_COMP_KCC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_KCC_NAME "Kai C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_KCC,BOOST_COMP_KCC_NAME)
+
+#ifdef BOOST_COMP_KCC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_KCC_EMULATED,BOOST_COMP_KCC_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/llvm.h b/vendor/pdalboost/boost/predef/compiler/llvm.h
new file mode 100644
index 0000000..de654eb
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/llvm.h
@@ -0,0 +1,57 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_LLVM_H
+#define BOOST_PREDEF_COMPILER_LLVM_H
+
+/* Other compilers that emulate this one need to be detected first. */
+
+#include <boost/predef/compiler/clang.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_LLVM`]
+
+[@http://en.wikipedia.org/wiki/LLVM LLVM] compiler.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__llvm__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_COMP_LLVM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__llvm__)
+#   define BOOST_COMP_LLVM_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#ifdef BOOST_COMP_LLVM_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_LLVM_EMULATED BOOST_COMP_LLVM_DETECTION
+#   else
+#       undef BOOST_COMP_LLVM
+#       define BOOST_COMP_LLVM BOOST_COMP_LLVM_DETECTION
+#   endif
+#   define BOOST_COMP_LLVM_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_LLVM_NAME "LLVM"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_LLVM,BOOST_COMP_LLVM_NAME)
+
+#ifdef BOOST_COMP_LLVM_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_LLVM_EMULATED,BOOST_COMP_LLVM_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/metaware.h b/vendor/pdalboost/boost/predef/compiler/metaware.h
new file mode 100644
index 0000000..1a32039
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/metaware.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_METAWARE_H
+#define BOOST_PREDEF_COMPILER_METAWARE_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_HIGHC`]
+
+MetaWare High C/C++ compiler.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__HIGHC__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_COMP_HIGHC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__HIGHC__)
+#   define BOOST_COMP_HIGHC_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#ifdef BOOST_COMP_HIGHC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_HIGHC_EMULATED BOOST_COMP_HIGHC_DETECTION
+#   else
+#       undef BOOST_COMP_HIGHC
+#       define BOOST_COMP_HIGHC BOOST_COMP_HIGHC_DETECTION
+#   endif
+#   define BOOST_COMP_HIGHC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_HIGHC_NAME "MetaWare High C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HIGHC,BOOST_COMP_HIGHC_NAME)
+
+#ifdef BOOST_COMP_HIGHC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_HIGHC_EMULATED,BOOST_COMP_HIGHC_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/metrowerks.h b/vendor/pdalboost/boost/predef/compiler/metrowerks.h
new file mode 100644
index 0000000..f2d739b
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/metrowerks.h
@@ -0,0 +1,77 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_METROWERKS_H
+#define BOOST_PREDEF_COMPILER_METROWERKS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_MWERKS`]
+
+[@http://en.wikipedia.org/wiki/CodeWarrior Metrowerks CodeWarrior] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__MWERKS__`] [__predef_detection__]]
+    [[`__CWCC__`] [__predef_detection__]]
+
+    [[`__CWCC__`] [V.R.P]]
+    [[`__MWERKS__`] [V.R.P >= 4.2.0]]
+    [[`__MWERKS__`] [9.R.0]]
+    [[`__MWERKS__`] [8.R.0]]
+    ]
+ */
+
+#define BOOST_COMP_MWERKS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__MWERKS__) || defined(__CWCC__)
+#   if !defined(BOOST_COMP_MWERKS_DETECTION) && defined(__CWCC__)
+#       define BOOST_COMP_MWERKS_DETECTION BOOST_PREDEF_MAKE_0X_VRPP(__CWCC__)
+#   endif
+#   if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x4200)
+#       define BOOST_COMP_MWERKS_DETECTION BOOST_PREDEF_MAKE_0X_VRPP(__MWERKS__)
+#   endif
+#   if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3204) // note the "skip": 04->9.3
+#       define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER(9,(__MWERKS__)%100-1,0)
+#   endif
+#   if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3200)
+#       define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER(9,(__MWERKS__)%100,0)
+#   endif
+#   if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3000)
+#       define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER(8,(__MWERKS__)%100,0)
+#   endif
+#   if !defined(BOOST_COMP_MWERKS_DETECTION)
+#       define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_MWERKS_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_MWERKS_EMULATED BOOST_COMP_MWERKS_DETECTION
+#   else
+#       undef BOOST_COMP_MWERKS
+#       define BOOST_COMP_MWERKS BOOST_COMP_MWERKS_DETECTION
+#   endif
+#   define BOOST_COMP_MWERKS_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_MWERKS_NAME "Metrowerks CodeWarrior"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MWERKS,BOOST_COMP_MWERKS_NAME)
+
+#ifdef BOOST_COMP_MWERKS_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MWERKS_EMULATED,BOOST_COMP_MWERKS_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/microtec.h b/vendor/pdalboost/boost/predef/compiler/microtec.h
new file mode 100644
index 0000000..066a6d2
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/microtec.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_MICROTEC_H
+#define BOOST_PREDEF_COMPILER_MICROTEC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_MRI`]
+
+[@http://www.mentor.com/microtec/ Microtec C/C++] compiler.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`_MRI`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_COMP_MRI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(_MRI)
+#   define BOOST_COMP_MRI_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#ifdef BOOST_COMP_MRI_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_MRI_EMULATED BOOST_COMP_MRI_DETECTION
+#   else
+#       undef BOOST_COMP_MRI
+#       define BOOST_COMP_MRI BOOST_COMP_MRI_DETECTION
+#   endif
+#   define BOOST_COMP_MRI_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_MRI_NAME "Microtec C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MRI,BOOST_COMP_MRI_NAME)
+
+#ifdef BOOST_COMP_MRI_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MRI_EMULATED,BOOST_COMP_MRI_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/mpw.h b/vendor/pdalboost/boost/predef/compiler/mpw.h
new file mode 100644
index 0000000..1183306
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/mpw.h
@@ -0,0 +1,63 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_MPW_H
+#define BOOST_PREDEF_COMPILER_MPW_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_MPW`]
+
+[@http://en.wikipedia.org/wiki/Macintosh_Programmer%27s_Workshop MPW C++] compiler.
+Version number available as major, and minor.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__MRC__`] [__predef_detection__]]
+    [[`MPW_C`] [__predef_detection__]]
+    [[`MPW_CPLUS`] [__predef_detection__]]
+
+    [[`__MRC__`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_COMP_MPW BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__MRC__) || defined(MPW_C) || defined(MPW_CPLUS)
+#   if !defined(BOOST_COMP_MPW_DETECTION) && defined(__MRC__)
+#       define BOOST_COMP_MPW_DETECTION BOOST_PREDEF_MAKE_0X_VVRR(__MRC__)
+#   endif
+#   if !defined(BOOST_COMP_MPW_DETECTION)
+#       define BOOST_COMP_MPW_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_MPW_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_MPW_EMULATED BOOST_COMP_MPW_DETECTION
+#   else
+#       undef BOOST_COMP_MPW
+#       define BOOST_COMP_MPW BOOST_COMP_MPW_DETECTION
+#   endif
+#   define BOOST_COMP_MPW_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_MPW_NAME "MPW C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MPW,BOOST_COMP_MPW_NAME)
+
+#ifdef BOOST_COMP_MPW_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MPW_EMULATED,BOOST_COMP_MPW_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/palm.h b/vendor/pdalboost/boost/predef/compiler/palm.h
new file mode 100644
index 0000000..707925a
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/palm.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_PALM_H
+#define BOOST_PREDEF_COMPILER_PALM_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_PALM`]
+
+Palm C/C++ compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`_PACC_VER`] [__predef_detection__]]
+
+    [[`_PACC_VER`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_PALM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(_PACC_VER)
+#   define BOOST_COMP_PALM_DETECTION BOOST_PREDEF_MAKE_0X_VRRPP000(_PACC_VER)
+#endif
+
+#ifdef BOOST_COMP_PALM_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_PALM_EMULATED BOOST_COMP_PALM_DETECTION
+#   else
+#       undef BOOST_COMP_PALM
+#       define BOOST_COMP_PALM BOOST_COMP_PALM_DETECTION
+#   endif
+#   define BOOST_COMP_PALM_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_PALM_NAME "Palm C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PALM,BOOST_COMP_PALM_NAME)
+
+#ifdef BOOST_COMP_PALM_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PALM_EMULATED,BOOST_COMP_PALM_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/pgi.h b/vendor/pdalboost/boost/predef/compiler/pgi.h
new file mode 100644
index 0000000..e016aeb
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/pgi.h
@@ -0,0 +1,60 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_PGI_H
+#define BOOST_PREDEF_COMPILER_PGI_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_PGI`]
+
+[@http://en.wikipedia.org/wiki/The_Portland_Group Portland Group C/C++] compiler.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__PGI`] [__predef_detection__]]
+
+    [[`__PGIC__`, `__PGIC_MINOR__`, `__PGIC_PATCHLEVEL__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_PGI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__PGI)
+#   if !defined(BOOST_COMP_PGI_DETECTION) && (defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__))
+#       define BOOST_COMP_PGI_DETECTION BOOST_VERSION_NUMBER(__PGIC__,__PGIC_MINOR__,__PGIC_PATCHLEVEL__)
+#   endif
+#   if !defined(BOOST_COMP_PGI_DETECTION)
+#       define BOOST_COMP_PGI_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_PGI_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_PGI_EMULATED BOOST_COMP_PGI_DETECTION
+#   else
+#       undef BOOST_COMP_PGI
+#       define BOOST_COMP_PGI BOOST_COMP_PGI_DETECTION
+#   endif
+#   define BOOST_COMP_PGI_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_PGI_NAME "Portland Group C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PGI,BOOST_COMP_PGI_NAME)
+
+#ifdef BOOST_COMP_PGI_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_PGI_EMULATED,BOOST_COMP_PGI_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/sgi_mipspro.h b/vendor/pdalboost/boost/predef/compiler/sgi_mipspro.h
new file mode 100644
index 0000000..00739f0
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/sgi_mipspro.h
@@ -0,0 +1,66 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_SGI_MIPSPRO_H
+#define BOOST_PREDEF_COMPILER_SGI_MIPSPRO_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_SGI`]
+
+[@http://en.wikipedia.org/wiki/MIPSpro SGI MIPSpro] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__sgi`] [__predef_detection__]]
+    [[`sgi`] [__predef_detection__]]
+
+    [[`_SGI_COMPILER_VERSION`] [V.R.P]]
+    [[`_COMPILER_VERSION`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_SGI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__sgi) || defined(sgi)
+#   if !defined(BOOST_COMP_SGI_DETECTION) && defined(_SGI_COMPILER_VERSION)
+#       define BOOST_COMP_SGI_DETECTION BOOST_PREDEF_MAKE_10_VRP(_SGI_COMPILER_VERSION)
+#   endif
+#   if !defined(BOOST_COMP_SGI_DETECTION) && defined(_COMPILER_VERSION)
+#       define BOOST_COMP_SGI_DETECTION BOOST_PREDEF_MAKE_10_VRP(_COMPILER_VERSION)
+#   endif
+#   if !defined(BOOST_COMP_SGI_DETECTION)
+#       define BOOST_COMP_SGI_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_SGI_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_SGI_EMULATED BOOST_COMP_SGI_DETECTION
+#   else
+#       undef BOOST_COMP_SGI
+#       define BOOST_COMP_SGI BOOST_COMP_SGI_DETECTION
+#   endif
+#   define BOOST_COMP_SGI_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_SGI_NAME "SGI MIPSpro"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SGI,BOOST_COMP_SGI_NAME)
+
+#ifdef BOOST_COMP_SGI_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SGI_EMULATED,BOOST_COMP_SGI_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/sunpro.h b/vendor/pdalboost/boost/predef/compiler/sunpro.h
new file mode 100644
index 0000000..92c3926
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/sunpro.h
@@ -0,0 +1,76 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_SUNPRO_H
+#define BOOST_PREDEF_COMPILER_SUNPRO_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_SUNPRO`]
+
+[@http://en.wikipedia.org/wiki/Oracle_Solaris_Studio Oracle Solaris Studio] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__SUNPRO_CC`] [__predef_detection__]]
+    [[`__SUNPRO_C`] [__predef_detection__]]
+
+    [[`__SUNPRO_CC`] [V.R.P]]
+    [[`__SUNPRO_C`] [V.R.P]]
+    [[`__SUNPRO_CC`] [VV.RR.P]]
+    [[`__SUNPRO_C`] [VV.RR.P]]
+    ]
+ */
+
+#define BOOST_COMP_SUNPRO BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__SUNPRO_CC) || defined(__SUNPRO_C)
+#   if !defined(BOOST_COMP_SUNPRO_DETECTION) && defined(__SUNPRO_CC)
+#       if (__SUNPRO_CC < 0x5100)
+#           define BOOST_COMP_SUNPRO_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__SUNPRO_CC)
+#       else
+#           define BOOST_COMP_SUNPRO_DETECTION BOOST_PREDEF_MAKE_0X_VVRRP(__SUNPRO_CC)
+#       endif
+#   endif
+#   if !defined(BOOST_COMP_SUNPRO_DETECTION) && defined(__SUNPRO_C)
+#       if (__SUNPRO_C < 0x5100)
+#           define BOOST_COMP_SUNPRO_DETECTION BOOST_PREDEF_MAKE_0X_VRP(__SUNPRO_C)
+#       else
+#           define BOOST_COMP_SUNPRO_DETECTION BOOST_PREDEF_MAKE_0X_VVRRP(__SUNPRO_C)
+#       endif
+#   endif
+#   if !defined(BOOST_COMP_SUNPRO_DETECTION)
+#       define BOOST_COMP_SUNPRO_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_COMP_SUNPRO_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_SUNPRO_EMULATED BOOST_COMP_SUNPRO_DETECTION
+#   else
+#       undef BOOST_COMP_SUNPRO
+#       define BOOST_COMP_SUNPRO BOOST_COMP_SUNPRO_DETECTION
+#   endif
+#   define BOOST_COMP_SUNPRO_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_SUNPRO_NAME "Oracle Solaris Studio"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SUNPRO,BOOST_COMP_SUNPRO_NAME)
+
+#ifdef BOOST_COMP_SUNPRO_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_SUNPRO_EMULATED,BOOST_COMP_SUNPRO_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/tendra.h b/vendor/pdalboost/boost/predef/compiler/tendra.h
new file mode 100644
index 0000000..c2bc5e4
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/tendra.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_TENDRA_H
+#define BOOST_PREDEF_COMPILER_TENDRA_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_TENDRA`]
+
+[@http://en.wikipedia.org/wiki/TenDRA_Compiler TenDRA C/C++] compiler.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__TenDRA__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_COMP_TENDRA BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__TenDRA__)
+#   define BOOST_COMP_TENDRA_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#ifdef BOOST_COMP_TENDRA_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_TENDRA_EMULATED BOOST_COMP_TENDRA_DETECTION
+#   else
+#       undef BOOST_COMP_TENDRA
+#       define BOOST_COMP_TENDRA BOOST_COMP_TENDRA_DETECTION
+#   endif
+#   define BOOST_COMP_TENDRA_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_TENDRA_NAME "TenDRA C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_TENDRA,BOOST_COMP_TENDRA_NAME)
+
+#ifdef BOOST_COMP_TENDRA_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_TENDRA_EMULATED,BOOST_COMP_TENDRA_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/visualc.h b/vendor/pdalboost/boost/predef/compiler/visualc.h
new file mode 100644
index 0000000..9481d9d
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/visualc.h
@@ -0,0 +1,91 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_VISUALC_H
+#define BOOST_PREDEF_COMPILER_VISUALC_H
+
+/* Other compilers that emulate this one need to be detected first. */
+
+#include <boost/predef/compiler/clang.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_MSVC`]
+
+[@http://en.wikipedia.org/wiki/Visual_studio Microsoft Visual C/C++] compiler.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`_MSC_VER`] [__predef_detection__]]
+
+    [[`_MSC_FULL_VER`] [V.R.P]]
+    [[`_MSC_VER`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_COMP_MSVC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(_MSC_VER)
+#   if !defined (_MSC_FULL_VER)
+#       define BOOST_COMP_MSVC_BUILD 0
+#   else
+        /* how many digits does the build number have? */
+#       if _MSC_FULL_VER / 10000 == _MSC_VER
+            /* four digits */
+#           define BOOST_COMP_MSVC_BUILD (_MSC_FULL_VER % 10000)
+#       elif _MSC_FULL_VER / 100000 == _MSC_VER
+            /* five digits */
+#           define BOOST_COMP_MSVC_BUILD (_MSC_FULL_VER % 100000)
+#       else
+#           error "Cannot determine build number from _MSC_FULL_VER"
+#       endif
+#   endif
+    /*
+    VS2014 was skipped in the release sequence for MS. Which
+    means that the compiler and VS product versions are no longer
+    in sync. Hence we need to use different formulas for
+    mapping from MSC version to VS product version.
+    */
+#   if (_MSC_VER >= 1900)
+#       define BOOST_COMP_MSVC_DETECTION BOOST_VERSION_NUMBER(\
+            _MSC_VER/100-5,\
+            _MSC_VER%100,\
+            BOOST_COMP_MSVC_BUILD)
+#   else
+#       define BOOST_COMP_MSVC_DETECTION BOOST_VERSION_NUMBER(\
+            _MSC_VER/100-6,\
+            _MSC_VER%100,\
+            BOOST_COMP_MSVC_BUILD)
+#   endif
+#endif
+
+#ifdef BOOST_COMP_MSVC_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_MSVC_EMULATED BOOST_COMP_MSVC_DETECTION
+#   else
+#       undef BOOST_COMP_MSVC
+#       define BOOST_COMP_MSVC BOOST_COMP_MSVC_DETECTION
+#   endif
+#   define BOOST_COMP_MSVC_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_MSVC_NAME "Microsoft Visual C/C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MSVC,BOOST_COMP_MSVC_NAME)
+
+#ifdef BOOST_COMP_MSVC_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MSVC_EMULATED,BOOST_COMP_MSVC_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/compiler/watcom.h b/vendor/pdalboost/boost/predef/compiler/watcom.h
new file mode 100644
index 0000000..b0e7776
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/compiler/watcom.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_WATCOM_H
+#define BOOST_PREDEF_COMPILER_WATCOM_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_COMP_WATCOM`]
+
+[@http://en.wikipedia.org/wiki/Watcom Watcom C++] compiler.
+Version number available as major, and minor.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__WATCOMC__`] [__predef_detection__]]
+
+    [[`__WATCOMC__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_COMP_WATCOM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__WATCOMC__)
+#   define BOOST_COMP_WATCOM_DETECTION BOOST_PREDEF_MAKE_10_VVRR(__WATCOMC__)
+#endif
+
+#ifdef BOOST_COMP_WATCOM_DETECTION
+#   if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
+#       define BOOST_COMP_WATCOM_EMULATED BOOST_COMP_WATCOM_DETECTION
+#   else
+#       undef BOOST_COMP_WATCOM
+#       define BOOST_COMP_WATCOM BOOST_COMP_WATCOM_DETECTION
+#   endif
+#   define BOOST_COMP_WATCOM_AVAILABLE
+#   include <boost/predef/detail/comp_detected.h>
+#endif
+
+#define BOOST_COMP_WATCOM_NAME "Watcom C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_WATCOM,BOOST_COMP_WATCOM_NAME)
+
+#ifdef BOOST_COMP_WATCOM_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_WATCOM_EMULATED,BOOST_COMP_WATCOM_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/detail/_cassert.h b/vendor/pdalboost/boost/predef/detail/_cassert.h
new file mode 100644
index 0000000..940e944
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/detail/_cassert.h
@@ -0,0 +1,17 @@
+/*
+Copyright Rene Rivera 2011-2012
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL__CASSERT_H
+#define BOOST_PREDEF_DETAIL__CASSERT_H
+
+#if defined(__cplusplus)
+#include <cassert>
+#else
+#include <assert.h>
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/detail/_exception.h b/vendor/pdalboost/boost/predef/detail/_exception.h
new file mode 100644
index 0000000..f5a6687
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/detail/_exception.h
@@ -0,0 +1,15 @@
+/*
+Copyright Rene Rivera 2011-2012
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL__EXCEPTION_H
+#define BOOST_PREDEF_DETAIL__EXCEPTION_H
+
+#if defined(__cplusplus)
+#include <exception>
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/detail/comp_detected.h b/vendor/pdalboost/boost/predef/detail/comp_detected.h
new file mode 100644
index 0000000..fda1801
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/detail/comp_detected.h
@@ -0,0 +1,10 @@
+/*
+Copyright Rene Rivera 2014
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL_COMP_DETECTED
+#define BOOST_PREDEF_DETAIL_COMP_DETECTED 1
+#endif
diff --git a/vendor/pdalboost/boost/predef/detail/endian_compat.h b/vendor/pdalboost/boost/predef/detail/endian_compat.h
new file mode 100644
index 0000000..7725e68
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/detail/endian_compat.h
@@ -0,0 +1,26 @@
+/*
+Copyright Rene Rivera 2013
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL_ENDIAN_COMPAT_H
+#define BOOST_PREDEF_DETAIL_ENDIAN_COMPAT_H
+
+#include <boost/predef/other/endian.h>
+
+#if BOOST_ENDIAN_BIG_BYTE
+#   define BOOST_BIG_ENDIAN
+#   define BOOST_BYTE_ORDER 4321
+#endif
+#if BOOST_ENDIAN_LITTLE_BYTE
+#   define BOOST_LITTLE_ENDIAN
+#   define BOOST_BYTE_ORDER 1234
+#endif
+#if BOOST_ENDIAN_LITTLE_WORD
+#   define BOOST_PDP_ENDIAN
+#   define BOOST_BYTE_ORDER 2134
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/detail/os_detected.h b/vendor/pdalboost/boost/predef/detail/os_detected.h
new file mode 100644
index 0000000..08e10f9
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/detail/os_detected.h
@@ -0,0 +1,10 @@
+/*
+Copyright Rene Rivera 2013
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL_OS_DETECTED
+#define BOOST_PREDEF_DETAIL_OS_DETECTED 1
+#endif
diff --git a/vendor/pdalboost/boost/predef/detail/platform_detected.h b/vendor/pdalboost/boost/predef/detail/platform_detected.h
new file mode 100644
index 0000000..4faf693
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/detail/platform_detected.h
@@ -0,0 +1,10 @@
+/*
+Copyright Rene Rivera 2014
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL_PLAT_DETECTED
+#define BOOST_PREDEF_DETAIL_PLAT_DETECTED 1
+#endif
diff --git a/vendor/pdalboost/boost/predef/detail/test.h b/vendor/pdalboost/boost/predef/detail/test.h
new file mode 100644
index 0000000..546a9e4
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/detail/test.h
@@ -0,0 +1,17 @@
+/*
+Copyright Rene Rivera 2011-2012
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_DETAIL_TEST_H
+#define BOOST_PREDEF_DETAIL_TEST_H
+
+#if !defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+
+#define BOOST_PREDEF_DECLARE_TEST(x,s)
+
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/hardware.h b/vendor/pdalboost/boost/predef/hardware.h
new file mode 100644
index 0000000..972b73a
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/hardware.h
@@ -0,0 +1,16 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#if !defined(BOOST_PREDEF_HARDWARE_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_HARDWARE_H
+#define BOOST_PREDEF_HARDWARE_H
+#endif
+
+#include <boost/predef/hardware/simd.h>
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/hardware/simd.h b/vendor/pdalboost/boost/predef/hardware/simd.h
new file mode 100644
index 0000000..4de1e70
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/hardware/simd.h
@@ -0,0 +1,107 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#include <boost/predef/hardware/simd/x86.h>
+#include <boost/predef/hardware/simd/x86_amd.h>
+#include <boost/predef/hardware/simd/arm.h>
+#include <boost/predef/hardware/simd/ppc.h>
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_H
+#define BOOST_PREDEF_HARDWARE_SIMD_H
+
+#include <boost/predef/version_number.h>
+
+/*`
+ [section Using the `BOOST_HW_SIMD_*` predefs]
+ [include ../doc/hardware_simd.qbk]
+ [endsect]
+
+ [/ --------------------------- ]
+
+ [section `BOOST_HW_SIMD_*`]
+
+ [heading `BOOST_HW_SIMD`]
+
+ The SIMD extension detected for a specific architectures.
+ Version number depends on the detected extension.
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`BOOST_HW_SIMD_X86_AVAILABLE`] [__predef_detection__]]
+     [[`BOOST_HW_SIMD_X86_AMD_AVAILABLE`] [__predef_detection__]]
+     [[`BOOST_HW_SIMD_ARM_AVAILABLE`] [__predef_detection__]]
+     [[`BOOST_HW_SIMD_PPC_AVAILABLE`] [__predef_detection__]]
+     ]
+
+ [include ../include/boost/predef/hardware/simd/x86.h]
+ [include ../include/boost/predef/hardware/simd/x86_amd.h]
+ [include ../include/boost/predef/hardware/simd/arm.h]
+ [include ../include/boost/predef/hardware/simd/ppc.h]
+
+ [endsect]
+
+ [/ --------------------------- ]
+
+ [section `BOOST_HW_SIMD_X86_*_VERSION`]
+ [include ../include/boost/predef/hardware/simd/x86/versions.h]
+ [endsect]
+
+ [section `BOOST_HW_SIMD_X86_AMD_*_VERSION`]
+ [include ../include/boost/predef/hardware/simd/x86_amd/versions.h]
+ [endsect]
+
+ [section `BOOST_HW_SIMD_ARM_*_VERSION`]
+ [include ../include/boost/predef/hardware/simd/arm/versions.h]
+ [endsect]
+
+ [section `BOOST_HW_SIMD_PPC_*_VERSION`]
+ [include ../include/boost/predef/hardware/simd/ppc/versions.h]
+ [endsect]
+
+ */
+
+// We check if SIMD extension of multiples architectures have been detected,
+// if yes, then this is an error!
+//
+// NOTE: _X86_AMD implies _X86, so there is no need to check for it here!
+//
+#if defined(BOOST_HW_SIMD_ARM_AVAILABLE) && defined(BOOST_HW_SIMD_PPC_AVAILABLE) ||\
+    defined(BOOST_HW_SIMD_ARM_AVAILABLE) && defined(BOOST_HW_SIMD_X86_AVAILABLE) ||\
+    defined(BOOST_HW_SIMD_PPC_AVAILABLE) && defined(BOOST_HW_SIMD_X86_AVAILABLE)
+#   error "Multiple SIMD architectures detected, this cannot happen!"
+#endif
+
+#if defined(BOOST_HW_SIMD_X86_AVAILABLE)
+#   define BOOST_HW_SIMD BOOST_HW_SIMD_X86
+#endif
+
+#if defined(BOOST_HW_SIMD_X86_AMD_AVAILABLE)
+#   define BOOST_HW_SIMD BOOST_HW_SIMD_X86_AMD
+#endif
+
+#if defined(BOOST_HW_SIMD_ARM_AVAILABLE)
+#   define BOOST_HW_SIMD BOOST_HW_SIMD_ARM
+#endif
+
+#if defined(BOOST_HW_SIMD_PPC_AVAILABLE)
+#   define BOOST_HW_SIMD BOOST_HW_SIMD_PPC
+#endif
+
+#if defined(BOOST_HW_SIMD)
+#   define BOOST_HW_SIMD_AVAILABLE
+#else
+#   define BOOST_HW_SIMD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#endif
+
+#define BOOST_HW_SIMD_NAME "Hardware SIMD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD, BOOST_HW_SIMD_NAME)
diff --git a/vendor/pdalboost/boost/predef/hardware/simd/arm.h b/vendor/pdalboost/boost/predef/hardware/simd/arm.h
new file mode 100644
index 0000000..d067c93
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/hardware/simd/arm.h
@@ -0,0 +1,57 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_ARM_H
+#define BOOST_PREDEF_HARDWARE_SIMD_ARM_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/hardware/simd/arm/versions.h>
+
+/*`
+ [heading `BOOST_HW_SIMD_ARM`]
+
+ The SIMD extension for ARM (*if detected*).
+ Version number depends on the most recent detected extension.
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__ARM_NEON__`] [__predef_detection__]]
+     [[`__aarch64__`] [__predef_detection__]]
+     [[`_M_ARM`] [__predef_detection__]]
+     ]
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__ARM_NEON__`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]
+     [[`__aarch64__`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]
+     [[`_M_ARM`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]
+     ]
+
+ */
+
+#define BOOST_HW_SIMD_ARM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#undef BOOST_HW_SIMD_ARM
+#if !defined(BOOST_HW_SIMD_ARM) && (defined(__ARM_NEON__) || defined(__aarch64__) || defined (_M_ARM))
+#   define BOOST_HW_SIMD_ARM BOOST_HW_SIMD_ARM_NEON_VERSION
+#endif
+
+#if !defined(BOOST_HW_SIMD_ARM)
+#   define BOOST_HW_SIMD_ARM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#else
+#   define BOOST_HW_SIMD_ARM_AVAILABLE
+#endif
+
+#define BOOST_HW_SIMD_ARM_NAME "ARM SIMD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_ARM, BOOST_HW_SIMD_ARM_NAME)
diff --git a/vendor/pdalboost/boost/predef/hardware/simd/arm/versions.h b/vendor/pdalboost/boost/predef/hardware/simd/arm/versions.h
new file mode 100644
index 0000000..8425b31
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/hardware/simd/arm/versions.h
@@ -0,0 +1,32 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_ARM_VERSIONS_H
+#define BOOST_PREDEF_HARDWARE_SIMD_ARM_VERSIONS_H
+
+#include <boost/predef/version_number.h>
+
+/*`
+ Those defines represent ARM SIMD extensions versions.
+
+ [note You *MUST* compare them with the predef `BOOST_HW_SIMD_ARM`.]
+ */
+
+// ---------------------------------
+
+/*`
+ [heading `BOOST_HW_SIMD_ARM_NEON_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/ARM_architecture#Advanced_SIMD_.28NEON.29 NEON]
+ ARM extension version number.
+
+ Version number is: *1.0.0*.
+ */
+#define BOOST_HW_SIMD_ARM_NEON_VERSION BOOST_VERSION_NUMBER(1, 0, 0)
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/hardware/simd/ppc.h b/vendor/pdalboost/boost/predef/hardware/simd/ppc.h
new file mode 100644
index 0000000..eef25c2
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/hardware/simd/ppc.h
@@ -0,0 +1,69 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_PPC_H
+#define BOOST_PREDEF_HARDWARE_SIMD_PPC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/hardware/simd/ppc/versions.h>
+
+/*`
+ [heading `BOOST_HW_SIMD_PPC`]
+
+ The SIMD extension for PowerPC (*if detected*).
+ Version number depends on the most recent detected extension.
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__VECTOR4DOUBLE__`] [__predef_detection__]]
+
+     [[`__ALTIVEC__`] [__predef_detection__]]
+     [[`__VEC__`] [__predef_detection__]]
+
+     [[`__VSX__`] [__predef_detection__]]
+     ]
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__VECTOR4DOUBLE__`] [BOOST_HW_SIMD_PPC_QPX_VERSION]]
+
+     [[`__ALTIVEC__`] [BOOST_HW_SIMD_PPC_VMX_VERSION]]
+     [[`__VEC__`] [BOOST_HW_SIMD_PPC_VMX_VERSION]]
+
+     [[`__VSX__`] [BOOST_HW_SIMD_PPC_VSX_VERSION]]
+     ]
+
+ */
+
+#define BOOST_HW_SIMD_PPC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#undef BOOST_HW_SIMD_PPC
+#if !defined(BOOST_HW_SIMD_PPC) && defined(__VECTOR4DOUBLE__)
+#   define BOOST_HW_SIMD_PPC BOOST_HW_SIMD_PPC_QPX_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_PPC) && defined(__VSX__)
+#   define BOOST_HW_SIMD_PPC BOOST_HW_SIMD_PPC_VSX_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_PPC) && (defined(__ALTIVEC__) || defined(__VEC__))
+#   define BOOST_HW_SIMD_PPC BOOST_HW_SIMD_PPC_VMX_VERSION
+#endif
+
+#if !defined(BOOST_HW_SIMD_PPC)
+#   define BOOST_HW_SIMD_PPC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#else
+#   define BOOST_HW_SIMD_PPC_AVAILABLE
+#endif
+
+#define BOOST_HW_SIMD_PPC_NAME "PPC SIMD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_PPC, BOOST_HW_SIMD_PPC_NAME)
diff --git a/vendor/pdalboost/boost/predef/hardware/simd/ppc/versions.h b/vendor/pdalboost/boost/predef/hardware/simd/ppc/versions.h
new file mode 100644
index 0000000..ffe3f0b
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/hardware/simd/ppc/versions.h
@@ -0,0 +1,51 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_PPC_VERSIONS_H
+#define BOOST_PREDEF_HARDWARE_SIMD_PPC_VERSIONS_H
+
+#include <boost/predef/version_number.h>
+
+/*`
+ Those defines represent Power PC SIMD extensions versions.
+
+ [note You *MUST* compare them with the predef `BOOST_HW_SIMD_PPC`.]
+ */
+
+// ---------------------------------
+
+/*`
+ [heading `BOOST_HW_SIMD_PPC_VMX_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/AltiVec#VMX128 VMX] powerpc extension
+ version number.
+
+ Version number is: *1.0.0*.
+ */
+#define BOOST_HW_SIMD_PPC_VMX_VERSION BOOST_VERSION_NUMBER(1, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_PPC_VSX_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/AltiVec#VSX VSX] powerpc extension version
+ number.
+
+ Version number is: *1.1.0*.
+ */
+#define BOOST_HW_SIMD_PPC_VSX_VERSION BOOST_VERSION_NUMBER(1, 1, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_PPC_QPX_VERSION`]
+
+ The QPX powerpc extension version number.
+
+ Version number is: *2.0.0*.
+ */
+#define BOOST_HW_SIMD_PPC_QPX_VERSION BOOST_VERSION_NUMBER(2, 0, 0)
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/hardware/simd/x86.h b/vendor/pdalboost/boost/predef/hardware/simd/x86.h
new file mode 100644
index 0000000..0874bc4
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/hardware/simd/x86.h
@@ -0,0 +1,123 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_H
+#define BOOST_PREDEF_HARDWARE_SIMD_X86_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/hardware/simd/x86/versions.h>
+
+/*`
+ [heading `BOOST_HW_SIMD_X86`]
+
+ The SIMD extension for x86 (*if detected*).
+ Version number depends on the most recent detected extension.
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__SSE__`] [__predef_detection__]]
+     [[`_M_X64`] [__predef_detection__]]
+     [[`_M_IX86_FP >= 1`] [__predef_detection__]]
+
+     [[`__SSE2__`] [__predef_detection__]]
+     [[`_M_X64`] [__predef_detection__]]
+     [[`_M_IX86_FP >= 2`] [__predef_detection__]]
+
+     [[`__SSE3__`] [__predef_detection__]]
+
+     [[`__SSSE3__`] [__predef_detection__]]
+
+     [[`__SSE4_1__`] [__predef_detection__]]
+
+     [[`__SSE4_2__`] [__predef_detection__]]
+
+     [[`__AVX__`] [__predef_detection__]]
+
+     [[`__FMA__`] [__predef_detection__]]
+
+     [[`__AVX2__`] [__predef_detection__]]
+     ]
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__SSE__`] [BOOST_HW_SIMD_X86_SSE_VERSION]]
+     [[`_M_X64`] [BOOST_HW_SIMD_X86_SSE_VERSION]]
+     [[`_M_IX86_FP >= 1`] [BOOST_HW_SIMD_X86_SSE_VERSION]]
+
+     [[`__SSE2__`] [BOOST_HW_SIMD_X86_SSE2_VERSION]]
+     [[`_M_X64`] [BOOST_HW_SIMD_X86_SSE2_VERSION]]
+     [[`_M_IX86_FP >= 2`] [BOOST_HW_SIMD_X86_SSE2_VERSION]]
+
+     [[`__SSE3__`] [BOOST_HW_SIMD_X86_SSE3_VERSION]]
+
+     [[`__SSSE3__`] [BOOST_HW_SIMD_X86_SSSE3_VERSION]]
+
+     [[`__SSE4_1__`] [BOOST_HW_SIMD_X86_SSE4_1_VERSION]]
+
+     [[`__SSE4_2__`] [BOOST_HW_SIMD_X86_SSE4_2_VERSION]]
+
+     [[`__AVX__`] [BOOST_HW_SIMD_X86_AVX_VERSION]]
+
+     [[`__FMA__`] [BOOST_HW_SIMD_X86_FMA3_VERSION]]
+
+     [[`__AVX2__`] [BOOST_HW_SIMD_x86_AVX2_VERSION]]
+     ]
+
+ */
+
+#define BOOST_HW_SIMD_X86 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#undef BOOST_HW_SIMD_X86
+#if !defined(BOOST_HW_SIMD_X86) && defined(__MIC__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_MIC_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__AVX2__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_AVX2_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__AVX__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_AVX_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__FMA__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_FMA_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__SSE4_2__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE4_2_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__SSE4_1__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE4_1_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__SSSE3__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSSE3_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__SSE3__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE3_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE2__) || defined(_M_X64) || _M_IX86_FP >= 2)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE2_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE__) || defined(_M_X64) || _M_IX86_FP >= 1)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86) && defined(__MMX__)
+#   define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_MMX_VERSION
+#endif
+
+#if !defined(BOOST_HW_SIMD_X86)
+#   define BOOST_HW_SIMD_X86 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#else
+#   define BOOST_HW_SIMD_X86_AVAILABLE
+#endif
+
+#define BOOST_HW_SIMD_X86_NAME "x86 SIMD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_X86, BOOST_HW_SIMD_X86_NAME)
diff --git a/vendor/pdalboost/boost/predef/hardware/simd/x86/versions.h b/vendor/pdalboost/boost/predef/hardware/simd/x86/versions.h
new file mode 100644
index 0000000..0c7a4d3
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/hardware/simd/x86/versions.h
@@ -0,0 +1,129 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_VERSIONS_H
+#define BOOST_PREDEF_HARDWARE_SIMD_X86_VERSIONS_H
+
+#include <boost/predef/version_number.h>
+
+/*`
+ Those defines represent x86 SIMD extensions versions.
+
+ [note You *MUST* compare them with the predef `BOOST_HW_SIMD_X86`.]
+ */
+
+// ---------------------------------
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_MMX_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/MMX_(instruction_set) MMX] x86 extension
+ version number.
+
+ Version number is: *0.99.0*.
+ */
+#define BOOST_HW_SIMD_X86_MMX_VERSION BOOST_VERSION_NUMBER(0, 99, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions SSE] x86 extension
+ version number.
+
+ Version number is: *1.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSE_VERSION BOOST_VERSION_NUMBER(1, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE2_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/SSE2 SSE2] x86 extension version number.
+
+ Version number is: *2.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSE2_VERSION BOOST_VERSION_NUMBER(2, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE3_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/SSE3 SSE3] x86 extension version number.
+
+ Version number is: *3.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSE3_VERSION BOOST_VERSION_NUMBER(3, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSSE3_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/SSSE3 SSSE3] x86 extension version number.
+
+ Version number is: *3.1.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSSE3_VERSION BOOST_VERSION_NUMBER(3, 1, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE4_1_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/SSE4#SSE4.1 SSE4_1] x86 extension version
+ number.
+
+ Version number is: *4.1.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSE4_1_VERSION BOOST_VERSION_NUMBER(4, 1, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE4_2_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/SSE4##SSE4.2 SSE4_2] x86 extension version
+ number.
+
+ Version number is: *4.2.0*.
+ */
+#define BOOST_HW_SIMD_X86_SSE4_2_VERSION BOOST_VERSION_NUMBER(4, 2, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_AVX_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/Advanced_Vector_Extensions AVX] x86
+ extension version number.
+
+ Version number is: *5.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_AVX_VERSION BOOST_VERSION_NUMBER(5, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_FMA3_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/FMA_instruction_set FMA3] x86 extension
+ version number.
+
+ Version number is: *5.2.0*.
+ */
+#define BOOST_HW_SIMD_X86_FMA3_VERSION BOOST_VERSION_NUMBER(5, 2, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_AVX2_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#Advanced_Vector_Extensions_2 AVX2]
+ x86 extension version number.
+
+ Version number is: *5.3.0*.
+ */
+#define BOOST_HW_SIMD_X86_AVX2_VERSION BOOST_VERSION_NUMBER(5, 3, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_MIC_VERSION`]
+
+ The [@https://en.wikipedia.org/wiki/Xeon_Phi MIC] (Xeon Phi) x86 extension
+ version number.
+
+ Version number is: *9.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_MIC_VERSION BOOST_VERSION_NUMBER(9, 0, 0)
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/hardware/simd/x86_amd.h b/vendor/pdalboost/boost/predef/hardware/simd/x86_amd.h
new file mode 100644
index 0000000..60fd448
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/hardware/simd/x86_amd.h
@@ -0,0 +1,87 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_H
+#define BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/hardware/simd/x86_amd/versions.h>
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_AMD`]
+
+ The SIMD extension for x86 (AMD) (*if detected*).
+ Version number depends on the most recent detected extension.
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__SSE4A__`] [__predef_detection__]]
+
+     [[`__FMA4__`] [__predef_detection__]]
+
+     [[`__XOP__`] [__predef_detection__]]
+
+     [[`BOOST_HW_SIMD_X86`] [__predef_detection__]]
+     ]
+
+ [table
+     [[__predef_symbol__] [__predef_version__]]
+
+     [[`__SSE4A__`] [BOOST_HW_SIMD_x86_SSE4A_VERSION]]
+
+     [[`__FMA4__`] [BOOST_HW_SIMD_x86_FMA4_VERSION]]
+
+     [[`__XOP__`] [BOOST_HW_SIMD_x86_XOP_VERSION]]
+
+     [[`BOOST_HW_SIMD_X86`] [BOOST_HW_SIMD_x86]]
+     ]
+
+ [note This predef includes every other x86 SIMD extensions and also has other
+ more specific extensions (FMA4, XOP, SSE4a). You should use this predef
+ instead of `BOOST_HW_SIMD_X86` to test if those specific extensions have
+ been detected.]
+
+ */
+
+#define BOOST_HW_SIMD_X86_AMD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+// AMD CPUs also use x86 architecture. We first try to detect if any AMD
+// specific extension are detected, if yes, then try to detect more recent x86
+// common extensions.
+
+#undef BOOST_HW_SIMD_X86_AMD
+#if !defined(BOOST_HW_SIMD_X86_AMD) && defined(__XOP__)
+#   define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86_AMD_XOP_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86_AMD) && defined(__FMA4__)
+#   define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86_AMD_FMA4_VERSION
+#endif
+#if !defined(BOOST_HW_SIMD_X86_AMD) && defined(__SSE4A__)
+#   define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86_AMD_SSE4A_VERSION
+#endif
+
+#if !defined(BOOST_HW_SIMD_X86_AMD)
+#   define BOOST_HW_SIMD_X86_AMD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#else
+    // At this point, we know that we have an AMD CPU, we do need to check for
+    // other x86 extensions to determine the final version number.
+#   include <boost/predef/hardware/simd/x86.h>
+#   if BOOST_HW_SIMD_X86 > BOOST_HW_SIMD_X86_AMD
+#      undef BOOST_HW_SIMD_X86_AMD
+#      define BOOST_HW_SIMD_X86_AMD BOOST_HW_SIMD_X86
+#   endif
+#   define BOOST_HW_SIMD_X86_AMD_AVAILABLE
+#endif
+
+#define BOOST_HW_SIMD_X86_AMD_NAME "x86 (AMD) SIMD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_HW_SIMD_X86_AMD, BOOST_HW_SIMD_X86_AMD_NAME)
diff --git a/vendor/pdalboost/boost/predef/hardware/simd/x86_amd/versions.h b/vendor/pdalboost/boost/predef/hardware/simd/x86_amd/versions.h
new file mode 100644
index 0000000..a0a9e91
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/hardware/simd/x86_amd/versions.h
@@ -0,0 +1,51 @@
+/*
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_VERSIONS_H
+#define BOOST_PREDEF_HARDWARE_SIMD_X86_AMD_VERSIONS_H
+
+#include <boost/predef/version_number.h>
+
+/*`
+ Those defines represent x86 (AMD specific) SIMD extensions versions.
+
+ [note You *MUST* compare them with the predef `BOOST_HW_SIMD_X86_AMD`.]
+ */
+
+
+// ---------------------------------
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_SSE4A_VERSION`]
+
+ [@https://en.wikipedia.org/wiki/SSE4##SSE4A SSE4A] x86 extension (AMD specific).
+
+ Version number is: *4.0.0*.
+ */
+#define BOOST_HW_SIMD_X86_AMD_SSE4A_VERSION BOOST_VERSION_NUMBER(4, 0, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_XOP_VERSION`]
+
+ [@https://en.wikipedia.org/wiki/XOP_instruction_set XOP] x86 extension (AMD specific).
+
+ Version number is: *5.1.0*.
+ */
+#define BOOST_HW_SIMD_X86_AMD_FMA4_VERSION BOOST_VERSION_NUMBER(5, 1, 0)
+
+/*`
+ [heading `BOOST_HW_SIMD_X86_XOP_VERSION`]
+
+ [@https://en.wikipedia.org/wiki/XOP_instruction_set XOP] x86 extension (AMD specific).
+
+ Version number is: *5.1.1*.
+ */
+#define BOOST_HW_SIMD_X86_AMD_XOP_VERSION BOOST_VERSION_NUMBER(5, 1, 1)
+
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/language.h b/vendor/pdalboost/boost/predef/language.h
new file mode 100644
index 0000000..0a317d5
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/language.h
@@ -0,0 +1,17 @@
+/*
+Copyright Rene Rivera 2011-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#if !defined(BOOST_PREDEF_LANGUAGE_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_LANGUAGE_H
+#define BOOST_PREDEF_LANGUAGE_H
+#endif
+
+#include <boost/predef/language/stdc.h>
+#include <boost/predef/language/stdcpp.h>
+#include <boost/predef/language/objc.h>
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/language/objc.h b/vendor/pdalboost/boost/predef/language/objc.h
new file mode 100644
index 0000000..24e3ad3
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/language/objc.h
@@ -0,0 +1,42 @@
+/*
+Copyright Rene Rivera 2011-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LANGUAGE_OBJC_H
+#define BOOST_PREDEF_LANGUAGE_OBJC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LANG_OBJC`]
+
+[@http://en.wikipedia.org/wiki/Objective-C Objective-C] language.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__OBJC__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_LANG_OBJC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__OBJC__)
+#   undef BOOST_LANG_OBJC
+#   define BOOST_LANG_OBJC BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_LANG_OBJC
+#   define BOOST_LANG_OBJC_AVAILABLE
+#endif
+
+#define BOOST_LANG_OBJC_NAME "Objective-C"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_OBJC,BOOST_LANG_OBJC_NAME)
diff --git a/vendor/pdalboost/boost/predef/language/stdc.h b/vendor/pdalboost/boost/predef/language/stdc.h
new file mode 100644
index 0000000..db25c12
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/language/stdc.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2011-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LANGUAGE_STDC_H
+#define BOOST_PREDEF_LANGUAGE_STDC_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LANG_STDC`]
+
+[@http://en.wikipedia.org/wiki/C_(programming_language) Standard C] language.
+If available, the year of the standard is detected as YYYY.MM.1 from the Epoc date.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__STDC__`] [__predef_detection__]]
+
+    [[`__STDC_VERSION__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LANG_STDC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__STDC__)
+#   undef BOOST_LANG_STDC
+#   if defined(__STDC_VERSION__)
+#       if (__STDC_VERSION__ > 100)
+#           define BOOST_LANG_STDC BOOST_PREDEF_MAKE_YYYYMM(__STDC_VERSION__)
+#       else
+#           define BOOST_LANG_STDC BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#   else
+#       define BOOST_LANG_STDC BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_LANG_STDC
+#   define BOOST_LANG_STDC_AVAILABLE
+#endif
+
+#define BOOST_LANG_STDC_NAME "Standard C"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDC,BOOST_LANG_STDC_NAME)
diff --git a/vendor/pdalboost/boost/predef/language/stdcpp.h b/vendor/pdalboost/boost/predef/language/stdcpp.h
new file mode 100644
index 0000000..34dc8c7
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/language/stdcpp.h
@@ -0,0 +1,121 @@
+/*
+Copyright Rene Rivera 2011-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LANGUAGE_STDCPP_H
+#define BOOST_PREDEF_LANGUAGE_STDCPP_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LANG_STDCPP`]
+
+[@http://en.wikipedia.org/wiki/C%2B%2B Standard C++] language.
+If available, the year of the standard is detected as YYYY.MM.1 from the Epoc date.
+Because of the way the C++ standardization process works the
+defined version year will not be the commonly known year of the standard.
+Specifically the defined versions are:
+
+[table Detected Version Number vs. C++ Standard Year
+  [[Detected Version Number] [Standard Year] [C++ Standard]]
+  [[27.11.1] [1998] [ISO/IEC 14882:1998]]
+  [[41.12.1] [2011] [ISO/IEC 14882:2011]]
+]
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__cplusplus`] [__predef_detection__]]
+
+    [[`__cplusplus`] [YYYY.MM.1]]
+    ]
+ */
+
+#define BOOST_LANG_STDCPP BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__cplusplus)
+#   undef BOOST_LANG_STDCPP
+#   if (__cplusplus > 100)
+#       define BOOST_LANG_STDCPP BOOST_PREDEF_MAKE_YYYYMM(__cplusplus)
+#   else
+#       define BOOST_LANG_STDCPP BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_LANG_STDCPP
+#   define BOOST_LANG_STDCPP_AVAILABLE
+#endif
+
+#define BOOST_LANG_STDCPP_NAME "Standard C++"
+
+/*`
+[heading `BOOST_LANG_STDCPPCLI`]
+
+[@http://en.wikipedia.org/wiki/C%2B%2B/CLI Standard C++/CLI] language.
+If available, the year of the standard is detected as YYYY.MM.1 from the Epoc date.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__cplusplus_cli`] [__predef_detection__]]
+
+    [[`__cplusplus_cli`] [YYYY.MM.1]]
+    ]
+ */
+
+#define BOOST_LANG_STDCPPCLI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__cplusplus_cli)
+#   undef BOOST_LANG_STDCPPCLI
+#   if (__cplusplus_cli > 100)
+#       define BOOST_LANG_STDCPPCLI BOOST_PREDEF_MAKE_YYYYMM(__cplusplus_cli)
+#   else
+#       define BOOST_LANG_STDCPPCLI BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_LANG_STDCPPCLI
+#   define BOOST_LANG_STDCPPCLI_AVAILABLE
+#endif
+
+#define BOOST_LANG_STDCPPCLI_NAME "Standard C++/CLI"
+
+/*`
+[heading `BOOST_LANG_STDECPP`]
+
+[@http://en.wikipedia.org/wiki/Embedded_C%2B%2B Standard Embedded C++] language.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__embedded_cplusplus`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_LANG_STDECPP BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__embedded_cplusplus)
+#   undef BOOST_LANG_STDECPP
+#   define BOOST_LANG_STDECPP BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_LANG_STDECPP
+#   define BOOST_LANG_STDECPP_AVAILABLE
+#endif
+
+#define BOOST_LANG_STDECPP_NAME "Standard Embedded C++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDCPP,BOOST_LANG_STDCPP_NAME)
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDCPPCLI,BOOST_LANG_STDCPPCLI_NAME)
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_STDECPP,BOOST_LANG_STDECPP_NAME)
diff --git a/vendor/pdalboost/boost/predef/library.h b/vendor/pdalboost/boost/predef/library.h
new file mode 100644
index 0000000..40518a9
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library.h
@@ -0,0 +1,16 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#if !defined(BOOST_PREDEF_LIBRARY_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_LIBRARY_H
+#define BOOST_PREDEF_LIBRARY_H
+#endif
+
+#include <boost/predef/library/c.h>
+#include <boost/predef/library/std.h>
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/library/c.h b/vendor/pdalboost/boost/predef/library/c.h
new file mode 100644
index 0000000..fa8841e
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/c.h
@@ -0,0 +1,20 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#if !defined(BOOST_PREDEF_LIBRARY_C_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_LIBRARY_C_H
+#define BOOST_PREDEF_LIBRARY_C_H
+#endif
+
+#include <boost/predef/library/c/_prefix.h>
+
+#include <boost/predef/library/c/gnu.h>
+#include <boost/predef/library/c/uc.h>
+#include <boost/predef/library/c/vms.h>
+#include <boost/predef/library/c/zos.h>
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/library/c/_prefix.h b/vendor/pdalboost/boost/predef/library/c/_prefix.h
new file mode 100644
index 0000000..12bcb0f
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/c/_prefix.h
@@ -0,0 +1,13 @@
+/*
+Copyright Rene Rivera 2008-2013
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_C__PREFIX_H
+#define BOOST_PREDEF_LIBRARY_C__PREFIX_H
+
+#include <boost/predef/detail/_cassert.h>
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/library/c/gnu.h b/vendor/pdalboost/boost/predef/library/c/gnu.h
new file mode 100644
index 0000000..9e4ca89
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/c/gnu.h
@@ -0,0 +1,61 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_C_GNU_H
+#define BOOST_PREDEF_LIBRARY_C_GNU_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+#include <boost/predef/library/c/_prefix.h>
+
+#if defined(__STDC__)
+#include <stddef.h>
+#elif defined(__cplusplus)
+#include <cstddef>
+#endif
+
+/*`
+[heading `BOOST_LIB_C_GNU`]
+
+[@http://en.wikipedia.org/wiki/Glibc GNU glibc] Standard C library.
+Version number available as major, and minor.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__GLIBC__`] [__predef_detection__]]
+    [[`__GNU_LIBRARY__`] [__predef_detection__]]
+
+    [[`__GLIBC__`, `__GLIBC_MINOR__`] [V.R.0]]
+    [[`__GNU_LIBRARY__`, `__GNU_LIBRARY_MINOR__`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_LIB_C_GNU BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__GLIBC__) || defined(__GNU_LIBRARY__)
+#   undef BOOST_LIB_C_GNU
+#   if defined(__GLIBC__)
+#       define BOOST_LIB_C_GNU \
+            BOOST_VERSION_NUMBER(__GLIBC__,__GLIBC_MINOR__,0)
+#   else
+#       define BOOST_LIB_C_GNU \
+            BOOST_VERSION_NUMBER(__GNU_LIBRARY__,__GNU_LIBRARY_MINOR__,0)
+#   endif
+#endif
+
+#if BOOST_LIB_C_GNU
+#   define BOOST_LIB_C_GNU_AVAILABLE
+#endif
+
+#define BOOST_LIB_C_GNU_NAME "GNU"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_GNU,BOOST_LIB_C_GNU_NAME)
diff --git a/vendor/pdalboost/boost/predef/library/c/uc.h b/vendor/pdalboost/boost/predef/library/c/uc.h
new file mode 100644
index 0000000..03081e9
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/c/uc.h
@@ -0,0 +1,47 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_C_UC_H
+#define BOOST_PREDEF_LIBRARY_C_UC_H
+
+#include <boost/predef/library/c/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_C_UC`]
+
+[@http://en.wikipedia.org/wiki/Uclibc uClibc] Standard C library.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__UCLIBC__`] [__predef_detection__]]
+
+    [[`__UCLIBC_MAJOR__`, `__UCLIBC_MINOR__`, `__UCLIBC_SUBLEVEL__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_C_UC BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__UCLIBC__)
+#   undef BOOST_LIB_C_UC
+#   define BOOST_LIB_C_UC BOOST_VERSION_NUMBER(\
+        __UCLIBC_MAJOR__,__UCLIBC_MINOR__,__UCLIBC_SUBLEVEL__)
+#endif
+
+#if BOOST_LIB_C_UC
+#   define BOOST_LIB_C_UC_AVAILABLE
+#endif
+
+#define BOOST_LIB_C_UC_NAME "uClibc"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_UC,BOOST_LIB_C_UC_NAME)
diff --git a/vendor/pdalboost/boost/predef/library/c/vms.h b/vendor/pdalboost/boost/predef/library/c/vms.h
new file mode 100644
index 0000000..685f1a7
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/c/vms.h
@@ -0,0 +1,47 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_C_VMS_H
+#define BOOST_PREDEF_LIBRARY_C_VMS_H
+
+#include <boost/predef/library/c/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_C_VMS`]
+
+VMS libc Standard C library.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__CRTL_VER`] [__predef_detection__]]
+
+    [[`__CRTL_VER`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_C_VMS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__CRTL_VER)
+#   undef BOOST_LIB_C_VMS
+#   define BOOST_LIB_C_VMS BOOST_PREDEF_MAKE_10_VVRR0PP00(__CRTL_VER)
+#endif
+
+#if BOOST_LIB_C_VMS
+#   define BOOST_LIB_C_VMS_AVAILABLE
+#endif
+
+#define BOOST_LIB_C_VMS_NAME "VMS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_VMS,BOOST_LIB_C_VMS_NAME)
diff --git a/vendor/pdalboost/boost/predef/library/c/zos.h b/vendor/pdalboost/boost/predef/library/c/zos.h
new file mode 100644
index 0000000..222d355
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/c/zos.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_C_ZOS_H
+#define BOOST_PREDEF_LIBRARY_C_ZOS_H
+
+#include <boost/predef/library/c/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_C_ZOS`]
+
+z/OS libc Standard C library.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__LIBREL__`] [__predef_detection__]]
+
+    [[`__LIBREL__`] [V.R.P]]
+    [[`__TARGET_LIB__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_C_ZOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__LIBREL__)
+#   undef BOOST_LIB_C_ZOS
+#   if !defined(BOOST_LIB_C_ZOS) && defined(__LIBREL__)
+#       define BOOST_LIB_C_ZOS BOOST_PREDEF_MAKE_0X_VRRPPPP(__LIBREL__)
+#   endif
+#   if !defined(BOOST_LIB_C_ZOS) && defined(__TARGET_LIB__)
+#       define BOOST_LIB_C_ZOS BOOST_PREDEF_MAKE_0X_VRRPPPP(__TARGET_LIB__)
+#   endif
+#   if !defined(BOOST_LIB_C_ZOS)
+#       define BOOST_LIB_C_ZOS BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_LIB_C_ZOS
+#   define BOOST_LIB_C_ZOS_AVAILABLE
+#endif
+
+#define BOOST_LIB_C_ZOS_NAME "z/OS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_C_ZOS,BOOST_LIB_C_ZOS_NAME)
diff --git a/vendor/pdalboost/boost/predef/library/std.h b/vendor/pdalboost/boost/predef/library/std.h
new file mode 100644
index 0000000..403b6ff
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/std.h
@@ -0,0 +1,25 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+#if !defined(BOOST_PREDEF_LIBRARY_STD_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_LIBRARY_STD_H
+#define BOOST_PREDEF_LIBRARY_STD_H
+#endif
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/library/std/cxx.h>
+#include <boost/predef/library/std/dinkumware.h>
+#include <boost/predef/library/std/libcomo.h>
+#include <boost/predef/library/std/modena.h>
+#include <boost/predef/library/std/msl.h>
+#include <boost/predef/library/std/roguewave.h>
+#include <boost/predef/library/std/sgi.h>
+#include <boost/predef/library/std/stdcpp3.h>
+#include <boost/predef/library/std/stlport.h>
+#include <boost/predef/library/std/vacpp.h>
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/library/std/_prefix.h b/vendor/pdalboost/boost/predef/library/std/_prefix.h
new file mode 100644
index 0000000..932b855
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/std/_prefix.h
@@ -0,0 +1,23 @@
+/*
+Copyright Rene Rivera 2008-2013
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+#ifndef BOOST_PREDEF_LIBRARY_STD__PREFIX_H
+#define BOOST_PREDEF_LIBRARY_STD__PREFIX_H
+
+/*
+We need to include an STD header to gives us the context
+of which library we are using. The "smallest" code-wise header
+seems to be <exception>. Boost uses <utility> but as far
+as I can tell (RR) it's not a stand-alone header in most
+implementations. Using <exception> also has the benefit of
+being available in EC++, so we get a chance to make this work
+for embedded users. And since it's not a header impacted by TR1
+there's no magic needed for inclusion in the face of the
+Boost.TR1 library.
+*/
+#include <boost/predef/detail/_exception.h>
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/library/std/cxx.h b/vendor/pdalboost/boost/predef/library/std/cxx.h
new file mode 100644
index 0000000..07b52cd
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/std/cxx.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2011-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_CXX_H
+#define BOOST_PREDEF_LIBRARY_STD_CXX_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_CXX`]
+
+[@http://libcxx.llvm.org/ libc++] C++ Standard Library.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`_LIBCPP_VERSION`] [__predef_detection__]]
+
+    [[`_LIBCPP_VERSION`] [V.0.P]]
+    ]
+ */
+
+#define BOOST_LIB_STD_CXX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(_LIBCPP_VERSION)
+#   undef BOOST_LIB_STD_CXX
+#   define BOOST_LIB_STD_CXX BOOST_PREDEF_MAKE_10_VPPP(_LIBCPP_VERSION)
+#endif
+
+#if BOOST_LIB_STD_CXX
+#   define BOOST_LIB_STD_CXX_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_CXX_NAME "libc++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_CXX,BOOST_LIB_STD_CXX_NAME)
diff --git a/vendor/pdalboost/boost/predef/library/std/dinkumware.h b/vendor/pdalboost/boost/predef/library/std/dinkumware.h
new file mode 100644
index 0000000..0fc0776
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/std/dinkumware.h
@@ -0,0 +1,52 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_DINKUMWARE_H
+#define BOOST_PREDEF_LIBRARY_STD_DINKUMWARE_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_DINKUMWARE`]
+
+[@http://en.wikipedia.org/wiki/Dinkumware Dinkumware] Standard C++ Library.
+If available version number as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`_YVALS`, `__IBMCPP__`] [__predef_detection__]]
+    [[`_CPPLIB_VER`] [__predef_detection__]]
+
+    [[`_CPPLIB_VER`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_LIB_STD_DINKUMWARE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
+#   undef BOOST_LIB_STD_DINKUMWARE
+#   if defined(_CPPLIB_VER)
+#       define BOOST_LIB_STD_DINKUMWARE BOOST_PREDEF_MAKE_10_VVRR(_CPPLIB_VER)
+#   else
+#       define BOOST_LIB_STD_DINKUMWARE BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_LIB_STD_DINKUMWARE
+#   define BOOST_LIB_STD_DINKUMWARE_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_DINKUMWARE_NAME "Dinkumware"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_DINKUMWARE,BOOST_LIB_STD_DINKUMWARE_NAME)
diff --git a/vendor/pdalboost/boost/predef/library/std/libcomo.h b/vendor/pdalboost/boost/predef/library/std/libcomo.h
new file mode 100644
index 0000000..97d4a53
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/std/libcomo.h
@@ -0,0 +1,47 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_LIBCOMO_H
+#define BOOST_PREDEF_LIBRARY_STD_LIBCOMO_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_COMO`]
+
+[@http://www.comeaucomputing.com/libcomo/ Comeau Computing] Standard C++ Library.
+Version number available as major.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__LIBCOMO__`] [__predef_detection__]]
+
+    [[`__LIBCOMO_VERSION__`] [V.0.0]]
+    ]
+ */
+
+#define BOOST_LIB_STD_COMO BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__LIBCOMO__)
+#   undef BOOST_LIB_STD_COMO
+#   define BOOST_LIB_STD_COMO BOOST_VERSION_NUMBER(__LIBCOMO_VERSION__,0,0)
+#endif
+
+#if BOOST_LIB_STD_COMO
+#   define BOOST_LIB_STD_COMO_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_COMO_NAME "Comeau Computing"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_COMO,BOOST_LIB_STD_COMO_NAME)
diff --git a/vendor/pdalboost/boost/predef/library/std/modena.h b/vendor/pdalboost/boost/predef/library/std/modena.h
new file mode 100644
index 0000000..b67ac62
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/std/modena.h
@@ -0,0 +1,45 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_MODENA_H
+#define BOOST_PREDEF_LIBRARY_STD_MODENA_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_MSIPL`]
+
+[@http://modena.us/ Modena Software Lib++] Standard C++ Library.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`MSIPL_COMPILE_H`] [__predef_detection__]]
+    [[`__MSIPL_COMPILE_H`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_LIB_STD_MSIPL BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(MSIPL_COMPILE_H) || defined(__MSIPL_COMPILE_H)
+#   undef BOOST_LIB_STD_MSIPL
+#   define BOOST_LIB_STD_MSIPL BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_LIB_STD_MSIPL
+#   define BOOST_LIB_STD_MSIPL_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_MSIPL_NAME "Modena Software Lib++"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_MSIPL,BOOST_LIB_STD_MSIPL_NAME)
diff --git a/vendor/pdalboost/boost/predef/library/std/msl.h b/vendor/pdalboost/boost/predef/library/std/msl.h
new file mode 100644
index 0000000..d73c74c
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/std/msl.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_MSL_H
+#define BOOST_PREDEF_LIBRARY_STD_MSL_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_MSL`]
+
+[@http://www.freescale.com/ Metrowerks] Standard C++ Library.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__MSL_CPP__`] [__predef_detection__]]
+    [[`__MSL__`] [__predef_detection__]]
+
+    [[`__MSL_CPP__`] [V.R.P]]
+    [[`__MSL__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_STD_MSL BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__MSL_CPP__) || defined(__MSL__)
+#   undef BOOST_LIB_STD_MSL
+#   if defined(__MSL_CPP__)
+#       define BOOST_LIB_STD_MSL BOOST_PREDEF_MAKE_0X_VRPP(__MSL_CPP__)
+#   else
+#       define BOOST_LIB_STD_MSL BOOST_PREDEF_MAKE_0X_VRPP(__MSL__)
+#   endif
+#endif
+
+#if BOOST_LIB_STD_MSL
+#   define BOOST_LIB_STD_MSL_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_MSL_NAME "Metrowerks"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_MSL,BOOST_LIB_STD_MSL_NAME)
diff --git a/vendor/pdalboost/boost/predef/library/std/roguewave.h b/vendor/pdalboost/boost/predef/library/std/roguewave.h
new file mode 100644
index 0000000..9c3f288
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/std/roguewave.h
@@ -0,0 +1,56 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_ROGUEWAVE_H
+#define BOOST_PREDEF_LIBRARY_STD_ROGUEWAVE_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_RW`]
+
+[@http://stdcxx.apache.org/ Roguewave] Standard C++ library.
+If available version number as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__STD_RWCOMPILER_H__`] [__predef_detection__]]
+    [[`_RWSTD_VER`] [__predef_detection__]]
+
+    [[`_RWSTD_VER`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_STD_RW BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER)
+#   undef BOOST_LIB_STD_RW
+#   if defined(_RWSTD_VER)
+#       if _RWSTD_VER < 0x010000
+#           define BOOST_LIB_STD_RW BOOST_PREDEF_MAKE_0X_VVRRP(_RWSTD_VER)
+#       else
+#           define BOOST_LIB_STD_RW BOOST_PREDEF_MAKE_0X_VVRRPP(_RWSTD_VER)
+#       endif
+#   else
+#       define BOOST_LIB_STD_RW BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_LIB_STD_RW
+#   define BOOST_LIB_STD_RW_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_RW_NAME "Roguewave"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_RW,BOOST_LIB_STD_RW_NAME)
diff --git a/vendor/pdalboost/boost/predef/library/std/sgi.h b/vendor/pdalboost/boost/predef/library/std/sgi.h
new file mode 100644
index 0000000..5d19bba
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/std/sgi.h
@@ -0,0 +1,51 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_SGI_H
+#define BOOST_PREDEF_LIBRARY_STD_SGI_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_SGI`]
+
+[@http://www.sgi.com/tech/stl/ SGI] Standard C++ library.
+If available version number as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__STL_CONFIG_H`] [__predef_detection__]]
+
+    [[`__SGI_STL`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_STD_SGI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__STL_CONFIG_H)
+#   undef BOOST_LIB_STD_SGI
+#   if defined(__SGI_STL)
+#       define BOOST_LIB_STD_SGI BOOST_PREDEF_MAKE_0X_VRP(__SGI_STL)
+#   else
+#       define BOOST_LIB_STD_SGI BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_LIB_STD_SGI
+#   define BOOST_LIB_STD_SGI_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_SGI_NAME "SGI"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_SGI,BOOST_LIB_STD_SGI_NAME)
diff --git a/vendor/pdalboost/boost/predef/library/std/stdcpp3.h b/vendor/pdalboost/boost/predef/library/std/stdcpp3.h
new file mode 100644
index 0000000..c980292
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/std/stdcpp3.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_STDCPP3_H
+#define BOOST_PREDEF_LIBRARY_STD_STDCPP3_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_GNU`]
+
+[@http://gcc.gnu.org/libstdc++/ GNU libstdc++] Standard C++ library.
+Version number available as year (from 1970), month, and day.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__GLIBCXX__`] [__predef_detection__]]
+    [[`__GLIBCPP__`] [__predef_detection__]]
+
+    [[`__GLIBCXX__`] [V.R.P]]
+    [[`__GLIBCPP__`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_STD_GNU BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__GLIBCPP__) || defined(__GLIBCXX__)
+#   undef BOOST_LIB_STD_GNU
+#   if defined(__GLIBCXX__)
+#       define BOOST_LIB_STD_GNU BOOST_PREDEF_MAKE_YYYYMMDD(__GLIBCXX__)
+#   else
+#       define BOOST_LIB_STD_GNU BOOST_PREDEF_MAKE_YYYYMMDD(__GLIBCPP__)
+#   endif
+#endif
+
+#if BOOST_LIB_STD_GNU
+#   define BOOST_LIB_STD_GNU_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_GNU_NAME "GNU"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_GNU,BOOST_LIB_STD_GNU_NAME)
diff --git a/vendor/pdalboost/boost/predef/library/std/stlport.h b/vendor/pdalboost/boost/predef/library/std/stlport.h
new file mode 100644
index 0000000..c09483b
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/std/stlport.h
@@ -0,0 +1,59 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_STLPORT_H
+#define BOOST_PREDEF_LIBRARY_STD_STLPORT_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_STLPORT`]
+
+[@http://sourceforge.net/projects/stlport/ STLport Standard C++] library.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__SGI_STL_PORT`] [__predef_detection__]]
+    [[`_STLPORT_VERSION`] [__predef_detection__]]
+
+    [[`_STLPORT_MAJOR`, `_STLPORT_MINOR`, `_STLPORT_PATCHLEVEL`] [V.R.P]]
+    [[`_STLPORT_VERSION`] [V.R.P]]
+    [[`__SGI_STL_PORT`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_LIB_STD_STLPORT BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
+#   undef BOOST_LIB_STD_STLPORT
+#   if !defined(BOOST_LIB_STD_STLPORT) && defined(_STLPORT_MAJOR)
+#       define BOOST_LIB_STD_STLPORT \
+            BOOST_VERSION_NUMBER(_STLPORT_MAJOR,_STLPORT_MINOR,_STLPORT_PATCHLEVEL)
+#   endif
+#   if !defined(BOOST_LIB_STD_STLPORT) && defined(_STLPORT_VERSION)
+#       define BOOST_LIB_STD_STLPORT BOOST_PREDEF_MAKE_0X_VRP(_STLPORT_VERSION)
+#   endif
+#   if !defined(BOOST_LIB_STD_STLPORT)
+#       define BOOST_LIB_STD_STLPORT BOOST_PREDEF_MAKE_0X_VRP(__SGI_STL_PORT)
+#   endif
+#endif
+
+#if BOOST_LIB_STD_STLPORT
+#   define BOOST_LIB_STD_STLPORT_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_STLPORT_NAME "STLport"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_STLPORT,BOOST_LIB_STD_STLPORT_NAME)
diff --git a/vendor/pdalboost/boost/predef/library/std/vacpp.h b/vendor/pdalboost/boost/predef/library/std/vacpp.h
new file mode 100644
index 0000000..632f846
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/library/std/vacpp.h
@@ -0,0 +1,44 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_LIBRARY_STD_VACPP_H
+#define BOOST_PREDEF_LIBRARY_STD_VACPP_H
+
+#include <boost/predef/library/std/_prefix.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_LIB_STD_IBM`]
+
+[@http://www.ibm.com/software/awdtools/xlcpp/ IBM VACPP Standard C++] library.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__IBMCPP__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_LIB_STD_IBM BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__IBMCPP__)
+#   undef BOOST_LIB_STD_IBM
+#   define BOOST_LIB_STD_IBM BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_LIB_STD_IBM
+#   define BOOST_LIB_STD_IBM_AVAILABLE
+#endif
+
+#define BOOST_LIB_STD_IBM_NAME "IBM VACPP"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_IBM,BOOST_LIB_STD_IBM_NAME)
diff --git a/vendor/pdalboost/boost/predef/make.h b/vendor/pdalboost/boost/predef/make.h
new file mode 100644
index 0000000..4f2f9ee
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/make.h
@@ -0,0 +1,89 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+#include <boost/predef/detail/test.h>
+
+#ifndef BOOST_PREDEF_MAKE_H
+#define BOOST_PREDEF_MAKE_H
+
+/*
+Shorthands for the common version number formats used by vendors...
+*/
+
+/*`
+[heading `BOOST_PREDEF_MAKE_..` macros]
+
+These set of macros decompose common vendor version number
+macros which are composed version, revision, and patch digits.
+The naming convention indicates:
+
+* The base of the specified version number. "`BOOST_PREDEF_MAKE_0X`" for
+  hexadecimal digits, and "`BOOST_PREDEF_MAKE_10`" for decimal digits.
+* The format of the vendor version number. Where "`V`" indicates the version digits,
+  "`R`" indicates the revision digits, "`P`" indicates the patch digits, and "`0`"
+  indicates an ignored digit.
+
+Macros are:
+*/
+/*` `BOOST_PREDEF_MAKE_0X_VRP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VRP(V) BOOST_VERSION_NUMBER((V&0xF00)>>8,(V&0xF0)>>4,(V&0xF))
+/*` `BOOST_PREDEF_MAKE_0X_VVRP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VVRP(V) BOOST_VERSION_NUMBER((V&0xFF00)>>8,(V&0xF0)>>4,(V&0xF))
+/*` `BOOST_PREDEF_MAKE_0X_VRPP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VRPP(V) BOOST_VERSION_NUMBER((V&0xF000)>>12,(V&0xF00)>>8,(V&0xFF))
+/*` `BOOST_PREDEF_MAKE_0X_VVRR(V)` */
+#define BOOST_PREDEF_MAKE_0X_VVRR(V) BOOST_VERSION_NUMBER((V&0xFF00)>>8,(V&0xFF),0)
+/*` `BOOST_PREDEF_MAKE_0X_VRRPPPP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VRRPPPP(V) BOOST_VERSION_NUMBER((V&0xF000000)>>24,(V&0xFF0000)>>16,(V&0xFFFF))
+/*` `BOOST_PREDEF_MAKE_0X_VVRRP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VVRRP(V) BOOST_VERSION_NUMBER((V&0xFF000)>>12,(V&0xFF0)>>4,(V&0xF))
+/*` `BOOST_PREDEF_MAKE_0X_VRRPP000(V)` */
+#define BOOST_PREDEF_MAKE_0X_VRRPP000(V) BOOST_VERSION_NUMBER((V&0xF0000000)>>28,(V&0xFF00000)>>20,(V&0xFF000)>>12)
+/*` `BOOST_PREDEF_MAKE_0X_VVRRPP(V)` */
+#define BOOST_PREDEF_MAKE_0X_VVRRPP(V) BOOST_VERSION_NUMBER((V&0xFF0000)>>16,(V&0xFF00)>>8,(V&0xFF))
+/*` `BOOST_PREDEF_MAKE_10_VPPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VPPP(V) BOOST_VERSION_NUMBER(((V)/1000)%10,0,(V)%1000)
+/*` `BOOST_PREDEF_MAKE_10_VRP(V)` */
+#define BOOST_PREDEF_MAKE_10_VRP(V) BOOST_VERSION_NUMBER(((V)/100)%10,((V)/10)%10,(V)%10)
+/*` `BOOST_PREDEF_MAKE_10_VRP000(V)` */
+#define BOOST_PREDEF_MAKE_10_VRP000(V) BOOST_VERSION_NUMBER(((V)/100000)%10,((V)/10000)%10,((V)/1000)%10)
+/*` `BOOST_PREDEF_MAKE_10_VRPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VRPP(V) BOOST_VERSION_NUMBER(((V)/1000)%10,((V)/100)%10,(V)%100)
+/*` `BOOST_PREDEF_MAKE_10_VRR(V)` */
+#define BOOST_PREDEF_MAKE_10_VRR(V) BOOST_VERSION_NUMBER(((V)/100)%10,(V)%100,0)
+/*` `BOOST_PREDEF_MAKE_10_VRRPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VRRPP(V) BOOST_VERSION_NUMBER(((V)/10000)%10,((V)/100)%100,(V)%100)
+/*` `BOOST_PREDEF_MAKE_10_VRR000(V)` */
+#define BOOST_PREDEF_MAKE_10_VRR000(V) BOOST_VERSION_NUMBER(((V)/100000)%10,((V)/1000)%100,0)
+/*` `BOOST_PREDEF_MAKE_10_VV00(V)` */
+#define BOOST_PREDEF_MAKE_10_VV00(V) BOOST_VERSION_NUMBER(((V)/100)%100,0,0)
+/*` `BOOST_PREDEF_MAKE_10_VVRR(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRR(V) BOOST_VERSION_NUMBER(((V)/100)%100,(V)%100,0)
+/*` `BOOST_PREDEF_MAKE_10_VVRRPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRRPP(V) BOOST_VERSION_NUMBER(((V)/10000)%100,((V)/100)%100,(V)%100)
+/*` `BOOST_PREDEF_MAKE_10_VVRR0PP00(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRR0PP00(V) BOOST_VERSION_NUMBER(((V)/10000000)%100,((V)/100000)%100,((V)/100)%100)
+/*` `BOOST_PREDEF_MAKE_10_VVRR0PPPP(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRR0PPPP(V) BOOST_VERSION_NUMBER(((V)/10000000)%100,((V)/100000)%100,(V)%10000)
+/*` `BOOST_PREDEF_MAKE_10_VVRR00PP00(V)` */
+#define BOOST_PREDEF_MAKE_10_VVRR00PP00(V) BOOST_VERSION_NUMBER(((V)/100000000)%100,((V)/1000000)%100,((V)/100)%100)
+/*`
+[heading `BOOST_PREDEF_MAKE_*..` date macros]
+
+Date decomposition macros return a date in the relative to the 1970
+Epoch date. If the month is not available, January 1st is used as the month and day.
+If the day is not available, but the month is, the 1st of the month is used as the day.
+*/
+/*` `BOOST_PREDEF_MAKE_DATE(Y,M,D)` */
+#define BOOST_PREDEF_MAKE_DATE(Y,M,D) BOOST_VERSION_NUMBER((Y)%10000-1970,(M)%100,(D)%100)
+/*` `BOOST_PREDEF_MAKE_YYYYMMDD(V)` */
+#define BOOST_PREDEF_MAKE_YYYYMMDD(V) BOOST_PREDEF_MAKE_DATE(((V)/10000)%10000,((V)/100)%100,(V)%100)
+/*` `BOOST_PREDEF_MAKE_YYYY(V)` */
+#define BOOST_PREDEF_MAKE_YYYY(V) BOOST_PREDEF_MAKE_DATE(V,1,1)
+/*` `BOOST_PREDEF_MAKE_YYYYMM(V)` */
+#define BOOST_PREDEF_MAKE_YYYYMM(V) BOOST_PREDEF_MAKE_DATE((V)/100,(V)%100,1)
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/os.h b/vendor/pdalboost/boost/predef/os.h
new file mode 100644
index 0000000..bedf99e
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os.h
@@ -0,0 +1,33 @@
+/*
+Copyright Rene Rivera 2008-2015
+Copyright Franz Detro 2014
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#if !defined(BOOST_PREDEF_OS_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_OS_H
+#define BOOST_PREDEF_OS_H
+#endif
+
+#include <boost/predef/os/aix.h>
+#include <boost/predef/os/amigaos.h>
+#include <boost/predef/os/android.h>
+#include <boost/predef/os/beos.h>
+#include <boost/predef/os/bsd.h>
+#include <boost/predef/os/cygwin.h>
+#include <boost/predef/os/haiku.h>
+#include <boost/predef/os/hpux.h>
+#include <boost/predef/os/irix.h>
+#include <boost/predef/os/ios.h>
+#include <boost/predef/os/linux.h>
+#include <boost/predef/os/macos.h>
+#include <boost/predef/os/os400.h>
+#include <boost/predef/os/qnxnto.h>
+#include <boost/predef/os/solaris.h>
+#include <boost/predef/os/unix.h>
+#include <boost/predef/os/vms.h>
+#include <boost/predef/os/windows.h>
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/os/aix.h b/vendor/pdalboost/boost/predef/os/aix.h
new file mode 100644
index 0000000..3e5a953
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/aix.h
@@ -0,0 +1,66 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_AIX_H
+#define BOOST_PREDEF_OS_AIX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_AIX`]
+
+[@http://en.wikipedia.org/wiki/AIX_operating_system IBM AIX] operating system.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`_AIX`] [__predef_detection__]]
+    [[`__TOS_AIX__`] [__predef_detection__]]
+
+    [[`_AIX43`] [4.3.0]]
+    [[`_AIX41`] [4.1.0]]
+    [[`_AIX32`] [3.2.0]]
+    [[`_AIX3`] [3.0.0]]
+    ]
+ */
+
+#define BOOST_OS_AIX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(_AIX) || defined(__TOS_AIX__) \
+    )
+#   undef BOOST_OS_AIX
+#   if !defined(BOOST_OS_AIX) && defined(_AIX43)
+#       define BOOST_OS_AIX BOOST_VERSION_NUMBER(4,3,0)
+#   endif
+#   if !defined(BOOST_OS_AIX) && defined(_AIX41)
+#       define BOOST_OS_AIX BOOST_VERSION_NUMBER(4,1,0)
+#   endif
+#   if !defined(BOOST_OS_AIX) && defined(_AIX32)
+#       define BOOST_OS_AIX BOOST_VERSION_NUMBER(3,2,0)
+#   endif
+#   if !defined(BOOST_OS_AIX) && defined(_AIX3)
+#       define BOOST_OS_AIX BOOST_VERSION_NUMBER(3,0,0)
+#   endif
+#   if !defined(BOOST_OS_AIX)
+#       define BOOST_OS_AIX BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_OS_AIX
+#   define BOOST_OS_AIX_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_AIX_NAME "IBM AIX"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_AIX,BOOST_OS_AIX_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/amigaos.h b/vendor/pdalboost/boost/predef/os/amigaos.h
new file mode 100644
index 0000000..7b32ddf
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/amigaos.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_AMIGAOS_H
+#define BOOST_PREDEF_OS_AMIGAOS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_AMIGAOS`]
+
+[@http://en.wikipedia.org/wiki/AmigaOS AmigaOS] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`AMIGA`] [__predef_detection__]]
+    [[`__amigaos__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_AMIGAOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(AMIGA) || defined(__amigaos__) \
+    )
+#   undef BOOST_OS_AMIGAOS
+#   define BOOST_OS_AMIGAOS BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_AMIGAOS
+#   define BOOST_OS_AMIGAOS_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_AMIGAOS_NAME "AmigaOS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_AMIGAOS,BOOST_OS_AMIGAOS_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/android.h b/vendor/pdalboost/boost/predef/os/android.h
new file mode 100644
index 0000000..00836e7
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/android.h
@@ -0,0 +1,45 @@
+/*
+Copyright Rene Rivera 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_ADROID_H
+#define BOOST_PREDEF_OS_ADROID_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_ANDROID`]
+
+[@http://en.wikipedia.org/wiki/Android_%28operating_system%29 Android] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__ANDROID__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_ANDROID BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__ANDROID__) \
+    )
+#   undef BOOST_OS_ANDROID
+#   define BOOST_OS_ANDROID BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_ANDROID
+#   define BOOST_OS_ANDROID_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_ANDROID_NAME "Android"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_ANDROID,BOOST_OS_ANDROID_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/beos.h b/vendor/pdalboost/boost/predef/os/beos.h
new file mode 100644
index 0000000..19f4cb7
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/beos.h
@@ -0,0 +1,45 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_BEOS_H
+#define BOOST_PREDEF_OS_BEOS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_BEOS`]
+
+[@http://en.wikipedia.org/wiki/BeOS BeOS] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__BEOS__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_BEOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__BEOS__) \
+    )
+#   undef BOOST_OS_BEOS
+#   define BOOST_OS_BEOS BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_BEOS
+#   define BOOST_OS_BEOS_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BEOS_NAME "BeOS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BEOS,BOOST_OS_BEOS_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/bsd.h b/vendor/pdalboost/boost/predef/os/bsd.h
new file mode 100644
index 0000000..fad9aed
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/bsd.h
@@ -0,0 +1,103 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_BSD_H
+#define BOOST_PREDEF_OS_BSD_H
+
+/* Special case: OSX will define BSD predefs if the sys/param.h
+ * header is included. We can guard against that, but only if we
+ * detect OSX first. Hence we will force include OSX detection
+ * before doing any BSD detection.
+ */
+#include <boost/predef/os/macos.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_BSD`]
+
+[@http://en.wikipedia.org/wiki/Berkeley_Software_Distribution BSD] operating system.
+
+BSD has various branch operating systems possible and each detected
+individually. This detects the following variations and sets a specific
+version number macro to match:
+
+* `BOOST_OS_BSD_DRAGONFLY` [@http://en.wikipedia.org/wiki/DragonFly_BSD DragonFly BSD]
+* `BOOST_OS_BSD_FREE` [@http://en.wikipedia.org/wiki/Freebsd FreeBSD]
+* `BOOST_OS_BSD_BSDI` [@http://en.wikipedia.org/wiki/BSD/OS BSDi BSD/OS]
+* `BOOST_OS_BSD_NET` [@http://en.wikipedia.org/wiki/Netbsd NetBSD]
+* `BOOST_OS_BSD_OPEN` [@http://en.wikipedia.org/wiki/Openbsd OpenBSD]
+
+[note The general `BOOST_OS_BSD` is set in all cases to indicate some form
+of BSD. If the above variants is detected the corresponding macro is also set.]
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`BSD`] [__predef_detection__]]
+    [[`_SYSTYPE_BSD`] [__predef_detection__]]
+
+    [[`BSD4_2`] [4.2.0]]
+    [[`BSD4_3`] [4.3.0]]
+    [[`BSD4_4`] [4.4.0]]
+    [[`BSD`] [V.R.0]]
+    ]
+ */
+
+#include <boost/predef/os/bsd/bsdi.h>
+#include <boost/predef/os/bsd/dragonfly.h>
+#include <boost/predef/os/bsd/free.h>
+#include <boost/predef/os/bsd/open.h>
+#include <boost/predef/os/bsd/net.h>
+
+#ifndef BOOST_OS_BSD
+#define BOOST_OS_BSD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#endif
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(BSD) || \
+    defined(_SYSTYPE_BSD) \
+    )
+#   undef BOOST_OS_BSD
+#   include <sys/param.h>
+#   if !defined(BOOST_OS_BSD) && defined(BSD4_4)
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER(4,4,0)
+#   endif
+#   if !defined(BOOST_OS_BSD) && defined(BSD4_3)
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER(4,3,0)
+#   endif
+#   if !defined(BOOST_OS_BSD) && defined(BSD4_2)
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER(4,2,0)
+#   endif
+#   if !defined(BOOST_OS_BSD) && defined(BSD)
+#       define BOOST_OS_BSD BOOST_PREDEF_MAKE_10_VVRR(BSD)
+#   endif
+#   if !defined(BOOST_OS_BSD)
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_OS_BSD
+#   define BOOST_OS_BSD_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_NAME "BSD"
+
+#else
+
+#include <boost/predef/os/bsd/bsdi.h>
+#include <boost/predef/os/bsd/dragonfly.h>
+#include <boost/predef/os/bsd/free.h>
+#include <boost/predef/os/bsd/open.h>
+#include <boost/predef/os/bsd/net.h>
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD,BOOST_OS_BSD_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/bsd/bsdi.h b/vendor/pdalboost/boost/predef/os/bsd/bsdi.h
new file mode 100644
index 0000000..afdcd3e
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/bsd/bsdi.h
@@ -0,0 +1,48 @@
+/*
+Copyright Rene Rivera 2012-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_BSD_BSDI_H
+#define BOOST_PREDEF_OS_BSD_BSDI_H
+
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_OS_BSD_BSDI`]
+
+[@http://en.wikipedia.org/wiki/BSD/OS BSDi BSD/OS] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__bsdi__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_BSD_BSDI BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__bsdi__) \
+    )
+#   ifndef BOOST_OS_BSD_AVAILABLE
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+#       define BOOST_OS_BSD_AVAILABLE
+#   endif
+#   undef BOOST_OS_BSD_BSDI
+#   define BOOST_OS_BSD_BSDI BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_BSD_BSDI
+#   define BOOST_OS_BSD_BSDI_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_BSDI_NAME "BSDi BSD/OS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_BSDI,BOOST_OS_BSD_BSDI_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/bsd/dragonfly.h b/vendor/pdalboost/boost/predef/os/bsd/dragonfly.h
new file mode 100644
index 0000000..1d07579
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/bsd/dragonfly.h
@@ -0,0 +1,50 @@
+/*
+Copyright Rene Rivera 2012-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_BSD_DRAGONFLY_H
+#define BOOST_PREDEF_OS_BSD_DRAGONFLY_H
+
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_OS_BSD_DRAGONFLY`]
+
+[@http://en.wikipedia.org/wiki/DragonFly_BSD DragonFly BSD] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__DragonFly__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_BSD_DRAGONFLY BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__DragonFly__) \
+    )
+#   ifndef BOOST_OS_BSD_AVAILABLE
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+#       define BOOST_OS_BSD_AVAILABLE
+#   endif
+#   undef BOOST_OS_BSD_DRAGONFLY
+#   if defined(__DragonFly__)
+#       define BOOST_OS_DRAGONFLY_BSD BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_OS_BSD_DRAGONFLY
+#   define BOOST_OS_BSD_DRAGONFLY_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_DRAGONFLY_NAME "DragonFly BSD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_DRAGONFLY,BOOST_OS_BSD_DRAGONFLY_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/bsd/free.h b/vendor/pdalboost/boost/predef/os/bsd/free.h
new file mode 100644
index 0000000..248011a
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/bsd/free.h
@@ -0,0 +1,60 @@
+/*
+Copyright Rene Rivera 2012-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_BSD_FREE_H
+#define BOOST_PREDEF_OS_BSD_FREE_H
+
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_OS_BSD_FREE`]
+
+[@http://en.wikipedia.org/wiki/Freebsd FreeBSD] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__FreeBSD__`] [__predef_detection__]]
+
+    [[`__FreeBSD_version`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_OS_BSD_FREE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__FreeBSD__) \
+    )
+#   ifndef BOOST_OS_BSD_AVAILABLE
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+#       define BOOST_OS_BSD_AVAILABLE
+#   endif
+#   undef BOOST_OS_BSD_FREE
+#   if defined(__FreeBSD_version)
+#       if __FreeBSD_version < 500000
+#           define BOOST_OS_BSD_FREE \
+                BOOST_PREDEF_MAKE_10_VRP000(__FreeBSD_version)
+#       else
+#           define BOOST_OS_BSD_FREE \
+                BOOST_PREDEF_MAKE_10_VRR000(__FreeBSD_version)
+#       endif
+#   else
+#       define BOOST_OS_BSD_FREE BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_OS_BSD_FREE
+#   define BOOST_OS_BSD_FREE_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_FREE_NAME "Free BSD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_FREE,BOOST_OS_BSD_FREE_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/bsd/net.h b/vendor/pdalboost/boost/predef/os/bsd/net.h
new file mode 100644
index 0000000..387cbde
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/bsd/net.h
@@ -0,0 +1,84 @@
+/*
+Copyright Rene Rivera 2012-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_BSD_NET_H
+#define BOOST_PREDEF_OS_BSD_NET_H
+
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_OS_BSD_NET`]
+
+[@http://en.wikipedia.org/wiki/Netbsd NetBSD] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__NETBSD__`] [__predef_detection__]]
+    [[`__NetBSD__`] [__predef_detection__]]
+
+    [[`__NETBSD_version`] [V.R.P]]
+    [[`NetBSD0_8`] [0.8.0]]
+    [[`NetBSD0_9`] [0.9.0]]
+    [[`NetBSD1_0`] [1.0.0]]
+    [[`__NetBSD_Version`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__NETBSD__) || defined(__NetBSD__) \
+    )
+#   ifndef BOOST_OS_BSD_AVAILABLE
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+#       define BOOST_OS_BSD_AVAILABLE
+#   endif
+#   undef BOOST_OS_BSD_NET
+#   if defined(__NETBSD__)
+#       if defined(__NETBSD_version)
+#           if __NETBSD_version < 500000
+#               define BOOST_OS_BSD_NET \
+                    BOOST_PREDEF_MAKE_10_VRP000(__NETBSD_version)
+#           else
+#               define BOOST_OS_BSD_NET \
+                    BOOST_PREDEF_MAKE_10_VRR000(__NETBSD_version)
+#           endif
+#       else
+#           define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#   elif defined(__NetBSD__)
+#       if !defined(BOOST_OS_BSD_NET) && defined(NetBSD0_8)
+#           define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER(0,8,0)
+#       endif
+#       if !defined(BOOST_OS_BSD_NET) && defined(NetBSD0_9)
+#           define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER(0,9,0)
+#       endif
+#       if !defined(BOOST_OS_BSD_NET) && defined(NetBSD1_0)
+#           define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER(1,0,0)
+#       endif
+#       if !defined(BOOST_OS_BSD_NET) && defined(__NetBSD_Version)
+#           define BOOST_OS_BSD_NET \
+                BOOST_PREDEF_MAKE_10_VVRR00PP00(__NetBSD_Version)
+#       endif
+#       if !defined(BOOST_OS_BSD_NET)
+#           define BOOST_OS_BSD_NET BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#   endif
+#endif
+
+#if BOOST_OS_BSD_NET
+#   define BOOST_OS_BSD_NET_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_NET_NAME "DragonFly BSD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_NET,BOOST_OS_BSD_NET_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/bsd/open.h b/vendor/pdalboost/boost/predef/os/bsd/open.h
new file mode 100644
index 0000000..423103a
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/bsd/open.h
@@ -0,0 +1,171 @@
+/*
+Copyright Rene Rivera 2012-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_BSD_OPEN_H
+#define BOOST_PREDEF_OS_BSD_OPEN_H
+
+#include <boost/predef/os/bsd.h>
+
+/*`
+[heading `BOOST_OS_BSD_OPEN`]
+
+[@http://en.wikipedia.org/wiki/Openbsd OpenBSD] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__OpenBSD__`] [__predef_detection__]]
+
+    [[`OpenBSD2_0`] [2.0.0]]
+    [[`OpenBSD2_1`] [2.1.0]]
+    [[`OpenBSD2_2`] [2.2.0]]
+    [[`OpenBSD2_3`] [2.3.0]]
+    [[`OpenBSD2_4`] [2.4.0]]
+    [[`OpenBSD2_5`] [2.5.0]]
+    [[`OpenBSD2_6`] [2.6.0]]
+    [[`OpenBSD2_7`] [2.7.0]]
+    [[`OpenBSD2_8`] [2.8.0]]
+    [[`OpenBSD2_9`] [2.9.0]]
+    [[`OpenBSD3_0`] [3.0.0]]
+    [[`OpenBSD3_1`] [3.1.0]]
+    [[`OpenBSD3_2`] [3.2.0]]
+    [[`OpenBSD3_3`] [3.3.0]]
+    [[`OpenBSD3_4`] [3.4.0]]
+    [[`OpenBSD3_5`] [3.5.0]]
+    [[`OpenBSD3_6`] [3.6.0]]
+    [[`OpenBSD3_7`] [3.7.0]]
+    [[`OpenBSD3_8`] [3.8.0]]
+    [[`OpenBSD3_9`] [3.9.0]]
+    [[`OpenBSD4_0`] [4.0.0]]
+    [[`OpenBSD4_1`] [4.1.0]]
+    [[`OpenBSD4_2`] [4.2.0]]
+    [[`OpenBSD4_3`] [4.3.0]]
+    [[`OpenBSD4_4`] [4.4.0]]
+    [[`OpenBSD4_5`] [4.5.0]]
+    [[`OpenBSD4_6`] [4.6.0]]
+    [[`OpenBSD4_7`] [4.7.0]]
+    [[`OpenBSD4_8`] [4.8.0]]
+    [[`OpenBSD4_9`] [4.9.0]]
+    ]
+ */
+
+#define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__OpenBSD__) \
+    )
+#   ifndef BOOST_OS_BSD_AVAILABLE
+#       define BOOST_OS_BSD BOOST_VERSION_NUMBER_AVAILABLE
+#       define BOOST_OS_BSD_AVAILABLE
+#   endif
+#   undef BOOST_OS_BSD_OPEN
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_0)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,0,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_1)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,1,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_2)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,2,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_3)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,3,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_4)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,4,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_5)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,5,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_6)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,6,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_7)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,7,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_8)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,8,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD2_9)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(2,9,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_0)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,0,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_1)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,1,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_2)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,2,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_3)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,3,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_4)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,4,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_5)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,5,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_6)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,6,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_7)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,7,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_8)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,8,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD3_9)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(3,9,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_0)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,0,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_1)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,1,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_2)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,2,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_3)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,3,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_4)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,4,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_5)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,5,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_6)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,6,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_7)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,7,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_8)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,8,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN) && defined(OpenBSD4_9)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER(4,9,0)
+#   endif
+#   if !defined(BOOST_OS_BSD_OPEN)
+#       define BOOST_OS_BSD_OPEN BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_OS_BSD_OPEN
+#   define BOOST_OS_BSD_OPEN_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_BSD_OPEN_NAME "OpenBSD"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_BSD_OPEN,BOOST_OS_BSD_OPEN_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/cygwin.h b/vendor/pdalboost/boost/predef/os/cygwin.h
new file mode 100644
index 0000000..1985c97
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/cygwin.h
@@ -0,0 +1,45 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_CYGWIN_H
+#define BOOST_PREDEF_OS_CYGWIN_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_CYGWIN`]
+
+[@http://en.wikipedia.org/wiki/Cygwin Cygwin] evironment.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__CYGWIN__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_CYGWIN BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__CYGWIN__) \
+    )
+#   undef BOOST_OS_CYGWIN
+#   define BOOST_OS_CGYWIN BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_CYGWIN
+#   define BOOST_OS_CYGWIN_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_CYGWIN_NAME "Cygwin"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_CYGWIN,BOOST_OS_CYGWIN_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/haiku.h b/vendor/pdalboost/boost/predef/os/haiku.h
new file mode 100644
index 0000000..d79dbea
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/haiku.h
@@ -0,0 +1,46 @@
+/*
+Copyright Jessica Hamilton 2014
+Copyright Rene Rivera 2014-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_HAIKU_H
+#define BOOST_PREDEF_OS_HAIKU_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_HAIKU`]
+
+[@http://en.wikipedia.org/wiki/Haiku_(operating_system) Haiku] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__HAIKU__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_HAIKU BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__HAIKU__) \
+    )
+#   undef BOOST_OS_HAIKU
+#   define BOOST_OS_HAIKU BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_HAIKU
+#   define BOOST_OS_HAIKU_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_HAIKU_NAME "Haiku"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_HAIKU,BOOST_OS_HAIKU_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/hpux.h b/vendor/pdalboost/boost/predef/os/hpux.h
new file mode 100644
index 0000000..29243f4
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/hpux.h
@@ -0,0 +1,47 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_HPUX_H
+#define BOOST_PREDEF_OS_HPUX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_HPUX`]
+
+[@http://en.wikipedia.org/wiki/HP-UX HP-UX] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`hpux`] [__predef_detection__]]
+    [[`_hpux`] [__predef_detection__]]
+    [[`__hpux`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_HPUX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(hpux) || defined(_hpux) || defined(__hpux) \
+    )
+#   undef BOOST_OS_HPUX
+#   define BOOST_OS_HPUX BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_HPUX
+#   define BOOST_OS_HPUX_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_HPUX_NAME "HP-UX"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_HPUX,BOOST_OS_HPUX_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/ios.h b/vendor/pdalboost/boost/predef/os/ios.h
new file mode 100644
index 0000000..f853815
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/ios.h
@@ -0,0 +1,51 @@
+/*
+Copyright Franz Detro 2014
+Copyright Rene Rivera 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_IOS_H
+#define BOOST_PREDEF_OS_IOS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_IOS`]
+
+[@http://en.wikipedia.org/wiki/iOS iOS] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__APPLE__`] [__predef_detection__]]
+    [[`__MACH__`] [__predef_detection__]]
+    [[`__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__`] [__predef_detection__]]
+
+    [[`__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__`] [__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__*1000]]
+    ]
+ */
+
+#define BOOST_OS_IOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__APPLE__) && defined(__MACH__) && \
+    defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) \
+    )
+#   undef BOOST_OS_IOS
+#   define BOOST_OS_IOS (__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__*1000)
+#endif
+
+#if BOOST_OS_IOS
+#   define BOOST_OS_IOS_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_IOS_NAME "iOS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_IOS,BOOST_OS_IOS_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/irix.h b/vendor/pdalboost/boost/predef/os/irix.h
new file mode 100644
index 0000000..fa6ac41
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/irix.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_IRIX_H
+#define BOOST_PREDEF_OS_IRIX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_IRIX`]
+
+[@http://en.wikipedia.org/wiki/Irix IRIX] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`sgi`] [__predef_detection__]]
+    [[`__sgi`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_IRIX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(sgi) || defined(__sgi) \
+    )
+#   undef BOOST_OS_IRIX
+#   define BOOST_OS_IRIX BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_IRIX
+#   define BOOST_OS_IRIX_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_IRIX_NAME "IRIX"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_IRIX,BOOST_OS_IRIX_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/linux.h b/vendor/pdalboost/boost/predef/os/linux.h
new file mode 100644
index 0000000..a297d08
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/linux.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_LINUX_H
+#define BOOST_PREDEF_OS_LINUX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_LINUX`]
+
+[@http://en.wikipedia.org/wiki/Linux Linux] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`linux`] [__predef_detection__]]
+    [[`__linux`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_LINUX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(linux) || defined(__linux) \
+    )
+#   undef BOOST_OS_LINUX
+#   define BOOST_OS_LINUX BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_LINUX
+#   define BOOST_OS_LINUX_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_LINUX_NAME "Linux"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_LINUX,BOOST_OS_LINUX_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/macos.h b/vendor/pdalboost/boost/predef/os/macos.h
new file mode 100644
index 0000000..4afb30d
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/macos.h
@@ -0,0 +1,65 @@
+/*
+Copyright Rene Rivera 2008-2015
+Copyright Franz Detro 2014
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_MACOS_H
+#define BOOST_PREDEF_OS_MACOS_H
+
+/* Special case: iOS will define the same predefs as MacOS, and additionally
+ '__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__'. We can guard against that,
+ but only if we detect iOS first. Hence we will force include iOS detection
+ * before doing any MacOS detection.
+ */
+#include <boost/predef/os/ios.h>
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_MACOS`]
+
+[@http://en.wikipedia.org/wiki/Mac_OS Mac OS] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`macintosh`] [__predef_detection__]]
+    [[`Macintosh`] [__predef_detection__]]
+    [[`__APPLE__`] [__predef_detection__]]
+    [[`__MACH__`] [__predef_detection__]]
+
+    [[`__APPLE__`, `__MACH__`] [10.0.0]]
+    [[ /otherwise/ ] [9.0.0]]
+    ]
+ */
+
+#define BOOST_OS_MACOS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(macintosh) || defined(Macintosh) || \
+    (defined(__APPLE__) && defined(__MACH__)) \
+    )
+#   undef BOOST_OS_MACOS
+#   if !defined(BOOST_OS_MACOS) && defined(__APPLE__) && defined(__MACH__)
+#       define BOOST_OS_MACOS BOOST_VERSION_NUMBER(10,0,0)
+#   endif
+#   if !defined(BOOST_OS_MACOS)
+#       define BOOST_OS_MACOS BOOST_VERSION_NUMBER(9,0,0)
+#   endif
+#endif
+
+#if BOOST_OS_MACOS
+#   define BOOST_OS_MACOS_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_MACOS_NAME "Mac OS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_MACOS,BOOST_OS_MACOS_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/os400.h b/vendor/pdalboost/boost/predef/os/os400.h
new file mode 100644
index 0000000..b3446c2
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/os400.h
@@ -0,0 +1,45 @@
+/*
+Copyright Rene Rivera 2011-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_OS400_H
+#define BOOST_PREDEF_OS_OS400_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_OS400`]
+
+[@http://en.wikipedia.org/wiki/IBM_i IBM OS/400] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__OS400__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_OS400 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__OS400__) \
+    )
+#   undef BOOST_OS_OS400
+#   define BOOST_OS_OS400 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_OS400
+#   define BOOST_OS_OS400_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_OS400_NAME "IBM OS/400"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_OS400,BOOST_OS_OS400_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/qnxnto.h b/vendor/pdalboost/boost/predef/os/qnxnto.h
new file mode 100644
index 0000000..e76fbf2
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/qnxnto.h
@@ -0,0 +1,59 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_QNXNTO_H
+#define BOOST_PREDEF_OS_QNXNTO_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_QNX`]
+
+[@http://en.wikipedia.org/wiki/QNX QNX] operating system.
+Version number available as major, and minor if possible. And
+version 4 is specifically detected.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__QNX__`] [__predef_detection__]]
+    [[`__QNXNTO__`] [__predef_detection__]]
+
+    [[`_NTO_VERSION`] [V.R.0]]
+    [[`__QNX__`] [4.0.0]]
+    ]
+ */
+
+#define BOOST_OS_QNX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(__QNX__) || defined(__QNXNTO__) \
+    )
+#   undef BOOST_OS_QNX
+#   if !defined(BOOST_OS_QNX) && defined(_NTO_VERSION)
+#       define BOOST_OS_QNX BOOST_PREDEF_MAKE_10_VVRR(_NTO_VERSION)
+#   endif
+#   if !defined(BOOST_OS_QNX) && defined(__QNX__)
+#       define BOOST_OS_QNX BOOST_VERSION_NUMBER(4,0,0)
+#   endif
+#   if !defined(BOOST_OS_QNX)
+#       define BOOST_OS_QNX BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_OS_QNX
+#   define BOOST_OS_QNX_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_QNX_NAME "QNX"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_QNX,BOOST_OS_QNX_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/solaris.h b/vendor/pdalboost/boost/predef/os/solaris.h
new file mode 100644
index 0000000..75ddc91
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/solaris.h
@@ -0,0 +1,46 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_SOLARIS_H
+#define BOOST_PREDEF_OS_SOLARIS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_SOLARIS`]
+
+[@http://en.wikipedia.org/wiki/Solaris_Operating_Environment Solaris] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`sun`] [__predef_detection__]]
+    [[`__sun`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_SOLARIS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(sun) || defined(__sun) \
+    )
+#   undef BOOST_OS_SOLARIS
+#   define BOOST_OS_SOLARIS BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_SOLARIS
+#   define BOOST_OS_SOLARIS_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_SOLARIS_NAME "Solaris"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_SOLARIS,BOOST_OS_SOLARIS_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/unix.h b/vendor/pdalboost/boost/predef/os/unix.h
new file mode 100644
index 0000000..a607104
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/unix.h
@@ -0,0 +1,76 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_UNIX_H
+#define BOOST_PREDEF_OS_UNIX_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_UNIX`]
+
+[@http://en.wikipedia.org/wiki/Unix Unix Environment] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`unix`] [__predef_detection__]]
+    [[`__unix`] [__predef_detection__]]
+    [[`_XOPEN_SOURCE`] [__predef_detection__]]
+    [[`_POSIX_SOURCE`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_UNIX BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(unix) || defined(__unix) || \
+    defined(_XOPEN_SOURCE) || defined(_POSIX_SOURCE)
+#   undef BOOST_OS_UNIX
+#   define BOOST_OS_UNIX BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_UNIX
+#   define BOOST_OS_UNIX_AVAILABLE
+#endif
+
+#define BOOST_OS_UNIX_NAME "Unix Environment"
+
+/*`
+[heading `BOOST_OS_SVR4`]
+
+[@http://en.wikipedia.org/wiki/UNIX_System_V SVR4 Environment] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__sysv__`] [__predef_detection__]]
+    [[`__SVR4`] [__predef_detection__]]
+    [[`__svr4__`] [__predef_detection__]]
+    [[`_SYSTYPE_SVR4`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_SVR4 BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__sysv__) || defined(__SVR4) || \
+    defined(__svr4__) || defined(_SYSTYPE_SVR4)
+#   undef BOOST_OS_SVR4
+#   define BOOST_OS_SVR4 BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_SVR4
+#   define BOOST_OS_SVR4_AVAILABLE
+#endif
+
+#define BOOST_OS_SVR4_NAME "SVR4 Environment"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_UNIX,BOOST_OS_UNIX_NAME)
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_SVR4,BOOST_OS_SVR4_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/vms.h b/vendor/pdalboost/boost/predef/os/vms.h
new file mode 100644
index 0000000..2f8f786
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/vms.h
@@ -0,0 +1,52 @@
+/*
+Copyright Rene Rivera 2011-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_VMS_H
+#define BOOST_PREDEF_OS_VMS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_VMS`]
+
+[@http://en.wikipedia.org/wiki/Vms VMS] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`VMS`] [__predef_detection__]]
+    [[`__VMS`] [__predef_detection__]]
+
+    [[`__VMS_VER`] [V.R.P]]
+    ]
+ */
+
+#define BOOST_OS_VMS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(VMS) || defined(__VMS) \
+    )
+#   undef BOOST_OS_VMS
+#   if defined(__VMS_VER)
+#       define BOOST_OS_VMS BOOST_PREDEF_MAKE_10_VVRR00PP00(__VMS_VER)
+#   else
+#       define BOOST_OS_VMS BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#if BOOST_OS_VMS
+#   define BOOST_OS_VMS_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_VMS_NAME "VMS"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_VMS,BOOST_OS_VMS_NAME)
diff --git a/vendor/pdalboost/boost/predef/os/windows.h b/vendor/pdalboost/boost/predef/os/windows.h
new file mode 100644
index 0000000..9db4390
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/os/windows.h
@@ -0,0 +1,51 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_OS_WINDOWS_H
+#define BOOST_PREDEF_OS_WINDOWS_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_OS_WINDOWS`]
+
+[@http://en.wikipedia.org/wiki/Category:Microsoft_Windows Microsoft Windows] operating system.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`_WIN32`] [__predef_detection__]]
+    [[`_WIN64`] [__predef_detection__]]
+    [[`__WIN32__`] [__predef_detection__]]
+    [[`__TOS_WIN__`] [__predef_detection__]]
+    [[`__WINDOWS__`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_OS_WINDOWS BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
+    defined(_WIN32) || defined(_WIN64) || \
+    defined(__WIN32__) || defined(__TOS_WIN__) || \
+    defined(__WINDOWS__) \
+    )
+#   undef BOOST_OS_WINDOWS
+#   define BOOST_OS_WINDOWS BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+
+#if BOOST_OS_WINDOWS
+#   define BOOST_OS_WINDOWS_AVAILABLE
+#   include <boost/predef/detail/os_detected.h>
+#endif
+
+#define BOOST_OS_WINDOWS_NAME "Microsoft Windows"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_OS_WINDOWS,BOOST_OS_WINDOWS_NAME)
diff --git a/vendor/pdalboost/boost/predef/other.h b/vendor/pdalboost/boost/predef/other.h
new file mode 100644
index 0000000..c09ad49
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/other.h
@@ -0,0 +1,16 @@
+/*
+Copyright Rene Rivera 2013-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#if !defined(BOOST_PREDEF_OTHER_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_OTHER_H
+#define BOOST_PREDEF_OTHER_H
+#endif
+
+#include <boost/predef/other/endian.h>
+/*#include <boost/predef/other/.h>*/
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/other/endian.h b/vendor/pdalboost/boost/predef/other/endian.h
new file mode 100644
index 0000000..6d1f43f
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/other/endian.h
@@ -0,0 +1,204 @@
+/*
+Copyright Rene Rivera 2013-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_ENDIAN_H
+#define BOOST_PREDEF_ENDIAN_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+#include <boost/predef/library/c/gnu.h>
+#include <boost/predef/os/macos.h>
+#include <boost/predef/os/bsd.h>
+#include <boost/predef/os/android.h>
+
+/*`
+[heading `BOOST_ENDIAN_*`]
+
+Detection of endian memory ordering. There are four defined macros
+in this header that define the various generally possible endian
+memory orderings:
+
+* `BOOST_ENDIAN_BIG_BYTE`, byte-swapped big-endian.
+* `BOOST_ENDIAN_BIG_WORD`, word-swapped big-endian.
+* `BOOST_ENDIAN_LITTLE_BYTE`, byte-swapped little-endian.
+* `BOOST_ENDIAN_LITTLE_WORD`, word-swapped little-endian.
+
+The detection is conservative in that it only identifies endianness
+that it knows for certain. In particular bi-endianness is not
+indicated as is it not practically possible to determine the
+endianness from anything but an operating system provided
+header. And the currently known headers do not define that
+programatic bi-endianness is available.
+
+This implementation is a compilation of various publicly available
+information and acquired knowledge:
+
+# The indispensable documentation of "Pre-defined Compiler Macros"
+  [@http://sourceforge.net/p/predef/wiki/Endianness Endianness].
+# The various endian specifications available in the
+  [@http://wikipedia.org/ Wikipedia] computer architecture pages.
+# Generally available searches for headers that define endianness.
+ */
+
+#define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#define BOOST_ENDIAN_BIG_WORD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+#define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+/* GNU libc provides a header defining __BYTE_ORDER, or _BYTE_ORDER.
+ * And some OSs provide some for of endian header also.
+ */
+#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
+    !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
+#   if BOOST_LIB_C_GNU || BOOST_OS_ANDROID
+#       include <endian.h>
+#   else
+#       if BOOST_OS_MACOS
+#           include <machine/endian.h>
+#       else
+#           if BOOST_OS_BSD
+#               if BOOST_OS_BSD_OPEN
+#                   include <machine/endian.h>
+#               else
+#                   include <sys/endian.h>
+#               endif
+#           endif
+#       endif
+#   endif
+#   if defined(__BYTE_ORDER)
+#       if defined(__BIG_ENDIAN) && (__BYTE_ORDER == __BIG_ENDIAN)
+#           undef BOOST_ENDIAN_BIG_BYTE
+#           define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#       if defined(__LITTLE_ENDIAN) && (__BYTE_ORDER == __LITTLE_ENDIAN)
+#           undef BOOST_ENDIAN_LITTLE_BYTE
+#           define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#       if defined(__PDP_ENDIAN) && (__BYTE_ORDER == __PDP_ENDIAN)
+#           undef BOOST_ENDIAN_LITTLE_WORD
+#           define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#   endif
+#   if !defined(__BYTE_ORDER) && defined(_BYTE_ORDER)
+#       if defined(_BIG_ENDIAN) && (_BYTE_ORDER == _BIG_ENDIAN)
+#           undef BOOST_ENDIAN_BIG_BYTE
+#           define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#       if defined(_LITTLE_ENDIAN) && (_BYTE_ORDER == _LITTLE_ENDIAN)
+#           undef BOOST_ENDIAN_LITTLE_BYTE
+#           define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#       if defined(_PDP_ENDIAN) && (_BYTE_ORDER == _PDP_ENDIAN)
+#           undef BOOST_ENDIAN_LITTLE_WORD
+#           define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#   endif
+#endif
+
+/* Built-in byte-swpped big-endian macros.
+ */
+#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
+    !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
+#   if (defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)) || \
+       (defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)) || \
+        defined(__ARMEB__) || \
+        defined(__THUMBEB__) || \
+        defined(__AARCH64EB__) || \
+        defined(_MIPSEB) || \
+        defined(__MIPSEB) || \
+        defined(__MIPSEB__)
+#       undef BOOST_ENDIAN_BIG_BYTE
+#       define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+/* Built-in byte-swpped little-endian macros.
+ */
+#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
+    !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
+#   if (defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)) || \
+       (defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)) || \
+        defined(__ARMEL__) || \
+        defined(__THUMBEL__) || \
+        defined(__AARCH64EL__) || \
+        defined(_MIPSEL) || \
+        defined(__MIPSEL) || \
+        defined(__MIPSEL__)
+#       undef BOOST_ENDIAN_LITTLE_BYTE
+#       define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+/* Some architectures are strictly one endianess (as opposed
+ * the current common bi-endianess).
+ */
+#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
+    !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
+#   include <boost/predef/architecture.h>
+#   if BOOST_ARCH_M68K || \
+        BOOST_ARCH_PARISC || \
+        BOOST_ARCH_SPARC || \
+        BOOST_ARCH_SYS370 || \
+        BOOST_ARCH_SYS390 || \
+        BOOST_ARCH_Z
+#       undef BOOST_ENDIAN_BIG_BYTE
+#       define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#   if BOOST_ARCH_AMD64 || \
+        BOOST_ARCH_IA64 || \
+        BOOST_ARCH_X86 || \
+        BOOST_ARCH_BLACKFIN
+#       undef BOOST_ENDIAN_LITTLE_BYTE
+#       define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+/* Windows on ARM, if not otherwise detected/specified, is always
+ * byte-swaped little-endian.
+ */
+#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \
+    !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD
+#   if BOOST_ARCH_ARM
+#       include <boost/predef/os/windows.h>
+#       if BOOST_OS_WINDOWS
+#           undef BOOST_ENDIAN_LITTLE_BYTE
+#           define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE
+#       endif
+#   endif
+#endif
+
+#if BOOST_ENDIAN_BIG_BYTE
+#   define BOOST_ENDIAN_BIG_BYTE_AVAILABLE
+#endif
+#if BOOST_ENDIAN_BIG_WORD
+#   define BOOST_ENDIAN_BIG_WORD_BYTE_AVAILABLE
+#endif
+#if BOOST_ENDIAN_LITTLE_BYTE
+#   define BOOST_ENDIAN_LITTLE_BYTE_AVAILABLE
+#endif
+#if BOOST_ENDIAN_LITTLE_WORD
+#   define BOOST_ENDIAN_LITTLE_WORD_BYTE_AVAILABLE
+#endif
+
+#define BOOST_ENDIAN_BIG_BYTE_NAME "Byte-Swapped Big-Endian"
+#define BOOST_ENDIAN_BIG_WORD_NAME "Word-Swapped Big-Endian"
+#define BOOST_ENDIAN_LITTLE_BYTE_NAME "Byte-Swapped Little-Endian"
+#define BOOST_ENDIAN_LITTLE_WORD_NAME "Word-Swapped Little-Endian"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_BIG_BYTE,BOOST_ENDIAN_BIG_BYTE_NAME)
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_BIG_WORD,BOOST_ENDIAN_BIG_WORD_NAME)
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_LITTLE_BYTE,BOOST_ENDIAN_LITTLE_BYTE_NAME)
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_LITTLE_WORD,BOOST_ENDIAN_LITTLE_WORD_NAME)
diff --git a/vendor/pdalboost/boost/predef/platform.h b/vendor/pdalboost/boost/predef/platform.h
new file mode 100644
index 0000000..c0c8706
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/platform.h
@@ -0,0 +1,21 @@
+/*
+Copyright Rene Rivera 2013-2015
+Copyright (c) Microsoft Corporation 2014
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#if !defined(BOOST_PREDEF_PLATFORM_H) || defined(BOOST_PREDEF_INTERNAL_GENERATE_TESTS)
+#ifndef BOOST_PREDEF_PLATFORM_H
+#define BOOST_PREDEF_PLATFORM_H
+#endif
+
+#include <boost/predef/platform/mingw.h>
+#include <boost/predef/platform/windows_desktop.h>
+#include <boost/predef/platform/windows_store.h>
+#include <boost/predef/platform/windows_phone.h>
+#include <boost/predef/platform/windows_runtime.h>
+/*#include <boost/predef/platform/.h>*/
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/platform/mingw.h b/vendor/pdalboost/boost/predef/platform/mingw.h
new file mode 100644
index 0000000..64c5837
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/platform/mingw.h
@@ -0,0 +1,69 @@
+/*
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_COMPILER_MINGW_H
+#define BOOST_PREDEF_COMPILER_MINGW_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+
+/*`
+[heading `BOOST_PLAT_MINGW`]
+
+[@http://en.wikipedia.org/wiki/MinGW MinGW] platform.
+Version number available as major, minor, and patch.
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`__MINGW32__`] [__predef_detection__]]
+    [[`__MINGW64__`] [__predef_detection__]]
+
+    [[`__MINGW64_VERSION_MAJOR`, `__MINGW64_VERSION_MINOR`] [V.R.0]]
+    [[`__MINGW32_VERSION_MAJOR`, `__MINGW32_VERSION_MINOR`] [V.R.0]]
+    ]
+ */
+
+#define BOOST_PLAT_MINGW BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if defined(__MINGW32__) || defined(__MINGW64__)
+#   include <_mingw.h>
+#   if !defined(BOOST_PLAT_MINGW_DETECTION) && (defined(__MINGW64_VERSION_MAJOR) && defined(__MINGW64_VERSION_MINOR))
+#       define BOOST_PLAT_MINGW_DETECTION \
+            BOOST_VERSION_NUMBER(__MINGW64_VERSION_MAJOR,__MINGW64_VERSION_MINOR,0)
+#   endif
+#   if !defined(BOOST_PLAT_MINGW_DETECTION) && (defined(__MINGW32_VERSION_MAJOR) && defined(__MINGW32_VERSION_MINOR))
+#       define BOOST_PLAT_MINGW_DETECTION \
+            BOOST_VERSION_NUMBER(__MINGW32_MAJOR_VERSION,__MINGW32_MINOR_VERSION,0)
+#   endif
+#   if !defined(BOOST_PLAT_MINGW_DETECTION)
+#       define BOOST_PLAT_MINGW_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
+#   endif
+#endif
+
+#ifdef BOOST_PLAT_MINGW_DETECTION
+#   define BOOST_PLAT_MINGW_AVAILABLE
+#   if defined(BOOST_PREDEF_DETAIL_PLAT_DETECTED)
+#       define BOOST_PLAT_MINGW_EMULATED BOOST_PLAT_MINGW_DETECTION
+#   else
+#       undef BOOST_PLAT_MINGW
+#       define BOOST_PLAT_MINGW BOOST_PLAT_MINGW_DETECTION
+#   endif
+#   include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_MINGW_NAME "MinGW"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_MINGW,BOOST_PLAT_MINGW_NAME)
+
+#ifdef BOOST_PLAT_MINGW_EMULATED
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_MINGW_EMULATED,BOOST_PLAT_MINGW_NAME)
+#endif
diff --git a/vendor/pdalboost/boost/predef/platform/windows_desktop.h b/vendor/pdalboost/boost/predef/platform/windows_desktop.h
new file mode 100644
index 0000000..62719b4
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/platform/windows_desktop.h
@@ -0,0 +1,45 @@
+/*
+Copyright (c) Microsoft Corporation 2014
+Copyright Rene Rivera 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_WINDOWS_DESKTOP_H
+#define BOOST_PREDEF_PLAT_WINDOWS_DESKTOP_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+#include <boost/predef/os/windows.h>
+
+/*`
+[heading `BOOST_PLAT_WINDOWS_DESKTOP`]
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`!WINAPI_FAMILY`] [__predef_detection__]]
+    [[`WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_PLAT_WINDOWS_DESKTOP BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_OS_WINDOWS && \
+    ( !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP) )
+#   undef BOOST_PLAT_WINDOWS_DESKTOP
+#   define BOOST_PLAT_WINDOWS_DESKTOP BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+ 
+#if BOOST_PLAT_WINDOWS_DESKTOP
+#   define BOOST_PLAT_WINDOWS_DESKTOP_AVAILABLE
+#   include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_WINDOWS_DESKTOP_NAME "Windows Desktop"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_DESKTOP,BOOST_PLAT_WINDOWS_DESKTOP_NAME)
diff --git a/vendor/pdalboost/boost/predef/platform/windows_phone.h b/vendor/pdalboost/boost/predef/platform/windows_phone.h
new file mode 100644
index 0000000..df583ad
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/platform/windows_phone.h
@@ -0,0 +1,43 @@
+/*
+Copyright (c) Microsoft Corporation 2014
+Copyright Rene Rivera 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_WINDOWS_PHONE_H
+#define BOOST_PREDEF_PLAT_WINDOWS_PHONE_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+#include <boost/predef/os/windows.h>
+
+/*`
+[heading `BOOST_PLAT_WINDOWS_PHONE`]
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_PLAT_WINDOWS_PHONE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_OS_WINDOWS && defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
+#   undef BOOST_PLAT_WINDOWS_PHONE
+#   define BOOST_PLAT_WINDOWS_PHONE BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+ 
+#if BOOST_PLAT_WINDOWS_PHONE
+#   define BOOST_PLAT_WINDOWS_PHONE_AVAILABLE
+#   include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_WINDOWS_PHONE_NAME "Windows Phone"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_PHONE,BOOST_PLAT_WINDOWS_PHONE_NAME)
diff --git a/vendor/pdalboost/boost/predef/platform/windows_runtime.h b/vendor/pdalboost/boost/predef/platform/windows_runtime.h
new file mode 100644
index 0000000..03be514
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/platform/windows_runtime.h
@@ -0,0 +1,45 @@
+/*
+Copyright (c) Microsoft Corporation 2014
+Copyright Rene Rivera 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_WINDOWS_RUNTIME_H
+#define BOOST_PREDEF_PLAT_WINDOWS_RUNTIME_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+#include <boost/predef/os/windows.h>
+
+/*`
+[heading `BOOST_PLAT_WINDOWS_RUNTIME`]
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`WINAPI_FAMILY == WINAPI_FAMILY_APP`] [__predef_detection__]]
+    [[`WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_PLAT_WINDOWS_RUNTIME BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_OS_WINDOWS && defined(WINAPI_FAMILY) && \
+    ( WINAPI_FAMILY == WINAPI_FAMILY_APP || WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP )
+#   undef BOOST_PLAT_WINDOWS_RUNTIME
+#   define BOOST_PLAT_WINDOWS_RUNTIME BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+ 
+#if BOOST_PLAT_WINDOWS_RUNTIME
+#   define BOOST_PLAT_WINDOWS_RUNTIME_AVAILABLE
+#   include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_WINDOWS_RUNTIME_NAME "Windows Runtime"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_RUNTIME,BOOST_PLAT_WINDOWS_RUNTIME_NAME)
diff --git a/vendor/pdalboost/boost/predef/platform/windows_store.h b/vendor/pdalboost/boost/predef/platform/windows_store.h
new file mode 100644
index 0000000..a34968b
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/platform/windows_store.h
@@ -0,0 +1,43 @@
+/*
+Copyright (c) Microsoft Corporation 2014
+Copyright Rene Rivera 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_PLAT_WINDOWS_STORE_H
+#define BOOST_PREDEF_PLAT_WINDOWS_STORE_H
+
+#include <boost/predef/version_number.h>
+#include <boost/predef/make.h>
+#include <boost/predef/os/windows.h>
+
+/*`
+[heading `BOOST_PLAT_WINDOWS_STORE`]
+
+[table
+    [[__predef_symbol__] [__predef_version__]]
+
+    [[`WINAPI_FAMILY == WINAPI_FAMILY_APP`] [__predef_detection__]]
+    ]
+ */
+
+#define BOOST_PLAT_WINDOWS_STORE BOOST_VERSION_NUMBER_NOT_AVAILABLE
+
+#if BOOST_OS_WINDOWS && defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_FAMILY_APP
+#   undef BOOST_PLAT_WINDOWS_STORE
+#   define BOOST_PLAT_WINDOWS_STORE BOOST_VERSION_NUMBER_AVAILABLE
+#endif
+ 
+#if BOOST_PLAT_WINDOWS_STORE
+#   define BOOST_PLAT_WINDOWS_STORE_AVAILABLE
+#   include <boost/predef/detail/platform_detected.h>
+#endif
+
+#define BOOST_PLAT_WINDOWS_STORE_NAME "Windows Store"
+
+#endif
+
+#include <boost/predef/detail/test.h>
+BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_WINDOWS_STORE,BOOST_PLAT_WINDOWS_STORE_NAME)
diff --git a/vendor/pdalboost/boost/predef/version.h b/vendor/pdalboost/boost/predef/version.h
new file mode 100644
index 0000000..2fcdefa
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/version.h
@@ -0,0 +1,15 @@
+/*
+Copyright Rene Rivera 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_VERSION_H
+#define BOOST_PREDEF_VERSION_H
+
+#include <boost/predef/version_number.h>
+
+#define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,4,0)
+
+#endif
diff --git a/vendor/pdalboost/boost/predef/version_number.h b/vendor/pdalboost/boost/predef/version_number.h
new file mode 100644
index 0000000..3903a36
--- /dev/null
+++ b/vendor/pdalboost/boost/predef/version_number.h
@@ -0,0 +1,53 @@
+/*
+Copyright Rene Rivera 2005, 2008-2013
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+#ifndef BOOST_PREDEF_VERSION_NUMBER_H
+#define BOOST_PREDEF_VERSION_NUMBER_H
+
+/*`
+[heading `BOOST_VERSION_NUMBER`]
+
+``
+BOOST_VERSION_NUMBER(major,minor,patch)
+``
+
+Defines standard version numbers, with these properties:
+
+* Decimal base whole numbers in the range \[0,1000000000).
+  The number range is designed to allow for a (2,2,5) triplet.
+  Which fits within a 32 bit value.
+* The `major` number can be in the \[0,99\] range.
+* The `minor` number can be in the \[0,99\] range.
+* The `patch` number can be in the \[0,99999\] range.
+* Values can be specified in any base. As the defined value
+  is an constant expression.
+* Value can be directly used in both preprocessor and compiler
+  expressions for comparison to other similarly defined values.
+* The implementation enforces the individual ranges for the
+  major, minor, and patch numbers. And values over the ranges
+  are truncated (modulo).
+
+*/
+#define BOOST_VERSION_NUMBER(major,minor,patch) \
+    ( (((major)%100)*10000000) + (((minor)%100)*100000) + ((patch)%100000) )
+
+#define BOOST_VERSION_NUMBER_MAX \
+    BOOST_VERSION_NUMBER(99,99,99999)
+
+#define BOOST_VERSION_NUMBER_ZERO \
+    BOOST_VERSION_NUMBER(0,0,0)
+
+#define BOOST_VERSION_NUMBER_MIN \
+    BOOST_VERSION_NUMBER(0,0,1)
+
+#define BOOST_VERSION_NUMBER_AVAILABLE \
+    BOOST_VERSION_NUMBER_MIN
+
+#define BOOST_VERSION_NUMBER_NOT_AVAILABLE \
+    BOOST_VERSION_NUMBER_ZERO
+
+#endif
diff --git a/vendor/pdalboost/boost/preprocessor/arithmetic/add.hpp b/vendor/pdalboost/boost/preprocessor/arithmetic/add.hpp
new file mode 100644
index 0000000..5a29f55
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/arithmetic/add.hpp
@@ -0,0 +1,51 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP
+# define BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_ADD */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ADD(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))
+# else
+#    define BOOST_PP_ADD(x, y) BOOST_PP_ADD_I(x, y)
+#    define BOOST_PP_ADD_I(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))
+# endif
+#
+# define BOOST_PP_ADD_P(d, xy) BOOST_PP_TUPLE_ELEM(2, 1, xy)
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_ADD_O(d, xy) BOOST_PP_ADD_O_I xy
+# else
+#    define BOOST_PP_ADD_O(d, xy) BOOST_PP_ADD_O_I(BOOST_PP_TUPLE_ELEM(2, 0, xy), BOOST_PP_TUPLE_ELEM(2, 1, xy))
+# endif
+#
+# define BOOST_PP_ADD_O_I(x, y) (BOOST_PP_INC(x), BOOST_PP_DEC(y))
+#
+# /* BOOST_PP_ADD_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ADD_D(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))
+# else
+#    define BOOST_PP_ADD_D(d, x, y) BOOST_PP_ADD_D_I(d, x, y)
+#    define BOOST_PP_ADD_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_ADD_P, BOOST_PP_ADD_O, (x, y)))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/arithmetic/dec.hpp b/vendor/pdalboost/boost/preprocessor/arithmetic/dec.hpp
new file mode 100644
index 0000000..23dd0a3
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/arithmetic/dec.hpp
@@ -0,0 +1,289 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARITHMETIC_DEC_HPP
+# define BOOST_PREPROCESSOR_ARITHMETIC_DEC_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_DEC */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_DEC(x) BOOST_PP_DEC_I(x)
+# else
+#    define BOOST_PP_DEC(x) BOOST_PP_DEC_OO((x))
+#    define BOOST_PP_DEC_OO(par) BOOST_PP_DEC_I ## par
+# endif
+#
+# define BOOST_PP_DEC_I(x) BOOST_PP_DEC_ ## x
+#
+# define BOOST_PP_DEC_0 0
+# define BOOST_PP_DEC_1 0
+# define BOOST_PP_DEC_2 1
+# define BOOST_PP_DEC_3 2
+# define BOOST_PP_DEC_4 3
+# define BOOST_PP_DEC_5 4
+# define BOOST_PP_DEC_6 5
+# define BOOST_PP_DEC_7 6
+# define BOOST_PP_DEC_8 7
+# define BOOST_PP_DEC_9 8
+# define BOOST_PP_DEC_10 9
+# define BOOST_PP_DEC_11 10
+# define BOOST_PP_DEC_12 11
+# define BOOST_PP_DEC_13 12
+# define BOOST_PP_DEC_14 13
+# define BOOST_PP_DEC_15 14
+# define BOOST_PP_DEC_16 15
+# define BOOST_PP_DEC_17 16
+# define BOOST_PP_DEC_18 17
+# define BOOST_PP_DEC_19 18
+# define BOOST_PP_DEC_20 19
+# define BOOST_PP_DEC_21 20
+# define BOOST_PP_DEC_22 21
+# define BOOST_PP_DEC_23 22
+# define BOOST_PP_DEC_24 23
+# define BOOST_PP_DEC_25 24
+# define BOOST_PP_DEC_26 25
+# define BOOST_PP_DEC_27 26
+# define BOOST_PP_DEC_28 27
+# define BOOST_PP_DEC_29 28
+# define BOOST_PP_DEC_30 29
+# define BOOST_PP_DEC_31 30
+# define BOOST_PP_DEC_32 31
+# define BOOST_PP_DEC_33 32
+# define BOOST_PP_DEC_34 33
+# define BOOST_PP_DEC_35 34
+# define BOOST_PP_DEC_36 35
+# define BOOST_PP_DEC_37 36
+# define BOOST_PP_DEC_38 37
+# define BOOST_PP_DEC_39 38
+# define BOOST_PP_DEC_40 39
+# define BOOST_PP_DEC_41 40
+# define BOOST_PP_DEC_42 41
+# define BOOST_PP_DEC_43 42
+# define BOOST_PP_DEC_44 43
+# define BOOST_PP_DEC_45 44
+# define BOOST_PP_DEC_46 45
+# define BOOST_PP_DEC_47 46
+# define BOOST_PP_DEC_48 47
+# define BOOST_PP_DEC_49 48
+# define BOOST_PP_DEC_50 49
+# define BOOST_PP_DEC_51 50
+# define BOOST_PP_DEC_52 51
+# define BOOST_PP_DEC_53 52
+# define BOOST_PP_DEC_54 53
+# define BOOST_PP_DEC_55 54
+# define BOOST_PP_DEC_56 55
+# define BOOST_PP_DEC_57 56
+# define BOOST_PP_DEC_58 57
+# define BOOST_PP_DEC_59 58
+# define BOOST_PP_DEC_60 59
+# define BOOST_PP_DEC_61 60
+# define BOOST_PP_DEC_62 61
+# define BOOST_PP_DEC_63 62
+# define BOOST_PP_DEC_64 63
+# define BOOST_PP_DEC_65 64
+# define BOOST_PP_DEC_66 65
+# define BOOST_PP_DEC_67 66
+# define BOOST_PP_DEC_68 67
+# define BOOST_PP_DEC_69 68
+# define BOOST_PP_DEC_70 69
+# define BOOST_PP_DEC_71 70
+# define BOOST_PP_DEC_72 71
+# define BOOST_PP_DEC_73 72
+# define BOOST_PP_DEC_74 73
+# define BOOST_PP_DEC_75 74
+# define BOOST_PP_DEC_76 75
+# define BOOST_PP_DEC_77 76
+# define BOOST_PP_DEC_78 77
+# define BOOST_PP_DEC_79 78
+# define BOOST_PP_DEC_80 79
+# define BOOST_PP_DEC_81 80
+# define BOOST_PP_DEC_82 81
+# define BOOST_PP_DEC_83 82
+# define BOOST_PP_DEC_84 83
+# define BOOST_PP_DEC_85 84
+# define BOOST_PP_DEC_86 85
+# define BOOST_PP_DEC_87 86
+# define BOOST_PP_DEC_88 87
+# define BOOST_PP_DEC_89 88
+# define BOOST_PP_DEC_90 89
+# define BOOST_PP_DEC_91 90
+# define BOOST_PP_DEC_92 91
+# define BOOST_PP_DEC_93 92
+# define BOOST_PP_DEC_94 93
+# define BOOST_PP_DEC_95 94
+# define BOOST_PP_DEC_96 95
+# define BOOST_PP_DEC_97 96
+# define BOOST_PP_DEC_98 97
+# define BOOST_PP_DEC_99 98
+# define BOOST_PP_DEC_100 99
+# define BOOST_PP_DEC_101 100
+# define BOOST_PP_DEC_102 101
+# define BOOST_PP_DEC_103 102
+# define BOOST_PP_DEC_104 103
+# define BOOST_PP_DEC_105 104
+# define BOOST_PP_DEC_106 105
+# define BOOST_PP_DEC_107 106
+# define BOOST_PP_DEC_108 107
+# define BOOST_PP_DEC_109 108
+# define BOOST_PP_DEC_110 109
+# define BOOST_PP_DEC_111 110
+# define BOOST_PP_DEC_112 111
+# define BOOST_PP_DEC_113 112
+# define BOOST_PP_DEC_114 113
+# define BOOST_PP_DEC_115 114
+# define BOOST_PP_DEC_116 115
+# define BOOST_PP_DEC_117 116
+# define BOOST_PP_DEC_118 117
+# define BOOST_PP_DEC_119 118
+# define BOOST_PP_DEC_120 119
+# define BOOST_PP_DEC_121 120
+# define BOOST_PP_DEC_122 121
+# define BOOST_PP_DEC_123 122
+# define BOOST_PP_DEC_124 123
+# define BOOST_PP_DEC_125 124
+# define BOOST_PP_DEC_126 125
+# define BOOST_PP_DEC_127 126
+# define BOOST_PP_DEC_128 127
+# define BOOST_PP_DEC_129 128
+# define BOOST_PP_DEC_130 129
+# define BOOST_PP_DEC_131 130
+# define BOOST_PP_DEC_132 131
+# define BOOST_PP_DEC_133 132
+# define BOOST_PP_DEC_134 133
+# define BOOST_PP_DEC_135 134
+# define BOOST_PP_DEC_136 135
+# define BOOST_PP_DEC_137 136
+# define BOOST_PP_DEC_138 137
+# define BOOST_PP_DEC_139 138
+# define BOOST_PP_DEC_140 139
+# define BOOST_PP_DEC_141 140
+# define BOOST_PP_DEC_142 141
+# define BOOST_PP_DEC_143 142
+# define BOOST_PP_DEC_144 143
+# define BOOST_PP_DEC_145 144
+# define BOOST_PP_DEC_146 145
+# define BOOST_PP_DEC_147 146
+# define BOOST_PP_DEC_148 147
+# define BOOST_PP_DEC_149 148
+# define BOOST_PP_DEC_150 149
+# define BOOST_PP_DEC_151 150
+# define BOOST_PP_DEC_152 151
+# define BOOST_PP_DEC_153 152
+# define BOOST_PP_DEC_154 153
+# define BOOST_PP_DEC_155 154
+# define BOOST_PP_DEC_156 155
+# define BOOST_PP_DEC_157 156
+# define BOOST_PP_DEC_158 157
+# define BOOST_PP_DEC_159 158
+# define BOOST_PP_DEC_160 159
+# define BOOST_PP_DEC_161 160
+# define BOOST_PP_DEC_162 161
+# define BOOST_PP_DEC_163 162
+# define BOOST_PP_DEC_164 163
+# define BOOST_PP_DEC_165 164
+# define BOOST_PP_DEC_166 165
+# define BOOST_PP_DEC_167 166
+# define BOOST_PP_DEC_168 167
+# define BOOST_PP_DEC_169 168
+# define BOOST_PP_DEC_170 169
+# define BOOST_PP_DEC_171 170
+# define BOOST_PP_DEC_172 171
+# define BOOST_PP_DEC_173 172
+# define BOOST_PP_DEC_174 173
+# define BOOST_PP_DEC_175 174
+# define BOOST_PP_DEC_176 175
+# define BOOST_PP_DEC_177 176
+# define BOOST_PP_DEC_178 177
+# define BOOST_PP_DEC_179 178
+# define BOOST_PP_DEC_180 179
+# define BOOST_PP_DEC_181 180
+# define BOOST_PP_DEC_182 181
+# define BOOST_PP_DEC_183 182
+# define BOOST_PP_DEC_184 183
+# define BOOST_PP_DEC_185 184
+# define BOOST_PP_DEC_186 185
+# define BOOST_PP_DEC_187 186
+# define BOOST_PP_DEC_188 187
+# define BOOST_PP_DEC_189 188
+# define BOOST_PP_DEC_190 189
+# define BOOST_PP_DEC_191 190
+# define BOOST_PP_DEC_192 191
+# define BOOST_PP_DEC_193 192
+# define BOOST_PP_DEC_194 193
+# define BOOST_PP_DEC_195 194
+# define BOOST_PP_DEC_196 195
+# define BOOST_PP_DEC_197 196
+# define BOOST_PP_DEC_198 197
+# define BOOST_PP_DEC_199 198
+# define BOOST_PP_DEC_200 199
+# define BOOST_PP_DEC_201 200
+# define BOOST_PP_DEC_202 201
+# define BOOST_PP_DEC_203 202
+# define BOOST_PP_DEC_204 203
+# define BOOST_PP_DEC_205 204
+# define BOOST_PP_DEC_206 205
+# define BOOST_PP_DEC_207 206
+# define BOOST_PP_DEC_208 207
+# define BOOST_PP_DEC_209 208
+# define BOOST_PP_DEC_210 209
+# define BOOST_PP_DEC_211 210
+# define BOOST_PP_DEC_212 211
+# define BOOST_PP_DEC_213 212
+# define BOOST_PP_DEC_214 213
+# define BOOST_PP_DEC_215 214
+# define BOOST_PP_DEC_216 215
+# define BOOST_PP_DEC_217 216
+# define BOOST_PP_DEC_218 217
+# define BOOST_PP_DEC_219 218
+# define BOOST_PP_DEC_220 219
+# define BOOST_PP_DEC_221 220
+# define BOOST_PP_DEC_222 221
+# define BOOST_PP_DEC_223 222
+# define BOOST_PP_DEC_224 223
+# define BOOST_PP_DEC_225 224
+# define BOOST_PP_DEC_226 225
+# define BOOST_PP_DEC_227 226
+# define BOOST_PP_DEC_228 227
+# define BOOST_PP_DEC_229 228
+# define BOOST_PP_DEC_230 229
+# define BOOST_PP_DEC_231 230
+# define BOOST_PP_DEC_232 231
+# define BOOST_PP_DEC_233 232
+# define BOOST_PP_DEC_234 233
+# define BOOST_PP_DEC_235 234
+# define BOOST_PP_DEC_236 235
+# define BOOST_PP_DEC_237 236
+# define BOOST_PP_DEC_238 237
+# define BOOST_PP_DEC_239 238
+# define BOOST_PP_DEC_240 239
+# define BOOST_PP_DEC_241 240
+# define BOOST_PP_DEC_242 241
+# define BOOST_PP_DEC_243 242
+# define BOOST_PP_DEC_244 243
+# define BOOST_PP_DEC_245 244
+# define BOOST_PP_DEC_246 245
+# define BOOST_PP_DEC_247 246
+# define BOOST_PP_DEC_248 247
+# define BOOST_PP_DEC_249 248
+# define BOOST_PP_DEC_250 249
+# define BOOST_PP_DEC_251 250
+# define BOOST_PP_DEC_252 251
+# define BOOST_PP_DEC_253 252
+# define BOOST_PP_DEC_254 253
+# define BOOST_PP_DEC_255 254
+# define BOOST_PP_DEC_256 255
+# define BOOST_PP_DEC_257 256
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/arithmetic/detail/div_base.hpp b/vendor/pdalboost/boost/preprocessor/arithmetic/detail/div_base.hpp
new file mode 100644
index 0000000..106632a
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/arithmetic/detail/div_base.hpp
@@ -0,0 +1,61 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARITHMETIC_DETAIL_DIV_BASE_HPP
+# define BOOST_PREPROCESSOR_ARITHMETIC_DETAIL_DIV_BASE_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/comparison/less_equal.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_DIV_BASE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_DIV_BASE(x, y) BOOST_PP_WHILE(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))
+# else
+#    define BOOST_PP_DIV_BASE(x, y) BOOST_PP_DIV_BASE_I(x, y)
+#    define BOOST_PP_DIV_BASE_I(x, y) BOOST_PP_WHILE(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+#    define BOOST_PP_DIV_BASE_P(d, rxy) BOOST_PP_DIV_BASE_P_IM(d, BOOST_PP_TUPLE_REM_3 rxy)
+#    define BOOST_PP_DIV_BASE_P_IM(d, im) BOOST_PP_DIV_BASE_P_I(d, im)
+# else
+#    define BOOST_PP_DIV_BASE_P(d, rxy) BOOST_PP_DIV_BASE_P_I(d, BOOST_PP_TUPLE_ELEM(3, 0, rxy), BOOST_PP_TUPLE_ELEM(3, 1, rxy), BOOST_PP_TUPLE_ELEM(3, 2, rxy))
+# endif
+#
+# define BOOST_PP_DIV_BASE_P_I(d, r, x, y) BOOST_PP_LESS_EQUAL_D(d, y, x)
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+#    define BOOST_PP_DIV_BASE_O(d, rxy) BOOST_PP_DIV_BASE_O_IM(d, BOOST_PP_TUPLE_REM_3 rxy)
+#    define BOOST_PP_DIV_BASE_O_IM(d, im) BOOST_PP_DIV_BASE_O_I(d, im)
+# else
+#    define BOOST_PP_DIV_BASE_O(d, rxy) BOOST_PP_DIV_BASE_O_I(d, BOOST_PP_TUPLE_ELEM(3, 0, rxy), BOOST_PP_TUPLE_ELEM(3, 1, rxy), BOOST_PP_TUPLE_ELEM(3, 2, rxy))
+# endif
+#
+# define BOOST_PP_DIV_BASE_O_I(d, r, x, y) (BOOST_PP_INC(r), BOOST_PP_SUB_D(d, x, y), y)
+#
+# /* BOOST_PP_DIV_BASE_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_DIV_BASE_D(d, x, y) BOOST_PP_WHILE_ ## d(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))
+# else
+#    define BOOST_PP_DIV_BASE_D(d, x, y) BOOST_PP_DIV_BASE_D_I(d, x, y)
+#    define BOOST_PP_DIV_BASE_D_I(d, x, y) BOOST_PP_WHILE_ ## d(BOOST_PP_DIV_BASE_P, BOOST_PP_DIV_BASE_O, (0, x, y))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/arithmetic/inc.hpp b/vendor/pdalboost/boost/preprocessor/arithmetic/inc.hpp
new file mode 100644
index 0000000..1597ab8
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/arithmetic/inc.hpp
@@ -0,0 +1,288 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARITHMETIC_INC_HPP
+# define BOOST_PREPROCESSOR_ARITHMETIC_INC_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_INC */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_INC(x) BOOST_PP_INC_I(x)
+# else
+#    define BOOST_PP_INC(x) BOOST_PP_INC_OO((x))
+#    define BOOST_PP_INC_OO(par) BOOST_PP_INC_I ## par
+# endif
+#
+# define BOOST_PP_INC_I(x) BOOST_PP_INC_ ## x
+#
+# define BOOST_PP_INC_0 1
+# define BOOST_PP_INC_1 2
+# define BOOST_PP_INC_2 3
+# define BOOST_PP_INC_3 4
+# define BOOST_PP_INC_4 5
+# define BOOST_PP_INC_5 6
+# define BOOST_PP_INC_6 7
+# define BOOST_PP_INC_7 8
+# define BOOST_PP_INC_8 9
+# define BOOST_PP_INC_9 10
+# define BOOST_PP_INC_10 11
+# define BOOST_PP_INC_11 12
+# define BOOST_PP_INC_12 13
+# define BOOST_PP_INC_13 14
+# define BOOST_PP_INC_14 15
+# define BOOST_PP_INC_15 16
+# define BOOST_PP_INC_16 17
+# define BOOST_PP_INC_17 18
+# define BOOST_PP_INC_18 19
+# define BOOST_PP_INC_19 20
+# define BOOST_PP_INC_20 21
+# define BOOST_PP_INC_21 22
+# define BOOST_PP_INC_22 23
+# define BOOST_PP_INC_23 24
+# define BOOST_PP_INC_24 25
+# define BOOST_PP_INC_25 26
+# define BOOST_PP_INC_26 27
+# define BOOST_PP_INC_27 28
+# define BOOST_PP_INC_28 29
+# define BOOST_PP_INC_29 30
+# define BOOST_PP_INC_30 31
+# define BOOST_PP_INC_31 32
+# define BOOST_PP_INC_32 33
+# define BOOST_PP_INC_33 34
+# define BOOST_PP_INC_34 35
+# define BOOST_PP_INC_35 36
+# define BOOST_PP_INC_36 37
+# define BOOST_PP_INC_37 38
+# define BOOST_PP_INC_38 39
+# define BOOST_PP_INC_39 40
+# define BOOST_PP_INC_40 41
+# define BOOST_PP_INC_41 42
+# define BOOST_PP_INC_42 43
+# define BOOST_PP_INC_43 44
+# define BOOST_PP_INC_44 45
+# define BOOST_PP_INC_45 46
+# define BOOST_PP_INC_46 47
+# define BOOST_PP_INC_47 48
+# define BOOST_PP_INC_48 49
+# define BOOST_PP_INC_49 50
+# define BOOST_PP_INC_50 51
+# define BOOST_PP_INC_51 52
+# define BOOST_PP_INC_52 53
+# define BOOST_PP_INC_53 54
+# define BOOST_PP_INC_54 55
+# define BOOST_PP_INC_55 56
+# define BOOST_PP_INC_56 57
+# define BOOST_PP_INC_57 58
+# define BOOST_PP_INC_58 59
+# define BOOST_PP_INC_59 60
+# define BOOST_PP_INC_60 61
+# define BOOST_PP_INC_61 62
+# define BOOST_PP_INC_62 63
+# define BOOST_PP_INC_63 64
+# define BOOST_PP_INC_64 65
+# define BOOST_PP_INC_65 66
+# define BOOST_PP_INC_66 67
+# define BOOST_PP_INC_67 68
+# define BOOST_PP_INC_68 69
+# define BOOST_PP_INC_69 70
+# define BOOST_PP_INC_70 71
+# define BOOST_PP_INC_71 72
+# define BOOST_PP_INC_72 73
+# define BOOST_PP_INC_73 74
+# define BOOST_PP_INC_74 75
+# define BOOST_PP_INC_75 76
+# define BOOST_PP_INC_76 77
+# define BOOST_PP_INC_77 78
+# define BOOST_PP_INC_78 79
+# define BOOST_PP_INC_79 80
+# define BOOST_PP_INC_80 81
+# define BOOST_PP_INC_81 82
+# define BOOST_PP_INC_82 83
+# define BOOST_PP_INC_83 84
+# define BOOST_PP_INC_84 85
+# define BOOST_PP_INC_85 86
+# define BOOST_PP_INC_86 87
+# define BOOST_PP_INC_87 88
+# define BOOST_PP_INC_88 89
+# define BOOST_PP_INC_89 90
+# define BOOST_PP_INC_90 91
+# define BOOST_PP_INC_91 92
+# define BOOST_PP_INC_92 93
+# define BOOST_PP_INC_93 94
+# define BOOST_PP_INC_94 95
+# define BOOST_PP_INC_95 96
+# define BOOST_PP_INC_96 97
+# define BOOST_PP_INC_97 98
+# define BOOST_PP_INC_98 99
+# define BOOST_PP_INC_99 100
+# define BOOST_PP_INC_100 101
+# define BOOST_PP_INC_101 102
+# define BOOST_PP_INC_102 103
+# define BOOST_PP_INC_103 104
+# define BOOST_PP_INC_104 105
+# define BOOST_PP_INC_105 106
+# define BOOST_PP_INC_106 107
+# define BOOST_PP_INC_107 108
+# define BOOST_PP_INC_108 109
+# define BOOST_PP_INC_109 110
+# define BOOST_PP_INC_110 111
+# define BOOST_PP_INC_111 112
+# define BOOST_PP_INC_112 113
+# define BOOST_PP_INC_113 114
+# define BOOST_PP_INC_114 115
+# define BOOST_PP_INC_115 116
+# define BOOST_PP_INC_116 117
+# define BOOST_PP_INC_117 118
+# define BOOST_PP_INC_118 119
+# define BOOST_PP_INC_119 120
+# define BOOST_PP_INC_120 121
+# define BOOST_PP_INC_121 122
+# define BOOST_PP_INC_122 123
+# define BOOST_PP_INC_123 124
+# define BOOST_PP_INC_124 125
+# define BOOST_PP_INC_125 126
+# define BOOST_PP_INC_126 127
+# define BOOST_PP_INC_127 128
+# define BOOST_PP_INC_128 129
+# define BOOST_PP_INC_129 130
+# define BOOST_PP_INC_130 131
+# define BOOST_PP_INC_131 132
+# define BOOST_PP_INC_132 133
+# define BOOST_PP_INC_133 134
+# define BOOST_PP_INC_134 135
+# define BOOST_PP_INC_135 136
+# define BOOST_PP_INC_136 137
+# define BOOST_PP_INC_137 138
+# define BOOST_PP_INC_138 139
+# define BOOST_PP_INC_139 140
+# define BOOST_PP_INC_140 141
+# define BOOST_PP_INC_141 142
+# define BOOST_PP_INC_142 143
+# define BOOST_PP_INC_143 144
+# define BOOST_PP_INC_144 145
+# define BOOST_PP_INC_145 146
+# define BOOST_PP_INC_146 147
+# define BOOST_PP_INC_147 148
+# define BOOST_PP_INC_148 149
+# define BOOST_PP_INC_149 150
+# define BOOST_PP_INC_150 151
+# define BOOST_PP_INC_151 152
+# define BOOST_PP_INC_152 153
+# define BOOST_PP_INC_153 154
+# define BOOST_PP_INC_154 155
+# define BOOST_PP_INC_155 156
+# define BOOST_PP_INC_156 157
+# define BOOST_PP_INC_157 158
+# define BOOST_PP_INC_158 159
+# define BOOST_PP_INC_159 160
+# define BOOST_PP_INC_160 161
+# define BOOST_PP_INC_161 162
+# define BOOST_PP_INC_162 163
+# define BOOST_PP_INC_163 164
+# define BOOST_PP_INC_164 165
+# define BOOST_PP_INC_165 166
+# define BOOST_PP_INC_166 167
+# define BOOST_PP_INC_167 168
+# define BOOST_PP_INC_168 169
+# define BOOST_PP_INC_169 170
+# define BOOST_PP_INC_170 171
+# define BOOST_PP_INC_171 172
+# define BOOST_PP_INC_172 173
+# define BOOST_PP_INC_173 174
+# define BOOST_PP_INC_174 175
+# define BOOST_PP_INC_175 176
+# define BOOST_PP_INC_176 177
+# define BOOST_PP_INC_177 178
+# define BOOST_PP_INC_178 179
+# define BOOST_PP_INC_179 180
+# define BOOST_PP_INC_180 181
+# define BOOST_PP_INC_181 182
+# define BOOST_PP_INC_182 183
+# define BOOST_PP_INC_183 184
+# define BOOST_PP_INC_184 185
+# define BOOST_PP_INC_185 186
+# define BOOST_PP_INC_186 187
+# define BOOST_PP_INC_187 188
+# define BOOST_PP_INC_188 189
+# define BOOST_PP_INC_189 190
+# define BOOST_PP_INC_190 191
+# define BOOST_PP_INC_191 192
+# define BOOST_PP_INC_192 193
+# define BOOST_PP_INC_193 194
+# define BOOST_PP_INC_194 195
+# define BOOST_PP_INC_195 196
+# define BOOST_PP_INC_196 197
+# define BOOST_PP_INC_197 198
+# define BOOST_PP_INC_198 199
+# define BOOST_PP_INC_199 200
+# define BOOST_PP_INC_200 201
+# define BOOST_PP_INC_201 202
+# define BOOST_PP_INC_202 203
+# define BOOST_PP_INC_203 204
+# define BOOST_PP_INC_204 205
+# define BOOST_PP_INC_205 206
+# define BOOST_PP_INC_206 207
+# define BOOST_PP_INC_207 208
+# define BOOST_PP_INC_208 209
+# define BOOST_PP_INC_209 210
+# define BOOST_PP_INC_210 211
+# define BOOST_PP_INC_211 212
+# define BOOST_PP_INC_212 213
+# define BOOST_PP_INC_213 214
+# define BOOST_PP_INC_214 215
+# define BOOST_PP_INC_215 216
+# define BOOST_PP_INC_216 217
+# define BOOST_PP_INC_217 218
+# define BOOST_PP_INC_218 219
+# define BOOST_PP_INC_219 220
+# define BOOST_PP_INC_220 221
+# define BOOST_PP_INC_221 222
+# define BOOST_PP_INC_222 223
+# define BOOST_PP_INC_223 224
+# define BOOST_PP_INC_224 225
+# define BOOST_PP_INC_225 226
+# define BOOST_PP_INC_226 227
+# define BOOST_PP_INC_227 228
+# define BOOST_PP_INC_228 229
+# define BOOST_PP_INC_229 230
+# define BOOST_PP_INC_230 231
+# define BOOST_PP_INC_231 232
+# define BOOST_PP_INC_232 233
+# define BOOST_PP_INC_233 234
+# define BOOST_PP_INC_234 235
+# define BOOST_PP_INC_235 236
+# define BOOST_PP_INC_236 237
+# define BOOST_PP_INC_237 238
+# define BOOST_PP_INC_238 239
+# define BOOST_PP_INC_239 240
+# define BOOST_PP_INC_240 241
+# define BOOST_PP_INC_241 242
+# define BOOST_PP_INC_242 243
+# define BOOST_PP_INC_243 244
+# define BOOST_PP_INC_244 245
+# define BOOST_PP_INC_245 246
+# define BOOST_PP_INC_246 247
+# define BOOST_PP_INC_247 248
+# define BOOST_PP_INC_248 249
+# define BOOST_PP_INC_249 250
+# define BOOST_PP_INC_250 251
+# define BOOST_PP_INC_251 252
+# define BOOST_PP_INC_252 253
+# define BOOST_PP_INC_253 254
+# define BOOST_PP_INC_254 255
+# define BOOST_PP_INC_255 256
+# define BOOST_PP_INC_256 256
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/arithmetic/mod.hpp b/vendor/pdalboost/boost/preprocessor/arithmetic/mod.hpp
new file mode 100644
index 0000000..62489d1
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/arithmetic/mod.hpp
@@ -0,0 +1,39 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARITHMETIC_MOD_HPP
+# define BOOST_PREPROCESSOR_ARITHMETIC_MOD_HPP
+#
+# include <boost/preprocessor/arithmetic/detail/div_base.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_MOD */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_MOD(x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE(x, y))
+# else
+#    define BOOST_PP_MOD(x, y) BOOST_PP_MOD_I(x, y)
+#    define BOOST_PP_MOD_I(x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE(x, y))
+# endif
+#
+# /* BOOST_PP_MOD_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_MOD_D(d, x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE_D(d, x, y))
+# else
+#    define BOOST_PP_MOD_D(d, x, y) BOOST_PP_MOD_D_I(d, x, y)
+#    define BOOST_PP_MOD_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE_D(d, x, y))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/arithmetic/sub.hpp b/vendor/pdalboost/boost/preprocessor/arithmetic/sub.hpp
new file mode 100644
index 0000000..5262cda
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/arithmetic/sub.hpp
@@ -0,0 +1,50 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP
+# define BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_SUB */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SUB(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))
+# else
+#    define BOOST_PP_SUB(x, y) BOOST_PP_SUB_I(x, y)
+#    define BOOST_PP_SUB_I(x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))
+# endif
+#
+# define BOOST_PP_SUB_P(d, xy) BOOST_PP_TUPLE_ELEM(2, 1, xy)
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_SUB_O(d, xy) BOOST_PP_SUB_O_I xy
+# else
+#    define BOOST_PP_SUB_O(d, xy) BOOST_PP_SUB_O_I(BOOST_PP_TUPLE_ELEM(2, 0, xy), BOOST_PP_TUPLE_ELEM(2, 1, xy))
+# endif
+#
+# define BOOST_PP_SUB_O_I(x, y) (BOOST_PP_DEC(x), BOOST_PP_DEC(y))
+#
+# /* BOOST_PP_SUB_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SUB_D(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))
+# else
+#    define BOOST_PP_SUB_D(d, x, y) BOOST_PP_SUB_D_I(d, x, y)
+#    define BOOST_PP_SUB_D_I(d, x, y) BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_SUB_P, BOOST_PP_SUB_O, (x, y)))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/array/data.hpp b/vendor/pdalboost/boost/preprocessor/array/data.hpp
new file mode 100644
index 0000000..10c926a
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/array/data.hpp
@@ -0,0 +1,28 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_DATA_HPP
+# define BOOST_PREPROCESSOR_ARRAY_DATA_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_ARRAY_DATA */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ARRAY_DATA(array) BOOST_PP_TUPLE_ELEM(2, 1, array)
+# else
+#    define BOOST_PP_ARRAY_DATA(array) BOOST_PP_ARRAY_DATA_I(array)
+#    define BOOST_PP_ARRAY_DATA_I(array) BOOST_PP_ARRAY_DATA_II array
+#    define BOOST_PP_ARRAY_DATA_II(size, data) data
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/array/elem.hpp b/vendor/pdalboost/boost/preprocessor/array/elem.hpp
new file mode 100644
index 0000000..105ba24
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/array/elem.hpp
@@ -0,0 +1,29 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_ELEM_HPP
+# define BOOST_PREPROCESSOR_ARRAY_ELEM_HPP
+#
+# include <boost/preprocessor/array/data.hpp>
+# include <boost/preprocessor/array/size.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_ARRAY_ELEM */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ARRAY_ELEM(i, array) BOOST_PP_TUPLE_ELEM(BOOST_PP_ARRAY_SIZE(array), i, BOOST_PP_ARRAY_DATA(array))
+# else
+#    define BOOST_PP_ARRAY_ELEM(i, array) BOOST_PP_ARRAY_ELEM_I(i, array)
+#    define BOOST_PP_ARRAY_ELEM_I(i, array) BOOST_PP_TUPLE_ELEM(BOOST_PP_ARRAY_SIZE(array), i, BOOST_PP_ARRAY_DATA(array))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/array/size.hpp b/vendor/pdalboost/boost/preprocessor/array/size.hpp
new file mode 100644
index 0000000..3f370ee
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/array/size.hpp
@@ -0,0 +1,28 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ARRAY_SIZE_HPP
+# define BOOST_PREPROCESSOR_ARRAY_SIZE_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_ARRAY_SIZE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ARRAY_SIZE(array) BOOST_PP_TUPLE_ELEM(2, 0, array)
+# else
+#    define BOOST_PP_ARRAY_SIZE(array) BOOST_PP_ARRAY_SIZE_I(array)
+#    define BOOST_PP_ARRAY_SIZE_I(array) BOOST_PP_ARRAY_SIZE_II array
+#    define BOOST_PP_ARRAY_SIZE_II(size, data) size
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/cat.hpp b/vendor/pdalboost/boost/preprocessor/cat.hpp
new file mode 100644
index 0000000..5e52850
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/cat.hpp
@@ -0,0 +1,35 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CAT_HPP
+# define BOOST_PREPROCESSOR_CAT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_CAT */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_CAT(a, b) BOOST_PP_CAT_I(a, b)
+# else
+#    define BOOST_PP_CAT(a, b) BOOST_PP_CAT_OO((a, b))
+#    define BOOST_PP_CAT_OO(par) BOOST_PP_CAT_I ## par
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#    define BOOST_PP_CAT_I(a, b) a ## b
+# else
+#    define BOOST_PP_CAT_I(a, b) BOOST_PP_CAT_II(~, a ## b)
+#    define BOOST_PP_CAT_II(p, res) res
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/comma_if.hpp b/vendor/pdalboost/boost/preprocessor/comma_if.hpp
new file mode 100644
index 0000000..9ceb079
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/comma_if.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMMA_IF_HPP
+# define BOOST_PREPROCESSOR_COMMA_IF_HPP
+#
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/comparison/equal.hpp b/vendor/pdalboost/boost/preprocessor/comparison/equal.hpp
new file mode 100644
index 0000000..d299efe
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/comparison/equal.hpp
@@ -0,0 +1,34 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMPARISON_EQUAL_HPP
+# define BOOST_PREPROCESSOR_COMPARISON_EQUAL_HPP
+#
+# include <boost/preprocessor/comparison/not_equal.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/logical/compl.hpp>
+#
+# /* BOOST_PP_EQUAL */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_EQUAL(x, y) BOOST_PP_COMPL(BOOST_PP_NOT_EQUAL(x, y))
+# else
+#    define BOOST_PP_EQUAL(x, y) BOOST_PP_EQUAL_I(x, y)
+#    define BOOST_PP_EQUAL_I(x, y) BOOST_PP_COMPL(BOOST_PP_NOT_EQUAL(x, y))
+# endif
+#
+# /* BOOST_PP_EQUAL_D */
+#
+# define BOOST_PP_EQUAL_D(d, x, y) BOOST_PP_EQUAL(x, y)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/comparison/greater.hpp b/vendor/pdalboost/boost/preprocessor/comparison/greater.hpp
new file mode 100644
index 0000000..83d2fcf
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/comparison/greater.hpp
@@ -0,0 +1,38 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMPARISON_GREATER_HPP
+# define BOOST_PREPROCESSOR_COMPARISON_GREATER_HPP
+#
+# include <boost/preprocessor/comparison/less.hpp>
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_GREATER */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_GREATER(x, y) BOOST_PP_LESS(y, x)
+# else
+#    define BOOST_PP_GREATER(x, y) BOOST_PP_GREATER_I(x, y)
+#    define BOOST_PP_GREATER_I(x, y) BOOST_PP_LESS(y, x)
+# endif
+#
+# /* BOOST_PP_GREATER_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_GREATER_D(d, x, y) BOOST_PP_LESS_D(d, y, x)
+# else
+#    define BOOST_PP_GREATER_D(d, x, y) BOOST_PP_GREATER_D_I(d, x, y)
+#    define BOOST_PP_GREATER_D_I(d, x, y) BOOST_PP_LESS_D(d, y, x)
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/comparison/less.hpp b/vendor/pdalboost/boost/preprocessor/comparison/less.hpp
new file mode 100644
index 0000000..d91ea3d
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/comparison/less.hpp
@@ -0,0 +1,46 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_HPP
+# define BOOST_PREPROCESSOR_COMPARISON_LESS_HPP
+#
+# include <boost/preprocessor/comparison/less_equal.hpp>
+# include <boost/preprocessor/comparison/not_equal.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/logical/bitand.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# /* BOOST_PP_LESS */
+#
+# if BOOST_PP_CONFIG_FLAGS() & (BOOST_PP_CONFIG_MWCC() | BOOST_PP_CONFIG_DMC())
+#    define BOOST_PP_LESS(x, y) BOOST_PP_BITAND(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL(x, y))
+# elif ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_LESS(x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL, 0 BOOST_PP_TUPLE_EAT_2)(x, y)
+# else
+#    define BOOST_PP_LESS(x, y) BOOST_PP_LESS_I(x, y)
+#    define BOOST_PP_LESS_I(x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL, 0 BOOST_PP_TUPLE_EAT_2)(x, y)
+# endif
+#
+# /* BOOST_PP_LESS_D */
+#
+# if BOOST_PP_CONFIG_FLAGS() & (BOOST_PP_CONFIG_MWCC() | BOOST_PP_CONFIG_DMC())
+#    define BOOST_PP_LESS_D(d, x, y) BOOST_PP_BITAND(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL_D(d, x, y))
+# elif ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_LESS_D(d, x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL_D, 0 BOOST_PP_TUPLE_EAT_3)(d, x, y)
+# else
+#    define BOOST_PP_LESS_D(d, x, y) BOOST_PP_LESS_D_I(d, x, y)
+#    define BOOST_PP_LESS_D_I(d, x, y) BOOST_PP_IIF(BOOST_PP_NOT_EQUAL(x, y), BOOST_PP_LESS_EQUAL_D, 0 BOOST_PP_TUPLE_EAT_3)(d, x, y)
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/comparison/less_equal.hpp b/vendor/pdalboost/boost/preprocessor/comparison/less_equal.hpp
new file mode 100644
index 0000000..1302d54
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/comparison/less_equal.hpp
@@ -0,0 +1,39 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_EQUAL_HPP
+# define BOOST_PREPROCESSOR_COMPARISON_LESS_EQUAL_HPP
+#
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/logical/not.hpp>
+#
+# /* BOOST_PP_LESS_EQUAL */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_LESS_EQUAL(x, y) BOOST_PP_NOT(BOOST_PP_SUB(x, y))
+# else
+#    define BOOST_PP_LESS_EQUAL(x, y) BOOST_PP_LESS_EQUAL_I(x, y)
+#    define BOOST_PP_LESS_EQUAL_I(x, y) BOOST_PP_NOT(BOOST_PP_SUB(x, y))
+# endif
+#
+# /* BOOST_PP_LESS_EQUAL_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_LESS_EQUAL_D(d, x, y) BOOST_PP_NOT(BOOST_PP_SUB_D(d, x, y))
+# else
+#    define BOOST_PP_LESS_EQUAL_D(d, x, y) BOOST_PP_LESS_EQUAL_D_I(d, x, y)
+#    define BOOST_PP_LESS_EQUAL_D_I(d, x, y) BOOST_PP_NOT(BOOST_PP_SUB_D(d, x, y))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/comparison/not_equal.hpp b/vendor/pdalboost/boost/preprocessor/comparison/not_equal.hpp
new file mode 100644
index 0000000..b4b0eae
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/comparison/not_equal.hpp
@@ -0,0 +1,814 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_COMPARISON_NOT_EQUAL_HPP
+# define BOOST_PREPROCESSOR_COMPARISON_NOT_EQUAL_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+#
+# /* BOOST_PP_NOT_EQUAL */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_NOT_EQUAL(x, y) BOOST_PP_NOT_EQUAL_I(x, y)
+# else
+#    define BOOST_PP_NOT_EQUAL(x, y) BOOST_PP_NOT_EQUAL_OO((x, y))
+#    define BOOST_PP_NOT_EQUAL_OO(par) BOOST_PP_NOT_EQUAL_I ## par
+# endif
+#
+# define BOOST_PP_NOT_EQUAL_I(x, y) BOOST_PP_CAT(BOOST_PP_NOT_EQUAL_CHECK_, BOOST_PP_NOT_EQUAL_ ## x(0, BOOST_PP_NOT_EQUAL_ ## y))
+#
+# /* BOOST_PP_NOT_EQUAL_D */
+#
+# define BOOST_PP_NOT_EQUAL_D(d, x, y) BOOST_PP_NOT_EQUAL(x, y)
+#
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NIL 1
+#
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_0(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_1(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_2(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_3(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_4(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_5(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_6(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_7(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_8(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_9(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_10(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_11(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_12(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_13(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_14(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_15(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_16(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_17(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_18(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_19(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_20(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_21(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_22(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_23(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_24(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_25(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_26(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_27(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_28(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_29(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_30(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_31(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_32(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_33(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_34(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_35(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_36(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_37(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_38(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_39(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_40(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_41(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_42(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_43(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_44(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_45(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_46(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_47(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_48(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_49(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_50(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_51(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_52(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_53(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_54(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_55(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_56(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_57(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_58(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_59(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_60(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_61(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_62(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_63(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_64(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_65(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_66(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_67(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_68(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_69(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_70(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_71(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_72(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_73(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_74(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_75(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_76(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_77(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_78(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_79(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_80(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_81(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_82(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_83(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_84(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_85(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_86(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_87(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_88(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_89(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_90(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_91(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_92(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_93(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_94(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_95(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_96(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_97(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_98(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_99(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_100(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_101(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_102(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_103(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_104(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_105(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_106(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_107(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_108(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_109(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_110(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_111(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_112(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_113(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_114(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_115(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_116(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_117(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_118(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_119(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_120(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_121(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_122(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_123(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_124(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_125(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_126(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_127(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_128(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_129(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_130(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_131(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_132(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_133(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_134(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_135(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_136(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_137(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_138(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_139(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_140(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_141(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_142(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_143(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_144(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_145(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_146(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_147(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_148(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_149(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_150(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_151(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_152(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_153(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_154(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_155(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_156(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_157(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_158(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_159(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_160(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_161(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_162(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_163(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_164(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_165(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_166(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_167(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_168(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_169(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_170(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_171(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_172(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_173(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_174(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_175(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_176(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_177(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_178(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_179(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_180(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_181(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_182(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_183(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_184(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_185(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_186(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_187(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_188(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_189(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_190(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_191(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_192(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_193(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_194(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_195(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_196(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_197(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_198(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_199(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_200(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_201(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_202(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_203(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_204(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_205(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_206(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_207(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_208(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_209(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_210(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_211(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_212(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_213(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_214(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_215(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_216(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_217(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_218(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_219(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_220(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_221(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_222(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_223(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_224(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_225(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_226(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_227(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_228(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_229(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_230(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_231(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_232(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_233(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_234(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_235(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_236(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_237(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_238(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_239(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_240(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_241(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_242(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_243(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_244(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_245(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_246(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_247(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_248(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_249(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_250(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_251(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_252(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_253(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_254(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_255(c, y) 0
+# define BOOST_PP_NOT_EQUAL_CHECK_BOOST_PP_NOT_EQUAL_256(c, y) 0
+#
+#if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+#    define BOOST_PP_NOT_EQUAL_0(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_1(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_2(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_3(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_4(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_5(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_6(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_7(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_8(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_9(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_10(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_11(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_12(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_13(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_14(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_15(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_16(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_17(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_18(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_19(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_20(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_21(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_22(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_23(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_24(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_25(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_26(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_27(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_28(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_29(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_30(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_31(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_32(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_33(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_34(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_35(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_36(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_37(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_38(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_39(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_40(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_41(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_42(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_43(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_44(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_45(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_46(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_47(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_48(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_49(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_50(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_51(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_52(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_53(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_54(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_55(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_56(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_57(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_58(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_59(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_60(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_61(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_62(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_63(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_64(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_65(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_66(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_67(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_68(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_69(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_70(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_71(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_72(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_73(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_74(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_75(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_76(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_77(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_78(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_79(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_80(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_81(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_82(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_83(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_84(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_85(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_86(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_87(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_88(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_89(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_90(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_91(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_92(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_93(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_94(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_95(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_96(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_97(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_98(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_99(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_100(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_101(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_102(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_103(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_104(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_105(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_106(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_107(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_108(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_109(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_110(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_111(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_112(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_113(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_114(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_115(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_116(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_117(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_118(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_119(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_120(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_121(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_122(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_123(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_124(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_125(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_126(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_127(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_128(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_129(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_130(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_131(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_132(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_133(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_134(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_135(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_136(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_137(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_138(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_139(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_140(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_141(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_142(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_143(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_144(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_145(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_146(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_147(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_148(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_149(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_150(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_151(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_152(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_153(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_154(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_155(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_156(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_157(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_158(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_159(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_160(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_161(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_162(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_163(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_164(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_165(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_166(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_167(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_168(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_169(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_170(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_171(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_172(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_173(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_174(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_175(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_176(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_177(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_178(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_179(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_180(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_181(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_182(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_183(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_184(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_185(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_186(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_187(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_188(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_189(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_190(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_191(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_192(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_193(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_194(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_195(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_196(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_197(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_198(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_199(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_200(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_201(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_202(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_203(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_204(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_205(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_206(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_207(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_208(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_209(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_210(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_211(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_212(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_213(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_214(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_215(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_216(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_217(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_218(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_219(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_220(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_221(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_222(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_223(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_224(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_225(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_226(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_227(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_228(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_229(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_230(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_231(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_232(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_233(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_234(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_235(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_236(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_237(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_238(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_239(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_240(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_241(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_242(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_243(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_244(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_245(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_246(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_247(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_248(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_249(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_250(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_251(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_252(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_253(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_254(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_255(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_256(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y(1, BOOST_PP_NIL))
+# else
+#    define BOOST_PP_NOT_EQUAL_0(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_1(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_2(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_3(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_4(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_5(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_6(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_7(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_8(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_9(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_10(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_11(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_12(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_13(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_14(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_15(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_16(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_17(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_18(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_19(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_20(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_21(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_22(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_23(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_24(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_25(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_26(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_27(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_28(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_29(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_30(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_31(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_32(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_33(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_34(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_35(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_36(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_37(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_38(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_39(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_40(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_41(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_42(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_43(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_44(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_45(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_46(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_47(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_48(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_49(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_50(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_51(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_52(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_53(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_54(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_55(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_56(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_57(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_58(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_59(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_60(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_61(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_62(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_63(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_64(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_65(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_66(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_67(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_68(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_69(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_70(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_71(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_72(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_73(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_74(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_75(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_76(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_77(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_78(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_79(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_80(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_81(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_82(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_83(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_84(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_85(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_86(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_87(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_88(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_89(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_90(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_91(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_92(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_93(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_94(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_95(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_96(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_97(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_98(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_99(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_100(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_101(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_102(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_103(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_104(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_105(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_106(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_107(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_108(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_109(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_110(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_111(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_112(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_113(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_114(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_115(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_116(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_117(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_118(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_119(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_120(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_121(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_122(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_123(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_124(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_125(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_126(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_127(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_128(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_129(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_130(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_131(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_132(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_133(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_134(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_135(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_136(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_137(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_138(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_139(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_140(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_141(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_142(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_143(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_144(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_145(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_146(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_147(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_148(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_149(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_150(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_151(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_152(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_153(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_154(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_155(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_156(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_157(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_158(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_159(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_160(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_161(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_162(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_163(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_164(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_165(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_166(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_167(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_168(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_169(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_170(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_171(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_172(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_173(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_174(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_175(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_176(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_177(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_178(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_179(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_180(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_181(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_182(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_183(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_184(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_185(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_186(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_187(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_188(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_189(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_190(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_191(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_192(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_193(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_194(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_195(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_196(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_197(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_198(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_199(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_200(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_201(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_202(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_203(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_204(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_205(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_206(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_207(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_208(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_209(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_210(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_211(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_212(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_213(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_214(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_215(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_216(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_217(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_218(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_219(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_220(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_221(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_222(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_223(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_224(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_225(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_226(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_227(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_228(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_229(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_230(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_231(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_232(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_233(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_234(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_235(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_236(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_237(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_238(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_239(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_240(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_241(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_242(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_243(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_244(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_245(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_246(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_247(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_248(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_249(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_250(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_251(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_252(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_253(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_254(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_255(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+#    define BOOST_PP_NOT_EQUAL_256(c, y) BOOST_PP_IIF(c, BOOST_PP_NIL, y##(1, BOOST_PP_NIL))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/config/config.hpp b/vendor/pdalboost/boost/preprocessor/config/config.hpp
new file mode 100644
index 0000000..835b283
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/config/config.hpp
@@ -0,0 +1,104 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002-2011.                             *
+#  *     (C) Copyright Edward Diener 2011.                                    *
+#  *     Distributed under the Boost Software License, Version 1.0. (See      *
+#  *     accompanying file LICENSE_1_0.txt or copy at                         *
+#  *     http://www.boost.org/LICENSE_1_0.txt)                                *
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONFIG_CONFIG_HPP
+# define BOOST_PREPROCESSOR_CONFIG_CONFIG_HPP
+#
+# /* BOOST_PP_CONFIG_FLAGS */
+#
+# define BOOST_PP_CONFIG_STRICT() 0x0001
+# define BOOST_PP_CONFIG_IDEAL() 0x0002
+#
+# define BOOST_PP_CONFIG_MSVC() 0x0004
+# define BOOST_PP_CONFIG_MWCC() 0x0008
+# define BOOST_PP_CONFIG_BCC() 0x0010
+# define BOOST_PP_CONFIG_EDG() 0x0020
+# define BOOST_PP_CONFIG_DMC() 0x0040
+#
+# ifndef BOOST_PP_CONFIG_FLAGS
+#    if defined(__GCCXML__)
+#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())
+#    elif defined(__WAVE__)
+#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())
+#    elif defined(__MWERKS__) && __MWERKS__ >= 0x3200
+#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())
+#    elif defined(__EDG__) || defined(__EDG_VERSION__)
+#        if defined(_MSC_VER) && (defined(__INTELLISENSE__) || __EDG_VERSION__ >= 308)
+#            define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MSVC())
+#        else
+#            define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_EDG() | BOOST_PP_CONFIG_STRICT())
+#        endif
+#    elif defined(__MWERKS__)
+#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MWCC())
+#    elif defined(__DMC__)
+#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_DMC())
+#    elif defined(__BORLANDC__) && __BORLANDC__ >= 0x581
+#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())
+#    elif defined(__BORLANDC__) || defined(__IBMC__) || defined(__IBMCPP__) || defined(__SUNPRO_CC)
+#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_BCC())
+#    elif defined(_MSC_VER) && !defined(__clang__)
+#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MSVC())
+#    else
+#        define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())
+#    endif
+# endif
+#
+# /* BOOST_PP_CONFIG_EXTENDED_LINE_INFO */
+#
+# ifndef BOOST_PP_CONFIG_EXTENDED_LINE_INFO
+#    define BOOST_PP_CONFIG_EXTENDED_LINE_INFO 0
+# endif
+#
+# /* BOOST_PP_CONFIG_ERRORS */
+#
+# ifndef BOOST_PP_CONFIG_ERRORS
+#    ifdef NDEBUG
+#        define BOOST_PP_CONFIG_ERRORS 0
+#    else
+#        define BOOST_PP_CONFIG_ERRORS 1
+#    endif
+# endif
+#
+# /* BOOST_PP_VARIADICS */
+#
+# define BOOST_PP_VARIADICS_MSVC 0
+# if !defined BOOST_PP_VARIADICS
+#    /* variadic support explicitly disabled for all untested compilers */
+#    if defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || ( defined __SUNPRO_CC && __SUNPRO_CC < 0x5130 ) || defined __HP_aCC && !defined __EDG__ || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI
+#        define BOOST_PP_VARIADICS 0
+#    /* VC++ (C/C++) */
+#    elif defined _MSC_VER && _MSC_VER >= 1400 && (!defined __EDG__ || defined(__INTELLISENSE__)) && !defined __clang__
+#        define BOOST_PP_VARIADICS 1
+#        undef BOOST_PP_VARIADICS_MSVC
+#        define BOOST_PP_VARIADICS_MSVC 1
+#    /* Wave (C/C++), GCC (C++) */
+#    elif defined __WAVE__ && __WAVE_HAS_VARIADICS__ || defined __GNUC__ && defined __GXX_EXPERIMENTAL_CXX0X__ && __GXX_EXPERIMENTAL_CXX0X__
+#        define BOOST_PP_VARIADICS 1
+#    /* EDG-based (C/C++), GCC (C), and unknown (C/C++) */
+#    elif !defined __cplusplus && __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L
+#        define BOOST_PP_VARIADICS 1
+#    else
+#        define BOOST_PP_VARIADICS 0
+#    endif
+# elif !BOOST_PP_VARIADICS + 1 < 2
+#    undef BOOST_PP_VARIADICS
+#    define BOOST_PP_VARIADICS 1
+#    if defined _MSC_VER && _MSC_VER >= 1400 && (defined(__INTELLISENSE__) || !(defined __EDG__ || defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __clang__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI))
+#        undef BOOST_PP_VARIADICS_MSVC
+#        define BOOST_PP_VARIADICS_MSVC 1
+#    endif
+# else
+#    undef BOOST_PP_VARIADICS
+#    define BOOST_PP_VARIADICS 0
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/control/deduce_d.hpp b/vendor/pdalboost/boost/preprocessor/control/deduce_d.hpp
new file mode 100644
index 0000000..a0276b0
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/control/deduce_d.hpp
@@ -0,0 +1,22 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_DEDUCE_D_HPP
+# define BOOST_PREPROCESSOR_CONTROL_DEDUCE_D_HPP
+#
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+#
+# /* BOOST_PP_DEDUCE_D */
+#
+# define BOOST_PP_DEDUCE_D() BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/control/detail/dmc/while.hpp b/vendor/pdalboost/boost/preprocessor/control/detail/dmc/while.hpp
new file mode 100644
index 0000000..95c3135
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/control/detail/dmc/while.hpp
@@ -0,0 +1,536 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP
+# define BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP
+#
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_WHILE_1_C(BOOST_PP_BOOL(p##(2, s)), p, o, s)
+# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_WHILE_2_C(BOOST_PP_BOOL(p##(3, s)), p, o, s)
+# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_WHILE_3_C(BOOST_PP_BOOL(p##(4, s)), p, o, s)
+# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_WHILE_4_C(BOOST_PP_BOOL(p##(5, s)), p, o, s)
+# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_WHILE_5_C(BOOST_PP_BOOL(p##(6, s)), p, o, s)
+# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_WHILE_6_C(BOOST_PP_BOOL(p##(7, s)), p, o, s)
+# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_WHILE_7_C(BOOST_PP_BOOL(p##(8, s)), p, o, s)
+# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_WHILE_8_C(BOOST_PP_BOOL(p##(9, s)), p, o, s)
+# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_WHILE_9_C(BOOST_PP_BOOL(p##(10, s)), p, o, s)
+# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_WHILE_10_C(BOOST_PP_BOOL(p##(11, s)), p, o, s)
+# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_WHILE_11_C(BOOST_PP_BOOL(p##(12, s)), p, o, s)
+# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_WHILE_12_C(BOOST_PP_BOOL(p##(13, s)), p, o, s)
+# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_WHILE_13_C(BOOST_PP_BOOL(p##(14, s)), p, o, s)
+# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_WHILE_14_C(BOOST_PP_BOOL(p##(15, s)), p, o, s)
+# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_WHILE_15_C(BOOST_PP_BOOL(p##(16, s)), p, o, s)
+# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_WHILE_16_C(BOOST_PP_BOOL(p##(17, s)), p, o, s)
+# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_WHILE_17_C(BOOST_PP_BOOL(p##(18, s)), p, o, s)
+# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_WHILE_18_C(BOOST_PP_BOOL(p##(19, s)), p, o, s)
+# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_WHILE_19_C(BOOST_PP_BOOL(p##(20, s)), p, o, s)
+# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_WHILE_20_C(BOOST_PP_BOOL(p##(21, s)), p, o, s)
+# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_WHILE_21_C(BOOST_PP_BOOL(p##(22, s)), p, o, s)
+# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_WHILE_22_C(BOOST_PP_BOOL(p##(23, s)), p, o, s)
+# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_WHILE_23_C(BOOST_PP_BOOL(p##(24, s)), p, o, s)
+# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_WHILE_24_C(BOOST_PP_BOOL(p##(25, s)), p, o, s)
+# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_WHILE_25_C(BOOST_PP_BOOL(p##(26, s)), p, o, s)
+# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_WHILE_26_C(BOOST_PP_BOOL(p##(27, s)), p, o, s)
+# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_WHILE_27_C(BOOST_PP_BOOL(p##(28, s)), p, o, s)
+# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_WHILE_28_C(BOOST_PP_BOOL(p##(29, s)), p, o, s)
+# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_WHILE_29_C(BOOST_PP_BOOL(p##(30, s)), p, o, s)
+# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_WHILE_30_C(BOOST_PP_BOOL(p##(31, s)), p, o, s)
+# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_WHILE_31_C(BOOST_PP_BOOL(p##(32, s)), p, o, s)
+# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_WHILE_32_C(BOOST_PP_BOOL(p##(33, s)), p, o, s)
+# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_WHILE_33_C(BOOST_PP_BOOL(p##(34, s)), p, o, s)
+# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_WHILE_34_C(BOOST_PP_BOOL(p##(35, s)), p, o, s)
+# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_WHILE_35_C(BOOST_PP_BOOL(p##(36, s)), p, o, s)
+# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_WHILE_36_C(BOOST_PP_BOOL(p##(37, s)), p, o, s)
+# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_WHILE_37_C(BOOST_PP_BOOL(p##(38, s)), p, o, s)
+# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_WHILE_38_C(BOOST_PP_BOOL(p##(39, s)), p, o, s)
+# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_WHILE_39_C(BOOST_PP_BOOL(p##(40, s)), p, o, s)
+# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_WHILE_40_C(BOOST_PP_BOOL(p##(41, s)), p, o, s)
+# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_WHILE_41_C(BOOST_PP_BOOL(p##(42, s)), p, o, s)
+# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_WHILE_42_C(BOOST_PP_BOOL(p##(43, s)), p, o, s)
+# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_WHILE_43_C(BOOST_PP_BOOL(p##(44, s)), p, o, s)
+# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_WHILE_44_C(BOOST_PP_BOOL(p##(45, s)), p, o, s)
+# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_WHILE_45_C(BOOST_PP_BOOL(p##(46, s)), p, o, s)
+# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_WHILE_46_C(BOOST_PP_BOOL(p##(47, s)), p, o, s)
+# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_WHILE_47_C(BOOST_PP_BOOL(p##(48, s)), p, o, s)
+# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_WHILE_48_C(BOOST_PP_BOOL(p##(49, s)), p, o, s)
+# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_WHILE_49_C(BOOST_PP_BOOL(p##(50, s)), p, o, s)
+# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_WHILE_50_C(BOOST_PP_BOOL(p##(51, s)), p, o, s)
+# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_WHILE_51_C(BOOST_PP_BOOL(p##(52, s)), p, o, s)
+# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_WHILE_52_C(BOOST_PP_BOOL(p##(53, s)), p, o, s)
+# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_WHILE_53_C(BOOST_PP_BOOL(p##(54, s)), p, o, s)
+# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_WHILE_54_C(BOOST_PP_BOOL(p##(55, s)), p, o, s)
+# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_WHILE_55_C(BOOST_PP_BOOL(p##(56, s)), p, o, s)
+# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_WHILE_56_C(BOOST_PP_BOOL(p##(57, s)), p, o, s)
+# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_WHILE_57_C(BOOST_PP_BOOL(p##(58, s)), p, o, s)
+# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_WHILE_58_C(BOOST_PP_BOOL(p##(59, s)), p, o, s)
+# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_WHILE_59_C(BOOST_PP_BOOL(p##(60, s)), p, o, s)
+# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_WHILE_60_C(BOOST_PP_BOOL(p##(61, s)), p, o, s)
+# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_WHILE_61_C(BOOST_PP_BOOL(p##(62, s)), p, o, s)
+# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_WHILE_62_C(BOOST_PP_BOOL(p##(63, s)), p, o, s)
+# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_WHILE_63_C(BOOST_PP_BOOL(p##(64, s)), p, o, s)
+# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_WHILE_64_C(BOOST_PP_BOOL(p##(65, s)), p, o, s)
+# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_WHILE_65_C(BOOST_PP_BOOL(p##(66, s)), p, o, s)
+# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_WHILE_66_C(BOOST_PP_BOOL(p##(67, s)), p, o, s)
+# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_WHILE_67_C(BOOST_PP_BOOL(p##(68, s)), p, o, s)
+# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_WHILE_68_C(BOOST_PP_BOOL(p##(69, s)), p, o, s)
+# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_WHILE_69_C(BOOST_PP_BOOL(p##(70, s)), p, o, s)
+# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_WHILE_70_C(BOOST_PP_BOOL(p##(71, s)), p, o, s)
+# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_WHILE_71_C(BOOST_PP_BOOL(p##(72, s)), p, o, s)
+# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_WHILE_72_C(BOOST_PP_BOOL(p##(73, s)), p, o, s)
+# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_WHILE_73_C(BOOST_PP_BOOL(p##(74, s)), p, o, s)
+# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_WHILE_74_C(BOOST_PP_BOOL(p##(75, s)), p, o, s)
+# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_WHILE_75_C(BOOST_PP_BOOL(p##(76, s)), p, o, s)
+# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_WHILE_76_C(BOOST_PP_BOOL(p##(77, s)), p, o, s)
+# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_WHILE_77_C(BOOST_PP_BOOL(p##(78, s)), p, o, s)
+# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_WHILE_78_C(BOOST_PP_BOOL(p##(79, s)), p, o, s)
+# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_WHILE_79_C(BOOST_PP_BOOL(p##(80, s)), p, o, s)
+# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_WHILE_80_C(BOOST_PP_BOOL(p##(81, s)), p, o, s)
+# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_WHILE_81_C(BOOST_PP_BOOL(p##(82, s)), p, o, s)
+# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_WHILE_82_C(BOOST_PP_BOOL(p##(83, s)), p, o, s)
+# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_WHILE_83_C(BOOST_PP_BOOL(p##(84, s)), p, o, s)
+# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_WHILE_84_C(BOOST_PP_BOOL(p##(85, s)), p, o, s)
+# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_WHILE_85_C(BOOST_PP_BOOL(p##(86, s)), p, o, s)
+# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_WHILE_86_C(BOOST_PP_BOOL(p##(87, s)), p, o, s)
+# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_WHILE_87_C(BOOST_PP_BOOL(p##(88, s)), p, o, s)
+# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_WHILE_88_C(BOOST_PP_BOOL(p##(89, s)), p, o, s)
+# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_WHILE_89_C(BOOST_PP_BOOL(p##(90, s)), p, o, s)
+# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_WHILE_90_C(BOOST_PP_BOOL(p##(91, s)), p, o, s)
+# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_WHILE_91_C(BOOST_PP_BOOL(p##(92, s)), p, o, s)
+# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_WHILE_92_C(BOOST_PP_BOOL(p##(93, s)), p, o, s)
+# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_WHILE_93_C(BOOST_PP_BOOL(p##(94, s)), p, o, s)
+# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_WHILE_94_C(BOOST_PP_BOOL(p##(95, s)), p, o, s)
+# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_WHILE_95_C(BOOST_PP_BOOL(p##(96, s)), p, o, s)
+# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_WHILE_96_C(BOOST_PP_BOOL(p##(97, s)), p, o, s)
+# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_WHILE_97_C(BOOST_PP_BOOL(p##(98, s)), p, o, s)
+# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_WHILE_98_C(BOOST_PP_BOOL(p##(99, s)), p, o, s)
+# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_WHILE_99_C(BOOST_PP_BOOL(p##(100, s)), p, o, s)
+# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_WHILE_100_C(BOOST_PP_BOOL(p##(101, s)), p, o, s)
+# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_WHILE_101_C(BOOST_PP_BOOL(p##(102, s)), p, o, s)
+# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_WHILE_102_C(BOOST_PP_BOOL(p##(103, s)), p, o, s)
+# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_WHILE_103_C(BOOST_PP_BOOL(p##(104, s)), p, o, s)
+# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_WHILE_104_C(BOOST_PP_BOOL(p##(105, s)), p, o, s)
+# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_WHILE_105_C(BOOST_PP_BOOL(p##(106, s)), p, o, s)
+# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_WHILE_106_C(BOOST_PP_BOOL(p##(107, s)), p, o, s)
+# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_WHILE_107_C(BOOST_PP_BOOL(p##(108, s)), p, o, s)
+# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_WHILE_108_C(BOOST_PP_BOOL(p##(109, s)), p, o, s)
+# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_WHILE_109_C(BOOST_PP_BOOL(p##(110, s)), p, o, s)
+# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_WHILE_110_C(BOOST_PP_BOOL(p##(111, s)), p, o, s)
+# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_WHILE_111_C(BOOST_PP_BOOL(p##(112, s)), p, o, s)
+# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_WHILE_112_C(BOOST_PP_BOOL(p##(113, s)), p, o, s)
+# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_WHILE_113_C(BOOST_PP_BOOL(p##(114, s)), p, o, s)
+# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_WHILE_114_C(BOOST_PP_BOOL(p##(115, s)), p, o, s)
+# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_WHILE_115_C(BOOST_PP_BOOL(p##(116, s)), p, o, s)
+# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_WHILE_116_C(BOOST_PP_BOOL(p##(117, s)), p, o, s)
+# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_WHILE_117_C(BOOST_PP_BOOL(p##(118, s)), p, o, s)
+# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_WHILE_118_C(BOOST_PP_BOOL(p##(119, s)), p, o, s)
+# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_WHILE_119_C(BOOST_PP_BOOL(p##(120, s)), p, o, s)
+# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_WHILE_120_C(BOOST_PP_BOOL(p##(121, s)), p, o, s)
+# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_WHILE_121_C(BOOST_PP_BOOL(p##(122, s)), p, o, s)
+# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_WHILE_122_C(BOOST_PP_BOOL(p##(123, s)), p, o, s)
+# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_WHILE_123_C(BOOST_PP_BOOL(p##(124, s)), p, o, s)
+# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_WHILE_124_C(BOOST_PP_BOOL(p##(125, s)), p, o, s)
+# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_WHILE_125_C(BOOST_PP_BOOL(p##(126, s)), p, o, s)
+# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_WHILE_126_C(BOOST_PP_BOOL(p##(127, s)), p, o, s)
+# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_WHILE_127_C(BOOST_PP_BOOL(p##(128, s)), p, o, s)
+# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_WHILE_128_C(BOOST_PP_BOOL(p##(129, s)), p, o, s)
+# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_WHILE_129_C(BOOST_PP_BOOL(p##(130, s)), p, o, s)
+# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_WHILE_130_C(BOOST_PP_BOOL(p##(131, s)), p, o, s)
+# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_WHILE_131_C(BOOST_PP_BOOL(p##(132, s)), p, o, s)
+# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_WHILE_132_C(BOOST_PP_BOOL(p##(133, s)), p, o, s)
+# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_WHILE_133_C(BOOST_PP_BOOL(p##(134, s)), p, o, s)
+# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_WHILE_134_C(BOOST_PP_BOOL(p##(135, s)), p, o, s)
+# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_WHILE_135_C(BOOST_PP_BOOL(p##(136, s)), p, o, s)
+# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_WHILE_136_C(BOOST_PP_BOOL(p##(137, s)), p, o, s)
+# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_WHILE_137_C(BOOST_PP_BOOL(p##(138, s)), p, o, s)
+# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_WHILE_138_C(BOOST_PP_BOOL(p##(139, s)), p, o, s)
+# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_WHILE_139_C(BOOST_PP_BOOL(p##(140, s)), p, o, s)
+# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_WHILE_140_C(BOOST_PP_BOOL(p##(141, s)), p, o, s)
+# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_WHILE_141_C(BOOST_PP_BOOL(p##(142, s)), p, o, s)
+# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_WHILE_142_C(BOOST_PP_BOOL(p##(143, s)), p, o, s)
+# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_WHILE_143_C(BOOST_PP_BOOL(p##(144, s)), p, o, s)
+# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_WHILE_144_C(BOOST_PP_BOOL(p##(145, s)), p, o, s)
+# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_WHILE_145_C(BOOST_PP_BOOL(p##(146, s)), p, o, s)
+# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_WHILE_146_C(BOOST_PP_BOOL(p##(147, s)), p, o, s)
+# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_WHILE_147_C(BOOST_PP_BOOL(p##(148, s)), p, o, s)
+# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_WHILE_148_C(BOOST_PP_BOOL(p##(149, s)), p, o, s)
+# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_WHILE_149_C(BOOST_PP_BOOL(p##(150, s)), p, o, s)
+# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_WHILE_150_C(BOOST_PP_BOOL(p##(151, s)), p, o, s)
+# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_WHILE_151_C(BOOST_PP_BOOL(p##(152, s)), p, o, s)
+# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_WHILE_152_C(BOOST_PP_BOOL(p##(153, s)), p, o, s)
+# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_WHILE_153_C(BOOST_PP_BOOL(p##(154, s)), p, o, s)
+# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_WHILE_154_C(BOOST_PP_BOOL(p##(155, s)), p, o, s)
+# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_WHILE_155_C(BOOST_PP_BOOL(p##(156, s)), p, o, s)
+# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_WHILE_156_C(BOOST_PP_BOOL(p##(157, s)), p, o, s)
+# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_WHILE_157_C(BOOST_PP_BOOL(p##(158, s)), p, o, s)
+# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_WHILE_158_C(BOOST_PP_BOOL(p##(159, s)), p, o, s)
+# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_WHILE_159_C(BOOST_PP_BOOL(p##(160, s)), p, o, s)
+# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_WHILE_160_C(BOOST_PP_BOOL(p##(161, s)), p, o, s)
+# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_WHILE_161_C(BOOST_PP_BOOL(p##(162, s)), p, o, s)
+# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_WHILE_162_C(BOOST_PP_BOOL(p##(163, s)), p, o, s)
+# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_WHILE_163_C(BOOST_PP_BOOL(p##(164, s)), p, o, s)
+# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_WHILE_164_C(BOOST_PP_BOOL(p##(165, s)), p, o, s)
+# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_WHILE_165_C(BOOST_PP_BOOL(p##(166, s)), p, o, s)
+# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_WHILE_166_C(BOOST_PP_BOOL(p##(167, s)), p, o, s)
+# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_WHILE_167_C(BOOST_PP_BOOL(p##(168, s)), p, o, s)
+# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_WHILE_168_C(BOOST_PP_BOOL(p##(169, s)), p, o, s)
+# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_WHILE_169_C(BOOST_PP_BOOL(p##(170, s)), p, o, s)
+# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_WHILE_170_C(BOOST_PP_BOOL(p##(171, s)), p, o, s)
+# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_WHILE_171_C(BOOST_PP_BOOL(p##(172, s)), p, o, s)
+# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_WHILE_172_C(BOOST_PP_BOOL(p##(173, s)), p, o, s)
+# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_WHILE_173_C(BOOST_PP_BOOL(p##(174, s)), p, o, s)
+# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_WHILE_174_C(BOOST_PP_BOOL(p##(175, s)), p, o, s)
+# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_WHILE_175_C(BOOST_PP_BOOL(p##(176, s)), p, o, s)
+# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_WHILE_176_C(BOOST_PP_BOOL(p##(177, s)), p, o, s)
+# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_WHILE_177_C(BOOST_PP_BOOL(p##(178, s)), p, o, s)
+# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_WHILE_178_C(BOOST_PP_BOOL(p##(179, s)), p, o, s)
+# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_WHILE_179_C(BOOST_PP_BOOL(p##(180, s)), p, o, s)
+# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_WHILE_180_C(BOOST_PP_BOOL(p##(181, s)), p, o, s)
+# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_WHILE_181_C(BOOST_PP_BOOL(p##(182, s)), p, o, s)
+# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_WHILE_182_C(BOOST_PP_BOOL(p##(183, s)), p, o, s)
+# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_WHILE_183_C(BOOST_PP_BOOL(p##(184, s)), p, o, s)
+# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_WHILE_184_C(BOOST_PP_BOOL(p##(185, s)), p, o, s)
+# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_WHILE_185_C(BOOST_PP_BOOL(p##(186, s)), p, o, s)
+# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_WHILE_186_C(BOOST_PP_BOOL(p##(187, s)), p, o, s)
+# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_WHILE_187_C(BOOST_PP_BOOL(p##(188, s)), p, o, s)
+# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_WHILE_188_C(BOOST_PP_BOOL(p##(189, s)), p, o, s)
+# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_WHILE_189_C(BOOST_PP_BOOL(p##(190, s)), p, o, s)
+# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_WHILE_190_C(BOOST_PP_BOOL(p##(191, s)), p, o, s)
+# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_WHILE_191_C(BOOST_PP_BOOL(p##(192, s)), p, o, s)
+# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_WHILE_192_C(BOOST_PP_BOOL(p##(193, s)), p, o, s)
+# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_WHILE_193_C(BOOST_PP_BOOL(p##(194, s)), p, o, s)
+# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_WHILE_194_C(BOOST_PP_BOOL(p##(195, s)), p, o, s)
+# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_WHILE_195_C(BOOST_PP_BOOL(p##(196, s)), p, o, s)
+# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_WHILE_196_C(BOOST_PP_BOOL(p##(197, s)), p, o, s)
+# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_WHILE_197_C(BOOST_PP_BOOL(p##(198, s)), p, o, s)
+# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_WHILE_198_C(BOOST_PP_BOOL(p##(199, s)), p, o, s)
+# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_WHILE_199_C(BOOST_PP_BOOL(p##(200, s)), p, o, s)
+# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_WHILE_200_C(BOOST_PP_BOOL(p##(201, s)), p, o, s)
+# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_WHILE_201_C(BOOST_PP_BOOL(p##(202, s)), p, o, s)
+# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_WHILE_202_C(BOOST_PP_BOOL(p##(203, s)), p, o, s)
+# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_WHILE_203_C(BOOST_PP_BOOL(p##(204, s)), p, o, s)
+# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_WHILE_204_C(BOOST_PP_BOOL(p##(205, s)), p, o, s)
+# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_WHILE_205_C(BOOST_PP_BOOL(p##(206, s)), p, o, s)
+# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_WHILE_206_C(BOOST_PP_BOOL(p##(207, s)), p, o, s)
+# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_WHILE_207_C(BOOST_PP_BOOL(p##(208, s)), p, o, s)
+# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_WHILE_208_C(BOOST_PP_BOOL(p##(209, s)), p, o, s)
+# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_WHILE_209_C(BOOST_PP_BOOL(p##(210, s)), p, o, s)
+# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_WHILE_210_C(BOOST_PP_BOOL(p##(211, s)), p, o, s)
+# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_WHILE_211_C(BOOST_PP_BOOL(p##(212, s)), p, o, s)
+# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_WHILE_212_C(BOOST_PP_BOOL(p##(213, s)), p, o, s)
+# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_WHILE_213_C(BOOST_PP_BOOL(p##(214, s)), p, o, s)
+# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_WHILE_214_C(BOOST_PP_BOOL(p##(215, s)), p, o, s)
+# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_WHILE_215_C(BOOST_PP_BOOL(p##(216, s)), p, o, s)
+# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_WHILE_216_C(BOOST_PP_BOOL(p##(217, s)), p, o, s)
+# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_WHILE_217_C(BOOST_PP_BOOL(p##(218, s)), p, o, s)
+# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_WHILE_218_C(BOOST_PP_BOOL(p##(219, s)), p, o, s)
+# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_WHILE_219_C(BOOST_PP_BOOL(p##(220, s)), p, o, s)
+# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_WHILE_220_C(BOOST_PP_BOOL(p##(221, s)), p, o, s)
+# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_WHILE_221_C(BOOST_PP_BOOL(p##(222, s)), p, o, s)
+# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_WHILE_222_C(BOOST_PP_BOOL(p##(223, s)), p, o, s)
+# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_WHILE_223_C(BOOST_PP_BOOL(p##(224, s)), p, o, s)
+# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_WHILE_224_C(BOOST_PP_BOOL(p##(225, s)), p, o, s)
+# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_WHILE_225_C(BOOST_PP_BOOL(p##(226, s)), p, o, s)
+# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_WHILE_226_C(BOOST_PP_BOOL(p##(227, s)), p, o, s)
+# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_WHILE_227_C(BOOST_PP_BOOL(p##(228, s)), p, o, s)
+# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_WHILE_228_C(BOOST_PP_BOOL(p##(229, s)), p, o, s)
+# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_WHILE_229_C(BOOST_PP_BOOL(p##(230, s)), p, o, s)
+# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_WHILE_230_C(BOOST_PP_BOOL(p##(231, s)), p, o, s)
+# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_WHILE_231_C(BOOST_PP_BOOL(p##(232, s)), p, o, s)
+# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_WHILE_232_C(BOOST_PP_BOOL(p##(233, s)), p, o, s)
+# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_WHILE_233_C(BOOST_PP_BOOL(p##(234, s)), p, o, s)
+# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_WHILE_234_C(BOOST_PP_BOOL(p##(235, s)), p, o, s)
+# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_WHILE_235_C(BOOST_PP_BOOL(p##(236, s)), p, o, s)
+# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_WHILE_236_C(BOOST_PP_BOOL(p##(237, s)), p, o, s)
+# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_WHILE_237_C(BOOST_PP_BOOL(p##(238, s)), p, o, s)
+# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_WHILE_238_C(BOOST_PP_BOOL(p##(239, s)), p, o, s)
+# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_WHILE_239_C(BOOST_PP_BOOL(p##(240, s)), p, o, s)
+# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_WHILE_240_C(BOOST_PP_BOOL(p##(241, s)), p, o, s)
+# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_WHILE_241_C(BOOST_PP_BOOL(p##(242, s)), p, o, s)
+# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_WHILE_242_C(BOOST_PP_BOOL(p##(243, s)), p, o, s)
+# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_WHILE_243_C(BOOST_PP_BOOL(p##(244, s)), p, o, s)
+# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_WHILE_244_C(BOOST_PP_BOOL(p##(245, s)), p, o, s)
+# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_WHILE_245_C(BOOST_PP_BOOL(p##(246, s)), p, o, s)
+# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_WHILE_246_C(BOOST_PP_BOOL(p##(247, s)), p, o, s)
+# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_WHILE_247_C(BOOST_PP_BOOL(p##(248, s)), p, o, s)
+# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_WHILE_248_C(BOOST_PP_BOOL(p##(249, s)), p, o, s)
+# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_WHILE_249_C(BOOST_PP_BOOL(p##(250, s)), p, o, s)
+# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_WHILE_250_C(BOOST_PP_BOOL(p##(251, s)), p, o, s)
+# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_WHILE_251_C(BOOST_PP_BOOL(p##(252, s)), p, o, s)
+# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_WHILE_252_C(BOOST_PP_BOOL(p##(253, s)), p, o, s)
+# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_WHILE_253_C(BOOST_PP_BOOL(p##(254, s)), p, o, s)
+# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_WHILE_254_C(BOOST_PP_BOOL(p##(255, s)), p, o, s)
+# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_WHILE_255_C(BOOST_PP_BOOL(p##(256, s)), p, o, s)
+# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_WHILE_256_C(BOOST_PP_BOOL(p##(257, s)), p, o, s)
+#
+# define BOOST_PP_WHILE_1_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_2, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(2, s))
+# define BOOST_PP_WHILE_2_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_3, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(3, s))
+# define BOOST_PP_WHILE_3_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_4, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(4, s))
+# define BOOST_PP_WHILE_4_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_5, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(5, s))
+# define BOOST_PP_WHILE_5_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_6, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(6, s))
+# define BOOST_PP_WHILE_6_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_7, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(7, s))
+# define BOOST_PP_WHILE_7_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_8, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(8, s))
+# define BOOST_PP_WHILE_8_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_9, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(9, s))
+# define BOOST_PP_WHILE_9_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_10, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(10, s))
+# define BOOST_PP_WHILE_10_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_11, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(11, s))
+# define BOOST_PP_WHILE_11_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_12, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(12, s))
+# define BOOST_PP_WHILE_12_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_13, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(13, s))
+# define BOOST_PP_WHILE_13_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_14, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(14, s))
+# define BOOST_PP_WHILE_14_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_15, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(15, s))
+# define BOOST_PP_WHILE_15_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_16, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(16, s))
+# define BOOST_PP_WHILE_16_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_17, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(17, s))
+# define BOOST_PP_WHILE_17_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_18, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(18, s))
+# define BOOST_PP_WHILE_18_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_19, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(19, s))
+# define BOOST_PP_WHILE_19_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_20, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(20, s))
+# define BOOST_PP_WHILE_20_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_21, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(21, s))
+# define BOOST_PP_WHILE_21_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_22, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(22, s))
+# define BOOST_PP_WHILE_22_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_23, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(23, s))
+# define BOOST_PP_WHILE_23_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_24, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(24, s))
+# define BOOST_PP_WHILE_24_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_25, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(25, s))
+# define BOOST_PP_WHILE_25_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_26, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(26, s))
+# define BOOST_PP_WHILE_26_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_27, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(27, s))
+# define BOOST_PP_WHILE_27_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_28, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(28, s))
+# define BOOST_PP_WHILE_28_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_29, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(29, s))
+# define BOOST_PP_WHILE_29_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_30, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(30, s))
+# define BOOST_PP_WHILE_30_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_31, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(31, s))
+# define BOOST_PP_WHILE_31_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_32, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(32, s))
+# define BOOST_PP_WHILE_32_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_33, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(33, s))
+# define BOOST_PP_WHILE_33_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_34, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(34, s))
+# define BOOST_PP_WHILE_34_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_35, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(35, s))
+# define BOOST_PP_WHILE_35_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_36, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(36, s))
+# define BOOST_PP_WHILE_36_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_37, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(37, s))
+# define BOOST_PP_WHILE_37_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_38, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(38, s))
+# define BOOST_PP_WHILE_38_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_39, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(39, s))
+# define BOOST_PP_WHILE_39_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_40, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(40, s))
+# define BOOST_PP_WHILE_40_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_41, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(41, s))
+# define BOOST_PP_WHILE_41_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_42, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(42, s))
+# define BOOST_PP_WHILE_42_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_43, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(43, s))
+# define BOOST_PP_WHILE_43_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_44, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(44, s))
+# define BOOST_PP_WHILE_44_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_45, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(45, s))
+# define BOOST_PP_WHILE_45_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_46, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(46, s))
+# define BOOST_PP_WHILE_46_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_47, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(47, s))
+# define BOOST_PP_WHILE_47_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_48, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(48, s))
+# define BOOST_PP_WHILE_48_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_49, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(49, s))
+# define BOOST_PP_WHILE_49_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_50, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(50, s))
+# define BOOST_PP_WHILE_50_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_51, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(51, s))
+# define BOOST_PP_WHILE_51_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_52, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(52, s))
+# define BOOST_PP_WHILE_52_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_53, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(53, s))
+# define BOOST_PP_WHILE_53_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_54, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(54, s))
+# define BOOST_PP_WHILE_54_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_55, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(55, s))
+# define BOOST_PP_WHILE_55_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_56, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(56, s))
+# define BOOST_PP_WHILE_56_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_57, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(57, s))
+# define BOOST_PP_WHILE_57_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_58, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(58, s))
+# define BOOST_PP_WHILE_58_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_59, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(59, s))
+# define BOOST_PP_WHILE_59_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_60, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(60, s))
+# define BOOST_PP_WHILE_60_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_61, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(61, s))
+# define BOOST_PP_WHILE_61_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_62, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(62, s))
+# define BOOST_PP_WHILE_62_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_63, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(63, s))
+# define BOOST_PP_WHILE_63_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_64, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(64, s))
+# define BOOST_PP_WHILE_64_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_65, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(65, s))
+# define BOOST_PP_WHILE_65_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_66, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(66, s))
+# define BOOST_PP_WHILE_66_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_67, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(67, s))
+# define BOOST_PP_WHILE_67_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_68, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(68, s))
+# define BOOST_PP_WHILE_68_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_69, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(69, s))
+# define BOOST_PP_WHILE_69_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_70, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(70, s))
+# define BOOST_PP_WHILE_70_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_71, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(71, s))
+# define BOOST_PP_WHILE_71_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_72, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(72, s))
+# define BOOST_PP_WHILE_72_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_73, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(73, s))
+# define BOOST_PP_WHILE_73_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_74, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(74, s))
+# define BOOST_PP_WHILE_74_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_75, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(75, s))
+# define BOOST_PP_WHILE_75_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_76, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(76, s))
+# define BOOST_PP_WHILE_76_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_77, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(77, s))
+# define BOOST_PP_WHILE_77_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_78, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(78, s))
+# define BOOST_PP_WHILE_78_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_79, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(79, s))
+# define BOOST_PP_WHILE_79_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_80, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(80, s))
+# define BOOST_PP_WHILE_80_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_81, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(81, s))
+# define BOOST_PP_WHILE_81_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_82, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(82, s))
+# define BOOST_PP_WHILE_82_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_83, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(83, s))
+# define BOOST_PP_WHILE_83_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_84, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(84, s))
+# define BOOST_PP_WHILE_84_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_85, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(85, s))
+# define BOOST_PP_WHILE_85_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_86, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(86, s))
+# define BOOST_PP_WHILE_86_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_87, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(87, s))
+# define BOOST_PP_WHILE_87_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_88, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(88, s))
+# define BOOST_PP_WHILE_88_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_89, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(89, s))
+# define BOOST_PP_WHILE_89_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_90, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(90, s))
+# define BOOST_PP_WHILE_90_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_91, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(91, s))
+# define BOOST_PP_WHILE_91_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_92, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(92, s))
+# define BOOST_PP_WHILE_92_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_93, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(93, s))
+# define BOOST_PP_WHILE_93_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_94, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(94, s))
+# define BOOST_PP_WHILE_94_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_95, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(95, s))
+# define BOOST_PP_WHILE_95_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_96, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(96, s))
+# define BOOST_PP_WHILE_96_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_97, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(97, s))
+# define BOOST_PP_WHILE_97_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_98, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(98, s))
+# define BOOST_PP_WHILE_98_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_99, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(99, s))
+# define BOOST_PP_WHILE_99_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_100, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(100, s))
+# define BOOST_PP_WHILE_100_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_101, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(101, s))
+# define BOOST_PP_WHILE_101_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_102, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(102, s))
+# define BOOST_PP_WHILE_102_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_103, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(103, s))
+# define BOOST_PP_WHILE_103_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_104, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(104, s))
+# define BOOST_PP_WHILE_104_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_105, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(105, s))
+# define BOOST_PP_WHILE_105_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_106, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(106, s))
+# define BOOST_PP_WHILE_106_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_107, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(107, s))
+# define BOOST_PP_WHILE_107_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_108, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(108, s))
+# define BOOST_PP_WHILE_108_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_109, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(109, s))
+# define BOOST_PP_WHILE_109_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_110, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(110, s))
+# define BOOST_PP_WHILE_110_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_111, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(111, s))
+# define BOOST_PP_WHILE_111_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_112, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(112, s))
+# define BOOST_PP_WHILE_112_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_113, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(113, s))
+# define BOOST_PP_WHILE_113_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_114, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(114, s))
+# define BOOST_PP_WHILE_114_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_115, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(115, s))
+# define BOOST_PP_WHILE_115_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_116, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(116, s))
+# define BOOST_PP_WHILE_116_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_117, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(117, s))
+# define BOOST_PP_WHILE_117_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_118, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(118, s))
+# define BOOST_PP_WHILE_118_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_119, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(119, s))
+# define BOOST_PP_WHILE_119_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_120, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(120, s))
+# define BOOST_PP_WHILE_120_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_121, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(121, s))
+# define BOOST_PP_WHILE_121_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_122, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(122, s))
+# define BOOST_PP_WHILE_122_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_123, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(123, s))
+# define BOOST_PP_WHILE_123_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_124, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(124, s))
+# define BOOST_PP_WHILE_124_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_125, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(125, s))
+# define BOOST_PP_WHILE_125_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_126, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(126, s))
+# define BOOST_PP_WHILE_126_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_127, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(127, s))
+# define BOOST_PP_WHILE_127_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_128, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(128, s))
+# define BOOST_PP_WHILE_128_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_129, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(129, s))
+# define BOOST_PP_WHILE_129_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_130, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(130, s))
+# define BOOST_PP_WHILE_130_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_131, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(131, s))
+# define BOOST_PP_WHILE_131_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_132, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(132, s))
+# define BOOST_PP_WHILE_132_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_133, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(133, s))
+# define BOOST_PP_WHILE_133_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_134, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(134, s))
+# define BOOST_PP_WHILE_134_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_135, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(135, s))
+# define BOOST_PP_WHILE_135_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_136, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(136, s))
+# define BOOST_PP_WHILE_136_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_137, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(137, s))
+# define BOOST_PP_WHILE_137_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_138, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(138, s))
+# define BOOST_PP_WHILE_138_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_139, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(139, s))
+# define BOOST_PP_WHILE_139_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_140, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(140, s))
+# define BOOST_PP_WHILE_140_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_141, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(141, s))
+# define BOOST_PP_WHILE_141_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_142, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(142, s))
+# define BOOST_PP_WHILE_142_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_143, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(143, s))
+# define BOOST_PP_WHILE_143_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_144, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(144, s))
+# define BOOST_PP_WHILE_144_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_145, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(145, s))
+# define BOOST_PP_WHILE_145_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_146, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(146, s))
+# define BOOST_PP_WHILE_146_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_147, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(147, s))
+# define BOOST_PP_WHILE_147_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_148, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(148, s))
+# define BOOST_PP_WHILE_148_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_149, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(149, s))
+# define BOOST_PP_WHILE_149_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_150, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(150, s))
+# define BOOST_PP_WHILE_150_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_151, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(151, s))
+# define BOOST_PP_WHILE_151_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_152, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(152, s))
+# define BOOST_PP_WHILE_152_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_153, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(153, s))
+# define BOOST_PP_WHILE_153_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_154, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(154, s))
+# define BOOST_PP_WHILE_154_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_155, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(155, s))
+# define BOOST_PP_WHILE_155_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_156, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(156, s))
+# define BOOST_PP_WHILE_156_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_157, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(157, s))
+# define BOOST_PP_WHILE_157_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_158, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(158, s))
+# define BOOST_PP_WHILE_158_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_159, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(159, s))
+# define BOOST_PP_WHILE_159_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_160, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(160, s))
+# define BOOST_PP_WHILE_160_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_161, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(161, s))
+# define BOOST_PP_WHILE_161_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_162, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(162, s))
+# define BOOST_PP_WHILE_162_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_163, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(163, s))
+# define BOOST_PP_WHILE_163_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_164, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(164, s))
+# define BOOST_PP_WHILE_164_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_165, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(165, s))
+# define BOOST_PP_WHILE_165_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_166, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(166, s))
+# define BOOST_PP_WHILE_166_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_167, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(167, s))
+# define BOOST_PP_WHILE_167_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_168, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(168, s))
+# define BOOST_PP_WHILE_168_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_169, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(169, s))
+# define BOOST_PP_WHILE_169_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_170, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(170, s))
+# define BOOST_PP_WHILE_170_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_171, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(171, s))
+# define BOOST_PP_WHILE_171_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_172, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(172, s))
+# define BOOST_PP_WHILE_172_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_173, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(173, s))
+# define BOOST_PP_WHILE_173_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_174, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(174, s))
+# define BOOST_PP_WHILE_174_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_175, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(175, s))
+# define BOOST_PP_WHILE_175_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_176, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(176, s))
+# define BOOST_PP_WHILE_176_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_177, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(177, s))
+# define BOOST_PP_WHILE_177_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_178, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(178, s))
+# define BOOST_PP_WHILE_178_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_179, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(179, s))
+# define BOOST_PP_WHILE_179_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_180, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(180, s))
+# define BOOST_PP_WHILE_180_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_181, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(181, s))
+# define BOOST_PP_WHILE_181_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_182, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(182, s))
+# define BOOST_PP_WHILE_182_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_183, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(183, s))
+# define BOOST_PP_WHILE_183_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_184, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(184, s))
+# define BOOST_PP_WHILE_184_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_185, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(185, s))
+# define BOOST_PP_WHILE_185_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_186, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(186, s))
+# define BOOST_PP_WHILE_186_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_187, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(187, s))
+# define BOOST_PP_WHILE_187_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_188, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(188, s))
+# define BOOST_PP_WHILE_188_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_189, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(189, s))
+# define BOOST_PP_WHILE_189_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_190, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(190, s))
+# define BOOST_PP_WHILE_190_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_191, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(191, s))
+# define BOOST_PP_WHILE_191_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_192, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(192, s))
+# define BOOST_PP_WHILE_192_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_193, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(193, s))
+# define BOOST_PP_WHILE_193_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_194, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(194, s))
+# define BOOST_PP_WHILE_194_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_195, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(195, s))
+# define BOOST_PP_WHILE_195_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_196, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(196, s))
+# define BOOST_PP_WHILE_196_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_197, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(197, s))
+# define BOOST_PP_WHILE_197_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_198, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(198, s))
+# define BOOST_PP_WHILE_198_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_199, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(199, s))
+# define BOOST_PP_WHILE_199_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_200, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(200, s))
+# define BOOST_PP_WHILE_200_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_201, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(201, s))
+# define BOOST_PP_WHILE_201_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_202, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(202, s))
+# define BOOST_PP_WHILE_202_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_203, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(203, s))
+# define BOOST_PP_WHILE_203_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_204, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(204, s))
+# define BOOST_PP_WHILE_204_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_205, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(205, s))
+# define BOOST_PP_WHILE_205_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_206, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(206, s))
+# define BOOST_PP_WHILE_206_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_207, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(207, s))
+# define BOOST_PP_WHILE_207_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_208, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(208, s))
+# define BOOST_PP_WHILE_208_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_209, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(209, s))
+# define BOOST_PP_WHILE_209_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_210, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(210, s))
+# define BOOST_PP_WHILE_210_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_211, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(211, s))
+# define BOOST_PP_WHILE_211_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_212, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(212, s))
+# define BOOST_PP_WHILE_212_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_213, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(213, s))
+# define BOOST_PP_WHILE_213_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_214, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(214, s))
+# define BOOST_PP_WHILE_214_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_215, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(215, s))
+# define BOOST_PP_WHILE_215_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_216, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(216, s))
+# define BOOST_PP_WHILE_216_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_217, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(217, s))
+# define BOOST_PP_WHILE_217_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_218, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(218, s))
+# define BOOST_PP_WHILE_218_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_219, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(219, s))
+# define BOOST_PP_WHILE_219_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_220, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(220, s))
+# define BOOST_PP_WHILE_220_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_221, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(221, s))
+# define BOOST_PP_WHILE_221_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_222, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(222, s))
+# define BOOST_PP_WHILE_222_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_223, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(223, s))
+# define BOOST_PP_WHILE_223_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_224, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(224, s))
+# define BOOST_PP_WHILE_224_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_225, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(225, s))
+# define BOOST_PP_WHILE_225_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_226, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(226, s))
+# define BOOST_PP_WHILE_226_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_227, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(227, s))
+# define BOOST_PP_WHILE_227_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_228, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(228, s))
+# define BOOST_PP_WHILE_228_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_229, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(229, s))
+# define BOOST_PP_WHILE_229_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_230, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(230, s))
+# define BOOST_PP_WHILE_230_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_231, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(231, s))
+# define BOOST_PP_WHILE_231_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_232, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(232, s))
+# define BOOST_PP_WHILE_232_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_233, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(233, s))
+# define BOOST_PP_WHILE_233_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_234, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(234, s))
+# define BOOST_PP_WHILE_234_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_235, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(235, s))
+# define BOOST_PP_WHILE_235_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_236, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(236, s))
+# define BOOST_PP_WHILE_236_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_237, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(237, s))
+# define BOOST_PP_WHILE_237_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_238, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(238, s))
+# define BOOST_PP_WHILE_238_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_239, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(239, s))
+# define BOOST_PP_WHILE_239_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_240, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(240, s))
+# define BOOST_PP_WHILE_240_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_241, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(241, s))
+# define BOOST_PP_WHILE_241_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_242, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(242, s))
+# define BOOST_PP_WHILE_242_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_243, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(243, s))
+# define BOOST_PP_WHILE_243_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_244, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(244, s))
+# define BOOST_PP_WHILE_244_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_245, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(245, s))
+# define BOOST_PP_WHILE_245_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_246, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(246, s))
+# define BOOST_PP_WHILE_246_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_247, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(247, s))
+# define BOOST_PP_WHILE_247_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_248, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(248, s))
+# define BOOST_PP_WHILE_248_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_249, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(249, s))
+# define BOOST_PP_WHILE_249_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_250, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(250, s))
+# define BOOST_PP_WHILE_250_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_251, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(251, s))
+# define BOOST_PP_WHILE_251_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_252, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(252, s))
+# define BOOST_PP_WHILE_252_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_253, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(253, s))
+# define BOOST_PP_WHILE_253_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_254, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(254, s))
+# define BOOST_PP_WHILE_254_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_255, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(255, s))
+# define BOOST_PP_WHILE_255_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_256, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(256, s))
+# define BOOST_PP_WHILE_256_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_257, BOOST_PP_TUPLE_ELEM_3_2)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_TUPLE_ELEM_2_1)(257, s))
+#
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/control/detail/edg/while.hpp b/vendor/pdalboost/boost/preprocessor/control/detail/edg/while.hpp
new file mode 100644
index 0000000..ce28eb2
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/control/detail/edg/while.hpp
@@ -0,0 +1,534 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_EDG_WHILE_HPP
+# define BOOST_PREPROCESSOR_CONTROL_DETAIL_EDG_WHILE_HPP
+#
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_WHILE_1_I(p, o, s)
+# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_WHILE_2_I(p, o, s)
+# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_WHILE_3_I(p, o, s)
+# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_WHILE_4_I(p, o, s)
+# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_WHILE_5_I(p, o, s)
+# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_WHILE_6_I(p, o, s)
+# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_WHILE_7_I(p, o, s)
+# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_WHILE_8_I(p, o, s)
+# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_WHILE_9_I(p, o, s)
+# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_WHILE_10_I(p, o, s)
+# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_WHILE_11_I(p, o, s)
+# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_WHILE_12_I(p, o, s)
+# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_WHILE_13_I(p, o, s)
+# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_WHILE_14_I(p, o, s)
+# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_WHILE_15_I(p, o, s)
+# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_WHILE_16_I(p, o, s)
+# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_WHILE_17_I(p, o, s)
+# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_WHILE_18_I(p, o, s)
+# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_WHILE_19_I(p, o, s)
+# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_WHILE_20_I(p, o, s)
+# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_WHILE_21_I(p, o, s)
+# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_WHILE_22_I(p, o, s)
+# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_WHILE_23_I(p, o, s)
+# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_WHILE_24_I(p, o, s)
+# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_WHILE_25_I(p, o, s)
+# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_WHILE_26_I(p, o, s)
+# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_WHILE_27_I(p, o, s)
+# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_WHILE_28_I(p, o, s)
+# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_WHILE_29_I(p, o, s)
+# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_WHILE_30_I(p, o, s)
+# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_WHILE_31_I(p, o, s)
+# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_WHILE_32_I(p, o, s)
+# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_WHILE_33_I(p, o, s)
+# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_WHILE_34_I(p, o, s)
+# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_WHILE_35_I(p, o, s)
+# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_WHILE_36_I(p, o, s)
+# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_WHILE_37_I(p, o, s)
+# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_WHILE_38_I(p, o, s)
+# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_WHILE_39_I(p, o, s)
+# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_WHILE_40_I(p, o, s)
+# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_WHILE_41_I(p, o, s)
+# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_WHILE_42_I(p, o, s)
+# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_WHILE_43_I(p, o, s)
+# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_WHILE_44_I(p, o, s)
+# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_WHILE_45_I(p, o, s)
+# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_WHILE_46_I(p, o, s)
+# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_WHILE_47_I(p, o, s)
+# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_WHILE_48_I(p, o, s)
+# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_WHILE_49_I(p, o, s)
+# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_WHILE_50_I(p, o, s)
+# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_WHILE_51_I(p, o, s)
+# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_WHILE_52_I(p, o, s)
+# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_WHILE_53_I(p, o, s)
+# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_WHILE_54_I(p, o, s)
+# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_WHILE_55_I(p, o, s)
+# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_WHILE_56_I(p, o, s)
+# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_WHILE_57_I(p, o, s)
+# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_WHILE_58_I(p, o, s)
+# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_WHILE_59_I(p, o, s)
+# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_WHILE_60_I(p, o, s)
+# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_WHILE_61_I(p, o, s)
+# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_WHILE_62_I(p, o, s)
+# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_WHILE_63_I(p, o, s)
+# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_WHILE_64_I(p, o, s)
+# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_WHILE_65_I(p, o, s)
+# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_WHILE_66_I(p, o, s)
+# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_WHILE_67_I(p, o, s)
+# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_WHILE_68_I(p, o, s)
+# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_WHILE_69_I(p, o, s)
+# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_WHILE_70_I(p, o, s)
+# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_WHILE_71_I(p, o, s)
+# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_WHILE_72_I(p, o, s)
+# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_WHILE_73_I(p, o, s)
+# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_WHILE_74_I(p, o, s)
+# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_WHILE_75_I(p, o, s)
+# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_WHILE_76_I(p, o, s)
+# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_WHILE_77_I(p, o, s)
+# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_WHILE_78_I(p, o, s)
+# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_WHILE_79_I(p, o, s)
+# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_WHILE_80_I(p, o, s)
+# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_WHILE_81_I(p, o, s)
+# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_WHILE_82_I(p, o, s)
+# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_WHILE_83_I(p, o, s)
+# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_WHILE_84_I(p, o, s)
+# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_WHILE_85_I(p, o, s)
+# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_WHILE_86_I(p, o, s)
+# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_WHILE_87_I(p, o, s)
+# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_WHILE_88_I(p, o, s)
+# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_WHILE_89_I(p, o, s)
+# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_WHILE_90_I(p, o, s)
+# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_WHILE_91_I(p, o, s)
+# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_WHILE_92_I(p, o, s)
+# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_WHILE_93_I(p, o, s)
+# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_WHILE_94_I(p, o, s)
+# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_WHILE_95_I(p, o, s)
+# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_WHILE_96_I(p, o, s)
+# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_WHILE_97_I(p, o, s)
+# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_WHILE_98_I(p, o, s)
+# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_WHILE_99_I(p, o, s)
+# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_WHILE_100_I(p, o, s)
+# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_WHILE_101_I(p, o, s)
+# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_WHILE_102_I(p, o, s)
+# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_WHILE_103_I(p, o, s)
+# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_WHILE_104_I(p, o, s)
+# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_WHILE_105_I(p, o, s)
+# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_WHILE_106_I(p, o, s)
+# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_WHILE_107_I(p, o, s)
+# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_WHILE_108_I(p, o, s)
+# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_WHILE_109_I(p, o, s)
+# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_WHILE_110_I(p, o, s)
+# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_WHILE_111_I(p, o, s)
+# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_WHILE_112_I(p, o, s)
+# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_WHILE_113_I(p, o, s)
+# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_WHILE_114_I(p, o, s)
+# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_WHILE_115_I(p, o, s)
+# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_WHILE_116_I(p, o, s)
+# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_WHILE_117_I(p, o, s)
+# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_WHILE_118_I(p, o, s)
+# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_WHILE_119_I(p, o, s)
+# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_WHILE_120_I(p, o, s)
+# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_WHILE_121_I(p, o, s)
+# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_WHILE_122_I(p, o, s)
+# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_WHILE_123_I(p, o, s)
+# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_WHILE_124_I(p, o, s)
+# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_WHILE_125_I(p, o, s)
+# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_WHILE_126_I(p, o, s)
+# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_WHILE_127_I(p, o, s)
+# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_WHILE_128_I(p, o, s)
+# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_WHILE_129_I(p, o, s)
+# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_WHILE_130_I(p, o, s)
+# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_WHILE_131_I(p, o, s)
+# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_WHILE_132_I(p, o, s)
+# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_WHILE_133_I(p, o, s)
+# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_WHILE_134_I(p, o, s)
+# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_WHILE_135_I(p, o, s)
+# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_WHILE_136_I(p, o, s)
+# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_WHILE_137_I(p, o, s)
+# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_WHILE_138_I(p, o, s)
+# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_WHILE_139_I(p, o, s)
+# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_WHILE_140_I(p, o, s)
+# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_WHILE_141_I(p, o, s)
+# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_WHILE_142_I(p, o, s)
+# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_WHILE_143_I(p, o, s)
+# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_WHILE_144_I(p, o, s)
+# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_WHILE_145_I(p, o, s)
+# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_WHILE_146_I(p, o, s)
+# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_WHILE_147_I(p, o, s)
+# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_WHILE_148_I(p, o, s)
+# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_WHILE_149_I(p, o, s)
+# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_WHILE_150_I(p, o, s)
+# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_WHILE_151_I(p, o, s)
+# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_WHILE_152_I(p, o, s)
+# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_WHILE_153_I(p, o, s)
+# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_WHILE_154_I(p, o, s)
+# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_WHILE_155_I(p, o, s)
+# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_WHILE_156_I(p, o, s)
+# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_WHILE_157_I(p, o, s)
+# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_WHILE_158_I(p, o, s)
+# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_WHILE_159_I(p, o, s)
+# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_WHILE_160_I(p, o, s)
+# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_WHILE_161_I(p, o, s)
+# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_WHILE_162_I(p, o, s)
+# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_WHILE_163_I(p, o, s)
+# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_WHILE_164_I(p, o, s)
+# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_WHILE_165_I(p, o, s)
+# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_WHILE_166_I(p, o, s)
+# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_WHILE_167_I(p, o, s)
+# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_WHILE_168_I(p, o, s)
+# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_WHILE_169_I(p, o, s)
+# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_WHILE_170_I(p, o, s)
+# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_WHILE_171_I(p, o, s)
+# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_WHILE_172_I(p, o, s)
+# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_WHILE_173_I(p, o, s)
+# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_WHILE_174_I(p, o, s)
+# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_WHILE_175_I(p, o, s)
+# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_WHILE_176_I(p, o, s)
+# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_WHILE_177_I(p, o, s)
+# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_WHILE_178_I(p, o, s)
+# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_WHILE_179_I(p, o, s)
+# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_WHILE_180_I(p, o, s)
+# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_WHILE_181_I(p, o, s)
+# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_WHILE_182_I(p, o, s)
+# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_WHILE_183_I(p, o, s)
+# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_WHILE_184_I(p, o, s)
+# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_WHILE_185_I(p, o, s)
+# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_WHILE_186_I(p, o, s)
+# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_WHILE_187_I(p, o, s)
+# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_WHILE_188_I(p, o, s)
+# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_WHILE_189_I(p, o, s)
+# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_WHILE_190_I(p, o, s)
+# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_WHILE_191_I(p, o, s)
+# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_WHILE_192_I(p, o, s)
+# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_WHILE_193_I(p, o, s)
+# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_WHILE_194_I(p, o, s)
+# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_WHILE_195_I(p, o, s)
+# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_WHILE_196_I(p, o, s)
+# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_WHILE_197_I(p, o, s)
+# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_WHILE_198_I(p, o, s)
+# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_WHILE_199_I(p, o, s)
+# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_WHILE_200_I(p, o, s)
+# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_WHILE_201_I(p, o, s)
+# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_WHILE_202_I(p, o, s)
+# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_WHILE_203_I(p, o, s)
+# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_WHILE_204_I(p, o, s)
+# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_WHILE_205_I(p, o, s)
+# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_WHILE_206_I(p, o, s)
+# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_WHILE_207_I(p, o, s)
+# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_WHILE_208_I(p, o, s)
+# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_WHILE_209_I(p, o, s)
+# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_WHILE_210_I(p, o, s)
+# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_WHILE_211_I(p, o, s)
+# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_WHILE_212_I(p, o, s)
+# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_WHILE_213_I(p, o, s)
+# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_WHILE_214_I(p, o, s)
+# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_WHILE_215_I(p, o, s)
+# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_WHILE_216_I(p, o, s)
+# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_WHILE_217_I(p, o, s)
+# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_WHILE_218_I(p, o, s)
+# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_WHILE_219_I(p, o, s)
+# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_WHILE_220_I(p, o, s)
+# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_WHILE_221_I(p, o, s)
+# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_WHILE_222_I(p, o, s)
+# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_WHILE_223_I(p, o, s)
+# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_WHILE_224_I(p, o, s)
+# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_WHILE_225_I(p, o, s)
+# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_WHILE_226_I(p, o, s)
+# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_WHILE_227_I(p, o, s)
+# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_WHILE_228_I(p, o, s)
+# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_WHILE_229_I(p, o, s)
+# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_WHILE_230_I(p, o, s)
+# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_WHILE_231_I(p, o, s)
+# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_WHILE_232_I(p, o, s)
+# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_WHILE_233_I(p, o, s)
+# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_WHILE_234_I(p, o, s)
+# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_WHILE_235_I(p, o, s)
+# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_WHILE_236_I(p, o, s)
+# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_WHILE_237_I(p, o, s)
+# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_WHILE_238_I(p, o, s)
+# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_WHILE_239_I(p, o, s)
+# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_WHILE_240_I(p, o, s)
+# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_WHILE_241_I(p, o, s)
+# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_WHILE_242_I(p, o, s)
+# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_WHILE_243_I(p, o, s)
+# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_WHILE_244_I(p, o, s)
+# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_WHILE_245_I(p, o, s)
+# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_WHILE_246_I(p, o, s)
+# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_WHILE_247_I(p, o, s)
+# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_WHILE_248_I(p, o, s)
+# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_WHILE_249_I(p, o, s)
+# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_WHILE_250_I(p, o, s)
+# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_WHILE_251_I(p, o, s)
+# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_WHILE_252_I(p, o, s)
+# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_WHILE_253_I(p, o, s)
+# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_WHILE_254_I(p, o, s)
+# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_WHILE_255_I(p, o, s)
+# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_WHILE_256_I(p, o, s)
+#
+# define BOOST_PP_WHILE_1_I(p, o, s) BOOST_PP_IF(p(2, s), BOOST_PP_WHILE_2, s BOOST_PP_TUPLE_EAT_3)(p, o, o(2, s))
+# define BOOST_PP_WHILE_2_I(p, o, s) BOOST_PP_IF(p(3, s), BOOST_PP_WHILE_3, s BOOST_PP_TUPLE_EAT_3)(p, o, o(3, s))
+# define BOOST_PP_WHILE_3_I(p, o, s) BOOST_PP_IF(p(4, s), BOOST_PP_WHILE_4, s BOOST_PP_TUPLE_EAT_3)(p, o, o(4, s))
+# define BOOST_PP_WHILE_4_I(p, o, s) BOOST_PP_IF(p(5, s), BOOST_PP_WHILE_5, s BOOST_PP_TUPLE_EAT_3)(p, o, o(5, s))
+# define BOOST_PP_WHILE_5_I(p, o, s) BOOST_PP_IF(p(6, s), BOOST_PP_WHILE_6, s BOOST_PP_TUPLE_EAT_3)(p, o, o(6, s))
+# define BOOST_PP_WHILE_6_I(p, o, s) BOOST_PP_IF(p(7, s), BOOST_PP_WHILE_7, s BOOST_PP_TUPLE_EAT_3)(p, o, o(7, s))
+# define BOOST_PP_WHILE_7_I(p, o, s) BOOST_PP_IF(p(8, s), BOOST_PP_WHILE_8, s BOOST_PP_TUPLE_EAT_3)(p, o, o(8, s))
+# define BOOST_PP_WHILE_8_I(p, o, s) BOOST_PP_IF(p(9, s), BOOST_PP_WHILE_9, s BOOST_PP_TUPLE_EAT_3)(p, o, o(9, s))
+# define BOOST_PP_WHILE_9_I(p, o, s) BOOST_PP_IF(p(10, s), BOOST_PP_WHILE_10, s BOOST_PP_TUPLE_EAT_3)(p, o, o(10, s))
+# define BOOST_PP_WHILE_10_I(p, o, s) BOOST_PP_IF(p(11, s), BOOST_PP_WHILE_11, s BOOST_PP_TUPLE_EAT_3)(p, o, o(11, s))
+# define BOOST_PP_WHILE_11_I(p, o, s) BOOST_PP_IF(p(12, s), BOOST_PP_WHILE_12, s BOOST_PP_TUPLE_EAT_3)(p, o, o(12, s))
+# define BOOST_PP_WHILE_12_I(p, o, s) BOOST_PP_IF(p(13, s), BOOST_PP_WHILE_13, s BOOST_PP_TUPLE_EAT_3)(p, o, o(13, s))
+# define BOOST_PP_WHILE_13_I(p, o, s) BOOST_PP_IF(p(14, s), BOOST_PP_WHILE_14, s BOOST_PP_TUPLE_EAT_3)(p, o, o(14, s))
+# define BOOST_PP_WHILE_14_I(p, o, s) BOOST_PP_IF(p(15, s), BOOST_PP_WHILE_15, s BOOST_PP_TUPLE_EAT_3)(p, o, o(15, s))
+# define BOOST_PP_WHILE_15_I(p, o, s) BOOST_PP_IF(p(16, s), BOOST_PP_WHILE_16, s BOOST_PP_TUPLE_EAT_3)(p, o, o(16, s))
+# define BOOST_PP_WHILE_16_I(p, o, s) BOOST_PP_IF(p(17, s), BOOST_PP_WHILE_17, s BOOST_PP_TUPLE_EAT_3)(p, o, o(17, s))
+# define BOOST_PP_WHILE_17_I(p, o, s) BOOST_PP_IF(p(18, s), BOOST_PP_WHILE_18, s BOOST_PP_TUPLE_EAT_3)(p, o, o(18, s))
+# define BOOST_PP_WHILE_18_I(p, o, s) BOOST_PP_IF(p(19, s), BOOST_PP_WHILE_19, s BOOST_PP_TUPLE_EAT_3)(p, o, o(19, s))
+# define BOOST_PP_WHILE_19_I(p, o, s) BOOST_PP_IF(p(20, s), BOOST_PP_WHILE_20, s BOOST_PP_TUPLE_EAT_3)(p, o, o(20, s))
+# define BOOST_PP_WHILE_20_I(p, o, s) BOOST_PP_IF(p(21, s), BOOST_PP_WHILE_21, s BOOST_PP_TUPLE_EAT_3)(p, o, o(21, s))
+# define BOOST_PP_WHILE_21_I(p, o, s) BOOST_PP_IF(p(22, s), BOOST_PP_WHILE_22, s BOOST_PP_TUPLE_EAT_3)(p, o, o(22, s))
+# define BOOST_PP_WHILE_22_I(p, o, s) BOOST_PP_IF(p(23, s), BOOST_PP_WHILE_23, s BOOST_PP_TUPLE_EAT_3)(p, o, o(23, s))
+# define BOOST_PP_WHILE_23_I(p, o, s) BOOST_PP_IF(p(24, s), BOOST_PP_WHILE_24, s BOOST_PP_TUPLE_EAT_3)(p, o, o(24, s))
+# define BOOST_PP_WHILE_24_I(p, o, s) BOOST_PP_IF(p(25, s), BOOST_PP_WHILE_25, s BOOST_PP_TUPLE_EAT_3)(p, o, o(25, s))
+# define BOOST_PP_WHILE_25_I(p, o, s) BOOST_PP_IF(p(26, s), BOOST_PP_WHILE_26, s BOOST_PP_TUPLE_EAT_3)(p, o, o(26, s))
+# define BOOST_PP_WHILE_26_I(p, o, s) BOOST_PP_IF(p(27, s), BOOST_PP_WHILE_27, s BOOST_PP_TUPLE_EAT_3)(p, o, o(27, s))
+# define BOOST_PP_WHILE_27_I(p, o, s) BOOST_PP_IF(p(28, s), BOOST_PP_WHILE_28, s BOOST_PP_TUPLE_EAT_3)(p, o, o(28, s))
+# define BOOST_PP_WHILE_28_I(p, o, s) BOOST_PP_IF(p(29, s), BOOST_PP_WHILE_29, s BOOST_PP_TUPLE_EAT_3)(p, o, o(29, s))
+# define BOOST_PP_WHILE_29_I(p, o, s) BOOST_PP_IF(p(30, s), BOOST_PP_WHILE_30, s BOOST_PP_TUPLE_EAT_3)(p, o, o(30, s))
+# define BOOST_PP_WHILE_30_I(p, o, s) BOOST_PP_IF(p(31, s), BOOST_PP_WHILE_31, s BOOST_PP_TUPLE_EAT_3)(p, o, o(31, s))
+# define BOOST_PP_WHILE_31_I(p, o, s) BOOST_PP_IF(p(32, s), BOOST_PP_WHILE_32, s BOOST_PP_TUPLE_EAT_3)(p, o, o(32, s))
+# define BOOST_PP_WHILE_32_I(p, o, s) BOOST_PP_IF(p(33, s), BOOST_PP_WHILE_33, s BOOST_PP_TUPLE_EAT_3)(p, o, o(33, s))
+# define BOOST_PP_WHILE_33_I(p, o, s) BOOST_PP_IF(p(34, s), BOOST_PP_WHILE_34, s BOOST_PP_TUPLE_EAT_3)(p, o, o(34, s))
+# define BOOST_PP_WHILE_34_I(p, o, s) BOOST_PP_IF(p(35, s), BOOST_PP_WHILE_35, s BOOST_PP_TUPLE_EAT_3)(p, o, o(35, s))
+# define BOOST_PP_WHILE_35_I(p, o, s) BOOST_PP_IF(p(36, s), BOOST_PP_WHILE_36, s BOOST_PP_TUPLE_EAT_3)(p, o, o(36, s))
+# define BOOST_PP_WHILE_36_I(p, o, s) BOOST_PP_IF(p(37, s), BOOST_PP_WHILE_37, s BOOST_PP_TUPLE_EAT_3)(p, o, o(37, s))
+# define BOOST_PP_WHILE_37_I(p, o, s) BOOST_PP_IF(p(38, s), BOOST_PP_WHILE_38, s BOOST_PP_TUPLE_EAT_3)(p, o, o(38, s))
+# define BOOST_PP_WHILE_38_I(p, o, s) BOOST_PP_IF(p(39, s), BOOST_PP_WHILE_39, s BOOST_PP_TUPLE_EAT_3)(p, o, o(39, s))
+# define BOOST_PP_WHILE_39_I(p, o, s) BOOST_PP_IF(p(40, s), BOOST_PP_WHILE_40, s BOOST_PP_TUPLE_EAT_3)(p, o, o(40, s))
+# define BOOST_PP_WHILE_40_I(p, o, s) BOOST_PP_IF(p(41, s), BOOST_PP_WHILE_41, s BOOST_PP_TUPLE_EAT_3)(p, o, o(41, s))
+# define BOOST_PP_WHILE_41_I(p, o, s) BOOST_PP_IF(p(42, s), BOOST_PP_WHILE_42, s BOOST_PP_TUPLE_EAT_3)(p, o, o(42, s))
+# define BOOST_PP_WHILE_42_I(p, o, s) BOOST_PP_IF(p(43, s), BOOST_PP_WHILE_43, s BOOST_PP_TUPLE_EAT_3)(p, o, o(43, s))
+# define BOOST_PP_WHILE_43_I(p, o, s) BOOST_PP_IF(p(44, s), BOOST_PP_WHILE_44, s BOOST_PP_TUPLE_EAT_3)(p, o, o(44, s))
+# define BOOST_PP_WHILE_44_I(p, o, s) BOOST_PP_IF(p(45, s), BOOST_PP_WHILE_45, s BOOST_PP_TUPLE_EAT_3)(p, o, o(45, s))
+# define BOOST_PP_WHILE_45_I(p, o, s) BOOST_PP_IF(p(46, s), BOOST_PP_WHILE_46, s BOOST_PP_TUPLE_EAT_3)(p, o, o(46, s))
+# define BOOST_PP_WHILE_46_I(p, o, s) BOOST_PP_IF(p(47, s), BOOST_PP_WHILE_47, s BOOST_PP_TUPLE_EAT_3)(p, o, o(47, s))
+# define BOOST_PP_WHILE_47_I(p, o, s) BOOST_PP_IF(p(48, s), BOOST_PP_WHILE_48, s BOOST_PP_TUPLE_EAT_3)(p, o, o(48, s))
+# define BOOST_PP_WHILE_48_I(p, o, s) BOOST_PP_IF(p(49, s), BOOST_PP_WHILE_49, s BOOST_PP_TUPLE_EAT_3)(p, o, o(49, s))
+# define BOOST_PP_WHILE_49_I(p, o, s) BOOST_PP_IF(p(50, s), BOOST_PP_WHILE_50, s BOOST_PP_TUPLE_EAT_3)(p, o, o(50, s))
+# define BOOST_PP_WHILE_50_I(p, o, s) BOOST_PP_IF(p(51, s), BOOST_PP_WHILE_51, s BOOST_PP_TUPLE_EAT_3)(p, o, o(51, s))
+# define BOOST_PP_WHILE_51_I(p, o, s) BOOST_PP_IF(p(52, s), BOOST_PP_WHILE_52, s BOOST_PP_TUPLE_EAT_3)(p, o, o(52, s))
+# define BOOST_PP_WHILE_52_I(p, o, s) BOOST_PP_IF(p(53, s), BOOST_PP_WHILE_53, s BOOST_PP_TUPLE_EAT_3)(p, o, o(53, s))
+# define BOOST_PP_WHILE_53_I(p, o, s) BOOST_PP_IF(p(54, s), BOOST_PP_WHILE_54, s BOOST_PP_TUPLE_EAT_3)(p, o, o(54, s))
+# define BOOST_PP_WHILE_54_I(p, o, s) BOOST_PP_IF(p(55, s), BOOST_PP_WHILE_55, s BOOST_PP_TUPLE_EAT_3)(p, o, o(55, s))
+# define BOOST_PP_WHILE_55_I(p, o, s) BOOST_PP_IF(p(56, s), BOOST_PP_WHILE_56, s BOOST_PP_TUPLE_EAT_3)(p, o, o(56, s))
+# define BOOST_PP_WHILE_56_I(p, o, s) BOOST_PP_IF(p(57, s), BOOST_PP_WHILE_57, s BOOST_PP_TUPLE_EAT_3)(p, o, o(57, s))
+# define BOOST_PP_WHILE_57_I(p, o, s) BOOST_PP_IF(p(58, s), BOOST_PP_WHILE_58, s BOOST_PP_TUPLE_EAT_3)(p, o, o(58, s))
+# define BOOST_PP_WHILE_58_I(p, o, s) BOOST_PP_IF(p(59, s), BOOST_PP_WHILE_59, s BOOST_PP_TUPLE_EAT_3)(p, o, o(59, s))
+# define BOOST_PP_WHILE_59_I(p, o, s) BOOST_PP_IF(p(60, s), BOOST_PP_WHILE_60, s BOOST_PP_TUPLE_EAT_3)(p, o, o(60, s))
+# define BOOST_PP_WHILE_60_I(p, o, s) BOOST_PP_IF(p(61, s), BOOST_PP_WHILE_61, s BOOST_PP_TUPLE_EAT_3)(p, o, o(61, s))
+# define BOOST_PP_WHILE_61_I(p, o, s) BOOST_PP_IF(p(62, s), BOOST_PP_WHILE_62, s BOOST_PP_TUPLE_EAT_3)(p, o, o(62, s))
+# define BOOST_PP_WHILE_62_I(p, o, s) BOOST_PP_IF(p(63, s), BOOST_PP_WHILE_63, s BOOST_PP_TUPLE_EAT_3)(p, o, o(63, s))
+# define BOOST_PP_WHILE_63_I(p, o, s) BOOST_PP_IF(p(64, s), BOOST_PP_WHILE_64, s BOOST_PP_TUPLE_EAT_3)(p, o, o(64, s))
+# define BOOST_PP_WHILE_64_I(p, o, s) BOOST_PP_IF(p(65, s), BOOST_PP_WHILE_65, s BOOST_PP_TUPLE_EAT_3)(p, o, o(65, s))
+# define BOOST_PP_WHILE_65_I(p, o, s) BOOST_PP_IF(p(66, s), BOOST_PP_WHILE_66, s BOOST_PP_TUPLE_EAT_3)(p, o, o(66, s))
+# define BOOST_PP_WHILE_66_I(p, o, s) BOOST_PP_IF(p(67, s), BOOST_PP_WHILE_67, s BOOST_PP_TUPLE_EAT_3)(p, o, o(67, s))
+# define BOOST_PP_WHILE_67_I(p, o, s) BOOST_PP_IF(p(68, s), BOOST_PP_WHILE_68, s BOOST_PP_TUPLE_EAT_3)(p, o, o(68, s))
+# define BOOST_PP_WHILE_68_I(p, o, s) BOOST_PP_IF(p(69, s), BOOST_PP_WHILE_69, s BOOST_PP_TUPLE_EAT_3)(p, o, o(69, s))
+# define BOOST_PP_WHILE_69_I(p, o, s) BOOST_PP_IF(p(70, s), BOOST_PP_WHILE_70, s BOOST_PP_TUPLE_EAT_3)(p, o, o(70, s))
+# define BOOST_PP_WHILE_70_I(p, o, s) BOOST_PP_IF(p(71, s), BOOST_PP_WHILE_71, s BOOST_PP_TUPLE_EAT_3)(p, o, o(71, s))
+# define BOOST_PP_WHILE_71_I(p, o, s) BOOST_PP_IF(p(72, s), BOOST_PP_WHILE_72, s BOOST_PP_TUPLE_EAT_3)(p, o, o(72, s))
+# define BOOST_PP_WHILE_72_I(p, o, s) BOOST_PP_IF(p(73, s), BOOST_PP_WHILE_73, s BOOST_PP_TUPLE_EAT_3)(p, o, o(73, s))
+# define BOOST_PP_WHILE_73_I(p, o, s) BOOST_PP_IF(p(74, s), BOOST_PP_WHILE_74, s BOOST_PP_TUPLE_EAT_3)(p, o, o(74, s))
+# define BOOST_PP_WHILE_74_I(p, o, s) BOOST_PP_IF(p(75, s), BOOST_PP_WHILE_75, s BOOST_PP_TUPLE_EAT_3)(p, o, o(75, s))
+# define BOOST_PP_WHILE_75_I(p, o, s) BOOST_PP_IF(p(76, s), BOOST_PP_WHILE_76, s BOOST_PP_TUPLE_EAT_3)(p, o, o(76, s))
+# define BOOST_PP_WHILE_76_I(p, o, s) BOOST_PP_IF(p(77, s), BOOST_PP_WHILE_77, s BOOST_PP_TUPLE_EAT_3)(p, o, o(77, s))
+# define BOOST_PP_WHILE_77_I(p, o, s) BOOST_PP_IF(p(78, s), BOOST_PP_WHILE_78, s BOOST_PP_TUPLE_EAT_3)(p, o, o(78, s))
+# define BOOST_PP_WHILE_78_I(p, o, s) BOOST_PP_IF(p(79, s), BOOST_PP_WHILE_79, s BOOST_PP_TUPLE_EAT_3)(p, o, o(79, s))
+# define BOOST_PP_WHILE_79_I(p, o, s) BOOST_PP_IF(p(80, s), BOOST_PP_WHILE_80, s BOOST_PP_TUPLE_EAT_3)(p, o, o(80, s))
+# define BOOST_PP_WHILE_80_I(p, o, s) BOOST_PP_IF(p(81, s), BOOST_PP_WHILE_81, s BOOST_PP_TUPLE_EAT_3)(p, o, o(81, s))
+# define BOOST_PP_WHILE_81_I(p, o, s) BOOST_PP_IF(p(82, s), BOOST_PP_WHILE_82, s BOOST_PP_TUPLE_EAT_3)(p, o, o(82, s))
+# define BOOST_PP_WHILE_82_I(p, o, s) BOOST_PP_IF(p(83, s), BOOST_PP_WHILE_83, s BOOST_PP_TUPLE_EAT_3)(p, o, o(83, s))
+# define BOOST_PP_WHILE_83_I(p, o, s) BOOST_PP_IF(p(84, s), BOOST_PP_WHILE_84, s BOOST_PP_TUPLE_EAT_3)(p, o, o(84, s))
+# define BOOST_PP_WHILE_84_I(p, o, s) BOOST_PP_IF(p(85, s), BOOST_PP_WHILE_85, s BOOST_PP_TUPLE_EAT_3)(p, o, o(85, s))
+# define BOOST_PP_WHILE_85_I(p, o, s) BOOST_PP_IF(p(86, s), BOOST_PP_WHILE_86, s BOOST_PP_TUPLE_EAT_3)(p, o, o(86, s))
+# define BOOST_PP_WHILE_86_I(p, o, s) BOOST_PP_IF(p(87, s), BOOST_PP_WHILE_87, s BOOST_PP_TUPLE_EAT_3)(p, o, o(87, s))
+# define BOOST_PP_WHILE_87_I(p, o, s) BOOST_PP_IF(p(88, s), BOOST_PP_WHILE_88, s BOOST_PP_TUPLE_EAT_3)(p, o, o(88, s))
+# define BOOST_PP_WHILE_88_I(p, o, s) BOOST_PP_IF(p(89, s), BOOST_PP_WHILE_89, s BOOST_PP_TUPLE_EAT_3)(p, o, o(89, s))
+# define BOOST_PP_WHILE_89_I(p, o, s) BOOST_PP_IF(p(90, s), BOOST_PP_WHILE_90, s BOOST_PP_TUPLE_EAT_3)(p, o, o(90, s))
+# define BOOST_PP_WHILE_90_I(p, o, s) BOOST_PP_IF(p(91, s), BOOST_PP_WHILE_91, s BOOST_PP_TUPLE_EAT_3)(p, o, o(91, s))
+# define BOOST_PP_WHILE_91_I(p, o, s) BOOST_PP_IF(p(92, s), BOOST_PP_WHILE_92, s BOOST_PP_TUPLE_EAT_3)(p, o, o(92, s))
+# define BOOST_PP_WHILE_92_I(p, o, s) BOOST_PP_IF(p(93, s), BOOST_PP_WHILE_93, s BOOST_PP_TUPLE_EAT_3)(p, o, o(93, s))
+# define BOOST_PP_WHILE_93_I(p, o, s) BOOST_PP_IF(p(94, s), BOOST_PP_WHILE_94, s BOOST_PP_TUPLE_EAT_3)(p, o, o(94, s))
+# define BOOST_PP_WHILE_94_I(p, o, s) BOOST_PP_IF(p(95, s), BOOST_PP_WHILE_95, s BOOST_PP_TUPLE_EAT_3)(p, o, o(95, s))
+# define BOOST_PP_WHILE_95_I(p, o, s) BOOST_PP_IF(p(96, s), BOOST_PP_WHILE_96, s BOOST_PP_TUPLE_EAT_3)(p, o, o(96, s))
+# define BOOST_PP_WHILE_96_I(p, o, s) BOOST_PP_IF(p(97, s), BOOST_PP_WHILE_97, s BOOST_PP_TUPLE_EAT_3)(p, o, o(97, s))
+# define BOOST_PP_WHILE_97_I(p, o, s) BOOST_PP_IF(p(98, s), BOOST_PP_WHILE_98, s BOOST_PP_TUPLE_EAT_3)(p, o, o(98, s))
+# define BOOST_PP_WHILE_98_I(p, o, s) BOOST_PP_IF(p(99, s), BOOST_PP_WHILE_99, s BOOST_PP_TUPLE_EAT_3)(p, o, o(99, s))
+# define BOOST_PP_WHILE_99_I(p, o, s) BOOST_PP_IF(p(100, s), BOOST_PP_WHILE_100, s BOOST_PP_TUPLE_EAT_3)(p, o, o(100, s))
+# define BOOST_PP_WHILE_100_I(p, o, s) BOOST_PP_IF(p(101, s), BOOST_PP_WHILE_101, s BOOST_PP_TUPLE_EAT_3)(p, o, o(101, s))
+# define BOOST_PP_WHILE_101_I(p, o, s) BOOST_PP_IF(p(102, s), BOOST_PP_WHILE_102, s BOOST_PP_TUPLE_EAT_3)(p, o, o(102, s))
+# define BOOST_PP_WHILE_102_I(p, o, s) BOOST_PP_IF(p(103, s), BOOST_PP_WHILE_103, s BOOST_PP_TUPLE_EAT_3)(p, o, o(103, s))
+# define BOOST_PP_WHILE_103_I(p, o, s) BOOST_PP_IF(p(104, s), BOOST_PP_WHILE_104, s BOOST_PP_TUPLE_EAT_3)(p, o, o(104, s))
+# define BOOST_PP_WHILE_104_I(p, o, s) BOOST_PP_IF(p(105, s), BOOST_PP_WHILE_105, s BOOST_PP_TUPLE_EAT_3)(p, o, o(105, s))
+# define BOOST_PP_WHILE_105_I(p, o, s) BOOST_PP_IF(p(106, s), BOOST_PP_WHILE_106, s BOOST_PP_TUPLE_EAT_3)(p, o, o(106, s))
+# define BOOST_PP_WHILE_106_I(p, o, s) BOOST_PP_IF(p(107, s), BOOST_PP_WHILE_107, s BOOST_PP_TUPLE_EAT_3)(p, o, o(107, s))
+# define BOOST_PP_WHILE_107_I(p, o, s) BOOST_PP_IF(p(108, s), BOOST_PP_WHILE_108, s BOOST_PP_TUPLE_EAT_3)(p, o, o(108, s))
+# define BOOST_PP_WHILE_108_I(p, o, s) BOOST_PP_IF(p(109, s), BOOST_PP_WHILE_109, s BOOST_PP_TUPLE_EAT_3)(p, o, o(109, s))
+# define BOOST_PP_WHILE_109_I(p, o, s) BOOST_PP_IF(p(110, s), BOOST_PP_WHILE_110, s BOOST_PP_TUPLE_EAT_3)(p, o, o(110, s))
+# define BOOST_PP_WHILE_110_I(p, o, s) BOOST_PP_IF(p(111, s), BOOST_PP_WHILE_111, s BOOST_PP_TUPLE_EAT_3)(p, o, o(111, s))
+# define BOOST_PP_WHILE_111_I(p, o, s) BOOST_PP_IF(p(112, s), BOOST_PP_WHILE_112, s BOOST_PP_TUPLE_EAT_3)(p, o, o(112, s))
+# define BOOST_PP_WHILE_112_I(p, o, s) BOOST_PP_IF(p(113, s), BOOST_PP_WHILE_113, s BOOST_PP_TUPLE_EAT_3)(p, o, o(113, s))
+# define BOOST_PP_WHILE_113_I(p, o, s) BOOST_PP_IF(p(114, s), BOOST_PP_WHILE_114, s BOOST_PP_TUPLE_EAT_3)(p, o, o(114, s))
+# define BOOST_PP_WHILE_114_I(p, o, s) BOOST_PP_IF(p(115, s), BOOST_PP_WHILE_115, s BOOST_PP_TUPLE_EAT_3)(p, o, o(115, s))
+# define BOOST_PP_WHILE_115_I(p, o, s) BOOST_PP_IF(p(116, s), BOOST_PP_WHILE_116, s BOOST_PP_TUPLE_EAT_3)(p, o, o(116, s))
+# define BOOST_PP_WHILE_116_I(p, o, s) BOOST_PP_IF(p(117, s), BOOST_PP_WHILE_117, s BOOST_PP_TUPLE_EAT_3)(p, o, o(117, s))
+# define BOOST_PP_WHILE_117_I(p, o, s) BOOST_PP_IF(p(118, s), BOOST_PP_WHILE_118, s BOOST_PP_TUPLE_EAT_3)(p, o, o(118, s))
+# define BOOST_PP_WHILE_118_I(p, o, s) BOOST_PP_IF(p(119, s), BOOST_PP_WHILE_119, s BOOST_PP_TUPLE_EAT_3)(p, o, o(119, s))
+# define BOOST_PP_WHILE_119_I(p, o, s) BOOST_PP_IF(p(120, s), BOOST_PP_WHILE_120, s BOOST_PP_TUPLE_EAT_3)(p, o, o(120, s))
+# define BOOST_PP_WHILE_120_I(p, o, s) BOOST_PP_IF(p(121, s), BOOST_PP_WHILE_121, s BOOST_PP_TUPLE_EAT_3)(p, o, o(121, s))
+# define BOOST_PP_WHILE_121_I(p, o, s) BOOST_PP_IF(p(122, s), BOOST_PP_WHILE_122, s BOOST_PP_TUPLE_EAT_3)(p, o, o(122, s))
+# define BOOST_PP_WHILE_122_I(p, o, s) BOOST_PP_IF(p(123, s), BOOST_PP_WHILE_123, s BOOST_PP_TUPLE_EAT_3)(p, o, o(123, s))
+# define BOOST_PP_WHILE_123_I(p, o, s) BOOST_PP_IF(p(124, s), BOOST_PP_WHILE_124, s BOOST_PP_TUPLE_EAT_3)(p, o, o(124, s))
+# define BOOST_PP_WHILE_124_I(p, o, s) BOOST_PP_IF(p(125, s), BOOST_PP_WHILE_125, s BOOST_PP_TUPLE_EAT_3)(p, o, o(125, s))
+# define BOOST_PP_WHILE_125_I(p, o, s) BOOST_PP_IF(p(126, s), BOOST_PP_WHILE_126, s BOOST_PP_TUPLE_EAT_3)(p, o, o(126, s))
+# define BOOST_PP_WHILE_126_I(p, o, s) BOOST_PP_IF(p(127, s), BOOST_PP_WHILE_127, s BOOST_PP_TUPLE_EAT_3)(p, o, o(127, s))
+# define BOOST_PP_WHILE_127_I(p, o, s) BOOST_PP_IF(p(128, s), BOOST_PP_WHILE_128, s BOOST_PP_TUPLE_EAT_3)(p, o, o(128, s))
+# define BOOST_PP_WHILE_128_I(p, o, s) BOOST_PP_IF(p(129, s), BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, o(129, s))
+# define BOOST_PP_WHILE_129_I(p, o, s) BOOST_PP_IF(p(130, s), BOOST_PP_WHILE_130, s BOOST_PP_TUPLE_EAT_3)(p, o, o(130, s))
+# define BOOST_PP_WHILE_130_I(p, o, s) BOOST_PP_IF(p(131, s), BOOST_PP_WHILE_131, s BOOST_PP_TUPLE_EAT_3)(p, o, o(131, s))
+# define BOOST_PP_WHILE_131_I(p, o, s) BOOST_PP_IF(p(132, s), BOOST_PP_WHILE_132, s BOOST_PP_TUPLE_EAT_3)(p, o, o(132, s))
+# define BOOST_PP_WHILE_132_I(p, o, s) BOOST_PP_IF(p(133, s), BOOST_PP_WHILE_133, s BOOST_PP_TUPLE_EAT_3)(p, o, o(133, s))
+# define BOOST_PP_WHILE_133_I(p, o, s) BOOST_PP_IF(p(134, s), BOOST_PP_WHILE_134, s BOOST_PP_TUPLE_EAT_3)(p, o, o(134, s))
+# define BOOST_PP_WHILE_134_I(p, o, s) BOOST_PP_IF(p(135, s), BOOST_PP_WHILE_135, s BOOST_PP_TUPLE_EAT_3)(p, o, o(135, s))
+# define BOOST_PP_WHILE_135_I(p, o, s) BOOST_PP_IF(p(136, s), BOOST_PP_WHILE_136, s BOOST_PP_TUPLE_EAT_3)(p, o, o(136, s))
+# define BOOST_PP_WHILE_136_I(p, o, s) BOOST_PP_IF(p(137, s), BOOST_PP_WHILE_137, s BOOST_PP_TUPLE_EAT_3)(p, o, o(137, s))
+# define BOOST_PP_WHILE_137_I(p, o, s) BOOST_PP_IF(p(138, s), BOOST_PP_WHILE_138, s BOOST_PP_TUPLE_EAT_3)(p, o, o(138, s))
+# define BOOST_PP_WHILE_138_I(p, o, s) BOOST_PP_IF(p(139, s), BOOST_PP_WHILE_139, s BOOST_PP_TUPLE_EAT_3)(p, o, o(139, s))
+# define BOOST_PP_WHILE_139_I(p, o, s) BOOST_PP_IF(p(140, s), BOOST_PP_WHILE_140, s BOOST_PP_TUPLE_EAT_3)(p, o, o(140, s))
+# define BOOST_PP_WHILE_140_I(p, o, s) BOOST_PP_IF(p(141, s), BOOST_PP_WHILE_141, s BOOST_PP_TUPLE_EAT_3)(p, o, o(141, s))
+# define BOOST_PP_WHILE_141_I(p, o, s) BOOST_PP_IF(p(142, s), BOOST_PP_WHILE_142, s BOOST_PP_TUPLE_EAT_3)(p, o, o(142, s))
+# define BOOST_PP_WHILE_142_I(p, o, s) BOOST_PP_IF(p(143, s), BOOST_PP_WHILE_143, s BOOST_PP_TUPLE_EAT_3)(p, o, o(143, s))
+# define BOOST_PP_WHILE_143_I(p, o, s) BOOST_PP_IF(p(144, s), BOOST_PP_WHILE_144, s BOOST_PP_TUPLE_EAT_3)(p, o, o(144, s))
+# define BOOST_PP_WHILE_144_I(p, o, s) BOOST_PP_IF(p(145, s), BOOST_PP_WHILE_145, s BOOST_PP_TUPLE_EAT_3)(p, o, o(145, s))
+# define BOOST_PP_WHILE_145_I(p, o, s) BOOST_PP_IF(p(146, s), BOOST_PP_WHILE_146, s BOOST_PP_TUPLE_EAT_3)(p, o, o(146, s))
+# define BOOST_PP_WHILE_146_I(p, o, s) BOOST_PP_IF(p(147, s), BOOST_PP_WHILE_147, s BOOST_PP_TUPLE_EAT_3)(p, o, o(147, s))
+# define BOOST_PP_WHILE_147_I(p, o, s) BOOST_PP_IF(p(148, s), BOOST_PP_WHILE_148, s BOOST_PP_TUPLE_EAT_3)(p, o, o(148, s))
+# define BOOST_PP_WHILE_148_I(p, o, s) BOOST_PP_IF(p(149, s), BOOST_PP_WHILE_149, s BOOST_PP_TUPLE_EAT_3)(p, o, o(149, s))
+# define BOOST_PP_WHILE_149_I(p, o, s) BOOST_PP_IF(p(150, s), BOOST_PP_WHILE_150, s BOOST_PP_TUPLE_EAT_3)(p, o, o(150, s))
+# define BOOST_PP_WHILE_150_I(p, o, s) BOOST_PP_IF(p(151, s), BOOST_PP_WHILE_151, s BOOST_PP_TUPLE_EAT_3)(p, o, o(151, s))
+# define BOOST_PP_WHILE_151_I(p, o, s) BOOST_PP_IF(p(152, s), BOOST_PP_WHILE_152, s BOOST_PP_TUPLE_EAT_3)(p, o, o(152, s))
+# define BOOST_PP_WHILE_152_I(p, o, s) BOOST_PP_IF(p(153, s), BOOST_PP_WHILE_153, s BOOST_PP_TUPLE_EAT_3)(p, o, o(153, s))
+# define BOOST_PP_WHILE_153_I(p, o, s) BOOST_PP_IF(p(154, s), BOOST_PP_WHILE_154, s BOOST_PP_TUPLE_EAT_3)(p, o, o(154, s))
+# define BOOST_PP_WHILE_154_I(p, o, s) BOOST_PP_IF(p(155, s), BOOST_PP_WHILE_155, s BOOST_PP_TUPLE_EAT_3)(p, o, o(155, s))
+# define BOOST_PP_WHILE_155_I(p, o, s) BOOST_PP_IF(p(156, s), BOOST_PP_WHILE_156, s BOOST_PP_TUPLE_EAT_3)(p, o, o(156, s))
+# define BOOST_PP_WHILE_156_I(p, o, s) BOOST_PP_IF(p(157, s), BOOST_PP_WHILE_157, s BOOST_PP_TUPLE_EAT_3)(p, o, o(157, s))
+# define BOOST_PP_WHILE_157_I(p, o, s) BOOST_PP_IF(p(158, s), BOOST_PP_WHILE_158, s BOOST_PP_TUPLE_EAT_3)(p, o, o(158, s))
+# define BOOST_PP_WHILE_158_I(p, o, s) BOOST_PP_IF(p(159, s), BOOST_PP_WHILE_159, s BOOST_PP_TUPLE_EAT_3)(p, o, o(159, s))
+# define BOOST_PP_WHILE_159_I(p, o, s) BOOST_PP_IF(p(160, s), BOOST_PP_WHILE_160, s BOOST_PP_TUPLE_EAT_3)(p, o, o(160, s))
+# define BOOST_PP_WHILE_160_I(p, o, s) BOOST_PP_IF(p(161, s), BOOST_PP_WHILE_161, s BOOST_PP_TUPLE_EAT_3)(p, o, o(161, s))
+# define BOOST_PP_WHILE_161_I(p, o, s) BOOST_PP_IF(p(162, s), BOOST_PP_WHILE_162, s BOOST_PP_TUPLE_EAT_3)(p, o, o(162, s))
+# define BOOST_PP_WHILE_162_I(p, o, s) BOOST_PP_IF(p(163, s), BOOST_PP_WHILE_163, s BOOST_PP_TUPLE_EAT_3)(p, o, o(163, s))
+# define BOOST_PP_WHILE_163_I(p, o, s) BOOST_PP_IF(p(164, s), BOOST_PP_WHILE_164, s BOOST_PP_TUPLE_EAT_3)(p, o, o(164, s))
+# define BOOST_PP_WHILE_164_I(p, o, s) BOOST_PP_IF(p(165, s), BOOST_PP_WHILE_165, s BOOST_PP_TUPLE_EAT_3)(p, o, o(165, s))
+# define BOOST_PP_WHILE_165_I(p, o, s) BOOST_PP_IF(p(166, s), BOOST_PP_WHILE_166, s BOOST_PP_TUPLE_EAT_3)(p, o, o(166, s))
+# define BOOST_PP_WHILE_166_I(p, o, s) BOOST_PP_IF(p(167, s), BOOST_PP_WHILE_167, s BOOST_PP_TUPLE_EAT_3)(p, o, o(167, s))
+# define BOOST_PP_WHILE_167_I(p, o, s) BOOST_PP_IF(p(168, s), BOOST_PP_WHILE_168, s BOOST_PP_TUPLE_EAT_3)(p, o, o(168, s))
+# define BOOST_PP_WHILE_168_I(p, o, s) BOOST_PP_IF(p(169, s), BOOST_PP_WHILE_169, s BOOST_PP_TUPLE_EAT_3)(p, o, o(169, s))
+# define BOOST_PP_WHILE_169_I(p, o, s) BOOST_PP_IF(p(170, s), BOOST_PP_WHILE_170, s BOOST_PP_TUPLE_EAT_3)(p, o, o(170, s))
+# define BOOST_PP_WHILE_170_I(p, o, s) BOOST_PP_IF(p(171, s), BOOST_PP_WHILE_171, s BOOST_PP_TUPLE_EAT_3)(p, o, o(171, s))
+# define BOOST_PP_WHILE_171_I(p, o, s) BOOST_PP_IF(p(172, s), BOOST_PP_WHILE_172, s BOOST_PP_TUPLE_EAT_3)(p, o, o(172, s))
+# define BOOST_PP_WHILE_172_I(p, o, s) BOOST_PP_IF(p(173, s), BOOST_PP_WHILE_173, s BOOST_PP_TUPLE_EAT_3)(p, o, o(173, s))
+# define BOOST_PP_WHILE_173_I(p, o, s) BOOST_PP_IF(p(174, s), BOOST_PP_WHILE_174, s BOOST_PP_TUPLE_EAT_3)(p, o, o(174, s))
+# define BOOST_PP_WHILE_174_I(p, o, s) BOOST_PP_IF(p(175, s), BOOST_PP_WHILE_175, s BOOST_PP_TUPLE_EAT_3)(p, o, o(175, s))
+# define BOOST_PP_WHILE_175_I(p, o, s) BOOST_PP_IF(p(176, s), BOOST_PP_WHILE_176, s BOOST_PP_TUPLE_EAT_3)(p, o, o(176, s))
+# define BOOST_PP_WHILE_176_I(p, o, s) BOOST_PP_IF(p(177, s), BOOST_PP_WHILE_177, s BOOST_PP_TUPLE_EAT_3)(p, o, o(177, s))
+# define BOOST_PP_WHILE_177_I(p, o, s) BOOST_PP_IF(p(178, s), BOOST_PP_WHILE_178, s BOOST_PP_TUPLE_EAT_3)(p, o, o(178, s))
+# define BOOST_PP_WHILE_178_I(p, o, s) BOOST_PP_IF(p(179, s), BOOST_PP_WHILE_179, s BOOST_PP_TUPLE_EAT_3)(p, o, o(179, s))
+# define BOOST_PP_WHILE_179_I(p, o, s) BOOST_PP_IF(p(180, s), BOOST_PP_WHILE_180, s BOOST_PP_TUPLE_EAT_3)(p, o, o(180, s))
+# define BOOST_PP_WHILE_180_I(p, o, s) BOOST_PP_IF(p(181, s), BOOST_PP_WHILE_181, s BOOST_PP_TUPLE_EAT_3)(p, o, o(181, s))
+# define BOOST_PP_WHILE_181_I(p, o, s) BOOST_PP_IF(p(182, s), BOOST_PP_WHILE_182, s BOOST_PP_TUPLE_EAT_3)(p, o, o(182, s))
+# define BOOST_PP_WHILE_182_I(p, o, s) BOOST_PP_IF(p(183, s), BOOST_PP_WHILE_183, s BOOST_PP_TUPLE_EAT_3)(p, o, o(183, s))
+# define BOOST_PP_WHILE_183_I(p, o, s) BOOST_PP_IF(p(184, s), BOOST_PP_WHILE_184, s BOOST_PP_TUPLE_EAT_3)(p, o, o(184, s))
+# define BOOST_PP_WHILE_184_I(p, o, s) BOOST_PP_IF(p(185, s), BOOST_PP_WHILE_185, s BOOST_PP_TUPLE_EAT_3)(p, o, o(185, s))
+# define BOOST_PP_WHILE_185_I(p, o, s) BOOST_PP_IF(p(186, s), BOOST_PP_WHILE_186, s BOOST_PP_TUPLE_EAT_3)(p, o, o(186, s))
+# define BOOST_PP_WHILE_186_I(p, o, s) BOOST_PP_IF(p(187, s), BOOST_PP_WHILE_187, s BOOST_PP_TUPLE_EAT_3)(p, o, o(187, s))
+# define BOOST_PP_WHILE_187_I(p, o, s) BOOST_PP_IF(p(188, s), BOOST_PP_WHILE_188, s BOOST_PP_TUPLE_EAT_3)(p, o, o(188, s))
+# define BOOST_PP_WHILE_188_I(p, o, s) BOOST_PP_IF(p(189, s), BOOST_PP_WHILE_189, s BOOST_PP_TUPLE_EAT_3)(p, o, o(189, s))
+# define BOOST_PP_WHILE_189_I(p, o, s) BOOST_PP_IF(p(190, s), BOOST_PP_WHILE_190, s BOOST_PP_TUPLE_EAT_3)(p, o, o(190, s))
+# define BOOST_PP_WHILE_190_I(p, o, s) BOOST_PP_IF(p(191, s), BOOST_PP_WHILE_191, s BOOST_PP_TUPLE_EAT_3)(p, o, o(191, s))
+# define BOOST_PP_WHILE_191_I(p, o, s) BOOST_PP_IF(p(192, s), BOOST_PP_WHILE_192, s BOOST_PP_TUPLE_EAT_3)(p, o, o(192, s))
+# define BOOST_PP_WHILE_192_I(p, o, s) BOOST_PP_IF(p(193, s), BOOST_PP_WHILE_193, s BOOST_PP_TUPLE_EAT_3)(p, o, o(193, s))
+# define BOOST_PP_WHILE_193_I(p, o, s) BOOST_PP_IF(p(194, s), BOOST_PP_WHILE_194, s BOOST_PP_TUPLE_EAT_3)(p, o, o(194, s))
+# define BOOST_PP_WHILE_194_I(p, o, s) BOOST_PP_IF(p(195, s), BOOST_PP_WHILE_195, s BOOST_PP_TUPLE_EAT_3)(p, o, o(195, s))
+# define BOOST_PP_WHILE_195_I(p, o, s) BOOST_PP_IF(p(196, s), BOOST_PP_WHILE_196, s BOOST_PP_TUPLE_EAT_3)(p, o, o(196, s))
+# define BOOST_PP_WHILE_196_I(p, o, s) BOOST_PP_IF(p(197, s), BOOST_PP_WHILE_197, s BOOST_PP_TUPLE_EAT_3)(p, o, o(197, s))
+# define BOOST_PP_WHILE_197_I(p, o, s) BOOST_PP_IF(p(198, s), BOOST_PP_WHILE_198, s BOOST_PP_TUPLE_EAT_3)(p, o, o(198, s))
+# define BOOST_PP_WHILE_198_I(p, o, s) BOOST_PP_IF(p(199, s), BOOST_PP_WHILE_199, s BOOST_PP_TUPLE_EAT_3)(p, o, o(199, s))
+# define BOOST_PP_WHILE_199_I(p, o, s) BOOST_PP_IF(p(200, s), BOOST_PP_WHILE_200, s BOOST_PP_TUPLE_EAT_3)(p, o, o(200, s))
+# define BOOST_PP_WHILE_200_I(p, o, s) BOOST_PP_IF(p(201, s), BOOST_PP_WHILE_201, s BOOST_PP_TUPLE_EAT_3)(p, o, o(201, s))
+# define BOOST_PP_WHILE_201_I(p, o, s) BOOST_PP_IF(p(202, s), BOOST_PP_WHILE_202, s BOOST_PP_TUPLE_EAT_3)(p, o, o(202, s))
+# define BOOST_PP_WHILE_202_I(p, o, s) BOOST_PP_IF(p(203, s), BOOST_PP_WHILE_203, s BOOST_PP_TUPLE_EAT_3)(p, o, o(203, s))
+# define BOOST_PP_WHILE_203_I(p, o, s) BOOST_PP_IF(p(204, s), BOOST_PP_WHILE_204, s BOOST_PP_TUPLE_EAT_3)(p, o, o(204, s))
+# define BOOST_PP_WHILE_204_I(p, o, s) BOOST_PP_IF(p(205, s), BOOST_PP_WHILE_205, s BOOST_PP_TUPLE_EAT_3)(p, o, o(205, s))
+# define BOOST_PP_WHILE_205_I(p, o, s) BOOST_PP_IF(p(206, s), BOOST_PP_WHILE_206, s BOOST_PP_TUPLE_EAT_3)(p, o, o(206, s))
+# define BOOST_PP_WHILE_206_I(p, o, s) BOOST_PP_IF(p(207, s), BOOST_PP_WHILE_207, s BOOST_PP_TUPLE_EAT_3)(p, o, o(207, s))
+# define BOOST_PP_WHILE_207_I(p, o, s) BOOST_PP_IF(p(208, s), BOOST_PP_WHILE_208, s BOOST_PP_TUPLE_EAT_3)(p, o, o(208, s))
+# define BOOST_PP_WHILE_208_I(p, o, s) BOOST_PP_IF(p(209, s), BOOST_PP_WHILE_209, s BOOST_PP_TUPLE_EAT_3)(p, o, o(209, s))
+# define BOOST_PP_WHILE_209_I(p, o, s) BOOST_PP_IF(p(210, s), BOOST_PP_WHILE_210, s BOOST_PP_TUPLE_EAT_3)(p, o, o(210, s))
+# define BOOST_PP_WHILE_210_I(p, o, s) BOOST_PP_IF(p(211, s), BOOST_PP_WHILE_211, s BOOST_PP_TUPLE_EAT_3)(p, o, o(211, s))
+# define BOOST_PP_WHILE_211_I(p, o, s) BOOST_PP_IF(p(212, s), BOOST_PP_WHILE_212, s BOOST_PP_TUPLE_EAT_3)(p, o, o(212, s))
+# define BOOST_PP_WHILE_212_I(p, o, s) BOOST_PP_IF(p(213, s), BOOST_PP_WHILE_213, s BOOST_PP_TUPLE_EAT_3)(p, o, o(213, s))
+# define BOOST_PP_WHILE_213_I(p, o, s) BOOST_PP_IF(p(214, s), BOOST_PP_WHILE_214, s BOOST_PP_TUPLE_EAT_3)(p, o, o(214, s))
+# define BOOST_PP_WHILE_214_I(p, o, s) BOOST_PP_IF(p(215, s), BOOST_PP_WHILE_215, s BOOST_PP_TUPLE_EAT_3)(p, o, o(215, s))
+# define BOOST_PP_WHILE_215_I(p, o, s) BOOST_PP_IF(p(216, s), BOOST_PP_WHILE_216, s BOOST_PP_TUPLE_EAT_3)(p, o, o(216, s))
+# define BOOST_PP_WHILE_216_I(p, o, s) BOOST_PP_IF(p(217, s), BOOST_PP_WHILE_217, s BOOST_PP_TUPLE_EAT_3)(p, o, o(217, s))
+# define BOOST_PP_WHILE_217_I(p, o, s) BOOST_PP_IF(p(218, s), BOOST_PP_WHILE_218, s BOOST_PP_TUPLE_EAT_3)(p, o, o(218, s))
+# define BOOST_PP_WHILE_218_I(p, o, s) BOOST_PP_IF(p(219, s), BOOST_PP_WHILE_219, s BOOST_PP_TUPLE_EAT_3)(p, o, o(219, s))
+# define BOOST_PP_WHILE_219_I(p, o, s) BOOST_PP_IF(p(220, s), BOOST_PP_WHILE_220, s BOOST_PP_TUPLE_EAT_3)(p, o, o(220, s))
+# define BOOST_PP_WHILE_220_I(p, o, s) BOOST_PP_IF(p(221, s), BOOST_PP_WHILE_221, s BOOST_PP_TUPLE_EAT_3)(p, o, o(221, s))
+# define BOOST_PP_WHILE_221_I(p, o, s) BOOST_PP_IF(p(222, s), BOOST_PP_WHILE_222, s BOOST_PP_TUPLE_EAT_3)(p, o, o(222, s))
+# define BOOST_PP_WHILE_222_I(p, o, s) BOOST_PP_IF(p(223, s), BOOST_PP_WHILE_223, s BOOST_PP_TUPLE_EAT_3)(p, o, o(223, s))
+# define BOOST_PP_WHILE_223_I(p, o, s) BOOST_PP_IF(p(224, s), BOOST_PP_WHILE_224, s BOOST_PP_TUPLE_EAT_3)(p, o, o(224, s))
+# define BOOST_PP_WHILE_224_I(p, o, s) BOOST_PP_IF(p(225, s), BOOST_PP_WHILE_225, s BOOST_PP_TUPLE_EAT_3)(p, o, o(225, s))
+# define BOOST_PP_WHILE_225_I(p, o, s) BOOST_PP_IF(p(226, s), BOOST_PP_WHILE_226, s BOOST_PP_TUPLE_EAT_3)(p, o, o(226, s))
+# define BOOST_PP_WHILE_226_I(p, o, s) BOOST_PP_IF(p(227, s), BOOST_PP_WHILE_227, s BOOST_PP_TUPLE_EAT_3)(p, o, o(227, s))
+# define BOOST_PP_WHILE_227_I(p, o, s) BOOST_PP_IF(p(228, s), BOOST_PP_WHILE_228, s BOOST_PP_TUPLE_EAT_3)(p, o, o(228, s))
+# define BOOST_PP_WHILE_228_I(p, o, s) BOOST_PP_IF(p(229, s), BOOST_PP_WHILE_229, s BOOST_PP_TUPLE_EAT_3)(p, o, o(229, s))
+# define BOOST_PP_WHILE_229_I(p, o, s) BOOST_PP_IF(p(230, s), BOOST_PP_WHILE_230, s BOOST_PP_TUPLE_EAT_3)(p, o, o(230, s))
+# define BOOST_PP_WHILE_230_I(p, o, s) BOOST_PP_IF(p(231, s), BOOST_PP_WHILE_231, s BOOST_PP_TUPLE_EAT_3)(p, o, o(231, s))
+# define BOOST_PP_WHILE_231_I(p, o, s) BOOST_PP_IF(p(232, s), BOOST_PP_WHILE_232, s BOOST_PP_TUPLE_EAT_3)(p, o, o(232, s))
+# define BOOST_PP_WHILE_232_I(p, o, s) BOOST_PP_IF(p(233, s), BOOST_PP_WHILE_233, s BOOST_PP_TUPLE_EAT_3)(p, o, o(233, s))
+# define BOOST_PP_WHILE_233_I(p, o, s) BOOST_PP_IF(p(234, s), BOOST_PP_WHILE_234, s BOOST_PP_TUPLE_EAT_3)(p, o, o(234, s))
+# define BOOST_PP_WHILE_234_I(p, o, s) BOOST_PP_IF(p(235, s), BOOST_PP_WHILE_235, s BOOST_PP_TUPLE_EAT_3)(p, o, o(235, s))
+# define BOOST_PP_WHILE_235_I(p, o, s) BOOST_PP_IF(p(236, s), BOOST_PP_WHILE_236, s BOOST_PP_TUPLE_EAT_3)(p, o, o(236, s))
+# define BOOST_PP_WHILE_236_I(p, o, s) BOOST_PP_IF(p(237, s), BOOST_PP_WHILE_237, s BOOST_PP_TUPLE_EAT_3)(p, o, o(237, s))
+# define BOOST_PP_WHILE_237_I(p, o, s) BOOST_PP_IF(p(238, s), BOOST_PP_WHILE_238, s BOOST_PP_TUPLE_EAT_3)(p, o, o(238, s))
+# define BOOST_PP_WHILE_238_I(p, o, s) BOOST_PP_IF(p(239, s), BOOST_PP_WHILE_239, s BOOST_PP_TUPLE_EAT_3)(p, o, o(239, s))
+# define BOOST_PP_WHILE_239_I(p, o, s) BOOST_PP_IF(p(240, s), BOOST_PP_WHILE_240, s BOOST_PP_TUPLE_EAT_3)(p, o, o(240, s))
+# define BOOST_PP_WHILE_240_I(p, o, s) BOOST_PP_IF(p(241, s), BOOST_PP_WHILE_241, s BOOST_PP_TUPLE_EAT_3)(p, o, o(241, s))
+# define BOOST_PP_WHILE_241_I(p, o, s) BOOST_PP_IF(p(242, s), BOOST_PP_WHILE_242, s BOOST_PP_TUPLE_EAT_3)(p, o, o(242, s))
+# define BOOST_PP_WHILE_242_I(p, o, s) BOOST_PP_IF(p(243, s), BOOST_PP_WHILE_243, s BOOST_PP_TUPLE_EAT_3)(p, o, o(243, s))
+# define BOOST_PP_WHILE_243_I(p, o, s) BOOST_PP_IF(p(244, s), BOOST_PP_WHILE_244, s BOOST_PP_TUPLE_EAT_3)(p, o, o(244, s))
+# define BOOST_PP_WHILE_244_I(p, o, s) BOOST_PP_IF(p(245, s), BOOST_PP_WHILE_245, s BOOST_PP_TUPLE_EAT_3)(p, o, o(245, s))
+# define BOOST_PP_WHILE_245_I(p, o, s) BOOST_PP_IF(p(246, s), BOOST_PP_WHILE_246, s BOOST_PP_TUPLE_EAT_3)(p, o, o(246, s))
+# define BOOST_PP_WHILE_246_I(p, o, s) BOOST_PP_IF(p(247, s), BOOST_PP_WHILE_247, s BOOST_PP_TUPLE_EAT_3)(p, o, o(247, s))
+# define BOOST_PP_WHILE_247_I(p, o, s) BOOST_PP_IF(p(248, s), BOOST_PP_WHILE_248, s BOOST_PP_TUPLE_EAT_3)(p, o, o(248, s))
+# define BOOST_PP_WHILE_248_I(p, o, s) BOOST_PP_IF(p(249, s), BOOST_PP_WHILE_249, s BOOST_PP_TUPLE_EAT_3)(p, o, o(249, s))
+# define BOOST_PP_WHILE_249_I(p, o, s) BOOST_PP_IF(p(250, s), BOOST_PP_WHILE_250, s BOOST_PP_TUPLE_EAT_3)(p, o, o(250, s))
+# define BOOST_PP_WHILE_250_I(p, o, s) BOOST_PP_IF(p(251, s), BOOST_PP_WHILE_251, s BOOST_PP_TUPLE_EAT_3)(p, o, o(251, s))
+# define BOOST_PP_WHILE_251_I(p, o, s) BOOST_PP_IF(p(252, s), BOOST_PP_WHILE_252, s BOOST_PP_TUPLE_EAT_3)(p, o, o(252, s))
+# define BOOST_PP_WHILE_252_I(p, o, s) BOOST_PP_IF(p(253, s), BOOST_PP_WHILE_253, s BOOST_PP_TUPLE_EAT_3)(p, o, o(253, s))
+# define BOOST_PP_WHILE_253_I(p, o, s) BOOST_PP_IF(p(254, s), BOOST_PP_WHILE_254, s BOOST_PP_TUPLE_EAT_3)(p, o, o(254, s))
+# define BOOST_PP_WHILE_254_I(p, o, s) BOOST_PP_IF(p(255, s), BOOST_PP_WHILE_255, s BOOST_PP_TUPLE_EAT_3)(p, o, o(255, s))
+# define BOOST_PP_WHILE_255_I(p, o, s) BOOST_PP_IF(p(256, s), BOOST_PP_WHILE_256, s BOOST_PP_TUPLE_EAT_3)(p, o, o(256, s))
+# define BOOST_PP_WHILE_256_I(p, o, s) BOOST_PP_IF(p(257, s), BOOST_PP_WHILE_257, s BOOST_PP_TUPLE_EAT_3)(p, o, o(257, s))
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/control/detail/msvc/while.hpp b/vendor/pdalboost/boost/preprocessor/control/detail/msvc/while.hpp
new file mode 100644
index 0000000..e543e41
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/control/detail/msvc/while.hpp
@@ -0,0 +1,277 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_MSVC_WHILE_HPP
+# define BOOST_PREPROCESSOR_CONTROL_DETAIL_MSVC_WHILE_HPP
+#
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_IF(p(2, s), BOOST_PP_WHILE_2, s BOOST_PP_TUPLE_EAT_3)(p, o, o(2, s))
+# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_IF(p(3, s), BOOST_PP_WHILE_3, s BOOST_PP_TUPLE_EAT_3)(p, o, o(3, s))
+# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_IF(p(4, s), BOOST_PP_WHILE_4, s BOOST_PP_TUPLE_EAT_3)(p, o, o(4, s))
+# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_IF(p(5, s), BOOST_PP_WHILE_5, s BOOST_PP_TUPLE_EAT_3)(p, o, o(5, s))
+# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_IF(p(6, s), BOOST_PP_WHILE_6, s BOOST_PP_TUPLE_EAT_3)(p, o, o(6, s))
+# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_IF(p(7, s), BOOST_PP_WHILE_7, s BOOST_PP_TUPLE_EAT_3)(p, o, o(7, s))
+# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_IF(p(8, s), BOOST_PP_WHILE_8, s BOOST_PP_TUPLE_EAT_3)(p, o, o(8, s))
+# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_IF(p(9, s), BOOST_PP_WHILE_9, s BOOST_PP_TUPLE_EAT_3)(p, o, o(9, s))
+# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_IF(p(10, s), BOOST_PP_WHILE_10, s BOOST_PP_TUPLE_EAT_3)(p, o, o(10, s))
+# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_IF(p(11, s), BOOST_PP_WHILE_11, s BOOST_PP_TUPLE_EAT_3)(p, o, o(11, s))
+# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_IF(p(12, s), BOOST_PP_WHILE_12, s BOOST_PP_TUPLE_EAT_3)(p, o, o(12, s))
+# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_IF(p(13, s), BOOST_PP_WHILE_13, s BOOST_PP_TUPLE_EAT_3)(p, o, o(13, s))
+# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_IF(p(14, s), BOOST_PP_WHILE_14, s BOOST_PP_TUPLE_EAT_3)(p, o, o(14, s))
+# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_IF(p(15, s), BOOST_PP_WHILE_15, s BOOST_PP_TUPLE_EAT_3)(p, o, o(15, s))
+# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_IF(p(16, s), BOOST_PP_WHILE_16, s BOOST_PP_TUPLE_EAT_3)(p, o, o(16, s))
+# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_IF(p(17, s), BOOST_PP_WHILE_17, s BOOST_PP_TUPLE_EAT_3)(p, o, o(17, s))
+# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_IF(p(18, s), BOOST_PP_WHILE_18, s BOOST_PP_TUPLE_EAT_3)(p, o, o(18, s))
+# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_IF(p(19, s), BOOST_PP_WHILE_19, s BOOST_PP_TUPLE_EAT_3)(p, o, o(19, s))
+# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_IF(p(20, s), BOOST_PP_WHILE_20, s BOOST_PP_TUPLE_EAT_3)(p, o, o(20, s))
+# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_IF(p(21, s), BOOST_PP_WHILE_21, s BOOST_PP_TUPLE_EAT_3)(p, o, o(21, s))
+# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_IF(p(22, s), BOOST_PP_WHILE_22, s BOOST_PP_TUPLE_EAT_3)(p, o, o(22, s))
+# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_IF(p(23, s), BOOST_PP_WHILE_23, s BOOST_PP_TUPLE_EAT_3)(p, o, o(23, s))
+# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_IF(p(24, s), BOOST_PP_WHILE_24, s BOOST_PP_TUPLE_EAT_3)(p, o, o(24, s))
+# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_IF(p(25, s), BOOST_PP_WHILE_25, s BOOST_PP_TUPLE_EAT_3)(p, o, o(25, s))
+# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_IF(p(26, s), BOOST_PP_WHILE_26, s BOOST_PP_TUPLE_EAT_3)(p, o, o(26, s))
+# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_IF(p(27, s), BOOST_PP_WHILE_27, s BOOST_PP_TUPLE_EAT_3)(p, o, o(27, s))
+# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_IF(p(28, s), BOOST_PP_WHILE_28, s BOOST_PP_TUPLE_EAT_3)(p, o, o(28, s))
+# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_IF(p(29, s), BOOST_PP_WHILE_29, s BOOST_PP_TUPLE_EAT_3)(p, o, o(29, s))
+# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_IF(p(30, s), BOOST_PP_WHILE_30, s BOOST_PP_TUPLE_EAT_3)(p, o, o(30, s))
+# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_IF(p(31, s), BOOST_PP_WHILE_31, s BOOST_PP_TUPLE_EAT_3)(p, o, o(31, s))
+# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_IF(p(32, s), BOOST_PP_WHILE_32, s BOOST_PP_TUPLE_EAT_3)(p, o, o(32, s))
+# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_IF(p(33, s), BOOST_PP_WHILE_33, s BOOST_PP_TUPLE_EAT_3)(p, o, o(33, s))
+# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_IF(p(34, s), BOOST_PP_WHILE_34, s BOOST_PP_TUPLE_EAT_3)(p, o, o(34, s))
+# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_IF(p(35, s), BOOST_PP_WHILE_35, s BOOST_PP_TUPLE_EAT_3)(p, o, o(35, s))
+# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_IF(p(36, s), BOOST_PP_WHILE_36, s BOOST_PP_TUPLE_EAT_3)(p, o, o(36, s))
+# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_IF(p(37, s), BOOST_PP_WHILE_37, s BOOST_PP_TUPLE_EAT_3)(p, o, o(37, s))
+# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_IF(p(38, s), BOOST_PP_WHILE_38, s BOOST_PP_TUPLE_EAT_3)(p, o, o(38, s))
+# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_IF(p(39, s), BOOST_PP_WHILE_39, s BOOST_PP_TUPLE_EAT_3)(p, o, o(39, s))
+# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_IF(p(40, s), BOOST_PP_WHILE_40, s BOOST_PP_TUPLE_EAT_3)(p, o, o(40, s))
+# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_IF(p(41, s), BOOST_PP_WHILE_41, s BOOST_PP_TUPLE_EAT_3)(p, o, o(41, s))
+# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_IF(p(42, s), BOOST_PP_WHILE_42, s BOOST_PP_TUPLE_EAT_3)(p, o, o(42, s))
+# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_IF(p(43, s), BOOST_PP_WHILE_43, s BOOST_PP_TUPLE_EAT_3)(p, o, o(43, s))
+# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_IF(p(44, s), BOOST_PP_WHILE_44, s BOOST_PP_TUPLE_EAT_3)(p, o, o(44, s))
+# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_IF(p(45, s), BOOST_PP_WHILE_45, s BOOST_PP_TUPLE_EAT_3)(p, o, o(45, s))
+# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_IF(p(46, s), BOOST_PP_WHILE_46, s BOOST_PP_TUPLE_EAT_3)(p, o, o(46, s))
+# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_IF(p(47, s), BOOST_PP_WHILE_47, s BOOST_PP_TUPLE_EAT_3)(p, o, o(47, s))
+# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_IF(p(48, s), BOOST_PP_WHILE_48, s BOOST_PP_TUPLE_EAT_3)(p, o, o(48, s))
+# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_IF(p(49, s), BOOST_PP_WHILE_49, s BOOST_PP_TUPLE_EAT_3)(p, o, o(49, s))
+# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_IF(p(50, s), BOOST_PP_WHILE_50, s BOOST_PP_TUPLE_EAT_3)(p, o, o(50, s))
+# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_IF(p(51, s), BOOST_PP_WHILE_51, s BOOST_PP_TUPLE_EAT_3)(p, o, o(51, s))
+# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_IF(p(52, s), BOOST_PP_WHILE_52, s BOOST_PP_TUPLE_EAT_3)(p, o, o(52, s))
+# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_IF(p(53, s), BOOST_PP_WHILE_53, s BOOST_PP_TUPLE_EAT_3)(p, o, o(53, s))
+# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_IF(p(54, s), BOOST_PP_WHILE_54, s BOOST_PP_TUPLE_EAT_3)(p, o, o(54, s))
+# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_IF(p(55, s), BOOST_PP_WHILE_55, s BOOST_PP_TUPLE_EAT_3)(p, o, o(55, s))
+# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_IF(p(56, s), BOOST_PP_WHILE_56, s BOOST_PP_TUPLE_EAT_3)(p, o, o(56, s))
+# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_IF(p(57, s), BOOST_PP_WHILE_57, s BOOST_PP_TUPLE_EAT_3)(p, o, o(57, s))
+# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_IF(p(58, s), BOOST_PP_WHILE_58, s BOOST_PP_TUPLE_EAT_3)(p, o, o(58, s))
+# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_IF(p(59, s), BOOST_PP_WHILE_59, s BOOST_PP_TUPLE_EAT_3)(p, o, o(59, s))
+# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_IF(p(60, s), BOOST_PP_WHILE_60, s BOOST_PP_TUPLE_EAT_3)(p, o, o(60, s))
+# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_IF(p(61, s), BOOST_PP_WHILE_61, s BOOST_PP_TUPLE_EAT_3)(p, o, o(61, s))
+# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_IF(p(62, s), BOOST_PP_WHILE_62, s BOOST_PP_TUPLE_EAT_3)(p, o, o(62, s))
+# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_IF(p(63, s), BOOST_PP_WHILE_63, s BOOST_PP_TUPLE_EAT_3)(p, o, o(63, s))
+# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_IF(p(64, s), BOOST_PP_WHILE_64, s BOOST_PP_TUPLE_EAT_3)(p, o, o(64, s))
+# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_IF(p(65, s), BOOST_PP_WHILE_65, s BOOST_PP_TUPLE_EAT_3)(p, o, o(65, s))
+# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_IF(p(66, s), BOOST_PP_WHILE_66, s BOOST_PP_TUPLE_EAT_3)(p, o, o(66, s))
+# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_IF(p(67, s), BOOST_PP_WHILE_67, s BOOST_PP_TUPLE_EAT_3)(p, o, o(67, s))
+# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_IF(p(68, s), BOOST_PP_WHILE_68, s BOOST_PP_TUPLE_EAT_3)(p, o, o(68, s))
+# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_IF(p(69, s), BOOST_PP_WHILE_69, s BOOST_PP_TUPLE_EAT_3)(p, o, o(69, s))
+# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_IF(p(70, s), BOOST_PP_WHILE_70, s BOOST_PP_TUPLE_EAT_3)(p, o, o(70, s))
+# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_IF(p(71, s), BOOST_PP_WHILE_71, s BOOST_PP_TUPLE_EAT_3)(p, o, o(71, s))
+# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_IF(p(72, s), BOOST_PP_WHILE_72, s BOOST_PP_TUPLE_EAT_3)(p, o, o(72, s))
+# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_IF(p(73, s), BOOST_PP_WHILE_73, s BOOST_PP_TUPLE_EAT_3)(p, o, o(73, s))
+# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_IF(p(74, s), BOOST_PP_WHILE_74, s BOOST_PP_TUPLE_EAT_3)(p, o, o(74, s))
+# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_IF(p(75, s), BOOST_PP_WHILE_75, s BOOST_PP_TUPLE_EAT_3)(p, o, o(75, s))
+# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_IF(p(76, s), BOOST_PP_WHILE_76, s BOOST_PP_TUPLE_EAT_3)(p, o, o(76, s))
+# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_IF(p(77, s), BOOST_PP_WHILE_77, s BOOST_PP_TUPLE_EAT_3)(p, o, o(77, s))
+# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_IF(p(78, s), BOOST_PP_WHILE_78, s BOOST_PP_TUPLE_EAT_3)(p, o, o(78, s))
+# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_IF(p(79, s), BOOST_PP_WHILE_79, s BOOST_PP_TUPLE_EAT_3)(p, o, o(79, s))
+# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_IF(p(80, s), BOOST_PP_WHILE_80, s BOOST_PP_TUPLE_EAT_3)(p, o, o(80, s))
+# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_IF(p(81, s), BOOST_PP_WHILE_81, s BOOST_PP_TUPLE_EAT_3)(p, o, o(81, s))
+# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_IF(p(82, s), BOOST_PP_WHILE_82, s BOOST_PP_TUPLE_EAT_3)(p, o, o(82, s))
+# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_IF(p(83, s), BOOST_PP_WHILE_83, s BOOST_PP_TUPLE_EAT_3)(p, o, o(83, s))
+# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_IF(p(84, s), BOOST_PP_WHILE_84, s BOOST_PP_TUPLE_EAT_3)(p, o, o(84, s))
+# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_IF(p(85, s), BOOST_PP_WHILE_85, s BOOST_PP_TUPLE_EAT_3)(p, o, o(85, s))
+# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_IF(p(86, s), BOOST_PP_WHILE_86, s BOOST_PP_TUPLE_EAT_3)(p, o, o(86, s))
+# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_IF(p(87, s), BOOST_PP_WHILE_87, s BOOST_PP_TUPLE_EAT_3)(p, o, o(87, s))
+# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_IF(p(88, s), BOOST_PP_WHILE_88, s BOOST_PP_TUPLE_EAT_3)(p, o, o(88, s))
+# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_IF(p(89, s), BOOST_PP_WHILE_89, s BOOST_PP_TUPLE_EAT_3)(p, o, o(89, s))
+# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_IF(p(90, s), BOOST_PP_WHILE_90, s BOOST_PP_TUPLE_EAT_3)(p, o, o(90, s))
+# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_IF(p(91, s), BOOST_PP_WHILE_91, s BOOST_PP_TUPLE_EAT_3)(p, o, o(91, s))
+# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_IF(p(92, s), BOOST_PP_WHILE_92, s BOOST_PP_TUPLE_EAT_3)(p, o, o(92, s))
+# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_IF(p(93, s), BOOST_PP_WHILE_93, s BOOST_PP_TUPLE_EAT_3)(p, o, o(93, s))
+# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_IF(p(94, s), BOOST_PP_WHILE_94, s BOOST_PP_TUPLE_EAT_3)(p, o, o(94, s))
+# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_IF(p(95, s), BOOST_PP_WHILE_95, s BOOST_PP_TUPLE_EAT_3)(p, o, o(95, s))
+# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_IF(p(96, s), BOOST_PP_WHILE_96, s BOOST_PP_TUPLE_EAT_3)(p, o, o(96, s))
+# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_IF(p(97, s), BOOST_PP_WHILE_97, s BOOST_PP_TUPLE_EAT_3)(p, o, o(97, s))
+# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_IF(p(98, s), BOOST_PP_WHILE_98, s BOOST_PP_TUPLE_EAT_3)(p, o, o(98, s))
+# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_IF(p(99, s), BOOST_PP_WHILE_99, s BOOST_PP_TUPLE_EAT_3)(p, o, o(99, s))
+# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_IF(p(100, s), BOOST_PP_WHILE_100, s BOOST_PP_TUPLE_EAT_3)(p, o, o(100, s))
+# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_IF(p(101, s), BOOST_PP_WHILE_101, s BOOST_PP_TUPLE_EAT_3)(p, o, o(101, s))
+# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_IF(p(102, s), BOOST_PP_WHILE_102, s BOOST_PP_TUPLE_EAT_3)(p, o, o(102, s))
+# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_IF(p(103, s), BOOST_PP_WHILE_103, s BOOST_PP_TUPLE_EAT_3)(p, o, o(103, s))
+# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_IF(p(104, s), BOOST_PP_WHILE_104, s BOOST_PP_TUPLE_EAT_3)(p, o, o(104, s))
+# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_IF(p(105, s), BOOST_PP_WHILE_105, s BOOST_PP_TUPLE_EAT_3)(p, o, o(105, s))
+# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_IF(p(106, s), BOOST_PP_WHILE_106, s BOOST_PP_TUPLE_EAT_3)(p, o, o(106, s))
+# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_IF(p(107, s), BOOST_PP_WHILE_107, s BOOST_PP_TUPLE_EAT_3)(p, o, o(107, s))
+# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_IF(p(108, s), BOOST_PP_WHILE_108, s BOOST_PP_TUPLE_EAT_3)(p, o, o(108, s))
+# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_IF(p(109, s), BOOST_PP_WHILE_109, s BOOST_PP_TUPLE_EAT_3)(p, o, o(109, s))
+# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_IF(p(110, s), BOOST_PP_WHILE_110, s BOOST_PP_TUPLE_EAT_3)(p, o, o(110, s))
+# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_IF(p(111, s), BOOST_PP_WHILE_111, s BOOST_PP_TUPLE_EAT_3)(p, o, o(111, s))
+# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_IF(p(112, s), BOOST_PP_WHILE_112, s BOOST_PP_TUPLE_EAT_3)(p, o, o(112, s))
+# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_IF(p(113, s), BOOST_PP_WHILE_113, s BOOST_PP_TUPLE_EAT_3)(p, o, o(113, s))
+# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_IF(p(114, s), BOOST_PP_WHILE_114, s BOOST_PP_TUPLE_EAT_3)(p, o, o(114, s))
+# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_IF(p(115, s), BOOST_PP_WHILE_115, s BOOST_PP_TUPLE_EAT_3)(p, o, o(115, s))
+# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_IF(p(116, s), BOOST_PP_WHILE_116, s BOOST_PP_TUPLE_EAT_3)(p, o, o(116, s))
+# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_IF(p(117, s), BOOST_PP_WHILE_117, s BOOST_PP_TUPLE_EAT_3)(p, o, o(117, s))
+# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_IF(p(118, s), BOOST_PP_WHILE_118, s BOOST_PP_TUPLE_EAT_3)(p, o, o(118, s))
+# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_IF(p(119, s), BOOST_PP_WHILE_119, s BOOST_PP_TUPLE_EAT_3)(p, o, o(119, s))
+# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_IF(p(120, s), BOOST_PP_WHILE_120, s BOOST_PP_TUPLE_EAT_3)(p, o, o(120, s))
+# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_IF(p(121, s), BOOST_PP_WHILE_121, s BOOST_PP_TUPLE_EAT_3)(p, o, o(121, s))
+# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_IF(p(122, s), BOOST_PP_WHILE_122, s BOOST_PP_TUPLE_EAT_3)(p, o, o(122, s))
+# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_IF(p(123, s), BOOST_PP_WHILE_123, s BOOST_PP_TUPLE_EAT_3)(p, o, o(123, s))
+# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_IF(p(124, s), BOOST_PP_WHILE_124, s BOOST_PP_TUPLE_EAT_3)(p, o, o(124, s))
+# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_IF(p(125, s), BOOST_PP_WHILE_125, s BOOST_PP_TUPLE_EAT_3)(p, o, o(125, s))
+# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_IF(p(126, s), BOOST_PP_WHILE_126, s BOOST_PP_TUPLE_EAT_3)(p, o, o(126, s))
+# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_IF(p(127, s), BOOST_PP_WHILE_127, s BOOST_PP_TUPLE_EAT_3)(p, o, o(127, s))
+# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_IF(p(128, s), BOOST_PP_WHILE_128, s BOOST_PP_TUPLE_EAT_3)(p, o, o(128, s))
+# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_IF(p(129, s), BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, o(129, s))
+# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_IF(p(130, s), BOOST_PP_WHILE_130, s BOOST_PP_TUPLE_EAT_3)(p, o, o(130, s))
+# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_IF(p(131, s), BOOST_PP_WHILE_131, s BOOST_PP_TUPLE_EAT_3)(p, o, o(131, s))
+# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_IF(p(132, s), BOOST_PP_WHILE_132, s BOOST_PP_TUPLE_EAT_3)(p, o, o(132, s))
+# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_IF(p(133, s), BOOST_PP_WHILE_133, s BOOST_PP_TUPLE_EAT_3)(p, o, o(133, s))
+# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_IF(p(134, s), BOOST_PP_WHILE_134, s BOOST_PP_TUPLE_EAT_3)(p, o, o(134, s))
+# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_IF(p(135, s), BOOST_PP_WHILE_135, s BOOST_PP_TUPLE_EAT_3)(p, o, o(135, s))
+# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_IF(p(136, s), BOOST_PP_WHILE_136, s BOOST_PP_TUPLE_EAT_3)(p, o, o(136, s))
+# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_IF(p(137, s), BOOST_PP_WHILE_137, s BOOST_PP_TUPLE_EAT_3)(p, o, o(137, s))
+# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_IF(p(138, s), BOOST_PP_WHILE_138, s BOOST_PP_TUPLE_EAT_3)(p, o, o(138, s))
+# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_IF(p(139, s), BOOST_PP_WHILE_139, s BOOST_PP_TUPLE_EAT_3)(p, o, o(139, s))
+# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_IF(p(140, s), BOOST_PP_WHILE_140, s BOOST_PP_TUPLE_EAT_3)(p, o, o(140, s))
+# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_IF(p(141, s), BOOST_PP_WHILE_141, s BOOST_PP_TUPLE_EAT_3)(p, o, o(141, s))
+# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_IF(p(142, s), BOOST_PP_WHILE_142, s BOOST_PP_TUPLE_EAT_3)(p, o, o(142, s))
+# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_IF(p(143, s), BOOST_PP_WHILE_143, s BOOST_PP_TUPLE_EAT_3)(p, o, o(143, s))
+# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_IF(p(144, s), BOOST_PP_WHILE_144, s BOOST_PP_TUPLE_EAT_3)(p, o, o(144, s))
+# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_IF(p(145, s), BOOST_PP_WHILE_145, s BOOST_PP_TUPLE_EAT_3)(p, o, o(145, s))
+# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_IF(p(146, s), BOOST_PP_WHILE_146, s BOOST_PP_TUPLE_EAT_3)(p, o, o(146, s))
+# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_IF(p(147, s), BOOST_PP_WHILE_147, s BOOST_PP_TUPLE_EAT_3)(p, o, o(147, s))
+# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_IF(p(148, s), BOOST_PP_WHILE_148, s BOOST_PP_TUPLE_EAT_3)(p, o, o(148, s))
+# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_IF(p(149, s), BOOST_PP_WHILE_149, s BOOST_PP_TUPLE_EAT_3)(p, o, o(149, s))
+# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_IF(p(150, s), BOOST_PP_WHILE_150, s BOOST_PP_TUPLE_EAT_3)(p, o, o(150, s))
+# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_IF(p(151, s), BOOST_PP_WHILE_151, s BOOST_PP_TUPLE_EAT_3)(p, o, o(151, s))
+# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_IF(p(152, s), BOOST_PP_WHILE_152, s BOOST_PP_TUPLE_EAT_3)(p, o, o(152, s))
+# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_IF(p(153, s), BOOST_PP_WHILE_153, s BOOST_PP_TUPLE_EAT_3)(p, o, o(153, s))
+# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_IF(p(154, s), BOOST_PP_WHILE_154, s BOOST_PP_TUPLE_EAT_3)(p, o, o(154, s))
+# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_IF(p(155, s), BOOST_PP_WHILE_155, s BOOST_PP_TUPLE_EAT_3)(p, o, o(155, s))
+# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_IF(p(156, s), BOOST_PP_WHILE_156, s BOOST_PP_TUPLE_EAT_3)(p, o, o(156, s))
+# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_IF(p(157, s), BOOST_PP_WHILE_157, s BOOST_PP_TUPLE_EAT_3)(p, o, o(157, s))
+# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_IF(p(158, s), BOOST_PP_WHILE_158, s BOOST_PP_TUPLE_EAT_3)(p, o, o(158, s))
+# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_IF(p(159, s), BOOST_PP_WHILE_159, s BOOST_PP_TUPLE_EAT_3)(p, o, o(159, s))
+# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_IF(p(160, s), BOOST_PP_WHILE_160, s BOOST_PP_TUPLE_EAT_3)(p, o, o(160, s))
+# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_IF(p(161, s), BOOST_PP_WHILE_161, s BOOST_PP_TUPLE_EAT_3)(p, o, o(161, s))
+# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_IF(p(162, s), BOOST_PP_WHILE_162, s BOOST_PP_TUPLE_EAT_3)(p, o, o(162, s))
+# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_IF(p(163, s), BOOST_PP_WHILE_163, s BOOST_PP_TUPLE_EAT_3)(p, o, o(163, s))
+# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_IF(p(164, s), BOOST_PP_WHILE_164, s BOOST_PP_TUPLE_EAT_3)(p, o, o(164, s))
+# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_IF(p(165, s), BOOST_PP_WHILE_165, s BOOST_PP_TUPLE_EAT_3)(p, o, o(165, s))
+# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_IF(p(166, s), BOOST_PP_WHILE_166, s BOOST_PP_TUPLE_EAT_3)(p, o, o(166, s))
+# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_IF(p(167, s), BOOST_PP_WHILE_167, s BOOST_PP_TUPLE_EAT_3)(p, o, o(167, s))
+# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_IF(p(168, s), BOOST_PP_WHILE_168, s BOOST_PP_TUPLE_EAT_3)(p, o, o(168, s))
+# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_IF(p(169, s), BOOST_PP_WHILE_169, s BOOST_PP_TUPLE_EAT_3)(p, o, o(169, s))
+# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_IF(p(170, s), BOOST_PP_WHILE_170, s BOOST_PP_TUPLE_EAT_3)(p, o, o(170, s))
+# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_IF(p(171, s), BOOST_PP_WHILE_171, s BOOST_PP_TUPLE_EAT_3)(p, o, o(171, s))
+# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_IF(p(172, s), BOOST_PP_WHILE_172, s BOOST_PP_TUPLE_EAT_3)(p, o, o(172, s))
+# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_IF(p(173, s), BOOST_PP_WHILE_173, s BOOST_PP_TUPLE_EAT_3)(p, o, o(173, s))
+# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_IF(p(174, s), BOOST_PP_WHILE_174, s BOOST_PP_TUPLE_EAT_3)(p, o, o(174, s))
+# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_IF(p(175, s), BOOST_PP_WHILE_175, s BOOST_PP_TUPLE_EAT_3)(p, o, o(175, s))
+# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_IF(p(176, s), BOOST_PP_WHILE_176, s BOOST_PP_TUPLE_EAT_3)(p, o, o(176, s))
+# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_IF(p(177, s), BOOST_PP_WHILE_177, s BOOST_PP_TUPLE_EAT_3)(p, o, o(177, s))
+# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_IF(p(178, s), BOOST_PP_WHILE_178, s BOOST_PP_TUPLE_EAT_3)(p, o, o(178, s))
+# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_IF(p(179, s), BOOST_PP_WHILE_179, s BOOST_PP_TUPLE_EAT_3)(p, o, o(179, s))
+# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_IF(p(180, s), BOOST_PP_WHILE_180, s BOOST_PP_TUPLE_EAT_3)(p, o, o(180, s))
+# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_IF(p(181, s), BOOST_PP_WHILE_181, s BOOST_PP_TUPLE_EAT_3)(p, o, o(181, s))
+# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_IF(p(182, s), BOOST_PP_WHILE_182, s BOOST_PP_TUPLE_EAT_3)(p, o, o(182, s))
+# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_IF(p(183, s), BOOST_PP_WHILE_183, s BOOST_PP_TUPLE_EAT_3)(p, o, o(183, s))
+# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_IF(p(184, s), BOOST_PP_WHILE_184, s BOOST_PP_TUPLE_EAT_3)(p, o, o(184, s))
+# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_IF(p(185, s), BOOST_PP_WHILE_185, s BOOST_PP_TUPLE_EAT_3)(p, o, o(185, s))
+# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_IF(p(186, s), BOOST_PP_WHILE_186, s BOOST_PP_TUPLE_EAT_3)(p, o, o(186, s))
+# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_IF(p(187, s), BOOST_PP_WHILE_187, s BOOST_PP_TUPLE_EAT_3)(p, o, o(187, s))
+# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_IF(p(188, s), BOOST_PP_WHILE_188, s BOOST_PP_TUPLE_EAT_3)(p, o, o(188, s))
+# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_IF(p(189, s), BOOST_PP_WHILE_189, s BOOST_PP_TUPLE_EAT_3)(p, o, o(189, s))
+# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_IF(p(190, s), BOOST_PP_WHILE_190, s BOOST_PP_TUPLE_EAT_3)(p, o, o(190, s))
+# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_IF(p(191, s), BOOST_PP_WHILE_191, s BOOST_PP_TUPLE_EAT_3)(p, o, o(191, s))
+# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_IF(p(192, s), BOOST_PP_WHILE_192, s BOOST_PP_TUPLE_EAT_3)(p, o, o(192, s))
+# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_IF(p(193, s), BOOST_PP_WHILE_193, s BOOST_PP_TUPLE_EAT_3)(p, o, o(193, s))
+# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_IF(p(194, s), BOOST_PP_WHILE_194, s BOOST_PP_TUPLE_EAT_3)(p, o, o(194, s))
+# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_IF(p(195, s), BOOST_PP_WHILE_195, s BOOST_PP_TUPLE_EAT_3)(p, o, o(195, s))
+# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_IF(p(196, s), BOOST_PP_WHILE_196, s BOOST_PP_TUPLE_EAT_3)(p, o, o(196, s))
+# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_IF(p(197, s), BOOST_PP_WHILE_197, s BOOST_PP_TUPLE_EAT_3)(p, o, o(197, s))
+# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_IF(p(198, s), BOOST_PP_WHILE_198, s BOOST_PP_TUPLE_EAT_3)(p, o, o(198, s))
+# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_IF(p(199, s), BOOST_PP_WHILE_199, s BOOST_PP_TUPLE_EAT_3)(p, o, o(199, s))
+# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_IF(p(200, s), BOOST_PP_WHILE_200, s BOOST_PP_TUPLE_EAT_3)(p, o, o(200, s))
+# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_IF(p(201, s), BOOST_PP_WHILE_201, s BOOST_PP_TUPLE_EAT_3)(p, o, o(201, s))
+# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_IF(p(202, s), BOOST_PP_WHILE_202, s BOOST_PP_TUPLE_EAT_3)(p, o, o(202, s))
+# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_IF(p(203, s), BOOST_PP_WHILE_203, s BOOST_PP_TUPLE_EAT_3)(p, o, o(203, s))
+# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_IF(p(204, s), BOOST_PP_WHILE_204, s BOOST_PP_TUPLE_EAT_3)(p, o, o(204, s))
+# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_IF(p(205, s), BOOST_PP_WHILE_205, s BOOST_PP_TUPLE_EAT_3)(p, o, o(205, s))
+# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_IF(p(206, s), BOOST_PP_WHILE_206, s BOOST_PP_TUPLE_EAT_3)(p, o, o(206, s))
+# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_IF(p(207, s), BOOST_PP_WHILE_207, s BOOST_PP_TUPLE_EAT_3)(p, o, o(207, s))
+# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_IF(p(208, s), BOOST_PP_WHILE_208, s BOOST_PP_TUPLE_EAT_3)(p, o, o(208, s))
+# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_IF(p(209, s), BOOST_PP_WHILE_209, s BOOST_PP_TUPLE_EAT_3)(p, o, o(209, s))
+# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_IF(p(210, s), BOOST_PP_WHILE_210, s BOOST_PP_TUPLE_EAT_3)(p, o, o(210, s))
+# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_IF(p(211, s), BOOST_PP_WHILE_211, s BOOST_PP_TUPLE_EAT_3)(p, o, o(211, s))
+# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_IF(p(212, s), BOOST_PP_WHILE_212, s BOOST_PP_TUPLE_EAT_3)(p, o, o(212, s))
+# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_IF(p(213, s), BOOST_PP_WHILE_213, s BOOST_PP_TUPLE_EAT_3)(p, o, o(213, s))
+# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_IF(p(214, s), BOOST_PP_WHILE_214, s BOOST_PP_TUPLE_EAT_3)(p, o, o(214, s))
+# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_IF(p(215, s), BOOST_PP_WHILE_215, s BOOST_PP_TUPLE_EAT_3)(p, o, o(215, s))
+# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_IF(p(216, s), BOOST_PP_WHILE_216, s BOOST_PP_TUPLE_EAT_3)(p, o, o(216, s))
+# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_IF(p(217, s), BOOST_PP_WHILE_217, s BOOST_PP_TUPLE_EAT_3)(p, o, o(217, s))
+# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_IF(p(218, s), BOOST_PP_WHILE_218, s BOOST_PP_TUPLE_EAT_3)(p, o, o(218, s))
+# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_IF(p(219, s), BOOST_PP_WHILE_219, s BOOST_PP_TUPLE_EAT_3)(p, o, o(219, s))
+# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_IF(p(220, s), BOOST_PP_WHILE_220, s BOOST_PP_TUPLE_EAT_3)(p, o, o(220, s))
+# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_IF(p(221, s), BOOST_PP_WHILE_221, s BOOST_PP_TUPLE_EAT_3)(p, o, o(221, s))
+# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_IF(p(222, s), BOOST_PP_WHILE_222, s BOOST_PP_TUPLE_EAT_3)(p, o, o(222, s))
+# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_IF(p(223, s), BOOST_PP_WHILE_223, s BOOST_PP_TUPLE_EAT_3)(p, o, o(223, s))
+# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_IF(p(224, s), BOOST_PP_WHILE_224, s BOOST_PP_TUPLE_EAT_3)(p, o, o(224, s))
+# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_IF(p(225, s), BOOST_PP_WHILE_225, s BOOST_PP_TUPLE_EAT_3)(p, o, o(225, s))
+# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_IF(p(226, s), BOOST_PP_WHILE_226, s BOOST_PP_TUPLE_EAT_3)(p, o, o(226, s))
+# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_IF(p(227, s), BOOST_PP_WHILE_227, s BOOST_PP_TUPLE_EAT_3)(p, o, o(227, s))
+# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_IF(p(228, s), BOOST_PP_WHILE_228, s BOOST_PP_TUPLE_EAT_3)(p, o, o(228, s))
+# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_IF(p(229, s), BOOST_PP_WHILE_229, s BOOST_PP_TUPLE_EAT_3)(p, o, o(229, s))
+# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_IF(p(230, s), BOOST_PP_WHILE_230, s BOOST_PP_TUPLE_EAT_3)(p, o, o(230, s))
+# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_IF(p(231, s), BOOST_PP_WHILE_231, s BOOST_PP_TUPLE_EAT_3)(p, o, o(231, s))
+# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_IF(p(232, s), BOOST_PP_WHILE_232, s BOOST_PP_TUPLE_EAT_3)(p, o, o(232, s))
+# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_IF(p(233, s), BOOST_PP_WHILE_233, s BOOST_PP_TUPLE_EAT_3)(p, o, o(233, s))
+# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_IF(p(234, s), BOOST_PP_WHILE_234, s BOOST_PP_TUPLE_EAT_3)(p, o, o(234, s))
+# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_IF(p(235, s), BOOST_PP_WHILE_235, s BOOST_PP_TUPLE_EAT_3)(p, o, o(235, s))
+# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_IF(p(236, s), BOOST_PP_WHILE_236, s BOOST_PP_TUPLE_EAT_3)(p, o, o(236, s))
+# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_IF(p(237, s), BOOST_PP_WHILE_237, s BOOST_PP_TUPLE_EAT_3)(p, o, o(237, s))
+# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_IF(p(238, s), BOOST_PP_WHILE_238, s BOOST_PP_TUPLE_EAT_3)(p, o, o(238, s))
+# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_IF(p(239, s), BOOST_PP_WHILE_239, s BOOST_PP_TUPLE_EAT_3)(p, o, o(239, s))
+# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_IF(p(240, s), BOOST_PP_WHILE_240, s BOOST_PP_TUPLE_EAT_3)(p, o, o(240, s))
+# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_IF(p(241, s), BOOST_PP_WHILE_241, s BOOST_PP_TUPLE_EAT_3)(p, o, o(241, s))
+# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_IF(p(242, s), BOOST_PP_WHILE_242, s BOOST_PP_TUPLE_EAT_3)(p, o, o(242, s))
+# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_IF(p(243, s), BOOST_PP_WHILE_243, s BOOST_PP_TUPLE_EAT_3)(p, o, o(243, s))
+# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_IF(p(244, s), BOOST_PP_WHILE_244, s BOOST_PP_TUPLE_EAT_3)(p, o, o(244, s))
+# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_IF(p(245, s), BOOST_PP_WHILE_245, s BOOST_PP_TUPLE_EAT_3)(p, o, o(245, s))
+# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_IF(p(246, s), BOOST_PP_WHILE_246, s BOOST_PP_TUPLE_EAT_3)(p, o, o(246, s))
+# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_IF(p(247, s), BOOST_PP_WHILE_247, s BOOST_PP_TUPLE_EAT_3)(p, o, o(247, s))
+# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_IF(p(248, s), BOOST_PP_WHILE_248, s BOOST_PP_TUPLE_EAT_3)(p, o, o(248, s))
+# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_IF(p(249, s), BOOST_PP_WHILE_249, s BOOST_PP_TUPLE_EAT_3)(p, o, o(249, s))
+# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_IF(p(250, s), BOOST_PP_WHILE_250, s BOOST_PP_TUPLE_EAT_3)(p, o, o(250, s))
+# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_IF(p(251, s), BOOST_PP_WHILE_251, s BOOST_PP_TUPLE_EAT_3)(p, o, o(251, s))
+# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_IF(p(252, s), BOOST_PP_WHILE_252, s BOOST_PP_TUPLE_EAT_3)(p, o, o(252, s))
+# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_IF(p(253, s), BOOST_PP_WHILE_253, s BOOST_PP_TUPLE_EAT_3)(p, o, o(253, s))
+# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_IF(p(254, s), BOOST_PP_WHILE_254, s BOOST_PP_TUPLE_EAT_3)(p, o, o(254, s))
+# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_IF(p(255, s), BOOST_PP_WHILE_255, s BOOST_PP_TUPLE_EAT_3)(p, o, o(255, s))
+# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_IF(p(256, s), BOOST_PP_WHILE_256, s BOOST_PP_TUPLE_EAT_3)(p, o, o(256, s))
+# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_IF(p(257, s), BOOST_PP_WHILE_257, s BOOST_PP_TUPLE_EAT_3)(p, o, o(257, s))
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/control/detail/while.hpp b/vendor/pdalboost/boost/preprocessor/control/detail/while.hpp
new file mode 100644
index 0000000..7315e1d
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/control/detail/while.hpp
@@ -0,0 +1,536 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP
+# define BOOST_PREPROCESSOR_CONTROL_DETAIL_WHILE_HPP
+#
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_WHILE_1(p, o, s) BOOST_PP_WHILE_1_C(BOOST_PP_BOOL(p(2, s)), p, o, s)
+# define BOOST_PP_WHILE_2(p, o, s) BOOST_PP_WHILE_2_C(BOOST_PP_BOOL(p(3, s)), p, o, s)
+# define BOOST_PP_WHILE_3(p, o, s) BOOST_PP_WHILE_3_C(BOOST_PP_BOOL(p(4, s)), p, o, s)
+# define BOOST_PP_WHILE_4(p, o, s) BOOST_PP_WHILE_4_C(BOOST_PP_BOOL(p(5, s)), p, o, s)
+# define BOOST_PP_WHILE_5(p, o, s) BOOST_PP_WHILE_5_C(BOOST_PP_BOOL(p(6, s)), p, o, s)
+# define BOOST_PP_WHILE_6(p, o, s) BOOST_PP_WHILE_6_C(BOOST_PP_BOOL(p(7, s)), p, o, s)
+# define BOOST_PP_WHILE_7(p, o, s) BOOST_PP_WHILE_7_C(BOOST_PP_BOOL(p(8, s)), p, o, s)
+# define BOOST_PP_WHILE_8(p, o, s) BOOST_PP_WHILE_8_C(BOOST_PP_BOOL(p(9, s)), p, o, s)
+# define BOOST_PP_WHILE_9(p, o, s) BOOST_PP_WHILE_9_C(BOOST_PP_BOOL(p(10, s)), p, o, s)
+# define BOOST_PP_WHILE_10(p, o, s) BOOST_PP_WHILE_10_C(BOOST_PP_BOOL(p(11, s)), p, o, s)
+# define BOOST_PP_WHILE_11(p, o, s) BOOST_PP_WHILE_11_C(BOOST_PP_BOOL(p(12, s)), p, o, s)
+# define BOOST_PP_WHILE_12(p, o, s) BOOST_PP_WHILE_12_C(BOOST_PP_BOOL(p(13, s)), p, o, s)
+# define BOOST_PP_WHILE_13(p, o, s) BOOST_PP_WHILE_13_C(BOOST_PP_BOOL(p(14, s)), p, o, s)
+# define BOOST_PP_WHILE_14(p, o, s) BOOST_PP_WHILE_14_C(BOOST_PP_BOOL(p(15, s)), p, o, s)
+# define BOOST_PP_WHILE_15(p, o, s) BOOST_PP_WHILE_15_C(BOOST_PP_BOOL(p(16, s)), p, o, s)
+# define BOOST_PP_WHILE_16(p, o, s) BOOST_PP_WHILE_16_C(BOOST_PP_BOOL(p(17, s)), p, o, s)
+# define BOOST_PP_WHILE_17(p, o, s) BOOST_PP_WHILE_17_C(BOOST_PP_BOOL(p(18, s)), p, o, s)
+# define BOOST_PP_WHILE_18(p, o, s) BOOST_PP_WHILE_18_C(BOOST_PP_BOOL(p(19, s)), p, o, s)
+# define BOOST_PP_WHILE_19(p, o, s) BOOST_PP_WHILE_19_C(BOOST_PP_BOOL(p(20, s)), p, o, s)
+# define BOOST_PP_WHILE_20(p, o, s) BOOST_PP_WHILE_20_C(BOOST_PP_BOOL(p(21, s)), p, o, s)
+# define BOOST_PP_WHILE_21(p, o, s) BOOST_PP_WHILE_21_C(BOOST_PP_BOOL(p(22, s)), p, o, s)
+# define BOOST_PP_WHILE_22(p, o, s) BOOST_PP_WHILE_22_C(BOOST_PP_BOOL(p(23, s)), p, o, s)
+# define BOOST_PP_WHILE_23(p, o, s) BOOST_PP_WHILE_23_C(BOOST_PP_BOOL(p(24, s)), p, o, s)
+# define BOOST_PP_WHILE_24(p, o, s) BOOST_PP_WHILE_24_C(BOOST_PP_BOOL(p(25, s)), p, o, s)
+# define BOOST_PP_WHILE_25(p, o, s) BOOST_PP_WHILE_25_C(BOOST_PP_BOOL(p(26, s)), p, o, s)
+# define BOOST_PP_WHILE_26(p, o, s) BOOST_PP_WHILE_26_C(BOOST_PP_BOOL(p(27, s)), p, o, s)
+# define BOOST_PP_WHILE_27(p, o, s) BOOST_PP_WHILE_27_C(BOOST_PP_BOOL(p(28, s)), p, o, s)
+# define BOOST_PP_WHILE_28(p, o, s) BOOST_PP_WHILE_28_C(BOOST_PP_BOOL(p(29, s)), p, o, s)
+# define BOOST_PP_WHILE_29(p, o, s) BOOST_PP_WHILE_29_C(BOOST_PP_BOOL(p(30, s)), p, o, s)
+# define BOOST_PP_WHILE_30(p, o, s) BOOST_PP_WHILE_30_C(BOOST_PP_BOOL(p(31, s)), p, o, s)
+# define BOOST_PP_WHILE_31(p, o, s) BOOST_PP_WHILE_31_C(BOOST_PP_BOOL(p(32, s)), p, o, s)
+# define BOOST_PP_WHILE_32(p, o, s) BOOST_PP_WHILE_32_C(BOOST_PP_BOOL(p(33, s)), p, o, s)
+# define BOOST_PP_WHILE_33(p, o, s) BOOST_PP_WHILE_33_C(BOOST_PP_BOOL(p(34, s)), p, o, s)
+# define BOOST_PP_WHILE_34(p, o, s) BOOST_PP_WHILE_34_C(BOOST_PP_BOOL(p(35, s)), p, o, s)
+# define BOOST_PP_WHILE_35(p, o, s) BOOST_PP_WHILE_35_C(BOOST_PP_BOOL(p(36, s)), p, o, s)
+# define BOOST_PP_WHILE_36(p, o, s) BOOST_PP_WHILE_36_C(BOOST_PP_BOOL(p(37, s)), p, o, s)
+# define BOOST_PP_WHILE_37(p, o, s) BOOST_PP_WHILE_37_C(BOOST_PP_BOOL(p(38, s)), p, o, s)
+# define BOOST_PP_WHILE_38(p, o, s) BOOST_PP_WHILE_38_C(BOOST_PP_BOOL(p(39, s)), p, o, s)
+# define BOOST_PP_WHILE_39(p, o, s) BOOST_PP_WHILE_39_C(BOOST_PP_BOOL(p(40, s)), p, o, s)
+# define BOOST_PP_WHILE_40(p, o, s) BOOST_PP_WHILE_40_C(BOOST_PP_BOOL(p(41, s)), p, o, s)
+# define BOOST_PP_WHILE_41(p, o, s) BOOST_PP_WHILE_41_C(BOOST_PP_BOOL(p(42, s)), p, o, s)
+# define BOOST_PP_WHILE_42(p, o, s) BOOST_PP_WHILE_42_C(BOOST_PP_BOOL(p(43, s)), p, o, s)
+# define BOOST_PP_WHILE_43(p, o, s) BOOST_PP_WHILE_43_C(BOOST_PP_BOOL(p(44, s)), p, o, s)
+# define BOOST_PP_WHILE_44(p, o, s) BOOST_PP_WHILE_44_C(BOOST_PP_BOOL(p(45, s)), p, o, s)
+# define BOOST_PP_WHILE_45(p, o, s) BOOST_PP_WHILE_45_C(BOOST_PP_BOOL(p(46, s)), p, o, s)
+# define BOOST_PP_WHILE_46(p, o, s) BOOST_PP_WHILE_46_C(BOOST_PP_BOOL(p(47, s)), p, o, s)
+# define BOOST_PP_WHILE_47(p, o, s) BOOST_PP_WHILE_47_C(BOOST_PP_BOOL(p(48, s)), p, o, s)
+# define BOOST_PP_WHILE_48(p, o, s) BOOST_PP_WHILE_48_C(BOOST_PP_BOOL(p(49, s)), p, o, s)
+# define BOOST_PP_WHILE_49(p, o, s) BOOST_PP_WHILE_49_C(BOOST_PP_BOOL(p(50, s)), p, o, s)
+# define BOOST_PP_WHILE_50(p, o, s) BOOST_PP_WHILE_50_C(BOOST_PP_BOOL(p(51, s)), p, o, s)
+# define BOOST_PP_WHILE_51(p, o, s) BOOST_PP_WHILE_51_C(BOOST_PP_BOOL(p(52, s)), p, o, s)
+# define BOOST_PP_WHILE_52(p, o, s) BOOST_PP_WHILE_52_C(BOOST_PP_BOOL(p(53, s)), p, o, s)
+# define BOOST_PP_WHILE_53(p, o, s) BOOST_PP_WHILE_53_C(BOOST_PP_BOOL(p(54, s)), p, o, s)
+# define BOOST_PP_WHILE_54(p, o, s) BOOST_PP_WHILE_54_C(BOOST_PP_BOOL(p(55, s)), p, o, s)
+# define BOOST_PP_WHILE_55(p, o, s) BOOST_PP_WHILE_55_C(BOOST_PP_BOOL(p(56, s)), p, o, s)
+# define BOOST_PP_WHILE_56(p, o, s) BOOST_PP_WHILE_56_C(BOOST_PP_BOOL(p(57, s)), p, o, s)
+# define BOOST_PP_WHILE_57(p, o, s) BOOST_PP_WHILE_57_C(BOOST_PP_BOOL(p(58, s)), p, o, s)
+# define BOOST_PP_WHILE_58(p, o, s) BOOST_PP_WHILE_58_C(BOOST_PP_BOOL(p(59, s)), p, o, s)
+# define BOOST_PP_WHILE_59(p, o, s) BOOST_PP_WHILE_59_C(BOOST_PP_BOOL(p(60, s)), p, o, s)
+# define BOOST_PP_WHILE_60(p, o, s) BOOST_PP_WHILE_60_C(BOOST_PP_BOOL(p(61, s)), p, o, s)
+# define BOOST_PP_WHILE_61(p, o, s) BOOST_PP_WHILE_61_C(BOOST_PP_BOOL(p(62, s)), p, o, s)
+# define BOOST_PP_WHILE_62(p, o, s) BOOST_PP_WHILE_62_C(BOOST_PP_BOOL(p(63, s)), p, o, s)
+# define BOOST_PP_WHILE_63(p, o, s) BOOST_PP_WHILE_63_C(BOOST_PP_BOOL(p(64, s)), p, o, s)
+# define BOOST_PP_WHILE_64(p, o, s) BOOST_PP_WHILE_64_C(BOOST_PP_BOOL(p(65, s)), p, o, s)
+# define BOOST_PP_WHILE_65(p, o, s) BOOST_PP_WHILE_65_C(BOOST_PP_BOOL(p(66, s)), p, o, s)
+# define BOOST_PP_WHILE_66(p, o, s) BOOST_PP_WHILE_66_C(BOOST_PP_BOOL(p(67, s)), p, o, s)
+# define BOOST_PP_WHILE_67(p, o, s) BOOST_PP_WHILE_67_C(BOOST_PP_BOOL(p(68, s)), p, o, s)
+# define BOOST_PP_WHILE_68(p, o, s) BOOST_PP_WHILE_68_C(BOOST_PP_BOOL(p(69, s)), p, o, s)
+# define BOOST_PP_WHILE_69(p, o, s) BOOST_PP_WHILE_69_C(BOOST_PP_BOOL(p(70, s)), p, o, s)
+# define BOOST_PP_WHILE_70(p, o, s) BOOST_PP_WHILE_70_C(BOOST_PP_BOOL(p(71, s)), p, o, s)
+# define BOOST_PP_WHILE_71(p, o, s) BOOST_PP_WHILE_71_C(BOOST_PP_BOOL(p(72, s)), p, o, s)
+# define BOOST_PP_WHILE_72(p, o, s) BOOST_PP_WHILE_72_C(BOOST_PP_BOOL(p(73, s)), p, o, s)
+# define BOOST_PP_WHILE_73(p, o, s) BOOST_PP_WHILE_73_C(BOOST_PP_BOOL(p(74, s)), p, o, s)
+# define BOOST_PP_WHILE_74(p, o, s) BOOST_PP_WHILE_74_C(BOOST_PP_BOOL(p(75, s)), p, o, s)
+# define BOOST_PP_WHILE_75(p, o, s) BOOST_PP_WHILE_75_C(BOOST_PP_BOOL(p(76, s)), p, o, s)
+# define BOOST_PP_WHILE_76(p, o, s) BOOST_PP_WHILE_76_C(BOOST_PP_BOOL(p(77, s)), p, o, s)
+# define BOOST_PP_WHILE_77(p, o, s) BOOST_PP_WHILE_77_C(BOOST_PP_BOOL(p(78, s)), p, o, s)
+# define BOOST_PP_WHILE_78(p, o, s) BOOST_PP_WHILE_78_C(BOOST_PP_BOOL(p(79, s)), p, o, s)
+# define BOOST_PP_WHILE_79(p, o, s) BOOST_PP_WHILE_79_C(BOOST_PP_BOOL(p(80, s)), p, o, s)
+# define BOOST_PP_WHILE_80(p, o, s) BOOST_PP_WHILE_80_C(BOOST_PP_BOOL(p(81, s)), p, o, s)
+# define BOOST_PP_WHILE_81(p, o, s) BOOST_PP_WHILE_81_C(BOOST_PP_BOOL(p(82, s)), p, o, s)
+# define BOOST_PP_WHILE_82(p, o, s) BOOST_PP_WHILE_82_C(BOOST_PP_BOOL(p(83, s)), p, o, s)
+# define BOOST_PP_WHILE_83(p, o, s) BOOST_PP_WHILE_83_C(BOOST_PP_BOOL(p(84, s)), p, o, s)
+# define BOOST_PP_WHILE_84(p, o, s) BOOST_PP_WHILE_84_C(BOOST_PP_BOOL(p(85, s)), p, o, s)
+# define BOOST_PP_WHILE_85(p, o, s) BOOST_PP_WHILE_85_C(BOOST_PP_BOOL(p(86, s)), p, o, s)
+# define BOOST_PP_WHILE_86(p, o, s) BOOST_PP_WHILE_86_C(BOOST_PP_BOOL(p(87, s)), p, o, s)
+# define BOOST_PP_WHILE_87(p, o, s) BOOST_PP_WHILE_87_C(BOOST_PP_BOOL(p(88, s)), p, o, s)
+# define BOOST_PP_WHILE_88(p, o, s) BOOST_PP_WHILE_88_C(BOOST_PP_BOOL(p(89, s)), p, o, s)
+# define BOOST_PP_WHILE_89(p, o, s) BOOST_PP_WHILE_89_C(BOOST_PP_BOOL(p(90, s)), p, o, s)
+# define BOOST_PP_WHILE_90(p, o, s) BOOST_PP_WHILE_90_C(BOOST_PP_BOOL(p(91, s)), p, o, s)
+# define BOOST_PP_WHILE_91(p, o, s) BOOST_PP_WHILE_91_C(BOOST_PP_BOOL(p(92, s)), p, o, s)
+# define BOOST_PP_WHILE_92(p, o, s) BOOST_PP_WHILE_92_C(BOOST_PP_BOOL(p(93, s)), p, o, s)
+# define BOOST_PP_WHILE_93(p, o, s) BOOST_PP_WHILE_93_C(BOOST_PP_BOOL(p(94, s)), p, o, s)
+# define BOOST_PP_WHILE_94(p, o, s) BOOST_PP_WHILE_94_C(BOOST_PP_BOOL(p(95, s)), p, o, s)
+# define BOOST_PP_WHILE_95(p, o, s) BOOST_PP_WHILE_95_C(BOOST_PP_BOOL(p(96, s)), p, o, s)
+# define BOOST_PP_WHILE_96(p, o, s) BOOST_PP_WHILE_96_C(BOOST_PP_BOOL(p(97, s)), p, o, s)
+# define BOOST_PP_WHILE_97(p, o, s) BOOST_PP_WHILE_97_C(BOOST_PP_BOOL(p(98, s)), p, o, s)
+# define BOOST_PP_WHILE_98(p, o, s) BOOST_PP_WHILE_98_C(BOOST_PP_BOOL(p(99, s)), p, o, s)
+# define BOOST_PP_WHILE_99(p, o, s) BOOST_PP_WHILE_99_C(BOOST_PP_BOOL(p(100, s)), p, o, s)
+# define BOOST_PP_WHILE_100(p, o, s) BOOST_PP_WHILE_100_C(BOOST_PP_BOOL(p(101, s)), p, o, s)
+# define BOOST_PP_WHILE_101(p, o, s) BOOST_PP_WHILE_101_C(BOOST_PP_BOOL(p(102, s)), p, o, s)
+# define BOOST_PP_WHILE_102(p, o, s) BOOST_PP_WHILE_102_C(BOOST_PP_BOOL(p(103, s)), p, o, s)
+# define BOOST_PP_WHILE_103(p, o, s) BOOST_PP_WHILE_103_C(BOOST_PP_BOOL(p(104, s)), p, o, s)
+# define BOOST_PP_WHILE_104(p, o, s) BOOST_PP_WHILE_104_C(BOOST_PP_BOOL(p(105, s)), p, o, s)
+# define BOOST_PP_WHILE_105(p, o, s) BOOST_PP_WHILE_105_C(BOOST_PP_BOOL(p(106, s)), p, o, s)
+# define BOOST_PP_WHILE_106(p, o, s) BOOST_PP_WHILE_106_C(BOOST_PP_BOOL(p(107, s)), p, o, s)
+# define BOOST_PP_WHILE_107(p, o, s) BOOST_PP_WHILE_107_C(BOOST_PP_BOOL(p(108, s)), p, o, s)
+# define BOOST_PP_WHILE_108(p, o, s) BOOST_PP_WHILE_108_C(BOOST_PP_BOOL(p(109, s)), p, o, s)
+# define BOOST_PP_WHILE_109(p, o, s) BOOST_PP_WHILE_109_C(BOOST_PP_BOOL(p(110, s)), p, o, s)
+# define BOOST_PP_WHILE_110(p, o, s) BOOST_PP_WHILE_110_C(BOOST_PP_BOOL(p(111, s)), p, o, s)
+# define BOOST_PP_WHILE_111(p, o, s) BOOST_PP_WHILE_111_C(BOOST_PP_BOOL(p(112, s)), p, o, s)
+# define BOOST_PP_WHILE_112(p, o, s) BOOST_PP_WHILE_112_C(BOOST_PP_BOOL(p(113, s)), p, o, s)
+# define BOOST_PP_WHILE_113(p, o, s) BOOST_PP_WHILE_113_C(BOOST_PP_BOOL(p(114, s)), p, o, s)
+# define BOOST_PP_WHILE_114(p, o, s) BOOST_PP_WHILE_114_C(BOOST_PP_BOOL(p(115, s)), p, o, s)
+# define BOOST_PP_WHILE_115(p, o, s) BOOST_PP_WHILE_115_C(BOOST_PP_BOOL(p(116, s)), p, o, s)
+# define BOOST_PP_WHILE_116(p, o, s) BOOST_PP_WHILE_116_C(BOOST_PP_BOOL(p(117, s)), p, o, s)
+# define BOOST_PP_WHILE_117(p, o, s) BOOST_PP_WHILE_117_C(BOOST_PP_BOOL(p(118, s)), p, o, s)
+# define BOOST_PP_WHILE_118(p, o, s) BOOST_PP_WHILE_118_C(BOOST_PP_BOOL(p(119, s)), p, o, s)
+# define BOOST_PP_WHILE_119(p, o, s) BOOST_PP_WHILE_119_C(BOOST_PP_BOOL(p(120, s)), p, o, s)
+# define BOOST_PP_WHILE_120(p, o, s) BOOST_PP_WHILE_120_C(BOOST_PP_BOOL(p(121, s)), p, o, s)
+# define BOOST_PP_WHILE_121(p, o, s) BOOST_PP_WHILE_121_C(BOOST_PP_BOOL(p(122, s)), p, o, s)
+# define BOOST_PP_WHILE_122(p, o, s) BOOST_PP_WHILE_122_C(BOOST_PP_BOOL(p(123, s)), p, o, s)
+# define BOOST_PP_WHILE_123(p, o, s) BOOST_PP_WHILE_123_C(BOOST_PP_BOOL(p(124, s)), p, o, s)
+# define BOOST_PP_WHILE_124(p, o, s) BOOST_PP_WHILE_124_C(BOOST_PP_BOOL(p(125, s)), p, o, s)
+# define BOOST_PP_WHILE_125(p, o, s) BOOST_PP_WHILE_125_C(BOOST_PP_BOOL(p(126, s)), p, o, s)
+# define BOOST_PP_WHILE_126(p, o, s) BOOST_PP_WHILE_126_C(BOOST_PP_BOOL(p(127, s)), p, o, s)
+# define BOOST_PP_WHILE_127(p, o, s) BOOST_PP_WHILE_127_C(BOOST_PP_BOOL(p(128, s)), p, o, s)
+# define BOOST_PP_WHILE_128(p, o, s) BOOST_PP_WHILE_128_C(BOOST_PP_BOOL(p(129, s)), p, o, s)
+# define BOOST_PP_WHILE_129(p, o, s) BOOST_PP_WHILE_129_C(BOOST_PP_BOOL(p(130, s)), p, o, s)
+# define BOOST_PP_WHILE_130(p, o, s) BOOST_PP_WHILE_130_C(BOOST_PP_BOOL(p(131, s)), p, o, s)
+# define BOOST_PP_WHILE_131(p, o, s) BOOST_PP_WHILE_131_C(BOOST_PP_BOOL(p(132, s)), p, o, s)
+# define BOOST_PP_WHILE_132(p, o, s) BOOST_PP_WHILE_132_C(BOOST_PP_BOOL(p(133, s)), p, o, s)
+# define BOOST_PP_WHILE_133(p, o, s) BOOST_PP_WHILE_133_C(BOOST_PP_BOOL(p(134, s)), p, o, s)
+# define BOOST_PP_WHILE_134(p, o, s) BOOST_PP_WHILE_134_C(BOOST_PP_BOOL(p(135, s)), p, o, s)
+# define BOOST_PP_WHILE_135(p, o, s) BOOST_PP_WHILE_135_C(BOOST_PP_BOOL(p(136, s)), p, o, s)
+# define BOOST_PP_WHILE_136(p, o, s) BOOST_PP_WHILE_136_C(BOOST_PP_BOOL(p(137, s)), p, o, s)
+# define BOOST_PP_WHILE_137(p, o, s) BOOST_PP_WHILE_137_C(BOOST_PP_BOOL(p(138, s)), p, o, s)
+# define BOOST_PP_WHILE_138(p, o, s) BOOST_PP_WHILE_138_C(BOOST_PP_BOOL(p(139, s)), p, o, s)
+# define BOOST_PP_WHILE_139(p, o, s) BOOST_PP_WHILE_139_C(BOOST_PP_BOOL(p(140, s)), p, o, s)
+# define BOOST_PP_WHILE_140(p, o, s) BOOST_PP_WHILE_140_C(BOOST_PP_BOOL(p(141, s)), p, o, s)
+# define BOOST_PP_WHILE_141(p, o, s) BOOST_PP_WHILE_141_C(BOOST_PP_BOOL(p(142, s)), p, o, s)
+# define BOOST_PP_WHILE_142(p, o, s) BOOST_PP_WHILE_142_C(BOOST_PP_BOOL(p(143, s)), p, o, s)
+# define BOOST_PP_WHILE_143(p, o, s) BOOST_PP_WHILE_143_C(BOOST_PP_BOOL(p(144, s)), p, o, s)
+# define BOOST_PP_WHILE_144(p, o, s) BOOST_PP_WHILE_144_C(BOOST_PP_BOOL(p(145, s)), p, o, s)
+# define BOOST_PP_WHILE_145(p, o, s) BOOST_PP_WHILE_145_C(BOOST_PP_BOOL(p(146, s)), p, o, s)
+# define BOOST_PP_WHILE_146(p, o, s) BOOST_PP_WHILE_146_C(BOOST_PP_BOOL(p(147, s)), p, o, s)
+# define BOOST_PP_WHILE_147(p, o, s) BOOST_PP_WHILE_147_C(BOOST_PP_BOOL(p(148, s)), p, o, s)
+# define BOOST_PP_WHILE_148(p, o, s) BOOST_PP_WHILE_148_C(BOOST_PP_BOOL(p(149, s)), p, o, s)
+# define BOOST_PP_WHILE_149(p, o, s) BOOST_PP_WHILE_149_C(BOOST_PP_BOOL(p(150, s)), p, o, s)
+# define BOOST_PP_WHILE_150(p, o, s) BOOST_PP_WHILE_150_C(BOOST_PP_BOOL(p(151, s)), p, o, s)
+# define BOOST_PP_WHILE_151(p, o, s) BOOST_PP_WHILE_151_C(BOOST_PP_BOOL(p(152, s)), p, o, s)
+# define BOOST_PP_WHILE_152(p, o, s) BOOST_PP_WHILE_152_C(BOOST_PP_BOOL(p(153, s)), p, o, s)
+# define BOOST_PP_WHILE_153(p, o, s) BOOST_PP_WHILE_153_C(BOOST_PP_BOOL(p(154, s)), p, o, s)
+# define BOOST_PP_WHILE_154(p, o, s) BOOST_PP_WHILE_154_C(BOOST_PP_BOOL(p(155, s)), p, o, s)
+# define BOOST_PP_WHILE_155(p, o, s) BOOST_PP_WHILE_155_C(BOOST_PP_BOOL(p(156, s)), p, o, s)
+# define BOOST_PP_WHILE_156(p, o, s) BOOST_PP_WHILE_156_C(BOOST_PP_BOOL(p(157, s)), p, o, s)
+# define BOOST_PP_WHILE_157(p, o, s) BOOST_PP_WHILE_157_C(BOOST_PP_BOOL(p(158, s)), p, o, s)
+# define BOOST_PP_WHILE_158(p, o, s) BOOST_PP_WHILE_158_C(BOOST_PP_BOOL(p(159, s)), p, o, s)
+# define BOOST_PP_WHILE_159(p, o, s) BOOST_PP_WHILE_159_C(BOOST_PP_BOOL(p(160, s)), p, o, s)
+# define BOOST_PP_WHILE_160(p, o, s) BOOST_PP_WHILE_160_C(BOOST_PP_BOOL(p(161, s)), p, o, s)
+# define BOOST_PP_WHILE_161(p, o, s) BOOST_PP_WHILE_161_C(BOOST_PP_BOOL(p(162, s)), p, o, s)
+# define BOOST_PP_WHILE_162(p, o, s) BOOST_PP_WHILE_162_C(BOOST_PP_BOOL(p(163, s)), p, o, s)
+# define BOOST_PP_WHILE_163(p, o, s) BOOST_PP_WHILE_163_C(BOOST_PP_BOOL(p(164, s)), p, o, s)
+# define BOOST_PP_WHILE_164(p, o, s) BOOST_PP_WHILE_164_C(BOOST_PP_BOOL(p(165, s)), p, o, s)
+# define BOOST_PP_WHILE_165(p, o, s) BOOST_PP_WHILE_165_C(BOOST_PP_BOOL(p(166, s)), p, o, s)
+# define BOOST_PP_WHILE_166(p, o, s) BOOST_PP_WHILE_166_C(BOOST_PP_BOOL(p(167, s)), p, o, s)
+# define BOOST_PP_WHILE_167(p, o, s) BOOST_PP_WHILE_167_C(BOOST_PP_BOOL(p(168, s)), p, o, s)
+# define BOOST_PP_WHILE_168(p, o, s) BOOST_PP_WHILE_168_C(BOOST_PP_BOOL(p(169, s)), p, o, s)
+# define BOOST_PP_WHILE_169(p, o, s) BOOST_PP_WHILE_169_C(BOOST_PP_BOOL(p(170, s)), p, o, s)
+# define BOOST_PP_WHILE_170(p, o, s) BOOST_PP_WHILE_170_C(BOOST_PP_BOOL(p(171, s)), p, o, s)
+# define BOOST_PP_WHILE_171(p, o, s) BOOST_PP_WHILE_171_C(BOOST_PP_BOOL(p(172, s)), p, o, s)
+# define BOOST_PP_WHILE_172(p, o, s) BOOST_PP_WHILE_172_C(BOOST_PP_BOOL(p(173, s)), p, o, s)
+# define BOOST_PP_WHILE_173(p, o, s) BOOST_PP_WHILE_173_C(BOOST_PP_BOOL(p(174, s)), p, o, s)
+# define BOOST_PP_WHILE_174(p, o, s) BOOST_PP_WHILE_174_C(BOOST_PP_BOOL(p(175, s)), p, o, s)
+# define BOOST_PP_WHILE_175(p, o, s) BOOST_PP_WHILE_175_C(BOOST_PP_BOOL(p(176, s)), p, o, s)
+# define BOOST_PP_WHILE_176(p, o, s) BOOST_PP_WHILE_176_C(BOOST_PP_BOOL(p(177, s)), p, o, s)
+# define BOOST_PP_WHILE_177(p, o, s) BOOST_PP_WHILE_177_C(BOOST_PP_BOOL(p(178, s)), p, o, s)
+# define BOOST_PP_WHILE_178(p, o, s) BOOST_PP_WHILE_178_C(BOOST_PP_BOOL(p(179, s)), p, o, s)
+# define BOOST_PP_WHILE_179(p, o, s) BOOST_PP_WHILE_179_C(BOOST_PP_BOOL(p(180, s)), p, o, s)
+# define BOOST_PP_WHILE_180(p, o, s) BOOST_PP_WHILE_180_C(BOOST_PP_BOOL(p(181, s)), p, o, s)
+# define BOOST_PP_WHILE_181(p, o, s) BOOST_PP_WHILE_181_C(BOOST_PP_BOOL(p(182, s)), p, o, s)
+# define BOOST_PP_WHILE_182(p, o, s) BOOST_PP_WHILE_182_C(BOOST_PP_BOOL(p(183, s)), p, o, s)
+# define BOOST_PP_WHILE_183(p, o, s) BOOST_PP_WHILE_183_C(BOOST_PP_BOOL(p(184, s)), p, o, s)
+# define BOOST_PP_WHILE_184(p, o, s) BOOST_PP_WHILE_184_C(BOOST_PP_BOOL(p(185, s)), p, o, s)
+# define BOOST_PP_WHILE_185(p, o, s) BOOST_PP_WHILE_185_C(BOOST_PP_BOOL(p(186, s)), p, o, s)
+# define BOOST_PP_WHILE_186(p, o, s) BOOST_PP_WHILE_186_C(BOOST_PP_BOOL(p(187, s)), p, o, s)
+# define BOOST_PP_WHILE_187(p, o, s) BOOST_PP_WHILE_187_C(BOOST_PP_BOOL(p(188, s)), p, o, s)
+# define BOOST_PP_WHILE_188(p, o, s) BOOST_PP_WHILE_188_C(BOOST_PP_BOOL(p(189, s)), p, o, s)
+# define BOOST_PP_WHILE_189(p, o, s) BOOST_PP_WHILE_189_C(BOOST_PP_BOOL(p(190, s)), p, o, s)
+# define BOOST_PP_WHILE_190(p, o, s) BOOST_PP_WHILE_190_C(BOOST_PP_BOOL(p(191, s)), p, o, s)
+# define BOOST_PP_WHILE_191(p, o, s) BOOST_PP_WHILE_191_C(BOOST_PP_BOOL(p(192, s)), p, o, s)
+# define BOOST_PP_WHILE_192(p, o, s) BOOST_PP_WHILE_192_C(BOOST_PP_BOOL(p(193, s)), p, o, s)
+# define BOOST_PP_WHILE_193(p, o, s) BOOST_PP_WHILE_193_C(BOOST_PP_BOOL(p(194, s)), p, o, s)
+# define BOOST_PP_WHILE_194(p, o, s) BOOST_PP_WHILE_194_C(BOOST_PP_BOOL(p(195, s)), p, o, s)
+# define BOOST_PP_WHILE_195(p, o, s) BOOST_PP_WHILE_195_C(BOOST_PP_BOOL(p(196, s)), p, o, s)
+# define BOOST_PP_WHILE_196(p, o, s) BOOST_PP_WHILE_196_C(BOOST_PP_BOOL(p(197, s)), p, o, s)
+# define BOOST_PP_WHILE_197(p, o, s) BOOST_PP_WHILE_197_C(BOOST_PP_BOOL(p(198, s)), p, o, s)
+# define BOOST_PP_WHILE_198(p, o, s) BOOST_PP_WHILE_198_C(BOOST_PP_BOOL(p(199, s)), p, o, s)
+# define BOOST_PP_WHILE_199(p, o, s) BOOST_PP_WHILE_199_C(BOOST_PP_BOOL(p(200, s)), p, o, s)
+# define BOOST_PP_WHILE_200(p, o, s) BOOST_PP_WHILE_200_C(BOOST_PP_BOOL(p(201, s)), p, o, s)
+# define BOOST_PP_WHILE_201(p, o, s) BOOST_PP_WHILE_201_C(BOOST_PP_BOOL(p(202, s)), p, o, s)
+# define BOOST_PP_WHILE_202(p, o, s) BOOST_PP_WHILE_202_C(BOOST_PP_BOOL(p(203, s)), p, o, s)
+# define BOOST_PP_WHILE_203(p, o, s) BOOST_PP_WHILE_203_C(BOOST_PP_BOOL(p(204, s)), p, o, s)
+# define BOOST_PP_WHILE_204(p, o, s) BOOST_PP_WHILE_204_C(BOOST_PP_BOOL(p(205, s)), p, o, s)
+# define BOOST_PP_WHILE_205(p, o, s) BOOST_PP_WHILE_205_C(BOOST_PP_BOOL(p(206, s)), p, o, s)
+# define BOOST_PP_WHILE_206(p, o, s) BOOST_PP_WHILE_206_C(BOOST_PP_BOOL(p(207, s)), p, o, s)
+# define BOOST_PP_WHILE_207(p, o, s) BOOST_PP_WHILE_207_C(BOOST_PP_BOOL(p(208, s)), p, o, s)
+# define BOOST_PP_WHILE_208(p, o, s) BOOST_PP_WHILE_208_C(BOOST_PP_BOOL(p(209, s)), p, o, s)
+# define BOOST_PP_WHILE_209(p, o, s) BOOST_PP_WHILE_209_C(BOOST_PP_BOOL(p(210, s)), p, o, s)
+# define BOOST_PP_WHILE_210(p, o, s) BOOST_PP_WHILE_210_C(BOOST_PP_BOOL(p(211, s)), p, o, s)
+# define BOOST_PP_WHILE_211(p, o, s) BOOST_PP_WHILE_211_C(BOOST_PP_BOOL(p(212, s)), p, o, s)
+# define BOOST_PP_WHILE_212(p, o, s) BOOST_PP_WHILE_212_C(BOOST_PP_BOOL(p(213, s)), p, o, s)
+# define BOOST_PP_WHILE_213(p, o, s) BOOST_PP_WHILE_213_C(BOOST_PP_BOOL(p(214, s)), p, o, s)
+# define BOOST_PP_WHILE_214(p, o, s) BOOST_PP_WHILE_214_C(BOOST_PP_BOOL(p(215, s)), p, o, s)
+# define BOOST_PP_WHILE_215(p, o, s) BOOST_PP_WHILE_215_C(BOOST_PP_BOOL(p(216, s)), p, o, s)
+# define BOOST_PP_WHILE_216(p, o, s) BOOST_PP_WHILE_216_C(BOOST_PP_BOOL(p(217, s)), p, o, s)
+# define BOOST_PP_WHILE_217(p, o, s) BOOST_PP_WHILE_217_C(BOOST_PP_BOOL(p(218, s)), p, o, s)
+# define BOOST_PP_WHILE_218(p, o, s) BOOST_PP_WHILE_218_C(BOOST_PP_BOOL(p(219, s)), p, o, s)
+# define BOOST_PP_WHILE_219(p, o, s) BOOST_PP_WHILE_219_C(BOOST_PP_BOOL(p(220, s)), p, o, s)
+# define BOOST_PP_WHILE_220(p, o, s) BOOST_PP_WHILE_220_C(BOOST_PP_BOOL(p(221, s)), p, o, s)
+# define BOOST_PP_WHILE_221(p, o, s) BOOST_PP_WHILE_221_C(BOOST_PP_BOOL(p(222, s)), p, o, s)
+# define BOOST_PP_WHILE_222(p, o, s) BOOST_PP_WHILE_222_C(BOOST_PP_BOOL(p(223, s)), p, o, s)
+# define BOOST_PP_WHILE_223(p, o, s) BOOST_PP_WHILE_223_C(BOOST_PP_BOOL(p(224, s)), p, o, s)
+# define BOOST_PP_WHILE_224(p, o, s) BOOST_PP_WHILE_224_C(BOOST_PP_BOOL(p(225, s)), p, o, s)
+# define BOOST_PP_WHILE_225(p, o, s) BOOST_PP_WHILE_225_C(BOOST_PP_BOOL(p(226, s)), p, o, s)
+# define BOOST_PP_WHILE_226(p, o, s) BOOST_PP_WHILE_226_C(BOOST_PP_BOOL(p(227, s)), p, o, s)
+# define BOOST_PP_WHILE_227(p, o, s) BOOST_PP_WHILE_227_C(BOOST_PP_BOOL(p(228, s)), p, o, s)
+# define BOOST_PP_WHILE_228(p, o, s) BOOST_PP_WHILE_228_C(BOOST_PP_BOOL(p(229, s)), p, o, s)
+# define BOOST_PP_WHILE_229(p, o, s) BOOST_PP_WHILE_229_C(BOOST_PP_BOOL(p(230, s)), p, o, s)
+# define BOOST_PP_WHILE_230(p, o, s) BOOST_PP_WHILE_230_C(BOOST_PP_BOOL(p(231, s)), p, o, s)
+# define BOOST_PP_WHILE_231(p, o, s) BOOST_PP_WHILE_231_C(BOOST_PP_BOOL(p(232, s)), p, o, s)
+# define BOOST_PP_WHILE_232(p, o, s) BOOST_PP_WHILE_232_C(BOOST_PP_BOOL(p(233, s)), p, o, s)
+# define BOOST_PP_WHILE_233(p, o, s) BOOST_PP_WHILE_233_C(BOOST_PP_BOOL(p(234, s)), p, o, s)
+# define BOOST_PP_WHILE_234(p, o, s) BOOST_PP_WHILE_234_C(BOOST_PP_BOOL(p(235, s)), p, o, s)
+# define BOOST_PP_WHILE_235(p, o, s) BOOST_PP_WHILE_235_C(BOOST_PP_BOOL(p(236, s)), p, o, s)
+# define BOOST_PP_WHILE_236(p, o, s) BOOST_PP_WHILE_236_C(BOOST_PP_BOOL(p(237, s)), p, o, s)
+# define BOOST_PP_WHILE_237(p, o, s) BOOST_PP_WHILE_237_C(BOOST_PP_BOOL(p(238, s)), p, o, s)
+# define BOOST_PP_WHILE_238(p, o, s) BOOST_PP_WHILE_238_C(BOOST_PP_BOOL(p(239, s)), p, o, s)
+# define BOOST_PP_WHILE_239(p, o, s) BOOST_PP_WHILE_239_C(BOOST_PP_BOOL(p(240, s)), p, o, s)
+# define BOOST_PP_WHILE_240(p, o, s) BOOST_PP_WHILE_240_C(BOOST_PP_BOOL(p(241, s)), p, o, s)
+# define BOOST_PP_WHILE_241(p, o, s) BOOST_PP_WHILE_241_C(BOOST_PP_BOOL(p(242, s)), p, o, s)
+# define BOOST_PP_WHILE_242(p, o, s) BOOST_PP_WHILE_242_C(BOOST_PP_BOOL(p(243, s)), p, o, s)
+# define BOOST_PP_WHILE_243(p, o, s) BOOST_PP_WHILE_243_C(BOOST_PP_BOOL(p(244, s)), p, o, s)
+# define BOOST_PP_WHILE_244(p, o, s) BOOST_PP_WHILE_244_C(BOOST_PP_BOOL(p(245, s)), p, o, s)
+# define BOOST_PP_WHILE_245(p, o, s) BOOST_PP_WHILE_245_C(BOOST_PP_BOOL(p(246, s)), p, o, s)
+# define BOOST_PP_WHILE_246(p, o, s) BOOST_PP_WHILE_246_C(BOOST_PP_BOOL(p(247, s)), p, o, s)
+# define BOOST_PP_WHILE_247(p, o, s) BOOST_PP_WHILE_247_C(BOOST_PP_BOOL(p(248, s)), p, o, s)
+# define BOOST_PP_WHILE_248(p, o, s) BOOST_PP_WHILE_248_C(BOOST_PP_BOOL(p(249, s)), p, o, s)
+# define BOOST_PP_WHILE_249(p, o, s) BOOST_PP_WHILE_249_C(BOOST_PP_BOOL(p(250, s)), p, o, s)
+# define BOOST_PP_WHILE_250(p, o, s) BOOST_PP_WHILE_250_C(BOOST_PP_BOOL(p(251, s)), p, o, s)
+# define BOOST_PP_WHILE_251(p, o, s) BOOST_PP_WHILE_251_C(BOOST_PP_BOOL(p(252, s)), p, o, s)
+# define BOOST_PP_WHILE_252(p, o, s) BOOST_PP_WHILE_252_C(BOOST_PP_BOOL(p(253, s)), p, o, s)
+# define BOOST_PP_WHILE_253(p, o, s) BOOST_PP_WHILE_253_C(BOOST_PP_BOOL(p(254, s)), p, o, s)
+# define BOOST_PP_WHILE_254(p, o, s) BOOST_PP_WHILE_254_C(BOOST_PP_BOOL(p(255, s)), p, o, s)
+# define BOOST_PP_WHILE_255(p, o, s) BOOST_PP_WHILE_255_C(BOOST_PP_BOOL(p(256, s)), p, o, s)
+# define BOOST_PP_WHILE_256(p, o, s) BOOST_PP_WHILE_256_C(BOOST_PP_BOOL(p(257, s)), p, o, s)
+#
+# define BOOST_PP_WHILE_1_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_2, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(2, s))
+# define BOOST_PP_WHILE_2_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_3, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(3, s))
+# define BOOST_PP_WHILE_3_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_4, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(4, s))
+# define BOOST_PP_WHILE_4_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_5, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(5, s))
+# define BOOST_PP_WHILE_5_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_6, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(6, s))
+# define BOOST_PP_WHILE_6_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_7, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(7, s))
+# define BOOST_PP_WHILE_7_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_8, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(8, s))
+# define BOOST_PP_WHILE_8_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_9, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(9, s))
+# define BOOST_PP_WHILE_9_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_10, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(10, s))
+# define BOOST_PP_WHILE_10_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_11, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(11, s))
+# define BOOST_PP_WHILE_11_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_12, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(12, s))
+# define BOOST_PP_WHILE_12_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_13, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(13, s))
+# define BOOST_PP_WHILE_13_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_14, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(14, s))
+# define BOOST_PP_WHILE_14_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_15, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(15, s))
+# define BOOST_PP_WHILE_15_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_16, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(16, s))
+# define BOOST_PP_WHILE_16_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_17, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(17, s))
+# define BOOST_PP_WHILE_17_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_18, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(18, s))
+# define BOOST_PP_WHILE_18_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_19, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(19, s))
+# define BOOST_PP_WHILE_19_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_20, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(20, s))
+# define BOOST_PP_WHILE_20_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_21, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(21, s))
+# define BOOST_PP_WHILE_21_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_22, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(22, s))
+# define BOOST_PP_WHILE_22_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_23, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(23, s))
+# define BOOST_PP_WHILE_23_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_24, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(24, s))
+# define BOOST_PP_WHILE_24_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_25, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(25, s))
+# define BOOST_PP_WHILE_25_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_26, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(26, s))
+# define BOOST_PP_WHILE_26_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_27, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(27, s))
+# define BOOST_PP_WHILE_27_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_28, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(28, s))
+# define BOOST_PP_WHILE_28_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_29, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(29, s))
+# define BOOST_PP_WHILE_29_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_30, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(30, s))
+# define BOOST_PP_WHILE_30_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_31, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(31, s))
+# define BOOST_PP_WHILE_31_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_32, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(32, s))
+# define BOOST_PP_WHILE_32_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_33, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(33, s))
+# define BOOST_PP_WHILE_33_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_34, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(34, s))
+# define BOOST_PP_WHILE_34_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_35, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(35, s))
+# define BOOST_PP_WHILE_35_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_36, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(36, s))
+# define BOOST_PP_WHILE_36_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_37, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(37, s))
+# define BOOST_PP_WHILE_37_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_38, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(38, s))
+# define BOOST_PP_WHILE_38_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_39, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(39, s))
+# define BOOST_PP_WHILE_39_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_40, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(40, s))
+# define BOOST_PP_WHILE_40_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_41, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(41, s))
+# define BOOST_PP_WHILE_41_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_42, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(42, s))
+# define BOOST_PP_WHILE_42_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_43, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(43, s))
+# define BOOST_PP_WHILE_43_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_44, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(44, s))
+# define BOOST_PP_WHILE_44_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_45, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(45, s))
+# define BOOST_PP_WHILE_45_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_46, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(46, s))
+# define BOOST_PP_WHILE_46_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_47, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(47, s))
+# define BOOST_PP_WHILE_47_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_48, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(48, s))
+# define BOOST_PP_WHILE_48_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_49, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(49, s))
+# define BOOST_PP_WHILE_49_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_50, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(50, s))
+# define BOOST_PP_WHILE_50_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_51, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(51, s))
+# define BOOST_PP_WHILE_51_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_52, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(52, s))
+# define BOOST_PP_WHILE_52_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_53, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(53, s))
+# define BOOST_PP_WHILE_53_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_54, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(54, s))
+# define BOOST_PP_WHILE_54_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_55, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(55, s))
+# define BOOST_PP_WHILE_55_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_56, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(56, s))
+# define BOOST_PP_WHILE_56_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_57, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(57, s))
+# define BOOST_PP_WHILE_57_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_58, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(58, s))
+# define BOOST_PP_WHILE_58_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_59, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(59, s))
+# define BOOST_PP_WHILE_59_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_60, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(60, s))
+# define BOOST_PP_WHILE_60_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_61, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(61, s))
+# define BOOST_PP_WHILE_61_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_62, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(62, s))
+# define BOOST_PP_WHILE_62_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_63, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(63, s))
+# define BOOST_PP_WHILE_63_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_64, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(64, s))
+# define BOOST_PP_WHILE_64_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_65, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(65, s))
+# define BOOST_PP_WHILE_65_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_66, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(66, s))
+# define BOOST_PP_WHILE_66_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_67, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(67, s))
+# define BOOST_PP_WHILE_67_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_68, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(68, s))
+# define BOOST_PP_WHILE_68_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_69, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(69, s))
+# define BOOST_PP_WHILE_69_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_70, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(70, s))
+# define BOOST_PP_WHILE_70_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_71, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(71, s))
+# define BOOST_PP_WHILE_71_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_72, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(72, s))
+# define BOOST_PP_WHILE_72_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_73, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(73, s))
+# define BOOST_PP_WHILE_73_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_74, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(74, s))
+# define BOOST_PP_WHILE_74_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_75, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(75, s))
+# define BOOST_PP_WHILE_75_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_76, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(76, s))
+# define BOOST_PP_WHILE_76_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_77, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(77, s))
+# define BOOST_PP_WHILE_77_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_78, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(78, s))
+# define BOOST_PP_WHILE_78_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_79, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(79, s))
+# define BOOST_PP_WHILE_79_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_80, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(80, s))
+# define BOOST_PP_WHILE_80_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_81, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(81, s))
+# define BOOST_PP_WHILE_81_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_82, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(82, s))
+# define BOOST_PP_WHILE_82_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_83, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(83, s))
+# define BOOST_PP_WHILE_83_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_84, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(84, s))
+# define BOOST_PP_WHILE_84_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_85, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(85, s))
+# define BOOST_PP_WHILE_85_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_86, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(86, s))
+# define BOOST_PP_WHILE_86_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_87, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(87, s))
+# define BOOST_PP_WHILE_87_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_88, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(88, s))
+# define BOOST_PP_WHILE_88_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_89, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(89, s))
+# define BOOST_PP_WHILE_89_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_90, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(90, s))
+# define BOOST_PP_WHILE_90_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_91, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(91, s))
+# define BOOST_PP_WHILE_91_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_92, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(92, s))
+# define BOOST_PP_WHILE_92_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_93, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(93, s))
+# define BOOST_PP_WHILE_93_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_94, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(94, s))
+# define BOOST_PP_WHILE_94_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_95, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(95, s))
+# define BOOST_PP_WHILE_95_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_96, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(96, s))
+# define BOOST_PP_WHILE_96_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_97, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(97, s))
+# define BOOST_PP_WHILE_97_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_98, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(98, s))
+# define BOOST_PP_WHILE_98_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_99, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(99, s))
+# define BOOST_PP_WHILE_99_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_100, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(100, s))
+# define BOOST_PP_WHILE_100_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_101, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(101, s))
+# define BOOST_PP_WHILE_101_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_102, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(102, s))
+# define BOOST_PP_WHILE_102_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_103, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(103, s))
+# define BOOST_PP_WHILE_103_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_104, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(104, s))
+# define BOOST_PP_WHILE_104_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_105, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(105, s))
+# define BOOST_PP_WHILE_105_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_106, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(106, s))
+# define BOOST_PP_WHILE_106_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_107, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(107, s))
+# define BOOST_PP_WHILE_107_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_108, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(108, s))
+# define BOOST_PP_WHILE_108_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_109, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(109, s))
+# define BOOST_PP_WHILE_109_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_110, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(110, s))
+# define BOOST_PP_WHILE_110_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_111, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(111, s))
+# define BOOST_PP_WHILE_111_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_112, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(112, s))
+# define BOOST_PP_WHILE_112_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_113, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(113, s))
+# define BOOST_PP_WHILE_113_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_114, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(114, s))
+# define BOOST_PP_WHILE_114_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_115, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(115, s))
+# define BOOST_PP_WHILE_115_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_116, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(116, s))
+# define BOOST_PP_WHILE_116_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_117, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(117, s))
+# define BOOST_PP_WHILE_117_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_118, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(118, s))
+# define BOOST_PP_WHILE_118_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_119, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(119, s))
+# define BOOST_PP_WHILE_119_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_120, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(120, s))
+# define BOOST_PP_WHILE_120_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_121, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(121, s))
+# define BOOST_PP_WHILE_121_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_122, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(122, s))
+# define BOOST_PP_WHILE_122_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_123, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(123, s))
+# define BOOST_PP_WHILE_123_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_124, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(124, s))
+# define BOOST_PP_WHILE_124_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_125, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(125, s))
+# define BOOST_PP_WHILE_125_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_126, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(126, s))
+# define BOOST_PP_WHILE_126_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_127, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(127, s))
+# define BOOST_PP_WHILE_127_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_128, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(128, s))
+# define BOOST_PP_WHILE_128_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_129, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(129, s))
+# define BOOST_PP_WHILE_129_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_130, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(130, s))
+# define BOOST_PP_WHILE_130_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_131, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(131, s))
+# define BOOST_PP_WHILE_131_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_132, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(132, s))
+# define BOOST_PP_WHILE_132_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_133, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(133, s))
+# define BOOST_PP_WHILE_133_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_134, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(134, s))
+# define BOOST_PP_WHILE_134_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_135, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(135, s))
+# define BOOST_PP_WHILE_135_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_136, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(136, s))
+# define BOOST_PP_WHILE_136_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_137, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(137, s))
+# define BOOST_PP_WHILE_137_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_138, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(138, s))
+# define BOOST_PP_WHILE_138_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_139, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(139, s))
+# define BOOST_PP_WHILE_139_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_140, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(140, s))
+# define BOOST_PP_WHILE_140_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_141, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(141, s))
+# define BOOST_PP_WHILE_141_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_142, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(142, s))
+# define BOOST_PP_WHILE_142_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_143, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(143, s))
+# define BOOST_PP_WHILE_143_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_144, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(144, s))
+# define BOOST_PP_WHILE_144_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_145, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(145, s))
+# define BOOST_PP_WHILE_145_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_146, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(146, s))
+# define BOOST_PP_WHILE_146_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_147, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(147, s))
+# define BOOST_PP_WHILE_147_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_148, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(148, s))
+# define BOOST_PP_WHILE_148_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_149, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(149, s))
+# define BOOST_PP_WHILE_149_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_150, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(150, s))
+# define BOOST_PP_WHILE_150_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_151, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(151, s))
+# define BOOST_PP_WHILE_151_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_152, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(152, s))
+# define BOOST_PP_WHILE_152_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_153, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(153, s))
+# define BOOST_PP_WHILE_153_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_154, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(154, s))
+# define BOOST_PP_WHILE_154_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_155, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(155, s))
+# define BOOST_PP_WHILE_155_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_156, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(156, s))
+# define BOOST_PP_WHILE_156_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_157, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(157, s))
+# define BOOST_PP_WHILE_157_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_158, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(158, s))
+# define BOOST_PP_WHILE_158_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_159, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(159, s))
+# define BOOST_PP_WHILE_159_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_160, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(160, s))
+# define BOOST_PP_WHILE_160_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_161, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(161, s))
+# define BOOST_PP_WHILE_161_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_162, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(162, s))
+# define BOOST_PP_WHILE_162_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_163, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(163, s))
+# define BOOST_PP_WHILE_163_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_164, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(164, s))
+# define BOOST_PP_WHILE_164_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_165, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(165, s))
+# define BOOST_PP_WHILE_165_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_166, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(166, s))
+# define BOOST_PP_WHILE_166_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_167, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(167, s))
+# define BOOST_PP_WHILE_167_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_168, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(168, s))
+# define BOOST_PP_WHILE_168_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_169, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(169, s))
+# define BOOST_PP_WHILE_169_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_170, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(170, s))
+# define BOOST_PP_WHILE_170_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_171, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(171, s))
+# define BOOST_PP_WHILE_171_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_172, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(172, s))
+# define BOOST_PP_WHILE_172_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_173, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(173, s))
+# define BOOST_PP_WHILE_173_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_174, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(174, s))
+# define BOOST_PP_WHILE_174_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_175, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(175, s))
+# define BOOST_PP_WHILE_175_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_176, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(176, s))
+# define BOOST_PP_WHILE_176_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_177, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(177, s))
+# define BOOST_PP_WHILE_177_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_178, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(178, s))
+# define BOOST_PP_WHILE_178_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_179, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(179, s))
+# define BOOST_PP_WHILE_179_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_180, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(180, s))
+# define BOOST_PP_WHILE_180_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_181, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(181, s))
+# define BOOST_PP_WHILE_181_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_182, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(182, s))
+# define BOOST_PP_WHILE_182_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_183, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(183, s))
+# define BOOST_PP_WHILE_183_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_184, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(184, s))
+# define BOOST_PP_WHILE_184_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_185, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(185, s))
+# define BOOST_PP_WHILE_185_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_186, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(186, s))
+# define BOOST_PP_WHILE_186_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_187, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(187, s))
+# define BOOST_PP_WHILE_187_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_188, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(188, s))
+# define BOOST_PP_WHILE_188_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_189, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(189, s))
+# define BOOST_PP_WHILE_189_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_190, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(190, s))
+# define BOOST_PP_WHILE_190_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_191, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(191, s))
+# define BOOST_PP_WHILE_191_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_192, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(192, s))
+# define BOOST_PP_WHILE_192_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_193, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(193, s))
+# define BOOST_PP_WHILE_193_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_194, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(194, s))
+# define BOOST_PP_WHILE_194_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_195, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(195, s))
+# define BOOST_PP_WHILE_195_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_196, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(196, s))
+# define BOOST_PP_WHILE_196_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_197, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(197, s))
+# define BOOST_PP_WHILE_197_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_198, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(198, s))
+# define BOOST_PP_WHILE_198_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_199, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(199, s))
+# define BOOST_PP_WHILE_199_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_200, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(200, s))
+# define BOOST_PP_WHILE_200_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_201, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(201, s))
+# define BOOST_PP_WHILE_201_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_202, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(202, s))
+# define BOOST_PP_WHILE_202_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_203, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(203, s))
+# define BOOST_PP_WHILE_203_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_204, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(204, s))
+# define BOOST_PP_WHILE_204_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_205, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(205, s))
+# define BOOST_PP_WHILE_205_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_206, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(206, s))
+# define BOOST_PP_WHILE_206_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_207, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(207, s))
+# define BOOST_PP_WHILE_207_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_208, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(208, s))
+# define BOOST_PP_WHILE_208_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_209, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(209, s))
+# define BOOST_PP_WHILE_209_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_210, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(210, s))
+# define BOOST_PP_WHILE_210_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_211, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(211, s))
+# define BOOST_PP_WHILE_211_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_212, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(212, s))
+# define BOOST_PP_WHILE_212_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_213, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(213, s))
+# define BOOST_PP_WHILE_213_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_214, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(214, s))
+# define BOOST_PP_WHILE_214_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_215, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(215, s))
+# define BOOST_PP_WHILE_215_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_216, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(216, s))
+# define BOOST_PP_WHILE_216_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_217, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(217, s))
+# define BOOST_PP_WHILE_217_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_218, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(218, s))
+# define BOOST_PP_WHILE_218_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_219, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(219, s))
+# define BOOST_PP_WHILE_219_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_220, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(220, s))
+# define BOOST_PP_WHILE_220_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_221, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(221, s))
+# define BOOST_PP_WHILE_221_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_222, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(222, s))
+# define BOOST_PP_WHILE_222_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_223, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(223, s))
+# define BOOST_PP_WHILE_223_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_224, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(224, s))
+# define BOOST_PP_WHILE_224_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_225, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(225, s))
+# define BOOST_PP_WHILE_225_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_226, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(226, s))
+# define BOOST_PP_WHILE_226_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_227, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(227, s))
+# define BOOST_PP_WHILE_227_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_228, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(228, s))
+# define BOOST_PP_WHILE_228_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_229, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(229, s))
+# define BOOST_PP_WHILE_229_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_230, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(230, s))
+# define BOOST_PP_WHILE_230_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_231, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(231, s))
+# define BOOST_PP_WHILE_231_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_232, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(232, s))
+# define BOOST_PP_WHILE_232_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_233, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(233, s))
+# define BOOST_PP_WHILE_233_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_234, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(234, s))
+# define BOOST_PP_WHILE_234_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_235, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(235, s))
+# define BOOST_PP_WHILE_235_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_236, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(236, s))
+# define BOOST_PP_WHILE_236_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_237, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(237, s))
+# define BOOST_PP_WHILE_237_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_238, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(238, s))
+# define BOOST_PP_WHILE_238_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_239, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(239, s))
+# define BOOST_PP_WHILE_239_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_240, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(240, s))
+# define BOOST_PP_WHILE_240_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_241, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(241, s))
+# define BOOST_PP_WHILE_241_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_242, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(242, s))
+# define BOOST_PP_WHILE_242_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_243, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(243, s))
+# define BOOST_PP_WHILE_243_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_244, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(244, s))
+# define BOOST_PP_WHILE_244_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_245, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(245, s))
+# define BOOST_PP_WHILE_245_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_246, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(246, s))
+# define BOOST_PP_WHILE_246_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_247, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(247, s))
+# define BOOST_PP_WHILE_247_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_248, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(248, s))
+# define BOOST_PP_WHILE_248_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_249, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(249, s))
+# define BOOST_PP_WHILE_249_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_250, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(250, s))
+# define BOOST_PP_WHILE_250_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_251, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(251, s))
+# define BOOST_PP_WHILE_251_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_252, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(252, s))
+# define BOOST_PP_WHILE_252_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_253, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(253, s))
+# define BOOST_PP_WHILE_253_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_254, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(254, s))
+# define BOOST_PP_WHILE_254_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_255, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(255, s))
+# define BOOST_PP_WHILE_255_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_256, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(256, s))
+# define BOOST_PP_WHILE_256_C(c, p, o, s) BOOST_PP_IIF(c, BOOST_PP_WHILE_257, s BOOST_PP_TUPLE_EAT_3)(p, o, BOOST_PP_IIF(c, o, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_2)(257, s))
+#
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/control/expr_if.hpp b/vendor/pdalboost/boost/preprocessor/control/expr_if.hpp
new file mode 100644
index 0000000..0e1ab51
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/control/expr_if.hpp
@@ -0,0 +1,30 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_EXPR_IF_HPP
+# define BOOST_PREPROCESSOR_CONTROL_EXPR_IF_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+#
+# /* BOOST_PP_EXPR_IF */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_EXPR_IF(cond, expr) BOOST_PP_EXPR_IIF(BOOST_PP_BOOL(cond), expr)
+# else
+#    define BOOST_PP_EXPR_IF(cond, expr) BOOST_PP_EXPR_IF_I(cond, expr)
+#    define BOOST_PP_EXPR_IF_I(cond, expr) BOOST_PP_EXPR_IIF(BOOST_PP_BOOL(cond), expr)
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/control/expr_iif.hpp b/vendor/pdalboost/boost/preprocessor/control/expr_iif.hpp
new file mode 100644
index 0000000..58f45a4
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/control/expr_iif.hpp
@@ -0,0 +1,31 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_EXPR_IIF_HPP
+# define BOOST_PREPROCESSOR_CONTROL_EXPR_IIF_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_EXPR_IIF */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_EXPR_IIF(bit, expr) BOOST_PP_EXPR_IIF_I(bit, expr)
+# else
+#    define BOOST_PP_EXPR_IIF(bit, expr) BOOST_PP_EXPR_IIF_OO((bit, expr))
+#    define BOOST_PP_EXPR_IIF_OO(par) BOOST_PP_EXPR_IIF_I ## par
+# endif
+#
+# define BOOST_PP_EXPR_IIF_I(bit, expr) BOOST_PP_EXPR_IIF_ ## bit(expr)
+#
+# define BOOST_PP_EXPR_IIF_0(expr)
+# define BOOST_PP_EXPR_IIF_1(expr) expr
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/control/if.hpp b/vendor/pdalboost/boost/preprocessor/control/if.hpp
new file mode 100644
index 0000000..52cfc3d
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/control/if.hpp
@@ -0,0 +1,30 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_IF_HPP
+# define BOOST_PREPROCESSOR_CONTROL_IF_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+#
+# /* BOOST_PP_IF */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_IF(cond, t, f) BOOST_PP_IIF(BOOST_PP_BOOL(cond), t, f)
+# else
+#    define BOOST_PP_IF(cond, t, f) BOOST_PP_IF_I(cond, t, f)
+#    define BOOST_PP_IF_I(cond, t, f) BOOST_PP_IIF(BOOST_PP_BOOL(cond), t, f)
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/control/iif.hpp b/vendor/pdalboost/boost/preprocessor/control/iif.hpp
new file mode 100644
index 0000000..fd07817
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/control/iif.hpp
@@ -0,0 +1,34 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_IIF_HPP
+# define BOOST_PREPROCESSOR_CONTROL_IIF_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_IIF(bit, t, f) BOOST_PP_IIF_I(bit, t, f)
+# else
+#    define BOOST_PP_IIF(bit, t, f) BOOST_PP_IIF_OO((bit, t, f))
+#    define BOOST_PP_IIF_OO(par) BOOST_PP_IIF_I ## par
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#    define BOOST_PP_IIF_I(bit, t, f) BOOST_PP_IIF_ ## bit(t, f)
+# else
+#    define BOOST_PP_IIF_I(bit, t, f) BOOST_PP_IIF_II(BOOST_PP_IIF_ ## bit(t, f))
+#    define BOOST_PP_IIF_II(id) id
+# endif
+#
+# define BOOST_PP_IIF_0(t, f) f
+# define BOOST_PP_IIF_1(t, f) t
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/control/while.hpp b/vendor/pdalboost/boost/preprocessor/control/while.hpp
new file mode 100644
index 0000000..e8a65ff
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/control/while.hpp
@@ -0,0 +1,312 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_CONTROL_WHILE_HPP
+# define BOOST_PREPROCESSOR_CONTROL_WHILE_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/list/fold_left.hpp>
+# include <boost/preprocessor/list/fold_right.hpp>
+# include <boost/preprocessor/logical/bitand.hpp>
+#
+# /* BOOST_PP_WHILE */
+#
+# if 0
+#    define BOOST_PP_WHILE(pred, op, state)
+# endif
+#
+# define BOOST_PP_WHILE BOOST_PP_CAT(BOOST_PP_WHILE_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_WHILE_P(n) BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_WHILE_ ## n(BOOST_PP_WHILE_F, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_LIST_FOLD_LEFT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_RIGHT_CHECK_, BOOST_PP_LIST_FOLD_RIGHT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL))))
+# else
+#    define BOOST_PP_WHILE_P(n) BOOST_PP_BITAND(BOOST_PP_CAT(BOOST_PP_WHILE_CHECK_, BOOST_PP_WHILE_ ## n(BOOST_PP_WHILE_F, BOOST_PP_NIL, BOOST_PP_NIL)), BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_CHECK_, BOOST_PP_LIST_FOLD_LEFT_ ## n(BOOST_PP_NIL, BOOST_PP_NIL, BOOST_PP_NIL)))
+# endif
+#
+# define BOOST_PP_WHILE_F(d, _) 0
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    include <boost/preprocessor/control/detail/edg/while.hpp>
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#    include <boost/preprocessor/control/detail/msvc/while.hpp>
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+#    include <boost/preprocessor/control/detail/dmc/while.hpp>
+# else
+#    include <boost/preprocessor/control/detail/while.hpp>
+# endif
+#
+# define BOOST_PP_WHILE_257(p, o, s) BOOST_PP_ERROR(0x0001)
+#
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_NIL 1
+#
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_1(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_2(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_3(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_4(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_5(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_6(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_7(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_8(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_9(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_10(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_11(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_12(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_13(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_14(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_15(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_16(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_17(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_18(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_19(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_20(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_21(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_22(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_23(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_24(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_25(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_26(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_27(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_28(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_29(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_30(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_31(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_32(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_33(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_34(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_35(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_36(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_37(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_38(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_39(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_40(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_41(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_42(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_43(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_44(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_45(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_46(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_47(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_48(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_49(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_50(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_51(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_52(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_53(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_54(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_55(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_56(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_57(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_58(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_59(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_60(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_61(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_62(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_63(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_64(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_65(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_66(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_67(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_68(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_69(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_70(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_71(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_72(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_73(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_74(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_75(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_76(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_77(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_78(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_79(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_80(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_81(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_82(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_83(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_84(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_85(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_86(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_87(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_88(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_89(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_90(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_91(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_92(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_93(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_94(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_95(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_96(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_97(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_98(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_99(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_100(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_101(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_102(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_103(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_104(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_105(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_106(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_107(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_108(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_109(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_110(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_111(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_112(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_113(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_114(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_115(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_116(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_117(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_118(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_119(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_120(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_121(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_122(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_123(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_124(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_125(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_126(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_127(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_128(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_129(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_130(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_131(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_132(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_133(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_134(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_135(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_136(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_137(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_138(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_139(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_140(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_141(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_142(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_143(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_144(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_145(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_146(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_147(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_148(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_149(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_150(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_151(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_152(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_153(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_154(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_155(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_156(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_157(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_158(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_159(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_160(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_161(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_162(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_163(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_164(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_165(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_166(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_167(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_168(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_169(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_170(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_171(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_172(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_173(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_174(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_175(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_176(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_177(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_178(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_179(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_180(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_181(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_182(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_183(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_184(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_185(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_186(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_187(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_188(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_189(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_190(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_191(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_192(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_193(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_194(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_195(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_196(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_197(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_198(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_199(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_200(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_201(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_202(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_203(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_204(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_205(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_206(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_207(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_208(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_209(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_210(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_211(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_212(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_213(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_214(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_215(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_216(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_217(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_218(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_219(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_220(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_221(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_222(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_223(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_224(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_225(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_226(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_227(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_228(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_229(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_230(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_231(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_232(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_233(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_234(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_235(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_236(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_237(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_238(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_239(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_240(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_241(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_242(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_243(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_244(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_245(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_246(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_247(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_248(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_249(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_250(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_251(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_252(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_253(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_254(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_255(p, o, s) 0
+# define BOOST_PP_WHILE_CHECK_BOOST_PP_WHILE_256(p, o, s) 0
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/debug/error.hpp b/vendor/pdalboost/boost/preprocessor/debug/error.hpp
new file mode 100644
index 0000000..c8ae5e7
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/debug/error.hpp
@@ -0,0 +1,33 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DEBUG_ERROR_HPP
+# define BOOST_PREPROCESSOR_DEBUG_ERROR_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_ERROR */
+#
+# if BOOST_PP_CONFIG_ERRORS
+#    define BOOST_PP_ERROR(code) BOOST_PP_CAT(BOOST_PP_ERROR_, code)
+# endif
+#
+# define BOOST_PP_ERROR_0x0000 BOOST_PP_ERROR(0x0000, BOOST_PP_INDEX_OUT_OF_BOUNDS)
+# define BOOST_PP_ERROR_0x0001 BOOST_PP_ERROR(0x0001, BOOST_PP_WHILE_OVERFLOW)
+# define BOOST_PP_ERROR_0x0002 BOOST_PP_ERROR(0x0002, BOOST_PP_FOR_OVERFLOW)
+# define BOOST_PP_ERROR_0x0003 BOOST_PP_ERROR(0x0003, BOOST_PP_REPEAT_OVERFLOW)
+# define BOOST_PP_ERROR_0x0004 BOOST_PP_ERROR(0x0004, BOOST_PP_LIST_FOLD_OVERFLOW)
+# define BOOST_PP_ERROR_0x0005 BOOST_PP_ERROR(0x0005, BOOST_PP_SEQ_FOLD_OVERFLOW)
+# define BOOST_PP_ERROR_0x0006 BOOST_PP_ERROR(0x0006, BOOST_PP_ARITHMETIC_OVERFLOW)
+# define BOOST_PP_ERROR_0x0007 BOOST_PP_ERROR(0x0007, BOOST_PP_DIVISION_BY_ZERO)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/dec.hpp b/vendor/pdalboost/boost/preprocessor/dec.hpp
new file mode 100644
index 0000000..d572064
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/dec.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DEC_HPP
+# define BOOST_PREPROCESSOR_DEC_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/detail/auto_rec.hpp b/vendor/pdalboost/boost/preprocessor/detail/auto_rec.hpp
new file mode 100644
index 0000000..39de1d0
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/detail/auto_rec.hpp
@@ -0,0 +1,293 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+#     include <boost/preprocessor/detail/dmc/auto_rec.hpp>
+# else
+#
+# ifndef BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP
+# define BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP
+#
+# include <boost/preprocessor/control/iif.hpp>
+#
+# /* BOOST_PP_AUTO_REC */
+#
+# define BOOST_PP_AUTO_REC(pred, n) BOOST_PP_NODE_ENTRY_ ## n(pred)
+#
+# define BOOST_PP_NODE_ENTRY_256(p) BOOST_PP_NODE_128(p)(p)(p)(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_128(p) BOOST_PP_NODE_64(p)(p)(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_64(p) BOOST_PP_NODE_32(p)(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_32(p) BOOST_PP_NODE_16(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_16(p) BOOST_PP_NODE_8(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_8(p) BOOST_PP_NODE_4(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_4(p) BOOST_PP_NODE_2(p)(p)
+# define BOOST_PP_NODE_ENTRY_2(p) BOOST_PP_NODE_1(p)
+#
+# define BOOST_PP_NODE_128(p) BOOST_PP_IIF(p(128), BOOST_PP_NODE_64, BOOST_PP_NODE_192)
+#    define BOOST_PP_NODE_64(p) BOOST_PP_IIF(p(64), BOOST_PP_NODE_32, BOOST_PP_NODE_96)
+#        define BOOST_PP_NODE_32(p) BOOST_PP_IIF(p(32), BOOST_PP_NODE_16, BOOST_PP_NODE_48)
+#            define BOOST_PP_NODE_16(p) BOOST_PP_IIF(p(16), BOOST_PP_NODE_8, BOOST_PP_NODE_24)
+#                define BOOST_PP_NODE_8(p) BOOST_PP_IIF(p(8), BOOST_PP_NODE_4, BOOST_PP_NODE_12)
+#                    define BOOST_PP_NODE_4(p) BOOST_PP_IIF(p(4), BOOST_PP_NODE_2, BOOST_PP_NODE_6)
+#                        define BOOST_PP_NODE_2(p) BOOST_PP_IIF(p(2), BOOST_PP_NODE_1, BOOST_PP_NODE_3)
+#                            define BOOST_PP_NODE_1(p) BOOST_PP_IIF(p(1), 1, 2)
+#                            define BOOST_PP_NODE_3(p) BOOST_PP_IIF(p(3), 3, 4)
+#                        define BOOST_PP_NODE_6(p) BOOST_PP_IIF(p(6), BOOST_PP_NODE_5, BOOST_PP_NODE_7)
+#                            define BOOST_PP_NODE_5(p) BOOST_PP_IIF(p(5), 5, 6)
+#                            define BOOST_PP_NODE_7(p) BOOST_PP_IIF(p(7), 7, 8)
+#                    define BOOST_PP_NODE_12(p) BOOST_PP_IIF(p(12), BOOST_PP_NODE_10, BOOST_PP_NODE_14)
+#                        define BOOST_PP_NODE_10(p) BOOST_PP_IIF(p(10), BOOST_PP_NODE_9, BOOST_PP_NODE_11)
+#                            define BOOST_PP_NODE_9(p) BOOST_PP_IIF(p(9), 9, 10)
+#                            define BOOST_PP_NODE_11(p) BOOST_PP_IIF(p(11), 11, 12)
+#                        define BOOST_PP_NODE_14(p) BOOST_PP_IIF(p(14), BOOST_PP_NODE_13, BOOST_PP_NODE_15)
+#                            define BOOST_PP_NODE_13(p) BOOST_PP_IIF(p(13), 13, 14)
+#                            define BOOST_PP_NODE_15(p) BOOST_PP_IIF(p(15), 15, 16)
+#                define BOOST_PP_NODE_24(p) BOOST_PP_IIF(p(24), BOOST_PP_NODE_20, BOOST_PP_NODE_28)
+#                    define BOOST_PP_NODE_20(p) BOOST_PP_IIF(p(20), BOOST_PP_NODE_18, BOOST_PP_NODE_22)
+#                        define BOOST_PP_NODE_18(p) BOOST_PP_IIF(p(18), BOOST_PP_NODE_17, BOOST_PP_NODE_19)
+#                            define BOOST_PP_NODE_17(p) BOOST_PP_IIF(p(17), 17, 18)
+#                            define BOOST_PP_NODE_19(p) BOOST_PP_IIF(p(19), 19, 20)
+#                        define BOOST_PP_NODE_22(p) BOOST_PP_IIF(p(22), BOOST_PP_NODE_21, BOOST_PP_NODE_23)
+#                            define BOOST_PP_NODE_21(p) BOOST_PP_IIF(p(21), 21, 22)
+#                            define BOOST_PP_NODE_23(p) BOOST_PP_IIF(p(23), 23, 24)
+#                    define BOOST_PP_NODE_28(p) BOOST_PP_IIF(p(28), BOOST_PP_NODE_26, BOOST_PP_NODE_30)
+#                        define BOOST_PP_NODE_26(p) BOOST_PP_IIF(p(26), BOOST_PP_NODE_25, BOOST_PP_NODE_27)
+#                            define BOOST_PP_NODE_25(p) BOOST_PP_IIF(p(25), 25, 26)
+#                            define BOOST_PP_NODE_27(p) BOOST_PP_IIF(p(27), 27, 28)
+#                        define BOOST_PP_NODE_30(p) BOOST_PP_IIF(p(30), BOOST_PP_NODE_29, BOOST_PP_NODE_31)
+#                            define BOOST_PP_NODE_29(p) BOOST_PP_IIF(p(29), 29, 30)
+#                            define BOOST_PP_NODE_31(p) BOOST_PP_IIF(p(31), 31, 32)
+#            define BOOST_PP_NODE_48(p) BOOST_PP_IIF(p(48), BOOST_PP_NODE_40, BOOST_PP_NODE_56)
+#                define BOOST_PP_NODE_40(p) BOOST_PP_IIF(p(40), BOOST_PP_NODE_36, BOOST_PP_NODE_44)
+#                    define BOOST_PP_NODE_36(p) BOOST_PP_IIF(p(36), BOOST_PP_NODE_34, BOOST_PP_NODE_38)
+#                        define BOOST_PP_NODE_34(p) BOOST_PP_IIF(p(34), BOOST_PP_NODE_33, BOOST_PP_NODE_35)
+#                            define BOOST_PP_NODE_33(p) BOOST_PP_IIF(p(33), 33, 34)
+#                            define BOOST_PP_NODE_35(p) BOOST_PP_IIF(p(35), 35, 36)
+#                        define BOOST_PP_NODE_38(p) BOOST_PP_IIF(p(38), BOOST_PP_NODE_37, BOOST_PP_NODE_39)
+#                            define BOOST_PP_NODE_37(p) BOOST_PP_IIF(p(37), 37, 38)
+#                            define BOOST_PP_NODE_39(p) BOOST_PP_IIF(p(39), 39, 40)
+#                    define BOOST_PP_NODE_44(p) BOOST_PP_IIF(p(44), BOOST_PP_NODE_42, BOOST_PP_NODE_46)
+#                        define BOOST_PP_NODE_42(p) BOOST_PP_IIF(p(42), BOOST_PP_NODE_41, BOOST_PP_NODE_43)
+#                            define BOOST_PP_NODE_41(p) BOOST_PP_IIF(p(41), 41, 42)
+#                            define BOOST_PP_NODE_43(p) BOOST_PP_IIF(p(43), 43, 44)
+#                        define BOOST_PP_NODE_46(p) BOOST_PP_IIF(p(46), BOOST_PP_NODE_45, BOOST_PP_NODE_47)
+#                            define BOOST_PP_NODE_45(p) BOOST_PP_IIF(p(45), 45, 46)
+#                            define BOOST_PP_NODE_47(p) BOOST_PP_IIF(p(47), 47, 48)
+#                define BOOST_PP_NODE_56(p) BOOST_PP_IIF(p(56), BOOST_PP_NODE_52, BOOST_PP_NODE_60)
+#                    define BOOST_PP_NODE_52(p) BOOST_PP_IIF(p(52), BOOST_PP_NODE_50, BOOST_PP_NODE_54)
+#                        define BOOST_PP_NODE_50(p) BOOST_PP_IIF(p(50), BOOST_PP_NODE_49, BOOST_PP_NODE_51)
+#                            define BOOST_PP_NODE_49(p) BOOST_PP_IIF(p(49), 49, 50)
+#                            define BOOST_PP_NODE_51(p) BOOST_PP_IIF(p(51), 51, 52)
+#                        define BOOST_PP_NODE_54(p) BOOST_PP_IIF(p(54), BOOST_PP_NODE_53, BOOST_PP_NODE_55)
+#                            define BOOST_PP_NODE_53(p) BOOST_PP_IIF(p(53), 53, 54)
+#                            define BOOST_PP_NODE_55(p) BOOST_PP_IIF(p(55), 55, 56)
+#                    define BOOST_PP_NODE_60(p) BOOST_PP_IIF(p(60), BOOST_PP_NODE_58, BOOST_PP_NODE_62)
+#                        define BOOST_PP_NODE_58(p) BOOST_PP_IIF(p(58), BOOST_PP_NODE_57, BOOST_PP_NODE_59)
+#                            define BOOST_PP_NODE_57(p) BOOST_PP_IIF(p(57), 57, 58)
+#                            define BOOST_PP_NODE_59(p) BOOST_PP_IIF(p(59), 59, 60)
+#                        define BOOST_PP_NODE_62(p) BOOST_PP_IIF(p(62), BOOST_PP_NODE_61, BOOST_PP_NODE_63)
+#                            define BOOST_PP_NODE_61(p) BOOST_PP_IIF(p(61), 61, 62)
+#                            define BOOST_PP_NODE_63(p) BOOST_PP_IIF(p(63), 63, 64)
+#        define BOOST_PP_NODE_96(p) BOOST_PP_IIF(p(96), BOOST_PP_NODE_80, BOOST_PP_NODE_112)
+#            define BOOST_PP_NODE_80(p) BOOST_PP_IIF(p(80), BOOST_PP_NODE_72, BOOST_PP_NODE_88)
+#                define BOOST_PP_NODE_72(p) BOOST_PP_IIF(p(72), BOOST_PP_NODE_68, BOOST_PP_NODE_76)
+#                    define BOOST_PP_NODE_68(p) BOOST_PP_IIF(p(68), BOOST_PP_NODE_66, BOOST_PP_NODE_70)
+#                        define BOOST_PP_NODE_66(p) BOOST_PP_IIF(p(66), BOOST_PP_NODE_65, BOOST_PP_NODE_67)
+#                            define BOOST_PP_NODE_65(p) BOOST_PP_IIF(p(65), 65, 66)
+#                            define BOOST_PP_NODE_67(p) BOOST_PP_IIF(p(67), 67, 68)
+#                        define BOOST_PP_NODE_70(p) BOOST_PP_IIF(p(70), BOOST_PP_NODE_69, BOOST_PP_NODE_71)
+#                            define BOOST_PP_NODE_69(p) BOOST_PP_IIF(p(69), 69, 70)
+#                            define BOOST_PP_NODE_71(p) BOOST_PP_IIF(p(71), 71, 72)
+#                    define BOOST_PP_NODE_76(p) BOOST_PP_IIF(p(76), BOOST_PP_NODE_74, BOOST_PP_NODE_78)
+#                        define BOOST_PP_NODE_74(p) BOOST_PP_IIF(p(74), BOOST_PP_NODE_73, BOOST_PP_NODE_75)
+#                            define BOOST_PP_NODE_73(p) BOOST_PP_IIF(p(73), 73, 74)
+#                            define BOOST_PP_NODE_75(p) BOOST_PP_IIF(p(75), 75, 76)
+#                        define BOOST_PP_NODE_78(p) BOOST_PP_IIF(p(78), BOOST_PP_NODE_77, BOOST_PP_NODE_79)
+#                            define BOOST_PP_NODE_77(p) BOOST_PP_IIF(p(77), 77, 78)
+#                            define BOOST_PP_NODE_79(p) BOOST_PP_IIF(p(79), 79, 80)
+#                define BOOST_PP_NODE_88(p) BOOST_PP_IIF(p(88), BOOST_PP_NODE_84, BOOST_PP_NODE_92)
+#                    define BOOST_PP_NODE_84(p) BOOST_PP_IIF(p(84), BOOST_PP_NODE_82, BOOST_PP_NODE_86)
+#                        define BOOST_PP_NODE_82(p) BOOST_PP_IIF(p(82), BOOST_PP_NODE_81, BOOST_PP_NODE_83)
+#                            define BOOST_PP_NODE_81(p) BOOST_PP_IIF(p(81), 81, 82)
+#                            define BOOST_PP_NODE_83(p) BOOST_PP_IIF(p(83), 83, 84)
+#                        define BOOST_PP_NODE_86(p) BOOST_PP_IIF(p(86), BOOST_PP_NODE_85, BOOST_PP_NODE_87)
+#                            define BOOST_PP_NODE_85(p) BOOST_PP_IIF(p(85), 85, 86)
+#                            define BOOST_PP_NODE_87(p) BOOST_PP_IIF(p(87), 87, 88)
+#                    define BOOST_PP_NODE_92(p) BOOST_PP_IIF(p(92), BOOST_PP_NODE_90, BOOST_PP_NODE_94)
+#                        define BOOST_PP_NODE_90(p) BOOST_PP_IIF(p(90), BOOST_PP_NODE_89, BOOST_PP_NODE_91)
+#                            define BOOST_PP_NODE_89(p) BOOST_PP_IIF(p(89), 89, 90)
+#                            define BOOST_PP_NODE_91(p) BOOST_PP_IIF(p(91), 91, 92)
+#                        define BOOST_PP_NODE_94(p) BOOST_PP_IIF(p(94), BOOST_PP_NODE_93, BOOST_PP_NODE_95)
+#                            define BOOST_PP_NODE_93(p) BOOST_PP_IIF(p(93), 93, 94)
+#                            define BOOST_PP_NODE_95(p) BOOST_PP_IIF(p(95), 95, 96)
+#            define BOOST_PP_NODE_112(p) BOOST_PP_IIF(p(112), BOOST_PP_NODE_104, BOOST_PP_NODE_120)
+#                define BOOST_PP_NODE_104(p) BOOST_PP_IIF(p(104), BOOST_PP_NODE_100, BOOST_PP_NODE_108)
+#                    define BOOST_PP_NODE_100(p) BOOST_PP_IIF(p(100), BOOST_PP_NODE_98, BOOST_PP_NODE_102)
+#                        define BOOST_PP_NODE_98(p) BOOST_PP_IIF(p(98), BOOST_PP_NODE_97, BOOST_PP_NODE_99)
+#                            define BOOST_PP_NODE_97(p) BOOST_PP_IIF(p(97), 97, 98)
+#                            define BOOST_PP_NODE_99(p) BOOST_PP_IIF(p(99), 99, 100)
+#                        define BOOST_PP_NODE_102(p) BOOST_PP_IIF(p(102), BOOST_PP_NODE_101, BOOST_PP_NODE_103)
+#                            define BOOST_PP_NODE_101(p) BOOST_PP_IIF(p(101), 101, 102)
+#                            define BOOST_PP_NODE_103(p) BOOST_PP_IIF(p(103), 103, 104)
+#                    define BOOST_PP_NODE_108(p) BOOST_PP_IIF(p(108), BOOST_PP_NODE_106, BOOST_PP_NODE_110)
+#                        define BOOST_PP_NODE_106(p) BOOST_PP_IIF(p(106), BOOST_PP_NODE_105, BOOST_PP_NODE_107)
+#                            define BOOST_PP_NODE_105(p) BOOST_PP_IIF(p(105), 105, 106)
+#                            define BOOST_PP_NODE_107(p) BOOST_PP_IIF(p(107), 107, 108)
+#                        define BOOST_PP_NODE_110(p) BOOST_PP_IIF(p(110), BOOST_PP_NODE_109, BOOST_PP_NODE_111)
+#                            define BOOST_PP_NODE_109(p) BOOST_PP_IIF(p(109), 109, 110)
+#                            define BOOST_PP_NODE_111(p) BOOST_PP_IIF(p(111), 111, 112)
+#                define BOOST_PP_NODE_120(p) BOOST_PP_IIF(p(120), BOOST_PP_NODE_116, BOOST_PP_NODE_124)
+#                    define BOOST_PP_NODE_116(p) BOOST_PP_IIF(p(116), BOOST_PP_NODE_114, BOOST_PP_NODE_118)
+#                        define BOOST_PP_NODE_114(p) BOOST_PP_IIF(p(114), BOOST_PP_NODE_113, BOOST_PP_NODE_115)
+#                            define BOOST_PP_NODE_113(p) BOOST_PP_IIF(p(113), 113, 114)
+#                            define BOOST_PP_NODE_115(p) BOOST_PP_IIF(p(115), 115, 116)
+#                        define BOOST_PP_NODE_118(p) BOOST_PP_IIF(p(118), BOOST_PP_NODE_117, BOOST_PP_NODE_119)
+#                            define BOOST_PP_NODE_117(p) BOOST_PP_IIF(p(117), 117, 118)
+#                            define BOOST_PP_NODE_119(p) BOOST_PP_IIF(p(119), 119, 120)
+#                    define BOOST_PP_NODE_124(p) BOOST_PP_IIF(p(124), BOOST_PP_NODE_122, BOOST_PP_NODE_126)
+#                        define BOOST_PP_NODE_122(p) BOOST_PP_IIF(p(122), BOOST_PP_NODE_121, BOOST_PP_NODE_123)
+#                            define BOOST_PP_NODE_121(p) BOOST_PP_IIF(p(121), 121, 122)
+#                            define BOOST_PP_NODE_123(p) BOOST_PP_IIF(p(123), 123, 124)
+#                        define BOOST_PP_NODE_126(p) BOOST_PP_IIF(p(126), BOOST_PP_NODE_125, BOOST_PP_NODE_127)
+#                            define BOOST_PP_NODE_125(p) BOOST_PP_IIF(p(125), 125, 126)
+#                            define BOOST_PP_NODE_127(p) BOOST_PP_IIF(p(127), 127, 128)
+#    define BOOST_PP_NODE_192(p) BOOST_PP_IIF(p(192), BOOST_PP_NODE_160, BOOST_PP_NODE_224)
+#        define BOOST_PP_NODE_160(p) BOOST_PP_IIF(p(160), BOOST_PP_NODE_144, BOOST_PP_NODE_176)
+#            define BOOST_PP_NODE_144(p) BOOST_PP_IIF(p(144), BOOST_PP_NODE_136, BOOST_PP_NODE_152)
+#                define BOOST_PP_NODE_136(p) BOOST_PP_IIF(p(136), BOOST_PP_NODE_132, BOOST_PP_NODE_140)
+#                    define BOOST_PP_NODE_132(p) BOOST_PP_IIF(p(132), BOOST_PP_NODE_130, BOOST_PP_NODE_134)
+#                        define BOOST_PP_NODE_130(p) BOOST_PP_IIF(p(130), BOOST_PP_NODE_129, BOOST_PP_NODE_131)
+#                            define BOOST_PP_NODE_129(p) BOOST_PP_IIF(p(129), 129, 130)
+#                            define BOOST_PP_NODE_131(p) BOOST_PP_IIF(p(131), 131, 132)
+#                        define BOOST_PP_NODE_134(p) BOOST_PP_IIF(p(134), BOOST_PP_NODE_133, BOOST_PP_NODE_135)
+#                            define BOOST_PP_NODE_133(p) BOOST_PP_IIF(p(133), 133, 134)
+#                            define BOOST_PP_NODE_135(p) BOOST_PP_IIF(p(135), 135, 136)
+#                    define BOOST_PP_NODE_140(p) BOOST_PP_IIF(p(140), BOOST_PP_NODE_138, BOOST_PP_NODE_142)
+#                        define BOOST_PP_NODE_138(p) BOOST_PP_IIF(p(138), BOOST_PP_NODE_137, BOOST_PP_NODE_139)
+#                            define BOOST_PP_NODE_137(p) BOOST_PP_IIF(p(137), 137, 138)
+#                            define BOOST_PP_NODE_139(p) BOOST_PP_IIF(p(139), 139, 140)
+#                        define BOOST_PP_NODE_142(p) BOOST_PP_IIF(p(142), BOOST_PP_NODE_141, BOOST_PP_NODE_143)
+#                            define BOOST_PP_NODE_141(p) BOOST_PP_IIF(p(141), 141, 142)
+#                            define BOOST_PP_NODE_143(p) BOOST_PP_IIF(p(143), 143, 144)
+#                define BOOST_PP_NODE_152(p) BOOST_PP_IIF(p(152), BOOST_PP_NODE_148, BOOST_PP_NODE_156)
+#                    define BOOST_PP_NODE_148(p) BOOST_PP_IIF(p(148), BOOST_PP_NODE_146, BOOST_PP_NODE_150)
+#                        define BOOST_PP_NODE_146(p) BOOST_PP_IIF(p(146), BOOST_PP_NODE_145, BOOST_PP_NODE_147)
+#                            define BOOST_PP_NODE_145(p) BOOST_PP_IIF(p(145), 145, 146)
+#                            define BOOST_PP_NODE_147(p) BOOST_PP_IIF(p(147), 147, 148)
+#                        define BOOST_PP_NODE_150(p) BOOST_PP_IIF(p(150), BOOST_PP_NODE_149, BOOST_PP_NODE_151)
+#                            define BOOST_PP_NODE_149(p) BOOST_PP_IIF(p(149), 149, 150)
+#                            define BOOST_PP_NODE_151(p) BOOST_PP_IIF(p(151), 151, 152)
+#                    define BOOST_PP_NODE_156(p) BOOST_PP_IIF(p(156), BOOST_PP_NODE_154, BOOST_PP_NODE_158)
+#                        define BOOST_PP_NODE_154(p) BOOST_PP_IIF(p(154), BOOST_PP_NODE_153, BOOST_PP_NODE_155)
+#                            define BOOST_PP_NODE_153(p) BOOST_PP_IIF(p(153), 153, 154)
+#                            define BOOST_PP_NODE_155(p) BOOST_PP_IIF(p(155), 155, 156)
+#                        define BOOST_PP_NODE_158(p) BOOST_PP_IIF(p(158), BOOST_PP_NODE_157, BOOST_PP_NODE_159)
+#                            define BOOST_PP_NODE_157(p) BOOST_PP_IIF(p(157), 157, 158)
+#                            define BOOST_PP_NODE_159(p) BOOST_PP_IIF(p(159), 159, 160)
+#            define BOOST_PP_NODE_176(p) BOOST_PP_IIF(p(176), BOOST_PP_NODE_168, BOOST_PP_NODE_184)
+#                define BOOST_PP_NODE_168(p) BOOST_PP_IIF(p(168), BOOST_PP_NODE_164, BOOST_PP_NODE_172)
+#                    define BOOST_PP_NODE_164(p) BOOST_PP_IIF(p(164), BOOST_PP_NODE_162, BOOST_PP_NODE_166)
+#                        define BOOST_PP_NODE_162(p) BOOST_PP_IIF(p(162), BOOST_PP_NODE_161, BOOST_PP_NODE_163)
+#                            define BOOST_PP_NODE_161(p) BOOST_PP_IIF(p(161), 161, 162)
+#                            define BOOST_PP_NODE_163(p) BOOST_PP_IIF(p(163), 163, 164)
+#                        define BOOST_PP_NODE_166(p) BOOST_PP_IIF(p(166), BOOST_PP_NODE_165, BOOST_PP_NODE_167)
+#                            define BOOST_PP_NODE_165(p) BOOST_PP_IIF(p(165), 165, 166)
+#                            define BOOST_PP_NODE_167(p) BOOST_PP_IIF(p(167), 167, 168)
+#                    define BOOST_PP_NODE_172(p) BOOST_PP_IIF(p(172), BOOST_PP_NODE_170, BOOST_PP_NODE_174)
+#                        define BOOST_PP_NODE_170(p) BOOST_PP_IIF(p(170), BOOST_PP_NODE_169, BOOST_PP_NODE_171)
+#                            define BOOST_PP_NODE_169(p) BOOST_PP_IIF(p(169), 169, 170)
+#                            define BOOST_PP_NODE_171(p) BOOST_PP_IIF(p(171), 171, 172)
+#                        define BOOST_PP_NODE_174(p) BOOST_PP_IIF(p(174), BOOST_PP_NODE_173, BOOST_PP_NODE_175)
+#                            define BOOST_PP_NODE_173(p) BOOST_PP_IIF(p(173), 173, 174)
+#                            define BOOST_PP_NODE_175(p) BOOST_PP_IIF(p(175), 175, 176)
+#                define BOOST_PP_NODE_184(p) BOOST_PP_IIF(p(184), BOOST_PP_NODE_180, BOOST_PP_NODE_188)
+#                    define BOOST_PP_NODE_180(p) BOOST_PP_IIF(p(180), BOOST_PP_NODE_178, BOOST_PP_NODE_182)
+#                        define BOOST_PP_NODE_178(p) BOOST_PP_IIF(p(178), BOOST_PP_NODE_177, BOOST_PP_NODE_179)
+#                            define BOOST_PP_NODE_177(p) BOOST_PP_IIF(p(177), 177, 178)
+#                            define BOOST_PP_NODE_179(p) BOOST_PP_IIF(p(179), 179, 180)
+#                        define BOOST_PP_NODE_182(p) BOOST_PP_IIF(p(182), BOOST_PP_NODE_181, BOOST_PP_NODE_183)
+#                            define BOOST_PP_NODE_181(p) BOOST_PP_IIF(p(181), 181, 182)
+#                            define BOOST_PP_NODE_183(p) BOOST_PP_IIF(p(183), 183, 184)
+#                    define BOOST_PP_NODE_188(p) BOOST_PP_IIF(p(188), BOOST_PP_NODE_186, BOOST_PP_NODE_190)
+#                        define BOOST_PP_NODE_186(p) BOOST_PP_IIF(p(186), BOOST_PP_NODE_185, BOOST_PP_NODE_187)
+#                            define BOOST_PP_NODE_185(p) BOOST_PP_IIF(p(185), 185, 186)
+#                            define BOOST_PP_NODE_187(p) BOOST_PP_IIF(p(187), 187, 188)
+#                        define BOOST_PP_NODE_190(p) BOOST_PP_IIF(p(190), BOOST_PP_NODE_189, BOOST_PP_NODE_191)
+#                            define BOOST_PP_NODE_189(p) BOOST_PP_IIF(p(189), 189, 190)
+#                            define BOOST_PP_NODE_191(p) BOOST_PP_IIF(p(191), 191, 192)
+#        define BOOST_PP_NODE_224(p) BOOST_PP_IIF(p(224), BOOST_PP_NODE_208, BOOST_PP_NODE_240)
+#            define BOOST_PP_NODE_208(p) BOOST_PP_IIF(p(208), BOOST_PP_NODE_200, BOOST_PP_NODE_216)
+#                define BOOST_PP_NODE_200(p) BOOST_PP_IIF(p(200), BOOST_PP_NODE_196, BOOST_PP_NODE_204)
+#                    define BOOST_PP_NODE_196(p) BOOST_PP_IIF(p(196), BOOST_PP_NODE_194, BOOST_PP_NODE_198)
+#                        define BOOST_PP_NODE_194(p) BOOST_PP_IIF(p(194), BOOST_PP_NODE_193, BOOST_PP_NODE_195)
+#                            define BOOST_PP_NODE_193(p) BOOST_PP_IIF(p(193), 193, 194)
+#                            define BOOST_PP_NODE_195(p) BOOST_PP_IIF(p(195), 195, 196)
+#                        define BOOST_PP_NODE_198(p) BOOST_PP_IIF(p(198), BOOST_PP_NODE_197, BOOST_PP_NODE_199)
+#                            define BOOST_PP_NODE_197(p) BOOST_PP_IIF(p(197), 197, 198)
+#                            define BOOST_PP_NODE_199(p) BOOST_PP_IIF(p(199), 199, 200)
+#                    define BOOST_PP_NODE_204(p) BOOST_PP_IIF(p(204), BOOST_PP_NODE_202, BOOST_PP_NODE_206)
+#                        define BOOST_PP_NODE_202(p) BOOST_PP_IIF(p(202), BOOST_PP_NODE_201, BOOST_PP_NODE_203)
+#                            define BOOST_PP_NODE_201(p) BOOST_PP_IIF(p(201), 201, 202)
+#                            define BOOST_PP_NODE_203(p) BOOST_PP_IIF(p(203), 203, 204)
+#                        define BOOST_PP_NODE_206(p) BOOST_PP_IIF(p(206), BOOST_PP_NODE_205, BOOST_PP_NODE_207)
+#                            define BOOST_PP_NODE_205(p) BOOST_PP_IIF(p(205), 205, 206)
+#                            define BOOST_PP_NODE_207(p) BOOST_PP_IIF(p(207), 207, 208)
+#                define BOOST_PP_NODE_216(p) BOOST_PP_IIF(p(216), BOOST_PP_NODE_212, BOOST_PP_NODE_220)
+#                    define BOOST_PP_NODE_212(p) BOOST_PP_IIF(p(212), BOOST_PP_NODE_210, BOOST_PP_NODE_214)
+#                        define BOOST_PP_NODE_210(p) BOOST_PP_IIF(p(210), BOOST_PP_NODE_209, BOOST_PP_NODE_211)
+#                            define BOOST_PP_NODE_209(p) BOOST_PP_IIF(p(209), 209, 210)
+#                            define BOOST_PP_NODE_211(p) BOOST_PP_IIF(p(211), 211, 212)
+#                        define BOOST_PP_NODE_214(p) BOOST_PP_IIF(p(214), BOOST_PP_NODE_213, BOOST_PP_NODE_215)
+#                            define BOOST_PP_NODE_213(p) BOOST_PP_IIF(p(213), 213, 214)
+#                            define BOOST_PP_NODE_215(p) BOOST_PP_IIF(p(215), 215, 216)
+#                    define BOOST_PP_NODE_220(p) BOOST_PP_IIF(p(220), BOOST_PP_NODE_218, BOOST_PP_NODE_222)
+#                        define BOOST_PP_NODE_218(p) BOOST_PP_IIF(p(218), BOOST_PP_NODE_217, BOOST_PP_NODE_219)
+#                            define BOOST_PP_NODE_217(p) BOOST_PP_IIF(p(217), 217, 218)
+#                            define BOOST_PP_NODE_219(p) BOOST_PP_IIF(p(219), 219, 220)
+#                        define BOOST_PP_NODE_222(p) BOOST_PP_IIF(p(222), BOOST_PP_NODE_221, BOOST_PP_NODE_223)
+#                            define BOOST_PP_NODE_221(p) BOOST_PP_IIF(p(221), 221, 222)
+#                            define BOOST_PP_NODE_223(p) BOOST_PP_IIF(p(223), 223, 224)
+#            define BOOST_PP_NODE_240(p) BOOST_PP_IIF(p(240), BOOST_PP_NODE_232, BOOST_PP_NODE_248)
+#                define BOOST_PP_NODE_232(p) BOOST_PP_IIF(p(232), BOOST_PP_NODE_228, BOOST_PP_NODE_236)
+#                    define BOOST_PP_NODE_228(p) BOOST_PP_IIF(p(228), BOOST_PP_NODE_226, BOOST_PP_NODE_230)
+#                        define BOOST_PP_NODE_226(p) BOOST_PP_IIF(p(226), BOOST_PP_NODE_225, BOOST_PP_NODE_227)
+#                            define BOOST_PP_NODE_225(p) BOOST_PP_IIF(p(225), 225, 226)
+#                            define BOOST_PP_NODE_227(p) BOOST_PP_IIF(p(227), 227, 228)
+#                        define BOOST_PP_NODE_230(p) BOOST_PP_IIF(p(230), BOOST_PP_NODE_229, BOOST_PP_NODE_231)
+#                            define BOOST_PP_NODE_229(p) BOOST_PP_IIF(p(229), 229, 230)
+#                            define BOOST_PP_NODE_231(p) BOOST_PP_IIF(p(231), 231, 232)
+#                    define BOOST_PP_NODE_236(p) BOOST_PP_IIF(p(236), BOOST_PP_NODE_234, BOOST_PP_NODE_238)
+#                        define BOOST_PP_NODE_234(p) BOOST_PP_IIF(p(234), BOOST_PP_NODE_233, BOOST_PP_NODE_235)
+#                            define BOOST_PP_NODE_233(p) BOOST_PP_IIF(p(233), 233, 234)
+#                            define BOOST_PP_NODE_235(p) BOOST_PP_IIF(p(235), 235, 236)
+#                        define BOOST_PP_NODE_238(p) BOOST_PP_IIF(p(238), BOOST_PP_NODE_237, BOOST_PP_NODE_239)
+#                            define BOOST_PP_NODE_237(p) BOOST_PP_IIF(p(237), 237, 238)
+#                            define BOOST_PP_NODE_239(p) BOOST_PP_IIF(p(239), 239, 240)
+#                define BOOST_PP_NODE_248(p) BOOST_PP_IIF(p(248), BOOST_PP_NODE_244, BOOST_PP_NODE_252)
+#                    define BOOST_PP_NODE_244(p) BOOST_PP_IIF(p(244), BOOST_PP_NODE_242, BOOST_PP_NODE_246)
+#                        define BOOST_PP_NODE_242(p) BOOST_PP_IIF(p(242), BOOST_PP_NODE_241, BOOST_PP_NODE_243)
+#                            define BOOST_PP_NODE_241(p) BOOST_PP_IIF(p(241), 241, 242)
+#                            define BOOST_PP_NODE_243(p) BOOST_PP_IIF(p(243), 243, 244)
+#                        define BOOST_PP_NODE_246(p) BOOST_PP_IIF(p(246), BOOST_PP_NODE_245, BOOST_PP_NODE_247)
+#                            define BOOST_PP_NODE_245(p) BOOST_PP_IIF(p(245), 245, 246)
+#                            define BOOST_PP_NODE_247(p) BOOST_PP_IIF(p(247), 247, 248)
+#                    define BOOST_PP_NODE_252(p) BOOST_PP_IIF(p(252), BOOST_PP_NODE_250, BOOST_PP_NODE_254)
+#                        define BOOST_PP_NODE_250(p) BOOST_PP_IIF(p(250), BOOST_PP_NODE_249, BOOST_PP_NODE_251)
+#                            define BOOST_PP_NODE_249(p) BOOST_PP_IIF(p(249), 249, 250)
+#                            define BOOST_PP_NODE_251(p) BOOST_PP_IIF(p(251), 251, 252)
+#                        define BOOST_PP_NODE_254(p) BOOST_PP_IIF(p(254), BOOST_PP_NODE_253, BOOST_PP_NODE_255)
+#                            define BOOST_PP_NODE_253(p) BOOST_PP_IIF(p(253), 253, 254)
+#                            define BOOST_PP_NODE_255(p) BOOST_PP_IIF(p(255), 255, 256)
+#
+# endif
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/detail/check.hpp b/vendor/pdalboost/boost/preprocessor/detail/check.hpp
new file mode 100644
index 0000000..63f8ff9
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/detail/check.hpp
@@ -0,0 +1,48 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DETAIL_CHECK_HPP
+# define BOOST_PREPROCESSOR_DETAIL_CHECK_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_CHECK */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_CHECK(x, type) BOOST_PP_CHECK_D(x, type)
+# else
+#    define BOOST_PP_CHECK(x, type) BOOST_PP_CHECK_OO((x, type))
+#    define BOOST_PP_CHECK_OO(par) BOOST_PP_CHECK_D ## par
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+#    define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_1(BOOST_PP_CAT(BOOST_PP_CHECK_RESULT_, type x))
+#    define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk)
+#    define BOOST_PP_CHECK_2(res, _) res
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#    define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_1(type x)
+#    define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk)
+#    define BOOST_PP_CHECK_2(chk) BOOST_PP_CHECK_3((BOOST_PP_CHECK_RESULT_ ## chk))
+#    define BOOST_PP_CHECK_3(im) BOOST_PP_CHECK_5(BOOST_PP_CHECK_4 im)
+#    define BOOST_PP_CHECK_4(res, _) res
+#    define BOOST_PP_CHECK_5(res) res
+# else /* DMC */
+#    define BOOST_PP_CHECK_D(x, type) BOOST_PP_CHECK_OO((type x))
+#    define BOOST_PP_CHECK_OO(par) BOOST_PP_CHECK_0 ## par
+#    define BOOST_PP_CHECK_0(chk) BOOST_PP_CHECK_1(BOOST_PP_CAT(BOOST_PP_CHECK_RESULT_, chk))
+#    define BOOST_PP_CHECK_1(chk) BOOST_PP_CHECK_2(chk)
+#    define BOOST_PP_CHECK_2(res, _) res
+# endif
+#
+# define BOOST_PP_CHECK_RESULT_1 1, BOOST_PP_NIL
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/detail/dmc/auto_rec.hpp b/vendor/pdalboost/boost/preprocessor/detail/dmc/auto_rec.hpp
new file mode 100644
index 0000000..37fbe04
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/detail/dmc/auto_rec.hpp
@@ -0,0 +1,286 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP
+# define BOOST_PREPROCESSOR_DETAIL_AUTO_REC_HPP
+#
+# include <boost/preprocessor/control/iif.hpp>
+#
+# /* BOOST_PP_AUTO_REC */
+#
+# define BOOST_PP_AUTO_REC(pred, n) BOOST_PP_NODE_ENTRY_ ## n(pred)
+#
+# define BOOST_PP_NODE_ENTRY_256(p) BOOST_PP_NODE_128(p)(p)(p)(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_128(p) BOOST_PP_NODE_64(p)(p)(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_64(p) BOOST_PP_NODE_32(p)(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_32(p) BOOST_PP_NODE_16(p)(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_16(p) BOOST_PP_NODE_8(p)(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_8(p) BOOST_PP_NODE_4(p)(p)(p)
+# define BOOST_PP_NODE_ENTRY_4(p) BOOST_PP_NODE_2(p)(p)
+# define BOOST_PP_NODE_ENTRY_2(p) BOOST_PP_NODE_1(p)
+#
+# define BOOST_PP_NODE_128(p) BOOST_PP_IIF(p##(128), BOOST_PP_NODE_64, BOOST_PP_NODE_192)
+#    define BOOST_PP_NODE_64(p) BOOST_PP_IIF(p##(64), BOOST_PP_NODE_32, BOOST_PP_NODE_96)
+#        define BOOST_PP_NODE_32(p) BOOST_PP_IIF(p##(32), BOOST_PP_NODE_16, BOOST_PP_NODE_48)
+#            define BOOST_PP_NODE_16(p) BOOST_PP_IIF(p##(16), BOOST_PP_NODE_8, BOOST_PP_NODE_24)
+#                define BOOST_PP_NODE_8(p) BOOST_PP_IIF(p##(8), BOOST_PP_NODE_4, BOOST_PP_NODE_12)
+#                    define BOOST_PP_NODE_4(p) BOOST_PP_IIF(p##(4), BOOST_PP_NODE_2, BOOST_PP_NODE_6)
+#                        define BOOST_PP_NODE_2(p) BOOST_PP_IIF(p##(2), BOOST_PP_NODE_1, BOOST_PP_NODE_3)
+#                            define BOOST_PP_NODE_1(p) BOOST_PP_IIF(p##(1), 1, 2)
+#                            define BOOST_PP_NODE_3(p) BOOST_PP_IIF(p##(3), 3, 4)
+#                        define BOOST_PP_NODE_6(p) BOOST_PP_IIF(p##(6), BOOST_PP_NODE_5, BOOST_PP_NODE_7)
+#                            define BOOST_PP_NODE_5(p) BOOST_PP_IIF(p##(5), 5, 6)
+#                            define BOOST_PP_NODE_7(p) BOOST_PP_IIF(p##(7), 7, 8)
+#                    define BOOST_PP_NODE_12(p) BOOST_PP_IIF(p##(12), BOOST_PP_NODE_10, BOOST_PP_NODE_14)
+#                        define BOOST_PP_NODE_10(p) BOOST_PP_IIF(p##(10), BOOST_PP_NODE_9, BOOST_PP_NODE_11)
+#                            define BOOST_PP_NODE_9(p) BOOST_PP_IIF(p##(9), 9, 10)
+#                            define BOOST_PP_NODE_11(p) BOOST_PP_IIF(p##(11), 11, 12)
+#                        define BOOST_PP_NODE_14(p) BOOST_PP_IIF(p##(14), BOOST_PP_NODE_13, BOOST_PP_NODE_15)
+#                            define BOOST_PP_NODE_13(p) BOOST_PP_IIF(p##(13), 13, 14)
+#                            define BOOST_PP_NODE_15(p) BOOST_PP_IIF(p##(15), 15, 16)
+#                define BOOST_PP_NODE_24(p) BOOST_PP_IIF(p##(24), BOOST_PP_NODE_20, BOOST_PP_NODE_28)
+#                    define BOOST_PP_NODE_20(p) BOOST_PP_IIF(p##(20), BOOST_PP_NODE_18, BOOST_PP_NODE_22)
+#                        define BOOST_PP_NODE_18(p) BOOST_PP_IIF(p##(18), BOOST_PP_NODE_17, BOOST_PP_NODE_19)
+#                            define BOOST_PP_NODE_17(p) BOOST_PP_IIF(p##(17), 17, 18)
+#                            define BOOST_PP_NODE_19(p) BOOST_PP_IIF(p##(19), 19, 20)
+#                        define BOOST_PP_NODE_22(p) BOOST_PP_IIF(p##(22), BOOST_PP_NODE_21, BOOST_PP_NODE_23)
+#                            define BOOST_PP_NODE_21(p) BOOST_PP_IIF(p##(21), 21, 22)
+#                            define BOOST_PP_NODE_23(p) BOOST_PP_IIF(p##(23), 23, 24)
+#                    define BOOST_PP_NODE_28(p) BOOST_PP_IIF(p##(28), BOOST_PP_NODE_26, BOOST_PP_NODE_30)
+#                        define BOOST_PP_NODE_26(p) BOOST_PP_IIF(p##(26), BOOST_PP_NODE_25, BOOST_PP_NODE_27)
+#                            define BOOST_PP_NODE_25(p) BOOST_PP_IIF(p##(25), 25, 26)
+#                            define BOOST_PP_NODE_27(p) BOOST_PP_IIF(p##(27), 27, 28)
+#                        define BOOST_PP_NODE_30(p) BOOST_PP_IIF(p##(30), BOOST_PP_NODE_29, BOOST_PP_NODE_31)
+#                            define BOOST_PP_NODE_29(p) BOOST_PP_IIF(p##(29), 29, 30)
+#                            define BOOST_PP_NODE_31(p) BOOST_PP_IIF(p##(31), 31, 32)
+#            define BOOST_PP_NODE_48(p) BOOST_PP_IIF(p##(48), BOOST_PP_NODE_40, BOOST_PP_NODE_56)
+#                define BOOST_PP_NODE_40(p) BOOST_PP_IIF(p##(40), BOOST_PP_NODE_36, BOOST_PP_NODE_44)
+#                    define BOOST_PP_NODE_36(p) BOOST_PP_IIF(p##(36), BOOST_PP_NODE_34, BOOST_PP_NODE_38)
+#                        define BOOST_PP_NODE_34(p) BOOST_PP_IIF(p##(34), BOOST_PP_NODE_33, BOOST_PP_NODE_35)
+#                            define BOOST_PP_NODE_33(p) BOOST_PP_IIF(p##(33), 33, 34)
+#                            define BOOST_PP_NODE_35(p) BOOST_PP_IIF(p##(35), 35, 36)
+#                        define BOOST_PP_NODE_38(p) BOOST_PP_IIF(p##(38), BOOST_PP_NODE_37, BOOST_PP_NODE_39)
+#                            define BOOST_PP_NODE_37(p) BOOST_PP_IIF(p##(37), 37, 38)
+#                            define BOOST_PP_NODE_39(p) BOOST_PP_IIF(p##(39), 39, 40)
+#                    define BOOST_PP_NODE_44(p) BOOST_PP_IIF(p##(44), BOOST_PP_NODE_42, BOOST_PP_NODE_46)
+#                        define BOOST_PP_NODE_42(p) BOOST_PP_IIF(p##(42), BOOST_PP_NODE_41, BOOST_PP_NODE_43)
+#                            define BOOST_PP_NODE_41(p) BOOST_PP_IIF(p##(41), 41, 42)
+#                            define BOOST_PP_NODE_43(p) BOOST_PP_IIF(p##(43), 43, 44)
+#                        define BOOST_PP_NODE_46(p) BOOST_PP_IIF(p##(46), BOOST_PP_NODE_45, BOOST_PP_NODE_47)
+#                            define BOOST_PP_NODE_45(p) BOOST_PP_IIF(p##(45), 45, 46)
+#                            define BOOST_PP_NODE_47(p) BOOST_PP_IIF(p##(47), 47, 48)
+#                define BOOST_PP_NODE_56(p) BOOST_PP_IIF(p##(56), BOOST_PP_NODE_52, BOOST_PP_NODE_60)
+#                    define BOOST_PP_NODE_52(p) BOOST_PP_IIF(p##(52), BOOST_PP_NODE_50, BOOST_PP_NODE_54)
+#                        define BOOST_PP_NODE_50(p) BOOST_PP_IIF(p##(50), BOOST_PP_NODE_49, BOOST_PP_NODE_51)
+#                            define BOOST_PP_NODE_49(p) BOOST_PP_IIF(p##(49), 49, 50)
+#                            define BOOST_PP_NODE_51(p) BOOST_PP_IIF(p##(51), 51, 52)
+#                        define BOOST_PP_NODE_54(p) BOOST_PP_IIF(p##(54), BOOST_PP_NODE_53, BOOST_PP_NODE_55)
+#                            define BOOST_PP_NODE_53(p) BOOST_PP_IIF(p##(53), 53, 54)
+#                            define BOOST_PP_NODE_55(p) BOOST_PP_IIF(p##(55), 55, 56)
+#                    define BOOST_PP_NODE_60(p) BOOST_PP_IIF(p##(60), BOOST_PP_NODE_58, BOOST_PP_NODE_62)
+#                        define BOOST_PP_NODE_58(p) BOOST_PP_IIF(p##(58), BOOST_PP_NODE_57, BOOST_PP_NODE_59)
+#                            define BOOST_PP_NODE_57(p) BOOST_PP_IIF(p##(57), 57, 58)
+#                            define BOOST_PP_NODE_59(p) BOOST_PP_IIF(p##(59), 59, 60)
+#                        define BOOST_PP_NODE_62(p) BOOST_PP_IIF(p##(62), BOOST_PP_NODE_61, BOOST_PP_NODE_63)
+#                            define BOOST_PP_NODE_61(p) BOOST_PP_IIF(p##(61), 61, 62)
+#                            define BOOST_PP_NODE_63(p) BOOST_PP_IIF(p##(63), 63, 64)
+#        define BOOST_PP_NODE_96(p) BOOST_PP_IIF(p##(96), BOOST_PP_NODE_80, BOOST_PP_NODE_112)
+#            define BOOST_PP_NODE_80(p) BOOST_PP_IIF(p##(80), BOOST_PP_NODE_72, BOOST_PP_NODE_88)
+#                define BOOST_PP_NODE_72(p) BOOST_PP_IIF(p##(72), BOOST_PP_NODE_68, BOOST_PP_NODE_76)
+#                    define BOOST_PP_NODE_68(p) BOOST_PP_IIF(p##(68), BOOST_PP_NODE_66, BOOST_PP_NODE_70)
+#                        define BOOST_PP_NODE_66(p) BOOST_PP_IIF(p##(66), BOOST_PP_NODE_65, BOOST_PP_NODE_67)
+#                            define BOOST_PP_NODE_65(p) BOOST_PP_IIF(p##(65), 65, 66)
+#                            define BOOST_PP_NODE_67(p) BOOST_PP_IIF(p##(67), 67, 68)
+#                        define BOOST_PP_NODE_70(p) BOOST_PP_IIF(p##(70), BOOST_PP_NODE_69, BOOST_PP_NODE_71)
+#                            define BOOST_PP_NODE_69(p) BOOST_PP_IIF(p##(69), 69, 70)
+#                            define BOOST_PP_NODE_71(p) BOOST_PP_IIF(p##(71), 71, 72)
+#                    define BOOST_PP_NODE_76(p) BOOST_PP_IIF(p##(76), BOOST_PP_NODE_74, BOOST_PP_NODE_78)
+#                        define BOOST_PP_NODE_74(p) BOOST_PP_IIF(p##(74), BOOST_PP_NODE_73, BOOST_PP_NODE_75)
+#                            define BOOST_PP_NODE_73(p) BOOST_PP_IIF(p##(73), 73, 74)
+#                            define BOOST_PP_NODE_75(p) BOOST_PP_IIF(p##(75), 75, 76)
+#                        define BOOST_PP_NODE_78(p) BOOST_PP_IIF(p##(78), BOOST_PP_NODE_77, BOOST_PP_NODE_79)
+#                            define BOOST_PP_NODE_77(p) BOOST_PP_IIF(p##(77), 77, 78)
+#                            define BOOST_PP_NODE_79(p) BOOST_PP_IIF(p##(79), 79, 80)
+#                define BOOST_PP_NODE_88(p) BOOST_PP_IIF(p##(88), BOOST_PP_NODE_84, BOOST_PP_NODE_92)
+#                    define BOOST_PP_NODE_84(p) BOOST_PP_IIF(p##(84), BOOST_PP_NODE_82, BOOST_PP_NODE_86)
+#                        define BOOST_PP_NODE_82(p) BOOST_PP_IIF(p##(82), BOOST_PP_NODE_81, BOOST_PP_NODE_83)
+#                            define BOOST_PP_NODE_81(p) BOOST_PP_IIF(p##(81), 81, 82)
+#                            define BOOST_PP_NODE_83(p) BOOST_PP_IIF(p##(83), 83, 84)
+#                        define BOOST_PP_NODE_86(p) BOOST_PP_IIF(p##(86), BOOST_PP_NODE_85, BOOST_PP_NODE_87)
+#                            define BOOST_PP_NODE_85(p) BOOST_PP_IIF(p##(85), 85, 86)
+#                            define BOOST_PP_NODE_87(p) BOOST_PP_IIF(p##(87), 87, 88)
+#                    define BOOST_PP_NODE_92(p) BOOST_PP_IIF(p##(92), BOOST_PP_NODE_90, BOOST_PP_NODE_94)
+#                        define BOOST_PP_NODE_90(p) BOOST_PP_IIF(p##(90), BOOST_PP_NODE_89, BOOST_PP_NODE_91)
+#                            define BOOST_PP_NODE_89(p) BOOST_PP_IIF(p##(89), 89, 90)
+#                            define BOOST_PP_NODE_91(p) BOOST_PP_IIF(p##(91), 91, 92)
+#                        define BOOST_PP_NODE_94(p) BOOST_PP_IIF(p##(94), BOOST_PP_NODE_93, BOOST_PP_NODE_95)
+#                            define BOOST_PP_NODE_93(p) BOOST_PP_IIF(p##(93), 93, 94)
+#                            define BOOST_PP_NODE_95(p) BOOST_PP_IIF(p##(95), 95, 96)
+#            define BOOST_PP_NODE_112(p) BOOST_PP_IIF(p##(112), BOOST_PP_NODE_104, BOOST_PP_NODE_120)
+#                define BOOST_PP_NODE_104(p) BOOST_PP_IIF(p##(104), BOOST_PP_NODE_100, BOOST_PP_NODE_108)
+#                    define BOOST_PP_NODE_100(p) BOOST_PP_IIF(p##(100), BOOST_PP_NODE_98, BOOST_PP_NODE_102)
+#                        define BOOST_PP_NODE_98(p) BOOST_PP_IIF(p##(98), BOOST_PP_NODE_97, BOOST_PP_NODE_99)
+#                            define BOOST_PP_NODE_97(p) BOOST_PP_IIF(p##(97), 97, 98)
+#                            define BOOST_PP_NODE_99(p) BOOST_PP_IIF(p##(99), 99, 100)
+#                        define BOOST_PP_NODE_102(p) BOOST_PP_IIF(p##(102), BOOST_PP_NODE_101, BOOST_PP_NODE_103)
+#                            define BOOST_PP_NODE_101(p) BOOST_PP_IIF(p##(101), 101, 102)
+#                            define BOOST_PP_NODE_103(p) BOOST_PP_IIF(p##(103), 103, 104)
+#                    define BOOST_PP_NODE_108(p) BOOST_PP_IIF(p##(108), BOOST_PP_NODE_106, BOOST_PP_NODE_110)
+#                        define BOOST_PP_NODE_106(p) BOOST_PP_IIF(p##(106), BOOST_PP_NODE_105, BOOST_PP_NODE_107)
+#                            define BOOST_PP_NODE_105(p) BOOST_PP_IIF(p##(105), 105, 106)
+#                            define BOOST_PP_NODE_107(p) BOOST_PP_IIF(p##(107), 107, 108)
+#                        define BOOST_PP_NODE_110(p) BOOST_PP_IIF(p##(110), BOOST_PP_NODE_109, BOOST_PP_NODE_111)
+#                            define BOOST_PP_NODE_109(p) BOOST_PP_IIF(p##(109), 109, 110)
+#                            define BOOST_PP_NODE_111(p) BOOST_PP_IIF(p##(111), 111, 112)
+#                define BOOST_PP_NODE_120(p) BOOST_PP_IIF(p##(120), BOOST_PP_NODE_116, BOOST_PP_NODE_124)
+#                    define BOOST_PP_NODE_116(p) BOOST_PP_IIF(p##(116), BOOST_PP_NODE_114, BOOST_PP_NODE_118)
+#                        define BOOST_PP_NODE_114(p) BOOST_PP_IIF(p##(114), BOOST_PP_NODE_113, BOOST_PP_NODE_115)
+#                            define BOOST_PP_NODE_113(p) BOOST_PP_IIF(p##(113), 113, 114)
+#                            define BOOST_PP_NODE_115(p) BOOST_PP_IIF(p##(115), 115, 116)
+#                        define BOOST_PP_NODE_118(p) BOOST_PP_IIF(p##(118), BOOST_PP_NODE_117, BOOST_PP_NODE_119)
+#                            define BOOST_PP_NODE_117(p) BOOST_PP_IIF(p##(117), 117, 118)
+#                            define BOOST_PP_NODE_119(p) BOOST_PP_IIF(p##(119), 119, 120)
+#                    define BOOST_PP_NODE_124(p) BOOST_PP_IIF(p##(124), BOOST_PP_NODE_122, BOOST_PP_NODE_126)
+#                        define BOOST_PP_NODE_122(p) BOOST_PP_IIF(p##(122), BOOST_PP_NODE_121, BOOST_PP_NODE_123)
+#                            define BOOST_PP_NODE_121(p) BOOST_PP_IIF(p##(121), 121, 122)
+#                            define BOOST_PP_NODE_123(p) BOOST_PP_IIF(p##(123), 123, 124)
+#                        define BOOST_PP_NODE_126(p) BOOST_PP_IIF(p##(126), BOOST_PP_NODE_125, BOOST_PP_NODE_127)
+#                            define BOOST_PP_NODE_125(p) BOOST_PP_IIF(p##(125), 125, 126)
+#                            define BOOST_PP_NODE_127(p) BOOST_PP_IIF(p##(127), 127, 128)
+#    define BOOST_PP_NODE_192(p) BOOST_PP_IIF(p##(192), BOOST_PP_NODE_160, BOOST_PP_NODE_224)
+#        define BOOST_PP_NODE_160(p) BOOST_PP_IIF(p##(160), BOOST_PP_NODE_144, BOOST_PP_NODE_176)
+#            define BOOST_PP_NODE_144(p) BOOST_PP_IIF(p##(144), BOOST_PP_NODE_136, BOOST_PP_NODE_152)
+#                define BOOST_PP_NODE_136(p) BOOST_PP_IIF(p##(136), BOOST_PP_NODE_132, BOOST_PP_NODE_140)
+#                    define BOOST_PP_NODE_132(p) BOOST_PP_IIF(p##(132), BOOST_PP_NODE_130, BOOST_PP_NODE_134)
+#                        define BOOST_PP_NODE_130(p) BOOST_PP_IIF(p##(130), BOOST_PP_NODE_129, BOOST_PP_NODE_131)
+#                            define BOOST_PP_NODE_129(p) BOOST_PP_IIF(p##(129), 129, 130)
+#                            define BOOST_PP_NODE_131(p) BOOST_PP_IIF(p##(131), 131, 132)
+#                        define BOOST_PP_NODE_134(p) BOOST_PP_IIF(p##(134), BOOST_PP_NODE_133, BOOST_PP_NODE_135)
+#                            define BOOST_PP_NODE_133(p) BOOST_PP_IIF(p##(133), 133, 134)
+#                            define BOOST_PP_NODE_135(p) BOOST_PP_IIF(p##(135), 135, 136)
+#                    define BOOST_PP_NODE_140(p) BOOST_PP_IIF(p##(140), BOOST_PP_NODE_138, BOOST_PP_NODE_142)
+#                        define BOOST_PP_NODE_138(p) BOOST_PP_IIF(p##(138), BOOST_PP_NODE_137, BOOST_PP_NODE_139)
+#                            define BOOST_PP_NODE_137(p) BOOST_PP_IIF(p##(137), 137, 138)
+#                            define BOOST_PP_NODE_139(p) BOOST_PP_IIF(p##(139), 139, 140)
+#                        define BOOST_PP_NODE_142(p) BOOST_PP_IIF(p##(142), BOOST_PP_NODE_141, BOOST_PP_NODE_143)
+#                            define BOOST_PP_NODE_141(p) BOOST_PP_IIF(p##(141), 141, 142)
+#                            define BOOST_PP_NODE_143(p) BOOST_PP_IIF(p##(143), 143, 144)
+#                define BOOST_PP_NODE_152(p) BOOST_PP_IIF(p##(152), BOOST_PP_NODE_148, BOOST_PP_NODE_156)
+#                    define BOOST_PP_NODE_148(p) BOOST_PP_IIF(p##(148), BOOST_PP_NODE_146, BOOST_PP_NODE_150)
+#                        define BOOST_PP_NODE_146(p) BOOST_PP_IIF(p##(146), BOOST_PP_NODE_145, BOOST_PP_NODE_147)
+#                            define BOOST_PP_NODE_145(p) BOOST_PP_IIF(p##(145), 145, 146)
+#                            define BOOST_PP_NODE_147(p) BOOST_PP_IIF(p##(147), 147, 148)
+#                        define BOOST_PP_NODE_150(p) BOOST_PP_IIF(p##(150), BOOST_PP_NODE_149, BOOST_PP_NODE_151)
+#                            define BOOST_PP_NODE_149(p) BOOST_PP_IIF(p##(149), 149, 150)
+#                            define BOOST_PP_NODE_151(p) BOOST_PP_IIF(p##(151), 151, 152)
+#                    define BOOST_PP_NODE_156(p) BOOST_PP_IIF(p##(156), BOOST_PP_NODE_154, BOOST_PP_NODE_158)
+#                        define BOOST_PP_NODE_154(p) BOOST_PP_IIF(p##(154), BOOST_PP_NODE_153, BOOST_PP_NODE_155)
+#                            define BOOST_PP_NODE_153(p) BOOST_PP_IIF(p##(153), 153, 154)
+#                            define BOOST_PP_NODE_155(p) BOOST_PP_IIF(p##(155), 155, 156)
+#                        define BOOST_PP_NODE_158(p) BOOST_PP_IIF(p##(158), BOOST_PP_NODE_157, BOOST_PP_NODE_159)
+#                            define BOOST_PP_NODE_157(p) BOOST_PP_IIF(p##(157), 157, 158)
+#                            define BOOST_PP_NODE_159(p) BOOST_PP_IIF(p##(159), 159, 160)
+#            define BOOST_PP_NODE_176(p) BOOST_PP_IIF(p##(176), BOOST_PP_NODE_168, BOOST_PP_NODE_184)
+#                define BOOST_PP_NODE_168(p) BOOST_PP_IIF(p##(168), BOOST_PP_NODE_164, BOOST_PP_NODE_172)
+#                    define BOOST_PP_NODE_164(p) BOOST_PP_IIF(p##(164), BOOST_PP_NODE_162, BOOST_PP_NODE_166)
+#                        define BOOST_PP_NODE_162(p) BOOST_PP_IIF(p##(162), BOOST_PP_NODE_161, BOOST_PP_NODE_163)
+#                            define BOOST_PP_NODE_161(p) BOOST_PP_IIF(p##(161), 161, 162)
+#                            define BOOST_PP_NODE_163(p) BOOST_PP_IIF(p##(163), 163, 164)
+#                        define BOOST_PP_NODE_166(p) BOOST_PP_IIF(p##(166), BOOST_PP_NODE_165, BOOST_PP_NODE_167)
+#                            define BOOST_PP_NODE_165(p) BOOST_PP_IIF(p##(165), 165, 166)
+#                            define BOOST_PP_NODE_167(p) BOOST_PP_IIF(p##(167), 167, 168)
+#                    define BOOST_PP_NODE_172(p) BOOST_PP_IIF(p##(172), BOOST_PP_NODE_170, BOOST_PP_NODE_174)
+#                        define BOOST_PP_NODE_170(p) BOOST_PP_IIF(p##(170), BOOST_PP_NODE_169, BOOST_PP_NODE_171)
+#                            define BOOST_PP_NODE_169(p) BOOST_PP_IIF(p##(169), 169, 170)
+#                            define BOOST_PP_NODE_171(p) BOOST_PP_IIF(p##(171), 171, 172)
+#                        define BOOST_PP_NODE_174(p) BOOST_PP_IIF(p##(174), BOOST_PP_NODE_173, BOOST_PP_NODE_175)
+#                            define BOOST_PP_NODE_173(p) BOOST_PP_IIF(p##(173), 173, 174)
+#                            define BOOST_PP_NODE_175(p) BOOST_PP_IIF(p##(175), 175, 176)
+#                define BOOST_PP_NODE_184(p) BOOST_PP_IIF(p##(184), BOOST_PP_NODE_180, BOOST_PP_NODE_188)
+#                    define BOOST_PP_NODE_180(p) BOOST_PP_IIF(p##(180), BOOST_PP_NODE_178, BOOST_PP_NODE_182)
+#                        define BOOST_PP_NODE_178(p) BOOST_PP_IIF(p##(178), BOOST_PP_NODE_177, BOOST_PP_NODE_179)
+#                            define BOOST_PP_NODE_177(p) BOOST_PP_IIF(p##(177), 177, 178)
+#                            define BOOST_PP_NODE_179(p) BOOST_PP_IIF(p##(179), 179, 180)
+#                        define BOOST_PP_NODE_182(p) BOOST_PP_IIF(p##(182), BOOST_PP_NODE_181, BOOST_PP_NODE_183)
+#                            define BOOST_PP_NODE_181(p) BOOST_PP_IIF(p##(181), 181, 182)
+#                            define BOOST_PP_NODE_183(p) BOOST_PP_IIF(p##(183), 183, 184)
+#                    define BOOST_PP_NODE_188(p) BOOST_PP_IIF(p##(188), BOOST_PP_NODE_186, BOOST_PP_NODE_190)
+#                        define BOOST_PP_NODE_186(p) BOOST_PP_IIF(p##(186), BOOST_PP_NODE_185, BOOST_PP_NODE_187)
+#                            define BOOST_PP_NODE_185(p) BOOST_PP_IIF(p##(185), 185, 186)
+#                            define BOOST_PP_NODE_187(p) BOOST_PP_IIF(p##(187), 187, 188)
+#                        define BOOST_PP_NODE_190(p) BOOST_PP_IIF(p##(190), BOOST_PP_NODE_189, BOOST_PP_NODE_191)
+#                            define BOOST_PP_NODE_189(p) BOOST_PP_IIF(p##(189), 189, 190)
+#                            define BOOST_PP_NODE_191(p) BOOST_PP_IIF(p##(191), 191, 192)
+#        define BOOST_PP_NODE_224(p) BOOST_PP_IIF(p##(224), BOOST_PP_NODE_208, BOOST_PP_NODE_240)
+#            define BOOST_PP_NODE_208(p) BOOST_PP_IIF(p##(208), BOOST_PP_NODE_200, BOOST_PP_NODE_216)
+#                define BOOST_PP_NODE_200(p) BOOST_PP_IIF(p##(200), BOOST_PP_NODE_196, BOOST_PP_NODE_204)
+#                    define BOOST_PP_NODE_196(p) BOOST_PP_IIF(p##(196), BOOST_PP_NODE_194, BOOST_PP_NODE_198)
+#                        define BOOST_PP_NODE_194(p) BOOST_PP_IIF(p##(194), BOOST_PP_NODE_193, BOOST_PP_NODE_195)
+#                            define BOOST_PP_NODE_193(p) BOOST_PP_IIF(p##(193), 193, 194)
+#                            define BOOST_PP_NODE_195(p) BOOST_PP_IIF(p##(195), 195, 196)
+#                        define BOOST_PP_NODE_198(p) BOOST_PP_IIF(p##(198), BOOST_PP_NODE_197, BOOST_PP_NODE_199)
+#                            define BOOST_PP_NODE_197(p) BOOST_PP_IIF(p##(197), 197, 198)
+#                            define BOOST_PP_NODE_199(p) BOOST_PP_IIF(p##(199), 199, 200)
+#                    define BOOST_PP_NODE_204(p) BOOST_PP_IIF(p##(204), BOOST_PP_NODE_202, BOOST_PP_NODE_206)
+#                        define BOOST_PP_NODE_202(p) BOOST_PP_IIF(p##(202), BOOST_PP_NODE_201, BOOST_PP_NODE_203)
+#                            define BOOST_PP_NODE_201(p) BOOST_PP_IIF(p##(201), 201, 202)
+#                            define BOOST_PP_NODE_203(p) BOOST_PP_IIF(p##(203), 203, 204)
+#                        define BOOST_PP_NODE_206(p) BOOST_PP_IIF(p##(206), BOOST_PP_NODE_205, BOOST_PP_NODE_207)
+#                            define BOOST_PP_NODE_205(p) BOOST_PP_IIF(p##(205), 205, 206)
+#                            define BOOST_PP_NODE_207(p) BOOST_PP_IIF(p##(207), 207, 208)
+#                define BOOST_PP_NODE_216(p) BOOST_PP_IIF(p##(216), BOOST_PP_NODE_212, BOOST_PP_NODE_220)
+#                    define BOOST_PP_NODE_212(p) BOOST_PP_IIF(p##(212), BOOST_PP_NODE_210, BOOST_PP_NODE_214)
+#                        define BOOST_PP_NODE_210(p) BOOST_PP_IIF(p##(210), BOOST_PP_NODE_209, BOOST_PP_NODE_211)
+#                            define BOOST_PP_NODE_209(p) BOOST_PP_IIF(p##(209), 209, 210)
+#                            define BOOST_PP_NODE_211(p) BOOST_PP_IIF(p##(211), 211, 212)
+#                        define BOOST_PP_NODE_214(p) BOOST_PP_IIF(p##(214), BOOST_PP_NODE_213, BOOST_PP_NODE_215)
+#                            define BOOST_PP_NODE_213(p) BOOST_PP_IIF(p##(213), 213, 214)
+#                            define BOOST_PP_NODE_215(p) BOOST_PP_IIF(p##(215), 215, 216)
+#                    define BOOST_PP_NODE_220(p) BOOST_PP_IIF(p##(220), BOOST_PP_NODE_218, BOOST_PP_NODE_222)
+#                        define BOOST_PP_NODE_218(p) BOOST_PP_IIF(p##(218), BOOST_PP_NODE_217, BOOST_PP_NODE_219)
+#                            define BOOST_PP_NODE_217(p) BOOST_PP_IIF(p##(217), 217, 218)
+#                            define BOOST_PP_NODE_219(p) BOOST_PP_IIF(p##(219), 219, 220)
+#                        define BOOST_PP_NODE_222(p) BOOST_PP_IIF(p##(222), BOOST_PP_NODE_221, BOOST_PP_NODE_223)
+#                            define BOOST_PP_NODE_221(p) BOOST_PP_IIF(p##(221), 221, 222)
+#                            define BOOST_PP_NODE_223(p) BOOST_PP_IIF(p##(223), 223, 224)
+#            define BOOST_PP_NODE_240(p) BOOST_PP_IIF(p##(240), BOOST_PP_NODE_232, BOOST_PP_NODE_248)
+#                define BOOST_PP_NODE_232(p) BOOST_PP_IIF(p##(232), BOOST_PP_NODE_228, BOOST_PP_NODE_236)
+#                    define BOOST_PP_NODE_228(p) BOOST_PP_IIF(p##(228), BOOST_PP_NODE_226, BOOST_PP_NODE_230)
+#                        define BOOST_PP_NODE_226(p) BOOST_PP_IIF(p##(226), BOOST_PP_NODE_225, BOOST_PP_NODE_227)
+#                            define BOOST_PP_NODE_225(p) BOOST_PP_IIF(p##(225), 225, 226)
+#                            define BOOST_PP_NODE_227(p) BOOST_PP_IIF(p##(227), 227, 228)
+#                        define BOOST_PP_NODE_230(p) BOOST_PP_IIF(p##(230), BOOST_PP_NODE_229, BOOST_PP_NODE_231)
+#                            define BOOST_PP_NODE_229(p) BOOST_PP_IIF(p##(229), 229, 230)
+#                            define BOOST_PP_NODE_231(p) BOOST_PP_IIF(p##(231), 231, 232)
+#                    define BOOST_PP_NODE_236(p) BOOST_PP_IIF(p##(236), BOOST_PP_NODE_234, BOOST_PP_NODE_238)
+#                        define BOOST_PP_NODE_234(p) BOOST_PP_IIF(p##(234), BOOST_PP_NODE_233, BOOST_PP_NODE_235)
+#                            define BOOST_PP_NODE_233(p) BOOST_PP_IIF(p##(233), 233, 234)
+#                            define BOOST_PP_NODE_235(p) BOOST_PP_IIF(p##(235), 235, 236)
+#                        define BOOST_PP_NODE_238(p) BOOST_PP_IIF(p##(238), BOOST_PP_NODE_237, BOOST_PP_NODE_239)
+#                            define BOOST_PP_NODE_237(p) BOOST_PP_IIF(p##(237), 237, 238)
+#                            define BOOST_PP_NODE_239(p) BOOST_PP_IIF(p##(239), 239, 240)
+#                define BOOST_PP_NODE_248(p) BOOST_PP_IIF(p##(248), BOOST_PP_NODE_244, BOOST_PP_NODE_252)
+#                    define BOOST_PP_NODE_244(p) BOOST_PP_IIF(p##(244), BOOST_PP_NODE_242, BOOST_PP_NODE_246)
+#                        define BOOST_PP_NODE_242(p) BOOST_PP_IIF(p##(242), BOOST_PP_NODE_241, BOOST_PP_NODE_243)
+#                            define BOOST_PP_NODE_241(p) BOOST_PP_IIF(p##(241), 241, 242)
+#                            define BOOST_PP_NODE_243(p) BOOST_PP_IIF(p##(243), 243, 244)
+#                        define BOOST_PP_NODE_246(p) BOOST_PP_IIF(p##(246), BOOST_PP_NODE_245, BOOST_PP_NODE_247)
+#                            define BOOST_PP_NODE_245(p) BOOST_PP_IIF(p##(245), 245, 246)
+#                            define BOOST_PP_NODE_247(p) BOOST_PP_IIF(p##(247), 247, 248)
+#                    define BOOST_PP_NODE_252(p) BOOST_PP_IIF(p##(252), BOOST_PP_NODE_250, BOOST_PP_NODE_254)
+#                        define BOOST_PP_NODE_250(p) BOOST_PP_IIF(p##(250), BOOST_PP_NODE_249, BOOST_PP_NODE_251)
+#                            define BOOST_PP_NODE_249(p) BOOST_PP_IIF(p##(249), 249, 250)
+#                            define BOOST_PP_NODE_251(p) BOOST_PP_IIF(p##(251), 251, 252)
+#                        define BOOST_PP_NODE_254(p) BOOST_PP_IIF(p##(254), BOOST_PP_NODE_253, BOOST_PP_NODE_255)
+#                            define BOOST_PP_NODE_253(p) BOOST_PP_IIF(p##(253), 253, 254)
+#                            define BOOST_PP_NODE_255(p) BOOST_PP_IIF(p##(255), 255, 256)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/detail/is_binary.hpp b/vendor/pdalboost/boost/preprocessor/detail/is_binary.hpp
new file mode 100644
index 0000000..3428833
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/detail/is_binary.hpp
@@ -0,0 +1,30 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_DETAIL_IS_BINARY_HPP
+# define BOOST_PREPROCESSOR_DETAIL_IS_BINARY_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/detail/check.hpp>
+#
+# /* BOOST_PP_IS_BINARY */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_IS_BINARY(x) BOOST_PP_CHECK(x, BOOST_PP_IS_BINARY_CHECK)
+# else
+#    define BOOST_PP_IS_BINARY(x) BOOST_PP_IS_BINARY_I(x)
+#    define BOOST_PP_IS_BINARY_I(x) BOOST_PP_CHECK(x, BOOST_PP_IS_BINARY_CHECK)
+# endif
+#
+# define BOOST_PP_IS_BINARY_CHECK(a, b) 1
+# define BOOST_PP_CHECK_RESULT_BOOST_PP_IS_BINARY_CHECK 0, BOOST_PP_NIL
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/detail/split.hpp b/vendor/pdalboost/boost/preprocessor/detail/split.hpp
new file mode 100644
index 0000000..f28a723
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/detail/split.hpp
@@ -0,0 +1,35 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# ifndef BOOST_PREPROCESSOR_DETAIL_SPLIT_HPP
+# define BOOST_PREPROCESSOR_DETAIL_SPLIT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_SPLIT */
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_SPLIT(n, im) BOOST_PP_SPLIT_I((n, im))
+#    define BOOST_PP_SPLIT_I(par) BOOST_PP_SPLIT_II ## par
+#    define BOOST_PP_SPLIT_II(n, a, b) BOOST_PP_SPLIT_ ## n(a, b)
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#    define BOOST_PP_SPLIT(n, im) BOOST_PP_SPLIT_I(n((im)))
+#    define BOOST_PP_SPLIT_I(n) BOOST_PP_SPLIT_ID(BOOST_PP_SPLIT_II_ ## n)
+#    define BOOST_PP_SPLIT_II_0(s) BOOST_PP_SPLIT_ID(BOOST_PP_SPLIT_0 s)
+#    define BOOST_PP_SPLIT_II_1(s) BOOST_PP_SPLIT_ID(BOOST_PP_SPLIT_1 s)
+#    define BOOST_PP_SPLIT_ID(id) id
+# else
+#    define BOOST_PP_SPLIT(n, im) BOOST_PP_SPLIT_I(n)(im)
+#    define BOOST_PP_SPLIT_I(n) BOOST_PP_SPLIT_ ## n
+# endif
+#
+# define BOOST_PP_SPLIT_0(a, b) a
+# define BOOST_PP_SPLIT_1(a, b) b
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/empty.hpp b/vendor/pdalboost/boost/preprocessor/empty.hpp
new file mode 100644
index 0000000..116ef74
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/empty.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_EMPTY_HPP
+# define BOOST_PREPROCESSOR_EMPTY_HPP
+#
+# include <boost/preprocessor/facilities/empty.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/enum.hpp b/vendor/pdalboost/boost/preprocessor/enum.hpp
new file mode 100644
index 0000000..ae05bb0
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/enum.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ENUM_HPP
+# define BOOST_PREPROCESSOR_ENUM_HPP
+#
+# include <boost/preprocessor/repetition/enum.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/enum_params.hpp b/vendor/pdalboost/boost/preprocessor/enum_params.hpp
new file mode 100644
index 0000000..414f8aa
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/enum_params.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ENUM_PARAMS_HPP
+# define BOOST_PREPROCESSOR_ENUM_PARAMS_HPP
+#
+# include <boost/preprocessor/repetition/enum_params.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/enum_params_with_a_default.hpp b/vendor/pdalboost/boost/preprocessor/enum_params_with_a_default.hpp
new file mode 100644
index 0000000..fd1ad4c
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/enum_params_with_a_default.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT_HPP
+# define BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT_HPP
+#
+# include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/enum_params_with_defaults.hpp b/vendor/pdalboost/boost/preprocessor/enum_params_with_defaults.hpp
new file mode 100644
index 0000000..e58fa3e
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/enum_params_with_defaults.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS_HPP
+# define BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS_HPP
+#
+# include <boost/preprocessor/repetition/enum_params_with_defaults.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/enum_shifted_params.hpp b/vendor/pdalboost/boost/preprocessor/enum_shifted_params.hpp
new file mode 100644
index 0000000..462c642
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/enum_shifted_params.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS_HPP
+# define BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS_HPP
+#
+# include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/expr_if.hpp b/vendor/pdalboost/boost/preprocessor/expr_if.hpp
new file mode 100644
index 0000000..f93e29b
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/expr_if.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_EXPR_IF_HPP
+# define BOOST_PREPROCESSOR_EXPR_IF_HPP
+#
+# include <boost/preprocessor/control/expr_if.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/facilities/detail/is_empty.hpp b/vendor/pdalboost/boost/preprocessor/facilities/detail/is_empty.hpp
new file mode 100644
index 0000000..e044970
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/facilities/detail/is_empty.hpp
@@ -0,0 +1,55 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Edward Diener 2014.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+#ifndef BOOST_PREPROCESSOR_DETAIL_IS_EMPTY_HPP
+#define BOOST_PREPROCESSOR_DETAIL_IS_EMPTY_HPP
+
+#include <boost/preprocessor/punctuation/is_begin_parens.hpp>
+
+#if BOOST_PP_VARIADICS_MSVC
+
+# pragma warning(once:4002)
+
+#define BOOST_PP_DETAIL_IS_EMPTY_IIF_0(t, b) b
+#define BOOST_PP_DETAIL_IS_EMPTY_IIF_1(t, b) t
+
+#else
+
+#define BOOST_PP_DETAIL_IS_EMPTY_IIF_0(t, ...) __VA_ARGS__
+#define BOOST_PP_DETAIL_IS_EMPTY_IIF_1(t, ...) t
+
+#endif
+
+#if BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400
+
+#define BOOST_PP_DETAIL_IS_EMPTY_PROCESS(param) \
+	BOOST_PP_IS_BEGIN_PARENS \
+    	( \
+        BOOST_PP_DETAIL_IS_EMPTY_NON_FUNCTION_C param () \
+        ) \
+/**/
+
+#else
+
+#define BOOST_PP_DETAIL_IS_EMPTY_PROCESS(...) \
+	BOOST_PP_IS_BEGIN_PARENS \
+        ( \
+        BOOST_PP_DETAIL_IS_EMPTY_NON_FUNCTION_C __VA_ARGS__ () \
+        ) \
+/**/
+
+#endif
+
+#define BOOST_PP_DETAIL_IS_EMPTY_PRIMITIVE_CAT(a, b) a ## b
+#define BOOST_PP_DETAIL_IS_EMPTY_IIF(bit) BOOST_PP_DETAIL_IS_EMPTY_PRIMITIVE_CAT(BOOST_PP_DETAIL_IS_EMPTY_IIF_,bit)
+#define BOOST_PP_DETAIL_IS_EMPTY_NON_FUNCTION_C(...) ()
+
+#endif /* BOOST_PREPROCESSOR_DETAIL_IS_EMPTY_HPP */
diff --git a/vendor/pdalboost/boost/preprocessor/facilities/empty.hpp b/vendor/pdalboost/boost/preprocessor/facilities/empty.hpp
new file mode 100644
index 0000000..6f215dc
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/facilities/empty.hpp
@@ -0,0 +1,23 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_EMPTY_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_EMPTY_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_EMPTY */
+#
+# define BOOST_PP_EMPTY()
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/facilities/expand.hpp b/vendor/pdalboost/boost/preprocessor/facilities/expand.hpp
new file mode 100644
index 0000000..c8661a1
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/facilities/expand.hpp
@@ -0,0 +1,28 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_EXPAND_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_EXPAND_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+#    define BOOST_PP_EXPAND(x) BOOST_PP_EXPAND_I(x)
+# else
+#    define BOOST_PP_EXPAND(x) BOOST_PP_EXPAND_OO((x))
+#    define BOOST_PP_EXPAND_OO(par) BOOST_PP_EXPAND_I ## par
+# endif
+#
+# define BOOST_PP_EXPAND_I(x) x
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/facilities/identity.hpp b/vendor/pdalboost/boost/preprocessor/facilities/identity.hpp
new file mode 100644
index 0000000..8a7834d
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/facilities/identity.hpp
@@ -0,0 +1,27 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+# /* Revised by Edward Diener (2015) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_IDENTITY_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_IDENTITY_HPP
+#
+# include <boost/preprocessor/facilities/empty.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# /* BOOST_PP_IDENTITY */
+#
+# define BOOST_PP_IDENTITY(item) item BOOST_PP_EMPTY
+#
+# define BOOST_PP_IDENTITY_N(item,n) item BOOST_PP_TUPLE_EAT_N(n)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/facilities/intercept.hpp b/vendor/pdalboost/boost/preprocessor/facilities/intercept.hpp
new file mode 100644
index 0000000..41dcc6a
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/facilities/intercept.hpp
@@ -0,0 +1,277 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_INTERCEPT_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_INTERCEPT_HPP
+#
+# /* BOOST_PP_INTERCEPT */
+#
+# define BOOST_PP_INTERCEPT BOOST_PP_INTERCEPT_
+#
+# define BOOST_PP_INTERCEPT_0
+# define BOOST_PP_INTERCEPT_1
+# define BOOST_PP_INTERCEPT_2
+# define BOOST_PP_INTERCEPT_3
+# define BOOST_PP_INTERCEPT_4
+# define BOOST_PP_INTERCEPT_5
+# define BOOST_PP_INTERCEPT_6
+# define BOOST_PP_INTERCEPT_7
+# define BOOST_PP_INTERCEPT_8
+# define BOOST_PP_INTERCEPT_9
+# define BOOST_PP_INTERCEPT_10
+# define BOOST_PP_INTERCEPT_11
+# define BOOST_PP_INTERCEPT_12
+# define BOOST_PP_INTERCEPT_13
+# define BOOST_PP_INTERCEPT_14
+# define BOOST_PP_INTERCEPT_15
+# define BOOST_PP_INTERCEPT_16
+# define BOOST_PP_INTERCEPT_17
+# define BOOST_PP_INTERCEPT_18
+# define BOOST_PP_INTERCEPT_19
+# define BOOST_PP_INTERCEPT_20
+# define BOOST_PP_INTERCEPT_21
+# define BOOST_PP_INTERCEPT_22
+# define BOOST_PP_INTERCEPT_23
+# define BOOST_PP_INTERCEPT_24
+# define BOOST_PP_INTERCEPT_25
+# define BOOST_PP_INTERCEPT_26
+# define BOOST_PP_INTERCEPT_27
+# define BOOST_PP_INTERCEPT_28
+# define BOOST_PP_INTERCEPT_29
+# define BOOST_PP_INTERCEPT_30
+# define BOOST_PP_INTERCEPT_31
+# define BOOST_PP_INTERCEPT_32
+# define BOOST_PP_INTERCEPT_33
+# define BOOST_PP_INTERCEPT_34
+# define BOOST_PP_INTERCEPT_35
+# define BOOST_PP_INTERCEPT_36
+# define BOOST_PP_INTERCEPT_37
+# define BOOST_PP_INTERCEPT_38
+# define BOOST_PP_INTERCEPT_39
+# define BOOST_PP_INTERCEPT_40
+# define BOOST_PP_INTERCEPT_41
+# define BOOST_PP_INTERCEPT_42
+# define BOOST_PP_INTERCEPT_43
+# define BOOST_PP_INTERCEPT_44
+# define BOOST_PP_INTERCEPT_45
+# define BOOST_PP_INTERCEPT_46
+# define BOOST_PP_INTERCEPT_47
+# define BOOST_PP_INTERCEPT_48
+# define BOOST_PP_INTERCEPT_49
+# define BOOST_PP_INTERCEPT_50
+# define BOOST_PP_INTERCEPT_51
+# define BOOST_PP_INTERCEPT_52
+# define BOOST_PP_INTERCEPT_53
+# define BOOST_PP_INTERCEPT_54
+# define BOOST_PP_INTERCEPT_55
+# define BOOST_PP_INTERCEPT_56
+# define BOOST_PP_INTERCEPT_57
+# define BOOST_PP_INTERCEPT_58
+# define BOOST_PP_INTERCEPT_59
+# define BOOST_PP_INTERCEPT_60
+# define BOOST_PP_INTERCEPT_61
+# define BOOST_PP_INTERCEPT_62
+# define BOOST_PP_INTERCEPT_63
+# define BOOST_PP_INTERCEPT_64
+# define BOOST_PP_INTERCEPT_65
+# define BOOST_PP_INTERCEPT_66
+# define BOOST_PP_INTERCEPT_67
+# define BOOST_PP_INTERCEPT_68
+# define BOOST_PP_INTERCEPT_69
+# define BOOST_PP_INTERCEPT_70
+# define BOOST_PP_INTERCEPT_71
+# define BOOST_PP_INTERCEPT_72
+# define BOOST_PP_INTERCEPT_73
+# define BOOST_PP_INTERCEPT_74
+# define BOOST_PP_INTERCEPT_75
+# define BOOST_PP_INTERCEPT_76
+# define BOOST_PP_INTERCEPT_77
+# define BOOST_PP_INTERCEPT_78
+# define BOOST_PP_INTERCEPT_79
+# define BOOST_PP_INTERCEPT_80
+# define BOOST_PP_INTERCEPT_81
+# define BOOST_PP_INTERCEPT_82
+# define BOOST_PP_INTERCEPT_83
+# define BOOST_PP_INTERCEPT_84
+# define BOOST_PP_INTERCEPT_85
+# define BOOST_PP_INTERCEPT_86
+# define BOOST_PP_INTERCEPT_87
+# define BOOST_PP_INTERCEPT_88
+# define BOOST_PP_INTERCEPT_89
+# define BOOST_PP_INTERCEPT_90
+# define BOOST_PP_INTERCEPT_91
+# define BOOST_PP_INTERCEPT_92
+# define BOOST_PP_INTERCEPT_93
+# define BOOST_PP_INTERCEPT_94
+# define BOOST_PP_INTERCEPT_95
+# define BOOST_PP_INTERCEPT_96
+# define BOOST_PP_INTERCEPT_97
+# define BOOST_PP_INTERCEPT_98
+# define BOOST_PP_INTERCEPT_99
+# define BOOST_PP_INTERCEPT_100
+# define BOOST_PP_INTERCEPT_101
+# define BOOST_PP_INTERCEPT_102
+# define BOOST_PP_INTERCEPT_103
+# define BOOST_PP_INTERCEPT_104
+# define BOOST_PP_INTERCEPT_105
+# define BOOST_PP_INTERCEPT_106
+# define BOOST_PP_INTERCEPT_107
+# define BOOST_PP_INTERCEPT_108
+# define BOOST_PP_INTERCEPT_109
+# define BOOST_PP_INTERCEPT_110
+# define BOOST_PP_INTERCEPT_111
+# define BOOST_PP_INTERCEPT_112
+# define BOOST_PP_INTERCEPT_113
+# define BOOST_PP_INTERCEPT_114
+# define BOOST_PP_INTERCEPT_115
+# define BOOST_PP_INTERCEPT_116
+# define BOOST_PP_INTERCEPT_117
+# define BOOST_PP_INTERCEPT_118
+# define BOOST_PP_INTERCEPT_119
+# define BOOST_PP_INTERCEPT_120
+# define BOOST_PP_INTERCEPT_121
+# define BOOST_PP_INTERCEPT_122
+# define BOOST_PP_INTERCEPT_123
+# define BOOST_PP_INTERCEPT_124
+# define BOOST_PP_INTERCEPT_125
+# define BOOST_PP_INTERCEPT_126
+# define BOOST_PP_INTERCEPT_127
+# define BOOST_PP_INTERCEPT_128
+# define BOOST_PP_INTERCEPT_129
+# define BOOST_PP_INTERCEPT_130
+# define BOOST_PP_INTERCEPT_131
+# define BOOST_PP_INTERCEPT_132
+# define BOOST_PP_INTERCEPT_133
+# define BOOST_PP_INTERCEPT_134
+# define BOOST_PP_INTERCEPT_135
+# define BOOST_PP_INTERCEPT_136
+# define BOOST_PP_INTERCEPT_137
+# define BOOST_PP_INTERCEPT_138
+# define BOOST_PP_INTERCEPT_139
+# define BOOST_PP_INTERCEPT_140
+# define BOOST_PP_INTERCEPT_141
+# define BOOST_PP_INTERCEPT_142
+# define BOOST_PP_INTERCEPT_143
+# define BOOST_PP_INTERCEPT_144
+# define BOOST_PP_INTERCEPT_145
+# define BOOST_PP_INTERCEPT_146
+# define BOOST_PP_INTERCEPT_147
+# define BOOST_PP_INTERCEPT_148
+# define BOOST_PP_INTERCEPT_149
+# define BOOST_PP_INTERCEPT_150
+# define BOOST_PP_INTERCEPT_151
+# define BOOST_PP_INTERCEPT_152
+# define BOOST_PP_INTERCEPT_153
+# define BOOST_PP_INTERCEPT_154
+# define BOOST_PP_INTERCEPT_155
+# define BOOST_PP_INTERCEPT_156
+# define BOOST_PP_INTERCEPT_157
+# define BOOST_PP_INTERCEPT_158
+# define BOOST_PP_INTERCEPT_159
+# define BOOST_PP_INTERCEPT_160
+# define BOOST_PP_INTERCEPT_161
+# define BOOST_PP_INTERCEPT_162
+# define BOOST_PP_INTERCEPT_163
+# define BOOST_PP_INTERCEPT_164
+# define BOOST_PP_INTERCEPT_165
+# define BOOST_PP_INTERCEPT_166
+# define BOOST_PP_INTERCEPT_167
+# define BOOST_PP_INTERCEPT_168
+# define BOOST_PP_INTERCEPT_169
+# define BOOST_PP_INTERCEPT_170
+# define BOOST_PP_INTERCEPT_171
+# define BOOST_PP_INTERCEPT_172
+# define BOOST_PP_INTERCEPT_173
+# define BOOST_PP_INTERCEPT_174
+# define BOOST_PP_INTERCEPT_175
+# define BOOST_PP_INTERCEPT_176
+# define BOOST_PP_INTERCEPT_177
+# define BOOST_PP_INTERCEPT_178
+# define BOOST_PP_INTERCEPT_179
+# define BOOST_PP_INTERCEPT_180
+# define BOOST_PP_INTERCEPT_181
+# define BOOST_PP_INTERCEPT_182
+# define BOOST_PP_INTERCEPT_183
+# define BOOST_PP_INTERCEPT_184
+# define BOOST_PP_INTERCEPT_185
+# define BOOST_PP_INTERCEPT_186
+# define BOOST_PP_INTERCEPT_187
+# define BOOST_PP_INTERCEPT_188
+# define BOOST_PP_INTERCEPT_189
+# define BOOST_PP_INTERCEPT_190
+# define BOOST_PP_INTERCEPT_191
+# define BOOST_PP_INTERCEPT_192
+# define BOOST_PP_INTERCEPT_193
+# define BOOST_PP_INTERCEPT_194
+# define BOOST_PP_INTERCEPT_195
+# define BOOST_PP_INTERCEPT_196
+# define BOOST_PP_INTERCEPT_197
+# define BOOST_PP_INTERCEPT_198
+# define BOOST_PP_INTERCEPT_199
+# define BOOST_PP_INTERCEPT_200
+# define BOOST_PP_INTERCEPT_201
+# define BOOST_PP_INTERCEPT_202
+# define BOOST_PP_INTERCEPT_203
+# define BOOST_PP_INTERCEPT_204
+# define BOOST_PP_INTERCEPT_205
+# define BOOST_PP_INTERCEPT_206
+# define BOOST_PP_INTERCEPT_207
+# define BOOST_PP_INTERCEPT_208
+# define BOOST_PP_INTERCEPT_209
+# define BOOST_PP_INTERCEPT_210
+# define BOOST_PP_INTERCEPT_211
+# define BOOST_PP_INTERCEPT_212
+# define BOOST_PP_INTERCEPT_213
+# define BOOST_PP_INTERCEPT_214
+# define BOOST_PP_INTERCEPT_215
+# define BOOST_PP_INTERCEPT_216
+# define BOOST_PP_INTERCEPT_217
+# define BOOST_PP_INTERCEPT_218
+# define BOOST_PP_INTERCEPT_219
+# define BOOST_PP_INTERCEPT_220
+# define BOOST_PP_INTERCEPT_221
+# define BOOST_PP_INTERCEPT_222
+# define BOOST_PP_INTERCEPT_223
+# define BOOST_PP_INTERCEPT_224
+# define BOOST_PP_INTERCEPT_225
+# define BOOST_PP_INTERCEPT_226
+# define BOOST_PP_INTERCEPT_227
+# define BOOST_PP_INTERCEPT_228
+# define BOOST_PP_INTERCEPT_229
+# define BOOST_PP_INTERCEPT_230
+# define BOOST_PP_INTERCEPT_231
+# define BOOST_PP_INTERCEPT_232
+# define BOOST_PP_INTERCEPT_233
+# define BOOST_PP_INTERCEPT_234
+# define BOOST_PP_INTERCEPT_235
+# define BOOST_PP_INTERCEPT_236
+# define BOOST_PP_INTERCEPT_237
+# define BOOST_PP_INTERCEPT_238
+# define BOOST_PP_INTERCEPT_239
+# define BOOST_PP_INTERCEPT_240
+# define BOOST_PP_INTERCEPT_241
+# define BOOST_PP_INTERCEPT_242
+# define BOOST_PP_INTERCEPT_243
+# define BOOST_PP_INTERCEPT_244
+# define BOOST_PP_INTERCEPT_245
+# define BOOST_PP_INTERCEPT_246
+# define BOOST_PP_INTERCEPT_247
+# define BOOST_PP_INTERCEPT_248
+# define BOOST_PP_INTERCEPT_249
+# define BOOST_PP_INTERCEPT_250
+# define BOOST_PP_INTERCEPT_251
+# define BOOST_PP_INTERCEPT_252
+# define BOOST_PP_INTERCEPT_253
+# define BOOST_PP_INTERCEPT_254
+# define BOOST_PP_INTERCEPT_255
+# define BOOST_PP_INTERCEPT_256
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/facilities/is_1.hpp b/vendor/pdalboost/boost/preprocessor/facilities/is_1.hpp
new file mode 100644
index 0000000..f286dcd
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/facilities/is_1.hpp
@@ -0,0 +1,23 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2003.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_IS_1_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_IS_1_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/facilities/is_empty.hpp>
+#
+# /* BOOST_PP_IS_1 */
+#
+# define BOOST_PP_IS_1(x) BOOST_PP_IS_EMPTY(BOOST_PP_CAT(BOOST_PP_IS_1_HELPER_, x))
+# define BOOST_PP_IS_1_HELPER_1
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/facilities/is_empty.hpp b/vendor/pdalboost/boost/preprocessor/facilities/is_empty.hpp
new file mode 100644
index 0000000..46aadd3
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/facilities/is_empty.hpp
@@ -0,0 +1,56 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2003.
+#  *     (C) Copyright Edward Diener 2014.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if BOOST_PP_VARIADICS
+#
+# include <boost/preprocessor/facilities/is_empty_variadic.hpp>
+#
+# else
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/facilities/identity.hpp>
+# else
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/detail/split.hpp>
+# endif
+#
+# /* BOOST_PP_IS_EMPTY */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_IS_EMPTY(x) BOOST_PP_IS_EMPTY_I(x BOOST_PP_IS_EMPTY_HELPER)
+#    define BOOST_PP_IS_EMPTY_I(contents) BOOST_PP_TUPLE_ELEM(2, 1, (BOOST_PP_IS_EMPTY_DEF_ ## contents()))
+#    define BOOST_PP_IS_EMPTY_DEF_BOOST_PP_IS_EMPTY_HELPER 1, BOOST_PP_IDENTITY(1)
+#    define BOOST_PP_IS_EMPTY_HELPER() , 0
+# else
+#    if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#        define BOOST_PP_IS_EMPTY(x) BOOST_PP_IS_EMPTY_I(BOOST_PP_IS_EMPTY_HELPER x ())
+#        define BOOST_PP_IS_EMPTY_I(test) BOOST_PP_IS_EMPTY_II(BOOST_PP_SPLIT(0, BOOST_PP_CAT(BOOST_PP_IS_EMPTY_DEF_, test)))
+#        define BOOST_PP_IS_EMPTY_II(id) id
+#    else
+#        define BOOST_PP_IS_EMPTY(x) BOOST_PP_IS_EMPTY_I((BOOST_PP_IS_EMPTY_HELPER x ()))
+#        define BOOST_PP_IS_EMPTY_I(par) BOOST_PP_IS_EMPTY_II ## par
+#        define BOOST_PP_IS_EMPTY_II(test) BOOST_PP_SPLIT(0, BOOST_PP_CAT(BOOST_PP_IS_EMPTY_DEF_, test))
+#    endif
+#    define BOOST_PP_IS_EMPTY_HELPER() 1
+#    define BOOST_PP_IS_EMPTY_DEF_1 1, BOOST_PP_NIL
+#    define BOOST_PP_IS_EMPTY_DEF_BOOST_PP_IS_EMPTY_HELPER 0, BOOST_PP_NIL
+# endif
+#
+# endif /* BOOST_PP_VARIADICS */
+#
+# endif /* BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_HPP */
diff --git a/vendor/pdalboost/boost/preprocessor/facilities/is_empty_variadic.hpp b/vendor/pdalboost/boost/preprocessor/facilities/is_empty_variadic.hpp
new file mode 100644
index 0000000..eee4062
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/facilities/is_empty_variadic.hpp
@@ -0,0 +1,57 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Edward Diener 2014.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_VARIADIC_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_VARIADIC_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# if BOOST_PP_VARIADICS
+#
+# include <boost/preprocessor/punctuation/is_begin_parens.hpp>
+# include <boost/preprocessor/facilities/detail/is_empty.hpp>
+#
+#if BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400
+#
+#define BOOST_PP_IS_EMPTY(param) \
+    BOOST_PP_DETAIL_IS_EMPTY_IIF \
+      ( \
+      BOOST_PP_IS_BEGIN_PARENS \
+        ( \
+        param \
+        ) \
+      ) \
+      ( \
+      BOOST_PP_IS_EMPTY_ZERO, \
+      BOOST_PP_DETAIL_IS_EMPTY_PROCESS \
+      ) \
+    (param) \
+/**/
+#define BOOST_PP_IS_EMPTY_ZERO(param) 0
+# else
+#define BOOST_PP_IS_EMPTY(...) \
+    BOOST_PP_DETAIL_IS_EMPTY_IIF \
+      ( \
+      BOOST_PP_IS_BEGIN_PARENS \
+        ( \
+        __VA_ARGS__ \
+        ) \
+      ) \
+      ( \
+      BOOST_PP_IS_EMPTY_ZERO, \
+      BOOST_PP_DETAIL_IS_EMPTY_PROCESS \
+      ) \
+    (__VA_ARGS__) \
+/**/
+#define BOOST_PP_IS_EMPTY_ZERO(...) 0
+# endif /* BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400 */
+# endif /* BOOST_PP_VARIADICS */
+# endif /* BOOST_PREPROCESSOR_FACILITIES_IS_EMPTY_VARIADIC_HPP */
diff --git a/vendor/pdalboost/boost/preprocessor/facilities/overload.hpp b/vendor/pdalboost/boost/preprocessor/facilities/overload.hpp
new file mode 100644
index 0000000..1576316
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/facilities/overload.hpp
@@ -0,0 +1,25 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2011.                                  *
+#  *     (C) Copyright Edward Diener 2011.                                    *
+#  *     Distributed under the Boost Software License, Version 1.0. (See      *
+#  *     accompanying file LICENSE_1_0.txt or copy at                         *
+#  *     http://www.boost.org/LICENSE_1_0.txt)                                *
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_FACILITIES_OVERLOAD_HPP
+# define BOOST_PREPROCESSOR_FACILITIES_OVERLOAD_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/variadic/size.hpp>
+#
+# /* BOOST_PP_OVERLOAD */
+#
+# if BOOST_PP_VARIADICS
+#    define BOOST_PP_OVERLOAD(prefix, ...) BOOST_PP_CAT(prefix, BOOST_PP_VARIADIC_SIZE(__VA_ARGS__))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/identity.hpp b/vendor/pdalboost/boost/preprocessor/identity.hpp
new file mode 100644
index 0000000..847dd13
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/identity.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_IDENTITY_HPP
+# define BOOST_PREPROCESSOR_IDENTITY_HPP
+#
+# include <boost/preprocessor/facilities/identity.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/inc.hpp b/vendor/pdalboost/boost/preprocessor/inc.hpp
new file mode 100644
index 0000000..b98d3a6
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/inc.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_INC_HPP
+# define BOOST_PREPROCESSOR_INC_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iterate.hpp b/vendor/pdalboost/boost/preprocessor/iterate.hpp
new file mode 100644
index 0000000..e720ec8
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iterate.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ITERATE_HPP
+# define BOOST_PREPROCESSOR_ITERATE_HPP
+#
+# include <boost/preprocessor/iteration/iterate.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/lower1.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/lower1.hpp
new file mode 100644
index 0000000..6694d0b
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/lower1.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_START_1
+#
+# undef BOOST_PP_ITERATION_START_1_DIGIT_1
+# undef BOOST_PP_ITERATION_START_1_DIGIT_2
+# undef BOOST_PP_ITERATION_START_1_DIGIT_3
+# undef BOOST_PP_ITERATION_START_1_DIGIT_4
+# undef BOOST_PP_ITERATION_START_1_DIGIT_5
+# undef BOOST_PP_ITERATION_START_1_DIGIT_6
+# undef BOOST_PP_ITERATION_START_1_DIGIT_7
+# undef BOOST_PP_ITERATION_START_1_DIGIT_8
+# undef BOOST_PP_ITERATION_START_1_DIGIT_9
+# undef BOOST_PP_ITERATION_START_1_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_ITERATION_START_1_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_ITERATION_START_1_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_ITERATION_START_1_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_ITERATION_START_1_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_ITERATION_START_1_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_ITERATION_START_1_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_ITERATION_START_1_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_ITERATION_START_1_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_ITERATION_START_1_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_ITERATION_START_1_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_ITERATION_START_1_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_ITERATION_START_1_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_ITERATION_START_1_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_ITERATION_START_1_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_ITERATION_START_1_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_ITERATION_START_1_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_ITERATION_START_1_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_ITERATION_START_1_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_ITERATION_START_1_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_ITERATION_START_1_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_ITERATION_START_1_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_ITERATION_START_1_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_ITERATION_START_1_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_ITERATION_START_1_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_ITERATION_START_1_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_ITERATION_START_1_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_ITERATION_START_1_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_ITERATION_START_1_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_ITERATION_START_1_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_ITERATION_START_1_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_START_1_DIGIT_3
+#    define BOOST_PP_ITERATION_START_1 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_1_DIGIT_3, BOOST_PP_ITERATION_START_1_DIGIT_2, BOOST_PP_ITERATION_START_1_DIGIT_1)
+# elif BOOST_PP_ITERATION_START_1_DIGIT_2
+#    define BOOST_PP_ITERATION_START_1 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_1_DIGIT_2, BOOST_PP_ITERATION_START_1_DIGIT_1)
+# else
+#    define BOOST_PP_ITERATION_START_1 BOOST_PP_ITERATION_START_1_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/lower2.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/lower2.hpp
new file mode 100644
index 0000000..ece21fc
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/lower2.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_START_2
+#
+# undef BOOST_PP_ITERATION_START_2_DIGIT_1
+# undef BOOST_PP_ITERATION_START_2_DIGIT_2
+# undef BOOST_PP_ITERATION_START_2_DIGIT_3
+# undef BOOST_PP_ITERATION_START_2_DIGIT_4
+# undef BOOST_PP_ITERATION_START_2_DIGIT_5
+# undef BOOST_PP_ITERATION_START_2_DIGIT_6
+# undef BOOST_PP_ITERATION_START_2_DIGIT_7
+# undef BOOST_PP_ITERATION_START_2_DIGIT_8
+# undef BOOST_PP_ITERATION_START_2_DIGIT_9
+# undef BOOST_PP_ITERATION_START_2_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_ITERATION_START_2_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_ITERATION_START_2_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_ITERATION_START_2_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_ITERATION_START_2_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_ITERATION_START_2_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_ITERATION_START_2_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_ITERATION_START_2_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_ITERATION_START_2_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_ITERATION_START_2_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_ITERATION_START_2_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_ITERATION_START_2_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_ITERATION_START_2_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_ITERATION_START_2_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_ITERATION_START_2_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_ITERATION_START_2_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_ITERATION_START_2_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_ITERATION_START_2_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_ITERATION_START_2_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_ITERATION_START_2_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_ITERATION_START_2_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_ITERATION_START_2_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_ITERATION_START_2_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_ITERATION_START_2_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_ITERATION_START_2_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_ITERATION_START_2_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_ITERATION_START_2_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_ITERATION_START_2_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_ITERATION_START_2_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_ITERATION_START_2_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_ITERATION_START_2_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_START_2_DIGIT_3
+#    define BOOST_PP_ITERATION_START_2 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_2_DIGIT_3, BOOST_PP_ITERATION_START_2_DIGIT_2, BOOST_PP_ITERATION_START_2_DIGIT_1)
+# elif BOOST_PP_ITERATION_START_2_DIGIT_2
+#    define BOOST_PP_ITERATION_START_2 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_2_DIGIT_2, BOOST_PP_ITERATION_START_2_DIGIT_1)
+# else
+#    define BOOST_PP_ITERATION_START_2 BOOST_PP_ITERATION_START_2_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/lower3.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/lower3.hpp
new file mode 100644
index 0000000..8429eac
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/lower3.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_START_3
+#
+# undef BOOST_PP_ITERATION_START_3_DIGIT_1
+# undef BOOST_PP_ITERATION_START_3_DIGIT_2
+# undef BOOST_PP_ITERATION_START_3_DIGIT_3
+# undef BOOST_PP_ITERATION_START_3_DIGIT_4
+# undef BOOST_PP_ITERATION_START_3_DIGIT_5
+# undef BOOST_PP_ITERATION_START_3_DIGIT_6
+# undef BOOST_PP_ITERATION_START_3_DIGIT_7
+# undef BOOST_PP_ITERATION_START_3_DIGIT_8
+# undef BOOST_PP_ITERATION_START_3_DIGIT_9
+# undef BOOST_PP_ITERATION_START_3_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_ITERATION_START_3_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_ITERATION_START_3_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_ITERATION_START_3_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_ITERATION_START_3_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_ITERATION_START_3_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_ITERATION_START_3_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_ITERATION_START_3_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_ITERATION_START_3_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_ITERATION_START_3_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_ITERATION_START_3_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_ITERATION_START_3_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_ITERATION_START_3_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_ITERATION_START_3_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_ITERATION_START_3_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_ITERATION_START_3_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_ITERATION_START_3_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_ITERATION_START_3_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_ITERATION_START_3_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_ITERATION_START_3_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_ITERATION_START_3_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_ITERATION_START_3_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_ITERATION_START_3_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_ITERATION_START_3_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_ITERATION_START_3_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_ITERATION_START_3_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_ITERATION_START_3_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_ITERATION_START_3_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_ITERATION_START_3_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_ITERATION_START_3_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_ITERATION_START_3_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_START_3_DIGIT_3
+#    define BOOST_PP_ITERATION_START_3 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_3_DIGIT_3, BOOST_PP_ITERATION_START_3_DIGIT_2, BOOST_PP_ITERATION_START_3_DIGIT_1)
+# elif BOOST_PP_ITERATION_START_3_DIGIT_2
+#    define BOOST_PP_ITERATION_START_3 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_3_DIGIT_2, BOOST_PP_ITERATION_START_3_DIGIT_1)
+# else
+#    define BOOST_PP_ITERATION_START_3 BOOST_PP_ITERATION_START_3_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/lower4.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/lower4.hpp
new file mode 100644
index 0000000..ba0832f
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/lower4.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_START_4
+#
+# undef BOOST_PP_ITERATION_START_4_DIGIT_1
+# undef BOOST_PP_ITERATION_START_4_DIGIT_2
+# undef BOOST_PP_ITERATION_START_4_DIGIT_3
+# undef BOOST_PP_ITERATION_START_4_DIGIT_4
+# undef BOOST_PP_ITERATION_START_4_DIGIT_5
+# undef BOOST_PP_ITERATION_START_4_DIGIT_6
+# undef BOOST_PP_ITERATION_START_4_DIGIT_7
+# undef BOOST_PP_ITERATION_START_4_DIGIT_8
+# undef BOOST_PP_ITERATION_START_4_DIGIT_9
+# undef BOOST_PP_ITERATION_START_4_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_ITERATION_START_4_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_ITERATION_START_4_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_ITERATION_START_4_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_ITERATION_START_4_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_ITERATION_START_4_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_ITERATION_START_4_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_ITERATION_START_4_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_ITERATION_START_4_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_ITERATION_START_4_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_ITERATION_START_4_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_ITERATION_START_4_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_ITERATION_START_4_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_ITERATION_START_4_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_ITERATION_START_4_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_ITERATION_START_4_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_ITERATION_START_4_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_ITERATION_START_4_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_ITERATION_START_4_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_ITERATION_START_4_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_ITERATION_START_4_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_ITERATION_START_4_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_ITERATION_START_4_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_ITERATION_START_4_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_ITERATION_START_4_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_ITERATION_START_4_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_ITERATION_START_4_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_ITERATION_START_4_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_ITERATION_START_4_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_ITERATION_START_4_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_ITERATION_START_4_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_START_4_DIGIT_3
+#    define BOOST_PP_ITERATION_START_4 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_4_DIGIT_3, BOOST_PP_ITERATION_START_4_DIGIT_2, BOOST_PP_ITERATION_START_4_DIGIT_1)
+# elif BOOST_PP_ITERATION_START_4_DIGIT_2
+#    define BOOST_PP_ITERATION_START_4 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_4_DIGIT_2, BOOST_PP_ITERATION_START_4_DIGIT_1)
+# else
+#    define BOOST_PP_ITERATION_START_4 BOOST_PP_ITERATION_START_4_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/lower5.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/lower5.hpp
new file mode 100644
index 0000000..f4888c7
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/lower5.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_START_5
+#
+# undef BOOST_PP_ITERATION_START_5_DIGIT_1
+# undef BOOST_PP_ITERATION_START_5_DIGIT_2
+# undef BOOST_PP_ITERATION_START_5_DIGIT_3
+# undef BOOST_PP_ITERATION_START_5_DIGIT_4
+# undef BOOST_PP_ITERATION_START_5_DIGIT_5
+# undef BOOST_PP_ITERATION_START_5_DIGIT_6
+# undef BOOST_PP_ITERATION_START_5_DIGIT_7
+# undef BOOST_PP_ITERATION_START_5_DIGIT_8
+# undef BOOST_PP_ITERATION_START_5_DIGIT_9
+# undef BOOST_PP_ITERATION_START_5_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_ITERATION_START_5_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_ITERATION_START_5_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_ITERATION_START_5_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_ITERATION_START_5_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_ITERATION_START_5_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_ITERATION_START_5_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_ITERATION_START_5_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_ITERATION_START_5_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_ITERATION_START_5_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_ITERATION_START_5_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_ITERATION_START_5_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_ITERATION_START_5_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_ITERATION_START_5_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_ITERATION_START_5_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_ITERATION_START_5_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_ITERATION_START_5_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_ITERATION_START_5_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_ITERATION_START_5_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_ITERATION_START_5_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_ITERATION_START_5_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_ITERATION_START_5_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_ITERATION_START_5_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_ITERATION_START_5_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_ITERATION_START_5_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_ITERATION_START_5_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_ITERATION_START_5_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_ITERATION_START_5_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_ITERATION_START_5_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_ITERATION_START_5_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_ITERATION_START_5_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_START_5_DIGIT_3
+#    define BOOST_PP_ITERATION_START_5 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_START_5_DIGIT_3, BOOST_PP_ITERATION_START_5_DIGIT_2, BOOST_PP_ITERATION_START_5_DIGIT_1)
+# elif BOOST_PP_ITERATION_START_5_DIGIT_2
+#    define BOOST_PP_ITERATION_START_5 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_START_5_DIGIT_2, BOOST_PP_ITERATION_START_5_DIGIT_1)
+# else
+#    define BOOST_PP_ITERATION_START_5 BOOST_PP_ITERATION_START_5_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/upper1.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/upper1.hpp
new file mode 100644
index 0000000..50d0fcf
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/upper1.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_FINISH_1
+#
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_1
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_2
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_3
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_4
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_5
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_6
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_7
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_8
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_9
+# undef BOOST_PP_ITERATION_FINISH_1_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_ITERATION_FINISH_1_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_FINISH_1_DIGIT_3
+#    define BOOST_PP_ITERATION_FINISH_1 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_1_DIGIT_3, BOOST_PP_ITERATION_FINISH_1_DIGIT_2, BOOST_PP_ITERATION_FINISH_1_DIGIT_1)
+# elif BOOST_PP_ITERATION_FINISH_1_DIGIT_2
+#    define BOOST_PP_ITERATION_FINISH_1 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_1_DIGIT_2, BOOST_PP_ITERATION_FINISH_1_DIGIT_1)
+# else
+#    define BOOST_PP_ITERATION_FINISH_1 BOOST_PP_ITERATION_FINISH_1_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/upper2.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/upper2.hpp
new file mode 100644
index 0000000..faef6f4
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/upper2.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_FINISH_2
+#
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_1
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_2
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_3
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_4
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_5
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_6
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_7
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_8
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_9
+# undef BOOST_PP_ITERATION_FINISH_2_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_ITERATION_FINISH_2_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_FINISH_2_DIGIT_3
+#    define BOOST_PP_ITERATION_FINISH_2 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_2_DIGIT_3, BOOST_PP_ITERATION_FINISH_2_DIGIT_2, BOOST_PP_ITERATION_FINISH_2_DIGIT_1)
+# elif BOOST_PP_ITERATION_FINISH_2_DIGIT_2
+#    define BOOST_PP_ITERATION_FINISH_2 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_2_DIGIT_2, BOOST_PP_ITERATION_FINISH_2_DIGIT_1)
+# else
+#    define BOOST_PP_ITERATION_FINISH_2 BOOST_PP_ITERATION_FINISH_2_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/upper3.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/upper3.hpp
new file mode 100644
index 0000000..38d9ade
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/upper3.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_FINISH_3
+#
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_1
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_2
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_3
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_4
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_5
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_6
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_7
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_8
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_9
+# undef BOOST_PP_ITERATION_FINISH_3_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_ITERATION_FINISH_3_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_FINISH_3_DIGIT_3
+#    define BOOST_PP_ITERATION_FINISH_3 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_3_DIGIT_3, BOOST_PP_ITERATION_FINISH_3_DIGIT_2, BOOST_PP_ITERATION_FINISH_3_DIGIT_1)
+# elif BOOST_PP_ITERATION_FINISH_3_DIGIT_2
+#    define BOOST_PP_ITERATION_FINISH_3 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_3_DIGIT_2, BOOST_PP_ITERATION_FINISH_3_DIGIT_1)
+# else
+#    define BOOST_PP_ITERATION_FINISH_3 BOOST_PP_ITERATION_FINISH_3_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/upper4.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/upper4.hpp
new file mode 100644
index 0000000..7f771c2
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/upper4.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_FINISH_4
+#
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_1
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_2
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_3
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_4
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_5
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_6
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_7
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_8
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_9
+# undef BOOST_PP_ITERATION_FINISH_4_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_ITERATION_FINISH_4_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_FINISH_4_DIGIT_3
+#    define BOOST_PP_ITERATION_FINISH_4 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_4_DIGIT_3, BOOST_PP_ITERATION_FINISH_4_DIGIT_2, BOOST_PP_ITERATION_FINISH_4_DIGIT_1)
+# elif BOOST_PP_ITERATION_FINISH_4_DIGIT_2
+#    define BOOST_PP_ITERATION_FINISH_4 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_4_DIGIT_2, BOOST_PP_ITERATION_FINISH_4_DIGIT_1)
+# else
+#    define BOOST_PP_ITERATION_FINISH_4 BOOST_PP_ITERATION_FINISH_4_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/upper5.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/upper5.hpp
new file mode 100644
index 0000000..9f27d58
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/bounds/upper5.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_ITERATION_FINISH_5
+#
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_1
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_2
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_3
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_4
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_5
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_6
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_7
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_8
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_9
+# undef BOOST_PP_ITERATION_FINISH_5_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_ITERATION_FINISH_5_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_ITERATION_FINISH_5_DIGIT_3
+#    define BOOST_PP_ITERATION_FINISH_5 BOOST_PP_SLOT_CC_3(BOOST_PP_ITERATION_FINISH_5_DIGIT_3, BOOST_PP_ITERATION_FINISH_5_DIGIT_2, BOOST_PP_ITERATION_FINISH_5_DIGIT_1)
+# elif BOOST_PP_ITERATION_FINISH_5_DIGIT_2
+#    define BOOST_PP_ITERATION_FINISH_5 BOOST_PP_SLOT_CC_2(BOOST_PP_ITERATION_FINISH_5_DIGIT_2, BOOST_PP_ITERATION_FINISH_5_DIGIT_1)
+# else
+#    define BOOST_PP_ITERATION_FINISH_5 BOOST_PP_ITERATION_FINISH_5_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/finish.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/finish.hpp
new file mode 100644
index 0000000..0236944
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/finish.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_LOCAL_FE
+#
+# undef BOOST_PP_LOCAL_FE_DIGIT_1
+# undef BOOST_PP_LOCAL_FE_DIGIT_2
+# undef BOOST_PP_LOCAL_FE_DIGIT_3
+# undef BOOST_PP_LOCAL_FE_DIGIT_4
+# undef BOOST_PP_LOCAL_FE_DIGIT_5
+# undef BOOST_PP_LOCAL_FE_DIGIT_6
+# undef BOOST_PP_LOCAL_FE_DIGIT_7
+# undef BOOST_PP_LOCAL_FE_DIGIT_8
+# undef BOOST_PP_LOCAL_FE_DIGIT_9
+# undef BOOST_PP_LOCAL_FE_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_LOCAL_FE_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_LOCAL_FE_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_LOCAL_FE_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_LOCAL_FE_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_LOCAL_FE_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_LOCAL_FE_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_LOCAL_FE_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_LOCAL_FE_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_LOCAL_FE_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_LOCAL_FE_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_LOCAL_FE_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_LOCAL_FE_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_LOCAL_FE_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_LOCAL_FE_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_LOCAL_FE_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_LOCAL_FE_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_LOCAL_FE_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_LOCAL_FE_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_LOCAL_FE_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_LOCAL_FE_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_LOCAL_FE_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_LOCAL_FE_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_LOCAL_FE_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_LOCAL_FE_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_LOCAL_FE_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_LOCAL_FE_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_LOCAL_FE_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_LOCAL_FE_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_LOCAL_FE_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_LOCAL_FE_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_LOCAL_FE_DIGIT_3
+#    define BOOST_PP_LOCAL_FE() BOOST_PP_SLOT_CC_3(BOOST_PP_LOCAL_FE_DIGIT_3, BOOST_PP_LOCAL_FE_DIGIT_2, BOOST_PP_LOCAL_FE_DIGIT_1)
+# elif BOOST_PP_LOCAL_FE_DIGIT_2
+#    define BOOST_PP_LOCAL_FE() BOOST_PP_SLOT_CC_2(BOOST_PP_LOCAL_FE_DIGIT_2, BOOST_PP_LOCAL_FE_DIGIT_1)
+# else
+#    define BOOST_PP_LOCAL_FE() BOOST_PP_LOCAL_FE_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/forward1.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/forward1.hpp
new file mode 100644
index 0000000..3c6a458
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/forward1.hpp
@@ -0,0 +1,1342 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# if defined(BOOST_PP_ITERATION_LIMITS)
+#    if !defined(BOOST_PP_FILENAME_1)
+#        error BOOST_PP_ERROR:  depth #1 filename is not defined
+#    endif
+#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)
+#    include <boost/preprocessor/iteration/detail/bounds/lower1.hpp>
+#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)
+#    include <boost/preprocessor/iteration/detail/bounds/upper1.hpp>
+#    define BOOST_PP_ITERATION_FLAGS_1() 0
+#    undef BOOST_PP_ITERATION_LIMITS
+# elif defined(BOOST_PP_ITERATION_PARAMS_1)
+#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_1)
+#    include <boost/preprocessor/iteration/detail/bounds/lower1.hpp>
+#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_1)
+#    include <boost/preprocessor/iteration/detail/bounds/upper1.hpp>
+#    define BOOST_PP_FILENAME_1 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_1)
+#    if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_1) >= 4
+#        define BOOST_PP_ITERATION_FLAGS_1() BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_1)
+#    else
+#        define BOOST_PP_ITERATION_FLAGS_1() 0
+#    endif
+# else
+#    error BOOST_PP_ERROR:  depth #1 iteration boundaries or filename not defined
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 1
+#
+# define BOOST_PP_IS_ITERATING 1
+#
+# if (BOOST_PP_ITERATION_START_1) > (BOOST_PP_ITERATION_FINISH_1)
+#    include <boost/preprocessor/iteration/detail/iter/reverse1.hpp>
+# else
+#    if BOOST_PP_ITERATION_START_1 <= 0 && BOOST_PP_ITERATION_FINISH_1 >= 0
+#        define BOOST_PP_ITERATION_1 0
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 1 && BOOST_PP_ITERATION_FINISH_1 >= 1
+#        define BOOST_PP_ITERATION_1 1
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 2 && BOOST_PP_ITERATION_FINISH_1 >= 2
+#        define BOOST_PP_ITERATION_1 2
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 3 && BOOST_PP_ITERATION_FINISH_1 >= 3
+#        define BOOST_PP_ITERATION_1 3
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 4 && BOOST_PP_ITERATION_FINISH_1 >= 4
+#        define BOOST_PP_ITERATION_1 4
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 5 && BOOST_PP_ITERATION_FINISH_1 >= 5
+#        define BOOST_PP_ITERATION_1 5
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 6 && BOOST_PP_ITERATION_FINISH_1 >= 6
+#        define BOOST_PP_ITERATION_1 6
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 7 && BOOST_PP_ITERATION_FINISH_1 >= 7
+#        define BOOST_PP_ITERATION_1 7
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 8 && BOOST_PP_ITERATION_FINISH_1 >= 8
+#        define BOOST_PP_ITERATION_1 8
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 9 && BOOST_PP_ITERATION_FINISH_1 >= 9
+#        define BOOST_PP_ITERATION_1 9
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 10 && BOOST_PP_ITERATION_FINISH_1 >= 10
+#        define BOOST_PP_ITERATION_1 10
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 11 && BOOST_PP_ITERATION_FINISH_1 >= 11
+#        define BOOST_PP_ITERATION_1 11
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 12 && BOOST_PP_ITERATION_FINISH_1 >= 12
+#        define BOOST_PP_ITERATION_1 12
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 13 && BOOST_PP_ITERATION_FINISH_1 >= 13
+#        define BOOST_PP_ITERATION_1 13
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 14 && BOOST_PP_ITERATION_FINISH_1 >= 14
+#        define BOOST_PP_ITERATION_1 14
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 15 && BOOST_PP_ITERATION_FINISH_1 >= 15
+#        define BOOST_PP_ITERATION_1 15
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 16 && BOOST_PP_ITERATION_FINISH_1 >= 16
+#        define BOOST_PP_ITERATION_1 16
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 17 && BOOST_PP_ITERATION_FINISH_1 >= 17
+#        define BOOST_PP_ITERATION_1 17
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 18 && BOOST_PP_ITERATION_FINISH_1 >= 18
+#        define BOOST_PP_ITERATION_1 18
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 19 && BOOST_PP_ITERATION_FINISH_1 >= 19
+#        define BOOST_PP_ITERATION_1 19
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 20 && BOOST_PP_ITERATION_FINISH_1 >= 20
+#        define BOOST_PP_ITERATION_1 20
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 21 && BOOST_PP_ITERATION_FINISH_1 >= 21
+#        define BOOST_PP_ITERATION_1 21
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 22 && BOOST_PP_ITERATION_FINISH_1 >= 22
+#        define BOOST_PP_ITERATION_1 22
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 23 && BOOST_PP_ITERATION_FINISH_1 >= 23
+#        define BOOST_PP_ITERATION_1 23
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 24 && BOOST_PP_ITERATION_FINISH_1 >= 24
+#        define BOOST_PP_ITERATION_1 24
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 25 && BOOST_PP_ITERATION_FINISH_1 >= 25
+#        define BOOST_PP_ITERATION_1 25
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 26 && BOOST_PP_ITERATION_FINISH_1 >= 26
+#        define BOOST_PP_ITERATION_1 26
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 27 && BOOST_PP_ITERATION_FINISH_1 >= 27
+#        define BOOST_PP_ITERATION_1 27
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 28 && BOOST_PP_ITERATION_FINISH_1 >= 28
+#        define BOOST_PP_ITERATION_1 28
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 29 && BOOST_PP_ITERATION_FINISH_1 >= 29
+#        define BOOST_PP_ITERATION_1 29
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 30 && BOOST_PP_ITERATION_FINISH_1 >= 30
+#        define BOOST_PP_ITERATION_1 30
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 31 && BOOST_PP_ITERATION_FINISH_1 >= 31
+#        define BOOST_PP_ITERATION_1 31
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 32 && BOOST_PP_ITERATION_FINISH_1 >= 32
+#        define BOOST_PP_ITERATION_1 32
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 33 && BOOST_PP_ITERATION_FINISH_1 >= 33
+#        define BOOST_PP_ITERATION_1 33
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 34 && BOOST_PP_ITERATION_FINISH_1 >= 34
+#        define BOOST_PP_ITERATION_1 34
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 35 && BOOST_PP_ITERATION_FINISH_1 >= 35
+#        define BOOST_PP_ITERATION_1 35
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 36 && BOOST_PP_ITERATION_FINISH_1 >= 36
+#        define BOOST_PP_ITERATION_1 36
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 37 && BOOST_PP_ITERATION_FINISH_1 >= 37
+#        define BOOST_PP_ITERATION_1 37
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 38 && BOOST_PP_ITERATION_FINISH_1 >= 38
+#        define BOOST_PP_ITERATION_1 38
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 39 && BOOST_PP_ITERATION_FINISH_1 >= 39
+#        define BOOST_PP_ITERATION_1 39
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 40 && BOOST_PP_ITERATION_FINISH_1 >= 40
+#        define BOOST_PP_ITERATION_1 40
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 41 && BOOST_PP_ITERATION_FINISH_1 >= 41
+#        define BOOST_PP_ITERATION_1 41
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 42 && BOOST_PP_ITERATION_FINISH_1 >= 42
+#        define BOOST_PP_ITERATION_1 42
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 43 && BOOST_PP_ITERATION_FINISH_1 >= 43
+#        define BOOST_PP_ITERATION_1 43
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 44 && BOOST_PP_ITERATION_FINISH_1 >= 44
+#        define BOOST_PP_ITERATION_1 44
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 45 && BOOST_PP_ITERATION_FINISH_1 >= 45
+#        define BOOST_PP_ITERATION_1 45
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 46 && BOOST_PP_ITERATION_FINISH_1 >= 46
+#        define BOOST_PP_ITERATION_1 46
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 47 && BOOST_PP_ITERATION_FINISH_1 >= 47
+#        define BOOST_PP_ITERATION_1 47
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 48 && BOOST_PP_ITERATION_FINISH_1 >= 48
+#        define BOOST_PP_ITERATION_1 48
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 49 && BOOST_PP_ITERATION_FINISH_1 >= 49
+#        define BOOST_PP_ITERATION_1 49
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 50 && BOOST_PP_ITERATION_FINISH_1 >= 50
+#        define BOOST_PP_ITERATION_1 50
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 51 && BOOST_PP_ITERATION_FINISH_1 >= 51
+#        define BOOST_PP_ITERATION_1 51
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 52 && BOOST_PP_ITERATION_FINISH_1 >= 52
+#        define BOOST_PP_ITERATION_1 52
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 53 && BOOST_PP_ITERATION_FINISH_1 >= 53
+#        define BOOST_PP_ITERATION_1 53
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 54 && BOOST_PP_ITERATION_FINISH_1 >= 54
+#        define BOOST_PP_ITERATION_1 54
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 55 && BOOST_PP_ITERATION_FINISH_1 >= 55
+#        define BOOST_PP_ITERATION_1 55
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 56 && BOOST_PP_ITERATION_FINISH_1 >= 56
+#        define BOOST_PP_ITERATION_1 56
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 57 && BOOST_PP_ITERATION_FINISH_1 >= 57
+#        define BOOST_PP_ITERATION_1 57
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 58 && BOOST_PP_ITERATION_FINISH_1 >= 58
+#        define BOOST_PP_ITERATION_1 58
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 59 && BOOST_PP_ITERATION_FINISH_1 >= 59
+#        define BOOST_PP_ITERATION_1 59
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 60 && BOOST_PP_ITERATION_FINISH_1 >= 60
+#        define BOOST_PP_ITERATION_1 60
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 61 && BOOST_PP_ITERATION_FINISH_1 >= 61
+#        define BOOST_PP_ITERATION_1 61
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 62 && BOOST_PP_ITERATION_FINISH_1 >= 62
+#        define BOOST_PP_ITERATION_1 62
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 63 && BOOST_PP_ITERATION_FINISH_1 >= 63
+#        define BOOST_PP_ITERATION_1 63
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 64 && BOOST_PP_ITERATION_FINISH_1 >= 64
+#        define BOOST_PP_ITERATION_1 64
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 65 && BOOST_PP_ITERATION_FINISH_1 >= 65
+#        define BOOST_PP_ITERATION_1 65
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 66 && BOOST_PP_ITERATION_FINISH_1 >= 66
+#        define BOOST_PP_ITERATION_1 66
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 67 && BOOST_PP_ITERATION_FINISH_1 >= 67
+#        define BOOST_PP_ITERATION_1 67
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 68 && BOOST_PP_ITERATION_FINISH_1 >= 68
+#        define BOOST_PP_ITERATION_1 68
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 69 && BOOST_PP_ITERATION_FINISH_1 >= 69
+#        define BOOST_PP_ITERATION_1 69
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 70 && BOOST_PP_ITERATION_FINISH_1 >= 70
+#        define BOOST_PP_ITERATION_1 70
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 71 && BOOST_PP_ITERATION_FINISH_1 >= 71
+#        define BOOST_PP_ITERATION_1 71
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 72 && BOOST_PP_ITERATION_FINISH_1 >= 72
+#        define BOOST_PP_ITERATION_1 72
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 73 && BOOST_PP_ITERATION_FINISH_1 >= 73
+#        define BOOST_PP_ITERATION_1 73
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 74 && BOOST_PP_ITERATION_FINISH_1 >= 74
+#        define BOOST_PP_ITERATION_1 74
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 75 && BOOST_PP_ITERATION_FINISH_1 >= 75
+#        define BOOST_PP_ITERATION_1 75
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 76 && BOOST_PP_ITERATION_FINISH_1 >= 76
+#        define BOOST_PP_ITERATION_1 76
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 77 && BOOST_PP_ITERATION_FINISH_1 >= 77
+#        define BOOST_PP_ITERATION_1 77
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 78 && BOOST_PP_ITERATION_FINISH_1 >= 78
+#        define BOOST_PP_ITERATION_1 78
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 79 && BOOST_PP_ITERATION_FINISH_1 >= 79
+#        define BOOST_PP_ITERATION_1 79
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 80 && BOOST_PP_ITERATION_FINISH_1 >= 80
+#        define BOOST_PP_ITERATION_1 80
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 81 && BOOST_PP_ITERATION_FINISH_1 >= 81
+#        define BOOST_PP_ITERATION_1 81
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 82 && BOOST_PP_ITERATION_FINISH_1 >= 82
+#        define BOOST_PP_ITERATION_1 82
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 83 && BOOST_PP_ITERATION_FINISH_1 >= 83
+#        define BOOST_PP_ITERATION_1 83
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 84 && BOOST_PP_ITERATION_FINISH_1 >= 84
+#        define BOOST_PP_ITERATION_1 84
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 85 && BOOST_PP_ITERATION_FINISH_1 >= 85
+#        define BOOST_PP_ITERATION_1 85
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 86 && BOOST_PP_ITERATION_FINISH_1 >= 86
+#        define BOOST_PP_ITERATION_1 86
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 87 && BOOST_PP_ITERATION_FINISH_1 >= 87
+#        define BOOST_PP_ITERATION_1 87
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 88 && BOOST_PP_ITERATION_FINISH_1 >= 88
+#        define BOOST_PP_ITERATION_1 88
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 89 && BOOST_PP_ITERATION_FINISH_1 >= 89
+#        define BOOST_PP_ITERATION_1 89
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 90 && BOOST_PP_ITERATION_FINISH_1 >= 90
+#        define BOOST_PP_ITERATION_1 90
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 91 && BOOST_PP_ITERATION_FINISH_1 >= 91
+#        define BOOST_PP_ITERATION_1 91
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 92 && BOOST_PP_ITERATION_FINISH_1 >= 92
+#        define BOOST_PP_ITERATION_1 92
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 93 && BOOST_PP_ITERATION_FINISH_1 >= 93
+#        define BOOST_PP_ITERATION_1 93
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 94 && BOOST_PP_ITERATION_FINISH_1 >= 94
+#        define BOOST_PP_ITERATION_1 94
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 95 && BOOST_PP_ITERATION_FINISH_1 >= 95
+#        define BOOST_PP_ITERATION_1 95
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 96 && BOOST_PP_ITERATION_FINISH_1 >= 96
+#        define BOOST_PP_ITERATION_1 96
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 97 && BOOST_PP_ITERATION_FINISH_1 >= 97
+#        define BOOST_PP_ITERATION_1 97
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 98 && BOOST_PP_ITERATION_FINISH_1 >= 98
+#        define BOOST_PP_ITERATION_1 98
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 99 && BOOST_PP_ITERATION_FINISH_1 >= 99
+#        define BOOST_PP_ITERATION_1 99
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 100 && BOOST_PP_ITERATION_FINISH_1 >= 100
+#        define BOOST_PP_ITERATION_1 100
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 101 && BOOST_PP_ITERATION_FINISH_1 >= 101
+#        define BOOST_PP_ITERATION_1 101
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 102 && BOOST_PP_ITERATION_FINISH_1 >= 102
+#        define BOOST_PP_ITERATION_1 102
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 103 && BOOST_PP_ITERATION_FINISH_1 >= 103
+#        define BOOST_PP_ITERATION_1 103
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 104 && BOOST_PP_ITERATION_FINISH_1 >= 104
+#        define BOOST_PP_ITERATION_1 104
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 105 && BOOST_PP_ITERATION_FINISH_1 >= 105
+#        define BOOST_PP_ITERATION_1 105
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 106 && BOOST_PP_ITERATION_FINISH_1 >= 106
+#        define BOOST_PP_ITERATION_1 106
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 107 && BOOST_PP_ITERATION_FINISH_1 >= 107
+#        define BOOST_PP_ITERATION_1 107
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 108 && BOOST_PP_ITERATION_FINISH_1 >= 108
+#        define BOOST_PP_ITERATION_1 108
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 109 && BOOST_PP_ITERATION_FINISH_1 >= 109
+#        define BOOST_PP_ITERATION_1 109
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 110 && BOOST_PP_ITERATION_FINISH_1 >= 110
+#        define BOOST_PP_ITERATION_1 110
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 111 && BOOST_PP_ITERATION_FINISH_1 >= 111
+#        define BOOST_PP_ITERATION_1 111
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 112 && BOOST_PP_ITERATION_FINISH_1 >= 112
+#        define BOOST_PP_ITERATION_1 112
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 113 && BOOST_PP_ITERATION_FINISH_1 >= 113
+#        define BOOST_PP_ITERATION_1 113
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 114 && BOOST_PP_ITERATION_FINISH_1 >= 114
+#        define BOOST_PP_ITERATION_1 114
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 115 && BOOST_PP_ITERATION_FINISH_1 >= 115
+#        define BOOST_PP_ITERATION_1 115
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 116 && BOOST_PP_ITERATION_FINISH_1 >= 116
+#        define BOOST_PP_ITERATION_1 116
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 117 && BOOST_PP_ITERATION_FINISH_1 >= 117
+#        define BOOST_PP_ITERATION_1 117
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 118 && BOOST_PP_ITERATION_FINISH_1 >= 118
+#        define BOOST_PP_ITERATION_1 118
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 119 && BOOST_PP_ITERATION_FINISH_1 >= 119
+#        define BOOST_PP_ITERATION_1 119
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 120 && BOOST_PP_ITERATION_FINISH_1 >= 120
+#        define BOOST_PP_ITERATION_1 120
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 121 && BOOST_PP_ITERATION_FINISH_1 >= 121
+#        define BOOST_PP_ITERATION_1 121
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 122 && BOOST_PP_ITERATION_FINISH_1 >= 122
+#        define BOOST_PP_ITERATION_1 122
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 123 && BOOST_PP_ITERATION_FINISH_1 >= 123
+#        define BOOST_PP_ITERATION_1 123
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 124 && BOOST_PP_ITERATION_FINISH_1 >= 124
+#        define BOOST_PP_ITERATION_1 124
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 125 && BOOST_PP_ITERATION_FINISH_1 >= 125
+#        define BOOST_PP_ITERATION_1 125
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 126 && BOOST_PP_ITERATION_FINISH_1 >= 126
+#        define BOOST_PP_ITERATION_1 126
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 127 && BOOST_PP_ITERATION_FINISH_1 >= 127
+#        define BOOST_PP_ITERATION_1 127
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 128 && BOOST_PP_ITERATION_FINISH_1 >= 128
+#        define BOOST_PP_ITERATION_1 128
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 129 && BOOST_PP_ITERATION_FINISH_1 >= 129
+#        define BOOST_PP_ITERATION_1 129
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 130 && BOOST_PP_ITERATION_FINISH_1 >= 130
+#        define BOOST_PP_ITERATION_1 130
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 131 && BOOST_PP_ITERATION_FINISH_1 >= 131
+#        define BOOST_PP_ITERATION_1 131
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 132 && BOOST_PP_ITERATION_FINISH_1 >= 132
+#        define BOOST_PP_ITERATION_1 132
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 133 && BOOST_PP_ITERATION_FINISH_1 >= 133
+#        define BOOST_PP_ITERATION_1 133
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 134 && BOOST_PP_ITERATION_FINISH_1 >= 134
+#        define BOOST_PP_ITERATION_1 134
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 135 && BOOST_PP_ITERATION_FINISH_1 >= 135
+#        define BOOST_PP_ITERATION_1 135
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 136 && BOOST_PP_ITERATION_FINISH_1 >= 136
+#        define BOOST_PP_ITERATION_1 136
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 137 && BOOST_PP_ITERATION_FINISH_1 >= 137
+#        define BOOST_PP_ITERATION_1 137
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 138 && BOOST_PP_ITERATION_FINISH_1 >= 138
+#        define BOOST_PP_ITERATION_1 138
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 139 && BOOST_PP_ITERATION_FINISH_1 >= 139
+#        define BOOST_PP_ITERATION_1 139
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 140 && BOOST_PP_ITERATION_FINISH_1 >= 140
+#        define BOOST_PP_ITERATION_1 140
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 141 && BOOST_PP_ITERATION_FINISH_1 >= 141
+#        define BOOST_PP_ITERATION_1 141
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 142 && BOOST_PP_ITERATION_FINISH_1 >= 142
+#        define BOOST_PP_ITERATION_1 142
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 143 && BOOST_PP_ITERATION_FINISH_1 >= 143
+#        define BOOST_PP_ITERATION_1 143
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 144 && BOOST_PP_ITERATION_FINISH_1 >= 144
+#        define BOOST_PP_ITERATION_1 144
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 145 && BOOST_PP_ITERATION_FINISH_1 >= 145
+#        define BOOST_PP_ITERATION_1 145
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 146 && BOOST_PP_ITERATION_FINISH_1 >= 146
+#        define BOOST_PP_ITERATION_1 146
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 147 && BOOST_PP_ITERATION_FINISH_1 >= 147
+#        define BOOST_PP_ITERATION_1 147
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 148 && BOOST_PP_ITERATION_FINISH_1 >= 148
+#        define BOOST_PP_ITERATION_1 148
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 149 && BOOST_PP_ITERATION_FINISH_1 >= 149
+#        define BOOST_PP_ITERATION_1 149
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 150 && BOOST_PP_ITERATION_FINISH_1 >= 150
+#        define BOOST_PP_ITERATION_1 150
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 151 && BOOST_PP_ITERATION_FINISH_1 >= 151
+#        define BOOST_PP_ITERATION_1 151
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 152 && BOOST_PP_ITERATION_FINISH_1 >= 152
+#        define BOOST_PP_ITERATION_1 152
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 153 && BOOST_PP_ITERATION_FINISH_1 >= 153
+#        define BOOST_PP_ITERATION_1 153
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 154 && BOOST_PP_ITERATION_FINISH_1 >= 154
+#        define BOOST_PP_ITERATION_1 154
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 155 && BOOST_PP_ITERATION_FINISH_1 >= 155
+#        define BOOST_PP_ITERATION_1 155
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 156 && BOOST_PP_ITERATION_FINISH_1 >= 156
+#        define BOOST_PP_ITERATION_1 156
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 157 && BOOST_PP_ITERATION_FINISH_1 >= 157
+#        define BOOST_PP_ITERATION_1 157
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 158 && BOOST_PP_ITERATION_FINISH_1 >= 158
+#        define BOOST_PP_ITERATION_1 158
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 159 && BOOST_PP_ITERATION_FINISH_1 >= 159
+#        define BOOST_PP_ITERATION_1 159
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 160 && BOOST_PP_ITERATION_FINISH_1 >= 160
+#        define BOOST_PP_ITERATION_1 160
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 161 && BOOST_PP_ITERATION_FINISH_1 >= 161
+#        define BOOST_PP_ITERATION_1 161
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 162 && BOOST_PP_ITERATION_FINISH_1 >= 162
+#        define BOOST_PP_ITERATION_1 162
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 163 && BOOST_PP_ITERATION_FINISH_1 >= 163
+#        define BOOST_PP_ITERATION_1 163
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 164 && BOOST_PP_ITERATION_FINISH_1 >= 164
+#        define BOOST_PP_ITERATION_1 164
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 165 && BOOST_PP_ITERATION_FINISH_1 >= 165
+#        define BOOST_PP_ITERATION_1 165
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 166 && BOOST_PP_ITERATION_FINISH_1 >= 166
+#        define BOOST_PP_ITERATION_1 166
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 167 && BOOST_PP_ITERATION_FINISH_1 >= 167
+#        define BOOST_PP_ITERATION_1 167
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 168 && BOOST_PP_ITERATION_FINISH_1 >= 168
+#        define BOOST_PP_ITERATION_1 168
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 169 && BOOST_PP_ITERATION_FINISH_1 >= 169
+#        define BOOST_PP_ITERATION_1 169
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 170 && BOOST_PP_ITERATION_FINISH_1 >= 170
+#        define BOOST_PP_ITERATION_1 170
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 171 && BOOST_PP_ITERATION_FINISH_1 >= 171
+#        define BOOST_PP_ITERATION_1 171
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 172 && BOOST_PP_ITERATION_FINISH_1 >= 172
+#        define BOOST_PP_ITERATION_1 172
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 173 && BOOST_PP_ITERATION_FINISH_1 >= 173
+#        define BOOST_PP_ITERATION_1 173
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 174 && BOOST_PP_ITERATION_FINISH_1 >= 174
+#        define BOOST_PP_ITERATION_1 174
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 175 && BOOST_PP_ITERATION_FINISH_1 >= 175
+#        define BOOST_PP_ITERATION_1 175
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 176 && BOOST_PP_ITERATION_FINISH_1 >= 176
+#        define BOOST_PP_ITERATION_1 176
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 177 && BOOST_PP_ITERATION_FINISH_1 >= 177
+#        define BOOST_PP_ITERATION_1 177
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 178 && BOOST_PP_ITERATION_FINISH_1 >= 178
+#        define BOOST_PP_ITERATION_1 178
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 179 && BOOST_PP_ITERATION_FINISH_1 >= 179
+#        define BOOST_PP_ITERATION_1 179
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 180 && BOOST_PP_ITERATION_FINISH_1 >= 180
+#        define BOOST_PP_ITERATION_1 180
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 181 && BOOST_PP_ITERATION_FINISH_1 >= 181
+#        define BOOST_PP_ITERATION_1 181
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 182 && BOOST_PP_ITERATION_FINISH_1 >= 182
+#        define BOOST_PP_ITERATION_1 182
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 183 && BOOST_PP_ITERATION_FINISH_1 >= 183
+#        define BOOST_PP_ITERATION_1 183
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 184 && BOOST_PP_ITERATION_FINISH_1 >= 184
+#        define BOOST_PP_ITERATION_1 184
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 185 && BOOST_PP_ITERATION_FINISH_1 >= 185
+#        define BOOST_PP_ITERATION_1 185
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 186 && BOOST_PP_ITERATION_FINISH_1 >= 186
+#        define BOOST_PP_ITERATION_1 186
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 187 && BOOST_PP_ITERATION_FINISH_1 >= 187
+#        define BOOST_PP_ITERATION_1 187
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 188 && BOOST_PP_ITERATION_FINISH_1 >= 188
+#        define BOOST_PP_ITERATION_1 188
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 189 && BOOST_PP_ITERATION_FINISH_1 >= 189
+#        define BOOST_PP_ITERATION_1 189
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 190 && BOOST_PP_ITERATION_FINISH_1 >= 190
+#        define BOOST_PP_ITERATION_1 190
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 191 && BOOST_PP_ITERATION_FINISH_1 >= 191
+#        define BOOST_PP_ITERATION_1 191
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 192 && BOOST_PP_ITERATION_FINISH_1 >= 192
+#        define BOOST_PP_ITERATION_1 192
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 193 && BOOST_PP_ITERATION_FINISH_1 >= 193
+#        define BOOST_PP_ITERATION_1 193
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 194 && BOOST_PP_ITERATION_FINISH_1 >= 194
+#        define BOOST_PP_ITERATION_1 194
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 195 && BOOST_PP_ITERATION_FINISH_1 >= 195
+#        define BOOST_PP_ITERATION_1 195
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 196 && BOOST_PP_ITERATION_FINISH_1 >= 196
+#        define BOOST_PP_ITERATION_1 196
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 197 && BOOST_PP_ITERATION_FINISH_1 >= 197
+#        define BOOST_PP_ITERATION_1 197
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 198 && BOOST_PP_ITERATION_FINISH_1 >= 198
+#        define BOOST_PP_ITERATION_1 198
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 199 && BOOST_PP_ITERATION_FINISH_1 >= 199
+#        define BOOST_PP_ITERATION_1 199
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 200 && BOOST_PP_ITERATION_FINISH_1 >= 200
+#        define BOOST_PP_ITERATION_1 200
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 201 && BOOST_PP_ITERATION_FINISH_1 >= 201
+#        define BOOST_PP_ITERATION_1 201
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 202 && BOOST_PP_ITERATION_FINISH_1 >= 202
+#        define BOOST_PP_ITERATION_1 202
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 203 && BOOST_PP_ITERATION_FINISH_1 >= 203
+#        define BOOST_PP_ITERATION_1 203
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 204 && BOOST_PP_ITERATION_FINISH_1 >= 204
+#        define BOOST_PP_ITERATION_1 204
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 205 && BOOST_PP_ITERATION_FINISH_1 >= 205
+#        define BOOST_PP_ITERATION_1 205
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 206 && BOOST_PP_ITERATION_FINISH_1 >= 206
+#        define BOOST_PP_ITERATION_1 206
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 207 && BOOST_PP_ITERATION_FINISH_1 >= 207
+#        define BOOST_PP_ITERATION_1 207
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 208 && BOOST_PP_ITERATION_FINISH_1 >= 208
+#        define BOOST_PP_ITERATION_1 208
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 209 && BOOST_PP_ITERATION_FINISH_1 >= 209
+#        define BOOST_PP_ITERATION_1 209
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 210 && BOOST_PP_ITERATION_FINISH_1 >= 210
+#        define BOOST_PP_ITERATION_1 210
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 211 && BOOST_PP_ITERATION_FINISH_1 >= 211
+#        define BOOST_PP_ITERATION_1 211
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 212 && BOOST_PP_ITERATION_FINISH_1 >= 212
+#        define BOOST_PP_ITERATION_1 212
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 213 && BOOST_PP_ITERATION_FINISH_1 >= 213
+#        define BOOST_PP_ITERATION_1 213
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 214 && BOOST_PP_ITERATION_FINISH_1 >= 214
+#        define BOOST_PP_ITERATION_1 214
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 215 && BOOST_PP_ITERATION_FINISH_1 >= 215
+#        define BOOST_PP_ITERATION_1 215
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 216 && BOOST_PP_ITERATION_FINISH_1 >= 216
+#        define BOOST_PP_ITERATION_1 216
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 217 && BOOST_PP_ITERATION_FINISH_1 >= 217
+#        define BOOST_PP_ITERATION_1 217
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 218 && BOOST_PP_ITERATION_FINISH_1 >= 218
+#        define BOOST_PP_ITERATION_1 218
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 219 && BOOST_PP_ITERATION_FINISH_1 >= 219
+#        define BOOST_PP_ITERATION_1 219
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 220 && BOOST_PP_ITERATION_FINISH_1 >= 220
+#        define BOOST_PP_ITERATION_1 220
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 221 && BOOST_PP_ITERATION_FINISH_1 >= 221
+#        define BOOST_PP_ITERATION_1 221
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 222 && BOOST_PP_ITERATION_FINISH_1 >= 222
+#        define BOOST_PP_ITERATION_1 222
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 223 && BOOST_PP_ITERATION_FINISH_1 >= 223
+#        define BOOST_PP_ITERATION_1 223
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 224 && BOOST_PP_ITERATION_FINISH_1 >= 224
+#        define BOOST_PP_ITERATION_1 224
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 225 && BOOST_PP_ITERATION_FINISH_1 >= 225
+#        define BOOST_PP_ITERATION_1 225
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 226 && BOOST_PP_ITERATION_FINISH_1 >= 226
+#        define BOOST_PP_ITERATION_1 226
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 227 && BOOST_PP_ITERATION_FINISH_1 >= 227
+#        define BOOST_PP_ITERATION_1 227
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 228 && BOOST_PP_ITERATION_FINISH_1 >= 228
+#        define BOOST_PP_ITERATION_1 228
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 229 && BOOST_PP_ITERATION_FINISH_1 >= 229
+#        define BOOST_PP_ITERATION_1 229
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 230 && BOOST_PP_ITERATION_FINISH_1 >= 230
+#        define BOOST_PP_ITERATION_1 230
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 231 && BOOST_PP_ITERATION_FINISH_1 >= 231
+#        define BOOST_PP_ITERATION_1 231
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 232 && BOOST_PP_ITERATION_FINISH_1 >= 232
+#        define BOOST_PP_ITERATION_1 232
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 233 && BOOST_PP_ITERATION_FINISH_1 >= 233
+#        define BOOST_PP_ITERATION_1 233
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 234 && BOOST_PP_ITERATION_FINISH_1 >= 234
+#        define BOOST_PP_ITERATION_1 234
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 235 && BOOST_PP_ITERATION_FINISH_1 >= 235
+#        define BOOST_PP_ITERATION_1 235
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 236 && BOOST_PP_ITERATION_FINISH_1 >= 236
+#        define BOOST_PP_ITERATION_1 236
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 237 && BOOST_PP_ITERATION_FINISH_1 >= 237
+#        define BOOST_PP_ITERATION_1 237
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 238 && BOOST_PP_ITERATION_FINISH_1 >= 238
+#        define BOOST_PP_ITERATION_1 238
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 239 && BOOST_PP_ITERATION_FINISH_1 >= 239
+#        define BOOST_PP_ITERATION_1 239
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 240 && BOOST_PP_ITERATION_FINISH_1 >= 240
+#        define BOOST_PP_ITERATION_1 240
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 241 && BOOST_PP_ITERATION_FINISH_1 >= 241
+#        define BOOST_PP_ITERATION_1 241
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 242 && BOOST_PP_ITERATION_FINISH_1 >= 242
+#        define BOOST_PP_ITERATION_1 242
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 243 && BOOST_PP_ITERATION_FINISH_1 >= 243
+#        define BOOST_PP_ITERATION_1 243
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 244 && BOOST_PP_ITERATION_FINISH_1 >= 244
+#        define BOOST_PP_ITERATION_1 244
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 245 && BOOST_PP_ITERATION_FINISH_1 >= 245
+#        define BOOST_PP_ITERATION_1 245
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 246 && BOOST_PP_ITERATION_FINISH_1 >= 246
+#        define BOOST_PP_ITERATION_1 246
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 247 && BOOST_PP_ITERATION_FINISH_1 >= 247
+#        define BOOST_PP_ITERATION_1 247
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 248 && BOOST_PP_ITERATION_FINISH_1 >= 248
+#        define BOOST_PP_ITERATION_1 248
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 249 && BOOST_PP_ITERATION_FINISH_1 >= 249
+#        define BOOST_PP_ITERATION_1 249
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 250 && BOOST_PP_ITERATION_FINISH_1 >= 250
+#        define BOOST_PP_ITERATION_1 250
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 251 && BOOST_PP_ITERATION_FINISH_1 >= 251
+#        define BOOST_PP_ITERATION_1 251
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 252 && BOOST_PP_ITERATION_FINISH_1 >= 252
+#        define BOOST_PP_ITERATION_1 252
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 253 && BOOST_PP_ITERATION_FINISH_1 >= 253
+#        define BOOST_PP_ITERATION_1 253
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 254 && BOOST_PP_ITERATION_FINISH_1 >= 254
+#        define BOOST_PP_ITERATION_1 254
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 255 && BOOST_PP_ITERATION_FINISH_1 >= 255
+#        define BOOST_PP_ITERATION_1 255
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+#    if BOOST_PP_ITERATION_START_1 <= 256 && BOOST_PP_ITERATION_FINISH_1 >= 256
+#        define BOOST_PP_ITERATION_1 256
+#        include BOOST_PP_FILENAME_1
+#        undef BOOST_PP_ITERATION_1
+#    endif
+# endif
+#
+# undef BOOST_PP_IS_ITERATING
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 0
+#
+# undef BOOST_PP_ITERATION_START_1
+# undef BOOST_PP_ITERATION_FINISH_1
+# undef BOOST_PP_FILENAME_1
+#
+# undef BOOST_PP_ITERATION_FLAGS_1
+# undef BOOST_PP_ITERATION_PARAMS_1
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/forward2.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/forward2.hpp
new file mode 100644
index 0000000..e61a329
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/forward2.hpp
@@ -0,0 +1,1338 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# if defined(BOOST_PP_ITERATION_LIMITS)
+#    if !defined(BOOST_PP_FILENAME_2)
+#        error BOOST_PP_ERROR:  depth #2 filename is not defined
+#    endif
+#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)
+#    include <boost/preprocessor/iteration/detail/bounds/lower2.hpp>
+#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)
+#    include <boost/preprocessor/iteration/detail/bounds/upper2.hpp>
+#    define BOOST_PP_ITERATION_FLAGS_2() 0
+#    undef BOOST_PP_ITERATION_LIMITS
+# elif defined(BOOST_PP_ITERATION_PARAMS_2)
+#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_2)
+#    include <boost/preprocessor/iteration/detail/bounds/lower2.hpp>
+#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_2)
+#    include <boost/preprocessor/iteration/detail/bounds/upper2.hpp>
+#    define BOOST_PP_FILENAME_2 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_2)
+#    if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_2) >= 4
+#        define BOOST_PP_ITERATION_FLAGS_2() BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_2)
+#    else
+#        define BOOST_PP_ITERATION_FLAGS_2() 0
+#    endif
+# else
+#    error BOOST_PP_ERROR:  depth #2 iteration boundaries or filename not defined
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 2
+#
+# if (BOOST_PP_ITERATION_START_2) > (BOOST_PP_ITERATION_FINISH_2)
+#    include <boost/preprocessor/iteration/detail/iter/reverse2.hpp>
+# else
+#    if BOOST_PP_ITERATION_START_2 <= 0 && BOOST_PP_ITERATION_FINISH_2 >= 0
+#        define BOOST_PP_ITERATION_2 0
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 1 && BOOST_PP_ITERATION_FINISH_2 >= 1
+#        define BOOST_PP_ITERATION_2 1
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 2 && BOOST_PP_ITERATION_FINISH_2 >= 2
+#        define BOOST_PP_ITERATION_2 2
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 3 && BOOST_PP_ITERATION_FINISH_2 >= 3
+#        define BOOST_PP_ITERATION_2 3
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 4 && BOOST_PP_ITERATION_FINISH_2 >= 4
+#        define BOOST_PP_ITERATION_2 4
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 5 && BOOST_PP_ITERATION_FINISH_2 >= 5
+#        define BOOST_PP_ITERATION_2 5
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 6 && BOOST_PP_ITERATION_FINISH_2 >= 6
+#        define BOOST_PP_ITERATION_2 6
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 7 && BOOST_PP_ITERATION_FINISH_2 >= 7
+#        define BOOST_PP_ITERATION_2 7
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 8 && BOOST_PP_ITERATION_FINISH_2 >= 8
+#        define BOOST_PP_ITERATION_2 8
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 9 && BOOST_PP_ITERATION_FINISH_2 >= 9
+#        define BOOST_PP_ITERATION_2 9
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 10 && BOOST_PP_ITERATION_FINISH_2 >= 10
+#        define BOOST_PP_ITERATION_2 10
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 11 && BOOST_PP_ITERATION_FINISH_2 >= 11
+#        define BOOST_PP_ITERATION_2 11
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 12 && BOOST_PP_ITERATION_FINISH_2 >= 12
+#        define BOOST_PP_ITERATION_2 12
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 13 && BOOST_PP_ITERATION_FINISH_2 >= 13
+#        define BOOST_PP_ITERATION_2 13
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 14 && BOOST_PP_ITERATION_FINISH_2 >= 14
+#        define BOOST_PP_ITERATION_2 14
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 15 && BOOST_PP_ITERATION_FINISH_2 >= 15
+#        define BOOST_PP_ITERATION_2 15
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 16 && BOOST_PP_ITERATION_FINISH_2 >= 16
+#        define BOOST_PP_ITERATION_2 16
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 17 && BOOST_PP_ITERATION_FINISH_2 >= 17
+#        define BOOST_PP_ITERATION_2 17
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 18 && BOOST_PP_ITERATION_FINISH_2 >= 18
+#        define BOOST_PP_ITERATION_2 18
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 19 && BOOST_PP_ITERATION_FINISH_2 >= 19
+#        define BOOST_PP_ITERATION_2 19
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 20 && BOOST_PP_ITERATION_FINISH_2 >= 20
+#        define BOOST_PP_ITERATION_2 20
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 21 && BOOST_PP_ITERATION_FINISH_2 >= 21
+#        define BOOST_PP_ITERATION_2 21
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 22 && BOOST_PP_ITERATION_FINISH_2 >= 22
+#        define BOOST_PP_ITERATION_2 22
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 23 && BOOST_PP_ITERATION_FINISH_2 >= 23
+#        define BOOST_PP_ITERATION_2 23
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 24 && BOOST_PP_ITERATION_FINISH_2 >= 24
+#        define BOOST_PP_ITERATION_2 24
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 25 && BOOST_PP_ITERATION_FINISH_2 >= 25
+#        define BOOST_PP_ITERATION_2 25
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 26 && BOOST_PP_ITERATION_FINISH_2 >= 26
+#        define BOOST_PP_ITERATION_2 26
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 27 && BOOST_PP_ITERATION_FINISH_2 >= 27
+#        define BOOST_PP_ITERATION_2 27
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 28 && BOOST_PP_ITERATION_FINISH_2 >= 28
+#        define BOOST_PP_ITERATION_2 28
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 29 && BOOST_PP_ITERATION_FINISH_2 >= 29
+#        define BOOST_PP_ITERATION_2 29
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 30 && BOOST_PP_ITERATION_FINISH_2 >= 30
+#        define BOOST_PP_ITERATION_2 30
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 31 && BOOST_PP_ITERATION_FINISH_2 >= 31
+#        define BOOST_PP_ITERATION_2 31
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 32 && BOOST_PP_ITERATION_FINISH_2 >= 32
+#        define BOOST_PP_ITERATION_2 32
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 33 && BOOST_PP_ITERATION_FINISH_2 >= 33
+#        define BOOST_PP_ITERATION_2 33
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 34 && BOOST_PP_ITERATION_FINISH_2 >= 34
+#        define BOOST_PP_ITERATION_2 34
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 35 && BOOST_PP_ITERATION_FINISH_2 >= 35
+#        define BOOST_PP_ITERATION_2 35
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 36 && BOOST_PP_ITERATION_FINISH_2 >= 36
+#        define BOOST_PP_ITERATION_2 36
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 37 && BOOST_PP_ITERATION_FINISH_2 >= 37
+#        define BOOST_PP_ITERATION_2 37
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 38 && BOOST_PP_ITERATION_FINISH_2 >= 38
+#        define BOOST_PP_ITERATION_2 38
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 39 && BOOST_PP_ITERATION_FINISH_2 >= 39
+#        define BOOST_PP_ITERATION_2 39
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 40 && BOOST_PP_ITERATION_FINISH_2 >= 40
+#        define BOOST_PP_ITERATION_2 40
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 41 && BOOST_PP_ITERATION_FINISH_2 >= 41
+#        define BOOST_PP_ITERATION_2 41
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 42 && BOOST_PP_ITERATION_FINISH_2 >= 42
+#        define BOOST_PP_ITERATION_2 42
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 43 && BOOST_PP_ITERATION_FINISH_2 >= 43
+#        define BOOST_PP_ITERATION_2 43
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 44 && BOOST_PP_ITERATION_FINISH_2 >= 44
+#        define BOOST_PP_ITERATION_2 44
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 45 && BOOST_PP_ITERATION_FINISH_2 >= 45
+#        define BOOST_PP_ITERATION_2 45
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 46 && BOOST_PP_ITERATION_FINISH_2 >= 46
+#        define BOOST_PP_ITERATION_2 46
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 47 && BOOST_PP_ITERATION_FINISH_2 >= 47
+#        define BOOST_PP_ITERATION_2 47
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 48 && BOOST_PP_ITERATION_FINISH_2 >= 48
+#        define BOOST_PP_ITERATION_2 48
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 49 && BOOST_PP_ITERATION_FINISH_2 >= 49
+#        define BOOST_PP_ITERATION_2 49
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 50 && BOOST_PP_ITERATION_FINISH_2 >= 50
+#        define BOOST_PP_ITERATION_2 50
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 51 && BOOST_PP_ITERATION_FINISH_2 >= 51
+#        define BOOST_PP_ITERATION_2 51
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 52 && BOOST_PP_ITERATION_FINISH_2 >= 52
+#        define BOOST_PP_ITERATION_2 52
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 53 && BOOST_PP_ITERATION_FINISH_2 >= 53
+#        define BOOST_PP_ITERATION_2 53
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 54 && BOOST_PP_ITERATION_FINISH_2 >= 54
+#        define BOOST_PP_ITERATION_2 54
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 55 && BOOST_PP_ITERATION_FINISH_2 >= 55
+#        define BOOST_PP_ITERATION_2 55
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 56 && BOOST_PP_ITERATION_FINISH_2 >= 56
+#        define BOOST_PP_ITERATION_2 56
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 57 && BOOST_PP_ITERATION_FINISH_2 >= 57
+#        define BOOST_PP_ITERATION_2 57
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 58 && BOOST_PP_ITERATION_FINISH_2 >= 58
+#        define BOOST_PP_ITERATION_2 58
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 59 && BOOST_PP_ITERATION_FINISH_2 >= 59
+#        define BOOST_PP_ITERATION_2 59
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 60 && BOOST_PP_ITERATION_FINISH_2 >= 60
+#        define BOOST_PP_ITERATION_2 60
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 61 && BOOST_PP_ITERATION_FINISH_2 >= 61
+#        define BOOST_PP_ITERATION_2 61
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 62 && BOOST_PP_ITERATION_FINISH_2 >= 62
+#        define BOOST_PP_ITERATION_2 62
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 63 && BOOST_PP_ITERATION_FINISH_2 >= 63
+#        define BOOST_PP_ITERATION_2 63
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 64 && BOOST_PP_ITERATION_FINISH_2 >= 64
+#        define BOOST_PP_ITERATION_2 64
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 65 && BOOST_PP_ITERATION_FINISH_2 >= 65
+#        define BOOST_PP_ITERATION_2 65
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 66 && BOOST_PP_ITERATION_FINISH_2 >= 66
+#        define BOOST_PP_ITERATION_2 66
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 67 && BOOST_PP_ITERATION_FINISH_2 >= 67
+#        define BOOST_PP_ITERATION_2 67
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 68 && BOOST_PP_ITERATION_FINISH_2 >= 68
+#        define BOOST_PP_ITERATION_2 68
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 69 && BOOST_PP_ITERATION_FINISH_2 >= 69
+#        define BOOST_PP_ITERATION_2 69
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 70 && BOOST_PP_ITERATION_FINISH_2 >= 70
+#        define BOOST_PP_ITERATION_2 70
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 71 && BOOST_PP_ITERATION_FINISH_2 >= 71
+#        define BOOST_PP_ITERATION_2 71
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 72 && BOOST_PP_ITERATION_FINISH_2 >= 72
+#        define BOOST_PP_ITERATION_2 72
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 73 && BOOST_PP_ITERATION_FINISH_2 >= 73
+#        define BOOST_PP_ITERATION_2 73
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 74 && BOOST_PP_ITERATION_FINISH_2 >= 74
+#        define BOOST_PP_ITERATION_2 74
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 75 && BOOST_PP_ITERATION_FINISH_2 >= 75
+#        define BOOST_PP_ITERATION_2 75
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 76 && BOOST_PP_ITERATION_FINISH_2 >= 76
+#        define BOOST_PP_ITERATION_2 76
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 77 && BOOST_PP_ITERATION_FINISH_2 >= 77
+#        define BOOST_PP_ITERATION_2 77
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 78 && BOOST_PP_ITERATION_FINISH_2 >= 78
+#        define BOOST_PP_ITERATION_2 78
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 79 && BOOST_PP_ITERATION_FINISH_2 >= 79
+#        define BOOST_PP_ITERATION_2 79
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 80 && BOOST_PP_ITERATION_FINISH_2 >= 80
+#        define BOOST_PP_ITERATION_2 80
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 81 && BOOST_PP_ITERATION_FINISH_2 >= 81
+#        define BOOST_PP_ITERATION_2 81
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 82 && BOOST_PP_ITERATION_FINISH_2 >= 82
+#        define BOOST_PP_ITERATION_2 82
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 83 && BOOST_PP_ITERATION_FINISH_2 >= 83
+#        define BOOST_PP_ITERATION_2 83
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 84 && BOOST_PP_ITERATION_FINISH_2 >= 84
+#        define BOOST_PP_ITERATION_2 84
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 85 && BOOST_PP_ITERATION_FINISH_2 >= 85
+#        define BOOST_PP_ITERATION_2 85
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 86 && BOOST_PP_ITERATION_FINISH_2 >= 86
+#        define BOOST_PP_ITERATION_2 86
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 87 && BOOST_PP_ITERATION_FINISH_2 >= 87
+#        define BOOST_PP_ITERATION_2 87
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 88 && BOOST_PP_ITERATION_FINISH_2 >= 88
+#        define BOOST_PP_ITERATION_2 88
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 89 && BOOST_PP_ITERATION_FINISH_2 >= 89
+#        define BOOST_PP_ITERATION_2 89
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 90 && BOOST_PP_ITERATION_FINISH_2 >= 90
+#        define BOOST_PP_ITERATION_2 90
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 91 && BOOST_PP_ITERATION_FINISH_2 >= 91
+#        define BOOST_PP_ITERATION_2 91
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 92 && BOOST_PP_ITERATION_FINISH_2 >= 92
+#        define BOOST_PP_ITERATION_2 92
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 93 && BOOST_PP_ITERATION_FINISH_2 >= 93
+#        define BOOST_PP_ITERATION_2 93
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 94 && BOOST_PP_ITERATION_FINISH_2 >= 94
+#        define BOOST_PP_ITERATION_2 94
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 95 && BOOST_PP_ITERATION_FINISH_2 >= 95
+#        define BOOST_PP_ITERATION_2 95
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 96 && BOOST_PP_ITERATION_FINISH_2 >= 96
+#        define BOOST_PP_ITERATION_2 96
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 97 && BOOST_PP_ITERATION_FINISH_2 >= 97
+#        define BOOST_PP_ITERATION_2 97
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 98 && BOOST_PP_ITERATION_FINISH_2 >= 98
+#        define BOOST_PP_ITERATION_2 98
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 99 && BOOST_PP_ITERATION_FINISH_2 >= 99
+#        define BOOST_PP_ITERATION_2 99
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 100 && BOOST_PP_ITERATION_FINISH_2 >= 100
+#        define BOOST_PP_ITERATION_2 100
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 101 && BOOST_PP_ITERATION_FINISH_2 >= 101
+#        define BOOST_PP_ITERATION_2 101
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 102 && BOOST_PP_ITERATION_FINISH_2 >= 102
+#        define BOOST_PP_ITERATION_2 102
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 103 && BOOST_PP_ITERATION_FINISH_2 >= 103
+#        define BOOST_PP_ITERATION_2 103
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 104 && BOOST_PP_ITERATION_FINISH_2 >= 104
+#        define BOOST_PP_ITERATION_2 104
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 105 && BOOST_PP_ITERATION_FINISH_2 >= 105
+#        define BOOST_PP_ITERATION_2 105
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 106 && BOOST_PP_ITERATION_FINISH_2 >= 106
+#        define BOOST_PP_ITERATION_2 106
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 107 && BOOST_PP_ITERATION_FINISH_2 >= 107
+#        define BOOST_PP_ITERATION_2 107
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 108 && BOOST_PP_ITERATION_FINISH_2 >= 108
+#        define BOOST_PP_ITERATION_2 108
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 109 && BOOST_PP_ITERATION_FINISH_2 >= 109
+#        define BOOST_PP_ITERATION_2 109
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 110 && BOOST_PP_ITERATION_FINISH_2 >= 110
+#        define BOOST_PP_ITERATION_2 110
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 111 && BOOST_PP_ITERATION_FINISH_2 >= 111
+#        define BOOST_PP_ITERATION_2 111
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 112 && BOOST_PP_ITERATION_FINISH_2 >= 112
+#        define BOOST_PP_ITERATION_2 112
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 113 && BOOST_PP_ITERATION_FINISH_2 >= 113
+#        define BOOST_PP_ITERATION_2 113
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 114 && BOOST_PP_ITERATION_FINISH_2 >= 114
+#        define BOOST_PP_ITERATION_2 114
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 115 && BOOST_PP_ITERATION_FINISH_2 >= 115
+#        define BOOST_PP_ITERATION_2 115
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 116 && BOOST_PP_ITERATION_FINISH_2 >= 116
+#        define BOOST_PP_ITERATION_2 116
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 117 && BOOST_PP_ITERATION_FINISH_2 >= 117
+#        define BOOST_PP_ITERATION_2 117
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 118 && BOOST_PP_ITERATION_FINISH_2 >= 118
+#        define BOOST_PP_ITERATION_2 118
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 119 && BOOST_PP_ITERATION_FINISH_2 >= 119
+#        define BOOST_PP_ITERATION_2 119
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 120 && BOOST_PP_ITERATION_FINISH_2 >= 120
+#        define BOOST_PP_ITERATION_2 120
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 121 && BOOST_PP_ITERATION_FINISH_2 >= 121
+#        define BOOST_PP_ITERATION_2 121
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 122 && BOOST_PP_ITERATION_FINISH_2 >= 122
+#        define BOOST_PP_ITERATION_2 122
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 123 && BOOST_PP_ITERATION_FINISH_2 >= 123
+#        define BOOST_PP_ITERATION_2 123
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 124 && BOOST_PP_ITERATION_FINISH_2 >= 124
+#        define BOOST_PP_ITERATION_2 124
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 125 && BOOST_PP_ITERATION_FINISH_2 >= 125
+#        define BOOST_PP_ITERATION_2 125
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 126 && BOOST_PP_ITERATION_FINISH_2 >= 126
+#        define BOOST_PP_ITERATION_2 126
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 127 && BOOST_PP_ITERATION_FINISH_2 >= 127
+#        define BOOST_PP_ITERATION_2 127
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 128 && BOOST_PP_ITERATION_FINISH_2 >= 128
+#        define BOOST_PP_ITERATION_2 128
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 129 && BOOST_PP_ITERATION_FINISH_2 >= 129
+#        define BOOST_PP_ITERATION_2 129
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 130 && BOOST_PP_ITERATION_FINISH_2 >= 130
+#        define BOOST_PP_ITERATION_2 130
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 131 && BOOST_PP_ITERATION_FINISH_2 >= 131
+#        define BOOST_PP_ITERATION_2 131
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 132 && BOOST_PP_ITERATION_FINISH_2 >= 132
+#        define BOOST_PP_ITERATION_2 132
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 133 && BOOST_PP_ITERATION_FINISH_2 >= 133
+#        define BOOST_PP_ITERATION_2 133
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 134 && BOOST_PP_ITERATION_FINISH_2 >= 134
+#        define BOOST_PP_ITERATION_2 134
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 135 && BOOST_PP_ITERATION_FINISH_2 >= 135
+#        define BOOST_PP_ITERATION_2 135
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 136 && BOOST_PP_ITERATION_FINISH_2 >= 136
+#        define BOOST_PP_ITERATION_2 136
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 137 && BOOST_PP_ITERATION_FINISH_2 >= 137
+#        define BOOST_PP_ITERATION_2 137
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 138 && BOOST_PP_ITERATION_FINISH_2 >= 138
+#        define BOOST_PP_ITERATION_2 138
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 139 && BOOST_PP_ITERATION_FINISH_2 >= 139
+#        define BOOST_PP_ITERATION_2 139
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 140 && BOOST_PP_ITERATION_FINISH_2 >= 140
+#        define BOOST_PP_ITERATION_2 140
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 141 && BOOST_PP_ITERATION_FINISH_2 >= 141
+#        define BOOST_PP_ITERATION_2 141
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 142 && BOOST_PP_ITERATION_FINISH_2 >= 142
+#        define BOOST_PP_ITERATION_2 142
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 143 && BOOST_PP_ITERATION_FINISH_2 >= 143
+#        define BOOST_PP_ITERATION_2 143
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 144 && BOOST_PP_ITERATION_FINISH_2 >= 144
+#        define BOOST_PP_ITERATION_2 144
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 145 && BOOST_PP_ITERATION_FINISH_2 >= 145
+#        define BOOST_PP_ITERATION_2 145
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 146 && BOOST_PP_ITERATION_FINISH_2 >= 146
+#        define BOOST_PP_ITERATION_2 146
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 147 && BOOST_PP_ITERATION_FINISH_2 >= 147
+#        define BOOST_PP_ITERATION_2 147
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 148 && BOOST_PP_ITERATION_FINISH_2 >= 148
+#        define BOOST_PP_ITERATION_2 148
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 149 && BOOST_PP_ITERATION_FINISH_2 >= 149
+#        define BOOST_PP_ITERATION_2 149
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 150 && BOOST_PP_ITERATION_FINISH_2 >= 150
+#        define BOOST_PP_ITERATION_2 150
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 151 && BOOST_PP_ITERATION_FINISH_2 >= 151
+#        define BOOST_PP_ITERATION_2 151
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 152 && BOOST_PP_ITERATION_FINISH_2 >= 152
+#        define BOOST_PP_ITERATION_2 152
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 153 && BOOST_PP_ITERATION_FINISH_2 >= 153
+#        define BOOST_PP_ITERATION_2 153
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 154 && BOOST_PP_ITERATION_FINISH_2 >= 154
+#        define BOOST_PP_ITERATION_2 154
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 155 && BOOST_PP_ITERATION_FINISH_2 >= 155
+#        define BOOST_PP_ITERATION_2 155
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 156 && BOOST_PP_ITERATION_FINISH_2 >= 156
+#        define BOOST_PP_ITERATION_2 156
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 157 && BOOST_PP_ITERATION_FINISH_2 >= 157
+#        define BOOST_PP_ITERATION_2 157
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 158 && BOOST_PP_ITERATION_FINISH_2 >= 158
+#        define BOOST_PP_ITERATION_2 158
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 159 && BOOST_PP_ITERATION_FINISH_2 >= 159
+#        define BOOST_PP_ITERATION_2 159
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 160 && BOOST_PP_ITERATION_FINISH_2 >= 160
+#        define BOOST_PP_ITERATION_2 160
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 161 && BOOST_PP_ITERATION_FINISH_2 >= 161
+#        define BOOST_PP_ITERATION_2 161
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 162 && BOOST_PP_ITERATION_FINISH_2 >= 162
+#        define BOOST_PP_ITERATION_2 162
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 163 && BOOST_PP_ITERATION_FINISH_2 >= 163
+#        define BOOST_PP_ITERATION_2 163
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 164 && BOOST_PP_ITERATION_FINISH_2 >= 164
+#        define BOOST_PP_ITERATION_2 164
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 165 && BOOST_PP_ITERATION_FINISH_2 >= 165
+#        define BOOST_PP_ITERATION_2 165
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 166 && BOOST_PP_ITERATION_FINISH_2 >= 166
+#        define BOOST_PP_ITERATION_2 166
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 167 && BOOST_PP_ITERATION_FINISH_2 >= 167
+#        define BOOST_PP_ITERATION_2 167
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 168 && BOOST_PP_ITERATION_FINISH_2 >= 168
+#        define BOOST_PP_ITERATION_2 168
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 169 && BOOST_PP_ITERATION_FINISH_2 >= 169
+#        define BOOST_PP_ITERATION_2 169
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 170 && BOOST_PP_ITERATION_FINISH_2 >= 170
+#        define BOOST_PP_ITERATION_2 170
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 171 && BOOST_PP_ITERATION_FINISH_2 >= 171
+#        define BOOST_PP_ITERATION_2 171
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 172 && BOOST_PP_ITERATION_FINISH_2 >= 172
+#        define BOOST_PP_ITERATION_2 172
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 173 && BOOST_PP_ITERATION_FINISH_2 >= 173
+#        define BOOST_PP_ITERATION_2 173
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 174 && BOOST_PP_ITERATION_FINISH_2 >= 174
+#        define BOOST_PP_ITERATION_2 174
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 175 && BOOST_PP_ITERATION_FINISH_2 >= 175
+#        define BOOST_PP_ITERATION_2 175
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 176 && BOOST_PP_ITERATION_FINISH_2 >= 176
+#        define BOOST_PP_ITERATION_2 176
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 177 && BOOST_PP_ITERATION_FINISH_2 >= 177
+#        define BOOST_PP_ITERATION_2 177
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 178 && BOOST_PP_ITERATION_FINISH_2 >= 178
+#        define BOOST_PP_ITERATION_2 178
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 179 && BOOST_PP_ITERATION_FINISH_2 >= 179
+#        define BOOST_PP_ITERATION_2 179
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 180 && BOOST_PP_ITERATION_FINISH_2 >= 180
+#        define BOOST_PP_ITERATION_2 180
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 181 && BOOST_PP_ITERATION_FINISH_2 >= 181
+#        define BOOST_PP_ITERATION_2 181
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 182 && BOOST_PP_ITERATION_FINISH_2 >= 182
+#        define BOOST_PP_ITERATION_2 182
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 183 && BOOST_PP_ITERATION_FINISH_2 >= 183
+#        define BOOST_PP_ITERATION_2 183
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 184 && BOOST_PP_ITERATION_FINISH_2 >= 184
+#        define BOOST_PP_ITERATION_2 184
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 185 && BOOST_PP_ITERATION_FINISH_2 >= 185
+#        define BOOST_PP_ITERATION_2 185
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 186 && BOOST_PP_ITERATION_FINISH_2 >= 186
+#        define BOOST_PP_ITERATION_2 186
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 187 && BOOST_PP_ITERATION_FINISH_2 >= 187
+#        define BOOST_PP_ITERATION_2 187
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 188 && BOOST_PP_ITERATION_FINISH_2 >= 188
+#        define BOOST_PP_ITERATION_2 188
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 189 && BOOST_PP_ITERATION_FINISH_2 >= 189
+#        define BOOST_PP_ITERATION_2 189
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 190 && BOOST_PP_ITERATION_FINISH_2 >= 190
+#        define BOOST_PP_ITERATION_2 190
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 191 && BOOST_PP_ITERATION_FINISH_2 >= 191
+#        define BOOST_PP_ITERATION_2 191
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 192 && BOOST_PP_ITERATION_FINISH_2 >= 192
+#        define BOOST_PP_ITERATION_2 192
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 193 && BOOST_PP_ITERATION_FINISH_2 >= 193
+#        define BOOST_PP_ITERATION_2 193
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 194 && BOOST_PP_ITERATION_FINISH_2 >= 194
+#        define BOOST_PP_ITERATION_2 194
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 195 && BOOST_PP_ITERATION_FINISH_2 >= 195
+#        define BOOST_PP_ITERATION_2 195
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 196 && BOOST_PP_ITERATION_FINISH_2 >= 196
+#        define BOOST_PP_ITERATION_2 196
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 197 && BOOST_PP_ITERATION_FINISH_2 >= 197
+#        define BOOST_PP_ITERATION_2 197
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 198 && BOOST_PP_ITERATION_FINISH_2 >= 198
+#        define BOOST_PP_ITERATION_2 198
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 199 && BOOST_PP_ITERATION_FINISH_2 >= 199
+#        define BOOST_PP_ITERATION_2 199
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 200 && BOOST_PP_ITERATION_FINISH_2 >= 200
+#        define BOOST_PP_ITERATION_2 200
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 201 && BOOST_PP_ITERATION_FINISH_2 >= 201
+#        define BOOST_PP_ITERATION_2 201
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 202 && BOOST_PP_ITERATION_FINISH_2 >= 202
+#        define BOOST_PP_ITERATION_2 202
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 203 && BOOST_PP_ITERATION_FINISH_2 >= 203
+#        define BOOST_PP_ITERATION_2 203
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 204 && BOOST_PP_ITERATION_FINISH_2 >= 204
+#        define BOOST_PP_ITERATION_2 204
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 205 && BOOST_PP_ITERATION_FINISH_2 >= 205
+#        define BOOST_PP_ITERATION_2 205
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 206 && BOOST_PP_ITERATION_FINISH_2 >= 206
+#        define BOOST_PP_ITERATION_2 206
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 207 && BOOST_PP_ITERATION_FINISH_2 >= 207
+#        define BOOST_PP_ITERATION_2 207
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 208 && BOOST_PP_ITERATION_FINISH_2 >= 208
+#        define BOOST_PP_ITERATION_2 208
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 209 && BOOST_PP_ITERATION_FINISH_2 >= 209
+#        define BOOST_PP_ITERATION_2 209
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 210 && BOOST_PP_ITERATION_FINISH_2 >= 210
+#        define BOOST_PP_ITERATION_2 210
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 211 && BOOST_PP_ITERATION_FINISH_2 >= 211
+#        define BOOST_PP_ITERATION_2 211
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 212 && BOOST_PP_ITERATION_FINISH_2 >= 212
+#        define BOOST_PP_ITERATION_2 212
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 213 && BOOST_PP_ITERATION_FINISH_2 >= 213
+#        define BOOST_PP_ITERATION_2 213
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 214 && BOOST_PP_ITERATION_FINISH_2 >= 214
+#        define BOOST_PP_ITERATION_2 214
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 215 && BOOST_PP_ITERATION_FINISH_2 >= 215
+#        define BOOST_PP_ITERATION_2 215
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 216 && BOOST_PP_ITERATION_FINISH_2 >= 216
+#        define BOOST_PP_ITERATION_2 216
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 217 && BOOST_PP_ITERATION_FINISH_2 >= 217
+#        define BOOST_PP_ITERATION_2 217
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 218 && BOOST_PP_ITERATION_FINISH_2 >= 218
+#        define BOOST_PP_ITERATION_2 218
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 219 && BOOST_PP_ITERATION_FINISH_2 >= 219
+#        define BOOST_PP_ITERATION_2 219
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 220 && BOOST_PP_ITERATION_FINISH_2 >= 220
+#        define BOOST_PP_ITERATION_2 220
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 221 && BOOST_PP_ITERATION_FINISH_2 >= 221
+#        define BOOST_PP_ITERATION_2 221
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 222 && BOOST_PP_ITERATION_FINISH_2 >= 222
+#        define BOOST_PP_ITERATION_2 222
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 223 && BOOST_PP_ITERATION_FINISH_2 >= 223
+#        define BOOST_PP_ITERATION_2 223
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 224 && BOOST_PP_ITERATION_FINISH_2 >= 224
+#        define BOOST_PP_ITERATION_2 224
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 225 && BOOST_PP_ITERATION_FINISH_2 >= 225
+#        define BOOST_PP_ITERATION_2 225
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 226 && BOOST_PP_ITERATION_FINISH_2 >= 226
+#        define BOOST_PP_ITERATION_2 226
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 227 && BOOST_PP_ITERATION_FINISH_2 >= 227
+#        define BOOST_PP_ITERATION_2 227
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 228 && BOOST_PP_ITERATION_FINISH_2 >= 228
+#        define BOOST_PP_ITERATION_2 228
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 229 && BOOST_PP_ITERATION_FINISH_2 >= 229
+#        define BOOST_PP_ITERATION_2 229
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 230 && BOOST_PP_ITERATION_FINISH_2 >= 230
+#        define BOOST_PP_ITERATION_2 230
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 231 && BOOST_PP_ITERATION_FINISH_2 >= 231
+#        define BOOST_PP_ITERATION_2 231
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 232 && BOOST_PP_ITERATION_FINISH_2 >= 232
+#        define BOOST_PP_ITERATION_2 232
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 233 && BOOST_PP_ITERATION_FINISH_2 >= 233
+#        define BOOST_PP_ITERATION_2 233
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 234 && BOOST_PP_ITERATION_FINISH_2 >= 234
+#        define BOOST_PP_ITERATION_2 234
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 235 && BOOST_PP_ITERATION_FINISH_2 >= 235
+#        define BOOST_PP_ITERATION_2 235
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 236 && BOOST_PP_ITERATION_FINISH_2 >= 236
+#        define BOOST_PP_ITERATION_2 236
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 237 && BOOST_PP_ITERATION_FINISH_2 >= 237
+#        define BOOST_PP_ITERATION_2 237
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 238 && BOOST_PP_ITERATION_FINISH_2 >= 238
+#        define BOOST_PP_ITERATION_2 238
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 239 && BOOST_PP_ITERATION_FINISH_2 >= 239
+#        define BOOST_PP_ITERATION_2 239
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 240 && BOOST_PP_ITERATION_FINISH_2 >= 240
+#        define BOOST_PP_ITERATION_2 240
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 241 && BOOST_PP_ITERATION_FINISH_2 >= 241
+#        define BOOST_PP_ITERATION_2 241
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 242 && BOOST_PP_ITERATION_FINISH_2 >= 242
+#        define BOOST_PP_ITERATION_2 242
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 243 && BOOST_PP_ITERATION_FINISH_2 >= 243
+#        define BOOST_PP_ITERATION_2 243
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 244 && BOOST_PP_ITERATION_FINISH_2 >= 244
+#        define BOOST_PP_ITERATION_2 244
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 245 && BOOST_PP_ITERATION_FINISH_2 >= 245
+#        define BOOST_PP_ITERATION_2 245
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 246 && BOOST_PP_ITERATION_FINISH_2 >= 246
+#        define BOOST_PP_ITERATION_2 246
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 247 && BOOST_PP_ITERATION_FINISH_2 >= 247
+#        define BOOST_PP_ITERATION_2 247
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 248 && BOOST_PP_ITERATION_FINISH_2 >= 248
+#        define BOOST_PP_ITERATION_2 248
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 249 && BOOST_PP_ITERATION_FINISH_2 >= 249
+#        define BOOST_PP_ITERATION_2 249
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 250 && BOOST_PP_ITERATION_FINISH_2 >= 250
+#        define BOOST_PP_ITERATION_2 250
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 251 && BOOST_PP_ITERATION_FINISH_2 >= 251
+#        define BOOST_PP_ITERATION_2 251
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 252 && BOOST_PP_ITERATION_FINISH_2 >= 252
+#        define BOOST_PP_ITERATION_2 252
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 253 && BOOST_PP_ITERATION_FINISH_2 >= 253
+#        define BOOST_PP_ITERATION_2 253
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 254 && BOOST_PP_ITERATION_FINISH_2 >= 254
+#        define BOOST_PP_ITERATION_2 254
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 255 && BOOST_PP_ITERATION_FINISH_2 >= 255
+#        define BOOST_PP_ITERATION_2 255
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+#    if BOOST_PP_ITERATION_START_2 <= 256 && BOOST_PP_ITERATION_FINISH_2 >= 256
+#        define BOOST_PP_ITERATION_2 256
+#        include BOOST_PP_FILENAME_2
+#        undef BOOST_PP_ITERATION_2
+#    endif
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 1
+#
+# undef BOOST_PP_ITERATION_START_2
+# undef BOOST_PP_ITERATION_FINISH_2
+# undef BOOST_PP_FILENAME_2
+#
+# undef BOOST_PP_ITERATION_FLAGS_2
+# undef BOOST_PP_ITERATION_PARAMS_2
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/forward3.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/forward3.hpp
new file mode 100644
index 0000000..e68966f
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/forward3.hpp
@@ -0,0 +1,1338 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# if defined(BOOST_PP_ITERATION_LIMITS)
+#    if !defined(BOOST_PP_FILENAME_3)
+#        error BOOST_PP_ERROR:  depth #3 filename is not defined
+#    endif
+#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)
+#    include <boost/preprocessor/iteration/detail/bounds/lower3.hpp>
+#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)
+#    include <boost/preprocessor/iteration/detail/bounds/upper3.hpp>
+#    define BOOST_PP_ITERATION_FLAGS_3() 0
+#    undef BOOST_PP_ITERATION_LIMITS
+# elif defined(BOOST_PP_ITERATION_PARAMS_3)
+#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_3)
+#    include <boost/preprocessor/iteration/detail/bounds/lower3.hpp>
+#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_3)
+#    include <boost/preprocessor/iteration/detail/bounds/upper3.hpp>
+#    define BOOST_PP_FILENAME_3 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_3)
+#    if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_3) >= 4
+#        define BOOST_PP_ITERATION_FLAGS_3() BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_3)
+#    else
+#        define BOOST_PP_ITERATION_FLAGS_3() 0
+#    endif
+# else
+#    error BOOST_PP_ERROR:  depth #3 iteration boundaries or filename not defined
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 3
+#
+# if (BOOST_PP_ITERATION_START_3) > (BOOST_PP_ITERATION_FINISH_3)
+#    include <boost/preprocessor/iteration/detail/iter/reverse3.hpp>
+# else
+#    if BOOST_PP_ITERATION_START_3 <= 0 && BOOST_PP_ITERATION_FINISH_3 >= 0
+#        define BOOST_PP_ITERATION_3 0
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 1 && BOOST_PP_ITERATION_FINISH_3 >= 1
+#        define BOOST_PP_ITERATION_3 1
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 2 && BOOST_PP_ITERATION_FINISH_3 >= 2
+#        define BOOST_PP_ITERATION_3 2
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 3 && BOOST_PP_ITERATION_FINISH_3 >= 3
+#        define BOOST_PP_ITERATION_3 3
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 4 && BOOST_PP_ITERATION_FINISH_3 >= 4
+#        define BOOST_PP_ITERATION_3 4
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 5 && BOOST_PP_ITERATION_FINISH_3 >= 5
+#        define BOOST_PP_ITERATION_3 5
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 6 && BOOST_PP_ITERATION_FINISH_3 >= 6
+#        define BOOST_PP_ITERATION_3 6
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 7 && BOOST_PP_ITERATION_FINISH_3 >= 7
+#        define BOOST_PP_ITERATION_3 7
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 8 && BOOST_PP_ITERATION_FINISH_3 >= 8
+#        define BOOST_PP_ITERATION_3 8
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 9 && BOOST_PP_ITERATION_FINISH_3 >= 9
+#        define BOOST_PP_ITERATION_3 9
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 10 && BOOST_PP_ITERATION_FINISH_3 >= 10
+#        define BOOST_PP_ITERATION_3 10
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 11 && BOOST_PP_ITERATION_FINISH_3 >= 11
+#        define BOOST_PP_ITERATION_3 11
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 12 && BOOST_PP_ITERATION_FINISH_3 >= 12
+#        define BOOST_PP_ITERATION_3 12
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 13 && BOOST_PP_ITERATION_FINISH_3 >= 13
+#        define BOOST_PP_ITERATION_3 13
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 14 && BOOST_PP_ITERATION_FINISH_3 >= 14
+#        define BOOST_PP_ITERATION_3 14
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 15 && BOOST_PP_ITERATION_FINISH_3 >= 15
+#        define BOOST_PP_ITERATION_3 15
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 16 && BOOST_PP_ITERATION_FINISH_3 >= 16
+#        define BOOST_PP_ITERATION_3 16
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 17 && BOOST_PP_ITERATION_FINISH_3 >= 17
+#        define BOOST_PP_ITERATION_3 17
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 18 && BOOST_PP_ITERATION_FINISH_3 >= 18
+#        define BOOST_PP_ITERATION_3 18
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 19 && BOOST_PP_ITERATION_FINISH_3 >= 19
+#        define BOOST_PP_ITERATION_3 19
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 20 && BOOST_PP_ITERATION_FINISH_3 >= 20
+#        define BOOST_PP_ITERATION_3 20
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 21 && BOOST_PP_ITERATION_FINISH_3 >= 21
+#        define BOOST_PP_ITERATION_3 21
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 22 && BOOST_PP_ITERATION_FINISH_3 >= 22
+#        define BOOST_PP_ITERATION_3 22
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 23 && BOOST_PP_ITERATION_FINISH_3 >= 23
+#        define BOOST_PP_ITERATION_3 23
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 24 && BOOST_PP_ITERATION_FINISH_3 >= 24
+#        define BOOST_PP_ITERATION_3 24
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 25 && BOOST_PP_ITERATION_FINISH_3 >= 25
+#        define BOOST_PP_ITERATION_3 25
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 26 && BOOST_PP_ITERATION_FINISH_3 >= 26
+#        define BOOST_PP_ITERATION_3 26
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 27 && BOOST_PP_ITERATION_FINISH_3 >= 27
+#        define BOOST_PP_ITERATION_3 27
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 28 && BOOST_PP_ITERATION_FINISH_3 >= 28
+#        define BOOST_PP_ITERATION_3 28
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 29 && BOOST_PP_ITERATION_FINISH_3 >= 29
+#        define BOOST_PP_ITERATION_3 29
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 30 && BOOST_PP_ITERATION_FINISH_3 >= 30
+#        define BOOST_PP_ITERATION_3 30
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 31 && BOOST_PP_ITERATION_FINISH_3 >= 31
+#        define BOOST_PP_ITERATION_3 31
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 32 && BOOST_PP_ITERATION_FINISH_3 >= 32
+#        define BOOST_PP_ITERATION_3 32
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 33 && BOOST_PP_ITERATION_FINISH_3 >= 33
+#        define BOOST_PP_ITERATION_3 33
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 34 && BOOST_PP_ITERATION_FINISH_3 >= 34
+#        define BOOST_PP_ITERATION_3 34
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 35 && BOOST_PP_ITERATION_FINISH_3 >= 35
+#        define BOOST_PP_ITERATION_3 35
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 36 && BOOST_PP_ITERATION_FINISH_3 >= 36
+#        define BOOST_PP_ITERATION_3 36
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 37 && BOOST_PP_ITERATION_FINISH_3 >= 37
+#        define BOOST_PP_ITERATION_3 37
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 38 && BOOST_PP_ITERATION_FINISH_3 >= 38
+#        define BOOST_PP_ITERATION_3 38
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 39 && BOOST_PP_ITERATION_FINISH_3 >= 39
+#        define BOOST_PP_ITERATION_3 39
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 40 && BOOST_PP_ITERATION_FINISH_3 >= 40
+#        define BOOST_PP_ITERATION_3 40
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 41 && BOOST_PP_ITERATION_FINISH_3 >= 41
+#        define BOOST_PP_ITERATION_3 41
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 42 && BOOST_PP_ITERATION_FINISH_3 >= 42
+#        define BOOST_PP_ITERATION_3 42
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 43 && BOOST_PP_ITERATION_FINISH_3 >= 43
+#        define BOOST_PP_ITERATION_3 43
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 44 && BOOST_PP_ITERATION_FINISH_3 >= 44
+#        define BOOST_PP_ITERATION_3 44
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 45 && BOOST_PP_ITERATION_FINISH_3 >= 45
+#        define BOOST_PP_ITERATION_3 45
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 46 && BOOST_PP_ITERATION_FINISH_3 >= 46
+#        define BOOST_PP_ITERATION_3 46
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 47 && BOOST_PP_ITERATION_FINISH_3 >= 47
+#        define BOOST_PP_ITERATION_3 47
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 48 && BOOST_PP_ITERATION_FINISH_3 >= 48
+#        define BOOST_PP_ITERATION_3 48
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 49 && BOOST_PP_ITERATION_FINISH_3 >= 49
+#        define BOOST_PP_ITERATION_3 49
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 50 && BOOST_PP_ITERATION_FINISH_3 >= 50
+#        define BOOST_PP_ITERATION_3 50
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 51 && BOOST_PP_ITERATION_FINISH_3 >= 51
+#        define BOOST_PP_ITERATION_3 51
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 52 && BOOST_PP_ITERATION_FINISH_3 >= 52
+#        define BOOST_PP_ITERATION_3 52
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 53 && BOOST_PP_ITERATION_FINISH_3 >= 53
+#        define BOOST_PP_ITERATION_3 53
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 54 && BOOST_PP_ITERATION_FINISH_3 >= 54
+#        define BOOST_PP_ITERATION_3 54
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 55 && BOOST_PP_ITERATION_FINISH_3 >= 55
+#        define BOOST_PP_ITERATION_3 55
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 56 && BOOST_PP_ITERATION_FINISH_3 >= 56
+#        define BOOST_PP_ITERATION_3 56
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 57 && BOOST_PP_ITERATION_FINISH_3 >= 57
+#        define BOOST_PP_ITERATION_3 57
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 58 && BOOST_PP_ITERATION_FINISH_3 >= 58
+#        define BOOST_PP_ITERATION_3 58
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 59 && BOOST_PP_ITERATION_FINISH_3 >= 59
+#        define BOOST_PP_ITERATION_3 59
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 60 && BOOST_PP_ITERATION_FINISH_3 >= 60
+#        define BOOST_PP_ITERATION_3 60
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 61 && BOOST_PP_ITERATION_FINISH_3 >= 61
+#        define BOOST_PP_ITERATION_3 61
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 62 && BOOST_PP_ITERATION_FINISH_3 >= 62
+#        define BOOST_PP_ITERATION_3 62
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 63 && BOOST_PP_ITERATION_FINISH_3 >= 63
+#        define BOOST_PP_ITERATION_3 63
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 64 && BOOST_PP_ITERATION_FINISH_3 >= 64
+#        define BOOST_PP_ITERATION_3 64
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 65 && BOOST_PP_ITERATION_FINISH_3 >= 65
+#        define BOOST_PP_ITERATION_3 65
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 66 && BOOST_PP_ITERATION_FINISH_3 >= 66
+#        define BOOST_PP_ITERATION_3 66
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 67 && BOOST_PP_ITERATION_FINISH_3 >= 67
+#        define BOOST_PP_ITERATION_3 67
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 68 && BOOST_PP_ITERATION_FINISH_3 >= 68
+#        define BOOST_PP_ITERATION_3 68
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 69 && BOOST_PP_ITERATION_FINISH_3 >= 69
+#        define BOOST_PP_ITERATION_3 69
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 70 && BOOST_PP_ITERATION_FINISH_3 >= 70
+#        define BOOST_PP_ITERATION_3 70
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 71 && BOOST_PP_ITERATION_FINISH_3 >= 71
+#        define BOOST_PP_ITERATION_3 71
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 72 && BOOST_PP_ITERATION_FINISH_3 >= 72
+#        define BOOST_PP_ITERATION_3 72
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 73 && BOOST_PP_ITERATION_FINISH_3 >= 73
+#        define BOOST_PP_ITERATION_3 73
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 74 && BOOST_PP_ITERATION_FINISH_3 >= 74
+#        define BOOST_PP_ITERATION_3 74
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 75 && BOOST_PP_ITERATION_FINISH_3 >= 75
+#        define BOOST_PP_ITERATION_3 75
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 76 && BOOST_PP_ITERATION_FINISH_3 >= 76
+#        define BOOST_PP_ITERATION_3 76
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 77 && BOOST_PP_ITERATION_FINISH_3 >= 77
+#        define BOOST_PP_ITERATION_3 77
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 78 && BOOST_PP_ITERATION_FINISH_3 >= 78
+#        define BOOST_PP_ITERATION_3 78
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 79 && BOOST_PP_ITERATION_FINISH_3 >= 79
+#        define BOOST_PP_ITERATION_3 79
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 80 && BOOST_PP_ITERATION_FINISH_3 >= 80
+#        define BOOST_PP_ITERATION_3 80
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 81 && BOOST_PP_ITERATION_FINISH_3 >= 81
+#        define BOOST_PP_ITERATION_3 81
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 82 && BOOST_PP_ITERATION_FINISH_3 >= 82
+#        define BOOST_PP_ITERATION_3 82
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 83 && BOOST_PP_ITERATION_FINISH_3 >= 83
+#        define BOOST_PP_ITERATION_3 83
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 84 && BOOST_PP_ITERATION_FINISH_3 >= 84
+#        define BOOST_PP_ITERATION_3 84
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 85 && BOOST_PP_ITERATION_FINISH_3 >= 85
+#        define BOOST_PP_ITERATION_3 85
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 86 && BOOST_PP_ITERATION_FINISH_3 >= 86
+#        define BOOST_PP_ITERATION_3 86
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 87 && BOOST_PP_ITERATION_FINISH_3 >= 87
+#        define BOOST_PP_ITERATION_3 87
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 88 && BOOST_PP_ITERATION_FINISH_3 >= 88
+#        define BOOST_PP_ITERATION_3 88
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 89 && BOOST_PP_ITERATION_FINISH_3 >= 89
+#        define BOOST_PP_ITERATION_3 89
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 90 && BOOST_PP_ITERATION_FINISH_3 >= 90
+#        define BOOST_PP_ITERATION_3 90
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 91 && BOOST_PP_ITERATION_FINISH_3 >= 91
+#        define BOOST_PP_ITERATION_3 91
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 92 && BOOST_PP_ITERATION_FINISH_3 >= 92
+#        define BOOST_PP_ITERATION_3 92
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 93 && BOOST_PP_ITERATION_FINISH_3 >= 93
+#        define BOOST_PP_ITERATION_3 93
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 94 && BOOST_PP_ITERATION_FINISH_3 >= 94
+#        define BOOST_PP_ITERATION_3 94
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 95 && BOOST_PP_ITERATION_FINISH_3 >= 95
+#        define BOOST_PP_ITERATION_3 95
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 96 && BOOST_PP_ITERATION_FINISH_3 >= 96
+#        define BOOST_PP_ITERATION_3 96
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 97 && BOOST_PP_ITERATION_FINISH_3 >= 97
+#        define BOOST_PP_ITERATION_3 97
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 98 && BOOST_PP_ITERATION_FINISH_3 >= 98
+#        define BOOST_PP_ITERATION_3 98
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 99 && BOOST_PP_ITERATION_FINISH_3 >= 99
+#        define BOOST_PP_ITERATION_3 99
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 100 && BOOST_PP_ITERATION_FINISH_3 >= 100
+#        define BOOST_PP_ITERATION_3 100
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 101 && BOOST_PP_ITERATION_FINISH_3 >= 101
+#        define BOOST_PP_ITERATION_3 101
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 102 && BOOST_PP_ITERATION_FINISH_3 >= 102
+#        define BOOST_PP_ITERATION_3 102
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 103 && BOOST_PP_ITERATION_FINISH_3 >= 103
+#        define BOOST_PP_ITERATION_3 103
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 104 && BOOST_PP_ITERATION_FINISH_3 >= 104
+#        define BOOST_PP_ITERATION_3 104
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 105 && BOOST_PP_ITERATION_FINISH_3 >= 105
+#        define BOOST_PP_ITERATION_3 105
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 106 && BOOST_PP_ITERATION_FINISH_3 >= 106
+#        define BOOST_PP_ITERATION_3 106
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 107 && BOOST_PP_ITERATION_FINISH_3 >= 107
+#        define BOOST_PP_ITERATION_3 107
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 108 && BOOST_PP_ITERATION_FINISH_3 >= 108
+#        define BOOST_PP_ITERATION_3 108
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 109 && BOOST_PP_ITERATION_FINISH_3 >= 109
+#        define BOOST_PP_ITERATION_3 109
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 110 && BOOST_PP_ITERATION_FINISH_3 >= 110
+#        define BOOST_PP_ITERATION_3 110
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 111 && BOOST_PP_ITERATION_FINISH_3 >= 111
+#        define BOOST_PP_ITERATION_3 111
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 112 && BOOST_PP_ITERATION_FINISH_3 >= 112
+#        define BOOST_PP_ITERATION_3 112
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 113 && BOOST_PP_ITERATION_FINISH_3 >= 113
+#        define BOOST_PP_ITERATION_3 113
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 114 && BOOST_PP_ITERATION_FINISH_3 >= 114
+#        define BOOST_PP_ITERATION_3 114
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 115 && BOOST_PP_ITERATION_FINISH_3 >= 115
+#        define BOOST_PP_ITERATION_3 115
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 116 && BOOST_PP_ITERATION_FINISH_3 >= 116
+#        define BOOST_PP_ITERATION_3 116
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 117 && BOOST_PP_ITERATION_FINISH_3 >= 117
+#        define BOOST_PP_ITERATION_3 117
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 118 && BOOST_PP_ITERATION_FINISH_3 >= 118
+#        define BOOST_PP_ITERATION_3 118
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 119 && BOOST_PP_ITERATION_FINISH_3 >= 119
+#        define BOOST_PP_ITERATION_3 119
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 120 && BOOST_PP_ITERATION_FINISH_3 >= 120
+#        define BOOST_PP_ITERATION_3 120
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 121 && BOOST_PP_ITERATION_FINISH_3 >= 121
+#        define BOOST_PP_ITERATION_3 121
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 122 && BOOST_PP_ITERATION_FINISH_3 >= 122
+#        define BOOST_PP_ITERATION_3 122
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 123 && BOOST_PP_ITERATION_FINISH_3 >= 123
+#        define BOOST_PP_ITERATION_3 123
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 124 && BOOST_PP_ITERATION_FINISH_3 >= 124
+#        define BOOST_PP_ITERATION_3 124
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 125 && BOOST_PP_ITERATION_FINISH_3 >= 125
+#        define BOOST_PP_ITERATION_3 125
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 126 && BOOST_PP_ITERATION_FINISH_3 >= 126
+#        define BOOST_PP_ITERATION_3 126
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 127 && BOOST_PP_ITERATION_FINISH_3 >= 127
+#        define BOOST_PP_ITERATION_3 127
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 128 && BOOST_PP_ITERATION_FINISH_3 >= 128
+#        define BOOST_PP_ITERATION_3 128
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 129 && BOOST_PP_ITERATION_FINISH_3 >= 129
+#        define BOOST_PP_ITERATION_3 129
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 130 && BOOST_PP_ITERATION_FINISH_3 >= 130
+#        define BOOST_PP_ITERATION_3 130
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 131 && BOOST_PP_ITERATION_FINISH_3 >= 131
+#        define BOOST_PP_ITERATION_3 131
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 132 && BOOST_PP_ITERATION_FINISH_3 >= 132
+#        define BOOST_PP_ITERATION_3 132
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 133 && BOOST_PP_ITERATION_FINISH_3 >= 133
+#        define BOOST_PP_ITERATION_3 133
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 134 && BOOST_PP_ITERATION_FINISH_3 >= 134
+#        define BOOST_PP_ITERATION_3 134
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 135 && BOOST_PP_ITERATION_FINISH_3 >= 135
+#        define BOOST_PP_ITERATION_3 135
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 136 && BOOST_PP_ITERATION_FINISH_3 >= 136
+#        define BOOST_PP_ITERATION_3 136
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 137 && BOOST_PP_ITERATION_FINISH_3 >= 137
+#        define BOOST_PP_ITERATION_3 137
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 138 && BOOST_PP_ITERATION_FINISH_3 >= 138
+#        define BOOST_PP_ITERATION_3 138
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 139 && BOOST_PP_ITERATION_FINISH_3 >= 139
+#        define BOOST_PP_ITERATION_3 139
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 140 && BOOST_PP_ITERATION_FINISH_3 >= 140
+#        define BOOST_PP_ITERATION_3 140
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 141 && BOOST_PP_ITERATION_FINISH_3 >= 141
+#        define BOOST_PP_ITERATION_3 141
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 142 && BOOST_PP_ITERATION_FINISH_3 >= 142
+#        define BOOST_PP_ITERATION_3 142
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 143 && BOOST_PP_ITERATION_FINISH_3 >= 143
+#        define BOOST_PP_ITERATION_3 143
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 144 && BOOST_PP_ITERATION_FINISH_3 >= 144
+#        define BOOST_PP_ITERATION_3 144
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 145 && BOOST_PP_ITERATION_FINISH_3 >= 145
+#        define BOOST_PP_ITERATION_3 145
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 146 && BOOST_PP_ITERATION_FINISH_3 >= 146
+#        define BOOST_PP_ITERATION_3 146
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 147 && BOOST_PP_ITERATION_FINISH_3 >= 147
+#        define BOOST_PP_ITERATION_3 147
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 148 && BOOST_PP_ITERATION_FINISH_3 >= 148
+#        define BOOST_PP_ITERATION_3 148
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 149 && BOOST_PP_ITERATION_FINISH_3 >= 149
+#        define BOOST_PP_ITERATION_3 149
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 150 && BOOST_PP_ITERATION_FINISH_3 >= 150
+#        define BOOST_PP_ITERATION_3 150
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 151 && BOOST_PP_ITERATION_FINISH_3 >= 151
+#        define BOOST_PP_ITERATION_3 151
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 152 && BOOST_PP_ITERATION_FINISH_3 >= 152
+#        define BOOST_PP_ITERATION_3 152
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 153 && BOOST_PP_ITERATION_FINISH_3 >= 153
+#        define BOOST_PP_ITERATION_3 153
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 154 && BOOST_PP_ITERATION_FINISH_3 >= 154
+#        define BOOST_PP_ITERATION_3 154
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 155 && BOOST_PP_ITERATION_FINISH_3 >= 155
+#        define BOOST_PP_ITERATION_3 155
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 156 && BOOST_PP_ITERATION_FINISH_3 >= 156
+#        define BOOST_PP_ITERATION_3 156
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 157 && BOOST_PP_ITERATION_FINISH_3 >= 157
+#        define BOOST_PP_ITERATION_3 157
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 158 && BOOST_PP_ITERATION_FINISH_3 >= 158
+#        define BOOST_PP_ITERATION_3 158
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 159 && BOOST_PP_ITERATION_FINISH_3 >= 159
+#        define BOOST_PP_ITERATION_3 159
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 160 && BOOST_PP_ITERATION_FINISH_3 >= 160
+#        define BOOST_PP_ITERATION_3 160
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 161 && BOOST_PP_ITERATION_FINISH_3 >= 161
+#        define BOOST_PP_ITERATION_3 161
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 162 && BOOST_PP_ITERATION_FINISH_3 >= 162
+#        define BOOST_PP_ITERATION_3 162
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 163 && BOOST_PP_ITERATION_FINISH_3 >= 163
+#        define BOOST_PP_ITERATION_3 163
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 164 && BOOST_PP_ITERATION_FINISH_3 >= 164
+#        define BOOST_PP_ITERATION_3 164
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 165 && BOOST_PP_ITERATION_FINISH_3 >= 165
+#        define BOOST_PP_ITERATION_3 165
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 166 && BOOST_PP_ITERATION_FINISH_3 >= 166
+#        define BOOST_PP_ITERATION_3 166
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 167 && BOOST_PP_ITERATION_FINISH_3 >= 167
+#        define BOOST_PP_ITERATION_3 167
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 168 && BOOST_PP_ITERATION_FINISH_3 >= 168
+#        define BOOST_PP_ITERATION_3 168
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 169 && BOOST_PP_ITERATION_FINISH_3 >= 169
+#        define BOOST_PP_ITERATION_3 169
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 170 && BOOST_PP_ITERATION_FINISH_3 >= 170
+#        define BOOST_PP_ITERATION_3 170
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 171 && BOOST_PP_ITERATION_FINISH_3 >= 171
+#        define BOOST_PP_ITERATION_3 171
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 172 && BOOST_PP_ITERATION_FINISH_3 >= 172
+#        define BOOST_PP_ITERATION_3 172
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 173 && BOOST_PP_ITERATION_FINISH_3 >= 173
+#        define BOOST_PP_ITERATION_3 173
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 174 && BOOST_PP_ITERATION_FINISH_3 >= 174
+#        define BOOST_PP_ITERATION_3 174
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 175 && BOOST_PP_ITERATION_FINISH_3 >= 175
+#        define BOOST_PP_ITERATION_3 175
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 176 && BOOST_PP_ITERATION_FINISH_3 >= 176
+#        define BOOST_PP_ITERATION_3 176
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 177 && BOOST_PP_ITERATION_FINISH_3 >= 177
+#        define BOOST_PP_ITERATION_3 177
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 178 && BOOST_PP_ITERATION_FINISH_3 >= 178
+#        define BOOST_PP_ITERATION_3 178
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 179 && BOOST_PP_ITERATION_FINISH_3 >= 179
+#        define BOOST_PP_ITERATION_3 179
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 180 && BOOST_PP_ITERATION_FINISH_3 >= 180
+#        define BOOST_PP_ITERATION_3 180
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 181 && BOOST_PP_ITERATION_FINISH_3 >= 181
+#        define BOOST_PP_ITERATION_3 181
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 182 && BOOST_PP_ITERATION_FINISH_3 >= 182
+#        define BOOST_PP_ITERATION_3 182
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 183 && BOOST_PP_ITERATION_FINISH_3 >= 183
+#        define BOOST_PP_ITERATION_3 183
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 184 && BOOST_PP_ITERATION_FINISH_3 >= 184
+#        define BOOST_PP_ITERATION_3 184
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 185 && BOOST_PP_ITERATION_FINISH_3 >= 185
+#        define BOOST_PP_ITERATION_3 185
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 186 && BOOST_PP_ITERATION_FINISH_3 >= 186
+#        define BOOST_PP_ITERATION_3 186
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 187 && BOOST_PP_ITERATION_FINISH_3 >= 187
+#        define BOOST_PP_ITERATION_3 187
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 188 && BOOST_PP_ITERATION_FINISH_3 >= 188
+#        define BOOST_PP_ITERATION_3 188
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 189 && BOOST_PP_ITERATION_FINISH_3 >= 189
+#        define BOOST_PP_ITERATION_3 189
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 190 && BOOST_PP_ITERATION_FINISH_3 >= 190
+#        define BOOST_PP_ITERATION_3 190
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 191 && BOOST_PP_ITERATION_FINISH_3 >= 191
+#        define BOOST_PP_ITERATION_3 191
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 192 && BOOST_PP_ITERATION_FINISH_3 >= 192
+#        define BOOST_PP_ITERATION_3 192
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 193 && BOOST_PP_ITERATION_FINISH_3 >= 193
+#        define BOOST_PP_ITERATION_3 193
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 194 && BOOST_PP_ITERATION_FINISH_3 >= 194
+#        define BOOST_PP_ITERATION_3 194
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 195 && BOOST_PP_ITERATION_FINISH_3 >= 195
+#        define BOOST_PP_ITERATION_3 195
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 196 && BOOST_PP_ITERATION_FINISH_3 >= 196
+#        define BOOST_PP_ITERATION_3 196
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 197 && BOOST_PP_ITERATION_FINISH_3 >= 197
+#        define BOOST_PP_ITERATION_3 197
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 198 && BOOST_PP_ITERATION_FINISH_3 >= 198
+#        define BOOST_PP_ITERATION_3 198
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 199 && BOOST_PP_ITERATION_FINISH_3 >= 199
+#        define BOOST_PP_ITERATION_3 199
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 200 && BOOST_PP_ITERATION_FINISH_3 >= 200
+#        define BOOST_PP_ITERATION_3 200
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 201 && BOOST_PP_ITERATION_FINISH_3 >= 201
+#        define BOOST_PP_ITERATION_3 201
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 202 && BOOST_PP_ITERATION_FINISH_3 >= 202
+#        define BOOST_PP_ITERATION_3 202
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 203 && BOOST_PP_ITERATION_FINISH_3 >= 203
+#        define BOOST_PP_ITERATION_3 203
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 204 && BOOST_PP_ITERATION_FINISH_3 >= 204
+#        define BOOST_PP_ITERATION_3 204
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 205 && BOOST_PP_ITERATION_FINISH_3 >= 205
+#        define BOOST_PP_ITERATION_3 205
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 206 && BOOST_PP_ITERATION_FINISH_3 >= 206
+#        define BOOST_PP_ITERATION_3 206
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 207 && BOOST_PP_ITERATION_FINISH_3 >= 207
+#        define BOOST_PP_ITERATION_3 207
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 208 && BOOST_PP_ITERATION_FINISH_3 >= 208
+#        define BOOST_PP_ITERATION_3 208
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 209 && BOOST_PP_ITERATION_FINISH_3 >= 209
+#        define BOOST_PP_ITERATION_3 209
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 210 && BOOST_PP_ITERATION_FINISH_3 >= 210
+#        define BOOST_PP_ITERATION_3 210
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 211 && BOOST_PP_ITERATION_FINISH_3 >= 211
+#        define BOOST_PP_ITERATION_3 211
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 212 && BOOST_PP_ITERATION_FINISH_3 >= 212
+#        define BOOST_PP_ITERATION_3 212
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 213 && BOOST_PP_ITERATION_FINISH_3 >= 213
+#        define BOOST_PP_ITERATION_3 213
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 214 && BOOST_PP_ITERATION_FINISH_3 >= 214
+#        define BOOST_PP_ITERATION_3 214
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 215 && BOOST_PP_ITERATION_FINISH_3 >= 215
+#        define BOOST_PP_ITERATION_3 215
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 216 && BOOST_PP_ITERATION_FINISH_3 >= 216
+#        define BOOST_PP_ITERATION_3 216
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 217 && BOOST_PP_ITERATION_FINISH_3 >= 217
+#        define BOOST_PP_ITERATION_3 217
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 218 && BOOST_PP_ITERATION_FINISH_3 >= 218
+#        define BOOST_PP_ITERATION_3 218
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 219 && BOOST_PP_ITERATION_FINISH_3 >= 219
+#        define BOOST_PP_ITERATION_3 219
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 220 && BOOST_PP_ITERATION_FINISH_3 >= 220
+#        define BOOST_PP_ITERATION_3 220
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 221 && BOOST_PP_ITERATION_FINISH_3 >= 221
+#        define BOOST_PP_ITERATION_3 221
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 222 && BOOST_PP_ITERATION_FINISH_3 >= 222
+#        define BOOST_PP_ITERATION_3 222
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 223 && BOOST_PP_ITERATION_FINISH_3 >= 223
+#        define BOOST_PP_ITERATION_3 223
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 224 && BOOST_PP_ITERATION_FINISH_3 >= 224
+#        define BOOST_PP_ITERATION_3 224
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 225 && BOOST_PP_ITERATION_FINISH_3 >= 225
+#        define BOOST_PP_ITERATION_3 225
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 226 && BOOST_PP_ITERATION_FINISH_3 >= 226
+#        define BOOST_PP_ITERATION_3 226
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 227 && BOOST_PP_ITERATION_FINISH_3 >= 227
+#        define BOOST_PP_ITERATION_3 227
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 228 && BOOST_PP_ITERATION_FINISH_3 >= 228
+#        define BOOST_PP_ITERATION_3 228
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 229 && BOOST_PP_ITERATION_FINISH_3 >= 229
+#        define BOOST_PP_ITERATION_3 229
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 230 && BOOST_PP_ITERATION_FINISH_3 >= 230
+#        define BOOST_PP_ITERATION_3 230
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 231 && BOOST_PP_ITERATION_FINISH_3 >= 231
+#        define BOOST_PP_ITERATION_3 231
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 232 && BOOST_PP_ITERATION_FINISH_3 >= 232
+#        define BOOST_PP_ITERATION_3 232
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 233 && BOOST_PP_ITERATION_FINISH_3 >= 233
+#        define BOOST_PP_ITERATION_3 233
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 234 && BOOST_PP_ITERATION_FINISH_3 >= 234
+#        define BOOST_PP_ITERATION_3 234
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 235 && BOOST_PP_ITERATION_FINISH_3 >= 235
+#        define BOOST_PP_ITERATION_3 235
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 236 && BOOST_PP_ITERATION_FINISH_3 >= 236
+#        define BOOST_PP_ITERATION_3 236
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 237 && BOOST_PP_ITERATION_FINISH_3 >= 237
+#        define BOOST_PP_ITERATION_3 237
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 238 && BOOST_PP_ITERATION_FINISH_3 >= 238
+#        define BOOST_PP_ITERATION_3 238
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 239 && BOOST_PP_ITERATION_FINISH_3 >= 239
+#        define BOOST_PP_ITERATION_3 239
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 240 && BOOST_PP_ITERATION_FINISH_3 >= 240
+#        define BOOST_PP_ITERATION_3 240
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 241 && BOOST_PP_ITERATION_FINISH_3 >= 241
+#        define BOOST_PP_ITERATION_3 241
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 242 && BOOST_PP_ITERATION_FINISH_3 >= 242
+#        define BOOST_PP_ITERATION_3 242
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 243 && BOOST_PP_ITERATION_FINISH_3 >= 243
+#        define BOOST_PP_ITERATION_3 243
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 244 && BOOST_PP_ITERATION_FINISH_3 >= 244
+#        define BOOST_PP_ITERATION_3 244
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 245 && BOOST_PP_ITERATION_FINISH_3 >= 245
+#        define BOOST_PP_ITERATION_3 245
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 246 && BOOST_PP_ITERATION_FINISH_3 >= 246
+#        define BOOST_PP_ITERATION_3 246
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 247 && BOOST_PP_ITERATION_FINISH_3 >= 247
+#        define BOOST_PP_ITERATION_3 247
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 248 && BOOST_PP_ITERATION_FINISH_3 >= 248
+#        define BOOST_PP_ITERATION_3 248
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 249 && BOOST_PP_ITERATION_FINISH_3 >= 249
+#        define BOOST_PP_ITERATION_3 249
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 250 && BOOST_PP_ITERATION_FINISH_3 >= 250
+#        define BOOST_PP_ITERATION_3 250
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 251 && BOOST_PP_ITERATION_FINISH_3 >= 251
+#        define BOOST_PP_ITERATION_3 251
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 252 && BOOST_PP_ITERATION_FINISH_3 >= 252
+#        define BOOST_PP_ITERATION_3 252
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 253 && BOOST_PP_ITERATION_FINISH_3 >= 253
+#        define BOOST_PP_ITERATION_3 253
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 254 && BOOST_PP_ITERATION_FINISH_3 >= 254
+#        define BOOST_PP_ITERATION_3 254
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 255 && BOOST_PP_ITERATION_FINISH_3 >= 255
+#        define BOOST_PP_ITERATION_3 255
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+#    if BOOST_PP_ITERATION_START_3 <= 256 && BOOST_PP_ITERATION_FINISH_3 >= 256
+#        define BOOST_PP_ITERATION_3 256
+#        include BOOST_PP_FILENAME_3
+#        undef BOOST_PP_ITERATION_3
+#    endif
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 2
+#
+# undef BOOST_PP_ITERATION_START_3
+# undef BOOST_PP_ITERATION_FINISH_3
+# undef BOOST_PP_FILENAME_3
+#
+# undef BOOST_PP_ITERATION_FLAGS_3
+# undef BOOST_PP_ITERATION_PARAMS_3
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/forward4.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/forward4.hpp
new file mode 100644
index 0000000..1b4f588
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/forward4.hpp
@@ -0,0 +1,1338 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# if defined(BOOST_PP_ITERATION_LIMITS)
+#    if !defined(BOOST_PP_FILENAME_4)
+#        error BOOST_PP_ERROR:  depth #4 filename is not defined
+#    endif
+#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)
+#    include <boost/preprocessor/iteration/detail/bounds/lower4.hpp>
+#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)
+#    include <boost/preprocessor/iteration/detail/bounds/upper4.hpp>
+#    define BOOST_PP_ITERATION_FLAGS_4() 0
+#    undef BOOST_PP_ITERATION_LIMITS
+# elif defined(BOOST_PP_ITERATION_PARAMS_4)
+#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_4)
+#    include <boost/preprocessor/iteration/detail/bounds/lower4.hpp>
+#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_4)
+#    include <boost/preprocessor/iteration/detail/bounds/upper4.hpp>
+#    define BOOST_PP_FILENAME_4 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_4)
+#    if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_4) >= 4
+#        define BOOST_PP_ITERATION_FLAGS_4() BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_4)
+#    else
+#        define BOOST_PP_ITERATION_FLAGS_4() 0
+#    endif
+# else
+#    error BOOST_PP_ERROR:  depth #4 iteration boundaries or filename not defined
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 4
+#
+# if (BOOST_PP_ITERATION_START_4) > (BOOST_PP_ITERATION_FINISH_4)
+#    include <boost/preprocessor/iteration/detail/iter/reverse4.hpp>
+# else
+#    if BOOST_PP_ITERATION_START_4 <= 0 && BOOST_PP_ITERATION_FINISH_4 >= 0
+#        define BOOST_PP_ITERATION_4 0
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 1 && BOOST_PP_ITERATION_FINISH_4 >= 1
+#        define BOOST_PP_ITERATION_4 1
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 2 && BOOST_PP_ITERATION_FINISH_4 >= 2
+#        define BOOST_PP_ITERATION_4 2
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 3 && BOOST_PP_ITERATION_FINISH_4 >= 3
+#        define BOOST_PP_ITERATION_4 3
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 4 && BOOST_PP_ITERATION_FINISH_4 >= 4
+#        define BOOST_PP_ITERATION_4 4
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 5 && BOOST_PP_ITERATION_FINISH_4 >= 5
+#        define BOOST_PP_ITERATION_4 5
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 6 && BOOST_PP_ITERATION_FINISH_4 >= 6
+#        define BOOST_PP_ITERATION_4 6
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 7 && BOOST_PP_ITERATION_FINISH_4 >= 7
+#        define BOOST_PP_ITERATION_4 7
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 8 && BOOST_PP_ITERATION_FINISH_4 >= 8
+#        define BOOST_PP_ITERATION_4 8
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 9 && BOOST_PP_ITERATION_FINISH_4 >= 9
+#        define BOOST_PP_ITERATION_4 9
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 10 && BOOST_PP_ITERATION_FINISH_4 >= 10
+#        define BOOST_PP_ITERATION_4 10
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 11 && BOOST_PP_ITERATION_FINISH_4 >= 11
+#        define BOOST_PP_ITERATION_4 11
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 12 && BOOST_PP_ITERATION_FINISH_4 >= 12
+#        define BOOST_PP_ITERATION_4 12
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 13 && BOOST_PP_ITERATION_FINISH_4 >= 13
+#        define BOOST_PP_ITERATION_4 13
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 14 && BOOST_PP_ITERATION_FINISH_4 >= 14
+#        define BOOST_PP_ITERATION_4 14
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 15 && BOOST_PP_ITERATION_FINISH_4 >= 15
+#        define BOOST_PP_ITERATION_4 15
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 16 && BOOST_PP_ITERATION_FINISH_4 >= 16
+#        define BOOST_PP_ITERATION_4 16
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 17 && BOOST_PP_ITERATION_FINISH_4 >= 17
+#        define BOOST_PP_ITERATION_4 17
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 18 && BOOST_PP_ITERATION_FINISH_4 >= 18
+#        define BOOST_PP_ITERATION_4 18
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 19 && BOOST_PP_ITERATION_FINISH_4 >= 19
+#        define BOOST_PP_ITERATION_4 19
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 20 && BOOST_PP_ITERATION_FINISH_4 >= 20
+#        define BOOST_PP_ITERATION_4 20
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 21 && BOOST_PP_ITERATION_FINISH_4 >= 21
+#        define BOOST_PP_ITERATION_4 21
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 22 && BOOST_PP_ITERATION_FINISH_4 >= 22
+#        define BOOST_PP_ITERATION_4 22
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 23 && BOOST_PP_ITERATION_FINISH_4 >= 23
+#        define BOOST_PP_ITERATION_4 23
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 24 && BOOST_PP_ITERATION_FINISH_4 >= 24
+#        define BOOST_PP_ITERATION_4 24
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 25 && BOOST_PP_ITERATION_FINISH_4 >= 25
+#        define BOOST_PP_ITERATION_4 25
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 26 && BOOST_PP_ITERATION_FINISH_4 >= 26
+#        define BOOST_PP_ITERATION_4 26
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 27 && BOOST_PP_ITERATION_FINISH_4 >= 27
+#        define BOOST_PP_ITERATION_4 27
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 28 && BOOST_PP_ITERATION_FINISH_4 >= 28
+#        define BOOST_PP_ITERATION_4 28
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 29 && BOOST_PP_ITERATION_FINISH_4 >= 29
+#        define BOOST_PP_ITERATION_4 29
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 30 && BOOST_PP_ITERATION_FINISH_4 >= 30
+#        define BOOST_PP_ITERATION_4 30
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 31 && BOOST_PP_ITERATION_FINISH_4 >= 31
+#        define BOOST_PP_ITERATION_4 31
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 32 && BOOST_PP_ITERATION_FINISH_4 >= 32
+#        define BOOST_PP_ITERATION_4 32
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 33 && BOOST_PP_ITERATION_FINISH_4 >= 33
+#        define BOOST_PP_ITERATION_4 33
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 34 && BOOST_PP_ITERATION_FINISH_4 >= 34
+#        define BOOST_PP_ITERATION_4 34
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 35 && BOOST_PP_ITERATION_FINISH_4 >= 35
+#        define BOOST_PP_ITERATION_4 35
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 36 && BOOST_PP_ITERATION_FINISH_4 >= 36
+#        define BOOST_PP_ITERATION_4 36
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 37 && BOOST_PP_ITERATION_FINISH_4 >= 37
+#        define BOOST_PP_ITERATION_4 37
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 38 && BOOST_PP_ITERATION_FINISH_4 >= 38
+#        define BOOST_PP_ITERATION_4 38
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 39 && BOOST_PP_ITERATION_FINISH_4 >= 39
+#        define BOOST_PP_ITERATION_4 39
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 40 && BOOST_PP_ITERATION_FINISH_4 >= 40
+#        define BOOST_PP_ITERATION_4 40
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 41 && BOOST_PP_ITERATION_FINISH_4 >= 41
+#        define BOOST_PP_ITERATION_4 41
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 42 && BOOST_PP_ITERATION_FINISH_4 >= 42
+#        define BOOST_PP_ITERATION_4 42
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 43 && BOOST_PP_ITERATION_FINISH_4 >= 43
+#        define BOOST_PP_ITERATION_4 43
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 44 && BOOST_PP_ITERATION_FINISH_4 >= 44
+#        define BOOST_PP_ITERATION_4 44
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 45 && BOOST_PP_ITERATION_FINISH_4 >= 45
+#        define BOOST_PP_ITERATION_4 45
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 46 && BOOST_PP_ITERATION_FINISH_4 >= 46
+#        define BOOST_PP_ITERATION_4 46
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 47 && BOOST_PP_ITERATION_FINISH_4 >= 47
+#        define BOOST_PP_ITERATION_4 47
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 48 && BOOST_PP_ITERATION_FINISH_4 >= 48
+#        define BOOST_PP_ITERATION_4 48
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 49 && BOOST_PP_ITERATION_FINISH_4 >= 49
+#        define BOOST_PP_ITERATION_4 49
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 50 && BOOST_PP_ITERATION_FINISH_4 >= 50
+#        define BOOST_PP_ITERATION_4 50
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 51 && BOOST_PP_ITERATION_FINISH_4 >= 51
+#        define BOOST_PP_ITERATION_4 51
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 52 && BOOST_PP_ITERATION_FINISH_4 >= 52
+#        define BOOST_PP_ITERATION_4 52
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 53 && BOOST_PP_ITERATION_FINISH_4 >= 53
+#        define BOOST_PP_ITERATION_4 53
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 54 && BOOST_PP_ITERATION_FINISH_4 >= 54
+#        define BOOST_PP_ITERATION_4 54
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 55 && BOOST_PP_ITERATION_FINISH_4 >= 55
+#        define BOOST_PP_ITERATION_4 55
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 56 && BOOST_PP_ITERATION_FINISH_4 >= 56
+#        define BOOST_PP_ITERATION_4 56
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 57 && BOOST_PP_ITERATION_FINISH_4 >= 57
+#        define BOOST_PP_ITERATION_4 57
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 58 && BOOST_PP_ITERATION_FINISH_4 >= 58
+#        define BOOST_PP_ITERATION_4 58
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 59 && BOOST_PP_ITERATION_FINISH_4 >= 59
+#        define BOOST_PP_ITERATION_4 59
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 60 && BOOST_PP_ITERATION_FINISH_4 >= 60
+#        define BOOST_PP_ITERATION_4 60
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 61 && BOOST_PP_ITERATION_FINISH_4 >= 61
+#        define BOOST_PP_ITERATION_4 61
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 62 && BOOST_PP_ITERATION_FINISH_4 >= 62
+#        define BOOST_PP_ITERATION_4 62
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 63 && BOOST_PP_ITERATION_FINISH_4 >= 63
+#        define BOOST_PP_ITERATION_4 63
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 64 && BOOST_PP_ITERATION_FINISH_4 >= 64
+#        define BOOST_PP_ITERATION_4 64
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 65 && BOOST_PP_ITERATION_FINISH_4 >= 65
+#        define BOOST_PP_ITERATION_4 65
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 66 && BOOST_PP_ITERATION_FINISH_4 >= 66
+#        define BOOST_PP_ITERATION_4 66
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 67 && BOOST_PP_ITERATION_FINISH_4 >= 67
+#        define BOOST_PP_ITERATION_4 67
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 68 && BOOST_PP_ITERATION_FINISH_4 >= 68
+#        define BOOST_PP_ITERATION_4 68
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 69 && BOOST_PP_ITERATION_FINISH_4 >= 69
+#        define BOOST_PP_ITERATION_4 69
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 70 && BOOST_PP_ITERATION_FINISH_4 >= 70
+#        define BOOST_PP_ITERATION_4 70
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 71 && BOOST_PP_ITERATION_FINISH_4 >= 71
+#        define BOOST_PP_ITERATION_4 71
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 72 && BOOST_PP_ITERATION_FINISH_4 >= 72
+#        define BOOST_PP_ITERATION_4 72
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 73 && BOOST_PP_ITERATION_FINISH_4 >= 73
+#        define BOOST_PP_ITERATION_4 73
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 74 && BOOST_PP_ITERATION_FINISH_4 >= 74
+#        define BOOST_PP_ITERATION_4 74
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 75 && BOOST_PP_ITERATION_FINISH_4 >= 75
+#        define BOOST_PP_ITERATION_4 75
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 76 && BOOST_PP_ITERATION_FINISH_4 >= 76
+#        define BOOST_PP_ITERATION_4 76
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 77 && BOOST_PP_ITERATION_FINISH_4 >= 77
+#        define BOOST_PP_ITERATION_4 77
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 78 && BOOST_PP_ITERATION_FINISH_4 >= 78
+#        define BOOST_PP_ITERATION_4 78
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 79 && BOOST_PP_ITERATION_FINISH_4 >= 79
+#        define BOOST_PP_ITERATION_4 79
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 80 && BOOST_PP_ITERATION_FINISH_4 >= 80
+#        define BOOST_PP_ITERATION_4 80
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 81 && BOOST_PP_ITERATION_FINISH_4 >= 81
+#        define BOOST_PP_ITERATION_4 81
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 82 && BOOST_PP_ITERATION_FINISH_4 >= 82
+#        define BOOST_PP_ITERATION_4 82
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 83 && BOOST_PP_ITERATION_FINISH_4 >= 83
+#        define BOOST_PP_ITERATION_4 83
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 84 && BOOST_PP_ITERATION_FINISH_4 >= 84
+#        define BOOST_PP_ITERATION_4 84
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 85 && BOOST_PP_ITERATION_FINISH_4 >= 85
+#        define BOOST_PP_ITERATION_4 85
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 86 && BOOST_PP_ITERATION_FINISH_4 >= 86
+#        define BOOST_PP_ITERATION_4 86
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 87 && BOOST_PP_ITERATION_FINISH_4 >= 87
+#        define BOOST_PP_ITERATION_4 87
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 88 && BOOST_PP_ITERATION_FINISH_4 >= 88
+#        define BOOST_PP_ITERATION_4 88
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 89 && BOOST_PP_ITERATION_FINISH_4 >= 89
+#        define BOOST_PP_ITERATION_4 89
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 90 && BOOST_PP_ITERATION_FINISH_4 >= 90
+#        define BOOST_PP_ITERATION_4 90
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 91 && BOOST_PP_ITERATION_FINISH_4 >= 91
+#        define BOOST_PP_ITERATION_4 91
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 92 && BOOST_PP_ITERATION_FINISH_4 >= 92
+#        define BOOST_PP_ITERATION_4 92
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 93 && BOOST_PP_ITERATION_FINISH_4 >= 93
+#        define BOOST_PP_ITERATION_4 93
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 94 && BOOST_PP_ITERATION_FINISH_4 >= 94
+#        define BOOST_PP_ITERATION_4 94
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 95 && BOOST_PP_ITERATION_FINISH_4 >= 95
+#        define BOOST_PP_ITERATION_4 95
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 96 && BOOST_PP_ITERATION_FINISH_4 >= 96
+#        define BOOST_PP_ITERATION_4 96
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 97 && BOOST_PP_ITERATION_FINISH_4 >= 97
+#        define BOOST_PP_ITERATION_4 97
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 98 && BOOST_PP_ITERATION_FINISH_4 >= 98
+#        define BOOST_PP_ITERATION_4 98
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 99 && BOOST_PP_ITERATION_FINISH_4 >= 99
+#        define BOOST_PP_ITERATION_4 99
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 100 && BOOST_PP_ITERATION_FINISH_4 >= 100
+#        define BOOST_PP_ITERATION_4 100
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 101 && BOOST_PP_ITERATION_FINISH_4 >= 101
+#        define BOOST_PP_ITERATION_4 101
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 102 && BOOST_PP_ITERATION_FINISH_4 >= 102
+#        define BOOST_PP_ITERATION_4 102
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 103 && BOOST_PP_ITERATION_FINISH_4 >= 103
+#        define BOOST_PP_ITERATION_4 103
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 104 && BOOST_PP_ITERATION_FINISH_4 >= 104
+#        define BOOST_PP_ITERATION_4 104
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 105 && BOOST_PP_ITERATION_FINISH_4 >= 105
+#        define BOOST_PP_ITERATION_4 105
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 106 && BOOST_PP_ITERATION_FINISH_4 >= 106
+#        define BOOST_PP_ITERATION_4 106
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 107 && BOOST_PP_ITERATION_FINISH_4 >= 107
+#        define BOOST_PP_ITERATION_4 107
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 108 && BOOST_PP_ITERATION_FINISH_4 >= 108
+#        define BOOST_PP_ITERATION_4 108
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 109 && BOOST_PP_ITERATION_FINISH_4 >= 109
+#        define BOOST_PP_ITERATION_4 109
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 110 && BOOST_PP_ITERATION_FINISH_4 >= 110
+#        define BOOST_PP_ITERATION_4 110
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 111 && BOOST_PP_ITERATION_FINISH_4 >= 111
+#        define BOOST_PP_ITERATION_4 111
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 112 && BOOST_PP_ITERATION_FINISH_4 >= 112
+#        define BOOST_PP_ITERATION_4 112
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 113 && BOOST_PP_ITERATION_FINISH_4 >= 113
+#        define BOOST_PP_ITERATION_4 113
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 114 && BOOST_PP_ITERATION_FINISH_4 >= 114
+#        define BOOST_PP_ITERATION_4 114
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 115 && BOOST_PP_ITERATION_FINISH_4 >= 115
+#        define BOOST_PP_ITERATION_4 115
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 116 && BOOST_PP_ITERATION_FINISH_4 >= 116
+#        define BOOST_PP_ITERATION_4 116
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 117 && BOOST_PP_ITERATION_FINISH_4 >= 117
+#        define BOOST_PP_ITERATION_4 117
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 118 && BOOST_PP_ITERATION_FINISH_4 >= 118
+#        define BOOST_PP_ITERATION_4 118
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 119 && BOOST_PP_ITERATION_FINISH_4 >= 119
+#        define BOOST_PP_ITERATION_4 119
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 120 && BOOST_PP_ITERATION_FINISH_4 >= 120
+#        define BOOST_PP_ITERATION_4 120
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 121 && BOOST_PP_ITERATION_FINISH_4 >= 121
+#        define BOOST_PP_ITERATION_4 121
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 122 && BOOST_PP_ITERATION_FINISH_4 >= 122
+#        define BOOST_PP_ITERATION_4 122
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 123 && BOOST_PP_ITERATION_FINISH_4 >= 123
+#        define BOOST_PP_ITERATION_4 123
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 124 && BOOST_PP_ITERATION_FINISH_4 >= 124
+#        define BOOST_PP_ITERATION_4 124
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 125 && BOOST_PP_ITERATION_FINISH_4 >= 125
+#        define BOOST_PP_ITERATION_4 125
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 126 && BOOST_PP_ITERATION_FINISH_4 >= 126
+#        define BOOST_PP_ITERATION_4 126
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 127 && BOOST_PP_ITERATION_FINISH_4 >= 127
+#        define BOOST_PP_ITERATION_4 127
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 128 && BOOST_PP_ITERATION_FINISH_4 >= 128
+#        define BOOST_PP_ITERATION_4 128
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 129 && BOOST_PP_ITERATION_FINISH_4 >= 129
+#        define BOOST_PP_ITERATION_4 129
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 130 && BOOST_PP_ITERATION_FINISH_4 >= 130
+#        define BOOST_PP_ITERATION_4 130
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 131 && BOOST_PP_ITERATION_FINISH_4 >= 131
+#        define BOOST_PP_ITERATION_4 131
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 132 && BOOST_PP_ITERATION_FINISH_4 >= 132
+#        define BOOST_PP_ITERATION_4 132
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 133 && BOOST_PP_ITERATION_FINISH_4 >= 133
+#        define BOOST_PP_ITERATION_4 133
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 134 && BOOST_PP_ITERATION_FINISH_4 >= 134
+#        define BOOST_PP_ITERATION_4 134
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 135 && BOOST_PP_ITERATION_FINISH_4 >= 135
+#        define BOOST_PP_ITERATION_4 135
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 136 && BOOST_PP_ITERATION_FINISH_4 >= 136
+#        define BOOST_PP_ITERATION_4 136
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 137 && BOOST_PP_ITERATION_FINISH_4 >= 137
+#        define BOOST_PP_ITERATION_4 137
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 138 && BOOST_PP_ITERATION_FINISH_4 >= 138
+#        define BOOST_PP_ITERATION_4 138
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 139 && BOOST_PP_ITERATION_FINISH_4 >= 139
+#        define BOOST_PP_ITERATION_4 139
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 140 && BOOST_PP_ITERATION_FINISH_4 >= 140
+#        define BOOST_PP_ITERATION_4 140
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 141 && BOOST_PP_ITERATION_FINISH_4 >= 141
+#        define BOOST_PP_ITERATION_4 141
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 142 && BOOST_PP_ITERATION_FINISH_4 >= 142
+#        define BOOST_PP_ITERATION_4 142
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 143 && BOOST_PP_ITERATION_FINISH_4 >= 143
+#        define BOOST_PP_ITERATION_4 143
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 144 && BOOST_PP_ITERATION_FINISH_4 >= 144
+#        define BOOST_PP_ITERATION_4 144
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 145 && BOOST_PP_ITERATION_FINISH_4 >= 145
+#        define BOOST_PP_ITERATION_4 145
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 146 && BOOST_PP_ITERATION_FINISH_4 >= 146
+#        define BOOST_PP_ITERATION_4 146
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 147 && BOOST_PP_ITERATION_FINISH_4 >= 147
+#        define BOOST_PP_ITERATION_4 147
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 148 && BOOST_PP_ITERATION_FINISH_4 >= 148
+#        define BOOST_PP_ITERATION_4 148
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 149 && BOOST_PP_ITERATION_FINISH_4 >= 149
+#        define BOOST_PP_ITERATION_4 149
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 150 && BOOST_PP_ITERATION_FINISH_4 >= 150
+#        define BOOST_PP_ITERATION_4 150
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 151 && BOOST_PP_ITERATION_FINISH_4 >= 151
+#        define BOOST_PP_ITERATION_4 151
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 152 && BOOST_PP_ITERATION_FINISH_4 >= 152
+#        define BOOST_PP_ITERATION_4 152
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 153 && BOOST_PP_ITERATION_FINISH_4 >= 153
+#        define BOOST_PP_ITERATION_4 153
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 154 && BOOST_PP_ITERATION_FINISH_4 >= 154
+#        define BOOST_PP_ITERATION_4 154
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 155 && BOOST_PP_ITERATION_FINISH_4 >= 155
+#        define BOOST_PP_ITERATION_4 155
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 156 && BOOST_PP_ITERATION_FINISH_4 >= 156
+#        define BOOST_PP_ITERATION_4 156
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 157 && BOOST_PP_ITERATION_FINISH_4 >= 157
+#        define BOOST_PP_ITERATION_4 157
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 158 && BOOST_PP_ITERATION_FINISH_4 >= 158
+#        define BOOST_PP_ITERATION_4 158
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 159 && BOOST_PP_ITERATION_FINISH_4 >= 159
+#        define BOOST_PP_ITERATION_4 159
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 160 && BOOST_PP_ITERATION_FINISH_4 >= 160
+#        define BOOST_PP_ITERATION_4 160
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 161 && BOOST_PP_ITERATION_FINISH_4 >= 161
+#        define BOOST_PP_ITERATION_4 161
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 162 && BOOST_PP_ITERATION_FINISH_4 >= 162
+#        define BOOST_PP_ITERATION_4 162
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 163 && BOOST_PP_ITERATION_FINISH_4 >= 163
+#        define BOOST_PP_ITERATION_4 163
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 164 && BOOST_PP_ITERATION_FINISH_4 >= 164
+#        define BOOST_PP_ITERATION_4 164
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 165 && BOOST_PP_ITERATION_FINISH_4 >= 165
+#        define BOOST_PP_ITERATION_4 165
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 166 && BOOST_PP_ITERATION_FINISH_4 >= 166
+#        define BOOST_PP_ITERATION_4 166
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 167 && BOOST_PP_ITERATION_FINISH_4 >= 167
+#        define BOOST_PP_ITERATION_4 167
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 168 && BOOST_PP_ITERATION_FINISH_4 >= 168
+#        define BOOST_PP_ITERATION_4 168
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 169 && BOOST_PP_ITERATION_FINISH_4 >= 169
+#        define BOOST_PP_ITERATION_4 169
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 170 && BOOST_PP_ITERATION_FINISH_4 >= 170
+#        define BOOST_PP_ITERATION_4 170
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 171 && BOOST_PP_ITERATION_FINISH_4 >= 171
+#        define BOOST_PP_ITERATION_4 171
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 172 && BOOST_PP_ITERATION_FINISH_4 >= 172
+#        define BOOST_PP_ITERATION_4 172
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 173 && BOOST_PP_ITERATION_FINISH_4 >= 173
+#        define BOOST_PP_ITERATION_4 173
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 174 && BOOST_PP_ITERATION_FINISH_4 >= 174
+#        define BOOST_PP_ITERATION_4 174
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 175 && BOOST_PP_ITERATION_FINISH_4 >= 175
+#        define BOOST_PP_ITERATION_4 175
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 176 && BOOST_PP_ITERATION_FINISH_4 >= 176
+#        define BOOST_PP_ITERATION_4 176
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 177 && BOOST_PP_ITERATION_FINISH_4 >= 177
+#        define BOOST_PP_ITERATION_4 177
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 178 && BOOST_PP_ITERATION_FINISH_4 >= 178
+#        define BOOST_PP_ITERATION_4 178
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 179 && BOOST_PP_ITERATION_FINISH_4 >= 179
+#        define BOOST_PP_ITERATION_4 179
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 180 && BOOST_PP_ITERATION_FINISH_4 >= 180
+#        define BOOST_PP_ITERATION_4 180
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 181 && BOOST_PP_ITERATION_FINISH_4 >= 181
+#        define BOOST_PP_ITERATION_4 181
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 182 && BOOST_PP_ITERATION_FINISH_4 >= 182
+#        define BOOST_PP_ITERATION_4 182
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 183 && BOOST_PP_ITERATION_FINISH_4 >= 183
+#        define BOOST_PP_ITERATION_4 183
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 184 && BOOST_PP_ITERATION_FINISH_4 >= 184
+#        define BOOST_PP_ITERATION_4 184
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 185 && BOOST_PP_ITERATION_FINISH_4 >= 185
+#        define BOOST_PP_ITERATION_4 185
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 186 && BOOST_PP_ITERATION_FINISH_4 >= 186
+#        define BOOST_PP_ITERATION_4 186
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 187 && BOOST_PP_ITERATION_FINISH_4 >= 187
+#        define BOOST_PP_ITERATION_4 187
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 188 && BOOST_PP_ITERATION_FINISH_4 >= 188
+#        define BOOST_PP_ITERATION_4 188
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 189 && BOOST_PP_ITERATION_FINISH_4 >= 189
+#        define BOOST_PP_ITERATION_4 189
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 190 && BOOST_PP_ITERATION_FINISH_4 >= 190
+#        define BOOST_PP_ITERATION_4 190
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 191 && BOOST_PP_ITERATION_FINISH_4 >= 191
+#        define BOOST_PP_ITERATION_4 191
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 192 && BOOST_PP_ITERATION_FINISH_4 >= 192
+#        define BOOST_PP_ITERATION_4 192
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 193 && BOOST_PP_ITERATION_FINISH_4 >= 193
+#        define BOOST_PP_ITERATION_4 193
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 194 && BOOST_PP_ITERATION_FINISH_4 >= 194
+#        define BOOST_PP_ITERATION_4 194
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 195 && BOOST_PP_ITERATION_FINISH_4 >= 195
+#        define BOOST_PP_ITERATION_4 195
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 196 && BOOST_PP_ITERATION_FINISH_4 >= 196
+#        define BOOST_PP_ITERATION_4 196
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 197 && BOOST_PP_ITERATION_FINISH_4 >= 197
+#        define BOOST_PP_ITERATION_4 197
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 198 && BOOST_PP_ITERATION_FINISH_4 >= 198
+#        define BOOST_PP_ITERATION_4 198
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 199 && BOOST_PP_ITERATION_FINISH_4 >= 199
+#        define BOOST_PP_ITERATION_4 199
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 200 && BOOST_PP_ITERATION_FINISH_4 >= 200
+#        define BOOST_PP_ITERATION_4 200
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 201 && BOOST_PP_ITERATION_FINISH_4 >= 201
+#        define BOOST_PP_ITERATION_4 201
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 202 && BOOST_PP_ITERATION_FINISH_4 >= 202
+#        define BOOST_PP_ITERATION_4 202
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 203 && BOOST_PP_ITERATION_FINISH_4 >= 203
+#        define BOOST_PP_ITERATION_4 203
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 204 && BOOST_PP_ITERATION_FINISH_4 >= 204
+#        define BOOST_PP_ITERATION_4 204
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 205 && BOOST_PP_ITERATION_FINISH_4 >= 205
+#        define BOOST_PP_ITERATION_4 205
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 206 && BOOST_PP_ITERATION_FINISH_4 >= 206
+#        define BOOST_PP_ITERATION_4 206
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 207 && BOOST_PP_ITERATION_FINISH_4 >= 207
+#        define BOOST_PP_ITERATION_4 207
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 208 && BOOST_PP_ITERATION_FINISH_4 >= 208
+#        define BOOST_PP_ITERATION_4 208
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 209 && BOOST_PP_ITERATION_FINISH_4 >= 209
+#        define BOOST_PP_ITERATION_4 209
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 210 && BOOST_PP_ITERATION_FINISH_4 >= 210
+#        define BOOST_PP_ITERATION_4 210
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 211 && BOOST_PP_ITERATION_FINISH_4 >= 211
+#        define BOOST_PP_ITERATION_4 211
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 212 && BOOST_PP_ITERATION_FINISH_4 >= 212
+#        define BOOST_PP_ITERATION_4 212
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 213 && BOOST_PP_ITERATION_FINISH_4 >= 213
+#        define BOOST_PP_ITERATION_4 213
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 214 && BOOST_PP_ITERATION_FINISH_4 >= 214
+#        define BOOST_PP_ITERATION_4 214
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 215 && BOOST_PP_ITERATION_FINISH_4 >= 215
+#        define BOOST_PP_ITERATION_4 215
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 216 && BOOST_PP_ITERATION_FINISH_4 >= 216
+#        define BOOST_PP_ITERATION_4 216
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 217 && BOOST_PP_ITERATION_FINISH_4 >= 217
+#        define BOOST_PP_ITERATION_4 217
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 218 && BOOST_PP_ITERATION_FINISH_4 >= 218
+#        define BOOST_PP_ITERATION_4 218
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 219 && BOOST_PP_ITERATION_FINISH_4 >= 219
+#        define BOOST_PP_ITERATION_4 219
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 220 && BOOST_PP_ITERATION_FINISH_4 >= 220
+#        define BOOST_PP_ITERATION_4 220
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 221 && BOOST_PP_ITERATION_FINISH_4 >= 221
+#        define BOOST_PP_ITERATION_4 221
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 222 && BOOST_PP_ITERATION_FINISH_4 >= 222
+#        define BOOST_PP_ITERATION_4 222
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 223 && BOOST_PP_ITERATION_FINISH_4 >= 223
+#        define BOOST_PP_ITERATION_4 223
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 224 && BOOST_PP_ITERATION_FINISH_4 >= 224
+#        define BOOST_PP_ITERATION_4 224
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 225 && BOOST_PP_ITERATION_FINISH_4 >= 225
+#        define BOOST_PP_ITERATION_4 225
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 226 && BOOST_PP_ITERATION_FINISH_4 >= 226
+#        define BOOST_PP_ITERATION_4 226
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 227 && BOOST_PP_ITERATION_FINISH_4 >= 227
+#        define BOOST_PP_ITERATION_4 227
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 228 && BOOST_PP_ITERATION_FINISH_4 >= 228
+#        define BOOST_PP_ITERATION_4 228
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 229 && BOOST_PP_ITERATION_FINISH_4 >= 229
+#        define BOOST_PP_ITERATION_4 229
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 230 && BOOST_PP_ITERATION_FINISH_4 >= 230
+#        define BOOST_PP_ITERATION_4 230
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 231 && BOOST_PP_ITERATION_FINISH_4 >= 231
+#        define BOOST_PP_ITERATION_4 231
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 232 && BOOST_PP_ITERATION_FINISH_4 >= 232
+#        define BOOST_PP_ITERATION_4 232
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 233 && BOOST_PP_ITERATION_FINISH_4 >= 233
+#        define BOOST_PP_ITERATION_4 233
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 234 && BOOST_PP_ITERATION_FINISH_4 >= 234
+#        define BOOST_PP_ITERATION_4 234
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 235 && BOOST_PP_ITERATION_FINISH_4 >= 235
+#        define BOOST_PP_ITERATION_4 235
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 236 && BOOST_PP_ITERATION_FINISH_4 >= 236
+#        define BOOST_PP_ITERATION_4 236
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 237 && BOOST_PP_ITERATION_FINISH_4 >= 237
+#        define BOOST_PP_ITERATION_4 237
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 238 && BOOST_PP_ITERATION_FINISH_4 >= 238
+#        define BOOST_PP_ITERATION_4 238
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 239 && BOOST_PP_ITERATION_FINISH_4 >= 239
+#        define BOOST_PP_ITERATION_4 239
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 240 && BOOST_PP_ITERATION_FINISH_4 >= 240
+#        define BOOST_PP_ITERATION_4 240
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 241 && BOOST_PP_ITERATION_FINISH_4 >= 241
+#        define BOOST_PP_ITERATION_4 241
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 242 && BOOST_PP_ITERATION_FINISH_4 >= 242
+#        define BOOST_PP_ITERATION_4 242
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 243 && BOOST_PP_ITERATION_FINISH_4 >= 243
+#        define BOOST_PP_ITERATION_4 243
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 244 && BOOST_PP_ITERATION_FINISH_4 >= 244
+#        define BOOST_PP_ITERATION_4 244
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 245 && BOOST_PP_ITERATION_FINISH_4 >= 245
+#        define BOOST_PP_ITERATION_4 245
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 246 && BOOST_PP_ITERATION_FINISH_4 >= 246
+#        define BOOST_PP_ITERATION_4 246
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 247 && BOOST_PP_ITERATION_FINISH_4 >= 247
+#        define BOOST_PP_ITERATION_4 247
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 248 && BOOST_PP_ITERATION_FINISH_4 >= 248
+#        define BOOST_PP_ITERATION_4 248
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 249 && BOOST_PP_ITERATION_FINISH_4 >= 249
+#        define BOOST_PP_ITERATION_4 249
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 250 && BOOST_PP_ITERATION_FINISH_4 >= 250
+#        define BOOST_PP_ITERATION_4 250
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 251 && BOOST_PP_ITERATION_FINISH_4 >= 251
+#        define BOOST_PP_ITERATION_4 251
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 252 && BOOST_PP_ITERATION_FINISH_4 >= 252
+#        define BOOST_PP_ITERATION_4 252
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 253 && BOOST_PP_ITERATION_FINISH_4 >= 253
+#        define BOOST_PP_ITERATION_4 253
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 254 && BOOST_PP_ITERATION_FINISH_4 >= 254
+#        define BOOST_PP_ITERATION_4 254
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 255 && BOOST_PP_ITERATION_FINISH_4 >= 255
+#        define BOOST_PP_ITERATION_4 255
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+#    if BOOST_PP_ITERATION_START_4 <= 256 && BOOST_PP_ITERATION_FINISH_4 >= 256
+#        define BOOST_PP_ITERATION_4 256
+#        include BOOST_PP_FILENAME_4
+#        undef BOOST_PP_ITERATION_4
+#    endif
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 3
+#
+# undef BOOST_PP_ITERATION_START_4
+# undef BOOST_PP_ITERATION_FINISH_4
+# undef BOOST_PP_FILENAME_4
+#
+# undef BOOST_PP_ITERATION_FLAGS_4
+# undef BOOST_PP_ITERATION_PARAMS_4
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/forward5.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/forward5.hpp
new file mode 100644
index 0000000..7617607
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/forward5.hpp
@@ -0,0 +1,1338 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# if defined(BOOST_PP_ITERATION_LIMITS)
+#    if !defined(BOOST_PP_FILENAME_5)
+#        error BOOST_PP_ERROR:  depth #5 filename is not defined
+#    endif
+#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_ITERATION_LIMITS)
+#    include <boost/preprocessor/iteration/detail/bounds/lower5.hpp>
+#    define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_ITERATION_LIMITS)
+#    include <boost/preprocessor/iteration/detail/bounds/upper5.hpp>
+#    define BOOST_PP_ITERATION_FLAGS_5() 0
+#    undef BOOST_PP_ITERATION_LIMITS
+# elif defined(BOOST_PP_ITERATION_PARAMS_5)
+#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(0, BOOST_PP_ITERATION_PARAMS_5)
+#    include <boost/preprocessor/iteration/detail/bounds/lower5.hpp>
+#    define BOOST_PP_VALUE BOOST_PP_ARRAY_ELEM(1, BOOST_PP_ITERATION_PARAMS_5)
+#    include <boost/preprocessor/iteration/detail/bounds/upper5.hpp>
+#    define BOOST_PP_FILENAME_5 BOOST_PP_ARRAY_ELEM(2, BOOST_PP_ITERATION_PARAMS_5)
+#    if BOOST_PP_ARRAY_SIZE(BOOST_PP_ITERATION_PARAMS_5) >= 4
+#        define BOOST_PP_ITERATION_FLAGS_5() BOOST_PP_ARRAY_ELEM(3, BOOST_PP_ITERATION_PARAMS_5)
+#    else
+#        define BOOST_PP_ITERATION_FLAGS_5() 0
+#    endif
+# else
+#    error BOOST_PP_ERROR:  depth #5 iteration boundaries or filename not defined
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 5
+#
+# if (BOOST_PP_ITERATION_START_5) > (BOOST_PP_ITERATION_FINISH_5)
+#    include <boost/preprocessor/iteration/detail/iter/reverse5.hpp>
+# else
+#    if BOOST_PP_ITERATION_START_5 <= 0 && BOOST_PP_ITERATION_FINISH_5 >= 0
+#        define BOOST_PP_ITERATION_5 0
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 1 && BOOST_PP_ITERATION_FINISH_5 >= 1
+#        define BOOST_PP_ITERATION_5 1
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 2 && BOOST_PP_ITERATION_FINISH_5 >= 2
+#        define BOOST_PP_ITERATION_5 2
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 3 && BOOST_PP_ITERATION_FINISH_5 >= 3
+#        define BOOST_PP_ITERATION_5 3
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 4 && BOOST_PP_ITERATION_FINISH_5 >= 4
+#        define BOOST_PP_ITERATION_5 4
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 5 && BOOST_PP_ITERATION_FINISH_5 >= 5
+#        define BOOST_PP_ITERATION_5 5
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 6 && BOOST_PP_ITERATION_FINISH_5 >= 6
+#        define BOOST_PP_ITERATION_5 6
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 7 && BOOST_PP_ITERATION_FINISH_5 >= 7
+#        define BOOST_PP_ITERATION_5 7
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 8 && BOOST_PP_ITERATION_FINISH_5 >= 8
+#        define BOOST_PP_ITERATION_5 8
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 9 && BOOST_PP_ITERATION_FINISH_5 >= 9
+#        define BOOST_PP_ITERATION_5 9
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 10 && BOOST_PP_ITERATION_FINISH_5 >= 10
+#        define BOOST_PP_ITERATION_5 10
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 11 && BOOST_PP_ITERATION_FINISH_5 >= 11
+#        define BOOST_PP_ITERATION_5 11
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 12 && BOOST_PP_ITERATION_FINISH_5 >= 12
+#        define BOOST_PP_ITERATION_5 12
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 13 && BOOST_PP_ITERATION_FINISH_5 >= 13
+#        define BOOST_PP_ITERATION_5 13
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 14 && BOOST_PP_ITERATION_FINISH_5 >= 14
+#        define BOOST_PP_ITERATION_5 14
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 15 && BOOST_PP_ITERATION_FINISH_5 >= 15
+#        define BOOST_PP_ITERATION_5 15
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 16 && BOOST_PP_ITERATION_FINISH_5 >= 16
+#        define BOOST_PP_ITERATION_5 16
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 17 && BOOST_PP_ITERATION_FINISH_5 >= 17
+#        define BOOST_PP_ITERATION_5 17
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 18 && BOOST_PP_ITERATION_FINISH_5 >= 18
+#        define BOOST_PP_ITERATION_5 18
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 19 && BOOST_PP_ITERATION_FINISH_5 >= 19
+#        define BOOST_PP_ITERATION_5 19
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 20 && BOOST_PP_ITERATION_FINISH_5 >= 20
+#        define BOOST_PP_ITERATION_5 20
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 21 && BOOST_PP_ITERATION_FINISH_5 >= 21
+#        define BOOST_PP_ITERATION_5 21
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 22 && BOOST_PP_ITERATION_FINISH_5 >= 22
+#        define BOOST_PP_ITERATION_5 22
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 23 && BOOST_PP_ITERATION_FINISH_5 >= 23
+#        define BOOST_PP_ITERATION_5 23
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 24 && BOOST_PP_ITERATION_FINISH_5 >= 24
+#        define BOOST_PP_ITERATION_5 24
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 25 && BOOST_PP_ITERATION_FINISH_5 >= 25
+#        define BOOST_PP_ITERATION_5 25
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 26 && BOOST_PP_ITERATION_FINISH_5 >= 26
+#        define BOOST_PP_ITERATION_5 26
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 27 && BOOST_PP_ITERATION_FINISH_5 >= 27
+#        define BOOST_PP_ITERATION_5 27
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 28 && BOOST_PP_ITERATION_FINISH_5 >= 28
+#        define BOOST_PP_ITERATION_5 28
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 29 && BOOST_PP_ITERATION_FINISH_5 >= 29
+#        define BOOST_PP_ITERATION_5 29
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 30 && BOOST_PP_ITERATION_FINISH_5 >= 30
+#        define BOOST_PP_ITERATION_5 30
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 31 && BOOST_PP_ITERATION_FINISH_5 >= 31
+#        define BOOST_PP_ITERATION_5 31
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 32 && BOOST_PP_ITERATION_FINISH_5 >= 32
+#        define BOOST_PP_ITERATION_5 32
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 33 && BOOST_PP_ITERATION_FINISH_5 >= 33
+#        define BOOST_PP_ITERATION_5 33
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 34 && BOOST_PP_ITERATION_FINISH_5 >= 34
+#        define BOOST_PP_ITERATION_5 34
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 35 && BOOST_PP_ITERATION_FINISH_5 >= 35
+#        define BOOST_PP_ITERATION_5 35
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 36 && BOOST_PP_ITERATION_FINISH_5 >= 36
+#        define BOOST_PP_ITERATION_5 36
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 37 && BOOST_PP_ITERATION_FINISH_5 >= 37
+#        define BOOST_PP_ITERATION_5 37
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 38 && BOOST_PP_ITERATION_FINISH_5 >= 38
+#        define BOOST_PP_ITERATION_5 38
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 39 && BOOST_PP_ITERATION_FINISH_5 >= 39
+#        define BOOST_PP_ITERATION_5 39
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 40 && BOOST_PP_ITERATION_FINISH_5 >= 40
+#        define BOOST_PP_ITERATION_5 40
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 41 && BOOST_PP_ITERATION_FINISH_5 >= 41
+#        define BOOST_PP_ITERATION_5 41
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 42 && BOOST_PP_ITERATION_FINISH_5 >= 42
+#        define BOOST_PP_ITERATION_5 42
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 43 && BOOST_PP_ITERATION_FINISH_5 >= 43
+#        define BOOST_PP_ITERATION_5 43
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 44 && BOOST_PP_ITERATION_FINISH_5 >= 44
+#        define BOOST_PP_ITERATION_5 44
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 45 && BOOST_PP_ITERATION_FINISH_5 >= 45
+#        define BOOST_PP_ITERATION_5 45
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 46 && BOOST_PP_ITERATION_FINISH_5 >= 46
+#        define BOOST_PP_ITERATION_5 46
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 47 && BOOST_PP_ITERATION_FINISH_5 >= 47
+#        define BOOST_PP_ITERATION_5 47
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 48 && BOOST_PP_ITERATION_FINISH_5 >= 48
+#        define BOOST_PP_ITERATION_5 48
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 49 && BOOST_PP_ITERATION_FINISH_5 >= 49
+#        define BOOST_PP_ITERATION_5 49
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 50 && BOOST_PP_ITERATION_FINISH_5 >= 50
+#        define BOOST_PP_ITERATION_5 50
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 51 && BOOST_PP_ITERATION_FINISH_5 >= 51
+#        define BOOST_PP_ITERATION_5 51
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 52 && BOOST_PP_ITERATION_FINISH_5 >= 52
+#        define BOOST_PP_ITERATION_5 52
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 53 && BOOST_PP_ITERATION_FINISH_5 >= 53
+#        define BOOST_PP_ITERATION_5 53
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 54 && BOOST_PP_ITERATION_FINISH_5 >= 54
+#        define BOOST_PP_ITERATION_5 54
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 55 && BOOST_PP_ITERATION_FINISH_5 >= 55
+#        define BOOST_PP_ITERATION_5 55
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 56 && BOOST_PP_ITERATION_FINISH_5 >= 56
+#        define BOOST_PP_ITERATION_5 56
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 57 && BOOST_PP_ITERATION_FINISH_5 >= 57
+#        define BOOST_PP_ITERATION_5 57
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 58 && BOOST_PP_ITERATION_FINISH_5 >= 58
+#        define BOOST_PP_ITERATION_5 58
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 59 && BOOST_PP_ITERATION_FINISH_5 >= 59
+#        define BOOST_PP_ITERATION_5 59
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 60 && BOOST_PP_ITERATION_FINISH_5 >= 60
+#        define BOOST_PP_ITERATION_5 60
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 61 && BOOST_PP_ITERATION_FINISH_5 >= 61
+#        define BOOST_PP_ITERATION_5 61
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 62 && BOOST_PP_ITERATION_FINISH_5 >= 62
+#        define BOOST_PP_ITERATION_5 62
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 63 && BOOST_PP_ITERATION_FINISH_5 >= 63
+#        define BOOST_PP_ITERATION_5 63
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 64 && BOOST_PP_ITERATION_FINISH_5 >= 64
+#        define BOOST_PP_ITERATION_5 64
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 65 && BOOST_PP_ITERATION_FINISH_5 >= 65
+#        define BOOST_PP_ITERATION_5 65
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 66 && BOOST_PP_ITERATION_FINISH_5 >= 66
+#        define BOOST_PP_ITERATION_5 66
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 67 && BOOST_PP_ITERATION_FINISH_5 >= 67
+#        define BOOST_PP_ITERATION_5 67
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 68 && BOOST_PP_ITERATION_FINISH_5 >= 68
+#        define BOOST_PP_ITERATION_5 68
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 69 && BOOST_PP_ITERATION_FINISH_5 >= 69
+#        define BOOST_PP_ITERATION_5 69
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 70 && BOOST_PP_ITERATION_FINISH_5 >= 70
+#        define BOOST_PP_ITERATION_5 70
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 71 && BOOST_PP_ITERATION_FINISH_5 >= 71
+#        define BOOST_PP_ITERATION_5 71
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 72 && BOOST_PP_ITERATION_FINISH_5 >= 72
+#        define BOOST_PP_ITERATION_5 72
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 73 && BOOST_PP_ITERATION_FINISH_5 >= 73
+#        define BOOST_PP_ITERATION_5 73
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 74 && BOOST_PP_ITERATION_FINISH_5 >= 74
+#        define BOOST_PP_ITERATION_5 74
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 75 && BOOST_PP_ITERATION_FINISH_5 >= 75
+#        define BOOST_PP_ITERATION_5 75
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 76 && BOOST_PP_ITERATION_FINISH_5 >= 76
+#        define BOOST_PP_ITERATION_5 76
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 77 && BOOST_PP_ITERATION_FINISH_5 >= 77
+#        define BOOST_PP_ITERATION_5 77
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 78 && BOOST_PP_ITERATION_FINISH_5 >= 78
+#        define BOOST_PP_ITERATION_5 78
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 79 && BOOST_PP_ITERATION_FINISH_5 >= 79
+#        define BOOST_PP_ITERATION_5 79
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 80 && BOOST_PP_ITERATION_FINISH_5 >= 80
+#        define BOOST_PP_ITERATION_5 80
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 81 && BOOST_PP_ITERATION_FINISH_5 >= 81
+#        define BOOST_PP_ITERATION_5 81
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 82 && BOOST_PP_ITERATION_FINISH_5 >= 82
+#        define BOOST_PP_ITERATION_5 82
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 83 && BOOST_PP_ITERATION_FINISH_5 >= 83
+#        define BOOST_PP_ITERATION_5 83
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 84 && BOOST_PP_ITERATION_FINISH_5 >= 84
+#        define BOOST_PP_ITERATION_5 84
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 85 && BOOST_PP_ITERATION_FINISH_5 >= 85
+#        define BOOST_PP_ITERATION_5 85
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 86 && BOOST_PP_ITERATION_FINISH_5 >= 86
+#        define BOOST_PP_ITERATION_5 86
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 87 && BOOST_PP_ITERATION_FINISH_5 >= 87
+#        define BOOST_PP_ITERATION_5 87
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 88 && BOOST_PP_ITERATION_FINISH_5 >= 88
+#        define BOOST_PP_ITERATION_5 88
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 89 && BOOST_PP_ITERATION_FINISH_5 >= 89
+#        define BOOST_PP_ITERATION_5 89
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 90 && BOOST_PP_ITERATION_FINISH_5 >= 90
+#        define BOOST_PP_ITERATION_5 90
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 91 && BOOST_PP_ITERATION_FINISH_5 >= 91
+#        define BOOST_PP_ITERATION_5 91
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 92 && BOOST_PP_ITERATION_FINISH_5 >= 92
+#        define BOOST_PP_ITERATION_5 92
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 93 && BOOST_PP_ITERATION_FINISH_5 >= 93
+#        define BOOST_PP_ITERATION_5 93
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 94 && BOOST_PP_ITERATION_FINISH_5 >= 94
+#        define BOOST_PP_ITERATION_5 94
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 95 && BOOST_PP_ITERATION_FINISH_5 >= 95
+#        define BOOST_PP_ITERATION_5 95
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 96 && BOOST_PP_ITERATION_FINISH_5 >= 96
+#        define BOOST_PP_ITERATION_5 96
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 97 && BOOST_PP_ITERATION_FINISH_5 >= 97
+#        define BOOST_PP_ITERATION_5 97
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 98 && BOOST_PP_ITERATION_FINISH_5 >= 98
+#        define BOOST_PP_ITERATION_5 98
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 99 && BOOST_PP_ITERATION_FINISH_5 >= 99
+#        define BOOST_PP_ITERATION_5 99
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 100 && BOOST_PP_ITERATION_FINISH_5 >= 100
+#        define BOOST_PP_ITERATION_5 100
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 101 && BOOST_PP_ITERATION_FINISH_5 >= 101
+#        define BOOST_PP_ITERATION_5 101
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 102 && BOOST_PP_ITERATION_FINISH_5 >= 102
+#        define BOOST_PP_ITERATION_5 102
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 103 && BOOST_PP_ITERATION_FINISH_5 >= 103
+#        define BOOST_PP_ITERATION_5 103
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 104 && BOOST_PP_ITERATION_FINISH_5 >= 104
+#        define BOOST_PP_ITERATION_5 104
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 105 && BOOST_PP_ITERATION_FINISH_5 >= 105
+#        define BOOST_PP_ITERATION_5 105
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 106 && BOOST_PP_ITERATION_FINISH_5 >= 106
+#        define BOOST_PP_ITERATION_5 106
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 107 && BOOST_PP_ITERATION_FINISH_5 >= 107
+#        define BOOST_PP_ITERATION_5 107
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 108 && BOOST_PP_ITERATION_FINISH_5 >= 108
+#        define BOOST_PP_ITERATION_5 108
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 109 && BOOST_PP_ITERATION_FINISH_5 >= 109
+#        define BOOST_PP_ITERATION_5 109
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 110 && BOOST_PP_ITERATION_FINISH_5 >= 110
+#        define BOOST_PP_ITERATION_5 110
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 111 && BOOST_PP_ITERATION_FINISH_5 >= 111
+#        define BOOST_PP_ITERATION_5 111
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 112 && BOOST_PP_ITERATION_FINISH_5 >= 112
+#        define BOOST_PP_ITERATION_5 112
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 113 && BOOST_PP_ITERATION_FINISH_5 >= 113
+#        define BOOST_PP_ITERATION_5 113
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 114 && BOOST_PP_ITERATION_FINISH_5 >= 114
+#        define BOOST_PP_ITERATION_5 114
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 115 && BOOST_PP_ITERATION_FINISH_5 >= 115
+#        define BOOST_PP_ITERATION_5 115
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 116 && BOOST_PP_ITERATION_FINISH_5 >= 116
+#        define BOOST_PP_ITERATION_5 116
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 117 && BOOST_PP_ITERATION_FINISH_5 >= 117
+#        define BOOST_PP_ITERATION_5 117
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 118 && BOOST_PP_ITERATION_FINISH_5 >= 118
+#        define BOOST_PP_ITERATION_5 118
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 119 && BOOST_PP_ITERATION_FINISH_5 >= 119
+#        define BOOST_PP_ITERATION_5 119
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 120 && BOOST_PP_ITERATION_FINISH_5 >= 120
+#        define BOOST_PP_ITERATION_5 120
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 121 && BOOST_PP_ITERATION_FINISH_5 >= 121
+#        define BOOST_PP_ITERATION_5 121
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 122 && BOOST_PP_ITERATION_FINISH_5 >= 122
+#        define BOOST_PP_ITERATION_5 122
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 123 && BOOST_PP_ITERATION_FINISH_5 >= 123
+#        define BOOST_PP_ITERATION_5 123
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 124 && BOOST_PP_ITERATION_FINISH_5 >= 124
+#        define BOOST_PP_ITERATION_5 124
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 125 && BOOST_PP_ITERATION_FINISH_5 >= 125
+#        define BOOST_PP_ITERATION_5 125
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 126 && BOOST_PP_ITERATION_FINISH_5 >= 126
+#        define BOOST_PP_ITERATION_5 126
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 127 && BOOST_PP_ITERATION_FINISH_5 >= 127
+#        define BOOST_PP_ITERATION_5 127
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 128 && BOOST_PP_ITERATION_FINISH_5 >= 128
+#        define BOOST_PP_ITERATION_5 128
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 129 && BOOST_PP_ITERATION_FINISH_5 >= 129
+#        define BOOST_PP_ITERATION_5 129
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 130 && BOOST_PP_ITERATION_FINISH_5 >= 130
+#        define BOOST_PP_ITERATION_5 130
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 131 && BOOST_PP_ITERATION_FINISH_5 >= 131
+#        define BOOST_PP_ITERATION_5 131
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 132 && BOOST_PP_ITERATION_FINISH_5 >= 132
+#        define BOOST_PP_ITERATION_5 132
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 133 && BOOST_PP_ITERATION_FINISH_5 >= 133
+#        define BOOST_PP_ITERATION_5 133
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 134 && BOOST_PP_ITERATION_FINISH_5 >= 134
+#        define BOOST_PP_ITERATION_5 134
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 135 && BOOST_PP_ITERATION_FINISH_5 >= 135
+#        define BOOST_PP_ITERATION_5 135
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 136 && BOOST_PP_ITERATION_FINISH_5 >= 136
+#        define BOOST_PP_ITERATION_5 136
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 137 && BOOST_PP_ITERATION_FINISH_5 >= 137
+#        define BOOST_PP_ITERATION_5 137
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 138 && BOOST_PP_ITERATION_FINISH_5 >= 138
+#        define BOOST_PP_ITERATION_5 138
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 139 && BOOST_PP_ITERATION_FINISH_5 >= 139
+#        define BOOST_PP_ITERATION_5 139
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 140 && BOOST_PP_ITERATION_FINISH_5 >= 140
+#        define BOOST_PP_ITERATION_5 140
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 141 && BOOST_PP_ITERATION_FINISH_5 >= 141
+#        define BOOST_PP_ITERATION_5 141
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 142 && BOOST_PP_ITERATION_FINISH_5 >= 142
+#        define BOOST_PP_ITERATION_5 142
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 143 && BOOST_PP_ITERATION_FINISH_5 >= 143
+#        define BOOST_PP_ITERATION_5 143
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 144 && BOOST_PP_ITERATION_FINISH_5 >= 144
+#        define BOOST_PP_ITERATION_5 144
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 145 && BOOST_PP_ITERATION_FINISH_5 >= 145
+#        define BOOST_PP_ITERATION_5 145
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 146 && BOOST_PP_ITERATION_FINISH_5 >= 146
+#        define BOOST_PP_ITERATION_5 146
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 147 && BOOST_PP_ITERATION_FINISH_5 >= 147
+#        define BOOST_PP_ITERATION_5 147
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 148 && BOOST_PP_ITERATION_FINISH_5 >= 148
+#        define BOOST_PP_ITERATION_5 148
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 149 && BOOST_PP_ITERATION_FINISH_5 >= 149
+#        define BOOST_PP_ITERATION_5 149
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 150 && BOOST_PP_ITERATION_FINISH_5 >= 150
+#        define BOOST_PP_ITERATION_5 150
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 151 && BOOST_PP_ITERATION_FINISH_5 >= 151
+#        define BOOST_PP_ITERATION_5 151
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 152 && BOOST_PP_ITERATION_FINISH_5 >= 152
+#        define BOOST_PP_ITERATION_5 152
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 153 && BOOST_PP_ITERATION_FINISH_5 >= 153
+#        define BOOST_PP_ITERATION_5 153
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 154 && BOOST_PP_ITERATION_FINISH_5 >= 154
+#        define BOOST_PP_ITERATION_5 154
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 155 && BOOST_PP_ITERATION_FINISH_5 >= 155
+#        define BOOST_PP_ITERATION_5 155
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 156 && BOOST_PP_ITERATION_FINISH_5 >= 156
+#        define BOOST_PP_ITERATION_5 156
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 157 && BOOST_PP_ITERATION_FINISH_5 >= 157
+#        define BOOST_PP_ITERATION_5 157
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 158 && BOOST_PP_ITERATION_FINISH_5 >= 158
+#        define BOOST_PP_ITERATION_5 158
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 159 && BOOST_PP_ITERATION_FINISH_5 >= 159
+#        define BOOST_PP_ITERATION_5 159
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 160 && BOOST_PP_ITERATION_FINISH_5 >= 160
+#        define BOOST_PP_ITERATION_5 160
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 161 && BOOST_PP_ITERATION_FINISH_5 >= 161
+#        define BOOST_PP_ITERATION_5 161
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 162 && BOOST_PP_ITERATION_FINISH_5 >= 162
+#        define BOOST_PP_ITERATION_5 162
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 163 && BOOST_PP_ITERATION_FINISH_5 >= 163
+#        define BOOST_PP_ITERATION_5 163
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 164 && BOOST_PP_ITERATION_FINISH_5 >= 164
+#        define BOOST_PP_ITERATION_5 164
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 165 && BOOST_PP_ITERATION_FINISH_5 >= 165
+#        define BOOST_PP_ITERATION_5 165
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 166 && BOOST_PP_ITERATION_FINISH_5 >= 166
+#        define BOOST_PP_ITERATION_5 166
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 167 && BOOST_PP_ITERATION_FINISH_5 >= 167
+#        define BOOST_PP_ITERATION_5 167
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 168 && BOOST_PP_ITERATION_FINISH_5 >= 168
+#        define BOOST_PP_ITERATION_5 168
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 169 && BOOST_PP_ITERATION_FINISH_5 >= 169
+#        define BOOST_PP_ITERATION_5 169
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 170 && BOOST_PP_ITERATION_FINISH_5 >= 170
+#        define BOOST_PP_ITERATION_5 170
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 171 && BOOST_PP_ITERATION_FINISH_5 >= 171
+#        define BOOST_PP_ITERATION_5 171
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 172 && BOOST_PP_ITERATION_FINISH_5 >= 172
+#        define BOOST_PP_ITERATION_5 172
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 173 && BOOST_PP_ITERATION_FINISH_5 >= 173
+#        define BOOST_PP_ITERATION_5 173
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 174 && BOOST_PP_ITERATION_FINISH_5 >= 174
+#        define BOOST_PP_ITERATION_5 174
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 175 && BOOST_PP_ITERATION_FINISH_5 >= 175
+#        define BOOST_PP_ITERATION_5 175
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 176 && BOOST_PP_ITERATION_FINISH_5 >= 176
+#        define BOOST_PP_ITERATION_5 176
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 177 && BOOST_PP_ITERATION_FINISH_5 >= 177
+#        define BOOST_PP_ITERATION_5 177
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 178 && BOOST_PP_ITERATION_FINISH_5 >= 178
+#        define BOOST_PP_ITERATION_5 178
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 179 && BOOST_PP_ITERATION_FINISH_5 >= 179
+#        define BOOST_PP_ITERATION_5 179
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 180 && BOOST_PP_ITERATION_FINISH_5 >= 180
+#        define BOOST_PP_ITERATION_5 180
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 181 && BOOST_PP_ITERATION_FINISH_5 >= 181
+#        define BOOST_PP_ITERATION_5 181
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 182 && BOOST_PP_ITERATION_FINISH_5 >= 182
+#        define BOOST_PP_ITERATION_5 182
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 183 && BOOST_PP_ITERATION_FINISH_5 >= 183
+#        define BOOST_PP_ITERATION_5 183
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 184 && BOOST_PP_ITERATION_FINISH_5 >= 184
+#        define BOOST_PP_ITERATION_5 184
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 185 && BOOST_PP_ITERATION_FINISH_5 >= 185
+#        define BOOST_PP_ITERATION_5 185
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 186 && BOOST_PP_ITERATION_FINISH_5 >= 186
+#        define BOOST_PP_ITERATION_5 186
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 187 && BOOST_PP_ITERATION_FINISH_5 >= 187
+#        define BOOST_PP_ITERATION_5 187
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 188 && BOOST_PP_ITERATION_FINISH_5 >= 188
+#        define BOOST_PP_ITERATION_5 188
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 189 && BOOST_PP_ITERATION_FINISH_5 >= 189
+#        define BOOST_PP_ITERATION_5 189
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 190 && BOOST_PP_ITERATION_FINISH_5 >= 190
+#        define BOOST_PP_ITERATION_5 190
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 191 && BOOST_PP_ITERATION_FINISH_5 >= 191
+#        define BOOST_PP_ITERATION_5 191
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 192 && BOOST_PP_ITERATION_FINISH_5 >= 192
+#        define BOOST_PP_ITERATION_5 192
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 193 && BOOST_PP_ITERATION_FINISH_5 >= 193
+#        define BOOST_PP_ITERATION_5 193
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 194 && BOOST_PP_ITERATION_FINISH_5 >= 194
+#        define BOOST_PP_ITERATION_5 194
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 195 && BOOST_PP_ITERATION_FINISH_5 >= 195
+#        define BOOST_PP_ITERATION_5 195
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 196 && BOOST_PP_ITERATION_FINISH_5 >= 196
+#        define BOOST_PP_ITERATION_5 196
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 197 && BOOST_PP_ITERATION_FINISH_5 >= 197
+#        define BOOST_PP_ITERATION_5 197
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 198 && BOOST_PP_ITERATION_FINISH_5 >= 198
+#        define BOOST_PP_ITERATION_5 198
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 199 && BOOST_PP_ITERATION_FINISH_5 >= 199
+#        define BOOST_PP_ITERATION_5 199
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 200 && BOOST_PP_ITERATION_FINISH_5 >= 200
+#        define BOOST_PP_ITERATION_5 200
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 201 && BOOST_PP_ITERATION_FINISH_5 >= 201
+#        define BOOST_PP_ITERATION_5 201
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 202 && BOOST_PP_ITERATION_FINISH_5 >= 202
+#        define BOOST_PP_ITERATION_5 202
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 203 && BOOST_PP_ITERATION_FINISH_5 >= 203
+#        define BOOST_PP_ITERATION_5 203
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 204 && BOOST_PP_ITERATION_FINISH_5 >= 204
+#        define BOOST_PP_ITERATION_5 204
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 205 && BOOST_PP_ITERATION_FINISH_5 >= 205
+#        define BOOST_PP_ITERATION_5 205
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 206 && BOOST_PP_ITERATION_FINISH_5 >= 206
+#        define BOOST_PP_ITERATION_5 206
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 207 && BOOST_PP_ITERATION_FINISH_5 >= 207
+#        define BOOST_PP_ITERATION_5 207
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 208 && BOOST_PP_ITERATION_FINISH_5 >= 208
+#        define BOOST_PP_ITERATION_5 208
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 209 && BOOST_PP_ITERATION_FINISH_5 >= 209
+#        define BOOST_PP_ITERATION_5 209
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 210 && BOOST_PP_ITERATION_FINISH_5 >= 210
+#        define BOOST_PP_ITERATION_5 210
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 211 && BOOST_PP_ITERATION_FINISH_5 >= 211
+#        define BOOST_PP_ITERATION_5 211
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 212 && BOOST_PP_ITERATION_FINISH_5 >= 212
+#        define BOOST_PP_ITERATION_5 212
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 213 && BOOST_PP_ITERATION_FINISH_5 >= 213
+#        define BOOST_PP_ITERATION_5 213
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 214 && BOOST_PP_ITERATION_FINISH_5 >= 214
+#        define BOOST_PP_ITERATION_5 214
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 215 && BOOST_PP_ITERATION_FINISH_5 >= 215
+#        define BOOST_PP_ITERATION_5 215
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 216 && BOOST_PP_ITERATION_FINISH_5 >= 216
+#        define BOOST_PP_ITERATION_5 216
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 217 && BOOST_PP_ITERATION_FINISH_5 >= 217
+#        define BOOST_PP_ITERATION_5 217
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 218 && BOOST_PP_ITERATION_FINISH_5 >= 218
+#        define BOOST_PP_ITERATION_5 218
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 219 && BOOST_PP_ITERATION_FINISH_5 >= 219
+#        define BOOST_PP_ITERATION_5 219
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 220 && BOOST_PP_ITERATION_FINISH_5 >= 220
+#        define BOOST_PP_ITERATION_5 220
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 221 && BOOST_PP_ITERATION_FINISH_5 >= 221
+#        define BOOST_PP_ITERATION_5 221
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 222 && BOOST_PP_ITERATION_FINISH_5 >= 222
+#        define BOOST_PP_ITERATION_5 222
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 223 && BOOST_PP_ITERATION_FINISH_5 >= 223
+#        define BOOST_PP_ITERATION_5 223
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 224 && BOOST_PP_ITERATION_FINISH_5 >= 224
+#        define BOOST_PP_ITERATION_5 224
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 225 && BOOST_PP_ITERATION_FINISH_5 >= 225
+#        define BOOST_PP_ITERATION_5 225
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 226 && BOOST_PP_ITERATION_FINISH_5 >= 226
+#        define BOOST_PP_ITERATION_5 226
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 227 && BOOST_PP_ITERATION_FINISH_5 >= 227
+#        define BOOST_PP_ITERATION_5 227
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 228 && BOOST_PP_ITERATION_FINISH_5 >= 228
+#        define BOOST_PP_ITERATION_5 228
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 229 && BOOST_PP_ITERATION_FINISH_5 >= 229
+#        define BOOST_PP_ITERATION_5 229
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 230 && BOOST_PP_ITERATION_FINISH_5 >= 230
+#        define BOOST_PP_ITERATION_5 230
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 231 && BOOST_PP_ITERATION_FINISH_5 >= 231
+#        define BOOST_PP_ITERATION_5 231
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 232 && BOOST_PP_ITERATION_FINISH_5 >= 232
+#        define BOOST_PP_ITERATION_5 232
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 233 && BOOST_PP_ITERATION_FINISH_5 >= 233
+#        define BOOST_PP_ITERATION_5 233
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 234 && BOOST_PP_ITERATION_FINISH_5 >= 234
+#        define BOOST_PP_ITERATION_5 234
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 235 && BOOST_PP_ITERATION_FINISH_5 >= 235
+#        define BOOST_PP_ITERATION_5 235
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 236 && BOOST_PP_ITERATION_FINISH_5 >= 236
+#        define BOOST_PP_ITERATION_5 236
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 237 && BOOST_PP_ITERATION_FINISH_5 >= 237
+#        define BOOST_PP_ITERATION_5 237
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 238 && BOOST_PP_ITERATION_FINISH_5 >= 238
+#        define BOOST_PP_ITERATION_5 238
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 239 && BOOST_PP_ITERATION_FINISH_5 >= 239
+#        define BOOST_PP_ITERATION_5 239
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 240 && BOOST_PP_ITERATION_FINISH_5 >= 240
+#        define BOOST_PP_ITERATION_5 240
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 241 && BOOST_PP_ITERATION_FINISH_5 >= 241
+#        define BOOST_PP_ITERATION_5 241
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 242 && BOOST_PP_ITERATION_FINISH_5 >= 242
+#        define BOOST_PP_ITERATION_5 242
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 243 && BOOST_PP_ITERATION_FINISH_5 >= 243
+#        define BOOST_PP_ITERATION_5 243
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 244 && BOOST_PP_ITERATION_FINISH_5 >= 244
+#        define BOOST_PP_ITERATION_5 244
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 245 && BOOST_PP_ITERATION_FINISH_5 >= 245
+#        define BOOST_PP_ITERATION_5 245
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 246 && BOOST_PP_ITERATION_FINISH_5 >= 246
+#        define BOOST_PP_ITERATION_5 246
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 247 && BOOST_PP_ITERATION_FINISH_5 >= 247
+#        define BOOST_PP_ITERATION_5 247
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 248 && BOOST_PP_ITERATION_FINISH_5 >= 248
+#        define BOOST_PP_ITERATION_5 248
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 249 && BOOST_PP_ITERATION_FINISH_5 >= 249
+#        define BOOST_PP_ITERATION_5 249
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 250 && BOOST_PP_ITERATION_FINISH_5 >= 250
+#        define BOOST_PP_ITERATION_5 250
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 251 && BOOST_PP_ITERATION_FINISH_5 >= 251
+#        define BOOST_PP_ITERATION_5 251
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 252 && BOOST_PP_ITERATION_FINISH_5 >= 252
+#        define BOOST_PP_ITERATION_5 252
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 253 && BOOST_PP_ITERATION_FINISH_5 >= 253
+#        define BOOST_PP_ITERATION_5 253
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 254 && BOOST_PP_ITERATION_FINISH_5 >= 254
+#        define BOOST_PP_ITERATION_5 254
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 255 && BOOST_PP_ITERATION_FINISH_5 >= 255
+#        define BOOST_PP_ITERATION_5 255
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+#    if BOOST_PP_ITERATION_START_5 <= 256 && BOOST_PP_ITERATION_FINISH_5 >= 256
+#        define BOOST_PP_ITERATION_5 256
+#        include BOOST_PP_FILENAME_5
+#        undef BOOST_PP_ITERATION_5
+#    endif
+# endif
+#
+# undef BOOST_PP_ITERATION_DEPTH
+# define BOOST_PP_ITERATION_DEPTH() 4
+#
+# undef BOOST_PP_ITERATION_START_5
+# undef BOOST_PP_ITERATION_FINISH_5
+# undef BOOST_PP_FILENAME_5
+#
+# undef BOOST_PP_ITERATION_FLAGS_5
+# undef BOOST_PP_ITERATION_PARAMS_5
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/reverse1.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/reverse1.hpp
new file mode 100644
index 0000000..bf88d2f
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/reverse1.hpp
@@ -0,0 +1,1296 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# if BOOST_PP_ITERATION_FINISH_1 <= 256 && BOOST_PP_ITERATION_START_1 >= 256
+#    define BOOST_PP_ITERATION_1 256
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 255 && BOOST_PP_ITERATION_START_1 >= 255
+#    define BOOST_PP_ITERATION_1 255
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 254 && BOOST_PP_ITERATION_START_1 >= 254
+#    define BOOST_PP_ITERATION_1 254
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 253 && BOOST_PP_ITERATION_START_1 >= 253
+#    define BOOST_PP_ITERATION_1 253
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 252 && BOOST_PP_ITERATION_START_1 >= 252
+#    define BOOST_PP_ITERATION_1 252
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 251 && BOOST_PP_ITERATION_START_1 >= 251
+#    define BOOST_PP_ITERATION_1 251
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 250 && BOOST_PP_ITERATION_START_1 >= 250
+#    define BOOST_PP_ITERATION_1 250
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 249 && BOOST_PP_ITERATION_START_1 >= 249
+#    define BOOST_PP_ITERATION_1 249
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 248 && BOOST_PP_ITERATION_START_1 >= 248
+#    define BOOST_PP_ITERATION_1 248
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 247 && BOOST_PP_ITERATION_START_1 >= 247
+#    define BOOST_PP_ITERATION_1 247
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 246 && BOOST_PP_ITERATION_START_1 >= 246
+#    define BOOST_PP_ITERATION_1 246
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 245 && BOOST_PP_ITERATION_START_1 >= 245
+#    define BOOST_PP_ITERATION_1 245
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 244 && BOOST_PP_ITERATION_START_1 >= 244
+#    define BOOST_PP_ITERATION_1 244
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 243 && BOOST_PP_ITERATION_START_1 >= 243
+#    define BOOST_PP_ITERATION_1 243
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 242 && BOOST_PP_ITERATION_START_1 >= 242
+#    define BOOST_PP_ITERATION_1 242
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 241 && BOOST_PP_ITERATION_START_1 >= 241
+#    define BOOST_PP_ITERATION_1 241
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 240 && BOOST_PP_ITERATION_START_1 >= 240
+#    define BOOST_PP_ITERATION_1 240
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 239 && BOOST_PP_ITERATION_START_1 >= 239
+#    define BOOST_PP_ITERATION_1 239
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 238 && BOOST_PP_ITERATION_START_1 >= 238
+#    define BOOST_PP_ITERATION_1 238
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 237 && BOOST_PP_ITERATION_START_1 >= 237
+#    define BOOST_PP_ITERATION_1 237
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 236 && BOOST_PP_ITERATION_START_1 >= 236
+#    define BOOST_PP_ITERATION_1 236
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 235 && BOOST_PP_ITERATION_START_1 >= 235
+#    define BOOST_PP_ITERATION_1 235
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 234 && BOOST_PP_ITERATION_START_1 >= 234
+#    define BOOST_PP_ITERATION_1 234
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 233 && BOOST_PP_ITERATION_START_1 >= 233
+#    define BOOST_PP_ITERATION_1 233
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 232 && BOOST_PP_ITERATION_START_1 >= 232
+#    define BOOST_PP_ITERATION_1 232
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 231 && BOOST_PP_ITERATION_START_1 >= 231
+#    define BOOST_PP_ITERATION_1 231
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 230 && BOOST_PP_ITERATION_START_1 >= 230
+#    define BOOST_PP_ITERATION_1 230
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 229 && BOOST_PP_ITERATION_START_1 >= 229
+#    define BOOST_PP_ITERATION_1 229
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 228 && BOOST_PP_ITERATION_START_1 >= 228
+#    define BOOST_PP_ITERATION_1 228
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 227 && BOOST_PP_ITERATION_START_1 >= 227
+#    define BOOST_PP_ITERATION_1 227
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 226 && BOOST_PP_ITERATION_START_1 >= 226
+#    define BOOST_PP_ITERATION_1 226
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 225 && BOOST_PP_ITERATION_START_1 >= 225
+#    define BOOST_PP_ITERATION_1 225
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 224 && BOOST_PP_ITERATION_START_1 >= 224
+#    define BOOST_PP_ITERATION_1 224
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 223 && BOOST_PP_ITERATION_START_1 >= 223
+#    define BOOST_PP_ITERATION_1 223
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 222 && BOOST_PP_ITERATION_START_1 >= 222
+#    define BOOST_PP_ITERATION_1 222
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 221 && BOOST_PP_ITERATION_START_1 >= 221
+#    define BOOST_PP_ITERATION_1 221
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 220 && BOOST_PP_ITERATION_START_1 >= 220
+#    define BOOST_PP_ITERATION_1 220
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 219 && BOOST_PP_ITERATION_START_1 >= 219
+#    define BOOST_PP_ITERATION_1 219
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 218 && BOOST_PP_ITERATION_START_1 >= 218
+#    define BOOST_PP_ITERATION_1 218
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 217 && BOOST_PP_ITERATION_START_1 >= 217
+#    define BOOST_PP_ITERATION_1 217
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 216 && BOOST_PP_ITERATION_START_1 >= 216
+#    define BOOST_PP_ITERATION_1 216
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 215 && BOOST_PP_ITERATION_START_1 >= 215
+#    define BOOST_PP_ITERATION_1 215
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 214 && BOOST_PP_ITERATION_START_1 >= 214
+#    define BOOST_PP_ITERATION_1 214
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 213 && BOOST_PP_ITERATION_START_1 >= 213
+#    define BOOST_PP_ITERATION_1 213
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 212 && BOOST_PP_ITERATION_START_1 >= 212
+#    define BOOST_PP_ITERATION_1 212
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 211 && BOOST_PP_ITERATION_START_1 >= 211
+#    define BOOST_PP_ITERATION_1 211
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 210 && BOOST_PP_ITERATION_START_1 >= 210
+#    define BOOST_PP_ITERATION_1 210
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 209 && BOOST_PP_ITERATION_START_1 >= 209
+#    define BOOST_PP_ITERATION_1 209
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 208 && BOOST_PP_ITERATION_START_1 >= 208
+#    define BOOST_PP_ITERATION_1 208
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 207 && BOOST_PP_ITERATION_START_1 >= 207
+#    define BOOST_PP_ITERATION_1 207
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 206 && BOOST_PP_ITERATION_START_1 >= 206
+#    define BOOST_PP_ITERATION_1 206
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 205 && BOOST_PP_ITERATION_START_1 >= 205
+#    define BOOST_PP_ITERATION_1 205
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 204 && BOOST_PP_ITERATION_START_1 >= 204
+#    define BOOST_PP_ITERATION_1 204
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 203 && BOOST_PP_ITERATION_START_1 >= 203
+#    define BOOST_PP_ITERATION_1 203
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 202 && BOOST_PP_ITERATION_START_1 >= 202
+#    define BOOST_PP_ITERATION_1 202
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 201 && BOOST_PP_ITERATION_START_1 >= 201
+#    define BOOST_PP_ITERATION_1 201
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 200 && BOOST_PP_ITERATION_START_1 >= 200
+#    define BOOST_PP_ITERATION_1 200
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 199 && BOOST_PP_ITERATION_START_1 >= 199
+#    define BOOST_PP_ITERATION_1 199
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 198 && BOOST_PP_ITERATION_START_1 >= 198
+#    define BOOST_PP_ITERATION_1 198
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 197 && BOOST_PP_ITERATION_START_1 >= 197
+#    define BOOST_PP_ITERATION_1 197
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 196 && BOOST_PP_ITERATION_START_1 >= 196
+#    define BOOST_PP_ITERATION_1 196
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 195 && BOOST_PP_ITERATION_START_1 >= 195
+#    define BOOST_PP_ITERATION_1 195
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 194 && BOOST_PP_ITERATION_START_1 >= 194
+#    define BOOST_PP_ITERATION_1 194
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 193 && BOOST_PP_ITERATION_START_1 >= 193
+#    define BOOST_PP_ITERATION_1 193
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 192 && BOOST_PP_ITERATION_START_1 >= 192
+#    define BOOST_PP_ITERATION_1 192
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 191 && BOOST_PP_ITERATION_START_1 >= 191
+#    define BOOST_PP_ITERATION_1 191
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 190 && BOOST_PP_ITERATION_START_1 >= 190
+#    define BOOST_PP_ITERATION_1 190
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 189 && BOOST_PP_ITERATION_START_1 >= 189
+#    define BOOST_PP_ITERATION_1 189
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 188 && BOOST_PP_ITERATION_START_1 >= 188
+#    define BOOST_PP_ITERATION_1 188
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 187 && BOOST_PP_ITERATION_START_1 >= 187
+#    define BOOST_PP_ITERATION_1 187
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 186 && BOOST_PP_ITERATION_START_1 >= 186
+#    define BOOST_PP_ITERATION_1 186
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 185 && BOOST_PP_ITERATION_START_1 >= 185
+#    define BOOST_PP_ITERATION_1 185
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 184 && BOOST_PP_ITERATION_START_1 >= 184
+#    define BOOST_PP_ITERATION_1 184
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 183 && BOOST_PP_ITERATION_START_1 >= 183
+#    define BOOST_PP_ITERATION_1 183
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 182 && BOOST_PP_ITERATION_START_1 >= 182
+#    define BOOST_PP_ITERATION_1 182
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 181 && BOOST_PP_ITERATION_START_1 >= 181
+#    define BOOST_PP_ITERATION_1 181
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 180 && BOOST_PP_ITERATION_START_1 >= 180
+#    define BOOST_PP_ITERATION_1 180
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 179 && BOOST_PP_ITERATION_START_1 >= 179
+#    define BOOST_PP_ITERATION_1 179
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 178 && BOOST_PP_ITERATION_START_1 >= 178
+#    define BOOST_PP_ITERATION_1 178
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 177 && BOOST_PP_ITERATION_START_1 >= 177
+#    define BOOST_PP_ITERATION_1 177
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 176 && BOOST_PP_ITERATION_START_1 >= 176
+#    define BOOST_PP_ITERATION_1 176
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 175 && BOOST_PP_ITERATION_START_1 >= 175
+#    define BOOST_PP_ITERATION_1 175
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 174 && BOOST_PP_ITERATION_START_1 >= 174
+#    define BOOST_PP_ITERATION_1 174
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 173 && BOOST_PP_ITERATION_START_1 >= 173
+#    define BOOST_PP_ITERATION_1 173
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 172 && BOOST_PP_ITERATION_START_1 >= 172
+#    define BOOST_PP_ITERATION_1 172
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 171 && BOOST_PP_ITERATION_START_1 >= 171
+#    define BOOST_PP_ITERATION_1 171
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 170 && BOOST_PP_ITERATION_START_1 >= 170
+#    define BOOST_PP_ITERATION_1 170
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 169 && BOOST_PP_ITERATION_START_1 >= 169
+#    define BOOST_PP_ITERATION_1 169
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 168 && BOOST_PP_ITERATION_START_1 >= 168
+#    define BOOST_PP_ITERATION_1 168
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 167 && BOOST_PP_ITERATION_START_1 >= 167
+#    define BOOST_PP_ITERATION_1 167
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 166 && BOOST_PP_ITERATION_START_1 >= 166
+#    define BOOST_PP_ITERATION_1 166
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 165 && BOOST_PP_ITERATION_START_1 >= 165
+#    define BOOST_PP_ITERATION_1 165
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 164 && BOOST_PP_ITERATION_START_1 >= 164
+#    define BOOST_PP_ITERATION_1 164
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 163 && BOOST_PP_ITERATION_START_1 >= 163
+#    define BOOST_PP_ITERATION_1 163
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 162 && BOOST_PP_ITERATION_START_1 >= 162
+#    define BOOST_PP_ITERATION_1 162
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 161 && BOOST_PP_ITERATION_START_1 >= 161
+#    define BOOST_PP_ITERATION_1 161
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 160 && BOOST_PP_ITERATION_START_1 >= 160
+#    define BOOST_PP_ITERATION_1 160
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 159 && BOOST_PP_ITERATION_START_1 >= 159
+#    define BOOST_PP_ITERATION_1 159
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 158 && BOOST_PP_ITERATION_START_1 >= 158
+#    define BOOST_PP_ITERATION_1 158
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 157 && BOOST_PP_ITERATION_START_1 >= 157
+#    define BOOST_PP_ITERATION_1 157
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 156 && BOOST_PP_ITERATION_START_1 >= 156
+#    define BOOST_PP_ITERATION_1 156
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 155 && BOOST_PP_ITERATION_START_1 >= 155
+#    define BOOST_PP_ITERATION_1 155
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 154 && BOOST_PP_ITERATION_START_1 >= 154
+#    define BOOST_PP_ITERATION_1 154
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 153 && BOOST_PP_ITERATION_START_1 >= 153
+#    define BOOST_PP_ITERATION_1 153
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 152 && BOOST_PP_ITERATION_START_1 >= 152
+#    define BOOST_PP_ITERATION_1 152
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 151 && BOOST_PP_ITERATION_START_1 >= 151
+#    define BOOST_PP_ITERATION_1 151
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 150 && BOOST_PP_ITERATION_START_1 >= 150
+#    define BOOST_PP_ITERATION_1 150
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 149 && BOOST_PP_ITERATION_START_1 >= 149
+#    define BOOST_PP_ITERATION_1 149
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 148 && BOOST_PP_ITERATION_START_1 >= 148
+#    define BOOST_PP_ITERATION_1 148
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 147 && BOOST_PP_ITERATION_START_1 >= 147
+#    define BOOST_PP_ITERATION_1 147
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 146 && BOOST_PP_ITERATION_START_1 >= 146
+#    define BOOST_PP_ITERATION_1 146
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 145 && BOOST_PP_ITERATION_START_1 >= 145
+#    define BOOST_PP_ITERATION_1 145
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 144 && BOOST_PP_ITERATION_START_1 >= 144
+#    define BOOST_PP_ITERATION_1 144
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 143 && BOOST_PP_ITERATION_START_1 >= 143
+#    define BOOST_PP_ITERATION_1 143
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 142 && BOOST_PP_ITERATION_START_1 >= 142
+#    define BOOST_PP_ITERATION_1 142
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 141 && BOOST_PP_ITERATION_START_1 >= 141
+#    define BOOST_PP_ITERATION_1 141
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 140 && BOOST_PP_ITERATION_START_1 >= 140
+#    define BOOST_PP_ITERATION_1 140
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 139 && BOOST_PP_ITERATION_START_1 >= 139
+#    define BOOST_PP_ITERATION_1 139
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 138 && BOOST_PP_ITERATION_START_1 >= 138
+#    define BOOST_PP_ITERATION_1 138
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 137 && BOOST_PP_ITERATION_START_1 >= 137
+#    define BOOST_PP_ITERATION_1 137
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 136 && BOOST_PP_ITERATION_START_1 >= 136
+#    define BOOST_PP_ITERATION_1 136
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 135 && BOOST_PP_ITERATION_START_1 >= 135
+#    define BOOST_PP_ITERATION_1 135
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 134 && BOOST_PP_ITERATION_START_1 >= 134
+#    define BOOST_PP_ITERATION_1 134
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 133 && BOOST_PP_ITERATION_START_1 >= 133
+#    define BOOST_PP_ITERATION_1 133
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 132 && BOOST_PP_ITERATION_START_1 >= 132
+#    define BOOST_PP_ITERATION_1 132
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 131 && BOOST_PP_ITERATION_START_1 >= 131
+#    define BOOST_PP_ITERATION_1 131
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 130 && BOOST_PP_ITERATION_START_1 >= 130
+#    define BOOST_PP_ITERATION_1 130
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 129 && BOOST_PP_ITERATION_START_1 >= 129
+#    define BOOST_PP_ITERATION_1 129
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 128 && BOOST_PP_ITERATION_START_1 >= 128
+#    define BOOST_PP_ITERATION_1 128
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 127 && BOOST_PP_ITERATION_START_1 >= 127
+#    define BOOST_PP_ITERATION_1 127
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 126 && BOOST_PP_ITERATION_START_1 >= 126
+#    define BOOST_PP_ITERATION_1 126
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 125 && BOOST_PP_ITERATION_START_1 >= 125
+#    define BOOST_PP_ITERATION_1 125
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 124 && BOOST_PP_ITERATION_START_1 >= 124
+#    define BOOST_PP_ITERATION_1 124
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 123 && BOOST_PP_ITERATION_START_1 >= 123
+#    define BOOST_PP_ITERATION_1 123
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 122 && BOOST_PP_ITERATION_START_1 >= 122
+#    define BOOST_PP_ITERATION_1 122
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 121 && BOOST_PP_ITERATION_START_1 >= 121
+#    define BOOST_PP_ITERATION_1 121
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 120 && BOOST_PP_ITERATION_START_1 >= 120
+#    define BOOST_PP_ITERATION_1 120
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 119 && BOOST_PP_ITERATION_START_1 >= 119
+#    define BOOST_PP_ITERATION_1 119
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 118 && BOOST_PP_ITERATION_START_1 >= 118
+#    define BOOST_PP_ITERATION_1 118
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 117 && BOOST_PP_ITERATION_START_1 >= 117
+#    define BOOST_PP_ITERATION_1 117
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 116 && BOOST_PP_ITERATION_START_1 >= 116
+#    define BOOST_PP_ITERATION_1 116
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 115 && BOOST_PP_ITERATION_START_1 >= 115
+#    define BOOST_PP_ITERATION_1 115
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 114 && BOOST_PP_ITERATION_START_1 >= 114
+#    define BOOST_PP_ITERATION_1 114
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 113 && BOOST_PP_ITERATION_START_1 >= 113
+#    define BOOST_PP_ITERATION_1 113
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 112 && BOOST_PP_ITERATION_START_1 >= 112
+#    define BOOST_PP_ITERATION_1 112
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 111 && BOOST_PP_ITERATION_START_1 >= 111
+#    define BOOST_PP_ITERATION_1 111
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 110 && BOOST_PP_ITERATION_START_1 >= 110
+#    define BOOST_PP_ITERATION_1 110
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 109 && BOOST_PP_ITERATION_START_1 >= 109
+#    define BOOST_PP_ITERATION_1 109
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 108 && BOOST_PP_ITERATION_START_1 >= 108
+#    define BOOST_PP_ITERATION_1 108
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 107 && BOOST_PP_ITERATION_START_1 >= 107
+#    define BOOST_PP_ITERATION_1 107
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 106 && BOOST_PP_ITERATION_START_1 >= 106
+#    define BOOST_PP_ITERATION_1 106
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 105 && BOOST_PP_ITERATION_START_1 >= 105
+#    define BOOST_PP_ITERATION_1 105
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 104 && BOOST_PP_ITERATION_START_1 >= 104
+#    define BOOST_PP_ITERATION_1 104
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 103 && BOOST_PP_ITERATION_START_1 >= 103
+#    define BOOST_PP_ITERATION_1 103
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 102 && BOOST_PP_ITERATION_START_1 >= 102
+#    define BOOST_PP_ITERATION_1 102
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 101 && BOOST_PP_ITERATION_START_1 >= 101
+#    define BOOST_PP_ITERATION_1 101
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 100 && BOOST_PP_ITERATION_START_1 >= 100
+#    define BOOST_PP_ITERATION_1 100
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 99 && BOOST_PP_ITERATION_START_1 >= 99
+#    define BOOST_PP_ITERATION_1 99
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 98 && BOOST_PP_ITERATION_START_1 >= 98
+#    define BOOST_PP_ITERATION_1 98
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 97 && BOOST_PP_ITERATION_START_1 >= 97
+#    define BOOST_PP_ITERATION_1 97
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 96 && BOOST_PP_ITERATION_START_1 >= 96
+#    define BOOST_PP_ITERATION_1 96
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 95 && BOOST_PP_ITERATION_START_1 >= 95
+#    define BOOST_PP_ITERATION_1 95
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 94 && BOOST_PP_ITERATION_START_1 >= 94
+#    define BOOST_PP_ITERATION_1 94
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 93 && BOOST_PP_ITERATION_START_1 >= 93
+#    define BOOST_PP_ITERATION_1 93
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 92 && BOOST_PP_ITERATION_START_1 >= 92
+#    define BOOST_PP_ITERATION_1 92
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 91 && BOOST_PP_ITERATION_START_1 >= 91
+#    define BOOST_PP_ITERATION_1 91
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 90 && BOOST_PP_ITERATION_START_1 >= 90
+#    define BOOST_PP_ITERATION_1 90
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 89 && BOOST_PP_ITERATION_START_1 >= 89
+#    define BOOST_PP_ITERATION_1 89
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 88 && BOOST_PP_ITERATION_START_1 >= 88
+#    define BOOST_PP_ITERATION_1 88
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 87 && BOOST_PP_ITERATION_START_1 >= 87
+#    define BOOST_PP_ITERATION_1 87
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 86 && BOOST_PP_ITERATION_START_1 >= 86
+#    define BOOST_PP_ITERATION_1 86
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 85 && BOOST_PP_ITERATION_START_1 >= 85
+#    define BOOST_PP_ITERATION_1 85
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 84 && BOOST_PP_ITERATION_START_1 >= 84
+#    define BOOST_PP_ITERATION_1 84
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 83 && BOOST_PP_ITERATION_START_1 >= 83
+#    define BOOST_PP_ITERATION_1 83
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 82 && BOOST_PP_ITERATION_START_1 >= 82
+#    define BOOST_PP_ITERATION_1 82
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 81 && BOOST_PP_ITERATION_START_1 >= 81
+#    define BOOST_PP_ITERATION_1 81
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 80 && BOOST_PP_ITERATION_START_1 >= 80
+#    define BOOST_PP_ITERATION_1 80
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 79 && BOOST_PP_ITERATION_START_1 >= 79
+#    define BOOST_PP_ITERATION_1 79
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 78 && BOOST_PP_ITERATION_START_1 >= 78
+#    define BOOST_PP_ITERATION_1 78
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 77 && BOOST_PP_ITERATION_START_1 >= 77
+#    define BOOST_PP_ITERATION_1 77
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 76 && BOOST_PP_ITERATION_START_1 >= 76
+#    define BOOST_PP_ITERATION_1 76
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 75 && BOOST_PP_ITERATION_START_1 >= 75
+#    define BOOST_PP_ITERATION_1 75
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 74 && BOOST_PP_ITERATION_START_1 >= 74
+#    define BOOST_PP_ITERATION_1 74
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 73 && BOOST_PP_ITERATION_START_1 >= 73
+#    define BOOST_PP_ITERATION_1 73
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 72 && BOOST_PP_ITERATION_START_1 >= 72
+#    define BOOST_PP_ITERATION_1 72
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 71 && BOOST_PP_ITERATION_START_1 >= 71
+#    define BOOST_PP_ITERATION_1 71
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 70 && BOOST_PP_ITERATION_START_1 >= 70
+#    define BOOST_PP_ITERATION_1 70
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 69 && BOOST_PP_ITERATION_START_1 >= 69
+#    define BOOST_PP_ITERATION_1 69
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 68 && BOOST_PP_ITERATION_START_1 >= 68
+#    define BOOST_PP_ITERATION_1 68
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 67 && BOOST_PP_ITERATION_START_1 >= 67
+#    define BOOST_PP_ITERATION_1 67
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 66 && BOOST_PP_ITERATION_START_1 >= 66
+#    define BOOST_PP_ITERATION_1 66
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 65 && BOOST_PP_ITERATION_START_1 >= 65
+#    define BOOST_PP_ITERATION_1 65
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 64 && BOOST_PP_ITERATION_START_1 >= 64
+#    define BOOST_PP_ITERATION_1 64
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 63 && BOOST_PP_ITERATION_START_1 >= 63
+#    define BOOST_PP_ITERATION_1 63
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 62 && BOOST_PP_ITERATION_START_1 >= 62
+#    define BOOST_PP_ITERATION_1 62
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 61 && BOOST_PP_ITERATION_START_1 >= 61
+#    define BOOST_PP_ITERATION_1 61
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 60 && BOOST_PP_ITERATION_START_1 >= 60
+#    define BOOST_PP_ITERATION_1 60
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 59 && BOOST_PP_ITERATION_START_1 >= 59
+#    define BOOST_PP_ITERATION_1 59
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 58 && BOOST_PP_ITERATION_START_1 >= 58
+#    define BOOST_PP_ITERATION_1 58
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 57 && BOOST_PP_ITERATION_START_1 >= 57
+#    define BOOST_PP_ITERATION_1 57
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 56 && BOOST_PP_ITERATION_START_1 >= 56
+#    define BOOST_PP_ITERATION_1 56
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 55 && BOOST_PP_ITERATION_START_1 >= 55
+#    define BOOST_PP_ITERATION_1 55
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 54 && BOOST_PP_ITERATION_START_1 >= 54
+#    define BOOST_PP_ITERATION_1 54
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 53 && BOOST_PP_ITERATION_START_1 >= 53
+#    define BOOST_PP_ITERATION_1 53
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 52 && BOOST_PP_ITERATION_START_1 >= 52
+#    define BOOST_PP_ITERATION_1 52
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 51 && BOOST_PP_ITERATION_START_1 >= 51
+#    define BOOST_PP_ITERATION_1 51
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 50 && BOOST_PP_ITERATION_START_1 >= 50
+#    define BOOST_PP_ITERATION_1 50
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 49 && BOOST_PP_ITERATION_START_1 >= 49
+#    define BOOST_PP_ITERATION_1 49
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 48 && BOOST_PP_ITERATION_START_1 >= 48
+#    define BOOST_PP_ITERATION_1 48
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 47 && BOOST_PP_ITERATION_START_1 >= 47
+#    define BOOST_PP_ITERATION_1 47
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 46 && BOOST_PP_ITERATION_START_1 >= 46
+#    define BOOST_PP_ITERATION_1 46
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 45 && BOOST_PP_ITERATION_START_1 >= 45
+#    define BOOST_PP_ITERATION_1 45
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 44 && BOOST_PP_ITERATION_START_1 >= 44
+#    define BOOST_PP_ITERATION_1 44
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 43 && BOOST_PP_ITERATION_START_1 >= 43
+#    define BOOST_PP_ITERATION_1 43
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 42 && BOOST_PP_ITERATION_START_1 >= 42
+#    define BOOST_PP_ITERATION_1 42
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 41 && BOOST_PP_ITERATION_START_1 >= 41
+#    define BOOST_PP_ITERATION_1 41
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 40 && BOOST_PP_ITERATION_START_1 >= 40
+#    define BOOST_PP_ITERATION_1 40
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 39 && BOOST_PP_ITERATION_START_1 >= 39
+#    define BOOST_PP_ITERATION_1 39
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 38 && BOOST_PP_ITERATION_START_1 >= 38
+#    define BOOST_PP_ITERATION_1 38
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 37 && BOOST_PP_ITERATION_START_1 >= 37
+#    define BOOST_PP_ITERATION_1 37
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 36 && BOOST_PP_ITERATION_START_1 >= 36
+#    define BOOST_PP_ITERATION_1 36
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 35 && BOOST_PP_ITERATION_START_1 >= 35
+#    define BOOST_PP_ITERATION_1 35
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 34 && BOOST_PP_ITERATION_START_1 >= 34
+#    define BOOST_PP_ITERATION_1 34
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 33 && BOOST_PP_ITERATION_START_1 >= 33
+#    define BOOST_PP_ITERATION_1 33
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 32 && BOOST_PP_ITERATION_START_1 >= 32
+#    define BOOST_PP_ITERATION_1 32
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 31 && BOOST_PP_ITERATION_START_1 >= 31
+#    define BOOST_PP_ITERATION_1 31
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 30 && BOOST_PP_ITERATION_START_1 >= 30
+#    define BOOST_PP_ITERATION_1 30
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 29 && BOOST_PP_ITERATION_START_1 >= 29
+#    define BOOST_PP_ITERATION_1 29
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 28 && BOOST_PP_ITERATION_START_1 >= 28
+#    define BOOST_PP_ITERATION_1 28
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 27 && BOOST_PP_ITERATION_START_1 >= 27
+#    define BOOST_PP_ITERATION_1 27
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 26 && BOOST_PP_ITERATION_START_1 >= 26
+#    define BOOST_PP_ITERATION_1 26
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 25 && BOOST_PP_ITERATION_START_1 >= 25
+#    define BOOST_PP_ITERATION_1 25
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 24 && BOOST_PP_ITERATION_START_1 >= 24
+#    define BOOST_PP_ITERATION_1 24
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 23 && BOOST_PP_ITERATION_START_1 >= 23
+#    define BOOST_PP_ITERATION_1 23
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 22 && BOOST_PP_ITERATION_START_1 >= 22
+#    define BOOST_PP_ITERATION_1 22
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 21 && BOOST_PP_ITERATION_START_1 >= 21
+#    define BOOST_PP_ITERATION_1 21
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 20 && BOOST_PP_ITERATION_START_1 >= 20
+#    define BOOST_PP_ITERATION_1 20
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 19 && BOOST_PP_ITERATION_START_1 >= 19
+#    define BOOST_PP_ITERATION_1 19
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 18 && BOOST_PP_ITERATION_START_1 >= 18
+#    define BOOST_PP_ITERATION_1 18
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 17 && BOOST_PP_ITERATION_START_1 >= 17
+#    define BOOST_PP_ITERATION_1 17
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 16 && BOOST_PP_ITERATION_START_1 >= 16
+#    define BOOST_PP_ITERATION_1 16
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 15 && BOOST_PP_ITERATION_START_1 >= 15
+#    define BOOST_PP_ITERATION_1 15
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 14 && BOOST_PP_ITERATION_START_1 >= 14
+#    define BOOST_PP_ITERATION_1 14
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 13 && BOOST_PP_ITERATION_START_1 >= 13
+#    define BOOST_PP_ITERATION_1 13
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 12 && BOOST_PP_ITERATION_START_1 >= 12
+#    define BOOST_PP_ITERATION_1 12
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 11 && BOOST_PP_ITERATION_START_1 >= 11
+#    define BOOST_PP_ITERATION_1 11
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 10 && BOOST_PP_ITERATION_START_1 >= 10
+#    define BOOST_PP_ITERATION_1 10
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 9 && BOOST_PP_ITERATION_START_1 >= 9
+#    define BOOST_PP_ITERATION_1 9
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 8 && BOOST_PP_ITERATION_START_1 >= 8
+#    define BOOST_PP_ITERATION_1 8
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 7 && BOOST_PP_ITERATION_START_1 >= 7
+#    define BOOST_PP_ITERATION_1 7
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 6 && BOOST_PP_ITERATION_START_1 >= 6
+#    define BOOST_PP_ITERATION_1 6
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 5 && BOOST_PP_ITERATION_START_1 >= 5
+#    define BOOST_PP_ITERATION_1 5
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 4 && BOOST_PP_ITERATION_START_1 >= 4
+#    define BOOST_PP_ITERATION_1 4
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 3 && BOOST_PP_ITERATION_START_1 >= 3
+#    define BOOST_PP_ITERATION_1 3
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 2 && BOOST_PP_ITERATION_START_1 >= 2
+#    define BOOST_PP_ITERATION_1 2
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 1 && BOOST_PP_ITERATION_START_1 >= 1
+#    define BOOST_PP_ITERATION_1 1
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
+# if BOOST_PP_ITERATION_FINISH_1 <= 0 && BOOST_PP_ITERATION_START_1 >= 0
+#    define BOOST_PP_ITERATION_1 0
+#    include BOOST_PP_FILENAME_1
+#    undef BOOST_PP_ITERATION_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/reverse2.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/reverse2.hpp
new file mode 100644
index 0000000..521bd24
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/reverse2.hpp
@@ -0,0 +1,1296 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# if BOOST_PP_ITERATION_FINISH_2 <= 256 && BOOST_PP_ITERATION_START_2 >= 256
+#    define BOOST_PP_ITERATION_2 256
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 255 && BOOST_PP_ITERATION_START_2 >= 255
+#    define BOOST_PP_ITERATION_2 255
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 254 && BOOST_PP_ITERATION_START_2 >= 254
+#    define BOOST_PP_ITERATION_2 254
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 253 && BOOST_PP_ITERATION_START_2 >= 253
+#    define BOOST_PP_ITERATION_2 253
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 252 && BOOST_PP_ITERATION_START_2 >= 252
+#    define BOOST_PP_ITERATION_2 252
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 251 && BOOST_PP_ITERATION_START_2 >= 251
+#    define BOOST_PP_ITERATION_2 251
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 250 && BOOST_PP_ITERATION_START_2 >= 250
+#    define BOOST_PP_ITERATION_2 250
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 249 && BOOST_PP_ITERATION_START_2 >= 249
+#    define BOOST_PP_ITERATION_2 249
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 248 && BOOST_PP_ITERATION_START_2 >= 248
+#    define BOOST_PP_ITERATION_2 248
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 247 && BOOST_PP_ITERATION_START_2 >= 247
+#    define BOOST_PP_ITERATION_2 247
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 246 && BOOST_PP_ITERATION_START_2 >= 246
+#    define BOOST_PP_ITERATION_2 246
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 245 && BOOST_PP_ITERATION_START_2 >= 245
+#    define BOOST_PP_ITERATION_2 245
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 244 && BOOST_PP_ITERATION_START_2 >= 244
+#    define BOOST_PP_ITERATION_2 244
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 243 && BOOST_PP_ITERATION_START_2 >= 243
+#    define BOOST_PP_ITERATION_2 243
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 242 && BOOST_PP_ITERATION_START_2 >= 242
+#    define BOOST_PP_ITERATION_2 242
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 241 && BOOST_PP_ITERATION_START_2 >= 241
+#    define BOOST_PP_ITERATION_2 241
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 240 && BOOST_PP_ITERATION_START_2 >= 240
+#    define BOOST_PP_ITERATION_2 240
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 239 && BOOST_PP_ITERATION_START_2 >= 239
+#    define BOOST_PP_ITERATION_2 239
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 238 && BOOST_PP_ITERATION_START_2 >= 238
+#    define BOOST_PP_ITERATION_2 238
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 237 && BOOST_PP_ITERATION_START_2 >= 237
+#    define BOOST_PP_ITERATION_2 237
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 236 && BOOST_PP_ITERATION_START_2 >= 236
+#    define BOOST_PP_ITERATION_2 236
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 235 && BOOST_PP_ITERATION_START_2 >= 235
+#    define BOOST_PP_ITERATION_2 235
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 234 && BOOST_PP_ITERATION_START_2 >= 234
+#    define BOOST_PP_ITERATION_2 234
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 233 && BOOST_PP_ITERATION_START_2 >= 233
+#    define BOOST_PP_ITERATION_2 233
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 232 && BOOST_PP_ITERATION_START_2 >= 232
+#    define BOOST_PP_ITERATION_2 232
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 231 && BOOST_PP_ITERATION_START_2 >= 231
+#    define BOOST_PP_ITERATION_2 231
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 230 && BOOST_PP_ITERATION_START_2 >= 230
+#    define BOOST_PP_ITERATION_2 230
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 229 && BOOST_PP_ITERATION_START_2 >= 229
+#    define BOOST_PP_ITERATION_2 229
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 228 && BOOST_PP_ITERATION_START_2 >= 228
+#    define BOOST_PP_ITERATION_2 228
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 227 && BOOST_PP_ITERATION_START_2 >= 227
+#    define BOOST_PP_ITERATION_2 227
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 226 && BOOST_PP_ITERATION_START_2 >= 226
+#    define BOOST_PP_ITERATION_2 226
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 225 && BOOST_PP_ITERATION_START_2 >= 225
+#    define BOOST_PP_ITERATION_2 225
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 224 && BOOST_PP_ITERATION_START_2 >= 224
+#    define BOOST_PP_ITERATION_2 224
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 223 && BOOST_PP_ITERATION_START_2 >= 223
+#    define BOOST_PP_ITERATION_2 223
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 222 && BOOST_PP_ITERATION_START_2 >= 222
+#    define BOOST_PP_ITERATION_2 222
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 221 && BOOST_PP_ITERATION_START_2 >= 221
+#    define BOOST_PP_ITERATION_2 221
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 220 && BOOST_PP_ITERATION_START_2 >= 220
+#    define BOOST_PP_ITERATION_2 220
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 219 && BOOST_PP_ITERATION_START_2 >= 219
+#    define BOOST_PP_ITERATION_2 219
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 218 && BOOST_PP_ITERATION_START_2 >= 218
+#    define BOOST_PP_ITERATION_2 218
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 217 && BOOST_PP_ITERATION_START_2 >= 217
+#    define BOOST_PP_ITERATION_2 217
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 216 && BOOST_PP_ITERATION_START_2 >= 216
+#    define BOOST_PP_ITERATION_2 216
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 215 && BOOST_PP_ITERATION_START_2 >= 215
+#    define BOOST_PP_ITERATION_2 215
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 214 && BOOST_PP_ITERATION_START_2 >= 214
+#    define BOOST_PP_ITERATION_2 214
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 213 && BOOST_PP_ITERATION_START_2 >= 213
+#    define BOOST_PP_ITERATION_2 213
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 212 && BOOST_PP_ITERATION_START_2 >= 212
+#    define BOOST_PP_ITERATION_2 212
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 211 && BOOST_PP_ITERATION_START_2 >= 211
+#    define BOOST_PP_ITERATION_2 211
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 210 && BOOST_PP_ITERATION_START_2 >= 210
+#    define BOOST_PP_ITERATION_2 210
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 209 && BOOST_PP_ITERATION_START_2 >= 209
+#    define BOOST_PP_ITERATION_2 209
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 208 && BOOST_PP_ITERATION_START_2 >= 208
+#    define BOOST_PP_ITERATION_2 208
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 207 && BOOST_PP_ITERATION_START_2 >= 207
+#    define BOOST_PP_ITERATION_2 207
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 206 && BOOST_PP_ITERATION_START_2 >= 206
+#    define BOOST_PP_ITERATION_2 206
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 205 && BOOST_PP_ITERATION_START_2 >= 205
+#    define BOOST_PP_ITERATION_2 205
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 204 && BOOST_PP_ITERATION_START_2 >= 204
+#    define BOOST_PP_ITERATION_2 204
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 203 && BOOST_PP_ITERATION_START_2 >= 203
+#    define BOOST_PP_ITERATION_2 203
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 202 && BOOST_PP_ITERATION_START_2 >= 202
+#    define BOOST_PP_ITERATION_2 202
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 201 && BOOST_PP_ITERATION_START_2 >= 201
+#    define BOOST_PP_ITERATION_2 201
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 200 && BOOST_PP_ITERATION_START_2 >= 200
+#    define BOOST_PP_ITERATION_2 200
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 199 && BOOST_PP_ITERATION_START_2 >= 199
+#    define BOOST_PP_ITERATION_2 199
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 198 && BOOST_PP_ITERATION_START_2 >= 198
+#    define BOOST_PP_ITERATION_2 198
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 197 && BOOST_PP_ITERATION_START_2 >= 197
+#    define BOOST_PP_ITERATION_2 197
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 196 && BOOST_PP_ITERATION_START_2 >= 196
+#    define BOOST_PP_ITERATION_2 196
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 195 && BOOST_PP_ITERATION_START_2 >= 195
+#    define BOOST_PP_ITERATION_2 195
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 194 && BOOST_PP_ITERATION_START_2 >= 194
+#    define BOOST_PP_ITERATION_2 194
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 193 && BOOST_PP_ITERATION_START_2 >= 193
+#    define BOOST_PP_ITERATION_2 193
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 192 && BOOST_PP_ITERATION_START_2 >= 192
+#    define BOOST_PP_ITERATION_2 192
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 191 && BOOST_PP_ITERATION_START_2 >= 191
+#    define BOOST_PP_ITERATION_2 191
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 190 && BOOST_PP_ITERATION_START_2 >= 190
+#    define BOOST_PP_ITERATION_2 190
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 189 && BOOST_PP_ITERATION_START_2 >= 189
+#    define BOOST_PP_ITERATION_2 189
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 188 && BOOST_PP_ITERATION_START_2 >= 188
+#    define BOOST_PP_ITERATION_2 188
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 187 && BOOST_PP_ITERATION_START_2 >= 187
+#    define BOOST_PP_ITERATION_2 187
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 186 && BOOST_PP_ITERATION_START_2 >= 186
+#    define BOOST_PP_ITERATION_2 186
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 185 && BOOST_PP_ITERATION_START_2 >= 185
+#    define BOOST_PP_ITERATION_2 185
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 184 && BOOST_PP_ITERATION_START_2 >= 184
+#    define BOOST_PP_ITERATION_2 184
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 183 && BOOST_PP_ITERATION_START_2 >= 183
+#    define BOOST_PP_ITERATION_2 183
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 182 && BOOST_PP_ITERATION_START_2 >= 182
+#    define BOOST_PP_ITERATION_2 182
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 181 && BOOST_PP_ITERATION_START_2 >= 181
+#    define BOOST_PP_ITERATION_2 181
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 180 && BOOST_PP_ITERATION_START_2 >= 180
+#    define BOOST_PP_ITERATION_2 180
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 179 && BOOST_PP_ITERATION_START_2 >= 179
+#    define BOOST_PP_ITERATION_2 179
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 178 && BOOST_PP_ITERATION_START_2 >= 178
+#    define BOOST_PP_ITERATION_2 178
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 177 && BOOST_PP_ITERATION_START_2 >= 177
+#    define BOOST_PP_ITERATION_2 177
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 176 && BOOST_PP_ITERATION_START_2 >= 176
+#    define BOOST_PP_ITERATION_2 176
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 175 && BOOST_PP_ITERATION_START_2 >= 175
+#    define BOOST_PP_ITERATION_2 175
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 174 && BOOST_PP_ITERATION_START_2 >= 174
+#    define BOOST_PP_ITERATION_2 174
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 173 && BOOST_PP_ITERATION_START_2 >= 173
+#    define BOOST_PP_ITERATION_2 173
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 172 && BOOST_PP_ITERATION_START_2 >= 172
+#    define BOOST_PP_ITERATION_2 172
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 171 && BOOST_PP_ITERATION_START_2 >= 171
+#    define BOOST_PP_ITERATION_2 171
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 170 && BOOST_PP_ITERATION_START_2 >= 170
+#    define BOOST_PP_ITERATION_2 170
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 169 && BOOST_PP_ITERATION_START_2 >= 169
+#    define BOOST_PP_ITERATION_2 169
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 168 && BOOST_PP_ITERATION_START_2 >= 168
+#    define BOOST_PP_ITERATION_2 168
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 167 && BOOST_PP_ITERATION_START_2 >= 167
+#    define BOOST_PP_ITERATION_2 167
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 166 && BOOST_PP_ITERATION_START_2 >= 166
+#    define BOOST_PP_ITERATION_2 166
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 165 && BOOST_PP_ITERATION_START_2 >= 165
+#    define BOOST_PP_ITERATION_2 165
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 164 && BOOST_PP_ITERATION_START_2 >= 164
+#    define BOOST_PP_ITERATION_2 164
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 163 && BOOST_PP_ITERATION_START_2 >= 163
+#    define BOOST_PP_ITERATION_2 163
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 162 && BOOST_PP_ITERATION_START_2 >= 162
+#    define BOOST_PP_ITERATION_2 162
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 161 && BOOST_PP_ITERATION_START_2 >= 161
+#    define BOOST_PP_ITERATION_2 161
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 160 && BOOST_PP_ITERATION_START_2 >= 160
+#    define BOOST_PP_ITERATION_2 160
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 159 && BOOST_PP_ITERATION_START_2 >= 159
+#    define BOOST_PP_ITERATION_2 159
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 158 && BOOST_PP_ITERATION_START_2 >= 158
+#    define BOOST_PP_ITERATION_2 158
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 157 && BOOST_PP_ITERATION_START_2 >= 157
+#    define BOOST_PP_ITERATION_2 157
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 156 && BOOST_PP_ITERATION_START_2 >= 156
+#    define BOOST_PP_ITERATION_2 156
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 155 && BOOST_PP_ITERATION_START_2 >= 155
+#    define BOOST_PP_ITERATION_2 155
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 154 && BOOST_PP_ITERATION_START_2 >= 154
+#    define BOOST_PP_ITERATION_2 154
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 153 && BOOST_PP_ITERATION_START_2 >= 153
+#    define BOOST_PP_ITERATION_2 153
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 152 && BOOST_PP_ITERATION_START_2 >= 152
+#    define BOOST_PP_ITERATION_2 152
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 151 && BOOST_PP_ITERATION_START_2 >= 151
+#    define BOOST_PP_ITERATION_2 151
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 150 && BOOST_PP_ITERATION_START_2 >= 150
+#    define BOOST_PP_ITERATION_2 150
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 149 && BOOST_PP_ITERATION_START_2 >= 149
+#    define BOOST_PP_ITERATION_2 149
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 148 && BOOST_PP_ITERATION_START_2 >= 148
+#    define BOOST_PP_ITERATION_2 148
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 147 && BOOST_PP_ITERATION_START_2 >= 147
+#    define BOOST_PP_ITERATION_2 147
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 146 && BOOST_PP_ITERATION_START_2 >= 146
+#    define BOOST_PP_ITERATION_2 146
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 145 && BOOST_PP_ITERATION_START_2 >= 145
+#    define BOOST_PP_ITERATION_2 145
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 144 && BOOST_PP_ITERATION_START_2 >= 144
+#    define BOOST_PP_ITERATION_2 144
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 143 && BOOST_PP_ITERATION_START_2 >= 143
+#    define BOOST_PP_ITERATION_2 143
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 142 && BOOST_PP_ITERATION_START_2 >= 142
+#    define BOOST_PP_ITERATION_2 142
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 141 && BOOST_PP_ITERATION_START_2 >= 141
+#    define BOOST_PP_ITERATION_2 141
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 140 && BOOST_PP_ITERATION_START_2 >= 140
+#    define BOOST_PP_ITERATION_2 140
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 139 && BOOST_PP_ITERATION_START_2 >= 139
+#    define BOOST_PP_ITERATION_2 139
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 138 && BOOST_PP_ITERATION_START_2 >= 138
+#    define BOOST_PP_ITERATION_2 138
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 137 && BOOST_PP_ITERATION_START_2 >= 137
+#    define BOOST_PP_ITERATION_2 137
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 136 && BOOST_PP_ITERATION_START_2 >= 136
+#    define BOOST_PP_ITERATION_2 136
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 135 && BOOST_PP_ITERATION_START_2 >= 135
+#    define BOOST_PP_ITERATION_2 135
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 134 && BOOST_PP_ITERATION_START_2 >= 134
+#    define BOOST_PP_ITERATION_2 134
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 133 && BOOST_PP_ITERATION_START_2 >= 133
+#    define BOOST_PP_ITERATION_2 133
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 132 && BOOST_PP_ITERATION_START_2 >= 132
+#    define BOOST_PP_ITERATION_2 132
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 131 && BOOST_PP_ITERATION_START_2 >= 131
+#    define BOOST_PP_ITERATION_2 131
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 130 && BOOST_PP_ITERATION_START_2 >= 130
+#    define BOOST_PP_ITERATION_2 130
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 129 && BOOST_PP_ITERATION_START_2 >= 129
+#    define BOOST_PP_ITERATION_2 129
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 128 && BOOST_PP_ITERATION_START_2 >= 128
+#    define BOOST_PP_ITERATION_2 128
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 127 && BOOST_PP_ITERATION_START_2 >= 127
+#    define BOOST_PP_ITERATION_2 127
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 126 && BOOST_PP_ITERATION_START_2 >= 126
+#    define BOOST_PP_ITERATION_2 126
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 125 && BOOST_PP_ITERATION_START_2 >= 125
+#    define BOOST_PP_ITERATION_2 125
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 124 && BOOST_PP_ITERATION_START_2 >= 124
+#    define BOOST_PP_ITERATION_2 124
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 123 && BOOST_PP_ITERATION_START_2 >= 123
+#    define BOOST_PP_ITERATION_2 123
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 122 && BOOST_PP_ITERATION_START_2 >= 122
+#    define BOOST_PP_ITERATION_2 122
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 121 && BOOST_PP_ITERATION_START_2 >= 121
+#    define BOOST_PP_ITERATION_2 121
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 120 && BOOST_PP_ITERATION_START_2 >= 120
+#    define BOOST_PP_ITERATION_2 120
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 119 && BOOST_PP_ITERATION_START_2 >= 119
+#    define BOOST_PP_ITERATION_2 119
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 118 && BOOST_PP_ITERATION_START_2 >= 118
+#    define BOOST_PP_ITERATION_2 118
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 117 && BOOST_PP_ITERATION_START_2 >= 117
+#    define BOOST_PP_ITERATION_2 117
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 116 && BOOST_PP_ITERATION_START_2 >= 116
+#    define BOOST_PP_ITERATION_2 116
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 115 && BOOST_PP_ITERATION_START_2 >= 115
+#    define BOOST_PP_ITERATION_2 115
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 114 && BOOST_PP_ITERATION_START_2 >= 114
+#    define BOOST_PP_ITERATION_2 114
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 113 && BOOST_PP_ITERATION_START_2 >= 113
+#    define BOOST_PP_ITERATION_2 113
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 112 && BOOST_PP_ITERATION_START_2 >= 112
+#    define BOOST_PP_ITERATION_2 112
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 111 && BOOST_PP_ITERATION_START_2 >= 111
+#    define BOOST_PP_ITERATION_2 111
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 110 && BOOST_PP_ITERATION_START_2 >= 110
+#    define BOOST_PP_ITERATION_2 110
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 109 && BOOST_PP_ITERATION_START_2 >= 109
+#    define BOOST_PP_ITERATION_2 109
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 108 && BOOST_PP_ITERATION_START_2 >= 108
+#    define BOOST_PP_ITERATION_2 108
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 107 && BOOST_PP_ITERATION_START_2 >= 107
+#    define BOOST_PP_ITERATION_2 107
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 106 && BOOST_PP_ITERATION_START_2 >= 106
+#    define BOOST_PP_ITERATION_2 106
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 105 && BOOST_PP_ITERATION_START_2 >= 105
+#    define BOOST_PP_ITERATION_2 105
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 104 && BOOST_PP_ITERATION_START_2 >= 104
+#    define BOOST_PP_ITERATION_2 104
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 103 && BOOST_PP_ITERATION_START_2 >= 103
+#    define BOOST_PP_ITERATION_2 103
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 102 && BOOST_PP_ITERATION_START_2 >= 102
+#    define BOOST_PP_ITERATION_2 102
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 101 && BOOST_PP_ITERATION_START_2 >= 101
+#    define BOOST_PP_ITERATION_2 101
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 100 && BOOST_PP_ITERATION_START_2 >= 100
+#    define BOOST_PP_ITERATION_2 100
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 99 && BOOST_PP_ITERATION_START_2 >= 99
+#    define BOOST_PP_ITERATION_2 99
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 98 && BOOST_PP_ITERATION_START_2 >= 98
+#    define BOOST_PP_ITERATION_2 98
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 97 && BOOST_PP_ITERATION_START_2 >= 97
+#    define BOOST_PP_ITERATION_2 97
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 96 && BOOST_PP_ITERATION_START_2 >= 96
+#    define BOOST_PP_ITERATION_2 96
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 95 && BOOST_PP_ITERATION_START_2 >= 95
+#    define BOOST_PP_ITERATION_2 95
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 94 && BOOST_PP_ITERATION_START_2 >= 94
+#    define BOOST_PP_ITERATION_2 94
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 93 && BOOST_PP_ITERATION_START_2 >= 93
+#    define BOOST_PP_ITERATION_2 93
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 92 && BOOST_PP_ITERATION_START_2 >= 92
+#    define BOOST_PP_ITERATION_2 92
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 91 && BOOST_PP_ITERATION_START_2 >= 91
+#    define BOOST_PP_ITERATION_2 91
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 90 && BOOST_PP_ITERATION_START_2 >= 90
+#    define BOOST_PP_ITERATION_2 90
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 89 && BOOST_PP_ITERATION_START_2 >= 89
+#    define BOOST_PP_ITERATION_2 89
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 88 && BOOST_PP_ITERATION_START_2 >= 88
+#    define BOOST_PP_ITERATION_2 88
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 87 && BOOST_PP_ITERATION_START_2 >= 87
+#    define BOOST_PP_ITERATION_2 87
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 86 && BOOST_PP_ITERATION_START_2 >= 86
+#    define BOOST_PP_ITERATION_2 86
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 85 && BOOST_PP_ITERATION_START_2 >= 85
+#    define BOOST_PP_ITERATION_2 85
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 84 && BOOST_PP_ITERATION_START_2 >= 84
+#    define BOOST_PP_ITERATION_2 84
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 83 && BOOST_PP_ITERATION_START_2 >= 83
+#    define BOOST_PP_ITERATION_2 83
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 82 && BOOST_PP_ITERATION_START_2 >= 82
+#    define BOOST_PP_ITERATION_2 82
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 81 && BOOST_PP_ITERATION_START_2 >= 81
+#    define BOOST_PP_ITERATION_2 81
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 80 && BOOST_PP_ITERATION_START_2 >= 80
+#    define BOOST_PP_ITERATION_2 80
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 79 && BOOST_PP_ITERATION_START_2 >= 79
+#    define BOOST_PP_ITERATION_2 79
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 78 && BOOST_PP_ITERATION_START_2 >= 78
+#    define BOOST_PP_ITERATION_2 78
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 77 && BOOST_PP_ITERATION_START_2 >= 77
+#    define BOOST_PP_ITERATION_2 77
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 76 && BOOST_PP_ITERATION_START_2 >= 76
+#    define BOOST_PP_ITERATION_2 76
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 75 && BOOST_PP_ITERATION_START_2 >= 75
+#    define BOOST_PP_ITERATION_2 75
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 74 && BOOST_PP_ITERATION_START_2 >= 74
+#    define BOOST_PP_ITERATION_2 74
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 73 && BOOST_PP_ITERATION_START_2 >= 73
+#    define BOOST_PP_ITERATION_2 73
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 72 && BOOST_PP_ITERATION_START_2 >= 72
+#    define BOOST_PP_ITERATION_2 72
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 71 && BOOST_PP_ITERATION_START_2 >= 71
+#    define BOOST_PP_ITERATION_2 71
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 70 && BOOST_PP_ITERATION_START_2 >= 70
+#    define BOOST_PP_ITERATION_2 70
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 69 && BOOST_PP_ITERATION_START_2 >= 69
+#    define BOOST_PP_ITERATION_2 69
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 68 && BOOST_PP_ITERATION_START_2 >= 68
+#    define BOOST_PP_ITERATION_2 68
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 67 && BOOST_PP_ITERATION_START_2 >= 67
+#    define BOOST_PP_ITERATION_2 67
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 66 && BOOST_PP_ITERATION_START_2 >= 66
+#    define BOOST_PP_ITERATION_2 66
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 65 && BOOST_PP_ITERATION_START_2 >= 65
+#    define BOOST_PP_ITERATION_2 65
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 64 && BOOST_PP_ITERATION_START_2 >= 64
+#    define BOOST_PP_ITERATION_2 64
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 63 && BOOST_PP_ITERATION_START_2 >= 63
+#    define BOOST_PP_ITERATION_2 63
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 62 && BOOST_PP_ITERATION_START_2 >= 62
+#    define BOOST_PP_ITERATION_2 62
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 61 && BOOST_PP_ITERATION_START_2 >= 61
+#    define BOOST_PP_ITERATION_2 61
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 60 && BOOST_PP_ITERATION_START_2 >= 60
+#    define BOOST_PP_ITERATION_2 60
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 59 && BOOST_PP_ITERATION_START_2 >= 59
+#    define BOOST_PP_ITERATION_2 59
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 58 && BOOST_PP_ITERATION_START_2 >= 58
+#    define BOOST_PP_ITERATION_2 58
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 57 && BOOST_PP_ITERATION_START_2 >= 57
+#    define BOOST_PP_ITERATION_2 57
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 56 && BOOST_PP_ITERATION_START_2 >= 56
+#    define BOOST_PP_ITERATION_2 56
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 55 && BOOST_PP_ITERATION_START_2 >= 55
+#    define BOOST_PP_ITERATION_2 55
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 54 && BOOST_PP_ITERATION_START_2 >= 54
+#    define BOOST_PP_ITERATION_2 54
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 53 && BOOST_PP_ITERATION_START_2 >= 53
+#    define BOOST_PP_ITERATION_2 53
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 52 && BOOST_PP_ITERATION_START_2 >= 52
+#    define BOOST_PP_ITERATION_2 52
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 51 && BOOST_PP_ITERATION_START_2 >= 51
+#    define BOOST_PP_ITERATION_2 51
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 50 && BOOST_PP_ITERATION_START_2 >= 50
+#    define BOOST_PP_ITERATION_2 50
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 49 && BOOST_PP_ITERATION_START_2 >= 49
+#    define BOOST_PP_ITERATION_2 49
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 48 && BOOST_PP_ITERATION_START_2 >= 48
+#    define BOOST_PP_ITERATION_2 48
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 47 && BOOST_PP_ITERATION_START_2 >= 47
+#    define BOOST_PP_ITERATION_2 47
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 46 && BOOST_PP_ITERATION_START_2 >= 46
+#    define BOOST_PP_ITERATION_2 46
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 45 && BOOST_PP_ITERATION_START_2 >= 45
+#    define BOOST_PP_ITERATION_2 45
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 44 && BOOST_PP_ITERATION_START_2 >= 44
+#    define BOOST_PP_ITERATION_2 44
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 43 && BOOST_PP_ITERATION_START_2 >= 43
+#    define BOOST_PP_ITERATION_2 43
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 42 && BOOST_PP_ITERATION_START_2 >= 42
+#    define BOOST_PP_ITERATION_2 42
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 41 && BOOST_PP_ITERATION_START_2 >= 41
+#    define BOOST_PP_ITERATION_2 41
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 40 && BOOST_PP_ITERATION_START_2 >= 40
+#    define BOOST_PP_ITERATION_2 40
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 39 && BOOST_PP_ITERATION_START_2 >= 39
+#    define BOOST_PP_ITERATION_2 39
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 38 && BOOST_PP_ITERATION_START_2 >= 38
+#    define BOOST_PP_ITERATION_2 38
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 37 && BOOST_PP_ITERATION_START_2 >= 37
+#    define BOOST_PP_ITERATION_2 37
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 36 && BOOST_PP_ITERATION_START_2 >= 36
+#    define BOOST_PP_ITERATION_2 36
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 35 && BOOST_PP_ITERATION_START_2 >= 35
+#    define BOOST_PP_ITERATION_2 35
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 34 && BOOST_PP_ITERATION_START_2 >= 34
+#    define BOOST_PP_ITERATION_2 34
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 33 && BOOST_PP_ITERATION_START_2 >= 33
+#    define BOOST_PP_ITERATION_2 33
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 32 && BOOST_PP_ITERATION_START_2 >= 32
+#    define BOOST_PP_ITERATION_2 32
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 31 && BOOST_PP_ITERATION_START_2 >= 31
+#    define BOOST_PP_ITERATION_2 31
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 30 && BOOST_PP_ITERATION_START_2 >= 30
+#    define BOOST_PP_ITERATION_2 30
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 29 && BOOST_PP_ITERATION_START_2 >= 29
+#    define BOOST_PP_ITERATION_2 29
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 28 && BOOST_PP_ITERATION_START_2 >= 28
+#    define BOOST_PP_ITERATION_2 28
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 27 && BOOST_PP_ITERATION_START_2 >= 27
+#    define BOOST_PP_ITERATION_2 27
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 26 && BOOST_PP_ITERATION_START_2 >= 26
+#    define BOOST_PP_ITERATION_2 26
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 25 && BOOST_PP_ITERATION_START_2 >= 25
+#    define BOOST_PP_ITERATION_2 25
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 24 && BOOST_PP_ITERATION_START_2 >= 24
+#    define BOOST_PP_ITERATION_2 24
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 23 && BOOST_PP_ITERATION_START_2 >= 23
+#    define BOOST_PP_ITERATION_2 23
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 22 && BOOST_PP_ITERATION_START_2 >= 22
+#    define BOOST_PP_ITERATION_2 22
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 21 && BOOST_PP_ITERATION_START_2 >= 21
+#    define BOOST_PP_ITERATION_2 21
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 20 && BOOST_PP_ITERATION_START_2 >= 20
+#    define BOOST_PP_ITERATION_2 20
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 19 && BOOST_PP_ITERATION_START_2 >= 19
+#    define BOOST_PP_ITERATION_2 19
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 18 && BOOST_PP_ITERATION_START_2 >= 18
+#    define BOOST_PP_ITERATION_2 18
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 17 && BOOST_PP_ITERATION_START_2 >= 17
+#    define BOOST_PP_ITERATION_2 17
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 16 && BOOST_PP_ITERATION_START_2 >= 16
+#    define BOOST_PP_ITERATION_2 16
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 15 && BOOST_PP_ITERATION_START_2 >= 15
+#    define BOOST_PP_ITERATION_2 15
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 14 && BOOST_PP_ITERATION_START_2 >= 14
+#    define BOOST_PP_ITERATION_2 14
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 13 && BOOST_PP_ITERATION_START_2 >= 13
+#    define BOOST_PP_ITERATION_2 13
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 12 && BOOST_PP_ITERATION_START_2 >= 12
+#    define BOOST_PP_ITERATION_2 12
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 11 && BOOST_PP_ITERATION_START_2 >= 11
+#    define BOOST_PP_ITERATION_2 11
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 10 && BOOST_PP_ITERATION_START_2 >= 10
+#    define BOOST_PP_ITERATION_2 10
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 9 && BOOST_PP_ITERATION_START_2 >= 9
+#    define BOOST_PP_ITERATION_2 9
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 8 && BOOST_PP_ITERATION_START_2 >= 8
+#    define BOOST_PP_ITERATION_2 8
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 7 && BOOST_PP_ITERATION_START_2 >= 7
+#    define BOOST_PP_ITERATION_2 7
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 6 && BOOST_PP_ITERATION_START_2 >= 6
+#    define BOOST_PP_ITERATION_2 6
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 5 && BOOST_PP_ITERATION_START_2 >= 5
+#    define BOOST_PP_ITERATION_2 5
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 4 && BOOST_PP_ITERATION_START_2 >= 4
+#    define BOOST_PP_ITERATION_2 4
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 3 && BOOST_PP_ITERATION_START_2 >= 3
+#    define BOOST_PP_ITERATION_2 3
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 2 && BOOST_PP_ITERATION_START_2 >= 2
+#    define BOOST_PP_ITERATION_2 2
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 1 && BOOST_PP_ITERATION_START_2 >= 1
+#    define BOOST_PP_ITERATION_2 1
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
+# if BOOST_PP_ITERATION_FINISH_2 <= 0 && BOOST_PP_ITERATION_START_2 >= 0
+#    define BOOST_PP_ITERATION_2 0
+#    include BOOST_PP_FILENAME_2
+#    undef BOOST_PP_ITERATION_2
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/reverse3.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/reverse3.hpp
new file mode 100644
index 0000000..0a65514
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/reverse3.hpp
@@ -0,0 +1,1296 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# if BOOST_PP_ITERATION_FINISH_3 <= 256 && BOOST_PP_ITERATION_START_3 >= 256
+#    define BOOST_PP_ITERATION_3 256
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 255 && BOOST_PP_ITERATION_START_3 >= 255
+#    define BOOST_PP_ITERATION_3 255
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 254 && BOOST_PP_ITERATION_START_3 >= 254
+#    define BOOST_PP_ITERATION_3 254
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 253 && BOOST_PP_ITERATION_START_3 >= 253
+#    define BOOST_PP_ITERATION_3 253
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 252 && BOOST_PP_ITERATION_START_3 >= 252
+#    define BOOST_PP_ITERATION_3 252
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 251 && BOOST_PP_ITERATION_START_3 >= 251
+#    define BOOST_PP_ITERATION_3 251
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 250 && BOOST_PP_ITERATION_START_3 >= 250
+#    define BOOST_PP_ITERATION_3 250
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 249 && BOOST_PP_ITERATION_START_3 >= 249
+#    define BOOST_PP_ITERATION_3 249
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 248 && BOOST_PP_ITERATION_START_3 >= 248
+#    define BOOST_PP_ITERATION_3 248
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 247 && BOOST_PP_ITERATION_START_3 >= 247
+#    define BOOST_PP_ITERATION_3 247
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 246 && BOOST_PP_ITERATION_START_3 >= 246
+#    define BOOST_PP_ITERATION_3 246
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 245 && BOOST_PP_ITERATION_START_3 >= 245
+#    define BOOST_PP_ITERATION_3 245
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 244 && BOOST_PP_ITERATION_START_3 >= 244
+#    define BOOST_PP_ITERATION_3 244
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 243 && BOOST_PP_ITERATION_START_3 >= 243
+#    define BOOST_PP_ITERATION_3 243
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 242 && BOOST_PP_ITERATION_START_3 >= 242
+#    define BOOST_PP_ITERATION_3 242
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 241 && BOOST_PP_ITERATION_START_3 >= 241
+#    define BOOST_PP_ITERATION_3 241
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 240 && BOOST_PP_ITERATION_START_3 >= 240
+#    define BOOST_PP_ITERATION_3 240
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 239 && BOOST_PP_ITERATION_START_3 >= 239
+#    define BOOST_PP_ITERATION_3 239
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 238 && BOOST_PP_ITERATION_START_3 >= 238
+#    define BOOST_PP_ITERATION_3 238
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 237 && BOOST_PP_ITERATION_START_3 >= 237
+#    define BOOST_PP_ITERATION_3 237
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 236 && BOOST_PP_ITERATION_START_3 >= 236
+#    define BOOST_PP_ITERATION_3 236
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 235 && BOOST_PP_ITERATION_START_3 >= 235
+#    define BOOST_PP_ITERATION_3 235
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 234 && BOOST_PP_ITERATION_START_3 >= 234
+#    define BOOST_PP_ITERATION_3 234
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 233 && BOOST_PP_ITERATION_START_3 >= 233
+#    define BOOST_PP_ITERATION_3 233
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 232 && BOOST_PP_ITERATION_START_3 >= 232
+#    define BOOST_PP_ITERATION_3 232
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 231 && BOOST_PP_ITERATION_START_3 >= 231
+#    define BOOST_PP_ITERATION_3 231
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 230 && BOOST_PP_ITERATION_START_3 >= 230
+#    define BOOST_PP_ITERATION_3 230
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 229 && BOOST_PP_ITERATION_START_3 >= 229
+#    define BOOST_PP_ITERATION_3 229
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 228 && BOOST_PP_ITERATION_START_3 >= 228
+#    define BOOST_PP_ITERATION_3 228
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 227 && BOOST_PP_ITERATION_START_3 >= 227
+#    define BOOST_PP_ITERATION_3 227
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 226 && BOOST_PP_ITERATION_START_3 >= 226
+#    define BOOST_PP_ITERATION_3 226
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 225 && BOOST_PP_ITERATION_START_3 >= 225
+#    define BOOST_PP_ITERATION_3 225
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 224 && BOOST_PP_ITERATION_START_3 >= 224
+#    define BOOST_PP_ITERATION_3 224
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 223 && BOOST_PP_ITERATION_START_3 >= 223
+#    define BOOST_PP_ITERATION_3 223
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 222 && BOOST_PP_ITERATION_START_3 >= 222
+#    define BOOST_PP_ITERATION_3 222
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 221 && BOOST_PP_ITERATION_START_3 >= 221
+#    define BOOST_PP_ITERATION_3 221
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 220 && BOOST_PP_ITERATION_START_3 >= 220
+#    define BOOST_PP_ITERATION_3 220
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 219 && BOOST_PP_ITERATION_START_3 >= 219
+#    define BOOST_PP_ITERATION_3 219
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 218 && BOOST_PP_ITERATION_START_3 >= 218
+#    define BOOST_PP_ITERATION_3 218
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 217 && BOOST_PP_ITERATION_START_3 >= 217
+#    define BOOST_PP_ITERATION_3 217
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 216 && BOOST_PP_ITERATION_START_3 >= 216
+#    define BOOST_PP_ITERATION_3 216
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 215 && BOOST_PP_ITERATION_START_3 >= 215
+#    define BOOST_PP_ITERATION_3 215
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 214 && BOOST_PP_ITERATION_START_3 >= 214
+#    define BOOST_PP_ITERATION_3 214
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 213 && BOOST_PP_ITERATION_START_3 >= 213
+#    define BOOST_PP_ITERATION_3 213
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 212 && BOOST_PP_ITERATION_START_3 >= 212
+#    define BOOST_PP_ITERATION_3 212
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 211 && BOOST_PP_ITERATION_START_3 >= 211
+#    define BOOST_PP_ITERATION_3 211
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 210 && BOOST_PP_ITERATION_START_3 >= 210
+#    define BOOST_PP_ITERATION_3 210
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 209 && BOOST_PP_ITERATION_START_3 >= 209
+#    define BOOST_PP_ITERATION_3 209
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 208 && BOOST_PP_ITERATION_START_3 >= 208
+#    define BOOST_PP_ITERATION_3 208
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 207 && BOOST_PP_ITERATION_START_3 >= 207
+#    define BOOST_PP_ITERATION_3 207
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 206 && BOOST_PP_ITERATION_START_3 >= 206
+#    define BOOST_PP_ITERATION_3 206
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 205 && BOOST_PP_ITERATION_START_3 >= 205
+#    define BOOST_PP_ITERATION_3 205
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 204 && BOOST_PP_ITERATION_START_3 >= 204
+#    define BOOST_PP_ITERATION_3 204
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 203 && BOOST_PP_ITERATION_START_3 >= 203
+#    define BOOST_PP_ITERATION_3 203
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 202 && BOOST_PP_ITERATION_START_3 >= 202
+#    define BOOST_PP_ITERATION_3 202
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 201 && BOOST_PP_ITERATION_START_3 >= 201
+#    define BOOST_PP_ITERATION_3 201
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 200 && BOOST_PP_ITERATION_START_3 >= 200
+#    define BOOST_PP_ITERATION_3 200
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 199 && BOOST_PP_ITERATION_START_3 >= 199
+#    define BOOST_PP_ITERATION_3 199
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 198 && BOOST_PP_ITERATION_START_3 >= 198
+#    define BOOST_PP_ITERATION_3 198
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 197 && BOOST_PP_ITERATION_START_3 >= 197
+#    define BOOST_PP_ITERATION_3 197
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 196 && BOOST_PP_ITERATION_START_3 >= 196
+#    define BOOST_PP_ITERATION_3 196
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 195 && BOOST_PP_ITERATION_START_3 >= 195
+#    define BOOST_PP_ITERATION_3 195
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 194 && BOOST_PP_ITERATION_START_3 >= 194
+#    define BOOST_PP_ITERATION_3 194
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 193 && BOOST_PP_ITERATION_START_3 >= 193
+#    define BOOST_PP_ITERATION_3 193
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 192 && BOOST_PP_ITERATION_START_3 >= 192
+#    define BOOST_PP_ITERATION_3 192
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 191 && BOOST_PP_ITERATION_START_3 >= 191
+#    define BOOST_PP_ITERATION_3 191
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 190 && BOOST_PP_ITERATION_START_3 >= 190
+#    define BOOST_PP_ITERATION_3 190
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 189 && BOOST_PP_ITERATION_START_3 >= 189
+#    define BOOST_PP_ITERATION_3 189
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 188 && BOOST_PP_ITERATION_START_3 >= 188
+#    define BOOST_PP_ITERATION_3 188
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 187 && BOOST_PP_ITERATION_START_3 >= 187
+#    define BOOST_PP_ITERATION_3 187
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 186 && BOOST_PP_ITERATION_START_3 >= 186
+#    define BOOST_PP_ITERATION_3 186
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 185 && BOOST_PP_ITERATION_START_3 >= 185
+#    define BOOST_PP_ITERATION_3 185
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 184 && BOOST_PP_ITERATION_START_3 >= 184
+#    define BOOST_PP_ITERATION_3 184
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 183 && BOOST_PP_ITERATION_START_3 >= 183
+#    define BOOST_PP_ITERATION_3 183
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 182 && BOOST_PP_ITERATION_START_3 >= 182
+#    define BOOST_PP_ITERATION_3 182
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 181 && BOOST_PP_ITERATION_START_3 >= 181
+#    define BOOST_PP_ITERATION_3 181
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 180 && BOOST_PP_ITERATION_START_3 >= 180
+#    define BOOST_PP_ITERATION_3 180
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 179 && BOOST_PP_ITERATION_START_3 >= 179
+#    define BOOST_PP_ITERATION_3 179
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 178 && BOOST_PP_ITERATION_START_3 >= 178
+#    define BOOST_PP_ITERATION_3 178
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 177 && BOOST_PP_ITERATION_START_3 >= 177
+#    define BOOST_PP_ITERATION_3 177
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 176 && BOOST_PP_ITERATION_START_3 >= 176
+#    define BOOST_PP_ITERATION_3 176
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 175 && BOOST_PP_ITERATION_START_3 >= 175
+#    define BOOST_PP_ITERATION_3 175
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 174 && BOOST_PP_ITERATION_START_3 >= 174
+#    define BOOST_PP_ITERATION_3 174
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 173 && BOOST_PP_ITERATION_START_3 >= 173
+#    define BOOST_PP_ITERATION_3 173
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 172 && BOOST_PP_ITERATION_START_3 >= 172
+#    define BOOST_PP_ITERATION_3 172
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 171 && BOOST_PP_ITERATION_START_3 >= 171
+#    define BOOST_PP_ITERATION_3 171
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 170 && BOOST_PP_ITERATION_START_3 >= 170
+#    define BOOST_PP_ITERATION_3 170
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 169 && BOOST_PP_ITERATION_START_3 >= 169
+#    define BOOST_PP_ITERATION_3 169
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 168 && BOOST_PP_ITERATION_START_3 >= 168
+#    define BOOST_PP_ITERATION_3 168
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 167 && BOOST_PP_ITERATION_START_3 >= 167
+#    define BOOST_PP_ITERATION_3 167
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 166 && BOOST_PP_ITERATION_START_3 >= 166
+#    define BOOST_PP_ITERATION_3 166
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 165 && BOOST_PP_ITERATION_START_3 >= 165
+#    define BOOST_PP_ITERATION_3 165
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 164 && BOOST_PP_ITERATION_START_3 >= 164
+#    define BOOST_PP_ITERATION_3 164
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 163 && BOOST_PP_ITERATION_START_3 >= 163
+#    define BOOST_PP_ITERATION_3 163
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 162 && BOOST_PP_ITERATION_START_3 >= 162
+#    define BOOST_PP_ITERATION_3 162
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 161 && BOOST_PP_ITERATION_START_3 >= 161
+#    define BOOST_PP_ITERATION_3 161
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 160 && BOOST_PP_ITERATION_START_3 >= 160
+#    define BOOST_PP_ITERATION_3 160
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 159 && BOOST_PP_ITERATION_START_3 >= 159
+#    define BOOST_PP_ITERATION_3 159
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 158 && BOOST_PP_ITERATION_START_3 >= 158
+#    define BOOST_PP_ITERATION_3 158
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 157 && BOOST_PP_ITERATION_START_3 >= 157
+#    define BOOST_PP_ITERATION_3 157
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 156 && BOOST_PP_ITERATION_START_3 >= 156
+#    define BOOST_PP_ITERATION_3 156
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 155 && BOOST_PP_ITERATION_START_3 >= 155
+#    define BOOST_PP_ITERATION_3 155
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 154 && BOOST_PP_ITERATION_START_3 >= 154
+#    define BOOST_PP_ITERATION_3 154
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 153 && BOOST_PP_ITERATION_START_3 >= 153
+#    define BOOST_PP_ITERATION_3 153
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 152 && BOOST_PP_ITERATION_START_3 >= 152
+#    define BOOST_PP_ITERATION_3 152
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 151 && BOOST_PP_ITERATION_START_3 >= 151
+#    define BOOST_PP_ITERATION_3 151
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 150 && BOOST_PP_ITERATION_START_3 >= 150
+#    define BOOST_PP_ITERATION_3 150
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 149 && BOOST_PP_ITERATION_START_3 >= 149
+#    define BOOST_PP_ITERATION_3 149
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 148 && BOOST_PP_ITERATION_START_3 >= 148
+#    define BOOST_PP_ITERATION_3 148
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 147 && BOOST_PP_ITERATION_START_3 >= 147
+#    define BOOST_PP_ITERATION_3 147
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 146 && BOOST_PP_ITERATION_START_3 >= 146
+#    define BOOST_PP_ITERATION_3 146
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 145 && BOOST_PP_ITERATION_START_3 >= 145
+#    define BOOST_PP_ITERATION_3 145
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 144 && BOOST_PP_ITERATION_START_3 >= 144
+#    define BOOST_PP_ITERATION_3 144
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 143 && BOOST_PP_ITERATION_START_3 >= 143
+#    define BOOST_PP_ITERATION_3 143
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 142 && BOOST_PP_ITERATION_START_3 >= 142
+#    define BOOST_PP_ITERATION_3 142
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 141 && BOOST_PP_ITERATION_START_3 >= 141
+#    define BOOST_PP_ITERATION_3 141
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 140 && BOOST_PP_ITERATION_START_3 >= 140
+#    define BOOST_PP_ITERATION_3 140
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 139 && BOOST_PP_ITERATION_START_3 >= 139
+#    define BOOST_PP_ITERATION_3 139
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 138 && BOOST_PP_ITERATION_START_3 >= 138
+#    define BOOST_PP_ITERATION_3 138
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 137 && BOOST_PP_ITERATION_START_3 >= 137
+#    define BOOST_PP_ITERATION_3 137
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 136 && BOOST_PP_ITERATION_START_3 >= 136
+#    define BOOST_PP_ITERATION_3 136
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 135 && BOOST_PP_ITERATION_START_3 >= 135
+#    define BOOST_PP_ITERATION_3 135
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 134 && BOOST_PP_ITERATION_START_3 >= 134
+#    define BOOST_PP_ITERATION_3 134
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 133 && BOOST_PP_ITERATION_START_3 >= 133
+#    define BOOST_PP_ITERATION_3 133
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 132 && BOOST_PP_ITERATION_START_3 >= 132
+#    define BOOST_PP_ITERATION_3 132
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 131 && BOOST_PP_ITERATION_START_3 >= 131
+#    define BOOST_PP_ITERATION_3 131
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 130 && BOOST_PP_ITERATION_START_3 >= 130
+#    define BOOST_PP_ITERATION_3 130
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 129 && BOOST_PP_ITERATION_START_3 >= 129
+#    define BOOST_PP_ITERATION_3 129
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 128 && BOOST_PP_ITERATION_START_3 >= 128
+#    define BOOST_PP_ITERATION_3 128
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 127 && BOOST_PP_ITERATION_START_3 >= 127
+#    define BOOST_PP_ITERATION_3 127
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 126 && BOOST_PP_ITERATION_START_3 >= 126
+#    define BOOST_PP_ITERATION_3 126
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 125 && BOOST_PP_ITERATION_START_3 >= 125
+#    define BOOST_PP_ITERATION_3 125
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 124 && BOOST_PP_ITERATION_START_3 >= 124
+#    define BOOST_PP_ITERATION_3 124
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 123 && BOOST_PP_ITERATION_START_3 >= 123
+#    define BOOST_PP_ITERATION_3 123
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 122 && BOOST_PP_ITERATION_START_3 >= 122
+#    define BOOST_PP_ITERATION_3 122
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 121 && BOOST_PP_ITERATION_START_3 >= 121
+#    define BOOST_PP_ITERATION_3 121
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 120 && BOOST_PP_ITERATION_START_3 >= 120
+#    define BOOST_PP_ITERATION_3 120
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 119 && BOOST_PP_ITERATION_START_3 >= 119
+#    define BOOST_PP_ITERATION_3 119
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 118 && BOOST_PP_ITERATION_START_3 >= 118
+#    define BOOST_PP_ITERATION_3 118
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 117 && BOOST_PP_ITERATION_START_3 >= 117
+#    define BOOST_PP_ITERATION_3 117
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 116 && BOOST_PP_ITERATION_START_3 >= 116
+#    define BOOST_PP_ITERATION_3 116
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 115 && BOOST_PP_ITERATION_START_3 >= 115
+#    define BOOST_PP_ITERATION_3 115
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 114 && BOOST_PP_ITERATION_START_3 >= 114
+#    define BOOST_PP_ITERATION_3 114
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 113 && BOOST_PP_ITERATION_START_3 >= 113
+#    define BOOST_PP_ITERATION_3 113
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 112 && BOOST_PP_ITERATION_START_3 >= 112
+#    define BOOST_PP_ITERATION_3 112
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 111 && BOOST_PP_ITERATION_START_3 >= 111
+#    define BOOST_PP_ITERATION_3 111
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 110 && BOOST_PP_ITERATION_START_3 >= 110
+#    define BOOST_PP_ITERATION_3 110
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 109 && BOOST_PP_ITERATION_START_3 >= 109
+#    define BOOST_PP_ITERATION_3 109
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 108 && BOOST_PP_ITERATION_START_3 >= 108
+#    define BOOST_PP_ITERATION_3 108
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 107 && BOOST_PP_ITERATION_START_3 >= 107
+#    define BOOST_PP_ITERATION_3 107
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 106 && BOOST_PP_ITERATION_START_3 >= 106
+#    define BOOST_PP_ITERATION_3 106
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 105 && BOOST_PP_ITERATION_START_3 >= 105
+#    define BOOST_PP_ITERATION_3 105
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 104 && BOOST_PP_ITERATION_START_3 >= 104
+#    define BOOST_PP_ITERATION_3 104
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 103 && BOOST_PP_ITERATION_START_3 >= 103
+#    define BOOST_PP_ITERATION_3 103
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 102 && BOOST_PP_ITERATION_START_3 >= 102
+#    define BOOST_PP_ITERATION_3 102
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 101 && BOOST_PP_ITERATION_START_3 >= 101
+#    define BOOST_PP_ITERATION_3 101
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 100 && BOOST_PP_ITERATION_START_3 >= 100
+#    define BOOST_PP_ITERATION_3 100
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 99 && BOOST_PP_ITERATION_START_3 >= 99
+#    define BOOST_PP_ITERATION_3 99
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 98 && BOOST_PP_ITERATION_START_3 >= 98
+#    define BOOST_PP_ITERATION_3 98
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 97 && BOOST_PP_ITERATION_START_3 >= 97
+#    define BOOST_PP_ITERATION_3 97
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 96 && BOOST_PP_ITERATION_START_3 >= 96
+#    define BOOST_PP_ITERATION_3 96
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 95 && BOOST_PP_ITERATION_START_3 >= 95
+#    define BOOST_PP_ITERATION_3 95
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 94 && BOOST_PP_ITERATION_START_3 >= 94
+#    define BOOST_PP_ITERATION_3 94
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 93 && BOOST_PP_ITERATION_START_3 >= 93
+#    define BOOST_PP_ITERATION_3 93
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 92 && BOOST_PP_ITERATION_START_3 >= 92
+#    define BOOST_PP_ITERATION_3 92
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 91 && BOOST_PP_ITERATION_START_3 >= 91
+#    define BOOST_PP_ITERATION_3 91
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 90 && BOOST_PP_ITERATION_START_3 >= 90
+#    define BOOST_PP_ITERATION_3 90
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 89 && BOOST_PP_ITERATION_START_3 >= 89
+#    define BOOST_PP_ITERATION_3 89
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 88 && BOOST_PP_ITERATION_START_3 >= 88
+#    define BOOST_PP_ITERATION_3 88
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 87 && BOOST_PP_ITERATION_START_3 >= 87
+#    define BOOST_PP_ITERATION_3 87
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 86 && BOOST_PP_ITERATION_START_3 >= 86
+#    define BOOST_PP_ITERATION_3 86
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 85 && BOOST_PP_ITERATION_START_3 >= 85
+#    define BOOST_PP_ITERATION_3 85
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 84 && BOOST_PP_ITERATION_START_3 >= 84
+#    define BOOST_PP_ITERATION_3 84
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 83 && BOOST_PP_ITERATION_START_3 >= 83
+#    define BOOST_PP_ITERATION_3 83
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 82 && BOOST_PP_ITERATION_START_3 >= 82
+#    define BOOST_PP_ITERATION_3 82
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 81 && BOOST_PP_ITERATION_START_3 >= 81
+#    define BOOST_PP_ITERATION_3 81
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 80 && BOOST_PP_ITERATION_START_3 >= 80
+#    define BOOST_PP_ITERATION_3 80
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 79 && BOOST_PP_ITERATION_START_3 >= 79
+#    define BOOST_PP_ITERATION_3 79
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 78 && BOOST_PP_ITERATION_START_3 >= 78
+#    define BOOST_PP_ITERATION_3 78
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 77 && BOOST_PP_ITERATION_START_3 >= 77
+#    define BOOST_PP_ITERATION_3 77
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 76 && BOOST_PP_ITERATION_START_3 >= 76
+#    define BOOST_PP_ITERATION_3 76
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 75 && BOOST_PP_ITERATION_START_3 >= 75
+#    define BOOST_PP_ITERATION_3 75
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 74 && BOOST_PP_ITERATION_START_3 >= 74
+#    define BOOST_PP_ITERATION_3 74
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 73 && BOOST_PP_ITERATION_START_3 >= 73
+#    define BOOST_PP_ITERATION_3 73
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 72 && BOOST_PP_ITERATION_START_3 >= 72
+#    define BOOST_PP_ITERATION_3 72
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 71 && BOOST_PP_ITERATION_START_3 >= 71
+#    define BOOST_PP_ITERATION_3 71
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 70 && BOOST_PP_ITERATION_START_3 >= 70
+#    define BOOST_PP_ITERATION_3 70
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 69 && BOOST_PP_ITERATION_START_3 >= 69
+#    define BOOST_PP_ITERATION_3 69
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 68 && BOOST_PP_ITERATION_START_3 >= 68
+#    define BOOST_PP_ITERATION_3 68
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 67 && BOOST_PP_ITERATION_START_3 >= 67
+#    define BOOST_PP_ITERATION_3 67
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 66 && BOOST_PP_ITERATION_START_3 >= 66
+#    define BOOST_PP_ITERATION_3 66
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 65 && BOOST_PP_ITERATION_START_3 >= 65
+#    define BOOST_PP_ITERATION_3 65
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 64 && BOOST_PP_ITERATION_START_3 >= 64
+#    define BOOST_PP_ITERATION_3 64
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 63 && BOOST_PP_ITERATION_START_3 >= 63
+#    define BOOST_PP_ITERATION_3 63
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 62 && BOOST_PP_ITERATION_START_3 >= 62
+#    define BOOST_PP_ITERATION_3 62
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 61 && BOOST_PP_ITERATION_START_3 >= 61
+#    define BOOST_PP_ITERATION_3 61
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 60 && BOOST_PP_ITERATION_START_3 >= 60
+#    define BOOST_PP_ITERATION_3 60
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 59 && BOOST_PP_ITERATION_START_3 >= 59
+#    define BOOST_PP_ITERATION_3 59
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 58 && BOOST_PP_ITERATION_START_3 >= 58
+#    define BOOST_PP_ITERATION_3 58
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 57 && BOOST_PP_ITERATION_START_3 >= 57
+#    define BOOST_PP_ITERATION_3 57
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 56 && BOOST_PP_ITERATION_START_3 >= 56
+#    define BOOST_PP_ITERATION_3 56
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 55 && BOOST_PP_ITERATION_START_3 >= 55
+#    define BOOST_PP_ITERATION_3 55
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 54 && BOOST_PP_ITERATION_START_3 >= 54
+#    define BOOST_PP_ITERATION_3 54
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 53 && BOOST_PP_ITERATION_START_3 >= 53
+#    define BOOST_PP_ITERATION_3 53
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 52 && BOOST_PP_ITERATION_START_3 >= 52
+#    define BOOST_PP_ITERATION_3 52
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 51 && BOOST_PP_ITERATION_START_3 >= 51
+#    define BOOST_PP_ITERATION_3 51
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 50 && BOOST_PP_ITERATION_START_3 >= 50
+#    define BOOST_PP_ITERATION_3 50
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 49 && BOOST_PP_ITERATION_START_3 >= 49
+#    define BOOST_PP_ITERATION_3 49
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 48 && BOOST_PP_ITERATION_START_3 >= 48
+#    define BOOST_PP_ITERATION_3 48
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 47 && BOOST_PP_ITERATION_START_3 >= 47
+#    define BOOST_PP_ITERATION_3 47
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 46 && BOOST_PP_ITERATION_START_3 >= 46
+#    define BOOST_PP_ITERATION_3 46
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 45 && BOOST_PP_ITERATION_START_3 >= 45
+#    define BOOST_PP_ITERATION_3 45
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 44 && BOOST_PP_ITERATION_START_3 >= 44
+#    define BOOST_PP_ITERATION_3 44
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 43 && BOOST_PP_ITERATION_START_3 >= 43
+#    define BOOST_PP_ITERATION_3 43
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 42 && BOOST_PP_ITERATION_START_3 >= 42
+#    define BOOST_PP_ITERATION_3 42
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 41 && BOOST_PP_ITERATION_START_3 >= 41
+#    define BOOST_PP_ITERATION_3 41
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 40 && BOOST_PP_ITERATION_START_3 >= 40
+#    define BOOST_PP_ITERATION_3 40
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 39 && BOOST_PP_ITERATION_START_3 >= 39
+#    define BOOST_PP_ITERATION_3 39
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 38 && BOOST_PP_ITERATION_START_3 >= 38
+#    define BOOST_PP_ITERATION_3 38
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 37 && BOOST_PP_ITERATION_START_3 >= 37
+#    define BOOST_PP_ITERATION_3 37
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 36 && BOOST_PP_ITERATION_START_3 >= 36
+#    define BOOST_PP_ITERATION_3 36
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 35 && BOOST_PP_ITERATION_START_3 >= 35
+#    define BOOST_PP_ITERATION_3 35
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 34 && BOOST_PP_ITERATION_START_3 >= 34
+#    define BOOST_PP_ITERATION_3 34
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 33 && BOOST_PP_ITERATION_START_3 >= 33
+#    define BOOST_PP_ITERATION_3 33
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 32 && BOOST_PP_ITERATION_START_3 >= 32
+#    define BOOST_PP_ITERATION_3 32
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 31 && BOOST_PP_ITERATION_START_3 >= 31
+#    define BOOST_PP_ITERATION_3 31
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 30 && BOOST_PP_ITERATION_START_3 >= 30
+#    define BOOST_PP_ITERATION_3 30
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 29 && BOOST_PP_ITERATION_START_3 >= 29
+#    define BOOST_PP_ITERATION_3 29
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 28 && BOOST_PP_ITERATION_START_3 >= 28
+#    define BOOST_PP_ITERATION_3 28
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 27 && BOOST_PP_ITERATION_START_3 >= 27
+#    define BOOST_PP_ITERATION_3 27
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 26 && BOOST_PP_ITERATION_START_3 >= 26
+#    define BOOST_PP_ITERATION_3 26
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 25 && BOOST_PP_ITERATION_START_3 >= 25
+#    define BOOST_PP_ITERATION_3 25
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 24 && BOOST_PP_ITERATION_START_3 >= 24
+#    define BOOST_PP_ITERATION_3 24
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 23 && BOOST_PP_ITERATION_START_3 >= 23
+#    define BOOST_PP_ITERATION_3 23
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 22 && BOOST_PP_ITERATION_START_3 >= 22
+#    define BOOST_PP_ITERATION_3 22
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 21 && BOOST_PP_ITERATION_START_3 >= 21
+#    define BOOST_PP_ITERATION_3 21
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 20 && BOOST_PP_ITERATION_START_3 >= 20
+#    define BOOST_PP_ITERATION_3 20
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 19 && BOOST_PP_ITERATION_START_3 >= 19
+#    define BOOST_PP_ITERATION_3 19
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 18 && BOOST_PP_ITERATION_START_3 >= 18
+#    define BOOST_PP_ITERATION_3 18
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 17 && BOOST_PP_ITERATION_START_3 >= 17
+#    define BOOST_PP_ITERATION_3 17
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 16 && BOOST_PP_ITERATION_START_3 >= 16
+#    define BOOST_PP_ITERATION_3 16
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 15 && BOOST_PP_ITERATION_START_3 >= 15
+#    define BOOST_PP_ITERATION_3 15
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 14 && BOOST_PP_ITERATION_START_3 >= 14
+#    define BOOST_PP_ITERATION_3 14
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 13 && BOOST_PP_ITERATION_START_3 >= 13
+#    define BOOST_PP_ITERATION_3 13
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 12 && BOOST_PP_ITERATION_START_3 >= 12
+#    define BOOST_PP_ITERATION_3 12
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 11 && BOOST_PP_ITERATION_START_3 >= 11
+#    define BOOST_PP_ITERATION_3 11
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 10 && BOOST_PP_ITERATION_START_3 >= 10
+#    define BOOST_PP_ITERATION_3 10
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 9 && BOOST_PP_ITERATION_START_3 >= 9
+#    define BOOST_PP_ITERATION_3 9
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 8 && BOOST_PP_ITERATION_START_3 >= 8
+#    define BOOST_PP_ITERATION_3 8
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 7 && BOOST_PP_ITERATION_START_3 >= 7
+#    define BOOST_PP_ITERATION_3 7
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 6 && BOOST_PP_ITERATION_START_3 >= 6
+#    define BOOST_PP_ITERATION_3 6
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 5 && BOOST_PP_ITERATION_START_3 >= 5
+#    define BOOST_PP_ITERATION_3 5
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 4 && BOOST_PP_ITERATION_START_3 >= 4
+#    define BOOST_PP_ITERATION_3 4
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 3 && BOOST_PP_ITERATION_START_3 >= 3
+#    define BOOST_PP_ITERATION_3 3
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 2 && BOOST_PP_ITERATION_START_3 >= 2
+#    define BOOST_PP_ITERATION_3 2
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 1 && BOOST_PP_ITERATION_START_3 >= 1
+#    define BOOST_PP_ITERATION_3 1
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
+# if BOOST_PP_ITERATION_FINISH_3 <= 0 && BOOST_PP_ITERATION_START_3 >= 0
+#    define BOOST_PP_ITERATION_3 0
+#    include BOOST_PP_FILENAME_3
+#    undef BOOST_PP_ITERATION_3
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/reverse4.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/reverse4.hpp
new file mode 100644
index 0000000..3bcfba0
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/reverse4.hpp
@@ -0,0 +1,1296 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# if BOOST_PP_ITERATION_FINISH_4 <= 256 && BOOST_PP_ITERATION_START_4 >= 256
+#    define BOOST_PP_ITERATION_4 256
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 255 && BOOST_PP_ITERATION_START_4 >= 255
+#    define BOOST_PP_ITERATION_4 255
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 254 && BOOST_PP_ITERATION_START_4 >= 254
+#    define BOOST_PP_ITERATION_4 254
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 253 && BOOST_PP_ITERATION_START_4 >= 253
+#    define BOOST_PP_ITERATION_4 253
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 252 && BOOST_PP_ITERATION_START_4 >= 252
+#    define BOOST_PP_ITERATION_4 252
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 251 && BOOST_PP_ITERATION_START_4 >= 251
+#    define BOOST_PP_ITERATION_4 251
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 250 && BOOST_PP_ITERATION_START_4 >= 250
+#    define BOOST_PP_ITERATION_4 250
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 249 && BOOST_PP_ITERATION_START_4 >= 249
+#    define BOOST_PP_ITERATION_4 249
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 248 && BOOST_PP_ITERATION_START_4 >= 248
+#    define BOOST_PP_ITERATION_4 248
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 247 && BOOST_PP_ITERATION_START_4 >= 247
+#    define BOOST_PP_ITERATION_4 247
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 246 && BOOST_PP_ITERATION_START_4 >= 246
+#    define BOOST_PP_ITERATION_4 246
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 245 && BOOST_PP_ITERATION_START_4 >= 245
+#    define BOOST_PP_ITERATION_4 245
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 244 && BOOST_PP_ITERATION_START_4 >= 244
+#    define BOOST_PP_ITERATION_4 244
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 243 && BOOST_PP_ITERATION_START_4 >= 243
+#    define BOOST_PP_ITERATION_4 243
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 242 && BOOST_PP_ITERATION_START_4 >= 242
+#    define BOOST_PP_ITERATION_4 242
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 241 && BOOST_PP_ITERATION_START_4 >= 241
+#    define BOOST_PP_ITERATION_4 241
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 240 && BOOST_PP_ITERATION_START_4 >= 240
+#    define BOOST_PP_ITERATION_4 240
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 239 && BOOST_PP_ITERATION_START_4 >= 239
+#    define BOOST_PP_ITERATION_4 239
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 238 && BOOST_PP_ITERATION_START_4 >= 238
+#    define BOOST_PP_ITERATION_4 238
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 237 && BOOST_PP_ITERATION_START_4 >= 237
+#    define BOOST_PP_ITERATION_4 237
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 236 && BOOST_PP_ITERATION_START_4 >= 236
+#    define BOOST_PP_ITERATION_4 236
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 235 && BOOST_PP_ITERATION_START_4 >= 235
+#    define BOOST_PP_ITERATION_4 235
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 234 && BOOST_PP_ITERATION_START_4 >= 234
+#    define BOOST_PP_ITERATION_4 234
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 233 && BOOST_PP_ITERATION_START_4 >= 233
+#    define BOOST_PP_ITERATION_4 233
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 232 && BOOST_PP_ITERATION_START_4 >= 232
+#    define BOOST_PP_ITERATION_4 232
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 231 && BOOST_PP_ITERATION_START_4 >= 231
+#    define BOOST_PP_ITERATION_4 231
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 230 && BOOST_PP_ITERATION_START_4 >= 230
+#    define BOOST_PP_ITERATION_4 230
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 229 && BOOST_PP_ITERATION_START_4 >= 229
+#    define BOOST_PP_ITERATION_4 229
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 228 && BOOST_PP_ITERATION_START_4 >= 228
+#    define BOOST_PP_ITERATION_4 228
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 227 && BOOST_PP_ITERATION_START_4 >= 227
+#    define BOOST_PP_ITERATION_4 227
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 226 && BOOST_PP_ITERATION_START_4 >= 226
+#    define BOOST_PP_ITERATION_4 226
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 225 && BOOST_PP_ITERATION_START_4 >= 225
+#    define BOOST_PP_ITERATION_4 225
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 224 && BOOST_PP_ITERATION_START_4 >= 224
+#    define BOOST_PP_ITERATION_4 224
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 223 && BOOST_PP_ITERATION_START_4 >= 223
+#    define BOOST_PP_ITERATION_4 223
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 222 && BOOST_PP_ITERATION_START_4 >= 222
+#    define BOOST_PP_ITERATION_4 222
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 221 && BOOST_PP_ITERATION_START_4 >= 221
+#    define BOOST_PP_ITERATION_4 221
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 220 && BOOST_PP_ITERATION_START_4 >= 220
+#    define BOOST_PP_ITERATION_4 220
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 219 && BOOST_PP_ITERATION_START_4 >= 219
+#    define BOOST_PP_ITERATION_4 219
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 218 && BOOST_PP_ITERATION_START_4 >= 218
+#    define BOOST_PP_ITERATION_4 218
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 217 && BOOST_PP_ITERATION_START_4 >= 217
+#    define BOOST_PP_ITERATION_4 217
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 216 && BOOST_PP_ITERATION_START_4 >= 216
+#    define BOOST_PP_ITERATION_4 216
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 215 && BOOST_PP_ITERATION_START_4 >= 215
+#    define BOOST_PP_ITERATION_4 215
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 214 && BOOST_PP_ITERATION_START_4 >= 214
+#    define BOOST_PP_ITERATION_4 214
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 213 && BOOST_PP_ITERATION_START_4 >= 213
+#    define BOOST_PP_ITERATION_4 213
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 212 && BOOST_PP_ITERATION_START_4 >= 212
+#    define BOOST_PP_ITERATION_4 212
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 211 && BOOST_PP_ITERATION_START_4 >= 211
+#    define BOOST_PP_ITERATION_4 211
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 210 && BOOST_PP_ITERATION_START_4 >= 210
+#    define BOOST_PP_ITERATION_4 210
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 209 && BOOST_PP_ITERATION_START_4 >= 209
+#    define BOOST_PP_ITERATION_4 209
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 208 && BOOST_PP_ITERATION_START_4 >= 208
+#    define BOOST_PP_ITERATION_4 208
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 207 && BOOST_PP_ITERATION_START_4 >= 207
+#    define BOOST_PP_ITERATION_4 207
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 206 && BOOST_PP_ITERATION_START_4 >= 206
+#    define BOOST_PP_ITERATION_4 206
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 205 && BOOST_PP_ITERATION_START_4 >= 205
+#    define BOOST_PP_ITERATION_4 205
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 204 && BOOST_PP_ITERATION_START_4 >= 204
+#    define BOOST_PP_ITERATION_4 204
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 203 && BOOST_PP_ITERATION_START_4 >= 203
+#    define BOOST_PP_ITERATION_4 203
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 202 && BOOST_PP_ITERATION_START_4 >= 202
+#    define BOOST_PP_ITERATION_4 202
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 201 && BOOST_PP_ITERATION_START_4 >= 201
+#    define BOOST_PP_ITERATION_4 201
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 200 && BOOST_PP_ITERATION_START_4 >= 200
+#    define BOOST_PP_ITERATION_4 200
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 199 && BOOST_PP_ITERATION_START_4 >= 199
+#    define BOOST_PP_ITERATION_4 199
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 198 && BOOST_PP_ITERATION_START_4 >= 198
+#    define BOOST_PP_ITERATION_4 198
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 197 && BOOST_PP_ITERATION_START_4 >= 197
+#    define BOOST_PP_ITERATION_4 197
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 196 && BOOST_PP_ITERATION_START_4 >= 196
+#    define BOOST_PP_ITERATION_4 196
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 195 && BOOST_PP_ITERATION_START_4 >= 195
+#    define BOOST_PP_ITERATION_4 195
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 194 && BOOST_PP_ITERATION_START_4 >= 194
+#    define BOOST_PP_ITERATION_4 194
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 193 && BOOST_PP_ITERATION_START_4 >= 193
+#    define BOOST_PP_ITERATION_4 193
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 192 && BOOST_PP_ITERATION_START_4 >= 192
+#    define BOOST_PP_ITERATION_4 192
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 191 && BOOST_PP_ITERATION_START_4 >= 191
+#    define BOOST_PP_ITERATION_4 191
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 190 && BOOST_PP_ITERATION_START_4 >= 190
+#    define BOOST_PP_ITERATION_4 190
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 189 && BOOST_PP_ITERATION_START_4 >= 189
+#    define BOOST_PP_ITERATION_4 189
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 188 && BOOST_PP_ITERATION_START_4 >= 188
+#    define BOOST_PP_ITERATION_4 188
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 187 && BOOST_PP_ITERATION_START_4 >= 187
+#    define BOOST_PP_ITERATION_4 187
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 186 && BOOST_PP_ITERATION_START_4 >= 186
+#    define BOOST_PP_ITERATION_4 186
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 185 && BOOST_PP_ITERATION_START_4 >= 185
+#    define BOOST_PP_ITERATION_4 185
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 184 && BOOST_PP_ITERATION_START_4 >= 184
+#    define BOOST_PP_ITERATION_4 184
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 183 && BOOST_PP_ITERATION_START_4 >= 183
+#    define BOOST_PP_ITERATION_4 183
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 182 && BOOST_PP_ITERATION_START_4 >= 182
+#    define BOOST_PP_ITERATION_4 182
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 181 && BOOST_PP_ITERATION_START_4 >= 181
+#    define BOOST_PP_ITERATION_4 181
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 180 && BOOST_PP_ITERATION_START_4 >= 180
+#    define BOOST_PP_ITERATION_4 180
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 179 && BOOST_PP_ITERATION_START_4 >= 179
+#    define BOOST_PP_ITERATION_4 179
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 178 && BOOST_PP_ITERATION_START_4 >= 178
+#    define BOOST_PP_ITERATION_4 178
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 177 && BOOST_PP_ITERATION_START_4 >= 177
+#    define BOOST_PP_ITERATION_4 177
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 176 && BOOST_PP_ITERATION_START_4 >= 176
+#    define BOOST_PP_ITERATION_4 176
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 175 && BOOST_PP_ITERATION_START_4 >= 175
+#    define BOOST_PP_ITERATION_4 175
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 174 && BOOST_PP_ITERATION_START_4 >= 174
+#    define BOOST_PP_ITERATION_4 174
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 173 && BOOST_PP_ITERATION_START_4 >= 173
+#    define BOOST_PP_ITERATION_4 173
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 172 && BOOST_PP_ITERATION_START_4 >= 172
+#    define BOOST_PP_ITERATION_4 172
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 171 && BOOST_PP_ITERATION_START_4 >= 171
+#    define BOOST_PP_ITERATION_4 171
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 170 && BOOST_PP_ITERATION_START_4 >= 170
+#    define BOOST_PP_ITERATION_4 170
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 169 && BOOST_PP_ITERATION_START_4 >= 169
+#    define BOOST_PP_ITERATION_4 169
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 168 && BOOST_PP_ITERATION_START_4 >= 168
+#    define BOOST_PP_ITERATION_4 168
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 167 && BOOST_PP_ITERATION_START_4 >= 167
+#    define BOOST_PP_ITERATION_4 167
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 166 && BOOST_PP_ITERATION_START_4 >= 166
+#    define BOOST_PP_ITERATION_4 166
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 165 && BOOST_PP_ITERATION_START_4 >= 165
+#    define BOOST_PP_ITERATION_4 165
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 164 && BOOST_PP_ITERATION_START_4 >= 164
+#    define BOOST_PP_ITERATION_4 164
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 163 && BOOST_PP_ITERATION_START_4 >= 163
+#    define BOOST_PP_ITERATION_4 163
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 162 && BOOST_PP_ITERATION_START_4 >= 162
+#    define BOOST_PP_ITERATION_4 162
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 161 && BOOST_PP_ITERATION_START_4 >= 161
+#    define BOOST_PP_ITERATION_4 161
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 160 && BOOST_PP_ITERATION_START_4 >= 160
+#    define BOOST_PP_ITERATION_4 160
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 159 && BOOST_PP_ITERATION_START_4 >= 159
+#    define BOOST_PP_ITERATION_4 159
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 158 && BOOST_PP_ITERATION_START_4 >= 158
+#    define BOOST_PP_ITERATION_4 158
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 157 && BOOST_PP_ITERATION_START_4 >= 157
+#    define BOOST_PP_ITERATION_4 157
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 156 && BOOST_PP_ITERATION_START_4 >= 156
+#    define BOOST_PP_ITERATION_4 156
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 155 && BOOST_PP_ITERATION_START_4 >= 155
+#    define BOOST_PP_ITERATION_4 155
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 154 && BOOST_PP_ITERATION_START_4 >= 154
+#    define BOOST_PP_ITERATION_4 154
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 153 && BOOST_PP_ITERATION_START_4 >= 153
+#    define BOOST_PP_ITERATION_4 153
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 152 && BOOST_PP_ITERATION_START_4 >= 152
+#    define BOOST_PP_ITERATION_4 152
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 151 && BOOST_PP_ITERATION_START_4 >= 151
+#    define BOOST_PP_ITERATION_4 151
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 150 && BOOST_PP_ITERATION_START_4 >= 150
+#    define BOOST_PP_ITERATION_4 150
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 149 && BOOST_PP_ITERATION_START_4 >= 149
+#    define BOOST_PP_ITERATION_4 149
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 148 && BOOST_PP_ITERATION_START_4 >= 148
+#    define BOOST_PP_ITERATION_4 148
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 147 && BOOST_PP_ITERATION_START_4 >= 147
+#    define BOOST_PP_ITERATION_4 147
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 146 && BOOST_PP_ITERATION_START_4 >= 146
+#    define BOOST_PP_ITERATION_4 146
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 145 && BOOST_PP_ITERATION_START_4 >= 145
+#    define BOOST_PP_ITERATION_4 145
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 144 && BOOST_PP_ITERATION_START_4 >= 144
+#    define BOOST_PP_ITERATION_4 144
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 143 && BOOST_PP_ITERATION_START_4 >= 143
+#    define BOOST_PP_ITERATION_4 143
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 142 && BOOST_PP_ITERATION_START_4 >= 142
+#    define BOOST_PP_ITERATION_4 142
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 141 && BOOST_PP_ITERATION_START_4 >= 141
+#    define BOOST_PP_ITERATION_4 141
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 140 && BOOST_PP_ITERATION_START_4 >= 140
+#    define BOOST_PP_ITERATION_4 140
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 139 && BOOST_PP_ITERATION_START_4 >= 139
+#    define BOOST_PP_ITERATION_4 139
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 138 && BOOST_PP_ITERATION_START_4 >= 138
+#    define BOOST_PP_ITERATION_4 138
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 137 && BOOST_PP_ITERATION_START_4 >= 137
+#    define BOOST_PP_ITERATION_4 137
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 136 && BOOST_PP_ITERATION_START_4 >= 136
+#    define BOOST_PP_ITERATION_4 136
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 135 && BOOST_PP_ITERATION_START_4 >= 135
+#    define BOOST_PP_ITERATION_4 135
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 134 && BOOST_PP_ITERATION_START_4 >= 134
+#    define BOOST_PP_ITERATION_4 134
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 133 && BOOST_PP_ITERATION_START_4 >= 133
+#    define BOOST_PP_ITERATION_4 133
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 132 && BOOST_PP_ITERATION_START_4 >= 132
+#    define BOOST_PP_ITERATION_4 132
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 131 && BOOST_PP_ITERATION_START_4 >= 131
+#    define BOOST_PP_ITERATION_4 131
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 130 && BOOST_PP_ITERATION_START_4 >= 130
+#    define BOOST_PP_ITERATION_4 130
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 129 && BOOST_PP_ITERATION_START_4 >= 129
+#    define BOOST_PP_ITERATION_4 129
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 128 && BOOST_PP_ITERATION_START_4 >= 128
+#    define BOOST_PP_ITERATION_4 128
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 127 && BOOST_PP_ITERATION_START_4 >= 127
+#    define BOOST_PP_ITERATION_4 127
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 126 && BOOST_PP_ITERATION_START_4 >= 126
+#    define BOOST_PP_ITERATION_4 126
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 125 && BOOST_PP_ITERATION_START_4 >= 125
+#    define BOOST_PP_ITERATION_4 125
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 124 && BOOST_PP_ITERATION_START_4 >= 124
+#    define BOOST_PP_ITERATION_4 124
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 123 && BOOST_PP_ITERATION_START_4 >= 123
+#    define BOOST_PP_ITERATION_4 123
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 122 && BOOST_PP_ITERATION_START_4 >= 122
+#    define BOOST_PP_ITERATION_4 122
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 121 && BOOST_PP_ITERATION_START_4 >= 121
+#    define BOOST_PP_ITERATION_4 121
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 120 && BOOST_PP_ITERATION_START_4 >= 120
+#    define BOOST_PP_ITERATION_4 120
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 119 && BOOST_PP_ITERATION_START_4 >= 119
+#    define BOOST_PP_ITERATION_4 119
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 118 && BOOST_PP_ITERATION_START_4 >= 118
+#    define BOOST_PP_ITERATION_4 118
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 117 && BOOST_PP_ITERATION_START_4 >= 117
+#    define BOOST_PP_ITERATION_4 117
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 116 && BOOST_PP_ITERATION_START_4 >= 116
+#    define BOOST_PP_ITERATION_4 116
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 115 && BOOST_PP_ITERATION_START_4 >= 115
+#    define BOOST_PP_ITERATION_4 115
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 114 && BOOST_PP_ITERATION_START_4 >= 114
+#    define BOOST_PP_ITERATION_4 114
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 113 && BOOST_PP_ITERATION_START_4 >= 113
+#    define BOOST_PP_ITERATION_4 113
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 112 && BOOST_PP_ITERATION_START_4 >= 112
+#    define BOOST_PP_ITERATION_4 112
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 111 && BOOST_PP_ITERATION_START_4 >= 111
+#    define BOOST_PP_ITERATION_4 111
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 110 && BOOST_PP_ITERATION_START_4 >= 110
+#    define BOOST_PP_ITERATION_4 110
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 109 && BOOST_PP_ITERATION_START_4 >= 109
+#    define BOOST_PP_ITERATION_4 109
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 108 && BOOST_PP_ITERATION_START_4 >= 108
+#    define BOOST_PP_ITERATION_4 108
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 107 && BOOST_PP_ITERATION_START_4 >= 107
+#    define BOOST_PP_ITERATION_4 107
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 106 && BOOST_PP_ITERATION_START_4 >= 106
+#    define BOOST_PP_ITERATION_4 106
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 105 && BOOST_PP_ITERATION_START_4 >= 105
+#    define BOOST_PP_ITERATION_4 105
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 104 && BOOST_PP_ITERATION_START_4 >= 104
+#    define BOOST_PP_ITERATION_4 104
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 103 && BOOST_PP_ITERATION_START_4 >= 103
+#    define BOOST_PP_ITERATION_4 103
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 102 && BOOST_PP_ITERATION_START_4 >= 102
+#    define BOOST_PP_ITERATION_4 102
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 101 && BOOST_PP_ITERATION_START_4 >= 101
+#    define BOOST_PP_ITERATION_4 101
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 100 && BOOST_PP_ITERATION_START_4 >= 100
+#    define BOOST_PP_ITERATION_4 100
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 99 && BOOST_PP_ITERATION_START_4 >= 99
+#    define BOOST_PP_ITERATION_4 99
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 98 && BOOST_PP_ITERATION_START_4 >= 98
+#    define BOOST_PP_ITERATION_4 98
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 97 && BOOST_PP_ITERATION_START_4 >= 97
+#    define BOOST_PP_ITERATION_4 97
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 96 && BOOST_PP_ITERATION_START_4 >= 96
+#    define BOOST_PP_ITERATION_4 96
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 95 && BOOST_PP_ITERATION_START_4 >= 95
+#    define BOOST_PP_ITERATION_4 95
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 94 && BOOST_PP_ITERATION_START_4 >= 94
+#    define BOOST_PP_ITERATION_4 94
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 93 && BOOST_PP_ITERATION_START_4 >= 93
+#    define BOOST_PP_ITERATION_4 93
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 92 && BOOST_PP_ITERATION_START_4 >= 92
+#    define BOOST_PP_ITERATION_4 92
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 91 && BOOST_PP_ITERATION_START_4 >= 91
+#    define BOOST_PP_ITERATION_4 91
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 90 && BOOST_PP_ITERATION_START_4 >= 90
+#    define BOOST_PP_ITERATION_4 90
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 89 && BOOST_PP_ITERATION_START_4 >= 89
+#    define BOOST_PP_ITERATION_4 89
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 88 && BOOST_PP_ITERATION_START_4 >= 88
+#    define BOOST_PP_ITERATION_4 88
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 87 && BOOST_PP_ITERATION_START_4 >= 87
+#    define BOOST_PP_ITERATION_4 87
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 86 && BOOST_PP_ITERATION_START_4 >= 86
+#    define BOOST_PP_ITERATION_4 86
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 85 && BOOST_PP_ITERATION_START_4 >= 85
+#    define BOOST_PP_ITERATION_4 85
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 84 && BOOST_PP_ITERATION_START_4 >= 84
+#    define BOOST_PP_ITERATION_4 84
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 83 && BOOST_PP_ITERATION_START_4 >= 83
+#    define BOOST_PP_ITERATION_4 83
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 82 && BOOST_PP_ITERATION_START_4 >= 82
+#    define BOOST_PP_ITERATION_4 82
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 81 && BOOST_PP_ITERATION_START_4 >= 81
+#    define BOOST_PP_ITERATION_4 81
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 80 && BOOST_PP_ITERATION_START_4 >= 80
+#    define BOOST_PP_ITERATION_4 80
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 79 && BOOST_PP_ITERATION_START_4 >= 79
+#    define BOOST_PP_ITERATION_4 79
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 78 && BOOST_PP_ITERATION_START_4 >= 78
+#    define BOOST_PP_ITERATION_4 78
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 77 && BOOST_PP_ITERATION_START_4 >= 77
+#    define BOOST_PP_ITERATION_4 77
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 76 && BOOST_PP_ITERATION_START_4 >= 76
+#    define BOOST_PP_ITERATION_4 76
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 75 && BOOST_PP_ITERATION_START_4 >= 75
+#    define BOOST_PP_ITERATION_4 75
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 74 && BOOST_PP_ITERATION_START_4 >= 74
+#    define BOOST_PP_ITERATION_4 74
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 73 && BOOST_PP_ITERATION_START_4 >= 73
+#    define BOOST_PP_ITERATION_4 73
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 72 && BOOST_PP_ITERATION_START_4 >= 72
+#    define BOOST_PP_ITERATION_4 72
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 71 && BOOST_PP_ITERATION_START_4 >= 71
+#    define BOOST_PP_ITERATION_4 71
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 70 && BOOST_PP_ITERATION_START_4 >= 70
+#    define BOOST_PP_ITERATION_4 70
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 69 && BOOST_PP_ITERATION_START_4 >= 69
+#    define BOOST_PP_ITERATION_4 69
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 68 && BOOST_PP_ITERATION_START_4 >= 68
+#    define BOOST_PP_ITERATION_4 68
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 67 && BOOST_PP_ITERATION_START_4 >= 67
+#    define BOOST_PP_ITERATION_4 67
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 66 && BOOST_PP_ITERATION_START_4 >= 66
+#    define BOOST_PP_ITERATION_4 66
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 65 && BOOST_PP_ITERATION_START_4 >= 65
+#    define BOOST_PP_ITERATION_4 65
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 64 && BOOST_PP_ITERATION_START_4 >= 64
+#    define BOOST_PP_ITERATION_4 64
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 63 && BOOST_PP_ITERATION_START_4 >= 63
+#    define BOOST_PP_ITERATION_4 63
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 62 && BOOST_PP_ITERATION_START_4 >= 62
+#    define BOOST_PP_ITERATION_4 62
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 61 && BOOST_PP_ITERATION_START_4 >= 61
+#    define BOOST_PP_ITERATION_4 61
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 60 && BOOST_PP_ITERATION_START_4 >= 60
+#    define BOOST_PP_ITERATION_4 60
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 59 && BOOST_PP_ITERATION_START_4 >= 59
+#    define BOOST_PP_ITERATION_4 59
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 58 && BOOST_PP_ITERATION_START_4 >= 58
+#    define BOOST_PP_ITERATION_4 58
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 57 && BOOST_PP_ITERATION_START_4 >= 57
+#    define BOOST_PP_ITERATION_4 57
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 56 && BOOST_PP_ITERATION_START_4 >= 56
+#    define BOOST_PP_ITERATION_4 56
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 55 && BOOST_PP_ITERATION_START_4 >= 55
+#    define BOOST_PP_ITERATION_4 55
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 54 && BOOST_PP_ITERATION_START_4 >= 54
+#    define BOOST_PP_ITERATION_4 54
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 53 && BOOST_PP_ITERATION_START_4 >= 53
+#    define BOOST_PP_ITERATION_4 53
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 52 && BOOST_PP_ITERATION_START_4 >= 52
+#    define BOOST_PP_ITERATION_4 52
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 51 && BOOST_PP_ITERATION_START_4 >= 51
+#    define BOOST_PP_ITERATION_4 51
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 50 && BOOST_PP_ITERATION_START_4 >= 50
+#    define BOOST_PP_ITERATION_4 50
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 49 && BOOST_PP_ITERATION_START_4 >= 49
+#    define BOOST_PP_ITERATION_4 49
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 48 && BOOST_PP_ITERATION_START_4 >= 48
+#    define BOOST_PP_ITERATION_4 48
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 47 && BOOST_PP_ITERATION_START_4 >= 47
+#    define BOOST_PP_ITERATION_4 47
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 46 && BOOST_PP_ITERATION_START_4 >= 46
+#    define BOOST_PP_ITERATION_4 46
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 45 && BOOST_PP_ITERATION_START_4 >= 45
+#    define BOOST_PP_ITERATION_4 45
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 44 && BOOST_PP_ITERATION_START_4 >= 44
+#    define BOOST_PP_ITERATION_4 44
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 43 && BOOST_PP_ITERATION_START_4 >= 43
+#    define BOOST_PP_ITERATION_4 43
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 42 && BOOST_PP_ITERATION_START_4 >= 42
+#    define BOOST_PP_ITERATION_4 42
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 41 && BOOST_PP_ITERATION_START_4 >= 41
+#    define BOOST_PP_ITERATION_4 41
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 40 && BOOST_PP_ITERATION_START_4 >= 40
+#    define BOOST_PP_ITERATION_4 40
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 39 && BOOST_PP_ITERATION_START_4 >= 39
+#    define BOOST_PP_ITERATION_4 39
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 38 && BOOST_PP_ITERATION_START_4 >= 38
+#    define BOOST_PP_ITERATION_4 38
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 37 && BOOST_PP_ITERATION_START_4 >= 37
+#    define BOOST_PP_ITERATION_4 37
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 36 && BOOST_PP_ITERATION_START_4 >= 36
+#    define BOOST_PP_ITERATION_4 36
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 35 && BOOST_PP_ITERATION_START_4 >= 35
+#    define BOOST_PP_ITERATION_4 35
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 34 && BOOST_PP_ITERATION_START_4 >= 34
+#    define BOOST_PP_ITERATION_4 34
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 33 && BOOST_PP_ITERATION_START_4 >= 33
+#    define BOOST_PP_ITERATION_4 33
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 32 && BOOST_PP_ITERATION_START_4 >= 32
+#    define BOOST_PP_ITERATION_4 32
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 31 && BOOST_PP_ITERATION_START_4 >= 31
+#    define BOOST_PP_ITERATION_4 31
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 30 && BOOST_PP_ITERATION_START_4 >= 30
+#    define BOOST_PP_ITERATION_4 30
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 29 && BOOST_PP_ITERATION_START_4 >= 29
+#    define BOOST_PP_ITERATION_4 29
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 28 && BOOST_PP_ITERATION_START_4 >= 28
+#    define BOOST_PP_ITERATION_4 28
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 27 && BOOST_PP_ITERATION_START_4 >= 27
+#    define BOOST_PP_ITERATION_4 27
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 26 && BOOST_PP_ITERATION_START_4 >= 26
+#    define BOOST_PP_ITERATION_4 26
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 25 && BOOST_PP_ITERATION_START_4 >= 25
+#    define BOOST_PP_ITERATION_4 25
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 24 && BOOST_PP_ITERATION_START_4 >= 24
+#    define BOOST_PP_ITERATION_4 24
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 23 && BOOST_PP_ITERATION_START_4 >= 23
+#    define BOOST_PP_ITERATION_4 23
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 22 && BOOST_PP_ITERATION_START_4 >= 22
+#    define BOOST_PP_ITERATION_4 22
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 21 && BOOST_PP_ITERATION_START_4 >= 21
+#    define BOOST_PP_ITERATION_4 21
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 20 && BOOST_PP_ITERATION_START_4 >= 20
+#    define BOOST_PP_ITERATION_4 20
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 19 && BOOST_PP_ITERATION_START_4 >= 19
+#    define BOOST_PP_ITERATION_4 19
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 18 && BOOST_PP_ITERATION_START_4 >= 18
+#    define BOOST_PP_ITERATION_4 18
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 17 && BOOST_PP_ITERATION_START_4 >= 17
+#    define BOOST_PP_ITERATION_4 17
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 16 && BOOST_PP_ITERATION_START_4 >= 16
+#    define BOOST_PP_ITERATION_4 16
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 15 && BOOST_PP_ITERATION_START_4 >= 15
+#    define BOOST_PP_ITERATION_4 15
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 14 && BOOST_PP_ITERATION_START_4 >= 14
+#    define BOOST_PP_ITERATION_4 14
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 13 && BOOST_PP_ITERATION_START_4 >= 13
+#    define BOOST_PP_ITERATION_4 13
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 12 && BOOST_PP_ITERATION_START_4 >= 12
+#    define BOOST_PP_ITERATION_4 12
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 11 && BOOST_PP_ITERATION_START_4 >= 11
+#    define BOOST_PP_ITERATION_4 11
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 10 && BOOST_PP_ITERATION_START_4 >= 10
+#    define BOOST_PP_ITERATION_4 10
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 9 && BOOST_PP_ITERATION_START_4 >= 9
+#    define BOOST_PP_ITERATION_4 9
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 8 && BOOST_PP_ITERATION_START_4 >= 8
+#    define BOOST_PP_ITERATION_4 8
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 7 && BOOST_PP_ITERATION_START_4 >= 7
+#    define BOOST_PP_ITERATION_4 7
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 6 && BOOST_PP_ITERATION_START_4 >= 6
+#    define BOOST_PP_ITERATION_4 6
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 5 && BOOST_PP_ITERATION_START_4 >= 5
+#    define BOOST_PP_ITERATION_4 5
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 4 && BOOST_PP_ITERATION_START_4 >= 4
+#    define BOOST_PP_ITERATION_4 4
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 3 && BOOST_PP_ITERATION_START_4 >= 3
+#    define BOOST_PP_ITERATION_4 3
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 2 && BOOST_PP_ITERATION_START_4 >= 2
+#    define BOOST_PP_ITERATION_4 2
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 1 && BOOST_PP_ITERATION_START_4 >= 1
+#    define BOOST_PP_ITERATION_4 1
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
+# if BOOST_PP_ITERATION_FINISH_4 <= 0 && BOOST_PP_ITERATION_START_4 >= 0
+#    define BOOST_PP_ITERATION_4 0
+#    include BOOST_PP_FILENAME_4
+#    undef BOOST_PP_ITERATION_4
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/reverse5.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/reverse5.hpp
new file mode 100644
index 0000000..225a557
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/iter/reverse5.hpp
@@ -0,0 +1,1296 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# if BOOST_PP_ITERATION_FINISH_5 <= 256 && BOOST_PP_ITERATION_START_5 >= 256
+#    define BOOST_PP_ITERATION_5 256
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 255 && BOOST_PP_ITERATION_START_5 >= 255
+#    define BOOST_PP_ITERATION_5 255
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 254 && BOOST_PP_ITERATION_START_5 >= 254
+#    define BOOST_PP_ITERATION_5 254
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 253 && BOOST_PP_ITERATION_START_5 >= 253
+#    define BOOST_PP_ITERATION_5 253
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 252 && BOOST_PP_ITERATION_START_5 >= 252
+#    define BOOST_PP_ITERATION_5 252
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 251 && BOOST_PP_ITERATION_START_5 >= 251
+#    define BOOST_PP_ITERATION_5 251
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 250 && BOOST_PP_ITERATION_START_5 >= 250
+#    define BOOST_PP_ITERATION_5 250
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 249 && BOOST_PP_ITERATION_START_5 >= 249
+#    define BOOST_PP_ITERATION_5 249
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 248 && BOOST_PP_ITERATION_START_5 >= 248
+#    define BOOST_PP_ITERATION_5 248
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 247 && BOOST_PP_ITERATION_START_5 >= 247
+#    define BOOST_PP_ITERATION_5 247
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 246 && BOOST_PP_ITERATION_START_5 >= 246
+#    define BOOST_PP_ITERATION_5 246
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 245 && BOOST_PP_ITERATION_START_5 >= 245
+#    define BOOST_PP_ITERATION_5 245
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 244 && BOOST_PP_ITERATION_START_5 >= 244
+#    define BOOST_PP_ITERATION_5 244
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 243 && BOOST_PP_ITERATION_START_5 >= 243
+#    define BOOST_PP_ITERATION_5 243
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 242 && BOOST_PP_ITERATION_START_5 >= 242
+#    define BOOST_PP_ITERATION_5 242
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 241 && BOOST_PP_ITERATION_START_5 >= 241
+#    define BOOST_PP_ITERATION_5 241
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 240 && BOOST_PP_ITERATION_START_5 >= 240
+#    define BOOST_PP_ITERATION_5 240
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 239 && BOOST_PP_ITERATION_START_5 >= 239
+#    define BOOST_PP_ITERATION_5 239
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 238 && BOOST_PP_ITERATION_START_5 >= 238
+#    define BOOST_PP_ITERATION_5 238
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 237 && BOOST_PP_ITERATION_START_5 >= 237
+#    define BOOST_PP_ITERATION_5 237
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 236 && BOOST_PP_ITERATION_START_5 >= 236
+#    define BOOST_PP_ITERATION_5 236
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 235 && BOOST_PP_ITERATION_START_5 >= 235
+#    define BOOST_PP_ITERATION_5 235
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 234 && BOOST_PP_ITERATION_START_5 >= 234
+#    define BOOST_PP_ITERATION_5 234
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 233 && BOOST_PP_ITERATION_START_5 >= 233
+#    define BOOST_PP_ITERATION_5 233
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 232 && BOOST_PP_ITERATION_START_5 >= 232
+#    define BOOST_PP_ITERATION_5 232
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 231 && BOOST_PP_ITERATION_START_5 >= 231
+#    define BOOST_PP_ITERATION_5 231
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 230 && BOOST_PP_ITERATION_START_5 >= 230
+#    define BOOST_PP_ITERATION_5 230
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 229 && BOOST_PP_ITERATION_START_5 >= 229
+#    define BOOST_PP_ITERATION_5 229
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 228 && BOOST_PP_ITERATION_START_5 >= 228
+#    define BOOST_PP_ITERATION_5 228
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 227 && BOOST_PP_ITERATION_START_5 >= 227
+#    define BOOST_PP_ITERATION_5 227
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 226 && BOOST_PP_ITERATION_START_5 >= 226
+#    define BOOST_PP_ITERATION_5 226
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 225 && BOOST_PP_ITERATION_START_5 >= 225
+#    define BOOST_PP_ITERATION_5 225
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 224 && BOOST_PP_ITERATION_START_5 >= 224
+#    define BOOST_PP_ITERATION_5 224
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 223 && BOOST_PP_ITERATION_START_5 >= 223
+#    define BOOST_PP_ITERATION_5 223
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 222 && BOOST_PP_ITERATION_START_5 >= 222
+#    define BOOST_PP_ITERATION_5 222
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 221 && BOOST_PP_ITERATION_START_5 >= 221
+#    define BOOST_PP_ITERATION_5 221
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 220 && BOOST_PP_ITERATION_START_5 >= 220
+#    define BOOST_PP_ITERATION_5 220
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 219 && BOOST_PP_ITERATION_START_5 >= 219
+#    define BOOST_PP_ITERATION_5 219
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 218 && BOOST_PP_ITERATION_START_5 >= 218
+#    define BOOST_PP_ITERATION_5 218
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 217 && BOOST_PP_ITERATION_START_5 >= 217
+#    define BOOST_PP_ITERATION_5 217
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 216 && BOOST_PP_ITERATION_START_5 >= 216
+#    define BOOST_PP_ITERATION_5 216
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 215 && BOOST_PP_ITERATION_START_5 >= 215
+#    define BOOST_PP_ITERATION_5 215
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 214 && BOOST_PP_ITERATION_START_5 >= 214
+#    define BOOST_PP_ITERATION_5 214
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 213 && BOOST_PP_ITERATION_START_5 >= 213
+#    define BOOST_PP_ITERATION_5 213
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 212 && BOOST_PP_ITERATION_START_5 >= 212
+#    define BOOST_PP_ITERATION_5 212
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 211 && BOOST_PP_ITERATION_START_5 >= 211
+#    define BOOST_PP_ITERATION_5 211
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 210 && BOOST_PP_ITERATION_START_5 >= 210
+#    define BOOST_PP_ITERATION_5 210
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 209 && BOOST_PP_ITERATION_START_5 >= 209
+#    define BOOST_PP_ITERATION_5 209
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 208 && BOOST_PP_ITERATION_START_5 >= 208
+#    define BOOST_PP_ITERATION_5 208
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 207 && BOOST_PP_ITERATION_START_5 >= 207
+#    define BOOST_PP_ITERATION_5 207
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 206 && BOOST_PP_ITERATION_START_5 >= 206
+#    define BOOST_PP_ITERATION_5 206
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 205 && BOOST_PP_ITERATION_START_5 >= 205
+#    define BOOST_PP_ITERATION_5 205
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 204 && BOOST_PP_ITERATION_START_5 >= 204
+#    define BOOST_PP_ITERATION_5 204
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 203 && BOOST_PP_ITERATION_START_5 >= 203
+#    define BOOST_PP_ITERATION_5 203
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 202 && BOOST_PP_ITERATION_START_5 >= 202
+#    define BOOST_PP_ITERATION_5 202
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 201 && BOOST_PP_ITERATION_START_5 >= 201
+#    define BOOST_PP_ITERATION_5 201
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 200 && BOOST_PP_ITERATION_START_5 >= 200
+#    define BOOST_PP_ITERATION_5 200
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 199 && BOOST_PP_ITERATION_START_5 >= 199
+#    define BOOST_PP_ITERATION_5 199
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 198 && BOOST_PP_ITERATION_START_5 >= 198
+#    define BOOST_PP_ITERATION_5 198
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 197 && BOOST_PP_ITERATION_START_5 >= 197
+#    define BOOST_PP_ITERATION_5 197
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 196 && BOOST_PP_ITERATION_START_5 >= 196
+#    define BOOST_PP_ITERATION_5 196
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 195 && BOOST_PP_ITERATION_START_5 >= 195
+#    define BOOST_PP_ITERATION_5 195
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 194 && BOOST_PP_ITERATION_START_5 >= 194
+#    define BOOST_PP_ITERATION_5 194
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 193 && BOOST_PP_ITERATION_START_5 >= 193
+#    define BOOST_PP_ITERATION_5 193
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 192 && BOOST_PP_ITERATION_START_5 >= 192
+#    define BOOST_PP_ITERATION_5 192
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 191 && BOOST_PP_ITERATION_START_5 >= 191
+#    define BOOST_PP_ITERATION_5 191
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 190 && BOOST_PP_ITERATION_START_5 >= 190
+#    define BOOST_PP_ITERATION_5 190
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 189 && BOOST_PP_ITERATION_START_5 >= 189
+#    define BOOST_PP_ITERATION_5 189
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 188 && BOOST_PP_ITERATION_START_5 >= 188
+#    define BOOST_PP_ITERATION_5 188
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 187 && BOOST_PP_ITERATION_START_5 >= 187
+#    define BOOST_PP_ITERATION_5 187
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 186 && BOOST_PP_ITERATION_START_5 >= 186
+#    define BOOST_PP_ITERATION_5 186
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 185 && BOOST_PP_ITERATION_START_5 >= 185
+#    define BOOST_PP_ITERATION_5 185
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 184 && BOOST_PP_ITERATION_START_5 >= 184
+#    define BOOST_PP_ITERATION_5 184
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 183 && BOOST_PP_ITERATION_START_5 >= 183
+#    define BOOST_PP_ITERATION_5 183
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 182 && BOOST_PP_ITERATION_START_5 >= 182
+#    define BOOST_PP_ITERATION_5 182
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 181 && BOOST_PP_ITERATION_START_5 >= 181
+#    define BOOST_PP_ITERATION_5 181
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 180 && BOOST_PP_ITERATION_START_5 >= 180
+#    define BOOST_PP_ITERATION_5 180
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 179 && BOOST_PP_ITERATION_START_5 >= 179
+#    define BOOST_PP_ITERATION_5 179
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 178 && BOOST_PP_ITERATION_START_5 >= 178
+#    define BOOST_PP_ITERATION_5 178
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 177 && BOOST_PP_ITERATION_START_5 >= 177
+#    define BOOST_PP_ITERATION_5 177
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 176 && BOOST_PP_ITERATION_START_5 >= 176
+#    define BOOST_PP_ITERATION_5 176
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 175 && BOOST_PP_ITERATION_START_5 >= 175
+#    define BOOST_PP_ITERATION_5 175
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 174 && BOOST_PP_ITERATION_START_5 >= 174
+#    define BOOST_PP_ITERATION_5 174
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 173 && BOOST_PP_ITERATION_START_5 >= 173
+#    define BOOST_PP_ITERATION_5 173
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 172 && BOOST_PP_ITERATION_START_5 >= 172
+#    define BOOST_PP_ITERATION_5 172
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 171 && BOOST_PP_ITERATION_START_5 >= 171
+#    define BOOST_PP_ITERATION_5 171
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 170 && BOOST_PP_ITERATION_START_5 >= 170
+#    define BOOST_PP_ITERATION_5 170
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 169 && BOOST_PP_ITERATION_START_5 >= 169
+#    define BOOST_PP_ITERATION_5 169
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 168 && BOOST_PP_ITERATION_START_5 >= 168
+#    define BOOST_PP_ITERATION_5 168
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 167 && BOOST_PP_ITERATION_START_5 >= 167
+#    define BOOST_PP_ITERATION_5 167
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 166 && BOOST_PP_ITERATION_START_5 >= 166
+#    define BOOST_PP_ITERATION_5 166
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 165 && BOOST_PP_ITERATION_START_5 >= 165
+#    define BOOST_PP_ITERATION_5 165
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 164 && BOOST_PP_ITERATION_START_5 >= 164
+#    define BOOST_PP_ITERATION_5 164
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 163 && BOOST_PP_ITERATION_START_5 >= 163
+#    define BOOST_PP_ITERATION_5 163
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 162 && BOOST_PP_ITERATION_START_5 >= 162
+#    define BOOST_PP_ITERATION_5 162
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 161 && BOOST_PP_ITERATION_START_5 >= 161
+#    define BOOST_PP_ITERATION_5 161
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 160 && BOOST_PP_ITERATION_START_5 >= 160
+#    define BOOST_PP_ITERATION_5 160
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 159 && BOOST_PP_ITERATION_START_5 >= 159
+#    define BOOST_PP_ITERATION_5 159
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 158 && BOOST_PP_ITERATION_START_5 >= 158
+#    define BOOST_PP_ITERATION_5 158
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 157 && BOOST_PP_ITERATION_START_5 >= 157
+#    define BOOST_PP_ITERATION_5 157
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 156 && BOOST_PP_ITERATION_START_5 >= 156
+#    define BOOST_PP_ITERATION_5 156
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 155 && BOOST_PP_ITERATION_START_5 >= 155
+#    define BOOST_PP_ITERATION_5 155
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 154 && BOOST_PP_ITERATION_START_5 >= 154
+#    define BOOST_PP_ITERATION_5 154
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 153 && BOOST_PP_ITERATION_START_5 >= 153
+#    define BOOST_PP_ITERATION_5 153
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 152 && BOOST_PP_ITERATION_START_5 >= 152
+#    define BOOST_PP_ITERATION_5 152
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 151 && BOOST_PP_ITERATION_START_5 >= 151
+#    define BOOST_PP_ITERATION_5 151
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 150 && BOOST_PP_ITERATION_START_5 >= 150
+#    define BOOST_PP_ITERATION_5 150
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 149 && BOOST_PP_ITERATION_START_5 >= 149
+#    define BOOST_PP_ITERATION_5 149
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 148 && BOOST_PP_ITERATION_START_5 >= 148
+#    define BOOST_PP_ITERATION_5 148
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 147 && BOOST_PP_ITERATION_START_5 >= 147
+#    define BOOST_PP_ITERATION_5 147
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 146 && BOOST_PP_ITERATION_START_5 >= 146
+#    define BOOST_PP_ITERATION_5 146
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 145 && BOOST_PP_ITERATION_START_5 >= 145
+#    define BOOST_PP_ITERATION_5 145
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 144 && BOOST_PP_ITERATION_START_5 >= 144
+#    define BOOST_PP_ITERATION_5 144
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 143 && BOOST_PP_ITERATION_START_5 >= 143
+#    define BOOST_PP_ITERATION_5 143
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 142 && BOOST_PP_ITERATION_START_5 >= 142
+#    define BOOST_PP_ITERATION_5 142
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 141 && BOOST_PP_ITERATION_START_5 >= 141
+#    define BOOST_PP_ITERATION_5 141
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 140 && BOOST_PP_ITERATION_START_5 >= 140
+#    define BOOST_PP_ITERATION_5 140
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 139 && BOOST_PP_ITERATION_START_5 >= 139
+#    define BOOST_PP_ITERATION_5 139
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 138 && BOOST_PP_ITERATION_START_5 >= 138
+#    define BOOST_PP_ITERATION_5 138
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 137 && BOOST_PP_ITERATION_START_5 >= 137
+#    define BOOST_PP_ITERATION_5 137
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 136 && BOOST_PP_ITERATION_START_5 >= 136
+#    define BOOST_PP_ITERATION_5 136
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 135 && BOOST_PP_ITERATION_START_5 >= 135
+#    define BOOST_PP_ITERATION_5 135
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 134 && BOOST_PP_ITERATION_START_5 >= 134
+#    define BOOST_PP_ITERATION_5 134
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 133 && BOOST_PP_ITERATION_START_5 >= 133
+#    define BOOST_PP_ITERATION_5 133
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 132 && BOOST_PP_ITERATION_START_5 >= 132
+#    define BOOST_PP_ITERATION_5 132
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 131 && BOOST_PP_ITERATION_START_5 >= 131
+#    define BOOST_PP_ITERATION_5 131
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 130 && BOOST_PP_ITERATION_START_5 >= 130
+#    define BOOST_PP_ITERATION_5 130
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 129 && BOOST_PP_ITERATION_START_5 >= 129
+#    define BOOST_PP_ITERATION_5 129
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 128 && BOOST_PP_ITERATION_START_5 >= 128
+#    define BOOST_PP_ITERATION_5 128
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 127 && BOOST_PP_ITERATION_START_5 >= 127
+#    define BOOST_PP_ITERATION_5 127
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 126 && BOOST_PP_ITERATION_START_5 >= 126
+#    define BOOST_PP_ITERATION_5 126
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 125 && BOOST_PP_ITERATION_START_5 >= 125
+#    define BOOST_PP_ITERATION_5 125
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 124 && BOOST_PP_ITERATION_START_5 >= 124
+#    define BOOST_PP_ITERATION_5 124
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 123 && BOOST_PP_ITERATION_START_5 >= 123
+#    define BOOST_PP_ITERATION_5 123
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 122 && BOOST_PP_ITERATION_START_5 >= 122
+#    define BOOST_PP_ITERATION_5 122
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 121 && BOOST_PP_ITERATION_START_5 >= 121
+#    define BOOST_PP_ITERATION_5 121
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 120 && BOOST_PP_ITERATION_START_5 >= 120
+#    define BOOST_PP_ITERATION_5 120
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 119 && BOOST_PP_ITERATION_START_5 >= 119
+#    define BOOST_PP_ITERATION_5 119
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 118 && BOOST_PP_ITERATION_START_5 >= 118
+#    define BOOST_PP_ITERATION_5 118
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 117 && BOOST_PP_ITERATION_START_5 >= 117
+#    define BOOST_PP_ITERATION_5 117
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 116 && BOOST_PP_ITERATION_START_5 >= 116
+#    define BOOST_PP_ITERATION_5 116
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 115 && BOOST_PP_ITERATION_START_5 >= 115
+#    define BOOST_PP_ITERATION_5 115
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 114 && BOOST_PP_ITERATION_START_5 >= 114
+#    define BOOST_PP_ITERATION_5 114
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 113 && BOOST_PP_ITERATION_START_5 >= 113
+#    define BOOST_PP_ITERATION_5 113
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 112 && BOOST_PP_ITERATION_START_5 >= 112
+#    define BOOST_PP_ITERATION_5 112
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 111 && BOOST_PP_ITERATION_START_5 >= 111
+#    define BOOST_PP_ITERATION_5 111
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 110 && BOOST_PP_ITERATION_START_5 >= 110
+#    define BOOST_PP_ITERATION_5 110
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 109 && BOOST_PP_ITERATION_START_5 >= 109
+#    define BOOST_PP_ITERATION_5 109
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 108 && BOOST_PP_ITERATION_START_5 >= 108
+#    define BOOST_PP_ITERATION_5 108
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 107 && BOOST_PP_ITERATION_START_5 >= 107
+#    define BOOST_PP_ITERATION_5 107
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 106 && BOOST_PP_ITERATION_START_5 >= 106
+#    define BOOST_PP_ITERATION_5 106
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 105 && BOOST_PP_ITERATION_START_5 >= 105
+#    define BOOST_PP_ITERATION_5 105
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 104 && BOOST_PP_ITERATION_START_5 >= 104
+#    define BOOST_PP_ITERATION_5 104
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 103 && BOOST_PP_ITERATION_START_5 >= 103
+#    define BOOST_PP_ITERATION_5 103
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 102 && BOOST_PP_ITERATION_START_5 >= 102
+#    define BOOST_PP_ITERATION_5 102
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 101 && BOOST_PP_ITERATION_START_5 >= 101
+#    define BOOST_PP_ITERATION_5 101
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 100 && BOOST_PP_ITERATION_START_5 >= 100
+#    define BOOST_PP_ITERATION_5 100
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 99 && BOOST_PP_ITERATION_START_5 >= 99
+#    define BOOST_PP_ITERATION_5 99
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 98 && BOOST_PP_ITERATION_START_5 >= 98
+#    define BOOST_PP_ITERATION_5 98
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 97 && BOOST_PP_ITERATION_START_5 >= 97
+#    define BOOST_PP_ITERATION_5 97
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 96 && BOOST_PP_ITERATION_START_5 >= 96
+#    define BOOST_PP_ITERATION_5 96
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 95 && BOOST_PP_ITERATION_START_5 >= 95
+#    define BOOST_PP_ITERATION_5 95
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 94 && BOOST_PP_ITERATION_START_5 >= 94
+#    define BOOST_PP_ITERATION_5 94
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 93 && BOOST_PP_ITERATION_START_5 >= 93
+#    define BOOST_PP_ITERATION_5 93
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 92 && BOOST_PP_ITERATION_START_5 >= 92
+#    define BOOST_PP_ITERATION_5 92
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 91 && BOOST_PP_ITERATION_START_5 >= 91
+#    define BOOST_PP_ITERATION_5 91
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 90 && BOOST_PP_ITERATION_START_5 >= 90
+#    define BOOST_PP_ITERATION_5 90
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 89 && BOOST_PP_ITERATION_START_5 >= 89
+#    define BOOST_PP_ITERATION_5 89
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 88 && BOOST_PP_ITERATION_START_5 >= 88
+#    define BOOST_PP_ITERATION_5 88
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 87 && BOOST_PP_ITERATION_START_5 >= 87
+#    define BOOST_PP_ITERATION_5 87
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 86 && BOOST_PP_ITERATION_START_5 >= 86
+#    define BOOST_PP_ITERATION_5 86
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 85 && BOOST_PP_ITERATION_START_5 >= 85
+#    define BOOST_PP_ITERATION_5 85
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 84 && BOOST_PP_ITERATION_START_5 >= 84
+#    define BOOST_PP_ITERATION_5 84
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 83 && BOOST_PP_ITERATION_START_5 >= 83
+#    define BOOST_PP_ITERATION_5 83
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 82 && BOOST_PP_ITERATION_START_5 >= 82
+#    define BOOST_PP_ITERATION_5 82
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 81 && BOOST_PP_ITERATION_START_5 >= 81
+#    define BOOST_PP_ITERATION_5 81
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 80 && BOOST_PP_ITERATION_START_5 >= 80
+#    define BOOST_PP_ITERATION_5 80
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 79 && BOOST_PP_ITERATION_START_5 >= 79
+#    define BOOST_PP_ITERATION_5 79
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 78 && BOOST_PP_ITERATION_START_5 >= 78
+#    define BOOST_PP_ITERATION_5 78
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 77 && BOOST_PP_ITERATION_START_5 >= 77
+#    define BOOST_PP_ITERATION_5 77
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 76 && BOOST_PP_ITERATION_START_5 >= 76
+#    define BOOST_PP_ITERATION_5 76
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 75 && BOOST_PP_ITERATION_START_5 >= 75
+#    define BOOST_PP_ITERATION_5 75
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 74 && BOOST_PP_ITERATION_START_5 >= 74
+#    define BOOST_PP_ITERATION_5 74
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 73 && BOOST_PP_ITERATION_START_5 >= 73
+#    define BOOST_PP_ITERATION_5 73
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 72 && BOOST_PP_ITERATION_START_5 >= 72
+#    define BOOST_PP_ITERATION_5 72
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 71 && BOOST_PP_ITERATION_START_5 >= 71
+#    define BOOST_PP_ITERATION_5 71
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 70 && BOOST_PP_ITERATION_START_5 >= 70
+#    define BOOST_PP_ITERATION_5 70
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 69 && BOOST_PP_ITERATION_START_5 >= 69
+#    define BOOST_PP_ITERATION_5 69
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 68 && BOOST_PP_ITERATION_START_5 >= 68
+#    define BOOST_PP_ITERATION_5 68
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 67 && BOOST_PP_ITERATION_START_5 >= 67
+#    define BOOST_PP_ITERATION_5 67
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 66 && BOOST_PP_ITERATION_START_5 >= 66
+#    define BOOST_PP_ITERATION_5 66
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 65 && BOOST_PP_ITERATION_START_5 >= 65
+#    define BOOST_PP_ITERATION_5 65
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 64 && BOOST_PP_ITERATION_START_5 >= 64
+#    define BOOST_PP_ITERATION_5 64
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 63 && BOOST_PP_ITERATION_START_5 >= 63
+#    define BOOST_PP_ITERATION_5 63
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 62 && BOOST_PP_ITERATION_START_5 >= 62
+#    define BOOST_PP_ITERATION_5 62
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 61 && BOOST_PP_ITERATION_START_5 >= 61
+#    define BOOST_PP_ITERATION_5 61
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 60 && BOOST_PP_ITERATION_START_5 >= 60
+#    define BOOST_PP_ITERATION_5 60
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 59 && BOOST_PP_ITERATION_START_5 >= 59
+#    define BOOST_PP_ITERATION_5 59
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 58 && BOOST_PP_ITERATION_START_5 >= 58
+#    define BOOST_PP_ITERATION_5 58
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 57 && BOOST_PP_ITERATION_START_5 >= 57
+#    define BOOST_PP_ITERATION_5 57
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 56 && BOOST_PP_ITERATION_START_5 >= 56
+#    define BOOST_PP_ITERATION_5 56
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 55 && BOOST_PP_ITERATION_START_5 >= 55
+#    define BOOST_PP_ITERATION_5 55
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 54 && BOOST_PP_ITERATION_START_5 >= 54
+#    define BOOST_PP_ITERATION_5 54
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 53 && BOOST_PP_ITERATION_START_5 >= 53
+#    define BOOST_PP_ITERATION_5 53
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 52 && BOOST_PP_ITERATION_START_5 >= 52
+#    define BOOST_PP_ITERATION_5 52
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 51 && BOOST_PP_ITERATION_START_5 >= 51
+#    define BOOST_PP_ITERATION_5 51
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 50 && BOOST_PP_ITERATION_START_5 >= 50
+#    define BOOST_PP_ITERATION_5 50
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 49 && BOOST_PP_ITERATION_START_5 >= 49
+#    define BOOST_PP_ITERATION_5 49
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 48 && BOOST_PP_ITERATION_START_5 >= 48
+#    define BOOST_PP_ITERATION_5 48
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 47 && BOOST_PP_ITERATION_START_5 >= 47
+#    define BOOST_PP_ITERATION_5 47
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 46 && BOOST_PP_ITERATION_START_5 >= 46
+#    define BOOST_PP_ITERATION_5 46
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 45 && BOOST_PP_ITERATION_START_5 >= 45
+#    define BOOST_PP_ITERATION_5 45
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 44 && BOOST_PP_ITERATION_START_5 >= 44
+#    define BOOST_PP_ITERATION_5 44
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 43 && BOOST_PP_ITERATION_START_5 >= 43
+#    define BOOST_PP_ITERATION_5 43
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 42 && BOOST_PP_ITERATION_START_5 >= 42
+#    define BOOST_PP_ITERATION_5 42
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 41 && BOOST_PP_ITERATION_START_5 >= 41
+#    define BOOST_PP_ITERATION_5 41
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 40 && BOOST_PP_ITERATION_START_5 >= 40
+#    define BOOST_PP_ITERATION_5 40
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 39 && BOOST_PP_ITERATION_START_5 >= 39
+#    define BOOST_PP_ITERATION_5 39
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 38 && BOOST_PP_ITERATION_START_5 >= 38
+#    define BOOST_PP_ITERATION_5 38
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 37 && BOOST_PP_ITERATION_START_5 >= 37
+#    define BOOST_PP_ITERATION_5 37
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 36 && BOOST_PP_ITERATION_START_5 >= 36
+#    define BOOST_PP_ITERATION_5 36
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 35 && BOOST_PP_ITERATION_START_5 >= 35
+#    define BOOST_PP_ITERATION_5 35
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 34 && BOOST_PP_ITERATION_START_5 >= 34
+#    define BOOST_PP_ITERATION_5 34
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 33 && BOOST_PP_ITERATION_START_5 >= 33
+#    define BOOST_PP_ITERATION_5 33
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 32 && BOOST_PP_ITERATION_START_5 >= 32
+#    define BOOST_PP_ITERATION_5 32
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 31 && BOOST_PP_ITERATION_START_5 >= 31
+#    define BOOST_PP_ITERATION_5 31
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 30 && BOOST_PP_ITERATION_START_5 >= 30
+#    define BOOST_PP_ITERATION_5 30
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 29 && BOOST_PP_ITERATION_START_5 >= 29
+#    define BOOST_PP_ITERATION_5 29
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 28 && BOOST_PP_ITERATION_START_5 >= 28
+#    define BOOST_PP_ITERATION_5 28
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 27 && BOOST_PP_ITERATION_START_5 >= 27
+#    define BOOST_PP_ITERATION_5 27
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 26 && BOOST_PP_ITERATION_START_5 >= 26
+#    define BOOST_PP_ITERATION_5 26
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 25 && BOOST_PP_ITERATION_START_5 >= 25
+#    define BOOST_PP_ITERATION_5 25
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 24 && BOOST_PP_ITERATION_START_5 >= 24
+#    define BOOST_PP_ITERATION_5 24
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 23 && BOOST_PP_ITERATION_START_5 >= 23
+#    define BOOST_PP_ITERATION_5 23
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 22 && BOOST_PP_ITERATION_START_5 >= 22
+#    define BOOST_PP_ITERATION_5 22
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 21 && BOOST_PP_ITERATION_START_5 >= 21
+#    define BOOST_PP_ITERATION_5 21
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 20 && BOOST_PP_ITERATION_START_5 >= 20
+#    define BOOST_PP_ITERATION_5 20
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 19 && BOOST_PP_ITERATION_START_5 >= 19
+#    define BOOST_PP_ITERATION_5 19
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 18 && BOOST_PP_ITERATION_START_5 >= 18
+#    define BOOST_PP_ITERATION_5 18
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 17 && BOOST_PP_ITERATION_START_5 >= 17
+#    define BOOST_PP_ITERATION_5 17
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 16 && BOOST_PP_ITERATION_START_5 >= 16
+#    define BOOST_PP_ITERATION_5 16
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 15 && BOOST_PP_ITERATION_START_5 >= 15
+#    define BOOST_PP_ITERATION_5 15
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 14 && BOOST_PP_ITERATION_START_5 >= 14
+#    define BOOST_PP_ITERATION_5 14
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 13 && BOOST_PP_ITERATION_START_5 >= 13
+#    define BOOST_PP_ITERATION_5 13
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 12 && BOOST_PP_ITERATION_START_5 >= 12
+#    define BOOST_PP_ITERATION_5 12
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 11 && BOOST_PP_ITERATION_START_5 >= 11
+#    define BOOST_PP_ITERATION_5 11
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 10 && BOOST_PP_ITERATION_START_5 >= 10
+#    define BOOST_PP_ITERATION_5 10
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 9 && BOOST_PP_ITERATION_START_5 >= 9
+#    define BOOST_PP_ITERATION_5 9
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 8 && BOOST_PP_ITERATION_START_5 >= 8
+#    define BOOST_PP_ITERATION_5 8
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 7 && BOOST_PP_ITERATION_START_5 >= 7
+#    define BOOST_PP_ITERATION_5 7
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 6 && BOOST_PP_ITERATION_START_5 >= 6
+#    define BOOST_PP_ITERATION_5 6
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 5 && BOOST_PP_ITERATION_START_5 >= 5
+#    define BOOST_PP_ITERATION_5 5
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 4 && BOOST_PP_ITERATION_START_5 >= 4
+#    define BOOST_PP_ITERATION_5 4
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 3 && BOOST_PP_ITERATION_START_5 >= 3
+#    define BOOST_PP_ITERATION_5 3
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 2 && BOOST_PP_ITERATION_START_5 >= 2
+#    define BOOST_PP_ITERATION_5 2
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 1 && BOOST_PP_ITERATION_START_5 >= 1
+#    define BOOST_PP_ITERATION_5 1
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
+# if BOOST_PP_ITERATION_FINISH_5 <= 0 && BOOST_PP_ITERATION_START_5 >= 0
+#    define BOOST_PP_ITERATION_5 0
+#    include BOOST_PP_FILENAME_5
+#    undef BOOST_PP_ITERATION_5
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/local.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/local.hpp
new file mode 100644
index 0000000..ccddd5e
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/local.hpp
@@ -0,0 +1,812 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# if !defined(BOOST_PP_LOCAL_LIMITS)
+#    error BOOST_PP_ERROR:  local iteration boundaries are not defined
+# elif !defined(BOOST_PP_LOCAL_MACRO)
+#    error BOOST_PP_ERROR:  local iteration target macro is not defined
+# else
+#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#        define BOOST_PP_LOCAL_S BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_LOCAL_LIMITS)
+#        define BOOST_PP_LOCAL_F BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_LOCAL_LIMITS)
+#    else
+#        define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_LOCAL_LIMITS)
+#        include <boost/preprocessor/iteration/detail/start.hpp>
+#        define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_LOCAL_LIMITS)
+#        include <boost/preprocessor/iteration/detail/finish.hpp>
+#        define BOOST_PP_LOCAL_S BOOST_PP_LOCAL_SE()
+#        define BOOST_PP_LOCAL_F BOOST_PP_LOCAL_FE()
+#    endif
+# endif
+#
+# if (BOOST_PP_LOCAL_S) > (BOOST_PP_LOCAL_F)
+#    include <boost/preprocessor/iteration/detail/rlocal.hpp>
+# else
+#    if BOOST_PP_LOCAL_C(0)
+        BOOST_PP_LOCAL_MACRO(0)
+#    endif
+#    if BOOST_PP_LOCAL_C(1)
+        BOOST_PP_LOCAL_MACRO(1)
+#    endif
+#    if BOOST_PP_LOCAL_C(2)
+        BOOST_PP_LOCAL_MACRO(2)
+#    endif
+#    if BOOST_PP_LOCAL_C(3)
+        BOOST_PP_LOCAL_MACRO(3)
+#    endif
+#    if BOOST_PP_LOCAL_C(4)
+        BOOST_PP_LOCAL_MACRO(4)
+#    endif
+#    if BOOST_PP_LOCAL_C(5)
+        BOOST_PP_LOCAL_MACRO(5)
+#    endif
+#    if BOOST_PP_LOCAL_C(6)
+        BOOST_PP_LOCAL_MACRO(6)
+#    endif
+#    if BOOST_PP_LOCAL_C(7)
+        BOOST_PP_LOCAL_MACRO(7)
+#    endif
+#    if BOOST_PP_LOCAL_C(8)
+        BOOST_PP_LOCAL_MACRO(8)
+#    endif
+#    if BOOST_PP_LOCAL_C(9)
+        BOOST_PP_LOCAL_MACRO(9)
+#    endif
+#    if BOOST_PP_LOCAL_C(10)
+        BOOST_PP_LOCAL_MACRO(10)
+#    endif
+#    if BOOST_PP_LOCAL_C(11)
+        BOOST_PP_LOCAL_MACRO(11)
+#    endif
+#    if BOOST_PP_LOCAL_C(12)
+        BOOST_PP_LOCAL_MACRO(12)
+#    endif
+#    if BOOST_PP_LOCAL_C(13)
+        BOOST_PP_LOCAL_MACRO(13)
+#    endif
+#    if BOOST_PP_LOCAL_C(14)
+        BOOST_PP_LOCAL_MACRO(14)
+#    endif
+#    if BOOST_PP_LOCAL_C(15)
+        BOOST_PP_LOCAL_MACRO(15)
+#    endif
+#    if BOOST_PP_LOCAL_C(16)
+        BOOST_PP_LOCAL_MACRO(16)
+#    endif
+#    if BOOST_PP_LOCAL_C(17)
+        BOOST_PP_LOCAL_MACRO(17)
+#    endif
+#    if BOOST_PP_LOCAL_C(18)
+        BOOST_PP_LOCAL_MACRO(18)
+#    endif
+#    if BOOST_PP_LOCAL_C(19)
+        BOOST_PP_LOCAL_MACRO(19)
+#    endif
+#    if BOOST_PP_LOCAL_C(20)
+        BOOST_PP_LOCAL_MACRO(20)
+#    endif
+#    if BOOST_PP_LOCAL_C(21)
+        BOOST_PP_LOCAL_MACRO(21)
+#    endif
+#    if BOOST_PP_LOCAL_C(22)
+        BOOST_PP_LOCAL_MACRO(22)
+#    endif
+#    if BOOST_PP_LOCAL_C(23)
+        BOOST_PP_LOCAL_MACRO(23)
+#    endif
+#    if BOOST_PP_LOCAL_C(24)
+        BOOST_PP_LOCAL_MACRO(24)
+#    endif
+#    if BOOST_PP_LOCAL_C(25)
+        BOOST_PP_LOCAL_MACRO(25)
+#    endif
+#    if BOOST_PP_LOCAL_C(26)
+        BOOST_PP_LOCAL_MACRO(26)
+#    endif
+#    if BOOST_PP_LOCAL_C(27)
+        BOOST_PP_LOCAL_MACRO(27)
+#    endif
+#    if BOOST_PP_LOCAL_C(28)
+        BOOST_PP_LOCAL_MACRO(28)
+#    endif
+#    if BOOST_PP_LOCAL_C(29)
+        BOOST_PP_LOCAL_MACRO(29)
+#    endif
+#    if BOOST_PP_LOCAL_C(30)
+        BOOST_PP_LOCAL_MACRO(30)
+#    endif
+#    if BOOST_PP_LOCAL_C(31)
+        BOOST_PP_LOCAL_MACRO(31)
+#    endif
+#    if BOOST_PP_LOCAL_C(32)
+        BOOST_PP_LOCAL_MACRO(32)
+#    endif
+#    if BOOST_PP_LOCAL_C(33)
+        BOOST_PP_LOCAL_MACRO(33)
+#    endif
+#    if BOOST_PP_LOCAL_C(34)
+        BOOST_PP_LOCAL_MACRO(34)
+#    endif
+#    if BOOST_PP_LOCAL_C(35)
+        BOOST_PP_LOCAL_MACRO(35)
+#    endif
+#    if BOOST_PP_LOCAL_C(36)
+        BOOST_PP_LOCAL_MACRO(36)
+#    endif
+#    if BOOST_PP_LOCAL_C(37)
+        BOOST_PP_LOCAL_MACRO(37)
+#    endif
+#    if BOOST_PP_LOCAL_C(38)
+        BOOST_PP_LOCAL_MACRO(38)
+#    endif
+#    if BOOST_PP_LOCAL_C(39)
+        BOOST_PP_LOCAL_MACRO(39)
+#    endif
+#    if BOOST_PP_LOCAL_C(40)
+        BOOST_PP_LOCAL_MACRO(40)
+#    endif
+#    if BOOST_PP_LOCAL_C(41)
+        BOOST_PP_LOCAL_MACRO(41)
+#    endif
+#    if BOOST_PP_LOCAL_C(42)
+        BOOST_PP_LOCAL_MACRO(42)
+#    endif
+#    if BOOST_PP_LOCAL_C(43)
+        BOOST_PP_LOCAL_MACRO(43)
+#    endif
+#    if BOOST_PP_LOCAL_C(44)
+        BOOST_PP_LOCAL_MACRO(44)
+#    endif
+#    if BOOST_PP_LOCAL_C(45)
+        BOOST_PP_LOCAL_MACRO(45)
+#    endif
+#    if BOOST_PP_LOCAL_C(46)
+        BOOST_PP_LOCAL_MACRO(46)
+#    endif
+#    if BOOST_PP_LOCAL_C(47)
+        BOOST_PP_LOCAL_MACRO(47)
+#    endif
+#    if BOOST_PP_LOCAL_C(48)
+        BOOST_PP_LOCAL_MACRO(48)
+#    endif
+#    if BOOST_PP_LOCAL_C(49)
+        BOOST_PP_LOCAL_MACRO(49)
+#    endif
+#    if BOOST_PP_LOCAL_C(50)
+        BOOST_PP_LOCAL_MACRO(50)
+#    endif
+#    if BOOST_PP_LOCAL_C(51)
+        BOOST_PP_LOCAL_MACRO(51)
+#    endif
+#    if BOOST_PP_LOCAL_C(52)
+        BOOST_PP_LOCAL_MACRO(52)
+#    endif
+#    if BOOST_PP_LOCAL_C(53)
+        BOOST_PP_LOCAL_MACRO(53)
+#    endif
+#    if BOOST_PP_LOCAL_C(54)
+        BOOST_PP_LOCAL_MACRO(54)
+#    endif
+#    if BOOST_PP_LOCAL_C(55)
+        BOOST_PP_LOCAL_MACRO(55)
+#    endif
+#    if BOOST_PP_LOCAL_C(56)
+        BOOST_PP_LOCAL_MACRO(56)
+#    endif
+#    if BOOST_PP_LOCAL_C(57)
+        BOOST_PP_LOCAL_MACRO(57)
+#    endif
+#    if BOOST_PP_LOCAL_C(58)
+        BOOST_PP_LOCAL_MACRO(58)
+#    endif
+#    if BOOST_PP_LOCAL_C(59)
+        BOOST_PP_LOCAL_MACRO(59)
+#    endif
+#    if BOOST_PP_LOCAL_C(60)
+        BOOST_PP_LOCAL_MACRO(60)
+#    endif
+#    if BOOST_PP_LOCAL_C(61)
+        BOOST_PP_LOCAL_MACRO(61)
+#    endif
+#    if BOOST_PP_LOCAL_C(62)
+        BOOST_PP_LOCAL_MACRO(62)
+#    endif
+#    if BOOST_PP_LOCAL_C(63)
+        BOOST_PP_LOCAL_MACRO(63)
+#    endif
+#    if BOOST_PP_LOCAL_C(64)
+        BOOST_PP_LOCAL_MACRO(64)
+#    endif
+#    if BOOST_PP_LOCAL_C(65)
+        BOOST_PP_LOCAL_MACRO(65)
+#    endif
+#    if BOOST_PP_LOCAL_C(66)
+        BOOST_PP_LOCAL_MACRO(66)
+#    endif
+#    if BOOST_PP_LOCAL_C(67)
+        BOOST_PP_LOCAL_MACRO(67)
+#    endif
+#    if BOOST_PP_LOCAL_C(68)
+        BOOST_PP_LOCAL_MACRO(68)
+#    endif
+#    if BOOST_PP_LOCAL_C(69)
+        BOOST_PP_LOCAL_MACRO(69)
+#    endif
+#    if BOOST_PP_LOCAL_C(70)
+        BOOST_PP_LOCAL_MACRO(70)
+#    endif
+#    if BOOST_PP_LOCAL_C(71)
+        BOOST_PP_LOCAL_MACRO(71)
+#    endif
+#    if BOOST_PP_LOCAL_C(72)
+        BOOST_PP_LOCAL_MACRO(72)
+#    endif
+#    if BOOST_PP_LOCAL_C(73)
+        BOOST_PP_LOCAL_MACRO(73)
+#    endif
+#    if BOOST_PP_LOCAL_C(74)
+        BOOST_PP_LOCAL_MACRO(74)
+#    endif
+#    if BOOST_PP_LOCAL_C(75)
+        BOOST_PP_LOCAL_MACRO(75)
+#    endif
+#    if BOOST_PP_LOCAL_C(76)
+        BOOST_PP_LOCAL_MACRO(76)
+#    endif
+#    if BOOST_PP_LOCAL_C(77)
+        BOOST_PP_LOCAL_MACRO(77)
+#    endif
+#    if BOOST_PP_LOCAL_C(78)
+        BOOST_PP_LOCAL_MACRO(78)
+#    endif
+#    if BOOST_PP_LOCAL_C(79)
+        BOOST_PP_LOCAL_MACRO(79)
+#    endif
+#    if BOOST_PP_LOCAL_C(80)
+        BOOST_PP_LOCAL_MACRO(80)
+#    endif
+#    if BOOST_PP_LOCAL_C(81)
+        BOOST_PP_LOCAL_MACRO(81)
+#    endif
+#    if BOOST_PP_LOCAL_C(82)
+        BOOST_PP_LOCAL_MACRO(82)
+#    endif
+#    if BOOST_PP_LOCAL_C(83)
+        BOOST_PP_LOCAL_MACRO(83)
+#    endif
+#    if BOOST_PP_LOCAL_C(84)
+        BOOST_PP_LOCAL_MACRO(84)
+#    endif
+#    if BOOST_PP_LOCAL_C(85)
+        BOOST_PP_LOCAL_MACRO(85)
+#    endif
+#    if BOOST_PP_LOCAL_C(86)
+        BOOST_PP_LOCAL_MACRO(86)
+#    endif
+#    if BOOST_PP_LOCAL_C(87)
+        BOOST_PP_LOCAL_MACRO(87)
+#    endif
+#    if BOOST_PP_LOCAL_C(88)
+        BOOST_PP_LOCAL_MACRO(88)
+#    endif
+#    if BOOST_PP_LOCAL_C(89)
+        BOOST_PP_LOCAL_MACRO(89)
+#    endif
+#    if BOOST_PP_LOCAL_C(90)
+        BOOST_PP_LOCAL_MACRO(90)
+#    endif
+#    if BOOST_PP_LOCAL_C(91)
+        BOOST_PP_LOCAL_MACRO(91)
+#    endif
+#    if BOOST_PP_LOCAL_C(92)
+        BOOST_PP_LOCAL_MACRO(92)
+#    endif
+#    if BOOST_PP_LOCAL_C(93)
+        BOOST_PP_LOCAL_MACRO(93)
+#    endif
+#    if BOOST_PP_LOCAL_C(94)
+        BOOST_PP_LOCAL_MACRO(94)
+#    endif
+#    if BOOST_PP_LOCAL_C(95)
+        BOOST_PP_LOCAL_MACRO(95)
+#    endif
+#    if BOOST_PP_LOCAL_C(96)
+        BOOST_PP_LOCAL_MACRO(96)
+#    endif
+#    if BOOST_PP_LOCAL_C(97)
+        BOOST_PP_LOCAL_MACRO(97)
+#    endif
+#    if BOOST_PP_LOCAL_C(98)
+        BOOST_PP_LOCAL_MACRO(98)
+#    endif
+#    if BOOST_PP_LOCAL_C(99)
+        BOOST_PP_LOCAL_MACRO(99)
+#    endif
+#    if BOOST_PP_LOCAL_C(100)
+        BOOST_PP_LOCAL_MACRO(100)
+#    endif
+#    if BOOST_PP_LOCAL_C(101)
+        BOOST_PP_LOCAL_MACRO(101)
+#    endif
+#    if BOOST_PP_LOCAL_C(102)
+        BOOST_PP_LOCAL_MACRO(102)
+#    endif
+#    if BOOST_PP_LOCAL_C(103)
+        BOOST_PP_LOCAL_MACRO(103)
+#    endif
+#    if BOOST_PP_LOCAL_C(104)
+        BOOST_PP_LOCAL_MACRO(104)
+#    endif
+#    if BOOST_PP_LOCAL_C(105)
+        BOOST_PP_LOCAL_MACRO(105)
+#    endif
+#    if BOOST_PP_LOCAL_C(106)
+        BOOST_PP_LOCAL_MACRO(106)
+#    endif
+#    if BOOST_PP_LOCAL_C(107)
+        BOOST_PP_LOCAL_MACRO(107)
+#    endif
+#    if BOOST_PP_LOCAL_C(108)
+        BOOST_PP_LOCAL_MACRO(108)
+#    endif
+#    if BOOST_PP_LOCAL_C(109)
+        BOOST_PP_LOCAL_MACRO(109)
+#    endif
+#    if BOOST_PP_LOCAL_C(110)
+        BOOST_PP_LOCAL_MACRO(110)
+#    endif
+#    if BOOST_PP_LOCAL_C(111)
+        BOOST_PP_LOCAL_MACRO(111)
+#    endif
+#    if BOOST_PP_LOCAL_C(112)
+        BOOST_PP_LOCAL_MACRO(112)
+#    endif
+#    if BOOST_PP_LOCAL_C(113)
+        BOOST_PP_LOCAL_MACRO(113)
+#    endif
+#    if BOOST_PP_LOCAL_C(114)
+        BOOST_PP_LOCAL_MACRO(114)
+#    endif
+#    if BOOST_PP_LOCAL_C(115)
+        BOOST_PP_LOCAL_MACRO(115)
+#    endif
+#    if BOOST_PP_LOCAL_C(116)
+        BOOST_PP_LOCAL_MACRO(116)
+#    endif
+#    if BOOST_PP_LOCAL_C(117)
+        BOOST_PP_LOCAL_MACRO(117)
+#    endif
+#    if BOOST_PP_LOCAL_C(118)
+        BOOST_PP_LOCAL_MACRO(118)
+#    endif
+#    if BOOST_PP_LOCAL_C(119)
+        BOOST_PP_LOCAL_MACRO(119)
+#    endif
+#    if BOOST_PP_LOCAL_C(120)
+        BOOST_PP_LOCAL_MACRO(120)
+#    endif
+#    if BOOST_PP_LOCAL_C(121)
+        BOOST_PP_LOCAL_MACRO(121)
+#    endif
+#    if BOOST_PP_LOCAL_C(122)
+        BOOST_PP_LOCAL_MACRO(122)
+#    endif
+#    if BOOST_PP_LOCAL_C(123)
+        BOOST_PP_LOCAL_MACRO(123)
+#    endif
+#    if BOOST_PP_LOCAL_C(124)
+        BOOST_PP_LOCAL_MACRO(124)
+#    endif
+#    if BOOST_PP_LOCAL_C(125)
+        BOOST_PP_LOCAL_MACRO(125)
+#    endif
+#    if BOOST_PP_LOCAL_C(126)
+        BOOST_PP_LOCAL_MACRO(126)
+#    endif
+#    if BOOST_PP_LOCAL_C(127)
+        BOOST_PP_LOCAL_MACRO(127)
+#    endif
+#    if BOOST_PP_LOCAL_C(128)
+        BOOST_PP_LOCAL_MACRO(128)
+#    endif
+#    if BOOST_PP_LOCAL_C(129)
+        BOOST_PP_LOCAL_MACRO(129)
+#    endif
+#    if BOOST_PP_LOCAL_C(130)
+        BOOST_PP_LOCAL_MACRO(130)
+#    endif
+#    if BOOST_PP_LOCAL_C(131)
+        BOOST_PP_LOCAL_MACRO(131)
+#    endif
+#    if BOOST_PP_LOCAL_C(132)
+        BOOST_PP_LOCAL_MACRO(132)
+#    endif
+#    if BOOST_PP_LOCAL_C(133)
+        BOOST_PP_LOCAL_MACRO(133)
+#    endif
+#    if BOOST_PP_LOCAL_C(134)
+        BOOST_PP_LOCAL_MACRO(134)
+#    endif
+#    if BOOST_PP_LOCAL_C(135)
+        BOOST_PP_LOCAL_MACRO(135)
+#    endif
+#    if BOOST_PP_LOCAL_C(136)
+        BOOST_PP_LOCAL_MACRO(136)
+#    endif
+#    if BOOST_PP_LOCAL_C(137)
+        BOOST_PP_LOCAL_MACRO(137)
+#    endif
+#    if BOOST_PP_LOCAL_C(138)
+        BOOST_PP_LOCAL_MACRO(138)
+#    endif
+#    if BOOST_PP_LOCAL_C(139)
+        BOOST_PP_LOCAL_MACRO(139)
+#    endif
+#    if BOOST_PP_LOCAL_C(140)
+        BOOST_PP_LOCAL_MACRO(140)
+#    endif
+#    if BOOST_PP_LOCAL_C(141)
+        BOOST_PP_LOCAL_MACRO(141)
+#    endif
+#    if BOOST_PP_LOCAL_C(142)
+        BOOST_PP_LOCAL_MACRO(142)
+#    endif
+#    if BOOST_PP_LOCAL_C(143)
+        BOOST_PP_LOCAL_MACRO(143)
+#    endif
+#    if BOOST_PP_LOCAL_C(144)
+        BOOST_PP_LOCAL_MACRO(144)
+#    endif
+#    if BOOST_PP_LOCAL_C(145)
+        BOOST_PP_LOCAL_MACRO(145)
+#    endif
+#    if BOOST_PP_LOCAL_C(146)
+        BOOST_PP_LOCAL_MACRO(146)
+#    endif
+#    if BOOST_PP_LOCAL_C(147)
+        BOOST_PP_LOCAL_MACRO(147)
+#    endif
+#    if BOOST_PP_LOCAL_C(148)
+        BOOST_PP_LOCAL_MACRO(148)
+#    endif
+#    if BOOST_PP_LOCAL_C(149)
+        BOOST_PP_LOCAL_MACRO(149)
+#    endif
+#    if BOOST_PP_LOCAL_C(150)
+        BOOST_PP_LOCAL_MACRO(150)
+#    endif
+#    if BOOST_PP_LOCAL_C(151)
+        BOOST_PP_LOCAL_MACRO(151)
+#    endif
+#    if BOOST_PP_LOCAL_C(152)
+        BOOST_PP_LOCAL_MACRO(152)
+#    endif
+#    if BOOST_PP_LOCAL_C(153)
+        BOOST_PP_LOCAL_MACRO(153)
+#    endif
+#    if BOOST_PP_LOCAL_C(154)
+        BOOST_PP_LOCAL_MACRO(154)
+#    endif
+#    if BOOST_PP_LOCAL_C(155)
+        BOOST_PP_LOCAL_MACRO(155)
+#    endif
+#    if BOOST_PP_LOCAL_C(156)
+        BOOST_PP_LOCAL_MACRO(156)
+#    endif
+#    if BOOST_PP_LOCAL_C(157)
+        BOOST_PP_LOCAL_MACRO(157)
+#    endif
+#    if BOOST_PP_LOCAL_C(158)
+        BOOST_PP_LOCAL_MACRO(158)
+#    endif
+#    if BOOST_PP_LOCAL_C(159)
+        BOOST_PP_LOCAL_MACRO(159)
+#    endif
+#    if BOOST_PP_LOCAL_C(160)
+        BOOST_PP_LOCAL_MACRO(160)
+#    endif
+#    if BOOST_PP_LOCAL_C(161)
+        BOOST_PP_LOCAL_MACRO(161)
+#    endif
+#    if BOOST_PP_LOCAL_C(162)
+        BOOST_PP_LOCAL_MACRO(162)
+#    endif
+#    if BOOST_PP_LOCAL_C(163)
+        BOOST_PP_LOCAL_MACRO(163)
+#    endif
+#    if BOOST_PP_LOCAL_C(164)
+        BOOST_PP_LOCAL_MACRO(164)
+#    endif
+#    if BOOST_PP_LOCAL_C(165)
+        BOOST_PP_LOCAL_MACRO(165)
+#    endif
+#    if BOOST_PP_LOCAL_C(166)
+        BOOST_PP_LOCAL_MACRO(166)
+#    endif
+#    if BOOST_PP_LOCAL_C(167)
+        BOOST_PP_LOCAL_MACRO(167)
+#    endif
+#    if BOOST_PP_LOCAL_C(168)
+        BOOST_PP_LOCAL_MACRO(168)
+#    endif
+#    if BOOST_PP_LOCAL_C(169)
+        BOOST_PP_LOCAL_MACRO(169)
+#    endif
+#    if BOOST_PP_LOCAL_C(170)
+        BOOST_PP_LOCAL_MACRO(170)
+#    endif
+#    if BOOST_PP_LOCAL_C(171)
+        BOOST_PP_LOCAL_MACRO(171)
+#    endif
+#    if BOOST_PP_LOCAL_C(172)
+        BOOST_PP_LOCAL_MACRO(172)
+#    endif
+#    if BOOST_PP_LOCAL_C(173)
+        BOOST_PP_LOCAL_MACRO(173)
+#    endif
+#    if BOOST_PP_LOCAL_C(174)
+        BOOST_PP_LOCAL_MACRO(174)
+#    endif
+#    if BOOST_PP_LOCAL_C(175)
+        BOOST_PP_LOCAL_MACRO(175)
+#    endif
+#    if BOOST_PP_LOCAL_C(176)
+        BOOST_PP_LOCAL_MACRO(176)
+#    endif
+#    if BOOST_PP_LOCAL_C(177)
+        BOOST_PP_LOCAL_MACRO(177)
+#    endif
+#    if BOOST_PP_LOCAL_C(178)
+        BOOST_PP_LOCAL_MACRO(178)
+#    endif
+#    if BOOST_PP_LOCAL_C(179)
+        BOOST_PP_LOCAL_MACRO(179)
+#    endif
+#    if BOOST_PP_LOCAL_C(180)
+        BOOST_PP_LOCAL_MACRO(180)
+#    endif
+#    if BOOST_PP_LOCAL_C(181)
+        BOOST_PP_LOCAL_MACRO(181)
+#    endif
+#    if BOOST_PP_LOCAL_C(182)
+        BOOST_PP_LOCAL_MACRO(182)
+#    endif
+#    if BOOST_PP_LOCAL_C(183)
+        BOOST_PP_LOCAL_MACRO(183)
+#    endif
+#    if BOOST_PP_LOCAL_C(184)
+        BOOST_PP_LOCAL_MACRO(184)
+#    endif
+#    if BOOST_PP_LOCAL_C(185)
+        BOOST_PP_LOCAL_MACRO(185)
+#    endif
+#    if BOOST_PP_LOCAL_C(186)
+        BOOST_PP_LOCAL_MACRO(186)
+#    endif
+#    if BOOST_PP_LOCAL_C(187)
+        BOOST_PP_LOCAL_MACRO(187)
+#    endif
+#    if BOOST_PP_LOCAL_C(188)
+        BOOST_PP_LOCAL_MACRO(188)
+#    endif
+#    if BOOST_PP_LOCAL_C(189)
+        BOOST_PP_LOCAL_MACRO(189)
+#    endif
+#    if BOOST_PP_LOCAL_C(190)
+        BOOST_PP_LOCAL_MACRO(190)
+#    endif
+#    if BOOST_PP_LOCAL_C(191)
+        BOOST_PP_LOCAL_MACRO(191)
+#    endif
+#    if BOOST_PP_LOCAL_C(192)
+        BOOST_PP_LOCAL_MACRO(192)
+#    endif
+#    if BOOST_PP_LOCAL_C(193)
+        BOOST_PP_LOCAL_MACRO(193)
+#    endif
+#    if BOOST_PP_LOCAL_C(194)
+        BOOST_PP_LOCAL_MACRO(194)
+#    endif
+#    if BOOST_PP_LOCAL_C(195)
+        BOOST_PP_LOCAL_MACRO(195)
+#    endif
+#    if BOOST_PP_LOCAL_C(196)
+        BOOST_PP_LOCAL_MACRO(196)
+#    endif
+#    if BOOST_PP_LOCAL_C(197)
+        BOOST_PP_LOCAL_MACRO(197)
+#    endif
+#    if BOOST_PP_LOCAL_C(198)
+        BOOST_PP_LOCAL_MACRO(198)
+#    endif
+#    if BOOST_PP_LOCAL_C(199)
+        BOOST_PP_LOCAL_MACRO(199)
+#    endif
+#    if BOOST_PP_LOCAL_C(200)
+        BOOST_PP_LOCAL_MACRO(200)
+#    endif
+#    if BOOST_PP_LOCAL_C(201)
+        BOOST_PP_LOCAL_MACRO(201)
+#    endif
+#    if BOOST_PP_LOCAL_C(202)
+        BOOST_PP_LOCAL_MACRO(202)
+#    endif
+#    if BOOST_PP_LOCAL_C(203)
+        BOOST_PP_LOCAL_MACRO(203)
+#    endif
+#    if BOOST_PP_LOCAL_C(204)
+        BOOST_PP_LOCAL_MACRO(204)
+#    endif
+#    if BOOST_PP_LOCAL_C(205)
+        BOOST_PP_LOCAL_MACRO(205)
+#    endif
+#    if BOOST_PP_LOCAL_C(206)
+        BOOST_PP_LOCAL_MACRO(206)
+#    endif
+#    if BOOST_PP_LOCAL_C(207)
+        BOOST_PP_LOCAL_MACRO(207)
+#    endif
+#    if BOOST_PP_LOCAL_C(208)
+        BOOST_PP_LOCAL_MACRO(208)
+#    endif
+#    if BOOST_PP_LOCAL_C(209)
+        BOOST_PP_LOCAL_MACRO(209)
+#    endif
+#    if BOOST_PP_LOCAL_C(210)
+        BOOST_PP_LOCAL_MACRO(210)
+#    endif
+#    if BOOST_PP_LOCAL_C(211)
+        BOOST_PP_LOCAL_MACRO(211)
+#    endif
+#    if BOOST_PP_LOCAL_C(212)
+        BOOST_PP_LOCAL_MACRO(212)
+#    endif
+#    if BOOST_PP_LOCAL_C(213)
+        BOOST_PP_LOCAL_MACRO(213)
+#    endif
+#    if BOOST_PP_LOCAL_C(214)
+        BOOST_PP_LOCAL_MACRO(214)
+#    endif
+#    if BOOST_PP_LOCAL_C(215)
+        BOOST_PP_LOCAL_MACRO(215)
+#    endif
+#    if BOOST_PP_LOCAL_C(216)
+        BOOST_PP_LOCAL_MACRO(216)
+#    endif
+#    if BOOST_PP_LOCAL_C(217)
+        BOOST_PP_LOCAL_MACRO(217)
+#    endif
+#    if BOOST_PP_LOCAL_C(218)
+        BOOST_PP_LOCAL_MACRO(218)
+#    endif
+#    if BOOST_PP_LOCAL_C(219)
+        BOOST_PP_LOCAL_MACRO(219)
+#    endif
+#    if BOOST_PP_LOCAL_C(220)
+        BOOST_PP_LOCAL_MACRO(220)
+#    endif
+#    if BOOST_PP_LOCAL_C(221)
+        BOOST_PP_LOCAL_MACRO(221)
+#    endif
+#    if BOOST_PP_LOCAL_C(222)
+        BOOST_PP_LOCAL_MACRO(222)
+#    endif
+#    if BOOST_PP_LOCAL_C(223)
+        BOOST_PP_LOCAL_MACRO(223)
+#    endif
+#    if BOOST_PP_LOCAL_C(224)
+        BOOST_PP_LOCAL_MACRO(224)
+#    endif
+#    if BOOST_PP_LOCAL_C(225)
+        BOOST_PP_LOCAL_MACRO(225)
+#    endif
+#    if BOOST_PP_LOCAL_C(226)
+        BOOST_PP_LOCAL_MACRO(226)
+#    endif
+#    if BOOST_PP_LOCAL_C(227)
+        BOOST_PP_LOCAL_MACRO(227)
+#    endif
+#    if BOOST_PP_LOCAL_C(228)
+        BOOST_PP_LOCAL_MACRO(228)
+#    endif
+#    if BOOST_PP_LOCAL_C(229)
+        BOOST_PP_LOCAL_MACRO(229)
+#    endif
+#    if BOOST_PP_LOCAL_C(230)
+        BOOST_PP_LOCAL_MACRO(230)
+#    endif
+#    if BOOST_PP_LOCAL_C(231)
+        BOOST_PP_LOCAL_MACRO(231)
+#    endif
+#    if BOOST_PP_LOCAL_C(232)
+        BOOST_PP_LOCAL_MACRO(232)
+#    endif
+#    if BOOST_PP_LOCAL_C(233)
+        BOOST_PP_LOCAL_MACRO(233)
+#    endif
+#    if BOOST_PP_LOCAL_C(234)
+        BOOST_PP_LOCAL_MACRO(234)
+#    endif
+#    if BOOST_PP_LOCAL_C(235)
+        BOOST_PP_LOCAL_MACRO(235)
+#    endif
+#    if BOOST_PP_LOCAL_C(236)
+        BOOST_PP_LOCAL_MACRO(236)
+#    endif
+
+#    if BOOST_PP_LOCAL_C(237)
+        BOOST_PP_LOCAL_MACRO(237)
+#    endif
+#    if BOOST_PP_LOCAL_C(238)
+        BOOST_PP_LOCAL_MACRO(238)
+#    endif
+#    if BOOST_PP_LOCAL_C(239)
+        BOOST_PP_LOCAL_MACRO(239)
+#    endif
+#    if BOOST_PP_LOCAL_C(240)
+        BOOST_PP_LOCAL_MACRO(240)
+#    endif
+#    if BOOST_PP_LOCAL_C(241)
+        BOOST_PP_LOCAL_MACRO(241)
+#    endif
+#    if BOOST_PP_LOCAL_C(242)
+        BOOST_PP_LOCAL_MACRO(242)
+#    endif
+#    if BOOST_PP_LOCAL_C(243)
+        BOOST_PP_LOCAL_MACRO(243)
+#    endif
+#    if BOOST_PP_LOCAL_C(244)
+        BOOST_PP_LOCAL_MACRO(244)
+#    endif
+#    if BOOST_PP_LOCAL_C(245)
+        BOOST_PP_LOCAL_MACRO(245)
+#    endif
+#    if BOOST_PP_LOCAL_C(246)
+        BOOST_PP_LOCAL_MACRO(246)
+#    endif
+#    if BOOST_PP_LOCAL_C(247)
+        BOOST_PP_LOCAL_MACRO(247)
+#    endif
+#    if BOOST_PP_LOCAL_C(248)
+        BOOST_PP_LOCAL_MACRO(248)
+#    endif
+#    if BOOST_PP_LOCAL_C(249)
+        BOOST_PP_LOCAL_MACRO(249)
+#    endif
+#    if BOOST_PP_LOCAL_C(250)
+        BOOST_PP_LOCAL_MACRO(250)
+#    endif
+#    if BOOST_PP_LOCAL_C(251)
+        BOOST_PP_LOCAL_MACRO(251)
+#    endif
+#    if BOOST_PP_LOCAL_C(252)
+        BOOST_PP_LOCAL_MACRO(252)
+#    endif
+#    if BOOST_PP_LOCAL_C(253)
+        BOOST_PP_LOCAL_MACRO(253)
+#    endif
+#    if BOOST_PP_LOCAL_C(254)
+        BOOST_PP_LOCAL_MACRO(254)
+#    endif
+#    if BOOST_PP_LOCAL_C(255)
+        BOOST_PP_LOCAL_MACRO(255)
+#    endif
+#    if BOOST_PP_LOCAL_C(256)
+        BOOST_PP_LOCAL_MACRO(256)
+#    endif
+# endif
+#
+# undef BOOST_PP_LOCAL_LIMITS
+#
+# undef BOOST_PP_LOCAL_S
+# undef BOOST_PP_LOCAL_F
+#
+# undef BOOST_PP_LOCAL_MACRO
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/rlocal.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/rlocal.hpp
new file mode 100644
index 0000000..413afa0
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/rlocal.hpp
@@ -0,0 +1,782 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# if BOOST_PP_LOCAL_R(256)
+    BOOST_PP_LOCAL_MACRO(256)
+# endif
+# if BOOST_PP_LOCAL_R(255)
+    BOOST_PP_LOCAL_MACRO(255)
+# endif
+# if BOOST_PP_LOCAL_R(254)
+    BOOST_PP_LOCAL_MACRO(254)
+# endif
+# if BOOST_PP_LOCAL_R(253)
+    BOOST_PP_LOCAL_MACRO(253)
+# endif
+# if BOOST_PP_LOCAL_R(252)
+    BOOST_PP_LOCAL_MACRO(252)
+# endif
+# if BOOST_PP_LOCAL_R(251)
+    BOOST_PP_LOCAL_MACRO(251)
+# endif
+# if BOOST_PP_LOCAL_R(250)
+    BOOST_PP_LOCAL_MACRO(250)
+# endif
+# if BOOST_PP_LOCAL_R(249)
+    BOOST_PP_LOCAL_MACRO(249)
+# endif
+# if BOOST_PP_LOCAL_R(248)
+    BOOST_PP_LOCAL_MACRO(248)
+# endif
+# if BOOST_PP_LOCAL_R(247)
+    BOOST_PP_LOCAL_MACRO(247)
+# endif
+# if BOOST_PP_LOCAL_R(246)
+    BOOST_PP_LOCAL_MACRO(246)
+# endif
+# if BOOST_PP_LOCAL_R(245)
+    BOOST_PP_LOCAL_MACRO(245)
+# endif
+# if BOOST_PP_LOCAL_R(244)
+    BOOST_PP_LOCAL_MACRO(244)
+# endif
+# if BOOST_PP_LOCAL_R(243)
+    BOOST_PP_LOCAL_MACRO(243)
+# endif
+# if BOOST_PP_LOCAL_R(242)
+    BOOST_PP_LOCAL_MACRO(242)
+# endif
+# if BOOST_PP_LOCAL_R(241)
+    BOOST_PP_LOCAL_MACRO(241)
+# endif
+# if BOOST_PP_LOCAL_R(240)
+    BOOST_PP_LOCAL_MACRO(240)
+# endif
+# if BOOST_PP_LOCAL_R(239)
+    BOOST_PP_LOCAL_MACRO(239)
+# endif
+# if BOOST_PP_LOCAL_R(238)
+    BOOST_PP_LOCAL_MACRO(238)
+# endif
+# if BOOST_PP_LOCAL_R(237)
+    BOOST_PP_LOCAL_MACRO(237)
+# endif
+# if BOOST_PP_LOCAL_R(236)
+    BOOST_PP_LOCAL_MACRO(236)
+# endif
+# if BOOST_PP_LOCAL_R(235)
+    BOOST_PP_LOCAL_MACRO(235)
+# endif
+# if BOOST_PP_LOCAL_R(234)
+    BOOST_PP_LOCAL_MACRO(234)
+# endif
+# if BOOST_PP_LOCAL_R(233)
+    BOOST_PP_LOCAL_MACRO(233)
+# endif
+# if BOOST_PP_LOCAL_R(232)
+    BOOST_PP_LOCAL_MACRO(232)
+# endif
+# if BOOST_PP_LOCAL_R(231)
+    BOOST_PP_LOCAL_MACRO(231)
+# endif
+# if BOOST_PP_LOCAL_R(230)
+    BOOST_PP_LOCAL_MACRO(230)
+# endif
+# if BOOST_PP_LOCAL_R(229)
+    BOOST_PP_LOCAL_MACRO(229)
+# endif
+# if BOOST_PP_LOCAL_R(228)
+    BOOST_PP_LOCAL_MACRO(228)
+# endif
+# if BOOST_PP_LOCAL_R(227)
+    BOOST_PP_LOCAL_MACRO(227)
+# endif
+# if BOOST_PP_LOCAL_R(226)
+    BOOST_PP_LOCAL_MACRO(226)
+# endif
+# if BOOST_PP_LOCAL_R(225)
+    BOOST_PP_LOCAL_MACRO(225)
+# endif
+# if BOOST_PP_LOCAL_R(224)
+    BOOST_PP_LOCAL_MACRO(224)
+# endif
+# if BOOST_PP_LOCAL_R(223)
+    BOOST_PP_LOCAL_MACRO(223)
+# endif
+# if BOOST_PP_LOCAL_R(222)
+    BOOST_PP_LOCAL_MACRO(222)
+# endif
+# if BOOST_PP_LOCAL_R(221)
+    BOOST_PP_LOCAL_MACRO(221)
+# endif
+# if BOOST_PP_LOCAL_R(220)
+    BOOST_PP_LOCAL_MACRO(220)
+# endif
+# if BOOST_PP_LOCAL_R(219)
+    BOOST_PP_LOCAL_MACRO(219)
+# endif
+# if BOOST_PP_LOCAL_R(218)
+    BOOST_PP_LOCAL_MACRO(218)
+# endif
+# if BOOST_PP_LOCAL_R(217)
+    BOOST_PP_LOCAL_MACRO(217)
+# endif
+# if BOOST_PP_LOCAL_R(216)
+    BOOST_PP_LOCAL_MACRO(216)
+# endif
+# if BOOST_PP_LOCAL_R(215)
+    BOOST_PP_LOCAL_MACRO(215)
+# endif
+# if BOOST_PP_LOCAL_R(214)
+    BOOST_PP_LOCAL_MACRO(214)
+# endif
+# if BOOST_PP_LOCAL_R(213)
+    BOOST_PP_LOCAL_MACRO(213)
+# endif
+# if BOOST_PP_LOCAL_R(212)
+    BOOST_PP_LOCAL_MACRO(212)
+# endif
+# if BOOST_PP_LOCAL_R(211)
+    BOOST_PP_LOCAL_MACRO(211)
+# endif
+# if BOOST_PP_LOCAL_R(210)
+    BOOST_PP_LOCAL_MACRO(210)
+# endif
+# if BOOST_PP_LOCAL_R(209)
+    BOOST_PP_LOCAL_MACRO(209)
+# endif
+# if BOOST_PP_LOCAL_R(208)
+    BOOST_PP_LOCAL_MACRO(208)
+# endif
+# if BOOST_PP_LOCAL_R(207)
+    BOOST_PP_LOCAL_MACRO(207)
+# endif
+# if BOOST_PP_LOCAL_R(206)
+    BOOST_PP_LOCAL_MACRO(206)
+# endif
+# if BOOST_PP_LOCAL_R(205)
+    BOOST_PP_LOCAL_MACRO(205)
+# endif
+# if BOOST_PP_LOCAL_R(204)
+    BOOST_PP_LOCAL_MACRO(204)
+# endif
+# if BOOST_PP_LOCAL_R(203)
+    BOOST_PP_LOCAL_MACRO(203)
+# endif
+# if BOOST_PP_LOCAL_R(202)
+    BOOST_PP_LOCAL_MACRO(202)
+# endif
+# if BOOST_PP_LOCAL_R(201)
+    BOOST_PP_LOCAL_MACRO(201)
+# endif
+# if BOOST_PP_LOCAL_R(200)
+    BOOST_PP_LOCAL_MACRO(200)
+# endif
+# if BOOST_PP_LOCAL_R(199)
+    BOOST_PP_LOCAL_MACRO(199)
+# endif
+# if BOOST_PP_LOCAL_R(198)
+    BOOST_PP_LOCAL_MACRO(198)
+# endif
+# if BOOST_PP_LOCAL_R(197)
+    BOOST_PP_LOCAL_MACRO(197)
+# endif
+# if BOOST_PP_LOCAL_R(196)
+    BOOST_PP_LOCAL_MACRO(196)
+# endif
+# if BOOST_PP_LOCAL_R(195)
+    BOOST_PP_LOCAL_MACRO(195)
+# endif
+# if BOOST_PP_LOCAL_R(194)
+    BOOST_PP_LOCAL_MACRO(194)
+# endif
+# if BOOST_PP_LOCAL_R(193)
+    BOOST_PP_LOCAL_MACRO(193)
+# endif
+# if BOOST_PP_LOCAL_R(192)
+    BOOST_PP_LOCAL_MACRO(192)
+# endif
+# if BOOST_PP_LOCAL_R(191)
+    BOOST_PP_LOCAL_MACRO(191)
+# endif
+# if BOOST_PP_LOCAL_R(190)
+    BOOST_PP_LOCAL_MACRO(190)
+# endif
+# if BOOST_PP_LOCAL_R(189)
+    BOOST_PP_LOCAL_MACRO(189)
+# endif
+# if BOOST_PP_LOCAL_R(188)
+    BOOST_PP_LOCAL_MACRO(188)
+# endif
+# if BOOST_PP_LOCAL_R(187)
+    BOOST_PP_LOCAL_MACRO(187)
+# endif
+# if BOOST_PP_LOCAL_R(186)
+    BOOST_PP_LOCAL_MACRO(186)
+# endif
+# if BOOST_PP_LOCAL_R(185)
+    BOOST_PP_LOCAL_MACRO(185)
+# endif
+# if BOOST_PP_LOCAL_R(184)
+    BOOST_PP_LOCAL_MACRO(184)
+# endif
+# if BOOST_PP_LOCAL_R(183)
+    BOOST_PP_LOCAL_MACRO(183)
+# endif
+# if BOOST_PP_LOCAL_R(182)
+    BOOST_PP_LOCAL_MACRO(182)
+# endif
+# if BOOST_PP_LOCAL_R(181)
+    BOOST_PP_LOCAL_MACRO(181)
+# endif
+# if BOOST_PP_LOCAL_R(180)
+    BOOST_PP_LOCAL_MACRO(180)
+# endif
+# if BOOST_PP_LOCAL_R(179)
+    BOOST_PP_LOCAL_MACRO(179)
+# endif
+# if BOOST_PP_LOCAL_R(178)
+    BOOST_PP_LOCAL_MACRO(178)
+# endif
+# if BOOST_PP_LOCAL_R(177)
+    BOOST_PP_LOCAL_MACRO(177)
+# endif
+# if BOOST_PP_LOCAL_R(176)
+    BOOST_PP_LOCAL_MACRO(176)
+# endif
+# if BOOST_PP_LOCAL_R(175)
+    BOOST_PP_LOCAL_MACRO(175)
+# endif
+# if BOOST_PP_LOCAL_R(174)
+    BOOST_PP_LOCAL_MACRO(174)
+# endif
+# if BOOST_PP_LOCAL_R(173)
+    BOOST_PP_LOCAL_MACRO(173)
+# endif
+# if BOOST_PP_LOCAL_R(172)
+    BOOST_PP_LOCAL_MACRO(172)
+# endif
+# if BOOST_PP_LOCAL_R(171)
+    BOOST_PP_LOCAL_MACRO(171)
+# endif
+# if BOOST_PP_LOCAL_R(170)
+    BOOST_PP_LOCAL_MACRO(170)
+# endif
+# if BOOST_PP_LOCAL_R(169)
+    BOOST_PP_LOCAL_MACRO(169)
+# endif
+# if BOOST_PP_LOCAL_R(168)
+    BOOST_PP_LOCAL_MACRO(168)
+# endif
+# if BOOST_PP_LOCAL_R(167)
+    BOOST_PP_LOCAL_MACRO(167)
+# endif
+# if BOOST_PP_LOCAL_R(166)
+    BOOST_PP_LOCAL_MACRO(166)
+# endif
+# if BOOST_PP_LOCAL_R(165)
+    BOOST_PP_LOCAL_MACRO(165)
+# endif
+# if BOOST_PP_LOCAL_R(164)
+    BOOST_PP_LOCAL_MACRO(164)
+# endif
+# if BOOST_PP_LOCAL_R(163)
+    BOOST_PP_LOCAL_MACRO(163)
+# endif
+# if BOOST_PP_LOCAL_R(162)
+    BOOST_PP_LOCAL_MACRO(162)
+# endif
+# if BOOST_PP_LOCAL_R(161)
+    BOOST_PP_LOCAL_MACRO(161)
+# endif
+# if BOOST_PP_LOCAL_R(160)
+    BOOST_PP_LOCAL_MACRO(160)
+# endif
+# if BOOST_PP_LOCAL_R(159)
+    BOOST_PP_LOCAL_MACRO(159)
+# endif
+# if BOOST_PP_LOCAL_R(158)
+    BOOST_PP_LOCAL_MACRO(158)
+# endif
+# if BOOST_PP_LOCAL_R(157)
+    BOOST_PP_LOCAL_MACRO(157)
+# endif
+# if BOOST_PP_LOCAL_R(156)
+    BOOST_PP_LOCAL_MACRO(156)
+# endif
+# if BOOST_PP_LOCAL_R(155)
+    BOOST_PP_LOCAL_MACRO(155)
+# endif
+# if BOOST_PP_LOCAL_R(154)
+    BOOST_PP_LOCAL_MACRO(154)
+# endif
+# if BOOST_PP_LOCAL_R(153)
+    BOOST_PP_LOCAL_MACRO(153)
+# endif
+# if BOOST_PP_LOCAL_R(152)
+    BOOST_PP_LOCAL_MACRO(152)
+# endif
+# if BOOST_PP_LOCAL_R(151)
+    BOOST_PP_LOCAL_MACRO(151)
+# endif
+# if BOOST_PP_LOCAL_R(150)
+    BOOST_PP_LOCAL_MACRO(150)
+# endif
+# if BOOST_PP_LOCAL_R(149)
+    BOOST_PP_LOCAL_MACRO(149)
+# endif
+# if BOOST_PP_LOCAL_R(148)
+    BOOST_PP_LOCAL_MACRO(148)
+# endif
+# if BOOST_PP_LOCAL_R(147)
+    BOOST_PP_LOCAL_MACRO(147)
+# endif
+# if BOOST_PP_LOCAL_R(146)
+    BOOST_PP_LOCAL_MACRO(146)
+# endif
+# if BOOST_PP_LOCAL_R(145)
+    BOOST_PP_LOCAL_MACRO(145)
+# endif
+# if BOOST_PP_LOCAL_R(144)
+    BOOST_PP_LOCAL_MACRO(144)
+# endif
+# if BOOST_PP_LOCAL_R(143)
+    BOOST_PP_LOCAL_MACRO(143)
+# endif
+# if BOOST_PP_LOCAL_R(142)
+    BOOST_PP_LOCAL_MACRO(142)
+# endif
+# if BOOST_PP_LOCAL_R(141)
+    BOOST_PP_LOCAL_MACRO(141)
+# endif
+# if BOOST_PP_LOCAL_R(140)
+    BOOST_PP_LOCAL_MACRO(140)
+# endif
+# if BOOST_PP_LOCAL_R(139)
+    BOOST_PP_LOCAL_MACRO(139)
+# endif
+# if BOOST_PP_LOCAL_R(138)
+    BOOST_PP_LOCAL_MACRO(138)
+# endif
+# if BOOST_PP_LOCAL_R(137)
+    BOOST_PP_LOCAL_MACRO(137)
+# endif
+# if BOOST_PP_LOCAL_R(136)
+    BOOST_PP_LOCAL_MACRO(136)
+# endif
+# if BOOST_PP_LOCAL_R(135)
+    BOOST_PP_LOCAL_MACRO(135)
+# endif
+# if BOOST_PP_LOCAL_R(134)
+    BOOST_PP_LOCAL_MACRO(134)
+# endif
+# if BOOST_PP_LOCAL_R(133)
+    BOOST_PP_LOCAL_MACRO(133)
+# endif
+# if BOOST_PP_LOCAL_R(132)
+    BOOST_PP_LOCAL_MACRO(132)
+# endif
+# if BOOST_PP_LOCAL_R(131)
+    BOOST_PP_LOCAL_MACRO(131)
+# endif
+# if BOOST_PP_LOCAL_R(130)
+    BOOST_PP_LOCAL_MACRO(130)
+# endif
+# if BOOST_PP_LOCAL_R(129)
+    BOOST_PP_LOCAL_MACRO(129)
+# endif
+# if BOOST_PP_LOCAL_R(128)
+    BOOST_PP_LOCAL_MACRO(128)
+# endif
+# if BOOST_PP_LOCAL_R(127)
+    BOOST_PP_LOCAL_MACRO(127)
+# endif
+# if BOOST_PP_LOCAL_R(126)
+    BOOST_PP_LOCAL_MACRO(126)
+# endif
+# if BOOST_PP_LOCAL_R(125)
+    BOOST_PP_LOCAL_MACRO(125)
+# endif
+# if BOOST_PP_LOCAL_R(124)
+    BOOST_PP_LOCAL_MACRO(124)
+# endif
+# if BOOST_PP_LOCAL_R(123)
+    BOOST_PP_LOCAL_MACRO(123)
+# endif
+# if BOOST_PP_LOCAL_R(122)
+    BOOST_PP_LOCAL_MACRO(122)
+# endif
+# if BOOST_PP_LOCAL_R(121)
+    BOOST_PP_LOCAL_MACRO(121)
+# endif
+# if BOOST_PP_LOCAL_R(120)
+    BOOST_PP_LOCAL_MACRO(120)
+# endif
+# if BOOST_PP_LOCAL_R(119)
+    BOOST_PP_LOCAL_MACRO(119)
+# endif
+# if BOOST_PP_LOCAL_R(118)
+    BOOST_PP_LOCAL_MACRO(118)
+# endif
+# if BOOST_PP_LOCAL_R(117)
+    BOOST_PP_LOCAL_MACRO(117)
+# endif
+# if BOOST_PP_LOCAL_R(116)
+    BOOST_PP_LOCAL_MACRO(116)
+# endif
+# if BOOST_PP_LOCAL_R(115)
+    BOOST_PP_LOCAL_MACRO(115)
+# endif
+# if BOOST_PP_LOCAL_R(114)
+    BOOST_PP_LOCAL_MACRO(114)
+# endif
+# if BOOST_PP_LOCAL_R(113)
+    BOOST_PP_LOCAL_MACRO(113)
+# endif
+# if BOOST_PP_LOCAL_R(112)
+    BOOST_PP_LOCAL_MACRO(112)
+# endif
+# if BOOST_PP_LOCAL_R(111)
+    BOOST_PP_LOCAL_MACRO(111)
+# endif
+# if BOOST_PP_LOCAL_R(110)
+    BOOST_PP_LOCAL_MACRO(110)
+# endif
+# if BOOST_PP_LOCAL_R(109)
+    BOOST_PP_LOCAL_MACRO(109)
+# endif
+# if BOOST_PP_LOCAL_R(108)
+    BOOST_PP_LOCAL_MACRO(108)
+# endif
+# if BOOST_PP_LOCAL_R(107)
+    BOOST_PP_LOCAL_MACRO(107)
+# endif
+# if BOOST_PP_LOCAL_R(106)
+    BOOST_PP_LOCAL_MACRO(106)
+# endif
+# if BOOST_PP_LOCAL_R(105)
+    BOOST_PP_LOCAL_MACRO(105)
+# endif
+# if BOOST_PP_LOCAL_R(104)
+    BOOST_PP_LOCAL_MACRO(104)
+# endif
+# if BOOST_PP_LOCAL_R(103)
+    BOOST_PP_LOCAL_MACRO(103)
+# endif
+# if BOOST_PP_LOCAL_R(102)
+    BOOST_PP_LOCAL_MACRO(102)
+# endif
+# if BOOST_PP_LOCAL_R(101)
+    BOOST_PP_LOCAL_MACRO(101)
+# endif
+# if BOOST_PP_LOCAL_R(100)
+    BOOST_PP_LOCAL_MACRO(100)
+# endif
+# if BOOST_PP_LOCAL_R(99)
+    BOOST_PP_LOCAL_MACRO(99)
+# endif
+# if BOOST_PP_LOCAL_R(98)
+    BOOST_PP_LOCAL_MACRO(98)
+# endif
+# if BOOST_PP_LOCAL_R(97)
+    BOOST_PP_LOCAL_MACRO(97)
+# endif
+# if BOOST_PP_LOCAL_R(96)
+    BOOST_PP_LOCAL_MACRO(96)
+# endif
+# if BOOST_PP_LOCAL_R(95)
+    BOOST_PP_LOCAL_MACRO(95)
+# endif
+# if BOOST_PP_LOCAL_R(94)
+    BOOST_PP_LOCAL_MACRO(94)
+# endif
+# if BOOST_PP_LOCAL_R(93)
+    BOOST_PP_LOCAL_MACRO(93)
+# endif
+# if BOOST_PP_LOCAL_R(92)
+    BOOST_PP_LOCAL_MACRO(92)
+# endif
+# if BOOST_PP_LOCAL_R(91)
+    BOOST_PP_LOCAL_MACRO(91)
+# endif
+# if BOOST_PP_LOCAL_R(90)
+    BOOST_PP_LOCAL_MACRO(90)
+# endif
+# if BOOST_PP_LOCAL_R(89)
+    BOOST_PP_LOCAL_MACRO(89)
+# endif
+# if BOOST_PP_LOCAL_R(88)
+    BOOST_PP_LOCAL_MACRO(88)
+# endif
+# if BOOST_PP_LOCAL_R(87)
+    BOOST_PP_LOCAL_MACRO(87)
+# endif
+# if BOOST_PP_LOCAL_R(86)
+    BOOST_PP_LOCAL_MACRO(86)
+# endif
+# if BOOST_PP_LOCAL_R(85)
+    BOOST_PP_LOCAL_MACRO(85)
+# endif
+# if BOOST_PP_LOCAL_R(84)
+    BOOST_PP_LOCAL_MACRO(84)
+# endif
+# if BOOST_PP_LOCAL_R(83)
+    BOOST_PP_LOCAL_MACRO(83)
+# endif
+# if BOOST_PP_LOCAL_R(82)
+    BOOST_PP_LOCAL_MACRO(82)
+# endif
+# if BOOST_PP_LOCAL_R(81)
+    BOOST_PP_LOCAL_MACRO(81)
+# endif
+# if BOOST_PP_LOCAL_R(80)
+    BOOST_PP_LOCAL_MACRO(80)
+# endif
+# if BOOST_PP_LOCAL_R(79)
+    BOOST_PP_LOCAL_MACRO(79)
+# endif
+# if BOOST_PP_LOCAL_R(78)
+    BOOST_PP_LOCAL_MACRO(78)
+# endif
+# if BOOST_PP_LOCAL_R(77)
+    BOOST_PP_LOCAL_MACRO(77)
+# endif
+# if BOOST_PP_LOCAL_R(76)
+    BOOST_PP_LOCAL_MACRO(76)
+# endif
+# if BOOST_PP_LOCAL_R(75)
+    BOOST_PP_LOCAL_MACRO(75)
+# endif
+# if BOOST_PP_LOCAL_R(74)
+    BOOST_PP_LOCAL_MACRO(74)
+# endif
+# if BOOST_PP_LOCAL_R(73)
+    BOOST_PP_LOCAL_MACRO(73)
+# endif
+# if BOOST_PP_LOCAL_R(72)
+    BOOST_PP_LOCAL_MACRO(72)
+# endif
+# if BOOST_PP_LOCAL_R(71)
+    BOOST_PP_LOCAL_MACRO(71)
+# endif
+# if BOOST_PP_LOCAL_R(70)
+    BOOST_PP_LOCAL_MACRO(70)
+# endif
+# if BOOST_PP_LOCAL_R(69)
+    BOOST_PP_LOCAL_MACRO(69)
+# endif
+# if BOOST_PP_LOCAL_R(68)
+    BOOST_PP_LOCAL_MACRO(68)
+# endif
+# if BOOST_PP_LOCAL_R(67)
+    BOOST_PP_LOCAL_MACRO(67)
+# endif
+# if BOOST_PP_LOCAL_R(66)
+    BOOST_PP_LOCAL_MACRO(66)
+# endif
+# if BOOST_PP_LOCAL_R(65)
+    BOOST_PP_LOCAL_MACRO(65)
+# endif
+# if BOOST_PP_LOCAL_R(64)
+    BOOST_PP_LOCAL_MACRO(64)
+# endif
+# if BOOST_PP_LOCAL_R(63)
+    BOOST_PP_LOCAL_MACRO(63)
+# endif
+# if BOOST_PP_LOCAL_R(62)
+    BOOST_PP_LOCAL_MACRO(62)
+# endif
+# if BOOST_PP_LOCAL_R(61)
+    BOOST_PP_LOCAL_MACRO(61)
+# endif
+# if BOOST_PP_LOCAL_R(60)
+    BOOST_PP_LOCAL_MACRO(60)
+# endif
+# if BOOST_PP_LOCAL_R(59)
+    BOOST_PP_LOCAL_MACRO(59)
+# endif
+# if BOOST_PP_LOCAL_R(58)
+    BOOST_PP_LOCAL_MACRO(58)
+# endif
+# if BOOST_PP_LOCAL_R(57)
+    BOOST_PP_LOCAL_MACRO(57)
+# endif
+# if BOOST_PP_LOCAL_R(56)
+    BOOST_PP_LOCAL_MACRO(56)
+# endif
+# if BOOST_PP_LOCAL_R(55)
+    BOOST_PP_LOCAL_MACRO(55)
+# endif
+# if BOOST_PP_LOCAL_R(54)
+    BOOST_PP_LOCAL_MACRO(54)
+# endif
+# if BOOST_PP_LOCAL_R(53)
+    BOOST_PP_LOCAL_MACRO(53)
+# endif
+# if BOOST_PP_LOCAL_R(52)
+    BOOST_PP_LOCAL_MACRO(52)
+# endif
+# if BOOST_PP_LOCAL_R(51)
+    BOOST_PP_LOCAL_MACRO(51)
+# endif
+# if BOOST_PP_LOCAL_R(50)
+    BOOST_PP_LOCAL_MACRO(50)
+# endif
+# if BOOST_PP_LOCAL_R(49)
+    BOOST_PP_LOCAL_MACRO(49)
+# endif
+# if BOOST_PP_LOCAL_R(48)
+    BOOST_PP_LOCAL_MACRO(48)
+# endif
+# if BOOST_PP_LOCAL_R(47)
+    BOOST_PP_LOCAL_MACRO(47)
+# endif
+# if BOOST_PP_LOCAL_R(46)
+    BOOST_PP_LOCAL_MACRO(46)
+# endif
+# if BOOST_PP_LOCAL_R(45)
+    BOOST_PP_LOCAL_MACRO(45)
+# endif
+# if BOOST_PP_LOCAL_R(44)
+    BOOST_PP_LOCAL_MACRO(44)
+# endif
+# if BOOST_PP_LOCAL_R(43)
+    BOOST_PP_LOCAL_MACRO(43)
+# endif
+# if BOOST_PP_LOCAL_R(42)
+    BOOST_PP_LOCAL_MACRO(42)
+# endif
+# if BOOST_PP_LOCAL_R(41)
+    BOOST_PP_LOCAL_MACRO(41)
+# endif
+# if BOOST_PP_LOCAL_R(40)
+    BOOST_PP_LOCAL_MACRO(40)
+# endif
+# if BOOST_PP_LOCAL_R(39)
+    BOOST_PP_LOCAL_MACRO(39)
+# endif
+# if BOOST_PP_LOCAL_R(38)
+    BOOST_PP_LOCAL_MACRO(38)
+# endif
+# if BOOST_PP_LOCAL_R(37)
+    BOOST_PP_LOCAL_MACRO(37)
+# endif
+# if BOOST_PP_LOCAL_R(36)
+    BOOST_PP_LOCAL_MACRO(36)
+# endif
+# if BOOST_PP_LOCAL_R(35)
+    BOOST_PP_LOCAL_MACRO(35)
+# endif
+# if BOOST_PP_LOCAL_R(34)
+    BOOST_PP_LOCAL_MACRO(34)
+# endif
+# if BOOST_PP_LOCAL_R(33)
+    BOOST_PP_LOCAL_MACRO(33)
+# endif
+# if BOOST_PP_LOCAL_R(32)
+    BOOST_PP_LOCAL_MACRO(32)
+# endif
+# if BOOST_PP_LOCAL_R(31)
+    BOOST_PP_LOCAL_MACRO(31)
+# endif
+# if BOOST_PP_LOCAL_R(30)
+    BOOST_PP_LOCAL_MACRO(30)
+# endif
+# if BOOST_PP_LOCAL_R(29)
+    BOOST_PP_LOCAL_MACRO(29)
+# endif
+# if BOOST_PP_LOCAL_R(28)
+    BOOST_PP_LOCAL_MACRO(28)
+# endif
+# if BOOST_PP_LOCAL_R(27)
+    BOOST_PP_LOCAL_MACRO(27)
+# endif
+# if BOOST_PP_LOCAL_R(26)
+    BOOST_PP_LOCAL_MACRO(26)
+# endif
+# if BOOST_PP_LOCAL_R(25)
+    BOOST_PP_LOCAL_MACRO(25)
+# endif
+# if BOOST_PP_LOCAL_R(24)
+    BOOST_PP_LOCAL_MACRO(24)
+# endif
+# if BOOST_PP_LOCAL_R(23)
+    BOOST_PP_LOCAL_MACRO(23)
+# endif
+# if BOOST_PP_LOCAL_R(22)
+    BOOST_PP_LOCAL_MACRO(22)
+# endif
+# if BOOST_PP_LOCAL_R(21)
+    BOOST_PP_LOCAL_MACRO(21)
+# endif
+# if BOOST_PP_LOCAL_R(20)
+    BOOST_PP_LOCAL_MACRO(20)
+# endif
+# if BOOST_PP_LOCAL_R(19)
+    BOOST_PP_LOCAL_MACRO(19)
+# endif
+# if BOOST_PP_LOCAL_R(18)
+    BOOST_PP_LOCAL_MACRO(18)
+# endif
+# if BOOST_PP_LOCAL_R(17)
+    BOOST_PP_LOCAL_MACRO(17)
+# endif
+# if BOOST_PP_LOCAL_R(16)
+    BOOST_PP_LOCAL_MACRO(16)
+# endif
+# if BOOST_PP_LOCAL_R(15)
+    BOOST_PP_LOCAL_MACRO(15)
+# endif
+# if BOOST_PP_LOCAL_R(14)
+    BOOST_PP_LOCAL_MACRO(14)
+# endif
+# if BOOST_PP_LOCAL_R(13)
+    BOOST_PP_LOCAL_MACRO(13)
+# endif
+# if BOOST_PP_LOCAL_R(12)
+    BOOST_PP_LOCAL_MACRO(12)
+# endif
+# if BOOST_PP_LOCAL_R(11)
+    BOOST_PP_LOCAL_MACRO(11)
+# endif
+# if BOOST_PP_LOCAL_R(10)
+    BOOST_PP_LOCAL_MACRO(10)
+# endif
+# if BOOST_PP_LOCAL_R(9)
+    BOOST_PP_LOCAL_MACRO(9)
+# endif
+# if BOOST_PP_LOCAL_R(8)
+    BOOST_PP_LOCAL_MACRO(8)
+# endif
+# if BOOST_PP_LOCAL_R(7)
+    BOOST_PP_LOCAL_MACRO(7)
+# endif
+# if BOOST_PP_LOCAL_R(6)
+    BOOST_PP_LOCAL_MACRO(6)
+# endif
+# if BOOST_PP_LOCAL_R(5)
+    BOOST_PP_LOCAL_MACRO(5)
+# endif
+# if BOOST_PP_LOCAL_R(4)
+    BOOST_PP_LOCAL_MACRO(4)
+# endif
+# if BOOST_PP_LOCAL_R(3)
+    BOOST_PP_LOCAL_MACRO(3)
+# endif
+# if BOOST_PP_LOCAL_R(2)
+    BOOST_PP_LOCAL_MACRO(2)
+# endif
+# if BOOST_PP_LOCAL_R(1)
+    BOOST_PP_LOCAL_MACRO(1)
+# endif
+# if BOOST_PP_LOCAL_R(0)
+    BOOST_PP_LOCAL_MACRO(0)
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/self.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/self.hpp
new file mode 100644
index 0000000..757185c
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/self.hpp
@@ -0,0 +1,21 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# if !defined(BOOST_PP_INDIRECT_SELF)
+#    error BOOST_PP_ERROR:  no indirect file to include
+# endif
+#
+# define BOOST_PP_IS_SELFISH 1
+#
+# include BOOST_PP_INDIRECT_SELF
+#
+# undef BOOST_PP_IS_SELFISH
+# undef BOOST_PP_INDIRECT_SELF
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/detail/start.hpp b/vendor/pdalboost/boost/preprocessor/iteration/detail/start.hpp
new file mode 100644
index 0000000..cbf0381
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/detail/start.hpp
@@ -0,0 +1,99 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_LOCAL_SE
+#
+# undef BOOST_PP_LOCAL_SE_DIGIT_1
+# undef BOOST_PP_LOCAL_SE_DIGIT_2
+# undef BOOST_PP_LOCAL_SE_DIGIT_3
+# undef BOOST_PP_LOCAL_SE_DIGIT_4
+# undef BOOST_PP_LOCAL_SE_DIGIT_5
+# undef BOOST_PP_LOCAL_SE_DIGIT_6
+# undef BOOST_PP_LOCAL_SE_DIGIT_7
+# undef BOOST_PP_LOCAL_SE_DIGIT_8
+# undef BOOST_PP_LOCAL_SE_DIGIT_9
+# undef BOOST_PP_LOCAL_SE_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_LOCAL_SE_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_LOCAL_SE_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_LOCAL_SE_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_LOCAL_SE_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_LOCAL_SE_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_LOCAL_SE_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_LOCAL_SE_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_LOCAL_SE_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_LOCAL_SE_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_LOCAL_SE_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_LOCAL_SE_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_LOCAL_SE_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_LOCAL_SE_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_LOCAL_SE_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_LOCAL_SE_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_LOCAL_SE_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_LOCAL_SE_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_LOCAL_SE_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_LOCAL_SE_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_LOCAL_SE_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_LOCAL_SE_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_LOCAL_SE_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_LOCAL_SE_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_LOCAL_SE_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_LOCAL_SE_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_LOCAL_SE_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_LOCAL_SE_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_LOCAL_SE_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_LOCAL_SE_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_LOCAL_SE_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_LOCAL_SE_DIGIT_3
+#    define BOOST_PP_LOCAL_SE() BOOST_PP_SLOT_CC_3(BOOST_PP_LOCAL_SE_DIGIT_3, BOOST_PP_LOCAL_SE_DIGIT_2, BOOST_PP_LOCAL_SE_DIGIT_1)
+# elif BOOST_PP_LOCAL_SE_DIGIT_2
+#    define BOOST_PP_LOCAL_SE() BOOST_PP_SLOT_CC_2(BOOST_PP_LOCAL_SE_DIGIT_2, BOOST_PP_LOCAL_SE_DIGIT_1)
+# else
+#    define BOOST_PP_LOCAL_SE() BOOST_PP_LOCAL_SE_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/iterate.hpp b/vendor/pdalboost/boost/preprocessor/iteration/iterate.hpp
new file mode 100644
index 0000000..8f861e7
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/iterate.hpp
@@ -0,0 +1,82 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ITERATION_ITERATE_HPP
+# define BOOST_PREPROCESSOR_ITERATION_ITERATE_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/array/elem.hpp>
+# include <boost/preprocessor/array/size.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/slot/slot.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_ITERATION_DEPTH */
+#
+# define BOOST_PP_ITERATION_DEPTH() 0
+#
+# /* BOOST_PP_ITERATION */
+#
+# define BOOST_PP_ITERATION() BOOST_PP_CAT(BOOST_PP_ITERATION_, BOOST_PP_ITERATION_DEPTH())
+#
+# /* BOOST_PP_ITERATION_START && BOOST_PP_ITERATION_FINISH */
+#
+# define BOOST_PP_ITERATION_START() BOOST_PP_CAT(BOOST_PP_ITERATION_START_, BOOST_PP_ITERATION_DEPTH())
+# define BOOST_PP_ITERATION_FINISH() BOOST_PP_CAT(BOOST_PP_ITERATION_FINISH_, BOOST_PP_ITERATION_DEPTH())
+#
+# /* BOOST_PP_ITERATION_FLAGS */
+#
+# define BOOST_PP_ITERATION_FLAGS() (BOOST_PP_CAT(BOOST_PP_ITERATION_FLAGS_, BOOST_PP_ITERATION_DEPTH())())
+#
+# /* BOOST_PP_FRAME_ITERATION */
+#
+# define BOOST_PP_FRAME_ITERATION(i) BOOST_PP_CAT(BOOST_PP_ITERATION_, i)
+#
+# /* BOOST_PP_FRAME_START && BOOST_PP_FRAME_FINISH */
+#
+# define BOOST_PP_FRAME_START(i) BOOST_PP_CAT(BOOST_PP_ITERATION_START_, i)
+# define BOOST_PP_FRAME_FINISH(i) BOOST_PP_CAT(BOOST_PP_ITERATION_FINISH_, i)
+#
+# /* BOOST_PP_FRAME_FLAGS */
+#
+# define BOOST_PP_FRAME_FLAGS(i) (BOOST_PP_CAT(BOOST_PP_ITERATION_FLAGS_, i)())
+#
+# /* BOOST_PP_RELATIVE_ITERATION */
+#
+# define BOOST_PP_RELATIVE_ITERATION(i) BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_)
+#
+# define BOOST_PP_RELATIVE_0(m) BOOST_PP_CAT(m, BOOST_PP_ITERATION_DEPTH())
+# define BOOST_PP_RELATIVE_1(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH()))
+# define BOOST_PP_RELATIVE_2(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH())))
+# define BOOST_PP_RELATIVE_3(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH()))))
+# define BOOST_PP_RELATIVE_4(m) BOOST_PP_CAT(m, BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_ITERATION_DEPTH())))))
+#
+# /* BOOST_PP_RELATIVE_START && BOOST_PP_RELATIVE_FINISH */
+#
+# define BOOST_PP_RELATIVE_START(i) BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_START_)
+# define BOOST_PP_RELATIVE_FINISH(i) BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_FINISH_)
+#
+# /* BOOST_PP_RELATIVE_FLAGS */
+#
+# define BOOST_PP_RELATIVE_FLAGS(i) (BOOST_PP_CAT(BOOST_PP_RELATIVE_, i)(BOOST_PP_ITERATION_FLAGS_)())
+#
+# /* BOOST_PP_ITERATE */
+#
+# define BOOST_PP_ITERATE() BOOST_PP_CAT(BOOST_PP_ITERATE_, BOOST_PP_INC(BOOST_PP_ITERATION_DEPTH()))
+#
+# define BOOST_PP_ITERATE_1 <boost/preprocessor/iteration/detail/iter/forward1.hpp>
+# define BOOST_PP_ITERATE_2 <boost/preprocessor/iteration/detail/iter/forward2.hpp>
+# define BOOST_PP_ITERATE_3 <boost/preprocessor/iteration/detail/iter/forward3.hpp>
+# define BOOST_PP_ITERATE_4 <boost/preprocessor/iteration/detail/iter/forward4.hpp>
+# define BOOST_PP_ITERATE_5 <boost/preprocessor/iteration/detail/iter/forward5.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/local.hpp b/vendor/pdalboost/boost/preprocessor/iteration/local.hpp
new file mode 100644
index 0000000..289fb1a
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/local.hpp
@@ -0,0 +1,26 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ITERATION_LOCAL_HPP
+# define BOOST_PREPROCESSOR_ITERATION_LOCAL_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/slot/slot.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_LOCAL_ITERATE */
+#
+# define BOOST_PP_LOCAL_ITERATE() <boost/preprocessor/iteration/detail/local.hpp>
+#
+# define BOOST_PP_LOCAL_C(n) (BOOST_PP_LOCAL_S) <= n && (BOOST_PP_LOCAL_F) >= n
+# define BOOST_PP_LOCAL_R(n) (BOOST_PP_LOCAL_F) <= n && (BOOST_PP_LOCAL_S) >= n
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/iteration/self.hpp b/vendor/pdalboost/boost/preprocessor/iteration/self.hpp
new file mode 100644
index 0000000..6e0464c
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/iteration/self.hpp
@@ -0,0 +1,19 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_ITERATION_SELF_HPP
+# define BOOST_PREPROCESSOR_ITERATION_SELF_HPP
+#
+# /* BOOST_PP_INCLUDE_SELF */
+#
+# define BOOST_PP_INCLUDE_SELF() <boost/preprocessor/iteration/detail/self.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/list/adt.hpp b/vendor/pdalboost/boost/preprocessor/list/adt.hpp
new file mode 100644
index 0000000..b4f12ba
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/list/adt.hpp
@@ -0,0 +1,73 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  *
+#  * See http://www.boost.org for most recent version.
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_ADT_HPP
+# define BOOST_PREPROCESSOR_LIST_ADT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/detail/is_binary.hpp>
+# include <boost/preprocessor/logical/compl.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# /* BOOST_PP_LIST_CONS */
+#
+# define BOOST_PP_LIST_CONS(head, tail) (head, tail)
+#
+# /* BOOST_PP_LIST_NIL */
+#
+# define BOOST_PP_LIST_NIL BOOST_PP_NIL
+#
+# /* BOOST_PP_LIST_FIRST */
+#
+# define BOOST_PP_LIST_FIRST(list) BOOST_PP_LIST_FIRST_D(list)
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_LIST_FIRST_D(list) BOOST_PP_LIST_FIRST_I list
+# else
+#    define BOOST_PP_LIST_FIRST_D(list) BOOST_PP_LIST_FIRST_I ## list
+# endif
+#
+# define BOOST_PP_LIST_FIRST_I(head, tail) head
+#
+# /* BOOST_PP_LIST_REST */
+#
+# define BOOST_PP_LIST_REST(list) BOOST_PP_LIST_REST_D(list)
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_LIST_REST_D(list) BOOST_PP_LIST_REST_I list
+# else
+#    define BOOST_PP_LIST_REST_D(list) BOOST_PP_LIST_REST_I ## list
+# endif
+#
+# define BOOST_PP_LIST_REST_I(head, tail) tail
+#
+# /* BOOST_PP_LIST_IS_CONS */
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC()
+#    define BOOST_PP_LIST_IS_CONS(list) BOOST_PP_LIST_IS_CONS_D(list)
+#    define BOOST_PP_LIST_IS_CONS_D(list) BOOST_PP_LIST_IS_CONS_ ## list
+#    define BOOST_PP_LIST_IS_CONS_(head, tail) 1
+#    define BOOST_PP_LIST_IS_CONS_BOOST_PP_NIL 0
+# else
+#    define BOOST_PP_LIST_IS_CONS(list) BOOST_PP_IS_BINARY(list)
+# endif
+#
+# /* BOOST_PP_LIST_IS_NIL */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC()
+#    define BOOST_PP_LIST_IS_NIL(list) BOOST_PP_COMPL(BOOST_PP_IS_BINARY(list))
+# else
+#    define BOOST_PP_LIST_IS_NIL(list) BOOST_PP_COMPL(BOOST_PP_LIST_IS_CONS(list))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/list/detail/dmc/fold_left.hpp b/vendor/pdalboost/boost/preprocessor/list/detail/dmc/fold_left.hpp
new file mode 100644
index 0000000..844ac5b
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/list/detail/dmc/fold_left.hpp
@@ -0,0 +1,279 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP
+# define BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP
+#
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# define BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_2, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(2, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_3, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(3, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_4, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(4, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_5, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(5, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_6, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(6, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_7, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(7, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_8, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(8, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_9, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(9, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_10, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(10, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_11, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(11, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_12, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(12, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_13, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(13, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_14, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(14, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_15, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(15, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_16, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(16, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_17, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(17, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_18, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(18, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_19, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(19, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_20, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(20, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_21, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(21, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_22, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(22, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_23, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(23, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_24, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(24, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_25, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(25, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_26, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(26, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_27, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(27, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_28, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(28, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_29, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(29, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_30, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(30, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_31, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(31, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_32, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(32, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_33, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(33, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_34, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(34, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_35, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(35, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_36, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(36, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_37, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(37, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_38, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(38, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_39, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(39, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_40, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(40, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_41, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(41, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_42, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(42, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_43, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(43, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_44, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(44, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_45, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(45, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_46, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(46, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_47, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(47, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_48, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(48, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_49, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(49, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_50, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(50, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_51, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(51, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_52, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(52, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_53, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(53, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_54, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(54, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_55, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(55, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_56, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(56, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_57, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(57, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_58, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(58, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_59, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(59, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_60, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(60, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_61, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(61, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_62, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(62, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_63, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(63, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_64, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(64, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_65, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(65, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_66, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(66, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_67, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(67, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_68, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(68, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_69, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(69, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_70, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(70, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_71, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(71, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_72, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(72, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_73, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(73, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_74, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(74, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_75, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(75, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_76, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(76, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_77, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(77, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_78, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(78, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_79, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(79, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_80, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(80, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_81, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(81, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_82, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(82, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_83, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(83, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_84, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(84, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_85, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(85, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_86, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(86, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_87, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(87, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_88, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(88, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_89, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(89, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_90, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(90, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_91, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(91, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_92, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(92, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_93, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(93, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_94, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(94, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_95, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(95, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_96, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(96, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_97, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(97, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_98, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(98, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_99, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(99, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_100, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(100, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_101, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(101, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_102, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(102, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_103, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(103, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_104, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(104, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_105, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(105, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_106, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(106, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_107, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(107, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_108, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(108, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_109, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(109, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_110, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(110, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_111, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(111, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_112, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(112, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_113, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(113, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_114, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(114, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_115, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(115, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_116, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(116, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_117, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(117, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_118, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(118, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_119, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(119, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_120, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(120, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_121, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(121, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_122, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(122, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_123, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(123, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_124, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(124, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_125, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(125, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_126, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(126, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_127, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(127, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_128, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(128, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_129, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(129, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_130, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(130, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_131, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(131, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_132, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(132, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_133, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(133, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_134, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(134, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_135, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(135, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_136, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(136, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_137, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(137, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_138, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(138, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_139, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(139, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_140, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(140, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_141, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(141, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_142, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(142, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_143, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(143, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_144, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(144, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_145, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(145, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_146, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(146, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_147, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(147, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_148, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(148, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_149, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(149, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_150, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(150, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_151, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(151, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_152, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(152, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_153, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(153, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_154, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(154, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_155, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(155, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_156, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(156, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_157, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(157, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_158, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(158, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_159, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(159, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_160, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(160, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_161, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(161, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_162, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(162, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_163, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(163, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_164, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(164, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_165, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(165, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_166, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(166, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_167, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(167, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_168, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(168, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_169, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(169, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_170, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(170, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_171, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(171, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_172, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(172, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_173, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(173, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_174, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(174, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_175, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(175, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_176, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(176, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_177, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(177, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_178, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(178, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_179, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(179, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_180, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(180, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_181, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(181, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_182, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(182, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_183, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(183, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_184, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(184, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_185, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(185, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_186, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(186, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_187, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(187, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_188, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(188, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_189, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(189, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_190, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(190, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_191, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(191, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_192, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(192, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_193, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(193, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_194, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(194, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_195, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(195, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_196, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(196, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_197, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(197, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_198, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(198, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_199, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(199, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_200, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(200, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_201, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(201, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_202, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(202, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_203, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(203, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_204, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(204, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_205, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(205, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_206, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(206, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_207, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(207, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_208, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(208, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_209, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(209, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_210, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(210, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_211, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(211, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_212, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(212, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_213, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(213, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_214, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(214, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_215, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(215, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_216, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(216, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_217, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(217, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_218, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(218, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_219, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(219, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_220, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(220, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_221, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(221, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_222, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(222, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_223, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(223, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_224, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(224, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_225, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(225, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_226, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(226, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_227, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(227, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_228, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(228, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_229, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(229, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_230, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(230, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_231, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(231, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_232, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(232, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_233, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(233, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_234, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(234, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_235, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(235, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_236, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(236, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_237, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(237, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_238, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(238, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_239, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(239, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_240, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(240, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_241, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(241, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_242, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(242, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_243, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(243, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_244, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(244, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_245, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(245, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_246, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(246, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_247, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(247, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_248, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(248, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_249, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(249, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_250, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(250, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_251, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(251, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_252, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(252, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_253, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(253, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_254, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(254, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_255, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(255, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_256, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(256, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_257, BOOST_PP_TUPLE_ELEM_3_1)(o, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, BOOST_PP_TUPLE_ELEM_3_1)(257, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/list/detail/edg/fold_left.hpp b/vendor/pdalboost/boost/preprocessor/list/detail/edg/fold_left.hpp
new file mode 100644
index 0000000..ae9524f
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/list/detail/edg/fold_left.hpp
@@ -0,0 +1,536 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_LEFT_HPP
+# define BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_LEFT_HPP
+#
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) BOOST_PP_LIST_FOLD_LEFT_1_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) BOOST_PP_LIST_FOLD_LEFT_2_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) BOOST_PP_LIST_FOLD_LEFT_3_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) BOOST_PP_LIST_FOLD_LEFT_4_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) BOOST_PP_LIST_FOLD_LEFT_5_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) BOOST_PP_LIST_FOLD_LEFT_6_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) BOOST_PP_LIST_FOLD_LEFT_7_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) BOOST_PP_LIST_FOLD_LEFT_8_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) BOOST_PP_LIST_FOLD_LEFT_9_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) BOOST_PP_LIST_FOLD_LEFT_10_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) BOOST_PP_LIST_FOLD_LEFT_11_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) BOOST_PP_LIST_FOLD_LEFT_12_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) BOOST_PP_LIST_FOLD_LEFT_13_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) BOOST_PP_LIST_FOLD_LEFT_14_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) BOOST_PP_LIST_FOLD_LEFT_15_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) BOOST_PP_LIST_FOLD_LEFT_16_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) BOOST_PP_LIST_FOLD_LEFT_17_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) BOOST_PP_LIST_FOLD_LEFT_18_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) BOOST_PP_LIST_FOLD_LEFT_19_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) BOOST_PP_LIST_FOLD_LEFT_20_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) BOOST_PP_LIST_FOLD_LEFT_21_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) BOOST_PP_LIST_FOLD_LEFT_22_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) BOOST_PP_LIST_FOLD_LEFT_23_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) BOOST_PP_LIST_FOLD_LEFT_24_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) BOOST_PP_LIST_FOLD_LEFT_25_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) BOOST_PP_LIST_FOLD_LEFT_26_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) BOOST_PP_LIST_FOLD_LEFT_27_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) BOOST_PP_LIST_FOLD_LEFT_28_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) BOOST_PP_LIST_FOLD_LEFT_29_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) BOOST_PP_LIST_FOLD_LEFT_30_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) BOOST_PP_LIST_FOLD_LEFT_31_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) BOOST_PP_LIST_FOLD_LEFT_32_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) BOOST_PP_LIST_FOLD_LEFT_33_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) BOOST_PP_LIST_FOLD_LEFT_34_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) BOOST_PP_LIST_FOLD_LEFT_35_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) BOOST_PP_LIST_FOLD_LEFT_36_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) BOOST_PP_LIST_FOLD_LEFT_37_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) BOOST_PP_LIST_FOLD_LEFT_38_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) BOOST_PP_LIST_FOLD_LEFT_39_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) BOOST_PP_LIST_FOLD_LEFT_40_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) BOOST_PP_LIST_FOLD_LEFT_41_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) BOOST_PP_LIST_FOLD_LEFT_42_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) BOOST_PP_LIST_FOLD_LEFT_43_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) BOOST_PP_LIST_FOLD_LEFT_44_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) BOOST_PP_LIST_FOLD_LEFT_45_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) BOOST_PP_LIST_FOLD_LEFT_46_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) BOOST_PP_LIST_FOLD_LEFT_47_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) BOOST_PP_LIST_FOLD_LEFT_48_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) BOOST_PP_LIST_FOLD_LEFT_49_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) BOOST_PP_LIST_FOLD_LEFT_50_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) BOOST_PP_LIST_FOLD_LEFT_51_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) BOOST_PP_LIST_FOLD_LEFT_52_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) BOOST_PP_LIST_FOLD_LEFT_53_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) BOOST_PP_LIST_FOLD_LEFT_54_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) BOOST_PP_LIST_FOLD_LEFT_55_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) BOOST_PP_LIST_FOLD_LEFT_56_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) BOOST_PP_LIST_FOLD_LEFT_57_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) BOOST_PP_LIST_FOLD_LEFT_58_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) BOOST_PP_LIST_FOLD_LEFT_59_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) BOOST_PP_LIST_FOLD_LEFT_60_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) BOOST_PP_LIST_FOLD_LEFT_61_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) BOOST_PP_LIST_FOLD_LEFT_62_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) BOOST_PP_LIST_FOLD_LEFT_63_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) BOOST_PP_LIST_FOLD_LEFT_64_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) BOOST_PP_LIST_FOLD_LEFT_65_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) BOOST_PP_LIST_FOLD_LEFT_66_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) BOOST_PP_LIST_FOLD_LEFT_67_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) BOOST_PP_LIST_FOLD_LEFT_68_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) BOOST_PP_LIST_FOLD_LEFT_69_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) BOOST_PP_LIST_FOLD_LEFT_70_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) BOOST_PP_LIST_FOLD_LEFT_71_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) BOOST_PP_LIST_FOLD_LEFT_72_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) BOOST_PP_LIST_FOLD_LEFT_73_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) BOOST_PP_LIST_FOLD_LEFT_74_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) BOOST_PP_LIST_FOLD_LEFT_75_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) BOOST_PP_LIST_FOLD_LEFT_76_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) BOOST_PP_LIST_FOLD_LEFT_77_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) BOOST_PP_LIST_FOLD_LEFT_78_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) BOOST_PP_LIST_FOLD_LEFT_79_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) BOOST_PP_LIST_FOLD_LEFT_80_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) BOOST_PP_LIST_FOLD_LEFT_81_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) BOOST_PP_LIST_FOLD_LEFT_82_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) BOOST_PP_LIST_FOLD_LEFT_83_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) BOOST_PP_LIST_FOLD_LEFT_84_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) BOOST_PP_LIST_FOLD_LEFT_85_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) BOOST_PP_LIST_FOLD_LEFT_86_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) BOOST_PP_LIST_FOLD_LEFT_87_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) BOOST_PP_LIST_FOLD_LEFT_88_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) BOOST_PP_LIST_FOLD_LEFT_89_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) BOOST_PP_LIST_FOLD_LEFT_90_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) BOOST_PP_LIST_FOLD_LEFT_91_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) BOOST_PP_LIST_FOLD_LEFT_92_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) BOOST_PP_LIST_FOLD_LEFT_93_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) BOOST_PP_LIST_FOLD_LEFT_94_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) BOOST_PP_LIST_FOLD_LEFT_95_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) BOOST_PP_LIST_FOLD_LEFT_96_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) BOOST_PP_LIST_FOLD_LEFT_97_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) BOOST_PP_LIST_FOLD_LEFT_98_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) BOOST_PP_LIST_FOLD_LEFT_99_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) BOOST_PP_LIST_FOLD_LEFT_100_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) BOOST_PP_LIST_FOLD_LEFT_101_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) BOOST_PP_LIST_FOLD_LEFT_102_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) BOOST_PP_LIST_FOLD_LEFT_103_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) BOOST_PP_LIST_FOLD_LEFT_104_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) BOOST_PP_LIST_FOLD_LEFT_105_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) BOOST_PP_LIST_FOLD_LEFT_106_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) BOOST_PP_LIST_FOLD_LEFT_107_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) BOOST_PP_LIST_FOLD_LEFT_108_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) BOOST_PP_LIST_FOLD_LEFT_109_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) BOOST_PP_LIST_FOLD_LEFT_110_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) BOOST_PP_LIST_FOLD_LEFT_111_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) BOOST_PP_LIST_FOLD_LEFT_112_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) BOOST_PP_LIST_FOLD_LEFT_113_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) BOOST_PP_LIST_FOLD_LEFT_114_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) BOOST_PP_LIST_FOLD_LEFT_115_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) BOOST_PP_LIST_FOLD_LEFT_116_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) BOOST_PP_LIST_FOLD_LEFT_117_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) BOOST_PP_LIST_FOLD_LEFT_118_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) BOOST_PP_LIST_FOLD_LEFT_119_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) BOOST_PP_LIST_FOLD_LEFT_120_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) BOOST_PP_LIST_FOLD_LEFT_121_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) BOOST_PP_LIST_FOLD_LEFT_122_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) BOOST_PP_LIST_FOLD_LEFT_123_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) BOOST_PP_LIST_FOLD_LEFT_124_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) BOOST_PP_LIST_FOLD_LEFT_125_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) BOOST_PP_LIST_FOLD_LEFT_126_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) BOOST_PP_LIST_FOLD_LEFT_127_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) BOOST_PP_LIST_FOLD_LEFT_128_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) BOOST_PP_LIST_FOLD_LEFT_129_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) BOOST_PP_LIST_FOLD_LEFT_130_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) BOOST_PP_LIST_FOLD_LEFT_131_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) BOOST_PP_LIST_FOLD_LEFT_132_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) BOOST_PP_LIST_FOLD_LEFT_133_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) BOOST_PP_LIST_FOLD_LEFT_134_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) BOOST_PP_LIST_FOLD_LEFT_135_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) BOOST_PP_LIST_FOLD_LEFT_136_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) BOOST_PP_LIST_FOLD_LEFT_137_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) BOOST_PP_LIST_FOLD_LEFT_138_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) BOOST_PP_LIST_FOLD_LEFT_139_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) BOOST_PP_LIST_FOLD_LEFT_140_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) BOOST_PP_LIST_FOLD_LEFT_141_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) BOOST_PP_LIST_FOLD_LEFT_142_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) BOOST_PP_LIST_FOLD_LEFT_143_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) BOOST_PP_LIST_FOLD_LEFT_144_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) BOOST_PP_LIST_FOLD_LEFT_145_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) BOOST_PP_LIST_FOLD_LEFT_146_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) BOOST_PP_LIST_FOLD_LEFT_147_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) BOOST_PP_LIST_FOLD_LEFT_148_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) BOOST_PP_LIST_FOLD_LEFT_149_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) BOOST_PP_LIST_FOLD_LEFT_150_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) BOOST_PP_LIST_FOLD_LEFT_151_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) BOOST_PP_LIST_FOLD_LEFT_152_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) BOOST_PP_LIST_FOLD_LEFT_153_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) BOOST_PP_LIST_FOLD_LEFT_154_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) BOOST_PP_LIST_FOLD_LEFT_155_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) BOOST_PP_LIST_FOLD_LEFT_156_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) BOOST_PP_LIST_FOLD_LEFT_157_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) BOOST_PP_LIST_FOLD_LEFT_158_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) BOOST_PP_LIST_FOLD_LEFT_159_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) BOOST_PP_LIST_FOLD_LEFT_160_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) BOOST_PP_LIST_FOLD_LEFT_161_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) BOOST_PP_LIST_FOLD_LEFT_162_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) BOOST_PP_LIST_FOLD_LEFT_163_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) BOOST_PP_LIST_FOLD_LEFT_164_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) BOOST_PP_LIST_FOLD_LEFT_165_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) BOOST_PP_LIST_FOLD_LEFT_166_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) BOOST_PP_LIST_FOLD_LEFT_167_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) BOOST_PP_LIST_FOLD_LEFT_168_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) BOOST_PP_LIST_FOLD_LEFT_169_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) BOOST_PP_LIST_FOLD_LEFT_170_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) BOOST_PP_LIST_FOLD_LEFT_171_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) BOOST_PP_LIST_FOLD_LEFT_172_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) BOOST_PP_LIST_FOLD_LEFT_173_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) BOOST_PP_LIST_FOLD_LEFT_174_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) BOOST_PP_LIST_FOLD_LEFT_175_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) BOOST_PP_LIST_FOLD_LEFT_176_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) BOOST_PP_LIST_FOLD_LEFT_177_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) BOOST_PP_LIST_FOLD_LEFT_178_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) BOOST_PP_LIST_FOLD_LEFT_179_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) BOOST_PP_LIST_FOLD_LEFT_180_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) BOOST_PP_LIST_FOLD_LEFT_181_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) BOOST_PP_LIST_FOLD_LEFT_182_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) BOOST_PP_LIST_FOLD_LEFT_183_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) BOOST_PP_LIST_FOLD_LEFT_184_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) BOOST_PP_LIST_FOLD_LEFT_185_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) BOOST_PP_LIST_FOLD_LEFT_186_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) BOOST_PP_LIST_FOLD_LEFT_187_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) BOOST_PP_LIST_FOLD_LEFT_188_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) BOOST_PP_LIST_FOLD_LEFT_189_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) BOOST_PP_LIST_FOLD_LEFT_190_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) BOOST_PP_LIST_FOLD_LEFT_191_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) BOOST_PP_LIST_FOLD_LEFT_192_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) BOOST_PP_LIST_FOLD_LEFT_193_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) BOOST_PP_LIST_FOLD_LEFT_194_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) BOOST_PP_LIST_FOLD_LEFT_195_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) BOOST_PP_LIST_FOLD_LEFT_196_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) BOOST_PP_LIST_FOLD_LEFT_197_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) BOOST_PP_LIST_FOLD_LEFT_198_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) BOOST_PP_LIST_FOLD_LEFT_199_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) BOOST_PP_LIST_FOLD_LEFT_200_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) BOOST_PP_LIST_FOLD_LEFT_201_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) BOOST_PP_LIST_FOLD_LEFT_202_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) BOOST_PP_LIST_FOLD_LEFT_203_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) BOOST_PP_LIST_FOLD_LEFT_204_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) BOOST_PP_LIST_FOLD_LEFT_205_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) BOOST_PP_LIST_FOLD_LEFT_206_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) BOOST_PP_LIST_FOLD_LEFT_207_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) BOOST_PP_LIST_FOLD_LEFT_208_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) BOOST_PP_LIST_FOLD_LEFT_209_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) BOOST_PP_LIST_FOLD_LEFT_210_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) BOOST_PP_LIST_FOLD_LEFT_211_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) BOOST_PP_LIST_FOLD_LEFT_212_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) BOOST_PP_LIST_FOLD_LEFT_213_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) BOOST_PP_LIST_FOLD_LEFT_214_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) BOOST_PP_LIST_FOLD_LEFT_215_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) BOOST_PP_LIST_FOLD_LEFT_216_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) BOOST_PP_LIST_FOLD_LEFT_217_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) BOOST_PP_LIST_FOLD_LEFT_218_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) BOOST_PP_LIST_FOLD_LEFT_219_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) BOOST_PP_LIST_FOLD_LEFT_220_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) BOOST_PP_LIST_FOLD_LEFT_221_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) BOOST_PP_LIST_FOLD_LEFT_222_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) BOOST_PP_LIST_FOLD_LEFT_223_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) BOOST_PP_LIST_FOLD_LEFT_224_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) BOOST_PP_LIST_FOLD_LEFT_225_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) BOOST_PP_LIST_FOLD_LEFT_226_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) BOOST_PP_LIST_FOLD_LEFT_227_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) BOOST_PP_LIST_FOLD_LEFT_228_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) BOOST_PP_LIST_FOLD_LEFT_229_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) BOOST_PP_LIST_FOLD_LEFT_230_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) BOOST_PP_LIST_FOLD_LEFT_231_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) BOOST_PP_LIST_FOLD_LEFT_232_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) BOOST_PP_LIST_FOLD_LEFT_233_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) BOOST_PP_LIST_FOLD_LEFT_234_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) BOOST_PP_LIST_FOLD_LEFT_235_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) BOOST_PP_LIST_FOLD_LEFT_236_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) BOOST_PP_LIST_FOLD_LEFT_237_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) BOOST_PP_LIST_FOLD_LEFT_238_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) BOOST_PP_LIST_FOLD_LEFT_239_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) BOOST_PP_LIST_FOLD_LEFT_240_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) BOOST_PP_LIST_FOLD_LEFT_241_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) BOOST_PP_LIST_FOLD_LEFT_242_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) BOOST_PP_LIST_FOLD_LEFT_243_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) BOOST_PP_LIST_FOLD_LEFT_244_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) BOOST_PP_LIST_FOLD_LEFT_245_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) BOOST_PP_LIST_FOLD_LEFT_246_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) BOOST_PP_LIST_FOLD_LEFT_247_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) BOOST_PP_LIST_FOLD_LEFT_248_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) BOOST_PP_LIST_FOLD_LEFT_249_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) BOOST_PP_LIST_FOLD_LEFT_250_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) BOOST_PP_LIST_FOLD_LEFT_251_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) BOOST_PP_LIST_FOLD_LEFT_252_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) BOOST_PP_LIST_FOLD_LEFT_253_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) BOOST_PP_LIST_FOLD_LEFT_254_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) BOOST_PP_LIST_FOLD_LEFT_255_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) BOOST_PP_LIST_FOLD_LEFT_256_D(o, s, l)
+#
+# define BOOST_PP_LIST_FOLD_LEFT_1_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_2, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(2, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_2_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_3, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(3, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_3_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_4, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(4, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_4_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_5, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(5, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_5_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_6, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(6, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_6_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_7, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(7, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_7_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_8, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(8, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_8_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_9, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(9, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_9_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_10, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(10, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_10_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_11, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(11, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_11_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_12, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(12, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_12_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_13, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(13, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_13_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_14, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(14, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_14_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_15, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(15, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_15_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_16, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(16, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_16_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_17, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(17, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_17_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_18, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(18, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_18_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_19, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(19, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_19_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_20, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(20, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_20_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_21, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(21, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_21_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_22, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(22, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_22_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_23, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(23, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_23_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_24, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(24, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_24_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_25, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(25, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_25_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_26, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(26, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_26_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_27, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(27, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_27_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_28, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(28, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_28_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_29, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(29, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_29_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_30, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(30, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_30_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_31, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(31, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_31_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_32, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(32, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_32_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_33, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(33, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_33_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_34, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(34, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_34_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_35, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(35, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_35_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_36, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(36, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_36_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_37, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(37, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_37_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_38, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(38, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_38_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_39, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(39, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_39_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_40, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(40, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_40_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_41, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(41, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_41_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_42, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(42, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_42_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_43, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(43, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_43_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_44, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(44, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_44_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_45, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(45, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_45_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_46, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(46, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_46_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_47, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(47, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_47_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_48, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(48, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_48_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_49, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(49, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_49_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_50, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(50, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_50_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_51, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(51, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_51_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_52, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(52, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_52_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_53, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(53, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_53_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_54, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(54, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_54_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_55, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(55, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_55_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_56, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(56, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_56_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_57, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(57, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_57_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_58, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(58, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_58_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_59, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(59, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_59_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_60, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(60, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_60_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_61, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(61, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_61_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_62, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(62, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_62_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_63, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(63, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_63_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_64, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(64, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_64_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_65, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(65, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_65_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_66, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(66, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_66_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_67, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(67, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_67_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_68, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(68, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_68_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_69, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(69, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_69_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_70, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(70, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_70_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_71, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(71, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_71_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_72, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(72, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_72_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_73, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(73, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_73_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_74, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(74, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_74_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_75, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(75, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_75_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_76, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(76, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_76_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_77, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(77, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_77_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_78, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(78, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_78_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_79, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(79, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_79_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_80, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(80, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_80_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_81, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(81, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_81_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_82, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(82, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_82_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_83, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(83, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_83_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_84, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(84, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_84_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_85, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(85, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_85_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_86, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(86, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_86_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_87, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(87, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_87_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_88, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(88, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_88_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_89, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(89, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_89_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_90, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(90, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_90_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_91, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(91, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_91_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_92, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(92, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_92_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_93, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(93, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_93_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_94, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(94, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_94_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_95, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(95, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_95_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_96, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(96, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_96_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_97, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(97, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_97_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_98, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(98, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_98_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_99, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(99, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_99_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_100, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(100, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_100_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_101, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(101, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_101_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_102, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(102, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_102_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_103, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(103, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_103_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_104, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(104, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_104_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_105, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(105, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_105_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_106, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(106, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_106_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_107, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(107, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_107_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_108, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(108, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_108_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_109, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(109, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_109_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_110, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(110, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_110_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_111, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(111, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_111_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_112, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(112, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_112_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_113, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(113, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_113_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_114, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(114, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_114_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_115, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(115, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_115_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_116, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(116, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_116_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_117, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(117, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_117_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_118, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(118, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_118_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_119, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(119, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_119_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_120, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(120, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_120_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_121, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(121, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_121_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_122, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(122, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_122_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_123, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(123, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_123_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_124, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(124, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_124_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_125, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(125, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_125_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_126, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(126, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_126_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_127, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(127, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_127_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_128, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(128, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_128_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_129, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(129, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_129_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_130, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(130, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_130_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_131, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(131, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_131_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_132, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(132, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_132_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_133, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(133, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_133_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_134, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(134, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_134_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_135, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(135, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_135_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_136, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(136, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_136_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_137, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(137, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_137_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_138, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(138, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_138_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_139, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(139, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_139_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_140, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(140, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_140_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_141, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(141, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_141_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_142, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(142, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_142_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_143, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(143, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_143_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_144, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(144, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_144_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_145, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(145, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_145_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_146, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(146, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_146_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_147, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(147, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_147_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_148, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(148, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_148_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_149, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(149, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_149_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_150, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(150, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_150_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_151, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(151, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_151_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_152, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(152, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_152_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_153, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(153, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_153_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_154, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(154, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_154_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_155, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(155, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_155_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_156, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(156, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_156_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_157, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(157, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_157_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_158, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(158, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_158_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_159, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(159, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_159_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_160, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(160, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_160_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_161, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(161, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_161_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_162, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(162, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_162_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_163, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(163, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_163_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_164, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(164, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_164_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_165, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(165, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_165_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_166, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(166, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_166_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_167, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(167, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_167_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_168, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(168, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_168_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_169, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(169, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_169_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_170, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(170, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_170_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_171, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(171, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_171_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_172, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(172, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_172_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_173, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(173, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_173_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_174, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(174, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_174_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_175, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(175, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_175_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_176, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(176, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_176_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_177, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(177, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_177_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_178, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(178, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_178_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_179, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(179, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_179_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_180, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(180, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_180_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_181, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(181, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_181_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_182, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(182, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_182_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_183, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(183, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_183_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_184, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(184, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_184_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_185, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(185, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_185_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_186, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(186, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_186_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_187, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(187, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_187_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_188, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(188, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_188_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_189, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(189, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_189_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_190, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(190, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_190_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_191, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(191, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_191_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_192, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(192, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_192_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_193, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(193, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_193_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_194, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(194, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_194_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_195, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(195, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_195_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_196, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(196, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_196_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_197, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(197, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_197_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_198, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(198, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_198_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_199, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(199, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_199_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_200, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(200, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_200_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_201, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(201, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_201_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_202, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(202, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_202_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_203, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(203, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_203_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_204, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(204, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_204_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_205, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(205, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_205_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_206, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(206, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_206_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_207, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(207, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_207_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_208, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(208, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_208_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_209, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(209, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_209_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_210, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(210, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_210_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_211, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(211, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_211_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_212, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(212, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_212_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_213, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(213, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_213_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_214, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(214, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_214_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_215, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(215, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_215_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_216, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(216, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_216_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_217, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(217, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_217_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_218, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(218, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_218_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_219, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(219, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_219_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_220, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(220, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_220_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_221, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(221, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_221_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_222, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(222, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_222_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_223, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(223, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_223_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_224, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(224, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_224_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_225, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(225, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_225_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_226, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(226, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_226_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_227, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(227, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_227_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_228, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(228, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_228_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_229, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(229, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_229_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_230, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(230, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_230_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_231, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(231, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_231_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_232, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(232, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_232_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_233, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(233, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_233_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_234, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(234, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_234_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_235, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(235, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_235_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_236, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(236, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_236_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_237, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(237, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_237_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_238, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(238, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_238_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_239, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(239, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_239_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_240, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(240, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_240_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_241, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(241, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_241_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_242, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(242, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_242_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_243, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(243, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_243_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_244, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(244, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_244_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_245, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(245, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_245_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_246, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(246, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_246_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_247, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(247, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_247_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_248, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(248, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_248_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_249, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(249, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_249_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_250, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(250, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_250_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_251, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(251, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_251_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_252, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(252, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_252_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_253, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(253, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_253_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_254, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(254, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_254_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_255, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(255, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_255_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_256, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(256, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_256_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_257, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(257, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/list/detail/edg/fold_right.hpp b/vendor/pdalboost/boost/preprocessor/list/detail/edg/fold_right.hpp
new file mode 100644
index 0000000..d372d2e
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/list/detail/edg/fold_right.hpp
@@ -0,0 +1,794 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_RIGHT_HPP
+# define BOOST_PREPROCESSOR_LIST_DETAIL_EDG_FOLD_RIGHT_HPP
+#
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_LIST_FOLD_RIGHT_1(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_1_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_2(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_2_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_3(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_3_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_4(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_4_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_5(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_5_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_6(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_6_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_7(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_7_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_8(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_8_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_9(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_9_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_10(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_10_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_11(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_11_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_12(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_12_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_13(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_13_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_14(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_14_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_15(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_15_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_16(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_16_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_17(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_17_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_18(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_18_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_19(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_19_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_20(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_20_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_21(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_21_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_22(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_22_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_23(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_23_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_24(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_24_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_25(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_25_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_26(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_26_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_27(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_27_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_28(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_28_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_29(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_29_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_30(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_30_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_31(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_31_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_32(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_32_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_33(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_33_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_34(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_34_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_35(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_35_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_36(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_36_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_37(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_37_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_38(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_38_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_39(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_39_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_40(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_40_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_41(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_41_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_42(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_42_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_43(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_43_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_44(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_44_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_45(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_45_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_46(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_46_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_47(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_47_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_48(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_48_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_49(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_49_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_50(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_50_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_51(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_51_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_52(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_52_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_53(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_53_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_54(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_54_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_55(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_55_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_56(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_56_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_57(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_57_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_58(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_58_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_59(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_59_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_60(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_60_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_61(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_61_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_62(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_62_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_63(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_63_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_64(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_64_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_65(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_65_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_66(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_66_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_67(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_67_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_68(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_68_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_69(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_69_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_70(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_70_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_71(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_71_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_72(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_72_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_73(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_73_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_74(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_74_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_75(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_75_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_76(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_76_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_77(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_77_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_78(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_78_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_79(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_79_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_80(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_80_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_81(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_81_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_82(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_82_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_83(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_83_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_84(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_84_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_85(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_85_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_86(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_86_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_87(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_87_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_88(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_88_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_89(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_89_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_90(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_90_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_91(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_91_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_92(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_92_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_93(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_93_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_94(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_94_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_95(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_95_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_96(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_96_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_97(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_97_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_98(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_98_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_99(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_99_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_100(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_100_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_101(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_101_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_102(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_102_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_103(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_103_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_104(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_104_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_105(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_105_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_106(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_106_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_107(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_107_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_108(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_108_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_109(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_109_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_110(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_110_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_111(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_111_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_112(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_112_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_113(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_113_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_114(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_114_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_115(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_115_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_116(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_116_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_117(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_117_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_118(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_118_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_119(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_119_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_120(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_120_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_121(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_121_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_122(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_122_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_123(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_123_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_124(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_124_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_125(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_125_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_126(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_126_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_127(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_127_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_128(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_128_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_129(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_129_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_130(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_130_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_131(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_131_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_132(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_132_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_133(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_133_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_134(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_134_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_135(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_135_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_136(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_136_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_137(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_137_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_138(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_138_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_139(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_139_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_140(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_140_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_141(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_141_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_142(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_142_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_143(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_143_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_144(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_144_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_145(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_145_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_146(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_146_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_147(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_147_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_148(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_148_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_149(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_149_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_150(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_150_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_151(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_151_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_152(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_152_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_153(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_153_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_154(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_154_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_155(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_155_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_156(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_156_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_157(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_157_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_158(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_158_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_159(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_159_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_160(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_160_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_161(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_161_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_162(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_162_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_163(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_163_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_164(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_164_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_165(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_165_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_166(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_166_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_167(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_167_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_168(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_168_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_169(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_169_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_170(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_170_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_171(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_171_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_172(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_172_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_173(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_173_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_174(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_174_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_175(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_175_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_176(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_176_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_177(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_177_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_178(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_178_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_179(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_179_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_180(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_180_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_181(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_181_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_182(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_182_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_183(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_183_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_184(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_184_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_185(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_185_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_186(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_186_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_187(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_187_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_188(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_188_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_189(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_189_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_190(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_190_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_191(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_191_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_192(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_192_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_193(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_193_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_194(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_194_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_195(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_195_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_196(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_196_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_197(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_197_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_198(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_198_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_199(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_199_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_200(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_200_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_201(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_201_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_202(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_202_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_203(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_203_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_204(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_204_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_205(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_205_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_206(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_206_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_207(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_207_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_208(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_208_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_209(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_209_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_210(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_210_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_211(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_211_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_212(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_212_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_213(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_213_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_214(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_214_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_215(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_215_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_216(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_216_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_217(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_217_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_218(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_218_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_219(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_219_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_220(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_220_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_221(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_221_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_222(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_222_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_223(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_223_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_224(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_224_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_225(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_225_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_226(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_226_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_227(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_227_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_228(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_228_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_229(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_229_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_230(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_230_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_231(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_231_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_232(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_232_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_233(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_233_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_234(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_234_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_235(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_235_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_236(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_236_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_237(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_237_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_238(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_238_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_239(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_239_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_240(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_240_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_241(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_241_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_242(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_242_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_243(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_243_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_244(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_244_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_245(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_245_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_246(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_246_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_247(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_247_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_248(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_248_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_249(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_249_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_250(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_250_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_251(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_251_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_252(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_252_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_253(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_253_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_254(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_254_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_255(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_255_D(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_256(o, s, l) BOOST_PP_LIST_FOLD_RIGHT_256_D(o, s, l)
+#
+# define BOOST_PP_LIST_FOLD_RIGHT_1_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(2, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_2, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_2_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(3, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_3, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_3_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(4, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_4, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_4_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(5, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_5, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_5_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(6, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_6, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_6_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(7, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_7, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_7_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(8, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_8, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_8_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(9, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_9, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_9_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(10, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_10, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_10_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(11, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_11, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_11_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(12, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_12, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_12_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(13, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_13, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_13_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(14, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_14, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_14_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(15, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_15, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_15_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(16, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_16, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_16_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(17, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_17, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_17_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(18, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_18, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_18_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(19, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_19, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_19_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(20, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_20, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_20_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(21, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_21, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_21_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(22, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_22, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_22_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(23, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_23, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_23_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(24, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_24, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_24_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(25, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_25, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_25_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(26, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_26, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_26_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(27, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_27, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_27_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(28, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_28, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_28_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(29, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_29, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_29_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(30, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_30, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_30_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(31, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_31, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_31_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(32, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_32, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_32_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(33, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_33, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_33_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(34, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_34, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_34_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(35, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_35, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_35_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(36, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_36, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_36_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(37, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_37, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_37_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(38, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_38, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_38_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(39, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_39, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_39_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(40, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_40, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_40_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(41, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_41, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_41_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(42, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_42, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_42_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(43, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_43, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_43_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(44, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_44, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_44_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(45, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_45, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_45_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(46, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_46, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_46_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(47, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_47, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_47_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(48, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_48, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_48_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(49, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_49, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_49_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(50, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_50, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_50_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(51, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_51, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_51_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(52, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_52, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_52_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(53, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_53, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_53_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(54, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_54, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_54_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(55, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_55, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_55_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(56, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_56, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_56_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(57, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_57, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_57_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(58, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_58, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_58_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(59, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_59, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_59_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(60, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_60, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_60_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(61, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_61, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_61_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(62, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_62, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_62_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(63, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_63, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_63_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(64, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_64, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_64_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(65, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_65, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_65_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(66, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_66, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_66_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(67, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_67, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_67_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(68, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_68, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_68_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(69, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_69, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_69_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(70, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_70, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_70_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(71, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_71, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_71_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(72, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_72, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_72_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(73, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_73, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_73_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(74, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_74, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_74_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(75, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_75, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_75_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(76, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_76, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_76_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(77, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_77, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_77_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(78, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_78, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_78_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(79, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_79, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_79_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(80, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_80, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_80_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(81, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_81, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_81_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(82, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_82, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_82_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(83, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_83, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_83_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(84, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_84, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_84_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(85, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_85, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_85_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(86, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_86, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_86_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(87, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_87, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_87_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(88, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_88, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_88_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(89, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_89, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_89_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(90, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_90, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_90_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(91, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_91, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_91_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(92, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_92, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_92_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(93, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_93, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_93_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(94, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_94, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_94_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(95, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_95, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_95_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(96, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_96, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_96_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(97, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_97, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_97_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(98, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_98, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_98_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(99, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_99, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_99_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(100, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_100, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_100_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(101, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_101, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_101_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(102, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_102, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_102_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(103, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_103, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_103_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(104, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_104, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_104_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(105, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_105, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_105_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(106, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_106, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_106_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(107, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_107, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_107_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(108, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_108, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_108_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(109, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_109, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_109_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(110, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_110, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_110_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(111, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_111, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_111_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(112, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_112, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_112_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(113, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_113, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_113_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(114, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_114, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_114_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(115, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_115, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_115_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(116, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_116, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_116_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(117, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_117, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_117_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(118, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_118, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_118_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(119, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_119, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_119_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(120, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_120, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_120_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(121, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_121, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_121_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(122, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_122, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_122_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(123, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_123, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_123_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(124, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_124, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_124_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(125, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_125, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_125_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(126, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_126, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_126_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(127, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_127, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_127_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(128, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_128, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_128_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(129, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_129, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_129_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(130, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_130, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_130_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(131, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_131, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_131_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(132, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_132, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_132_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(133, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_133, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_133_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(134, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_134, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_134_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(135, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_135, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_135_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(136, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_136, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_136_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(137, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_137, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_137_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(138, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_138, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_138_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(139, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_139, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_139_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(140, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_140, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_140_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(141, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_141, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_141_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(142, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_142, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_142_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(143, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_143, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_143_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(144, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_144, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_144_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(145, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_145, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_145_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(146, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_146, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_146_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(147, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_147, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_147_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(148, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_148, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_148_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(149, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_149, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_149_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(150, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_150, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_150_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(151, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_151, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_151_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(152, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_152, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_152_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(153, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_153, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_153_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(154, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_154, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_154_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(155, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_155, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_155_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(156, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_156, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_156_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(157, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_157, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_157_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(158, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_158, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_158_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(159, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_159, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_159_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(160, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_160, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_160_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(161, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_161, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_161_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(162, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_162, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_162_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(163, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_163, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_163_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(164, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_164, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_164_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(165, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_165, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_165_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(166, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_166, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_166_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(167, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_167, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_167_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(168, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_168, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_168_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(169, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_169, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_169_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(170, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_170, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_170_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(171, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_171, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_171_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(172, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_172, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_172_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(173, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_173, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_173_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(174, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_174, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_174_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(175, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_175, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_175_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(176, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_176, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_176_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(177, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_177, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_177_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(178, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_178, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_178_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(179, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_179, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_179_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(180, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_180, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_180_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(181, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_181, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_181_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(182, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_182, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_182_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(183, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_183, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_183_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(184, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_184, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_184_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(185, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_185, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_185_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(186, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_186, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_186_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(187, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_187, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_187_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(188, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_188, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_188_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(189, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_189, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_189_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(190, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_190, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_190_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(191, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_191, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_191_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(192, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_192, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_192_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(193, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_193, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_193_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(194, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_194, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_194_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(195, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_195, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_195_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(196, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_196, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_196_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(197, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_197, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_197_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(198, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_198, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_198_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(199, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_199, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_199_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(200, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_200, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_200_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(201, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_201, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_201_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(202, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_202, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_202_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(203, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_203, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_203_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(204, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_204, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_204_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(205, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_205, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_205_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(206, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_206, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_206_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(207, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_207, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_207_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(208, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_208, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_208_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(209, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_209, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_209_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(210, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_210, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_210_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(211, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_211, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_211_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(212, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_212, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_212_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(213, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_213, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_213_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(214, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_214, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_214_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(215, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_215, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_215_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(216, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_216, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_216_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(217, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_217, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_217_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(218, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_218, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_218_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(219, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_219, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_219_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(220, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_220, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_220_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(221, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_221, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_221_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(222, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_222, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_222_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(223, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_223, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_223_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(224, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_224, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_224_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(225, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_225, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_225_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(226, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_226, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_226_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(227, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_227, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_227_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(228, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_228, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_228_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(229, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_229, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_229_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(230, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_230, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_230_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(231, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_231, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_231_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(232, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_232, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_232_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(233, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_233, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_233_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(234, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_234, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_234_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(235, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_235, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_235_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(236, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_236, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_236_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(237, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_237, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_237_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(238, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_238, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_238_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(239, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_239, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_239_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(240, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_240, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_240_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(241, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_241, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_241_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(242, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_242, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_242_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(243, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_243, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_243_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(244, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_244, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_244_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(245, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_245, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_245_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(246, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_246, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_246_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(247, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_247, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_247_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(248, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_248, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_248_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(249, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_249, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_249_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(250, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_250, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_250_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(251, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_251, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_251_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(252, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_252, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_252_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(253, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_253, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_253_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(254, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_254, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_254_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(255, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_255, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_255_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(256, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_256, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+# define BOOST_PP_LIST_FOLD_RIGHT_256_D(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), o, s BOOST_PP_TUPLE_EAT_3)(257, BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_RIGHT_257, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3)(o, s, BOOST_PP_LIST_REST(l)), BOOST_PP_LIST_FIRST(l))
+#
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_NIL 1
+#
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_1(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_2(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_3(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_4(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_5(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_6(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_7(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_8(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_9(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_10(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_11(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_12(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_13(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_14(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_15(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_16(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_17(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_18(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_19(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_20(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_21(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_22(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_23(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_24(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_25(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_26(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_27(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_28(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_29(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_30(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_31(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_32(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_33(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_34(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_35(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_36(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_37(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_38(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_39(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_40(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_41(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_42(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_43(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_44(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_45(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_46(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_47(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_48(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_49(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_50(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_51(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_52(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_53(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_54(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_55(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_56(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_57(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_58(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_59(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_60(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_61(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_62(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_63(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_64(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_65(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_66(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_67(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_68(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_69(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_70(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_71(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_72(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_73(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_74(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_75(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_76(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_77(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_78(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_79(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_80(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_81(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_82(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_83(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_84(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_85(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_86(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_87(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_88(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_89(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_90(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_91(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_92(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_93(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_94(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_95(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_96(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_97(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_98(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_99(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_100(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_101(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_102(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_103(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_104(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_105(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_106(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_107(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_108(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_109(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_110(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_111(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_112(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_113(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_114(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_115(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_116(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_117(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_118(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_119(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_120(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_121(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_122(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_123(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_124(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_125(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_126(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_127(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_128(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_129(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_130(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_131(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_132(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_133(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_134(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_135(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_136(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_137(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_138(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_139(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_140(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_141(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_142(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_143(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_144(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_145(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_146(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_147(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_148(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_149(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_150(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_151(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_152(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_153(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_154(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_155(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_156(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_157(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_158(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_159(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_160(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_161(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_162(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_163(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_164(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_165(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_166(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_167(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_168(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_169(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_170(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_171(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_172(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_173(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_174(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_175(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_176(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_177(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_178(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_179(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_180(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_181(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_182(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_183(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_184(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_185(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_186(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_187(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_188(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_189(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_190(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_191(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_192(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_193(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_194(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_195(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_196(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_197(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_198(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_199(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_200(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_201(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_202(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_203(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_204(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_205(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_206(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_207(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_208(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_209(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_210(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_211(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_212(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_213(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_214(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_215(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_216(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_217(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_218(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_219(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_220(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_221(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_222(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_223(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_224(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_225(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_226(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_227(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_228(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_229(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_230(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_231(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_232(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_233(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_234(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_235(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_236(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_237(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_238(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_239(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_240(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_241(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_242(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_243(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_244(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_245(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_246(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_247(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_248(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_249(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_250(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_251(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_252(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_253(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_254(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_255(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_RIGHT_CHECK_BOOST_PP_LIST_FOLD_RIGHT_256(o, s, l) 0
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/list/detail/fold_left.hpp b/vendor/pdalboost/boost/preprocessor/list/detail/fold_left.hpp
new file mode 100644
index 0000000..f5fcab7
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/list/detail/fold_left.hpp
@@ -0,0 +1,279 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP
+# define BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_LEFT_HPP
+#
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_2, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(2, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_3, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(3, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_4, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(4, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_5, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(5, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_6, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(6, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_7, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(7, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_8, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(8, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_9, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(9, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_10, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(10, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_11, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(11, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_12, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(12, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_13, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(13, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_14, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(14, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_15, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(15, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_16, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(16, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_17, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(17, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_18, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(18, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_19, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(19, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_20, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(20, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_21, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(21, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_22, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(22, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_23, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(23, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_24, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(24, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_25, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(25, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_26, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(26, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_27, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(27, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_28, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(28, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_29, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(29, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_30, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(30, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_31, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(31, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_32, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(32, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_33, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(33, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_34, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(34, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_35, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(35, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_36, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(36, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_37, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(37, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_38, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(38, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_39, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(39, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_40, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(40, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_41, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(41, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_42, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(42, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_43, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(43, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_44, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(44, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_45, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(45, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_46, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(46, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_47, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(47, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_48, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(48, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_49, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(49, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_50, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(50, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_51, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(51, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_52, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(52, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_53, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(53, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_54, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(54, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_55, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(55, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_56, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(56, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_57, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(57, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_58, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(58, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_59, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(59, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_60, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(60, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_61, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(61, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_62, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(62, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_63, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(63, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_64, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(64, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_65, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(65, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_66, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(66, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_67, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(67, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_68, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(68, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_69, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(69, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_70, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(70, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_71, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(71, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_72, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(72, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_73, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(73, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_74, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(74, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_75, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(75, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_76, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(76, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_77, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(77, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_78, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(78, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_79, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(79, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_80, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(80, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_81, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(81, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_82, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(82, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_83, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(83, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_84, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(84, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_85, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(85, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_86, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(86, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_87, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(87, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_88, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(88, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_89, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(89, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_90, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(90, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_91, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(91, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_92, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(92, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_93, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(93, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_94, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(94, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_95, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(95, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_96, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(96, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_97, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(97, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_98, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(98, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_99, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(99, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_100, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(100, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_101, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(101, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_102, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(102, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_103, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(103, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_104, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(104, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_105, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(105, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_106, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(106, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_107, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(107, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_108, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(108, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_109, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(109, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_110, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(110, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_111, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(111, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_112, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(112, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_113, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(113, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_114, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(114, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_115, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(115, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_116, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(116, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_117, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(117, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_118, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(118, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_119, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(119, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_120, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(120, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_121, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(121, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_122, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(122, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_123, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(123, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_124, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(124, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_125, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(125, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_126, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(126, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_127, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(127, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_128, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(128, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_129, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(129, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_130, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(130, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_131, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(131, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_132, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(132, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_133, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(133, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_134, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(134, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_135, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(135, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_136, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(136, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_137, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(137, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_138, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(138, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_139, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(139, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_140, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(140, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_141, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(141, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_142, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(142, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_143, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(143, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_144, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(144, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_145, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(145, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_146, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(146, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_147, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(147, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_148, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(148, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_149, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(149, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_150, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(150, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_151, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(151, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_152, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(152, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_153, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(153, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_154, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(154, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_155, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(155, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_156, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(156, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_157, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(157, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_158, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(158, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_159, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(159, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_160, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(160, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_161, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(161, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_162, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(162, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_163, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(163, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_164, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(164, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_165, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(165, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_166, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(166, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_167, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(167, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_168, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(168, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_169, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(169, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_170, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(170, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_171, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(171, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_172, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(172, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_173, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(173, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_174, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(174, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_175, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(175, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_176, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(176, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_177, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(177, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_178, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(178, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_179, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(179, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_180, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(180, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_181, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(181, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_182, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(182, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_183, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(183, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_184, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(184, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_185, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(185, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_186, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(186, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_187, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(187, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_188, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(188, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_189, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(189, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_190, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(190, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_191, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(191, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_192, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(192, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_193, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(193, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_194, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(194, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_195, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(195, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_196, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(196, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_197, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(197, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_198, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(198, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_199, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(199, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_200, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(200, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_201, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(201, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_202, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(202, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_203, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(203, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_204, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(204, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_205, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(205, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_206, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(206, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_207, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(207, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_208, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(208, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_209, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(209, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_210, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(210, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_211, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(211, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_212, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(212, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_213, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(213, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_214, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(214, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_215, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(215, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_216, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(216, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_217, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(217, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_218, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(218, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_219, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(219, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_220, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(220, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_221, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(221, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_222, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(222, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_223, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(223, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_224, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(224, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_225, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(225, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_226, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(226, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_227, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(227, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_228, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(228, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_229, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(229, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_230, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(230, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_231, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(231, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_232, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(232, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_233, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(233, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_234, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(234, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_235, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(235, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_236, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(236, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_237, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(237, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_238, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(238, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_239, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(239, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_240, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(240, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_241, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(241, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_242, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(242, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_243, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(243, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_244, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(244, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_245, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(245, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_246, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(246, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_247, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(247, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_248, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(248, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_249, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(249, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_250, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(250, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_251, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(251, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_252, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(252, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_253, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(253, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_254, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(254, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_255, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(255, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_256, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(256, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+# define BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) BOOST_PP_IIF(BOOST_PP_LIST_IS_CONS(l), BOOST_PP_LIST_FOLD_LEFT_257, s BOOST_PP_TUPLE_EAT_3)(o, BOOST_PP_EXPR_IIF(BOOST_PP_LIST_IS_CONS(l), o)(257, s, BOOST_PP_LIST_FIRST(l)), BOOST_PP_LIST_REST(l))
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/list/detail/fold_right.hpp b/vendor/pdalboost/boost/preprocessor/list/detail/fold_right.hpp
new file mode 100644
index 0000000..29146d5
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/list/detail/fold_right.hpp
@@ -0,0 +1,277 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_RIGHT_HPP
+# define BOOST_PREPROCESSOR_LIST_DETAIL_FOLD_RIGHT_HPP
+#
+# include <boost/preprocessor/list/fold_left.hpp>
+# include <boost/preprocessor/list/reverse.hpp>
+#
+# define BOOST_PP_LIST_FOLD_RIGHT_1(o, s, l) BOOST_PP_LIST_FOLD_LEFT_1(o, s, BOOST_PP_LIST_REVERSE_D(1, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_2(o, s, l) BOOST_PP_LIST_FOLD_LEFT_2(o, s, BOOST_PP_LIST_REVERSE_D(2, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_3(o, s, l) BOOST_PP_LIST_FOLD_LEFT_3(o, s, BOOST_PP_LIST_REVERSE_D(3, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_4(o, s, l) BOOST_PP_LIST_FOLD_LEFT_4(o, s, BOOST_PP_LIST_REVERSE_D(4, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_5(o, s, l) BOOST_PP_LIST_FOLD_LEFT_5(o, s, BOOST_PP_LIST_REVERSE_D(5, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_6(o, s, l) BOOST_PP_LIST_FOLD_LEFT_6(o, s, BOOST_PP_LIST_REVERSE_D(6, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_7(o, s, l) BOOST_PP_LIST_FOLD_LEFT_7(o, s, BOOST_PP_LIST_REVERSE_D(7, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_8(o, s, l) BOOST_PP_LIST_FOLD_LEFT_8(o, s, BOOST_PP_LIST_REVERSE_D(8, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_9(o, s, l) BOOST_PP_LIST_FOLD_LEFT_9(o, s, BOOST_PP_LIST_REVERSE_D(9, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_10(o, s, l) BOOST_PP_LIST_FOLD_LEFT_10(o, s, BOOST_PP_LIST_REVERSE_D(10, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_11(o, s, l) BOOST_PP_LIST_FOLD_LEFT_11(o, s, BOOST_PP_LIST_REVERSE_D(11, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_12(o, s, l) BOOST_PP_LIST_FOLD_LEFT_12(o, s, BOOST_PP_LIST_REVERSE_D(12, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_13(o, s, l) BOOST_PP_LIST_FOLD_LEFT_13(o, s, BOOST_PP_LIST_REVERSE_D(13, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_14(o, s, l) BOOST_PP_LIST_FOLD_LEFT_14(o, s, BOOST_PP_LIST_REVERSE_D(14, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_15(o, s, l) BOOST_PP_LIST_FOLD_LEFT_15(o, s, BOOST_PP_LIST_REVERSE_D(15, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_16(o, s, l) BOOST_PP_LIST_FOLD_LEFT_16(o, s, BOOST_PP_LIST_REVERSE_D(16, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_17(o, s, l) BOOST_PP_LIST_FOLD_LEFT_17(o, s, BOOST_PP_LIST_REVERSE_D(17, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_18(o, s, l) BOOST_PP_LIST_FOLD_LEFT_18(o, s, BOOST_PP_LIST_REVERSE_D(18, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_19(o, s, l) BOOST_PP_LIST_FOLD_LEFT_19(o, s, BOOST_PP_LIST_REVERSE_D(19, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_20(o, s, l) BOOST_PP_LIST_FOLD_LEFT_20(o, s, BOOST_PP_LIST_REVERSE_D(20, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_21(o, s, l) BOOST_PP_LIST_FOLD_LEFT_21(o, s, BOOST_PP_LIST_REVERSE_D(21, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_22(o, s, l) BOOST_PP_LIST_FOLD_LEFT_22(o, s, BOOST_PP_LIST_REVERSE_D(22, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_23(o, s, l) BOOST_PP_LIST_FOLD_LEFT_23(o, s, BOOST_PP_LIST_REVERSE_D(23, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_24(o, s, l) BOOST_PP_LIST_FOLD_LEFT_24(o, s, BOOST_PP_LIST_REVERSE_D(24, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_25(o, s, l) BOOST_PP_LIST_FOLD_LEFT_25(o, s, BOOST_PP_LIST_REVERSE_D(25, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_26(o, s, l) BOOST_PP_LIST_FOLD_LEFT_26(o, s, BOOST_PP_LIST_REVERSE_D(26, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_27(o, s, l) BOOST_PP_LIST_FOLD_LEFT_27(o, s, BOOST_PP_LIST_REVERSE_D(27, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_28(o, s, l) BOOST_PP_LIST_FOLD_LEFT_28(o, s, BOOST_PP_LIST_REVERSE_D(28, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_29(o, s, l) BOOST_PP_LIST_FOLD_LEFT_29(o, s, BOOST_PP_LIST_REVERSE_D(29, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_30(o, s, l) BOOST_PP_LIST_FOLD_LEFT_30(o, s, BOOST_PP_LIST_REVERSE_D(30, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_31(o, s, l) BOOST_PP_LIST_FOLD_LEFT_31(o, s, BOOST_PP_LIST_REVERSE_D(31, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_32(o, s, l) BOOST_PP_LIST_FOLD_LEFT_32(o, s, BOOST_PP_LIST_REVERSE_D(32, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_33(o, s, l) BOOST_PP_LIST_FOLD_LEFT_33(o, s, BOOST_PP_LIST_REVERSE_D(33, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_34(o, s, l) BOOST_PP_LIST_FOLD_LEFT_34(o, s, BOOST_PP_LIST_REVERSE_D(34, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_35(o, s, l) BOOST_PP_LIST_FOLD_LEFT_35(o, s, BOOST_PP_LIST_REVERSE_D(35, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_36(o, s, l) BOOST_PP_LIST_FOLD_LEFT_36(o, s, BOOST_PP_LIST_REVERSE_D(36, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_37(o, s, l) BOOST_PP_LIST_FOLD_LEFT_37(o, s, BOOST_PP_LIST_REVERSE_D(37, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_38(o, s, l) BOOST_PP_LIST_FOLD_LEFT_38(o, s, BOOST_PP_LIST_REVERSE_D(38, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_39(o, s, l) BOOST_PP_LIST_FOLD_LEFT_39(o, s, BOOST_PP_LIST_REVERSE_D(39, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_40(o, s, l) BOOST_PP_LIST_FOLD_LEFT_40(o, s, BOOST_PP_LIST_REVERSE_D(40, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_41(o, s, l) BOOST_PP_LIST_FOLD_LEFT_41(o, s, BOOST_PP_LIST_REVERSE_D(41, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_42(o, s, l) BOOST_PP_LIST_FOLD_LEFT_42(o, s, BOOST_PP_LIST_REVERSE_D(42, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_43(o, s, l) BOOST_PP_LIST_FOLD_LEFT_43(o, s, BOOST_PP_LIST_REVERSE_D(43, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_44(o, s, l) BOOST_PP_LIST_FOLD_LEFT_44(o, s, BOOST_PP_LIST_REVERSE_D(44, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_45(o, s, l) BOOST_PP_LIST_FOLD_LEFT_45(o, s, BOOST_PP_LIST_REVERSE_D(45, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_46(o, s, l) BOOST_PP_LIST_FOLD_LEFT_46(o, s, BOOST_PP_LIST_REVERSE_D(46, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_47(o, s, l) BOOST_PP_LIST_FOLD_LEFT_47(o, s, BOOST_PP_LIST_REVERSE_D(47, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_48(o, s, l) BOOST_PP_LIST_FOLD_LEFT_48(o, s, BOOST_PP_LIST_REVERSE_D(48, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_49(o, s, l) BOOST_PP_LIST_FOLD_LEFT_49(o, s, BOOST_PP_LIST_REVERSE_D(49, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_50(o, s, l) BOOST_PP_LIST_FOLD_LEFT_50(o, s, BOOST_PP_LIST_REVERSE_D(50, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_51(o, s, l) BOOST_PP_LIST_FOLD_LEFT_51(o, s, BOOST_PP_LIST_REVERSE_D(51, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_52(o, s, l) BOOST_PP_LIST_FOLD_LEFT_52(o, s, BOOST_PP_LIST_REVERSE_D(52, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_53(o, s, l) BOOST_PP_LIST_FOLD_LEFT_53(o, s, BOOST_PP_LIST_REVERSE_D(53, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_54(o, s, l) BOOST_PP_LIST_FOLD_LEFT_54(o, s, BOOST_PP_LIST_REVERSE_D(54, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_55(o, s, l) BOOST_PP_LIST_FOLD_LEFT_55(o, s, BOOST_PP_LIST_REVERSE_D(55, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_56(o, s, l) BOOST_PP_LIST_FOLD_LEFT_56(o, s, BOOST_PP_LIST_REVERSE_D(56, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_57(o, s, l) BOOST_PP_LIST_FOLD_LEFT_57(o, s, BOOST_PP_LIST_REVERSE_D(57, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_58(o, s, l) BOOST_PP_LIST_FOLD_LEFT_58(o, s, BOOST_PP_LIST_REVERSE_D(58, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_59(o, s, l) BOOST_PP_LIST_FOLD_LEFT_59(o, s, BOOST_PP_LIST_REVERSE_D(59, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_60(o, s, l) BOOST_PP_LIST_FOLD_LEFT_60(o, s, BOOST_PP_LIST_REVERSE_D(60, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_61(o, s, l) BOOST_PP_LIST_FOLD_LEFT_61(o, s, BOOST_PP_LIST_REVERSE_D(61, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_62(o, s, l) BOOST_PP_LIST_FOLD_LEFT_62(o, s, BOOST_PP_LIST_REVERSE_D(62, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_63(o, s, l) BOOST_PP_LIST_FOLD_LEFT_63(o, s, BOOST_PP_LIST_REVERSE_D(63, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_64(o, s, l) BOOST_PP_LIST_FOLD_LEFT_64(o, s, BOOST_PP_LIST_REVERSE_D(64, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_65(o, s, l) BOOST_PP_LIST_FOLD_LEFT_65(o, s, BOOST_PP_LIST_REVERSE_D(65, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_66(o, s, l) BOOST_PP_LIST_FOLD_LEFT_66(o, s, BOOST_PP_LIST_REVERSE_D(66, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_67(o, s, l) BOOST_PP_LIST_FOLD_LEFT_67(o, s, BOOST_PP_LIST_REVERSE_D(67, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_68(o, s, l) BOOST_PP_LIST_FOLD_LEFT_68(o, s, BOOST_PP_LIST_REVERSE_D(68, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_69(o, s, l) BOOST_PP_LIST_FOLD_LEFT_69(o, s, BOOST_PP_LIST_REVERSE_D(69, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_70(o, s, l) BOOST_PP_LIST_FOLD_LEFT_70(o, s, BOOST_PP_LIST_REVERSE_D(70, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_71(o, s, l) BOOST_PP_LIST_FOLD_LEFT_71(o, s, BOOST_PP_LIST_REVERSE_D(71, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_72(o, s, l) BOOST_PP_LIST_FOLD_LEFT_72(o, s, BOOST_PP_LIST_REVERSE_D(72, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_73(o, s, l) BOOST_PP_LIST_FOLD_LEFT_73(o, s, BOOST_PP_LIST_REVERSE_D(73, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_74(o, s, l) BOOST_PP_LIST_FOLD_LEFT_74(o, s, BOOST_PP_LIST_REVERSE_D(74, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_75(o, s, l) BOOST_PP_LIST_FOLD_LEFT_75(o, s, BOOST_PP_LIST_REVERSE_D(75, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_76(o, s, l) BOOST_PP_LIST_FOLD_LEFT_76(o, s, BOOST_PP_LIST_REVERSE_D(76, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_77(o, s, l) BOOST_PP_LIST_FOLD_LEFT_77(o, s, BOOST_PP_LIST_REVERSE_D(77, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_78(o, s, l) BOOST_PP_LIST_FOLD_LEFT_78(o, s, BOOST_PP_LIST_REVERSE_D(78, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_79(o, s, l) BOOST_PP_LIST_FOLD_LEFT_79(o, s, BOOST_PP_LIST_REVERSE_D(79, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_80(o, s, l) BOOST_PP_LIST_FOLD_LEFT_80(o, s, BOOST_PP_LIST_REVERSE_D(80, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_81(o, s, l) BOOST_PP_LIST_FOLD_LEFT_81(o, s, BOOST_PP_LIST_REVERSE_D(81, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_82(o, s, l) BOOST_PP_LIST_FOLD_LEFT_82(o, s, BOOST_PP_LIST_REVERSE_D(82, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_83(o, s, l) BOOST_PP_LIST_FOLD_LEFT_83(o, s, BOOST_PP_LIST_REVERSE_D(83, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_84(o, s, l) BOOST_PP_LIST_FOLD_LEFT_84(o, s, BOOST_PP_LIST_REVERSE_D(84, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_85(o, s, l) BOOST_PP_LIST_FOLD_LEFT_85(o, s, BOOST_PP_LIST_REVERSE_D(85, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_86(o, s, l) BOOST_PP_LIST_FOLD_LEFT_86(o, s, BOOST_PP_LIST_REVERSE_D(86, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_87(o, s, l) BOOST_PP_LIST_FOLD_LEFT_87(o, s, BOOST_PP_LIST_REVERSE_D(87, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_88(o, s, l) BOOST_PP_LIST_FOLD_LEFT_88(o, s, BOOST_PP_LIST_REVERSE_D(88, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_89(o, s, l) BOOST_PP_LIST_FOLD_LEFT_89(o, s, BOOST_PP_LIST_REVERSE_D(89, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_90(o, s, l) BOOST_PP_LIST_FOLD_LEFT_90(o, s, BOOST_PP_LIST_REVERSE_D(90, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_91(o, s, l) BOOST_PP_LIST_FOLD_LEFT_91(o, s, BOOST_PP_LIST_REVERSE_D(91, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_92(o, s, l) BOOST_PP_LIST_FOLD_LEFT_92(o, s, BOOST_PP_LIST_REVERSE_D(92, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_93(o, s, l) BOOST_PP_LIST_FOLD_LEFT_93(o, s, BOOST_PP_LIST_REVERSE_D(93, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_94(o, s, l) BOOST_PP_LIST_FOLD_LEFT_94(o, s, BOOST_PP_LIST_REVERSE_D(94, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_95(o, s, l) BOOST_PP_LIST_FOLD_LEFT_95(o, s, BOOST_PP_LIST_REVERSE_D(95, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_96(o, s, l) BOOST_PP_LIST_FOLD_LEFT_96(o, s, BOOST_PP_LIST_REVERSE_D(96, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_97(o, s, l) BOOST_PP_LIST_FOLD_LEFT_97(o, s, BOOST_PP_LIST_REVERSE_D(97, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_98(o, s, l) BOOST_PP_LIST_FOLD_LEFT_98(o, s, BOOST_PP_LIST_REVERSE_D(98, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_99(o, s, l) BOOST_PP_LIST_FOLD_LEFT_99(o, s, BOOST_PP_LIST_REVERSE_D(99, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_100(o, s, l) BOOST_PP_LIST_FOLD_LEFT_100(o, s, BOOST_PP_LIST_REVERSE_D(100, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_101(o, s, l) BOOST_PP_LIST_FOLD_LEFT_101(o, s, BOOST_PP_LIST_REVERSE_D(101, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_102(o, s, l) BOOST_PP_LIST_FOLD_LEFT_102(o, s, BOOST_PP_LIST_REVERSE_D(102, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_103(o, s, l) BOOST_PP_LIST_FOLD_LEFT_103(o, s, BOOST_PP_LIST_REVERSE_D(103, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_104(o, s, l) BOOST_PP_LIST_FOLD_LEFT_104(o, s, BOOST_PP_LIST_REVERSE_D(104, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_105(o, s, l) BOOST_PP_LIST_FOLD_LEFT_105(o, s, BOOST_PP_LIST_REVERSE_D(105, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_106(o, s, l) BOOST_PP_LIST_FOLD_LEFT_106(o, s, BOOST_PP_LIST_REVERSE_D(106, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_107(o, s, l) BOOST_PP_LIST_FOLD_LEFT_107(o, s, BOOST_PP_LIST_REVERSE_D(107, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_108(o, s, l) BOOST_PP_LIST_FOLD_LEFT_108(o, s, BOOST_PP_LIST_REVERSE_D(108, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_109(o, s, l) BOOST_PP_LIST_FOLD_LEFT_109(o, s, BOOST_PP_LIST_REVERSE_D(109, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_110(o, s, l) BOOST_PP_LIST_FOLD_LEFT_110(o, s, BOOST_PP_LIST_REVERSE_D(110, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_111(o, s, l) BOOST_PP_LIST_FOLD_LEFT_111(o, s, BOOST_PP_LIST_REVERSE_D(111, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_112(o, s, l) BOOST_PP_LIST_FOLD_LEFT_112(o, s, BOOST_PP_LIST_REVERSE_D(112, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_113(o, s, l) BOOST_PP_LIST_FOLD_LEFT_113(o, s, BOOST_PP_LIST_REVERSE_D(113, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_114(o, s, l) BOOST_PP_LIST_FOLD_LEFT_114(o, s, BOOST_PP_LIST_REVERSE_D(114, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_115(o, s, l) BOOST_PP_LIST_FOLD_LEFT_115(o, s, BOOST_PP_LIST_REVERSE_D(115, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_116(o, s, l) BOOST_PP_LIST_FOLD_LEFT_116(o, s, BOOST_PP_LIST_REVERSE_D(116, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_117(o, s, l) BOOST_PP_LIST_FOLD_LEFT_117(o, s, BOOST_PP_LIST_REVERSE_D(117, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_118(o, s, l) BOOST_PP_LIST_FOLD_LEFT_118(o, s, BOOST_PP_LIST_REVERSE_D(118, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_119(o, s, l) BOOST_PP_LIST_FOLD_LEFT_119(o, s, BOOST_PP_LIST_REVERSE_D(119, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_120(o, s, l) BOOST_PP_LIST_FOLD_LEFT_120(o, s, BOOST_PP_LIST_REVERSE_D(120, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_121(o, s, l) BOOST_PP_LIST_FOLD_LEFT_121(o, s, BOOST_PP_LIST_REVERSE_D(121, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_122(o, s, l) BOOST_PP_LIST_FOLD_LEFT_122(o, s, BOOST_PP_LIST_REVERSE_D(122, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_123(o, s, l) BOOST_PP_LIST_FOLD_LEFT_123(o, s, BOOST_PP_LIST_REVERSE_D(123, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_124(o, s, l) BOOST_PP_LIST_FOLD_LEFT_124(o, s, BOOST_PP_LIST_REVERSE_D(124, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_125(o, s, l) BOOST_PP_LIST_FOLD_LEFT_125(o, s, BOOST_PP_LIST_REVERSE_D(125, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_126(o, s, l) BOOST_PP_LIST_FOLD_LEFT_126(o, s, BOOST_PP_LIST_REVERSE_D(126, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_127(o, s, l) BOOST_PP_LIST_FOLD_LEFT_127(o, s, BOOST_PP_LIST_REVERSE_D(127, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_128(o, s, l) BOOST_PP_LIST_FOLD_LEFT_128(o, s, BOOST_PP_LIST_REVERSE_D(128, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_129(o, s, l) BOOST_PP_LIST_FOLD_LEFT_129(o, s, BOOST_PP_LIST_REVERSE_D(129, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_130(o, s, l) BOOST_PP_LIST_FOLD_LEFT_130(o, s, BOOST_PP_LIST_REVERSE_D(130, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_131(o, s, l) BOOST_PP_LIST_FOLD_LEFT_131(o, s, BOOST_PP_LIST_REVERSE_D(131, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_132(o, s, l) BOOST_PP_LIST_FOLD_LEFT_132(o, s, BOOST_PP_LIST_REVERSE_D(132, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_133(o, s, l) BOOST_PP_LIST_FOLD_LEFT_133(o, s, BOOST_PP_LIST_REVERSE_D(133, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_134(o, s, l) BOOST_PP_LIST_FOLD_LEFT_134(o, s, BOOST_PP_LIST_REVERSE_D(134, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_135(o, s, l) BOOST_PP_LIST_FOLD_LEFT_135(o, s, BOOST_PP_LIST_REVERSE_D(135, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_136(o, s, l) BOOST_PP_LIST_FOLD_LEFT_136(o, s, BOOST_PP_LIST_REVERSE_D(136, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_137(o, s, l) BOOST_PP_LIST_FOLD_LEFT_137(o, s, BOOST_PP_LIST_REVERSE_D(137, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_138(o, s, l) BOOST_PP_LIST_FOLD_LEFT_138(o, s, BOOST_PP_LIST_REVERSE_D(138, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_139(o, s, l) BOOST_PP_LIST_FOLD_LEFT_139(o, s, BOOST_PP_LIST_REVERSE_D(139, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_140(o, s, l) BOOST_PP_LIST_FOLD_LEFT_140(o, s, BOOST_PP_LIST_REVERSE_D(140, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_141(o, s, l) BOOST_PP_LIST_FOLD_LEFT_141(o, s, BOOST_PP_LIST_REVERSE_D(141, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_142(o, s, l) BOOST_PP_LIST_FOLD_LEFT_142(o, s, BOOST_PP_LIST_REVERSE_D(142, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_143(o, s, l) BOOST_PP_LIST_FOLD_LEFT_143(o, s, BOOST_PP_LIST_REVERSE_D(143, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_144(o, s, l) BOOST_PP_LIST_FOLD_LEFT_144(o, s, BOOST_PP_LIST_REVERSE_D(144, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_145(o, s, l) BOOST_PP_LIST_FOLD_LEFT_145(o, s, BOOST_PP_LIST_REVERSE_D(145, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_146(o, s, l) BOOST_PP_LIST_FOLD_LEFT_146(o, s, BOOST_PP_LIST_REVERSE_D(146, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_147(o, s, l) BOOST_PP_LIST_FOLD_LEFT_147(o, s, BOOST_PP_LIST_REVERSE_D(147, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_148(o, s, l) BOOST_PP_LIST_FOLD_LEFT_148(o, s, BOOST_PP_LIST_REVERSE_D(148, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_149(o, s, l) BOOST_PP_LIST_FOLD_LEFT_149(o, s, BOOST_PP_LIST_REVERSE_D(149, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_150(o, s, l) BOOST_PP_LIST_FOLD_LEFT_150(o, s, BOOST_PP_LIST_REVERSE_D(150, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_151(o, s, l) BOOST_PP_LIST_FOLD_LEFT_151(o, s, BOOST_PP_LIST_REVERSE_D(151, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_152(o, s, l) BOOST_PP_LIST_FOLD_LEFT_152(o, s, BOOST_PP_LIST_REVERSE_D(152, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_153(o, s, l) BOOST_PP_LIST_FOLD_LEFT_153(o, s, BOOST_PP_LIST_REVERSE_D(153, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_154(o, s, l) BOOST_PP_LIST_FOLD_LEFT_154(o, s, BOOST_PP_LIST_REVERSE_D(154, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_155(o, s, l) BOOST_PP_LIST_FOLD_LEFT_155(o, s, BOOST_PP_LIST_REVERSE_D(155, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_156(o, s, l) BOOST_PP_LIST_FOLD_LEFT_156(o, s, BOOST_PP_LIST_REVERSE_D(156, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_157(o, s, l) BOOST_PP_LIST_FOLD_LEFT_157(o, s, BOOST_PP_LIST_REVERSE_D(157, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_158(o, s, l) BOOST_PP_LIST_FOLD_LEFT_158(o, s, BOOST_PP_LIST_REVERSE_D(158, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_159(o, s, l) BOOST_PP_LIST_FOLD_LEFT_159(o, s, BOOST_PP_LIST_REVERSE_D(159, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_160(o, s, l) BOOST_PP_LIST_FOLD_LEFT_160(o, s, BOOST_PP_LIST_REVERSE_D(160, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_161(o, s, l) BOOST_PP_LIST_FOLD_LEFT_161(o, s, BOOST_PP_LIST_REVERSE_D(161, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_162(o, s, l) BOOST_PP_LIST_FOLD_LEFT_162(o, s, BOOST_PP_LIST_REVERSE_D(162, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_163(o, s, l) BOOST_PP_LIST_FOLD_LEFT_163(o, s, BOOST_PP_LIST_REVERSE_D(163, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_164(o, s, l) BOOST_PP_LIST_FOLD_LEFT_164(o, s, BOOST_PP_LIST_REVERSE_D(164, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_165(o, s, l) BOOST_PP_LIST_FOLD_LEFT_165(o, s, BOOST_PP_LIST_REVERSE_D(165, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_166(o, s, l) BOOST_PP_LIST_FOLD_LEFT_166(o, s, BOOST_PP_LIST_REVERSE_D(166, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_167(o, s, l) BOOST_PP_LIST_FOLD_LEFT_167(o, s, BOOST_PP_LIST_REVERSE_D(167, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_168(o, s, l) BOOST_PP_LIST_FOLD_LEFT_168(o, s, BOOST_PP_LIST_REVERSE_D(168, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_169(o, s, l) BOOST_PP_LIST_FOLD_LEFT_169(o, s, BOOST_PP_LIST_REVERSE_D(169, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_170(o, s, l) BOOST_PP_LIST_FOLD_LEFT_170(o, s, BOOST_PP_LIST_REVERSE_D(170, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_171(o, s, l) BOOST_PP_LIST_FOLD_LEFT_171(o, s, BOOST_PP_LIST_REVERSE_D(171, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_172(o, s, l) BOOST_PP_LIST_FOLD_LEFT_172(o, s, BOOST_PP_LIST_REVERSE_D(172, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_173(o, s, l) BOOST_PP_LIST_FOLD_LEFT_173(o, s, BOOST_PP_LIST_REVERSE_D(173, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_174(o, s, l) BOOST_PP_LIST_FOLD_LEFT_174(o, s, BOOST_PP_LIST_REVERSE_D(174, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_175(o, s, l) BOOST_PP_LIST_FOLD_LEFT_175(o, s, BOOST_PP_LIST_REVERSE_D(175, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_176(o, s, l) BOOST_PP_LIST_FOLD_LEFT_176(o, s, BOOST_PP_LIST_REVERSE_D(176, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_177(o, s, l) BOOST_PP_LIST_FOLD_LEFT_177(o, s, BOOST_PP_LIST_REVERSE_D(177, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_178(o, s, l) BOOST_PP_LIST_FOLD_LEFT_178(o, s, BOOST_PP_LIST_REVERSE_D(178, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_179(o, s, l) BOOST_PP_LIST_FOLD_LEFT_179(o, s, BOOST_PP_LIST_REVERSE_D(179, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_180(o, s, l) BOOST_PP_LIST_FOLD_LEFT_180(o, s, BOOST_PP_LIST_REVERSE_D(180, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_181(o, s, l) BOOST_PP_LIST_FOLD_LEFT_181(o, s, BOOST_PP_LIST_REVERSE_D(181, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_182(o, s, l) BOOST_PP_LIST_FOLD_LEFT_182(o, s, BOOST_PP_LIST_REVERSE_D(182, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_183(o, s, l) BOOST_PP_LIST_FOLD_LEFT_183(o, s, BOOST_PP_LIST_REVERSE_D(183, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_184(o, s, l) BOOST_PP_LIST_FOLD_LEFT_184(o, s, BOOST_PP_LIST_REVERSE_D(184, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_185(o, s, l) BOOST_PP_LIST_FOLD_LEFT_185(o, s, BOOST_PP_LIST_REVERSE_D(185, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_186(o, s, l) BOOST_PP_LIST_FOLD_LEFT_186(o, s, BOOST_PP_LIST_REVERSE_D(186, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_187(o, s, l) BOOST_PP_LIST_FOLD_LEFT_187(o, s, BOOST_PP_LIST_REVERSE_D(187, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_188(o, s, l) BOOST_PP_LIST_FOLD_LEFT_188(o, s, BOOST_PP_LIST_REVERSE_D(188, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_189(o, s, l) BOOST_PP_LIST_FOLD_LEFT_189(o, s, BOOST_PP_LIST_REVERSE_D(189, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_190(o, s, l) BOOST_PP_LIST_FOLD_LEFT_190(o, s, BOOST_PP_LIST_REVERSE_D(190, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_191(o, s, l) BOOST_PP_LIST_FOLD_LEFT_191(o, s, BOOST_PP_LIST_REVERSE_D(191, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_192(o, s, l) BOOST_PP_LIST_FOLD_LEFT_192(o, s, BOOST_PP_LIST_REVERSE_D(192, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_193(o, s, l) BOOST_PP_LIST_FOLD_LEFT_193(o, s, BOOST_PP_LIST_REVERSE_D(193, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_194(o, s, l) BOOST_PP_LIST_FOLD_LEFT_194(o, s, BOOST_PP_LIST_REVERSE_D(194, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_195(o, s, l) BOOST_PP_LIST_FOLD_LEFT_195(o, s, BOOST_PP_LIST_REVERSE_D(195, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_196(o, s, l) BOOST_PP_LIST_FOLD_LEFT_196(o, s, BOOST_PP_LIST_REVERSE_D(196, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_197(o, s, l) BOOST_PP_LIST_FOLD_LEFT_197(o, s, BOOST_PP_LIST_REVERSE_D(197, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_198(o, s, l) BOOST_PP_LIST_FOLD_LEFT_198(o, s, BOOST_PP_LIST_REVERSE_D(198, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_199(o, s, l) BOOST_PP_LIST_FOLD_LEFT_199(o, s, BOOST_PP_LIST_REVERSE_D(199, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_200(o, s, l) BOOST_PP_LIST_FOLD_LEFT_200(o, s, BOOST_PP_LIST_REVERSE_D(200, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_201(o, s, l) BOOST_PP_LIST_FOLD_LEFT_201(o, s, BOOST_PP_LIST_REVERSE_D(201, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_202(o, s, l) BOOST_PP_LIST_FOLD_LEFT_202(o, s, BOOST_PP_LIST_REVERSE_D(202, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_203(o, s, l) BOOST_PP_LIST_FOLD_LEFT_203(o, s, BOOST_PP_LIST_REVERSE_D(203, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_204(o, s, l) BOOST_PP_LIST_FOLD_LEFT_204(o, s, BOOST_PP_LIST_REVERSE_D(204, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_205(o, s, l) BOOST_PP_LIST_FOLD_LEFT_205(o, s, BOOST_PP_LIST_REVERSE_D(205, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_206(o, s, l) BOOST_PP_LIST_FOLD_LEFT_206(o, s, BOOST_PP_LIST_REVERSE_D(206, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_207(o, s, l) BOOST_PP_LIST_FOLD_LEFT_207(o, s, BOOST_PP_LIST_REVERSE_D(207, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_208(o, s, l) BOOST_PP_LIST_FOLD_LEFT_208(o, s, BOOST_PP_LIST_REVERSE_D(208, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_209(o, s, l) BOOST_PP_LIST_FOLD_LEFT_209(o, s, BOOST_PP_LIST_REVERSE_D(209, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_210(o, s, l) BOOST_PP_LIST_FOLD_LEFT_210(o, s, BOOST_PP_LIST_REVERSE_D(210, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_211(o, s, l) BOOST_PP_LIST_FOLD_LEFT_211(o, s, BOOST_PP_LIST_REVERSE_D(211, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_212(o, s, l) BOOST_PP_LIST_FOLD_LEFT_212(o, s, BOOST_PP_LIST_REVERSE_D(212, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_213(o, s, l) BOOST_PP_LIST_FOLD_LEFT_213(o, s, BOOST_PP_LIST_REVERSE_D(213, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_214(o, s, l) BOOST_PP_LIST_FOLD_LEFT_214(o, s, BOOST_PP_LIST_REVERSE_D(214, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_215(o, s, l) BOOST_PP_LIST_FOLD_LEFT_215(o, s, BOOST_PP_LIST_REVERSE_D(215, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_216(o, s, l) BOOST_PP_LIST_FOLD_LEFT_216(o, s, BOOST_PP_LIST_REVERSE_D(216, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_217(o, s, l) BOOST_PP_LIST_FOLD_LEFT_217(o, s, BOOST_PP_LIST_REVERSE_D(217, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_218(o, s, l) BOOST_PP_LIST_FOLD_LEFT_218(o, s, BOOST_PP_LIST_REVERSE_D(218, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_219(o, s, l) BOOST_PP_LIST_FOLD_LEFT_219(o, s, BOOST_PP_LIST_REVERSE_D(219, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_220(o, s, l) BOOST_PP_LIST_FOLD_LEFT_220(o, s, BOOST_PP_LIST_REVERSE_D(220, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_221(o, s, l) BOOST_PP_LIST_FOLD_LEFT_221(o, s, BOOST_PP_LIST_REVERSE_D(221, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_222(o, s, l) BOOST_PP_LIST_FOLD_LEFT_222(o, s, BOOST_PP_LIST_REVERSE_D(222, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_223(o, s, l) BOOST_PP_LIST_FOLD_LEFT_223(o, s, BOOST_PP_LIST_REVERSE_D(223, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_224(o, s, l) BOOST_PP_LIST_FOLD_LEFT_224(o, s, BOOST_PP_LIST_REVERSE_D(224, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_225(o, s, l) BOOST_PP_LIST_FOLD_LEFT_225(o, s, BOOST_PP_LIST_REVERSE_D(225, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_226(o, s, l) BOOST_PP_LIST_FOLD_LEFT_226(o, s, BOOST_PP_LIST_REVERSE_D(226, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_227(o, s, l) BOOST_PP_LIST_FOLD_LEFT_227(o, s, BOOST_PP_LIST_REVERSE_D(227, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_228(o, s, l) BOOST_PP_LIST_FOLD_LEFT_228(o, s, BOOST_PP_LIST_REVERSE_D(228, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_229(o, s, l) BOOST_PP_LIST_FOLD_LEFT_229(o, s, BOOST_PP_LIST_REVERSE_D(229, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_230(o, s, l) BOOST_PP_LIST_FOLD_LEFT_230(o, s, BOOST_PP_LIST_REVERSE_D(230, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_231(o, s, l) BOOST_PP_LIST_FOLD_LEFT_231(o, s, BOOST_PP_LIST_REVERSE_D(231, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_232(o, s, l) BOOST_PP_LIST_FOLD_LEFT_232(o, s, BOOST_PP_LIST_REVERSE_D(232, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_233(o, s, l) BOOST_PP_LIST_FOLD_LEFT_233(o, s, BOOST_PP_LIST_REVERSE_D(233, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_234(o, s, l) BOOST_PP_LIST_FOLD_LEFT_234(o, s, BOOST_PP_LIST_REVERSE_D(234, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_235(o, s, l) BOOST_PP_LIST_FOLD_LEFT_235(o, s, BOOST_PP_LIST_REVERSE_D(235, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_236(o, s, l) BOOST_PP_LIST_FOLD_LEFT_236(o, s, BOOST_PP_LIST_REVERSE_D(236, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_237(o, s, l) BOOST_PP_LIST_FOLD_LEFT_237(o, s, BOOST_PP_LIST_REVERSE_D(237, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_238(o, s, l) BOOST_PP_LIST_FOLD_LEFT_238(o, s, BOOST_PP_LIST_REVERSE_D(238, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_239(o, s, l) BOOST_PP_LIST_FOLD_LEFT_239(o, s, BOOST_PP_LIST_REVERSE_D(239, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_240(o, s, l) BOOST_PP_LIST_FOLD_LEFT_240(o, s, BOOST_PP_LIST_REVERSE_D(240, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_241(o, s, l) BOOST_PP_LIST_FOLD_LEFT_241(o, s, BOOST_PP_LIST_REVERSE_D(241, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_242(o, s, l) BOOST_PP_LIST_FOLD_LEFT_242(o, s, BOOST_PP_LIST_REVERSE_D(242, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_243(o, s, l) BOOST_PP_LIST_FOLD_LEFT_243(o, s, BOOST_PP_LIST_REVERSE_D(243, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_244(o, s, l) BOOST_PP_LIST_FOLD_LEFT_244(o, s, BOOST_PP_LIST_REVERSE_D(244, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_245(o, s, l) BOOST_PP_LIST_FOLD_LEFT_245(o, s, BOOST_PP_LIST_REVERSE_D(245, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_246(o, s, l) BOOST_PP_LIST_FOLD_LEFT_246(o, s, BOOST_PP_LIST_REVERSE_D(246, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_247(o, s, l) BOOST_PP_LIST_FOLD_LEFT_247(o, s, BOOST_PP_LIST_REVERSE_D(247, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_248(o, s, l) BOOST_PP_LIST_FOLD_LEFT_248(o, s, BOOST_PP_LIST_REVERSE_D(248, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_249(o, s, l) BOOST_PP_LIST_FOLD_LEFT_249(o, s, BOOST_PP_LIST_REVERSE_D(249, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_250(o, s, l) BOOST_PP_LIST_FOLD_LEFT_250(o, s, BOOST_PP_LIST_REVERSE_D(250, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_251(o, s, l) BOOST_PP_LIST_FOLD_LEFT_251(o, s, BOOST_PP_LIST_REVERSE_D(251, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_252(o, s, l) BOOST_PP_LIST_FOLD_LEFT_252(o, s, BOOST_PP_LIST_REVERSE_D(252, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_253(o, s, l) BOOST_PP_LIST_FOLD_LEFT_253(o, s, BOOST_PP_LIST_REVERSE_D(253, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_254(o, s, l) BOOST_PP_LIST_FOLD_LEFT_254(o, s, BOOST_PP_LIST_REVERSE_D(254, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_255(o, s, l) BOOST_PP_LIST_FOLD_LEFT_255(o, s, BOOST_PP_LIST_REVERSE_D(255, l))
+# define BOOST_PP_LIST_FOLD_RIGHT_256(o, s, l) BOOST_PP_LIST_FOLD_LEFT_256(o, s, BOOST_PP_LIST_REVERSE_D(256, l))
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/list/fold_left.hpp b/vendor/pdalboost/boost/preprocessor/list/fold_left.hpp
new file mode 100644
index 0000000..f235aec
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/list/fold_left.hpp
@@ -0,0 +1,303 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_FOLD_LEFT_HPP
+# define BOOST_PREPROCESSOR_LIST_FOLD_LEFT_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+#
+# /* BOOST_PP_LIST_FOLD_LEFT */
+#
+# if 0
+#    define BOOST_PP_LIST_FOLD_LEFT(op, state, list)
+# endif
+#
+# define BOOST_PP_LIST_FOLD_LEFT BOOST_PP_CAT(BOOST_PP_LIST_FOLD_LEFT_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))
+#
+# define BOOST_PP_LIST_FOLD_LEFT_257(o, s, l) BOOST_PP_ERROR(0x0004)
+#
+# define BOOST_PP_LIST_FOLD_LEFT_D(d, o, s, l) BOOST_PP_LIST_FOLD_LEFT_ ## d(o, s, l)
+# define BOOST_PP_LIST_FOLD_LEFT_2ND BOOST_PP_LIST_FOLD_LEFT
+# define BOOST_PP_LIST_FOLD_LEFT_2ND_D BOOST_PP_LIST_FOLD_LEFT_D
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    include <boost/preprocessor/list/detail/edg/fold_left.hpp>
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+#    include <boost/preprocessor/list/detail/dmc/fold_left.hpp>
+# else
+#    include <boost/preprocessor/list/detail/fold_left.hpp>
+# endif
+#
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_NIL 1
+#
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_1(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_2(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_3(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_4(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_5(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_6(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_7(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_8(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_9(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_10(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_11(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_12(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_13(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_14(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_15(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_16(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_17(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_18(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_19(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_20(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_21(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_22(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_23(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_24(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_25(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_26(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_27(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_28(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_29(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_30(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_31(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_32(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_33(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_34(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_35(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_36(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_37(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_38(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_39(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_40(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_41(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_42(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_43(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_44(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_45(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_46(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_47(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_48(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_49(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_50(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_51(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_52(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_53(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_54(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_55(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_56(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_57(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_58(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_59(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_60(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_61(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_62(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_63(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_64(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_65(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_66(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_67(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_68(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_69(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_70(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_71(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_72(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_73(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_74(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_75(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_76(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_77(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_78(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_79(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_80(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_81(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_82(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_83(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_84(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_85(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_86(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_87(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_88(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_89(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_90(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_91(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_92(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_93(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_94(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_95(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_96(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_97(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_98(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_99(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_100(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_101(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_102(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_103(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_104(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_105(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_106(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_107(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_108(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_109(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_110(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_111(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_112(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_113(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_114(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_115(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_116(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_117(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_118(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_119(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_120(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_121(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_122(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_123(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_124(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_125(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_126(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_127(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_128(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_129(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_130(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_131(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_132(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_133(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_134(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_135(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_136(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_137(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_138(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_139(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_140(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_141(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_142(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_143(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_144(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_145(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_146(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_147(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_148(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_149(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_150(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_151(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_152(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_153(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_154(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_155(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_156(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_157(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_158(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_159(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_160(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_161(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_162(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_163(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_164(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_165(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_166(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_167(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_168(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_169(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_170(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_171(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_172(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_173(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_174(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_175(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_176(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_177(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_178(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_179(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_180(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_181(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_182(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_183(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_184(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_185(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_186(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_187(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_188(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_189(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_190(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_191(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_192(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_193(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_194(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_195(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_196(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_197(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_198(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_199(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_200(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_201(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_202(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_203(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_204(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_205(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_206(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_207(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_208(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_209(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_210(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_211(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_212(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_213(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_214(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_215(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_216(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_217(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_218(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_219(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_220(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_221(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_222(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_223(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_224(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_225(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_226(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_227(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_228(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_229(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_230(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_231(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_232(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_233(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_234(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_235(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_236(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_237(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_238(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_239(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_240(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_241(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_242(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_243(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_244(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_245(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_246(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_247(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_248(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_249(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_250(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_251(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_252(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_253(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_254(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_255(o, s, l) 0
+# define BOOST_PP_LIST_FOLD_LEFT_CHECK_BOOST_PP_LIST_FOLD_LEFT_256(o, s, l) 0
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/list/fold_right.hpp b/vendor/pdalboost/boost/preprocessor/list/fold_right.hpp
new file mode 100644
index 0000000..ce18afe
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/list/fold_right.hpp
@@ -0,0 +1,40 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_FOLD_RIGHT_HPP
+# define BOOST_PREPROCESSOR_LIST_FOLD_RIGHT_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+#
+# if 0
+#    define BOOST_PP_LIST_FOLD_RIGHT(op, state, list)
+# endif
+#
+# define BOOST_PP_LIST_FOLD_RIGHT BOOST_PP_CAT(BOOST_PP_LIST_FOLD_RIGHT_, BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256))
+#
+# define BOOST_PP_LIST_FOLD_RIGHT_257(o, s, l) BOOST_PP_ERROR(0x0004)
+#
+# define BOOST_PP_LIST_FOLD_RIGHT_D(d, o, s, l) BOOST_PP_LIST_FOLD_RIGHT_ ## d(o, s, l)
+# define BOOST_PP_LIST_FOLD_RIGHT_2ND BOOST_PP_LIST_FOLD_RIGHT
+# define BOOST_PP_LIST_FOLD_RIGHT_2ND_D BOOST_PP_LIST_FOLD_RIGHT_D
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    include <boost/preprocessor/list/detail/edg/fold_right.hpp>
+# else
+#    include <boost/preprocessor/list/detail/fold_right.hpp>
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/list/for_each_i.hpp b/vendor/pdalboost/boost/preprocessor/list/for_each_i.hpp
new file mode 100644
index 0000000..8f02e2e
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/list/for_each_i.hpp
@@ -0,0 +1,65 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_LIST_FOR_EACH_I_HPP
+# define BOOST_PREPROCESSOR_LIST_LIST_FOR_EACH_I_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/list/adt.hpp>
+# include <boost/preprocessor/repetition/for.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_LIST_FOR_EACH_I */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() && ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#    define BOOST_PP_LIST_FOR_EACH_I(macro, data, list) BOOST_PP_FOR((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)
+# else
+#    define BOOST_PP_LIST_FOR_EACH_I(macro, data, list) BOOST_PP_LIST_FOR_EACH_I_I(macro, data, list)
+#    define BOOST_PP_LIST_FOR_EACH_I_I(macro, data, list) BOOST_PP_FOR((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+#    define BOOST_PP_LIST_FOR_EACH_I_P(r, x) BOOST_PP_LIST_FOR_EACH_I_P_D x
+#    define BOOST_PP_LIST_FOR_EACH_I_P_D(m, d, l, i) BOOST_PP_LIST_IS_CONS(l)
+# else
+#    define BOOST_PP_LIST_FOR_EACH_I_P(r, x) BOOST_PP_LIST_IS_CONS(BOOST_PP_TUPLE_ELEM(4, 2, x))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_LIST_FOR_EACH_I_O(r, x) BOOST_PP_LIST_FOR_EACH_I_O_D x
+#    define BOOST_PP_LIST_FOR_EACH_I_O_D(m, d, l, i) (m, d, BOOST_PP_LIST_REST(l), BOOST_PP_INC(i))
+# else
+#    define BOOST_PP_LIST_FOR_EACH_I_O(r, x) (BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_LIST_REST(BOOST_PP_TUPLE_ELEM(4, 2, x)), BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(4, 3, x)))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_LIST_FOR_EACH_I_M(r, x) BOOST_PP_LIST_FOR_EACH_I_M_D(r, BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_TUPLE_ELEM(4, 2, x), BOOST_PP_TUPLE_ELEM(4, 3, x))
+# else
+#    define BOOST_PP_LIST_FOR_EACH_I_M(r, x) BOOST_PP_LIST_FOR_EACH_I_M_I(r, BOOST_PP_TUPLE_REM_4 x)
+#    define BOOST_PP_LIST_FOR_EACH_I_M_I(r, x_e) BOOST_PP_LIST_FOR_EACH_I_M_D(r, x_e)
+# endif
+#
+# define BOOST_PP_LIST_FOR_EACH_I_M_D(r, m, d, l, i) m(r, d, i, BOOST_PP_LIST_FIRST(l))
+#
+# /* BOOST_PP_LIST_FOR_EACH_I_R */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_LIST_FOR_EACH_I_R(r, macro, data, list) BOOST_PP_FOR_ ## r((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)
+# else
+#    define BOOST_PP_LIST_FOR_EACH_I_R(r, macro, data, list) BOOST_PP_LIST_FOR_EACH_I_R_I(r, macro, data, list)
+#    define BOOST_PP_LIST_FOR_EACH_I_R_I(r, macro, data, list) BOOST_PP_FOR_ ## r((macro, data, list, 0), BOOST_PP_LIST_FOR_EACH_I_P, BOOST_PP_LIST_FOR_EACH_I_O, BOOST_PP_LIST_FOR_EACH_I_M)
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/list/reverse.hpp b/vendor/pdalboost/boost/preprocessor/list/reverse.hpp
new file mode 100644
index 0000000..651da05
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/list/reverse.hpp
@@ -0,0 +1,40 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LIST_REVERSE_HPP
+# define BOOST_PREPROCESSOR_LIST_REVERSE_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/list/fold_left.hpp>
+#
+# /* BOOST_PP_LIST_REVERSE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_LIST_REVERSE(list) BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)
+# else
+#    define BOOST_PP_LIST_REVERSE(list) BOOST_PP_LIST_REVERSE_I(list)
+#    define BOOST_PP_LIST_REVERSE_I(list) BOOST_PP_LIST_FOLD_LEFT(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)
+# endif
+#
+# define BOOST_PP_LIST_REVERSE_O(d, s, x) (x, s)
+#
+# /* BOOST_PP_LIST_REVERSE_D */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_LIST_REVERSE_D(d, list) BOOST_PP_LIST_FOLD_LEFT_ ## d(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)
+# else
+#    define BOOST_PP_LIST_REVERSE_D(d, list) BOOST_PP_LIST_REVERSE_D_I(d, list)
+#    define BOOST_PP_LIST_REVERSE_D_I(d, list) BOOST_PP_LIST_FOLD_LEFT_ ## d(BOOST_PP_LIST_REVERSE_O, BOOST_PP_NIL, list)
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/logical/and.hpp b/vendor/pdalboost/boost/preprocessor/logical/and.hpp
new file mode 100644
index 0000000..8590365
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/logical/and.hpp
@@ -0,0 +1,30 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_AND_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_AND_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/logical/bitand.hpp>
+#
+# /* BOOST_PP_AND */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_AND(p, q) BOOST_PP_BITAND(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))
+# else
+#    define BOOST_PP_AND(p, q) BOOST_PP_AND_I(p, q)
+#    define BOOST_PP_AND_I(p, q) BOOST_PP_BITAND(BOOST_PP_BOOL(p), BOOST_PP_BOOL(q))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/logical/bitand.hpp b/vendor/pdalboost/boost/preprocessor/logical/bitand.hpp
new file mode 100644
index 0000000..74e9527
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/logical/bitand.hpp
@@ -0,0 +1,38 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_BITAND_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_BITAND_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_BITAND */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_BITAND(x, y) BOOST_PP_BITAND_I(x, y)
+# else
+#    define BOOST_PP_BITAND(x, y) BOOST_PP_BITAND_OO((x, y))
+#    define BOOST_PP_BITAND_OO(par) BOOST_PP_BITAND_I ## par
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#    define BOOST_PP_BITAND_I(x, y) BOOST_PP_BITAND_ ## x ## y
+# else
+#    define BOOST_PP_BITAND_I(x, y) BOOST_PP_BITAND_ID(BOOST_PP_BITAND_ ## x ## y)
+#    define BOOST_PP_BITAND_ID(res) res
+# endif
+#
+# define BOOST_PP_BITAND_00 0
+# define BOOST_PP_BITAND_01 0
+# define BOOST_PP_BITAND_10 0
+# define BOOST_PP_BITAND_11 1
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/logical/bool.hpp b/vendor/pdalboost/boost/preprocessor/logical/bool.hpp
new file mode 100644
index 0000000..fc01b5b
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/logical/bool.hpp
@@ -0,0 +1,288 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_BOOL */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_BOOL(x) BOOST_PP_BOOL_I(x)
+# else
+#    define BOOST_PP_BOOL(x) BOOST_PP_BOOL_OO((x))
+#    define BOOST_PP_BOOL_OO(par) BOOST_PP_BOOL_I ## par
+# endif
+#
+# define BOOST_PP_BOOL_I(x) BOOST_PP_BOOL_ ## x
+#
+# define BOOST_PP_BOOL_0 0
+# define BOOST_PP_BOOL_1 1
+# define BOOST_PP_BOOL_2 1
+# define BOOST_PP_BOOL_3 1
+# define BOOST_PP_BOOL_4 1
+# define BOOST_PP_BOOL_5 1
+# define BOOST_PP_BOOL_6 1
+# define BOOST_PP_BOOL_7 1
+# define BOOST_PP_BOOL_8 1
+# define BOOST_PP_BOOL_9 1
+# define BOOST_PP_BOOL_10 1
+# define BOOST_PP_BOOL_11 1
+# define BOOST_PP_BOOL_12 1
+# define BOOST_PP_BOOL_13 1
+# define BOOST_PP_BOOL_14 1
+# define BOOST_PP_BOOL_15 1
+# define BOOST_PP_BOOL_16 1
+# define BOOST_PP_BOOL_17 1
+# define BOOST_PP_BOOL_18 1
+# define BOOST_PP_BOOL_19 1
+# define BOOST_PP_BOOL_20 1
+# define BOOST_PP_BOOL_21 1
+# define BOOST_PP_BOOL_22 1
+# define BOOST_PP_BOOL_23 1
+# define BOOST_PP_BOOL_24 1
+# define BOOST_PP_BOOL_25 1
+# define BOOST_PP_BOOL_26 1
+# define BOOST_PP_BOOL_27 1
+# define BOOST_PP_BOOL_28 1
+# define BOOST_PP_BOOL_29 1
+# define BOOST_PP_BOOL_30 1
+# define BOOST_PP_BOOL_31 1
+# define BOOST_PP_BOOL_32 1
+# define BOOST_PP_BOOL_33 1
+# define BOOST_PP_BOOL_34 1
+# define BOOST_PP_BOOL_35 1
+# define BOOST_PP_BOOL_36 1
+# define BOOST_PP_BOOL_37 1
+# define BOOST_PP_BOOL_38 1
+# define BOOST_PP_BOOL_39 1
+# define BOOST_PP_BOOL_40 1
+# define BOOST_PP_BOOL_41 1
+# define BOOST_PP_BOOL_42 1
+# define BOOST_PP_BOOL_43 1
+# define BOOST_PP_BOOL_44 1
+# define BOOST_PP_BOOL_45 1
+# define BOOST_PP_BOOL_46 1
+# define BOOST_PP_BOOL_47 1
+# define BOOST_PP_BOOL_48 1
+# define BOOST_PP_BOOL_49 1
+# define BOOST_PP_BOOL_50 1
+# define BOOST_PP_BOOL_51 1
+# define BOOST_PP_BOOL_52 1
+# define BOOST_PP_BOOL_53 1
+# define BOOST_PP_BOOL_54 1
+# define BOOST_PP_BOOL_55 1
+# define BOOST_PP_BOOL_56 1
+# define BOOST_PP_BOOL_57 1
+# define BOOST_PP_BOOL_58 1
+# define BOOST_PP_BOOL_59 1
+# define BOOST_PP_BOOL_60 1
+# define BOOST_PP_BOOL_61 1
+# define BOOST_PP_BOOL_62 1
+# define BOOST_PP_BOOL_63 1
+# define BOOST_PP_BOOL_64 1
+# define BOOST_PP_BOOL_65 1
+# define BOOST_PP_BOOL_66 1
+# define BOOST_PP_BOOL_67 1
+# define BOOST_PP_BOOL_68 1
+# define BOOST_PP_BOOL_69 1
+# define BOOST_PP_BOOL_70 1
+# define BOOST_PP_BOOL_71 1
+# define BOOST_PP_BOOL_72 1
+# define BOOST_PP_BOOL_73 1
+# define BOOST_PP_BOOL_74 1
+# define BOOST_PP_BOOL_75 1
+# define BOOST_PP_BOOL_76 1
+# define BOOST_PP_BOOL_77 1
+# define BOOST_PP_BOOL_78 1
+# define BOOST_PP_BOOL_79 1
+# define BOOST_PP_BOOL_80 1
+# define BOOST_PP_BOOL_81 1
+# define BOOST_PP_BOOL_82 1
+# define BOOST_PP_BOOL_83 1
+# define BOOST_PP_BOOL_84 1
+# define BOOST_PP_BOOL_85 1
+# define BOOST_PP_BOOL_86 1
+# define BOOST_PP_BOOL_87 1
+# define BOOST_PP_BOOL_88 1
+# define BOOST_PP_BOOL_89 1
+# define BOOST_PP_BOOL_90 1
+# define BOOST_PP_BOOL_91 1
+# define BOOST_PP_BOOL_92 1
+# define BOOST_PP_BOOL_93 1
+# define BOOST_PP_BOOL_94 1
+# define BOOST_PP_BOOL_95 1
+# define BOOST_PP_BOOL_96 1
+# define BOOST_PP_BOOL_97 1
+# define BOOST_PP_BOOL_98 1
+# define BOOST_PP_BOOL_99 1
+# define BOOST_PP_BOOL_100 1
+# define BOOST_PP_BOOL_101 1
+# define BOOST_PP_BOOL_102 1
+# define BOOST_PP_BOOL_103 1
+# define BOOST_PP_BOOL_104 1
+# define BOOST_PP_BOOL_105 1
+# define BOOST_PP_BOOL_106 1
+# define BOOST_PP_BOOL_107 1
+# define BOOST_PP_BOOL_108 1
+# define BOOST_PP_BOOL_109 1
+# define BOOST_PP_BOOL_110 1
+# define BOOST_PP_BOOL_111 1
+# define BOOST_PP_BOOL_112 1
+# define BOOST_PP_BOOL_113 1
+# define BOOST_PP_BOOL_114 1
+# define BOOST_PP_BOOL_115 1
+# define BOOST_PP_BOOL_116 1
+# define BOOST_PP_BOOL_117 1
+# define BOOST_PP_BOOL_118 1
+# define BOOST_PP_BOOL_119 1
+# define BOOST_PP_BOOL_120 1
+# define BOOST_PP_BOOL_121 1
+# define BOOST_PP_BOOL_122 1
+# define BOOST_PP_BOOL_123 1
+# define BOOST_PP_BOOL_124 1
+# define BOOST_PP_BOOL_125 1
+# define BOOST_PP_BOOL_126 1
+# define BOOST_PP_BOOL_127 1
+# define BOOST_PP_BOOL_128 1
+# define BOOST_PP_BOOL_129 1
+# define BOOST_PP_BOOL_130 1
+# define BOOST_PP_BOOL_131 1
+# define BOOST_PP_BOOL_132 1
+# define BOOST_PP_BOOL_133 1
+# define BOOST_PP_BOOL_134 1
+# define BOOST_PP_BOOL_135 1
+# define BOOST_PP_BOOL_136 1
+# define BOOST_PP_BOOL_137 1
+# define BOOST_PP_BOOL_138 1
+# define BOOST_PP_BOOL_139 1
+# define BOOST_PP_BOOL_140 1
+# define BOOST_PP_BOOL_141 1
+# define BOOST_PP_BOOL_142 1
+# define BOOST_PP_BOOL_143 1
+# define BOOST_PP_BOOL_144 1
+# define BOOST_PP_BOOL_145 1
+# define BOOST_PP_BOOL_146 1
+# define BOOST_PP_BOOL_147 1
+# define BOOST_PP_BOOL_148 1
+# define BOOST_PP_BOOL_149 1
+# define BOOST_PP_BOOL_150 1
+# define BOOST_PP_BOOL_151 1
+# define BOOST_PP_BOOL_152 1
+# define BOOST_PP_BOOL_153 1
+# define BOOST_PP_BOOL_154 1
+# define BOOST_PP_BOOL_155 1
+# define BOOST_PP_BOOL_156 1
+# define BOOST_PP_BOOL_157 1
+# define BOOST_PP_BOOL_158 1
+# define BOOST_PP_BOOL_159 1
+# define BOOST_PP_BOOL_160 1
+# define BOOST_PP_BOOL_161 1
+# define BOOST_PP_BOOL_162 1
+# define BOOST_PP_BOOL_163 1
+# define BOOST_PP_BOOL_164 1
+# define BOOST_PP_BOOL_165 1
+# define BOOST_PP_BOOL_166 1
+# define BOOST_PP_BOOL_167 1
+# define BOOST_PP_BOOL_168 1
+# define BOOST_PP_BOOL_169 1
+# define BOOST_PP_BOOL_170 1
+# define BOOST_PP_BOOL_171 1
+# define BOOST_PP_BOOL_172 1
+# define BOOST_PP_BOOL_173 1
+# define BOOST_PP_BOOL_174 1
+# define BOOST_PP_BOOL_175 1
+# define BOOST_PP_BOOL_176 1
+# define BOOST_PP_BOOL_177 1
+# define BOOST_PP_BOOL_178 1
+# define BOOST_PP_BOOL_179 1
+# define BOOST_PP_BOOL_180 1
+# define BOOST_PP_BOOL_181 1
+# define BOOST_PP_BOOL_182 1
+# define BOOST_PP_BOOL_183 1
+# define BOOST_PP_BOOL_184 1
+# define BOOST_PP_BOOL_185 1
+# define BOOST_PP_BOOL_186 1
+# define BOOST_PP_BOOL_187 1
+# define BOOST_PP_BOOL_188 1
+# define BOOST_PP_BOOL_189 1
+# define BOOST_PP_BOOL_190 1
+# define BOOST_PP_BOOL_191 1
+# define BOOST_PP_BOOL_192 1
+# define BOOST_PP_BOOL_193 1
+# define BOOST_PP_BOOL_194 1
+# define BOOST_PP_BOOL_195 1
+# define BOOST_PP_BOOL_196 1
+# define BOOST_PP_BOOL_197 1
+# define BOOST_PP_BOOL_198 1
+# define BOOST_PP_BOOL_199 1
+# define BOOST_PP_BOOL_200 1
+# define BOOST_PP_BOOL_201 1
+# define BOOST_PP_BOOL_202 1
+# define BOOST_PP_BOOL_203 1
+# define BOOST_PP_BOOL_204 1
+# define BOOST_PP_BOOL_205 1
+# define BOOST_PP_BOOL_206 1
+# define BOOST_PP_BOOL_207 1
+# define BOOST_PP_BOOL_208 1
+# define BOOST_PP_BOOL_209 1
+# define BOOST_PP_BOOL_210 1
+# define BOOST_PP_BOOL_211 1
+# define BOOST_PP_BOOL_212 1
+# define BOOST_PP_BOOL_213 1
+# define BOOST_PP_BOOL_214 1
+# define BOOST_PP_BOOL_215 1
+# define BOOST_PP_BOOL_216 1
+# define BOOST_PP_BOOL_217 1
+# define BOOST_PP_BOOL_218 1
+# define BOOST_PP_BOOL_219 1
+# define BOOST_PP_BOOL_220 1
+# define BOOST_PP_BOOL_221 1
+# define BOOST_PP_BOOL_222 1
+# define BOOST_PP_BOOL_223 1
+# define BOOST_PP_BOOL_224 1
+# define BOOST_PP_BOOL_225 1
+# define BOOST_PP_BOOL_226 1
+# define BOOST_PP_BOOL_227 1
+# define BOOST_PP_BOOL_228 1
+# define BOOST_PP_BOOL_229 1
+# define BOOST_PP_BOOL_230 1
+# define BOOST_PP_BOOL_231 1
+# define BOOST_PP_BOOL_232 1
+# define BOOST_PP_BOOL_233 1
+# define BOOST_PP_BOOL_234 1
+# define BOOST_PP_BOOL_235 1
+# define BOOST_PP_BOOL_236 1
+# define BOOST_PP_BOOL_237 1
+# define BOOST_PP_BOOL_238 1
+# define BOOST_PP_BOOL_239 1
+# define BOOST_PP_BOOL_240 1
+# define BOOST_PP_BOOL_241 1
+# define BOOST_PP_BOOL_242 1
+# define BOOST_PP_BOOL_243 1
+# define BOOST_PP_BOOL_244 1
+# define BOOST_PP_BOOL_245 1
+# define BOOST_PP_BOOL_246 1
+# define BOOST_PP_BOOL_247 1
+# define BOOST_PP_BOOL_248 1
+# define BOOST_PP_BOOL_249 1
+# define BOOST_PP_BOOL_250 1
+# define BOOST_PP_BOOL_251 1
+# define BOOST_PP_BOOL_252 1
+# define BOOST_PP_BOOL_253 1
+# define BOOST_PP_BOOL_254 1
+# define BOOST_PP_BOOL_255 1
+# define BOOST_PP_BOOL_256 1
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/logical/compl.hpp b/vendor/pdalboost/boost/preprocessor/logical/compl.hpp
new file mode 100644
index 0000000..ad4c7a4
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/logical/compl.hpp
@@ -0,0 +1,36 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_COMPL_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_COMPL_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_COMPL */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_COMPL(x) BOOST_PP_COMPL_I(x)
+# else
+#    define BOOST_PP_COMPL(x) BOOST_PP_COMPL_OO((x))
+#    define BOOST_PP_COMPL_OO(par) BOOST_PP_COMPL_I ## par
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#    define BOOST_PP_COMPL_I(x) BOOST_PP_COMPL_ ## x
+# else
+#    define BOOST_PP_COMPL_I(x) BOOST_PP_COMPL_ID(BOOST_PP_COMPL_ ## x)
+#    define BOOST_PP_COMPL_ID(id) id
+# endif
+#
+# define BOOST_PP_COMPL_0 1
+# define BOOST_PP_COMPL_1 0
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/logical/not.hpp b/vendor/pdalboost/boost/preprocessor/logical/not.hpp
new file mode 100644
index 0000000..b509d3f
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/logical/not.hpp
@@ -0,0 +1,30 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_LOGICAL_NOT_HPP
+# define BOOST_PREPROCESSOR_LOGICAL_NOT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/logical/compl.hpp>
+#
+# /* BOOST_PP_NOT */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_NOT(x) BOOST_PP_COMPL(BOOST_PP_BOOL(x))
+# else
+#    define BOOST_PP_NOT(x) BOOST_PP_NOT_I(x)
+#    define BOOST_PP_NOT_I(x) BOOST_PP_COMPL(BOOST_PP_BOOL(x))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/punctuation/comma.hpp b/vendor/pdalboost/boost/preprocessor/punctuation/comma.hpp
new file mode 100644
index 0000000..38c2e0e
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/punctuation/comma.hpp
@@ -0,0 +1,21 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_PUNCTUATION_COMMA_HPP
+# define BOOST_PREPROCESSOR_PUNCTUATION_COMMA_HPP
+#
+# /* BOOST_PP_COMMA */
+#
+# define BOOST_PP_COMMA() ,
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/punctuation/comma_if.hpp b/vendor/pdalboost/boost/preprocessor/punctuation/comma_if.hpp
new file mode 100644
index 0000000..c711f36
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/punctuation/comma_if.hpp
@@ -0,0 +1,31 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_PUNCTUATION_COMMA_IF_HPP
+# define BOOST_PREPROCESSOR_PUNCTUATION_COMMA_IF_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/facilities/empty.hpp>
+# include <boost/preprocessor/punctuation/comma.hpp>
+#
+# /* BOOST_PP_COMMA_IF */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_COMMA_IF(cond) BOOST_PP_IF(cond, BOOST_PP_COMMA, BOOST_PP_EMPTY)()
+# else
+#    define BOOST_PP_COMMA_IF(cond) BOOST_PP_COMMA_IF_I(cond)
+#    define BOOST_PP_COMMA_IF_I(cond) BOOST_PP_IF(cond, BOOST_PP_COMMA, BOOST_PP_EMPTY)()
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/punctuation/detail/is_begin_parens.hpp b/vendor/pdalboost/boost/preprocessor/punctuation/detail/is_begin_parens.hpp
new file mode 100644
index 0000000..c94ccf3
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/punctuation/detail/is_begin_parens.hpp
@@ -0,0 +1,48 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Edward Diener 2014.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+#ifndef BOOST_PREPROCESSOR_DETAIL_IS_BEGIN_PARENS_HPP
+#define BOOST_PREPROCESSOR_DETAIL_IS_BEGIN_PARENS_HPP
+
+#if BOOST_PP_VARIADICS_MSVC
+
+#include <boost/preprocessor/facilities/empty.hpp>
+
+#define BOOST_PP_DETAIL_VD_IBP_CAT(a, b) BOOST_PP_DETAIL_VD_IBP_CAT_I(a, b)
+#define BOOST_PP_DETAIL_VD_IBP_CAT_I(a, b) BOOST_PP_DETAIL_VD_IBP_CAT_II(a ## b)
+#define BOOST_PP_DETAIL_VD_IBP_CAT_II(res) res
+
+#define BOOST_PP_DETAIL_IBP_SPLIT(i, ...) \
+    BOOST_PP_DETAIL_VD_IBP_CAT(BOOST_PP_DETAIL_IBP_PRIMITIVE_CAT(BOOST_PP_DETAIL_IBP_SPLIT_,i)(__VA_ARGS__),BOOST_PP_EMPTY()) \
+/**/
+
+#define BOOST_PP_DETAIL_IBP_IS_VARIADIC_C(...) 1 1
+
+#else
+
+#define BOOST_PP_DETAIL_IBP_SPLIT(i, ...) \
+    BOOST_PP_DETAIL_IBP_PRIMITIVE_CAT(BOOST_PP_DETAIL_IBP_SPLIT_,i)(__VA_ARGS__) \
+/**/
+
+#define BOOST_PP_DETAIL_IBP_IS_VARIADIC_C(...) 1
+
+#endif /* BOOST_PP_VARIADICS_MSVC */
+
+#define BOOST_PP_DETAIL_IBP_SPLIT_0(a, ...) a
+#define BOOST_PP_DETAIL_IBP_SPLIT_1(a, ...) __VA_ARGS__
+
+#define BOOST_PP_DETAIL_IBP_CAT(a, ...) BOOST_PP_DETAIL_IBP_PRIMITIVE_CAT(a,__VA_ARGS__)
+#define BOOST_PP_DETAIL_IBP_PRIMITIVE_CAT(a, ...) a ## __VA_ARGS__
+
+#define BOOST_PP_DETAIL_IBP_IS_VARIADIC_R_1 1,
+#define BOOST_PP_DETAIL_IBP_IS_VARIADIC_R_BOOST_PP_DETAIL_IBP_IS_VARIADIC_C 0,
+
+#endif /* BOOST_PREPROCESSOR_DETAIL_IS_BEGIN_PARENS_HPP */
diff --git a/vendor/pdalboost/boost/preprocessor/punctuation/is_begin_parens.hpp b/vendor/pdalboost/boost/preprocessor/punctuation/is_begin_parens.hpp
new file mode 100644
index 0000000..20b32bc
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/punctuation/is_begin_parens.hpp
@@ -0,0 +1,51 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Edward Diener 2014.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_IS_BEGIN_PARENS_HPP
+# define BOOST_PREPROCESSOR_IS_BEGIN_PARENS_HPP
+
+# include <boost/preprocessor/config/config.hpp>
+
+#if BOOST_PP_VARIADICS
+
+#include <boost/preprocessor/punctuation/detail/is_begin_parens.hpp>
+
+#if BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400
+
+#define BOOST_PP_IS_BEGIN_PARENS(param) \
+    BOOST_PP_DETAIL_IBP_SPLIT \
+      ( \
+      0, \
+      BOOST_PP_DETAIL_IBP_CAT \
+        ( \
+        BOOST_PP_DETAIL_IBP_IS_VARIADIC_R_, \
+        BOOST_PP_DETAIL_IBP_IS_VARIADIC_C param \
+        ) \
+      ) \
+/**/
+
+#else
+
+#define BOOST_PP_IS_BEGIN_PARENS(...) \
+    BOOST_PP_DETAIL_IBP_SPLIT \
+      ( \
+      0, \
+      BOOST_PP_DETAIL_IBP_CAT \
+        ( \
+        BOOST_PP_DETAIL_IBP_IS_VARIADIC_R_, \
+        BOOST_PP_DETAIL_IBP_IS_VARIADIC_C __VA_ARGS__ \
+        ) \
+      ) \
+/**/
+
+#endif /* BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400 */
+#endif /* BOOST_PP_VARIADICS */
+#endif /* BOOST_PREPROCESSOR_IS_BEGIN_PARENS_HPP */
diff --git a/vendor/pdalboost/boost/preprocessor/repeat.hpp b/vendor/pdalboost/boost/preprocessor/repeat.hpp
new file mode 100644
index 0000000..7c47ee8
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repeat.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPEAT_HPP
+# define BOOST_PREPROCESSOR_REPEAT_HPP
+#
+# include <boost/preprocessor/repetition/repeat.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/repeat_from_to.hpp b/vendor/pdalboost/boost/preprocessor/repeat_from_to.hpp
new file mode 100644
index 0000000..4ddc3be
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repeat_from_to.hpp
@@ -0,0 +1,17 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPEAT_FROM_TO_HPP
+# define BOOST_PREPROCESSOR_REPEAT_FROM_TO_HPP
+#
+# include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/repetition/detail/dmc/for.hpp b/vendor/pdalboost/boost/preprocessor/repetition/detail/dmc/for.hpp
new file mode 100644
index 0000000..1d907ff
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repetition/detail/dmc/for.hpp
@@ -0,0 +1,536 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP
+# define BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP
+#
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_FOR_1_C(BOOST_PP_BOOL(p##(2, s)), s, p, o, m)
+# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_FOR_2_C(BOOST_PP_BOOL(p##(3, s)), s, p, o, m)
+# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_FOR_3_C(BOOST_PP_BOOL(p##(4, s)), s, p, o, m)
+# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_FOR_4_C(BOOST_PP_BOOL(p##(5, s)), s, p, o, m)
+# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_FOR_5_C(BOOST_PP_BOOL(p##(6, s)), s, p, o, m)
+# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_FOR_6_C(BOOST_PP_BOOL(p##(7, s)), s, p, o, m)
+# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_FOR_7_C(BOOST_PP_BOOL(p##(8, s)), s, p, o, m)
+# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_FOR_8_C(BOOST_PP_BOOL(p##(9, s)), s, p, o, m)
+# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_FOR_9_C(BOOST_PP_BOOL(p##(10, s)), s, p, o, m)
+# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_FOR_10_C(BOOST_PP_BOOL(p##(11, s)), s, p, o, m)
+# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_FOR_11_C(BOOST_PP_BOOL(p##(12, s)), s, p, o, m)
+# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_FOR_12_C(BOOST_PP_BOOL(p##(13, s)), s, p, o, m)
+# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_FOR_13_C(BOOST_PP_BOOL(p##(14, s)), s, p, o, m)
+# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_FOR_14_C(BOOST_PP_BOOL(p##(15, s)), s, p, o, m)
+# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_FOR_15_C(BOOST_PP_BOOL(p##(16, s)), s, p, o, m)
+# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_FOR_16_C(BOOST_PP_BOOL(p##(17, s)), s, p, o, m)
+# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_FOR_17_C(BOOST_PP_BOOL(p##(18, s)), s, p, o, m)
+# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_FOR_18_C(BOOST_PP_BOOL(p##(19, s)), s, p, o, m)
+# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_FOR_19_C(BOOST_PP_BOOL(p##(20, s)), s, p, o, m)
+# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_FOR_20_C(BOOST_PP_BOOL(p##(21, s)), s, p, o, m)
+# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_FOR_21_C(BOOST_PP_BOOL(p##(22, s)), s, p, o, m)
+# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_FOR_22_C(BOOST_PP_BOOL(p##(23, s)), s, p, o, m)
+# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_FOR_23_C(BOOST_PP_BOOL(p##(24, s)), s, p, o, m)
+# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_FOR_24_C(BOOST_PP_BOOL(p##(25, s)), s, p, o, m)
+# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_FOR_25_C(BOOST_PP_BOOL(p##(26, s)), s, p, o, m)
+# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_FOR_26_C(BOOST_PP_BOOL(p##(27, s)), s, p, o, m)
+# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_FOR_27_C(BOOST_PP_BOOL(p##(28, s)), s, p, o, m)
+# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_FOR_28_C(BOOST_PP_BOOL(p##(29, s)), s, p, o, m)
+# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_FOR_29_C(BOOST_PP_BOOL(p##(30, s)), s, p, o, m)
+# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_FOR_30_C(BOOST_PP_BOOL(p##(31, s)), s, p, o, m)
+# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_FOR_31_C(BOOST_PP_BOOL(p##(32, s)), s, p, o, m)
+# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_FOR_32_C(BOOST_PP_BOOL(p##(33, s)), s, p, o, m)
+# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_FOR_33_C(BOOST_PP_BOOL(p##(34, s)), s, p, o, m)
+# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_FOR_34_C(BOOST_PP_BOOL(p##(35, s)), s, p, o, m)
+# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_FOR_35_C(BOOST_PP_BOOL(p##(36, s)), s, p, o, m)
+# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_FOR_36_C(BOOST_PP_BOOL(p##(37, s)), s, p, o, m)
+# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_FOR_37_C(BOOST_PP_BOOL(p##(38, s)), s, p, o, m)
+# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_FOR_38_C(BOOST_PP_BOOL(p##(39, s)), s, p, o, m)
+# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_FOR_39_C(BOOST_PP_BOOL(p##(40, s)), s, p, o, m)
+# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_FOR_40_C(BOOST_PP_BOOL(p##(41, s)), s, p, o, m)
+# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_FOR_41_C(BOOST_PP_BOOL(p##(42, s)), s, p, o, m)
+# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_FOR_42_C(BOOST_PP_BOOL(p##(43, s)), s, p, o, m)
+# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_FOR_43_C(BOOST_PP_BOOL(p##(44, s)), s, p, o, m)
+# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_FOR_44_C(BOOST_PP_BOOL(p##(45, s)), s, p, o, m)
+# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_FOR_45_C(BOOST_PP_BOOL(p##(46, s)), s, p, o, m)
+# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_FOR_46_C(BOOST_PP_BOOL(p##(47, s)), s, p, o, m)
+# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_FOR_47_C(BOOST_PP_BOOL(p##(48, s)), s, p, o, m)
+# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_FOR_48_C(BOOST_PP_BOOL(p##(49, s)), s, p, o, m)
+# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_FOR_49_C(BOOST_PP_BOOL(p##(50, s)), s, p, o, m)
+# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_FOR_50_C(BOOST_PP_BOOL(p##(51, s)), s, p, o, m)
+# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_FOR_51_C(BOOST_PP_BOOL(p##(52, s)), s, p, o, m)
+# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_FOR_52_C(BOOST_PP_BOOL(p##(53, s)), s, p, o, m)
+# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_FOR_53_C(BOOST_PP_BOOL(p##(54, s)), s, p, o, m)
+# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_FOR_54_C(BOOST_PP_BOOL(p##(55, s)), s, p, o, m)
+# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_FOR_55_C(BOOST_PP_BOOL(p##(56, s)), s, p, o, m)
+# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_FOR_56_C(BOOST_PP_BOOL(p##(57, s)), s, p, o, m)
+# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_FOR_57_C(BOOST_PP_BOOL(p##(58, s)), s, p, o, m)
+# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_FOR_58_C(BOOST_PP_BOOL(p##(59, s)), s, p, o, m)
+# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_FOR_59_C(BOOST_PP_BOOL(p##(60, s)), s, p, o, m)
+# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_FOR_60_C(BOOST_PP_BOOL(p##(61, s)), s, p, o, m)
+# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_FOR_61_C(BOOST_PP_BOOL(p##(62, s)), s, p, o, m)
+# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_FOR_62_C(BOOST_PP_BOOL(p##(63, s)), s, p, o, m)
+# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_FOR_63_C(BOOST_PP_BOOL(p##(64, s)), s, p, o, m)
+# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_FOR_64_C(BOOST_PP_BOOL(p##(65, s)), s, p, o, m)
+# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_FOR_65_C(BOOST_PP_BOOL(p##(66, s)), s, p, o, m)
+# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_FOR_66_C(BOOST_PP_BOOL(p##(67, s)), s, p, o, m)
+# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_FOR_67_C(BOOST_PP_BOOL(p##(68, s)), s, p, o, m)
+# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_FOR_68_C(BOOST_PP_BOOL(p##(69, s)), s, p, o, m)
+# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_FOR_69_C(BOOST_PP_BOOL(p##(70, s)), s, p, o, m)
+# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_FOR_70_C(BOOST_PP_BOOL(p##(71, s)), s, p, o, m)
+# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_FOR_71_C(BOOST_PP_BOOL(p##(72, s)), s, p, o, m)
+# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_FOR_72_C(BOOST_PP_BOOL(p##(73, s)), s, p, o, m)
+# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_FOR_73_C(BOOST_PP_BOOL(p##(74, s)), s, p, o, m)
+# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_FOR_74_C(BOOST_PP_BOOL(p##(75, s)), s, p, o, m)
+# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_FOR_75_C(BOOST_PP_BOOL(p##(76, s)), s, p, o, m)
+# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_FOR_76_C(BOOST_PP_BOOL(p##(77, s)), s, p, o, m)
+# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_FOR_77_C(BOOST_PP_BOOL(p##(78, s)), s, p, o, m)
+# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_FOR_78_C(BOOST_PP_BOOL(p##(79, s)), s, p, o, m)
+# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_FOR_79_C(BOOST_PP_BOOL(p##(80, s)), s, p, o, m)
+# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_FOR_80_C(BOOST_PP_BOOL(p##(81, s)), s, p, o, m)
+# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_FOR_81_C(BOOST_PP_BOOL(p##(82, s)), s, p, o, m)
+# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_FOR_82_C(BOOST_PP_BOOL(p##(83, s)), s, p, o, m)
+# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_FOR_83_C(BOOST_PP_BOOL(p##(84, s)), s, p, o, m)
+# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_FOR_84_C(BOOST_PP_BOOL(p##(85, s)), s, p, o, m)
+# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_FOR_85_C(BOOST_PP_BOOL(p##(86, s)), s, p, o, m)
+# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_FOR_86_C(BOOST_PP_BOOL(p##(87, s)), s, p, o, m)
+# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_FOR_87_C(BOOST_PP_BOOL(p##(88, s)), s, p, o, m)
+# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_FOR_88_C(BOOST_PP_BOOL(p##(89, s)), s, p, o, m)
+# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_FOR_89_C(BOOST_PP_BOOL(p##(90, s)), s, p, o, m)
+# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_FOR_90_C(BOOST_PP_BOOL(p##(91, s)), s, p, o, m)
+# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_FOR_91_C(BOOST_PP_BOOL(p##(92, s)), s, p, o, m)
+# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_FOR_92_C(BOOST_PP_BOOL(p##(93, s)), s, p, o, m)
+# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_FOR_93_C(BOOST_PP_BOOL(p##(94, s)), s, p, o, m)
+# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_FOR_94_C(BOOST_PP_BOOL(p##(95, s)), s, p, o, m)
+# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_FOR_95_C(BOOST_PP_BOOL(p##(96, s)), s, p, o, m)
+# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_FOR_96_C(BOOST_PP_BOOL(p##(97, s)), s, p, o, m)
+# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_FOR_97_C(BOOST_PP_BOOL(p##(98, s)), s, p, o, m)
+# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_FOR_98_C(BOOST_PP_BOOL(p##(99, s)), s, p, o, m)
+# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_FOR_99_C(BOOST_PP_BOOL(p##(100, s)), s, p, o, m)
+# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_FOR_100_C(BOOST_PP_BOOL(p##(101, s)), s, p, o, m)
+# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_FOR_101_C(BOOST_PP_BOOL(p##(102, s)), s, p, o, m)
+# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_FOR_102_C(BOOST_PP_BOOL(p##(103, s)), s, p, o, m)
+# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_FOR_103_C(BOOST_PP_BOOL(p##(104, s)), s, p, o, m)
+# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_FOR_104_C(BOOST_PP_BOOL(p##(105, s)), s, p, o, m)
+# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_FOR_105_C(BOOST_PP_BOOL(p##(106, s)), s, p, o, m)
+# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_FOR_106_C(BOOST_PP_BOOL(p##(107, s)), s, p, o, m)
+# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_FOR_107_C(BOOST_PP_BOOL(p##(108, s)), s, p, o, m)
+# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_FOR_108_C(BOOST_PP_BOOL(p##(109, s)), s, p, o, m)
+# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_FOR_109_C(BOOST_PP_BOOL(p##(110, s)), s, p, o, m)
+# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_FOR_110_C(BOOST_PP_BOOL(p##(111, s)), s, p, o, m)
+# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_FOR_111_C(BOOST_PP_BOOL(p##(112, s)), s, p, o, m)
+# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_FOR_112_C(BOOST_PP_BOOL(p##(113, s)), s, p, o, m)
+# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_FOR_113_C(BOOST_PP_BOOL(p##(114, s)), s, p, o, m)
+# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_FOR_114_C(BOOST_PP_BOOL(p##(115, s)), s, p, o, m)
+# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_FOR_115_C(BOOST_PP_BOOL(p##(116, s)), s, p, o, m)
+# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_FOR_116_C(BOOST_PP_BOOL(p##(117, s)), s, p, o, m)
+# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_FOR_117_C(BOOST_PP_BOOL(p##(118, s)), s, p, o, m)
+# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_FOR_118_C(BOOST_PP_BOOL(p##(119, s)), s, p, o, m)
+# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_FOR_119_C(BOOST_PP_BOOL(p##(120, s)), s, p, o, m)
+# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_FOR_120_C(BOOST_PP_BOOL(p##(121, s)), s, p, o, m)
+# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_FOR_121_C(BOOST_PP_BOOL(p##(122, s)), s, p, o, m)
+# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_FOR_122_C(BOOST_PP_BOOL(p##(123, s)), s, p, o, m)
+# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_FOR_123_C(BOOST_PP_BOOL(p##(124, s)), s, p, o, m)
+# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_FOR_124_C(BOOST_PP_BOOL(p##(125, s)), s, p, o, m)
+# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_FOR_125_C(BOOST_PP_BOOL(p##(126, s)), s, p, o, m)
+# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_FOR_126_C(BOOST_PP_BOOL(p##(127, s)), s, p, o, m)
+# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_FOR_127_C(BOOST_PP_BOOL(p##(128, s)), s, p, o, m)
+# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_FOR_128_C(BOOST_PP_BOOL(p##(129, s)), s, p, o, m)
+# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_FOR_129_C(BOOST_PP_BOOL(p##(130, s)), s, p, o, m)
+# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_FOR_130_C(BOOST_PP_BOOL(p##(131, s)), s, p, o, m)
+# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_FOR_131_C(BOOST_PP_BOOL(p##(132, s)), s, p, o, m)
+# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_FOR_132_C(BOOST_PP_BOOL(p##(133, s)), s, p, o, m)
+# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_FOR_133_C(BOOST_PP_BOOL(p##(134, s)), s, p, o, m)
+# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_FOR_134_C(BOOST_PP_BOOL(p##(135, s)), s, p, o, m)
+# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_FOR_135_C(BOOST_PP_BOOL(p##(136, s)), s, p, o, m)
+# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_FOR_136_C(BOOST_PP_BOOL(p##(137, s)), s, p, o, m)
+# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_FOR_137_C(BOOST_PP_BOOL(p##(138, s)), s, p, o, m)
+# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_FOR_138_C(BOOST_PP_BOOL(p##(139, s)), s, p, o, m)
+# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_FOR_139_C(BOOST_PP_BOOL(p##(140, s)), s, p, o, m)
+# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_FOR_140_C(BOOST_PP_BOOL(p##(141, s)), s, p, o, m)
+# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_FOR_141_C(BOOST_PP_BOOL(p##(142, s)), s, p, o, m)
+# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_FOR_142_C(BOOST_PP_BOOL(p##(143, s)), s, p, o, m)
+# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_FOR_143_C(BOOST_PP_BOOL(p##(144, s)), s, p, o, m)
+# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_FOR_144_C(BOOST_PP_BOOL(p##(145, s)), s, p, o, m)
+# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_FOR_145_C(BOOST_PP_BOOL(p##(146, s)), s, p, o, m)
+# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_FOR_146_C(BOOST_PP_BOOL(p##(147, s)), s, p, o, m)
+# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_FOR_147_C(BOOST_PP_BOOL(p##(148, s)), s, p, o, m)
+# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_FOR_148_C(BOOST_PP_BOOL(p##(149, s)), s, p, o, m)
+# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_FOR_149_C(BOOST_PP_BOOL(p##(150, s)), s, p, o, m)
+# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_FOR_150_C(BOOST_PP_BOOL(p##(151, s)), s, p, o, m)
+# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_FOR_151_C(BOOST_PP_BOOL(p##(152, s)), s, p, o, m)
+# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_FOR_152_C(BOOST_PP_BOOL(p##(153, s)), s, p, o, m)
+# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_FOR_153_C(BOOST_PP_BOOL(p##(154, s)), s, p, o, m)
+# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_FOR_154_C(BOOST_PP_BOOL(p##(155, s)), s, p, o, m)
+# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_FOR_155_C(BOOST_PP_BOOL(p##(156, s)), s, p, o, m)
+# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_FOR_156_C(BOOST_PP_BOOL(p##(157, s)), s, p, o, m)
+# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_FOR_157_C(BOOST_PP_BOOL(p##(158, s)), s, p, o, m)
+# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_FOR_158_C(BOOST_PP_BOOL(p##(159, s)), s, p, o, m)
+# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_FOR_159_C(BOOST_PP_BOOL(p##(160, s)), s, p, o, m)
+# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_FOR_160_C(BOOST_PP_BOOL(p##(161, s)), s, p, o, m)
+# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_FOR_161_C(BOOST_PP_BOOL(p##(162, s)), s, p, o, m)
+# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_FOR_162_C(BOOST_PP_BOOL(p##(163, s)), s, p, o, m)
+# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_FOR_163_C(BOOST_PP_BOOL(p##(164, s)), s, p, o, m)
+# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_FOR_164_C(BOOST_PP_BOOL(p##(165, s)), s, p, o, m)
+# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_FOR_165_C(BOOST_PP_BOOL(p##(166, s)), s, p, o, m)
+# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_FOR_166_C(BOOST_PP_BOOL(p##(167, s)), s, p, o, m)
+# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_FOR_167_C(BOOST_PP_BOOL(p##(168, s)), s, p, o, m)
+# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_FOR_168_C(BOOST_PP_BOOL(p##(169, s)), s, p, o, m)
+# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_FOR_169_C(BOOST_PP_BOOL(p##(170, s)), s, p, o, m)
+# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_FOR_170_C(BOOST_PP_BOOL(p##(171, s)), s, p, o, m)
+# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_FOR_171_C(BOOST_PP_BOOL(p##(172, s)), s, p, o, m)
+# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_FOR_172_C(BOOST_PP_BOOL(p##(173, s)), s, p, o, m)
+# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_FOR_173_C(BOOST_PP_BOOL(p##(174, s)), s, p, o, m)
+# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_FOR_174_C(BOOST_PP_BOOL(p##(175, s)), s, p, o, m)
+# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_FOR_175_C(BOOST_PP_BOOL(p##(176, s)), s, p, o, m)
+# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_FOR_176_C(BOOST_PP_BOOL(p##(177, s)), s, p, o, m)
+# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_FOR_177_C(BOOST_PP_BOOL(p##(178, s)), s, p, o, m)
+# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_FOR_178_C(BOOST_PP_BOOL(p##(179, s)), s, p, o, m)
+# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_FOR_179_C(BOOST_PP_BOOL(p##(180, s)), s, p, o, m)
+# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_FOR_180_C(BOOST_PP_BOOL(p##(181, s)), s, p, o, m)
+# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_FOR_181_C(BOOST_PP_BOOL(p##(182, s)), s, p, o, m)
+# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_FOR_182_C(BOOST_PP_BOOL(p##(183, s)), s, p, o, m)
+# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_FOR_183_C(BOOST_PP_BOOL(p##(184, s)), s, p, o, m)
+# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_FOR_184_C(BOOST_PP_BOOL(p##(185, s)), s, p, o, m)
+# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_FOR_185_C(BOOST_PP_BOOL(p##(186, s)), s, p, o, m)
+# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_FOR_186_C(BOOST_PP_BOOL(p##(187, s)), s, p, o, m)
+# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_FOR_187_C(BOOST_PP_BOOL(p##(188, s)), s, p, o, m)
+# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_FOR_188_C(BOOST_PP_BOOL(p##(189, s)), s, p, o, m)
+# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_FOR_189_C(BOOST_PP_BOOL(p##(190, s)), s, p, o, m)
+# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_FOR_190_C(BOOST_PP_BOOL(p##(191, s)), s, p, o, m)
+# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_FOR_191_C(BOOST_PP_BOOL(p##(192, s)), s, p, o, m)
+# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_FOR_192_C(BOOST_PP_BOOL(p##(193, s)), s, p, o, m)
+# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_FOR_193_C(BOOST_PP_BOOL(p##(194, s)), s, p, o, m)
+# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_FOR_194_C(BOOST_PP_BOOL(p##(195, s)), s, p, o, m)
+# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_FOR_195_C(BOOST_PP_BOOL(p##(196, s)), s, p, o, m)
+# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_FOR_196_C(BOOST_PP_BOOL(p##(197, s)), s, p, o, m)
+# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_FOR_197_C(BOOST_PP_BOOL(p##(198, s)), s, p, o, m)
+# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_FOR_198_C(BOOST_PP_BOOL(p##(199, s)), s, p, o, m)
+# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_FOR_199_C(BOOST_PP_BOOL(p##(200, s)), s, p, o, m)
+# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_FOR_200_C(BOOST_PP_BOOL(p##(201, s)), s, p, o, m)
+# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_FOR_201_C(BOOST_PP_BOOL(p##(202, s)), s, p, o, m)
+# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_FOR_202_C(BOOST_PP_BOOL(p##(203, s)), s, p, o, m)
+# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_FOR_203_C(BOOST_PP_BOOL(p##(204, s)), s, p, o, m)
+# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_FOR_204_C(BOOST_PP_BOOL(p##(205, s)), s, p, o, m)
+# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_FOR_205_C(BOOST_PP_BOOL(p##(206, s)), s, p, o, m)
+# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_FOR_206_C(BOOST_PP_BOOL(p##(207, s)), s, p, o, m)
+# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_FOR_207_C(BOOST_PP_BOOL(p##(208, s)), s, p, o, m)
+# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_FOR_208_C(BOOST_PP_BOOL(p##(209, s)), s, p, o, m)
+# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_FOR_209_C(BOOST_PP_BOOL(p##(210, s)), s, p, o, m)
+# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_FOR_210_C(BOOST_PP_BOOL(p##(211, s)), s, p, o, m)
+# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_FOR_211_C(BOOST_PP_BOOL(p##(212, s)), s, p, o, m)
+# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_FOR_212_C(BOOST_PP_BOOL(p##(213, s)), s, p, o, m)
+# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_FOR_213_C(BOOST_PP_BOOL(p##(214, s)), s, p, o, m)
+# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_FOR_214_C(BOOST_PP_BOOL(p##(215, s)), s, p, o, m)
+# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_FOR_215_C(BOOST_PP_BOOL(p##(216, s)), s, p, o, m)
+# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_FOR_216_C(BOOST_PP_BOOL(p##(217, s)), s, p, o, m)
+# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_FOR_217_C(BOOST_PP_BOOL(p##(218, s)), s, p, o, m)
+# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_FOR_218_C(BOOST_PP_BOOL(p##(219, s)), s, p, o, m)
+# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_FOR_219_C(BOOST_PP_BOOL(p##(220, s)), s, p, o, m)
+# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_FOR_220_C(BOOST_PP_BOOL(p##(221, s)), s, p, o, m)
+# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_FOR_221_C(BOOST_PP_BOOL(p##(222, s)), s, p, o, m)
+# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_FOR_222_C(BOOST_PP_BOOL(p##(223, s)), s, p, o, m)
+# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_FOR_223_C(BOOST_PP_BOOL(p##(224, s)), s, p, o, m)
+# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_FOR_224_C(BOOST_PP_BOOL(p##(225, s)), s, p, o, m)
+# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_FOR_225_C(BOOST_PP_BOOL(p##(226, s)), s, p, o, m)
+# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_FOR_226_C(BOOST_PP_BOOL(p##(227, s)), s, p, o, m)
+# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_FOR_227_C(BOOST_PP_BOOL(p##(228, s)), s, p, o, m)
+# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_FOR_228_C(BOOST_PP_BOOL(p##(229, s)), s, p, o, m)
+# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_FOR_229_C(BOOST_PP_BOOL(p##(230, s)), s, p, o, m)
+# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_FOR_230_C(BOOST_PP_BOOL(p##(231, s)), s, p, o, m)
+# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_FOR_231_C(BOOST_PP_BOOL(p##(232, s)), s, p, o, m)
+# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_FOR_232_C(BOOST_PP_BOOL(p##(233, s)), s, p, o, m)
+# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_FOR_233_C(BOOST_PP_BOOL(p##(234, s)), s, p, o, m)
+# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_FOR_234_C(BOOST_PP_BOOL(p##(235, s)), s, p, o, m)
+# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_FOR_235_C(BOOST_PP_BOOL(p##(236, s)), s, p, o, m)
+# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_FOR_236_C(BOOST_PP_BOOL(p##(237, s)), s, p, o, m)
+# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_FOR_237_C(BOOST_PP_BOOL(p##(238, s)), s, p, o, m)
+# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_FOR_238_C(BOOST_PP_BOOL(p##(239, s)), s, p, o, m)
+# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_FOR_239_C(BOOST_PP_BOOL(p##(240, s)), s, p, o, m)
+# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_FOR_240_C(BOOST_PP_BOOL(p##(241, s)), s, p, o, m)
+# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_FOR_241_C(BOOST_PP_BOOL(p##(242, s)), s, p, o, m)
+# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_FOR_242_C(BOOST_PP_BOOL(p##(243, s)), s, p, o, m)
+# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_FOR_243_C(BOOST_PP_BOOL(p##(244, s)), s, p, o, m)
+# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_FOR_244_C(BOOST_PP_BOOL(p##(245, s)), s, p, o, m)
+# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_FOR_245_C(BOOST_PP_BOOL(p##(246, s)), s, p, o, m)
+# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_FOR_246_C(BOOST_PP_BOOL(p##(247, s)), s, p, o, m)
+# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_FOR_247_C(BOOST_PP_BOOL(p##(248, s)), s, p, o, m)
+# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_FOR_248_C(BOOST_PP_BOOL(p##(249, s)), s, p, o, m)
+# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_FOR_249_C(BOOST_PP_BOOL(p##(250, s)), s, p, o, m)
+# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_FOR_250_C(BOOST_PP_BOOL(p##(251, s)), s, p, o, m)
+# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_FOR_251_C(BOOST_PP_BOOL(p##(252, s)), s, p, o, m)
+# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_FOR_252_C(BOOST_PP_BOOL(p##(253, s)), s, p, o, m)
+# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_FOR_253_C(BOOST_PP_BOOL(p##(254, s)), s, p, o, m)
+# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_FOR_254_C(BOOST_PP_BOOL(p##(255, s)), s, p, o, m)
+# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_FOR_255_C(BOOST_PP_BOOL(p##(256, s)), s, p, o, m)
+# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_FOR_256_C(BOOST_PP_BOOL(p##(257, s)), s, p, o, m)
+#
+# define BOOST_PP_FOR_1_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IIF(c, BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(2, s), p, o, m)
+# define BOOST_PP_FOR_2_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IIF(c, BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(3, s), p, o, m)
+# define BOOST_PP_FOR_3_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IIF(c, BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(4, s), p, o, m)
+# define BOOST_PP_FOR_4_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IIF(c, BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(5, s), p, o, m)
+# define BOOST_PP_FOR_5_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IIF(c, BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(6, s), p, o, m)
+# define BOOST_PP_FOR_6_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IIF(c, BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(7, s), p, o, m)
+# define BOOST_PP_FOR_7_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IIF(c, BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(8, s), p, o, m)
+# define BOOST_PP_FOR_8_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IIF(c, BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(9, s), p, o, m)
+# define BOOST_PP_FOR_9_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IIF(c, BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(10, s), p, o, m)
+# define BOOST_PP_FOR_10_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IIF(c, BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(11, s), p, o, m)
+# define BOOST_PP_FOR_11_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IIF(c, BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(12, s), p, o, m)
+# define BOOST_PP_FOR_12_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IIF(c, BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(13, s), p, o, m)
+# define BOOST_PP_FOR_13_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IIF(c, BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(14, s), p, o, m)
+# define BOOST_PP_FOR_14_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IIF(c, BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(15, s), p, o, m)
+# define BOOST_PP_FOR_15_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IIF(c, BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(16, s), p, o, m)
+# define BOOST_PP_FOR_16_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IIF(c, BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(17, s), p, o, m)
+# define BOOST_PP_FOR_17_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IIF(c, BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(18, s), p, o, m)
+# define BOOST_PP_FOR_18_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IIF(c, BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(19, s), p, o, m)
+# define BOOST_PP_FOR_19_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IIF(c, BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(20, s), p, o, m)
+# define BOOST_PP_FOR_20_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IIF(c, BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(21, s), p, o, m)
+# define BOOST_PP_FOR_21_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IIF(c, BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(22, s), p, o, m)
+# define BOOST_PP_FOR_22_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IIF(c, BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(23, s), p, o, m)
+# define BOOST_PP_FOR_23_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IIF(c, BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(24, s), p, o, m)
+# define BOOST_PP_FOR_24_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IIF(c, BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(25, s), p, o, m)
+# define BOOST_PP_FOR_25_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IIF(c, BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(26, s), p, o, m)
+# define BOOST_PP_FOR_26_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IIF(c, BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(27, s), p, o, m)
+# define BOOST_PP_FOR_27_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IIF(c, BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(28, s), p, o, m)
+# define BOOST_PP_FOR_28_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IIF(c, BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(29, s), p, o, m)
+# define BOOST_PP_FOR_29_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IIF(c, BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(30, s), p, o, m)
+# define BOOST_PP_FOR_30_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IIF(c, BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(31, s), p, o, m)
+# define BOOST_PP_FOR_31_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IIF(c, BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(32, s), p, o, m)
+# define BOOST_PP_FOR_32_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IIF(c, BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(33, s), p, o, m)
+# define BOOST_PP_FOR_33_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IIF(c, BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(34, s), p, o, m)
+# define BOOST_PP_FOR_34_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IIF(c, BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(35, s), p, o, m)
+# define BOOST_PP_FOR_35_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IIF(c, BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(36, s), p, o, m)
+# define BOOST_PP_FOR_36_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IIF(c, BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(37, s), p, o, m)
+# define BOOST_PP_FOR_37_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IIF(c, BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(38, s), p, o, m)
+# define BOOST_PP_FOR_38_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IIF(c, BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(39, s), p, o, m)
+# define BOOST_PP_FOR_39_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IIF(c, BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(40, s), p, o, m)
+# define BOOST_PP_FOR_40_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IIF(c, BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(41, s), p, o, m)
+# define BOOST_PP_FOR_41_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IIF(c, BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(42, s), p, o, m)
+# define BOOST_PP_FOR_42_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IIF(c, BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(43, s), p, o, m)
+# define BOOST_PP_FOR_43_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IIF(c, BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(44, s), p, o, m)
+# define BOOST_PP_FOR_44_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IIF(c, BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(45, s), p, o, m)
+# define BOOST_PP_FOR_45_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IIF(c, BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(46, s), p, o, m)
+# define BOOST_PP_FOR_46_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IIF(c, BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(47, s), p, o, m)
+# define BOOST_PP_FOR_47_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IIF(c, BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(48, s), p, o, m)
+# define BOOST_PP_FOR_48_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IIF(c, BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(49, s), p, o, m)
+# define BOOST_PP_FOR_49_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IIF(c, BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(50, s), p, o, m)
+# define BOOST_PP_FOR_50_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IIF(c, BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(51, s), p, o, m)
+# define BOOST_PP_FOR_51_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IIF(c, BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(52, s), p, o, m)
+# define BOOST_PP_FOR_52_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IIF(c, BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(53, s), p, o, m)
+# define BOOST_PP_FOR_53_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IIF(c, BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(54, s), p, o, m)
+# define BOOST_PP_FOR_54_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IIF(c, BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(55, s), p, o, m)
+# define BOOST_PP_FOR_55_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IIF(c, BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(56, s), p, o, m)
+# define BOOST_PP_FOR_56_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IIF(c, BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(57, s), p, o, m)
+# define BOOST_PP_FOR_57_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IIF(c, BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(58, s), p, o, m)
+# define BOOST_PP_FOR_58_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IIF(c, BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(59, s), p, o, m)
+# define BOOST_PP_FOR_59_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IIF(c, BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(60, s), p, o, m)
+# define BOOST_PP_FOR_60_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IIF(c, BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(61, s), p, o, m)
+# define BOOST_PP_FOR_61_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IIF(c, BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(62, s), p, o, m)
+# define BOOST_PP_FOR_62_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IIF(c, BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(63, s), p, o, m)
+# define BOOST_PP_FOR_63_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IIF(c, BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(64, s), p, o, m)
+# define BOOST_PP_FOR_64_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IIF(c, BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(65, s), p, o, m)
+# define BOOST_PP_FOR_65_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IIF(c, BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(66, s), p, o, m)
+# define BOOST_PP_FOR_66_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IIF(c, BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(67, s), p, o, m)
+# define BOOST_PP_FOR_67_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IIF(c, BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(68, s), p, o, m)
+# define BOOST_PP_FOR_68_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IIF(c, BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(69, s), p, o, m)
+# define BOOST_PP_FOR_69_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IIF(c, BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(70, s), p, o, m)
+# define BOOST_PP_FOR_70_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IIF(c, BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(71, s), p, o, m)
+# define BOOST_PP_FOR_71_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IIF(c, BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(72, s), p, o, m)
+# define BOOST_PP_FOR_72_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IIF(c, BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(73, s), p, o, m)
+# define BOOST_PP_FOR_73_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IIF(c, BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(74, s), p, o, m)
+# define BOOST_PP_FOR_74_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IIF(c, BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(75, s), p, o, m)
+# define BOOST_PP_FOR_75_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IIF(c, BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(76, s), p, o, m)
+# define BOOST_PP_FOR_76_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IIF(c, BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(77, s), p, o, m)
+# define BOOST_PP_FOR_77_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IIF(c, BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(78, s), p, o, m)
+# define BOOST_PP_FOR_78_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IIF(c, BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(79, s), p, o, m)
+# define BOOST_PP_FOR_79_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IIF(c, BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(80, s), p, o, m)
+# define BOOST_PP_FOR_80_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IIF(c, BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(81, s), p, o, m)
+# define BOOST_PP_FOR_81_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IIF(c, BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(82, s), p, o, m)
+# define BOOST_PP_FOR_82_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IIF(c, BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(83, s), p, o, m)
+# define BOOST_PP_FOR_83_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IIF(c, BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(84, s), p, o, m)
+# define BOOST_PP_FOR_84_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IIF(c, BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(85, s), p, o, m)
+# define BOOST_PP_FOR_85_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IIF(c, BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(86, s), p, o, m)
+# define BOOST_PP_FOR_86_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IIF(c, BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(87, s), p, o, m)
+# define BOOST_PP_FOR_87_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IIF(c, BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(88, s), p, o, m)
+# define BOOST_PP_FOR_88_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IIF(c, BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(89, s), p, o, m)
+# define BOOST_PP_FOR_89_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IIF(c, BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(90, s), p, o, m)
+# define BOOST_PP_FOR_90_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IIF(c, BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(91, s), p, o, m)
+# define BOOST_PP_FOR_91_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IIF(c, BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(92, s), p, o, m)
+# define BOOST_PP_FOR_92_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IIF(c, BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(93, s), p, o, m)
+# define BOOST_PP_FOR_93_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IIF(c, BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(94, s), p, o, m)
+# define BOOST_PP_FOR_94_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IIF(c, BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(95, s), p, o, m)
+# define BOOST_PP_FOR_95_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IIF(c, BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(96, s), p, o, m)
+# define BOOST_PP_FOR_96_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IIF(c, BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(97, s), p, o, m)
+# define BOOST_PP_FOR_97_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IIF(c, BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(98, s), p, o, m)
+# define BOOST_PP_FOR_98_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IIF(c, BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(99, s), p, o, m)
+# define BOOST_PP_FOR_99_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IIF(c, BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(100, s), p, o, m)
+# define BOOST_PP_FOR_100_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IIF(c, BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(101, s), p, o, m)
+# define BOOST_PP_FOR_101_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IIF(c, BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(102, s), p, o, m)
+# define BOOST_PP_FOR_102_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IIF(c, BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(103, s), p, o, m)
+# define BOOST_PP_FOR_103_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IIF(c, BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(104, s), p, o, m)
+# define BOOST_PP_FOR_104_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IIF(c, BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(105, s), p, o, m)
+# define BOOST_PP_FOR_105_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IIF(c, BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(106, s), p, o, m)
+# define BOOST_PP_FOR_106_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IIF(c, BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(107, s), p, o, m)
+# define BOOST_PP_FOR_107_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IIF(c, BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(108, s), p, o, m)
+# define BOOST_PP_FOR_108_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IIF(c, BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(109, s), p, o, m)
+# define BOOST_PP_FOR_109_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IIF(c, BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(110, s), p, o, m)
+# define BOOST_PP_FOR_110_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IIF(c, BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(111, s), p, o, m)
+# define BOOST_PP_FOR_111_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IIF(c, BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(112, s), p, o, m)
+# define BOOST_PP_FOR_112_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IIF(c, BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(113, s), p, o, m)
+# define BOOST_PP_FOR_113_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IIF(c, BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(114, s), p, o, m)
+# define BOOST_PP_FOR_114_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IIF(c, BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(115, s), p, o, m)
+# define BOOST_PP_FOR_115_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IIF(c, BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(116, s), p, o, m)
+# define BOOST_PP_FOR_116_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IIF(c, BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(117, s), p, o, m)
+# define BOOST_PP_FOR_117_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IIF(c, BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(118, s), p, o, m)
+# define BOOST_PP_FOR_118_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IIF(c, BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(119, s), p, o, m)
+# define BOOST_PP_FOR_119_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IIF(c, BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(120, s), p, o, m)
+# define BOOST_PP_FOR_120_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IIF(c, BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(121, s), p, o, m)
+# define BOOST_PP_FOR_121_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IIF(c, BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(122, s), p, o, m)
+# define BOOST_PP_FOR_122_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IIF(c, BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(123, s), p, o, m)
+# define BOOST_PP_FOR_123_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IIF(c, BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(124, s), p, o, m)
+# define BOOST_PP_FOR_124_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IIF(c, BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(125, s), p, o, m)
+# define BOOST_PP_FOR_125_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IIF(c, BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(126, s), p, o, m)
+# define BOOST_PP_FOR_126_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IIF(c, BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(127, s), p, o, m)
+# define BOOST_PP_FOR_127_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IIF(c, BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(128, s), p, o, m)
+# define BOOST_PP_FOR_128_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IIF(c, BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(129, s), p, o, m)
+# define BOOST_PP_FOR_129_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IIF(c, BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(130, s), p, o, m)
+# define BOOST_PP_FOR_130_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IIF(c, BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(131, s), p, o, m)
+# define BOOST_PP_FOR_131_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IIF(c, BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(132, s), p, o, m)
+# define BOOST_PP_FOR_132_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IIF(c, BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(133, s), p, o, m)
+# define BOOST_PP_FOR_133_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IIF(c, BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(134, s), p, o, m)
+# define BOOST_PP_FOR_134_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IIF(c, BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(135, s), p, o, m)
+# define BOOST_PP_FOR_135_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IIF(c, BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(136, s), p, o, m)
+# define BOOST_PP_FOR_136_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IIF(c, BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(137, s), p, o, m)
+# define BOOST_PP_FOR_137_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IIF(c, BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(138, s), p, o, m)
+# define BOOST_PP_FOR_138_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IIF(c, BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(139, s), p, o, m)
+# define BOOST_PP_FOR_139_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IIF(c, BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(140, s), p, o, m)
+# define BOOST_PP_FOR_140_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IIF(c, BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(141, s), p, o, m)
+# define BOOST_PP_FOR_141_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IIF(c, BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(142, s), p, o, m)
+# define BOOST_PP_FOR_142_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IIF(c, BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(143, s), p, o, m)
+# define BOOST_PP_FOR_143_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IIF(c, BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(144, s), p, o, m)
+# define BOOST_PP_FOR_144_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IIF(c, BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(145, s), p, o, m)
+# define BOOST_PP_FOR_145_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IIF(c, BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(146, s), p, o, m)
+# define BOOST_PP_FOR_146_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IIF(c, BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(147, s), p, o, m)
+# define BOOST_PP_FOR_147_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IIF(c, BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(148, s), p, o, m)
+# define BOOST_PP_FOR_148_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IIF(c, BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(149, s), p, o, m)
+# define BOOST_PP_FOR_149_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IIF(c, BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(150, s), p, o, m)
+# define BOOST_PP_FOR_150_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IIF(c, BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(151, s), p, o, m)
+# define BOOST_PP_FOR_151_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IIF(c, BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(152, s), p, o, m)
+# define BOOST_PP_FOR_152_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IIF(c, BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(153, s), p, o, m)
+# define BOOST_PP_FOR_153_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IIF(c, BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(154, s), p, o, m)
+# define BOOST_PP_FOR_154_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IIF(c, BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(155, s), p, o, m)
+# define BOOST_PP_FOR_155_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IIF(c, BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(156, s), p, o, m)
+# define BOOST_PP_FOR_156_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IIF(c, BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(157, s), p, o, m)
+# define BOOST_PP_FOR_157_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IIF(c, BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(158, s), p, o, m)
+# define BOOST_PP_FOR_158_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IIF(c, BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(159, s), p, o, m)
+# define BOOST_PP_FOR_159_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IIF(c, BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(160, s), p, o, m)
+# define BOOST_PP_FOR_160_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IIF(c, BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(161, s), p, o, m)
+# define BOOST_PP_FOR_161_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IIF(c, BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(162, s), p, o, m)
+# define BOOST_PP_FOR_162_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IIF(c, BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(163, s), p, o, m)
+# define BOOST_PP_FOR_163_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IIF(c, BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(164, s), p, o, m)
+# define BOOST_PP_FOR_164_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IIF(c, BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(165, s), p, o, m)
+# define BOOST_PP_FOR_165_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IIF(c, BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(166, s), p, o, m)
+# define BOOST_PP_FOR_166_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IIF(c, BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(167, s), p, o, m)
+# define BOOST_PP_FOR_167_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IIF(c, BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(168, s), p, o, m)
+# define BOOST_PP_FOR_168_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IIF(c, BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(169, s), p, o, m)
+# define BOOST_PP_FOR_169_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IIF(c, BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(170, s), p, o, m)
+# define BOOST_PP_FOR_170_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IIF(c, BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(171, s), p, o, m)
+# define BOOST_PP_FOR_171_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IIF(c, BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(172, s), p, o, m)
+# define BOOST_PP_FOR_172_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IIF(c, BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(173, s), p, o, m)
+# define BOOST_PP_FOR_173_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IIF(c, BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(174, s), p, o, m)
+# define BOOST_PP_FOR_174_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IIF(c, BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(175, s), p, o, m)
+# define BOOST_PP_FOR_175_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IIF(c, BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(176, s), p, o, m)
+# define BOOST_PP_FOR_176_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IIF(c, BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(177, s), p, o, m)
+# define BOOST_PP_FOR_177_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IIF(c, BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(178, s), p, o, m)
+# define BOOST_PP_FOR_178_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IIF(c, BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(179, s), p, o, m)
+# define BOOST_PP_FOR_179_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IIF(c, BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(180, s), p, o, m)
+# define BOOST_PP_FOR_180_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IIF(c, BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(181, s), p, o, m)
+# define BOOST_PP_FOR_181_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IIF(c, BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(182, s), p, o, m)
+# define BOOST_PP_FOR_182_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IIF(c, BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(183, s), p, o, m)
+# define BOOST_PP_FOR_183_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IIF(c, BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(184, s), p, o, m)
+# define BOOST_PP_FOR_184_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IIF(c, BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(185, s), p, o, m)
+# define BOOST_PP_FOR_185_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IIF(c, BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(186, s), p, o, m)
+# define BOOST_PP_FOR_186_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IIF(c, BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(187, s), p, o, m)
+# define BOOST_PP_FOR_187_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IIF(c, BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(188, s), p, o, m)
+# define BOOST_PP_FOR_188_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IIF(c, BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(189, s), p, o, m)
+# define BOOST_PP_FOR_189_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IIF(c, BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(190, s), p, o, m)
+# define BOOST_PP_FOR_190_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IIF(c, BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(191, s), p, o, m)
+# define BOOST_PP_FOR_191_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IIF(c, BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(192, s), p, o, m)
+# define BOOST_PP_FOR_192_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IIF(c, BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(193, s), p, o, m)
+# define BOOST_PP_FOR_193_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IIF(c, BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(194, s), p, o, m)
+# define BOOST_PP_FOR_194_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IIF(c, BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(195, s), p, o, m)
+# define BOOST_PP_FOR_195_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IIF(c, BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(196, s), p, o, m)
+# define BOOST_PP_FOR_196_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IIF(c, BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(197, s), p, o, m)
+# define BOOST_PP_FOR_197_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IIF(c, BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(198, s), p, o, m)
+# define BOOST_PP_FOR_198_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IIF(c, BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(199, s), p, o, m)
+# define BOOST_PP_FOR_199_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IIF(c, BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(200, s), p, o, m)
+# define BOOST_PP_FOR_200_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IIF(c, BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(201, s), p, o, m)
+# define BOOST_PP_FOR_201_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IIF(c, BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(202, s), p, o, m)
+# define BOOST_PP_FOR_202_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IIF(c, BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(203, s), p, o, m)
+# define BOOST_PP_FOR_203_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IIF(c, BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(204, s), p, o, m)
+# define BOOST_PP_FOR_204_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IIF(c, BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(205, s), p, o, m)
+# define BOOST_PP_FOR_205_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IIF(c, BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(206, s), p, o, m)
+# define BOOST_PP_FOR_206_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IIF(c, BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(207, s), p, o, m)
+# define BOOST_PP_FOR_207_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IIF(c, BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(208, s), p, o, m)
+# define BOOST_PP_FOR_208_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IIF(c, BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(209, s), p, o, m)
+# define BOOST_PP_FOR_209_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IIF(c, BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(210, s), p, o, m)
+# define BOOST_PP_FOR_210_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IIF(c, BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(211, s), p, o, m)
+# define BOOST_PP_FOR_211_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IIF(c, BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(212, s), p, o, m)
+# define BOOST_PP_FOR_212_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IIF(c, BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(213, s), p, o, m)
+# define BOOST_PP_FOR_213_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IIF(c, BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(214, s), p, o, m)
+# define BOOST_PP_FOR_214_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IIF(c, BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(215, s), p, o, m)
+# define BOOST_PP_FOR_215_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IIF(c, BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(216, s), p, o, m)
+# define BOOST_PP_FOR_216_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IIF(c, BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(217, s), p, o, m)
+# define BOOST_PP_FOR_217_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IIF(c, BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(218, s), p, o, m)
+# define BOOST_PP_FOR_218_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IIF(c, BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(219, s), p, o, m)
+# define BOOST_PP_FOR_219_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IIF(c, BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(220, s), p, o, m)
+# define BOOST_PP_FOR_220_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IIF(c, BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(221, s), p, o, m)
+# define BOOST_PP_FOR_221_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IIF(c, BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(222, s), p, o, m)
+# define BOOST_PP_FOR_222_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IIF(c, BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(223, s), p, o, m)
+# define BOOST_PP_FOR_223_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IIF(c, BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(224, s), p, o, m)
+# define BOOST_PP_FOR_224_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IIF(c, BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(225, s), p, o, m)
+# define BOOST_PP_FOR_225_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IIF(c, BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(226, s), p, o, m)
+# define BOOST_PP_FOR_226_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IIF(c, BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(227, s), p, o, m)
+# define BOOST_PP_FOR_227_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IIF(c, BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(228, s), p, o, m)
+# define BOOST_PP_FOR_228_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IIF(c, BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(229, s), p, o, m)
+# define BOOST_PP_FOR_229_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IIF(c, BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(230, s), p, o, m)
+# define BOOST_PP_FOR_230_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IIF(c, BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(231, s), p, o, m)
+# define BOOST_PP_FOR_231_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IIF(c, BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(232, s), p, o, m)
+# define BOOST_PP_FOR_232_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IIF(c, BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(233, s), p, o, m)
+# define BOOST_PP_FOR_233_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IIF(c, BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(234, s), p, o, m)
+# define BOOST_PP_FOR_234_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IIF(c, BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(235, s), p, o, m)
+# define BOOST_PP_FOR_235_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IIF(c, BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(236, s), p, o, m)
+# define BOOST_PP_FOR_236_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IIF(c, BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(237, s), p, o, m)
+# define BOOST_PP_FOR_237_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IIF(c, BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(238, s), p, o, m)
+# define BOOST_PP_FOR_238_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IIF(c, BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(239, s), p, o, m)
+# define BOOST_PP_FOR_239_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IIF(c, BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(240, s), p, o, m)
+# define BOOST_PP_FOR_240_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IIF(c, BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(241, s), p, o, m)
+# define BOOST_PP_FOR_241_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IIF(c, BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(242, s), p, o, m)
+# define BOOST_PP_FOR_242_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IIF(c, BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(243, s), p, o, m)
+# define BOOST_PP_FOR_243_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IIF(c, BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(244, s), p, o, m)
+# define BOOST_PP_FOR_244_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IIF(c, BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(245, s), p, o, m)
+# define BOOST_PP_FOR_245_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IIF(c, BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(246, s), p, o, m)
+# define BOOST_PP_FOR_246_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IIF(c, BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(247, s), p, o, m)
+# define BOOST_PP_FOR_247_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IIF(c, BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(248, s), p, o, m)
+# define BOOST_PP_FOR_248_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IIF(c, BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(249, s), p, o, m)
+# define BOOST_PP_FOR_249_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IIF(c, BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(250, s), p, o, m)
+# define BOOST_PP_FOR_250_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IIF(c, BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(251, s), p, o, m)
+# define BOOST_PP_FOR_251_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IIF(c, BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(252, s), p, o, m)
+# define BOOST_PP_FOR_252_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IIF(c, BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(253, s), p, o, m)
+# define BOOST_PP_FOR_253_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IIF(c, BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(254, s), p, o, m)
+# define BOOST_PP_FOR_254_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IIF(c, BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(255, s), p, o, m)
+# define BOOST_PP_FOR_255_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IIF(c, BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(256, s), p, o, m)
+# define BOOST_PP_FOR_256_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IIF(c, BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(257, s), p, o, m)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/repetition/detail/edg/for.hpp b/vendor/pdalboost/boost/preprocessor/repetition/detail/edg/for.hpp
new file mode 100644
index 0000000..212921a
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repetition/detail/edg/for.hpp
@@ -0,0 +1,534 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_EDG_FOR_HPP
+# define BOOST_PREPROCESSOR_REPETITION_DETAIL_EDG_FOR_HPP
+#
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_FOR_1_I(s, p, o, m)
+# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_FOR_2_I(s, p, o, m)
+# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_FOR_3_I(s, p, o, m)
+# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_FOR_4_I(s, p, o, m)
+# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_FOR_5_I(s, p, o, m)
+# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_FOR_6_I(s, p, o, m)
+# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_FOR_7_I(s, p, o, m)
+# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_FOR_8_I(s, p, o, m)
+# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_FOR_9_I(s, p, o, m)
+# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_FOR_10_I(s, p, o, m)
+# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_FOR_11_I(s, p, o, m)
+# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_FOR_12_I(s, p, o, m)
+# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_FOR_13_I(s, p, o, m)
+# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_FOR_14_I(s, p, o, m)
+# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_FOR_15_I(s, p, o, m)
+# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_FOR_16_I(s, p, o, m)
+# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_FOR_17_I(s, p, o, m)
+# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_FOR_18_I(s, p, o, m)
+# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_FOR_19_I(s, p, o, m)
+# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_FOR_20_I(s, p, o, m)
+# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_FOR_21_I(s, p, o, m)
+# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_FOR_22_I(s, p, o, m)
+# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_FOR_23_I(s, p, o, m)
+# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_FOR_24_I(s, p, o, m)
+# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_FOR_25_I(s, p, o, m)
+# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_FOR_26_I(s, p, o, m)
+# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_FOR_27_I(s, p, o, m)
+# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_FOR_28_I(s, p, o, m)
+# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_FOR_29_I(s, p, o, m)
+# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_FOR_30_I(s, p, o, m)
+# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_FOR_31_I(s, p, o, m)
+# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_FOR_32_I(s, p, o, m)
+# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_FOR_33_I(s, p, o, m)
+# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_FOR_34_I(s, p, o, m)
+# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_FOR_35_I(s, p, o, m)
+# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_FOR_36_I(s, p, o, m)
+# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_FOR_37_I(s, p, o, m)
+# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_FOR_38_I(s, p, o, m)
+# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_FOR_39_I(s, p, o, m)
+# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_FOR_40_I(s, p, o, m)
+# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_FOR_41_I(s, p, o, m)
+# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_FOR_42_I(s, p, o, m)
+# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_FOR_43_I(s, p, o, m)
+# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_FOR_44_I(s, p, o, m)
+# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_FOR_45_I(s, p, o, m)
+# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_FOR_46_I(s, p, o, m)
+# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_FOR_47_I(s, p, o, m)
+# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_FOR_48_I(s, p, o, m)
+# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_FOR_49_I(s, p, o, m)
+# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_FOR_50_I(s, p, o, m)
+# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_FOR_51_I(s, p, o, m)
+# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_FOR_52_I(s, p, o, m)
+# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_FOR_53_I(s, p, o, m)
+# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_FOR_54_I(s, p, o, m)
+# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_FOR_55_I(s, p, o, m)
+# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_FOR_56_I(s, p, o, m)
+# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_FOR_57_I(s, p, o, m)
+# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_FOR_58_I(s, p, o, m)
+# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_FOR_59_I(s, p, o, m)
+# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_FOR_60_I(s, p, o, m)
+# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_FOR_61_I(s, p, o, m)
+# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_FOR_62_I(s, p, o, m)
+# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_FOR_63_I(s, p, o, m)
+# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_FOR_64_I(s, p, o, m)
+# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_FOR_65_I(s, p, o, m)
+# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_FOR_66_I(s, p, o, m)
+# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_FOR_67_I(s, p, o, m)
+# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_FOR_68_I(s, p, o, m)
+# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_FOR_69_I(s, p, o, m)
+# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_FOR_70_I(s, p, o, m)
+# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_FOR_71_I(s, p, o, m)
+# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_FOR_72_I(s, p, o, m)
+# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_FOR_73_I(s, p, o, m)
+# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_FOR_74_I(s, p, o, m)
+# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_FOR_75_I(s, p, o, m)
+# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_FOR_76_I(s, p, o, m)
+# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_FOR_77_I(s, p, o, m)
+# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_FOR_78_I(s, p, o, m)
+# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_FOR_79_I(s, p, o, m)
+# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_FOR_80_I(s, p, o, m)
+# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_FOR_81_I(s, p, o, m)
+# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_FOR_82_I(s, p, o, m)
+# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_FOR_83_I(s, p, o, m)
+# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_FOR_84_I(s, p, o, m)
+# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_FOR_85_I(s, p, o, m)
+# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_FOR_86_I(s, p, o, m)
+# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_FOR_87_I(s, p, o, m)
+# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_FOR_88_I(s, p, o, m)
+# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_FOR_89_I(s, p, o, m)
+# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_FOR_90_I(s, p, o, m)
+# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_FOR_91_I(s, p, o, m)
+# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_FOR_92_I(s, p, o, m)
+# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_FOR_93_I(s, p, o, m)
+# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_FOR_94_I(s, p, o, m)
+# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_FOR_95_I(s, p, o, m)
+# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_FOR_96_I(s, p, o, m)
+# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_FOR_97_I(s, p, o, m)
+# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_FOR_98_I(s, p, o, m)
+# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_FOR_99_I(s, p, o, m)
+# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_FOR_100_I(s, p, o, m)
+# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_FOR_101_I(s, p, o, m)
+# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_FOR_102_I(s, p, o, m)
+# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_FOR_103_I(s, p, o, m)
+# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_FOR_104_I(s, p, o, m)
+# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_FOR_105_I(s, p, o, m)
+# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_FOR_106_I(s, p, o, m)
+# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_FOR_107_I(s, p, o, m)
+# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_FOR_108_I(s, p, o, m)
+# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_FOR_109_I(s, p, o, m)
+# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_FOR_110_I(s, p, o, m)
+# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_FOR_111_I(s, p, o, m)
+# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_FOR_112_I(s, p, o, m)
+# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_FOR_113_I(s, p, o, m)
+# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_FOR_114_I(s, p, o, m)
+# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_FOR_115_I(s, p, o, m)
+# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_FOR_116_I(s, p, o, m)
+# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_FOR_117_I(s, p, o, m)
+# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_FOR_118_I(s, p, o, m)
+# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_FOR_119_I(s, p, o, m)
+# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_FOR_120_I(s, p, o, m)
+# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_FOR_121_I(s, p, o, m)
+# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_FOR_122_I(s, p, o, m)
+# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_FOR_123_I(s, p, o, m)
+# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_FOR_124_I(s, p, o, m)
+# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_FOR_125_I(s, p, o, m)
+# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_FOR_126_I(s, p, o, m)
+# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_FOR_127_I(s, p, o, m)
+# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_FOR_128_I(s, p, o, m)
+# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_FOR_129_I(s, p, o, m)
+# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_FOR_130_I(s, p, o, m)
+# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_FOR_131_I(s, p, o, m)
+# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_FOR_132_I(s, p, o, m)
+# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_FOR_133_I(s, p, o, m)
+# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_FOR_134_I(s, p, o, m)
+# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_FOR_135_I(s, p, o, m)
+# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_FOR_136_I(s, p, o, m)
+# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_FOR_137_I(s, p, o, m)
+# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_FOR_138_I(s, p, o, m)
+# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_FOR_139_I(s, p, o, m)
+# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_FOR_140_I(s, p, o, m)
+# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_FOR_141_I(s, p, o, m)
+# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_FOR_142_I(s, p, o, m)
+# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_FOR_143_I(s, p, o, m)
+# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_FOR_144_I(s, p, o, m)
+# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_FOR_145_I(s, p, o, m)
+# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_FOR_146_I(s, p, o, m)
+# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_FOR_147_I(s, p, o, m)
+# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_FOR_148_I(s, p, o, m)
+# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_FOR_149_I(s, p, o, m)
+# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_FOR_150_I(s, p, o, m)
+# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_FOR_151_I(s, p, o, m)
+# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_FOR_152_I(s, p, o, m)
+# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_FOR_153_I(s, p, o, m)
+# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_FOR_154_I(s, p, o, m)
+# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_FOR_155_I(s, p, o, m)
+# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_FOR_156_I(s, p, o, m)
+# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_FOR_157_I(s, p, o, m)
+# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_FOR_158_I(s, p, o, m)
+# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_FOR_159_I(s, p, o, m)
+# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_FOR_160_I(s, p, o, m)
+# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_FOR_161_I(s, p, o, m)
+# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_FOR_162_I(s, p, o, m)
+# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_FOR_163_I(s, p, o, m)
+# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_FOR_164_I(s, p, o, m)
+# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_FOR_165_I(s, p, o, m)
+# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_FOR_166_I(s, p, o, m)
+# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_FOR_167_I(s, p, o, m)
+# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_FOR_168_I(s, p, o, m)
+# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_FOR_169_I(s, p, o, m)
+# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_FOR_170_I(s, p, o, m)
+# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_FOR_171_I(s, p, o, m)
+# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_FOR_172_I(s, p, o, m)
+# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_FOR_173_I(s, p, o, m)
+# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_FOR_174_I(s, p, o, m)
+# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_FOR_175_I(s, p, o, m)
+# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_FOR_176_I(s, p, o, m)
+# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_FOR_177_I(s, p, o, m)
+# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_FOR_178_I(s, p, o, m)
+# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_FOR_179_I(s, p, o, m)
+# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_FOR_180_I(s, p, o, m)
+# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_FOR_181_I(s, p, o, m)
+# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_FOR_182_I(s, p, o, m)
+# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_FOR_183_I(s, p, o, m)
+# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_FOR_184_I(s, p, o, m)
+# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_FOR_185_I(s, p, o, m)
+# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_FOR_186_I(s, p, o, m)
+# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_FOR_187_I(s, p, o, m)
+# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_FOR_188_I(s, p, o, m)
+# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_FOR_189_I(s, p, o, m)
+# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_FOR_190_I(s, p, o, m)
+# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_FOR_191_I(s, p, o, m)
+# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_FOR_192_I(s, p, o, m)
+# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_FOR_193_I(s, p, o, m)
+# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_FOR_194_I(s, p, o, m)
+# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_FOR_195_I(s, p, o, m)
+# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_FOR_196_I(s, p, o, m)
+# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_FOR_197_I(s, p, o, m)
+# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_FOR_198_I(s, p, o, m)
+# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_FOR_199_I(s, p, o, m)
+# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_FOR_200_I(s, p, o, m)
+# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_FOR_201_I(s, p, o, m)
+# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_FOR_202_I(s, p, o, m)
+# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_FOR_203_I(s, p, o, m)
+# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_FOR_204_I(s, p, o, m)
+# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_FOR_205_I(s, p, o, m)
+# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_FOR_206_I(s, p, o, m)
+# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_FOR_207_I(s, p, o, m)
+# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_FOR_208_I(s, p, o, m)
+# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_FOR_209_I(s, p, o, m)
+# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_FOR_210_I(s, p, o, m)
+# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_FOR_211_I(s, p, o, m)
+# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_FOR_212_I(s, p, o, m)
+# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_FOR_213_I(s, p, o, m)
+# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_FOR_214_I(s, p, o, m)
+# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_FOR_215_I(s, p, o, m)
+# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_FOR_216_I(s, p, o, m)
+# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_FOR_217_I(s, p, o, m)
+# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_FOR_218_I(s, p, o, m)
+# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_FOR_219_I(s, p, o, m)
+# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_FOR_220_I(s, p, o, m)
+# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_FOR_221_I(s, p, o, m)
+# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_FOR_222_I(s, p, o, m)
+# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_FOR_223_I(s, p, o, m)
+# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_FOR_224_I(s, p, o, m)
+# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_FOR_225_I(s, p, o, m)
+# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_FOR_226_I(s, p, o, m)
+# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_FOR_227_I(s, p, o, m)
+# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_FOR_228_I(s, p, o, m)
+# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_FOR_229_I(s, p, o, m)
+# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_FOR_230_I(s, p, o, m)
+# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_FOR_231_I(s, p, o, m)
+# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_FOR_232_I(s, p, o, m)
+# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_FOR_233_I(s, p, o, m)
+# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_FOR_234_I(s, p, o, m)
+# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_FOR_235_I(s, p, o, m)
+# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_FOR_236_I(s, p, o, m)
+# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_FOR_237_I(s, p, o, m)
+# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_FOR_238_I(s, p, o, m)
+# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_FOR_239_I(s, p, o, m)
+# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_FOR_240_I(s, p, o, m)
+# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_FOR_241_I(s, p, o, m)
+# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_FOR_242_I(s, p, o, m)
+# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_FOR_243_I(s, p, o, m)
+# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_FOR_244_I(s, p, o, m)
+# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_FOR_245_I(s, p, o, m)
+# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_FOR_246_I(s, p, o, m)
+# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_FOR_247_I(s, p, o, m)
+# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_FOR_248_I(s, p, o, m)
+# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_FOR_249_I(s, p, o, m)
+# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_FOR_250_I(s, p, o, m)
+# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_FOR_251_I(s, p, o, m)
+# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_FOR_252_I(s, p, o, m)
+# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_FOR_253_I(s, p, o, m)
+# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_FOR_254_I(s, p, o, m)
+# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_FOR_255_I(s, p, o, m)
+# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_FOR_256_I(s, p, o, m)
+#
+# define BOOST_PP_FOR_1_I(s, p, o, m) BOOST_PP_IF(p(2, s), m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IF(p(2, s), BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(o(2, s), p, o, m)
+# define BOOST_PP_FOR_2_I(s, p, o, m) BOOST_PP_IF(p(3, s), m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IF(p(3, s), BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(o(3, s), p, o, m)
+# define BOOST_PP_FOR_3_I(s, p, o, m) BOOST_PP_IF(p(4, s), m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IF(p(4, s), BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(o(4, s), p, o, m)
+# define BOOST_PP_FOR_4_I(s, p, o, m) BOOST_PP_IF(p(5, s), m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IF(p(5, s), BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(o(5, s), p, o, m)
+# define BOOST_PP_FOR_5_I(s, p, o, m) BOOST_PP_IF(p(6, s), m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IF(p(6, s), BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(o(6, s), p, o, m)
+# define BOOST_PP_FOR_6_I(s, p, o, m) BOOST_PP_IF(p(7, s), m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IF(p(7, s), BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(o(7, s), p, o, m)
+# define BOOST_PP_FOR_7_I(s, p, o, m) BOOST_PP_IF(p(8, s), m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IF(p(8, s), BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(o(8, s), p, o, m)
+# define BOOST_PP_FOR_8_I(s, p, o, m) BOOST_PP_IF(p(9, s), m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IF(p(9, s), BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(o(9, s), p, o, m)
+# define BOOST_PP_FOR_9_I(s, p, o, m) BOOST_PP_IF(p(10, s), m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IF(p(10, s), BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(o(10, s), p, o, m)
+# define BOOST_PP_FOR_10_I(s, p, o, m) BOOST_PP_IF(p(11, s), m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IF(p(11, s), BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(o(11, s), p, o, m)
+# define BOOST_PP_FOR_11_I(s, p, o, m) BOOST_PP_IF(p(12, s), m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IF(p(12, s), BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(o(12, s), p, o, m)
+# define BOOST_PP_FOR_12_I(s, p, o, m) BOOST_PP_IF(p(13, s), m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IF(p(13, s), BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(o(13, s), p, o, m)
+# define BOOST_PP_FOR_13_I(s, p, o, m) BOOST_PP_IF(p(14, s), m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IF(p(14, s), BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(o(14, s), p, o, m)
+# define BOOST_PP_FOR_14_I(s, p, o, m) BOOST_PP_IF(p(15, s), m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IF(p(15, s), BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(o(15, s), p, o, m)
+# define BOOST_PP_FOR_15_I(s, p, o, m) BOOST_PP_IF(p(16, s), m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IF(p(16, s), BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(o(16, s), p, o, m)
+# define BOOST_PP_FOR_16_I(s, p, o, m) BOOST_PP_IF(p(17, s), m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IF(p(17, s), BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(o(17, s), p, o, m)
+# define BOOST_PP_FOR_17_I(s, p, o, m) BOOST_PP_IF(p(18, s), m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IF(p(18, s), BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(o(18, s), p, o, m)
+# define BOOST_PP_FOR_18_I(s, p, o, m) BOOST_PP_IF(p(19, s), m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IF(p(19, s), BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(o(19, s), p, o, m)
+# define BOOST_PP_FOR_19_I(s, p, o, m) BOOST_PP_IF(p(20, s), m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IF(p(20, s), BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(o(20, s), p, o, m)
+# define BOOST_PP_FOR_20_I(s, p, o, m) BOOST_PP_IF(p(21, s), m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IF(p(21, s), BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(o(21, s), p, o, m)
+# define BOOST_PP_FOR_21_I(s, p, o, m) BOOST_PP_IF(p(22, s), m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IF(p(22, s), BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(o(22, s), p, o, m)
+# define BOOST_PP_FOR_22_I(s, p, o, m) BOOST_PP_IF(p(23, s), m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IF(p(23, s), BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(o(23, s), p, o, m)
+# define BOOST_PP_FOR_23_I(s, p, o, m) BOOST_PP_IF(p(24, s), m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IF(p(24, s), BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(o(24, s), p, o, m)
+# define BOOST_PP_FOR_24_I(s, p, o, m) BOOST_PP_IF(p(25, s), m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IF(p(25, s), BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(o(25, s), p, o, m)
+# define BOOST_PP_FOR_25_I(s, p, o, m) BOOST_PP_IF(p(26, s), m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IF(p(26, s), BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(o(26, s), p, o, m)
+# define BOOST_PP_FOR_26_I(s, p, o, m) BOOST_PP_IF(p(27, s), m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IF(p(27, s), BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(o(27, s), p, o, m)
+# define BOOST_PP_FOR_27_I(s, p, o, m) BOOST_PP_IF(p(28, s), m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IF(p(28, s), BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(o(28, s), p, o, m)
+# define BOOST_PP_FOR_28_I(s, p, o, m) BOOST_PP_IF(p(29, s), m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IF(p(29, s), BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(o(29, s), p, o, m)
+# define BOOST_PP_FOR_29_I(s, p, o, m) BOOST_PP_IF(p(30, s), m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IF(p(30, s), BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(o(30, s), p, o, m)
+# define BOOST_PP_FOR_30_I(s, p, o, m) BOOST_PP_IF(p(31, s), m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IF(p(31, s), BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(o(31, s), p, o, m)
+# define BOOST_PP_FOR_31_I(s, p, o, m) BOOST_PP_IF(p(32, s), m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IF(p(32, s), BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(o(32, s), p, o, m)
+# define BOOST_PP_FOR_32_I(s, p, o, m) BOOST_PP_IF(p(33, s), m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IF(p(33, s), BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(o(33, s), p, o, m)
+# define BOOST_PP_FOR_33_I(s, p, o, m) BOOST_PP_IF(p(34, s), m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IF(p(34, s), BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(o(34, s), p, o, m)
+# define BOOST_PP_FOR_34_I(s, p, o, m) BOOST_PP_IF(p(35, s), m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IF(p(35, s), BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(o(35, s), p, o, m)
+# define BOOST_PP_FOR_35_I(s, p, o, m) BOOST_PP_IF(p(36, s), m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IF(p(36, s), BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(o(36, s), p, o, m)
+# define BOOST_PP_FOR_36_I(s, p, o, m) BOOST_PP_IF(p(37, s), m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IF(p(37, s), BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(o(37, s), p, o, m)
+# define BOOST_PP_FOR_37_I(s, p, o, m) BOOST_PP_IF(p(38, s), m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IF(p(38, s), BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(o(38, s), p, o, m)
+# define BOOST_PP_FOR_38_I(s, p, o, m) BOOST_PP_IF(p(39, s), m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IF(p(39, s), BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(o(39, s), p, o, m)
+# define BOOST_PP_FOR_39_I(s, p, o, m) BOOST_PP_IF(p(40, s), m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IF(p(40, s), BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(o(40, s), p, o, m)
+# define BOOST_PP_FOR_40_I(s, p, o, m) BOOST_PP_IF(p(41, s), m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IF(p(41, s), BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(o(41, s), p, o, m)
+# define BOOST_PP_FOR_41_I(s, p, o, m) BOOST_PP_IF(p(42, s), m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IF(p(42, s), BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(o(42, s), p, o, m)
+# define BOOST_PP_FOR_42_I(s, p, o, m) BOOST_PP_IF(p(43, s), m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IF(p(43, s), BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(o(43, s), p, o, m)
+# define BOOST_PP_FOR_43_I(s, p, o, m) BOOST_PP_IF(p(44, s), m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IF(p(44, s), BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(o(44, s), p, o, m)
+# define BOOST_PP_FOR_44_I(s, p, o, m) BOOST_PP_IF(p(45, s), m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IF(p(45, s), BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(o(45, s), p, o, m)
+# define BOOST_PP_FOR_45_I(s, p, o, m) BOOST_PP_IF(p(46, s), m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IF(p(46, s), BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(o(46, s), p, o, m)
+# define BOOST_PP_FOR_46_I(s, p, o, m) BOOST_PP_IF(p(47, s), m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IF(p(47, s), BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(o(47, s), p, o, m)
+# define BOOST_PP_FOR_47_I(s, p, o, m) BOOST_PP_IF(p(48, s), m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IF(p(48, s), BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(o(48, s), p, o, m)
+# define BOOST_PP_FOR_48_I(s, p, o, m) BOOST_PP_IF(p(49, s), m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IF(p(49, s), BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(o(49, s), p, o, m)
+# define BOOST_PP_FOR_49_I(s, p, o, m) BOOST_PP_IF(p(50, s), m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IF(p(50, s), BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(o(50, s), p, o, m)
+# define BOOST_PP_FOR_50_I(s, p, o, m) BOOST_PP_IF(p(51, s), m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IF(p(51, s), BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(o(51, s), p, o, m)
+# define BOOST_PP_FOR_51_I(s, p, o, m) BOOST_PP_IF(p(52, s), m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IF(p(52, s), BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(o(52, s), p, o, m)
+# define BOOST_PP_FOR_52_I(s, p, o, m) BOOST_PP_IF(p(53, s), m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IF(p(53, s), BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(o(53, s), p, o, m)
+# define BOOST_PP_FOR_53_I(s, p, o, m) BOOST_PP_IF(p(54, s), m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IF(p(54, s), BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(o(54, s), p, o, m)
+# define BOOST_PP_FOR_54_I(s, p, o, m) BOOST_PP_IF(p(55, s), m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IF(p(55, s), BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(o(55, s), p, o, m)
+# define BOOST_PP_FOR_55_I(s, p, o, m) BOOST_PP_IF(p(56, s), m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IF(p(56, s), BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(o(56, s), p, o, m)
+# define BOOST_PP_FOR_56_I(s, p, o, m) BOOST_PP_IF(p(57, s), m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IF(p(57, s), BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(o(57, s), p, o, m)
+# define BOOST_PP_FOR_57_I(s, p, o, m) BOOST_PP_IF(p(58, s), m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IF(p(58, s), BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(o(58, s), p, o, m)
+# define BOOST_PP_FOR_58_I(s, p, o, m) BOOST_PP_IF(p(59, s), m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IF(p(59, s), BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(o(59, s), p, o, m)
+# define BOOST_PP_FOR_59_I(s, p, o, m) BOOST_PP_IF(p(60, s), m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IF(p(60, s), BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(o(60, s), p, o, m)
+# define BOOST_PP_FOR_60_I(s, p, o, m) BOOST_PP_IF(p(61, s), m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IF(p(61, s), BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(o(61, s), p, o, m)
+# define BOOST_PP_FOR_61_I(s, p, o, m) BOOST_PP_IF(p(62, s), m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IF(p(62, s), BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(o(62, s), p, o, m)
+# define BOOST_PP_FOR_62_I(s, p, o, m) BOOST_PP_IF(p(63, s), m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IF(p(63, s), BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(o(63, s), p, o, m)
+# define BOOST_PP_FOR_63_I(s, p, o, m) BOOST_PP_IF(p(64, s), m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IF(p(64, s), BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(o(64, s), p, o, m)
+# define BOOST_PP_FOR_64_I(s, p, o, m) BOOST_PP_IF(p(65, s), m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IF(p(65, s), BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(o(65, s), p, o, m)
+# define BOOST_PP_FOR_65_I(s, p, o, m) BOOST_PP_IF(p(66, s), m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IF(p(66, s), BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(o(66, s), p, o, m)
+# define BOOST_PP_FOR_66_I(s, p, o, m) BOOST_PP_IF(p(67, s), m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IF(p(67, s), BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(o(67, s), p, o, m)
+# define BOOST_PP_FOR_67_I(s, p, o, m) BOOST_PP_IF(p(68, s), m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IF(p(68, s), BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(o(68, s), p, o, m)
+# define BOOST_PP_FOR_68_I(s, p, o, m) BOOST_PP_IF(p(69, s), m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IF(p(69, s), BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(o(69, s), p, o, m)
+# define BOOST_PP_FOR_69_I(s, p, o, m) BOOST_PP_IF(p(70, s), m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IF(p(70, s), BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(o(70, s), p, o, m)
+# define BOOST_PP_FOR_70_I(s, p, o, m) BOOST_PP_IF(p(71, s), m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IF(p(71, s), BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(o(71, s), p, o, m)
+# define BOOST_PP_FOR_71_I(s, p, o, m) BOOST_PP_IF(p(72, s), m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IF(p(72, s), BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(o(72, s), p, o, m)
+# define BOOST_PP_FOR_72_I(s, p, o, m) BOOST_PP_IF(p(73, s), m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IF(p(73, s), BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(o(73, s), p, o, m)
+# define BOOST_PP_FOR_73_I(s, p, o, m) BOOST_PP_IF(p(74, s), m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IF(p(74, s), BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(o(74, s), p, o, m)
+# define BOOST_PP_FOR_74_I(s, p, o, m) BOOST_PP_IF(p(75, s), m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IF(p(75, s), BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(o(75, s), p, o, m)
+# define BOOST_PP_FOR_75_I(s, p, o, m) BOOST_PP_IF(p(76, s), m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IF(p(76, s), BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(o(76, s), p, o, m)
+# define BOOST_PP_FOR_76_I(s, p, o, m) BOOST_PP_IF(p(77, s), m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IF(p(77, s), BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(o(77, s), p, o, m)
+# define BOOST_PP_FOR_77_I(s, p, o, m) BOOST_PP_IF(p(78, s), m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IF(p(78, s), BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(o(78, s), p, o, m)
+# define BOOST_PP_FOR_78_I(s, p, o, m) BOOST_PP_IF(p(79, s), m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IF(p(79, s), BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(o(79, s), p, o, m)
+# define BOOST_PP_FOR_79_I(s, p, o, m) BOOST_PP_IF(p(80, s), m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IF(p(80, s), BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(o(80, s), p, o, m)
+# define BOOST_PP_FOR_80_I(s, p, o, m) BOOST_PP_IF(p(81, s), m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IF(p(81, s), BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(o(81, s), p, o, m)
+# define BOOST_PP_FOR_81_I(s, p, o, m) BOOST_PP_IF(p(82, s), m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IF(p(82, s), BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(o(82, s), p, o, m)
+# define BOOST_PP_FOR_82_I(s, p, o, m) BOOST_PP_IF(p(83, s), m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IF(p(83, s), BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(o(83, s), p, o, m)
+# define BOOST_PP_FOR_83_I(s, p, o, m) BOOST_PP_IF(p(84, s), m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IF(p(84, s), BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(o(84, s), p, o, m)
+# define BOOST_PP_FOR_84_I(s, p, o, m) BOOST_PP_IF(p(85, s), m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IF(p(85, s), BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(o(85, s), p, o, m)
+# define BOOST_PP_FOR_85_I(s, p, o, m) BOOST_PP_IF(p(86, s), m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IF(p(86, s), BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(o(86, s), p, o, m)
+# define BOOST_PP_FOR_86_I(s, p, o, m) BOOST_PP_IF(p(87, s), m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IF(p(87, s), BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(o(87, s), p, o, m)
+# define BOOST_PP_FOR_87_I(s, p, o, m) BOOST_PP_IF(p(88, s), m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IF(p(88, s), BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(o(88, s), p, o, m)
+# define BOOST_PP_FOR_88_I(s, p, o, m) BOOST_PP_IF(p(89, s), m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IF(p(89, s), BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(o(89, s), p, o, m)
+# define BOOST_PP_FOR_89_I(s, p, o, m) BOOST_PP_IF(p(90, s), m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IF(p(90, s), BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(o(90, s), p, o, m)
+# define BOOST_PP_FOR_90_I(s, p, o, m) BOOST_PP_IF(p(91, s), m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IF(p(91, s), BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(o(91, s), p, o, m)
+# define BOOST_PP_FOR_91_I(s, p, o, m) BOOST_PP_IF(p(92, s), m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IF(p(92, s), BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(o(92, s), p, o, m)
+# define BOOST_PP_FOR_92_I(s, p, o, m) BOOST_PP_IF(p(93, s), m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IF(p(93, s), BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(o(93, s), p, o, m)
+# define BOOST_PP_FOR_93_I(s, p, o, m) BOOST_PP_IF(p(94, s), m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IF(p(94, s), BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(o(94, s), p, o, m)
+# define BOOST_PP_FOR_94_I(s, p, o, m) BOOST_PP_IF(p(95, s), m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IF(p(95, s), BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(o(95, s), p, o, m)
+# define BOOST_PP_FOR_95_I(s, p, o, m) BOOST_PP_IF(p(96, s), m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IF(p(96, s), BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(o(96, s), p, o, m)
+# define BOOST_PP_FOR_96_I(s, p, o, m) BOOST_PP_IF(p(97, s), m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IF(p(97, s), BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(o(97, s), p, o, m)
+# define BOOST_PP_FOR_97_I(s, p, o, m) BOOST_PP_IF(p(98, s), m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IF(p(98, s), BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(o(98, s), p, o, m)
+# define BOOST_PP_FOR_98_I(s, p, o, m) BOOST_PP_IF(p(99, s), m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IF(p(99, s), BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(o(99, s), p, o, m)
+# define BOOST_PP_FOR_99_I(s, p, o, m) BOOST_PP_IF(p(100, s), m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IF(p(100, s), BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(o(100, s), p, o, m)
+# define BOOST_PP_FOR_100_I(s, p, o, m) BOOST_PP_IF(p(101, s), m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IF(p(101, s), BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(o(101, s), p, o, m)
+# define BOOST_PP_FOR_101_I(s, p, o, m) BOOST_PP_IF(p(102, s), m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IF(p(102, s), BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(o(102, s), p, o, m)
+# define BOOST_PP_FOR_102_I(s, p, o, m) BOOST_PP_IF(p(103, s), m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IF(p(103, s), BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(o(103, s), p, o, m)
+# define BOOST_PP_FOR_103_I(s, p, o, m) BOOST_PP_IF(p(104, s), m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IF(p(104, s), BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(o(104, s), p, o, m)
+# define BOOST_PP_FOR_104_I(s, p, o, m) BOOST_PP_IF(p(105, s), m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IF(p(105, s), BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(o(105, s), p, o, m)
+# define BOOST_PP_FOR_105_I(s, p, o, m) BOOST_PP_IF(p(106, s), m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IF(p(106, s), BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(o(106, s), p, o, m)
+# define BOOST_PP_FOR_106_I(s, p, o, m) BOOST_PP_IF(p(107, s), m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IF(p(107, s), BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(o(107, s), p, o, m)
+# define BOOST_PP_FOR_107_I(s, p, o, m) BOOST_PP_IF(p(108, s), m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IF(p(108, s), BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(o(108, s), p, o, m)
+# define BOOST_PP_FOR_108_I(s, p, o, m) BOOST_PP_IF(p(109, s), m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IF(p(109, s), BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(o(109, s), p, o, m)
+# define BOOST_PP_FOR_109_I(s, p, o, m) BOOST_PP_IF(p(110, s), m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IF(p(110, s), BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(o(110, s), p, o, m)
+# define BOOST_PP_FOR_110_I(s, p, o, m) BOOST_PP_IF(p(111, s), m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IF(p(111, s), BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(o(111, s), p, o, m)
+# define BOOST_PP_FOR_111_I(s, p, o, m) BOOST_PP_IF(p(112, s), m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IF(p(112, s), BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(o(112, s), p, o, m)
+# define BOOST_PP_FOR_112_I(s, p, o, m) BOOST_PP_IF(p(113, s), m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IF(p(113, s), BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(o(113, s), p, o, m)
+# define BOOST_PP_FOR_113_I(s, p, o, m) BOOST_PP_IF(p(114, s), m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IF(p(114, s), BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(o(114, s), p, o, m)
+# define BOOST_PP_FOR_114_I(s, p, o, m) BOOST_PP_IF(p(115, s), m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IF(p(115, s), BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(o(115, s), p, o, m)
+# define BOOST_PP_FOR_115_I(s, p, o, m) BOOST_PP_IF(p(116, s), m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IF(p(116, s), BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(o(116, s), p, o, m)
+# define BOOST_PP_FOR_116_I(s, p, o, m) BOOST_PP_IF(p(117, s), m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IF(p(117, s), BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(o(117, s), p, o, m)
+# define BOOST_PP_FOR_117_I(s, p, o, m) BOOST_PP_IF(p(118, s), m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IF(p(118, s), BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(o(118, s), p, o, m)
+# define BOOST_PP_FOR_118_I(s, p, o, m) BOOST_PP_IF(p(119, s), m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IF(p(119, s), BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(o(119, s), p, o, m)
+# define BOOST_PP_FOR_119_I(s, p, o, m) BOOST_PP_IF(p(120, s), m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IF(p(120, s), BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(o(120, s), p, o, m)
+# define BOOST_PP_FOR_120_I(s, p, o, m) BOOST_PP_IF(p(121, s), m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IF(p(121, s), BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(o(121, s), p, o, m)
+# define BOOST_PP_FOR_121_I(s, p, o, m) BOOST_PP_IF(p(122, s), m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IF(p(122, s), BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(o(122, s), p, o, m)
+# define BOOST_PP_FOR_122_I(s, p, o, m) BOOST_PP_IF(p(123, s), m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IF(p(123, s), BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(o(123, s), p, o, m)
+# define BOOST_PP_FOR_123_I(s, p, o, m) BOOST_PP_IF(p(124, s), m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IF(p(124, s), BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(o(124, s), p, o, m)
+# define BOOST_PP_FOR_124_I(s, p, o, m) BOOST_PP_IF(p(125, s), m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IF(p(125, s), BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(o(125, s), p, o, m)
+# define BOOST_PP_FOR_125_I(s, p, o, m) BOOST_PP_IF(p(126, s), m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IF(p(126, s), BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(o(126, s), p, o, m)
+# define BOOST_PP_FOR_126_I(s, p, o, m) BOOST_PP_IF(p(127, s), m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IF(p(127, s), BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(o(127, s), p, o, m)
+# define BOOST_PP_FOR_127_I(s, p, o, m) BOOST_PP_IF(p(128, s), m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IF(p(128, s), BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(o(128, s), p, o, m)
+# define BOOST_PP_FOR_128_I(s, p, o, m) BOOST_PP_IF(p(129, s), m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IF(p(129, s), BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(o(129, s), p, o, m)
+# define BOOST_PP_FOR_129_I(s, p, o, m) BOOST_PP_IF(p(130, s), m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IF(p(130, s), BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(o(130, s), p, o, m)
+# define BOOST_PP_FOR_130_I(s, p, o, m) BOOST_PP_IF(p(131, s), m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IF(p(131, s), BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(o(131, s), p, o, m)
+# define BOOST_PP_FOR_131_I(s, p, o, m) BOOST_PP_IF(p(132, s), m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IF(p(132, s), BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(o(132, s), p, o, m)
+# define BOOST_PP_FOR_132_I(s, p, o, m) BOOST_PP_IF(p(133, s), m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IF(p(133, s), BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(o(133, s), p, o, m)
+# define BOOST_PP_FOR_133_I(s, p, o, m) BOOST_PP_IF(p(134, s), m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IF(p(134, s), BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(o(134, s), p, o, m)
+# define BOOST_PP_FOR_134_I(s, p, o, m) BOOST_PP_IF(p(135, s), m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IF(p(135, s), BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(o(135, s), p, o, m)
+# define BOOST_PP_FOR_135_I(s, p, o, m) BOOST_PP_IF(p(136, s), m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IF(p(136, s), BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(o(136, s), p, o, m)
+# define BOOST_PP_FOR_136_I(s, p, o, m) BOOST_PP_IF(p(137, s), m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IF(p(137, s), BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(o(137, s), p, o, m)
+# define BOOST_PP_FOR_137_I(s, p, o, m) BOOST_PP_IF(p(138, s), m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IF(p(138, s), BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(o(138, s), p, o, m)
+# define BOOST_PP_FOR_138_I(s, p, o, m) BOOST_PP_IF(p(139, s), m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IF(p(139, s), BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(o(139, s), p, o, m)
+# define BOOST_PP_FOR_139_I(s, p, o, m) BOOST_PP_IF(p(140, s), m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IF(p(140, s), BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(o(140, s), p, o, m)
+# define BOOST_PP_FOR_140_I(s, p, o, m) BOOST_PP_IF(p(141, s), m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IF(p(141, s), BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(o(141, s), p, o, m)
+# define BOOST_PP_FOR_141_I(s, p, o, m) BOOST_PP_IF(p(142, s), m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IF(p(142, s), BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(o(142, s), p, o, m)
+# define BOOST_PP_FOR_142_I(s, p, o, m) BOOST_PP_IF(p(143, s), m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IF(p(143, s), BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(o(143, s), p, o, m)
+# define BOOST_PP_FOR_143_I(s, p, o, m) BOOST_PP_IF(p(144, s), m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IF(p(144, s), BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(o(144, s), p, o, m)
+# define BOOST_PP_FOR_144_I(s, p, o, m) BOOST_PP_IF(p(145, s), m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IF(p(145, s), BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(o(145, s), p, o, m)
+# define BOOST_PP_FOR_145_I(s, p, o, m) BOOST_PP_IF(p(146, s), m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IF(p(146, s), BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(o(146, s), p, o, m)
+# define BOOST_PP_FOR_146_I(s, p, o, m) BOOST_PP_IF(p(147, s), m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IF(p(147, s), BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(o(147, s), p, o, m)
+# define BOOST_PP_FOR_147_I(s, p, o, m) BOOST_PP_IF(p(148, s), m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IF(p(148, s), BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(o(148, s), p, o, m)
+# define BOOST_PP_FOR_148_I(s, p, o, m) BOOST_PP_IF(p(149, s), m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IF(p(149, s), BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(o(149, s), p, o, m)
+# define BOOST_PP_FOR_149_I(s, p, o, m) BOOST_PP_IF(p(150, s), m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IF(p(150, s), BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(o(150, s), p, o, m)
+# define BOOST_PP_FOR_150_I(s, p, o, m) BOOST_PP_IF(p(151, s), m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IF(p(151, s), BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(o(151, s), p, o, m)
+# define BOOST_PP_FOR_151_I(s, p, o, m) BOOST_PP_IF(p(152, s), m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IF(p(152, s), BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(o(152, s), p, o, m)
+# define BOOST_PP_FOR_152_I(s, p, o, m) BOOST_PP_IF(p(153, s), m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IF(p(153, s), BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(o(153, s), p, o, m)
+# define BOOST_PP_FOR_153_I(s, p, o, m) BOOST_PP_IF(p(154, s), m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IF(p(154, s), BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(o(154, s), p, o, m)
+# define BOOST_PP_FOR_154_I(s, p, o, m) BOOST_PP_IF(p(155, s), m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IF(p(155, s), BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(o(155, s), p, o, m)
+# define BOOST_PP_FOR_155_I(s, p, o, m) BOOST_PP_IF(p(156, s), m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IF(p(156, s), BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(o(156, s), p, o, m)
+# define BOOST_PP_FOR_156_I(s, p, o, m) BOOST_PP_IF(p(157, s), m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IF(p(157, s), BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(o(157, s), p, o, m)
+# define BOOST_PP_FOR_157_I(s, p, o, m) BOOST_PP_IF(p(158, s), m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IF(p(158, s), BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(o(158, s), p, o, m)
+# define BOOST_PP_FOR_158_I(s, p, o, m) BOOST_PP_IF(p(159, s), m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IF(p(159, s), BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(o(159, s), p, o, m)
+# define BOOST_PP_FOR_159_I(s, p, o, m) BOOST_PP_IF(p(160, s), m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IF(p(160, s), BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(o(160, s), p, o, m)
+# define BOOST_PP_FOR_160_I(s, p, o, m) BOOST_PP_IF(p(161, s), m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IF(p(161, s), BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(o(161, s), p, o, m)
+# define BOOST_PP_FOR_161_I(s, p, o, m) BOOST_PP_IF(p(162, s), m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IF(p(162, s), BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(o(162, s), p, o, m)
+# define BOOST_PP_FOR_162_I(s, p, o, m) BOOST_PP_IF(p(163, s), m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IF(p(163, s), BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(o(163, s), p, o, m)
+# define BOOST_PP_FOR_163_I(s, p, o, m) BOOST_PP_IF(p(164, s), m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IF(p(164, s), BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(o(164, s), p, o, m)
+# define BOOST_PP_FOR_164_I(s, p, o, m) BOOST_PP_IF(p(165, s), m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IF(p(165, s), BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(o(165, s), p, o, m)
+# define BOOST_PP_FOR_165_I(s, p, o, m) BOOST_PP_IF(p(166, s), m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IF(p(166, s), BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(o(166, s), p, o, m)
+# define BOOST_PP_FOR_166_I(s, p, o, m) BOOST_PP_IF(p(167, s), m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IF(p(167, s), BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(o(167, s), p, o, m)
+# define BOOST_PP_FOR_167_I(s, p, o, m) BOOST_PP_IF(p(168, s), m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IF(p(168, s), BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(o(168, s), p, o, m)
+# define BOOST_PP_FOR_168_I(s, p, o, m) BOOST_PP_IF(p(169, s), m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IF(p(169, s), BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(o(169, s), p, o, m)
+# define BOOST_PP_FOR_169_I(s, p, o, m) BOOST_PP_IF(p(170, s), m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IF(p(170, s), BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(o(170, s), p, o, m)
+# define BOOST_PP_FOR_170_I(s, p, o, m) BOOST_PP_IF(p(171, s), m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IF(p(171, s), BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(o(171, s), p, o, m)
+# define BOOST_PP_FOR_171_I(s, p, o, m) BOOST_PP_IF(p(172, s), m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IF(p(172, s), BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(o(172, s), p, o, m)
+# define BOOST_PP_FOR_172_I(s, p, o, m) BOOST_PP_IF(p(173, s), m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IF(p(173, s), BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(o(173, s), p, o, m)
+# define BOOST_PP_FOR_173_I(s, p, o, m) BOOST_PP_IF(p(174, s), m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IF(p(174, s), BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(o(174, s), p, o, m)
+# define BOOST_PP_FOR_174_I(s, p, o, m) BOOST_PP_IF(p(175, s), m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IF(p(175, s), BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(o(175, s), p, o, m)
+# define BOOST_PP_FOR_175_I(s, p, o, m) BOOST_PP_IF(p(176, s), m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IF(p(176, s), BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(o(176, s), p, o, m)
+# define BOOST_PP_FOR_176_I(s, p, o, m) BOOST_PP_IF(p(177, s), m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IF(p(177, s), BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(o(177, s), p, o, m)
+# define BOOST_PP_FOR_177_I(s, p, o, m) BOOST_PP_IF(p(178, s), m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IF(p(178, s), BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(o(178, s), p, o, m)
+# define BOOST_PP_FOR_178_I(s, p, o, m) BOOST_PP_IF(p(179, s), m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IF(p(179, s), BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(o(179, s), p, o, m)
+# define BOOST_PP_FOR_179_I(s, p, o, m) BOOST_PP_IF(p(180, s), m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IF(p(180, s), BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(o(180, s), p, o, m)
+# define BOOST_PP_FOR_180_I(s, p, o, m) BOOST_PP_IF(p(181, s), m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IF(p(181, s), BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(o(181, s), p, o, m)
+# define BOOST_PP_FOR_181_I(s, p, o, m) BOOST_PP_IF(p(182, s), m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IF(p(182, s), BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(o(182, s), p, o, m)
+# define BOOST_PP_FOR_182_I(s, p, o, m) BOOST_PP_IF(p(183, s), m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IF(p(183, s), BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(o(183, s), p, o, m)
+# define BOOST_PP_FOR_183_I(s, p, o, m) BOOST_PP_IF(p(184, s), m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IF(p(184, s), BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(o(184, s), p, o, m)
+# define BOOST_PP_FOR_184_I(s, p, o, m) BOOST_PP_IF(p(185, s), m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IF(p(185, s), BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(o(185, s), p, o, m)
+# define BOOST_PP_FOR_185_I(s, p, o, m) BOOST_PP_IF(p(186, s), m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IF(p(186, s), BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(o(186, s), p, o, m)
+# define BOOST_PP_FOR_186_I(s, p, o, m) BOOST_PP_IF(p(187, s), m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IF(p(187, s), BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(o(187, s), p, o, m)
+# define BOOST_PP_FOR_187_I(s, p, o, m) BOOST_PP_IF(p(188, s), m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IF(p(188, s), BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(o(188, s), p, o, m)
+# define BOOST_PP_FOR_188_I(s, p, o, m) BOOST_PP_IF(p(189, s), m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IF(p(189, s), BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(o(189, s), p, o, m)
+# define BOOST_PP_FOR_189_I(s, p, o, m) BOOST_PP_IF(p(190, s), m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IF(p(190, s), BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(o(190, s), p, o, m)
+# define BOOST_PP_FOR_190_I(s, p, o, m) BOOST_PP_IF(p(191, s), m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IF(p(191, s), BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(o(191, s), p, o, m)
+# define BOOST_PP_FOR_191_I(s, p, o, m) BOOST_PP_IF(p(192, s), m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IF(p(192, s), BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(o(192, s), p, o, m)
+# define BOOST_PP_FOR_192_I(s, p, o, m) BOOST_PP_IF(p(193, s), m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IF(p(193, s), BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(o(193, s), p, o, m)
+# define BOOST_PP_FOR_193_I(s, p, o, m) BOOST_PP_IF(p(194, s), m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IF(p(194, s), BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(o(194, s), p, o, m)
+# define BOOST_PP_FOR_194_I(s, p, o, m) BOOST_PP_IF(p(195, s), m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IF(p(195, s), BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(o(195, s), p, o, m)
+# define BOOST_PP_FOR_195_I(s, p, o, m) BOOST_PP_IF(p(196, s), m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IF(p(196, s), BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(o(196, s), p, o, m)
+# define BOOST_PP_FOR_196_I(s, p, o, m) BOOST_PP_IF(p(197, s), m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IF(p(197, s), BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(o(197, s), p, o, m)
+# define BOOST_PP_FOR_197_I(s, p, o, m) BOOST_PP_IF(p(198, s), m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IF(p(198, s), BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(o(198, s), p, o, m)
+# define BOOST_PP_FOR_198_I(s, p, o, m) BOOST_PP_IF(p(199, s), m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IF(p(199, s), BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(o(199, s), p, o, m)
+# define BOOST_PP_FOR_199_I(s, p, o, m) BOOST_PP_IF(p(200, s), m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IF(p(200, s), BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(o(200, s), p, o, m)
+# define BOOST_PP_FOR_200_I(s, p, o, m) BOOST_PP_IF(p(201, s), m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IF(p(201, s), BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(o(201, s), p, o, m)
+# define BOOST_PP_FOR_201_I(s, p, o, m) BOOST_PP_IF(p(202, s), m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IF(p(202, s), BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(o(202, s), p, o, m)
+# define BOOST_PP_FOR_202_I(s, p, o, m) BOOST_PP_IF(p(203, s), m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IF(p(203, s), BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(o(203, s), p, o, m)
+# define BOOST_PP_FOR_203_I(s, p, o, m) BOOST_PP_IF(p(204, s), m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IF(p(204, s), BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(o(204, s), p, o, m)
+# define BOOST_PP_FOR_204_I(s, p, o, m) BOOST_PP_IF(p(205, s), m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IF(p(205, s), BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(o(205, s), p, o, m)
+# define BOOST_PP_FOR_205_I(s, p, o, m) BOOST_PP_IF(p(206, s), m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IF(p(206, s), BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(o(206, s), p, o, m)
+# define BOOST_PP_FOR_206_I(s, p, o, m) BOOST_PP_IF(p(207, s), m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IF(p(207, s), BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(o(207, s), p, o, m)
+# define BOOST_PP_FOR_207_I(s, p, o, m) BOOST_PP_IF(p(208, s), m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IF(p(208, s), BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(o(208, s), p, o, m)
+# define BOOST_PP_FOR_208_I(s, p, o, m) BOOST_PP_IF(p(209, s), m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IF(p(209, s), BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(o(209, s), p, o, m)
+# define BOOST_PP_FOR_209_I(s, p, o, m) BOOST_PP_IF(p(210, s), m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IF(p(210, s), BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(o(210, s), p, o, m)
+# define BOOST_PP_FOR_210_I(s, p, o, m) BOOST_PP_IF(p(211, s), m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IF(p(211, s), BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(o(211, s), p, o, m)
+# define BOOST_PP_FOR_211_I(s, p, o, m) BOOST_PP_IF(p(212, s), m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IF(p(212, s), BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(o(212, s), p, o, m)
+# define BOOST_PP_FOR_212_I(s, p, o, m) BOOST_PP_IF(p(213, s), m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IF(p(213, s), BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(o(213, s), p, o, m)
+# define BOOST_PP_FOR_213_I(s, p, o, m) BOOST_PP_IF(p(214, s), m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IF(p(214, s), BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(o(214, s), p, o, m)
+# define BOOST_PP_FOR_214_I(s, p, o, m) BOOST_PP_IF(p(215, s), m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IF(p(215, s), BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(o(215, s), p, o, m)
+# define BOOST_PP_FOR_215_I(s, p, o, m) BOOST_PP_IF(p(216, s), m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IF(p(216, s), BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(o(216, s), p, o, m)
+# define BOOST_PP_FOR_216_I(s, p, o, m) BOOST_PP_IF(p(217, s), m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IF(p(217, s), BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(o(217, s), p, o, m)
+# define BOOST_PP_FOR_217_I(s, p, o, m) BOOST_PP_IF(p(218, s), m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IF(p(218, s), BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(o(218, s), p, o, m)
+# define BOOST_PP_FOR_218_I(s, p, o, m) BOOST_PP_IF(p(219, s), m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IF(p(219, s), BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(o(219, s), p, o, m)
+# define BOOST_PP_FOR_219_I(s, p, o, m) BOOST_PP_IF(p(220, s), m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IF(p(220, s), BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(o(220, s), p, o, m)
+# define BOOST_PP_FOR_220_I(s, p, o, m) BOOST_PP_IF(p(221, s), m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IF(p(221, s), BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(o(221, s), p, o, m)
+# define BOOST_PP_FOR_221_I(s, p, o, m) BOOST_PP_IF(p(222, s), m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IF(p(222, s), BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(o(222, s), p, o, m)
+# define BOOST_PP_FOR_222_I(s, p, o, m) BOOST_PP_IF(p(223, s), m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IF(p(223, s), BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(o(223, s), p, o, m)
+# define BOOST_PP_FOR_223_I(s, p, o, m) BOOST_PP_IF(p(224, s), m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IF(p(224, s), BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(o(224, s), p, o, m)
+# define BOOST_PP_FOR_224_I(s, p, o, m) BOOST_PP_IF(p(225, s), m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IF(p(225, s), BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(o(225, s), p, o, m)
+# define BOOST_PP_FOR_225_I(s, p, o, m) BOOST_PP_IF(p(226, s), m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IF(p(226, s), BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(o(226, s), p, o, m)
+# define BOOST_PP_FOR_226_I(s, p, o, m) BOOST_PP_IF(p(227, s), m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IF(p(227, s), BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(o(227, s), p, o, m)
+# define BOOST_PP_FOR_227_I(s, p, o, m) BOOST_PP_IF(p(228, s), m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IF(p(228, s), BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(o(228, s), p, o, m)
+# define BOOST_PP_FOR_228_I(s, p, o, m) BOOST_PP_IF(p(229, s), m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IF(p(229, s), BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(o(229, s), p, o, m)
+# define BOOST_PP_FOR_229_I(s, p, o, m) BOOST_PP_IF(p(230, s), m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IF(p(230, s), BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(o(230, s), p, o, m)
+# define BOOST_PP_FOR_230_I(s, p, o, m) BOOST_PP_IF(p(231, s), m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IF(p(231, s), BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(o(231, s), p, o, m)
+# define BOOST_PP_FOR_231_I(s, p, o, m) BOOST_PP_IF(p(232, s), m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IF(p(232, s), BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(o(232, s), p, o, m)
+# define BOOST_PP_FOR_232_I(s, p, o, m) BOOST_PP_IF(p(233, s), m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IF(p(233, s), BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(o(233, s), p, o, m)
+# define BOOST_PP_FOR_233_I(s, p, o, m) BOOST_PP_IF(p(234, s), m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IF(p(234, s), BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(o(234, s), p, o, m)
+# define BOOST_PP_FOR_234_I(s, p, o, m) BOOST_PP_IF(p(235, s), m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IF(p(235, s), BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(o(235, s), p, o, m)
+# define BOOST_PP_FOR_235_I(s, p, o, m) BOOST_PP_IF(p(236, s), m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IF(p(236, s), BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(o(236, s), p, o, m)
+# define BOOST_PP_FOR_236_I(s, p, o, m) BOOST_PP_IF(p(237, s), m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IF(p(237, s), BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(o(237, s), p, o, m)
+# define BOOST_PP_FOR_237_I(s, p, o, m) BOOST_PP_IF(p(238, s), m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IF(p(238, s), BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(o(238, s), p, o, m)
+# define BOOST_PP_FOR_238_I(s, p, o, m) BOOST_PP_IF(p(239, s), m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IF(p(239, s), BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(o(239, s), p, o, m)
+# define BOOST_PP_FOR_239_I(s, p, o, m) BOOST_PP_IF(p(240, s), m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IF(p(240, s), BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(o(240, s), p, o, m)
+# define BOOST_PP_FOR_240_I(s, p, o, m) BOOST_PP_IF(p(241, s), m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IF(p(241, s), BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(o(241, s), p, o, m)
+# define BOOST_PP_FOR_241_I(s, p, o, m) BOOST_PP_IF(p(242, s), m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IF(p(242, s), BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(o(242, s), p, o, m)
+# define BOOST_PP_FOR_242_I(s, p, o, m) BOOST_PP_IF(p(243, s), m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IF(p(243, s), BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(o(243, s), p, o, m)
+# define BOOST_PP_FOR_243_I(s, p, o, m) BOOST_PP_IF(p(244, s), m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IF(p(244, s), BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(o(244, s), p, o, m)
+# define BOOST_PP_FOR_244_I(s, p, o, m) BOOST_PP_IF(p(245, s), m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IF(p(245, s), BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(o(245, s), p, o, m)
+# define BOOST_PP_FOR_245_I(s, p, o, m) BOOST_PP_IF(p(246, s), m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IF(p(246, s), BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(o(246, s), p, o, m)
+# define BOOST_PP_FOR_246_I(s, p, o, m) BOOST_PP_IF(p(247, s), m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IF(p(247, s), BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(o(247, s), p, o, m)
+# define BOOST_PP_FOR_247_I(s, p, o, m) BOOST_PP_IF(p(248, s), m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IF(p(248, s), BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(o(248, s), p, o, m)
+# define BOOST_PP_FOR_248_I(s, p, o, m) BOOST_PP_IF(p(249, s), m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IF(p(249, s), BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(o(249, s), p, o, m)
+# define BOOST_PP_FOR_249_I(s, p, o, m) BOOST_PP_IF(p(250, s), m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IF(p(250, s), BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(o(250, s), p, o, m)
+# define BOOST_PP_FOR_250_I(s, p, o, m) BOOST_PP_IF(p(251, s), m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IF(p(251, s), BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(o(251, s), p, o, m)
+# define BOOST_PP_FOR_251_I(s, p, o, m) BOOST_PP_IF(p(252, s), m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IF(p(252, s), BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(o(252, s), p, o, m)
+# define BOOST_PP_FOR_252_I(s, p, o, m) BOOST_PP_IF(p(253, s), m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IF(p(253, s), BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(o(253, s), p, o, m)
+# define BOOST_PP_FOR_253_I(s, p, o, m) BOOST_PP_IF(p(254, s), m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IF(p(254, s), BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(o(254, s), p, o, m)
+# define BOOST_PP_FOR_254_I(s, p, o, m) BOOST_PP_IF(p(255, s), m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IF(p(255, s), BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(o(255, s), p, o, m)
+# define BOOST_PP_FOR_255_I(s, p, o, m) BOOST_PP_IF(p(256, s), m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IF(p(256, s), BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(o(256, s), p, o, m)
+# define BOOST_PP_FOR_256_I(s, p, o, m) BOOST_PP_IF(p(257, s), m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IF(p(257, s), BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(o(257, s), p, o, m)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/repetition/detail/for.hpp b/vendor/pdalboost/boost/preprocessor/repetition/detail/for.hpp
new file mode 100644
index 0000000..2770f2c
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repetition/detail/for.hpp
@@ -0,0 +1,536 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP
+# define BOOST_PREPROCESSOR_REPETITION_DETAIL_FOR_HPP
+#
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_FOR_1_C(BOOST_PP_BOOL(p(2, s)), s, p, o, m)
+# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_FOR_2_C(BOOST_PP_BOOL(p(3, s)), s, p, o, m)
+# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_FOR_3_C(BOOST_PP_BOOL(p(4, s)), s, p, o, m)
+# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_FOR_4_C(BOOST_PP_BOOL(p(5, s)), s, p, o, m)
+# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_FOR_5_C(BOOST_PP_BOOL(p(6, s)), s, p, o, m)
+# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_FOR_6_C(BOOST_PP_BOOL(p(7, s)), s, p, o, m)
+# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_FOR_7_C(BOOST_PP_BOOL(p(8, s)), s, p, o, m)
+# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_FOR_8_C(BOOST_PP_BOOL(p(9, s)), s, p, o, m)
+# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_FOR_9_C(BOOST_PP_BOOL(p(10, s)), s, p, o, m)
+# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_FOR_10_C(BOOST_PP_BOOL(p(11, s)), s, p, o, m)
+# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_FOR_11_C(BOOST_PP_BOOL(p(12, s)), s, p, o, m)
+# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_FOR_12_C(BOOST_PP_BOOL(p(13, s)), s, p, o, m)
+# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_FOR_13_C(BOOST_PP_BOOL(p(14, s)), s, p, o, m)
+# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_FOR_14_C(BOOST_PP_BOOL(p(15, s)), s, p, o, m)
+# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_FOR_15_C(BOOST_PP_BOOL(p(16, s)), s, p, o, m)
+# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_FOR_16_C(BOOST_PP_BOOL(p(17, s)), s, p, o, m)
+# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_FOR_17_C(BOOST_PP_BOOL(p(18, s)), s, p, o, m)
+# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_FOR_18_C(BOOST_PP_BOOL(p(19, s)), s, p, o, m)
+# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_FOR_19_C(BOOST_PP_BOOL(p(20, s)), s, p, o, m)
+# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_FOR_20_C(BOOST_PP_BOOL(p(21, s)), s, p, o, m)
+# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_FOR_21_C(BOOST_PP_BOOL(p(22, s)), s, p, o, m)
+# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_FOR_22_C(BOOST_PP_BOOL(p(23, s)), s, p, o, m)
+# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_FOR_23_C(BOOST_PP_BOOL(p(24, s)), s, p, o, m)
+# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_FOR_24_C(BOOST_PP_BOOL(p(25, s)), s, p, o, m)
+# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_FOR_25_C(BOOST_PP_BOOL(p(26, s)), s, p, o, m)
+# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_FOR_26_C(BOOST_PP_BOOL(p(27, s)), s, p, o, m)
+# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_FOR_27_C(BOOST_PP_BOOL(p(28, s)), s, p, o, m)
+# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_FOR_28_C(BOOST_PP_BOOL(p(29, s)), s, p, o, m)
+# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_FOR_29_C(BOOST_PP_BOOL(p(30, s)), s, p, o, m)
+# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_FOR_30_C(BOOST_PP_BOOL(p(31, s)), s, p, o, m)
+# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_FOR_31_C(BOOST_PP_BOOL(p(32, s)), s, p, o, m)
+# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_FOR_32_C(BOOST_PP_BOOL(p(33, s)), s, p, o, m)
+# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_FOR_33_C(BOOST_PP_BOOL(p(34, s)), s, p, o, m)
+# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_FOR_34_C(BOOST_PP_BOOL(p(35, s)), s, p, o, m)
+# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_FOR_35_C(BOOST_PP_BOOL(p(36, s)), s, p, o, m)
+# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_FOR_36_C(BOOST_PP_BOOL(p(37, s)), s, p, o, m)
+# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_FOR_37_C(BOOST_PP_BOOL(p(38, s)), s, p, o, m)
+# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_FOR_38_C(BOOST_PP_BOOL(p(39, s)), s, p, o, m)
+# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_FOR_39_C(BOOST_PP_BOOL(p(40, s)), s, p, o, m)
+# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_FOR_40_C(BOOST_PP_BOOL(p(41, s)), s, p, o, m)
+# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_FOR_41_C(BOOST_PP_BOOL(p(42, s)), s, p, o, m)
+# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_FOR_42_C(BOOST_PP_BOOL(p(43, s)), s, p, o, m)
+# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_FOR_43_C(BOOST_PP_BOOL(p(44, s)), s, p, o, m)
+# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_FOR_44_C(BOOST_PP_BOOL(p(45, s)), s, p, o, m)
+# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_FOR_45_C(BOOST_PP_BOOL(p(46, s)), s, p, o, m)
+# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_FOR_46_C(BOOST_PP_BOOL(p(47, s)), s, p, o, m)
+# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_FOR_47_C(BOOST_PP_BOOL(p(48, s)), s, p, o, m)
+# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_FOR_48_C(BOOST_PP_BOOL(p(49, s)), s, p, o, m)
+# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_FOR_49_C(BOOST_PP_BOOL(p(50, s)), s, p, o, m)
+# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_FOR_50_C(BOOST_PP_BOOL(p(51, s)), s, p, o, m)
+# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_FOR_51_C(BOOST_PP_BOOL(p(52, s)), s, p, o, m)
+# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_FOR_52_C(BOOST_PP_BOOL(p(53, s)), s, p, o, m)
+# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_FOR_53_C(BOOST_PP_BOOL(p(54, s)), s, p, o, m)
+# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_FOR_54_C(BOOST_PP_BOOL(p(55, s)), s, p, o, m)
+# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_FOR_55_C(BOOST_PP_BOOL(p(56, s)), s, p, o, m)
+# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_FOR_56_C(BOOST_PP_BOOL(p(57, s)), s, p, o, m)
+# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_FOR_57_C(BOOST_PP_BOOL(p(58, s)), s, p, o, m)
+# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_FOR_58_C(BOOST_PP_BOOL(p(59, s)), s, p, o, m)
+# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_FOR_59_C(BOOST_PP_BOOL(p(60, s)), s, p, o, m)
+# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_FOR_60_C(BOOST_PP_BOOL(p(61, s)), s, p, o, m)
+# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_FOR_61_C(BOOST_PP_BOOL(p(62, s)), s, p, o, m)
+# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_FOR_62_C(BOOST_PP_BOOL(p(63, s)), s, p, o, m)
+# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_FOR_63_C(BOOST_PP_BOOL(p(64, s)), s, p, o, m)
+# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_FOR_64_C(BOOST_PP_BOOL(p(65, s)), s, p, o, m)
+# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_FOR_65_C(BOOST_PP_BOOL(p(66, s)), s, p, o, m)
+# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_FOR_66_C(BOOST_PP_BOOL(p(67, s)), s, p, o, m)
+# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_FOR_67_C(BOOST_PP_BOOL(p(68, s)), s, p, o, m)
+# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_FOR_68_C(BOOST_PP_BOOL(p(69, s)), s, p, o, m)
+# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_FOR_69_C(BOOST_PP_BOOL(p(70, s)), s, p, o, m)
+# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_FOR_70_C(BOOST_PP_BOOL(p(71, s)), s, p, o, m)
+# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_FOR_71_C(BOOST_PP_BOOL(p(72, s)), s, p, o, m)
+# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_FOR_72_C(BOOST_PP_BOOL(p(73, s)), s, p, o, m)
+# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_FOR_73_C(BOOST_PP_BOOL(p(74, s)), s, p, o, m)
+# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_FOR_74_C(BOOST_PP_BOOL(p(75, s)), s, p, o, m)
+# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_FOR_75_C(BOOST_PP_BOOL(p(76, s)), s, p, o, m)
+# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_FOR_76_C(BOOST_PP_BOOL(p(77, s)), s, p, o, m)
+# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_FOR_77_C(BOOST_PP_BOOL(p(78, s)), s, p, o, m)
+# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_FOR_78_C(BOOST_PP_BOOL(p(79, s)), s, p, o, m)
+# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_FOR_79_C(BOOST_PP_BOOL(p(80, s)), s, p, o, m)
+# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_FOR_80_C(BOOST_PP_BOOL(p(81, s)), s, p, o, m)
+# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_FOR_81_C(BOOST_PP_BOOL(p(82, s)), s, p, o, m)
+# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_FOR_82_C(BOOST_PP_BOOL(p(83, s)), s, p, o, m)
+# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_FOR_83_C(BOOST_PP_BOOL(p(84, s)), s, p, o, m)
+# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_FOR_84_C(BOOST_PP_BOOL(p(85, s)), s, p, o, m)
+# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_FOR_85_C(BOOST_PP_BOOL(p(86, s)), s, p, o, m)
+# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_FOR_86_C(BOOST_PP_BOOL(p(87, s)), s, p, o, m)
+# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_FOR_87_C(BOOST_PP_BOOL(p(88, s)), s, p, o, m)
+# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_FOR_88_C(BOOST_PP_BOOL(p(89, s)), s, p, o, m)
+# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_FOR_89_C(BOOST_PP_BOOL(p(90, s)), s, p, o, m)
+# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_FOR_90_C(BOOST_PP_BOOL(p(91, s)), s, p, o, m)
+# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_FOR_91_C(BOOST_PP_BOOL(p(92, s)), s, p, o, m)
+# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_FOR_92_C(BOOST_PP_BOOL(p(93, s)), s, p, o, m)
+# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_FOR_93_C(BOOST_PP_BOOL(p(94, s)), s, p, o, m)
+# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_FOR_94_C(BOOST_PP_BOOL(p(95, s)), s, p, o, m)
+# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_FOR_95_C(BOOST_PP_BOOL(p(96, s)), s, p, o, m)
+# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_FOR_96_C(BOOST_PP_BOOL(p(97, s)), s, p, o, m)
+# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_FOR_97_C(BOOST_PP_BOOL(p(98, s)), s, p, o, m)
+# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_FOR_98_C(BOOST_PP_BOOL(p(99, s)), s, p, o, m)
+# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_FOR_99_C(BOOST_PP_BOOL(p(100, s)), s, p, o, m)
+# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_FOR_100_C(BOOST_PP_BOOL(p(101, s)), s, p, o, m)
+# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_FOR_101_C(BOOST_PP_BOOL(p(102, s)), s, p, o, m)
+# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_FOR_102_C(BOOST_PP_BOOL(p(103, s)), s, p, o, m)
+# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_FOR_103_C(BOOST_PP_BOOL(p(104, s)), s, p, o, m)
+# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_FOR_104_C(BOOST_PP_BOOL(p(105, s)), s, p, o, m)
+# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_FOR_105_C(BOOST_PP_BOOL(p(106, s)), s, p, o, m)
+# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_FOR_106_C(BOOST_PP_BOOL(p(107, s)), s, p, o, m)
+# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_FOR_107_C(BOOST_PP_BOOL(p(108, s)), s, p, o, m)
+# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_FOR_108_C(BOOST_PP_BOOL(p(109, s)), s, p, o, m)
+# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_FOR_109_C(BOOST_PP_BOOL(p(110, s)), s, p, o, m)
+# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_FOR_110_C(BOOST_PP_BOOL(p(111, s)), s, p, o, m)
+# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_FOR_111_C(BOOST_PP_BOOL(p(112, s)), s, p, o, m)
+# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_FOR_112_C(BOOST_PP_BOOL(p(113, s)), s, p, o, m)
+# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_FOR_113_C(BOOST_PP_BOOL(p(114, s)), s, p, o, m)
+# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_FOR_114_C(BOOST_PP_BOOL(p(115, s)), s, p, o, m)
+# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_FOR_115_C(BOOST_PP_BOOL(p(116, s)), s, p, o, m)
+# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_FOR_116_C(BOOST_PP_BOOL(p(117, s)), s, p, o, m)
+# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_FOR_117_C(BOOST_PP_BOOL(p(118, s)), s, p, o, m)
+# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_FOR_118_C(BOOST_PP_BOOL(p(119, s)), s, p, o, m)
+# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_FOR_119_C(BOOST_PP_BOOL(p(120, s)), s, p, o, m)
+# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_FOR_120_C(BOOST_PP_BOOL(p(121, s)), s, p, o, m)
+# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_FOR_121_C(BOOST_PP_BOOL(p(122, s)), s, p, o, m)
+# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_FOR_122_C(BOOST_PP_BOOL(p(123, s)), s, p, o, m)
+# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_FOR_123_C(BOOST_PP_BOOL(p(124, s)), s, p, o, m)
+# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_FOR_124_C(BOOST_PP_BOOL(p(125, s)), s, p, o, m)
+# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_FOR_125_C(BOOST_PP_BOOL(p(126, s)), s, p, o, m)
+# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_FOR_126_C(BOOST_PP_BOOL(p(127, s)), s, p, o, m)
+# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_FOR_127_C(BOOST_PP_BOOL(p(128, s)), s, p, o, m)
+# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_FOR_128_C(BOOST_PP_BOOL(p(129, s)), s, p, o, m)
+# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_FOR_129_C(BOOST_PP_BOOL(p(130, s)), s, p, o, m)
+# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_FOR_130_C(BOOST_PP_BOOL(p(131, s)), s, p, o, m)
+# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_FOR_131_C(BOOST_PP_BOOL(p(132, s)), s, p, o, m)
+# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_FOR_132_C(BOOST_PP_BOOL(p(133, s)), s, p, o, m)
+# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_FOR_133_C(BOOST_PP_BOOL(p(134, s)), s, p, o, m)
+# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_FOR_134_C(BOOST_PP_BOOL(p(135, s)), s, p, o, m)
+# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_FOR_135_C(BOOST_PP_BOOL(p(136, s)), s, p, o, m)
+# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_FOR_136_C(BOOST_PP_BOOL(p(137, s)), s, p, o, m)
+# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_FOR_137_C(BOOST_PP_BOOL(p(138, s)), s, p, o, m)
+# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_FOR_138_C(BOOST_PP_BOOL(p(139, s)), s, p, o, m)
+# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_FOR_139_C(BOOST_PP_BOOL(p(140, s)), s, p, o, m)
+# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_FOR_140_C(BOOST_PP_BOOL(p(141, s)), s, p, o, m)
+# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_FOR_141_C(BOOST_PP_BOOL(p(142, s)), s, p, o, m)
+# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_FOR_142_C(BOOST_PP_BOOL(p(143, s)), s, p, o, m)
+# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_FOR_143_C(BOOST_PP_BOOL(p(144, s)), s, p, o, m)
+# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_FOR_144_C(BOOST_PP_BOOL(p(145, s)), s, p, o, m)
+# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_FOR_145_C(BOOST_PP_BOOL(p(146, s)), s, p, o, m)
+# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_FOR_146_C(BOOST_PP_BOOL(p(147, s)), s, p, o, m)
+# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_FOR_147_C(BOOST_PP_BOOL(p(148, s)), s, p, o, m)
+# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_FOR_148_C(BOOST_PP_BOOL(p(149, s)), s, p, o, m)
+# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_FOR_149_C(BOOST_PP_BOOL(p(150, s)), s, p, o, m)
+# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_FOR_150_C(BOOST_PP_BOOL(p(151, s)), s, p, o, m)
+# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_FOR_151_C(BOOST_PP_BOOL(p(152, s)), s, p, o, m)
+# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_FOR_152_C(BOOST_PP_BOOL(p(153, s)), s, p, o, m)
+# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_FOR_153_C(BOOST_PP_BOOL(p(154, s)), s, p, o, m)
+# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_FOR_154_C(BOOST_PP_BOOL(p(155, s)), s, p, o, m)
+# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_FOR_155_C(BOOST_PP_BOOL(p(156, s)), s, p, o, m)
+# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_FOR_156_C(BOOST_PP_BOOL(p(157, s)), s, p, o, m)
+# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_FOR_157_C(BOOST_PP_BOOL(p(158, s)), s, p, o, m)
+# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_FOR_158_C(BOOST_PP_BOOL(p(159, s)), s, p, o, m)
+# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_FOR_159_C(BOOST_PP_BOOL(p(160, s)), s, p, o, m)
+# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_FOR_160_C(BOOST_PP_BOOL(p(161, s)), s, p, o, m)
+# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_FOR_161_C(BOOST_PP_BOOL(p(162, s)), s, p, o, m)
+# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_FOR_162_C(BOOST_PP_BOOL(p(163, s)), s, p, o, m)
+# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_FOR_163_C(BOOST_PP_BOOL(p(164, s)), s, p, o, m)
+# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_FOR_164_C(BOOST_PP_BOOL(p(165, s)), s, p, o, m)
+# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_FOR_165_C(BOOST_PP_BOOL(p(166, s)), s, p, o, m)
+# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_FOR_166_C(BOOST_PP_BOOL(p(167, s)), s, p, o, m)
+# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_FOR_167_C(BOOST_PP_BOOL(p(168, s)), s, p, o, m)
+# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_FOR_168_C(BOOST_PP_BOOL(p(169, s)), s, p, o, m)
+# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_FOR_169_C(BOOST_PP_BOOL(p(170, s)), s, p, o, m)
+# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_FOR_170_C(BOOST_PP_BOOL(p(171, s)), s, p, o, m)
+# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_FOR_171_C(BOOST_PP_BOOL(p(172, s)), s, p, o, m)
+# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_FOR_172_C(BOOST_PP_BOOL(p(173, s)), s, p, o, m)
+# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_FOR_173_C(BOOST_PP_BOOL(p(174, s)), s, p, o, m)
+# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_FOR_174_C(BOOST_PP_BOOL(p(175, s)), s, p, o, m)
+# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_FOR_175_C(BOOST_PP_BOOL(p(176, s)), s, p, o, m)
+# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_FOR_176_C(BOOST_PP_BOOL(p(177, s)), s, p, o, m)
+# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_FOR_177_C(BOOST_PP_BOOL(p(178, s)), s, p, o, m)
+# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_FOR_178_C(BOOST_PP_BOOL(p(179, s)), s, p, o, m)
+# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_FOR_179_C(BOOST_PP_BOOL(p(180, s)), s, p, o, m)
+# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_FOR_180_C(BOOST_PP_BOOL(p(181, s)), s, p, o, m)
+# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_FOR_181_C(BOOST_PP_BOOL(p(182, s)), s, p, o, m)
+# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_FOR_182_C(BOOST_PP_BOOL(p(183, s)), s, p, o, m)
+# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_FOR_183_C(BOOST_PP_BOOL(p(184, s)), s, p, o, m)
+# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_FOR_184_C(BOOST_PP_BOOL(p(185, s)), s, p, o, m)
+# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_FOR_185_C(BOOST_PP_BOOL(p(186, s)), s, p, o, m)
+# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_FOR_186_C(BOOST_PP_BOOL(p(187, s)), s, p, o, m)
+# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_FOR_187_C(BOOST_PP_BOOL(p(188, s)), s, p, o, m)
+# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_FOR_188_C(BOOST_PP_BOOL(p(189, s)), s, p, o, m)
+# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_FOR_189_C(BOOST_PP_BOOL(p(190, s)), s, p, o, m)
+# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_FOR_190_C(BOOST_PP_BOOL(p(191, s)), s, p, o, m)
+# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_FOR_191_C(BOOST_PP_BOOL(p(192, s)), s, p, o, m)
+# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_FOR_192_C(BOOST_PP_BOOL(p(193, s)), s, p, o, m)
+# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_FOR_193_C(BOOST_PP_BOOL(p(194, s)), s, p, o, m)
+# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_FOR_194_C(BOOST_PP_BOOL(p(195, s)), s, p, o, m)
+# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_FOR_195_C(BOOST_PP_BOOL(p(196, s)), s, p, o, m)
+# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_FOR_196_C(BOOST_PP_BOOL(p(197, s)), s, p, o, m)
+# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_FOR_197_C(BOOST_PP_BOOL(p(198, s)), s, p, o, m)
+# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_FOR_198_C(BOOST_PP_BOOL(p(199, s)), s, p, o, m)
+# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_FOR_199_C(BOOST_PP_BOOL(p(200, s)), s, p, o, m)
+# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_FOR_200_C(BOOST_PP_BOOL(p(201, s)), s, p, o, m)
+# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_FOR_201_C(BOOST_PP_BOOL(p(202, s)), s, p, o, m)
+# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_FOR_202_C(BOOST_PP_BOOL(p(203, s)), s, p, o, m)
+# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_FOR_203_C(BOOST_PP_BOOL(p(204, s)), s, p, o, m)
+# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_FOR_204_C(BOOST_PP_BOOL(p(205, s)), s, p, o, m)
+# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_FOR_205_C(BOOST_PP_BOOL(p(206, s)), s, p, o, m)
+# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_FOR_206_C(BOOST_PP_BOOL(p(207, s)), s, p, o, m)
+# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_FOR_207_C(BOOST_PP_BOOL(p(208, s)), s, p, o, m)
+# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_FOR_208_C(BOOST_PP_BOOL(p(209, s)), s, p, o, m)
+# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_FOR_209_C(BOOST_PP_BOOL(p(210, s)), s, p, o, m)
+# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_FOR_210_C(BOOST_PP_BOOL(p(211, s)), s, p, o, m)
+# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_FOR_211_C(BOOST_PP_BOOL(p(212, s)), s, p, o, m)
+# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_FOR_212_C(BOOST_PP_BOOL(p(213, s)), s, p, o, m)
+# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_FOR_213_C(BOOST_PP_BOOL(p(214, s)), s, p, o, m)
+# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_FOR_214_C(BOOST_PP_BOOL(p(215, s)), s, p, o, m)
+# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_FOR_215_C(BOOST_PP_BOOL(p(216, s)), s, p, o, m)
+# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_FOR_216_C(BOOST_PP_BOOL(p(217, s)), s, p, o, m)
+# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_FOR_217_C(BOOST_PP_BOOL(p(218, s)), s, p, o, m)
+# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_FOR_218_C(BOOST_PP_BOOL(p(219, s)), s, p, o, m)
+# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_FOR_219_C(BOOST_PP_BOOL(p(220, s)), s, p, o, m)
+# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_FOR_220_C(BOOST_PP_BOOL(p(221, s)), s, p, o, m)
+# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_FOR_221_C(BOOST_PP_BOOL(p(222, s)), s, p, o, m)
+# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_FOR_222_C(BOOST_PP_BOOL(p(223, s)), s, p, o, m)
+# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_FOR_223_C(BOOST_PP_BOOL(p(224, s)), s, p, o, m)
+# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_FOR_224_C(BOOST_PP_BOOL(p(225, s)), s, p, o, m)
+# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_FOR_225_C(BOOST_PP_BOOL(p(226, s)), s, p, o, m)
+# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_FOR_226_C(BOOST_PP_BOOL(p(227, s)), s, p, o, m)
+# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_FOR_227_C(BOOST_PP_BOOL(p(228, s)), s, p, o, m)
+# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_FOR_228_C(BOOST_PP_BOOL(p(229, s)), s, p, o, m)
+# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_FOR_229_C(BOOST_PP_BOOL(p(230, s)), s, p, o, m)
+# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_FOR_230_C(BOOST_PP_BOOL(p(231, s)), s, p, o, m)
+# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_FOR_231_C(BOOST_PP_BOOL(p(232, s)), s, p, o, m)
+# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_FOR_232_C(BOOST_PP_BOOL(p(233, s)), s, p, o, m)
+# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_FOR_233_C(BOOST_PP_BOOL(p(234, s)), s, p, o, m)
+# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_FOR_234_C(BOOST_PP_BOOL(p(235, s)), s, p, o, m)
+# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_FOR_235_C(BOOST_PP_BOOL(p(236, s)), s, p, o, m)
+# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_FOR_236_C(BOOST_PP_BOOL(p(237, s)), s, p, o, m)
+# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_FOR_237_C(BOOST_PP_BOOL(p(238, s)), s, p, o, m)
+# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_FOR_238_C(BOOST_PP_BOOL(p(239, s)), s, p, o, m)
+# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_FOR_239_C(BOOST_PP_BOOL(p(240, s)), s, p, o, m)
+# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_FOR_240_C(BOOST_PP_BOOL(p(241, s)), s, p, o, m)
+# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_FOR_241_C(BOOST_PP_BOOL(p(242, s)), s, p, o, m)
+# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_FOR_242_C(BOOST_PP_BOOL(p(243, s)), s, p, o, m)
+# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_FOR_243_C(BOOST_PP_BOOL(p(244, s)), s, p, o, m)
+# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_FOR_244_C(BOOST_PP_BOOL(p(245, s)), s, p, o, m)
+# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_FOR_245_C(BOOST_PP_BOOL(p(246, s)), s, p, o, m)
+# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_FOR_246_C(BOOST_PP_BOOL(p(247, s)), s, p, o, m)
+# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_FOR_247_C(BOOST_PP_BOOL(p(248, s)), s, p, o, m)
+# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_FOR_248_C(BOOST_PP_BOOL(p(249, s)), s, p, o, m)
+# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_FOR_249_C(BOOST_PP_BOOL(p(250, s)), s, p, o, m)
+# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_FOR_250_C(BOOST_PP_BOOL(p(251, s)), s, p, o, m)
+# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_FOR_251_C(BOOST_PP_BOOL(p(252, s)), s, p, o, m)
+# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_FOR_252_C(BOOST_PP_BOOL(p(253, s)), s, p, o, m)
+# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_FOR_253_C(BOOST_PP_BOOL(p(254, s)), s, p, o, m)
+# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_FOR_254_C(BOOST_PP_BOOL(p(255, s)), s, p, o, m)
+# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_FOR_255_C(BOOST_PP_BOOL(p(256, s)), s, p, o, m)
+# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_FOR_256_C(BOOST_PP_BOOL(p(257, s)), s, p, o, m)
+#
+# define BOOST_PP_FOR_1_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IIF(c, BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(2, s), p, o, m)
+# define BOOST_PP_FOR_2_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IIF(c, BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(3, s), p, o, m)
+# define BOOST_PP_FOR_3_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IIF(c, BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(4, s), p, o, m)
+# define BOOST_PP_FOR_4_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IIF(c, BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(5, s), p, o, m)
+# define BOOST_PP_FOR_5_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IIF(c, BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(6, s), p, o, m)
+# define BOOST_PP_FOR_6_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IIF(c, BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(7, s), p, o, m)
+# define BOOST_PP_FOR_7_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IIF(c, BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(8, s), p, o, m)
+# define BOOST_PP_FOR_8_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IIF(c, BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(9, s), p, o, m)
+# define BOOST_PP_FOR_9_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IIF(c, BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(10, s), p, o, m)
+# define BOOST_PP_FOR_10_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IIF(c, BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(11, s), p, o, m)
+# define BOOST_PP_FOR_11_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IIF(c, BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(12, s), p, o, m)
+# define BOOST_PP_FOR_12_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IIF(c, BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(13, s), p, o, m)
+# define BOOST_PP_FOR_13_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IIF(c, BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(14, s), p, o, m)
+# define BOOST_PP_FOR_14_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IIF(c, BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(15, s), p, o, m)
+# define BOOST_PP_FOR_15_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IIF(c, BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(16, s), p, o, m)
+# define BOOST_PP_FOR_16_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IIF(c, BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(17, s), p, o, m)
+# define BOOST_PP_FOR_17_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IIF(c, BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(18, s), p, o, m)
+# define BOOST_PP_FOR_18_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IIF(c, BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(19, s), p, o, m)
+# define BOOST_PP_FOR_19_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IIF(c, BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(20, s), p, o, m)
+# define BOOST_PP_FOR_20_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IIF(c, BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(21, s), p, o, m)
+# define BOOST_PP_FOR_21_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IIF(c, BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(22, s), p, o, m)
+# define BOOST_PP_FOR_22_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IIF(c, BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(23, s), p, o, m)
+# define BOOST_PP_FOR_23_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IIF(c, BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(24, s), p, o, m)
+# define BOOST_PP_FOR_24_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IIF(c, BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(25, s), p, o, m)
+# define BOOST_PP_FOR_25_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IIF(c, BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(26, s), p, o, m)
+# define BOOST_PP_FOR_26_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IIF(c, BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(27, s), p, o, m)
+# define BOOST_PP_FOR_27_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IIF(c, BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(28, s), p, o, m)
+# define BOOST_PP_FOR_28_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IIF(c, BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(29, s), p, o, m)
+# define BOOST_PP_FOR_29_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IIF(c, BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(30, s), p, o, m)
+# define BOOST_PP_FOR_30_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IIF(c, BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(31, s), p, o, m)
+# define BOOST_PP_FOR_31_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IIF(c, BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(32, s), p, o, m)
+# define BOOST_PP_FOR_32_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IIF(c, BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(33, s), p, o, m)
+# define BOOST_PP_FOR_33_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IIF(c, BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(34, s), p, o, m)
+# define BOOST_PP_FOR_34_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IIF(c, BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(35, s), p, o, m)
+# define BOOST_PP_FOR_35_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IIF(c, BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(36, s), p, o, m)
+# define BOOST_PP_FOR_36_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IIF(c, BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(37, s), p, o, m)
+# define BOOST_PP_FOR_37_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IIF(c, BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(38, s), p, o, m)
+# define BOOST_PP_FOR_38_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IIF(c, BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(39, s), p, o, m)
+# define BOOST_PP_FOR_39_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IIF(c, BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(40, s), p, o, m)
+# define BOOST_PP_FOR_40_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IIF(c, BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(41, s), p, o, m)
+# define BOOST_PP_FOR_41_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IIF(c, BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(42, s), p, o, m)
+# define BOOST_PP_FOR_42_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IIF(c, BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(43, s), p, o, m)
+# define BOOST_PP_FOR_43_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IIF(c, BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(44, s), p, o, m)
+# define BOOST_PP_FOR_44_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IIF(c, BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(45, s), p, o, m)
+# define BOOST_PP_FOR_45_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IIF(c, BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(46, s), p, o, m)
+# define BOOST_PP_FOR_46_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IIF(c, BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(47, s), p, o, m)
+# define BOOST_PP_FOR_47_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IIF(c, BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(48, s), p, o, m)
+# define BOOST_PP_FOR_48_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IIF(c, BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(49, s), p, o, m)
+# define BOOST_PP_FOR_49_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IIF(c, BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(50, s), p, o, m)
+# define BOOST_PP_FOR_50_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IIF(c, BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(51, s), p, o, m)
+# define BOOST_PP_FOR_51_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IIF(c, BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(52, s), p, o, m)
+# define BOOST_PP_FOR_52_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IIF(c, BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(53, s), p, o, m)
+# define BOOST_PP_FOR_53_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IIF(c, BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(54, s), p, o, m)
+# define BOOST_PP_FOR_54_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IIF(c, BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(55, s), p, o, m)
+# define BOOST_PP_FOR_55_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IIF(c, BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(56, s), p, o, m)
+# define BOOST_PP_FOR_56_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IIF(c, BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(57, s), p, o, m)
+# define BOOST_PP_FOR_57_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IIF(c, BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(58, s), p, o, m)
+# define BOOST_PP_FOR_58_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IIF(c, BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(59, s), p, o, m)
+# define BOOST_PP_FOR_59_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IIF(c, BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(60, s), p, o, m)
+# define BOOST_PP_FOR_60_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IIF(c, BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(61, s), p, o, m)
+# define BOOST_PP_FOR_61_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IIF(c, BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(62, s), p, o, m)
+# define BOOST_PP_FOR_62_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IIF(c, BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(63, s), p, o, m)
+# define BOOST_PP_FOR_63_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IIF(c, BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(64, s), p, o, m)
+# define BOOST_PP_FOR_64_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IIF(c, BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(65, s), p, o, m)
+# define BOOST_PP_FOR_65_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IIF(c, BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(66, s), p, o, m)
+# define BOOST_PP_FOR_66_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IIF(c, BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(67, s), p, o, m)
+# define BOOST_PP_FOR_67_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IIF(c, BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(68, s), p, o, m)
+# define BOOST_PP_FOR_68_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IIF(c, BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(69, s), p, o, m)
+# define BOOST_PP_FOR_69_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IIF(c, BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(70, s), p, o, m)
+# define BOOST_PP_FOR_70_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IIF(c, BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(71, s), p, o, m)
+# define BOOST_PP_FOR_71_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IIF(c, BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(72, s), p, o, m)
+# define BOOST_PP_FOR_72_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IIF(c, BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(73, s), p, o, m)
+# define BOOST_PP_FOR_73_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IIF(c, BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(74, s), p, o, m)
+# define BOOST_PP_FOR_74_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IIF(c, BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(75, s), p, o, m)
+# define BOOST_PP_FOR_75_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IIF(c, BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(76, s), p, o, m)
+# define BOOST_PP_FOR_76_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IIF(c, BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(77, s), p, o, m)
+# define BOOST_PP_FOR_77_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IIF(c, BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(78, s), p, o, m)
+# define BOOST_PP_FOR_78_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IIF(c, BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(79, s), p, o, m)
+# define BOOST_PP_FOR_79_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IIF(c, BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(80, s), p, o, m)
+# define BOOST_PP_FOR_80_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IIF(c, BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(81, s), p, o, m)
+# define BOOST_PP_FOR_81_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IIF(c, BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(82, s), p, o, m)
+# define BOOST_PP_FOR_82_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IIF(c, BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(83, s), p, o, m)
+# define BOOST_PP_FOR_83_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IIF(c, BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(84, s), p, o, m)
+# define BOOST_PP_FOR_84_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IIF(c, BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(85, s), p, o, m)
+# define BOOST_PP_FOR_85_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IIF(c, BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(86, s), p, o, m)
+# define BOOST_PP_FOR_86_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IIF(c, BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(87, s), p, o, m)
+# define BOOST_PP_FOR_87_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IIF(c, BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(88, s), p, o, m)
+# define BOOST_PP_FOR_88_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IIF(c, BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(89, s), p, o, m)
+# define BOOST_PP_FOR_89_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IIF(c, BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(90, s), p, o, m)
+# define BOOST_PP_FOR_90_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IIF(c, BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(91, s), p, o, m)
+# define BOOST_PP_FOR_91_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IIF(c, BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(92, s), p, o, m)
+# define BOOST_PP_FOR_92_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IIF(c, BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(93, s), p, o, m)
+# define BOOST_PP_FOR_93_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IIF(c, BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(94, s), p, o, m)
+# define BOOST_PP_FOR_94_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IIF(c, BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(95, s), p, o, m)
+# define BOOST_PP_FOR_95_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IIF(c, BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(96, s), p, o, m)
+# define BOOST_PP_FOR_96_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IIF(c, BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(97, s), p, o, m)
+# define BOOST_PP_FOR_97_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IIF(c, BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(98, s), p, o, m)
+# define BOOST_PP_FOR_98_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IIF(c, BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(99, s), p, o, m)
+# define BOOST_PP_FOR_99_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IIF(c, BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(100, s), p, o, m)
+# define BOOST_PP_FOR_100_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IIF(c, BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(101, s), p, o, m)
+# define BOOST_PP_FOR_101_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IIF(c, BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(102, s), p, o, m)
+# define BOOST_PP_FOR_102_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IIF(c, BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(103, s), p, o, m)
+# define BOOST_PP_FOR_103_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IIF(c, BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(104, s), p, o, m)
+# define BOOST_PP_FOR_104_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IIF(c, BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(105, s), p, o, m)
+# define BOOST_PP_FOR_105_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IIF(c, BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(106, s), p, o, m)
+# define BOOST_PP_FOR_106_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IIF(c, BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(107, s), p, o, m)
+# define BOOST_PP_FOR_107_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IIF(c, BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(108, s), p, o, m)
+# define BOOST_PP_FOR_108_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IIF(c, BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(109, s), p, o, m)
+# define BOOST_PP_FOR_109_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IIF(c, BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(110, s), p, o, m)
+# define BOOST_PP_FOR_110_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IIF(c, BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(111, s), p, o, m)
+# define BOOST_PP_FOR_111_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IIF(c, BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(112, s), p, o, m)
+# define BOOST_PP_FOR_112_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IIF(c, BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(113, s), p, o, m)
+# define BOOST_PP_FOR_113_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IIF(c, BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(114, s), p, o, m)
+# define BOOST_PP_FOR_114_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IIF(c, BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(115, s), p, o, m)
+# define BOOST_PP_FOR_115_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IIF(c, BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(116, s), p, o, m)
+# define BOOST_PP_FOR_116_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IIF(c, BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(117, s), p, o, m)
+# define BOOST_PP_FOR_117_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IIF(c, BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(118, s), p, o, m)
+# define BOOST_PP_FOR_118_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IIF(c, BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(119, s), p, o, m)
+# define BOOST_PP_FOR_119_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IIF(c, BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(120, s), p, o, m)
+# define BOOST_PP_FOR_120_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IIF(c, BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(121, s), p, o, m)
+# define BOOST_PP_FOR_121_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IIF(c, BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(122, s), p, o, m)
+# define BOOST_PP_FOR_122_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IIF(c, BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(123, s), p, o, m)
+# define BOOST_PP_FOR_123_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IIF(c, BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(124, s), p, o, m)
+# define BOOST_PP_FOR_124_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IIF(c, BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(125, s), p, o, m)
+# define BOOST_PP_FOR_125_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IIF(c, BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(126, s), p, o, m)
+# define BOOST_PP_FOR_126_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IIF(c, BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(127, s), p, o, m)
+# define BOOST_PP_FOR_127_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IIF(c, BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(128, s), p, o, m)
+# define BOOST_PP_FOR_128_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IIF(c, BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(129, s), p, o, m)
+# define BOOST_PP_FOR_129_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IIF(c, BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(130, s), p, o, m)
+# define BOOST_PP_FOR_130_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IIF(c, BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(131, s), p, o, m)
+# define BOOST_PP_FOR_131_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IIF(c, BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(132, s), p, o, m)
+# define BOOST_PP_FOR_132_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IIF(c, BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(133, s), p, o, m)
+# define BOOST_PP_FOR_133_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IIF(c, BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(134, s), p, o, m)
+# define BOOST_PP_FOR_134_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IIF(c, BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(135, s), p, o, m)
+# define BOOST_PP_FOR_135_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IIF(c, BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(136, s), p, o, m)
+# define BOOST_PP_FOR_136_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IIF(c, BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(137, s), p, o, m)
+# define BOOST_PP_FOR_137_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IIF(c, BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(138, s), p, o, m)
+# define BOOST_PP_FOR_138_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IIF(c, BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(139, s), p, o, m)
+# define BOOST_PP_FOR_139_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IIF(c, BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(140, s), p, o, m)
+# define BOOST_PP_FOR_140_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IIF(c, BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(141, s), p, o, m)
+# define BOOST_PP_FOR_141_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IIF(c, BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(142, s), p, o, m)
+# define BOOST_PP_FOR_142_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IIF(c, BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(143, s), p, o, m)
+# define BOOST_PP_FOR_143_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IIF(c, BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(144, s), p, o, m)
+# define BOOST_PP_FOR_144_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IIF(c, BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(145, s), p, o, m)
+# define BOOST_PP_FOR_145_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IIF(c, BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(146, s), p, o, m)
+# define BOOST_PP_FOR_146_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IIF(c, BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(147, s), p, o, m)
+# define BOOST_PP_FOR_147_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IIF(c, BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(148, s), p, o, m)
+# define BOOST_PP_FOR_148_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IIF(c, BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(149, s), p, o, m)
+# define BOOST_PP_FOR_149_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IIF(c, BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(150, s), p, o, m)
+# define BOOST_PP_FOR_150_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IIF(c, BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(151, s), p, o, m)
+# define BOOST_PP_FOR_151_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IIF(c, BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(152, s), p, o, m)
+# define BOOST_PP_FOR_152_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IIF(c, BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(153, s), p, o, m)
+# define BOOST_PP_FOR_153_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IIF(c, BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(154, s), p, o, m)
+# define BOOST_PP_FOR_154_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IIF(c, BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(155, s), p, o, m)
+# define BOOST_PP_FOR_155_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IIF(c, BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(156, s), p, o, m)
+# define BOOST_PP_FOR_156_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IIF(c, BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(157, s), p, o, m)
+# define BOOST_PP_FOR_157_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IIF(c, BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(158, s), p, o, m)
+# define BOOST_PP_FOR_158_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IIF(c, BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(159, s), p, o, m)
+# define BOOST_PP_FOR_159_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IIF(c, BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(160, s), p, o, m)
+# define BOOST_PP_FOR_160_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IIF(c, BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(161, s), p, o, m)
+# define BOOST_PP_FOR_161_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IIF(c, BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(162, s), p, o, m)
+# define BOOST_PP_FOR_162_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IIF(c, BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(163, s), p, o, m)
+# define BOOST_PP_FOR_163_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IIF(c, BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(164, s), p, o, m)
+# define BOOST_PP_FOR_164_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IIF(c, BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(165, s), p, o, m)
+# define BOOST_PP_FOR_165_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IIF(c, BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(166, s), p, o, m)
+# define BOOST_PP_FOR_166_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IIF(c, BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(167, s), p, o, m)
+# define BOOST_PP_FOR_167_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IIF(c, BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(168, s), p, o, m)
+# define BOOST_PP_FOR_168_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IIF(c, BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(169, s), p, o, m)
+# define BOOST_PP_FOR_169_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IIF(c, BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(170, s), p, o, m)
+# define BOOST_PP_FOR_170_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IIF(c, BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(171, s), p, o, m)
+# define BOOST_PP_FOR_171_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IIF(c, BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(172, s), p, o, m)
+# define BOOST_PP_FOR_172_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IIF(c, BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(173, s), p, o, m)
+# define BOOST_PP_FOR_173_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IIF(c, BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(174, s), p, o, m)
+# define BOOST_PP_FOR_174_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IIF(c, BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(175, s), p, o, m)
+# define BOOST_PP_FOR_175_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IIF(c, BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(176, s), p, o, m)
+# define BOOST_PP_FOR_176_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IIF(c, BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(177, s), p, o, m)
+# define BOOST_PP_FOR_177_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IIF(c, BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(178, s), p, o, m)
+# define BOOST_PP_FOR_178_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IIF(c, BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(179, s), p, o, m)
+# define BOOST_PP_FOR_179_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IIF(c, BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(180, s), p, o, m)
+# define BOOST_PP_FOR_180_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IIF(c, BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(181, s), p, o, m)
+# define BOOST_PP_FOR_181_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IIF(c, BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(182, s), p, o, m)
+# define BOOST_PP_FOR_182_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IIF(c, BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(183, s), p, o, m)
+# define BOOST_PP_FOR_183_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IIF(c, BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(184, s), p, o, m)
+# define BOOST_PP_FOR_184_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IIF(c, BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(185, s), p, o, m)
+# define BOOST_PP_FOR_185_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IIF(c, BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(186, s), p, o, m)
+# define BOOST_PP_FOR_186_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IIF(c, BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(187, s), p, o, m)
+# define BOOST_PP_FOR_187_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IIF(c, BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(188, s), p, o, m)
+# define BOOST_PP_FOR_188_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IIF(c, BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(189, s), p, o, m)
+# define BOOST_PP_FOR_189_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IIF(c, BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(190, s), p, o, m)
+# define BOOST_PP_FOR_190_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IIF(c, BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(191, s), p, o, m)
+# define BOOST_PP_FOR_191_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IIF(c, BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(192, s), p, o, m)
+# define BOOST_PP_FOR_192_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IIF(c, BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(193, s), p, o, m)
+# define BOOST_PP_FOR_193_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IIF(c, BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(194, s), p, o, m)
+# define BOOST_PP_FOR_194_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IIF(c, BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(195, s), p, o, m)
+# define BOOST_PP_FOR_195_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IIF(c, BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(196, s), p, o, m)
+# define BOOST_PP_FOR_196_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IIF(c, BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(197, s), p, o, m)
+# define BOOST_PP_FOR_197_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IIF(c, BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(198, s), p, o, m)
+# define BOOST_PP_FOR_198_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IIF(c, BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(199, s), p, o, m)
+# define BOOST_PP_FOR_199_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IIF(c, BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(200, s), p, o, m)
+# define BOOST_PP_FOR_200_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IIF(c, BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(201, s), p, o, m)
+# define BOOST_PP_FOR_201_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IIF(c, BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(202, s), p, o, m)
+# define BOOST_PP_FOR_202_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IIF(c, BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(203, s), p, o, m)
+# define BOOST_PP_FOR_203_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IIF(c, BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(204, s), p, o, m)
+# define BOOST_PP_FOR_204_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IIF(c, BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(205, s), p, o, m)
+# define BOOST_PP_FOR_205_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IIF(c, BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(206, s), p, o, m)
+# define BOOST_PP_FOR_206_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IIF(c, BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(207, s), p, o, m)
+# define BOOST_PP_FOR_207_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IIF(c, BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(208, s), p, o, m)
+# define BOOST_PP_FOR_208_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IIF(c, BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(209, s), p, o, m)
+# define BOOST_PP_FOR_209_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IIF(c, BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(210, s), p, o, m)
+# define BOOST_PP_FOR_210_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IIF(c, BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(211, s), p, o, m)
+# define BOOST_PP_FOR_211_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IIF(c, BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(212, s), p, o, m)
+# define BOOST_PP_FOR_212_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IIF(c, BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(213, s), p, o, m)
+# define BOOST_PP_FOR_213_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IIF(c, BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(214, s), p, o, m)
+# define BOOST_PP_FOR_214_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IIF(c, BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(215, s), p, o, m)
+# define BOOST_PP_FOR_215_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IIF(c, BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(216, s), p, o, m)
+# define BOOST_PP_FOR_216_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IIF(c, BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(217, s), p, o, m)
+# define BOOST_PP_FOR_217_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IIF(c, BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(218, s), p, o, m)
+# define BOOST_PP_FOR_218_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IIF(c, BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(219, s), p, o, m)
+# define BOOST_PP_FOR_219_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IIF(c, BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(220, s), p, o, m)
+# define BOOST_PP_FOR_220_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IIF(c, BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(221, s), p, o, m)
+# define BOOST_PP_FOR_221_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IIF(c, BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(222, s), p, o, m)
+# define BOOST_PP_FOR_222_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IIF(c, BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(223, s), p, o, m)
+# define BOOST_PP_FOR_223_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IIF(c, BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(224, s), p, o, m)
+# define BOOST_PP_FOR_224_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IIF(c, BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(225, s), p, o, m)
+# define BOOST_PP_FOR_225_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IIF(c, BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(226, s), p, o, m)
+# define BOOST_PP_FOR_226_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IIF(c, BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(227, s), p, o, m)
+# define BOOST_PP_FOR_227_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IIF(c, BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(228, s), p, o, m)
+# define BOOST_PP_FOR_228_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IIF(c, BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(229, s), p, o, m)
+# define BOOST_PP_FOR_229_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IIF(c, BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(230, s), p, o, m)
+# define BOOST_PP_FOR_230_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IIF(c, BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(231, s), p, o, m)
+# define BOOST_PP_FOR_231_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IIF(c, BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(232, s), p, o, m)
+# define BOOST_PP_FOR_232_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IIF(c, BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(233, s), p, o, m)
+# define BOOST_PP_FOR_233_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IIF(c, BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(234, s), p, o, m)
+# define BOOST_PP_FOR_234_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IIF(c, BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(235, s), p, o, m)
+# define BOOST_PP_FOR_235_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IIF(c, BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(236, s), p, o, m)
+# define BOOST_PP_FOR_236_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IIF(c, BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(237, s), p, o, m)
+# define BOOST_PP_FOR_237_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IIF(c, BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(238, s), p, o, m)
+# define BOOST_PP_FOR_238_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IIF(c, BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(239, s), p, o, m)
+# define BOOST_PP_FOR_239_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IIF(c, BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(240, s), p, o, m)
+# define BOOST_PP_FOR_240_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IIF(c, BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(241, s), p, o, m)
+# define BOOST_PP_FOR_241_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IIF(c, BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(242, s), p, o, m)
+# define BOOST_PP_FOR_242_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IIF(c, BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(243, s), p, o, m)
+# define BOOST_PP_FOR_243_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IIF(c, BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(244, s), p, o, m)
+# define BOOST_PP_FOR_244_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IIF(c, BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(245, s), p, o, m)
+# define BOOST_PP_FOR_245_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IIF(c, BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(246, s), p, o, m)
+# define BOOST_PP_FOR_246_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IIF(c, BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(247, s), p, o, m)
+# define BOOST_PP_FOR_247_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IIF(c, BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(248, s), p, o, m)
+# define BOOST_PP_FOR_248_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IIF(c, BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(249, s), p, o, m)
+# define BOOST_PP_FOR_249_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IIF(c, BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(250, s), p, o, m)
+# define BOOST_PP_FOR_250_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IIF(c, BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(251, s), p, o, m)
+# define BOOST_PP_FOR_251_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IIF(c, BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(252, s), p, o, m)
+# define BOOST_PP_FOR_252_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IIF(c, BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(253, s), p, o, m)
+# define BOOST_PP_FOR_253_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IIF(c, BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(254, s), p, o, m)
+# define BOOST_PP_FOR_254_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IIF(c, BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(255, s), p, o, m)
+# define BOOST_PP_FOR_255_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IIF(c, BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(256, s), p, o, m)
+# define BOOST_PP_FOR_256_C(c, s, p, o, m) BOOST_PP_IIF(c, m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IIF(c, BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(BOOST_PP_EXPR_IIF(c, o)(257, s), p, o, m)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/repetition/detail/msvc/for.hpp b/vendor/pdalboost/boost/preprocessor/repetition/detail/msvc/for.hpp
new file mode 100644
index 0000000..35c1996
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repetition/detail/msvc/for.hpp
@@ -0,0 +1,277 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_MSVC_FOR_HPP
+# define BOOST_PREPROCESSOR_REPETITION_DETAIL_MSVC_FOR_HPP
+#
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_IF(p(2, s), m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IF(p(2, s), BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(o(2, s), p, o, m)
+# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_IF(p(3, s), m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IF(p(3, s), BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(o(3, s), p, o, m)
+# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_IF(p(4, s), m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IF(p(4, s), BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(o(4, s), p, o, m)
+# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_IF(p(5, s), m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IF(p(5, s), BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(o(5, s), p, o, m)
+# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_IF(p(6, s), m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IF(p(6, s), BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(o(6, s), p, o, m)
+# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_IF(p(7, s), m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IF(p(7, s), BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(o(7, s), p, o, m)
+# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_IF(p(8, s), m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IF(p(8, s), BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(o(8, s), p, o, m)
+# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_IF(p(9, s), m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IF(p(9, s), BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(o(9, s), p, o, m)
+# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_IF(p(10, s), m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IF(p(10, s), BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(o(10, s), p, o, m)
+# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_IF(p(11, s), m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IF(p(11, s), BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(o(11, s), p, o, m)
+# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_IF(p(12, s), m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IF(p(12, s), BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(o(12, s), p, o, m)
+# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_IF(p(13, s), m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IF(p(13, s), BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(o(13, s), p, o, m)
+# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_IF(p(14, s), m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IF(p(14, s), BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(o(14, s), p, o, m)
+# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_IF(p(15, s), m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IF(p(15, s), BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(o(15, s), p, o, m)
+# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_IF(p(16, s), m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IF(p(16, s), BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(o(16, s), p, o, m)
+# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_IF(p(17, s), m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IF(p(17, s), BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(o(17, s), p, o, m)
+# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_IF(p(18, s), m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IF(p(18, s), BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(o(18, s), p, o, m)
+# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_IF(p(19, s), m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IF(p(19, s), BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(o(19, s), p, o, m)
+# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_IF(p(20, s), m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IF(p(20, s), BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(o(20, s), p, o, m)
+# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_IF(p(21, s), m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IF(p(21, s), BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(o(21, s), p, o, m)
+# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_IF(p(22, s), m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IF(p(22, s), BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(o(22, s), p, o, m)
+# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_IF(p(23, s), m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IF(p(23, s), BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(o(23, s), p, o, m)
+# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_IF(p(24, s), m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IF(p(24, s), BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(o(24, s), p, o, m)
+# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_IF(p(25, s), m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IF(p(25, s), BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(o(25, s), p, o, m)
+# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_IF(p(26, s), m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IF(p(26, s), BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(o(26, s), p, o, m)
+# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_IF(p(27, s), m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IF(p(27, s), BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(o(27, s), p, o, m)
+# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_IF(p(28, s), m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IF(p(28, s), BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(o(28, s), p, o, m)
+# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_IF(p(29, s), m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IF(p(29, s), BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(o(29, s), p, o, m)
+# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_IF(p(30, s), m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IF(p(30, s), BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(o(30, s), p, o, m)
+# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_IF(p(31, s), m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IF(p(31, s), BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(o(31, s), p, o, m)
+# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_IF(p(32, s), m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IF(p(32, s), BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(o(32, s), p, o, m)
+# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_IF(p(33, s), m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IF(p(33, s), BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(o(33, s), p, o, m)
+# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_IF(p(34, s), m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IF(p(34, s), BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(o(34, s), p, o, m)
+# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_IF(p(35, s), m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IF(p(35, s), BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(o(35, s), p, o, m)
+# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_IF(p(36, s), m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IF(p(36, s), BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(o(36, s), p, o, m)
+# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_IF(p(37, s), m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IF(p(37, s), BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(o(37, s), p, o, m)
+# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_IF(p(38, s), m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IF(p(38, s), BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(o(38, s), p, o, m)
+# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_IF(p(39, s), m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IF(p(39, s), BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(o(39, s), p, o, m)
+# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_IF(p(40, s), m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IF(p(40, s), BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(o(40, s), p, o, m)
+# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_IF(p(41, s), m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IF(p(41, s), BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(o(41, s), p, o, m)
+# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_IF(p(42, s), m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IF(p(42, s), BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(o(42, s), p, o, m)
+# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_IF(p(43, s), m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IF(p(43, s), BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(o(43, s), p, o, m)
+# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_IF(p(44, s), m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IF(p(44, s), BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(o(44, s), p, o, m)
+# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_IF(p(45, s), m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IF(p(45, s), BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(o(45, s), p, o, m)
+# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_IF(p(46, s), m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IF(p(46, s), BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(o(46, s), p, o, m)
+# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_IF(p(47, s), m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IF(p(47, s), BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(o(47, s), p, o, m)
+# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_IF(p(48, s), m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IF(p(48, s), BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(o(48, s), p, o, m)
+# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_IF(p(49, s), m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IF(p(49, s), BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(o(49, s), p, o, m)
+# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_IF(p(50, s), m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IF(p(50, s), BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(o(50, s), p, o, m)
+# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_IF(p(51, s), m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IF(p(51, s), BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(o(51, s), p, o, m)
+# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_IF(p(52, s), m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IF(p(52, s), BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(o(52, s), p, o, m)
+# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_IF(p(53, s), m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IF(p(53, s), BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(o(53, s), p, o, m)
+# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_IF(p(54, s), m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IF(p(54, s), BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(o(54, s), p, o, m)
+# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_IF(p(55, s), m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IF(p(55, s), BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(o(55, s), p, o, m)
+# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_IF(p(56, s), m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IF(p(56, s), BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(o(56, s), p, o, m)
+# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_IF(p(57, s), m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IF(p(57, s), BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(o(57, s), p, o, m)
+# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_IF(p(58, s), m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IF(p(58, s), BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(o(58, s), p, o, m)
+# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_IF(p(59, s), m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IF(p(59, s), BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(o(59, s), p, o, m)
+# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_IF(p(60, s), m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IF(p(60, s), BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(o(60, s), p, o, m)
+# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_IF(p(61, s), m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IF(p(61, s), BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(o(61, s), p, o, m)
+# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_IF(p(62, s), m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IF(p(62, s), BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(o(62, s), p, o, m)
+# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_IF(p(63, s), m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IF(p(63, s), BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(o(63, s), p, o, m)
+# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_IF(p(64, s), m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IF(p(64, s), BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(o(64, s), p, o, m)
+# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_IF(p(65, s), m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IF(p(65, s), BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(o(65, s), p, o, m)
+# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_IF(p(66, s), m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IF(p(66, s), BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(o(66, s), p, o, m)
+# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_IF(p(67, s), m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IF(p(67, s), BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(o(67, s), p, o, m)
+# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_IF(p(68, s), m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IF(p(68, s), BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(o(68, s), p, o, m)
+# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_IF(p(69, s), m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IF(p(69, s), BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(o(69, s), p, o, m)
+# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_IF(p(70, s), m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IF(p(70, s), BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(o(70, s), p, o, m)
+# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_IF(p(71, s), m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IF(p(71, s), BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(o(71, s), p, o, m)
+# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_IF(p(72, s), m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IF(p(72, s), BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(o(72, s), p, o, m)
+# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_IF(p(73, s), m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IF(p(73, s), BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(o(73, s), p, o, m)
+# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_IF(p(74, s), m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IF(p(74, s), BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(o(74, s), p, o, m)
+# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_IF(p(75, s), m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IF(p(75, s), BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(o(75, s), p, o, m)
+# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_IF(p(76, s), m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IF(p(76, s), BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(o(76, s), p, o, m)
+# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_IF(p(77, s), m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IF(p(77, s), BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(o(77, s), p, o, m)
+# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_IF(p(78, s), m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IF(p(78, s), BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(o(78, s), p, o, m)
+# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_IF(p(79, s), m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IF(p(79, s), BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(o(79, s), p, o, m)
+# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_IF(p(80, s), m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IF(p(80, s), BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(o(80, s), p, o, m)
+# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_IF(p(81, s), m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IF(p(81, s), BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(o(81, s), p, o, m)
+# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_IF(p(82, s), m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IF(p(82, s), BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(o(82, s), p, o, m)
+# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_IF(p(83, s), m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IF(p(83, s), BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(o(83, s), p, o, m)
+# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_IF(p(84, s), m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IF(p(84, s), BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(o(84, s), p, o, m)
+# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_IF(p(85, s), m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IF(p(85, s), BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(o(85, s), p, o, m)
+# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_IF(p(86, s), m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IF(p(86, s), BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(o(86, s), p, o, m)
+# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_IF(p(87, s), m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IF(p(87, s), BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(o(87, s), p, o, m)
+# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_IF(p(88, s), m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IF(p(88, s), BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(o(88, s), p, o, m)
+# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_IF(p(89, s), m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IF(p(89, s), BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(o(89, s), p, o, m)
+# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_IF(p(90, s), m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IF(p(90, s), BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(o(90, s), p, o, m)
+# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_IF(p(91, s), m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IF(p(91, s), BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(o(91, s), p, o, m)
+# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_IF(p(92, s), m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IF(p(92, s), BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(o(92, s), p, o, m)
+# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_IF(p(93, s), m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IF(p(93, s), BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(o(93, s), p, o, m)
+# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_IF(p(94, s), m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IF(p(94, s), BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(o(94, s), p, o, m)
+# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_IF(p(95, s), m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IF(p(95, s), BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(o(95, s), p, o, m)
+# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_IF(p(96, s), m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IF(p(96, s), BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(o(96, s), p, o, m)
+# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_IF(p(97, s), m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IF(p(97, s), BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(o(97, s), p, o, m)
+# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_IF(p(98, s), m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IF(p(98, s), BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(o(98, s), p, o, m)
+# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_IF(p(99, s), m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IF(p(99, s), BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(o(99, s), p, o, m)
+# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_IF(p(100, s), m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IF(p(100, s), BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(o(100, s), p, o, m)
+# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_IF(p(101, s), m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IF(p(101, s), BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(o(101, s), p, o, m)
+# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_IF(p(102, s), m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IF(p(102, s), BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(o(102, s), p, o, m)
+# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_IF(p(103, s), m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IF(p(103, s), BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(o(103, s), p, o, m)
+# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_IF(p(104, s), m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IF(p(104, s), BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(o(104, s), p, o, m)
+# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_IF(p(105, s), m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IF(p(105, s), BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(o(105, s), p, o, m)
+# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_IF(p(106, s), m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IF(p(106, s), BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(o(106, s), p, o, m)
+# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_IF(p(107, s), m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IF(p(107, s), BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(o(107, s), p, o, m)
+# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_IF(p(108, s), m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IF(p(108, s), BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(o(108, s), p, o, m)
+# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_IF(p(109, s), m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IF(p(109, s), BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(o(109, s), p, o, m)
+# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_IF(p(110, s), m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IF(p(110, s), BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(o(110, s), p, o, m)
+# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_IF(p(111, s), m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IF(p(111, s), BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(o(111, s), p, o, m)
+# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_IF(p(112, s), m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IF(p(112, s), BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(o(112, s), p, o, m)
+# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_IF(p(113, s), m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IF(p(113, s), BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(o(113, s), p, o, m)
+# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_IF(p(114, s), m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IF(p(114, s), BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(o(114, s), p, o, m)
+# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_IF(p(115, s), m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IF(p(115, s), BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(o(115, s), p, o, m)
+# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_IF(p(116, s), m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IF(p(116, s), BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(o(116, s), p, o, m)
+# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_IF(p(117, s), m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IF(p(117, s), BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(o(117, s), p, o, m)
+# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_IF(p(118, s), m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IF(p(118, s), BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(o(118, s), p, o, m)
+# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_IF(p(119, s), m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IF(p(119, s), BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(o(119, s), p, o, m)
+# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_IF(p(120, s), m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IF(p(120, s), BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(o(120, s), p, o, m)
+# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_IF(p(121, s), m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IF(p(121, s), BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(o(121, s), p, o, m)
+# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_IF(p(122, s), m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IF(p(122, s), BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(o(122, s), p, o, m)
+# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_IF(p(123, s), m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IF(p(123, s), BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(o(123, s), p, o, m)
+# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_IF(p(124, s), m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IF(p(124, s), BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(o(124, s), p, o, m)
+# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_IF(p(125, s), m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IF(p(125, s), BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(o(125, s), p, o, m)
+# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_IF(p(126, s), m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IF(p(126, s), BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(o(126, s), p, o, m)
+# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_IF(p(127, s), m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IF(p(127, s), BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(o(127, s), p, o, m)
+# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_IF(p(128, s), m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IF(p(128, s), BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(o(128, s), p, o, m)
+# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_IF(p(129, s), m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IF(p(129, s), BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(o(129, s), p, o, m)
+# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_IF(p(130, s), m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IF(p(130, s), BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(o(130, s), p, o, m)
+# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_IF(p(131, s), m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IF(p(131, s), BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(o(131, s), p, o, m)
+# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_IF(p(132, s), m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IF(p(132, s), BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(o(132, s), p, o, m)
+# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_IF(p(133, s), m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IF(p(133, s), BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(o(133, s), p, o, m)
+# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_IF(p(134, s), m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IF(p(134, s), BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(o(134, s), p, o, m)
+# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_IF(p(135, s), m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IF(p(135, s), BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(o(135, s), p, o, m)
+# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_IF(p(136, s), m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IF(p(136, s), BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(o(136, s), p, o, m)
+# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_IF(p(137, s), m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IF(p(137, s), BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(o(137, s), p, o, m)
+# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_IF(p(138, s), m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IF(p(138, s), BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(o(138, s), p, o, m)
+# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_IF(p(139, s), m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IF(p(139, s), BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(o(139, s), p, o, m)
+# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_IF(p(140, s), m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IF(p(140, s), BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(o(140, s), p, o, m)
+# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_IF(p(141, s), m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IF(p(141, s), BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(o(141, s), p, o, m)
+# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_IF(p(142, s), m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IF(p(142, s), BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(o(142, s), p, o, m)
+# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_IF(p(143, s), m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IF(p(143, s), BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(o(143, s), p, o, m)
+# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_IF(p(144, s), m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IF(p(144, s), BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(o(144, s), p, o, m)
+# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_IF(p(145, s), m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IF(p(145, s), BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(o(145, s), p, o, m)
+# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_IF(p(146, s), m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IF(p(146, s), BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(o(146, s), p, o, m)
+# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_IF(p(147, s), m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IF(p(147, s), BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(o(147, s), p, o, m)
+# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_IF(p(148, s), m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IF(p(148, s), BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(o(148, s), p, o, m)
+# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_IF(p(149, s), m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IF(p(149, s), BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(o(149, s), p, o, m)
+# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_IF(p(150, s), m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IF(p(150, s), BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(o(150, s), p, o, m)
+# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_IF(p(151, s), m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IF(p(151, s), BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(o(151, s), p, o, m)
+# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_IF(p(152, s), m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IF(p(152, s), BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(o(152, s), p, o, m)
+# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_IF(p(153, s), m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IF(p(153, s), BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(o(153, s), p, o, m)
+# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_IF(p(154, s), m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IF(p(154, s), BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(o(154, s), p, o, m)
+# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_IF(p(155, s), m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IF(p(155, s), BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(o(155, s), p, o, m)
+# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_IF(p(156, s), m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IF(p(156, s), BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(o(156, s), p, o, m)
+# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_IF(p(157, s), m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IF(p(157, s), BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(o(157, s), p, o, m)
+# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_IF(p(158, s), m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IF(p(158, s), BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(o(158, s), p, o, m)
+# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_IF(p(159, s), m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IF(p(159, s), BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(o(159, s), p, o, m)
+# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_IF(p(160, s), m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IF(p(160, s), BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(o(160, s), p, o, m)
+# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_IF(p(161, s), m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IF(p(161, s), BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(o(161, s), p, o, m)
+# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_IF(p(162, s), m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IF(p(162, s), BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(o(162, s), p, o, m)
+# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_IF(p(163, s), m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IF(p(163, s), BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(o(163, s), p, o, m)
+# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_IF(p(164, s), m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IF(p(164, s), BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(o(164, s), p, o, m)
+# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_IF(p(165, s), m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IF(p(165, s), BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(o(165, s), p, o, m)
+# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_IF(p(166, s), m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IF(p(166, s), BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(o(166, s), p, o, m)
+# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_IF(p(167, s), m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IF(p(167, s), BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(o(167, s), p, o, m)
+# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_IF(p(168, s), m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IF(p(168, s), BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(o(168, s), p, o, m)
+# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_IF(p(169, s), m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IF(p(169, s), BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(o(169, s), p, o, m)
+# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_IF(p(170, s), m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IF(p(170, s), BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(o(170, s), p, o, m)
+# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_IF(p(171, s), m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IF(p(171, s), BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(o(171, s), p, o, m)
+# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_IF(p(172, s), m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IF(p(172, s), BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(o(172, s), p, o, m)
+# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_IF(p(173, s), m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IF(p(173, s), BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(o(173, s), p, o, m)
+# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_IF(p(174, s), m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IF(p(174, s), BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(o(174, s), p, o, m)
+# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_IF(p(175, s), m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IF(p(175, s), BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(o(175, s), p, o, m)
+# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_IF(p(176, s), m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IF(p(176, s), BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(o(176, s), p, o, m)
+# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_IF(p(177, s), m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IF(p(177, s), BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(o(177, s), p, o, m)
+# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_IF(p(178, s), m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IF(p(178, s), BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(o(178, s), p, o, m)
+# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_IF(p(179, s), m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IF(p(179, s), BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(o(179, s), p, o, m)
+# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_IF(p(180, s), m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IF(p(180, s), BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(o(180, s), p, o, m)
+# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_IF(p(181, s), m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IF(p(181, s), BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(o(181, s), p, o, m)
+# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_IF(p(182, s), m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IF(p(182, s), BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(o(182, s), p, o, m)
+# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_IF(p(183, s), m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IF(p(183, s), BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(o(183, s), p, o, m)
+# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_IF(p(184, s), m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IF(p(184, s), BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(o(184, s), p, o, m)
+# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_IF(p(185, s), m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IF(p(185, s), BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(o(185, s), p, o, m)
+# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_IF(p(186, s), m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IF(p(186, s), BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(o(186, s), p, o, m)
+# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_IF(p(187, s), m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IF(p(187, s), BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(o(187, s), p, o, m)
+# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_IF(p(188, s), m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IF(p(188, s), BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(o(188, s), p, o, m)
+# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_IF(p(189, s), m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IF(p(189, s), BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(o(189, s), p, o, m)
+# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_IF(p(190, s), m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IF(p(190, s), BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(o(190, s), p, o, m)
+# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_IF(p(191, s), m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IF(p(191, s), BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(o(191, s), p, o, m)
+# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_IF(p(192, s), m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IF(p(192, s), BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(o(192, s), p, o, m)
+# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_IF(p(193, s), m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IF(p(193, s), BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(o(193, s), p, o, m)
+# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_IF(p(194, s), m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IF(p(194, s), BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(o(194, s), p, o, m)
+# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_IF(p(195, s), m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IF(p(195, s), BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(o(195, s), p, o, m)
+# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_IF(p(196, s), m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IF(p(196, s), BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(o(196, s), p, o, m)
+# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_IF(p(197, s), m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IF(p(197, s), BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(o(197, s), p, o, m)
+# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_IF(p(198, s), m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IF(p(198, s), BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(o(198, s), p, o, m)
+# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_IF(p(199, s), m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IF(p(199, s), BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(o(199, s), p, o, m)
+# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_IF(p(200, s), m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IF(p(200, s), BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(o(200, s), p, o, m)
+# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_IF(p(201, s), m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IF(p(201, s), BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(o(201, s), p, o, m)
+# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_IF(p(202, s), m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IF(p(202, s), BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(o(202, s), p, o, m)
+# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_IF(p(203, s), m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IF(p(203, s), BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(o(203, s), p, o, m)
+# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_IF(p(204, s), m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IF(p(204, s), BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(o(204, s), p, o, m)
+# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_IF(p(205, s), m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IF(p(205, s), BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(o(205, s), p, o, m)
+# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_IF(p(206, s), m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IF(p(206, s), BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(o(206, s), p, o, m)
+# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_IF(p(207, s), m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IF(p(207, s), BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(o(207, s), p, o, m)
+# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_IF(p(208, s), m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IF(p(208, s), BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(o(208, s), p, o, m)
+# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_IF(p(209, s), m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IF(p(209, s), BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(o(209, s), p, o, m)
+# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_IF(p(210, s), m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IF(p(210, s), BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(o(210, s), p, o, m)
+# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_IF(p(211, s), m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IF(p(211, s), BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(o(211, s), p, o, m)
+# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_IF(p(212, s), m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IF(p(212, s), BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(o(212, s), p, o, m)
+# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_IF(p(213, s), m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IF(p(213, s), BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(o(213, s), p, o, m)
+# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_IF(p(214, s), m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IF(p(214, s), BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(o(214, s), p, o, m)
+# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_IF(p(215, s), m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IF(p(215, s), BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(o(215, s), p, o, m)
+# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_IF(p(216, s), m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IF(p(216, s), BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(o(216, s), p, o, m)
+# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_IF(p(217, s), m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IF(p(217, s), BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(o(217, s), p, o, m)
+# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_IF(p(218, s), m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IF(p(218, s), BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(o(218, s), p, o, m)
+# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_IF(p(219, s), m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IF(p(219, s), BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(o(219, s), p, o, m)
+# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_IF(p(220, s), m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IF(p(220, s), BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(o(220, s), p, o, m)
+# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_IF(p(221, s), m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IF(p(221, s), BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(o(221, s), p, o, m)
+# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_IF(p(222, s), m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IF(p(222, s), BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(o(222, s), p, o, m)
+# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_IF(p(223, s), m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IF(p(223, s), BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(o(223, s), p, o, m)
+# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_IF(p(224, s), m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IF(p(224, s), BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(o(224, s), p, o, m)
+# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_IF(p(225, s), m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IF(p(225, s), BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(o(225, s), p, o, m)
+# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_IF(p(226, s), m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IF(p(226, s), BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(o(226, s), p, o, m)
+# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_IF(p(227, s), m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IF(p(227, s), BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(o(227, s), p, o, m)
+# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_IF(p(228, s), m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IF(p(228, s), BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(o(228, s), p, o, m)
+# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_IF(p(229, s), m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IF(p(229, s), BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(o(229, s), p, o, m)
+# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_IF(p(230, s), m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IF(p(230, s), BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(o(230, s), p, o, m)
+# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_IF(p(231, s), m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IF(p(231, s), BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(o(231, s), p, o, m)
+# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_IF(p(232, s), m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IF(p(232, s), BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(o(232, s), p, o, m)
+# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_IF(p(233, s), m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IF(p(233, s), BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(o(233, s), p, o, m)
+# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_IF(p(234, s), m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IF(p(234, s), BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(o(234, s), p, o, m)
+# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_IF(p(235, s), m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IF(p(235, s), BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(o(235, s), p, o, m)
+# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_IF(p(236, s), m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IF(p(236, s), BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(o(236, s), p, o, m)
+# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_IF(p(237, s), m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IF(p(237, s), BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(o(237, s), p, o, m)
+# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_IF(p(238, s), m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IF(p(238, s), BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(o(238, s), p, o, m)
+# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_IF(p(239, s), m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IF(p(239, s), BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(o(239, s), p, o, m)
+# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_IF(p(240, s), m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IF(p(240, s), BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(o(240, s), p, o, m)
+# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_IF(p(241, s), m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IF(p(241, s), BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(o(241, s), p, o, m)
+# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_IF(p(242, s), m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IF(p(242, s), BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(o(242, s), p, o, m)
+# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_IF(p(243, s), m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IF(p(243, s), BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(o(243, s), p, o, m)
+# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_IF(p(244, s), m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IF(p(244, s), BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(o(244, s), p, o, m)
+# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_IF(p(245, s), m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IF(p(245, s), BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(o(245, s), p, o, m)
+# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_IF(p(246, s), m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IF(p(246, s), BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(o(246, s), p, o, m)
+# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_IF(p(247, s), m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IF(p(247, s), BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(o(247, s), p, o, m)
+# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_IF(p(248, s), m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IF(p(248, s), BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(o(248, s), p, o, m)
+# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_IF(p(249, s), m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IF(p(249, s), BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(o(249, s), p, o, m)
+# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_IF(p(250, s), m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IF(p(250, s), BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(o(250, s), p, o, m)
+# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_IF(p(251, s), m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IF(p(251, s), BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(o(251, s), p, o, m)
+# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_IF(p(252, s), m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IF(p(252, s), BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(o(252, s), p, o, m)
+# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_IF(p(253, s), m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IF(p(253, s), BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(o(253, s), p, o, m)
+# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_IF(p(254, s), m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IF(p(254, s), BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(o(254, s), p, o, m)
+# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_IF(p(255, s), m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IF(p(255, s), BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(o(255, s), p, o, m)
+# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_IF(p(256, s), m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IF(p(256, s), BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(o(256, s), p, o, m)
+# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_IF(p(257, s), m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IF(p(257, s), BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(o(257, s), p, o, m)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/repetition/enum.hpp b/vendor/pdalboost/boost/preprocessor/repetition/enum.hpp
new file mode 100644
index 0000000..0198cd9
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repetition/enum.hpp
@@ -0,0 +1,66 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_ENUM */
+#
+# if 0
+#    define BOOST_PP_ENUM(count, macro, data)
+# endif
+#
+# define BOOST_PP_ENUM BOOST_PP_CAT(BOOST_PP_ENUM_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ENUM_1(c, m, d) BOOST_PP_REPEAT_1(c, BOOST_PP_ENUM_M_1, (m, d))
+#    define BOOST_PP_ENUM_2(c, m, d) BOOST_PP_REPEAT_2(c, BOOST_PP_ENUM_M_2, (m, d))
+#    define BOOST_PP_ENUM_3(c, m, d) BOOST_PP_REPEAT_3(c, BOOST_PP_ENUM_M_3, (m, d))
+# else
+#    define BOOST_PP_ENUM_1(c, m, d) BOOST_PP_ENUM_1_I(c, m, d)
+#    define BOOST_PP_ENUM_2(c, m, d) BOOST_PP_ENUM_2_I(c, m, d)
+#    define BOOST_PP_ENUM_3(c, m, d) BOOST_PP_ENUM_3_I(c, m, d)
+#    define BOOST_PP_ENUM_1_I(c, m, d) BOOST_PP_REPEAT_1(c, BOOST_PP_ENUM_M_1, (m, d))
+#    define BOOST_PP_ENUM_2_I(c, m, d) BOOST_PP_REPEAT_2(c, BOOST_PP_ENUM_M_2, (m, d))
+#    define BOOST_PP_ENUM_3_I(c, m, d) BOOST_PP_REPEAT_3(c, BOOST_PP_ENUM_M_3, (m, d))
+# endif
+#
+# define BOOST_PP_ENUM_4(c, m, d) BOOST_PP_ERROR(0x0003)
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+#    define BOOST_PP_ENUM_M_1(z, n, md) BOOST_PP_ENUM_M_1_IM(z, n, BOOST_PP_TUPLE_REM_2 md)
+#    define BOOST_PP_ENUM_M_2(z, n, md) BOOST_PP_ENUM_M_2_IM(z, n, BOOST_PP_TUPLE_REM_2 md)
+#    define BOOST_PP_ENUM_M_3(z, n, md) BOOST_PP_ENUM_M_3_IM(z, n, BOOST_PP_TUPLE_REM_2 md)
+#    define BOOST_PP_ENUM_M_1_IM(z, n, im) BOOST_PP_ENUM_M_1_I(z, n, im)
+#    define BOOST_PP_ENUM_M_2_IM(z, n, im) BOOST_PP_ENUM_M_2_I(z, n, im)
+#    define BOOST_PP_ENUM_M_3_IM(z, n, im) BOOST_PP_ENUM_M_3_I(z, n, im)
+# else
+#    define BOOST_PP_ENUM_M_1(z, n, md) BOOST_PP_ENUM_M_1_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))
+#    define BOOST_PP_ENUM_M_2(z, n, md) BOOST_PP_ENUM_M_2_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))
+#    define BOOST_PP_ENUM_M_3(z, n, md) BOOST_PP_ENUM_M_3_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, md), BOOST_PP_TUPLE_ELEM(2, 1, md))
+# endif
+#
+# define BOOST_PP_ENUM_M_1_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, n, d)
+# define BOOST_PP_ENUM_M_2_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, n, d)
+# define BOOST_PP_ENUM_M_3_I(z, n, m, d) BOOST_PP_COMMA_IF(n) m(z, n, d)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/repetition/enum_binary_params.hpp b/vendor/pdalboost/boost/preprocessor/repetition/enum_binary_params.hpp
new file mode 100644
index 0000000..a2c1048
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repetition/enum_binary_params.hpp
@@ -0,0 +1,54 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_BINARY_PARAMS_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_BINARY_PARAMS_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_ENUM_BINARY_PARAMS */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ENUM_BINARY_PARAMS(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))
+# else
+#    define BOOST_PP_ENUM_BINARY_PARAMS(count, p1, p2) BOOST_PP_ENUM_BINARY_PARAMS_I(count, p1, p2)
+#    define BOOST_PP_ENUM_BINARY_PARAMS_I(count, p1, p2) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+#    define BOOST_PP_ENUM_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_BINARY_PARAMS_M_IM(z, n, BOOST_PP_TUPLE_REM_2 pp)
+#    define BOOST_PP_ENUM_BINARY_PARAMS_M_IM(z, n, im) BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, im)
+# else
+#    define BOOST_PP_ENUM_BINARY_PARAMS_M(z, n, pp) BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, BOOST_PP_TUPLE_ELEM(2, 0, pp), BOOST_PP_TUPLE_ELEM(2, 1, pp))
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#    define BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, p1, p2) BOOST_PP_ENUM_BINARY_PARAMS_M_II(z, n, p1, p2)
+#    define BOOST_PP_ENUM_BINARY_PARAMS_M_II(z, n, p1, p2) BOOST_PP_COMMA_IF(n) p1 ## n p2 ## n
+# else
+#    define BOOST_PP_ENUM_BINARY_PARAMS_M_I(z, n, p1, p2) BOOST_PP_COMMA_IF(n) BOOST_PP_CAT(p1, n) BOOST_PP_CAT(p2, n)
+# endif
+#
+# /* BOOST_PP_ENUM_BINARY_PARAMS_Z */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ENUM_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))
+# else
+#    define BOOST_PP_ENUM_BINARY_PARAMS_Z(z, count, p1, p2) BOOST_PP_ENUM_BINARY_PARAMS_Z_I(z, count, p1, p2)
+#    define BOOST_PP_ENUM_BINARY_PARAMS_Z_I(z, count, p1, p2) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_BINARY_PARAMS_M, (p1, p2))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/repetition/enum_params.hpp b/vendor/pdalboost/boost/preprocessor/repetition/enum_params.hpp
new file mode 100644
index 0000000..65a2369
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repetition/enum_params.hpp
@@ -0,0 +1,41 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+#
+# /* BOOST_PP_ENUM_PARAMS */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ENUM_PARAMS(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_PARAMS_M, param)
+# else
+#    define BOOST_PP_ENUM_PARAMS(count, param) BOOST_PP_ENUM_PARAMS_I(count, param)
+#    define BOOST_PP_ENUM_PARAMS_I(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_PARAMS_M, param)
+# endif
+#
+# define BOOST_PP_ENUM_PARAMS_M(z, n, param) BOOST_PP_COMMA_IF(n) param ## n
+#
+# /* BOOST_PP_ENUM_PARAMS_Z */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ENUM_PARAMS_Z(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_PARAMS_M, param)
+# else
+#    define BOOST_PP_ENUM_PARAMS_Z(z, count, param) BOOST_PP_ENUM_PARAMS_Z_I(z, count, param)
+#    define BOOST_PP_ENUM_PARAMS_Z_I(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_PARAMS_M, param)
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/repetition/enum_params_with_a_default.hpp b/vendor/pdalboost/boost/preprocessor/repetition/enum_params_with_a_default.hpp
new file mode 100644
index 0000000..7496df6
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repetition/enum_params_with_a_default.hpp
@@ -0,0 +1,25 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_WITH_A_DEFAULT_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_WITH_A_DEFAULT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/facilities/intercept.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#
+# /* BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT */
+#
+# define BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(count, param, def) BOOST_PP_ENUM_BINARY_PARAMS(count, param, = def BOOST_PP_INTERCEPT)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/repetition/enum_params_with_defaults.hpp b/vendor/pdalboost/boost/preprocessor/repetition/enum_params_with_defaults.hpp
new file mode 100644
index 0000000..fa0106f
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repetition/enum_params_with_defaults.hpp
@@ -0,0 +1,24 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_WITH_DEFAULTS_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_PARAMS_WITH_DEFAULTS_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#
+# /* BOOST_PP_ENUM_PARAMS_WITH_DEFAULTS */
+#
+# define BOOST_PP_ENUM_PARAMS_WITH_DEFAULTS(count, param, def) BOOST_PP_ENUM_BINARY_PARAMS(count, param, = def)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/repetition/enum_shifted_params.hpp b/vendor/pdalboost/boost/preprocessor/repetition/enum_shifted_params.hpp
new file mode 100644
index 0000000..88b2bf4
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repetition/enum_shifted_params.hpp
@@ -0,0 +1,44 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_PARAMS_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_SHIFTED_PARAMS_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/punctuation/comma_if.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+#
+# /* BOOST_PP_ENUM_SHIFTED_PARAMS */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ENUM_SHIFTED_PARAMS(count, param) BOOST_PP_REPEAT(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_PARAMS_M, param)
+# else
+#    define BOOST_PP_ENUM_SHIFTED_PARAMS(count, param) BOOST_PP_ENUM_SHIFTED_PARAMS_I(count, param)
+#    define BOOST_PP_ENUM_SHIFTED_PARAMS_I(count, param) BOOST_PP_REPEAT(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_PARAMS_M, param)
+# endif
+#
+# define BOOST_PP_ENUM_SHIFTED_PARAMS_M(z, n, param) BOOST_PP_COMMA_IF(n) BOOST_PP_CAT(param, BOOST_PP_INC(n))
+#
+# /* BOOST_PP_ENUM_SHIFTED_PARAMS_Z */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ENUM_SHIFTED_PARAMS_Z(z, count, param) BOOST_PP_REPEAT_ ## z(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_PARAMS_M, param)
+# else
+#    define BOOST_PP_ENUM_SHIFTED_PARAMS_Z(z, count, param) BOOST_PP_ENUM_SHIFTED_PARAMS_Z_I(z, count, param)
+#    define BOOST_PP_ENUM_SHIFTED_PARAMS_Z_I(z, count, param) BOOST_PP_REPEAT_ ## z(BOOST_PP_DEC(count), BOOST_PP_ENUM_SHIFTED_PARAMS_M, param)
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/repetition/enum_trailing_params.hpp b/vendor/pdalboost/boost/preprocessor/repetition/enum_trailing_params.hpp
new file mode 100644
index 0000000..f7520db
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repetition/enum_trailing_params.hpp
@@ -0,0 +1,38 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_PARAMS_HPP
+# define BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_PARAMS_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+#
+# /* BOOST_PP_ENUM_TRAILING_PARAMS */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ENUM_TRAILING_PARAMS(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)
+# else
+#    define BOOST_PP_ENUM_TRAILING_PARAMS(count, param) BOOST_PP_ENUM_TRAILING_PARAMS_I(count, param)
+#    define BOOST_PP_ENUM_TRAILING_PARAMS_I(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)
+# endif
+#
+# define BOOST_PP_ENUM_TRAILING_PARAMS_M(z, n, param) , param ## n
+#
+# /* BOOST_PP_ENUM_TRAILING_PARAMS_Z */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)
+# else
+#    define BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, count, param) BOOST_PP_ENUM_TRAILING_PARAMS_Z_I(z, count, param)
+#    define BOOST_PP_ENUM_TRAILING_PARAMS_Z_I(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/repetition/for.hpp b/vendor/pdalboost/boost/preprocessor/repetition/for.hpp
new file mode 100644
index 0000000..c38946b
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repetition/for.hpp
@@ -0,0 +1,324 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_FOR_HPP
+# define BOOST_PREPROCESSOR_REPETITION_FOR_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/facilities/empty.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+#
+# /* BOOST_PP_FOR */
+#
+# if 0
+#    define BOOST_PP_FOR(state, pred, op, macro)
+# endif
+#
+# define BOOST_PP_FOR BOOST_PP_CAT(BOOST_PP_FOR_, BOOST_PP_AUTO_REC(BOOST_PP_FOR_P, 256))
+#
+# define BOOST_PP_FOR_P(n) BOOST_PP_CAT(BOOST_PP_FOR_CHECK_, BOOST_PP_FOR_ ## n(1, BOOST_PP_FOR_SR_P, BOOST_PP_FOR_SR_O, BOOST_PP_FOR_SR_M))
+#
+# define BOOST_PP_FOR_SR_P(r, s) s
+# define BOOST_PP_FOR_SR_O(r, s) 0
+# define BOOST_PP_FOR_SR_M(r, s) BOOST_PP_NIL
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    include <boost/preprocessor/repetition/detail/edg/for.hpp>
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#    include <boost/preprocessor/repetition/detail/msvc/for.hpp>
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+#    include <boost/preprocessor/repetition/detail/dmc/for.hpp>
+# else
+#    include <boost/preprocessor/repetition/detail/for.hpp>
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+# define BOOST_PP_FOR_257_PR(s, p) BOOST_PP_BOOL(p##(257, s))
+# else
+# define BOOST_PP_FOR_257_PR(s, p) BOOST_PP_BOOL(p(257, s))
+# endif
+
+# define BOOST_PP_FOR_257_ERROR() BOOST_PP_ERROR(0x0002)
+# define BOOST_PP_FOR_257(s, p, o, m) \
+	BOOST_PP_IIF \
+		( \
+		BOOST_PP_FOR_257_PR(s,p), \
+		BOOST_PP_FOR_257_ERROR, \
+		BOOST_PP_EMPTY \
+		) \
+	() \
+/**/
+// # define BOOST_PP_FOR_257(s, p, o, m) BOOST_PP_ERROR(0x0002)
+#
+# define BOOST_PP_FOR_CHECK_BOOST_PP_NIL 1
+#
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_1(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_2(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_3(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_4(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_5(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_6(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_7(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_8(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_9(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_10(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_11(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_12(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_13(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_14(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_15(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_16(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_17(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_18(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_19(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_20(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_21(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_22(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_23(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_24(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_25(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_26(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_27(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_28(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_29(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_30(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_31(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_32(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_33(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_34(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_35(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_36(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_37(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_38(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_39(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_40(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_41(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_42(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_43(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_44(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_45(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_46(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_47(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_48(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_49(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_50(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_51(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_52(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_53(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_54(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_55(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_56(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_57(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_58(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_59(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_60(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_61(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_62(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_63(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_64(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_65(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_66(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_67(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_68(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_69(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_70(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_71(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_72(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_73(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_74(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_75(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_76(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_77(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_78(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_79(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_80(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_81(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_82(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_83(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_84(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_85(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_86(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_87(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_88(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_89(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_90(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_91(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_92(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_93(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_94(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_95(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_96(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_97(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_98(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_99(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_100(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_101(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_102(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_103(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_104(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_105(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_106(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_107(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_108(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_109(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_110(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_111(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_112(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_113(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_114(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_115(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_116(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_117(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_118(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_119(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_120(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_121(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_122(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_123(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_124(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_125(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_126(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_127(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_128(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_129(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_130(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_131(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_132(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_133(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_134(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_135(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_136(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_137(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_138(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_139(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_140(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_141(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_142(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_143(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_144(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_145(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_146(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_147(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_148(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_149(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_150(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_151(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_152(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_153(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_154(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_155(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_156(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_157(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_158(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_159(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_160(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_161(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_162(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_163(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_164(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_165(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_166(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_167(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_168(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_169(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_170(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_171(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_172(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_173(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_174(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_175(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_176(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_177(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_178(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_179(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_180(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_181(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_182(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_183(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_184(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_185(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_186(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_187(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_188(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_189(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_190(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_191(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_192(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_193(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_194(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_195(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_196(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_197(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_198(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_199(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_200(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_201(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_202(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_203(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_204(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_205(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_206(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_207(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_208(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_209(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_210(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_211(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_212(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_213(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_214(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_215(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_216(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_217(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_218(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_219(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_220(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_221(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_222(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_223(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_224(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_225(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_226(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_227(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_228(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_229(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_230(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_231(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_232(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_233(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_234(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_235(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_236(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_237(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_238(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_239(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_240(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_241(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_242(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_243(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_244(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_245(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_246(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_247(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_248(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_249(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_250(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_251(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_252(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_253(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_254(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_255(s, p, o, m) 0
+# define BOOST_PP_FOR_CHECK_BOOST_PP_FOR_256(s, p, o, m) 0
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/repetition/repeat.hpp b/vendor/pdalboost/boost/preprocessor/repetition/repeat.hpp
new file mode 100644
index 0000000..0172738
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repetition/repeat.hpp
@@ -0,0 +1,825 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_REPEAT_HPP
+# define BOOST_PREPROCESSOR_REPETITION_REPEAT_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# /* BOOST_PP_REPEAT */
+#
+# if 0
+#    define BOOST_PP_REPEAT(count, macro, data)
+# endif
+#
+# define BOOST_PP_REPEAT BOOST_PP_CAT(BOOST_PP_REPEAT_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))
+#
+# define BOOST_PP_REPEAT_P(n) BOOST_PP_CAT(BOOST_PP_REPEAT_CHECK_, BOOST_PP_REPEAT_ ## n(1, BOOST_PP_NIL BOOST_PP_TUPLE_EAT_3, BOOST_PP_NIL))
+#
+# define BOOST_PP_REPEAT_CHECK_BOOST_PP_NIL 1
+# define BOOST_PP_REPEAT_CHECK_BOOST_PP_REPEAT_1(c, m, d) 0
+# define BOOST_PP_REPEAT_CHECK_BOOST_PP_REPEAT_2(c, m, d) 0
+# define BOOST_PP_REPEAT_CHECK_BOOST_PP_REPEAT_3(c, m, d) 0
+#
+# define BOOST_PP_REPEAT_1(c, m, d) BOOST_PP_REPEAT_1_I(c, m, d)
+# define BOOST_PP_REPEAT_2(c, m, d) BOOST_PP_REPEAT_2_I(c, m, d)
+# define BOOST_PP_REPEAT_3(c, m, d) BOOST_PP_REPEAT_3_I(c, m, d)
+# define BOOST_PP_REPEAT_4(c, m, d) BOOST_PP_ERROR(0x0003)
+#
+# define BOOST_PP_REPEAT_1_I(c, m, d) BOOST_PP_REPEAT_1_ ## c(m, d)
+# define BOOST_PP_REPEAT_2_I(c, m, d) BOOST_PP_REPEAT_2_ ## c(m, d)
+# define BOOST_PP_REPEAT_3_I(c, m, d) BOOST_PP_REPEAT_3_ ## c(m, d)
+#
+# define BOOST_PP_REPEAT_1ST BOOST_PP_REPEAT_1
+# define BOOST_PP_REPEAT_2ND BOOST_PP_REPEAT_2
+# define BOOST_PP_REPEAT_3RD BOOST_PP_REPEAT_3
+#
+# define BOOST_PP_REPEAT_1_0(m, d)
+# define BOOST_PP_REPEAT_1_1(m, d) m(2, 0, d)
+# define BOOST_PP_REPEAT_1_2(m, d) BOOST_PP_REPEAT_1_1(m, d) m(2, 1, d)
+# define BOOST_PP_REPEAT_1_3(m, d) BOOST_PP_REPEAT_1_2(m, d) m(2, 2, d)
+# define BOOST_PP_REPEAT_1_4(m, d) BOOST_PP_REPEAT_1_3(m, d) m(2, 3, d)
+# define BOOST_PP_REPEAT_1_5(m, d) BOOST_PP_REPEAT_1_4(m, d) m(2, 4, d)
+# define BOOST_PP_REPEAT_1_6(m, d) BOOST_PP_REPEAT_1_5(m, d) m(2, 5, d)
+# define BOOST_PP_REPEAT_1_7(m, d) BOOST_PP_REPEAT_1_6(m, d) m(2, 6, d)
+# define BOOST_PP_REPEAT_1_8(m, d) BOOST_PP_REPEAT_1_7(m, d) m(2, 7, d)
+# define BOOST_PP_REPEAT_1_9(m, d) BOOST_PP_REPEAT_1_8(m, d) m(2, 8, d)
+# define BOOST_PP_REPEAT_1_10(m, d) BOOST_PP_REPEAT_1_9(m, d) m(2, 9, d)
+# define BOOST_PP_REPEAT_1_11(m, d) BOOST_PP_REPEAT_1_10(m, d) m(2, 10, d)
+# define BOOST_PP_REPEAT_1_12(m, d) BOOST_PP_REPEAT_1_11(m, d) m(2, 11, d)
+# define BOOST_PP_REPEAT_1_13(m, d) BOOST_PP_REPEAT_1_12(m, d) m(2, 12, d)
+# define BOOST_PP_REPEAT_1_14(m, d) BOOST_PP_REPEAT_1_13(m, d) m(2, 13, d)
+# define BOOST_PP_REPEAT_1_15(m, d) BOOST_PP_REPEAT_1_14(m, d) m(2, 14, d)
+# define BOOST_PP_REPEAT_1_16(m, d) BOOST_PP_REPEAT_1_15(m, d) m(2, 15, d)
+# define BOOST_PP_REPEAT_1_17(m, d) BOOST_PP_REPEAT_1_16(m, d) m(2, 16, d)
+# define BOOST_PP_REPEAT_1_18(m, d) BOOST_PP_REPEAT_1_17(m, d) m(2, 17, d)
+# define BOOST_PP_REPEAT_1_19(m, d) BOOST_PP_REPEAT_1_18(m, d) m(2, 18, d)
+# define BOOST_PP_REPEAT_1_20(m, d) BOOST_PP_REPEAT_1_19(m, d) m(2, 19, d)
+# define BOOST_PP_REPEAT_1_21(m, d) BOOST_PP_REPEAT_1_20(m, d) m(2, 20, d)
+# define BOOST_PP_REPEAT_1_22(m, d) BOOST_PP_REPEAT_1_21(m, d) m(2, 21, d)
+# define BOOST_PP_REPEAT_1_23(m, d) BOOST_PP_REPEAT_1_22(m, d) m(2, 22, d)
+# define BOOST_PP_REPEAT_1_24(m, d) BOOST_PP_REPEAT_1_23(m, d) m(2, 23, d)
+# define BOOST_PP_REPEAT_1_25(m, d) BOOST_PP_REPEAT_1_24(m, d) m(2, 24, d)
+# define BOOST_PP_REPEAT_1_26(m, d) BOOST_PP_REPEAT_1_25(m, d) m(2, 25, d)
+# define BOOST_PP_REPEAT_1_27(m, d) BOOST_PP_REPEAT_1_26(m, d) m(2, 26, d)
+# define BOOST_PP_REPEAT_1_28(m, d) BOOST_PP_REPEAT_1_27(m, d) m(2, 27, d)
+# define BOOST_PP_REPEAT_1_29(m, d) BOOST_PP_REPEAT_1_28(m, d) m(2, 28, d)
+# define BOOST_PP_REPEAT_1_30(m, d) BOOST_PP_REPEAT_1_29(m, d) m(2, 29, d)
+# define BOOST_PP_REPEAT_1_31(m, d) BOOST_PP_REPEAT_1_30(m, d) m(2, 30, d)
+# define BOOST_PP_REPEAT_1_32(m, d) BOOST_PP_REPEAT_1_31(m, d) m(2, 31, d)
+# define BOOST_PP_REPEAT_1_33(m, d) BOOST_PP_REPEAT_1_32(m, d) m(2, 32, d)
+# define BOOST_PP_REPEAT_1_34(m, d) BOOST_PP_REPEAT_1_33(m, d) m(2, 33, d)
+# define BOOST_PP_REPEAT_1_35(m, d) BOOST_PP_REPEAT_1_34(m, d) m(2, 34, d)
+# define BOOST_PP_REPEAT_1_36(m, d) BOOST_PP_REPEAT_1_35(m, d) m(2, 35, d)
+# define BOOST_PP_REPEAT_1_37(m, d) BOOST_PP_REPEAT_1_36(m, d) m(2, 36, d)
+# define BOOST_PP_REPEAT_1_38(m, d) BOOST_PP_REPEAT_1_37(m, d) m(2, 37, d)
+# define BOOST_PP_REPEAT_1_39(m, d) BOOST_PP_REPEAT_1_38(m, d) m(2, 38, d)
+# define BOOST_PP_REPEAT_1_40(m, d) BOOST_PP_REPEAT_1_39(m, d) m(2, 39, d)
+# define BOOST_PP_REPEAT_1_41(m, d) BOOST_PP_REPEAT_1_40(m, d) m(2, 40, d)
+# define BOOST_PP_REPEAT_1_42(m, d) BOOST_PP_REPEAT_1_41(m, d) m(2, 41, d)
+# define BOOST_PP_REPEAT_1_43(m, d) BOOST_PP_REPEAT_1_42(m, d) m(2, 42, d)
+# define BOOST_PP_REPEAT_1_44(m, d) BOOST_PP_REPEAT_1_43(m, d) m(2, 43, d)
+# define BOOST_PP_REPEAT_1_45(m, d) BOOST_PP_REPEAT_1_44(m, d) m(2, 44, d)
+# define BOOST_PP_REPEAT_1_46(m, d) BOOST_PP_REPEAT_1_45(m, d) m(2, 45, d)
+# define BOOST_PP_REPEAT_1_47(m, d) BOOST_PP_REPEAT_1_46(m, d) m(2, 46, d)
+# define BOOST_PP_REPEAT_1_48(m, d) BOOST_PP_REPEAT_1_47(m, d) m(2, 47, d)
+# define BOOST_PP_REPEAT_1_49(m, d) BOOST_PP_REPEAT_1_48(m, d) m(2, 48, d)
+# define BOOST_PP_REPEAT_1_50(m, d) BOOST_PP_REPEAT_1_49(m, d) m(2, 49, d)
+# define BOOST_PP_REPEAT_1_51(m, d) BOOST_PP_REPEAT_1_50(m, d) m(2, 50, d)
+# define BOOST_PP_REPEAT_1_52(m, d) BOOST_PP_REPEAT_1_51(m, d) m(2, 51, d)
+# define BOOST_PP_REPEAT_1_53(m, d) BOOST_PP_REPEAT_1_52(m, d) m(2, 52, d)
+# define BOOST_PP_REPEAT_1_54(m, d) BOOST_PP_REPEAT_1_53(m, d) m(2, 53, d)
+# define BOOST_PP_REPEAT_1_55(m, d) BOOST_PP_REPEAT_1_54(m, d) m(2, 54, d)
+# define BOOST_PP_REPEAT_1_56(m, d) BOOST_PP_REPEAT_1_55(m, d) m(2, 55, d)
+# define BOOST_PP_REPEAT_1_57(m, d) BOOST_PP_REPEAT_1_56(m, d) m(2, 56, d)
+# define BOOST_PP_REPEAT_1_58(m, d) BOOST_PP_REPEAT_1_57(m, d) m(2, 57, d)
+# define BOOST_PP_REPEAT_1_59(m, d) BOOST_PP_REPEAT_1_58(m, d) m(2, 58, d)
+# define BOOST_PP_REPEAT_1_60(m, d) BOOST_PP_REPEAT_1_59(m, d) m(2, 59, d)
+# define BOOST_PP_REPEAT_1_61(m, d) BOOST_PP_REPEAT_1_60(m, d) m(2, 60, d)
+# define BOOST_PP_REPEAT_1_62(m, d) BOOST_PP_REPEAT_1_61(m, d) m(2, 61, d)
+# define BOOST_PP_REPEAT_1_63(m, d) BOOST_PP_REPEAT_1_62(m, d) m(2, 62, d)
+# define BOOST_PP_REPEAT_1_64(m, d) BOOST_PP_REPEAT_1_63(m, d) m(2, 63, d)
+# define BOOST_PP_REPEAT_1_65(m, d) BOOST_PP_REPEAT_1_64(m, d) m(2, 64, d)
+# define BOOST_PP_REPEAT_1_66(m, d) BOOST_PP_REPEAT_1_65(m, d) m(2, 65, d)
+# define BOOST_PP_REPEAT_1_67(m, d) BOOST_PP_REPEAT_1_66(m, d) m(2, 66, d)
+# define BOOST_PP_REPEAT_1_68(m, d) BOOST_PP_REPEAT_1_67(m, d) m(2, 67, d)
+# define BOOST_PP_REPEAT_1_69(m, d) BOOST_PP_REPEAT_1_68(m, d) m(2, 68, d)
+# define BOOST_PP_REPEAT_1_70(m, d) BOOST_PP_REPEAT_1_69(m, d) m(2, 69, d)
+# define BOOST_PP_REPEAT_1_71(m, d) BOOST_PP_REPEAT_1_70(m, d) m(2, 70, d)
+# define BOOST_PP_REPEAT_1_72(m, d) BOOST_PP_REPEAT_1_71(m, d) m(2, 71, d)
+# define BOOST_PP_REPEAT_1_73(m, d) BOOST_PP_REPEAT_1_72(m, d) m(2, 72, d)
+# define BOOST_PP_REPEAT_1_74(m, d) BOOST_PP_REPEAT_1_73(m, d) m(2, 73, d)
+# define BOOST_PP_REPEAT_1_75(m, d) BOOST_PP_REPEAT_1_74(m, d) m(2, 74, d)
+# define BOOST_PP_REPEAT_1_76(m, d) BOOST_PP_REPEAT_1_75(m, d) m(2, 75, d)
+# define BOOST_PP_REPEAT_1_77(m, d) BOOST_PP_REPEAT_1_76(m, d) m(2, 76, d)
+# define BOOST_PP_REPEAT_1_78(m, d) BOOST_PP_REPEAT_1_77(m, d) m(2, 77, d)
+# define BOOST_PP_REPEAT_1_79(m, d) BOOST_PP_REPEAT_1_78(m, d) m(2, 78, d)
+# define BOOST_PP_REPEAT_1_80(m, d) BOOST_PP_REPEAT_1_79(m, d) m(2, 79, d)
+# define BOOST_PP_REPEAT_1_81(m, d) BOOST_PP_REPEAT_1_80(m, d) m(2, 80, d)
+# define BOOST_PP_REPEAT_1_82(m, d) BOOST_PP_REPEAT_1_81(m, d) m(2, 81, d)
+# define BOOST_PP_REPEAT_1_83(m, d) BOOST_PP_REPEAT_1_82(m, d) m(2, 82, d)
+# define BOOST_PP_REPEAT_1_84(m, d) BOOST_PP_REPEAT_1_83(m, d) m(2, 83, d)
+# define BOOST_PP_REPEAT_1_85(m, d) BOOST_PP_REPEAT_1_84(m, d) m(2, 84, d)
+# define BOOST_PP_REPEAT_1_86(m, d) BOOST_PP_REPEAT_1_85(m, d) m(2, 85, d)
+# define BOOST_PP_REPEAT_1_87(m, d) BOOST_PP_REPEAT_1_86(m, d) m(2, 86, d)
+# define BOOST_PP_REPEAT_1_88(m, d) BOOST_PP_REPEAT_1_87(m, d) m(2, 87, d)
+# define BOOST_PP_REPEAT_1_89(m, d) BOOST_PP_REPEAT_1_88(m, d) m(2, 88, d)
+# define BOOST_PP_REPEAT_1_90(m, d) BOOST_PP_REPEAT_1_89(m, d) m(2, 89, d)
+# define BOOST_PP_REPEAT_1_91(m, d) BOOST_PP_REPEAT_1_90(m, d) m(2, 90, d)
+# define BOOST_PP_REPEAT_1_92(m, d) BOOST_PP_REPEAT_1_91(m, d) m(2, 91, d)
+# define BOOST_PP_REPEAT_1_93(m, d) BOOST_PP_REPEAT_1_92(m, d) m(2, 92, d)
+# define BOOST_PP_REPEAT_1_94(m, d) BOOST_PP_REPEAT_1_93(m, d) m(2, 93, d)
+# define BOOST_PP_REPEAT_1_95(m, d) BOOST_PP_REPEAT_1_94(m, d) m(2, 94, d)
+# define BOOST_PP_REPEAT_1_96(m, d) BOOST_PP_REPEAT_1_95(m, d) m(2, 95, d)
+# define BOOST_PP_REPEAT_1_97(m, d) BOOST_PP_REPEAT_1_96(m, d) m(2, 96, d)
+# define BOOST_PP_REPEAT_1_98(m, d) BOOST_PP_REPEAT_1_97(m, d) m(2, 97, d)
+# define BOOST_PP_REPEAT_1_99(m, d) BOOST_PP_REPEAT_1_98(m, d) m(2, 98, d)
+# define BOOST_PP_REPEAT_1_100(m, d) BOOST_PP_REPEAT_1_99(m, d) m(2, 99, d)
+# define BOOST_PP_REPEAT_1_101(m, d) BOOST_PP_REPEAT_1_100(m, d) m(2, 100, d)
+# define BOOST_PP_REPEAT_1_102(m, d) BOOST_PP_REPEAT_1_101(m, d) m(2, 101, d)
+# define BOOST_PP_REPEAT_1_103(m, d) BOOST_PP_REPEAT_1_102(m, d) m(2, 102, d)
+# define BOOST_PP_REPEAT_1_104(m, d) BOOST_PP_REPEAT_1_103(m, d) m(2, 103, d)
+# define BOOST_PP_REPEAT_1_105(m, d) BOOST_PP_REPEAT_1_104(m, d) m(2, 104, d)
+# define BOOST_PP_REPEAT_1_106(m, d) BOOST_PP_REPEAT_1_105(m, d) m(2, 105, d)
+# define BOOST_PP_REPEAT_1_107(m, d) BOOST_PP_REPEAT_1_106(m, d) m(2, 106, d)
+# define BOOST_PP_REPEAT_1_108(m, d) BOOST_PP_REPEAT_1_107(m, d) m(2, 107, d)
+# define BOOST_PP_REPEAT_1_109(m, d) BOOST_PP_REPEAT_1_108(m, d) m(2, 108, d)
+# define BOOST_PP_REPEAT_1_110(m, d) BOOST_PP_REPEAT_1_109(m, d) m(2, 109, d)
+# define BOOST_PP_REPEAT_1_111(m, d) BOOST_PP_REPEAT_1_110(m, d) m(2, 110, d)
+# define BOOST_PP_REPEAT_1_112(m, d) BOOST_PP_REPEAT_1_111(m, d) m(2, 111, d)
+# define BOOST_PP_REPEAT_1_113(m, d) BOOST_PP_REPEAT_1_112(m, d) m(2, 112, d)
+# define BOOST_PP_REPEAT_1_114(m, d) BOOST_PP_REPEAT_1_113(m, d) m(2, 113, d)
+# define BOOST_PP_REPEAT_1_115(m, d) BOOST_PP_REPEAT_1_114(m, d) m(2, 114, d)
+# define BOOST_PP_REPEAT_1_116(m, d) BOOST_PP_REPEAT_1_115(m, d) m(2, 115, d)
+# define BOOST_PP_REPEAT_1_117(m, d) BOOST_PP_REPEAT_1_116(m, d) m(2, 116, d)
+# define BOOST_PP_REPEAT_1_118(m, d) BOOST_PP_REPEAT_1_117(m, d) m(2, 117, d)
+# define BOOST_PP_REPEAT_1_119(m, d) BOOST_PP_REPEAT_1_118(m, d) m(2, 118, d)
+# define BOOST_PP_REPEAT_1_120(m, d) BOOST_PP_REPEAT_1_119(m, d) m(2, 119, d)
+# define BOOST_PP_REPEAT_1_121(m, d) BOOST_PP_REPEAT_1_120(m, d) m(2, 120, d)
+# define BOOST_PP_REPEAT_1_122(m, d) BOOST_PP_REPEAT_1_121(m, d) m(2, 121, d)
+# define BOOST_PP_REPEAT_1_123(m, d) BOOST_PP_REPEAT_1_122(m, d) m(2, 122, d)
+# define BOOST_PP_REPEAT_1_124(m, d) BOOST_PP_REPEAT_1_123(m, d) m(2, 123, d)
+# define BOOST_PP_REPEAT_1_125(m, d) BOOST_PP_REPEAT_1_124(m, d) m(2, 124, d)
+# define BOOST_PP_REPEAT_1_126(m, d) BOOST_PP_REPEAT_1_125(m, d) m(2, 125, d)
+# define BOOST_PP_REPEAT_1_127(m, d) BOOST_PP_REPEAT_1_126(m, d) m(2, 126, d)
+# define BOOST_PP_REPEAT_1_128(m, d) BOOST_PP_REPEAT_1_127(m, d) m(2, 127, d)
+# define BOOST_PP_REPEAT_1_129(m, d) BOOST_PP_REPEAT_1_128(m, d) m(2, 128, d)
+# define BOOST_PP_REPEAT_1_130(m, d) BOOST_PP_REPEAT_1_129(m, d) m(2, 129, d)
+# define BOOST_PP_REPEAT_1_131(m, d) BOOST_PP_REPEAT_1_130(m, d) m(2, 130, d)
+# define BOOST_PP_REPEAT_1_132(m, d) BOOST_PP_REPEAT_1_131(m, d) m(2, 131, d)
+# define BOOST_PP_REPEAT_1_133(m, d) BOOST_PP_REPEAT_1_132(m, d) m(2, 132, d)
+# define BOOST_PP_REPEAT_1_134(m, d) BOOST_PP_REPEAT_1_133(m, d) m(2, 133, d)
+# define BOOST_PP_REPEAT_1_135(m, d) BOOST_PP_REPEAT_1_134(m, d) m(2, 134, d)
+# define BOOST_PP_REPEAT_1_136(m, d) BOOST_PP_REPEAT_1_135(m, d) m(2, 135, d)
+# define BOOST_PP_REPEAT_1_137(m, d) BOOST_PP_REPEAT_1_136(m, d) m(2, 136, d)
+# define BOOST_PP_REPEAT_1_138(m, d) BOOST_PP_REPEAT_1_137(m, d) m(2, 137, d)
+# define BOOST_PP_REPEAT_1_139(m, d) BOOST_PP_REPEAT_1_138(m, d) m(2, 138, d)
+# define BOOST_PP_REPEAT_1_140(m, d) BOOST_PP_REPEAT_1_139(m, d) m(2, 139, d)
+# define BOOST_PP_REPEAT_1_141(m, d) BOOST_PP_REPEAT_1_140(m, d) m(2, 140, d)
+# define BOOST_PP_REPEAT_1_142(m, d) BOOST_PP_REPEAT_1_141(m, d) m(2, 141, d)
+# define BOOST_PP_REPEAT_1_143(m, d) BOOST_PP_REPEAT_1_142(m, d) m(2, 142, d)
+# define BOOST_PP_REPEAT_1_144(m, d) BOOST_PP_REPEAT_1_143(m, d) m(2, 143, d)
+# define BOOST_PP_REPEAT_1_145(m, d) BOOST_PP_REPEAT_1_144(m, d) m(2, 144, d)
+# define BOOST_PP_REPEAT_1_146(m, d) BOOST_PP_REPEAT_1_145(m, d) m(2, 145, d)
+# define BOOST_PP_REPEAT_1_147(m, d) BOOST_PP_REPEAT_1_146(m, d) m(2, 146, d)
+# define BOOST_PP_REPEAT_1_148(m, d) BOOST_PP_REPEAT_1_147(m, d) m(2, 147, d)
+# define BOOST_PP_REPEAT_1_149(m, d) BOOST_PP_REPEAT_1_148(m, d) m(2, 148, d)
+# define BOOST_PP_REPEAT_1_150(m, d) BOOST_PP_REPEAT_1_149(m, d) m(2, 149, d)
+# define BOOST_PP_REPEAT_1_151(m, d) BOOST_PP_REPEAT_1_150(m, d) m(2, 150, d)
+# define BOOST_PP_REPEAT_1_152(m, d) BOOST_PP_REPEAT_1_151(m, d) m(2, 151, d)
+# define BOOST_PP_REPEAT_1_153(m, d) BOOST_PP_REPEAT_1_152(m, d) m(2, 152, d)
+# define BOOST_PP_REPEAT_1_154(m, d) BOOST_PP_REPEAT_1_153(m, d) m(2, 153, d)
+# define BOOST_PP_REPEAT_1_155(m, d) BOOST_PP_REPEAT_1_154(m, d) m(2, 154, d)
+# define BOOST_PP_REPEAT_1_156(m, d) BOOST_PP_REPEAT_1_155(m, d) m(2, 155, d)
+# define BOOST_PP_REPEAT_1_157(m, d) BOOST_PP_REPEAT_1_156(m, d) m(2, 156, d)
+# define BOOST_PP_REPEAT_1_158(m, d) BOOST_PP_REPEAT_1_157(m, d) m(2, 157, d)
+# define BOOST_PP_REPEAT_1_159(m, d) BOOST_PP_REPEAT_1_158(m, d) m(2, 158, d)
+# define BOOST_PP_REPEAT_1_160(m, d) BOOST_PP_REPEAT_1_159(m, d) m(2, 159, d)
+# define BOOST_PP_REPEAT_1_161(m, d) BOOST_PP_REPEAT_1_160(m, d) m(2, 160, d)
+# define BOOST_PP_REPEAT_1_162(m, d) BOOST_PP_REPEAT_1_161(m, d) m(2, 161, d)
+# define BOOST_PP_REPEAT_1_163(m, d) BOOST_PP_REPEAT_1_162(m, d) m(2, 162, d)
+# define BOOST_PP_REPEAT_1_164(m, d) BOOST_PP_REPEAT_1_163(m, d) m(2, 163, d)
+# define BOOST_PP_REPEAT_1_165(m, d) BOOST_PP_REPEAT_1_164(m, d) m(2, 164, d)
+# define BOOST_PP_REPEAT_1_166(m, d) BOOST_PP_REPEAT_1_165(m, d) m(2, 165, d)
+# define BOOST_PP_REPEAT_1_167(m, d) BOOST_PP_REPEAT_1_166(m, d) m(2, 166, d)
+# define BOOST_PP_REPEAT_1_168(m, d) BOOST_PP_REPEAT_1_167(m, d) m(2, 167, d)
+# define BOOST_PP_REPEAT_1_169(m, d) BOOST_PP_REPEAT_1_168(m, d) m(2, 168, d)
+# define BOOST_PP_REPEAT_1_170(m, d) BOOST_PP_REPEAT_1_169(m, d) m(2, 169, d)
+# define BOOST_PP_REPEAT_1_171(m, d) BOOST_PP_REPEAT_1_170(m, d) m(2, 170, d)
+# define BOOST_PP_REPEAT_1_172(m, d) BOOST_PP_REPEAT_1_171(m, d) m(2, 171, d)
+# define BOOST_PP_REPEAT_1_173(m, d) BOOST_PP_REPEAT_1_172(m, d) m(2, 172, d)
+# define BOOST_PP_REPEAT_1_174(m, d) BOOST_PP_REPEAT_1_173(m, d) m(2, 173, d)
+# define BOOST_PP_REPEAT_1_175(m, d) BOOST_PP_REPEAT_1_174(m, d) m(2, 174, d)
+# define BOOST_PP_REPEAT_1_176(m, d) BOOST_PP_REPEAT_1_175(m, d) m(2, 175, d)
+# define BOOST_PP_REPEAT_1_177(m, d) BOOST_PP_REPEAT_1_176(m, d) m(2, 176, d)
+# define BOOST_PP_REPEAT_1_178(m, d) BOOST_PP_REPEAT_1_177(m, d) m(2, 177, d)
+# define BOOST_PP_REPEAT_1_179(m, d) BOOST_PP_REPEAT_1_178(m, d) m(2, 178, d)
+# define BOOST_PP_REPEAT_1_180(m, d) BOOST_PP_REPEAT_1_179(m, d) m(2, 179, d)
+# define BOOST_PP_REPEAT_1_181(m, d) BOOST_PP_REPEAT_1_180(m, d) m(2, 180, d)
+# define BOOST_PP_REPEAT_1_182(m, d) BOOST_PP_REPEAT_1_181(m, d) m(2, 181, d)
+# define BOOST_PP_REPEAT_1_183(m, d) BOOST_PP_REPEAT_1_182(m, d) m(2, 182, d)
+# define BOOST_PP_REPEAT_1_184(m, d) BOOST_PP_REPEAT_1_183(m, d) m(2, 183, d)
+# define BOOST_PP_REPEAT_1_185(m, d) BOOST_PP_REPEAT_1_184(m, d) m(2, 184, d)
+# define BOOST_PP_REPEAT_1_186(m, d) BOOST_PP_REPEAT_1_185(m, d) m(2, 185, d)
+# define BOOST_PP_REPEAT_1_187(m, d) BOOST_PP_REPEAT_1_186(m, d) m(2, 186, d)
+# define BOOST_PP_REPEAT_1_188(m, d) BOOST_PP_REPEAT_1_187(m, d) m(2, 187, d)
+# define BOOST_PP_REPEAT_1_189(m, d) BOOST_PP_REPEAT_1_188(m, d) m(2, 188, d)
+# define BOOST_PP_REPEAT_1_190(m, d) BOOST_PP_REPEAT_1_189(m, d) m(2, 189, d)
+# define BOOST_PP_REPEAT_1_191(m, d) BOOST_PP_REPEAT_1_190(m, d) m(2, 190, d)
+# define BOOST_PP_REPEAT_1_192(m, d) BOOST_PP_REPEAT_1_191(m, d) m(2, 191, d)
+# define BOOST_PP_REPEAT_1_193(m, d) BOOST_PP_REPEAT_1_192(m, d) m(2, 192, d)
+# define BOOST_PP_REPEAT_1_194(m, d) BOOST_PP_REPEAT_1_193(m, d) m(2, 193, d)
+# define BOOST_PP_REPEAT_1_195(m, d) BOOST_PP_REPEAT_1_194(m, d) m(2, 194, d)
+# define BOOST_PP_REPEAT_1_196(m, d) BOOST_PP_REPEAT_1_195(m, d) m(2, 195, d)
+# define BOOST_PP_REPEAT_1_197(m, d) BOOST_PP_REPEAT_1_196(m, d) m(2, 196, d)
+# define BOOST_PP_REPEAT_1_198(m, d) BOOST_PP_REPEAT_1_197(m, d) m(2, 197, d)
+# define BOOST_PP_REPEAT_1_199(m, d) BOOST_PP_REPEAT_1_198(m, d) m(2, 198, d)
+# define BOOST_PP_REPEAT_1_200(m, d) BOOST_PP_REPEAT_1_199(m, d) m(2, 199, d)
+# define BOOST_PP_REPEAT_1_201(m, d) BOOST_PP_REPEAT_1_200(m, d) m(2, 200, d)
+# define BOOST_PP_REPEAT_1_202(m, d) BOOST_PP_REPEAT_1_201(m, d) m(2, 201, d)
+# define BOOST_PP_REPEAT_1_203(m, d) BOOST_PP_REPEAT_1_202(m, d) m(2, 202, d)
+# define BOOST_PP_REPEAT_1_204(m, d) BOOST_PP_REPEAT_1_203(m, d) m(2, 203, d)
+# define BOOST_PP_REPEAT_1_205(m, d) BOOST_PP_REPEAT_1_204(m, d) m(2, 204, d)
+# define BOOST_PP_REPEAT_1_206(m, d) BOOST_PP_REPEAT_1_205(m, d) m(2, 205, d)
+# define BOOST_PP_REPEAT_1_207(m, d) BOOST_PP_REPEAT_1_206(m, d) m(2, 206, d)
+# define BOOST_PP_REPEAT_1_208(m, d) BOOST_PP_REPEAT_1_207(m, d) m(2, 207, d)
+# define BOOST_PP_REPEAT_1_209(m, d) BOOST_PP_REPEAT_1_208(m, d) m(2, 208, d)
+# define BOOST_PP_REPEAT_1_210(m, d) BOOST_PP_REPEAT_1_209(m, d) m(2, 209, d)
+# define BOOST_PP_REPEAT_1_211(m, d) BOOST_PP_REPEAT_1_210(m, d) m(2, 210, d)
+# define BOOST_PP_REPEAT_1_212(m, d) BOOST_PP_REPEAT_1_211(m, d) m(2, 211, d)
+# define BOOST_PP_REPEAT_1_213(m, d) BOOST_PP_REPEAT_1_212(m, d) m(2, 212, d)
+# define BOOST_PP_REPEAT_1_214(m, d) BOOST_PP_REPEAT_1_213(m, d) m(2, 213, d)
+# define BOOST_PP_REPEAT_1_215(m, d) BOOST_PP_REPEAT_1_214(m, d) m(2, 214, d)
+# define BOOST_PP_REPEAT_1_216(m, d) BOOST_PP_REPEAT_1_215(m, d) m(2, 215, d)
+# define BOOST_PP_REPEAT_1_217(m, d) BOOST_PP_REPEAT_1_216(m, d) m(2, 216, d)
+# define BOOST_PP_REPEAT_1_218(m, d) BOOST_PP_REPEAT_1_217(m, d) m(2, 217, d)
+# define BOOST_PP_REPEAT_1_219(m, d) BOOST_PP_REPEAT_1_218(m, d) m(2, 218, d)
+# define BOOST_PP_REPEAT_1_220(m, d) BOOST_PP_REPEAT_1_219(m, d) m(2, 219, d)
+# define BOOST_PP_REPEAT_1_221(m, d) BOOST_PP_REPEAT_1_220(m, d) m(2, 220, d)
+# define BOOST_PP_REPEAT_1_222(m, d) BOOST_PP_REPEAT_1_221(m, d) m(2, 221, d)
+# define BOOST_PP_REPEAT_1_223(m, d) BOOST_PP_REPEAT_1_222(m, d) m(2, 222, d)
+# define BOOST_PP_REPEAT_1_224(m, d) BOOST_PP_REPEAT_1_223(m, d) m(2, 223, d)
+# define BOOST_PP_REPEAT_1_225(m, d) BOOST_PP_REPEAT_1_224(m, d) m(2, 224, d)
+# define BOOST_PP_REPEAT_1_226(m, d) BOOST_PP_REPEAT_1_225(m, d) m(2, 225, d)
+# define BOOST_PP_REPEAT_1_227(m, d) BOOST_PP_REPEAT_1_226(m, d) m(2, 226, d)
+# define BOOST_PP_REPEAT_1_228(m, d) BOOST_PP_REPEAT_1_227(m, d) m(2, 227, d)
+# define BOOST_PP_REPEAT_1_229(m, d) BOOST_PP_REPEAT_1_228(m, d) m(2, 228, d)
+# define BOOST_PP_REPEAT_1_230(m, d) BOOST_PP_REPEAT_1_229(m, d) m(2, 229, d)
+# define BOOST_PP_REPEAT_1_231(m, d) BOOST_PP_REPEAT_1_230(m, d) m(2, 230, d)
+# define BOOST_PP_REPEAT_1_232(m, d) BOOST_PP_REPEAT_1_231(m, d) m(2, 231, d)
+# define BOOST_PP_REPEAT_1_233(m, d) BOOST_PP_REPEAT_1_232(m, d) m(2, 232, d)
+# define BOOST_PP_REPEAT_1_234(m, d) BOOST_PP_REPEAT_1_233(m, d) m(2, 233, d)
+# define BOOST_PP_REPEAT_1_235(m, d) BOOST_PP_REPEAT_1_234(m, d) m(2, 234, d)
+# define BOOST_PP_REPEAT_1_236(m, d) BOOST_PP_REPEAT_1_235(m, d) m(2, 235, d)
+# define BOOST_PP_REPEAT_1_237(m, d) BOOST_PP_REPEAT_1_236(m, d) m(2, 236, d)
+# define BOOST_PP_REPEAT_1_238(m, d) BOOST_PP_REPEAT_1_237(m, d) m(2, 237, d)
+# define BOOST_PP_REPEAT_1_239(m, d) BOOST_PP_REPEAT_1_238(m, d) m(2, 238, d)
+# define BOOST_PP_REPEAT_1_240(m, d) BOOST_PP_REPEAT_1_239(m, d) m(2, 239, d)
+# define BOOST_PP_REPEAT_1_241(m, d) BOOST_PP_REPEAT_1_240(m, d) m(2, 240, d)
+# define BOOST_PP_REPEAT_1_242(m, d) BOOST_PP_REPEAT_1_241(m, d) m(2, 241, d)
+# define BOOST_PP_REPEAT_1_243(m, d) BOOST_PP_REPEAT_1_242(m, d) m(2, 242, d)
+# define BOOST_PP_REPEAT_1_244(m, d) BOOST_PP_REPEAT_1_243(m, d) m(2, 243, d)
+# define BOOST_PP_REPEAT_1_245(m, d) BOOST_PP_REPEAT_1_244(m, d) m(2, 244, d)
+# define BOOST_PP_REPEAT_1_246(m, d) BOOST_PP_REPEAT_1_245(m, d) m(2, 245, d)
+# define BOOST_PP_REPEAT_1_247(m, d) BOOST_PP_REPEAT_1_246(m, d) m(2, 246, d)
+# define BOOST_PP_REPEAT_1_248(m, d) BOOST_PP_REPEAT_1_247(m, d) m(2, 247, d)
+# define BOOST_PP_REPEAT_1_249(m, d) BOOST_PP_REPEAT_1_248(m, d) m(2, 248, d)
+# define BOOST_PP_REPEAT_1_250(m, d) BOOST_PP_REPEAT_1_249(m, d) m(2, 249, d)
+# define BOOST_PP_REPEAT_1_251(m, d) BOOST_PP_REPEAT_1_250(m, d) m(2, 250, d)
+# define BOOST_PP_REPEAT_1_252(m, d) BOOST_PP_REPEAT_1_251(m, d) m(2, 251, d)
+# define BOOST_PP_REPEAT_1_253(m, d) BOOST_PP_REPEAT_1_252(m, d) m(2, 252, d)
+# define BOOST_PP_REPEAT_1_254(m, d) BOOST_PP_REPEAT_1_253(m, d) m(2, 253, d)
+# define BOOST_PP_REPEAT_1_255(m, d) BOOST_PP_REPEAT_1_254(m, d) m(2, 254, d)
+# define BOOST_PP_REPEAT_1_256(m, d) BOOST_PP_REPEAT_1_255(m, d) m(2, 255, d)
+#
+# define BOOST_PP_REPEAT_2_0(m, d)
+# define BOOST_PP_REPEAT_2_1(m, d) m(3, 0, d)
+# define BOOST_PP_REPEAT_2_2(m, d) BOOST_PP_REPEAT_2_1(m, d) m(3, 1, d)
+# define BOOST_PP_REPEAT_2_3(m, d) BOOST_PP_REPEAT_2_2(m, d) m(3, 2, d)
+# define BOOST_PP_REPEAT_2_4(m, d) BOOST_PP_REPEAT_2_3(m, d) m(3, 3, d)
+# define BOOST_PP_REPEAT_2_5(m, d) BOOST_PP_REPEAT_2_4(m, d) m(3, 4, d)
+# define BOOST_PP_REPEAT_2_6(m, d) BOOST_PP_REPEAT_2_5(m, d) m(3, 5, d)
+# define BOOST_PP_REPEAT_2_7(m, d) BOOST_PP_REPEAT_2_6(m, d) m(3, 6, d)
+# define BOOST_PP_REPEAT_2_8(m, d) BOOST_PP_REPEAT_2_7(m, d) m(3, 7, d)
+# define BOOST_PP_REPEAT_2_9(m, d) BOOST_PP_REPEAT_2_8(m, d) m(3, 8, d)
+# define BOOST_PP_REPEAT_2_10(m, d) BOOST_PP_REPEAT_2_9(m, d) m(3, 9, d)
+# define BOOST_PP_REPEAT_2_11(m, d) BOOST_PP_REPEAT_2_10(m, d) m(3, 10, d)
+# define BOOST_PP_REPEAT_2_12(m, d) BOOST_PP_REPEAT_2_11(m, d) m(3, 11, d)
+# define BOOST_PP_REPEAT_2_13(m, d) BOOST_PP_REPEAT_2_12(m, d) m(3, 12, d)
+# define BOOST_PP_REPEAT_2_14(m, d) BOOST_PP_REPEAT_2_13(m, d) m(3, 13, d)
+# define BOOST_PP_REPEAT_2_15(m, d) BOOST_PP_REPEAT_2_14(m, d) m(3, 14, d)
+# define BOOST_PP_REPEAT_2_16(m, d) BOOST_PP_REPEAT_2_15(m, d) m(3, 15, d)
+# define BOOST_PP_REPEAT_2_17(m, d) BOOST_PP_REPEAT_2_16(m, d) m(3, 16, d)
+# define BOOST_PP_REPEAT_2_18(m, d) BOOST_PP_REPEAT_2_17(m, d) m(3, 17, d)
+# define BOOST_PP_REPEAT_2_19(m, d) BOOST_PP_REPEAT_2_18(m, d) m(3, 18, d)
+# define BOOST_PP_REPEAT_2_20(m, d) BOOST_PP_REPEAT_2_19(m, d) m(3, 19, d)
+# define BOOST_PP_REPEAT_2_21(m, d) BOOST_PP_REPEAT_2_20(m, d) m(3, 20, d)
+# define BOOST_PP_REPEAT_2_22(m, d) BOOST_PP_REPEAT_2_21(m, d) m(3, 21, d)
+# define BOOST_PP_REPEAT_2_23(m, d) BOOST_PP_REPEAT_2_22(m, d) m(3, 22, d)
+# define BOOST_PP_REPEAT_2_24(m, d) BOOST_PP_REPEAT_2_23(m, d) m(3, 23, d)
+# define BOOST_PP_REPEAT_2_25(m, d) BOOST_PP_REPEAT_2_24(m, d) m(3, 24, d)
+# define BOOST_PP_REPEAT_2_26(m, d) BOOST_PP_REPEAT_2_25(m, d) m(3, 25, d)
+# define BOOST_PP_REPEAT_2_27(m, d) BOOST_PP_REPEAT_2_26(m, d) m(3, 26, d)
+# define BOOST_PP_REPEAT_2_28(m, d) BOOST_PP_REPEAT_2_27(m, d) m(3, 27, d)
+# define BOOST_PP_REPEAT_2_29(m, d) BOOST_PP_REPEAT_2_28(m, d) m(3, 28, d)
+# define BOOST_PP_REPEAT_2_30(m, d) BOOST_PP_REPEAT_2_29(m, d) m(3, 29, d)
+# define BOOST_PP_REPEAT_2_31(m, d) BOOST_PP_REPEAT_2_30(m, d) m(3, 30, d)
+# define BOOST_PP_REPEAT_2_32(m, d) BOOST_PP_REPEAT_2_31(m, d) m(3, 31, d)
+# define BOOST_PP_REPEAT_2_33(m, d) BOOST_PP_REPEAT_2_32(m, d) m(3, 32, d)
+# define BOOST_PP_REPEAT_2_34(m, d) BOOST_PP_REPEAT_2_33(m, d) m(3, 33, d)
+# define BOOST_PP_REPEAT_2_35(m, d) BOOST_PP_REPEAT_2_34(m, d) m(3, 34, d)
+# define BOOST_PP_REPEAT_2_36(m, d) BOOST_PP_REPEAT_2_35(m, d) m(3, 35, d)
+# define BOOST_PP_REPEAT_2_37(m, d) BOOST_PP_REPEAT_2_36(m, d) m(3, 36, d)
+# define BOOST_PP_REPEAT_2_38(m, d) BOOST_PP_REPEAT_2_37(m, d) m(3, 37, d)
+# define BOOST_PP_REPEAT_2_39(m, d) BOOST_PP_REPEAT_2_38(m, d) m(3, 38, d)
+# define BOOST_PP_REPEAT_2_40(m, d) BOOST_PP_REPEAT_2_39(m, d) m(3, 39, d)
+# define BOOST_PP_REPEAT_2_41(m, d) BOOST_PP_REPEAT_2_40(m, d) m(3, 40, d)
+# define BOOST_PP_REPEAT_2_42(m, d) BOOST_PP_REPEAT_2_41(m, d) m(3, 41, d)
+# define BOOST_PP_REPEAT_2_43(m, d) BOOST_PP_REPEAT_2_42(m, d) m(3, 42, d)
+# define BOOST_PP_REPEAT_2_44(m, d) BOOST_PP_REPEAT_2_43(m, d) m(3, 43, d)
+# define BOOST_PP_REPEAT_2_45(m, d) BOOST_PP_REPEAT_2_44(m, d) m(3, 44, d)
+# define BOOST_PP_REPEAT_2_46(m, d) BOOST_PP_REPEAT_2_45(m, d) m(3, 45, d)
+# define BOOST_PP_REPEAT_2_47(m, d) BOOST_PP_REPEAT_2_46(m, d) m(3, 46, d)
+# define BOOST_PP_REPEAT_2_48(m, d) BOOST_PP_REPEAT_2_47(m, d) m(3, 47, d)
+# define BOOST_PP_REPEAT_2_49(m, d) BOOST_PP_REPEAT_2_48(m, d) m(3, 48, d)
+# define BOOST_PP_REPEAT_2_50(m, d) BOOST_PP_REPEAT_2_49(m, d) m(3, 49, d)
+# define BOOST_PP_REPEAT_2_51(m, d) BOOST_PP_REPEAT_2_50(m, d) m(3, 50, d)
+# define BOOST_PP_REPEAT_2_52(m, d) BOOST_PP_REPEAT_2_51(m, d) m(3, 51, d)
+# define BOOST_PP_REPEAT_2_53(m, d) BOOST_PP_REPEAT_2_52(m, d) m(3, 52, d)
+# define BOOST_PP_REPEAT_2_54(m, d) BOOST_PP_REPEAT_2_53(m, d) m(3, 53, d)
+# define BOOST_PP_REPEAT_2_55(m, d) BOOST_PP_REPEAT_2_54(m, d) m(3, 54, d)
+# define BOOST_PP_REPEAT_2_56(m, d) BOOST_PP_REPEAT_2_55(m, d) m(3, 55, d)
+# define BOOST_PP_REPEAT_2_57(m, d) BOOST_PP_REPEAT_2_56(m, d) m(3, 56, d)
+# define BOOST_PP_REPEAT_2_58(m, d) BOOST_PP_REPEAT_2_57(m, d) m(3, 57, d)
+# define BOOST_PP_REPEAT_2_59(m, d) BOOST_PP_REPEAT_2_58(m, d) m(3, 58, d)
+# define BOOST_PP_REPEAT_2_60(m, d) BOOST_PP_REPEAT_2_59(m, d) m(3, 59, d)
+# define BOOST_PP_REPEAT_2_61(m, d) BOOST_PP_REPEAT_2_60(m, d) m(3, 60, d)
+# define BOOST_PP_REPEAT_2_62(m, d) BOOST_PP_REPEAT_2_61(m, d) m(3, 61, d)
+# define BOOST_PP_REPEAT_2_63(m, d) BOOST_PP_REPEAT_2_62(m, d) m(3, 62, d)
+# define BOOST_PP_REPEAT_2_64(m, d) BOOST_PP_REPEAT_2_63(m, d) m(3, 63, d)
+# define BOOST_PP_REPEAT_2_65(m, d) BOOST_PP_REPEAT_2_64(m, d) m(3, 64, d)
+# define BOOST_PP_REPEAT_2_66(m, d) BOOST_PP_REPEAT_2_65(m, d) m(3, 65, d)
+# define BOOST_PP_REPEAT_2_67(m, d) BOOST_PP_REPEAT_2_66(m, d) m(3, 66, d)
+# define BOOST_PP_REPEAT_2_68(m, d) BOOST_PP_REPEAT_2_67(m, d) m(3, 67, d)
+# define BOOST_PP_REPEAT_2_69(m, d) BOOST_PP_REPEAT_2_68(m, d) m(3, 68, d)
+# define BOOST_PP_REPEAT_2_70(m, d) BOOST_PP_REPEAT_2_69(m, d) m(3, 69, d)
+# define BOOST_PP_REPEAT_2_71(m, d) BOOST_PP_REPEAT_2_70(m, d) m(3, 70, d)
+# define BOOST_PP_REPEAT_2_72(m, d) BOOST_PP_REPEAT_2_71(m, d) m(3, 71, d)
+# define BOOST_PP_REPEAT_2_73(m, d) BOOST_PP_REPEAT_2_72(m, d) m(3, 72, d)
+# define BOOST_PP_REPEAT_2_74(m, d) BOOST_PP_REPEAT_2_73(m, d) m(3, 73, d)
+# define BOOST_PP_REPEAT_2_75(m, d) BOOST_PP_REPEAT_2_74(m, d) m(3, 74, d)
+# define BOOST_PP_REPEAT_2_76(m, d) BOOST_PP_REPEAT_2_75(m, d) m(3, 75, d)
+# define BOOST_PP_REPEAT_2_77(m, d) BOOST_PP_REPEAT_2_76(m, d) m(3, 76, d)
+# define BOOST_PP_REPEAT_2_78(m, d) BOOST_PP_REPEAT_2_77(m, d) m(3, 77, d)
+# define BOOST_PP_REPEAT_2_79(m, d) BOOST_PP_REPEAT_2_78(m, d) m(3, 78, d)
+# define BOOST_PP_REPEAT_2_80(m, d) BOOST_PP_REPEAT_2_79(m, d) m(3, 79, d)
+# define BOOST_PP_REPEAT_2_81(m, d) BOOST_PP_REPEAT_2_80(m, d) m(3, 80, d)
+# define BOOST_PP_REPEAT_2_82(m, d) BOOST_PP_REPEAT_2_81(m, d) m(3, 81, d)
+# define BOOST_PP_REPEAT_2_83(m, d) BOOST_PP_REPEAT_2_82(m, d) m(3, 82, d)
+# define BOOST_PP_REPEAT_2_84(m, d) BOOST_PP_REPEAT_2_83(m, d) m(3, 83, d)
+# define BOOST_PP_REPEAT_2_85(m, d) BOOST_PP_REPEAT_2_84(m, d) m(3, 84, d)
+# define BOOST_PP_REPEAT_2_86(m, d) BOOST_PP_REPEAT_2_85(m, d) m(3, 85, d)
+# define BOOST_PP_REPEAT_2_87(m, d) BOOST_PP_REPEAT_2_86(m, d) m(3, 86, d)
+# define BOOST_PP_REPEAT_2_88(m, d) BOOST_PP_REPEAT_2_87(m, d) m(3, 87, d)
+# define BOOST_PP_REPEAT_2_89(m, d) BOOST_PP_REPEAT_2_88(m, d) m(3, 88, d)
+# define BOOST_PP_REPEAT_2_90(m, d) BOOST_PP_REPEAT_2_89(m, d) m(3, 89, d)
+# define BOOST_PP_REPEAT_2_91(m, d) BOOST_PP_REPEAT_2_90(m, d) m(3, 90, d)
+# define BOOST_PP_REPEAT_2_92(m, d) BOOST_PP_REPEAT_2_91(m, d) m(3, 91, d)
+# define BOOST_PP_REPEAT_2_93(m, d) BOOST_PP_REPEAT_2_92(m, d) m(3, 92, d)
+# define BOOST_PP_REPEAT_2_94(m, d) BOOST_PP_REPEAT_2_93(m, d) m(3, 93, d)
+# define BOOST_PP_REPEAT_2_95(m, d) BOOST_PP_REPEAT_2_94(m, d) m(3, 94, d)
+# define BOOST_PP_REPEAT_2_96(m, d) BOOST_PP_REPEAT_2_95(m, d) m(3, 95, d)
+# define BOOST_PP_REPEAT_2_97(m, d) BOOST_PP_REPEAT_2_96(m, d) m(3, 96, d)
+# define BOOST_PP_REPEAT_2_98(m, d) BOOST_PP_REPEAT_2_97(m, d) m(3, 97, d)
+# define BOOST_PP_REPEAT_2_99(m, d) BOOST_PP_REPEAT_2_98(m, d) m(3, 98, d)
+# define BOOST_PP_REPEAT_2_100(m, d) BOOST_PP_REPEAT_2_99(m, d) m(3, 99, d)
+# define BOOST_PP_REPEAT_2_101(m, d) BOOST_PP_REPEAT_2_100(m, d) m(3, 100, d)
+# define BOOST_PP_REPEAT_2_102(m, d) BOOST_PP_REPEAT_2_101(m, d) m(3, 101, d)
+# define BOOST_PP_REPEAT_2_103(m, d) BOOST_PP_REPEAT_2_102(m, d) m(3, 102, d)
+# define BOOST_PP_REPEAT_2_104(m, d) BOOST_PP_REPEAT_2_103(m, d) m(3, 103, d)
+# define BOOST_PP_REPEAT_2_105(m, d) BOOST_PP_REPEAT_2_104(m, d) m(3, 104, d)
+# define BOOST_PP_REPEAT_2_106(m, d) BOOST_PP_REPEAT_2_105(m, d) m(3, 105, d)
+# define BOOST_PP_REPEAT_2_107(m, d) BOOST_PP_REPEAT_2_106(m, d) m(3, 106, d)
+# define BOOST_PP_REPEAT_2_108(m, d) BOOST_PP_REPEAT_2_107(m, d) m(3, 107, d)
+# define BOOST_PP_REPEAT_2_109(m, d) BOOST_PP_REPEAT_2_108(m, d) m(3, 108, d)
+# define BOOST_PP_REPEAT_2_110(m, d) BOOST_PP_REPEAT_2_109(m, d) m(3, 109, d)
+# define BOOST_PP_REPEAT_2_111(m, d) BOOST_PP_REPEAT_2_110(m, d) m(3, 110, d)
+# define BOOST_PP_REPEAT_2_112(m, d) BOOST_PP_REPEAT_2_111(m, d) m(3, 111, d)
+# define BOOST_PP_REPEAT_2_113(m, d) BOOST_PP_REPEAT_2_112(m, d) m(3, 112, d)
+# define BOOST_PP_REPEAT_2_114(m, d) BOOST_PP_REPEAT_2_113(m, d) m(3, 113, d)
+# define BOOST_PP_REPEAT_2_115(m, d) BOOST_PP_REPEAT_2_114(m, d) m(3, 114, d)
+# define BOOST_PP_REPEAT_2_116(m, d) BOOST_PP_REPEAT_2_115(m, d) m(3, 115, d)
+# define BOOST_PP_REPEAT_2_117(m, d) BOOST_PP_REPEAT_2_116(m, d) m(3, 116, d)
+# define BOOST_PP_REPEAT_2_118(m, d) BOOST_PP_REPEAT_2_117(m, d) m(3, 117, d)
+# define BOOST_PP_REPEAT_2_119(m, d) BOOST_PP_REPEAT_2_118(m, d) m(3, 118, d)
+# define BOOST_PP_REPEAT_2_120(m, d) BOOST_PP_REPEAT_2_119(m, d) m(3, 119, d)
+# define BOOST_PP_REPEAT_2_121(m, d) BOOST_PP_REPEAT_2_120(m, d) m(3, 120, d)
+# define BOOST_PP_REPEAT_2_122(m, d) BOOST_PP_REPEAT_2_121(m, d) m(3, 121, d)
+# define BOOST_PP_REPEAT_2_123(m, d) BOOST_PP_REPEAT_2_122(m, d) m(3, 122, d)
+# define BOOST_PP_REPEAT_2_124(m, d) BOOST_PP_REPEAT_2_123(m, d) m(3, 123, d)
+# define BOOST_PP_REPEAT_2_125(m, d) BOOST_PP_REPEAT_2_124(m, d) m(3, 124, d)
+# define BOOST_PP_REPEAT_2_126(m, d) BOOST_PP_REPEAT_2_125(m, d) m(3, 125, d)
+# define BOOST_PP_REPEAT_2_127(m, d) BOOST_PP_REPEAT_2_126(m, d) m(3, 126, d)
+# define BOOST_PP_REPEAT_2_128(m, d) BOOST_PP_REPEAT_2_127(m, d) m(3, 127, d)
+# define BOOST_PP_REPEAT_2_129(m, d) BOOST_PP_REPEAT_2_128(m, d) m(3, 128, d)
+# define BOOST_PP_REPEAT_2_130(m, d) BOOST_PP_REPEAT_2_129(m, d) m(3, 129, d)
+# define BOOST_PP_REPEAT_2_131(m, d) BOOST_PP_REPEAT_2_130(m, d) m(3, 130, d)
+# define BOOST_PP_REPEAT_2_132(m, d) BOOST_PP_REPEAT_2_131(m, d) m(3, 131, d)
+# define BOOST_PP_REPEAT_2_133(m, d) BOOST_PP_REPEAT_2_132(m, d) m(3, 132, d)
+# define BOOST_PP_REPEAT_2_134(m, d) BOOST_PP_REPEAT_2_133(m, d) m(3, 133, d)
+# define BOOST_PP_REPEAT_2_135(m, d) BOOST_PP_REPEAT_2_134(m, d) m(3, 134, d)
+# define BOOST_PP_REPEAT_2_136(m, d) BOOST_PP_REPEAT_2_135(m, d) m(3, 135, d)
+# define BOOST_PP_REPEAT_2_137(m, d) BOOST_PP_REPEAT_2_136(m, d) m(3, 136, d)
+# define BOOST_PP_REPEAT_2_138(m, d) BOOST_PP_REPEAT_2_137(m, d) m(3, 137, d)
+# define BOOST_PP_REPEAT_2_139(m, d) BOOST_PP_REPEAT_2_138(m, d) m(3, 138, d)
+# define BOOST_PP_REPEAT_2_140(m, d) BOOST_PP_REPEAT_2_139(m, d) m(3, 139, d)
+# define BOOST_PP_REPEAT_2_141(m, d) BOOST_PP_REPEAT_2_140(m, d) m(3, 140, d)
+# define BOOST_PP_REPEAT_2_142(m, d) BOOST_PP_REPEAT_2_141(m, d) m(3, 141, d)
+# define BOOST_PP_REPEAT_2_143(m, d) BOOST_PP_REPEAT_2_142(m, d) m(3, 142, d)
+# define BOOST_PP_REPEAT_2_144(m, d) BOOST_PP_REPEAT_2_143(m, d) m(3, 143, d)
+# define BOOST_PP_REPEAT_2_145(m, d) BOOST_PP_REPEAT_2_144(m, d) m(3, 144, d)
+# define BOOST_PP_REPEAT_2_146(m, d) BOOST_PP_REPEAT_2_145(m, d) m(3, 145, d)
+# define BOOST_PP_REPEAT_2_147(m, d) BOOST_PP_REPEAT_2_146(m, d) m(3, 146, d)
+# define BOOST_PP_REPEAT_2_148(m, d) BOOST_PP_REPEAT_2_147(m, d) m(3, 147, d)
+# define BOOST_PP_REPEAT_2_149(m, d) BOOST_PP_REPEAT_2_148(m, d) m(3, 148, d)
+# define BOOST_PP_REPEAT_2_150(m, d) BOOST_PP_REPEAT_2_149(m, d) m(3, 149, d)
+# define BOOST_PP_REPEAT_2_151(m, d) BOOST_PP_REPEAT_2_150(m, d) m(3, 150, d)
+# define BOOST_PP_REPEAT_2_152(m, d) BOOST_PP_REPEAT_2_151(m, d) m(3, 151, d)
+# define BOOST_PP_REPEAT_2_153(m, d) BOOST_PP_REPEAT_2_152(m, d) m(3, 152, d)
+# define BOOST_PP_REPEAT_2_154(m, d) BOOST_PP_REPEAT_2_153(m, d) m(3, 153, d)
+# define BOOST_PP_REPEAT_2_155(m, d) BOOST_PP_REPEAT_2_154(m, d) m(3, 154, d)
+# define BOOST_PP_REPEAT_2_156(m, d) BOOST_PP_REPEAT_2_155(m, d) m(3, 155, d)
+# define BOOST_PP_REPEAT_2_157(m, d) BOOST_PP_REPEAT_2_156(m, d) m(3, 156, d)
+# define BOOST_PP_REPEAT_2_158(m, d) BOOST_PP_REPEAT_2_157(m, d) m(3, 157, d)
+# define BOOST_PP_REPEAT_2_159(m, d) BOOST_PP_REPEAT_2_158(m, d) m(3, 158, d)
+# define BOOST_PP_REPEAT_2_160(m, d) BOOST_PP_REPEAT_2_159(m, d) m(3, 159, d)
+# define BOOST_PP_REPEAT_2_161(m, d) BOOST_PP_REPEAT_2_160(m, d) m(3, 160, d)
+# define BOOST_PP_REPEAT_2_162(m, d) BOOST_PP_REPEAT_2_161(m, d) m(3, 161, d)
+# define BOOST_PP_REPEAT_2_163(m, d) BOOST_PP_REPEAT_2_162(m, d) m(3, 162, d)
+# define BOOST_PP_REPEAT_2_164(m, d) BOOST_PP_REPEAT_2_163(m, d) m(3, 163, d)
+# define BOOST_PP_REPEAT_2_165(m, d) BOOST_PP_REPEAT_2_164(m, d) m(3, 164, d)
+# define BOOST_PP_REPEAT_2_166(m, d) BOOST_PP_REPEAT_2_165(m, d) m(3, 165, d)
+# define BOOST_PP_REPEAT_2_167(m, d) BOOST_PP_REPEAT_2_166(m, d) m(3, 166, d)
+# define BOOST_PP_REPEAT_2_168(m, d) BOOST_PP_REPEAT_2_167(m, d) m(3, 167, d)
+# define BOOST_PP_REPEAT_2_169(m, d) BOOST_PP_REPEAT_2_168(m, d) m(3, 168, d)
+# define BOOST_PP_REPEAT_2_170(m, d) BOOST_PP_REPEAT_2_169(m, d) m(3, 169, d)
+# define BOOST_PP_REPEAT_2_171(m, d) BOOST_PP_REPEAT_2_170(m, d) m(3, 170, d)
+# define BOOST_PP_REPEAT_2_172(m, d) BOOST_PP_REPEAT_2_171(m, d) m(3, 171, d)
+# define BOOST_PP_REPEAT_2_173(m, d) BOOST_PP_REPEAT_2_172(m, d) m(3, 172, d)
+# define BOOST_PP_REPEAT_2_174(m, d) BOOST_PP_REPEAT_2_173(m, d) m(3, 173, d)
+# define BOOST_PP_REPEAT_2_175(m, d) BOOST_PP_REPEAT_2_174(m, d) m(3, 174, d)
+# define BOOST_PP_REPEAT_2_176(m, d) BOOST_PP_REPEAT_2_175(m, d) m(3, 175, d)
+# define BOOST_PP_REPEAT_2_177(m, d) BOOST_PP_REPEAT_2_176(m, d) m(3, 176, d)
+# define BOOST_PP_REPEAT_2_178(m, d) BOOST_PP_REPEAT_2_177(m, d) m(3, 177, d)
+# define BOOST_PP_REPEAT_2_179(m, d) BOOST_PP_REPEAT_2_178(m, d) m(3, 178, d)
+# define BOOST_PP_REPEAT_2_180(m, d) BOOST_PP_REPEAT_2_179(m, d) m(3, 179, d)
+# define BOOST_PP_REPEAT_2_181(m, d) BOOST_PP_REPEAT_2_180(m, d) m(3, 180, d)
+# define BOOST_PP_REPEAT_2_182(m, d) BOOST_PP_REPEAT_2_181(m, d) m(3, 181, d)
+# define BOOST_PP_REPEAT_2_183(m, d) BOOST_PP_REPEAT_2_182(m, d) m(3, 182, d)
+# define BOOST_PP_REPEAT_2_184(m, d) BOOST_PP_REPEAT_2_183(m, d) m(3, 183, d)
+# define BOOST_PP_REPEAT_2_185(m, d) BOOST_PP_REPEAT_2_184(m, d) m(3, 184, d)
+# define BOOST_PP_REPEAT_2_186(m, d) BOOST_PP_REPEAT_2_185(m, d) m(3, 185, d)
+# define BOOST_PP_REPEAT_2_187(m, d) BOOST_PP_REPEAT_2_186(m, d) m(3, 186, d)
+# define BOOST_PP_REPEAT_2_188(m, d) BOOST_PP_REPEAT_2_187(m, d) m(3, 187, d)
+# define BOOST_PP_REPEAT_2_189(m, d) BOOST_PP_REPEAT_2_188(m, d) m(3, 188, d)
+# define BOOST_PP_REPEAT_2_190(m, d) BOOST_PP_REPEAT_2_189(m, d) m(3, 189, d)
+# define BOOST_PP_REPEAT_2_191(m, d) BOOST_PP_REPEAT_2_190(m, d) m(3, 190, d)
+# define BOOST_PP_REPEAT_2_192(m, d) BOOST_PP_REPEAT_2_191(m, d) m(3, 191, d)
+# define BOOST_PP_REPEAT_2_193(m, d) BOOST_PP_REPEAT_2_192(m, d) m(3, 192, d)
+# define BOOST_PP_REPEAT_2_194(m, d) BOOST_PP_REPEAT_2_193(m, d) m(3, 193, d)
+# define BOOST_PP_REPEAT_2_195(m, d) BOOST_PP_REPEAT_2_194(m, d) m(3, 194, d)
+# define BOOST_PP_REPEAT_2_196(m, d) BOOST_PP_REPEAT_2_195(m, d) m(3, 195, d)
+# define BOOST_PP_REPEAT_2_197(m, d) BOOST_PP_REPEAT_2_196(m, d) m(3, 196, d)
+# define BOOST_PP_REPEAT_2_198(m, d) BOOST_PP_REPEAT_2_197(m, d) m(3, 197, d)
+# define BOOST_PP_REPEAT_2_199(m, d) BOOST_PP_REPEAT_2_198(m, d) m(3, 198, d)
+# define BOOST_PP_REPEAT_2_200(m, d) BOOST_PP_REPEAT_2_199(m, d) m(3, 199, d)
+# define BOOST_PP_REPEAT_2_201(m, d) BOOST_PP_REPEAT_2_200(m, d) m(3, 200, d)
+# define BOOST_PP_REPEAT_2_202(m, d) BOOST_PP_REPEAT_2_201(m, d) m(3, 201, d)
+# define BOOST_PP_REPEAT_2_203(m, d) BOOST_PP_REPEAT_2_202(m, d) m(3, 202, d)
+# define BOOST_PP_REPEAT_2_204(m, d) BOOST_PP_REPEAT_2_203(m, d) m(3, 203, d)
+# define BOOST_PP_REPEAT_2_205(m, d) BOOST_PP_REPEAT_2_204(m, d) m(3, 204, d)
+# define BOOST_PP_REPEAT_2_206(m, d) BOOST_PP_REPEAT_2_205(m, d) m(3, 205, d)
+# define BOOST_PP_REPEAT_2_207(m, d) BOOST_PP_REPEAT_2_206(m, d) m(3, 206, d)
+# define BOOST_PP_REPEAT_2_208(m, d) BOOST_PP_REPEAT_2_207(m, d) m(3, 207, d)
+# define BOOST_PP_REPEAT_2_209(m, d) BOOST_PP_REPEAT_2_208(m, d) m(3, 208, d)
+# define BOOST_PP_REPEAT_2_210(m, d) BOOST_PP_REPEAT_2_209(m, d) m(3, 209, d)
+# define BOOST_PP_REPEAT_2_211(m, d) BOOST_PP_REPEAT_2_210(m, d) m(3, 210, d)
+# define BOOST_PP_REPEAT_2_212(m, d) BOOST_PP_REPEAT_2_211(m, d) m(3, 211, d)
+# define BOOST_PP_REPEAT_2_213(m, d) BOOST_PP_REPEAT_2_212(m, d) m(3, 212, d)
+# define BOOST_PP_REPEAT_2_214(m, d) BOOST_PP_REPEAT_2_213(m, d) m(3, 213, d)
+# define BOOST_PP_REPEAT_2_215(m, d) BOOST_PP_REPEAT_2_214(m, d) m(3, 214, d)
+# define BOOST_PP_REPEAT_2_216(m, d) BOOST_PP_REPEAT_2_215(m, d) m(3, 215, d)
+# define BOOST_PP_REPEAT_2_217(m, d) BOOST_PP_REPEAT_2_216(m, d) m(3, 216, d)
+# define BOOST_PP_REPEAT_2_218(m, d) BOOST_PP_REPEAT_2_217(m, d) m(3, 217, d)
+# define BOOST_PP_REPEAT_2_219(m, d) BOOST_PP_REPEAT_2_218(m, d) m(3, 218, d)
+# define BOOST_PP_REPEAT_2_220(m, d) BOOST_PP_REPEAT_2_219(m, d) m(3, 219, d)
+# define BOOST_PP_REPEAT_2_221(m, d) BOOST_PP_REPEAT_2_220(m, d) m(3, 220, d)
+# define BOOST_PP_REPEAT_2_222(m, d) BOOST_PP_REPEAT_2_221(m, d) m(3, 221, d)
+# define BOOST_PP_REPEAT_2_223(m, d) BOOST_PP_REPEAT_2_222(m, d) m(3, 222, d)
+# define BOOST_PP_REPEAT_2_224(m, d) BOOST_PP_REPEAT_2_223(m, d) m(3, 223, d)
+# define BOOST_PP_REPEAT_2_225(m, d) BOOST_PP_REPEAT_2_224(m, d) m(3, 224, d)
+# define BOOST_PP_REPEAT_2_226(m, d) BOOST_PP_REPEAT_2_225(m, d) m(3, 225, d)
+# define BOOST_PP_REPEAT_2_227(m, d) BOOST_PP_REPEAT_2_226(m, d) m(3, 226, d)
+# define BOOST_PP_REPEAT_2_228(m, d) BOOST_PP_REPEAT_2_227(m, d) m(3, 227, d)
+# define BOOST_PP_REPEAT_2_229(m, d) BOOST_PP_REPEAT_2_228(m, d) m(3, 228, d)
+# define BOOST_PP_REPEAT_2_230(m, d) BOOST_PP_REPEAT_2_229(m, d) m(3, 229, d)
+# define BOOST_PP_REPEAT_2_231(m, d) BOOST_PP_REPEAT_2_230(m, d) m(3, 230, d)
+# define BOOST_PP_REPEAT_2_232(m, d) BOOST_PP_REPEAT_2_231(m, d) m(3, 231, d)
+# define BOOST_PP_REPEAT_2_233(m, d) BOOST_PP_REPEAT_2_232(m, d) m(3, 232, d)
+# define BOOST_PP_REPEAT_2_234(m, d) BOOST_PP_REPEAT_2_233(m, d) m(3, 233, d)
+# define BOOST_PP_REPEAT_2_235(m, d) BOOST_PP_REPEAT_2_234(m, d) m(3, 234, d)
+# define BOOST_PP_REPEAT_2_236(m, d) BOOST_PP_REPEAT_2_235(m, d) m(3, 235, d)
+# define BOOST_PP_REPEAT_2_237(m, d) BOOST_PP_REPEAT_2_236(m, d) m(3, 236, d)
+# define BOOST_PP_REPEAT_2_238(m, d) BOOST_PP_REPEAT_2_237(m, d) m(3, 237, d)
+# define BOOST_PP_REPEAT_2_239(m, d) BOOST_PP_REPEAT_2_238(m, d) m(3, 238, d)
+# define BOOST_PP_REPEAT_2_240(m, d) BOOST_PP_REPEAT_2_239(m, d) m(3, 239, d)
+# define BOOST_PP_REPEAT_2_241(m, d) BOOST_PP_REPEAT_2_240(m, d) m(3, 240, d)
+# define BOOST_PP_REPEAT_2_242(m, d) BOOST_PP_REPEAT_2_241(m, d) m(3, 241, d)
+# define BOOST_PP_REPEAT_2_243(m, d) BOOST_PP_REPEAT_2_242(m, d) m(3, 242, d)
+# define BOOST_PP_REPEAT_2_244(m, d) BOOST_PP_REPEAT_2_243(m, d) m(3, 243, d)
+# define BOOST_PP_REPEAT_2_245(m, d) BOOST_PP_REPEAT_2_244(m, d) m(3, 244, d)
+# define BOOST_PP_REPEAT_2_246(m, d) BOOST_PP_REPEAT_2_245(m, d) m(3, 245, d)
+# define BOOST_PP_REPEAT_2_247(m, d) BOOST_PP_REPEAT_2_246(m, d) m(3, 246, d)
+# define BOOST_PP_REPEAT_2_248(m, d) BOOST_PP_REPEAT_2_247(m, d) m(3, 247, d)
+# define BOOST_PP_REPEAT_2_249(m, d) BOOST_PP_REPEAT_2_248(m, d) m(3, 248, d)
+# define BOOST_PP_REPEAT_2_250(m, d) BOOST_PP_REPEAT_2_249(m, d) m(3, 249, d)
+# define BOOST_PP_REPEAT_2_251(m, d) BOOST_PP_REPEAT_2_250(m, d) m(3, 250, d)
+# define BOOST_PP_REPEAT_2_252(m, d) BOOST_PP_REPEAT_2_251(m, d) m(3, 251, d)
+# define BOOST_PP_REPEAT_2_253(m, d) BOOST_PP_REPEAT_2_252(m, d) m(3, 252, d)
+# define BOOST_PP_REPEAT_2_254(m, d) BOOST_PP_REPEAT_2_253(m, d) m(3, 253, d)
+# define BOOST_PP_REPEAT_2_255(m, d) BOOST_PP_REPEAT_2_254(m, d) m(3, 254, d)
+# define BOOST_PP_REPEAT_2_256(m, d) BOOST_PP_REPEAT_2_255(m, d) m(3, 255, d)
+#
+# define BOOST_PP_REPEAT_3_0(m, d)
+# define BOOST_PP_REPEAT_3_1(m, d) m(4, 0, d)
+# define BOOST_PP_REPEAT_3_2(m, d) BOOST_PP_REPEAT_3_1(m, d) m(4, 1, d)
+# define BOOST_PP_REPEAT_3_3(m, d) BOOST_PP_REPEAT_3_2(m, d) m(4, 2, d)
+# define BOOST_PP_REPEAT_3_4(m, d) BOOST_PP_REPEAT_3_3(m, d) m(4, 3, d)
+# define BOOST_PP_REPEAT_3_5(m, d) BOOST_PP_REPEAT_3_4(m, d) m(4, 4, d)
+# define BOOST_PP_REPEAT_3_6(m, d) BOOST_PP_REPEAT_3_5(m, d) m(4, 5, d)
+# define BOOST_PP_REPEAT_3_7(m, d) BOOST_PP_REPEAT_3_6(m, d) m(4, 6, d)
+# define BOOST_PP_REPEAT_3_8(m, d) BOOST_PP_REPEAT_3_7(m, d) m(4, 7, d)
+# define BOOST_PP_REPEAT_3_9(m, d) BOOST_PP_REPEAT_3_8(m, d) m(4, 8, d)
+# define BOOST_PP_REPEAT_3_10(m, d) BOOST_PP_REPEAT_3_9(m, d) m(4, 9, d)
+# define BOOST_PP_REPEAT_3_11(m, d) BOOST_PP_REPEAT_3_10(m, d) m(4, 10, d)
+# define BOOST_PP_REPEAT_3_12(m, d) BOOST_PP_REPEAT_3_11(m, d) m(4, 11, d)
+# define BOOST_PP_REPEAT_3_13(m, d) BOOST_PP_REPEAT_3_12(m, d) m(4, 12, d)
+# define BOOST_PP_REPEAT_3_14(m, d) BOOST_PP_REPEAT_3_13(m, d) m(4, 13, d)
+# define BOOST_PP_REPEAT_3_15(m, d) BOOST_PP_REPEAT_3_14(m, d) m(4, 14, d)
+# define BOOST_PP_REPEAT_3_16(m, d) BOOST_PP_REPEAT_3_15(m, d) m(4, 15, d)
+# define BOOST_PP_REPEAT_3_17(m, d) BOOST_PP_REPEAT_3_16(m, d) m(4, 16, d)
+# define BOOST_PP_REPEAT_3_18(m, d) BOOST_PP_REPEAT_3_17(m, d) m(4, 17, d)
+# define BOOST_PP_REPEAT_3_19(m, d) BOOST_PP_REPEAT_3_18(m, d) m(4, 18, d)
+# define BOOST_PP_REPEAT_3_20(m, d) BOOST_PP_REPEAT_3_19(m, d) m(4, 19, d)
+# define BOOST_PP_REPEAT_3_21(m, d) BOOST_PP_REPEAT_3_20(m, d) m(4, 20, d)
+# define BOOST_PP_REPEAT_3_22(m, d) BOOST_PP_REPEAT_3_21(m, d) m(4, 21, d)
+# define BOOST_PP_REPEAT_3_23(m, d) BOOST_PP_REPEAT_3_22(m, d) m(4, 22, d)
+# define BOOST_PP_REPEAT_3_24(m, d) BOOST_PP_REPEAT_3_23(m, d) m(4, 23, d)
+# define BOOST_PP_REPEAT_3_25(m, d) BOOST_PP_REPEAT_3_24(m, d) m(4, 24, d)
+# define BOOST_PP_REPEAT_3_26(m, d) BOOST_PP_REPEAT_3_25(m, d) m(4, 25, d)
+# define BOOST_PP_REPEAT_3_27(m, d) BOOST_PP_REPEAT_3_26(m, d) m(4, 26, d)
+# define BOOST_PP_REPEAT_3_28(m, d) BOOST_PP_REPEAT_3_27(m, d) m(4, 27, d)
+# define BOOST_PP_REPEAT_3_29(m, d) BOOST_PP_REPEAT_3_28(m, d) m(4, 28, d)
+# define BOOST_PP_REPEAT_3_30(m, d) BOOST_PP_REPEAT_3_29(m, d) m(4, 29, d)
+# define BOOST_PP_REPEAT_3_31(m, d) BOOST_PP_REPEAT_3_30(m, d) m(4, 30, d)
+# define BOOST_PP_REPEAT_3_32(m, d) BOOST_PP_REPEAT_3_31(m, d) m(4, 31, d)
+# define BOOST_PP_REPEAT_3_33(m, d) BOOST_PP_REPEAT_3_32(m, d) m(4, 32, d)
+# define BOOST_PP_REPEAT_3_34(m, d) BOOST_PP_REPEAT_3_33(m, d) m(4, 33, d)
+# define BOOST_PP_REPEAT_3_35(m, d) BOOST_PP_REPEAT_3_34(m, d) m(4, 34, d)
+# define BOOST_PP_REPEAT_3_36(m, d) BOOST_PP_REPEAT_3_35(m, d) m(4, 35, d)
+# define BOOST_PP_REPEAT_3_37(m, d) BOOST_PP_REPEAT_3_36(m, d) m(4, 36, d)
+# define BOOST_PP_REPEAT_3_38(m, d) BOOST_PP_REPEAT_3_37(m, d) m(4, 37, d)
+# define BOOST_PP_REPEAT_3_39(m, d) BOOST_PP_REPEAT_3_38(m, d) m(4, 38, d)
+# define BOOST_PP_REPEAT_3_40(m, d) BOOST_PP_REPEAT_3_39(m, d) m(4, 39, d)
+# define BOOST_PP_REPEAT_3_41(m, d) BOOST_PP_REPEAT_3_40(m, d) m(4, 40, d)
+# define BOOST_PP_REPEAT_3_42(m, d) BOOST_PP_REPEAT_3_41(m, d) m(4, 41, d)
+# define BOOST_PP_REPEAT_3_43(m, d) BOOST_PP_REPEAT_3_42(m, d) m(4, 42, d)
+# define BOOST_PP_REPEAT_3_44(m, d) BOOST_PP_REPEAT_3_43(m, d) m(4, 43, d)
+# define BOOST_PP_REPEAT_3_45(m, d) BOOST_PP_REPEAT_3_44(m, d) m(4, 44, d)
+# define BOOST_PP_REPEAT_3_46(m, d) BOOST_PP_REPEAT_3_45(m, d) m(4, 45, d)
+# define BOOST_PP_REPEAT_3_47(m, d) BOOST_PP_REPEAT_3_46(m, d) m(4, 46, d)
+# define BOOST_PP_REPEAT_3_48(m, d) BOOST_PP_REPEAT_3_47(m, d) m(4, 47, d)
+# define BOOST_PP_REPEAT_3_49(m, d) BOOST_PP_REPEAT_3_48(m, d) m(4, 48, d)
+# define BOOST_PP_REPEAT_3_50(m, d) BOOST_PP_REPEAT_3_49(m, d) m(4, 49, d)
+# define BOOST_PP_REPEAT_3_51(m, d) BOOST_PP_REPEAT_3_50(m, d) m(4, 50, d)
+# define BOOST_PP_REPEAT_3_52(m, d) BOOST_PP_REPEAT_3_51(m, d) m(4, 51, d)
+# define BOOST_PP_REPEAT_3_53(m, d) BOOST_PP_REPEAT_3_52(m, d) m(4, 52, d)
+# define BOOST_PP_REPEAT_3_54(m, d) BOOST_PP_REPEAT_3_53(m, d) m(4, 53, d)
+# define BOOST_PP_REPEAT_3_55(m, d) BOOST_PP_REPEAT_3_54(m, d) m(4, 54, d)
+# define BOOST_PP_REPEAT_3_56(m, d) BOOST_PP_REPEAT_3_55(m, d) m(4, 55, d)
+# define BOOST_PP_REPEAT_3_57(m, d) BOOST_PP_REPEAT_3_56(m, d) m(4, 56, d)
+# define BOOST_PP_REPEAT_3_58(m, d) BOOST_PP_REPEAT_3_57(m, d) m(4, 57, d)
+# define BOOST_PP_REPEAT_3_59(m, d) BOOST_PP_REPEAT_3_58(m, d) m(4, 58, d)
+# define BOOST_PP_REPEAT_3_60(m, d) BOOST_PP_REPEAT_3_59(m, d) m(4, 59, d)
+# define BOOST_PP_REPEAT_3_61(m, d) BOOST_PP_REPEAT_3_60(m, d) m(4, 60, d)
+# define BOOST_PP_REPEAT_3_62(m, d) BOOST_PP_REPEAT_3_61(m, d) m(4, 61, d)
+# define BOOST_PP_REPEAT_3_63(m, d) BOOST_PP_REPEAT_3_62(m, d) m(4, 62, d)
+# define BOOST_PP_REPEAT_3_64(m, d) BOOST_PP_REPEAT_3_63(m, d) m(4, 63, d)
+# define BOOST_PP_REPEAT_3_65(m, d) BOOST_PP_REPEAT_3_64(m, d) m(4, 64, d)
+# define BOOST_PP_REPEAT_3_66(m, d) BOOST_PP_REPEAT_3_65(m, d) m(4, 65, d)
+# define BOOST_PP_REPEAT_3_67(m, d) BOOST_PP_REPEAT_3_66(m, d) m(4, 66, d)
+# define BOOST_PP_REPEAT_3_68(m, d) BOOST_PP_REPEAT_3_67(m, d) m(4, 67, d)
+# define BOOST_PP_REPEAT_3_69(m, d) BOOST_PP_REPEAT_3_68(m, d) m(4, 68, d)
+# define BOOST_PP_REPEAT_3_70(m, d) BOOST_PP_REPEAT_3_69(m, d) m(4, 69, d)
+# define BOOST_PP_REPEAT_3_71(m, d) BOOST_PP_REPEAT_3_70(m, d) m(4, 70, d)
+# define BOOST_PP_REPEAT_3_72(m, d) BOOST_PP_REPEAT_3_71(m, d) m(4, 71, d)
+# define BOOST_PP_REPEAT_3_73(m, d) BOOST_PP_REPEAT_3_72(m, d) m(4, 72, d)
+# define BOOST_PP_REPEAT_3_74(m, d) BOOST_PP_REPEAT_3_73(m, d) m(4, 73, d)
+# define BOOST_PP_REPEAT_3_75(m, d) BOOST_PP_REPEAT_3_74(m, d) m(4, 74, d)
+# define BOOST_PP_REPEAT_3_76(m, d) BOOST_PP_REPEAT_3_75(m, d) m(4, 75, d)
+# define BOOST_PP_REPEAT_3_77(m, d) BOOST_PP_REPEAT_3_76(m, d) m(4, 76, d)
+# define BOOST_PP_REPEAT_3_78(m, d) BOOST_PP_REPEAT_3_77(m, d) m(4, 77, d)
+# define BOOST_PP_REPEAT_3_79(m, d) BOOST_PP_REPEAT_3_78(m, d) m(4, 78, d)
+# define BOOST_PP_REPEAT_3_80(m, d) BOOST_PP_REPEAT_3_79(m, d) m(4, 79, d)
+# define BOOST_PP_REPEAT_3_81(m, d) BOOST_PP_REPEAT_3_80(m, d) m(4, 80, d)
+# define BOOST_PP_REPEAT_3_82(m, d) BOOST_PP_REPEAT_3_81(m, d) m(4, 81, d)
+# define BOOST_PP_REPEAT_3_83(m, d) BOOST_PP_REPEAT_3_82(m, d) m(4, 82, d)
+# define BOOST_PP_REPEAT_3_84(m, d) BOOST_PP_REPEAT_3_83(m, d) m(4, 83, d)
+# define BOOST_PP_REPEAT_3_85(m, d) BOOST_PP_REPEAT_3_84(m, d) m(4, 84, d)
+# define BOOST_PP_REPEAT_3_86(m, d) BOOST_PP_REPEAT_3_85(m, d) m(4, 85, d)
+# define BOOST_PP_REPEAT_3_87(m, d) BOOST_PP_REPEAT_3_86(m, d) m(4, 86, d)
+# define BOOST_PP_REPEAT_3_88(m, d) BOOST_PP_REPEAT_3_87(m, d) m(4, 87, d)
+# define BOOST_PP_REPEAT_3_89(m, d) BOOST_PP_REPEAT_3_88(m, d) m(4, 88, d)
+# define BOOST_PP_REPEAT_3_90(m, d) BOOST_PP_REPEAT_3_89(m, d) m(4, 89, d)
+# define BOOST_PP_REPEAT_3_91(m, d) BOOST_PP_REPEAT_3_90(m, d) m(4, 90, d)
+# define BOOST_PP_REPEAT_3_92(m, d) BOOST_PP_REPEAT_3_91(m, d) m(4, 91, d)
+# define BOOST_PP_REPEAT_3_93(m, d) BOOST_PP_REPEAT_3_92(m, d) m(4, 92, d)
+# define BOOST_PP_REPEAT_3_94(m, d) BOOST_PP_REPEAT_3_93(m, d) m(4, 93, d)
+# define BOOST_PP_REPEAT_3_95(m, d) BOOST_PP_REPEAT_3_94(m, d) m(4, 94, d)
+# define BOOST_PP_REPEAT_3_96(m, d) BOOST_PP_REPEAT_3_95(m, d) m(4, 95, d)
+# define BOOST_PP_REPEAT_3_97(m, d) BOOST_PP_REPEAT_3_96(m, d) m(4, 96, d)
+# define BOOST_PP_REPEAT_3_98(m, d) BOOST_PP_REPEAT_3_97(m, d) m(4, 97, d)
+# define BOOST_PP_REPEAT_3_99(m, d) BOOST_PP_REPEAT_3_98(m, d) m(4, 98, d)
+# define BOOST_PP_REPEAT_3_100(m, d) BOOST_PP_REPEAT_3_99(m, d) m(4, 99, d)
+# define BOOST_PP_REPEAT_3_101(m, d) BOOST_PP_REPEAT_3_100(m, d) m(4, 100, d)
+# define BOOST_PP_REPEAT_3_102(m, d) BOOST_PP_REPEAT_3_101(m, d) m(4, 101, d)
+# define BOOST_PP_REPEAT_3_103(m, d) BOOST_PP_REPEAT_3_102(m, d) m(4, 102, d)
+# define BOOST_PP_REPEAT_3_104(m, d) BOOST_PP_REPEAT_3_103(m, d) m(4, 103, d)
+# define BOOST_PP_REPEAT_3_105(m, d) BOOST_PP_REPEAT_3_104(m, d) m(4, 104, d)
+# define BOOST_PP_REPEAT_3_106(m, d) BOOST_PP_REPEAT_3_105(m, d) m(4, 105, d)
+# define BOOST_PP_REPEAT_3_107(m, d) BOOST_PP_REPEAT_3_106(m, d) m(4, 106, d)
+# define BOOST_PP_REPEAT_3_108(m, d) BOOST_PP_REPEAT_3_107(m, d) m(4, 107, d)
+# define BOOST_PP_REPEAT_3_109(m, d) BOOST_PP_REPEAT_3_108(m, d) m(4, 108, d)
+# define BOOST_PP_REPEAT_3_110(m, d) BOOST_PP_REPEAT_3_109(m, d) m(4, 109, d)
+# define BOOST_PP_REPEAT_3_111(m, d) BOOST_PP_REPEAT_3_110(m, d) m(4, 110, d)
+# define BOOST_PP_REPEAT_3_112(m, d) BOOST_PP_REPEAT_3_111(m, d) m(4, 111, d)
+# define BOOST_PP_REPEAT_3_113(m, d) BOOST_PP_REPEAT_3_112(m, d) m(4, 112, d)
+# define BOOST_PP_REPEAT_3_114(m, d) BOOST_PP_REPEAT_3_113(m, d) m(4, 113, d)
+# define BOOST_PP_REPEAT_3_115(m, d) BOOST_PP_REPEAT_3_114(m, d) m(4, 114, d)
+# define BOOST_PP_REPEAT_3_116(m, d) BOOST_PP_REPEAT_3_115(m, d) m(4, 115, d)
+# define BOOST_PP_REPEAT_3_117(m, d) BOOST_PP_REPEAT_3_116(m, d) m(4, 116, d)
+# define BOOST_PP_REPEAT_3_118(m, d) BOOST_PP_REPEAT_3_117(m, d) m(4, 117, d)
+# define BOOST_PP_REPEAT_3_119(m, d) BOOST_PP_REPEAT_3_118(m, d) m(4, 118, d)
+# define BOOST_PP_REPEAT_3_120(m, d) BOOST_PP_REPEAT_3_119(m, d) m(4, 119, d)
+# define BOOST_PP_REPEAT_3_121(m, d) BOOST_PP_REPEAT_3_120(m, d) m(4, 120, d)
+# define BOOST_PP_REPEAT_3_122(m, d) BOOST_PP_REPEAT_3_121(m, d) m(4, 121, d)
+# define BOOST_PP_REPEAT_3_123(m, d) BOOST_PP_REPEAT_3_122(m, d) m(4, 122, d)
+# define BOOST_PP_REPEAT_3_124(m, d) BOOST_PP_REPEAT_3_123(m, d) m(4, 123, d)
+# define BOOST_PP_REPEAT_3_125(m, d) BOOST_PP_REPEAT_3_124(m, d) m(4, 124, d)
+# define BOOST_PP_REPEAT_3_126(m, d) BOOST_PP_REPEAT_3_125(m, d) m(4, 125, d)
+# define BOOST_PP_REPEAT_3_127(m, d) BOOST_PP_REPEAT_3_126(m, d) m(4, 126, d)
+# define BOOST_PP_REPEAT_3_128(m, d) BOOST_PP_REPEAT_3_127(m, d) m(4, 127, d)
+# define BOOST_PP_REPEAT_3_129(m, d) BOOST_PP_REPEAT_3_128(m, d) m(4, 128, d)
+# define BOOST_PP_REPEAT_3_130(m, d) BOOST_PP_REPEAT_3_129(m, d) m(4, 129, d)
+# define BOOST_PP_REPEAT_3_131(m, d) BOOST_PP_REPEAT_3_130(m, d) m(4, 130, d)
+# define BOOST_PP_REPEAT_3_132(m, d) BOOST_PP_REPEAT_3_131(m, d) m(4, 131, d)
+# define BOOST_PP_REPEAT_3_133(m, d) BOOST_PP_REPEAT_3_132(m, d) m(4, 132, d)
+# define BOOST_PP_REPEAT_3_134(m, d) BOOST_PP_REPEAT_3_133(m, d) m(4, 133, d)
+# define BOOST_PP_REPEAT_3_135(m, d) BOOST_PP_REPEAT_3_134(m, d) m(4, 134, d)
+# define BOOST_PP_REPEAT_3_136(m, d) BOOST_PP_REPEAT_3_135(m, d) m(4, 135, d)
+# define BOOST_PP_REPEAT_3_137(m, d) BOOST_PP_REPEAT_3_136(m, d) m(4, 136, d)
+# define BOOST_PP_REPEAT_3_138(m, d) BOOST_PP_REPEAT_3_137(m, d) m(4, 137, d)
+# define BOOST_PP_REPEAT_3_139(m, d) BOOST_PP_REPEAT_3_138(m, d) m(4, 138, d)
+# define BOOST_PP_REPEAT_3_140(m, d) BOOST_PP_REPEAT_3_139(m, d) m(4, 139, d)
+# define BOOST_PP_REPEAT_3_141(m, d) BOOST_PP_REPEAT_3_140(m, d) m(4, 140, d)
+# define BOOST_PP_REPEAT_3_142(m, d) BOOST_PP_REPEAT_3_141(m, d) m(4, 141, d)
+# define BOOST_PP_REPEAT_3_143(m, d) BOOST_PP_REPEAT_3_142(m, d) m(4, 142, d)
+# define BOOST_PP_REPEAT_3_144(m, d) BOOST_PP_REPEAT_3_143(m, d) m(4, 143, d)
+# define BOOST_PP_REPEAT_3_145(m, d) BOOST_PP_REPEAT_3_144(m, d) m(4, 144, d)
+# define BOOST_PP_REPEAT_3_146(m, d) BOOST_PP_REPEAT_3_145(m, d) m(4, 145, d)
+# define BOOST_PP_REPEAT_3_147(m, d) BOOST_PP_REPEAT_3_146(m, d) m(4, 146, d)
+# define BOOST_PP_REPEAT_3_148(m, d) BOOST_PP_REPEAT_3_147(m, d) m(4, 147, d)
+# define BOOST_PP_REPEAT_3_149(m, d) BOOST_PP_REPEAT_3_148(m, d) m(4, 148, d)
+# define BOOST_PP_REPEAT_3_150(m, d) BOOST_PP_REPEAT_3_149(m, d) m(4, 149, d)
+# define BOOST_PP_REPEAT_3_151(m, d) BOOST_PP_REPEAT_3_150(m, d) m(4, 150, d)
+# define BOOST_PP_REPEAT_3_152(m, d) BOOST_PP_REPEAT_3_151(m, d) m(4, 151, d)
+# define BOOST_PP_REPEAT_3_153(m, d) BOOST_PP_REPEAT_3_152(m, d) m(4, 152, d)
+# define BOOST_PP_REPEAT_3_154(m, d) BOOST_PP_REPEAT_3_153(m, d) m(4, 153, d)
+# define BOOST_PP_REPEAT_3_155(m, d) BOOST_PP_REPEAT_3_154(m, d) m(4, 154, d)
+# define BOOST_PP_REPEAT_3_156(m, d) BOOST_PP_REPEAT_3_155(m, d) m(4, 155, d)
+# define BOOST_PP_REPEAT_3_157(m, d) BOOST_PP_REPEAT_3_156(m, d) m(4, 156, d)
+# define BOOST_PP_REPEAT_3_158(m, d) BOOST_PP_REPEAT_3_157(m, d) m(4, 157, d)
+# define BOOST_PP_REPEAT_3_159(m, d) BOOST_PP_REPEAT_3_158(m, d) m(4, 158, d)
+# define BOOST_PP_REPEAT_3_160(m, d) BOOST_PP_REPEAT_3_159(m, d) m(4, 159, d)
+# define BOOST_PP_REPEAT_3_161(m, d) BOOST_PP_REPEAT_3_160(m, d) m(4, 160, d)
+# define BOOST_PP_REPEAT_3_162(m, d) BOOST_PP_REPEAT_3_161(m, d) m(4, 161, d)
+# define BOOST_PP_REPEAT_3_163(m, d) BOOST_PP_REPEAT_3_162(m, d) m(4, 162, d)
+# define BOOST_PP_REPEAT_3_164(m, d) BOOST_PP_REPEAT_3_163(m, d) m(4, 163, d)
+# define BOOST_PP_REPEAT_3_165(m, d) BOOST_PP_REPEAT_3_164(m, d) m(4, 164, d)
+# define BOOST_PP_REPEAT_3_166(m, d) BOOST_PP_REPEAT_3_165(m, d) m(4, 165, d)
+# define BOOST_PP_REPEAT_3_167(m, d) BOOST_PP_REPEAT_3_166(m, d) m(4, 166, d)
+# define BOOST_PP_REPEAT_3_168(m, d) BOOST_PP_REPEAT_3_167(m, d) m(4, 167, d)
+# define BOOST_PP_REPEAT_3_169(m, d) BOOST_PP_REPEAT_3_168(m, d) m(4, 168, d)
+# define BOOST_PP_REPEAT_3_170(m, d) BOOST_PP_REPEAT_3_169(m, d) m(4, 169, d)
+# define BOOST_PP_REPEAT_3_171(m, d) BOOST_PP_REPEAT_3_170(m, d) m(4, 170, d)
+# define BOOST_PP_REPEAT_3_172(m, d) BOOST_PP_REPEAT_3_171(m, d) m(4, 171, d)
+# define BOOST_PP_REPEAT_3_173(m, d) BOOST_PP_REPEAT_3_172(m, d) m(4, 172, d)
+# define BOOST_PP_REPEAT_3_174(m, d) BOOST_PP_REPEAT_3_173(m, d) m(4, 173, d)
+# define BOOST_PP_REPEAT_3_175(m, d) BOOST_PP_REPEAT_3_174(m, d) m(4, 174, d)
+# define BOOST_PP_REPEAT_3_176(m, d) BOOST_PP_REPEAT_3_175(m, d) m(4, 175, d)
+# define BOOST_PP_REPEAT_3_177(m, d) BOOST_PP_REPEAT_3_176(m, d) m(4, 176, d)
+# define BOOST_PP_REPEAT_3_178(m, d) BOOST_PP_REPEAT_3_177(m, d) m(4, 177, d)
+# define BOOST_PP_REPEAT_3_179(m, d) BOOST_PP_REPEAT_3_178(m, d) m(4, 178, d)
+# define BOOST_PP_REPEAT_3_180(m, d) BOOST_PP_REPEAT_3_179(m, d) m(4, 179, d)
+# define BOOST_PP_REPEAT_3_181(m, d) BOOST_PP_REPEAT_3_180(m, d) m(4, 180, d)
+# define BOOST_PP_REPEAT_3_182(m, d) BOOST_PP_REPEAT_3_181(m, d) m(4, 181, d)
+# define BOOST_PP_REPEAT_3_183(m, d) BOOST_PP_REPEAT_3_182(m, d) m(4, 182, d)
+# define BOOST_PP_REPEAT_3_184(m, d) BOOST_PP_REPEAT_3_183(m, d) m(4, 183, d)
+# define BOOST_PP_REPEAT_3_185(m, d) BOOST_PP_REPEAT_3_184(m, d) m(4, 184, d)
+# define BOOST_PP_REPEAT_3_186(m, d) BOOST_PP_REPEAT_3_185(m, d) m(4, 185, d)
+# define BOOST_PP_REPEAT_3_187(m, d) BOOST_PP_REPEAT_3_186(m, d) m(4, 186, d)
+# define BOOST_PP_REPEAT_3_188(m, d) BOOST_PP_REPEAT_3_187(m, d) m(4, 187, d)
+# define BOOST_PP_REPEAT_3_189(m, d) BOOST_PP_REPEAT_3_188(m, d) m(4, 188, d)
+# define BOOST_PP_REPEAT_3_190(m, d) BOOST_PP_REPEAT_3_189(m, d) m(4, 189, d)
+# define BOOST_PP_REPEAT_3_191(m, d) BOOST_PP_REPEAT_3_190(m, d) m(4, 190, d)
+# define BOOST_PP_REPEAT_3_192(m, d) BOOST_PP_REPEAT_3_191(m, d) m(4, 191, d)
+# define BOOST_PP_REPEAT_3_193(m, d) BOOST_PP_REPEAT_3_192(m, d) m(4, 192, d)
+# define BOOST_PP_REPEAT_3_194(m, d) BOOST_PP_REPEAT_3_193(m, d) m(4, 193, d)
+# define BOOST_PP_REPEAT_3_195(m, d) BOOST_PP_REPEAT_3_194(m, d) m(4, 194, d)
+# define BOOST_PP_REPEAT_3_196(m, d) BOOST_PP_REPEAT_3_195(m, d) m(4, 195, d)
+# define BOOST_PP_REPEAT_3_197(m, d) BOOST_PP_REPEAT_3_196(m, d) m(4, 196, d)
+# define BOOST_PP_REPEAT_3_198(m, d) BOOST_PP_REPEAT_3_197(m, d) m(4, 197, d)
+# define BOOST_PP_REPEAT_3_199(m, d) BOOST_PP_REPEAT_3_198(m, d) m(4, 198, d)
+# define BOOST_PP_REPEAT_3_200(m, d) BOOST_PP_REPEAT_3_199(m, d) m(4, 199, d)
+# define BOOST_PP_REPEAT_3_201(m, d) BOOST_PP_REPEAT_3_200(m, d) m(4, 200, d)
+# define BOOST_PP_REPEAT_3_202(m, d) BOOST_PP_REPEAT_3_201(m, d) m(4, 201, d)
+# define BOOST_PP_REPEAT_3_203(m, d) BOOST_PP_REPEAT_3_202(m, d) m(4, 202, d)
+# define BOOST_PP_REPEAT_3_204(m, d) BOOST_PP_REPEAT_3_203(m, d) m(4, 203, d)
+# define BOOST_PP_REPEAT_3_205(m, d) BOOST_PP_REPEAT_3_204(m, d) m(4, 204, d)
+# define BOOST_PP_REPEAT_3_206(m, d) BOOST_PP_REPEAT_3_205(m, d) m(4, 205, d)
+# define BOOST_PP_REPEAT_3_207(m, d) BOOST_PP_REPEAT_3_206(m, d) m(4, 206, d)
+# define BOOST_PP_REPEAT_3_208(m, d) BOOST_PP_REPEAT_3_207(m, d) m(4, 207, d)
+# define BOOST_PP_REPEAT_3_209(m, d) BOOST_PP_REPEAT_3_208(m, d) m(4, 208, d)
+# define BOOST_PP_REPEAT_3_210(m, d) BOOST_PP_REPEAT_3_209(m, d) m(4, 209, d)
+# define BOOST_PP_REPEAT_3_211(m, d) BOOST_PP_REPEAT_3_210(m, d) m(4, 210, d)
+# define BOOST_PP_REPEAT_3_212(m, d) BOOST_PP_REPEAT_3_211(m, d) m(4, 211, d)
+# define BOOST_PP_REPEAT_3_213(m, d) BOOST_PP_REPEAT_3_212(m, d) m(4, 212, d)
+# define BOOST_PP_REPEAT_3_214(m, d) BOOST_PP_REPEAT_3_213(m, d) m(4, 213, d)
+# define BOOST_PP_REPEAT_3_215(m, d) BOOST_PP_REPEAT_3_214(m, d) m(4, 214, d)
+# define BOOST_PP_REPEAT_3_216(m, d) BOOST_PP_REPEAT_3_215(m, d) m(4, 215, d)
+# define BOOST_PP_REPEAT_3_217(m, d) BOOST_PP_REPEAT_3_216(m, d) m(4, 216, d)
+# define BOOST_PP_REPEAT_3_218(m, d) BOOST_PP_REPEAT_3_217(m, d) m(4, 217, d)
+# define BOOST_PP_REPEAT_3_219(m, d) BOOST_PP_REPEAT_3_218(m, d) m(4, 218, d)
+# define BOOST_PP_REPEAT_3_220(m, d) BOOST_PP_REPEAT_3_219(m, d) m(4, 219, d)
+# define BOOST_PP_REPEAT_3_221(m, d) BOOST_PP_REPEAT_3_220(m, d) m(4, 220, d)
+# define BOOST_PP_REPEAT_3_222(m, d) BOOST_PP_REPEAT_3_221(m, d) m(4, 221, d)
+# define BOOST_PP_REPEAT_3_223(m, d) BOOST_PP_REPEAT_3_222(m, d) m(4, 222, d)
+# define BOOST_PP_REPEAT_3_224(m, d) BOOST_PP_REPEAT_3_223(m, d) m(4, 223, d)
+# define BOOST_PP_REPEAT_3_225(m, d) BOOST_PP_REPEAT_3_224(m, d) m(4, 224, d)
+# define BOOST_PP_REPEAT_3_226(m, d) BOOST_PP_REPEAT_3_225(m, d) m(4, 225, d)
+# define BOOST_PP_REPEAT_3_227(m, d) BOOST_PP_REPEAT_3_226(m, d) m(4, 226, d)
+# define BOOST_PP_REPEAT_3_228(m, d) BOOST_PP_REPEAT_3_227(m, d) m(4, 227, d)
+# define BOOST_PP_REPEAT_3_229(m, d) BOOST_PP_REPEAT_3_228(m, d) m(4, 228, d)
+# define BOOST_PP_REPEAT_3_230(m, d) BOOST_PP_REPEAT_3_229(m, d) m(4, 229, d)
+# define BOOST_PP_REPEAT_3_231(m, d) BOOST_PP_REPEAT_3_230(m, d) m(4, 230, d)
+# define BOOST_PP_REPEAT_3_232(m, d) BOOST_PP_REPEAT_3_231(m, d) m(4, 231, d)
+# define BOOST_PP_REPEAT_3_233(m, d) BOOST_PP_REPEAT_3_232(m, d) m(4, 232, d)
+# define BOOST_PP_REPEAT_3_234(m, d) BOOST_PP_REPEAT_3_233(m, d) m(4, 233, d)
+# define BOOST_PP_REPEAT_3_235(m, d) BOOST_PP_REPEAT_3_234(m, d) m(4, 234, d)
+# define BOOST_PP_REPEAT_3_236(m, d) BOOST_PP_REPEAT_3_235(m, d) m(4, 235, d)
+# define BOOST_PP_REPEAT_3_237(m, d) BOOST_PP_REPEAT_3_236(m, d) m(4, 236, d)
+# define BOOST_PP_REPEAT_3_238(m, d) BOOST_PP_REPEAT_3_237(m, d) m(4, 237, d)
+# define BOOST_PP_REPEAT_3_239(m, d) BOOST_PP_REPEAT_3_238(m, d) m(4, 238, d)
+# define BOOST_PP_REPEAT_3_240(m, d) BOOST_PP_REPEAT_3_239(m, d) m(4, 239, d)
+# define BOOST_PP_REPEAT_3_241(m, d) BOOST_PP_REPEAT_3_240(m, d) m(4, 240, d)
+# define BOOST_PP_REPEAT_3_242(m, d) BOOST_PP_REPEAT_3_241(m, d) m(4, 241, d)
+# define BOOST_PP_REPEAT_3_243(m, d) BOOST_PP_REPEAT_3_242(m, d) m(4, 242, d)
+# define BOOST_PP_REPEAT_3_244(m, d) BOOST_PP_REPEAT_3_243(m, d) m(4, 243, d)
+# define BOOST_PP_REPEAT_3_245(m, d) BOOST_PP_REPEAT_3_244(m, d) m(4, 244, d)
+# define BOOST_PP_REPEAT_3_246(m, d) BOOST_PP_REPEAT_3_245(m, d) m(4, 245, d)
+# define BOOST_PP_REPEAT_3_247(m, d) BOOST_PP_REPEAT_3_246(m, d) m(4, 246, d)
+# define BOOST_PP_REPEAT_3_248(m, d) BOOST_PP_REPEAT_3_247(m, d) m(4, 247, d)
+# define BOOST_PP_REPEAT_3_249(m, d) BOOST_PP_REPEAT_3_248(m, d) m(4, 248, d)
+# define BOOST_PP_REPEAT_3_250(m, d) BOOST_PP_REPEAT_3_249(m, d) m(4, 249, d)
+# define BOOST_PP_REPEAT_3_251(m, d) BOOST_PP_REPEAT_3_250(m, d) m(4, 250, d)
+# define BOOST_PP_REPEAT_3_252(m, d) BOOST_PP_REPEAT_3_251(m, d) m(4, 251, d)
+# define BOOST_PP_REPEAT_3_253(m, d) BOOST_PP_REPEAT_3_252(m, d) m(4, 252, d)
+# define BOOST_PP_REPEAT_3_254(m, d) BOOST_PP_REPEAT_3_253(m, d) m(4, 253, d)
+# define BOOST_PP_REPEAT_3_255(m, d) BOOST_PP_REPEAT_3_254(m, d) m(4, 254, d)
+# define BOOST_PP_REPEAT_3_256(m, d) BOOST_PP_REPEAT_3_255(m, d) m(4, 255, d)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/repetition/repeat_from_to.hpp b/vendor/pdalboost/boost/preprocessor/repetition/repeat_from_to.hpp
new file mode 100644
index 0000000..efe539e
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/repetition/repeat_from_to.hpp
@@ -0,0 +1,87 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_REPETITION_REPEAT_FROM_TO_HPP
+# define BOOST_PREPROCESSOR_REPETITION_REPEAT_FROM_TO_HPP
+#
+# include <boost/preprocessor/arithmetic/add.hpp>
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/while.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/repetition/repeat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_REPEAT_FROM_TO */
+#
+# if 0
+#    define BOOST_PP_REPEAT_FROM_TO(first, last, macro, data)
+# endif
+#
+# define BOOST_PP_REPEAT_FROM_TO BOOST_PP_CAT(BOOST_PP_REPEAT_FROM_TO_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))
+#
+# define BOOST_PP_REPEAT_FROM_TO_1(f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_1(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256), f, l, m, dt)
+# define BOOST_PP_REPEAT_FROM_TO_2(f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_2(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256), f, l, m, dt)
+# define BOOST_PP_REPEAT_FROM_TO_3(f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_3(BOOST_PP_AUTO_REC(BOOST_PP_WHILE_P, 256), f, l, m, dt)
+# define BOOST_PP_REPEAT_FROM_TO_4(f, l, m, dt) BOOST_PP_ERROR(0x0003)
+#
+# define BOOST_PP_REPEAT_FROM_TO_1ST BOOST_PP_REPEAT_FROM_TO_1
+# define BOOST_PP_REPEAT_FROM_TO_2ND BOOST_PP_REPEAT_FROM_TO_2
+# define BOOST_PP_REPEAT_FROM_TO_3RD BOOST_PP_REPEAT_FROM_TO_3
+#
+# /* BOOST_PP_REPEAT_FROM_TO_D */
+#
+# if 0
+#    define BOOST_PP_REPEAT_FROM_TO_D(d, first, last, macro, data)
+# endif
+#
+# define BOOST_PP_REPEAT_FROM_TO_D BOOST_PP_CAT(BOOST_PP_REPEAT_FROM_TO_D_, BOOST_PP_AUTO_REC(BOOST_PP_REPEAT_P, 4))
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_REPEAT_FROM_TO_D_1(d, f, l, m, dt) BOOST_PP_REPEAT_1(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_1, (d, f, m, dt))
+#    define BOOST_PP_REPEAT_FROM_TO_D_2(d, f, l, m, dt) BOOST_PP_REPEAT_2(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_2, (d, f, m, dt))
+#    define BOOST_PP_REPEAT_FROM_TO_D_3(d, f, l, m, dt) BOOST_PP_REPEAT_3(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_3, (d, f, m, dt))
+# else
+#    define BOOST_PP_REPEAT_FROM_TO_D_1(d, f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_1_I(d, f, l, m, dt)
+#    define BOOST_PP_REPEAT_FROM_TO_D_2(d, f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_2_I(d, f, l, m, dt)
+#    define BOOST_PP_REPEAT_FROM_TO_D_3(d, f, l, m, dt) BOOST_PP_REPEAT_FROM_TO_D_3_I(d, f, l, m, dt)
+#    define BOOST_PP_REPEAT_FROM_TO_D_1_I(d, f, l, m, dt) BOOST_PP_REPEAT_1(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_1, (d, f, m, dt))
+#    define BOOST_PP_REPEAT_FROM_TO_D_2_I(d, f, l, m, dt) BOOST_PP_REPEAT_2(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_2, (d, f, m, dt))
+#    define BOOST_PP_REPEAT_FROM_TO_D_3_I(d, f, l, m, dt) BOOST_PP_REPEAT_3(BOOST_PP_SUB_D(d, l, f), BOOST_PP_REPEAT_FROM_TO_M_3, (d, f, m, dt))
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+#    define BOOST_PP_REPEAT_FROM_TO_M_1(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_1_IM(z, n, BOOST_PP_TUPLE_REM_4 dfmd)
+#    define BOOST_PP_REPEAT_FROM_TO_M_2(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_2_IM(z, n, BOOST_PP_TUPLE_REM_4 dfmd)
+#    define BOOST_PP_REPEAT_FROM_TO_M_3(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_3_IM(z, n, BOOST_PP_TUPLE_REM_4 dfmd)
+#    define BOOST_PP_REPEAT_FROM_TO_M_1_IM(z, n, im) BOOST_PP_REPEAT_FROM_TO_M_1_I(z, n, im)
+#    define BOOST_PP_REPEAT_FROM_TO_M_2_IM(z, n, im) BOOST_PP_REPEAT_FROM_TO_M_2_I(z, n, im)
+#    define BOOST_PP_REPEAT_FROM_TO_M_3_IM(z, n, im) BOOST_PP_REPEAT_FROM_TO_M_3_I(z, n, im)
+# else
+#    define BOOST_PP_REPEAT_FROM_TO_M_1(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_1_I(z, n, BOOST_PP_TUPLE_ELEM(4, 0, dfmd), BOOST_PP_TUPLE_ELEM(4, 1, dfmd), BOOST_PP_TUPLE_ELEM(4, 2, dfmd), BOOST_PP_TUPLE_ELEM(4, 3, dfmd))
+#    define BOOST_PP_REPEAT_FROM_TO_M_2(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_2_I(z, n, BOOST_PP_TUPLE_ELEM(4, 0, dfmd), BOOST_PP_TUPLE_ELEM(4, 1, dfmd), BOOST_PP_TUPLE_ELEM(4, 2, dfmd), BOOST_PP_TUPLE_ELEM(4, 3, dfmd))
+#    define BOOST_PP_REPEAT_FROM_TO_M_3(z, n, dfmd) BOOST_PP_REPEAT_FROM_TO_M_3_I(z, n, BOOST_PP_TUPLE_ELEM(4, 0, dfmd), BOOST_PP_TUPLE_ELEM(4, 1, dfmd), BOOST_PP_TUPLE_ELEM(4, 2, dfmd), BOOST_PP_TUPLE_ELEM(4, 3, dfmd))
+# endif
+#
+# define BOOST_PP_REPEAT_FROM_TO_M_1_I(z, n, d, f, m, dt) BOOST_PP_REPEAT_FROM_TO_M_1_II(z, BOOST_PP_ADD_D(d, n, f), m, dt)
+# define BOOST_PP_REPEAT_FROM_TO_M_2_I(z, n, d, f, m, dt) BOOST_PP_REPEAT_FROM_TO_M_2_II(z, BOOST_PP_ADD_D(d, n, f), m, dt)
+# define BOOST_PP_REPEAT_FROM_TO_M_3_I(z, n, d, f, m, dt) BOOST_PP_REPEAT_FROM_TO_M_3_II(z, BOOST_PP_ADD_D(d, n, f), m, dt)
+#
+# define BOOST_PP_REPEAT_FROM_TO_M_1_II(z, n, m, dt) m(z, n, dt)
+# define BOOST_PP_REPEAT_FROM_TO_M_2_II(z, n, m, dt) m(z, n, dt)
+# define BOOST_PP_REPEAT_FROM_TO_M_3_II(z, n, m, dt) m(z, n, dt)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/seq/cat.hpp b/vendor/pdalboost/boost/preprocessor/seq/cat.hpp
new file mode 100644
index 0000000..b6b09ff
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/seq/cat.hpp
@@ -0,0 +1,49 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_CAT_HPP
+# define BOOST_PREPROCESSOR_SEQ_CAT_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/seq/fold_left.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+#
+# /* BOOST_PP_SEQ_CAT */
+#
+# define BOOST_PP_SEQ_CAT(seq) \
+    BOOST_PP_IF( \
+        BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)), \
+        BOOST_PP_SEQ_CAT_I, \
+        BOOST_PP_SEQ_HEAD \
+    )(seq) \
+    /**/
+# define BOOST_PP_SEQ_CAT_I(seq) BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_CAT_O, BOOST_PP_SEQ_HEAD(seq), BOOST_PP_SEQ_TAIL(seq))
+#
+# define BOOST_PP_SEQ_CAT_O(s, st, elem) BOOST_PP_SEQ_CAT_O_I(st, elem)
+# define BOOST_PP_SEQ_CAT_O_I(a, b) a ## b
+#
+# /* BOOST_PP_SEQ_CAT_S */
+#
+# define BOOST_PP_SEQ_CAT_S(s, seq) \
+    BOOST_PP_IF( \
+        BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)), \
+        BOOST_PP_SEQ_CAT_S_I_A, \
+        BOOST_PP_SEQ_CAT_S_I_B \
+    )(s, seq) \
+    /**/
+# define BOOST_PP_SEQ_CAT_S_I_A(s, seq) BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_CAT_O, BOOST_PP_SEQ_HEAD(seq), BOOST_PP_SEQ_TAIL(seq))
+# define BOOST_PP_SEQ_CAT_S_I_B(s, seq) BOOST_PP_SEQ_HEAD(seq)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/seq/detail/is_empty.hpp b/vendor/pdalboost/boost/preprocessor/seq/detail/is_empty.hpp
new file mode 100644
index 0000000..1a80a2f
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/seq/detail/is_empty.hpp
@@ -0,0 +1,49 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Edward Diener 2015.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_DETAIL_IS_EMPTY_HPP
+# define BOOST_PREPROCESSOR_SEQ_DETAIL_IS_EMPTY_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/logical/bool.hpp>
+# include <boost/preprocessor/logical/compl.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+#
+/* An empty seq is one that is just BOOST_PP_SEQ_NIL */
+#
+# define BOOST_PP_SEQ_DETAIL_IS_EMPTY(seq) \
+	BOOST_PP_COMPL \
+		( \
+		BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq) \
+		) \
+/**/
+#
+# define BOOST_PP_SEQ_DETAIL_IS_EMPTY_SIZE(size) \
+	BOOST_PP_COMPL \
+		( \
+		BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY_SIZE(size) \
+		) \
+/**/
+#
+# define BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq) \
+	BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY_SIZE(BOOST_PP_SEQ_DETAIL_EMPTY_SIZE(seq)) \
+/**/
+#
+# define BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY_SIZE(size) \
+	BOOST_PP_BOOL(size) \
+/**/
+#
+# define BOOST_PP_SEQ_DETAIL_EMPTY_SIZE(seq) \
+	BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq (nil))) \
+/**/
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/seq/detail/split.hpp b/vendor/pdalboost/boost/preprocessor/seq/detail/split.hpp
new file mode 100644
index 0000000..7c33931
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/seq/detail/split.hpp
@@ -0,0 +1,284 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_DETAIL_SPLIT_HPP
+# define BOOST_PREPROCESSOR_SEQ_DETAIL_SPLIT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_SEQ_SPLIT */
+#
+# define BOOST_PP_SEQ_SPLIT(n, seq) BOOST_PP_SEQ_SPLIT_D(n, seq)
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_SEQ_SPLIT_D(n, seq) (BOOST_PP_SEQ_SPLIT_ ## n seq)
+# else
+#    define BOOST_PP_SEQ_SPLIT_D(n, seq) (BOOST_PP_SEQ_SPLIT_ ## n ## seq)
+# endif
+#
+# define BOOST_PP_SEQ_SPLIT_1(x) (x),
+# define BOOST_PP_SEQ_SPLIT_2(x) (x) BOOST_PP_SEQ_SPLIT_1
+# define BOOST_PP_SEQ_SPLIT_3(x) (x) BOOST_PP_SEQ_SPLIT_2
+# define BOOST_PP_SEQ_SPLIT_4(x) (x) BOOST_PP_SEQ_SPLIT_3
+# define BOOST_PP_SEQ_SPLIT_5(x) (x) BOOST_PP_SEQ_SPLIT_4
+# define BOOST_PP_SEQ_SPLIT_6(x) (x) BOOST_PP_SEQ_SPLIT_5
+# define BOOST_PP_SEQ_SPLIT_7(x) (x) BOOST_PP_SEQ_SPLIT_6
+# define BOOST_PP_SEQ_SPLIT_8(x) (x) BOOST_PP_SEQ_SPLIT_7
+# define BOOST_PP_SEQ_SPLIT_9(x) (x) BOOST_PP_SEQ_SPLIT_8
+# define BOOST_PP_SEQ_SPLIT_10(x) (x) BOOST_PP_SEQ_SPLIT_9
+# define BOOST_PP_SEQ_SPLIT_11(x) (x) BOOST_PP_SEQ_SPLIT_10
+# define BOOST_PP_SEQ_SPLIT_12(x) (x) BOOST_PP_SEQ_SPLIT_11
+# define BOOST_PP_SEQ_SPLIT_13(x) (x) BOOST_PP_SEQ_SPLIT_12
+# define BOOST_PP_SEQ_SPLIT_14(x) (x) BOOST_PP_SEQ_SPLIT_13
+# define BOOST_PP_SEQ_SPLIT_15(x) (x) BOOST_PP_SEQ_SPLIT_14
+# define BOOST_PP_SEQ_SPLIT_16(x) (x) BOOST_PP_SEQ_SPLIT_15
+# define BOOST_PP_SEQ_SPLIT_17(x) (x) BOOST_PP_SEQ_SPLIT_16
+# define BOOST_PP_SEQ_SPLIT_18(x) (x) BOOST_PP_SEQ_SPLIT_17
+# define BOOST_PP_SEQ_SPLIT_19(x) (x) BOOST_PP_SEQ_SPLIT_18
+# define BOOST_PP_SEQ_SPLIT_20(x) (x) BOOST_PP_SEQ_SPLIT_19
+# define BOOST_PP_SEQ_SPLIT_21(x) (x) BOOST_PP_SEQ_SPLIT_20
+# define BOOST_PP_SEQ_SPLIT_22(x) (x) BOOST_PP_SEQ_SPLIT_21
+# define BOOST_PP_SEQ_SPLIT_23(x) (x) BOOST_PP_SEQ_SPLIT_22
+# define BOOST_PP_SEQ_SPLIT_24(x) (x) BOOST_PP_SEQ_SPLIT_23
+# define BOOST_PP_SEQ_SPLIT_25(x) (x) BOOST_PP_SEQ_SPLIT_24
+# define BOOST_PP_SEQ_SPLIT_26(x) (x) BOOST_PP_SEQ_SPLIT_25
+# define BOOST_PP_SEQ_SPLIT_27(x) (x) BOOST_PP_SEQ_SPLIT_26
+# define BOOST_PP_SEQ_SPLIT_28(x) (x) BOOST_PP_SEQ_SPLIT_27
+# define BOOST_PP_SEQ_SPLIT_29(x) (x) BOOST_PP_SEQ_SPLIT_28
+# define BOOST_PP_SEQ_SPLIT_30(x) (x) BOOST_PP_SEQ_SPLIT_29
+# define BOOST_PP_SEQ_SPLIT_31(x) (x) BOOST_PP_SEQ_SPLIT_30
+# define BOOST_PP_SEQ_SPLIT_32(x) (x) BOOST_PP_SEQ_SPLIT_31
+# define BOOST_PP_SEQ_SPLIT_33(x) (x) BOOST_PP_SEQ_SPLIT_32
+# define BOOST_PP_SEQ_SPLIT_34(x) (x) BOOST_PP_SEQ_SPLIT_33
+# define BOOST_PP_SEQ_SPLIT_35(x) (x) BOOST_PP_SEQ_SPLIT_34
+# define BOOST_PP_SEQ_SPLIT_36(x) (x) BOOST_PP_SEQ_SPLIT_35
+# define BOOST_PP_SEQ_SPLIT_37(x) (x) BOOST_PP_SEQ_SPLIT_36
+# define BOOST_PP_SEQ_SPLIT_38(x) (x) BOOST_PP_SEQ_SPLIT_37
+# define BOOST_PP_SEQ_SPLIT_39(x) (x) BOOST_PP_SEQ_SPLIT_38
+# define BOOST_PP_SEQ_SPLIT_40(x) (x) BOOST_PP_SEQ_SPLIT_39
+# define BOOST_PP_SEQ_SPLIT_41(x) (x) BOOST_PP_SEQ_SPLIT_40
+# define BOOST_PP_SEQ_SPLIT_42(x) (x) BOOST_PP_SEQ_SPLIT_41
+# define BOOST_PP_SEQ_SPLIT_43(x) (x) BOOST_PP_SEQ_SPLIT_42
+# define BOOST_PP_SEQ_SPLIT_44(x) (x) BOOST_PP_SEQ_SPLIT_43
+# define BOOST_PP_SEQ_SPLIT_45(x) (x) BOOST_PP_SEQ_SPLIT_44
+# define BOOST_PP_SEQ_SPLIT_46(x) (x) BOOST_PP_SEQ_SPLIT_45
+# define BOOST_PP_SEQ_SPLIT_47(x) (x) BOOST_PP_SEQ_SPLIT_46
+# define BOOST_PP_SEQ_SPLIT_48(x) (x) BOOST_PP_SEQ_SPLIT_47
+# define BOOST_PP_SEQ_SPLIT_49(x) (x) BOOST_PP_SEQ_SPLIT_48
+# define BOOST_PP_SEQ_SPLIT_50(x) (x) BOOST_PP_SEQ_SPLIT_49
+# define BOOST_PP_SEQ_SPLIT_51(x) (x) BOOST_PP_SEQ_SPLIT_50
+# define BOOST_PP_SEQ_SPLIT_52(x) (x) BOOST_PP_SEQ_SPLIT_51
+# define BOOST_PP_SEQ_SPLIT_53(x) (x) BOOST_PP_SEQ_SPLIT_52
+# define BOOST_PP_SEQ_SPLIT_54(x) (x) BOOST_PP_SEQ_SPLIT_53
+# define BOOST_PP_SEQ_SPLIT_55(x) (x) BOOST_PP_SEQ_SPLIT_54
+# define BOOST_PP_SEQ_SPLIT_56(x) (x) BOOST_PP_SEQ_SPLIT_55
+# define BOOST_PP_SEQ_SPLIT_57(x) (x) BOOST_PP_SEQ_SPLIT_56
+# define BOOST_PP_SEQ_SPLIT_58(x) (x) BOOST_PP_SEQ_SPLIT_57
+# define BOOST_PP_SEQ_SPLIT_59(x) (x) BOOST_PP_SEQ_SPLIT_58
+# define BOOST_PP_SEQ_SPLIT_60(x) (x) BOOST_PP_SEQ_SPLIT_59
+# define BOOST_PP_SEQ_SPLIT_61(x) (x) BOOST_PP_SEQ_SPLIT_60
+# define BOOST_PP_SEQ_SPLIT_62(x) (x) BOOST_PP_SEQ_SPLIT_61
+# define BOOST_PP_SEQ_SPLIT_63(x) (x) BOOST_PP_SEQ_SPLIT_62
+# define BOOST_PP_SEQ_SPLIT_64(x) (x) BOOST_PP_SEQ_SPLIT_63
+# define BOOST_PP_SEQ_SPLIT_65(x) (x) BOOST_PP_SEQ_SPLIT_64
+# define BOOST_PP_SEQ_SPLIT_66(x) (x) BOOST_PP_SEQ_SPLIT_65
+# define BOOST_PP_SEQ_SPLIT_67(x) (x) BOOST_PP_SEQ_SPLIT_66
+# define BOOST_PP_SEQ_SPLIT_68(x) (x) BOOST_PP_SEQ_SPLIT_67
+# define BOOST_PP_SEQ_SPLIT_69(x) (x) BOOST_PP_SEQ_SPLIT_68
+# define BOOST_PP_SEQ_SPLIT_70(x) (x) BOOST_PP_SEQ_SPLIT_69
+# define BOOST_PP_SEQ_SPLIT_71(x) (x) BOOST_PP_SEQ_SPLIT_70
+# define BOOST_PP_SEQ_SPLIT_72(x) (x) BOOST_PP_SEQ_SPLIT_71
+# define BOOST_PP_SEQ_SPLIT_73(x) (x) BOOST_PP_SEQ_SPLIT_72
+# define BOOST_PP_SEQ_SPLIT_74(x) (x) BOOST_PP_SEQ_SPLIT_73
+# define BOOST_PP_SEQ_SPLIT_75(x) (x) BOOST_PP_SEQ_SPLIT_74
+# define BOOST_PP_SEQ_SPLIT_76(x) (x) BOOST_PP_SEQ_SPLIT_75
+# define BOOST_PP_SEQ_SPLIT_77(x) (x) BOOST_PP_SEQ_SPLIT_76
+# define BOOST_PP_SEQ_SPLIT_78(x) (x) BOOST_PP_SEQ_SPLIT_77
+# define BOOST_PP_SEQ_SPLIT_79(x) (x) BOOST_PP_SEQ_SPLIT_78
+# define BOOST_PP_SEQ_SPLIT_80(x) (x) BOOST_PP_SEQ_SPLIT_79
+# define BOOST_PP_SEQ_SPLIT_81(x) (x) BOOST_PP_SEQ_SPLIT_80
+# define BOOST_PP_SEQ_SPLIT_82(x) (x) BOOST_PP_SEQ_SPLIT_81
+# define BOOST_PP_SEQ_SPLIT_83(x) (x) BOOST_PP_SEQ_SPLIT_82
+# define BOOST_PP_SEQ_SPLIT_84(x) (x) BOOST_PP_SEQ_SPLIT_83
+# define BOOST_PP_SEQ_SPLIT_85(x) (x) BOOST_PP_SEQ_SPLIT_84
+# define BOOST_PP_SEQ_SPLIT_86(x) (x) BOOST_PP_SEQ_SPLIT_85
+# define BOOST_PP_SEQ_SPLIT_87(x) (x) BOOST_PP_SEQ_SPLIT_86
+# define BOOST_PP_SEQ_SPLIT_88(x) (x) BOOST_PP_SEQ_SPLIT_87
+# define BOOST_PP_SEQ_SPLIT_89(x) (x) BOOST_PP_SEQ_SPLIT_88
+# define BOOST_PP_SEQ_SPLIT_90(x) (x) BOOST_PP_SEQ_SPLIT_89
+# define BOOST_PP_SEQ_SPLIT_91(x) (x) BOOST_PP_SEQ_SPLIT_90
+# define BOOST_PP_SEQ_SPLIT_92(x) (x) BOOST_PP_SEQ_SPLIT_91
+# define BOOST_PP_SEQ_SPLIT_93(x) (x) BOOST_PP_SEQ_SPLIT_92
+# define BOOST_PP_SEQ_SPLIT_94(x) (x) BOOST_PP_SEQ_SPLIT_93
+# define BOOST_PP_SEQ_SPLIT_95(x) (x) BOOST_PP_SEQ_SPLIT_94
+# define BOOST_PP_SEQ_SPLIT_96(x) (x) BOOST_PP_SEQ_SPLIT_95
+# define BOOST_PP_SEQ_SPLIT_97(x) (x) BOOST_PP_SEQ_SPLIT_96
+# define BOOST_PP_SEQ_SPLIT_98(x) (x) BOOST_PP_SEQ_SPLIT_97
+# define BOOST_PP_SEQ_SPLIT_99(x) (x) BOOST_PP_SEQ_SPLIT_98
+# define BOOST_PP_SEQ_SPLIT_100(x) (x) BOOST_PP_SEQ_SPLIT_99
+# define BOOST_PP_SEQ_SPLIT_101(x) (x) BOOST_PP_SEQ_SPLIT_100
+# define BOOST_PP_SEQ_SPLIT_102(x) (x) BOOST_PP_SEQ_SPLIT_101
+# define BOOST_PP_SEQ_SPLIT_103(x) (x) BOOST_PP_SEQ_SPLIT_102
+# define BOOST_PP_SEQ_SPLIT_104(x) (x) BOOST_PP_SEQ_SPLIT_103
+# define BOOST_PP_SEQ_SPLIT_105(x) (x) BOOST_PP_SEQ_SPLIT_104
+# define BOOST_PP_SEQ_SPLIT_106(x) (x) BOOST_PP_SEQ_SPLIT_105
+# define BOOST_PP_SEQ_SPLIT_107(x) (x) BOOST_PP_SEQ_SPLIT_106
+# define BOOST_PP_SEQ_SPLIT_108(x) (x) BOOST_PP_SEQ_SPLIT_107
+# define BOOST_PP_SEQ_SPLIT_109(x) (x) BOOST_PP_SEQ_SPLIT_108
+# define BOOST_PP_SEQ_SPLIT_110(x) (x) BOOST_PP_SEQ_SPLIT_109
+# define BOOST_PP_SEQ_SPLIT_111(x) (x) BOOST_PP_SEQ_SPLIT_110
+# define BOOST_PP_SEQ_SPLIT_112(x) (x) BOOST_PP_SEQ_SPLIT_111
+# define BOOST_PP_SEQ_SPLIT_113(x) (x) BOOST_PP_SEQ_SPLIT_112
+# define BOOST_PP_SEQ_SPLIT_114(x) (x) BOOST_PP_SEQ_SPLIT_113
+# define BOOST_PP_SEQ_SPLIT_115(x) (x) BOOST_PP_SEQ_SPLIT_114
+# define BOOST_PP_SEQ_SPLIT_116(x) (x) BOOST_PP_SEQ_SPLIT_115
+# define BOOST_PP_SEQ_SPLIT_117(x) (x) BOOST_PP_SEQ_SPLIT_116
+# define BOOST_PP_SEQ_SPLIT_118(x) (x) BOOST_PP_SEQ_SPLIT_117
+# define BOOST_PP_SEQ_SPLIT_119(x) (x) BOOST_PP_SEQ_SPLIT_118
+# define BOOST_PP_SEQ_SPLIT_120(x) (x) BOOST_PP_SEQ_SPLIT_119
+# define BOOST_PP_SEQ_SPLIT_121(x) (x) BOOST_PP_SEQ_SPLIT_120
+# define BOOST_PP_SEQ_SPLIT_122(x) (x) BOOST_PP_SEQ_SPLIT_121
+# define BOOST_PP_SEQ_SPLIT_123(x) (x) BOOST_PP_SEQ_SPLIT_122
+# define BOOST_PP_SEQ_SPLIT_124(x) (x) BOOST_PP_SEQ_SPLIT_123
+# define BOOST_PP_SEQ_SPLIT_125(x) (x) BOOST_PP_SEQ_SPLIT_124
+# define BOOST_PP_SEQ_SPLIT_126(x) (x) BOOST_PP_SEQ_SPLIT_125
+# define BOOST_PP_SEQ_SPLIT_127(x) (x) BOOST_PP_SEQ_SPLIT_126
+# define BOOST_PP_SEQ_SPLIT_128(x) (x) BOOST_PP_SEQ_SPLIT_127
+# define BOOST_PP_SEQ_SPLIT_129(x) (x) BOOST_PP_SEQ_SPLIT_128
+# define BOOST_PP_SEQ_SPLIT_130(x) (x) BOOST_PP_SEQ_SPLIT_129
+# define BOOST_PP_SEQ_SPLIT_131(x) (x) BOOST_PP_SEQ_SPLIT_130
+# define BOOST_PP_SEQ_SPLIT_132(x) (x) BOOST_PP_SEQ_SPLIT_131
+# define BOOST_PP_SEQ_SPLIT_133(x) (x) BOOST_PP_SEQ_SPLIT_132
+# define BOOST_PP_SEQ_SPLIT_134(x) (x) BOOST_PP_SEQ_SPLIT_133
+# define BOOST_PP_SEQ_SPLIT_135(x) (x) BOOST_PP_SEQ_SPLIT_134
+# define BOOST_PP_SEQ_SPLIT_136(x) (x) BOOST_PP_SEQ_SPLIT_135
+# define BOOST_PP_SEQ_SPLIT_137(x) (x) BOOST_PP_SEQ_SPLIT_136
+# define BOOST_PP_SEQ_SPLIT_138(x) (x) BOOST_PP_SEQ_SPLIT_137
+# define BOOST_PP_SEQ_SPLIT_139(x) (x) BOOST_PP_SEQ_SPLIT_138
+# define BOOST_PP_SEQ_SPLIT_140(x) (x) BOOST_PP_SEQ_SPLIT_139
+# define BOOST_PP_SEQ_SPLIT_141(x) (x) BOOST_PP_SEQ_SPLIT_140
+# define BOOST_PP_SEQ_SPLIT_142(x) (x) BOOST_PP_SEQ_SPLIT_141
+# define BOOST_PP_SEQ_SPLIT_143(x) (x) BOOST_PP_SEQ_SPLIT_142
+# define BOOST_PP_SEQ_SPLIT_144(x) (x) BOOST_PP_SEQ_SPLIT_143
+# define BOOST_PP_SEQ_SPLIT_145(x) (x) BOOST_PP_SEQ_SPLIT_144
+# define BOOST_PP_SEQ_SPLIT_146(x) (x) BOOST_PP_SEQ_SPLIT_145
+# define BOOST_PP_SEQ_SPLIT_147(x) (x) BOOST_PP_SEQ_SPLIT_146
+# define BOOST_PP_SEQ_SPLIT_148(x) (x) BOOST_PP_SEQ_SPLIT_147
+# define BOOST_PP_SEQ_SPLIT_149(x) (x) BOOST_PP_SEQ_SPLIT_148
+# define BOOST_PP_SEQ_SPLIT_150(x) (x) BOOST_PP_SEQ_SPLIT_149
+# define BOOST_PP_SEQ_SPLIT_151(x) (x) BOOST_PP_SEQ_SPLIT_150
+# define BOOST_PP_SEQ_SPLIT_152(x) (x) BOOST_PP_SEQ_SPLIT_151
+# define BOOST_PP_SEQ_SPLIT_153(x) (x) BOOST_PP_SEQ_SPLIT_152
+# define BOOST_PP_SEQ_SPLIT_154(x) (x) BOOST_PP_SEQ_SPLIT_153
+# define BOOST_PP_SEQ_SPLIT_155(x) (x) BOOST_PP_SEQ_SPLIT_154
+# define BOOST_PP_SEQ_SPLIT_156(x) (x) BOOST_PP_SEQ_SPLIT_155
+# define BOOST_PP_SEQ_SPLIT_157(x) (x) BOOST_PP_SEQ_SPLIT_156
+# define BOOST_PP_SEQ_SPLIT_158(x) (x) BOOST_PP_SEQ_SPLIT_157
+# define BOOST_PP_SEQ_SPLIT_159(x) (x) BOOST_PP_SEQ_SPLIT_158
+# define BOOST_PP_SEQ_SPLIT_160(x) (x) BOOST_PP_SEQ_SPLIT_159
+# define BOOST_PP_SEQ_SPLIT_161(x) (x) BOOST_PP_SEQ_SPLIT_160
+# define BOOST_PP_SEQ_SPLIT_162(x) (x) BOOST_PP_SEQ_SPLIT_161
+# define BOOST_PP_SEQ_SPLIT_163(x) (x) BOOST_PP_SEQ_SPLIT_162
+# define BOOST_PP_SEQ_SPLIT_164(x) (x) BOOST_PP_SEQ_SPLIT_163
+# define BOOST_PP_SEQ_SPLIT_165(x) (x) BOOST_PP_SEQ_SPLIT_164
+# define BOOST_PP_SEQ_SPLIT_166(x) (x) BOOST_PP_SEQ_SPLIT_165
+# define BOOST_PP_SEQ_SPLIT_167(x) (x) BOOST_PP_SEQ_SPLIT_166
+# define BOOST_PP_SEQ_SPLIT_168(x) (x) BOOST_PP_SEQ_SPLIT_167
+# define BOOST_PP_SEQ_SPLIT_169(x) (x) BOOST_PP_SEQ_SPLIT_168
+# define BOOST_PP_SEQ_SPLIT_170(x) (x) BOOST_PP_SEQ_SPLIT_169
+# define BOOST_PP_SEQ_SPLIT_171(x) (x) BOOST_PP_SEQ_SPLIT_170
+# define BOOST_PP_SEQ_SPLIT_172(x) (x) BOOST_PP_SEQ_SPLIT_171
+# define BOOST_PP_SEQ_SPLIT_173(x) (x) BOOST_PP_SEQ_SPLIT_172
+# define BOOST_PP_SEQ_SPLIT_174(x) (x) BOOST_PP_SEQ_SPLIT_173
+# define BOOST_PP_SEQ_SPLIT_175(x) (x) BOOST_PP_SEQ_SPLIT_174
+# define BOOST_PP_SEQ_SPLIT_176(x) (x) BOOST_PP_SEQ_SPLIT_175
+# define BOOST_PP_SEQ_SPLIT_177(x) (x) BOOST_PP_SEQ_SPLIT_176
+# define BOOST_PP_SEQ_SPLIT_178(x) (x) BOOST_PP_SEQ_SPLIT_177
+# define BOOST_PP_SEQ_SPLIT_179(x) (x) BOOST_PP_SEQ_SPLIT_178
+# define BOOST_PP_SEQ_SPLIT_180(x) (x) BOOST_PP_SEQ_SPLIT_179
+# define BOOST_PP_SEQ_SPLIT_181(x) (x) BOOST_PP_SEQ_SPLIT_180
+# define BOOST_PP_SEQ_SPLIT_182(x) (x) BOOST_PP_SEQ_SPLIT_181
+# define BOOST_PP_SEQ_SPLIT_183(x) (x) BOOST_PP_SEQ_SPLIT_182
+# define BOOST_PP_SEQ_SPLIT_184(x) (x) BOOST_PP_SEQ_SPLIT_183
+# define BOOST_PP_SEQ_SPLIT_185(x) (x) BOOST_PP_SEQ_SPLIT_184
+# define BOOST_PP_SEQ_SPLIT_186(x) (x) BOOST_PP_SEQ_SPLIT_185
+# define BOOST_PP_SEQ_SPLIT_187(x) (x) BOOST_PP_SEQ_SPLIT_186
+# define BOOST_PP_SEQ_SPLIT_188(x) (x) BOOST_PP_SEQ_SPLIT_187
+# define BOOST_PP_SEQ_SPLIT_189(x) (x) BOOST_PP_SEQ_SPLIT_188
+# define BOOST_PP_SEQ_SPLIT_190(x) (x) BOOST_PP_SEQ_SPLIT_189
+# define BOOST_PP_SEQ_SPLIT_191(x) (x) BOOST_PP_SEQ_SPLIT_190
+# define BOOST_PP_SEQ_SPLIT_192(x) (x) BOOST_PP_SEQ_SPLIT_191
+# define BOOST_PP_SEQ_SPLIT_193(x) (x) BOOST_PP_SEQ_SPLIT_192
+# define BOOST_PP_SEQ_SPLIT_194(x) (x) BOOST_PP_SEQ_SPLIT_193
+# define BOOST_PP_SEQ_SPLIT_195(x) (x) BOOST_PP_SEQ_SPLIT_194
+# define BOOST_PP_SEQ_SPLIT_196(x) (x) BOOST_PP_SEQ_SPLIT_195
+# define BOOST_PP_SEQ_SPLIT_197(x) (x) BOOST_PP_SEQ_SPLIT_196
+# define BOOST_PP_SEQ_SPLIT_198(x) (x) BOOST_PP_SEQ_SPLIT_197
+# define BOOST_PP_SEQ_SPLIT_199(x) (x) BOOST_PP_SEQ_SPLIT_198
+# define BOOST_PP_SEQ_SPLIT_200(x) (x) BOOST_PP_SEQ_SPLIT_199
+# define BOOST_PP_SEQ_SPLIT_201(x) (x) BOOST_PP_SEQ_SPLIT_200
+# define BOOST_PP_SEQ_SPLIT_202(x) (x) BOOST_PP_SEQ_SPLIT_201
+# define BOOST_PP_SEQ_SPLIT_203(x) (x) BOOST_PP_SEQ_SPLIT_202
+# define BOOST_PP_SEQ_SPLIT_204(x) (x) BOOST_PP_SEQ_SPLIT_203
+# define BOOST_PP_SEQ_SPLIT_205(x) (x) BOOST_PP_SEQ_SPLIT_204
+# define BOOST_PP_SEQ_SPLIT_206(x) (x) BOOST_PP_SEQ_SPLIT_205
+# define BOOST_PP_SEQ_SPLIT_207(x) (x) BOOST_PP_SEQ_SPLIT_206
+# define BOOST_PP_SEQ_SPLIT_208(x) (x) BOOST_PP_SEQ_SPLIT_207
+# define BOOST_PP_SEQ_SPLIT_209(x) (x) BOOST_PP_SEQ_SPLIT_208
+# define BOOST_PP_SEQ_SPLIT_210(x) (x) BOOST_PP_SEQ_SPLIT_209
+# define BOOST_PP_SEQ_SPLIT_211(x) (x) BOOST_PP_SEQ_SPLIT_210
+# define BOOST_PP_SEQ_SPLIT_212(x) (x) BOOST_PP_SEQ_SPLIT_211
+# define BOOST_PP_SEQ_SPLIT_213(x) (x) BOOST_PP_SEQ_SPLIT_212
+# define BOOST_PP_SEQ_SPLIT_214(x) (x) BOOST_PP_SEQ_SPLIT_213
+# define BOOST_PP_SEQ_SPLIT_215(x) (x) BOOST_PP_SEQ_SPLIT_214
+# define BOOST_PP_SEQ_SPLIT_216(x) (x) BOOST_PP_SEQ_SPLIT_215
+# define BOOST_PP_SEQ_SPLIT_217(x) (x) BOOST_PP_SEQ_SPLIT_216
+# define BOOST_PP_SEQ_SPLIT_218(x) (x) BOOST_PP_SEQ_SPLIT_217
+# define BOOST_PP_SEQ_SPLIT_219(x) (x) BOOST_PP_SEQ_SPLIT_218
+# define BOOST_PP_SEQ_SPLIT_220(x) (x) BOOST_PP_SEQ_SPLIT_219
+# define BOOST_PP_SEQ_SPLIT_221(x) (x) BOOST_PP_SEQ_SPLIT_220
+# define BOOST_PP_SEQ_SPLIT_222(x) (x) BOOST_PP_SEQ_SPLIT_221
+# define BOOST_PP_SEQ_SPLIT_223(x) (x) BOOST_PP_SEQ_SPLIT_222
+# define BOOST_PP_SEQ_SPLIT_224(x) (x) BOOST_PP_SEQ_SPLIT_223
+# define BOOST_PP_SEQ_SPLIT_225(x) (x) BOOST_PP_SEQ_SPLIT_224
+# define BOOST_PP_SEQ_SPLIT_226(x) (x) BOOST_PP_SEQ_SPLIT_225
+# define BOOST_PP_SEQ_SPLIT_227(x) (x) BOOST_PP_SEQ_SPLIT_226
+# define BOOST_PP_SEQ_SPLIT_228(x) (x) BOOST_PP_SEQ_SPLIT_227
+# define BOOST_PP_SEQ_SPLIT_229(x) (x) BOOST_PP_SEQ_SPLIT_228
+# define BOOST_PP_SEQ_SPLIT_230(x) (x) BOOST_PP_SEQ_SPLIT_229
+# define BOOST_PP_SEQ_SPLIT_231(x) (x) BOOST_PP_SEQ_SPLIT_230
+# define BOOST_PP_SEQ_SPLIT_232(x) (x) BOOST_PP_SEQ_SPLIT_231
+# define BOOST_PP_SEQ_SPLIT_233(x) (x) BOOST_PP_SEQ_SPLIT_232
+# define BOOST_PP_SEQ_SPLIT_234(x) (x) BOOST_PP_SEQ_SPLIT_233
+# define BOOST_PP_SEQ_SPLIT_235(x) (x) BOOST_PP_SEQ_SPLIT_234
+# define BOOST_PP_SEQ_SPLIT_236(x) (x) BOOST_PP_SEQ_SPLIT_235
+# define BOOST_PP_SEQ_SPLIT_237(x) (x) BOOST_PP_SEQ_SPLIT_236
+# define BOOST_PP_SEQ_SPLIT_238(x) (x) BOOST_PP_SEQ_SPLIT_237
+# define BOOST_PP_SEQ_SPLIT_239(x) (x) BOOST_PP_SEQ_SPLIT_238
+# define BOOST_PP_SEQ_SPLIT_240(x) (x) BOOST_PP_SEQ_SPLIT_239
+# define BOOST_PP_SEQ_SPLIT_241(x) (x) BOOST_PP_SEQ_SPLIT_240
+# define BOOST_PP_SEQ_SPLIT_242(x) (x) BOOST_PP_SEQ_SPLIT_241
+# define BOOST_PP_SEQ_SPLIT_243(x) (x) BOOST_PP_SEQ_SPLIT_242
+# define BOOST_PP_SEQ_SPLIT_244(x) (x) BOOST_PP_SEQ_SPLIT_243
+# define BOOST_PP_SEQ_SPLIT_245(x) (x) BOOST_PP_SEQ_SPLIT_244
+# define BOOST_PP_SEQ_SPLIT_246(x) (x) BOOST_PP_SEQ_SPLIT_245
+# define BOOST_PP_SEQ_SPLIT_247(x) (x) BOOST_PP_SEQ_SPLIT_246
+# define BOOST_PP_SEQ_SPLIT_248(x) (x) BOOST_PP_SEQ_SPLIT_247
+# define BOOST_PP_SEQ_SPLIT_249(x) (x) BOOST_PP_SEQ_SPLIT_248
+# define BOOST_PP_SEQ_SPLIT_250(x) (x) BOOST_PP_SEQ_SPLIT_249
+# define BOOST_PP_SEQ_SPLIT_251(x) (x) BOOST_PP_SEQ_SPLIT_250
+# define BOOST_PP_SEQ_SPLIT_252(x) (x) BOOST_PP_SEQ_SPLIT_251
+# define BOOST_PP_SEQ_SPLIT_253(x) (x) BOOST_PP_SEQ_SPLIT_252
+# define BOOST_PP_SEQ_SPLIT_254(x) (x) BOOST_PP_SEQ_SPLIT_253
+# define BOOST_PP_SEQ_SPLIT_255(x) (x) BOOST_PP_SEQ_SPLIT_254
+# define BOOST_PP_SEQ_SPLIT_256(x) (x) BOOST_PP_SEQ_SPLIT_255
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/seq/elem.hpp b/vendor/pdalboost/boost/preprocessor/seq/elem.hpp
new file mode 100644
index 0000000..9c7a4b2
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/seq/elem.hpp
@@ -0,0 +1,304 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_ELEM_HPP
+# define BOOST_PREPROCESSOR_SEQ_ELEM_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/facilities/empty.hpp>
+#
+# /* BOOST_PP_SEQ_ELEM */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_SEQ_ELEM(i, seq) BOOST_PP_SEQ_ELEM_I(i, seq)
+# else
+#    define BOOST_PP_SEQ_ELEM(i, seq) BOOST_PP_SEQ_ELEM_I((i, seq))
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#    define BOOST_PP_SEQ_ELEM_I(i, seq) BOOST_PP_SEQ_ELEM_II((BOOST_PP_SEQ_ELEM_ ## i seq))
+#    define BOOST_PP_SEQ_ELEM_II(res) BOOST_PP_SEQ_ELEM_IV(BOOST_PP_SEQ_ELEM_III res)
+#    define BOOST_PP_SEQ_ELEM_III(x, _) x BOOST_PP_EMPTY()
+#    define BOOST_PP_SEQ_ELEM_IV(x) x
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_SEQ_ELEM_I(par) BOOST_PP_SEQ_ELEM_II ## par
+#    define BOOST_PP_SEQ_ELEM_II(i, seq) BOOST_PP_SEQ_ELEM_III(BOOST_PP_SEQ_ELEM_ ## i ## seq)
+#    define BOOST_PP_SEQ_ELEM_III(im) BOOST_PP_SEQ_ELEM_IV(im)
+#    define BOOST_PP_SEQ_ELEM_IV(x, _) x
+# else
+#    if defined(__IBMC__) || defined(__IBMCPP__)
+#        define BOOST_PP_SEQ_ELEM_I(i, seq) BOOST_PP_SEQ_ELEM_II(BOOST_PP_CAT(BOOST_PP_SEQ_ELEM_ ## i, seq))
+#    else
+#        define BOOST_PP_SEQ_ELEM_I(i, seq) BOOST_PP_SEQ_ELEM_II(BOOST_PP_SEQ_ELEM_ ## i seq)
+#    endif
+#    define BOOST_PP_SEQ_ELEM_II(im) BOOST_PP_SEQ_ELEM_III(im)
+#    define BOOST_PP_SEQ_ELEM_III(x, _) x
+# endif
+#
+# define BOOST_PP_SEQ_ELEM_0(x) x, BOOST_PP_NIL
+# define BOOST_PP_SEQ_ELEM_1(_) BOOST_PP_SEQ_ELEM_0
+# define BOOST_PP_SEQ_ELEM_2(_) BOOST_PP_SEQ_ELEM_1
+# define BOOST_PP_SEQ_ELEM_3(_) BOOST_PP_SEQ_ELEM_2
+# define BOOST_PP_SEQ_ELEM_4(_) BOOST_PP_SEQ_ELEM_3
+# define BOOST_PP_SEQ_ELEM_5(_) BOOST_PP_SEQ_ELEM_4
+# define BOOST_PP_SEQ_ELEM_6(_) BOOST_PP_SEQ_ELEM_5
+# define BOOST_PP_SEQ_ELEM_7(_) BOOST_PP_SEQ_ELEM_6
+# define BOOST_PP_SEQ_ELEM_8(_) BOOST_PP_SEQ_ELEM_7
+# define BOOST_PP_SEQ_ELEM_9(_) BOOST_PP_SEQ_ELEM_8
+# define BOOST_PP_SEQ_ELEM_10(_) BOOST_PP_SEQ_ELEM_9
+# define BOOST_PP_SEQ_ELEM_11(_) BOOST_PP_SEQ_ELEM_10
+# define BOOST_PP_SEQ_ELEM_12(_) BOOST_PP_SEQ_ELEM_11
+# define BOOST_PP_SEQ_ELEM_13(_) BOOST_PP_SEQ_ELEM_12
+# define BOOST_PP_SEQ_ELEM_14(_) BOOST_PP_SEQ_ELEM_13
+# define BOOST_PP_SEQ_ELEM_15(_) BOOST_PP_SEQ_ELEM_14
+# define BOOST_PP_SEQ_ELEM_16(_) BOOST_PP_SEQ_ELEM_15
+# define BOOST_PP_SEQ_ELEM_17(_) BOOST_PP_SEQ_ELEM_16
+# define BOOST_PP_SEQ_ELEM_18(_) BOOST_PP_SEQ_ELEM_17
+# define BOOST_PP_SEQ_ELEM_19(_) BOOST_PP_SEQ_ELEM_18
+# define BOOST_PP_SEQ_ELEM_20(_) BOOST_PP_SEQ_ELEM_19
+# define BOOST_PP_SEQ_ELEM_21(_) BOOST_PP_SEQ_ELEM_20
+# define BOOST_PP_SEQ_ELEM_22(_) BOOST_PP_SEQ_ELEM_21
+# define BOOST_PP_SEQ_ELEM_23(_) BOOST_PP_SEQ_ELEM_22
+# define BOOST_PP_SEQ_ELEM_24(_) BOOST_PP_SEQ_ELEM_23
+# define BOOST_PP_SEQ_ELEM_25(_) BOOST_PP_SEQ_ELEM_24
+# define BOOST_PP_SEQ_ELEM_26(_) BOOST_PP_SEQ_ELEM_25
+# define BOOST_PP_SEQ_ELEM_27(_) BOOST_PP_SEQ_ELEM_26
+# define BOOST_PP_SEQ_ELEM_28(_) BOOST_PP_SEQ_ELEM_27
+# define BOOST_PP_SEQ_ELEM_29(_) BOOST_PP_SEQ_ELEM_28
+# define BOOST_PP_SEQ_ELEM_30(_) BOOST_PP_SEQ_ELEM_29
+# define BOOST_PP_SEQ_ELEM_31(_) BOOST_PP_SEQ_ELEM_30
+# define BOOST_PP_SEQ_ELEM_32(_) BOOST_PP_SEQ_ELEM_31
+# define BOOST_PP_SEQ_ELEM_33(_) BOOST_PP_SEQ_ELEM_32
+# define BOOST_PP_SEQ_ELEM_34(_) BOOST_PP_SEQ_ELEM_33
+# define BOOST_PP_SEQ_ELEM_35(_) BOOST_PP_SEQ_ELEM_34
+# define BOOST_PP_SEQ_ELEM_36(_) BOOST_PP_SEQ_ELEM_35
+# define BOOST_PP_SEQ_ELEM_37(_) BOOST_PP_SEQ_ELEM_36
+# define BOOST_PP_SEQ_ELEM_38(_) BOOST_PP_SEQ_ELEM_37
+# define BOOST_PP_SEQ_ELEM_39(_) BOOST_PP_SEQ_ELEM_38
+# define BOOST_PP_SEQ_ELEM_40(_) BOOST_PP_SEQ_ELEM_39
+# define BOOST_PP_SEQ_ELEM_41(_) BOOST_PP_SEQ_ELEM_40
+# define BOOST_PP_SEQ_ELEM_42(_) BOOST_PP_SEQ_ELEM_41
+# define BOOST_PP_SEQ_ELEM_43(_) BOOST_PP_SEQ_ELEM_42
+# define BOOST_PP_SEQ_ELEM_44(_) BOOST_PP_SEQ_ELEM_43
+# define BOOST_PP_SEQ_ELEM_45(_) BOOST_PP_SEQ_ELEM_44
+# define BOOST_PP_SEQ_ELEM_46(_) BOOST_PP_SEQ_ELEM_45
+# define BOOST_PP_SEQ_ELEM_47(_) BOOST_PP_SEQ_ELEM_46
+# define BOOST_PP_SEQ_ELEM_48(_) BOOST_PP_SEQ_ELEM_47
+# define BOOST_PP_SEQ_ELEM_49(_) BOOST_PP_SEQ_ELEM_48
+# define BOOST_PP_SEQ_ELEM_50(_) BOOST_PP_SEQ_ELEM_49
+# define BOOST_PP_SEQ_ELEM_51(_) BOOST_PP_SEQ_ELEM_50
+# define BOOST_PP_SEQ_ELEM_52(_) BOOST_PP_SEQ_ELEM_51
+# define BOOST_PP_SEQ_ELEM_53(_) BOOST_PP_SEQ_ELEM_52
+# define BOOST_PP_SEQ_ELEM_54(_) BOOST_PP_SEQ_ELEM_53
+# define BOOST_PP_SEQ_ELEM_55(_) BOOST_PP_SEQ_ELEM_54
+# define BOOST_PP_SEQ_ELEM_56(_) BOOST_PP_SEQ_ELEM_55
+# define BOOST_PP_SEQ_ELEM_57(_) BOOST_PP_SEQ_ELEM_56
+# define BOOST_PP_SEQ_ELEM_58(_) BOOST_PP_SEQ_ELEM_57
+# define BOOST_PP_SEQ_ELEM_59(_) BOOST_PP_SEQ_ELEM_58
+# define BOOST_PP_SEQ_ELEM_60(_) BOOST_PP_SEQ_ELEM_59
+# define BOOST_PP_SEQ_ELEM_61(_) BOOST_PP_SEQ_ELEM_60
+# define BOOST_PP_SEQ_ELEM_62(_) BOOST_PP_SEQ_ELEM_61
+# define BOOST_PP_SEQ_ELEM_63(_) BOOST_PP_SEQ_ELEM_62
+# define BOOST_PP_SEQ_ELEM_64(_) BOOST_PP_SEQ_ELEM_63
+# define BOOST_PP_SEQ_ELEM_65(_) BOOST_PP_SEQ_ELEM_64
+# define BOOST_PP_SEQ_ELEM_66(_) BOOST_PP_SEQ_ELEM_65
+# define BOOST_PP_SEQ_ELEM_67(_) BOOST_PP_SEQ_ELEM_66
+# define BOOST_PP_SEQ_ELEM_68(_) BOOST_PP_SEQ_ELEM_67
+# define BOOST_PP_SEQ_ELEM_69(_) BOOST_PP_SEQ_ELEM_68
+# define BOOST_PP_SEQ_ELEM_70(_) BOOST_PP_SEQ_ELEM_69
+# define BOOST_PP_SEQ_ELEM_71(_) BOOST_PP_SEQ_ELEM_70
+# define BOOST_PP_SEQ_ELEM_72(_) BOOST_PP_SEQ_ELEM_71
+# define BOOST_PP_SEQ_ELEM_73(_) BOOST_PP_SEQ_ELEM_72
+# define BOOST_PP_SEQ_ELEM_74(_) BOOST_PP_SEQ_ELEM_73
+# define BOOST_PP_SEQ_ELEM_75(_) BOOST_PP_SEQ_ELEM_74
+# define BOOST_PP_SEQ_ELEM_76(_) BOOST_PP_SEQ_ELEM_75
+# define BOOST_PP_SEQ_ELEM_77(_) BOOST_PP_SEQ_ELEM_76
+# define BOOST_PP_SEQ_ELEM_78(_) BOOST_PP_SEQ_ELEM_77
+# define BOOST_PP_SEQ_ELEM_79(_) BOOST_PP_SEQ_ELEM_78
+# define BOOST_PP_SEQ_ELEM_80(_) BOOST_PP_SEQ_ELEM_79
+# define BOOST_PP_SEQ_ELEM_81(_) BOOST_PP_SEQ_ELEM_80
+# define BOOST_PP_SEQ_ELEM_82(_) BOOST_PP_SEQ_ELEM_81
+# define BOOST_PP_SEQ_ELEM_83(_) BOOST_PP_SEQ_ELEM_82
+# define BOOST_PP_SEQ_ELEM_84(_) BOOST_PP_SEQ_ELEM_83
+# define BOOST_PP_SEQ_ELEM_85(_) BOOST_PP_SEQ_ELEM_84
+# define BOOST_PP_SEQ_ELEM_86(_) BOOST_PP_SEQ_ELEM_85
+# define BOOST_PP_SEQ_ELEM_87(_) BOOST_PP_SEQ_ELEM_86
+# define BOOST_PP_SEQ_ELEM_88(_) BOOST_PP_SEQ_ELEM_87
+# define BOOST_PP_SEQ_ELEM_89(_) BOOST_PP_SEQ_ELEM_88
+# define BOOST_PP_SEQ_ELEM_90(_) BOOST_PP_SEQ_ELEM_89
+# define BOOST_PP_SEQ_ELEM_91(_) BOOST_PP_SEQ_ELEM_90
+# define BOOST_PP_SEQ_ELEM_92(_) BOOST_PP_SEQ_ELEM_91
+# define BOOST_PP_SEQ_ELEM_93(_) BOOST_PP_SEQ_ELEM_92
+# define BOOST_PP_SEQ_ELEM_94(_) BOOST_PP_SEQ_ELEM_93
+# define BOOST_PP_SEQ_ELEM_95(_) BOOST_PP_SEQ_ELEM_94
+# define BOOST_PP_SEQ_ELEM_96(_) BOOST_PP_SEQ_ELEM_95
+# define BOOST_PP_SEQ_ELEM_97(_) BOOST_PP_SEQ_ELEM_96
+# define BOOST_PP_SEQ_ELEM_98(_) BOOST_PP_SEQ_ELEM_97
+# define BOOST_PP_SEQ_ELEM_99(_) BOOST_PP_SEQ_ELEM_98
+# define BOOST_PP_SEQ_ELEM_100(_) BOOST_PP_SEQ_ELEM_99
+# define BOOST_PP_SEQ_ELEM_101(_) BOOST_PP_SEQ_ELEM_100
+# define BOOST_PP_SEQ_ELEM_102(_) BOOST_PP_SEQ_ELEM_101
+# define BOOST_PP_SEQ_ELEM_103(_) BOOST_PP_SEQ_ELEM_102
+# define BOOST_PP_SEQ_ELEM_104(_) BOOST_PP_SEQ_ELEM_103
+# define BOOST_PP_SEQ_ELEM_105(_) BOOST_PP_SEQ_ELEM_104
+# define BOOST_PP_SEQ_ELEM_106(_) BOOST_PP_SEQ_ELEM_105
+# define BOOST_PP_SEQ_ELEM_107(_) BOOST_PP_SEQ_ELEM_106
+# define BOOST_PP_SEQ_ELEM_108(_) BOOST_PP_SEQ_ELEM_107
+# define BOOST_PP_SEQ_ELEM_109(_) BOOST_PP_SEQ_ELEM_108
+# define BOOST_PP_SEQ_ELEM_110(_) BOOST_PP_SEQ_ELEM_109
+# define BOOST_PP_SEQ_ELEM_111(_) BOOST_PP_SEQ_ELEM_110
+# define BOOST_PP_SEQ_ELEM_112(_) BOOST_PP_SEQ_ELEM_111
+# define BOOST_PP_SEQ_ELEM_113(_) BOOST_PP_SEQ_ELEM_112
+# define BOOST_PP_SEQ_ELEM_114(_) BOOST_PP_SEQ_ELEM_113
+# define BOOST_PP_SEQ_ELEM_115(_) BOOST_PP_SEQ_ELEM_114
+# define BOOST_PP_SEQ_ELEM_116(_) BOOST_PP_SEQ_ELEM_115
+# define BOOST_PP_SEQ_ELEM_117(_) BOOST_PP_SEQ_ELEM_116
+# define BOOST_PP_SEQ_ELEM_118(_) BOOST_PP_SEQ_ELEM_117
+# define BOOST_PP_SEQ_ELEM_119(_) BOOST_PP_SEQ_ELEM_118
+# define BOOST_PP_SEQ_ELEM_120(_) BOOST_PP_SEQ_ELEM_119
+# define BOOST_PP_SEQ_ELEM_121(_) BOOST_PP_SEQ_ELEM_120
+# define BOOST_PP_SEQ_ELEM_122(_) BOOST_PP_SEQ_ELEM_121
+# define BOOST_PP_SEQ_ELEM_123(_) BOOST_PP_SEQ_ELEM_122
+# define BOOST_PP_SEQ_ELEM_124(_) BOOST_PP_SEQ_ELEM_123
+# define BOOST_PP_SEQ_ELEM_125(_) BOOST_PP_SEQ_ELEM_124
+# define BOOST_PP_SEQ_ELEM_126(_) BOOST_PP_SEQ_ELEM_125
+# define BOOST_PP_SEQ_ELEM_127(_) BOOST_PP_SEQ_ELEM_126
+# define BOOST_PP_SEQ_ELEM_128(_) BOOST_PP_SEQ_ELEM_127
+# define BOOST_PP_SEQ_ELEM_129(_) BOOST_PP_SEQ_ELEM_128
+# define BOOST_PP_SEQ_ELEM_130(_) BOOST_PP_SEQ_ELEM_129
+# define BOOST_PP_SEQ_ELEM_131(_) BOOST_PP_SEQ_ELEM_130
+# define BOOST_PP_SEQ_ELEM_132(_) BOOST_PP_SEQ_ELEM_131
+# define BOOST_PP_SEQ_ELEM_133(_) BOOST_PP_SEQ_ELEM_132
+# define BOOST_PP_SEQ_ELEM_134(_) BOOST_PP_SEQ_ELEM_133
+# define BOOST_PP_SEQ_ELEM_135(_) BOOST_PP_SEQ_ELEM_134
+# define BOOST_PP_SEQ_ELEM_136(_) BOOST_PP_SEQ_ELEM_135
+# define BOOST_PP_SEQ_ELEM_137(_) BOOST_PP_SEQ_ELEM_136
+# define BOOST_PP_SEQ_ELEM_138(_) BOOST_PP_SEQ_ELEM_137
+# define BOOST_PP_SEQ_ELEM_139(_) BOOST_PP_SEQ_ELEM_138
+# define BOOST_PP_SEQ_ELEM_140(_) BOOST_PP_SEQ_ELEM_139
+# define BOOST_PP_SEQ_ELEM_141(_) BOOST_PP_SEQ_ELEM_140
+# define BOOST_PP_SEQ_ELEM_142(_) BOOST_PP_SEQ_ELEM_141
+# define BOOST_PP_SEQ_ELEM_143(_) BOOST_PP_SEQ_ELEM_142
+# define BOOST_PP_SEQ_ELEM_144(_) BOOST_PP_SEQ_ELEM_143
+# define BOOST_PP_SEQ_ELEM_145(_) BOOST_PP_SEQ_ELEM_144
+# define BOOST_PP_SEQ_ELEM_146(_) BOOST_PP_SEQ_ELEM_145
+# define BOOST_PP_SEQ_ELEM_147(_) BOOST_PP_SEQ_ELEM_146
+# define BOOST_PP_SEQ_ELEM_148(_) BOOST_PP_SEQ_ELEM_147
+# define BOOST_PP_SEQ_ELEM_149(_) BOOST_PP_SEQ_ELEM_148
+# define BOOST_PP_SEQ_ELEM_150(_) BOOST_PP_SEQ_ELEM_149
+# define BOOST_PP_SEQ_ELEM_151(_) BOOST_PP_SEQ_ELEM_150
+# define BOOST_PP_SEQ_ELEM_152(_) BOOST_PP_SEQ_ELEM_151
+# define BOOST_PP_SEQ_ELEM_153(_) BOOST_PP_SEQ_ELEM_152
+# define BOOST_PP_SEQ_ELEM_154(_) BOOST_PP_SEQ_ELEM_153
+# define BOOST_PP_SEQ_ELEM_155(_) BOOST_PP_SEQ_ELEM_154
+# define BOOST_PP_SEQ_ELEM_156(_) BOOST_PP_SEQ_ELEM_155
+# define BOOST_PP_SEQ_ELEM_157(_) BOOST_PP_SEQ_ELEM_156
+# define BOOST_PP_SEQ_ELEM_158(_) BOOST_PP_SEQ_ELEM_157
+# define BOOST_PP_SEQ_ELEM_159(_) BOOST_PP_SEQ_ELEM_158
+# define BOOST_PP_SEQ_ELEM_160(_) BOOST_PP_SEQ_ELEM_159
+# define BOOST_PP_SEQ_ELEM_161(_) BOOST_PP_SEQ_ELEM_160
+# define BOOST_PP_SEQ_ELEM_162(_) BOOST_PP_SEQ_ELEM_161
+# define BOOST_PP_SEQ_ELEM_163(_) BOOST_PP_SEQ_ELEM_162
+# define BOOST_PP_SEQ_ELEM_164(_) BOOST_PP_SEQ_ELEM_163
+# define BOOST_PP_SEQ_ELEM_165(_) BOOST_PP_SEQ_ELEM_164
+# define BOOST_PP_SEQ_ELEM_166(_) BOOST_PP_SEQ_ELEM_165
+# define BOOST_PP_SEQ_ELEM_167(_) BOOST_PP_SEQ_ELEM_166
+# define BOOST_PP_SEQ_ELEM_168(_) BOOST_PP_SEQ_ELEM_167
+# define BOOST_PP_SEQ_ELEM_169(_) BOOST_PP_SEQ_ELEM_168
+# define BOOST_PP_SEQ_ELEM_170(_) BOOST_PP_SEQ_ELEM_169
+# define BOOST_PP_SEQ_ELEM_171(_) BOOST_PP_SEQ_ELEM_170
+# define BOOST_PP_SEQ_ELEM_172(_) BOOST_PP_SEQ_ELEM_171
+# define BOOST_PP_SEQ_ELEM_173(_) BOOST_PP_SEQ_ELEM_172
+# define BOOST_PP_SEQ_ELEM_174(_) BOOST_PP_SEQ_ELEM_173
+# define BOOST_PP_SEQ_ELEM_175(_) BOOST_PP_SEQ_ELEM_174
+# define BOOST_PP_SEQ_ELEM_176(_) BOOST_PP_SEQ_ELEM_175
+# define BOOST_PP_SEQ_ELEM_177(_) BOOST_PP_SEQ_ELEM_176
+# define BOOST_PP_SEQ_ELEM_178(_) BOOST_PP_SEQ_ELEM_177
+# define BOOST_PP_SEQ_ELEM_179(_) BOOST_PP_SEQ_ELEM_178
+# define BOOST_PP_SEQ_ELEM_180(_) BOOST_PP_SEQ_ELEM_179
+# define BOOST_PP_SEQ_ELEM_181(_) BOOST_PP_SEQ_ELEM_180
+# define BOOST_PP_SEQ_ELEM_182(_) BOOST_PP_SEQ_ELEM_181
+# define BOOST_PP_SEQ_ELEM_183(_) BOOST_PP_SEQ_ELEM_182
+# define BOOST_PP_SEQ_ELEM_184(_) BOOST_PP_SEQ_ELEM_183
+# define BOOST_PP_SEQ_ELEM_185(_) BOOST_PP_SEQ_ELEM_184
+# define BOOST_PP_SEQ_ELEM_186(_) BOOST_PP_SEQ_ELEM_185
+# define BOOST_PP_SEQ_ELEM_187(_) BOOST_PP_SEQ_ELEM_186
+# define BOOST_PP_SEQ_ELEM_188(_) BOOST_PP_SEQ_ELEM_187
+# define BOOST_PP_SEQ_ELEM_189(_) BOOST_PP_SEQ_ELEM_188
+# define BOOST_PP_SEQ_ELEM_190(_) BOOST_PP_SEQ_ELEM_189
+# define BOOST_PP_SEQ_ELEM_191(_) BOOST_PP_SEQ_ELEM_190
+# define BOOST_PP_SEQ_ELEM_192(_) BOOST_PP_SEQ_ELEM_191
+# define BOOST_PP_SEQ_ELEM_193(_) BOOST_PP_SEQ_ELEM_192
+# define BOOST_PP_SEQ_ELEM_194(_) BOOST_PP_SEQ_ELEM_193
+# define BOOST_PP_SEQ_ELEM_195(_) BOOST_PP_SEQ_ELEM_194
+# define BOOST_PP_SEQ_ELEM_196(_) BOOST_PP_SEQ_ELEM_195
+# define BOOST_PP_SEQ_ELEM_197(_) BOOST_PP_SEQ_ELEM_196
+# define BOOST_PP_SEQ_ELEM_198(_) BOOST_PP_SEQ_ELEM_197
+# define BOOST_PP_SEQ_ELEM_199(_) BOOST_PP_SEQ_ELEM_198
+# define BOOST_PP_SEQ_ELEM_200(_) BOOST_PP_SEQ_ELEM_199
+# define BOOST_PP_SEQ_ELEM_201(_) BOOST_PP_SEQ_ELEM_200
+# define BOOST_PP_SEQ_ELEM_202(_) BOOST_PP_SEQ_ELEM_201
+# define BOOST_PP_SEQ_ELEM_203(_) BOOST_PP_SEQ_ELEM_202
+# define BOOST_PP_SEQ_ELEM_204(_) BOOST_PP_SEQ_ELEM_203
+# define BOOST_PP_SEQ_ELEM_205(_) BOOST_PP_SEQ_ELEM_204
+# define BOOST_PP_SEQ_ELEM_206(_) BOOST_PP_SEQ_ELEM_205
+# define BOOST_PP_SEQ_ELEM_207(_) BOOST_PP_SEQ_ELEM_206
+# define BOOST_PP_SEQ_ELEM_208(_) BOOST_PP_SEQ_ELEM_207
+# define BOOST_PP_SEQ_ELEM_209(_) BOOST_PP_SEQ_ELEM_208
+# define BOOST_PP_SEQ_ELEM_210(_) BOOST_PP_SEQ_ELEM_209
+# define BOOST_PP_SEQ_ELEM_211(_) BOOST_PP_SEQ_ELEM_210
+# define BOOST_PP_SEQ_ELEM_212(_) BOOST_PP_SEQ_ELEM_211
+# define BOOST_PP_SEQ_ELEM_213(_) BOOST_PP_SEQ_ELEM_212
+# define BOOST_PP_SEQ_ELEM_214(_) BOOST_PP_SEQ_ELEM_213
+# define BOOST_PP_SEQ_ELEM_215(_) BOOST_PP_SEQ_ELEM_214
+# define BOOST_PP_SEQ_ELEM_216(_) BOOST_PP_SEQ_ELEM_215
+# define BOOST_PP_SEQ_ELEM_217(_) BOOST_PP_SEQ_ELEM_216
+# define BOOST_PP_SEQ_ELEM_218(_) BOOST_PP_SEQ_ELEM_217
+# define BOOST_PP_SEQ_ELEM_219(_) BOOST_PP_SEQ_ELEM_218
+# define BOOST_PP_SEQ_ELEM_220(_) BOOST_PP_SEQ_ELEM_219
+# define BOOST_PP_SEQ_ELEM_221(_) BOOST_PP_SEQ_ELEM_220
+# define BOOST_PP_SEQ_ELEM_222(_) BOOST_PP_SEQ_ELEM_221
+# define BOOST_PP_SEQ_ELEM_223(_) BOOST_PP_SEQ_ELEM_222
+# define BOOST_PP_SEQ_ELEM_224(_) BOOST_PP_SEQ_ELEM_223
+# define BOOST_PP_SEQ_ELEM_225(_) BOOST_PP_SEQ_ELEM_224
+# define BOOST_PP_SEQ_ELEM_226(_) BOOST_PP_SEQ_ELEM_225
+# define BOOST_PP_SEQ_ELEM_227(_) BOOST_PP_SEQ_ELEM_226
+# define BOOST_PP_SEQ_ELEM_228(_) BOOST_PP_SEQ_ELEM_227
+# define BOOST_PP_SEQ_ELEM_229(_) BOOST_PP_SEQ_ELEM_228
+# define BOOST_PP_SEQ_ELEM_230(_) BOOST_PP_SEQ_ELEM_229
+# define BOOST_PP_SEQ_ELEM_231(_) BOOST_PP_SEQ_ELEM_230
+# define BOOST_PP_SEQ_ELEM_232(_) BOOST_PP_SEQ_ELEM_231
+# define BOOST_PP_SEQ_ELEM_233(_) BOOST_PP_SEQ_ELEM_232
+# define BOOST_PP_SEQ_ELEM_234(_) BOOST_PP_SEQ_ELEM_233
+# define BOOST_PP_SEQ_ELEM_235(_) BOOST_PP_SEQ_ELEM_234
+# define BOOST_PP_SEQ_ELEM_236(_) BOOST_PP_SEQ_ELEM_235
+# define BOOST_PP_SEQ_ELEM_237(_) BOOST_PP_SEQ_ELEM_236
+# define BOOST_PP_SEQ_ELEM_238(_) BOOST_PP_SEQ_ELEM_237
+# define BOOST_PP_SEQ_ELEM_239(_) BOOST_PP_SEQ_ELEM_238
+# define BOOST_PP_SEQ_ELEM_240(_) BOOST_PP_SEQ_ELEM_239
+# define BOOST_PP_SEQ_ELEM_241(_) BOOST_PP_SEQ_ELEM_240
+# define BOOST_PP_SEQ_ELEM_242(_) BOOST_PP_SEQ_ELEM_241
+# define BOOST_PP_SEQ_ELEM_243(_) BOOST_PP_SEQ_ELEM_242
+# define BOOST_PP_SEQ_ELEM_244(_) BOOST_PP_SEQ_ELEM_243
+# define BOOST_PP_SEQ_ELEM_245(_) BOOST_PP_SEQ_ELEM_244
+# define BOOST_PP_SEQ_ELEM_246(_) BOOST_PP_SEQ_ELEM_245
+# define BOOST_PP_SEQ_ELEM_247(_) BOOST_PP_SEQ_ELEM_246
+# define BOOST_PP_SEQ_ELEM_248(_) BOOST_PP_SEQ_ELEM_247
+# define BOOST_PP_SEQ_ELEM_249(_) BOOST_PP_SEQ_ELEM_248
+# define BOOST_PP_SEQ_ELEM_250(_) BOOST_PP_SEQ_ELEM_249
+# define BOOST_PP_SEQ_ELEM_251(_) BOOST_PP_SEQ_ELEM_250
+# define BOOST_PP_SEQ_ELEM_252(_) BOOST_PP_SEQ_ELEM_251
+# define BOOST_PP_SEQ_ELEM_253(_) BOOST_PP_SEQ_ELEM_252
+# define BOOST_PP_SEQ_ELEM_254(_) BOOST_PP_SEQ_ELEM_253
+# define BOOST_PP_SEQ_ELEM_255(_) BOOST_PP_SEQ_ELEM_254
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/seq/enum.hpp b/vendor/pdalboost/boost/preprocessor/seq/enum.hpp
new file mode 100644
index 0000000..b63b242
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/seq/enum.hpp
@@ -0,0 +1,288 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_ENUM_HPP
+# define BOOST_PREPROCESSOR_SEQ_ENUM_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+#
+# /* BOOST_PP_SEQ_ENUM */
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_SEQ_ENUM_I(seq)
+#    define BOOST_PP_SEQ_ENUM_I(seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, BOOST_PP_SEQ_SIZE(seq)) seq
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_SEQ_ENUM_I(BOOST_PP_SEQ_SIZE(seq), seq)
+#    define BOOST_PP_SEQ_ENUM_I(size, seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, size) seq
+# else
+#    define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, BOOST_PP_SEQ_SIZE(seq)) seq
+# endif
+#
+# define BOOST_PP_SEQ_ENUM_1(x) x
+# define BOOST_PP_SEQ_ENUM_2(x) x, BOOST_PP_SEQ_ENUM_1
+# define BOOST_PP_SEQ_ENUM_3(x) x, BOOST_PP_SEQ_ENUM_2
+# define BOOST_PP_SEQ_ENUM_4(x) x, BOOST_PP_SEQ_ENUM_3
+# define BOOST_PP_SEQ_ENUM_5(x) x, BOOST_PP_SEQ_ENUM_4
+# define BOOST_PP_SEQ_ENUM_6(x) x, BOOST_PP_SEQ_ENUM_5
+# define BOOST_PP_SEQ_ENUM_7(x) x, BOOST_PP_SEQ_ENUM_6
+# define BOOST_PP_SEQ_ENUM_8(x) x, BOOST_PP_SEQ_ENUM_7
+# define BOOST_PP_SEQ_ENUM_9(x) x, BOOST_PP_SEQ_ENUM_8
+# define BOOST_PP_SEQ_ENUM_10(x) x, BOOST_PP_SEQ_ENUM_9
+# define BOOST_PP_SEQ_ENUM_11(x) x, BOOST_PP_SEQ_ENUM_10
+# define BOOST_PP_SEQ_ENUM_12(x) x, BOOST_PP_SEQ_ENUM_11
+# define BOOST_PP_SEQ_ENUM_13(x) x, BOOST_PP_SEQ_ENUM_12
+# define BOOST_PP_SEQ_ENUM_14(x) x, BOOST_PP_SEQ_ENUM_13
+# define BOOST_PP_SEQ_ENUM_15(x) x, BOOST_PP_SEQ_ENUM_14
+# define BOOST_PP_SEQ_ENUM_16(x) x, BOOST_PP_SEQ_ENUM_15
+# define BOOST_PP_SEQ_ENUM_17(x) x, BOOST_PP_SEQ_ENUM_16
+# define BOOST_PP_SEQ_ENUM_18(x) x, BOOST_PP_SEQ_ENUM_17
+# define BOOST_PP_SEQ_ENUM_19(x) x, BOOST_PP_SEQ_ENUM_18
+# define BOOST_PP_SEQ_ENUM_20(x) x, BOOST_PP_SEQ_ENUM_19
+# define BOOST_PP_SEQ_ENUM_21(x) x, BOOST_PP_SEQ_ENUM_20
+# define BOOST_PP_SEQ_ENUM_22(x) x, BOOST_PP_SEQ_ENUM_21
+# define BOOST_PP_SEQ_ENUM_23(x) x, BOOST_PP_SEQ_ENUM_22
+# define BOOST_PP_SEQ_ENUM_24(x) x, BOOST_PP_SEQ_ENUM_23
+# define BOOST_PP_SEQ_ENUM_25(x) x, BOOST_PP_SEQ_ENUM_24
+# define BOOST_PP_SEQ_ENUM_26(x) x, BOOST_PP_SEQ_ENUM_25
+# define BOOST_PP_SEQ_ENUM_27(x) x, BOOST_PP_SEQ_ENUM_26
+# define BOOST_PP_SEQ_ENUM_28(x) x, BOOST_PP_SEQ_ENUM_27
+# define BOOST_PP_SEQ_ENUM_29(x) x, BOOST_PP_SEQ_ENUM_28
+# define BOOST_PP_SEQ_ENUM_30(x) x, BOOST_PP_SEQ_ENUM_29
+# define BOOST_PP_SEQ_ENUM_31(x) x, BOOST_PP_SEQ_ENUM_30
+# define BOOST_PP_SEQ_ENUM_32(x) x, BOOST_PP_SEQ_ENUM_31
+# define BOOST_PP_SEQ_ENUM_33(x) x, BOOST_PP_SEQ_ENUM_32
+# define BOOST_PP_SEQ_ENUM_34(x) x, BOOST_PP_SEQ_ENUM_33
+# define BOOST_PP_SEQ_ENUM_35(x) x, BOOST_PP_SEQ_ENUM_34
+# define BOOST_PP_SEQ_ENUM_36(x) x, BOOST_PP_SEQ_ENUM_35
+# define BOOST_PP_SEQ_ENUM_37(x) x, BOOST_PP_SEQ_ENUM_36
+# define BOOST_PP_SEQ_ENUM_38(x) x, BOOST_PP_SEQ_ENUM_37
+# define BOOST_PP_SEQ_ENUM_39(x) x, BOOST_PP_SEQ_ENUM_38
+# define BOOST_PP_SEQ_ENUM_40(x) x, BOOST_PP_SEQ_ENUM_39
+# define BOOST_PP_SEQ_ENUM_41(x) x, BOOST_PP_SEQ_ENUM_40
+# define BOOST_PP_SEQ_ENUM_42(x) x, BOOST_PP_SEQ_ENUM_41
+# define BOOST_PP_SEQ_ENUM_43(x) x, BOOST_PP_SEQ_ENUM_42
+# define BOOST_PP_SEQ_ENUM_44(x) x, BOOST_PP_SEQ_ENUM_43
+# define BOOST_PP_SEQ_ENUM_45(x) x, BOOST_PP_SEQ_ENUM_44
+# define BOOST_PP_SEQ_ENUM_46(x) x, BOOST_PP_SEQ_ENUM_45
+# define BOOST_PP_SEQ_ENUM_47(x) x, BOOST_PP_SEQ_ENUM_46
+# define BOOST_PP_SEQ_ENUM_48(x) x, BOOST_PP_SEQ_ENUM_47
+# define BOOST_PP_SEQ_ENUM_49(x) x, BOOST_PP_SEQ_ENUM_48
+# define BOOST_PP_SEQ_ENUM_50(x) x, BOOST_PP_SEQ_ENUM_49
+# define BOOST_PP_SEQ_ENUM_51(x) x, BOOST_PP_SEQ_ENUM_50
+# define BOOST_PP_SEQ_ENUM_52(x) x, BOOST_PP_SEQ_ENUM_51
+# define BOOST_PP_SEQ_ENUM_53(x) x, BOOST_PP_SEQ_ENUM_52
+# define BOOST_PP_SEQ_ENUM_54(x) x, BOOST_PP_SEQ_ENUM_53
+# define BOOST_PP_SEQ_ENUM_55(x) x, BOOST_PP_SEQ_ENUM_54
+# define BOOST_PP_SEQ_ENUM_56(x) x, BOOST_PP_SEQ_ENUM_55
+# define BOOST_PP_SEQ_ENUM_57(x) x, BOOST_PP_SEQ_ENUM_56
+# define BOOST_PP_SEQ_ENUM_58(x) x, BOOST_PP_SEQ_ENUM_57
+# define BOOST_PP_SEQ_ENUM_59(x) x, BOOST_PP_SEQ_ENUM_58
+# define BOOST_PP_SEQ_ENUM_60(x) x, BOOST_PP_SEQ_ENUM_59
+# define BOOST_PP_SEQ_ENUM_61(x) x, BOOST_PP_SEQ_ENUM_60
+# define BOOST_PP_SEQ_ENUM_62(x) x, BOOST_PP_SEQ_ENUM_61
+# define BOOST_PP_SEQ_ENUM_63(x) x, BOOST_PP_SEQ_ENUM_62
+# define BOOST_PP_SEQ_ENUM_64(x) x, BOOST_PP_SEQ_ENUM_63
+# define BOOST_PP_SEQ_ENUM_65(x) x, BOOST_PP_SEQ_ENUM_64
+# define BOOST_PP_SEQ_ENUM_66(x) x, BOOST_PP_SEQ_ENUM_65
+# define BOOST_PP_SEQ_ENUM_67(x) x, BOOST_PP_SEQ_ENUM_66
+# define BOOST_PP_SEQ_ENUM_68(x) x, BOOST_PP_SEQ_ENUM_67
+# define BOOST_PP_SEQ_ENUM_69(x) x, BOOST_PP_SEQ_ENUM_68
+# define BOOST_PP_SEQ_ENUM_70(x) x, BOOST_PP_SEQ_ENUM_69
+# define BOOST_PP_SEQ_ENUM_71(x) x, BOOST_PP_SEQ_ENUM_70
+# define BOOST_PP_SEQ_ENUM_72(x) x, BOOST_PP_SEQ_ENUM_71
+# define BOOST_PP_SEQ_ENUM_73(x) x, BOOST_PP_SEQ_ENUM_72
+# define BOOST_PP_SEQ_ENUM_74(x) x, BOOST_PP_SEQ_ENUM_73
+# define BOOST_PP_SEQ_ENUM_75(x) x, BOOST_PP_SEQ_ENUM_74
+# define BOOST_PP_SEQ_ENUM_76(x) x, BOOST_PP_SEQ_ENUM_75
+# define BOOST_PP_SEQ_ENUM_77(x) x, BOOST_PP_SEQ_ENUM_76
+# define BOOST_PP_SEQ_ENUM_78(x) x, BOOST_PP_SEQ_ENUM_77
+# define BOOST_PP_SEQ_ENUM_79(x) x, BOOST_PP_SEQ_ENUM_78
+# define BOOST_PP_SEQ_ENUM_80(x) x, BOOST_PP_SEQ_ENUM_79
+# define BOOST_PP_SEQ_ENUM_81(x) x, BOOST_PP_SEQ_ENUM_80
+# define BOOST_PP_SEQ_ENUM_82(x) x, BOOST_PP_SEQ_ENUM_81
+# define BOOST_PP_SEQ_ENUM_83(x) x, BOOST_PP_SEQ_ENUM_82
+# define BOOST_PP_SEQ_ENUM_84(x) x, BOOST_PP_SEQ_ENUM_83
+# define BOOST_PP_SEQ_ENUM_85(x) x, BOOST_PP_SEQ_ENUM_84
+# define BOOST_PP_SEQ_ENUM_86(x) x, BOOST_PP_SEQ_ENUM_85
+# define BOOST_PP_SEQ_ENUM_87(x) x, BOOST_PP_SEQ_ENUM_86
+# define BOOST_PP_SEQ_ENUM_88(x) x, BOOST_PP_SEQ_ENUM_87
+# define BOOST_PP_SEQ_ENUM_89(x) x, BOOST_PP_SEQ_ENUM_88
+# define BOOST_PP_SEQ_ENUM_90(x) x, BOOST_PP_SEQ_ENUM_89
+# define BOOST_PP_SEQ_ENUM_91(x) x, BOOST_PP_SEQ_ENUM_90
+# define BOOST_PP_SEQ_ENUM_92(x) x, BOOST_PP_SEQ_ENUM_91
+# define BOOST_PP_SEQ_ENUM_93(x) x, BOOST_PP_SEQ_ENUM_92
+# define BOOST_PP_SEQ_ENUM_94(x) x, BOOST_PP_SEQ_ENUM_93
+# define BOOST_PP_SEQ_ENUM_95(x) x, BOOST_PP_SEQ_ENUM_94
+# define BOOST_PP_SEQ_ENUM_96(x) x, BOOST_PP_SEQ_ENUM_95
+# define BOOST_PP_SEQ_ENUM_97(x) x, BOOST_PP_SEQ_ENUM_96
+# define BOOST_PP_SEQ_ENUM_98(x) x, BOOST_PP_SEQ_ENUM_97
+# define BOOST_PP_SEQ_ENUM_99(x) x, BOOST_PP_SEQ_ENUM_98
+# define BOOST_PP_SEQ_ENUM_100(x) x, BOOST_PP_SEQ_ENUM_99
+# define BOOST_PP_SEQ_ENUM_101(x) x, BOOST_PP_SEQ_ENUM_100
+# define BOOST_PP_SEQ_ENUM_102(x) x, BOOST_PP_SEQ_ENUM_101
+# define BOOST_PP_SEQ_ENUM_103(x) x, BOOST_PP_SEQ_ENUM_102
+# define BOOST_PP_SEQ_ENUM_104(x) x, BOOST_PP_SEQ_ENUM_103
+# define BOOST_PP_SEQ_ENUM_105(x) x, BOOST_PP_SEQ_ENUM_104
+# define BOOST_PP_SEQ_ENUM_106(x) x, BOOST_PP_SEQ_ENUM_105
+# define BOOST_PP_SEQ_ENUM_107(x) x, BOOST_PP_SEQ_ENUM_106
+# define BOOST_PP_SEQ_ENUM_108(x) x, BOOST_PP_SEQ_ENUM_107
+# define BOOST_PP_SEQ_ENUM_109(x) x, BOOST_PP_SEQ_ENUM_108
+# define BOOST_PP_SEQ_ENUM_110(x) x, BOOST_PP_SEQ_ENUM_109
+# define BOOST_PP_SEQ_ENUM_111(x) x, BOOST_PP_SEQ_ENUM_110
+# define BOOST_PP_SEQ_ENUM_112(x) x, BOOST_PP_SEQ_ENUM_111
+# define BOOST_PP_SEQ_ENUM_113(x) x, BOOST_PP_SEQ_ENUM_112
+# define BOOST_PP_SEQ_ENUM_114(x) x, BOOST_PP_SEQ_ENUM_113
+# define BOOST_PP_SEQ_ENUM_115(x) x, BOOST_PP_SEQ_ENUM_114
+# define BOOST_PP_SEQ_ENUM_116(x) x, BOOST_PP_SEQ_ENUM_115
+# define BOOST_PP_SEQ_ENUM_117(x) x, BOOST_PP_SEQ_ENUM_116
+# define BOOST_PP_SEQ_ENUM_118(x) x, BOOST_PP_SEQ_ENUM_117
+# define BOOST_PP_SEQ_ENUM_119(x) x, BOOST_PP_SEQ_ENUM_118
+# define BOOST_PP_SEQ_ENUM_120(x) x, BOOST_PP_SEQ_ENUM_119
+# define BOOST_PP_SEQ_ENUM_121(x) x, BOOST_PP_SEQ_ENUM_120
+# define BOOST_PP_SEQ_ENUM_122(x) x, BOOST_PP_SEQ_ENUM_121
+# define BOOST_PP_SEQ_ENUM_123(x) x, BOOST_PP_SEQ_ENUM_122
+# define BOOST_PP_SEQ_ENUM_124(x) x, BOOST_PP_SEQ_ENUM_123
+# define BOOST_PP_SEQ_ENUM_125(x) x, BOOST_PP_SEQ_ENUM_124
+# define BOOST_PP_SEQ_ENUM_126(x) x, BOOST_PP_SEQ_ENUM_125
+# define BOOST_PP_SEQ_ENUM_127(x) x, BOOST_PP_SEQ_ENUM_126
+# define BOOST_PP_SEQ_ENUM_128(x) x, BOOST_PP_SEQ_ENUM_127
+# define BOOST_PP_SEQ_ENUM_129(x) x, BOOST_PP_SEQ_ENUM_128
+# define BOOST_PP_SEQ_ENUM_130(x) x, BOOST_PP_SEQ_ENUM_129
+# define BOOST_PP_SEQ_ENUM_131(x) x, BOOST_PP_SEQ_ENUM_130
+# define BOOST_PP_SEQ_ENUM_132(x) x, BOOST_PP_SEQ_ENUM_131
+# define BOOST_PP_SEQ_ENUM_133(x) x, BOOST_PP_SEQ_ENUM_132
+# define BOOST_PP_SEQ_ENUM_134(x) x, BOOST_PP_SEQ_ENUM_133
+# define BOOST_PP_SEQ_ENUM_135(x) x, BOOST_PP_SEQ_ENUM_134
+# define BOOST_PP_SEQ_ENUM_136(x) x, BOOST_PP_SEQ_ENUM_135
+# define BOOST_PP_SEQ_ENUM_137(x) x, BOOST_PP_SEQ_ENUM_136
+# define BOOST_PP_SEQ_ENUM_138(x) x, BOOST_PP_SEQ_ENUM_137
+# define BOOST_PP_SEQ_ENUM_139(x) x, BOOST_PP_SEQ_ENUM_138
+# define BOOST_PP_SEQ_ENUM_140(x) x, BOOST_PP_SEQ_ENUM_139
+# define BOOST_PP_SEQ_ENUM_141(x) x, BOOST_PP_SEQ_ENUM_140
+# define BOOST_PP_SEQ_ENUM_142(x) x, BOOST_PP_SEQ_ENUM_141
+# define BOOST_PP_SEQ_ENUM_143(x) x, BOOST_PP_SEQ_ENUM_142
+# define BOOST_PP_SEQ_ENUM_144(x) x, BOOST_PP_SEQ_ENUM_143
+# define BOOST_PP_SEQ_ENUM_145(x) x, BOOST_PP_SEQ_ENUM_144
+# define BOOST_PP_SEQ_ENUM_146(x) x, BOOST_PP_SEQ_ENUM_145
+# define BOOST_PP_SEQ_ENUM_147(x) x, BOOST_PP_SEQ_ENUM_146
+# define BOOST_PP_SEQ_ENUM_148(x) x, BOOST_PP_SEQ_ENUM_147
+# define BOOST_PP_SEQ_ENUM_149(x) x, BOOST_PP_SEQ_ENUM_148
+# define BOOST_PP_SEQ_ENUM_150(x) x, BOOST_PP_SEQ_ENUM_149
+# define BOOST_PP_SEQ_ENUM_151(x) x, BOOST_PP_SEQ_ENUM_150
+# define BOOST_PP_SEQ_ENUM_152(x) x, BOOST_PP_SEQ_ENUM_151
+# define BOOST_PP_SEQ_ENUM_153(x) x, BOOST_PP_SEQ_ENUM_152
+# define BOOST_PP_SEQ_ENUM_154(x) x, BOOST_PP_SEQ_ENUM_153
+# define BOOST_PP_SEQ_ENUM_155(x) x, BOOST_PP_SEQ_ENUM_154
+# define BOOST_PP_SEQ_ENUM_156(x) x, BOOST_PP_SEQ_ENUM_155
+# define BOOST_PP_SEQ_ENUM_157(x) x, BOOST_PP_SEQ_ENUM_156
+# define BOOST_PP_SEQ_ENUM_158(x) x, BOOST_PP_SEQ_ENUM_157
+# define BOOST_PP_SEQ_ENUM_159(x) x, BOOST_PP_SEQ_ENUM_158
+# define BOOST_PP_SEQ_ENUM_160(x) x, BOOST_PP_SEQ_ENUM_159
+# define BOOST_PP_SEQ_ENUM_161(x) x, BOOST_PP_SEQ_ENUM_160
+# define BOOST_PP_SEQ_ENUM_162(x) x, BOOST_PP_SEQ_ENUM_161
+# define BOOST_PP_SEQ_ENUM_163(x) x, BOOST_PP_SEQ_ENUM_162
+# define BOOST_PP_SEQ_ENUM_164(x) x, BOOST_PP_SEQ_ENUM_163
+# define BOOST_PP_SEQ_ENUM_165(x) x, BOOST_PP_SEQ_ENUM_164
+# define BOOST_PP_SEQ_ENUM_166(x) x, BOOST_PP_SEQ_ENUM_165
+# define BOOST_PP_SEQ_ENUM_167(x) x, BOOST_PP_SEQ_ENUM_166
+# define BOOST_PP_SEQ_ENUM_168(x) x, BOOST_PP_SEQ_ENUM_167
+# define BOOST_PP_SEQ_ENUM_169(x) x, BOOST_PP_SEQ_ENUM_168
+# define BOOST_PP_SEQ_ENUM_170(x) x, BOOST_PP_SEQ_ENUM_169
+# define BOOST_PP_SEQ_ENUM_171(x) x, BOOST_PP_SEQ_ENUM_170
+# define BOOST_PP_SEQ_ENUM_172(x) x, BOOST_PP_SEQ_ENUM_171
+# define BOOST_PP_SEQ_ENUM_173(x) x, BOOST_PP_SEQ_ENUM_172
+# define BOOST_PP_SEQ_ENUM_174(x) x, BOOST_PP_SEQ_ENUM_173
+# define BOOST_PP_SEQ_ENUM_175(x) x, BOOST_PP_SEQ_ENUM_174
+# define BOOST_PP_SEQ_ENUM_176(x) x, BOOST_PP_SEQ_ENUM_175
+# define BOOST_PP_SEQ_ENUM_177(x) x, BOOST_PP_SEQ_ENUM_176
+# define BOOST_PP_SEQ_ENUM_178(x) x, BOOST_PP_SEQ_ENUM_177
+# define BOOST_PP_SEQ_ENUM_179(x) x, BOOST_PP_SEQ_ENUM_178
+# define BOOST_PP_SEQ_ENUM_180(x) x, BOOST_PP_SEQ_ENUM_179
+# define BOOST_PP_SEQ_ENUM_181(x) x, BOOST_PP_SEQ_ENUM_180
+# define BOOST_PP_SEQ_ENUM_182(x) x, BOOST_PP_SEQ_ENUM_181
+# define BOOST_PP_SEQ_ENUM_183(x) x, BOOST_PP_SEQ_ENUM_182
+# define BOOST_PP_SEQ_ENUM_184(x) x, BOOST_PP_SEQ_ENUM_183
+# define BOOST_PP_SEQ_ENUM_185(x) x, BOOST_PP_SEQ_ENUM_184
+# define BOOST_PP_SEQ_ENUM_186(x) x, BOOST_PP_SEQ_ENUM_185
+# define BOOST_PP_SEQ_ENUM_187(x) x, BOOST_PP_SEQ_ENUM_186
+# define BOOST_PP_SEQ_ENUM_188(x) x, BOOST_PP_SEQ_ENUM_187
+# define BOOST_PP_SEQ_ENUM_189(x) x, BOOST_PP_SEQ_ENUM_188
+# define BOOST_PP_SEQ_ENUM_190(x) x, BOOST_PP_SEQ_ENUM_189
+# define BOOST_PP_SEQ_ENUM_191(x) x, BOOST_PP_SEQ_ENUM_190
+# define BOOST_PP_SEQ_ENUM_192(x) x, BOOST_PP_SEQ_ENUM_191
+# define BOOST_PP_SEQ_ENUM_193(x) x, BOOST_PP_SEQ_ENUM_192
+# define BOOST_PP_SEQ_ENUM_194(x) x, BOOST_PP_SEQ_ENUM_193
+# define BOOST_PP_SEQ_ENUM_195(x) x, BOOST_PP_SEQ_ENUM_194
+# define BOOST_PP_SEQ_ENUM_196(x) x, BOOST_PP_SEQ_ENUM_195
+# define BOOST_PP_SEQ_ENUM_197(x) x, BOOST_PP_SEQ_ENUM_196
+# define BOOST_PP_SEQ_ENUM_198(x) x, BOOST_PP_SEQ_ENUM_197
+# define BOOST_PP_SEQ_ENUM_199(x) x, BOOST_PP_SEQ_ENUM_198
+# define BOOST_PP_SEQ_ENUM_200(x) x, BOOST_PP_SEQ_ENUM_199
+# define BOOST_PP_SEQ_ENUM_201(x) x, BOOST_PP_SEQ_ENUM_200
+# define BOOST_PP_SEQ_ENUM_202(x) x, BOOST_PP_SEQ_ENUM_201
+# define BOOST_PP_SEQ_ENUM_203(x) x, BOOST_PP_SEQ_ENUM_202
+# define BOOST_PP_SEQ_ENUM_204(x) x, BOOST_PP_SEQ_ENUM_203
+# define BOOST_PP_SEQ_ENUM_205(x) x, BOOST_PP_SEQ_ENUM_204
+# define BOOST_PP_SEQ_ENUM_206(x) x, BOOST_PP_SEQ_ENUM_205
+# define BOOST_PP_SEQ_ENUM_207(x) x, BOOST_PP_SEQ_ENUM_206
+# define BOOST_PP_SEQ_ENUM_208(x) x, BOOST_PP_SEQ_ENUM_207
+# define BOOST_PP_SEQ_ENUM_209(x) x, BOOST_PP_SEQ_ENUM_208
+# define BOOST_PP_SEQ_ENUM_210(x) x, BOOST_PP_SEQ_ENUM_209
+# define BOOST_PP_SEQ_ENUM_211(x) x, BOOST_PP_SEQ_ENUM_210
+# define BOOST_PP_SEQ_ENUM_212(x) x, BOOST_PP_SEQ_ENUM_211
+# define BOOST_PP_SEQ_ENUM_213(x) x, BOOST_PP_SEQ_ENUM_212
+# define BOOST_PP_SEQ_ENUM_214(x) x, BOOST_PP_SEQ_ENUM_213
+# define BOOST_PP_SEQ_ENUM_215(x) x, BOOST_PP_SEQ_ENUM_214
+# define BOOST_PP_SEQ_ENUM_216(x) x, BOOST_PP_SEQ_ENUM_215
+# define BOOST_PP_SEQ_ENUM_217(x) x, BOOST_PP_SEQ_ENUM_216
+# define BOOST_PP_SEQ_ENUM_218(x) x, BOOST_PP_SEQ_ENUM_217
+# define BOOST_PP_SEQ_ENUM_219(x) x, BOOST_PP_SEQ_ENUM_218
+# define BOOST_PP_SEQ_ENUM_220(x) x, BOOST_PP_SEQ_ENUM_219
+# define BOOST_PP_SEQ_ENUM_221(x) x, BOOST_PP_SEQ_ENUM_220
+# define BOOST_PP_SEQ_ENUM_222(x) x, BOOST_PP_SEQ_ENUM_221
+# define BOOST_PP_SEQ_ENUM_223(x) x, BOOST_PP_SEQ_ENUM_222
+# define BOOST_PP_SEQ_ENUM_224(x) x, BOOST_PP_SEQ_ENUM_223
+# define BOOST_PP_SEQ_ENUM_225(x) x, BOOST_PP_SEQ_ENUM_224
+# define BOOST_PP_SEQ_ENUM_226(x) x, BOOST_PP_SEQ_ENUM_225
+# define BOOST_PP_SEQ_ENUM_227(x) x, BOOST_PP_SEQ_ENUM_226
+# define BOOST_PP_SEQ_ENUM_228(x) x, BOOST_PP_SEQ_ENUM_227
+# define BOOST_PP_SEQ_ENUM_229(x) x, BOOST_PP_SEQ_ENUM_228
+# define BOOST_PP_SEQ_ENUM_230(x) x, BOOST_PP_SEQ_ENUM_229
+# define BOOST_PP_SEQ_ENUM_231(x) x, BOOST_PP_SEQ_ENUM_230
+# define BOOST_PP_SEQ_ENUM_232(x) x, BOOST_PP_SEQ_ENUM_231
+# define BOOST_PP_SEQ_ENUM_233(x) x, BOOST_PP_SEQ_ENUM_232
+# define BOOST_PP_SEQ_ENUM_234(x) x, BOOST_PP_SEQ_ENUM_233
+# define BOOST_PP_SEQ_ENUM_235(x) x, BOOST_PP_SEQ_ENUM_234
+# define BOOST_PP_SEQ_ENUM_236(x) x, BOOST_PP_SEQ_ENUM_235
+# define BOOST_PP_SEQ_ENUM_237(x) x, BOOST_PP_SEQ_ENUM_236
+# define BOOST_PP_SEQ_ENUM_238(x) x, BOOST_PP_SEQ_ENUM_237
+# define BOOST_PP_SEQ_ENUM_239(x) x, BOOST_PP_SEQ_ENUM_238
+# define BOOST_PP_SEQ_ENUM_240(x) x, BOOST_PP_SEQ_ENUM_239
+# define BOOST_PP_SEQ_ENUM_241(x) x, BOOST_PP_SEQ_ENUM_240
+# define BOOST_PP_SEQ_ENUM_242(x) x, BOOST_PP_SEQ_ENUM_241
+# define BOOST_PP_SEQ_ENUM_243(x) x, BOOST_PP_SEQ_ENUM_242
+# define BOOST_PP_SEQ_ENUM_244(x) x, BOOST_PP_SEQ_ENUM_243
+# define BOOST_PP_SEQ_ENUM_245(x) x, BOOST_PP_SEQ_ENUM_244
+# define BOOST_PP_SEQ_ENUM_246(x) x, BOOST_PP_SEQ_ENUM_245
+# define BOOST_PP_SEQ_ENUM_247(x) x, BOOST_PP_SEQ_ENUM_246
+# define BOOST_PP_SEQ_ENUM_248(x) x, BOOST_PP_SEQ_ENUM_247
+# define BOOST_PP_SEQ_ENUM_249(x) x, BOOST_PP_SEQ_ENUM_248
+# define BOOST_PP_SEQ_ENUM_250(x) x, BOOST_PP_SEQ_ENUM_249
+# define BOOST_PP_SEQ_ENUM_251(x) x, BOOST_PP_SEQ_ENUM_250
+# define BOOST_PP_SEQ_ENUM_252(x) x, BOOST_PP_SEQ_ENUM_251
+# define BOOST_PP_SEQ_ENUM_253(x) x, BOOST_PP_SEQ_ENUM_252
+# define BOOST_PP_SEQ_ENUM_254(x) x, BOOST_PP_SEQ_ENUM_253
+# define BOOST_PP_SEQ_ENUM_255(x) x, BOOST_PP_SEQ_ENUM_254
+# define BOOST_PP_SEQ_ENUM_256(x) x, BOOST_PP_SEQ_ENUM_255
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/seq/first_n.hpp b/vendor/pdalboost/boost/preprocessor/seq/first_n.hpp
new file mode 100644
index 0000000..c3c0716
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/seq/first_n.hpp
@@ -0,0 +1,30 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_FIRST_N_HPP
+# define BOOST_PREPROCESSOR_SEQ_FIRST_N_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/seq/detail/split.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_SEQ_FIRST_N */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_FIRST_N(n, seq) BOOST_PP_IF(n, BOOST_PP_TUPLE_ELEM, BOOST_PP_TUPLE_EAT_3)(2, 0, BOOST_PP_SEQ_SPLIT(n, seq (nil)))
+# else
+#    define BOOST_PP_SEQ_FIRST_N(n, seq) BOOST_PP_SEQ_FIRST_N_I(n, seq)
+#    define BOOST_PP_SEQ_FIRST_N_I(n, seq) BOOST_PP_IF(n, BOOST_PP_TUPLE_ELEM, BOOST_PP_TUPLE_EAT_3)(2, 0, BOOST_PP_SEQ_SPLIT(n, seq (nil)))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/seq/fold_left.hpp b/vendor/pdalboost/boost/preprocessor/seq/fold_left.hpp
new file mode 100644
index 0000000..ab051b6
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/seq/fold_left.hpp
@@ -0,0 +1,1070 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_FOLD_LEFT_HPP
+# define BOOST_PREPROCESSOR_SEQ_FOLD_LEFT_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/debug/error.hpp>
+# include <boost/preprocessor/detail/auto_rec.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+#
+# /* BOOST_PP_SEQ_FOLD_LEFT */
+#
+# if 0
+#    define BOOST_PP_SEQ_FOLD_LEFT(op, state, seq) ...
+# endif
+#
+# define BOOST_PP_SEQ_FOLD_LEFT BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_LEFT_, BOOST_PP_AUTO_REC(BOOST_PP_SEQ_FOLD_LEFT_P, 256))
+# define BOOST_PP_SEQ_FOLD_LEFT_P(n) BOOST_PP_CAT(BOOST_PP_SEQ_FOLD_LEFT_CHECK_, BOOST_PP_SEQ_FOLD_LEFT_I_ ## n(BOOST_PP_SEQ_FOLD_LEFT_O, BOOST_PP_NIL, (nil), 1))
+# define BOOST_PP_SEQ_FOLD_LEFT_O(s, st, _) st
+#
+# define BOOST_PP_SEQ_FOLD_LEFT_257(op, st, ss) BOOST_PP_ERROR(0x0005)
+# define BOOST_PP_SEQ_FOLD_LEFT_I_257(op, st, ss, sz) BOOST_PP_ERROR(0x0005)
+#
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_NIL 1
+#
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, sz) 0
+# define BOOST_PP_SEQ_FOLD_LEFT_CHECK_BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, sz) 0
+#
+# define BOOST_PP_SEQ_FOLD_LEFT_F(op, st, ss, sz) st
+#
+# define BOOST_PP_SEQ_FOLD_LEFT_1(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_2(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_3(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_4(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_5(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_6(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_7(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_8(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_9(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_10(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_11(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_12(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_13(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_14(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_15(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_16(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_17(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_18(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_19(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_20(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_21(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_22(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_23(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_24(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_25(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_26(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_27(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_28(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_29(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_30(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_31(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_32(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_33(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_34(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_35(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_36(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_37(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_38(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_39(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_40(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_41(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_42(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_43(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_44(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_45(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_46(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_47(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_48(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_49(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_50(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_51(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_52(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_53(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_54(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_55(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_56(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_57(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_58(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_59(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_60(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_61(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_62(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_63(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_64(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_65(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_66(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_67(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_68(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_69(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_70(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_71(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_72(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_73(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_74(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_75(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_76(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_77(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_78(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_79(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_80(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_81(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_82(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_83(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_84(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_85(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_86(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_87(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_88(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_89(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_90(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_91(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_92(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_93(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_94(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_95(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_96(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_97(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_98(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_99(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_100(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_101(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_102(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_103(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_104(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_105(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_106(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_107(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_108(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_109(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_110(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_111(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_112(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_113(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_114(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_115(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_116(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_117(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_118(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_119(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_120(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_121(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_122(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_123(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_124(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_125(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_126(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_127(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_128(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_129(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_130(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_131(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_132(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_133(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_134(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_135(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_136(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_137(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_138(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_139(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_140(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_141(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_142(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_143(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_144(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_145(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_146(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_147(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_148(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_149(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_150(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_151(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_152(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_153(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_154(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_155(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_156(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_157(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_158(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_159(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_160(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_161(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_162(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_163(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_164(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_165(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_166(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_167(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_168(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_169(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_170(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_171(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_172(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_173(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_174(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_175(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_176(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_177(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_178(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_179(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_180(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_181(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_182(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_183(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_184(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_185(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_186(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_187(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_188(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_189(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_190(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_191(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_192(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_193(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_194(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_195(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_196(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_197(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_198(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_199(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_200(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_201(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_202(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_203(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_204(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_205(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_206(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_207(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_208(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_209(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_210(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_211(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_212(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_213(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_214(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_215(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_216(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_217(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_218(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_219(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_220(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_221(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_222(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_223(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_224(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_225(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_226(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_227(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_228(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_229(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_230(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_231(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_232(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_233(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_234(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_235(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_236(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_237(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_238(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_239(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_240(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_241(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_242(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_243(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_244(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_245(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_246(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_247(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_248(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_249(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_250(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_251(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_252(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_253(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_254(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_255(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+# define BOOST_PP_SEQ_FOLD_LEFT_256(op, st, ss) BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, BOOST_PP_SEQ_SIZE(ss))
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_DMC()
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_2, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(2, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_3, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(3, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_4, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(4, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_5, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(5, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_6, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(6, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_7, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(7, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_8, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(8, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_9, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(9, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_10, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(10, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_11, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(11, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_12, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(12, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_13, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(13, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_14, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(14, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_15, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(15, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_16, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(16, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_17, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(17, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_18, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(18, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_19, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(19, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_20, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(20, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_21, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(21, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_22, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(22, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_23, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(23, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_24, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(24, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_25, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(25, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_26, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(26, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_27, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(27, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_28, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(28, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_29, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(29, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_30, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(30, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_31, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(31, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_32, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(32, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_33, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(33, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_34, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(34, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_35, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(35, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_36, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(36, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_37, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(37, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_38, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(38, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_39, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(39, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_40, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(40, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_41, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(41, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_42, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(42, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_43, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(43, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_44, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(44, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_45, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(45, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_46, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(46, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_47, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(47, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_48, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(48, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_49, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(49, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_50, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(50, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_51, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(51, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_52, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(52, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_53, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(53, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_54, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(54, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_55, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(55, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_56, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(56, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_57, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(57, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_58, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(58, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_59, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(59, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_60, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(60, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_61, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(61, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_62, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(62, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_63, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(63, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_64, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(64, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_65, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(65, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_66, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(66, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_67, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(67, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_68, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(68, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_69, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(69, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_70, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(70, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_71, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(71, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_72, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(72, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_73, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(73, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_74, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(74, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_75, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(75, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_76, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(76, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_77, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(77, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_78, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(78, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_79, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(79, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_80, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(80, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_81, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(81, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_82, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(82, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_83, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(83, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_84, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(84, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_85, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(85, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_86, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(86, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_87, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(87, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_88, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(88, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_89, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(89, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_90, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(90, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_91, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(91, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_92, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(92, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_93, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(93, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_94, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(94, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_95, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(95, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_96, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(96, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_97, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(97, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_98, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(98, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_99, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(99, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_100, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(100, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_101, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(101, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_102, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(102, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_103, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(103, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_104, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(104, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_105, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(105, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_106, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(106, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_107, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(107, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_108, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(108, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_109, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(109, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_110, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(110, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_111, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(111, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_112, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(112, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_113, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(113, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_114, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(114, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_115, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(115, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_116, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(116, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_117, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(117, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_118, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(118, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_119, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(119, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_120, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(120, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_121, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(121, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_122, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(122, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_123, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(123, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_124, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(124, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_125, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(125, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_126, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(126, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_127, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(127, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_128, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(128, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_129, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(129, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_130, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(130, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_131, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(131, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_132, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(132, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_133, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(133, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_134, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(134, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_135, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(135, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_136, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(136, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_137, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(137, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_138, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(138, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_139, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(139, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_140, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(140, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_141, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(141, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_142, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(142, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_143, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(143, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_144, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(144, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_145, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(145, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_146, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(146, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_147, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(147, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_148, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(148, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_149, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(149, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_150, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(150, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_151, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(151, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_152, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(152, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_153, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(153, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_154, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(154, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_155, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(155, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_156, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(156, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_157, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(157, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_158, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(158, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_159, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(159, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_160, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(160, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_161, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(161, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_162, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(162, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_163, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(163, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_164, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(164, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_165, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(165, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_166, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(166, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_167, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(167, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_168, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(168, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_169, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(169, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_170, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(170, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_171, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(171, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_172, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(172, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_173, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(173, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_174, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(174, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_175, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(175, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_176, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(176, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_177, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(177, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_178, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(178, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_179, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(179, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_180, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(180, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_181, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(181, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_182, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(182, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_183, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(183, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_184, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(184, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_185, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(185, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_186, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(186, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_187, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(187, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_188, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(188, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_189, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(189, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_190, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(190, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_191, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(191, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_192, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(192, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_193, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(193, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_194, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(194, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_195, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(195, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_196, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(196, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_197, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(197, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_198, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(198, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_199, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(199, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_200, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(200, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_201, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(201, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_202, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(202, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_203, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(203, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_204, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(204, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_205, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(205, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_206, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(206, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_207, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(207, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_208, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(208, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_209, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(209, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_210, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(210, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_211, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(211, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_212, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(212, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_213, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(213, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_214, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(214, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_215, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(215, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_216, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(216, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_217, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(217, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_218, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(218, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_219, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(219, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_220, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(220, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_221, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(221, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_222, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(222, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_223, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(223, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_224, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(224, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_225, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(225, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_226, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(226, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_227, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(227, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_228, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(228, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_229, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(229, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_230, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(230, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_231, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(231, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_232, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(232, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_233, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(233, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_234, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(234, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_235, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(235, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_236, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(236, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_237, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(237, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_238, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(238, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_239, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(239, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_240, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(240, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_241, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(241, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_242, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(242, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_243, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(243, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_244, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(244, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_245, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(245, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_246, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(246, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_247, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(247, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_248, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(248, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_249, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(249, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_250, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(250, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_251, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(251, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_252, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(252, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_253, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(253, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_254, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(254, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_255, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(255, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_256, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(256, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_257, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op(257, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# else
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_1(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_2, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(2, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_2(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_3, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(3, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_3(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_4, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(4, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_4(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_5, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(5, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_5(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_6, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(6, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_6(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_7, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(7, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_7(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_8, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(8, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_8(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_9, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(9, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_9(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_10, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(10, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_10(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_11, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(11, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_11(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_12, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(12, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_12(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_13, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(13, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_13(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_14, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(14, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_14(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_15, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(15, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_15(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_16, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(16, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_16(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_17, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(17, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_17(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_18, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(18, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_18(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_19, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(19, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_19(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_20, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(20, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_20(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_21, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(21, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_21(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_22, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(22, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_22(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_23, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(23, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_23(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_24, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(24, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_24(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_25, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(25, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_25(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_26, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(26, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_26(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_27, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(27, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_27(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_28, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(28, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_28(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_29, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(29, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_29(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_30, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(30, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_30(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_31, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(31, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_31(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_32, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(32, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_32(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_33, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(33, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_33(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_34, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(34, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_34(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_35, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(35, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_35(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_36, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(36, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_36(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_37, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(37, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_37(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_38, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(38, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_38(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_39, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(39, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_39(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_40, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(40, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_40(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_41, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(41, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_41(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_42, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(42, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_42(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_43, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(43, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_43(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_44, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(44, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_44(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_45, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(45, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_45(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_46, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(46, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_46(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_47, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(47, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_47(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_48, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(48, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_48(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_49, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(49, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_49(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_50, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(50, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_50(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_51, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(51, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_51(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_52, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(52, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_52(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_53, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(53, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_53(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_54, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(54, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_54(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_55, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(55, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_55(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_56, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(56, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_56(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_57, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(57, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_57(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_58, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(58, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_58(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_59, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(59, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_59(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_60, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(60, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_60(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_61, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(61, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_61(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_62, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(62, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_62(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_63, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(63, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_63(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_64, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(64, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_64(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_65, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(65, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_65(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_66, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(66, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_66(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_67, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(67, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_67(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_68, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(68, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_68(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_69, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(69, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_69(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_70, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(70, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_70(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_71, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(71, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_71(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_72, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(72, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_72(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_73, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(73, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_73(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_74, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(74, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_74(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_75, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(75, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_75(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_76, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(76, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_76(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_77, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(77, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_77(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_78, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(78, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_78(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_79, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(79, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_79(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_80, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(80, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_80(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_81, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(81, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_81(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_82, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(82, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_82(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_83, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(83, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_83(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_84, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(84, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_84(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_85, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(85, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_85(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_86, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(86, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_86(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_87, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(87, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_87(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_88, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(88, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_88(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_89, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(89, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_89(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_90, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(90, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_90(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_91, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(91, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_91(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_92, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(92, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_92(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_93, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(93, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_93(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_94, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(94, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_94(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_95, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(95, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_95(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_96, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(96, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_96(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_97, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(97, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_97(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_98, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(98, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_98(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_99, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(99, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_99(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_100, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(100, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_100(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_101, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(101, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_101(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_102, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(102, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_102(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_103, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(103, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_103(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_104, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(104, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_104(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_105, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(105, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_105(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_106, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(106, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_106(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_107, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(107, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_107(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_108, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(108, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_108(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_109, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(109, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_109(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_110, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(110, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_110(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_111, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(111, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_111(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_112, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(112, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_112(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_113, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(113, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_113(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_114, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(114, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_114(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_115, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(115, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_115(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_116, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(116, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_116(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_117, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(117, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_117(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_118, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(118, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_118(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_119, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(119, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_119(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_120, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(120, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_120(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_121, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(121, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_121(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_122, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(122, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_122(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_123, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(123, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_123(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_124, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(124, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_124(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_125, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(125, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_125(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_126, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(126, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_126(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_127, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(127, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_127(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_128, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(128, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_128(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_129, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(129, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_129(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_130, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(130, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_130(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_131, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(131, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_131(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_132, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(132, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_132(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_133, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(133, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_133(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_134, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(134, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_134(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_135, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(135, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_135(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_136, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(136, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_136(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_137, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(137, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_137(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_138, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(138, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_138(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_139, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(139, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_139(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_140, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(140, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_140(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_141, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(141, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_141(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_142, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(142, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_142(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_143, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(143, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_143(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_144, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(144, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_144(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_145, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(145, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_145(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_146, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(146, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_146(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_147, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(147, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_147(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_148, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(148, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_148(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_149, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(149, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_149(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_150, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(150, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_150(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_151, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(151, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_151(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_152, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(152, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_152(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_153, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(153, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_153(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_154, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(154, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_154(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_155, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(155, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_155(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_156, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(156, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_156(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_157, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(157, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_157(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_158, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(158, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_158(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_159, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(159, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_159(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_160, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(160, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_160(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_161, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(161, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_161(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_162, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(162, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_162(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_163, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(163, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_163(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_164, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(164, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_164(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_165, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(165, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_165(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_166, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(166, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_166(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_167, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(167, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_167(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_168, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(168, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_168(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_169, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(169, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_169(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_170, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(170, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_170(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_171, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(171, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_171(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_172, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(172, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_172(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_173, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(173, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_173(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_174, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(174, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_174(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_175, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(175, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_175(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_176, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(176, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_176(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_177, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(177, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_177(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_178, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(178, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_178(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_179, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(179, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_179(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_180, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(180, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_180(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_181, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(181, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_181(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_182, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(182, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_182(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_183, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(183, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_183(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_184, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(184, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_184(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_185, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(185, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_185(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_186, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(186, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_186(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_187, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(187, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_187(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_188, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(188, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_188(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_189, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(189, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_189(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_190, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(190, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_190(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_191, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(191, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_191(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_192, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(192, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_192(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_193, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(193, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_193(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_194, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(194, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_194(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_195, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(195, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_195(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_196, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(196, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_196(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_197, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(197, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_197(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_198, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(198, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_198(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_199, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(199, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_199(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_200, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(200, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_200(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_201, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(201, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_201(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_202, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(202, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_202(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_203, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(203, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_203(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_204, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(204, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_204(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_205, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(205, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_205(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_206, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(206, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_206(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_207, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(207, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_207(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_208, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(208, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_208(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_209, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(209, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_209(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_210, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(210, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_210(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_211, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(211, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_211(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_212, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(212, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_212(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_213, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(213, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_213(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_214, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(214, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_214(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_215, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(215, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_215(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_216, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(216, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_216(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_217, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(217, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_217(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_218, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(218, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_218(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_219, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(219, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_219(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_220, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(220, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_220(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_221, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(221, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_221(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_222, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(222, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_222(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_223, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(223, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_223(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_224, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(224, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_224(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_225, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(225, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_225(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_226, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(226, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_226(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_227, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(227, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_227(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_228, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(228, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_228(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_229, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(229, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_229(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_230, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(230, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_230(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_231, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(231, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_231(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_232, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(232, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_232(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_233, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(233, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_233(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_234, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(234, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_234(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_235, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(235, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_235(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_236, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(236, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_236(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_237, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(237, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_237(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_238, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(238, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_238(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_239, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(239, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_239(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_240, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(240, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_240(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_241, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(241, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_241(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_242, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(242, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_242(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_243, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(243, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_243(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_244, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(244, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_244(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_245, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(245, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_245(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_246, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(246, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_246(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_247, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(247, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_247(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_248, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(248, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_248(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_249, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(249, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_249(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_250, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(250, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_250(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_251, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(251, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_251(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_252, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(252, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_252(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_253, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(253, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_253(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_254, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(254, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_254(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_255, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(255, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_255(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_256, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(256, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+#    define BOOST_PP_SEQ_FOLD_LEFT_I_256(op, st, ss, sz) BOOST_PP_IF(BOOST_PP_DEC(sz), BOOST_PP_SEQ_FOLD_LEFT_I_257, BOOST_PP_SEQ_FOLD_LEFT_F)(op, op##(257, st, BOOST_PP_SEQ_HEAD(ss)), BOOST_PP_SEQ_TAIL(ss), BOOST_PP_DEC(sz))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/seq/for_each.hpp b/vendor/pdalboost/boost/preprocessor/seq/for_each.hpp
new file mode 100644
index 0000000..3f9c0d7
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/seq/for_each.hpp
@@ -0,0 +1,107 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_FOR_EACH_HPP
+# define BOOST_PREPROCESSOR_SEQ_FOR_EACH_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/repetition/for.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+# include <boost/preprocessor/seq/detail/is_empty.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_SEQ_FOR_EACH */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_FOR_EACH(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK(macro, data, seq)
+# else
+#    define BOOST_PP_SEQ_FOR_EACH(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_D(macro, data, seq)
+#    define BOOST_PP_SEQ_FOR_EACH_D(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK(macro, data, seq)
+# endif
+#
+#    define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EXEC(macro, data, seq) BOOST_PP_FOR((macro, data, seq, BOOST_PP_SEQ_SIZE(seq)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)
+#    define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EMPTY(macro, data, seq)
+#
+#    define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK(macro, data, seq) \
+		BOOST_PP_IIF \
+			( \
+			BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \
+			BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EXEC, \
+			BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EMPTY \
+			) \
+		(macro, data, seq) \
+/**/
+#
+# define BOOST_PP_SEQ_FOR_EACH_P(r, x) BOOST_PP_TUPLE_ELEM(4, 3, x)
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+#    define BOOST_PP_SEQ_FOR_EACH_O(r, x) BOOST_PP_SEQ_FOR_EACH_O_I x
+# else
+#    define BOOST_PP_SEQ_FOR_EACH_O(r, x) BOOST_PP_SEQ_FOR_EACH_O_I(BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_TUPLE_ELEM(4, 2, x), BOOST_PP_TUPLE_ELEM(4, 3, x))
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_O_I(macro, data, seq, sz) \
+	BOOST_PP_SEQ_FOR_EACH_O_I_DEC(macro, data, seq, BOOST_PP_DEC(sz)) \
+/**/
+# define BOOST_PP_SEQ_FOR_EACH_O_I_DEC(macro, data, seq, sz) \
+	( \
+	macro, \
+	data, \
+	BOOST_PP_IF \
+		( \
+		sz, \
+		BOOST_PP_SEQ_FOR_EACH_O_I_TAIL, \
+		BOOST_PP_SEQ_FOR_EACH_O_I_NIL \
+		) \
+	(seq), \
+	sz \
+	) \
+/**/
+# define BOOST_PP_SEQ_FOR_EACH_O_I_TAIL(seq) BOOST_PP_SEQ_TAIL(seq)
+# define BOOST_PP_SEQ_FOR_EACH_O_I_NIL(seq) BOOST_PP_NIL
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+#    define BOOST_PP_SEQ_FOR_EACH_M(r, x) BOOST_PP_SEQ_FOR_EACH_M_IM(r, BOOST_PP_TUPLE_REM_4 x)
+#    define BOOST_PP_SEQ_FOR_EACH_M_IM(r, im) BOOST_PP_SEQ_FOR_EACH_M_I(r, im)
+# else
+#    define BOOST_PP_SEQ_FOR_EACH_M(r, x) BOOST_PP_SEQ_FOR_EACH_M_I(r, BOOST_PP_TUPLE_ELEM(4, 0, x), BOOST_PP_TUPLE_ELEM(4, 1, x), BOOST_PP_TUPLE_ELEM(4, 2, x), BOOST_PP_TUPLE_ELEM(4, 3, x))
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_M_I(r, macro, data, seq, sz) macro(r, data, BOOST_PP_SEQ_HEAD(seq))
+#
+# /* BOOST_PP_SEQ_FOR_EACH_R */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_FOR_EACH_R(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_R(r, macro, data, seq)
+# else
+#    define BOOST_PP_SEQ_FOR_EACH_R(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_R_I(r, macro, data, seq)
+#    define BOOST_PP_SEQ_FOR_EACH_R_I(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_R(r, macro, data, seq)
+# endif
+#
+#    define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EXEC_R(r, macro, data, seq) BOOST_PP_FOR_ ## r((macro, data, seq, BOOST_PP_SEQ_SIZE(seq)), BOOST_PP_SEQ_FOR_EACH_P, BOOST_PP_SEQ_FOR_EACH_O, BOOST_PP_SEQ_FOR_EACH_M)
+#    define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EMPTY_R(r, macro, data, seq)
+#
+#    define BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_R(r, macro, data, seq) \
+		BOOST_PP_IIF \
+			( \
+			BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \
+			BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EXEC_R, \
+			BOOST_PP_SEQ_FOR_EACH_DETAIL_CHECK_EMPTY_R \
+			) \
+		(r, macro, data, seq) \
+/**/
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/seq/for_each_i.hpp b/vendor/pdalboost/boost/preprocessor/seq/for_each_i.hpp
new file mode 100644
index 0000000..81028d7
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/seq/for_each_i.hpp
@@ -0,0 +1,109 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_FOR_EACH_I_HPP
+# define BOOST_PREPROCESSOR_SEQ_FOR_EACH_I_HPP
+#
+# include <boost/preprocessor/arithmetic/dec.hpp>
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/if.hpp>
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/repetition/for.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+# include <boost/preprocessor/seq/size.hpp>
+# include <boost/preprocessor/seq/detail/is_empty.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_SEQ_FOR_EACH_I */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_FOR_EACH_I(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK(macro, data, seq)
+# else
+#    define BOOST_PP_SEQ_FOR_EACH_I(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_I(macro, data, seq)
+#    define BOOST_PP_SEQ_FOR_EACH_I_I(macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK(macro, data, seq)
+# endif
+#
+#    define BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK_EXEC(macro, data, seq) BOOST_PP_FOR((macro, data, seq, 0, BOOST_PP_SEQ_SIZE(seq)), BOOST_PP_SEQ_FOR_EACH_I_P, BOOST_PP_SEQ_FOR_EACH_I_O, BOOST_PP_SEQ_FOR_EACH_I_M)
+#    define BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK_EMPTY(macro, data, seq)
+#
+#    define BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK(macro, data, seq) \
+		BOOST_PP_IIF \
+			( \
+			BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \
+			BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK_EXEC, \
+			BOOST_PP_SEQ_FOR_EACH_I_DETAIL_CHECK_EMPTY \
+			) \
+		(macro, data, seq) \
+/**/
+#
+# define BOOST_PP_SEQ_FOR_EACH_I_P(r, x) BOOST_PP_TUPLE_ELEM(5, 4, x)
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+#    define BOOST_PP_SEQ_FOR_EACH_I_O(r, x) BOOST_PP_SEQ_FOR_EACH_I_O_I x
+# else
+#    define BOOST_PP_SEQ_FOR_EACH_I_O(r, x) BOOST_PP_SEQ_FOR_EACH_I_O_I(BOOST_PP_TUPLE_ELEM(5, 0, x), BOOST_PP_TUPLE_ELEM(5, 1, x), BOOST_PP_TUPLE_ELEM(5, 2, x), BOOST_PP_TUPLE_ELEM(5, 3, x), BOOST_PP_TUPLE_ELEM(5, 4, x))
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_I_O_I(macro, data, seq, i, sz) \
+	BOOST_PP_SEQ_FOR_EACH_I_O_I_DEC(macro, data, seq, i, BOOST_PP_DEC(sz)) \
+/**/
+# define BOOST_PP_SEQ_FOR_EACH_I_O_I_DEC(macro, data, seq, i, sz) \
+	( \
+	macro, \
+	data, \
+	BOOST_PP_IF \
+		( \
+		sz, \
+		BOOST_PP_SEQ_FOR_EACH_I_O_I_TAIL, \
+		BOOST_PP_SEQ_FOR_EACH_I_O_I_NIL \
+		) \
+	(seq), \
+	BOOST_PP_INC(i), \
+	sz \
+	) \
+/**/
+# define BOOST_PP_SEQ_FOR_EACH_I_O_I_TAIL(seq) BOOST_PP_SEQ_TAIL(seq)
+# define BOOST_PP_SEQ_FOR_EACH_I_O_I_NIL(seq) BOOST_PP_NIL
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+#    define BOOST_PP_SEQ_FOR_EACH_I_M(r, x) BOOST_PP_SEQ_FOR_EACH_I_M_IM(r, BOOST_PP_TUPLE_REM_5 x)
+#    define BOOST_PP_SEQ_FOR_EACH_I_M_IM(r, im) BOOST_PP_SEQ_FOR_EACH_I_M_I(r, im)
+# else
+#    define BOOST_PP_SEQ_FOR_EACH_I_M(r, x) BOOST_PP_SEQ_FOR_EACH_I_M_I(r, BOOST_PP_TUPLE_ELEM(5, 0, x), BOOST_PP_TUPLE_ELEM(5, 1, x), BOOST_PP_TUPLE_ELEM(5, 2, x), BOOST_PP_TUPLE_ELEM(5, 3, x), BOOST_PP_TUPLE_ELEM(5, 4, x))
+# endif
+#
+# define BOOST_PP_SEQ_FOR_EACH_I_M_I(r, macro, data, seq, i, sz) macro(r, data, i, BOOST_PP_SEQ_HEAD(seq))
+#
+# /* BOOST_PP_SEQ_FOR_EACH_I_R */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_FOR_EACH_I_R(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK(r, macro, data, seq)
+# else
+#    define BOOST_PP_SEQ_FOR_EACH_I_R(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_R_I(r, macro, data, seq)
+#    define BOOST_PP_SEQ_FOR_EACH_I_R_I(r, macro, data, seq) BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK(r, macro, data, seq)
+# endif
+#
+#    define BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK_EXEC(r, macro, data, seq) BOOST_PP_FOR_ ## r((macro, data, seq, 0, BOOST_PP_SEQ_SIZE(seq)), BOOST_PP_SEQ_FOR_EACH_I_P, BOOST_PP_SEQ_FOR_EACH_I_O, BOOST_PP_SEQ_FOR_EACH_I_M)
+#    define BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK_EMPTY(r, macro, data, seq)
+#
+#    define BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK(r, macro, data, seq) \
+		BOOST_PP_IIF \
+			( \
+			BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY(seq), \
+			BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK_EXEC, \
+			BOOST_PP_SEQ_FOR_EACH_I_R_DETAIL_CHECK_EMPTY \
+			) \
+		(r, macro, data, seq) \
+/**/
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/seq/rest_n.hpp b/vendor/pdalboost/boost/preprocessor/seq/rest_n.hpp
new file mode 100644
index 0000000..4aefba4
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/seq/rest_n.hpp
@@ -0,0 +1,46 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_REST_N_HPP
+# define BOOST_PREPROCESSOR_SEQ_REST_N_HPP
+#
+# include <boost/preprocessor/arithmetic/inc.hpp>
+# include <boost/preprocessor/comparison/not_equal.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/control/expr_iif.hpp>
+# include <boost/preprocessor/facilities/identity.hpp>
+# include <boost/preprocessor/logical/bitand.hpp>
+# include <boost/preprocessor/seq/detail/is_empty.hpp>
+# include <boost/preprocessor/seq/detail/split.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+#
+# /* BOOST_PP_SEQ_REST_N */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_REST_N(n, seq) BOOST_PP_SEQ_REST_N_DETAIL_EXEC(n, seq, BOOST_PP_SEQ_DETAIL_EMPTY_SIZE(seq))
+# else
+#    define BOOST_PP_SEQ_REST_N(n, seq) BOOST_PP_SEQ_REST_N_I(n, seq)
+#    define BOOST_PP_SEQ_REST_N_I(n, seq) BOOST_PP_SEQ_REST_N_DETAIL_EXEC(n, seq, BOOST_PP_SEQ_DETAIL_EMPTY_SIZE(seq))
+# endif
+#
+#    define BOOST_PP_SEQ_REST_N_DETAIL_EXEC(n, seq, size) \
+		BOOST_PP_EXPR_IIF \
+			( \
+			BOOST_PP_BITAND \
+				( \
+				BOOST_PP_SEQ_DETAIL_IS_NOT_EMPTY_SIZE(size), \
+				BOOST_PP_NOT_EQUAL(n,size) \
+				), \
+			BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_SEQ_SPLIT(BOOST_PP_INC(n), BOOST_PP_IDENTITY( (nil) seq )))() \
+			) \
+/**/
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/seq/seq.hpp b/vendor/pdalboost/boost/preprocessor/seq/seq.hpp
new file mode 100644
index 0000000..f5ca84c
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/seq/seq.hpp
@@ -0,0 +1,44 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_SEQ_HPP
+# define BOOST_PREPROCESSOR_SEQ_SEQ_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/elem.hpp>
+#
+# /* BOOST_PP_SEQ_HEAD */
+#
+# define BOOST_PP_SEQ_HEAD(seq) BOOST_PP_SEQ_ELEM(0, seq)
+#
+# /* BOOST_PP_SEQ_TAIL */
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_1((seq))
+#    define BOOST_PP_SEQ_TAIL_1(par) BOOST_PP_SEQ_TAIL_2 ## par
+#    define BOOST_PP_SEQ_TAIL_2(seq) BOOST_PP_SEQ_TAIL_I ## seq
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#    define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_ID(BOOST_PP_SEQ_TAIL_I seq)
+#    define BOOST_PP_SEQ_TAIL_ID(id) id
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_D(seq)
+#    define BOOST_PP_SEQ_TAIL_D(seq) BOOST_PP_SEQ_TAIL_I seq
+# else
+#    define BOOST_PP_SEQ_TAIL(seq) BOOST_PP_SEQ_TAIL_I seq
+# endif
+#
+# define BOOST_PP_SEQ_TAIL_I(x)
+#
+# /* BOOST_PP_SEQ_NIL */
+#
+# define BOOST_PP_SEQ_NIL(x) (x)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/seq/size.hpp b/vendor/pdalboost/boost/preprocessor/seq/size.hpp
new file mode 100644
index 0000000..b5c8d9d
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/seq/size.hpp
@@ -0,0 +1,548 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_SIZE_HPP
+# define BOOST_PREPROCESSOR_SEQ_SIZE_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_SEQ_SIZE_I((seq))
+#    define BOOST_PP_SEQ_SIZE_I(par) BOOST_PP_SEQ_SIZE_II ## par
+#    define BOOST_PP_SEQ_SIZE_II(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 ## seq)
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() || BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#    define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_SEQ_SIZE_I(seq)
+#    define BOOST_PP_SEQ_SIZE_I(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq)
+# elif defined(__IBMC__) || defined(__IBMCPP__)
+#    define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_0, seq))
+# else
+#    define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq)
+# endif
+#
+# define BOOST_PP_SEQ_SIZE_0(_) BOOST_PP_SEQ_SIZE_1
+# define BOOST_PP_SEQ_SIZE_1(_) BOOST_PP_SEQ_SIZE_2
+# define BOOST_PP_SEQ_SIZE_2(_) BOOST_PP_SEQ_SIZE_3
+# define BOOST_PP_SEQ_SIZE_3(_) BOOST_PP_SEQ_SIZE_4
+# define BOOST_PP_SEQ_SIZE_4(_) BOOST_PP_SEQ_SIZE_5
+# define BOOST_PP_SEQ_SIZE_5(_) BOOST_PP_SEQ_SIZE_6
+# define BOOST_PP_SEQ_SIZE_6(_) BOOST_PP_SEQ_SIZE_7
+# define BOOST_PP_SEQ_SIZE_7(_) BOOST_PP_SEQ_SIZE_8
+# define BOOST_PP_SEQ_SIZE_8(_) BOOST_PP_SEQ_SIZE_9
+# define BOOST_PP_SEQ_SIZE_9(_) BOOST_PP_SEQ_SIZE_10
+# define BOOST_PP_SEQ_SIZE_10(_) BOOST_PP_SEQ_SIZE_11
+# define BOOST_PP_SEQ_SIZE_11(_) BOOST_PP_SEQ_SIZE_12
+# define BOOST_PP_SEQ_SIZE_12(_) BOOST_PP_SEQ_SIZE_13
+# define BOOST_PP_SEQ_SIZE_13(_) BOOST_PP_SEQ_SIZE_14
+# define BOOST_PP_SEQ_SIZE_14(_) BOOST_PP_SEQ_SIZE_15
+# define BOOST_PP_SEQ_SIZE_15(_) BOOST_PP_SEQ_SIZE_16
+# define BOOST_PP_SEQ_SIZE_16(_) BOOST_PP_SEQ_SIZE_17
+# define BOOST_PP_SEQ_SIZE_17(_) BOOST_PP_SEQ_SIZE_18
+# define BOOST_PP_SEQ_SIZE_18(_) BOOST_PP_SEQ_SIZE_19
+# define BOOST_PP_SEQ_SIZE_19(_) BOOST_PP_SEQ_SIZE_20
+# define BOOST_PP_SEQ_SIZE_20(_) BOOST_PP_SEQ_SIZE_21
+# define BOOST_PP_SEQ_SIZE_21(_) BOOST_PP_SEQ_SIZE_22
+# define BOOST_PP_SEQ_SIZE_22(_) BOOST_PP_SEQ_SIZE_23
+# define BOOST_PP_SEQ_SIZE_23(_) BOOST_PP_SEQ_SIZE_24
+# define BOOST_PP_SEQ_SIZE_24(_) BOOST_PP_SEQ_SIZE_25
+# define BOOST_PP_SEQ_SIZE_25(_) BOOST_PP_SEQ_SIZE_26
+# define BOOST_PP_SEQ_SIZE_26(_) BOOST_PP_SEQ_SIZE_27
+# define BOOST_PP_SEQ_SIZE_27(_) BOOST_PP_SEQ_SIZE_28
+# define BOOST_PP_SEQ_SIZE_28(_) BOOST_PP_SEQ_SIZE_29
+# define BOOST_PP_SEQ_SIZE_29(_) BOOST_PP_SEQ_SIZE_30
+# define BOOST_PP_SEQ_SIZE_30(_) BOOST_PP_SEQ_SIZE_31
+# define BOOST_PP_SEQ_SIZE_31(_) BOOST_PP_SEQ_SIZE_32
+# define BOOST_PP_SEQ_SIZE_32(_) BOOST_PP_SEQ_SIZE_33
+# define BOOST_PP_SEQ_SIZE_33(_) BOOST_PP_SEQ_SIZE_34
+# define BOOST_PP_SEQ_SIZE_34(_) BOOST_PP_SEQ_SIZE_35
+# define BOOST_PP_SEQ_SIZE_35(_) BOOST_PP_SEQ_SIZE_36
+# define BOOST_PP_SEQ_SIZE_36(_) BOOST_PP_SEQ_SIZE_37
+# define BOOST_PP_SEQ_SIZE_37(_) BOOST_PP_SEQ_SIZE_38
+# define BOOST_PP_SEQ_SIZE_38(_) BOOST_PP_SEQ_SIZE_39
+# define BOOST_PP_SEQ_SIZE_39(_) BOOST_PP_SEQ_SIZE_40
+# define BOOST_PP_SEQ_SIZE_40(_) BOOST_PP_SEQ_SIZE_41
+# define BOOST_PP_SEQ_SIZE_41(_) BOOST_PP_SEQ_SIZE_42
+# define BOOST_PP_SEQ_SIZE_42(_) BOOST_PP_SEQ_SIZE_43
+# define BOOST_PP_SEQ_SIZE_43(_) BOOST_PP_SEQ_SIZE_44
+# define BOOST_PP_SEQ_SIZE_44(_) BOOST_PP_SEQ_SIZE_45
+# define BOOST_PP_SEQ_SIZE_45(_) BOOST_PP_SEQ_SIZE_46
+# define BOOST_PP_SEQ_SIZE_46(_) BOOST_PP_SEQ_SIZE_47
+# define BOOST_PP_SEQ_SIZE_47(_) BOOST_PP_SEQ_SIZE_48
+# define BOOST_PP_SEQ_SIZE_48(_) BOOST_PP_SEQ_SIZE_49
+# define BOOST_PP_SEQ_SIZE_49(_) BOOST_PP_SEQ_SIZE_50
+# define BOOST_PP_SEQ_SIZE_50(_) BOOST_PP_SEQ_SIZE_51
+# define BOOST_PP_SEQ_SIZE_51(_) BOOST_PP_SEQ_SIZE_52
+# define BOOST_PP_SEQ_SIZE_52(_) BOOST_PP_SEQ_SIZE_53
+# define BOOST_PP_SEQ_SIZE_53(_) BOOST_PP_SEQ_SIZE_54
+# define BOOST_PP_SEQ_SIZE_54(_) BOOST_PP_SEQ_SIZE_55
+# define BOOST_PP_SEQ_SIZE_55(_) BOOST_PP_SEQ_SIZE_56
+# define BOOST_PP_SEQ_SIZE_56(_) BOOST_PP_SEQ_SIZE_57
+# define BOOST_PP_SEQ_SIZE_57(_) BOOST_PP_SEQ_SIZE_58
+# define BOOST_PP_SEQ_SIZE_58(_) BOOST_PP_SEQ_SIZE_59
+# define BOOST_PP_SEQ_SIZE_59(_) BOOST_PP_SEQ_SIZE_60
+# define BOOST_PP_SEQ_SIZE_60(_) BOOST_PP_SEQ_SIZE_61
+# define BOOST_PP_SEQ_SIZE_61(_) BOOST_PP_SEQ_SIZE_62
+# define BOOST_PP_SEQ_SIZE_62(_) BOOST_PP_SEQ_SIZE_63
+# define BOOST_PP_SEQ_SIZE_63(_) BOOST_PP_SEQ_SIZE_64
+# define BOOST_PP_SEQ_SIZE_64(_) BOOST_PP_SEQ_SIZE_65
+# define BOOST_PP_SEQ_SIZE_65(_) BOOST_PP_SEQ_SIZE_66
+# define BOOST_PP_SEQ_SIZE_66(_) BOOST_PP_SEQ_SIZE_67
+# define BOOST_PP_SEQ_SIZE_67(_) BOOST_PP_SEQ_SIZE_68
+# define BOOST_PP_SEQ_SIZE_68(_) BOOST_PP_SEQ_SIZE_69
+# define BOOST_PP_SEQ_SIZE_69(_) BOOST_PP_SEQ_SIZE_70
+# define BOOST_PP_SEQ_SIZE_70(_) BOOST_PP_SEQ_SIZE_71
+# define BOOST_PP_SEQ_SIZE_71(_) BOOST_PP_SEQ_SIZE_72
+# define BOOST_PP_SEQ_SIZE_72(_) BOOST_PP_SEQ_SIZE_73
+# define BOOST_PP_SEQ_SIZE_73(_) BOOST_PP_SEQ_SIZE_74
+# define BOOST_PP_SEQ_SIZE_74(_) BOOST_PP_SEQ_SIZE_75
+# define BOOST_PP_SEQ_SIZE_75(_) BOOST_PP_SEQ_SIZE_76
+# define BOOST_PP_SEQ_SIZE_76(_) BOOST_PP_SEQ_SIZE_77
+# define BOOST_PP_SEQ_SIZE_77(_) BOOST_PP_SEQ_SIZE_78
+# define BOOST_PP_SEQ_SIZE_78(_) BOOST_PP_SEQ_SIZE_79
+# define BOOST_PP_SEQ_SIZE_79(_) BOOST_PP_SEQ_SIZE_80
+# define BOOST_PP_SEQ_SIZE_80(_) BOOST_PP_SEQ_SIZE_81
+# define BOOST_PP_SEQ_SIZE_81(_) BOOST_PP_SEQ_SIZE_82
+# define BOOST_PP_SEQ_SIZE_82(_) BOOST_PP_SEQ_SIZE_83
+# define BOOST_PP_SEQ_SIZE_83(_) BOOST_PP_SEQ_SIZE_84
+# define BOOST_PP_SEQ_SIZE_84(_) BOOST_PP_SEQ_SIZE_85
+# define BOOST_PP_SEQ_SIZE_85(_) BOOST_PP_SEQ_SIZE_86
+# define BOOST_PP_SEQ_SIZE_86(_) BOOST_PP_SEQ_SIZE_87
+# define BOOST_PP_SEQ_SIZE_87(_) BOOST_PP_SEQ_SIZE_88
+# define BOOST_PP_SEQ_SIZE_88(_) BOOST_PP_SEQ_SIZE_89
+# define BOOST_PP_SEQ_SIZE_89(_) BOOST_PP_SEQ_SIZE_90
+# define BOOST_PP_SEQ_SIZE_90(_) BOOST_PP_SEQ_SIZE_91
+# define BOOST_PP_SEQ_SIZE_91(_) BOOST_PP_SEQ_SIZE_92
+# define BOOST_PP_SEQ_SIZE_92(_) BOOST_PP_SEQ_SIZE_93
+# define BOOST_PP_SEQ_SIZE_93(_) BOOST_PP_SEQ_SIZE_94
+# define BOOST_PP_SEQ_SIZE_94(_) BOOST_PP_SEQ_SIZE_95
+# define BOOST_PP_SEQ_SIZE_95(_) BOOST_PP_SEQ_SIZE_96
+# define BOOST_PP_SEQ_SIZE_96(_) BOOST_PP_SEQ_SIZE_97
+# define BOOST_PP_SEQ_SIZE_97(_) BOOST_PP_SEQ_SIZE_98
+# define BOOST_PP_SEQ_SIZE_98(_) BOOST_PP_SEQ_SIZE_99
+# define BOOST_PP_SEQ_SIZE_99(_) BOOST_PP_SEQ_SIZE_100
+# define BOOST_PP_SEQ_SIZE_100(_) BOOST_PP_SEQ_SIZE_101
+# define BOOST_PP_SEQ_SIZE_101(_) BOOST_PP_SEQ_SIZE_102
+# define BOOST_PP_SEQ_SIZE_102(_) BOOST_PP_SEQ_SIZE_103
+# define BOOST_PP_SEQ_SIZE_103(_) BOOST_PP_SEQ_SIZE_104
+# define BOOST_PP_SEQ_SIZE_104(_) BOOST_PP_SEQ_SIZE_105
+# define BOOST_PP_SEQ_SIZE_105(_) BOOST_PP_SEQ_SIZE_106
+# define BOOST_PP_SEQ_SIZE_106(_) BOOST_PP_SEQ_SIZE_107
+# define BOOST_PP_SEQ_SIZE_107(_) BOOST_PP_SEQ_SIZE_108
+# define BOOST_PP_SEQ_SIZE_108(_) BOOST_PP_SEQ_SIZE_109
+# define BOOST_PP_SEQ_SIZE_109(_) BOOST_PP_SEQ_SIZE_110
+# define BOOST_PP_SEQ_SIZE_110(_) BOOST_PP_SEQ_SIZE_111
+# define BOOST_PP_SEQ_SIZE_111(_) BOOST_PP_SEQ_SIZE_112
+# define BOOST_PP_SEQ_SIZE_112(_) BOOST_PP_SEQ_SIZE_113
+# define BOOST_PP_SEQ_SIZE_113(_) BOOST_PP_SEQ_SIZE_114
+# define BOOST_PP_SEQ_SIZE_114(_) BOOST_PP_SEQ_SIZE_115
+# define BOOST_PP_SEQ_SIZE_115(_) BOOST_PP_SEQ_SIZE_116
+# define BOOST_PP_SEQ_SIZE_116(_) BOOST_PP_SEQ_SIZE_117
+# define BOOST_PP_SEQ_SIZE_117(_) BOOST_PP_SEQ_SIZE_118
+# define BOOST_PP_SEQ_SIZE_118(_) BOOST_PP_SEQ_SIZE_119
+# define BOOST_PP_SEQ_SIZE_119(_) BOOST_PP_SEQ_SIZE_120
+# define BOOST_PP_SEQ_SIZE_120(_) BOOST_PP_SEQ_SIZE_121
+# define BOOST_PP_SEQ_SIZE_121(_) BOOST_PP_SEQ_SIZE_122
+# define BOOST_PP_SEQ_SIZE_122(_) BOOST_PP_SEQ_SIZE_123
+# define BOOST_PP_SEQ_SIZE_123(_) BOOST_PP_SEQ_SIZE_124
+# define BOOST_PP_SEQ_SIZE_124(_) BOOST_PP_SEQ_SIZE_125
+# define BOOST_PP_SEQ_SIZE_125(_) BOOST_PP_SEQ_SIZE_126
+# define BOOST_PP_SEQ_SIZE_126(_) BOOST_PP_SEQ_SIZE_127
+# define BOOST_PP_SEQ_SIZE_127(_) BOOST_PP_SEQ_SIZE_128
+# define BOOST_PP_SEQ_SIZE_128(_) BOOST_PP_SEQ_SIZE_129
+# define BOOST_PP_SEQ_SIZE_129(_) BOOST_PP_SEQ_SIZE_130
+# define BOOST_PP_SEQ_SIZE_130(_) BOOST_PP_SEQ_SIZE_131
+# define BOOST_PP_SEQ_SIZE_131(_) BOOST_PP_SEQ_SIZE_132
+# define BOOST_PP_SEQ_SIZE_132(_) BOOST_PP_SEQ_SIZE_133
+# define BOOST_PP_SEQ_SIZE_133(_) BOOST_PP_SEQ_SIZE_134
+# define BOOST_PP_SEQ_SIZE_134(_) BOOST_PP_SEQ_SIZE_135
+# define BOOST_PP_SEQ_SIZE_135(_) BOOST_PP_SEQ_SIZE_136
+# define BOOST_PP_SEQ_SIZE_136(_) BOOST_PP_SEQ_SIZE_137
+# define BOOST_PP_SEQ_SIZE_137(_) BOOST_PP_SEQ_SIZE_138
+# define BOOST_PP_SEQ_SIZE_138(_) BOOST_PP_SEQ_SIZE_139
+# define BOOST_PP_SEQ_SIZE_139(_) BOOST_PP_SEQ_SIZE_140
+# define BOOST_PP_SEQ_SIZE_140(_) BOOST_PP_SEQ_SIZE_141
+# define BOOST_PP_SEQ_SIZE_141(_) BOOST_PP_SEQ_SIZE_142
+# define BOOST_PP_SEQ_SIZE_142(_) BOOST_PP_SEQ_SIZE_143
+# define BOOST_PP_SEQ_SIZE_143(_) BOOST_PP_SEQ_SIZE_144
+# define BOOST_PP_SEQ_SIZE_144(_) BOOST_PP_SEQ_SIZE_145
+# define BOOST_PP_SEQ_SIZE_145(_) BOOST_PP_SEQ_SIZE_146
+# define BOOST_PP_SEQ_SIZE_146(_) BOOST_PP_SEQ_SIZE_147
+# define BOOST_PP_SEQ_SIZE_147(_) BOOST_PP_SEQ_SIZE_148
+# define BOOST_PP_SEQ_SIZE_148(_) BOOST_PP_SEQ_SIZE_149
+# define BOOST_PP_SEQ_SIZE_149(_) BOOST_PP_SEQ_SIZE_150
+# define BOOST_PP_SEQ_SIZE_150(_) BOOST_PP_SEQ_SIZE_151
+# define BOOST_PP_SEQ_SIZE_151(_) BOOST_PP_SEQ_SIZE_152
+# define BOOST_PP_SEQ_SIZE_152(_) BOOST_PP_SEQ_SIZE_153
+# define BOOST_PP_SEQ_SIZE_153(_) BOOST_PP_SEQ_SIZE_154
+# define BOOST_PP_SEQ_SIZE_154(_) BOOST_PP_SEQ_SIZE_155
+# define BOOST_PP_SEQ_SIZE_155(_) BOOST_PP_SEQ_SIZE_156
+# define BOOST_PP_SEQ_SIZE_156(_) BOOST_PP_SEQ_SIZE_157
+# define BOOST_PP_SEQ_SIZE_157(_) BOOST_PP_SEQ_SIZE_158
+# define BOOST_PP_SEQ_SIZE_158(_) BOOST_PP_SEQ_SIZE_159
+# define BOOST_PP_SEQ_SIZE_159(_) BOOST_PP_SEQ_SIZE_160
+# define BOOST_PP_SEQ_SIZE_160(_) BOOST_PP_SEQ_SIZE_161
+# define BOOST_PP_SEQ_SIZE_161(_) BOOST_PP_SEQ_SIZE_162
+# define BOOST_PP_SEQ_SIZE_162(_) BOOST_PP_SEQ_SIZE_163
+# define BOOST_PP_SEQ_SIZE_163(_) BOOST_PP_SEQ_SIZE_164
+# define BOOST_PP_SEQ_SIZE_164(_) BOOST_PP_SEQ_SIZE_165
+# define BOOST_PP_SEQ_SIZE_165(_) BOOST_PP_SEQ_SIZE_166
+# define BOOST_PP_SEQ_SIZE_166(_) BOOST_PP_SEQ_SIZE_167
+# define BOOST_PP_SEQ_SIZE_167(_) BOOST_PP_SEQ_SIZE_168
+# define BOOST_PP_SEQ_SIZE_168(_) BOOST_PP_SEQ_SIZE_169
+# define BOOST_PP_SEQ_SIZE_169(_) BOOST_PP_SEQ_SIZE_170
+# define BOOST_PP_SEQ_SIZE_170(_) BOOST_PP_SEQ_SIZE_171
+# define BOOST_PP_SEQ_SIZE_171(_) BOOST_PP_SEQ_SIZE_172
+# define BOOST_PP_SEQ_SIZE_172(_) BOOST_PP_SEQ_SIZE_173
+# define BOOST_PP_SEQ_SIZE_173(_) BOOST_PP_SEQ_SIZE_174
+# define BOOST_PP_SEQ_SIZE_174(_) BOOST_PP_SEQ_SIZE_175
+# define BOOST_PP_SEQ_SIZE_175(_) BOOST_PP_SEQ_SIZE_176
+# define BOOST_PP_SEQ_SIZE_176(_) BOOST_PP_SEQ_SIZE_177
+# define BOOST_PP_SEQ_SIZE_177(_) BOOST_PP_SEQ_SIZE_178
+# define BOOST_PP_SEQ_SIZE_178(_) BOOST_PP_SEQ_SIZE_179
+# define BOOST_PP_SEQ_SIZE_179(_) BOOST_PP_SEQ_SIZE_180
+# define BOOST_PP_SEQ_SIZE_180(_) BOOST_PP_SEQ_SIZE_181
+# define BOOST_PP_SEQ_SIZE_181(_) BOOST_PP_SEQ_SIZE_182
+# define BOOST_PP_SEQ_SIZE_182(_) BOOST_PP_SEQ_SIZE_183
+# define BOOST_PP_SEQ_SIZE_183(_) BOOST_PP_SEQ_SIZE_184
+# define BOOST_PP_SEQ_SIZE_184(_) BOOST_PP_SEQ_SIZE_185
+# define BOOST_PP_SEQ_SIZE_185(_) BOOST_PP_SEQ_SIZE_186
+# define BOOST_PP_SEQ_SIZE_186(_) BOOST_PP_SEQ_SIZE_187
+# define BOOST_PP_SEQ_SIZE_187(_) BOOST_PP_SEQ_SIZE_188
+# define BOOST_PP_SEQ_SIZE_188(_) BOOST_PP_SEQ_SIZE_189
+# define BOOST_PP_SEQ_SIZE_189(_) BOOST_PP_SEQ_SIZE_190
+# define BOOST_PP_SEQ_SIZE_190(_) BOOST_PP_SEQ_SIZE_191
+# define BOOST_PP_SEQ_SIZE_191(_) BOOST_PP_SEQ_SIZE_192
+# define BOOST_PP_SEQ_SIZE_192(_) BOOST_PP_SEQ_SIZE_193
+# define BOOST_PP_SEQ_SIZE_193(_) BOOST_PP_SEQ_SIZE_194
+# define BOOST_PP_SEQ_SIZE_194(_) BOOST_PP_SEQ_SIZE_195
+# define BOOST_PP_SEQ_SIZE_195(_) BOOST_PP_SEQ_SIZE_196
+# define BOOST_PP_SEQ_SIZE_196(_) BOOST_PP_SEQ_SIZE_197
+# define BOOST_PP_SEQ_SIZE_197(_) BOOST_PP_SEQ_SIZE_198
+# define BOOST_PP_SEQ_SIZE_198(_) BOOST_PP_SEQ_SIZE_199
+# define BOOST_PP_SEQ_SIZE_199(_) BOOST_PP_SEQ_SIZE_200
+# define BOOST_PP_SEQ_SIZE_200(_) BOOST_PP_SEQ_SIZE_201
+# define BOOST_PP_SEQ_SIZE_201(_) BOOST_PP_SEQ_SIZE_202
+# define BOOST_PP_SEQ_SIZE_202(_) BOOST_PP_SEQ_SIZE_203
+# define BOOST_PP_SEQ_SIZE_203(_) BOOST_PP_SEQ_SIZE_204
+# define BOOST_PP_SEQ_SIZE_204(_) BOOST_PP_SEQ_SIZE_205
+# define BOOST_PP_SEQ_SIZE_205(_) BOOST_PP_SEQ_SIZE_206
+# define BOOST_PP_SEQ_SIZE_206(_) BOOST_PP_SEQ_SIZE_207
+# define BOOST_PP_SEQ_SIZE_207(_) BOOST_PP_SEQ_SIZE_208
+# define BOOST_PP_SEQ_SIZE_208(_) BOOST_PP_SEQ_SIZE_209
+# define BOOST_PP_SEQ_SIZE_209(_) BOOST_PP_SEQ_SIZE_210
+# define BOOST_PP_SEQ_SIZE_210(_) BOOST_PP_SEQ_SIZE_211
+# define BOOST_PP_SEQ_SIZE_211(_) BOOST_PP_SEQ_SIZE_212
+# define BOOST_PP_SEQ_SIZE_212(_) BOOST_PP_SEQ_SIZE_213
+# define BOOST_PP_SEQ_SIZE_213(_) BOOST_PP_SEQ_SIZE_214
+# define BOOST_PP_SEQ_SIZE_214(_) BOOST_PP_SEQ_SIZE_215
+# define BOOST_PP_SEQ_SIZE_215(_) BOOST_PP_SEQ_SIZE_216
+# define BOOST_PP_SEQ_SIZE_216(_) BOOST_PP_SEQ_SIZE_217
+# define BOOST_PP_SEQ_SIZE_217(_) BOOST_PP_SEQ_SIZE_218
+# define BOOST_PP_SEQ_SIZE_218(_) BOOST_PP_SEQ_SIZE_219
+# define BOOST_PP_SEQ_SIZE_219(_) BOOST_PP_SEQ_SIZE_220
+# define BOOST_PP_SEQ_SIZE_220(_) BOOST_PP_SEQ_SIZE_221
+# define BOOST_PP_SEQ_SIZE_221(_) BOOST_PP_SEQ_SIZE_222
+# define BOOST_PP_SEQ_SIZE_222(_) BOOST_PP_SEQ_SIZE_223
+# define BOOST_PP_SEQ_SIZE_223(_) BOOST_PP_SEQ_SIZE_224
+# define BOOST_PP_SEQ_SIZE_224(_) BOOST_PP_SEQ_SIZE_225
+# define BOOST_PP_SEQ_SIZE_225(_) BOOST_PP_SEQ_SIZE_226
+# define BOOST_PP_SEQ_SIZE_226(_) BOOST_PP_SEQ_SIZE_227
+# define BOOST_PP_SEQ_SIZE_227(_) BOOST_PP_SEQ_SIZE_228
+# define BOOST_PP_SEQ_SIZE_228(_) BOOST_PP_SEQ_SIZE_229
+# define BOOST_PP_SEQ_SIZE_229(_) BOOST_PP_SEQ_SIZE_230
+# define BOOST_PP_SEQ_SIZE_230(_) BOOST_PP_SEQ_SIZE_231
+# define BOOST_PP_SEQ_SIZE_231(_) BOOST_PP_SEQ_SIZE_232
+# define BOOST_PP_SEQ_SIZE_232(_) BOOST_PP_SEQ_SIZE_233
+# define BOOST_PP_SEQ_SIZE_233(_) BOOST_PP_SEQ_SIZE_234
+# define BOOST_PP_SEQ_SIZE_234(_) BOOST_PP_SEQ_SIZE_235
+# define BOOST_PP_SEQ_SIZE_235(_) BOOST_PP_SEQ_SIZE_236
+# define BOOST_PP_SEQ_SIZE_236(_) BOOST_PP_SEQ_SIZE_237
+# define BOOST_PP_SEQ_SIZE_237(_) BOOST_PP_SEQ_SIZE_238
+# define BOOST_PP_SEQ_SIZE_238(_) BOOST_PP_SEQ_SIZE_239
+# define BOOST_PP_SEQ_SIZE_239(_) BOOST_PP_SEQ_SIZE_240
+# define BOOST_PP_SEQ_SIZE_240(_) BOOST_PP_SEQ_SIZE_241
+# define BOOST_PP_SEQ_SIZE_241(_) BOOST_PP_SEQ_SIZE_242
+# define BOOST_PP_SEQ_SIZE_242(_) BOOST_PP_SEQ_SIZE_243
+# define BOOST_PP_SEQ_SIZE_243(_) BOOST_PP_SEQ_SIZE_244
+# define BOOST_PP_SEQ_SIZE_244(_) BOOST_PP_SEQ_SIZE_245
+# define BOOST_PP_SEQ_SIZE_245(_) BOOST_PP_SEQ_SIZE_246
+# define BOOST_PP_SEQ_SIZE_246(_) BOOST_PP_SEQ_SIZE_247
+# define BOOST_PP_SEQ_SIZE_247(_) BOOST_PP_SEQ_SIZE_248
+# define BOOST_PP_SEQ_SIZE_248(_) BOOST_PP_SEQ_SIZE_249
+# define BOOST_PP_SEQ_SIZE_249(_) BOOST_PP_SEQ_SIZE_250
+# define BOOST_PP_SEQ_SIZE_250(_) BOOST_PP_SEQ_SIZE_251
+# define BOOST_PP_SEQ_SIZE_251(_) BOOST_PP_SEQ_SIZE_252
+# define BOOST_PP_SEQ_SIZE_252(_) BOOST_PP_SEQ_SIZE_253
+# define BOOST_PP_SEQ_SIZE_253(_) BOOST_PP_SEQ_SIZE_254
+# define BOOST_PP_SEQ_SIZE_254(_) BOOST_PP_SEQ_SIZE_255
+# define BOOST_PP_SEQ_SIZE_255(_) BOOST_PP_SEQ_SIZE_256
+# define BOOST_PP_SEQ_SIZE_256(_) BOOST_PP_SEQ_SIZE_257
+#
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_0 0
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_1 1
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_2 2
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_3 3
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4 4
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_5 5
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_6 6
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_7 7
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_8 8
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_9 9
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_10 10
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_11 11
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_12 12
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_13 13
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_14 14
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_15 15
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_16 16
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_17 17
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_18 18
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_19 19
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_20 20
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_21 21
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_22 22
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_23 23
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_24 24
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_25 25
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_26 26
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_27 27
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_28 28
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_29 29
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_30 30
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_31 31
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_32 32
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_33 33
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_34 34
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_35 35
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_36 36
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_37 37
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_38 38
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_39 39
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_40 40
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_41 41
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_42 42
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_43 43
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_44 44
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_45 45
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_46 46
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_47 47
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_48 48
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_49 49
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_50 50
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_51 51
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_52 52
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_53 53
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_54 54
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_55 55
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_56 56
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_57 57
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_58 58
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_59 59
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_60 60
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_61 61
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_62 62
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_63 63
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_64 64
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_65 65
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_66 66
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_67 67
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_68 68
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_69 69
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_70 70
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_71 71
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_72 72
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_73 73
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_74 74
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_75 75
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_76 76
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_77 77
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_78 78
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_79 79
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_80 80
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_81 81
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_82 82
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_83 83
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_84 84
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_85 85
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_86 86
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_87 87
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_88 88
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_89 89
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_90 90
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_91 91
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_92 92
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_93 93
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_94 94
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_95 95
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_96 96
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_97 97
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_98 98
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_99 99
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_100 100
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_101 101
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_102 102
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_103 103
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_104 104
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_105 105
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_106 106
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_107 107
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_108 108
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_109 109
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_110 110
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_111 111
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_112 112
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_113 113
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_114 114
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_115 115
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_116 116
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_117 117
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_118 118
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_119 119
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_120 120
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_121 121
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_122 122
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_123 123
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_124 124
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_125 125
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_126 126
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_127 127
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_128 128
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_129 129
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_130 130
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_131 131
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_132 132
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_133 133
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_134 134
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_135 135
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_136 136
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_137 137
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_138 138
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_139 139
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_140 140
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_141 141
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_142 142
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_143 143
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_144 144
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_145 145
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_146 146
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_147 147
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_148 148
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_149 149
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_150 150
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_151 151
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_152 152
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_153 153
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_154 154
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_155 155
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_156 156
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_157 157
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_158 158
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_159 159
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_160 160
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_161 161
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_162 162
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_163 163
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_164 164
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_165 165
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_166 166
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_167 167
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_168 168
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_169 169
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_170 170
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_171 171
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_172 172
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_173 173
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_174 174
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_175 175
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_176 176
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_177 177
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_178 178
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_179 179
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_180 180
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_181 181
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_182 182
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_183 183
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_184 184
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_185 185
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_186 186
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_187 187
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_188 188
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_189 189
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_190 190
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_191 191
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_192 192
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_193 193
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_194 194
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_195 195
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_196 196
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_197 197
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_198 198
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_199 199
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_200 200
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_201 201
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_202 202
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_203 203
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_204 204
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_205 205
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_206 206
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_207 207
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_208 208
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_209 209
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_210 210
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_211 211
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_212 212
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_213 213
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_214 214
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_215 215
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_216 216
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_217 217
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_218 218
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_219 219
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_220 220
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_221 221
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_222 222
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_223 223
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_224 224
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_225 225
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_226 226
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_227 227
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_228 228
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_229 229
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_230 230
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_231 231
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_232 232
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_233 233
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_234 234
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_235 235
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_236 236
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_237 237
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_238 238
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_239 239
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_240 240
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_241 241
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_242 242
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_243 243
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_244 244
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_245 245
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_246 246
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_247 247
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_248 248
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_249 249
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_250 250
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_251 251
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_252 252
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_253 253
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_254 254
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_255 255
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_256 256
+# define BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_257 257
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/seq/subseq.hpp b/vendor/pdalboost/boost/preprocessor/seq/subseq.hpp
new file mode 100644
index 0000000..fb242f1
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/seq/subseq.hpp
@@ -0,0 +1,28 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_SUBSEQ_HPP
+# define BOOST_PREPROCESSOR_SEQ_SUBSEQ_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/first_n.hpp>
+# include <boost/preprocessor/seq/rest_n.hpp>
+#
+# /* BOOST_PP_SEQ_SUBSEQ */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_SUBSEQ(seq, i, len) BOOST_PP_SEQ_FIRST_N(len, BOOST_PP_SEQ_REST_N(i, seq))
+# else
+#    define BOOST_PP_SEQ_SUBSEQ(seq, i, len) BOOST_PP_SEQ_SUBSEQ_I(seq, i, len)
+#    define BOOST_PP_SEQ_SUBSEQ_I(seq, i, len) BOOST_PP_SEQ_FIRST_N(len, BOOST_PP_SEQ_REST_N(i, seq))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/seq/to_tuple.hpp b/vendor/pdalboost/boost/preprocessor/seq/to_tuple.hpp
new file mode 100644
index 0000000..ab38eb9
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/seq/to_tuple.hpp
@@ -0,0 +1,27 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_TO_TUPLE_HPP
+# define BOOST_PREPROCESSOR_SEQ_TO_TUPLE_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/enum.hpp>
+#
+# /* BOOST_PP_SEQ_TO_TUPLE */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_TO_TUPLE(seq) (BOOST_PP_SEQ_ENUM(seq))
+# else
+#    define BOOST_PP_SEQ_TO_TUPLE(seq) BOOST_PP_SEQ_TO_TUPLE_I(seq)
+#    define BOOST_PP_SEQ_TO_TUPLE_I(seq) (BOOST_PP_SEQ_ENUM(seq))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/seq/transform.hpp b/vendor/pdalboost/boost/preprocessor/seq/transform.hpp
new file mode 100644
index 0000000..79d8108
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/seq/transform.hpp
@@ -0,0 +1,48 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SEQ_TRANSFORM_HPP
+# define BOOST_PREPROCESSOR_SEQ_TRANSFORM_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/seq/fold_left.hpp>
+# include <boost/preprocessor/seq/seq.hpp>
+# include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+#
+# /* BOOST_PP_SEQ_TRANSFORM */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_TRANSFORM(op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))
+# else
+#    define BOOST_PP_SEQ_TRANSFORM(op, data, seq) BOOST_PP_SEQ_TRANSFORM_I(op, data, seq)
+#    define BOOST_PP_SEQ_TRANSFORM_I(op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))
+# endif
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT()
+#    define BOOST_PP_SEQ_TRANSFORM_O(s, state, elem) BOOST_PP_SEQ_TRANSFORM_O_IM(s, BOOST_PP_TUPLE_REM_3 state, elem)
+#    define BOOST_PP_SEQ_TRANSFORM_O_IM(s, im, elem) BOOST_PP_SEQ_TRANSFORM_O_I(s, im, elem)
+# else
+#    define BOOST_PP_SEQ_TRANSFORM_O(s, state, elem) BOOST_PP_SEQ_TRANSFORM_O_I(s, BOOST_PP_TUPLE_ELEM(3, 0, state), BOOST_PP_TUPLE_ELEM(3, 1, state), BOOST_PP_TUPLE_ELEM(3, 2, state), elem)
+# endif
+#
+# define BOOST_PP_SEQ_TRANSFORM_O_I(s, op, data, res, elem) (op, data, res (op(s, data, elem)))
+#
+# /* BOOST_PP_SEQ_TRANSFORM_S */
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#    define BOOST_PP_SEQ_TRANSFORM_S(s, op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))
+# else
+#    define BOOST_PP_SEQ_TRANSFORM_S(s, op, data, seq) BOOST_PP_SEQ_TRANSFORM_S_I(s, op, data, seq)
+#    define BOOST_PP_SEQ_TRANSFORM_S_I(s, op, data, seq) BOOST_PP_SEQ_TAIL(BOOST_PP_TUPLE_ELEM(3, 2, BOOST_PP_SEQ_FOLD_LEFT_ ## s(BOOST_PP_SEQ_TRANSFORM_O, (op, data, (nil)), seq)))
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/slot/detail/counter.hpp b/vendor/pdalboost/boost/preprocessor/slot/detail/counter.hpp
new file mode 100644
index 0000000..a1c0df1
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/slot/detail/counter.hpp
@@ -0,0 +1,269 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2005.                                  *
+#  *     Distributed under the Boost Software License, Version 1.0. (See      *
+#  *     accompanying file LICENSE_1_0.txt or copy at                         *
+#  *     http://www.boost.org/LICENSE_1_0.txt)                                *
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# define BOOST_PP_VALUE BOOST_PP_COUNTER + 1
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_COUNTER
+#
+# undef BOOST_PP_COUNTER_DIGIT_1
+# undef BOOST_PP_COUNTER_DIGIT_2
+# undef BOOST_PP_COUNTER_DIGIT_3
+# undef BOOST_PP_COUNTER_DIGIT_4
+# undef BOOST_PP_COUNTER_DIGIT_5
+# undef BOOST_PP_COUNTER_DIGIT_6
+# undef BOOST_PP_COUNTER_DIGIT_7
+# undef BOOST_PP_COUNTER_DIGIT_8
+# undef BOOST_PP_COUNTER_DIGIT_9
+# undef BOOST_PP_COUNTER_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_10 == 0
+#    define BOOST_PP_COUNTER_DIGIT_10 0
+# elif BOOST_PP_SLOT_TEMP_10 == 1
+#    define BOOST_PP_COUNTER_DIGIT_10 1
+# elif BOOST_PP_SLOT_TEMP_10 == 2
+#    define BOOST_PP_COUNTER_DIGIT_10 2
+# elif BOOST_PP_SLOT_TEMP_10 == 3
+#    define BOOST_PP_COUNTER_DIGIT_10 3
+# elif BOOST_PP_SLOT_TEMP_10 == 4
+#    define BOOST_PP_COUNTER_DIGIT_10 4
+# elif BOOST_PP_SLOT_TEMP_10 == 5
+#    define BOOST_PP_COUNTER_DIGIT_10 5
+# elif BOOST_PP_SLOT_TEMP_10 == 6
+#    define BOOST_PP_COUNTER_DIGIT_10 6
+# elif BOOST_PP_SLOT_TEMP_10 == 7
+#    define BOOST_PP_COUNTER_DIGIT_10 7
+# elif BOOST_PP_SLOT_TEMP_10 == 8
+#    define BOOST_PP_COUNTER_DIGIT_10 8
+# elif BOOST_PP_SLOT_TEMP_10 == 9
+#    define BOOST_PP_COUNTER_DIGIT_10 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_9 == 0
+#    define BOOST_PP_COUNTER_DIGIT_9 0
+# elif BOOST_PP_SLOT_TEMP_9 == 1
+#    define BOOST_PP_COUNTER_DIGIT_9 1
+# elif BOOST_PP_SLOT_TEMP_9 == 2
+#    define BOOST_PP_COUNTER_DIGIT_9 2
+# elif BOOST_PP_SLOT_TEMP_9 == 3
+#    define BOOST_PP_COUNTER_DIGIT_9 3
+# elif BOOST_PP_SLOT_TEMP_9 == 4
+#    define BOOST_PP_COUNTER_DIGIT_9 4
+# elif BOOST_PP_SLOT_TEMP_9 == 5
+#    define BOOST_PP_COUNTER_DIGIT_9 5
+# elif BOOST_PP_SLOT_TEMP_9 == 6
+#    define BOOST_PP_COUNTER_DIGIT_9 6
+# elif BOOST_PP_SLOT_TEMP_9 == 7
+#    define BOOST_PP_COUNTER_DIGIT_9 7
+# elif BOOST_PP_SLOT_TEMP_9 == 8
+#    define BOOST_PP_COUNTER_DIGIT_9 8
+# elif BOOST_PP_SLOT_TEMP_9 == 9
+#    define BOOST_PP_COUNTER_DIGIT_9 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_8 == 0
+#    define BOOST_PP_COUNTER_DIGIT_8 0
+# elif BOOST_PP_SLOT_TEMP_8 == 1
+#    define BOOST_PP_COUNTER_DIGIT_8 1
+# elif BOOST_PP_SLOT_TEMP_8 == 2
+#    define BOOST_PP_COUNTER_DIGIT_8 2
+# elif BOOST_PP_SLOT_TEMP_8 == 3
+#    define BOOST_PP_COUNTER_DIGIT_8 3
+# elif BOOST_PP_SLOT_TEMP_8 == 4
+#    define BOOST_PP_COUNTER_DIGIT_8 4
+# elif BOOST_PP_SLOT_TEMP_8 == 5
+#    define BOOST_PP_COUNTER_DIGIT_8 5
+# elif BOOST_PP_SLOT_TEMP_8 == 6
+#    define BOOST_PP_COUNTER_DIGIT_8 6
+# elif BOOST_PP_SLOT_TEMP_8 == 7
+#    define BOOST_PP_COUNTER_DIGIT_8 7
+# elif BOOST_PP_SLOT_TEMP_8 == 8
+#    define BOOST_PP_COUNTER_DIGIT_8 8
+# elif BOOST_PP_SLOT_TEMP_8 == 9
+#    define BOOST_PP_COUNTER_DIGIT_8 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_7 == 0
+#    define BOOST_PP_COUNTER_DIGIT_7 0
+# elif BOOST_PP_SLOT_TEMP_7 == 1
+#    define BOOST_PP_COUNTER_DIGIT_7 1
+# elif BOOST_PP_SLOT_TEMP_7 == 2
+#    define BOOST_PP_COUNTER_DIGIT_7 2
+# elif BOOST_PP_SLOT_TEMP_7 == 3
+#    define BOOST_PP_COUNTER_DIGIT_7 3
+# elif BOOST_PP_SLOT_TEMP_7 == 4
+#    define BOOST_PP_COUNTER_DIGIT_7 4
+# elif BOOST_PP_SLOT_TEMP_7 == 5
+#    define BOOST_PP_COUNTER_DIGIT_7 5
+# elif BOOST_PP_SLOT_TEMP_7 == 6
+#    define BOOST_PP_COUNTER_DIGIT_7 6
+# elif BOOST_PP_SLOT_TEMP_7 == 7
+#    define BOOST_PP_COUNTER_DIGIT_7 7
+# elif BOOST_PP_SLOT_TEMP_7 == 8
+#    define BOOST_PP_COUNTER_DIGIT_7 8
+# elif BOOST_PP_SLOT_TEMP_7 == 9
+#    define BOOST_PP_COUNTER_DIGIT_7 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_6 == 0
+#    define BOOST_PP_COUNTER_DIGIT_6 0
+# elif BOOST_PP_SLOT_TEMP_6 == 1
+#    define BOOST_PP_COUNTER_DIGIT_6 1
+# elif BOOST_PP_SLOT_TEMP_6 == 2
+#    define BOOST_PP_COUNTER_DIGIT_6 2
+# elif BOOST_PP_SLOT_TEMP_6 == 3
+#    define BOOST_PP_COUNTER_DIGIT_6 3
+# elif BOOST_PP_SLOT_TEMP_6 == 4
+#    define BOOST_PP_COUNTER_DIGIT_6 4
+# elif BOOST_PP_SLOT_TEMP_6 == 5
+#    define BOOST_PP_COUNTER_DIGIT_6 5
+# elif BOOST_PP_SLOT_TEMP_6 == 6
+#    define BOOST_PP_COUNTER_DIGIT_6 6
+# elif BOOST_PP_SLOT_TEMP_6 == 7
+#    define BOOST_PP_COUNTER_DIGIT_6 7
+# elif BOOST_PP_SLOT_TEMP_6 == 8
+#    define BOOST_PP_COUNTER_DIGIT_6 8
+# elif BOOST_PP_SLOT_TEMP_6 == 9
+#    define BOOST_PP_COUNTER_DIGIT_6 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_5 == 0
+#    define BOOST_PP_COUNTER_DIGIT_5 0
+# elif BOOST_PP_SLOT_TEMP_5 == 1
+#    define BOOST_PP_COUNTER_DIGIT_5 1
+# elif BOOST_PP_SLOT_TEMP_5 == 2
+#    define BOOST_PP_COUNTER_DIGIT_5 2
+# elif BOOST_PP_SLOT_TEMP_5 == 3
+#    define BOOST_PP_COUNTER_DIGIT_5 3
+# elif BOOST_PP_SLOT_TEMP_5 == 4
+#    define BOOST_PP_COUNTER_DIGIT_5 4
+# elif BOOST_PP_SLOT_TEMP_5 == 5
+#    define BOOST_PP_COUNTER_DIGIT_5 5
+# elif BOOST_PP_SLOT_TEMP_5 == 6
+#    define BOOST_PP_COUNTER_DIGIT_5 6
+# elif BOOST_PP_SLOT_TEMP_5 == 7
+#    define BOOST_PP_COUNTER_DIGIT_5 7
+# elif BOOST_PP_SLOT_TEMP_5 == 8
+#    define BOOST_PP_COUNTER_DIGIT_5 8
+# elif BOOST_PP_SLOT_TEMP_5 == 9
+#    define BOOST_PP_COUNTER_DIGIT_5 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_4 == 0
+#    define BOOST_PP_COUNTER_DIGIT_4 0
+# elif BOOST_PP_SLOT_TEMP_4 == 1
+#    define BOOST_PP_COUNTER_DIGIT_4 1
+# elif BOOST_PP_SLOT_TEMP_4 == 2
+#    define BOOST_PP_COUNTER_DIGIT_4 2
+# elif BOOST_PP_SLOT_TEMP_4 == 3
+#    define BOOST_PP_COUNTER_DIGIT_4 3
+# elif BOOST_PP_SLOT_TEMP_4 == 4
+#    define BOOST_PP_COUNTER_DIGIT_4 4
+# elif BOOST_PP_SLOT_TEMP_4 == 5
+#    define BOOST_PP_COUNTER_DIGIT_4 5
+# elif BOOST_PP_SLOT_TEMP_4 == 6
+#    define BOOST_PP_COUNTER_DIGIT_4 6
+# elif BOOST_PP_SLOT_TEMP_4 == 7
+#    define BOOST_PP_COUNTER_DIGIT_4 7
+# elif BOOST_PP_SLOT_TEMP_4 == 8
+#    define BOOST_PP_COUNTER_DIGIT_4 8
+# elif BOOST_PP_SLOT_TEMP_4 == 9
+#    define BOOST_PP_COUNTER_DIGIT_4 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_COUNTER_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_COUNTER_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_COUNTER_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_COUNTER_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_COUNTER_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_COUNTER_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_COUNTER_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_COUNTER_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_COUNTER_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_COUNTER_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_COUNTER_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_COUNTER_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_COUNTER_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_COUNTER_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_COUNTER_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_COUNTER_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_COUNTER_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_COUNTER_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_COUNTER_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_COUNTER_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_COUNTER_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_COUNTER_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_COUNTER_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_COUNTER_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_COUNTER_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_COUNTER_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_COUNTER_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_COUNTER_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_COUNTER_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_COUNTER_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_COUNTER_DIGIT_10
+#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_10(BOOST_PP_COUNTER_DIGIT_10, BOOST_PP_COUNTER_DIGIT_9, BOOST_PP_COUNTER_DIGIT_8, BOOST_PP_COUNTER_DIGIT_7, BOOST_PP_COUNTER_DIGIT_6, BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_9
+#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_9(BOOST_PP_COUNTER_DIGIT_9, BOOST_PP_COUNTER_DIGIT_8, BOOST_PP_COUNTER_DIGIT_7, BOOST_PP_COUNTER_DIGIT_6, BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_8
+#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_8(BOOST_PP_COUNTER_DIGIT_8, BOOST_PP_COUNTER_DIGIT_7, BOOST_PP_COUNTER_DIGIT_6, BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_7
+#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_7(BOOST_PP_COUNTER_DIGIT_7, BOOST_PP_COUNTER_DIGIT_6, BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_6
+#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_6(BOOST_PP_COUNTER_DIGIT_6, BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_5
+#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_5(BOOST_PP_COUNTER_DIGIT_5, BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_4
+#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_4(BOOST_PP_COUNTER_DIGIT_4, BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_3
+#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_3(BOOST_PP_COUNTER_DIGIT_3, BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# elif BOOST_PP_COUNTER_DIGIT_2
+#    define BOOST_PP_COUNTER BOOST_PP_SLOT_CC_2(BOOST_PP_COUNTER_DIGIT_2, BOOST_PP_COUNTER_DIGIT_1)
+# else
+#    define BOOST_PP_COUNTER BOOST_PP_COUNTER_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/slot/detail/def.hpp b/vendor/pdalboost/boost/preprocessor/slot/detail/def.hpp
new file mode 100644
index 0000000..885099e
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/slot/detail/def.hpp
@@ -0,0 +1,49 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SLOT_DETAIL_DEF_HPP
+# define BOOST_PREPROCESSOR_SLOT_DETAIL_DEF_HPP
+#
+# /* BOOST_PP_SLOT_OFFSET_x */
+#
+# define BOOST_PP_SLOT_OFFSET_10(x) (x) % 1000000000UL
+# define BOOST_PP_SLOT_OFFSET_9(x) BOOST_PP_SLOT_OFFSET_10(x) % 100000000UL
+# define BOOST_PP_SLOT_OFFSET_8(x) BOOST_PP_SLOT_OFFSET_9(x) % 10000000UL
+# define BOOST_PP_SLOT_OFFSET_7(x) BOOST_PP_SLOT_OFFSET_8(x) % 1000000UL
+# define BOOST_PP_SLOT_OFFSET_6(x) BOOST_PP_SLOT_OFFSET_7(x) % 100000UL
+# define BOOST_PP_SLOT_OFFSET_5(x) BOOST_PP_SLOT_OFFSET_6(x) % 10000UL
+# define BOOST_PP_SLOT_OFFSET_4(x) BOOST_PP_SLOT_OFFSET_5(x) % 1000UL
+# define BOOST_PP_SLOT_OFFSET_3(x) BOOST_PP_SLOT_OFFSET_4(x) % 100UL
+# define BOOST_PP_SLOT_OFFSET_2(x) BOOST_PP_SLOT_OFFSET_3(x) % 10UL
+#
+# /* BOOST_PP_SLOT_CC_x */
+#
+# define BOOST_PP_SLOT_CC_2(a, b) BOOST_PP_SLOT_CC_2_D(a, b)
+# define BOOST_PP_SLOT_CC_3(a, b, c) BOOST_PP_SLOT_CC_3_D(a, b, c)
+# define BOOST_PP_SLOT_CC_4(a, b, c, d) BOOST_PP_SLOT_CC_4_D(a, b, c, d)
+# define BOOST_PP_SLOT_CC_5(a, b, c, d, e) BOOST_PP_SLOT_CC_5_D(a, b, c, d, e)
+# define BOOST_PP_SLOT_CC_6(a, b, c, d, e, f) BOOST_PP_SLOT_CC_6_D(a, b, c, d, e, f)
+# define BOOST_PP_SLOT_CC_7(a, b, c, d, e, f, g) BOOST_PP_SLOT_CC_7_D(a, b, c, d, e, f, g)
+# define BOOST_PP_SLOT_CC_8(a, b, c, d, e, f, g, h) BOOST_PP_SLOT_CC_8_D(a, b, c, d, e, f, g, h)
+# define BOOST_PP_SLOT_CC_9(a, b, c, d, e, f, g, h, i) BOOST_PP_SLOT_CC_9_D(a, b, c, d, e, f, g, h, i)
+# define BOOST_PP_SLOT_CC_10(a, b, c, d, e, f, g, h, i, j) BOOST_PP_SLOT_CC_10_D(a, b, c, d, e, f, g, h, i, j)
+#
+# define BOOST_PP_SLOT_CC_2_D(a, b) a ## b
+# define BOOST_PP_SLOT_CC_3_D(a, b, c) a ## b ## c
+# define BOOST_PP_SLOT_CC_4_D(a, b, c, d) a ## b ## c ## d
+# define BOOST_PP_SLOT_CC_5_D(a, b, c, d, e) a ## b ## c ## d ## e
+# define BOOST_PP_SLOT_CC_6_D(a, b, c, d, e, f) a ## b ## c ## d ## e ## f
+# define BOOST_PP_SLOT_CC_7_D(a, b, c, d, e, f, g) a ## b ## c ## d ## e ## f ## g
+# define BOOST_PP_SLOT_CC_8_D(a, b, c, d, e, f, g, h) a ## b ## c ## d ## e ## f ## g ## h
+# define BOOST_PP_SLOT_CC_9_D(a, b, c, d, e, f, g, h, i) a ## b ## c ## d ## e ## f ## g ## h ## i
+# define BOOST_PP_SLOT_CC_10_D(a, b, c, d, e, f, g, h, i, j) a ## b ## c ## d ## e ## f ## g ## h ## i ## j
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/slot/detail/shared.hpp b/vendor/pdalboost/boost/preprocessor/slot/detail/shared.hpp
new file mode 100644
index 0000000..c97ac54
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/slot/detail/shared.hpp
@@ -0,0 +1,247 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PP_VALUE
+#    error BOOST_PP_ERROR:  BOOST_PP_VALUE is not defined
+# endif
+#
+# undef BOOST_PP_SLOT_TEMP_1
+# undef BOOST_PP_SLOT_TEMP_2
+# undef BOOST_PP_SLOT_TEMP_3
+# undef BOOST_PP_SLOT_TEMP_4
+# undef BOOST_PP_SLOT_TEMP_5
+# undef BOOST_PP_SLOT_TEMP_6
+# undef BOOST_PP_SLOT_TEMP_7
+# undef BOOST_PP_SLOT_TEMP_8
+# undef BOOST_PP_SLOT_TEMP_9
+# undef BOOST_PP_SLOT_TEMP_10
+#
+# if (BOOST_PP_VALUE) / 1000000000UL == 0
+#    define BOOST_PP_SLOT_TEMP_10 0
+# elif (BOOST_PP_VALUE) / 1000000000UL == 1
+#    define BOOST_PP_SLOT_TEMP_10 1
+# elif (BOOST_PP_VALUE) / 1000000000UL == 2
+#    define BOOST_PP_SLOT_TEMP_10 2
+# elif (BOOST_PP_VALUE) / 1000000000UL == 3
+#    define BOOST_PP_SLOT_TEMP_10 3
+# elif (BOOST_PP_VALUE) / 1000000000UL == 4
+#    define BOOST_PP_SLOT_TEMP_10 4
+# elif (BOOST_PP_VALUE) / 1000000000UL == 5
+#    define BOOST_PP_SLOT_TEMP_10 5
+# elif (BOOST_PP_VALUE) / 1000000000UL == 6
+#    define BOOST_PP_SLOT_TEMP_10 6
+# elif (BOOST_PP_VALUE) / 1000000000UL == 7
+#    define BOOST_PP_SLOT_TEMP_10 7
+# elif (BOOST_PP_VALUE) / 1000000000UL == 8
+#    define BOOST_PP_SLOT_TEMP_10 8
+# elif (BOOST_PP_VALUE) / 1000000000UL == 9
+#    define BOOST_PP_SLOT_TEMP_10 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 0
+#    define BOOST_PP_SLOT_TEMP_9 0
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 1
+#    define BOOST_PP_SLOT_TEMP_9 1
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 2
+#    define BOOST_PP_SLOT_TEMP_9 2
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 3
+#    define BOOST_PP_SLOT_TEMP_9 3
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 4
+#    define BOOST_PP_SLOT_TEMP_9 4
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 5
+#    define BOOST_PP_SLOT_TEMP_9 5
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 6
+#    define BOOST_PP_SLOT_TEMP_9 6
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 7
+#    define BOOST_PP_SLOT_TEMP_9 7
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 8
+#    define BOOST_PP_SLOT_TEMP_9 8
+# elif BOOST_PP_SLOT_OFFSET_10(BOOST_PP_VALUE) / 100000000UL == 9
+#    define BOOST_PP_SLOT_TEMP_9 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 0
+#    define BOOST_PP_SLOT_TEMP_8 0
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 1
+#    define BOOST_PP_SLOT_TEMP_8 1
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 2
+#    define BOOST_PP_SLOT_TEMP_8 2
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 3
+#    define BOOST_PP_SLOT_TEMP_8 3
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 4
+#    define BOOST_PP_SLOT_TEMP_8 4
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 5
+#    define BOOST_PP_SLOT_TEMP_8 5
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 6
+#    define BOOST_PP_SLOT_TEMP_8 6
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 7
+#    define BOOST_PP_SLOT_TEMP_8 7
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 8
+#    define BOOST_PP_SLOT_TEMP_8 8
+# elif BOOST_PP_SLOT_OFFSET_9(BOOST_PP_VALUE) / 10000000UL == 9
+#    define BOOST_PP_SLOT_TEMP_8 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 0
+#    define BOOST_PP_SLOT_TEMP_7 0
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 1
+#    define BOOST_PP_SLOT_TEMP_7 1
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 2
+#    define BOOST_PP_SLOT_TEMP_7 2
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 3
+#    define BOOST_PP_SLOT_TEMP_7 3
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 4
+#    define BOOST_PP_SLOT_TEMP_7 4
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 5
+#    define BOOST_PP_SLOT_TEMP_7 5
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 6
+#    define BOOST_PP_SLOT_TEMP_7 6
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 7
+#    define BOOST_PP_SLOT_TEMP_7 7
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 8
+#    define BOOST_PP_SLOT_TEMP_7 8
+# elif BOOST_PP_SLOT_OFFSET_8(BOOST_PP_VALUE) / 1000000UL == 9
+#    define BOOST_PP_SLOT_TEMP_7 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 0
+#    define BOOST_PP_SLOT_TEMP_6 0
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 1
+#    define BOOST_PP_SLOT_TEMP_6 1
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 2
+#    define BOOST_PP_SLOT_TEMP_6 2
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 3
+#    define BOOST_PP_SLOT_TEMP_6 3
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 4
+#    define BOOST_PP_SLOT_TEMP_6 4
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 5
+#    define BOOST_PP_SLOT_TEMP_6 5
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 6
+#    define BOOST_PP_SLOT_TEMP_6 6
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 7
+#    define BOOST_PP_SLOT_TEMP_6 7
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 8
+#    define BOOST_PP_SLOT_TEMP_6 8
+# elif BOOST_PP_SLOT_OFFSET_7(BOOST_PP_VALUE) / 100000UL == 9
+#    define BOOST_PP_SLOT_TEMP_6 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 0
+#    define BOOST_PP_SLOT_TEMP_5 0
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 1
+#    define BOOST_PP_SLOT_TEMP_5 1
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 2
+#    define BOOST_PP_SLOT_TEMP_5 2
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 3
+#    define BOOST_PP_SLOT_TEMP_5 3
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 4
+#    define BOOST_PP_SLOT_TEMP_5 4
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 5
+#    define BOOST_PP_SLOT_TEMP_5 5
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 6
+#    define BOOST_PP_SLOT_TEMP_5 6
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 7
+#    define BOOST_PP_SLOT_TEMP_5 7
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 8
+#    define BOOST_PP_SLOT_TEMP_5 8
+# elif BOOST_PP_SLOT_OFFSET_6(BOOST_PP_VALUE) / 10000UL == 9
+#    define BOOST_PP_SLOT_TEMP_5 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 0
+#    define BOOST_PP_SLOT_TEMP_4 0
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 1
+#    define BOOST_PP_SLOT_TEMP_4 1
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 2
+#    define BOOST_PP_SLOT_TEMP_4 2
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 3
+#    define BOOST_PP_SLOT_TEMP_4 3
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 4
+#    define BOOST_PP_SLOT_TEMP_4 4
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 5
+#    define BOOST_PP_SLOT_TEMP_4 5
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 6
+#    define BOOST_PP_SLOT_TEMP_4 6
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 7
+#    define BOOST_PP_SLOT_TEMP_4 7
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 8
+#    define BOOST_PP_SLOT_TEMP_4 8
+# elif BOOST_PP_SLOT_OFFSET_5(BOOST_PP_VALUE) / 1000UL == 9
+#    define BOOST_PP_SLOT_TEMP_4 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 0
+#    define BOOST_PP_SLOT_TEMP_3 0
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 1
+#    define BOOST_PP_SLOT_TEMP_3 1
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 2
+#    define BOOST_PP_SLOT_TEMP_3 2
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 3
+#    define BOOST_PP_SLOT_TEMP_3 3
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 4
+#    define BOOST_PP_SLOT_TEMP_3 4
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 5
+#    define BOOST_PP_SLOT_TEMP_3 5
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 6
+#    define BOOST_PP_SLOT_TEMP_3 6
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 7
+#    define BOOST_PP_SLOT_TEMP_3 7
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 8
+#    define BOOST_PP_SLOT_TEMP_3 8
+# elif BOOST_PP_SLOT_OFFSET_4(BOOST_PP_VALUE) / 100UL == 9
+#    define BOOST_PP_SLOT_TEMP_3 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 0
+#    define BOOST_PP_SLOT_TEMP_2 0
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 1
+#    define BOOST_PP_SLOT_TEMP_2 1
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 2
+#    define BOOST_PP_SLOT_TEMP_2 2
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 3
+#    define BOOST_PP_SLOT_TEMP_2 3
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 4
+#    define BOOST_PP_SLOT_TEMP_2 4
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 5
+#    define BOOST_PP_SLOT_TEMP_2 5
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 6
+#    define BOOST_PP_SLOT_TEMP_2 6
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 7
+#    define BOOST_PP_SLOT_TEMP_2 7
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 8
+#    define BOOST_PP_SLOT_TEMP_2 8
+# elif BOOST_PP_SLOT_OFFSET_3(BOOST_PP_VALUE) / 10UL == 9
+#    define BOOST_PP_SLOT_TEMP_2 9
+# endif
+#
+# if BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 0
+#    define BOOST_PP_SLOT_TEMP_1 0
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 1
+#    define BOOST_PP_SLOT_TEMP_1 1
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 2
+#    define BOOST_PP_SLOT_TEMP_1 2
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 3
+#    define BOOST_PP_SLOT_TEMP_1 3
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 4
+#    define BOOST_PP_SLOT_TEMP_1 4
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 5
+#    define BOOST_PP_SLOT_TEMP_1 5
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 6
+#    define BOOST_PP_SLOT_TEMP_1 6
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 7
+#    define BOOST_PP_SLOT_TEMP_1 7
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 8
+#    define BOOST_PP_SLOT_TEMP_1 8
+# elif BOOST_PP_SLOT_OFFSET_2(BOOST_PP_VALUE) == 9
+#    define BOOST_PP_SLOT_TEMP_1 9
+# endif
+#
+# undef BOOST_PP_VALUE
diff --git a/vendor/pdalboost/boost/preprocessor/slot/detail/slot1.hpp b/vendor/pdalboost/boost/preprocessor/slot/detail/slot1.hpp
new file mode 100644
index 0000000..b22748e
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/slot/detail/slot1.hpp
@@ -0,0 +1,267 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_SLOT_1
+#
+# undef BOOST_PP_SLOT_1_DIGIT_1
+# undef BOOST_PP_SLOT_1_DIGIT_2
+# undef BOOST_PP_SLOT_1_DIGIT_3
+# undef BOOST_PP_SLOT_1_DIGIT_4
+# undef BOOST_PP_SLOT_1_DIGIT_5
+# undef BOOST_PP_SLOT_1_DIGIT_6
+# undef BOOST_PP_SLOT_1_DIGIT_7
+# undef BOOST_PP_SLOT_1_DIGIT_8
+# undef BOOST_PP_SLOT_1_DIGIT_9
+# undef BOOST_PP_SLOT_1_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_10 == 0
+#    define BOOST_PP_SLOT_1_DIGIT_10 0
+# elif BOOST_PP_SLOT_TEMP_10 == 1
+#    define BOOST_PP_SLOT_1_DIGIT_10 1
+# elif BOOST_PP_SLOT_TEMP_10 == 2
+#    define BOOST_PP_SLOT_1_DIGIT_10 2
+# elif BOOST_PP_SLOT_TEMP_10 == 3
+#    define BOOST_PP_SLOT_1_DIGIT_10 3
+# elif BOOST_PP_SLOT_TEMP_10 == 4
+#    define BOOST_PP_SLOT_1_DIGIT_10 4
+# elif BOOST_PP_SLOT_TEMP_10 == 5
+#    define BOOST_PP_SLOT_1_DIGIT_10 5
+# elif BOOST_PP_SLOT_TEMP_10 == 6
+#    define BOOST_PP_SLOT_1_DIGIT_10 6
+# elif BOOST_PP_SLOT_TEMP_10 == 7
+#    define BOOST_PP_SLOT_1_DIGIT_10 7
+# elif BOOST_PP_SLOT_TEMP_10 == 8
+#    define BOOST_PP_SLOT_1_DIGIT_10 8
+# elif BOOST_PP_SLOT_TEMP_10 == 9
+#    define BOOST_PP_SLOT_1_DIGIT_10 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_9 == 0
+#    define BOOST_PP_SLOT_1_DIGIT_9 0
+# elif BOOST_PP_SLOT_TEMP_9 == 1
+#    define BOOST_PP_SLOT_1_DIGIT_9 1
+# elif BOOST_PP_SLOT_TEMP_9 == 2
+#    define BOOST_PP_SLOT_1_DIGIT_9 2
+# elif BOOST_PP_SLOT_TEMP_9 == 3
+#    define BOOST_PP_SLOT_1_DIGIT_9 3
+# elif BOOST_PP_SLOT_TEMP_9 == 4
+#    define BOOST_PP_SLOT_1_DIGIT_9 4
+# elif BOOST_PP_SLOT_TEMP_9 == 5
+#    define BOOST_PP_SLOT_1_DIGIT_9 5
+# elif BOOST_PP_SLOT_TEMP_9 == 6
+#    define BOOST_PP_SLOT_1_DIGIT_9 6
+# elif BOOST_PP_SLOT_TEMP_9 == 7
+#    define BOOST_PP_SLOT_1_DIGIT_9 7
+# elif BOOST_PP_SLOT_TEMP_9 == 8
+#    define BOOST_PP_SLOT_1_DIGIT_9 8
+# elif BOOST_PP_SLOT_TEMP_9 == 9
+#    define BOOST_PP_SLOT_1_DIGIT_9 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_8 == 0
+#    define BOOST_PP_SLOT_1_DIGIT_8 0
+# elif BOOST_PP_SLOT_TEMP_8 == 1
+#    define BOOST_PP_SLOT_1_DIGIT_8 1
+# elif BOOST_PP_SLOT_TEMP_8 == 2
+#    define BOOST_PP_SLOT_1_DIGIT_8 2
+# elif BOOST_PP_SLOT_TEMP_8 == 3
+#    define BOOST_PP_SLOT_1_DIGIT_8 3
+# elif BOOST_PP_SLOT_TEMP_8 == 4
+#    define BOOST_PP_SLOT_1_DIGIT_8 4
+# elif BOOST_PP_SLOT_TEMP_8 == 5
+#    define BOOST_PP_SLOT_1_DIGIT_8 5
+# elif BOOST_PP_SLOT_TEMP_8 == 6
+#    define BOOST_PP_SLOT_1_DIGIT_8 6
+# elif BOOST_PP_SLOT_TEMP_8 == 7
+#    define BOOST_PP_SLOT_1_DIGIT_8 7
+# elif BOOST_PP_SLOT_TEMP_8 == 8
+#    define BOOST_PP_SLOT_1_DIGIT_8 8
+# elif BOOST_PP_SLOT_TEMP_8 == 9
+#    define BOOST_PP_SLOT_1_DIGIT_8 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_7 == 0
+#    define BOOST_PP_SLOT_1_DIGIT_7 0
+# elif BOOST_PP_SLOT_TEMP_7 == 1
+#    define BOOST_PP_SLOT_1_DIGIT_7 1
+# elif BOOST_PP_SLOT_TEMP_7 == 2
+#    define BOOST_PP_SLOT_1_DIGIT_7 2
+# elif BOOST_PP_SLOT_TEMP_7 == 3
+#    define BOOST_PP_SLOT_1_DIGIT_7 3
+# elif BOOST_PP_SLOT_TEMP_7 == 4
+#    define BOOST_PP_SLOT_1_DIGIT_7 4
+# elif BOOST_PP_SLOT_TEMP_7 == 5
+#    define BOOST_PP_SLOT_1_DIGIT_7 5
+# elif BOOST_PP_SLOT_TEMP_7 == 6
+#    define BOOST_PP_SLOT_1_DIGIT_7 6
+# elif BOOST_PP_SLOT_TEMP_7 == 7
+#    define BOOST_PP_SLOT_1_DIGIT_7 7
+# elif BOOST_PP_SLOT_TEMP_7 == 8
+#    define BOOST_PP_SLOT_1_DIGIT_7 8
+# elif BOOST_PP_SLOT_TEMP_7 == 9
+#    define BOOST_PP_SLOT_1_DIGIT_7 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_6 == 0
+#    define BOOST_PP_SLOT_1_DIGIT_6 0
+# elif BOOST_PP_SLOT_TEMP_6 == 1
+#    define BOOST_PP_SLOT_1_DIGIT_6 1
+# elif BOOST_PP_SLOT_TEMP_6 == 2
+#    define BOOST_PP_SLOT_1_DIGIT_6 2
+# elif BOOST_PP_SLOT_TEMP_6 == 3
+#    define BOOST_PP_SLOT_1_DIGIT_6 3
+# elif BOOST_PP_SLOT_TEMP_6 == 4
+#    define BOOST_PP_SLOT_1_DIGIT_6 4
+# elif BOOST_PP_SLOT_TEMP_6 == 5
+#    define BOOST_PP_SLOT_1_DIGIT_6 5
+# elif BOOST_PP_SLOT_TEMP_6 == 6
+#    define BOOST_PP_SLOT_1_DIGIT_6 6
+# elif BOOST_PP_SLOT_TEMP_6 == 7
+#    define BOOST_PP_SLOT_1_DIGIT_6 7
+# elif BOOST_PP_SLOT_TEMP_6 == 8
+#    define BOOST_PP_SLOT_1_DIGIT_6 8
+# elif BOOST_PP_SLOT_TEMP_6 == 9
+#    define BOOST_PP_SLOT_1_DIGIT_6 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_5 == 0
+#    define BOOST_PP_SLOT_1_DIGIT_5 0
+# elif BOOST_PP_SLOT_TEMP_5 == 1
+#    define BOOST_PP_SLOT_1_DIGIT_5 1
+# elif BOOST_PP_SLOT_TEMP_5 == 2
+#    define BOOST_PP_SLOT_1_DIGIT_5 2
+# elif BOOST_PP_SLOT_TEMP_5 == 3
+#    define BOOST_PP_SLOT_1_DIGIT_5 3
+# elif BOOST_PP_SLOT_TEMP_5 == 4
+#    define BOOST_PP_SLOT_1_DIGIT_5 4
+# elif BOOST_PP_SLOT_TEMP_5 == 5
+#    define BOOST_PP_SLOT_1_DIGIT_5 5
+# elif BOOST_PP_SLOT_TEMP_5 == 6
+#    define BOOST_PP_SLOT_1_DIGIT_5 6
+# elif BOOST_PP_SLOT_TEMP_5 == 7
+#    define BOOST_PP_SLOT_1_DIGIT_5 7
+# elif BOOST_PP_SLOT_TEMP_5 == 8
+#    define BOOST_PP_SLOT_1_DIGIT_5 8
+# elif BOOST_PP_SLOT_TEMP_5 == 9
+#    define BOOST_PP_SLOT_1_DIGIT_5 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_4 == 0
+#    define BOOST_PP_SLOT_1_DIGIT_4 0
+# elif BOOST_PP_SLOT_TEMP_4 == 1
+#    define BOOST_PP_SLOT_1_DIGIT_4 1
+# elif BOOST_PP_SLOT_TEMP_4 == 2
+#    define BOOST_PP_SLOT_1_DIGIT_4 2
+# elif BOOST_PP_SLOT_TEMP_4 == 3
+#    define BOOST_PP_SLOT_1_DIGIT_4 3
+# elif BOOST_PP_SLOT_TEMP_4 == 4
+#    define BOOST_PP_SLOT_1_DIGIT_4 4
+# elif BOOST_PP_SLOT_TEMP_4 == 5
+#    define BOOST_PP_SLOT_1_DIGIT_4 5
+# elif BOOST_PP_SLOT_TEMP_4 == 6
+#    define BOOST_PP_SLOT_1_DIGIT_4 6
+# elif BOOST_PP_SLOT_TEMP_4 == 7
+#    define BOOST_PP_SLOT_1_DIGIT_4 7
+# elif BOOST_PP_SLOT_TEMP_4 == 8
+#    define BOOST_PP_SLOT_1_DIGIT_4 8
+# elif BOOST_PP_SLOT_TEMP_4 == 9
+#    define BOOST_PP_SLOT_1_DIGIT_4 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_SLOT_1_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_SLOT_1_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_SLOT_1_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_SLOT_1_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_SLOT_1_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_SLOT_1_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_SLOT_1_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_SLOT_1_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_SLOT_1_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_SLOT_1_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_SLOT_1_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_SLOT_1_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_SLOT_1_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_SLOT_1_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_SLOT_1_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_SLOT_1_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_SLOT_1_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_SLOT_1_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_SLOT_1_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_SLOT_1_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_SLOT_1_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_SLOT_1_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_SLOT_1_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_SLOT_1_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_SLOT_1_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_SLOT_1_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_SLOT_1_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_SLOT_1_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_SLOT_1_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_SLOT_1_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_SLOT_1_DIGIT_10
+#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_1_DIGIT_10, BOOST_PP_SLOT_1_DIGIT_9, BOOST_PP_SLOT_1_DIGIT_8, BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_9
+#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_1_DIGIT_9, BOOST_PP_SLOT_1_DIGIT_8, BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_8
+#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_1_DIGIT_8, BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_7
+#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_1_DIGIT_7, BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_6
+#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_1_DIGIT_6, BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_5
+#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_1_DIGIT_5, BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_4
+#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_1_DIGIT_4, BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_3
+#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_1_DIGIT_3, BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# elif BOOST_PP_SLOT_1_DIGIT_2
+#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_1_DIGIT_2, BOOST_PP_SLOT_1_DIGIT_1)
+# else
+#    define BOOST_PP_SLOT_1() BOOST_PP_SLOT_1_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/slot/detail/slot2.hpp b/vendor/pdalboost/boost/preprocessor/slot/detail/slot2.hpp
new file mode 100644
index 0000000..5d5258c
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/slot/detail/slot2.hpp
@@ -0,0 +1,267 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_SLOT_2
+#
+# undef BOOST_PP_SLOT_2_DIGIT_1
+# undef BOOST_PP_SLOT_2_DIGIT_2
+# undef BOOST_PP_SLOT_2_DIGIT_3
+# undef BOOST_PP_SLOT_2_DIGIT_4
+# undef BOOST_PP_SLOT_2_DIGIT_5
+# undef BOOST_PP_SLOT_2_DIGIT_6
+# undef BOOST_PP_SLOT_2_DIGIT_7
+# undef BOOST_PP_SLOT_2_DIGIT_8
+# undef BOOST_PP_SLOT_2_DIGIT_9
+# undef BOOST_PP_SLOT_2_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_10 == 0
+#    define BOOST_PP_SLOT_2_DIGIT_10 0
+# elif BOOST_PP_SLOT_TEMP_10 == 1
+#    define BOOST_PP_SLOT_2_DIGIT_10 1
+# elif BOOST_PP_SLOT_TEMP_10 == 2
+#    define BOOST_PP_SLOT_2_DIGIT_10 2
+# elif BOOST_PP_SLOT_TEMP_10 == 3
+#    define BOOST_PP_SLOT_2_DIGIT_10 3
+# elif BOOST_PP_SLOT_TEMP_10 == 4
+#    define BOOST_PP_SLOT_2_DIGIT_10 4
+# elif BOOST_PP_SLOT_TEMP_10 == 5
+#    define BOOST_PP_SLOT_2_DIGIT_10 5
+# elif BOOST_PP_SLOT_TEMP_10 == 6
+#    define BOOST_PP_SLOT_2_DIGIT_10 6
+# elif BOOST_PP_SLOT_TEMP_10 == 7
+#    define BOOST_PP_SLOT_2_DIGIT_10 7
+# elif BOOST_PP_SLOT_TEMP_10 == 8
+#    define BOOST_PP_SLOT_2_DIGIT_10 8
+# elif BOOST_PP_SLOT_TEMP_10 == 9
+#    define BOOST_PP_SLOT_2_DIGIT_10 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_9 == 0
+#    define BOOST_PP_SLOT_2_DIGIT_9 0
+# elif BOOST_PP_SLOT_TEMP_9 == 1
+#    define BOOST_PP_SLOT_2_DIGIT_9 1
+# elif BOOST_PP_SLOT_TEMP_9 == 2
+#    define BOOST_PP_SLOT_2_DIGIT_9 2
+# elif BOOST_PP_SLOT_TEMP_9 == 3
+#    define BOOST_PP_SLOT_2_DIGIT_9 3
+# elif BOOST_PP_SLOT_TEMP_9 == 4
+#    define BOOST_PP_SLOT_2_DIGIT_9 4
+# elif BOOST_PP_SLOT_TEMP_9 == 5
+#    define BOOST_PP_SLOT_2_DIGIT_9 5
+# elif BOOST_PP_SLOT_TEMP_9 == 6
+#    define BOOST_PP_SLOT_2_DIGIT_9 6
+# elif BOOST_PP_SLOT_TEMP_9 == 7
+#    define BOOST_PP_SLOT_2_DIGIT_9 7
+# elif BOOST_PP_SLOT_TEMP_9 == 8
+#    define BOOST_PP_SLOT_2_DIGIT_9 8
+# elif BOOST_PP_SLOT_TEMP_9 == 9
+#    define BOOST_PP_SLOT_2_DIGIT_9 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_8 == 0
+#    define BOOST_PP_SLOT_2_DIGIT_8 0
+# elif BOOST_PP_SLOT_TEMP_8 == 1
+#    define BOOST_PP_SLOT_2_DIGIT_8 1
+# elif BOOST_PP_SLOT_TEMP_8 == 2
+#    define BOOST_PP_SLOT_2_DIGIT_8 2
+# elif BOOST_PP_SLOT_TEMP_8 == 3
+#    define BOOST_PP_SLOT_2_DIGIT_8 3
+# elif BOOST_PP_SLOT_TEMP_8 == 4
+#    define BOOST_PP_SLOT_2_DIGIT_8 4
+# elif BOOST_PP_SLOT_TEMP_8 == 5
+#    define BOOST_PP_SLOT_2_DIGIT_8 5
+# elif BOOST_PP_SLOT_TEMP_8 == 6
+#    define BOOST_PP_SLOT_2_DIGIT_8 6
+# elif BOOST_PP_SLOT_TEMP_8 == 7
+#    define BOOST_PP_SLOT_2_DIGIT_8 7
+# elif BOOST_PP_SLOT_TEMP_8 == 8
+#    define BOOST_PP_SLOT_2_DIGIT_8 8
+# elif BOOST_PP_SLOT_TEMP_8 == 9
+#    define BOOST_PP_SLOT_2_DIGIT_8 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_7 == 0
+#    define BOOST_PP_SLOT_2_DIGIT_7 0
+# elif BOOST_PP_SLOT_TEMP_7 == 1
+#    define BOOST_PP_SLOT_2_DIGIT_7 1
+# elif BOOST_PP_SLOT_TEMP_7 == 2
+#    define BOOST_PP_SLOT_2_DIGIT_7 2
+# elif BOOST_PP_SLOT_TEMP_7 == 3
+#    define BOOST_PP_SLOT_2_DIGIT_7 3
+# elif BOOST_PP_SLOT_TEMP_7 == 4
+#    define BOOST_PP_SLOT_2_DIGIT_7 4
+# elif BOOST_PP_SLOT_TEMP_7 == 5
+#    define BOOST_PP_SLOT_2_DIGIT_7 5
+# elif BOOST_PP_SLOT_TEMP_7 == 6
+#    define BOOST_PP_SLOT_2_DIGIT_7 6
+# elif BOOST_PP_SLOT_TEMP_7 == 7
+#    define BOOST_PP_SLOT_2_DIGIT_7 7
+# elif BOOST_PP_SLOT_TEMP_7 == 8
+#    define BOOST_PP_SLOT_2_DIGIT_7 8
+# elif BOOST_PP_SLOT_TEMP_7 == 9
+#    define BOOST_PP_SLOT_2_DIGIT_7 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_6 == 0
+#    define BOOST_PP_SLOT_2_DIGIT_6 0
+# elif BOOST_PP_SLOT_TEMP_6 == 1
+#    define BOOST_PP_SLOT_2_DIGIT_6 1
+# elif BOOST_PP_SLOT_TEMP_6 == 2
+#    define BOOST_PP_SLOT_2_DIGIT_6 2
+# elif BOOST_PP_SLOT_TEMP_6 == 3
+#    define BOOST_PP_SLOT_2_DIGIT_6 3
+# elif BOOST_PP_SLOT_TEMP_6 == 4
+#    define BOOST_PP_SLOT_2_DIGIT_6 4
+# elif BOOST_PP_SLOT_TEMP_6 == 5
+#    define BOOST_PP_SLOT_2_DIGIT_6 5
+# elif BOOST_PP_SLOT_TEMP_6 == 6
+#    define BOOST_PP_SLOT_2_DIGIT_6 6
+# elif BOOST_PP_SLOT_TEMP_6 == 7
+#    define BOOST_PP_SLOT_2_DIGIT_6 7
+# elif BOOST_PP_SLOT_TEMP_6 == 8
+#    define BOOST_PP_SLOT_2_DIGIT_6 8
+# elif BOOST_PP_SLOT_TEMP_6 == 9
+#    define BOOST_PP_SLOT_2_DIGIT_6 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_5 == 0
+#    define BOOST_PP_SLOT_2_DIGIT_5 0
+# elif BOOST_PP_SLOT_TEMP_5 == 1
+#    define BOOST_PP_SLOT_2_DIGIT_5 1
+# elif BOOST_PP_SLOT_TEMP_5 == 2
+#    define BOOST_PP_SLOT_2_DIGIT_5 2
+# elif BOOST_PP_SLOT_TEMP_5 == 3
+#    define BOOST_PP_SLOT_2_DIGIT_5 3
+# elif BOOST_PP_SLOT_TEMP_5 == 4
+#    define BOOST_PP_SLOT_2_DIGIT_5 4
+# elif BOOST_PP_SLOT_TEMP_5 == 5
+#    define BOOST_PP_SLOT_2_DIGIT_5 5
+# elif BOOST_PP_SLOT_TEMP_5 == 6
+#    define BOOST_PP_SLOT_2_DIGIT_5 6
+# elif BOOST_PP_SLOT_TEMP_5 == 7
+#    define BOOST_PP_SLOT_2_DIGIT_5 7
+# elif BOOST_PP_SLOT_TEMP_5 == 8
+#    define BOOST_PP_SLOT_2_DIGIT_5 8
+# elif BOOST_PP_SLOT_TEMP_5 == 9
+#    define BOOST_PP_SLOT_2_DIGIT_5 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_4 == 0
+#    define BOOST_PP_SLOT_2_DIGIT_4 0
+# elif BOOST_PP_SLOT_TEMP_4 == 1
+#    define BOOST_PP_SLOT_2_DIGIT_4 1
+# elif BOOST_PP_SLOT_TEMP_4 == 2
+#    define BOOST_PP_SLOT_2_DIGIT_4 2
+# elif BOOST_PP_SLOT_TEMP_4 == 3
+#    define BOOST_PP_SLOT_2_DIGIT_4 3
+# elif BOOST_PP_SLOT_TEMP_4 == 4
+#    define BOOST_PP_SLOT_2_DIGIT_4 4
+# elif BOOST_PP_SLOT_TEMP_4 == 5
+#    define BOOST_PP_SLOT_2_DIGIT_4 5
+# elif BOOST_PP_SLOT_TEMP_4 == 6
+#    define BOOST_PP_SLOT_2_DIGIT_4 6
+# elif BOOST_PP_SLOT_TEMP_4 == 7
+#    define BOOST_PP_SLOT_2_DIGIT_4 7
+# elif BOOST_PP_SLOT_TEMP_4 == 8
+#    define BOOST_PP_SLOT_2_DIGIT_4 8
+# elif BOOST_PP_SLOT_TEMP_4 == 9
+#    define BOOST_PP_SLOT_2_DIGIT_4 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_SLOT_2_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_SLOT_2_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_SLOT_2_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_SLOT_2_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_SLOT_2_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_SLOT_2_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_SLOT_2_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_SLOT_2_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_SLOT_2_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_SLOT_2_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_SLOT_2_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_SLOT_2_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_SLOT_2_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_SLOT_2_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_SLOT_2_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_SLOT_2_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_SLOT_2_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_SLOT_2_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_SLOT_2_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_SLOT_2_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_SLOT_2_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_SLOT_2_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_SLOT_2_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_SLOT_2_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_SLOT_2_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_SLOT_2_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_SLOT_2_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_SLOT_2_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_SLOT_2_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_SLOT_2_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_SLOT_2_DIGIT_10
+#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_2_DIGIT_10, BOOST_PP_SLOT_2_DIGIT_9, BOOST_PP_SLOT_2_DIGIT_8, BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_9
+#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_2_DIGIT_9, BOOST_PP_SLOT_2_DIGIT_8, BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_8
+#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_2_DIGIT_8, BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_7
+#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_2_DIGIT_7, BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_6
+#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_2_DIGIT_6, BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_5
+#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_2_DIGIT_5, BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_4
+#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_2_DIGIT_4, BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_3
+#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_2_DIGIT_3, BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# elif BOOST_PP_SLOT_2_DIGIT_2
+#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_2_DIGIT_2, BOOST_PP_SLOT_2_DIGIT_1)
+# else
+#    define BOOST_PP_SLOT_2() BOOST_PP_SLOT_2_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/slot/detail/slot3.hpp b/vendor/pdalboost/boost/preprocessor/slot/detail/slot3.hpp
new file mode 100644
index 0000000..005cf21
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/slot/detail/slot3.hpp
@@ -0,0 +1,267 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_SLOT_3
+#
+# undef BOOST_PP_SLOT_3_DIGIT_1
+# undef BOOST_PP_SLOT_3_DIGIT_2
+# undef BOOST_PP_SLOT_3_DIGIT_3
+# undef BOOST_PP_SLOT_3_DIGIT_4
+# undef BOOST_PP_SLOT_3_DIGIT_5
+# undef BOOST_PP_SLOT_3_DIGIT_6
+# undef BOOST_PP_SLOT_3_DIGIT_7
+# undef BOOST_PP_SLOT_3_DIGIT_8
+# undef BOOST_PP_SLOT_3_DIGIT_9
+# undef BOOST_PP_SLOT_3_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_10 == 0
+#    define BOOST_PP_SLOT_3_DIGIT_10 0
+# elif BOOST_PP_SLOT_TEMP_10 == 1
+#    define BOOST_PP_SLOT_3_DIGIT_10 1
+# elif BOOST_PP_SLOT_TEMP_10 == 2
+#    define BOOST_PP_SLOT_3_DIGIT_10 2
+# elif BOOST_PP_SLOT_TEMP_10 == 3
+#    define BOOST_PP_SLOT_3_DIGIT_10 3
+# elif BOOST_PP_SLOT_TEMP_10 == 4
+#    define BOOST_PP_SLOT_3_DIGIT_10 4
+# elif BOOST_PP_SLOT_TEMP_10 == 5
+#    define BOOST_PP_SLOT_3_DIGIT_10 5
+# elif BOOST_PP_SLOT_TEMP_10 == 6
+#    define BOOST_PP_SLOT_3_DIGIT_10 6
+# elif BOOST_PP_SLOT_TEMP_10 == 7
+#    define BOOST_PP_SLOT_3_DIGIT_10 7
+# elif BOOST_PP_SLOT_TEMP_10 == 8
+#    define BOOST_PP_SLOT_3_DIGIT_10 8
+# elif BOOST_PP_SLOT_TEMP_10 == 9
+#    define BOOST_PP_SLOT_3_DIGIT_10 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_9 == 0
+#    define BOOST_PP_SLOT_3_DIGIT_9 0
+# elif BOOST_PP_SLOT_TEMP_9 == 1
+#    define BOOST_PP_SLOT_3_DIGIT_9 1
+# elif BOOST_PP_SLOT_TEMP_9 == 2
+#    define BOOST_PP_SLOT_3_DIGIT_9 2
+# elif BOOST_PP_SLOT_TEMP_9 == 3
+#    define BOOST_PP_SLOT_3_DIGIT_9 3
+# elif BOOST_PP_SLOT_TEMP_9 == 4
+#    define BOOST_PP_SLOT_3_DIGIT_9 4
+# elif BOOST_PP_SLOT_TEMP_9 == 5
+#    define BOOST_PP_SLOT_3_DIGIT_9 5
+# elif BOOST_PP_SLOT_TEMP_9 == 6
+#    define BOOST_PP_SLOT_3_DIGIT_9 6
+# elif BOOST_PP_SLOT_TEMP_9 == 7
+#    define BOOST_PP_SLOT_3_DIGIT_9 7
+# elif BOOST_PP_SLOT_TEMP_9 == 8
+#    define BOOST_PP_SLOT_3_DIGIT_9 8
+# elif BOOST_PP_SLOT_TEMP_9 == 9
+#    define BOOST_PP_SLOT_3_DIGIT_9 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_8 == 0
+#    define BOOST_PP_SLOT_3_DIGIT_8 0
+# elif BOOST_PP_SLOT_TEMP_8 == 1
+#    define BOOST_PP_SLOT_3_DIGIT_8 1
+# elif BOOST_PP_SLOT_TEMP_8 == 2
+#    define BOOST_PP_SLOT_3_DIGIT_8 2
+# elif BOOST_PP_SLOT_TEMP_8 == 3
+#    define BOOST_PP_SLOT_3_DIGIT_8 3
+# elif BOOST_PP_SLOT_TEMP_8 == 4
+#    define BOOST_PP_SLOT_3_DIGIT_8 4
+# elif BOOST_PP_SLOT_TEMP_8 == 5
+#    define BOOST_PP_SLOT_3_DIGIT_8 5
+# elif BOOST_PP_SLOT_TEMP_8 == 6
+#    define BOOST_PP_SLOT_3_DIGIT_8 6
+# elif BOOST_PP_SLOT_TEMP_8 == 7
+#    define BOOST_PP_SLOT_3_DIGIT_8 7
+# elif BOOST_PP_SLOT_TEMP_8 == 8
+#    define BOOST_PP_SLOT_3_DIGIT_8 8
+# elif BOOST_PP_SLOT_TEMP_8 == 9
+#    define BOOST_PP_SLOT_3_DIGIT_8 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_7 == 0
+#    define BOOST_PP_SLOT_3_DIGIT_7 0
+# elif BOOST_PP_SLOT_TEMP_7 == 1
+#    define BOOST_PP_SLOT_3_DIGIT_7 1
+# elif BOOST_PP_SLOT_TEMP_7 == 2
+#    define BOOST_PP_SLOT_3_DIGIT_7 2
+# elif BOOST_PP_SLOT_TEMP_7 == 3
+#    define BOOST_PP_SLOT_3_DIGIT_7 3
+# elif BOOST_PP_SLOT_TEMP_7 == 4
+#    define BOOST_PP_SLOT_3_DIGIT_7 4
+# elif BOOST_PP_SLOT_TEMP_7 == 5
+#    define BOOST_PP_SLOT_3_DIGIT_7 5
+# elif BOOST_PP_SLOT_TEMP_7 == 6
+#    define BOOST_PP_SLOT_3_DIGIT_7 6
+# elif BOOST_PP_SLOT_TEMP_7 == 7
+#    define BOOST_PP_SLOT_3_DIGIT_7 7
+# elif BOOST_PP_SLOT_TEMP_7 == 8
+#    define BOOST_PP_SLOT_3_DIGIT_7 8
+# elif BOOST_PP_SLOT_TEMP_7 == 9
+#    define BOOST_PP_SLOT_3_DIGIT_7 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_6 == 0
+#    define BOOST_PP_SLOT_3_DIGIT_6 0
+# elif BOOST_PP_SLOT_TEMP_6 == 1
+#    define BOOST_PP_SLOT_3_DIGIT_6 1
+# elif BOOST_PP_SLOT_TEMP_6 == 2
+#    define BOOST_PP_SLOT_3_DIGIT_6 2
+# elif BOOST_PP_SLOT_TEMP_6 == 3
+#    define BOOST_PP_SLOT_3_DIGIT_6 3
+# elif BOOST_PP_SLOT_TEMP_6 == 4
+#    define BOOST_PP_SLOT_3_DIGIT_6 4
+# elif BOOST_PP_SLOT_TEMP_6 == 5
+#    define BOOST_PP_SLOT_3_DIGIT_6 5
+# elif BOOST_PP_SLOT_TEMP_6 == 6
+#    define BOOST_PP_SLOT_3_DIGIT_6 6
+# elif BOOST_PP_SLOT_TEMP_6 == 7
+#    define BOOST_PP_SLOT_3_DIGIT_6 7
+# elif BOOST_PP_SLOT_TEMP_6 == 8
+#    define BOOST_PP_SLOT_3_DIGIT_6 8
+# elif BOOST_PP_SLOT_TEMP_6 == 9
+#    define BOOST_PP_SLOT_3_DIGIT_6 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_5 == 0
+#    define BOOST_PP_SLOT_3_DIGIT_5 0
+# elif BOOST_PP_SLOT_TEMP_5 == 1
+#    define BOOST_PP_SLOT_3_DIGIT_5 1
+# elif BOOST_PP_SLOT_TEMP_5 == 2
+#    define BOOST_PP_SLOT_3_DIGIT_5 2
+# elif BOOST_PP_SLOT_TEMP_5 == 3
+#    define BOOST_PP_SLOT_3_DIGIT_5 3
+# elif BOOST_PP_SLOT_TEMP_5 == 4
+#    define BOOST_PP_SLOT_3_DIGIT_5 4
+# elif BOOST_PP_SLOT_TEMP_5 == 5
+#    define BOOST_PP_SLOT_3_DIGIT_5 5
+# elif BOOST_PP_SLOT_TEMP_5 == 6
+#    define BOOST_PP_SLOT_3_DIGIT_5 6
+# elif BOOST_PP_SLOT_TEMP_5 == 7
+#    define BOOST_PP_SLOT_3_DIGIT_5 7
+# elif BOOST_PP_SLOT_TEMP_5 == 8
+#    define BOOST_PP_SLOT_3_DIGIT_5 8
+# elif BOOST_PP_SLOT_TEMP_5 == 9
+#    define BOOST_PP_SLOT_3_DIGIT_5 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_4 == 0
+#    define BOOST_PP_SLOT_3_DIGIT_4 0
+# elif BOOST_PP_SLOT_TEMP_4 == 1
+#    define BOOST_PP_SLOT_3_DIGIT_4 1
+# elif BOOST_PP_SLOT_TEMP_4 == 2
+#    define BOOST_PP_SLOT_3_DIGIT_4 2
+# elif BOOST_PP_SLOT_TEMP_4 == 3
+#    define BOOST_PP_SLOT_3_DIGIT_4 3
+# elif BOOST_PP_SLOT_TEMP_4 == 4
+#    define BOOST_PP_SLOT_3_DIGIT_4 4
+# elif BOOST_PP_SLOT_TEMP_4 == 5
+#    define BOOST_PP_SLOT_3_DIGIT_4 5
+# elif BOOST_PP_SLOT_TEMP_4 == 6
+#    define BOOST_PP_SLOT_3_DIGIT_4 6
+# elif BOOST_PP_SLOT_TEMP_4 == 7
+#    define BOOST_PP_SLOT_3_DIGIT_4 7
+# elif BOOST_PP_SLOT_TEMP_4 == 8
+#    define BOOST_PP_SLOT_3_DIGIT_4 8
+# elif BOOST_PP_SLOT_TEMP_4 == 9
+#    define BOOST_PP_SLOT_3_DIGIT_4 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_SLOT_3_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_SLOT_3_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_SLOT_3_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_SLOT_3_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_SLOT_3_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_SLOT_3_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_SLOT_3_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_SLOT_3_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_SLOT_3_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_SLOT_3_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_SLOT_3_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_SLOT_3_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_SLOT_3_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_SLOT_3_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_SLOT_3_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_SLOT_3_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_SLOT_3_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_SLOT_3_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_SLOT_3_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_SLOT_3_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_SLOT_3_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_SLOT_3_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_SLOT_3_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_SLOT_3_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_SLOT_3_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_SLOT_3_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_SLOT_3_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_SLOT_3_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_SLOT_3_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_SLOT_3_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_SLOT_3_DIGIT_10
+#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_3_DIGIT_10, BOOST_PP_SLOT_3_DIGIT_9, BOOST_PP_SLOT_3_DIGIT_8, BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_9
+#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_3_DIGIT_9, BOOST_PP_SLOT_3_DIGIT_8, BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_8
+#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_3_DIGIT_8, BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_7
+#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_3_DIGIT_7, BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_6
+#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_3_DIGIT_6, BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_5
+#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_3_DIGIT_5, BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_4
+#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_3_DIGIT_4, BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_3
+#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_3_DIGIT_3, BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# elif BOOST_PP_SLOT_3_DIGIT_2
+#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_3_DIGIT_2, BOOST_PP_SLOT_3_DIGIT_1)
+# else
+#    define BOOST_PP_SLOT_3() BOOST_PP_SLOT_3_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/slot/detail/slot4.hpp b/vendor/pdalboost/boost/preprocessor/slot/detail/slot4.hpp
new file mode 100644
index 0000000..9aa4d8a
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/slot/detail/slot4.hpp
@@ -0,0 +1,267 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_SLOT_4
+#
+# undef BOOST_PP_SLOT_4_DIGIT_1
+# undef BOOST_PP_SLOT_4_DIGIT_2
+# undef BOOST_PP_SLOT_4_DIGIT_3
+# undef BOOST_PP_SLOT_4_DIGIT_4
+# undef BOOST_PP_SLOT_4_DIGIT_5
+# undef BOOST_PP_SLOT_4_DIGIT_6
+# undef BOOST_PP_SLOT_4_DIGIT_7
+# undef BOOST_PP_SLOT_4_DIGIT_8
+# undef BOOST_PP_SLOT_4_DIGIT_9
+# undef BOOST_PP_SLOT_4_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_10 == 0
+#    define BOOST_PP_SLOT_4_DIGIT_10 0
+# elif BOOST_PP_SLOT_TEMP_10 == 1
+#    define BOOST_PP_SLOT_4_DIGIT_10 1
+# elif BOOST_PP_SLOT_TEMP_10 == 2
+#    define BOOST_PP_SLOT_4_DIGIT_10 2
+# elif BOOST_PP_SLOT_TEMP_10 == 3
+#    define BOOST_PP_SLOT_4_DIGIT_10 3
+# elif BOOST_PP_SLOT_TEMP_10 == 4
+#    define BOOST_PP_SLOT_4_DIGIT_10 4
+# elif BOOST_PP_SLOT_TEMP_10 == 5
+#    define BOOST_PP_SLOT_4_DIGIT_10 5
+# elif BOOST_PP_SLOT_TEMP_10 == 6
+#    define BOOST_PP_SLOT_4_DIGIT_10 6
+# elif BOOST_PP_SLOT_TEMP_10 == 7
+#    define BOOST_PP_SLOT_4_DIGIT_10 7
+# elif BOOST_PP_SLOT_TEMP_10 == 8
+#    define BOOST_PP_SLOT_4_DIGIT_10 8
+# elif BOOST_PP_SLOT_TEMP_10 == 9
+#    define BOOST_PP_SLOT_4_DIGIT_10 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_9 == 0
+#    define BOOST_PP_SLOT_4_DIGIT_9 0
+# elif BOOST_PP_SLOT_TEMP_9 == 1
+#    define BOOST_PP_SLOT_4_DIGIT_9 1
+# elif BOOST_PP_SLOT_TEMP_9 == 2
+#    define BOOST_PP_SLOT_4_DIGIT_9 2
+# elif BOOST_PP_SLOT_TEMP_9 == 3
+#    define BOOST_PP_SLOT_4_DIGIT_9 3
+# elif BOOST_PP_SLOT_TEMP_9 == 4
+#    define BOOST_PP_SLOT_4_DIGIT_9 4
+# elif BOOST_PP_SLOT_TEMP_9 == 5
+#    define BOOST_PP_SLOT_4_DIGIT_9 5
+# elif BOOST_PP_SLOT_TEMP_9 == 6
+#    define BOOST_PP_SLOT_4_DIGIT_9 6
+# elif BOOST_PP_SLOT_TEMP_9 == 7
+#    define BOOST_PP_SLOT_4_DIGIT_9 7
+# elif BOOST_PP_SLOT_TEMP_9 == 8
+#    define BOOST_PP_SLOT_4_DIGIT_9 8
+# elif BOOST_PP_SLOT_TEMP_9 == 9
+#    define BOOST_PP_SLOT_4_DIGIT_9 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_8 == 0
+#    define BOOST_PP_SLOT_4_DIGIT_8 0
+# elif BOOST_PP_SLOT_TEMP_8 == 1
+#    define BOOST_PP_SLOT_4_DIGIT_8 1
+# elif BOOST_PP_SLOT_TEMP_8 == 2
+#    define BOOST_PP_SLOT_4_DIGIT_8 2
+# elif BOOST_PP_SLOT_TEMP_8 == 3
+#    define BOOST_PP_SLOT_4_DIGIT_8 3
+# elif BOOST_PP_SLOT_TEMP_8 == 4
+#    define BOOST_PP_SLOT_4_DIGIT_8 4
+# elif BOOST_PP_SLOT_TEMP_8 == 5
+#    define BOOST_PP_SLOT_4_DIGIT_8 5
+# elif BOOST_PP_SLOT_TEMP_8 == 6
+#    define BOOST_PP_SLOT_4_DIGIT_8 6
+# elif BOOST_PP_SLOT_TEMP_8 == 7
+#    define BOOST_PP_SLOT_4_DIGIT_8 7
+# elif BOOST_PP_SLOT_TEMP_8 == 8
+#    define BOOST_PP_SLOT_4_DIGIT_8 8
+# elif BOOST_PP_SLOT_TEMP_8 == 9
+#    define BOOST_PP_SLOT_4_DIGIT_8 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_7 == 0
+#    define BOOST_PP_SLOT_4_DIGIT_7 0
+# elif BOOST_PP_SLOT_TEMP_7 == 1
+#    define BOOST_PP_SLOT_4_DIGIT_7 1
+# elif BOOST_PP_SLOT_TEMP_7 == 2
+#    define BOOST_PP_SLOT_4_DIGIT_7 2
+# elif BOOST_PP_SLOT_TEMP_7 == 3
+#    define BOOST_PP_SLOT_4_DIGIT_7 3
+# elif BOOST_PP_SLOT_TEMP_7 == 4
+#    define BOOST_PP_SLOT_4_DIGIT_7 4
+# elif BOOST_PP_SLOT_TEMP_7 == 5
+#    define BOOST_PP_SLOT_4_DIGIT_7 5
+# elif BOOST_PP_SLOT_TEMP_7 == 6
+#    define BOOST_PP_SLOT_4_DIGIT_7 6
+# elif BOOST_PP_SLOT_TEMP_7 == 7
+#    define BOOST_PP_SLOT_4_DIGIT_7 7
+# elif BOOST_PP_SLOT_TEMP_7 == 8
+#    define BOOST_PP_SLOT_4_DIGIT_7 8
+# elif BOOST_PP_SLOT_TEMP_7 == 9
+#    define BOOST_PP_SLOT_4_DIGIT_7 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_6 == 0
+#    define BOOST_PP_SLOT_4_DIGIT_6 0
+# elif BOOST_PP_SLOT_TEMP_6 == 1
+#    define BOOST_PP_SLOT_4_DIGIT_6 1
+# elif BOOST_PP_SLOT_TEMP_6 == 2
+#    define BOOST_PP_SLOT_4_DIGIT_6 2
+# elif BOOST_PP_SLOT_TEMP_6 == 3
+#    define BOOST_PP_SLOT_4_DIGIT_6 3
+# elif BOOST_PP_SLOT_TEMP_6 == 4
+#    define BOOST_PP_SLOT_4_DIGIT_6 4
+# elif BOOST_PP_SLOT_TEMP_6 == 5
+#    define BOOST_PP_SLOT_4_DIGIT_6 5
+# elif BOOST_PP_SLOT_TEMP_6 == 6
+#    define BOOST_PP_SLOT_4_DIGIT_6 6
+# elif BOOST_PP_SLOT_TEMP_6 == 7
+#    define BOOST_PP_SLOT_4_DIGIT_6 7
+# elif BOOST_PP_SLOT_TEMP_6 == 8
+#    define BOOST_PP_SLOT_4_DIGIT_6 8
+# elif BOOST_PP_SLOT_TEMP_6 == 9
+#    define BOOST_PP_SLOT_4_DIGIT_6 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_5 == 0
+#    define BOOST_PP_SLOT_4_DIGIT_5 0
+# elif BOOST_PP_SLOT_TEMP_5 == 1
+#    define BOOST_PP_SLOT_4_DIGIT_5 1
+# elif BOOST_PP_SLOT_TEMP_5 == 2
+#    define BOOST_PP_SLOT_4_DIGIT_5 2
+# elif BOOST_PP_SLOT_TEMP_5 == 3
+#    define BOOST_PP_SLOT_4_DIGIT_5 3
+# elif BOOST_PP_SLOT_TEMP_5 == 4
+#    define BOOST_PP_SLOT_4_DIGIT_5 4
+# elif BOOST_PP_SLOT_TEMP_5 == 5
+#    define BOOST_PP_SLOT_4_DIGIT_5 5
+# elif BOOST_PP_SLOT_TEMP_5 == 6
+#    define BOOST_PP_SLOT_4_DIGIT_5 6
+# elif BOOST_PP_SLOT_TEMP_5 == 7
+#    define BOOST_PP_SLOT_4_DIGIT_5 7
+# elif BOOST_PP_SLOT_TEMP_5 == 8
+#    define BOOST_PP_SLOT_4_DIGIT_5 8
+# elif BOOST_PP_SLOT_TEMP_5 == 9
+#    define BOOST_PP_SLOT_4_DIGIT_5 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_4 == 0
+#    define BOOST_PP_SLOT_4_DIGIT_4 0
+# elif BOOST_PP_SLOT_TEMP_4 == 1
+#    define BOOST_PP_SLOT_4_DIGIT_4 1
+# elif BOOST_PP_SLOT_TEMP_4 == 2
+#    define BOOST_PP_SLOT_4_DIGIT_4 2
+# elif BOOST_PP_SLOT_TEMP_4 == 3
+#    define BOOST_PP_SLOT_4_DIGIT_4 3
+# elif BOOST_PP_SLOT_TEMP_4 == 4
+#    define BOOST_PP_SLOT_4_DIGIT_4 4
+# elif BOOST_PP_SLOT_TEMP_4 == 5
+#    define BOOST_PP_SLOT_4_DIGIT_4 5
+# elif BOOST_PP_SLOT_TEMP_4 == 6
+#    define BOOST_PP_SLOT_4_DIGIT_4 6
+# elif BOOST_PP_SLOT_TEMP_4 == 7
+#    define BOOST_PP_SLOT_4_DIGIT_4 7
+# elif BOOST_PP_SLOT_TEMP_4 == 8
+#    define BOOST_PP_SLOT_4_DIGIT_4 8
+# elif BOOST_PP_SLOT_TEMP_4 == 9
+#    define BOOST_PP_SLOT_4_DIGIT_4 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_SLOT_4_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_SLOT_4_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_SLOT_4_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_SLOT_4_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_SLOT_4_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_SLOT_4_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_SLOT_4_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_SLOT_4_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_SLOT_4_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_SLOT_4_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_SLOT_4_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_SLOT_4_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_SLOT_4_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_SLOT_4_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_SLOT_4_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_SLOT_4_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_SLOT_4_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_SLOT_4_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_SLOT_4_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_SLOT_4_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_SLOT_4_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_SLOT_4_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_SLOT_4_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_SLOT_4_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_SLOT_4_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_SLOT_4_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_SLOT_4_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_SLOT_4_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_SLOT_4_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_SLOT_4_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_SLOT_4_DIGIT_10
+#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_4_DIGIT_10, BOOST_PP_SLOT_4_DIGIT_9, BOOST_PP_SLOT_4_DIGIT_8, BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_9
+#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_4_DIGIT_9, BOOST_PP_SLOT_4_DIGIT_8, BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_8
+#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_4_DIGIT_8, BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_7
+#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_4_DIGIT_7, BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_6
+#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_4_DIGIT_6, BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_5
+#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_4_DIGIT_5, BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_4
+#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_4_DIGIT_4, BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_3
+#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_4_DIGIT_3, BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# elif BOOST_PP_SLOT_4_DIGIT_2
+#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_4_DIGIT_2, BOOST_PP_SLOT_4_DIGIT_1)
+# else
+#    define BOOST_PP_SLOT_4() BOOST_PP_SLOT_4_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/slot/detail/slot5.hpp b/vendor/pdalboost/boost/preprocessor/slot/detail/slot5.hpp
new file mode 100644
index 0000000..d17535d
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/slot/detail/slot5.hpp
@@ -0,0 +1,267 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# include <boost/preprocessor/slot/detail/shared.hpp>
+#
+# undef BOOST_PP_SLOT_5
+#
+# undef BOOST_PP_SLOT_5_DIGIT_1
+# undef BOOST_PP_SLOT_5_DIGIT_2
+# undef BOOST_PP_SLOT_5_DIGIT_3
+# undef BOOST_PP_SLOT_5_DIGIT_4
+# undef BOOST_PP_SLOT_5_DIGIT_5
+# undef BOOST_PP_SLOT_5_DIGIT_6
+# undef BOOST_PP_SLOT_5_DIGIT_7
+# undef BOOST_PP_SLOT_5_DIGIT_8
+# undef BOOST_PP_SLOT_5_DIGIT_9
+# undef BOOST_PP_SLOT_5_DIGIT_10
+#
+# if BOOST_PP_SLOT_TEMP_10 == 0
+#    define BOOST_PP_SLOT_5_DIGIT_10 0
+# elif BOOST_PP_SLOT_TEMP_10 == 1
+#    define BOOST_PP_SLOT_5_DIGIT_10 1
+# elif BOOST_PP_SLOT_TEMP_10 == 2
+#    define BOOST_PP_SLOT_5_DIGIT_10 2
+# elif BOOST_PP_SLOT_TEMP_10 == 3
+#    define BOOST_PP_SLOT_5_DIGIT_10 3
+# elif BOOST_PP_SLOT_TEMP_10 == 4
+#    define BOOST_PP_SLOT_5_DIGIT_10 4
+# elif BOOST_PP_SLOT_TEMP_10 == 5
+#    define BOOST_PP_SLOT_5_DIGIT_10 5
+# elif BOOST_PP_SLOT_TEMP_10 == 6
+#    define BOOST_PP_SLOT_5_DIGIT_10 6
+# elif BOOST_PP_SLOT_TEMP_10 == 7
+#    define BOOST_PP_SLOT_5_DIGIT_10 7
+# elif BOOST_PP_SLOT_TEMP_10 == 8
+#    define BOOST_PP_SLOT_5_DIGIT_10 8
+# elif BOOST_PP_SLOT_TEMP_10 == 9
+#    define BOOST_PP_SLOT_5_DIGIT_10 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_9 == 0
+#    define BOOST_PP_SLOT_5_DIGIT_9 0
+# elif BOOST_PP_SLOT_TEMP_9 == 1
+#    define BOOST_PP_SLOT_5_DIGIT_9 1
+# elif BOOST_PP_SLOT_TEMP_9 == 2
+#    define BOOST_PP_SLOT_5_DIGIT_9 2
+# elif BOOST_PP_SLOT_TEMP_9 == 3
+#    define BOOST_PP_SLOT_5_DIGIT_9 3
+# elif BOOST_PP_SLOT_TEMP_9 == 4
+#    define BOOST_PP_SLOT_5_DIGIT_9 4
+# elif BOOST_PP_SLOT_TEMP_9 == 5
+#    define BOOST_PP_SLOT_5_DIGIT_9 5
+# elif BOOST_PP_SLOT_TEMP_9 == 6
+#    define BOOST_PP_SLOT_5_DIGIT_9 6
+# elif BOOST_PP_SLOT_TEMP_9 == 7
+#    define BOOST_PP_SLOT_5_DIGIT_9 7
+# elif BOOST_PP_SLOT_TEMP_9 == 8
+#    define BOOST_PP_SLOT_5_DIGIT_9 8
+# elif BOOST_PP_SLOT_TEMP_9 == 9
+#    define BOOST_PP_SLOT_5_DIGIT_9 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_8 == 0
+#    define BOOST_PP_SLOT_5_DIGIT_8 0
+# elif BOOST_PP_SLOT_TEMP_8 == 1
+#    define BOOST_PP_SLOT_5_DIGIT_8 1
+# elif BOOST_PP_SLOT_TEMP_8 == 2
+#    define BOOST_PP_SLOT_5_DIGIT_8 2
+# elif BOOST_PP_SLOT_TEMP_8 == 3
+#    define BOOST_PP_SLOT_5_DIGIT_8 3
+# elif BOOST_PP_SLOT_TEMP_8 == 4
+#    define BOOST_PP_SLOT_5_DIGIT_8 4
+# elif BOOST_PP_SLOT_TEMP_8 == 5
+#    define BOOST_PP_SLOT_5_DIGIT_8 5
+# elif BOOST_PP_SLOT_TEMP_8 == 6
+#    define BOOST_PP_SLOT_5_DIGIT_8 6
+# elif BOOST_PP_SLOT_TEMP_8 == 7
+#    define BOOST_PP_SLOT_5_DIGIT_8 7
+# elif BOOST_PP_SLOT_TEMP_8 == 8
+#    define BOOST_PP_SLOT_5_DIGIT_8 8
+# elif BOOST_PP_SLOT_TEMP_8 == 9
+#    define BOOST_PP_SLOT_5_DIGIT_8 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_7 == 0
+#    define BOOST_PP_SLOT_5_DIGIT_7 0
+# elif BOOST_PP_SLOT_TEMP_7 == 1
+#    define BOOST_PP_SLOT_5_DIGIT_7 1
+# elif BOOST_PP_SLOT_TEMP_7 == 2
+#    define BOOST_PP_SLOT_5_DIGIT_7 2
+# elif BOOST_PP_SLOT_TEMP_7 == 3
+#    define BOOST_PP_SLOT_5_DIGIT_7 3
+# elif BOOST_PP_SLOT_TEMP_7 == 4
+#    define BOOST_PP_SLOT_5_DIGIT_7 4
+# elif BOOST_PP_SLOT_TEMP_7 == 5
+#    define BOOST_PP_SLOT_5_DIGIT_7 5
+# elif BOOST_PP_SLOT_TEMP_7 == 6
+#    define BOOST_PP_SLOT_5_DIGIT_7 6
+# elif BOOST_PP_SLOT_TEMP_7 == 7
+#    define BOOST_PP_SLOT_5_DIGIT_7 7
+# elif BOOST_PP_SLOT_TEMP_7 == 8
+#    define BOOST_PP_SLOT_5_DIGIT_7 8
+# elif BOOST_PP_SLOT_TEMP_7 == 9
+#    define BOOST_PP_SLOT_5_DIGIT_7 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_6 == 0
+#    define BOOST_PP_SLOT_5_DIGIT_6 0
+# elif BOOST_PP_SLOT_TEMP_6 == 1
+#    define BOOST_PP_SLOT_5_DIGIT_6 1
+# elif BOOST_PP_SLOT_TEMP_6 == 2
+#    define BOOST_PP_SLOT_5_DIGIT_6 2
+# elif BOOST_PP_SLOT_TEMP_6 == 3
+#    define BOOST_PP_SLOT_5_DIGIT_6 3
+# elif BOOST_PP_SLOT_TEMP_6 == 4
+#    define BOOST_PP_SLOT_5_DIGIT_6 4
+# elif BOOST_PP_SLOT_TEMP_6 == 5
+#    define BOOST_PP_SLOT_5_DIGIT_6 5
+# elif BOOST_PP_SLOT_TEMP_6 == 6
+#    define BOOST_PP_SLOT_5_DIGIT_6 6
+# elif BOOST_PP_SLOT_TEMP_6 == 7
+#    define BOOST_PP_SLOT_5_DIGIT_6 7
+# elif BOOST_PP_SLOT_TEMP_6 == 8
+#    define BOOST_PP_SLOT_5_DIGIT_6 8
+# elif BOOST_PP_SLOT_TEMP_6 == 9
+#    define BOOST_PP_SLOT_5_DIGIT_6 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_5 == 0
+#    define BOOST_PP_SLOT_5_DIGIT_5 0
+# elif BOOST_PP_SLOT_TEMP_5 == 1
+#    define BOOST_PP_SLOT_5_DIGIT_5 1
+# elif BOOST_PP_SLOT_TEMP_5 == 2
+#    define BOOST_PP_SLOT_5_DIGIT_5 2
+# elif BOOST_PP_SLOT_TEMP_5 == 3
+#    define BOOST_PP_SLOT_5_DIGIT_5 3
+# elif BOOST_PP_SLOT_TEMP_5 == 4
+#    define BOOST_PP_SLOT_5_DIGIT_5 4
+# elif BOOST_PP_SLOT_TEMP_5 == 5
+#    define BOOST_PP_SLOT_5_DIGIT_5 5
+# elif BOOST_PP_SLOT_TEMP_5 == 6
+#    define BOOST_PP_SLOT_5_DIGIT_5 6
+# elif BOOST_PP_SLOT_TEMP_5 == 7
+#    define BOOST_PP_SLOT_5_DIGIT_5 7
+# elif BOOST_PP_SLOT_TEMP_5 == 8
+#    define BOOST_PP_SLOT_5_DIGIT_5 8
+# elif BOOST_PP_SLOT_TEMP_5 == 9
+#    define BOOST_PP_SLOT_5_DIGIT_5 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_4 == 0
+#    define BOOST_PP_SLOT_5_DIGIT_4 0
+# elif BOOST_PP_SLOT_TEMP_4 == 1
+#    define BOOST_PP_SLOT_5_DIGIT_4 1
+# elif BOOST_PP_SLOT_TEMP_4 == 2
+#    define BOOST_PP_SLOT_5_DIGIT_4 2
+# elif BOOST_PP_SLOT_TEMP_4 == 3
+#    define BOOST_PP_SLOT_5_DIGIT_4 3
+# elif BOOST_PP_SLOT_TEMP_4 == 4
+#    define BOOST_PP_SLOT_5_DIGIT_4 4
+# elif BOOST_PP_SLOT_TEMP_4 == 5
+#    define BOOST_PP_SLOT_5_DIGIT_4 5
+# elif BOOST_PP_SLOT_TEMP_4 == 6
+#    define BOOST_PP_SLOT_5_DIGIT_4 6
+# elif BOOST_PP_SLOT_TEMP_4 == 7
+#    define BOOST_PP_SLOT_5_DIGIT_4 7
+# elif BOOST_PP_SLOT_TEMP_4 == 8
+#    define BOOST_PP_SLOT_5_DIGIT_4 8
+# elif BOOST_PP_SLOT_TEMP_4 == 9
+#    define BOOST_PP_SLOT_5_DIGIT_4 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_3 == 0
+#    define BOOST_PP_SLOT_5_DIGIT_3 0
+# elif BOOST_PP_SLOT_TEMP_3 == 1
+#    define BOOST_PP_SLOT_5_DIGIT_3 1
+# elif BOOST_PP_SLOT_TEMP_3 == 2
+#    define BOOST_PP_SLOT_5_DIGIT_3 2
+# elif BOOST_PP_SLOT_TEMP_3 == 3
+#    define BOOST_PP_SLOT_5_DIGIT_3 3
+# elif BOOST_PP_SLOT_TEMP_3 == 4
+#    define BOOST_PP_SLOT_5_DIGIT_3 4
+# elif BOOST_PP_SLOT_TEMP_3 == 5
+#    define BOOST_PP_SLOT_5_DIGIT_3 5
+# elif BOOST_PP_SLOT_TEMP_3 == 6
+#    define BOOST_PP_SLOT_5_DIGIT_3 6
+# elif BOOST_PP_SLOT_TEMP_3 == 7
+#    define BOOST_PP_SLOT_5_DIGIT_3 7
+# elif BOOST_PP_SLOT_TEMP_3 == 8
+#    define BOOST_PP_SLOT_5_DIGIT_3 8
+# elif BOOST_PP_SLOT_TEMP_3 == 9
+#    define BOOST_PP_SLOT_5_DIGIT_3 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_2 == 0
+#    define BOOST_PP_SLOT_5_DIGIT_2 0
+# elif BOOST_PP_SLOT_TEMP_2 == 1
+#    define BOOST_PP_SLOT_5_DIGIT_2 1
+# elif BOOST_PP_SLOT_TEMP_2 == 2
+#    define BOOST_PP_SLOT_5_DIGIT_2 2
+# elif BOOST_PP_SLOT_TEMP_2 == 3
+#    define BOOST_PP_SLOT_5_DIGIT_2 3
+# elif BOOST_PP_SLOT_TEMP_2 == 4
+#    define BOOST_PP_SLOT_5_DIGIT_2 4
+# elif BOOST_PP_SLOT_TEMP_2 == 5
+#    define BOOST_PP_SLOT_5_DIGIT_2 5
+# elif BOOST_PP_SLOT_TEMP_2 == 6
+#    define BOOST_PP_SLOT_5_DIGIT_2 6
+# elif BOOST_PP_SLOT_TEMP_2 == 7
+#    define BOOST_PP_SLOT_5_DIGIT_2 7
+# elif BOOST_PP_SLOT_TEMP_2 == 8
+#    define BOOST_PP_SLOT_5_DIGIT_2 8
+# elif BOOST_PP_SLOT_TEMP_2 == 9
+#    define BOOST_PP_SLOT_5_DIGIT_2 9
+# endif
+#
+# if BOOST_PP_SLOT_TEMP_1 == 0
+#    define BOOST_PP_SLOT_5_DIGIT_1 0
+# elif BOOST_PP_SLOT_TEMP_1 == 1
+#    define BOOST_PP_SLOT_5_DIGIT_1 1
+# elif BOOST_PP_SLOT_TEMP_1 == 2
+#    define BOOST_PP_SLOT_5_DIGIT_1 2
+# elif BOOST_PP_SLOT_TEMP_1 == 3
+#    define BOOST_PP_SLOT_5_DIGIT_1 3
+# elif BOOST_PP_SLOT_TEMP_1 == 4
+#    define BOOST_PP_SLOT_5_DIGIT_1 4
+# elif BOOST_PP_SLOT_TEMP_1 == 5
+#    define BOOST_PP_SLOT_5_DIGIT_1 5
+# elif BOOST_PP_SLOT_TEMP_1 == 6
+#    define BOOST_PP_SLOT_5_DIGIT_1 6
+# elif BOOST_PP_SLOT_TEMP_1 == 7
+#    define BOOST_PP_SLOT_5_DIGIT_1 7
+# elif BOOST_PP_SLOT_TEMP_1 == 8
+#    define BOOST_PP_SLOT_5_DIGIT_1 8
+# elif BOOST_PP_SLOT_TEMP_1 == 9
+#    define BOOST_PP_SLOT_5_DIGIT_1 9
+# endif
+#
+# if BOOST_PP_SLOT_5_DIGIT_10
+#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_10(BOOST_PP_SLOT_5_DIGIT_10, BOOST_PP_SLOT_5_DIGIT_9, BOOST_PP_SLOT_5_DIGIT_8, BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_9
+#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_9(BOOST_PP_SLOT_5_DIGIT_9, BOOST_PP_SLOT_5_DIGIT_8, BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_8
+#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_8(BOOST_PP_SLOT_5_DIGIT_8, BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_7
+#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_7(BOOST_PP_SLOT_5_DIGIT_7, BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_6
+#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_6(BOOST_PP_SLOT_5_DIGIT_6, BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_5
+#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_5(BOOST_PP_SLOT_5_DIGIT_5, BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_4
+#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_4(BOOST_PP_SLOT_5_DIGIT_4, BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_3
+#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_3(BOOST_PP_SLOT_5_DIGIT_3, BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# elif BOOST_PP_SLOT_5_DIGIT_2
+#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_CC_2(BOOST_PP_SLOT_5_DIGIT_2, BOOST_PP_SLOT_5_DIGIT_1)
+# else
+#    define BOOST_PP_SLOT_5() BOOST_PP_SLOT_5_DIGIT_1
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/slot/slot.hpp b/vendor/pdalboost/boost/preprocessor/slot/slot.hpp
new file mode 100644
index 0000000..147b097
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/slot/slot.hpp
@@ -0,0 +1,32 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002.
+#  *     Distributed under the Boost Software License, Version 1.0. (See
+#  *     accompanying file LICENSE_1_0.txt or copy at
+#  *     http://www.boost.org/LICENSE_1_0.txt)
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_SLOT_SLOT_HPP
+# define BOOST_PREPROCESSOR_SLOT_SLOT_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/slot/detail/def.hpp>
+#
+# /* BOOST_PP_ASSIGN_SLOT */
+#
+# define BOOST_PP_ASSIGN_SLOT(i) BOOST_PP_CAT(BOOST_PP_ASSIGN_SLOT_, i)
+#
+# define BOOST_PP_ASSIGN_SLOT_1 <boost/preprocessor/slot/detail/slot1.hpp>
+# define BOOST_PP_ASSIGN_SLOT_2 <boost/preprocessor/slot/detail/slot2.hpp>
+# define BOOST_PP_ASSIGN_SLOT_3 <boost/preprocessor/slot/detail/slot3.hpp>
+# define BOOST_PP_ASSIGN_SLOT_4 <boost/preprocessor/slot/detail/slot4.hpp>
+# define BOOST_PP_ASSIGN_SLOT_5 <boost/preprocessor/slot/detail/slot5.hpp>
+#
+# /* BOOST_PP_SLOT */
+#
+# define BOOST_PP_SLOT(i) BOOST_PP_CAT(BOOST_PP_SLOT_, i)()
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/stringize.hpp b/vendor/pdalboost/boost/preprocessor/stringize.hpp
new file mode 100644
index 0000000..64dd5fd
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/stringize.hpp
@@ -0,0 +1,33 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_STRINGIZE_HPP
+# define BOOST_PREPROCESSOR_STRINGIZE_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_STRINGIZE */
+#
+# if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#    define BOOST_PP_STRINGIZE(text) BOOST_PP_STRINGIZE_A((text))
+#    define BOOST_PP_STRINGIZE_A(arg) BOOST_PP_STRINGIZE_I arg
+# elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#    define BOOST_PP_STRINGIZE(text) BOOST_PP_STRINGIZE_OO((text))
+#    define BOOST_PP_STRINGIZE_OO(par) BOOST_PP_STRINGIZE_I ## par
+# else
+#    define BOOST_PP_STRINGIZE(text) BOOST_PP_STRINGIZE_I(text)
+# endif
+#
+# define BOOST_PP_STRINGIZE_I(text) #text
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/tuple/detail/is_single_return.hpp b/vendor/pdalboost/boost/preprocessor/tuple/detail/is_single_return.hpp
new file mode 100644
index 0000000..02a4fb2
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/tuple/detail/is_single_return.hpp
@@ -0,0 +1,28 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Edward Diener 2014.                                    *
+#  *     Distributed under the Boost Software License, Version 1.0. (See      *
+#  *     accompanying file LICENSE_1_0.txt or copy at                         *
+#  *     http://www.boost.org/LICENSE_1_0.txt)                                *
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_DETAIL_IS_SINGLE_RETURN_HPP
+# define BOOST_PREPROCESSOR_TUPLE_DETAIL_IS_SINGLE_RETURN_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_TUPLE_IS_SINGLE_RETURN */
+#
+# if BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC
+# include <boost/preprocessor/control/iif.hpp>
+# include <boost/preprocessor/facilities/is_1.hpp>
+# include <boost/preprocessor/tuple/size.hpp>
+# define BOOST_PP_TUPLE_IS_SINGLE_RETURN(sr,nsr,tuple)	\
+	BOOST_PP_IIF(BOOST_PP_IS_1(BOOST_PP_TUPLE_SIZE(tuple)),sr,nsr) \
+	/**/
+# endif /* BOOST_PP_VARIADICS && BOOST_PP_VARIADICS_MSVC */
+#
+# endif /* BOOST_PREPROCESSOR_TUPLE_DETAIL_IS_SINGLE_RETURN_HPP */
diff --git a/vendor/pdalboost/boost/preprocessor/tuple/eat.hpp b/vendor/pdalboost/boost/preprocessor/tuple/eat.hpp
new file mode 100644
index 0000000..7e8a100
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/tuple/eat.hpp
@@ -0,0 +1,115 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002-2011) */
+# /* Revised by Edward Diener (2011,2015) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_EAT_HPP
+# define BOOST_PREPROCESSOR_TUPLE_EAT_HPP
+#
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_EAT */
+#
+# if BOOST_PP_VARIADICS
+#    define BOOST_PP_EAT(...)
+# else
+#    define BOOST_PP_EAT(x)
+# endif
+#
+# /* BOOST_PP_TUPLE_EAT */
+#
+# if BOOST_PP_VARIADICS
+#    define BOOST_PP_TUPLE_EAT(size) BOOST_PP_EAT
+# else
+#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#        define BOOST_PP_TUPLE_EAT(size) BOOST_PP_TUPLE_EAT_I(size)
+#    else
+#        define BOOST_PP_TUPLE_EAT(size) BOOST_PP_TUPLE_EAT_OO((size))
+#        define BOOST_PP_TUPLE_EAT_OO(par) BOOST_PP_TUPLE_EAT_I ## par
+#    endif
+#    define BOOST_PP_TUPLE_EAT_I(size) BOOST_PP_TUPLE_EAT_ ## size
+# endif
+#
+# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#     define BOOST_PP_TUPLE_EAT_N(size) BOOST_PP_TUPLE_EAT_N_I(size)
+# else
+#     define BOOST_PP_TUPLE_EAT_N(size) BOOST_PP_TUPLE_EAT_N_OO((size))
+#     define BOOST_PP_TUPLE_EAT_N_OO(par) BOOST_PP_TUPLE_EAT_N_I ## par
+# endif
+# define BOOST_PP_TUPLE_EAT_N_I(size) BOOST_PP_TUPLE_EAT_ ## size
+#
+# define BOOST_PP_TUPLE_EAT_1(e0)
+# define BOOST_PP_TUPLE_EAT_2(e0, e1)
+# define BOOST_PP_TUPLE_EAT_3(e0, e1, e2)
+# define BOOST_PP_TUPLE_EAT_4(e0, e1, e2, e3)
+# define BOOST_PP_TUPLE_EAT_5(e0, e1, e2, e3, e4)
+# define BOOST_PP_TUPLE_EAT_6(e0, e1, e2, e3, e4, e5)
+# define BOOST_PP_TUPLE_EAT_7(e0, e1, e2, e3, e4, e5, e6)
+# define BOOST_PP_TUPLE_EAT_8(e0, e1, e2, e3, e4, e5, e6, e7)
+# define BOOST_PP_TUPLE_EAT_9(e0, e1, e2, e3, e4, e5, e6, e7, e8)
+# define BOOST_PP_TUPLE_EAT_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9)
+# define BOOST_PP_TUPLE_EAT_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10)
+# define BOOST_PP_TUPLE_EAT_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11)
+# define BOOST_PP_TUPLE_EAT_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12)
+# define BOOST_PP_TUPLE_EAT_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13)
+# define BOOST_PP_TUPLE_EAT_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14)
+# define BOOST_PP_TUPLE_EAT_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15)
+# define BOOST_PP_TUPLE_EAT_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16)
+# define BOOST_PP_TUPLE_EAT_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17)
+# define BOOST_PP_TUPLE_EAT_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18)
+# define BOOST_PP_TUPLE_EAT_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19)
+# define BOOST_PP_TUPLE_EAT_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20)
+# define BOOST_PP_TUPLE_EAT_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21)
+# define BOOST_PP_TUPLE_EAT_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22)
+# define BOOST_PP_TUPLE_EAT_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23)
+# define BOOST_PP_TUPLE_EAT_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24)
+# define BOOST_PP_TUPLE_EAT_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25)
+# define BOOST_PP_TUPLE_EAT_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26)
+# define BOOST_PP_TUPLE_EAT_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27)
+# define BOOST_PP_TUPLE_EAT_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28)
+# define BOOST_PP_TUPLE_EAT_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29)
+# define BOOST_PP_TUPLE_EAT_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30)
+# define BOOST_PP_TUPLE_EAT_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31)
+# define BOOST_PP_TUPLE_EAT_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32)
+# define BOOST_PP_TUPLE_EAT_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33)
+# define BOOST_PP_TUPLE_EAT_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34)
+# define BOOST_PP_TUPLE_EAT_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35)
+# define BOOST_PP_TUPLE_EAT_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36)
+# define BOOST_PP_TUPLE_EAT_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37)
+# define BOOST_PP_TUPLE_EAT_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38)
+# define BOOST_PP_TUPLE_EAT_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39)
+# define BOOST_PP_TUPLE_EAT_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40)
+# define BOOST_PP_TUPLE_EAT_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41)
+# define BOOST_PP_TUPLE_EAT_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42)
+# define BOOST_PP_TUPLE_EAT_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43)
+# define BOOST_PP_TUPLE_EAT_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44)
+# define BOOST_PP_TUPLE_EAT_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45)
+# define BOOST_PP_TUPLE_EAT_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46)
+# define BOOST_PP_TUPLE_EAT_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47)
+# define BOOST_PP_TUPLE_EAT_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48)
+# define BOOST_PP_TUPLE_EAT_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49)
+# define BOOST_PP_TUPLE_EAT_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50)
+# define BOOST_PP_TUPLE_EAT_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51)
+# define BOOST_PP_TUPLE_EAT_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52)
+# define BOOST_PP_TUPLE_EAT_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53)
+# define BOOST_PP_TUPLE_EAT_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54)
+# define BOOST_PP_TUPLE_EAT_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55)
+# define BOOST_PP_TUPLE_EAT_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56)
+# define BOOST_PP_TUPLE_EAT_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57)
+# define BOOST_PP_TUPLE_EAT_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58)
+# define BOOST_PP_TUPLE_EAT_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59)
+# define BOOST_PP_TUPLE_EAT_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60)
+# define BOOST_PP_TUPLE_EAT_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61)
+# define BOOST_PP_TUPLE_EAT_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62)
+# define BOOST_PP_TUPLE_EAT_64(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63)
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/tuple/elem.hpp b/vendor/pdalboost/boost/preprocessor/tuple/elem.hpp
new file mode 100644
index 0000000..88044d3
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/tuple/elem.hpp
@@ -0,0 +1,201 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002-2011) */
+# /* Revised by Edward Diener (2011,2014) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_ELEM_HPP
+# define BOOST_PREPROCESSOR_TUPLE_ELEM_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/facilities/expand.hpp>
+# include <boost/preprocessor/facilities/overload.hpp>
+# include <boost/preprocessor/tuple/rem.hpp>
+# include <boost/preprocessor/variadic/elem.hpp>
+# include <boost/preprocessor/tuple/detail/is_single_return.hpp>
+#
+# if BOOST_PP_VARIADICS
+#    if BOOST_PP_VARIADICS_MSVC
+#        define BOOST_PP_TUPLE_ELEM(...) BOOST_PP_TUPLE_ELEM_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_ELEM_O_, __VA_ARGS__), (__VA_ARGS__))
+#        define BOOST_PP_TUPLE_ELEM_I(m, args) BOOST_PP_TUPLE_ELEM_II(m, args)
+#        define BOOST_PP_TUPLE_ELEM_II(m, args) BOOST_PP_CAT(m ## args,)
+/*
+  Use BOOST_PP_REM_CAT if it is a single element tuple ( which might be empty )
+  else use BOOST_PP_REM. This fixes a VC++ problem with an empty tuple and BOOST_PP_TUPLE_ELEM
+  functionality. See tuple_elem_bug_test.cxx.
+*/
+#    	 define BOOST_PP_TUPLE_ELEM_O_2(n, tuple) \
+			BOOST_PP_VARIADIC_ELEM(n, BOOST_PP_EXPAND(BOOST_PP_TUPLE_IS_SINGLE_RETURN(BOOST_PP_REM_CAT,BOOST_PP_REM,tuple) tuple)) \
+			/**/
+#    else
+#        define BOOST_PP_TUPLE_ELEM(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_ELEM_O_, __VA_ARGS__)(__VA_ARGS__)
+#    	 define BOOST_PP_TUPLE_ELEM_O_2(n, tuple) BOOST_PP_VARIADIC_ELEM(n, BOOST_PP_REM tuple)
+#    endif
+#    define BOOST_PP_TUPLE_ELEM_O_3(size, n, tuple) BOOST_PP_TUPLE_ELEM_O_2(n, tuple)
+# else
+#    if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#        define BOOST_PP_TUPLE_ELEM(size, n, tuple) BOOST_PP_TUPLE_ELEM_I(BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_, n), BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_E_, size), tuple))
+#        define BOOST_PP_TUPLE_ELEM_I(m, args) BOOST_PP_TUPLE_ELEM_II(m, args)
+#        define BOOST_PP_TUPLE_ELEM_II(m, args) BOOST_PP_CAT(m ## args,)
+#    elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#        define BOOST_PP_TUPLE_ELEM(size, n, tuple) BOOST_PP_TUPLE_ELEM_I_OO((size, n, tuple))
+#        define BOOST_PP_TUPLE_ELEM_I_OO(par) BOOST_PP_TUPLE_ELEM_I ## par
+#        define BOOST_PP_TUPLE_ELEM_I(size, n, tuple) BOOST_PP_TUPLE_ELEM_II((n, BOOST_PP_TUPLE_ELEM_E_ ## size ## tuple))
+#        define BOOST_PP_TUPLE_ELEM_II(par) BOOST_PP_TUPLE_ELEM_III_OO(par)
+#        define BOOST_PP_TUPLE_ELEM_III_OO(par) BOOST_PP_TUPLE_ELEM_III ## par
+#        define BOOST_PP_TUPLE_ELEM_III(n, etuple) BOOST_PP_TUPLE_ELEM_ ## n ## etuple
+#    else
+#        define BOOST_PP_TUPLE_ELEM(size, n, tuple) BOOST_PP_TUPLE_ELEM_I(BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_, n) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM_E_, size) tuple)
+#        define BOOST_PP_TUPLE_ELEM_I(x) x
+#    endif
+#    define BOOST_PP_TUPLE_ELEM_E_1(e0) (e0, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_2(e0, e1) (e0, e1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_3(e0, e1, e2) (e0, e1, e2, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_4(e0, e1, e2, e3) (e0, e1, e2, e3, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_5(e0, e1, e2, e3, e4) (e0, e1, e2, e3, e4, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_6(e0, e1, e2, e3, e4, e5) (e0, e1, e2, e3, e4, e5, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_7(e0, e1, e2, e3, e4, e5, e6) (e0, e1, e2, e3, e4, e5, e6, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_8(e0, e1, e2, e3, e4, e5, e6, e7) (e0, e1, e2, e3, e4, e5, e6, e7, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_9(e0, e1, e2, e3, e4, e5, e6, e7, e8) (e0, e1, e2, e3, e4, e5, e6, e7, e8, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#    define BOOST_PP_TUPLE_ELEM_E_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,  [...]
+#    define BOOST_PP_TUPLE_ELEM_E_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? [...]
+#    define BOOST_PP_TUPLE_ELEM_E_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, ?, ?, ?, ?, ?, ?, ?, ?,  [...]
+#    define BOOST_PP_TUPLE_ELEM_E_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, ?, ?, ?, ?, ?, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, ?, ? [...]
+#    define BOOST_PP_TUPLE_ELEM_E_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, [...]
+#    define BOOST_PP_TUPLE_ELEM_E_64
+#    define BOOST_PP_TUPLE_ELEM_0(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e0
+#    define BOOST_PP_TUPLE_ELEM_1(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e1
+#    define BOOST_PP_TUPLE_ELEM_2(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e2
+#    define BOOST_PP_TUPLE_ELEM_3(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e3
+#    define BOOST_PP_TUPLE_ELEM_4(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e4
+#    define BOOST_PP_TUPLE_ELEM_5(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e5
+#    define BOOST_PP_TUPLE_ELEM_6(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e6
+#    define BOOST_PP_TUPLE_ELEM_7(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e7
+#    define BOOST_PP_TUPLE_ELEM_8(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e8
+#    define BOOST_PP_TUPLE_ELEM_9(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e9
+#    define BOOST_PP_TUPLE_ELEM_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e10
+#    define BOOST_PP_TUPLE_ELEM_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e11
+#    define BOOST_PP_TUPLE_ELEM_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e12
+#    define BOOST_PP_TUPLE_ELEM_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e13
+#    define BOOST_PP_TUPLE_ELEM_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e14
+#    define BOOST_PP_TUPLE_ELEM_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e15
+#    define BOOST_PP_TUPLE_ELEM_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e16
+#    define BOOST_PP_TUPLE_ELEM_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e17
+#    define BOOST_PP_TUPLE_ELEM_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e18
+#    define BOOST_PP_TUPLE_ELEM_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e19
+#    define BOOST_PP_TUPLE_ELEM_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e20
+#    define BOOST_PP_TUPLE_ELEM_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e21
+#    define BOOST_PP_TUPLE_ELEM_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e22
+#    define BOOST_PP_TUPLE_ELEM_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e23
+#    define BOOST_PP_TUPLE_ELEM_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e24
+#    define BOOST_PP_TUPLE_ELEM_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e25
+#    define BOOST_PP_TUPLE_ELEM_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e26
+#    define BOOST_PP_TUPLE_ELEM_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e27
+#    define BOOST_PP_TUPLE_ELEM_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e28
+#    define BOOST_PP_TUPLE_ELEM_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e29
+#    define BOOST_PP_TUPLE_ELEM_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e30
+#    define BOOST_PP_TUPLE_ELEM_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e31
+#    define BOOST_PP_TUPLE_ELEM_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e32
+#    define BOOST_PP_TUPLE_ELEM_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e33
+#    define BOOST_PP_TUPLE_ELEM_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e34
+#    define BOOST_PP_TUPLE_ELEM_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e35
+#    define BOOST_PP_TUPLE_ELEM_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e36
+#    define BOOST_PP_TUPLE_ELEM_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e37
+#    define BOOST_PP_TUPLE_ELEM_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e38
+#    define BOOST_PP_TUPLE_ELEM_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e39
+#    define BOOST_PP_TUPLE_ELEM_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e40
+#    define BOOST_PP_TUPLE_ELEM_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e41
+#    define BOOST_PP_TUPLE_ELEM_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e42
+#    define BOOST_PP_TUPLE_ELEM_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e43
+#    define BOOST_PP_TUPLE_ELEM_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e44
+#    define BOOST_PP_TUPLE_ELEM_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e45
+#    define BOOST_PP_TUPLE_ELEM_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e46
+#    define BOOST_PP_TUPLE_ELEM_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e47
+#    define BOOST_PP_TUPLE_ELEM_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e48
+#    define BOOST_PP_TUPLE_ELEM_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e49
+#    define BOOST_PP_TUPLE_ELEM_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e50
+#    define BOOST_PP_TUPLE_ELEM_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e51
+#    define BOOST_PP_TUPLE_ELEM_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e52
+#    define BOOST_PP_TUPLE_ELEM_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e53
+#    define BOOST_PP_TUPLE_ELEM_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e54
+#    define BOOST_PP_TUPLE_ELEM_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e55
+#    define BOOST_PP_TUPLE_ELEM_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e56
+#    define BOOST_PP_TUPLE_ELEM_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e57
+#    define BOOST_PP_TUPLE_ELEM_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e58
+#    define BOOST_PP_TUPLE_ELEM_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e59
+#    define BOOST_PP_TUPLE_ELEM_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e60
+#    define BOOST_PP_TUPLE_ELEM_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e61
+#    define BOOST_PP_TUPLE_ELEM_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e62
+#    define BOOST_PP_TUPLE_ELEM_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e63
+# endif
+#
+# /* directly used elsewhere in Boost... */
+#
+# define BOOST_PP_TUPLE_ELEM_1_0(a) a
+#
+# define BOOST_PP_TUPLE_ELEM_2_0(a, b) a
+# define BOOST_PP_TUPLE_ELEM_2_1(a, b) b
+#
+# define BOOST_PP_TUPLE_ELEM_3_0(a, b, c) a
+# define BOOST_PP_TUPLE_ELEM_3_1(a, b, c) b
+# define BOOST_PP_TUPLE_ELEM_3_2(a, b, c) c
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/tuple/rem.hpp b/vendor/pdalboost/boost/preprocessor/tuple/rem.hpp
new file mode 100644
index 0000000..c934447
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/tuple/rem.hpp
@@ -0,0 +1,149 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Paul Mensonides 2002-2011.                             *
+#  *     (C) Copyright Edward Diener 2011,2013.                               *
+#  *     Distributed under the Boost Software License, Version 1.0. (See      *
+#  *     accompanying file LICENSE_1_0.txt or copy at                         *
+#  *     http://www.boost.org/LICENSE_1_0.txt)                                *
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_REM_HPP
+# define BOOST_PREPROCESSOR_TUPLE_REM_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/facilities/expand.hpp>
+# include <boost/preprocessor/facilities/overload.hpp>
+# include <boost/preprocessor/tuple/detail/is_single_return.hpp>
+#
+# /* BOOST_PP_REM */
+#
+# if BOOST_PP_VARIADICS
+# 	 if BOOST_PP_VARIADICS_MSVC
+		/* To be used internally when __VA_ARGS__ could be empty ( or is a single element ) */
+#    	define BOOST_PP_REM_CAT(...) BOOST_PP_CAT(__VA_ARGS__,)
+# 	 endif
+#    define BOOST_PP_REM(...) __VA_ARGS__
+# else
+#    define BOOST_PP_REM(x) x
+# endif
+#
+# /* BOOST_PP_TUPLE_REM */
+#
+/*
+  VC++8.0 cannot handle the variadic version of BOOST_PP_TUPLE_REM(size)
+*/
+# if BOOST_PP_VARIADICS && !(BOOST_PP_VARIADICS_MSVC && _MSC_VER <= 1400)
+# 	 if BOOST_PP_VARIADICS_MSVC
+		/* To be used internally when the size could be 0 ( or 1 ) */
+#    	define BOOST_PP_TUPLE_REM_CAT(size) BOOST_PP_REM_CAT
+# 	 endif
+#    define BOOST_PP_TUPLE_REM(size) BOOST_PP_REM
+# else
+#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#        define BOOST_PP_TUPLE_REM(size) BOOST_PP_TUPLE_REM_I(size)
+#    else
+#        define BOOST_PP_TUPLE_REM(size) BOOST_PP_TUPLE_REM_OO((size))
+#        define BOOST_PP_TUPLE_REM_OO(par) BOOST_PP_TUPLE_REM_I ## par
+#    endif
+#    define BOOST_PP_TUPLE_REM_I(size) BOOST_PP_TUPLE_REM_ ## size
+# endif
+# define BOOST_PP_TUPLE_REM_0()
+# define BOOST_PP_TUPLE_REM_1(e0) e0
+# define BOOST_PP_TUPLE_REM_2(e0, e1) e0, e1
+# define BOOST_PP_TUPLE_REM_3(e0, e1, e2) e0, e1, e2
+# define BOOST_PP_TUPLE_REM_4(e0, e1, e2, e3) e0, e1, e2, e3
+# define BOOST_PP_TUPLE_REM_5(e0, e1, e2, e3, e4) e0, e1, e2, e3, e4
+# define BOOST_PP_TUPLE_REM_6(e0, e1, e2, e3, e4, e5) e0, e1, e2, e3, e4, e5
+# define BOOST_PP_TUPLE_REM_7(e0, e1, e2, e3, e4, e5, e6) e0, e1, e2, e3, e4, e5, e6
+# define BOOST_PP_TUPLE_REM_8(e0, e1, e2, e3, e4, e5, e6, e7) e0, e1, e2, e3, e4, e5, e6, e7
+# define BOOST_PP_TUPLE_REM_9(e0, e1, e2, e3, e4, e5, e6, e7, e8) e0, e1, e2, e3, e4, e5, e6, e7, e8
+# define BOOST_PP_TUPLE_REM_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9
+# define BOOST_PP_TUPLE_REM_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10
+# define BOOST_PP_TUPLE_REM_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11
+# define BOOST_PP_TUPLE_REM_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12
+# define BOOST_PP_TUPLE_REM_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13
+# define BOOST_PP_TUPLE_REM_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14
+# define BOOST_PP_TUPLE_REM_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15
+# define BOOST_PP_TUPLE_REM_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16
+# define BOOST_PP_TUPLE_REM_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17
+# define BOOST_PP_TUPLE_REM_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18
+# define BOOST_PP_TUPLE_REM_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19
+# define BOOST_PP_TUPLE_REM_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20
+# define BOOST_PP_TUPLE_REM_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21
+# define BOOST_PP_TUPLE_REM_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22
+# define BOOST_PP_TUPLE_REM_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23
+# define BOOST_PP_TUPLE_REM_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24
+# define BOOST_PP_TUPLE_REM_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25
+# define BOOST_PP_TUPLE_REM_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26
+# define BOOST_PP_TUPLE_REM_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27
+# define BOOST_PP_TUPLE_REM_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28
+# define BOOST_PP_TUPLE_REM_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29
+# define BOOST_PP_TUPLE_REM_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30
+# define BOOST_PP_TUPLE_REM_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31
+# define BOOST_PP_TUPLE_REM_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32
+# define BOOST_PP_TUPLE_REM_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33
+# define BOOST_PP_TUPLE_REM_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34
+# define BOOST_PP_TUPLE_REM_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35
+# define BOOST_PP_TUPLE_REM_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36
+# define BOOST_PP_TUPLE_REM_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37
+# define BOOST_PP_TUPLE_REM_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38
+# define BOOST_PP_TUPLE_REM_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39
+# define BOOST_PP_TUPLE_REM_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40
+# define BOOST_PP_TUPLE_REM_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41
+# define BOOST_PP_TUPLE_REM_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42
+# define BOOST_PP_TUPLE_REM_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43
+# define BOOST_PP_TUPLE_REM_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44
+# define BOOST_PP_TUPLE_REM_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45
+# define BOOST_PP_TUPLE_REM_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46
+# define BOOST_PP_TUPLE_REM_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47
+# define BOOST_PP_TUPLE_REM_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48
+# define BOOST_PP_TUPLE_REM_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e [...]
+# define BOOST_PP_TUPLE_REM_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e [...]
+# define BOOST_PP_TUPLE_REM_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e [...]
+# define BOOST_PP_TUPLE_REM_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e [...]
+# define BOOST_PP_TUPLE_REM_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e [...]
+# define BOOST_PP_TUPLE_REM_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e [...]
+# define BOOST_PP_TUPLE_REM_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e [...]
+# define BOOST_PP_TUPLE_REM_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e [...]
+# define BOOST_PP_TUPLE_REM_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e [...]
+# define BOOST_PP_TUPLE_REM_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e [...]
+# define BOOST_PP_TUPLE_REM_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e [...]
+# define BOOST_PP_TUPLE_REM_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e [...]
+# define BOOST_PP_TUPLE_REM_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e [...]
+# define BOOST_PP_TUPLE_REM_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e [...]
+# define BOOST_PP_TUPLE_REM_64(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e [...]
+#
+# /* BOOST_PP_TUPLE_REM_CTOR */
+#
+# if BOOST_PP_VARIADICS
+#    if BOOST_PP_VARIADICS_MSVC
+#        define BOOST_PP_TUPLE_REM_CTOR(...) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REM_CTOR_O_, __VA_ARGS__), (__VA_ARGS__))
+#        define BOOST_PP_TUPLE_REM_CTOR_I(m, args) BOOST_PP_TUPLE_REM_CTOR_II(m, args)
+#        define BOOST_PP_TUPLE_REM_CTOR_II(m, args) BOOST_PP_CAT(m ## args,)
+#    	 define BOOST_PP_TUPLE_REM_CTOR_O_1(tuple) BOOST_PP_EXPAND(BOOST_PP_TUPLE_IS_SINGLE_RETURN(BOOST_PP_REM_CAT,BOOST_PP_REM,tuple) tuple)
+#    else
+#        define BOOST_PP_TUPLE_REM_CTOR(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_REM_CTOR_O_, __VA_ARGS__)(__VA_ARGS__)
+#    	 define BOOST_PP_TUPLE_REM_CTOR_O_1(tuple) BOOST_PP_REM tuple
+#    endif
+#    define BOOST_PP_TUPLE_REM_CTOR_O_2(size, tuple) BOOST_PP_TUPLE_REM_CTOR_O_1(tuple)
+# else
+#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
+#        define BOOST_PP_TUPLE_REM_CTOR(size, tuple) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_TUPLE_REM(size), tuple)
+#    else
+#        define BOOST_PP_TUPLE_REM_CTOR(size, tuple) BOOST_PP_TUPLE_REM_CTOR_D(size, tuple)
+#        define BOOST_PP_TUPLE_REM_CTOR_D(size, tuple) BOOST_PP_TUPLE_REM_CTOR_I(BOOST_PP_TUPLE_REM(size), tuple)
+#    endif
+#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#        define BOOST_PP_TUPLE_REM_CTOR_I(ext, tuple) ext tuple
+#    else
+#        define BOOST_PP_TUPLE_REM_CTOR_I(ext, tuple) BOOST_PP_TUPLE_REM_CTOR_OO((ext, tuple))
+#        define BOOST_PP_TUPLE_REM_CTOR_OO(par) BOOST_PP_TUPLE_REM_CTOR_II ## par
+#        define BOOST_PP_TUPLE_REM_CTOR_II(ext, tuple) ext ## tuple
+#    endif
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/tuple/size.hpp b/vendor/pdalboost/boost/preprocessor/tuple/size.hpp
new file mode 100644
index 0000000..675c065
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/tuple/size.hpp
@@ -0,0 +1,28 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Edward Diener 2011.                                    *
+#  *     (C) Copyright Paul Mensonides 2011.                                  *
+#  *     Distributed under the Boost Software License, Version 1.0. (See      *
+#  *     accompanying file LICENSE_1_0.txt or copy at                         *
+#  *     http://www.boost.org/LICENSE_1_0.txt)                                *
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_SIZE_HPP
+# define BOOST_PREPROCESSOR_TUPLE_SIZE_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/variadic/size.hpp>
+#
+# if BOOST_PP_VARIADICS
+#    if BOOST_PP_VARIADICS_MSVC
+#        define BOOST_PP_TUPLE_SIZE(tuple) BOOST_PP_CAT(BOOST_PP_VARIADIC_SIZE tuple,)
+#    else
+#        define BOOST_PP_TUPLE_SIZE(tuple) BOOST_PP_VARIADIC_SIZE tuple
+#    endif
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/tuple/to_list.hpp b/vendor/pdalboost/boost/preprocessor/tuple/to_list.hpp
new file mode 100644
index 0000000..da7828f
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/tuple/to_list.hpp
@@ -0,0 +1,118 @@
+# /* Copyright (C) 2001
+#  * Housemarque Oy
+#  * http://www.housemarque.com
+#  *
+#  * Distributed under the Boost Software License, Version 1.0. (See
+#  * accompanying file LICENSE_1_0.txt or copy at
+#  * http://www.boost.org/LICENSE_1_0.txt)
+#  */
+#
+# /* Revised by Paul Mensonides (2002-2011) */
+# /* Revised by Edward Diener (2011) */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_TUPLE_TO_LIST_HPP
+# define BOOST_PREPROCESSOR_TUPLE_TO_LIST_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+# include <boost/preprocessor/facilities/overload.hpp>
+# include <boost/preprocessor/tuple/size.hpp>
+# include <boost/preprocessor/variadic/size.hpp>
+#
+# /* BOOST_PP_TUPLE_TO_LIST */
+#
+# if BOOST_PP_VARIADICS
+#    if BOOST_PP_VARIADICS_MSVC
+#        define BOOST_PP_TUPLE_TO_LIST(...) BOOST_PP_TUPLE_TO_LIST_I(BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_LIST_O_, __VA_ARGS__), (__VA_ARGS__))
+#        define BOOST_PP_TUPLE_TO_LIST_I(m, args) BOOST_PP_TUPLE_TO_LIST_II(m, args)
+#        define BOOST_PP_TUPLE_TO_LIST_II(m, args) BOOST_PP_CAT(m ## args,)
+#    	 define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_TUPLE_SIZE(tuple)) tuple
+#    else
+#        define BOOST_PP_TUPLE_TO_LIST(...) BOOST_PP_OVERLOAD(BOOST_PP_TUPLE_TO_LIST_O_, __VA_ARGS__)(__VA_ARGS__)
+#    	 define BOOST_PP_TUPLE_TO_LIST_O_1(tuple) BOOST_PP_CAT(BOOST_PP_TUPLE_TO_LIST_, BOOST_PP_VARIADIC_SIZE tuple) tuple
+#    endif
+#    define BOOST_PP_TUPLE_TO_LIST_O_2(size, tuple) BOOST_PP_TUPLE_TO_LIST_O_1(tuple)
+# else
+#    if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
+#        define BOOST_PP_TUPLE_TO_LIST(size, tuple) BOOST_PP_TUPLE_TO_LIST_I(size, tuple)
+#        if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+#            define BOOST_PP_TUPLE_TO_LIST_I(s, t) BOOST_PP_TUPLE_TO_LIST_ ## s t
+#        else
+#            define BOOST_PP_TUPLE_TO_LIST_I(s, t) BOOST_PP_TUPLE_TO_LIST_II(BOOST_PP_TUPLE_TO_LIST_ ## s t)
+#            define BOOST_PP_TUPLE_TO_LIST_II(res) res
+#        endif
+#    else
+#        define BOOST_PP_TUPLE_TO_LIST(size, tuple) BOOST_PP_TUPLE_TO_LIST_OO((size, tuple))
+#        define BOOST_PP_TUPLE_TO_LIST_OO(par) BOOST_PP_TUPLE_TO_LIST_I ## par
+#        define BOOST_PP_TUPLE_TO_LIST_I(s, t) BOOST_PP_TUPLE_TO_LIST_ ## s ## t
+#    endif
+# endif
+#
+# define BOOST_PP_TUPLE_TO_LIST_1(e0) (e0, BOOST_PP_NIL)
+# define BOOST_PP_TUPLE_TO_LIST_2(e0, e1) (e0, (e1, BOOST_PP_NIL))
+# define BOOST_PP_TUPLE_TO_LIST_3(e0, e1, e2) (e0, (e1, (e2, BOOST_PP_NIL)))
+# define BOOST_PP_TUPLE_TO_LIST_4(e0, e1, e2, e3) (e0, (e1, (e2, (e3, BOOST_PP_NIL))))
+# define BOOST_PP_TUPLE_TO_LIST_5(e0, e1, e2, e3, e4) (e0, (e1, (e2, (e3, (e4, BOOST_PP_NIL)))))
+# define BOOST_PP_TUPLE_TO_LIST_6(e0, e1, e2, e3, e4, e5) (e0, (e1, (e2, (e3, (e4, (e5, BOOST_PP_NIL))))))
+# define BOOST_PP_TUPLE_TO_LIST_7(e0, e1, e2, e3, e4, e5, e6) (e0, (e1, (e2, (e3, (e4, (e5, (e6, BOOST_PP_NIL)))))))
+# define BOOST_PP_TUPLE_TO_LIST_8(e0, e1, e2, e3, e4, e5, e6, e7) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, BOOST_PP_NIL))))))))
+# define BOOST_PP_TUPLE_TO_LIST_9(e0, e1, e2, e3, e4, e5, e6, e7, e8) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, BOOST_PP_NIL)))))))))
+# define BOOST_PP_TUPLE_TO_LIST_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, BOOST_PP_NIL))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, BOOST_PP_NIL)))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, BOOST_PP_NIL))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, BOOST_PP_NIL)))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, BOOST_PP_NIL))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, BOOST_PP_NIL)))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, BOOST_PP_NIL))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, BOOST_PP_NIL)))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, BOOST_PP_NIL))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, BOOST_PP_NIL)))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, BOOST_PP_NIL))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, BOOST_PP_NIL)))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, BOOST_PP_NIL))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, BOOST_PP_NIL)))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, BOOST_PP_NIL))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, BOOST_PP_NIL)))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, BOOST_PP_NIL))))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, BOOST_PP_NIL)))))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, BOOST_PP_NIL))))))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, BOOST_PP_NIL)))))))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, BOOST_PP_NIL))))))))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, BOOST_PP_NIL)))))))))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, BOOST_PP_NIL))))))))))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, BOOST_PP_NIL)))))))))))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, BOOST_PP_NIL))))))))))))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, BOOST_PP_NIL))))))))))))))))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, BOOST_PP_NIL)))))))))))))))))))))))))))))))))))))))
+# define BOOST_PP_TUPLE_TO_LIST_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, BOOST_PP_NIL))))))))))))))))))))))))) [...]
+# define BOOST_PP_TUPLE_TO_LIST_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, BOOST_PP_NIL)))))))))))))) [...]
+# define BOOST_PP_TUPLE_TO_LIST_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, BOOST_PP_NIL))) [...]
+# define BOOST_PP_TUPLE_TO_LIST_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, BOOS [...]
+# define BOOST_PP_TUPLE_TO_LIST_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41, (e42, [...]
+# define BOOST_PP_TUPLE_TO_LIST_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, (e41,  [...]
+# define BOOST_PP_TUPLE_TO_LIST_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e40, ( [...]
+# define BOOST_PP_TUPLE_TO_LIST_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e39, (e [...]
+# define BOOST_PP_TUPLE_TO_LIST_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38, (e3 [...]
+# define BOOST_PP_TUPLE_TO_LIST_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, (e38 [...]
+# define BOOST_PP_TUPLE_TO_LIST_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36, (e37, [...]
+# define BOOST_PP_TUPLE_TO_LIST_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, (e36,  [...]
+# define BOOST_PP_TUPLE_TO_LIST_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e35, ( [...]
+# define BOOST_PP_TUPLE_TO_LIST_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e34, (e [...]
+# define BOOST_PP_TUPLE_TO_LIST_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33, (e3 [...]
+# define BOOST_PP_TUPLE_TO_LIST_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, (e33 [...]
+# define BOOST_PP_TUPLE_TO_LIST_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31, (e32, [...]
+# define BOOST_PP_TUPLE_TO_LIST_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, (e31,  [...]
+# define BOOST_PP_TUPLE_TO_LIST_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e30, ( [...]
+# define BOOST_PP_TUPLE_TO_LIST_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e29, (e [...]
+# define BOOST_PP_TUPLE_TO_LIST_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28, (e2 [...]
+# define BOOST_PP_TUPLE_TO_LIST_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, (e28 [...]
+# define BOOST_PP_TUPLE_TO_LIST_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26, (e27, [...]
+# define BOOST_PP_TUPLE_TO_LIST_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, (e26,  [...]
+# define BOOST_PP_TUPLE_TO_LIST_64(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63) (e0, (e1, (e2, (e3, (e4, (e5, (e6, (e7, (e8, (e9, (e10, (e11, (e12, (e13, (e14, (e15, (e16, (e17, (e18, (e19, (e20, (e21, (e22, (e23, (e24, (e25, ( [...]
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/variadic/elem.hpp b/vendor/pdalboost/boost/preprocessor/variadic/elem.hpp
new file mode 100644
index 0000000..be38a94
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/variadic/elem.hpp
@@ -0,0 +1,94 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Edward Diener 2011.                                    *
+#  *     (C) Copyright Paul Mensonides 2011.                                  *
+#  *     Distributed under the Boost Software License, Version 1.0. (See      *
+#  *     accompanying file LICENSE_1_0.txt or copy at                         *
+#  *     http://www.boost.org/LICENSE_1_0.txt)                                *
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_VARIADIC_ELEM_HPP
+# define BOOST_PREPROCESSOR_VARIADIC_ELEM_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_VARIADIC_ELEM */
+#
+# if BOOST_PP_VARIADICS
+#    if BOOST_PP_VARIADICS_MSVC
+#        define BOOST_PP_VARIADIC_ELEM(n, ...) BOOST_PP_VARIADIC_ELEM_I(n,__VA_ARGS__)
+#        define BOOST_PP_VARIADIC_ELEM_I(n, ...) BOOST_PP_CAT(BOOST_PP_CAT(BOOST_PP_VARIADIC_ELEM_, n)(__VA_ARGS__,),)
+#    else
+#        define BOOST_PP_VARIADIC_ELEM(n, ...) BOOST_PP_CAT(BOOST_PP_VARIADIC_ELEM_, n)(__VA_ARGS__,)
+#    endif
+#    define BOOST_PP_VARIADIC_ELEM_0(e0, ...) e0
+#    define BOOST_PP_VARIADIC_ELEM_1(e0, e1, ...) e1
+#    define BOOST_PP_VARIADIC_ELEM_2(e0, e1, e2, ...) e2
+#    define BOOST_PP_VARIADIC_ELEM_3(e0, e1, e2, e3, ...) e3
+#    define BOOST_PP_VARIADIC_ELEM_4(e0, e1, e2, e3, e4, ...) e4
+#    define BOOST_PP_VARIADIC_ELEM_5(e0, e1, e2, e3, e4, e5, ...) e5
+#    define BOOST_PP_VARIADIC_ELEM_6(e0, e1, e2, e3, e4, e5, e6, ...) e6
+#    define BOOST_PP_VARIADIC_ELEM_7(e0, e1, e2, e3, e4, e5, e6, e7, ...) e7
+#    define BOOST_PP_VARIADIC_ELEM_8(e0, e1, e2, e3, e4, e5, e6, e7, e8, ...) e8
+#    define BOOST_PP_VARIADIC_ELEM_9(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ...) e9
+#    define BOOST_PP_VARIADIC_ELEM_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, ...) e10
+#    define BOOST_PP_VARIADIC_ELEM_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, ...) e11
+#    define BOOST_PP_VARIADIC_ELEM_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, ...) e12
+#    define BOOST_PP_VARIADIC_ELEM_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, ...) e13
+#    define BOOST_PP_VARIADIC_ELEM_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, ...) e14
+#    define BOOST_PP_VARIADIC_ELEM_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, ...) e15
+#    define BOOST_PP_VARIADIC_ELEM_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, ...) e16
+#    define BOOST_PP_VARIADIC_ELEM_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, ...) e17
+#    define BOOST_PP_VARIADIC_ELEM_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, ...) e18
+#    define BOOST_PP_VARIADIC_ELEM_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, ...) e19
+#    define BOOST_PP_VARIADIC_ELEM_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, ...) e20
+#    define BOOST_PP_VARIADIC_ELEM_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, ...) e21
+#    define BOOST_PP_VARIADIC_ELEM_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, ...) e22
+#    define BOOST_PP_VARIADIC_ELEM_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, ...) e23
+#    define BOOST_PP_VARIADIC_ELEM_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, ...) e24
+#    define BOOST_PP_VARIADIC_ELEM_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, ...) e25
+#    define BOOST_PP_VARIADIC_ELEM_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, ...) e26
+#    define BOOST_PP_VARIADIC_ELEM_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, ...) e27
+#    define BOOST_PP_VARIADIC_ELEM_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, ...) e28
+#    define BOOST_PP_VARIADIC_ELEM_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, ...) e29
+#    define BOOST_PP_VARIADIC_ELEM_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, ...) e30
+#    define BOOST_PP_VARIADIC_ELEM_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, ...) e31
+#    define BOOST_PP_VARIADIC_ELEM_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, ...) e32
+#    define BOOST_PP_VARIADIC_ELEM_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, ...) e33
+#    define BOOST_PP_VARIADIC_ELEM_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, ...) e34
+#    define BOOST_PP_VARIADIC_ELEM_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, ...) e35
+#    define BOOST_PP_VARIADIC_ELEM_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, ...) e36
+#    define BOOST_PP_VARIADIC_ELEM_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, ...) e37
+#    define BOOST_PP_VARIADIC_ELEM_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, ...) e38
+#    define BOOST_PP_VARIADIC_ELEM_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, ...) e39
+#    define BOOST_PP_VARIADIC_ELEM_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, ...) e40
+#    define BOOST_PP_VARIADIC_ELEM_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, ...) e41
+#    define BOOST_PP_VARIADIC_ELEM_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, ...) e42
+#    define BOOST_PP_VARIADIC_ELEM_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, ...) e43
+#    define BOOST_PP_VARIADIC_ELEM_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, ...) e44
+#    define BOOST_PP_VARIADIC_ELEM_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, ...) e45
+#    define BOOST_PP_VARIADIC_ELEM_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, ...) e46
+#    define BOOST_PP_VARIADIC_ELEM_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, ...) e47
+#    define BOOST_PP_VARIADIC_ELEM_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, ...) e48
+#    define BOOST_PP_VARIADIC_ELEM_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, ...) e49
+#    define BOOST_PP_VARIADIC_ELEM_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, ...) e50
+#    define BOOST_PP_VARIADIC_ELEM_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, ...) e51
+#    define BOOST_PP_VARIADIC_ELEM_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, ...) e52
+#    define BOOST_PP_VARIADIC_ELEM_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, ...) e53
+#    define BOOST_PP_VARIADIC_ELEM_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, ...) e54
+#    define BOOST_PP_VARIADIC_ELEM_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, ...) e55
+#    define BOOST_PP_VARIADIC_ELEM_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, ...) e56
+#    define BOOST_PP_VARIADIC_ELEM_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, ...) e57
+#    define BOOST_PP_VARIADIC_ELEM_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, ...) e58
+#    define BOOST_PP_VARIADIC_ELEM_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, ...) e59
+#    define BOOST_PP_VARIADIC_ELEM_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, ...) e60
+#    define BOOST_PP_VARIADIC_ELEM_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, ...) e61
+#    define BOOST_PP_VARIADIC_ELEM_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, ...) e62
+#    define BOOST_PP_VARIADIC_ELEM_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63, ...) e63
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/preprocessor/variadic/size.hpp b/vendor/pdalboost/boost/preprocessor/variadic/size.hpp
new file mode 100644
index 0000000..b92a5ff
--- /dev/null
+++ b/vendor/pdalboost/boost/preprocessor/variadic/size.hpp
@@ -0,0 +1,30 @@
+# /* **************************************************************************
+#  *                                                                          *
+#  *     (C) Copyright Edward Diener 2011.                                    *
+#  *     (C) Copyright Paul Mensonides 2011.                                  *
+#  *     Distributed under the Boost Software License, Version 1.0. (See      *
+#  *     accompanying file LICENSE_1_0.txt or copy at                         *
+#  *     http://www.boost.org/LICENSE_1_0.txt)                                *
+#  *                                                                          *
+#  ************************************************************************** */
+#
+# /* See http://www.boost.org for most recent version. */
+#
+# ifndef BOOST_PREPROCESSOR_VARIADIC_SIZE_HPP
+# define BOOST_PREPROCESSOR_VARIADIC_SIZE_HPP
+#
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/config/config.hpp>
+#
+# /* BOOST_PP_VARIADIC_SIZE */
+#
+# if BOOST_PP_VARIADICS
+#    if BOOST_PP_VARIADICS_MSVC
+#        define BOOST_PP_VARIADIC_SIZE(...) BOOST_PP_CAT(BOOST_PP_VARIADIC_SIZE_I(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,),)
+#    else
+#        define BOOST_PP_VARIADIC_SIZE(...) BOOST_PP_VARIADIC_SIZE_I(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,)
+#    endif
+#    define BOOST_PP_VARIADIC_SIZE_I(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63, size, ...) size
+# endif
+#
+# endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/exception_implementation.hpp b/vendor/pdalboost/boost/property_tree/detail/exception_implementation.hpp
new file mode 100644
index 0000000..da617d4
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/exception_implementation.hpp
@@ -0,0 +1,83 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2009 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_EXCEPTIONS_IMPLEMENTATION_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_EXCEPTIONS_IMPLEMENTATION_HPP_INCLUDED
+
+namespace pdalboost { namespace property_tree
+{
+
+    namespace detail
+    {
+
+        // Helper for preparing what string in ptree_bad_path exception
+        template<class P> inline
+        std::string prepare_bad_path_what(const std::string &what,
+                                          const P &path)
+        {
+            return what + " (" + path.dump() + ")";
+        }
+
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // ptree_error
+
+    inline ptree_error::ptree_error(const std::string &w): 
+        std::runtime_error(w) 
+    {
+    }
+
+    inline ptree_error::~ptree_error() throw()
+    {
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // ptree_bad_data
+
+    template<class D> inline
+    ptree_bad_data::ptree_bad_data(const std::string &w, const D &d):
+        ptree_error(w), m_data(d)
+    {
+    }
+
+    inline ptree_bad_data::~ptree_bad_data() throw()
+    {
+    }
+
+    template<class D> inline
+    D ptree_bad_data::data() const
+    {
+        return pdalboost::any_cast<D>(m_data);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // ptree_bad_path
+
+    template<class P> inline
+    ptree_bad_path::ptree_bad_path(const std::string &w, const P &p):
+        ptree_error(detail::prepare_bad_path_what(w, p)), m_path(p)
+    {
+
+    }
+
+    inline ptree_bad_path::~ptree_bad_path() throw()
+    {
+    }
+
+    template<class P> inline
+    P ptree_bad_path::path() const
+    {
+        return pdalboost::any_cast<P>(m_path);
+    }
+
+}}
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/file_parser_error.hpp b/vendor/pdalboost/boost/property_tree/detail/file_parser_error.hpp
new file mode 100644
index 0000000..87261ad
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/file_parser_error.hpp
@@ -0,0 +1,88 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_FILE_PARSER_ERROR_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_FILE_PARSER_ERROR_HPP_INCLUDED
+
+#include <boost/property_tree/ptree.hpp>
+#include <string>
+
+namespace pdalboost { namespace property_tree
+{
+
+    //! File parse error
+    class file_parser_error: public ptree_error
+    {
+
+    public:
+
+        ///////////////////////////////////////////////////////////////////////
+        // Construction & destruction
+
+        // Construct error
+        file_parser_error(const std::string &msg,
+                          const std::string &file,
+                          unsigned long l) :
+            ptree_error(format_what(msg, file, l)),
+            m_message(msg), m_filename(file), m_line(l)
+        {
+        }
+
+        ~file_parser_error() throw()
+            // gcc 3.4.2 complains about lack of throw specifier on compiler
+            // generated dtor
+        {
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        // Data access
+
+        // Get error message (without line and file - use what() to get
+        // full message)
+        std::string message() const
+        {
+            return m_message;
+        }
+
+        // Get error filename
+        std::string filename() const
+        {
+            return m_filename;
+        }
+
+        // Get error line number
+        unsigned long line() const
+        {
+            return m_line;
+        }
+
+    private:
+
+        std::string m_message;
+        std::string m_filename;
+        unsigned long m_line;
+
+        // Format error message to be returned by std::runtime_error::what()
+        static std::string format_what(const std::string &msg,
+                                       const std::string &file,
+                                       unsigned long l)
+        {
+            std::stringstream stream;
+            stream << (file.empty() ? "<unspecified file>" : file.c_str());
+            if (l > 0)
+                stream << '(' << l << ')';
+            stream << ": " << msg;
+            return stream.str();
+        }
+
+    };
+
+} }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/info_parser_error.hpp b/vendor/pdalboost/boost/property_tree/detail/info_parser_error.hpp
new file mode 100644
index 0000000..231486d
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/info_parser_error.hpp
@@ -0,0 +1,32 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_INFO_PARSER_ERROR_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_INFO_PARSER_ERROR_HPP_INCLUDED
+
+#include <boost/property_tree/detail/file_parser_error.hpp>
+#include <string>
+
+namespace pdalboost { namespace property_tree { namespace info_parser
+{
+
+    class info_parser_error: public file_parser_error
+    {
+    public:
+        info_parser_error(const std::string &message,
+                          const std::string &filename,
+                          unsigned long line) :
+            file_parser_error(message, filename, line)
+        {
+        }
+    };
+
+} } }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/info_parser_read.hpp b/vendor/pdalboost/boost/property_tree/detail/info_parser_read.hpp
new file mode 100644
index 0000000..40acdb1
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/info_parser_read.hpp
@@ -0,0 +1,391 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_INFO_PARSER_READ_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_INFO_PARSER_READ_HPP_INCLUDED
+
+#include "boost/property_tree/ptree.hpp"
+#include "boost/property_tree/detail/info_parser_error.hpp"
+#include "boost/property_tree/detail/info_parser_utils.hpp"
+#include <iterator>
+#include <string>
+#include <stack>
+#include <fstream>
+#include <cctype>
+
+namespace pdalboost { namespace property_tree { namespace info_parser
+{
+
+    // Expand known escape sequences
+    template<class It>
+    std::basic_string<typename std::iterator_traits<It>::value_type>
+        expand_escapes(It b, It e)
+    {
+        typedef typename std::iterator_traits<It>::value_type Ch;
+        std::basic_string<Ch> result;
+        while (b != e)
+        {
+            if (*b == Ch('\\'))
+            {
+                ++b;
+                if (b == e)
+                {
+                    BOOST_PROPERTY_TREE_THROW(info_parser_error(
+                        "character expected after backslash", "", 0));
+                }
+                else if (*b == Ch('0')) result += Ch('\0');
+                else if (*b == Ch('a')) result += Ch('\a');
+                else if (*b == Ch('b')) result += Ch('\b');
+                else if (*b == Ch('f')) result += Ch('\f');
+                else if (*b == Ch('n')) result += Ch('\n');
+                else if (*b == Ch('r')) result += Ch('\r');
+                else if (*b == Ch('t')) result += Ch('\t');
+                else if (*b == Ch('v')) result += Ch('\v');
+                else if (*b == Ch('"')) result += Ch('"');
+                else if (*b == Ch('\'')) result += Ch('\'');
+                else if (*b == Ch('\\')) result += Ch('\\');
+                else
+                    BOOST_PROPERTY_TREE_THROW(info_parser_error(
+                        "unknown escape sequence", "", 0));
+            }
+            else
+                result += *b;
+            ++b;
+        }
+        return result;
+    }
+    
+    // Detect whitespace in a not very smart way.
+    template <class Ch>
+    bool is_ascii_space(Ch c)
+    {
+        // Everything outside ASCII is not space.
+        unsigned n = c;
+        if (n > 127)
+            return false;
+        return isspace(c) != 0;
+    }
+
+    // Advance pointer past whitespace
+    template<class Ch>
+    void skip_whitespace(const Ch *&text)
+    {
+        using namespace std;
+        while (is_ascii_space(*text))
+            ++text;
+    }
+
+    // Extract word (whitespace delimited) and advance pointer accordingly
+    template<class Ch>
+    std::basic_string<Ch> read_word(const Ch *&text)
+    {
+        using namespace std;
+        skip_whitespace(text);
+        const Ch *start = text;
+        while (!is_ascii_space(*text) && *text != Ch(';') && *text != Ch('\0'))
+            ++text;
+        return expand_escapes(start, text);
+    }
+
+    // Extract line (eol delimited) and advance pointer accordingly
+    template<class Ch>
+    std::basic_string<Ch> read_line(const Ch *&text)
+    {
+        using namespace std;
+        skip_whitespace(text);
+        const Ch *start = text;
+        while (*text != Ch('\0') && *text != Ch(';'))
+            ++text;
+        while (text > start && is_ascii_space(*(text - 1)))
+            --text;
+        return expand_escapes(start, text);
+    }
+
+    // Extract string (inside ""), and advance pointer accordingly
+    // Set need_more_lines to true if \ continuator found
+    template<class Ch>
+    std::basic_string<Ch> read_string(const Ch *&text, bool *need_more_lines)
+    {
+        skip_whitespace(text);
+        if (*text == Ch('\"'))
+        {
+
+            // Skip "
+            ++text;
+
+            // Find end of string, but skip escaped "
+            bool escaped = false;
+            const Ch *start = text;
+            while ((escaped || *text != Ch('\"')) && *text != Ch('\0'))
+            {
+                escaped = (!escaped && *text == Ch('\\'));
+                ++text;
+            }
+
+            // If end of string found
+            if (*text == Ch('\"'))
+            {
+                std::basic_string<Ch> result = expand_escapes(start, text++);
+                skip_whitespace(text);
+                if (*text == Ch('\\'))
+                {
+                    if (!need_more_lines)
+                        BOOST_PROPERTY_TREE_THROW(info_parser_error(
+                            "unexpected \\", "", 0));
+                    ++text;
+                    skip_whitespace(text);
+                    if (*text == Ch('\0') || *text == Ch(';'))
+                        *need_more_lines = true;
+                    else
+                        BOOST_PROPERTY_TREE_THROW(info_parser_error(
+                            "expected end of line after \\", "", 0));
+                }
+                else
+                    if (need_more_lines)
+                        *need_more_lines = false;
+                return result;
+            }
+            else
+                BOOST_PROPERTY_TREE_THROW(info_parser_error(
+                    "unexpected end of line", "", 0));
+
+        }
+        else
+            BOOST_PROPERTY_TREE_THROW(info_parser_error("expected \"", "", 0));
+    }
+
+    // Extract key
+    template<class Ch>
+    std::basic_string<Ch> read_key(const Ch *&text)
+    {
+        skip_whitespace(text);
+        if (*text == Ch('\"'))
+            return read_string(text, NULL);
+        else
+            return read_word(text);
+    }
+
+    // Extract data
+    template<class Ch>
+    std::basic_string<Ch> read_data(const Ch *&text, bool *need_more_lines)
+    {
+        skip_whitespace(text);
+        if (*text == Ch('\"'))
+            return read_string(text, need_more_lines);
+        else
+        {
+            *need_more_lines = false;
+            return read_word(text);
+        }
+    }
+
+    // Build ptree from info stream
+    template<class Ptree, class Ch>
+    void read_info_internal(std::basic_istream<Ch> &stream,
+                            Ptree &pt,
+                            const std::string &filename,
+                            int include_depth)
+    {
+        typedef std::basic_string<Ch> str_t;
+        // Possible parser states
+        enum state_t {
+            s_key,              // Parser expects key
+            s_data,             // Parser expects data
+            s_data_cont         // Parser expects data continuation
+        };
+
+        unsigned long line_no = 0;
+        state_t state = s_key;          // Parser state
+        Ptree *last = NULL;             // Pointer to last created ptree
+        // Define line here to minimize reallocations
+        str_t line;
+
+        // Initialize ptree stack (used to handle nesting)
+        std::stack<Ptree *> stack;
+        stack.push(&pt);                // Push root ptree on stack initially
+
+        try {
+            // While there are characters in the stream
+            while (stream.good()) {
+                // Read one line from stream
+                ++line_no;
+                std::getline(stream, line);
+                if (!stream.good() && !stream.eof())
+                    BOOST_PROPERTY_TREE_THROW(info_parser_error(
+                        "read error", filename, line_no));
+                const Ch *text = line.c_str();
+
+                // If directive found
+                skip_whitespace(text);
+                if (*text == Ch('#')) {
+                    // Determine directive type
+                    ++text;     // skip #
+                    std::basic_string<Ch> directive = read_word(text);
+                    if (directive == convert_chtype<Ch, char>("include")) {
+                        // #include
+                        if (include_depth > 100) {
+                            BOOST_PROPERTY_TREE_THROW(info_parser_error(
+                                "include depth too large, "
+                                "probably recursive include",
+                                filename, line_no));
+                        }
+                        str_t s = read_string(text, NULL);
+                        std::string inc_name =
+                            convert_chtype<char, Ch>(s.c_str());
+                        std::basic_ifstream<Ch> inc_stream(inc_name.c_str());
+                        if (!inc_stream.good())
+                            BOOST_PROPERTY_TREE_THROW(info_parser_error(
+                                "cannot open include file " + inc_name,
+                                filename, line_no));
+                        read_info_internal(inc_stream, *stack.top(),
+                                           inc_name, include_depth + 1);
+                    } else {   // Unknown directive
+                        BOOST_PROPERTY_TREE_THROW(info_parser_error(
+                            "unknown directive", filename, line_no));
+                    }
+
+                    // Directive must be followed by end of line
+                    skip_whitespace(text);
+                    if (*text != Ch('\0')) {
+                        BOOST_PROPERTY_TREE_THROW(info_parser_error(
+                            "expected end of line", filename, line_no));
+                    }
+
+                    // Go to next line
+                    continue;
+                }
+
+                // While there are characters left in line
+                while (1) {
+
+                    // Stop parsing on end of line or comment
+                    skip_whitespace(text);
+                    if (*text == Ch('\0') || *text == Ch(';')) {
+                        if (state == s_data)    // If there was no data set state to s_key
+                            state = s_key;
+                        break;
+                    }
+
+                    // Process according to current parser state
+                    switch (state)
+                    {
+
+                        // Parser expects key
+                        case s_key:
+                        {
+
+                            if (*text == Ch('{'))   // Brace opening found
+                            {
+                                if (!last)
+                                    BOOST_PROPERTY_TREE_THROW(info_parser_error("unexpected {", "", 0));
+                                stack.push(last);
+                                last = NULL;
+                                ++text;
+                            }
+                            else if (*text == Ch('}'))  // Brace closing found
+                            {
+                                if (stack.size() <= 1)
+                                    BOOST_PROPERTY_TREE_THROW(info_parser_error("unmatched }", "", 0));
+                                stack.pop();
+                                last = NULL;
+                                ++text;
+                            }
+                            else    // Key text found
+                            {
+                                std::basic_string<Ch> key = read_key(text);
+                                last = &stack.top()->push_back(
+                                    std::make_pair(key, Ptree()))->second;
+                                state = s_data;
+                            }
+
+                        }; break;
+
+                        // Parser expects data
+                        case s_data:
+                        {
+                            
+                            // Last ptree must be defined because we are going to add data to it
+                            BOOST_ASSERT(last);
+                            
+                            if (*text == Ch('{'))   // Brace opening found
+                            {
+                                stack.push(last);
+                                last = NULL;
+                                ++text;
+                                state = s_key;
+                            }
+                            else if (*text == Ch('}'))  // Brace closing found
+                            {
+                                if (stack.size() <= 1)
+                                    BOOST_PROPERTY_TREE_THROW(info_parser_error("unmatched }", "", 0));
+                                stack.pop();
+                                last = NULL;
+                                ++text;
+                                state = s_key;
+                            }
+                            else    // Data text found
+                            {
+                                bool need_more_lines;
+                                std::basic_string<Ch> data = read_data(text, &need_more_lines);
+                                last->data() = data;
+                                state = need_more_lines ? s_data_cont : s_key;
+                            }
+
+
+                        }; break;
+
+                        // Parser expects continuation of data after \ on previous line
+                        case s_data_cont:
+                        {
+                            
+                            // Last ptree must be defined because we are going to update its data
+                            BOOST_ASSERT(last);
+                            
+                            if (*text == Ch('\"'))  // Continuation must start with "
+                            {
+                                bool need_more_lines;
+                                std::basic_string<Ch> data = read_string(text, &need_more_lines);
+                                last->put_value(last->template get_value<std::basic_string<Ch> >() + data);
+                                state = need_more_lines ? s_data_cont : s_key;
+                            }
+                            else
+                                BOOST_PROPERTY_TREE_THROW(info_parser_error("expected \" after \\ in previous line", "", 0));
+
+                        }; break;
+
+                        // Should never happen
+                        default:
+                            BOOST_ASSERT(0);
+
+                    }
+                }
+            }
+
+            // Check if stack has initial size, otherwise some {'s have not been closed
+            if (stack.size() != 1)
+                BOOST_PROPERTY_TREE_THROW(info_parser_error("unmatched {", "", 0));
+
+        }
+        catch (info_parser_error &e)
+        {
+            // If line undefined rethrow error with correct filename and line
+            if (e.line() == 0)
+            {
+                BOOST_PROPERTY_TREE_THROW(info_parser_error(e.message(), filename, line_no));
+            }
+            else
+                BOOST_PROPERTY_TREE_THROW(e);
+
+        }
+
+    }
+
+} } }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/info_parser_utils.hpp b/vendor/pdalboost/boost/property_tree/detail/info_parser_utils.hpp
new file mode 100644
index 0000000..499abfc
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/info_parser_utils.hpp
@@ -0,0 +1,32 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_INFO_PARSER_CHCONV_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_INFO_PARSER_CHCONV_HPP_INCLUDED
+
+#include <string>
+
+namespace pdalboost { namespace property_tree { namespace info_parser
+{
+
+    template<class ChDest, class ChSrc>
+    std::basic_string<ChDest> convert_chtype(const ChSrc *text)
+    {
+        std::basic_string<ChDest> result;
+        while (*text)
+        {
+            result += ChDest(*text);
+            ++text;
+        }
+        return result;
+    }
+
+} } }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/info_parser_write.hpp b/vendor/pdalboost/boost/property_tree/detail/info_parser_write.hpp
new file mode 100644
index 0000000..08bc11c
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/info_parser_write.hpp
@@ -0,0 +1,147 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_INFO_PARSER_WRITE_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_INFO_PARSER_WRITE_HPP_INCLUDED
+
+#include "boost/property_tree/ptree.hpp"
+#include "boost/property_tree/detail/info_parser_utils.hpp"
+#include <string>
+
+namespace pdalboost { namespace property_tree { namespace info_parser
+{
+    template<class Ch>
+    void write_info_indent(std::basic_ostream<Ch> &stream,
+          int indent,
+          const info_writer_settings<Ch> &settings
+          )
+    {
+        stream << std::basic_string<Ch>(indent * settings.indent_count, settings.indent_char);
+    }
+    
+    // Create necessary escape sequences from illegal characters
+    template<class Ch>
+    std::basic_string<Ch> create_escapes(const std::basic_string<Ch> &s)
+    {
+        std::basic_string<Ch> result;
+        typename std::basic_string<Ch>::const_iterator b = s.begin();
+        typename std::basic_string<Ch>::const_iterator e = s.end();
+        while (b != e)
+        {
+            if (*b == Ch('\0')) result += Ch('\\'), result += Ch('0');
+            else if (*b == Ch('\a')) result += Ch('\\'), result += Ch('a');
+            else if (*b == Ch('\b')) result += Ch('\\'), result += Ch('b');
+            else if (*b == Ch('\f')) result += Ch('\\'), result += Ch('f');
+            else if (*b == Ch('\n')) result += Ch('\\'), result += Ch('n');
+            else if (*b == Ch('\r')) result += Ch('\\'), result += Ch('r');
+            else if (*b == Ch('\v')) result += Ch('\\'), result += Ch('v');
+            else if (*b == Ch('"')) result += Ch('\\'), result += Ch('"');
+            else if (*b == Ch('\\')) result += Ch('\\'), result += Ch('\\');
+            else
+                result += *b;
+            ++b;
+        }
+        return result;
+    }
+
+    template<class Ch>
+    bool is_simple_key(const std::basic_string<Ch> &key)
+    {
+        const static std::basic_string<Ch> chars = convert_chtype<Ch, char>(" \t{};\n\"");
+        return !key.empty() && key.find_first_of(chars) == key.npos;
+    }
+    
+    template<class Ch>
+    bool is_simple_data(const std::basic_string<Ch> &data)
+    {
+        const static std::basic_string<Ch> chars = convert_chtype<Ch, char>(" \t{};\n\"");
+        return !data.empty() && data.find_first_of(chars) == data.npos;
+    }
+
+    template<class Ptree>
+    void write_info_helper(std::basic_ostream<typename Ptree::key_type::value_type> &stream, 
+                           const Ptree &pt, 
+                           int indent,
+                           const info_writer_settings<typename Ptree::key_type::value_type> &settings)
+    {
+
+        // Character type
+        typedef typename Ptree::key_type::value_type Ch;
+        
+        // Write data
+        if (indent >= 0)
+        {
+            if (!pt.data().empty())
+            {
+                std::basic_string<Ch> data = create_escapes(pt.template get_value<std::basic_string<Ch> >());
+                if (is_simple_data(data))
+                    stream << Ch(' ') << data << Ch('\n');
+                else
+                    stream << Ch(' ') << Ch('\"') << data << Ch('\"') << Ch('\n');
+            }
+            else if (pt.empty())
+                stream << Ch(' ') << Ch('\"') << Ch('\"') << Ch('\n');
+            else
+                stream << Ch('\n');
+        }
+        
+        // Write keys
+        if (!pt.empty())
+        {
+            
+            // Open brace
+            if (indent >= 0)
+            {
+                write_info_indent( stream, indent, settings);
+                stream << Ch('{') << Ch('\n');
+            }
+            
+            // Write keys
+            typename Ptree::const_iterator it = pt.begin();
+            for (; it != pt.end(); ++it)
+            {
+
+                // Output key
+                std::basic_string<Ch> key = create_escapes(it->first);
+                write_info_indent( stream, indent+1, settings);
+                if (is_simple_key(key))
+                    stream << key;
+                else
+                    stream << Ch('\"') << key << Ch('\"');
+
+                // Output data and children  
+                write_info_helper(stream, it->second, indent + 1, settings);
+
+            }
+            
+            // Close brace
+            if (indent >= 0)
+            {
+                write_info_indent( stream, indent, settings);
+                stream << Ch('}') << Ch('\n');
+            }
+
+        }
+    }
+
+    // Write ptree to info stream
+    template<class Ptree>
+    void write_info_internal(std::basic_ostream<typename Ptree::key_type::value_type> &stream, 
+                             const Ptree &pt,
+                             const std::string &filename,
+                             const info_writer_settings<typename Ptree::key_type::value_type> &settings)
+    {
+        write_info_helper(stream, pt, -1, settings);
+        if (!stream.good())
+            BOOST_PROPERTY_TREE_THROW(info_parser_error("write error", filename, 0));
+    }
+
+} } }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/info_parser_writer_settings.hpp b/vendor/pdalboost/boost/property_tree/detail/info_parser_writer_settings.hpp
new file mode 100644
index 0000000..c067d45
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/info_parser_writer_settings.hpp
@@ -0,0 +1,40 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2007 Alexey Baskakov
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_INFO_PARSER_WRITER_SETTINGS_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_INFO_PARSER_WRITER_SETTINGS_HPP_INCLUDED
+
+#include <string>
+
+namespace pdalboost { namespace property_tree { namespace info_parser
+{
+
+    template <class Ch>
+    class info_writer_settings
+    {
+    public:
+        info_writer_settings(Ch indent_char = Ch(' '), unsigned indent_count = 4):
+            indent_char(indent_char),
+            indent_count(indent_count)
+        {
+        }
+        Ch indent_char;
+        int indent_count;
+    };
+
+    template <class Ch>
+    info_writer_settings<Ch> info_writer_make_settings(Ch indent_char = Ch(' '), unsigned indent_count = 4)
+    {
+        return info_writer_settings<Ch>(indent_char, indent_count);
+    }
+
+} } }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/json_parser/narrow_encoding.hpp b/vendor/pdalboost/boost/property_tree/detail/json_parser/narrow_encoding.hpp
new file mode 100644
index 0000000..af1a2d2
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/json_parser/narrow_encoding.hpp
@@ -0,0 +1,157 @@
+#ifndef BOOST_PROPERTY_TREE_DETAIL_JSON_PARSER_NARROW_ENCODING_HPP
+#define BOOST_PROPERTY_TREE_DETAIL_JSON_PARSER_NARROW_ENCODING_HPP
+
+#include <boost/range/iterator_range_core.hpp>
+
+#include <utility>
+
+namespace pdalboost { namespace property_tree {
+    namespace json_parser { namespace detail
+{
+
+    struct external_ascii_superset_encoding
+    {
+        typedef char external_char;
+
+        bool is_nl(char c) const { return c == '\n'; }
+        bool is_ws(char c) const {
+            return c == ' ' || c == '\t' || c == '\n' || c == '\r';
+        }
+
+        bool is_minus(char c) const { return c == '-'; }
+        bool is_plusminus(char c) const { return c == '+' || c == '-'; }
+        bool is_dot(char c) const { return c == '.'; }
+        bool is_eE(char c) const { return c == 'e' || c == 'E'; }
+        bool is_0(char c) const { return c == '0'; }
+        bool is_digit(char c) const { return c >= '0' && c <= '9'; }
+        bool is_digit0(char c) const { return c >= '1' && c <= '9'; }
+
+        bool is_quote(char c) const { return c == '"'; }
+        bool is_backslash(char c) const { return c == '\\'; }
+        bool is_slash(char c) const { return c == '/'; }
+
+        bool is_comma(char c) const { return c == ','; }
+        bool is_open_bracket(char c) const { return c == '['; }
+        bool is_close_bracket(char c) const { return c == ']'; }
+        bool is_colon(char c) const { return c == ':'; }
+        bool is_open_brace(char c) const { return c == '{'; }
+        bool is_close_brace(char c) const { return c == '}'; }
+
+        bool is_a(char c) const { return c == 'a'; }
+        bool is_b(char c) const { return c == 'b'; }
+        bool is_e(char c) const { return c == 'e'; }
+        bool is_f(char c) const { return c == 'f'; }
+        bool is_l(char c) const { return c == 'l'; }
+        bool is_n(char c) const { return c == 'n'; }
+        bool is_r(char c) const { return c == 'r'; }
+        bool is_s(char c) const { return c == 's'; }
+        bool is_t(char c) const { return c == 't'; }
+        bool is_u(char c) const { return c == 'u'; }
+
+        int decode_hexdigit(char c) {
+            if (c >= '0' && c <= '9') return c - '0';
+            if (c >= 'A' && c <= 'F') return c - 'A' + 10;
+            if (c >= 'a' && c <= 'f') return c - 'a' + 10;
+            return -1;
+        }
+    };
+
+    struct utf8_utf8_encoding : external_ascii_superset_encoding
+    {
+        typedef char internal_char;
+
+        template <typename Iterator>
+        pdalboost::iterator_range<Iterator>
+        to_internal(Iterator first, Iterator last) const {
+            return pdalboost::make_iterator_range(first, last);
+        }
+
+        char to_internal_trivial(char c) const {
+            return c;
+        }
+
+        template <typename Iterator, typename Sentinel,
+                  typename EncodingErrorFn>
+        void skip_codepoint(Iterator& cur, Sentinel end,
+                            EncodingErrorFn error_fn) const {
+            transcode_codepoint(cur, end, DoNothing(), error_fn);
+        }
+
+        template <typename Iterator, typename Sentinel, typename TranscodedFn,
+                  typename EncodingErrorFn>
+        void transcode_codepoint(Iterator& cur, Sentinel end,
+                TranscodedFn transcoded_fn, EncodingErrorFn error_fn) const {
+            unsigned char c = *cur;
+            ++cur;
+            if (c <= 0x7f) {
+                // Solo byte, filter out disallowed codepoints.
+                if (c < 0x20) {
+                    error_fn();
+                }
+                transcoded_fn(c);
+                return;
+            }
+            int trailing = trail_table(c);
+            if (trailing == -1) {
+                // Standalone trailing byte or overly long sequence.
+                error_fn();
+            }
+            transcoded_fn(c);
+            for (int i = 0; i < trailing; ++i) {
+                if (cur == end || !is_trail(*cur)) {
+                    error_fn();
+                }
+                transcoded_fn(*cur);
+                ++cur;
+            }
+        }
+
+        template <typename TranscodedFn>
+        void feed_codepoint(unsigned codepoint,
+                            TranscodedFn transcoded_fn) const {
+            if (codepoint <= 0x7f) {
+                transcoded_fn(static_cast<char>(codepoint));
+            } else if (codepoint <= 0x7ff) {
+                transcoded_fn(static_cast<char>(0xc0 | (codepoint >> 6)));
+                transcoded_fn(trail(codepoint));
+            } else if (codepoint <= 0xffff) {
+                transcoded_fn(static_cast<char>(0xe0 | (codepoint >> 12)));
+                transcoded_fn(trail(codepoint >> 6));
+                transcoded_fn(trail(codepoint));
+            } else if (codepoint <= 0x10ffff) {
+                transcoded_fn(static_cast<char>(0xf0 | (codepoint >> 18)));
+                transcoded_fn(trail(codepoint >> 12));
+                transcoded_fn(trail(codepoint >> 6));
+                transcoded_fn(trail(codepoint));
+            }
+        }
+
+    private:
+        struct DoNothing {
+            void operator ()(char) const {}
+        };
+
+        bool is_trail(unsigned char c) const {
+            return (c & 0xc0) == 0x80;
+        }
+
+        int trail_table(unsigned char c) const {
+            static const signed char table[] = {
+                                 /* not a lead byte */
+                /* 0x10???sss */ -1, -1, -1, -1, -1, -1, -1, -1,
+                /* 0x110??sss */ 1, 1, 1, 1, /* 1 trailing byte */
+                /* 0x1110?sss */ 2, 2, /* 2 trailing bytes */
+                /* 0x11110sss */ 3, /* 3 trailing bytes */
+                /* 0x11111sss */ -1 /* 4 or 5 trailing bytes, disallowed */
+            };
+            return table[(c & 0x7f) >> 3];
+        }
+
+        char trail(unsigned unmasked) const {
+            return static_cast<char>(0x80 | (unmasked & 0x3f));
+        }
+    };
+
+}}}}
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/json_parser/parser.hpp b/vendor/pdalboost/boost/property_tree/detail/json_parser/parser.hpp
new file mode 100644
index 0000000..21c8103
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/json_parser/parser.hpp
@@ -0,0 +1,524 @@
+#ifndef BOOST_PROPERTY_TREE_DETAIL_JSON_PARSER_PARSER_HPP
+#define BOOST_PROPERTY_TREE_DETAIL_JSON_PARSER_PARSER_HPP
+
+#include <boost/property_tree/detail/json_parser_error.hpp>
+
+#include <boost/bind.hpp>
+#include <boost/format.hpp>
+
+#include <iterator>
+#include <sstream>
+#include <string>
+
+namespace pdalboost { namespace property_tree {
+    namespace json_parser { namespace detail
+{
+
+    template <typename Encoding, typename Iterator, typename Sentinel>
+    class source
+    {
+    public:
+        typedef typename std::iterator_traits<Iterator>::value_type
+            code_unit;
+        typedef bool (Encoding::*encoding_predicate)(code_unit c) const;
+
+        explicit source(Encoding& encoding) : encoding(encoding) {}
+
+        template <typename Range>
+        void set_input(const std::string& filename, const Range& r)
+        {
+            this->filename = filename;
+            cur = r.begin();
+            end = r.end();
+            line = 1;
+            offset = 0;
+        }
+
+        bool done() const { return cur == end; }
+
+        void parse_error(const char* msg) {
+            BOOST_PROPERTY_TREE_THROW(
+                json_parser_error(msg, filename, line));
+        }
+
+        void next() {
+            if (encoding.is_nl(*cur)) {
+                ++line;
+                offset = 0;
+            } else {
+                ++offset;
+            }
+            ++cur;
+        }
+
+        template <typename Action>
+        bool have(encoding_predicate p, Action& a) {
+            bool found = cur != end && (encoding.*p)(*cur);
+            if (found) {
+                a(*cur);
+                next();
+            }
+            return found;
+        }
+
+        bool have(encoding_predicate p) {
+            DoNothing n;
+            return have(p, n);
+        }
+
+        template <typename Action>
+        void expect(encoding_predicate p, const char* msg, Action& a) {
+            if (!have(p, a)) {
+                parse_error(msg);
+            }
+        }
+
+        void expect(encoding_predicate p, const char* msg) {
+            DoNothing n;
+            expect(p, msg, n);
+        }
+
+        code_unit need_cur(const char* msg) {
+            if (cur == end) {
+                parse_error(msg);
+            }
+            return *cur;
+        }
+
+        Iterator& raw_cur() { return cur; }
+        Sentinel raw_end() { return end; }
+
+    private:
+        struct DoNothing {
+            void operator ()(code_unit) const {}
+        };
+
+        Encoding& encoding;
+        Iterator cur;
+        Sentinel end;
+        std::string filename;
+        int line;
+        int offset;
+    };
+
+    template <typename Callbacks, typename Encoding, typename Iterator,
+        typename = typename std::iterator_traits<Iterator>
+            ::iterator_category>
+    class number_callback_adapter
+    {
+    public:
+        number_callback_adapter(Callbacks& callbacks, Encoding& encoding,
+                                Iterator& cur)
+            : callbacks(callbacks), encoding(encoding), first(cur), cur(cur)
+        {}
+
+        void operator ()(typename Encoding::external_char) {}
+
+        void finish() const {
+            callbacks.on_number(encoding.to_internal(first, cur));
+        }
+
+    private:
+        number_callback_adapter(const number_callback_adapter&);
+
+        Callbacks& callbacks;
+        Encoding& encoding;
+        Iterator first;
+        Iterator& cur;
+    };
+
+    template <typename Callbacks, typename Encoding, typename Iterator>
+    class number_callback_adapter<Callbacks, Encoding, Iterator,
+                                  std::input_iterator_tag>
+    {
+    public:
+        number_callback_adapter(Callbacks& callbacks, Encoding& encoding,
+                                Iterator&)
+            : callbacks(callbacks), encoding(encoding), first(true)
+        {}
+
+        void operator ()(typename Encoding::external_char c) {
+            if (first) {
+                callbacks.on_begin_number();
+                first = false;
+            }
+            callbacks.on_digit(encoding.to_internal_trivial(c));
+        }
+
+        void finish() const {
+            callbacks.on_end_number();
+        }
+    private:
+        number_callback_adapter(const number_callback_adapter&);
+
+        Callbacks& callbacks;
+        Encoding& encoding;
+        bool first;
+    };
+
+    template <typename Callbacks, typename Encoding, typename Iterator,
+        typename = typename std::iterator_traits<Iterator>
+            ::iterator_category>
+    class string_callback_adapter
+    {
+    public:
+        string_callback_adapter(Callbacks& callbacks, Encoding& encoding,
+                                Iterator& cur)
+            : callbacks(callbacks), encoding(encoding), cur(cur),
+              run_begin(cur)
+        {}
+
+        void start_run() {
+            run_begin = cur;
+        }
+
+        void finish_run() {
+            callbacks.on_code_units(encoding.to_internal(run_begin, cur));
+        }
+
+        template <typename Sentinel, typename EncodingErrorFn>
+        void process_codepoint(Sentinel end, EncodingErrorFn error_fn) {
+            encoding.skip_codepoint(cur, end, error_fn);
+        }
+
+    private:
+        string_callback_adapter(const string_callback_adapter&);
+
+        Callbacks& callbacks;
+        Encoding& encoding;
+        Iterator& cur;
+        Iterator run_begin;
+    };
+
+    template <typename Callbacks, typename Encoding, typename Iterator>
+    class string_callback_adapter<Callbacks, Encoding, Iterator,
+                                  std::input_iterator_tag>
+    {
+    public:
+        string_callback_adapter(Callbacks& callbacks, Encoding& encoding,
+                                Iterator& cur)
+            : callbacks(callbacks), encoding(encoding), cur(cur)
+        {}
+
+        void start_run() {}
+
+        void finish_run() {}
+
+        template <typename Sentinel, typename EncodingErrorFn>
+        void process_codepoint(Sentinel end, EncodingErrorFn error_fn) {
+            encoding.transcode_codepoint(cur, end,
+                pdalboost::bind(&Callbacks::on_code_unit,
+                            pdalboost::ref(callbacks), _1),
+                error_fn);
+        }
+
+    private:
+        string_callback_adapter(const string_callback_adapter&);
+
+        Callbacks& callbacks;
+        Encoding& encoding;
+        Iterator& cur;
+    };
+
+	template <typename Callbacks, typename Encoding, typename Iterator,
+              typename Sentinel>
+	class parser
+	{
+		typedef detail::number_callback_adapter<Callbacks, Encoding, Iterator>
+            number_adapter;
+		typedef detail::string_callback_adapter<Callbacks, Encoding, Iterator>
+            string_adapter;
+		typedef detail::source<Encoding, Iterator, Sentinel> source;
+		typedef typename source::code_unit code_unit;
+
+	public:
+		parser(Callbacks& callbacks, Encoding& encoding)
+			: callbacks(callbacks), encoding(encoding), src(encoding)
+		{}
+
+		template <typename Range>
+		void set_input(const std::string& filename, const Range& r) {
+			src.set_input(filename, r);
+		}
+
+		void finish() {
+		    skip_ws();
+			if (!src.done()) {
+				parse_error("garbage after data");
+			}
+		}
+
+		void parse_value() {
+			if (parse_object()) return;
+			if (parse_array()) return;
+			if (parse_string()) return;
+			if (parse_boolean()) return;
+			if (parse_null()) return;
+			if (parse_number()) return;
+			parse_error("expected value");
+		}
+
+		bool parse_null() {
+			skip_ws();
+			if (!have(&Encoding::is_n)) {
+				return false;
+			}
+			expect(&Encoding::is_u, "expected 'null'");
+			expect(&Encoding::is_l, "expected 'null'");
+			expect(&Encoding::is_l, "expected 'null'");
+			callbacks.on_null();
+			return true;
+		}
+
+		bool parse_boolean() {
+			skip_ws();
+			if (have(&Encoding::is_t)) {
+				expect(&Encoding::is_r, "expected 'true'");
+				expect(&Encoding::is_u, "expected 'true'");
+				expect(&Encoding::is_e, "expected 'true'");
+				callbacks.on_boolean(true);
+				return true;
+			}
+			if (have(&Encoding::is_f)) {
+				expect(&Encoding::is_a, "expected 'false'");
+				expect(&Encoding::is_l, "expected 'false'");
+				expect(&Encoding::is_s, "expected 'false'");
+				expect(&Encoding::is_e, "expected 'false'");
+				callbacks.on_boolean(false);
+				return true;
+			}
+			return false;
+		}
+
+		bool parse_number() {
+			skip_ws();
+
+			number_adapter adapter(callbacks, encoding, src.raw_cur());
+			bool started = false;
+			if (have(&Encoding::is_minus, adapter)) {
+				started = true;
+			}
+			if (!have(&Encoding::is_0, adapter) && !parse_int_part(adapter)) {
+				if (started) {
+					parse_error("expected digits after -");
+				}
+				return false;
+			}
+			parse_frac_part(adapter);
+			parse_exp_part(adapter);
+			adapter.finish();
+			return true;
+		}
+
+		bool parse_string() {
+			skip_ws();
+
+			if (!have(&Encoding::is_quote)) {
+				return false;
+			}
+
+			callbacks.on_begin_string();
+			string_adapter adapter(callbacks, encoding, src.raw_cur());
+			while (!encoding.is_quote(need_cur("unterminated string"))) {
+				if (encoding.is_backslash(*src.raw_cur())) {
+					adapter.finish_run();
+					next();
+					parse_escape();
+					adapter.start_run();
+				} else {
+					adapter.process_codepoint(src.raw_end(),
+						pdalboost::bind(&parser::parse_error,
+                                    this, "invalid code sequence"));
+				}
+			}
+			adapter.finish_run();
+			callbacks.on_end_string();
+			next();
+			return true;
+		}
+
+		bool parse_array() {
+			skip_ws();
+
+			if (!have(&Encoding::is_open_bracket)) {
+				return false;
+			}
+
+			callbacks.on_begin_array();
+			skip_ws();
+			if (have(&Encoding::is_close_bracket)) {
+				callbacks.on_end_array();
+				return true;
+			}
+			do {
+				parse_value();
+				skip_ws();
+			} while (have(&Encoding::is_comma));
+			expect(&Encoding::is_close_bracket, "expected ']' or ','");
+			callbacks.on_end_array();
+			return true;
+		}
+
+		bool parse_object() {
+			skip_ws();
+
+			if (!have(&Encoding::is_open_brace)) {
+				return false;
+			}
+
+			callbacks.on_begin_object();
+			skip_ws();
+			if (have(&Encoding::is_close_brace)) {
+				callbacks.on_end_object();
+				return true;
+			}
+			do {
+				if (!parse_string()) {
+					parse_error("expected key string");
+				}
+				skip_ws();
+				expect(&Encoding::is_colon, "expected ':'");
+				parse_value();
+				skip_ws();
+			} while (have(&Encoding::is_comma));
+			expect(&Encoding::is_close_brace, "expected '}' or ','");
+			callbacks.on_end_object();
+			return true;
+		}
+
+	private:
+		typedef typename source::encoding_predicate encoding_predicate;
+
+		void parse_error(const char* msg) { src.parse_error(msg); }
+		void next() { src.next(); }
+		template <typename Action>
+		bool have(encoding_predicate p, Action& a) { return src.have(p, a); }
+		bool have(encoding_predicate p) { return src.have(p); }
+		template <typename Action>
+		void expect(encoding_predicate p, const char* msg, Action& a) {
+		    src.expect(p, msg, a);
+		}
+		void expect(encoding_predicate p, const char* msg) {
+		    src.expect(p, msg);
+		}
+		code_unit need_cur(const char* msg) { return src.need_cur(msg); }
+
+		void skip_ws() {
+			while (have(&Encoding::is_ws)) {
+			}
+		}
+
+		bool parse_int_part(number_adapter& action) {
+			if (!have(&Encoding::is_digit0, action)) {
+				return false;
+			}
+			parse_digits(action);
+			return true;
+		}
+
+		void parse_frac_part(number_adapter& action) {
+			if (!have(&Encoding::is_dot, action)) {
+				return;
+			}
+			expect(&Encoding::is_digit, "need at least one digit after '.'",
+                   action);
+			parse_digits(action);
+		}
+
+		void parse_exp_part(number_adapter& action) {
+			if (!have(&Encoding::is_eE, action)) {
+				return;
+			}
+			have(&Encoding::is_plusminus, action);
+			expect(&Encoding::is_digit, "need at least one digit in exponent",
+                   action);
+			parse_digits(action);
+		}
+
+		void parse_digits(number_adapter& action) {
+			while (have(&Encoding::is_digit, action)) {
+			}
+		}
+
+		void parse_escape() {
+			if (have(&Encoding::is_quote)) {
+				feed(0x22);
+			} else if (have(&Encoding::is_backslash)) {
+				feed(0x5c);
+			} else if (have(&Encoding::is_slash)) {
+				feed(0x2f);
+			} else if (have(&Encoding::is_b)) {
+				feed(0x08); // backspace
+			} else if (have(&Encoding::is_f)) {
+				feed(0x0c); // formfeed
+			} else if (have(&Encoding::is_n)) {
+				feed(0x0a); // line feed
+			} else if (have(&Encoding::is_r)) {
+				feed(0x0d); // carriage return
+			} else if (have(&Encoding::is_t)) {
+				feed(0x09); // horizontal tab
+			} else if (have(&Encoding::is_u)) {
+				parse_codepoint_ref();
+			} else {
+				parse_error("invalid escape sequence");
+			}
+		}
+
+		unsigned parse_hex_quad() {
+			unsigned codepoint = 0;
+			for (int i = 0; i < 4; ++i) {
+				int value = encoding.decode_hexdigit(
+				    need_cur("invalid escape sequence"));
+				if (value < 0) {
+					parse_error("invalid escape sequence");
+				}
+				codepoint *= 16;
+				codepoint += value;
+				next();
+			}
+			return codepoint;
+		}
+
+		static bool is_surrogate_high(unsigned codepoint) {
+			return (codepoint & 0xfc00) == 0xd800;
+		}
+		static bool is_surrogate_low(unsigned codepoint) {
+			return (codepoint & 0xfc00) == 0xdc00;
+		}
+		static unsigned combine_surrogates(unsigned high, unsigned low) {
+			return 0x010000 + (((high & 0x3ff) << 10) | (low & 0x3ff));
+		}
+
+		void parse_codepoint_ref() {
+			unsigned codepoint = parse_hex_quad();
+			if (is_surrogate_low(codepoint)) {
+				parse_error("invalid codepoint, stray low surrogate");
+			}
+			if (is_surrogate_high(codepoint)) {
+				expect(&Encoding::is_backslash,
+				    "invalid codepoint, stray high surrogate");
+				expect(&Encoding::is_u,
+				    "expected codepoint reference after high surrogate");
+				int low = parse_hex_quad();
+				if (!is_surrogate_low(low)) {
+					parse_error("expected low surrogate after high surrogate");
+				}
+				codepoint = combine_surrogates(codepoint, low);
+			}
+			feed(codepoint);
+		}
+
+		void feed(unsigned codepoint) {
+			encoding.feed_codepoint(codepoint,
+                                    pdalboost::bind(&Callbacks::on_code_unit,
+                                                pdalboost::ref(callbacks), _1));
+		}
+
+		Callbacks& callbacks;
+		Encoding& encoding;
+		source src;
+	};
+
+}}}}
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/json_parser/read.hpp b/vendor/pdalboost/boost/property_tree/detail/json_parser/read.hpp
new file mode 100644
index 0000000..698d583
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/json_parser/read.hpp
@@ -0,0 +1,55 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2015 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_JSON_PARSER_READ_HPP
+#define BOOST_PROPERTY_TREE_DETAIL_JSON_PARSER_READ_HPP
+
+#include <boost/property_tree/detail/json_parser/parser.hpp>
+#include <boost/property_tree/detail/json_parser/narrow_encoding.hpp>
+#include <boost/property_tree/detail/json_parser/wide_encoding.hpp>
+#include <boost/property_tree/detail/json_parser/standard_callbacks.hpp>
+
+#include <boost/range/iterator_range_core.hpp>
+
+#include <istream>
+#include <iterator>
+#include <string>
+
+namespace pdalboost { namespace property_tree {
+    namespace json_parser { namespace detail
+{
+
+    template <typename Ch> struct encoding;
+    template <> struct encoding<char> : utf8_utf8_encoding {};
+    template <> struct encoding<wchar_t> : wide_wide_encoding {};
+
+    template <typename Ptree>
+    void read_json_internal(
+        std::basic_istream<typename Ptree::key_type::value_type> &stream,
+        Ptree &pt, const std::string &filename)
+    {
+        typedef typename Ptree::key_type::value_type char_type;
+        typedef standard_callbacks<Ptree> callbacks_type;
+        typedef detail::encoding<char_type> encoding_type;
+        typedef std::istreambuf_iterator<char_type> iterator;
+        callbacks_type callbacks;
+        encoding_type encoding;
+        detail::parser<callbacks_type, encoding_type, iterator, iterator>
+            parser(callbacks, encoding);
+        parser.set_input(filename,
+            pdalboost::make_iterator_range(iterator(stream), iterator()));
+        parser.parse_value();
+        parser.finish();
+
+        pt.swap(callbacks.output());
+    }
+
+}}}}
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/json_parser/standard_callbacks.hpp b/vendor/pdalboost/boost/property_tree/detail/json_parser/standard_callbacks.hpp
new file mode 100644
index 0000000..f204726
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/json_parser/standard_callbacks.hpp
@@ -0,0 +1,152 @@
+#ifndef BOOST_PROPERTY_TREE_DETAIL_JSON_PARSER_STANDARD_CALLBACKS_HPP
+#define BOOST_PROPERTY_TREE_DETAIL_JSON_PARSER_STANDARD_CALLBACKS_HPP
+
+#include <boost/property_tree/ptree.hpp>
+#include <vector>
+
+namespace pdalboost { namespace property_tree {
+    namespace json_parser { namespace detail
+{
+
+    namespace constants
+    {
+        template <typename Ch> const Ch* null_value();
+        template <> inline const char* null_value() { return "null"; }
+        template <> inline const wchar_t* null_value() { return L"null"; }
+
+        template <typename Ch> const Ch* true_value();
+        template <> inline const char* true_value() { return "true"; }
+        template <> inline const wchar_t* true_value() { return L"true"; }
+
+        template <typename Ch> const Ch* false_value();
+        template <> inline const char* false_value() { return "false"; }
+        template <> inline const wchar_t* false_value() { return L"false"; }
+    }
+
+    template <typename Ptree>
+    class standard_callbacks {
+    public:
+        typedef typename Ptree::data_type string;
+        typedef typename string::value_type char_type;
+
+        void on_null() {
+            new_value() = constants::null_value<char_type>();
+        }
+
+        void on_boolean(bool b) {
+            new_value() = b ? constants::true_value<char_type>()
+                            : constants::false_value<char_type>();
+        }
+
+        template <typename Range>
+        void on_number(Range code_units) {
+            new_value().assign(code_units.begin(), code_units.end());
+        }
+        void on_begin_number() {
+            new_value();
+        }
+        void on_digit(char_type d) {
+            current_value() += d;
+        }
+        void on_end_number() {}
+
+        void on_begin_string() {
+            new_value();
+        }
+        template <typename Range>
+        void on_code_units(Range code_units) {
+            current_value().append(code_units.begin(), code_units.end());
+        }
+        void on_code_unit(char_type c) {
+            current_value() += c;
+        }
+        void on_end_string() {}
+
+        void on_begin_array() {
+            new_tree();
+            stack.back().k = array;
+        }
+        void on_end_array() {
+            if (stack.back().k == leaf) stack.pop_back();
+            stack.pop_back();
+        }
+
+        void on_begin_object() {
+            new_tree();
+            stack.back().k = object;
+        }
+        void on_end_object() {
+            if (stack.back().k == leaf) stack.pop_back();
+            stack.pop_back();
+        }
+
+        Ptree& output() { return root; }
+
+    protected:
+        bool is_key() const {
+            return stack.back().k == key;
+        }
+        string& current_value() {
+            layer& l = stack.back();
+            switch (l.k) {
+            case key: return key_buffer;
+            default: return l.t->data();
+            }
+        }
+
+    private:
+        Ptree root;
+        string key_buffer;
+        enum kind { array, object, key, leaf };
+        struct layer { kind k; Ptree* t; };
+        std::vector<layer> stack;
+
+        Ptree& new_tree() {
+            if (stack.empty()) {
+                layer l = {leaf, &root};
+                stack.push_back(l);
+                return root;
+            }
+            layer& l = stack.back();
+            switch (l.k) {
+            case array: {
+                l.t->push_back(std::make_pair(string(), Ptree()));
+                layer nl = {leaf, &l.t->back().second};
+                stack.push_back(nl);
+                return *stack.back().t;
+            }
+            case object:
+                assert(false); // must start with string, i.e. call new_value
+            case key: {
+                l.t->push_back(std::make_pair(key_buffer, Ptree()));
+                l.k = object;
+                layer nl = {leaf, &l.t->back().second};
+                stack.push_back(nl);
+                return *stack.back().t;
+            }
+            case leaf:
+                stack.pop_back();
+                return new_tree();
+            }
+            assert(false);
+        }
+        string& new_value() {
+            if (stack.empty()) return new_tree().data();
+            layer& l = stack.back();
+            switch (l.k) {
+            case leaf:
+                stack.pop_back();
+                return new_value();
+            case object:
+                l.k = key;
+                key_buffer.clear();
+                return key_buffer;
+            default:
+                return new_tree().data();
+            }
+        }
+    };
+
+}}}}
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/json_parser/wide_encoding.hpp b/vendor/pdalboost/boost/property_tree/detail/json_parser/wide_encoding.hpp
new file mode 100644
index 0000000..ed76d8d
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/json_parser/wide_encoding.hpp
@@ -0,0 +1,171 @@
+#ifndef BOOST_PROPERTY_TREE_DETAIL_JSON_PARSER_WIDE_ENCODING_HPP
+#define BOOST_PROPERTY_TREE_DETAIL_JSON_PARSER_WIDE_ENCODING_HPP
+
+#include <boost/range/iterator_range_core.hpp>
+
+#include <cassert>
+#include <utility>
+
+namespace pdalboost { namespace property_tree {
+    namespace json_parser { namespace detail
+{
+
+    struct external_wide_encoding
+    {
+        typedef wchar_t external_char;
+
+        bool is_nl(wchar_t c) const { return c == L'\n'; }
+        bool is_ws(wchar_t c) const {
+            return c == L' ' || c == L'\t' || c == L'\n' || c == L'\r';
+        }
+
+        bool is_minus(wchar_t c) const { return c == L'-'; }
+        bool is_plusminus(wchar_t c) const { return c == L'+' || c == L'-'; }
+        bool is_dot(wchar_t c) const { return c == L'.'; }
+        bool is_eE(wchar_t c) const { return c == L'e' || c == L'E'; }
+        bool is_0(wchar_t c) const { return c == L'0'; }
+        bool is_digit(wchar_t c) const { return c >= L'0' && c <= L'9'; }
+        bool is_digit0(wchar_t c) const { return c >= L'1' && c <= L'9'; }
+
+        bool is_quote(wchar_t c) const { return c == L'"'; }
+        bool is_backslash(wchar_t c) const { return c == L'\\'; }
+        bool is_slash(wchar_t c) const { return c == L'/'; }
+
+        bool is_comma(wchar_t c) const { return c == L','; }
+        bool is_open_bracket(wchar_t c) const { return c == L'['; }
+        bool is_close_bracket(wchar_t c) const { return c == L']'; }
+        bool is_colon(wchar_t c) const { return c == L':'; }
+        bool is_open_brace(wchar_t c) const { return c == L'{'; }
+        bool is_close_brace(wchar_t c) const { return c == L'}'; }
+
+        bool is_a(wchar_t c) const { return c == L'a'; }
+        bool is_b(wchar_t c) const { return c == L'b'; }
+        bool is_e(wchar_t c) const { return c == L'e'; }
+        bool is_f(wchar_t c) const { return c == L'f'; }
+        bool is_l(wchar_t c) const { return c == L'l'; }
+        bool is_n(wchar_t c) const { return c == L'n'; }
+        bool is_r(wchar_t c) const { return c == L'r'; }
+        bool is_s(wchar_t c) const { return c == L's'; }
+        bool is_t(wchar_t c) const { return c == L't'; }
+        bool is_u(wchar_t c) const { return c == L'u'; }
+
+        int decode_hexdigit(wchar_t c) {
+            if (c >= L'0' && c <= L'9') return c - L'0';
+            if (c >= L'A' && c <= L'F') return c - L'A' + 10;
+            if (c >= L'a' && c <= L'f') return c - L'a' + 10;
+            return -1;
+        }
+    };
+
+    template <bool B> struct is_utf16 {};
+
+    class wide_wide_encoding : public external_wide_encoding
+    {
+        typedef is_utf16<sizeof(wchar_t) == 2> test_utf16;
+    public:
+        typedef wchar_t internal_char;
+
+        template <typename Iterator>
+        pdalboost::iterator_range<Iterator>
+        to_internal(Iterator first, Iterator last) const {
+            return pdalboost::make_iterator_range(first, last);
+        }
+
+        wchar_t to_internal_trivial(wchar_t c) const {
+            assert(!is_surrogate_high(c) && !is_surrogate_low(c));
+            return c;
+        }
+
+        template <typename Iterator, typename Sentinel,
+                  typename EncodingErrorFn>
+        void skip_codepoint(Iterator& cur, Sentinel end,
+                            EncodingErrorFn error_fn) const {
+            transcode_codepoint(cur, end, DoNothing(), error_fn);
+        }
+
+        template <typename Iterator, typename Sentinel, typename TranscodedFn,
+                  typename EncodingErrorFn>
+        void transcode_codepoint(Iterator& cur, Sentinel end,
+                TranscodedFn transcoded_fn, EncodingErrorFn error_fn) const {
+            return transcode_codepoint(cur, end, transcoded_fn, error_fn,
+                                       test_utf16());
+        }
+
+        template <typename TranscodedFn>
+        void feed_codepoint(unsigned codepoint,
+                            TranscodedFn transcoded_fn) const {
+            feed_codepoint(codepoint, transcoded_fn, test_utf16());
+        }
+
+    private:
+        struct DoNothing {
+            void operator ()(wchar_t) const {}
+        };
+
+        template <typename Iterator, typename Sentinel, typename TranscodedFn,
+                  typename EncodingErrorFn>
+        void transcode_codepoint(Iterator& cur, Sentinel end,
+                                 TranscodedFn transcoded_fn,
+                                 EncodingErrorFn error_fn,
+                                 is_utf16<false>) const {
+            wchar_t c = *cur;
+            if (c < 0x20) {
+                error_fn();
+            }
+            transcoded_fn(c);
+            ++cur;
+        }
+        template <typename Iterator, typename Sentinel, typename TranscodedFn,
+                  typename EncodingErrorFn>
+        void transcode_codepoint(Iterator& cur, Sentinel end,
+                                 TranscodedFn transcoded_fn,
+                                 EncodingErrorFn error_fn,
+                                 is_utf16<true>) const {
+            wchar_t c = *cur;
+            if (c < 0x20) {
+                error_fn();
+            }
+            if (is_surrogate_low(c)) {
+                error_fn();
+            }
+            transcoded_fn(c);
+            ++cur;
+            if (is_surrogate_high(c)) {
+                c = *cur;
+                if (!is_surrogate_low(c)) {
+                    error_fn();
+                }
+                transcoded_fn(c);
+                ++cur;
+            }
+        }
+
+        template <typename TranscodedFn>
+        void feed_codepoint(unsigned codepoint, TranscodedFn transcoded_fn,
+                            is_utf16<false>) const {
+            transcoded_fn(static_cast<wchar_t>(codepoint));
+        }
+        template <typename TranscodedFn>
+        void feed_codepoint(unsigned codepoint, TranscodedFn transcoded_fn,
+                            is_utf16<true>) const {
+            if (codepoint < 0x10000) {
+                transcoded_fn(static_cast<wchar_t>(codepoint));
+            } else {
+                codepoint -= 0x10000;
+                transcoded_fn(static_cast<wchar_t>((codepoint >> 10) | 0xd800));
+                transcoded_fn(static_cast<wchar_t>(
+                    (codepoint & 0x3ff) | 0xdc00));
+            }
+        }
+
+        static bool is_surrogate_high(unsigned codepoint) {
+            return (codepoint & 0xfc00) == 0xd800;
+        }
+        static bool is_surrogate_low(unsigned codepoint) {
+            return (codepoint & 0xfc00) == 0xdc00;
+        }
+    };
+
+}}}}
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/json_parser_error.hpp b/vendor/pdalboost/boost/property_tree/detail/json_parser_error.hpp
new file mode 100644
index 0000000..8996e5d
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/json_parser_error.hpp
@@ -0,0 +1,33 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_JSON_PARSER_ERROR_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_JSON_PARSER_ERROR_HPP_INCLUDED
+
+#include <boost/property_tree/detail/file_parser_error.hpp>
+#include <string>
+
+namespace pdalboost { namespace property_tree { namespace json_parser
+{
+
+    //! Json parser error
+    class json_parser_error: public file_parser_error
+    {
+    public:
+        json_parser_error(const std::string &message, 
+                          const std::string &filename, 
+                          unsigned long line): 
+            file_parser_error(message, filename, line)
+        { 
+        }
+    };
+
+} } }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/json_parser_write.hpp b/vendor/pdalboost/boost/property_tree/detail/json_parser_write.hpp
new file mode 100644
index 0000000..dfa0be3
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/json_parser_write.hpp
@@ -0,0 +1,168 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_JSON_PARSER_WRITE_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_JSON_PARSER_WRITE_HPP_INCLUDED
+
+#include <boost/property_tree/ptree.hpp>
+#include <boost/next_prior.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <string>
+#include <ostream>
+#include <iomanip>
+
+namespace pdalboost { namespace property_tree { namespace json_parser
+{
+
+    // Create necessary escape sequences from illegal characters
+    template<class Ch>
+    std::basic_string<Ch> create_escapes(const std::basic_string<Ch> &s)
+    {
+        std::basic_string<Ch> result;
+        typename std::basic_string<Ch>::const_iterator b = s.begin();
+        typename std::basic_string<Ch>::const_iterator e = s.end();
+        while (b != e)
+        {
+            typedef typename make_unsigned<Ch>::type UCh;
+            UCh c(*b);
+            // This assumes an ASCII superset. But so does everything in PTree.
+            // We escape everything outside ASCII, because this code can't
+            // handle high unicode characters.
+            if (c == 0x20 || c == 0x21 || (c >= 0x23 && c <= 0x2E) ||
+                (c >= 0x30 && c <= 0x5B) || (c >= 0x5D && c <= 0xFF))
+                result += *b;
+            else if (*b == Ch('\b')) result += Ch('\\'), result += Ch('b');
+            else if (*b == Ch('\f')) result += Ch('\\'), result += Ch('f');
+            else if (*b == Ch('\n')) result += Ch('\\'), result += Ch('n');
+            else if (*b == Ch('\r')) result += Ch('\\'), result += Ch('r');
+            else if (*b == Ch('\t')) result += Ch('\\'), result += Ch('t');
+            else if (*b == Ch('/')) result += Ch('\\'), result += Ch('/');
+            else if (*b == Ch('"'))  result += Ch('\\'), result += Ch('"');
+            else if (*b == Ch('\\')) result += Ch('\\'), result += Ch('\\');
+            else
+            {
+                const char *hexdigits = "0123456789ABCDEF";
+                unsigned long u = (std::min)(static_cast<unsigned long>(
+                                                 static_cast<UCh>(*b)),
+                                             0xFFFFul);
+                int d1 = u / 4096; u -= d1 * 4096;
+                int d2 = u / 256; u -= d2 * 256;
+                int d3 = u / 16; u -= d3 * 16;
+                int d4 = u;
+                result += Ch('\\'); result += Ch('u');
+                result += Ch(hexdigits[d1]); result += Ch(hexdigits[d2]);
+                result += Ch(hexdigits[d3]); result += Ch(hexdigits[d4]);
+            }
+            ++b;
+        }
+        return result;
+    }
+
+    template<class Ptree>
+    void write_json_helper(std::basic_ostream<typename Ptree::key_type::value_type> &stream, 
+                           const Ptree &pt,
+                           int indent, bool pretty)
+    {
+
+        typedef typename Ptree::key_type::value_type Ch;
+        typedef typename std::basic_string<Ch> Str;
+
+        // Value or object or array
+        if (indent > 0 && pt.empty())
+        {
+            // Write value
+            Str data = create_escapes(pt.template get_value<Str>());
+            stream << Ch('"') << data << Ch('"');
+
+        }
+        else if (indent > 0 && pt.count(Str()) == pt.size())
+        {
+            // Write array
+            stream << Ch('[');
+            if (pretty) stream << Ch('\n');
+            typename Ptree::const_iterator it = pt.begin();
+            for (; it != pt.end(); ++it)
+            {
+                if (pretty) stream << Str(4 * (indent + 1), Ch(' '));
+                write_json_helper(stream, it->second, indent + 1, pretty);
+                if (pdalboost::next(it) != pt.end())
+                    stream << Ch(',');
+                if (pretty) stream << Ch('\n');
+            }
+            if (pretty) stream << Str(4 * indent, Ch(' '));
+            stream << Ch(']');
+
+        }
+        else
+        {
+            // Write object
+            stream << Ch('{');
+            if (pretty) stream << Ch('\n');
+            typename Ptree::const_iterator it = pt.begin();
+            for (; it != pt.end(); ++it)
+            {
+                if (pretty) stream << Str(4 * (indent + 1), Ch(' '));
+                stream << Ch('"') << create_escapes(it->first) << Ch('"') << Ch(':');
+                if (pretty) stream << Ch(' ');
+                write_json_helper(stream, it->second, indent + 1, pretty);
+                if (pdalboost::next(it) != pt.end())
+                    stream << Ch(',');
+                if (pretty) stream << Ch('\n');
+            }
+            if (pretty) stream << Str(4 * indent, Ch(' '));
+            stream << Ch('}');
+        }
+
+    }
+
+    // Verify if ptree does not contain information that cannot be written to json
+    template<class Ptree>
+    bool verify_json(const Ptree &pt, int depth)
+    {
+
+        typedef typename Ptree::key_type::value_type Ch;
+        typedef typename std::basic_string<Ch> Str;
+
+        // Root ptree cannot have data
+        if (depth == 0 && !pt.template get_value<Str>().empty())
+            return false;
+        
+        // Ptree cannot have both children and data
+        if (!pt.template get_value<Str>().empty() && !pt.empty())
+            return false;
+
+        // Check children
+        typename Ptree::const_iterator it = pt.begin();
+        for (; it != pt.end(); ++it)
+            if (!verify_json(it->second, depth + 1))
+                return false;
+
+        // Success
+        return true;
+
+    }
+    
+    // Write ptree to json stream
+    template<class Ptree>
+    void write_json_internal(std::basic_ostream<typename Ptree::key_type::value_type> &stream, 
+                             const Ptree &pt,
+                             const std::string &filename,
+                             bool pretty)
+    {
+        if (!verify_json(pt, 0))
+            BOOST_PROPERTY_TREE_THROW(json_parser_error("ptree contains data that cannot be represented in JSON format", filename, 0));
+        write_json_helper(stream, pt, 0, pretty);
+        stream << std::endl;
+        if (!stream.good())
+            BOOST_PROPERTY_TREE_THROW(json_parser_error("write error", filename, 0));
+    }
+
+} } }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/ptree_implementation.hpp b/vendor/pdalboost/boost/property_tree/detail/ptree_implementation.hpp
new file mode 100644
index 0000000..5815db4
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/ptree_implementation.hpp
@@ -0,0 +1,933 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2009 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_PTREE_IMPLEMENTATION_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_PTREE_IMPLEMENTATION_HPP_INCLUDED
+
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/reverse_iterator.hpp>
+#include <boost/assert.hpp>
+#include <boost/utility/swap.hpp>
+#include <memory>
+
+#if (defined(BOOST_MSVC) && \
+     (_MSC_FULL_VER >= 160000000 && _MSC_FULL_VER < 170000000)) || \
+    (defined(BOOST_INTEL_WIN) && \
+     defined(BOOST_DINKUMWARE_STDLIB))
+#define BOOST_PROPERTY_TREE_PAIR_BUG
+#endif
+
+namespace pdalboost { namespace property_tree
+{
+    template <class K, class D, class C>
+    struct basic_ptree<K, D, C>::subs
+    {
+        struct by_name {};
+        // The actual child container.
+#if defined(BOOST_PROPERTY_TREE_PAIR_BUG)
+        // MSVC 10 has moved std::pair's members to a base
+        // class. Unfortunately this does break the interface.
+        BOOST_STATIC_CONSTANT(unsigned,
+            first_offset = offsetof(value_type, first));
+#endif
+        typedef multi_index_container<value_type,
+            multi_index::indexed_by<
+                multi_index::sequenced<>,
+                multi_index::ordered_non_unique<multi_index::tag<by_name>,
+#if defined(BOOST_PROPERTY_TREE_PAIR_BUG)
+                    multi_index::member_offset<value_type, const key_type,
+                                        first_offset>,
+#else
+                    multi_index::member<value_type, const key_type,
+                                        &value_type::first>,
+#endif
+                    key_compare
+                >
+            >
+        > base_container;
+
+        // The by-name lookup index.
+        typedef typename base_container::template index<by_name>::type
+            by_name_index;
+
+        // Access functions for getting to the children of a tree.
+        static base_container& ch(self_type *s) {
+            return *static_cast<base_container*>(s->m_children);
+        }
+        static const base_container& ch(const self_type *s) {
+            return *static_cast<const base_container*>(s->m_children);
+        }
+        static by_name_index& assoc(self_type *s) {
+            return ch(s).BOOST_NESTED_TEMPLATE get<by_name>();
+        }
+        static const by_name_index& assoc(const self_type *s) {
+            return ch(s).BOOST_NESTED_TEMPLATE get<by_name>();
+        }
+    };
+    template <class K, class D, class C>
+    class basic_ptree<K, D, C>::iterator : public pdalboost::iterator_adaptor<
+        iterator, typename subs::base_container::iterator, value_type>
+    {
+        friend class pdalboost::iterator_core_access;
+        typedef pdalboost::iterator_adaptor<
+            iterator, typename subs::base_container::iterator, value_type>
+            baset;
+    public:
+        typedef typename baset::reference reference;
+        iterator() {}
+        explicit iterator(typename iterator::base_type b)
+            : iterator::iterator_adaptor_(b)
+        {}
+        reference dereference() const
+        {
+            // multi_index doesn't allow modification of its values, because
+            // indexes could sort by anything, and modification screws that up.
+            // However, we only sort by the key, and it's protected against
+            // modification in the value_type, so this const_cast is safe.
+            return const_cast<reference>(*this->base_reference());
+        }
+    };
+    template <class K, class D, class C>
+    class basic_ptree<K, D, C>::const_iterator : public pdalboost::iterator_adaptor<
+        const_iterator, typename subs::base_container::const_iterator>
+    {
+    public:
+        const_iterator() {}
+        explicit const_iterator(typename const_iterator::base_type b)
+            : const_iterator::iterator_adaptor_(b)
+        {}
+        const_iterator(iterator b)
+            : const_iterator::iterator_adaptor_(b.base())
+        {}
+    };
+    template <class K, class D, class C>
+    class basic_ptree<K, D, C>::reverse_iterator
+        : public pdalboost::reverse_iterator<iterator>
+    {
+    public:
+        reverse_iterator() {}
+        explicit reverse_iterator(iterator b)
+            : pdalboost::reverse_iterator<iterator>(b)
+        {}
+    };
+    template <class K, class D, class C>
+    class basic_ptree<K, D, C>::const_reverse_iterator
+        : public pdalboost::reverse_iterator<const_iterator>
+    {
+    public:
+        const_reverse_iterator() {}
+        explicit const_reverse_iterator(const_iterator b)
+            : pdalboost::reverse_iterator<const_iterator>(b)
+        {}
+        const_reverse_iterator(
+            typename basic_ptree<K, D, C>::reverse_iterator b)
+            : pdalboost::reverse_iterator<const_iterator>(b)
+        {}
+    };
+    template <class K, class D, class C>
+    class basic_ptree<K, D, C>::assoc_iterator
+        : public pdalboost::iterator_adaptor<assoc_iterator,
+                                         typename subs::by_name_index::iterator,
+                                         value_type>
+    {
+        friend class pdalboost::iterator_core_access;
+        typedef pdalboost::iterator_adaptor<assoc_iterator,
+                                         typename subs::by_name_index::iterator,
+                                         value_type>
+            baset;
+    public:
+        typedef typename baset::reference reference;
+        assoc_iterator() {}
+        explicit assoc_iterator(typename assoc_iterator::base_type b)
+            : assoc_iterator::iterator_adaptor_(b)
+        {}
+        reference dereference() const
+        {
+            return const_cast<reference>(*this->base_reference());
+        }
+    };
+    template <class K, class D, class C>
+    class basic_ptree<K, D, C>::const_assoc_iterator
+        : public pdalboost::iterator_adaptor<const_assoc_iterator,
+                                   typename subs::by_name_index::const_iterator>
+    {
+    public:
+        const_assoc_iterator() {}
+        explicit const_assoc_iterator(
+            typename const_assoc_iterator::base_type b)
+            : const_assoc_iterator::iterator_adaptor_(b)
+        {}
+        const_assoc_iterator(assoc_iterator b)
+            : const_assoc_iterator::iterator_adaptor_(b.base())
+        {}
+    };
+
+
+    // Big five
+
+    // Perhaps the children collection could be created on-demand only, to
+    // reduce heap traffic. But that's a lot more work to implement.
+
+    template<class K, class D, class C> inline
+    basic_ptree<K, D, C>::basic_ptree()
+        : m_children(new typename subs::base_container)
+    {
+    }
+
+    template<class K, class D, class C> inline
+    basic_ptree<K, D, C>::basic_ptree(const data_type &d)
+        : m_data(d), m_children(new typename subs::base_container)
+    {
+    }
+
+    template<class K, class D, class C> inline
+    basic_ptree<K, D, C>::basic_ptree(const basic_ptree<K, D, C> &rhs)
+        : m_data(rhs.m_data),
+          m_children(new typename subs::base_container(subs::ch(&rhs)))
+    {
+    }
+
+    template<class K, class D, class C>
+    basic_ptree<K, D, C> &
+        basic_ptree<K, D, C>::operator =(const basic_ptree<K, D, C> &rhs)
+    {
+        self_type(rhs).swap(*this);
+        return *this;
+    }
+
+    template<class K, class D, class C>
+    basic_ptree<K, D, C>::~basic_ptree()
+    {
+        delete &subs::ch(this);
+    }
+
+    template<class K, class D, class C> inline
+    void basic_ptree<K, D, C>::swap(basic_ptree<K, D, C> &rhs)
+    {
+        pdalboost::swap(m_data, rhs.m_data);
+        // Void pointers, no ADL necessary
+        std::swap(m_children, rhs.m_children);
+    }
+
+    // Container view
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::size_type
+        basic_ptree<K, D, C>::size() const
+    {
+        return subs::ch(this).size();
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::size_type
+        basic_ptree<K, D, C>::max_size() const
+    {
+        return subs::ch(this).max_size();
+    }
+
+    template<class K, class D, class C> inline
+    bool basic_ptree<K, D, C>::empty() const
+    {
+        return subs::ch(this).empty();
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::iterator
+        basic_ptree<K, D, C>::begin()
+    {
+        return iterator(subs::ch(this).begin());
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::const_iterator
+        basic_ptree<K, D, C>::begin() const
+    {
+        return const_iterator(subs::ch(this).begin());
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::iterator
+        basic_ptree<K, D, C>::end()
+    {
+        return iterator(subs::ch(this).end());
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::const_iterator
+        basic_ptree<K, D, C>::end() const
+    {
+        return const_iterator(subs::ch(this).end());
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::reverse_iterator
+        basic_ptree<K, D, C>::rbegin()
+    {
+        return reverse_iterator(this->end());
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::const_reverse_iterator
+        basic_ptree<K, D, C>::rbegin() const
+    {
+        return const_reverse_iterator(this->end());
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::reverse_iterator
+        basic_ptree<K, D, C>::rend()
+    {
+        return reverse_iterator(this->begin());
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::const_reverse_iterator
+        basic_ptree<K, D, C>::rend() const
+    {
+        return const_reverse_iterator(this->begin());
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::value_type &
+        basic_ptree<K, D, C>::front()
+    {
+        return const_cast<value_type&>(subs::ch(this).front());
+    }
+
+    template<class K, class D, class C> inline
+    const typename basic_ptree<K, D, C>::value_type &
+        basic_ptree<K, D, C>::front() const
+    {
+        return subs::ch(this).front();
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::value_type &
+        basic_ptree<K, D, C>::back()
+    {
+        return const_cast<value_type&>(subs::ch(this).back());
+    }
+
+    template<class K, class D, class C> inline
+    const typename basic_ptree<K, D, C>::value_type &
+        basic_ptree<K, D, C>::back() const
+    {
+        return subs::ch(this).back();
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::iterator
+    basic_ptree<K, D, C>::insert(iterator where, const value_type &value)
+    {
+        return iterator(subs::ch(this).insert(where.base(), value).first);
+    }
+
+    template<class K, class D, class C>
+    template<class It> inline
+    void basic_ptree<K, D, C>::insert(iterator where, It first, It last)
+    {
+        subs::ch(this).insert(where.base(), first, last);
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::iterator
+        basic_ptree<K, D, C>::erase(iterator where)
+    {
+        return iterator(subs::ch(this).erase(where.base()));
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::iterator
+        basic_ptree<K, D, C>::erase(iterator first, iterator last)
+    {
+        return iterator(subs::ch(this).erase(first.base(), last.base()));
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::iterator
+        basic_ptree<K, D, C>::push_front(const value_type &value)
+    {
+        return iterator(subs::ch(this).push_front(value).first);
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::iterator
+        basic_ptree<K, D, C>::push_back(const value_type &value)
+    {
+        return iterator(subs::ch(this).push_back(value).first);
+    }
+
+    template<class K, class D, class C> inline
+    void basic_ptree<K, D, C>::pop_front()
+    {
+        subs::ch(this).pop_front();
+    }
+
+    template<class K, class D, class C> inline
+    void basic_ptree<K, D, C>::pop_back()
+    {
+        subs::ch(this).pop_back();
+    }
+
+    template<class K, class D, class C> inline
+    void basic_ptree<K, D, C>::reverse()
+    {
+        subs::ch(this).reverse();
+    }
+
+    namespace impl
+    {
+        struct by_first
+        {
+            template <typename P>
+            bool operator ()(const P& lhs, const P& rhs) const {
+              return lhs.first < rhs.first;
+            }
+        };
+
+        template <typename C>
+        struct equal_pred
+        {
+            template <typename P>
+            bool operator ()(const P& lhs, const P& rhs) const {
+                C c;
+                return !c(lhs.first, rhs.first) &&
+                       !c(rhs.first, lhs.first) &&
+                       lhs.second == rhs.second;
+            }
+        };
+
+        template <typename C, typename MI>
+        bool equal_children(const MI& ch1, const MI& ch2) {
+            // Assumes ch1.size() == ch2.size()
+            return std::equal(ch1.begin(), ch1.end(),
+                ch2.begin(), equal_pred<C>());
+        }
+    }
+
+    template<class K, class D, class C> inline
+    void basic_ptree<K, D, C>::sort()
+    {
+        sort(impl::by_first());
+    }
+
+    template<class K, class D, class C>
+    template<class Compare> inline
+    void basic_ptree<K, D, C>::sort(Compare comp)
+    {
+        subs::ch(this).sort(comp);
+    }
+
+    // Equality
+
+    template<class K, class D, class C> inline
+    bool basic_ptree<K, D, C>::operator ==(
+                                  const basic_ptree<K, D, C> &rhs) const
+    {
+        // The size test is cheap, so add it as an optimization
+        return size() == rhs.size() && data() == rhs.data() &&
+            impl::equal_children<C>(subs::ch(this), subs::ch(&rhs));
+    }
+
+    template<class K, class D, class C> inline
+    bool basic_ptree<K, D, C>::operator !=(
+                                  const basic_ptree<K, D, C> &rhs) const
+    {
+        return !(*this == rhs);
+    }
+
+    // Associative view
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::assoc_iterator
+        basic_ptree<K, D, C>::ordered_begin()
+    {
+        return assoc_iterator(subs::assoc(this).begin());
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::const_assoc_iterator
+        basic_ptree<K, D, C>::ordered_begin() const
+    {
+        return const_assoc_iterator(subs::assoc(this).begin());
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::assoc_iterator
+        basic_ptree<K, D, C>::not_found()
+    {
+        return assoc_iterator(subs::assoc(this).end());
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::const_assoc_iterator
+        basic_ptree<K, D, C>::not_found() const
+    {
+        return const_assoc_iterator(subs::assoc(this).end());
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::assoc_iterator
+        basic_ptree<K, D, C>::find(const key_type &key)
+    {
+        return assoc_iterator(subs::assoc(this).find(key));
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::const_assoc_iterator
+        basic_ptree<K, D, C>::find(const key_type &key) const
+    {
+        return const_assoc_iterator(subs::assoc(this).find(key));
+    }
+
+    template<class K, class D, class C> inline
+    std::pair<
+        typename basic_ptree<K, D, C>::assoc_iterator,
+        typename basic_ptree<K, D, C>::assoc_iterator
+    > basic_ptree<K, D, C>::equal_range(const key_type &key)
+    {
+        std::pair<typename subs::by_name_index::iterator,
+                  typename subs::by_name_index::iterator> r(
+            subs::assoc(this).equal_range(key));
+        return std::pair<assoc_iterator, assoc_iterator>(
+          assoc_iterator(r.first), assoc_iterator(r.second));
+    }
+
+    template<class K, class D, class C> inline
+    std::pair<
+        typename basic_ptree<K, D, C>::const_assoc_iterator,
+        typename basic_ptree<K, D, C>::const_assoc_iterator
+    > basic_ptree<K, D, C>::equal_range(const key_type &key) const
+    {
+        std::pair<typename subs::by_name_index::const_iterator,
+                  typename subs::by_name_index::const_iterator> r(
+            subs::assoc(this).equal_range(key));
+        return std::pair<const_assoc_iterator, const_assoc_iterator>(
+            const_assoc_iterator(r.first), const_assoc_iterator(r.second));
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::size_type
+        basic_ptree<K, D, C>::count(const key_type &key) const
+    {
+        return subs::assoc(this).count(key);
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::size_type
+        basic_ptree<K, D, C>::erase(const key_type &key)
+    {
+        return subs::assoc(this).erase(key);
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::iterator
+        basic_ptree<K, D, C>::to_iterator(assoc_iterator ai)
+    {
+        return iterator(subs::ch(this).
+            BOOST_NESTED_TEMPLATE project<0>(ai.base()));
+    }
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::const_iterator
+        basic_ptree<K, D, C>::to_iterator(const_assoc_iterator ai) const
+    {
+        return const_iterator(subs::ch(this).
+            BOOST_NESTED_TEMPLATE project<0>(ai.base()));
+    }
+
+    // Property tree view
+
+    template<class K, class D, class C> inline
+    typename basic_ptree<K, D, C>::data_type &
+        basic_ptree<K, D, C>::data()
+    {
+        return m_data;
+    }
+
+    template<class K, class D, class C> inline
+    const typename basic_ptree<K, D, C>::data_type &
+        basic_ptree<K, D, C>::data() const
+    {
+        return m_data;
+    }
+
+    template<class K, class D, class C> inline
+    void basic_ptree<K, D, C>::clear()
+    {
+        m_data = data_type();
+        subs::ch(this).clear();
+    }
+
+    template<class K, class D, class C>
+    basic_ptree<K, D, C> &
+        basic_ptree<K, D, C>::get_child(const path_type &path)
+    {
+        path_type p(path);
+        self_type *n = walk_path(p);
+        if (!n) {
+            BOOST_PROPERTY_TREE_THROW(ptree_bad_path("No such node", path));
+        }
+        return *n;
+    }
+
+    template<class K, class D, class C> inline
+    const basic_ptree<K, D, C> &
+        basic_ptree<K, D, C>::get_child(const path_type &path) const
+    {
+        return const_cast<self_type*>(this)->get_child(path);
+    }
+
+    template<class K, class D, class C> inline
+    basic_ptree<K, D, C> &
+        basic_ptree<K, D, C>::get_child(const path_type &path,
+                                        self_type &default_value)
+    {
+        path_type p(path);
+        self_type *n = walk_path(p);
+        return n ? *n : default_value;
+    }
+
+    template<class K, class D, class C> inline
+    const basic_ptree<K, D, C> &
+        basic_ptree<K, D, C>::get_child(const path_type &path,
+                                        const self_type &default_value) const
+    {
+        return const_cast<self_type*>(this)->get_child(path,
+            const_cast<self_type&>(default_value));
+    }
+
+
+    template<class K, class D, class C>
+    optional<basic_ptree<K, D, C> &>
+        basic_ptree<K, D, C>::get_child_optional(const path_type &path)
+    {
+        path_type p(path);
+        self_type *n = walk_path(p);
+        if (!n) {
+            return optional<self_type&>();
+        }
+        return *n;
+    }
+
+    template<class K, class D, class C>
+    optional<const basic_ptree<K, D, C> &>
+        basic_ptree<K, D, C>::get_child_optional(const path_type &path) const
+    {
+        path_type p(path);
+        self_type *n = walk_path(p);
+        if (!n) {
+            return optional<const self_type&>();
+        }
+        return *n;
+    }
+
+    template<class K, class D, class C>
+    basic_ptree<K, D, C> &
+        basic_ptree<K, D, C>::put_child(const path_type &path,
+                                        const self_type &value)
+    {
+        path_type p(path);
+        self_type &parent = force_path(p);
+        // Got the parent. Now get the correct child.
+        key_type fragment = p.reduce();
+        assoc_iterator el = parent.find(fragment);
+        // If the new child exists, replace it.
+        if(el != parent.not_found()) {
+            return el->second = value;
+        } else {
+            return parent.push_back(value_type(fragment, value))->second;
+        }
+    }
+
+    template<class K, class D, class C>
+    basic_ptree<K, D, C> &
+        basic_ptree<K, D, C>::add_child(const path_type &path,
+                                        const self_type &value)
+    {
+        path_type p(path);
+        self_type &parent = force_path(p);
+        // Got the parent.
+        key_type fragment = p.reduce();
+        return parent.push_back(value_type(fragment, value))->second;
+    }
+
+    template<class K, class D, class C>
+    template<class Type, class Translator>
+    typename pdalboost::enable_if<detail::is_translator<Translator>, Type>::type
+    basic_ptree<K, D, C>::get_value(Translator tr) const
+    {
+        if(pdalboost::optional<Type> o = get_value_optional<Type>(tr)) {
+            return *o;
+        }
+        BOOST_PROPERTY_TREE_THROW(ptree_bad_data(
+            std::string("conversion of data to type \"") +
+            typeid(Type).name() + "\" failed", data()));
+    }
+
+    template<class K, class D, class C>
+    template<class Type> inline
+    Type basic_ptree<K, D, C>::get_value() const
+    {
+        return get_value<Type>(
+            typename translator_between<data_type, Type>::type());
+    }
+
+    template<class K, class D, class C>
+    template<class Type, class Translator> inline
+    Type basic_ptree<K, D, C>::get_value(const Type &default_value,
+                                         Translator tr) const
+    {
+        return get_value_optional<Type>(tr).get_value_or(default_value);
+    }
+
+    template<class K, class D, class C>
+    template <class Ch, class Translator>
+    typename pdalboost::enable_if<
+        detail::is_character<Ch>,
+        std::basic_string<Ch>
+    >::type
+    basic_ptree<K, D, C>::get_value(const Ch *default_value, Translator tr)const
+    {
+        return get_value<std::basic_string<Ch>, Translator>(default_value, tr);
+    }
+
+    template<class K, class D, class C>
+    template<class Type> inline
+    typename pdalboost::disable_if<detail::is_translator<Type>, Type>::type
+    basic_ptree<K, D, C>::get_value(const Type &default_value) const
+    {
+        return get_value(default_value,
+                         typename translator_between<data_type, Type>::type());
+    }
+
+    template<class K, class D, class C>
+    template <class Ch>
+    typename pdalboost::enable_if<
+        detail::is_character<Ch>,
+        std::basic_string<Ch>
+    >::type
+    basic_ptree<K, D, C>::get_value(const Ch *default_value) const
+    {
+        return get_value< std::basic_string<Ch> >(default_value);
+    }
+
+    template<class K, class D, class C>
+    template<class Type, class Translator> inline
+    optional<Type> basic_ptree<K, D, C>::get_value_optional(
+                                                Translator tr) const
+    {
+        return tr.get_value(data());
+    }
+
+    template<class K, class D, class C>
+    template<class Type> inline
+    optional<Type> basic_ptree<K, D, C>::get_value_optional() const
+    {
+        return get_value_optional<Type>(
+            typename translator_between<data_type, Type>::type());
+    }
+
+    template<class K, class D, class C>
+    template<class Type, class Translator> inline
+    typename pdalboost::enable_if<detail::is_translator<Translator>, Type>::type
+    basic_ptree<K, D, C>::get(const path_type &path,
+                              Translator tr) const
+    {
+        return get_child(path).BOOST_NESTED_TEMPLATE get_value<Type>(tr);
+    }
+
+    template<class K, class D, class C>
+    template<class Type> inline
+    Type basic_ptree<K, D, C>::get(const path_type &path) const
+    {
+        return get_child(path).BOOST_NESTED_TEMPLATE get_value<Type>();
+    }
+
+    template<class K, class D, class C>
+    template<class Type, class Translator> inline
+    Type basic_ptree<K, D, C>::get(const path_type &path,
+                                   const Type &default_value,
+                                   Translator tr) const
+    {
+        return get_optional<Type>(path, tr).get_value_or(default_value);
+    }
+
+    template<class K, class D, class C>
+    template <class Ch, class Translator>
+    typename pdalboost::enable_if<
+        detail::is_character<Ch>,
+        std::basic_string<Ch>
+    >::type
+    basic_ptree<K, D, C>::get(
+        const path_type &path, const Ch *default_value, Translator tr) const
+    {
+        return get<std::basic_string<Ch>, Translator>(path, default_value, tr);
+    }
+
+    template<class K, class D, class C>
+    template<class Type> inline
+    typename pdalboost::disable_if<detail::is_translator<Type>, Type>::type
+    basic_ptree<K, D, C>::get(const path_type &path,
+                              const Type &default_value) const
+    {
+        return get_optional<Type>(path).get_value_or(default_value);
+    }
+
+    template<class K, class D, class C>
+    template <class Ch>
+    typename pdalboost::enable_if<
+        detail::is_character<Ch>,
+        std::basic_string<Ch>
+    >::type
+    basic_ptree<K, D, C>::get(
+        const path_type &path, const Ch *default_value) const
+    {
+        return get< std::basic_string<Ch> >(path, default_value);
+    }
+
+    template<class K, class D, class C>
+    template<class Type, class Translator>
+    optional<Type> basic_ptree<K, D, C>::get_optional(const path_type &path,
+                                                         Translator tr) const
+    {
+        if (optional<const self_type&> child = get_child_optional(path))
+            return child.get().
+                BOOST_NESTED_TEMPLATE get_value_optional<Type>(tr);
+        else
+            return optional<Type>();
+    }
+
+    template<class K, class D, class C>
+    template<class Type>
+    optional<Type> basic_ptree<K, D, C>::get_optional(
+                                                const path_type &path) const
+    {
+        if (optional<const self_type&> child = get_child_optional(path))
+            return child.get().BOOST_NESTED_TEMPLATE get_value_optional<Type>();
+        else
+            return optional<Type>();
+    }
+
+    template<class K, class D, class C>
+    template<class Type, class Translator>
+    void basic_ptree<K, D, C>::put_value(const Type &value, Translator tr)
+    {
+        if(optional<data_type> o = tr.put_value(value)) {
+            data() = *o;
+        } else {
+            BOOST_PROPERTY_TREE_THROW(ptree_bad_data(
+                std::string("conversion of type \"") + typeid(Type).name() +
+                "\" to data failed", pdalboost::any()));
+        }
+    }
+
+    template<class K, class D, class C>
+    template<class Type> inline
+    void basic_ptree<K, D, C>::put_value(const Type &value)
+    {
+        put_value(value, typename translator_between<data_type, Type>::type());
+    }
+
+    template<class K, class D, class C>
+    template<class Type, typename Translator>
+    basic_ptree<K, D, C> & basic_ptree<K, D, C>::put(
+        const path_type &path, const Type &value, Translator tr)
+    {
+        if(optional<self_type &> child = get_child_optional(path)) {
+            child.get().put_value(value, tr);
+            return *child;
+        } else {
+            self_type &child2 = put_child(path, self_type());
+            child2.put_value(value, tr);
+            return child2;
+        }
+    }
+
+    template<class K, class D, class C>
+    template<class Type> inline
+    basic_ptree<K, D, C> & basic_ptree<K, D, C>::put(
+        const path_type &path, const Type &value)
+    {
+        return put(path, value,
+                   typename translator_between<data_type, Type>::type());
+    }
+
+    template<class K, class D, class C>
+    template<class Type, typename Translator> inline
+    basic_ptree<K, D, C> & basic_ptree<K, D, C>::add(
+        const path_type &path, const Type &value, Translator tr)
+    {
+        self_type &child = add_child(path, self_type());
+        child.put_value(value, tr);
+        return child;
+    }
+
+    template<class K, class D, class C>
+    template<class Type> inline
+    basic_ptree<K, D, C> & basic_ptree<K, D, C>::add(
+        const path_type &path, const Type &value)
+    {
+        return add(path, value,
+                   typename translator_between<data_type, Type>::type());
+    }
+
+
+    template<class K, class D, class C>
+    basic_ptree<K, D, C> *
+    basic_ptree<K, D, C>::walk_path(path_type &p) const
+    {
+        if(p.empty()) {
+            // I'm the child we're looking for.
+            return const_cast<basic_ptree*>(this);
+        }
+        // Recurse down the tree to find the path.
+        key_type fragment = p.reduce();
+        const_assoc_iterator el = find(fragment);
+        if(el == not_found()) {
+            // No such child.
+            return 0;
+        }
+        // Not done yet, recurse.
+        return el->second.walk_path(p);
+    }
+
+    template<class K, class D, class C>
+    basic_ptree<K, D, C> & basic_ptree<K, D, C>::force_path(path_type &p)
+    {
+        BOOST_ASSERT(!p.empty() && "Empty path not allowed for put_child.");
+        if(p.single()) {
+            // I'm the parent we're looking for.
+            return *this;
+        }
+        key_type fragment = p.reduce();
+        assoc_iterator el = find(fragment);
+        // If we've found an existing child, go down that path. Else
+        // create a new one.
+        self_type& child = el == not_found() ?
+            push_back(value_type(fragment, self_type()))->second : el->second;
+        return child.force_path(p);
+    }
+
+    // Free functions
+
+    template<class K, class D, class C>
+    inline void swap(basic_ptree<K, D, C> &pt1, basic_ptree<K, D, C> &pt2)
+    {
+        pt1.swap(pt2);
+    }
+
+} }
+
+#if defined(BOOST_PROPERTY_TREE_PAIR_BUG)
+#undef BOOST_PROPERTY_TREE_PAIR_BUG
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/ptree_utils.hpp b/vendor/pdalboost/boost/property_tree/detail/ptree_utils.hpp
new file mode 100644
index 0000000..d770ba7
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/ptree_utils.hpp
@@ -0,0 +1,105 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_PTREE_UTILS_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_PTREE_UTILS_HPP_INCLUDED
+
+#include <boost/limits.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/and.hpp>
+#include <string>
+#include <algorithm>
+#include <locale>
+
+namespace pdalboost { namespace property_tree { namespace detail
+{
+
+    template<class T>
+    struct less_nocase
+    {
+        typedef typename T::value_type Ch;
+        std::locale m_locale;
+        inline bool operator()(Ch c1, Ch c2) const
+        {
+            return std::toupper(c1, m_locale) < std::toupper(c2, m_locale);
+        }
+        inline bool operator()(const T &t1, const T &t2) const
+        {
+            return std::lexicographical_compare(t1.begin(), t1.end(),
+                                                t2.begin(), t2.end(), *this);
+        }
+    };
+
+    template <typename Ch>
+    struct is_character : public pdalboost::false_type {};
+    template <>
+    struct is_character<char> : public pdalboost::true_type {};
+    template <>
+    struct is_character<wchar_t> : public pdalboost::true_type {};
+
+
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(internal_type)
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(external_type)
+    template <typename T>
+    struct is_translator : public pdalboost::mpl::and_<
+        has_internal_type<T>, has_external_type<T> > {};
+
+
+
+    // Naively convert narrow string to another character type
+    template<typename Str>
+    Str widen(const char *text)
+    {
+	Str result;
+        while (*text)
+        {
+            result += typename Str::value_type(*text);
+            ++text;
+        }
+        return result;
+    }
+
+    // Naively convert string to narrow character type
+    template<typename Str, typename char_type>
+    Str narrow(const char_type *text)
+    {
+	Str result;
+        while (*text)
+        {
+            if (*text < 0 || *text > (std::numeric_limits<char>::max)())
+                result += '*';
+            else
+                result += typename Str::value_type(*text);
+            ++text;
+        }
+        return result;
+    }
+
+    // Remove trailing and leading spaces
+    template<class Str>
+    Str trim(const Str &s, const std::locale &loc = std::locale())
+    {
+        typename Str::const_iterator first = s.begin();
+        typename Str::const_iterator end = s.end();
+        while (first != end && std::isspace(*first, loc))
+            ++first;
+        if (first == end)
+            return Str();
+        typename Str::const_iterator last = end;
+        do --last; while (std::isspace(*last, loc));
+        if (first != s.begin() || last + 1 != end)
+            return Str(first, last + 1);
+        else
+            return s;
+    }
+
+} } }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/rapidxml.hpp b/vendor/pdalboost/boost/property_tree/detail/rapidxml.hpp
new file mode 100644
index 0000000..abb890d
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/rapidxml.hpp
@@ -0,0 +1,2595 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2006, 2009 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_RAPIDXML_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_RAPIDXML_HPP_INCLUDED
+
+//! \file rapidxml.hpp This file contains rapidxml parser and DOM implementation
+
+#include <boost/assert.hpp>
+#include <cstdlib>      // For std::size_t
+#include <new>          // For placement new
+
+// On MSVC, disable "conditional expression is constant" warning (level 4). 
+// This warning is almost impossible to avoid with certain types of templated code
+#ifdef _MSC_VER
+    #pragma warning(push)
+    #pragma warning(disable:4127)   // Conditional expression is constant
+#endif
+
+///////////////////////////////////////////////////////////////////////////
+// BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR
+    
+#include <exception>    // For std::exception
+
+#define BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
+
+namespace pdalboost { namespace property_tree { namespace detail {namespace pdalboostrapidxml
+{
+
+    //! Parse error exception. 
+    //! This exception is thrown by the parser when an error occurs. 
+    //! Use what() function to get human-readable error message. 
+    //! Use where() function to get a pointer to position within source text where error was detected.
+    //! <br><br>
+    //! If throwing exceptions by the parser is undesirable, 
+    //! it can be disabled by defining RAPIDXML_NO_EXCEPTIONS macro before rapidxml.hpp is included.
+    //! This will cause the parser to call pdalboostrapidxml::parse_error_handler() function instead of throwing an exception.
+    //! This function must be defined by the user.
+    //! <br><br>
+    //! This class derives from <code>std::exception</code> class.
+    class parse_error: public std::exception
+    {
+    
+    public:
+    
+        //! Constructs parse error
+        parse_error(const char *wa, void *we)
+            : m_what(wa)
+            , m_where(we)
+        {
+        }
+
+        //! Gets human readable description of error.
+        //! \return Pointer to null terminated description of the error.
+        virtual const char *what() const throw()
+        {
+            return m_what;
+        }
+
+        //! Gets pointer to character data where error happened.
+        //! Ch should be the same as char type of xml_document that produced the error.
+        //! \return Pointer to location within the parsed string where error occurred.
+        template<class Ch>
+        Ch *where() const
+        {
+            return reinterpret_cast<Ch *>(m_where);
+        }
+
+    private:  
+
+        const char *m_what;
+        void *m_where;
+
+    };
+}}}}
+
+///////////////////////////////////////////////////////////////////////////
+// Pool sizes
+
+#ifndef BOOST_PROPERTY_TREE_RAPIDXML_STATIC_POOL_SIZE
+    // Size of static memory block of memory_pool.
+    // Define BOOST_PROPERTY_TREE_RAPIDXML_STATIC_POOL_SIZE before including rapidxml.hpp if you want to override the default value.
+    // No dynamic memory allocations are performed by memory_pool until static memory is exhausted.
+    #define BOOST_PROPERTY_TREE_RAPIDXML_STATIC_POOL_SIZE (64 * 1024)
+#endif
+
+#ifndef BOOST_PROPERTY_TREE_RAPIDXML_DYNAMIC_POOL_SIZE
+    // Size of dynamic memory block of memory_pool.
+    // Define BOOST_PROPERTY_TREE_RAPIDXML_DYNAMIC_POOL_SIZE before including rapidxml.hpp if you want to override the default value.
+    // After the static block is exhausted, dynamic blocks with approximately this size are allocated by memory_pool.
+    #define BOOST_PROPERTY_TREE_RAPIDXML_DYNAMIC_POOL_SIZE (64 * 1024)
+#endif
+
+#ifndef BOOST_PROPERTY_TREE_RAPIDXML_ALIGNMENT
+    // Memory allocation alignment.
+    // Define BOOST_PROPERTY_TREE_RAPIDXML_ALIGNMENT before including rapidxml.hpp if you want to override the default value, which is the size of pointer.
+    // All memory allocations for nodes, attributes and strings will be aligned to this value.
+    // This must be a power of 2 and at least 1, otherwise memory_pool will not work.
+    #define BOOST_PROPERTY_TREE_RAPIDXML_ALIGNMENT sizeof(void *)
+#endif
+
+namespace pdalboost { namespace property_tree { namespace detail {namespace pdalboostrapidxml
+{
+    // Forward declarations
+    template<class Ch> class xml_node;
+    template<class Ch> class xml_attribute;
+    template<class Ch> class xml_document;
+    
+    //! Enumeration listing all node types produced by the parser.
+    //! Use xml_node::type() function to query node type.
+    enum node_type
+    {
+        node_document,      //!< A document node. Name and value are empty.
+        node_element,       //!< An element node. Name contains element name. Value contains text of first data node.
+        node_data,          //!< A data node. Name is empty. Value contains data text.
+        node_cdata,         //!< A CDATA node. Name is empty. Value contains data text.
+        node_comment,       //!< A comment node. Name is empty. Value contains comment text.
+        node_declaration,   //!< A declaration node. Name and value are empty. Declaration parameters (version, encoding and standalone) are in node attributes.
+        node_doctype,       //!< A DOCTYPE node. Name is empty. Value contains DOCTYPE text.
+        node_pi             //!< A PI node. Name contains target. Value contains instructions.
+    };
+
+    ///////////////////////////////////////////////////////////////////////
+    // Parsing flags
+
+    //! Parse flag instructing the parser to not create data nodes. 
+    //! Text of first data node will still be placed in value of parent element, unless pdalboostrapidxml::parse_no_element_values flag is also specified.
+    //! Can be combined with other flags by use of | operator.
+    //! <br><br>
+    //! See xml_document::parse() function.
+    const int parse_no_data_nodes = 0x1;            
+
+    //! Parse flag instructing the parser to not use text of first data node as a value of parent element.
+    //! Can be combined with other flags by use of | operator.
+    //! Note that child data nodes of element node take precendence over its value when printing. 
+    //! That is, if element has one or more child data nodes <em>and</em> a value, the value will be ignored.
+    //! Use pdalboostrapidxml::parse_no_data_nodes flag to prevent creation of data nodes if you want to manipulate data using values of elements.
+    //! <br><br>
+    //! See xml_document::parse() function.
+    const int parse_no_element_values = 0x2;
+    
+    //! Parse flag instructing the parser to not place zero terminators after strings in the source text.
+    //! By default zero terminators are placed, modifying source text.
+    //! Can be combined with other flags by use of | operator.
+    //! <br><br>
+    //! See xml_document::parse() function.
+    const int parse_no_string_terminators = 0x4;
+    
+    //! Parse flag instructing the parser to not translate entities in the source text.
+    //! By default entities are translated, modifying source text.
+    //! Can be combined with other flags by use of | operator.
+    //! <br><br>
+    //! See xml_document::parse() function.
+    const int parse_no_entity_translation = 0x8;
+    
+    //! Parse flag instructing the parser to disable UTF-8 handling and assume plain 8 bit characters.
+    //! By default, UTF-8 handling is enabled.
+    //! Can be combined with other flags by use of | operator.
+    //! <br><br>
+    //! See xml_document::parse() function.
+    const int parse_no_utf8 = 0x10;
+    
+    //! Parse flag instructing the parser to create XML declaration node.
+    //! By default, declaration node is not created.
+    //! Can be combined with other flags by use of | operator.
+    //! <br><br>
+    //! See xml_document::parse() function.
+    const int parse_declaration_node = 0x20;
+    
+    //! Parse flag instructing the parser to create comments nodes.
+    //! By default, comment nodes are not created.
+    //! Can be combined with other flags by use of | operator.
+    //! <br><br>
+    //! See xml_document::parse() function.
+    const int parse_comment_nodes = 0x40;
+    
+    //! Parse flag instructing the parser to create DOCTYPE node.
+    //! By default, doctype node is not created.
+    //! Although W3C specification allows at most one DOCTYPE node, RapidXml will silently accept documents with more than one.
+    //! Can be combined with other flags by use of | operator.
+    //! <br><br>
+    //! See xml_document::parse() function.
+    const int parse_doctype_node = 0x80;
+    
+    //! Parse flag instructing the parser to create PI nodes.
+    //! By default, PI nodes are not created.
+    //! Can be combined with other flags by use of | operator.
+    //! <br><br>
+    //! See xml_document::parse() function.
+    const int parse_pi_nodes = 0x100;
+    
+    //! Parse flag instructing the parser to validate closing tag names. 
+    //! If not set, name inside closing tag is irrelevant to the parser.
+    //! By default, closing tags are not validated.
+    //! Can be combined with other flags by use of | operator.
+    //! <br><br>
+    //! See xml_document::parse() function.
+    const int parse_validate_closing_tags = 0x200;
+    
+    //! Parse flag instructing the parser to trim all leading and trailing whitespace of data nodes.
+    //! By default, whitespace is not trimmed. 
+    //! This flag does not cause the parser to modify source text.
+    //! Can be combined with other flags by use of | operator.
+    //! <br><br>
+    //! See xml_document::parse() function.
+    const int parse_trim_whitespace = 0x400;
+
+    //! Parse flag instructing the parser to condense all whitespace runs of data nodes to a single space character.
+    //! Trimming of leading and trailing whitespace of data is controlled by pdalboostrapidxml::parse_trim_whitespace flag.
+    //! By default, whitespace is not normalized. 
+    //! If this flag is specified, source text will be modified.
+    //! Can be combined with other flags by use of | operator.
+    //! <br><br>
+    //! See xml_document::parse() function.
+    const int parse_normalize_whitespace = 0x800;
+
+    // Compound flags
+    
+    //! Parse flags which represent default behaviour of the parser. 
+    //! This is always equal to 0, so that all other flags can be simply ored together.
+    //! Normally there is no need to inconveniently disable flags by anding with their negated (~) values.
+    //! This also means that meaning of each flag is a <i>negation</i> of the default setting. 
+    //! For example, if flag name is pdalboostrapidxml::parse_no_utf8, it means that utf-8 is <i>enabled</i> by default,
+    //! and using the flag will disable it.
+    //! <br><br>
+    //! See xml_document::parse() function.
+    const int parse_default = 0;
+    
+    //! A combination of parse flags that forbids any modifications of the source text. 
+    //! This also results in faster parsing. However, note that the following will occur:
+    //! <ul>
+    //! <li>names and values of nodes will not be zero terminated, you have to use xml_base::name_size() and xml_base::value_size() functions to determine where name and value ends</li>
+    //! <li>entities will not be translated</li>
+    //! <li>whitespace will not be normalized</li>
+    //! </ul>
+    //! See xml_document::parse() function.
+    const int parse_non_destructive = parse_no_string_terminators | parse_no_entity_translation;
+    
+    //! A combination of parse flags resulting in fastest possible parsing, without sacrificing important data.
+    //! <br><br>
+    //! See xml_document::parse() function.
+    const int parse_fastest = parse_non_destructive | parse_no_data_nodes;
+    
+    //! A combination of parse flags resulting in largest amount of data being extracted. 
+    //! This usually results in slowest parsing.
+    //! <br><br>
+    //! See xml_document::parse() function.
+    const int parse_full = parse_declaration_node | parse_comment_nodes | parse_doctype_node | parse_pi_nodes | parse_validate_closing_tags;
+
+    ///////////////////////////////////////////////////////////////////////
+    // Internals
+
+    //! \cond internal
+    namespace internal
+    {
+
+        // Struct that contains lookup tables for the parser
+        // It must be a template to allow correct linking (because it has static data members, which are defined in a header file).
+        template<int Dummy>
+        struct lookup_tables
+        {
+            static const unsigned char lookup_whitespace[256];              // Whitespace table
+            static const unsigned char lookup_node_name[256];               // Node name table
+            static const unsigned char lookup_text[256];                    // Text table
+            static const unsigned char lookup_text_pure_no_ws[256];         // Text table
+            static const unsigned char lookup_text_pure_with_ws[256];       // Text table
+            static const unsigned char lookup_attribute_name[256];          // Attribute name table
+            static const unsigned char lookup_attribute_data_1[256];        // Attribute data table with single quote
+            static const unsigned char lookup_attribute_data_1_pure[256];   // Attribute data table with single quote
+            static const unsigned char lookup_attribute_data_2[256];        // Attribute data table with double quotes
+            static const unsigned char lookup_attribute_data_2_pure[256];   // Attribute data table with double quotes
+            static const unsigned char lookup_digits[256];                  // Digits
+            static const unsigned char lookup_upcase[256];                  // To uppercase conversion table for ASCII characters
+        };
+
+        // Find length of the string
+        template<class Ch>
+        inline std::size_t measure(const Ch *p)
+        {
+            const Ch *tmp = p;
+            while (*tmp) 
+                ++tmp;
+            return tmp - p;
+        }
+
+        // Compare strings for equality
+        template<class Ch>
+        inline bool compare(const Ch *p1, std::size_t size1, const Ch *p2, std::size_t size2, bool case_sensitive)
+        {
+            if (size1 != size2)
+                return false;
+            if (case_sensitive)
+            {
+                for (const Ch *end = p1 + size1; p1 < end; ++p1, ++p2)
+                    if (*p1 != *p2)
+                        return false;
+            }
+            else
+            {
+                for (const Ch *end = p1 + size1; p1 < end; ++p1, ++p2)
+                    if (lookup_tables<0>::lookup_upcase[static_cast<unsigned char>(*p1)] != lookup_tables<0>::lookup_upcase[static_cast<unsigned char>(*p2)])
+                        return false;
+            }
+            return true;
+        }
+
+        template<class Ch>
+        inline size_t get_index(const Ch c)
+        {
+            // If not ASCII char, its semantic is same as plain 'z'.
+            // char could be signed, so first stretch and make unsigned.
+            unsigned n = c;
+            if (n > 127)
+            {
+                return 'z';
+            }
+            return c;
+        }
+    }
+    //! \endcond
+
+    ///////////////////////////////////////////////////////////////////////
+    // Memory pool
+    
+    //! This class is used by the parser to create new nodes and attributes, without overheads of dynamic memory allocation.
+    //! In most cases, you will not need to use this class directly. 
+    //! However, if you need to create nodes manually or modify names/values of nodes, 
+    //! you are encouraged to use memory_pool of relevant xml_document to allocate the memory. 
+    //! Not only is this faster than allocating them by using <code>new</code> operator, 
+    //! but also their lifetime will be tied to the lifetime of document, 
+    //! possibly simplyfing memory management. 
+    //! <br><br>
+    //! Call allocate_node() or allocate_attribute() functions to obtain new nodes or attributes from the pool. 
+    //! You can also call allocate_string() function to allocate strings.
+    //! Such strings can then be used as names or values of nodes without worrying about their lifetime.
+    //! Note that there is no <code>free()</code> function -- all allocations are freed at once when clear() function is called, 
+    //! or when the pool is destroyed.
+    //! <br><br>
+    //! It is also possible to create a standalone memory_pool, and use it 
+    //! to allocate nodes, whose lifetime will not be tied to any document.
+    //! <br><br>
+    //! Pool maintains <code>BOOST_PROPERTY_TREE_RAPIDXML_STATIC_POOL_SIZE</code> bytes of statically allocated memory. 
+    //! Until static memory is exhausted, no dynamic memory allocations are done.
+    //! When static memory is exhausted, pool allocates additional blocks of memory of size <code>BOOST_PROPERTY_TREE_RAPIDXML_DYNAMIC_POOL_SIZE</code> each,
+    //! by using global <code>new[]</code> and <code>delete[]</code> operators. 
+    //! This behaviour can be changed by setting custom allocation routines. 
+    //! Use set_allocator() function to set them.
+    //! <br><br>
+    //! Allocations for nodes, attributes and strings are aligned at <code>BOOST_PROPERTY_TREE_RAPIDXML_ALIGNMENT</code> bytes.
+    //! This value defaults to the size of pointer on target architecture.
+    //! <br><br>
+    //! To obtain absolutely top performance from the parser,
+    //! it is important that all nodes are allocated from a single, contiguous block of memory.
+    //! Otherwise, cache misses when jumping between two (or more) disjoint blocks of memory can slow down parsing quite considerably.
+    //! If required, you can tweak <code>BOOST_PROPERTY_TREE_RAPIDXML_STATIC_POOL_SIZE</code>, <code>BOOST_PROPERTY_TREE_RAPIDXML_DYNAMIC_POOL_SIZE</code> and <code>BOOST_PROPERTY_TREE_RAPIDXML_ALIGNMENT</code> 
+    //! to obtain best wasted memory to performance compromise.
+    //! To do it, define their values before rapidxml.hpp file is included.
+    //! \param Ch Character type of created nodes. 
+    template<class Ch = char>
+    class memory_pool
+    {
+        
+    public:
+
+        //! \cond internal
+        // Prefixed names to work around weird MSVC lookup bug.
+        typedef void *(boost_ptree_raw_alloc_func)(std::size_t);       // Type of user-defined function used to allocate memory
+        typedef void (boost_ptree_raw_free_func)(void *);              // Type of user-defined function used to free memory
+        //! \endcond
+        
+        //! Constructs empty pool with default allocator functions.
+        memory_pool()
+            : m_alloc_func(0)
+            , m_free_func(0)
+        {
+            init();
+        }
+
+        //! Destroys pool and frees all the memory. 
+        //! This causes memory occupied by nodes allocated by the pool to be freed.
+        //! Nodes allocated from the pool are no longer valid.
+        ~memory_pool()
+        {
+            clear();
+        }
+
+        //! Allocates a new node from the pool, and optionally assigns name and value to it. 
+        //! If the allocation request cannot be accomodated, this function will throw <code>std::bad_alloc</code>.
+        //! If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function
+        //! will call pdalboostrapidxml::parse_error_handler() function.
+        //! \param type Type of node to create.
+        //! \param name Name to assign to the node, or 0 to assign no name.
+        //! \param value Value to assign to the node, or 0 to assign no value.
+        //! \param name_size Size of name to assign, or 0 to automatically calculate size from name string.
+        //! \param value_size Size of value to assign, or 0 to automatically calculate size from value string.
+        //! \return Pointer to allocated node. This pointer will never be NULL.
+        xml_node<Ch> *allocate_node(node_type type, 
+                                    const Ch *name = 0, const Ch *value = 0, 
+                                    std::size_t name_size = 0, std::size_t value_size = 0)
+        {
+            void *memory = allocate_aligned(sizeof(xml_node<Ch>));
+            xml_node<Ch> *node = new(memory) xml_node<Ch>(type);
+            if (name)
+            {
+                if (name_size > 0)
+                    node->name(name, name_size);
+                else
+                    node->name(name);
+            }
+            if (value)
+            {
+                if (value_size > 0)
+                    node->value(value, value_size);
+                else
+                    node->value(value);
+            }
+            return node;
+        }
+
+        //! Allocates a new attribute from the pool, and optionally assigns name and value to it.
+        //! If the allocation request cannot be accomodated, this function will throw <code>std::bad_alloc</code>.
+        //! If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function
+        //! will call pdalboostrapidxml::parse_error_handler() function.
+        //! \param name Name to assign to the attribute, or 0 to assign no name.
+        //! \param value Value to assign to the attribute, or 0 to assign no value.
+        //! \param name_size Size of name to assign, or 0 to automatically calculate size from name string.
+        //! \param value_size Size of value to assign, or 0 to automatically calculate size from value string.
+        //! \return Pointer to allocated attribute. This pointer will never be NULL.
+        xml_attribute<Ch> *allocate_attribute(const Ch *name = 0, const Ch *value = 0, 
+                                              std::size_t name_size = 0, std::size_t value_size = 0)
+        {
+            void *memory = allocate_aligned(sizeof(xml_attribute<Ch>));
+            xml_attribute<Ch> *attribute = new(memory) xml_attribute<Ch>;
+            if (name)
+            {
+                if (name_size > 0)
+                    attribute->name(name, name_size);
+                else
+                    attribute->name(name);
+            }
+            if (value)
+            {
+                if (value_size > 0)
+                    attribute->value(value, value_size);
+                else
+                    attribute->value(value);
+            }
+            return attribute;
+        }
+
+        //! Allocates a char array of given size from the pool, and optionally copies a given string to it.
+        //! If the allocation request cannot be accomodated, this function will throw <code>std::bad_alloc</code>.
+        //! If exceptions are disabled by defining RAPIDXML_NO_EXCEPTIONS, this function
+        //! will call pdalboostrapidxml::parse_error_handler() function.
+        //! \param source String to initialize the allocated memory with, or 0 to not initialize it.
+        //! \param size Number of characters to allocate, or zero to calculate it automatically from source string length; if size is 0, source string must be specified and null terminated.
+        //! \return Pointer to allocated char array. This pointer will never be NULL.
+        Ch *allocate_string(const Ch *source = 0, std::size_t size = 0)
+        {
+            BOOST_ASSERT(source || size);     // Either source or size (or both) must be specified
+            if (size == 0)
+                size = internal::measure(source) + 1;
+            Ch *result = static_cast<Ch *>(allocate_aligned(size * sizeof(Ch)));
+            if (source)
+                for (std::size_t i = 0; i < size; ++i)
+                    result[i] = source[i];
+            return result;
+        }
+
+        //! Clones an xml_node and its hierarchy of child nodes and attributes.
+        //! Nodes and attributes are allocated from this memory pool.
+        //! Names and values are not cloned, they are shared between the clone and the source.
+        //! Result node can be optionally specified as a second parameter, 
+        //! in which case its contents will be replaced with cloned source node.
+        //! This is useful when you want to clone entire document.
+        //! \param source Node to clone.
+        //! \param result Node to put results in, or 0 to automatically allocate result node
+        //! \return Pointer to cloned node. This pointer will never be NULL.
+        xml_node<Ch> *clone_node(const xml_node<Ch> *source, xml_node<Ch> *result = 0)
+        {
+            // Prepare result node
+            if (result)
+            {
+                result->remove_all_attributes();
+                result->remove_all_nodes();
+                result->type(source->type());
+            }
+            else
+                result = allocate_node(source->type());
+
+            // Clone name and value
+            result->name(source->name(), source->name_size());
+            result->value(source->value(), source->value_size());
+
+            // Clone child nodes and attributes
+            for (xml_node<Ch> *child = source->first_node(); child; child = child->next_sibling())
+                result->append_node(clone_node(child));
+            for (xml_attribute<Ch> *attr = source->first_attribute(); attr; attr = attr->next_attribute())
+                result->append_attribute(allocate_attribute(attr->name(), attr->value(), attr->name_size(), attr->value_size()));
+
+            return result;
+        }
+
+        //! Clears the pool. 
+        //! This causes memory occupied by nodes allocated by the pool to be freed.
+        //! Any nodes or strings allocated from the pool will no longer be valid.
+        void clear()
+        {
+            while (m_begin != m_static_memory)
+            {
+                char *previous_begin = reinterpret_cast<header *>(align(m_begin))->previous_begin;
+                if (m_free_func)
+                    m_free_func(m_begin);
+                else
+                    delete[] m_begin;
+                m_begin = previous_begin;
+            }
+            init();
+        }
+
+        //! Sets or resets the user-defined memory allocation functions for the pool.
+        //! This can only be called when no memory is allocated from the pool yet, otherwise results are undefined.
+        //! Allocation function must not return invalid pointer on failure. It should either throw,
+        //! stop the program, or use <code>longjmp()</code> function to pass control to other place of program. 
+        //! If it returns invalid pointer, results are undefined.
+        //! <br><br>
+        //! User defined allocation functions must have the following forms:
+        //! <br><code>
+        //! <br>void *allocate(std::size_t size);
+        //! <br>void free(void *pointer);
+        //! </code><br>
+        //! \param af Allocation function, or 0 to restore default function
+        //! \param ff Free function, or 0 to restore default function
+        void set_allocator(boost_ptree_raw_alloc_func *af, boost_ptree_raw_free_func *ff)
+        {
+            BOOST_ASSERT(m_begin == m_static_memory && m_ptr == align(m_begin));    // Verify that no memory is allocated yet
+            m_alloc_func = af;
+            m_free_func = ff;
+        }
+
+    private:
+
+        struct header
+        {
+            char *previous_begin;
+        };
+
+        void init()
+        {
+            m_begin = m_static_memory;
+            m_ptr = align(m_begin);
+            m_end = m_static_memory + sizeof(m_static_memory);
+        }
+        
+        char *align(char *ptr)
+        {
+            std::size_t alignment = ((BOOST_PROPERTY_TREE_RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (BOOST_PROPERTY_TREE_RAPIDXML_ALIGNMENT - 1))) & (BOOST_PROPERTY_TREE_RAPIDXML_ALIGNMENT - 1));
+            return ptr + alignment;
+        }
+        
+        char *allocate_raw(std::size_t size)
+        {
+            // Allocate
+            void *memory;   
+            if (m_alloc_func)   // Allocate memory using either user-specified allocation function or global operator new[]
+            {
+                memory = m_alloc_func(size);
+                BOOST_ASSERT(memory); // Allocator is not allowed to return 0, on failure it must either throw, stop the program or use longjmp
+            }
+            else
+            {
+                memory = new char[size];
+            }
+            return static_cast<char *>(memory);
+        }
+        
+        void *allocate_aligned(std::size_t size)
+        {
+            // Calculate aligned pointer
+            char *result = align(m_ptr);
+
+            // If not enough memory left in current pool, allocate a new pool
+            if (result + size > m_end)
+            {
+                // Calculate required pool size (may be bigger than BOOST_PROPERTY_TREE_RAPIDXML_DYNAMIC_POOL_SIZE)
+                std::size_t pool_size = BOOST_PROPERTY_TREE_RAPIDXML_DYNAMIC_POOL_SIZE;
+                if (pool_size < size)
+                    pool_size = size;
+                
+                // Allocate
+                std::size_t alloc_size = sizeof(header) + (2 * BOOST_PROPERTY_TREE_RAPIDXML_ALIGNMENT - 2) + pool_size;     // 2 alignments required in worst case: one for header, one for actual allocation
+                char *raw_memory = allocate_raw(alloc_size);
+                    
+                // Setup new pool in allocated memory
+                char *pool = align(raw_memory);
+                header *new_header = reinterpret_cast<header *>(pool);
+                new_header->previous_begin = m_begin;
+                m_begin = raw_memory;
+                m_ptr = pool + sizeof(header);
+                m_end = raw_memory + alloc_size;
+
+                // Calculate aligned pointer again using new pool
+                result = align(m_ptr);
+            }
+
+            // Update pool and return aligned pointer
+            m_ptr = result + size;
+            return result;
+        }
+
+        char *m_begin;                                      // Start of raw memory making up current pool
+        char *m_ptr;                                        // First free byte in current pool
+        char *m_end;                                        // One past last available byte in current pool
+        char m_static_memory[BOOST_PROPERTY_TREE_RAPIDXML_STATIC_POOL_SIZE];    // Static raw memory
+        boost_ptree_raw_alloc_func *m_alloc_func;           // Allocator function, or 0 if default is to be used
+        boost_ptree_raw_free_func *m_free_func;             // Free function, or 0 if default is to be used
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // XML base
+
+    //! Base class for xml_node and xml_attribute implementing common functions: 
+    //! name(), name_size(), value(), value_size() and parent().
+    //! \param Ch Character type to use
+    template<class Ch = char>
+    class xml_base
+    {
+
+    public:
+        
+        ///////////////////////////////////////////////////////////////////////////
+        // Construction & destruction
+    
+        // Construct a base with empty name, value and parent
+        xml_base()
+            : m_name(0)
+            , m_value(0)
+            , m_parent(0)
+        {
+        }
+
+        ///////////////////////////////////////////////////////////////////////////
+        // Node data access
+    
+        //! Gets name of the node. 
+        //! Interpretation of name depends on type of node.
+        //! Note that name will not be zero-terminated if pdalboostrapidxml::parse_no_string_terminators option was selected during parse.
+        //! <br><br>
+        //! Use name_size() function to determine length of the name.
+        //! \return Name of node, or empty string if node has no name.
+        Ch *name() const
+        {
+            return m_name ? m_name : nullstr();
+        }
+
+        //! Gets size of node name, not including terminator character.
+        //! This function works correctly irrespective of whether name is or is not zero terminated.
+        //! \return Size of node name, in characters.
+        std::size_t name_size() const
+        {
+            return m_name ? m_name_size : 0;
+        }
+
+        //! Gets value of node. 
+        //! Interpretation of value depends on type of node.
+        //! Note that value will not be zero-terminated if pdalboostrapidxml::parse_no_string_terminators option was selected during parse.
+        //! <br><br>
+        //! Use value_size() function to determine length of the value.
+        //! \return Value of node, or empty string if node has no value.
+        Ch *value() const
+        {
+            return m_value ? m_value : nullstr();
+        }
+
+        //! Gets size of node value, not including terminator character.
+        //! This function works correctly irrespective of whether value is or is not zero terminated.
+        //! \return Size of node value, in characters.
+        std::size_t value_size() const
+        {
+            return m_value ? m_value_size : 0;
+        }
+
+        ///////////////////////////////////////////////////////////////////////////
+        // Node modification
+    
+        //! Sets name of node to a non zero-terminated string.
+        //! See \ref ownership_of_strings.
+        //! <br><br>
+        //! Note that node does not own its name or value, it only stores a pointer to it. 
+        //! It will not delete or otherwise free the pointer on destruction.
+        //! It is reponsibility of the user to properly manage lifetime of the string.
+        //! The easiest way to achieve it is to use memory_pool of the document to allocate the string -
+        //! on destruction of the document the string will be automatically freed.
+        //! <br><br>
+        //! Size of name must be specified separately, because name does not have to be zero terminated.
+        //! Use name(const Ch *) function to have the length automatically calculated (string must be zero terminated).
+        //! \param n Name of node to set. Does not have to be zero terminated.
+        //! \param size Size of name, in characters. This does not include zero terminator, if one is present.
+        void name(const Ch *n, std::size_t size)
+        {
+            m_name = const_cast<Ch *>(n);
+            m_name_size = size;
+        }
+
+        //! Sets name of node to a zero-terminated string.
+        //! See also \ref ownership_of_strings and xml_node::name(const Ch *, std::size_t).
+        //! \param n Name of node to set. Must be zero terminated.
+        void name(const Ch *n)
+        {
+            name(n, internal::measure(n));
+        }
+
+        //! Sets value of node to a non zero-terminated string.
+        //! See \ref ownership_of_strings.
+        //! <br><br>
+        //! Note that node does not own its name or value, it only stores a pointer to it. 
+        //! It will not delete or otherwise free the pointer on destruction.
+        //! It is reponsibility of the user to properly manage lifetime of the string.
+        //! The easiest way to achieve it is to use memory_pool of the document to allocate the string -
+        //! on destruction of the document the string will be automatically freed.
+        //! <br><br>
+        //! Size of value must be specified separately, because it does not have to be zero terminated.
+        //! Use value(const Ch *) function to have the length automatically calculated (string must be zero terminated).
+        //! <br><br>
+        //! If an element has a child node of type node_data, it will take precedence over element value when printing.
+        //! If you want to manipulate data of elements using values, use parser flag pdalboostrapidxml::parse_no_data_nodes to prevent creation of data nodes by the parser.
+        //! \param val value of node to set. Does not have to be zero terminated.
+        //! \param size Size of value, in characters. This does not include zero terminator, if one is present.
+        void value(const Ch *val, std::size_t size)
+        {
+            m_value = const_cast<Ch *>(val);
+            m_value_size = size;
+        }
+
+        //! Sets value of node to a zero-terminated string.
+        //! See also \ref ownership_of_strings and xml_node::value(const Ch *, std::size_t).
+        //! \param val Vame of node to set. Must be zero terminated.
+        void value(const Ch *val)
+        {
+            this->value(val, internal::measure(val));
+        }
+
+        ///////////////////////////////////////////////////////////////////////////
+        // Related nodes access
+    
+        //! Gets node parent.
+        //! \return Pointer to parent node, or 0 if there is no parent.
+        xml_node<Ch> *parent() const
+        {
+            return m_parent;
+        }
+
+    protected:
+
+        // Return empty string
+        static Ch *nullstr()
+        {
+            static Ch zero = Ch('\0');
+            return &zero;
+        }
+
+        Ch *m_name;                         // Name of node, or 0 if no name
+        Ch *m_value;                        // Value of node, or 0 if no value
+        std::size_t m_name_size;            // Length of node name, or undefined of no name
+        std::size_t m_value_size;           // Length of node value, or undefined if no value
+        xml_node<Ch> *m_parent;             // Pointer to parent node, or 0 if none
+
+    };
+
+    //! Class representing attribute node of XML document. 
+    //! Each attribute has name and value strings, which are available through name() and value() functions (inherited from xml_base).
+    //! Note that after parse, both name and value of attribute will point to interior of source text used for parsing. 
+    //! Thus, this text must persist in memory for the lifetime of attribute.
+    //! \param Ch Character type to use.
+    template<class Ch = char>
+    class xml_attribute: public xml_base<Ch>
+    {
+
+        friend class xml_node<Ch>;
+    
+    public:
+
+        ///////////////////////////////////////////////////////////////////////////
+        // Construction & destruction
+    
+        //! Constructs an empty attribute with the specified type. 
+        //! Consider using memory_pool of appropriate xml_document if allocating attributes manually.
+        xml_attribute()
+        {
+        }
+
+        ///////////////////////////////////////////////////////////////////////////
+        // Related nodes access
+    
+        //! Gets document of which attribute is a child.
+        //! \return Pointer to document that contains this attribute, or 0 if there is no parent document.
+        xml_document<Ch> *document() const
+        {
+            if (xml_node<Ch> *node = this->parent())
+            {
+                while (node->parent())
+                    node = node->parent();
+                return node->type() == node_document ? static_cast<xml_document<Ch> *>(node) : 0;
+            }
+            else
+                return 0;
+        }
+
+        //! Gets previous attribute, optionally matching attribute name. 
+        //! \param n Name of attribute to find, or 0 to return previous attribute regardless of its name; this string doesn't have to be zero-terminated if nsize is non-zero
+        //! \param nsize Size of name, in characters, or 0 to have size calculated automatically from string
+        //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+        //! \return Pointer to found attribute, or 0 if not found.
+        xml_attribute<Ch> *previous_attribute(const Ch *n = 0, std::size_t nsize = 0, bool case_sensitive = true) const
+        {
+            if (n)
+            {
+                if (nsize == 0)
+                    nsize = internal::measure(n);
+                for (xml_attribute<Ch> *attribute = m_prev_attribute; attribute; attribute = attribute->m_prev_attribute)
+                    if (internal::compare(attribute->name(), attribute->name_size(), n, nsize, case_sensitive))
+                        return attribute;
+                return 0;
+            }
+            else
+                return this->m_parent ? m_prev_attribute : 0;
+        }
+
+        //! Gets next attribute, optionally matching attribute name. 
+        //! \param n Name of attribute to find, or 0 to return next attribute regardless of its name; this string doesn't have to be zero-terminated if nsize is non-zero
+        //! \param nsize Size of name, in characters, or 0 to have size calculated automatically from string
+        //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+        //! \return Pointer to found attribute, or 0 if not found.
+        xml_attribute<Ch> *next_attribute(const Ch *n = 0, std::size_t nsize = 0, bool case_sensitive = true) const
+        {
+            if (n)
+            {
+                if (nsize == 0)
+                    nsize = internal::measure(n);
+                for (xml_attribute<Ch> *attribute = m_next_attribute; attribute; attribute = attribute->m_next_attribute)
+                    if (internal::compare(attribute->name(), attribute->name_size(), n, nsize, case_sensitive))
+                        return attribute;
+                return 0;
+            }
+            else
+                return this->m_parent ? m_next_attribute : 0;
+        }
+
+    private:
+
+        xml_attribute<Ch> *m_prev_attribute;        // Pointer to previous sibling of attribute, or 0 if none; only valid if parent is non-zero
+        xml_attribute<Ch> *m_next_attribute;        // Pointer to next sibling of attribute, or 0 if none; only valid if parent is non-zero
+    
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // XML node
+
+    //! Class representing a node of XML document. 
+    //! Each node may have associated name and value strings, which are available through name() and value() functions. 
+    //! Interpretation of name and value depends on type of the node.
+    //! Type of node can be determined by using type() function.
+    //! <br><br>
+    //! Note that after parse, both name and value of node, if any, will point interior of source text used for parsing. 
+    //! Thus, this text must persist in the memory for the lifetime of node.
+    //! \param Ch Character type to use.
+    template<class Ch = char>
+    class xml_node: public xml_base<Ch>
+    {
+
+    public:
+
+        ///////////////////////////////////////////////////////////////////////////
+        // Construction & destruction
+    
+        //! Constructs an empty node with the specified type. 
+        //! Consider using memory_pool of appropriate document to allocate nodes manually.
+        //! \param t Type of node to construct.
+        xml_node(node_type t)
+            : m_type(t)
+            , m_first_node(0)
+            , m_first_attribute(0)
+        {
+        }
+
+        ///////////////////////////////////////////////////////////////////////////
+        // Node data access
+    
+        //! Gets type of node.
+        //! \return Type of node.
+        node_type type() const
+        {
+            return m_type;
+        }
+
+        ///////////////////////////////////////////////////////////////////////////
+        // Related nodes access
+    
+        //! Gets document of which node is a child.
+        //! \return Pointer to document that contains this node, or 0 if there is no parent document.
+        xml_document<Ch> *document() const
+        {
+            xml_node<Ch> *node = const_cast<xml_node<Ch> *>(this);
+            while (node->parent())
+                node = node->parent();
+            return node->type() == node_document ? static_cast<xml_document<Ch> *>(node) : 0;
+        }
+
+        //! Gets first child node, optionally matching node name.
+        //! \param n Name of child to find, or 0 to return first child regardless of its name; this string doesn't have to be zero-terminated if nsize is non-zero
+        //! \param nsize Size of name, in characters, or 0 to have size calculated automatically from string
+        //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+        //! \return Pointer to found child, or 0 if not found.
+        xml_node<Ch> *first_node(const Ch *n = 0, std::size_t nsize = 0, bool case_sensitive = true) const
+        {
+            if (n)
+            {
+                if (nsize == 0)
+                    nsize = internal::measure(n);
+                for (xml_node<Ch> *child = m_first_node; child; child = child->next_sibling())
+                    if (internal::compare(child->name(), child->name_size(), n, nsize, case_sensitive))
+                        return child;
+                return 0;
+            }
+            else
+                return m_first_node;
+        }
+
+        //! Gets last child node, optionally matching node name. 
+        //! Behaviour is undefined if node has no children.
+        //! Use first_node() to test if node has children.
+        //! \param n Name of child to find, or 0 to return last child regardless of its name; this string doesn't have to be zero-terminated if nsize is non-zero
+        //! \param nsize Size of name, in characters, or 0 to have size calculated automatically from string
+        //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+        //! \return Pointer to found child, or 0 if not found.
+        xml_node<Ch> *last_node(const Ch *n = 0, std::size_t nsize = 0, bool case_sensitive = true) const
+        {
+            BOOST_ASSERT(m_first_node);  // Cannot query for last child if node has no children
+            if (n)
+            {
+                if (nsize == 0)
+                    nsize = internal::measure(n);
+                for (xml_node<Ch> *child = m_last_node; child; child = child->previous_sibling())
+                    if (internal::compare(child->name(), child->name_size(), n, nsize, case_sensitive))
+                        return child;
+                return 0;
+            }
+            else
+                return m_last_node;
+        }
+
+        //! Gets previous sibling node, optionally matching node name. 
+        //! Behaviour is undefined if node has no parent.
+        //! Use parent() to test if node has a parent.
+        //! \param n Name of sibling to find, or 0 to return previous sibling regardless of its name; this string doesn't have to be zero-terminated if nsize is non-zero
+        //! \param nsize Size of name, in characters, or 0 to have size calculated automatically from string
+        //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+        //! \return Pointer to found sibling, or 0 if not found.
+        xml_node<Ch> *previous_sibling(const Ch *n = 0, std::size_t nsize = 0, bool case_sensitive = true) const
+        {
+            BOOST_ASSERT(this->m_parent);     // Cannot query for siblings if node has no parent
+            if (n)
+            {
+                if (nsize == 0)
+                    nsize = internal::measure(n);
+                for (xml_node<Ch> *sibling = m_prev_sibling; sibling; sibling = sibling->m_prev_sibling)
+                    if (internal::compare(sibling->name(), sibling->name_size(), n, nsize, case_sensitive))
+                        return sibling;
+                return 0;
+            }
+            else
+                return m_prev_sibling;
+        }
+
+        //! Gets next sibling node, optionally matching node name. 
+        //! Behaviour is undefined if node has no parent.
+        //! Use parent() to test if node has a parent.
+        //! \param n Name of sibling to find, or 0 to return next sibling regardless of its name; this string doesn't have to be zero-terminated if nsize is non-zero
+        //! \param nsize Size of name, in characters, or 0 to have size calculated automatically from string
+        //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+        //! \return Pointer to found sibling, or 0 if not found.
+        xml_node<Ch> *next_sibling(const Ch *n = 0, std::size_t nsize = 0, bool case_sensitive = true) const
+        {
+            BOOST_ASSERT(this->m_parent);     // Cannot query for siblings if node has no parent
+            if (n)
+            {
+                if (nsize == 0)
+                    nsize = internal::measure(n);
+                for (xml_node<Ch> *sibling = m_next_sibling; sibling; sibling = sibling->m_next_sibling)
+                    if (internal::compare(sibling->name(), sibling->name_size(), n, nsize, case_sensitive))
+                        return sibling;
+                return 0;
+            }
+            else
+                return m_next_sibling;
+        }
+
+        //! Gets first attribute of node, optionally matching attribute name.
+        //! \param n Name of attribute to find, or 0 to return first attribute regardless of its name; this string doesn't have to be zero-terminated if nsize is non-zero
+        //! \param nsize Size of name, in characters, or 0 to have size calculated automatically from string
+        //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+        //! \return Pointer to found attribute, or 0 if not found.
+        xml_attribute<Ch> *first_attribute(const Ch *n = 0, std::size_t nsize = 0, bool case_sensitive = true) const
+        {
+            if (n)
+            {
+                if (nsize == 0)
+                    nsize = internal::measure(n);
+                for (xml_attribute<Ch> *attribute = m_first_attribute; attribute; attribute = attribute->m_next_attribute)
+                    if (internal::compare(attribute->name(), attribute->name_size(), n, nsize, case_sensitive))
+                        return attribute;
+                return 0;
+            }
+            else
+                return m_first_attribute;
+        }
+
+        //! Gets last attribute of node, optionally matching attribute name.
+        //! \param n Name of attribute to find, or 0 to return last attribute regardless of its name; this string doesn't have to be zero-terminated if nsize is non-zero
+        //! \param nsize Size of name, in characters, or 0 to have size calculated automatically from string
+        //! \param case_sensitive Should name comparison be case-sensitive; non case-sensitive comparison works properly only for ASCII characters
+        //! \return Pointer to found attribute, or 0 if not found.
+        xml_attribute<Ch> *last_attribute(const Ch *n = 0, std::size_t nsize = 0, bool case_sensitive = true) const
+        {
+            if (n)
+            {
+                if (nsize == 0)
+                    nsize = internal::measure(n);
+                for (xml_attribute<Ch> *attribute = m_last_attribute; attribute; attribute = attribute->m_prev_attribute)
+                    if (internal::compare(attribute->name(), attribute->name_size(), n, nsize, case_sensitive))
+                        return attribute;
+                return 0;
+            }
+            else
+                return m_first_attribute ? m_last_attribute : 0;
+        }
+
+        ///////////////////////////////////////////////////////////////////////////
+        // Node modification
+    
+        //! Sets type of node.
+        //! \param t Type of node to set.
+        void type(node_type t)
+        {
+            m_type = t;
+        }
+
+        ///////////////////////////////////////////////////////////////////////////
+        // Node manipulation
+
+        //! Prepends a new child node.
+        //! The prepended child becomes the first child, and all existing children are moved one position back.
+        //! \param child Node to prepend.
+        void prepend_node(xml_node<Ch> *child)
+        {
+            BOOST_ASSERT(child && !child->parent() && child->type() != node_document);
+            if (first_node())
+            {
+                child->m_next_sibling = m_first_node;
+                m_first_node->m_prev_sibling = child;
+            }
+            else
+            {
+                child->m_next_sibling = 0;
+                m_last_node = child;
+            }
+            m_first_node = child;
+            child->m_parent = this;
+            child->m_prev_sibling = 0;
+        }
+
+        //! Appends a new child node. 
+        //! The appended child becomes the last child.
+        //! \param child Node to append.
+        void append_node(xml_node<Ch> *child)
+        {
+            BOOST_ASSERT(child && !child->parent() && child->type() != node_document);
+            if (first_node())
+            {
+                child->m_prev_sibling = m_last_node;
+                m_last_node->m_next_sibling = child;
+            }
+            else
+            {
+                child->m_prev_sibling = 0;
+                m_first_node = child;
+            }
+            m_last_node = child;
+            child->m_parent = this;
+            child->m_next_sibling = 0;
+        }
+
+        //! Inserts a new child node at specified place inside the node. 
+        //! All children after and including the specified node are moved one position back.
+        //! \param where Place where to insert the child, or 0 to insert at the back.
+        //! \param child Node to insert.
+        void insert_node(xml_node<Ch> *where, xml_node<Ch> *child)
+        {
+            BOOST_ASSERT(!where || where->parent() == this);
+            BOOST_ASSERT(child && !child->parent() && child->type() != node_document);
+            if (where == m_first_node)
+                prepend_node(child);
+            else if (where == 0)
+                append_node(child);
+            else
+            {
+                child->m_prev_sibling = where->m_prev_sibling;
+                child->m_next_sibling = where;
+                where->m_prev_sibling->m_next_sibling = child;
+                where->m_prev_sibling = child;
+                child->m_parent = this;
+            }
+        }
+
+        //! Removes first child node. 
+        //! If node has no children, behaviour is undefined.
+        //! Use first_node() to test if node has children.
+        void remove_first_node()
+        {
+            BOOST_ASSERT(first_node());
+            xml_node<Ch> *child = m_first_node;
+            m_first_node = child->m_next_sibling;
+            if (child->m_next_sibling)
+                child->m_next_sibling->m_prev_sibling = 0;
+            else
+                m_last_node = 0;
+            child->m_parent = 0;
+        }
+
+        //! Removes last child of the node. 
+        //! If node has no children, behaviour is undefined.
+        //! Use first_node() to test if node has children.
+        void remove_last_node()
+        {
+            BOOST_ASSERT(first_node());
+            xml_node<Ch> *child = m_last_node;
+            if (child->m_prev_sibling)
+            {
+                m_last_node = child->m_prev_sibling;
+                child->m_prev_sibling->m_next_sibling = 0;
+            }
+            else
+                m_first_node = 0;
+            child->m_parent = 0;
+        }
+
+        //! Removes specified child from the node
+        // \param where Pointer to child to be removed.
+        void remove_node(xml_node<Ch> *where)
+        {
+            BOOST_ASSERT(where && where->parent() == this);
+            BOOST_ASSERT(first_node());
+            if (where == m_first_node)
+                remove_first_node();
+            else if (where == m_last_node)
+                remove_last_node();
+            else
+            {
+                where->m_prev_sibling->m_next_sibling = where->m_next_sibling;
+                where->m_next_sibling->m_prev_sibling = where->m_prev_sibling;
+                where->m_parent = 0;
+            }
+        }
+
+        //! Removes all child nodes (but not attributes).
+        void remove_all_nodes()
+        {
+            for (xml_node<Ch> *node = first_node(); node; node = node->m_next_sibling)
+                node->m_parent = 0;
+            m_first_node = 0;
+        }
+
+        //! Prepends a new attribute to the node.
+        //! \param attribute Attribute to prepend.
+        void prepend_attribute(xml_attribute<Ch> *attribute)
+        {
+            BOOST_ASSERT(attribute && !attribute->parent());
+            if (first_attribute())
+            {
+                attribute->m_next_attribute = m_first_attribute;
+                m_first_attribute->m_prev_attribute = attribute;
+            }
+            else
+            {
+                attribute->m_next_attribute = 0;
+                m_last_attribute = attribute;
+            }
+            m_first_attribute = attribute;
+            attribute->m_parent = this;
+            attribute->m_prev_attribute = 0;
+        }
+
+        //! Appends a new attribute to the node.
+        //! \param attribute Attribute to append.
+        void append_attribute(xml_attribute<Ch> *attribute)
+        {
+            BOOST_ASSERT(attribute && !attribute->parent());
+            if (first_attribute())
+            {
+                attribute->m_prev_attribute = m_last_attribute;
+                m_last_attribute->m_next_attribute = attribute;
+            }
+            else
+            {
+                attribute->m_prev_attribute = 0;
+                m_first_attribute = attribute;
+            }
+            m_last_attribute = attribute;
+            attribute->m_parent = this;
+            attribute->m_next_attribute = 0;
+        }
+
+        //! Inserts a new attribute at specified place inside the node. 
+        //! All attributes after and including the specified attribute are moved one position back.
+        //! \param where Place where to insert the attribute, or 0 to insert at the back.
+        //! \param attribute Attribute to insert.
+        void insert_attribute(xml_attribute<Ch> *where, xml_attribute<Ch> *attribute)
+        {
+            BOOST_ASSERT(!where || where->parent() == this);
+            BOOST_ASSERT(attribute && !attribute->parent());
+            if (where == m_first_attribute)
+                prepend_attribute(attribute);
+            else if (where == 0)
+                append_attribute(attribute);
+            else
+            {
+                attribute->m_prev_attribute = where->m_prev_attribute;
+                attribute->m_next_attribute = where;
+                where->m_prev_attribute->m_next_attribute = attribute;
+                where->m_prev_attribute = attribute;
+                attribute->m_parent = this;
+            }
+        }
+
+        //! Removes first attribute of the node. 
+        //! If node has no attributes, behaviour is undefined.
+        //! Use first_attribute() to test if node has attributes.
+        void remove_first_attribute()
+        {
+            BOOST_ASSERT(first_attribute());
+            xml_attribute<Ch> *attribute = m_first_attribute;
+            if (attribute->m_next_attribute)
+            {
+                attribute->m_next_attribute->m_prev_attribute = 0;
+            }
+            else
+                m_last_attribute = 0;
+            attribute->m_parent = 0;
+            m_first_attribute = attribute->m_next_attribute;
+        }
+
+        //! Removes last attribute of the node. 
+        //! If node has no attributes, behaviour is undefined.
+        //! Use first_attribute() to test if node has attributes.
+        void remove_last_attribute()
+        {
+            BOOST_ASSERT(first_attribute());
+            xml_attribute<Ch> *attribute = m_last_attribute;
+            if (attribute->m_prev_attribute)
+            {
+                attribute->m_prev_attribute->m_next_attribute = 0;
+                m_last_attribute = attribute->m_prev_attribute;
+            }
+            else
+                m_first_attribute = 0;
+            attribute->m_parent = 0;
+        }
+
+        //! Removes specified attribute from node.
+        //! \param where Pointer to attribute to be removed.
+        void remove_attribute(xml_attribute<Ch> *where)
+        {
+            BOOST_ASSERT(first_attribute() && where->parent() == this);
+            if (where == m_first_attribute)
+                remove_first_attribute();
+            else if (where == m_last_attribute)
+                remove_last_attribute();
+            else
+            {
+                where->m_prev_attribute->m_next_attribute = where->m_next_attribute;
+                where->m_next_attribute->m_prev_attribute = where->m_prev_attribute;
+                where->m_parent = 0;
+            }
+        }
+
+        //! Removes all attributes of node.
+        void remove_all_attributes()
+        {
+            for (xml_attribute<Ch> *attribute = first_attribute(); attribute; attribute = attribute->m_next_attribute)
+                attribute->m_parent = 0;
+            m_first_attribute = 0;
+        }
+        
+    private:
+
+        ///////////////////////////////////////////////////////////////////////////
+        // Restrictions
+
+        // No copying
+        xml_node(const xml_node &);
+        void operator =(const xml_node &);
+    
+        ///////////////////////////////////////////////////////////////////////////
+        // Data members
+    
+        // Note that some of the pointers below have UNDEFINED values if certain other pointers are 0.
+        // This is required for maximum performance, as it allows the parser to omit initialization of 
+        // unneded/redundant values.
+        //
+        // The rules are as follows:
+        // 1. first_node and first_attribute contain valid pointers, or 0 if node has no children/attributes respectively
+        // 2. last_node and last_attribute are valid only if node has at least one child/attribute respectively, otherwise they contain garbage
+        // 3. prev_sibling and next_sibling are valid only if node has a parent, otherwise they contain garbage
+
+        node_type m_type;                       // Type of node; always valid
+        xml_node<Ch> *m_first_node;             // Pointer to first child node, or 0 if none; always valid
+        xml_node<Ch> *m_last_node;              // Pointer to last child node, or 0 if none; this value is only valid if m_first_node is non-zero
+        xml_attribute<Ch> *m_first_attribute;   // Pointer to first attribute of node, or 0 if none; always valid
+        xml_attribute<Ch> *m_last_attribute;    // Pointer to last attribute of node, or 0 if none; this value is only valid if m_first_attribute is non-zero
+        xml_node<Ch> *m_prev_sibling;           // Pointer to previous sibling of node, or 0 if none; this value is only valid if m_parent is non-zero
+        xml_node<Ch> *m_next_sibling;           // Pointer to next sibling of node, or 0 if none; this value is only valid if m_parent is non-zero
+
+    };
+
+    ///////////////////////////////////////////////////////////////////////////
+    // XML document
+    
+    //! This class represents root of the DOM hierarchy. 
+    //! It is also an xml_node and a memory_pool through public inheritance.
+    //! Use parse() function to build a DOM tree from a zero-terminated XML text string.
+    //! parse() function allocates memory for nodes and attributes by using functions of xml_document, 
+    //! which are inherited from memory_pool.
+    //! To access root node of the document, use the document itself, as if it was an xml_node.
+    //! \param Ch Character type to use.
+    template<class Ch = char>
+    class xml_document: public xml_node<Ch>, public memory_pool<Ch>
+    {
+    
+    public:
+
+        //! Constructs empty XML document
+        xml_document()
+            : xml_node<Ch>(node_document)
+        {
+        }
+
+        //! Parses zero-terminated XML string according to given flags.
+        //! Passed string will be modified by the parser, unless pdalboostrapidxml::parse_non_destructive flag is used.
+        //! The string must persist for the lifetime of the document.
+        //! In case of error, pdalboostrapidxml::parse_error exception will be thrown.
+        //! <br><br>
+        //! If you want to parse contents of a file, you must first load the file into the memory, and pass pointer to its beginning.
+        //! Make sure that data is zero-terminated.
+        //! <br><br>
+        //! Document can be parsed into multiple times. 
+        //! Each new call to parse removes previous nodes and attributes (if any), but does not clear memory pool.
+        //! \param text XML data to parse; pointer is non-const to denote fact that this data may be modified by the parser.
+        template<int Flags>
+        void parse(Ch *text)
+        {
+            BOOST_ASSERT(text);
+            
+            // Remove current contents
+            this->remove_all_nodes();
+            this->remove_all_attributes();
+            
+            // Parse BOM, if any
+            parse_bom<Flags>(text);
+            
+            // Parse children
+            while (1)
+            {
+                // Skip whitespace before node
+                skip<whitespace_pred, Flags>(text);
+                if (*text == 0)
+                    break;
+
+                // Parse and append new child
+                if (*text == Ch('<'))
+                {
+                    ++text;     // Skip '<'
+                    if (xml_node<Ch> *node = parse_node<Flags>(text))
+                        this->append_node(node);
+                }
+                else
+                    BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("expected <", text);
+            }
+
+        }
+
+        //! Clears the document by deleting all nodes and clearing the memory pool.
+        //! All nodes owned by document pool are destroyed.
+        void clear()
+        {
+            this->remove_all_nodes();
+            this->remove_all_attributes();
+            memory_pool<Ch>::clear();
+        }
+        
+    private:
+
+        ///////////////////////////////////////////////////////////////////////
+        // Internal character utility functions
+        
+        // Detect whitespace character
+        struct whitespace_pred
+        {
+            static unsigned char test(Ch ch)
+            {
+                return internal::lookup_tables<0>::lookup_whitespace[internal::get_index(ch)];
+            }
+        };
+
+        // Detect node name character
+        struct node_name_pred
+        {
+            static unsigned char test(Ch ch)
+            {
+                return internal::lookup_tables<0>::lookup_node_name[internal::get_index(ch)];
+            }
+        };
+
+        // Detect attribute name character
+        struct attribute_name_pred
+        {
+            static unsigned char test(Ch ch)
+            {
+                return internal::lookup_tables<0>::lookup_attribute_name[internal::get_index(ch)];
+            }
+        };
+
+        // Detect text character (PCDATA)
+        struct text_pred
+        {
+            static unsigned char test(Ch ch)
+            {
+                return internal::lookup_tables<0>::lookup_text[internal::get_index(ch)];
+            }
+        };
+
+        // Detect text character (PCDATA) that does not require processing
+        struct text_pure_no_ws_pred
+        {
+            static unsigned char test(Ch ch)
+            {
+                return internal::lookup_tables<0>::lookup_text_pure_no_ws[internal::get_index(ch)];
+            }
+        };
+
+        // Detect text character (PCDATA) that does not require processing
+        struct text_pure_with_ws_pred
+        {
+            static unsigned char test(Ch ch)
+            {
+                return internal::lookup_tables<0>::lookup_text_pure_with_ws[internal::get_index(ch)];
+            }
+        };
+
+        // Detect attribute value character
+        template<Ch Quote>
+        struct attribute_value_pred
+        {
+            static unsigned char test(Ch ch)
+            {
+                if (Quote == Ch('\''))
+                    return internal::lookup_tables<0>::lookup_attribute_data_1[internal::get_index(ch)];
+                if (Quote == Ch('\"'))
+                    return internal::lookup_tables<0>::lookup_attribute_data_2[internal::get_index(ch)];
+                return 0;       // Should never be executed, to avoid warnings on Comeau
+            }
+        };
+
+        // Detect attribute value character
+        template<Ch Quote>
+        struct attribute_value_pure_pred
+        {
+            static unsigned char test(Ch ch)
+            {
+                if (Quote == Ch('\''))
+                    return internal::lookup_tables<0>::lookup_attribute_data_1_pure[internal::get_index(ch)];
+                if (Quote == Ch('\"'))
+                    return internal::lookup_tables<0>::lookup_attribute_data_2_pure[internal::get_index(ch)];
+                return 0;       // Should never be executed, to avoid warnings on Comeau
+            }
+        };
+
+        // Insert coded character, using UTF8 or 8-bit ASCII
+        template<int Flags>
+        static void insert_coded_character(Ch *&text, unsigned long code)
+        {
+            if (Flags & parse_no_utf8)
+            {
+                // Insert 8-bit ASCII character
+                // Todo: possibly verify that code is less than 256 and use replacement char otherwise?
+                text[0] = static_cast<unsigned char>(code);
+                text += 1;
+            }
+            else
+            {
+                // Insert UTF8 sequence
+                if (code < 0x80)    // 1 byte sequence
+                {
+                    text[0] = static_cast<unsigned char>(code);
+                    text += 1;
+                }
+                else if (code < 0x800)  // 2 byte sequence
+                {
+                    text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
+                    text[0] = static_cast<unsigned char>(code | 0xC0);
+                    text += 2;
+                }
+                else if (code < 0x10000)    // 3 byte sequence
+                {
+                    text[2] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
+                    text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
+                    text[0] = static_cast<unsigned char>(code | 0xE0);
+                    text += 3;
+                }
+                else if (code < 0x110000)   // 4 byte sequence
+                {
+                    text[3] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
+                    text[2] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
+                    text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
+                    text[0] = static_cast<unsigned char>(code | 0xF0);
+                    text += 4;
+                }
+                else    // Invalid, only codes up to 0x10FFFF are allowed in Unicode
+                {
+                    BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("invalid numeric character entity", text);
+                }
+            }
+        }
+
+        // Skip characters until predicate evaluates to true
+        template<class StopPred, int Flags>
+        static void skip(Ch *&text)
+        {
+            Ch *tmp = text;
+            while (StopPred::test(*tmp))
+                ++tmp;
+            text = tmp;
+        }
+
+        // Skip characters until predicate evaluates to true while doing the following:
+        // - replacing XML character entity references with proper characters (' & " < > &#...;)
+        // - condensing whitespace sequences to single space character
+        template<class StopPred, class StopPredPure, int Flags>
+        static Ch *skip_and_expand_character_refs(Ch *&text)
+        {
+            // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip
+            if (Flags & parse_no_entity_translation && 
+                !(Flags & parse_normalize_whitespace) &&
+                !(Flags & parse_trim_whitespace))
+            {
+                skip<StopPred, Flags>(text);
+                return text;
+            }
+            
+            // Use simple skip until first modification is detected
+            skip<StopPredPure, Flags>(text);
+
+            // Use translation skip
+            Ch *src = text;
+            Ch *dest = src;
+            while (StopPred::test(*src))
+            {
+                // If entity translation is enabled    
+                if (!(Flags & parse_no_entity_translation))
+                {
+                    // Test if replacement is needed
+                    if (src[0] == Ch('&'))
+                    {
+                        switch (src[1])
+                        {
+
+                        // & '
+                        case Ch('a'): 
+                            if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';'))
+                            {
+                                *dest = Ch('&');
+                                ++dest;
+                                src += 5;
+                                continue;
+                            }
+                            if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';'))
+                            {
+                                *dest = Ch('\'');
+                                ++dest;
+                                src += 6;
+                                continue;
+                            }
+                            break;
+
+                        // "
+                        case Ch('q'): 
+                            if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';'))
+                            {
+                                *dest = Ch('"');
+                                ++dest;
+                                src += 6;
+                                continue;
+                            }
+                            break;
+
+                        // >
+                        case Ch('g'): 
+                            if (src[2] == Ch('t') && src[3] == Ch(';'))
+                            {
+                                *dest = Ch('>');
+                                ++dest;
+                                src += 4;
+                                continue;
+                            }
+                            break;
+
+                        // <
+                        case Ch('l'): 
+                            if (src[2] == Ch('t') && src[3] == Ch(';'))
+                            {
+                                *dest = Ch('<');
+                                ++dest;
+                                src += 4;
+                                continue;
+                            }
+                            break;
+
+                        // &#...; - assumes ASCII
+                        case Ch('#'): 
+                            if (src[2] == Ch('x'))
+                            {
+                                unsigned long code = 0;
+                                src += 3;   // Skip &#x
+                                while (1)
+                                {
+                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
+                                    if (digit == 0xFF)
+                                        break;
+                                    code = code * 16 + digit;
+                                    ++src;
+                                }
+                                insert_coded_character<Flags>(dest, code);    // Put character in output
+                            }
+                            else
+                            {
+                                unsigned long code = 0;
+                                src += 2;   // Skip &#
+                                while (1)
+                                {
+                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
+                                    if (digit == 0xFF)
+                                        break;
+                                    code = code * 10 + digit;
+                                    ++src;
+                                }
+                                insert_coded_character<Flags>(dest, code);    // Put character in output
+                            }
+                            if (*src == Ch(';'))
+                                ++src;
+                            else
+                                BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("expected ;", src);
+                            continue;
+
+                        // Something else
+                        default:
+                            // Ignore, just copy '&' verbatim
+                            break;
+
+                        }
+                    }
+                }
+                
+                // If whitespace condensing is enabled
+                if (Flags & parse_normalize_whitespace)
+                {
+                    // Test if condensing is needed                 
+                    if (whitespace_pred::test(*src))
+                    {
+                        *dest = Ch(' '); ++dest;    // Put single space in dest
+                        ++src;                      // Skip first whitespace char
+                        // Skip remaining whitespace chars
+                        while (whitespace_pred::test(*src))
+                            ++src;
+                        continue;
+                    }
+                }
+
+                // No replacement, only copy character
+                *dest++ = *src++;
+
+            }
+
+            // Return new end
+            text = src;
+            return dest;
+
+        }
+
+        ///////////////////////////////////////////////////////////////////////
+        // Internal parsing functions
+        
+        // Parse UTF-8 BOM, if any
+        template<int Flags>
+        void parse_bom(char *&text)
+        {
+            if (static_cast<unsigned char>(text[0]) == 0xEF && 
+                static_cast<unsigned char>(text[1]) == 0xBB && 
+                static_cast<unsigned char>(text[2]) == 0xBF)
+            {
+                text += 3;
+            }
+        }
+        
+        // Parse UTF-16/32 BOM, if any
+        template<int Flags>
+        void parse_bom(wchar_t *&text)
+        {
+            const wchar_t bom = 0xFEFF;
+            if (text[0] == bom)
+            {
+                ++text;
+            }
+        }
+
+        // Parse XML declaration (<?xml...)
+        template<int Flags>
+        xml_node<Ch> *parse_xml_declaration(Ch *&text)
+        {
+            // If parsing of declaration is disabled
+            if (!(Flags & parse_declaration_node))
+            {
+                // Skip until end of declaration
+                while (text[0] != Ch('?') || text[1] != Ch('>'))
+                {
+                    if (!text[0])
+                        BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+                    ++text;
+                }
+                text += 2;    // Skip '?>'
+                return 0;
+            }
+
+            // Create declaration
+            xml_node<Ch> *declaration = this->allocate_node(node_declaration);
+
+            // Skip whitespace before attributes or ?>
+            skip<whitespace_pred, Flags>(text);
+
+            // Parse declaration attributes
+            parse_node_attributes<Flags>(text, declaration);
+            
+            // Skip ?>
+            if (text[0] != Ch('?') || text[1] != Ch('>'))
+                BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("expected ?>", text);
+            text += 2;
+            
+            return declaration;
+        }
+
+        // Parse XML comment (<!--...)
+        template<int Flags>
+        xml_node<Ch> *parse_comment(Ch *&text)
+        {
+            // If parsing of comments is disabled
+            if (!(Flags & parse_comment_nodes))
+            {
+                // Skip until end of comment
+                while (text[0] != Ch('-') || text[1] != Ch('-') || text[2] != Ch('>'))
+                {
+                    if (!text[0])
+                        BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+                    ++text;
+                }
+                text += 3;     // Skip '-->'
+                return 0;      // Do not produce comment node
+            }
+
+            // Remember value start
+            Ch *val = text;
+
+            // Skip until end of comment
+            while (text[0] != Ch('-') || text[1] != Ch('-') || text[2] != Ch('>'))
+            {
+                if (!text[0])
+                    BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+                ++text;
+            }
+
+            // Create comment node
+            xml_node<Ch> *comment = this->allocate_node(node_comment);
+            comment->value(val, text - val);
+            
+            // Place zero terminator after comment value
+            if (!(Flags & parse_no_string_terminators))
+                *text = Ch('\0');
+            
+            text += 3;     // Skip '-->'
+            return comment;
+        }
+
+        // Parse DOCTYPE
+        template<int Flags>
+        xml_node<Ch> *parse_doctype(Ch *&text)
+        {
+            // Remember value start
+            Ch *val = text;
+
+            // Skip to >
+            while (*text != Ch('>'))
+            {
+                // Determine character type
+                switch (*text)
+                {
+                
+                // If '[' encountered, scan for matching ending ']' using naive algorithm with depth
+                // This works for all W3C test files except for 2 most wicked
+                case Ch('['):
+                {
+                    ++text;     // Skip '['
+                    int depth = 1;
+                    while (depth > 0)
+                    {
+                        switch (*text)
+                        {
+                            case Ch('['): ++depth; break;
+                            case Ch(']'): --depth; break;
+                            case 0: BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+                            default: break;
+                        }
+                        ++text;
+                    }
+                    break;
+                }
+                
+                // Error on end of text
+                case Ch('\0'):
+                    BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+                
+                // Other character, skip it
+                default:
+                    ++text;
+
+                }
+            }
+            
+            // If DOCTYPE nodes enabled
+            if (Flags & parse_doctype_node)
+            {
+                // Create a new doctype node
+                xml_node<Ch> *doctype = this->allocate_node(node_doctype);
+                doctype->value(val, text - val);
+                
+                // Place zero terminator after value
+                if (!(Flags & parse_no_string_terminators))
+                    *text = Ch('\0');
+
+                text += 1;      // skip '>'
+                return doctype;
+            }
+            else
+            {
+                text += 1;      // skip '>'
+                return 0;
+            }
+
+        }
+
+        // Parse PI
+        template<int Flags>
+        xml_node<Ch> *parse_pi(Ch *&text)
+        {
+            // If creation of PI nodes is enabled
+            if (Flags & parse_pi_nodes)
+            {
+                // Create pi node
+                xml_node<Ch> *pi = this->allocate_node(node_pi);
+
+                // Extract PI target name
+                Ch *n = text;
+                skip<node_name_pred, Flags>(text);
+                if (text == n)
+                    BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("expected PI target", text);
+                pi->name(n, text - n);
+                
+                // Skip whitespace between pi target and pi
+                skip<whitespace_pred, Flags>(text);
+
+                // Remember start of pi
+                Ch *val = text;
+                
+                // Skip to '?>'
+                while (text[0] != Ch('?') || text[1] != Ch('>'))
+                {
+                    if (*text == Ch('\0'))
+                        BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+                    ++text;
+                }
+
+                // Set pi value (verbatim, no entity expansion or whitespace normalization)
+                pi->value(val, text - val);
+
+                // Place zero terminator after name and value
+                if (!(Flags & parse_no_string_terminators))
+                {
+                    pi->name()[pi->name_size()] = Ch('\0');
+                    pi->value()[pi->value_size()] = Ch('\0');
+                }
+                
+                text += 2;                          // Skip '?>'
+                return pi;
+            }
+            else
+            {
+                // Skip to '?>'
+                while (text[0] != Ch('?') || text[1] != Ch('>'))
+                {
+                    if (*text == Ch('\0'))
+                        BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+                    ++text;
+                }
+                text += 2;    // Skip '?>'
+                return 0;
+            }
+        }
+
+        // Parse and append data
+        // Return character that ends data.
+        // This is necessary because this character might have been overwritten by a terminating 0
+        template<int Flags>
+        Ch parse_and_append_data(xml_node<Ch> *node, Ch *&text, Ch *contents_start)
+        {
+            // Backup to contents start if whitespace trimming is disabled
+            if (!(Flags & parse_trim_whitespace))
+                text = contents_start;     
+            
+            // Skip until end of data
+            Ch *val = text, *end;
+            if (Flags & parse_normalize_whitespace)
+                end = skip_and_expand_character_refs<text_pred, text_pure_with_ws_pred, Flags>(text);   
+            else
+                end = skip_and_expand_character_refs<text_pred, text_pure_no_ws_pred, Flags>(text);
+
+            // Trim trailing whitespace if flag is set; leading was already trimmed by whitespace skip after >
+            if (Flags & parse_trim_whitespace)
+            {
+                if (Flags & parse_normalize_whitespace)
+                {
+                    // Whitespace is already condensed to single space characters by skipping function, so just trim 1 char off the end
+                    if (*(end - 1) == Ch(' '))
+                        --end;
+                }
+                else
+                {
+                    // Backup until non-whitespace character is found
+                    while (whitespace_pred::test(*(end - 1)))
+                        --end;
+                }
+            }
+            
+            // If characters are still left between end and value (this test is only necessary if normalization is enabled)
+            // Create new data node
+            if (!(Flags & parse_no_data_nodes))
+            {
+                xml_node<Ch> *data = this->allocate_node(node_data);
+                data->value(val, end - val);
+                node->append_node(data);
+            }
+
+            // Add data to parent node if no data exists yet
+            if (!(Flags & parse_no_element_values)) 
+                if (*node->value() == Ch('\0'))
+                    node->value(val, end - val);
+
+            // Place zero terminator after value
+            if (!(Flags & parse_no_string_terminators))
+            {
+                Ch ch = *text;
+                *end = Ch('\0');
+                return ch;      // Return character that ends data; this is required because zero terminator overwritten it
+            }
+
+            // Return character that ends data
+            return *text;
+        }
+
+        // Parse CDATA
+        template<int Flags>
+        xml_node<Ch> *parse_cdata(Ch *&text)
+        {
+            // If CDATA is disabled
+            if (Flags & parse_no_data_nodes)
+            {
+                // Skip until end of cdata
+                while (text[0] != Ch(']') || text[1] != Ch(']') || text[2] != Ch('>'))
+                {
+                    if (!text[0])
+                        BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+                    ++text;
+                }
+                text += 3;      // Skip ]]>
+                return 0;       // Do not produce CDATA node
+            }
+
+            // Skip until end of cdata
+            Ch *val = text;
+            while (text[0] != Ch(']') || text[1] != Ch(']') || text[2] != Ch('>'))
+            {
+                if (!text[0])
+                    BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+                ++text;
+            }
+
+            // Create new cdata node
+            xml_node<Ch> *cdata = this->allocate_node(node_cdata);
+            cdata->value(val, text - val);
+
+            // Place zero terminator after value
+            if (!(Flags & parse_no_string_terminators))
+                *text = Ch('\0');
+
+            text += 3;      // Skip ]]>
+            return cdata;
+        }
+        
+        // Parse element node
+        template<int Flags>
+        xml_node<Ch> *parse_element(Ch *&text)
+        {
+            // Create element node
+            xml_node<Ch> *element = this->allocate_node(node_element);
+
+            // Extract element name
+            Ch *n = text;
+            skip<node_name_pred, Flags>(text);
+            if (text == n)
+                BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("expected element name", text);
+            element->name(n, text - n);
+            
+            // Skip whitespace between element name and attributes or >
+            skip<whitespace_pred, Flags>(text);
+
+            // Parse attributes, if any
+            parse_node_attributes<Flags>(text, element);
+
+            // Determine ending type
+            if (*text == Ch('>'))
+            {
+                ++text;
+                parse_node_contents<Flags>(text, element);
+            }
+            else if (*text == Ch('/'))
+            {
+                ++text;
+                if (*text != Ch('>'))
+                    BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("expected >", text);
+                ++text;
+            }
+            else
+                BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("expected >", text);
+
+            // Place zero terminator after name
+            if (!(Flags & parse_no_string_terminators))
+                element->name()[element->name_size()] = Ch('\0');
+
+            // Return parsed element
+            return element;
+        }
+
+        // Determine node type, and parse it
+        template<int Flags>
+        xml_node<Ch> *parse_node(Ch *&text)
+        {
+            // Parse proper node type
+            switch (text[0])
+            {
+
+            // <...
+            default: 
+                // Parse and append element node
+                return parse_element<Flags>(text);
+
+            // <?...
+            case Ch('?'): 
+                ++text;     // Skip ?
+                if ((text[0] == Ch('x') || text[0] == Ch('X')) &&
+                    (text[1] == Ch('m') || text[1] == Ch('M')) && 
+                    (text[2] == Ch('l') || text[2] == Ch('L')) &&
+                    whitespace_pred::test(text[3]))
+                {
+                    // '<?xml ' - xml declaration
+                    text += 4;      // Skip 'xml '
+                    return parse_xml_declaration<Flags>(text);
+                }
+                else
+                {
+                    // Parse PI
+                    return parse_pi<Flags>(text);
+                }
+            
+            // <!...
+            case Ch('!'): 
+
+                // Parse proper subset of <! node
+                switch (text[1])    
+                {
+                
+                // <!-
+                case Ch('-'):
+                    if (text[2] == Ch('-'))
+                    {
+                        // '<!--' - xml comment
+                        text += 3;     // Skip '!--'
+                        return parse_comment<Flags>(text);
+                    }
+                    break;
+
+                // <![
+                case Ch('['):
+                    if (text[2] == Ch('C') && text[3] == Ch('D') && text[4] == Ch('A') && 
+                        text[5] == Ch('T') && text[6] == Ch('A') && text[7] == Ch('['))
+                    {
+                        // '<![CDATA[' - cdata
+                        text += 8;     // Skip '![CDATA['
+                        return parse_cdata<Flags>(text);
+                    }
+                    break;
+
+                // <!D
+                case Ch('D'):
+                    if (text[2] == Ch('O') && text[3] == Ch('C') && text[4] == Ch('T') && 
+                        text[5] == Ch('Y') && text[6] == Ch('P') && text[7] == Ch('E') && 
+                        whitespace_pred::test(text[8]))
+                    {
+                        // '<!DOCTYPE ' - doctype
+                        text += 9;      // skip '!DOCTYPE '
+                        return parse_doctype<Flags>(text);
+                    }
+                    break;
+
+                default: break;
+
+                }   // switch
+
+                // Attempt to skip other, unrecognized node types starting with <!
+                ++text;     // Skip !
+                while (*text != Ch('>'))
+                {
+                    if (*text == 0)
+                        BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+                    ++text;
+                }
+                ++text;     // Skip '>'
+                return 0;   // No node recognized
+
+            }
+        }
+
+        // Parse contents of the node - children, data etc.
+        template<int Flags>
+        void parse_node_contents(Ch *&text, xml_node<Ch> *node)
+        {
+            // For all children and text
+            while (1)
+            {
+                // Skip whitespace between > and node contents
+                Ch *contents_start = text;      // Store start of node contents before whitespace is skipped
+                if (Flags & parse_trim_whitespace)
+                    skip<whitespace_pred, Flags>(text);
+                Ch next_char = *text;
+
+            // After data nodes, instead of continuing the loop, control jumps here.
+            // This is because zero termination inside parse_and_append_data() function
+            // would wreak havoc with the above code.
+            // Also, skipping whitespace after data nodes is unnecessary.
+            after_data_node:    
+                
+                // Determine what comes next: node closing, child node, data node, or 0?
+                switch (next_char)
+                {
+                
+                // Node closing or child node
+                case Ch('<'):
+                    if (text[1] == Ch('/'))
+                    {
+                        // Node closing
+                        text += 2;      // Skip '</'
+                        if (Flags & parse_validate_closing_tags)
+                        {
+                            // Skip and validate closing tag name
+                            Ch *closing_name = text;
+                            skip<node_name_pred, Flags>(text);
+                            if (!internal::compare(node->name(), node->name_size(), closing_name, text - closing_name, true))
+                                BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("invalid closing tag name", text);
+                        }
+                        else
+                        {
+                            // No validation, just skip name
+                            skip<node_name_pred, Flags>(text);
+                        }
+                        // Skip remaining whitespace after node name
+                        skip<whitespace_pred, Flags>(text);
+                        if (*text != Ch('>'))
+                            BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("expected >", text);
+                        ++text;     // Skip '>'
+                        return;     // Node closed, finished parsing contents
+                    }
+                    else
+                    {
+                        // Child node
+                        ++text;     // Skip '<'
+                        if (xml_node<Ch> *child = parse_node<Flags>(text))
+                            node->append_node(child);
+                    }
+                    break;
+
+                // End of data - error
+                case Ch('\0'):
+                    BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("unexpected end of data", text);
+
+                // Data node
+                default:
+                    next_char = parse_and_append_data<Flags>(node, text, contents_start);
+                    goto after_data_node;   // Bypass regular processing after data nodes
+
+                }
+            }
+        }
+        
+        // Parse XML attributes of the node
+        template<int Flags>
+        void parse_node_attributes(Ch *&text, xml_node<Ch> *node)
+        {
+            // For all attributes 
+            while (attribute_name_pred::test(*text))
+            {
+                // Extract attribute name
+                Ch *n = text;
+                ++text;     // Skip first character of attribute name
+                skip<attribute_name_pred, Flags>(text);
+                if (text == n)
+                    BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("expected attribute name", n);
+
+                // Create new attribute
+                xml_attribute<Ch> *attribute = this->allocate_attribute();
+                attribute->name(n, text - n);
+                node->append_attribute(attribute);
+
+                // Skip whitespace after attribute name
+                skip<whitespace_pred, Flags>(text);
+
+                // Skip =
+                if (*text != Ch('='))
+                    BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("expected =", text);
+                ++text;
+
+                // Add terminating zero after name
+                if (!(Flags & parse_no_string_terminators))
+                    attribute->name()[attribute->name_size()] = 0;
+
+                // Skip whitespace after =
+                skip<whitespace_pred, Flags>(text);
+
+                // Skip quote and remember if it was ' or "
+                Ch quote = *text;
+                if (quote != Ch('\'') && quote != Ch('"'))
+                    BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("expected ' or \"", text);
+                ++text;
+
+                // Extract attribute value and expand char refs in it
+                Ch *val = text, *end;
+                const int AttFlags = Flags & ~parse_normalize_whitespace;   // No whitespace normalization in attributes
+                if (quote == Ch('\''))
+                    end = skip_and_expand_character_refs<attribute_value_pred<Ch('\'')>, attribute_value_pure_pred<Ch('\'')>, AttFlags>(text);
+                else
+                    end = skip_and_expand_character_refs<attribute_value_pred<Ch('"')>, attribute_value_pure_pred<Ch('"')>, AttFlags>(text);
+                
+                // Set attribute value
+                attribute->value(val, end - val);
+                
+                // Make sure that end quote is present
+                if (*text != quote)
+                    BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR("expected ' or \"", text);
+                ++text;     // Skip quote
+
+                // Add terminating zero after value
+                if (!(Flags & parse_no_string_terminators))
+                    attribute->value()[attribute->value_size()] = 0;
+
+                // Skip whitespace after attribute value
+                skip<whitespace_pred, Flags>(text);
+            }
+        }
+
+    };
+
+    //! \cond internal
+    namespace internal
+    {
+
+        // Whitespace (space \n \r \t)
+        template<int Dummy>
+        const unsigned char lookup_tables<Dummy>::lookup_whitespace[256] = 
+        {
+          // 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
+             0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  0,  0,  1,  0,  0,  // 0
+             0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  // 1
+             1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  // 2
+             0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  // 3
+             0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  // 4
+             0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  // 5
+             0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  // 6
+             0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  // 7
+             0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  // 8
+             0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  // 9
+             0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  // A
+             0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  // B
+             0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  // C
+             0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  // D
+             0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  // E
+             0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0   // F
+        };
+
+        // Node name (anything but space \n \r \t / > ? \0)
+        template<int Dummy>
+        const unsigned char lookup_tables<Dummy>::lookup_node_name[256] = 
+        {
+          // 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
+             0,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  1,  1,  0,  1,  1,  // 0
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 1
+             0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  // 2
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  // 3
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 4
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 5
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 6
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 7
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 8
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 9
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // A
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // B
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // C
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // D
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // E
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1   // F
+        };
+
+        // Text (i.e. PCDATA) (anything but < \0)
+        template<int Dummy>
+        const unsigned char lookup_tables<Dummy>::lookup_text[256] = 
+        {
+          // 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
+             0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 0
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 1
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 2
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  // 3
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 4
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 5
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 6
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 7
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 8
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 9
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // A
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // B
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // C
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // D
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // E
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1   // F
+        };
+
+        // Text (i.e. PCDATA) that does not require processing when ws normalization is disabled 
+        // (anything but < \0 &)
+        template<int Dummy>
+        const unsigned char lookup_tables<Dummy>::lookup_text_pure_no_ws[256] = 
+        {
+          // 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
+             0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 0
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 1
+             1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 2
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  // 3
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 4
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 5
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 6
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 7
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 8
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 9
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // A
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // B
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // C
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // D
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // E
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1   // F
+        };
+
+        // Text (i.e. PCDATA) that does not require processing when ws normalizationis is enabled
+        // (anything but < \0 & space \n \r \t)
+        template<int Dummy>
+        const unsigned char lookup_tables<Dummy>::lookup_text_pure_with_ws[256] = 
+        {
+          // 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
+             0,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  1,  1,  0,  1,  1,  // 0
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 1
+             0,  1,  1,  1,  1,  1,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 2
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  // 3
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 4
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 5
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 6
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 7
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 8
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 9
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // A
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // B
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // C
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // D
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // E
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1   // F
+        };
+
+        // Attribute name (anything but space \n \r \t / < > = ? ! \0)
+        template<int Dummy>
+        const unsigned char lookup_tables<Dummy>::lookup_attribute_name[256] = 
+        {
+          // 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
+             0,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  1,  1,  0,  1,  1,  // 0
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 1
+             0,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  // 2
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  0,  0,  // 3
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 4
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 5
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 6
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 7
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 8
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 9
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // A
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // B
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // C
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // D
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // E
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1   // F
+        };
+
+        // Attribute data with single quote (anything but ' \0)
+        template<int Dummy>
+        const unsigned char lookup_tables<Dummy>::lookup_attribute_data_1[256] = 
+        {
+          // 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
+             0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 0
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 1
+             1,  1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  1,  1,  1,  1,  1,  // 2
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 3
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 4
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 5
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 6
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 7
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 8
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 9
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // A
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // B
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // C
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // D
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // E
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1   // F
+        };
+
+        // Attribute data with single quote that does not require processing (anything but ' \0 &)
+        template<int Dummy>
+        const unsigned char lookup_tables<Dummy>::lookup_attribute_data_1_pure[256] = 
+        {
+          // 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
+             0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 0
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 1
+             1,  1,  1,  1,  1,  1,  0,  0,  1,  1,  1,  1,  1,  1,  1,  1,  // 2
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 3
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 4
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 5
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 6
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 7
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 8
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 9
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // A
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // B
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // C
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // D
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // E
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1   // F
+        };
+
+        // Attribute data with double quote (anything but " \0)
+        template<int Dummy>
+        const unsigned char lookup_tables<Dummy>::lookup_attribute_data_2[256] = 
+        {
+          // 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
+             0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 0
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 1
+             1,  1,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 2
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 3
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 4
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 5
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 6
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 7
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 8
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 9
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // A
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // B
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // C
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // D
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // E
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1   // F
+        };
+
+        // Attribute data with double quote that does not require processing (anything but " \0 &)
+        template<int Dummy>
+        const unsigned char lookup_tables<Dummy>::lookup_attribute_data_2_pure[256] = 
+        {
+          // 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
+             0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 0
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 1
+             1,  1,  0,  1,  1,  1,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 2
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 3
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 4
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 5
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 6
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 7
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 8
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // 9
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // A
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // B
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // C
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // D
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  // E
+             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1   // F
+        };
+
+        // Digits (dec and hex, 255 denotes end of numeric character reference)
+        template<int Dummy>
+        const unsigned char lookup_tables<Dummy>::lookup_digits[256] = 
+        {
+          // 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
+           255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  // 0
+           255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  // 1
+           255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  // 2
+             0,  1,  2,  3,  4,  5,  6,  7,  8,  9,255,255,255,255,255,255,  // 3
+           255, 10, 11, 12, 13, 14, 15,255,255,255,255,255,255,255,255,255,  // 4
+           255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  // 5
+           255, 10, 11, 12, 13, 14, 15,255,255,255,255,255,255,255,255,255,  // 6
+           255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  // 7
+           255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  // 8
+           255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  // 9
+           255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  // A
+           255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  // B
+           255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  // C
+           255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  // D
+           255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  // E
+           255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255   // F
+        };
+    
+        // Upper case conversion
+        template<int Dummy>
+        const unsigned char lookup_tables<Dummy>::lookup_upcase[256] = 
+        {
+          // 0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  A   B   C   D   E   F
+           0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14, 15,   // 0
+           16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,   // 1
+           32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,   // 2
+           48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,   // 3
+           64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,   // 4
+           80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,   // 5
+           96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,   // 6
+           80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 123,124,125,126,127,  // 7
+           128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,  // 8
+           144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,  // 9
+           160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,  // A
+           176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,  // B
+           192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,  // C
+           208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,  // D
+           224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,  // E
+           240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255   // F
+        };
+    }
+    //! \endcond
+
+}}}}
+
+// Undefine internal macros
+#undef BOOST_PROPERTY_TREE_RAPIDXML_PARSE_ERROR
+
+// On MSVC, restore warnings state
+#ifdef _MSC_VER
+    #pragma warning(pop)
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/xml_parser_error.hpp b/vendor/pdalboost/boost/property_tree/detail/xml_parser_error.hpp
new file mode 100644
index 0000000..1b427ee
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/xml_parser_error.hpp
@@ -0,0 +1,33 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_XML_PARSER_ERROR_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_XML_PARSER_ERROR_HPP_INCLUDED
+
+#include <boost/property_tree/detail/file_parser_error.hpp>
+#include <string>
+
+namespace pdalboost { namespace property_tree { namespace xml_parser
+{
+
+    //! Xml parser error
+    class xml_parser_error: public file_parser_error
+    {
+    public:
+        xml_parser_error(const std::string &msg,
+                         const std::string &file,
+                         unsigned long l):
+            file_parser_error(msg, file, l)
+        {
+        }
+    };
+
+} } }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/xml_parser_flags.hpp b/vendor/pdalboost/boost/property_tree/detail/xml_parser_flags.hpp
new file mode 100644
index 0000000..cbad745
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/xml_parser_flags.hpp
@@ -0,0 +1,31 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_XML_PARSER_FLAGS_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_XML_PARSER_FLAGS_HPP_INCLUDED
+
+namespace pdalboost { namespace property_tree { namespace xml_parser
+{
+
+    /// Text elements should be put in separate keys,
+    /// not concatenated in parent data.
+    static const int no_concat_text  = 0x1;
+    /// Comments should be omitted.
+    static const int no_comments     = 0x2;
+    /// Whitespace should be collapsed and trimmed.
+    static const int trim_whitespace = 0x4;
+
+    inline bool validate_flags(int flags)
+    {
+        return (flags & ~(no_concat_text | no_comments | trim_whitespace)) == 0;
+    }
+
+} } }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/xml_parser_read_rapidxml.hpp b/vendor/pdalboost/boost/property_tree/detail/xml_parser_read_rapidxml.hpp
new file mode 100644
index 0000000..123bfd7
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/xml_parser_read_rapidxml.hpp
@@ -0,0 +1,144 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2007 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_XML_PARSER_READ_RAPIDXML_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_XML_PARSER_READ_RAPIDXML_HPP_INCLUDED
+
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/detail/xml_parser_error.hpp>
+#include <boost/property_tree/detail/xml_parser_flags.hpp>
+#include <boost/property_tree/detail/xml_parser_utils.hpp>
+#include <boost/property_tree/detail/rapidxml.hpp>
+#include <vector>
+
+namespace pdalboost { namespace property_tree { namespace xml_parser
+{
+
+    template<class Ptree, class Ch>
+    void read_xml_node(detail::pdalboostrapidxml::xml_node<Ch> *node,
+                       Ptree &pt, int flags)
+    {
+        using namespace detail::pdalboostrapidxml;
+        switch (node->type())
+        {
+            // Element nodes
+            case node_element: 
+            {
+                // Create node
+                Ptree &pt_node = pt.push_back(std::make_pair(node->name(),
+                                                             Ptree()))->second;
+
+                // Copy attributes
+                if (node->first_attribute())
+                {
+                    Ptree &pt_attr_root = pt_node.push_back(
+                        std::make_pair(xmlattr<typename Ptree::key_type>(), Ptree()))->second;
+                    for (xml_attribute<Ch> *attr = node->first_attribute();
+                         attr; attr = attr->next_attribute())
+                    {
+                        Ptree &pt_attr = pt_attr_root.push_back(
+                            std::make_pair(attr->name(), Ptree()))->second;
+                        pt_attr.data() = typename Ptree::key_type(attr->value(), attr->value_size());
+                    }
+                }
+
+                // Copy children
+                for (xml_node<Ch> *child = node->first_node();
+                     child; child = child->next_sibling())
+                    read_xml_node(child, pt_node, flags);
+            }
+            break;
+
+            // Data nodes
+            case node_data:
+            case node_cdata:
+            {
+                if (flags & no_concat_text)
+                    pt.push_back(std::make_pair(xmltext<typename Ptree::key_type>(),
+                                                Ptree(node->value())));
+                else
+                    pt.data() += typename Ptree::key_type(node->value(), node->value_size());
+            }
+            break;
+
+            // Comment nodes
+            case node_comment:
+            {
+                if (!(flags & no_comments))
+                    pt.push_back(std::make_pair(xmlcomment<typename Ptree::key_type>(),
+                                    Ptree(typename Ptree::key_type(node->value(), node->value_size()))));
+            }
+            break;
+
+            default:
+                // Skip other node types
+                break;
+        }
+    }
+
+    template<class Ptree>
+    void read_xml_internal(std::basic_istream<
+                               typename Ptree::key_type::value_type> &stream,
+                           Ptree &pt,
+                           int flags,
+                           const std::string &filename)
+    {
+        typedef typename Ptree::key_type::value_type Ch;
+        using namespace detail::pdalboostrapidxml;
+
+        // Load data into vector
+        stream.unsetf(std::ios::skipws);
+        std::vector<Ch> v(std::istreambuf_iterator<Ch>(stream.rdbuf()),
+                          std::istreambuf_iterator<Ch>());
+        if (!stream.good())
+            BOOST_PROPERTY_TREE_THROW(
+                xml_parser_error("read error", filename, 0));
+        v.push_back(0); // zero-terminate
+
+        try {
+            // Parse using appropriate flags
+            const int f_tws = parse_normalize_whitespace
+                            | parse_trim_whitespace;
+            const int f_c = parse_comment_nodes;
+            // Some compilers don't like the bitwise or in the template arg.
+            const int f_tws_c = parse_normalize_whitespace
+                              | parse_trim_whitespace
+                              | parse_comment_nodes;
+            xml_document<Ch> doc;
+            if (flags & no_comments) {
+                if (flags & trim_whitespace)
+                    doc.BOOST_NESTED_TEMPLATE parse<f_tws>(&v.front());
+                else
+                    doc.BOOST_NESTED_TEMPLATE parse<0>(&v.front());
+            } else {
+                if (flags & trim_whitespace)
+                    doc.BOOST_NESTED_TEMPLATE parse<f_tws_c>(&v.front());
+                else
+                    doc.BOOST_NESTED_TEMPLATE parse<f_c>(&v.front());
+            }
+
+            // Create ptree from nodes
+            Ptree local;
+            for (xml_node<Ch> *child = doc.first_node();
+                 child; child = child->next_sibling())
+                read_xml_node(child, local, flags);
+
+            // Swap local and result ptrees
+            pt.swap(local);
+        } catch (parse_error &e) {
+            long line = static_cast<long>(
+                std::count(&v.front(), e.where<Ch>(), Ch('\n')) + 1);
+            BOOST_PROPERTY_TREE_THROW(
+                xml_parser_error(e.what(), filename, line));  
+        }
+    }
+
+} } }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/xml_parser_utils.hpp b/vendor/pdalboost/boost/property_tree/detail/xml_parser_utils.hpp
new file mode 100644
index 0000000..16f2aa9
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/xml_parser_utils.hpp
@@ -0,0 +1,141 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_XML_PARSER_UTILS_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_XML_PARSER_UTILS_HPP_INCLUDED
+
+#include <boost/property_tree/detail/ptree_utils.hpp>
+#include <boost/property_tree/detail/xml_parser_error.hpp>
+#include <boost/property_tree/detail/xml_parser_writer_settings.hpp>
+#include <string>
+#include <algorithm>
+#include <locale>
+
+namespace pdalboost { namespace property_tree { namespace xml_parser
+{
+
+    template<class Str>
+    Str condense(const Str &s)
+    {
+	typedef typename Str::value_type Ch;
+	Str r;
+        std::locale loc;
+        bool space = false;
+        typename Str::const_iterator end = s.end();
+        for (typename Str::const_iterator it = s.begin();
+             it != end; ++it)
+        {
+            if (isspace(*it, loc) || *it == Ch('\n'))
+            {
+                if (!space)
+                    r += Ch(' '), space = true;
+            }
+            else
+                r += *it, space = false;
+        }
+        return r;
+    }
+
+
+    template<class Str>
+    Str encode_char_entities(const Str &s)
+    {
+        // Don't do anything for empty strings.
+        if(s.empty()) return s;
+
+        typedef typename Str::value_type Ch;
+
+        Str r;
+        // To properly round-trip spaces and not uglify the XML beyond
+        // recognition, we have to encode them IF the text contains only spaces.
+        Str sp(1, Ch(' '));
+        if(s.find_first_not_of(sp) == Str::npos) {
+            // The first will suffice.
+            r = detail::widen<Str>(" ");
+            r += Str(s.size() - 1, Ch(' '));
+        } else {
+            typename Str::const_iterator end = s.end();
+            for (typename Str::const_iterator it = s.begin(); it != end; ++it)
+            {
+                switch (*it)
+                {
+                    case Ch('<'): r += detail::widen<Str>("<"); break;
+                    case Ch('>'): r += detail::widen<Str>(">"); break;
+                    case Ch('&'): r += detail::widen<Str>("&"); break;
+                    case Ch('"'): r += detail::widen<Str>("""); break;
+                    case Ch('\''): r += detail::widen<Str>("'"); break;
+                    case Ch('\t'): r += detail::widen<Str>("	"); break;
+                    case Ch('\n'): r += detail::widen<Str>("
"); break;
+                    default: r += *it; break;
+                }
+            }
+        }
+        return r;
+    }
+    
+    template<class Str>
+    Str decode_char_entities(const Str &s)
+    {
+	typedef typename Str::value_type Ch;
+        Str r;
+        typename Str::const_iterator end = s.end();
+        for (typename Str::const_iterator it = s.begin(); it != end; ++it)
+        {
+            if (*it == Ch('&'))
+            {
+                typename Str::const_iterator semicolon = std::find(it + 1, end, Ch(';'));
+                if (semicolon == end)
+                    BOOST_PROPERTY_TREE_THROW(xml_parser_error("invalid character entity", "", 0));
+                Str ent(it + 1, semicolon);
+                if (ent == detail::widen<Str>("lt")) r += Ch('<');
+                else if (ent == detail::widen<Str>("gt")) r += Ch('>');
+                else if (ent == detail::widen<Str>("amp")) r += Ch('&');
+                else if (ent == detail::widen<Str>("quot")) r += Ch('"');
+                else if (ent == detail::widen<Str>("apos")) r += Ch('\'');
+                else
+                    BOOST_PROPERTY_TREE_THROW(xml_parser_error("invalid character entity", "", 0));
+                it = semicolon;
+            }
+            else
+                r += *it;
+        }
+        return r;
+    }
+    
+    template<class Str>
+    const Str &xmldecl()
+    {
+        static Str s = detail::widen<Str>("<?xml>");
+        return s;
+    }
+
+    template<class Str>
+    const Str &xmlattr()
+    {
+        static Str s = detail::widen<Str>("<xmlattr>");
+        return s;
+    }
+
+    template<class Str>
+    const Str &xmlcomment()
+    {
+        static Str s = detail::widen<Str>("<xmlcomment>");
+        return s;
+    }
+
+    template<class Str>
+    const Str &xmltext()
+    {
+        static Str s = detail::widen<Str>("<xmltext>");
+        return s;
+    }
+
+} } }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/xml_parser_write.hpp b/vendor/pdalboost/boost/property_tree/detail/xml_parser_write.hpp
new file mode 100644
index 0000000..cd04ae3
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/xml_parser_write.hpp
@@ -0,0 +1,197 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2013 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_XML_PARSER_WRITE_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_XML_PARSER_WRITE_HPP_INCLUDED
+
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/detail/xml_parser_utils.hpp>
+#include <string>
+#include <ostream>
+#include <iomanip>
+
+namespace pdalboost { namespace property_tree { namespace xml_parser
+{
+    template<class Str>
+    void write_xml_indent(std::basic_ostream<typename Str::value_type> &stream,
+          int indent,
+          const xml_writer_settings<Str> & settings
+          )
+    {
+        stream << std::basic_string<typename Str::value_type>(indent * settings.indent_count, settings.indent_char);
+    }
+
+    template<class Str>
+    void write_xml_comment(std::basic_ostream<typename Str::value_type> &stream,
+                           const Str &s,
+                           int indent,
+                           bool separate_line,
+                           const xml_writer_settings<Str> & settings
+                           )
+    {
+	typedef typename Str::value_type Ch;
+        if (separate_line)
+            write_xml_indent(stream,indent,settings);
+        stream << Ch('<') << Ch('!') << Ch('-') << Ch('-');
+        stream << s;
+        stream << Ch('-') << Ch('-') << Ch('>');
+        if (separate_line)
+            stream << Ch('\n');
+    }
+    
+    template<class Str>
+    void write_xml_text(std::basic_ostream<typename Str::value_type> &stream,
+                        const Str &s,
+                        int indent, 
+                        bool separate_line,
+                        const xml_writer_settings<Str> & settings
+                        )
+    {
+	typedef typename Str::value_type Ch;
+        if (separate_line)    
+            write_xml_indent(stream,indent,settings);
+        stream << encode_char_entities(s);
+        if (separate_line)
+            stream << Ch('\n');
+    }
+
+    template<class Ptree>
+    void write_xml_element(std::basic_ostream<typename Ptree::key_type::value_type> &stream, 
+                           const typename Ptree::key_type &key,
+                           const Ptree &pt, 
+                           int indent,
+                           const xml_writer_settings<typename Ptree::key_type> & settings)
+    {
+        typedef typename Ptree::key_type::value_type Ch;
+        typedef typename Ptree::key_type Str;
+        typedef typename Ptree::const_iterator It;
+
+        bool want_pretty = settings.indent_count > 0;
+        // Find if elements present
+        bool has_elements = false;
+        bool has_attrs_only = pt.data().empty();
+        for (It it = pt.begin(), end = pt.end(); it != end; ++it)
+        {
+            if (it->first != xmlattr<Str>() )
+            {
+                has_attrs_only = false;
+                if (it->first != xmltext<Str>())
+                {
+                    has_elements = true;
+                    break;
+                }
+            }
+        }
+        
+        // Write element
+        if (pt.data().empty() && pt.empty())    // Empty key
+        {
+            if (indent >= 0)
+            {
+                write_xml_indent(stream,indent,settings);
+                stream << Ch('<') << key << 
+                          Ch('/') << Ch('>');
+                if (want_pretty)
+                    stream << Ch('\n');
+            }
+        }
+        else    // Nonempty key
+        {
+        
+            // Write opening tag, attributes and data
+            if (indent >= 0)
+            {
+            
+                // Write opening brace and key
+                write_xml_indent(stream,indent,settings);
+                stream << Ch('<') << key;
+
+                // Write attributes
+                if (optional<const Ptree &> attribs = pt.get_child_optional(xmlattr<Str>()))
+                    for (It it = attribs.get().begin(); it != attribs.get().end(); ++it)
+                        stream << Ch(' ') << it->first << Ch('=')
+                               << Ch('"')
+                               << encode_char_entities(
+                                    it->second.template get_value<Str>())
+                               << Ch('"');
+
+                if ( has_attrs_only )
+                {
+                    // Write closing brace
+                    stream << Ch('/') << Ch('>');
+                    if (want_pretty)
+                        stream << Ch('\n');
+                }
+                else
+                {
+                    // Write closing brace
+                    stream << Ch('>');
+
+                    // Break line if needed and if we want pretty-printing
+                    if (has_elements && want_pretty)
+                        stream << Ch('\n');
+                }
+            }
+
+            // Write data text, if present
+            if (!pt.data().empty())
+                write_xml_text(stream,
+                    pt.template get_value<Str>(),
+                    indent + 1, has_elements && want_pretty, settings);
+
+            // Write elements, comments and texts
+            for (It it = pt.begin(); it != pt.end(); ++it)
+            {
+                if (it->first == xmlattr<Str>())
+                    continue;
+                else if (it->first == xmlcomment<Str>())
+                    write_xml_comment(stream,
+                        it->second.template get_value<Str>(),
+                        indent + 1, want_pretty, settings);
+                else if (it->first == xmltext<Str>())
+                    write_xml_text(stream,
+                        it->second.template get_value<Str>(),
+                        indent + 1, has_elements && want_pretty, settings);
+                else
+                    write_xml_element(stream, it->first, it->second,
+                        indent + 1, settings);
+            }
+            
+            // Write closing tag
+            if (indent >= 0 && !has_attrs_only)
+            {
+                if (has_elements)
+                    write_xml_indent(stream,indent,settings);
+                stream << Ch('<') << Ch('/') << key << Ch('>');
+                if (want_pretty)
+                    stream << Ch('\n');
+            }
+
+        }
+    }
+
+    template<class Ptree>
+    void write_xml_internal(std::basic_ostream<typename Ptree::key_type::value_type> &stream, 
+                            const Ptree &pt,
+                            const std::string &filename,
+                            const xml_writer_settings<typename Ptree::key_type> & settings)
+    {
+        typedef typename Ptree::key_type Str;
+        stream  << detail::widen<Str>("<?xml version=\"1.0\" encoding=\"")
+                << settings.encoding
+                << detail::widen<Str>("\"?>\n");
+        write_xml_element(stream, Str(), pt, -1, settings);
+        if (!stream)
+            BOOST_PROPERTY_TREE_THROW(xml_parser_error("write error", filename, 0));
+    }
+
+} } }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/detail/xml_parser_writer_settings.hpp b/vendor/pdalboost/boost/property_tree/detail/xml_parser_writer_settings.hpp
new file mode 100644
index 0000000..78ffd74
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/detail/xml_parser_writer_settings.hpp
@@ -0,0 +1,64 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2007 Marcin Kalicinski
+// Copyright (C) 2007 Alexey Baskakov
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_DETAIL_XML_PARSER_WRITER_SETTINGS_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_DETAIL_XML_PARSER_WRITER_SETTINGS_HPP_INCLUDED
+
+#include <string>
+#include <boost/property_tree/detail/ptree_utils.hpp>
+
+namespace pdalboost { namespace property_tree { namespace xml_parser
+{
+    
+    // Naively convert narrow string to another character type
+    template<class Str>
+    Str widen(const char *text)
+    {
+	typedef typename Str::value_type Ch;
+        Str result;
+        while (*text)
+        {
+            result += Ch(*text);
+            ++text;
+        }
+        return result;
+    }
+
+    //! Xml writer settings. The default settings lead to no pretty printing.
+    template<class Str>
+    class xml_writer_settings
+    {
+	typedef typename Str::value_type Ch;
+    public:
+        xml_writer_settings(Ch inchar = Ch(' '),
+                typename Str::size_type incount = 0,
+                const Str &enc = widen<Str>("utf-8"))
+            : indent_char(inchar)
+            , indent_count(incount)
+            , encoding(enc)
+        {
+        }
+
+        Ch indent_char;
+        typename Str::size_type indent_count;
+        Str encoding;
+    };
+
+    template <class Str>
+    xml_writer_settings<Str> xml_writer_make_settings(typename Str::value_type indent_char = (typename Str::value_type)(' '),
+        typename Str::size_type indent_count = 0,
+        const Str &encoding = widen<Str>("utf-8"))
+    {
+        return xml_writer_settings<Str>(indent_char, indent_count, encoding);
+    }
+
+} } }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/exceptions.hpp b/vendor/pdalboost/boost/property_tree/exceptions.hpp
new file mode 100644
index 0000000..cfe6f72
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/exceptions.hpp
@@ -0,0 +1,86 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2009 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_PROPERTY_TREE_EXCEPTIONS_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_EXCEPTIONS_HPP_INCLUDED
+
+#include <boost/property_tree/ptree_fwd.hpp>
+
+#include <boost/any.hpp>
+#include <string>
+#include <stdexcept>
+
+namespace pdalboost { namespace property_tree
+{
+
+    /// Base class for all property tree errors. Derives from
+    /// @c std::runtime_error. Call member function @c what to get human
+    /// readable message associated with the error.
+    class ptree_error : public std::runtime_error
+    {
+    public:
+        /// Instantiate a ptree_error instance with the given message.
+        /// @param what The message to associate with this error.
+        ptree_error(const std::string &what);
+
+        ~ptree_error() throw();
+    };
+
+
+    /// Error indicating that translation from given value to the property tree
+    /// data_type (or vice versa) failed. Derives from ptree_error.
+    class ptree_bad_data : public ptree_error
+    {
+    public:
+        /// Instantiate a ptree_bad_data instance with the given message and
+        /// data.
+        /// @param what The message to associate with this error.
+        /// @param data The value associated with this error that was the source
+        ///             of the translation failure.
+        template<class T> ptree_bad_data(const std::string &what,
+                                         const T &data);
+
+        ~ptree_bad_data() throw();
+
+        /// Retrieve the data associated with this error. This is the source
+        /// value that failed to be translated. You need to explicitly
+        /// specify its type.
+        template<class T> T data() const;
+    private:
+        pdalboost::any m_data;
+    };
+
+
+    /// Error indicating that specified path does not exist. Derives from
+    /// ptree_error.
+    class ptree_bad_path : public ptree_error
+    {
+    public:
+        /// Instantiate a ptree_bad_path with the given message and path data.
+        /// @param what The message to associate with this error.
+        /// @param path The path that could not be found in the property_tree.
+        template<class T> ptree_bad_path(const std::string &what,
+                                         const T &path);
+
+        ~ptree_bad_path() throw();
+
+        /// Retrieve the invalid path. You need to explicitly specify the
+        /// type of path.
+        template<class T> T path() const;
+    private:
+        pdalboost::any m_path;
+    };
+
+}}
+
+#include <boost/property_tree/detail/exception_implementation.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/id_translator.hpp b/vendor/pdalboost/boost/property_tree/id_translator.hpp
new file mode 100644
index 0000000..7169aa7
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/id_translator.hpp
@@ -0,0 +1,51 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2009 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_PROPERTY_TREE_ID_TRANSLATOR_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_ID_TRANSLATOR_HPP_INCLUDED
+
+#include <boost/property_tree/ptree_fwd.hpp>
+
+#include <boost/optional.hpp>
+#include <string>
+
+namespace pdalboost { namespace property_tree
+{
+
+    /// Simple implementation of the Translator concept. It does no translation.
+    template <typename T>
+    struct id_translator
+    {
+        typedef T internal_type;
+        typedef T external_type;
+
+        pdalboost::optional<T> get_value(const T &v) { return v; }
+        pdalboost::optional<T> put_value(const T &v) { return v; }
+    };
+
+    // This is the default translator whenever you get two equal types.
+    template <typename T>
+    struct translator_between<T, T>
+    {
+        typedef id_translator<T> type;
+    };
+
+    // A more specific specialization for std::basic_string. Otherwise,
+    // stream_translator's specialization wins.
+    template <typename Ch, typename Traits, typename Alloc>
+    struct translator_between< std::basic_string<Ch, Traits, Alloc>,
+                               std::basic_string<Ch, Traits, Alloc> >
+    {
+        typedef id_translator< std::basic_string<Ch, Traits, Alloc> > type;
+    };
+
+}}
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/info_parser.hpp b/vendor/pdalboost/boost/property_tree/info_parser.hpp
new file mode 100644
index 0000000..35ffa99
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/info_parser.hpp
@@ -0,0 +1,151 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_INFO_PARSER_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_INFO_PARSER_HPP_INCLUDED
+
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/detail/info_parser_error.hpp>
+#include <boost/property_tree/detail/info_parser_writer_settings.hpp>
+#include <boost/property_tree/detail/info_parser_read.hpp>
+#include <boost/property_tree/detail/info_parser_write.hpp>
+#include <istream>
+
+namespace pdalboost { namespace property_tree { namespace info_parser
+{
+
+    /**
+     * Read INFO from a the given stream and translate it to a property tree.
+     * @note Replaces the existing contents. Strong exception guarantee.
+     * @throw info_parser_error If the stream cannot be read, doesn't contain
+     *                          valid INFO, or a conversion fails.
+     */
+    template<class Ptree, class Ch>
+    void read_info(std::basic_istream<Ch> &stream, Ptree &pt)
+    {
+        Ptree local;
+        read_info_internal(stream, local, std::string(), 0);
+        pt.swap(local);
+    }
+
+    /**
+     * Read INFO from a the given stream and translate it to a property tree.
+     * @note Replaces the existing contents. Strong exception guarantee.
+     * @param default_ptree If parsing fails, pt is set to a copy of this tree.
+     */
+    template<class Ptree, class Ch>
+    void read_info(std::basic_istream<Ch> &stream, Ptree &pt,
+                   const Ptree &default_ptree)
+    {
+        try {
+            read_info(stream, pt);
+        } catch(file_parser_error &) {
+            pt = default_ptree;
+        }
+    }
+
+    /**
+     * Read INFO from a the given file and translate it to a property tree. The
+     * tree's key type must be a string type, i.e. it must have a nested
+     * value_type typedef that is a valid parameter for basic_ifstream.
+     * @note Replaces the existing contents. Strong exception guarantee.
+     * @throw info_parser_error If the file cannot be read, doesn't contain
+     *                          valid INFO, or a conversion fails.
+     */
+    template<class Ptree>
+    void read_info(const std::string &filename, Ptree &pt,
+                   const std::locale &loc = std::locale())
+    {
+        std::basic_ifstream<typename Ptree::key_type::value_type>
+            stream(filename.c_str());
+        if (!stream) {
+            BOOST_PROPERTY_TREE_THROW(info_parser_error(
+                "cannot open file for reading", filename, 0));
+        }
+        stream.imbue(loc);
+        Ptree local;
+        read_info_internal(stream, local, filename, 0);
+        pt.swap(local);
+    }
+
+    /**
+     * Read INFO from a the given file and translate it to a property tree. The
+     * tree's key type must be a string type, i.e. it must have a nested
+     * value_type typedef that is a valid parameter for basic_ifstream.
+     * @note Replaces the existing contents. Strong exception guarantee.
+     * @param default_ptree If parsing fails, pt is set to a copy of this tree.
+     */
+    template<class Ptree>
+    void read_info(const std::string &filename,
+                   Ptree &pt,
+                   const Ptree &default_ptree,
+                   const std::locale &loc = std::locale())
+    {
+        try {
+            read_info(filename, pt, loc);
+        } catch(file_parser_error &) {
+            pt = default_ptree;
+        }
+    }
+
+    /**
+     * Writes a tree to the stream in INFO format.
+     * @throw info_parser_error If the stream cannot be written to, or a
+     *                          conversion fails.
+     * @param settings The settings to use when writing the INFO data.
+     */
+    template<class Ptree, class Ch>
+    void write_info(std::basic_ostream<Ch> &stream,
+                    const Ptree &pt,
+                    const info_writer_settings<Ch> &settings =
+                        info_writer_settings<Ch>())
+    {
+        write_info_internal(stream, pt, std::string(), settings);
+    }
+
+    /**
+     * Writes a tree to the file in INFO format. The tree's key type must be a
+     * string type, i.e. it must have a nested value_type typedef that is a
+     * valid parameter for basic_ofstream.
+     * @throw info_parser_error If the file cannot be written to, or a
+     *                          conversion fails.
+     * @param settings The settings to use when writing the INFO data.
+     */
+    template<class Ptree>
+    void write_info(const std::string &filename,
+                    const Ptree &pt,
+                    const std::locale &loc = std::locale(),
+                    const info_writer_settings<
+                        typename Ptree::key_type::value_type
+                    > &settings =
+                        info_writer_make_settings<
+                            typename Ptree::key_type::value_type>())
+    {
+        std::basic_ofstream<typename Ptree::key_type::value_type>
+            stream(filename.c_str());
+        if (!stream) {
+            BOOST_PROPERTY_TREE_THROW(info_parser_error(
+                "cannot open file for writing", filename, 0));
+        }
+        stream.imbue(loc);
+        write_info_internal(stream, pt, filename, settings);
+    }
+
+} } }
+
+namespace pdalboost { namespace property_tree
+{
+    using info_parser::info_parser_error;
+    using info_parser::read_info;
+    using info_parser::write_info;
+    using info_parser::info_writer_settings;
+    using info_parser::info_writer_make_settings;
+} }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/ini_parser.hpp b/vendor/pdalboost/boost/property_tree/ini_parser.hpp
new file mode 100644
index 0000000..a1e704c
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/ini_parser.hpp
@@ -0,0 +1,334 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2009 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_INI_PARSER_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_INI_PARSER_HPP_INCLUDED
+
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/detail/ptree_utils.hpp>
+#include <boost/property_tree/detail/file_parser_error.hpp>
+#include <fstream>
+#include <string>
+#include <sstream>
+#include <stdexcept>
+#include <locale>
+
+namespace pdalboost { namespace property_tree { namespace ini_parser
+{
+
+    /**
+     * Determines whether the @c flags are valid for use with the ini_parser.
+     * @param flags value to check for validity as flags to ini_parser.
+     * @return true if the flags are valid, false otherwise.
+     */
+    inline bool validate_flags(int flags)
+    {
+        return flags == 0;
+    }
+
+    /** Indicates an error parsing INI formatted data. */
+    class ini_parser_error: public file_parser_error
+    {
+    public:
+        /**
+         * Construct an @c ini_parser_error
+         * @param message Message describing the parser error.
+         * @param filename The name of the file being parsed containing the
+         *                 error.
+         * @param line The line in the given file where an error was
+         *             encountered.
+         */
+        ini_parser_error(const std::string &message,
+                         const std::string &filename,
+                         unsigned long line)
+            : file_parser_error(message, filename, line)
+        {
+        }
+    };
+
+    /**
+     * Read INI from a the given stream and translate it to a property tree.
+     * @note Clears existing contents of property tree. In case of error
+     *       the property tree is not modified.
+     * @throw ini_parser_error If a format violation is found.
+     * @param stream Stream from which to read in the property tree.
+     * @param[out] pt The property tree to populate.
+     */
+    template<class Ptree>
+    void read_ini(std::basic_istream<
+                    typename Ptree::key_type::value_type> &stream,
+                  Ptree &pt)
+    {
+        typedef typename Ptree::key_type::value_type Ch;
+        typedef std::basic_string<Ch> Str;
+        const Ch semicolon = stream.widen(';');
+        const Ch hash = stream.widen('#');
+        const Ch lbracket = stream.widen('[');
+        const Ch rbracket = stream.widen(']');
+
+        Ptree local;
+        unsigned long line_no = 0;
+        Ptree *section = 0;
+        Str line;
+
+        // For all lines
+        while (stream.good())
+        {
+
+            // Get line from stream
+            ++line_no;
+            std::getline(stream, line);
+            if (!stream.good() && !stream.eof())
+                BOOST_PROPERTY_TREE_THROW(ini_parser_error(
+                    "read error", "", line_no));
+
+            // If line is non-empty
+            line = property_tree::detail::trim(line, stream.getloc());
+            if (!line.empty())
+            {
+                // Comment, section or key?
+                if (line[0] == semicolon || line[0] == hash)
+                {
+                    // Ignore comments
+                }
+                else if (line[0] == lbracket)
+                {
+                    // If the previous section was empty, drop it again.
+                    if (section && section->empty())
+                        local.pop_back();
+                    typename Str::size_type end = line.find(rbracket);
+                    if (end == Str::npos)
+                        BOOST_PROPERTY_TREE_THROW(ini_parser_error(
+                            "unmatched '['", "", line_no));
+                    Str key = property_tree::detail::trim(
+                        line.substr(1, end - 1), stream.getloc());
+                    if (local.find(key) != local.not_found())
+                        BOOST_PROPERTY_TREE_THROW(ini_parser_error(
+                            "duplicate section name", "", line_no));
+                    section = &local.push_back(
+                        std::make_pair(key, Ptree()))->second;
+                }
+                else
+                {
+                    Ptree &container = section ? *section : local;
+                    typename Str::size_type eqpos = line.find(Ch('='));
+                    if (eqpos == Str::npos)
+                        BOOST_PROPERTY_TREE_THROW(ini_parser_error(
+                            "'=' character not found in line", "", line_no));
+                    if (eqpos == 0)
+                        BOOST_PROPERTY_TREE_THROW(ini_parser_error(
+                            "key expected", "", line_no));
+                    Str key = property_tree::detail::trim(
+                        line.substr(0, eqpos), stream.getloc());
+                    Str data = property_tree::detail::trim(
+                        line.substr(eqpos + 1, Str::npos), stream.getloc());
+                    if (container.find(key) != container.not_found())
+                        BOOST_PROPERTY_TREE_THROW(ini_parser_error(
+                            "duplicate key name", "", line_no));
+                    container.push_back(std::make_pair(key, Ptree(data)));
+                }
+            }
+        }
+        // If the last section was empty, drop it again.
+        if (section && section->empty())
+            local.pop_back();
+
+        // Swap local ptree with result ptree
+        pt.swap(local);
+
+    }
+
+    /**
+     * Read INI from a the given file and translate it to a property tree.
+     * @note Clears existing contents of property tree.  In case of error the
+     *       property tree unmodified.
+     * @throw ini_parser_error In case of error deserializing the property tree.
+     * @param filename Name of file from which to read in the property tree.
+     * @param[out] pt The property tree to populate.
+     * @param loc The locale to use when reading in the file contents.
+     */
+    template<class Ptree>
+    void read_ini(const std::string &filename, 
+                  Ptree &pt,
+                  const std::locale &loc = std::locale())
+    {
+        std::basic_ifstream<typename Ptree::key_type::value_type>
+            stream(filename.c_str());
+        if (!stream)
+            BOOST_PROPERTY_TREE_THROW(ini_parser_error(
+                "cannot open file", filename, 0));
+        stream.imbue(loc);
+        try {
+            read_ini(stream, pt);
+        }
+        catch (ini_parser_error &e) {
+            BOOST_PROPERTY_TREE_THROW(ini_parser_error(
+                e.message(), filename, e.line()));
+        }
+    }
+
+    namespace detail
+    {
+        template<class Ptree>
+        void check_dupes(const Ptree &pt)
+        {
+            if(pt.size() <= 1)
+                return;
+            const typename Ptree::key_type *lastkey = 0;
+            typename Ptree::const_assoc_iterator it = pt.ordered_begin(),
+                                                 end = pt.not_found();
+            lastkey = &it->first;
+            for(++it; it != end; ++it) {
+                if(*lastkey == it->first)
+                    BOOST_PROPERTY_TREE_THROW(ini_parser_error(
+                        "duplicate key", "", 0));
+                lastkey = &it->first;
+            }
+        }
+
+        template <typename Ptree>
+        void write_keys(std::basic_ostream<
+                                      typename Ptree::key_type::value_type
+                                  > &stream,
+                                  const Ptree& pt,
+                                  bool throw_on_children)
+        {
+            typedef typename Ptree::key_type::value_type Ch;
+            for (typename Ptree::const_iterator it = pt.begin(), end = pt.end();
+                 it != end; ++it)
+            {
+                if (!it->second.empty()) {
+                    if (throw_on_children) {
+                        BOOST_PROPERTY_TREE_THROW(ini_parser_error(
+                            "ptree is too deep", "", 0));
+                    }
+                    continue;
+                }
+                stream << it->first << Ch('=')
+                    << it->second.template get_value<
+                        std::basic_string<Ch> >()
+                    << Ch('\n');
+            }
+        }
+
+        template <typename Ptree>
+        void write_top_level_keys(std::basic_ostream<
+                                      typename Ptree::key_type::value_type
+                                  > &stream,
+                                  const Ptree& pt)
+        {
+            write_keys(stream, pt, false);
+        }
+
+        template <typename Ptree>
+        void write_sections(std::basic_ostream<
+                                typename Ptree::key_type::value_type
+                            > &stream,
+                            const Ptree& pt)
+        {
+            typedef typename Ptree::key_type::value_type Ch;
+            for (typename Ptree::const_iterator it = pt.begin(), end = pt.end();
+                 it != end; ++it)
+            {
+                if (!it->second.empty()) {
+                    check_dupes(it->second);
+                    if (!it->second.data().empty())
+                        BOOST_PROPERTY_TREE_THROW(ini_parser_error(
+                            "mixed data and children", "", 0));
+                    stream << Ch('[') << it->first << Ch(']') << Ch('\n');
+                    write_keys(stream, it->second, true);
+                }
+            }
+        }
+    }
+
+    /**
+     * Translates the property tree to INI and writes it the given output
+     * stream.
+     * @pre @e pt cannot have data in its root.
+     * @pre @e pt cannot have keys both data and children.
+     * @pre @e pt cannot be deeper than two levels.
+     * @pre There cannot be duplicate keys on any given level of @e pt.
+     * @throw ini_parser_error In case of error translating the property tree to
+     *                         INI or writing to the output stream.
+     * @param stream The stream to which to write the INI representation of the 
+     *               property tree.
+     * @param pt The property tree to tranlsate to INI and output.
+     * @param flags The flags to use when writing the INI file.
+     *              No flags are currently supported.
+     */
+    template<class Ptree>
+    void write_ini(std::basic_ostream<
+                       typename Ptree::key_type::value_type
+                   > &stream,
+                   const Ptree &pt,
+                   int flags = 0)
+    {
+        BOOST_ASSERT(validate_flags(flags));
+        (void)flags;
+
+        if (!pt.data().empty())
+            BOOST_PROPERTY_TREE_THROW(ini_parser_error(
+                "ptree has data on root", "", 0));
+        detail::check_dupes(pt);
+
+        detail::write_top_level_keys(stream, pt);
+        detail::write_sections(stream, pt);
+    }
+
+    /**
+     * Translates the property tree to INI and writes it the given file.
+     * @pre @e pt cannot have data in its root.
+     * @pre @e pt cannot have keys both data and children.
+     * @pre @e pt cannot be deeper than two levels.
+     * @pre There cannot be duplicate keys on any given level of @e pt.
+     * @throw info_parser_error In case of error translating the property tree
+     *                          to INI or writing to the file.
+     * @param filename The name of the file to which to write the INI
+     *                 representation of the property tree.
+     * @param pt The property tree to tranlsate to INI and output.
+     * @param flags The flags to use when writing the INI file.
+     *              The following flags are supported:
+     * @li @c skip_ini_validity_check -- Skip check if ptree is a valid ini. The
+     *     validity check covers the preconditions but takes <tt>O(n log n)</tt>
+     *     time.
+     * @param loc The locale to use when writing the file.
+     */
+    template<class Ptree>
+    void write_ini(const std::string &filename,
+                   const Ptree &pt,
+                   int flags = 0,
+                   const std::locale &loc = std::locale())
+    {
+        std::basic_ofstream<typename Ptree::key_type::value_type>
+            stream(filename.c_str());
+        if (!stream)
+            BOOST_PROPERTY_TREE_THROW(ini_parser_error(
+                "cannot open file", filename, 0));
+        stream.imbue(loc);
+        try {
+            write_ini(stream, pt, flags);
+        }
+        catch (ini_parser_error &e) {
+            BOOST_PROPERTY_TREE_THROW(ini_parser_error(
+                e.message(), filename, e.line()));
+        }
+    }
+
+} } }
+
+namespace pdalboost { namespace property_tree
+{
+    using ini_parser::ini_parser_error;
+    using ini_parser::read_ini;
+    using ini_parser::write_ini;
+} }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/json_parser.hpp b/vendor/pdalboost/boost/property_tree/json_parser.hpp
new file mode 100644
index 0000000..5ca62b1
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/json_parser.hpp
@@ -0,0 +1,140 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2015 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_JSON_PARSER_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_JSON_PARSER_HPP_INCLUDED
+
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/detail/json_parser_error.hpp>
+#include <boost/property_tree/detail/json_parser/read.hpp>
+#include <boost/property_tree/detail/json_parser_write.hpp>
+
+#include <fstream>
+#include <string>
+#include <locale>
+
+namespace pdalboost { namespace property_tree { namespace json_parser
+{
+
+    /**
+     * Read JSON from a the given stream and translate it to a property tree.
+     * @note Clears existing contents of property tree.  In case of error the
+     *       property tree unmodified.
+     * @note Items of JSON arrays are translated into ptree keys with empty
+     *       names. Members of objects are translated into named keys.
+     * @note JSON data can be a string, a numeric value, or one of literals
+     *       "null", "true" and "false". During parse, any of the above is
+     *       copied verbatim into ptree data string.
+     * @throw json_parser_error In case of error deserializing the property
+     *                          tree.
+     * @param stream Stream from which to read in the property tree.
+     * @param[out] pt The property tree to populate.
+     */
+    template<class Ptree>
+    void read_json(std::basic_istream<
+                       typename Ptree::key_type::value_type
+                   > &stream,
+                   Ptree &pt)
+    {
+        detail::read_json_internal(stream, pt, std::string());
+    }
+
+    /**
+     * Read JSON from a the given file and translate it to a property tree.
+     * @note Clears existing contents of property tree.  In case of error the
+     *       property tree unmodified.
+     * @note Items of JSON arrays are translated into ptree keys with empty
+     *       names. Members of objects are translated into named keys.
+     * @note JSON data can be a string, a numeric value, or one of literals
+     *       "null", "true" and "false". During parse, any of the above is
+     *       copied verbatim into ptree data string.
+     * @throw json_parser_error In case of error deserializing the property
+     *                          tree.
+     * @param filename Name of file from which to read in the property tree.
+     * @param[out] pt The property tree to populate.
+     * @param loc The locale to use when reading in the file contents.
+     */
+    template<class Ptree>
+    void read_json(const std::string &filename,
+                   Ptree &pt,
+                   const std::locale &loc = std::locale())
+    {
+        std::basic_ifstream<typename Ptree::key_type::value_type>
+            stream(filename.c_str());
+        if (!stream)
+            BOOST_PROPERTY_TREE_THROW(json_parser_error(
+                "cannot open file", filename, 0));
+        stream.imbue(loc);
+        detail::read_json_internal(stream, pt, filename);
+    }
+
+    /**
+     * Translates the property tree to JSON and writes it the given output
+     * stream.
+     * @note Any property tree key containing only unnamed subkeys will be
+     *       rendered as JSON arrays.
+     * @pre @e pt cannot contain keys that have both subkeys and non-empty data.
+     * @throw json_parser_error In case of error translating the property tree
+     *                          to JSON or writing to the output stream.
+     * @param stream The stream to which to write the JSON representation of the
+     *               property tree.
+     * @param pt The property tree to tranlsate to JSON and output.
+     * @param pretty Whether to pretty-print. Defaults to true for backward
+     *               compatibility.
+     */
+    template<class Ptree>
+    void write_json(std::basic_ostream<
+                        typename Ptree::key_type::value_type
+                    > &stream,
+                    const Ptree &pt,
+                    bool pretty = true)
+    {
+        write_json_internal(stream, pt, std::string(), pretty);
+    }
+
+    /**
+     * Translates the property tree to JSON and writes it the given file.
+     * @note Any property tree key containing only unnamed subkeys will be
+     *       rendered as JSON arrays.
+     * @pre @e pt cannot contain keys that have both subkeys and non-empty data.
+     * @throw json_parser_error In case of error translating the property tree
+     *                          to JSON or writing to the file.
+     * @param filename The name of the file to which to write the JSON
+     *                 representation of the property tree.
+     * @param pt The property tree to translate to JSON and output.
+     * @param loc The locale to use when writing out to the output file.
+     * @param pretty Whether to pretty-print. Defaults to true and last place
+     *               for backward compatibility.
+     */
+    template<class Ptree>
+    void write_json(const std::string &filename,
+                    const Ptree &pt,
+                    const std::locale &loc = std::locale(),
+                    bool pretty = true)
+    {
+        std::basic_ofstream<typename Ptree::key_type::value_type>
+            stream(filename.c_str());
+        if (!stream)
+            BOOST_PROPERTY_TREE_THROW(json_parser_error(
+                "cannot open file", filename, 0));
+        stream.imbue(loc);
+        write_json_internal(stream, pt, filename, pretty);
+    }
+
+} } }
+
+namespace pdalboost { namespace property_tree
+{
+    using json_parser::read_json;
+    using json_parser::write_json;
+    using json_parser::json_parser_error;
+} }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/ptree.hpp b/vendor/pdalboost/boost/property_tree/ptree.hpp
new file mode 100644
index 0000000..a6e4062
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/ptree.hpp
@@ -0,0 +1,518 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2009 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_PROPERTY_TREE_PTREE_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_PTREE_HPP_INCLUDED
+
+#include <boost/property_tree/ptree_fwd.hpp>
+#include <boost/property_tree/string_path.hpp>
+#include <boost/property_tree/stream_translator.hpp>
+#include <boost/property_tree/exceptions.hpp>
+#include <boost/property_tree/detail/ptree_utils.hpp>
+
+#include <boost/multi_index_container.hpp>
+#include <boost/multi_index/indexed_by.hpp>
+#include <boost/multi_index/sequenced_index.hpp>
+#include <boost/multi_index/ordered_index.hpp>
+#include <boost/multi_index/member.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/optional.hpp>
+#include <utility>                  // for std::pair
+
+namespace pdalboost { namespace property_tree
+{
+
+    /**
+     * Property tree main structure. A property tree is a hierarchical data
+     * structure which has one element of type @p Data in each node, as well
+     * as an ordered sequence of sub-nodes, which are additionally identified
+     * by a non-unique key of type @p Key.
+     *
+     * Key equivalency is defined by @p KeyCompare, a predicate defining a
+     * strict weak ordering.
+     *
+     * Property tree defines a Container-like interface to the (key-node) pairs
+     * of its direct sub-nodes. The iterators are bidirectional. The sequence
+     * of nodes is held in insertion order, not key order.
+     */
+    template<class Key, class Data, class KeyCompare>
+    class basic_ptree
+    {
+#if defined(BOOST_PROPERTY_TREE_DOXYGEN_INVOKED)
+    public:
+#endif
+        // Internal types
+        /**
+         * Simpler way to refer to this basic_ptree\<C,K,P,A\> type.
+         * Note that this is private, and made public only for doxygen.
+         */
+        typedef basic_ptree<Key, Data, KeyCompare> self_type;
+
+    public:
+        // Basic types
+        typedef Key                                  key_type;
+        typedef Data                                 data_type;
+        typedef KeyCompare                           key_compare;
+
+        // Container view types
+        typedef std::pair<const Key, self_type>      value_type;
+        typedef std::size_t                          size_type;
+
+        // The problem with the iterators is that I can't make them complete
+        // until the container is complete. Sucks. Especially for the reverses.
+        class iterator;
+        class const_iterator;
+        class reverse_iterator;
+        class const_reverse_iterator;
+
+        // Associative view types
+        class assoc_iterator;
+        class const_assoc_iterator;
+
+        // Property tree view types
+        typedef typename path_of<Key>::type          path_type;
+
+
+        // The big five
+
+        /** Creates a node with no children and default-constructed data. */
+        basic_ptree();
+        /** Creates a node with no children and a copy of the given data. */
+        explicit basic_ptree(const data_type &data);
+        basic_ptree(const self_type &rhs);
+        ~basic_ptree();
+        /** Basic guarantee only. */
+        self_type &operator =(const self_type &rhs);
+
+        /** Swap with other tree. Only constant-time and nothrow if the
+         * data type's swap is.
+         */
+        void swap(self_type &rhs);
+
+        // Container view functions
+
+        /** The number of direct children of this node. */
+        size_type size() const;
+        size_type max_size() const;
+        /** Whether there are any direct children. */
+        bool empty() const;
+
+        iterator begin();
+        const_iterator begin() const;
+        iterator end();
+        const_iterator end() const;
+        reverse_iterator rbegin();
+        const_reverse_iterator rbegin() const;
+        reverse_iterator rend();
+        const_reverse_iterator rend() const;
+
+        value_type &front();
+        const value_type &front() const;
+        value_type &back();
+        const value_type &back() const;
+
+        /** Insert a copy of the given tree with its key just before the given
+         * position in this node. This operation invalidates no iterators.
+         * @return An iterator to the newly created child.
+         */
+        iterator insert(iterator where, const value_type &value);
+
+        /** Range insert. Equivalent to:
+         * @code
+         * for(; first != last; ++first) insert(where, *first);
+         * @endcode
+         */
+        template<class It> void insert(iterator where, It first, It last);
+
+        /** Erase the child pointed at by the iterator. This operation
+         * invalidates the given iterator, as well as its equivalent
+         * assoc_iterator.
+         * @return A valid iterator pointing to the element after the erased.
+         */
+        iterator erase(iterator where);
+
+        /** Range erase. Equivalent to:
+         * @code
+         * while(first != last;) first = erase(first);
+         * @endcode
+         */
+        iterator erase(iterator first, iterator last);
+
+        /** Equivalent to insert(begin(), value). */
+        iterator push_front(const value_type &value);
+
+        /** Equivalent to insert(end(), value). */
+        iterator push_back(const value_type &value);
+
+        /** Equivalent to erase(begin()). */
+        void pop_front();
+
+        /** Equivalent to erase(pdalboost::prior(end())). */
+        void pop_back();
+
+        /** Reverses the order of direct children in the property tree. */
+        void reverse();
+
+        /** Sorts the direct children of this node according to the predicate.
+         * The predicate is passed the whole pair of key and child.
+         */
+        template<class Compare> void sort(Compare comp);
+
+        /** Sorts the direct children of this node according to key order. */
+        void sort();
+
+        // Equality
+
+        /** Two property trees are the same if they have the same data, the keys
+         * and order of their children are the same, and the children compare
+         * equal, recursively.
+         */
+        bool operator ==(const self_type &rhs) const;
+        bool operator !=(const self_type &rhs) const;
+
+        // Associative view
+
+        /** Returns an iterator to the first child, in key order. */
+        assoc_iterator ordered_begin();
+        /** Returns an iterator to the first child, in key order. */
+        const_assoc_iterator ordered_begin() const;
+
+        /** Returns the not-found iterator. Equivalent to end() in a real
+         * associative container.
+         */
+        assoc_iterator not_found();
+        /** Returns the not-found iterator. Equivalent to end() in a real
+         * associative container.
+         */
+        const_assoc_iterator not_found() const;
+
+        /** Find a child with the given key, or not_found() if there is none.
+         * There is no guarantee about which child is returned if multiple have
+         * the same key.
+         */
+        assoc_iterator find(const key_type &key);
+
+        /** Find a child with the given key, or not_found() if there is none.
+         * There is no guarantee about which child is returned if multiple have
+         * the same key.
+         */
+        const_assoc_iterator find(const key_type &key) const;
+
+        /** Find the range of children that have the given key. */
+        std::pair<assoc_iterator, assoc_iterator>
+            equal_range(const key_type &key);
+
+        /** Find the range of children that have the given key. */
+        std::pair<const_assoc_iterator, const_assoc_iterator>
+            equal_range(const key_type &key) const;
+
+        /** Count the number of direct children with the given key. */
+        size_type count(const key_type &key) const;
+
+        /** Erase all direct children with the given key and return the count.
+         */
+        size_type erase(const key_type &key);
+
+        /** Get the iterator that points to the same element as the argument.
+         * @note A valid assoc_iterator range (a, b) does not imply that
+         *       (to_iterator(a), to_iterator(b)) is a valid range.
+         */
+        iterator to_iterator(assoc_iterator it);
+
+        /** Get the iterator that points to the same element as the argument.
+         * @note A valid const_assoc_iterator range (a, b) does not imply that
+         *       (to_iterator(a), to_iterator(b)) is a valid range.
+         */
+        const_iterator to_iterator(const_assoc_iterator it) const;
+
+        // Property tree view
+
+        /** Reference to the actual data in this node. */
+        data_type &data();
+
+        /** Reference to the actual data in this node. */
+        const data_type &data() const;
+
+        /** Clear this tree completely, of both data and children. */
+        void clear();
+
+        /** Get the child at the given path, or throw @c ptree_bad_path.
+         * @note Depending on the path, the result at each level may not be
+         *       completely deterministic, i.e. if the same key appears multiple
+         *       times, which child is chosen is not specified. This can lead
+         *       to the path not being resolved even though there is a
+         *       descendant with this path. Example:
+         * @code
+         *   a -> b -> c
+         *     -> b
+         * @endcode
+         *       The path "a.b.c" will succeed if the resolution of "b" chooses
+         *       the first such node, but fail if it chooses the second.
+         */
+        self_type &get_child(const path_type &path);
+
+        /** Get the child at the given path, or throw @c ptree_bad_path. */
+        const self_type &get_child(const path_type &path) const;
+
+        /** Get the child at the given path, or return @p default_value. */
+        self_type &get_child(const path_type &path, self_type &default_value);
+
+        /** Get the child at the given path, or return @p default_value. */
+        const self_type &get_child(const path_type &path,
+                                   const self_type &default_value) const;
+
+        /** Get the child at the given path, or return pdalboost::null. */
+        optional<self_type &> get_child_optional(const path_type &path);
+
+        /** Get the child at the given path, or return pdalboost::null. */
+        optional<const self_type &>
+          get_child_optional(const path_type &path) const;
+
+        /** Set the node at the given path to the given value. Create any
+         * missing parents. If the node at the path already exists, replace it.
+         * @return A reference to the inserted subtree.
+         * @note Because of the way paths work, it is not generally guaranteed
+         *       that a node newly created can be accessed using the same path.
+         * @note If the path could refer to multiple nodes, it is unspecified
+         *       which one gets replaced.
+         */
+        self_type &put_child(const path_type &path, const self_type &value);
+
+        /** Add the node at the given path. Create any missing parents. If there
+         * already is a node at the path, add another one with the same key.
+         * @param path Path to the child. The last fragment must not have an
+         *             index.
+         * @return A reference to the inserted subtree.
+         * @note Because of the way paths work, it is not generally guaranteed
+         *       that a node newly created can be accessed using the same path.
+         */
+        self_type &add_child(const path_type &path, const self_type &value);
+
+        /** Take the value of this node and attempt to translate it to a
+         * @c Type object using the supplied translator.
+         * @throw ptree_bad_data if the conversion fails.
+         */
+        template<class Type, class Translator>
+        typename pdalboost::enable_if<detail::is_translator<Translator>, Type>::type
+        get_value(Translator tr) const;
+
+        /** Take the value of this node and attempt to translate it to a
+         * @c Type object using the default translator.
+         * @throw ptree_bad_data if the conversion fails.
+         */
+        template<class Type>
+        Type get_value() const;
+
+        /** Take the value of this node and attempt to translate it to a
+         * @c Type object using the supplied translator. Return @p default_value
+         * if this fails.
+         */
+        template<class Type, class Translator>
+        Type get_value(const Type &default_value, Translator tr) const;
+
+        /** Make get_value do the right thing for string literals. */
+        template <class Ch, class Translator>
+        typename pdalboost::enable_if<
+            detail::is_character<Ch>,
+            std::basic_string<Ch>
+        >::type
+        get_value(const Ch *default_value, Translator tr) const;
+
+        /** Take the value of this node and attempt to translate it to a
+         * @c Type object using the default translator. Return @p default_value
+         * if this fails.
+         */
+        template<class Type>
+        typename pdalboost::disable_if<detail::is_translator<Type>, Type>::type
+        get_value(const Type &default_value) const;
+
+        /** Make get_value do the right thing for string literals. */
+        template <class Ch>
+        typename pdalboost::enable_if<
+            detail::is_character<Ch>,
+            std::basic_string<Ch>
+        >::type
+        get_value(const Ch *default_value) const;
+
+        /** Take the value of this node and attempt to translate it to a
+         * @c Type object using the supplied translator. Return pdalboost::null if
+         * this fails.
+         */
+        template<class Type, class Translator>
+        optional<Type> get_value_optional(Translator tr) const;
+
+        /** Take the value of this node and attempt to translate it to a
+         * @c Type object using the default translator. Return pdalboost::null if
+         * this fails.
+         */
+        template<class Type>
+        optional<Type> get_value_optional() const;
+
+        /** Replace the value at this node with the given value, translated
+         * to the tree's data type using the supplied translator.
+         * @throw ptree_bad_data if the conversion fails.
+        */
+        template<class Type, class Translator>
+        void put_value(const Type &value, Translator tr);
+
+        /** Replace the value at this node with the given value, translated
+         * to the tree's data type using the default translator.
+         * @throw ptree_bad_data if the conversion fails.
+        */
+        template<class Type>
+        void put_value(const Type &value);
+
+        /** Shorthand for get_child(path).get_value(tr). */
+        template<class Type, class Translator>
+        typename pdalboost::enable_if<detail::is_translator<Translator>, Type>::type
+        get(const path_type &path, Translator tr) const;
+
+        /** Shorthand for get_child(path).get_value\<Type\>(). */
+        template<class Type>
+        Type get(const path_type &path) const;
+
+        /** Shorthand for get_child(path, empty_ptree())
+         *                    .get_value(default_value, tr).
+         * That is, return the translated value if possible, and the default
+         * value if the node doesn't exist or conversion fails.
+         */
+        template<class Type, class Translator>
+        Type get(const path_type &path,
+                 const Type &default_value,
+                 Translator tr) const;
+
+        /** Make get do the right thing for string literals. */
+        template <class Ch, class Translator>
+        typename pdalboost::enable_if<
+            detail::is_character<Ch>,
+            std::basic_string<Ch>
+        >::type
+        get(const path_type &path, const Ch *default_value, Translator tr)const;
+
+        /** Shorthand for get_child(path, empty_ptree())
+         *                    .get_value(default_value).
+         * That is, return the translated value if possible, and the default
+         * value if the node doesn't exist or conversion fails.
+         */
+        template<class Type>
+        typename pdalboost::disable_if<detail::is_translator<Type>, Type>::type
+        get(const path_type &path, const Type &default_value) const;
+
+        /** Make get do the right thing for string literals. */
+        template <class Ch>
+        typename pdalboost::enable_if<
+            detail::is_character<Ch>,
+            std::basic_string<Ch>
+        >::type
+        get(const path_type &path, const Ch *default_value) const;
+
+        /** Shorthand for:
+         * @code
+         * if(optional\<self_type&\> node = get_child_optional(path))
+         *   return node->get_value_optional(tr);
+         * return pdalboost::null;
+         * @endcode
+         * That is, return the value if it exists and can be converted, or nil.
+        */
+        template<class Type, class Translator>
+        optional<Type> get_optional(const path_type &path, Translator tr) const;
+
+        /** Shorthand for:
+         * @code
+         * if(optional\<const self_type&\> node = get_child_optional(path))
+         *   return node->get_value_optional();
+         * return pdalboost::null;
+         * @endcode
+         * That is, return the value if it exists and can be converted, or nil.
+        */
+        template<class Type>
+        optional<Type> get_optional(const path_type &path) const;
+
+        /** Set the value of the node at the given path to the supplied value,
+         * translated to the tree's data type. If the node doesn't exist, it is
+         * created, including all its missing parents.
+         * @return The node that had its value changed.
+         * @throw ptree_bad_data if the conversion fails.
+        */
+        template<class Type, class Translator>
+        self_type &put(const path_type &path, const Type &value, Translator tr);
+
+        /** Set the value of the node at the given path to the supplied value,
+         * translated to the tree's data type. If the node doesn't exist, it is
+         * created, including all its missing parents.
+         * @return The node that had its value changed.
+         * @throw ptree_bad_data if the conversion fails.
+        */
+        template<class Type>
+        self_type &put(const path_type &path, const Type &value);
+
+        /** If the node identified by the path does not exist, create it,
+         * including all its missing parents.
+         * If the node already exists, add a sibling with the same key.
+         * Set the newly created node's value to the given paremeter,
+         * translated with the supplied translator.
+         * @param path Path to the child. The last fragment must not have an
+         *             index.
+         * @param value The value to add.
+         * @param tr The translator to use.
+         * @return The node that was added.
+         * @throw ptree_bad_data if the conversion fails.
+        */
+        template<class Type, class Translator>
+        self_type &add(const path_type &path,
+                       const Type &value,
+                       Translator tr);
+
+        /** If the node identified by the path does not exist, create it,
+         * including all its missing parents.
+         * If the node already exists, add a sibling with the same key.
+         * Set the newly created node's value to the given paremeter,
+         * translated with the supplied translator.
+         * @param path Path to the child. The last fragment must not have an
+         *             index.
+         * @param value The value to add.
+         * @return The node that was added.
+         * @throw ptree_bad_data if the conversion fails.
+        */
+        template<class Type>
+        self_type &add(const path_type &path, const Type &value);
+
+    private:
+        // Hold the data of this node
+        data_type m_data;
+        // Hold the children - this is a void* because we can't complete the
+        // container type within the class.
+        void* m_children;
+
+        // Getter tree-walk. Not const-safe! Gets the node the path refers to,
+        // or null. Destroys p's value.
+        self_type* walk_path(path_type& p) const;
+
+        // Modifer tree-walk. Gets the parent of the node referred to by the
+        // path, creating nodes as necessary. p is the path to the remaining
+        // child.
+        self_type& force_path(path_type& p);
+
+        // This struct contains typedefs for the concrete types.
+        struct subs;
+        friend struct subs;
+        friend class iterator;
+        friend class const_iterator;
+        friend class reverse_iterator;
+        friend class const_reverse_iterator;
+    };
+
+}}
+
+#include <boost/property_tree/detail/ptree_implementation.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/ptree_fwd.hpp b/vendor/pdalboost/boost/property_tree/ptree_fwd.hpp
new file mode 100644
index 0000000..bc40890
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/ptree_fwd.hpp
@@ -0,0 +1,143 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2009 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_PTREE_FWD_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_PTREE_FWD_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/optional/optional_fwd.hpp>
+#include <boost/throw_exception.hpp>
+#include <functional>           // for std::less
+#include <memory>               // for std::allocator
+#include <string>
+
+namespace pdalboost { namespace property_tree
+{
+    namespace detail {
+        template <typename T> struct less_nocase;
+    }
+
+    // Classes
+
+    template < class Key, class Data, class KeyCompare = std::less<Key> >
+    class basic_ptree;
+
+    template <typename T>
+    struct id_translator;
+
+    template <typename String, typename Translator>
+    class string_path;
+
+    // Texas-style concepts for documentation only.
+#if 0
+    concept PropertyTreePath<class Path> {
+        // The key type for which this path works.
+        typename key_type;
+        // Return the key that the first segment of the path names.
+        // Split the head off the state.
+        key_type Path::reduce();
+
+        // Return true if the path is empty.
+        bool Path::empty() const;
+
+        // Return true if the path contains a single element.
+        bool Path::single() const;
+
+        // Dump as a std::string, for exception messages.
+        std::string Path::dump() const;
+    }
+    concept PropertyTreeKey<class Key> {
+        PropertyTreePath path;
+        requires SameType<Key, PropertyTreePath<path>::key_type>;
+    }
+    concept PropertyTreeTranslator<class Tr> {
+        typename internal_type;
+        typename external_type;
+
+        pdalboost::optional<external_type> Tr::get_value(internal_type);
+        pdalboost::optional<internal_type> Tr::put_value(external_type);
+    }
+#endif
+    /// If you want to use a custom key type, specialize this struct for it
+    /// and give it a 'type' typedef that specifies your path type. The path
+    /// type must conform to the Path concept described in the documentation.
+    /// This is already specialized for std::basic_string.
+    template <typename Key>
+    struct path_of;
+
+    /// Specialize this struct to specify a default translator between the data
+    /// in a tree whose data_type is Internal, and the external data_type
+    /// specified in a get_value, get, put_value or put operation.
+    /// This is already specialized for Internal being std::basic_string.
+    template <typename Internal, typename External>
+    struct translator_between;
+
+    class ptree_error;
+    class ptree_bad_data;
+    class ptree_bad_path;
+
+    // Typedefs
+
+    /** Implements a path using a std::string as the key. */
+    typedef string_path<std::string, id_translator<std::string> > path;
+
+    /**
+     * A property tree with std::string for key and data, and default
+     * comparison.
+     */
+    typedef basic_ptree<std::string, std::string> ptree;
+
+    /**
+     * A property tree with std::string for key and data, and case-insensitive
+     * comparison.
+     */
+    typedef basic_ptree<std::string, std::string,
+                        detail::less_nocase<std::string> >
+        iptree;
+
+#ifndef BOOST_NO_STD_WSTRING
+    /** Implements a path using a std::wstring as the key. */
+    typedef string_path<std::wstring, id_translator<std::wstring> > wpath;
+
+    /**
+     * A property tree with std::wstring for key and data, and default
+     * comparison.
+     * @note The type only exists if the platform supports @c wchar_t.
+     */
+    typedef basic_ptree<std::wstring, std::wstring> wptree;
+
+    /**
+     * A property tree with std::wstring for key and data, and case-insensitive
+     * comparison.
+     * @note The type only exists if the platform supports @c wchar_t.
+     */
+    typedef basic_ptree<std::wstring, std::wstring,
+                        detail::less_nocase<std::wstring> >
+        wiptree;
+#endif
+
+    // Free functions
+
+    /**
+     * Swap two property tree instances.
+     */
+    template<class K, class D, class C>
+    void swap(basic_ptree<K, D, C> &pt1,
+              basic_ptree<K, D, C> &pt2);
+
+} }
+
+
+#if !defined(BOOST_PROPERTY_TREE_DOXYGEN_INVOKED)
+    // Throwing macro to avoid no return warnings portably
+#   define BOOST_PROPERTY_TREE_THROW(e) BOOST_THROW_EXCEPTION(e)
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/ptree_serialization.hpp b/vendor/pdalboost/boost/property_tree/ptree_serialization.hpp
new file mode 100644
index 0000000..978d0b4
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/ptree_serialization.hpp
@@ -0,0 +1,129 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_PTREE_SERIALIZATION_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_PTREE_SERIALIZATION_HPP_INCLUDED
+
+#include <boost/property_tree/ptree.hpp>
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/collections_save_imp.hpp>
+#include <boost/serialization/detail/stack_constructor.hpp>
+#include <boost/serialization/split_free.hpp>
+#include <boost/serialization/utility.hpp>
+
+namespace pdalboost { namespace property_tree
+{
+
+    ///////////////////////////////////////////////////////////////////////////
+    // pdalboost::serialization support
+
+    /**
+     * Serialize the property tree to the given archive.
+     * @note In addition to serializing to regular archives, this supports
+     *       serializing to archives requiring name-value pairs, e.g. XML
+     *       archives.  However, the output format in the XML archive is not
+     *       guaranteed to be the same as that when using the Boost.PropertyTree
+     *       library's @c pdalboost::property_tree::xml_parser::write_xml.
+     * @param ar The archive to which to save the serialized property tree.
+     *           This archive should conform to the concept laid out by the
+     *           Boost.Serialization library.
+     * @param t The property tree to serialize.
+     * @param file_version file_version for the archive.
+     * @post @c ar will contain the serialized form of @c t.
+     */
+    template<class Archive, class K, class D, class C>
+    inline void save(Archive &ar,
+                     const basic_ptree<K, D, C> &t,
+                     const unsigned int file_version)
+    {
+        using namespace pdalboost::serialization;
+        stl::save_collection<Archive, basic_ptree<K, D, C> >(ar, t);
+        ar << make_nvp("data", t.data());
+    }
+
+    namespace detail
+    {
+        template <class Archive, class K, class D, class C>
+        inline void load_children(Archive &ar,
+                                  basic_ptree<K, D, C> &t)
+        {
+            namespace bsl = pdalboost::serialization;
+            namespace bsa = pdalboost::archive;
+
+            typedef basic_ptree<K, D, C> tree;
+            typedef typename tree::value_type value_type;
+    
+            bsl::collection_size_type count;
+            ar >> BOOST_SERIALIZATION_NVP(count);
+            bsl::item_version_type item_version(0);
+            const bsa::library_version_type library_version(
+                ar.get_library_version()
+            );
+            if(bsa::library_version_type(3) < library_version){
+                ar >> BOOST_SERIALIZATION_NVP(item_version);
+            }
+            // Can't use the serialization helper, it expects resize() to exist
+            // for default-constructible elements.
+            // This is a copy/paste of the fallback version.
+            t.clear();
+            while(count-- > 0){
+                bsl::detail::stack_construct<Archive, value_type>
+                    u(ar, item_version);
+                ar >> bsl::make_nvp("item", u.reference());
+                t.push_back(u.reference());
+                ar.reset_object_address(& t.back() , & u.reference());
+            }
+        }
+    }
+
+    /**
+     * De-serialize the property tree to the given archive.
+     * @note In addition to de-serializing from regular archives, this supports
+     *       loading from archives requiring name-value pairs, e.g. XML
+     *       archives. The format should be that used by
+     *       pdalboost::property_tree::save.
+     * @param ar The archive from which to load the serialized property tree.
+     *           This archive should conform to the concept laid out by the
+     *           Boost.Serialization library.
+     * @param t The property tree to de-serialize.
+     * @param file_version file_version for the archive.
+     * @post @c t will contain the de-serialized data from @c ar.
+     */
+    template<class Archive, class K, class D, class C>
+    inline void load(Archive &ar,
+                     basic_ptree<K, D, C> &t,
+                     const unsigned int file_version)
+    {
+        namespace bsl = pdalboost::serialization;
+
+        detail::load_children(ar, t);
+        ar >> bsl::make_nvp("data", t.data());
+    }
+
+    /**
+     * Load or store the property tree using the given archive.
+     * @param ar The archive from which to load or save the serialized property
+     *           tree. The type of this archive will determine whether saving or
+     *           loading is performed.
+     * @param t The property tree to load or save.
+     * @param file_version file_version for the archive.
+     */
+    template<class Archive, class K, class D, class C>
+    inline void serialize(Archive &ar,
+                          basic_ptree<K, D, C> &t,
+                          const unsigned int file_version)
+    {
+        using namespace pdalboost::serialization;
+        split_free(ar, t, file_version);
+    }
+
+} }
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/stream_translator.hpp b/vendor/pdalboost/boost/property_tree/stream_translator.hpp
new file mode 100644
index 0000000..56f9b61
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/stream_translator.hpp
@@ -0,0 +1,229 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2009 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_PROPERTY_TREE_STREAM_TRANSLATOR_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_STREAM_TRANSLATOR_HPP_INCLUDED
+
+#include <boost/property_tree/ptree_fwd.hpp>
+
+#include <boost/optional.hpp>
+#include <boost/optional/optional_io.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/decay.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <sstream>
+#include <string>
+#include <locale>
+#include <limits>
+
+namespace pdalboost { namespace property_tree
+{
+
+    template <typename Ch, typename Traits, typename E, typename Enabler = void>
+    struct customize_stream
+    {
+        static void insert(std::basic_ostream<Ch, Traits>& s, const E& e) {
+            s << e;
+        }
+        static void extract(std::basic_istream<Ch, Traits>& s, E& e) {
+            s >> e;
+            if(!s.eof()) {
+                s >> std::ws;
+            }
+        }
+    };
+
+    // No whitespace skipping for single characters.
+    template <typename Ch, typename Traits>
+    struct customize_stream<Ch, Traits, Ch, void>
+    {
+        static void insert(std::basic_ostream<Ch, Traits>& s, Ch e) {
+            s << e;
+        }
+        static void extract(std::basic_istream<Ch, Traits>& s, Ch& e) {
+            s.unsetf(std::ios_base::skipws);
+            s >> e;
+        }
+    };
+
+    // Ugly workaround for numeric_traits that don't have members when not
+    // specialized, e.g. MSVC.
+    namespace detail
+    {
+        template <bool is_specialized>
+        struct is_inexact_impl
+        {
+            template <typename T>
+            struct test
+            {
+                typedef pdalboost::false_type type;
+            };
+        };
+        template <>
+        struct is_inexact_impl<true>
+        {
+            template <typename T>
+            struct test
+            {
+              typedef pdalboost::integral_constant<bool,
+                  !std::numeric_limits<T>::is_exact> type;
+            };
+        };
+
+        template <typename F>
+        struct is_inexact
+        {
+            typedef typename pdalboost::decay<F>::type decayed;
+            typedef typename is_inexact_impl<
+                std::numeric_limits<decayed>::is_specialized
+            >::BOOST_NESTED_TEMPLATE test<decayed>::type type;
+            static const bool value = type::value;
+        };
+    }
+
+    template <typename Ch, typename Traits, typename F>
+    struct customize_stream<Ch, Traits, F,
+        typename pdalboost::enable_if< detail::is_inexact<F> >::type
+    >
+    {
+        static void insert(std::basic_ostream<Ch, Traits>& s, const F& e) {
+#ifndef BOOST_NO_CXX11_NUMERIC_LIMITS 
+            s.precision(std::numeric_limits<F>::max_digits10); 
+#else 
+            s.precision(std::numeric_limits<F>::digits10 + 2); 
+#endif 
+            s << e;
+        }
+        static void extract(std::basic_istream<Ch, Traits>& s, F& e) {
+            s >> e;
+            if(!s.eof()) {
+                s >> std::ws;
+            }
+        }
+    };
+
+    template <typename Ch, typename Traits>
+    struct customize_stream<Ch, Traits, bool, void>
+    {
+        static void insert(std::basic_ostream<Ch, Traits>& s, bool e) {
+            s.setf(std::ios_base::boolalpha);
+            s << e;
+        }
+        static void extract(std::basic_istream<Ch, Traits>& s, bool& e) {
+            s >> e;
+            if(s.fail()) {
+                // Try again in word form.
+                s.clear();
+                s.setf(std::ios_base::boolalpha);
+                s >> e;
+            }
+            if(!s.eof()) {
+                s >> std::ws;
+            }
+        }
+    };
+
+    template <typename Ch, typename Traits>
+    struct customize_stream<Ch, Traits, signed char, void>
+    {
+        static void insert(std::basic_ostream<Ch, Traits>& s, signed char e) {
+            s << (int)e;
+        }
+        static void extract(std::basic_istream<Ch, Traits>& s, signed char& e) {
+            int i;
+            s >> i;
+            // out of range?
+            if(i > (std::numeric_limits<signed char>::max)() ||
+                i < (std::numeric_limits<signed char>::min)())
+            {
+                s.clear(); // guarantees eof to be unset
+                e = 0;
+                s.setstate(std::ios_base::badbit);
+                return;
+            }
+            e = (signed char)i;
+            if(!s.eof()) {
+                s >> std::ws;
+            }
+        }
+    };
+
+    template <typename Ch, typename Traits>
+    struct customize_stream<Ch, Traits, unsigned char, void>
+    {
+        static void insert(std::basic_ostream<Ch, Traits>& s, unsigned char e) {
+            s << (unsigned)e;
+        }
+        static void extract(std::basic_istream<Ch,Traits>& s, unsigned char& e){
+            unsigned i;
+            s >> i;
+            // out of range?
+            if(i > (std::numeric_limits<unsigned char>::max)()) {
+                s.clear(); // guarantees eof to be unset
+                e = 0;
+                s.setstate(std::ios_base::badbit);
+                return;
+            }
+            e = (unsigned char)i;
+            if(!s.eof()) {
+                s >> std::ws;
+            }
+        }
+    };
+
+    /// Implementation of Translator that uses the stream overloads.
+    template <typename Ch, typename Traits, typename Alloc, typename E>
+    class stream_translator
+    {
+        typedef customize_stream<Ch, Traits, E> customized;
+    public:
+        typedef std::basic_string<Ch, Traits, Alloc> internal_type;
+        typedef E external_type;
+
+        explicit stream_translator(std::locale loc = std::locale())
+            : m_loc(loc)
+        {}
+
+        pdalboost::optional<E> get_value(const internal_type &v) {
+            std::basic_istringstream<Ch, Traits, Alloc> iss(v);
+            iss.imbue(m_loc);
+            E e;
+            customized::extract(iss, e);
+            if(iss.fail() || iss.bad() || iss.get() != Traits::eof()) {
+                return pdalboost::optional<E>();
+            }
+            return e;
+        }
+        pdalboost::optional<internal_type> put_value(const E &v) {
+            std::basic_ostringstream<Ch, Traits, Alloc> oss;
+            oss.imbue(m_loc);
+            customized::insert(oss, v);
+            if(oss) {
+                return oss.str();
+            }
+            return pdalboost::optional<internal_type>();
+        }
+
+    private:
+        std::locale m_loc;
+    };
+
+    // This is the default translator when basic_string is the internal type.
+    // Unless the external type is also basic_string, in which case
+    // id_translator takes over.
+    template <typename Ch, typename Traits, typename Alloc, typename E>
+    struct translator_between<std::basic_string<Ch, Traits, Alloc>, E>
+    {
+        typedef stream_translator<Ch, Traits, Alloc, E> type;
+    };
+
+}}
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/string_path.hpp b/vendor/pdalboost/boost/property_tree/string_path.hpp
new file mode 100644
index 0000000..e95d737
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/string_path.hpp
@@ -0,0 +1,278 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2009 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+#ifndef BOOST_PROPERTY_TREE_STRING_PATH_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_STRING_PATH_HPP_INCLUDED
+
+#include <boost/property_tree/ptree_fwd.hpp>
+#include <boost/property_tree/id_translator.hpp>
+#include <boost/property_tree/exceptions.hpp>
+#include <boost/property_tree/detail/ptree_utils.hpp>
+
+#include <boost/static_assert.hpp>
+#include <boost/assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/optional.hpp>
+#include <boost/throw_exception.hpp>
+#include <algorithm>
+#include <string>
+#include <iterator>
+
+namespace pdalboost { namespace property_tree
+{
+    namespace detail
+    {
+        template <typename Sequence, typename Iterator>
+        void append_and_preserve_iter(Sequence &s, const Sequence &r,
+                                      Iterator &, std::forward_iterator_tag)
+        {
+            // Here we boldly assume that anything that is not random-access
+            // preserves validity. This is valid for the STL sequences.
+            s.insert(s.end(), r.begin(), r.end());
+        }
+        template <typename Sequence, typename Iterator>
+        void append_and_preserve_iter(Sequence &s, const Sequence &r,
+                                      Iterator &it,
+                                      std::random_access_iterator_tag)
+        {
+            // Convert the iterator to an index, and later back.
+            typename std::iterator_traits<Iterator>::difference_type idx =
+                it - s.begin();
+            s.insert(s.end(), r.begin(), r.end());
+            it = s.begin() + idx;
+        }
+
+        template <typename Sequence>
+        inline std::string dump_sequence(const Sequence &)
+        {
+            return "<undumpable sequence>";
+        }
+        inline std::string dump_sequence(const std::string &s)
+        {
+            return s;
+        }
+#ifndef BOOST_NO_STD_WSTRING
+        inline std::string dump_sequence(const std::wstring &s)
+        {
+            return narrow<std::string>(s.c_str());
+        }
+#endif
+    }
+
+    /// Default path class. A path is a sequence of values. Groups of values
+    /// are separated by the separator value, which defaults to '.' cast to
+    /// the sequence's value type. The group of values is then passed to the
+    /// translator to get a key.
+    ///
+    /// If instantiated with std::string and id_translator\<std::string\>,
+    /// it accepts paths of the form "one.two.three.four".
+    ///
+    /// @tparam String Any Sequence. If the sequence does not support random-
+    ///                access iteration, concatenation of paths assumes that
+    ///                insertions at the end preserve iterator validity.
+    /// @tparam Translator A translator with internal_type == String.
+    template <typename String, typename Translator>
+    class string_path
+    {
+        BOOST_STATIC_ASSERT((is_same<String,
+                                   typename Translator::internal_type>::value));
+    public:
+        typedef typename Translator::external_type key_type;
+        typedef typename String::value_type char_type;
+
+        /// Create an empty path.
+        explicit string_path(char_type separator = char_type('.'));
+        /// Create a path by parsing the given string.
+        /// @param value A sequence, possibly with separators, that describes
+        ///              the path, e.g. "one.two.three".
+        /// @param separator The separator used in parsing. Defaults to '.'.
+        /// @param tr The translator used by this path to convert the individual
+        ///           parts to keys.
+        string_path(const String &value, char_type separator = char_type('.'),
+                    Translator tr = Translator());
+        /// Create a path by parsing the given string.
+        /// @param value A zero-terminated array of values. Only use if zero-
+        ///              termination makes sense for your type, and your
+        ///              sequence supports construction from it. Intended for
+        ///              string literals.
+        /// @param separator The separator used in parsing. Defaults to '.'.
+        /// @param tr The translator used by this path to convert the individual
+        ///           parts to keys.
+        string_path(const char_type *value,
+                    char_type separator = char_type('.'),
+                    Translator tr = Translator());
+
+        // Default copying doesn't do the right thing with the iterator
+        string_path(const string_path &o);
+        string_path& operator =(const string_path &o);
+
+        /// Take a single element off the path at the front and return it.
+        key_type reduce();
+
+        /// Test if the path is empty.
+        bool empty() const;
+
+        /// Test if the path contains a single element, i.e. no separators.
+        bool single() const;
+
+        /// Get the separator used by this path.
+        char_type separator() const { return m_separator; }
+
+        std::string dump() const {
+            return detail::dump_sequence(m_value);
+        }
+
+        /// Append a second path to this one.
+        /// @pre o's separator is the same as this one's, or o has no separators
+        string_path& operator /=(const string_path &o) {
+            // If it's single, there's no separator. This allows to do
+            // p /= "piece";
+            // even for non-default separators.
+            BOOST_ASSERT((m_separator == o.m_separator
+                          || o.empty()
+                          || o.single())
+                         && "Incompatible paths.");
+            if(!o.empty()) {
+                String sub;
+                if(!this->empty()) {
+                    sub.push_back(m_separator);
+                }
+                sub.insert(sub.end(), o.cstart(), o.m_value.end());
+                detail::append_and_preserve_iter(m_value, sub, m_start,
+                    typename std::iterator_traits<s_iter>::iterator_category());
+            }
+            return *this;
+        }
+
+    private:
+        typedef typename String::iterator s_iter;
+        typedef typename String::const_iterator s_c_iter;
+        String m_value;
+        char_type m_separator;
+        Translator m_tr;
+        s_iter m_start;
+        s_c_iter cstart() const { return m_start; }
+    };
+
+    template <typename String, typename Translator> inline
+    string_path<String, Translator>::string_path(char_type separator)
+        : m_separator(separator), m_start(m_value.begin())
+    {}
+
+    template <typename String, typename Translator> inline
+    string_path<String, Translator>::string_path(const String &value,
+                                                 char_type separator,
+                                                 Translator tr)
+        : m_value(value), m_separator(separator),
+          m_tr(tr), m_start(m_value.begin())
+    {}
+
+    template <typename String, typename Translator> inline
+    string_path<String, Translator>::string_path(const char_type *value,
+                                                 char_type separator,
+                                                 Translator tr)
+        : m_value(value), m_separator(separator),
+          m_tr(tr), m_start(m_value.begin())
+    {}
+
+    template <typename String, typename Translator> inline
+    string_path<String, Translator>::string_path(const string_path &o)
+        : m_value(o.m_value), m_separator(o.m_separator),
+          m_tr(o.m_tr), m_start(m_value.begin())
+    {
+        std::advance(m_start, std::distance(o.m_value.begin(), o.cstart()));
+    }
+
+    template <typename String, typename Translator> inline
+    string_path<String, Translator>&
+    string_path<String, Translator>::operator =(const string_path &o)
+    {
+        m_value = o.m_value;
+        m_separator = o.m_separator;
+        m_tr = o.m_tr;
+        m_start = m_value.begin();
+        std::advance(m_start, std::distance(o.m_value.begin(), o.cstart()));
+        return *this;
+    }
+
+    template <typename String, typename Translator>
+    typename Translator::external_type string_path<String, Translator>::reduce()
+    {
+        BOOST_ASSERT(!empty() && "Reducing empty path");
+
+        s_iter next_sep = std::find(m_start, m_value.end(), m_separator);
+        String part(m_start, next_sep);
+        m_start = next_sep;
+        if(!empty()) {
+          // Unless we're at the end, skip the separator we found.
+          ++m_start;
+        }
+
+        if(optional<key_type> key = m_tr.get_value(part)) {
+            return *key;
+        }
+        BOOST_PROPERTY_TREE_THROW(ptree_bad_path("Path syntax error", *this));
+    }
+
+    template <typename String, typename Translator> inline
+    bool string_path<String, Translator>::empty() const
+    {
+        return m_start == m_value.end();
+    }
+
+    template <typename String, typename Translator> inline
+    bool string_path<String, Translator>::single() const
+    {
+        return std::find(static_cast<s_c_iter>(m_start),
+                         m_value.end(), m_separator)
+            == m_value.end();
+    }
+
+    // By default, this is the path for strings. You can override this by
+    // specializing path_of for a more specific form of std::basic_string.
+    template <typename Ch, typename Traits, typename Alloc>
+    struct path_of< std::basic_string<Ch, Traits, Alloc> >
+    {
+        typedef std::basic_string<Ch, Traits, Alloc> _string;
+        typedef string_path< _string, id_translator<_string> > type;
+    };
+
+    template <typename String, typename Translator> inline
+    string_path<String, Translator> operator /(
+                                  string_path<String, Translator> p1,
+                                  const string_path<String, Translator> &p2)
+    {
+        p1 /= p2;
+        return p1;
+    }
+
+    // These shouldn't be necessary, but GCC won't find the one above.
+    template <typename String, typename Translator> inline
+    string_path<String, Translator> operator /(
+                                  string_path<String, Translator> p1,
+                                  const typename String::value_type *p2)
+    {
+        p1 /= p2;
+        return p1;
+    }
+
+    template <typename String, typename Translator> inline
+    string_path<String, Translator> operator /(
+                                  const typename String::value_type *p1,
+                                  const string_path<String, Translator> &p2)
+    {
+        string_path<String, Translator> t(p1);
+        t /= p2;
+        return t;
+    }
+
+}}
+
+#endif
diff --git a/vendor/pdalboost/boost/property_tree/xml_parser.hpp b/vendor/pdalboost/boost/property_tree/xml_parser.hpp
new file mode 100644
index 0000000..501ac4c
--- /dev/null
+++ b/vendor/pdalboost/boost/property_tree/xml_parser.hpp
@@ -0,0 +1,152 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2009 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_XML_PARSER_HPP_INCLUDED
+#define BOOST_PROPERTY_TREE_XML_PARSER_HPP_INCLUDED
+
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/detail/xml_parser_write.hpp>
+#include <boost/property_tree/detail/xml_parser_error.hpp>
+#include <boost/property_tree/detail/xml_parser_writer_settings.hpp>
+#include <boost/property_tree/detail/xml_parser_flags.hpp>
+#include <boost/property_tree/detail/xml_parser_read_rapidxml.hpp>
+
+#include <fstream>
+#include <string>
+#include <locale>
+
+namespace pdalboost { namespace property_tree { namespace xml_parser
+{
+
+    /**
+     * Reads XML from an input stream and translates it to property tree.
+     * @note Clears existing contents of property tree.  In case of error the
+     *       property tree unmodified.
+     * @note XML attributes are placed under keys named @c \<xmlattr\>.
+     * @throw xml_parser_error In case of error deserializing the property tree.
+     * @param stream Stream from which to read in the property tree.
+     * @param[out] pt The property tree to populate.
+     * @param flags Flags controlling the behaviour of the parser.
+     *              The following flags are supported:
+     * @li @c no_concat_text -- Prevents concatenation of text nodes into
+     *                          datastring of property tree.  Puts them in
+     *                          separate @c \<xmltext\> strings instead.
+     * @li @c no_comments -- Skip XML comments.
+     * @li @c trim_whitespace -- Trim leading and trailing whitespace from text,
+     *                           and collapse sequences of whitespace.
+     */
+    template<class Ptree>
+    void read_xml(std::basic_istream<
+                      typename Ptree::key_type::value_type
+                  > &stream,
+                  Ptree &pt,
+                  int flags = 0)
+    {
+        read_xml_internal(stream, pt, flags, std::string());
+    }
+
+    /**
+     * Reads XML from a file using the given locale and translates it to
+     * property tree.
+     * @note Clears existing contents of property tree.  In case of error the
+     *       property tree unmodified.
+     * @note XML attributes are placed under keys named @c \<xmlattr\>.
+     * @throw xml_parser_error In case of error deserializing the property tree.
+     * @param filename The file from which to read in the property tree.
+     * @param[out] pt The property tree to populate.
+     * @param flags Flags controlling the bahviour of the parser.
+     *              The following flags are supported:
+     * @li @c no_concat_text -- Prevents concatenation of text nodes into
+     *                          datastring of property tree.  Puts them in
+     *                          separate @c \<xmltext\> strings instead.
+     * @li @c no_comments -- Skip XML comments.
+     * @param loc The locale to use when reading in the file contents.
+     */
+    template<class Ptree>
+    void read_xml(const std::string &filename,
+                  Ptree &pt,
+                  int flags = 0,
+                  const std::locale &loc = std::locale())
+    {
+        BOOST_ASSERT(validate_flags(flags));
+        std::basic_ifstream<typename Ptree::key_type::value_type>
+            stream(filename.c_str());
+        if (!stream)
+            BOOST_PROPERTY_TREE_THROW(xml_parser_error(
+                "cannot open file", filename, 0));
+        stream.imbue(loc);
+        read_xml_internal(stream, pt, flags, filename);
+    }
+
+    /**
+     * Translates the property tree to XML and writes it the given output
+     * stream.
+     * @throw xml_parser_error In case of error translating the property tree to
+     *                         XML or writing to the output stream.
+     * @param stream The stream to which to write the XML representation of the 
+     *               property tree.
+     * @param pt The property tree to tranlsate to XML and output.
+     * @param settings The settings to use when writing out the property tree as
+     *                 XML.
+     */
+    template<class Ptree>
+    void write_xml(std::basic_ostream<
+                       typename Ptree::key_type::value_type
+                   > &stream,
+                   const Ptree &pt,
+                   const xml_writer_settings<
+                       typename Ptree::key_type
+                   > & settings = xml_writer_settings<
+                                    typename Ptree::key_type>() )
+    {
+        write_xml_internal(stream, pt, std::string(), settings);
+    }
+
+    /**
+     * Translates the property tree to XML and writes it the given file.
+     * @throw xml_parser_error In case of error translating the property tree to
+     *                         XML or writing to the output stream.
+     * @param filename The file to which to write the XML representation of the 
+     *                 property tree.
+     * @param pt The property tree to tranlsate to XML and output.
+     * @param loc The locale to use when writing the output to file.
+     * @param settings The settings to use when writing out the property tree as
+     *                 XML.
+     */
+    template<class Ptree>
+    void write_xml(const std::string &filename,
+                   const Ptree &pt,
+                   const std::locale &loc = std::locale(),
+                   const xml_writer_settings<
+                       typename Ptree::key_type
+                   > & settings = xml_writer_settings<typename Ptree::key_type>())
+    {
+        std::basic_ofstream<typename Ptree::key_type::value_type>
+            stream(filename.c_str());
+        if (!stream)
+            BOOST_PROPERTY_TREE_THROW(xml_parser_error(
+                "cannot open file", filename, 0));
+        stream.imbue(loc);
+        write_xml_internal(stream, pt, filename, settings);
+    }
+
+} } }
+
+namespace pdalboost { namespace property_tree
+{
+    using xml_parser::read_xml;
+    using xml_parser::write_xml;
+    using xml_parser::xml_parser_error;
+
+    using xml_parser::xml_writer_settings;
+    using xml_parser::xml_writer_make_settings;
+} }
+
+#endif
diff --git a/vendor/pdalboost/boost/random/detail/config.hpp b/vendor/pdalboost/boost/random/detail/config.hpp
new file mode 100644
index 0000000..724ab19
--- /dev/null
+++ b/vendor/pdalboost/boost/random/detail/config.hpp
@@ -0,0 +1,18 @@
+/* boost random/detail/config.hpp header file
+ *
+ * Copyright Steven Watanabe 2009
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * $Id$
+ */
+
+#include <boost/config.hpp>
+
+#if (defined(BOOST_NO_OPERATORS_IN_NAMESPACE) || defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)) \
+    && !defined(BOOST_MSVC)
+    #define BOOST_RANDOM_NO_STREAM_OPERATORS
+#endif
diff --git a/vendor/pdalboost/boost/random/detail/const_mod.hpp b/vendor/pdalboost/boost/random/detail/const_mod.hpp
new file mode 100644
index 0000000..8f14449
--- /dev/null
+++ b/vendor/pdalboost/boost/random/detail/const_mod.hpp
@@ -0,0 +1,216 @@
+/* boost random/detail/const_mod.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * $Id$
+ *
+ * Revision history
+ *  2001-02-18  moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_CONST_MOD_HPP
+#define BOOST_RANDOM_CONST_MOD_HPP
+
+#include <boost/assert.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <boost/random/detail/large_arithmetic.hpp>
+
+#include <boost/random/detail/disable_warnings.hpp>
+
+namespace pdalboost {
+namespace random {
+
+template<class IntType, IntType m>
+class const_mod
+{
+public:
+  static IntType apply(IntType x)
+  {
+    if(((unsigned_m() - 1) & unsigned_m()) == 0)
+      return (unsigned_type(x)) & (unsigned_m() - 1);
+    else {
+      IntType suppress_warnings = (m == 0);
+      BOOST_ASSERT(suppress_warnings == 0);
+      return x % (m + suppress_warnings);
+    }
+  }
+
+  static IntType add(IntType x, IntType c)
+  {
+    if(((unsigned_m() - 1) & unsigned_m()) == 0)
+      return (unsigned_type(x) + unsigned_type(c)) & (unsigned_m() - 1);
+    else if(c == 0)
+      return x;
+    else if(x < m - c)
+      return x + c;
+    else
+      return x - (m - c);
+  }
+
+  static IntType mult(IntType a, IntType x)
+  {
+    if(((unsigned_m() - 1) & unsigned_m()) == 0)
+      return unsigned_type(a) * unsigned_type(x) & (unsigned_m() - 1);
+    else if(a == 0)
+      return 0;
+    else if(a == 1)
+      return x;
+    else if(m <= traits::const_max/a)      // i.e. a*m <= max
+      return mult_small(a, x);
+    else if(traits::is_signed && (m%a < m/a))
+      return mult_schrage(a, x);
+    else
+      return mult_general(a, x);
+  }
+
+  static IntType mult_add(IntType a, IntType x, IntType c)
+  {
+    if(((unsigned_m() - 1) & unsigned_m()) == 0)
+      return (unsigned_type(a) * unsigned_type(x) + unsigned_type(c)) & (unsigned_m() - 1);
+    else if(a == 0)
+      return c;
+    else if(m <= (traits::const_max-c)/a) {  // i.e. a*m+c <= max
+      IntType suppress_warnings = (m == 0);
+      BOOST_ASSERT(suppress_warnings == 0);
+      return (a*x+c) % (m + suppress_warnings);
+    } else
+      return add(mult(a, x), c);
+  }
+
+  static IntType pow(IntType a, pdalboost::uintmax_t exponent)
+  {
+      IntType result = 1;
+      while(exponent != 0) {
+          if(exponent % 2 == 1) {
+              result = mult(result, a);
+          }
+          a = mult(a, a);
+          exponent /= 2;
+      }
+      return result;
+  }
+
+  static IntType invert(IntType x)
+  { return x == 0 ? 0 : (m == 0? invert_euclidian0(x) : invert_euclidian(x)); }
+
+private:
+  typedef integer_traits<IntType> traits;
+  typedef typename make_unsigned<IntType>::type unsigned_type;
+
+  const_mod();      // don't instantiate
+
+  static IntType mult_small(IntType a, IntType x)
+  {
+    IntType suppress_warnings = (m == 0);
+    BOOST_ASSERT(suppress_warnings == 0);
+    return a*x % (m + suppress_warnings);
+  }
+
+  static IntType mult_schrage(IntType a, IntType value)
+  {
+    const IntType q = m / a;
+    const IntType r = m % a;
+
+    BOOST_ASSERT(r < q);        // check that overflow cannot happen
+
+    return sub(a*(value%q), r*(value/q));
+  }
+
+  static IntType mult_general(IntType a, IntType b)
+  {
+    IntType suppress_warnings = (m == 0);
+    BOOST_ASSERT(suppress_warnings == 0);
+    IntType modulus = m + suppress_warnings;
+    BOOST_ASSERT(modulus == m);
+    if(::pdalboost::uintmax_t(modulus) <=
+        (::std::numeric_limits< ::pdalboost::uintmax_t>::max)() / modulus)
+    {
+      return static_cast<IntType>(pdalboost::uintmax_t(a) * b % modulus);
+    } else {
+      return static_cast<IntType>(detail::mulmod(a, b, modulus));
+    }
+  }
+
+  static IntType sub(IntType a, IntType b)
+  {
+    if(a < b)
+      return m - (b - a);
+    else
+      return a - b;
+  }
+
+  static unsigned_type unsigned_m()
+  {
+      if(m == 0) {
+          return unsigned_type((std::numeric_limits<IntType>::max)()) + 1;
+      } else {
+          return unsigned_type(m);
+      }
+  }
+
+  // invert c in the finite field (mod m) (m must be prime)
+  static IntType invert_euclidian(IntType c)
+  {
+    // we are interested in the gcd factor for c, because this is our inverse
+    BOOST_ASSERT(c > 0);
+    IntType l1 = 0;
+    IntType l2 = 1;
+    IntType n = c;
+    IntType p = m;
+    for(;;) {
+      IntType q = p / n;
+      l1 += q * l2;
+      p -= q * n;
+      if(p == 0)
+        return l2;
+      IntType q2 = n / p;
+      l2 += q2 * l1;
+      n -= q2 * p;
+      if(n == 0)
+        return m - l1;
+    }
+  }
+
+  // invert c in the finite field (mod m) (c must be relatively prime to m)
+  static IntType invert_euclidian0(IntType c)
+  {
+    // we are interested in the gcd factor for c, because this is our inverse
+    BOOST_ASSERT(c > 0);
+    if(c == 1) return 1;
+    IntType l1 = 0;
+    IntType l2 = 1;
+    IntType n = c;
+    IntType p = m;
+    IntType max = (std::numeric_limits<IntType>::max)();
+    IntType q = max / n;
+    BOOST_ASSERT(max % n != n - 1 && "c must be relatively prime to m.");
+    l1 += q * l2;
+    p = max - q * n + 1;
+    for(;;) {
+      if(p == 0)
+        return l2;
+      IntType q2 = n / p;
+      l2 += q2 * l1;
+      n -= q2 * p;
+      if(n == 0)
+        return m - l1;
+      q = p / n;
+      l1 += q * l2;
+      p -= q * n;
+    }
+  }
+};
+
+} // namespace random
+} // namespace pdalboost
+
+#include <boost/random/detail/enable_warnings.hpp>
+
+#endif // BOOST_RANDOM_CONST_MOD_HPP
diff --git a/vendor/pdalboost/boost/random/detail/disable_warnings.hpp b/vendor/pdalboost/boost/random/detail/disable_warnings.hpp
new file mode 100644
index 0000000..4582dcb
--- /dev/null
+++ b/vendor/pdalboost/boost/random/detail/disable_warnings.hpp
@@ -0,0 +1,29 @@
+/* boost random/detail/disable_warnings.hpp header file
+ *
+ * Copyright Steven Watanabe 2009
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * $Id$
+ *
+ */
+
+// No #include guard.  This header is intended to be included multiple times.
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4512)
+#pragma warning(disable:4127)
+#pragma warning(disable:4724)
+#pragma warning(disable:4800) // 'int' : forcing value to bool 'true' or 'false' (performance warning)
+#endif
+
+#if defined(BOOST_GCC) && BOOST_GCC >= 40600
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wlogical-op"
+#endif
diff --git a/vendor/pdalboost/boost/random/detail/enable_warnings.hpp b/vendor/pdalboost/boost/random/detail/enable_warnings.hpp
new file mode 100644
index 0000000..24f3bb3
--- /dev/null
+++ b/vendor/pdalboost/boost/random/detail/enable_warnings.hpp
@@ -0,0 +1,22 @@
+/* boost random/detail/enable_warnings.hpp header file
+ *
+ * Copyright Steven Watanabe 2009
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * $Id$
+ *
+ */
+
+// No #include guard.  This header is intended to be included multiple times.
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#if defined(BOOST_GCC) && BOOST_GCC >= 40600
+#pragma GCC diagnostic pop
+#endif
diff --git a/vendor/pdalboost/boost/random/detail/generator_bits.hpp b/vendor/pdalboost/boost/random/detail/generator_bits.hpp
new file mode 100644
index 0000000..2ab01fa
--- /dev/null
+++ b/vendor/pdalboost/boost/random/detail/generator_bits.hpp
@@ -0,0 +1,36 @@
+/* boost random/detail/generator_bits.hpp header file
+ *
+ * Copyright Steven Watanabe 2011
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * $Id$
+ *
+ */
+
+#ifndef BOOST_RANDOM_DETAIL_GENERATOR_BITS_HPP
+#define BOOST_RANDOM_DETAIL_GENERATOR_BITS_HPP
+
+#include <boost/limits.hpp>
+
+namespace pdalboost {
+namespace random {
+namespace detail {
+
+// This is a temporary measure that retains backwards
+// compatibility.
+template<class URNG>
+struct generator_bits {
+    static std::size_t value() {
+        return std::numeric_limits<typename URNG::result_type>::digits;
+    }
+};
+
+} // namespace detail
+} // namespace random
+} // namespace pdalboost
+
+#endif // BOOST_RANDOM_DETAIL_GENERATOR_BITS_HPP
diff --git a/vendor/pdalboost/boost/random/detail/integer_log2.hpp b/vendor/pdalboost/boost/random/detail/integer_log2.hpp
new file mode 100644
index 0000000..fc1a82e
--- /dev/null
+++ b/vendor/pdalboost/boost/random/detail/integer_log2.hpp
@@ -0,0 +1,84 @@
+/* boost random/detail/integer_log2.hpp header file
+ *
+ * Copyright Steven Watanabe 2011
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * $Id$
+ *
+ */
+
+#ifndef BOOST_RANDOM_DETAIL_INTEGER_LOG2_HPP
+#define BOOST_RANDOM_DETAIL_INTEGER_LOG2_HPP
+
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/pending/integer_log2.hpp>
+
+namespace pdalboost {
+namespace random {
+namespace detail {
+
+#if !defined(BOOST_NO_CXX11_CONSTEXPR)
+#define BOOST_RANDOM_DETAIL_CONSTEXPR constexpr
+#elif defined(BOOST_MSVC)
+#define BOOST_RANDOM_DETAIL_CONSTEXPR __forceinline
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define BOOST_RANDOM_DETAIL_CONSTEXPR inline __attribute__((__const__)) __attribute__((__always_inline__))
+#else
+#define BOOST_RANDOM_DETAIL_CONSTEXPR inline
+#endif
+
+template<int Shift>
+struct integer_log2_impl
+{
+#if defined(BOOST_NO_CXX11_CONSTEXPR)
+    template<class T>
+    BOOST_RANDOM_DETAIL_CONSTEXPR static int apply(T t, int accum)
+    {
+        int update = ((t >> Shift) != 0) * Shift;
+        return integer_log2_impl<Shift / 2>::apply(t >> update, accum + update);
+    }
+#else
+    template<class T>
+    BOOST_RANDOM_DETAIL_CONSTEXPR static int apply2(T t, int accum, int update)
+    {
+        return integer_log2_impl<Shift / 2>::apply(t >> update, accum + update);
+    }
+
+    template<class T>
+    BOOST_RANDOM_DETAIL_CONSTEXPR static int apply(T t, int accum)
+    {
+        return apply2(t, accum, ((t >> Shift) != 0) * Shift);
+    }
+#endif
+};
+
+template<>
+struct integer_log2_impl<1>
+{
+    template<class T>
+    BOOST_RANDOM_DETAIL_CONSTEXPR static int apply(T t, int accum)
+    {
+        return int(t >> 1) + accum;
+    }
+};
+
+template<class T>
+BOOST_RANDOM_DETAIL_CONSTEXPR int integer_log2(T t)
+{
+    return integer_log2_impl<
+        ::pdalboost::detail::max_pow2_less<
+            ::std::numeric_limits<T>::digits, 4
+        >::value
+    >::apply(t, 0);
+}
+
+} // namespace detail
+} // namespace random
+} // namespace pdalboost
+
+#endif // BOOST_RANDOM_DETAIL_INTEGER_LOG2_HPP
diff --git a/vendor/pdalboost/boost/random/detail/large_arithmetic.hpp b/vendor/pdalboost/boost/random/detail/large_arithmetic.hpp
new file mode 100644
index 0000000..bbea03a
--- /dev/null
+++ b/vendor/pdalboost/boost/random/detail/large_arithmetic.hpp
@@ -0,0 +1,122 @@
+/* boost random/detail/large_arithmetic.hpp header file
+ *
+ * Copyright Steven Watanabe 2011
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * $Id$
+ */
+
+#ifndef BOOST_RANDOM_DETAIL_LARGE_ARITHMETIC_HPP
+#define BOOST_RANDOM_DETAIL_LARGE_ARITHMETIC_HPP
+
+#include <boost/cstdint.hpp>
+#include <boost/integer.hpp>
+#include <boost/limits.hpp>
+#include <boost/random/detail/integer_log2.hpp>
+
+#include <boost/random/detail/disable_warnings.hpp>
+
+namespace pdalboost {
+namespace random {
+namespace detail {
+
+struct div_t {
+    pdalboost::uintmax_t quotient;
+    pdalboost::uintmax_t remainder;
+};
+
+inline div_t muldivmod(pdalboost::uintmax_t a, pdalboost::uintmax_t b, pdalboost::uintmax_t m)
+{
+    const int bits =
+        ::std::numeric_limits< ::pdalboost::uintmax_t>::digits / 2;
+    const ::pdalboost::uintmax_t mask = (::pdalboost::uintmax_t(1) << bits) - 1;
+    typedef ::pdalboost::uint_t<bits>::fast digit_t;
+
+    int shift = std::numeric_limits< ::pdalboost::uintmax_t>::digits - 1
+        - detail::integer_log2(m);
+
+    a <<= shift;
+    m <<= shift;
+
+    digit_t product[4] = { 0, 0, 0, 0 };
+    digit_t a_[2] = { digit_t(a & mask), digit_t((a >> bits) & mask) };
+    digit_t b_[2] = { digit_t(b & mask), digit_t((b >> bits) & mask) };
+    digit_t m_[2] = { digit_t(m & mask), digit_t((m >> bits) & mask) };
+
+    // multiply a * b
+    for(int i = 0; i < 2; ++i) {
+        digit_t carry = 0;
+        for(int j = 0; j < 2; ++j) {
+            ::pdalboost::uint64_t temp = ::pdalboost::uintmax_t(a_[i]) * b_[j] +
+                carry + product[i + j];
+            product[i + j] = digit_t(temp & mask);
+            carry = digit_t(temp >> bits);
+        }
+        if(carry != 0) {
+            product[i + 2] += carry;
+        }
+    }
+
+    digit_t quotient[2];
+
+    if(m == 0) {
+        div_t result = {
+            ((::pdalboost::uintmax_t(product[3]) << bits) | product[2]),
+            ((::pdalboost::uintmax_t(product[1]) << bits) | product[0]) >> shift,
+        };
+        return result;
+    }
+
+    // divide product / m
+    for(int i = 3; i >= 2; --i) {
+        ::pdalboost::uintmax_t temp =
+            ::pdalboost::uintmax_t(product[i]) << bits | product[i - 1];
+
+        digit_t q = digit_t((product[i] == m_[1]) ? mask : temp / m_[1]);
+
+        ::pdalboost::uintmax_t rem =
+            ((temp - ::pdalboost::uintmax_t(q) * m_[1]) << bits) + product[i - 2];
+
+        ::pdalboost::uintmax_t diff = m_[0] * ::pdalboost::uintmax_t(q);
+
+        int error = 0;
+        if(diff > rem) {
+            if(diff - rem > m) {
+                error = 2;
+            } else {
+                error = 1;
+            }
+        }
+        q -= error;
+        rem = rem + error * m - diff;
+
+        quotient[i - 2] = q;
+        product[i] = 0;
+        product[i-1] = static_cast<digit_t>((rem >> bits) & mask);
+        product[i-2] = static_cast<digit_t>(rem & mask);
+    }
+
+    div_t result = {
+        ((::pdalboost::uintmax_t(quotient[1]) << bits) | quotient[0]),
+        ((::pdalboost::uintmax_t(product[1]) << bits) | product[0]) >> shift,
+    };
+    return result;
+}
+
+inline pdalboost::uintmax_t muldiv(pdalboost::uintmax_t a, pdalboost::uintmax_t b, pdalboost::uintmax_t m)
+{ return detail::muldivmod(a, b, m).quotient; }
+
+inline pdalboost::uintmax_t mulmod(pdalboost::uintmax_t a, pdalboost::uintmax_t b, pdalboost::uintmax_t m)
+{ return detail::muldivmod(a, b, m).remainder; }
+
+} // namespace detail
+} // namespace random
+} // namespace pdalboost
+
+#include <boost/random/detail/enable_warnings.hpp>
+
+#endif // BOOST_RANDOM_DETAIL_LARGE_ARITHMETIC_HPP
diff --git a/vendor/pdalboost/boost/random/detail/operators.hpp b/vendor/pdalboost/boost/random/detail/operators.hpp
new file mode 100644
index 0000000..597343c
--- /dev/null
+++ b/vendor/pdalboost/boost/random/detail/operators.hpp
@@ -0,0 +1,84 @@
+/* boost random/detail/operators.hpp header file
+ *
+ * Copyright Steven Watanabe 2010-2011
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * $Id$
+ */
+
+#ifndef BOOST_RANDOM_DETAIL_OPERATORS_HPP
+#define BOOST_RANDOM_DETAIL_OPERATORS_HPP
+
+#include <boost/random/detail/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1310)   \
+    || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x5100))
+
+#define BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, T, t)                  \
+    template<class CharT, class Traits>                                 \
+    friend std::basic_ostream<CharT,Traits>&                            \
+    operator<<(std::basic_ostream<CharT,Traits>& os, const T& t) {      \
+        t.print(os, t);                                                 \
+        return os;                                                      \
+    }                                                                   \
+    template<class CharT, class Traits>                                 \
+    static std::basic_ostream<CharT,Traits>&                            \
+    print(std::basic_ostream<CharT,Traits>& os, const T& t)
+
+#define BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, T, t)                  \
+    template<class CharT, class Traits>                                 \
+    friend std::basic_istream<CharT,Traits>&                            \
+    operator>>(std::basic_istream<CharT,Traits>& is, T& t) {            \
+        t.read(is, t);                                                  \
+        return is;                                                      \
+    }                                                                   \
+    template<class CharT, class Traits>                                 \
+    static std::basic_istream<CharT,Traits>&                            \
+    read(std::basic_istream<CharT,Traits>& is, T& t)
+
+#endif
+
+#if defined(__BORLANDC__)
+
+#define BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(T, lhs, rhs)              \
+    bool operator==(const T& rhs) const                                 \
+    { return T::is_equal(*this, rhs); }                                 \
+    static bool is_equal(const T& lhs, const T& rhs)
+
+#define BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(T)                      \
+    bool operator!=(const T& rhs) const                                 \
+    { return !T::is_equal(*this, rhs); }
+
+#endif
+
+#ifndef BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR
+#define BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, T, t)                  \
+    template<class CharT, class Traits>                                 \
+    friend std::basic_ostream<CharT,Traits>&                            \
+    operator<<(std::basic_ostream<CharT,Traits>& os, const T& t)
+#endif
+
+#ifndef BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR
+#define BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, T, t)                  \
+    template<class CharT, class Traits>                                 \
+    friend std::basic_istream<CharT,Traits>&                            \
+    operator>>(std::basic_istream<CharT,Traits>& is, T& t)
+#endif
+
+#ifndef BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR
+#define BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(T, lhs, rhs)              \
+    friend bool operator==(const T& lhs, const T& rhs)
+#endif
+
+#ifndef BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR
+#define BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(T)                      \
+    friend bool operator!=(const T& lhs, const T& rhs)                  \
+    { return !(lhs == rhs); }
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/random/detail/ptr_helper.hpp b/vendor/pdalboost/boost/random/detail/ptr_helper.hpp
new file mode 100644
index 0000000..3727751
--- /dev/null
+++ b/vendor/pdalboost/boost/random/detail/ptr_helper.hpp
@@ -0,0 +1,67 @@
+/* boost random/detail/ptr_helper.hpp header file
+ *
+ * Copyright Jens Maurer 2002
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * $Id$
+ *
+ */
+
+#ifndef BOOST_RANDOM_DETAIL_PTR_HELPER_HPP
+#define BOOST_RANDOM_DETAIL_PTR_HELPER_HPP
+
+#include <boost/config.hpp>
+
+
+namespace pdalboost {
+namespace random {
+namespace detail {
+
+// type_traits could help here, but I don't want to depend on type_traits.
+template<class T>
+struct ptr_helper
+{
+  typedef T value_type;
+  typedef T& reference_type;
+  typedef const T& rvalue_type;
+  static reference_type ref(T& r) { return r; }
+  static const T& ref(const T& r) { return r; }
+};
+
+template<class T>
+struct ptr_helper<T&>
+{
+  typedef T value_type;
+  typedef T& reference_type;
+  typedef T& rvalue_type;
+  static reference_type ref(T& r) { return r; }
+  static const T& ref(const T& r) { return r; }
+};
+
+template<class T>
+struct ptr_helper<T*>
+{
+  typedef T value_type;
+  typedef T& reference_type;
+  typedef T* rvalue_type;
+  static reference_type ref(T * p) { return *p; }
+  static const T& ref(const T * p) { return *p; }
+};
+
+} // namespace detail
+} // namespace random
+} // namespace pdalboost
+
+//
+// BOOST_RANDOM_PTR_HELPER_SPEC --
+//
+//  Helper macro for broken compilers defines specializations of
+//  ptr_helper.
+//
+# define BOOST_RANDOM_PTR_HELPER_SPEC(T)
+
+#endif // BOOST_RANDOM_DETAIL_PTR_HELPER_HPP
diff --git a/vendor/pdalboost/boost/random/detail/seed.hpp b/vendor/pdalboost/boost/random/detail/seed.hpp
new file mode 100644
index 0000000..8b6595e
--- /dev/null
+++ b/vendor/pdalboost/boost/random/detail/seed.hpp
@@ -0,0 +1,115 @@
+/* boost random/detail/seed.hpp header file
+ *
+ * Copyright Steven Watanabe 2009
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * $Id$
+ */
+
+#ifndef BOOST_RANDOM_DETAIL_SEED_HPP
+#define BOOST_RANDOM_DETAIL_SEED_HPP
+
+#include <boost/config.hpp>
+
+// Sun seems to have trouble with the use of SFINAE for the
+// templated constructor.  So does Borland.
+#if !defined(BOOST_NO_SFINAE) && !defined(__SUNPRO_CC) && !defined(__BORLANDC__)
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace pdalboost {
+namespace random {
+namespace detail {
+
+template<class T>
+struct disable_seed : pdalboost::disable_if<pdalboost::is_arithmetic<T> > {};
+
+template<class Engine, class T>
+struct disable_constructor : disable_seed<T> {};
+
+template<class Engine>
+struct disable_constructor<Engine, Engine> {};
+
+#define BOOST_RANDOM_DETAIL_GENERATOR_CONSTRUCTOR(Self, Generator, gen) \
+    template<class Generator>                                           \
+    explicit Self(Generator& gen, typename ::pdalboost::random::detail::disable_constructor<Self, Generator>::type* = 0)
+
+#define BOOST_RANDOM_DETAIL_GENERATOR_SEED(Self, Generator, gen)    \
+    template<class Generator>                                       \
+    void seed(Generator& gen, typename ::pdalboost::random::detail::disable_seed<Generator>::type* = 0)
+
+#define BOOST_RANDOM_DETAIL_SEED_SEQ_CONSTRUCTOR(Self, SeedSeq, seq)    \
+    template<class SeedSeq>                                             \
+    explicit Self(SeedSeq& seq, typename ::pdalboost::random::detail::disable_constructor<Self, SeedSeq>::type* = 0)
+
+#define BOOST_RANDOM_DETAIL_SEED_SEQ_SEED(Self, SeedSeq, seq)   \
+    template<class SeedSeq>                                     \
+    void seed(SeedSeq& seq, typename ::pdalboost::random::detail::disable_seed<SeedSeq>::type* = 0)
+
+#define BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(Self, T, x)  \
+    explicit Self(const T& x)
+
+#define BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(Self, T, x) \
+    void seed(const T& x)
+}
+}
+}
+
+#else
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/mpl/bool.hpp>
+
+#define BOOST_RANDOM_DETAIL_GENERATOR_CONSTRUCTOR(Self, Generator, gen) \
+    Self(Self& other) { *this = other; }                                \
+    Self(const Self& other) { *this = other; }                          \
+    template<class Generator>                                           \
+    explicit Self(Generator& gen) {                                     \
+        boost_random_constructor_impl(gen, ::pdalboost::is_arithmetic<Generator>());\
+    }                                                                   \
+    template<class Generator>                                           \
+    void boost_random_constructor_impl(Generator& gen, ::pdalboost::mpl::false_)
+
+#define BOOST_RANDOM_DETAIL_GENERATOR_SEED(Self, Generator, gen)    \
+    template<class Generator>                                       \
+    void seed(Generator& gen) {                                     \
+        boost_random_seed_impl(gen, ::pdalboost::is_arithmetic<Generator>());\
+    }\
+    template<class Generator>\
+    void boost_random_seed_impl(Generator& gen, ::pdalboost::mpl::false_)
+
+#define BOOST_RANDOM_DETAIL_SEED_SEQ_CONSTRUCTOR(Self, SeedSeq, seq)    \
+    Self(Self& other) { *this = other; }                                \
+    Self(const Self& other) { *this = other; }                          \
+    template<class SeedSeq>                                             \
+    explicit Self(SeedSeq& seq) {                                       \
+        boost_random_constructor_impl(seq, ::pdalboost::is_arithmetic<SeedSeq>());\
+    }                                                                   \
+    template<class SeedSeq>                                             \
+    void boost_random_constructor_impl(SeedSeq& seq, ::pdalboost::mpl::false_)
+
+#define BOOST_RANDOM_DETAIL_SEED_SEQ_SEED(Self, SeedSeq, seq)           \
+    template<class SeedSeq>                                             \
+    void seed(SeedSeq& seq) {                                           \
+        boost_random_seed_impl(seq, ::pdalboost::is_arithmetic<SeedSeq>()); \
+    }                                                                   \
+    template<class SeedSeq>                                             \
+    void boost_random_seed_impl(SeedSeq& seq, ::pdalboost::mpl::false_)
+
+#define BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(Self, T, x)  \
+    explicit Self(const T& x) { boost_random_constructor_impl(x, ::pdalboost::mpl::true_()); }\
+    void boost_random_constructor_impl(const T& x, ::pdalboost::mpl::true_)
+
+#define BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(Self, T, x) \
+    void seed(const T& x) { boost_random_seed_impl(x, ::pdalboost::mpl::true_()); }\
+    void boost_random_seed_impl(const T& x, ::pdalboost::mpl::true_)
+
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/random/detail/seed_impl.hpp b/vendor/pdalboost/boost/random/detail/seed_impl.hpp
new file mode 100644
index 0000000..ceb74e3
--- /dev/null
+++ b/vendor/pdalboost/boost/random/detail/seed_impl.hpp
@@ -0,0 +1,398 @@
+/* boost random/detail/seed.hpp header file
+ *
+ * Copyright Steven Watanabe 2009
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * $Id$
+ */
+
+#ifndef BOOST_RANDOM_DETAIL_SEED_IMPL_HPP
+#define BOOST_RANDOM_DETAIL_SEED_IMPL_HPP
+
+#include <stdexcept>
+#include <boost/cstdint.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/config/no_tr1/cmath.hpp>
+#include <boost/integer/integer_mask.hpp>
+#include <boost/integer/static_log2.hpp>
+#include <boost/random/traits.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/random/detail/const_mod.hpp>
+#include <boost/random/detail/integer_log2.hpp>
+#include <boost/random/detail/signed_unsigned_tools.hpp>
+#include <boost/random/detail/generator_bits.hpp>
+
+#include <boost/random/detail/disable_warnings.hpp>
+
+namespace pdalboost {
+namespace random {
+namespace detail {
+
+// finds the seed type of an engine, given its
+// result_type.  If the result_type is integral
+// the seed type is the same.  If the result_type
+// is floating point, the seed type is uint32_t
+template<class T>
+struct seed_type
+{
+    typedef typename pdalboost::mpl::if_<pdalboost::is_integral<T>,
+        T,
+        pdalboost::uint32_t
+    >::type type;
+};
+
+template<int N>
+struct const_pow_impl
+{
+    template<class T>
+    static T call(T arg, int n, T result)
+    {
+        return const_pow_impl<N / 2>::call(T(arg * arg), n / 2,
+            n%2 == 0? result : T(result * arg));
+    }
+};
+
+template<>
+struct const_pow_impl<0>
+{
+    template<class T>
+    static T call(T, int, T result)
+    {
+        return result;
+    }
+};
+
+// requires N is an upper bound on n
+template<int N, class T>
+inline T const_pow(T arg, int n) { return const_pow_impl<N>::call(arg, n, T(1)); }
+
+template<class T>
+inline T pow2(int n)
+{
+    typedef unsigned int_type;
+    const int max_bits = std::numeric_limits<int_type>::digits;
+    T multiplier = T(int_type(1) << (max_bits - 1)) * 2;
+    return (int_type(1) << (n % max_bits)) *
+        const_pow<std::numeric_limits<T>::digits / max_bits>(multiplier, n / max_bits);
+}
+
+template<class Engine, class Iter>
+void generate_from_real(Engine& eng, Iter begin, Iter end)
+{
+    using std::fmod;
+    typedef typename Engine::result_type RealType;
+    const int Bits = detail::generator_bits<Engine>::value();
+    int remaining_bits = 0;
+    pdalboost::uint_least32_t saved_bits = 0;
+    RealType multiplier = pow2<RealType>( Bits);
+    RealType mult32 = RealType(4294967296.0); // 2^32
+    while(true) {
+        RealType val = eng() * multiplier;
+        int available_bits = Bits;
+        // Make sure the compiler can optimize this out
+        // if it isn't possible.
+        if(Bits < 32 && available_bits < 32 - remaining_bits) {
+            saved_bits |= pdalboost::uint_least32_t(val) << remaining_bits;
+            remaining_bits += Bits;
+        } else {
+            // If Bits < 32, then remaining_bits != 0, since
+            // if remaining_bits == 0, available_bits < 32 - 0,
+            // and we won't get here to begin with.
+            if(Bits < 32 || remaining_bits != 0) {
+                pdalboost::uint_least32_t divisor =
+                    (pdalboost::uint_least32_t(1) << (32 - remaining_bits));
+                pdalboost::uint_least32_t extra_bits = pdalboost::uint_least32_t(fmod(val, mult32)) & (divisor - 1);
+                val = val / divisor;
+                *begin++ = saved_bits | (extra_bits << remaining_bits);
+                if(begin == end) return;
+                available_bits -= 32 - remaining_bits;
+                remaining_bits = 0;
+            }
+            // If Bits < 32 we should never enter this loop
+            if(Bits >= 32) {
+                for(; available_bits >= 32; available_bits -= 32) {
+                    pdalboost::uint_least32_t word = pdalboost::uint_least32_t(fmod(val, mult32));
+                    val /= mult32;
+                    *begin++ = word;
+                    if(begin == end) return;
+                }
+            }
+            remaining_bits = available_bits;
+            saved_bits = static_cast<pdalboost::uint_least32_t>(val);
+        }
+    }
+}
+
+template<class Engine, class Iter>
+void generate_from_int(Engine& eng, Iter begin, Iter end)
+{
+    typedef typename Engine::result_type IntType;
+    typedef typename pdalboost::random::traits::make_unsigned<IntType>::type unsigned_type;
+    int remaining_bits = 0;
+    pdalboost::uint_least32_t saved_bits = 0;
+    unsigned_type range = pdalboost::random::detail::subtract<IntType>()((eng.max)(), (eng.min)());
+
+    int bits =
+        (range == (std::numeric_limits<unsigned_type>::max)()) ?
+            std::numeric_limits<unsigned_type>::digits :
+            detail::integer_log2(range + 1);
+
+    {
+        int discarded_bits = detail::integer_log2(bits);
+        unsigned_type excess = (range + 1) >> (bits - discarded_bits);
+        if(excess != 0) {
+            int extra_bits = detail::integer_log2((excess - 1) ^ excess);
+            bits = bits - discarded_bits + extra_bits;
+        }
+    }
+
+    unsigned_type mask = (static_cast<unsigned_type>(2) << (bits - 1)) - 1;
+    unsigned_type limit = ((range + 1) & ~mask) - 1;
+
+    while(true) {
+        unsigned_type val;
+        do {
+            val = pdalboost::random::detail::subtract<IntType>()(eng(), (eng.min)());
+        } while(limit != range && val > limit);
+        val &= mask;
+        int available_bits = bits;
+        if(available_bits == 32) {
+            *begin++ = static_cast<pdalboost::uint_least32_t>(val) & 0xFFFFFFFFu;
+            if(begin == end) return;
+        } else if(available_bits % 32 == 0) {
+            for(int i = 0; i < available_bits / 32; ++i) {
+                pdalboost::uint_least32_t word = pdalboost::uint_least32_t(val) & 0xFFFFFFFFu;
+                int suppress_warning = (bits >= 32);
+                BOOST_ASSERT(suppress_warning == 1);
+                val >>= (32 * suppress_warning);
+                *begin++ = word;
+                if(begin == end) return;
+            }
+        } else if(bits < 32 && available_bits < 32 - remaining_bits) {
+            saved_bits |= pdalboost::uint_least32_t(val) << remaining_bits;
+            remaining_bits += bits;
+        } else {
+            if(bits < 32 || remaining_bits != 0) {
+                pdalboost::uint_least32_t extra_bits = pdalboost::uint_least32_t(val) & ((pdalboost::uint_least32_t(1) << (32 - remaining_bits)) - 1);
+                val >>= 32 - remaining_bits;
+                *begin++ = saved_bits | (extra_bits << remaining_bits);
+                if(begin == end) return;
+                available_bits -= 32 - remaining_bits;
+                remaining_bits = 0;
+            }
+            if(bits >= 32) {
+                for(; available_bits >= 32; available_bits -= 32) {
+                    pdalboost::uint_least32_t word = pdalboost::uint_least32_t(val) & 0xFFFFFFFFu;
+                    int suppress_warning = (bits >= 32);
+                    BOOST_ASSERT(suppress_warning == 1);
+                    val >>= (32 * suppress_warning);
+                    *begin++ = word;
+                    if(begin == end) return;
+                }
+            }
+            remaining_bits = available_bits;
+            saved_bits = static_cast<pdalboost::uint_least32_t>(val);
+        }
+    }
+}
+
+template<class Engine, class Iter>
+void generate_impl(Engine& eng, Iter first, Iter last, pdalboost::mpl::true_)
+{
+    return detail::generate_from_int(eng, first, last);
+}
+
+template<class Engine, class Iter>
+void generate_impl(Engine& eng, Iter first, Iter last, pdalboost::mpl::false_)
+{
+    return detail::generate_from_real(eng, first, last);
+}
+
+template<class Engine, class Iter>
+void generate(Engine& eng, Iter first, Iter last)
+{
+    return detail::generate_impl(eng, first, last, pdalboost::random::traits::is_integral<typename Engine::result_type>());
+}
+
+
+
+template<class IntType, IntType m, class SeedSeq>
+IntType seed_one_int(SeedSeq& seq)
+{
+    static const int log = ::pdalboost::mpl::if_c<(m == 0),
+        ::pdalboost::mpl::int_<(::std::numeric_limits<IntType>::digits)>,
+        ::pdalboost::static_log2<m> >::type::value;
+    static const int k =
+        (log + ((~(static_cast<IntType>(2) << (log - 1)) & m)? 32 : 31)) / 32;
+    ::pdalboost::uint_least32_t array[log / 32 + 4];
+    seq.generate(&array[0], &array[0] + k + 3);
+    IntType s = 0;
+    for(int j = 0; j < k; ++j) {
+        IntType digit = const_mod<IntType, m>::apply(IntType(array[j+3]));
+        IntType mult = IntType(1) << 32*j;
+        s = const_mod<IntType, m>::mult_add(mult, digit, s);
+    }
+    return s;
+}
+
+template<class IntType, IntType m, class Iter>
+IntType get_one_int(Iter& first, Iter last)
+{
+    static const int log = ::pdalboost::mpl::if_c<(m == 0),
+        ::pdalboost::mpl::int_<(::std::numeric_limits<IntType>::digits)>,
+        ::pdalboost::static_log2<m> >::type::value;
+    static const int k =
+        (log + ((~(static_cast<IntType>(2) << (log - 1)) & m)? 32 : 31)) / 32;
+    IntType s = 0;
+    for(int j = 0; j < k; ++j) {
+        if(first == last) {
+            pdalboost::throw_exception(::std::invalid_argument("Not enough elements in call to seed."));
+        }
+        IntType digit = const_mod<IntType, m>::apply(IntType(*first++));
+        IntType mult = IntType(1) << 32*j;
+        s = const_mod<IntType, m>::mult_add(mult, digit, s);
+    }
+    return s;
+}
+
+// TODO: work in-place whenever possible
+template<int w, std::size_t n, class SeedSeq, class UIntType>
+void seed_array_int_impl(SeedSeq& seq, UIntType (&x)[n])
+{
+    pdalboost::uint_least32_t storage[((w+31)/32) * n];
+    seq.generate(&storage[0], &storage[0] + ((w+31)/32) * n);
+    for(std::size_t j = 0; j < n; j++) {
+        UIntType val = 0;
+        for(std::size_t k = 0; k < (w+31)/32; ++k) {
+            val += static_cast<UIntType>(storage[(w+31)/32*j + k]) << 32*k;
+        }
+        x[j] = val & ::pdalboost::low_bits_mask_t<w>::sig_bits;
+    }
+}
+
+template<int w, std::size_t n, class SeedSeq, class IntType>
+inline void seed_array_int_impl(SeedSeq& seq, IntType (&x)[n], pdalboost::mpl::true_)
+{
+    BOOST_STATIC_ASSERT_MSG(pdalboost::is_integral<IntType>::value, "Sorry but this routine has not been ported to non built-in integers as it relies on a reinterpret_cast.");
+    typedef typename pdalboost::make_unsigned<IntType>::type unsigned_array[n];
+    seed_array_int_impl<w>(seq, reinterpret_cast<unsigned_array&>(x));
+}
+
+template<int w, std::size_t n, class SeedSeq, class IntType>
+inline void seed_array_int_impl(SeedSeq& seq, IntType (&x)[n], pdalboost::mpl::false_)
+{
+    seed_array_int_impl<w>(seq, x);
+}
+
+template<int w, std::size_t n, class SeedSeq, class IntType>
+inline void seed_array_int(SeedSeq& seq, IntType (&x)[n])
+{
+    seed_array_int_impl<w>(seq, x, pdalboost::random::traits::is_signed<IntType>());
+}
+
+template<int w, std::size_t n, class Iter, class UIntType>
+void fill_array_int_impl(Iter& first, Iter last, UIntType (&x)[n])
+{
+    for(std::size_t j = 0; j < n; j++) {
+        UIntType val = 0;
+        for(std::size_t k = 0; k < (w+31)/32; ++k) {
+            if(first == last) {
+                pdalboost::throw_exception(std::invalid_argument("Not enough elements in call to seed."));
+            }
+            val += static_cast<UIntType>(*first++) << 32*k;
+        }
+        x[j] = val & ::pdalboost::low_bits_mask_t<w>::sig_bits;
+    }
+}
+
+template<int w, std::size_t n, class Iter, class IntType>
+inline void fill_array_int_impl(Iter& first, Iter last, IntType (&x)[n], pdalboost::mpl::true_)
+{
+    BOOST_STATIC_ASSERT_MSG(pdalboost::is_integral<IntType>::value, "Sorry but this routine has not been ported to non built-in integers as it relies on a reinterpret_cast.");
+    typedef typename pdalboost::make_unsigned<IntType>::type unsigned_array[n];
+    fill_array_int_impl<w>(first, last, reinterpret_cast<unsigned_array&>(x));
+}
+
+template<int w, std::size_t n, class Iter, class IntType>
+inline void fill_array_int_impl(Iter& first, Iter last, IntType (&x)[n], pdalboost::mpl::false_)
+{
+    fill_array_int_impl<w>(first, last, x);
+}
+
+template<int w, std::size_t n, class Iter, class IntType>
+inline void fill_array_int(Iter& first, Iter last, IntType (&x)[n])
+{
+    fill_array_int_impl<w>(first, last, x, pdalboost::random::traits::is_signed<IntType>());
+}
+
+template<int w, std::size_t n, class RealType>
+void seed_array_real_impl(const pdalboost::uint_least32_t* storage, RealType (&x)[n])
+{
+    pdalboost::uint_least32_t mask = ~((~pdalboost::uint_least32_t(0)) << (w%32));
+    RealType two32 = 4294967296.0;
+    const RealType divisor = RealType(1)/detail::pow2<RealType>(w);
+    unsigned int j;
+    for(j = 0; j < n; ++j) {
+        RealType val = RealType(0);
+        RealType mult = divisor;
+        for(int k = 0; k < w/32; ++k) {
+            val += *storage++ * mult;
+            mult *= two32;
+        }
+        if(mask != 0) {
+            val += (*storage++ & mask) * mult;
+        }
+        BOOST_ASSERT(val >= 0);
+        BOOST_ASSERT(val < 1);
+        x[j] = val;
+    }
+}
+
+template<int w, std::size_t n, class SeedSeq, class RealType>
+void seed_array_real(SeedSeq& seq, RealType (&x)[n])
+{
+    using std::pow;
+    pdalboost::uint_least32_t storage[((w+31)/32) * n];
+    seq.generate(&storage[0], &storage[0] + ((w+31)/32) * n);
+    seed_array_real_impl<w>(storage, x);
+}
+
+template<int w, std::size_t n, class Iter, class RealType>
+void fill_array_real(Iter& first, Iter last, RealType (&x)[n])
+{
+    pdalboost::uint_least32_t mask = ~((~pdalboost::uint_least32_t(0)) << (w%32));
+    RealType two32 = 4294967296.0;
+    const RealType divisor = RealType(1)/detail::pow2<RealType>(w);
+    unsigned int j;
+    for(j = 0; j < n; ++j) {
+        RealType val = RealType(0);
+        RealType mult = divisor;
+        for(int k = 0; k < w/32; ++k, ++first) {
+            if(first == last) pdalboost::throw_exception(std::invalid_argument("Not enough elements in call to seed."));
+            val += *first * mult;
+            mult *= two32;
+        }
+        if(mask != 0) {
+            if(first == last) pdalboost::throw_exception(std::invalid_argument("Not enough elements in call to seed."));
+            val += (*first & mask) * mult;
+            ++first;
+        }
+        BOOST_ASSERT(val >= 0);
+        BOOST_ASSERT(val < 1);
+        x[j] = val;
+    }
+}
+
+}
+}
+}
+
+#include <boost/random/detail/enable_warnings.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/random/detail/signed_unsigned_tools.hpp b/vendor/pdalboost/boost/random/detail/signed_unsigned_tools.hpp
new file mode 100644
index 0000000..f2f983d
--- /dev/null
+++ b/vendor/pdalboost/boost/random/detail/signed_unsigned_tools.hpp
@@ -0,0 +1,89 @@
+/* boost random/detail/signed_unsigned_tools.hpp header file
+ *
+ * Copyright Jens Maurer 2006
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ */
+
+#ifndef BOOST_RANDOM_DETAIL_SIGNED_UNSIGNED_TOOLS
+#define BOOST_RANDOM_DETAIL_SIGNED_UNSIGNED_TOOLS
+
+#include <boost/limits.hpp>
+#include <boost/config.hpp>
+#include <boost/random/traits.hpp>
+
+namespace pdalboost {
+namespace random {
+namespace detail {
+
+
+/*
+ * Compute x - y, we know that x >= y, return an unsigned value.
+ */
+
+template<class T, bool sgn = std::numeric_limits<T>::is_signed && std::numeric_limits<T>::is_bounded>
+struct subtract { };
+
+template<class T>
+struct subtract<T, /* signed */ false>
+{
+  typedef T result_type;
+  result_type operator()(T x, T y) { return x - y; }
+};
+
+template<class T>
+struct subtract<T, /* signed */ true>
+{
+  typedef typename pdalboost::random::traits::make_unsigned_or_unbounded<T>::type result_type;
+  result_type operator()(T x, T y)
+  {
+    if (y >= 0)   // because x >= y, it follows that x >= 0, too
+      return result_type(x) - result_type(y);
+    if (x >= 0)   // y < 0
+      // avoid the nasty two's complement case for y == min()
+      return result_type(x) + result_type(-(y+1)) + 1;
+    // both x and y are negative: no signed overflow
+    return result_type(x - y);
+  }
+};
+
+/*
+ * Compute x + y, x is unsigned, result fits in type of "y".
+ */
+
+template<class T1, class T2, bool sgn = (std::numeric_limits<T2>::is_signed && (std::numeric_limits<T1>::digits >= std::numeric_limits<T2>::digits))>
+struct add { };
+
+template<class T1, class T2>
+struct add<T1, T2, /* signed or else T2 has more digits than T1 so the cast always works - needed when T2 is a multiprecision type and T1 is a native integer */ false>
+{
+  typedef T2 result_type;
+  result_type operator()(T1 x, T2 y) { return T2(x) + y; }
+};
+
+template<class T1, class T2>
+struct add<T1, T2, /* signed */ true>
+{
+  typedef T2 result_type;
+  result_type operator()(T1 x, T2 y)
+  {
+    if (y >= 0)
+      return T2(x) + y;
+    // y < 0
+    if (x > T1(-(y+1)))  // result >= 0 after subtraction
+      // avoid the nasty two's complement edge case for y == min()
+      return T2(x - T1(-(y+1)) - 1);
+    // abs(x) < abs(y), thus T2 able to represent x
+    return T2(x) + y;
+  }
+};
+
+} // namespace detail
+} // namespace random
+} // namespace pdalboost
+
+#endif // BOOST_RANDOM_DETAIL_SIGNED_UNSIGNED_TOOLS
+
diff --git a/vendor/pdalboost/boost/random/linear_congruential.hpp b/vendor/pdalboost/boost/random/linear_congruential.hpp
new file mode 100644
index 0000000..2bdf6c6
--- /dev/null
+++ b/vendor/pdalboost/boost/random/linear_congruential.hpp
@@ -0,0 +1,466 @@
+/* boost random/linear_congruential.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * $Id$
+ *
+ * Revision history
+ *  2001-02-18  moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP
+#define BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP
+
+#include <iostream>
+#include <stdexcept>
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/integer/static_log2.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/random/detail/config.hpp>
+#include <boost/random/detail/const_mod.hpp>
+#include <boost/random/detail/seed.hpp>
+#include <boost/random/detail/seed_impl.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/random/detail/disable_warnings.hpp>
+
+namespace pdalboost {
+namespace random {
+
+/**
+ * Instantiations of class template linear_congruential_engine model a
+ * \pseudo_random_number_generator. Linear congruential pseudo-random
+ * number generators are described in:
+ *
+ *  @blockquote
+ *  "Mathematical methods in large-scale computing units", D. H. Lehmer,
+ *  Proc. 2nd Symposium on Large-Scale Digital Calculating Machines,
+ *  Harvard University Press, 1951, pp. 141-146
+ *  @endblockquote
+ *
+ * Let x(n) denote the sequence of numbers returned by some pseudo-random
+ * number generator. Then for the linear congruential generator,
+ * x(n+1) := (a * x(n) + c) mod m. Parameters for the generator are
+ * x(0), a, c, m. The template parameter IntType shall denote an integral
+ * type. It must be large enough to hold values a, c, and m. The template
+ * parameters a and c must be smaller than m.
+ *
+ * Note: The quality of the generator crucially depends on the choice of
+ * the parameters. User code should use one of the sensibly parameterized
+ * generators such as minstd_rand instead.
+ */
+template<class IntType, IntType a, IntType c, IntType m>
+class linear_congruential_engine
+{
+public:
+    typedef IntType result_type;
+
+    // Required for old Boost.Random concept
+    BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
+
+    BOOST_STATIC_CONSTANT(IntType, multiplier = a);
+    BOOST_STATIC_CONSTANT(IntType, increment = c);
+    BOOST_STATIC_CONSTANT(IntType, modulus = m);
+    BOOST_STATIC_CONSTANT(IntType, default_seed = 1);
+    
+    BOOST_STATIC_ASSERT(std::numeric_limits<IntType>::is_integer);
+    BOOST_STATIC_ASSERT(m == 0 || a < m);
+    BOOST_STATIC_ASSERT(m == 0 || c < m);
+    
+    /**
+     * Constructs a @c linear_congruential_engine, using the default seed
+     */
+    linear_congruential_engine() { seed(); }
+
+    /**
+     * Constructs a @c linear_congruential_engine, seeding it with @c x0.
+     */
+    BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(linear_congruential_engine,
+                                               IntType, x0)
+    { seed(x0); }
+    
+    /**
+     * Constructs a @c linear_congruential_engine, seeding it with values
+     * produced by a call to @c seq.generate().
+     */
+    BOOST_RANDOM_DETAIL_SEED_SEQ_CONSTRUCTOR(linear_congruential_engine,
+                                             SeedSeq, seq)
+    { seed(seq); }
+
+    /**
+     * Constructs a @c linear_congruential_engine  and seeds it
+     * with values taken from the itrator range [first, last)
+     * and adjusts first to point to the element after the last one
+     * used.  If there are not enough elements, throws @c std::invalid_argument.
+     *
+     * first and last must be input iterators.
+     */
+    template<class It>
+    linear_congruential_engine(It& first, It last)
+    {
+        seed(first, last);
+    }
+
+    // compiler-generated copy constructor and assignment operator are fine
+
+    /**
+     * Calls seed(default_seed)
+     */
+    void seed() { seed(default_seed); }
+
+    /**
+     * If c mod m is zero and x0 mod m is zero, changes the current value of
+     * the generator to 1. Otherwise, changes it to x0 mod m. If c is zero,
+     * distinct seeds in the range [1,m) will leave the generator in distinct
+     * states. If c is not zero, the range is [0,m).
+     */
+    BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(linear_congruential_engine, IntType, x0)
+    {
+        // wrap _x if it doesn't fit in the destination
+        if(modulus == 0) {
+            _x = x0;
+        } else {
+            _x = x0 % modulus;
+        }
+        // handle negative seeds
+        if(_x <= 0 && _x != 0) {
+            _x += modulus;
+        }
+        // adjust to the correct range
+        if(increment == 0 && _x == 0) {
+            _x = 1;
+        }
+        BOOST_ASSERT(_x >= (min)());
+        BOOST_ASSERT(_x <= (max)());
+    }
+
+    /**
+     * Seeds a @c linear_congruential_engine using values from a SeedSeq.
+     */
+    BOOST_RANDOM_DETAIL_SEED_SEQ_SEED(linear_congruential_engine, SeedSeq, seq)
+    { seed(detail::seed_one_int<IntType, m>(seq)); }
+
+    /**
+     * seeds a @c linear_congruential_engine with values taken
+     * from the itrator range [first, last) and adjusts @c first to
+     * point to the element after the last one used.  If there are
+     * not enough elements, throws @c std::invalid_argument.
+     *
+     * @c first and @c last must be input iterators.
+     */
+    template<class It>
+    void seed(It& first, It last)
+    { seed(detail::get_one_int<IntType, m>(first, last)); }
+
+    /**
+     * Returns the smallest value that the @c linear_congruential_engine
+     * can produce.
+     */
+    static result_type min BOOST_PREVENT_MACRO_SUBSTITUTION ()
+    { return c == 0 ? 1 : 0; }
+    /**
+     * Returns the largest value that the @c linear_congruential_engine
+     * can produce.
+     */
+    static result_type max BOOST_PREVENT_MACRO_SUBSTITUTION ()
+    { return modulus-1; }
+
+    /** Returns the next value of the @c linear_congruential_engine. */
+    IntType operator()()
+    {
+        _x = const_mod<IntType, m>::mult_add(a, _x, c);
+        return _x;
+    }
+  
+    /** Fills a range with random values */
+    template<class Iter>
+    void generate(Iter first, Iter last)
+    { detail::generate_from_int(*this, first, last); }
+
+    /** Advances the state of the generator by @c z. */
+    void discard(pdalboost::uintmax_t z)
+    {
+        typedef const_mod<IntType, m> mod_type;
+        IntType b_inv = mod_type::invert(a-1);
+        IntType b_gcd = mod_type::mult(a-1, b_inv);
+        if(b_gcd == 1) {
+            IntType a_z = mod_type::pow(a, z);
+            _x = mod_type::mult_add(a_z, _x, 
+                mod_type::mult(mod_type::mult(c, b_inv), a_z - 1));
+        } else {
+            // compute (a^z - 1)*c % (b_gcd * m) / (b / b_gcd) * inv(b / b_gcd)
+            // we're storing the intermediate result / b_gcd
+            IntType a_zm1_over_gcd = 0;
+            IntType a_km1_over_gcd = (a - 1) / b_gcd;
+            pdalboost::uintmax_t exponent = z;
+            while(exponent != 0) {
+                if(exponent % 2 == 1) {
+                    a_zm1_over_gcd =
+                        mod_type::mult_add(
+                            b_gcd,
+                            mod_type::mult(a_zm1_over_gcd, a_km1_over_gcd),
+                            mod_type::add(a_zm1_over_gcd, a_km1_over_gcd));
+                }
+                a_km1_over_gcd = mod_type::mult_add(
+                    b_gcd,
+                    mod_type::mult(a_km1_over_gcd, a_km1_over_gcd),
+                    mod_type::add(a_km1_over_gcd, a_km1_over_gcd));
+                exponent /= 2;
+            }
+            
+            IntType a_z = mod_type::mult_add(b_gcd, a_zm1_over_gcd, 1);
+            IntType num = mod_type::mult(c, a_zm1_over_gcd);
+            b_inv = mod_type::invert((a-1)/b_gcd);
+            _x = mod_type::mult_add(a_z, _x, mod_type::mult(b_inv, num));
+        }
+    }
+
+    friend bool operator==(const linear_congruential_engine& x,
+                           const linear_congruential_engine& y)
+    { return x._x == y._x; }
+    friend bool operator!=(const linear_congruential_engine& x,
+                           const linear_congruential_engine& y)
+    { return !(x == y); }
+    
+#if !defined(BOOST_RANDOM_NO_STREAM_OPERATORS)
+    /** Writes a @c linear_congruential_engine to a @c std::ostream. */
+    template<class CharT, class Traits>
+    friend std::basic_ostream<CharT,Traits>&
+    operator<<(std::basic_ostream<CharT,Traits>& os,
+               const linear_congruential_engine& lcg)
+    {
+        return os << lcg._x;
+    }
+
+    /** Reads a @c linear_congruential_engine from a @c std::istream. */
+    template<class CharT, class Traits>
+    friend std::basic_istream<CharT,Traits>&
+    operator>>(std::basic_istream<CharT,Traits>& is,
+               linear_congruential_engine& lcg)
+    {
+        lcg.read(is);
+        return is;
+    }
+#endif
+
+private:
+
+    /// \cond show_private
+
+    template<class CharT, class Traits>
+    void read(std::basic_istream<CharT, Traits>& is) {
+        IntType x;
+        if(is >> x) {
+            if(x >= (min)() && x <= (max)()) {
+                _x = x;
+            } else {
+                is.setstate(std::ios_base::failbit);
+            }
+        }
+    }
+
+    /// \endcond
+
+    IntType _x;
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+//  A definition is required even for integral static constants
+template<class IntType, IntType a, IntType c, IntType m>
+const bool linear_congruential_engine<IntType, a, c, m>::has_fixed_range;
+template<class IntType, IntType a, IntType c, IntType m>
+const IntType linear_congruential_engine<IntType,a,c,m>::multiplier;
+template<class IntType, IntType a, IntType c, IntType m>
+const IntType linear_congruential_engine<IntType,a,c,m>::increment;
+template<class IntType, IntType a, IntType c, IntType m>
+const IntType linear_congruential_engine<IntType,a,c,m>::modulus;
+template<class IntType, IntType a, IntType c, IntType m>
+const IntType linear_congruential_engine<IntType,a,c,m>::default_seed;
+#endif
+
+/// \cond show_deprecated
+
+// provided for backwards compatibility
+template<class IntType, IntType a, IntType c, IntType m, IntType val = 0>
+class linear_congruential : public linear_congruential_engine<IntType, a, c, m>
+{
+    typedef linear_congruential_engine<IntType, a, c, m> base_type;
+public:
+    linear_congruential(IntType x0 = 1) : base_type(x0) {}
+    template<class It>
+    linear_congruential(It& first, It last) : base_type(first, last) {}
+};
+
+/// \endcond
+
+/**
+ * The specialization \minstd_rand0 was originally suggested in
+ *
+ *  @blockquote
+ *  A pseudo-random number generator for the System/360, P.A. Lewis,
+ *  A.S. Goodman, J.M. Miller, IBM Systems Journal, Vol. 8, No. 2,
+ *  1969, pp. 136-146
+ *  @endblockquote
+ *
+ * It is examined more closely together with \minstd_rand in
+ *
+ *  @blockquote
+ *  "Random Number Generators: Good ones are hard to find",
+ *  Stephen K. Park and Keith W. Miller, Communications of
+ *  the ACM, Vol. 31, No. 10, October 1988, pp. 1192-1201 
+ *  @endblockquote
+ */
+typedef linear_congruential_engine<uint32_t, 16807, 0, 2147483647> minstd_rand0;
+
+/** The specialization \minstd_rand was suggested in
+ *
+ *  @blockquote
+ *  "Random Number Generators: Good ones are hard to find",
+ *  Stephen K. Park and Keith W. Miller, Communications of
+ *  the ACM, Vol. 31, No. 10, October 1988, pp. 1192-1201
+ *  @endblockquote
+ */
+typedef linear_congruential_engine<uint32_t, 48271, 0, 2147483647> minstd_rand;
+
+
+#if !defined(BOOST_NO_INT64_T) && !defined(BOOST_NO_INTEGRAL_INT64_T)
+/**
+ * Class @c rand48 models a \pseudo_random_number_generator. It uses
+ * the linear congruential algorithm with the parameters a = 0x5DEECE66D,
+ * c = 0xB, m = 2**48. It delivers identical results to the @c lrand48()
+ * function available on some systems (assuming lcong48 has not been called).
+ *
+ * It is only available on systems where @c uint64_t is provided as an
+ * integral type, so that for example static in-class constants and/or
+ * enum definitions with large @c uint64_t numbers work.
+ */
+class rand48 
+{
+public:
+    typedef pdalboost::uint32_t result_type;
+
+    BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
+    /**
+     * Returns the smallest value that the generator can produce
+     */
+    static uint32_t min BOOST_PREVENT_MACRO_SUBSTITUTION () { return 0; }
+    /**
+     * Returns the largest value that the generator can produce
+     */
+    static uint32_t max BOOST_PREVENT_MACRO_SUBSTITUTION ()
+    { return 0x7FFFFFFF; }
+  
+    /** Seeds the generator with the default seed. */
+    rand48() : lcf(cnv(static_cast<uint32_t>(1))) {}
+    /**
+     * Constructs a \rand48 generator with x(0) := (x0 << 16) | 0x330e.
+     */
+    BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(rand48, result_type, x0)
+    { seed(x0); }
+    /**
+     * Seeds the generator with values produced by @c seq.generate().
+     */
+    BOOST_RANDOM_DETAIL_SEED_SEQ_CONSTRUCTOR(rand48, SeedSeq, seq)
+    { seed(seq); }
+    /**
+     * Seeds the generator using values from an iterator range,
+     * and updates first to point one past the last value consumed.
+     */
+    template<class It> rand48(It& first, It last) : lcf(first, last) { }
+
+    // compiler-generated copy ctor and assignment operator are fine
+
+    /** Seeds the generator with the default seed. */
+    void seed() { seed(static_cast<uint32_t>(1)); }
+    /**
+     * Changes the current value x(n) of the generator to (x0 << 16) | 0x330e.
+     */
+    BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(rand48, result_type, x0)
+    { lcf.seed(cnv(x0)); }
+    /**
+     * Seeds the generator using values from an iterator range,
+     * and updates first to point one past the last value consumed.
+     */
+    template<class It> void seed(It& first, It last) { lcf.seed(first,last); }
+    /**
+     * Seeds the generator with values produced by @c seq.generate().
+     */
+    BOOST_RANDOM_DETAIL_SEED_SEQ_SEED(rand48, SeedSeq, seq)
+    { lcf.seed(seq); }
+
+    /**  Returns the next value of the generator. */
+    uint32_t operator()() { return static_cast<uint32_t>(lcf() >> 17); }
+    
+    /** Advances the state of the generator by @c z. */
+    void discard(pdalboost::uintmax_t z) { lcf.discard(z); }
+  
+    /** Fills a range with random values */
+    template<class Iter>
+    void generate(Iter first, Iter last)
+    {
+        for(; first != last; ++first) {
+            *first = (*this)();
+        }
+    }
+
+#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS
+    /**  Writes a @c rand48 to a @c std::ostream. */
+    template<class CharT,class Traits>
+    friend std::basic_ostream<CharT,Traits>&
+    operator<<(std::basic_ostream<CharT,Traits>& os, const rand48& r)
+    { os << r.lcf; return os; }
+
+    /** Reads a @c rand48 from a @c std::istream. */
+    template<class CharT,class Traits>
+    friend std::basic_istream<CharT,Traits>&
+    operator>>(std::basic_istream<CharT,Traits>& is, rand48& r)
+    { is >> r.lcf; return is; }
+#endif
+
+    /**
+     * Returns true if the two generators will produce identical
+     * sequences of values.
+     */
+    friend bool operator==(const rand48& x, const rand48& y)
+    { return x.lcf == y.lcf; }
+    /**
+     * Returns true if the two generators will produce different
+     * sequences of values.
+     */
+    friend bool operator!=(const rand48& x, const rand48& y)
+    { return !(x == y); }
+private:
+    /// \cond show_private
+    typedef random::linear_congruential_engine<uint64_t,
+        // xxxxULL is not portable
+        uint64_t(0xDEECE66DUL) | (uint64_t(0x5) << 32),
+        0xB, uint64_t(1)<<48> lcf_t;
+    lcf_t lcf;
+
+    static pdalboost::uint64_t cnv(pdalboost::uint32_t x)
+    { return (static_cast<uint64_t>(x) << 16) | 0x330e; }
+    /// \endcond
+};
+#endif /* !BOOST_NO_INT64_T && !BOOST_NO_INTEGRAL_INT64_T */
+
+} // namespace random
+
+using random::minstd_rand0;
+using random::minstd_rand;
+using random::rand48;
+
+} // namespace pdalboost
+
+#include <boost/random/detail/enable_warnings.hpp>
+
+#endif // BOOST_RANDOM_LINEAR_CONGRUENTIAL_HPP
diff --git a/vendor/pdalboost/boost/random/traits.hpp b/vendor/pdalboost/boost/random/traits.hpp
new file mode 100644
index 0000000..640ae66
--- /dev/null
+++ b/vendor/pdalboost/boost/random/traits.hpp
@@ -0,0 +1,107 @@
+/* boost random/traits.hpp header file
+ *
+ * Copyright John Maddock 2015
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * These traits classes serve two purposes: they are designed to mostly
+ * work out of the box for multiprecision types (ie number types that are
+ * C++ class types and not integers or floats from type-traits point of view),
+ * they are also a potential point of specialization for user-defined
+ * number types.
+ *
+ * $Id$
+ */
+
+#ifndef BOOST_RANDOM_TRAITS_HPP
+#define BOOST_RANDOM_TRAITS_HPP
+
+#include <boost/type_traits/is_signed.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <boost/mpl/bool.hpp>
+#include <limits>
+
+namespace pdalboost {
+namespace random {
+namespace traits {
+   // \cond show_private
+   template <class T, bool intrinsic>
+   struct make_unsigned_imp
+   {
+      typedef typename pdalboost::make_unsigned<T>::type type;
+   };
+   template <class T>
+   struct make_unsigned_imp<T, false>
+   {
+      BOOST_STATIC_ASSERT(std::numeric_limits<T>::is_specialized);
+      BOOST_STATIC_ASSERT(std::numeric_limits<T>::is_signed == false);
+      BOOST_STATIC_ASSERT(std::numeric_limits<T>::is_integer == true);
+      typedef T type;
+   };
+   // \endcond
+   /** \brief Converts the argument type T to an unsigned type.
+   *
+   * This trait has a single member `type` which is the unsigned type corresponding to T.
+   * Note that
+   * if T is signed, then member `type` *should define a type with one more bit precision than T*.  For built-in
+   * types this trait defaults to `pdalboost::make_unsigned<T>::type`.  For user defined types it simply asserts that
+   * the argument type T is an unsigned integer (using std::numeric_limits).
+   * User defined specializations may be provided for other cases.
+   */
+   template <class T>
+   struct make_unsigned
+   // \cond show_private
+      : public make_unsigned_imp < T, pdalboost::is_integral<T>::value > 
+      // \endcond
+   {};
+   // \cond show_private
+   template <class T, bool intrinsic>
+   struct make_unsigned_or_unbounded_imp
+   {
+      typedef typename pdalboost::make_unsigned<T>::type type;
+   };
+   template <class T>
+   struct make_unsigned_or_unbounded_imp<T, false>
+   {
+      BOOST_STATIC_ASSERT(std::numeric_limits<T>::is_specialized);
+      BOOST_STATIC_ASSERT((std::numeric_limits<T>::is_signed == false) || (std::numeric_limits<T>::is_bounded == false));
+      BOOST_STATIC_ASSERT(std::numeric_limits<T>::is_integer == true);
+      typedef T type;
+   };
+   // \endcond
+   /** \brief Converts the argument type T to either an unsigned type or an unbounded integer type.
+   *
+   * This trait has a single member `type` which is either the unsigned type corresponding to T or an unbounded
+   * integer type.  This trait is used to generate types suitable for the calculation of a range: as a result
+   * if T is signed, then member `type` *should define a type with one more bit precision than T*.  For built-in
+   * types this trait defaults to `pdalboost::make_unsigned<T>::type`.  For user defined types it simply asserts that
+   * the argument type T is either an unbounded integer, or an unsigned one (using std::numeric_limits).
+   * User defined specializations may be provided for other cases.
+   */
+   template <class T>
+   struct make_unsigned_or_unbounded
+      // \cond show_private
+      : public make_unsigned_or_unbounded_imp < T, pdalboost::is_integral<T>::value > 
+      // \endcond
+   {};
+   /** \brief Traits class that indicates whether type T is an integer
+   */
+   template <class T>
+   struct is_integral
+      : public mpl::bool_<pdalboost::is_integral<T>::value || (std::numeric_limits<T>::is_integer)>
+   {};
+   /** \brief Traits class that indicates whether type T is a signed integer
+   */
+   template <class T> struct is_signed
+      : public mpl::bool_ < pdalboost::is_signed<T>::value || (std::numeric_limits<T>::is_specialized && std::numeric_limits<T>::is_integer && std::numeric_limits<T>::is_signed)>
+   {};
+
+}
+}
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/random/uniform_01.hpp b/vendor/pdalboost/boost/random/uniform_01.hpp
new file mode 100644
index 0000000..a0342d1
--- /dev/null
+++ b/vendor/pdalboost/boost/random/uniform_01.hpp
@@ -0,0 +1,257 @@
+/* boost random/uniform_01.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * $Id$
+ *
+ * Revision history
+ *  2001-02-18  moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_UNIFORM_01_HPP
+#define BOOST_RANDOM_UNIFORM_01_HPP
+
+#include <iostream>
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/random/detail/config.hpp>
+#include <boost/random/detail/ptr_helper.hpp>
+
+#include <boost/random/detail/disable_warnings.hpp>
+
+namespace pdalboost {
+namespace random {
+
+#ifdef BOOST_RANDOM_DOXYGEN
+
+/**
+ * The distribution function uniform_01 models a \random_distribution.
+ * On each invocation, it returns a random floating-point value
+ * uniformly distributed in the range [0..1).
+ *
+ * The template parameter RealType shall denote a float-like value type
+ * with support for binary operators +, -, and /.
+ *
+ * Note: The current implementation is buggy, because it may not fill
+ * all of the mantissa with random bits. I'm unsure how to fill a
+ * (to-be-invented) @c pdalboost::bigfloat class with random bits efficiently.
+ * It's probably time for a traits class.
+ */
+template<class RealType = double>
+class uniform_01
+{
+public:
+  typedef RealType input_type;
+  typedef RealType result_type;
+  result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const;
+  result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const;
+  void reset();
+
+  template<class Engine>
+  result_type operator()(Engine& eng);
+
+#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS
+  template<class CharT, class Traits>
+  friend std::basic_ostream<CharT,Traits>&
+  operator<<(std::basic_ostream<CharT,Traits>& os, const new_uniform_01&)
+  {
+    return os;
+  }
+
+  template<class CharT, class Traits>
+  friend std::basic_istream<CharT,Traits>&
+  operator>>(std::basic_istream<CharT,Traits>& is, new_uniform_01&)
+  {
+    return is;
+  }
+#endif
+};
+
+#else
+
+namespace detail {
+
+template<class RealType>
+class new_uniform_01
+{
+public:
+  typedef RealType input_type;
+  typedef RealType result_type;
+  // compiler-generated copy ctor and copy assignment are fine
+  result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(0); }
+  result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(1); }
+  void reset() { }
+
+  template<class Engine>
+  result_type operator()(Engine& eng) {
+    for (;;) {
+      typedef typename Engine::result_type base_result;
+      result_type factor = result_type(1) /
+              (result_type(base_result((eng.max)()-(eng.min)())) +
+               result_type(std::numeric_limits<base_result>::is_integer ? 1 : 0));
+      result_type result = result_type(base_result(eng() - (eng.min)())) * factor;
+      if (result < result_type(1))
+        return result;
+    }
+  }
+
+#ifndef BOOST_RANDOM_NO_STREAM_OPERATORS
+  template<class CharT, class Traits>
+  friend std::basic_ostream<CharT,Traits>&
+  operator<<(std::basic_ostream<CharT,Traits>& os, const new_uniform_01&)
+  {
+    return os;
+  }
+
+  template<class CharT, class Traits>
+  friend std::basic_istream<CharT,Traits>&
+  operator>>(std::basic_istream<CharT,Traits>& is, new_uniform_01&)
+  {
+    return is;
+  }
+#endif
+};
+
+template<class UniformRandomNumberGenerator, class RealType>
+class backward_compatible_uniform_01
+{
+  typedef pdalboost::random::detail::ptr_helper<UniformRandomNumberGenerator> traits;
+public:
+  typedef UniformRandomNumberGenerator base_type;
+  typedef RealType result_type;
+
+  BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
+
+#if !defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS)
+  BOOST_STATIC_ASSERT(!std::numeric_limits<RealType>::is_integer);
+#endif
+
+  explicit backward_compatible_uniform_01(typename traits::rvalue_type rng)
+    : _rng(rng),
+      _factor(result_type(1) /
+              (result_type((base().max)()-(base().min)()) +
+               result_type(std::numeric_limits<base_result>::is_integer ? 1 : 0)))
+  {
+  }
+  // compiler-generated copy ctor and copy assignment are fine
+
+  result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(0); }
+  result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return result_type(1); }
+  typename traits::value_type& base() { return traits::ref(_rng); }
+  const typename traits::value_type& base() const { return traits::ref(_rng); }
+  void reset() { }
+
+  result_type operator()() {
+    for (;;) {
+      result_type result = result_type(base()() - (base().min)()) * _factor;
+      if (result < result_type(1))
+        return result;
+    }
+  }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+  template<class CharT, class Traits>
+  friend std::basic_ostream<CharT,Traits>&
+  operator<<(std::basic_ostream<CharT,Traits>& os, const backward_compatible_uniform_01& u)
+  {
+    os << u._rng;
+    return os;
+  }
+
+  template<class CharT, class Traits>
+  friend std::basic_istream<CharT,Traits>&
+  operator>>(std::basic_istream<CharT,Traits>& is, backward_compatible_uniform_01& u)
+  {
+    is >> u._rng;
+    return is;
+  }
+#endif
+
+private:
+  typedef typename traits::value_type::result_type base_result;
+  UniformRandomNumberGenerator _rng;
+  result_type _factor;
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+//  A definition is required even for integral static constants
+template<class UniformRandomNumberGenerator, class RealType>
+const bool backward_compatible_uniform_01<UniformRandomNumberGenerator, RealType>::has_fixed_range;
+#endif
+
+template<class UniformRandomNumberGenerator, bool is_number = std::numeric_limits<UniformRandomNumberGenerator>::is_specialized>
+struct select_uniform_01
+{
+  template<class RealType>
+  struct apply
+  {
+    typedef backward_compatible_uniform_01<UniformRandomNumberGenerator, RealType> type;
+  };
+};
+
+template<class Num>
+struct select_uniform_01<Num, true>
+{
+  template<class RealType>
+  struct apply
+  {
+    typedef new_uniform_01<Num> type;
+  };
+};
+
+}
+
+// Because it is so commonly used: uniform distribution on the real [0..1)
+// range.  This allows for specializations to avoid a costly int -> float
+// conversion plus float multiplication
+template<class UniformRandomNumberGenerator = double, class RealType = double>
+class uniform_01
+  : public detail::select_uniform_01<UniformRandomNumberGenerator>::BOOST_NESTED_TEMPLATE apply<RealType>::type
+{
+  typedef typename detail::select_uniform_01<UniformRandomNumberGenerator>::BOOST_NESTED_TEMPLATE apply<RealType>::type impl_type;
+  typedef pdalboost::random::detail::ptr_helper<UniformRandomNumberGenerator> traits;
+public:
+
+  uniform_01() {}
+
+  explicit uniform_01(typename traits::rvalue_type rng)
+    : impl_type(rng)
+  {
+  }
+
+#if !defined(BOOST_NO_OPERATORS_IN_NAMESPACE) && !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+  template<class CharT, class Traits>
+  friend std::basic_ostream<CharT,Traits>&
+  operator<<(std::basic_ostream<CharT,Traits>& os, const uniform_01& u)
+  {
+    os << static_cast<const impl_type&>(u);
+    return os;
+  }
+
+  template<class CharT, class Traits>
+  friend std::basic_istream<CharT,Traits>&
+  operator>>(std::basic_istream<CharT,Traits>& is, uniform_01& u)
+  {
+    is >> static_cast<impl_type&>(u);
+    return is;
+  }
+#endif
+};
+
+#endif
+
+} // namespace random
+
+using random::uniform_01;
+
+} // namespace pdalboost
+
+#include <boost/random/detail/enable_warnings.hpp>
+
+#endif // BOOST_RANDOM_UNIFORM_01_HPP
diff --git a/vendor/pdalboost/boost/random/uniform_smallint.hpp b/vendor/pdalboost/boost/random/uniform_smallint.hpp
new file mode 100644
index 0000000..7d3e516
--- /dev/null
+++ b/vendor/pdalboost/boost/random/uniform_smallint.hpp
@@ -0,0 +1,307 @@
+/* boost random/uniform_smallint.hpp header file
+ *
+ * Copyright Jens Maurer 2000-2001
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * $Id$
+ *
+ * Revision history
+ *  2001-04-08  added min<max assertion (N. Becker)
+ *  2001-02-18  moved to individual header files
+ */
+
+#ifndef BOOST_RANDOM_UNIFORM_SMALLINT_HPP
+#define BOOST_RANDOM_UNIFORM_SMALLINT_HPP
+
+#include <istream>
+#include <iosfwd>
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/limits.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/random/detail/config.hpp>
+#include <boost/random/detail/operators.hpp>
+#include <boost/random/detail/signed_unsigned_tools.hpp>
+#include <boost/random/uniform_01.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/bool.hpp>
+
+#ifdef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+#include <boost/mpl/if.hpp>
+#endif
+
+namespace pdalboost {
+namespace random {
+
+// uniform integer distribution on a small range [min, max]
+
+/**
+ * The distribution function uniform_smallint models a \random_distribution.
+ * On each invocation, it returns a random integer value uniformly distributed
+ * in the set of integer numbers {min, min+1, min+2, ..., max}. It assumes
+ * that the desired range (max-min+1) is small compared to the range of the
+ * underlying source of random numbers and thus makes no attempt to limit
+ * quantization errors.
+ *
+ * Let \f$r_{\mathtt{out}} = (\mbox{max}-\mbox{min}+1)\f$ the desired range of
+ * integer numbers, and
+ * let \f$r_{\mathtt{base}}\f$ be the range of the underlying source of random
+ * numbers. Then, for the uniform distribution, the theoretical probability
+ * for any number i in the range \f$r_{\mathtt{out}}\f$ will be
+ * \f$\displaystyle p_{\mathtt{out}}(i) = \frac{1}{r_{\mathtt{out}}}\f$.
+ * Likewise, assume a uniform distribution on \f$r_{\mathtt{base}}\f$ for
+ * the underlying source of random numbers, i.e.
+ * \f$\displaystyle p_{\mathtt{base}}(i) = \frac{1}{r_{\mathtt{base}}}\f$.
+ * Let \f$p_{\mathtt{out\_s}}(i)\f$ denote the random
+ * distribution generated by @c uniform_smallint. Then the sum over all
+ * i in \f$r_{\mathtt{out}}\f$ of
+ * \f$\displaystyle
+ * \left(\frac{p_{\mathtt{out\_s}}(i)}{p_{\mathtt{out}}(i)} - 1\right)^2\f$
+ * shall not exceed
+ * \f$\displaystyle \frac{r_{\mathtt{out}}}{r_{\mathtt{base}}^2}
+ * (r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}})
+ * (r_{\mathtt{out}} - r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}})\f$.
+ *
+ * The template parameter IntType shall denote an integer-like value type.
+ *
+ * @xmlnote
+ * The property above is the square sum of the relative differences
+ * in probabilities between the desired uniform distribution
+ * \f$p_{\mathtt{out}}(i)\f$ and the generated distribution
+ * \f$p_{\mathtt{out\_s}}(i)\f$.
+ * The property can be fulfilled with the calculation
+ * \f$(\mbox{base\_rng} \mbox{ mod } r_{\mathtt{out}})\f$, as follows:
+ * Let \f$r = r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}}\f$.
+ * The base distribution on \f$r_{\mathtt{base}}\f$ is folded onto the
+ * range \f$r_{\mathtt{out}}\f$. The numbers i < r have assigned
+ * \f$\displaystyle
+ * \left\lfloor\frac{r_{\mathtt{base}}}{r_{\mathtt{out}}}\right\rfloor+1\f$
+ * numbers of the base distribution, the rest has only \f$\displaystyle
+ * \left\lfloor\frac{r_{\mathtt{base}}}{r_{\mathtt{out}}}\right\rfloor\f$.
+ * Therefore,
+ * \f$\displaystyle p_{\mathtt{out\_s}}(i) =
+ * \left(\left\lfloor\frac{r_{\mathtt{base}}}
+ * {r_{\mathtt{out}}}\right\rfloor+1\right) /
+ * r_{\mathtt{base}}\f$ for i < r and \f$\displaystyle p_{\mathtt{out\_s}}(i) =
+ * \left\lfloor\frac{r_{\mathtt{base}}}
+ * {r_{\mathtt{out}}}\right\rfloor/r_{\mathtt{base}}\f$ otherwise.
+ * Substituting this in the
+ * above sum formula leads to the desired result.
+ * @endxmlnote
+ *
+ * Note: The upper bound for
+ * \f$(r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}})
+ * (r_{\mathtt{out}} - r_{\mathtt{base}} \mbox{ mod } r_{\mathtt{out}})\f$ is
+ * \f$\displaystyle \frac{r_{\mathtt{out}}^2}{4}\f$.  Regarding the upper bound
+ * for the square sum of the relative quantization error of
+ * \f$\displaystyle \frac{r_\mathtt{out}^3}{4r_{\mathtt{base}}^2}\f$, it
+ * seems wise to either choose \f$r_{\mathtt{base}}\f$ so that
+ * \f$r_{\mathtt{base}} > 10r_{\mathtt{out}}^2\f$ or ensure that
+ * \f$r_{\mathtt{base}}\f$ is
+ * divisible by \f$r_{\mathtt{out}}\f$.
+ */
+template<class IntType = int>
+class uniform_smallint
+{
+public:
+    typedef IntType input_type;
+    typedef IntType result_type;
+
+    class param_type
+    {
+    public:
+
+        typedef uniform_smallint distribution_type;
+
+        /** constructs the parameters of a @c uniform_smallint distribution. */
+        param_type(IntType min_arg = 0, IntType max_arg = 9)
+          : _min(min_arg), _max(max_arg)
+        {
+            BOOST_ASSERT(_min <= _max);
+        }
+
+        /** Returns the minimum value. */
+        IntType a() const { return _min; }
+        /** Returns the maximum value. */
+        IntType b() const { return _max; }
+        
+
+        /** Writes the parameters to a @c std::ostream. */
+        BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, param_type, parm)
+        {
+            os << parm._min << " " << parm._max;
+            return os;
+        }
+    
+        /** Reads the parameters from a @c std::istream. */
+        BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, param_type, parm)
+        {
+            is >> parm._min >> std::ws >> parm._max;
+            return is;
+        }
+
+        /** Returns true if the two sets of parameters are equal. */
+        BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(param_type, lhs, rhs)
+        { return lhs._min == rhs._min && lhs._max == rhs._max; }
+
+        /** Returns true if the two sets of parameters are different. */
+        BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type)
+
+    private:
+        IntType _min;
+        IntType _max;
+    };
+
+    /**
+     * Constructs a @c uniform_smallint. @c min and @c max are the
+     * lower and upper bounds of the output range, respectively.
+     */
+    explicit uniform_smallint(IntType min_arg = 0, IntType max_arg = 9)
+      : _min(min_arg), _max(max_arg) {}
+
+    /**
+     * Constructs a @c uniform_smallint from its parameters.
+     */
+    explicit uniform_smallint(const param_type& parm)
+      : _min(parm.a()), _max(parm.b()) {}
+
+    /** Returns the minimum value of the distribution. */
+    result_type a() const { return _min; }
+    /** Returns the maximum value of the distribution. */
+    result_type b() const { return _max; }
+    /** Returns the minimum value of the distribution. */
+    result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _min; }
+    /** Returns the maximum value of the distribution. */
+    result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const { return _max; }
+
+    /** Returns the parameters of the distribution. */
+    param_type param() const { return param_type(_min, _max); }
+    /** Sets the parameters of the distribution. */
+    void param(const param_type& parm)
+    {
+        _min = parm.a();
+        _max = parm.b();
+    }
+
+    /**
+     * Effects: Subsequent uses of the distribution do not depend
+     * on values produced by any engine prior to invoking reset.
+     */
+    void reset() { }
+
+    /** Returns a value uniformly distributed in the range [min(), max()]. */
+    template<class Engine>
+    result_type operator()(Engine& eng) const
+    {
+        typedef typename Engine::result_type base_result;
+        return generate(eng, pdalboost::random::traits::is_integral<base_result>());
+    }
+
+    /** Returns a value uniformly distributed in the range [param.a(), param.b()]. */
+    template<class Engine>
+    result_type operator()(Engine& eng, const param_type& parm) const
+    { return uniform_smallint(parm)(eng); }
+
+    /** Writes the distribution to a @c std::ostream. */
+    BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, uniform_smallint, ud)
+    {
+        os << ud._min << " " << ud._max;
+        return os;
+    }
+    
+    /** Reads the distribution from a @c std::istream. */
+    BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, uniform_smallint, ud)
+    {
+        is >> ud._min >> std::ws >> ud._max;
+        return is;
+    }
+
+    /**
+     * Returns true if the two distributions will produce identical
+     * sequences of values given equal generators.
+     */
+    BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(uniform_smallint, lhs, rhs)
+    { return lhs._min == rhs._min && lhs._max == rhs._max; }
+    
+    /**
+     * Returns true if the two distributions may produce different
+     * sequences of values given equal generators.
+     */
+    BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(uniform_smallint)
+
+private:
+    
+    // \cond show_private
+    template<class Engine>
+    result_type generate(Engine& eng, pdalboost::mpl::true_) const
+    {
+        // equivalent to (eng() - eng.min()) % (_max - _min + 1) + _min,
+        // but guarantees no overflow.
+        typedef typename Engine::result_type base_result;
+        typedef typename pdalboost::random::traits::make_unsigned<base_result>::type base_unsigned;
+        typedef typename pdalboost::random::traits::make_unsigned_or_unbounded<result_type>::type range_type;
+#ifdef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+        typedef typename mpl::if_c<
+           std::numeric_limits<range_type>::is_specialized && std::numeric_limits<base_unsigned>::is_specialized
+           && (std::numeric_limits<range_type>::digits >= std::numeric_limits<base_unsigned>::digits),
+           range_type, base_unsigned>::type mixed_range_type;
+#else
+        typedef base_unsigned mixed_range_type;
+#endif
+        range_type range = random::detail::subtract<result_type>()(_max, _min);
+        base_unsigned base_range =
+            random::detail::subtract<base_result>()((eng.max)(), (eng.min)());
+        base_unsigned val =
+            random::detail::subtract<base_result>()(eng(), (eng.min)());
+        if(range >= base_range) {
+            return pdalboost::random::detail::add<range_type, result_type>()(
+                static_cast<range_type>(val), _min);
+        } else {
+            // This involves mixed arithmetic between the base generators range
+            // type, and the result_type's range type.  mixed_range_type is
+            // normally the same as base_unsigned which is the most efficient
+            // option, but requires a narrowing explcit cast if result_type
+            // is a multiprecision type.  If no such casts are available then use
+            // multiprecision arithmetic throughout instead.
+            mixed_range_type modulus = static_cast<mixed_range_type>(range)+1;
+            return pdalboost::random::detail::add<range_type, result_type>()(
+                static_cast<mixed_range_type>(val) % modulus, _min);
+        }
+    }
+    
+    template<class Engine>
+    result_type generate(Engine& eng, pdalboost::mpl::false_) const
+    {
+        typedef typename Engine::result_type base_result;
+        typedef typename pdalboost::random::traits::make_unsigned<result_type>::type range_type;
+        range_type range = random::detail::subtract<result_type>()(_max, _min);
+        base_result val = pdalboost::uniform_01<base_result>()(eng);
+        // what is the worst that can possibly happen here?
+        // base_result may not be able to represent all the values in [0, range]
+        // exactly.  If this happens, it will cause round off error and we
+        // won't be able to produce all the values in the range.  We don't
+        // care about this because the user has already told us not to by
+        // using uniform_smallint.  However, we do need to be careful
+        // to clamp the result, or floating point rounding can produce
+        // an out of range result.
+        range_type offset = static_cast<range_type>(val * (static_cast<base_result>(range) + 1));
+        if(offset > range) return _max;
+        return pdalboost::random::detail::add<range_type, result_type>()(offset , _min);
+    }
+    // \endcond
+
+    result_type _min;
+    result_type _max;
+};
+
+} // namespace random
+
+using random::uniform_smallint;
+
+} // namespace pdalboost
+
+#endif // BOOST_RANDOM_UNIFORM_SMALLINT_HPP
diff --git a/vendor/pdalboost/boost/range.hpp b/vendor/pdalboost/boost/range.hpp
new file mode 100644
index 0000000..179ae22
--- /dev/null
+++ b/vendor/pdalboost/boost/range.hpp
@@ -0,0 +1,23 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_HPP_27_07_04
+#define BOOST_RANGE_HPP_27_07_04
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/functions.hpp>
+#include <boost/range/metafunctions.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/sub_range.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/range/adaptor/adjacent_filtered.hpp b/vendor/pdalboost/boost/range/adaptor/adjacent_filtered.hpp
new file mode 100644
index 0000000..8860f36
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/adjacent_filtered.hpp
@@ -0,0 +1,237 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ADAPTOR_ADJACENT_FILTER_IMPL_HPP
+#define BOOST_RANGE_ADAPTOR_ADJACENT_FILTER_IMPL_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_MSVC
+#pragma warning( push )
+#pragma warning( disable : 4355 )
+#endif
+
+#include <boost/range/adaptor/argument_fwd.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/next_prior.hpp>
+
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        template< class Iter, class Pred, bool default_pass >
+        class skip_iterator
+          : public pdalboost::iterator_adaptor<
+                    skip_iterator<Iter,Pred,default_pass>,
+                    Iter,
+                    BOOST_DEDUCED_TYPENAME std::iterator_traits<Iter>::value_type,
+                    pdalboost::forward_traversal_tag,
+                    BOOST_DEDUCED_TYPENAME std::iterator_traits<Iter>::reference,
+                    BOOST_DEDUCED_TYPENAME std::iterator_traits<Iter>::difference_type
+                >
+          , private Pred
+        {
+        private:
+            typedef pdalboost::iterator_adaptor<
+                        skip_iterator<Iter,Pred,default_pass>,
+                        Iter,
+                        BOOST_DEDUCED_TYPENAME std::iterator_traits<Iter>::value_type,
+                        pdalboost::forward_traversal_tag,
+                        BOOST_DEDUCED_TYPENAME std::iterator_traits<Iter>::reference,
+                        BOOST_DEDUCED_TYPENAME std::iterator_traits<Iter>::difference_type
+                    > base_t;
+
+        public:
+            typedef Pred pred_t;
+            typedef Iter iter_t;
+
+            skip_iterator() : m_last() {}
+
+            skip_iterator(iter_t it, iter_t last, const Pred& pred)
+                : base_t(it)
+                , pred_t(pred)
+                , m_last(last)
+            {
+            }
+
+            template<class OtherIter>
+            skip_iterator( const skip_iterator<OtherIter, pred_t, default_pass>& other )
+            : base_t(other.base())
+            , pred_t(other)
+            , m_last(other.m_last)
+            {
+            }
+
+            void increment()
+            {
+                iter_t& it = this->base_reference();
+                BOOST_ASSERT( it != m_last );
+                pred_t& bi_pred = *this;
+                iter_t prev = it;
+                ++it;
+                if (it != m_last)
+                {
+                    if (default_pass)
+                    {
+                        while (it != m_last && !bi_pred(*prev, *it))
+                        {
+                            ++it;
+                            ++prev;
+                        }
+                    }
+                    else
+                    {
+                        for (; it != m_last; ++it, ++prev)
+                        {
+                            if (bi_pred(*prev, *it))
+                            {
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+
+            iter_t m_last;
+        };
+
+        template< class P, class R, bool default_pass >
+        struct adjacent_filtered_range
+            : iterator_range< skip_iterator<
+                                BOOST_DEDUCED_TYPENAME range_iterator<R>::type,
+                                P,
+                                default_pass
+                            >
+                        >
+        {
+        private:
+            typedef skip_iterator<
+                        BOOST_DEDUCED_TYPENAME range_iterator<R>::type,
+                        P,
+                        default_pass
+                     >
+                skip_iter;
+
+            typedef iterator_range<skip_iter>
+                base_range;
+
+            typedef BOOST_DEDUCED_TYPENAME range_iterator<R>::type raw_iterator;
+
+        public:
+            adjacent_filtered_range( const P& p, R& r )
+            : base_range(skip_iter(pdalboost::begin(r), pdalboost::end(r), p),
+                         skip_iter(pdalboost::end(r), pdalboost::end(r), p))
+            {
+            }
+        };
+
+        template< class T >
+        struct adjacent_holder : holder<T>
+        {
+            adjacent_holder( T r ) : holder<T>(r)
+            { }
+        };
+
+        template< class T >
+        struct adjacent_excl_holder : holder<T>
+        {
+            adjacent_excl_holder( T r ) : holder<T>(r)
+            { }
+        };
+
+        template< class ForwardRng, class BinPredicate >
+        inline adjacent_filtered_range<BinPredicate, ForwardRng, true>
+        operator|( ForwardRng& r,
+                   const adjacent_holder<BinPredicate>& f )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRng>));
+
+            return adjacent_filtered_range<BinPredicate, ForwardRng, true>( f.val, r );
+        }
+
+        template< class ForwardRng, class BinPredicate >
+        inline adjacent_filtered_range<BinPredicate, const ForwardRng, true>
+        operator|( const ForwardRng& r,
+                   const adjacent_holder<BinPredicate>& f )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRng>));
+
+            return adjacent_filtered_range<BinPredicate,
+                                           const ForwardRng, true>( f.val, r );
+        }
+
+        template< class ForwardRng, class BinPredicate >
+        inline adjacent_filtered_range<BinPredicate, ForwardRng, false>
+        operator|( ForwardRng& r,
+                   const adjacent_excl_holder<BinPredicate>& f )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRng>));
+            return adjacent_filtered_range<BinPredicate, ForwardRng, false>( f.val, r );
+        }
+
+        template< class ForwardRng, class BinPredicate >
+        inline adjacent_filtered_range<BinPredicate, ForwardRng, false>
+        operator|( const ForwardRng& r,
+                   const adjacent_excl_holder<BinPredicate>& f )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRng>));
+            return adjacent_filtered_range<BinPredicate,
+                                           const ForwardRng, false>( f.val, r );
+        }
+
+    } // 'range_detail'
+
+    // Bring adjacent_filter_range into the boost namespace so that users of
+    // this library may specify the return type of the '|' operator and
+    // adjacent_filter()
+    using range_detail::adjacent_filtered_range;
+
+    namespace adaptors
+    {
+        namespace
+        {
+            const range_detail::forwarder<range_detail::adjacent_holder>
+                adjacent_filtered =
+                   range_detail::forwarder<range_detail::adjacent_holder>();
+
+            const range_detail::forwarder<range_detail::adjacent_excl_holder>
+                adjacent_filtered_excl =
+                    range_detail::forwarder<range_detail::adjacent_excl_holder>();
+        }
+
+        template<class ForwardRng, class BinPredicate>
+        inline adjacent_filtered_range<BinPredicate, ForwardRng, true>
+        adjacent_filter(ForwardRng& rng, BinPredicate filter_pred)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRng>));
+            return adjacent_filtered_range<BinPredicate, ForwardRng, true>(filter_pred, rng);
+        }
+
+        template<class ForwardRng, class BinPredicate>
+        inline adjacent_filtered_range<BinPredicate, const ForwardRng, true>
+        adjacent_filter(const ForwardRng& rng, BinPredicate filter_pred)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRng>));
+            return adjacent_filtered_range<BinPredicate, const ForwardRng, true>(filter_pred, rng);
+        }
+
+    } // 'adaptors'
+
+}
+
+#ifdef BOOST_MSVC
+#pragma warning( pop )
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/range/adaptor/argument_fwd.hpp b/vendor/pdalboost/boost/range/adaptor/argument_fwd.hpp
new file mode 100644
index 0000000..636964f
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/argument_fwd.hpp
@@ -0,0 +1,80 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ADAPTOR_ARGUMENT_FWD_HPP
+#define BOOST_RANGE_ADAPTOR_ARGUMENT_FWD_HPP
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable : 4512) // assignment operator could not be generated
+#endif
+
+namespace pdalboost
+{
+    namespace range_detail
+    {  
+        template< class T >
+        struct holder
+        {
+            T val;
+            holder( T t ) : val(t)
+            { }
+        };
+
+        template< class T >
+        struct holder2
+        {
+            T val1, val2;
+            holder2( T t, T u ) : val1(t), val2(u)
+            { }
+        };
+        
+        template< template<class> class Holder >
+        struct forwarder
+        {
+            template< class T >
+            Holder<T> operator()( T t ) const
+            {
+                return Holder<T>(t);
+            }
+        };
+
+        template< template<class> class Holder >
+        struct forwarder2
+        {
+            template< class T >
+            Holder<T> operator()( T t, T u ) const
+            {
+                return Holder<T>(t,u);
+            }
+        };
+
+        template< template<class,class> class Holder >
+        struct forwarder2TU
+        {
+            template< class T, class U >
+            Holder<T, U> operator()( T t, U u ) const
+            {
+                return Holder<T, U>(t, u);
+            }
+        };
+
+
+    } 
+        
+}
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/range/adaptor/copied.hpp b/vendor/pdalboost/boost/range/adaptor/copied.hpp
new file mode 100644
index 0000000..80353d5
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/copied.hpp
@@ -0,0 +1,68 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen, Neil Groves 2006. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ADAPTOR_COPIED_HPP
+#define BOOST_RANGE_ADAPTOR_COPIED_HPP
+
+#include <boost/range/adaptor/argument_fwd.hpp>
+#include <boost/range/adaptor/sliced.hpp>
+#include <boost/range/size_type.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/concepts.hpp>
+
+namespace pdalboost
+{
+    namespace adaptors
+    {
+        struct copied
+        {
+            copied(std::size_t t_, std::size_t u_)
+                : t(t_), u(u_) {}
+
+            std::size_t t;
+            std::size_t u;
+        };
+
+        template<class CopyableRandomAccessRange>
+        inline CopyableRandomAccessRange
+        operator|(const CopyableRandomAccessRange& r, const copied& f)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                RandomAccessRangeConcept<const CopyableRandomAccessRange>));
+
+            iterator_range<
+                BOOST_DEDUCED_TYPENAME range_iterator<
+                    const CopyableRandomAccessRange
+                >::type
+            > temp(adaptors::slice(r, f.t, f.u));
+
+            return CopyableRandomAccessRange(temp.begin(), temp.end());
+        }
+
+        template<class CopyableRandomAccessRange>
+        inline CopyableRandomAccessRange
+        copy(const CopyableRandomAccessRange& rng, std::size_t t, std::size_t u)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                RandomAccessRangeConcept<const CopyableRandomAccessRange>));
+
+            iterator_range<
+                BOOST_DEDUCED_TYPENAME range_iterator<
+                    const CopyableRandomAccessRange
+                >::type
+            > temp(adaptors::slice(rng, t, u));
+
+            return CopyableRandomAccessRange( temp.begin(), temp.end() );
+        }
+    } // 'adaptors'
+
+}
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/adaptor/filtered.hpp b/vendor/pdalboost/boost/range/adaptor/filtered.hpp
new file mode 100644
index 0000000..05e1155
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/filtered.hpp
@@ -0,0 +1,121 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ADAPTOR_FILTERED_HPP
+#define BOOST_RANGE_ADAPTOR_FILTERED_HPP
+
+#include <boost/range/adaptor/argument_fwd.hpp>
+#include <boost/range/detail/default_constructible_unary_fn.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/iterator/filter_iterator.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        template< class P, class R >
+        struct filtered_range :
+            pdalboost::iterator_range<
+                pdalboost::filter_iterator<
+                    typename default_constructible_unary_fn_gen<P, bool>::type,
+                    typename range_iterator<R>::type
+                >
+            >
+        {
+        private:
+            typedef pdalboost::iterator_range<
+                pdalboost::filter_iterator<
+                    typename default_constructible_unary_fn_gen<P, bool>::type,
+                    typename range_iterator<R>::type
+                >
+            > base;
+        public:
+            typedef typename default_constructible_unary_fn_gen<P, bool>::type
+                pred_t;
+
+            filtered_range(P p, R& r)
+            : base(make_filter_iterator(pred_t(p),
+                                        pdalboost::begin(r), pdalboost::end(r)),
+                   make_filter_iterator(pred_t(p),
+                                        pdalboost::end(r), pdalboost::end(r)))
+            { }
+        };
+
+        template< class T >
+        struct filter_holder : holder<T>
+        {
+            filter_holder( T r ) : holder<T>(r)
+            { }
+        };
+
+        template< class SinglePassRange, class Predicate >
+        inline filtered_range<Predicate, SinglePassRange>
+        operator|(SinglePassRange& r,
+                  const filter_holder<Predicate>& f)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<SinglePassRange>));
+            return filtered_range<Predicate, SinglePassRange>( f.val, r );
+        }
+
+        template< class SinglePassRange, class Predicate >
+        inline filtered_range<Predicate, const SinglePassRange>
+        operator|(const SinglePassRange& r,
+                  const filter_holder<Predicate>& f )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<const SinglePassRange>));
+            return filtered_range<Predicate, const SinglePassRange>( f.val, r );
+        }
+
+    } // 'range_detail'
+
+    // Unusual use of 'using' is intended to bring filter_range into the boost namespace
+    // while leaving the mechanics of the '|' operator in range_detail and maintain
+    // argument dependent lookup.
+    // filter_range logically needs to be in the boost namespace to allow user of
+    // the library to define the return type for filter()
+    using range_detail::filtered_range;
+
+    namespace adaptors
+    {
+        namespace
+        {
+            const range_detail::forwarder<range_detail::filter_holder>
+                    filtered =
+                       range_detail::forwarder<range_detail::filter_holder>();
+        }
+
+        template<class SinglePassRange, class Predicate>
+        inline filtered_range<Predicate, SinglePassRange>
+        filter(SinglePassRange& rng, Predicate filter_pred)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<SinglePassRange>));
+
+            return range_detail::filtered_range<
+                Predicate, SinglePassRange>( filter_pred, rng );
+        }
+
+        template<class SinglePassRange, class Predicate>
+        inline filtered_range<Predicate, const SinglePassRange>
+        filter(const SinglePassRange& rng, Predicate filter_pred)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<const SinglePassRange>));
+
+            return range_detail::filtered_range<
+                Predicate, const SinglePassRange>( filter_pred, rng );
+        }
+    } // 'adaptors'
+
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/range/adaptor/formatted.hpp b/vendor/pdalboost/boost/range/adaptor/formatted.hpp
new file mode 100644
index 0000000..6e4741e
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/formatted.hpp
@@ -0,0 +1,229 @@
+// Boost.Range library
+//
+//  Copyright Neil Groves 2014.
+//  Use, modification and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ADAPTOR_FORMATTED_HPP_INCLUDED
+#define BOOST_RANGE_ADAPTOR_FORMATTED_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/iterator_range_core.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/remove_extent.hpp>
+#include <ostream>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+
+template<typename Sep, typename Prefix, typename Postfix>
+struct formatted_holder
+{
+    typedef typename pdalboost::mpl::if_<
+        pdalboost::is_array<Sep>,
+        const typename pdalboost::remove_extent<Sep>::type*,
+        Sep
+    >::type separator_t;
+
+    typedef typename pdalboost::mpl::if_<
+        pdalboost::is_array<Prefix>,
+        const typename pdalboost::remove_extent<Prefix>::type*,
+        Prefix
+    >::type prefix_t;
+
+    typedef typename pdalboost::mpl::if_<
+        pdalboost::is_array<Postfix>,
+        const typename pdalboost::remove_extent<Postfix>::type*,
+        Postfix
+    >::type postfix_t;
+
+    formatted_holder(
+        const separator_t& sep,
+        const prefix_t& prefix,
+        const postfix_t& postfix)
+        : m_sep(sep)
+        , m_prefix(prefix)
+        , m_postfix(postfix)
+    {
+    }
+
+    separator_t m_sep;
+    prefix_t m_prefix;
+    postfix_t m_postfix;
+};
+
+template<typename Iter, typename Sep, typename Prefix, typename Postfix>
+class formatted_range
+        : public pdalboost::iterator_range<Iter>
+{
+    typedef formatted_holder<Sep,Prefix,Postfix> holder_t;
+public:
+    formatted_range(Iter first, Iter last, const holder_t& holder)
+        : pdalboost::iterator_range<Iter>(first, last)
+        , m_holder(holder)
+    {
+    }
+
+    template<typename OStream>
+    void write(OStream& out) const
+    {
+        Iter it(this->begin());
+        out << m_holder.m_prefix;
+        if (it != this->end())
+        {
+            out << *it;
+            for (++it; it != this->end(); ++it)
+            {
+                out << m_holder.m_sep << *it;
+            }
+        }
+        out << m_holder.m_postfix;
+    }
+
+private:
+    holder_t m_holder;
+};
+
+template<
+    typename SinglePassRange,
+    typename Sep,
+    typename Prefix,
+    typename Postfix
+>
+inline range_detail::formatted_range<
+    typename range_iterator<const SinglePassRange>::type, Sep, Prefix, Postfix
+>
+operator|(
+    const SinglePassRange& rng,
+    const range_detail::formatted_holder<Sep,Prefix,Postfix>& holder
+)
+{
+    typedef typename range_iterator<const SinglePassRange>::type iterator;
+    return range_detail::formatted_range<iterator, Sep, Prefix, Postfix>(
+        pdalboost::begin(rng), pdalboost::end(rng), holder);
+}
+
+template<typename Char, typename Traits, typename Iter, typename Sep,
+    typename Prefix, typename Postfix>
+std::basic_ostream<Char, Traits>&
+operator<<(
+        std::basic_ostream<Char, Traits>& out,
+        const formatted_range<Iter, Sep, Prefix, Postfix>& writer)
+{
+    writer.write(out);
+    return out;
+}
+
+    } // namespace range_detail
+
+    namespace adaptors
+    {
+
+template<typename Sep, typename Prefix, typename Postfix>
+range_detail::formatted_holder<Sep, Prefix, Postfix>
+formatted(const Sep& sep, const Prefix& prefix, const Postfix& postfix)
+{
+    return range_detail::formatted_holder<Sep,Prefix,Postfix>(
+                sep, prefix, postfix);
+}
+
+template<typename Sep, typename Prefix>
+range_detail::formatted_holder<Sep, Prefix, char>
+formatted(const Sep& sep, const Prefix& prefix)
+{
+    return range_detail::formatted_holder<Sep, Prefix, char>(sep, prefix, '}');
+}
+
+template<typename Sep>
+range_detail::formatted_holder<Sep, char, char>
+formatted(const Sep& sep)
+{
+    return range_detail::formatted_holder<Sep, char, char>(sep, '{', '}');
+}
+
+inline range_detail::formatted_holder<char, char, char>
+formatted()
+{
+    return range_detail::formatted_holder<char, char, char>(',', '{', '}');
+}
+
+using range_detail::formatted_range;
+
+template<typename SinglePassRange, typename Sep, typename Prefix,
+         typename Postfix>
+inline pdalboost::range_detail::formatted_range<
+    typename pdalboost::range_iterator<const SinglePassRange>::type,
+    Sep, Prefix, Postfix
+>
+format(
+    const SinglePassRange& rng,
+    const Sep& sep,
+    const Prefix& prefix,
+    const Postfix& postfix
+)
+{
+    typedef typename pdalboost::range_iterator<const SinglePassRange>::type
+                iterator_t;
+
+    typedef pdalboost::range_detail::formatted_range<
+                iterator_t, Sep, Prefix, Postfix>       result_t;
+
+    typedef pdalboost::range_detail::formatted_holder<Sep, Prefix, Postfix>
+                holder_t;
+
+    return result_t(pdalboost::begin(rng), pdalboost::end(rng),
+                    holder_t(sep, prefix, postfix));
+}
+
+template<typename SinglePassRange, typename Sep, typename Prefix>
+inline pdalboost::range_detail::formatted_range<
+    typename pdalboost::range_iterator<const SinglePassRange>::type,
+    Sep, Prefix, char
+>
+format(
+    const SinglePassRange& rng,
+    const Sep& sep,
+    const Prefix& prefix)
+{
+    return adaptors::format<SinglePassRange, Sep, Prefix, char>(rng, sep, prefix, '}');
+}
+
+template<typename SinglePassRange, typename Sep>
+inline pdalboost::range_detail::formatted_range<
+    typename pdalboost::range_iterator<const SinglePassRange>::type,
+    Sep, char, char
+>
+format(const SinglePassRange& rng, const Sep& sep)
+{
+    return adaptors::format<SinglePassRange, Sep, char, char>(rng, sep, '{', '}');
+}
+
+template<typename SinglePassRange>
+inline pdalboost::range_detail::formatted_range<
+    typename pdalboost::range_iterator<const SinglePassRange>::type,
+    char, char, char
+>
+format(const SinglePassRange& rng)
+{
+    return adaptors::format<SinglePassRange, char, char, char>(rng, ',', '{', '}');
+}
+
+    } // namespace adaptors
+
+    namespace range
+    {
+        using pdalboost::range_detail::formatted_range;
+    } // namespace range
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/adaptor/indexed.hpp b/vendor/pdalboost/boost/range/adaptor/indexed.hpp
new file mode 100644
index 0000000..20d5eda
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/indexed.hpp
@@ -0,0 +1,370 @@
+//  Copyright 2014 Neil Groves
+//
+//  Copyright (c) 2010 Ilya Murav'jov
+// 
+//  Use, modification and distribution is subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// Credits:
+//  My (Neil's) first indexed adaptor was hindered by having the underlying
+//  iterator return the same reference as the wrapped iterator. This meant that
+//  to obtain the index one had to get to the index_iterator and call the
+//  index() function on it. Ilya politely pointed out that this was useless in
+//  a number of scenarios since one naturally hides the use of iterators in
+//  good range-based code. Ilya provided a new interface (which has remained)
+//  and a first implementation. Much of this original implementation has
+//  been simplified and now supports more compilers and platforms.
+//
+#ifndef BOOST_RANGE_ADAPTOR_INDEXED_HPP_INCLUDED
+#define BOOST_RANGE_ADAPTOR_INDEXED_HPP_INCLUDED
+
+#include <boost/range/config.hpp>
+#include <boost/range/adaptor/argument_fwd.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/traversal.hpp>
+#include <boost/range/size.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+
+#include <boost/tuple/tuple.hpp>
+
+namespace pdalboost
+{
+    namespace adaptors
+    {
+
+struct indexed
+{
+    explicit indexed(std::ptrdiff_t x = 0)
+        : val(x)
+    {
+    }
+    std::ptrdiff_t val;
+};
+
+    } // namespace adaptors
+
+    namespace range
+    {
+
+// Why yet another "pair" class:
+// - std::pair can't store references
+// - no need for typing for index type (default to "std::ptrdiff_t"); this is
+// useful in BOOST_FOREACH() expressions that have pitfalls with commas
+//   ( see http://www.boost.org/doc/libs/1_44_0/doc/html/foreach/pitfalls.html )
+// - meaningful access functions index(), value()
+template<class T, class Indexable = std::ptrdiff_t>
+class index_value
+    : public tuple<Indexable, T>
+{
+    typedef tuple<Indexable, T> base_t;
+
+    template<int N>
+    struct iv_types
+    {
+        typedef typename tuples::element<N, base_t>::type n_type;
+
+        typedef typename tuples::access_traits<n_type>::non_const_type non_const_type;
+        typedef typename tuples::access_traits<n_type>::const_type const_type;
+    };
+
+public:
+    typedef typename iv_types<0>::non_const_type index_type;
+    typedef typename iv_types<0>::const_type const_index_type;
+    typedef typename iv_types<1>::non_const_type value_type;
+    typedef typename iv_types<1>::const_type const_value_type;
+
+    index_value()
+    {
+    }
+
+    index_value(typename tuples::access_traits<Indexable>::parameter_type t0,
+                typename tuples::access_traits<T>::parameter_type t1)
+        : base_t(t0, t1)
+    {
+    }
+
+    // member functions index(), value() (non-const and const)
+    index_type index()
+    {
+        return pdalboost::tuples::get<0>(*this);
+    }
+
+    const_index_type index() const
+    {
+        return pdalboost::tuples::get<0>(*this);
+    }
+
+    value_type value()
+    {
+        return pdalboost::tuples::get<1>(*this);
+    }
+
+    const_value_type value() const
+    {
+        return pdalboost::tuples::get<1>(*this);
+    }
+};
+
+    } // namespace range
+
+namespace range_detail
+{
+
+template<typename Iter>
+struct indexed_iterator_value_type
+{
+    typedef ::pdalboost::range::index_value<
+        typename iterator_reference<Iter>::type,
+        typename iterator_difference<Iter>::type
+    > type;
+};
+
+// Meta-function to get the traversal for the range and therefore iterator
+// returned by the indexed adaptor for a specified iterator type.
+//
+// Random access -> Random access
+// Bidirectional -> Forward
+// Forward -> Forward
+// SinglePass -> SinglePass
+//
+// The rationale for demoting a Bidirectional input to Forward is that the end
+// iterator cannot cheaply have an index computed for it. Therefore I chose to
+// demote to forward traversal. I can maintain the ability to traverse randomly
+// when the input is Random Access since the index for the end iterator is cheap
+// to compute.
+template<typename Iter>
+struct indexed_traversal
+{
+private:
+    typedef typename iterator_traversal<Iter>::type wrapped_traversal;
+
+public:
+
+    typedef typename mpl::if_<
+        is_convertible<wrapped_traversal, random_access_traversal_tag>,
+        random_access_traversal_tag,
+        typename mpl::if_<
+            is_convertible<wrapped_traversal, bidirectional_traversal_tag>,
+            forward_traversal_tag,
+            wrapped_traversal
+        >::type
+    >::type type;
+};
+
+template<typename Iter>
+class indexed_iterator
+    : public iterator_facade<
+            indexed_iterator<Iter>,
+            typename indexed_iterator_value_type<Iter>::type,
+            typename indexed_traversal<Iter>::type,
+            typename indexed_iterator_value_type<Iter>::type,
+            typename iterator_difference<Iter>::type
+        >
+{
+public:
+    typedef Iter wrapped;
+
+private:
+    typedef iterator_facade<
+        indexed_iterator<wrapped>,
+        typename indexed_iterator_value_type<wrapped>::type,
+        typename indexed_traversal<wrapped>::type,
+        typename indexed_iterator_value_type<wrapped>::type,
+        typename iterator_difference<wrapped>::type
+    > base_t;
+
+public:
+    typedef typename base_t::difference_type difference_type;
+    typedef typename base_t::reference reference;
+    typedef typename base_t::difference_type index_type;
+
+    indexed_iterator()
+        : m_it()
+        , m_index()
+    {
+    }
+
+    template<typename OtherWrapped>
+    indexed_iterator(
+        const indexed_iterator<OtherWrapped>& other,
+        typename enable_if<is_convertible<OtherWrapped, wrapped> >::type* = 0
+    )
+        : m_it(other.get())
+        , m_index(other.get_index())
+    {
+    }
+
+    explicit indexed_iterator(wrapped it, index_type index)
+        : m_it(it)
+        , m_index(index)
+    {
+    }
+
+    wrapped get() const
+    {
+        return m_it;
+    }
+
+    index_type get_index() const
+    {
+        return m_index;
+    }
+
+ private:
+    friend class pdalboost::iterator_core_access;
+
+    reference dereference() const
+    {
+        return reference(m_index, *m_it);
+    }
+
+    bool equal(const indexed_iterator& other) const
+    {
+        return m_it == other.m_it;
+    }
+
+    void increment()
+    {
+        ++m_index;
+        ++m_it;
+    }
+
+    void decrement()
+    {
+        BOOST_ASSERT_MSG(m_index > 0, "indexed Iterator out of bounds");
+        --m_index;
+        --m_it;
+    }
+
+    void advance(index_type n)
+    {
+        m_index += n;
+        BOOST_ASSERT_MSG(m_index >= 0, "indexed Iterator out of bounds");
+        m_it += n;
+    }
+
+    difference_type distance_to(const indexed_iterator& other) const
+    {
+        return other.m_it - m_it;
+    }
+
+    wrapped m_it;
+    index_type m_index;
+};
+
+template<typename SinglePassRange>
+struct indexed_range
+    : iterator_range<
+        indexed_iterator<
+            typename range_iterator<SinglePassRange>::type
+        >
+    >
+{
+    typedef iterator_range<
+        indexed_iterator<
+            typename range_iterator<SinglePassRange>::type
+        >
+    > base_t;
+
+    BOOST_RANGE_CONCEPT_ASSERT((
+        pdalboost::SinglePassRangeConcept<SinglePassRange>));
+public:
+    typedef indexed_iterator<
+        typename range_iterator<SinglePassRange>::type
+    > iterator;
+
+    // Constructor for non-random access iterators.
+    // This sets the end iterator index to i despite this being incorrect it
+    // is never observable since bidirectional iterators are demoted to
+    // forward iterators.
+    indexed_range(
+        typename base_t::difference_type i,
+        SinglePassRange& r,
+        single_pass_traversal_tag
+        )
+        : base_t(iterator(pdalboost::begin(r), i),
+                 iterator(pdalboost::end(r), i))
+    {
+    }
+
+    indexed_range(
+        typename base_t::difference_type i,
+        SinglePassRange& r,
+        random_access_traversal_tag
+        )
+        : base_t(iterator(pdalboost::begin(r), i),
+                 iterator(pdalboost::end(r), i + pdalboost::size(r)))
+    {
+    }
+};
+
+    } // namespace range_detail 
+
+    using range_detail::indexed_range;
+
+    namespace adaptors
+    {
+
+template<class SinglePassRange>
+inline indexed_range<SinglePassRange>
+operator|(SinglePassRange& r, indexed e)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((
+        pdalboost::SinglePassRangeConcept<SinglePassRange>
+    ));
+    return indexed_range<SinglePassRange>(
+                e.val, r,
+                typename range_traversal<SinglePassRange>::type());
+}
+
+template<class SinglePassRange>
+inline indexed_range<const SinglePassRange>
+operator|(const SinglePassRange& r, indexed e)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((
+        pdalboost::SinglePassRangeConcept<const SinglePassRange>
+    ));
+    return indexed_range<const SinglePassRange>(
+                e.val, r,
+                typename range_traversal<const SinglePassRange>::type());
+}
+
+template<class SinglePassRange>
+inline indexed_range<SinglePassRange>
+index(
+    SinglePassRange& rng,
+    typename range_difference<SinglePassRange>::type index_value = 0)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((
+        pdalboost::SinglePassRangeConcept<SinglePassRange>
+    ));
+    return indexed_range<SinglePassRange>(
+                index_value, rng,
+                typename range_traversal<SinglePassRange>::type());
+}
+
+template<class SinglePassRange>
+inline indexed_range<const SinglePassRange>
+index(
+    const SinglePassRange& rng,
+    typename range_difference<const SinglePassRange>::type index_value = 0)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((
+        pdalboost::SinglePassRangeConcept<SinglePassRange>
+    ));
+    return indexed_range<const SinglePassRange>(
+                index_value, rng,
+                typename range_traversal<const SinglePassRange>::type());
+}
+
+    } // namespace adaptors
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/adaptor/indirected.hpp b/vendor/pdalboost/boost/range/adaptor/indirected.hpp
new file mode 100644
index 0000000..958e236
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/indirected.hpp
@@ -0,0 +1,100 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ADAPTOR_INDIRECTED_HPP
+#define BOOST_RANGE_ADAPTOR_INDIRECTED_HPP
+
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/iterator/indirect_iterator.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        template< class R >
+        struct indirected_range :
+            public pdalboost::iterator_range<
+                        pdalboost::indirect_iterator<
+                            BOOST_DEDUCED_TYPENAME range_iterator<R>::type
+                        >
+                    >
+        {
+        private:
+            typedef pdalboost::iterator_range<
+                        pdalboost::indirect_iterator<
+                            BOOST_DEDUCED_TYPENAME range_iterator<R>::type
+                        >
+                    >
+                base;
+
+        public:
+            explicit indirected_range( R& r )
+                : base( r )
+            { }
+        };
+
+        struct indirect_forwarder {};
+
+        template< class SinglePassRange >
+        inline indirected_range<SinglePassRange>
+        operator|( SinglePassRange& r, indirect_forwarder )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<SinglePassRange>));
+
+            return indirected_range<SinglePassRange>( r );
+        }
+
+        template< class SinglePassRange >
+        inline indirected_range<const SinglePassRange>
+        operator|( const SinglePassRange& r, indirect_forwarder )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<const SinglePassRange>));
+
+            return indirected_range<const SinglePassRange>( r );
+        }
+
+    } // 'range_detail'
+
+    using range_detail::indirected_range;
+
+    namespace adaptors
+    {
+        namespace
+        {
+            const range_detail::indirect_forwarder indirected =
+                                            range_detail::indirect_forwarder();
+        }
+
+        template<class SinglePassRange>
+        inline indirected_range<SinglePassRange>
+        indirect(SinglePassRange& rng)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<SinglePassRange>));
+            return indirected_range<SinglePassRange>(rng);
+        }
+
+        template<class SinglePassRange>
+        inline indirected_range<const SinglePassRange>
+        indirect(const SinglePassRange& rng)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<const SinglePassRange>));
+
+            return indirected_range<const SinglePassRange>(rng);
+        }
+    } // 'adaptors'
+
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/range/adaptor/map.hpp b/vendor/pdalboost/boost/range/adaptor/map.hpp
new file mode 100644
index 0000000..e9345c5
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/map.hpp
@@ -0,0 +1,204 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ADAPTOR_MAP_HPP
+#define BOOST_RANGE_ADAPTOR_MAP_HPP
+
+#include <boost/range/adaptor/transformed.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/value_type.hpp>
+#include <boost/range/reference.hpp>
+#include <boost/range/concepts.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        struct map_keys_forwarder {};
+        struct map_values_forwarder {};
+
+        template< class Map >
+        struct select_first
+        {
+            typedef BOOST_DEDUCED_TYPENAME range_reference<const Map>::type argument_type;
+            typedef const BOOST_DEDUCED_TYPENAME range_value<const Map>::type::first_type& result_type;
+
+            result_type operator()( argument_type r ) const
+            {
+                return r.first;
+            }
+        };
+
+        template< class Map >
+        struct select_second_mutable
+        {
+            typedef BOOST_DEDUCED_TYPENAME range_reference<Map>::type argument_type;
+            typedef BOOST_DEDUCED_TYPENAME range_value<Map>::type::second_type& result_type;
+
+            result_type operator()( argument_type r ) const
+            {
+                return r.second;
+            }
+        };
+
+        template< class Map >
+        struct select_second_const
+        {
+            typedef BOOST_DEDUCED_TYPENAME range_reference<const Map>::type argument_type;
+            typedef const BOOST_DEDUCED_TYPENAME range_value<const Map>::type::second_type& result_type;
+
+            result_type operator()( argument_type r ) const
+            {
+                return r.second;
+            }
+        };
+
+        template<class StdPairRng>
+        class select_first_range
+            : public transformed_range<
+                        select_first<StdPairRng>,
+                        const StdPairRng>
+        {
+            typedef transformed_range<select_first<StdPairRng>, const StdPairRng> base;
+        public:
+            typedef select_first<StdPairRng> transform_fn_type;
+            typedef const StdPairRng source_range_type;
+
+            select_first_range(transform_fn_type fn, source_range_type& rng)
+                : base(fn, rng)
+            {
+            }
+
+            select_first_range(const base& other) : base(other) {}
+        };
+
+        template<class StdPairRng>
+        class select_second_mutable_range
+            : public transformed_range<
+                        select_second_mutable<StdPairRng>,
+                        StdPairRng>
+        {
+            typedef transformed_range<select_second_mutable<StdPairRng>, StdPairRng> base;
+        public:
+            typedef select_second_mutable<StdPairRng> transform_fn_type;
+            typedef StdPairRng source_range_type;
+
+            select_second_mutable_range(transform_fn_type fn, source_range_type& rng)
+                : base(fn, rng)
+            {
+            }
+
+            select_second_mutable_range(const base& other) : base(other) {}
+        };
+
+        template<class StdPairRng>
+        class select_second_const_range
+            : public transformed_range<
+                        select_second_const<StdPairRng>,
+                        const StdPairRng>
+        {
+            typedef transformed_range<select_second_const<StdPairRng>, const StdPairRng> base;
+        public:
+            typedef select_second_const<StdPairRng> transform_fn_type;
+            typedef const StdPairRng source_range_type;
+
+            select_second_const_range(transform_fn_type fn, source_range_type& rng)
+                : base(fn, rng)
+            {
+            }
+
+            select_second_const_range(const base& other) : base(other) {}
+        };
+
+        template< class StdPairRng >
+        inline select_first_range<StdPairRng>
+        operator|( const StdPairRng& r, map_keys_forwarder )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<const StdPairRng>));
+
+            return operator|( r,
+                pdalboost::adaptors::transformed( select_first<StdPairRng>() ) );
+        }
+
+        template< class StdPairRng >
+        inline select_second_mutable_range<StdPairRng>
+        operator|( StdPairRng& r, map_values_forwarder )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<StdPairRng>));
+
+            return operator|( r,
+                pdalboost::adaptors::transformed( select_second_mutable<StdPairRng>() ) );
+        }
+
+        template< class StdPairRng >
+        inline select_second_const_range<StdPairRng>
+        operator|( const StdPairRng& r, map_values_forwarder )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<const StdPairRng>));
+
+            return operator|( r,
+                pdalboost::adaptors::transformed( select_second_const<StdPairRng>() ) );
+        }
+
+    } // 'range_detail'
+
+    using range_detail::select_first_range;
+    using range_detail::select_second_mutable_range;
+    using range_detail::select_second_const_range;
+
+    namespace adaptors
+    {
+        namespace
+        {
+            const range_detail::map_keys_forwarder map_keys =
+                                            range_detail::map_keys_forwarder();
+
+            const range_detail::map_values_forwarder map_values =
+                                           range_detail::map_values_forwarder();
+        }
+
+        template<class StdPairRange>
+        inline select_first_range<StdPairRange>
+        keys(const StdPairRange& rng)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<const StdPairRange>));
+
+            return select_first_range<StdPairRange>(
+                range_detail::select_first<StdPairRange>(), rng );
+        }
+
+        template<class StdPairRange>
+        inline select_second_const_range<StdPairRange>
+        values(const StdPairRange& rng)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<const StdPairRange>));
+
+            return select_second_const_range<StdPairRange>(
+                range_detail::select_second_const<StdPairRange>(), rng );
+        }
+
+        template<class StdPairRange>
+        inline select_second_mutable_range<StdPairRange>
+        values(StdPairRange& rng)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<StdPairRange>));
+
+            return select_second_mutable_range<StdPairRange>(
+                range_detail::select_second_mutable<StdPairRange>(), rng );
+        }
+    } // 'adaptors'
+
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/range/adaptor/replaced.hpp b/vendor/pdalboost/boost/range/adaptor/replaced.hpp
new file mode 100644
index 0000000..7113894
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/replaced.hpp
@@ -0,0 +1,169 @@
+// Boost.Range library
+//
+//  Copyright Neil Groves 2007. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ADAPTOR_REPLACED_IMPL_HPP_INCLUDED
+#define BOOST_RANGE_ADAPTOR_REPLACED_IMPL_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/range/adaptor/argument_fwd.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/value_type.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/transform_iterator.hpp>
+#include <boost/optional/optional.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        template< class Value >
+        class replace_value
+        {
+        public:
+            typedef const Value& result_type;
+            typedef const Value& first_argument_type;
+
+            // Rationale:
+            // The default constructor is required to allow the transform
+            // iterator to properly model the iterator concept.
+            replace_value()
+            {
+            }
+
+            replace_value(const Value& from, const Value& to)
+                :   m_impl(data(from, to))
+            {
+            }
+
+            const Value& operator()(const Value& x) const
+            {
+                return (x == m_impl->m_from) ? m_impl->m_to : x;
+            }
+
+        private:
+            struct data
+            {
+                data(const Value& from, const Value& to)
+                    : m_from(from)
+                    , m_to(to)
+                {
+                }
+
+                Value m_from;
+                Value m_to;
+            };
+            pdalboost::optional<data> m_impl;
+        };
+
+        template< class R >
+        class replaced_range :
+            public pdalboost::iterator_range<
+                pdalboost::transform_iterator<
+                    replace_value< BOOST_DEDUCED_TYPENAME range_value<R>::type >,
+                    BOOST_DEDUCED_TYPENAME range_iterator<R>::type > >
+        {
+        private:
+            typedef replace_value< BOOST_DEDUCED_TYPENAME range_value<R>::type > Fn;
+
+            typedef pdalboost::iterator_range<
+                pdalboost::transform_iterator<
+                    replace_value< BOOST_DEDUCED_TYPENAME range_value<R>::type >,
+                    BOOST_DEDUCED_TYPENAME range_iterator<R>::type > > base_t;
+
+        public:
+            typedef BOOST_DEDUCED_TYPENAME range_value<R>::type value_type;
+
+            replaced_range( R& r, value_type from, value_type to )
+                : base_t( make_transform_iterator( pdalboost::begin(r), Fn(from, to) ),
+                          make_transform_iterator( pdalboost::end(r), Fn(from, to) ) )
+            { }
+        };
+
+        template< class T >
+        class replace_holder : public holder2<T>
+        {
+        public:
+            replace_holder( const T& from, const T& to )
+                : holder2<T>(from, to)
+            { }
+        private:
+            // not assignable
+            void operator=(const replace_holder&);
+        };
+
+        template< class SinglePassRange >
+        inline replaced_range<SinglePassRange>
+        operator|(
+            SinglePassRange& r,
+            const replace_holder<
+                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type>& f )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<SinglePassRange>));
+
+            return replaced_range<SinglePassRange>(r, f.val1, f.val2);
+        }
+
+        template< class SinglePassRange >
+        inline replaced_range<const SinglePassRange>
+        operator|(
+            const SinglePassRange& r,
+            const replace_holder<
+                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type>& f)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<const SinglePassRange>));
+
+            return replaced_range<const SinglePassRange>(r, f.val1, f.val2);
+        }
+    } // 'range_detail'
+
+    using range_detail::replaced_range;
+
+    namespace adaptors
+    {
+        namespace
+        {
+            const range_detail::forwarder2<range_detail::replace_holder>
+                replaced =
+                    range_detail::forwarder2<range_detail::replace_holder>();
+        }
+
+        template<class SinglePassRange>
+        inline replaced_range<SinglePassRange>
+        replace(SinglePassRange& rng,
+                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type from,
+                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type to)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<SinglePassRange>));
+
+            return replaced_range<SinglePassRange>(rng, from, to);
+        }
+
+        template<class SinglePassRange>
+        inline replaced_range<const SinglePassRange>
+        replace(const SinglePassRange& rng,
+                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type from,
+                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type to)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<const SinglePassRange>));
+
+            return replaced_range<const SinglePassRange>(rng, from ,to);
+        }
+
+    } // 'adaptors'
+} // 'boost'
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/adaptor/replaced_if.hpp b/vendor/pdalboost/boost/range/adaptor/replaced_if.hpp
new file mode 100644
index 0000000..0406327
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/replaced_if.hpp
@@ -0,0 +1,177 @@
+// Boost.Range library
+//
+//  Copyright Neil Groves 2007. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ADAPTOR_REPLACED_IF_IMPL_HPP_INCLUDED
+#define BOOST_RANGE_ADAPTOR_REPLACED_IF_IMPL_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/range/adaptor/argument_fwd.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/value_type.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/transform_iterator.hpp>
+#include <boost/optional/optional.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        template< class Pred, class Value >
+        class replace_value_if
+        {
+        public:
+            typedef const Value& result_type;
+            typedef const Value& first_argument_type;
+
+            // Rationale:
+            // required to allow the iterator to be default constructible.
+            replace_value_if()
+            {
+            }
+
+            replace_value_if(const Pred& pred, const Value& to)
+                : m_impl(data(pred, to))
+            {
+            }
+
+            const Value& operator()(const Value& x) const
+            {
+                return m_impl->m_pred(x) ? m_impl->m_to : x;
+            }
+
+        private:
+            struct data
+            {
+                data(const Pred& p, const Value& t)
+                    : m_pred(p), m_to(t)
+                {
+                }
+
+                Pred  m_pred;
+                Value m_to;
+            };
+            pdalboost::optional<data> m_impl;
+        };
+
+        template< class Pred, class R >
+        class replaced_if_range :
+            public pdalboost::iterator_range<
+                pdalboost::transform_iterator<
+                    replace_value_if< Pred, BOOST_DEDUCED_TYPENAME range_value<R>::type >,
+                    BOOST_DEDUCED_TYPENAME range_iterator<R>::type > >
+        {
+        private:
+            typedef replace_value_if< Pred, BOOST_DEDUCED_TYPENAME range_value<R>::type > Fn;
+
+            typedef pdalboost::iterator_range<
+                pdalboost::transform_iterator<
+                    replace_value_if< Pred, BOOST_DEDUCED_TYPENAME range_value<R>::type >,
+                    BOOST_DEDUCED_TYPENAME range_iterator<R>::type > > base_t;
+
+        public:
+            typedef BOOST_DEDUCED_TYPENAME range_value<R>::type value_type;
+
+            replaced_if_range( R& r, const Pred& pred, value_type to )
+                : base_t( make_transform_iterator( pdalboost::begin(r), Fn(pred, to) ),
+                          make_transform_iterator( pdalboost::end(r), Fn(pred, to) ) )
+            { }
+        };
+
+        template< class Pred, class T >
+        class replace_if_holder
+        {
+        public:
+            replace_if_holder( const Pred& pred, const T& to )
+                : m_pred(pred), m_to(to)
+            { }
+
+            const Pred& pred() const { return m_pred; }
+            const T& to() const { return m_to; }
+
+        private:
+            Pred m_pred;
+            T m_to;
+        };
+
+        template< class Pred, class SinglePassRange >
+        inline replaced_if_range<Pred, SinglePassRange>
+        operator|(
+            SinglePassRange& r,
+            const replace_if_holder<
+                Pred,
+                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type>& f)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<SinglePassRange>));
+
+            return replaced_if_range<Pred, SinglePassRange>(
+                r, f.pred(), f.to());
+        }
+
+        template< class Pred, class SinglePassRange >
+        inline replaced_if_range<Pred, const SinglePassRange>
+        operator|(
+            const SinglePassRange& r,
+            const replace_if_holder<
+                Pred,
+                BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type>& f)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<const SinglePassRange>));
+
+            return replaced_if_range<Pred, const SinglePassRange>(
+                r, f.pred(), f.to());
+        }
+    } // 'range_detail'
+
+    using range_detail::replaced_if_range;
+
+    namespace adaptors
+    {
+        namespace
+        {
+            const range_detail::forwarder2TU<range_detail::replace_if_holder>
+                replaced_if =
+                    range_detail::forwarder2TU<range_detail::replace_if_holder>();
+        }
+
+        template<class Pred, class SinglePassRange>
+        inline replaced_if_range<Pred, SinglePassRange>
+        replace_if(SinglePassRange& rng, Pred pred,
+                   BOOST_DEDUCED_TYPENAME range_value<SinglePassRange>::type to)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<SinglePassRange>));
+
+            return range_detail::replaced_if_range<Pred, SinglePassRange>(
+                rng, pred, to);
+        }
+
+        template<class Pred, class SinglePassRange>
+        inline replaced_if_range<Pred, const SinglePassRange>
+        replace_if(
+            const SinglePassRange& rng,
+            Pred pred,
+            BOOST_DEDUCED_TYPENAME range_value<const SinglePassRange>::type to)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<const SinglePassRange>));
+
+            return range_detail::replaced_if_range<Pred, const SinglePassRange>(
+                rng, pred, to);
+        }
+    } // 'adaptors'
+
+} // 'boost'
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/adaptor/reversed.hpp b/vendor/pdalboost/boost/range/adaptor/reversed.hpp
new file mode 100644
index 0000000..e4132b0
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/reversed.hpp
@@ -0,0 +1,103 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ADAPTOR_REVERSED_HPP
+#define BOOST_RANGE_ADAPTOR_REVERSED_HPP
+
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/iterator/reverse_iterator.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        template< class R >
+        struct reversed_range : 
+            public pdalboost::iterator_range< 
+                      pdalboost::reverse_iterator<
+                        BOOST_DEDUCED_TYPENAME range_iterator<R>::type 
+                                              >
+                                         >
+        {
+        private:
+            typedef pdalboost::iterator_range< 
+                      pdalboost::reverse_iterator<
+                        BOOST_DEDUCED_TYPENAME range_iterator<R>::type 
+                                              >
+                                         >
+                base;
+            
+        public:
+            typedef pdalboost::reverse_iterator<BOOST_DEDUCED_TYPENAME range_iterator<R>::type> iterator;
+
+            explicit reversed_range( R& r ) 
+                : base( iterator(pdalboost::end(r)), iterator(pdalboost::begin(r)) )
+            { }
+        };
+
+        struct reverse_forwarder {};
+        
+        template< class BidirectionalRange >
+        inline reversed_range<BidirectionalRange> 
+        operator|( BidirectionalRange& r, reverse_forwarder )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                BidirectionalRangeConcept<BidirectionalRange>));
+
+            return reversed_range<BidirectionalRange>( r );
+        }
+
+        template< class BidirectionalRange >
+        inline reversed_range<const BidirectionalRange> 
+        operator|( const BidirectionalRange& r, reverse_forwarder )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                BidirectionalRangeConcept<const BidirectionalRange>));
+
+            return reversed_range<const BidirectionalRange>( r ); 
+        }
+        
+    } // 'range_detail'
+    
+    using range_detail::reversed_range;
+
+    namespace adaptors
+    { 
+        namespace
+        {
+            const range_detail::reverse_forwarder reversed = 
+                                            range_detail::reverse_forwarder();
+        }
+        
+        template<class BidirectionalRange>
+        inline reversed_range<BidirectionalRange>
+        reverse(BidirectionalRange& rng)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                BidirectionalRangeConcept<BidirectionalRange>));
+
+            return reversed_range<BidirectionalRange>(rng);
+        }
+        
+        template<class BidirectionalRange>
+        inline reversed_range<const BidirectionalRange>
+        reverse(const BidirectionalRange& rng)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                BidirectionalRangeConcept<const BidirectionalRange>));
+
+            return reversed_range<const BidirectionalRange>(rng);
+        }
+    } // 'adaptors'
+    
+} // 'boost'
+
+#endif
diff --git a/vendor/pdalboost/boost/range/adaptor/sliced.hpp b/vendor/pdalboost/boost/range/adaptor/sliced.hpp
new file mode 100644
index 0000000..00fbd53
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/sliced.hpp
@@ -0,0 +1,96 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ADAPTOR_SLICED_HPP
+#define BOOST_RANGE_ADAPTOR_SLICED_HPP
+
+#include <boost/range/adaptor/argument_fwd.hpp>
+#include <boost/range/size_type.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/concepts.hpp>
+
+namespace pdalboost
+{
+    namespace adaptors
+    {
+        struct sliced
+        {
+            sliced(std::size_t t_, std::size_t u_)
+                : t(t_), u(u_) {}
+            std::size_t t;
+            std::size_t u;
+        };
+
+        template< class RandomAccessRange >
+        class sliced_range : public pdalboost::iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type >
+        {
+            typedef pdalboost::iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type > base_t;
+        public:
+            template<typename Rng, typename T, typename U>
+            sliced_range(Rng& rng, T t, U u)
+                : base_t(pdalboost::next(pdalboost::begin(rng), t),
+                         pdalboost::next(pdalboost::begin(rng), u))
+            {
+            }
+        };
+
+        template< class RandomAccessRange >
+        inline sliced_range<RandomAccessRange>
+        slice( RandomAccessRange& rng, std::size_t t, std::size_t u )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                RandomAccessRangeConcept<RandomAccessRange>));
+
+            BOOST_ASSERT( t <= u && "error in slice indices" );
+            BOOST_ASSERT( static_cast<std::size_t>(pdalboost::size(rng)) >= u &&
+                          "second slice index out of bounds" );
+
+            return sliced_range<RandomAccessRange>(rng, t, u);
+        }
+
+        template< class RandomAccessRange >
+        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const RandomAccessRange>::type >
+        slice( const RandomAccessRange& rng, std::size_t t, std::size_t u )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                RandomAccessRangeConcept<const RandomAccessRange>));
+
+            BOOST_ASSERT( t <= u && "error in slice indices" );
+            BOOST_ASSERT( static_cast<std::size_t>(pdalboost::size(rng)) >= u &&
+                          "second slice index out of bounds" );
+
+            return sliced_range<const RandomAccessRange>(rng, t, u);
+        }
+
+        template< class RandomAccessRange >
+        inline sliced_range<RandomAccessRange>
+        operator|( RandomAccessRange& r, const sliced& f )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                RandomAccessRangeConcept<RandomAccessRange>));
+
+            return sliced_range<RandomAccessRange>( r, f.t, f.u );
+        }
+
+        template< class RandomAccessRange >
+        inline sliced_range<const RandomAccessRange>
+        operator|( const RandomAccessRange& r, const sliced& f )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                RandomAccessRangeConcept<const RandomAccessRange>));
+
+            return sliced_range<const RandomAccessRange>( r, f.t, f.u );
+        }
+
+    } // namespace adaptors
+    using adaptors::sliced_range;
+} // namespace pdalboost
+
+#endif
diff --git a/vendor/pdalboost/boost/range/adaptor/strided.hpp b/vendor/pdalboost/boost/range/adaptor/strided.hpp
new file mode 100644
index 0000000..fec9d89
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/strided.hpp
@@ -0,0 +1,697 @@
+// Boost.Range library
+//
+//  Copyright Neil Groves 2007. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ADAPTOR_STRIDED_HPP_INCLUDED
+#define BOOST_RANGE_ADAPTOR_STRIDED_HPP_INCLUDED
+
+#include <boost/range/adaptor/argument_fwd.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <iterator>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        // strided_iterator for wrapping a forward traversal iterator
+        template<class BaseIterator, class Category>
+        class strided_iterator
+            : public iterator_facade<
+                strided_iterator<BaseIterator, Category>
+                , typename iterator_value<BaseIterator>::type
+                , forward_traversal_tag
+                , typename iterator_reference<BaseIterator>::type
+                , typename iterator_difference<BaseIterator>::type
+            >
+        {
+            friend class ::pdalboost::iterator_core_access;
+
+            typedef iterator_facade<
+                strided_iterator<BaseIterator, Category>
+                , typename iterator_value<BaseIterator>::type
+                , forward_traversal_tag
+                , typename iterator_reference<BaseIterator>::type
+                , typename iterator_difference<BaseIterator>::type
+            > super_t;
+
+        public:
+            typedef typename super_t::difference_type difference_type;
+            typedef typename super_t::reference reference;
+            typedef BaseIterator base_iterator;
+            typedef std::forward_iterator_tag iterator_category;
+
+            strided_iterator()
+                : m_it()
+                , m_last()
+                , m_stride()
+            {
+            }
+
+            strided_iterator(base_iterator   it,
+                             base_iterator   last,
+                             difference_type stride)
+                : m_it(it)
+                , m_last(last)
+                , m_stride(stride)
+            {
+            }
+
+            template<class OtherIterator>
+            strided_iterator(
+                const strided_iterator<OtherIterator, Category>& other,
+                typename enable_if_convertible<
+                    OtherIterator,
+                    base_iterator
+                >::type* = 0
+            )
+                : m_it(other.base())
+                , m_last(other.base_end())
+                , m_stride(other.get_stride())
+            {
+            }
+
+            base_iterator base() const
+            {
+                return m_it;
+            }
+
+            base_iterator base_end() const
+            {
+                return m_last;
+            }
+
+            difference_type get_stride() const
+            {
+                return m_stride;
+            }
+
+        private:
+            void increment()
+            {
+                for (difference_type i = 0;
+                        (m_it != m_last) && (i < m_stride); ++i)
+                {
+                    ++m_it;
+                }
+            }
+
+            reference dereference() const
+            {
+                return *m_it;
+            }
+
+            template<class OtherIterator>
+            bool equal(
+                const strided_iterator<OtherIterator, Category>& other,
+                typename enable_if_convertible<
+                    OtherIterator,
+                    base_iterator
+                >::type* = 0) const
+            {
+                return m_it == other.m_it;
+            }
+
+            base_iterator m_it;
+            base_iterator m_last;
+            difference_type m_stride;
+        };
+
+        // strided_iterator for wrapping a bidirectional iterator
+        template<class BaseIterator>
+        class strided_iterator<BaseIterator, bidirectional_traversal_tag>
+            : public iterator_facade<
+                strided_iterator<BaseIterator, bidirectional_traversal_tag>
+                , typename iterator_value<BaseIterator>::type
+                , bidirectional_traversal_tag
+                , typename iterator_reference<BaseIterator>::type
+                , typename iterator_difference<BaseIterator>::type
+            >
+        {
+            friend class ::pdalboost::iterator_core_access;
+
+            typedef iterator_facade<
+                strided_iterator<BaseIterator, bidirectional_traversal_tag>
+                , typename iterator_value<BaseIterator>::type
+                , bidirectional_traversal_tag
+                , typename iterator_reference<BaseIterator>::type
+                , typename iterator_difference<BaseIterator>::type
+            > super_t;
+        public:
+            typedef typename super_t::difference_type difference_type;
+            typedef typename super_t::reference reference;
+            typedef BaseIterator base_iterator;
+            typedef typename pdalboost::make_unsigned<difference_type>::type
+                        size_type;
+            typedef std::bidirectional_iterator_tag iterator_category;
+
+            strided_iterator()
+                : m_it()
+                , m_offset()
+                , m_index()
+                , m_stride()
+            {
+            }
+
+            strided_iterator(base_iterator   it,
+                             size_type       index,
+                             difference_type stride)
+                : m_it(it)
+                , m_offset()
+                , m_index(index)
+                , m_stride(stride)
+            {
+                if (stride && ((m_index % stride) != 0))
+                    m_index += (stride - (m_index % stride));
+            }
+
+            template<class OtherIterator>
+            strided_iterator(
+                const strided_iterator<
+                    OtherIterator,
+                    bidirectional_traversal_tag
+                >& other,
+                typename enable_if_convertible<
+                    OtherIterator,
+                    base_iterator
+                >::type* = 0
+            )
+                : m_it(other.base())
+                , m_offset(other.get_offset())
+                , m_index(other.get_index())
+                , m_stride(other.get_stride())
+            {
+            }
+
+            base_iterator base() const
+            {
+                return m_it;
+            }
+
+            difference_type get_offset() const
+            {
+                return m_offset;
+            }
+
+            size_type get_index() const
+            {
+                return m_index;
+            }
+
+            difference_type get_stride() const
+            {
+                return m_stride;
+            }
+
+        private:
+            void increment()
+            {
+                m_offset += m_stride;
+            }
+
+            void decrement()
+            {
+                m_offset -= m_stride;
+            }
+
+            reference dereference() const
+            {
+                update();
+                return *m_it;
+            }
+
+            void update() const
+            {
+                std::advance(m_it, m_offset);
+                m_index += m_offset;
+                m_offset = 0;
+            }
+
+            template<class OtherIterator>
+            bool equal(
+                const strided_iterator<
+                    OtherIterator,
+                    bidirectional_traversal_tag
+                >& other,
+                typename enable_if_convertible<
+                    OtherIterator,
+                    base_iterator
+                >::type* = 0) const
+            {
+                return (m_index + m_offset) ==
+                            (other.get_index() + other.get_offset());
+            }
+
+            mutable base_iterator m_it;
+            mutable difference_type m_offset;
+            mutable size_type m_index;
+            difference_type m_stride;
+        };
+
+        // strided_iterator implementation for wrapping a random access iterator
+        template<class BaseIterator>
+        class strided_iterator<BaseIterator, random_access_traversal_tag>
+            : public iterator_facade<
+                strided_iterator<BaseIterator, random_access_traversal_tag>
+                , typename iterator_value<BaseIterator>::type
+                , random_access_traversal_tag
+                , typename iterator_reference<BaseIterator>::type
+                , typename iterator_difference<BaseIterator>::type
+            >
+        {
+            friend class ::pdalboost::iterator_core_access;
+
+            typedef iterator_facade<
+                strided_iterator<BaseIterator, random_access_traversal_tag>
+                , typename iterator_value<BaseIterator>::type
+                , random_access_traversal_tag
+                , typename iterator_reference<BaseIterator>::type
+                , typename iterator_difference<BaseIterator>::type
+            > super_t;
+        public:
+            typedef typename super_t::difference_type difference_type;
+            typedef typename super_t::reference reference;
+            typedef BaseIterator base_iterator;
+            typedef std::random_access_iterator_tag iterator_category;
+
+            strided_iterator()
+                : m_it()
+                , m_first()
+                , m_index(0)
+                , m_stride()
+            {
+            }
+
+            strided_iterator(
+                base_iterator   first,
+                base_iterator   it,
+                difference_type stride
+            )
+                : m_it(it)
+                , m_first(first)
+                , m_index(stride ? (it - first) : difference_type())
+                , m_stride(stride)
+            {
+                if (stride && ((m_index % stride) != 0))
+                    m_index += (stride - (m_index % stride));
+            }
+
+            template<class OtherIterator>
+            strided_iterator(
+                const strided_iterator<
+                    OtherIterator,
+                    random_access_traversal_tag
+                >& other,
+                typename enable_if_convertible<
+                    OtherIterator,
+                    base_iterator
+                >::type* = 0
+            )
+                : m_it(other.base())
+                , m_first(other.base_begin())
+                , m_index(other.get_index())
+                , m_stride(other.get_stride())
+            {
+            }
+
+            base_iterator base_begin() const
+            {
+                return m_first;
+            }
+
+            base_iterator base() const
+            {
+                return m_it;
+            }
+
+            difference_type get_stride() const
+            {
+                return m_stride;
+            }
+
+            difference_type get_index() const
+            {
+                return m_index;
+            }
+
+        private:
+            void increment()
+            {
+                m_index += m_stride;
+            }
+
+            void decrement()
+            {
+                m_index -= m_stride;
+            }
+
+            void advance(difference_type offset)
+            {
+                m_index += (m_stride * offset);
+            }
+
+            // Implementation detail: only update the actual underlying iterator
+            // at the point of dereference. This is done so that the increment
+            // and decrement can overshoot the valid sequence as is required
+            // by striding. Since we can do all comparisons just with the index
+            // simply, and all dereferences must be within the valid range.
+            void update() const
+            {
+                m_it = m_first + m_index;
+            }
+
+            template<class OtherIterator>
+            difference_type distance_to(
+                const strided_iterator<
+                    OtherIterator,
+                    random_access_traversal_tag
+                >& other,
+                typename enable_if_convertible<
+                            OtherIterator, base_iterator>::type* = 0) const
+            {
+                BOOST_ASSERT((other.m_index - m_index) % m_stride == difference_type());
+                return (other.m_index - m_index) / m_stride;
+            }
+
+            template<class OtherIterator>
+            bool equal(
+                const strided_iterator<
+                    OtherIterator,
+                    random_access_traversal_tag
+                >& other,
+                typename enable_if_convertible<
+                            OtherIterator, base_iterator>::type* = 0) const
+            {
+                return m_index == other.m_index;
+            }
+
+            reference dereference() const
+            {
+                update();
+                return *m_it;
+            }
+
+        private:
+            mutable base_iterator m_it;
+            base_iterator m_first;
+            difference_type m_index;
+            difference_type m_stride;
+        };
+
+        template<class Rng, class Difference> inline
+        strided_iterator<
+            typename range_iterator<Rng>::type,
+            forward_traversal_tag
+        >
+        make_begin_strided_iterator(
+            Rng& rng,
+            Difference stride,
+            forward_traversal_tag)
+        {
+            return strided_iterator<
+                typename range_iterator<Rng>::type,
+                forward_traversal_tag
+            >(pdalboost::begin(rng), pdalboost::end(rng), stride);
+        }
+
+        template<class Rng, class Difference> inline
+        strided_iterator<
+            typename range_iterator<const Rng>::type,
+            forward_traversal_tag
+        >
+        make_begin_strided_iterator(
+            const Rng& rng,
+            Difference stride,
+            forward_traversal_tag)
+        {
+            return strided_iterator<
+                typename range_iterator<const Rng>::type,
+                forward_traversal_tag
+            >(pdalboost::begin(rng), pdalboost::end(rng), stride);
+        }
+
+        template<class Rng, class Difference> inline
+        strided_iterator<
+            typename range_iterator<Rng>::type,
+            forward_traversal_tag
+        >
+        make_end_strided_iterator(
+            Rng& rng,
+            Difference stride,
+            forward_traversal_tag)
+        {
+            return strided_iterator<
+                typename range_iterator<Rng>::type,
+                forward_traversal_tag
+            >(pdalboost::end(rng), pdalboost::end(rng), stride);
+        }
+
+        template<class Rng, class Difference> inline
+        strided_iterator<
+            typename range_iterator<const Rng>::type,
+            forward_traversal_tag
+        >
+        make_end_strided_iterator(
+            const Rng& rng,
+            Difference stride,
+            forward_traversal_tag)
+        {
+            return strided_iterator<
+                typename range_iterator<const Rng>::type,
+                forward_traversal_tag
+            >(pdalboost::end(rng), pdalboost::end(rng), stride);
+        }
+
+        template<class Rng, class Difference> inline
+        strided_iterator<
+            typename range_iterator<Rng>::type,
+            bidirectional_traversal_tag
+        >
+        make_begin_strided_iterator(
+            Rng& rng,
+            Difference stride,
+            bidirectional_traversal_tag)
+        {
+            typedef typename range_difference<Rng>::type difference_type;
+
+            return strided_iterator<
+                typename range_iterator<Rng>::type,
+                bidirectional_traversal_tag
+            >(pdalboost::begin(rng), difference_type(), stride);
+        }
+
+        template<class Rng, class Difference> inline
+        strided_iterator<
+            typename range_iterator<const Rng>::type,
+            bidirectional_traversal_tag
+        >
+        make_begin_strided_iterator(
+            const Rng& rng,
+            Difference stride,
+            bidirectional_traversal_tag)
+        {
+            typedef typename range_difference<const Rng>::type difference_type;
+
+            return strided_iterator<
+                typename range_iterator<const Rng>::type,
+                bidirectional_traversal_tag
+            >(pdalboost::begin(rng), difference_type(), stride);
+        }
+
+        template<class Rng, class Difference> inline
+        strided_iterator<
+            typename range_iterator<Rng>::type,
+            bidirectional_traversal_tag
+        >
+        make_end_strided_iterator(
+            Rng& rng,
+            Difference stride,
+            bidirectional_traversal_tag)
+        {
+            return strided_iterator<
+                typename range_iterator<Rng>::type,
+                bidirectional_traversal_tag
+            >(pdalboost::end(rng), pdalboost::size(rng), stride);
+        }
+
+        template<class Rng, class Difference> inline
+        strided_iterator<
+            typename range_iterator<const Rng>::type,
+            bidirectional_traversal_tag
+        >
+        make_end_strided_iterator(
+            const Rng& rng,
+            Difference stride,
+            bidirectional_traversal_tag)
+        {
+            return strided_iterator<
+                typename range_iterator<const Rng>::type,
+                bidirectional_traversal_tag
+            >(pdalboost::end(rng), pdalboost::size(rng), stride);
+        }
+
+        template<class Rng, class Difference> inline
+        strided_iterator<
+            typename range_iterator<Rng>::type,
+            random_access_traversal_tag
+        >
+        make_begin_strided_iterator(
+            Rng& rng,
+            Difference stride,
+            random_access_traversal_tag)
+        {
+            return strided_iterator<
+                typename range_iterator<Rng>::type,
+                random_access_traversal_tag
+            >(pdalboost::begin(rng), pdalboost::begin(rng), stride);
+        }
+
+        template<class Rng, class Difference> inline
+        strided_iterator<
+            typename range_iterator<const Rng>::type,
+            random_access_traversal_tag
+        >
+        make_begin_strided_iterator(
+            const Rng& rng,
+            Difference stride,
+            random_access_traversal_tag)
+        {
+            return strided_iterator<
+                typename range_iterator<const Rng>::type,
+                random_access_traversal_tag
+            >(pdalboost::begin(rng), pdalboost::begin(rng), stride);
+        }
+
+        template<class Rng, class Difference> inline
+        strided_iterator<
+            typename range_iterator<Rng>::type,
+            random_access_traversal_tag
+        >
+        make_end_strided_iterator(
+            Rng& rng,
+            Difference stride,
+            random_access_traversal_tag)
+        {
+            return strided_iterator<
+                typename range_iterator<Rng>::type,
+                random_access_traversal_tag
+            >(pdalboost::begin(rng), pdalboost::end(rng), stride);
+        }
+
+        template<class Rng, class Difference> inline
+        strided_iterator<
+            typename range_iterator<const Rng>::type,
+            random_access_traversal_tag
+        >
+        make_end_strided_iterator(
+            const Rng& rng,
+            Difference stride,
+            random_access_traversal_tag)
+        {
+            return strided_iterator<
+                typename range_iterator<const Rng>::type,
+                random_access_traversal_tag
+            >(pdalboost::begin(rng), pdalboost::end(rng), stride);
+        }
+
+        template<
+            class Rng,
+            class Category =
+                typename iterators::pure_iterator_traversal<
+                    typename range_iterator<Rng>::type
+                >::type
+        >
+        class strided_range
+            : public iterator_range<
+                range_detail::strided_iterator<
+                    typename range_iterator<Rng>::type,
+                    Category
+                >
+            >
+        {
+            typedef range_detail::strided_iterator<
+                typename range_iterator<Rng>::type,
+                Category
+            > iter_type;
+            typedef iterator_range<iter_type> super_t;
+        public:
+            template<class Difference>
+            strided_range(Difference stride, Rng& rng)
+                : super_t(
+                    range_detail::make_begin_strided_iterator(
+                        rng, stride,
+                        typename iterator_traversal<
+                            typename range_iterator<Rng>::type
+                        >::type()),
+                    range_detail::make_end_strided_iterator(
+                        rng, stride,
+                        typename iterator_traversal<
+                            typename range_iterator<Rng>::type
+                        >::type()))
+            {
+                BOOST_ASSERT( stride >= 0 );
+            }
+        };
+
+        template<class Difference>
+        class strided_holder : public holder<Difference>
+        {
+        public:
+            explicit strided_holder(Difference value)
+                : holder<Difference>(value)
+            {
+            }
+        };
+
+        template<class Rng, class Difference>
+        inline strided_range<Rng>
+        operator|(Rng& rng, const strided_holder<Difference>& stride)
+        {
+            return strided_range<Rng>(stride.val, rng);
+        }
+
+        template<class Rng, class Difference>
+        inline strided_range<const Rng>
+        operator|(const Rng& rng, const strided_holder<Difference>& stride)
+        {
+            return strided_range<const Rng>(stride.val, rng);
+        }
+
+    } // namespace range_detail
+
+    using range_detail::strided_range;
+
+    namespace adaptors
+    {
+
+        namespace
+        {
+            const range_detail::forwarder<range_detail::strided_holder>
+                strided = range_detail::forwarder<
+                            range_detail::strided_holder>();
+        }
+
+        template<class Range, class Difference>
+        inline strided_range<Range>
+        stride(Range& rng, Difference step)
+        {
+            return strided_range<Range>(step, rng);
+        }
+
+        template<class Range, class Difference>
+        inline strided_range<const Range>
+        stride(const Range& rng, Difference step)
+        {
+            return strided_range<const Range>(step, rng);
+        }
+
+    } // namespace 'adaptors'
+} // namespace 'boost'
+
+#endif
diff --git a/vendor/pdalboost/boost/range/adaptor/tokenized.hpp b/vendor/pdalboost/boost/range/adaptor/tokenized.hpp
new file mode 100644
index 0000000..f5a5b1d
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/tokenized.hpp
@@ -0,0 +1,137 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen, Neil Groves 2006. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ADAPTOR_TOKENIZED_HPP
+#define BOOST_RANGE_ADAPTOR_TOKENIZED_HPP
+
+#include <boost/regex.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+
+        template< class R >
+        struct tokenized_range : 
+            public pdalboost::iterator_range< 
+                      pdalboost::regex_token_iterator< 
+                          BOOST_DEDUCED_TYPENAME range_iterator<R>::type 
+                                              >
+                                         >
+        {
+        private:
+            typedef           
+                pdalboost::regex_token_iterator< 
+                          BOOST_DEDUCED_TYPENAME range_iterator<R>::type 
+                                            >
+                regex_iter;
+            
+            typedef BOOST_DEDUCED_TYPENAME regex_iter::regex_type 
+                regex_type;
+        
+            typedef pdalboost::iterator_range<regex_iter> 
+                base;
+
+        public:
+            template< class Regex, class Submatch, class Flag >
+            tokenized_range( R& r, const Regex& re, const Submatch& sub, Flag f )
+              : base( regex_iter( pdalboost::begin(r), pdalboost::end(r), 
+                                  regex_type(re), sub, f ),
+                      regex_iter() )
+            { }
+        };
+
+        template< class T, class U, class V >
+        struct regex_holder
+        {
+            T  re;
+            U  sub;
+            V  f;
+
+            regex_holder( const T& rex, const U& subm, V flag ) :
+                re(rex), sub(subm), f(flag)
+            { }
+        private:
+            // Not assignable
+            void operator=(const regex_holder&);
+        };
+
+        struct regex_forwarder
+        {           
+            template< class Regex >
+            regex_holder<Regex,int,regex_constants::match_flag_type>
+            operator()( const Regex& re, 
+                        int submatch = 0,    
+                        regex_constants::match_flag_type f = 
+                            regex_constants::match_default ) const
+            {
+                return regex_holder<Regex,int,
+                           regex_constants::match_flag_type>( re, submatch, f );
+            }
+             
+            template< class Regex, class Submatch >
+            regex_holder<Regex,Submatch,regex_constants::match_flag_type> 
+            operator()( const Regex& re, 
+                        const Submatch& sub, 
+                        regex_constants::match_flag_type f = 
+                            regex_constants::match_default ) const
+            {
+                return regex_holder<Regex,Submatch,
+                           regex_constants::match_flag_type>( re, sub, f ); 
+            }
+        };
+        
+        template< class BidirectionalRng, class R, class S, class F >
+        inline tokenized_range<BidirectionalRng> 
+        operator|( BidirectionalRng& r, 
+                   const regex_holder<R,S,F>& f )
+        {
+            return tokenized_range<BidirectionalRng>( r, f.re, f.sub, f.f );   
+        }
+
+        template< class BidirectionalRng, class R, class S, class F  >
+        inline tokenized_range<const BidirectionalRng> 
+        operator|( const BidirectionalRng& r, 
+                   const regex_holder<R,S,F>& f )
+        {
+            return tokenized_range<const BidirectionalRng>( r, f.re, f.sub, f.f );
+        }
+        
+    } // 'range_detail'
+
+    using range_detail::tokenized_range;
+
+    namespace adaptors
+    { 
+        namespace
+        {
+            const range_detail::regex_forwarder tokenized = 
+                    range_detail::regex_forwarder();
+        }
+        
+        template<class BidirectionalRange, class Regex, class Submatch, class Flag>
+        inline tokenized_range<BidirectionalRange>
+        tokenize(BidirectionalRange& rng, const Regex& reg, const Submatch& sub, Flag f)
+        {
+            return tokenized_range<BidirectionalRange>(rng, reg, sub, f);
+        }
+        
+        template<class BidirectionalRange, class Regex, class Submatch, class Flag>
+        inline tokenized_range<const BidirectionalRange>
+        tokenize(const BidirectionalRange& rng, const Regex& reg, const Submatch& sub, Flag f)
+        {
+            return tokenized_range<const BidirectionalRange>(rng, reg, sub, f);
+        }
+    } // 'adaptors'
+    
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/range/adaptor/transformed.hpp b/vendor/pdalboost/boost/range/adaptor/transformed.hpp
new file mode 100644
index 0000000..b9d9b1d
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/transformed.hpp
@@ -0,0 +1,137 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ADAPTOR_TRANSFORMED_HPP
+#define BOOST_RANGE_ADAPTOR_TRANSFORMED_HPP
+
+#include <boost/range/adaptor/argument_fwd.hpp>
+#include <boost/range/detail/default_constructible_unary_fn.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/iterator/transform_iterator.hpp>
+#include <boost/utility/result_of.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        // A type generator to produce the transform_iterator type conditionally
+        // including a wrapped predicate as appropriate.
+        template<typename P, typename It>
+        struct transform_iterator_gen
+        {
+            typedef transform_iterator<
+                typename default_constructible_unary_fn_gen<
+                    P,
+                    typename transform_iterator<P, It>::reference
+                >::type,
+                It
+            > type;
+        };
+
+        template< class F, class R >
+        struct transformed_range :
+            public pdalboost::iterator_range<
+                typename transform_iterator_gen<
+                    F, typename range_iterator<R>::type>::type>
+        {
+        private:
+            typedef typename transform_iterator_gen<
+                F, typename range_iterator<R>::type>::type transform_iter_t;
+
+            typedef pdalboost::iterator_range<transform_iter_t> base;
+
+        public:
+            typedef typename default_constructible_unary_fn_gen<
+                F,
+                typename transform_iterator<
+                    F,
+                    typename range_iterator<R>::type
+                >::reference
+            >::type transform_fn_type;
+
+            typedef R source_range_type;
+
+            transformed_range(transform_fn_type f, R& r)
+                : base(transform_iter_t(pdalboost::begin(r), f),
+                       transform_iter_t(pdalboost::end(r), f))
+            {
+            }
+        };
+
+        template< class T >
+        struct transform_holder : holder<T>
+        {
+            transform_holder( T r ) : holder<T>(r)
+            {
+            }
+        };
+
+        template< class SinglePassRange, class UnaryFunction >
+        inline transformed_range<UnaryFunction,SinglePassRange>
+        operator|( SinglePassRange& r,
+                   const transform_holder<UnaryFunction>& f )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<SinglePassRange>));
+
+            return transformed_range<UnaryFunction,SinglePassRange>( f.val, r );
+        }
+
+        template< class SinglePassRange, class UnaryFunction >
+        inline transformed_range<UnaryFunction, const SinglePassRange>
+        operator|( const SinglePassRange& r,
+                   const transform_holder<UnaryFunction>& f )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<const SinglePassRange>));
+
+           return transformed_range<UnaryFunction, const SinglePassRange>(
+               f.val, r);
+        }
+
+    } // 'range_detail'
+
+    using range_detail::transformed_range;
+
+    namespace adaptors
+    {
+        namespace
+        {
+            const range_detail::forwarder<range_detail::transform_holder>
+                    transformed =
+                      range_detail::forwarder<range_detail::transform_holder>();
+        }
+
+        template<class UnaryFunction, class SinglePassRange>
+        inline transformed_range<UnaryFunction, SinglePassRange>
+        transform(SinglePassRange& rng, UnaryFunction fn)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<SinglePassRange>));
+
+            return transformed_range<UnaryFunction, SinglePassRange>(fn, rng);
+        }
+
+        template<class UnaryFunction, class SinglePassRange>
+        inline transformed_range<UnaryFunction, const SinglePassRange>
+        transform(const SinglePassRange& rng, UnaryFunction fn)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                SinglePassRangeConcept<const SinglePassRange>));
+
+            return transformed_range<UnaryFunction, const SinglePassRange>(
+                fn, rng);
+        }
+    } // 'adaptors'
+
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/range/adaptor/uniqued.hpp b/vendor/pdalboost/boost/range/adaptor/uniqued.hpp
new file mode 100644
index 0000000..7be9b9d
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptor/uniqued.hpp
@@ -0,0 +1,97 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ADAPTOR_UNIQUED_IMPL_HPP
+#define BOOST_RANGE_ADAPTOR_UNIQUED_IMPL_HPP
+
+#include <boost/range/adaptor/adjacent_filtered.hpp>
+#include <boost/range/concepts.hpp>
+
+namespace pdalboost
+{
+
+    namespace range_detail
+    {
+        struct unique_forwarder { };
+
+        struct unique_not_equal_to
+        {
+            typedef bool result_type;
+
+            template< class T >
+            bool operator()( const T& l, const T& r ) const
+            {
+                return !(l == r);
+            }
+        };
+
+        template<class ForwardRng>
+        class uniqued_range : public adjacent_filtered_range<unique_not_equal_to, ForwardRng, true>
+        {
+            typedef adjacent_filtered_range<unique_not_equal_to, ForwardRng, true> base;
+        public:
+            explicit uniqued_range(ForwardRng& rng)
+                : base(unique_not_equal_to(), rng)
+            {
+            }
+        };
+
+        template< class ForwardRng >
+        inline uniqued_range<ForwardRng>
+        operator|( ForwardRng& r,
+                   unique_forwarder )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRng>));
+            return uniqued_range<ForwardRng>(r);
+        }
+
+        template< class ForwardRng >
+        inline uniqued_range<const ForwardRng>
+        operator|( const ForwardRng& r,
+                   unique_forwarder )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRng>));
+            return uniqued_range<const ForwardRng>(r);
+        }
+
+    } // 'range_detail'
+
+    using range_detail::uniqued_range;
+
+    namespace adaptors
+    {
+        namespace
+        {
+            const range_detail::unique_forwarder uniqued =
+                       range_detail::unique_forwarder();
+        }
+
+        template<class ForwardRange>
+        inline uniqued_range<ForwardRange>
+        unique(ForwardRange& rng)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
+            return uniqued_range<ForwardRange>(rng);
+        }
+
+        template<class ForwardRange>
+        inline uniqued_range<const ForwardRange>
+        unique(const ForwardRange& rng)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT((
+                ForwardRangeConcept<const ForwardRange>));
+
+            return uniqued_range<const ForwardRange>(rng);
+        }
+    } // 'adaptors'
+
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/range/adaptors.hpp b/vendor/pdalboost/boost/range/adaptors.hpp
new file mode 100644
index 0000000..0530c4d
--- /dev/null
+++ b/vendor/pdalboost/boost/range/adaptors.hpp
@@ -0,0 +1,31 @@
+// Boost.Range library
+//
+//  Copyright Neil Groves 2007.
+//  Copyright Thorsten Ottosen 2006.
+//  Use, modification and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ADAPTORS_HPP
+#define BOOST_RANGE_ADAPTORS_HPP
+
+#include <boost/range/adaptor/adjacent_filtered.hpp>
+#include <boost/range/adaptor/copied.hpp>
+#include <boost/range/adaptor/filtered.hpp>
+#include <boost/range/adaptor/formatted.hpp>
+#include <boost/range/adaptor/indexed.hpp>
+#include <boost/range/adaptor/indirected.hpp>
+#include <boost/range/adaptor/map.hpp>
+#include <boost/range/adaptor/replaced.hpp>
+#include <boost/range/adaptor/replaced_if.hpp>
+#include <boost/range/adaptor/reversed.hpp>
+#include <boost/range/adaptor/sliced.hpp>
+#include <boost/range/adaptor/strided.hpp>
+#include <boost/range/adaptor/tokenized.hpp>
+#include <boost/range/adaptor/transformed.hpp>
+#include <boost/range/adaptor/uniqued.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/range/algorithm.hpp b/vendor/pdalboost/boost/range/algorithm.hpp
new file mode 100644
index 0000000..30dc583
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm.hpp
@@ -0,0 +1,104 @@
+///////////////////////////////////////////////////////////////////////////////
+/// \file algorithm.hpp
+///   Includes the range-based versions of the algorithms in the
+///   C++ standard header file <algorithm>
+//
+/////////////////////////////////////////////////////////////////////////////
+
+// Copyright 2009 Neil Groves.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// Acknowledgements:
+// This code uses combinations of ideas, techniques and code snippets
+// from: Thorsten Ottosen, Eric Niebler, Jeremy Siek,
+// and Vladimir Prus'
+//
+// The original mutating algorithms that served as the first version
+// were originally written by Vladimir Prus'
+// <ghost at cs.msu.su> code from Boost Wiki
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#ifndef BOOST_RANGE_ALGORITHM_HPP_INCLUDED_01012009
+#define BOOST_RANGE_ALGORITHM_HPP_INCLUDED_01012009
+
+#include <boost/range/concepts.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/difference_type.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/next_prior.hpp>
+#include <algorithm>
+
+// Non-mutating algorithms
+#include <boost/range/algorithm/adjacent_find.hpp>
+#include <boost/range/algorithm/count.hpp>
+#include <boost/range/algorithm/count_if.hpp>
+#include <boost/range/algorithm/equal.hpp>
+#include <boost/range/algorithm/for_each.hpp>
+#include <boost/range/algorithm/find.hpp>
+#include <boost/range/algorithm/find_end.hpp>
+#include <boost/range/algorithm/find_first_of.hpp>
+#include <boost/range/algorithm/find_if.hpp>
+#include <boost/range/algorithm/lexicographical_compare.hpp>
+#include <boost/range/algorithm/mismatch.hpp>
+#include <boost/range/algorithm/search.hpp>
+#include <boost/range/algorithm/search_n.hpp>
+
+// Mutating algorithms
+#include <boost/range/algorithm/copy.hpp>
+#include <boost/range/algorithm/copy_backward.hpp>
+#include <boost/range/algorithm/fill.hpp>
+#include <boost/range/algorithm/fill_n.hpp>
+#include <boost/range/algorithm/generate.hpp>
+#include <boost/range/algorithm/inplace_merge.hpp>
+#include <boost/range/algorithm/merge.hpp>
+#include <boost/range/algorithm/nth_element.hpp>
+#include <boost/range/algorithm/partial_sort.hpp>
+#include <boost/range/algorithm/partial_sort_copy.hpp>
+#include <boost/range/algorithm/partition.hpp>
+#include <boost/range/algorithm/random_shuffle.hpp>
+#include <boost/range/algorithm/remove.hpp>
+#include <boost/range/algorithm/remove_copy.hpp>
+#include <boost/range/algorithm/remove_copy_if.hpp>
+#include <boost/range/algorithm/remove_if.hpp>
+#include <boost/range/algorithm/replace.hpp>
+#include <boost/range/algorithm/replace_copy.hpp>
+#include <boost/range/algorithm/replace_copy_if.hpp>
+#include <boost/range/algorithm/replace_if.hpp>
+#include <boost/range/algorithm/reverse.hpp>
+#include <boost/range/algorithm/reverse_copy.hpp>
+#include <boost/range/algorithm/rotate.hpp>
+#include <boost/range/algorithm/rotate_copy.hpp>
+#include <boost/range/algorithm/sort.hpp>
+#include <boost/range/algorithm/stable_partition.hpp>
+#include <boost/range/algorithm/stable_sort.hpp>
+#include <boost/range/algorithm/transform.hpp>
+#include <boost/range/algorithm/unique.hpp>
+#include <boost/range/algorithm/unique_copy.hpp>
+
+// Binary search
+#include <boost/range/algorithm/binary_search.hpp>
+#include <boost/range/algorithm/equal_range.hpp>
+#include <boost/range/algorithm/lower_bound.hpp>
+#include <boost/range/algorithm/upper_bound.hpp>
+
+// Set operations of sorted ranges
+#include <boost/range/algorithm/set_algorithm.hpp>
+
+// Heap operations
+#include <boost/range/algorithm/heap_algorithm.hpp>
+
+// Minimum and Maximum
+#include <boost/range/algorithm/max_element.hpp>
+#include <boost/range/algorithm/min_element.hpp>
+
+// Permutations
+#include <boost/range/algorithm/permutation.hpp>
+
+#endif // include guard
+
diff --git a/vendor/pdalboost/boost/range/algorithm/adjacent_find.hpp b/vendor/pdalboost/boost/range/algorithm/adjacent_find.hpp
new file mode 100644
index 0000000..cbafd8e
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/adjacent_find.hpp
@@ -0,0 +1,125 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_ADJACENT_FIND_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_ADJACENT_FIND_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/value_type.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function adjacent_find
+///
+/// range-based version of the adjacent_find std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template< typename ForwardRange >
+inline typename range_iterator<ForwardRange>::type
+adjacent_find(ForwardRange & rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
+    return std::adjacent_find(pdalboost::begin(rng),pdalboost::end(rng));
+}
+
+/// \overload
+template< typename ForwardRange >
+inline typename range_iterator<const ForwardRange>::type
+adjacent_find(const ForwardRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
+    return std::adjacent_find(pdalboost::begin(rng),pdalboost::end(rng));
+}
+
+/// \overload
+template< typename ForwardRange, typename BinaryPredicate >
+inline typename range_iterator<ForwardRange>::type
+adjacent_find(ForwardRange & rng, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
+    BOOST_RANGE_CONCEPT_ASSERT((BinaryPredicateConcept<BinaryPredicate,
+        typename range_value<ForwardRange>::type,
+        typename range_value<ForwardRange>::type>));
+    return std::adjacent_find(pdalboost::begin(rng),pdalboost::end(rng),pred);
+}
+
+/// \overload
+template< typename ForwardRange, typename BinaryPredicate >
+inline typename range_iterator<const ForwardRange>::type
+adjacent_find(const ForwardRange& rng, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
+    BOOST_RANGE_CONCEPT_ASSERT((BinaryPredicateConcept<BinaryPredicate,
+        typename range_value<const ForwardRange>::type,
+        typename range_value<const ForwardRange>::type>));
+    return std::adjacent_find(pdalboost::begin(rng),pdalboost::end(rng),pred);
+}
+
+//  range_return overloads
+
+/// \overload
+template< range_return_value re, typename ForwardRange >
+inline typename range_return<ForwardRange,re>::type
+adjacent_find(ForwardRange & rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
+    return range_return<ForwardRange,re>::
+        pack(std::adjacent_find(pdalboost::begin(rng),pdalboost::end(rng)),
+             rng);
+}
+
+/// \overload
+template< range_return_value re, typename ForwardRange >
+inline typename range_return<const ForwardRange,re>::type
+adjacent_find(const ForwardRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
+    return range_return<const ForwardRange,re>::
+        pack(std::adjacent_find(pdalboost::begin(rng),pdalboost::end(rng)),
+             rng);
+}
+
+/// \overload
+template< range_return_value re, typename ForwardRange, typename BinaryPredicate >
+inline typename range_return<ForwardRange,re>::type
+adjacent_find(ForwardRange& rng, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
+    BOOST_RANGE_CONCEPT_ASSERT((BinaryPredicateConcept<BinaryPredicate,
+        typename range_value<ForwardRange>::type,
+        typename range_value<ForwardRange>::type>));
+    return range_return<ForwardRange,re>::
+        pack(std::adjacent_find(pdalboost::begin(rng),pdalboost::end(rng),pred),
+             rng);
+}
+
+/// \overload
+template< range_return_value re, typename ForwardRange, typename BinaryPredicate >
+inline typename range_return<const ForwardRange,re>::type
+adjacent_find(const ForwardRange& rng, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
+    return range_return<const ForwardRange,re>::
+        pack(std::adjacent_find(pdalboost::begin(rng),pdalboost::end(rng),pred),
+             rng);
+}
+
+    } // namespace range
+    using range::adjacent_find;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/binary_search.hpp b/vendor/pdalboost/boost/range/algorithm/binary_search.hpp
new file mode 100644
index 0000000..15568b4
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/binary_search.hpp
@@ -0,0 +1,49 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_BINARY_SEARCH_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_BINARY_SEARCH_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function binary_search
+///
+/// range-based version of the binary_search std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template<class ForwardRange, class Value>
+inline bool binary_search(const ForwardRange& rng, const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::binary_search(pdalboost::begin(rng), pdalboost::end(rng), val);
+}
+
+/// \overload
+template<class ForwardRange, class Value, class BinaryPredicate>
+inline bool binary_search(const ForwardRange& rng, const Value& val,
+                          BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::binary_search(pdalboost::begin(rng), pdalboost::end(rng), val, pred);
+}
+
+    } // namespace range
+    using range::binary_search;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/copy.hpp b/vendor/pdalboost/boost/range/algorithm/copy.hpp
new file mode 100644
index 0000000..66f48a1
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/copy.hpp
@@ -0,0 +1,41 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_COPY_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_COPY_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function copy
+///
+/// range-based version of the copy std algorithm
+///
+/// \pre SinglePassRange is a model of the SinglePassRangeConcept
+/// \pre OutputIterator is a model of the OutputIteratorConcept
+template< class SinglePassRange, class OutputIterator >
+inline OutputIterator copy(const SinglePassRange& rng, OutputIterator out)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
+    return std::copy(pdalboost::begin(rng),pdalboost::end(rng),out);
+}
+
+    } // namespace range
+    using range::copy;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/copy_backward.hpp b/vendor/pdalboost/boost/range/algorithm/copy_backward.hpp
new file mode 100644
index 0000000..9982696
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/copy_backward.hpp
@@ -0,0 +1,43 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_COPY_BACKWARD_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_COPY_BACKWARD_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function copy_backward
+///
+/// range-based version of the copy_backwards std algorithm
+///
+/// \pre BidirectionalRange is a model of the BidirectionalRangeConcept
+/// \pre BidirectionalTraversalWriteableIterator is a model of the BidirectionalIteratorConcept
+/// \pre BidirectionalTraversalWriteableIterator is a model of the WriteableIteratorConcept
+template< class BidirectionalRange, class BidirectionalTraversalWriteableIterator >
+inline BidirectionalTraversalWriteableIterator
+copy_backward(const BidirectionalRange& rng,
+              BidirectionalTraversalWriteableIterator out)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));
+    return std::copy_backward(pdalboost::begin(rng), pdalboost::end(rng), out);
+}
+
+    } // namespace range
+    using range::copy_backward;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/count.hpp b/vendor/pdalboost/boost/range/algorithm/count.hpp
new file mode 100644
index 0000000..b686025
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/count.hpp
@@ -0,0 +1,50 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_COUNT_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_COUNT_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/difference_type.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function count
+///
+/// range-based version of the count std algorithm
+///
+/// \pre SinglePassRange is a model of the SinglePassRangeConcept
+template< class SinglePassRange, class Value >
+inline BOOST_DEDUCED_TYPENAME range_difference<SinglePassRange>::type
+count(SinglePassRange& rng, const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));
+    return std::count(pdalboost::begin(rng), pdalboost::end(rng), val);
+}
+
+/// \overload
+template< class SinglePassRange, class Value >
+inline BOOST_DEDUCED_TYPENAME range_difference<SinglePassRange const>::type
+count(const SinglePassRange& rng, const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
+    return std::count(pdalboost::begin(rng), pdalboost::end(rng), val);
+}
+
+    } // namespace range
+    using range::count;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/count_if.hpp b/vendor/pdalboost/boost/range/algorithm/count_if.hpp
new file mode 100644
index 0000000..43bffcf
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/count_if.hpp
@@ -0,0 +1,51 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_COUNT_IF_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_COUNT_IF_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/difference_type.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function count_if
+///
+/// range-based version of the count_if std algorithm
+///
+/// \pre SinglePassRange is a model of the SinglePassRangeConcept
+/// \pre UnaryPredicate is a model of the UnaryPredicateConcept
+template< class SinglePassRange, class UnaryPredicate >
+inline BOOST_DEDUCED_TYPENAME pdalboost::range_difference<SinglePassRange>::type
+count_if(SinglePassRange& rng, UnaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));
+    return std::count_if(pdalboost::begin(rng), pdalboost::end(rng), pred);
+}
+
+/// \overload
+template< class SinglePassRange, class UnaryPredicate >
+inline BOOST_DEDUCED_TYPENAME pdalboost::range_difference<const SinglePassRange>::type
+count_if(const SinglePassRange& rng, UnaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
+    return std::count_if(pdalboost::begin(rng), pdalboost::end(rng), pred);
+}
+
+    } // namespace range
+    using range::count_if;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/equal.hpp b/vendor/pdalboost/boost/range/algorithm/equal.hpp
new file mode 100644
index 0000000..4c36df2
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/equal.hpp
@@ -0,0 +1,200 @@
+// Boost.Range library
+//
+//  Copyright Neil Groves 2009.
+//  Use, modification and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_EQUAL_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_EQUAL_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/range/concepts.hpp>
+#include <iterator>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        // An implementation of equality comparison that is optimized for iterator
+        // traversal categories less than RandomAccessTraversal.
+        template< class SinglePassTraversalReadableIterator1,
+                  class SinglePassTraversalReadableIterator2,
+                  class IteratorCategoryTag1,
+                  class IteratorCategoryTag2 >
+        inline bool equal_impl( SinglePassTraversalReadableIterator1 first1,
+                                SinglePassTraversalReadableIterator1 last1,
+                                SinglePassTraversalReadableIterator2 first2,
+                                SinglePassTraversalReadableIterator2 last2,
+                                IteratorCategoryTag1,
+                                IteratorCategoryTag2 )
+        {
+            for (;;)
+            {
+                // If we have reached the end of the left range then this is
+                // the end of the loop. They are equal if and only if we have
+                // simultaneously reached the end of the right range.
+                if (first1 == last1)
+                    return first2 == last2;
+
+                // If we have reached the end of the right range at this line
+                // it indicates that the right range is shorter than the left
+                // and hence the result is false.
+                if (first2 == last2)
+                    return false;
+
+                // continue looping if and only if the values are equal
+                if (*first1 != *first2)
+                    break;
+
+                ++first1;
+                ++first2;
+            }
+
+            // Reaching this line in the algorithm indicates that a value
+            // inequality has been detected.
+            return false;
+        }
+
+        template< class SinglePassTraversalReadableIterator1,
+                  class SinglePassTraversalReadableIterator2,
+                  class IteratorCategoryTag1,
+                  class IteratorCategoryTag2,
+                  class BinaryPredicate >
+        inline bool equal_impl( SinglePassTraversalReadableIterator1 first1,
+                                SinglePassTraversalReadableIterator1 last1,
+                                SinglePassTraversalReadableIterator2 first2,
+                                SinglePassTraversalReadableIterator2 last2,
+                                BinaryPredicate                      pred,
+                                IteratorCategoryTag1,
+                                IteratorCategoryTag2 )
+        {
+            for (;;)
+            {
+                // If we have reached the end of the left range then this is
+                // the end of the loop. They are equal if and only if we have
+                // simultaneously reached the end of the right range.
+                if (first1 == last1)
+                    return first2 == last2;
+
+                // If we have reached the end of the right range at this line
+                // it indicates that the right range is shorter than the left
+                // and hence the result is false.
+                if (first2 == last2)
+                    return false;
+
+                // continue looping if and only if the values are equal
+                if (!pred(*first1, *first2))
+                    break;
+
+                ++first1;
+                ++first2;
+            }
+
+            // Reaching this line in the algorithm indicates that a value
+            // inequality has been detected.
+            return false;
+        }
+
+        // An implementation of equality comparison that is optimized for
+        // random access iterators.
+        template< class RandomAccessTraversalReadableIterator1,
+                  class RandomAccessTraversalReadableIterator2 >
+        inline bool equal_impl( RandomAccessTraversalReadableIterator1 first1,
+                                RandomAccessTraversalReadableIterator1 last1,
+                                RandomAccessTraversalReadableIterator2 first2,
+                                RandomAccessTraversalReadableIterator2 last2,
+                                std::random_access_iterator_tag,
+                                std::random_access_iterator_tag )
+        {
+            return ((last1 - first1) == (last2 - first2))
+                && std::equal(first1, last1, first2);
+        }
+
+        template< class RandomAccessTraversalReadableIterator1,
+                  class RandomAccessTraversalReadableIterator2,
+                  class BinaryPredicate >
+        inline bool equal_impl( RandomAccessTraversalReadableIterator1 first1,
+                                RandomAccessTraversalReadableIterator1 last1,
+                                RandomAccessTraversalReadableIterator2 first2,
+                                RandomAccessTraversalReadableIterator2 last2,
+                                BinaryPredicate                        pred,
+                                std::random_access_iterator_tag,
+                                std::random_access_iterator_tag )
+        {
+            return ((last1 - first1) == (last2 - first2))
+                && std::equal(first1, last1, first2, pred);
+        }
+
+        template< class SinglePassTraversalReadableIterator1,
+                  class SinglePassTraversalReadableIterator2 >
+        inline bool equal( SinglePassTraversalReadableIterator1 first1,
+                           SinglePassTraversalReadableIterator1 last1,
+                           SinglePassTraversalReadableIterator2 first2,
+                           SinglePassTraversalReadableIterator2 last2 )
+        {
+            BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator1 >::iterator_category tag1;
+            BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator2 >::iterator_category tag2;
+
+            return equal_impl(first1, last1, first2, last2, tag1, tag2);
+        }
+
+        template< class SinglePassTraversalReadableIterator1,
+                  class SinglePassTraversalReadableIterator2,
+                  class BinaryPredicate >
+        inline bool equal( SinglePassTraversalReadableIterator1 first1,
+                           SinglePassTraversalReadableIterator1 last1,
+                           SinglePassTraversalReadableIterator2 first2,
+                           SinglePassTraversalReadableIterator2 last2,
+                           BinaryPredicate                      pred )
+        {
+            BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator1 >::iterator_category tag1;
+            BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator2 >::iterator_category tag2;
+
+            return equal_impl(first1, last1, first2, last2, pred, tag1, tag2);
+        }
+
+    } // namespace range_detail
+
+    namespace range
+    {
+
+        /// \brief template function equal
+        ///
+        /// range-based version of the equal std algorithm
+        ///
+        /// \pre SinglePassRange1 is a model of the SinglePassRangeConcept
+        /// \pre SinglePassRange2 is a model of the SinglePassRangeConcept
+        /// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+        template< class SinglePassRange1, class SinglePassRange2 >
+        inline bool equal( const SinglePassRange1& rng1, const SinglePassRange2& rng2 )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+
+            return ::pdalboost::range_detail::equal(
+                ::pdalboost::begin(rng1), ::pdalboost::end(rng1),
+                ::pdalboost::begin(rng2), ::pdalboost::end(rng2) );
+        }
+
+        /// \overload
+        template< class SinglePassRange1, class SinglePassRange2, class BinaryPredicate >
+        inline bool equal( const SinglePassRange1& rng1, const SinglePassRange2& rng2,
+                           BinaryPredicate pred )
+        {
+            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+
+            return ::pdalboost::range_detail::equal(
+                ::pdalboost::begin(rng1), ::pdalboost::end(rng1),
+                ::pdalboost::begin(rng2), ::pdalboost::end(rng2),
+                pred);
+        }
+
+    } // namespace range
+    using ::pdalboost::range::equal;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/equal_range.hpp b/vendor/pdalboost/boost/range/algorithm/equal_range.hpp
new file mode 100644
index 0000000..a9f5503
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/equal_range.hpp
@@ -0,0 +1,80 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_EQUAL_RANGE_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_EQUAL_RANGE_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function equal_range
+///
+/// range-based version of the equal_range std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+/// \pre SortPredicate is a model of the BinaryPredicateConcept
+template<class ForwardRange, class Value>
+inline std::pair<
+        BOOST_DEDUCED_TYPENAME pdalboost::range_iterator<ForwardRange>::type,
+        BOOST_DEDUCED_TYPENAME pdalboost::range_iterator<ForwardRange>::type
+       >
+equal_range(ForwardRange& rng, const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return std::equal_range(pdalboost::begin(rng), pdalboost::end(rng), val);
+}
+
+/// \overload
+template<class ForwardRange, class Value>
+inline std::pair<
+        BOOST_DEDUCED_TYPENAME pdalboost::range_iterator<const ForwardRange>::type,
+        BOOST_DEDUCED_TYPENAME pdalboost::range_iterator<const ForwardRange>::type
+       >
+equal_range(const ForwardRange& rng, const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::equal_range(pdalboost::begin(rng), pdalboost::end(rng), val);
+}
+
+/// \overload
+template<class ForwardRange, class Value, class SortPredicate>
+inline std::pair<
+        BOOST_DEDUCED_TYPENAME pdalboost::range_iterator<ForwardRange>::type,
+        BOOST_DEDUCED_TYPENAME pdalboost::range_iterator<ForwardRange>::type
+       >
+equal_range(ForwardRange& rng, const Value& val, SortPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return std::equal_range(pdalboost::begin(rng), pdalboost::end(rng), val, pred);
+}
+
+/// \overload
+template<class ForwardRange, class Value, class SortPredicate>
+inline std::pair<
+        BOOST_DEDUCED_TYPENAME pdalboost::range_iterator<const ForwardRange>::type,
+        BOOST_DEDUCED_TYPENAME pdalboost::range_iterator<const ForwardRange>::type
+       >
+equal_range(const ForwardRange& rng, const Value& val, SortPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::equal_range(pdalboost::begin(rng), pdalboost::end(rng), val, pred);
+}
+
+    } // namespace range
+    using range::equal_range;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/fill.hpp b/vendor/pdalboost/boost/range/algorithm/fill.hpp
new file mode 100644
index 0000000..0ca1d77
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/fill.hpp
@@ -0,0 +1,49 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_FILL_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_FILL_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function fill
+///
+/// range-based version of the fill std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+template< class ForwardRange, class Value >
+inline ForwardRange& fill(ForwardRange& rng, const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    std::fill(pdalboost::begin(rng), pdalboost::end(rng), val);
+    return rng;
+}
+
+/// \overload
+template< class ForwardRange, class Value >
+inline const ForwardRange& fill(const ForwardRange& rng, const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    std::fill(pdalboost::begin(rng), pdalboost::end(rng), val);
+    return rng;
+}
+
+    } // namespace range
+    using range::fill;
+}
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/fill_n.hpp b/vendor/pdalboost/boost/range/algorithm/fill_n.hpp
new file mode 100644
index 0000000..b812805
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/fill_n.hpp
@@ -0,0 +1,53 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_FILL_N_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_FILL_N_HPP_INCLUDED
+
+#include <boost/assert.hpp>
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function fill_n
+///
+/// range-based version of the fill_n std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+/// \pre n <= std::distance(pdalboost::begin(rng), pdalboost::end(rng))
+template< class ForwardRange, class Size, class Value >
+inline ForwardRange& fill_n(ForwardRange& rng, Size n, const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    BOOST_ASSERT( static_cast<Size>(std::distance(pdalboost::begin(rng), pdalboost::end(rng))) >= n );
+    std::fill_n(pdalboost::begin(rng), n, val);
+    return rng;
+}
+
+/// \overload
+template< class ForwardRange, class Size, class Value >
+inline const ForwardRange& fill_n(const ForwardRange& rng, Size n, const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    BOOST_ASSERT( static_cast<Size>(std::distance(pdalboost::begin(rng), pdalboost::end(rng))) >= n );
+    std::fill_n(pdalboost::begin(rng), n, val);
+    return rng;
+}
+
+    } // namespace range
+    using range::fill_n;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/find.hpp b/vendor/pdalboost/boost/range/algorithm/find.hpp
new file mode 100644
index 0000000..7b59aba
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/find.hpp
@@ -0,0 +1,80 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_FIND_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_FIND_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function find
+///
+/// range-based version of the find std algorithm
+///
+/// \pre SinglePassRange is a model of the SinglePassRangeConcept
+template< class SinglePassRange, class Value >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<SinglePassRange>,
+    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type
+>::type
+find( SinglePassRange& rng, const Value& val )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));
+    return std::find(pdalboost::begin(rng), pdalboost::end(rng), val);
+}
+
+/// \overload
+template< class SinglePassRange, class Value >
+inline BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange>::type
+find( const SinglePassRange& rng, const Value& val )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
+    return std::find(pdalboost::begin(rng), pdalboost::end(rng), val);
+}
+
+// range_return overloads
+
+/// \overload
+template< range_return_value re, class SinglePassRange, class Value >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<SinglePassRange>,
+    BOOST_DEDUCED_TYPENAME range_return<SinglePassRange,re>::type
+>::type
+find( SinglePassRange& rng, const Value& val )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));
+    return range_return<SinglePassRange,re>::
+        pack(std::find(pdalboost::begin(rng), pdalboost::end(rng), val),
+             rng);
+}
+
+/// \overload
+template< range_return_value re, class SinglePassRange, class Value >
+inline BOOST_DEDUCED_TYPENAME range_return<const SinglePassRange,re>::type
+find( const SinglePassRange& rng, const Value& val )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
+    return range_return<const SinglePassRange,re>::
+        pack(std::find(pdalboost::begin(rng), pdalboost::end(rng), val),
+             rng);
+}
+
+    } // namespace range
+    using range::find;
+}
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/find_end.hpp b/vendor/pdalboost/boost/range/algorithm/find_end.hpp
new file mode 100644
index 0000000..3be64ab
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/find_end.hpp
@@ -0,0 +1,152 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_FIND_END_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_FIND_END_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function find_end
+///
+/// range-based version of the find_end std algorithm
+///
+/// \pre ForwardRange1 is a model of the ForwardRangeConcept
+/// \pre ForwardRange2 is a model of the ForwardRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template< class ForwardRange1, class ForwardRange2 >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<ForwardRange1>,
+    BOOST_DEDUCED_TYPENAME range_iterator< ForwardRange1 >::type
+>::type
+find_end(ForwardRange1 & rng1, const ForwardRange2& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return std::find_end(pdalboost::begin(rng1),pdalboost::end(rng1),
+                         pdalboost::begin(rng2),pdalboost::end(rng2));
+}
+
+/// \overload
+template< class ForwardRange1, class ForwardRange2 >
+inline BOOST_DEDUCED_TYPENAME range_iterator< const ForwardRange1 >::type
+find_end(const ForwardRange1 & rng1, const ForwardRange2& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return std::find_end(pdalboost::begin(rng1),pdalboost::end(rng1),
+                         pdalboost::begin(rng2),pdalboost::end(rng2));
+}
+
+/// \overload
+template< class ForwardRange1, class ForwardRange2, class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<ForwardRange1>,
+    BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange1>::type
+>::type
+find_end(ForwardRange1 & rng1, const ForwardRange2& rng2, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return std::find_end(pdalboost::begin(rng1),pdalboost::end(rng1),
+                         pdalboost::begin(rng2),pdalboost::end(rng2),pred);
+}
+
+/// \overload
+template< class ForwardRange1, class ForwardRange2, class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange1>::type
+find_end(const ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return std::find_end(pdalboost::begin(rng1),pdalboost::end(rng1),
+                         pdalboost::begin(rng2),pdalboost::end(rng2),pred);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange1, class ForwardRange2 >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<ForwardRange1>,
+    BOOST_DEDUCED_TYPENAME range_return<ForwardRange1,re>::type
+>::type
+find_end(ForwardRange1& rng1, const ForwardRange2& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return range_return<ForwardRange1,re>::
+        pack(std::find_end(pdalboost::begin(rng1), pdalboost::end(rng1),
+                           pdalboost::begin(rng2), pdalboost::end(rng2)),
+             rng1);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange1, class ForwardRange2 >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange1,re>::type
+find_end(const ForwardRange1& rng1, const ForwardRange2& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return range_return<const ForwardRange1,re>::
+        pack(std::find_end(pdalboost::begin(rng1), pdalboost::end(rng1),
+                           pdalboost::begin(rng2), pdalboost::end(rng2)),
+             rng1);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange1, class ForwardRange2,
+          class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<ForwardRange1>,
+    BOOST_DEDUCED_TYPENAME range_return<ForwardRange1,re>::type
+>::type
+find_end(ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return range_return<ForwardRange1,re>::
+        pack(std::find_end(pdalboost::begin(rng1), pdalboost::end(rng1),
+                           pdalboost::begin(rng2), pdalboost::end(rng2), pred),
+             rng1);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange1, class ForwardRange2,
+          class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange1,re>::type
+find_end(const ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return range_return<const ForwardRange1,re>::
+        pack(std::find_end(pdalboost::begin(rng1), pdalboost::end(rng1),
+                           pdalboost::begin(rng2), pdalboost::end(rng2), pred),
+             rng1);
+}
+
+    } // namespace range
+    using range::find_end;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/find_first_of.hpp b/vendor/pdalboost/boost/range/algorithm/find_first_of.hpp
new file mode 100644
index 0000000..a3fdb81
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/find_first_of.hpp
@@ -0,0 +1,155 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_FIND_FIRST_OF_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_FIND_FIRST_OF_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function find_first_of
+///
+/// range-based version of the find_first_of std algorithm
+///
+/// \pre SinglePassRange1 is a model of the SinglePassRangeConcept
+/// \pre ForwardRange2 is a model of the ForwardRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template< class SinglePassRange1, class ForwardRange2 >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<SinglePassRange1>,
+    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type
+>::type
+find_first_of(SinglePassRange1 & rng1, ForwardRange2 const & rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return std::find_first_of(pdalboost::begin(rng1),pdalboost::end(rng1),
+                              pdalboost::begin(rng2),pdalboost::end(rng2));
+}
+
+/// \overload
+template< class SinglePassRange1, class ForwardRange2 >
+inline BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type
+find_first_of(const SinglePassRange1& rng1, const ForwardRange2& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return std::find_first_of(pdalboost::begin(rng1),pdalboost::end(rng1),
+                              pdalboost::begin(rng2),pdalboost::end(rng2));
+}
+
+/// \overload
+template< class SinglePassRange1, class ForwardRange2, class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<SinglePassRange1>,
+    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type
+>::type
+find_first_of(SinglePassRange1 & rng1, ForwardRange2 const & rng2, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return std::find_first_of(pdalboost::begin(rng1),pdalboost::end(rng1),
+                              pdalboost::begin(rng2),pdalboost::end(rng2),pred);
+}
+
+/// \overload
+template< class SinglePassRange1, class ForwardRange2, class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type
+find_first_of(const SinglePassRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return std::find_first_of(pdalboost::begin(rng1),pdalboost::end(rng1),
+                              pdalboost::begin(rng2),pdalboost::end(rng2),pred);
+}
+
+// range return overloads
+/// \overload
+template< range_return_value re, class SinglePassRange1, class ForwardRange2 >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<SinglePassRange1>,
+    BOOST_DEDUCED_TYPENAME range_return<SinglePassRange1,re>::type
+>::type
+find_first_of(SinglePassRange1& rng1, const ForwardRange2& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return range_return<SinglePassRange1,re>::
+        pack(std::find_first_of(pdalboost::begin(rng1), pdalboost::end(rng1),
+                                pdalboost::begin(rng2), pdalboost::end(rng2)),
+             rng1);
+}
+
+/// \overload
+template< range_return_value re, class SinglePassRange1, class ForwardRange2 >
+inline BOOST_DEDUCED_TYPENAME range_return<const SinglePassRange1,re>::type
+find_first_of(const SinglePassRange1& rng1, const ForwardRange2& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return range_return<const SinglePassRange1,re>::
+        pack(std::find_first_of(pdalboost::begin(rng1), pdalboost::end(rng1),
+                                pdalboost::begin(rng2), pdalboost::end(rng2)),
+             rng1);
+}
+
+/// \overload
+template< range_return_value re, class SinglePassRange1, class ForwardRange2,
+          class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<SinglePassRange1>,
+    BOOST_DEDUCED_TYPENAME range_return<SinglePassRange1,re>::type
+>::type
+find_first_of(SinglePassRange1 & rng1, const ForwardRange2& rng2,
+              BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return range_return<SinglePassRange1,re>::
+        pack(std::find_first_of(pdalboost::begin(rng1), pdalboost::end(rng1),
+                                pdalboost::begin(rng2), pdalboost::end(rng2), pred),
+             rng1);
+}
+
+/// \overload
+template< range_return_value re, class SinglePassRange1, class ForwardRange2,
+          class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<const SinglePassRange1,re>::type
+find_first_of(const SinglePassRange1 & rng1, const ForwardRange2& rng2,
+              BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+
+    return range_return<const SinglePassRange1,re>::
+        pack(std::find_first_of(pdalboost::begin(rng1), pdalboost::end(rng1),
+                                pdalboost::begin(rng2), pdalboost::end(rng2), pred),
+             rng1);
+}
+
+    } // namespace range
+    using range::find_first_of;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/find_if.hpp b/vendor/pdalboost/boost/range/algorithm/find_if.hpp
new file mode 100644
index 0000000..daaf522
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/find_if.hpp
@@ -0,0 +1,81 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_FIND_IF_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_FIND_IF_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function find_if
+///
+/// range-based version of the find_if std algorithm
+///
+/// \pre SinglePassRange is a model of the SinglePassRangeConcept
+/// \pre UnaryPredicate is a model of the UnaryPredicateConcept
+template< class SinglePassRange, class UnaryPredicate >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<SinglePassRange>,
+    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type
+>::type
+find_if( SinglePassRange& rng, UnaryPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));
+    return std::find_if(pdalboost::begin(rng), pdalboost::end(rng), pred);
+}
+
+/// \overload
+template< class SinglePassRange, class UnaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange>::type
+find_if( const SinglePassRange& rng, UnaryPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
+    return std::find_if(pdalboost::begin(rng), pdalboost::end(rng), pred);
+}
+
+// range_return overloads
+
+/// \overload
+template< range_return_value re, class SinglePassRange, class UnaryPredicate >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<SinglePassRange>,
+    BOOST_DEDUCED_TYPENAME range_return<SinglePassRange,re>::type
+>::type
+find_if( SinglePassRange& rng, UnaryPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));
+    return range_return<SinglePassRange,re>::
+        pack(std::find_if(pdalboost::begin(rng), pdalboost::end(rng), pred),
+             rng);
+}
+
+/// \overload
+template< range_return_value re, class SinglePassRange, class UnaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<const SinglePassRange,re>::type
+find_if( const SinglePassRange& rng, UnaryPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
+    return range_return<const SinglePassRange,re>::
+        pack(std::find_if(pdalboost::begin(rng), pdalboost::end(rng), pred),
+             rng);
+}
+
+    } // namespace range
+    using range::find_if;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/for_each.hpp b/vendor/pdalboost/boost/range/algorithm/for_each.hpp
new file mode 100644
index 0000000..f976d84
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/for_each.hpp
@@ -0,0 +1,110 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_FOR_EACH_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_FOR_EACH_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/ref.hpp>
+#include <algorithm>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+#include <xutility>
+#endif
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+        namespace for_each_detail
+        {
+            template<typename Iterator, typename UnaryFunction>
+            inline UnaryFunction
+            for_each_impl(Iterator first, Iterator last, UnaryFunction fun,
+                          typename ::pdalboost::enable_if<
+                            is_reference_wrapper<UnaryFunction>,
+                            void
+                          >::type* = 0)
+            {
+                    typedef typename std::_Get_unchecked_type<Iterator>::type
+                                unchecked_iterator;
+
+                    unchecked_iterator unchecked_last = std::_Unchecked(last);
+                    for (unchecked_iterator unchecked_first = std::_Unchecked(first); first != last; ++first)
+                            fun.get()(*unchecked_first);
+
+                    return fun;
+            }
+
+            template<typename Iterator, typename UnaryFunction>
+            inline UnaryFunction
+            for_each_impl(Iterator first, Iterator last, UnaryFunction fn,
+                          typename disable_if<
+                            is_reference_wrapper<UnaryFunction>,
+                            void
+                          >::type* = 0)
+            {
+                return std::for_each<Iterator, UnaryFunction>(first, last, fn);
+            }
+        }
+#endif
+
+/// \brief template function for_each
+///
+/// range-based version of the for_each std algorithm
+///
+/// \pre SinglePassRange is a model of the SinglePassRangeConcept
+/// \pre UnaryFunction is a model of the UnaryFunctionConcept
+template< class SinglePassRange, class UnaryFunction >
+inline UnaryFunction for_each(SinglePassRange & rng, UnaryFunction fun)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange> ));
+    
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+        return for_each_detail::for_each_impl<
+                typename range_iterator<SinglePassRange>::type,
+                UnaryFunction
+        >(pdalboost::begin(rng), pdalboost::end(rng), fun);
+#else
+    return std::for_each<
+        BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type,
+        UnaryFunction
+    >(pdalboost::begin(rng),pdalboost::end(rng),fun);
+#endif    
+}
+
+/// \overload
+template< class SinglePassRange, class UnaryFunction >
+inline UnaryFunction for_each(const SinglePassRange& rng, UnaryFunction fun)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
+    
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1600)
+        return for_each_detail::for_each_impl<
+                typename range_iterator<const SinglePassRange>::type,
+                UnaryFunction
+        >(pdalboost::begin(rng), pdalboost::end(rng), fun);
+#else    
+    return std::for_each<
+        BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange>::type,
+        UnaryFunction
+    >(pdalboost::begin(rng), pdalboost::end(rng), fun);
+#endif    
+}
+
+    } // namespace range
+    using range::for_each;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/generate.hpp b/vendor/pdalboost/boost/range/algorithm/generate.hpp
new file mode 100644
index 0000000..7d99884
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/generate.hpp
@@ -0,0 +1,49 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_GENERATE_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_GENERATE_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+/// \brief template function generate
+///
+/// range-based version of the generate std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+/// \pre Generator is a model of the UnaryFunctionConcept
+template< class ForwardRange, class Generator >
+inline ForwardRange& generate( ForwardRange& rng, Generator gen )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    std::generate(pdalboost::begin(rng), pdalboost::end(rng), gen);
+    return rng;
+}
+
+/// \overload
+template< class ForwardRange, class Generator >
+inline const ForwardRange& generate( const ForwardRange& rng, Generator gen )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    std::generate(pdalboost::begin(rng), pdalboost::end(rng), gen);
+    return rng;
+}
+
+    } // namespace range
+    using range::generate;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/heap_algorithm.hpp b/vendor/pdalboost/boost/range/algorithm/heap_algorithm.hpp
new file mode 100644
index 0000000..f48dfde
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/heap_algorithm.hpp
@@ -0,0 +1,194 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_HEAP_ALGORITHM_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_HEAP_ALGORITHM_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function push_heap
+///
+/// range-based version of the push_heap std algorithm
+///
+/// \pre RandomAccessRange is a model of the RandomAccessRangeConcept
+/// \pre Compare is a model of the BinaryPredicateConcept
+template<class RandomAccessRange>
+inline RandomAccessRange& push_heap(RandomAccessRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::push_heap(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange>
+inline const RandomAccessRange& push_heap(const RandomAccessRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::push_heap(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class Compare>
+inline RandomAccessRange& push_heap(RandomAccessRange& rng, Compare comp_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::push_heap(pdalboost::begin(rng), pdalboost::end(rng), comp_pred);
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class Compare>
+inline const RandomAccessRange& push_heap(const RandomAccessRange& rng, Compare comp_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::push_heap(pdalboost::begin(rng), pdalboost::end(rng), comp_pred);
+    return rng;
+}
+
+/// \brief template function pop_heap
+///
+/// range-based version of the pop_heap std algorithm
+///
+/// \pre RandomAccessRange is a model of the RandomAccessRangeConcept
+/// \pre Compare is a model of the BinaryPredicateConcept
+template<class RandomAccessRange>
+inline RandomAccessRange& pop_heap(RandomAccessRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::pop_heap(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange>
+inline const RandomAccessRange& pop_heap(const RandomAccessRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::pop_heap(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class Compare>
+inline RandomAccessRange& pop_heap(RandomAccessRange& rng, Compare comp_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::pop_heap(pdalboost::begin(rng), pdalboost::end(rng), comp_pred);
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class Compare>
+inline const RandomAccessRange& pop_heap(const RandomAccessRange& rng, Compare comp_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::pop_heap(pdalboost::begin(rng), pdalboost::end(rng), comp_pred);
+    return rng;
+}
+
+/// \brief template function make_heap
+///
+/// range-based version of the make_heap std algorithm
+///
+/// \pre RandomAccessRange is a model of the RandomAccessRangeConcept
+/// \pre Compare is a model of the BinaryPredicateConcept
+template<class RandomAccessRange>
+inline RandomAccessRange& make_heap(RandomAccessRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::make_heap(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange>
+inline const RandomAccessRange& make_heap(const RandomAccessRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::make_heap(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class Compare>
+inline RandomAccessRange& make_heap(RandomAccessRange& rng, Compare comp_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::make_heap(pdalboost::begin(rng), pdalboost::end(rng), comp_pred);
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class Compare>
+inline const RandomAccessRange& make_heap(const RandomAccessRange& rng, Compare comp_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::make_heap(pdalboost::begin(rng), pdalboost::end(rng), comp_pred);
+    return rng;
+}
+
+/// \brief template function sort_heap
+///
+/// range-based version of the sort_heap std algorithm
+///
+/// \pre RandomAccessRange is a model of the RandomAccessRangeConcept
+/// \pre Compare is a model of the BinaryPredicateConcept
+template<class RandomAccessRange>
+inline RandomAccessRange& sort_heap(RandomAccessRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::sort_heap(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange>
+inline const RandomAccessRange& sort_heap(const RandomAccessRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::sort_heap(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class Compare>
+inline RandomAccessRange& sort_heap(RandomAccessRange& rng, Compare comp_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::sort_heap(pdalboost::begin(rng), pdalboost::end(rng), comp_pred);
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class Compare>
+inline const RandomAccessRange& sort_heap(const RandomAccessRange& rng, Compare comp_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::sort_heap(pdalboost::begin(rng), pdalboost::end(rng), comp_pred);
+    return rng;
+}
+
+    } // namespace range
+    using range::push_heap;
+    using range::pop_heap;
+    using range::make_heap;
+    using range::sort_heap;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/inplace_merge.hpp b/vendor/pdalboost/boost/range/algorithm/inplace_merge.hpp
new file mode 100644
index 0000000..b0262bc
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/inplace_merge.hpp
@@ -0,0 +1,74 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_INPLACE_MERGE_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_INPLACE_MERGE_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function inplace_merge
+///
+/// range-based version of the inplace_merge std algorithm
+///
+/// \pre BidirectionalRange is a model of the BidirectionalRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template<class BidirectionalRange>
+inline BidirectionalRange& inplace_merge(BidirectionalRange& rng,
+    BOOST_DEDUCED_TYPENAME range_iterator<BidirectionalRange>::type middle)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));
+    std::inplace_merge(pdalboost::begin(rng), middle, pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class BidirectionalRange>
+inline const BidirectionalRange& inplace_merge(const BidirectionalRange& rng,
+    BOOST_DEDUCED_TYPENAME pdalboost::range_iterator<const BidirectionalRange>::type middle)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));
+    std::inplace_merge(pdalboost::begin(rng), middle, pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class BidirectionalRange, class BinaryPredicate>
+inline BidirectionalRange& inplace_merge(BidirectionalRange& rng,
+    BOOST_DEDUCED_TYPENAME pdalboost::range_iterator<BidirectionalRange>::type middle,
+    BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));
+    std::inplace_merge(pdalboost::begin(rng), middle, pdalboost::end(rng), pred);
+    return rng;
+}
+
+/// \overload
+template<class BidirectionalRange, class BinaryPredicate>
+inline const BidirectionalRange& inplace_merge(const BidirectionalRange& rng,
+    BOOST_DEDUCED_TYPENAME pdalboost::range_iterator<const BidirectionalRange>::type middle,
+    BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));
+    std::inplace_merge(pdalboost::begin(rng), middle, pdalboost::end(rng), pred);
+    return rng;
+}
+
+    } // namespace range
+    using range::inplace_merge;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/lexicographical_compare.hpp b/vendor/pdalboost/boost/range/algorithm/lexicographical_compare.hpp
new file mode 100644
index 0000000..f9824fa
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/lexicographical_compare.hpp
@@ -0,0 +1,58 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_LEXICOGRAPHICAL_COMPARE_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_LEXICOGRAPHICAL_COMPARE_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function lexicographic_compare
+///
+/// range-based version of the lexicographic_compare std algorithm
+///
+/// \pre SinglePassRange1 is a model of the SinglePassRangeConcept
+/// \pre SinglePassRange2 is a model of the SinglePassRangeConcept
+template<class SinglePassRange1, class SinglePassRange2>
+inline bool lexicographical_compare(const SinglePassRange1& rng1,
+                                    const SinglePassRange2& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+    return std::lexicographical_compare(
+        pdalboost::begin(rng1), pdalboost::end(rng1),
+        pdalboost::begin(rng2), pdalboost::end(rng2));
+}
+
+/// \overload
+template<class SinglePassRange1, class SinglePassRange2,
+         class BinaryPredicate>
+inline bool lexicographical_compare(const SinglePassRange1& rng1,
+                                    const SinglePassRange2& rng2,
+                                    BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+    return std::lexicographical_compare(
+        pdalboost::begin(rng1), pdalboost::end(rng1),
+        pdalboost::begin(rng2), pdalboost::end(rng2), pred);
+}
+
+    } // namespace range
+    using range::lexicographical_compare;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/lower_bound.hpp b/vendor/pdalboost/boost/range/algorithm/lower_bound.hpp
new file mode 100644
index 0000000..195323d
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/lower_bound.hpp
@@ -0,0 +1,124 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_LOWER_BOUND_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_LOWER_BOUND_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function lower_bound
+///
+/// range-based version of the lower_bound std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+template< class ForwardRange, class Value >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<ForwardRange>,
+    BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+>::type
+lower_bound( ForwardRange& rng, Value val )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return std::lower_bound(pdalboost::begin(rng), pdalboost::end(rng), val);
+}
+
+/// \overload
+template< class ForwardRange, class Value >
+inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
+lower_bound( const ForwardRange& rng, Value val )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::lower_bound(pdalboost::begin(rng), pdalboost::end(rng), val);
+}
+
+/// \overload
+template< class ForwardRange, class Value, class SortPredicate >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<ForwardRange>,
+    BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+>::type
+lower_bound( ForwardRange& rng, Value val, SortPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return std::lower_bound(pdalboost::begin(rng), pdalboost::end(rng), val, pred);
+}
+
+/// \overload
+template< class ForwardRange, class Value, class SortPredicate >
+inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
+lower_bound( const ForwardRange& rng, Value val, SortPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::lower_bound(pdalboost::begin(rng), pdalboost::end(rng), val, pred);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange, class Value >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<ForwardRange>,
+    BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
+>::type
+lower_bound( ForwardRange& rng, Value val )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return range_return<ForwardRange,re>::
+        pack(std::lower_bound(pdalboost::begin(rng), pdalboost::end(rng), val),
+             rng);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange, class Value >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
+lower_bound( const ForwardRange& rng, Value val )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return range_return<const ForwardRange,re>::
+        pack(std::lower_bound(pdalboost::begin(rng), pdalboost::end(rng), val),
+             rng);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange, class Value, class SortPredicate >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<ForwardRange>,
+    BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
+>::type
+lower_bound( ForwardRange& rng, Value val, SortPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return range_return<ForwardRange,re>::
+        pack(std::lower_bound(pdalboost::begin(rng), pdalboost::end(rng), val, pred),
+             rng);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange, class Value, class SortPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
+lower_bound( const ForwardRange& rng, Value val, SortPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return range_return<const ForwardRange,re>::
+        pack(std::lower_bound(pdalboost::begin(rng), pdalboost::end(rng), val, pred),
+             rng);
+}
+
+    } // namespace range
+    using range::lower_bound;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/max_element.hpp b/vendor/pdalboost/boost/range/algorithm/max_element.hpp
new file mode 100644
index 0000000..20af2bf
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/max_element.hpp
@@ -0,0 +1,115 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_MAX_ELEMENT_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_MAX_ELEMENT_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function max_element
+///
+/// range-based version of the max_element std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template<class ForwardRange>
+inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+max_element(ForwardRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return std::max_element(pdalboost::begin(rng), pdalboost::end(rng));
+}
+
+/// \overload
+template<class ForwardRange>
+inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
+max_element(const ForwardRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::max_element(pdalboost::begin(rng), pdalboost::end(rng));
+}
+
+/// \overload
+template<class ForwardRange, class BinaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+max_element(ForwardRange& rng, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return std::max_element(pdalboost::begin(rng), pdalboost::end(rng), pred);
+}
+
+/// \overload
+template<class ForwardRange, class BinaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
+max_element(const ForwardRange& rng, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::max_element(pdalboost::begin(rng), pdalboost::end(rng), pred);
+}
+
+// range_return overloads
+
+/// \overload
+template<range_return_value re, class ForwardRange>
+inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
+max_element(ForwardRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return range_return<ForwardRange,re>::pack(
+        std::max_element(pdalboost::begin(rng), pdalboost::end(rng)),
+        rng);
+}
+
+/// \overload
+template<range_return_value re, class ForwardRange>
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
+max_element(const ForwardRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return range_return<const ForwardRange,re>::pack(
+        std::max_element(pdalboost::begin(rng), pdalboost::end(rng)),
+        rng);
+}
+
+/// \overload
+template<range_return_value re, class ForwardRange, class BinaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
+max_element(ForwardRange& rng, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return range_return<ForwardRange,re>::pack(
+        std::max_element(pdalboost::begin(rng), pdalboost::end(rng), pred),
+        rng);
+}
+
+/// \overload
+template<range_return_value re, class ForwardRange, class BinaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
+max_element(const ForwardRange& rng, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return range_return<const ForwardRange,re>::pack(
+        std::max_element(pdalboost::begin(rng), pdalboost::end(rng), pred),
+        rng);
+}
+
+    } // namespace range
+    using range::max_element;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/merge.hpp b/vendor/pdalboost/boost/range/algorithm/merge.hpp
new file mode 100644
index 0000000..53fe516
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/merge.hpp
@@ -0,0 +1,61 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_MERGE_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_MERGE_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function merge
+///
+/// range-based version of the merge std algorithm
+///
+/// \pre SinglePassRange1 is a model of the SinglePassRangeConcept
+/// \pre SinglePassRange2 is a model of the SinglePassRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+///
+template<class SinglePassRange1, class SinglePassRange2,
+         class OutputIterator>
+inline OutputIterator merge(const SinglePassRange1& rng1,
+                            const SinglePassRange2& rng2,
+                            OutputIterator          out)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+    return std::merge(pdalboost::begin(rng1), pdalboost::end(rng1),
+                      pdalboost::begin(rng2), pdalboost::end(rng2), out);
+}
+
+/// \overload
+template<class SinglePassRange1, class SinglePassRange2,
+         class OutputIterator, class BinaryPredicate>
+inline OutputIterator merge(const SinglePassRange1& rng1,
+                            const SinglePassRange2& rng2,
+                            OutputIterator          out,
+                            BinaryPredicate         pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+    return std::merge(pdalboost::begin(rng1), pdalboost::end(rng1),
+                      pdalboost::begin(rng2), pdalboost::end(rng2), out, pred);
+}
+
+    } // namespace range
+    using range::merge;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/min_element.hpp b/vendor/pdalboost/boost/range/algorithm/min_element.hpp
new file mode 100644
index 0000000..b8ff6a3
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/min_element.hpp
@@ -0,0 +1,115 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_MIN_ELEMENT_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_MIN_ELEMENT_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function min_element
+///
+/// range-based version of the min_element std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template<class ForwardRange>
+inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+min_element(ForwardRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return std::min_element(pdalboost::begin(rng), pdalboost::end(rng));
+}
+
+/// \overload
+template<class ForwardRange>
+inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
+min_element(const ForwardRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::min_element(pdalboost::begin(rng), pdalboost::end(rng));
+}
+
+/// \overload
+template<class ForwardRange, class BinaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+min_element(ForwardRange& rng, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return std::min_element(pdalboost::begin(rng), pdalboost::end(rng), pred);
+}
+
+/// \overload
+template<class ForwardRange, class BinaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
+min_element(const ForwardRange& rng, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::min_element(pdalboost::begin(rng), pdalboost::end(rng), pred);
+}
+
+// range_return overloads
+
+/// \overload
+template<range_return_value re, class ForwardRange>
+inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
+min_element(ForwardRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return range_return<ForwardRange,re>::pack(
+        std::min_element(pdalboost::begin(rng), pdalboost::end(rng)),
+        rng);
+}
+
+/// \overload
+template<range_return_value re, class ForwardRange>
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
+min_element(const ForwardRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return range_return<const ForwardRange,re>::pack(
+        std::min_element(pdalboost::begin(rng), pdalboost::end(rng)),
+        rng);
+}
+
+/// \overload
+template<range_return_value re, class ForwardRange, class BinaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
+min_element(ForwardRange& rng, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return range_return<ForwardRange,re>::pack(
+        std::min_element(pdalboost::begin(rng), pdalboost::end(rng), pred),
+        rng);
+}
+
+/// \overload
+template<range_return_value re, class ForwardRange, class BinaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
+min_element(const ForwardRange& rng, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return range_return<const ForwardRange,re>::pack(
+        std::min_element(pdalboost::begin(rng), pdalboost::end(rng), pred),
+        rng);
+}
+
+    } // namespace range
+    using range::min_element;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/mismatch.hpp b/vendor/pdalboost/boost/range/algorithm/mismatch.hpp
new file mode 100644
index 0000000..ba8a718
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/mismatch.hpp
@@ -0,0 +1,195 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_MISMATCH_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_MISMATCH_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/difference_type.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        template< class SinglePassTraversalReadableIterator1,
+                  class SinglePassTraversalReadableIterator2 >
+        inline std::pair<SinglePassTraversalReadableIterator1,
+                         SinglePassTraversalReadableIterator2>
+        mismatch_impl(SinglePassTraversalReadableIterator1 first1,
+                      SinglePassTraversalReadableIterator1 last1,
+                      SinglePassTraversalReadableIterator2 first2,
+                      SinglePassTraversalReadableIterator2 last2)
+        {
+            while (first1 != last1 && first2 != last2 && *first1 == *first2)
+            {
+                ++first1;
+                ++first2;
+            }
+            return std::pair<SinglePassTraversalReadableIterator1,
+                             SinglePassTraversalReadableIterator2>(first1, first2);
+        }
+
+        template< class SinglePassTraversalReadableIterator1,
+                  class SinglePassTraversalReadableIterator2,
+                  class BinaryPredicate >
+        inline std::pair<SinglePassTraversalReadableIterator1,
+                         SinglePassTraversalReadableIterator2>
+        mismatch_impl(SinglePassTraversalReadableIterator1 first1,
+                      SinglePassTraversalReadableIterator1 last1,
+                      SinglePassTraversalReadableIterator2 first2,
+                      SinglePassTraversalReadableIterator2 last2,
+                      BinaryPredicate pred)
+        {
+            while (first1 != last1 && first2 != last2 && pred(*first1, *first2))
+            {
+                ++first1;
+                ++first2;
+            }
+            return std::pair<SinglePassTraversalReadableIterator1,
+                             SinglePassTraversalReadableIterator2>(first1, first2);
+        }
+    } // namespace range_detail
+
+    namespace range
+    {
+/// \brief template function mismatch
+///
+/// range-based version of the mismatch std algorithm
+///
+/// \pre SinglePassRange1 is a model of the SinglePassRangeConcept
+/// \pre SinglePassRange2 is a model of the SinglePassRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template< class SinglePassRange1, class SinglePassRange2 >
+inline std::pair<
+    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type,
+    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange2>::type >
+mismatch(SinglePassRange1& rng1, const SinglePassRange2 & rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+
+    return ::pdalboost::range_detail::mismatch_impl(
+        ::pdalboost::begin(rng1), ::pdalboost::end(rng1),
+        ::pdalboost::begin(rng2), ::pdalboost::end(rng2));
+}
+
+/// \overload
+template< class SinglePassRange1, class SinglePassRange2 >
+inline std::pair<
+    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type,
+    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange2>::type >
+mismatch(const SinglePassRange1& rng1, const SinglePassRange2& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+
+    return ::pdalboost::range_detail::mismatch_impl(
+        ::pdalboost::begin(rng1), ::pdalboost::end(rng1),
+        ::pdalboost::begin(rng2), ::pdalboost::end(rng2));
+}
+
+/// \overload
+template< class SinglePassRange1, class SinglePassRange2 >
+inline std::pair<
+    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type,
+    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange2>::type >
+mismatch(SinglePassRange1& rng1, SinglePassRange2 & rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange2> ));
+
+    return ::pdalboost::range_detail::mismatch_impl(
+        ::pdalboost::begin(rng1), ::pdalboost::end(rng1),
+        ::pdalboost::begin(rng2), ::pdalboost::end(rng2));
+}
+
+/// \overload
+template< class SinglePassRange1, class SinglePassRange2 >
+inline std::pair<
+    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type,
+    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange2>::type >
+mismatch(const SinglePassRange1& rng1, SinglePassRange2& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange2> ));
+
+    return ::pdalboost::range_detail::mismatch_impl(
+        ::pdalboost::begin(rng1), ::pdalboost::end(rng1),
+        ::pdalboost::begin(rng2), ::pdalboost::end(rng2));
+}
+
+
+/// \overload
+template< class SinglePassRange1, class SinglePassRange2, class BinaryPredicate >
+inline std::pair<
+    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type,
+    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange2>::type >
+mismatch(SinglePassRange1& rng1, const SinglePassRange2& rng2, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+
+    return ::pdalboost::range_detail::mismatch_impl(
+        ::pdalboost::begin(rng1), ::pdalboost::end(rng1),
+        ::pdalboost::begin(rng2), ::pdalboost::end(rng2), pred);
+}
+
+/// \overload
+template< class SinglePassRange1, class SinglePassRange2, class BinaryPredicate >
+inline std::pair<
+    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type,
+    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange2>::type >
+mismatch(const SinglePassRange1& rng1, const SinglePassRange2& rng2, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+
+    return ::pdalboost::range_detail::mismatch_impl(
+        ::pdalboost::begin(rng1), ::pdalboost::end(rng1),
+        ::pdalboost::begin(rng2), ::pdalboost::end(rng2), pred);
+}
+
+/// \overload
+template< class SinglePassRange1, class SinglePassRange2, class BinaryPredicate >
+inline std::pair<
+    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange1>::type,
+    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange2>::type >
+mismatch(SinglePassRange1& rng1, SinglePassRange2& rng2, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange2> ));
+
+    return ::pdalboost::range_detail::mismatch_impl(
+        ::pdalboost::begin(rng1), ::pdalboost::end(rng1),
+        ::pdalboost::begin(rng2), ::pdalboost::end(rng2), pred);
+}
+
+/// \overload
+template< class SinglePassRange1, class SinglePassRange2, class BinaryPredicate >
+inline std::pair<
+    BOOST_DEDUCED_TYPENAME range_iterator<const SinglePassRange1>::type,
+    BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange2>::type >
+mismatch(const SinglePassRange1& rng1, SinglePassRange2& rng2, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<SinglePassRange2> ));
+
+    return ::pdalboost::range_detail::mismatch_impl(
+        ::pdalboost::begin(rng1), ::pdalboost::end(rng1),
+        ::pdalboost::begin(rng2), ::pdalboost::end(rng2), pred);
+}
+
+    } // namespace range
+    using range::mismatch;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/nth_element.hpp b/vendor/pdalboost/boost/range/algorithm/nth_element.hpp
new file mode 100644
index 0000000..008b389
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/nth_element.hpp
@@ -0,0 +1,74 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_NTH_ELEMENT_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_NTH_ELEMENT_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function nth_element
+///
+/// range-based version of the nth_element std algorithm
+///
+/// \pre RandomAccessRange is a model of the RandomAccessRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template<class RandomAccessRange>
+inline RandomAccessRange& nth_element(RandomAccessRange& rng,
+    BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type nth)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::nth_element(pdalboost::begin(rng), nth, pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange>
+inline const RandomAccessRange& nth_element(const RandomAccessRange& rng,
+    BOOST_DEDUCED_TYPENAME range_iterator<const RandomAccessRange>::type nth)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::nth_element(pdalboost::begin(rng), nth, pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class BinaryPredicate>
+inline RandomAccessRange& nth_element(RandomAccessRange& rng,
+    BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type nth,
+    BinaryPredicate sort_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::nth_element(pdalboost::begin(rng), nth, pdalboost::end(rng), sort_pred);
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class BinaryPredicate>
+inline const RandomAccessRange& nth_element(const RandomAccessRange& rng,
+    BOOST_DEDUCED_TYPENAME range_iterator<const RandomAccessRange>::type nth,
+    BinaryPredicate sort_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::nth_element(pdalboost::begin(rng), nth, pdalboost::end(rng), sort_pred);
+    return rng;
+}
+
+    } // namespace range
+    using range::nth_element;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/partial_sort.hpp b/vendor/pdalboost/boost/range/algorithm/partial_sort.hpp
new file mode 100644
index 0000000..fde968c
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/partial_sort.hpp
@@ -0,0 +1,76 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_PARTIAL_SORT_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_PARTIAL_SORT_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function partial_sort
+///
+/// range-based version of the partial_sort std algorithm
+///
+/// \pre RandomAccessRange is a model of the RandomAccessRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template<class RandomAccessRange>
+inline RandomAccessRange& partial_sort(RandomAccessRange& rng,
+    BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type middle)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::partial_sort(pdalboost::begin(rng), middle, pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange>
+inline const RandomAccessRange& partial_sort(const RandomAccessRange& rng,
+    BOOST_DEDUCED_TYPENAME range_iterator<const RandomAccessRange>::type middle)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::partial_sort(pdalboost::begin(rng), middle, pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class BinaryPredicate>
+inline RandomAccessRange& partial_sort(RandomAccessRange& rng,
+    BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type middle,
+    BinaryPredicate sort_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::partial_sort(pdalboost::begin(rng), middle, pdalboost::end(rng),
+                        sort_pred);
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class BinaryPredicate>
+inline const RandomAccessRange& partial_sort(const RandomAccessRange& rng,
+    BOOST_DEDUCED_TYPENAME range_iterator<const RandomAccessRange>::type middle,
+    BinaryPredicate sort_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::partial_sort(pdalboost::begin(rng), middle, pdalboost::end(rng),
+                        sort_pred);
+    return rng;
+}
+
+    } // namespace range
+    using range::partial_sort;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/partial_sort_copy.hpp b/vendor/pdalboost/boost/range/algorithm/partial_sort_copy.hpp
new file mode 100644
index 0000000..092834d
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/partial_sort_copy.hpp
@@ -0,0 +1,82 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_PARTIAL_SORT_COPY_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_PARTIAL_SORT_COPY_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/value_type.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function partial_sort_copy
+///
+/// range-based version of the partial_sort_copy std algorithm
+///
+/// \pre SinglePassRange is a model of the SinglePassRangeConcept
+/// \pre RandomAccessRange is a model of the Mutable_RandomAccessRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template<class SinglePassRange, class RandomAccessRange>
+inline BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type
+partial_sort_copy(const SinglePassRange& rng1, RandomAccessRange& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<const SinglePassRange>));
+
+    return std::partial_sort_copy(pdalboost::begin(rng1), pdalboost::end(rng1),
+        pdalboost::begin(rng2), pdalboost::end(rng2));
+}
+
+/// \overload
+template<class SinglePassRange, class RandomAccessRange>
+inline BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type
+partial_sort_copy(const SinglePassRange& rng1, const RandomAccessRange& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<const SinglePassRange>));
+
+    return std::partial_sort_copy(pdalboost::begin(rng1), pdalboost::end(rng1),
+        pdalboost::begin(rng2), pdalboost::end(rng2));
+}
+
+/// \overload
+template<class SinglePassRange, class RandomAccessRange,
+         class BinaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_iterator<RandomAccessRange>::type
+partial_sort_copy(const SinglePassRange& rng1, RandomAccessRange& rng2,
+    BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<const SinglePassRange>));
+
+    return std::partial_sort_copy(pdalboost::begin(rng1), pdalboost::end(rng1),
+        pdalboost::begin(rng2), pdalboost::end(rng2), pred);
+}
+
+/// \overload
+template<class SinglePassRange, class RandomAccessRange,
+         class BinaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_iterator<const RandomAccessRange>::type
+partial_sort_copy(const SinglePassRange& rng1, const RandomAccessRange& rng2,
+    BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept<const SinglePassRange>));
+
+    return std::partial_sort_copy(pdalboost::begin(rng1), pdalboost::end(rng1),
+        pdalboost::begin(rng2), pdalboost::end(rng2), pred);
+}
+
+    } // namespace range
+    using range::partial_sort_copy;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/partition.hpp b/vendor/pdalboost/boost/range/algorithm/partition.hpp
new file mode 100644
index 0000000..608833d
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/partition.hpp
@@ -0,0 +1,74 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_PARTITION__HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_PARTITION__HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function partition
+///
+/// range-based version of the partition std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+template<class ForwardRange, class UnaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+partition(ForwardRange& rng, UnaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return std::partition(pdalboost::begin(rng),pdalboost::end(rng),pred);
+}
+
+/// \overload
+template<class ForwardRange, class UnaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+partition(const ForwardRange& rng, UnaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::partition(pdalboost::begin(rng),pdalboost::end(rng),pred);
+}
+
+// range_return overloads
+
+/// \overload
+template< range_return_value re, class ForwardRange,
+          class UnaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
+partition(ForwardRange& rng, UnaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return pdalboost::range_return<ForwardRange,re>::
+        pack(std::partition(pdalboost::begin(rng), pdalboost::end(rng), pred), rng);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange,
+          class UnaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
+partition(const ForwardRange& rng, UnaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return pdalboost::range_return<const ForwardRange,re>::
+        pack(std::partition(pdalboost::begin(rng), pdalboost::end(rng), pred), rng);
+}
+
+    } // namespace range
+    using range::partition;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/permutation.hpp b/vendor/pdalboost/boost/range/algorithm/permutation.hpp
new file mode 100644
index 0000000..335adc9
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/permutation.hpp
@@ -0,0 +1,108 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_PERMUTATION_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_PERMUTATION_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function next_permutation
+///
+/// range-based version of the next_permutation std algorithm
+///
+/// \pre BidirectionalRange is a model of the BidirectionalRangeConcept
+/// \pre Compare is a model of the BinaryPredicateConcept
+template<class BidirectionalRange>
+inline bool next_permutation(BidirectionalRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));
+    return std::next_permutation(pdalboost::begin(rng), pdalboost::end(rng));
+}
+
+/// \overload
+template<class BidirectionalRange>
+inline bool next_permutation(const BidirectionalRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));
+    return std::next_permutation(pdalboost::begin(rng), pdalboost::end(rng));
+}
+
+/// \overload
+template<class BidirectionalRange, class Compare>
+inline bool next_permutation(BidirectionalRange& rng, Compare comp_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));
+    return std::next_permutation(pdalboost::begin(rng), pdalboost::end(rng),
+                                 comp_pred);
+}
+
+/// \overload
+template<class BidirectionalRange, class Compare>
+inline bool next_permutation(const BidirectionalRange& rng,
+                             Compare                   comp_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));
+    return std::next_permutation(pdalboost::begin(rng), pdalboost::end(rng),
+                                 comp_pred);
+}
+
+/// \brief template function prev_permutation
+///
+/// range-based version of the prev_permutation std algorithm
+///
+/// \pre BidirectionalRange is a model of the BidirectionalRangeConcept
+/// \pre Compare is a model of the BinaryPredicateConcept
+template<class BidirectionalRange>
+inline bool prev_permutation(BidirectionalRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));
+    return std::prev_permutation(pdalboost::begin(rng), pdalboost::end(rng));
+}
+
+/// \overload
+template<class BidirectionalRange>
+inline bool prev_permutation(const BidirectionalRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));
+    return std::prev_permutation(pdalboost::begin(rng), pdalboost::end(rng));
+}
+
+/// \overload
+template<class BidirectionalRange, class Compare>
+inline bool prev_permutation(BidirectionalRange& rng, Compare comp_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));
+    return std::prev_permutation(pdalboost::begin(rng), pdalboost::end(rng),
+                                 comp_pred);
+}
+
+/// \overload
+template<class BidirectionalRange, class Compare>
+inline bool prev_permutation(const BidirectionalRange& rng,
+                             Compare                   comp_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));
+    return std::prev_permutation(pdalboost::begin(rng), pdalboost::end(rng),
+                                 comp_pred);
+}
+
+    } // namespace range
+    using range::next_permutation;
+    using range::prev_permutation;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/random_shuffle.hpp b/vendor/pdalboost/boost/range/algorithm/random_shuffle.hpp
new file mode 100644
index 0000000..05df977
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/random_shuffle.hpp
@@ -0,0 +1,68 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_RANDOM_SHUFFLE_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_RANDOM_SHUFFLE_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function random_shuffle
+///
+/// range-based version of the random_shuffle std algorithm
+///
+/// \pre RandomAccessRange is a model of the RandomAccessRangeConcept
+/// \pre Generator is a model of the UnaryFunctionConcept
+template<class RandomAccessRange>
+inline RandomAccessRange& random_shuffle(RandomAccessRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::random_shuffle(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange>
+inline const RandomAccessRange& random_shuffle(const RandomAccessRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::random_shuffle(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class Generator>
+inline RandomAccessRange& random_shuffle(RandomAccessRange& rng, Generator& gen)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::random_shuffle(pdalboost::begin(rng), pdalboost::end(rng), gen);
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class Generator>
+inline const RandomAccessRange& random_shuffle(const RandomAccessRange& rng, Generator& gen)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::random_shuffle(pdalboost::begin(rng), pdalboost::end(rng), gen);
+    return rng;
+}
+
+    } // namespace range
+    using range::random_shuffle;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/remove.hpp b/vendor/pdalboost/boost/range/algorithm/remove.hpp
new file mode 100644
index 0000000..7939f43
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/remove.hpp
@@ -0,0 +1,74 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_REMOVE_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_REMOVE_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function remove
+///
+/// range-based version of the remove std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+template< class ForwardRange, class Value >
+inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+remove(ForwardRange& rng, const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return std::remove(pdalboost::begin(rng),pdalboost::end(rng),val);
+}
+
+/// \overload
+template< class ForwardRange, class Value >
+inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
+remove(const ForwardRange& rng, const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::remove(pdalboost::begin(rng),pdalboost::end(rng),val);
+}
+
+// range_return overloads
+
+/// \overload
+template< range_return_value re, class ForwardRange, class Value >
+inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
+remove(ForwardRange& rng, const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return range_return<ForwardRange,re>::pack(
+        std::remove(pdalboost::begin(rng), pdalboost::end(rng), val),
+        rng);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange, class Value >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
+remove(const ForwardRange& rng, const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return range_return<const ForwardRange,re>::pack(
+        std::remove(pdalboost::begin(rng), pdalboost::end(rng), val),
+        rng);
+}
+
+    } // namespace range
+    using range::remove;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/remove_copy.hpp b/vendor/pdalboost/boost/range/algorithm/remove_copy.hpp
new file mode 100644
index 0000000..43eb8f0
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/remove_copy.hpp
@@ -0,0 +1,44 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_REMOVE_COPY_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_REMOVE_COPY_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function remove_copy
+///
+/// range-based version of the remove_copy std algorithm
+///
+/// \pre SinglePassRange is a model of the SinglePassRangeConcept
+/// \pre OutputIterator is a model of the OutputIteratorConcept
+/// \pre Value is a model of the EqualityComparableConcept
+/// \pre Objects of type Value can be compared for equality with objects of
+/// InputIterator's value type.
+template< class SinglePassRange, class OutputIterator, class Value >
+inline OutputIterator
+remove_copy(const SinglePassRange& rng, OutputIterator out_it, const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
+    return std::remove_copy(pdalboost::begin(rng), pdalboost::end(rng), out_it, val);
+}
+
+    } // namespace range
+    using range::remove_copy;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/remove_copy_if.hpp b/vendor/pdalboost/boost/range/algorithm/remove_copy_if.hpp
new file mode 100644
index 0000000..26ab89c
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/remove_copy_if.hpp
@@ -0,0 +1,38 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_REMOVE_COPY_IF_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_REMOVE_COPY_IF_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    /// \brief template function remove_copy_if
+    ///
+    /// range-based version of the remove_copy_if std algorithm
+    ///
+    /// \pre SinglePassRange is a model of the SinglePassRangeConcept
+    /// \pre OutputIterator is a model of the OutputIteratorConcept
+    /// \pre Predicate is a model of the PredicateConcept
+    /// \pre InputIterator's value type is convertible to Predicate's argument type
+    /// \pre out_it is not an iterator in the range rng
+    template< class SinglePassRange, class OutputIterator, class Predicate >
+    inline OutputIterator
+    remove_copy_if(const SinglePassRange& rng, OutputIterator out_it, Predicate pred)
+    {
+        BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
+        return std::remove_copy_if(pdalboost::begin(rng), pdalboost::end(rng), out_it, pred);
+    }
+}
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/remove_if.hpp b/vendor/pdalboost/boost/range/algorithm/remove_if.hpp
new file mode 100644
index 0000000..b9a0135
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/remove_if.hpp
@@ -0,0 +1,75 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_REMOVE_IF_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_REMOVE_IF_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function remove_if
+///
+/// range-based version of the remove_if std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+/// \pre UnaryPredicate is a model of the UnaryPredicateConcept
+template< class ForwardRange, class UnaryPredicate >
+inline BOOST_DEDUCED_TYPENAME pdalboost::range_iterator<ForwardRange>::type
+remove_if(ForwardRange& rng, UnaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return std::remove_if(pdalboost::begin(rng), pdalboost::end(rng), pred);
+}
+
+/// \overload
+template< class ForwardRange, class UnaryPredicate >
+inline BOOST_DEDUCED_TYPENAME pdalboost::range_iterator<const ForwardRange>::type
+remove_if(const ForwardRange& rng, UnaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::remove_if(pdalboost::begin(rng), pdalboost::end(rng), pred);
+}
+
+// range_return overloads
+
+/// \overload
+template< range_return_value re, class ForwardRange, class UnaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
+remove_if(ForwardRange& rng, UnaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return range_return<ForwardRange,re>::pack(
+        std::remove_if(pdalboost::begin(rng), pdalboost::end(rng), pred),
+        rng);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange, class UnaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
+remove_if(const ForwardRange& rng, UnaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return range_return<const ForwardRange,re>::pack(
+        std::remove_if(pdalboost::begin(rng), pdalboost::end(rng), pred),
+        rng);
+}
+
+    } // namespace range
+    using range::remove_if;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/replace.hpp b/vendor/pdalboost/boost/range/algorithm/replace.hpp
new file mode 100644
index 0000000..a397839
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/replace.hpp
@@ -0,0 +1,53 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_REPLACE_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_REPLACE_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function replace
+///
+/// range-based version of the replace std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+template< class ForwardRange, class Value >
+inline ForwardRange&
+replace(ForwardRange& rng, const Value& what,
+        const Value& with_what)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    std::replace(pdalboost::begin(rng), pdalboost::end(rng), what, with_what);
+    return rng;
+}
+
+/// \overload
+template< class ForwardRange, class Value >
+inline const ForwardRange&
+replace(const ForwardRange& rng, const Value& what,
+        const Value& with_what)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    std::replace(pdalboost::begin(rng), pdalboost::end(rng), what, with_what);
+    return rng;
+}
+
+    } // namespace range
+    using range::replace;
+} // namespace pdalboost;
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/replace_copy.hpp b/vendor/pdalboost/boost/range/algorithm/replace_copy.hpp
new file mode 100644
index 0000000..a1fef17
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/replace_copy.hpp
@@ -0,0 +1,42 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_REPLACE_COPY_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_REPLACE_COPY_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function replace_copy
+///
+/// range-based version of the replace_copy std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+template< class ForwardRange, class OutputIterator, class Value >
+inline OutputIterator
+replace_copy(const ForwardRange& rng, OutputIterator out_it, const Value& what,
+        const Value& with_what)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::replace_copy(pdalboost::begin(rng), pdalboost::end(rng), out_it,
+        what, with_what);
+}
+
+    } // namespace range
+    using range::replace_copy;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/replace_copy_if.hpp b/vendor/pdalboost/boost/range/algorithm/replace_copy_if.hpp
new file mode 100644
index 0000000..e5b8870
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/replace_copy_if.hpp
@@ -0,0 +1,46 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_REPLACE_COPY_IF_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_REPLACE_COPY_IF_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function replace_copy_if
+///
+/// range-based version of the replace_copy_if std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+/// \pre Predicate is a model of the PredicateConcept
+/// \pre Value is convertible to Predicate's argument type
+/// \pre Value is Assignable
+/// \pre Value is convertible to a type in OutputIterator's set of value types.
+template< class ForwardRange, class OutputIterator, class Predicate, class Value >
+inline OutputIterator
+replace_copy_if(const ForwardRange& rng, OutputIterator out_it, Predicate pred,
+        const Value& with_what)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::replace_copy_if(pdalboost::begin(rng), pdalboost::end(rng), out_it,
+        pred, with_what);
+}
+
+    } // namespace range
+    using range::replace_copy_if;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/replace_if.hpp b/vendor/pdalboost/boost/range/algorithm/replace_if.hpp
new file mode 100644
index 0000000..8c0c8ed
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/replace_if.hpp
@@ -0,0 +1,54 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_REPLACE_IF_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_REPLACE_IF_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function replace_if
+///
+/// range-based version of the replace_if std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+/// \pre UnaryPredicate is a model of the UnaryPredicateConcept
+template< class ForwardRange, class UnaryPredicate, class Value >
+inline ForwardRange&
+    replace_if(ForwardRange& rng, UnaryPredicate pred,
+               const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    std::replace_if(pdalboost::begin(rng), pdalboost::end(rng), pred, val);
+    return rng;
+}
+
+/// \overload
+template< class ForwardRange, class UnaryPredicate, class Value >
+inline const ForwardRange&
+    replace_if(const ForwardRange& rng, UnaryPredicate pred,
+               const Value& val)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    std::replace_if(pdalboost::begin(rng), pdalboost::end(rng), pred, val);
+    return rng;
+}
+
+    } // namespace range
+    using range::replace_if;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/reverse.hpp b/vendor/pdalboost/boost/range/algorithm/reverse.hpp
new file mode 100644
index 0000000..6e9b1df
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/reverse.hpp
@@ -0,0 +1,50 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_REVERSE_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_REVERSE_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function reverse
+///
+/// range-based version of the reverse std algorithm
+///
+/// \pre BidirectionalRange is a model of the BidirectionalRangeConcept
+template<class BidirectionalRange>
+inline BidirectionalRange& reverse(BidirectionalRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));
+    std::reverse(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class BidirectionalRange>
+inline const BidirectionalRange& reverse(const BidirectionalRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));
+    std::reverse(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+    } // namespace range
+    using range::reverse;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/reverse_copy.hpp b/vendor/pdalboost/boost/range/algorithm/reverse_copy.hpp
new file mode 100644
index 0000000..420947d
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/reverse_copy.hpp
@@ -0,0 +1,40 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_REVERSE_COPY_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_REVERSE_COPY_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/iterator/iterator_concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function reverse_copy
+///
+/// range-based version of the reverse_copy std algorithm
+///
+/// \pre BidirectionalRange is a model of the BidirectionalRangeConcept
+template<class BidirectionalRange, class OutputIterator>
+inline OutputIterator reverse_copy(const BidirectionalRange& rng, OutputIterator out)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));
+    return std::reverse_copy(pdalboost::begin(rng), pdalboost::end(rng), out);
+}
+
+    } // namespace range
+    using range::reverse_copy;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/rotate.hpp b/vendor/pdalboost/boost/range/algorithm/rotate.hpp
new file mode 100644
index 0000000..41c0ef3
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/rotate.hpp
@@ -0,0 +1,51 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_ROTATE_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_ROTATE_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function rotate
+///
+/// range-based version of the rotate std algorithm
+///
+/// \pre Rng meets the requirements for a Forward range
+template<class ForwardRange>
+inline ForwardRange& rotate(ForwardRange& rng,
+    BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type middle)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    std::rotate(pdalboost::begin(rng), middle, pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class ForwardRange>
+inline const ForwardRange& rotate(const ForwardRange& rng,
+    BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type middle)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    std::rotate(pdalboost::begin(rng), middle, pdalboost::end(rng));
+    return rng;
+}
+
+    } // namespace range
+    using range::rotate;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/rotate_copy.hpp b/vendor/pdalboost/boost/range/algorithm/rotate_copy.hpp
new file mode 100644
index 0000000..0dd2aa7
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/rotate_copy.hpp
@@ -0,0 +1,44 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_ROTATE_COPY_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_ROTATE_COPY_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/iterator.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+    /// \brief template function rotate
+    ///
+    /// range-based version of the rotate std algorithm
+    ///
+    /// \pre Rng meets the requirements for a Forward range
+    template<typename ForwardRange, typename OutputIterator>
+    inline OutputIterator rotate_copy(
+        const ForwardRange&                                             rng,
+        BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type middle,
+        OutputIterator                                                  target
+        )
+    {
+        BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+        return std::rotate_copy(pdalboost::begin(rng), middle, pdalboost::end(rng), target);
+    }
+
+    } // namespace range
+    using range::rotate_copy;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/search.hpp b/vendor/pdalboost/boost/range/algorithm/search.hpp
new file mode 100644
index 0000000..e367182
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/search.hpp
@@ -0,0 +1,134 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_SEARCH_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_SEARCH_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function search
+///
+/// range-based version of the search std algorithm
+///
+/// \pre ForwardRange1 is a model of the ForwardRangeConcept
+/// \pre ForwardRange2 is a model of the ForwardRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template< class ForwardRange1, class ForwardRange2 >
+inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange1>::type
+search(ForwardRange1& rng1, const ForwardRange2& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+    return std::search(pdalboost::begin(rng1),pdalboost::end(rng1),
+                       pdalboost::begin(rng2),pdalboost::end(rng2));
+}
+
+/// \overload
+template< class ForwardRange1, class ForwardRange2 >
+inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange1>::type
+search(const ForwardRange1& rng1, const ForwardRange2& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+    return std::search(pdalboost::begin(rng1), pdalboost::end(rng1),
+                       pdalboost::begin(rng2), pdalboost::end(rng2));
+}
+
+/// \overload
+template< class ForwardRange1, class ForwardRange2, class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange1>::type
+search(ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+    return std::search(pdalboost::begin(rng1),pdalboost::end(rng1),
+                       pdalboost::begin(rng2),pdalboost::end(rng2),pred);
+}
+
+/// \overload
+template< class ForwardRange1, class ForwardRange2, class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange1>::type
+search(const ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+    return std::search(pdalboost::begin(rng1), pdalboost::end(rng1),
+                       pdalboost::begin(rng2), pdalboost::end(rng2), pred);
+}
+
+// range_return overloads
+
+/// \overload
+template< range_return_value re, class ForwardRange1, class ForwardRange2 >
+inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange1,re>::type
+search(ForwardRange1& rng1, const ForwardRange2& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+    return range_return<ForwardRange1,re>::
+        pack(std::search(pdalboost::begin(rng1),pdalboost::end(rng1),
+                         pdalboost::begin(rng2),pdalboost::end(rng2)),
+             rng1);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange1, class ForwardRange2 >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange1,re>::type
+search(const ForwardRange1& rng1, const ForwardRange2& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+    return range_return<const ForwardRange1,re>::
+        pack(std::search(pdalboost::begin(rng1),pdalboost::end(rng1),
+                         pdalboost::begin(rng2),pdalboost::end(rng2)),
+             rng1);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange1, class ForwardRange2,
+          class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange1,re>::type
+search(ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+    return range_return<ForwardRange1,re>::
+        pack(std::search(pdalboost::begin(rng1),pdalboost::end(rng1),
+                         pdalboost::begin(rng2),pdalboost::end(rng2),pred),
+             rng1);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange1, class ForwardRange2,
+          class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange1,re>::type
+search(const ForwardRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange2> ));
+    return range_return<const ForwardRange1,re>::
+        pack(std::search(pdalboost::begin(rng1),pdalboost::end(rng1),
+                         pdalboost::begin(rng2),pdalboost::end(rng2),pred),
+             rng1);
+}
+
+    } // namespace range
+    using range::search;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/search_n.hpp b/vendor/pdalboost/boost/range/algorithm/search_n.hpp
new file mode 100644
index 0000000..e1703c3
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/search_n.hpp
@@ -0,0 +1,360 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_SEARCH_N_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_SEARCH_N_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <boost/range/value_type.hpp>
+#include <iterator>
+#include <algorithm>
+
+namespace pdalboost
+{
+
+namespace range_detail
+{
+    // Rationale: search_n is implemented rather than delegate to
+    // the standard library implementation because some standard
+    // library implementations are broken eg. MSVC.
+
+    // search_n forward iterator version
+    template<typename ForwardIterator, typename Integer, typename Value>
+    inline ForwardIterator
+    search_n_impl(ForwardIterator first, ForwardIterator last, Integer count,
+                  const Value& value, std::forward_iterator_tag)
+    {
+        first = std::find(first, last, value);
+        while (first != last)
+        {
+            typename std::iterator_traits<ForwardIterator>::difference_type n = count;
+            ForwardIterator i = first;
+            ++i;
+            while (i != last && n != 1 && *i==value)
+            {
+                ++i;
+                --n;
+            }
+            if (n == 1)
+                return first;
+            if (i == last)
+                return last;
+            first = std::find(++i, last, value);
+        }
+        return last;
+    }
+
+    // search_n random-access iterator version
+    template<typename RandomAccessIterator, typename Integer, typename Value>
+    inline RandomAccessIterator
+    search_n_impl(RandomAccessIterator first, RandomAccessIterator last,
+                  Integer count, const Value& value,
+                  std::random_access_iterator_tag)
+    {
+        typedef typename std::iterator_traits<RandomAccessIterator>::difference_type difference_t;
+
+        difference_t tail_size = last - first;
+        const difference_t pattern_size = count;
+
+        if (tail_size < pattern_size)
+            return last;
+
+        const difference_t skip_offset = pattern_size - 1;
+        RandomAccessIterator look_ahead = first + skip_offset;
+        tail_size -= pattern_size;
+
+        while (1)
+        {
+            // look_ahead here is pointing to the last element of the
+            // next possible match
+            while (!(*look_ahead == value)) // skip loop...
+            {
+                if (tail_size < pattern_size)
+                    return last; // no match
+                look_ahead += pattern_size;
+                tail_size -= pattern_size;
+            }
+            difference_t remainder = skip_offset;
+            for (RandomAccessIterator back_track = look_ahead - 1;
+                    *back_track == value; --back_track)
+            {
+                if (--remainder == 0)
+                {
+                    return look_ahead - skip_offset; // matched
+                }
+            }
+            if (remainder > tail_size)
+                return last; // no match
+            look_ahead += remainder;
+            tail_size -= remainder;
+        }
+
+        return last;
+    }
+
+    // search_n for forward iterators using a binary predicate
+    // to determine a match
+    template<typename ForwardIterator, typename Integer, typename Value,
+             typename BinaryPredicate>
+    inline ForwardIterator
+    search_n_pred_impl(ForwardIterator first, ForwardIterator last,
+                       Integer count, const Value& value,
+                       BinaryPredicate pred, std::forward_iterator_tag)
+    {
+        typedef typename std::iterator_traits<ForwardIterator>::difference_type difference_t;
+
+        while (first != last && !static_cast<bool>(pred(*first, value)))
+            ++first;
+
+        while (first != last)
+        {
+            difference_t n = count;
+            ForwardIterator i = first;
+            ++i;
+            while (i != last && n != 1 && static_cast<bool>(pred(*i, value)))
+            {
+                ++i;
+                --n;
+            }
+            if (n == 1)
+                return first;
+            if (i == last)
+                return last;
+            first = ++i;
+            while (first != last && !static_cast<bool>(pred(*first, value)))
+                ++first;
+        }
+        return last;
+    }
+
+    // search_n for random-access iterators using a binary predicate
+    // to determine a match
+    template<typename RandomAccessIterator, typename Integer,
+             typename Value, typename BinaryPredicate>
+    inline RandomAccessIterator
+    search_n_pred_impl(RandomAccessIterator first, RandomAccessIterator last,
+                       Integer count, const Value& value,
+                       BinaryPredicate pred, std::random_access_iterator_tag)
+    {
+        typedef typename std::iterator_traits<RandomAccessIterator>::difference_type difference_t;
+
+        difference_t tail_size = last - first;
+        const difference_t pattern_size = count;
+
+        if (tail_size < pattern_size)
+            return last;
+
+        const difference_t skip_offset = pattern_size - 1;
+        RandomAccessIterator look_ahead = first + skip_offset;
+        tail_size -= pattern_size;
+
+        while (1)
+        {
+            // look_ahead points to the last element of the next
+            // possible match
+            while (!static_cast<bool>(pred(*look_ahead, value))) // skip loop
+            {
+                if (tail_size < pattern_size)
+                    return last; // no match
+                look_ahead += pattern_size;
+                tail_size -= pattern_size;
+            }
+            difference_t remainder = skip_offset;
+            for (RandomAccessIterator back_track = look_ahead - 1;
+                    pred(*back_track, value); --back_track)
+            {
+                if (--remainder == 0)
+                    return look_ahead -= skip_offset; // success
+            }
+            if (remainder > tail_size)
+            {
+                return last; // no match
+            }
+            look_ahead += remainder;
+            tail_size -= remainder;
+        }
+    }
+
+    template<typename ForwardIterator, typename Integer, typename Value>
+    inline ForwardIterator
+    search_n_impl(ForwardIterator first, ForwardIterator last,
+                  Integer count, const Value& value)
+    {
+        BOOST_RANGE_CONCEPT_ASSERT((ForwardIteratorConcept<ForwardIterator>));
+        BOOST_RANGE_CONCEPT_ASSERT((EqualityComparableConcept<Value>));
+        BOOST_RANGE_CONCEPT_ASSERT((EqualityComparableConcept<typename std::iterator_traits<ForwardIterator>::value_type>));
+        //BOOST_RANGE_CONCEPT_ASSERT((EqualityComparableConcept2<typename std::iterator_traits<ForwardIterator>::value_type, Value>));
+
+        typedef typename std::iterator_traits<ForwardIterator>::iterator_category cat_t;
+
+        if (count <= 0)
+            return first;
+        if (count == 1)
+            return std::find(first, last, value);
+        return range_detail::search_n_impl(first, last, count, value, cat_t());
+    }
+
+    template<typename ForwardIterator, typename Integer, typename Value,
+             typename BinaryPredicate>
+    inline ForwardIterator
+    search_n_pred_impl(ForwardIterator first, ForwardIterator last,
+                       Integer count, const Value& value,
+                       BinaryPredicate pred)
+    {
+        BOOST_RANGE_CONCEPT_ASSERT((ForwardIteratorConcept<ForwardIterator>));
+        BOOST_RANGE_CONCEPT_ASSERT((
+            BinaryPredicateConcept<
+                BinaryPredicate,
+                typename std::iterator_traits<ForwardIterator>::value_type,
+                Value>
+            ));
+
+        typedef typename std::iterator_traits<ForwardIterator>::iterator_category cat_t;
+
+        if (count <= 0)
+            return first;
+        if (count == 1)
+        {
+            while (first != last && !static_cast<bool>(pred(*first, value)))
+                ++first;
+            return first;
+        }
+        return range_detail::search_n_pred_impl(first, last, count,
+                                                value, pred, cat_t());
+    }
+} // namespace range_detail
+
+namespace range {
+
+/// \brief template function search
+///
+/// range-based version of the search std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+/// \pre Integer is an integral type
+/// \pre Value is a model of the EqualityComparableConcept
+/// \pre ForwardRange's value type is a model of the EqualityComparableConcept
+/// \pre Object's of ForwardRange's value type can be compared for equality with Objects of type Value
+template< class ForwardRange, class Integer, class Value >
+inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+search_n(ForwardRange& rng, Integer count, const Value& value)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
+    return range_detail::search_n_impl(pdalboost::begin(rng),pdalboost::end(rng), count, value);
+}
+
+/// \overload
+template< class ForwardRange, class Integer, class Value >
+inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
+search_n(const ForwardRange& rng, Integer count, const Value& value)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRange>));
+    return range_detail::search_n_impl(pdalboost::begin(rng), pdalboost::end(rng), count, value);
+}
+
+/// \overload
+template< class ForwardRange, class Integer, class Value,
+          class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+search_n(ForwardRange& rng, Integer count, const Value& value,
+         BinaryPredicate binary_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
+    BOOST_RANGE_CONCEPT_ASSERT((BinaryPredicateConcept<BinaryPredicate,
+        BOOST_DEDUCED_TYPENAME range_value<ForwardRange>::type, const Value&>));
+    return range_detail::search_n_pred_impl(pdalboost::begin(rng), pdalboost::end(rng),
+        count, value, binary_pred);
+}
+
+/// \overload
+template< class ForwardRange, class Integer, class Value,
+          class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
+search_n(const ForwardRange& rng, Integer count, const Value& value,
+         BinaryPredicate binary_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRange>));
+    BOOST_RANGE_CONCEPT_ASSERT((BinaryPredicateConcept<BinaryPredicate,
+        BOOST_DEDUCED_TYPENAME range_value<const ForwardRange>::type, const Value&>));
+    return range_detail::search_n_pred_impl(pdalboost::begin(rng), pdalboost::end(rng),
+        count, value, binary_pred);
+}
+
+// range_return overloads
+
+/// \overload
+template< range_return_value re, class ForwardRange, class Integer,
+          class Value >
+inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
+search_n(ForwardRange& rng, Integer count, const Value& value)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
+    return range_return<ForwardRange,re>::
+        pack(range_detail::search_n_impl(pdalboost::begin(rng),pdalboost::end(rng),
+                           count, value),
+             rng);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange, class Integer,
+          class Value >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
+search_n(const ForwardRange& rng, Integer count, const Value& value)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRange>));
+    return range_return<const ForwardRange,re>::
+        pack(range_detail::search_n_impl(pdalboost::begin(rng), pdalboost::end(rng),
+                           count, value),
+             rng);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange, class Integer,
+          class Value, class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
+search_n(ForwardRange& rng, Integer count, const Value& value,
+         BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<ForwardRange>));
+    BOOST_RANGE_CONCEPT_ASSERT((BinaryPredicateConcept<BinaryPredicate,
+        BOOST_DEDUCED_TYPENAME range_value<ForwardRange>::type,
+        const Value&>));
+    return range_return<ForwardRange,re>::
+        pack(range_detail::search_n_pred_impl(pdalboost::begin(rng),
+                                              pdalboost::end(rng),
+                           count, value, pred),
+             rng);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange, class Integer,
+          class Value, class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
+search_n(const ForwardRange& rng, Integer count, const Value& value,
+         BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT((ForwardRangeConcept<const ForwardRange>));
+    BOOST_RANGE_CONCEPT_ASSERT((BinaryPredicateConcept<BinaryPredicate,
+        BOOST_DEDUCED_TYPENAME range_value<const ForwardRange>::type,
+        const Value&>));
+    return range_return<const ForwardRange,re>::
+        pack(range_detail::search_n_pred_impl(pdalboost::begin(rng),
+                                              pdalboost::end(rng),
+                           count, value, pred),
+             rng);
+}
+
+    } // namespace range
+    using range::search_n;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/set_algorithm.hpp b/vendor/pdalboost/boost/range/algorithm/set_algorithm.hpp
new file mode 100644
index 0000000..c801ede
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/set_algorithm.hpp
@@ -0,0 +1,198 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_SET_ALGORITHM_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_SET_ALGORITHM_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function includes
+///
+/// range-based version of the includes std algorithm
+///
+/// \pre SinglePassRange1 is a model of the SinglePassRangeConcept
+/// \pre SinglePassRange2 is a model of the SinglePassRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template<class SinglePassRange1, class SinglePassRange2>
+inline bool includes(const SinglePassRange1& rng1,
+                     const SinglePassRange2& rng2)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+    return std::includes(pdalboost::begin(rng1),pdalboost::end(rng1),
+                         pdalboost::begin(rng2),pdalboost::end(rng2));
+}
+
+/// \overload
+template<class SinglePassRange1, class SinglePassRange2,
+         class BinaryPredicate>
+inline bool includes(const SinglePassRange1& rng1,
+                     const SinglePassRange2& rng2,
+                     BinaryPredicate         pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+    return std::includes(pdalboost::begin(rng1), pdalboost::end(rng1),
+                         pdalboost::begin(rng2), pdalboost::end(rng2), pred);
+}
+
+/// \brief template function set_union
+///
+/// range-based version of the set_union std algorithm
+///
+/// \pre SinglePassRange1 is a model of the SinglePassRangeConcept
+/// \pre SinglePassRange2 is a model of the SinglePassRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template<class SinglePassRange1, class SinglePassRange2,
+         class OutputIterator>
+inline OutputIterator set_union(const SinglePassRange1& rng1,
+                                const SinglePassRange2& rng2,
+                                OutputIterator          out)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+    return std::set_union(pdalboost::begin(rng1), pdalboost::end(rng1),
+                          pdalboost::begin(rng2), pdalboost::end(rng2), out);
+}
+
+/// \overload
+template<class SinglePassRange1, class SinglePassRange2,
+         class OutputIterator, class BinaryPredicate>
+inline OutputIterator set_union(const SinglePassRange1& rng1,
+                                const SinglePassRange2& rng2,
+                                OutputIterator          out,
+                                BinaryPredicate         pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+    return std::set_union(pdalboost::begin(rng1), pdalboost::end(rng1),
+                          pdalboost::begin(rng2), pdalboost::end(rng2), out, pred);
+}
+
+/// \brief template function set_intersection
+///
+/// range-based version of the set_intersection std algorithm
+///
+/// \pre SinglePassRange1 is a model of the SinglePassRangeConcept
+/// \pre SinglePassRange2 is a model of the SinglePassRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template<class SinglePassRange1, class SinglePassRange2,
+         class OutputIterator>
+inline OutputIterator set_intersection(const SinglePassRange1& rng1,
+                                       const SinglePassRange2& rng2,
+                                       OutputIterator          out)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+    return std::set_intersection(pdalboost::begin(rng1), pdalboost::end(rng1),
+                                 pdalboost::begin(rng2), pdalboost::end(rng2), out);
+}
+
+/// \overload
+template<class SinglePassRange1, class SinglePassRange2,
+         class OutputIterator, class BinaryPredicate>
+inline OutputIterator set_intersection(const SinglePassRange1& rng1,
+                                       const SinglePassRange2& rng2,
+                                       OutputIterator          out,
+                                       BinaryPredicate         pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+    return std::set_intersection(pdalboost::begin(rng1), pdalboost::end(rng1),
+                                 pdalboost::begin(rng2), pdalboost::end(rng2),
+                                 out, pred);
+}
+
+/// \brief template function set_difference
+///
+/// range-based version of the set_difference std algorithm
+///
+/// \pre SinglePassRange1 is a model of the SinglePassRangeConcept
+/// \pre SinglePassRange2 is a model of the SinglePassRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template<class SinglePassRange1, class SinglePassRange2,
+         class OutputIterator>
+inline OutputIterator set_difference(const SinglePassRange1& rng1,
+                                     const SinglePassRange2& rng2,
+                                     OutputIterator out)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+    return std::set_difference(pdalboost::begin(rng1), pdalboost::end(rng1),
+                               pdalboost::begin(rng2), pdalboost::end(rng2), out);
+}
+
+/// \overload
+template<class SinglePassRange1, class SinglePassRange2,
+         class OutputIterator, class BinaryPredicate>
+inline OutputIterator set_difference(const SinglePassRange1& rng1,
+                                     const SinglePassRange2& rng2,
+                                     OutputIterator          out,
+                                     BinaryPredicate         pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+    return std::set_difference(
+        pdalboost::begin(rng1), pdalboost::end(rng1),
+        pdalboost::begin(rng2), pdalboost::end(rng2), out, pred);
+}
+
+/// \brief template function set_symmetric_difference
+///
+/// range-based version of the set_symmetric_difference std algorithm
+///
+/// \pre SinglePassRange1 is a model of the SinglePassRangeConcept
+/// \pre SinglePassRange2 is a model of the SinglePassRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template<class SinglePassRange1, class SinglePassRange2,
+         class OutputIterator>
+inline OutputIterator
+set_symmetric_difference(const SinglePassRange1& rng1,
+                         const SinglePassRange2& rng2,
+                         OutputIterator          out)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+    return std::set_symmetric_difference(pdalboost::begin(rng1), pdalboost::end(rng1),
+                                         pdalboost::begin(rng2), pdalboost::end(rng2), out);
+}
+
+/// \overload
+template<class SinglePassRange1, class SinglePassRange2,
+         class OutputIterator, class BinaryPredicate>
+inline OutputIterator
+set_symmetric_difference(const SinglePassRange1& rng1,
+                         const SinglePassRange2& rng2,
+                         OutputIterator          out,
+                         BinaryPredicate         pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+    return std::set_symmetric_difference(
+        pdalboost::begin(rng1), pdalboost::end(rng1),
+        pdalboost::begin(rng2), pdalboost::end(rng2), out, pred);
+}
+
+    } // namespace range
+    using range::includes;
+    using range::set_union;
+    using range::set_intersection;
+    using range::set_difference;
+    using range::set_symmetric_difference;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/sort.hpp b/vendor/pdalboost/boost/range/algorithm/sort.hpp
new file mode 100644
index 0000000..08f45ac
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/sort.hpp
@@ -0,0 +1,68 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_SORT_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_SORT_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function sort
+///
+/// range-based version of the sort std algorithm
+///
+/// \pre RandomAccessRange is a model of the RandomAccessRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template<class RandomAccessRange>
+inline RandomAccessRange& sort(RandomAccessRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::sort(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange>
+inline const RandomAccessRange& sort(const RandomAccessRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::sort(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class BinaryPredicate>
+inline RandomAccessRange& sort(RandomAccessRange& rng, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::sort(pdalboost::begin(rng), pdalboost::end(rng), pred);
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class BinaryPredicate>
+inline const RandomAccessRange& sort(const RandomAccessRange& rng, BinaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::sort(pdalboost::begin(rng), pdalboost::end(rng), pred);
+    return rng;
+}
+
+    } // namespace range
+    using range::sort;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/stable_partition.hpp b/vendor/pdalboost/boost/range/algorithm/stable_partition.hpp
new file mode 100644
index 0000000..86b306b
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/stable_partition.hpp
@@ -0,0 +1,73 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_STABLE_PARTITION_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_STABLE_PARTITION_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function stable_partition
+///
+/// range-based version of the stable_partition std algorithm
+///
+/// \pre BidirectionalRange is a model of the BidirectionalRangeConcept
+/// \pre UnaryPredicate is a model of the UnaryPredicateConcept
+template<class BidirectionalRange, class UnaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_iterator<BidirectionalRange>::type
+stable_partition(BidirectionalRange& rng, UnaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));
+    return std::stable_partition(pdalboost::begin(rng), pdalboost::end(rng), pred);
+}
+
+/// \overload
+template<class BidirectionalRange, class UnaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_iterator<const BidirectionalRange>::type
+stable_partition(const BidirectionalRange& rng, UnaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));
+    return std::stable_partition(pdalboost::begin(rng),pdalboost::end(rng),pred);
+}
+
+// range_return overloads
+template<range_return_value re, class BidirectionalRange, class UnaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_return<BidirectionalRange,re>::type
+stable_partition(BidirectionalRange& rng, UnaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<BidirectionalRange> ));
+    return range_return<BidirectionalRange,re>::pack(
+        std::stable_partition(pdalboost::begin(rng), pdalboost::end(rng), pred),
+        rng);
+}
+
+/// \overload
+template<range_return_value re, class BidirectionalRange, class UnaryPredicate>
+inline BOOST_DEDUCED_TYPENAME range_return<const BidirectionalRange,re>::type
+stable_partition(const BidirectionalRange& rng, UnaryPredicate pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( BidirectionalRangeConcept<const BidirectionalRange> ));
+    return range_return<const BidirectionalRange,re>::pack(
+        std::stable_partition(pdalboost::begin(rng),pdalboost::end(rng),pred),
+        rng);
+}
+
+    } // namespace range
+    using range::stable_partition;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/stable_sort.hpp b/vendor/pdalboost/boost/range/algorithm/stable_sort.hpp
new file mode 100644
index 0000000..7141ac9
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/stable_sort.hpp
@@ -0,0 +1,68 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_STABLE_SORT_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_STABLE_SORT_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function stable_sort
+///
+/// range-based version of the stable_sort std algorithm
+///
+/// \pre RandomAccessRange is a model of the RandomAccessRangeConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template<class RandomAccessRange>
+inline RandomAccessRange& stable_sort(RandomAccessRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::stable_sort(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange>
+inline const RandomAccessRange& stable_sort(const RandomAccessRange& rng)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::stable_sort(pdalboost::begin(rng), pdalboost::end(rng));
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class BinaryPredicate>
+inline RandomAccessRange& stable_sort(RandomAccessRange& rng, BinaryPredicate sort_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
+    std::stable_sort(pdalboost::begin(rng), pdalboost::end(rng), sort_pred);
+    return rng;
+}
+
+/// \overload
+template<class RandomAccessRange, class BinaryPredicate>
+inline const RandomAccessRange& stable_sort(const RandomAccessRange& rng, BinaryPredicate sort_pred)
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
+    std::stable_sort(pdalboost::begin(rng), pdalboost::end(rng), sort_pred);
+    return rng;
+}
+
+    } // namespace range
+    using range::stable_sort;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/transform.hpp b/vendor/pdalboost/boost/range/algorithm/transform.hpp
new file mode 100644
index 0000000..d5ba95c
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/transform.hpp
@@ -0,0 +1,96 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_TRANSFORM_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_TRANSFORM_HPP_INCLUDED
+
+#include <boost/assert.hpp>
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+        /// \brief template function transform
+        ///
+        /// range-based version of the transform std algorithm
+        ///
+        /// \pre SinglePassRange1 is a model of the SinglePassRangeConcept
+        /// \pre SinglePassRange2 is a model of the SinglePassRangeConcept
+        /// \pre OutputIterator is a model of the OutputIteratorConcept
+        /// \pre UnaryOperation is a model of the UnaryFunctionConcept
+        /// \pre BinaryOperation is a model of the BinaryFunctionConcept
+        template< class SinglePassRange1,
+                  class OutputIterator,
+                  class UnaryOperation >
+        inline OutputIterator
+        transform(const SinglePassRange1& rng,
+                  OutputIterator          out,
+                  UnaryOperation          fun)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+            return std::transform(pdalboost::begin(rng),pdalboost::end(rng),out,fun);
+        }
+
+    } // namespace range
+
+    namespace range_detail
+    {
+        template< class SinglePassTraversalReadableIterator1,
+                  class SinglePassTraversalReadableIterator2,
+                  class OutputIterator,
+                  class BinaryFunction >
+        inline OutputIterator
+        transform_impl(SinglePassTraversalReadableIterator1 first1,
+                       SinglePassTraversalReadableIterator1 last1,
+                       SinglePassTraversalReadableIterator2 first2,
+                       SinglePassTraversalReadableIterator2 last2,
+                       OutputIterator                       out,
+                       BinaryFunction                       fn)
+        {
+            for (; first1 != last1 && first2 != last2; ++first1, ++first2)
+            {
+                *out = fn(*first1, *first2);
+                ++out;
+            }
+            return out;
+        }
+    }
+
+    namespace range
+    {
+
+        /// \overload
+        template< class SinglePassRange1,
+                  class SinglePassRange2,
+                  class OutputIterator,
+                  class BinaryOperation >
+        inline OutputIterator
+        transform(const SinglePassRange1& rng1,
+                  const SinglePassRange2& rng2,
+                  OutputIterator          out,
+                  BinaryOperation         fun)
+        {
+            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
+            BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
+            return pdalboost::range_detail::transform_impl(
+                        pdalboost::begin(rng1), pdalboost::end(rng1),
+                        pdalboost::begin(rng2), pdalboost::end(rng2),
+                        out, fun);
+        }
+
+    } // namespace range
+    using range::transform;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/unique.hpp b/vendor/pdalboost/boost/range/algorithm/unique.hpp
new file mode 100644
index 0000000..5c3d1cb
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/unique.hpp
@@ -0,0 +1,107 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_UNIQUE_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_UNIQUE_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function unique
+///
+/// range-based version of the unique std algorithm
+///
+/// \pre Rng meets the requirements for a Forward range
+template< range_return_value re, class ForwardRange >
+inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
+unique( ForwardRange& rng )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return range_return<ForwardRange,re>::
+        pack( std::unique( pdalboost::begin(rng),
+                           pdalboost::end(rng)), rng );
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
+unique( const ForwardRange& rng )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return range_return<const ForwardRange,re>::
+        pack( std::unique( pdalboost::begin(rng),
+                           pdalboost::end(rng)), rng );
+}
+/// \overload
+template< range_return_value re, class ForwardRange, class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
+unique( ForwardRange& rng, BinaryPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return range_return<ForwardRange,re>::
+        pack(std::unique(pdalboost::begin(rng), pdalboost::end(rng), pred),
+             rng);
+}
+/// \overload
+template< range_return_value re, class ForwardRange, class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
+unique( const ForwardRange& rng, BinaryPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return range_return<const ForwardRange,re>::
+        pack(std::unique(pdalboost::begin(rng), pdalboost::end(rng), pred),
+             rng);
+}
+
+/// \overload
+template< class ForwardRange >
+inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange, return_begin_found>::type
+unique( ForwardRange& rng )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return ::pdalboost::range::unique<return_begin_found>(rng);
+}
+/// \overload
+template< class ForwardRange >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange, return_begin_found>::type
+unique( const ForwardRange& rng )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return ::pdalboost::range::unique<return_begin_found>(rng);
+}
+/// \overload
+template< class ForwardRange, class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange, return_begin_found>::type
+unique( ForwardRange& rng, BinaryPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return ::pdalboost::range::unique<return_begin_found>(rng, pred);
+}
+/// \overload
+template< class ForwardRange, class BinaryPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange, return_begin_found>::type
+unique( const ForwardRange& rng, BinaryPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return ::pdalboost::range::unique<return_begin_found>(rng, pred);
+}
+
+    } // namespace range
+    using range::unique;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/unique_copy.hpp b/vendor/pdalboost/boost/range/algorithm/unique_copy.hpp
new file mode 100644
index 0000000..a6694c6
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/unique_copy.hpp
@@ -0,0 +1,51 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_UNIQUE_COPY_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_UNIQUE_COPY_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function unique_copy
+///
+/// range-based version of the unique_copy std algorithm
+///
+/// \pre SinglePassRange is a model of the SinglePassRangeConcept
+/// \pre OutputIterator is a model of the OutputIteratorConcept
+/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
+template< class SinglePassRange, class OutputIterator >
+inline OutputIterator
+unique_copy( const SinglePassRange& rng, OutputIterator out_it )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
+    return std::unique_copy(pdalboost::begin(rng), pdalboost::end(rng), out_it);
+}
+/// \overload
+template< class SinglePassRange, class OutputIterator, class BinaryPredicate >
+inline OutputIterator
+unique_copy( const SinglePassRange& rng, OutputIterator out_it,
+             BinaryPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange> ));
+    return std::unique_copy(pdalboost::begin(rng), pdalboost::end(rng), out_it, pred);
+}
+
+    } // namespace range
+    using range::unique_copy;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/algorithm/upper_bound.hpp b/vendor/pdalboost/boost/range/algorithm/upper_bound.hpp
new file mode 100644
index 0000000..446b24f
--- /dev/null
+++ b/vendor/pdalboost/boost/range/algorithm/upper_bound.hpp
@@ -0,0 +1,127 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ALGORITHM_UPPER_BOUND_HPP_INCLUDED
+#define BOOST_RANGE_ALGORITHM_UPPER_BOUND_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/detail/range_return.hpp>
+#include <algorithm>
+
+namespace pdalboost
+{
+    namespace range
+    {
+
+/// \brief template function upper_bound
+///
+/// range-based version of the upper_bound std algorithm
+///
+/// \pre ForwardRange is a model of the ForwardRangeConcept
+template< class ForwardRange, class Value >
+inline
+BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<ForwardRange>,
+    BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+>::type
+upper_bound( ForwardRange& rng, Value val )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return std::upper_bound(pdalboost::begin(rng), pdalboost::end(rng), val);
+}
+
+/// \overload
+template< class ForwardRange, class Value >
+BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
+upper_bound( const ForwardRange& rng, Value val )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::upper_bound(pdalboost::begin(rng), pdalboost::end(rng), val);
+}
+
+/// \overload
+template< class ForwardRange, class Value, class SortPredicate >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<ForwardRange>,
+    BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+>::type
+upper_bound( ForwardRange& rng, Value val, SortPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return std::upper_bound(pdalboost::begin(rng), pdalboost::end(rng), val, pred);
+}
+
+/// \overload
+template< class ForwardRange, class Value, class SortPredicate >
+inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
+upper_bound( const ForwardRange& rng, Value val, SortPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return std::upper_bound(pdalboost::begin(rng), pdalboost::end(rng), val, pred);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange, class Value >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<ForwardRange>,
+    BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
+>::type
+upper_bound( ForwardRange& rng, Value val )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return range_return<ForwardRange,re>::
+        pack(std::upper_bound(pdalboost::begin(rng), pdalboost::end(rng), val),
+             rng);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange, class Value >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
+upper_bound( const ForwardRange& rng, Value val )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return range_return<const ForwardRange,re>::
+        pack(std::upper_bound(pdalboost::begin(rng), pdalboost::end(rng), val),
+             rng);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange, class Value,
+          class SortPredicate >
+inline BOOST_DEDUCED_TYPENAME disable_if<
+    is_const<ForwardRange>,
+    BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
+>::type
+upper_bound( ForwardRange& rng, Value val, SortPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
+    return range_return<ForwardRange,re>::
+        pack(std::upper_bound(pdalboost::begin(rng), pdalboost::end(rng), val, pred),
+             rng);
+}
+
+/// \overload
+template< range_return_value re, class ForwardRange, class Value,
+          class SortPredicate >
+inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
+upper_bound( const ForwardRange& rng, Value val, SortPredicate pred )
+{
+    BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
+    return range_return<const ForwardRange,re>::
+        pack(std::upper_bound(pdalboost::begin(rng), pdalboost::end(rng), val, pred),
+             rng);
+}
+
+    } // namespace range
+    using range::upper_bound;
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/as_literal.hpp b/vendor/pdalboost/boost/range/as_literal.hpp
new file mode 100644
index 0000000..a5f7743
--- /dev/null
+++ b/vendor/pdalboost/boost/range/as_literal.hpp
@@ -0,0 +1,127 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2006. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_AS_LITERAL_HPP
+#define BOOST_RANGE_AS_LITERAL_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+#include <boost/range/detail/as_literal.hpp>
+#else
+
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/detail/str_types.hpp>
+
+#include <boost/detail/workaround.hpp>
+
+#include <cstring>
+#ifndef BOOST_NO_CWCHAR
+#include <cwchar>
+#endif
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        inline std::size_t length( const char* s )
+        {
+            return strlen( s );
+        }
+
+#ifndef BOOST_NO_CWCHAR
+        inline std::size_t length( const wchar_t* s )
+        {
+            return wcslen( s );
+        }
+#endif
+
+        //
+        // Remark: the compiler cannot choose between T* and T[sz]
+        // overloads, so we must put the T* internal to the
+        // unconstrained version.
+        //
+
+        inline bool is_char_ptr( char* )
+        {
+            return true;
+        }
+
+        inline bool is_char_ptr( const char* )
+        {
+            return true;
+        }
+
+#ifndef BOOST_NO_CWCHAR
+        inline bool is_char_ptr( wchar_t* )
+        {
+            return true;
+        }
+
+        inline bool is_char_ptr( const wchar_t* )
+        {
+            return true;
+        }
+#endif
+
+        template< class T >
+        inline long is_char_ptr( const T& /* r */ )
+        {
+            return 0L;
+        }
+
+        template< class T >
+        inline iterator_range<T*>
+        make_range( T* const r, bool )
+        {
+            return iterator_range<T*>( r, r + length(r) );
+        }
+
+        template< class T >
+        inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<T>::type>
+        make_range( T& r, long )
+        {
+            return pdalboost::make_iterator_range( r );
+        }
+
+    }
+
+    template< class Range >
+    inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<Range>::type>
+    as_literal( Range& r )
+    {
+        return range_detail::make_range( r, range_detail::is_char_ptr(r) );
+    }
+
+    template< class Range >
+    inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<const Range>::type>
+    as_literal( const Range& r )
+    {
+        return range_detail::make_range( r, range_detail::is_char_ptr(r) );
+    }
+
+    template< class Char, std::size_t sz >
+    inline iterator_range<Char*> as_literal( Char (&arr)[sz] )
+    {
+        return range_detail::make_range( arr, range_detail::is_char_ptr(arr) );
+    }
+
+    template< class Char, std::size_t sz >
+    inline iterator_range<const Char*> as_literal( const Char (&arr)[sz] )
+    {
+        return range_detail::make_range( arr, range_detail::is_char_ptr(arr) );
+    }
+}
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+#endif
diff --git a/vendor/pdalboost/boost/range/begin.hpp b/vendor/pdalboost/boost/range/begin.hpp
new file mode 100644
index 0000000..90b8df0
--- /dev/null
+++ b/vendor/pdalboost/boost/range/begin.hpp
@@ -0,0 +1,135 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_BEGIN_HPP
+#define BOOST_RANGE_BEGIN_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+#include <boost/range/detail/begin.hpp>
+#else
+
+#include <boost/range/iterator.hpp>
+
+namespace pdalboost
+{
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+namespace range_detail
+{
+#endif
+
+    //////////////////////////////////////////////////////////////////////
+    // primary template
+    //////////////////////////////////////////////////////////////////////
+
+    template< typename C >
+    inline BOOST_DEDUCED_TYPENAME range_iterator<C>::type
+    range_begin( C& c )
+    {
+        //
+        // If you get a compile-error here, it is most likely because
+        // you have not implemented range_begin() properly in
+        // the namespace of C
+        //
+        return c.begin();
+    }
+
+    //////////////////////////////////////////////////////////////////////
+    // pair
+    //////////////////////////////////////////////////////////////////////
+
+    template< typename Iterator >
+    inline Iterator range_begin( const std::pair<Iterator,Iterator>& p )
+    {
+        return p.first;
+    }
+
+    template< typename Iterator >
+    inline Iterator range_begin( std::pair<Iterator,Iterator>& p )
+    {
+        return p.first;
+    }
+
+    //////////////////////////////////////////////////////////////////////
+    // array
+    //////////////////////////////////////////////////////////////////////
+
+    //
+    // May this be discarded? Or is it needed for bad compilers?
+    //
+    template< typename T, std::size_t sz >
+    inline const T* range_begin( const T (&a)[sz] )
+    {
+        return a;
+    }
+
+    template< typename T, std::size_t sz >
+    inline T* range_begin( T (&a)[sz] )
+    {
+        return a;
+    }
+
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+} // namespace 'range_detail'
+#endif
+
+// Use a ADL namespace barrier to avoid ambiguity with other unqualified
+// calls. This is particularly important with C++0x encouraging
+// unqualified calls to begin/end.
+namespace range_adl_barrier
+{
+
+template< class T >
+inline BOOST_DEDUCED_TYPENAME range_iterator<T>::type begin( T& r )
+{
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+    using namespace range_detail;
+#endif
+    return range_begin( r );
+}
+
+template< class T >
+inline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type begin( const T& r )
+{
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+    using namespace range_detail;
+#endif
+    return range_begin( r );
+}
+
+    } // namespace range_adl_barrier
+} // namespace pdalboost
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+namespace pdalboost
+{
+    namespace range_adl_barrier
+    {
+        template< class T >
+        inline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type
+        const_begin( const T& r )
+        {
+            return pdalboost::range_adl_barrier::begin( r );
+        }
+    } // namespace range_adl_barrier
+
+    using namespace range_adl_barrier;
+} // namespace pdalboost
+
+#endif
+
diff --git a/vendor/pdalboost/boost/range/category.hpp b/vendor/pdalboost/boost/range/category.hpp
new file mode 100644
index 0000000..e6cc897
--- /dev/null
+++ b/vendor/pdalboost/boost/range/category.hpp
@@ -0,0 +1,29 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2006. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_CATEGORY_HPP
+#define BOOST_RANGE_CATEGORY_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace pdalboost
+{
+    template< class T >
+    struct range_category : iterator_category< typename range_iterator<T>::type >
+    { };
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/range/concepts.hpp b/vendor/pdalboost/boost/range/concepts.hpp
new file mode 100644
index 0000000..972e92b
--- /dev/null
+++ b/vendor/pdalboost/boost/range/concepts.hpp
@@ -0,0 +1,386 @@
+// Boost.Range library concept checks
+//
+//  Copyright Neil Groves 2009. Use, modification and distribution
+//  are subject to the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  Copyright Daniel Walker 2006. Use, modification and distribution
+//  are subject to the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_CONCEPTS_HPP
+#define BOOST_RANGE_CONCEPTS_HPP
+
+#include <boost/concept_check.hpp>
+#include <boost/iterator/iterator_concepts.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/value_type.hpp>
+#include <boost/range/detail/misc_concept.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+/*!
+ * \file
+ * \brief Concept checks for the Boost Range library.
+ *
+ * The structures in this file may be used in conjunction with the
+ * Boost Concept Check library to insure that the type of a function
+ * parameter is compatible with a range concept. If not, a meaningful
+ * compile time error is generated. Checks are provided for the range
+ * concepts related to iterator traversal categories. For example, the
+ * following line checks that the type T models the ForwardRange
+ * concept.
+ *
+ * \code
+ * BOOST_CONCEPT_ASSERT((ForwardRangeConcept<T>));
+ * \endcode
+ *
+ * A different concept check is required to ensure writeable value
+ * access. For example to check for a ForwardRange that can be written
+ * to, the following code is required.
+ *
+ * \code
+ * BOOST_CONCEPT_ASSERT((WriteableForwardRangeConcept<T>));
+ * \endcode
+ *
+ * \see http://www.boost.org/libs/range/doc/range.html for details
+ * about range concepts.
+ * \see http://www.boost.org/libs/iterator/doc/iterator_concepts.html
+ * for details about iterator concepts.
+ * \see http://www.boost.org/libs/concept_check/concept_check.htm for
+ * details about concept checks.
+ */
+
+namespace pdalboost {
+
+    namespace range_detail {
+
+#ifndef BOOST_RANGE_ENABLE_CONCEPT_ASSERT
+
+// List broken compiler versions here:
+#ifndef __clang__
+    #ifdef __GNUC__
+        // GNUC 4.2 has strange issues correctly detecting compliance with the Concepts
+        // hence the least disruptive approach is to turn-off the concept checking for
+        // this version of the compiler.
+        #if __GNUC__ == 4 && __GNUC_MINOR__ == 2
+            #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0
+        #endif
+    #endif
+
+    #ifdef __GCCXML__
+        // GCC XML, unsurprisingly, has the same issues
+        #if __GCCXML_GNUC__ == 4 && __GCCXML_GNUC_MINOR__ == 2
+            #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0
+        #endif
+    #endif
+#endif
+
+    #ifdef __BORLANDC__
+        #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0
+    #endif
+
+    #ifdef __PATHCC__
+        #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0
+    #endif
+
+// Default to using the concept asserts unless we have defined it off
+// during the search for black listed compilers.
+    #ifndef BOOST_RANGE_ENABLE_CONCEPT_ASSERT
+        #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 1
+    #endif
+
+#endif
+
+#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
+    #define BOOST_RANGE_CONCEPT_ASSERT( x ) BOOST_CONCEPT_ASSERT( x )
+#else
+    #define BOOST_RANGE_CONCEPT_ASSERT( x )
+#endif
+
+        // Rationale for the inclusion of redefined iterator concept
+        // classes:
+        //
+        // The Range algorithms often do not require that the iterators are
+        // Assignable or default constructable, but the correct standard
+        // conformant iterators do require the iterators to be a model of the
+        // Assignable concept.
+        // Iterators that contains a functor that is not assignable therefore
+        // are not correct models of the standard iterator concepts,
+        // despite being adequate for most algorithms. An example of this
+        // use case is the combination of the pdalboost::adaptors::filtered
+        // class with a pdalboost::lambda::bind generated functor.
+        // Ultimately modeling the range concepts using composition
+        // with the Boost.Iterator concepts would render the library
+        // incompatible with many common Boost.Lambda expressions.
+        template<class Iterator>
+        struct IncrementableIteratorConcept : CopyConstructible<Iterator>
+        {
+#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
+            typedef BOOST_DEDUCED_TYPENAME iterator_traversal<Iterator>::type traversal_category;
+
+            BOOST_RANGE_CONCEPT_ASSERT((
+                Convertible<
+                    traversal_category,
+                    incrementable_traversal_tag
+                >));
+
+            BOOST_CONCEPT_USAGE(IncrementableIteratorConcept)
+            {
+                ++i;
+                (void)i++;
+            }
+        private:
+            Iterator i;
+#endif
+        };
+
+        template<class Iterator>
+        struct SinglePassIteratorConcept
+            : IncrementableIteratorConcept<Iterator>
+            , EqualityComparable<Iterator>
+        {
+#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
+            BOOST_RANGE_CONCEPT_ASSERT((
+                Convertible<
+                    BOOST_DEDUCED_TYPENAME SinglePassIteratorConcept::traversal_category,
+                    single_pass_traversal_tag
+                >));
+
+            BOOST_CONCEPT_USAGE(SinglePassIteratorConcept)
+            {
+                Iterator i2(++i);
+                pdalboost::ignore_unused_variable_warning(i2);
+
+                // deliberately we are loose with the postfix version for the single pass
+                // iterator due to the commonly poor adherence to the specification means that
+                // many algorithms would be unusable, whereas actually without the check they
+                // work
+                (void)(i++);
+
+                BOOST_DEDUCED_TYPENAME pdalboost::detail::iterator_traits<Iterator>::reference r1(*i);
+                pdalboost::ignore_unused_variable_warning(r1);
+
+                BOOST_DEDUCED_TYPENAME pdalboost::detail::iterator_traits<Iterator>::reference r2(*(++i));
+                pdalboost::ignore_unused_variable_warning(r2);
+            }
+        private:
+            Iterator i;
+#endif
+        };
+
+        template<class Iterator>
+        struct ForwardIteratorConcept
+            : SinglePassIteratorConcept<Iterator>
+            , DefaultConstructible<Iterator>
+        {
+#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
+            typedef BOOST_DEDUCED_TYPENAME pdalboost::detail::iterator_traits<Iterator>::difference_type difference_type;
+
+            BOOST_MPL_ASSERT((is_integral<difference_type>));
+            BOOST_MPL_ASSERT_RELATION(std::numeric_limits<difference_type>::is_signed, ==, true);
+
+            BOOST_RANGE_CONCEPT_ASSERT((
+                Convertible<
+                    BOOST_DEDUCED_TYPENAME ForwardIteratorConcept::traversal_category,
+                    forward_traversal_tag
+                >));
+
+            BOOST_CONCEPT_USAGE(ForwardIteratorConcept)
+            {
+                // See the above note in the SinglePassIteratorConcept about the handling of the
+                // postfix increment. Since with forward and better iterators there is no need
+                // for a proxy, we can sensibly require that the dereference result
+                // is convertible to reference.
+                Iterator i2(i++);
+                pdalboost::ignore_unused_variable_warning(i2);
+                BOOST_DEDUCED_TYPENAME pdalboost::detail::iterator_traits<Iterator>::reference r(*(i++));
+                pdalboost::ignore_unused_variable_warning(r);
+            }
+        private:
+            Iterator i;
+#endif
+         };
+
+         template<class Iterator>
+         struct BidirectionalIteratorConcept
+             : ForwardIteratorConcept<Iterator>
+         {
+ #if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
+             BOOST_RANGE_CONCEPT_ASSERT((
+                 Convertible<
+                     BOOST_DEDUCED_TYPENAME BidirectionalIteratorConcept::traversal_category,
+                     bidirectional_traversal_tag
+                 >));
+
+             BOOST_CONCEPT_USAGE(BidirectionalIteratorConcept)
+             {
+                 --i;
+                 (void)i--;
+             }
+         private:
+             Iterator i;
+ #endif
+         };
+
+         template<class Iterator>
+         struct RandomAccessIteratorConcept
+             : BidirectionalIteratorConcept<Iterator>
+         {
+ #if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
+             BOOST_RANGE_CONCEPT_ASSERT((
+                 Convertible<
+                     BOOST_DEDUCED_TYPENAME RandomAccessIteratorConcept::traversal_category,
+                     random_access_traversal_tag
+                 >));
+
+             BOOST_CONCEPT_USAGE(RandomAccessIteratorConcept)
+             {
+                 i += n;
+                 i = i + n;
+                 i = n + i;
+                 i -= n;
+                 i = i - n;
+                 n = i - j;
+             }
+         private:
+             BOOST_DEDUCED_TYPENAME RandomAccessIteratorConcept::difference_type n;
+             Iterator i;
+             Iterator j;
+ #endif
+         };
+
+    } // namespace range_detail
+
+    //! Check if a type T models the SinglePassRange range concept.
+    template<class T>
+    struct SinglePassRangeConcept
+    {
+#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
+        // A few compilers don't like the rvalue reference T types so just
+        // remove it.
+        typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type Rng;
+
+        typedef BOOST_DEDUCED_TYPENAME range_iterator<
+            Rng const
+        >::type const_iterator;
+
+        typedef BOOST_DEDUCED_TYPENAME range_iterator<Rng>::type iterator;
+
+        BOOST_RANGE_CONCEPT_ASSERT((
+                range_detail::SinglePassIteratorConcept<iterator>));
+
+        BOOST_RANGE_CONCEPT_ASSERT((
+                range_detail::SinglePassIteratorConcept<const_iterator>));
+
+        BOOST_CONCEPT_USAGE(SinglePassRangeConcept)
+        {
+            // This has been modified from assigning to this->i
+            // (where i was a member variable) to improve
+            // compatibility with Boost.Lambda
+            iterator i1 = pdalboost::begin(*m_range);
+            iterator i2 = pdalboost::end(*m_range);
+
+            pdalboost::ignore_unused_variable_warning(i1);
+            pdalboost::ignore_unused_variable_warning(i2);
+
+            const_constraints(*m_range);
+        }
+
+    private:
+        void const_constraints(const Rng& const_range)
+        {
+            const_iterator ci1 = pdalboost::begin(const_range);
+            const_iterator ci2 = pdalboost::end(const_range);
+
+            pdalboost::ignore_unused_variable_warning(ci1);
+            pdalboost::ignore_unused_variable_warning(ci2);
+        }
+
+       // Rationale:
+       // The type of m_range is T* rather than T because it allows
+       // T to be an abstract class. The other obvious alternative of
+       // T& produces a warning on some compilers.
+       Rng* m_range;
+#endif
+    };
+
+    //! Check if a type T models the ForwardRange range concept.
+    template<class T>
+    struct ForwardRangeConcept : SinglePassRangeConcept<T>
+    {
+#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
+        BOOST_RANGE_CONCEPT_ASSERT((range_detail::ForwardIteratorConcept<BOOST_DEDUCED_TYPENAME ForwardRangeConcept::iterator>));
+        BOOST_RANGE_CONCEPT_ASSERT((range_detail::ForwardIteratorConcept<BOOST_DEDUCED_TYPENAME ForwardRangeConcept::const_iterator>));
+#endif
+    };
+
+    template<class T>
+    struct WriteableRangeConcept
+    {
+#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
+        typedef BOOST_DEDUCED_TYPENAME range_iterator<T>::type iterator;
+
+        BOOST_CONCEPT_USAGE(WriteableRangeConcept)
+        {
+            *i = v;
+        }
+    private:
+        iterator i;
+        BOOST_DEDUCED_TYPENAME range_value<T>::type v;
+#endif
+    };
+
+    //! Check if a type T models the WriteableForwardRange range concept.
+    template<class T>
+    struct WriteableForwardRangeConcept
+        : ForwardRangeConcept<T>
+        , WriteableRangeConcept<T>
+    {
+    };
+
+    //! Check if a type T models the BidirectionalRange range concept.
+    template<class T>
+    struct BidirectionalRangeConcept : ForwardRangeConcept<T>
+    {
+#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
+        BOOST_RANGE_CONCEPT_ASSERT((range_detail::BidirectionalIteratorConcept<BOOST_DEDUCED_TYPENAME BidirectionalRangeConcept::iterator>));
+        BOOST_RANGE_CONCEPT_ASSERT((range_detail::BidirectionalIteratorConcept<BOOST_DEDUCED_TYPENAME BidirectionalRangeConcept::const_iterator>));
+#endif
+    };
+
+    //! Check if a type T models the WriteableBidirectionalRange range concept.
+    template<class T>
+    struct WriteableBidirectionalRangeConcept
+        : BidirectionalRangeConcept<T>
+        , WriteableRangeConcept<T>
+    {
+    };
+
+    //! Check if a type T models the RandomAccessRange range concept.
+    template<class T>
+    struct RandomAccessRangeConcept : BidirectionalRangeConcept<T>
+    {
+#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
+        BOOST_RANGE_CONCEPT_ASSERT((range_detail::RandomAccessIteratorConcept<BOOST_DEDUCED_TYPENAME RandomAccessRangeConcept::iterator>));
+        BOOST_RANGE_CONCEPT_ASSERT((range_detail::RandomAccessIteratorConcept<BOOST_DEDUCED_TYPENAME RandomAccessRangeConcept::const_iterator>));
+#endif
+    };
+
+    //! Check if a type T models the WriteableRandomAccessRange range concept.
+    template<class T>
+    struct WriteableRandomAccessRangeConcept
+        : RandomAccessRangeConcept<T>
+        , WriteableRangeConcept<T>
+    {
+    };
+
+} // namespace pdalboost
+
+#endif // BOOST_RANGE_CONCEPTS_HPP
diff --git a/vendor/pdalboost/boost/range/config.hpp b/vendor/pdalboost/boost/range/config.hpp
new file mode 100644
index 0000000..7600a5f
--- /dev/null
+++ b/vendor/pdalboost/boost/range/config.hpp
@@ -0,0 +1,56 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_CONFIG_HPP
+#define BOOST_RANGE_CONFIG_HPP
+
+#include <boost/detail/workaround.hpp>
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_RANGE_DEDUCED_TYPENAME
+#error "macro already defined!"
+#endif
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+# define BOOST_RANGE_DEDUCED_TYPENAME typename
+#else
+#define BOOST_RANGE_DEDUCED_TYPENAME BOOST_DEDUCED_TYPENAME
+#endif
+
+#ifdef BOOST_RANGE_NO_ARRAY_SUPPORT
+#error "macro already defined!"
+#endif
+
+#if BOOST_WORKAROUND( __MWERKS__, <= 0x3003 )
+#define BOOST_RANGE_NO_ARRAY_SUPPORT 1
+#endif
+
+#ifdef BOOST_RANGE_NO_ARRAY_SUPPORT
+#define BOOST_RANGE_ARRAY_REF() (boost_range_array)
+#define BOOST_RANGE_NO_STATIC_ASSERT
+#else
+#define BOOST_RANGE_ARRAY_REF() (&boost_range_array)
+#endif
+
+#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))
+#  define BOOST_RANGE_UNUSED __attribute__((unused))
+#else
+#  define BOOST_RANGE_UNUSED
+#endif
+
+
+
+#endif
+
diff --git a/vendor/pdalboost/boost/range/const_iterator.hpp b/vendor/pdalboost/boost/range/const_iterator.hpp
new file mode 100644
index 0000000..5b2f2ef
--- /dev/null
+++ b/vendor/pdalboost/boost/range/const_iterator.hpp
@@ -0,0 +1,76 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_CONST_ITERATOR_HPP
+#define BOOST_RANGE_CONST_ITERATOR_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+
+#include <boost/range/range_fwd.hpp>
+#include <boost/range/detail/extract_optional_type.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <cstddef>
+#include <utility>
+
+namespace pdalboost
+{
+    //////////////////////////////////////////////////////////////////////////
+    // default
+    //////////////////////////////////////////////////////////////////////////
+    
+    namespace range_detail
+    {
+
+BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( const_iterator )
+
+template< typename C >
+struct range_const_iterator
+        : extract_const_iterator<C>
+{};
+
+//////////////////////////////////////////////////////////////////////////
+// pair
+//////////////////////////////////////////////////////////////////////////
+
+template< typename Iterator >
+struct range_const_iterator<std::pair<Iterator,Iterator> >
+{
+    typedef Iterator type;
+};
+
+//////////////////////////////////////////////////////////////////////////
+// array
+//////////////////////////////////////////////////////////////////////////
+
+template< typename T, std::size_t sz >
+struct range_const_iterator< T[sz] >
+{
+    typedef const T* type;
+};
+
+    } // namespace range_detail
+
+template<typename C, typename Enabler=void>
+struct range_const_iterator
+        : range_detail::range_const_iterator<
+            BOOST_DEDUCED_TYPENAME remove_reference<C>::type
+        >
+{
+};
+
+} // namespace pdalboost
+
+
+#endif
diff --git a/vendor/pdalboost/boost/range/const_reverse_iterator.hpp b/vendor/pdalboost/boost/range/const_reverse_iterator.hpp
new file mode 100644
index 0000000..cd62ad7
--- /dev/null
+++ b/vendor/pdalboost/boost/range/const_reverse_iterator.hpp
@@ -0,0 +1,35 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_CONST_REVERSE_ITERATOR_HPP
+#define BOOST_RANGE_CONST_REVERSE_ITERATOR_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/reverse_iterator.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+namespace pdalboost
+{
+    //
+    // This interface is deprecated, use range_reverse_iterator<const T>
+    //
+    
+    template< typename C >
+    struct range_const_reverse_iterator
+            : range_reverse_iterator<
+                const BOOST_DEDUCED_TYPENAME remove_reference<C>::type>
+    { };
+    
+} // namespace pdalboost
+
+#endif
diff --git a/vendor/pdalboost/boost/range/detail/as_literal.hpp b/vendor/pdalboost/boost/range/detail/as_literal.hpp
new file mode 100644
index 0000000..240a23b
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/as_literal.hpp
@@ -0,0 +1,33 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2006. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_AS_LITERAL_HPP
+#define BOOST_RANGE_DETAIL_AS_LITERAL_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/detail/detail_str.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace pdalboost
+{
+    template< class Range >
+    inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<Range>::type> 
+    as_literal( Range& r )
+    {
+        return ::pdalboost::make_iterator_range( ::pdalboost::range_detail::str_begin(r),
+                                             ::pdalboost::range_detail::str_end(r) );
+    }
+
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/range/detail/begin.hpp b/vendor/pdalboost/boost/range/detail/begin.hpp
new file mode 100644
index 0000000..b72c39d
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/begin.hpp
@@ -0,0 +1,83 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_BEGIN_HPP
+#define BOOST_RANGE_DETAIL_BEGIN_HPP
+
+#include <boost/config.hpp> // BOOST_MSVC
+#include <boost/detail/workaround.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/detail/common.hpp>
+
+namespace pdalboost
+{
+
+    namespace range_detail
+    {
+        template< typename T >
+        struct range_begin;
+
+        //////////////////////////////////////////////////////////////////////
+        // default
+        //////////////////////////////////////////////////////////////////////
+
+        template<>
+        struct range_begin<std_container_>
+        {
+            template< typename C >
+            static BOOST_RANGE_DEDUCED_TYPENAME range_iterator<C>::type fun( C& c )
+            {
+                return c.begin();
+            };
+        };
+
+        //////////////////////////////////////////////////////////////////////
+        // pair
+        //////////////////////////////////////////////////////////////////////
+
+        template<>
+        struct range_begin<std_pair_>
+        {
+            template< typename P >
+            static BOOST_RANGE_DEDUCED_TYPENAME range_iterator<P>::type fun( const P& p )
+            {
+                return p.first;
+            }
+        };
+
+        //////////////////////////////////////////////////////////////////////
+        // array
+        //////////////////////////////////////////////////////////////////////
+
+        template<>
+        struct range_begin<array_>
+        {
+            template<typename T>
+            static BOOST_RANGE_DEDUCED_TYPENAME range_value<T>::type* fun(T& t)
+            {
+                return t;
+            }
+        };
+
+    } // namespace 'range_detail'
+
+    namespace range_adl_barrier
+    {
+        template< typename C >
+        inline BOOST_RANGE_DEDUCED_TYPENAME range_iterator<C>::type
+        begin( C& c )
+        {
+            return range_detail::range_begin< BOOST_RANGE_DEDUCED_TYPENAME range_detail::range<C>::type >::fun( c );
+        }
+    }
+} // namespace 'boost'
+
+
+#endif
diff --git a/vendor/pdalboost/boost/range/detail/common.hpp b/vendor/pdalboost/boost/range/detail/common.hpp
new file mode 100644
index 0000000..5d4e258
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/common.hpp
@@ -0,0 +1,118 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_COMMON_HPP
+#define BOOST_RANGE_DETAIL_COMMON_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/detail/sfinae.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/or.hpp>
+#include <cstddef>
+
+//////////////////////////////////////////////////////////////////////////////
+// missing partial specialization  workaround.
+//////////////////////////////////////////////////////////////////////////////
+
+namespace pdalboost 
+{
+    namespace range_detail 
+    {        
+        // 1 = std containers
+        // 2 = std::pair
+        // 3 = const std::pair
+        // 4 = array
+        // 5 = const array
+        // 6 = char array
+        // 7 = wchar_t array
+        // 8 = char*
+        // 9 = const char*
+        // 10 = whar_t*
+        // 11 = const wchar_t*
+        // 12 = string
+        
+        typedef mpl::int_<1>::type    std_container_;
+        typedef mpl::int_<2>::type    std_pair_;
+        typedef mpl::int_<3>::type    const_std_pair_;
+        typedef mpl::int_<4>::type    array_;
+        typedef mpl::int_<5>::type    const_array_;
+        typedef mpl::int_<6>::type    char_array_;
+        typedef mpl::int_<7>::type    wchar_t_array_;
+        typedef mpl::int_<8>::type    char_ptr_;
+        typedef mpl::int_<9>::type    const_char_ptr_;
+        typedef mpl::int_<10>::type   wchar_t_ptr_;
+        typedef mpl::int_<11>::type   const_wchar_t_ptr_;
+        typedef mpl::int_<12>::type   string_;
+        
+        template< typename C >
+        struct range_helper
+        {
+            static C* c;
+            static C  ptr;
+
+            BOOST_STATIC_CONSTANT( bool, is_pair_                = sizeof( pdalboost::range_detail::is_pair_impl( c ) ) == sizeof( yes_type ) );
+            BOOST_STATIC_CONSTANT( bool, is_char_ptr_            = sizeof( pdalboost::range_detail::is_char_ptr_impl( ptr ) ) == sizeof( yes_type ) );
+            BOOST_STATIC_CONSTANT( bool, is_const_char_ptr_      = sizeof( pdalboost::range_detail::is_const_char_ptr_impl( ptr ) ) == sizeof( yes_type ) );
+            BOOST_STATIC_CONSTANT( bool, is_wchar_t_ptr_         = sizeof( pdalboost::range_detail::is_wchar_t_ptr_impl( ptr ) ) == sizeof( yes_type ) );
+            BOOST_STATIC_CONSTANT( bool, is_const_wchar_t_ptr_   = sizeof( pdalboost::range_detail::is_const_wchar_t_ptr_impl( ptr ) ) == sizeof( yes_type ) );
+            BOOST_STATIC_CONSTANT( bool, is_char_array_          = sizeof( pdalboost::range_detail::is_char_array_impl( ptr ) ) == sizeof( yes_type ) );
+            BOOST_STATIC_CONSTANT( bool, is_wchar_t_array_       = sizeof( pdalboost::range_detail::is_wchar_t_array_impl( ptr ) ) == sizeof( yes_type ) );
+            BOOST_STATIC_CONSTANT( bool, is_string_              = (pdalboost::mpl::or_<pdalboost::mpl::bool_<is_const_char_ptr_>, pdalboost::mpl::bool_<is_const_wchar_t_ptr_> >::value ));
+            BOOST_STATIC_CONSTANT( bool, is_array_               = pdalboost::is_array<C>::value );
+            
+        };
+        
+        template< typename C >
+        class range
+        {
+            typedef BOOST_RANGE_DEDUCED_TYPENAME   pdalboost::mpl::if_c< ::pdalboost::range_detail::range_helper<C>::is_pair_,
+                                                                  pdalboost::range_detail::std_pair_,
+                                                                  void >::type pair_t;
+            typedef BOOST_RANGE_DEDUCED_TYPENAME   pdalboost::mpl::if_c< ::pdalboost::range_detail::range_helper<C>::is_array_,
+                                                                    pdalboost::range_detail::array_,
+                                                                    pair_t >::type array_t;
+            typedef BOOST_RANGE_DEDUCED_TYPENAME   pdalboost::mpl::if_c< ::pdalboost::range_detail::range_helper<C>::is_string_,
+                                                                    pdalboost::range_detail::string_,
+                                                                    array_t >::type string_t;
+            typedef BOOST_RANGE_DEDUCED_TYPENAME   pdalboost::mpl::if_c< ::pdalboost::range_detail::range_helper<C>::is_const_char_ptr_,
+                                                                    pdalboost::range_detail::const_char_ptr_,
+                                                                    string_t >::type const_char_ptr_t;
+            typedef BOOST_RANGE_DEDUCED_TYPENAME   pdalboost::mpl::if_c< ::pdalboost::range_detail::range_helper<C>::is_char_ptr_,
+                                                                    pdalboost::range_detail::char_ptr_,
+                                                                    const_char_ptr_t >::type char_ptr_t;
+            typedef BOOST_RANGE_DEDUCED_TYPENAME   pdalboost::mpl::if_c< ::pdalboost::range_detail::range_helper<C>::is_const_wchar_t_ptr_,
+                                                                    pdalboost::range_detail::const_wchar_t_ptr_,
+                                                                    char_ptr_t >::type const_wchar_ptr_t;
+            typedef BOOST_RANGE_DEDUCED_TYPENAME   pdalboost::mpl::if_c< ::pdalboost::range_detail::range_helper<C>::is_wchar_t_ptr_,
+                                                                    pdalboost::range_detail::wchar_t_ptr_,
+                                                                    const_wchar_ptr_t >::type wchar_ptr_t;
+            typedef BOOST_RANGE_DEDUCED_TYPENAME   pdalboost::mpl::if_c< ::pdalboost::range_detail::range_helper<C>::is_wchar_t_array_,
+                                                                    pdalboost::range_detail::wchar_t_array_,
+                                                                    wchar_ptr_t >::type wchar_array_t;
+            typedef BOOST_RANGE_DEDUCED_TYPENAME   pdalboost::mpl::if_c< ::pdalboost::range_detail::range_helper<C>::is_char_array_,
+                                                                    pdalboost::range_detail::char_array_,
+                                                                    wchar_array_t >::type char_array_t;
+        public:
+            typedef BOOST_RANGE_DEDUCED_TYPENAME   pdalboost::mpl::if_c< ::pdalboost::is_void<char_array_t>::value,
+                                                                    pdalboost::range_detail::std_container_,
+                                                                    char_array_t >::type type;  
+        }; // class 'range' 
+    }
+}
+        
+#endif
+
diff --git a/vendor/pdalboost/boost/range/detail/default_constructible_unary_fn.hpp b/vendor/pdalboost/boost/range/detail/default_constructible_unary_fn.hpp
new file mode 100644
index 0000000..d36a518
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/default_constructible_unary_fn.hpp
@@ -0,0 +1,64 @@
+// Boost.Range library
+//
+//  Copyright Neil Groves 2014. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_DETAIL_DEFAULT_CONSTRUCTIBLE_UNARY_FN_HPP_INCLUDED
+#define BOOST_RANGE_DETAIL_DEFAULT_CONSTRUCTIBLE_UNARY_FN_HPP_INCLUDED
+
+#include <boost/optional/optional.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/has_trivial_constructor.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+
+template<typename F, typename R>
+class default_constructible_unary_fn_wrapper
+{
+public:
+    typedef R result_type;
+
+    default_constructible_unary_fn_wrapper()
+    {
+    }
+    default_constructible_unary_fn_wrapper(const F& source)
+        : m_impl(source)
+    {
+    }
+    template<typename Arg>
+    R operator()(const Arg& arg) const
+    {
+        BOOST_ASSERT(m_impl);
+        return (*m_impl)(arg);
+    }
+    template<typename Arg>
+    R operator()(Arg& arg) const
+    {
+        BOOST_ASSERT(m_impl);
+        return (*m_impl)(arg);
+    }
+private:
+    pdalboost::optional<F> m_impl;
+};
+
+template<typename F, typename R>
+struct default_constructible_unary_fn_gen
+{
+    typedef typename pdalboost::mpl::if_<
+        pdalboost::has_trivial_default_constructor<F>,
+        F,
+        default_constructible_unary_fn_wrapper<F,R>
+    >::type type;
+};
+
+    } // namespace range_detail
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/detail/detail_str.hpp b/vendor/pdalboost/boost/range/detail/detail_str.hpp
new file mode 100644
index 0000000..2793667
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/detail_str.hpp
@@ -0,0 +1,376 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_DETAIL_STR_HPP
+#define BOOST_RANGE_DETAIL_DETAIL_STR_HPP
+
+#include <boost/config.hpp> // BOOST_MSVC
+#include <boost/range/iterator.hpp>
+
+namespace pdalboost 
+{
+    
+    namespace range_detail
+    {
+        //
+        // iterator
+        //
+        
+        template<>
+        struct range_iterator_<char_array_>
+        { 
+            template< typename T >
+            struct pts
+            {
+                 typedef BOOST_RANGE_DEDUCED_TYPENAME 
+                    remove_extent<T>::type* type;
+            };
+        };
+
+        template<>
+        struct range_iterator_<char_ptr_>
+        {
+            template< typename S >
+            struct pts
+            {
+                typedef char* type; 
+            };         
+        };
+
+        template<>
+        struct range_iterator_<const_char_ptr_>
+        {
+            template< typename S >
+            struct pts
+            {
+                typedef const char* type;
+            };         
+        };
+
+        template<>
+        struct range_iterator_<wchar_t_ptr_>
+        {
+            template< typename S >
+            struct pts
+            {
+                typedef wchar_t* type; 
+            };         
+        };
+
+        template<>
+        struct range_iterator_<const_wchar_t_ptr_>
+        {
+             template< typename S >
+             struct pts
+             {
+                 typedef const wchar_t* type; 
+             };         
+        };
+
+
+        //
+        // const iterator
+        //
+
+        template<>
+        struct range_const_iterator_<char_array_>
+        { 
+            template< typename T >
+            struct pts
+            {
+                typedef const BOOST_RANGE_DEDUCED_TYPENAME 
+                    remove_extent<T>::type* type;
+            };
+        };
+
+        template<>
+        struct range_const_iterator_<char_ptr_>
+        {
+            template< typename S >
+            struct pts
+            {
+                typedef const char* type; 
+            };         
+        };
+
+        template<>
+        struct range_const_iterator_<const_char_ptr_>
+        {
+            template< typename S >
+            struct pts
+            {
+                typedef const char* type; 
+            };         
+        };
+
+        template<>
+        struct range_const_iterator_<wchar_t_ptr_>
+        {
+            template< typename S >
+            struct pts
+            {
+                typedef const wchar_t* type; 
+            };         
+        };
+
+        template<>
+        struct range_const_iterator_<const_wchar_t_ptr_>
+        {
+             template< typename S >
+             struct pts
+             {
+                 typedef const wchar_t* type; 
+             };         
+        };
+    }
+}
+
+#include <boost/range/detail/begin.hpp>
+#include <boost/range/detail/end.hpp>
+#include <boost/range/detail/size_type.hpp>
+#include <boost/range/detail/value_type.hpp>
+#include <boost/range/detail/common.hpp>
+
+namespace pdalboost 
+{
+    
+    namespace range_detail
+    {
+        //
+        // str_begin()
+        //
+        template<>
+        struct range_begin<char_ptr_>
+        {
+            static char* fun( char* s )
+            {
+                return s;
+            }
+        };
+
+        template<>
+        struct range_begin<const_char_ptr_>
+        {
+            static const char* fun( const char* s )
+            {
+                return s;
+            }
+        };
+        
+        template<>
+        struct range_begin<wchar_t_ptr_>
+        {
+            
+            static wchar_t* fun( wchar_t* s )
+            {
+                return s;
+            }
+        };
+
+        template<>
+        struct range_begin<const_wchar_t_ptr_>
+        {
+            static const wchar_t* fun( const wchar_t* s )
+            {
+                return s;
+            }
+        };
+        
+        template< typename C >
+        inline BOOST_RANGE_DEDUCED_TYPENAME range_iterator<C>::type 
+        str_begin( C& c )
+        {
+            return range_detail::range_begin< BOOST_RANGE_DEDUCED_TYPENAME 
+                range_detail::range<C>::type >::fun( c );
+        }
+
+        //
+        // str_end()
+        //
+
+        template<>
+        struct range_end<char_array_>
+        {
+            template< typename T, std::size_t sz >
+            static T* fun( T BOOST_RANGE_ARRAY_REF()[sz] )
+            {
+                return pdalboost::range_detail::array_end( boost_range_array );
+            }
+        };
+        
+        template<>
+        struct range_end<wchar_t_array_>
+        {
+            template< typename T, std::size_t sz >
+            static T* fun( T BOOST_RANGE_ARRAY_REF()[sz] )
+            {
+                return pdalboost::range_detail::array_end( boost_range_array );
+            }
+        };
+        
+        template<>
+        struct range_end<char_ptr_>
+        {
+            static char* fun( char* s )
+            {
+                return pdalboost::range_detail::str_end( s );
+            }
+        };
+
+        template<>
+        struct range_end<const_char_ptr_>
+        {
+            static const char* fun( const char* s )
+            {
+                return pdalboost::range_detail::str_end( s );
+            }
+        };
+
+        template<>
+        struct range_end<wchar_t_ptr_>
+        {
+            static wchar_t* fun( wchar_t* s )
+            {
+                return pdalboost::range_detail::str_end( s );
+            }
+        };
+
+
+        template<>
+        struct range_end<const_wchar_t_ptr_>
+        {
+            static const wchar_t* fun( const wchar_t* s )
+            {
+                return pdalboost::range_detail::str_end( s );
+            }
+        };
+
+        template< typename C >
+        inline BOOST_RANGE_DEDUCED_TYPENAME range_iterator<C>::type 
+        str_end( C& c )
+        {
+            return range_detail::range_end< BOOST_RANGE_DEDUCED_TYPENAME 
+                range_detail::range<C>::type >::fun( c );
+        }
+
+        //
+        // size_type
+        //
+
+        template<>
+        struct range_size_type_<char_array_>
+        { 
+            template< typename A >
+            struct pts
+            {
+                typedef std::size_t type;
+            };
+        };
+
+        template<>
+        struct range_size_type_<char_ptr_>
+        {
+            template< typename S >
+            struct pts
+            {
+                typedef std::size_t type;
+            };         
+        };
+        
+        template<>
+        struct range_size_type_<const_char_ptr_>
+        {
+            template< typename S >
+            struct pts
+            {
+                typedef std::size_t type;
+            };         
+        };
+        
+        template<>
+        struct range_size_type_<wchar_t_ptr_>
+        {
+            template< typename S >
+            struct pts
+            {
+                typedef std::size_t type;
+            };         
+        };
+        
+        template<>
+        struct range_size_type_<const_wchar_t_ptr_>
+        {
+            template< typename S >
+            struct pts
+            {
+                typedef std::size_t type;
+            };         
+        };  
+
+        //
+        // value_type
+        //
+        
+        template<>
+        struct range_value_type_<char_array_>
+        { 
+            template< typename T >
+            struct pts
+            {
+                typedef char type;
+            };
+        };
+
+        template<>
+        struct range_value_type_<char_ptr_>
+        {
+             template< typename S >
+             struct pts
+             {
+                 typedef char type; 
+             };         
+        };
+        
+        template<>
+        struct range_value_type_<const_char_ptr_>
+        {
+             template< typename S >
+             struct pts
+             {
+                 typedef const char type;
+             };         
+        };
+        
+        template<>
+        struct range_value_type_<wchar_t_ptr_>
+        {
+             template< typename S >
+             struct pts
+             {
+                 typedef wchar_t type;
+             };         
+        };
+        
+        template<>
+        struct range_value_type_<const_wchar_t_ptr_>
+        {
+            template< typename S >
+            struct pts
+            {
+                typedef const wchar_t type;
+            };         
+        };
+
+    } // namespace 'range_detail'
+
+} // namespace 'boost'
+
+
+#endif
diff --git a/vendor/pdalboost/boost/range/detail/end.hpp b/vendor/pdalboost/boost/range/detail/end.hpp
new file mode 100644
index 0000000..25d7dce
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/end.hpp
@@ -0,0 +1,86 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_END_HPP
+#define BOOST_RANGE_DETAIL_END_HPP
+
+#include <boost/config.hpp> // BOOST_MSVC
+#include <boost/detail/workaround.hpp>
+
+#include <boost/range/detail/implementation_help.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/detail/common.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        template< typename T >
+        struct range_end;
+
+        //////////////////////////////////////////////////////////////////////
+        // default
+        //////////////////////////////////////////////////////////////////////
+
+        template<>
+        struct range_end<std_container_>
+        {
+            template< typename C >
+            static BOOST_RANGE_DEDUCED_TYPENAME range_iterator<C>::type
+            fun( C& c )
+            {
+                return c.end();
+            };
+        };
+
+        //////////////////////////////////////////////////////////////////////
+        // pair
+        //////////////////////////////////////////////////////////////////////
+
+        template<>
+        struct range_end<std_pair_>
+        {
+            template< typename P >
+            static BOOST_RANGE_DEDUCED_TYPENAME range_iterator<P>::type
+            fun( const P& p )
+            {
+                return p.second;
+            }
+        };
+
+        //////////////////////////////////////////////////////////////////////
+        // array
+        //////////////////////////////////////////////////////////////////////
+
+        template<>
+        struct range_end<array_>
+        {
+            template<typename T>
+            static BOOST_RANGE_DEDUCED_TYPENAME remove_extent<T>::type* fun(T& t)
+            {
+                return t + remove_extent<T>::size;
+            }
+        };
+
+    } // namespace 'range_detail'
+
+    namespace range_adl_barrier
+    {
+        template< typename C >
+        inline BOOST_RANGE_DEDUCED_TYPENAME range_iterator<C>::type
+        end( C& c )
+        {
+            return range_detail::range_end< BOOST_RANGE_DEDUCED_TYPENAME range_detail::range<C>::type >::fun( c );
+        }
+    } // namespace range_adl_barrier
+
+} // namespace 'boost'
+
+#endif
diff --git a/vendor/pdalboost/boost/range/detail/extract_optional_type.hpp b/vendor/pdalboost/boost/range/detail/extract_optional_type.hpp
new file mode 100644
index 0000000..0381434
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/extract_optional_type.hpp
@@ -0,0 +1,48 @@
+// Boost.Range library
+//
+//  Copyright Arno Schoedl & Neil Groves 2009.
+//  Use, modification and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_DETAIL_EXTRACT_OPTIONAL_TYPE_HPP_INCLUDED
+#define BOOST_RANGE_DETAIL_EXTRACT_OPTIONAL_TYPE_HPP_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/config.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/mpl/has_xxx.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_HAS_XXX)
+
+// Defines extract_some_typedef<T> which exposes T::some_typedef as
+// extract_some_typedef<T>::type if T::some_typedef exists. Otherwise
+// extract_some_typedef<T> is empty.
+#define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef )                          \
+    BOOST_MPL_HAS_XXX_TRAIT_DEF(a_typedef)                                      \
+    template< typename  C, bool B = BOOST_PP_CAT(has_, a_typedef)<C>::value >   \
+    struct BOOST_PP_CAT(extract_, a_typedef)                                    \
+    {};                                                                         \
+    template< typename C >                                                      \
+    struct BOOST_PP_CAT(extract_, a_typedef)< C, true >                         \
+    {                                                                           \
+        typedef BOOST_DEDUCED_TYPENAME C::a_typedef type;                       \
+    };
+
+#else
+
+#define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef )                          \
+    template< typename C >                                                      \
+    struct BOOST_PP_CAT(extract_, a_typedef)                                    \
+    {                                                                           \
+        typedef BOOST_DEDUCED_TYPENAME C::a_typedef type;                       \
+    };
+
+#endif
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/detail/has_member_size.hpp b/vendor/pdalboost/boost/range/detail/has_member_size.hpp
new file mode 100644
index 0000000..48cf5ee
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/has_member_size.hpp
@@ -0,0 +1,66 @@
+// Boost.Range library
+//
+// Copyright Neil Groves 2014.
+//
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_DETAIL_HAS_MEMBER_SIZE_HPP
+#define BOOST_RANGE_DETAIL_HAS_MEMBER_SIZE_HPP
+
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/cstdint.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+
+template<class T>
+class has_member_size_impl
+{
+private:
+    template<class U, U>
+    class check
+    {
+    };
+
+    template<class C>
+    static pdalboost::uint8_t f(check<std::size_t(C::*)(void) const, &C::size>*);
+
+    template<class C>
+    static pdalboost::uint16_t f(...);
+
+public:
+    static const bool value =
+        (sizeof(f<T>(0)) == sizeof(pdalboost::uint8_t));
+
+    typedef typename mpl::if_c<
+        (sizeof(f<T>(0)) == sizeof(pdalboost::uint8_t)),
+        mpl::true_,
+        mpl::false_
+    >::type type;
+};
+
+template<class T>
+struct has_member_size
+{
+    typedef typename mpl::and_<
+        typename is_class<T>::type,
+        typename has_member_size_impl<const T>::type
+    >::type type;
+
+    static const bool value =
+        is_class<T>::value && has_member_size_impl<const T>::value;
+};
+
+    } // namespace range_detail
+}// namespace pdalboost
+ 
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/detail/implementation_help.hpp b/vendor/pdalboost/boost/range/detail/implementation_help.hpp
new file mode 100644
index 0000000..161be4c
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/implementation_help.hpp
@@ -0,0 +1,114 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_IMPLEMENTATION_HELP_HPP
+#define BOOST_RANGE_DETAIL_IMPLEMENTATION_HELP_HPP
+
+#include <boost/range/config.hpp>
+#include <boost/range/detail/common.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <cstddef>
+#include <string.h>
+
+#ifndef BOOST_NO_CWCHAR
+#include <wchar.h>
+#endif
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        template <typename T>
+        inline void boost_range_silence_warning( const T& ) { }
+
+        /////////////////////////////////////////////////////////////////////
+        // end() help
+        /////////////////////////////////////////////////////////////////////
+
+        inline const char* str_end( const char* s, const char* )
+        {
+            return s + strlen( s );
+        }
+
+#ifndef BOOST_NO_CWCHAR
+        inline const wchar_t* str_end( const wchar_t* s, const wchar_t* )
+        {
+            return s + wcslen( s );
+        }
+#else
+        inline const wchar_t* str_end( const wchar_t* s, const wchar_t* )
+        {
+            if( s == 0 || s[0] == 0 )
+                return s;
+            while( *++s != 0 )
+                ;
+            return s;
+        }
+#endif
+
+        template< class Char >
+        inline Char* str_end( Char* s )
+        {
+            return const_cast<Char*>( str_end( s, s ) );
+        }
+
+        template< class T, std::size_t sz >
+        inline T* array_end( T BOOST_RANGE_ARRAY_REF()[sz] )
+        {
+            return boost_range_array + sz;
+        }
+
+        template< class T, std::size_t sz >
+        inline const T* array_end( const T BOOST_RANGE_ARRAY_REF()[sz] )
+        {
+            return boost_range_array + sz;
+        }
+
+        /////////////////////////////////////////////////////////////////////
+        // size() help
+        /////////////////////////////////////////////////////////////////////
+
+        template< class Char >
+        inline std::size_t str_size( const Char* const& s )
+        {
+            return str_end( s ) - s;
+        }
+
+        template< class T, std::size_t sz >
+        inline std::size_t array_size( T BOOST_RANGE_ARRAY_REF()[sz] )
+        {
+            boost_range_silence_warning( boost_range_array );
+            return sz;
+        }
+
+        template< class T, std::size_t sz >
+        inline std::size_t array_size( const T BOOST_RANGE_ARRAY_REF()[sz] )
+        {
+            boost_range_silence_warning( boost_range_array );
+            return sz;
+        }
+
+        inline bool is_same_address(const void* l, const void* r)
+        {
+            return l == r;
+        }
+
+        template<class T1, class T2>
+        inline bool is_same_object(const T1& l, const T2& r)
+        {
+            return range_detail::is_same_address(&l, &r);
+        }
+
+    } // namespace 'range_detail'
+
+} // namespace 'boost'
+
+
+#endif
diff --git a/vendor/pdalboost/boost/range/detail/misc_concept.hpp b/vendor/pdalboost/boost/range/detail/misc_concept.hpp
new file mode 100644
index 0000000..fa5709a
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/misc_concept.hpp
@@ -0,0 +1,33 @@
+// Boost.Range library concept checks
+//
+//  Copyright Neil Groves 2009. Use, modification and distribution
+//  are subject to the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+#ifndef BOOST_RANGE_DETAIL_MISC_CONCEPT_HPP_INCLUDED
+#define BOOST_RANGE_DETAIL_MISC_CONCEPT_HPP_INCLUDED
+
+#include <boost/concept_check.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        template<typename T1, typename T2>
+        class SameTypeConcept
+        {
+        public:
+            BOOST_CONCEPT_USAGE(SameTypeConcept)
+            {
+                same_type(a,b);
+            }
+        private:
+            template<typename T> void same_type(T,T) {}
+            T1 a;
+            T2 b;
+        };
+    }
+}
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/detail/msvc_has_iterator_workaround.hpp b/vendor/pdalboost/boost/range/detail/msvc_has_iterator_workaround.hpp
new file mode 100644
index 0000000..214a9fc
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/msvc_has_iterator_workaround.hpp
@@ -0,0 +1,132 @@
+// Boost.Range library
+//
+//  Copyright Eric Niebler 2014. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_MSVC_HAS_ITERATOR_WORKAROUND_HPP
+#define BOOST_RANGE_DETAIL_MSVC_HAS_ITERATOR_WORKAROUND_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#ifndef BOOST_RANGE_MUTABLE_ITERATOR_HPP
+# error This file should only be included from <boost/range/mutable_iterator.hpp>
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1600)
+namespace pdalboost
+{
+namespace cb_details
+{
+    template <class Buff, class Traits>
+    struct iterator;
+}
+
+namespace python
+{
+    template <class Container
+              , class NextPolicies /*= objects::default_iterator_call_policies*/>
+    struct iterator;
+}
+
+namespace type_erasure
+{
+    template<
+        class Traversal,
+        class T                 /*= _self*/,
+        class Reference         /*= ::pdalboost::use_default*/,
+        class DifferenceType    /*= ::std::ptrdiff_t*/,
+        class ValueType         /*= typename deduced<iterator_value_type<T> >::type*/
+    >
+    struct iterator;
+}
+
+namespace unordered { namespace iterator_detail
+{
+    template <typename Node>
+    struct iterator;
+}}
+
+namespace container { namespace container_detail
+{
+    template<class IIterator, bool IsConst>
+    class iterator;
+}}
+
+namespace spirit { namespace lex { namespace lexertl
+{
+    template <typename Functor>
+    class iterator;
+}}}
+
+namespace range_detail
+{
+    template <class Buff, class Traits>
+    struct has_iterator< ::pdalboost::cb_details::iterator<Buff, Traits> >
+      : mpl::false_
+    {};
+
+    template <class Buff, class Traits>
+    struct has_iterator< ::pdalboost::cb_details::iterator<Buff, Traits> const>
+      : mpl::false_
+    {};
+
+    template <class Container, class NextPolicies>
+    struct has_iterator< ::pdalboost::python::iterator<Container, NextPolicies> >
+      : mpl::false_
+    {};
+
+    template <class Container, class NextPolicies>
+    struct has_iterator< ::pdalboost::python::iterator<Container, NextPolicies> const>
+      : mpl::false_
+    {};
+
+    template<class Traversal, class T, class Reference, class DifferenceType, class ValueType>
+    struct has_iterator< ::pdalboost::type_erasure::iterator<Traversal, T, Reference, DifferenceType, ValueType> >
+      : mpl::false_
+    {};
+
+    template<class Traversal, class T, class Reference, class DifferenceType, class ValueType>
+    struct has_iterator< ::pdalboost::type_erasure::iterator<Traversal, T, Reference, DifferenceType, ValueType> const>
+      : mpl::false_
+    {};
+
+    template <typename Node>
+    struct has_iterator< ::pdalboost::unordered::iterator_detail::iterator<Node> >
+      : mpl::false_
+    {};
+
+    template <typename Node>
+    struct has_iterator< ::pdalboost::unordered::iterator_detail::iterator<Node> const>
+      : mpl::false_
+    {};
+
+    template<class IIterator, bool IsConst>
+    struct has_iterator< ::pdalboost::container::container_detail::iterator<IIterator, IsConst> >
+      : mpl::false_
+    {};
+
+    template<class IIterator, bool IsConst>
+    struct has_iterator< ::pdalboost::container::container_detail::iterator<IIterator, IsConst> const>
+      : mpl::false_
+    {};
+
+    template <typename Functor>
+    struct has_iterator< ::pdalboost::spirit::lex::lexertl::iterator<Functor> >
+      : mpl::false_
+    {};
+
+    template <typename Functor>
+    struct has_iterator< ::pdalboost::spirit::lex::lexertl::iterator<Functor> const>
+      : mpl::false_
+    {};
+}
+}
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/range/detail/range_return.hpp b/vendor/pdalboost/boost/range/detail/range_return.hpp
new file mode 100644
index 0000000..606db63
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/range_return.hpp
@@ -0,0 +1,180 @@
+//  Copyright Neil Groves 2009. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_DETAIL_RANGE_RETURN_HPP_INCLUDED
+#define BOOST_RANGE_DETAIL_RANGE_RETURN_HPP_INCLUDED
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace pdalboost
+{
+    enum range_return_value
+    {
+        // (*) indicates the most common values
+        return_found,       // only the found resulting iterator (*)
+        return_next,        // next(found) iterator
+        return_prior,       // prior(found) iterator
+        return_begin_found, // [begin, found) range (*)
+        return_begin_next,  // [begin, next(found)) range
+        return_begin_prior, // [begin, prior(found)) range
+        return_found_end,   // [found, end) range (*)
+        return_next_end,    // [next(found), end) range
+        return_prior_end,   // [prior(found), end) range
+        return_begin_end    // [begin, end) range
+    };
+
+    template< class SinglePassRange, range_return_value >
+    struct range_return
+    {
+        typedef pdalboost::iterator_range<
+            BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type > type;
+
+        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type found,
+                         SinglePassRange& rng)
+        {
+            return type(found, pdalboost::end(rng));
+        }
+    };
+
+    template< class SinglePassRange >
+    struct range_return< SinglePassRange, return_found >
+    {
+        typedef BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type type;
+
+        static type pack(type found, SinglePassRange&)
+        {
+            return found;
+        }
+    };
+
+    template< class SinglePassRange >
+    struct range_return< SinglePassRange, return_next >
+    {
+        typedef BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type type;
+
+        static type pack(type found, SinglePassRange& rng)
+        {
+            return found == pdalboost::end(rng)
+                ? found
+                : pdalboost::next(found);
+        }
+    };
+
+    template< class BidirectionalRange >
+    struct range_return< BidirectionalRange, return_prior >
+    {
+        typedef BOOST_DEDUCED_TYPENAME range_iterator<BidirectionalRange>::type type;
+
+        static type pack(type found, BidirectionalRange& rng)
+        {
+            return found == pdalboost::begin(rng)
+                ? found
+                : pdalboost::prior(found);
+        }
+    };
+
+    template< class SinglePassRange >
+    struct range_return< SinglePassRange, return_begin_found >
+    {
+        typedef pdalboost::iterator_range<
+            BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type > type;
+
+        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type found,
+                         SinglePassRange& rng)
+        {
+            return type(pdalboost::begin(rng), found);
+        }
+    };
+
+    template< class SinglePassRange >
+    struct range_return< SinglePassRange, return_begin_next >
+    {
+        typedef pdalboost::iterator_range<
+            BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type > type;
+
+        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type found,
+                         SinglePassRange& rng)
+        {
+            return type( pdalboost::begin(rng), 
+                         found == pdalboost::end(rng) ? found : pdalboost::next(found) );
+        }
+    };
+
+    template< class BidirectionalRange >
+    struct range_return< BidirectionalRange, return_begin_prior >
+    {
+        typedef pdalboost::iterator_range<
+            BOOST_DEDUCED_TYPENAME range_iterator<BidirectionalRange>::type > type;
+
+        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<BidirectionalRange>::type found,
+                         BidirectionalRange& rng)
+        {
+            return type( pdalboost::begin(rng),
+                         found == pdalboost::begin(rng) ? found : pdalboost::prior(found) );
+        }
+    };
+
+    template< class SinglePassRange >
+    struct range_return< SinglePassRange, return_found_end >
+    {
+        typedef pdalboost::iterator_range<
+            BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type > type;
+
+        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type found,
+                         SinglePassRange& rng)
+        {
+            return type(found, pdalboost::end(rng));
+        }
+    };
+
+    template< class SinglePassRange >
+    struct range_return< SinglePassRange, return_next_end >
+    {
+        typedef pdalboost::iterator_range<
+            BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type > type;
+
+        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type found,
+                         SinglePassRange& rng)
+        {
+            return type( found == pdalboost::end(rng) ? found : pdalboost::next(found),
+                         pdalboost::end(rng) );
+        }
+    };
+
+    template< class BidirectionalRange >
+    struct range_return< BidirectionalRange, return_prior_end >
+    {
+        typedef pdalboost::iterator_range<
+            BOOST_DEDUCED_TYPENAME range_iterator<BidirectionalRange>::type > type;
+
+        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<BidirectionalRange>::type found,
+                         BidirectionalRange& rng)
+        {
+            return type( found == pdalboost::begin(rng) ? found : pdalboost::prior(found),
+                         pdalboost::end(rng) );
+        }
+    };
+
+    template< class SinglePassRange >
+    struct range_return< SinglePassRange, return_begin_end >
+    {
+        typedef pdalboost::iterator_range<
+            BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type > type;
+
+        static type pack(BOOST_DEDUCED_TYPENAME range_iterator<SinglePassRange>::type,
+                         SinglePassRange& rng)
+        {
+            return type(pdalboost::begin(rng), pdalboost::end(rng));
+        }
+    };
+
+}
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/detail/remove_extent.hpp b/vendor/pdalboost/boost/range/detail/remove_extent.hpp
new file mode 100644
index 0000000..eef5082
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/remove_extent.hpp
@@ -0,0 +1,157 @@
+// Boost.Range library
+//
+//  Copyright Jonathan Turkanis 2005. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+
+#ifndef BOOST_RANGE_DETAIL_REMOVE_BOUNDS_HPP
+#define BOOST_RANGE_DETAIL_REMOVE_BOUNDS_HPP
+
+#include <boost/config.hpp>  // MSVC, NO_INTRINSIC_WCHAR_T, put size_t in std.
+#include <cstddef>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost 
+{
+    namespace range_detail
+    {
+        
+        template< typename Case1 = mpl::true_,
+                  typename Type1 = mpl::void_,
+                  typename Case2 = mpl::true_,
+                  typename Type2 = mpl::void_,
+                  typename Case3 = mpl::true_,
+                  typename Type3 = mpl::void_,
+                  typename Case4 = mpl::true_,
+                  typename Type4 = mpl::void_,
+                  typename Case5 = mpl::true_,
+                  typename Type5 = mpl::void_,
+                  typename Case6 = mpl::true_,
+                  typename Type6 = mpl::void_,
+                  typename Case7 = mpl::true_,
+                  typename Type7 = mpl::void_,
+                  typename Case8 = mpl::true_,
+                  typename Type8 = mpl::void_,
+                  typename Case9 = mpl::true_,
+                  typename Type9 = mpl::void_,
+                  typename Case10 = mpl::true_,
+                  typename Type10 = mpl::void_,
+                  typename Case11 = mpl::true_,
+                  typename Type11 = mpl::void_,
+                  typename Case12 = mpl::true_,
+                  typename Type12 = mpl::void_,
+                  typename Case13 = mpl::true_,
+                  typename Type13 = mpl::void_,
+                  typename Case14 = mpl::true_,
+                  typename Type14 = mpl::void_,
+                  typename Case15 = mpl::true_,
+                  typename Type15 = mpl::void_,
+                  typename Case16 = mpl::true_,
+                  typename Type16 = mpl::void_,
+                  typename Case17 = mpl::true_,
+                  typename Type17 = mpl::void_,
+                  typename Case18 = mpl::true_,
+                  typename Type18 = mpl::void_,
+                  typename Case19 = mpl::true_,
+                  typename Type19 = mpl::void_,
+                  typename Case20 = mpl::true_,
+                  typename Type20 = mpl::void_>
+        struct select {
+            typedef typename
+                    mpl::eval_if<
+                        Case1, mpl::identity<Type1>, mpl::eval_if<
+                        Case2, mpl::identity<Type2>, mpl::eval_if<
+                        Case3, mpl::identity<Type3>, mpl::eval_if<
+                        Case4, mpl::identity<Type4>, mpl::eval_if<
+                        Case5, mpl::identity<Type5>, mpl::eval_if<
+                        Case6, mpl::identity<Type6>, mpl::eval_if<
+                        Case7, mpl::identity<Type7>, mpl::eval_if<
+                        Case8, mpl::identity<Type8>, mpl::eval_if<
+                        Case9, mpl::identity<Type9>, mpl::if_<
+                        Case10, Type10, mpl::void_ > > > > > > > > >
+                    >::type result1;
+            typedef typename
+                    mpl::eval_if<
+                        Case11, mpl::identity<Type11>, mpl::eval_if<
+                        Case12, mpl::identity<Type12>, mpl::eval_if<
+                        Case13, mpl::identity<Type13>, mpl::eval_if<
+                        Case14, mpl::identity<Type14>, mpl::eval_if<
+                        Case15, mpl::identity<Type15>, mpl::eval_if<
+                        Case16, mpl::identity<Type16>, mpl::eval_if<
+                        Case17, mpl::identity<Type17>, mpl::eval_if<
+                        Case18, mpl::identity<Type18>, mpl::eval_if<
+                        Case19, mpl::identity<Type19>, mpl::if_<
+                        Case20, Type20, mpl::void_ > > > > > > > > >
+                    > result2;
+            typedef typename    
+                    mpl::eval_if<
+                        is_same<result1, mpl::void_>,
+                        result2,
+                        mpl::identity<result1>
+                    >::type type;
+        };
+
+        template<typename T>
+        struct remove_extent {
+            static T* ar;
+            BOOST_STATIC_CONSTANT(std::size_t, size = sizeof(*ar) / sizeof((*ar)[0]));
+
+            typedef typename
+                    select<
+                        is_same<T, bool[size]>,                  bool,
+                        is_same<T, char[size]>,                  char,
+                        is_same<T, signed char[size]>,           signed char,
+                        is_same<T, unsigned char[size]>,         unsigned char,
+                    #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+                        is_same<T, wchar_t[size]>,               wchar_t,
+                    #endif
+                        is_same<T, short[size]>,                 short,
+                        is_same<T, unsigned short[size]>,        unsigned short,
+                        is_same<T, int[size]>,                   int,
+                        is_same<T, unsigned int[size]>,          unsigned int,
+                        is_same<T, long[size]>,                  long,
+                        is_same<T, unsigned long[size]>,         unsigned long,
+                        is_same<T, float[size]>,                 float,
+                        is_same<T, double[size]>,                double,
+                        is_same<T, long double[size]>,           long double
+                    >::type result1;
+            typedef typename
+                    select<
+                        is_same<T, const bool[size]>,            const bool,
+                        is_same<T, const char[size]>,            const char,
+                        is_same<T, const signed char[size]>,     const signed char,
+                        is_same<T, const unsigned char[size]>,   const unsigned char,
+                    #ifndef BOOST_NO_INTRINSIC_WCHAR_T
+                        is_same<T, const wchar_t[size]>,         const wchar_t,
+                    #endif
+                        is_same<T, const short[size]>,           const short,
+                        is_same<T, const unsigned short[size]>,  const unsigned short,
+                        is_same<T, const int[size]>,             const int,
+                        is_same<T, const unsigned int[size]>,    const unsigned int,
+                        is_same<T, const long[size]>,            const long,
+                        is_same<T, const unsigned long[size]>,   const unsigned long,
+                        is_same<T, const float[size]>,           const float,
+                        is_same<T, const double[size]>,          const double,
+                        is_same<T, const long double[size]>,     const long double
+                    > result2;
+            typedef typename
+                    mpl::eval_if<
+                        is_same<result1, mpl::void_>,
+                        result2,
+                        mpl::identity<result1>
+                    >::type type;
+        };
+
+    } // namespace 'range_detail'
+
+} // namespace 'boost'
+
+
+#endif
diff --git a/vendor/pdalboost/boost/range/detail/safe_bool.hpp b/vendor/pdalboost/boost/range/detail/safe_bool.hpp
new file mode 100644
index 0000000..82ab606
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/safe_bool.hpp
@@ -0,0 +1,72 @@
+//  This header intentionally has no include guards.
+//
+//  Copyright (c) 2010 Neil Groves
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+// This code utilises the experience gained during the evolution of
+// <boost/smart_ptr/operator_bool.hpp>
+#ifndef BOOST_RANGE_SAFE_BOOL_INCLUDED_HPP
+#define BOOST_RANGE_SAFE_BOOL_INCLUDED_HPP
+
+#include <boost/config.hpp>
+#include <boost/range/config.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+
+template<class DataMemberPtr>
+class safe_bool
+{
+public:
+    typedef safe_bool this_type;
+
+#if (defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, < 0x570)) || defined(__CINT_)
+    typedef bool unspecified_bool_type;
+    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr)
+    {
+        return x;
+    }
+#elif defined(_MANAGED)
+    static void unspecified_bool(this_type***)
+    {
+    }
+    typedef void(*unspecified_bool_type)(this_type***);
+    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr)
+    {
+        return x ? unspecified_bool : 0;
+    }
+#elif \
+    ( defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, < 0x3200) ) || \
+    ( defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 304) ) || \
+    ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590) )
+
+    typedef bool (this_type::*unspecified_bool_type)() const;
+
+    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr)
+    {
+        return x ? &this_type::detail_safe_bool_member_fn : 0;
+    }
+private:
+    bool detail_safe_bool_member_fn() const { return false; }
+#else
+    typedef DataMemberPtr unspecified_bool_type;
+    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr p)
+    {
+        return x ? p : 0;
+    }
+#endif
+private:
+    safe_bool();
+    safe_bool(const safe_bool&);
+    void operator=(const safe_bool&);
+    ~safe_bool();
+};
+
+    } // namespace range_detail
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/detail/sfinae.hpp b/vendor/pdalboost/boost/range/detail/sfinae.hpp
new file mode 100644
index 0000000..9edafd8
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/sfinae.hpp
@@ -0,0 +1,77 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_SFINAE_HPP
+#define BOOST_RANGE_DETAIL_SFINAE_HPP
+
+#include <boost/range/config.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <utility>
+
+
+namespace pdalboost 
+{
+    namespace range_detail
+    {          
+        using type_traits::yes_type;
+        using type_traits::no_type;
+
+        //////////////////////////////////////////////////////////////////////
+        // string
+        //////////////////////////////////////////////////////////////////////
+        
+        yes_type is_string_impl( const char* const );
+        yes_type is_string_impl( const wchar_t* const );
+        no_type  is_string_impl( ... );
+        
+        template< std::size_t sz >
+        yes_type is_char_array_impl( char BOOST_RANGE_ARRAY_REF()[sz] );
+        template< std::size_t sz >
+        yes_type is_char_array_impl( const char BOOST_RANGE_ARRAY_REF()[sz] );
+        no_type  is_char_array_impl( ... );
+        
+        template< std::size_t sz >
+        yes_type is_wchar_t_array_impl( wchar_t BOOST_RANGE_ARRAY_REF()[sz] );
+        template< std::size_t sz >
+        yes_type is_wchar_t_array_impl( const wchar_t BOOST_RANGE_ARRAY_REF()[sz] );
+        no_type  is_wchar_t_array_impl( ... );
+                                     
+        yes_type is_char_ptr_impl( char* const );
+        no_type  is_char_ptr_impl( ... );
+        
+        yes_type is_const_char_ptr_impl( const char* const );
+        no_type  is_const_char_ptr_impl( ... );
+
+        yes_type is_wchar_t_ptr_impl( wchar_t* const );
+        no_type  is_wchar_t_ptr_impl( ... );
+        
+        yes_type is_const_wchar_t_ptr_impl( const wchar_t* const );
+        no_type  is_const_wchar_t_ptr_impl( ... );
+        
+        //////////////////////////////////////////////////////////////////////
+        // pair
+        //////////////////////////////////////////////////////////////////////
+
+        template< typename Iterator >
+        yes_type is_pair_impl( const std::pair<Iterator,Iterator>* );
+        no_type  is_pair_impl( ... );
+
+        //////////////////////////////////////////////////////////////////////
+        // tags
+        //////////////////////////////////////////////////////////////////////
+
+        struct char_or_wchar_t_array_tag {};
+        
+    } // namespace 'range_detail'
+    
+} // namespace 'boost'
+
+#endif
diff --git a/vendor/pdalboost/boost/range/detail/size_type.hpp b/vendor/pdalboost/boost/range/detail/size_type.hpp
new file mode 100644
index 0000000..c19881a
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/size_type.hpp
@@ -0,0 +1,55 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_SIZE_TYPE_HPP
+#define BOOST_RANGE_DETAIL_SIZE_TYPE_HPP
+
+#include <boost/range/detail/common.hpp>
+
+//////////////////////////////////////////////////////////////////////////////
+// missing partial specialization  workaround.
+//////////////////////////////////////////////////////////////////////////////
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        template< typename T >
+        struct range_size_type_
+        {
+            template< typename C >
+            struct pts
+            {
+                typedef std::size_t type;
+            };
+        };
+
+        template<>
+        struct range_size_type_<std_container_>
+        {
+            template< typename C >
+            struct pts
+            {
+                typedef BOOST_RANGE_DEDUCED_TYPENAME C::size_type type;
+            };
+        };
+    }
+
+    template< typename C >
+    class range_size
+    {
+        typedef typename range_detail::range<C>::type c_type;
+    public:
+        typedef typename range_detail::range_size_type_<c_type>::BOOST_NESTED_TEMPLATE pts<C>::type type;
+    };
+}
+
+#endif
+
diff --git a/vendor/pdalboost/boost/range/detail/str_types.hpp b/vendor/pdalboost/boost/range/detail/str_types.hpp
new file mode 100644
index 0000000..203b613
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/str_types.hpp
@@ -0,0 +1,38 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2006. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_STR_TYPES_HPP
+#define BOOST_RANGE_DETAIL_STR_TYPES_HPP
+
+#include <boost/range/size_type.hpp>
+#include <boost/range/iterator.hpp>
+
+namespace pdalboost
+{
+    template< class T >
+    struct range_mutable_iterator<T*>
+    {
+        typedef T* type;
+    };
+
+    template< class T >
+    struct range_const_iterator<T*>
+    {
+        typedef const T* type;
+    };
+
+    template< class T >
+    struct range_size<T*>
+    {
+       typedef std::size_t type;
+    };    
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/range/detail/value_type.hpp b/vendor/pdalboost/boost/range/detail/value_type.hpp
new file mode 100644
index 0000000..e5b3347
--- /dev/null
+++ b/vendor/pdalboost/boost/range/detail/value_type.hpp
@@ -0,0 +1,72 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DETAIL_VALUE_TYPE_HPP
+#define BOOST_RANGE_DETAIL_VALUE_TYPE_HPP
+
+#include <boost/range/detail/common.hpp>
+#include <boost/range/detail/remove_extent.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+//////////////////////////////////////////////////////////////////////////////
+// missing partial specialization  workaround.
+//////////////////////////////////////////////////////////////////////////////
+
+namespace pdalboost 
+{
+    namespace range_detail 
+    {        
+        template< typename T >
+        struct range_value_type_;
+
+        template<>
+        struct range_value_type_<std_container_>
+        {
+            template< typename C >
+            struct pts
+            {
+                typedef BOOST_RANGE_DEDUCED_TYPENAME C::value_type type;
+            };
+        };
+
+        template<>
+        struct range_value_type_<std_pair_>
+        {
+            template< typename P >
+            struct pts
+            {
+                typedef BOOST_RANGE_DEDUCED_TYPENAME pdalboost::iterator_value< BOOST_RANGE_DEDUCED_TYPENAME P::first_type >::type type;
+            };
+        };
+
+        template<>
+        struct range_value_type_<array_>
+        { 
+            template< typename T >
+            struct pts
+            {
+                typedef BOOST_DEDUCED_TYPENAME remove_extent<T>::type type;
+            };
+        };
+        
+    } 
+    
+    template< typename C >
+    class range_value
+    {
+        typedef BOOST_DEDUCED_TYPENAME range_detail::range<C>::type c_type;
+    public:
+        typedef BOOST_DEDUCED_TYPENAME range_detail::range_value_type_<c_type>::BOOST_NESTED_TEMPLATE pts<C>::type type; 
+    };
+
+}
+
+#endif
+
diff --git a/vendor/pdalboost/boost/range/difference_type.hpp b/vendor/pdalboost/boost/range/difference_type.hpp
new file mode 100644
index 0000000..b3dad0d
--- /dev/null
+++ b/vendor/pdalboost/boost/range/difference_type.hpp
@@ -0,0 +1,47 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DIFFERENCE_TYPE_HPP
+#define BOOST_RANGE_DIFFERENCE_TYPE_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/mpl/and.hpp>
+#include <boost/range/config.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/has_range_iterator.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        template< class T, bool B = has_type<range_iterator<T> >::value >
+        struct range_difference
+        { };
+
+        template< class T >
+        struct range_difference<T, true>
+          : iterator_difference<
+                BOOST_DEDUCED_TYPENAME range_iterator<T>::type
+            >
+        { };
+    }
+
+    template< class T >
+    struct range_difference
+      : range_detail::range_difference<BOOST_DEDUCED_TYPENAME remove_reference<T>::type>
+    { };
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/range/distance.hpp b/vendor/pdalboost/boost/range/distance.hpp
new file mode 100644
index 0000000..6e1ea0a
--- /dev/null
+++ b/vendor/pdalboost/boost/range/distance.hpp
@@ -0,0 +1,34 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2006. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_DISTANCE_HPP
+#define BOOST_RANGE_DISTANCE_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/difference_type.hpp>
+
+namespace pdalboost 
+{
+
+    template< class T >
+    inline BOOST_DEDUCED_TYPENAME range_difference<T>::type 
+    distance( const T& r )
+    {
+        return std::distance( pdalboost::begin( r ), pdalboost::end( r ) );
+    }
+
+} // namespace 'boost'
+
+#endif
diff --git a/vendor/pdalboost/boost/range/empty.hpp b/vendor/pdalboost/boost/range/empty.hpp
new file mode 100644
index 0000000..d7f3ab8
--- /dev/null
+++ b/vendor/pdalboost/boost/range/empty.hpp
@@ -0,0 +1,34 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_EMPTY_HPP
+#define BOOST_RANGE_EMPTY_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+
+namespace pdalboost 
+{ 
+
+    template< class T >
+    inline bool empty( const T& r )
+    {
+        return pdalboost::begin( r ) == pdalboost::end( r );
+    }
+
+} // namespace 'boost'
+
+
+#endif
diff --git a/vendor/pdalboost/boost/range/end.hpp b/vendor/pdalboost/boost/range/end.hpp
new file mode 100644
index 0000000..a7f3dcb
--- /dev/null
+++ b/vendor/pdalboost/boost/range/end.hpp
@@ -0,0 +1,128 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_END_HPP
+#define BOOST_RANGE_END_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+#include <boost/range/detail/end.hpp>
+#else
+
+#include <boost/range/detail/implementation_help.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/const_iterator.hpp>
+
+namespace pdalboost
+{
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+namespace range_detail
+{
+#endif
+
+        //////////////////////////////////////////////////////////////////////
+        // primary template
+        //////////////////////////////////////////////////////////////////////
+        template< typename C >
+        inline BOOST_DEDUCED_TYPENAME range_iterator<C>::type
+        range_end( C& c )
+        {
+            //
+            // If you get a compile-error here, it is most likely because
+            // you have not implemented range_begin() properly in
+            // the namespace of C
+            //
+            return c.end();
+        }
+
+        //////////////////////////////////////////////////////////////////////
+        // pair
+        //////////////////////////////////////////////////////////////////////
+
+        template< typename Iterator >
+        inline Iterator range_end( const std::pair<Iterator,Iterator>& p )
+        {
+            return p.second;
+        }
+
+        template< typename Iterator >
+        inline Iterator range_end( std::pair<Iterator,Iterator>& p )
+        {
+            return p.second;
+        }
+
+        //////////////////////////////////////////////////////////////////////
+        // array
+        //////////////////////////////////////////////////////////////////////
+
+        template< typename T, std::size_t sz >
+        inline const T* range_end( const T (&a)[sz] )
+        {
+            return range_detail::array_end<T,sz>( a );
+        }
+
+        template< typename T, std::size_t sz >
+        inline T* range_end( T (&a)[sz] )
+        {
+            return range_detail::array_end<T,sz>( a );
+        }
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+} // namespace 'range_detail'
+#endif
+
+namespace range_adl_barrier
+{
+
+template< class T >
+inline BOOST_DEDUCED_TYPENAME range_iterator<T>::type end( T& r )
+{
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+    using namespace range_detail;
+#endif
+    return range_end( r );
+}
+
+template< class T >
+inline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type end( const T& r )
+{
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+    using namespace range_detail;
+#endif
+    return range_end( r );
+}
+
+    } // namespace range_adl_barrier
+} // namespace 'boost'
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+namespace pdalboost
+{
+    namespace range_adl_barrier
+    {
+        template< class T >
+        inline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type
+        const_end( const T& r )
+        {
+            return pdalboost::range_adl_barrier::end( r );
+        }
+    } // namespace range_adl_barrier
+    using namespace range_adl_barrier;
+} // namespace pdalboost
+
+#endif
+
diff --git a/vendor/pdalboost/boost/range/functions.hpp b/vendor/pdalboost/boost/range/functions.hpp
new file mode 100644
index 0000000..43c54b1
--- /dev/null
+++ b/vendor/pdalboost/boost/range/functions.hpp
@@ -0,0 +1,27 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2006. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_FUNCTIONS_HPP
+#define BOOST_RANGE_FUNCTIONS_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/size.hpp>
+#include <boost/range/distance.hpp>
+#include <boost/range/empty.hpp>
+#include <boost/range/rbegin.hpp>
+#include <boost/range/rend.hpp>
+
+#endif
+
diff --git a/vendor/pdalboost/boost/range/has_range_iterator.hpp b/vendor/pdalboost/boost/range/has_range_iterator.hpp
new file mode 100644
index 0000000..d57961b
--- /dev/null
+++ b/vendor/pdalboost/boost/range/has_range_iterator.hpp
@@ -0,0 +1,83 @@
+// Boost.Range library
+//
+//  Copyright Neil Groves 2010. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+// Acknowledgments:
+// Ticket #8341: Arno Schoedl - improved handling of has_range_iterator upon
+// use-cases where T was const.
+#ifndef BOOST_RANGE_HAS_ITERATOR_HPP_INCLUDED
+#define BOOST_RANGE_HAS_ITERATOR_HPP_INCLUDED
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+        BOOST_MPL_HAS_XXX_TRAIT_DEF(type)
+
+        template<class T, class Enabler = void>
+        struct has_range_iterator_impl
+            : pdalboost::mpl::false_
+        {
+        };
+
+        template<class T>
+        struct has_range_iterator_impl<
+            T,
+            BOOST_DEDUCED_TYPENAME ::pdalboost::enable_if<
+                BOOST_DEDUCED_TYPENAME mpl::eval_if<is_const<T>,
+                    has_type<range_const_iterator<
+                                BOOST_DEDUCED_TYPENAME remove_const<T>::type> >,
+                    has_type<range_mutable_iterator<T> >
+                >::type
+            >::type
+        >
+            : pdalboost::mpl::true_
+        {
+        };
+
+        template<class T, class Enabler = void>
+        struct has_range_const_iterator_impl
+            : pdalboost::mpl::false_
+        {
+        };
+
+        template<class T>
+        struct has_range_const_iterator_impl<
+            T,
+            BOOST_DEDUCED_TYPENAME ::pdalboost::enable_if<
+                has_type<range_const_iterator<T> >
+            >::type
+        >
+            : pdalboost::mpl::true_
+        {
+        };
+
+    } // namespace range_detail
+
+    template<class T>
+    struct has_range_iterator
+        : range_detail::has_range_iterator_impl<
+            BOOST_DEDUCED_TYPENAME remove_reference<T>::type>
+    {};
+
+    template<class T>
+    struct has_range_const_iterator
+        : range_detail::has_range_const_iterator_impl<
+            BOOST_DEDUCED_TYPENAME remove_reference<T>::type>
+    {};
+} // namespace pdalboost
+
+#endif // include guard
+
diff --git a/vendor/pdalboost/boost/range/iterator.hpp b/vendor/pdalboost/boost/range/iterator.hpp
new file mode 100644
index 0000000..738afcc
--- /dev/null
+++ b/vendor/pdalboost/boost/range/iterator.hpp
@@ -0,0 +1,74 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_ITERATOR_HPP
+#define BOOST_RANGE_ITERATOR_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/range_fwd.hpp>
+#include <boost/range/mutable_iterator.hpp>
+#include <boost/range/const_iterator.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/mpl/eval_if.hpp>
+
+namespace pdalboost
+{
+
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)  
+
+    namespace range_detail_vc7_1  
+    {  
+       template< typename C, typename Sig = void(C) >  
+       struct range_iterator  
+       {  
+           typedef BOOST_RANGE_DEDUCED_TYPENAME   
+               mpl::eval_if_c< is_const<C>::value,   
+                               range_const_iterator< typename remove_const<C>::type >,  
+                               range_mutable_iterator<C> >::type type;  
+       };  
+    
+       template< typename C, typename T >  
+       struct range_iterator< C, void(T[]) >  
+       {  
+           typedef T* type;  
+       };       
+    }  
+    
+    template< typename C, typename Enabler=void >
+    struct range_iterator
+    {
+
+        typedef BOOST_RANGE_DEDUCED_TYPENAME  
+               range_detail_vc7_1::range_iterator<C>::type type;  
+
+    };
+
+#else
+
+    template< typename C, typename Enabler=void >
+    struct range_iterator
+      : mpl::if_c<
+            is_const<typename remove_reference<C>::type>::value,
+            range_const_iterator<typename remove_const<typename remove_reference<C>::type>::type>,
+            range_mutable_iterator<typename remove_reference<C>::type>
+        >::type
+    {
+    };
+
+#endif
+
+} // namespace pdalboost
+
+#endif
diff --git a/vendor/pdalboost/boost/range/iterator_range.hpp b/vendor/pdalboost/boost/range/iterator_range.hpp
new file mode 100644
index 0000000..dfcd4d2
--- /dev/null
+++ b/vendor/pdalboost/boost/range/iterator_range.hpp
@@ -0,0 +1,16 @@
+// Boost.Range library
+//
+//  Copyright Neil Groves 2009.
+//  Use, modification and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ITERATOR_RANGE_HPP_INCLUDED
+#define BOOST_RANGE_ITERATOR_RANGE_HPP_INCLUDED
+
+#include "boost/range/iterator_range_core.hpp"
+#include "boost/range/iterator_range_io.hpp"
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/iterator_range_core.hpp b/vendor/pdalboost/boost/range/iterator_range_core.hpp
new file mode 100644
index 0000000..850c472
--- /dev/null
+++ b/vendor/pdalboost/boost/range/iterator_range_core.hpp
@@ -0,0 +1,883 @@
+// Boost.Range library
+//
+//  Copyright Neil Groves & Thorsten Ottosen & Pavol Droba 2003-2004.
+//  Use, modification and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+// Credits:
+// 'michel' reported Trac 9072 which included a patch for allowing references
+// to function types.
+//
+#ifndef BOOST_RANGE_ITERATOR_RANGE_CORE_HPP_INCLUDED
+#define BOOST_RANGE_ITERATOR_RANGE_CORE_HPP_INCLUDED
+
+#include <boost/config.hpp> // Define __STL_CONFIG_H, if appropriate.
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
+    #pragma warning( push )
+    #pragma warning( disable : 4996 )
+#endif
+
+#include <boost/assert.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <boost/iterator/iterator_facade.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/range/functions.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/range/difference_type.hpp>
+#include <boost/range/has_range_iterator.hpp>
+#include <boost/range/algorithm/equal.hpp>
+#include <boost/range/detail/safe_bool.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <iterator>
+#include <algorithm>
+#include <cstddef>
+
+/*! \file
+    Defines the \c iterator_class and related functions.
+    \c iterator_range is a simple wrapper of iterator pair idiom. It provides
+    a rich subset of Container interface.
+*/
+
+
+namespace pdalboost
+{
+    namespace iterator_range_detail
+    {
+        //
+        // The functions adl_begin and adl_end are implemented in a separate
+        // class for gcc-2.9x
+        //
+        template<class IteratorT>
+        struct iterator_range_impl {
+            template< class ForwardRange >
+            static IteratorT adl_begin( ForwardRange& r )
+            {
+                return IteratorT( pdalboost::begin( r ) );
+            }
+
+            template< class ForwardRange >
+            static IteratorT adl_end( ForwardRange& r )
+            {
+                return IteratorT( pdalboost::end( r ) );
+            }
+        };
+
+        template< class Left, class Right >
+        inline bool less_than( const Left& l, const Right& r )
+        {
+            return std::lexicographical_compare( pdalboost::begin(l),
+                                                 pdalboost::end(l),
+                                                 pdalboost::begin(r),
+                                                 pdalboost::end(r) );
+        }
+        
+        template< class Left, class Right >
+        inline bool greater_than( const Left& l, const Right& r )
+        {
+            return iterator_range_detail::less_than(r,l);
+        }
+        
+        template< class Left, class Right >
+        inline bool less_or_equal_than( const Left& l, const Right& r )
+        {
+            return !iterator_range_detail::less_than(r,l);
+        }
+        
+        template< class Left, class Right >
+        inline bool greater_or_equal_than( const Left& l, const Right& r )
+        {
+            return !iterator_range_detail::less_than(l,r);
+        }
+
+        // This version is maintained since it is used in other boost libraries
+        // such as Boost.Assign
+        template< class Left, class Right >
+        inline bool equal(const Left& l, const Right& r)
+        {
+            return pdalboost::equal(l, r);
+        }
+
+struct range_tag
+{
+};
+
+struct const_range_tag
+{
+};
+
+struct iterator_range_tag
+{
+};
+
+typedef char (&incrementable_t)[1];
+typedef char (&bidirectional_t)[2];
+typedef char (&random_access_t)[3];
+
+incrementable_t test_traversal_tag(pdalboost::incrementable_traversal_tag);
+bidirectional_t test_traversal_tag(pdalboost::bidirectional_traversal_tag);
+random_access_t test_traversal_tag(pdalboost::random_access_traversal_tag);
+
+template<std::size_t S>
+struct pure_iterator_traversal_impl
+{
+    typedef pdalboost::incrementable_traversal_tag type;
+};
+
+template<>
+struct pure_iterator_traversal_impl<sizeof(bidirectional_t)>
+{
+    typedef pdalboost::bidirectional_traversal_tag type;
+};
+
+template<>
+struct pure_iterator_traversal_impl<sizeof(random_access_t)>
+{
+    typedef pdalboost::random_access_traversal_tag type;
+};
+
+template<typename IteratorT>
+struct pure_iterator_traversal
+{
+    typedef
+        BOOST_DEDUCED_TYPENAME iterator_traversal<IteratorT>::type
+    traversal_t;
+    BOOST_STATIC_CONSTANT(
+        std::size_t,
+        traversal_i = sizeof(iterator_range_detail::test_traversal_tag((traversal_t())))
+    );
+    typedef
+        BOOST_DEDUCED_TYPENAME pure_iterator_traversal_impl<traversal_i>::type
+    type;
+};
+
+template<class IteratorT, class TraversalTag>
+class iterator_range_base
+    : public iterator_range_tag
+{
+    typedef range_detail::safe_bool<
+                IteratorT iterator_range_base<IteratorT, TraversalTag>::*
+    > safe_bool_t;
+
+    typedef iterator_range_base<IteratorT, TraversalTag> type;
+
+protected:
+    typedef iterator_range_impl<IteratorT> impl;
+
+public:
+    typedef BOOST_DEDUCED_TYPENAME
+        safe_bool_t::unspecified_bool_type unspecified_bool_type;
+
+    typedef BOOST_DEDUCED_TYPENAME
+        iterator_value<IteratorT>::type value_type;
+
+    typedef BOOST_DEDUCED_TYPENAME
+        iterator_difference<IteratorT>::type difference_type;
+
+    typedef std::size_t size_type; // note: must be unsigned
+
+    // Needed because value-type is the same for
+    // const and non-const iterators
+    typedef BOOST_DEDUCED_TYPENAME
+                iterator_reference<IteratorT>::type reference;
+
+    //! const_iterator type
+    /*!
+        There is no distinction between const_iterator and iterator.
+        These typedefs are provides to fulfill container interface
+    */
+    typedef IteratorT const_iterator;
+    //! iterator type
+    typedef IteratorT iterator;
+
+protected:
+    iterator_range_base()
+        : m_Begin()
+        , m_End()
+    {
+    }
+
+    template<class Iterator>
+    iterator_range_base(Iterator Begin, Iterator End)
+        : m_Begin(Begin)
+        , m_End(End)
+    {
+    }
+
+public:
+    IteratorT begin() const
+    {
+        return m_Begin;
+    }
+
+    IteratorT end() const
+    {
+        return m_End;
+    }
+
+    bool empty() const
+    {
+        return m_Begin == m_End;
+    }
+
+    operator unspecified_bool_type() const
+    {
+        return safe_bool_t::to_unspecified_bool(
+                    m_Begin != m_End, &iterator_range_base::m_Begin);
+    }
+
+    bool operator!() const
+    {
+        return empty();
+    }
+
+    bool equal(const iterator_range_base& r) const
+    {
+        return m_Begin == r.m_Begin && m_End == r.m_End;
+    }
+
+   reference front() const
+   {
+       BOOST_ASSERT(!empty());
+       return *m_Begin;
+   }
+
+   void drop_front()
+   {
+       BOOST_ASSERT(!empty());
+       ++m_Begin;
+   }
+
+   void drop_front(difference_type n)
+   {
+       BOOST_ASSERT(n >= difference_type());
+       std::advance(this->m_Begin, n);
+   }
+   
+   // Deprecated
+   void pop_front() { drop_front(); }
+
+protected:
+    template<class Iterator>
+    void assign(Iterator first, Iterator last)
+    {
+        m_Begin = first;
+        m_End = last;
+    }
+
+    template<class SinglePassRange>
+    void assign(const SinglePassRange& r)
+    {
+        m_Begin = impl::adl_begin(r);
+        m_End = impl::adl_end(r);
+    }
+
+    template<class SinglePassRange>
+    void assign(SinglePassRange& r)
+    {
+        m_Begin = impl::adl_begin(r);
+        m_End = impl::adl_end(r);
+    }
+
+    IteratorT m_Begin;
+    IteratorT m_End;
+};
+
+template<class IteratorT>
+class iterator_range_base<IteratorT, bidirectional_traversal_tag>
+        : public iterator_range_base<IteratorT, incrementable_traversal_tag>
+{
+    typedef iterator_range_base<IteratorT, incrementable_traversal_tag> base_type;
+
+protected:
+    iterator_range_base()
+    {
+    }
+
+    template<class Iterator>
+    iterator_range_base(Iterator first, Iterator last)
+        : base_type(first, last)
+    {
+    }
+
+public:
+    typedef BOOST_DEDUCED_TYPENAME base_type::difference_type difference_type;
+    typedef BOOST_DEDUCED_TYPENAME base_type::reference reference;
+
+    reference back() const
+    {
+        BOOST_ASSERT(!this->empty());
+        return *pdalboost::prior(this->m_End);
+    }
+
+    void drop_back()
+    {
+        BOOST_ASSERT(!this->empty());
+        --this->m_End;
+    }
+
+    void drop_back(difference_type n)
+    {
+        BOOST_ASSERT(n >= difference_type());
+        std::advance(this->m_End, -n);
+    }
+    
+    // Deprecated
+    void pop_back() { drop_back(); }
+};
+
+template<class IteratorT>
+class iterator_range_base<IteratorT, random_access_traversal_tag>
+        : public iterator_range_base<IteratorT, bidirectional_traversal_tag>
+{
+    typedef iterator_range_base<
+                IteratorT, bidirectional_traversal_tag> base_type;
+
+public:
+    typedef BOOST_DEDUCED_TYPENAME
+        pdalboost::mpl::if_<
+            pdalboost::mpl::or_<
+                pdalboost::is_abstract<
+                    BOOST_DEDUCED_TYPENAME base_type::value_type
+                >,
+                pdalboost::is_array<
+                    BOOST_DEDUCED_TYPENAME base_type::value_type
+                >,
+                pdalboost::is_function<
+                    BOOST_DEDUCED_TYPENAME base_type::value_type
+                >
+            >,
+            BOOST_DEDUCED_TYPENAME base_type::reference,
+            BOOST_DEDUCED_TYPENAME base_type::value_type
+        >::type abstract_value_type;
+
+    // Rationale:
+    // typedef these here to reduce verbiage in the implementation of this
+    // type.
+    typedef BOOST_DEDUCED_TYPENAME base_type::difference_type difference_type;
+    typedef BOOST_DEDUCED_TYPENAME base_type::size_type size_type;
+    typedef BOOST_DEDUCED_TYPENAME base_type::reference reference;
+
+protected:
+    iterator_range_base()
+    {
+    }
+
+    template<class Iterator>
+    iterator_range_base(Iterator first, Iterator last)
+        : base_type(first, last)
+    {
+    }
+
+public:
+    reference operator[](difference_type at) const
+    {
+        BOOST_ASSERT(at >= 0);
+        BOOST_ASSERT(static_cast<typename base_type::size_type>(at) < size());
+        return this->m_Begin[at];
+    }
+
+    //
+    // When storing transform iterators, operator[]()
+    // fails because it returns by reference. Therefore
+    // operator()() is provided for these cases.
+    //
+    abstract_value_type operator()(difference_type at) const
+    {
+        BOOST_ASSERT(at >= 0);
+        BOOST_ASSERT(static_cast<typename base_type::size_type>(at) < size());
+        return this->m_Begin[at];
+    }
+
+    BOOST_DEDUCED_TYPENAME base_type::size_type size() const
+    {
+        return this->m_End - this->m_Begin;
+    }
+};
+
+    }
+
+//  iterator range template class -----------------------------------------//
+
+        //! iterator_range class
+        /*!
+            An \c iterator_range delimits a range in a sequence by beginning and ending iterators.
+            An iterator_range can be passed to an algorithm which requires a sequence as an input.
+            For example, the \c toupper() function may be used most frequently on strings,
+            but can also be used on iterator_ranges:
+
+            \code
+                pdalboost::tolower( find( s, "UPPERCASE STRING" ) );
+            \endcode
+
+            Many algorithms working with sequences take a pair of iterators,
+            delimiting a working range, as an arguments. The \c iterator_range class is an
+            encapsulation of a range identified by a pair of iterators.
+            It provides a collection interface,
+            so it is possible to pass an instance to an algorithm requiring a collection as an input.
+        */
+        template<class IteratorT>
+        class iterator_range
+            : public iterator_range_detail::iterator_range_base<
+                    IteratorT,
+                    BOOST_DEDUCED_TYPENAME iterator_range_detail::pure_iterator_traversal<IteratorT>::type
+                >
+        {
+            typedef iterator_range_detail::iterator_range_base<
+                    IteratorT,
+                    BOOST_DEDUCED_TYPENAME iterator_range_detail::pure_iterator_traversal<IteratorT>::type
+            > base_type;
+
+            template<class Source>
+            struct is_compatible_range_
+              : is_convertible<
+                    BOOST_DEDUCED_TYPENAME mpl::eval_if<
+                        has_range_iterator<Source>,
+                        range_iterator<Source>,
+                        mpl::identity<void>
+                    >::type,
+                    BOOST_DEDUCED_TYPENAME base_type::iterator
+                >
+            {
+            };
+
+            template<class Source>
+            struct is_compatible_range
+                : mpl::and_<
+                    mpl::not_<
+                        is_convertible<
+                            Source,
+                            BOOST_DEDUCED_TYPENAME base_type::iterator
+                        >
+                    >,
+                    is_compatible_range_<Source>
+                >
+            {
+            };
+
+        protected:
+            typedef iterator_range_detail::iterator_range_impl<IteratorT> impl;
+
+        public:
+            typedef iterator_range<IteratorT> type;
+
+            iterator_range()
+            {
+            }
+
+            template<class Iterator>
+            iterator_range(Iterator first, Iterator last)
+                : base_type(first, last)
+            {
+            }
+
+            template<class SinglePassRange>
+            iterator_range(
+                const SinglePassRange& r,
+                BOOST_DEDUCED_TYPENAME ::pdalboost::enable_if<
+                    is_compatible_range<const SinglePassRange>
+                >::type* = 0
+            )
+                : base_type(impl::adl_begin(r), impl::adl_end(r))
+            {
+            }
+
+            template<class SinglePassRange>
+            iterator_range(
+                SinglePassRange& r,
+                BOOST_DEDUCED_TYPENAME ::pdalboost::enable_if<
+                    is_compatible_range<SinglePassRange>
+                >::type* = 0
+            )
+                : base_type(impl::adl_begin(r), impl::adl_end(r))
+            {
+            }
+
+            template<class SinglePassRange>
+            iterator_range(const SinglePassRange& r,
+                           iterator_range_detail::const_range_tag)
+                : base_type(impl::adl_begin(r), impl::adl_end(r))
+            {
+            }
+
+            template<class SinglePassRange>
+            iterator_range(SinglePassRange& r,
+                           iterator_range_detail::range_tag)
+                : base_type(impl::adl_begin(r), impl::adl_end(r))
+            {
+            }
+
+            template<class Iterator>
+            iterator_range& operator=(const iterator_range<Iterator>& other)
+            {
+                this->assign(other.begin(), other.end());
+                return *this;
+            }
+
+            template<class Iterator>
+            iterator_range& operator=(iterator_range<Iterator>& other)
+            {
+                this->assign(other.begin(), other.end());
+                return *this;
+            }
+
+            template<class SinglePassRange>
+            iterator_range& operator=(SinglePassRange& r)
+            {
+                this->assign(r);
+                return *this;
+            }
+
+            template<class SinglePassRange>
+            iterator_range& operator=(const SinglePassRange& r)
+            {
+                this->assign(r);
+                return *this;
+            }
+
+            iterator_range& advance_begin(
+                BOOST_DEDUCED_TYPENAME base_type::difference_type n)
+            {
+                std::advance(this->m_Begin, n);
+                return *this;
+            }
+
+            iterator_range& advance_end(
+                BOOST_DEDUCED_TYPENAME base_type::difference_type n)
+            {
+                std::advance(this->m_End, n);
+                return *this;
+            }
+
+        protected:
+            //
+            // Allow subclasses an easy way to access the
+            // base type
+            //
+            typedef iterator_range iterator_range_;
+        };
+
+//  iterator range free-standing operators ---------------------------//
+
+        /////////////////////////////////////////////////////////////////////
+        // comparison operators
+        /////////////////////////////////////////////////////////////////////
+
+        template< class IteratorT, class ForwardRange >
+        inline BOOST_DEDUCED_TYPENAME pdalboost::enable_if<
+            mpl::not_<is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+            bool
+        >::type
+        operator==( const ForwardRange& l, const iterator_range<IteratorT>& r )
+        {
+            return pdalboost::equal( l, r );
+        }
+
+        template< class IteratorT, class ForwardRange >
+        inline BOOST_DEDUCED_TYPENAME pdalboost::enable_if<
+            mpl::not_<pdalboost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+            bool
+        >::type
+        operator!=( const ForwardRange& l, const iterator_range<IteratorT>& r )
+        {
+            return !pdalboost::equal( l, r );
+        }
+
+        template< class IteratorT, class ForwardRange >
+        inline BOOST_DEDUCED_TYPENAME pdalboost::enable_if<
+            mpl::not_<pdalboost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+            bool
+        >::type
+        operator<( const ForwardRange& l, const iterator_range<IteratorT>& r )
+        {
+            return iterator_range_detail::less_than( l, r );
+        }
+        
+        template< class IteratorT, class ForwardRange >
+        inline BOOST_DEDUCED_TYPENAME pdalboost::enable_if<
+            mpl::not_<pdalboost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+            bool
+        >::type
+        operator<=( const ForwardRange& l, const iterator_range<IteratorT>& r )
+        {
+            return iterator_range_detail::less_or_equal_than( l, r );
+        }
+        
+        template< class IteratorT, class ForwardRange >
+        inline BOOST_DEDUCED_TYPENAME pdalboost::enable_if<
+            mpl::not_<pdalboost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+            bool
+        >::type
+        operator>( const ForwardRange& l, const iterator_range<IteratorT>& r )
+        {
+            return iterator_range_detail::greater_than( l, r );
+        }
+        
+        template< class IteratorT, class ForwardRange >
+        inline BOOST_DEDUCED_TYPENAME pdalboost::enable_if<
+            mpl::not_<pdalboost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+            bool
+        >::type
+        operator>=( const ForwardRange& l, const iterator_range<IteratorT>& r )
+        {
+            return iterator_range_detail::greater_or_equal_than( l, r );
+        }
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+#else
+        template< class Iterator1T, class Iterator2T >
+        inline bool
+        operator==( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )
+        {
+            return pdalboost::equal( l, r );
+        }
+
+        template< class IteratorT, class ForwardRange >
+        inline BOOST_DEDUCED_TYPENAME pdalboost::enable_if<
+            mpl::not_<pdalboost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+            bool
+        >::type
+        operator==( const iterator_range<IteratorT>& l, const ForwardRange& r )
+        {
+            return pdalboost::equal( l, r );
+        }
+
+
+        template< class Iterator1T, class Iterator2T >
+        inline bool
+        operator!=( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )
+        {
+            return !pdalboost::equal( l, r );
+        }
+
+        template< class IteratorT, class ForwardRange >
+        inline BOOST_DEDUCED_TYPENAME pdalboost::enable_if<
+            mpl::not_<pdalboost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+            bool
+        >::type
+        operator!=( const iterator_range<IteratorT>& l, const ForwardRange& r )
+        {
+            return !pdalboost::equal( l, r );
+        }
+
+
+        template< class Iterator1T, class Iterator2T >
+        inline bool
+        operator<( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )
+        {
+            return iterator_range_detail::less_than( l, r );
+        }
+
+        template< class IteratorT, class ForwardRange >
+        inline BOOST_DEDUCED_TYPENAME pdalboost::enable_if<
+            mpl::not_<pdalboost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+            bool
+        >::type
+        operator<( const iterator_range<IteratorT>& l, const ForwardRange& r )
+        {
+            return iterator_range_detail::less_than( l, r );
+        }
+        
+        template< class Iterator1T, class Iterator2T >
+        inline bool
+        operator<=( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )
+        {
+            return iterator_range_detail::less_or_equal_than( l, r );
+        }
+        
+        template< class IteratorT, class ForwardRange >
+        inline BOOST_DEDUCED_TYPENAME pdalboost::enable_if<
+            mpl::not_<pdalboost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+            bool
+        >::type
+        operator<=( const iterator_range<IteratorT>& l, const ForwardRange& r )
+        {
+            return iterator_range_detail::less_or_equal_than( l, r );
+        }
+        
+        template< class Iterator1T, class Iterator2T >
+        inline bool
+        operator>( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )
+        {
+            return iterator_range_detail::greater_than( l, r );
+        }
+        
+        template< class IteratorT, class ForwardRange >
+        inline BOOST_DEDUCED_TYPENAME pdalboost::enable_if<
+            mpl::not_<pdalboost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+            bool
+        >::type
+        operator>( const iterator_range<IteratorT>& l, const ForwardRange& r )
+        {
+            return iterator_range_detail::greater_than( l, r );
+        }
+        
+        template< class Iterator1T, class Iterator2T >
+        inline bool
+        operator>=( const iterator_range<Iterator1T>& l, const iterator_range<Iterator2T>& r )
+        {
+            return iterator_range_detail::greater_or_equal_than( l, r );
+        }
+        
+        template< class IteratorT, class ForwardRange >
+        inline BOOST_DEDUCED_TYPENAME pdalboost::enable_if<
+            mpl::not_<pdalboost::is_base_and_derived<iterator_range_detail::iterator_range_tag, ForwardRange> >,
+            bool
+        >::type
+        operator>=( const iterator_range<IteratorT>& l, const ForwardRange& r )
+        {
+            return iterator_range_detail::greater_or_equal_than( l, r );
+        }
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+//  iterator range utilities -----------------------------------------//
+
+        //! iterator_range construct helper
+        /*!
+            Construct an \c iterator_range from a pair of iterators
+
+            \param Begin A begin iterator
+            \param End An end iterator
+            \return iterator_range object
+        */
+        template< typename IteratorT >
+        inline iterator_range< IteratorT >
+        make_iterator_range( IteratorT Begin, IteratorT End )
+        {
+            return iterator_range<IteratorT>( Begin, End );
+        }
+
+        template<typename IteratorT, typename IntegerT>
+        inline iterator_range<IteratorT>
+        make_iterator_range_n(IteratorT first, IntegerT n)
+        {
+            return iterator_range<IteratorT>(first, pdalboost::next(first, n));
+        }
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+        template< typename Range >
+        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >
+        make_iterator_range( Range& r )
+        {
+            return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >
+                ( pdalboost::begin( r ), pdalboost::end( r ) );
+        }
+
+#else
+        //! iterator_range construct helper
+        /*!
+            Construct an \c iterator_range from a \c Range containing the begin
+            and end iterators.
+        */
+        template< class ForwardRange >
+        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type >
+        make_iterator_range( ForwardRange& r )
+        {
+           return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type >
+                ( r, iterator_range_detail::range_tag() );
+        }
+
+        template< class ForwardRange >
+        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type >
+        make_iterator_range( const ForwardRange& r )
+        {
+           return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type >
+                ( r, iterator_range_detail::const_range_tag() );
+        }
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+        namespace iterator_range_detail
+        {
+            template< class Range >
+            inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >
+            make_range_impl( Range& r,
+                             BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,
+                             BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )
+            {
+                //
+                // Not worth the effort
+                //
+                //if( advance_begin == 0 && advance_end == 0 )
+                //    return make_iterator_range( r );
+                //
+
+                BOOST_DEDUCED_TYPENAME range_iterator<Range>::type
+                    new_begin = pdalboost::begin( r ),
+                    new_end   = pdalboost::end( r );
+                std::advance( new_begin, advance_begin );
+                std::advance( new_end, advance_end );
+                return make_iterator_range( new_begin, new_end );
+            }
+        }
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+        template< class Range >
+        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >
+        make_iterator_range( Range& r,
+                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,
+                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )
+        {
+            return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );
+        }
+
+#else
+
+        template< class Range >
+        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >
+        make_iterator_range( Range& r,
+                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,
+                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )
+        {
+            return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );
+        }
+
+        template< class Range >
+        inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const Range>::type >
+        make_iterator_range( const Range& r,
+                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,
+                    BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )
+        {
+            return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );
+        }
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+        //! copy a range into a sequence
+        /*!
+            Construct a new sequence of the specified type from the elements
+            in the given range
+
+            \param Range An input range
+            \return New sequence
+        */
+        template< typename SeqT, typename Range >
+        inline SeqT copy_range( const Range& r )
+        {
+            return SeqT( pdalboost::begin( r ), pdalboost::end( r ) );
+        }
+
+} // namespace 'boost'
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
+    #pragma warning( pop )
+#endif
+
+#endif
+
diff --git a/vendor/pdalboost/boost/range/iterator_range_io.hpp b/vendor/pdalboost/boost/range/iterator_range_io.hpp
new file mode 100644
index 0000000..4725dab
--- /dev/null
+++ b/vendor/pdalboost/boost/range/iterator_range_io.hpp
@@ -0,0 +1,93 @@
+// Boost.Range library
+//
+//  Copyright Neil Groves 2009.
+//  Use, modification and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_ITERATOR_RANGE_IO_HPP_INCLUDED
+#define BOOST_RANGE_ITERATOR_RANGE_IO_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
+    #pragma warning( push )
+    #pragma warning( disable : 4996 )
+#endif
+
+// From boost/dynamic_bitset.hpp; thanks to Matthias Troyer for Cray X1 patch.
+#ifndef BOOST_OLD_IOSTREAMS 
+# if defined(__STL_CONFIG_H) && \
+    !defined (__STL_USE_NEW_IOSTREAMS) && !defined(__crayx1) \
+    /**/
+#  define BOOST_OLD_IOSTREAMS
+# endif
+#endif // #ifndef BOOST_OLD_IOSTREAMS
+
+#ifndef _STLP_NO_IOSTREAMS
+# ifndef BOOST_OLD_IOSTREAMS
+#  include <ostream>
+# else
+#  include <ostream.h>
+# endif
+#endif // _STLP_NO_IOSTREAMS
+
+#include <boost/range/iterator_range_core.hpp>
+#include <iterator>
+#include <algorithm>
+#include <cstddef>
+
+namespace pdalboost
+{
+
+#ifndef _STLP_NO_IOSTREAMS
+# ifndef BOOST_OLD_IOSTREAMS   
+
+        //! iterator_range output operator
+        /*!
+            Output the range to an ostream. Elements are outputted
+            in a sequence without separators.
+        */
+        template< typename IteratorT, typename Elem, typename Traits >
+        inline std::basic_ostream<Elem,Traits>& operator<<( 
+                    std::basic_ostream<Elem, Traits>& Os,
+                    const iterator_range<IteratorT>& r )
+        {
+            std::copy( r.begin(), r.end(), 
+                       std::ostream_iterator< BOOST_DEDUCED_TYPENAME 
+                                              iterator_value<IteratorT>::type, 
+                                              Elem, Traits>(Os) );
+            return Os;
+        }
+
+# else
+
+        //! iterator_range output operator
+        /*!
+            Output the range to an ostream. Elements are outputted
+            in a sequence without separators.
+        */
+        template< typename IteratorT >
+        inline std::ostream& operator<<( 
+                    std::ostream& Os,
+                    const iterator_range<IteratorT>& r )
+        {
+            std::copy( r.begin(), r.end(), std::ostream_iterator<char>(Os));
+            return Os;
+        }
+
+# endif
+#endif // _STLP_NO_IOSTREAMS
+
+} // namespace pdalboost
+
+#undef BOOST_OLD_IOSTREAMS
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
+    #pragma warning(pop)
+#endif
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/metafunctions.hpp b/vendor/pdalboost/boost/range/metafunctions.hpp
new file mode 100644
index 0000000..9dc59d0
--- /dev/null
+++ b/vendor/pdalboost/boost/range/metafunctions.hpp
@@ -0,0 +1,31 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_METAFUNCTIONS_HPP
+#define BOOST_RANGE_METAFUNCTIONS_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/iterator.hpp>
+#include <boost/range/has_range_iterator.hpp>
+#include <boost/range/result_iterator.hpp>
+#include <boost/range/reverse_iterator.hpp>
+#include <boost/range/const_reverse_iterator.hpp>
+#include <boost/range/reverse_result_iterator.hpp>
+#include <boost/range/value_type.hpp>
+#include <boost/range/size_type.hpp>
+#include <boost/range/difference_type.hpp>
+#include <boost/range/category.hpp>
+#include <boost/range/reference.hpp>
+#include <boost/range/pointer.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/range/mutable_iterator.hpp b/vendor/pdalboost/boost/range/mutable_iterator.hpp
new file mode 100644
index 0000000..cdfd6c6
--- /dev/null
+++ b/vendor/pdalboost/boost/range/mutable_iterator.hpp
@@ -0,0 +1,79 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_MUTABLE_ITERATOR_HPP
+#define BOOST_RANGE_MUTABLE_ITERATOR_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+
+#include <boost/range/range_fwd.hpp>
+#include <boost/range/detail/extract_optional_type.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+#include <cstddef>
+#include <utility>
+
+namespace pdalboost
+{
+
+    //////////////////////////////////////////////////////////////////////////
+    // default
+    //////////////////////////////////////////////////////////////////////////
+    
+    namespace range_detail
+    {
+
+BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( iterator )
+
+template< typename C >
+struct range_mutable_iterator
+        : range_detail::extract_iterator<
+            BOOST_DEDUCED_TYPENAME remove_reference<C>::type>
+{};
+
+//////////////////////////////////////////////////////////////////////////
+// pair
+//////////////////////////////////////////////////////////////////////////
+
+template< typename Iterator >
+struct range_mutable_iterator< std::pair<Iterator,Iterator> >
+{
+    typedef Iterator type;
+};
+
+//////////////////////////////////////////////////////////////////////////
+// array
+//////////////////////////////////////////////////////////////////////////
+
+template< typename T, std::size_t sz >
+struct range_mutable_iterator< T[sz] >
+{
+    typedef T* type;
+};
+
+    } // namespace range_detail
+
+template<typename C, typename Enabler=void>
+struct range_mutable_iterator
+        : range_detail::range_mutable_iterator<
+            BOOST_DEDUCED_TYPENAME remove_reference<C>::type
+        >
+{
+};
+
+} // namespace pdalboost
+
+#include <boost/range/detail/msvc_has_iterator_workaround.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/range/pointer.hpp b/vendor/pdalboost/boost/range/pointer.hpp
new file mode 100644
index 0000000..443e575
--- /dev/null
+++ b/vendor/pdalboost/boost/range/pointer.hpp
@@ -0,0 +1,30 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2006. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_POINTER_TYPE_HPP
+#define BOOST_RANGE_POINTER_TYPE_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace pdalboost
+{
+    template< class T >
+    struct range_pointer
+            : iterator_pointer< BOOST_DEDUCED_TYPENAME range_iterator<T>::type >
+    { };
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/range/range_fwd.hpp b/vendor/pdalboost/boost/range/range_fwd.hpp
new file mode 100644
index 0000000..fae474a
--- /dev/null
+++ b/vendor/pdalboost/boost/range/range_fwd.hpp
@@ -0,0 +1,63 @@
+// Boost.Range library
+//
+//  Copyright Neil Groves 2003-2004.
+//  Use, modification and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+#ifndef BOOST_RANGE_RANGE_FWD_HPP_INCLUDED
+#define BOOST_RANGE_RANGE_FWD_HPP_INCLUDED
+
+namespace pdalboost
+{
+
+// Extension points
+    template<typename C, typename Enabler>
+    struct range_iterator;
+
+    template<typename C, typename Enabler>
+    struct range_mutable_iterator;
+
+    template<typename C, typename Enabler>
+    struct range_const_iterator;
+
+// Core classes
+    template<typename IteratorT>
+    class iterator_range;
+
+    template<typename ForwardRange>
+    class sub_range;
+
+// Meta-functions
+    template<typename T>
+    struct range_category;
+
+    template<typename T>
+    struct range_difference;
+
+    template<typename T>
+    struct range_pointer;
+
+    template<typename T>
+    struct range_reference;
+
+    template<typename T>
+    struct range_reverse_iterator;
+
+    template<typename T>
+    struct range_size;
+
+    template<typename T>
+    struct range_value;
+
+    template<typename T>
+    struct has_range_iterator;
+
+    template<typename T>
+    struct has_range_const_iterator;
+
+} // namespace pdalboost
+
+#endif // include guard
diff --git a/vendor/pdalboost/boost/range/rbegin.hpp b/vendor/pdalboost/boost/range/rbegin.hpp
new file mode 100644
index 0000000..97fd6c4
--- /dev/null
+++ b/vendor/pdalboost/boost/range/rbegin.hpp
@@ -0,0 +1,65 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_RBEGIN_HPP
+#define BOOST_RANGE_RBEGIN_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/end.hpp>
+#include <boost/range/reverse_iterator.hpp>
+
+namespace pdalboost
+{
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+template< class C >
+inline BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type
+rbegin( C& c )
+{
+    return BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type( pdalboost::end( c ) );
+}
+
+#else
+
+template< class C >
+inline BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type
+rbegin( C& c )
+{
+    typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type
+        iter_type;
+    return iter_type( pdalboost::end( c ) );
+}
+
+template< class C >
+inline BOOST_DEDUCED_TYPENAME range_reverse_iterator<const C>::type
+rbegin( const C& c )
+{
+    typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<const C>::type
+        iter_type;
+    return iter_type( pdalboost::end( c ) );
+}
+
+#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+template< class T >
+inline BOOST_DEDUCED_TYPENAME range_reverse_iterator<const T>::type
+const_rbegin( const T& r )
+{
+    return pdalboost::rbegin( r );
+}
+
+} // namespace 'boost'
+
+#endif
+
diff --git a/vendor/pdalboost/boost/range/reference.hpp b/vendor/pdalboost/boost/range/reference.hpp
new file mode 100644
index 0000000..6ba2256
--- /dev/null
+++ b/vendor/pdalboost/boost/range/reference.hpp
@@ -0,0 +1,29 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_REFERENCE_TYPE_HPP
+#define BOOST_RANGE_REFERENCE_TYPE_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace pdalboost
+{
+    template< class T >
+    struct range_reference : iterator_reference< typename range_iterator<T>::type >
+    { };
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/range/rend.hpp b/vendor/pdalboost/boost/range/rend.hpp
new file mode 100644
index 0000000..0c7dec2
--- /dev/null
+++ b/vendor/pdalboost/boost/range/rend.hpp
@@ -0,0 +1,65 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_REND_HPP
+#define BOOST_RANGE_REND_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/begin.hpp>
+#include <boost/range/reverse_iterator.hpp>
+
+namespace pdalboost
+{
+
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+
+template< class C >
+inline BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type
+rend( C& c )
+{
+    return BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type( pdalboost::begin( c ) );
+}
+
+#else
+
+template< class C >
+inline BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type
+rend( C& c )
+{
+    typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<C>::type
+               iter_type;
+    return iter_type( pdalboost::begin( c ) );
+}
+
+template< class C >
+inline BOOST_DEDUCED_TYPENAME range_reverse_iterator<const C>::type
+rend( const C& c )
+{
+    typedef BOOST_DEDUCED_TYPENAME range_reverse_iterator<const C>::type
+        iter_type;
+    return iter_type( pdalboost::begin( c ) );
+}
+
+#endif
+
+template< class T >
+inline BOOST_DEDUCED_TYPENAME range_reverse_iterator<const T>::type
+const_rend( const T& r )
+{
+    return pdalboost::rend( r );
+}
+
+} // namespace 'boost'
+
+#endif
+
diff --git a/vendor/pdalboost/boost/range/result_iterator.hpp b/vendor/pdalboost/boost/range/result_iterator.hpp
new file mode 100644
index 0000000..ff989c8
--- /dev/null
+++ b/vendor/pdalboost/boost/range/result_iterator.hpp
@@ -0,0 +1,33 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_RESULT_ITERATOR_HPP
+#define BOOST_RANGE_RESULT_ITERATOR_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/iterator.hpp>
+
+namespace pdalboost
+{
+    //
+    // This interface is deprecated, use range_iterator<T>
+    //
+    
+    template< typename C >
+    struct range_result_iterator : range_iterator<C>
+    { };
+    
+} // namespace pdalboost
+
+
+#endif
diff --git a/vendor/pdalboost/boost/range/reverse_iterator.hpp b/vendor/pdalboost/boost/range/reverse_iterator.hpp
new file mode 100644
index 0000000..fec425c
--- /dev/null
+++ b/vendor/pdalboost/boost/range/reverse_iterator.hpp
@@ -0,0 +1,42 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_REVERSE_ITERATOR_HPP
+#define BOOST_RANGE_REVERSE_ITERATOR_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/iterator/reverse_iterator.hpp>
+
+
+namespace pdalboost
+{
+    //////////////////////////////////////////////////////////////////////////
+    // default
+    //////////////////////////////////////////////////////////////////////////
+    
+    template< typename T >
+    struct range_reverse_iterator
+    {
+        typedef reverse_iterator< 
+            BOOST_DEDUCED_TYPENAME range_iterator<
+                BOOST_DEDUCED_TYPENAME remove_reference<T>::type>::type > type;
+    };
+    
+
+} // namespace pdalboost
+
+
+#endif
diff --git a/vendor/pdalboost/boost/range/reverse_result_iterator.hpp b/vendor/pdalboost/boost/range/reverse_result_iterator.hpp
new file mode 100644
index 0000000..114c31d
--- /dev/null
+++ b/vendor/pdalboost/boost/range/reverse_result_iterator.hpp
@@ -0,0 +1,32 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_REVERSE_RESULT_ITERATOR_HPP
+#define BOOST_RANGE_REVERSE_RESULT_ITERATOR_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/reverse_iterator.hpp>
+
+namespace pdalboost
+{
+    //
+    // This interface is deprecated, use range_reverse_iterator<T>
+    //
+   
+    template< typename C >
+    struct range_reverse_result_iterator : range_reverse_iterator<C>
+    { };
+    
+} // namespace pdalboost
+
+#endif
diff --git a/vendor/pdalboost/boost/range/size.hpp b/vendor/pdalboost/boost/range/size.hpp
new file mode 100644
index 0000000..7c62689
--- /dev/null
+++ b/vendor/pdalboost/boost/range/size.hpp
@@ -0,0 +1,76 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_SIZE_HPP
+#define BOOST_RANGE_SIZE_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/range/size_type.hpp>
+#include <boost/range/detail/has_member_size.hpp>
+#include <boost/assert.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/utility.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+
+        template<class SinglePassRange>
+        inline typename ::pdalboost::enable_if<
+            has_member_size<SinglePassRange>,
+            typename range_size<const SinglePassRange>::type
+        >::type
+        range_calculate_size(const SinglePassRange& rng)
+        {
+            return rng.size();
+        }
+
+        template<class SinglePassRange>
+        inline typename disable_if<
+            has_member_size<SinglePassRange>,
+            typename range_size<const SinglePassRange>::type
+        >::type
+        range_calculate_size(const SinglePassRange& rng)
+        {
+            return std::distance(pdalboost::begin(rng), pdalboost::end(rng));
+        }
+    }
+
+    template<class SinglePassRange>
+    inline typename range_size<const SinglePassRange>::type
+    size(const SinglePassRange& rng)
+    {
+// Very strange things happen on some compilers that have the range concept
+// asserts disabled. This preprocessor condition is clearly redundant on a
+// working compiler but is vital for at least some compilers such as clang 4.2
+// but only on the Mac!
+#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT == 1
+        BOOST_RANGE_CONCEPT_ASSERT((pdalboost::SinglePassRangeConcept<SinglePassRange>));
+#endif
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+    !BOOST_WORKAROUND(__GNUC__, < 3) \
+    /**/
+        using namespace range_detail;
+#endif
+
+        return range_calculate_size(rng);
+    }
+
+} // namespace 'boost'
+
+#endif
diff --git a/vendor/pdalboost/boost/range/size_type.hpp b/vendor/pdalboost/boost/range/size_type.hpp
new file mode 100644
index 0000000..49c274d
--- /dev/null
+++ b/vendor/pdalboost/boost/range/size_type.hpp
@@ -0,0 +1,95 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_SIZE_TYPE_HPP
+#define BOOST_RANGE_SIZE_TYPE_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/difference_type.hpp>
+#include <boost/range/concepts.hpp>
+#include <boost/range/has_range_iterator.hpp>
+
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/make_unsigned.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <cstddef>
+#include <utility>
+
+namespace pdalboost
+{
+    namespace detail
+    {
+
+        //////////////////////////////////////////////////////////////////////////
+        // default
+        //////////////////////////////////////////////////////////////////////////
+
+        template<typename T>
+        class has_size_type
+        {
+            typedef char no_type;
+            struct yes_type { char dummy[2]; };
+
+            template<typename C>
+            static yes_type test(BOOST_DEDUCED_TYPENAME C::size_type x);
+
+            template<typename C>
+            static no_type test(...);
+
+        public:
+            static const bool value = sizeof(test<T>(0)) == sizeof(yes_type);
+        };
+
+        template<typename C, typename Enabler=void>
+        struct range_size_
+        {
+            typedef BOOST_DEDUCED_TYPENAME make_unsigned<
+                BOOST_DEDUCED_TYPENAME range_difference<C>::type
+            >::type type;
+        };
+
+        template<typename C>
+        struct range_size_<
+            C,
+            BOOST_DEDUCED_TYPENAME ::pdalboost::enable_if<has_size_type<C>, void>::type
+        >
+        {
+            typedef BOOST_DEDUCED_TYPENAME C::size_type type;
+        };
+
+        template<typename C, bool B = range_detail::has_type< range_iterator<C> >::value>
+        struct range_size
+        { };
+
+        template<typename C>
+        struct range_size<C, true>
+          : range_size_<C>
+        { };
+    }
+
+    template< class T >
+    struct range_size :
+        detail::range_size<T>
+    { };
+
+    template< class T >
+    struct range_size<const T > :
+        detail::range_size<T>
+    { };
+
+} // namespace pdalboost
+
+
+
+#endif
diff --git a/vendor/pdalboost/boost/range/sub_range.hpp b/vendor/pdalboost/boost/range/sub_range.hpp
new file mode 100644
index 0000000..60d6653
--- /dev/null
+++ b/vendor/pdalboost/boost/range/sub_range.hpp
@@ -0,0 +1,287 @@
+// Boost.Range library
+//
+//  Copyright Neil Groves 2009.
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_SUB_RANGE_HPP
+#define BOOST_RANGE_SUB_RANGE_HPP
+
+#include <boost/detail/workaround.hpp>
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500)) 
+    #pragma warning( push )
+    #pragma warning( disable : 4996 )
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/range/value_type.hpp>
+#include <boost/range/size_type.hpp>
+#include <boost/range/difference_type.hpp>
+#include <boost/range/reference.hpp>
+#include <boost/range/algorithm/equal.hpp>
+#include <boost/assert.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+namespace pdalboost
+{
+    namespace range_detail
+    {
+
+template<class ForwardRange, class TraversalTag>
+class sub_range_base
+        : public iterator_range<
+            BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+        >
+{
+    typedef iterator_range<
+        BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+    > base;
+
+protected:
+    typedef BOOST_DEDUCED_TYPENAME base::iterator_range_ iterator_range_;
+
+public:
+    typedef BOOST_DEDUCED_TYPENAME range_value<ForwardRange>::type value_type;
+    typedef BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type iterator;
+    typedef BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type const_iterator;
+    typedef BOOST_DEDUCED_TYPENAME range_difference<ForwardRange>::type difference_type;
+    typedef BOOST_DEDUCED_TYPENAME range_size<ForwardRange>::type size_type;
+    typedef BOOST_DEDUCED_TYPENAME range_reference<ForwardRange>::type reference;
+    typedef BOOST_DEDUCED_TYPENAME range_reference<const ForwardRange>::type const_reference;
+
+    sub_range_base()
+    {
+    }
+
+    template<class Iterator>
+    sub_range_base(Iterator first, Iterator last)
+        : base(first, last)
+    {
+    }
+
+    reference front()
+    {
+        return base::front();
+    }
+
+    const_reference front() const
+    {
+        return base::front();
+    }
+};
+
+template<class ForwardRange>
+class sub_range_base<ForwardRange, bidirectional_traversal_tag>
+        : public sub_range_base<ForwardRange, forward_traversal_tag>
+{
+    typedef sub_range_base<ForwardRange, forward_traversal_tag> base;
+public:
+    sub_range_base()
+    {
+    }
+
+    template<class Iterator>
+    sub_range_base(Iterator first, Iterator last)
+        : base(first, last)
+    {
+    }
+
+    BOOST_DEDUCED_TYPENAME base::reference back()
+    {
+        return base::back();
+    }
+
+    BOOST_DEDUCED_TYPENAME base::const_reference back() const
+    {
+        return base::back();
+    }
+};
+
+template<class ForwardRange>
+class sub_range_base<ForwardRange, random_access_traversal_tag>
+        : public sub_range_base<ForwardRange, bidirectional_traversal_tag>
+{
+    typedef sub_range_base<ForwardRange, bidirectional_traversal_tag> base;
+
+public:
+    sub_range_base()
+    {
+    }
+
+    template<class Iterator>
+    sub_range_base(Iterator first, Iterator last)
+        : base(first, last)
+    {
+    }
+
+    BOOST_DEDUCED_TYPENAME base::reference
+    operator[](BOOST_DEDUCED_TYPENAME base::difference_type n)
+    {
+        return this->begin()[n];
+    }
+
+    BOOST_DEDUCED_TYPENAME base::const_reference
+    operator[](BOOST_DEDUCED_TYPENAME base::difference_type n) const
+    {
+        return this->begin()[n];
+    }
+};
+
+    } // namespace range_detail
+
+    template<class ForwardRange>
+    class sub_range
+        : public range_detail::sub_range_base<
+                ForwardRange,
+                BOOST_DEDUCED_TYPENAME iterator_traversal<
+                    BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+                >::type
+            >
+    {
+        typedef BOOST_DEDUCED_TYPENAME range_iterator<
+            ForwardRange
+        >::type iterator_t;
+
+        typedef range_detail::sub_range_base<
+            ForwardRange,
+            BOOST_DEDUCED_TYPENAME iterator_traversal<
+                BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
+            >::type
+        > base;
+
+        typedef BOOST_DEDUCED_TYPENAME base::impl impl;
+
+    protected:
+        typedef BOOST_DEDUCED_TYPENAME base::iterator_range_ iterator_range_;
+
+    private:
+        template<class Source>
+        struct is_compatible_range
+            : is_convertible<
+                BOOST_DEDUCED_TYPENAME mpl::eval_if<
+                    has_range_iterator<Source>,
+                    range_iterator<Source>,
+                    mpl::identity<void>
+                >::type,
+                BOOST_DEDUCED_TYPENAME base::iterator
+            >
+        {
+        };
+
+    public:
+        sub_range()
+        { }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500) ) 
+        sub_range(const sub_range& r)
+            : base(impl::adl_begin(const_cast<base&>(static_cast<const base&>(r))),
+                   impl::adl_end(const_cast<base&>(static_cast<const base&>(r))))
+        { }  
+#endif
+
+        template< class ForwardRange2 >
+        sub_range(
+            ForwardRange2& r,
+            BOOST_DEDUCED_TYPENAME ::pdalboost::enable_if<
+                is_compatible_range<ForwardRange2>
+            >::type* = 0
+        )
+        : base(impl::adl_begin(r), impl::adl_end(r))
+        {
+        }
+
+        template< class ForwardRange2 >
+        sub_range(
+            const ForwardRange2& r,
+            BOOST_DEDUCED_TYPENAME ::pdalboost::enable_if<
+                is_compatible_range<const ForwardRange2>
+            >::type* = 0
+        )
+        : base(impl::adl_begin(r), impl::adl_end(r))
+        {
+        }
+
+        BOOST_DEDUCED_TYPENAME base::const_iterator begin() const
+        {
+            return base::begin();
+        }
+
+        BOOST_DEDUCED_TYPENAME base::iterator begin()
+        {
+            return base::begin();
+        }
+
+        BOOST_DEDUCED_TYPENAME base::const_iterator end() const
+        {
+            return base::end();
+        }
+
+        BOOST_DEDUCED_TYPENAME base::iterator end()
+        {
+            return base::end();
+        }
+
+        template< class Iter >
+        sub_range( Iter first, Iter last ) :
+            base( first, last )
+        { }
+
+        template<class ForwardRange2>
+        BOOST_DEDUCED_TYPENAME ::pdalboost::enable_if<
+            is_compatible_range<ForwardRange2>,
+            sub_range&
+        >::type
+        operator=(ForwardRange2& r)
+        {
+            iterator_range_::operator=( r );
+            return *this;
+        }
+
+        template<class ForwardRange2>
+        BOOST_DEDUCED_TYPENAME ::pdalboost::enable_if<
+            is_compatible_range<const ForwardRange2>,
+            sub_range&
+        >::type
+        operator=( const ForwardRange2& r )
+        {
+            iterator_range_::operator=( r );
+            return *this;
+        }   
+
+        sub_range& operator=( const sub_range& r )
+        {
+            iterator_range_::operator=( static_cast<const iterator_range_&>(r) );
+            return *this;            
+        }
+        
+        sub_range& advance_begin(
+            BOOST_DEDUCED_TYPENAME base::difference_type n)
+        {
+            std::advance(this->m_Begin, n);
+            return *this;
+        }
+        
+        sub_range& advance_end(
+            BOOST_DEDUCED_TYPENAME base::difference_type n)
+        {
+            std::advance(this->m_End, n);
+            return *this;
+        }
+    };
+
+} // namespace 'boost'
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500)) 
+    #pragma warning( pop )
+#endif
+
+#endif
+
diff --git a/vendor/pdalboost/boost/range/traversal.hpp b/vendor/pdalboost/boost/range/traversal.hpp
new file mode 100644
index 0000000..18a3290
--- /dev/null
+++ b/vendor/pdalboost/boost/range/traversal.hpp
@@ -0,0 +1,31 @@
+// Boost.Range library
+//
+//  Copyright Neil Groves 2014. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_TRAVERSAL_HPP
+#define BOOST_RANGE_TRAVERSAL_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/iterator.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace pdalboost
+{
+    template<typename SinglePassRange>
+    struct range_traversal
+        : iterator_traversal<typename range_iterator<SinglePassRange>::type>
+    {
+    };
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/range/value_type.hpp b/vendor/pdalboost/boost/range/value_type.hpp
new file mode 100644
index 0000000..6372269
--- /dev/null
+++ b/vendor/pdalboost/boost/range/value_type.hpp
@@ -0,0 +1,30 @@
+// Boost.Range library
+//
+//  Copyright Thorsten Ottosen 2003-2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see http://www.boost.org/libs/range/
+//
+
+#ifndef BOOST_RANGE_VALUE_TYPE_HPP
+#define BOOST_RANGE_VALUE_TYPE_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/range/config.hpp>
+#include <boost/range/iterator.hpp>
+
+#include <boost/iterator/iterator_traits.hpp>
+
+namespace pdalboost
+{
+    template< class T >
+    struct range_value : iterator_value< typename range_iterator<T>::type >
+    { };
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/ratio/config.hpp b/vendor/pdalboost/boost/ratio/config.hpp
new file mode 100644
index 0000000..c4bff75
--- /dev/null
+++ b/vendor/pdalboost/boost/ratio/config.hpp
@@ -0,0 +1,92 @@
+//  config.hpp  ---------------------------------------------------------------//
+
+//  Copyright 2012 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+
+#ifndef BOOST_RATIO_CONFIG_HPP
+#define BOOST_RATIO_CONFIG_HPP
+
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+
+
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__)
+#  if ! defined BOOST_NO_CXX11_U16STRING
+#    define BOOST_NO_CXX11_U16STRING
+#  endif
+#  if ! defined BOOST_NO_CXX11_U32STRING
+#    define BOOST_NO_CXX11_U32STRING
+#  endif
+#endif
+
+
+#if !defined BOOST_RATIO_VERSION
+#define BOOST_RATIO_VERSION 1
+#else
+#if BOOST_RATIO_VERSION!=1  && BOOST_RATIO_VERSION!=2
+#error "BOOST_RATIO_VERSION must be 1 or 2"
+#endif
+#endif
+
+#if BOOST_RATIO_VERSION==1
+#if ! defined BOOST_RATIO_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V2_0_0
+#define BOOST_RATIO_PROVIDES_DEPRECATED_FEATURES_SINCE_V2_0_0
+#endif
+#endif
+
+#if BOOST_RATIO_VERSION==2
+#if ! defined BOOST_RATIO_PROVIDES_DEPRECATED_FEATURES_SINCE_V2_0_0
+#define BOOST_RATIO_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V2_0_0
+#endif
+#endif
+
+#ifdef INTMAX_C
+#define BOOST_RATIO_INTMAX_C(a) INTMAX_C(a)
+#else
+#define BOOST_RATIO_INTMAX_C(a) a##LL
+#endif
+
+#ifdef UINTMAX_C
+#define BOOST_RATIO_UINTMAX_C(a) UINTMAX_C(a)
+#else
+#define BOOST_RATIO_UINTMAX_C(a) a##ULL
+#endif
+
+#define BOOST_RATIO_INTMAX_T_MAX (0x7FFFFFFFFFFFFFFELL)
+
+
+#ifndef BOOST_NO_CXX11_STATIC_ASSERT
+#define BOOST_RATIO_STATIC_ASSERT(CND, MSG, TYPES) static_assert(CND,MSG)
+#elif defined(BOOST_RATIO_USES_STATIC_ASSERT)
+#include <boost/static_assert.hpp>
+#define BOOST_RATIO_STATIC_ASSERT(CND, MSG, TYPES) BOOST_STATIC_ASSERT(CND)
+#elif defined(BOOST_RATIO_USES_MPL_ASSERT)
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#define BOOST_RATIO_STATIC_ASSERT(CND, MSG, TYPES)                                 \
+    BOOST_MPL_ASSERT_MSG(pdalboost::mpl::bool_< (CND) >::type::value, MSG, TYPES)
+#else
+//~ #elif defined(BOOST_RATIO_USES_ARRAY_ASSERT)
+#define BOOST_RATIO_CONCAT(A,B) A##B
+#define BOOST_RATIO_NAME(A,B) BOOST_RATIO_CONCAT(A,B)
+#define BOOST_RATIO_STATIC_ASSERT(CND, MSG, TYPES) static char BOOST_RATIO_NAME(__boost_ratio_test_,__LINE__)[(CND)?1:-1]
+//~ #define BOOST_RATIO_STATIC_ASSERT(CND, MSG, TYPES)
+#endif
+
+#if !defined(BOOST_NO_CXX11_STATIC_ASSERT) || !defined(BOOST_RATIO_USES_MPL_ASSERT)
+#define BOOST_RATIO_OVERFLOW_IN_ADD "overflow in ratio add"
+#define BOOST_RATIO_OVERFLOW_IN_SUB "overflow in ratio sub"
+#define BOOST_RATIO_OVERFLOW_IN_MUL "overflow in ratio mul"
+#define BOOST_RATIO_OVERFLOW_IN_DIV "overflow in ratio div"
+#define BOOST_RATIO_NUMERATOR_IS_OUT_OF_RANGE "ratio numerator is out of range"
+#define BOOST_RATIO_DIVIDE_BY_0 "ratio divide by 0"
+#define BOOST_RATIO_DENOMINATOR_IS_OUT_OF_RANGE "ratio denominator is out of range"
+#endif
+
+
+//#define BOOST_RATIO_EXTENSIONS
+
+#endif  // header
diff --git a/vendor/pdalboost/boost/ratio/detail/mpl/abs.hpp b/vendor/pdalboost/boost/ratio/detail/mpl/abs.hpp
new file mode 100644
index 0000000..d796aa7
--- /dev/null
+++ b/vendor/pdalboost/boost/ratio/detail/mpl/abs.hpp
@@ -0,0 +1,89 @@
+////////////////////////////////////////////////////////////////////
+//
+// Copyright Vicente J. Botet Escriba 2010
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+//
+////////////////////////////////////////////////////////////////////
+#ifndef BOOST_MPL_ABS_HPP_INCLUDED
+#define BOOST_MPL_ABS_HPP_INCLUDED
+
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/integral.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+#if    !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && !defined(__CUDACC__) \
+    && ( defined(BOOST_MSVC) \
+        || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \
+        )
+
+#   define BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2
+
+#endif
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct abs_impl;
+
+template< typename T > struct abs_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N)
+    >
+struct abs
+    : abs_impl<
+          typename abs_tag<N>::type
+        >::template apply<N>::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, abs, (N))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, abs)
+
+template<
+      typename T
+    , T n1
+    >
+struct abs_c
+    : abs<integral_c<T,n1> >
+{
+};
+
+#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2)
+namespace aux {
+template< typename T, T n > struct abs_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value = (n < 0 ? -n : n));
+    typedef integral_c<T,value> type;
+};
+}
+#endif
+
+template<>
+struct abs_impl<integral_c_tag>
+{
+#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2)
+    template< typename N > struct apply
+        : aux::abs_wknd< typename N::value_type, N::value >
+#else
+    template< typename N > struct apply
+        : integral_c< typename N::value_type, ((N::value < 0) ? (-N::value) : N::value ) >
+#endif
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_ABS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/ratio/detail/mpl/gcd.hpp b/vendor/pdalboost/boost/ratio/detail/mpl/gcd.hpp
new file mode 100644
index 0000000..6e8b9ec
--- /dev/null
+++ b/vendor/pdalboost/boost/ratio/detail/mpl/gcd.hpp
@@ -0,0 +1,124 @@
+////////////////////////////////////////////////////////////////////
+//
+// Copyright Vicente J. Botet Escriba 2010
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+//
+////////////////////////////////////////////////////////////////////
+#ifndef BOOST_MPL_GCD_HPP_INCLUDED
+#define BOOST_MPL_GCD_HPP_INCLUDED
+
+#include <boost/mpl/integral_c.hpp>
+#include <boost/ratio/detail/mpl/abs.hpp>
+#include <boost/mpl/aux_/largest_int.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/integral.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/dependent_nttp.hpp>
+#include <boost/cstdint.hpp>
+
+#if    !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && !defined(__CUDACC__) \
+    && ( defined(BOOST_MSVC) \
+        || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \
+        )
+
+#   define BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2
+
+#endif
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag1, typename Tag2 > struct gcd_impl;
+
+template< typename T > struct gcd_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct gcd
+    : gcd_impl<
+          typename gcd_tag<N1>::type
+        , typename gcd_tag<N2>::type
+        >::template apply<N1, N2>::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, gcd, (N1, N2))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, gcd)
+
+template<
+      typename T
+    , T n1
+    , T n2
+    >
+struct gcd_c
+    : gcd<integral_c<T,n1>,integral_c<T,n2> >
+{
+};
+
+namespace aux {
+
+  // Workaround for error: the type of partial specialization template parameter constant "n2"
+    // depends on another template parameter
+    // Note: this solution could be wrong for n1 or n2 = [2**63 .. 2**64-1]
+#if defined(BOOST_MPL_CFG_NO_DEPENDENT_NONTYPE_PARAMETER_IN_PARTIAL_SPEC)
+
+  template< typename T1, pdalboost::intmax_t n1, bool n1_is_0
+                  , typename T2, pdalboost::intmax_t n2, bool n2_is_0 >
+      struct gcd_aux
+          : gcd_aux<T2, n2, n2==0, T1, (n1 % n2), (n1 % n2)==0>
+      {};
+
+      template <typename T1, pdalboost::intmax_t n1, typename T2, pdalboost::intmax_t n2>
+      struct gcd_aux<T1, n1, false, T2, n2, true> : integral_c<T1, n1>
+      {};
+
+      template <typename T1, pdalboost::intmax_t n1, typename T2, pdalboost::intmax_t n2, bool C>
+      struct gcd_aux<T1, n1, true, T2, n2, C> : integral_c<T2, n2>
+      {};
+
+#else // defined(BOOST_MPL_CFG_NO_DEPENDENT_NONTYPE_PARAMETER_IN_PARTIAL_SPEC)
+
+    template< typename T1, T1 n1, bool n1_is_0, typename T2, T2 n2, bool n2_is_0 >
+    struct gcd_aux
+
+        : gcd_aux<T2, n2, n2==0,
+                    typename aux::largest_int<T1, T2>::type,
+                    //~ T1,
+                    (n1 % n2), (n1 % n2)==0>
+    {};
+
+    template <typename T1, T1 n1, typename T2, T2 n2>
+    struct gcd_aux<T1, n1, false, T2, n2, true> : integral_c<T1, n1>
+    {};
+
+    template <typename T1, T1 n1, typename T2, T2 n2, bool C>
+    struct gcd_aux<T1, n1, true, T2, n2, C> : integral_c<T2, n2>
+    {};
+#endif // defined(BOOST_MPL_CFG_NO_DEPENDENT_NONTYPE_PARAMETER_IN_PARTIAL_SPEC)
+}
+
+template<>
+struct gcd_impl<integral_c_tag, integral_c_tag>
+{
+    template< typename N1, typename N2 > struct apply
+        : abs<aux::gcd_aux< typename N1::value_type, N1::value, N1::value==0,
+                        typename N2::value_type, N2::value, N2::value==0  > >
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_GCD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/ratio/detail/mpl/lcm.hpp b/vendor/pdalboost/boost/ratio/detail/mpl/lcm.hpp
new file mode 100644
index 0000000..cf64ef3
--- /dev/null
+++ b/vendor/pdalboost/boost/ratio/detail/mpl/lcm.hpp
@@ -0,0 +1,126 @@
+////////////////////////////////////////////////////////////////////
+//
+// Copyright Vicente J. Botet Escriba 2010
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+//
+////////////////////////////////////////////////////////////////////
+#ifndef BOOST_MPL_LCM_HPP_INCLUDED
+#define BOOST_MPL_LCM_HPP_INCLUDED
+
+#include <boost/mpl/integral_c.hpp>
+#include <boost/ratio/detail/mpl/abs.hpp>
+#include <boost/mpl/aux_/largest_int.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/integral.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/dependent_nttp.hpp>
+#include <boost/cstdint.hpp>
+
+#if    !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && !defined(__CUDACC__) \
+    && ( defined(BOOST_MSVC) \
+        || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \
+        )
+
+#   define BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2
+
+#endif
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag1, typename Tag2 > struct lcm_impl;
+
+template< typename T > struct lcm_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N1)
+    , typename BOOST_MPL_AUX_NA_PARAM(N2)
+    >
+struct lcm
+    : lcm_impl<
+          typename lcm_tag<N1>::type
+        , typename lcm_tag<N2>::type
+        >::template apply<N1, N2>::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, lcm, (N1, N2))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, lcm)
+
+template<
+      typename T
+    , T n1
+    , T n2
+    >
+struct lcm_c
+    : lcm<integral_c<T,n1>,integral_c<T,n2> >
+{
+};
+
+
+namespace aux {
+  // Workaround for error: the type of partial specialization template parameter constant "n2"
+  // depends on another template parameter
+  // Note: this solution could be wrong for n1 or n2 = [2**63 .. 2**64-1]
+  #if defined(BOOST_MPL_CFG_NO_DEPENDENT_NONTYPE_PARAMETER_IN_PARTIAL_SPEC)
+  template< typename T1, pdalboost::intmax_t n1, bool n1_is_0
+                          , typename T2, pdalboost::intmax_t n2, bool n2_is_0 >
+      struct lcm_aux
+          : abs<integral_c< typename aux::largest_int<T1, T2>::type,
+              ( n1 / gcd<integral_c<T1,n1>, integral_c<T2,n2> >::value * n2 )
+          > >
+      {};
+
+      template <typename T1, pdalboost::intmax_t n1, typename T2, pdalboost::intmax_t n2>
+      struct lcm_aux<T1, n1, false, T2, n2, true> : integral_c<T2, 0>
+      {};
+
+      template <typename T1, pdalboost::intmax_t n1, typename T2, pdalboost::intmax_t n2, bool C>
+      struct lcm_aux<T1, n1, true, T2, n2, C> : integral_c<T1, 0>
+      {};
+
+
+#else // defined(BOOST_MPL_CFG_NO_DEPENDENT_NONTYPE_PARAMETER_IN_PARTIAL_SPEC)
+
+
+    template< typename T1, T1 n1, bool n1_is_0, typename T2, T2 n2, bool n2_is_0 >
+    struct lcm_aux
+
+        : abs<integral_c< typename aux::largest_int<T1, T2>::type,
+            ( n1 / gcd<integral_c<T1,n1>, integral_c<T2,n2> >::value * n2 )
+        > >
+    {};
+
+    template <typename T1, T1 n1, typename T2, T2 n2>
+    struct lcm_aux<T1, n1, false, T2, n2, true> : integral_c<T2, 0>
+    {};
+
+    template <typename T1, T1 n1, typename T2, T2 n2, bool C>
+    struct lcm_aux<T1, n1, true, T2, n2, C> : integral_c<T1, 0>
+    {};
+#endif // defined(BOOST_MPL_CFG_NO_DEPENDENT_NONTYPE_PARAMETER_IN_PARTIAL_SPEC)
+}
+
+template<>
+struct lcm_impl<integral_c_tag, integral_c_tag>
+{
+    template< typename N1, typename N2 > struct apply
+        : abs<aux::lcm_aux< typename N1::value_type, N1::value, N1::value==0,
+                        typename N2::value_type, N2::value, N2::value==0  > >
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_LCM_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/ratio/detail/mpl/sign.hpp b/vendor/pdalboost/boost/ratio/detail/mpl/sign.hpp
new file mode 100644
index 0000000..5f83b30
--- /dev/null
+++ b/vendor/pdalboost/boost/ratio/detail/mpl/sign.hpp
@@ -0,0 +1,89 @@
+////////////////////////////////////////////////////////////////////
+//
+// Copyright Vicente J. Botet Escriba 2010
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+//
+////////////////////////////////////////////////////////////////////
+#ifndef BOOST_MPL_SIGN_HPP_INCLUDED
+#define BOOST_MPL_SIGN_HPP_INCLUDED
+
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/integral.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+#if    !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2) \
+    && !defined(BOOST_MPL_PREPROCESSING_MODE) \
+    && !defined(__CUDACC__) \
+    && ( defined(BOOST_MSVC) \
+        || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \
+        )
+
+#   define BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2
+
+#endif
+
+namespace pdalboost { namespace mpl {
+
+template< typename Tag > struct sign_impl;
+
+template< typename T > struct sign_tag
+{
+    typedef typename T::tag type;
+};
+
+template<
+      typename BOOST_MPL_AUX_NA_PARAM(N)
+    >
+struct sign
+    : sign_impl<
+          typename sign_tag<N>::type
+        >::template apply<N>::type
+{
+    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, sign, (N))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, sign)
+
+template<
+      typename T
+    , T n1
+    >
+struct sign_c
+    : sign<integral_c<T,n1> >
+{
+};
+
+#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2)
+namespace aux {
+template< typename T, T n > struct sign_wknd
+{
+    BOOST_STATIC_CONSTANT(T, value = (n == 0 ? 0 : (n < 0 ? -1 : 1)));
+    typedef integral_c<T,value> type;
+};
+}
+#endif
+
+template<>
+struct sign_impl<integral_c_tag>
+{
+#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2)
+    template< typename N > struct apply
+        : aux::sign_wknd< typename N::value_type, N::value >
+#else
+    template< typename N > struct apply
+        : integral_c< typename N::value_type, (N::value == 0 ? 0 : (N::value < 0 ? -1 : 1)) >
+#endif
+    {
+    };
+};
+
+}}
+
+#endif // BOOST_MPL_SIGN_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/ratio/detail/overflow_helpers.hpp b/vendor/pdalboost/boost/ratio/detail/overflow_helpers.hpp
new file mode 100644
index 0000000..aec66ce
--- /dev/null
+++ b/vendor/pdalboost/boost/ratio/detail/overflow_helpers.hpp
@@ -0,0 +1,367 @@
+//  ratio.hpp  ---------------------------------------------------------------//
+
+//  Copyright 2008 Howard Hinnant
+//  Copyright 2008 Beman Dawes
+//  Copyright 2009 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+/*
+
+This code was derived by Beman Dawes from Howard Hinnant's time2_demo prototype.
+Many thanks to Howard for making his code available under the Boost license.
+The original code was modified to conform to Boost conventions and to section
+20.4 Compile-time rational arithmetic [ratio], of the C++ committee working
+paper N2798.
+See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2798.pdf.
+
+time2_demo contained this comment:
+
+    Much thanks to Andrei Alexandrescu,
+                   Walter Brown,
+                   Peter Dimov,
+                   Jeff Garland,
+                   Terry Golubiewski,
+                   Daniel Krugler,
+                   Anthony Williams.
+*/
+
+// The way overflow is managed for ratio_less is taken from llvm/libcxx/include/ratio
+
+#ifndef BOOST_RATIO_DETAIL_RATIO_OPERATIONS_HPP
+#define BOOST_RATIO_DETAIL_RATIO_OPERATIONS_HPP
+
+#include <boost/ratio/config.hpp>
+#include <boost/ratio/detail/mpl/abs.hpp>
+#include <boost/ratio/detail/mpl/sign.hpp>
+#include <cstdlib>
+#include <climits>
+#include <limits>
+#include <boost/cstdint.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/core/enable_if.hpp>
+#include <boost/integer_traits.hpp>
+
+//
+// We simply cannot include this header on gcc without getting copious warnings of the kind:
+//
+// boost/integer.hpp:77:30: warning: use of C99 long long integer constant
+//
+// And yet there is no other reasonable implementation, so we declare this a system header
+// to suppress these warnings.
+//
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+#pragma GCC system_header
+#endif
+
+namespace pdalboost
+{
+
+//----------------------------------------------------------------------------//
+//                                 helpers                                    //
+//----------------------------------------------------------------------------//
+
+namespace ratio_detail
+{
+
+  template <pdalboost::intmax_t X, pdalboost::intmax_t Y, pdalboost::intmax_t = mpl::sign_c<pdalboost::intmax_t, Y>::value>
+  class br_add;
+
+  template <pdalboost::intmax_t X, pdalboost::intmax_t Y>
+  class br_add<X, Y, 1>
+  {
+      static const pdalboost::intmax_t min = pdalboost::integer_traits<pdalboost::intmax_t>::const_min;
+      static const pdalboost::intmax_t max = pdalboost::integer_traits<pdalboost::intmax_t>::const_max;
+
+      BOOST_RATIO_STATIC_ASSERT(X <= max - Y , BOOST_RATIO_OVERFLOW_IN_ADD, ());
+  public:
+      static const pdalboost::intmax_t value = X + Y;
+  };
+
+  template <pdalboost::intmax_t X, pdalboost::intmax_t Y>
+  class br_add<X, Y, 0>
+  {
+  public:
+      static const pdalboost::intmax_t value = X;
+  };
+
+  template <pdalboost::intmax_t X, pdalboost::intmax_t Y>
+  class br_add<X, Y, -1>
+  {
+      static const pdalboost::intmax_t min = pdalboost::integer_traits<pdalboost::intmax_t>::const_min;
+      static const pdalboost::intmax_t max = pdalboost::integer_traits<pdalboost::intmax_t>::const_max;
+
+      BOOST_RATIO_STATIC_ASSERT(min - Y <= X, BOOST_RATIO_OVERFLOW_IN_ADD, ());
+  public:
+      static const pdalboost::intmax_t value = X + Y;
+  };
+
+  template <pdalboost::intmax_t X, pdalboost::intmax_t Y, pdalboost::intmax_t = mpl::sign_c<pdalboost::intmax_t, Y>::value>
+  class br_sub;
+
+  template <pdalboost::intmax_t X, pdalboost::intmax_t Y>
+  class br_sub<X, Y, 1>
+  {
+      static const pdalboost::intmax_t min = pdalboost::integer_traits<pdalboost::intmax_t>::const_min;
+      static const pdalboost::intmax_t max = pdalboost::integer_traits<pdalboost::intmax_t>::const_max;
+
+      BOOST_RATIO_STATIC_ASSERT(min + Y <= X, BOOST_RATIO_OVERFLOW_IN_SUB, ());
+  public:
+      static const pdalboost::intmax_t value = X - Y;
+  };
+
+  template <pdalboost::intmax_t X, pdalboost::intmax_t Y>
+  class br_sub<X, Y, 0>
+  {
+  public:
+      static const pdalboost::intmax_t value = X;
+  };
+
+  template <pdalboost::intmax_t X, pdalboost::intmax_t Y>
+  class br_sub<X, Y, -1>
+  {
+      static const pdalboost::intmax_t min = pdalboost::integer_traits<pdalboost::intmax_t>::const_min;
+      static const pdalboost::intmax_t max = pdalboost::integer_traits<pdalboost::intmax_t>::const_max;
+
+      BOOST_RATIO_STATIC_ASSERT(X <= max + Y, BOOST_RATIO_OVERFLOW_IN_SUB, ());
+  public:
+      static const pdalboost::intmax_t value = X - Y;
+  };
+
+  template <pdalboost::intmax_t X, pdalboost::intmax_t Y>
+  class br_mul
+  {
+      static const pdalboost::intmax_t nan =
+          pdalboost::intmax_t(BOOST_RATIO_UINTMAX_C(1) << (sizeof(pdalboost::intmax_t) * CHAR_BIT - 1));
+      static const pdalboost::intmax_t min = pdalboost::integer_traits<pdalboost::intmax_t>::const_min;
+      static const pdalboost::intmax_t max = pdalboost::integer_traits<pdalboost::intmax_t>::const_max;
+
+      static const pdalboost::intmax_t a_x = mpl::abs_c<pdalboost::intmax_t, X>::value;
+      static const pdalboost::intmax_t a_y = mpl::abs_c<pdalboost::intmax_t, Y>::value;
+
+      BOOST_RATIO_STATIC_ASSERT(X != nan, BOOST_RATIO_OVERFLOW_IN_MUL, ());
+      BOOST_RATIO_STATIC_ASSERT(Y != nan, BOOST_RATIO_OVERFLOW_IN_MUL, ());
+      BOOST_RATIO_STATIC_ASSERT(a_x <= max / a_y, BOOST_RATIO_OVERFLOW_IN_MUL, ());
+  public:
+      static const pdalboost::intmax_t value = X * Y;
+  };
+
+  template <pdalboost::intmax_t Y>
+  class br_mul<0, Y>
+  {
+  public:
+      static const pdalboost::intmax_t value = 0;
+  };
+
+  template <pdalboost::intmax_t X>
+  class br_mul<X, 0>
+  {
+  public:
+      static const pdalboost::intmax_t value = 0;
+  };
+
+  template <>
+  class br_mul<0, 0>
+  {
+  public:
+      static const pdalboost::intmax_t value = 0;
+  };
+
+  // Not actually used but left here in case needed in future maintenance
+  template <pdalboost::intmax_t X, pdalboost::intmax_t Y>
+  class br_div
+  {
+      static const pdalboost::intmax_t nan = pdalboost::intmax_t(BOOST_RATIO_UINTMAX_C(1) << (sizeof(pdalboost::intmax_t) * CHAR_BIT - 1));
+      static const pdalboost::intmax_t min = pdalboost::integer_traits<pdalboost::intmax_t>::const_min;
+      static const pdalboost::intmax_t max = pdalboost::integer_traits<pdalboost::intmax_t>::const_max;
+
+      BOOST_RATIO_STATIC_ASSERT(X != nan, BOOST_RATIO_OVERFLOW_IN_DIV, ());
+      BOOST_RATIO_STATIC_ASSERT(Y != nan, BOOST_RATIO_OVERFLOW_IN_DIV, ());
+      BOOST_RATIO_STATIC_ASSERT(Y != 0, BOOST_RATIO_DIVIDE_BY_0, ());
+  public:
+      static const pdalboost::intmax_t value = X / Y;
+  };
+
+  // ratio arithmetic
+  template <class R1, class R2> struct ratio_add;
+  template <class R1, class R2> struct ratio_subtract;
+  template <class R1, class R2> struct ratio_multiply;
+  template <class R1, class R2> struct ratio_divide;
+
+  template <class R1, class R2>
+  struct ratio_add
+  {
+      //The nested typedef type shall be a synonym for ratio<T1, T2>::type where T1 has the value R1::num *
+      //R2::den + R2::num * R1::den and T2 has the value R1::den * R2::den.
+      // As the preceding doesn't works because of overflow on pdalboost::intmax_t we need something more elaborated.
+  private:
+      static const pdalboost::intmax_t gcd_n1_n2 = mpl::gcd_c<pdalboost::intmax_t, R1::num, R2::num>::value;
+      static const pdalboost::intmax_t gcd_d1_d2 = mpl::gcd_c<pdalboost::intmax_t, R1::den, R2::den>::value;
+  public:
+      // No need to normalize as ratio_multiply is already normalized
+      typedef typename ratio_multiply
+         <
+             ratio<gcd_n1_n2, R1::den / gcd_d1_d2>,
+             ratio
+             <
+                 pdalboost::ratio_detail::br_add
+                 <
+                     pdalboost::ratio_detail::br_mul<R1::num / gcd_n1_n2, R2::den / gcd_d1_d2>::value,
+                     pdalboost::ratio_detail::br_mul<R2::num / gcd_n1_n2, R1::den / gcd_d1_d2>::value
+                 >::value,
+                 R2::den
+             >
+         >::type type;
+  };
+  template <class R, pdalboost::intmax_t D>
+  struct ratio_add<R, ratio<0,D> >
+  {
+    typedef R type;
+  };
+
+  template <class R1, class R2>
+  struct ratio_subtract
+  {
+      //The nested typedef type shall be a synonym for ratio<T1, T2>::type where T1 has the value
+      // R1::num *R2::den - R2::num * R1::den and T2 has the value R1::den * R2::den.
+      // As the preceding doesn't works because of overflow on pdalboost::intmax_t we need something more elaborated.
+  private:
+      static const pdalboost::intmax_t gcd_n1_n2 = mpl::gcd_c<pdalboost::intmax_t, R1::num, R2::num>::value;
+      static const pdalboost::intmax_t gcd_d1_d2 = mpl::gcd_c<pdalboost::intmax_t, R1::den, R2::den>::value;
+  public:
+      // No need to normalize as ratio_multiply is already normalized
+      typedef typename ratio_multiply
+         <
+             ratio<gcd_n1_n2, R1::den / gcd_d1_d2>,
+             ratio
+             <
+                 pdalboost::ratio_detail::br_sub
+                 <
+                     pdalboost::ratio_detail::br_mul<R1::num / gcd_n1_n2, R2::den / gcd_d1_d2>::value,
+                     pdalboost::ratio_detail::br_mul<R2::num / gcd_n1_n2, R1::den / gcd_d1_d2>::value
+                 >::value,
+                 R2::den
+             >
+         >::type type;
+  };
+
+  template <class R, pdalboost::intmax_t D>
+  struct ratio_subtract<R, ratio<0,D> >
+  {
+    typedef R type;
+  };
+
+  template <class R1, class R2>
+  struct ratio_multiply
+  {
+      // The nested typedef type  shall be a synonym for ratio<R1::num * R2::den - R2::num * R1::den, R1::den * R2::den>::type.
+      // As the preceding doesn't works because of overflow on pdalboost::intmax_t we need something more elaborated.
+  private:
+     static const pdalboost::intmax_t gcd_n1_d2 = mpl::gcd_c<pdalboost::intmax_t, R1::num, R2::den>::value;
+     static const pdalboost::intmax_t gcd_d1_n2 = mpl::gcd_c<pdalboost::intmax_t, R1::den, R2::num>::value;
+  public:
+      typedef typename ratio
+         <
+             pdalboost::ratio_detail::br_mul<R1::num / gcd_n1_d2, R2::num / gcd_d1_n2>::value,
+             pdalboost::ratio_detail::br_mul<R2::den / gcd_n1_d2, R1::den / gcd_d1_n2>::value
+         >::type type;
+  };
+
+  template <class R1, class R2>
+  struct ratio_divide
+  {
+      // The nested typedef type  shall be a synonym for ratio<R1::num * R2::den, R2::num * R1::den>::type.
+      // As the preceding doesn't works because of overflow on pdalboost::intmax_t we need something more elaborated.
+  private:
+      static const pdalboost::intmax_t gcd_n1_n2 = mpl::gcd_c<pdalboost::intmax_t, R1::num, R2::num>::value;
+      static const pdalboost::intmax_t gcd_d1_d2 = mpl::gcd_c<pdalboost::intmax_t, R1::den, R2::den>::value;
+  public:
+      typedef typename ratio
+         <
+             pdalboost::ratio_detail::br_mul<R1::num / gcd_n1_n2, R2::den / gcd_d1_d2>::value,
+             pdalboost::ratio_detail::br_mul<R2::num / gcd_n1_n2, R1::den / gcd_d1_d2>::value
+         >::type type;
+  };
+  template <class R1, class R2>
+  struct is_evenly_divisible_by
+  {
+  private:
+      static const pdalboost::intmax_t gcd_n1_n2 = mpl::gcd_c<pdalboost::intmax_t, R1::num, R2::num>::value;
+      static const pdalboost::intmax_t gcd_d1_d2 = mpl::gcd_c<pdalboost::intmax_t, R1::den, R2::den>::value;
+  public:
+      typedef integral_constant<bool,
+             ((R2::num / gcd_n1_n2 ==1) && (R1::den / gcd_d1_d2)==1)
+      > type;
+  };
+
+  template <class T>
+  struct is_ratio : public pdalboost::false_type
+  {};
+  template <pdalboost::intmax_t N, pdalboost::intmax_t D>
+  struct is_ratio<ratio<N, D> > : public pdalboost::true_type
+  {};
+
+  template <class R1, class R2,
+            pdalboost::intmax_t Q1 = R1::num / R1::den, pdalboost::intmax_t M1 = R1::num % R1::den,
+            pdalboost::intmax_t Q2 = R2::num / R2::den, pdalboost::intmax_t M2 = R2::num % R2::den>
+  struct ratio_less1
+  {
+    static const bool value = Q1 < Q2;
+  };
+
+  template <class R1, class R2, pdalboost::intmax_t Q>
+  struct ratio_less1<R1, R2, Q, 0, Q, 0>
+  {
+    static const bool value = false;
+  };
+
+  template <class R1, class R2, pdalboost::intmax_t Q, pdalboost::intmax_t M2>
+  struct ratio_less1<R1, R2, Q, 0, Q, M2>
+  {
+    static const bool value = true;
+  };
+
+  template <class R1, class R2, pdalboost::intmax_t Q, pdalboost::intmax_t M1>
+  struct ratio_less1<R1, R2, Q, M1, Q, 0>
+  {
+    static const bool value = false;
+  };
+
+  template <class R1, class R2, pdalboost::intmax_t Q, pdalboost::intmax_t M1, pdalboost::intmax_t M2>
+  struct ratio_less1<R1, R2, Q, M1, Q, M2>
+  {
+    static const bool value = ratio_less1<ratio<R2::den, M2>, ratio<R1::den, M1>
+                                            >::value;
+  };
+
+  template <
+      class R1,
+      class R2,
+      pdalboost::intmax_t S1 = mpl::sign_c<pdalboost::intmax_t, R1::num>::value,
+    pdalboost::intmax_t S2 = mpl::sign_c<pdalboost::intmax_t, R2::num>::value
+>
+  struct ratio_less
+  {
+      static const bool value = S1 < S2;
+  };
+
+  template <class R1, class R2>
+  struct ratio_less<R1, R2, 1LL, 1LL>
+  {
+      static const bool value = ratio_less1<R1, R2>::value;
+  };
+
+  template <class R1, class R2>
+  struct ratio_less<R1, R2, -1LL, -1LL>
+  {
+      static const bool value = ratio_less1<ratio<-R2::num, R2::den>,
+                                            ratio<-R1::num, R1::den> >::value;
+  };
+
+
+}  // namespace ratio_detail
+
+}  // namespace pdalboost
+
+#endif  // BOOST_RATIO_HPP
diff --git a/vendor/pdalboost/boost/ratio/mpl/rational_c_tag.hpp b/vendor/pdalboost/boost/ratio/mpl/rational_c_tag.hpp
new file mode 100644
index 0000000..92d54b2
--- /dev/null
+++ b/vendor/pdalboost/boost/ratio/mpl/rational_c_tag.hpp
@@ -0,0 +1,25 @@
+//  abs.hpp
+//
+//  (C) Copyright 2011 Vicente J. Botet Escriba
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+
+#ifndef BOOST_RATIO_MPL_RATIONAL_C_TAG_HPP
+#define BOOST_RATIO_MPL_RATIONAL_C_TAG_HPP
+
+#ifdef BOOST_RATIO_EXTENSIONS
+
+#include <boost/mpl/int.hpp>
+
+namespace pdalboost {
+namespace mpl {
+
+struct rational_c_tag : int_<10> {};
+
+}
+}
+
+#endif // BOOST_RATIO_EXTENSIONS
+#endif  // BOOST_RATIO_MPL_RATIONAL_C_TAG_HPP
diff --git a/vendor/pdalboost/boost/ratio/ratio.hpp b/vendor/pdalboost/boost/ratio/ratio.hpp
new file mode 100644
index 0000000..2d3d218
--- /dev/null
+++ b/vendor/pdalboost/boost/ratio/ratio.hpp
@@ -0,0 +1,293 @@
+//  ratio.hpp  ---------------------------------------------------------------//
+
+//  Copyright 2008 Howard Hinnant
+//  Copyright 2008 Beman Dawes
+//  Copyright 2009 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+/*
+
+This code was derived by Beman Dawes from Howard Hinnant's time2_demo prototype.
+Many thanks to Howard for making his code available under the Boost license.
+The original code was modified to conform to Boost conventions and to section
+20.4 Compile-time rational arithmetic [ratio], of the C++ committee working
+paper N2798.
+See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2798.pdf.
+
+time2_demo contained this comment:
+
+    Much thanks to Andrei Alexandrescu,
+                   Walter Brown,
+                   Peter Dimov,
+                   Jeff Garland,
+                   Terry Golubiewski,
+                   Daniel Krugler,
+                   Anthony Williams.
+*/
+
+// The way overflow is managed for ratio_less is taken from llvm/libcxx/include/ratio
+
+#ifndef BOOST_RATIO_RATIO_HPP
+#define BOOST_RATIO_RATIO_HPP
+
+#include <boost/ratio/config.hpp>
+#include <boost/ratio/detail/mpl/abs.hpp>
+#include <boost/ratio/detail/mpl/sign.hpp>
+#include <boost/ratio/detail/mpl/gcd.hpp>
+#include <boost/ratio/detail/mpl/lcm.hpp>
+#include <cstdlib>
+#include <climits>
+#include <limits>
+#include <boost/cstdint.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/core/enable_if.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/ratio/ratio_fwd.hpp>
+#include <boost/ratio/detail/overflow_helpers.hpp>
+#ifdef BOOST_RATIO_EXTENSIONS
+#include <boost/rational.hpp>
+#include <boost/ratio/mpl/rational_c_tag.hpp>
+#endif
+
+//
+// We simply cannot include this header on gcc without getting copious warnings of the kind:
+//
+// boost/integer.hpp:77:30: warning: use of C99 long long integer constant
+//
+// And yet there is no other reasonable implementation, so we declare this a system header
+// to suppress these warnings.
+//
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+#pragma GCC system_header
+#endif
+
+namespace pdalboost
+{
+
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//                20.6.1 Class template ratio [ratio.ratio]                   //
+//                                                                            //
+//----------------------------------------------------------------------------//
+
+template <pdalboost::intmax_t N, pdalboost::intmax_t D>
+class ratio
+{
+    static const pdalboost::intmax_t ABS_N = mpl::abs_c<pdalboost::intmax_t, N>::value;
+    static const pdalboost::intmax_t ABS_D = mpl::abs_c<pdalboost::intmax_t, D>::value;
+    BOOST_RATIO_STATIC_ASSERT(ABS_N >= 0, BOOST_RATIO_NUMERATOR_IS_OUT_OF_RANGE, ());
+    BOOST_RATIO_STATIC_ASSERT(ABS_D > 0, BOOST_RATIO_DENOMINATOR_IS_OUT_OF_RANGE, ());
+    BOOST_RATIO_STATIC_ASSERT(D != 0, BOOST_RATIO_DIVIDE_BY_0 , ());
+    static const pdalboost::intmax_t SIGN_N = mpl::sign_c<pdalboost::intmax_t,N>::value
+      * mpl::sign_c<pdalboost::intmax_t,D>::value;
+    static const pdalboost::intmax_t GCD = mpl::gcd_c<pdalboost::intmax_t, ABS_N, ABS_D>::value;
+public:
+    BOOST_STATIC_CONSTEXPR pdalboost::intmax_t num = SIGN_N * ABS_N / GCD;
+    BOOST_STATIC_CONSTEXPR pdalboost::intmax_t den = ABS_D / GCD;
+
+#ifdef BOOST_RATIO_EXTENSIONS
+    typedef mpl::rational_c_tag tag;
+    typedef pdalboost::rational<pdalboost::intmax_t> value_type;
+    typedef pdalboost::intmax_t num_type;
+    typedef pdalboost::intmax_t den_type;
+    ratio()
+    {}
+    template <pdalboost::intmax_t _N2, pdalboost::intmax_t _D2>
+    ratio(const ratio<_N2, _D2>&,
+        typename enable_if_c
+            <
+                (ratio<_N2, _D2>::num == num &&
+                ratio<_N2, _D2>::den == den)
+            >::type* = 0)
+    {}
+
+    template <pdalboost::intmax_t _N2, pdalboost::intmax_t _D2>
+        typename enable_if_c
+        <
+            (ratio<_N2, _D2>::num == num &&
+            ratio<_N2, _D2>::den == den),
+            ratio&
+        >::type
+    operator=(const ratio<_N2, _D2>&) {return *this;}
+
+    static value_type value() {return value_type(num,den);}
+    value_type operator()() const {return value();}
+#endif
+    typedef ratio<num, den> type;
+};
+
+#if defined(BOOST_NO_CXX11_CONSTEXPR)
+template <pdalboost::intmax_t N, pdalboost::intmax_t D>
+const    pdalboost::intmax_t ratio<N, D>::num;
+template <pdalboost::intmax_t N, pdalboost::intmax_t D>
+const    pdalboost::intmax_t ratio<N, D>::den;
+#endif
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//                20.6.2 Arithmetic on ratio types [ratio.arithmetic]         //
+//                                                                            //
+//----------------------------------------------------------------------------//
+
+template <class R1, class R2>
+struct ratio_add
+: pdalboost::ratio_detail::ratio_add<R1, R2>::type
+{
+};
+
+template <class R1, class R2>
+struct ratio_subtract
+: pdalboost::ratio_detail::ratio_subtract<R1, R2>::type
+{
+};
+
+template <class R1, class R2>
+struct ratio_multiply
+: pdalboost::ratio_detail::ratio_multiply<R1, R2>::type
+{
+};
+
+template <class R1, class R2>
+struct ratio_divide
+: pdalboost::ratio_detail::ratio_divide<R1, R2>::type
+{
+};
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//                20.6.3 Comparision of ratio types [ratio.comparison]        //
+//                                                                            //
+//----------------------------------------------------------------------------//
+
+// ratio_equal
+
+template <class R1, class R2>
+struct ratio_equal
+    : public pdalboost::integral_constant<bool,
+                               (R1::num == R2::num && R1::den == R2::den)>
+{};
+
+template <class R1, class R2>
+struct ratio_not_equal
+    : public pdalboost::integral_constant<bool, !ratio_equal<R1, R2>::value>
+{};
+
+// ratio_less
+
+template <class R1, class R2>
+struct ratio_less
+    : pdalboost::integral_constant<bool, pdalboost::ratio_detail::ratio_less<R1, R2>::value>
+{};
+
+template <class R1, class R2>
+struct ratio_less_equal
+    : pdalboost::integral_constant<bool, !ratio_less<R2, R1>::value>
+{};
+
+template <class R1, class R2>
+struct ratio_greater
+    : pdalboost::integral_constant<bool, ratio_less<R2, R1>::value>
+{};
+
+template <class R1, class R2>
+struct ratio_greater_equal
+    : pdalboost::integral_constant<bool, !ratio_less<R1, R2>::value>
+{};
+
+template <class R1, class R2>
+struct ratio_gcd :
+    ratio<mpl::gcd_c<pdalboost::intmax_t, R1::num, R2::num>::value,
+        mpl::lcm_c<pdalboost::intmax_t, R1::den, R2::den>::value>::type
+{
+};
+
+    //----------------------------------------------------------------------------//
+    //                                                                            //
+    //                More arithmetic on ratio types [ratio.arithmetic]           //
+    //                                                                            //
+    //----------------------------------------------------------------------------//
+
+#ifdef BOOST_RATIO_EXTENSIONS
+template <class R>
+struct ratio_negate
+    : ratio<-R::num, R::den>::type
+{
+};
+template <class R>
+struct ratio_abs
+    : ratio<mpl::abs_c<pdalboost::intmax_t, R::num>::value, R::den>::type
+{
+};
+template <class R>
+struct ratio_sign
+    : mpl::sign_c<pdalboost::intmax_t, R::num>
+{
+};
+
+template <class R>
+struct ratio_inverse
+    : ratio<R::den, R::num>::type
+{
+};
+
+
+template <class R1, class R2>
+struct ratio_lcm :
+    ratio<mpl::lcm_c<pdalboost::intmax_t, R1::num, R2::num>::value,
+        mpl::gcd_c<pdalboost::intmax_t, R1::den, R2::den>::value>::type
+{
+};
+
+template <class R1, class R2>
+struct ratio_modulo :
+    ratio<(R1::num * R2::den) % (R2::num * R1::den), R1::den * R2::den>::type
+{
+};
+
+namespace detail {
+  template <class R1, class R2, bool r1ltr2>
+  struct ratio_min : R1 {};
+  template <class R1, class R2>
+  struct ratio_min<R1,R2,false> : R2 {};
+
+  template <class R1, class R2, bool r1ltr2>
+  struct ratio_max : R2 {};
+  template <class R1, class R2>
+  struct ratio_max<R1,R2,false> : R1 {};
+}
+
+template <class R1, class R2>
+struct ratio_min : detail::ratio_min<R1, R2, ratio_less<R1,R2>::value>::type
+{
+};
+
+template <class R1, class R2>
+struct ratio_max : detail::ratio_max<R1, R2, ratio_less<R1,R2>::value>::type
+{
+};
+
+template<typename R, int p>
+struct ratio_power :
+  ratio_multiply<
+    typename ratio_power<R, p%2>::type,
+    typename ratio_power<typename ratio_multiply<R, R>::type, p/2>::type
+  >::type
+{};
+
+template<typename R>
+struct ratio_power<R, 0> : ratio<1>::type {};
+
+template<typename R>
+struct ratio_power<R, 1> : R {};
+
+template<typename R>
+struct ratio_power<R, -1> : ratio_divide<ratio<1>, R>::type {};
+
+#endif
+}  // namespace pdalboost
+
+
+#endif  // BOOST_RATIO_RATIO_HPP
diff --git a/vendor/pdalboost/boost/ratio/ratio_fwd.hpp b/vendor/pdalboost/boost/ratio/ratio_fwd.hpp
new file mode 100644
index 0000000..b21639d
--- /dev/null
+++ b/vendor/pdalboost/boost/ratio/ratio_fwd.hpp
@@ -0,0 +1,109 @@
+//  ratio_fwd.hpp  ---------------------------------------------------------------//
+
+//  Copyright 2008 Howard Hinnant
+//  Copyright 2008 Beman Dawes
+//  Copyright 2009 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+/*
+
+This code was derived by Beman Dawes from Howard Hinnant's time2_demo prototype.
+Many thanks to Howard for making his code available under the Boost license.
+The original code was modified to conform to Boost conventions and to section
+20.4 Compile-time rational arithmetic [ratio], of the C++ committee working
+paper N2798.
+See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2798.pdf.
+
+time2_demo contained this comment:
+
+    Much thanks to Andrei Alexandrescu,
+                   Walter Brown,
+                   Peter Dimov,
+                   Jeff Garland,
+                   Terry Golubiewski,
+                   Daniel Krugler,
+                   Anthony Williams.
+*/
+
+// The way overflow is managed for ratio_less is taken from llvm/libcxx/include/ratio
+
+#ifndef BOOST_RATIO_RATIO_FWD_HPP
+#define BOOST_RATIO_RATIO_FWD_HPP
+
+#include <boost/ratio/config.hpp>
+
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+#pragma GCC system_header
+#endif
+
+namespace pdalboost
+{
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//              20.6 Compile-time rational arithmetic [ratio]                 //
+//                                                                            //
+//----------------------------------------------------------------------------//
+
+// ratio
+template <pdalboost::intmax_t N, pdalboost::intmax_t D = 1> class ratio;
+
+// ratio arithmetic
+template <class R1, class R2> struct ratio_add;
+template <class R1, class R2> struct ratio_subtract;
+template <class R1, class R2> struct ratio_multiply;
+template <class R1, class R2> struct ratio_divide;
+#ifdef BOOST_RATIO_EXTENSIONS
+template <class R1, class R2> struct ratio_gcd;
+template <class R1, class R2> struct ratio_lcm;
+template <class R> struct ratio_negate;
+template <class R> struct ratio_abs;
+template <class R> struct ratio_sign;
+template <class R, int P> struct ratio_power;
+#endif
+
+// ratio comparison
+template <class R1, class R2> struct ratio_equal;
+template <class R1, class R2> struct ratio_not_equal;
+template <class R1, class R2> struct ratio_less;
+template <class R1, class R2> struct ratio_less_equal;
+template <class R1, class R2> struct ratio_greater;
+template <class R1, class R2> struct ratio_greater_equal;
+
+// convenience SI typedefs
+typedef ratio<BOOST_RATIO_INTMAX_C(1), BOOST_RATIO_INTMAX_C(1000000000000000000)> atto;
+typedef ratio<BOOST_RATIO_INTMAX_C(1),    BOOST_RATIO_INTMAX_C(1000000000000000)> femto;
+typedef ratio<BOOST_RATIO_INTMAX_C(1),       BOOST_RATIO_INTMAX_C(1000000000000)> pico;
+typedef ratio<BOOST_RATIO_INTMAX_C(1),          BOOST_RATIO_INTMAX_C(1000000000)> nano;
+typedef ratio<BOOST_RATIO_INTMAX_C(1),             BOOST_RATIO_INTMAX_C(1000000)> micro;
+typedef ratio<BOOST_RATIO_INTMAX_C(1),                BOOST_RATIO_INTMAX_C(1000)> milli;
+typedef ratio<BOOST_RATIO_INTMAX_C(1),                 BOOST_RATIO_INTMAX_C(100)> centi;
+typedef ratio<BOOST_RATIO_INTMAX_C(1),                  BOOST_RATIO_INTMAX_C(10)> deci;
+typedef ratio<                 BOOST_RATIO_INTMAX_C(10), BOOST_RATIO_INTMAX_C(1)> deca;
+typedef ratio<                BOOST_RATIO_INTMAX_C(100), BOOST_RATIO_INTMAX_C(1)> hecto;
+typedef ratio<               BOOST_RATIO_INTMAX_C(1000), BOOST_RATIO_INTMAX_C(1)> kilo;
+typedef ratio<            BOOST_RATIO_INTMAX_C(1000000), BOOST_RATIO_INTMAX_C(1)> mega;
+typedef ratio<         BOOST_RATIO_INTMAX_C(1000000000), BOOST_RATIO_INTMAX_C(1)> giga;
+typedef ratio<      BOOST_RATIO_INTMAX_C(1000000000000), BOOST_RATIO_INTMAX_C(1)> tera;
+typedef ratio<   BOOST_RATIO_INTMAX_C(1000000000000000), BOOST_RATIO_INTMAX_C(1)> peta;
+typedef ratio<BOOST_RATIO_INTMAX_C(1000000000000000000), BOOST_RATIO_INTMAX_C(1)> exa;
+
+#ifdef BOOST_RATIO_EXTENSIONS
+
+#define BOOST_RATIO_1024 BOOST_RATIO_INTMAX_C(1024)
+
+// convenience IEC typedefs
+typedef ratio<                                                                                     BOOST_RATIO_1024> kibi;
+typedef ratio<                                                                    BOOST_RATIO_1024*BOOST_RATIO_1024> mebi;
+typedef ratio<                                                   BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> gibi;
+typedef ratio<                                  BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> tebi;
+typedef ratio<                 BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> pebi;
+typedef ratio<BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> exbi;
+
+#endif
+}  // namespace pdalboost
+
+
+#endif  // BOOST_RATIO_HPP
diff --git a/vendor/pdalboost/boost/rational.hpp b/vendor/pdalboost/boost/rational.hpp
new file mode 100644
index 0000000..f818f41
--- /dev/null
+++ b/vendor/pdalboost/boost/rational.hpp
@@ -0,0 +1,709 @@
+//  Boost rational.hpp header file  ------------------------------------------//
+
+//  (C) Copyright Paul Moore 1999. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or
+//  implied warranty, and with no claim as to its suitability for any purpose.
+
+// boostinspect:nolicense (don't complain about the lack of a Boost license)
+// (Paul Moore hasn't been in contact for years, so there's no way to change the
+// license.)
+
+//  See http://www.boost.org/libs/rational for documentation.
+
+//  Credits:
+//  Thanks to the boost mailing list in general for useful comments.
+//  Particular contributions included:
+//    Andrew D Jewell, for reminding me to take care to avoid overflow
+//    Ed Brey, for many comments, including picking up on some dreadful typos
+//    Stephen Silver contributed the test suite and comments on user-defined
+//    IntType
+//    Nickolay Mladenov, for the implementation of operator+=
+
+//  Revision History
+//  02 Sep 13  Remove unneeded forward declarations; tweak private helper
+//             function (Daryle Walker)
+//  30 Aug 13  Improve exception safety of "assign"; start modernizing I/O code
+//             (Daryle Walker)
+//  27 Aug 13  Add cross-version constructor template, plus some private helper
+//             functions; add constructor to exception class to take custom
+//             messages (Daryle Walker)
+//  25 Aug 13  Add constexpr qualification wherever possible (Daryle Walker)
+//  05 May 12  Reduced use of implicit gcd (Mario Lang)
+//  05 Nov 06  Change rational_cast to not depend on division between different
+//             types (Daryle Walker)
+//  04 Nov 06  Off-load GCD and LCM to Boost.Math; add some invariant checks;
+//             add std::numeric_limits<> requirement to help GCD (Daryle Walker)
+//  31 Oct 06  Recoded both operator< to use round-to-negative-infinity
+//             divisions; the rational-value version now uses continued fraction
+//             expansion to avoid overflows, for bug #798357 (Daryle Walker)
+//  20 Oct 06  Fix operator bool_type for CW 8.3 (Joaquín M López Muñoz)
+//  18 Oct 06  Use EXPLICIT_TEMPLATE_TYPE helper macros from Boost.Config
+//             (Joaquín M López Muñoz)
+//  27 Dec 05  Add Boolean conversion operator (Daryle Walker)
+//  28 Sep 02  Use _left versions of operators from operators.hpp
+//  05 Jul 01  Recode gcd(), avoiding std::swap (Helmut Zeisel)
+//  03 Mar 01  Workarounds for Intel C++ 5.0 (David Abrahams)
+//  05 Feb 01  Update operator>> to tighten up input syntax
+//  05 Feb 01  Final tidy up of gcd code prior to the new release
+//  27 Jan 01  Recode abs() without relying on abs(IntType)
+//  21 Jan 01  Include Nickolay Mladenov's operator+= algorithm,
+//             tidy up a number of areas, use newer features of operators.hpp
+//             (reduces space overhead to zero), add operator!,
+//             introduce explicit mixed-mode arithmetic operations
+//  12 Jan 01  Include fixes to handle a user-defined IntType better
+//  19 Nov 00  Throw on divide by zero in operator /= (John (EBo) David)
+//  23 Jun 00  Incorporate changes from Mark Rodgers for Borland C++
+//  22 Jun 00  Change _MSC_VER to BOOST_MSVC so other compilers are not
+//             affected (Beman Dawes)
+//   6 Mar 00  Fix operator-= normalization, #include <string> (Jens Maurer)
+//  14 Dec 99  Modifications based on comments from the boost list
+//  09 Dec 99  Initial Version (Paul Moore)
+
+#ifndef BOOST_RATIONAL_HPP
+#define BOOST_RATIONAL_HPP
+
+#include <boost/config.hpp>      // for BOOST_NO_STDC_NAMESPACE, BOOST_MSVC, etc
+#ifndef BOOST_NO_IOSTREAM
+#include <iomanip>               // for std::setw
+#include <ios>                   // for std::noskipws, streamsize
+#include <istream>               // for std::istream
+#include <ostream>               // for std::ostream
+#include <sstream>               // for std::ostringstream
+#endif
+#include <cstddef>               // for NULL
+#include <stdexcept>             // for std::domain_error
+#include <string>                // for std::string implicit constructor
+#include <boost/operators.hpp>   // for pdalboost::addable etc
+#include <cstdlib>               // for std::abs
+#include <boost/call_traits.hpp> // for pdalboost::call_traits
+#include <boost/detail/workaround.hpp> // for BOOST_WORKAROUND
+#include <boost/assert.hpp>      // for BOOST_ASSERT
+#include <boost/integer/common_factor_rt.hpp> // for pdalboost::integer::gcd, lcm
+#include <limits>                // for std::numeric_limits
+#include <boost/static_assert.hpp>  // for BOOST_STATIC_ASSERT
+#include <boost/throw_exception.hpp>
+
+// Control whether depreciated GCD and LCM functions are included (default: yes)
+#ifndef BOOST_CONTROL_RATIONAL_HAS_GCD
+#define BOOST_CONTROL_RATIONAL_HAS_GCD  1
+#endif
+
+namespace pdalboost {
+
+#if BOOST_CONTROL_RATIONAL_HAS_GCD
+template <typename IntType>
+IntType gcd(IntType n, IntType m)
+{
+    // Defer to the version in Boost.Math
+    return integer::gcd( n, m );
+}
+
+template <typename IntType>
+IntType lcm(IntType n, IntType m)
+{
+    // Defer to the version in Boost.Math
+    return integer::lcm( n, m );
+}
+#endif  // BOOST_CONTROL_RATIONAL_HAS_GCD
+
+class bad_rational : public std::domain_error
+{
+public:
+    explicit bad_rational() : std::domain_error("bad rational: zero denominator") {}
+    explicit bad_rational( char const *what ) : std::domain_error( what ) {}
+};
+
+template <typename IntType>
+class rational :
+    less_than_comparable < rational<IntType>,
+    equality_comparable < rational<IntType>,
+    less_than_comparable2 < rational<IntType>, IntType,
+    equality_comparable2 < rational<IntType>, IntType,
+    addable < rational<IntType>,
+    subtractable < rational<IntType>,
+    multipliable < rational<IntType>,
+    dividable < rational<IntType>,
+    addable2 < rational<IntType>, IntType,
+    subtractable2 < rational<IntType>, IntType,
+    subtractable2_left < rational<IntType>, IntType,
+    multipliable2 < rational<IntType>, IntType,
+    dividable2 < rational<IntType>, IntType,
+    dividable2_left < rational<IntType>, IntType,
+    incrementable < rational<IntType>,
+    decrementable < rational<IntType>
+    > > > > > > > > > > > > > > > >
+{
+    // Class-wide pre-conditions
+    BOOST_STATIC_ASSERT( ::std::numeric_limits<IntType>::is_specialized );
+
+    // Helper types
+    typedef typename pdalboost::call_traits<IntType>::param_type param_type;
+
+    struct helper { IntType parts[2]; };
+    typedef IntType (helper::* bool_type)[2];
+
+public:
+    // Component type
+    typedef IntType int_type;
+
+    BOOST_CONSTEXPR
+    rational() : num(0), den(1) {}
+    BOOST_CONSTEXPR
+    rational(param_type n) : num(n), den(1) {}
+    rational(param_type n, param_type d) : num(n), den(d) { normalize(); }
+
+#ifndef BOOST_NO_MEMBER_TEMPLATES
+    template < typename NewType >
+    BOOST_CONSTEXPR explicit
+       rational(rational<NewType> const &r)
+       : num(r.numerator()), den(is_normalized(int_type(r.numerator()),
+       int_type(r.denominator())) ? r.denominator() :
+       (BOOST_THROW_EXCEPTION(bad_rational("bad rational: denormalized conversion")), 0)){}
+#endif
+
+    // Default copy constructor and assignment are fine
+
+    // Add assignment from IntType
+    rational& operator=(param_type i) { num = i; den = 1; return *this; }
+
+    // Assign in place
+    rational& assign(param_type n, param_type d);
+
+    // Access to representation
+    BOOST_CONSTEXPR
+    const IntType& numerator() const { return num; }
+    BOOST_CONSTEXPR
+    const IntType& denominator() const { return den; }
+
+    // Arithmetic assignment operators
+    rational& operator+= (const rational& r);
+    rational& operator-= (const rational& r);
+    rational& operator*= (const rational& r);
+    rational& operator/= (const rational& r);
+
+    rational& operator+= (param_type i) { num += i * den; return *this; }
+    rational& operator-= (param_type i) { num -= i * den; return *this; }
+    rational& operator*= (param_type i);
+    rational& operator/= (param_type i);
+
+    // Increment and decrement
+    const rational& operator++() { num += den; return *this; }
+    const rational& operator--() { num -= den; return *this; }
+
+    // Operator not
+    BOOST_CONSTEXPR
+    bool operator!() const { return !num; }
+
+    // Boolean conversion
+    
+#if BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+    // The "ISO C++ Template Parser" option in CW 8.3 chokes on the
+    // following, hence we selectively disable that option for the
+    // offending memfun.
+#pragma parse_mfunc_templ off
+#endif
+
+    BOOST_CONSTEXPR
+    operator bool_type() const { return operator !() ? 0 : &helper::parts; }
+
+#if BOOST_WORKAROUND(__MWERKS__,<=0x3003)
+#pragma parse_mfunc_templ reset
+#endif
+
+    // Comparison operators
+    bool operator< (const rational& r) const;
+    BOOST_CONSTEXPR
+    bool operator== (const rational& r) const;
+
+    bool operator< (param_type i) const;
+    bool operator> (param_type i) const;
+    BOOST_CONSTEXPR
+    bool operator== (param_type i) const;
+
+private:
+    // Implementation - numerator and denominator (normalized).
+    // Other possibilities - separate whole-part, or sign, fields?
+    IntType num;
+    IntType den;
+
+    // Helper functions
+    static BOOST_CONSTEXPR
+    int_type inner_gcd( param_type a, param_type b, int_type const &zero =
+     int_type(0) )
+    { return b == zero ? a : inner_gcd(b, a % b, zero); }
+
+    static BOOST_CONSTEXPR
+    int_type inner_abs( param_type x, int_type const &zero = int_type(0) )
+    { return x < zero ? -x : +x; }
+
+    // Representation note: Fractions are kept in normalized form at all
+    // times. normalized form is defined as gcd(num,den) == 1 and den > 0.
+    // In particular, note that the implementation of abs() below relies
+    // on den always being positive.
+    bool test_invariant() const;
+    void normalize();
+
+    static BOOST_CONSTEXPR
+    bool is_normalized( param_type n, param_type d, int_type const &zero =
+     int_type(0), int_type const &one = int_type(1) )
+    {
+        return d > zero && ( n != zero || d == one ) && inner_abs( inner_gcd(n,
+         d, zero), zero ) == one;
+    }
+};
+
+// Assign in place
+template <typename IntType>
+inline rational<IntType>& rational<IntType>::assign(param_type n, param_type d)
+{
+    return *this = rational( n, d );
+}
+
+// Unary plus and minus
+template <typename IntType>
+BOOST_CONSTEXPR
+inline rational<IntType> operator+ (const rational<IntType>& r)
+{
+    return r;
+}
+
+template <typename IntType>
+inline rational<IntType> operator- (const rational<IntType>& r)
+{
+    return rational<IntType>(-r.numerator(), r.denominator());
+}
+
+// Arithmetic assignment operators
+template <typename IntType>
+rational<IntType>& rational<IntType>::operator+= (const rational<IntType>& r)
+{
+    // This calculation avoids overflow, and minimises the number of expensive
+    // calculations. Thanks to Nickolay Mladenov for this algorithm.
+    //
+    // Proof:
+    // We have to compute a/b + c/d, where gcd(a,b)=1 and gcd(b,c)=1.
+    // Let g = gcd(b,d), and b = b1*g, d=d1*g. Then gcd(b1,d1)=1
+    //
+    // The result is (a*d1 + c*b1) / (b1*d1*g).
+    // Now we have to normalize this ratio.
+    // Let's assume h | gcd((a*d1 + c*b1), (b1*d1*g)), and h > 1
+    // If h | b1 then gcd(h,d1)=1 and hence h|(a*d1+c*b1) => h|a.
+    // But since gcd(a,b1)=1 we have h=1.
+    // Similarly h|d1 leads to h=1.
+    // So we have that h | gcd((a*d1 + c*b1) , (b1*d1*g)) => h|g
+    // Finally we have gcd((a*d1 + c*b1), (b1*d1*g)) = gcd((a*d1 + c*b1), g)
+    // Which proves that instead of normalizing the result, it is better to
+    // divide num and den by gcd((a*d1 + c*b1), g)
+
+    // Protect against self-modification
+    IntType r_num = r.num;
+    IntType r_den = r.den;
+
+    IntType g = integer::gcd(den, r_den);
+    den /= g;  // = b1 from the calculations above
+    num = num * (r_den / g) + r_num * den;
+    g = integer::gcd(num, g);
+    num /= g;
+    den *= r_den/g;
+
+    return *this;
+}
+
+template <typename IntType>
+rational<IntType>& rational<IntType>::operator-= (const rational<IntType>& r)
+{
+    // Protect against self-modification
+    IntType r_num = r.num;
+    IntType r_den = r.den;
+
+    // This calculation avoids overflow, and minimises the number of expensive
+    // calculations. It corresponds exactly to the += case above
+    IntType g = integer::gcd(den, r_den);
+    den /= g;
+    num = num * (r_den / g) - r_num * den;
+    g = integer::gcd(num, g);
+    num /= g;
+    den *= r_den/g;
+
+    return *this;
+}
+
+template <typename IntType>
+rational<IntType>& rational<IntType>::operator*= (const rational<IntType>& r)
+{
+    // Protect against self-modification
+    IntType r_num = r.num;
+    IntType r_den = r.den;
+
+    // Avoid overflow and preserve normalization
+    IntType gcd1 = integer::gcd(num, r_den);
+    IntType gcd2 = integer::gcd(r_num, den);
+    num = (num/gcd1) * (r_num/gcd2);
+    den = (den/gcd2) * (r_den/gcd1);
+    return *this;
+}
+
+template <typename IntType>
+rational<IntType>& rational<IntType>::operator/= (const rational<IntType>& r)
+{
+    // Protect against self-modification
+    IntType r_num = r.num;
+    IntType r_den = r.den;
+
+    // Avoid repeated construction
+    IntType zero(0);
+
+    // Trap division by zero
+    if (r_num == zero)
+        BOOST_THROW_EXCEPTION(bad_rational());
+    if (num == zero)
+        return *this;
+
+    // Avoid overflow and preserve normalization
+    IntType gcd1 = integer::gcd(num, r_num);
+    IntType gcd2 = integer::gcd(r_den, den);
+    num = (num/gcd1) * (r_den/gcd2);
+    den = (den/gcd2) * (r_num/gcd1);
+
+    if (den < zero) {
+        num = -num;
+        den = -den;
+    }
+    return *this;
+}
+
+// Mixed-mode operators
+template <typename IntType>
+inline rational<IntType>&
+rational<IntType>::operator*= (param_type i)
+{
+    // Avoid overflow and preserve normalization
+    IntType gcd = integer::gcd(i, den);
+    num *= i / gcd;
+    den /= gcd;
+
+    return *this;
+}
+
+template <typename IntType>
+rational<IntType>&
+rational<IntType>::operator/= (param_type i)
+{
+    // Avoid repeated construction
+    IntType const zero(0);
+
+    if(i == zero) BOOST_THROW_EXCEPTION(bad_rational());
+    if (num == zero) return *this;
+
+    // Avoid overflow and preserve normalization
+    IntType const gcd = integer::gcd(num, i);
+    num /= gcd;
+    den *= i / gcd;
+
+    if (den < zero) {
+        num = -num;
+        den = -den;
+    }
+
+    return *this;
+}
+
+// Comparison operators
+template <typename IntType>
+bool rational<IntType>::operator< (const rational<IntType>& r) const
+{
+    // Avoid repeated construction
+    int_type const  zero( 0 );
+
+    // This should really be a class-wide invariant.  The reason for these
+    // checks is that for 2's complement systems, INT_MIN has no corresponding
+    // positive, so negating it during normalization keeps it INT_MIN, which
+    // is bad for later calculations that assume a positive denominator.
+    BOOST_ASSERT( this->den > zero );
+    BOOST_ASSERT( r.den > zero );
+
+    // Determine relative order by expanding each value to its simple continued
+    // fraction representation using the Euclidian GCD algorithm.
+    struct { int_type  n, d, q, r; }
+     ts = { this->num, this->den, static_cast<int_type>(this->num / this->den),
+     static_cast<int_type>(this->num % this->den) },
+     rs = { r.num, r.den, static_cast<int_type>(r.num / r.den),
+     static_cast<int_type>(r.num % r.den) };
+    unsigned  reverse = 0u;
+
+    // Normalize negative moduli by repeatedly adding the (positive) denominator
+    // and decrementing the quotient.  Later cycles should have all positive
+    // values, so this only has to be done for the first cycle.  (The rules of
+    // C++ require a nonnegative quotient & remainder for a nonnegative dividend
+    // & positive divisor.)
+    while ( ts.r < zero )  { ts.r += ts.d; --ts.q; }
+    while ( rs.r < zero )  { rs.r += rs.d; --rs.q; }
+
+    // Loop through and compare each variable's continued-fraction components
+    for ( ;; )
+    {
+        // The quotients of the current cycle are the continued-fraction
+        // components.  Comparing two c.f. is comparing their sequences,
+        // stopping at the first difference.
+        if ( ts.q != rs.q )
+        {
+            // Since reciprocation changes the relative order of two variables,
+            // and c.f. use reciprocals, the less/greater-than test reverses
+            // after each index.  (Start w/ non-reversed @ whole-number place.)
+            return reverse ? ts.q > rs.q : ts.q < rs.q;
+        }
+
+        // Prepare the next cycle
+        reverse ^= 1u;
+
+        if ( (ts.r == zero) || (rs.r == zero) )
+        {
+            // At least one variable's c.f. expansion has ended
+            break;
+        }
+
+        ts.n = ts.d;         ts.d = ts.r;
+        ts.q = ts.n / ts.d;  ts.r = ts.n % ts.d;
+        rs.n = rs.d;         rs.d = rs.r;
+        rs.q = rs.n / rs.d;  rs.r = rs.n % rs.d;
+    }
+
+    // Compare infinity-valued components for otherwise equal sequences
+    if ( ts.r == rs.r )
+    {
+        // Both remainders are zero, so the next (and subsequent) c.f.
+        // components for both sequences are infinity.  Therefore, the sequences
+        // and their corresponding values are equal.
+        return false;
+    }
+    else
+    {
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4800)
+#endif
+        // Exactly one of the remainders is zero, so all following c.f.
+        // components of that variable are infinity, while the other variable
+        // has a finite next c.f. component.  So that other variable has the
+        // lesser value (modulo the reversal flag!).
+        return ( ts.r != zero ) != static_cast<bool>( reverse );
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+    }
+}
+
+template <typename IntType>
+bool rational<IntType>::operator< (param_type i) const
+{
+    // Avoid repeated construction
+    int_type const  zero( 0 );
+
+    // Break value into mixed-fraction form, w/ always-nonnegative remainder
+    BOOST_ASSERT( this->den > zero );
+    int_type  q = this->num / this->den, r = this->num % this->den;
+    while ( r < zero )  { r += this->den; --q; }
+
+    // Compare with just the quotient, since the remainder always bumps the
+    // value up.  [Since q = floor(n/d), and if n/d < i then q < i, if n/d == i
+    // then q == i, if n/d == i + r/d then q == i, and if n/d >= i + 1 then
+    // q >= i + 1 > i; therefore n/d < i iff q < i.]
+    return q < i;
+}
+
+template <typename IntType>
+bool rational<IntType>::operator> (param_type i) const
+{
+    return operator==(i)? false: !operator<(i);
+}
+
+template <typename IntType>
+BOOST_CONSTEXPR
+inline bool rational<IntType>::operator== (const rational<IntType>& r) const
+{
+    return ((num == r.num) && (den == r.den));
+}
+
+template <typename IntType>
+BOOST_CONSTEXPR
+inline bool rational<IntType>::operator== (param_type i) const
+{
+    return ((den == IntType(1)) && (num == i));
+}
+
+// Invariant check
+template <typename IntType>
+inline bool rational<IntType>::test_invariant() const
+{
+    return ( this->den > int_type(0) ) && ( integer::gcd(this->num, this->den) ==
+     int_type(1) );
+}
+
+// Normalisation
+template <typename IntType>
+void rational<IntType>::normalize()
+{
+    // Avoid repeated construction
+    IntType zero(0);
+
+    if (den == zero)
+       BOOST_THROW_EXCEPTION(bad_rational());
+
+    // Handle the case of zero separately, to avoid division by zero
+    if (num == zero) {
+        den = IntType(1);
+        return;
+    }
+
+    IntType g = integer::gcd(num, den);
+
+    num /= g;
+    den /= g;
+
+    // Ensure that the denominator is positive
+    if (den < zero) {
+        num = -num;
+        den = -den;
+    }
+
+    // ...But acknowledge that the previous step doesn't always work.
+    // (Nominally, this should be done before the mutating steps, but this
+    // member function is only called during the constructor, so we never have
+    // to worry about zombie objects.)
+    if (den < zero)
+       BOOST_THROW_EXCEPTION(bad_rational("bad rational: non-zero singular denominator"));
+
+    BOOST_ASSERT( this->test_invariant() );
+}
+
+#ifndef BOOST_NO_IOSTREAM
+namespace detail {
+
+    // A utility class to reset the format flags for an istream at end
+    // of scope, even in case of exceptions
+    struct resetter {
+        resetter(std::istream& is) : is_(is), f_(is.flags()) {}
+        ~resetter() { is_.flags(f_); }
+        std::istream& is_;
+        std::istream::fmtflags f_;      // old GNU c++ lib has no ios_base
+    };
+
+}
+
+// Input and output
+template <typename IntType>
+std::istream& operator>> (std::istream& is, rational<IntType>& r)
+{
+    using std::ios;
+
+    IntType n = IntType(0), d = IntType(1);
+    char c = 0;
+    detail::resetter sentry(is);
+
+    if ( is >> n )
+    {
+        if ( is.get(c) )
+        {
+            if ( c == '/' )
+            {
+                if ( is >> std::noskipws >> d )
+                    try {
+                        r.assign( n, d );
+                    } catch ( bad_rational & ) {        // normalization fail
+                        try { is.setstate(ios::failbit); }
+                        catch ( ... ) {}  // don't throw ios_base::failure...
+                        if ( is.exceptions() & ios::failbit )
+                            throw;   // ...but the original exception instead
+                        // ELSE: suppress the exception, use just error flags
+                    }
+            }
+            else
+                is.setstate( ios::failbit );
+        }
+    }
+
+    return is;
+}
+
+// Add manipulators for output format?
+template <typename IntType>
+std::ostream& operator<< (std::ostream& os, const rational<IntType>& r)
+{
+    using namespace std;
+
+    // The slash directly precedes the denominator, which has no prefixes.
+    ostringstream  ss;
+
+    ss.copyfmt( os );
+    ss.tie( NULL );
+    ss.exceptions( ios::goodbit );
+    ss.width( 0 );
+    ss << noshowpos << noshowbase << '/' << r.denominator();
+
+    // The numerator holds the showpos, internal, and showbase flags.
+    string const   tail = ss.str();
+    streamsize const  w = os.width() - static_cast<streamsize>( tail.size() );
+
+    ss.clear();
+    ss.str( "" );
+    ss.flags( os.flags() );
+    ss << setw( w < 0 || (os.flags() & ios::adjustfield) != ios::internal ? 0 :
+     w ) << r.numerator();
+    return os << ss.str() + tail;
+}
+#endif  // BOOST_NO_IOSTREAM
+
+// Type conversion
+template <typename T, typename IntType>
+BOOST_CONSTEXPR
+inline T rational_cast(const rational<IntType>& src)
+{
+    return static_cast<T>(src.numerator())/static_cast<T>(src.denominator());
+}
+
+// Do not use any abs() defined on IntType - it isn't worth it, given the
+// difficulties involved (Koenig lookup required, there may not *be* an abs()
+// defined, etc etc).
+template <typename IntType>
+inline rational<IntType> abs(const rational<IntType>& r)
+{
+    return r.numerator() >= IntType(0)? r: -r;
+}
+
+namespace integer {
+
+template <typename IntType>
+struct gcd_evaluator< rational<IntType> >
+{
+    typedef rational<IntType> result_type,
+                              first_argument_type, second_argument_type;
+    result_type operator() (  first_argument_type const &a
+                           , second_argument_type const &b
+                           ) const
+    {
+        return result_type(integer::gcd(a.numerator(), b.numerator()),
+                           integer::lcm(a.denominator(), b.denominator()));
+    }
+};
+
+template <typename IntType>
+struct lcm_evaluator< rational<IntType> >
+{
+    typedef rational<IntType> result_type,
+                              first_argument_type, second_argument_type;
+    result_type operator() (  first_argument_type const &a
+                           , second_argument_type const &b
+                           ) const
+    {
+        return result_type(integer::lcm(a.numerator(), b.numerator()),
+                           integer::gcd(a.denominator(), b.denominator()));
+    }
+};
+
+} // namespace integer
+
+} // namespace pdalboost
+
+#endif  // BOOST_RATIONAL_HPP
+
diff --git a/vendor/pdalboost/boost/ref.hpp b/vendor/pdalboost/boost/ref.hpp
new file mode 100644
index 0000000..17b56ec
--- /dev/null
+++ b/vendor/pdalboost/boost/ref.hpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#ifndef BOOST_REF_HPP
+#define BOOST_REF_HPP
+
+// The header file at this path is deprecated;
+// use boost/core/ref.hpp instead.
+
+#include <boost/core/ref.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/scoped_array.hpp b/vendor/pdalboost/boost/scoped_array.hpp
new file mode 100644
index 0000000..c02fa31
--- /dev/null
+++ b/vendor/pdalboost/boost/scoped_array.hpp
@@ -0,0 +1,16 @@
+#ifndef BOOST_SCOPED_ARRAY_HPP_INCLUDED
+#define BOOST_SCOPED_ARRAY_HPP_INCLUDED
+
+//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+//  Copyright (c) 2001, 2002 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  http://www.boost.org/libs/smart_ptr/scoped_array.htm
+//
+
+#include <boost/smart_ptr/scoped_array.hpp>
+
+#endif  // #ifndef BOOST_SCOPED_ARRAY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/scoped_ptr.hpp b/vendor/pdalboost/boost/scoped_ptr.hpp
new file mode 100644
index 0000000..cb916da
--- /dev/null
+++ b/vendor/pdalboost/boost/scoped_ptr.hpp
@@ -0,0 +1,16 @@
+#ifndef BOOST_SCOPED_PTR_HPP_INCLUDED
+#define BOOST_SCOPED_PTR_HPP_INCLUDED
+
+//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+//  Copyright (c) 2001, 2002 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  http://www.boost.org/libs/smart_ptr/scoped_ptr.htm
+//
+
+#include <boost/smart_ptr/scoped_ptr.hpp>
+
+#endif // #ifndef BOOST_SCOPED_PTR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/serialization/access.hpp b/vendor/pdalboost/boost/serialization/access.hpp
new file mode 100644
index 0000000..9639579
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/access.hpp
@@ -0,0 +1,145 @@
+#ifndef BOOST_SERIALIZATION_ACCESS_HPP
+#define BOOST_SERIALIZATION_ACCESS_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// access.hpp: interface for serialization system.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+namespace pdalboost {
+
+namespace archive {
+namespace detail {
+    template<class Archive, class T>
+    class iserializer;
+    template<class Archive, class T>
+    class oserializer;
+} // namespace detail
+} // namespace archive
+
+namespace serialization {
+
+// forward declarations
+template<class Archive, class T>
+inline void serialize_adl(Archive &, T &, const unsigned int);
+namespace detail {
+    template<class Archive, class T>
+    struct member_saver;
+    template<class Archive, class T>
+    struct member_loader;
+} // namespace detail
+
+// use an "accessor class so that we can use: 
+// "friend class pdalboost::serialization::access;" 
+// in any serialized class to permit clean, safe access to private class members
+// by the serialization system
+
+class access {
+public:
+    // grant access to "real" serialization defaults
+#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+public:
+#else
+    template<class Archive, class T>
+    friend struct detail::member_saver;
+    template<class Archive, class T>
+    friend struct detail::member_loader;
+    template<class Archive, class T>
+    friend class archive::detail::iserializer;
+    template<class Archive, class T>
+    friend class archive::detail::oserializer;
+    template<class Archive, class T>
+    friend inline void serialize(
+        Archive & ar, 
+        T & t, 
+        const unsigned int file_version
+    );
+    template<class Archive, class T>
+    friend inline void save_construct_data(
+        Archive & ar, 
+        const T * t, 
+        const unsigned int file_version
+    );
+    template<class Archive, class T>
+    friend inline void load_construct_data(
+        Archive & ar, 
+        T * t, 
+        const unsigned int file_version
+    );
+#endif
+
+    // pass calls to users's class implementation
+    template<class Archive, class T>
+    static void member_save(
+        Archive & ar, 
+        //const T & t,
+        T & t,
+        const unsigned int file_version
+    ){
+        t.save(ar, file_version);
+    }
+    template<class Archive, class T>
+    static void member_load(
+        Archive & ar, 
+        T & t,
+        const unsigned int file_version
+    ){
+        t.load(ar, file_version);
+    }
+    template<class Archive, class T>
+    static void serialize(
+        Archive & ar, 
+        T & t, 
+        const unsigned int file_version
+    ){
+        // note: if you get a compile time error here with a
+        // message something like:
+        // cannot convert parameter 1 from <file type 1> to <file type 2 &>
+        // a likely possible cause is that the class T contains a 
+        // serialize function - but that serialize function isn't 
+        // a template and corresponds to a file type different than
+        // the class Archive.  To resolve this, don't include an
+        // archive type other than that for which the serialization
+        // function is defined!!!
+        t.serialize(ar, file_version);
+    }
+    template<class T>
+    static void destroy( const T * t) // const appropriate here?
+    {
+        // the const business is an MSVC 6.0 hack that should be
+        // benign on everything else
+        delete const_cast<T *>(t);
+    }
+    template<class T>
+    static void construct(T * t){
+        // default is inplace invocation of default constructor
+        // Note the :: before the placement new. Required if the
+        // class doesn't have a class-specific placement new defined.
+        ::new(t)T;
+    }
+    template<class T, class U>
+    static T & cast_reference(U & u){
+        return static_cast<T &>(u);
+    }
+    template<class T, class U>
+    static T * cast_pointer(U * u){
+        return static_cast<T *>(u);
+    }
+};
+
+} // namespace serialization
+} // namespace pdalboost
+
+#endif // BOOST_SERIALIZATION_ACCESS_HPP
diff --git a/vendor/pdalboost/boost/serialization/array.hpp b/vendor/pdalboost/boost/serialization/array.hpp
new file mode 100644
index 0000000..a6d8299
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/array.hpp
@@ -0,0 +1,154 @@
+#ifndef BOOST_SERIALIZATION_ARRAY_HPP
+#define BOOST_SERIALIZATION_ARRAY_HPP
+
+// (C) Copyright 2005 Matthias Troyer and Dave Abrahams
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/config.hpp> // msvc 6.0 needs this for warning suppression
+
+#include <iostream>
+#include <cstddef> // std::size_t
+#ifndef BOOST_NO_CXX11_HDR_ARRAY
+#include <array>
+#endif
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+} // namespace std
+#endif
+
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/wrapper.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/array.hpp>
+
+namespace pdalboost { namespace serialization {
+
+// traits to specify whether to use  an optimized array serialization
+
+template <class Archive>
+struct use_array_optimization : pdalboost::mpl::always<pdalboost::mpl::false_> {};
+
+template<class T>
+class array :
+    public wrapper_traits<const array< T > >
+{
+public:    
+    typedef T value_type;
+    
+    array(value_type* t, std::size_t s) :
+        m_t(t),
+        m_element_count(s)
+    {}
+    array(const array & rhs) :
+        m_t(rhs.m_t),
+        m_element_count(rhs.m_element_count)
+    {}
+    array & operator=(const array & rhs){
+        m_t = rhs.m_t;
+        m_element_count = rhs.m_element_count;
+    }
+
+    // default implementation
+    template<class Archive>
+    void serialize_optimized(Archive &ar, const unsigned int, mpl::false_ ) const
+    {
+      // default implemention does the loop
+      std::size_t c = count();
+      value_type * t = address();
+      while(0 < c--)
+            ar & pdalboost::serialization::make_nvp("item", *t++);
+    }
+
+    // optimized implementation
+    template<class Archive>
+    void serialize_optimized(Archive &ar, const unsigned int version, mpl::true_ )
+    {
+      pdalboost::serialization::split_member(ar, *this, version);
+    }
+
+    // default implementation
+    template<class Archive>
+    void save(Archive &ar, const unsigned int version) const
+    {
+      ar.save_array(*this,version);
+    }
+
+    // default implementation
+    template<class Archive>
+    void load(Archive &ar, const unsigned int version)
+    {
+      ar.load_array(*this,version);
+    }
+    
+    // default implementation
+    template<class Archive>
+    void serialize(Archive &ar, const unsigned int version)
+    {
+      typedef typename 
+          pdalboost::serialization::use_array_optimization<Archive>::template apply<
+                    typename remove_const< T >::type 
+                >::type use_optimized;
+      serialize_optimized(ar,version,use_optimized());
+    }
+    
+    value_type* address() const
+    {
+      return m_t;
+    }
+
+    std::size_t count() const
+    {
+      return m_element_count;
+    }
+    
+private:
+    value_type* m_t;
+    std::size_t m_element_count;
+};
+
+template<class T>
+inline
+const array< T > make_array( T* t, std::size_t s){
+    return array< T >(t, s);
+}
+
+// implement serialization for pdalboost::array
+template <class Archive, class T, std::size_t N>
+void serialize(Archive& ar, pdalboost::array<T,N>& a, const unsigned int /* version */)
+{
+    ar & pdalboost::serialization::make_nvp("elems", a.elems);
+}
+
+#ifndef BOOST_NO_CXX11_HDR_ARRAY
+// implement serialization for std::array
+template <class Archive, class T, std::size_t N>
+void serialize(Archive& ar, std::array<T,N>& a, const unsigned int /* version */)
+{
+    ar & pdalboost::serialization::make_nvp(
+        "elems",
+        *static_cast<T (*)[N]>(static_cast<void *>(a.data()))
+    );
+    
+}
+#endif
+
+} } // end namespace pdalboost::serialization
+
+#define BOOST_SERIALIZATION_USE_ARRAY_OPTIMIZATION(Archive)           \
+namespace pdalboost { namespace serialization {                           \
+template <> struct use_array_optimization<Archive> {                  \
+  template <class ValueType>                                          \
+  struct apply : pdalboost::mpl::apply1<Archive::use_array_optimization   \
+      , typename pdalboost::remove_const<ValueType>::type   \
+    >::type {};                                                       \
+}; }}
+
+#endif //BOOST_SERIALIZATION_ARRAY_HPP
diff --git a/vendor/pdalboost/boost/serialization/assume_abstract.hpp b/vendor/pdalboost/boost/serialization/assume_abstract.hpp
new file mode 100644
index 0000000..4ecb05f
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/assume_abstract.hpp
@@ -0,0 +1,59 @@
+#ifndef BOOST_SERIALIZATION_ASSUME_ABSTRACT_HPP
+#define BOOST_SERIALIZATION_ASSUME_ABSTRACT_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// assume_abstract_class.hpp:
+
+// (C) Copyright 2008 Robert Ramey
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// this is useful for compilers which don't support the pdalboost::is_abstract
+
+#include <boost/type_traits/is_abstract.hpp>
+
+#ifndef BOOST_NO_IS_ABSTRACT
+
+// if there is an intrinsic is_abstract defined, we don't have to do anything
+#define BOOST_SERIALIZATION_ASSUME_ABSTRACT(T)
+
+// but forward to the "official" is_abstract
+namespace pdalboost {
+namespace serialization {
+    template<class T>
+    struct is_abstract : pdalboost::is_abstract< T > {} ;
+} // namespace serialization
+} // namespace pdalboost
+
+#else
+// we have to "make" one
+
+namespace pdalboost {
+namespace serialization {
+    template<class T>
+    struct is_abstract : pdalboost::false_type {};
+} // namespace serialization
+} // namespace pdalboost
+
+// define a macro to make explicit designation of this more transparent
+#define BOOST_SERIALIZATION_ASSUME_ABSTRACT(T)        \
+namespace pdalboost {                                     \
+namespace serialization {                             \
+template<>                                            \
+struct is_abstract< T > : pdalboost::true_type {};        \
+template<>                                            \
+struct is_abstract< const T > : pdalboost::true_type {};  \
+}}                                                    \
+/**/
+
+#endif // BOOST_NO_IS_ABSTRACT
+
+#endif //BOOST_SERIALIZATION_ASSUME_ABSTRACT_HPP
diff --git a/vendor/pdalboost/boost/serialization/base_object.hpp b/vendor/pdalboost/boost/serialization/base_object.hpp
new file mode 100644
index 0000000..5e50408
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/base_object.hpp
@@ -0,0 +1,101 @@
+#ifndef BOOST_SERIALIZATION_BASE_OBJECT_HPP
+#define BOOST_SERIALIZATION_BASE_OBJECT_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// base_object.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// if no archive headers have been included this is a no op
+// this is to permit BOOST_EXPORT etc to be included in a 
+// file declaration header
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_polymorphic.hpp>
+
+#include <boost/static_assert.hpp>
+#include <boost/serialization/access.hpp>
+#include <boost/serialization/force_include.hpp>
+#include <boost/serialization/void_cast_fwd.hpp>
+
+namespace pdalboost {
+namespace serialization {
+
+namespace detail
+{
+    // get the base type for a given derived type
+    // preserving the const-ness
+    template<class B, class D>
+    struct base_cast
+    {
+        typedef typename
+        mpl::if_<
+            is_const<D>,
+            const B,
+            B
+        >::type type;
+        BOOST_STATIC_ASSERT(is_const<type>::value == is_const<D>::value);
+    };
+
+    // only register void casts if the types are polymorphic
+    template<class Base, class Derived>
+    struct base_register
+    {
+        struct polymorphic {
+            static void const * invoke(){
+                Base const * const b = 0;
+                Derived const * const d = 0;
+                return & void_cast_register(d, b);
+            }
+        };
+        struct non_polymorphic {
+            static void const * invoke(){
+                return 0;
+            }
+        };
+        static void const * invoke(){
+            typedef typename mpl::eval_if<
+                is_polymorphic<Base>,
+                mpl::identity<polymorphic>,
+                mpl::identity<non_polymorphic>
+            >::type type;
+            return type::invoke();
+        }
+    };
+
+} // namespace detail
+template<class Base, class Derived>
+typename detail::base_cast<Base, Derived>::type & 
+base_object(Derived &d)
+{
+    BOOST_STATIC_ASSERT(( is_base_and_derived<Base,Derived>::value));
+    BOOST_STATIC_ASSERT(! is_pointer<Derived>::value);
+    typedef typename detail::base_cast<Base, Derived>::type type;
+    detail::base_register<type, Derived>::invoke();
+    return access::cast_reference<type, Derived>(d);
+}
+
+} // namespace serialization
+} // namespace pdalboost
+
+#endif // BOOST_SERIALIZATION_BASE_OBJECT_HPP
diff --git a/vendor/pdalboost/boost/serialization/collection_size_type.hpp b/vendor/pdalboost/boost/serialization/collection_size_type.hpp
new file mode 100644
index 0000000..a037ad4
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/collection_size_type.hpp
@@ -0,0 +1,62 @@
+#ifndef BOOST_SERIALIZATION_COLLECTION_SIZE_TYPE_HPP
+#define BOOST_SERIALIZATION_COLLECTION_SIZE_TYPE_HPP
+
+// (C) Copyright 2005 Matthias Troyer
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <cstddef> // size_t
+#include <boost/serialization/strong_typedef.hpp>
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/split_free.hpp>
+#include <boost/serialization/is_bitwise_serializable.hpp>
+
+namespace pdalboost { 
+namespace serialization {
+
+//BOOST_STRONG_TYPEDEF(std::size_t, collection_size_type)
+
+class collection_size_type {
+private:
+    typedef std::size_t base_type;
+    base_type t;
+public:
+    collection_size_type(): t(0) {};
+    explicit collection_size_type(const std::size_t & t_) : 
+        t(t_)
+    {}
+    collection_size_type(const collection_size_type & t_) : 
+        t(t_.t)
+    {}
+    collection_size_type & operator=(const collection_size_type & rhs){
+        t = rhs.t; 
+        return *this;
+    }
+    collection_size_type & operator=(const unsigned int & rhs){
+        t = rhs; 
+        return *this;
+    }
+    // used for text output
+    operator base_type () const {
+        return t;
+    }                
+    // used for text input
+    operator base_type & () {
+        return t;
+    }                
+    bool operator==(const collection_size_type & rhs) const {
+        return t == rhs.t;
+    } 
+    bool operator<(const collection_size_type & rhs) const {
+        return t < rhs.t;
+    }   
+};
+
+
+} } // end namespace pdalboost::serialization
+
+BOOST_CLASS_IMPLEMENTATION(collection_size_type, primitive_type)
+BOOST_IS_BITWISE_SERIALIZABLE(collection_size_type)
+
+#endif //BOOST_SERIALIZATION_COLLECTION_SIZE_TYPE_HPP
diff --git a/vendor/pdalboost/boost/serialization/collections_save_imp.hpp b/vendor/pdalboost/boost/serialization/collections_save_imp.hpp
new file mode 100644
index 0000000..36bd849
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/collections_save_imp.hpp
@@ -0,0 +1,82 @@
+#ifndef BOOST_SERIALIZATION_COLLECTIONS_SAVE_IMP_HPP
+#define BOOST_SERIALIZATION_COLLECTIONS_SAVE_IMP_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// collections_save_imp.hpp: serialization for stl collections
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// helper function templates for serialization of collections
+
+#include <boost/config.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/serialization.hpp>
+#include <boost/serialization/version.hpp>
+#include <boost/serialization/collection_size_type.hpp>
+#include <boost/serialization/item_version_type.hpp>
+
+namespace pdalboost{
+namespace serialization {
+namespace stl {
+
+//////////////////////////////////////////////////////////////////////
+// implementation of serialization for STL containers
+//
+
+template<class Archive, class Container>
+inline void save_collection(
+    Archive & ar,
+    const Container &s,
+    collection_size_type count)
+{
+    ar << BOOST_SERIALIZATION_NVP(count);
+    // record number of elements
+    const item_version_type item_version(
+        version<typename Container::value_type>::value
+    );
+    #if 0
+        pdalboost::archive::library_version_type library_version(
+            ar.get_library_version()
+        );
+        if(pdalboost::archive::library_version_type(3) < library_version){
+            ar << BOOST_SERIALIZATION_NVP(item_version);
+        }
+    #else
+        ar << BOOST_SERIALIZATION_NVP(item_version);
+    #endif
+
+    typename Container::const_iterator it = s.begin();
+    while(count-- > 0){
+        // note borland emits a no-op without the explicit namespace
+        pdalboost::serialization::save_construct_data_adl(
+            ar, 
+            &(*it), 
+            item_version
+        );
+        ar << pdalboost::serialization::make_nvp("item", *it++);
+    }
+}
+
+template<class Archive, class Container>
+inline void save_collection(Archive & ar, const Container &s)
+{
+    // record number of elements
+    collection_size_type count(s.size());
+    save_collection(ar, s, count);
+}
+
+} // namespace stl 
+} // namespace serialization
+} // namespace pdalboost
+
+#endif //BOOST_SERIALIZATION_COLLECTIONS_SAVE_IMP_HPP
diff --git a/vendor/pdalboost/boost/serialization/config.hpp b/vendor/pdalboost/boost/serialization/config.hpp
new file mode 100644
index 0000000..e72ac4d
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/config.hpp
@@ -0,0 +1,74 @@
+#ifndef BOOST_SERIALIZATION_CONFIG_HPP
+#define BOOST_SERIALIZATION_CONFIG_HPP
+
+//  config.hpp  ---------------------------------------------//
+
+//  (c) Copyright Robert Ramey 2004
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/serialization
+
+//----------------------------------------------------------------------------// 
+
+// This header implements separate compilation features as described in
+// http://www.boost.org/more/separate_compilation.html
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+// note: this version incorporates the related code into the the 
+// the same library as BOOST_ARCHIVE.  This could change some day in the
+// future
+
+// if BOOST_SERIALIZATION_DECL is defined undefine it now:
+#ifdef BOOST_SERIALIZATION_DECL
+    #undef BOOST_SERIALIZATION_DECL
+#endif
+
+// we need to import/export our code only if the user has specifically
+// asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost
+// libraries to be dynamically linked, or BOOST_SERIALIZATION_DYN_LINK
+// if they want just this one to be dynamically liked:
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK)
+    #if !defined(BOOST_DYN_LINK)
+        #define BOOST_DYN_LINK
+    #endif
+    // export if this is our own source, otherwise import:
+    #if defined(BOOST_SERIALIZATION_SOURCE)
+        #define BOOST_SERIALIZATION_DECL BOOST_SYMBOL_EXPORT
+    #else
+        #define BOOST_SERIALIZATION_DECL BOOST_SYMBOL_IMPORT
+    #endif // defined(BOOST_SERIALIZATION_SOURCE)
+#endif // defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK)
+
+// if BOOST_SERIALIZATION_DECL isn't defined yet define it now:
+#ifndef BOOST_SERIALIZATION_DECL
+    #define BOOST_SERIALIZATION_DECL
+#endif
+
+//  enable automatic library variant selection  ------------------------------// 
+
+#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_SERIALIZATION_NO_LIB) \
+&&  !defined(BOOST_ARCHIVE_SOURCE) && !defined(BOOST_WARCHIVE_SOURCE)  \
+&&  !defined(BOOST_SERIALIZATION_SOURCE)
+    //
+    // Set the name of our library, this will get undef'ed by auto_link.hpp
+    // once it's done with it:
+    //
+    #define BOOST_LIB_NAME pdalboost_serialization
+    //
+    // If we're importing code from a dll, then tell auto_link.hpp about it:
+    //
+    #if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SERIALIZATION_DYN_LINK)
+    #  define BOOST_DYN_LINK
+    #endif
+    //
+    // And include the header that does the work:
+    //
+    #include <boost/config/auto_link.hpp>
+
+#endif  
+
+#endif // BOOST_SERIALIZATION_CONFIG_HPP
diff --git a/vendor/pdalboost/boost/serialization/detail/stack_constructor.hpp b/vendor/pdalboost/boost/serialization/detail/stack_constructor.hpp
new file mode 100644
index 0000000..a81e24f
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/detail/stack_constructor.hpp
@@ -0,0 +1,65 @@
+#ifndef  BOOST_SERIALIZATION_DETAIL_STACH_CONSTRUCTOR_HPP
+#define BOOST_SERIALIZATION_DETAIL_STACH_CONSTRUCTOR_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// stack_constructor.hpp: serialization for loading stl collections
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/aligned_storage.hpp>
+
+namespace pdalboost{
+namespace serialization {
+namespace detail {
+
+// reserve space on stack for an object of type T without actually
+// construction such an object
+template<typename T > 
+struct stack_allocate
+{
+    T * address() {
+        return static_cast<T*>(storage_.address()); 
+    }
+    T & reference() {
+        return * address();
+    }
+private:
+    typedef typename pdalboost::aligned_storage<
+        sizeof(T), 
+        pdalboost::alignment_of<T>::value
+    > type;
+    type storage_;
+};
+
+// construct element on the stack
+template<class Archive, class T>
+struct stack_construct : public stack_allocate<T>
+{
+    stack_construct(Archive & ar, const unsigned int version){
+        // note borland emits a no-op without the explicit namespace
+        pdalboost::serialization::load_construct_data_adl(
+            ar, 
+            this->address(), 
+            version
+        );
+    }
+    ~stack_construct(){
+        this->address()->~T(); // undo load_construct_data above
+    }
+};
+
+} // detail
+} // serializaition
+} // boost
+
+#endif //  BOOST_SERIALIZATION_DETAIL_STACH_CONSTRUCTOR_HPP
diff --git a/vendor/pdalboost/boost/serialization/extended_type_info.hpp b/vendor/pdalboost/boost/serialization/extended_type_info.hpp
new file mode 100644
index 0000000..cf55c46
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/extended_type_info.hpp
@@ -0,0 +1,116 @@
+#ifndef BOOST_SERIALIZATION_EXTENDED_TYPE_INFO_HPP
+#define BOOST_SERIALIZATION_EXTENDED_TYPE_INFO_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// extended_type_info.hpp: interface for portable version of type_info
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// for now, extended type info is part of the serialization libraries
+// this could change in the future.
+#include <cstdarg>
+#include <boost/assert.hpp>
+#include <cstddef> // NULL
+#include <boost/config.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/mpl/bool.hpp>
+
+#include <boost/serialization/config.hpp>
+#include <boost/config/abi_prefix.hpp> // must be the last header
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4251 4231 4660 4275)
+#endif
+
+#define BOOST_SERIALIZATION_MAX_KEY_SIZE 128
+
+namespace pdalboost { 
+namespace serialization {
+
+namespace void_cast_detail{
+    class void_caster;
+}
+
+class BOOST_SYMBOL_VISIBLE extended_type_info :
+    private pdalboost::noncopyable
+{
+private:
+    friend class pdalboost::serialization::void_cast_detail::void_caster;
+
+    // used to uniquely identify the type of class derived from this one
+    // so that different derivations of this class can be simultaneously
+    // included in implementation of sets and maps.
+    const unsigned int m_type_info_key;
+    virtual bool is_less_than(const extended_type_info & /*rhs*/) const = 0;
+    virtual bool is_equal(const extended_type_info & /*rhs*/) const = 0;
+    const char * m_key;
+
+protected:
+    BOOST_SERIALIZATION_DECL void key_unregister() const;
+    BOOST_SERIALIZATION_DECL void key_register() const;
+    // this class can't be used as is. It's just the 
+    // common functionality for all type_info replacement
+    // systems.  Hence, make these protected
+    BOOST_SERIALIZATION_DECL extended_type_info(
+        const unsigned int type_info_key,
+        const char * key
+    );
+    virtual BOOST_SERIALIZATION_DECL ~extended_type_info();
+public:
+    const char * get_key() const {
+        return m_key;
+    }
+    virtual const char * get_debug_info() const = 0;
+    BOOST_SERIALIZATION_DECL bool operator<(const extended_type_info &rhs) const;
+    BOOST_SERIALIZATION_DECL bool operator==(const extended_type_info &rhs) const;
+    bool operator!=(const extended_type_info &rhs) const {
+        return !(operator==(rhs));
+    }
+    // note explicit "export" of static function to work around
+    // gcc 4.5 mingw error
+    static BOOST_SERIALIZATION_DECL const extended_type_info *
+    find(const char *key);
+    // for plugins
+    virtual void * construct(unsigned int /*count*/ = 0, ...) const = 0;
+    virtual void destroy(void const * const /*p*/) const = 0;
+};
+
+template<class T>
+struct guid_defined : pdalboost::mpl::false_ {};
+
+namespace ext {
+    template <typename T>
+    struct guid_impl
+    {
+        static inline const char * call()
+        {
+            return NULL;
+        }
+    };
+}
+
+template<class T>
+inline const char * guid(){
+    return ext::guid_impl<T>::call();
+}
+
+} // namespace serialization 
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_SERIALIZATION_EXTENDED_TYPE_INFO_HPP
diff --git a/vendor/pdalboost/boost/serialization/extended_type_info_no_rtti.hpp b/vendor/pdalboost/boost/serialization/extended_type_info_no_rtti.hpp
new file mode 100644
index 0000000..48c2c5c
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/extended_type_info_no_rtti.hpp
@@ -0,0 +1,182 @@
+#ifndef BOOST_EXTENDED_TYPE_INFO_NO_RTTI_HPP
+#define BOOST_EXTENDED_TYPE_INFO_NO_RTTI_HPP
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+// extended_type_info_no_rtti.hpp: implementation for version that depends
+// on runtime typing (rtti - typeid) but uses a user specified string
+// as the portable class identifier.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+#include <boost/assert.hpp>
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/mpl/if.hpp>
+#include <boost/type_traits/is_polymorphic.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+#include <boost/serialization/static_warning.hpp>
+#include <boost/serialization/singleton.hpp>
+#include <boost/serialization/extended_type_info.hpp>
+#include <boost/serialization/factory.hpp>
+#include <boost/serialization/throw_exception.hpp>
+
+#include <boost/serialization/config.hpp>
+// hijack serialization access
+#include <boost/serialization/access.hpp>
+
+#include <boost/config/abi_prefix.hpp> // must be the last header
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4251 4231 4660 4275 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace serialization {
+///////////////////////////////////////////////////////////////////////
+// define a special type_info that doesn't depend on rtti which is not
+// available in all situations.
+
+namespace no_rtti_system {
+
+// common base class to share type_info_key.  This is used to 
+// identify the method used to keep track of the extended type
+class BOOST_SYMBOL_VISIBLE extended_type_info_no_rtti_0 :
+    public extended_type_info
+{
+protected:
+    BOOST_SERIALIZATION_DECL extended_type_info_no_rtti_0(const char * key);
+    BOOST_SERIALIZATION_DECL ~extended_type_info_no_rtti_0();
+public:
+    virtual BOOST_SERIALIZATION_DECL bool
+    is_less_than(const pdalboost::serialization::extended_type_info &rhs) const ;
+    virtual BOOST_SERIALIZATION_DECL bool
+    is_equal(const pdalboost::serialization::extended_type_info &rhs) const ;
+};
+
+} // no_rtti_system
+
+template<class T>
+class extended_type_info_no_rtti : 
+    public no_rtti_system::extended_type_info_no_rtti_0,
+    public singleton<extended_type_info_no_rtti< T > >
+{
+    template<bool tf>
+    struct action {
+        struct defined {
+            static const char * invoke(){
+                return guid< T >();
+            }
+        };
+        struct undefined {
+            // if your program traps here - you failed to 
+            // export a guid for this type.  the no_rtti
+            // system requires export for types serialized
+            // as pointers.
+            BOOST_STATIC_ASSERT(0 == sizeof(T));
+            static const char * invoke();
+        };
+        static const char * invoke(){
+            typedef 
+                typename pdalboost::mpl::if_c<
+                    tf,
+                    defined,
+                    undefined
+                >::type type;
+            return type::invoke();
+        }
+    };
+public:
+    extended_type_info_no_rtti() :
+        no_rtti_system::extended_type_info_no_rtti_0(get_key())
+    {
+        key_register();
+    }
+    ~extended_type_info_no_rtti(){
+        key_unregister();
+    }
+    const extended_type_info *
+    get_derived_extended_type_info(const T & t) const {
+        // find the type that corresponds to the most derived type.
+        // this implementation doesn't depend on typeid() but assumes
+        // that the specified type has a function of the following signature.
+        // A common implemention of such a function is to define as a virtual
+        // function. So if the is not a polymporphic type it's likely an error
+        BOOST_STATIC_WARNING(pdalboost::is_polymorphic< T >::value);
+        const char * derived_key = t.get_key();
+        BOOST_ASSERT(NULL != derived_key);
+        return pdalboost::serialization::extended_type_info::find(derived_key);
+    }
+    const char * get_key() const{
+        return action<guid_defined< T >::value >::invoke();
+    }
+    virtual const char * get_debug_info() const{
+        return action<guid_defined< T >::value >::invoke();
+    }
+    virtual void * construct(unsigned int count, ...) const{
+        // count up the arguments
+        std::va_list ap;
+        va_start(ap, count);
+        switch(count){
+        case 0:
+            return factory<typename pdalboost::remove_const< T >::type, 0>(ap);
+        case 1:
+            return factory<typename pdalboost::remove_const< T >::type, 1>(ap);
+        case 2:
+            return factory<typename pdalboost::remove_const< T >::type, 2>(ap);
+        case 3:
+            return factory<typename pdalboost::remove_const< T >::type, 3>(ap);
+        case 4:
+            return factory<typename pdalboost::remove_const< T >::type, 4>(ap);
+        default:
+            BOOST_ASSERT(false); // too many arguments
+            // throw exception here?
+            return NULL;
+        }
+    }
+    virtual void destroy(void const * const p) const{
+        pdalboost::serialization::access::destroy(
+            static_cast<T const *>(p)
+        );
+        //delete static_cast<T const * const>(p) ;
+    }
+};
+
+} // namespace serialization
+} // namespace pdalboost
+
+///////////////////////////////////////////////////////////////////////////////
+// If no other implementation has been designated as default, 
+// use this one.  To use this implementation as the default, specify it
+// before any of the other headers.
+
+#ifndef BOOST_SERIALIZATION_DEFAULT_TYPE_INFO
+    #define BOOST_SERIALIZATION_DEFAULT_TYPE_INFO
+    namespace pdalboost {
+    namespace serialization {
+    template<class T>
+    struct extended_type_info_impl {
+        typedef typename 
+            pdalboost::serialization::extended_type_info_no_rtti< T > type;
+    };
+    } // namespace serialization
+    } // namespace pdalboost
+#endif
+
+#ifdef BOOST_MSVC
+#  pragma warning(pop)
+#endif
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_EXTENDED_TYPE_INFO_NO_RTTI_HPP
diff --git a/vendor/pdalboost/boost/serialization/extended_type_info_typeid.hpp b/vendor/pdalboost/boost/serialization/extended_type_info_typeid.hpp
new file mode 100644
index 0000000..f8b60c3
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/extended_type_info_typeid.hpp
@@ -0,0 +1,167 @@
+#ifndef BOOST_SERIALIZATION_EXTENDED_TYPE_INFO_TYPEID_HPP
+#define BOOST_SERIALIZATION_EXTENDED_TYPE_INFO_TYPEID_HPP
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+// extended_type_info_typeid.hpp: implementation for version that depends
+// on runtime typing (rtti - typeid) but uses a user specified string
+// as the portable class identifier.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <typeinfo>
+#include <cstdarg>
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+
+#include <boost/static_assert.hpp>
+#include <boost/serialization/static_warning.hpp>
+#include <boost/type_traits/is_polymorphic.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+#include <boost/serialization/config.hpp>
+#include <boost/serialization/singleton.hpp>
+#include <boost/serialization/extended_type_info.hpp>
+#include <boost/serialization/factory.hpp>
+
+// hijack serialization access
+#include <boost/serialization/access.hpp>
+
+#include <boost/mpl/if.hpp>
+
+#include <boost/config/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4251 4231 4660 4275 4511 4512)
+#endif
+
+namespace pdalboost {
+namespace serialization {
+namespace typeid_system {
+
+class BOOST_SYMBOL_VISIBLE extended_type_info_typeid_0 :
+    public extended_type_info
+{
+    virtual const char * get_debug_info() const {
+        if(static_cast<const std::type_info *>(0) == m_ti)
+            return static_cast<const char *>(0);
+        return m_ti->name();
+    }
+protected:
+    const std::type_info * m_ti;
+    BOOST_SERIALIZATION_DECL extended_type_info_typeid_0(const char * key);
+    BOOST_SERIALIZATION_DECL ~extended_type_info_typeid_0();
+    BOOST_SERIALIZATION_DECL void type_register(const std::type_info & ti);
+    BOOST_SERIALIZATION_DECL void type_unregister();
+    BOOST_SERIALIZATION_DECL const extended_type_info *
+    get_extended_type_info(const std::type_info & ti) const;
+public:
+    virtual BOOST_SERIALIZATION_DECL bool
+    is_less_than(const extended_type_info &rhs) const;
+    virtual BOOST_SERIALIZATION_DECL bool
+    is_equal(const extended_type_info &rhs) const;
+    const std::type_info & get_typeid() const {
+        return *m_ti;
+    }
+};
+
+} // typeid_system
+
+template<class T>
+class extended_type_info_typeid : 
+    public typeid_system::extended_type_info_typeid_0,
+    public singleton<extended_type_info_typeid< T > >
+{
+public:
+    extended_type_info_typeid() :
+        typeid_system::extended_type_info_typeid_0(
+            pdalboost::serialization::guid< T >()
+        )
+    {
+        type_register(typeid(T));
+        key_register();
+    }
+    ~extended_type_info_typeid(){
+        key_unregister();
+        type_unregister();
+    }
+    // get the eti record for the true type of this record
+    // relying upon standard type info implemenation (rtti)
+    const extended_type_info *
+    get_derived_extended_type_info(const T & t) const {
+        // note: this implementation - based on usage of typeid (rtti)
+        // only does something if the class has at least one virtual function.
+        BOOST_STATIC_WARNING(pdalboost::is_polymorphic< T >::value);
+        return 
+            typeid_system::extended_type_info_typeid_0::get_extended_type_info(
+                typeid(t)
+            );
+    }
+    const char * get_key() const {
+        return pdalboost::serialization::guid< T >();
+    }
+    virtual void * construct(unsigned int count, ...) const{
+        // count up the arguments
+        std::va_list ap;
+        va_start(ap, count);
+        switch(count){
+        case 0:
+            return factory<typename pdalboost::remove_const< T >::type, 0>(ap);
+        case 1:
+            return factory<typename pdalboost::remove_const< T >::type, 1>(ap);
+        case 2:
+            return factory<typename pdalboost::remove_const< T >::type, 2>(ap);
+        case 3:
+            return factory<typename pdalboost::remove_const< T >::type, 3>(ap);
+        case 4:
+            return factory<typename pdalboost::remove_const< T >::type, 4>(ap);
+        default:
+            BOOST_ASSERT(false); // too many arguments
+            // throw exception here?
+            return NULL;
+        }
+    }
+    virtual void destroy(void const * const p) const {
+        pdalboost::serialization::access::destroy(
+            static_cast<T const *>(p)
+        );
+        //delete static_cast<T const * const>(p);
+    }
+};
+
+} // namespace serialization
+} // namespace pdalboost
+
+///////////////////////////////////////////////////////////////////////////////
+// If no other implementation has been designated as default, 
+// use this one.  To use this implementation as the default, specify it
+// before any of the other headers.
+#ifndef BOOST_SERIALIZATION_DEFAULT_TYPE_INFO
+    #define BOOST_SERIALIZATION_DEFAULT_TYPE_INFO
+    namespace pdalboost {
+    namespace serialization {
+    template<class T>
+    struct extended_type_info_impl {
+        typedef typename 
+            pdalboost::serialization::extended_type_info_typeid< T > type;
+    };
+    } // namespace serialization
+    } // namespace pdalboost
+#endif
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_SERIALIZATION_EXTENDED_TYPE_INFO_TYPEID_HPP
diff --git a/vendor/pdalboost/boost/serialization/factory.hpp b/vendor/pdalboost/boost/serialization/factory.hpp
new file mode 100644
index 0000000..99766bb
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/factory.hpp
@@ -0,0 +1,100 @@
+#ifndef BOOST_SERIALIZATION_FACTORY_HPP
+#define BOOST_SERIALIZATION_FACTORY_HPP
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+// factory.hpp: create an instance from an extended_type_info instance.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstdarg> // valist
+#include <cstddef> // NULL
+
+#include <boost/preprocessor/control/if.hpp> 
+#include <boost/preprocessor/comparison/greater.hpp>
+
+namespace std{
+    #if defined(__LIBCOMO__)
+        using ::va_list;
+    #endif
+} // namespace std
+
+namespace pdalboost {
+namespace serialization {
+
+// default implementation does nothing.
+template<class T, int N>
+T * factory(std::va_list){
+    BOOST_ASSERT(false);
+    // throw exception here?
+    return NULL;
+}
+
+} // namespace serialization
+} // namespace pdalboost
+
+#define BOOST_SERIALIZATION_FACTORY(N, T, A0, A1, A2, A3) \
+namespace pdalboost {                                         \
+namespace serialization {                                 \
+    template<>                                            \
+    T * factory<T, N>(std::va_list ap){                   \
+        BOOST_PP_IF(BOOST_PP_GREATER(N,0)                 \
+            ,A0 a0 = va_arg(ap, A0);                      \
+        ,BOOST_PP_IF(BOOST_PP_GREATER(N,1)                \
+            ,A1 a1 = va_arg(ap, A1);                      \
+        ,BOOST_PP_IF(BOOST_PP_GREATER(N,2)                \
+            ,A2 a2 = va_arg(ap, A2);                      \
+        ,BOOST_PP_IF(BOOST_PP_GREATER(N,3)                \
+            ,A3 a3 = va_arg(ap, A3);                      \
+            ,BOOST_PP_EMPTY()                             \
+        ))))                                              \
+        return new T(                                     \
+            BOOST_PP_IF(BOOST_PP_GREATER(N,0)             \
+                ,a0                                       \
+            ,BOOST_PP_IF(BOOST_PP_GREATER(N,1)            \
+                ,a1                                       \
+            ,BOOST_PP_IF(BOOST_PP_GREATER(N,2)            \
+                ,a2                                       \
+            ,BOOST_PP_IF(BOOST_PP_GREATER(N,3)            \
+                ,a3                                       \
+                ,BOOST_PP_EMPTY()                         \
+            ))))                                          \
+        );                                                \
+    }                                                     \
+}                                                         \
+}                                                         \
+/**/
+
+#define BOOST_SERIALIZATION_FACTORY_4(T, A0, A1, A2, A3) \
+    BOOST_SERIALIZATION_FACTORY(4, T, A0, A1, A2, A3)
+
+#define BOOST_SERIALIZATION_FACTORY_3(T, A0, A1, A2)     \
+    BOOST_SERIALIZATION_FACTORY(3, T, A0, A1, A2, 0)
+
+#define BOOST_SERIALIZATION_FACTORY_2(T, A0, A1)         \
+    BOOST_SERIALIZATION_FACTORY(2, T, A0, A1, 0, 0)
+
+#define BOOST_SERIALIZATION_FACTORY_1(T, A0)             \
+    BOOST_SERIALIZATION_FACTORY(1, T, A0, 0, 0, 0)
+
+#define BOOST_SERIALIZATION_FACTORY_0(T)                 \
+namespace pdalboost {                                        \
+namespace serialization {                                \
+    template<>                                           \
+    T * factory<T, 0>(std::va_list){                     \
+        return new T();                                  \
+    }                                                    \
+}                                                        \
+}                                                        \
+/**/
+
+#endif // BOOST_SERIALIZATION_FACTORY_HPP
diff --git a/vendor/pdalboost/boost/serialization/force_include.hpp b/vendor/pdalboost/boost/serialization/force_include.hpp
new file mode 100644
index 0000000..55ab79d
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/force_include.hpp
@@ -0,0 +1,55 @@
+#ifndef BOOST_SERIALIZATION_FORCE_INCLUDE_HPP
+#define BOOST_SERIALIZATION_FORCE_INCLUDE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// force_include.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+// the following help macro is to guarentee that certain coded
+// is not removed by over-eager linker optimiser.  In certain cases
+// we create static objects must be created but are actually never
+// referenced - creation has a side-effect such as global registration
+// which is important to us. We make an effort to refer these objects
+// so that a smart linker won't remove them as being unreferenced.
+// In microsoft compilers, inlining the code that does the referring
+// means the code gets lost and the static object is not included
+// in the library and hence never registered.  This manifests itself
+// in an ungraceful crash at runtime when (and only when) built in
+// release mode.
+
+#if defined(BOOST_HAS_DECLSPEC) && !defined(__COMO__)
+#   define BOOST_DLLEXPORT __declspec(dllexport)
+#elif ! defined(_WIN32) && ! defined(_WIN64)
+#   if defined(__MWERKS__)
+#       define BOOST_DLLEXPORT __declspec(dllexport)
+#   elif defined(__GNUC__) && (__GNUC__ >= 3)
+#       define BOOST_USED __attribute__ ((__used__))
+#   elif defined(__IBMCPP__) && (__IBMCPP__ >= 1110)
+#       define BOOST_USED __attribute__ ((__used__))
+#   elif defined(__INTEL_COMPILER) && (BOOST_INTEL_CXX_VERSION >= 800)
+#       define BOOST_USED __attribute__ ((__used__))
+#   endif
+#endif
+
+#ifndef BOOST_USED
+#    define BOOST_USED
+#endif
+
+#ifndef BOOST_DLLEXPORT
+#    define BOOST_DLLEXPORT
+#endif
+
+#endif // BOOST_SERIALIZATION_FORCE_INCLUDE_HPP
diff --git a/vendor/pdalboost/boost/serialization/is_bitwise_serializable.hpp b/vendor/pdalboost/boost/serialization/is_bitwise_serializable.hpp
new file mode 100644
index 0000000..21125ad
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/is_bitwise_serializable.hpp
@@ -0,0 +1,46 @@
+// (C) Copyright 2007 Matthias Troyer
+
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  Authors: Matthias Troyer
+
+/** @file is_bitwise_serializable.hpp
+ *
+ *  This header provides a traits class for determining whether a class
+ * can be serialized (in a non-portable way) just by copying the bits.
+ */
+
+
+#ifndef BOOST_SERIALIZATION_IS_BITWISE_SERIALIZABLE_HPP
+#define BOOST_SERIALIZATION_IS_BITWISE_SERIALIZABLE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_arithmetic.hpp>
+
+namespace pdalboost {
+namespace serialization {
+    template<class T>
+    struct is_bitwise_serializable
+     : public is_arithmetic< T >
+    {};
+} // namespace serialization
+} // namespace pdalboost
+
+
+// define a macro to make explicit designation of this more transparent
+#define BOOST_IS_BITWISE_SERIALIZABLE(T)              \
+namespace pdalboost {                                     \
+namespace serialization {                             \
+template<>                                            \
+struct is_bitwise_serializable< T > : mpl::true_ {};  \
+}}                                                    \
+/**/
+
+#endif //BOOST_SERIALIZATION_IS_BITWISE_SERIALIZABLE_HPP
diff --git a/vendor/pdalboost/boost/serialization/item_version_type.hpp b/vendor/pdalboost/boost/serialization/item_version_type.hpp
new file mode 100644
index 0000000..36d12b2
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/item_version_type.hpp
@@ -0,0 +1,68 @@
+#ifndef BOOST_SERIALIZATION_ITEM_VERSION_TYPE_HPP
+#define BOOST_SERIALIZATION_ITEM_VERSION_TYPE_HPP
+
+// (C) Copyright 2010 Robert Ramey
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/cstdint.hpp> // uint_least8_t
+#include <boost/integer_traits.hpp>
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/is_bitwise_serializable.hpp>
+
+// fixes broken example build on x86_64-linux-gnu-gcc-4.6.0
+#include <boost/assert.hpp>
+
+namespace pdalboost { 
+namespace serialization {
+
+#if defined(_MSC_VER)
+#pragma warning( push )
+#pragma warning( disable : 4244 4267 )
+#endif
+
+class item_version_type {
+private:
+    typedef unsigned int base_type;
+    base_type t;
+public:
+    // should be private - but MPI fails if it's not!!!
+    item_version_type(): t(0) {};
+    explicit item_version_type(const unsigned int t_) : t(t_){
+        BOOST_ASSERT(t_ <= pdalboost::integer_traits<base_type>::const_max);
+    }
+    item_version_type(const item_version_type & t_) : 
+        t(t_.t)
+    {}
+    item_version_type & operator=(item_version_type rhs){
+        t = rhs.t; 
+        return *this;
+    }
+    // used for text output
+    operator base_type () const {
+        return t;
+    }                
+    // used for text input
+    operator base_type & () {
+        return t;
+    }
+    bool operator==(const item_version_type & rhs) const {
+        return t == rhs.t;
+    } 
+    bool operator<(const item_version_type & rhs) const {
+        return t < rhs.t;
+    }
+};
+
+#if defined(_MSC_VER)
+#pragma warning( pop )
+#endif
+
+} } // end namespace pdalboost::serialization
+
+BOOST_IS_BITWISE_SERIALIZABLE(item_version_type)
+
+BOOST_CLASS_IMPLEMENTATION(item_version_type, primitive_type)
+
+#endif //BOOST_SERIALIZATION_ITEM_VERSION_TYPE_HPP
diff --git a/vendor/pdalboost/boost/serialization/level.hpp b/vendor/pdalboost/boost/serialization/level.hpp
new file mode 100644
index 0000000..f123291
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/level.hpp
@@ -0,0 +1,116 @@
+#ifndef BOOST_SERIALIZATION_LEVEL_HPP
+#define BOOST_SERIALIZATION_LEVEL_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// level.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/type_traits/is_fundamental.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/integral_c_tag.hpp>
+
+#include <boost/serialization/level_enum.hpp>
+
+namespace pdalboost {
+namespace serialization {
+
+struct basic_traits;
+
+// default serialization implementation level
+template<class T>
+struct implementation_level_impl {
+    template<class U>
+    struct traits_class_level {
+        typedef typename U::level type;
+    };
+
+    typedef mpl::integral_c_tag tag;
+    // note: at least one compiler complained w/o the full qualification
+    // on basic traits below
+    typedef
+        typename mpl::eval_if<
+            is_base_and_derived<pdalboost::serialization::basic_traits, T>,
+            traits_class_level< T >,
+        //else
+        typename mpl::eval_if<
+            is_fundamental< T >,
+            mpl::int_<primitive_type>,
+        //else
+        typename mpl::eval_if<
+            is_class< T >,
+            mpl::int_<object_class_info>,
+        //else
+        typename mpl::eval_if<
+            is_array< T >,
+                mpl::int_<object_serializable>,
+        //else
+        typename mpl::eval_if<
+            is_enum< T >,
+                mpl::int_<primitive_type>,
+        //else
+            mpl::int_<not_serializable>
+        >
+        >
+        >
+        >
+        >::type type;
+        // vc 7.1 doesn't like enums here
+    BOOST_STATIC_CONSTANT(int, value = type::value);
+};
+
+template<class T>
+struct implementation_level : 
+    public implementation_level_impl<const T>
+{
+};
+
+template<class T, int L>
+inline bool operator>=(implementation_level< T > t, enum level_type l)
+{
+    return t.value >= (int)l;
+}
+
+} // namespace serialization
+} // namespace pdalboost
+
+// specify the level of serialization implementation for the class
+// require that class info saved when versioning is used
+#define BOOST_CLASS_IMPLEMENTATION(T, E)                 \
+    namespace pdalboost {                                    \
+    namespace serialization {                            \
+    template <>                                          \
+    struct implementation_level_impl< const T >                     \
+    {                                                    \
+        typedef mpl::integral_c_tag tag;                 \
+        typedef mpl::int_< E > type;                     \
+        BOOST_STATIC_CONSTANT(                           \
+            int,                                         \
+            value = implementation_level_impl::type::value    \
+        );                                               \
+    };                                                   \
+    }                                                    \
+    }
+    /**/
+
+#endif // BOOST_SERIALIZATION_LEVEL_HPP
diff --git a/vendor/pdalboost/boost/serialization/level_enum.hpp b/vendor/pdalboost/boost/serialization/level_enum.hpp
new file mode 100644
index 0000000..22fc44c
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/level_enum.hpp
@@ -0,0 +1,55 @@
+#ifndef BOOST_SERIALIZATION_LEVEL_ENUM_HPP
+#define BOOST_SERIALIZATION_LEVEL_ENUM_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// level_enum.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+namespace pdalboost {
+namespace serialization {
+
+// for each class used in the program, specify which level
+// of serialization should be implemented
+
+// names for each level
+enum level_type
+{
+    // Don't serialize this type. An attempt to do so should
+    // invoke a compile time assertion.
+    not_serializable = 0,
+    // write/read this type directly to the archive. In this case
+    // serialization code won't be called.  This is the default
+    // case for fundamental types.  It presumes a member function or
+    // template in the archive class that can handle this type.
+    // there is no runtime overhead associated reading/writing
+    // instances of this level
+    primitive_type = 1,
+    // Serialize the objects of this type using the objects "serialize"
+    // function or template. This permits values to be written/read
+    // to/from archives but includes no class or version information. 
+    object_serializable = 2,
+    ///////////////////////////////////////////////////////////////////
+    // once an object is serialized at one of the above levels, the
+    // corresponding archives cannot be read if the implementation level
+    // for the archive object is changed.  
+    ///////////////////////////////////////////////////////////////////
+    // Add class information to the archive.  Class information includes
+    // implementation level, class version and class name if available
+    object_class_info = 3
+};
+
+} // namespace serialization
+} // namespace pdalboost
+
+#endif // BOOST_SERIALIZATION_LEVEL_ENUM_HPP
diff --git a/vendor/pdalboost/boost/serialization/nvp.hpp b/vendor/pdalboost/boost/serialization/nvp.hpp
new file mode 100644
index 0000000..acdc93a
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/nvp.hpp
@@ -0,0 +1,135 @@
+#ifndef BOOST_SERIALIZATION_NVP_HPP
+#define BOOST_SERIALIZATION_NVP_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// nvp.hpp: interface for serialization system.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <utility>
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/integral_c_tag.hpp>
+
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/tracking.hpp>
+#include <boost/serialization/split_member.hpp>
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/traits.hpp>
+#include <boost/serialization/wrapper.hpp>
+
+namespace pdalboost {
+namespace serialization {
+
+template<class T>
+struct nvp : 
+    public std::pair<const char *, T *>,
+    public wrapper_traits<const nvp< T > >
+{
+    explicit nvp(const char * name_, T & t) :
+        // note: redundant cast works around borland issue
+        // note: added _ to suppress useless gcc warning
+        std::pair<const char *, T *>(name_, (T*)(& t))
+    {}
+    nvp(const nvp & rhs) : 
+        // note: redundant cast works around borland issue
+        std::pair<const char *, T *>(rhs.first, (T*)rhs.second)
+    {}
+
+    const char * name() const {
+        return this->first;
+    }
+    T & value() const {
+        return *(this->second);
+    }
+
+    const T & const_value() const {
+        return *(this->second);
+    }
+
+    // True64 compiler complains with a warning about the use of
+    // the name "Archive" hiding some higher level usage.  I'm sure this
+    // is an error but I want to accomodated as it generates a long warning
+    // listing and might be related to a lot of test failures.
+    // default treatment for name-value pairs. The name is
+    // just discarded and only the value is serialized. 
+    template<class Archivex>
+    void save(
+        Archivex & ar, 
+        const unsigned int /* file_version */
+    ) const {
+        // CodeWarrior 8.x can't seem to resolve the << op for a rhs of "const T *"
+        ar.operator<<(const_value());
+    }
+    template<class Archivex>
+    void load(
+        Archivex & ar, 
+        const unsigned int /* file_version */
+    ){
+        // CodeWarrior 8.x can't seem to resolve the >> op for a rhs of "const T *"
+        ar.operator>>(value());
+    }
+    BOOST_SERIALIZATION_SPLIT_MEMBER()
+};
+
+template<class T>
+inline
+const nvp< T > make_nvp(const char * name, T & t){
+    return nvp< T >(name, t);
+}
+
+// to maintain efficiency and portability, we want to assign
+// specific serialization traits to all instances of this wrappers.
+// we can't strait forward method below as it depends upon
+// Partial Template Specialization and doing so would mean that wrappers
+// wouldn't be treated the same on different platforms.  This would
+// break archive portability. Leave this here as reminder not to use it !!!
+
+template <class T>
+struct implementation_level<nvp< T > >
+{
+    typedef mpl::integral_c_tag tag;
+    typedef mpl::int_<object_serializable> type;
+    BOOST_STATIC_CONSTANT(int, value = implementation_level::type::value);
+};
+
+// nvp objects are generally created on the stack and are never tracked
+template<class T>
+struct tracking_level<nvp< T > >
+{
+    typedef mpl::integral_c_tag tag;
+    typedef mpl::int_<track_never> type;
+    BOOST_STATIC_CONSTANT(int, value = tracking_level::type::value);
+};
+
+
+} // seralization
+} // boost
+
+#include <boost/preprocessor/stringize.hpp>
+
+#define BOOST_SERIALIZATION_NVP(name)                              \
+    pdalboost::serialization::make_nvp(BOOST_PP_STRINGIZE(name), name)
+/**/
+
+#define BOOST_SERIALIZATION_BASE_OBJECT_NVP(name)                  \
+    pdalboost::serialization::make_nvp(                                \
+        BOOST_PP_STRINGIZE(name),                                  \
+        pdalboost::serialization::base_object<name >(*this)            \
+    )
+/**/
+
+#endif // BOOST_SERIALIZATION_NVP_HPP
diff --git a/vendor/pdalboost/boost/serialization/serialization.hpp b/vendor/pdalboost/boost/serialization/serialization.hpp
new file mode 100644
index 0000000..2955a1b
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/serialization.hpp
@@ -0,0 +1,154 @@
+#ifndef BOOST_SERIALIZATION_SERIALIZATION_HPP
+#define BOOST_SERIALIZATION_SERIALIZATION_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+#if defined(_MSC_VER)
+#  pragma warning (disable : 4675) // suppress ADL warning
+#endif
+
+#include <boost/config.hpp>
+#include <boost/serialization/strong_typedef.hpp>
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// serialization.hpp: interface for serialization system.
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+//////////////////////////////////////////////////////////////////////
+// public interface to serialization. 
+
+/////////////////////////////////////////////////////////////////////////////
+// layer 0 - intrusive verison
+// declared and implemented for each user defined class to be serialized
+//
+//  template<Archive>
+//  serialize(Archive &ar, const unsigned int file_version){
+//      ar & base_object<base>(*this) & member1 & member2 ... ;
+//  }
+
+/////////////////////////////////////////////////////////////////////////////
+// layer 1 - layer that routes member access through the access class.
+// this is what permits us to grant access to private class member functions
+// by specifying friend class pdalboost::serialization::access
+
+#include <boost/serialization/access.hpp>
+
+/////////////////////////////////////////////////////////////////////////////
+// layer 2 - default implementation of non-intrusive serialization.
+//
+// note the usage of function overloading to compensate that C++ does not
+// currently support Partial Template Specialization for function templates 
+// We have declared the version number as "const unsigned long".  
+// Overriding templates for specific data types should declare the version
+// number as "const unsigned int". Template matching will first be applied
+// to functions with the same version types - that is the overloads.  
+// If there is no declared function prototype that matches, the second argument
+// will be converted to "const unsigned long" and a match will be made with 
+// one of the default template functions below.
+
+namespace pdalboost {
+namespace serialization {
+
+BOOST_STRONG_TYPEDEF(unsigned int, version_type)
+
+// default implementation - call the member function "serialize"
+template<class Archive, class T>
+inline void serialize(
+    Archive & ar, T & t, const unsigned int file_version
+){
+    access::serialize(ar, t, static_cast<unsigned int>(file_version));
+}
+
+// save data required for construction
+template<class Archive, class T>
+inline void save_construct_data(
+    Archive & /*ar*/, 
+    const T * /*t*/, 
+    const unsigned int /*file_version */
+){
+    // default is to save no data because default constructor
+    // requires no arguments.
+}
+
+// load data required for construction and invoke constructor in place
+template<class Archive, class T>
+inline void load_construct_data(
+    Archive & /*ar*/, 
+    T * t, 
+    const unsigned int /*file_version*/
+){
+    // default just uses the default constructor.  going
+    // through access permits usage of otherwise private default
+    // constructor
+    access::construct(t);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// layer 3 - move call into serialization namespace so that ADL will function
+// in the manner we desire.
+//
+// on compilers which don't implement ADL. only the current namespace
+// i.e. pdalboost::serialization will be searched.
+// 
+// on compilers which DO implement ADL
+// serialize overrides can be in any of the following
+// 
+// 1) same namepace as Archive
+// 2) same namespace as T
+// 3) pdalboost::serialization
+//
+// Due to Martin Ecker
+
+template<class Archive, class T>
+inline void serialize_adl(
+    Archive & ar, 
+    T & t, 
+    const unsigned int file_version
+){
+    // note usage of function overloading to delay final resolution
+    // until the point of instantiation.  This works around the two-phase
+    // lookup "feature" which inhibits redefintion of a default function
+    // template implementation. Due to Robert Ramey
+    //
+    // Note that this trick generates problems for compiles which don't support
+    // PFTO, suppress it here.  As far as we know, there are no compilers
+    // which fail to support PFTO while supporting two-phase lookup.
+    const version_type v(file_version);
+    serialize(ar, t, v);
+}
+
+template<class Archive, class T>
+inline void save_construct_data_adl(
+    Archive & ar, 
+    const T * t, 
+    const unsigned int file_version
+){
+    // see above
+    const version_type v(file_version);
+    save_construct_data(ar, t, v);
+}
+
+template<class Archive, class T>
+inline void load_construct_data_adl(
+    Archive & ar, 
+    T * t, 
+    const unsigned int file_version
+){
+    // see above comment
+    const version_type v(file_version);
+    load_construct_data(ar, t, v);
+}
+
+} // namespace serialization
+} // namespace pdalboost
+
+#endif //BOOST_SERIALIZATION_SERIALIZATION_HPP
diff --git a/vendor/pdalboost/boost/serialization/singleton.hpp b/vendor/pdalboost/boost/serialization/singleton.hpp
new file mode 100644
index 0000000..84e2742
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/singleton.hpp
@@ -0,0 +1,158 @@
+#ifndef BOOST_SERIALIZATION_SINGLETON_HPP
+#define BOOST_SERIALIZATION_SINGLETON_HPP
+
+/////////1/////////2///////// 3/////////4/////////5/////////6/////////7/////////8
+//  singleton.hpp
+//
+// Copyright David Abrahams 2006. Original version
+//
+// Copyright Robert Ramey 2007.  Changes made to permit
+// application throughout the serialization library.
+//
+// Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// The intention here is to define a template which will convert
+// any class into a singleton with the following features:
+//
+// a) initialized before first use.
+// b) thread-safe for const access to the class
+// c) non-locking
+//
+// In order to do this,
+// a) Initialize dynamically when used.
+// b) Require that all singletons be initialized before main
+// is called or any entry point into the shared library is invoked.
+// This guarentees no race condition for initialization.
+// In debug mode, we assert that no non-const functions are called
+// after main is invoked.
+//
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif 
+
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/serialization/force_include.hpp>
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost { 
+namespace serialization { 
+
+//////////////////////////////////////////////////////////////////////
+// Provides a dynamically-initialized (singleton) instance of T in a
+// way that avoids LNK1179 on vc6.  See http://tinyurl.com/ljdp8 or
+// http://lists.boost.org/Archives/boost/2006/05/105286.php for
+// details.
+//
+
+// singletons created by this code are guarenteed to be unique
+// within the executable or shared library which creates them.
+// This is sufficient and in fact ideal for the serialization library.
+// The singleton is created when the module is loaded and destroyed
+// when the module is unloaded.
+
+// This base class has two functions.
+
+// First it provides a module handle for each singleton indicating
+// the executable or shared library in which it was created. This
+// turns out to be necessary and sufficient to implement the tables
+// used by serialization library.
+
+// Second, it provides a mechanism to detect when a non-const function
+// is called after initialization.
+
+// make a singleton to lock/unlock all singletons for alteration.
+// The intent is that all singletons created/used by this code
+// are to be initialized before main is called. A test program
+// can lock all the singletons when main is entereed.  This any
+// attempt to retieve a mutable instances while locked will
+// generate a assertion if compiled for debug.
+
+class BOOST_SYMBOL_VISIBLE singleton_module :
+    public pdalboost::noncopyable
+{
+private:
+    static bool & get_lock(){
+        static bool lock = false;
+        return lock;
+    }
+public:
+//    static const void * get_module_handle(){
+//        return static_cast<const void *>(get_module_handle);
+//    }
+    static void lock(){
+        get_lock() = true;
+    }
+    static void unlock(){
+        get_lock() = false;
+    }
+    static bool is_locked() {
+        return get_lock();
+    }
+};
+
+namespace detail {
+
+template<class T>
+class singleton_wrapper : public T
+{
+public:
+    static bool m_is_destroyed;
+    ~singleton_wrapper(){
+        m_is_destroyed = true;
+    }
+};
+
+template<class T>
+bool detail::singleton_wrapper< T >::m_is_destroyed = false;
+
+} // detail
+
+template <class T>
+class singleton : public singleton_module
+{
+private:
+    BOOST_DLLEXPORT static T & instance;
+    // include this to provoke instantiation at pre-execution time
+    static void use(T const *) {}
+    BOOST_DLLEXPORT static T & get_instance() {
+        static detail::singleton_wrapper< T > t;
+        // refer to instance, causing it to be instantiated (and
+        // initialized at startup on working compilers)
+        BOOST_ASSERT(! detail::singleton_wrapper< T >::m_is_destroyed);
+        use(& instance);
+        return static_cast<T &>(t);
+    }
+public:
+    BOOST_DLLEXPORT static T & get_mutable_instance(){
+        BOOST_ASSERT(! is_locked());
+        return get_instance();
+    }
+    BOOST_DLLEXPORT static const T & get_const_instance(){
+        return get_instance();
+    }
+    BOOST_DLLEXPORT static bool is_destroyed(){
+        return detail::singleton_wrapper< T >::m_is_destroyed;
+    }
+};
+
+template<class T>
+BOOST_DLLEXPORT T & singleton< T >::instance = singleton< T >::get_instance();
+
+} // namespace serialization
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif // BOOST_SERIALIZATION_SINGLETON_HPP
diff --git a/vendor/pdalboost/boost/serialization/smart_cast.hpp b/vendor/pdalboost/boost/serialization/smart_cast.hpp
new file mode 100644
index 0000000..31fc869
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/smart_cast.hpp
@@ -0,0 +1,275 @@
+#ifndef BOOST_SERIALIZATION_SMART_CAST_HPP
+#define BOOST_SERIALIZATION_SMART_CAST_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// smart_cast.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/serialization for updates, documentation, and revision history.
+
+// casting of pointers and references.  
+
+// In casting between different C++ classes, there are a number of
+// rules that have to be kept in mind in deciding whether to use
+// static_cast or dynamic_cast.  
+
+// a) dynamic casting can only be applied when one of the types is polymorphic
+// Otherwise static_cast must be used.
+// b) only dynamic casting can do runtime error checking
+// use of static_cast is generally un checked even when compiled for debug
+// c) static_cast would be considered faster than dynamic_cast.
+
+// If casting is applied to a template parameter, there is no apriori way
+// to know which of the two casting methods will be permitted or convenient.
+
+// smart_cast uses C++ type_traits, and program debug mode to select the
+// most convenient cast to use.
+
+#include <exception>
+#include <typeinfo>
+#include <cstddef> // NULL
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/is_polymorphic.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/identity.hpp>
+
+#include <boost/serialization/throw_exception.hpp>
+
+namespace pdalboost {
+namespace serialization {
+namespace smart_cast_impl {
+
+    template<class T>
+    struct reference {
+
+        struct polymorphic {
+
+            struct linear {
+                template<class U>
+                 static T cast(U & u){
+                    return static_cast< T >(u);
+                }
+            };
+
+            struct cross {
+                 template<class U>
+                static T cast(U & u){
+                    return dynamic_cast< T >(u);
+                }
+            };
+
+            template<class U>
+            static T cast(U & u){
+                // if we're in debug mode
+                #if ! defined(NDEBUG)                               \
+                || defined(__MWERKS__)
+                    // do a checked dynamic cast
+                    return cross::cast(u);
+                #else
+                    // borland 5.51 chokes here so we can't use it
+                    // note: if remove_reference isn't function for these types
+                    // cross casting will be selected this will work but will
+                    // not be the most efficient method. This will conflict with
+                    // the original smart_cast motivation.
+                    typedef typename mpl::eval_if<
+                            typename mpl::and_<
+                                mpl::not_<is_base_and_derived<
+                                    typename remove_reference< T >::type,
+                                    U
+                                > >,
+                                mpl::not_<is_base_and_derived<
+                                    U,
+                                    typename remove_reference< T >::type
+                                > >
+                            >,
+                            // borland chokes w/o full qualification here
+                            mpl::identity<cross>,
+                            mpl::identity<linear>
+                    >::type typex;
+                    // typex works around gcc 2.95 issue
+                    return typex::cast(u);
+                #endif
+            }
+        };
+
+        struct non_polymorphic {
+            template<class U>
+             static T cast(U & u){
+                return static_cast< T >(u);
+            }
+        };
+        template<class U>
+        static T cast(U & u){
+            typedef typename mpl::eval_if<
+                pdalboost::is_polymorphic<U>,
+                mpl::identity<polymorphic>,
+                mpl::identity<non_polymorphic>
+            >::type typex;
+            return typex::cast(u);
+        }
+    };
+
+    template<class T>
+    struct pointer {
+
+        struct polymorphic {
+            // unfortunately, this below fails to work for virtual base 
+            // classes.  need has_virtual_base to do this.
+            // Subject for further study
+            #if 0
+            struct linear {
+                template<class U>
+                 static T cast(U * u){
+                    return static_cast< T >(u);
+                }
+            };
+
+            struct cross {
+                template<class U>
+                static T cast(U * u){
+                    T tmp = dynamic_cast< T >(u);
+                    #ifndef NDEBUG
+                        if ( tmp == 0 ) throw_exception(std::bad_cast());
+                    #endif
+                    return tmp;
+                }
+            };
+
+            template<class U>
+            static T cast(U * u){
+                typedef
+                    typename mpl::eval_if<
+                        typename mpl::and_<
+                            mpl::not_<is_base_and_derived<
+                                typename remove_pointer< T >::type,
+                                U
+                            > >,
+                            mpl::not_<is_base_and_derived<
+                                U,
+                                typename remove_pointer< T >::type
+                            > >
+                        >,
+                        // borland chokes w/o full qualification here
+                        mpl::identity<cross>,
+                        mpl::identity<linear>
+                    >::type typex;
+                return typex::cast(u);
+            }
+            #else
+            template<class U>
+            static T cast(U * u){
+                T tmp = dynamic_cast< T >(u);
+                #ifndef NDEBUG
+                    if ( tmp == 0 ) throw_exception(std::bad_cast());
+                #endif
+                return tmp;
+            }
+            #endif
+        };
+
+        struct non_polymorphic {
+            template<class U>
+             static T cast(U * u){
+                return static_cast< T >(u);
+            }
+        };
+
+        template<class U>
+        static T cast(U * u){
+            typedef typename mpl::eval_if<
+                pdalboost::is_polymorphic<U>,
+                mpl::identity<polymorphic>,
+                mpl::identity<non_polymorphic>
+            >::type typex;
+            return typex::cast(u);
+        }
+
+    };
+
+    template<class TPtr>
+    struct void_pointer {
+        template<class UPtr>
+        static TPtr cast(UPtr uptr){
+            return static_cast<TPtr>(uptr);
+        }
+    };
+
+    template<class T>
+    struct error {
+        // if we get here, its because we are using one argument in the
+        // cast on a system which doesn't support partial template 
+        // specialization
+        template<class U>
+        static T cast(U){
+            BOOST_STATIC_ASSERT(sizeof(T)==0);
+            return * static_cast<T *>(NULL);
+        }
+    };
+
+} // smart_cast_impl
+
+// this implements:
+// smart_cast<Target *, Source *>(Source * s)
+// smart_cast<Target &, Source &>(s)
+// note that it will fail with
+// smart_cast<Target &>(s)
+template<class T, class U>
+T smart_cast(U u) {
+    typedef
+        typename mpl::eval_if<
+            typename mpl::or_<
+                pdalboost::is_same<void *, U>,
+                pdalboost::is_same<void *, T>,
+                pdalboost::is_same<const void *, U>,
+                pdalboost::is_same<const void *, T>
+            >,
+            mpl::identity<smart_cast_impl::void_pointer< T > >,
+        // else
+        typename mpl::eval_if<pdalboost::is_pointer<U>,
+            mpl::identity<smart_cast_impl::pointer< T > >,
+        // else
+        typename mpl::eval_if<pdalboost::is_reference<U>,
+            mpl::identity<smart_cast_impl::reference< T > >,
+        // else
+            mpl::identity<smart_cast_impl::error< T >
+        >
+        >
+        >
+        >::type typex;
+    return typex::cast(u);
+}
+
+// this implements:
+// smart_cast_reference<Target &>(Source & s)
+template<class T, class U>
+T smart_cast_reference(U & u) {
+    return smart_cast_impl::reference< T >::cast(u);
+}
+
+} // namespace serialization
+} // namespace pdalboost
+
+#endif // BOOST_SERIALIZATION_SMART_CAST_HPP
diff --git a/vendor/pdalboost/boost/serialization/split_free.hpp b/vendor/pdalboost/boost/serialization/split_free.hpp
new file mode 100644
index 0000000..551e11d
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/split_free.hpp
@@ -0,0 +1,93 @@
+#ifndef BOOST_SERIALIZATION_SPLIT_FREE_HPP
+#define BOOST_SERIALIZATION_SPLIT_FREE_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// split_free.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/serialization/serialization.hpp>
+
+namespace pdalboost {
+namespace archive {
+    namespace detail {
+        template<class Archive> class interface_oarchive;
+        template<class Archive> class interface_iarchive;
+    } // namespace detail
+} // namespace archive
+
+namespace serialization {
+
+//namespace detail {
+template<class Archive, class T>
+struct free_saver {
+    static void invoke(
+        Archive & ar, 
+        const  T & t, 
+        const unsigned int file_version
+    ){
+        // use function overload (version_type) to workaround
+        // two-phase lookup issue
+        const version_type v(file_version);
+        save(ar, t, v);
+    }
+};
+template<class Archive, class T>
+struct free_loader {
+    static void invoke(
+        Archive & ar, 
+        T & t, 
+        const unsigned int file_version
+    ){
+        // use function overload (version_type) to workaround
+        // two-phase lookup issue
+        const version_type v(file_version);
+        load(ar, t, v);
+    }
+};
+//} // namespace detail
+
+template<class Archive, class T>
+inline void split_free(
+    Archive & ar, 
+    T & t, 
+    const unsigned int file_version
+){
+    typedef typename mpl::eval_if<
+        typename Archive::is_saving,
+        mpl::identity</* detail:: */ free_saver<Archive, T> >, 
+        mpl::identity</* detail:: */ free_loader<Archive, T> >
+    >::type typex;
+    typex::invoke(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace pdalboost
+
+#define BOOST_SERIALIZATION_SPLIT_FREE(T)       \
+namespace pdalboost { namespace serialization {     \
+template<class Archive>                         \
+inline void serialize(                          \
+        Archive & ar,                               \
+        T & t,                                      \
+        const unsigned int file_version             \
+){                                              \
+        split_free(ar, t, file_version);            \
+}                                               \
+}}
+/**/
+
+#endif // BOOST_SERIALIZATION_SPLIT_FREE_HPP
diff --git a/vendor/pdalboost/boost/serialization/split_member.hpp b/vendor/pdalboost/boost/serialization/split_member.hpp
new file mode 100644
index 0000000..dd16700
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/split_member.hpp
@@ -0,0 +1,86 @@
+#ifndef BOOST_SERIALIZATION_SPLIT_MEMBER_HPP
+#define BOOST_SERIALIZATION_SPLIT_MEMBER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// split_member.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+
+#include <boost/serialization/access.hpp>
+
+namespace pdalboost {
+namespace archive {
+    namespace detail {
+        template<class Archive> class interface_oarchive;
+        template<class Archive> class interface_iarchive;
+    } // namespace detail
+} // namespace archive
+
+namespace serialization {
+namespace detail {
+
+    template<class Archive, class T>
+    struct member_saver {
+        static void invoke(
+            Archive & ar, 
+            const T & t,
+            const unsigned int file_version
+        ){
+            access::member_save(ar, t, file_version);
+        }
+    };
+
+    template<class Archive, class T>
+    struct member_loader {
+        static void invoke(
+            Archive & ar, 
+            T & t,
+            const unsigned int file_version
+        ){
+            access::member_load(ar, t, file_version);
+        }
+    };
+
+} // detail
+
+template<class Archive, class T>
+inline void split_member(
+    Archive & ar, T & t, const unsigned int file_version
+){
+    typedef typename mpl::eval_if<
+        typename Archive::is_saving,
+        mpl::identity<detail::member_saver<Archive, T> >, 
+        mpl::identity<detail::member_loader<Archive, T> >
+    >::type typex;
+    typex::invoke(ar, t, file_version);
+}
+
+} // namespace serialization
+} // namespace pdalboost
+
+// split member function serialize funcition into save/load
+#define BOOST_SERIALIZATION_SPLIT_MEMBER()                       \
+template<class Archive>                                          \
+void serialize(                                                  \
+    Archive &ar,                                                 \
+    const unsigned int file_version                              \
+){                                                               \
+    pdalboost::serialization::split_member(ar, *this, file_version); \
+}                                                                \
+/**/
+
+#endif // BOOST_SERIALIZATION_SPLIT_MEMBER_HPP
diff --git a/vendor/pdalboost/boost/serialization/state_saver.hpp b/vendor/pdalboost/boost/serialization/state_saver.hpp
new file mode 100644
index 0000000..0746bdc
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/state_saver.hpp
@@ -0,0 +1,96 @@
+#ifndef BOOST_SERIALIZATION_STATE_SAVER_HPP
+#define BOOST_SERIALIZATION_STATE_SAVER_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// state_saver.hpp:
+
+// (C) Copyright 2003-4 Pavel Vozenilek and Robert Ramey - http://www.rrsd.com.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/serialization for updates, documentation, and revision history.
+
+// Inspired by Daryle Walker's iostate_saver concept.  This saves the original
+// value of a variable when a state_saver is constructed and restores
+// upon destruction.  Useful for being sure that state is restored to
+// variables upon exit from scope.
+
+
+#include <boost/config.hpp>
+#ifndef BOOST_NO_EXCEPTIONS
+    #include <exception>
+#endif
+
+#include <boost/call_traits.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/type_traits/has_nothrow_copy.hpp>
+#include <boost/core/no_exceptions_support.hpp>
+
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+
+namespace pdalboost {
+namespace serialization {
+
+template<class T>
+// T requirements:
+//  - POD or object semantic (cannot be reference, function, ...)
+//  - copy constructor
+//  - operator = (no-throw one preferred)
+class state_saver : private pdalboost::noncopyable
+{
+private:
+    const T previous_value;
+    T & previous_ref;
+
+    struct restore {
+        static void invoke(T & previous_ref, const T & previous_value){
+            previous_ref = previous_value; // won't throw
+        }
+    };
+
+    struct restore_with_exception {
+        static void invoke(T & previous_ref, const T & previous_value){
+            BOOST_TRY{
+                previous_ref = previous_value;
+            } 
+            BOOST_CATCH(::std::exception &) { 
+                // we must ignore it - we are in destructor
+            }
+            BOOST_CATCH_END
+        }
+    };
+
+public:
+    state_saver(
+        T & object
+    ) : 
+        previous_value(object),
+        previous_ref(object) 
+    {}
+    
+    ~state_saver() {
+        #ifndef BOOST_NO_EXCEPTIONS
+            typedef typename mpl::eval_if<
+                has_nothrow_copy< T >,
+                mpl::identity<restore>,
+                mpl::identity<restore_with_exception>
+            >::type typex;
+            typex::invoke(previous_ref, previous_value);
+        #else
+            previous_ref = previous_value;
+        #endif
+    }
+
+}; // state_saver<>
+
+} // serialization
+} // boost
+
+#endif //BOOST_SERIALIZATION_STATE_SAVER_HPP
diff --git a/vendor/pdalboost/boost/serialization/static_warning.hpp b/vendor/pdalboost/boost/serialization/static_warning.hpp
new file mode 100644
index 0000000..a1f256a
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/static_warning.hpp
@@ -0,0 +1,102 @@
+#ifndef BOOST_SERIALIZATION_STATIC_WARNING_HPP
+#define BOOST_SERIALIZATION_STATIC_WARNING_HPP
+
+//  (C) Copyright Robert Ramey 2003. Jonathan Turkanis 2004.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/static_assert for documentation.
+
+/*
+ Revision history:
+   15 June  2003 - Initial version.
+   31 March 2004 - improved diagnostic messages and portability 
+                   (Jonathan Turkanis)
+   03 April 2004 - works on VC6 at class and namespace scope
+                 - ported to DigitalMars
+                 - static warnings disabled by default; when enabled,
+                   uses pragmas to enable required compiler warnings
+                   on MSVC, Intel, Metrowerks and Borland 5.x.
+                   (Jonathan Turkanis)
+   30 May 2004   - tweaked for msvc 7.1 and gcc 3.3
+                 - static warnings ENabled by default; when enabled,
+                   (Robert Ramey)
+*/
+
+#include <boost/config.hpp>
+
+//
+// Implementation
+// Makes use of the following warnings:
+//  1. GCC prior to 3.3: division by zero.
+//  2. BCC 6.0 preview: unreferenced local variable.
+//  3. DigitalMars: returning address of local automatic variable.
+//  4. VC6: class previously seen as struct (as in 'boost/mpl/print.hpp')
+//  5. All others: deletion of pointer to incomplete type.
+//
+// The trick is to find code which produces warnings containing the name of
+// a structure or variable. Details, with same numbering as above:
+// 1. static_warning_impl<B>::value is zero iff B is false, so diving an int
+//    by this value generates a warning iff B is false.
+// 2. static_warning_impl<B>::type has a constructor iff B is true, so an
+//    unreferenced variable of this type generates a warning iff B is false.
+// 3. static_warning_impl<B>::type overloads operator& to return a dynamically
+//    allocated int pointer only is B is true, so  returning the address of an
+//    automatic variable of this type generates a warning iff B is fasle.
+// 4. static_warning_impl<B>::STATIC_WARNING is decalred as a struct iff B is 
+//    false. 
+// 5. static_warning_impl<B>::type is incomplete iff B is false, so deleting a
+//    pointer to this type generates a warning iff B is false.
+//
+
+//------------------Enable selected warnings----------------------------------//
+
+// Enable the warnings relied on by BOOST_STATIC_WARNING, where possible.
+
+// 6. replaced implementation with one which depends solely on
+//    mpl::print<>.  The previous one was found to fail for functions
+//    under recent versions of gcc and intel compilers - Robert Ramey
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/print.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/static_assert.hpp>
+
+namespace pdalboost {
+namespace serialization {
+
+template<int L> 
+struct BOOST_SERIALIZATION_STATIC_WARNING_LINE{};
+
+template<bool B, int L>
+struct static_warning_test{
+    typename pdalboost::mpl::eval_if_c<
+        B,
+        pdalboost::mpl::true_,
+        typename pdalboost::mpl::identity<
+            pdalboost::mpl::print<
+                BOOST_SERIALIZATION_STATIC_WARNING_LINE<L>
+            >
+        >
+    >::type type;
+};
+
+template<int i>
+struct BOOST_SERIALIZATION_SS {};
+
+} // serialization
+} // boost
+
+#define BOOST_SERIALIZATION_BSW(B, L) \
+    typedef pdalboost::serialization::BOOST_SERIALIZATION_SS< \
+        sizeof( pdalboost::serialization::static_warning_test< B, L > ) \
+    > BOOST_JOIN(STATIC_WARNING_LINE, L) BOOST_ATTRIBUTE_UNUSED; 
+#define BOOST_STATIC_WARNING(B) BOOST_SERIALIZATION_BSW(B, __LINE__)
+
+#endif // BOOST_SERIALIZATION_STATIC_WARNING_HPP
diff --git a/vendor/pdalboost/boost/serialization/string.hpp b/vendor/pdalboost/boost/serialization/string.hpp
new file mode 100644
index 0000000..710c03a
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/string.hpp
@@ -0,0 +1,30 @@
+#ifndef  BOOST_SERIALIZATION_STRING_HPP
+#define BOOST_SERIALIZATION_STRING_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// serialization/string.hpp:
+// serialization for stl string templates
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <string>
+
+#include <boost/config.hpp>
+#include <boost/serialization/level.hpp>
+
+BOOST_CLASS_IMPLEMENTATION(std::string, pdalboost::serialization::primitive_type)
+#ifndef BOOST_NO_STD_WSTRING
+BOOST_CLASS_IMPLEMENTATION(std::wstring, pdalboost::serialization::primitive_type)
+#endif
+
+#endif // BOOST_SERIALIZATION_STRING_HPP
diff --git a/vendor/pdalboost/boost/serialization/strong_typedef.hpp b/vendor/pdalboost/boost/serialization/strong_typedef.hpp
new file mode 100644
index 0000000..fc0f514
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/strong_typedef.hpp
@@ -0,0 +1,46 @@
+#ifndef BOOST_SERIALIZATION_STRONG_TYPEDEF_HPP
+#define BOOST_SERIALIZATION_STRONG_TYPEDEF_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// strong_typedef.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/serialization for updates, documentation, and revision history.
+
+// macro used to implement a strong typedef.  strong typedef
+// guarentees that two types are distinguised even though the
+// share the same underlying implementation.  typedef does not create
+// a new type.  BOOST_STRONG_TYPEDEF(T, D) creates a new type named D
+// that operates as a type T.
+
+#include <boost/config.hpp>
+#include <boost/operators.hpp>
+
+#define BOOST_STRONG_TYPEDEF(T, D)                              \
+struct D                                                        \
+    : pdalboost::totally_ordered1< D                                \
+    , pdalboost::totally_ordered2< D, T                             \
+    > >                                                         \
+{                                                               \
+    T t;                                                        \
+    explicit D(const T t_) : t(t_) {};                          \
+    D(): t() {};                                                \
+    D(const D & t_) : t(t_.t){}                                 \
+    D & operator=(const D & rhs) { t = rhs.t; return *this;}    \
+    D & operator=(const T & rhs) { t = rhs; return *this;}      \
+    operator const T & () const {return t; }                    \
+    operator T & () { return t; }                               \
+    bool operator==(const D & rhs) const { return t == rhs.t; } \
+    bool operator<(const D & rhs) const { return t < rhs.t; }   \
+};
+
+#endif // BOOST_SERIALIZATION_STRONG_TYPEDEF_HPP
diff --git a/vendor/pdalboost/boost/serialization/throw_exception.hpp b/vendor/pdalboost/boost/serialization/throw_exception.hpp
new file mode 100644
index 0000000..887ab8e
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/throw_exception.hpp
@@ -0,0 +1,44 @@
+#ifndef BOOST_SERIALIZATION_THROW_EXCEPTION_HPP_INCLUDED
+#define BOOST_SERIALIZATION_THROW_EXCEPTION_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+//  boost/throw_exception.hpp
+//
+//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/config.hpp>
+
+#ifndef BOOST_NO_EXCEPTIONS
+#include <exception>
+#endif
+
+namespace pdalboost {
+namespace serialization {
+
+#ifdef BOOST_NO_EXCEPTIONS
+
+inline void throw_exception(std::exception const & e) {
+    ::pdalboost::throw_exception(e);
+}
+
+#else
+
+template<class E> inline void throw_exception(E const & e){
+    throw e;
+}
+
+#endif
+
+} // namespace serialization
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_SERIALIZATION_THROW_EXCEPTION_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/serialization/tracking.hpp b/vendor/pdalboost/boost/serialization/tracking.hpp
new file mode 100644
index 0000000..f335676
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/tracking.hpp
@@ -0,0 +1,118 @@
+#ifndef BOOST_SERIALIZATION_TRACKING_HPP
+#define BOOST_SERIALIZATION_TRACKING_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// tracking.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/equal_to.hpp>
+#include <boost/mpl/greater.hpp>
+#include <boost/mpl/integral_c_tag.hpp>
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/serialization/level.hpp>
+#include <boost/serialization/tracking_enum.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+
+namespace pdalboost {
+namespace serialization {
+
+struct basic_traits;
+
+// default tracking level
+template<class T>
+struct tracking_level_impl {
+    template<class U>
+    struct traits_class_tracking {
+        typedef typename U::tracking type;
+    };
+    typedef mpl::integral_c_tag tag;
+    // note: at least one compiler complained w/o the full qualification
+    // on basic traits below
+    typedef
+        typename mpl::eval_if<
+            is_base_and_derived<pdalboost::serialization::basic_traits, T>,
+            traits_class_tracking< T >,
+        //else
+        typename mpl::eval_if<
+            is_pointer< T >,
+            // pointers are not tracked by default
+            mpl::int_<track_never>,
+        //else
+        typename mpl::eval_if<
+            // for primitives
+            typename mpl::equal_to<
+                implementation_level< T >,
+                mpl::int_<primitive_type> 
+            >,
+            // is never
+            mpl::int_<track_never>,
+            // otherwise its selective
+            mpl::int_<track_selectively>
+    >  > >::type type;
+    BOOST_STATIC_CONSTANT(int, value = type::value);
+};
+
+template<class T>
+struct tracking_level : 
+    public tracking_level_impl<const T>
+{
+};
+
+template<class T, enum tracking_type L>
+inline bool operator>=(tracking_level< T > t, enum tracking_type l)
+{
+    return t.value >= (int)l;
+}
+
+} // namespace serialization
+} // namespace pdalboost
+
+
+// The STATIC_ASSERT is prevents one from setting tracking for a primitive type.  
+// This almost HAS to be an error.  Doing this will effect serialization of all 
+// char's in your program which is almost certainly what you don't want to do.  
+// If you want to track all instances of a given primitive type, You'll have to 
+// wrap it in your own type so its not a primitive anymore.  Then it will compile
+// without problem.
+#define BOOST_CLASS_TRACKING(T, E)           \
+namespace pdalboost {                            \
+namespace serialization {                    \
+template<>                                   \
+struct tracking_level< T >                   \
+{                                            \
+    typedef mpl::integral_c_tag tag;         \
+    typedef mpl::int_< E> type;              \
+    BOOST_STATIC_CONSTANT(                   \
+        int,                                 \
+        value = tracking_level::type::value  \
+    );                                       \
+    /* tracking for a class  */              \
+    BOOST_STATIC_ASSERT((                    \
+        mpl::greater<                        \
+            /* that is a prmitive */         \
+            implementation_level< T >,       \
+            mpl::int_<primitive_type>        \
+        >::value                             \
+    ));                                      \
+};                                           \
+}}
+
+#endif // BOOST_SERIALIZATION_TRACKING_HPP
diff --git a/vendor/pdalboost/boost/serialization/tracking_enum.hpp b/vendor/pdalboost/boost/serialization/tracking_enum.hpp
new file mode 100644
index 0000000..323479b
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/tracking_enum.hpp
@@ -0,0 +1,41 @@
+#ifndef BOOST_SERIALIZATION_TRACKING_ENUM_HPP
+#define BOOST_SERIALIZATION_TRACKING_ENUM_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// tracking_enum.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+namespace pdalboost {
+namespace serialization {
+
+// addresses of serialized objects may be tracked to avoid saving/loading
+// redundant copies.  This header defines a class trait that can be used
+// to specify when objects should be tracked
+
+// names for each tracking level
+enum tracking_type
+{
+    // never track this type
+    track_never = 0,
+    // track objects of this type if the object is serialized through a 
+    // pointer.
+    track_selectively = 1,
+    // always track this type
+    track_always = 2
+};
+
+} // namespace serialization
+} // namespace pdalboost
+
+#endif // BOOST_SERIALIZATION_TRACKING_ENUM_HPP
diff --git a/vendor/pdalboost/boost/serialization/traits.hpp b/vendor/pdalboost/boost/serialization/traits.hpp
new file mode 100644
index 0000000..2f6549f
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/traits.hpp
@@ -0,0 +1,65 @@
+#ifndef BOOST_SERIALIZATION_TRAITS_HPP
+#define BOOST_SERIALIZATION_TRAITS_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// traits.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// This header is used to apply serialization traits to templates.  The
+// standard system can't be used for platforms which don't support
+// Partial Templlate Specialization.  
+
+// The motivation for this is the Name-Value Pair (NVP) template.
+// it has to work the same on all platforms in order for archives
+// to be portable accross platforms.
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/serialization/level_enum.hpp>
+#include <boost/serialization/tracking_enum.hpp>
+
+namespace pdalboost {
+namespace serialization {
+
+// common base class used to detect appended traits class
+struct basic_traits {};
+
+template <class T>
+struct extended_type_info_impl;
+
+template<
+    class T, 
+    int Level, 
+    int Tracking,
+    unsigned int Version = 0,
+    class ETII = extended_type_info_impl< T >,
+    class Wrapper = mpl::false_
+>
+struct traits : public basic_traits {
+    BOOST_STATIC_ASSERT(Version == 0 || Level >= object_class_info);
+    BOOST_STATIC_ASSERT(Tracking == track_never || Level >= object_serializable);
+    typedef typename mpl::int_<Level> level;
+    typedef typename mpl::int_<Tracking> tracking;
+    typedef typename mpl::int_<Version> version;
+    typedef ETII type_info_implementation;
+    typedef Wrapper is_wrapper;
+};
+
+} // namespace serialization
+} // namespace pdalboost
+
+#endif // BOOST_SERIALIZATION_TRAITS_HPP
diff --git a/vendor/pdalboost/boost/serialization/type_info_implementation.hpp b/vendor/pdalboost/boost/serialization/type_info_implementation.hpp
new file mode 100644
index 0000000..fc58cca
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/type_info_implementation.hpp
@@ -0,0 +1,73 @@
+#ifndef BOOST_SERIALIZATION_TYPE_INFO_IMPLEMENTATION_HPP
+#define BOOST_SERIALIZATION_TYPE_INFO_IMPLEMENTATION_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// type_info_implementation.hpp: interface for portable version of type_info
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/static_assert.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/serialization/traits.hpp>
+
+namespace pdalboost {
+namespace serialization {
+
+// note that T and const T are folded into const T so that
+// there is only one table entry per type
+template<class T>
+struct type_info_implementation {
+    template<class U>
+    struct traits_class_typeinfo_implementation {
+      typedef typename U::type_info_implementation::type type;
+    };
+    // note: at least one compiler complained w/o the full qualification
+    // on basic traits below
+    typedef 
+        typename mpl::eval_if<
+            is_base_and_derived<pdalboost::serialization::basic_traits, T>,
+            traits_class_typeinfo_implementation< T >,
+        //else
+            mpl::identity<
+                typename extended_type_info_impl< T >::type
+            >
+        >::type type;
+};
+
+} // namespace serialization
+} // namespace pdalboost
+
+// define a macro to assign a particular derivation of extended_type_info
+// to a specified a class. 
+#define BOOST_CLASS_TYPE_INFO(T, ETI)              \
+namespace pdalboost {                                  \
+namespace serialization {                          \
+template<>                                         \
+struct type_info_implementation< T > {             \
+    typedef ETI type;                              \
+};                                                 \
+template<>                                         \
+struct type_info_implementation< const T > {       \
+    typedef ETI type;                              \
+};                                                 \
+}                                                  \
+}                                                  \
+/**/
+
+#endif /// BOOST_SERIALIZATION_TYPE_INFO_IMPLEMENTATION_HPP
diff --git a/vendor/pdalboost/boost/serialization/utility.hpp b/vendor/pdalboost/boost/serialization/utility.hpp
new file mode 100644
index 0000000..588d888
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/utility.hpp
@@ -0,0 +1,56 @@
+#ifndef  BOOST_SERIALIZATION_UTILITY_HPP
+#define BOOST_SERIALIZATION_UTILITY_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// serialization/utility.hpp:
+// serialization for stl utility templates
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <utility>
+#include <boost/config.hpp>
+
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/is_bitwise_serializable.hpp>
+#include <boost/mpl/and.hpp>
+
+namespace pdalboost { 
+namespace serialization {
+
+// pair
+template<class Archive, class F, class S>
+inline void serialize(
+    Archive & ar,
+    std::pair<F, S> & p,
+    const unsigned int /* file_version */
+){
+    // note: we remove any const-ness on the first argument.  The reason is that 
+    // for stl maps, the type saved is pair<const key, T).  We remove
+    // the const-ness in order to be able to load it.
+    typedef typename pdalboost::remove_const<F>::type typef;
+    ar & pdalboost::serialization::make_nvp("first", const_cast<typef &>(p.first));
+    ar & pdalboost::serialization::make_nvp("second", p.second);
+}
+
+/// specialization of is_bitwise_serializable for pairs
+template <class T, class U>
+struct is_bitwise_serializable<std::pair<T,U> >
+ : public mpl::and_<is_bitwise_serializable< T >,is_bitwise_serializable<U> >
+{
+};
+
+} // serialization
+} // namespace pdalboost
+
+#endif // BOOST_SERIALIZATION_UTILITY_HPP
diff --git a/vendor/pdalboost/boost/serialization/version.hpp b/vendor/pdalboost/boost/serialization/version.hpp
new file mode 100644
index 0000000..d0c0577
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/version.hpp
@@ -0,0 +1,107 @@
+#ifndef BOOST_SERIALIZATION_VERSION_HPP
+#define BOOST_SERIALIZATION_VERSION_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// version.hpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/integral_c_tag.hpp>
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+
+namespace pdalboost { 
+namespace serialization {
+
+struct basic_traits;
+
+// default version number is 0. Override with higher version
+// when class definition changes.
+template<class T>
+struct version
+{
+    template<class U>
+    struct traits_class_version {
+        typedef typename U::version type;
+    };
+
+    typedef mpl::integral_c_tag tag;
+    // note: at least one compiler complained w/o the full qualification
+    // on basic traits below
+    typedef
+        typename mpl::eval_if<
+            is_base_and_derived<pdalboost::serialization::basic_traits,T>,
+            traits_class_version< T >,
+            mpl::int_<0>
+        >::type type;
+    BOOST_STATIC_CONSTANT(int, value = version::type::value);
+};
+
+#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
+template<class T>
+const int version<T>::value;
+#endif
+
+} // namespace serialization
+} // namespace pdalboost
+
+/* note: at first it seemed that this would be a good place to trap
+ * as an error an attempt to set a version # for a class which doesn't
+ * save its class information (including version #) in the archive.
+ * However, this imposes a requirement that the version be set after
+ * the implemention level which would be pretty confusing.  If this
+ * is to be done, do this check in the input or output operators when
+ * ALL the serialization traits are available.  Included the implementation
+ * here with this comment as a reminder not to do this!
+ */
+//#include <boost/serialization/level.hpp>
+//#include <boost/mpl/equal_to.hpp>
+
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/comparison.hpp>
+
+// specify the current version number for the class
+// version numbers limited to 8 bits !!!
+#define BOOST_CLASS_VERSION(T, N)                                      \
+namespace pdalboost {                                                      \
+namespace serialization {                                              \
+template<>                                                             \
+struct version<T >                                                     \
+{                                                                      \
+    typedef mpl::int_<N> type;                                         \
+    typedef mpl::integral_c_tag tag;                                   \
+    BOOST_STATIC_CONSTANT(int, value = version::type::value);          \
+    BOOST_MPL_ASSERT((                                                 \
+        pdalboost::mpl::less<                                              \
+            pdalboost::mpl::int_<N>,                                       \
+            pdalboost::mpl::int_<256>                                      \
+        >                                                              \
+    ));                                                                \
+    /*                                                                 \
+    BOOST_MPL_ASSERT((                                                 \
+        mpl::equal_to<                                                 \
+            :implementation_level<T >,                                 \
+            mpl::int_<object_class_info>                               \
+        >::value                                                       \
+    ));                                                                \
+    */                                                                 \
+};                                                                     \
+}                                                                      \
+}
+
+#endif // BOOST_SERIALIZATION_VERSION_HPP
diff --git a/vendor/pdalboost/boost/serialization/void_cast.hpp b/vendor/pdalboost/boost/serialization/void_cast.hpp
new file mode 100644
index 0000000..b9cb719
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/void_cast.hpp
@@ -0,0 +1,298 @@
+#ifndef  BOOST_SERIALIZATION_VOID_CAST_HPP
+#define BOOST_SERIALIZATION_VOID_CAST_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// void_cast.hpp:   interface for run-time casting of void pointers.
+
+// (C) Copyright 2002-2009 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// gennadiy.rozental at tfn.com
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // for ptrdiff_t
+#include <boost/config.hpp>
+#include <boost/noncopyable.hpp>
+
+#include <boost/serialization/smart_cast.hpp>
+#include <boost/serialization/singleton.hpp>
+#include <boost/serialization/force_include.hpp>
+#include <boost/serialization/type_info_implementation.hpp>
+#include <boost/serialization/extended_type_info.hpp>
+#include <boost/type_traits/is_virtual_base_of.hpp>
+#include <boost/serialization/void_cast_fwd.hpp>
+
+#include <boost/serialization/config.hpp>
+#include <boost/config/abi_prefix.hpp> // must be the last header
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4251 4231 4660 4275)
+#endif
+
+namespace pdalboost { 
+namespace serialization { 
+
+class extended_type_info;
+
+// Given a void *, assume that it really points to an instance of one type
+// and alter it so that it would point to an instance of a related type.
+// Return the altered pointer. If there exists no sequence of casts that
+// can transform from_type to to_type, return a NULL.  
+
+BOOST_SERIALIZATION_DECL void const *
+void_upcast(
+    extended_type_info const & derived,  
+    extended_type_info const & base, 
+    void const * const t
+);
+
+inline void *
+void_upcast(
+    extended_type_info const & derived,
+    extended_type_info const & base,
+    void * const t 
+){
+    return const_cast<void*>(void_upcast(
+        derived, 
+        base, 
+        const_cast<void const *>(t)
+    ));
+}
+
+BOOST_SERIALIZATION_DECL void const *
+void_downcast(
+    extended_type_info const & derived,  
+    extended_type_info const & base, 
+    void const * const t
+);
+
+inline void *
+void_downcast(
+    extended_type_info const & derived,
+    extended_type_info const & base,
+    void * const t 
+){
+    return const_cast<void*>(void_downcast(
+        derived, 
+        base, 
+        const_cast<void const *>(t)
+    ));
+}
+
+namespace void_cast_detail {
+
+class BOOST_SYMBOL_VISIBLE void_caster :
+    private pdalboost::noncopyable
+{
+    friend 
+    BOOST_SERIALIZATION_DECL void const *
+    pdalboost::serialization::void_upcast(
+        extended_type_info const & derived,
+        extended_type_info const & base,
+        void const * const
+    );
+    friend 
+    BOOST_SERIALIZATION_DECL void const *
+    pdalboost::serialization::void_downcast(
+        extended_type_info const & derived,
+        extended_type_info const & base,
+        void const * const
+    );
+protected:
+    BOOST_SERIALIZATION_DECL void recursive_register(bool includes_virtual_base = false) const;
+    BOOST_SERIALIZATION_DECL void recursive_unregister() const;
+    virtual bool has_virtual_base() const = 0;
+public:
+    // Data members
+    const extended_type_info * m_derived;
+    const extended_type_info * m_base;
+    /*const*/ std::ptrdiff_t m_difference;
+    void_caster const * const m_parent;
+
+    // note that void_casters are keyed on value of
+    // member extended type info records - NOT their
+    // addresses.  This is necessary in order for the
+    // void cast operations to work across dll and exe
+    // module boundries.
+    bool operator<(const void_caster & rhs) const;
+
+    const void_caster & operator*(){
+        return *this;
+    }
+    // each derived class must re-implement these;
+    virtual void const * upcast(void const * const t) const = 0;
+    virtual void const * downcast(void const * const t) const = 0;
+    // Constructor
+    void_caster(
+        extended_type_info const * derived,
+        extended_type_info const * base,
+        std::ptrdiff_t difference = 0,
+        void_caster const * const parent = 0
+    ) :
+        m_derived(derived),
+        m_base(base),
+        m_difference(difference),
+        m_parent(parent)
+    {}
+    virtual ~void_caster(){}
+};
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4251 4231 4660 4275 4511 4512)
+#endif
+
+template <class Derived, class Base>
+class BOOST_SYMBOL_VISIBLE void_caster_primitive :
+    public void_caster
+{
+    virtual void const * downcast(void const * const t) const {
+        const Derived * d = 
+            pdalboost::serialization::smart_cast<const Derived *, const Base *>(
+                static_cast<const Base *>(t)
+            );
+        return d;
+    }
+    virtual void const * upcast(void const * const t) const {
+        const Base * b = 
+            pdalboost::serialization::smart_cast<const Base *, const Derived *>(
+                static_cast<const Derived *>(t)
+            );
+        return b;
+    }
+    virtual bool has_virtual_base() const {
+        return false;
+    }
+public:
+    void_caster_primitive();
+    virtual ~void_caster_primitive();
+};
+
+template <class Derived, class Base>
+void_caster_primitive<Derived, Base>::void_caster_primitive() :
+    void_caster( 
+        & type_info_implementation<Derived>::type::get_const_instance(), 
+        & type_info_implementation<Base>::type::get_const_instance(),
+        // note:I wanted to displace from 0 here, but at least one compiler
+        // treated 0 by not shifting it at all.
+        reinterpret_cast<std::ptrdiff_t>(
+            static_cast<Derived *>(
+                reinterpret_cast<Base *>(8)
+            )
+        ) - 8
+    )
+{
+    recursive_register();
+}
+
+template <class Derived, class Base>
+void_caster_primitive<Derived, Base>::~void_caster_primitive(){
+    recursive_unregister();
+}
+
+template <class Derived, class Base>
+class BOOST_SYMBOL_VISIBLE void_caster_virtual_base :
+    public void_caster
+{
+    virtual bool has_virtual_base() const {
+        return true;
+    }
+public:
+    virtual void const * downcast(void const * const t) const {
+        const Derived * d = 
+            dynamic_cast<const Derived *>(
+                static_cast<const Base *>(t)
+            );
+        return d;
+    }
+    virtual void const * upcast(void const * const t) const {
+        const Base * b = 
+            dynamic_cast<const Base *>(
+                static_cast<const Derived *>(t)
+            );
+        return b;
+    }
+    void_caster_virtual_base();
+    virtual ~void_caster_virtual_base();
+};
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+template <class Derived, class Base>
+void_caster_virtual_base<Derived,Base>::void_caster_virtual_base() :
+    void_caster( 
+        & (type_info_implementation<Derived>::type::get_const_instance()), 
+        & (type_info_implementation<Base>::type::get_const_instance())
+    )
+{
+    recursive_register(true);
+}
+
+template <class Derived, class Base>
+void_caster_virtual_base<Derived,Base>::~void_caster_virtual_base(){
+    recursive_unregister();
+}
+
+template <class Derived, class Base>
+struct BOOST_SYMBOL_VISIBLE void_caster_base :
+    public void_caster
+{
+    typedef
+        typename mpl::eval_if<pdalboost::is_virtual_base_of<Base,Derived>,
+            mpl::identity<
+                void_cast_detail::void_caster_virtual_base<Derived, Base>
+            >
+        ,// else
+            mpl::identity<
+                void_cast_detail::void_caster_primitive<Derived, Base>
+            >
+        >::type type;
+};
+
+} // void_cast_detail 
+
+template<class Derived, class Base>
+BOOST_DLLEXPORT 
+inline const void_cast_detail::void_caster & void_cast_register(
+    Derived const * /* dnull = NULL */, 
+    Base const * /* bnull = NULL */
+){
+    typedef
+        typename mpl::eval_if<pdalboost::is_virtual_base_of<Base,Derived>,
+            mpl::identity<
+                void_cast_detail::void_caster_virtual_base<Derived, Base>
+            >
+        ,// else
+            mpl::identity<
+                void_cast_detail::void_caster_primitive<Derived, Base>
+            >
+        >::type typex;
+    return singleton<typex>::get_const_instance();
+}
+
+template<class Derived, class Base>
+class BOOST_SYMBOL_VISIBLE void_caster :
+    public void_cast_detail::void_caster_base<Derived, Base>::type
+{
+};
+
+} // namespace serialization
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC  
+#  pragma warning(pop)  
+#endif
+
+#include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
+
+#endif // BOOST_SERIALIZATION_VOID_CAST_HPP
diff --git a/vendor/pdalboost/boost/serialization/void_cast_fwd.hpp b/vendor/pdalboost/boost/serialization/void_cast_fwd.hpp
new file mode 100644
index 0000000..8735c8f
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/void_cast_fwd.hpp
@@ -0,0 +1,37 @@
+#ifndef  BOOST_SERIALIZATION_VOID_CAST_FWD_HPP
+#define BOOST_SERIALIZATION_VOID_CAST_FWD_HPP
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// void_cast_fwd.hpp:   interface for run-time casting of void pointers.
+
+// (C) Copyright 2005 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// gennadiy.rozental at tfn.com
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // NULL
+#include <boost/serialization/force_include.hpp>
+
+namespace pdalboost {
+namespace serialization {
+namespace void_cast_detail{
+class void_caster;
+} // namespace void_cast_detail
+template<class Derived, class Base>
+BOOST_DLLEXPORT 
+inline const void_cast_detail::void_caster & void_cast_register(
+    const Derived * dnull = NULL, 
+    const Base * bnull = NULL
+) BOOST_USED;
+} // namespace serialization
+} // namespace pdalboost
+
+#endif // BOOST_SERIALIZATION_VOID_CAST_HPP
diff --git a/vendor/pdalboost/boost/serialization/wrapper.hpp b/vendor/pdalboost/boost/serialization/wrapper.hpp
new file mode 100644
index 0000000..4ec68b0
--- /dev/null
+++ b/vendor/pdalboost/boost/serialization/wrapper.hpp
@@ -0,0 +1,60 @@
+#ifndef BOOST_SERIALIZATION_WRAPPER_HPP
+#define BOOST_SERIALIZATION_WRAPPER_HPP
+
+// (C) Copyright 2005-2006 Matthias Troyer
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/serialization/traits.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/bool.hpp>
+
+namespace pdalboost { namespace serialization {
+
+/// the base class for serialization wrappers
+///
+/// wrappers need to be treated differently at various places in the serialization library,
+/// e.g. saving of non-const wrappers has to be possible. Since partial specialization
+// is not supported by all compilers, we derive all wrappers from wrapper_traits. 
+
+template<
+    class T, 
+    int Level = object_serializable, 
+    int Tracking = track_never,
+    unsigned int Version = 0,
+    class ETII = extended_type_info_impl< T >
+>
+struct wrapper_traits : 
+    public traits<T,Level,Tracking,Version,ETII,mpl::true_> 
+{};
+
+template<class T>
+struct is_wrapper_impl :
+    pdalboost::mpl::eval_if<
+      pdalboost::is_base_and_derived<basic_traits,T>,
+      pdalboost::mpl::true_,
+      pdalboost::mpl::false_
+    >::type
+{};
+
+template<class T>
+struct is_wrapper {
+    typedef typename is_wrapper_impl<const T>::type type;
+};
+
+} // serialization
+} // boost
+
+// A macro to define that a class is a wrapper
+#define BOOST_CLASS_IS_WRAPPER(T)                       \
+namespace pdalboost {                                       \
+namespace serialization {                               \
+template<>                                              \
+struct is_wrapper_impl<const T> : pdalboost::mpl::true_ {}; \
+}                                                       \
+}                                                       \
+/**/
+
+#endif //BOOST_SERIALIZATION_WRAPPER_HPP
diff --git a/vendor/pdalboost/boost/shared_array.hpp b/vendor/pdalboost/boost/shared_array.hpp
new file mode 100644
index 0000000..0700ce4
--- /dev/null
+++ b/vendor/pdalboost/boost/shared_array.hpp
@@ -0,0 +1,19 @@
+#ifndef BOOST_SHARED_ARRAY_HPP_INCLUDED
+#define BOOST_SHARED_ARRAY_HPP_INCLUDED
+
+//
+//  shared_array.hpp
+//
+//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+//  Copyright (c) 2001, 2002 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/smart_ptr/shared_array.htm for documentation.
+//
+
+#include <boost/smart_ptr/shared_array.hpp>
+
+#endif  // #ifndef BOOST_SHARED_ARRAY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/shared_ptr.hpp b/vendor/pdalboost/boost/shared_ptr.hpp
new file mode 100644
index 0000000..d31978c
--- /dev/null
+++ b/vendor/pdalboost/boost/shared_ptr.hpp
@@ -0,0 +1,19 @@
+#ifndef BOOST_SHARED_PTR_HPP_INCLUDED
+#define BOOST_SHARED_PTR_HPP_INCLUDED
+
+//
+//  shared_ptr.hpp
+//
+//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+//  Copyright (c) 2001-2008 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/smart_ptr/shared_ptr.htm for documentation.
+//
+
+#include <boost/smart_ptr/shared_ptr.hpp>
+
+#endif  // #ifndef BOOST_SHARED_PTR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr.hpp b/vendor/pdalboost/boost/smart_ptr.hpp
new file mode 100644
index 0000000..b5e569d
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr.hpp
@@ -0,0 +1,31 @@
+#ifndef BOOST_SMART_PTR_HPP_INCLUDED
+#define BOOST_SMART_PTR_HPP_INCLUDED
+
+//
+//  smart_ptr.hpp
+//
+//  For convenience, this header includes the rest of the smart
+//  pointer library headers.
+//
+//  Copyright (c) 2003 Peter Dimov  Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+//  http://www.boost.org/libs/smart_ptr/smart_ptr.htm
+//
+
+#include <boost/config.hpp>
+
+#include <boost/scoped_ptr.hpp>
+#include <boost/scoped_array.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/shared_array.hpp>
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES) || defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+# include <boost/weak_ptr.hpp>
+# include <boost/intrusive_ptr.hpp>
+# include <boost/enable_shared_from_this.hpp>
+# include <boost/make_shared.hpp>
+#endif
+
+#endif // #ifndef BOOST_SMART_PTR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/allocate_shared_array.hpp b/vendor/pdalboost/boost/smart_ptr/allocate_shared_array.hpp
new file mode 100644
index 0000000..c5ab2bd
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/allocate_shared_array.hpp
@@ -0,0 +1,181 @@
+/*
+ * Copyright (c) 2012-2014 Glen Joseph Fernandes
+ * glenfe at live dot com
+ *
+ * Distributed under the Boost Software License,
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt
+ * or copy at http://boost.org/LICENSE_1_0.txt)
+ */
+#ifndef BOOST_SMART_PTR_ALLOCATE_SHARED_ARRAY_HPP
+#define BOOST_SMART_PTR_ALLOCATE_SHARED_ARRAY_HPP
+
+#include <boost/smart_ptr/detail/array_count_impl.hpp>
+#include <boost/smart_ptr/detail/sp_if_array.hpp>
+
+namespace pdalboost {
+    template<class T, class A>
+    inline typename pdalboost::detail::sp_if_array<T>::type
+    allocate_shared(const A& allocator, std::size_t size) {
+        typedef typename pdalboost::detail::array_inner<T>::type T1;
+        typedef typename pdalboost::detail::array_base<T1>::type T2;
+        typedef pdalboost::detail::ms_init_tag R1;
+        typedef pdalboost::detail::as_allocator<A, T, R1> A1;
+        typedef pdalboost::detail::ms_in_allocator_tag D1;
+        std::size_t n1 = size * pdalboost::detail::array_total<T1>::size;
+        T1* p1 = 0;
+        T2* p2 = 0;
+        D1 d1;
+        A1 a1(allocator, size, &p2);
+        shared_ptr<T> s1(p1, d1, a1);
+        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+        a2->set(0);
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+        pdalboost::detail::as_init(allocator, p2, n1);
+#else
+        pdalboost::detail::ms_init(p2, n1);
+#endif
+        a2->set(p2);
+        p1 = reinterpret_cast<T1*>(p2);
+        return shared_ptr<T>(s1, p1);
+    }
+
+    template<class T, class A>
+    inline typename pdalboost::detail::sp_if_size_array<T>::type
+    allocate_shared(const A& allocator) {
+        typedef typename pdalboost::detail::array_inner<T>::type T1;
+        typedef typename pdalboost::detail::array_base<T1>::type T2;
+        typedef pdalboost::detail::ms_init_tag R1;
+        typedef pdalboost::detail::as_allocator<A, T, R1> A1;
+        typedef pdalboost::detail::ms_in_allocator_tag D1;
+        enum {
+            N = pdalboost::detail::array_total<T>::size
+        };
+        T1* p1 = 0;
+        T2* p2 = 0;
+        D1 d1;
+        A1 a1(allocator, &p2);
+        shared_ptr<T> s1(p1, d1, a1);
+        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+        a2->set(0);
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+        pdalboost::detail::as_init(allocator, p2, N);
+#else
+        pdalboost::detail::ms_init(p2, N);
+#endif
+        a2->set(p2);
+        p1 = reinterpret_cast<T1*>(p2);
+        return shared_ptr<T>(s1, p1);
+    }
+
+    template<class T, class A>
+    inline typename pdalboost::detail::sp_if_array<T>::type
+    allocate_shared(const A& allocator, std::size_t size,
+        const typename pdalboost::detail::array_inner<T>::type& value) {
+        typedef typename pdalboost::detail::array_inner<T>::type T1;
+        typedef typename pdalboost::detail::array_base<T1>::type T2;
+        typedef const T2 T3;
+        typedef pdalboost::detail::ms_init_tag R1;
+        typedef pdalboost::detail::as_allocator<A, T, R1> A1;
+        typedef pdalboost::detail::ms_in_allocator_tag D1;
+        enum {
+            M = pdalboost::detail::array_total<T1>::size
+        };
+        std::size_t n1 = M * size;
+        T1* p1 = 0;
+        T2* p2 = 0;
+        T3* p3 = reinterpret_cast<T3*>(&value);
+        D1 d1;
+        A1 a1(allocator, size, &p2);
+        shared_ptr<T> s1(p1, d1, a1);
+        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+        a2->set(0);
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+        pdalboost::detail::as_init<T2, A, M>(allocator, p2, n1, p3);
+#else
+        pdalboost::detail::ms_init<T2, M>(p2, n1, p3);
+#endif
+        a2->set(p2);
+        p1 = reinterpret_cast<T1*>(p2);
+        return shared_ptr<T>(s1, p1);
+    }
+
+    template<class T, class A>
+    inline typename pdalboost::detail::sp_if_size_array<T>::type
+    allocate_shared(const A& allocator, 
+        const typename pdalboost::detail::array_inner<T>::type& value) {
+        typedef typename pdalboost::detail::array_inner<T>::type T1;
+        typedef typename pdalboost::detail::array_base<T1>::type T2;
+        typedef const T2 T3;
+        typedef pdalboost::detail::ms_init_tag R1;
+        typedef pdalboost::detail::as_allocator<A, T, R1> A1;
+        typedef pdalboost::detail::ms_in_allocator_tag D1;
+        enum {
+            N = pdalboost::detail::array_total<T>::size,
+            M = pdalboost::detail::array_total<T1>::size
+        };
+        T1* p1 = 0;
+        T2* p2 = 0;
+        T3* p3 = reinterpret_cast<T3*>(&value);
+        D1 d1;
+        A1 a1(allocator, &p2);
+        shared_ptr<T> s1(p1, d1, a1);
+        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+        a2->set(0);
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+        pdalboost::detail::as_init<T2, A, M>(allocator, p2, N, p3);
+#else
+        pdalboost::detail::ms_init<T2,  M>(p2, N, p3);
+#endif
+        a2->set(p2);
+        p1 = reinterpret_cast<T1*>(p2);
+        return shared_ptr<T>(s1, p1);
+    }
+
+    template<class T, class A>
+    inline typename pdalboost::detail::sp_if_array<T>::type
+    allocate_shared_noinit(const A& allocator, std::size_t size) {
+        typedef typename pdalboost::detail::array_inner<T>::type T1;
+        typedef typename pdalboost::detail::array_base<T1>::type T2;
+        typedef pdalboost::detail::ms_noinit_tag R1;
+        typedef pdalboost::detail::as_allocator<A, T, R1> A1;
+        typedef pdalboost::detail::ms_in_allocator_tag D1;
+        std::size_t n1 = size * pdalboost::detail::array_total<T1>::size;
+        T1* p1 = 0;
+        T2* p2 = 0;
+        D1 d1;
+        A1 a1(allocator, size, &p2);
+        shared_ptr<T> s1(p1, d1, a1);
+        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+        a2->set(0);
+        pdalboost::detail::ms_noinit(p2, n1);
+        a2->set(p2);
+        p1 = reinterpret_cast<T1*>(p2);
+        return shared_ptr<T>(s1, p1);
+    }
+
+    template<class T, class A>
+    inline typename pdalboost::detail::sp_if_size_array<T>::type
+    allocate_shared_noinit(const A& allocator) {
+        typedef typename pdalboost::detail::array_inner<T>::type T1;
+        typedef typename pdalboost::detail::array_base<T1>::type T2;
+        typedef pdalboost::detail::ms_noinit_tag R1;
+        typedef pdalboost::detail::as_allocator<A, T, R1> A1;
+        typedef pdalboost::detail::ms_in_allocator_tag D1;
+        enum {
+            N = pdalboost::detail::array_total<T>::size
+        };
+        T1* p1 = 0;
+        T2* p2 = 0;
+        D1 d1;
+        A1 a1(allocator, &p2);
+        shared_ptr<T> s1(p1, d1, a1);
+        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+        a2->set(0);
+        pdalboost::detail::ms_noinit(p2, N);
+        a2->set(p2);
+        p1 = reinterpret_cast<T1*>(p2);
+        return shared_ptr<T>(s1, p1);
+    }
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/smart_ptr/bad_weak_ptr.hpp b/vendor/pdalboost/boost/smart_ptr/bad_weak_ptr.hpp
new file mode 100644
index 0000000..92121c8
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/bad_weak_ptr.hpp
@@ -0,0 +1,59 @@
+#ifndef BOOST_SMART_PTR_BAD_WEAK_PTR_HPP_INCLUDED
+#define BOOST_SMART_PTR_BAD_WEAK_PTR_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  boost/smart_ptr/bad_weak_ptr.hpp
+//
+//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <exception>
+
+#ifdef __BORLANDC__
+# pragma warn -8026     // Functions with excep. spec. are not expanded inline
+#endif
+
+namespace pdalboost
+{
+
+// The standard library that comes with Borland C++ 5.5.1, 5.6.4
+// defines std::exception and its members as having C calling
+// convention (-pc). When the definition of bad_weak_ptr
+// is compiled with -ps, the compiler issues an error.
+// Hence, the temporary #pragma option -pc below.
+
+#if defined(__BORLANDC__) && __BORLANDC__ <= 0x564
+# pragma option push -pc
+#endif
+
+class bad_weak_ptr: public std::exception
+{
+public:
+
+    virtual char const * what() const throw()
+    {
+        return "tr1::bad_weak_ptr";
+    }
+};
+
+#if defined(__BORLANDC__) && __BORLANDC__ <= 0x564
+# pragma option pop
+#endif
+
+} // namespace pdalboost
+
+#ifdef __BORLANDC__
+# pragma warn .8026     // Functions with excep. spec. are not expanded inline
+#endif
+
+#endif  // #ifndef BOOST_SMART_PTR_BAD_WEAK_PTR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/array_allocator.hpp b/vendor/pdalboost/boost/smart_ptr/detail/array_allocator.hpp
new file mode 100644
index 0000000..590f189
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/array_allocator.hpp
@@ -0,0 +1,318 @@
+/*
+ * Copyright (c) 2012-2014 Glen Joseph Fernandes 
+ * glenfe at live dot com
+ *
+ * Distributed under the Boost Software License, 
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt 
+ * or copy at http://boost.org/LICENSE_1_0.txt)
+ */
+#ifndef BOOST_SMART_PTR_DETAIL_ARRAY_ALLOCATOR_HPP
+#define BOOST_SMART_PTR_DETAIL_ARRAY_ALLOCATOR_HPP
+
+#include <boost/align/align.hpp>
+#include <boost/smart_ptr/detail/array_traits.hpp>
+#include <boost/smart_ptr/detail/array_utility.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+
+namespace pdalboost {
+    namespace detail {
+        struct ms_init_tag   { };
+        struct ms_noinit_tag { };
+
+        template<class T>
+        struct ms_allocator_state;
+
+        template<class T>
+        struct ms_allocator_state<T[]> {
+            typedef typename array_base<T>::type type;
+
+            ms_allocator_state(std::size_t size_,
+                type** result_)
+                : size(size_ * array_total<T>::size),
+                  result(result_) {
+            }
+
+            std::size_t size;
+
+            union {
+                type** result;
+                type* object;
+            };
+        };
+
+        template<class T, std::size_t N>
+        struct ms_allocator_state<T[N]> {
+            typedef typename array_base<T>::type type;
+
+            ms_allocator_state(type** result_)
+                : result(result_) {
+            }
+
+            enum {
+                size = array_total<T[N]>::size
+            };
+
+            union {
+                type** result;
+                type* object;
+            };
+        };
+
+        template<class A, class T, class R>
+        class as_allocator
+            : public A {
+            template<class A_, class T_, class R_>
+            friend class as_allocator;
+
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+            typedef std::allocator_traits<A> AT;
+            typedef typename AT::template rebind_alloc<char> CA;
+            typedef typename AT::template rebind_traits<char> CT;
+#else
+            typedef typename A::template rebind<char>::other CA;
+#endif
+
+        public:
+            typedef A allocator_type;
+
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+            typedef typename AT::value_type value_type;
+            typedef typename AT::pointer pointer;
+            typedef typename AT::const_pointer const_pointer;
+            typedef typename AT::void_pointer void_pointer;
+            typedef typename AT::const_void_pointer const_void_pointer;
+            typedef typename AT::size_type size_type;
+            typedef typename AT::difference_type difference_type;
+#else
+            typedef typename A::value_type value_type;
+            typedef typename A::pointer pointer;
+            typedef typename A::const_pointer const_pointer;
+            typedef typename A::size_type size_type;
+            typedef typename A::difference_type difference_type;
+            typedef typename A::reference reference;
+            typedef typename A::const_reference const_reference;
+            typedef void* void_pointer;
+            typedef const void* const_void_pointer;
+#endif
+
+            template<class U>
+            struct rebind {
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+                typedef as_allocator<typename AT::
+                    template rebind_alloc<U>, T, R> other;
+#else
+                typedef as_allocator<typename A::
+                    template rebind<U>::other, T, R> other;
+#endif
+            };
+
+            typedef typename array_base<T>::type type;
+
+            as_allocator(const A& allocator_, type** result)
+                : A(allocator_),
+                  data(result) {
+            }
+
+            as_allocator(const A& allocator_, std::size_t size,
+                type** result)
+                : A(allocator_),
+                  data(size, result) {
+            }
+
+            template<class U>
+            as_allocator(const as_allocator<U, T, R>& other)
+                : A(other.allocator()),
+                  data(other.data) {
+            }
+
+            pointer allocate(size_type count, const_void_pointer = 0) {
+                enum {
+                    M = pdalboost::alignment_of<type>::value
+                };
+                std::size_t n1 = count * sizeof(value_type);
+                std::size_t n2 = data.size * sizeof(type);
+                std::size_t n3 = n2 + M;
+                CA ca(allocator());
+                void* p1 = ca.allocate(n1 + n3);
+                void* p2 = static_cast<char*>(p1) + n1;
+                (void)pdalboost::alignment::align(M, n2, p2, n3);
+                *data.result = static_cast<type*>(p2);
+                return static_cast<value_type*>(p1);
+            }
+
+            void deallocate(pointer memory, size_type count) {
+                enum {
+                    M = pdalboost::alignment_of<type>::value
+                };
+                std::size_t n1 = count * sizeof(value_type);
+                std::size_t n2 = data.size * sizeof(type) + M;
+                char* p1 = reinterpret_cast<char*>(memory);
+                CA ca(allocator());
+                ca.deallocate(p1, n1 + n2);
+            }
+
+            const A& allocator() const {
+                return static_cast<const A&>(*this);
+            }
+
+            A& allocator() {
+                return static_cast<A&>(*this);
+            }
+
+            void set(type* memory) {
+                data.object = memory;
+            }
+
+            void operator()() {
+                if (data.object) {
+                    R tag;
+                    release(tag);
+                }
+            }
+
+        private:
+            void release(ms_init_tag) {
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+                as_destroy(allocator(), data.object, data.size);
+#else
+                ms_destroy(data.object, data.size);
+#endif
+            }
+
+            void release(ms_noinit_tag) {
+                ms_destroy(data.object, data.size);
+            }
+
+            ms_allocator_state<T> data;
+        };
+
+        template<class A1, class A2, class T, class R>
+        bool operator==(const as_allocator<A1, T, R>& a1,
+            const as_allocator<A2, T, R>& a2) {
+            return a1.allocator() == a2.allocator();
+        }
+
+        template<class A1, class A2, class T, class R>
+        bool operator!=(const as_allocator<A1, T, R>& a1,
+            const as_allocator<A2, T, R>& a2) {
+            return a1.allocator() != a2.allocator();
+        }
+
+        template<class T, class Y = char>
+        class ms_allocator;
+
+        template<class T, class Y>
+        class ms_allocator {
+            template<class T_, class Y_>
+            friend class ms_allocator;
+
+        public:
+            typedef typename array_base<T>::type type;
+
+            typedef Y value_type;
+            typedef Y* pointer;
+            typedef const Y* const_pointer;
+            typedef std::size_t size_type;
+            typedef std::ptrdiff_t difference_type;
+            typedef Y& reference;
+            typedef const Y& const_reference;
+
+            template<class U>
+            struct rebind {
+                typedef ms_allocator<T, U> other;
+            };
+
+            ms_allocator(type** result)
+                : data(result) {
+            }
+
+            ms_allocator(std::size_t size, type** result)
+                : data(size, result) {
+            }
+
+            template<class U>
+            ms_allocator(const ms_allocator<T, U>& other)
+                : data(other.data) {
+            }
+
+            pointer allocate(size_type count, const void* = 0) {
+                enum {
+                    M = pdalboost::alignment_of<type>::value
+                };
+                std::size_t n1 = count * sizeof(Y);
+                std::size_t n2 = data.size * sizeof(type);
+                std::size_t n3 = n2 + M;
+                void* p1 = ::operator new(n1 + n3);
+                void* p2 = static_cast<char*>(p1) + n1;
+                (void)pdalboost::alignment::align(M, n2, p2, n3);
+                *data.result = static_cast<type*>(p2);
+                return static_cast<Y*>(p1);
+            }
+
+            void deallocate(pointer memory, size_type) {
+                void* p1 = memory;
+                ::operator delete(p1);
+            }
+
+#if defined(BOOST_NO_CXX11_ALLOCATOR)
+            pointer address(reference value) const {
+                return &value;
+            }
+
+            const_pointer address(const_reference value) const {
+                return &value;
+            }
+
+            size_type max_size() const {
+                enum {
+                    N = static_cast<std::size_t>(-1) / sizeof(Y)
+                };
+                return N;
+            }
+
+            void construct(pointer memory, const_reference value) {
+                void* p1 = memory;
+                ::new(p1) Y(value);
+            }
+
+            void destroy(pointer memory) {
+                (void)memory;
+                memory->~Y();
+            }
+#endif
+
+            void set(type* memory) {
+                data.object = memory;
+            }
+
+            void operator()() {
+                if (data.object) {
+                    ms_destroy(data.object, data.size);
+                }
+            }
+
+        private:
+            ms_allocator_state<T> data;
+        };
+
+        template<class T, class Y1, class Y2>
+        bool operator==(const ms_allocator<T, Y1>&,
+            const ms_allocator<T, Y2>&) {
+            return true;
+        }
+
+        template<class T, class Y1, class Y2>
+        bool operator!=(const ms_allocator<T, Y1>&,
+            const ms_allocator<T, Y2>&) {
+            return false;
+        }
+
+        class ms_in_allocator_tag {
+        public:
+            void operator()(const void*) {
+            }
+        };
+    }
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/array_count_impl.hpp b/vendor/pdalboost/boost/smart_ptr/detail/array_count_impl.hpp
new file mode 100644
index 0000000..bc9bde6
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/array_count_impl.hpp
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2014 Glen Joseph Fernandes 
+ * glenfe at live dot com
+ *
+ * Distributed under the Boost Software License, 
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt 
+ * or copy at http://boost.org/LICENSE_1_0.txt)
+ */
+#ifndef BOOST_SMART_PTR_DETAIL_ARRAY_COUNT_IMPL_HPP
+#define BOOST_SMART_PTR_DETAIL_ARRAY_COUNT_IMPL_HPP
+
+#include <boost/smart_ptr/detail/array_allocator.hpp>
+#include <boost/smart_ptr/detail/sp_counted_impl.hpp>
+
+namespace pdalboost {
+    namespace detail {
+        template<class P, class A>
+        class sp_counted_impl_pda<P, ms_in_allocator_tag, A>
+            : public sp_counted_base {
+            typedef ms_in_allocator_tag D;
+            typedef sp_counted_impl_pda<P, D, A> Y;
+        public:
+            sp_counted_impl_pda(P, D, const A& allocator_)
+                : allocator(allocator_) {
+            }
+
+            virtual void dispose() {
+                allocator();
+            }
+
+            virtual void destroy() {
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+                typedef typename std::allocator_traits<A>::
+                    template rebind_alloc<Y> YA;
+                typedef typename std::allocator_traits<A>::
+                    template rebind_traits<Y> YT;
+#else
+                typedef typename A::template rebind<Y>::other YA;
+#endif
+                YA a1(allocator);
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+                YT::destroy(a1, this);
+                YT::deallocate(a1, this, 1);
+#else
+                this->~Y();
+                a1.deallocate(this, 1);
+#endif                
+            }
+
+            virtual void* get_deleter(const sp_typeinfo&) {
+                return &reinterpret_cast<char&>(allocator);
+            }
+
+            virtual void* get_untyped_deleter() {
+                return &reinterpret_cast<char&>(allocator);
+            }
+
+        private:
+            sp_counted_impl_pda(const sp_counted_impl_pda&);
+            sp_counted_impl_pda& operator=(const sp_counted_impl_pda&);
+
+            A allocator;
+        };
+    }
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/array_traits.hpp b/vendor/pdalboost/boost/smart_ptr/detail/array_traits.hpp
new file mode 100644
index 0000000..3c8222a
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/array_traits.hpp
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2012-2014 Glen Joseph Fernandes 
+ * glenfe at live dot com
+ *
+ * Distributed under the Boost Software License, 
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt 
+ * or copy at http://boost.org/LICENSE_1_0.txt)
+ */
+#ifndef BOOST_SMART_PTR_DETAIL_ARRAY_TRAITS_HPP
+#define BOOST_SMART_PTR_DETAIL_ARRAY_TRAITS_HPP
+
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace pdalboost {
+    namespace detail {
+        template<class T>
+        struct array_base {
+            typedef typename pdalboost::remove_cv<T>::type type;
+        };
+
+        template<class T>
+        struct array_base<T[]> {
+            typedef typename array_base<T>::type type;
+        };
+
+        template<class T, std::size_t N>
+        struct array_base<T[N]> {
+            typedef typename array_base<T>::type type;
+        };
+
+        template<class T>
+        struct array_total {
+            enum {
+                size = 1
+            };
+        };
+
+        template<class T, std::size_t N>
+        struct array_total<T[N]> {
+            enum {
+                size = N * array_total<T>::size
+            };
+        };
+
+        template<class T>
+        struct array_inner;
+
+        template<class T>
+        struct array_inner<T[]> {
+            typedef T type;
+        };
+
+        template<class T, std::size_t N>
+        struct array_inner<T[N]> {
+            typedef T type;
+        };
+    }
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/array_utility.hpp b/vendor/pdalboost/boost/smart_ptr/detail/array_utility.hpp
new file mode 100644
index 0000000..c1c3aea
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/array_utility.hpp
@@ -0,0 +1,214 @@
+/*
+ * Copyright (c) 2012-2014 Glen Joseph Fernandes
+ * glenfe at live dot com
+ *
+ * Distributed under the Boost Software License,
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt
+ * or copy at http://boost.org/LICENSE_1_0.txt)
+ */
+#ifndef BOOST_SMART_PTR_DETAIL_ARRAY_UTILITY_HPP
+#define BOOST_SMART_PTR_DETAIL_ARRAY_UTILITY_HPP
+
+#include <boost/config.hpp>
+#include <boost/type_traits/has_trivial_constructor.hpp>
+#include <boost/type_traits/has_trivial_destructor.hpp>
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+#include <memory>
+#endif
+
+namespace pdalboost {
+    namespace detail {
+        typedef pdalboost::true_type  ms_is_trivial;
+        typedef pdalboost::false_type ms_no_trivial;
+
+        template<class T>
+        inline void ms_destroy(T*, std::size_t, ms_is_trivial) {
+        }
+
+        template<class T>
+        inline void ms_destroy(T* memory, std::size_t size, ms_no_trivial) {
+            for (std::size_t i = size; i > 0;) {
+                memory[--i].~T();
+            }
+        }
+
+        template<class T>
+        inline void ms_destroy(T* memory, std::size_t size) {
+            pdalboost::has_trivial_destructor<T> trivial;
+            ms_destroy(memory, size, trivial);
+        }
+
+        template<class T>
+        inline void ms_init(T* memory, std::size_t size, ms_is_trivial) {
+            for (std::size_t i = 0; i < size; i++) {
+                void* p1 = memory + i;
+                ::new(p1) T();
+            }
+        }
+
+        template<class T>
+        inline void ms_init(T* memory, std::size_t size, ms_no_trivial) {
+#if !defined(BOOST_NO_EXCEPTIONS)
+            std::size_t i = 0;
+            try {
+                for (; i < size; i++) {
+                    void* p1 = memory + i;
+                    ::new(p1) T();
+                }
+            } catch (...) {
+                ms_destroy(memory, i);
+                throw;
+            }
+#else
+            for (std::size_t i = 0; i < size; i++) {
+                void* p1 = memory + i;
+                ::new(p1) T();
+            }
+#endif
+        }
+
+        template<class T>
+        inline void ms_init(T* memory, std::size_t size) {
+            pdalboost::has_trivial_default_constructor<T> trivial;
+            ms_init(memory, size, trivial);
+        }
+
+        template<class T, std::size_t N>
+        inline void ms_init(T* memory, std::size_t size, const T* list) {
+#if !defined(BOOST_NO_EXCEPTIONS)
+            std::size_t i = 0;
+            try {
+                for (; i < size; i++) {
+                    void* p1 = memory + i;
+                    ::new(p1) T(list[i % N]);
+                }
+            } catch (...) {
+                ms_destroy(memory, i);
+                throw;
+            }
+#else
+            for (std::size_t i = 0; i < size; i++) {
+                void* p1 = memory + i;
+                ::new(p1) T(list[i % N]);
+            }
+#endif
+        }
+
+#if !defined(BOOST_NO_CXX11_ALLOCATOR)
+        template<class T, class A>
+        inline void as_destroy(const A& allocator, T* memory,
+            std::size_t size) {
+            typedef typename std::allocator_traits<A>::
+                template rebind_alloc<T> TA;
+            typedef typename std::allocator_traits<A>::
+                template rebind_traits<T> TT;
+            TA a2(allocator);
+            for (std::size_t i = size; i > 0;) {
+                TT::destroy(a2, &memory[--i]);
+            }
+        }
+
+        template<class T, class A>
+        inline void as_init(const A& allocator, T* memory, std::size_t size,
+            ms_is_trivial) {
+            typedef typename std::allocator_traits<A>::
+                template rebind_alloc<T> TA;
+            typedef typename std::allocator_traits<A>::
+                template rebind_traits<T> TT;
+            TA a2(allocator);
+            for (std::size_t i = 0; i < size; i++) {
+                TT::construct(a2, memory + i);
+            }
+        }
+
+        template<class T, class A>
+        inline void as_init(const A& allocator, T* memory, std::size_t size,
+            ms_no_trivial) {
+            typedef typename std::allocator_traits<A>::
+                template rebind_alloc<T> TA;
+            typedef typename std::allocator_traits<A>::
+                template rebind_traits<T> TT;
+            TA a2(allocator);
+#if !defined(BOOST_NO_EXCEPTIONS)
+            std::size_t i = 0;
+            try {
+                for (; i < size; i++) {
+                    TT::construct(a2, memory + i);
+                }
+            } catch (...) {
+                as_destroy(a2, memory, i);
+                throw;
+            }
+#else
+            for (std::size_t i = 0; i < size; i++) {
+                TT::construct(a2, memory + i);
+            }
+#endif
+        }
+
+        template<class T, class A>
+        inline void as_init(const A& allocator, T* memory, std::size_t size) {
+            pdalboost::has_trivial_default_constructor<T> trivial;
+            as_init(allocator, memory, size, trivial);
+        }
+
+        template<class T, class A, std::size_t N>
+        inline void as_init(const A& allocator, T* memory, std::size_t size,
+            const T* list) {
+            typedef typename std::allocator_traits<A>::
+                template rebind_alloc<T> TA;
+            typedef typename std::allocator_traits<A>::
+                template rebind_traits<T> TT;
+            TA a2(allocator);
+#if !defined(BOOST_NO_EXCEPTIONS)
+            std::size_t i = 0;
+            try {
+                for (; i < size; i++) {
+                    TT::construct(a2, memory + i, list[i % N]);
+                }
+            } catch (...) {
+                as_destroy(a2, memory, i);
+                throw;
+            }
+#else
+            for (std::size_t i = 0; i < size; i++) {
+                TT::construct(a2, memory + i, list[i % N]);
+            }
+#endif
+        }
+#endif
+
+        template<class T>
+        inline void ms_noinit(T*, std::size_t, ms_is_trivial) {
+        }
+
+        template<class T>
+        inline void ms_noinit(T* memory, std::size_t size, ms_no_trivial) {
+#if !defined(BOOST_NO_EXCEPTIONS)
+            std::size_t i = 0;
+            try {
+                for (; i < size; i++) {
+                    void* p1 = memory + i;
+                    ::new(p1) T;
+                }
+            } catch (...) {
+                ms_destroy(memory, i);
+                throw;
+            }
+#else
+            for (std::size_t i = 0; i < size; i++) {
+                void* p1 = memory + i;
+                ::new(p1) T;
+            }
+#endif
+        }
+
+        template<class T>
+        inline void ms_noinit(T* memory, std::size_t size) {
+            pdalboost::has_trivial_default_constructor<T> trivial;
+            ms_noinit(memory, size, trivial);
+        }
+    }
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/lightweight_mutex.hpp b/vendor/pdalboost/boost/smart_ptr/detail/lightweight_mutex.hpp
new file mode 100644
index 0000000..e9a7c6f
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/lightweight_mutex.hpp
@@ -0,0 +1,42 @@
+#ifndef BOOST_SMART_PTR_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  boost/detail/lightweight_mutex.hpp - lightweight mutex
+//
+//  Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+//  typedef <unspecified> pdalboost::detail::lightweight_mutex;
+//
+//  pdalboost::detail::lightweight_mutex is a header-only implementation of
+//  a subset of the Mutex concept requirements:
+//
+//  http://www.boost.org/doc/html/threads/concepts.html#threads.concepts.Mutex
+//
+//  It maps to a CRITICAL_SECTION on Windows or a pthread_mutex on POSIX.
+//
+
+#include <boost/config.hpp>
+
+#if !defined(BOOST_HAS_THREADS)
+#  include <boost/smart_ptr/detail/lwm_nop.hpp>
+#elif defined(BOOST_HAS_PTHREADS)
+#  include <boost/smart_ptr/detail/lwm_pthreads.hpp>
+#elif defined(BOOST_HAS_WINTHREADS) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+#  include <boost/smart_ptr/detail/lwm_win32_cs.hpp>
+#else
+// Use #define BOOST_DISABLE_THREADS to avoid the error
+#  error Unrecognized threading platform
+#endif
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_LIGHTWEIGHT_MUTEX_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/lwm_nop.hpp b/vendor/pdalboost/boost/smart_ptr/detail/lwm_nop.hpp
new file mode 100644
index 0000000..78a9e01
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/lwm_nop.hpp
@@ -0,0 +1,37 @@
+#ifndef BOOST_SMART_PTR_DETAIL_LWM_NOP_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_LWM_NOP_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  boost/detail/lwm_nop.hpp
+//
+//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+class lightweight_mutex
+{
+public:
+
+    typedef lightweight_mutex scoped_lock;
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_LWM_NOP_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/lwm_pthreads.hpp b/vendor/pdalboost/boost/smart_ptr/detail/lwm_pthreads.hpp
new file mode 100644
index 0000000..53ec6e1
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/lwm_pthreads.hpp
@@ -0,0 +1,87 @@
+#ifndef BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  boost/detail/lwm_pthreads.hpp
+//
+//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/assert.hpp>
+#include <pthread.h>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+class lightweight_mutex
+{
+private:
+
+    pthread_mutex_t m_;
+
+    lightweight_mutex(lightweight_mutex const &);
+    lightweight_mutex & operator=(lightweight_mutex const &);
+
+public:
+
+    lightweight_mutex()
+    {
+
+// HPUX 10.20 / DCE has a nonstandard pthread_mutex_init
+
+#if defined(__hpux) && defined(_DECTHREADS_)
+        BOOST_VERIFY( pthread_mutex_init( &m_, pthread_mutexattr_default ) == 0 );
+#else
+        BOOST_VERIFY( pthread_mutex_init( &m_, 0 ) == 0 );
+#endif
+    }
+
+    ~lightweight_mutex()
+    {
+        BOOST_VERIFY( pthread_mutex_destroy( &m_ ) == 0 );
+    }
+
+    class scoped_lock;
+    friend class scoped_lock;
+
+    class scoped_lock
+    {
+    private:
+
+        pthread_mutex_t & m_;
+
+        scoped_lock(scoped_lock const &);
+        scoped_lock & operator=(scoped_lock const &);
+
+    public:
+
+        scoped_lock(lightweight_mutex & m): m_(m.m_)
+        {
+            BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
+        }
+
+        ~scoped_lock()
+        {
+            BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
+        }
+    };
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/lwm_win32_cs.hpp b/vendor/pdalboost/boost/smart_ptr/detail/lwm_win32_cs.hpp
new file mode 100644
index 0000000..821d386
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/lwm_win32_cs.hpp
@@ -0,0 +1,119 @@
+#ifndef BOOST_SMART_PTR_DETAIL_LWM_WIN32_CS_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_LWM_WIN32_CS_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  boost/detail/lwm_win32_cs.hpp
+//
+//  Copyright (c) 2002, 2003 Peter Dimov
+//  Copyright (c) Microsoft Corporation 2014
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/predef.h>
+
+#ifdef BOOST_USE_WINDOWS_H
+#  include <windows.h>
+#endif
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+#ifndef BOOST_USE_WINDOWS_H
+
+struct critical_section
+{
+    struct critical_section_debug * DebugInfo;
+    long LockCount;
+    long RecursionCount;
+    void * OwningThread;
+    void * LockSemaphore;
+#if defined(_WIN64)
+    unsigned __int64 SpinCount;
+#else
+    unsigned long SpinCount;
+#endif
+};
+
+#if BOOST_PLAT_WINDOWS_RUNTIME
+extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSectionEx(critical_section *, unsigned long, unsigned long);
+#else
+extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(critical_section *);
+#endif
+extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(critical_section *);
+extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(critical_section *);
+extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(critical_section *);
+
+#else
+
+typedef ::CRITICAL_SECTION critical_section;
+
+#endif // #ifndef BOOST_USE_WINDOWS_H
+
+class lightweight_mutex
+{
+private:
+
+    critical_section cs_;
+
+    lightweight_mutex(lightweight_mutex const &);
+    lightweight_mutex & operator=(lightweight_mutex const &);
+
+public:
+
+    lightweight_mutex()
+    {
+#if BOOST_PLAT_WINDOWS_RUNTIME
+        InitializeCriticalSectionEx(&cs_, 4000, 0);
+#else
+        InitializeCriticalSection(&cs_);
+#endif
+    }
+
+    ~lightweight_mutex()
+    {
+        DeleteCriticalSection(&cs_);
+    }
+
+    class scoped_lock;
+    friend class scoped_lock;
+
+    class scoped_lock
+    {
+    private:
+
+        lightweight_mutex & m_;
+
+        scoped_lock(scoped_lock const &);
+        scoped_lock & operator=(scoped_lock const &);
+
+    public:
+
+        explicit scoped_lock(lightweight_mutex & m): m_(m)
+        {
+            EnterCriticalSection(&m_.cs_);
+        }
+
+        ~scoped_lock()
+        {
+            LeaveCriticalSection(&m_.cs_);
+        }
+    };
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_LWM_WIN32_CS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/operator_bool.hpp b/vendor/pdalboost/boost/smart_ptr/detail/operator_bool.hpp
new file mode 100644
index 0000000..c0289b8
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/operator_bool.hpp
@@ -0,0 +1,64 @@
+//  This header intentionally has no include guards.
+//
+//  Copyright (c) 2001-2009, 2012 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+
+#if !defined( BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS ) && !defined( BOOST_NO_CXX11_NULLPTR )\
+    && !(defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x5130))
+
+    explicit operator bool () const BOOST_NOEXCEPT
+    {
+        return px != 0;
+    }
+
+#elif ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, < 0x570) ) || defined(__CINT__)
+
+    operator bool () const BOOST_NOEXCEPT
+    {
+        return px != 0;
+    }
+
+#elif defined( _MANAGED )
+
+    static void unspecified_bool( this_type*** )
+    {
+    }
+
+    typedef void (*unspecified_bool_type)( this_type*** );
+
+    operator unspecified_bool_type() const BOOST_NOEXCEPT
+    {
+        return px == 0? 0: unspecified_bool;
+    }
+
+#elif \
+    ( defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, < 0x3200) ) || \
+    ( defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 304) ) || \
+    ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590) )
+
+    typedef element_type * (this_type::*unspecified_bool_type)() const;
+
+    operator unspecified_bool_type() const BOOST_NOEXCEPT
+    {
+        return px == 0? 0: &this_type::get;
+    }
+
+#else
+
+    typedef element_type * this_type::*unspecified_bool_type;
+
+    operator unspecified_bool_type() const BOOST_NOEXCEPT
+    {
+        return px == 0? 0: &this_type::px;
+    }
+
+#endif
+
+    // operator! is redundant, but some compilers need it
+    bool operator! () const BOOST_NOEXCEPT
+    {
+        return px == 0;
+    }
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/quick_allocator.hpp b/vendor/pdalboost/boost/smart_ptr/detail/quick_allocator.hpp
new file mode 100644
index 0000000..c758b8d
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/quick_allocator.hpp
@@ -0,0 +1,199 @@
+#ifndef BOOST_SMART_PTR_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  detail/quick_allocator.hpp
+//
+//  Copyright (c) 2003 David Abrahams
+//  Copyright (c) 2003 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/config.hpp>
+
+#include <boost/smart_ptr/detail/lightweight_mutex.hpp>
+#include <boost/type_traits/type_with_alignment.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+
+#include <new>              // ::operator new, ::operator delete
+#include <cstddef>          // std::size_t
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+template<unsigned size, unsigned align_> union freeblock
+{
+    typedef typename pdalboost::type_with_alignment<align_>::type aligner_type;
+    aligner_type aligner;
+    char bytes[size];
+    freeblock * next;
+};
+
+template<unsigned size, unsigned align_> struct allocator_impl
+{
+    typedef freeblock<size, align_> block;
+
+    // It may seem odd to use such small pages.
+    //
+    // However, on a typical Windows implementation that uses
+    // the OS allocator, "normal size" pages interact with the
+    // "ordinary" operator new, slowing it down dramatically.
+    //
+    // 512 byte pages are handled by the small object allocator,
+    // and don't interfere with ::new.
+    //
+    // The other alternative is to use much bigger pages (1M.)
+    //
+    // It is surprisingly easy to hit pathological behavior by
+    // varying the page size. g++ 2.96 on Red Hat Linux 7.2,
+    // for example, passionately dislikes 496. 512 seems OK.
+
+#if defined(BOOST_QA_PAGE_SIZE)
+
+    enum { items_per_page = BOOST_QA_PAGE_SIZE / size };
+
+#else
+
+    enum { items_per_page = 512 / size }; // 1048560 / size
+
+#endif
+
+#ifdef BOOST_HAS_THREADS
+
+    static lightweight_mutex & mutex()
+    {
+        static freeblock< sizeof( lightweight_mutex ), pdalboost::alignment_of< lightweight_mutex >::value > fbm;
+        static lightweight_mutex * pm = new( &fbm ) lightweight_mutex;
+        return *pm;
+    }
+
+    static lightweight_mutex * mutex_init;
+
+#endif
+
+    static block * free;
+    static block * page;
+    static unsigned last;
+
+    static inline void * alloc()
+    {
+#ifdef BOOST_HAS_THREADS
+        lightweight_mutex::scoped_lock lock( mutex() );
+#endif
+        if(block * x = free)
+        {
+            free = x->next;
+            return x;
+        }
+        else
+        {
+            if(last == items_per_page)
+            {
+                // "Listen to me carefully: there is no memory leak"
+                // -- Scott Meyers, Eff C++ 2nd Ed Item 10
+                page = ::new block[items_per_page];
+                last = 0;
+            }
+
+            return &page[last++];
+        }
+    }
+
+    static inline void * alloc(std::size_t n)
+    {
+        if(n != size) // class-specific new called for a derived object
+        {
+            return ::operator new(n);
+        }
+        else
+        {
+#ifdef BOOST_HAS_THREADS
+            lightweight_mutex::scoped_lock lock( mutex() );
+#endif
+            if(block * x = free)
+            {
+                free = x->next;
+                return x;
+            }
+            else
+            {
+                if(last == items_per_page)
+                {
+                    page = ::new block[items_per_page];
+                    last = 0;
+                }
+
+                return &page[last++];
+            }
+        }
+    }
+
+    static inline void dealloc(void * pv)
+    {
+        if(pv != 0) // 18.4.1.1/13
+        {
+#ifdef BOOST_HAS_THREADS
+            lightweight_mutex::scoped_lock lock( mutex() );
+#endif
+            block * pb = static_cast<block *>(pv);
+            pb->next = free;
+            free = pb;
+        }
+    }
+
+    static inline void dealloc(void * pv, std::size_t n)
+    {
+        if(n != size) // class-specific delete called for a derived object
+        {
+            ::operator delete(pv);
+        }
+        else if(pv != 0) // 18.4.1.1/13
+        {
+#ifdef BOOST_HAS_THREADS
+            lightweight_mutex::scoped_lock lock( mutex() );
+#endif
+            block * pb = static_cast<block *>(pv);
+            pb->next = free;
+            free = pb;
+        }
+    }
+};
+
+#ifdef BOOST_HAS_THREADS
+
+template<unsigned size, unsigned align_>
+  lightweight_mutex * allocator_impl<size, align_>::mutex_init = &allocator_impl<size, align_>::mutex();
+
+#endif
+
+template<unsigned size, unsigned align_>
+  freeblock<size, align_> * allocator_impl<size, align_>::free = 0;
+
+template<unsigned size, unsigned align_>
+  freeblock<size, align_> * allocator_impl<size, align_>::page = 0;
+
+template<unsigned size, unsigned align_>
+  unsigned allocator_impl<size, align_>::last = allocator_impl<size, align_>::items_per_page;
+
+template<class T>
+struct quick_allocator: public allocator_impl< sizeof(T), pdalboost::alignment_of<T>::value >
+{
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_QUICK_ALLOCATOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/shared_count.hpp b/vendor/pdalboost/boost/smart_ptr/detail/shared_count.hpp
new file mode 100644
index 0000000..126450e
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/shared_count.hpp
@@ -0,0 +1,709 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SHARED_COUNT_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SHARED_COUNT_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  detail/shared_count.hpp
+//
+//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+//  Copyright 2004-2005 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifdef __BORLANDC__
+# pragma warn -8027     // Functions containing try are not expanded inline
+#endif
+
+#include <boost/config.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/smart_ptr/bad_weak_ptr.hpp>
+#include <boost/smart_ptr/detail/sp_counted_base.hpp>
+#include <boost/smart_ptr/detail/sp_counted_impl.hpp>
+#include <boost/smart_ptr/detail/sp_disable_deprecated.hpp>
+#include <boost/detail/workaround.hpp>
+// In order to avoid circular dependencies with Boost.TR1
+// we make sure that our include of <memory> doesn't try to
+// pull in the TR1 headers: that's why we use this header 
+// rather than including <memory> directly:
+#include <boost/config/no_tr1/memory.hpp>  // std::auto_ptr
+#include <functional>       // std::less
+
+#ifdef BOOST_NO_EXCEPTIONS
+# include <new>              // std::bad_alloc
+#endif
+
+#include <boost/core/addressof.hpp>
+
+#if defined( BOOST_SP_DISABLE_DEPRECATED )
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
+namespace pdalboost
+{
+
+namespace movelib
+{
+
+    template< class T, class D > class unique_ptr;
+
+} // namespace movelib
+
+namespace detail
+{
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+
+int const shared_count_id = 0x2C35F101;
+int const   weak_count_id = 0x298C38A4;
+
+#endif
+
+struct sp_nothrow_tag {};
+
+template< class D > struct sp_inplace_tag
+{
+};
+
+template< class T > class sp_reference_wrapper
+{ 
+public:
+
+    explicit sp_reference_wrapper( T & t): t_( pdalboost::addressof( t ) )
+    {
+    }
+
+    template< class Y > void operator()( Y * p ) const
+    {
+        (*t_)( p );
+    }
+
+private:
+
+    T * t_;
+};
+
+template< class D > struct sp_convert_reference
+{
+    typedef D type;
+};
+
+template< class D > struct sp_convert_reference< D& >
+{
+    typedef sp_reference_wrapper< D > type;
+};
+
+class weak_count;
+
+class shared_count
+{
+private:
+
+    sp_counted_base * pi_;
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+    int id_;
+#endif
+
+    friend class weak_count;
+
+public:
+
+    shared_count(): pi_(0) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(shared_count_id)
+#endif
+    {
+    }
+
+    template<class Y> explicit shared_count( Y * p ): pi_( 0 )
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(shared_count_id)
+#endif
+    {
+#ifndef BOOST_NO_EXCEPTIONS
+
+        try
+        {
+            pi_ = new sp_counted_impl_p<Y>( p );
+        }
+        catch(...)
+        {
+            pdalboost::checked_delete( p );
+            throw;
+        }
+
+#else
+
+        pi_ = new sp_counted_impl_p<Y>( p );
+
+        if( pi_ == 0 )
+        {
+            pdalboost::checked_delete( p );
+            pdalboost::throw_exception( std::bad_alloc() );
+        }
+
+#endif
+    }
+
+#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1200 )
+    template<class Y, class D> shared_count( Y * p, D d ): pi_(0)
+#else
+    template<class P, class D> shared_count( P p, D d ): pi_(0)
+#endif
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(shared_count_id)
+#endif
+    {
+#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1200 )
+        typedef Y* P;
+#endif
+#ifndef BOOST_NO_EXCEPTIONS
+
+        try
+        {
+            pi_ = new sp_counted_impl_pd<P, D>(p, d);
+        }
+        catch(...)
+        {
+            d(p); // delete p
+            throw;
+        }
+
+#else
+
+        pi_ = new sp_counted_impl_pd<P, D>(p, d);
+
+        if(pi_ == 0)
+        {
+            d(p); // delete p
+            pdalboost::throw_exception(std::bad_alloc());
+        }
+
+#endif
+    }
+
+#if !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )
+
+    template< class P, class D > shared_count( P p, sp_inplace_tag<D> ): pi_( 0 )
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(shared_count_id)
+#endif
+    {
+#ifndef BOOST_NO_EXCEPTIONS
+
+        try
+        {
+            pi_ = new sp_counted_impl_pd< P, D >( p );
+        }
+        catch( ... )
+        {
+            D::operator_fn( p ); // delete p
+            throw;
+        }
+
+#else
+
+        pi_ = new sp_counted_impl_pd< P, D >( p );
+
+        if( pi_ == 0 )
+        {
+            D::operator_fn( p ); // delete p
+            pdalboost::throw_exception( std::bad_alloc() );
+        }
+
+#endif // #ifndef BOOST_NO_EXCEPTIONS
+    }
+
+#endif // !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )
+
+    template<class P, class D, class A> shared_count( P p, D d, A a ): pi_( 0 )
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(shared_count_id)
+#endif
+    {
+        typedef sp_counted_impl_pda<P, D, A> impl_type;
+
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+        typedef typename std::allocator_traits<A>::template rebind_alloc< impl_type > A2;
+
+#else
+
+        typedef typename A::template rebind< impl_type >::other A2;
+
+#endif
+
+        A2 a2( a );
+
+#ifndef BOOST_NO_EXCEPTIONS
+
+        try
+        {
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+            impl_type * pi = std::allocator_traits<A2>::allocate( a2, 1 );
+            pi_ = pi;
+            std::allocator_traits<A2>::construct( a2, pi, p, d, a );
+
+#else
+
+            pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );
+            ::new( static_cast< void* >( pi_ ) ) impl_type( p, d, a );
+
+#endif
+        }
+        catch(...)
+        {
+            d( p );
+
+            if( pi_ != 0 )
+            {
+                a2.deallocate( static_cast< impl_type* >( pi_ ), 1 );
+            }
+
+            throw;
+        }
+
+#else
+
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+        impl_type * pi = std::allocator_traits<A2>::allocate( a2, 1 );
+        pi_ = pi;
+
+#else
+
+        pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );
+
+#endif
+
+        if( pi_ != 0 )
+        {
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+            std::allocator_traits<A2>::construct( a2, pi, p, d, a );
+
+#else
+
+            ::new( static_cast< void* >( pi_ ) ) impl_type( p, d, a );
+
+#endif
+        }
+        else
+        {
+            d( p );
+            pdalboost::throw_exception( std::bad_alloc() );
+        }
+
+#endif
+    }
+
+#if !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )
+
+    template< class P, class D, class A > shared_count( P p, sp_inplace_tag< D >, A a ): pi_( 0 )
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(shared_count_id)
+#endif
+    {
+        typedef sp_counted_impl_pda< P, D, A > impl_type;
+
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+        typedef typename std::allocator_traits<A>::template rebind_alloc< impl_type > A2;
+
+#else
+
+        typedef typename A::template rebind< impl_type >::other A2;
+
+#endif
+
+        A2 a2( a );
+
+#ifndef BOOST_NO_EXCEPTIONS
+
+        try
+        {
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+            impl_type * pi = std::allocator_traits<A2>::allocate( a2, 1 );
+            pi_ = pi;
+            std::allocator_traits<A2>::construct( a2, pi, p, a );
+
+#else
+
+            pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );
+            ::new( static_cast< void* >( pi_ ) ) impl_type( p, a );
+
+#endif
+        }
+        catch(...)
+        {
+            D::operator_fn( p );
+
+            if( pi_ != 0 )
+            {
+                a2.deallocate( static_cast< impl_type* >( pi_ ), 1 );
+            }
+
+            throw;
+        }
+
+#else
+
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+        impl_type * pi = std::allocator_traits<A2>::allocate( a2, 1 );
+        pi_ = pi;
+
+#else
+
+        pi_ = a2.allocate( 1, static_cast< impl_type* >( 0 ) );
+
+#endif
+
+        if( pi_ != 0 )
+        {
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+            std::allocator_traits<A2>::construct( a2, pi, p, a );
+
+#else
+
+            ::new( static_cast< void* >( pi_ ) ) impl_type( p, a );
+
+#endif
+        }
+        else
+        {
+            D::operator_fn( p );
+            pdalboost::throw_exception( std::bad_alloc() );
+        }
+
+#endif // #ifndef BOOST_NO_EXCEPTIONS
+    }
+
+#endif // !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )
+
+#ifndef BOOST_NO_AUTO_PTR
+
+    // auto_ptr<Y> is special cased to provide the strong guarantee
+
+    template<class Y>
+    explicit shared_count( std::auto_ptr<Y> & r ): pi_( new sp_counted_impl_p<Y>( r.get() ) )
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(shared_count_id)
+#endif
+    {
+#ifdef BOOST_NO_EXCEPTIONS
+
+        if( pi_ == 0 )
+        {
+            pdalboost::throw_exception(std::bad_alloc());
+        }
+
+#endif
+
+        r.release();
+    }
+
+#endif 
+
+#if !defined( BOOST_NO_CXX11_SMART_PTR )
+
+    template<class Y, class D>
+    explicit shared_count( std::unique_ptr<Y, D> & r ): pi_( 0 )
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(shared_count_id)
+#endif
+    {
+        typedef typename sp_convert_reference<D>::type D2;
+
+        D2 d2( r.get_deleter() );
+        pi_ = new sp_counted_impl_pd< typename std::unique_ptr<Y, D>::pointer, D2 >( r.get(), d2 );
+
+#ifdef BOOST_NO_EXCEPTIONS
+
+        if( pi_ == 0 )
+        {
+            pdalboost::throw_exception( std::bad_alloc() );
+        }
+
+#endif
+
+        r.release();
+    }
+
+#endif
+
+    template<class Y, class D>
+    explicit shared_count( pdalboost::movelib::unique_ptr<Y, D> & r ): pi_( 0 )
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(shared_count_id)
+#endif
+    {
+        typedef typename sp_convert_reference<D>::type D2;
+
+        D2 d2( r.get_deleter() );
+        pi_ = new sp_counted_impl_pd< typename pdalboost::movelib::unique_ptr<Y, D>::pointer, D2 >( r.get(), d2 );
+
+#ifdef BOOST_NO_EXCEPTIONS
+
+        if( pi_ == 0 )
+        {
+            pdalboost::throw_exception( std::bad_alloc() );
+        }
+
+#endif
+
+        r.release();
+    }
+
+    ~shared_count() // nothrow
+    {
+        if( pi_ != 0 ) pi_->release();
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        id_ = 0;
+#endif
+    }
+
+    shared_count(shared_count const & r): pi_(r.pi_) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(shared_count_id)
+#endif
+    {
+        if( pi_ != 0 ) pi_->add_ref_copy();
+    }
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+    shared_count(shared_count && r): pi_(r.pi_) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(shared_count_id)
+#endif
+    {
+        r.pi_ = 0;
+    }
+
+#endif
+
+    explicit shared_count(weak_count const & r); // throws bad_weak_ptr when r.use_count() == 0
+    shared_count( weak_count const & r, sp_nothrow_tag ); // constructs an empty *this when r.use_count() == 0
+
+    shared_count & operator= (shared_count const & r) // nothrow
+    {
+        sp_counted_base * tmp = r.pi_;
+
+        if( tmp != pi_ )
+        {
+            if( tmp != 0 ) tmp->add_ref_copy();
+            if( pi_ != 0 ) pi_->release();
+            pi_ = tmp;
+        }
+
+        return *this;
+    }
+
+    void swap(shared_count & r) // nothrow
+    {
+        sp_counted_base * tmp = r.pi_;
+        r.pi_ = pi_;
+        pi_ = tmp;
+    }
+
+    long use_count() const // nothrow
+    {
+        return pi_ != 0? pi_->use_count(): 0;
+    }
+
+    bool unique() const // nothrow
+    {
+        return use_count() == 1;
+    }
+
+    bool empty() const // nothrow
+    {
+        return pi_ == 0;
+    }
+
+    friend inline bool operator==(shared_count const & a, shared_count const & b)
+    {
+        return a.pi_ == b.pi_;
+    }
+
+    friend inline bool operator<(shared_count const & a, shared_count const & b)
+    {
+        return std::less<sp_counted_base *>()( a.pi_, b.pi_ );
+    }
+
+    void * get_deleter( sp_typeinfo const & ti ) const
+    {
+        return pi_? pi_->get_deleter( ti ): 0;
+    }
+
+    void * get_untyped_deleter() const
+    {
+        return pi_? pi_->get_untyped_deleter(): 0;
+    }
+};
+
+
+class weak_count
+{
+private:
+
+    sp_counted_base * pi_;
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+    int id_;
+#endif
+
+    friend class shared_count;
+
+public:
+
+    weak_count(): pi_(0) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(weak_count_id)
+#endif
+    {
+    }
+
+    weak_count(shared_count const & r): pi_(r.pi_) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(weak_count_id)
+#endif
+    {
+        if(pi_ != 0) pi_->weak_add_ref();
+    }
+
+    weak_count(weak_count const & r): pi_(r.pi_) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(weak_count_id)
+#endif
+    {
+        if(pi_ != 0) pi_->weak_add_ref();
+    }
+
+// Move support
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+    weak_count(weak_count && r): pi_(r.pi_) // nothrow
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(weak_count_id)
+#endif
+    {
+        r.pi_ = 0;
+    }
+
+#endif
+
+    ~weak_count() // nothrow
+    {
+        if(pi_ != 0) pi_->weak_release();
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        id_ = 0;
+#endif
+    }
+
+    weak_count & operator= (shared_count const & r) // nothrow
+    {
+        sp_counted_base * tmp = r.pi_;
+
+        if( tmp != pi_ )
+        {
+            if(tmp != 0) tmp->weak_add_ref();
+            if(pi_ != 0) pi_->weak_release();
+            pi_ = tmp;
+        }
+
+        return *this;
+    }
+
+    weak_count & operator= (weak_count const & r) // nothrow
+    {
+        sp_counted_base * tmp = r.pi_;
+
+        if( tmp != pi_ )
+        {
+            if(tmp != 0) tmp->weak_add_ref();
+            if(pi_ != 0) pi_->weak_release();
+            pi_ = tmp;
+        }
+
+        return *this;
+    }
+
+    void swap(weak_count & r) // nothrow
+    {
+        sp_counted_base * tmp = r.pi_;
+        r.pi_ = pi_;
+        pi_ = tmp;
+    }
+
+    long use_count() const // nothrow
+    {
+        return pi_ != 0? pi_->use_count(): 0;
+    }
+
+    bool empty() const // nothrow
+    {
+        return pi_ == 0;
+    }
+
+    friend inline bool operator==(weak_count const & a, weak_count const & b)
+    {
+        return a.pi_ == b.pi_;
+    }
+
+    friend inline bool operator<(weak_count const & a, weak_count const & b)
+    {
+        return std::less<sp_counted_base *>()(a.pi_, b.pi_);
+    }
+};
+
+inline shared_count::shared_count( weak_count const & r ): pi_( r.pi_ )
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(shared_count_id)
+#endif
+{
+    if( pi_ == 0 || !pi_->add_ref_lock() )
+    {
+        pdalboost::throw_exception( pdalboost::bad_weak_ptr() );
+    }
+}
+
+inline shared_count::shared_count( weak_count const & r, sp_nothrow_tag ): pi_( r.pi_ )
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        , id_(shared_count_id)
+#endif
+{
+    if( pi_ != 0 && !pi_->add_ref_lock() )
+    {
+        pi_ = 0;
+    }
+}
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#if defined( BOOST_SP_DISABLE_DEPRECATED )
+#pragma GCC diagnostic pop
+#endif
+
+#ifdef __BORLANDC__
+# pragma warn .8027     // Functions containing try are not expanded inline
+#endif
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SHARED_COUNT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_convertible.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_convertible.hpp
new file mode 100644
index 0000000..517ce3a
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_convertible.hpp
@@ -0,0 +1,92 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//  detail/sp_convertible.hpp
+//
+//  Copyright 2008 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/config.hpp>
+#include <cstddef>
+
+#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( BOOST_NO_SFINAE )
+# define BOOST_SP_NO_SP_CONVERTIBLE
+#endif
+
+#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( __GNUC__ ) && ( __GNUC__ * 100 + __GNUC_MINOR__ < 303 )
+# define BOOST_SP_NO_SP_CONVERTIBLE
+#endif
+
+#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( __BORLANDC__ ) && ( __BORLANDC__ < 0x630 )
+# define BOOST_SP_NO_SP_CONVERTIBLE
+#endif
+
+#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+template< class Y, class T > struct sp_convertible
+{
+    typedef char (&yes) [1];
+    typedef char (&no)  [2];
+
+    static yes f( T* );
+    static no  f( ... );
+
+    enum _vt { value = sizeof( (f)( static_cast<Y*>(0) ) ) == sizeof(yes) };
+};
+
+template< class Y, class T > struct sp_convertible< Y, T[] >
+{
+    enum _vt { value = false };
+};
+
+template< class Y, class T > struct sp_convertible< Y[], T[] >
+{
+    enum _vt { value = sp_convertible< Y[1], T[1] >::value };
+};
+
+template< class Y, std::size_t N, class T > struct sp_convertible< Y[N], T[] >
+{
+    enum _vt { value = sp_convertible< Y[1], T[1] >::value };
+};
+
+struct sp_empty
+{
+};
+
+template< bool > struct sp_enable_if_convertible_impl;
+
+template<> struct sp_enable_if_convertible_impl<true>
+{
+    typedef sp_empty type;
+};
+
+template<> struct sp_enable_if_convertible_impl<false>
+{
+};
+
+template< class Y, class T > struct sp_enable_if_convertible: public sp_enable_if_convertible_impl< sp_convertible< Y, T >::value >
+{
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif // !defined( BOOST_SP_NO_SP_CONVERTIBLE )
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base.hpp
new file mode 100644
index 0000000..0addf07
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base.hpp
@@ -0,0 +1,93 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  detail/sp_counted_base.hpp
+//
+//  Copyright 2005-2013 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/config.hpp>
+#include <boost/smart_ptr/detail/sp_has_sync.hpp>
+
+#if defined( __clang__ ) && defined( __has_extension )
+# if __has_extension( __c_atomic__ )
+#   define BOOST_SP_HAS_CLANG_C11_ATOMICS
+# endif
+#endif
+
+#if defined( BOOST_SP_DISABLE_THREADS )
+# include <boost/smart_ptr/detail/sp_counted_base_nt.hpp>
+
+#elif defined( BOOST_SP_USE_STD_ATOMIC )
+# include <boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp>
+
+#elif defined( BOOST_SP_USE_SPINLOCK )
+# include <boost/smart_ptr/detail/sp_counted_base_spin.hpp>
+
+#elif defined( BOOST_SP_USE_PTHREADS )
+# include <boost/smart_ptr/detail/sp_counted_base_pt.hpp>
+
+#elif defined( BOOST_DISABLE_THREADS ) && !defined( BOOST_SP_ENABLE_THREADS ) && !defined( BOOST_DISABLE_WIN32 )
+# include <boost/smart_ptr/detail/sp_counted_base_nt.hpp>
+
+#elif defined( BOOST_SP_HAS_CLANG_C11_ATOMICS )
+# include <boost/smart_ptr/detail/sp_counted_base_clang.hpp>
+
+#elif defined( __SNC__ )
+# include <boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp>
+
+#elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) ) && !defined(__PATHSCALE__)
+# include <boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp>
+
+#elif defined(__HP_aCC) && defined(__ia64)
+# include <boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp>
+
+#elif defined( __GNUC__ ) && defined( __ia64__ ) && !defined( __INTEL_COMPILER ) && !defined(__PATHSCALE__)
+# include <boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp>
+
+#elif defined( __IBMCPP__ ) && defined( __powerpc )
+# include <boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp>
+
+#elif defined( __MWERKS__ ) && defined( __POWERPC__ )
+# include <boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp>
+
+#elif defined( __GNUC__ ) && ( defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc ) ) && !defined(__PATHSCALE__) && !defined( _AIX )
+# include <boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp>
+
+#elif defined( __GNUC__ ) && ( defined( __mips__ ) || defined( _mips ) ) && !defined(__PATHSCALE__)
+# include <boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp>
+
+#elif defined( BOOST_SP_HAS_SYNC )
+# include <boost/smart_ptr/detail/sp_counted_base_sync.hpp>
+
+#elif defined(__GNUC__) && ( defined( __sparcv9 ) || ( defined( __sparcv8 ) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 402 ) ) )
+# include <boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp>
+
+#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined(__CYGWIN__)
+# include <boost/smart_ptr/detail/sp_counted_base_w32.hpp>
+
+#elif defined( _AIX )
+# include <boost/smart_ptr/detail/sp_counted_base_aix.hpp>
+
+#elif !defined( BOOST_HAS_THREADS )
+# include <boost/smart_ptr/detail/sp_counted_base_nt.hpp>
+
+#else
+# include <boost/smart_ptr/detail/sp_counted_base_spin.hpp>
+
+#endif
+
+#undef BOOST_SP_HAS_CLANG_C11_ATOMICS
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp
new file mode 100644
index 0000000..d91ffaf
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp
@@ -0,0 +1,151 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_ACC_IA64_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_ACC_IA64_HPP_INCLUDED
+
+//
+//  detail/sp_counted_base_acc_ia64.hpp - aC++ on HP-UX IA64
+//
+//  Copyright 2007 Baruch Zilber
+//  Copyright 2007 Boris Gubenko
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+//  Lock-free algorithm by Alexander Terekhov
+//
+
+#include <boost/detail/sp_typeinfo.hpp>
+#include <machine/sys/inline.h>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+inline void atomic_increment( int * pw )
+{
+    // ++*pw;
+
+    _Asm_fetchadd(_FASZ_W, _SEM_REL, pw, +1, _LDHINT_NONE);
+} 
+
+inline int atomic_decrement( int * pw )
+{
+    // return --*pw;
+
+    int r = static_cast<int>(_Asm_fetchadd(_FASZ_W, _SEM_REL, pw, -1, _LDHINT_NONE));
+    if (1 == r)
+    {
+        _Asm_mf();
+    }
+    
+    return r - 1;
+}
+
+inline int atomic_conditional_increment( int * pw )
+{
+    // if( *pw != 0 ) ++*pw;
+    // return *pw;
+
+    int v = *pw;
+    
+    for (;;)
+    {
+        if (0 == v)
+        {
+            return 0;
+        }
+        
+        _Asm_mov_to_ar(_AREG_CCV,
+                       v,
+                       (_UP_CALL_FENCE | _UP_SYS_FENCE | _DOWN_CALL_FENCE | _DOWN_SYS_FENCE));
+        int r = static_cast<int>(_Asm_cmpxchg(_SZ_W, _SEM_ACQ, pw, v + 1, _LDHINT_NONE));
+        if (r == v)
+        {
+            return r + 1;
+        }
+        
+        v = r;
+    }
+}
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    int use_count_;        // #shared
+    int weak_count_;       // #weak + (#shared != 0)
+
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        atomic_increment( &use_count_ );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        return atomic_conditional_increment( &use_count_ ) != 0;
+    }
+
+    void release() // nothrow
+    {
+        if( atomic_decrement( &use_count_ ) == 0 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        atomic_increment( &weak_count_ );
+    }
+
+    void weak_release() // nothrow
+    {
+        if( atomic_decrement( &weak_count_ ) == 0 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        return static_cast<int const volatile &>( use_count_ ); // TODO use ld.acq here
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_ACC_IA64_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_aix.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_aix.hpp
new file mode 100644
index 0000000..5f02b42
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_aix.hpp
@@ -0,0 +1,143 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_AIX_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_AIX_HPP_INCLUDED
+
+//
+//  detail/sp_counted_base_aix.hpp
+//   based on: detail/sp_counted_base_w32.hpp
+//
+//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+//  Copyright 2004-2005 Peter Dimov
+//  Copyright 2006 Michael van der Westhuizen
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+//  Lock-free algorithm by Alexander Terekhov
+//
+//  Thanks to Ben Hitchings for the #weak + (#shared != 0)
+//  formulation
+//
+
+#include <boost/detail/sp_typeinfo.hpp>
+#include <builtins.h>
+#include <sys/atomic_op.h>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+inline void atomic_increment( int32_t* pw )
+{
+    // ++*pw;
+
+    fetch_and_add( pw, 1 );
+}
+
+inline int32_t atomic_decrement( int32_t * pw )
+{
+    // return --*pw;
+
+    int32_t originalValue;
+
+    __lwsync();
+    originalValue = fetch_and_add( pw, -1 );
+    __isync();
+
+    return (originalValue - 1);
+}
+
+inline int32_t atomic_conditional_increment( int32_t * pw )
+{
+    // if( *pw != 0 ) ++*pw;
+    // return *pw;
+
+    int32_t tmp = fetch_and_add( pw, 0 );
+    for( ;; )
+    {
+        if( tmp == 0 ) return 0;
+        if( compare_and_swap( pw, &tmp, tmp + 1 ) ) return (tmp + 1);
+    }
+}
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    int32_t use_count_;        // #shared
+    int32_t weak_count_;       // #weak + (#shared != 0)
+
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        atomic_increment( &use_count_ );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        return atomic_conditional_increment( &use_count_ ) != 0;
+    }
+
+    void release() // nothrow
+    {
+        if( atomic_decrement( &use_count_ ) == 0 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        atomic_increment( &weak_count_ );
+    }
+
+    void weak_release() // nothrow
+    {
+        if( atomic_decrement( &weak_count_ ) == 0 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        return fetch_and_add( const_cast<int32_t*>(&use_count_), 0 );
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_AIX_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_clang.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_clang.hpp
new file mode 100644
index 0000000..5626d01
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_clang.hpp
@@ -0,0 +1,140 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CLANG_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CLANG_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//  detail/sp_counted_base_clang.hpp - __c11 clang intrinsics
+//
+//  Copyright (c) 2007, 2013, 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/detail/sp_typeinfo.hpp>
+#include <boost/cstdint.hpp>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+typedef _Atomic( pdalboost::int_least32_t ) atomic_int_least32_t;
+
+inline void atomic_increment( atomic_int_least32_t * pw )
+{
+    __c11_atomic_fetch_add( pw, 1, __ATOMIC_RELAXED );
+}
+
+inline pdalboost::int_least32_t atomic_decrement( atomic_int_least32_t * pw )
+{
+    return __c11_atomic_fetch_sub( pw, 1, __ATOMIC_ACQ_REL );
+}
+
+inline pdalboost::int_least32_t atomic_conditional_increment( atomic_int_least32_t * pw )
+{
+    // long r = *pw;
+    // if( r != 0 ) ++*pw;
+    // return r;
+
+    pdalboost::int_least32_t r = __c11_atomic_load( pw, __ATOMIC_RELAXED );
+
+    for( ;; )
+    {
+        if( r == 0 )
+        {
+            return r;
+        }
+
+        if( __c11_atomic_compare_exchange_weak( pw, &r, r + 1, __ATOMIC_RELAXED, __ATOMIC_RELAXED ) )
+        {
+            return r;
+        }
+    }    
+}
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    atomic_int_least32_t use_count_;	// #shared
+    atomic_int_least32_t weak_count_;	// #weak + (#shared != 0)
+
+public:
+
+    sp_counted_base()
+    {
+        __c11_atomic_init( &use_count_, 1 );
+        __c11_atomic_init( &weak_count_, 1 );
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        atomic_increment( &use_count_ );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        return atomic_conditional_increment( &use_count_ ) != 0;
+    }
+
+    void release() // nothrow
+    {
+        if( atomic_decrement( &use_count_ ) == 1 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        atomic_increment( &weak_count_ );
+    }
+
+    void weak_release() // nothrow
+    {
+        if( atomic_decrement( &weak_count_ ) == 1 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        return __c11_atomic_load( const_cast< atomic_int_least32_t* >( &use_count_ ), __ATOMIC_ACQUIRE );
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CLANG_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp
new file mode 100644
index 0000000..86f6e02
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp
@@ -0,0 +1,171 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_PPC_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_PPC_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  detail/sp_counted_base_cw_ppc.hpp - CodeWarrior on PowerPC
+//
+//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+//  Copyright 2004-2005 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+//  Lock-free algorithm by Alexander Terekhov
+//
+//  Thanks to Ben Hitchings for the #weak + (#shared != 0)
+//  formulation
+//
+
+#include <boost/detail/sp_typeinfo.hpp>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+inline void atomic_increment( register long * pw )
+{
+    register int a;
+
+    asm
+    {
+loop:
+
+    lwarx   a, 0, pw
+    addi    a, a, 1
+    stwcx.  a, 0, pw
+    bne-    loop
+    }
+}
+
+inline long atomic_decrement( register long * pw )
+{
+    register int a;
+
+    asm
+    {
+    sync
+
+loop:
+
+    lwarx   a, 0, pw
+    addi    a, a, -1
+    stwcx.  a, 0, pw
+    bne-    loop
+
+    isync
+    }
+
+    return a;
+}
+
+inline long atomic_conditional_increment( register long * pw )
+{
+    register int a;
+
+    asm
+    {
+loop:
+
+    lwarx   a, 0, pw
+    cmpwi   a, 0
+    beq     store
+
+    addi    a, a, 1
+
+store:
+
+    stwcx.  a, 0, pw
+    bne-    loop
+    }
+
+    return a;
+}
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    long use_count_;        // #shared
+    long weak_count_;       // #weak + (#shared != 0)
+
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        atomic_increment( &use_count_ );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        return atomic_conditional_increment( &use_count_ ) != 0;
+    }
+
+    void release() // nothrow
+    {
+        if( atomic_decrement( &use_count_ ) == 0 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        atomic_increment( &weak_count_ );
+    }
+
+    void weak_release() // nothrow
+    {
+        if( atomic_decrement( &weak_count_ ) == 0 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        return static_cast<long const volatile &>( use_count_ );
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CW_PPC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp
new file mode 100644
index 0000000..c5c2f2e
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp
@@ -0,0 +1,158 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_IA64_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_IA64_HPP_INCLUDED
+
+//
+//  detail/sp_counted_base_gcc_ia64.hpp - g++ on IA64
+//
+//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+//  Copyright 2004-2006 Peter Dimov
+//  Copyright 2005 Ben Hutchings
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+//  Lock-free algorithm by Alexander Terekhov
+//
+
+#include <boost/detail/sp_typeinfo.hpp>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+inline void atomic_increment( int * pw )
+{
+    // ++*pw;
+
+    int tmp;
+
+    // No barrier is required here but fetchadd always has an acquire or
+    // release barrier associated with it.  We choose release as it should be
+    // cheaper.
+    __asm__ ("fetchadd4.rel %0=%1,1" :
+         "=r"(tmp), "=m"(*pw) :
+         "m"( *pw ));
+}
+
+inline int atomic_decrement( int * pw )
+{
+    // return --*pw;
+
+    int rv;
+
+    __asm__ ("     fetchadd4.rel %0=%1,-1 ;; \n"
+             "     cmp.eq        p7,p0=1,%0 ;; \n"
+             "(p7) ld4.acq       %0=%1    " :
+             "=&r"(rv), "=m"(*pw) :
+             "m"( *pw ) :
+             "p7");
+
+    return rv;
+}
+
+inline int atomic_conditional_increment( int * pw )
+{
+    // if( *pw != 0 ) ++*pw;
+    // return *pw;
+
+    int rv, tmp, tmp2;
+
+    __asm__ ("0:   ld4          %0=%3           ;; \n"
+         "     cmp.eq       p7,p0=0,%0        ;; \n"
+         "(p7) br.cond.spnt 1f                \n"
+         "     mov          ar.ccv=%0         \n"
+         "     add          %1=1,%0           ;; \n"
+         "     cmpxchg4.acq %2=%3,%1,ar.ccv ;; \n"
+         "     cmp.ne       p7,p0=%0,%2       ;; \n"
+         "(p7) br.cond.spnt 0b                \n"
+         "     mov          %0=%1             ;; \n"
+         "1:" : 
+         "=&r"(rv), "=&r"(tmp), "=&r"(tmp2), "=m"(*pw) :
+         "m"( *pw ) :
+         "ar.ccv", "p7");
+
+    return rv;
+}
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    int use_count_;        // #shared
+    int weak_count_;       // #weak + (#shared != 0)
+
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        atomic_increment( &use_count_ );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        return atomic_conditional_increment( &use_count_ ) != 0;
+    }
+
+    void release() // nothrow
+    {
+        if( atomic_decrement( &use_count_ ) == 0 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        atomic_increment( &weak_count_ );
+    }
+
+    void weak_release() // nothrow
+    {
+        if( atomic_decrement( &weak_count_ ) == 0 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        return static_cast<int const volatile &>( use_count_ ); // TODO use ld.acq here
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_IA64_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp
new file mode 100644
index 0000000..7edc72d
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp
@@ -0,0 +1,182 @@
+#ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED
+#define BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  detail/sp_counted_base_gcc_mips.hpp - g++ on MIPS
+//
+//  Copyright (c) 2009, Spirent Communications, Inc.
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+//  Lock-free algorithm by Alexander Terekhov
+//
+
+#include <boost/detail/sp_typeinfo.hpp>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+inline void atomic_increment( int * pw )
+{
+    // ++*pw;
+
+    int tmp;
+
+    __asm__ __volatile__
+    (
+        "0:\n\t"
+        ".set push\n\t"
+        ".set mips2\n\t"
+        "ll %0, %1\n\t"
+        "addiu %0, 1\n\t"
+        "sc %0, %1\n\t"
+        ".set pop\n\t"
+        "beqz %0, 0b":
+        "=&r"( tmp ), "=m"( *pw ):
+        "m"( *pw )
+    );
+}
+
+inline int atomic_decrement( int * pw )
+{
+    // return --*pw;
+
+    int rv, tmp;
+
+    __asm__ __volatile__
+    (
+        "0:\n\t"
+        ".set push\n\t"
+        ".set mips2\n\t"
+        "ll %1, %2\n\t"
+        "addiu %0, %1, -1\n\t"
+        "sc %0, %2\n\t"
+        ".set pop\n\t"
+        "beqz %0, 0b\n\t"
+        "addiu %0, %1, -1":
+        "=&r"( rv ), "=&r"( tmp ), "=m"( *pw ):
+        "m"( *pw ):
+        "memory"
+    );
+
+    return rv;
+}
+
+inline int atomic_conditional_increment( int * pw )
+{
+    // if( *pw != 0 ) ++*pw;
+    // return *pw;
+
+    int rv, tmp;
+
+    __asm__ __volatile__
+    (
+        "0:\n\t"
+        ".set push\n\t"
+        ".set mips2\n\t"
+        "ll %0, %2\n\t"
+        "beqz %0, 1f\n\t"
+        "addiu %1, %0, 1\n\t"
+        "sc %1, %2\n\t"
+        ".set pop\n\t"
+        "beqz %1, 0b\n\t"
+        "addiu %0, %0, 1\n\t"
+        "1:":
+        "=&r"( rv ), "=&r"( tmp ), "=m"( *pw ):
+        "m"( *pw ):
+        "memory"
+    );
+
+    return rv;
+}
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    int use_count_;        // #shared
+    int weak_count_;       // #weak + (#shared != 0)
+
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        atomic_increment( &use_count_ );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        return atomic_conditional_increment( &use_count_ ) != 0;
+    }
+
+    void release() // nothrow
+    {
+        if( atomic_decrement( &use_count_ ) == 0 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        atomic_increment( &weak_count_ );
+    }
+
+    void weak_release() // nothrow
+    {
+        if( atomic_decrement( &weak_count_ ) == 0 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        return static_cast<int const volatile &>( use_count_ );
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp
new file mode 100644
index 0000000..16cc3c0
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp
@@ -0,0 +1,182 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_PPC_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_PPC_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  detail/sp_counted_base_gcc_ppc.hpp - g++ on PowerPC
+//
+//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+//  Copyright 2004-2005 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+//  Lock-free algorithm by Alexander Terekhov
+//
+//  Thanks to Ben Hitchings for the #weak + (#shared != 0)
+//  formulation
+//
+
+#include <boost/detail/sp_typeinfo.hpp>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+inline void atomic_increment( int * pw )
+{
+    // ++*pw;
+
+    int tmp;
+
+    __asm__
+    (
+        "0:\n\t"
+        "lwarx %1, 0, %2\n\t"
+        "addi %1, %1, 1\n\t"
+        "stwcx. %1, 0, %2\n\t"
+        "bne- 0b":
+
+        "=m"( *pw ), "=&b"( tmp ):
+        "r"( pw ), "m"( *pw ):
+        "cc"
+    );
+}
+
+inline int atomic_decrement( int * pw )
+{
+    // return --*pw;
+
+    int rv;
+
+    __asm__ __volatile__
+    (
+        "sync\n\t"
+        "0:\n\t"
+        "lwarx %1, 0, %2\n\t"
+        "addi %1, %1, -1\n\t"
+        "stwcx. %1, 0, %2\n\t"
+        "bne- 0b\n\t"
+        "isync":
+
+        "=m"( *pw ), "=&b"( rv ):
+        "r"( pw ), "m"( *pw ):
+        "memory", "cc"
+    );
+
+    return rv;
+}
+
+inline int atomic_conditional_increment( int * pw )
+{
+    // if( *pw != 0 ) ++*pw;
+    // return *pw;
+
+    int rv;
+
+    __asm__
+    (
+        "0:\n\t"
+        "lwarx %1, 0, %2\n\t"
+        "cmpwi %1, 0\n\t"
+        "beq 1f\n\t"
+        "addi %1, %1, 1\n\t"
+        "1:\n\t"
+        "stwcx. %1, 0, %2\n\t"
+        "bne- 0b":
+
+        "=m"( *pw ), "=&b"( rv ):
+        "r"( pw ), "m"( *pw ):
+        "cc"
+    );
+
+    return rv;
+}
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    int use_count_;        // #shared
+    int weak_count_;       // #weak + (#shared != 0)
+
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        atomic_increment( &use_count_ );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        return atomic_conditional_increment( &use_count_ ) != 0;
+    }
+
+    void release() // nothrow
+    {
+        if( atomic_decrement( &use_count_ ) == 0 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        atomic_increment( &weak_count_ );
+    }
+
+    void weak_release() // nothrow
+    {
+        if( atomic_decrement( &weak_count_ ) == 0 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        return static_cast<int const volatile &>( use_count_ );
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_PPC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp
new file mode 100644
index 0000000..614db15
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp
@@ -0,0 +1,167 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_SPARC_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_SPARC_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//  detail/sp_counted_base_gcc_sparc.hpp - g++ on Sparc V8+
+//
+//  Copyright (c) 2006 Piotr Wyderski
+//  Copyright (c) 2006 Tomas Puverle
+//  Copyright (c) 2006 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  Thanks to Michael van der Westhuizen
+
+#include <boost/detail/sp_typeinfo.hpp>
+#include <inttypes.h> // int32_t
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+inline int32_t compare_and_swap( int32_t * dest_, int32_t compare_, int32_t swap_ )
+{
+    __asm__ __volatile__( "cas [%1], %2, %0"
+                        : "+r" (swap_)
+                        : "r" (dest_), "r" (compare_)
+                        : "memory" );
+
+    return swap_;
+}
+
+inline int32_t atomic_fetch_and_add( int32_t * pw, int32_t dv )
+{
+    // long r = *pw;
+    // *pw += dv;
+    // return r;
+
+    for( ;; )
+    {
+        int32_t r = *pw;
+
+        if( __builtin_expect((compare_and_swap(pw, r, r + dv) == r), 1) )
+        {
+            return r;
+        }
+    }
+}
+
+inline void atomic_increment( int32_t * pw )
+{
+    atomic_fetch_and_add( pw, 1 );
+}
+
+inline int32_t atomic_decrement( int32_t * pw )
+{
+    return atomic_fetch_and_add( pw, -1 );
+}
+
+inline int32_t atomic_conditional_increment( int32_t * pw )
+{
+    // long r = *pw;
+    // if( r != 0 ) ++*pw;
+    // return r;
+
+    for( ;; )
+    {
+        int32_t r = *pw;
+
+        if( r == 0 )
+        {
+            return r;
+        }
+
+        if( __builtin_expect( ( compare_and_swap( pw, r, r + 1 ) == r ), 1 ) )
+        {
+            return r;
+        }
+    }    
+}
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    int32_t use_count_;        // #shared
+    int32_t weak_count_;       // #weak + (#shared != 0)
+
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        atomic_increment( &use_count_ );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        return atomic_conditional_increment( &use_count_ ) != 0;
+    }
+
+    void release() // nothrow
+    {
+        if( atomic_decrement( &use_count_ ) == 1 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        atomic_increment( &weak_count_ );
+    }
+
+    void weak_release() // nothrow
+    {
+        if( atomic_decrement( &weak_count_ ) == 1 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        return const_cast< int32_t const volatile & >( use_count_ );
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_SPARC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp
new file mode 100644
index 0000000..713e8be
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp
@@ -0,0 +1,174 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  detail/sp_counted_base_gcc_x86.hpp - g++ on 486+ or AMD64
+//
+//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+//  Copyright 2004-2005 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+//  Lock-free algorithm by Alexander Terekhov
+//
+//  Thanks to Ben Hitchings for the #weak + (#shared != 0)
+//  formulation
+//
+
+#include <boost/detail/sp_typeinfo.hpp>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+inline int atomic_exchange_and_add( int * pw, int dv )
+{
+    // int r = *pw;
+    // *pw += dv;
+    // return r;
+
+    int r;
+
+    __asm__ __volatile__
+    (
+        "lock\n\t"
+        "xadd %1, %0":
+        "=m"( *pw ), "=r"( r ): // outputs (%0, %1)
+        "m"( *pw ), "1"( dv ): // inputs (%2, %3 == %1)
+        "memory", "cc" // clobbers
+    );
+
+    return r;
+}
+
+inline void atomic_increment( int * pw )
+{
+    //atomic_exchange_and_add( pw, 1 );
+
+    __asm__
+    (
+        "lock\n\t"
+        "incl %0":
+        "=m"( *pw ): // output (%0)
+        "m"( *pw ): // input (%1)
+        "cc" // clobbers
+    );
+}
+
+inline int atomic_conditional_increment( int * pw )
+{
+    // int rv = *pw;
+    // if( rv != 0 ) ++*pw;
+    // return rv;
+
+    int rv, tmp;
+
+    __asm__
+    (
+        "movl %0, %%eax\n\t"
+        "0:\n\t"
+        "test %%eax, %%eax\n\t"
+        "je 1f\n\t"
+        "movl %%eax, %2\n\t"
+        "incl %2\n\t"
+        "lock\n\t"
+        "cmpxchgl %2, %0\n\t"
+        "jne 0b\n\t"
+        "1:":
+        "=m"( *pw ), "=&a"( rv ), "=&r"( tmp ): // outputs (%0, %1, %2)
+        "m"( *pw ): // input (%3)
+        "cc" // clobbers
+    );
+
+    return rv;
+}
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    int use_count_;        // #shared
+    int weak_count_;       // #weak + (#shared != 0)
+
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        atomic_increment( &use_count_ );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        return atomic_conditional_increment( &use_count_ ) != 0;
+    }
+
+    void release() // nothrow
+    {
+        if( atomic_exchange_and_add( &use_count_, -1 ) == 1 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        atomic_increment( &weak_count_ );
+    }
+
+    void weak_release() // nothrow
+    {
+        if( atomic_exchange_and_add( &weak_count_, -1 ) == 1 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        return static_cast<int const volatile &>( use_count_ );
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_GCC_X86_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_nt.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_nt.hpp
new file mode 100644
index 0000000..c36caec
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_nt.hpp
@@ -0,0 +1,108 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_NT_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_NT_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  detail/sp_counted_base_nt.hpp
+//
+//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+//  Copyright 2004-2005 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/detail/sp_typeinfo.hpp>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    long use_count_;        // #shared
+    long weak_count_;       // #weak + (#shared != 0)
+
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        ++use_count_;
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        if( use_count_ == 0 ) return false;
+        ++use_count_;
+        return true;
+    }
+
+    void release() // nothrow
+    {
+        if( --use_count_ == 0 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        ++weak_count_;
+    }
+
+    void weak_release() // nothrow
+    {
+        if( --weak_count_ == 0 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        return use_count_;
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_NT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_pt.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_pt.hpp
new file mode 100644
index 0000000..e663058
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_pt.hpp
@@ -0,0 +1,137 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_PT_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_PT_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  detail/sp_counted_base_pt.hpp
+//
+//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+//  Copyright 2004-2005 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/detail/sp_typeinfo.hpp>
+#include <boost/assert.hpp>
+#include <pthread.h>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    long use_count_;        // #shared
+    long weak_count_;       // #weak + (#shared != 0)
+
+    mutable pthread_mutex_t m_;
+
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+// HPUX 10.20 / DCE has a nonstandard pthread_mutex_init
+
+#if defined(__hpux) && defined(_DECTHREADS_)
+        BOOST_VERIFY( pthread_mutex_init( &m_, pthread_mutexattr_default ) == 0 );
+#else
+        BOOST_VERIFY( pthread_mutex_init( &m_, 0 ) == 0 );
+#endif
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+        BOOST_VERIFY( pthread_mutex_destroy( &m_ ) == 0 );
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
+        ++use_count_;
+        BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
+        bool r = use_count_ == 0? false: ( ++use_count_, true );
+        BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
+        return r;
+    }
+
+    void release() // nothrow
+    {
+        BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
+        long new_use_count = --use_count_;
+        BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
+
+        if( new_use_count == 0 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
+        ++weak_count_;
+        BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
+    }
+
+    void weak_release() // nothrow
+    {
+        BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
+        long new_weak_count = --weak_count_;
+        BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
+
+        if( new_weak_count == 0 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
+        long r = use_count_;
+        BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
+
+        return r;
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_PT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp
new file mode 100644
index 0000000..6fe661f
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp
@@ -0,0 +1,162 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SNC_PS3_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SNC_PS3_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//  detail/sp_counted_base_gcc_sparc.hpp - g++ on Sparc V8+
+//
+//  Copyright (c) 2006 Piotr Wyderski
+//  Copyright (c) 2006 Tomas Puverle
+//  Copyright (c) 2006 Peter Dimov
+//  Copyright (c) 2011 Emil Dotchevski
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  Thanks to Michael van der Westhuizen
+
+#include <boost/detail/sp_typeinfo.hpp>
+#include <inttypes.h> // uint32_t
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+inline uint32_t compare_and_swap( uint32_t * dest_, uint32_t compare_, uint32_t swap_ )
+{
+    return __builtin_cellAtomicCompareAndSwap32(dest_,compare_,swap_);
+}
+
+inline uint32_t atomic_fetch_and_add( uint32_t * pw, uint32_t dv )
+{
+    // long r = *pw;
+    // *pw += dv;
+    // return r;
+
+    for( ;; )
+    {
+        uint32_t r = *pw;
+
+        if( __builtin_expect((compare_and_swap(pw, r, r + dv) == r), 1) )
+        {
+            return r;
+        }
+    }
+}
+
+inline void atomic_increment( uint32_t * pw )
+{
+    (void) __builtin_cellAtomicIncr32( pw );
+}
+
+inline uint32_t atomic_decrement( uint32_t * pw )
+{
+    return __builtin_cellAtomicDecr32( pw );
+}
+
+inline uint32_t atomic_conditional_increment( uint32_t * pw )
+{
+    // long r = *pw;
+    // if( r != 0 ) ++*pw;
+    // return r;
+
+    for( ;; )
+    {
+        uint32_t r = *pw;
+
+        if( r == 0 )
+        {
+            return r;
+        }
+
+        if( __builtin_expect( ( compare_and_swap( pw, r, r + 1 ) == r ), 1 ) )
+        {
+            return r;
+        }
+    }    
+}
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    uint32_t use_count_;        // #shared
+    uint32_t weak_count_;       // #weak + (#shared != 0)
+
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        atomic_increment( &use_count_ );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        return atomic_conditional_increment( &use_count_ ) != 0;
+    }
+
+    void release() // nothrow
+    {
+        if( atomic_decrement( &use_count_ ) == 1 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        atomic_increment( &weak_count_ );
+    }
+
+    void weak_release() // nothrow
+    {
+        if( atomic_decrement( &weak_count_ ) == 1 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        return const_cast< uint32_t const volatile & >( use_count_ );
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SNC_PS3_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_spin.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_spin.hpp
new file mode 100644
index 0000000..7e21c41
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_spin.hpp
@@ -0,0 +1,132 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SPIN_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SPIN_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  detail/sp_counted_base_spin.hpp - spinlock pool atomic emulation
+//
+//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+//  Copyright 2004-2008 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/detail/sp_typeinfo.hpp>
+#include <boost/smart_ptr/detail/spinlock_pool.hpp>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+inline int atomic_exchange_and_add( int * pw, int dv )
+{
+    spinlock_pool<1>::scoped_lock lock( pw );
+
+    int r = *pw;
+    *pw += dv;
+    return r;
+}
+
+inline void atomic_increment( int * pw )
+{
+    spinlock_pool<1>::scoped_lock lock( pw );
+    ++*pw;
+}
+
+inline int atomic_conditional_increment( int * pw )
+{
+    spinlock_pool<1>::scoped_lock lock( pw );
+
+    int rv = *pw;
+    if( rv != 0 ) ++*pw;
+    return rv;
+}
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    int use_count_;        // #shared
+    int weak_count_;       // #weak + (#shared != 0)
+
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        atomic_increment( &use_count_ );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        return atomic_conditional_increment( &use_count_ ) != 0;
+    }
+
+    void release() // nothrow
+    {
+        if( atomic_exchange_and_add( &use_count_, -1 ) == 1 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        atomic_increment( &weak_count_ );
+    }
+
+    void weak_release() // nothrow
+    {
+        if( atomic_exchange_and_add( &weak_count_, -1 ) == 1 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        spinlock_pool<1>::scoped_lock lock( &use_count_ );
+        return use_count_;
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SPIN_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp
new file mode 100644
index 0000000..b890907
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp
@@ -0,0 +1,137 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_STD_ATOMIC_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_STD_ATOMIC_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//  detail/sp_counted_base_std_atomic.hpp - C++11 std::atomic
+//
+//  Copyright (c) 2007, 2013 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/detail/sp_typeinfo.hpp>
+#include <atomic>
+#include <cstdint>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+inline void atomic_increment( std::atomic_int_least32_t * pw )
+{
+    pw->fetch_add( 1, std::memory_order_relaxed );
+}
+
+inline std::int_least32_t atomic_decrement( std::atomic_int_least32_t * pw )
+{
+    return pw->fetch_sub( 1, std::memory_order_acq_rel );
+}
+
+inline std::int_least32_t atomic_conditional_increment( std::atomic_int_least32_t * pw )
+{
+    // long r = *pw;
+    // if( r != 0 ) ++*pw;
+    // return r;
+
+    std::int_least32_t r = pw->load( std::memory_order_relaxed );
+
+    for( ;; )
+    {
+        if( r == 0 )
+        {
+            return r;
+        }
+
+        if( pw->compare_exchange_weak( r, r + 1, std::memory_order_relaxed, std::memory_order_relaxed ) )
+        {
+            return r;
+        }
+    }    
+}
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    std::atomic_int_least32_t use_count_;	// #shared
+    std::atomic_int_least32_t weak_count_;	// #weak + (#shared != 0)
+
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        atomic_increment( &use_count_ );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        return atomic_conditional_increment( &use_count_ ) != 0;
+    }
+
+    void release() // nothrow
+    {
+        if( atomic_decrement( &use_count_ ) == 1 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        atomic_increment( &weak_count_ );
+    }
+
+    void weak_release() // nothrow
+    {
+        if( atomic_decrement( &weak_count_ ) == 1 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        return use_count_.load( std::memory_order_acquire );
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_STD_ATOMIC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_sync.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_sync.hpp
new file mode 100644
index 0000000..7c4bccc
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_sync.hpp
@@ -0,0 +1,156 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SYNC_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SYNC_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//  detail/sp_counted_base_sync.hpp - g++ 4.1+ __sync intrinsics
+//
+//  Copyright (c) 2007 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/detail/sp_typeinfo.hpp>
+#include <limits.h>
+
+#if defined( __ia64__ ) && defined( __INTEL_COMPILER )
+# include <ia64intrin.h>
+#endif
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+#if INT_MAX >= 2147483647
+
+typedef int sp_int32_t;
+
+#else
+
+typedef long sp_int32_t;
+
+#endif
+
+inline void atomic_increment( sp_int32_t * pw )
+{
+    __sync_fetch_and_add( pw, 1 );
+}
+
+inline sp_int32_t atomic_decrement( sp_int32_t * pw )
+{
+    return __sync_fetch_and_add( pw, -1 );
+}
+
+inline sp_int32_t atomic_conditional_increment( sp_int32_t * pw )
+{
+    // long r = *pw;
+    // if( r != 0 ) ++*pw;
+    // return r;
+
+    sp_int32_t r = *pw;
+
+    for( ;; )
+    {
+        if( r == 0 )
+        {
+            return r;
+        }
+
+        sp_int32_t r2 = __sync_val_compare_and_swap( pw, r, r + 1 );
+
+        if( r2 == r )
+        {
+            return r;
+        }
+        else
+        {
+            r = r2;
+        }
+    }    
+}
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    sp_int32_t use_count_;        // #shared
+    sp_int32_t weak_count_;       // #weak + (#shared != 0)
+
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        atomic_increment( &use_count_ );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        return atomic_conditional_increment( &use_count_ ) != 0;
+    }
+
+    void release() // nothrow
+    {
+        if( atomic_decrement( &use_count_ ) == 1 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        atomic_increment( &weak_count_ );
+    }
+
+    void weak_release() // nothrow
+    {
+        if( atomic_decrement( &weak_count_ ) == 1 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        return const_cast< sp_int32_t const volatile & >( use_count_ );
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SYNC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp
new file mode 100644
index 0000000..48d7789
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp
@@ -0,0 +1,151 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_VACPP_PPC_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_VACPP_PPC_HPP_INCLUDED
+
+//
+//  detail/sp_counted_base_vacpp_ppc.hpp - xlC(vacpp) on POWER
+//   based on: detail/sp_counted_base_w32.hpp
+//
+//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+//  Copyright 2004-2005 Peter Dimov
+//  Copyright 2006 Michael van der Westhuizen
+//  Copyright 2012 IBM Corp.
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+//  Lock-free algorithm by Alexander Terekhov
+//
+//  Thanks to Ben Hitchings for the #weak + (#shared != 0)
+//  formulation
+//
+
+#include <boost/detail/sp_typeinfo.hpp>
+
+extern "builtin" void __lwsync(void);
+extern "builtin" void __isync(void);
+extern "builtin" int __fetch_and_add(volatile int* addr, int val);
+extern "builtin" int __compare_and_swap(volatile int*, int*, int);
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+inline void atomic_increment( int *pw )
+{
+   // ++*pw;
+   __lwsync();
+   __fetch_and_add(pw, 1);
+   __isync();
+} 
+
+inline int atomic_decrement( int *pw )
+{
+   // return --*pw;
+   __lwsync();
+   int originalValue = __fetch_and_add(pw, -1);
+   __isync();
+
+   return (originalValue - 1);
+}
+
+inline int atomic_conditional_increment( int *pw )
+{
+   // if( *pw != 0 ) ++*pw;
+   // return *pw;
+
+   __lwsync();
+   int v = *const_cast<volatile int*>(pw);
+   for (;;)
+   // loop until state is known
+   {
+      if (v == 0) return 0;
+      if (__compare_and_swap(pw, &v, v + 1))
+      {
+         __isync(); return (v + 1);
+      }
+   }
+}
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    int use_count_;        // #shared
+    int weak_count_;       // #weak + (#shared != 0)
+    char pad[64] __attribute__((__aligned__(64)));
+            // pad to prevent false sharing
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        atomic_increment( &use_count_ );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        return atomic_conditional_increment( &use_count_ ) != 0;
+    }
+
+    void release() // nothrow
+    {
+        if( atomic_decrement( &use_count_ ) == 0 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        atomic_increment( &weak_count_ );
+    }
+
+    void weak_release() // nothrow
+    {
+        if( atomic_decrement( &weak_count_ ) == 0 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        return *const_cast<volatile int*>(&use_count_); 
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_VACPP_PPC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_w32.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_w32.hpp
new file mode 100644
index 0000000..1306252
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_base_w32.hpp
@@ -0,0 +1,131 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_W32_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_W32_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  detail/sp_counted_base_w32.hpp
+//
+//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+//  Copyright 2004-2005 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//
+//  Lock-free algorithm by Alexander Terekhov
+//
+//  Thanks to Ben Hitchings for the #weak + (#shared != 0)
+//  formulation
+//
+
+#include <boost/smart_ptr/detail/sp_interlocked.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/detail/sp_typeinfo.hpp>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+class sp_counted_base
+{
+private:
+
+    sp_counted_base( sp_counted_base const & );
+    sp_counted_base & operator= ( sp_counted_base const & );
+
+    long use_count_;        // #shared
+    long weak_count_;       // #weak + (#shared != 0)
+
+public:
+
+    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
+    {
+    }
+
+    virtual ~sp_counted_base() // nothrow
+    {
+    }
+
+    // dispose() is called when use_count_ drops to zero, to release
+    // the resources managed by *this.
+
+    virtual void dispose() = 0; // nothrow
+
+    // destroy() is called when weak_count_ drops to zero.
+
+    virtual void destroy() // nothrow
+    {
+        delete this;
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
+    virtual void * get_untyped_deleter() = 0;
+
+    void add_ref_copy()
+    {
+        BOOST_SP_INTERLOCKED_INCREMENT( &use_count_ );
+    }
+
+    bool add_ref_lock() // true on success
+    {
+        for( ;; )
+        {
+            long tmp = static_cast< long const volatile& >( use_count_ );
+            if( tmp == 0 ) return false;
+
+#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, == 1200 )
+
+            // work around a code generation bug
+
+            long tmp2 = tmp + 1;
+            if( BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE( &use_count_, tmp2, tmp ) == tmp2 - 1 ) return true;
+
+#else
+
+            if( BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE( &use_count_, tmp + 1, tmp ) == tmp ) return true;
+
+#endif
+        }
+    }
+
+    void release() // nothrow
+    {
+        if( BOOST_SP_INTERLOCKED_DECREMENT( &use_count_ ) == 0 )
+        {
+            dispose();
+            weak_release();
+        }
+    }
+
+    void weak_add_ref() // nothrow
+    {
+        BOOST_SP_INTERLOCKED_INCREMENT( &weak_count_ );
+    }
+
+    void weak_release() // nothrow
+    {
+        if( BOOST_SP_INTERLOCKED_DECREMENT( &weak_count_ ) == 0 )
+        {
+            destroy();
+        }
+    }
+
+    long use_count() const // nothrow
+    {
+        return static_cast<long const volatile &>( use_count_ );
+    }
+};
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_W32_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_impl.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_impl.hpp
new file mode 100644
index 0000000..b797e88
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_counted_impl.hpp
@@ -0,0 +1,271 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  detail/sp_counted_impl.hpp
+//
+//  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+//  Copyright 2004-2005 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_SP_USE_STD_ALLOCATOR) && defined(BOOST_SP_USE_QUICK_ALLOCATOR)
+# error BOOST_SP_USE_STD_ALLOCATOR and BOOST_SP_USE_QUICK_ALLOCATOR are incompatible.
+#endif
+
+#include <boost/checked_delete.hpp>
+#include <boost/smart_ptr/detail/sp_counted_base.hpp>
+
+#if defined(BOOST_SP_USE_QUICK_ALLOCATOR)
+#include <boost/smart_ptr/detail/quick_allocator.hpp>
+#endif
+
+#if defined(BOOST_SP_USE_STD_ALLOCATOR)
+#include <memory>           // std::allocator
+#endif
+
+#include <cstddef>          // std::size_t
+
+namespace pdalboost
+{
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+
+void sp_scalar_constructor_hook( void * px, std::size_t size, void * pn );
+void sp_scalar_destructor_hook( void * px, std::size_t size, void * pn );
+
+#endif
+
+namespace detail
+{
+
+template<class X> class sp_counted_impl_p: public sp_counted_base
+{
+private:
+
+    X * px_;
+
+    sp_counted_impl_p( sp_counted_impl_p const & );
+    sp_counted_impl_p & operator= ( sp_counted_impl_p const & );
+
+    typedef sp_counted_impl_p<X> this_type;
+
+public:
+
+    explicit sp_counted_impl_p( X * px ): px_( px )
+    {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        pdalboost::sp_scalar_constructor_hook( px, sizeof(X), this );
+#endif
+    }
+
+    virtual void dispose() // nothrow
+    {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        pdalboost::sp_scalar_destructor_hook( px_, sizeof(X), this );
+#endif
+        pdalboost::checked_delete( px_ );
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & )
+    {
+        return 0;
+    }
+
+    virtual void * get_untyped_deleter()
+    {
+        return 0;
+    }
+
+#if defined(BOOST_SP_USE_STD_ALLOCATOR)
+
+    void * operator new( std::size_t )
+    {
+        return std::allocator<this_type>().allocate( 1, static_cast<this_type *>(0) );
+    }
+
+    void operator delete( void * p )
+    {
+        std::allocator<this_type>().deallocate( static_cast<this_type *>(p), 1 );
+    }
+
+#endif
+
+#if defined(BOOST_SP_USE_QUICK_ALLOCATOR)
+
+    void * operator new( std::size_t )
+    {
+        return quick_allocator<this_type>::alloc();
+    }
+
+    void operator delete( void * p )
+    {
+        quick_allocator<this_type>::dealloc( p );
+    }
+
+#endif
+};
+
+//
+// Borland's Codeguard trips up over the -Vx- option here:
+//
+#ifdef __CODEGUARD__
+# pragma option push -Vx-
+#endif
+
+template<class P, class D> class sp_counted_impl_pd: public sp_counted_base
+{
+private:
+
+    P ptr; // copy constructor must not throw
+    D del; // copy constructor must not throw
+
+    sp_counted_impl_pd( sp_counted_impl_pd const & );
+    sp_counted_impl_pd & operator= ( sp_counted_impl_pd const & );
+
+    typedef sp_counted_impl_pd<P, D> this_type;
+
+public:
+
+    // pre: d(p) must not throw
+
+    sp_counted_impl_pd( P p, D & d ): ptr( p ), del( d )
+    {
+    }
+
+    sp_counted_impl_pd( P p ): ptr( p ), del()
+    {
+    }
+
+    virtual void dispose() // nothrow
+    {
+        del( ptr );
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti )
+    {
+        return ti == BOOST_SP_TYPEID(D)? &reinterpret_cast<char&>( del ): 0;
+    }
+
+    virtual void * get_untyped_deleter()
+    {
+        return &reinterpret_cast<char&>( del );
+    }
+
+#if defined(BOOST_SP_USE_STD_ALLOCATOR)
+
+    void * operator new( std::size_t )
+    {
+        return std::allocator<this_type>().allocate( 1, static_cast<this_type *>(0) );
+    }
+
+    void operator delete( void * p )
+    {
+        std::allocator<this_type>().deallocate( static_cast<this_type *>(p), 1 );
+    }
+
+#endif
+
+#if defined(BOOST_SP_USE_QUICK_ALLOCATOR)
+
+    void * operator new( std::size_t )
+    {
+        return quick_allocator<this_type>::alloc();
+    }
+
+    void operator delete( void * p )
+    {
+        quick_allocator<this_type>::dealloc( p );
+    }
+
+#endif
+};
+
+template<class P, class D, class A> class sp_counted_impl_pda: public sp_counted_base
+{
+private:
+
+    P p_; // copy constructor must not throw
+    D d_; // copy constructor must not throw
+    A a_; // copy constructor must not throw
+
+    sp_counted_impl_pda( sp_counted_impl_pda const & );
+    sp_counted_impl_pda & operator= ( sp_counted_impl_pda const & );
+
+    typedef sp_counted_impl_pda<P, D, A> this_type;
+
+public:
+
+    // pre: d( p ) must not throw
+
+    sp_counted_impl_pda( P p, D & d, A a ): p_( p ), d_( d ), a_( a )
+    {
+    }
+
+    sp_counted_impl_pda( P p, A a ): p_( p ), d_( a ), a_( a )
+    {
+    }
+
+    virtual void dispose() // nothrow
+    {
+        d_( p_ );
+    }
+
+    virtual void destroy() // nothrow
+    {
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+        typedef typename std::allocator_traits<A>::template rebind_alloc< this_type > A2;
+
+#else
+
+        typedef typename A::template rebind< this_type >::other A2;
+
+#endif
+
+        A2 a2( a_ );
+
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+        std::allocator_traits<A2>::destroy( a2, this );
+
+#else
+
+        this->~this_type();
+
+#endif
+
+        a2.deallocate( this, 1 );
+    }
+
+    virtual void * get_deleter( sp_typeinfo const & ti )
+    {
+        return ti == BOOST_SP_TYPEID( D )? &reinterpret_cast<char&>( d_ ): 0;
+    }
+
+    virtual void * get_untyped_deleter()
+    {
+        return &reinterpret_cast<char&>( d_ );
+    }
+};
+
+#ifdef __CODEGUARD__
+# pragma option pop
+#endif
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_disable_deprecated.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_disable_deprecated.hpp
new file mode 100644
index 0000000..f79bdf3
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_disable_deprecated.hpp
@@ -0,0 +1,40 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_DISABLE_DEPRECATED_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_DISABLE_DEPRECATED_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  boost/smart_ptr/detail/sp_disable_deprecated.hpp
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/config.hpp>
+
+#if defined( __GNUC__ ) && ( defined( __GXX_EXPERIMENTAL_CXX0X__ ) || ( __cplusplus >= 201103L ) )
+
+# if defined( BOOST_GCC )
+
+#  if BOOST_GCC >= 40600
+#   define BOOST_SP_DISABLE_DEPRECATED
+#  endif
+
+# elif defined( __clang__ ) && defined( __has_warning )
+
+#  if __has_warning( "-Wdeprecated-declarations" )
+#   define BOOST_SP_DISABLE_DEPRECATED
+#  endif
+
+# endif
+
+#endif
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_DISABLE_DEPRECATED_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_forward.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_forward.hpp
new file mode 100644
index 0000000..4a620fe
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_forward.hpp
@@ -0,0 +1,52 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_FORWARD_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_FORWARD_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//  detail/sp_forward.hpp
+//
+//  Copyright 2008,2012 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/config.hpp>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+#if defined( BOOST_GCC ) && __GNUC__ * 100 + __GNUC_MINOR__ <= 404
+
+// GCC 4.4 supports an outdated version of rvalue references and creates a copy of the forwarded object.
+// This results in warnings 'returning reference to temporary'. Therefore we use a special version similar to std::forward.
+template< class T > T&& sp_forward( T && t ) BOOST_NOEXCEPT
+{
+    return t;
+}
+
+#else
+
+template< class T > T&& sp_forward( T & t ) BOOST_NOEXCEPT
+{
+    return static_cast< T&& >( t );
+}
+
+#endif
+
+#endif
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_FORWARD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_has_sync.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_has_sync.hpp
new file mode 100644
index 0000000..16de21d
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_has_sync.hpp
@@ -0,0 +1,69 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  boost/smart_ptr/detail/sp_has_sync.hpp
+//
+//  Copyright (c) 2008, 2009 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  Defines the BOOST_SP_HAS_SYNC macro if the __sync_* intrinsics
+//  are available.
+//
+
+#ifndef BOOST_SP_NO_SYNC
+
+#if defined( __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 )
+
+# define BOOST_SP_HAS_SYNC
+
+#elif defined( __IBMCPP__ ) && ( __IBMCPP__ >= 1210 )
+
+# define BOOST_SP_HAS_SYNC
+
+#elif defined( __GNUC__ ) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 401 )
+
+#define BOOST_SP_HAS_SYNC
+
+#if defined( __arm__ )  || defined( __armel__ )
+#undef BOOST_SP_HAS_SYNC
+#endif
+
+#if defined( __hppa ) || defined( __hppa__ )
+#undef BOOST_SP_HAS_SYNC
+#endif
+
+#if defined( __m68k__ )
+#undef BOOST_SP_HAS_SYNC
+#endif
+
+#if defined( __sh__ )
+#undef BOOST_SP_HAS_SYNC
+#endif
+
+#if defined( __sparc__ )
+#undef BOOST_SP_HAS_SYNC
+#endif
+
+#if defined( __INTEL_COMPILER ) && !defined( __ia64__ ) && ( __INTEL_COMPILER < 1110 )
+#undef BOOST_SP_HAS_SYNC
+#endif
+
+#if defined(__PATHSCALE__) && ((__PATHCC__ == 4) && (__PATHCC_MINOR__ < 9)) 
+#undef BOOST_SP_HAS_SYNC
+#endif
+
+#endif
+
+#endif // #ifndef BOOST_SP_NO_SYNC
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_HAS_SYNC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_if_array.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_if_array.hpp
new file mode 100644
index 0000000..00da0ef
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_if_array.hpp
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2012-2014 Glen Joseph Fernandes 
+ * glenfe at live dot com
+ *
+ * Distributed under the Boost Software License, 
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt 
+ * or copy at http://boost.org/LICENSE_1_0.txt)
+ */
+#ifndef BOOST_SMART_PTR_DETAIL_SP_IF_ARRAY_HPP
+#define BOOST_SMART_PTR_DETAIL_SP_IF_ARRAY_HPP
+
+#include <boost/smart_ptr/shared_ptr.hpp>
+
+namespace pdalboost {
+    namespace detail {
+        template<class T>
+        struct sp_if_array;
+
+        template<class T>
+        struct sp_if_array<T[]> {
+            typedef pdalboost::shared_ptr<T[]> type;
+        };
+
+        template<class T>
+        struct sp_if_size_array;
+
+        template<class T, std::size_t N>
+        struct sp_if_size_array<T[N]> {
+            typedef pdalboost::shared_ptr<T[N]> type;
+        };
+    }
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_interlocked.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_interlocked.hpp
new file mode 100644
index 0000000..50f3762
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_interlocked.hpp
@@ -0,0 +1,163 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_INTERLOCKED_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_INTERLOCKED_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  boost/detail/sp_interlocked.hpp
+//
+//  Copyright 2005, 2014 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/config.hpp>
+
+// BOOST_SP_HAS_INTRIN_H
+
+// VC9 has intrin.h, but it collides with <utility>
+#if defined( BOOST_MSVC ) && BOOST_MSVC >= 1600
+
+# define BOOST_SP_HAS_INTRIN_H
+
+// Unlike __MINGW64__, __MINGW64_VERSION_MAJOR is defined by MinGW-w64 for both 32 and 64-bit targets.
+#elif defined( __MINGW64_VERSION_MAJOR )
+
+// MinGW-w64 provides intrin.h for both 32 and 64-bit targets.
+# define BOOST_SP_HAS_INTRIN_H
+
+// Intel C++ on Windows on VC10+ stdlib
+#elif defined( BOOST_INTEL_WIN ) && defined( _CPPLIB_VER ) && _CPPLIB_VER >= 520
+
+# define BOOST_SP_HAS_INTRIN_H
+
+#endif
+
+#if defined( BOOST_USE_WINDOWS_H )
+
+# include <windows.h>
+
+# define BOOST_SP_INTERLOCKED_INCREMENT InterlockedIncrement
+# define BOOST_SP_INTERLOCKED_DECREMENT InterlockedDecrement
+# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE InterlockedExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd
+
+#elif defined( BOOST_USE_INTRIN_H ) || defined( BOOST_SP_HAS_INTRIN_H )
+
+#include <intrin.h>
+
+# define BOOST_SP_INTERLOCKED_INCREMENT _InterlockedIncrement
+# define BOOST_SP_INTERLOCKED_DECREMENT _InterlockedDecrement
+# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE _InterlockedExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
+
+#elif defined( _WIN32_WCE )
+
+#if _WIN32_WCE >= 0x600
+
+extern "C" long __cdecl _InterlockedIncrement( long volatile * );
+extern "C" long __cdecl _InterlockedDecrement( long volatile * );
+extern "C" long __cdecl _InterlockedCompareExchange( long volatile *, long, long );
+extern "C" long __cdecl _InterlockedExchange( long volatile *, long );
+extern "C" long __cdecl _InterlockedExchangeAdd( long volatile *, long );
+
+# define BOOST_SP_INTERLOCKED_INCREMENT _InterlockedIncrement
+# define BOOST_SP_INTERLOCKED_DECREMENT _InterlockedDecrement
+# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE _InterlockedExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
+
+#else
+
+// under Windows CE we still have old-style Interlocked* functions
+
+extern "C" long __cdecl InterlockedIncrement( long* );
+extern "C" long __cdecl InterlockedDecrement( long* );
+extern "C" long __cdecl InterlockedCompareExchange( long*, long, long );
+extern "C" long __cdecl InterlockedExchange( long*, long );
+extern "C" long __cdecl InterlockedExchangeAdd( long*, long );
+
+# define BOOST_SP_INTERLOCKED_INCREMENT InterlockedIncrement
+# define BOOST_SP_INTERLOCKED_DECREMENT InterlockedDecrement
+# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE InterlockedExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd
+
+#endif
+
+#elif defined( BOOST_MSVC ) || defined( BOOST_INTEL_WIN )
+
+#if defined( __CLRCALL_PURE_OR_CDECL )
+
+extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedIncrement( long volatile * );
+extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedDecrement( long volatile * );
+extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedCompareExchange( long volatile *, long, long );
+extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedExchange( long volatile *, long );
+extern "C" long __CLRCALL_PURE_OR_CDECL _InterlockedExchangeAdd( long volatile *, long );
+
+#else
+
+extern "C" long __cdecl _InterlockedIncrement( long volatile * );
+extern "C" long __cdecl _InterlockedDecrement( long volatile * );
+extern "C" long __cdecl _InterlockedCompareExchange( long volatile *, long, long );
+extern "C" long __cdecl _InterlockedExchange( long volatile *, long );
+extern "C" long __cdecl _InterlockedExchangeAdd( long volatile *, long );
+
+# if defined( BOOST_MSVC ) && BOOST_MSVC == 1310
+//From MSDN, Visual Studio .NET 2003 spedific: To declare one of the interlocked functions
+//for use as an intrinsic, the function must be declared with the leading underscore and
+//the new function must appear in a #pragma intrinsic statement.
+#  pragma intrinsic( _InterlockedIncrement )
+#  pragma intrinsic( _InterlockedDecrement )
+#  pragma intrinsic( _InterlockedCompareExchange )
+#  pragma intrinsic( _InterlockedExchange )
+#  pragma intrinsic( _InterlockedExchangeAdd )
+# endif
+
+#endif
+
+# define BOOST_SP_INTERLOCKED_INCREMENT _InterlockedIncrement
+# define BOOST_SP_INTERLOCKED_DECREMENT _InterlockedDecrement
+# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE _InterlockedExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd
+
+#elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ )
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+extern "C" __declspec(dllimport) long __stdcall InterlockedIncrement( long volatile * );
+extern "C" __declspec(dllimport) long __stdcall InterlockedDecrement( long volatile * );
+extern "C" __declspec(dllimport) long __stdcall InterlockedCompareExchange( long volatile *, long, long );
+extern "C" __declspec(dllimport) long __stdcall InterlockedExchange( long volatile *, long );
+extern "C" __declspec(dllimport) long __stdcall InterlockedExchangeAdd( long volatile *, long );
+
+} // namespace detail
+
+} // namespace pdalboost
+
+# define BOOST_SP_INTERLOCKED_INCREMENT ::pdalboost::detail::InterlockedIncrement
+# define BOOST_SP_INTERLOCKED_DECREMENT ::pdalboost::detail::InterlockedDecrement
+# define BOOST_SP_INTERLOCKED_COMPARE_EXCHANGE ::pdalboost::detail::InterlockedCompareExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE ::pdalboost::detail::InterlockedExchange
+# define BOOST_SP_INTERLOCKED_EXCHANGE_ADD ::pdalboost::detail::InterlockedExchangeAdd
+
+#else
+
+# error "Interlocked intrinsics not available"
+
+#endif
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_INTERLOCKED_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/sp_nullptr_t.hpp b/vendor/pdalboost/boost/smart_ptr/detail/sp_nullptr_t.hpp
new file mode 100644
index 0000000..005e21b
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/sp_nullptr_t.hpp
@@ -0,0 +1,45 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SP_NULLPTR_T_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SP_NULLPTR_T_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//  detail/sp_nullptr_t.hpp
+//
+//  Copyright 2013 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/config.hpp>
+#include <cstddef>
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+#if !defined( BOOST_NO_CXX11_DECLTYPE ) && ( ( defined( __clang__ ) && !defined( _LIBCPP_VERSION ) ) || defined( __INTEL_COMPILER ) )
+
+    typedef decltype(nullptr) sp_nullptr_t;
+
+#else
+
+    typedef std::nullptr_t sp_nullptr_t;
+
+#endif
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif // !defined( BOOST_NO_CXX11_NULLPTR )
+
+#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_NULLPTR_T_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/spinlock.hpp b/vendor/pdalboost/boost/smart_ptr/detail/spinlock.hpp
new file mode 100644
index 0000000..19f93d7
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/spinlock.hpp
@@ -0,0 +1,65 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  boost/detail/spinlock.hpp
+//
+//  Copyright (c) 2008 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  struct spinlock
+//  {
+//      void lock();
+//      bool try_lock();
+//      void unlock();
+//
+//      class scoped_lock;
+//  };
+//
+//  #define BOOST_DETAIL_SPINLOCK_INIT <unspecified>
+//
+
+#include <boost/config.hpp>
+#include <boost/smart_ptr/detail/sp_has_sync.hpp>
+
+#if defined( BOOST_SP_USE_STD_ATOMIC )
+# if !defined( __clang__ )
+#   include <boost/smart_ptr/detail/spinlock_std_atomic.hpp>
+# else
+//  Clang (at least up to 3.4) can't compile spinlock_pool when
+//  using std::atomic, so substitute the __sync implementation instead.
+#   include <boost/smart_ptr/detail/spinlock_sync.hpp>
+# endif
+
+#elif defined( BOOST_SP_USE_PTHREADS )
+#  include <boost/smart_ptr/detail/spinlock_pt.hpp>
+
+#elif defined(__GNUC__) && defined( __arm__ ) && !defined( __thumb__ )
+#  include <boost/smart_ptr/detail/spinlock_gcc_arm.hpp>
+
+#elif defined( BOOST_SP_HAS_SYNC )
+#  include <boost/smart_ptr/detail/spinlock_sync.hpp>
+
+#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
+#  include <boost/smart_ptr/detail/spinlock_w32.hpp>
+
+#elif defined(BOOST_HAS_PTHREADS)
+#  include <boost/smart_ptr/detail/spinlock_pt.hpp>
+
+#elif !defined(BOOST_HAS_THREADS)
+#  include <boost/smart_ptr/detail/spinlock_nt.hpp>
+
+#else
+#  error Unrecognized threading platform
+#endif
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/spinlock_gcc_arm.hpp b/vendor/pdalboost/boost/smart_ptr/detail/spinlock_gcc_arm.hpp
new file mode 100644
index 0000000..0d106f2
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/spinlock_gcc_arm.hpp
@@ -0,0 +1,121 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED
+
+//
+//  Copyright (c) 2008, 2011 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/smart_ptr/detail/yield_k.hpp>
+
+#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7S__)
+
+# define BOOST_SP_ARM_BARRIER "dmb"
+# define BOOST_SP_ARM_HAS_LDREX
+
+#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__)
+
+# define BOOST_SP_ARM_BARRIER "mcr p15, 0, r0, c7, c10, 5"
+# define BOOST_SP_ARM_HAS_LDREX
+
+#else
+
+# define BOOST_SP_ARM_BARRIER ""
+
+#endif
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+class spinlock
+{
+public:
+
+    int v_;
+
+public:
+
+    bool try_lock()
+    {
+        int r;
+
+#ifdef BOOST_SP_ARM_HAS_LDREX
+
+        __asm__ __volatile__(
+            "ldrex %0, [%2]; \n"
+            "cmp %0, %1; \n"
+            "strexne %0, %1, [%2]; \n"
+            BOOST_SP_ARM_BARRIER :
+            "=&r"( r ): // outputs
+            "r"( 1 ), "r"( &v_ ): // inputs
+            "memory", "cc" );
+
+#else
+
+        __asm__ __volatile__(
+            "swp %0, %1, [%2];\n"
+            BOOST_SP_ARM_BARRIER :
+            "=&r"( r ): // outputs
+            "r"( 1 ), "r"( &v_ ): // inputs
+            "memory", "cc" );
+
+#endif
+
+        return r == 0;
+    }
+
+    void lock()
+    {
+        for( unsigned k = 0; !try_lock(); ++k )
+        {
+            pdalboost::detail::yield( k );
+        }
+    }
+
+    void unlock()
+    {
+        __asm__ __volatile__( BOOST_SP_ARM_BARRIER ::: "memory" );
+        *const_cast< int volatile* >( &v_ ) = 0;
+        __asm__ __volatile__( BOOST_SP_ARM_BARRIER ::: "memory" );
+    }
+
+public:
+
+    class scoped_lock
+    {
+    private:
+
+        spinlock & sp_;
+
+        scoped_lock( scoped_lock const & );
+        scoped_lock & operator=( scoped_lock const & );
+
+    public:
+
+        explicit scoped_lock( spinlock & sp ): sp_( sp )
+        {
+            sp.lock();
+        }
+
+        ~scoped_lock()
+        {
+            sp_.unlock();
+        }
+    };
+};
+
+} // namespace detail
+} // namespace pdalboost
+
+#define BOOST_DETAIL_SPINLOCK_INIT {0}
+
+#undef BOOST_SP_ARM_BARRIER
+#undef BOOST_SP_ARM_HAS_LDREX
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/spinlock_nt.hpp b/vendor/pdalboost/boost/smart_ptr/detail/spinlock_nt.hpp
new file mode 100644
index 0000000..eee9cd4
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/spinlock_nt.hpp
@@ -0,0 +1,89 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  Copyright (c) 2008 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/assert.hpp>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+class spinlock
+{
+public:
+
+    bool locked_;
+
+public:
+
+    inline bool try_lock()
+    {
+        if( locked_ )
+        {
+            return false;
+        }
+        else
+        {
+            locked_ = true;
+            return true;
+        }
+    }
+
+    inline void lock()
+    {
+        BOOST_ASSERT( !locked_ );
+        locked_ = true;
+    }
+
+    inline void unlock()
+    {
+        BOOST_ASSERT( locked_ );
+        locked_ = false;
+    }
+
+public:
+
+    class scoped_lock
+    {
+    private:
+
+        spinlock & sp_;
+
+        scoped_lock( scoped_lock const & );
+        scoped_lock & operator=( scoped_lock const & );
+
+    public:
+
+        explicit scoped_lock( spinlock & sp ): sp_( sp )
+        {
+            sp.lock();
+        }
+
+        ~scoped_lock()
+        {
+            sp_.unlock();
+        }
+    };
+};
+
+} // namespace detail
+} // namespace pdalboost
+
+#define BOOST_DETAIL_SPINLOCK_INIT { false }
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_NT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/spinlock_pool.hpp b/vendor/pdalboost/boost/smart_ptr/detail/spinlock_pool.hpp
new file mode 100644
index 0000000..c7fae11
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/spinlock_pool.hpp
@@ -0,0 +1,91 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  boost/detail/spinlock_pool.hpp
+//
+//  Copyright (c) 2008 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  spinlock_pool<0> is reserved for atomic<>, when/if it arrives
+//  spinlock_pool<1> is reserved for shared_ptr reference counts
+//  spinlock_pool<2> is reserved for shared_ptr atomic access
+//
+
+#include <boost/config.hpp>
+#include <boost/smart_ptr/detail/spinlock.hpp>
+#include <cstddef>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+template< int M > class spinlock_pool
+{
+private:
+
+    static spinlock pool_[ 41 ];
+
+public:
+
+    static spinlock & spinlock_for( void const * pv )
+    {
+#if defined(__VMS) && __INITIAL_POINTER_SIZE == 64  
+        std::size_t i = reinterpret_cast< unsigned long long >( pv ) % 41;
+#else  
+        std::size_t i = reinterpret_cast< std::size_t >( pv ) % 41;
+#endif  
+        return pool_[ i ];
+    }
+
+    class scoped_lock
+    {
+    private:
+
+        spinlock & sp_;
+
+        scoped_lock( scoped_lock const & );
+        scoped_lock & operator=( scoped_lock const & );
+
+    public:
+
+        explicit scoped_lock( void const * pv ): sp_( spinlock_for( pv ) )
+        {
+            sp_.lock();
+        }
+
+        ~scoped_lock()
+        {
+            sp_.unlock();
+        }
+    };
+};
+
+template< int M > spinlock spinlock_pool< M >::pool_[ 41 ] =
+{
+    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, 
+    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, 
+    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, 
+    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, 
+    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, 
+    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, 
+    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, 
+    BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, BOOST_DETAIL_SPINLOCK_INIT, 
+    BOOST_DETAIL_SPINLOCK_INIT
+};
+
+} // namespace detail
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_POOL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/spinlock_pt.hpp b/vendor/pdalboost/boost/smart_ptr/detail/spinlock_pt.hpp
new file mode 100644
index 0000000..2a3e403
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/spinlock_pt.hpp
@@ -0,0 +1,79 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  Copyright (c) 2008 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <pthread.h>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+class spinlock
+{
+public:
+
+    pthread_mutex_t v_;
+
+public:
+
+    bool try_lock()
+    {
+        return pthread_mutex_trylock( &v_ ) == 0;
+    }
+
+    void lock()
+    {
+        pthread_mutex_lock( &v_ );
+    }
+
+    void unlock()
+    {
+        pthread_mutex_unlock( &v_ );
+    }
+
+public:
+
+    class scoped_lock
+    {
+    private:
+
+        spinlock & sp_;
+
+        scoped_lock( scoped_lock const & );
+        scoped_lock & operator=( scoped_lock const & );
+
+    public:
+
+        explicit scoped_lock( spinlock & sp ): sp_( sp )
+        {
+            sp.lock();
+        }
+
+        ~scoped_lock()
+        {
+            sp_.unlock();
+        }
+    };
+};
+
+} // namespace detail
+} // namespace pdalboost
+
+#define BOOST_DETAIL_SPINLOCK_INIT { PTHREAD_MUTEX_INITIALIZER }
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_PT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/spinlock_std_atomic.hpp b/vendor/pdalboost/boost/smart_ptr/detail/spinlock_std_atomic.hpp
new file mode 100644
index 0000000..c8872fd
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/spinlock_std_atomic.hpp
@@ -0,0 +1,83 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_STD_ATOMIC_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SPINLOCK_STD_ATOMIC_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  Copyright (c) 2014 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/smart_ptr/detail/yield_k.hpp>
+#include <atomic>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+class spinlock
+{
+public:
+
+    std::atomic_flag v_;
+
+public:
+
+    bool try_lock()
+    {
+        return !v_.test_and_set( std::memory_order_acquire );
+    }
+
+    void lock()
+    {
+        for( unsigned k = 0; !try_lock(); ++k )
+        {
+            pdalboost::detail::yield( k );
+        }
+    }
+
+    void unlock()
+    {
+        v_ .clear( std::memory_order_release );
+    }
+
+public:
+
+    class scoped_lock
+    {
+    private:
+
+        spinlock & sp_;
+
+        scoped_lock( scoped_lock const & );
+        scoped_lock & operator=( scoped_lock const & );
+
+    public:
+
+        explicit scoped_lock( spinlock & sp ): sp_( sp )
+        {
+            sp.lock();
+        }
+
+        ~scoped_lock()
+        {
+            sp_.unlock();
+        }
+    };
+};
+
+} // namespace detail
+} // namespace pdalboost
+
+#define BOOST_DETAIL_SPINLOCK_INIT { ATOMIC_FLAG_INIT }
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_STD_ATOMIC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/spinlock_sync.hpp b/vendor/pdalboost/boost/smart_ptr/detail/spinlock_sync.hpp
new file mode 100644
index 0000000..1c8beb8
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/spinlock_sync.hpp
@@ -0,0 +1,87 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  Copyright (c) 2008 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/smart_ptr/detail/yield_k.hpp>
+
+#if defined( __ia64__ ) && defined( __INTEL_COMPILER )
+# include <ia64intrin.h>
+#endif
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+class spinlock
+{
+public:
+
+    int v_;
+
+public:
+
+    bool try_lock()
+    {
+        int r = __sync_lock_test_and_set( &v_, 1 );
+        return r == 0;
+    }
+
+    void lock()
+    {
+        for( unsigned k = 0; !try_lock(); ++k )
+        {
+            pdalboost::detail::yield( k );
+        }
+    }
+
+    void unlock()
+    {
+        __sync_lock_release( &v_ );
+    }
+
+public:
+
+    class scoped_lock
+    {
+    private:
+
+        spinlock & sp_;
+
+        scoped_lock( scoped_lock const & );
+        scoped_lock & operator=( scoped_lock const & );
+
+    public:
+
+        explicit scoped_lock( spinlock & sp ): sp_( sp )
+        {
+            sp.lock();
+        }
+
+        ~scoped_lock()
+        {
+            sp_.unlock();
+        }
+    };
+};
+
+} // namespace detail
+} // namespace pdalboost
+
+#define BOOST_DETAIL_SPINLOCK_INIT {0}
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_SYNC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/spinlock_w32.hpp b/vendor/pdalboost/boost/smart_ptr/detail/spinlock_w32.hpp
new file mode 100644
index 0000000..8d1afcd
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/spinlock_w32.hpp
@@ -0,0 +1,113 @@
+#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  Copyright (c) 2008 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#include <boost/smart_ptr/detail/sp_interlocked.hpp>
+#include <boost/smart_ptr/detail/yield_k.hpp>
+
+// BOOST_COMPILER_FENCE
+
+#if defined(__INTEL_COMPILER)
+
+#define BOOST_COMPILER_FENCE __memory_barrier();
+
+#elif defined( _MSC_VER ) && _MSC_VER >= 1310
+
+extern "C" void _ReadWriteBarrier();
+#pragma intrinsic( _ReadWriteBarrier )
+
+#define BOOST_COMPILER_FENCE _ReadWriteBarrier();
+
+#elif defined(__GNUC__)
+
+#define BOOST_COMPILER_FENCE __asm__ __volatile__( "" : : : "memory" );
+
+#else
+
+#define BOOST_COMPILER_FENCE
+
+#endif
+
+//
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+class spinlock
+{
+public:
+
+    long v_;
+
+public:
+
+    bool try_lock()
+    {
+        long r = BOOST_SP_INTERLOCKED_EXCHANGE( &v_, 1 );
+
+        BOOST_COMPILER_FENCE
+
+        return r == 0;
+    }
+
+    void lock()
+    {
+        for( unsigned k = 0; !try_lock(); ++k )
+        {
+            pdalboost::detail::yield( k );
+        }
+    }
+
+    void unlock()
+    {
+        BOOST_COMPILER_FENCE
+        *const_cast< long volatile* >( &v_ ) = 0;
+    }
+
+public:
+
+    class scoped_lock
+    {
+    private:
+
+        spinlock & sp_;
+
+        scoped_lock( scoped_lock const & );
+        scoped_lock & operator=( scoped_lock const & );
+
+    public:
+
+        explicit scoped_lock( spinlock & sp ): sp_( sp )
+        {
+            sp.lock();
+        }
+
+        ~scoped_lock()
+        {
+            sp_.unlock();
+        }
+    };
+};
+
+} // namespace detail
+} // namespace pdalboost
+
+#define BOOST_DETAIL_SPINLOCK_INIT {0}
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_W32_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/detail/yield_k.hpp b/vendor/pdalboost/boost/smart_ptr/detail/yield_k.hpp
new file mode 100644
index 0000000..e94ceb6
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/detail/yield_k.hpp
@@ -0,0 +1,177 @@
+#ifndef BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED
+#define BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  yield_k.hpp
+//
+//  Copyright (c) 2008 Peter Dimov
+//  Copyright (c) Microsoft Corporation 2014
+//
+//  void yield( unsigned k );
+//
+//  Typical use:
+//
+//  for( unsigned k = 0; !try_lock(); ++k ) yield( k );
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/config.hpp>
+#include <boost/predef.h>
+
+#if BOOST_PLAT_WINDOWS_RUNTIME
+#include <thread>
+#endif
+
+// BOOST_SMT_PAUSE
+
+#if defined(_MSC_VER) && _MSC_VER >= 1310 && ( defined(_M_IX86) || defined(_M_X64) )
+
+extern "C" void _mm_pause();
+
+#define BOOST_SMT_PAUSE _mm_pause();
+
+#elif defined(__GNUC__) && ( defined(__i386__) || defined(__x86_64__) )
+
+#define BOOST_SMT_PAUSE __asm__ __volatile__( "rep; nop" : : : "memory" );
+
+#endif
+
+//
+
+#if defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined( __CYGWIN__ )
+
+#if defined( BOOST_USE_WINDOWS_H )
+# include <windows.h>
+#endif
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+#if !defined( BOOST_USE_WINDOWS_H ) && !BOOST_PLAT_WINDOWS_RUNTIME
+#if !BOOST_COMP_CLANG || !defined __MINGW32__
+  extern "C" void __stdcall Sleep( unsigned long ms );
+#else
+#include <_mingw.h>
+#if !defined __MINGW64_VERSION_MAJOR
+  extern "C" void __stdcall Sleep( unsigned long ms );
+#else
+  extern "C" __declspec(dllimport) void __stdcall Sleep( unsigned long ms );
+#endif
+#endif
+#endif
+
+inline void yield( unsigned k )
+{
+    if( k < 4 )
+    {
+    }
+#if defined( BOOST_SMT_PAUSE )
+    else if( k < 16 )
+    {
+        BOOST_SMT_PAUSE
+    }
+#endif
+#if !BOOST_PLAT_WINDOWS_RUNTIME
+    else if( k < 32 )
+    {
+        Sleep( 0 );
+    }
+    else
+    {
+        Sleep( 1 );
+    }
+#else
+    else
+    {
+        // Sleep isn't supported on the Windows Runtime.
+        std::this_thread::yield();
+    }
+#endif
+}
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#elif defined( BOOST_HAS_PTHREADS )
+
+#ifndef _AIX
+#include <sched.h>
+#else
+   // AIX's sched.h defines ::var which sometimes conflicts with Lambda's var
+       extern "C" int sched_yield(void);
+#endif
+
+#include <time.h>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+inline void yield( unsigned k )
+{
+    if( k < 4 )
+    {
+    }
+#if defined( BOOST_SMT_PAUSE )
+    else if( k < 16 )
+    {
+        BOOST_SMT_PAUSE
+    }
+#endif
+    else if( k < 32 || k & 1 )
+    {
+        sched_yield();
+    }
+    else
+    {
+        // g++ -Wextra warns on {} or {0}
+        struct timespec rqtp = { 0, 0 };
+
+        // POSIX says that timespec has tv_sec and tv_nsec
+        // But it doesn't guarantee order or placement
+
+        rqtp.tv_sec = 0;
+        rqtp.tv_nsec = 1000;
+
+        nanosleep( &rqtp, 0 );
+    }
+}
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#else
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+inline void yield( unsigned )
+{
+}
+
+} // namespace detail
+
+} // namespace pdalboost
+
+#endif
+
+#endif // #ifndef BOOST_SMART_PTR_DETAIL_YIELD_K_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/enable_shared_from_this.hpp b/vendor/pdalboost/boost/smart_ptr/enable_shared_from_this.hpp
new file mode 100644
index 0000000..77cd6cf
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/enable_shared_from_this.hpp
@@ -0,0 +1,89 @@
+#ifndef BOOST_SMART_PTR_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED
+#define BOOST_SMART_PTR_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED
+
+//
+//  enable_shared_from_this.hpp
+//
+//  Copyright 2002, 2009 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  http://www.boost.org/libs/smart_ptr/enable_shared_from_this.html
+//
+
+#include <boost/smart_ptr/weak_ptr.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/assert.hpp>
+#include <boost/config.hpp>
+
+namespace pdalboost
+{
+
+template<class T> class enable_shared_from_this
+{
+protected:
+
+    enable_shared_from_this() BOOST_NOEXCEPT
+    {
+    }
+
+    enable_shared_from_this(enable_shared_from_this const &) BOOST_NOEXCEPT
+    {
+    }
+
+    enable_shared_from_this & operator=(enable_shared_from_this const &) BOOST_NOEXCEPT
+    {
+        return *this;
+    }
+
+    ~enable_shared_from_this() BOOST_NOEXCEPT // ~weak_ptr<T> newer throws, so this call also must not throw
+    {
+    }
+
+public:
+
+    shared_ptr<T> shared_from_this()
+    {
+        shared_ptr<T> p( weak_this_ );
+        BOOST_ASSERT( p.get() == this );
+        return p;
+    }
+
+    shared_ptr<T const> shared_from_this() const
+    {
+        shared_ptr<T const> p( weak_this_ );
+        BOOST_ASSERT( p.get() == this );
+        return p;
+    }
+
+    weak_ptr<T> weak_from_this() BOOST_NOEXCEPT
+    {
+        return weak_this_;
+    }
+
+    weak_ptr<T const> weak_from_this() const BOOST_NOEXCEPT
+    {
+        return weak_this_;
+    }
+
+public: // actually private, but avoids compiler template friendship issues
+
+    // Note: invoked automatically by shared_ptr; do not call
+    template<class X, class Y> void _internal_accept_owner( shared_ptr<X> const * ppx, Y * py ) const
+    {
+        if( weak_this_.expired() )
+        {
+            weak_this_ = shared_ptr<T>( *ppx, py );
+        }
+    }
+
+private:
+
+    mutable weak_ptr<T> weak_this_;
+};
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_ENABLE_SHARED_FROM_THIS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/intrusive_ptr.hpp b/vendor/pdalboost/boost/smart_ptr/intrusive_ptr.hpp
new file mode 100644
index 0000000..719d541
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/intrusive_ptr.hpp
@@ -0,0 +1,336 @@
+#ifndef BOOST_SMART_PTR_INTRUSIVE_PTR_HPP_INCLUDED
+#define BOOST_SMART_PTR_INTRUSIVE_PTR_HPP_INCLUDED
+
+//
+//  intrusive_ptr.hpp
+//
+//  Copyright (c) 2001, 2002 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/smart_ptr/intrusive_ptr.html for documentation.
+//
+
+#include <boost/config.hpp>
+
+#include <boost/assert.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/smart_ptr/detail/sp_convertible.hpp>
+#include <boost/smart_ptr/detail/sp_nullptr_t.hpp>
+
+#include <boost/config/no_tr1/functional.hpp>           // for std::less
+
+#if !defined(BOOST_NO_IOSTREAM)
+#if !defined(BOOST_NO_IOSFWD)
+#include <iosfwd>               // for std::basic_ostream
+#else
+#include <ostream>
+#endif
+#endif
+
+
+namespace pdalboost
+{
+
+//
+//  intrusive_ptr
+//
+//  A smart pointer that uses intrusive reference counting.
+//
+//  Relies on unqualified calls to
+//  
+//      void intrusive_ptr_add_ref(T * p);
+//      void intrusive_ptr_release(T * p);
+//
+//          (p != 0)
+//
+//  The object is responsible for destroying itself.
+//
+
+template<class T> class intrusive_ptr
+{
+private:
+
+    typedef intrusive_ptr this_type;
+
+public:
+
+    typedef T element_type;
+
+    intrusive_ptr() BOOST_NOEXCEPT : px( 0 )
+    {
+    }
+
+    intrusive_ptr( T * p, bool add_ref = true ): px( p )
+    {
+        if( px != 0 && add_ref ) intrusive_ptr_add_ref( px );
+    }
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES) || defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+
+    template<class U>
+#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )
+
+    intrusive_ptr( intrusive_ptr<U> const & rhs, typename pdalboost::detail::sp_enable_if_convertible<U,T>::type = pdalboost::detail::sp_empty() )
+
+#else
+
+    intrusive_ptr( intrusive_ptr<U> const & rhs )
+
+#endif
+    : px( rhs.get() )
+    {
+        if( px != 0 ) intrusive_ptr_add_ref( px );
+    }
+
+#endif
+
+    intrusive_ptr(intrusive_ptr const & rhs): px( rhs.px )
+    {
+        if( px != 0 ) intrusive_ptr_add_ref( px );
+    }
+
+    ~intrusive_ptr()
+    {
+        if( px != 0 ) intrusive_ptr_release( px );
+    }
+
+#if !defined(BOOST_NO_MEMBER_TEMPLATES) || defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+
+    template<class U> intrusive_ptr & operator=(intrusive_ptr<U> const & rhs)
+    {
+        this_type(rhs).swap(*this);
+        return *this;
+    }
+
+#endif
+
+// Move support
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+    intrusive_ptr(intrusive_ptr && rhs) BOOST_NOEXCEPT : px( rhs.px )
+    {
+        rhs.px = 0;
+    }
+
+    intrusive_ptr & operator=(intrusive_ptr && rhs) BOOST_NOEXCEPT
+    {
+        this_type( static_cast< intrusive_ptr && >( rhs ) ).swap(*this);
+        return *this;
+    }
+
+#endif
+
+    intrusive_ptr & operator=(intrusive_ptr const & rhs)
+    {
+        this_type(rhs).swap(*this);
+        return *this;
+    }
+
+    intrusive_ptr & operator=(T * rhs)
+    {
+        this_type(rhs).swap(*this);
+        return *this;
+    }
+
+    void reset() BOOST_NOEXCEPT
+    {
+        this_type().swap( *this );
+    }
+
+    void reset( T * rhs )
+    {
+        this_type( rhs ).swap( *this );
+    }
+
+    void reset( T * rhs, bool add_ref )
+    {
+        this_type( rhs, add_ref ).swap( *this );
+    }
+
+    T * get() const BOOST_NOEXCEPT
+    {
+        return px;
+    }
+
+    T * detach() BOOST_NOEXCEPT
+    {
+        T * ret = px;
+        px = 0;
+        return ret;
+    }
+
+    T & operator*() const
+    {
+        BOOST_ASSERT( px != 0 );
+        return *px;
+    }
+
+    T * operator->() const
+    {
+        BOOST_ASSERT( px != 0 );
+        return px;
+    }
+
+// implicit conversion to "bool"
+#include <boost/smart_ptr/detail/operator_bool.hpp>
+
+    void swap(intrusive_ptr & rhs) BOOST_NOEXCEPT
+    {
+        T * tmp = px;
+        px = rhs.px;
+        rhs.px = tmp;
+    }
+
+private:
+
+    T * px;
+};
+
+template<class T, class U> inline bool operator==(intrusive_ptr<T> const & a, intrusive_ptr<U> const & b)
+{
+    return a.get() == b.get();
+}
+
+template<class T, class U> inline bool operator!=(intrusive_ptr<T> const & a, intrusive_ptr<U> const & b)
+{
+    return a.get() != b.get();
+}
+
+template<class T, class U> inline bool operator==(intrusive_ptr<T> const & a, U * b)
+{
+    return a.get() == b;
+}
+
+template<class T, class U> inline bool operator!=(intrusive_ptr<T> const & a, U * b)
+{
+    return a.get() != b;
+}
+
+template<class T, class U> inline bool operator==(T * a, intrusive_ptr<U> const & b)
+{
+    return a == b.get();
+}
+
+template<class T, class U> inline bool operator!=(T * a, intrusive_ptr<U> const & b)
+{
+    return a != b.get();
+}
+
+#if __GNUC__ == 2 && __GNUC_MINOR__ <= 96
+
+// Resolve the ambiguity between our op!= and the one in rel_ops
+
+template<class T> inline bool operator!=(intrusive_ptr<T> const & a, intrusive_ptr<T> const & b)
+{
+    return a.get() != b.get();
+}
+
+#endif
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+template<class T> inline bool operator==( intrusive_ptr<T> const & p, pdalboost::detail::sp_nullptr_t ) BOOST_NOEXCEPT
+{
+    return p.get() == 0;
+}
+
+template<class T> inline bool operator==( pdalboost::detail::sp_nullptr_t, intrusive_ptr<T> const & p ) BOOST_NOEXCEPT
+{
+    return p.get() == 0;
+}
+
+template<class T> inline bool operator!=( intrusive_ptr<T> const & p, pdalboost::detail::sp_nullptr_t ) BOOST_NOEXCEPT
+{
+    return p.get() != 0;
+}
+
+template<class T> inline bool operator!=( pdalboost::detail::sp_nullptr_t, intrusive_ptr<T> const & p ) BOOST_NOEXCEPT
+{
+    return p.get() != 0;
+}
+
+#endif
+
+template<class T> inline bool operator<(intrusive_ptr<T> const & a, intrusive_ptr<T> const & b)
+{
+    return std::less<T *>()(a.get(), b.get());
+}
+
+template<class T> void swap(intrusive_ptr<T> & lhs, intrusive_ptr<T> & rhs)
+{
+    lhs.swap(rhs);
+}
+
+// mem_fn support
+
+template<class T> T * get_pointer(intrusive_ptr<T> const & p)
+{
+    return p.get();
+}
+
+template<class T, class U> intrusive_ptr<T> static_pointer_cast(intrusive_ptr<U> const & p)
+{
+    return static_cast<T *>(p.get());
+}
+
+template<class T, class U> intrusive_ptr<T> const_pointer_cast(intrusive_ptr<U> const & p)
+{
+    return const_cast<T *>(p.get());
+}
+
+template<class T, class U> intrusive_ptr<T> dynamic_pointer_cast(intrusive_ptr<U> const & p)
+{
+    return dynamic_cast<T *>(p.get());
+}
+
+// operator<<
+
+#if !defined(BOOST_NO_IOSTREAM)
+
+#if defined(BOOST_NO_TEMPLATED_IOSTREAMS) || ( defined(__GNUC__) &&  (__GNUC__ < 3) )
+
+template<class Y> std::ostream & operator<< (std::ostream & os, intrusive_ptr<Y> const & p)
+{
+    os << p.get();
+    return os;
+}
+
+#else
+
+// in STLport's no-iostreams mode no iostream symbols can be used
+#ifndef _STLP_NO_IOSTREAMS
+
+# if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300 && __SGI_STL_PORT)
+// MSVC6 has problems finding std::basic_ostream through the using declaration in namespace _STL
+using std::basic_ostream;
+template<class E, class T, class Y> basic_ostream<E, T> & operator<< (basic_ostream<E, T> & os, intrusive_ptr<Y> const & p)
+# else
+template<class E, class T, class Y> std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, intrusive_ptr<Y> const & p)
+# endif 
+{
+    os << p.get();
+    return os;
+}
+
+#endif // _STLP_NO_IOSTREAMS
+
+#endif // __GNUC__ < 3
+
+#endif // !defined(BOOST_NO_IOSTREAM)
+
+// hash_value
+
+template< class T > struct hash;
+
+template< class T > std::size_t hash_value( pdalboost::intrusive_ptr<T> const & p )
+{
+    return pdalboost::hash< T* >()( p.get() );
+}
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_INTRUSIVE_PTR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/make_shared.hpp b/vendor/pdalboost/boost/smart_ptr/make_shared.hpp
new file mode 100644
index 0000000..8d0e3ea
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/make_shared.hpp
@@ -0,0 +1,22 @@
+#ifndef BOOST_SMART_PTR_MAKE_SHARED_HPP_INCLUDED
+#define BOOST_SMART_PTR_MAKE_SHARED_HPP_INCLUDED
+
+//  make_shared.hpp
+//
+//  Copyright (c) 2007, 2008, 2012 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  See http://www.boost.org/libs/smart_ptr/make_shared.html
+//  for documentation.
+
+#include <boost/smart_ptr/make_shared_object.hpp>
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined( BOOST_NO_SFINAE )
+# include <boost/smart_ptr/make_shared_array.hpp>
+# include <boost/smart_ptr/allocate_shared_array.hpp>
+#endif
+
+#endif // #ifndef BOOST_SMART_PTR_MAKE_SHARED_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/make_shared_array.hpp b/vendor/pdalboost/boost/smart_ptr/make_shared_array.hpp
new file mode 100644
index 0000000..3a21067
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/make_shared_array.hpp
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 2012-2014 Glen Joseph Fernandes
+ * glenfe at live dot com
+ *
+ * Distributed under the Boost Software License,
+ * Version 1.0. (See accompanying file LICENSE_1_0.txt
+ * or copy at http://boost.org/LICENSE_1_0.txt)
+ */
+#ifndef BOOST_SMART_PTR_MAKE_SHARED_ARRAY_HPP
+#define BOOST_SMART_PTR_MAKE_SHARED_ARRAY_HPP
+
+#include <boost/smart_ptr/detail/array_count_impl.hpp>
+#include <boost/smart_ptr/detail/sp_if_array.hpp>
+
+namespace pdalboost {
+    template<class T>
+    inline typename pdalboost::detail::sp_if_array<T>::type
+    make_shared(std::size_t size) {
+        typedef typename pdalboost::detail::array_inner<T>::type T1;
+        typedef typename pdalboost::detail::array_base<T1>::type T2;
+        typedef pdalboost::detail::ms_allocator<T> A1;
+        typedef pdalboost::detail::ms_in_allocator_tag D1;
+        std::size_t n1 = size * pdalboost::detail::array_total<T1>::size;
+        T1* p1 = 0;
+        T2* p2 = 0;
+        D1 d1;
+        A1 a1(size, &p2);
+        shared_ptr<T> s1(p1, d1, a1);
+        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+        a2->set(0);
+        pdalboost::detail::ms_init(p2, n1);
+        a2->set(p2);
+        p1 = reinterpret_cast<T1*>(p2);
+        return shared_ptr<T>(s1, p1);
+    }
+
+    template<class T>
+    inline typename pdalboost::detail::sp_if_size_array<T>::type
+    make_shared() {
+        typedef typename pdalboost::detail::array_inner<T>::type T1;
+        typedef typename pdalboost::detail::array_base<T1>::type T2;
+        typedef pdalboost::detail::ms_allocator<T> A1;
+        typedef pdalboost::detail::ms_in_allocator_tag D1;
+        enum {
+            N = pdalboost::detail::array_total<T>::size
+        };
+        T1* p1 = 0;
+        T2* p2 = 0;
+        D1 d1;
+        A1 a1(&p2);
+        shared_ptr<T> s1(p1, d1, a1);
+        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+        a2->set(0);
+        pdalboost::detail::ms_init(p2, N);
+        a2->set(p2);
+        p1 = reinterpret_cast<T1*>(p2);
+        return shared_ptr<T>(s1, p1);
+    }
+
+    template<class T>
+    inline typename pdalboost::detail::sp_if_array<T>::type
+    make_shared(std::size_t size,
+        const typename pdalboost::detail::array_inner<T>::type& value) {
+        typedef typename pdalboost::detail::array_inner<T>::type T1;
+        typedef typename pdalboost::detail::array_base<T1>::type T2;
+        typedef const T2 T3;
+        typedef pdalboost::detail::ms_allocator<T> A1;
+        typedef pdalboost::detail::ms_in_allocator_tag D1;
+        enum {
+            M = pdalboost::detail::array_total<T1>::size
+        };
+        std::size_t n1 = M * size;
+        T1* p1 = 0;
+        T2* p2 = 0;
+        T3* p3 = reinterpret_cast<T3*>(&value);
+        D1 d1;
+        A1 a1(size, &p2);
+        shared_ptr<T> s1(p1, d1, a1);
+        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+        a2->set(0);
+        pdalboost::detail::ms_init<T2, M>(p2, n1, p3);
+        a2->set(p2);
+        p1 = reinterpret_cast<T1*>(p2);
+        return shared_ptr<T>(s1, p1);
+    }
+
+    template<class T>
+    inline typename pdalboost::detail::sp_if_size_array<T>::type
+    make_shared(const typename pdalboost::detail::array_inner<T>::type& value) {
+        typedef typename pdalboost::detail::array_inner<T>::type T1;
+        typedef typename pdalboost::detail::array_base<T1>::type T2;
+        typedef const T2 T3;
+        typedef pdalboost::detail::ms_allocator<T> A1;
+        typedef pdalboost::detail::ms_in_allocator_tag D1;
+        enum {
+            M = pdalboost::detail::array_total<T1>::size,
+            N = pdalboost::detail::array_total<T>::size
+        };
+        T1* p1 = 0;
+        T2* p2 = 0;
+        T3* p3 = reinterpret_cast<T3*>(&value);
+        D1 d1;
+        A1 a1(&p2);
+        shared_ptr<T> s1(p1, d1, a1);
+        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+        a2->set(0);
+        pdalboost::detail::ms_init<T2, M>(p2, N, p3);
+        a2->set(p2);
+        p1 = reinterpret_cast<T1*>(p2);
+        return shared_ptr<T>(s1, p1);
+    }
+
+    template<class T>
+    inline typename pdalboost::detail::sp_if_array<T>::type
+    make_shared_noinit(std::size_t size) {
+        typedef typename pdalboost::detail::array_inner<T>::type T1;
+        typedef typename pdalboost::detail::array_base<T1>::type T2;
+        typedef pdalboost::detail::ms_allocator<T> A1;
+        typedef pdalboost::detail::ms_in_allocator_tag D1;
+        std::size_t n1 = size * pdalboost::detail::array_total<T1>::size;
+        T1* p1 = 0;
+        T2* p2 = 0;
+        D1 d1;
+        A1 a1(size, &p2);
+        shared_ptr<T> s1(p1, d1, a1);
+        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+        a2->set(0);
+        pdalboost::detail::ms_noinit(p2, n1);
+        a2->set(p2);
+        p1 = reinterpret_cast<T1*>(p2);
+        return shared_ptr<T>(s1, p1);
+    }
+
+    template<class T>
+    inline typename pdalboost::detail::sp_if_size_array<T>::type
+    make_shared_noinit() {
+        typedef typename pdalboost::detail::array_inner<T>::type T1;
+        typedef typename pdalboost::detail::array_base<T1>::type T2;
+        typedef pdalboost::detail::ms_allocator<T> A1;
+        typedef pdalboost::detail::ms_in_allocator_tag D1;
+        enum {
+            N = pdalboost::detail::array_total<T>::size
+        };
+        T1* p1 = 0;
+        T2* p2 = 0;
+        D1 d1;
+        A1 a1(&p2);
+        shared_ptr<T> s1(p1, d1, a1);
+        A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
+        a2->set(0);
+        pdalboost::detail::ms_noinit(p2, N);
+        a2->set(p2);
+        p1 = reinterpret_cast<T1*>(p2);
+        return shared_ptr<T>(s1, p1);
+    }
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/smart_ptr/make_shared_object.hpp b/vendor/pdalboost/boost/smart_ptr/make_shared_object.hpp
new file mode 100644
index 0000000..0e3577d
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/make_shared_object.hpp
@@ -0,0 +1,1131 @@
+#ifndef BOOST_SMART_PTR_MAKE_SHARED_OBJECT_HPP_INCLUDED
+#define BOOST_SMART_PTR_MAKE_SHARED_OBJECT_HPP_INCLUDED
+
+//  make_shared_object.hpp
+//
+//  Copyright (c) 2007, 2008, 2012 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  See http://www.boost.org/libs/smart_ptr/make_shared.html
+//  for documentation.
+
+#include <boost/config.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/smart_ptr/detail/sp_forward.hpp>
+#include <boost/type_traits/type_with_alignment.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+#include <cstddef>
+#include <new>
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+template< std::size_t N, std::size_t A > struct sp_aligned_storage
+{
+    union type
+    {
+        char data_[ N ];
+        typename pdalboost::type_with_alignment< A >::type align_;
+    };
+};
+
+template< class T > class sp_ms_deleter
+{
+private:
+
+    typedef typename sp_aligned_storage< sizeof( T ), ::pdalboost::alignment_of< T >::value >::type storage_type;
+
+    bool initialized_;
+    storage_type storage_;
+
+private:
+
+    void destroy()
+    {
+        if( initialized_ )
+        {
+#if defined( __GNUC__ )
+
+            // fixes incorrect aliasing warning
+            T * p = reinterpret_cast< T* >( storage_.data_ );
+            p->~T();
+
+#else
+
+            reinterpret_cast< T* >( storage_.data_ )->~T();
+
+#endif
+
+            initialized_ = false;
+        }
+    }
+
+public:
+
+    sp_ms_deleter() BOOST_NOEXCEPT : initialized_( false )
+    {
+    }
+
+    template<class A> explicit sp_ms_deleter( A const & ) BOOST_NOEXCEPT : initialized_( false )
+    {
+    }
+
+    // optimization: do not copy storage_
+    sp_ms_deleter( sp_ms_deleter const & ) BOOST_NOEXCEPT : initialized_( false )
+    {
+    }
+
+    ~sp_ms_deleter()
+    {
+        destroy();
+    }
+
+    void operator()( T * )
+    {
+        destroy();
+    }
+
+    static void operator_fn( T* ) // operator() can't be static
+    {
+    }
+
+    void * address() BOOST_NOEXCEPT
+    {
+        return storage_.data_;
+    }
+
+    void set_initialized() BOOST_NOEXCEPT
+    {
+        initialized_ = true;
+    }
+};
+
+template< class T, class A > class sp_as_deleter
+{
+private:
+
+    typedef typename sp_aligned_storage< sizeof( T ), ::pdalboost::alignment_of< T >::value >::type storage_type;
+
+    storage_type storage_;
+    A a_;
+    bool initialized_;
+
+private:
+
+    void destroy()
+    {
+        if( initialized_ )
+        {
+            T * p = reinterpret_cast< T* >( storage_.data_ );
+
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+            std::allocator_traits<A>::destroy( a_, p );
+
+#else
+
+            p->~T();
+
+#endif
+
+            initialized_ = false;
+        }
+    }
+
+public:
+
+    sp_as_deleter( A const & a ) BOOST_NOEXCEPT : a_( a ), initialized_( false )
+    {
+    }
+
+    // optimization: do not copy storage_
+    sp_as_deleter( sp_as_deleter const & r ) BOOST_NOEXCEPT : a_( r.a_), initialized_( false )
+    {
+    }
+
+    ~sp_as_deleter()
+    {
+        destroy();
+    }
+
+    void operator()( T * )
+    {
+        destroy();
+    }
+
+    static void operator_fn( T* ) // operator() can't be static
+    {
+    }
+
+    void * address() BOOST_NOEXCEPT
+    {
+        return storage_.data_;
+    }
+
+    void set_initialized() BOOST_NOEXCEPT
+    {
+        initialized_ = true;
+    }
+};
+
+template< class T > struct sp_if_not_array
+{
+    typedef pdalboost::shared_ptr< T > type;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template< class T > struct sp_if_not_array< T[] >
+{
+};
+
+#if !defined( __BORLANDC__ ) || !BOOST_WORKAROUND( __BORLANDC__, < 0x600 )
+
+template< class T, std::size_t N > struct sp_if_not_array< T[N] >
+{
+};
+
+#endif
+
+#endif
+
+} // namespace detail
+
+#if !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )
+# define BOOST_SP_MSD( T ) pdalboost::detail::sp_inplace_tag< pdalboost::detail::sp_ms_deleter< T > >()
+#else
+# define BOOST_SP_MSD( T ) pdalboost::detail::sp_ms_deleter< T >()
+#endif
+
+// _noinit versions
+
+template< class T > typename pdalboost::detail::sp_if_not_array< T >::type make_shared_noinit()
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T;
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A > typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared_noinit( A const & a )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T;
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+#if !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+// Variadic templates, rvalue reference
+
+template< class T, class... Args > typename pdalboost::detail::sp_if_not_array< T >::type make_shared( Args && ... args )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( pdalboost::detail::sp_forward<Args>( args )... );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class... Args > typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, Args && ... args )
+{
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+    typedef typename std::allocator_traits<A>::template rebind_alloc<T> A2;
+    A2 a2( a );
+
+    typedef pdalboost::detail::sp_as_deleter< T, A2 > D;
+
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), pdalboost::detail::sp_inplace_tag<D>(), a2 );
+
+#else
+
+    typedef pdalboost::detail::sp_ms_deleter< T > D;
+
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), pdalboost::detail::sp_inplace_tag<D>(), a );
+
+#endif
+
+    D * pd = static_cast< D* >( pt._internal_get_untyped_deleter() );
+    void * pv = pd->address();
+
+#if !defined( BOOST_NO_CXX11_ALLOCATOR )
+
+    std::allocator_traits<A2>::construct( a2, static_cast< T* >( pv ), pdalboost::detail::sp_forward<Args>( args )... );
+
+#else
+
+    ::new( pv ) T( pdalboost::detail::sp_forward<Args>( args )... );
+
+#endif
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+#else // !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+// Common zero-argument versions
+
+template< class T > typename pdalboost::detail::sp_if_not_array< T >::type make_shared()
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T();
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A > typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T();
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+// For example MSVC 10.0
+
+template< class T, class A1 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 && a1 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T(
+        pdalboost::detail::sp_forward<A1>( a1 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( 
+        pdalboost::detail::sp_forward<A1>( a1 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T(
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( 
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2, class A3 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T(
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 ), 
+        pdalboost::detail::sp_forward<A3>( a3 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2, class A3 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( 
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 ), 
+        pdalboost::detail::sp_forward<A3>( a3 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2, class A3, class A4 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T(
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 ), 
+        pdalboost::detail::sp_forward<A3>( a3 ), 
+        pdalboost::detail::sp_forward<A4>( a4 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2, class A3, class A4 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( 
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 ), 
+        pdalboost::detail::sp_forward<A3>( a3 ), 
+        pdalboost::detail::sp_forward<A4>( a4 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2, class A3, class A4, class A5 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T(
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 ), 
+        pdalboost::detail::sp_forward<A3>( a3 ), 
+        pdalboost::detail::sp_forward<A4>( a4 ), 
+        pdalboost::detail::sp_forward<A5>( a5 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2, class A3, class A4, class A5 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( 
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 ), 
+        pdalboost::detail::sp_forward<A3>( a3 ), 
+        pdalboost::detail::sp_forward<A4>( a4 ), 
+        pdalboost::detail::sp_forward<A5>( a5 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2, class A3, class A4, class A5, class A6 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T(
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 ), 
+        pdalboost::detail::sp_forward<A3>( a3 ), 
+        pdalboost::detail::sp_forward<A4>( a4 ), 
+        pdalboost::detail::sp_forward<A5>( a5 ), 
+        pdalboost::detail::sp_forward<A6>( a6 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( 
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 ), 
+        pdalboost::detail::sp_forward<A3>( a3 ), 
+        pdalboost::detail::sp_forward<A4>( a4 ), 
+        pdalboost::detail::sp_forward<A5>( a5 ), 
+        pdalboost::detail::sp_forward<A6>( a6 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T(
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 ), 
+        pdalboost::detail::sp_forward<A3>( a3 ), 
+        pdalboost::detail::sp_forward<A4>( a4 ), 
+        pdalboost::detail::sp_forward<A5>( a5 ), 
+        pdalboost::detail::sp_forward<A6>( a6 ), 
+        pdalboost::detail::sp_forward<A7>( a7 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( 
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 ), 
+        pdalboost::detail::sp_forward<A3>( a3 ), 
+        pdalboost::detail::sp_forward<A4>( a4 ), 
+        pdalboost::detail::sp_forward<A5>( a5 ), 
+        pdalboost::detail::sp_forward<A6>( a6 ), 
+        pdalboost::detail::sp_forward<A7>( a7 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T(
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 ), 
+        pdalboost::detail::sp_forward<A3>( a3 ), 
+        pdalboost::detail::sp_forward<A4>( a4 ), 
+        pdalboost::detail::sp_forward<A5>( a5 ), 
+        pdalboost::detail::sp_forward<A6>( a6 ), 
+        pdalboost::detail::sp_forward<A7>( a7 ), 
+        pdalboost::detail::sp_forward<A8>( a8 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( 
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 ), 
+        pdalboost::detail::sp_forward<A3>( a3 ), 
+        pdalboost::detail::sp_forward<A4>( a4 ), 
+        pdalboost::detail::sp_forward<A5>( a5 ), 
+        pdalboost::detail::sp_forward<A6>( a6 ), 
+        pdalboost::detail::sp_forward<A7>( a7 ), 
+        pdalboost::detail::sp_forward<A8>( a8 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T(
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 ), 
+        pdalboost::detail::sp_forward<A3>( a3 ), 
+        pdalboost::detail::sp_forward<A4>( a4 ), 
+        pdalboost::detail::sp_forward<A5>( a5 ), 
+        pdalboost::detail::sp_forward<A6>( a6 ), 
+        pdalboost::detail::sp_forward<A7>( a7 ), 
+        pdalboost::detail::sp_forward<A8>( a8 ), 
+        pdalboost::detail::sp_forward<A9>( a9 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( 
+        pdalboost::detail::sp_forward<A1>( a1 ), 
+        pdalboost::detail::sp_forward<A2>( a2 ), 
+        pdalboost::detail::sp_forward<A3>( a3 ), 
+        pdalboost::detail::sp_forward<A4>( a4 ), 
+        pdalboost::detail::sp_forward<A5>( a5 ), 
+        pdalboost::detail::sp_forward<A6>( a6 ), 
+        pdalboost::detail::sp_forward<A7>( a7 ), 
+        pdalboost::detail::sp_forward<A8>( a8 ), 
+        pdalboost::detail::sp_forward<A9>( a9 )
+        );
+
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+#else // !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+// C++03 version
+
+template< class T, class A1 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2, class A3 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2, a3 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2, class A3 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2, a3 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2, class A3, class A4 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2, a3, a4 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2, class A3, class A4 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2, a3, a4 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2, class A3, class A4, class A5 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2, a3, a4, a5 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2, class A3, class A4, class A5 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2, a3, a4, a5 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2, class A3, class A4, class A5, class A6 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2, a3, a4, a5, a6 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2, a3, a4, a5, a6 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
+typename pdalboost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
+typename pdalboost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 )
+{
+    pdalboost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
+
+    pdalboost::detail::sp_ms_deleter< T > * pd = static_cast<pdalboost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
+
+    void * pv = pd->address();
+
+    ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
+    pd->set_initialized();
+
+    T * pt2 = static_cast< T* >( pv );
+
+    pdalboost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
+    return pdalboost::shared_ptr< T >( pt, pt2 );
+}
+
+#endif // !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+#endif // !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+#undef BOOST_SP_MSD
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_SMART_PTR_MAKE_SHARED_OBJECT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/scoped_array.hpp b/vendor/pdalboost/boost/smart_ptr/scoped_array.hpp
new file mode 100644
index 0000000..a597214
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/scoped_array.hpp
@@ -0,0 +1,132 @@
+#ifndef BOOST_SMART_PTR_SCOPED_ARRAY_HPP_INCLUDED
+#define BOOST_SMART_PTR_SCOPED_ARRAY_HPP_INCLUDED
+
+//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+//  Copyright (c) 2001, 2002 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  http://www.boost.org/libs/smart_ptr/scoped_array.htm
+//
+
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/smart_ptr/detail/sp_nullptr_t.hpp>
+
+#include <boost/detail/workaround.hpp>
+
+#include <cstddef>            // for std::ptrdiff_t
+
+namespace pdalboost
+{
+
+// Debug hooks
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+
+void sp_array_constructor_hook(void * p);
+void sp_array_destructor_hook(void * p);
+
+#endif
+
+//  scoped_array extends scoped_ptr to arrays. Deletion of the array pointed to
+//  is guaranteed, either on destruction of the scoped_array or via an explicit
+//  reset(). Use shared_array or std::vector if your needs are more complex.
+
+template<class T> class scoped_array // noncopyable
+{
+private:
+
+    T * px;
+
+    scoped_array(scoped_array const &);
+    scoped_array & operator=(scoped_array const &);
+
+    typedef scoped_array<T> this_type;
+
+    void operator==( scoped_array const& ) const;
+    void operator!=( scoped_array const& ) const;
+
+public:
+
+    typedef T element_type;
+
+    explicit scoped_array( T * p = 0 ) BOOST_NOEXCEPT : px( p )
+    {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        pdalboost::sp_array_constructor_hook( px );
+#endif
+    }
+
+    ~scoped_array() // never throws
+    {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        pdalboost::sp_array_destructor_hook( px );
+#endif
+        pdalboost::checked_array_delete( px );
+    }
+
+    void reset(T * p = 0) // never throws (but has a BOOST_ASSERT in it, so not marked with BOOST_NOEXCEPT)
+    {
+        BOOST_ASSERT( p == 0 || p != px ); // catch self-reset errors
+        this_type(p).swap(*this);
+    }
+
+    T & operator[](std::ptrdiff_t i) const // never throws (but has a BOOST_ASSERT in it, so not marked with BOOST_NOEXCEPT)
+    {
+        BOOST_ASSERT( px != 0 );
+        BOOST_ASSERT( i >= 0 );
+        return px[i];
+    }
+
+    T * get() const BOOST_NOEXCEPT
+    {
+        return px;
+    }
+
+// implicit conversion to "bool"
+#include <boost/smart_ptr/detail/operator_bool.hpp>
+
+    void swap(scoped_array & b) BOOST_NOEXCEPT
+    {
+        T * tmp = b.px;
+        b.px = px;
+        px = tmp;
+    }
+};
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+template<class T> inline bool operator==( scoped_array<T> const & p, pdalboost::detail::sp_nullptr_t ) BOOST_NOEXCEPT
+{
+    return p.get() == 0;
+}
+
+template<class T> inline bool operator==( pdalboost::detail::sp_nullptr_t, scoped_array<T> const & p ) BOOST_NOEXCEPT
+{
+    return p.get() == 0;
+}
+
+template<class T> inline bool operator!=( scoped_array<T> const & p, pdalboost::detail::sp_nullptr_t ) BOOST_NOEXCEPT
+{
+    return p.get() != 0;
+}
+
+template<class T> inline bool operator!=( pdalboost::detail::sp_nullptr_t, scoped_array<T> const & p ) BOOST_NOEXCEPT
+{
+    return p.get() != 0;
+}
+
+#endif
+
+template<class T> inline void swap(scoped_array<T> & a, scoped_array<T> & b) BOOST_NOEXCEPT
+{
+    a.swap(b);
+}
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_SCOPED_ARRAY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/scoped_ptr.hpp b/vendor/pdalboost/boost/smart_ptr/scoped_ptr.hpp
new file mode 100644
index 0000000..d88e5d5
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/scoped_ptr.hpp
@@ -0,0 +1,167 @@
+#ifndef BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED
+#define BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED
+
+//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+//  Copyright (c) 2001, 2002 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  http://www.boost.org/libs/smart_ptr/scoped_ptr.htm
+//
+
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/smart_ptr/detail/sp_nullptr_t.hpp>
+#include <boost/smart_ptr/detail/sp_disable_deprecated.hpp>
+#include <boost/detail/workaround.hpp>
+
+#ifndef BOOST_NO_AUTO_PTR
+# include <memory>          // for std::auto_ptr
+#endif
+
+#if defined( BOOST_SP_DISABLE_DEPRECATED )
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
+namespace pdalboost
+{
+
+// Debug hooks
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+
+void sp_scalar_constructor_hook(void * p);
+void sp_scalar_destructor_hook(void * p);
+
+#endif
+
+//  scoped_ptr mimics a built-in pointer except that it guarantees deletion
+//  of the object pointed to, either on destruction of the scoped_ptr or via
+//  an explicit reset(). scoped_ptr is a simple solution for simple needs;
+//  use shared_ptr or std::auto_ptr if your needs are more complex.
+
+template<class T> class scoped_ptr // noncopyable
+{
+private:
+
+    T * px;
+
+    scoped_ptr(scoped_ptr const &);
+    scoped_ptr & operator=(scoped_ptr const &);
+
+    typedef scoped_ptr<T> this_type;
+
+    void operator==( scoped_ptr const& ) const;
+    void operator!=( scoped_ptr const& ) const;
+
+public:
+
+    typedef T element_type;
+
+    explicit scoped_ptr( T * p = 0 ): px( p ) // never throws
+    {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        pdalboost::sp_scalar_constructor_hook( px );
+#endif
+    }
+
+#ifndef BOOST_NO_AUTO_PTR
+
+    explicit scoped_ptr( std::auto_ptr<T> p ) BOOST_NOEXCEPT : px( p.release() )
+    {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        pdalboost::sp_scalar_constructor_hook( px );
+#endif
+    }
+
+#endif
+
+    ~scoped_ptr() // never throws
+    {
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+        pdalboost::sp_scalar_destructor_hook( px );
+#endif
+        pdalboost::checked_delete( px );
+    }
+
+    void reset(T * p = 0) // never throws
+    {
+        BOOST_ASSERT( p == 0 || p != px ); // catch self-reset errors
+        this_type(p).swap(*this);
+    }
+
+    T & operator*() const // never throws
+    {
+        BOOST_ASSERT( px != 0 );
+        return *px;
+    }
+
+    T * operator->() const // never throws
+    {
+        BOOST_ASSERT( px != 0 );
+        return px;
+    }
+
+    T * get() const BOOST_NOEXCEPT
+    {
+        return px;
+    }
+
+// implicit conversion to "bool"
+#include <boost/smart_ptr/detail/operator_bool.hpp>
+
+    void swap(scoped_ptr & b) BOOST_NOEXCEPT
+    {
+        T * tmp = b.px;
+        b.px = px;
+        px = tmp;
+    }
+};
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+template<class T> inline bool operator==( scoped_ptr<T> const & p, pdalboost::detail::sp_nullptr_t ) BOOST_NOEXCEPT
+{
+    return p.get() == 0;
+}
+
+template<class T> inline bool operator==( pdalboost::detail::sp_nullptr_t, scoped_ptr<T> const & p ) BOOST_NOEXCEPT
+{
+    return p.get() == 0;
+}
+
+template<class T> inline bool operator!=( scoped_ptr<T> const & p, pdalboost::detail::sp_nullptr_t ) BOOST_NOEXCEPT
+{
+    return p.get() != 0;
+}
+
+template<class T> inline bool operator!=( pdalboost::detail::sp_nullptr_t, scoped_ptr<T> const & p ) BOOST_NOEXCEPT
+{
+    return p.get() != 0;
+}
+
+#endif
+
+template<class T> inline void swap(scoped_ptr<T> & a, scoped_ptr<T> & b) BOOST_NOEXCEPT
+{
+    a.swap(b);
+}
+
+// get_pointer(p) is a generic way to say p.get()
+
+template<class T> inline T * get_pointer(scoped_ptr<T> const & p) BOOST_NOEXCEPT
+{
+    return p.get();
+}
+
+} // namespace pdalboost
+
+#if defined( BOOST_SP_DISABLE_DEPRECATED )
+#pragma GCC diagnostic pop
+#endif
+
+#endif // #ifndef BOOST_SMART_PTR_SCOPED_PTR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/shared_array.hpp b/vendor/pdalboost/boost/smart_ptr/shared_array.hpp
new file mode 100644
index 0000000..6df1ade
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/shared_array.hpp
@@ -0,0 +1,292 @@
+#ifndef BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED
+#define BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED
+
+//
+//  shared_array.hpp
+//
+//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+//  Copyright (c) 2001, 2002, 2012 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/smart_ptr/shared_array.htm for documentation.
+//
+
+#include <boost/config.hpp>   // for broken compiler workarounds
+
+#include <memory>             // TR1 cyclic inclusion fix
+
+#include <boost/assert.hpp>
+#include <boost/checked_delete.hpp>
+
+#include <boost/smart_ptr/shared_ptr.hpp>
+#include <boost/smart_ptr/detail/shared_count.hpp>
+#include <boost/smart_ptr/detail/sp_nullptr_t.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <cstddef>            // for std::ptrdiff_t
+#include <algorithm>          // for std::swap
+#include <functional>         // for std::less
+
+namespace pdalboost
+{
+
+//
+//  shared_array
+//
+//  shared_array extends shared_ptr to arrays.
+//  The array pointed to is deleted when the last shared_array pointing to it
+//  is destroyed or reset.
+//
+
+template<class T> class shared_array
+{
+private:
+
+    // Borland 5.5.1 specific workarounds
+    typedef checked_array_deleter<T> deleter;
+    typedef shared_array<T> this_type;
+
+public:
+
+    typedef T element_type;
+
+    shared_array() BOOST_NOEXCEPT : px( 0 ), pn()
+    {
+    }
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+    shared_array( pdalboost::detail::sp_nullptr_t ) BOOST_NOEXCEPT : px( 0 ), pn()
+    {
+    }
+
+#endif
+
+    template<class Y>
+    explicit shared_array( Y * p ): px( p ), pn( p, checked_array_deleter<Y>() )
+    {
+        pdalboost::detail::sp_assert_convertible< Y[], T[] >();
+    }
+
+    //
+    // Requirements: D's copy constructor must not throw
+    //
+    // shared_array will release p by calling d(p)
+    //
+
+    template<class Y, class D> shared_array( Y * p, D d ): px( p ), pn( p, d )
+    {
+        pdalboost::detail::sp_assert_convertible< Y[], T[] >();
+    }
+
+    // As above, but with allocator. A's copy constructor shall not throw.
+
+    template<class Y, class D, class A> shared_array( Y * p, D d, A a ): px( p ), pn( p, d, a )
+    {
+        pdalboost::detail::sp_assert_convertible< Y[], T[] >();
+    }
+
+//  generated copy constructor, destructor are fine...
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+// ... except in C++0x, move disables the implicit copy
+
+    shared_array( shared_array const & r ) BOOST_NOEXCEPT : px( r.px ), pn( r.pn )
+    {
+    }
+
+    shared_array( shared_array && r ) BOOST_NOEXCEPT : px( r.px ), pn()
+    {
+        pn.swap( r.pn );
+        r.px = 0;
+    }
+
+#endif
+
+    // conversion
+
+    template<class Y>
+#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )
+
+    shared_array( shared_array<Y> const & r, typename pdalboost::detail::sp_enable_if_convertible< Y[], T[] >::type = pdalboost::detail::sp_empty() )
+
+#else
+
+    shared_array( shared_array<Y> const & r )
+
+#endif
+    BOOST_NOEXCEPT : px( r.px ), pn( r.pn ) // never throws
+    {
+        pdalboost::detail::sp_assert_convertible< Y[], T[] >();
+    }
+
+    // aliasing
+
+    template< class Y >
+    shared_array( shared_array<Y> const & r, element_type * p ) BOOST_NOEXCEPT : px( p ), pn( r.pn )
+    {
+    }
+
+    // assignment
+
+    shared_array & operator=( shared_array const & r ) BOOST_NOEXCEPT
+    {
+        this_type( r ).swap( *this );
+        return *this;
+    }
+
+#if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1400)
+
+    template<class Y>
+    shared_array & operator=( shared_array<Y> const & r ) BOOST_NOEXCEPT
+    {
+        this_type( r ).swap( *this );
+        return *this;
+    }
+
+#endif
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+    shared_array & operator=( shared_array && r ) BOOST_NOEXCEPT
+    {
+        this_type( static_cast< shared_array && >( r ) ).swap( *this );
+        return *this;
+    }
+
+    template<class Y>
+    shared_array & operator=( shared_array<Y> && r ) BOOST_NOEXCEPT
+    {
+        this_type( static_cast< shared_array<Y> && >( r ) ).swap( *this );
+        return *this;
+    }
+
+#endif
+
+    void reset() BOOST_NOEXCEPT
+    {
+        this_type().swap( *this );
+    }
+
+    template<class Y> void reset( Y * p ) // Y must be complete
+    {
+        BOOST_ASSERT( p == 0 || p != px ); // catch self-reset errors
+        this_type( p ).swap( *this );
+    }
+
+    template<class Y, class D> void reset( Y * p, D d )
+    {
+        this_type( p, d ).swap( *this );
+    }
+
+    template<class Y, class D, class A> void reset( Y * p, D d, A a )
+    {
+        this_type( p, d, a ).swap( *this );
+    }
+
+    template<class Y> void reset( shared_array<Y> const & r, element_type * p )
+    {
+        this_type( r, p ).swap( *this );
+    }
+
+    T & operator[] (std::ptrdiff_t i) const // never throws (but has a BOOST_ASSERT in it, so not marked with BOOST_NOEXCEPT)
+    {
+        BOOST_ASSERT(px != 0);
+        BOOST_ASSERT(i >= 0);
+        return px[i];
+    }
+    
+    T * get() const BOOST_NOEXCEPT
+    {
+        return px;
+    }
+
+// implicit conversion to "bool"
+#include <boost/smart_ptr/detail/operator_bool.hpp>
+
+    bool unique() const BOOST_NOEXCEPT
+    {
+        return pn.unique();
+    }
+
+    long use_count() const BOOST_NOEXCEPT
+    {
+        return pn.use_count();
+    }
+
+    void swap(shared_array<T> & other) BOOST_NOEXCEPT
+    {
+        std::swap(px, other.px);
+        pn.swap(other.pn);
+    }
+
+    void * _internal_get_deleter( pdalboost::detail::sp_typeinfo const & ti ) const
+    {
+        return pn.get_deleter( ti );
+    }
+
+private:
+
+    template<class Y> friend class shared_array;
+
+    T * px;                     // contained pointer
+    detail::shared_count pn;    // reference counter
+
+};  // shared_array
+
+template<class T> inline bool operator==(shared_array<T> const & a, shared_array<T> const & b) BOOST_NOEXCEPT
+{
+    return a.get() == b.get();
+}
+
+template<class T> inline bool operator!=(shared_array<T> const & a, shared_array<T> const & b) BOOST_NOEXCEPT
+{
+    return a.get() != b.get();
+}
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+template<class T> inline bool operator==( shared_array<T> const & p, pdalboost::detail::sp_nullptr_t ) BOOST_NOEXCEPT
+{
+    return p.get() == 0;
+}
+
+template<class T> inline bool operator==( pdalboost::detail::sp_nullptr_t, shared_array<T> const & p ) BOOST_NOEXCEPT
+{
+    return p.get() == 0;
+}
+
+template<class T> inline bool operator!=( shared_array<T> const & p, pdalboost::detail::sp_nullptr_t ) BOOST_NOEXCEPT
+{
+    return p.get() != 0;
+}
+
+template<class T> inline bool operator!=( pdalboost::detail::sp_nullptr_t, shared_array<T> const & p ) BOOST_NOEXCEPT
+{
+    return p.get() != 0;
+}
+
+#endif
+
+template<class T> inline bool operator<(shared_array<T> const & a, shared_array<T> const & b) BOOST_NOEXCEPT
+{
+    return std::less<T*>()(a.get(), b.get());
+}
+
+template<class T> void swap(shared_array<T> & a, shared_array<T> & b) BOOST_NOEXCEPT
+{
+    a.swap(b);
+}
+
+template< class D, class T > D * get_deleter( shared_array<T> const & p )
+{
+    return static_cast< D * >( p._internal_get_deleter( BOOST_SP_TYPEID(D) ) );
+}
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_SHARED_ARRAY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/shared_ptr.hpp b/vendor/pdalboost/boost/smart_ptr/shared_ptr.hpp
new file mode 100644
index 0000000..58b841a
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/shared_ptr.hpp
@@ -0,0 +1,1077 @@
+#ifndef BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED
+#define BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED
+
+//
+//  shared_ptr.hpp
+//
+//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+//  Copyright (c) 2001-2008 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/smart_ptr/shared_ptr.htm for documentation.
+//
+
+#include <boost/config.hpp>   // for broken compiler workarounds
+
+// In order to avoid circular dependencies with Boost.TR1
+// we make sure that our include of <memory> doesn't try to
+// pull in the TR1 headers: that's why we use this header 
+// rather than including <memory> directly:
+#include <boost/config/no_tr1/memory.hpp>  // std::auto_ptr
+
+#include <boost/assert.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/smart_ptr/detail/shared_count.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/smart_ptr/detail/sp_convertible.hpp>
+#include <boost/smart_ptr/detail/sp_nullptr_t.hpp>
+#include <boost/smart_ptr/detail/sp_disable_deprecated.hpp>
+
+#if !defined(BOOST_SP_NO_ATOMIC_ACCESS)
+#include <boost/smart_ptr/detail/spinlock_pool.hpp>
+#endif
+
+#include <algorithm>            // for std::swap
+#include <functional>           // for std::less
+#include <typeinfo>             // for std::bad_cast
+#include <cstddef>              // for std::size_t
+
+#if !defined(BOOST_NO_IOSTREAM)
+#if !defined(BOOST_NO_IOSFWD)
+#include <iosfwd>               // for std::basic_ostream
+#else
+#include <ostream>
+#endif
+#endif
+
+#if defined( BOOST_SP_DISABLE_DEPRECATED )
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
+namespace pdalboost
+{
+
+template<class T> class shared_ptr;
+template<class T> class weak_ptr;
+template<class T> class enable_shared_from_this;
+class enable_shared_from_raw;
+
+namespace movelib
+{
+
+    template< class T, class D > class unique_ptr;
+
+} // namespace movelib
+
+namespace detail
+{
+
+// sp_element, element_type
+
+template< class T > struct sp_element
+{
+    typedef T type;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template< class T > struct sp_element< T[] >
+{
+    typedef T type;
+};
+
+#if !defined( __BORLANDC__ ) || !BOOST_WORKAROUND( __BORLANDC__, < 0x600 )
+
+template< class T, std::size_t N > struct sp_element< T[N] >
+{
+    typedef T type;
+};
+
+#endif
+
+#endif // !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+// sp_dereference, return type of operator*
+
+template< class T > struct sp_dereference
+{
+    typedef T & type;
+};
+
+template<> struct sp_dereference< void >
+{
+    typedef void type;
+};
+
+#if !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)
+
+template<> struct sp_dereference< void const >
+{
+    typedef void type;
+};
+
+template<> struct sp_dereference< void volatile >
+{
+    typedef void type;
+};
+
+template<> struct sp_dereference< void const volatile >
+{
+    typedef void type;
+};
+
+#endif // !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template< class T > struct sp_dereference< T[] >
+{
+    typedef void type;
+};
+
+#if !defined( __BORLANDC__ ) || !BOOST_WORKAROUND( __BORLANDC__, < 0x600 )
+
+template< class T, std::size_t N > struct sp_dereference< T[N] >
+{
+    typedef void type;
+};
+
+#endif
+
+#endif // !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+// sp_member_access, return type of operator->
+
+template< class T > struct sp_member_access
+{
+    typedef T * type;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template< class T > struct sp_member_access< T[] >
+{
+    typedef void type;
+};
+
+#if !defined( __BORLANDC__ ) || !BOOST_WORKAROUND( __BORLANDC__, < 0x600 )
+
+template< class T, std::size_t N > struct sp_member_access< T[N] >
+{
+    typedef void type;
+};
+
+#endif
+
+#endif // !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+// sp_array_access, return type of operator[]
+
+template< class T > struct sp_array_access
+{
+    typedef void type;
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template< class T > struct sp_array_access< T[] >
+{
+    typedef T & type;
+};
+
+#if !defined( __BORLANDC__ ) || !BOOST_WORKAROUND( __BORLANDC__, < 0x600 )
+
+template< class T, std::size_t N > struct sp_array_access< T[N] >
+{
+    typedef T & type;
+};
+
+#endif
+
+#endif // !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+// sp_extent, for operator[] index check
+
+template< class T > struct sp_extent
+{
+    enum _vt { value = 0 };
+};
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template< class T, std::size_t N > struct sp_extent< T[N] >
+{
+    enum _vt { value = N };
+};
+
+#endif // !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+// enable_shared_from_this support
+
+template< class X, class Y, class T > inline void sp_enable_shared_from_this( pdalboost::shared_ptr<X> const * ppx, Y const * py, pdalboost::enable_shared_from_this< T > const * pe )
+{
+    if( pe != 0 )
+    {
+        pe->_internal_accept_owner( ppx, const_cast< Y* >( py ) );
+    }
+}
+
+template< class X, class Y > inline void sp_enable_shared_from_this( pdalboost::shared_ptr<X> * ppx, Y const * py, pdalboost::enable_shared_from_raw const * pe );
+
+#ifdef _MANAGED
+
+// Avoid C4793, ... causes native code generation
+
+struct sp_any_pointer
+{
+    template<class T> sp_any_pointer( T* ) {}
+};
+
+inline void sp_enable_shared_from_this( sp_any_pointer, sp_any_pointer, sp_any_pointer )
+{
+}
+
+#else // _MANAGED
+
+inline void sp_enable_shared_from_this( ... )
+{
+}
+
+#endif // _MANAGED
+
+#if !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined( BOOST_NO_AUTO_PTR )
+
+// rvalue auto_ptr support based on a technique by Dave Abrahams
+
+template< class T, class R > struct sp_enable_if_auto_ptr
+{
+};
+
+template< class T, class R > struct sp_enable_if_auto_ptr< std::auto_ptr< T >, R >
+{
+    typedef R type;
+}; 
+
+#endif
+
+// sp_assert_convertible
+
+template< class Y, class T > inline void sp_assert_convertible()
+{
+#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )
+
+    // static_assert( sp_convertible< Y, T >::value );
+    typedef char tmp[ sp_convertible< Y, T >::value? 1: -1 ];
+    (void)sizeof( tmp );
+
+#else
+
+    T* p = static_cast< Y* >( 0 );
+    (void)p;
+
+#endif
+}
+
+// pointer constructor helper
+
+template< class T, class Y > inline void sp_pointer_construct( pdalboost::shared_ptr< T > * ppx, Y * p, pdalboost::detail::shared_count & pn )
+{
+    pdalboost::detail::shared_count( p ).swap( pn );
+    pdalboost::detail::sp_enable_shared_from_this( ppx, p, p );
+}
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template< class T, class Y > inline void sp_pointer_construct( pdalboost::shared_ptr< T[] > * /*ppx*/, Y * p, pdalboost::detail::shared_count & pn )
+{
+    sp_assert_convertible< Y[], T[] >();
+    pdalboost::detail::shared_count( p, pdalboost::checked_array_deleter< T >() ).swap( pn );
+}
+
+template< class T, std::size_t N, class Y > inline void sp_pointer_construct( pdalboost::shared_ptr< T[N] > * /*ppx*/, Y * p, pdalboost::detail::shared_count & pn )
+{
+    sp_assert_convertible< Y[N], T[N] >();
+    pdalboost::detail::shared_count( p, pdalboost::checked_array_deleter< T >() ).swap( pn );
+}
+
+#endif // !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+// deleter constructor helper
+
+template< class T, class Y > inline void sp_deleter_construct( pdalboost::shared_ptr< T > * ppx, Y * p )
+{
+    pdalboost::detail::sp_enable_shared_from_this( ppx, p, p );
+}
+
+#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+template< class T, class Y > inline void sp_deleter_construct( pdalboost::shared_ptr< T[] > * /*ppx*/, Y * /*p*/ )
+{
+    sp_assert_convertible< Y[], T[] >();
+}
+
+template< class T, std::size_t N, class Y > inline void sp_deleter_construct( pdalboost::shared_ptr< T[N] > * /*ppx*/, Y * /*p*/ )
+{
+    sp_assert_convertible< Y[N], T[N] >();
+}
+
+#endif // !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+} // namespace detail
+
+
+//
+//  shared_ptr
+//
+//  An enhanced relative of scoped_ptr with reference counted copy semantics.
+//  The object pointed to is deleted when the last shared_ptr pointing to it
+//  is destroyed or reset.
+//
+
+template<class T> class shared_ptr
+{
+private:
+
+    // Borland 5.5.1 specific workaround
+    typedef shared_ptr<T> this_type;
+
+public:
+
+    typedef typename pdalboost::detail::sp_element< T >::type element_type;
+
+    shared_ptr() BOOST_NOEXCEPT : px( 0 ), pn() // never throws in 1.30+
+    {
+    }
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+    shared_ptr( pdalboost::detail::sp_nullptr_t ) BOOST_NOEXCEPT : px( 0 ), pn() // never throws
+    {
+    }
+
+#endif
+
+    template<class Y>
+    explicit shared_ptr( Y * p ): px( p ), pn() // Y must be complete
+    {
+        pdalboost::detail::sp_pointer_construct( this, p, pn );
+    }
+
+    //
+    // Requirements: D's copy constructor must not throw
+    //
+    // shared_ptr will release p by calling d(p)
+    //
+
+    template<class Y, class D> shared_ptr( Y * p, D d ): px( p ), pn( p, d )
+    {
+        pdalboost::detail::sp_deleter_construct( this, p );
+    }
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+    template<class D> shared_ptr( pdalboost::detail::sp_nullptr_t p, D d ): px( p ), pn( p, d )
+    {
+    }
+
+#endif
+
+    // As above, but with allocator. A's copy constructor shall not throw.
+
+    template<class Y, class D, class A> shared_ptr( Y * p, D d, A a ): px( p ), pn( p, d, a )
+    {
+        pdalboost::detail::sp_deleter_construct( this, p );
+    }
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+    template<class D, class A> shared_ptr( pdalboost::detail::sp_nullptr_t p, D d, A a ): px( p ), pn( p, d, a )
+    {
+    }
+
+#endif
+
+//  generated copy constructor, destructor are fine...
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+// ... except in C++0x, move disables the implicit copy
+
+    shared_ptr( shared_ptr const & r ) BOOST_NOEXCEPT : px( r.px ), pn( r.pn )
+    {
+    }
+
+#endif
+
+    template<class Y>
+    explicit shared_ptr( weak_ptr<Y> const & r ): pn( r.pn ) // may throw
+    {
+        pdalboost::detail::sp_assert_convertible< Y, T >();
+
+        // it is now safe to copy r.px, as pn(r.pn) did not throw
+        px = r.px;
+    }
+
+    template<class Y>
+    shared_ptr( weak_ptr<Y> const & r, pdalboost::detail::sp_nothrow_tag )
+    BOOST_NOEXCEPT : px( 0 ), pn( r.pn, pdalboost::detail::sp_nothrow_tag() )
+    {
+        if( !pn.empty() )
+        {
+            px = r.px;
+        }
+    }
+
+    template<class Y>
+#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )
+
+    shared_ptr( shared_ptr<Y> const & r, typename pdalboost::detail::sp_enable_if_convertible<Y,T>::type = pdalboost::detail::sp_empty() )
+
+#else
+
+    shared_ptr( shared_ptr<Y> const & r )
+
+#endif
+    BOOST_NOEXCEPT : px( r.px ), pn( r.pn )
+    {
+        pdalboost::detail::sp_assert_convertible< Y, T >();
+    }
+
+    // aliasing
+    template< class Y >
+    shared_ptr( shared_ptr<Y> const & r, element_type * p ) BOOST_NOEXCEPT : px( p ), pn( r.pn )
+    {
+    }
+
+#ifndef BOOST_NO_AUTO_PTR
+
+    template<class Y>
+    explicit shared_ptr( std::auto_ptr<Y> & r ): px(r.get()), pn()
+    {
+        pdalboost::detail::sp_assert_convertible< Y, T >();
+
+        Y * tmp = r.get();
+        pn = pdalboost::detail::shared_count( r );
+
+        pdalboost::detail::sp_deleter_construct( this, tmp );
+    }
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+    template<class Y>
+    shared_ptr( std::auto_ptr<Y> && r ): px(r.get()), pn()
+    {
+        pdalboost::detail::sp_assert_convertible< Y, T >();
+
+        Y * tmp = r.get();
+        pn = pdalboost::detail::shared_count( r );
+
+        pdalboost::detail::sp_deleter_construct( this, tmp );
+    }
+
+#elif !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+    template<class Ap>
+    explicit shared_ptr( Ap r, typename pdalboost::detail::sp_enable_if_auto_ptr<Ap, int>::type = 0 ): px( r.get() ), pn()
+    {
+        typedef typename Ap::element_type Y;
+
+        pdalboost::detail::sp_assert_convertible< Y, T >();
+
+        Y * tmp = r.get();
+        pn = pdalboost::detail::shared_count( r );
+
+        pdalboost::detail::sp_deleter_construct( this, tmp );
+    }
+
+#endif // BOOST_NO_SFINAE, BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_NO_AUTO_PTR
+
+#if !defined( BOOST_NO_CXX11_SMART_PTR ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+    template< class Y, class D >
+    shared_ptr( std::unique_ptr< Y, D > && r ): px( r.get() ), pn()
+    {
+        pdalboost::detail::sp_assert_convertible< Y, T >();
+
+        typename std::unique_ptr< Y, D >::pointer tmp = r.get();
+        pn = pdalboost::detail::shared_count( r );
+
+        pdalboost::detail::sp_deleter_construct( this, tmp );
+    }
+
+#endif
+
+    template< class Y, class D >
+    shared_ptr( pdalboost::movelib::unique_ptr< Y, D > r ): px( r.get() ), pn()
+    {
+        pdalboost::detail::sp_assert_convertible< Y, T >();
+
+        typename pdalboost::movelib::unique_ptr< Y, D >::pointer tmp = r.get();
+        pn = pdalboost::detail::shared_count( r );
+
+        pdalboost::detail::sp_deleter_construct( this, tmp );
+    }
+
+    // assignment
+
+    shared_ptr & operator=( shared_ptr const & r ) BOOST_NOEXCEPT
+    {
+        this_type(r).swap(*this);
+        return *this;
+    }
+
+#if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1400)
+
+    template<class Y>
+    shared_ptr & operator=(shared_ptr<Y> const & r) BOOST_NOEXCEPT
+    {
+        this_type(r).swap(*this);
+        return *this;
+    }
+
+#endif
+
+#ifndef BOOST_NO_AUTO_PTR
+
+    template<class Y>
+    shared_ptr & operator=( std::auto_ptr<Y> & r )
+    {
+        this_type( r ).swap( *this );
+        return *this;
+    }
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+    template<class Y>
+    shared_ptr & operator=( std::auto_ptr<Y> && r )
+    {
+        this_type( static_cast< std::auto_ptr<Y> && >( r ) ).swap( *this );
+        return *this;
+    }
+
+#elif !defined( BOOST_NO_SFINAE ) && !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
+
+    template<class Ap>
+    typename pdalboost::detail::sp_enable_if_auto_ptr< Ap, shared_ptr & >::type operator=( Ap r )
+    {
+        this_type( r ).swap( *this );
+        return *this;
+    }
+
+#endif // BOOST_NO_SFINAE, BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_NO_AUTO_PTR
+
+#if !defined( BOOST_NO_CXX11_SMART_PTR ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+    template<class Y, class D>
+    shared_ptr & operator=( std::unique_ptr<Y, D> && r )
+    {
+        this_type( static_cast< std::unique_ptr<Y, D> && >( r ) ).swap(*this);
+        return *this;
+    }
+
+#endif
+
+    template<class Y, class D>
+    shared_ptr & operator=( pdalboost::movelib::unique_ptr<Y, D> r )
+    {
+        // this_type( static_cast< unique_ptr<Y, D> && >( r ) ).swap( *this );
+
+        pdalboost::detail::sp_assert_convertible< Y, T >();
+
+        typename pdalboost::movelib::unique_ptr< Y, D >::pointer p = r.get();
+
+        shared_ptr tmp;
+
+        tmp.px = p;
+        tmp.pn = pdalboost::detail::shared_count( r );
+
+        pdalboost::detail::sp_deleter_construct( &tmp, p );
+
+        tmp.swap( *this );
+
+        return *this;
+    }
+
+// Move support
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+    shared_ptr( shared_ptr && r ) BOOST_NOEXCEPT : px( r.px ), pn()
+    {
+        pn.swap( r.pn );
+        r.px = 0;
+    }
+
+    template<class Y>
+#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )
+
+    shared_ptr( shared_ptr<Y> && r, typename pdalboost::detail::sp_enable_if_convertible<Y,T>::type = pdalboost::detail::sp_empty() )
+
+#else
+
+    shared_ptr( shared_ptr<Y> && r )
+
+#endif
+    BOOST_NOEXCEPT : px( r.px ), pn()
+    {
+        pdalboost::detail::sp_assert_convertible< Y, T >();
+
+        pn.swap( r.pn );
+        r.px = 0;
+    }
+
+    shared_ptr & operator=( shared_ptr && r ) BOOST_NOEXCEPT
+    {
+        this_type( static_cast< shared_ptr && >( r ) ).swap( *this );
+        return *this;
+    }
+
+    template<class Y>
+    shared_ptr & operator=( shared_ptr<Y> && r ) BOOST_NOEXCEPT
+    {
+        this_type( static_cast< shared_ptr<Y> && >( r ) ).swap( *this );
+        return *this;
+    }
+
+#endif
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+    shared_ptr & operator=( pdalboost::detail::sp_nullptr_t ) BOOST_NOEXCEPT // never throws
+    {
+        this_type().swap(*this);
+        return *this;
+    }
+
+#endif
+
+    void reset() BOOST_NOEXCEPT // never throws in 1.30+
+    {
+        this_type().swap(*this);
+    }
+
+    template<class Y> void reset( Y * p ) // Y must be complete
+    {
+        BOOST_ASSERT( p == 0 || p != px ); // catch self-reset errors
+        this_type( p ).swap( *this );
+    }
+
+    template<class Y, class D> void reset( Y * p, D d )
+    {
+        this_type( p, d ).swap( *this );
+    }
+
+    template<class Y, class D, class A> void reset( Y * p, D d, A a )
+    {
+        this_type( p, d, a ).swap( *this );
+    }
+
+    template<class Y> void reset( shared_ptr<Y> const & r, element_type * p )
+    {
+        this_type( r, p ).swap( *this );
+    }
+    
+    // never throws (but has a BOOST_ASSERT in it, so not marked with BOOST_NOEXCEPT)
+    typename pdalboost::detail::sp_dereference< T >::type operator* () const
+    {
+        BOOST_ASSERT( px != 0 );
+        return *px;
+    }
+    
+    // never throws (but has a BOOST_ASSERT in it, so not marked with BOOST_NOEXCEPT)
+    typename pdalboost::detail::sp_member_access< T >::type operator-> () const 
+    {
+        BOOST_ASSERT( px != 0 );
+        return px;
+    }
+    
+    // never throws (but has a BOOST_ASSERT in it, so not marked with BOOST_NOEXCEPT)
+    typename pdalboost::detail::sp_array_access< T >::type operator[] ( std::ptrdiff_t i ) const
+    {
+        BOOST_ASSERT( px != 0 );
+        BOOST_ASSERT( i >= 0 && ( i < pdalboost::detail::sp_extent< T >::value || pdalboost::detail::sp_extent< T >::value == 0 ) );
+
+        return static_cast< typename pdalboost::detail::sp_array_access< T >::type >( px[ i ] );
+    }
+
+    element_type * get() const BOOST_NOEXCEPT
+    {
+        return px;
+    }
+
+// implicit conversion to "bool"
+#include <boost/smart_ptr/detail/operator_bool.hpp>
+
+    bool unique() const BOOST_NOEXCEPT
+    {
+        return pn.unique();
+    }
+
+    long use_count() const BOOST_NOEXCEPT
+    {
+        return pn.use_count();
+    }
+
+    void swap( shared_ptr & other ) BOOST_NOEXCEPT
+    {
+        std::swap(px, other.px);
+        pn.swap(other.pn);
+    }
+
+    template<class Y> bool owner_before( shared_ptr<Y> const & rhs ) const BOOST_NOEXCEPT
+    {
+        return pn < rhs.pn;
+    }
+
+    template<class Y> bool owner_before( weak_ptr<Y> const & rhs ) const BOOST_NOEXCEPT
+    {
+        return pn < rhs.pn;
+    }
+
+    void * _internal_get_deleter( pdalboost::detail::sp_typeinfo const & ti ) const BOOST_NOEXCEPT
+    {
+        return pn.get_deleter( ti );
+    }
+
+    void * _internal_get_untyped_deleter() const BOOST_NOEXCEPT
+    {
+        return pn.get_untyped_deleter();
+    }
+
+    bool _internal_equiv( shared_ptr const & r ) const BOOST_NOEXCEPT
+    {
+        return px == r.px && pn == r.pn;
+    }
+
+// Tasteless as this may seem, making all members public allows member templates
+// to work in the absence of member template friends. (Matthew Langston)
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+
+private:
+
+    template<class Y> friend class shared_ptr;
+    template<class Y> friend class weak_ptr;
+
+
+#endif
+
+    element_type * px;                 // contained pointer
+    pdalboost::detail::shared_count pn;    // reference counter
+
+};  // shared_ptr
+
+template<class T, class U> inline bool operator==(shared_ptr<T> const & a, shared_ptr<U> const & b) BOOST_NOEXCEPT
+{
+    return a.get() == b.get();
+}
+
+template<class T, class U> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<U> const & b) BOOST_NOEXCEPT
+{
+    return a.get() != b.get();
+}
+
+#if __GNUC__ == 2 && __GNUC_MINOR__ <= 96
+
+// Resolve the ambiguity between our op!= and the one in rel_ops
+
+template<class T> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<T> const & b) BOOST_NOEXCEPT
+{
+    return a.get() != b.get();
+}
+
+#endif
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+template<class T> inline bool operator==( shared_ptr<T> const & p, pdalboost::detail::sp_nullptr_t ) BOOST_NOEXCEPT
+{
+    return p.get() == 0;
+}
+
+template<class T> inline bool operator==( pdalboost::detail::sp_nullptr_t, shared_ptr<T> const & p ) BOOST_NOEXCEPT
+{
+    return p.get() == 0;
+}
+
+template<class T> inline bool operator!=( shared_ptr<T> const & p, pdalboost::detail::sp_nullptr_t ) BOOST_NOEXCEPT
+{
+    return p.get() != 0;
+}
+
+template<class T> inline bool operator!=( pdalboost::detail::sp_nullptr_t, shared_ptr<T> const & p ) BOOST_NOEXCEPT
+{
+    return p.get() != 0;
+}
+
+#endif
+
+template<class T, class U> inline bool operator<(shared_ptr<T> const & a, shared_ptr<U> const & b) BOOST_NOEXCEPT
+{
+    return a.owner_before( b );
+}
+
+template<class T> inline void swap(shared_ptr<T> & a, shared_ptr<T> & b) BOOST_NOEXCEPT
+{
+    a.swap(b);
+}
+
+template<class T, class U> shared_ptr<T> static_pointer_cast( shared_ptr<U> const & r ) BOOST_NOEXCEPT
+{
+    (void) static_cast< T* >( static_cast< U* >( 0 ) );
+
+    typedef typename shared_ptr<T>::element_type E;
+
+    E * p = static_cast< E* >( r.get() );
+    return shared_ptr<T>( r, p );
+}
+
+template<class T, class U> shared_ptr<T> const_pointer_cast( shared_ptr<U> const & r ) BOOST_NOEXCEPT
+{
+    (void) const_cast< T* >( static_cast< U* >( 0 ) );
+
+    typedef typename shared_ptr<T>::element_type E;
+
+    E * p = const_cast< E* >( r.get() );
+    return shared_ptr<T>( r, p );
+}
+
+template<class T, class U> shared_ptr<T> dynamic_pointer_cast( shared_ptr<U> const & r ) BOOST_NOEXCEPT
+{
+    (void) dynamic_cast< T* >( static_cast< U* >( 0 ) );
+
+    typedef typename shared_ptr<T>::element_type E;
+
+    E * p = dynamic_cast< E* >( r.get() );
+    return p? shared_ptr<T>( r, p ): shared_ptr<T>();
+}
+
+template<class T, class U> shared_ptr<T> reinterpret_pointer_cast( shared_ptr<U> const & r ) BOOST_NOEXCEPT
+{
+    (void) reinterpret_cast< T* >( static_cast< U* >( 0 ) );
+
+    typedef typename shared_ptr<T>::element_type E;
+
+    E * p = reinterpret_cast< E* >( r.get() );
+    return shared_ptr<T>( r, p );
+}
+
+// get_pointer() enables pdalboost::mem_fn to recognize shared_ptr
+
+template<class T> inline typename shared_ptr<T>::element_type * get_pointer(shared_ptr<T> const & p) BOOST_NOEXCEPT
+{
+    return p.get();
+}
+
+// operator<<
+
+#if !defined(BOOST_NO_IOSTREAM)
+
+#if defined(BOOST_NO_TEMPLATED_IOSTREAMS) || ( defined(__GNUC__) &&  (__GNUC__ < 3) )
+
+template<class Y> std::ostream & operator<< (std::ostream & os, shared_ptr<Y> const & p)
+{
+    os << p.get();
+    return os;
+}
+
+#else
+
+// in STLport's no-iostreams mode no iostream symbols can be used
+#ifndef _STLP_NO_IOSTREAMS
+
+# if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300 && __SGI_STL_PORT)
+// MSVC6 has problems finding std::basic_ostream through the using declaration in namespace _STL
+using std::basic_ostream;
+template<class E, class T, class Y> basic_ostream<E, T> & operator<< (basic_ostream<E, T> & os, shared_ptr<Y> const & p)
+# else
+template<class E, class T, class Y> std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, shared_ptr<Y> const & p)
+# endif
+{
+    os << p.get();
+    return os;
+}
+
+#endif // _STLP_NO_IOSTREAMS
+
+#endif // __GNUC__ < 3
+
+#endif // !defined(BOOST_NO_IOSTREAM)
+
+// get_deleter
+
+namespace detail
+{
+
+#if ( defined(__GNUC__) && BOOST_WORKAROUND(__GNUC__, < 3) ) || \
+    ( defined(__EDG_VERSION__) && BOOST_WORKAROUND(__EDG_VERSION__, <= 238) ) || \
+    ( defined(__HP_aCC) && BOOST_WORKAROUND(__HP_aCC, <= 33500) )
+
+// g++ 2.9x doesn't allow static_cast<X const *>(void *)
+// apparently EDG 2.38 and HP aCC A.03.35 also don't accept it
+
+template<class D, class T> D * basic_get_deleter(shared_ptr<T> const & p)
+{
+    void const * q = p._internal_get_deleter(BOOST_SP_TYPEID(D));
+    return const_cast<D *>(static_cast<D const *>(q));
+}
+
+#else
+
+template<class D, class T> D * basic_get_deleter( shared_ptr<T> const & p ) BOOST_NOEXCEPT
+{
+    return static_cast<D *>( p._internal_get_deleter(BOOST_SP_TYPEID(D)) );
+}
+
+#endif
+
+class esft2_deleter_wrapper
+{
+private:
+
+    shared_ptr<void const volatile> deleter_;
+
+public:
+
+    esft2_deleter_wrapper()
+    {
+    }
+
+    template< class T > void set_deleter( shared_ptr<T> const & deleter )
+    {
+        deleter_ = deleter;
+    }
+
+    template<typename D> D* get_deleter() const BOOST_NOEXCEPT
+    {
+        return pdalboost::detail::basic_get_deleter<D>( deleter_ );
+    }
+
+    template< class T> void operator()( T* )
+    {
+        BOOST_ASSERT( deleter_.use_count() <= 1 );
+        deleter_.reset();
+    }
+};
+
+} // namespace detail
+
+template<class D, class T> D * get_deleter( shared_ptr<T> const & p ) BOOST_NOEXCEPT
+{
+    D *del = pdalboost::detail::basic_get_deleter<D>(p);
+
+    if(del == 0)
+    {
+        pdalboost::detail::esft2_deleter_wrapper *del_wrapper = pdalboost::detail::basic_get_deleter<pdalboost::detail::esft2_deleter_wrapper>(p);
+// The following get_deleter method call is fully qualified because
+// older versions of gcc (2.95, 3.2.3) fail to compile it when written del_wrapper->get_deleter<D>()
+        if(del_wrapper) del = del_wrapper->::pdalboost::detail::esft2_deleter_wrapper::get_deleter<D>();
+    }
+
+    return del;
+}
+
+// atomic access
+
+#if !defined(BOOST_SP_NO_ATOMIC_ACCESS)
+
+template<class T> inline bool atomic_is_lock_free( shared_ptr<T> const * /*p*/ ) BOOST_NOEXCEPT
+{
+    return false;
+}
+
+template<class T> shared_ptr<T> atomic_load( shared_ptr<T> const * p )
+{
+    pdalboost::detail::spinlock_pool<2>::scoped_lock lock( p );
+    return *p;
+}
+
+template<class T> inline shared_ptr<T> atomic_load_explicit( shared_ptr<T> const * p, /*memory_order mo*/ int )
+{
+    return atomic_load( p );
+}
+
+template<class T> void atomic_store( shared_ptr<T> * p, shared_ptr<T> r )
+{
+    pdalboost::detail::spinlock_pool<2>::scoped_lock lock( p );
+    p->swap( r );
+}
+
+template<class T> inline void atomic_store_explicit( shared_ptr<T> * p, shared_ptr<T> r, /*memory_order mo*/ int )
+{
+    atomic_store( p, r ); // std::move( r )
+}
+
+template<class T> shared_ptr<T> atomic_exchange( shared_ptr<T> * p, shared_ptr<T> r )
+{
+    pdalboost::detail::spinlock & sp = pdalboost::detail::spinlock_pool<2>::spinlock_for( p );
+
+    sp.lock();
+    p->swap( r );
+    sp.unlock();
+
+    return r; // return std::move( r )
+}
+
+template<class T> shared_ptr<T> atomic_exchange_explicit( shared_ptr<T> * p, shared_ptr<T> r, /*memory_order mo*/ int )
+{
+    return atomic_exchange( p, r ); // std::move( r )
+}
+
+template<class T> bool atomic_compare_exchange( shared_ptr<T> * p, shared_ptr<T> * v, shared_ptr<T> w )
+{
+    pdalboost::detail::spinlock & sp = pdalboost::detail::spinlock_pool<2>::spinlock_for( p );
+
+    sp.lock();
+
+    if( p->_internal_equiv( *v ) )
+    {
+        p->swap( w );
+
+        sp.unlock();
+
+        return true;
+    }
+    else
+    {
+        shared_ptr<T> tmp( *p );
+
+        sp.unlock();
+
+        tmp.swap( *v );
+        return false;
+    }
+}
+
+template<class T> inline bool atomic_compare_exchange_explicit( shared_ptr<T> * p, shared_ptr<T> * v, shared_ptr<T> w, /*memory_order success*/ int, /*memory_order failure*/ int )
+{
+    return atomic_compare_exchange( p, v, w ); // std::move( w )
+}
+
+#endif // !defined(BOOST_SP_NO_ATOMIC_ACCESS)
+
+// hash_value
+
+template< class T > struct hash;
+
+template< class T > std::size_t hash_value( pdalboost::shared_ptr<T> const & p ) BOOST_NOEXCEPT
+{
+    return pdalboost::hash< T* >()( p.get() );
+}
+
+} // namespace pdalboost
+
+#if defined( BOOST_SP_DISABLE_DEPRECATED )
+#pragma GCC diagnostic pop
+#endif
+
+#endif  // #ifndef BOOST_SMART_PTR_SHARED_PTR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/smart_ptr/weak_ptr.hpp b/vendor/pdalboost/boost/smart_ptr/weak_ptr.hpp
new file mode 100644
index 0000000..9c85ab7
--- /dev/null
+++ b/vendor/pdalboost/boost/smart_ptr/weak_ptr.hpp
@@ -0,0 +1,253 @@
+#ifndef BOOST_SMART_PTR_WEAK_PTR_HPP_INCLUDED
+#define BOOST_SMART_PTR_WEAK_PTR_HPP_INCLUDED
+
+//
+//  weak_ptr.hpp
+//
+//  Copyright (c) 2001, 2002, 2003 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+//  See http://www.boost.org/libs/smart_ptr/weak_ptr.htm for documentation.
+//
+
+#include <memory> // boost.TR1 include order fix
+#include <boost/smart_ptr/detail/shared_count.hpp>
+#include <boost/smart_ptr/shared_ptr.hpp>
+
+namespace pdalboost
+{
+
+template<class T> class weak_ptr
+{
+private:
+
+    // Borland 5.5.1 specific workarounds
+    typedef weak_ptr<T> this_type;
+
+public:
+
+    typedef typename pdalboost::detail::sp_element< T >::type element_type;
+
+    weak_ptr() BOOST_NOEXCEPT : px(0), pn() // never throws in 1.30+
+    {
+    }
+
+//  generated copy constructor, assignment, destructor are fine...
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+// ... except in C++0x, move disables the implicit copy
+
+    weak_ptr( weak_ptr const & r ) BOOST_NOEXCEPT : px( r.px ), pn( r.pn )
+    {
+    }
+
+    weak_ptr & operator=( weak_ptr const & r ) BOOST_NOEXCEPT
+    {
+        px = r.px;
+        pn = r.pn;
+        return *this;
+    }
+
+#endif
+
+//
+//  The "obvious" converting constructor implementation:
+//
+//  template<class Y>
+//  weak_ptr(weak_ptr<Y> const & r): px(r.px), pn(r.pn) // never throws
+//  {
+//  }
+//
+//  has a serious problem.
+//
+//  r.px may already have been invalidated. The px(r.px)
+//  conversion may require access to *r.px (virtual inheritance).
+//
+//  It is not possible to avoid spurious access violations since
+//  in multithreaded programs r.px may be invalidated at any point.
+//
+
+    template<class Y>
+#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )
+
+    weak_ptr( weak_ptr<Y> const & r, typename pdalboost::detail::sp_enable_if_convertible<Y,T>::type = pdalboost::detail::sp_empty() )
+
+#else
+
+    weak_ptr( weak_ptr<Y> const & r )
+
+#endif
+    BOOST_NOEXCEPT : px(r.lock().get()), pn(r.pn)
+    {
+        pdalboost::detail::sp_assert_convertible< Y, T >();
+    }
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+    template<class Y>
+#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )
+
+    weak_ptr( weak_ptr<Y> && r, typename pdalboost::detail::sp_enable_if_convertible<Y,T>::type = pdalboost::detail::sp_empty() )
+
+#else
+
+    weak_ptr( weak_ptr<Y> && r )
+
+#endif
+    BOOST_NOEXCEPT : px( r.lock().get() ), pn( static_cast< pdalboost::detail::weak_count && >( r.pn ) )
+    {
+        pdalboost::detail::sp_assert_convertible< Y, T >();
+        r.px = 0;
+    }
+
+    // for better efficiency in the T == Y case
+    weak_ptr( weak_ptr && r )
+    BOOST_NOEXCEPT : px( r.px ), pn( static_cast< pdalboost::detail::weak_count && >( r.pn ) )
+    {
+        r.px = 0;
+    }
+
+    // for better efficiency in the T == Y case
+    weak_ptr & operator=( weak_ptr && r ) BOOST_NOEXCEPT
+    {
+        this_type( static_cast< weak_ptr && >( r ) ).swap( *this );
+        return *this;
+    }
+
+
+#endif
+
+    template<class Y>
+#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )
+
+    weak_ptr( shared_ptr<Y> const & r, typename pdalboost::detail::sp_enable_if_convertible<Y,T>::type = pdalboost::detail::sp_empty() )
+
+#else
+
+    weak_ptr( shared_ptr<Y> const & r )
+
+#endif
+    BOOST_NOEXCEPT : px( r.px ), pn( r.pn )
+    {
+        pdalboost::detail::sp_assert_convertible< Y, T >();
+    }
+
+#if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1300)
+
+    template<class Y>
+    weak_ptr & operator=( weak_ptr<Y> const & r ) BOOST_NOEXCEPT
+    {
+        pdalboost::detail::sp_assert_convertible< Y, T >();
+
+        px = r.lock().get();
+        pn = r.pn;
+
+        return *this;
+    }
+
+#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
+
+    template<class Y>
+    weak_ptr & operator=( weak_ptr<Y> && r ) BOOST_NOEXCEPT
+    {
+        this_type( static_cast< weak_ptr<Y> && >( r ) ).swap( *this );
+        return *this;
+    }
+
+#endif
+
+    template<class Y>
+    weak_ptr & operator=( shared_ptr<Y> const & r ) BOOST_NOEXCEPT
+    {
+        pdalboost::detail::sp_assert_convertible< Y, T >();
+
+        px = r.px;
+        pn = r.pn;
+
+        return *this;
+    }
+
+#endif
+
+    shared_ptr<T> lock() const BOOST_NOEXCEPT
+    {
+        return shared_ptr<T>( *this, pdalboost::detail::sp_nothrow_tag() );
+    }
+
+    long use_count() const BOOST_NOEXCEPT
+    {
+        return pn.use_count();
+    }
+
+    bool expired() const BOOST_NOEXCEPT
+    {
+        return pn.use_count() == 0;
+    }
+
+    bool _empty() const // extension, not in std::weak_ptr
+    {
+        return pn.empty();
+    }
+
+    void reset() BOOST_NOEXCEPT // never throws in 1.30+
+    {
+        this_type().swap(*this);
+    }
+
+    void swap(this_type & other) BOOST_NOEXCEPT
+    {
+        std::swap(px, other.px);
+        pn.swap(other.pn);
+    }
+
+    template<typename Y>
+    void _internal_aliasing_assign(weak_ptr<Y> const & r, element_type * px2)
+    {
+        px = px2;
+        pn = r.pn;
+    }
+
+    template<class Y> bool owner_before( weak_ptr<Y> const & rhs ) const BOOST_NOEXCEPT
+    {
+        return pn < rhs.pn;
+    }
+
+    template<class Y> bool owner_before( shared_ptr<Y> const & rhs ) const BOOST_NOEXCEPT
+    {
+        return pn < rhs.pn;
+    }
+
+// Tasteless as this may seem, making all members public allows member templates
+// to work in the absence of member template friends. (Matthew Langston)
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+
+private:
+
+    template<class Y> friend class weak_ptr;
+    template<class Y> friend class shared_ptr;
+
+#endif
+
+    element_type * px;            // contained pointer
+    pdalboost::detail::weak_count pn; // reference counter
+
+};  // weak_ptr
+
+template<class T, class U> inline bool operator<(weak_ptr<T> const & a, weak_ptr<U> const & b) BOOST_NOEXCEPT
+{
+    return a.owner_before( b );
+}
+
+template<class T> void swap(weak_ptr<T> & a, weak_ptr<T> & b) BOOST_NOEXCEPT
+{
+    a.swap(b);
+}
+
+} // namespace pdalboost
+
+#endif  // #ifndef BOOST_SMART_PTR_WEAK_PTR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/static_assert.hpp b/vendor/pdalboost/boost/static_assert.hpp
new file mode 100644
index 0000000..6ceb117
--- /dev/null
+++ b/vendor/pdalboost/boost/static_assert.hpp
@@ -0,0 +1,180 @@
+//  (C) Copyright John Maddock 2000.
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/static_assert for documentation.
+
+/*
+ Revision history:
+   02 August 2000
+      Initial version.
+*/
+
+#ifndef BOOST_STATIC_ASSERT_HPP
+#define BOOST_STATIC_ASSERT_HPP
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if defined(__GNUC__) && !defined(__GXX_EXPERIMENTAL_CXX0X__)
+//
+// This is horrible, but it seems to be the only we can shut up the
+// "anonymous variadic macros were introduced in C99 [-Wvariadic-macros]"
+// warning that get spewed out otherwise in non-C++11 mode.
+//
+#pragma GCC system_header
+#endif
+
+#ifndef BOOST_NO_CXX11_STATIC_ASSERT
+#  ifndef BOOST_NO_CXX11_VARIADIC_MACROS
+#     define BOOST_STATIC_ASSERT_MSG( ... ) static_assert(__VA_ARGS__)
+#  else
+#     define BOOST_STATIC_ASSERT_MSG( B, Msg ) static_assert( B, Msg )
+#  endif
+#else
+#     define BOOST_STATIC_ASSERT_MSG( B, Msg ) BOOST_STATIC_ASSERT( B )
+#endif
+
+#ifdef __BORLANDC__
+//
+// workaround for buggy integral-constant expression support:
+#define BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS
+#endif
+
+#if defined(__GNUC__) && (__GNUC__ == 3) && ((__GNUC_MINOR__ == 3) || (__GNUC_MINOR__ == 4))
+// gcc 3.3 and 3.4 don't produce good error messages with the default version:
+#  define BOOST_SA_GCC_WORKAROUND
+#endif
+
+//
+// If the compiler issues warnings about old C style casts,
+// then enable this:
+//
+#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4)))
+#  ifndef BOOST_NO_CXX11_VARIADIC_MACROS
+#     define BOOST_STATIC_ASSERT_BOOL_CAST( ... ) ((__VA_ARGS__) == 0 ? false : true)
+#  else
+#     define BOOST_STATIC_ASSERT_BOOL_CAST( x ) ((x) == 0 ? false : true)
+#  endif
+#else
+#  ifndef BOOST_NO_CXX11_VARIADIC_MACROS
+#     define BOOST_STATIC_ASSERT_BOOL_CAST( ... ) (bool)(__VA_ARGS__)
+#  else
+#     define BOOST_STATIC_ASSERT_BOOL_CAST(x) (bool)(x)
+#  endif
+#endif
+
+#ifndef BOOST_NO_CXX11_STATIC_ASSERT
+#  ifndef BOOST_NO_CXX11_VARIADIC_MACROS
+#     define BOOST_STATIC_ASSERT( ... ) static_assert(__VA_ARGS__, #__VA_ARGS__)
+#  else
+#     define BOOST_STATIC_ASSERT( B ) static_assert(B, #B)
+#  endif
+#else
+
+namespace pdalboost{
+
+// HP aCC cannot deal with missing names for template value parameters
+template <bool x> struct STATIC_ASSERTION_FAILURE;
+
+template <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; };
+
+// HP aCC cannot deal with missing names for template value parameters
+template<int x> struct static_assert_test{};
+
+}
+
+//
+// Implicit instantiation requires that all member declarations be
+// instantiated, but that the definitions are *not* instantiated.
+//
+// It's not particularly clear how this applies to enum's or typedefs;
+// both are described as declarations [7.1.3] and [7.2] in the standard,
+// however some compilers use "delayed evaluation" of one or more of
+// these when implicitly instantiating templates.  We use typedef declarations
+// by default, but try defining BOOST_USE_ENUM_STATIC_ASSERT if the enum
+// version gets better results from your compiler...
+//
+// Implementation:
+// Both of these versions rely on sizeof(incomplete_type) generating an error
+// message containing the name of the incomplete type.  We use
+// "STATIC_ASSERTION_FAILURE" as the type name here to generate
+// an eye catching error message.  The result of the sizeof expression is either
+// used as an enum initialiser, or as a template argument depending which version
+// is in use...
+// Note that the argument to the assert is explicitly cast to bool using old-
+// style casts: too many compilers currently have problems with static_cast
+// when used inside integral constant expressions.
+//
+#if !defined(BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS)
+
+#if defined(BOOST_MSVC) && defined(BOOST_NO_CXX11_VARIADIC_MACROS)
+#define BOOST_STATIC_ASSERT( B ) \
+   typedef ::pdalboost::static_assert_test<\
+      sizeof(::pdalboost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST ( B ) >)>\
+         BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__)
+#elif defined(BOOST_MSVC)
+#define BOOST_STATIC_ASSERT(...) \
+   typedef ::pdalboost::static_assert_test<\
+      sizeof(::pdalboost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST (__VA_ARGS__) >)>\
+         BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__)
+#elif (defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND))  && defined(BOOST_NO_CXX11_VARIADIC_MACROS)
+// agurt 15/sep/02: a special care is needed to force Intel C++ issue an error 
+// instead of warning in case of failure
+# define BOOST_STATIC_ASSERT( B ) \
+    typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \
+        [ ::pdalboost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >::value ]
+#elif (defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND))  && !defined(BOOST_NO_CXX11_VARIADIC_MACROS)
+// agurt 15/sep/02: a special care is needed to force Intel C++ issue an error 
+// instead of warning in case of failure
+# define BOOST_STATIC_ASSERT(...) \
+    typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \
+        [ ::pdalboost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( __VA_ARGS__ ) >::value ]
+#elif defined(__sgi)
+// special version for SGI MIPSpro compiler
+#define BOOST_STATIC_ASSERT( B ) \
+   BOOST_STATIC_CONSTANT(bool, \
+     BOOST_JOIN(boost_static_assert_test_, __LINE__) = ( B )); \
+   typedef ::pdalboost::static_assert_test<\
+     sizeof(::pdalboost::STATIC_ASSERTION_FAILURE< \
+       BOOST_JOIN(boost_static_assert_test_, __LINE__) >)>\
+         BOOST_JOIN(boost_static_assert_typedef_, __LINE__)
+#elif BOOST_WORKAROUND(__MWERKS__, <= 0x3003)
+// special version for CodeWarrior <= 8.x
+#define BOOST_STATIC_ASSERT( B ) \
+   BOOST_STATIC_CONSTANT(int, \
+     BOOST_JOIN(boost_static_assert_test_, __LINE__) = \
+       sizeof(::pdalboost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >) )
+#else
+// generic version
+#  ifndef BOOST_NO_CXX11_VARIADIC_MACROS
+#     define BOOST_STATIC_ASSERT( ... ) \
+         typedef ::pdalboost::static_assert_test<\
+            sizeof(::pdalboost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( __VA_ARGS__ ) >)>\
+               BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_ATTRIBUTE_UNUSED
+#  else
+#     define BOOST_STATIC_ASSERT( B ) \
+         typedef ::pdalboost::static_assert_test<\
+            sizeof(::pdalboost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\
+               BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_ATTRIBUTE_UNUSED
+#  endif
+#endif
+
+#else
+// alternative enum based implementation:
+#  ifndef BOOST_NO_CXX11_VARIADIC_MACROS
+#    define BOOST_STATIC_ASSERT( ... ) \
+         enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \
+            = sizeof(::pdalboost::STATIC_ASSERTION_FAILURE< (bool)( __VA_ARGS__ ) >) }
+#  else
+#    define BOOST_STATIC_ASSERT(B) \
+         enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \
+            = sizeof(::pdalboost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) }
+#  endif
+#endif
+#endif // defined(BOOST_NO_CXX11_STATIC_ASSERT)
+
+#endif // BOOST_STATIC_ASSERT_HPP
+
+
diff --git a/vendor/pdalboost/boost/swap.hpp b/vendor/pdalboost/boost/swap.hpp
new file mode 100644
index 0000000..55cafa4
--- /dev/null
+++ b/vendor/pdalboost/boost/swap.hpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#ifndef BOOST_SWAP_HPP
+#define BOOST_SWAP_HPP
+
+// The header file at this path is deprecated;
+// use boost/core/swap.hpp instead.
+
+#include <boost/core/swap.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/system/api_config.hpp b/vendor/pdalboost/boost/system/api_config.hpp
new file mode 100644
index 0000000..28b8bec
--- /dev/null
+++ b/vendor/pdalboost/boost/system/api_config.hpp
@@ -0,0 +1,42 @@
+//  boost/system/api_config.hpp  -------------------------------------------------------//
+
+//  Copyright Beman Dawes 2003, 2006, 2010
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  See http://www.boost.org/libs/system for documentation.
+
+//--------------------------------------------------------------------------------------//
+
+//  Boost.System calls operating system API functions to implement system error category
+//  functions. Usually there is no question as to which API is to be used.
+//
+//  In the case of MinGW or Cygwin/MinGW, however, both POSIX and Windows API's are
+//  available. Chaos ensues if other code thinks one is in use when Boost.System was
+//  actually built with the other. This header centralizes the API choice and prevents
+//  user definition of API macros, thus elminating the possibility of mismatches and the
+//  need to test configurations with little or no practical value.
+//
+
+//--------------------------------------------------------------------------------------//
+
+#ifndef BOOST_SYSTEM_API_CONFIG_HPP                  
+#define BOOST_SYSTEM_API_CONFIG_HPP
+
+# if defined(BOOST_POSIX_API) || defined(BOOST_WINDOWS_API)
+#   error user defined BOOST_POSIX_API or BOOST_WINDOWS_API not supported
+# endif
+
+//  BOOST_POSIX_API or BOOST_WINDOWS_API specify which API to use
+//    Cygwin/MinGW does not predefine _WIN32.
+//    Standalone MinGW and all other known Windows compilers do predefine _WIN32
+//    Compilers that predefine _WIN32 or __MINGW32__ do so for Windows 64-bit builds too.
+
+# if defined(_WIN32) || defined(__CYGWIN__) // Windows default, including MinGW and Cygwin
+#   define BOOST_WINDOWS_API
+# else
+#   define BOOST_POSIX_API 
+# endif
+                                     
+#endif  // BOOST_SYSTEM_API_CONFIG_HPP 
diff --git a/vendor/pdalboost/boost/system/config.hpp b/vendor/pdalboost/boost/system/config.hpp
new file mode 100644
index 0000000..20ebda9
--- /dev/null
+++ b/vendor/pdalboost/boost/system/config.hpp
@@ -0,0 +1,70 @@
+//  boost/system/config.hpp  -----------------------------------------------------------//
+
+//  Copyright Beman Dawes 2003, 2006
+
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/system for documentation.
+
+#ifndef BOOST_SYSTEM_CONFIG_HPP                  
+#define BOOST_SYSTEM_CONFIG_HPP
+
+#include <boost/config.hpp>
+#include <boost/predef/platform.h>
+#include <boost/system/api_config.hpp>  // for BOOST_POSIX_API or BOOST_WINDOWS_API
+
+// This header implements separate compilation features as described in
+// http://www.boost.org/more/separate_compilation.html
+
+//  normalize macros  ------------------------------------------------------------------//
+
+#if !defined(BOOST_SYSTEM_DYN_LINK) && !defined(BOOST_SYSTEM_STATIC_LINK) \
+  && !defined(BOOST_ALL_DYN_LINK) && !defined(BOOST_ALL_STATIC_LINK)
+# define BOOST_SYSTEM_STATIC_LINK
+#endif
+
+#if defined(BOOST_ALL_DYN_LINK) && !defined(BOOST_SYSTEM_DYN_LINK)
+# define BOOST_SYSTEM_DYN_LINK 
+#elif defined(BOOST_ALL_STATIC_LINK) && !defined(BOOST_SYSTEM_STATIC_LINK)
+# define BOOST_SYSTEM_STATIC_LINK 
+#endif
+
+#if defined(BOOST_SYSTEM_DYN_LINK) && defined(BOOST_SYSTEM_STATIC_LINK)
+# error Must not define both BOOST_SYSTEM_DYN_LINK and BOOST_SYSTEM_STATIC_LINK
+#endif
+
+//  enable dynamic or static linking as requested --------------------------------------//
+
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SYSTEM_DYN_LINK)
+# if defined(BOOST_SYSTEM_SOURCE)
+#   define BOOST_SYSTEM_DECL BOOST_SYMBOL_EXPORT
+# else 
+#   define BOOST_SYSTEM_DECL BOOST_SYMBOL_IMPORT
+# endif
+#else
+# define BOOST_SYSTEM_DECL
+#endif
+
+//  enable automatic library variant selection  ----------------------------------------// 
+
+#if !defined(BOOST_SYSTEM_SOURCE) && !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_SYSTEM_NO_LIB)
+//
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#define BOOST_LIB_NAME pdalboost_system
+//
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+//
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_SYSTEM_DYN_LINK)
+#  define BOOST_DYN_LINK
+#endif
+//
+// And include the header that does the work:
+//
+#include <boost/config/auto_link.hpp>
+#endif  // auto-linking disabled
+
+#endif // BOOST_SYSTEM_CONFIG_HPP
+
diff --git a/vendor/pdalboost/boost/system/cygwin_error.hpp b/vendor/pdalboost/boost/system/cygwin_error.hpp
new file mode 100644
index 0000000..061e566
--- /dev/null
+++ b/vendor/pdalboost/boost/system/cygwin_error.hpp
@@ -0,0 +1,56 @@
+//  boost/system/cygwin_error.hpp  -------------------------------------------//
+
+//  Copyright Beman Dawes 2007
+
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/system
+
+#ifndef BOOST_CYGWIN_ERROR_HPP
+#define BOOST_CYGWIN_ERROR_HPP
+
+//  This header is effectively empty for compiles on operating systems where
+//  it is not applicable.
+
+# ifdef __CYGWIN__
+
+#include <boost/system/error_code.hpp>
+
+namespace pdalboost
+{
+  namespace system
+  {
+    //  To construct an error_code after a API error:
+    //
+    //      error_code( errno, system_category() )
+
+    //  User code should use the portable "posix" enums for POSIX errors; this
+    //  allows such code to be portable to non-POSIX systems. For the non-POSIX
+    //  errno values that POSIX-based systems typically provide in addition to 
+    //  POSIX values, use the system specific enums below.
+
+   namespace cygwin_error
+    {
+      enum cygwin_errno
+      {
+        no_net = ENONET,
+        no_package = ENOPKG,
+        no_share = ENOSHARE
+      };
+    }  // namespace cygwin_error
+
+    template<> struct is_error_code_enum<cygwin_error::cygwin_errno>
+      { static const bool value = true; };
+
+    namespace cygwin_error
+    {
+      inline error_code make_error_code( cygwin_errno e )
+        { return error_code( e, system_category() ); }
+    }
+  }
+}
+
+#endif  // __CYGWIN__
+
+#endif  // BOOST_CYGWIN_ERROR_HPP
diff --git a/vendor/pdalboost/boost/system/detail/error_code.ipp b/vendor/pdalboost/boost/system/detail/error_code.ipp
new file mode 100644
index 0000000..d8374ce
--- /dev/null
+++ b/vendor/pdalboost/boost/system/detail/error_code.ipp
@@ -0,0 +1,467 @@
+//  error_code support implementation file  ----------------------------------//
+
+//  Copyright Beman Dawes 2002, 2006
+//  Copyright (c) Microsoft Corporation 2014
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/system
+
+//----------------------------------------------------------------------------//
+
+#include <boost/config/warning_disable.hpp>
+
+#include <boost/system/config.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/cerrno.hpp>
+#include <vector>
+#include <cstdlib>
+#include <cassert>
+
+#include <cstring> // for strerror/strerror_r
+
+# if defined( BOOST_WINDOWS_API )
+#   include <windows.h>
+#   if !BOOST_PLAT_WINDOWS_RUNTIME
+#     include <boost/system/detail/local_free_on_destruction.hpp>
+#   endif
+#   ifndef ERROR_INCORRECT_SIZE
+#     define ERROR_INCORRECT_SIZE ERROR_BAD_ARGUMENTS
+#   endif
+# endif
+
+//----------------------------------------------------------------------------//
+namespace pdalboost
+{
+    namespace system
+    {
+
+namespace
+{
+
+  //  standard error categories  ---------------------------------------------//
+
+  class generic_error_category : public error_category
+  {
+  public:
+    generic_error_category(){}
+    const char *   name() const BOOST_SYSTEM_NOEXCEPT;
+    std::string    message( int ev ) const;
+  };
+
+  class system_error_category : public error_category
+  {
+  public:
+    system_error_category(){}
+    const char *        name() const BOOST_SYSTEM_NOEXCEPT;
+    std::string         message( int ev ) const;
+    error_condition     default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT;
+  };
+
+  //  generic_error_category implementation  ---------------------------------//
+
+  const char * generic_error_category::name() const BOOST_SYSTEM_NOEXCEPT
+  {
+    return "generic";
+  }
+
+  std::string generic_error_category::message( int ev ) const
+  {
+    using namespace pdalboost::system::errc;
+#if defined(__PGI)
+      using pdalboost::system::errc::invalid_argument;
+#endif
+
+    static std::string unknown_err( "Unknown error" );
+  // strerror_r is preferred because it is always thread safe,
+  // however, we fallback to strerror in certain cases because:
+  //   -- Windows doesn't provide strerror_r.
+  //   -- HP and Sun do provide strerror_r on newer systems, but there is
+  //      no way to tell if is available at runtime and in any case their
+  //      versions of strerror are thread safe anyhow.
+  //   -- Linux only sometimes provides strerror_r.
+  //   -- Tru64 provides strerror_r only when compiled -pthread.
+  //   -- VMS doesn't provide strerror_r, but on this platform, strerror is
+  //      thread safe.
+  # if defined(BOOST_WINDOWS_API) || defined(__hpux) || defined(__sun)\
+     || (defined(__linux) && (!defined(__USE_XOPEN2K) || defined(BOOST_SYSTEM_USE_STRERROR)))\
+     || (defined(__osf__) && !defined(_REENTRANT))\
+     || (defined(__INTEGRITY))\
+     || (defined(__vms))\
+     || (defined(__QNXNTO__))
+      const char * c_str = std::strerror( ev );
+      return  c_str
+        ? std::string( c_str )
+        : unknown_err;
+  # else  // use strerror_r
+      char buf[64];
+      char * bp = buf;
+      std::size_t sz = sizeof(buf);
+  #  if defined(__CYGWIN__) || defined(__USE_GNU)
+      // Oddball version of strerror_r
+      const char * c_str = strerror_r( ev, bp, sz );
+      return  c_str
+        ? std::string( c_str )
+        : unknown_err;
+  #  else
+      // POSIX version of strerror_r
+      int result;
+      for (;;)
+      {
+        // strerror_r returns 0 on success, otherwise ERANGE if buffer too small,
+        // invalid_argument if ev not a valid error number
+  #  if defined (__sgi)
+        const char * c_str = strerror( ev );
+        result = 0;
+      return  c_str
+        ? std::string( c_str )
+        : unknown_err;
+  #  else
+        result = strerror_r( ev, bp, sz );
+  #  endif
+        if (result == 0 )
+          break;
+        else
+        {
+  #  if defined(__linux)
+          // Linux strerror_r returns -1 on error, with error number in errno
+          result = errno;
+  #  endif
+          if ( result !=  ERANGE ) break;
+          if ( sz > sizeof(buf) ) std::free( bp );
+          sz *= 2;
+          if ( (bp = static_cast<char*>(std::malloc( sz ))) == 0 )
+            return std::string( "ENOMEM" );
+        }
+      }
+      std::string msg;
+#   ifndef BOOST_NO_EXCEPTIONS
+      try
+#   endif
+      {
+        msg = ( ( result == invalid_argument ) ? "Unknown error" : bp );
+      }
+
+#   ifndef BOOST_NO_EXCEPTIONS
+      // See ticket #2098
+      catch(...)
+      {
+        // just eat the exception
+      }
+#   endif
+
+      if ( sz > sizeof(buf) ) std::free( bp );
+      sz = 0;
+      return msg;
+  #  endif   // else POSIX version of strerror_r
+  # endif  // else use strerror_r
+  }
+  //  system_error_category implementation  --------------------------------//
+
+  const char * system_error_category::name() const BOOST_SYSTEM_NOEXCEPT
+  {
+    return "system";
+  }
+
+  error_condition system_error_category::default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT
+  {
+    using namespace pdalboost::system::errc;
+#if defined(__PGI)
+      using pdalboost::system::errc::invalid_argument;
+#endif
+
+# if defined(BOOST_WINDOWS_API)
+#   if defined(WINAPI_FAMILY) && ((WINAPI_FAMILY & WINAPI_PARTITION_APP) != 0)
+    // When using the Windows Runtime, most system errors are reported as HRESULTs.
+    // We want to map the common Win32 errors to their equivalent error condition,
+    // whether or not they are reported via an HRESULT.
+    if ( ev < 0 ) // Check for failed HRESULTs only.
+      if ( HRESULT_FACILITY( ev ) == FACILITY_WIN32 )
+        ev = HRESULT_CODE( ev );
+#   endif
+# endif
+
+    switch ( ev )
+    {
+    case 0: return make_error_condition( success );
+# if defined(BOOST_POSIX_API)
+    // POSIX-like O/S -> posix_errno decode table  ---------------------------//
+    case E2BIG: return make_error_condition( argument_list_too_long );
+    case EACCES: return make_error_condition( permission_denied );
+    case EADDRINUSE: return make_error_condition( address_in_use );
+    case EADDRNOTAVAIL: return make_error_condition( address_not_available );
+    case EAFNOSUPPORT: return make_error_condition( address_family_not_supported );
+    case EAGAIN: return make_error_condition( resource_unavailable_try_again );
+#   if EALREADY != EBUSY  //  EALREADY and EBUSY are the same on QNX Neutrino
+    case EALREADY: return make_error_condition( connection_already_in_progress );
+#   endif
+    case EBADF: return make_error_condition( bad_file_descriptor );
+    case EBADMSG: return make_error_condition( bad_message );
+    case EBUSY: return make_error_condition( device_or_resource_busy );
+    case ECANCELED: return make_error_condition( operation_canceled );
+    case ECHILD: return make_error_condition( no_child_process );
+    case ECONNABORTED: return make_error_condition( connection_aborted );
+    case ECONNREFUSED: return make_error_condition( connection_refused );
+    case ECONNRESET: return make_error_condition( connection_reset );
+    case EDEADLK: return make_error_condition( resource_deadlock_would_occur );
+    case EDESTADDRREQ: return make_error_condition( destination_address_required );
+    case EDOM: return make_error_condition( argument_out_of_domain );
+    case EEXIST: return make_error_condition( file_exists );
+    case EFAULT: return make_error_condition( bad_address );
+    case EFBIG: return make_error_condition( file_too_large );
+    case EHOSTUNREACH: return make_error_condition( host_unreachable );
+    case EIDRM: return make_error_condition( identifier_removed );
+    case EILSEQ: return make_error_condition( illegal_byte_sequence );
+    case EINPROGRESS: return make_error_condition( operation_in_progress );
+    case EINTR: return make_error_condition( interrupted );
+    case EINVAL: return make_error_condition( invalid_argument );
+    case EIO: return make_error_condition( io_error );
+    case EISCONN: return make_error_condition( already_connected );
+    case EISDIR: return make_error_condition( is_a_directory );
+    case ELOOP: return make_error_condition( too_many_symbolic_link_levels );
+    case EMFILE: return make_error_condition( too_many_files_open );
+    case EMLINK: return make_error_condition( too_many_links );
+    case EMSGSIZE: return make_error_condition( message_size );
+    case ENAMETOOLONG: return make_error_condition( filename_too_long );
+    case ENETDOWN: return make_error_condition( network_down );
+    case ENETRESET: return make_error_condition( network_reset );
+    case ENETUNREACH: return make_error_condition( network_unreachable );
+    case ENFILE: return make_error_condition( too_many_files_open_in_system );
+    case ENOBUFS: return make_error_condition( no_buffer_space );
+    case ENODATA: return make_error_condition( no_message_available );
+    case ENODEV: return make_error_condition( no_such_device );
+    case ENOENT: return make_error_condition( no_such_file_or_directory );
+    case ENOEXEC: return make_error_condition( executable_format_error );
+    case ENOLCK: return make_error_condition( no_lock_available );
+    case ENOLINK: return make_error_condition( no_link );
+    case ENOMEM: return make_error_condition( not_enough_memory );
+    case ENOMSG: return make_error_condition( no_message );
+    case ENOPROTOOPT: return make_error_condition( no_protocol_option );
+    case ENOSPC: return make_error_condition( no_space_on_device );
+    case ENOSR: return make_error_condition( no_stream_resources );
+    case ENOSTR: return make_error_condition( not_a_stream );
+    case ENOSYS: return make_error_condition( function_not_supported );
+    case ENOTCONN: return make_error_condition( not_connected );
+    case ENOTDIR: return make_error_condition( not_a_directory );
+  # if ENOTEMPTY != EEXIST // AIX treats ENOTEMPTY and EEXIST as the same value
+    case ENOTEMPTY: return make_error_condition( directory_not_empty );
+  # endif // ENOTEMPTY != EEXIST
+  # if ENOTRECOVERABLE != ECONNRESET // the same on some Broadcom chips
+    case ENOTRECOVERABLE: return make_error_condition( state_not_recoverable );
+  # endif // ENOTRECOVERABLE != ECONNRESET
+    case ENOTSOCK: return make_error_condition( not_a_socket );
+    case ENOTSUP: return make_error_condition( not_supported );
+    case ENOTTY: return make_error_condition( inappropriate_io_control_operation );
+    case ENXIO: return make_error_condition( no_such_device_or_address );
+  # if EOPNOTSUPP != ENOTSUP
+    case EOPNOTSUPP: return make_error_condition( operation_not_supported );
+  # endif // EOPNOTSUPP != ENOTSUP
+    case EOVERFLOW: return make_error_condition( value_too_large );
+  # if EOWNERDEAD != ECONNABORTED // the same on some Broadcom chips
+    case EOWNERDEAD: return make_error_condition( owner_dead );
+  # endif // EOWNERDEAD != ECONNABORTED
+    case EPERM: return make_error_condition( operation_not_permitted );
+    case EPIPE: return make_error_condition( broken_pipe );
+    case EPROTO: return make_error_condition( protocol_error );
+    case EPROTONOSUPPORT: return make_error_condition( protocol_not_supported );
+    case EPROTOTYPE: return make_error_condition( wrong_protocol_type );
+    case ERANGE: return make_error_condition( result_out_of_range );
+    case EROFS: return make_error_condition( read_only_file_system );
+    case ESPIPE: return make_error_condition( invalid_seek );
+    case ESRCH: return make_error_condition( no_such_process );
+    case ETIME: return make_error_condition( stream_timeout );
+    case ETIMEDOUT: return make_error_condition( timed_out );
+    case ETXTBSY: return make_error_condition( text_file_busy );
+  # if EAGAIN != EWOULDBLOCK
+    case EWOULDBLOCK: return make_error_condition( operation_would_block );
+  # endif // EAGAIN != EWOULDBLOCK
+    case EXDEV: return make_error_condition( cross_device_link );
+  #else
+    // Windows system -> posix_errno decode table  ---------------------------//
+    // see WinError.h comments for descriptions of errors
+    case ERROR_ACCESS_DENIED: return make_error_condition( permission_denied );
+    case ERROR_ALREADY_EXISTS: return make_error_condition( file_exists );
+    case ERROR_BAD_UNIT: return make_error_condition( no_such_device );
+    case ERROR_BUFFER_OVERFLOW: return make_error_condition( filename_too_long );
+    case ERROR_BUSY: return make_error_condition( device_or_resource_busy );
+    case ERROR_BUSY_DRIVE: return make_error_condition( device_or_resource_busy );
+    case ERROR_CANNOT_MAKE: return make_error_condition( permission_denied );
+    case ERROR_CANTOPEN: return make_error_condition( io_error );
+    case ERROR_CANTREAD: return make_error_condition( io_error );
+    case ERROR_CANTWRITE: return make_error_condition( io_error );
+    case ERROR_CURRENT_DIRECTORY: return make_error_condition( permission_denied );
+    case ERROR_DEV_NOT_EXIST: return make_error_condition( no_such_device );
+    case ERROR_DEVICE_IN_USE: return make_error_condition( device_or_resource_busy );
+    case ERROR_DIR_NOT_EMPTY: return make_error_condition( directory_not_empty );
+    case ERROR_DIRECTORY: return make_error_condition( invalid_argument ); // WinError.h: "The directory name is invalid"
+    case ERROR_DISK_FULL: return make_error_condition( no_space_on_device );
+    case ERROR_FILE_EXISTS: return make_error_condition( file_exists );
+    case ERROR_FILE_NOT_FOUND: return make_error_condition( no_such_file_or_directory );
+    case ERROR_HANDLE_DISK_FULL: return make_error_condition( no_space_on_device );
+    case ERROR_INVALID_ACCESS: return make_error_condition( permission_denied );
+    case ERROR_INVALID_DRIVE: return make_error_condition( no_such_device );
+    case ERROR_INVALID_FUNCTION: return make_error_condition( function_not_supported );
+    case ERROR_INVALID_HANDLE: return make_error_condition( invalid_argument );
+    case ERROR_INVALID_NAME: return make_error_condition( invalid_argument );
+    case ERROR_LOCK_VIOLATION: return make_error_condition( no_lock_available );
+    case ERROR_LOCKED: return make_error_condition( no_lock_available );
+    case ERROR_NEGATIVE_SEEK: return make_error_condition( invalid_argument );
+    case ERROR_NOACCESS: return make_error_condition( permission_denied );
+    case ERROR_NOT_ENOUGH_MEMORY: return make_error_condition( not_enough_memory );
+    case ERROR_NOT_READY: return make_error_condition( resource_unavailable_try_again );
+    case ERROR_NOT_SAME_DEVICE: return make_error_condition( cross_device_link );
+    case ERROR_OPEN_FAILED: return make_error_condition( io_error );
+    case ERROR_OPEN_FILES: return make_error_condition( device_or_resource_busy );
+    case ERROR_OPERATION_ABORTED: return make_error_condition( operation_canceled );
+    case ERROR_OUTOFMEMORY: return make_error_condition( not_enough_memory );
+    case ERROR_PATH_NOT_FOUND: return make_error_condition( no_such_file_or_directory );
+    case ERROR_READ_FAULT: return make_error_condition( io_error );
+    case ERROR_RETRY: return make_error_condition( resource_unavailable_try_again );
+    case ERROR_SEEK: return make_error_condition( io_error );
+    case ERROR_SHARING_VIOLATION: return make_error_condition( permission_denied );
+    case ERROR_TOO_MANY_OPEN_FILES: return make_error_condition( too_many_files_open );
+    case ERROR_WRITE_FAULT: return make_error_condition( io_error );
+    case ERROR_WRITE_PROTECT: return make_error_condition( permission_denied );
+    case WSAEACCES: return make_error_condition( permission_denied );
+    case WSAEADDRINUSE: return make_error_condition( address_in_use );
+    case WSAEADDRNOTAVAIL: return make_error_condition( address_not_available );
+    case WSAEAFNOSUPPORT: return make_error_condition( address_family_not_supported );
+    case WSAEALREADY: return make_error_condition( connection_already_in_progress );
+    case WSAEBADF: return make_error_condition( bad_file_descriptor );
+    case WSAECONNABORTED: return make_error_condition( connection_aborted );
+    case WSAECONNREFUSED: return make_error_condition( connection_refused );
+    case WSAECONNRESET: return make_error_condition( connection_reset );
+    case WSAEDESTADDRREQ: return make_error_condition( destination_address_required );
+    case WSAEFAULT: return make_error_condition( bad_address );
+    case WSAEHOSTUNREACH: return make_error_condition( host_unreachable );
+    case WSAEINPROGRESS: return make_error_condition( operation_in_progress );
+    case WSAEINTR: return make_error_condition( interrupted );
+    case WSAEINVAL: return make_error_condition( invalid_argument );
+    case WSAEISCONN: return make_error_condition( already_connected );
+    case WSAEMFILE: return make_error_condition( too_many_files_open );
+    case WSAEMSGSIZE: return make_error_condition( message_size );
+    case WSAENAMETOOLONG: return make_error_condition( filename_too_long );
+    case WSAENETDOWN: return make_error_condition( network_down );
+    case WSAENETRESET: return make_error_condition( network_reset );
+    case WSAENETUNREACH: return make_error_condition( network_unreachable );
+    case WSAENOBUFS: return make_error_condition( no_buffer_space );
+    case WSAENOPROTOOPT: return make_error_condition( no_protocol_option );
+    case WSAENOTCONN: return make_error_condition( not_connected );
+    case WSAENOTSOCK: return make_error_condition( not_a_socket );
+    case WSAEOPNOTSUPP: return make_error_condition( operation_not_supported );
+    case WSAEPROTONOSUPPORT: return make_error_condition( protocol_not_supported );
+    case WSAEPROTOTYPE: return make_error_condition( wrong_protocol_type );
+    case WSAETIMEDOUT: return make_error_condition( timed_out );
+    case WSAEWOULDBLOCK: return make_error_condition( operation_would_block );
+  #endif
+    default: return error_condition( ev, system_category() );
+    }
+  }
+
+# if !defined( BOOST_WINDOWS_API )
+
+  std::string system_error_category::message( int ev ) const
+  {
+    return generic_category().message( ev );
+  }
+# else
+
+  std::string system_error_category::message( int ev ) const
+  {
+#if defined(UNDER_CE) || BOOST_PLAT_WINDOWS_RUNTIME || defined(BOOST_NO_ANSI_APIS)
+    std::wstring buf(128, wchar_t());
+    for (;;)
+    {
+        DWORD retval = ::FormatMessageW(
+            FORMAT_MESSAGE_FROM_SYSTEM |
+            FORMAT_MESSAGE_IGNORE_INSERTS,
+            NULL,
+            ev,
+            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+            &buf[0],
+            buf.size(),
+            NULL
+        );
+        
+        if (retval > 0)
+        {
+            buf.resize(retval);
+            break;
+        }
+        else if ( ::GetLastError() != ERROR_INSUFFICIENT_BUFFER )
+        {
+            return std::string("Unknown error");
+        }
+        else
+        {
+            buf.resize(buf.size() + buf.size() / 2);
+        }
+    }
+    
+    int num_chars = (buf.size() + 1) * 2;
+    LPSTR narrow_buffer = (LPSTR)_alloca( num_chars );
+    if (::WideCharToMultiByte(CP_ACP, 0, buf.c_str(), -1, narrow_buffer, num_chars, NULL, NULL) == 0)
+    {
+        return std::string("Unknown error");
+    }
+
+    std::string str( narrow_buffer );
+#else
+    LPVOID lpMsgBuf = 0;
+    DWORD retval = ::FormatMessageA(
+        FORMAT_MESSAGE_ALLOCATE_BUFFER |
+        FORMAT_MESSAGE_FROM_SYSTEM |
+        FORMAT_MESSAGE_IGNORE_INSERTS,
+        NULL,
+        ev,
+        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+        (LPSTR) &lpMsgBuf,
+        0,
+        NULL
+    );
+    detail::local_free_on_destruction lfod(lpMsgBuf);
+    if (retval == 0)
+        return std::string("Unknown error");
+
+    std::string str( static_cast<LPCSTR>(lpMsgBuf) );
+# endif
+    while ( str.size()
+      && (str[str.size()-1] == '\n' || str[str.size()-1] == '\r') )
+        str.erase( str.size()-1 );
+    if ( str.size() && str[str.size()-1] == '.' )
+      { str.erase( str.size()-1 ); }
+    return str;
+  }
+# endif
+
+} // unnamed namespace
+
+
+# ifndef BOOST_SYSTEM_NO_DEPRECATED
+    BOOST_SYSTEM_DECL error_code throws; // "throw on error" special error_code;
+                                         //  note that it doesn't matter if this
+                                         //  isn't initialized before use since
+                                         //  the only use is to take its
+                                         //  address for comparison purposes
+# endif
+
+# ifdef BOOST_ERROR_CODE_HEADER_ONLY
+#   define BOOST_SYSTEM_LINKAGE inline
+# else
+#   define BOOST_SYSTEM_LINKAGE BOOST_SYSTEM_DECL
+# endif
+
+    BOOST_SYSTEM_LINKAGE const error_category & system_category() BOOST_SYSTEM_NOEXCEPT
+    {
+      static const system_error_category  system_category_const;
+      return system_category_const;
+    }
+
+    BOOST_SYSTEM_LINKAGE const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT
+    {
+      static const generic_error_category generic_category_const;
+      return generic_category_const;
+    }
+
+  } // namespace system
+} // namespace pdalboost
diff --git a/vendor/pdalboost/boost/system/detail/local_free_on_destruction.hpp b/vendor/pdalboost/boost/system/detail/local_free_on_destruction.hpp
new file mode 100644
index 0000000..90225fa
--- /dev/null
+++ b/vendor/pdalboost/boost/system/detail/local_free_on_destruction.hpp
@@ -0,0 +1,40 @@
+//  local_free_on_exit.hpp  ------------------------------------------------------------//
+
+//  Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//  Copyright (c) 2010 Beman Dawes
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  This is derived from boost/asio/detail/local_free_on_block_exit.hpp to avoid
+//  a dependency on asio. Thanks to Chris Kohlhoff for pointing it out.
+
+#ifndef BOOST_SYSTEM_LOCAL_FREE_ON_EXIT_HPP
+#define BOOST_SYSTEM_LOCAL_FREE_ON_EXIT_HPP
+
+namespace pdalboost {
+namespace system {
+namespace detail {
+
+class local_free_on_destruction
+{
+public:
+  explicit local_free_on_destruction(void* p)
+    : p_(p) {}
+
+  ~local_free_on_destruction()
+  {
+    ::LocalFree(p_);
+  }
+
+private:
+  void* p_;
+  local_free_on_destruction(const local_free_on_destruction&);  // = deleted
+  local_free_on_destruction& operator=(const local_free_on_destruction&);  // = deleted
+};
+
+} // namespace detail
+} // namespace system
+} // namespace pdalboost
+
+#endif  // BOOST_SYSTEM_LOCAL_FREE_ON_EXIT_HPP
diff --git a/vendor/pdalboost/boost/system/error_code.hpp b/vendor/pdalboost/boost/system/error_code.hpp
new file mode 100644
index 0000000..e7f307c
--- /dev/null
+++ b/vendor/pdalboost/boost/system/error_code.hpp
@@ -0,0 +1,520 @@
+//  boost/system/error_code.hpp  ---------------------------------------------//
+
+//  Copyright Beman Dawes 2006, 2007
+//  Copyright Christoper Kohlhoff 2007
+
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/system
+
+#ifndef BOOST_ERROR_CODE_HPP
+#define BOOST_ERROR_CODE_HPP
+
+#include <boost/system/config.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/assert.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <ostream>
+#include <string>
+#include <stdexcept>
+#include <functional>
+
+// TODO: undef these macros if not already defined
+#include <boost/cerrno.hpp>
+
+#if !defined(BOOST_POSIX_API) && !defined(BOOST_WINDOWS_API)
+#  error BOOST_POSIX_API or BOOST_WINDOWS_API must be defined
+#endif
+
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+
+#ifndef BOOST_SYSTEM_NOEXCEPT
+#define BOOST_SYSTEM_NOEXCEPT BOOST_NOEXCEPT
+#endif
+
+namespace pdalboost
+{
+  namespace system
+  {
+
+    class error_code;
+    class error_condition;
+
+    //  "Concept" helpers  ---------------------------------------------------//
+
+    template< class T >
+    struct is_error_code_enum { static const bool value = false; };
+
+    template< class T >
+    struct is_error_condition_enum { static const bool value = false; };
+
+    //  generic error_conditions  --------------------------------------------//
+
+    namespace errc
+    {
+      enum errc_t
+      {
+        success = 0,
+        address_family_not_supported = EAFNOSUPPORT,
+        address_in_use = EADDRINUSE,
+        address_not_available = EADDRNOTAVAIL,
+        already_connected = EISCONN,
+        argument_list_too_long = E2BIG,
+        argument_out_of_domain = EDOM,
+        bad_address = EFAULT,
+        bad_file_descriptor = EBADF,
+        bad_message = EBADMSG,
+        broken_pipe = EPIPE,
+        connection_aborted = ECONNABORTED,
+        connection_already_in_progress = EALREADY,
+        connection_refused = ECONNREFUSED,
+        connection_reset = ECONNRESET,
+        cross_device_link = EXDEV,
+        destination_address_required = EDESTADDRREQ,
+        device_or_resource_busy = EBUSY,
+        directory_not_empty = ENOTEMPTY,
+        executable_format_error = ENOEXEC,
+        file_exists = EEXIST,
+        file_too_large = EFBIG,
+        filename_too_long = ENAMETOOLONG,
+        function_not_supported = ENOSYS,
+        host_unreachable = EHOSTUNREACH,
+        identifier_removed = EIDRM,
+        illegal_byte_sequence = EILSEQ,
+        inappropriate_io_control_operation = ENOTTY,
+        interrupted = EINTR,
+        invalid_argument = EINVAL,
+        invalid_seek = ESPIPE,
+        io_error = EIO,
+        is_a_directory = EISDIR,
+        message_size = EMSGSIZE,
+        network_down = ENETDOWN,
+        network_reset = ENETRESET,
+        network_unreachable = ENETUNREACH,
+        no_buffer_space = ENOBUFS,
+        no_child_process = ECHILD,
+        no_link = ENOLINK,
+        no_lock_available = ENOLCK,
+        no_message_available = ENODATA,
+        no_message = ENOMSG,
+        no_protocol_option = ENOPROTOOPT,
+        no_space_on_device = ENOSPC,
+        no_stream_resources = ENOSR,
+        no_such_device_or_address = ENXIO,
+        no_such_device = ENODEV,
+        no_such_file_or_directory = ENOENT,
+        no_such_process = ESRCH,
+        not_a_directory = ENOTDIR,
+        not_a_socket = ENOTSOCK,
+        not_a_stream = ENOSTR,
+        not_connected = ENOTCONN,
+        not_enough_memory = ENOMEM,
+        not_supported = ENOTSUP,
+        operation_canceled = ECANCELED,
+        operation_in_progress = EINPROGRESS,
+        operation_not_permitted = EPERM,
+        operation_not_supported = EOPNOTSUPP,
+        operation_would_block = EWOULDBLOCK,
+        owner_dead = EOWNERDEAD,
+        permission_denied = EACCES,
+        protocol_error = EPROTO,
+        protocol_not_supported = EPROTONOSUPPORT,
+        read_only_file_system = EROFS,
+        resource_deadlock_would_occur = EDEADLK,
+        resource_unavailable_try_again = EAGAIN,
+        result_out_of_range = ERANGE,
+        state_not_recoverable = ENOTRECOVERABLE,
+        stream_timeout = ETIME,
+        text_file_busy = ETXTBSY,
+        timed_out = ETIMEDOUT,
+        too_many_files_open_in_system = ENFILE,
+        too_many_files_open = EMFILE,
+        too_many_links = EMLINK,
+        too_many_symbolic_link_levels = ELOOP,
+        value_too_large = EOVERFLOW,
+        wrong_protocol_type = EPROTOTYPE
+      };
+
+    } // namespace errc
+
+# ifndef BOOST_SYSTEM_NO_DEPRECATED
+    namespace posix = errc;
+    namespace posix_error = errc;
+# endif
+
+    template<> struct is_error_condition_enum<errc::errc_t>
+      { static const bool value = true; };
+
+
+    //  ----------------------------------------------------------------------//
+
+    //  Operating system specific interfaces  --------------------------------//
+
+
+    //  The interface is divided into general and system-specific portions to
+    //  meet these requirements:
+    //
+    //  * Code calling an operating system API can create an error_code with
+    //    a single category (system_category), even for POSIX-like operating
+    //    systems that return some POSIX errno values and some native errno
+    //    values. This code should not have to pay the cost of distinguishing
+    //    between categories, since it is not yet known if that is needed.
+    //
+    //  * Users wishing to write system-specific code should be given enums for
+    //    at least the common error cases.
+    //
+    //  * System specific code should fail at compile time if moved to another
+    //    operating system.
+
+    //  The system specific portions of the interface are located in headers
+    //  with names reflecting the operating system. For example,
+    //
+    //       <boost/system/cygwin_error.hpp>
+    //       <boost/system/linux_error.hpp>
+    //       <boost/system/windows_error.hpp>
+    //
+    //  These headers are effectively empty for compiles on operating systems
+    //  where they are not applicable.
+
+    //  ----------------------------------------------------------------------//
+
+    //  class error_category  ------------------------------------------------//
+
+    class error_category : public noncopyable
+    {
+    public:
+      virtual ~error_category(){}
+
+      virtual const char *     name() const BOOST_SYSTEM_NOEXCEPT = 0;
+      virtual std::string      message( int ev ) const = 0;
+      inline virtual error_condition  default_error_condition( int ev ) const  BOOST_SYSTEM_NOEXCEPT;
+      inline virtual bool             equivalent( int code,
+                                           const error_condition & condition ) const  BOOST_SYSTEM_NOEXCEPT;
+      inline virtual bool             equivalent( const error_code & code,
+                                           int condition ) const  BOOST_SYSTEM_NOEXCEPT;
+
+      bool operator==(const error_category & rhs) const BOOST_SYSTEM_NOEXCEPT { return this == &rhs; }
+      bool operator!=(const error_category & rhs) const BOOST_SYSTEM_NOEXCEPT { return this != &rhs; }
+      bool operator<( const error_category & rhs ) const BOOST_SYSTEM_NOEXCEPT
+      {
+        return std::less<const error_category*>()( this, &rhs );
+      }
+    };
+
+    //  predefined error categories  -----------------------------------------//
+
+# ifdef BOOST_ERROR_CODE_HEADER_ONLY
+    inline const error_category &  system_category() BOOST_SYSTEM_NOEXCEPT;
+    inline const error_category &  generic_category() BOOST_SYSTEM_NOEXCEPT;
+#else
+    BOOST_SYSTEM_DECL const error_category &  system_category() BOOST_SYSTEM_NOEXCEPT;
+    BOOST_SYSTEM_DECL const error_category &  generic_category() BOOST_SYSTEM_NOEXCEPT;
+#endif
+    //  deprecated synonyms --------------------------------------------------//
+
+# ifndef BOOST_SYSTEM_NO_DEPRECATED
+    inline const error_category &  get_system_category() { return system_category(); }
+    inline const error_category &  get_generic_category() { return generic_category(); }
+    inline const error_category &  get_posix_category() { return generic_category(); }
+    static const error_category &  posix_category = generic_category();
+    static const error_category &  errno_ecat     = generic_category();
+    static const error_category &  native_ecat    = system_category();
+# endif
+
+    //  class error_condition  -----------------------------------------------//
+
+    //  error_conditions are portable, error_codes are system or library specific
+
+    class error_condition
+    {
+    public:
+
+      // constructors:
+      error_condition() BOOST_SYSTEM_NOEXCEPT : m_val(0), m_cat(&generic_category()) {}
+      error_condition( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT : m_val(val), m_cat(&cat) {}
+
+      template <class ErrorConditionEnum>
+        error_condition(ErrorConditionEnum e,
+          typename pdalboost::enable_if<is_error_condition_enum<ErrorConditionEnum> >::type* = 0) BOOST_SYSTEM_NOEXCEPT
+      {
+        *this = make_error_condition(e);
+      }
+
+      // modifiers:
+
+      void assign( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT
+      {
+        m_val = val;
+        m_cat = &cat;
+      }
+
+      template<typename ErrorConditionEnum>
+        typename pdalboost::enable_if<is_error_condition_enum<ErrorConditionEnum>, error_condition>::type &
+          operator=( ErrorConditionEnum val ) BOOST_SYSTEM_NOEXCEPT
+      {
+        *this = make_error_condition(val);
+        return *this;
+      }
+
+      void clear() BOOST_SYSTEM_NOEXCEPT
+      {
+        m_val = 0;
+        m_cat = &generic_category();
+      }
+
+      // observers:
+      int                     value() const BOOST_SYSTEM_NOEXCEPT    { return m_val; }
+      const error_category &  category() const BOOST_SYSTEM_NOEXCEPT { return *m_cat; }
+      std::string             message() const  { return m_cat->message(value()); }
+
+      typedef void (*unspecified_bool_type)();
+      static void unspecified_bool_true() {}
+
+      operator unspecified_bool_type() const BOOST_SYSTEM_NOEXCEPT  // true if error
+      {
+        return m_val == 0 ? 0 : unspecified_bool_true;
+      }
+
+      bool operator!() const BOOST_SYSTEM_NOEXCEPT  // true if no error
+      {
+        return m_val == 0;
+      }
+
+      // relationals:
+      //  the more symmetrical non-member syntax allows enum
+      //  conversions work for both rhs and lhs.
+      inline friend bool operator==( const error_condition & lhs,
+                                     const error_condition & rhs ) BOOST_SYSTEM_NOEXCEPT
+      {
+        return lhs.m_cat == rhs.m_cat && lhs.m_val == rhs.m_val;
+      }
+
+      inline friend bool operator<( const error_condition & lhs,
+                                    const error_condition & rhs ) BOOST_SYSTEM_NOEXCEPT
+        //  the more symmetrical non-member syntax allows enum
+        //  conversions work for both rhs and lhs.
+      {
+        return lhs.m_cat < rhs.m_cat
+          || (lhs.m_cat == rhs.m_cat && lhs.m_val < rhs.m_val);
+      }
+
+    private:
+      int                     m_val;
+      const error_category *  m_cat;
+
+    };
+
+    //  class error_code  ----------------------------------------------------//
+
+    //  We want error_code to be a value type that can be copied without slicing
+    //  and without requiring heap allocation, but we also want it to have
+    //  polymorphic behavior based on the error category. This is achieved by
+    //  abstract base class error_category supplying the polymorphic behavior,
+    //  and error_code containing a pointer to an object of a type derived
+    //  from error_category.
+    class error_code
+    {
+    public:
+
+      // constructors:
+      error_code() BOOST_SYSTEM_NOEXCEPT : m_val(0), m_cat(&system_category()) {}
+      error_code( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT : m_val(val), m_cat(&cat) {}
+
+      template <class ErrorCodeEnum>
+        error_code(ErrorCodeEnum e,
+          typename pdalboost::enable_if<is_error_code_enum<ErrorCodeEnum> >::type* = 0) BOOST_SYSTEM_NOEXCEPT
+      {
+        *this = make_error_code(e);
+      }
+
+      // modifiers:
+      void assign( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT
+      {
+        m_val = val;
+        m_cat = &cat;
+      }
+
+      template<typename ErrorCodeEnum>
+        typename pdalboost::enable_if<is_error_code_enum<ErrorCodeEnum>, error_code>::type &
+          operator=( ErrorCodeEnum val ) BOOST_SYSTEM_NOEXCEPT
+      {
+        *this = make_error_code(val);
+        return *this;
+      }
+
+      void clear() BOOST_SYSTEM_NOEXCEPT
+      {
+        m_val = 0;
+        m_cat = &system_category();
+      }
+
+      // observers:
+      int                     value() const  BOOST_SYSTEM_NOEXCEPT   { return m_val; }
+      const error_category &  category() const BOOST_SYSTEM_NOEXCEPT { return *m_cat; }
+      error_condition         default_error_condition() const BOOST_SYSTEM_NOEXCEPT  { return m_cat->default_error_condition(value()); }
+      std::string             message() const  { return m_cat->message(value()); }
+
+      typedef void (*unspecified_bool_type)();
+      static void unspecified_bool_true() {}
+
+      operator unspecified_bool_type() const  BOOST_SYSTEM_NOEXCEPT // true if error
+      {
+        return m_val == 0 ? 0 : unspecified_bool_true;
+      }
+
+      bool operator!() const  BOOST_SYSTEM_NOEXCEPT // true if no error
+      {
+        return m_val == 0;
+      }
+
+      // relationals:
+      inline friend bool operator==( const error_code & lhs,
+                                     const error_code & rhs ) BOOST_SYSTEM_NOEXCEPT
+        //  the more symmetrical non-member syntax allows enum
+        //  conversions work for both rhs and lhs.
+      {
+        return lhs.m_cat == rhs.m_cat && lhs.m_val == rhs.m_val;
+      }
+
+      inline friend bool operator<( const error_code & lhs,
+                                    const error_code & rhs ) BOOST_SYSTEM_NOEXCEPT
+        //  the more symmetrical non-member syntax allows enum
+        //  conversions work for both rhs and lhs.
+      {
+        return lhs.m_cat < rhs.m_cat
+          || (lhs.m_cat == rhs.m_cat && lhs.m_val < rhs.m_val);
+      }
+
+    private:
+      int                     m_val;
+      const error_category *  m_cat;
+
+    };
+
+    //  predefined error_code object used as "throw on error" tag
+# ifndef BOOST_SYSTEM_NO_DEPRECATED
+    BOOST_SYSTEM_DECL extern error_code throws;
+# endif
+
+    //  Moving from a "throws" object to a "throws" function without breaking
+    //  existing code is a bit of a problem. The workaround is to place the
+    //  "throws" function in namespace pdalboost rather than namespace pdalboost::system.
+
+  }  // namespace system
+
+  namespace detail { inline system::error_code * throws() { return 0; } }
+    //  Misuse of the error_code object is turned into a noisy failure by
+    //  poisoning the reference. This particular implementation doesn't
+    //  produce warnings or errors from popular compilers, is very efficient
+    //  (as determined by inspecting generated code), and does not suffer
+    //  from order of initialization problems. In practice, it also seems
+    //  cause user function error handling implementation errors to be detected
+    //  very early in the development cycle.
+
+  inline system::error_code & throws()
+    { return *detail::throws(); }
+
+  namespace system
+  {
+    //  non-member functions  ------------------------------------------------//
+
+    inline bool operator!=( const error_code & lhs,
+                            const error_code & rhs ) BOOST_SYSTEM_NOEXCEPT
+    {
+      return !(lhs == rhs);
+    }
+
+    inline bool operator!=( const error_condition & lhs,
+                            const error_condition & rhs ) BOOST_SYSTEM_NOEXCEPT
+    {
+      return !(lhs == rhs);
+    }
+
+    inline bool operator==( const error_code & code,
+                            const error_condition & condition ) BOOST_SYSTEM_NOEXCEPT
+    {
+      return code.category().equivalent( code.value(), condition )
+        || condition.category().equivalent( code, condition.value() );
+    }
+
+    inline bool operator!=( const error_code & lhs,
+                            const error_condition & rhs ) BOOST_SYSTEM_NOEXCEPT
+    {
+      return !(lhs == rhs);
+    }
+
+    inline bool operator==( const error_condition & condition,
+                            const error_code & code ) BOOST_SYSTEM_NOEXCEPT
+    {
+      return condition.category().equivalent( code, condition.value() )
+        || code.category().equivalent( code.value(), condition );
+    }
+
+    inline bool operator!=( const error_condition & lhs,
+                            const error_code & rhs ) BOOST_SYSTEM_NOEXCEPT
+    {
+      return !(lhs == rhs);
+    }
+
+    // TODO: both of these may move elsewhere, but the LWG hasn't spoken yet.
+
+    template <class charT, class traits>
+    inline std::basic_ostream<charT,traits>&
+      operator<< (std::basic_ostream<charT,traits>& os, error_code ec)
+    {
+      os << ec.category().name() << ':' << ec.value();
+      return os;
+    }
+
+    inline std::size_t hash_value( const error_code & ec )
+    {
+      return static_cast<std::size_t>(ec.value())
+        + reinterpret_cast<std::size_t>(&ec.category());
+    }
+
+    //  make_* functions for errc::errc_t  -----------------------------//
+
+    namespace errc
+    {
+      //  explicit conversion:
+      inline error_code make_error_code( errc_t e ) BOOST_SYSTEM_NOEXCEPT
+        { return error_code( e, generic_category() ); }
+
+      //  implicit conversion:
+      inline error_condition make_error_condition( errc_t e ) BOOST_SYSTEM_NOEXCEPT
+        { return error_condition( e, generic_category() ); }
+    }
+
+    //  error_category default implementation  -------------------------------//
+
+    error_condition error_category::default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT
+    {
+      return error_condition( ev, *this );
+    }
+
+    bool error_category::equivalent( int code,
+      const error_condition & condition ) const BOOST_SYSTEM_NOEXCEPT
+    {
+      return default_error_condition( code ) == condition;
+    }
+
+    bool error_category::equivalent( const error_code & code,
+      int condition ) const BOOST_SYSTEM_NOEXCEPT
+    {
+      return *this == code.category() && code.value() == condition;
+    }
+
+  } // namespace system
+} // namespace pdalboost
+
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
+
+# ifdef BOOST_ERROR_CODE_HEADER_ONLY
+#   include <boost/system/detail/error_code.ipp>
+# endif
+
+#endif // BOOST_ERROR_CODE_HPP
+
+
diff --git a/vendor/pdalboost/boost/system/linux_error.hpp b/vendor/pdalboost/boost/system/linux_error.hpp
new file mode 100644
index 0000000..5bdf5f5
--- /dev/null
+++ b/vendor/pdalboost/boost/system/linux_error.hpp
@@ -0,0 +1,110 @@
+//  boost/system/linux_error.hpp  -------------------------------------------//
+
+//  Copyright Beman Dawes 2007
+
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/system
+
+#ifndef BOOST_LINUX_ERROR_HPP
+#define BOOST_LINUX_ERROR_HPP
+
+//  This header is effectively empty for compiles on operating systems where
+//  it is not applicable.
+
+#if defined(linux) || defined(__linux) || defined(__linux__)
+
+#include <boost/system/error_code.hpp>
+
+namespace pdalboost
+{
+  namespace system
+  {
+    //  To construct an error_code after a API error:
+    //
+    //      error_code( errno, system_category() )
+
+    //  User code should use the portable "posix" enums for POSIX errors; this
+    //  allows such code to be portable to non-POSIX systems. For the non-POSIX
+    //  errno values that POSIX-based systems typically provide in addition to 
+    //  POSIX values, use the system specific enums below.
+
+    namespace linux_error
+    {
+      enum linux_errno
+      {
+        advertise_error = EADV,
+        bad_exchange = EBADE,
+        bad_file_number = EBADFD,
+        bad_font_format = EBFONT,
+        bad_request_code = EBADRQC,
+        bad_request_descriptor = EBADR,
+        bad_slot = EBADSLT,
+        channel_range = ECHRNG,
+        communication_error = ECOMM,
+        dot_dot_error = EDOTDOT,
+        exchange_full = EXFULL,
+        host_down = EHOSTDOWN,
+        is_named_file_type= EISNAM,
+        key_expired = EKEYEXPIRED,
+        key_rejected = EKEYREJECTED,
+        key_revoked = EKEYREVOKED,
+        level2_halt= EL2HLT,
+        level2_no_syncronized= EL2NSYNC,
+        level3_halt = EL3HLT,
+        level3_reset = EL3RST,
+        link_range = ELNRNG,
+        medium_type = EMEDIUMTYPE,
+        no_anode= ENOANO,
+        no_block_device = ENOTBLK,
+        no_csi = ENOCSI,
+        no_key = ENOKEY,
+        no_medium = ENOMEDIUM,
+        no_network = ENONET,
+        no_package = ENOPKG,
+        not_avail = ENAVAIL,
+        not_named_file_type= ENOTNAM,
+        not_recoverable = ENOTRECOVERABLE,
+        not_unique = ENOTUNIQ,
+        owner_dead = EOWNERDEAD,
+        protocol_no_supported = EPFNOSUPPORT,
+        remote_address_changed = EREMCHG,
+        remote_io_error = EREMOTEIO,
+        remote_object = EREMOTE,
+        restart_needed = ERESTART,
+        shared_library_access = ELIBACC,
+        shared_library_bad = ELIBBAD,
+        shared_library_execute = ELIBEXEC,
+        shared_library_max_ = ELIBMAX,
+        shared_library_section= ELIBSCN,
+        shutdown = ESHUTDOWN,
+        socket_type_not_supported = ESOCKTNOSUPPORT,
+        srmount_error = ESRMNT,
+        stream_pipe_error = ESTRPIPE,
+        too_many_references = ETOOMANYREFS,
+        too_many_users = EUSERS,
+        unattached = EUNATCH,
+        unclean = EUCLEAN
+      };
+    }  // namespace linux_error
+
+# ifndef BOOST_SYSTEM_NO_DEPRECATED
+    namespace Linux = linux_error;
+# endif
+
+    template<> struct is_error_code_enum<linux_error::linux_errno>
+      { static const bool value = true; };
+
+    namespace linux_error
+    {
+      inline error_code make_error_code( linux_errno e )
+        { return error_code( e, system_category() ); }
+    }
+
+  }  // namespace system
+}  // namespace pdalboost 
+
+#endif  // Linux
+
+#endif  // BOOST_LINUX_ERROR_HPP
diff --git a/vendor/pdalboost/boost/system/system_error.hpp b/vendor/pdalboost/boost/system/system_error.hpp
new file mode 100644
index 0000000..a0702df
--- /dev/null
+++ b/vendor/pdalboost/boost/system/system_error.hpp
@@ -0,0 +1,84 @@
+//  Boost system_error.hpp  --------------------------------------------------//
+
+//  Copyright Beman Dawes 2006
+
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_SYSTEM_ERROR_HPP
+#define BOOST_SYSTEM_ERROR_HPP
+
+#include <string>
+#include <stdexcept>
+#include <cassert>
+#include <boost/system/error_code.hpp>
+
+namespace pdalboost
+{
+  namespace system
+  {
+    //  class system_error  ------------------------------------------------------------//
+
+    class BOOST_SYMBOL_VISIBLE system_error : public std::runtime_error
+    // BOOST_SYMBOL_VISIBLE is needed by GCC to ensure system_error thrown from a shared
+    // library can be caught. See svn.boost.org/trac/boost/ticket/3697
+    {
+    public:
+      system_error( error_code ec )
+          : std::runtime_error(""), m_error_code(ec) {}
+
+      system_error( error_code ec, const std::string & what_arg )
+          : std::runtime_error(what_arg), m_error_code(ec) {}
+
+      system_error( error_code ec, const char* what_arg )
+          : std::runtime_error(what_arg), m_error_code(ec) {}
+
+      system_error( int ev, const error_category & ecat )
+          : std::runtime_error(""), m_error_code(ev,ecat) {}
+
+      system_error( int ev, const error_category & ecat,
+        const std::string & what_arg )
+          : std::runtime_error(what_arg), m_error_code(ev,ecat) {}
+
+      system_error( int ev, const error_category & ecat,
+        const char * what_arg )
+          : std::runtime_error(what_arg), m_error_code(ev,ecat) {}
+
+      virtual ~system_error() throw() {}
+
+      const error_code &  code() const throw() { return m_error_code; }
+      const char *        what() const throw();
+
+    private:
+      error_code           m_error_code;
+      mutable std::string  m_what;
+    };
+
+    //  implementation  ------------------------------------------------------//
+
+    inline const char * system_error::what() const throw()
+    // see http://www.boost.org/more/error_handling.html for lazy build rationale
+    {
+      if ( m_what.empty() )
+      {
+#ifndef BOOST_NO_EXCEPTIONS
+        try
+#endif
+        {
+          m_what = this->std::runtime_error::what();
+          if ( !m_what.empty() ) m_what += ": ";
+          m_what += m_error_code.message();
+        }
+#ifndef BOOST_NO_EXCEPTIONS
+        catch (...) { return std::runtime_error::what(); }
+#endif
+      }
+      return m_what.c_str();
+    }
+
+  } // namespace system
+} // namespace pdalboost
+
+#endif // BOOST_SYSTEM_ERROR_HPP
+
+
diff --git a/vendor/pdalboost/boost/system/windows_error.hpp b/vendor/pdalboost/boost/system/windows_error.hpp
new file mode 100644
index 0000000..c966c27
--- /dev/null
+++ b/vendor/pdalboost/boost/system/windows_error.hpp
@@ -0,0 +1,126 @@
+//  boost/system/windows_error.hpp  ------------------------------------------//
+
+//  Copyright Beman Dawes 2007
+
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/system
+
+#ifndef BOOST_WINDOWS_ERROR_HPP
+#define BOOST_WINDOWS_ERROR_HPP
+
+//  This header is effectively empty for compiles on operating systems where
+//  it is not applicable.
+
+#include <boost/system/config.hpp>
+
+#ifdef BOOST_WINDOWS_API
+
+#include <boost/system/error_code.hpp>
+
+// Neither MinGW or Cygwin versions of winerror.h work if used alone, so on
+// either of those platforms include the full windows.h
+
+#if defined(__MINGW32__) || defined(__CYGWIN__)
+#include <windows.h>
+#else
+#include <winerror.h>
+#endif
+
+namespace pdalboost
+{
+  namespace system
+  {
+
+    //  Microsoft Windows  ---------------------------------------------------//
+
+    //  To construct an error_code after a API error:
+    //
+    //      error_code( ::GetLastError(), system_category() )
+
+    namespace windows_error
+    {
+      enum windows_error_code
+      {
+        success = 0,
+        // These names and values are based on Windows winerror.h
+        invalid_function = ERROR_INVALID_FUNCTION,
+        file_not_found = ERROR_FILE_NOT_FOUND,
+        path_not_found = ERROR_PATH_NOT_FOUND,
+        too_many_open_files = ERROR_TOO_MANY_OPEN_FILES,
+        access_denied = ERROR_ACCESS_DENIED,
+        invalid_handle = ERROR_INVALID_HANDLE,
+        arena_trashed = ERROR_ARENA_TRASHED,
+        not_enough_memory = ERROR_NOT_ENOUGH_MEMORY,
+        invalid_block = ERROR_INVALID_BLOCK,
+        bad_environment = ERROR_BAD_ENVIRONMENT,
+        bad_format = ERROR_BAD_FORMAT,
+        invalid_access = ERROR_INVALID_ACCESS,
+        outofmemory = ERROR_OUTOFMEMORY,
+        invalid_drive = ERROR_INVALID_DRIVE,
+        current_directory = ERROR_CURRENT_DIRECTORY,
+        not_same_device = ERROR_NOT_SAME_DEVICE,
+        no_more_files = ERROR_NO_MORE_FILES,
+        write_protect = ERROR_WRITE_PROTECT,
+        bad_unit = ERROR_BAD_UNIT,
+        not_ready = ERROR_NOT_READY,
+        bad_command = ERROR_BAD_COMMAND,
+        crc = ERROR_CRC,
+        bad_length = ERROR_BAD_LENGTH,
+        seek = ERROR_SEEK,
+        not_dos_disk = ERROR_NOT_DOS_DISK,
+        sector_not_found = ERROR_SECTOR_NOT_FOUND,
+        out_of_paper = ERROR_OUT_OF_PAPER,
+        write_fault = ERROR_WRITE_FAULT,
+        read_fault = ERROR_READ_FAULT,
+        gen_failure = ERROR_GEN_FAILURE,
+        sharing_violation = ERROR_SHARING_VIOLATION,
+        lock_violation = ERROR_LOCK_VIOLATION,
+        wrong_disk = ERROR_WRONG_DISK,
+        sharing_buffer_exceeded = ERROR_SHARING_BUFFER_EXCEEDED,
+        handle_eof = ERROR_HANDLE_EOF,
+        handle_disk_full= ERROR_HANDLE_DISK_FULL,
+        rem_not_list = ERROR_REM_NOT_LIST,
+        dup_name = ERROR_DUP_NAME,
+        bad_net_path = ERROR_BAD_NETPATH,
+        network_busy = ERROR_NETWORK_BUSY,
+        // ...
+        file_exists = ERROR_FILE_EXISTS,
+        cannot_make = ERROR_CANNOT_MAKE,
+        // ...
+        broken_pipe = ERROR_BROKEN_PIPE,
+        open_failed = ERROR_OPEN_FAILED,
+        buffer_overflow = ERROR_BUFFER_OVERFLOW,
+        disk_full= ERROR_DISK_FULL,
+        // ...
+        lock_failed = ERROR_LOCK_FAILED,
+        busy = ERROR_BUSY,
+        cancel_violation = ERROR_CANCEL_VIOLATION,
+        already_exists = ERROR_ALREADY_EXISTS
+        // ...
+
+        // TODO: add more Windows errors
+      };
+
+    }  // namespace windows
+
+# ifndef BOOST_SYSTEM_NO_DEPRECATED
+    namespace windows = windows_error;
+# endif
+
+    template<> struct is_error_code_enum<windows_error::windows_error_code>
+      { static const bool value = true; };
+
+    namespace windows_error
+    {
+      inline error_code make_error_code( windows_error_code e )
+        { return error_code( e, system_category() ); }
+    }
+
+  }  // namespace system
+}  // namespace pdalboost
+
+#endif  // BOOST_WINDOWS_API
+
+#endif  // BOOST_WINDOWS_ERROR_HPP
diff --git a/vendor/pdalboost/boost/test/debug.hpp b/vendor/pdalboost/boost/test/debug.hpp
new file mode 100644
index 0000000..10e389e
--- /dev/null
+++ b/vendor/pdalboost/boost/test/debug.hpp
@@ -0,0 +1,138 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//! @file
+//! @brief defines portable debug interfaces
+//!
+//! Intended to standardize interface of programs with debuggers
+// ***************************************************************************
+
+#ifndef BOOST_TEST_DEBUG_API_HPP_112006GER
+#define BOOST_TEST_DEBUG_API_HPP_112006GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+
+// Boost
+#include <boost/function/function1.hpp>
+
+// STL
+#include <string>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+/// Contains debugger and debug C Runtime interfaces
+namespace debug {
+
+/// @defgroup DebuggerInterface Debugger and debug C Runtime portable interfaces
+/// @{
+/// These interfaces are intended to be used by application to:
+/// - check if we are running under debugger
+/// - attach the debugger to itself
+///
+/// Unfortunately these actions differ widely between different debuggers available in a field. These interface present generalized standard form of
+/// performing these actions. Implementation depends a lot on the environment application is running in and thus there are several custom implementations
+/// supported by the Boost.Test
+///
+/// In addition here you find interfaces for memory leaks detection and reporting.
+///
+/// All these interfaces are defined in namespace pdalboost::debug
+
+// ************************************************************************** //
+/// Checks if programs runs under debugger
+
+/// @returns true if current process is under debugger. False otherwise
+// ************************************************************************** //
+bool BOOST_TEST_DECL under_debugger();
+
+// ************************************************************************** //
+/// Cause program to break execution in debugger at call point
+// ************************************************************************** //
+
+void BOOST_TEST_DECL debugger_break();
+
+// ************************************************************************** //
+/// Collection of data, which is used by debugger starter routine
+// ************************************************************************** //
+
+struct dbg_startup_info {
+    long                    pid;                ///< pid of a program to attach to
+    bool                    break_or_continue;  ///< what to do after debugger is attached
+    unit_test::const_string binary_path;        ///< path to executable for current process
+    unit_test::const_string display;            ///< if debugger has a GUI, which display to use (on UNIX)
+    unit_test::const_string init_done_lock;     ///< path to a uniquely named lock file, which is used to pause current application while debugger is being initialized
+};
+
+/// Signature of debugger starter routine. Takes an instance of dbg_startup_into as only argument
+typedef pdalboost::function<void (dbg_startup_info const&)> dbg_starter;
+
+// ************************************************************************** //
+/// Specifies which debugger to use when attaching and optionally what routine to use to start that debugger
+
+/// There are  many different debuggers available for different platforms. Some of them also can be used in a different setups/configuratins.
+/// For example, gdb can be used in plain text mode, inside ddd, inside (x)emacs or in a separate xterm window.
+/// Boost.Test identifies each configuration with unique string.
+/// Also different debuggers configurations require different routines which is specifically tailored to start that debugger configuration.
+/// Boost.Test comes with set of predefined configuration names and corresponding routines for these configurations:
+///   - TODO
+///
+/// You can use this routine to select which one of the predefined debugger configurations to use in which case you do not need to provide starter
+/// routine (the one provided by Boost.Test will be used). You can also use this routine to select your own debugger by providing unique configuration
+/// id and starter routine for this configuration.
+///
+/// @param[in] dbg_id   Unique id for debugger configuration (for example, gdb)
+/// @param[in] s        Optional starter routine for selected configuration (use only you want to define your own configuration)
+/// @returns            Id of previously selected debugger configuration
+std::string BOOST_TEST_DECL set_debugger( unit_test::const_string dbg_id, dbg_starter s = dbg_starter() );
+
+// ************************************************************************** //
+/// Attaches debugger to the current process
+
+/// Using  currently selected debugger, this routine attempts to attach the debugger to this process.
+/// @param[in] break_or_continue tells what we wan to do after the debugger is attached. If true - process execution breaks
+///                              in the point in invocation of this function. Otherwise execution continues, but now it is
+///                              under the debugger
+/// @returns true if debugger successfully attached. False otherwise
+// ************************************************************************** //
+
+bool BOOST_TEST_DECL attach_debugger( bool break_or_continue = true );
+
+// ************************************************************************** //
+/// Switches on/off memory leaks detection
+
+/// On platforms where memory leak detection is possible inside of running application (at the moment this is only Windows family) you can
+/// switch this feature on and off using this interface. In addition you can specify the name of the file to write a report into. Otherwise
+/// the report is going to be generated in standard error stream.
+/// @param[in] on_off boolean switch
+/// @param[in] report_file file, where the report should be directed to
+// ************************************************************************** //
+
+void BOOST_TEST_DECL detect_memory_leaks( bool on_off, unit_test::const_string report_file = unit_test::const_string() );
+
+// ************************************************************************** //
+/// Causes program to break execution in debugger at specific allocation point
+
+/// On some platforms/memory managers (at the moment only on Windows/Visual Studio) one can tell a C Runtime to break
+/// on specific memory allocation. This can be used in combination with memory leak detection (which reports leaked memory
+/// allocation number) to locate the place where leak initiated.
+/// @param[in] mem_alloc_order_num Specific memory allocation number
+// ************************************************************************** //
+
+void BOOST_TEST_DECL break_memory_alloc( long mem_alloc_order_num );
+
+} // namespace debug
+/// @}
+
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/test/debug_config.hpp b/vendor/pdalboost/boost/test/debug_config.hpp
new file mode 100644
index 0000000..894d78e
--- /dev/null
+++ b/vendor/pdalboost/boost/test/debug_config.hpp
@@ -0,0 +1,24 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//! @file
+//! @brief user's config for Boost.Test debugging support
+//!
+//! This file is intended to be edited by end user to specify varios macros, which configure debugger interface
+//! Alterntively you can set these parameters in your own sources/makefiles
+// ***************************************************************************
+
+#ifndef BOOST_TEST_DEBUG_CONFIG_HPP_112006GER
+#define BOOST_TEST_DEBUG_CONFIG_HPP_112006GER
+
+// ';' separated list of supported debuggers
+// #define BOOST_TEST_DBG_LIST gdb;dbx
+
+// maximum size of /proc/pid/stat file
+// #define BOOST_TEST_STAT_LINE_MAX
+
+#endif
diff --git a/vendor/pdalboost/boost/test/detail/config.hpp b/vendor/pdalboost/boost/test/detail/config.hpp
new file mode 100644
index 0000000..db9b5d2
--- /dev/null
+++ b/vendor/pdalboost/boost/test/detail/config.hpp
@@ -0,0 +1,127 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief a central place for global configuration switches
+// ***************************************************************************
+
+#ifndef BOOST_TEST_CONFIG_HPP_071894GER
+#define BOOST_TEST_CONFIG_HPP_071894GER
+
+// Boost
+#include <boost/config.hpp> // compilers workarounds
+#include <boost/detail/workaround.hpp>
+
+#if defined(_WIN32) && !defined(BOOST_DISABLE_WIN32) &&                  \
+    (!defined(__COMO__) && !defined(__MWERKS__) && !defined(__GNUC__) || \
+    BOOST_WORKAROUND(__MWERKS__, >= 0x3000))
+#  define BOOST_SEH_BASED_SIGNAL_HANDLING
+#endif
+
+#if defined(__COMO__) && defined(_MSC_VER)
+// eh.h uses type_info without declaring it.
+class type_info;
+#  define BOOST_SEH_BASED_SIGNAL_HANDLING
+#endif
+
+//____________________________________________________________________________//
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)) || \
+    BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))     || \
+    (defined __sgi && BOOST_WORKAROUND(_COMPILER_VERSION, BOOST_TESTED_AT(730)))
+#  define BOOST_TEST_SHIFTED_LINE
+#endif
+
+//____________________________________________________________________________//
+
+#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32))
+#  define BOOST_TEST_CALL_DECL __cdecl
+#else
+#  define BOOST_TEST_CALL_DECL /**/
+#endif
+
+//____________________________________________________________________________//
+
+#if !defined(BOOST_NO_STD_LOCALE) && !defined(__MWERKS__)
+#  define BOOST_TEST_USE_STD_LOCALE 1
+#endif
+
+//____________________________________________________________________________//
+
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x570)            || \
+    BOOST_WORKAROUND( __COMO__, <= 0x433 )              || \
+    BOOST_WORKAROUND( __INTEL_COMPILER, <= 800 )        || \
+    defined(__sgi) && _COMPILER_VERSION <= 730          || \
+    BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))  || \
+    defined(__DECCXX)                                   || \
+    defined(__DMC__)
+#  define BOOST_TEST_NO_PROTECTED_USING
+#endif
+
+//____________________________________________________________________________//
+
+#if defined(__GNUC__) || BOOST_WORKAROUND(BOOST_MSVC, == 1400)
+#define BOOST_TEST_PROTECTED_VIRTUAL virtual
+#else
+#define BOOST_TEST_PROTECTED_VIRTUAL
+#endif
+
+//____________________________________________________________________________//
+
+#if !defined(__BORLANDC__) && !BOOST_WORKAROUND( __SUNPRO_CC, < 0x5100 )
+#define BOOST_TEST_SUPPORT_TOKEN_ITERATOR 1
+#endif
+
+//____________________________________________________________________________//
+
+#if defined(BOOST_ALL_DYN_LINK) && !defined(BOOST_TEST_DYN_LINK)
+#  define BOOST_TEST_DYN_LINK
+#endif
+
+#if defined(BOOST_TEST_INCLUDED)
+#  undef BOOST_TEST_DYN_LINK
+#endif
+
+#if defined(BOOST_TEST_DYN_LINK)
+#  define BOOST_TEST_ALTERNATIVE_INIT_API
+
+#  ifdef BOOST_TEST_SOURCE
+#    define BOOST_TEST_DECL BOOST_SYMBOL_EXPORT
+#  else
+#    define BOOST_TEST_DECL BOOST_SYMBOL_IMPORT
+#  endif  // BOOST_TEST_SOURCE
+#else
+#  define BOOST_TEST_DECL
+#endif
+
+#if !defined(BOOST_TEST_MAIN) && defined(BOOST_AUTO_TEST_MAIN)
+#define BOOST_TEST_MAIN BOOST_AUTO_TEST_MAIN
+#endif
+
+#if !defined(BOOST_TEST_MAIN) && defined(BOOST_TEST_MODULE)
+#define BOOST_TEST_MAIN BOOST_TEST_MODULE
+#endif
+
+
+
+#ifndef BOOST_PP_VARIADICS /* we can change this only if not already defined) */
+
+#ifdef __PGI
+#define BOOST_PP_VARIADICS 1
+#endif
+
+#if BOOST_CLANG
+#define BOOST_PP_VARIADICS 1
+#endif
+
+#if defined(BOOST_GCC) && (BOOST_GCC >= 4 * 10000 + 8 * 100)
+#define BOOST_PP_VARIADICS 1
+#endif
+
+#endif /* ifndef BOOST_PP_VARIADICS */
+
+#endif // BOOST_TEST_CONFIG_HPP_071894GER
diff --git a/vendor/pdalboost/boost/test/detail/enable_warnings.hpp b/vendor/pdalboost/boost/test/detail/enable_warnings.hpp
new file mode 100644
index 0000000..45afb31
--- /dev/null
+++ b/vendor/pdalboost/boost/test/detail/enable_warnings.hpp
@@ -0,0 +1,36 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief enable previously suppressed warnings
+// ***************************************************************************
+
+#ifdef BOOST_MSVC
+# pragma warning(default: 4511) // copy constructor can't not be generated
+# pragma warning(default: 4512) // assignment operator can't not be generated
+# pragma warning(default: 4100) // unreferenced formal parameter
+# pragma warning(default: 4996) // <symbol> was declared deprecated
+# pragma warning(default: 4355) // 'this' : used in base member initializer list
+# pragma warning(default: 4706) // assignment within conditional expression
+# pragma warning(default: 4251) // class 'A<T>' needs to have dll-interface to be used by clients of class 'B'
+# pragma warning(default: 4127) // conditional expression is constant
+# pragma warning(default: 4290) // C++ exception specification ignored except to ...
+# pragma warning(default: 4180) // qualifier applied to function type has no meaning; ignored
+# pragma warning(default: 4275) // non dll-interface class ... used as base for dll-interface class ...
+# pragma warning(default: 4267) // 'var' : conversion from 'size_t' to 'type', possible loss of data
+# pragma warning(default: 4511) // 'class' : copy constructor could not be generated
+# pragma warning(pop)
+#endif
+
+#if BOOST_CLANG
+#pragma clang diagnostic pop
+#endif
+
+#if defined(BOOST_GCC) && (BOOST_GCC >= 4 * 10000 + 6 * 100)
+# pragma GCC diagnostic pop
+#endif
+
diff --git a/vendor/pdalboost/boost/test/detail/fwd_decl.hpp b/vendor/pdalboost/boost/test/detail/fwd_decl.hpp
new file mode 100644
index 0000000..e03cd9b
--- /dev/null
+++ b/vendor/pdalboost/boost/test/detail/fwd_decl.hpp
@@ -0,0 +1,45 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief contains forward eclarations for Boost.Test data types
+// ***************************************************************************
+
+#ifndef BOOST_TEST_FWD_DECL_HPP_011605GER
+#define BOOST_TEST_FWD_DECL_HPP_011605GER
+
+namespace pdalboost {
+
+class  execution_monitor;
+class  execution_exception;
+
+namespace unit_test {
+
+class  test_unit;
+class  test_case;
+class  test_suite;
+class  master_test_suite_t;
+
+class  test_tree_visitor;
+class  test_observer;
+
+// singletons
+class  unit_test_monitor_t;
+class  unit_test_log_t;
+
+class  unit_test_log_formatter;
+struct log_entry_data;
+struct log_checkpoint_data;
+
+class lazy_ostream;
+
+} // namespace unit_test
+
+} // namespace pdalboost
+
+#endif // BOOST_TEST_FWD_DECL_HPP_011605GER
+
diff --git a/vendor/pdalboost/boost/test/detail/global_typedef.hpp b/vendor/pdalboost/boost/test/detail/global_typedef.hpp
new file mode 100644
index 0000000..790ce68
--- /dev/null
+++ b/vendor/pdalboost/boost/test/detail/global_typedef.hpp
@@ -0,0 +1,93 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief some trivial global typedefs
+// ***************************************************************************
+
+#ifndef BOOST_TEST_GLOBAL_TYPEDEF_HPP_021005GER
+#define BOOST_TEST_GLOBAL_TYPEDEF_HPP_021005GER
+
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+#include <boost/test/detail/workaround.hpp>
+
+#define BOOST_TEST_L( s )         ::pdalboost::unit_test::const_string( s, sizeof( s ) - 1 )
+#define BOOST_TEST_STRINGIZE( s ) BOOST_TEST_L( BOOST_STRINGIZE( s ) )
+#define BOOST_TEST_EMPTY_STRING   BOOST_TEST_L( "" )
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+typedef unsigned long   counter_t;
+
+//____________________________________________________________________________//
+
+enum report_level  { INV_REPORT_LEVEL, CONFIRMATION_REPORT, SHORT_REPORT, DETAILED_REPORT, NO_REPORT };
+
+//____________________________________________________________________________//
+
+enum output_format { OF_INVALID,
+                     OF_CLF, ///< compiler log format
+                     OF_XML, ///< XML format for report and log,
+                     OF_DOT  ///< dot format for output content
+};
+
+//____________________________________________________________________________//
+
+enum test_unit_type { TUT_CASE = 0x01, TUT_SUITE = 0x10, TUT_ANY = 0x11 };
+
+//____________________________________________________________________________//
+
+enum assertion_result { AR_FAILED, AR_PASSED, AR_TRIGGERED };
+
+//____________________________________________________________________________//
+
+typedef unsigned long   test_unit_id;
+
+const test_unit_id INV_TEST_UNIT_ID  = 0xFFFFFFFF;
+const test_unit_id MAX_TEST_CASE_ID  = 0xFFFFFFFE;
+const test_unit_id MIN_TEST_CASE_ID  = 0x00010000;
+const test_unit_id MAX_TEST_SUITE_ID = 0x0000FF00;
+const test_unit_id MIN_TEST_SUITE_ID = 0x00000001;
+
+//____________________________________________________________________________//
+
+namespace ut_detail {
+
+inline test_unit_type
+test_id_2_unit_type( test_unit_id id )
+{
+    return (id & 0xFFFF0000) != 0 ? TUT_CASE : TUT_SUITE;
+}
+
+//____________________________________________________________________________//
+
+} // namespace ut_detail
+
+// helper templates to prevent ODR violations
+template<class T>
+struct static_constant {
+    static T value;
+};
+
+template<class T>
+T static_constant<T>::value;
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+} // namespace pdalboost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_GLOBAL_TYPEDEF_HPP_021005GER
diff --git a/vendor/pdalboost/boost/test/detail/log_level.hpp b/vendor/pdalboost/boost/test/detail/log_level.hpp
new file mode 100644
index 0000000..16d600d
--- /dev/null
+++ b/vendor/pdalboost/boost/test/detail/log_level.hpp
@@ -0,0 +1,40 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief shared definition for unit test log levels
+// ***************************************************************************
+
+#ifndef BOOST_TEST_LOG_LEVEL_HPP_011605GER
+#define BOOST_TEST_LOG_LEVEL_HPP_011605GER
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************                   log levels                 ************** //
+// ************************************************************************** //
+
+//  each log level includes all subsequent higher loging levels
+enum            log_level {
+    invalid_log_level        = -1,
+    log_successful_tests     = 0,
+    log_test_units           = 1,
+    log_messages             = 2,
+    log_warnings             = 3,
+    log_all_errors           = 4, // reported by unit test macros
+    log_cpp_exception_errors = 5, // uncaught C++ exceptions
+    log_system_errors        = 6, // including timeouts, signals, traps
+    log_fatal_errors         = 7, // including unit test macros or
+                                  // fatal system errors
+    log_nothing              = 8
+};
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#endif // BOOST_TEST_LOG_LEVEL_HPP_011605GER
diff --git a/vendor/pdalboost/boost/test/detail/pp_variadic.hpp b/vendor/pdalboost/boost/test/detail/pp_variadic.hpp
new file mode 100644
index 0000000..a443744
--- /dev/null
+++ b/vendor/pdalboost/boost/test/detail/pp_variadic.hpp
@@ -0,0 +1,49 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief few helpers for working with variadic macros
+// ***************************************************************************
+
+#ifndef BOOST_TEST_PP_VARIADIC_HPP_021515GER
+#define BOOST_TEST_PP_VARIADIC_HPP_021515GER
+
+// Boost
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/variadic/size.hpp>
+
+//____________________________________________________________________________//
+
+#if BOOST_PP_VARIADICS
+
+#if BOOST_PP_VARIADICS_MSVC
+#  define BOOST_TEST_INVOKE_VARIADIC( tool, ... ) BOOST_PP_CAT( tool (__VA_ARGS__), )
+#else
+#  define BOOST_TEST_INVOKE_VARIADIC( tool, ... ) tool (__VA_ARGS__)
+#endif
+
+//____________________________________________________________________________//
+
+/// if sizeof(__VA_ARGS__) == N: F1(__VA_ARGS__)
+/// else:                        F2(__VA_ARGS__)
+#define BOOST_TEST_INVOKE_IF_N_ARGS( N, F1, F2, ... )               \
+    BOOST_TEST_INVOKE_VARIADIC(                                     \
+        BOOST_PP_IIF(                                               \
+            BOOST_PP_EQUAL(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), N), \
+            F1,                                                     \
+            F2),                                                    \
+        __VA_ARGS__ )                                               \
+/**/
+
+//____________________________________________________________________________//
+
+#endif  /* BOOST_PP_VARIADICS */
+
+#endif // BOOST_TEST_PP_VARIADIC_HPP_021515GER
+
+// EOF
diff --git a/vendor/pdalboost/boost/test/detail/suppress_warnings.hpp b/vendor/pdalboost/boost/test/detail/suppress_warnings.hpp
new file mode 100644
index 0000000..4badf20
--- /dev/null
+++ b/vendor/pdalboost/boost/test/detail/suppress_warnings.hpp
@@ -0,0 +1,38 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief suppress some warnings
+// ***************************************************************************
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable: 4511) // copy constructor can't not be generated
+# pragma warning(disable: 4512) // assignment operator can't not be generated
+# pragma warning(disable: 4100) // unreferenced formal parameter
+# pragma warning(disable: 4996) // <symbol> was declared deprecated
+# pragma warning(disable: 4355) // 'this' : used in base member initializer list
+# pragma warning(disable: 4706) // assignment within conditional expression
+# pragma warning(disable: 4251) // class 'A<T>' needs to have dll-interface to be used by clients of class 'B'
+# pragma warning(disable: 4127) // conditional expression is constant
+# pragma warning(disable: 4290) // C++ exception specification ignored except to ...
+# pragma warning(disable: 4180) // qualifier applied to function type has no meaning; ignored
+# pragma warning(disable: 4275) // non dll-interface class ... used as base for dll-interface class ...
+# pragma warning(disable: 4267) // 'var' : conversion from 'size_t' to 'type', possible loss of data
+# pragma warning(disable: 4511) // 'class' : copy constructor could not be generated
+#endif
+
+#if BOOST_CLANG
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wvariadic-macros"
+#endif
+
+#if defined(BOOST_GCC) && (BOOST_GCC >= 4 * 10000 + 6 * 100)
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wvariadic-macros"
+#endif
+
diff --git a/vendor/pdalboost/boost/test/detail/throw_exception.hpp b/vendor/pdalboost/boost/test/detail/throw_exception.hpp
new file mode 100644
index 0000000..8b9ac92
--- /dev/null
+++ b/vendor/pdalboost/boost/test/detail/throw_exception.hpp
@@ -0,0 +1,72 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief contains wrappers, which allows to build Boost.Test with no exception
+// ***************************************************************************
+
+#ifndef BOOST_TEST_DETAIL_THROW_EXCEPTION_HPP
+#define BOOST_TEST_DETAIL_THROW_EXCEPTION_HPP
+
+// Boost
+#include <boost/config.hpp> // BOOST_NO_EXCEPTION
+
+#ifdef BOOST_NO_EXCEPTION
+// C RUNTIME
+#include <stdlib.h>
+
+#endif
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace ut_detail {
+
+#ifdef BOOST_NO_EXCEPTIONS
+
+template<typename E>
+BOOST_NORETURN inline void
+throw_exception(E const& e) { abort(); }
+
+#define BOOST_TEST_I_TRY
+#define BOOST_TEST_I_CATCH( T, var ) for(T const& var = *(T*)0; false;)
+#define BOOST_TEST_I_CATCH0( T ) if(0)
+#define BOOST_TEST_I_CATCHALL() if(0)
+#define BOOST_TEST_I_RETHROW
+
+#else
+
+template<typename E>
+BOOST_NORETURN inline void
+throw_exception(E const& e) { throw e; }
+
+#define BOOST_TEST_I_TRY try
+#define BOOST_TEST_I_CATCH( T, var ) catch( T const& var )
+#define BOOST_TEST_I_CATCH0( T ) catch( T const& )
+#define BOOST_TEST_I_CATCHALL() catch(...)
+#define BOOST_TEST_I_RETHROW throw
+#endif
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_I_THROW( E ) unit_test::ut_detail::throw_exception( E )
+#define BOOST_TEST_I_THROW( E ) unit_test::ut_detail::throw_exception( E )
+#define BOOST_TEST_I_ASSRT( cond, ex ) if( cond ) {} else BOOST_TEST_I_THROW( ex )
+
+
+} // namespace ut_detail
+} // namespace unit_test
+} // namespace pdalboost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_DETAIL_THROW_EXCEPTION_HPP
diff --git a/vendor/pdalboost/boost/test/detail/workaround.hpp b/vendor/pdalboost/boost/test/detail/workaround.hpp
new file mode 100644
index 0000000..983ced0
--- /dev/null
+++ b/vendor/pdalboost/boost/test/detail/workaround.hpp
@@ -0,0 +1,56 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief contains mics. workarounds
+// ***************************************************************************
+
+#ifndef BOOST_TEST_WORKAROUND_HPP_021005GER
+#define BOOST_TEST_WORKAROUND_HPP_021005GER
+
+// Boost
+#include <boost/config.hpp> // compilers workarounds and std::ptrdiff_t
+
+// STL
+#include <iterator>     // for std::distance
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace ut_detail {
+
+#ifdef BOOST_NO_STD_DISTANCE
+template <class T>
+std::ptrdiff_t distance( T const& x_, T const& y_ )
+{
+    std::ptrdiff_t res = 0;
+
+    std::distance( x_, y_, res );
+
+    return res;
+}
+
+//____________________________________________________________________________//
+
+#else
+using std::distance;
+#endif
+
+template <class T> inline void ignore_unused_variable_warning(const T&) {}
+
+} // namespace ut_detail
+} // namespace unit_test
+} // namespace pdalboost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_WORKAROUND_HPP_021005GER
diff --git a/vendor/pdalboost/boost/test/execution_monitor.hpp b/vendor/pdalboost/boost/test/execution_monitor.hpp
new file mode 100644
index 0000000..3a4e08f
--- /dev/null
+++ b/vendor/pdalboost/boost/test/execution_monitor.hpp
@@ -0,0 +1,518 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  (C) Copyright Beman Dawes 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief Defines public interface of the Execution Monitor and related classes
+// ***************************************************************************
+
+#ifndef BOOST_TEST_EXECUTION_MONITOR_HPP_071894GER
+#define BOOST_TEST_EXECUTION_MONITOR_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+#include <boost/test/detail/throw_exception.hpp>
+
+#include <boost/test/utils/class_properties.hpp>
+
+// Boost
+#include <boost/shared_ptr.hpp>
+#include <boost/scoped_array.hpp>
+#include <boost/type.hpp>
+#include <boost/cstdlib.hpp>
+#include <boost/function/function0.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+#ifdef BOOST_SEH_BASED_SIGNAL_HANDLING
+
+// for the FP constants and control routines
+#include <float.h>
+
+#ifndef EM_INVALID
+#define EM_INVALID _EM_INVALID
+#endif
+
+#ifndef EM_DENORMAL
+#define EM_DENORMAL _EM_DENORMAL
+#endif
+
+#ifndef EM_ZERODIVIDE
+#define EM_ZERODIVIDE _EM_ZERODIVIDE
+#endif
+
+#ifndef EM_OVERFLOW
+#define EM_OVERFLOW _EM_OVERFLOW
+#endif
+
+#ifndef EM_UNDERFLOW
+#define EM_UNDERFLOW _EM_UNDERFLOW
+#endif
+
+#ifndef MCW_EM
+#define MCW_EM _MCW_EM
+#endif
+
+#else // based on ISO C standard
+
+#if !defined(BOOST_NO_FENV_H)
+  #include <boost/detail/fenv.hpp>
+#endif
+
+#endif
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+
+/// @defgroup ExecutionMonitor Function Execution Monitor
+/// @{
+/// @section Intro Introduction
+/// Sometimes we need to call a function and make sure that no user or system originated exceptions are being thrown by it. Uniform exception reporting
+/// is also may be convenient. That's the purpose of the Boost.Test's Execution Monitor.
+///
+/// The Execution Monitor is a lower-level component of the Boost Test Library. It is the base for implementing all other Boost.Test components, but also
+/// can be used standalone to get controlled execution of error-prone functions with a uniform error notification. The Execution Monitor calls a user-supplied
+/// function in a controlled environment, relieving users from messy error detection.
+///
+/// The Execution Monitor usage is demonstrated in the example exec_mon_example.
+///
+/// @section DesignRationale Design Rationale
+///
+/// The Execution Monitor design assumes that it can be used when no (or almost no) memory available. Also the Execution Monitor is intended to be portable to as many platforms as possible.
+///
+/// @section UserGuide User's guide
+/// The Execution Monitor is designed to solve the problem of executing potentially dangerous function that may result in any number of error conditions,
+/// in monitored environment that should prevent any undesirable exceptions to propagate out of function call and produce consistent result report for all outcomes.
+/// The Execution Monitor is able to produce informative report for all standard C++ exceptions and intrinsic types. All other exceptions are reported as unknown.
+/// If you prefer different message for your exception type or need to perform any action, the Execution Monitor supports custom exception translators.
+/// There are several other parameters of the monitored environment can be configured by setting appropriate properties of the Execution Monitor.
+///
+/// All symbols in the Execution Monitor implementation are located in the namespace pdalboost. To use the Execution Monitor you need to:
+/// -# include @c boost/test/execution_monitor.hpp
+/// -# Make an instance of execution_monitor.
+/// -# Optionally register custom exception translators for exception classes which require special processing.
+///
+/// @subsection FuncExec Monitored function execution
+///
+/// The class execution_monitor can monitor functions with the following signatures:
+/// - int ()
+/// - void ()
+///
+/// This function is expected to be self sufficient part of your application. You can't pass any arguments to this function directly. Instead you
+/// should bind them into executable nullary function using bind function (either standard or boost variant). Neither you can return any other value,
+/// but an integer result code. If necessary you can bind output parameters by reference or use some other more complicated nullary functor, which
+/// maintains state. This includes class methods, static class methods etc.
+///
+/// To start the monitored function, invoke the method execution_monitor::execute and pass the monitored function as an argument. If the call succeeds,
+/// the method returns the result code produced by the monitored function. If any of the following conditions occur:
+/// - Uncaught C++ exception
+/// - Hardware or software signal, trap, or other exception
+/// - Timeout reached
+/// - Debug assert event occurred (under Microsoft Visual C++ or compatible compiler)
+///
+/// then the method throws the execution_exception. The exception contains unique error_code value identifying the error condition and the detailed message
+/// that can be used to report the error.
+///
+/// @subsection Reporting Errors reporting and translation
+///
+/// If you need to report an error inside monitored function execution you have to throw an exception. Do not use the execution_exception - it's not intended
+/// to be used for this purpose. The simplest choice is to use one of the following C++ types as an exception:
+/// - C string
+/// - std:string
+/// - any exception class in std::exception hierarchy
+/// - pdalboost::exception
+///
+/// execution_monitor will catch and report these types of exceptions. If exception is thrown which is unknown to execution_monitor, it can only
+/// report the fact of the exception. So in case if you prefer to use your own exception types or can't govern what exceptions are generated by monitored
+/// function and would like to see proper error message in a report, execution_monitor can be configured with custom "translator" routine, which will have
+/// a chance to either record the fact of the exception itself or translate it into one of standard exceptions and rethrow (or both). The translator routine
+/// is registered per exception type and is invoked when exception of this class (or one inherited from it) is thrown inside monitored routine. You can
+/// register as many independent translators as you like. See execution_monitor::register_exception_translator specification for requirements on translator
+/// function.
+///
+/// Finally, if you need to abort the monitored function execution without reporting any errors, you can throw an exception execution_aborted. As a result
+/// the execution is aborted and zero result code is produced by the method execution_monitor::execute.
+///
+/// @subsection Parameters Supported parameters
+///
+/// The Execution Monitor behavior is configurable through the set of parameters (properties) associated with the instance of the monitor. See execution_monitor
+/// specification for a list of supported parameters and their semantic.
+
+// ************************************************************************** //
+// **************        detail::translator_holder_base        ************** //
+// ************************************************************************** //
+
+namespace detail {
+
+class translator_holder_base;
+typedef pdalboost::shared_ptr<translator_holder_base> translator_holder_base_ptr;
+
+class BOOST_TEST_DECL translator_holder_base {
+protected:
+    typedef pdalboost::unit_test::const_string const_string;
+public:
+    // Constructor
+    translator_holder_base( translator_holder_base_ptr next, const_string tag )
+    : m_next( next )
+    , m_tag( std::string() + tag )
+    {
+    }
+
+    // Destructor
+    virtual     ~translator_holder_base() {}
+
+    // translator holder interface
+    // invokes the function F inside the try/catch guarding against specific exception
+    virtual int operator()( pdalboost::function<int ()> const& F ) = 0;
+
+    // erases specific translator holder from the chain
+    translator_holder_base_ptr erase( translator_holder_base_ptr this_, const_string tag )
+    {
+        if( m_next )
+            m_next = m_next->erase( m_next, tag );
+
+        return m_tag == tag ? m_next : this_;
+    }
+#ifndef BOOST_NO_RTTI
+    virtual translator_holder_base_ptr erase( translator_holder_base_ptr this_, std::type_info const& ) = 0;
+    template<typename ExceptionType>
+    translator_holder_base_ptr erase( translator_holder_base_ptr this_, pdalboost::type<ExceptionType>* = 0 )
+    {
+        if( m_next )
+            m_next = m_next->erase<ExceptionType>( m_next );
+
+        return erase( this_, typeid(ExceptionType) );
+    }
+#endif
+
+protected:
+    // Data members
+    translator_holder_base_ptr  m_next;
+    std::string                 m_tag;
+};
+
+} // namespace detail
+
+// ************************************************************************** //
+/// @class execution_exception
+/// @brief This class is used to report any kind of an failure during execution of a monitored function inside of execution_monitor
+///
+/// The instance of this class is thrown out of execution_monitor::execute invocation when failure is detected. Regardless of a kind of failure occurred
+/// the instance will provide a uniform way to catch and report it.
+///
+/// One important design rationale for this class is that we should be ready to work after fatal memory corruptions or out of memory conditions. To facilitate
+/// this class never allocates any memory and assumes that strings it refers to are either some constants or live in a some kind of persistent (preallocated) memory.
+// ************************************************************************** //
+
+class BOOST_TEST_DECL execution_exception {
+    typedef pdalboost::unit_test::const_string const_string;
+public:
+    /// These values are sometimes used as program return codes.
+    /// The particular values have been chosen to avoid conflicts with
+    /// commonly used program return codes: values < 100 are often user
+    /// assigned, values > 255 are sometimes used to report system errors.
+    /// Gaps in values allow for orderly expansion.
+    ///
+    /// @note(1) Only uncaught C++ exceptions are treated as errors.
+    /// If a function catches a C++ exception, it never reaches
+    /// the execution_monitor.
+    ///
+    /// The implementation decides what is a system_fatal_error and what is
+    /// just a system_exception. Fatal errors are so likely to have corrupted
+    /// machine state (like a stack overflow or addressing exception) that it
+    /// is unreasonable to continue execution.
+    ///
+    /// @note(2) These errors include Unix signals and Windows structured
+    /// exceptions. They are often initiated by hardware traps.
+    enum error_code {
+        no_error               = 0,   ///< for completeness only; never returned
+        user_error             = 200, ///< user reported non-fatal error
+        cpp_exception_error    = 205, ///< see note (1) above
+        system_error           = 210, ///< see note (2) above
+        timeout_error          = 215, ///< only detectable on certain platforms
+        user_fatal_error       = 220, ///< user reported fatal error
+        system_fatal_error     = 225  ///< see note (2) above
+    };
+
+    /// Simple model for the location of failure in a source code
+    struct BOOST_TEST_DECL location {
+        explicit    location( char const* file_name = 0, size_t line_num = 0, char const* func = 0 );
+
+        const_string    m_file_name;    ///< File name
+        size_t          m_line_num;     ///< Line number
+        const_string    m_function;     ///< Function name
+    };
+
+    /// @name Constructors
+
+    /// Constructs instance based on message, location and error code
+
+    /// @param[in] ec           error code
+    /// @param[in] what_msg     error message
+    /// @param[in] location     error location
+    execution_exception( error_code ec, const_string what_msg, location const& location );
+
+    /// @name Access methods
+
+    /// Exception error code
+    error_code      code() const    { return m_error_code; }
+    /// Exception message
+    const_string    what() const    { return m_what; }
+    /// Exception location
+    location const& where() const   { return m_location; }
+    ///@}
+
+private:
+    // Data members
+    error_code      m_error_code;
+    const_string    m_what;
+    location        m_location;
+}; // execution_exception
+
+// ************************************************************************** //
+/// Function execution monitor
+
+/// This class is used to uniformly detect and report an occurrence of several types of signals and exceptions, reducing various
+/// errors to a uniform execution_exception that is returned to a caller.
+///
+/// The executiom_monitor behavior can be customized through a set of public parameters (properties) associated with the execution_monitor instance.
+/// All parameters are implemented as public unit_test::readwrite_property data members of the class execution_monitor.
+// ************************************************************************** //
+
+class BOOST_TEST_DECL execution_monitor {
+    typedef pdalboost::unit_test::const_string const_string;
+public:
+
+    /// Default constructor initializes all execution monitor properties
+    execution_monitor();
+
+    /// Should monitor catch system errors.
+    ///
+    /// The @em p_catch_system_errors property is a boolean flag (default value is true) specifying whether or not execution_monitor should trap system
+    /// errors/system level exceptions/signals, which would cause program to crash in a regular case (without execution_monitor).
+    /// Set this property to false, for example, if you wish to force coredump file creation. The Unit Test Framework provides a
+    /// runtime parameter @c \-\-catch_system_errors=yes to alter the behavior in monitored test cases.
+    unit_test::readwrite_property<bool> p_catch_system_errors;
+
+    ///  Should monitor try to attach debugger in case of caught system error.
+    ///
+    /// The @em p_auto_start_dbg property is a boolean flag (default value is false) specifying whether or not execution_monitor should try to attach debugger
+    /// in case system error is caught.
+    unit_test::readwrite_property<bool> p_auto_start_dbg;
+
+
+    ///  Specifies the seconds that elapse before a timer_error occurs.
+    ///
+    /// The @em p_timeout property is an integer timeout (in seconds) for monitored function execution. Use this parameter to monitor code with possible deadlocks
+    /// or indefinite loops. This feature is only available for some operating systems (not yet Microsoft Windows).
+    unit_test::readwrite_property<unsigned>  p_timeout;
+
+    ///  Should monitor use alternative stack for the signal catching.
+    ///
+    /// The @em p_use_alt_stack property is a boolean flag (default value is false) specifying whether or not execution_monitor should use an alternative stack
+    /// for the sigaction based signal catching. When enabled the signals are delivered to the execution_monitor on a stack different from current execution
+    /// stack, which is safer in case if it is corrupted by monitored function. For more details on alternative stack handling see appropriate manuals.
+    unit_test::readwrite_property<bool> p_use_alt_stack;
+
+    /// Should monitor try to detect hardware floating point exceptions (!= 0), and which specific exception to catch.
+    ///
+    /// The @em p_detect_fp_exceptions property is a boolean flag (default value is false) specifying whether or not execution_monitor should install hardware
+    /// traps for the floating point exception on platforms where it's supported.
+    unit_test::readwrite_property<unsigned> p_detect_fp_exceptions;
+
+
+    // @name Monitoring entry points
+
+    /// @brief Execution monitor entry point for functions returning integer value
+    ///
+    /// This method executes supplied function F inside a try/catch block and also may include other unspecified platform dependent error detection code.
+    ///
+    /// This method throws an execution_exception on an uncaught C++ exception, a hardware or software signal, trap, or other user exception.
+    ///
+    /// @note execute() doesn't consider it an error for F to return a non-zero value.
+    /// @param[in] F  Function to monitor
+    /// @returns  value returned by function call F().
+    /// @see vexecute
+    int         execute( pdalboost::function<int ()> const& F );
+
+    /// @brief Execution monitor entry point for functions returning void
+    ///
+    /// This method is semantically identical to execution_monitor::execute, but des't produce any result code.
+    /// @param[in] F  Function to monitor
+    /// @see execute
+    void         vexecute( pdalboost::function<void ()> const& F );
+    // @}
+
+    // @name Exception translator registration
+
+    /// @brief Registers custom (user supplied) exception translator
+
+    /// This method template registers a translator for an exception type specified as a first template argument. For example
+    /// @code
+    ///    void myExceptTr( MyException const& ex ) { /*do something with the exception here*/}
+    ///    em.register_exception_translator<MyException>( myExceptTr );
+    /// @endcode
+    /// The translator should be any unary function/functor object which accepts MyException const&. This can be free standing function
+    /// or bound class method. The second argument is an optional string tag you can associate with this translator routine. The only reason
+    /// to specify the tag is if you plan to erase the translator eventually. This can be useful in scenario when you reuse the same
+    /// execution_monitor instance to monitor different routines and need to register a translator specific to the routine being monitored.
+    /// While it is possible to erase the translator based on an exception type it was registered for, tag string provides simpler way of doing this.
+    /// @tparam ExceptionType type of the exception we register a translator for
+    /// @tparam ExceptionTranslator type of the translator we register for this exception
+    /// @param[in] tr         translator function object with the signature <em> void (ExceptionType const&)</em>
+    /// @param[in] tag        tag associated with this translator
+    template<typename ExceptionType, typename ExceptionTranslator>
+    void        register_exception_translator( ExceptionTranslator const& tr, const_string tag = const_string(), pdalboost::type<ExceptionType>* = 0 );
+
+    /// @brief Erases custom exception translator based on a tag
+
+    /// Use the same tag as the one used during translator registration
+    /// @param[in] tag  tag associated with translator you wants to erase
+    void        erase_exception_translator( const_string tag )
+    {
+        m_custom_translators = m_custom_translators->erase( m_custom_translators, tag );
+    }
+#ifndef BOOST_NO_RTTI
+    /// @brief Erases custom exception translator based on an exception type
+    ///
+    /// tparam ExceptionType Exception type for which you want to erase the translator
+    template<typename ExceptionType>
+    void        erase_exception_translator( pdalboost::type<ExceptionType>* = 0 )
+    {
+        m_custom_translators = m_custom_translators->erase<ExceptionType>( m_custom_translators );
+    }
+    //@}
+#endif
+
+private:
+    // implementation helpers
+    int         catch_signals( pdalboost::function<int ()> const& F );
+
+    // Data members
+    detail::translator_holder_base_ptr  m_custom_translators;
+    pdalboost::scoped_array<char>           m_alt_stack;
+}; // execution_monitor
+
+// ************************************************************************** //
+// **************          detail::translator_holder           ************** //
+// ************************************************************************** //
+
+namespace detail {
+
+template<typename ExceptionType, typename ExceptionTranslator>
+class translator_holder : public translator_holder_base
+{
+public:
+    explicit    translator_holder( ExceptionTranslator const& tr, translator_holder_base_ptr& next, const_string tag = const_string() )
+    : translator_holder_base( next, tag ), m_translator( tr ) {}
+
+    // translator holder interface
+    virtual int operator()( pdalboost::function<int ()> const& F )
+    {
+        BOOST_TEST_I_TRY {
+            return m_next ? (*m_next)( F ) : F();
+        }
+        BOOST_TEST_I_CATCH( ExceptionType, e ) {
+            m_translator( e );
+            return pdalboost::exit_exception_failure;
+        }
+    }
+#ifndef BOOST_NO_RTTI
+    virtual translator_holder_base_ptr erase( translator_holder_base_ptr this_, std::type_info const& ti )
+    {
+        return ti == typeid(ExceptionType) ? m_next : this_;
+    }
+#endif
+
+private:
+    // Data members
+    ExceptionTranslator m_translator;
+};
+
+} // namespace detail
+
+template<typename ExceptionType, typename ExceptionTranslator>
+void
+execution_monitor::register_exception_translator( ExceptionTranslator const& tr, const_string tag, pdalboost::type<ExceptionType>* )
+{
+    m_custom_translators.reset(
+        new detail::translator_holder<ExceptionType,ExceptionTranslator>( tr, m_custom_translators, tag ) );
+}
+
+// ************************************************************************** //
+/// @class execution_aborted
+/// @brief This is a trivial default constructible class. Use it to report graceful abortion of a monitored function execution.
+// ************************************************************************** //
+
+struct execution_aborted {};
+
+// ************************************************************************** //
+// **************                  system_error                ************** //
+// ************************************************************************** //
+
+class system_error {
+public:
+    // Constructor
+    explicit    system_error( char const* exp );
+
+    long const          p_errno;
+    char const* const   p_failed_exp;
+};
+
+#define BOOST_TEST_SYS_ASSERT( cond ) BOOST_TEST_I_ASSRT( cond, ::pdalboost::system_error( BOOST_STRINGIZE( exp ) ) )
+
+// ************************************************************************** //
+// **************Floating point exception management interface ************** //
+// ************************************************************************** //
+
+namespace fpe {
+
+enum masks {
+    BOOST_FPE_OFF       = 0,
+
+#ifdef BOOST_SEH_BASED_SIGNAL_HANDLING
+    BOOST_FPE_DIVBYZERO = EM_ZERODIVIDE,
+    BOOST_FPE_INEXACT   = EM_INEXACT,
+    BOOST_FPE_INVALID   = EM_INVALID,
+    BOOST_FPE_OVERFLOW  = EM_OVERFLOW,
+    BOOST_FPE_UNDERFLOW = EM_UNDERFLOW|EM_DENORMAL,
+
+    BOOST_FPE_ALL       = MCW_EM,
+#elif defined(BOOST_NO_FENV_H) || defined(BOOST_CLANG)
+    BOOST_FPE_ALL       = 1,
+#else
+    BOOST_FPE_DIVBYZERO = FE_DIVBYZERO,
+    BOOST_FPE_INEXACT   = FE_INEXACT,
+    BOOST_FPE_INVALID   = FE_INVALID,
+    BOOST_FPE_OVERFLOW  = FE_OVERFLOW,
+    BOOST_FPE_UNDERFLOW = FE_UNDERFLOW,
+
+    BOOST_FPE_ALL       = FE_ALL_EXCEPT,
+#endif
+    BOOST_FPE_INV       = BOOST_FPE_ALL+1
+};
+
+//____________________________________________________________________________//
+
+// return the previous set of enabled exceptions when successful, and BOOST_FPE_INV otherwise
+unsigned BOOST_TEST_DECL enable( unsigned mask );
+unsigned BOOST_TEST_DECL disable( unsigned mask );
+
+//____________________________________________________________________________//
+
+} // namespace fpe
+
+///@}
+
+}  // namespace pdalboost
+
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/test/framework.hpp b/vendor/pdalboost/boost/test/framework.hpp
new file mode 100644
index 0000000..e177919
--- /dev/null
+++ b/vendor/pdalboost/boost/test/framework.hpp
@@ -0,0 +1,275 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief Defines Unit Test Framework mono-state interfaces.
+//! The framework interfaces are based on Monostate design pattern.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_FRAMEWORK_HPP_020805GER
+#define BOOST_TEST_FRAMEWORK_HPP_020805GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+#include <boost/test/detail/throw_exception.hpp>
+
+#include <boost/test/utils/trivial_singleton.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+// STL
+#include <stdexcept>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+
+/// Main namespace for the Unit Test Framework interfaces and implementation
+namespace unit_test {
+
+// ************************************************************************** //
+// **************              init_unit_test_func             ************** //
+// ************************************************************************** //
+
+/// Test module initialization routine signature
+
+/// Different depending on whether BOOST_TEST_ALTERNATIVE_INIT_API is defined or not
+#ifdef BOOST_TEST_ALTERNATIVE_INIT_API
+typedef bool        (*init_unit_test_func)();
+#else
+typedef test_suite* (*init_unit_test_func)( int, char* [] );
+#endif
+
+// ************************************************************************** //
+// **************                   framework                  ************** //
+// ************************************************************************** //
+
+/// Namespace of the Unit Test Framework mono-state
+namespace framework {
+
+/// @name Unit Test Framework initialization and shutdown
+/// @{
+
+/// @brief This function performs initialization of the framework mono-state.
+///
+/// It needs to be called every time before the test is started.
+/// @param[in] init_func test module initialization routine
+/// @param[in] argc command line arguments collection
+/// @param[in] argv command line arguments collection
+BOOST_TEST_DECL void                init( init_unit_test_func init_func, int argc, char* argv[] );
+
+/// This function applies all the decorators and figures out default run status. This argument facilitates an
+/// ability of the test cases to prepare some other test units (primarily used internally for self testing).
+/// @param[in] tu Optional id of the test unit representing root of test tree. If absent, master test suite is used
+BOOST_TEST_DECL void                finalize_setup_phase( test_unit_id tu = INV_TEST_UNIT_ID);
+
+/// This function returns true when testing is in progress (setup is finished).
+BOOST_TEST_DECL bool                test_in_progress();
+
+/// This function shuts down the framework and clears up its mono-state.
+///
+/// It needs to be at the very end of test module execution
+BOOST_TEST_DECL void    shutdown();
+/// @}
+
+/// @name Test unit registration
+/// @{
+
+/// Provides both read and write access to current "leaf" auto test suite during the test unit registration phase.
+///
+/// During auto-registration phase the framework maintain a FIFO queue of test units being registered. New test units become children
+/// of the current "leaf" test suite and if this is test suite it is pushed back into queue and becomes a new leaf.
+/// When test suite registration is completed, a test suite is popped from the back of the queue. Only automatically registered test suites
+/// should be added to this queue. Master test suite is always a zero element in this queue, so if no other test suites are registered
+/// all test cases are added to master test suite.
+
+/// This function facilitates all three possible actions:
+///    - if no argument are provided it returns the current queue leaf test suite
+///    - if test suite is provided and no second argument are set, test suite is added to the queue
+///    - if no test suite are provided and last argument is false, the semantic of this function is similar to queue pop: last element is popped from the queue
+/// @param[in] ts test suite to push back to the queue
+/// @param[in] push_or_pop should we push ts to the queue or pop leaf test suite instead
+/// @returns a reference to the currently active/"leaf" test suite
+BOOST_TEST_DECL test_suite&         current_auto_test_suite( test_suite* ts = 0, bool push_or_pop = true );
+
+/// This function add new test case into the global collection of test units the framework aware of.
+
+/// This function also assignes unique test unit id for every test case. Later on one can use this id to locate
+/// the test case if necessary. This is the way for the framework to maintain weak references between test units.
+/// @param[in]  tc  test case to register
+BOOST_TEST_DECL void                register_test_unit( test_case* tc );
+
+/// This function add new test suite into the global collection of test units the framework aware of.
+
+/// This function also assignes unique test unit id for every test suite. Later on one can use this id to locate
+/// the test case if necessary. This is the way for the framework to maintain weak references between test units.
+/// @param[in]  ts  test suite to register
+BOOST_TEST_DECL void                register_test_unit( test_suite* ts );
+
+/// This function removes the test unit from the collection of known test units and destroys the test unit object.
+
+/// This function also assigns unique test unit id for every test case. Later on one can use this id to located
+/// the test case if necessary. This is the way for the framework to maintain weak references between test units.
+/// @param[in]  tu  test unit to deregister
+BOOST_TEST_DECL void                deregister_test_unit( test_unit* tu );
+
+// This function clears up the framework mono-state.
+
+/// After this call the framework can be reinitialized to perform a second test run during the same program lifetime.
+BOOST_TEST_DECL void                clear();
+/// @}
+
+/// @name Test observer registration
+/// @{
+/// Adds new test execution observer object into the framework's list of test observers.
+
+/// Observer lifetime should exceed the the testing execution timeframe
+/// @param[in]  to  test observer object to add
+BOOST_TEST_DECL void                register_observer( test_observer& to );
+
+/// Excldes the observer object form the framework's list of test observers
+/// @param[in]  to  test observer object to exclude
+BOOST_TEST_DECL void                deregister_observer( test_observer& to );
+
+/// @}
+
+/// @name Assertion/uncaught exception context support
+/// @{
+/// Context accessor
+struct BOOST_TEST_DECL context_generator {
+    context_generator() : m_curr_frame( 0 ) {}
+
+    /// Is there any context?
+    bool            is_empty() const;
+
+    /// Give me next frame; empty - last frame
+    const_string    next() const;
+
+private:
+    // Data members
+    mutable unsigned m_curr_frame;
+};
+
+/// Records context frame message.
+
+/// Some context frames are sticky - they can only explicitly cleared by specifying context id. Other (non sticky) context frames cleared after every assertion.
+/// @param[in] context_descr context frame message
+/// @param[in] sticky is this sticky frame or not
+/// @returns id of the newly created frame
+BOOST_TEST_DECL int                 add_context( lazy_ostream const& context_descr, bool sticky );
+/// Erases context frame (when test exits context scope)
+
+/// If context_id is passed clears that specific context frame identified by this id, otherwise clears all non sticky contexts.
+BOOST_TEST_DECL void                clear_context( int context_id = -1 );
+/// Produces an instance of small "delegate" object, which facilitates access to collected context.
+BOOST_TEST_DECL context_generator   get_context();
+/// @}
+
+/// @name Access to registered test units.
+/// @{
+/// This function provides access to the master test suite.
+
+/// There is only only master test suite per test module.
+/// @returns a reference the master test suite instance
+BOOST_TEST_DECL master_test_suite_t& master_test_suite();
+
+/// This function provides an access to the test case currently being executed.
+
+/// This function is only valid during test execution phase.
+/// @see current_test_case_id
+BOOST_TEST_DECL test_case const&    current_test_case();
+
+/// This function provides an access to an id of the test case currently being executed.
+
+/// This function safer than current_test_case, cause if wont throw if no test case is being executed.
+/// @see current_test_case
+BOOST_TEST_DECL test_unit_id        current_test_case_id(); /* safe version of above */
+
+/// This function provides access to a test unit by id and type combination. It will throw if no test unit located.
+/// @param[in]  tu_id    id of a test unit to locate
+/// @param[in]  tu_type  type of a test unit to locate
+/// @returns located test unit
+BOOST_TEST_DECL test_unit&          get( test_unit_id tu_id, test_unit_type tu_type );
+
+/// This function template provides access to a typed test unit by id
+
+/// It will throw if you specify incorrect test unit type
+/// @tparam UnitType compile time type of test unit to get (test_suite or test_case)
+/// @param  id id of test unit to get
+template<typename UnitType>
+inline UnitType&                    get( test_unit_id id )
+{
+    return static_cast<UnitType&>( get( id, static_cast<test_unit_type>(UnitType::type) ) );
+}
+///@}
+
+/// @name Test initiation interface
+/// @{
+
+/// Initiates test execution
+
+/// This function is used to start the test execution from a specific "root" test unit.
+/// If no root provided, test is started from master test suite. This second argument facilitates an ability of the test cases to
+/// start some other test units (primarily used internally for self testing).
+/// @param[in] tu Optional id of the test unit or test unit itself from which the test is started. If absent, master test suite is used
+/// @param[in] continue_test true == continue test if it was already started, false == restart the test from scratch regardless
+BOOST_TEST_DECL void                run( test_unit_id tu = INV_TEST_UNIT_ID, bool continue_test = true );
+/// Initiates test execution. Same as other overload
+BOOST_TEST_DECL void                run( test_unit const* tu, bool continue_test = true );
+/// @}
+
+/// @name Test events dispatchers
+/// @{
+/// Reports results of assertion to all test observers
+BOOST_TEST_DECL void                assertion_result( unit_test::assertion_result ar );
+/// Reports uncaught exception to all test observers
+BOOST_TEST_DECL void                exception_caught( execution_exception const& );
+/// Reports aborted test unit to all test observers
+BOOST_TEST_DECL void                test_unit_aborted( test_unit const& );
+/// @}
+
+namespace impl {
+// exclusively for self test
+BOOST_TEST_DECL void                setup_for_execution( test_unit const& );
+} // namespace impl
+
+// ************************************************************************** //
+// **************                framework errors              ************** //
+// ************************************************************************** //
+
+/// This exception type is used to report internal Boost.Test framework errors.
+struct BOOST_TEST_DECL internal_error : public std::runtime_error {
+    internal_error( const_string m ) : std::runtime_error( std::string( m.begin(), m.size() ) ) {}
+};
+
+//____________________________________________________________________________//
+
+/// This exception type is used to report test module setup errors.
+struct BOOST_TEST_DECL setup_error : public std::runtime_error {
+    setup_error( const_string m ) : std::runtime_error( std::string( m.begin(), m.size() ) ) {}
+};
+
+#define BOOST_TEST_SETUP_ASSERT( cond, msg ) BOOST_TEST_I_ASSRT( cond, unit_test::framework::setup_error( msg ) )
+
+//____________________________________________________________________________//
+
+struct nothing_to_test {
+    explicit    nothing_to_test( int rc ) : m_result_code( rc ) {}
+
+    int         m_result_code;
+};
+
+//____________________________________________________________________________//
+
+} // namespace framework
+} // unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_FRAMEWORK_HPP_020805GER
diff --git a/vendor/pdalboost/boost/test/impl/compiler_log_formatter.ipp b/vendor/pdalboost/boost/test/impl/compiler_log_formatter.ipp
new file mode 100644
index 0000000..b80c5ce
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/compiler_log_formatter.ipp
@@ -0,0 +1,290 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : implements compiler like Log formatter
+// ***************************************************************************
+
+#ifndef BOOST_TEST_COMPILER_LOG_FORMATTER_IPP_020105GER
+#define BOOST_TEST_COMPILER_LOG_FORMATTER_IPP_020105GER
+
+// Boost.Test
+#include <boost/test/output/compiler_log_formatter.hpp>
+
+#include <boost/test/framework.hpp>
+#include <boost/test/execution_monitor.hpp>
+#include <boost/test/unit_test_parameters.hpp>
+
+#include <boost/test/tree/test_unit.hpp>
+
+#include <boost/test/utils/basic_cstring/io.hpp>
+#include <boost/test/utils/lazy_ostream.hpp>
+#include <boost/test/utils/setcolor.hpp>
+
+
+// Boost
+#include <boost/version.hpp>
+
+// STL
+#include <iostream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace output {
+
+// ************************************************************************** //
+// **************            compiler_log_formatter            ************** //
+// ************************************************************************** //
+
+namespace {
+
+std::string
+test_phase_identifier()
+{
+    return framework::test_in_progress() ? framework::current_test_case().full_name() : std::string( "Test setup" );
+}
+
+} // local namespace
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_start( std::ostream& output, counter_t test_cases_amount )
+{
+    m_color_output = runtime_config::get<bool>( runtime_config::COLOR_OUTPUT );
+
+    if( test_cases_amount > 0 )
+        output  << "Running " << test_cases_amount << " test "
+                << (test_cases_amount > 1 ? "cases" : "case") << "...\n";
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_finish( std::ostream& ostr )
+{
+    ostr.flush();
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_build_info( std::ostream& output )
+{
+    output  << "Platform: " << BOOST_PLATFORM            << '\n'
+            << "Compiler: " << BOOST_COMPILER            << '\n'
+            << "STL     : " << BOOST_STDLIB              << '\n'
+            << "Boost   : " << BOOST_VERSION/100000      << "."
+                            << BOOST_VERSION/100 % 1000  << "."
+                            << BOOST_VERSION % 100       << std::endl;
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::test_unit_start( std::ostream& output, test_unit const& tu )
+{
+    BOOST_TEST_SCOPE_SETCOLOR( m_color_output, output, term_attr::BRIGHT, term_color::BLUE );
+
+    print_prefix( output, tu.p_file_name, tu.p_line_num );
+
+    output << "Entering test " << tu.p_type_name << " \"" << tu.p_name << "\"" << std::endl;
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::test_unit_finish( std::ostream& output, test_unit const& tu, unsigned long elapsed )
+{
+    BOOST_TEST_SCOPE_SETCOLOR( m_color_output, output, term_attr::BRIGHT, term_color::BLUE );
+
+    print_prefix( output, tu.p_file_name, tu.p_line_num );
+
+    output << "Leaving test " << tu.p_type_name << " \"" << tu.p_name << "\"";
+
+    if( elapsed > 0 ) {
+        output << "; testing time: ";
+        if( elapsed % 1000 == 0 )
+            output << elapsed/1000 << "ms";
+        else
+            output << elapsed << "us";
+    }
+
+    output << std::endl;
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::test_unit_skipped( std::ostream& output, test_unit const& tu, const_string reason )
+{
+    BOOST_TEST_SCOPE_SETCOLOR( m_color_output, output, term_attr::BRIGHT, term_color::YELLOW );
+
+    print_prefix( output, tu.p_file_name, tu.p_line_num );
+
+    output  << "Test " << tu.p_type_name << " \"" << tu.full_name() << "\"" << " is skipped because " << reason << std::endl;
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_exception_start( std::ostream& output, log_checkpoint_data const& checkpoint_data, execution_exception const& ex )
+{
+    execution_exception::location const& loc = ex.where();
+
+    print_prefix( output, loc.m_file_name, loc.m_line_num );
+
+    {
+        BOOST_TEST_SCOPE_SETCOLOR( m_color_output, output, term_attr::BLINK, term_color::RED );
+
+        output << "fatal error: in \"" << (loc.m_function.is_empty() ? test_phase_identifier() : loc.m_function ) << "\": "
+               << ex.what();
+    }
+
+    if( !checkpoint_data.m_file_name.is_empty() ) {
+        output << '\n';
+        print_prefix( output, checkpoint_data.m_file_name, checkpoint_data.m_line_num );
+
+        BOOST_TEST_SCOPE_SETCOLOR( m_color_output, output, term_attr::BRIGHT, term_color::CYAN );
+
+        output << "last checkpoint";
+        if( !checkpoint_data.m_message.empty() )
+            output << ": " << checkpoint_data.m_message;
+    }
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_exception_finish( std::ostream& output )
+{
+    output << std::endl;
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_entry_start( std::ostream& output, log_entry_data const& entry_data, log_entry_types let )
+{
+    using namespace utils;
+
+    switch( let ) {
+        case BOOST_UTL_ET_INFO:
+            print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );
+            if( m_color_output )
+                output << setcolor( term_attr::BRIGHT, term_color::GREEN );
+            output << "info: ";
+            break;
+        case BOOST_UTL_ET_MESSAGE:
+            if( m_color_output )
+                output << setcolor( term_attr::BRIGHT, term_color::CYAN );
+            break;
+        case BOOST_UTL_ET_WARNING:
+            print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );
+            if( m_color_output )
+                output << setcolor( term_attr::BRIGHT, term_color::YELLOW );
+            output << "warning: in \"" << test_phase_identifier() << "\": ";
+            break;
+        case BOOST_UTL_ET_ERROR:
+            print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );
+            if( m_color_output )
+                output << setcolor( term_attr::BRIGHT, term_color::RED );
+            output << "error: in \"" << test_phase_identifier() << "\": ";
+            break;
+        case BOOST_UTL_ET_FATAL_ERROR:
+            print_prefix( output, entry_data.m_file_name, entry_data.m_line_num );
+            if( m_color_output )
+                output << setcolor( term_attr::BLINK, term_color::RED );
+            output << "fatal error: in \"" << test_phase_identifier() << "\": ";
+            break;
+    }
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_entry_value( std::ostream& output, const_string value )
+{
+    output << value;
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_entry_value( std::ostream& output, lazy_ostream const& value )
+{
+    output << value;
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_entry_finish( std::ostream& output )
+{
+    if( m_color_output )
+        output << utils::setcolor();
+
+    output << std::endl;
+}
+
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::print_prefix( std::ostream& output, const_string file_name, std::size_t line_num )
+{
+    if( !file_name.empty() ) {
+#ifdef __APPLE_CC__
+        // Xcode-compatible logging format, idea by Richard Dingwall at
+        // <http://richarddingwall.name/2008/06/01/using-the-boost-unit-test-framework-with-xcode-3/>.
+        output << file_name << ':' << line_num << ": ";
+#else
+        output << file_name << '(' << line_num << "): ";
+#endif
+    }
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::entry_context_start( std::ostream& output, log_level l )
+{
+    output << (l == log_successful_tests ? "\nAssertion" : "\nFailure" ) << " occurred in a following context:";
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::entry_context_finish( std::ostream& output )
+{
+    output.flush();
+}
+
+//____________________________________________________________________________//
+
+void
+compiler_log_formatter::log_entry_context( std::ostream& output, const_string context_descr )
+{
+    output << "\n    " << context_descr;
+}
+
+//____________________________________________________________________________//
+
+} // namespace output
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_COMPILER_LOG_FORMATTER_IPP_020105GER
diff --git a/vendor/pdalboost/boost/test/impl/cpp_main.ipp b/vendor/pdalboost/boost/test/impl/cpp_main.ipp
new file mode 100644
index 0000000..7e9e879
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/cpp_main.ipp
@@ -0,0 +1,136 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  (C) Copyright Beman Dawes 1995-2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : main function implementation for Program Executon Monitor
+// ***************************************************************************
+
+#ifndef BOOST_TEST_CPP_MAIN_IPP_012205GER
+#define BOOST_TEST_CPP_MAIN_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/execution_monitor.hpp>
+#include <boost/test/detail/config.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+// Boost
+#include <boost/cstdlib.hpp>    // for exit codes
+#include <boost/config.hpp>     // for workarounds
+
+// STL
+#include <iostream>
+#include <cstdlib>      // std::getenv
+#include <cstring>      // std::strerror
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::getenv; using ::strerror; }
+#endif
+
+namespace {
+
+struct cpp_main_caller {
+    cpp_main_caller( int (*cpp_main_func)( int argc, char* argv[] ), int argc, char** argv )
+    : m_cpp_main_func( cpp_main_func )
+    , m_argc( argc )
+    , m_argv( argv ) {}
+
+    int     operator()() { return (*m_cpp_main_func)( m_argc, m_argv ); }
+
+private:
+    // Data members
+    int     (*m_cpp_main_func)( int argc, char* argv[] );
+    int     m_argc;
+    char**  m_argv;
+};
+
+} // local namespace
+
+// ************************************************************************** //
+// **************             prg_exec_monitor_main            ************** //
+// ************************************************************************** //
+
+namespace pdalboost {
+
+int BOOST_TEST_DECL
+prg_exec_monitor_main( int (*cpp_main)( int argc, char* argv[] ), int argc, char* argv[] )
+{
+    int result = 0;
+
+    BOOST_TEST_I_TRY {
+        pdalboost::unit_test::const_string p( std::getenv( "BOOST_TEST_CATCH_SYSTEM_ERRORS" ) );
+        ::pdalboost::execution_monitor ex_mon;
+
+        ex_mon.p_catch_system_errors.value = p != "no";
+
+        result = ex_mon.execute( cpp_main_caller( cpp_main, argc, argv ) );
+
+        if( result == 0 )
+            result = ::pdalboost::exit_success;
+        else if( result != ::pdalboost::exit_success ) {
+            std::cout << "\n**** error return code: " << result << std::endl;
+            result = ::pdalboost::exit_failure;
+        }
+    }
+    BOOST_TEST_I_CATCH( ::pdalboost::execution_exception, exex ) {
+        std::cout << "\n**** exception(" << exex.code() << "): " << exex.what() << std::endl;
+        result = ::pdalboost::exit_exception_failure;
+    }
+    BOOST_TEST_I_CATCH( ::pdalboost::system_error, ex ) {
+        std::cout << "\n**** failed to initialize execution monitor."
+                  << "\n**** expression at fault: " << ex.p_failed_exp
+                  << "\n**** error(" << ex.p_errno << "): " << std::strerror( ex.p_errno ) << std::endl;
+        result = ::pdalboost::exit_exception_failure;
+    }
+
+    if( result != ::pdalboost::exit_success ) {
+        std::cerr << "******** errors detected; see standard output for details ********" << std::endl;
+    }
+    else {
+        //  Some prefer a confirming message when all is well, while others don't
+        //  like the clutter.  Use an environment variable to avoid command
+        //  line argument modifications; for use in production programs
+        //  that's a no-no in some organizations.
+        ::pdalboost::unit_test::const_string p( std::getenv( "BOOST_PRG_MON_CONFIRM" ) );
+        if( p != "no" ) {
+            std::cerr << std::flush << "no errors detected" << std::endl;
+        }
+    }
+
+    return result;
+}
+
+} // namespace pdalboost
+
+#if !defined(BOOST_TEST_DYN_LINK) && !defined(BOOST_TEST_NO_MAIN)
+
+// ************************************************************************** //
+// **************        main function for tests using lib     ************** //
+// ************************************************************************** //
+
+int cpp_main( int argc, char* argv[] );  // prototype for user's cpp_main()
+
+int BOOST_TEST_CALL_DECL
+main( int argc, char* argv[] )
+{
+    return ::pdalboost::prg_exec_monitor_main( &cpp_main, argc, argv );
+}
+
+//____________________________________________________________________________//
+
+#endif // !BOOST_TEST_DYN_LINK && !BOOST_TEST_NO_MAIN
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_CPP_MAIN_IPP_012205GER
diff --git a/vendor/pdalboost/boost/test/impl/debug.ipp b/vendor/pdalboost/boost/test/impl/debug.ipp
new file mode 100644
index 0000000..46460c6
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/debug.ipp
@@ -0,0 +1,977 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Use, modification, and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : debug interfaces implementation
+// ***************************************************************************
+
+#ifndef BOOST_TEST_DEBUG_API_IPP_112006GER
+#define BOOST_TEST_DEBUG_API_IPP_112006GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/detail/workaround.hpp>
+#include <boost/test/detail/global_typedef.hpp>
+
+#include <boost/test/debug.hpp>
+#include <boost/test/debug_config.hpp>
+
+// Implementation on Windows
+#if defined(_WIN32) && !defined(UNDER_CE) && !defined(BOOST_DISABLE_WIN32) // ******* WIN32
+
+#  define BOOST_WIN32_BASED_DEBUG
+
+// SYSTEM API
+#  include <windows.h>
+#  include <winreg.h>
+#  include <cstdio>
+#  include <cstring>
+
+#  if !defined(NDEBUG) && defined(_MSC_VER)
+#    define BOOST_MS_CRT_BASED_DEBUG
+#    include <crtdbg.h>
+#  endif
+
+
+#  ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::memset; using ::sprintf; }
+#  endif
+
+#elif defined(unix) || defined(__unix) // ********************* UNIX
+
+#  define BOOST_UNIX_BASED_DEBUG
+
+// Boost.Test
+#include <boost/test/utils/class_properties.hpp>
+#include <boost/test/utils/algorithm.hpp>
+
+// STL
+#include <cstring>  // std::memcpy
+#include <map>
+#include <cstdio>
+#include <stdarg.h> // !! ?? cstdarg
+
+// SYSTEM API
+#  include <unistd.h>
+#  include <signal.h>
+#  include <fcntl.h>
+
+#  include <sys/types.h>
+#  include <sys/stat.h>
+#  include <sys/wait.h>
+#  include <sys/time.h>
+#  include <stdio.h>
+#  include <stdlib.h>
+
+#  if defined(sun) || defined(__sun)
+
+#    define BOOST_SUN_BASED_DEBUG
+
+#    ifndef BOOST_TEST_DBG_LIST
+#      define BOOST_TEST_DBG_LIST dbx;gdb
+#    endif
+
+#    define BOOST_TEST_CNL_DBG  dbx
+#    define BOOST_TEST_GUI_DBG  dbx-ddd
+
+#    include <procfs.h>
+
+#  elif defined(linux) || defined(__linux)
+
+#    define BOOST_LINUX_BASED_DEBUG
+
+#    include <sys/ptrace.h>
+
+#    ifndef BOOST_TEST_STAT_LINE_MAX
+#      define BOOST_TEST_STAT_LINE_MAX 500
+#    endif
+
+#    ifndef BOOST_TEST_DBG_LIST
+#      define BOOST_TEST_DBG_LIST gdb
+#    endif
+
+#    define BOOST_TEST_CNL_DBG  gdb
+#    define BOOST_TEST_GUI_DBG  gdb-xterm
+
+#  endif
+
+#endif
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace debug {
+
+using unit_test::const_string;
+
+// ************************************************************************** //
+// **************                debug::info_t                 ************** //
+// ************************************************************************** //
+
+namespace {
+
+#if defined(BOOST_WIN32_BASED_DEBUG) // *********************** WIN32
+
+template<typename T>
+inline void
+dyn_symbol( T& res, char const* module_name, char const* symbol_name )
+{
+    HMODULE m = ::GetModuleHandleA( module_name );
+
+    if( !m )
+        m = ::LoadLibraryA( module_name );
+
+    res = reinterpret_cast<T>( ::GetProcAddress( m, symbol_name ) );
+}
+
+//____________________________________________________________________________//
+
+static struct info_t {
+    typedef BOOL (WINAPI* IsDebuggerPresentT)();
+    typedef LONG (WINAPI* RegQueryValueExT)( HKEY, char const* /*LPTSTR*/, LPDWORD, LPDWORD, LPBYTE, LPDWORD );
+    typedef LONG (WINAPI* RegOpenKeyT)( HKEY, char const* /*LPCTSTR*/, PHKEY );
+    typedef LONG (WINAPI* RegCloseKeyT)( HKEY );
+
+    info_t();
+
+    IsDebuggerPresentT  m_is_debugger_present;
+    RegOpenKeyT         m_reg_open_key;
+    RegQueryValueExT    m_reg_query_value;
+    RegCloseKeyT        m_reg_close_key;
+
+} s_info;
+
+//____________________________________________________________________________//
+
+info_t::info_t()
+{
+    dyn_symbol( m_is_debugger_present, "kernel32", "IsDebuggerPresent" );
+    dyn_symbol( m_reg_open_key, "advapi32", "RegOpenKeyA" );
+    dyn_symbol( m_reg_query_value, "advapi32", "RegQueryValueExA" );
+    dyn_symbol( m_reg_close_key, "advapi32", "RegCloseKey" );
+}
+
+//____________________________________________________________________________//
+
+#elif defined(BOOST_UNIX_BASED_DEBUG)
+
+// ************************************************************************** //
+// **************                   fd_holder                  ************** //
+// ************************************************************************** //
+
+struct fd_holder {
+    explicit fd_holder( int fd ) : m_fd( fd ) {}
+    ~fd_holder()
+    {
+        if( m_fd != -1 )
+            ::close( m_fd );
+    }
+
+    operator int() { return m_fd; }
+
+private:
+    // Data members
+    int m_fd;
+};
+
+
+// ************************************************************************** //
+// **************                 process_info                 ************** //
+// ************************************************************************** //
+
+struct process_info {
+    // Constructor
+    explicit        process_info( int pid );
+
+    // access methods
+    int             parent_pid() const  { return m_parent_pid; }
+    const_string    binary_name() const { return m_binary_name; }
+    const_string    binary_path() const { return m_binary_path; }
+
+private:
+    // Data members
+    int             m_parent_pid;
+    const_string    m_binary_name;
+    const_string    m_binary_path;
+
+#if defined(BOOST_SUN_BASED_DEBUG)
+    struct psinfo   m_psi;
+    char            m_binary_path_buff[500+1]; // !! ??
+#elif defined(BOOST_LINUX_BASED_DEBUG)
+    char            m_stat_line[BOOST_TEST_STAT_LINE_MAX+1];
+    char            m_binary_path_buff[500+1]; // !! ??
+#endif
+};
+
+//____________________________________________________________________________//
+
+process_info::process_info( int pid )
+: m_parent_pid( 0 )
+{
+#if defined(BOOST_SUN_BASED_DEBUG)
+    char fname_buff[30];
+
+    ::snprintf( fname_buff, sizeof(fname_buff), "/proc/%d/psinfo", pid );
+
+    fd_holder psinfo_fd( ::open( fname_buff, O_RDONLY ) );
+
+    if( psinfo_fd == -1 )
+        return;
+
+    if( ::read( psinfo_fd, &m_psi, sizeof(m_psi) ) == -1 )
+        return;
+
+    m_parent_pid = m_psi.pr_ppid;
+
+    m_binary_name.assign( m_psi.pr_fname );
+
+    //-------------------------- //
+
+    ::snprintf( fname_buff, sizeof(fname_buff), "/proc/%d/as", pid );
+
+    fd_holder as_fd( ::open( fname_buff, O_RDONLY ) );
+    uintptr_t   binary_name_pos;
+
+    // !! ?? could we avoid reading whole m_binary_path_buff?
+    if( as_fd == -1 ||
+        ::lseek( as_fd, m_psi.pr_argv, SEEK_SET ) == -1 ||
+        ::read ( as_fd, &binary_name_pos, sizeof(binary_name_pos) ) == -1 ||
+        ::lseek( as_fd, binary_name_pos, SEEK_SET ) == -1 ||
+        ::read ( as_fd, m_binary_path_buff, sizeof(m_binary_path_buff) ) == -1 )
+        return;
+
+    m_binary_path.assign( m_binary_path_buff );
+
+#elif defined(BOOST_LINUX_BASED_DEBUG)
+    char fname_buff[30];
+
+    ::snprintf( fname_buff, sizeof(fname_buff), "/proc/%d/stat", pid );
+
+    fd_holder psinfo_fd( ::open( fname_buff, O_RDONLY ) );
+
+    if( psinfo_fd == -1 )
+        return;
+
+    ssize_t num_read = ::read( psinfo_fd, m_stat_line, sizeof(m_stat_line)-1 );
+    if( num_read == -1 )
+        return;
+
+    m_stat_line[num_read] = 0;
+
+    char const* name_beg = m_stat_line;
+    while( *name_beg && *name_beg != '(' )
+        ++name_beg;
+
+    char const* name_end = name_beg+1;
+    while( *name_end && *name_end != ')' )
+        ++name_end;
+
+    std::sscanf( name_end+1, "%*s%d", &m_parent_pid );
+
+    m_binary_name.assign( name_beg+1, name_end );
+
+    ::snprintf( fname_buff, sizeof(fname_buff), "/proc/%d/exe", pid );
+    num_read = ::readlink( fname_buff, m_binary_path_buff, sizeof(m_binary_path_buff)-1 );
+
+    if( num_read == -1 )
+        return;
+
+    m_binary_path_buff[num_read] = 0;
+    m_binary_path.assign( m_binary_path_buff, num_read );
+#endif
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************             prepare_window_title             ************** //
+// ************************************************************************** //
+
+static char*
+prepare_window_title( dbg_startup_info const& dsi )
+{
+    typedef unit_test::const_string str_t;
+
+    static char title_str[50];
+
+    str_t path_sep( "\\/" );
+
+    str_t::iterator  it = unit_test::utils::find_last_of( dsi.binary_path.begin(), dsi.binary_path.end(),
+                                                          path_sep.begin(), path_sep.end() );
+
+    if( it == dsi.binary_path.end() )
+        it = dsi.binary_path.begin();
+    else
+        ++it;
+
+    ::snprintf( title_str, sizeof(title_str), "%*s %ld", (int)(dsi.binary_path.end()-it), it, dsi.pid );
+
+    return title_str;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                  save_execlp                 ************** //
+// ************************************************************************** //
+
+typedef unit_test::basic_cstring<char> mbuffer;
+
+inline char*
+copy_arg( mbuffer& dest, const_string arg )
+{
+    if( dest.size() < arg.size()+1 )
+        return 0;
+
+    char* res = dest.begin();
+
+    std::memcpy( res, arg.begin(), arg.size()+1 );
+
+    dest.trim_left( arg.size()+1 );
+
+    return res;
+}
+
+//____________________________________________________________________________//
+
+bool
+safe_execlp( char const* file, ... )
+{
+    static char* argv_buff[200];
+
+    va_list     args;
+    char const* arg;
+
+    // first calculate actual number of arguments
+    int         num_args = 2; // file name and 0 at least
+
+    va_start( args, file );
+    while( !!(arg = va_arg( args, char const* )) )
+        num_args++;
+    va_end( args );
+
+    // reserve space for the argument pointers array
+    char**      argv_it  = argv_buff;
+    mbuffer     work_buff( reinterpret_cast<char*>(argv_buff), sizeof(argv_buff) );
+    work_buff.trim_left( num_args * sizeof(char*) );
+
+    // copy all the argument values into local storage
+    if( !(*argv_it++ = copy_arg( work_buff, file )) )
+        return false;
+
+    printf( "!! %s\n", file );
+
+    va_start( args, file );
+    while( !!(arg = va_arg( args, char const* )) ) {
+        printf( "!! %s\n", arg );
+        if( !(*argv_it++ = copy_arg( work_buff, arg )) ) {
+            va_end( args );
+            return false;
+        }
+    }
+    va_end( args );
+
+    *argv_it = 0;
+
+    return ::execvp( file, argv_buff ) != -1;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************            start_debugger_in_emacs           ************** //
+// ************************************************************************** //
+
+static void
+start_debugger_in_emacs( dbg_startup_info const& dsi, char const* emacs_name, char const* dbg_command )
+{
+    char const* title = prepare_window_title( dsi );
+
+    if( !title )
+        return;
+
+    dsi.display.is_empty()
+        ? safe_execlp( emacs_name, "-title", title, "--eval", dbg_command, 0 )
+        : safe_execlp( emacs_name, "-title", title, "-display", dsi.display.begin(), "--eval", dbg_command, 0 );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                 gdb starters                 ************** //
+// ************************************************************************** //
+
+static char const*
+prepare_gdb_cmnd_file( dbg_startup_info const& dsi )
+{
+    // prepare pid value
+    char pid_buff[16];
+    ::snprintf( pid_buff, sizeof(pid_buff), "%ld", dsi.pid );
+    unit_test::const_string pid_str( pid_buff );
+
+    static char cmd_file_name[] = "/tmp/btl_gdb_cmd_XXXXXX"; // !! ??
+
+    // prepare commands
+    fd_holder cmd_fd( ::mkstemp( cmd_file_name ) );
+
+    if( cmd_fd == -1 )
+        return 0;
+
+#define WRITE_STR( str )  if( ::write( cmd_fd, str.begin(), str.size() ) == -1 ) return 0;
+#define WRITE_CSTR( str ) if( ::write( cmd_fd, str, sizeof( str )-1 ) == -1 ) return 0;
+
+    WRITE_CSTR( "file " );
+    WRITE_STR( dsi.binary_path );
+    WRITE_CSTR( "\nattach " );
+    WRITE_STR( pid_str );
+    WRITE_CSTR( "\nshell unlink " );
+    WRITE_STR( dsi.init_done_lock );
+    WRITE_CSTR( "\ncont" );
+    if( dsi.break_or_continue )
+        WRITE_CSTR( "\nup 4" );
+
+    WRITE_CSTR( "\necho \\n" ); // !! ??
+    WRITE_CSTR( "\nlist -" );
+    WRITE_CSTR( "\nlist" );
+    WRITE_CSTR( "\nshell unlink " );
+    WRITE_CSTR( cmd_file_name );
+
+    return cmd_file_name;
+}
+
+//____________________________________________________________________________//
+
+static void
+start_gdb_in_console( dbg_startup_info const& dsi )
+{
+    char const* cmnd_file_name = prepare_gdb_cmnd_file( dsi );
+
+    if( !cmnd_file_name )
+        return;
+
+    safe_execlp( "gdb", "-q", "-x", cmnd_file_name, 0 );
+}
+
+//____________________________________________________________________________//
+
+static void
+start_gdb_in_xterm( dbg_startup_info const& dsi )
+{
+    char const* title           = prepare_window_title( dsi );
+    char const* cmnd_file_name  = prepare_gdb_cmnd_file( dsi );
+
+    if( !title || !cmnd_file_name )
+        return;
+
+    safe_execlp( "xterm", "-T", title, "-display", dsi.display.begin(),
+                    "-bg", "black", "-fg", "white", "-geometry", "88x30+10+10", "-fn", "9x15", "-e",
+                 "gdb", "-q", "-x", cmnd_file_name, 0 );
+}
+
+//____________________________________________________________________________//
+
+static void
+start_gdb_in_emacs( dbg_startup_info const& dsi )
+{
+    char const* cmnd_file_name  = prepare_gdb_cmnd_file( dsi );
+    if( !cmnd_file_name )
+        return;
+
+    char dbg_cmd_buff[500]; // !! ??
+    ::snprintf( dbg_cmd_buff, sizeof(dbg_cmd_buff), "(progn (gdb \"gdb -q -x %s\"))", cmnd_file_name );
+
+    start_debugger_in_emacs( dsi, "emacs", dbg_cmd_buff );
+}
+
+//____________________________________________________________________________//
+
+static void
+start_gdb_in_xemacs( dbg_startup_info const& )
+{
+    // !! ??
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                 dbx starters                 ************** //
+// ************************************************************************** //
+
+static char const*
+prepare_dbx_cmd_line( dbg_startup_info const& dsi, bool list_source = true )
+{
+    static char cmd_line_buff[500]; // !! ??
+
+    ::snprintf( cmd_line_buff, sizeof(cmd_line_buff), "unlink %s;cont;%s%s",
+                   dsi.init_done_lock.begin(),
+                   dsi.break_or_continue ? "up 2;": "",
+                   list_source ? "echo \" \";list -w3;" : "" );
+
+    return cmd_line_buff;
+}
+
+//____________________________________________________________________________//
+
+static void
+start_dbx_in_console( dbg_startup_info const& dsi )
+{
+    char pid_buff[16];
+    ::snprintf( pid_buff, sizeof(pid_buff), "%ld", dsi.pid );
+
+    safe_execlp( "dbx", "-q", "-c", prepare_dbx_cmd_line( dsi ), dsi.binary_path.begin(), pid_buff, 0 );
+}
+
+//____________________________________________________________________________//
+
+static void
+start_dbx_in_xterm( dbg_startup_info const& dsi )
+{
+    char const* title = prepare_window_title( dsi );
+    if( !title )
+        return;
+
+    char pid_buff[16]; // !! ??
+    ::snprintf( pid_buff, sizeof(pid_buff), "%ld", dsi.pid );
+
+    safe_execlp( "xterm", "-T", title, "-display", dsi.display.begin(),
+                    "-bg", "black", "-fg", "white", "-geometry", "88x30+10+10", "-fn", "9x15", "-e",
+                 "dbx", "-q", "-c", prepare_dbx_cmd_line( dsi ), dsi.binary_path.begin(), pid_buff, 0 );
+}
+
+//____________________________________________________________________________//
+
+static void
+start_dbx_in_emacs( dbg_startup_info const& /*dsi*/ )
+{
+//    char dbg_cmd_buff[500]; // !! ??
+//
+//    ::snprintf( dbg_cmd_buff, sizeof(dbg_cmd_buff), "(progn (dbx \"dbx -q -c cont %s %ld\"))", dsi.binary_path.begin(), dsi.pid );
+
+//    start_debugger_in_emacs( dsi, "emacs", dbg_cmd_buff );
+}
+
+//____________________________________________________________________________//
+
+static void
+start_dbx_in_xemacs( dbg_startup_info const& )
+{
+    // !! ??
+}
+
+//____________________________________________________________________________//
+
+static void
+start_dbx_in_ddd( dbg_startup_info const& dsi )
+{
+    char const* title = prepare_window_title( dsi );
+    if( !title )
+        return;
+
+    char pid_buff[16]; // !! ??
+    ::snprintf( pid_buff, sizeof(pid_buff), "%ld", dsi.pid );
+
+    safe_execlp( "ddd", "-display", dsi.display.begin(),
+                 "--dbx", "-q", "-c", prepare_dbx_cmd_line( dsi, false ), dsi.binary_path.begin(), pid_buff, 0 );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                debug::info_t                 ************** //
+// ************************************************************************** //
+
+static struct info_t {
+    // Constructor
+    info_t();
+
+    // Public properties
+    unit_test::readwrite_property<std::string>  p_dbg;
+
+    // Data members
+    std::map<std::string,dbg_starter>           m_dbg_starter_reg;
+} s_info;
+
+//____________________________________________________________________________//
+
+info_t::info_t()
+{
+    p_dbg.value = ::getenv( "DISPLAY" )
+        ? std::string( BOOST_STRINGIZE( BOOST_TEST_GUI_DBG ) )
+        : std::string( BOOST_STRINGIZE( BOOST_TEST_CNL_DBG ) );
+
+    m_dbg_starter_reg[std::string("gdb")]           = &start_gdb_in_console;
+    m_dbg_starter_reg[std::string("gdb-emacs")]     = &start_gdb_in_emacs;
+    m_dbg_starter_reg[std::string("gdb-xterm")]     = &start_gdb_in_xterm;
+    m_dbg_starter_reg[std::string("gdb-xemacs")]    = &start_gdb_in_xemacs;
+
+    m_dbg_starter_reg[std::string("dbx")]           = &start_dbx_in_console;
+    m_dbg_starter_reg[std::string("dbx-emacs")]     = &start_dbx_in_emacs;
+    m_dbg_starter_reg[std::string("dbx-xterm")]     = &start_dbx_in_xterm;
+    m_dbg_starter_reg[std::string("dbx-xemacs")]    = &start_dbx_in_xemacs;
+    m_dbg_starter_reg[std::string("dbx-ddd")]       = &start_dbx_in_ddd;
+}
+
+//____________________________________________________________________________//
+
+#endif
+
+} // local namespace
+
+// ************************************************************************** //
+// **************  check if program is running under debugger  ************** //
+// ************************************************************************** //
+
+bool
+under_debugger()
+{
+#if defined(BOOST_WIN32_BASED_DEBUG) // *********************** WIN32
+
+    return !!s_info.m_is_debugger_present && s_info.m_is_debugger_present();
+
+#elif defined(BOOST_UNIX_BASED_DEBUG) // ********************** UNIX
+
+    // !! ?? could/should we cache the result somehow?
+    const_string    dbg_list = BOOST_TEST_STRINGIZE( BOOST_TEST_DBG_LIST );
+
+    pid_t pid = ::getpid();
+
+    while( pid != 0 ) {
+        process_info pi( pid );
+
+        // !! ?? should we use tokenizer here instead?
+        if( dbg_list.find( pi.binary_name() ) != const_string::npos )
+            return true;
+
+        pid = (pi.parent_pid() == pid ? 0 : pi.parent_pid());
+    }
+
+    return false;
+
+#else // ****************************************************** default
+
+    return false;
+
+#endif
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************       cause program to break execution       ************** //
+// **************           in debugger at call point          ************** //
+// ************************************************************************** //
+
+void
+debugger_break()
+{
+    // !! ?? auto-start debugger?
+
+#if defined(BOOST_WIN32_BASED_DEBUG) // *********************** WIN32
+
+#if defined(__GNUC__) && !defined(__MINGW32__)   ||  \
+    defined(__INTEL_COMPILER)
+#   define BOOST_DEBUG_BREAK    __debugbreak
+#else
+#   define BOOST_DEBUG_BREAK    DebugBreak
+#endif
+
+#ifndef __MINGW32__
+    if( !under_debugger() ) {
+        __try {
+            __try {
+                BOOST_DEBUG_BREAK();
+            }
+            __except( UnhandledExceptionFilter(GetExceptionInformation()) )
+            {
+                // User opted to ignore the breakpoint
+                return;
+            }
+        }
+        __except (EXCEPTION_EXECUTE_HANDLER)
+        {
+            // If we got here, the user has pushed Debug. Debugger is already attached to our process and we
+            // continue to let the another BOOST_DEBUG_BREAK to be called.
+        }
+    }
+#endif
+
+    BOOST_DEBUG_BREAK();
+
+#elif defined(BOOST_UNIX_BASED_DEBUG) // ********************** UNIX
+
+    ::kill( ::getpid(), SIGTRAP );
+
+#else // ****************************************************** default
+
+#endif
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************            console debugger setup            ************** //
+// ************************************************************************** //
+
+#if defined(BOOST_UNIX_BASED_DEBUG) // ************************ UNIX
+
+std::string
+set_debugger( unit_test::const_string dbg_id, dbg_starter s )
+{
+    std::string old = s_info.p_dbg;
+
+    assign_op( s_info.p_dbg.value, dbg_id, 0 );
+
+    if( !!s )
+        s_info.m_dbg_starter_reg[s_info.p_dbg.get()] = s;
+
+    return old;
+}
+
+#else  // ***************************************************** default
+
+std::string
+set_debugger( unit_test::const_string, dbg_starter )
+{
+    return std::string();
+}
+
+#endif
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************    attach debugger to the current process    ************** //
+// ************************************************************************** //
+
+bool
+attach_debugger( bool break_or_continue )
+{
+    if( under_debugger() )
+        return false;
+
+#if defined(BOOST_WIN32_BASED_DEBUG) // *********************** WIN32
+
+    const int MAX_CMD_LINE = 200;
+
+    // *************************************************** //
+    // Debugger "ready" event
+
+    SECURITY_ATTRIBUTES attr;
+    attr.nLength                = sizeof(attr);
+    attr.lpSecurityDescriptor   = NULL;
+    attr.bInheritHandle         = true;
+
+    // manual resettable, initially non signaled, unnamed event,
+    // that will signal me that debugger initialization is done
+    HANDLE dbg_init_done_ev = ::CreateEvent(
+        &attr,          // pointer to security attributes
+        true,           // flag for manual-reset event
+        false,          // flag for initial state
+        NULL            // pointer to event-object name
+    );
+
+    if( !dbg_init_done_ev )
+        return false;
+
+    // *************************************************** //
+    // Debugger command line format
+
+    HKEY reg_key;
+
+    if( !s_info.m_reg_open_key || (*s_info.m_reg_open_key)(
+            HKEY_LOCAL_MACHINE,                                         // handle of open key
+            "Software\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug", // name of subkey to open
+            &reg_key ) != ERROR_SUCCESS )                               // address of handle of open key
+        return false;
+
+    char  format[MAX_CMD_LINE];
+    DWORD format_size = MAX_CMD_LINE;
+    DWORD type = REG_SZ;
+
+    if( !s_info.m_reg_query_value || (*s_info.m_reg_query_value)(
+            reg_key,                            // handle of open key
+            "Debugger",                         // name of subkey to query
+            0,                                  // reserved
+            &type,                              // value type
+            (LPBYTE)format,                     // buffer for returned string
+            &format_size ) != ERROR_SUCCESS )   // in: buffer size; out: actual size of returned string
+        return false;
+
+    if( !s_info.m_reg_close_key || (*s_info.m_reg_close_key)( reg_key ) != ERROR_SUCCESS )
+        return false;
+
+    // *************************************************** //
+    // Debugger command line
+
+    char cmd_line[MAX_CMD_LINE];
+    std::sprintf( cmd_line, format, ::GetCurrentProcessId(), dbg_init_done_ev );
+
+    // *************************************************** //
+    // Debugger window parameters
+
+    STARTUPINFOA    startup_info;
+    std::memset( &startup_info, 0, sizeof(startup_info) );
+
+    startup_info.cb             = sizeof(startup_info);
+    startup_info.dwFlags        = STARTF_USESHOWWINDOW;
+    startup_info.wShowWindow    = SW_SHOWNORMAL;
+
+    // debugger process s_info
+    PROCESS_INFORMATION debugger_info;
+
+    bool created = !!::CreateProcessA(
+        NULL,           // pointer to name of executable module; NULL - use the one in command line
+        cmd_line,       // pointer to command line string
+        NULL,           // pointer to process security attributes; NULL - debugger's handle can't be inherited
+        NULL,           // pointer to thread security attributes; NULL - debugger's handle can't be inherited
+        true,           // debugger inherit opened handles
+        0,              // priority flags; 0 - normal priority
+        NULL,           // pointer to new environment block; NULL - use this process environment
+        NULL,           // pointer to current directory name; NULL - use this process correct directory
+        &startup_info,  // pointer to STARTUPINFO that specifies main window appearance
+        &debugger_info  // pointer to PROCESS_INFORMATION that will contain the new process identification
+    );
+
+    if( created )
+        ::WaitForSingleObject( dbg_init_done_ev, INFINITE );
+
+    ::CloseHandle( dbg_init_done_ev );
+
+    if( !created )
+        return false;
+
+    if( break_or_continue )
+        debugger_break();
+
+    return true;
+
+#elif defined(BOOST_UNIX_BASED_DEBUG) // ********************** UNIX
+
+    char init_done_lock_fn[] = "/tmp/btl_dbg_init_done_XXXXXX";
+    fd_holder init_done_lock_fd( ::mkstemp( init_done_lock_fn ) );
+
+    if( init_done_lock_fd == -1 )
+        return false;
+
+    pid_t child_pid = fork();
+
+    if( child_pid == -1 )
+        return false;
+
+    if( child_pid != 0 ) { // parent process - here we will start the debugger
+        dbg_startup_info dsi;
+
+        process_info pi( child_pid );
+        if( pi.binary_path().is_empty() )
+            ::exit( -1 );
+
+        dsi.pid                 = child_pid;
+        dsi.break_or_continue   = break_or_continue;
+        dsi.binary_path         = pi.binary_path();
+        dsi.display             = ::getenv( "DISPLAY" );
+        dsi.init_done_lock      = init_done_lock_fn;
+
+        dbg_starter starter = s_info.m_dbg_starter_reg[s_info.p_dbg];
+        if( !!starter )
+            starter( dsi );
+
+        ::perror( "Boost.Test execution monitor failed to start a debugger:" );
+
+        ::exit( -1 );
+    }
+
+    // child process - here we will continue our test module execution ; // !! ?? should it be vice versa
+
+    while( ::access( init_done_lock_fn, F_OK ) == 0 ) {
+        struct timeval to = { 0, 100 };
+
+        ::select( 0, 0, 0, 0, &to );
+    }
+
+//    char dummy;
+//    while( ::read( init_done_lock_fd, &dummy, sizeof(char) ) == 0 );
+
+    if( break_or_continue )
+        debugger_break();
+
+    return true;
+
+#else // ****************************************************** default
+
+    return false;
+
+#endif
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************   switch on/off detect memory leaks feature  ************** //
+// ************************************************************************** //
+
+void
+detect_memory_leaks( bool on_off, unit_test::const_string report_file )
+{
+    unit_test::ut_detail::ignore_unused_variable_warning( on_off );
+
+#ifdef BOOST_MS_CRT_BASED_DEBUG
+    int flags = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
+
+    if( !on_off )
+        flags &= ~_CRTDBG_LEAK_CHECK_DF;
+    else  {
+        flags |= _CRTDBG_LEAK_CHECK_DF;
+        _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
+
+        if( report_file.is_empty() )
+            _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
+        else {
+            HANDLE hreport_f = ::CreateFileA( report_file.begin(),
+                                              GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+            _CrtSetReportFile(_CRT_WARN, hreport_f );
+        }
+    }
+
+    _CrtSetDbgFlag ( flags );
+#else
+    unit_test::ut_detail::ignore_unused_variable_warning( report_file );
+#endif // BOOST_MS_CRT_BASED_DEBUG
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************      cause program to break execution in     ************** //
+// **************     debugger at specific allocation point    ************** //
+// ************************************************************************** //
+
+void
+break_memory_alloc( long mem_alloc_order_num )
+{
+    unit_test::ut_detail::ignore_unused_variable_warning( mem_alloc_order_num );
+
+#ifdef BOOST_MS_CRT_BASED_DEBUG
+    // only set the value if one was supplied (do not use default used by UTF just as a indicator to enable leak detection)
+    if( mem_alloc_order_num > 1 )
+        _CrtSetBreakAlloc( mem_alloc_order_num );
+#endif // BOOST_MS_CRT_BASED_DEBUG
+}
+
+//____________________________________________________________________________//
+
+} // namespace debug
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_DEBUG_API_IPP_112006GER
+
diff --git a/vendor/pdalboost/boost/test/impl/decorator.ipp b/vendor/pdalboost/boost/test/impl/decorator.ipp
new file mode 100644
index 0000000..3b3911e
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/decorator.ipp
@@ -0,0 +1,202 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : unit test decorators implementation
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TREE_DECORATOR_IPP_091911GER
+#define BOOST_TEST_TREE_DECORATOR_IPP_091911GER
+
+// Boost.Test
+#include <boost/test/tree/decorator.hpp>
+#include <boost/test/tree/test_unit.hpp>
+
+#include <boost/test/framework.hpp>
+#if BOOST_TEST_SUPPORT_TOKEN_ITERATOR
+#include <boost/test/utils/iterator/token_iterator.hpp>
+#endif
+
+#include <boost/test/detail/throw_exception.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace decorator {
+
+// ************************************************************************** //
+// **************             decorator::collector             ************** //
+// ************************************************************************** //
+
+collector&
+collector::operator*( base const& d )
+{
+    m_tu_decorators.push_back( d.clone() );
+
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+void
+collector::store_in( test_unit& tu )
+{
+    tu.p_decorators.value.insert( tu.p_decorators.value.end(), m_tu_decorators.begin(), m_tu_decorators.end() );
+}
+
+//____________________________________________________________________________//
+
+void
+collector::reset()
+{
+    m_tu_decorators.clear();
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               decorator::base                ************** //
+// ************************************************************************** //
+
+collector&
+base::operator*() const
+{
+    return collector::instance() * *this;
+}
+
+// ************************************************************************** //
+// **************               decorator::label               ************** //
+// ************************************************************************** //
+
+void
+label::apply( test_unit& tu )
+{
+    tu.add_label( m_label );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************         decorator::expected_failures         ************** //
+// ************************************************************************** //
+
+void
+expected_failures::apply( test_unit& tu )
+{
+    tu.increase_exp_fail( m_exp_fail );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************              decorator::timeout              ************** //
+// ************************************************************************** //
+
+void
+timeout::apply( test_unit& tu )
+{
+    tu.p_timeout.value = m_timeout;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************            decorator::description            ************** //
+// ************************************************************************** //
+
+void
+description::apply( test_unit& tu )
+{
+    tu.p_description.value += m_description;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************             decorator::depends_on            ************** //
+// ************************************************************************** //
+
+void
+depends_on::apply( test_unit& tu )
+{
+#if !BOOST_TEST_SUPPORT_TOKEN_ITERATOR
+    BOOST_TEST_SETUP_ASSERT( false, "depends_on decorator is not supported on this platform" );
+#else
+    utils::string_token_iterator tit( m_dependency, (utils::dropped_delimeters = "/", utils::kept_delimeters = utils::dt_none) );
+
+    test_unit* dep = &framework::master_test_suite();
+    while( tit != utils::string_token_iterator() ) {
+        BOOST_TEST_SETUP_ASSERT( dep->p_type == TUT_SUITE, std::string( "incorrect dependency specification " ) + m_dependency );
+
+        test_unit_id next_id = static_cast<test_suite*>(dep)->get( *tit );
+
+        BOOST_TEST_SETUP_ASSERT( next_id != INV_TEST_UNIT_ID,
+                                 std::string( "incorrect dependency specification " ) + m_dependency );
+
+        dep = &framework::get( next_id, TUT_ANY );
+        ++tit;
+    }
+
+    tu.depends_on( dep );
+#endif
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************    decorator::enable_if/enabled/disabled     ************** //
+// ************************************************************************** //
+
+void
+enable_if_impl::apply_impl( test_unit& tu, bool condition )
+{
+    BOOST_TEST_SETUP_ASSERT(tu.p_default_status == test_unit::RS_INHERIT,
+                            "Can't apply multiple enabled/disabled decorators "
+                            "to the same test unit " + tu.full_name());
+
+    tu.p_default_status.value = condition ? test_unit::RS_ENABLED : test_unit::RS_DISABLED;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************              decorator::fixture              ************** //
+// ************************************************************************** //
+
+void
+fixture_t::apply( test_unit& tu )
+{
+    tu.p_fixtures.value.push_back( m_impl );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************            decorator::depends_on             ************** //
+// ************************************************************************** //
+
+void
+precondition::apply( test_unit& tu )
+{
+    tu.add_precondition( m_precondition );
+}
+
+//____________________________________________________________________________//
+
+} // namespace decorator
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TREE_DECORATOR_IPP_091911GER
diff --git a/vendor/pdalboost/boost/test/impl/execution_monitor.ipp b/vendor/pdalboost/boost/test/impl/execution_monitor.ipp
new file mode 100644
index 0000000..641569d
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/execution_monitor.ipp
@@ -0,0 +1,1438 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  (C) Copyright Beman Dawes and Ullrich Koethe 1995-2001.
+//  Use, modification, and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : provides execution monitor implementation for all supported
+//  configurations, including Microsoft structured exception based, unix signals
+//  based and special workarounds for borland
+//
+//  Note that when testing requirements or user wishes preclude use of this
+//  file as a separate compilation unit, it may be included as a header file.
+//
+//  Header dependencies are deliberately restricted to reduce coupling to other
+//  boost libraries.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_EXECUTION_MONITOR_IPP_012205GER
+#define BOOST_TEST_EXECUTION_MONITOR_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/detail/workaround.hpp>
+#include <boost/test/detail/throw_exception.hpp>
+#include <boost/test/execution_monitor.hpp>
+#include <boost/test/debug.hpp>
+
+// Boost
+#include <boost/cstdlib.hpp>    // for exit codes
+#include <boost/config.hpp>     // for workarounds
+#include <boost/core/ignore_unused.hpp> // for ignore_unused
+#ifndef BOOST_NO_EXCEPTION
+#include <boost/exception/get_error_info.hpp> // for get_error_info
+#include <boost/exception/current_exception_cast.hpp> // for current_exception_cast
+#endif
+
+// STL
+#include <string>               // for std::string
+#include <new>                  // for std::bad_alloc
+#include <typeinfo>             // for std::bad_cast, std::bad_typeid
+#include <exception>            // for std::exception, std::bad_exception
+#include <stdexcept>            // for std exception hierarchy
+#include <cstring>              // for C string API
+#include <cassert>              // for assert
+#include <cstddef>              // for NULL
+#include <cstdio>               // for vsnprintf
+#include <cstdarg>              // for varargs
+
+#include <iostream>              // for varargs
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::strerror; using ::strlen; using ::strncat; }
+#endif
+
+// to use vsnprintf
+#if defined(__SUNPRO_CC) || defined(__SunOS)
+#  include <stdio.h>
+#  include <stdarg.h>
+using std::va_list;
+#endif
+
+// to use vsnprintf
+#if defined(__QNXNTO__)
+#  include <stdio.h>
+#endif
+
+#ifdef BOOST_SEH_BASED_SIGNAL_HANDLING
+#  include <windows.h>
+
+#  if defined(__MWERKS__) || (defined(_MSC_VER) && !defined(UNDER_CE))
+#    include <eh.h>
+#  endif
+
+#  if defined(__BORLANDC__) && __BORLANDC__ >= 0x560 || defined(__MWERKS__)
+#    include <stdint.h>
+#  endif
+
+#  if defined(__BORLANDC__) && __BORLANDC__ < 0x560
+    typedef unsigned uintptr_t;
+#  endif
+
+#  if defined(UNDER_CE) && BOOST_WORKAROUND(_MSC_VER,  < 1500 )
+   typedef void* uintptr_t;
+#  elif defined(UNDER_CE)
+#  include <crtdefs.h>
+#  endif
+
+#  if !defined(NDEBUG) && defined(_MSC_VER) && !defined(UNDER_CE)
+#    include <crtdbg.h>
+#    define BOOST_TEST_CRT_HOOK_TYPE    _CRT_REPORT_HOOK
+#    define BOOST_TEST_CRT_ASSERT       _CRT_ASSERT
+#    define BOOST_TEST_CRT_ERROR        _CRT_ERROR
+#    define BOOST_TEST_CRT_SET_HOOK(H)  _CrtSetReportHook(H)
+#  else
+#    define BOOST_TEST_CRT_HOOK_TYPE    void*
+#    define BOOST_TEST_CRT_ASSERT       2
+#    define BOOST_TEST_CRT_ERROR        1
+#    define BOOST_TEST_CRT_SET_HOOK(H)  (void*)(H)
+#  endif
+
+#  if (!BOOST_WORKAROUND(_MSC_VER,  >= 1400 ) && \
+      !defined(BOOST_COMO)) || defined(UNDER_CE)
+
+typedef void* _invalid_parameter_handler;
+
+inline _invalid_parameter_handler
+_set_invalid_parameter_handler( _invalid_parameter_handler arg )
+{
+    return arg;
+}
+
+#  endif
+
+#  if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0564)) || defined(UNDER_CE)
+
+namespace { void _set_se_translator( void* ) {} }
+
+#  endif
+
+#elif defined(BOOST_HAS_SIGACTION)
+
+#  define BOOST_SIGACTION_BASED_SIGNAL_HANDLING
+
+#  include <unistd.h>
+#  include <signal.h>
+#  include <setjmp.h>
+
+#  if defined(__FreeBSD__)
+
+#    include <osreldate.h>
+
+#    ifndef SIGPOLL
+#      define SIGPOLL SIGIO
+#    endif
+
+#    if (__FreeBSD_version < 70100)
+
+#      define ILL_ILLADR 0 // ILL_RESAD_FAULT
+#      define ILL_PRVOPC ILL_PRIVIN_FAULT
+#      define ILL_ILLOPN 2 // ILL_RESOP_FAULT
+#      define ILL_COPROC ILL_FPOP_FAULT
+
+#      define BOOST_TEST_LIMITED_SIGNAL_DETAILS
+
+#    endif
+#  endif
+
+#  if defined(__ANDROID__)
+#    include <android/api-level.h>
+#  endif
+
+#  if !defined(__CYGWIN__) && !defined(__QNXNTO__) && !defined(__bgq__) && \
+   (!defined(__ANDROID__) || __ANDROID_API__ >= 8)
+#    define BOOST_TEST_USE_ALT_STACK
+#  endif
+
+#  if defined(SIGPOLL) && !defined(__CYGWIN__)                              && \
+      !(defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))  && \
+      !defined(__NetBSD__)                                                  && \
+      !defined(__QNXNTO__)
+#    define BOOST_TEST_CATCH_SIGPOLL
+#  endif
+
+#  ifdef BOOST_TEST_USE_ALT_STACK
+#    define BOOST_TEST_ALT_STACK_SIZE SIGSTKSZ
+#  endif
+
+
+#else
+
+#  define BOOST_NO_SIGNAL_HANDLING
+
+#endif
+
+#ifndef UNDER_CE
+#include <errno.h>
+#endif
+
+#if defined(__GNUC__) && !defined(BOOST_NO_TYPEID)
+#  include <cxxabi.h>
+#endif
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+
+// ************************************************************************** //
+// **************                 throw_exception              ************** //
+// ************************************************************************** //
+
+#ifdef BOOST_NO_EXCEPTION
+void throw_exception( std::exception const & e ) { abort(); }
+#endif
+
+// ************************************************************************** //
+// **************                  report_error                ************** //
+// ************************************************************************** //
+
+namespace detail {
+
+#ifdef __BORLANDC__
+#  define BOOST_TEST_VSNPRINTF( a1, a2, a3, a4 ) std::vsnprintf( (a1), (a2), (a3), (a4) )
+#elif BOOST_WORKAROUND(_MSC_VER, <= 1310) || \
+      BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3000)) || \
+      defined(UNDER_CE)
+#  define BOOST_TEST_VSNPRINTF( a1, a2, a3, a4 ) _vsnprintf( (a1), (a2), (a3), (a4) )
+#else
+#  define BOOST_TEST_VSNPRINTF( a1, a2, a3, a4 ) vsnprintf( (a1), (a2), (a3), (a4) )
+#endif
+
+#ifndef BOOST_NO_EXCEPTION
+
+template <typename ErrorInfo>
+typename ErrorInfo::value_type
+extract( pdalboost::exception const* ex )
+{
+    if( !ex )
+        return 0;
+
+    typename ErrorInfo::value_type const * val = pdalboost::get_error_info<ErrorInfo>( *ex );
+
+    return val ? *val : 0;
+}
+
+//____________________________________________________________________________//
+
+static void
+report_error( execution_exception::error_code ec, pdalboost::exception const* be, char const* format, va_list* args )
+{
+    static const int REPORT_ERROR_BUFFER_SIZE = 4096;
+    static char buf[REPORT_ERROR_BUFFER_SIZE];
+
+    BOOST_TEST_VSNPRINTF( buf, sizeof(buf)-1, format, *args );
+    buf[sizeof(buf)-1] = 0;
+
+    va_end( *args );
+
+    BOOST_TEST_I_THROW(execution_exception( ec, buf, execution_exception::location( extract<throw_file>( be ),
+                                                                                    (size_t)extract<throw_line>( be ),
+                                                                                    extract<throw_function>( be ) ) ));
+}
+
+//____________________________________________________________________________//
+
+static void
+report_error( execution_exception::error_code ec, pdalboost::exception const* be, char const* format, ... )
+{
+    va_list args;
+    va_start( args, format );
+
+    report_error( ec, be, format, &args );
+}
+
+#endif
+
+//____________________________________________________________________________//
+
+static void
+report_error( execution_exception::error_code ec, char const* format, ... )
+{
+    va_list args;
+    va_start( args, format );
+
+    report_error( ec, 0, format, &args );
+}
+
+//____________________________________________________________________________//
+
+template<typename Tr,typename Functor>
+inline int
+do_invoke( Tr const& tr, Functor const& F )
+{
+    return tr ? (*tr)( F ) : F();
+}
+
+//____________________________________________________________________________//
+
+struct fpe_except_guard {
+    explicit fpe_except_guard( unsigned detect_fpe )
+    : m_detect_fpe( detect_fpe )
+    {
+        // prepare fp exceptions control
+        m_previosly_enabled = fpe::disable( fpe::BOOST_FPE_ALL );
+        if( m_previosly_enabled != fpe::BOOST_FPE_INV && detect_fpe != fpe::BOOST_FPE_OFF )
+            fpe::enable( detect_fpe );
+    }
+    ~fpe_except_guard()
+    {
+        if( m_detect_fpe != fpe::BOOST_FPE_OFF )
+            fpe::disable( m_detect_fpe );
+        if( m_previosly_enabled != fpe::BOOST_FPE_INV )
+            fpe::enable( m_previosly_enabled );
+    }
+
+    unsigned m_detect_fpe;
+    unsigned m_previosly_enabled;
+};
+
+#ifndef BOOST_NO_TYPEID
+
+// ************************************************************************** //
+// **************                  typeid_name                 ************** //
+// ************************************************************************** //
+
+template<typename T>
+char const*
+typeid_name( T const& t )
+{
+#ifdef __GNUC__
+    int status;
+
+    return abi::__cxa_demangle( typeid(t).name(), 0, 0, &status );
+#else
+    return typeid(t).name();
+#endif
+}
+#endif
+
+} // namespace detail
+
+#if defined(BOOST_SIGACTION_BASED_SIGNAL_HANDLING)
+
+// ************************************************************************** //
+// **************       Sigaction based signal handling        ************** //
+// ************************************************************************** //
+
+namespace detail {
+
+// ************************************************************************** //
+// **************    pdalboost::detail::system_signal_exception    ************** //
+// ************************************************************************** //
+
+class system_signal_exception {
+public:
+    // Constructor
+    system_signal_exception()
+    : m_sig_info( 0 )
+    , m_context( 0 )
+    {}
+
+    // Access methods
+    void        operator()( siginfo_t* i, void* c )
+    {
+        m_sig_info  = i;
+        m_context   = c;
+    }
+    void        report() const;
+
+private:
+    // Data members
+    siginfo_t*  m_sig_info; // system signal detailed info
+    void*       m_context;  // signal context
+};
+
+//____________________________________________________________________________//
+
+void
+system_signal_exception::report() const
+{
+    if( !m_sig_info )
+        return; // no error actually occur?
+
+    switch( m_sig_info->si_code ) {
+    case SI_USER:
+        report_error( execution_exception::system_error,
+                      "signal: generated by kill() (or family); uid=%d; pid=%d",
+                      (int)m_sig_info->si_uid, (int)m_sig_info->si_pid );
+        break;
+    case SI_QUEUE:
+        report_error( execution_exception::system_error,
+                      "signal: sent by sigqueue()" );
+        break;
+    case SI_TIMER:
+        report_error( execution_exception::system_error,
+                      "signal: the expiration of a timer set by timer_settimer()" );
+        break;
+    case SI_ASYNCIO:
+        report_error( execution_exception::system_error,
+                      "signal: generated by the completion of an asynchronous I/O request" );
+        break;
+    case SI_MESGQ:
+        report_error( execution_exception::system_error,
+                      "signal: generated by the the arrival of a message on an empty message queue" );
+        break;
+    default:
+        break;
+    }
+
+    switch( m_sig_info->si_signo ) {
+    case SIGILL:
+        switch( m_sig_info->si_code ) {
+#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS
+        case ILL_ILLOPC:
+            report_error( execution_exception::system_fatal_error,
+                          "signal: illegal opcode; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+        case ILL_ILLTRP:
+            report_error( execution_exception::system_fatal_error,
+                          "signal: illegal trap; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+        case ILL_PRVREG:
+            report_error( execution_exception::system_fatal_error,
+                          "signal: privileged register; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+        case ILL_BADSTK:
+            report_error( execution_exception::system_fatal_error,
+                          "signal: internal stack error; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+#endif
+        case ILL_ILLOPN:
+            report_error( execution_exception::system_fatal_error,
+                          "signal: illegal operand; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+        case ILL_ILLADR:
+            report_error( execution_exception::system_fatal_error,
+                          "signal: illegal addressing mode; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+        case ILL_PRVOPC:
+            report_error( execution_exception::system_fatal_error,
+                          "signal: privileged opcode; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+        case ILL_COPROC:
+            report_error( execution_exception::system_fatal_error,
+                          "signal: co-processor error; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+        default:
+            report_error( execution_exception::system_fatal_error,
+                          "signal: SIGILL, si_code: %d (illegal instruction; address of failing instruction: 0x%08lx)",
+                          m_sig_info->si_addr, m_sig_info->si_code );
+            break;
+        }
+        break;
+
+    case SIGFPE:
+        switch( m_sig_info->si_code ) {
+        case FPE_INTDIV:
+            report_error( execution_exception::system_error,
+                          "signal: integer divide by zero; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+        case FPE_INTOVF:
+            report_error( execution_exception::system_error,
+                          "signal: integer overflow; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+        case FPE_FLTDIV:
+            report_error( execution_exception::system_error,
+                          "signal: floating point divide by zero; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+        case FPE_FLTOVF:
+            report_error( execution_exception::system_error,
+                          "signal: floating point overflow; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+        case FPE_FLTUND:
+            report_error( execution_exception::system_error,
+                          "signal: floating point underflow; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+        case FPE_FLTRES:
+            report_error( execution_exception::system_error,
+                          "signal: floating point inexact result; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+        case FPE_FLTINV:
+            report_error( execution_exception::system_error,
+                          "signal: invalid floating point operation; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+        case FPE_FLTSUB:
+            report_error( execution_exception::system_error,
+                          "signal: subscript out of range; address of failing instruction: 0x%08lx",
+                          m_sig_info->si_addr );
+            break;
+        default:
+            report_error( execution_exception::system_error,
+                          "signal: SIGFPE, si_code: %d (errnoneous arithmetic operations; address of failing instruction: 0x%08lx)",
+                          m_sig_info->si_addr, m_sig_info->si_code );
+            break;
+        }
+        break;
+
+    case SIGSEGV:
+        switch( m_sig_info->si_code ) {
+#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS
+        case SEGV_MAPERR:
+            report_error( execution_exception::system_fatal_error,
+                          "memory access violation at address: 0x%08lx: no mapping at fault address",
+                          m_sig_info->si_addr );
+            break;
+        case SEGV_ACCERR:
+            report_error( execution_exception::system_fatal_error,
+                          "memory access violation at address: 0x%08lx: invalid permissions",
+                          m_sig_info->si_addr );
+            break;
+#endif
+        default:
+            report_error( execution_exception::system_fatal_error,
+                          "signal: SIGSEGV, si_code: %d (memory access violation at address: 0x%08lx)",
+                          m_sig_info->si_addr, m_sig_info->si_code );
+            break;
+        }
+        break;
+
+    case SIGBUS:
+        switch( m_sig_info->si_code ) {
+#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS
+        case BUS_ADRALN:
+            report_error( execution_exception::system_fatal_error,
+                          "memory access violation at address: 0x%08lx: invalid address alignment",
+                          m_sig_info->si_addr );
+            break;
+        case BUS_ADRERR:
+            report_error( execution_exception::system_fatal_error,
+                          "memory access violation at address: 0x%08lx: non-existent physical address",
+                          m_sig_info->si_addr );
+            break;
+        case BUS_OBJERR:
+            report_error( execution_exception::system_fatal_error,
+                          "memory access violation at address: 0x%08lx: object specific hardware error",
+                          m_sig_info->si_addr );
+            break;
+#endif
+        default:
+            report_error( execution_exception::system_fatal_error,
+                          "signal: SIGSEGV, si_code: %d (memory access violation at address: 0x%08lx)",
+                          m_sig_info->si_addr, m_sig_info->si_code );
+            break;
+        }
+        break;
+
+#if defined(BOOST_TEST_CATCH_SIGPOLL)
+
+    case SIGPOLL:
+        switch( m_sig_info->si_code ) {
+#ifndef BOOST_TEST_LIMITED_SIGNAL_DETAILS
+        case POLL_IN:
+            report_error( execution_exception::system_error,
+                          "data input available; band event %d",
+                          (int)m_sig_info->si_band );
+            break;
+        case POLL_OUT:
+            report_error( execution_exception::system_error,
+                          "output buffers available; band event %d",
+                          (int)m_sig_info->si_band );
+            break;
+        case POLL_MSG:
+            report_error( execution_exception::system_error,
+                          "input message available; band event %d",
+                          (int)m_sig_info->si_band );
+            break;
+        case POLL_ERR:
+            report_error( execution_exception::system_error,
+                          "i/o error; band event %d",
+                          (int)m_sig_info->si_band );
+            break;
+        case POLL_PRI:
+            report_error( execution_exception::system_error,
+                          "high priority input available; band event %d",
+                          (int)m_sig_info->si_band );
+            break;
+#if defined(POLL_ERR) && defined(POLL_HUP) && (POLL_ERR - POLL_HUP)
+        case POLL_HUP:
+            report_error( execution_exception::system_error,
+                          "device disconnected; band event %d",
+                          (int)m_sig_info->si_band );
+            break;
+#endif
+#endif
+        default:
+            report_error( execution_exception::system_error,
+                          "signal: SIGPOLL, si_code: %d (asynchronous I/O event occurred; band event %d)",
+                          (int)m_sig_info->si_band, m_sig_info->si_code );
+            break;
+        }
+        break;
+
+#endif
+
+    case SIGABRT:
+        report_error( execution_exception::system_error,
+                      "signal: SIGABRT (application abort requested)" );
+        break;
+
+    case SIGALRM:
+        report_error( execution_exception::timeout_error,
+                      "signal: SIGALRM (timeout while executing function)" );
+        break;
+
+    default:
+        report_error( execution_exception::system_error, 
+                      "unrecognized signal %d", m_sig_info->si_signo );
+    }
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************         pdalboost::detail::signal_action         ************** //
+// ************************************************************************** //
+
+// Forward declaration
+extern "C" {
+static void boost_execution_monitor_jumping_signal_handler( int sig, siginfo_t* info, void* context );
+static void boost_execution_monitor_attaching_signal_handler( int sig, siginfo_t* info, void* context );
+}
+
+class signal_action {
+    typedef struct sigaction* sigaction_ptr;
+public:
+    //Constructor
+    signal_action();
+    signal_action( int sig, bool install, bool attach_dbg, char* alt_stack );
+    ~signal_action();
+
+private:
+    // Data members
+    int                 m_sig;
+    bool                m_installed;
+    struct sigaction    m_new_action;
+    struct sigaction    m_old_action;
+};
+
+//____________________________________________________________________________//
+
+signal_action::signal_action()
+: m_installed( false )
+{}
+
+//____________________________________________________________________________//
+
+signal_action::signal_action( int sig, bool install, bool attach_dbg, char* alt_stack )
+: m_sig( sig )
+, m_installed( install )
+{
+    if( !install )
+        return;
+
+    std::memset( &m_new_action, 0, sizeof(struct sigaction) );
+
+    BOOST_TEST_SYS_ASSERT( ::sigaction( m_sig , sigaction_ptr(), &m_new_action ) != -1 );
+
+    if( m_new_action.sa_sigaction || m_new_action.sa_handler ) {
+        m_installed = false;
+        return;
+    }
+
+    m_new_action.sa_flags     |= SA_SIGINFO;
+    m_new_action.sa_sigaction  = attach_dbg ? &boost_execution_monitor_attaching_signal_handler
+                                            : &boost_execution_monitor_jumping_signal_handler;
+    BOOST_TEST_SYS_ASSERT( sigemptyset( &m_new_action.sa_mask ) != -1 );
+
+#ifdef BOOST_TEST_USE_ALT_STACK
+    if( alt_stack )
+        m_new_action.sa_flags |= SA_ONSTACK;
+#endif
+
+    BOOST_TEST_SYS_ASSERT( ::sigaction( m_sig, &m_new_action, &m_old_action ) != -1 );
+}
+
+//____________________________________________________________________________//
+
+signal_action::~signal_action()
+{
+    if( m_installed )
+        ::sigaction( m_sig, &m_old_action , sigaction_ptr() );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************        pdalboost::detail::signal_handler         ************** //
+// ************************************************************************** //
+
+class signal_handler {
+public:
+    // Constructor
+    explicit signal_handler( bool catch_system_errors, bool detect_fpe, unsigned timeout, bool attach_dbg, char* alt_stack );
+
+    // Destructor
+    ~signal_handler();
+
+    // access methods
+    static sigjmp_buf&      jump_buffer()
+    {
+        assert( !!s_active_handler );
+
+        return s_active_handler->m_sigjmp_buf;
+    }
+
+    static system_signal_exception&  sys_sig()
+    {
+        assert( !!s_active_handler );
+
+        return s_active_handler->m_sys_sig;
+    }
+
+private:
+    // Data members
+    signal_handler*         m_prev_handler;
+    unsigned                m_timeout;
+
+    // Note: We intentionality do not catch SIGCHLD. Users have to deal with it themselves
+    signal_action           m_ILL_action;
+    signal_action           m_FPE_action;
+    signal_action           m_SEGV_action;
+    signal_action           m_BUS_action;
+    signal_action           m_CHLD_action;
+    signal_action           m_POLL_action;
+    signal_action           m_ABRT_action;
+    signal_action           m_ALRM_action;
+
+    sigjmp_buf              m_sigjmp_buf;
+    system_signal_exception m_sys_sig;
+
+    static signal_handler*  s_active_handler;
+};
+
+// !! need to be placed in thread specific storage
+typedef signal_handler* signal_handler_ptr;
+signal_handler* signal_handler::s_active_handler = signal_handler_ptr();
+
+//____________________________________________________________________________//
+
+signal_handler::signal_handler( bool catch_system_errors, bool detect_fpe, unsigned timeout, bool attach_dbg, char* alt_stack )
+: m_prev_handler( s_active_handler )
+, m_timeout( timeout )
+, m_ILL_action ( SIGILL , catch_system_errors, attach_dbg, alt_stack )
+, m_FPE_action ( SIGFPE , detect_fpe         , attach_dbg, alt_stack )
+, m_SEGV_action( SIGSEGV, catch_system_errors, attach_dbg, alt_stack )
+, m_BUS_action ( SIGBUS , catch_system_errors, attach_dbg, alt_stack )
+#ifdef BOOST_TEST_CATCH_SIGPOLL
+, m_POLL_action( SIGPOLL, catch_system_errors, attach_dbg, alt_stack )
+#endif
+, m_ABRT_action( SIGABRT, catch_system_errors, attach_dbg, alt_stack )
+, m_ALRM_action( SIGALRM, timeout > 0        , attach_dbg, alt_stack )
+{
+    s_active_handler = this;
+
+    if( m_timeout > 0 ) {
+        ::alarm( 0 );
+        ::alarm( timeout );
+    }
+
+#ifdef BOOST_TEST_USE_ALT_STACK
+    if( alt_stack ) {
+        stack_t sigstk;
+        std::memset( &sigstk, 0, sizeof(stack_t) );
+
+        BOOST_TEST_SYS_ASSERT( ::sigaltstack( 0, &sigstk ) != -1 );
+
+        if( sigstk.ss_flags & SS_DISABLE ) {
+            sigstk.ss_sp    = alt_stack;
+            sigstk.ss_size  = BOOST_TEST_ALT_STACK_SIZE;
+            sigstk.ss_flags = 0;
+            BOOST_TEST_SYS_ASSERT( ::sigaltstack( &sigstk, 0 ) != -1 );
+        }
+    }
+#endif
+}
+
+//____________________________________________________________________________//
+
+signal_handler::~signal_handler()
+{
+    assert( s_active_handler == this );
+
+    if( m_timeout > 0 )
+        ::alarm( 0 );
+
+#ifdef BOOST_TEST_USE_ALT_STACK
+#ifdef __GNUC__
+    // We shouldn't need to explicitly initialize all the members here,
+    // but gcc warns if we don't, so add initializers for each of the
+    // members specified in the POSIX std:
+    stack_t sigstk = { 0, 0, 0 };
+#else
+    stack_t sigstk = { };
+#endif
+
+    sigstk.ss_size  = MINSIGSTKSZ;
+    sigstk.ss_flags = SS_DISABLE;
+    if( ::sigaltstack( &sigstk, 0 ) == -1 ) {
+        int error_n = errno;
+        std::cerr << "******** errors disabling the alternate stack:" << std::endl
+                  << "\t#error:" << error_n << std::endl
+                  << "\t" << std::strerror( error_n ) << std::endl;
+    }
+#endif
+
+    s_active_handler = m_prev_handler;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************       execution_monitor_signal_handler       ************** //
+// ************************************************************************** //
+
+extern "C" {
+
+static void boost_execution_monitor_jumping_signal_handler( int sig, siginfo_t* info, void* context )
+{
+    signal_handler::sys_sig()( info, context );
+
+    siglongjmp( signal_handler::jump_buffer(), sig );
+}
+
+//____________________________________________________________________________//
+
+static void boost_execution_monitor_attaching_signal_handler( int sig, siginfo_t* info, void* context )
+{
+    if( !debug::attach_debugger( false ) )
+        boost_execution_monitor_jumping_signal_handler( sig, info, context );
+
+    // debugger attached; it will handle the signal
+    BOOST_TEST_SYS_ASSERT( ::signal( sig, SIG_DFL ) != SIG_ERR );
+}
+
+//____________________________________________________________________________//
+
+}
+
+} // namespace detail
+
+// ************************************************************************** //
+// **************        execution_monitor::catch_signals      ************** //
+// ************************************************************************** //
+
+int
+execution_monitor::catch_signals( pdalboost::function<int ()> const& F )
+{
+    using namespace detail;
+
+#if defined(__CYGWIN__)
+    p_catch_system_errors.value = false;
+#endif
+
+#ifdef BOOST_TEST_USE_ALT_STACK
+    if( !!p_use_alt_stack && !m_alt_stack )
+        m_alt_stack.reset( new char[BOOST_TEST_ALT_STACK_SIZE] );
+#else
+    p_use_alt_stack.value = false;
+#endif
+
+    signal_handler local_signal_handler( p_catch_system_errors,
+                                         p_catch_system_errors || (p_detect_fp_exceptions != fpe::BOOST_FPE_OFF),
+                                         p_timeout,
+                                         p_auto_start_dbg,
+                                         !p_use_alt_stack ? 0 : m_alt_stack.get() );
+
+    if( !sigsetjmp( signal_handler::jump_buffer(), 1 ) )
+        return detail::do_invoke( m_custom_translators , F );
+    else
+        BOOST_TEST_I_THROW( local_signal_handler.sys_sig() );
+}
+
+//____________________________________________________________________________//
+
+#elif defined(BOOST_SEH_BASED_SIGNAL_HANDLING)
+
+// ************************************************************************** //
+// **************   Microsoft structured exception handling    ************** //
+// ************************************************************************** //
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0564))
+namespace { void _set_se_translator( void* ) {} }
+#endif
+
+namespace detail {
+
+// ************************************************************************** //
+// **************    pdalboost::detail::system_signal_exception    ************** //
+// ************************************************************************** //
+
+class system_signal_exception {
+public:
+    // Constructor
+    explicit            system_signal_exception( execution_monitor* em )
+    : m_em( em )
+    , m_se_id( 0 )
+    , m_fault_address( 0 )
+    , m_dir( false )
+    {}
+
+    void                report() const;
+    int                 operator()( unsigned id, _EXCEPTION_POINTERS* exps );
+
+private:
+    // Data members
+    execution_monitor*  m_em;
+
+    unsigned            m_se_id;
+    void*               m_fault_address;
+    bool                m_dir;
+};
+
+//____________________________________________________________________________//
+
+#if BOOST_WORKAROUND( BOOST_MSVC, <= 1310)
+static void
+seh_catch_preventer( unsigned /* id */, _EXCEPTION_POINTERS* /* exps */ )
+{
+    throw;
+}
+#endif
+
+//____________________________________________________________________________//
+
+int
+system_signal_exception::operator()( unsigned id, _EXCEPTION_POINTERS* exps )
+{
+    const unsigned MSFT_CPP_EXCEPT = 0xE06d7363; // EMSC
+
+    // C++ exception - allow to go through
+    if( id == MSFT_CPP_EXCEPT )
+        return EXCEPTION_CONTINUE_SEARCH;
+
+    // FPE detection is enabled, while system exception detection is not - check if this is actually FPE
+    if( !m_em->p_catch_system_errors ) {
+        if( !m_em->p_detect_fp_exceptions )
+            return EXCEPTION_CONTINUE_SEARCH;
+
+        switch( id ) {
+        case EXCEPTION_FLT_DIVIDE_BY_ZERO:
+        case EXCEPTION_FLT_STACK_CHECK:
+        case EXCEPTION_FLT_DENORMAL_OPERAND:
+        case EXCEPTION_FLT_INEXACT_RESULT:
+        case EXCEPTION_FLT_OVERFLOW:
+        case EXCEPTION_FLT_UNDERFLOW:
+        case EXCEPTION_FLT_INVALID_OPERATION:
+        case STATUS_FLOAT_MULTIPLE_FAULTS:
+        case STATUS_FLOAT_MULTIPLE_TRAPS:
+            break;
+        default:
+            return EXCEPTION_CONTINUE_SEARCH;
+        }
+    }
+
+    if( !!m_em->p_auto_start_dbg && debug::attach_debugger( false ) ) {
+        m_em->p_catch_system_errors.value = false;
+#if BOOST_WORKAROUND( BOOST_MSVC, <= 1310)
+        _set_se_translator( &seh_catch_preventer );
+#endif
+        return EXCEPTION_CONTINUE_EXECUTION;
+    }
+
+    m_se_id = id;
+    if( m_se_id == EXCEPTION_ACCESS_VIOLATION && exps->ExceptionRecord->NumberParameters == 2 ) {
+        m_fault_address = (void*)exps->ExceptionRecord->ExceptionInformation[1];
+        m_dir           = exps->ExceptionRecord->ExceptionInformation[0] == 0;
+    }
+
+    return EXCEPTION_EXECUTE_HANDLER;
+}
+
+//____________________________________________________________________________//
+
+void
+system_signal_exception::report() const
+{
+    switch( m_se_id ) {
+    // cases classified as system_fatal_error
+    case EXCEPTION_ACCESS_VIOLATION: {
+        if( !m_fault_address )
+            detail::report_error( execution_exception::system_fatal_error, "memory access violation" );
+        else
+            detail::report_error(
+                execution_exception::system_fatal_error,
+                    "memory access violation occurred at address 0x%08lx, while attempting to %s",
+                    m_fault_address,
+                    m_dir ? " read inaccessible data"
+                          : " write to an inaccessible (or protected) address"
+                    );
+        break;
+    }
+
+    case EXCEPTION_ILLEGAL_INSTRUCTION:
+        detail::report_error( execution_exception::system_fatal_error, "illegal instruction" );
+        break;
+
+    case EXCEPTION_PRIV_INSTRUCTION:
+        detail::report_error( execution_exception::system_fatal_error, "tried to execute an instruction whose operation is not allowed in the current machine mode" );
+        break;
+
+    case EXCEPTION_IN_PAGE_ERROR:
+        detail::report_error( execution_exception::system_fatal_error, "access to a memory page that is not present" );
+        break;
+
+    case EXCEPTION_STACK_OVERFLOW:
+        detail::report_error( execution_exception::system_fatal_error, "stack overflow" );
+        break;
+
+    case EXCEPTION_NONCONTINUABLE_EXCEPTION:
+        detail::report_error( execution_exception::system_fatal_error, "tried to continue execution after a non continuable exception occurred" );
+        break;
+
+    // cases classified as (non-fatal) system_trap
+    case EXCEPTION_DATATYPE_MISALIGNMENT:
+        detail::report_error( execution_exception::system_error, "data misalignment" );
+        break;
+
+    case EXCEPTION_INT_DIVIDE_BY_ZERO:
+        detail::report_error( execution_exception::system_error, "integer divide by zero" );
+        break;
+
+    case EXCEPTION_INT_OVERFLOW:
+        detail::report_error( execution_exception::system_error, "integer overflow" );
+        break;
+
+    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+        detail::report_error( execution_exception::system_error, "array bounds exceeded" );
+        break;
+
+    case EXCEPTION_FLT_DIVIDE_BY_ZERO:
+        detail::report_error( execution_exception::system_error, "floating point divide by zero" );
+        break;
+
+    case EXCEPTION_FLT_STACK_CHECK:
+        detail::report_error( execution_exception::system_error,
+                              "stack overflowed or underflowed as the result of a floating-point operation" );
+        break;
+
+    case EXCEPTION_FLT_DENORMAL_OPERAND:
+        detail::report_error( execution_exception::system_error,
+                              "operand of floating point operation is denormal" );
+        break;
+
+    case EXCEPTION_FLT_INEXACT_RESULT:
+        detail::report_error( execution_exception::system_error,
+                              "result of a floating-point operation cannot be represented exactly" );
+        break;
+
+    case EXCEPTION_FLT_OVERFLOW:
+        detail::report_error( execution_exception::system_error,
+                              "exponent of a floating-point operation is greater than the magnitude allowed by the corresponding type" );
+        break;
+
+    case EXCEPTION_FLT_UNDERFLOW:
+        detail::report_error( execution_exception::system_error,
+                              "exponent of a floating-point operation is less than the magnitude allowed by the corresponding type" );
+        break;
+
+    case EXCEPTION_FLT_INVALID_OPERATION:
+        detail::report_error( execution_exception::system_error, "floating point error" );
+        break;
+
+    case STATUS_FLOAT_MULTIPLE_FAULTS:
+        detail::report_error( execution_exception::system_error, "multiple floating point errors" );
+        break;
+
+    case STATUS_FLOAT_MULTIPLE_TRAPS:
+        detail::report_error( execution_exception::system_error, "multiple floating point errors" );
+        break;
+
+    case EXCEPTION_BREAKPOINT:
+        detail::report_error( execution_exception::system_error, "breakpoint encountered" );
+        break;
+
+    default:
+        detail::report_error( execution_exception::system_error, "unrecognized exception. Id: 0x%08lx", m_se_id );
+        break;
+    }
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************          assert_reporting_function           ************** //
+// ************************************************************************** //
+
+int BOOST_TEST_CALL_DECL
+assert_reporting_function( int reportType, char* userMessage, int* )
+{
+    // write this way instead of switch to avoid unreachable statements
+    if( reportType == BOOST_TEST_CRT_ASSERT || reportType == BOOST_TEST_CRT_ERROR )
+        detail::report_error( reportType == BOOST_TEST_CRT_ASSERT ? execution_exception::user_error : execution_exception::system_error, userMessage );
+
+    return 0;
+} // assert_reporting_function
+
+//____________________________________________________________________________//
+
+void BOOST_TEST_CALL_DECL
+invalid_param_handler( wchar_t const* /* expr */,
+                       wchar_t const* /* func */,
+                       wchar_t const* /* file */,
+                       unsigned       /* line */,
+                       uintptr_t      /* reserved */)
+{
+    detail::report_error( execution_exception::user_error,
+                          "Invalid parameter detected by C runtime library" );
+}
+
+//____________________________________________________________________________//
+
+} // namespace detail
+
+// ************************************************************************** //
+// **************        execution_monitor::catch_signals      ************** //
+// ************************************************************************** //
+
+int
+execution_monitor::catch_signals( pdalboost::function<int ()> const& F )
+{
+    _invalid_parameter_handler old_iph = _invalid_parameter_handler();
+    BOOST_TEST_CRT_HOOK_TYPE old_crt_hook = 0;
+
+    if( p_catch_system_errors ) {
+        old_crt_hook = BOOST_TEST_CRT_SET_HOOK( &detail::assert_reporting_function );
+
+        old_iph = _set_invalid_parameter_handler(
+            reinterpret_cast<_invalid_parameter_handler>( &detail::invalid_param_handler ) );
+    } else if( !p_detect_fp_exceptions ) {
+#if BOOST_WORKAROUND( BOOST_MSVC, <= 1310)
+        _set_se_translator( &detail::seh_catch_preventer );
+#endif
+    }
+
+    detail::system_signal_exception SSE( this );
+
+    int ret_val = 0;
+
+    __try {
+        __try {
+            ret_val = detail::do_invoke( m_custom_translators, F );
+        }
+        __except( SSE( GetExceptionCode(), GetExceptionInformation() ) ) {
+            throw SSE;
+        }
+    }
+    __finally {
+        if( p_catch_system_errors ) {
+            BOOST_TEST_CRT_SET_HOOK( old_crt_hook );
+
+           _set_invalid_parameter_handler( old_iph );
+        }
+    }
+
+    return ret_val;
+}
+
+//____________________________________________________________________________//
+
+#else  // default signal handler
+
+namespace detail {
+
+class system_signal_exception {
+public:
+    void   report() const {}
+};
+
+} // namespace detail
+
+int
+execution_monitor::catch_signals( pdalboost::function<int ()> const& F )
+{
+    return detail::do_invoke( m_custom_translators , F );
+}
+
+//____________________________________________________________________________//
+
+#endif  // choose signal handler
+
+// ************************************************************************** //
+// **************              execution_monitor               ************** //
+// ************************************************************************** //
+
+execution_monitor::execution_monitor()
+: p_catch_system_errors( true )
+, p_auto_start_dbg( false )
+, p_timeout( 0 )
+, p_use_alt_stack( true )
+, p_detect_fp_exceptions( fpe::BOOST_FPE_OFF )
+{}
+
+//____________________________________________________________________________//
+
+int
+execution_monitor::execute( pdalboost::function<int ()> const& F )
+{
+    if( debug::under_debugger() )
+        p_catch_system_errors.value = false;
+
+    BOOST_TEST_I_TRY {
+        detail::fpe_except_guard G( p_detect_fp_exceptions );
+        unit_test::ut_detail::ignore_unused_variable_warning( G );
+
+        return catch_signals( F );
+    }
+
+#ifndef BOOST_NO_EXCEPTIONS
+
+    //  Catch-clause reference arguments are a bit different from function
+    //  arguments (ISO 15.3 paragraphs 18 & 19).  Apparently const isn't
+    //  required.  Programmers ask for const anyhow, so we supply it.  That's
+    //  easier than answering questions about non-const usage.
+
+    catch( char const* ex )
+      { detail::report_error( execution_exception::cpp_exception_error,
+                              "C string: %s", ex ); }
+    catch( std::string const& ex )
+      { detail::report_error( execution_exception::cpp_exception_error,
+                              "std::string: %s", ex.c_str() ); }
+
+    //  std:: exceptions
+#ifdef BOOST_NO_TYPEID
+#define CATCH_AND_REPORT_STD_EXCEPTION( ex_name )                           \
+    catch( ex_name const& ex )                                              \
+       { detail::report_error( execution_exception::cpp_exception_error,    \
+                          current_exception_cast<pdalboost::exception const>(), \
+                          #ex_name ": %s", ex.what() ); }                   \
+/**/
+#else
+#define CATCH_AND_REPORT_STD_EXCEPTION( ex_name )                           \
+    catch( ex_name const& ex )                                              \
+        { detail::report_error( execution_exception::cpp_exception_error,   \
+                          current_exception_cast<pdalboost::exception const>(), \
+                          "%s: %s", detail::typeid_name(ex), ex.what() ); } \
+/**/
+#endif
+
+    CATCH_AND_REPORT_STD_EXCEPTION( std::bad_alloc )
+
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)
+    CATCH_AND_REPORT_STD_EXCEPTION( std::bad_cast )
+    CATCH_AND_REPORT_STD_EXCEPTION( std::bad_typeid )
+#else
+    CATCH_AND_REPORT_STD_EXCEPTION( std::bad_cast )
+    CATCH_AND_REPORT_STD_EXCEPTION( std::bad_typeid )
+#endif
+
+    CATCH_AND_REPORT_STD_EXCEPTION( std::bad_exception )
+    CATCH_AND_REPORT_STD_EXCEPTION( std::domain_error )
+    CATCH_AND_REPORT_STD_EXCEPTION( std::invalid_argument )
+    CATCH_AND_REPORT_STD_EXCEPTION( std::length_error )
+    CATCH_AND_REPORT_STD_EXCEPTION( std::out_of_range )
+    CATCH_AND_REPORT_STD_EXCEPTION( std::range_error )
+    CATCH_AND_REPORT_STD_EXCEPTION( std::overflow_error )
+    CATCH_AND_REPORT_STD_EXCEPTION( std::underflow_error )
+    CATCH_AND_REPORT_STD_EXCEPTION( std::logic_error )
+    CATCH_AND_REPORT_STD_EXCEPTION( std::runtime_error )
+    CATCH_AND_REPORT_STD_EXCEPTION( std::exception )
+#undef CATCH_AND_REPORT_STD_EXCEPTION
+
+    catch( pdalboost::exception const& ex )
+      { detail::report_error( execution_exception::cpp_exception_error,
+                              &ex,
+#ifdef BOOST_NO_TYPEID
+                              "unknown pdalboost::exception" ); }
+#else
+                              typeid(ex).name()          ); }
+#endif
+
+    // system errors
+    catch( system_error const& ex )
+      { detail::report_error( execution_exception::cpp_exception_error,
+                              "system_error produced by: %s: %s", ex.p_failed_exp, std::strerror( ex.p_errno ) ); }
+    catch( detail::system_signal_exception const& ex )
+      { ex.report(); }
+
+    // not an error
+    catch( execution_aborted const& )
+      { return 0; }
+
+    // just forward
+    catch( execution_exception const& )
+      { throw; }
+
+    // unknown error
+    catch( ... )
+      { detail::report_error( execution_exception::cpp_exception_error, "unknown type" ); }
+
+#endif // !BOOST_NO_EXCEPTION
+
+    return 0;  // never reached; supplied to quiet compiler warnings
+} // execute
+
+//____________________________________________________________________________//
+
+namespace detail {
+
+struct forward {
+    explicit    forward( pdalboost::function<void ()> const& F ) : m_F( F ) {}
+
+    int         operator()() { m_F(); return 0; }
+
+    pdalboost::function<void ()> const& m_F;
+};
+
+} // namespace detail
+void
+execution_monitor::vexecute( pdalboost::function<void ()> const& F )
+{
+    execute( detail::forward( F ) );
+}
+
+// ************************************************************************** //
+// **************                  system_error                ************** //
+// ************************************************************************** //
+
+system_error::system_error( char const* exp )
+#ifdef UNDER_CE
+: p_errno( GetLastError() )
+#else
+: p_errno( errno )
+#endif
+, p_failed_exp( exp )
+{}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************              execution_exception             ************** //
+// ************************************************************************** //
+
+execution_exception::execution_exception( error_code ec_, const_string what_msg_, location const& location_ )
+: m_error_code( ec_ )
+, m_what( what_msg_.empty() ? BOOST_TEST_L( "uncaught exception, system error or abort requested" ) : what_msg_ )
+, m_location( location_ )
+{}
+
+//____________________________________________________________________________//
+
+execution_exception::location::location( char const* file_name, size_t line_num, char const* func )
+: m_file_name( file_name ? file_name : "unknown location" )
+, m_line_num( line_num )
+, m_function( func )
+{}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************Floating point exception management interface ************** //
+// ************************************************************************** //
+
+namespace fpe {
+
+unsigned
+enable( unsigned mask )
+{
+    pdalboost::ignore_unused(mask);
+
+#if defined(UNDER_CE)
+    /* Not Implemented in Windows CE */
+    return 0;
+#elif defined(BOOST_SEH_BASED_SIGNAL_HANDLING)
+    _clearfp();
+
+#if BOOST_WORKAROUND( BOOST_MSVC, <= 1310)
+    unsigned old_cw = ::_controlfp( 0, 0 );
+    ::_controlfp( old_cw & ~mask, BOOST_FPE_ALL );
+#else
+    unsigned old_cw;
+    if( ::_controlfp_s( &old_cw, 0, 0 ) != 0 )
+        return BOOST_FPE_INV;
+
+    // Set the control word
+    if( ::_controlfp_s( 0, old_cw & ~mask, BOOST_FPE_ALL ) != 0 )
+        return BOOST_FPE_INV;
+#endif
+
+    return ~old_cw & BOOST_FPE_ALL;
+#elif defined(__GLIBC__) && defined(__USE_GNU) && !defined(BOOST_CLANG) && !defined(BOOST_NO_FENV_H)
+    ::feclearexcept(BOOST_FPE_ALL);
+    int res = ::feenableexcept( mask );
+    return res == -1 ? (unsigned)BOOST_FPE_INV : (unsigned)res;
+#else
+    /* Not Implemented  */
+    return 0;
+#endif
+}
+
+//____________________________________________________________________________//
+
+unsigned
+disable( unsigned mask )
+{
+    pdalboost::ignore_unused(mask);
+
+#if defined(UNDER_CE)
+    /* Not Implemented in Windows CE */
+    return 0;
+#elif defined(BOOST_SEH_BASED_SIGNAL_HANDLING)
+    _clearfp();
+
+#if BOOST_WORKAROUND( BOOST_MSVC, <= 1310)
+    unsigned old_cw = ::_controlfp( 0, 0 );
+    ::_controlfp( old_cw | mask, BOOST_FPE_ALL );
+#else
+    unsigned old_cw;
+    if( ::_controlfp_s( &old_cw, 0, 0 ) != 0 )
+        return BOOST_FPE_INV;
+
+    // Set the control word
+    if( ::_controlfp_s( 0, old_cw | mask, BOOST_FPE_ALL ) != 0 )
+        return BOOST_FPE_INV;
+#endif
+
+    return ~old_cw & BOOST_FPE_ALL;
+#elif defined(__GLIBC__) && defined(__USE_GNU) && !defined(BOOST_CLANG) && !defined(BOOST_NO_FENV_H)
+    ::feclearexcept(BOOST_FPE_ALL);
+    int res = ::fedisableexcept( mask );
+    return res == -1 ? (unsigned)BOOST_FPE_INV : (unsigned)res;
+#else
+    /* Not Implemented */
+    return BOOST_FPE_INV;
+#endif
+}
+
+//____________________________________________________________________________//
+
+} // namespace fpe
+
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_EXECUTION_MONITOR_IPP_012205GER
+
diff --git a/vendor/pdalboost/boost/test/impl/framework.ipp b/vendor/pdalboost/boost/test/impl/framework.ipp
new file mode 100644
index 0000000..51b9125
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/framework.ipp
@@ -0,0 +1,1295 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : implements framework API - main driver for the test
+// ***************************************************************************
+
+#ifndef BOOST_TEST_FRAMEWORK_IPP_021005GER
+#define BOOST_TEST_FRAMEWORK_IPP_021005GER
+
+// Boost.Test
+#include <boost/test/framework.hpp>
+#include <boost/test/execution_monitor.hpp>
+#include <boost/test/debug.hpp>
+#include <boost/test/unit_test_parameters.hpp>
+
+#include <boost/test/unit_test_log.hpp>
+#include <boost/test/unit_test_monitor.hpp>
+#include <boost/test/results_collector.hpp>
+#include <boost/test/progress_monitor.hpp>
+#include <boost/test/results_reporter.hpp>
+
+#include <boost/test/tree/observer.hpp>
+#include <boost/test/tree/test_unit.hpp>
+#include <boost/test/tree/visitor.hpp>
+#include <boost/test/tree/traverse.hpp>
+#include <boost/test/tree/test_case_counter.hpp>
+
+#if BOOST_TEST_SUPPORT_TOKEN_ITERATOR
+#include <boost/test/utils/iterator/token_iterator.hpp>
+#endif
+
+#include <boost/test/utils/foreach.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/throw_exception.hpp>
+
+// Boost
+#include <boost/timer.hpp>
+#include <boost/bind.hpp>
+
+// STL
+#include <limits>
+#include <map>
+#include <set>
+#include <cstdlib>
+#include <ctime>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::time; using ::srand; }
+#endif
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace framework {
+namespace impl {
+
+// ************************************************************************** //
+// **************            order detection helpers           ************** //
+// ************************************************************************** //
+
+struct order_info {
+    order_info() : depth(-1) {}
+
+    int                         depth;
+    std::vector<test_unit_id>   dependant_siblings;
+};
+
+typedef std::set<test_unit_id> tu_id_set;
+typedef std::map<test_unit_id,order_info> order_info_per_tu; // !! ?? unordered map
+
+//____________________________________________________________________________//
+
+static test_unit_id
+get_tu_parent( test_unit_id tu_id )
+{
+    return framework::get( tu_id, TUT_ANY ).p_parent_id;
+}
+
+//____________________________________________________________________________//
+
+static int
+tu_depth( test_unit_id tu_id, test_unit_id master_tu_id, order_info_per_tu& tuoi )
+{
+    if( tu_id == master_tu_id )
+        return 0;
+
+    order_info& info = tuoi[tu_id];
+    
+    if( info.depth == -1 )
+        info.depth = tu_depth( get_tu_parent( tu_id ), master_tu_id, tuoi ) + 1;
+
+    return info.depth;
+}
+
+//____________________________________________________________________________//
+
+static void
+collect_dependant_siblings( test_unit_id from, test_unit_id to, test_unit_id master_tu_id, order_info_per_tu& tuoi )
+{
+    int from_depth  = tu_depth( from, master_tu_id, tuoi );
+    int to_depth    = tu_depth( to, master_tu_id, tuoi );
+
+    while(from_depth > to_depth) {
+        from = get_tu_parent( from );
+        --from_depth;
+    }
+
+    while(from_depth < to_depth) {
+        to = get_tu_parent( to );
+        --to_depth;
+    }
+
+    while(true) {
+        test_unit_id from_parent = get_tu_parent( from );
+        test_unit_id to_parent = get_tu_parent( to );
+        if( from_parent == to_parent )
+            break;
+        from = from_parent;
+        to   = to_parent;
+    }
+
+    tuoi[from].dependant_siblings.push_back( to );
+}
+
+//____________________________________________________________________________//
+
+static counter_t
+assign_sibling_rank( test_unit_id tu_id, order_info_per_tu& tuoi )
+{
+    test_unit& tu = framework::get( tu_id, TUT_ANY );
+
+    BOOST_TEST_SETUP_ASSERT( tu.p_sibling_rank != (std::numeric_limits<counter_t>::max)(),
+                             "Cyclic dependency detected involving test unit \"" + tu.full_name() + "\"" );
+
+    if( tu.p_sibling_rank != 0 )
+        return tu.p_sibling_rank;
+
+    order_info const& info = tuoi[tu_id];
+
+    // indicate in progress
+    tu.p_sibling_rank.value = (std::numeric_limits<counter_t>::max)();
+
+    counter_t new_rank = 1;
+    BOOST_TEST_FOREACH( test_unit_id, sibling_id, info.dependant_siblings )
+        new_rank = (std::max)(new_rank, assign_sibling_rank( sibling_id, tuoi ) + 1);
+
+    return tu.p_sibling_rank.value = new_rank;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************            test_init call wrapper            ************** //
+// ************************************************************************** //
+
+static void
+invoke_init_func( init_unit_test_func init_func )
+{
+#ifdef BOOST_TEST_ALTERNATIVE_INIT_API
+    BOOST_TEST_I_ASSRT( (*init_func)(), std::runtime_error( "test module initialization failed" ) );
+#else
+    test_suite*  manual_test_units = (*init_func)( framework::master_test_suite().argc, framework::master_test_suite().argv );
+
+    if( manual_test_units )
+        framework::master_test_suite().add( manual_test_units );
+#endif
+}
+
+// ************************************************************************** //
+// **************                  name_filter                 ************** //
+// ************************************************************************** //
+
+class name_filter : public test_tree_visitor {
+    struct component {
+        component( const_string name ) // has to be implicit
+        {
+            if( name == "*" )
+                m_kind  = SFK_ALL;
+            else if( first_char( name ) == '*' && last_char( name ) == '*' ) {
+                m_kind  = SFK_SUBSTR;
+                m_name  = name.substr( 1, name.size()-1 );
+            }
+            else if( first_char( name ) == '*' ) {
+                m_kind  = SFK_TRAILING;
+                m_name  = name.substr( 1 );
+            }
+            else if( last_char( name ) == '*' ) {
+                m_kind  = SFK_LEADING;
+                m_name  = name.substr( 0, name.size()-1 );
+            }
+            else {
+                m_kind  = SFK_MATCH;
+                m_name  = name;
+            }
+        }
+
+        bool            pass( test_unit const& tu ) const
+        {
+            const_string name( tu.p_name );
+
+            switch( m_kind ) {
+            default:
+            case SFK_ALL:
+                return true;
+            case SFK_LEADING:
+                return name.substr( 0, m_name.size() ) == m_name;
+            case SFK_TRAILING:
+                return name.size() >= m_name.size() && name.substr( name.size() - m_name.size() ) == m_name;
+            case SFK_SUBSTR:
+                return name.find( m_name ) != const_string::npos;
+            case SFK_MATCH:
+                return m_name == tu.p_name.get();
+            }
+        }
+        enum kind { SFK_ALL, SFK_LEADING, SFK_TRAILING, SFK_SUBSTR, SFK_MATCH };
+
+        kind            m_kind;
+        const_string    m_name;
+    };
+
+public:
+    // Constructor
+    name_filter( test_unit_id_list& targ_list, const_string filter_expr ) : m_targ_list( targ_list ), m_depth( 0 )
+    {
+#ifdef BOOST_TEST_SUPPORT_TOKEN_ITERATOR
+        utils::string_token_iterator tit( filter_expr, (utils::dropped_delimeters = "/", 
+                                                        utils::kept_delimeters = utils::dt_none) );
+
+        while( tit != utils::string_token_iterator() ) {
+            m_components.push_back( 
+                std::vector<component>( utils::string_token_iterator( *tit, (utils::dropped_delimeters = ",", 
+                                                                             utils::kept_delimeters = utils::dt_none) ),
+                                        utils::string_token_iterator() ) );
+
+            ++tit;
+        }
+#endif
+    }
+
+private:
+    bool            filter_unit( test_unit const& tu )
+    {
+        // skip master test suite
+        if( m_depth == 0 )
+            return true;
+
+        // corresponding name filters are at level m_depth-1
+        std::vector<component> const& filters = m_components[m_depth-1];
+
+        // look for match
+        return std::find_if( filters.begin(), filters.end(), bind( &component::pass, _1, pdalboost::ref(tu) ) ) != filters.end();
+    }
+
+    // test_tree_visitor interface
+    virtual void    visit( test_case const& tc )
+    {
+        // make sure we only accept test cases if we match last component of the filter
+        if( m_depth == m_components.size() && filter_unit( tc ) )
+            m_targ_list.push_back( tc.p_id ); // found a test case
+    }
+    virtual bool    test_suite_start( test_suite const& ts )
+    {
+        if( !filter_unit( ts ) )
+            return false;
+
+        if( m_depth < m_components.size() ) {
+            ++m_depth;
+            return true;
+        }
+
+        m_targ_list.push_back( ts.p_id ); // found a test suite
+
+        return false;
+    }
+    virtual void    test_suite_finish( test_suite const& /*ts*/ )
+    {
+        --m_depth;
+    }
+
+    // Data members
+    typedef std::vector<std::vector<component> > components_per_level;
+
+    components_per_level    m_components;
+    test_unit_id_list&      m_targ_list;
+    unsigned                m_depth;
+};
+
+// ************************************************************************** //
+// **************                 label_filter                 ************** //
+// ************************************************************************** //
+
+class label_filter : public test_tree_visitor {
+public:
+    label_filter( test_unit_id_list& targ_list, const_string label )
+    : m_targ_list( targ_list )
+    , m_label( label )
+    {}
+
+private:
+    // test_tree_visitor interface
+    virtual bool    visit( test_unit const& tu )
+    {
+        if( tu.has_label( m_label ) ) {
+            // found a test unit; add it to list of tu to enable with children and stop recursion in case of suites
+            m_targ_list.push_back( tu.p_id );
+            return false;
+        }
+
+        return true;
+    }
+
+    // Data members
+    test_unit_id_list&  m_targ_list;
+    const_string        m_label;
+};
+
+// ************************************************************************** //
+// **************                set_run_status                ************** //
+// ************************************************************************** //
+
+class set_run_status : public test_tree_visitor {
+public:
+    explicit set_run_status( test_unit::run_status rs, test_unit_id_list* dep_collector = 0 )
+    : m_new_status( rs )
+    , m_dep_collector( dep_collector )
+    {}
+
+private:
+    // test_tree_visitor interface
+    virtual bool    visit( test_unit const& tu )
+    {
+        const_cast<test_unit&>(tu).p_run_status.value = m_new_status == test_unit::RS_INVALID ? tu.p_default_status : m_new_status;
+
+        if( m_dep_collector ) {
+            BOOST_TEST_FOREACH( test_unit_id, dep_id, tu.p_dependencies.get() ) {
+                test_unit const& dep = framework::get( dep_id, TUT_ANY );
+
+                if( dep.p_run_status == tu.p_run_status )
+                    continue;
+
+                BOOST_TEST_MESSAGE( "Including test " << dep.p_type_name << ' ' << dep.full_name() <<
+                                    " as a dependency of test " << tu.p_type_name << ' ' << tu.full_name() );
+
+                m_dep_collector->push_back( dep_id );
+            }
+        }
+        return true;
+    }
+
+    // Data members
+    test_unit::run_status   m_new_status;
+    test_unit_id_list*      m_dep_collector;
+};
+
+// ************************************************************************** //
+// **************                 parse_filters                ************** //
+// ************************************************************************** //
+
+static void
+add_filtered_test_units( test_unit_id master_tu_id, const_string filter, test_unit_id_list& targ )
+{
+    // Choose between two kinds of filters
+    if( filter[0] == '@' ) {
+        filter.trim_left( 1 );
+        label_filter lf( targ, filter );
+        traverse_test_tree( master_tu_id, lf, true );
+    }
+    else {
+        name_filter nf( targ, filter );
+        traverse_test_tree( master_tu_id, nf, true );
+    }
+}
+
+//____________________________________________________________________________//
+
+static bool
+parse_filters( test_unit_id master_tu_id, test_unit_id_list& tu_to_enable, test_unit_id_list& tu_to_disable )
+{
+    // 10. collect tu to enable and disable based on filters
+    bool had_selector_filter = false;
+
+    std::vector<std::string> const& filters = runtime_config::get<std::vector<std::string> >( runtime_config::RUN_FILTERS );
+
+    BOOST_TEST_FOREACH( const_string, filter, filters ) {
+        BOOST_TEST_SETUP_ASSERT( !filter.is_empty(), "Invalid filter specification" );
+
+        enum { SELECTOR, ENABLER, DISABLER } filter_type = SELECTOR;
+
+        // 11. Deduce filter type
+        if( filter[0] == '!' || filter[0] == '+' ) {
+            filter_type = filter[0] == '+' ? ENABLER : DISABLER;
+            filter.trim_left( 1 );
+            BOOST_TEST_SETUP_ASSERT( !filter.is_empty(), "Invalid filter specification" );
+        }
+
+        had_selector_filter |= filter_type == SELECTOR;
+
+        // 12. Add test units to corresponding list
+        switch( filter_type ) {
+        case SELECTOR:
+        case ENABLER:  add_filtered_test_units( master_tu_id, filter, tu_to_enable ); break;
+        case DISABLER: add_filtered_test_units( master_tu_id, filter, tu_to_disable ); break;
+        }
+    }
+
+    return had_selector_filter;
+}
+
+//____________________________________________________________________________//
+
+} // namespace impl
+
+// ************************************************************************** //
+// **************               framework::state               ************** //
+// ************************************************************************** //
+
+unsigned const TIMEOUT_EXCEEDED = static_cast<unsigned>( -1 );
+
+class state {
+public:
+    state()
+    : m_curr_test_case( INV_TEST_UNIT_ID )
+    , m_next_test_case_id( MIN_TEST_CASE_ID )
+    , m_next_test_suite_id( MIN_TEST_SUITE_ID )
+    , m_test_in_progress( false )
+    , m_context_idx( 0 )
+    , m_log_sink( std::cout )
+    , m_report_sink( std::cerr )
+    {
+    }
+
+    ~state() { clear(); }
+
+    void            clear()
+    {
+        while( !m_test_units.empty() ) {
+            test_unit_store::value_type const& tu     = *m_test_units.begin();
+            test_unit const*                   tu_ptr = tu.second;
+
+            // the delete will erase this element from map
+            if( ut_detail::test_id_2_unit_type( tu.second->p_id ) == TUT_SUITE )
+                delete static_cast<test_suite const*>(tu_ptr);
+            else
+                delete static_cast<test_case const*>(tu_ptr);
+        }
+    }
+
+    void            set_tu_id( test_unit& tu, test_unit_id id ) { tu.p_id.value = id; }
+
+    //////////////////////////////////////////////////////////////////
+
+    // Validates the dependency graph and deduces the sibling dependency rank for each child
+    void       deduce_siblings_order( test_unit_id tu_id, test_unit_id master_tu_id, impl::order_info_per_tu& tuoi )
+    {
+        test_unit& tu = framework::get( tu_id, TUT_ANY );
+
+        // collect all sibling dependancy from tu own list
+        BOOST_TEST_FOREACH( test_unit_id, dep_id, tu.p_dependencies.get() )
+            collect_dependant_siblings( tu_id, dep_id, master_tu_id, tuoi );
+
+        if( tu.p_type != TUT_SUITE )
+            return;
+
+        test_suite& ts = static_cast<test_suite&>(tu);
+
+        // recursive call to children first
+        BOOST_TEST_FOREACH( test_unit_id, chld_id, ts.m_children )
+            deduce_siblings_order( chld_id, master_tu_id, tuoi );
+
+        BOOST_TEST_FOREACH( test_unit_id, chld_id, ts.m_children ) {
+            counter_t rank = assign_sibling_rank( chld_id, tuoi );
+            ts.m_ranked_children.insert( std::make_pair( rank, chld_id ) );
+        }
+    }
+
+    //////////////////////////////////////////////////////////////////
+
+    // Finalize default run status:
+    //  1) inherit run status from parent where applicable
+    //  2) if any of test units in test suite enabled enable it as well
+    bool            finalize_default_run_status( test_unit_id tu_id, test_unit::run_status parent_status )
+    {
+        test_unit& tu = framework::get( tu_id, TUT_ANY );
+
+        if( tu.p_default_status == test_suite::RS_INHERIT )
+            tu.p_default_status.value = parent_status;
+
+        // go through list of children
+        if( tu.p_type == TUT_SUITE ) {
+            bool has_enabled_child = false;
+            BOOST_TEST_FOREACH( test_unit_id, chld_id, static_cast<test_suite const&>(tu).m_children )
+                has_enabled_child |= finalize_default_run_status( chld_id, tu.p_default_status );
+
+            tu.p_default_status.value = has_enabled_child ? test_suite::RS_ENABLED : test_suite::RS_DISABLED;
+        }
+
+        return tu.p_default_status == test_suite::RS_ENABLED;
+    }
+
+    //////////////////////////////////////////////////////////////////
+
+    bool            finalize_run_status( test_unit_id tu_id )
+    {
+        test_unit& tu = framework::get( tu_id, TUT_ANY );
+
+        // go through list of children
+        if( tu.p_type == TUT_SUITE ) {
+            bool has_enabled_child = false;
+            BOOST_TEST_FOREACH( test_unit_id, chld_id, static_cast<test_suite const&>(tu).m_children)
+                has_enabled_child |= finalize_run_status( chld_id );
+
+            tu.p_run_status.value = has_enabled_child ? test_suite::RS_ENABLED : test_suite::RS_DISABLED;
+        }
+
+        return tu.is_enabled();
+    }
+
+    //////////////////////////////////////////////////////////////////
+
+    void            deduce_run_status( test_unit_id master_tu_id )
+    {
+        using namespace framework::impl;
+        test_unit_id_list tu_to_enable;
+        test_unit_id_list tu_to_disable;
+
+        // 10. If there are any filters supplied, figure out lists of test units to enable/disable
+        bool had_selector_filter = !runtime_config::get<std::vector<std::string> >( runtime_config::RUN_FILTERS ).empty() &&
+                                   parse_filters( master_tu_id, tu_to_enable, tu_to_disable );
+
+        // 20. Set the stage: either use default run status or disable all test units
+        set_run_status initial_setter( had_selector_filter ? test_unit::RS_DISABLED : test_unit::RS_INVALID );
+        traverse_test_tree( master_tu_id, initial_setter, true );
+
+        // 30. Apply all selectors and enablers.
+        while( !tu_to_enable.empty() ) {
+            test_unit& tu = framework::get( tu_to_enable.back(), TUT_ANY );
+
+            tu_to_enable.pop_back();
+
+            // 35. Ignore test units which already enabled
+            if( tu.is_enabled() )
+                continue;
+
+            // set new status and add all dependencies into tu_to_enable
+            set_run_status enabler( test_unit::RS_ENABLED, &tu_to_enable );
+            traverse_test_tree( tu.p_id, enabler, true );
+        }
+
+        // 40. Apply all disablers
+        while( !tu_to_disable.empty() ) {
+            test_unit const& tu = framework::get( tu_to_disable.back(), TUT_ANY );
+
+            tu_to_disable.pop_back();
+
+            // 35. Ignore test units which already disabled
+            if( !tu.is_enabled() )
+                continue;
+
+            set_run_status disabler( test_unit::RS_DISABLED );
+            traverse_test_tree( tu.p_id, disabler, true );
+        }
+
+        // 50. Make sure parents of enabled test units are also enabled
+        finalize_run_status( master_tu_id );
+    }
+
+    //////////////////////////////////////////////////////////////////
+
+    typedef unit_test_monitor_t::error_level execution_result;
+
+      // Executed the test tree with the root at specified test unit
+    execution_result execute_test_tree( test_unit_id tu_id, unsigned timeout = 0 )
+    {
+        test_unit const& tu = framework::get( tu_id, TUT_ANY );
+
+        execution_result result = unit_test_monitor_t::test_ok;
+
+        if( !tu.is_enabled() )
+            return result;
+
+        // 10. Check preconditions, including zero time left for execution and
+        // successful execution of all dependencies
+        if( timeout == TIMEOUT_EXCEEDED ) {
+            // notify all observers about skipped test unit
+            BOOST_TEST_FOREACH( test_observer*, to, m_observers )
+                to->test_unit_skipped( tu, "timeout for the test unit is exceeded" );
+
+            return unit_test_monitor_t::os_timeout;
+        }
+        else if( timeout == 0 || timeout > tu.p_timeout ) // deduce timeout for this test unit
+            timeout = tu.p_timeout;
+
+        test_tools::assertion_result const precondition_res = tu.check_preconditions();
+        if( !precondition_res ) {
+            // notify all observers about skipped test unit
+            BOOST_TEST_FOREACH( test_observer*, to, m_observers )
+                to->test_unit_skipped( tu, precondition_res.message() );
+
+            return unit_test_monitor_t::precondition_failure;
+        }
+
+        // 20. Notify all observers about the start of the test unit
+        BOOST_TEST_FOREACH( test_observer*, to, m_observers )
+            to->test_unit_start( tu );
+
+        // 30. Execute setup fixtures if any; any failure here leads to test unit abortion
+        BOOST_TEST_FOREACH( test_unit_fixture_ptr, F, tu.p_fixtures.get() ) {
+            result = unit_test_monitor.execute_and_translate( pdalboost::bind( &test_unit_fixture::setup, F ) );
+            if( result != unit_test_monitor_t::test_ok )
+                break;
+        }
+
+        // This is the time we are going to spend executing the test unit
+        unsigned long elapsed = 0;
+
+        if( result == unit_test_monitor_t::test_ok ) {
+            // 40. We are going to time the execution
+            pdalboost::timer tu_timer;
+
+            if( tu.p_type == TUT_SUITE ) {
+                test_suite const& ts = static_cast<test_suite const&>( tu );
+
+                if( runtime_config::get<unsigned>( runtime_config::RANDOM_SEED ) == 0 ) {
+                    typedef std::pair<counter_t,test_unit_id> value_type;
+
+                    BOOST_TEST_FOREACH( value_type, chld, ts.m_ranked_children ) {
+                        unsigned chld_timeout = child_timeout( timeout, tu_timer.elapsed() );
+
+                        result = (std::min)( result, execute_test_tree( chld.second, chld_timeout ) );
+
+                        if( unit_test_monitor.is_critical_error( result ) )
+                            break;
+                    }
+                }
+                else {
+                    // Go through ranges of chldren with the same dependency rank and shuffle them
+                    // independently. Execute each subtree in this order
+                    test_unit_id_list children_with_the_same_rank;
+
+                    typedef test_suite::children_per_rank::const_iterator it_type;
+                    it_type it = ts.m_ranked_children.begin();
+                    while( it != ts.m_ranked_children.end() ) {
+                        children_with_the_same_rank.clear();
+
+                        std::pair<it_type,it_type> range = ts.m_ranked_children.equal_range( it->first );
+                        it = range.first;
+                        while( it != range.second ) {
+                            children_with_the_same_rank.push_back( it->second );
+                            it++;
+                        }
+
+                        std::random_shuffle( children_with_the_same_rank.begin(), children_with_the_same_rank.end() );
+
+                        BOOST_TEST_FOREACH( test_unit_id, chld, children_with_the_same_rank ) {
+                            unsigned chld_timeout = child_timeout( timeout, tu_timer.elapsed() );
+
+                            result = (std::min)( result, execute_test_tree( chld, chld_timeout ) );
+
+                            if( unit_test_monitor.is_critical_error( result ) )
+                                break;
+                        }
+                    }
+                }
+
+                elapsed = static_cast<unsigned long>( tu_timer.elapsed() * 1e6 );
+            }
+            else { // TUT_CASE
+                test_case const& tc = static_cast<test_case const&>( tu );
+
+                // setup contexts
+                m_context_idx = 0;
+
+                // setup current test case
+                test_unit_id bkup = m_curr_test_case;
+                m_curr_test_case = tc.p_id;
+
+                // execute the test case body
+                result = unit_test_monitor.execute_and_translate( tc.p_test_func, timeout );
+                elapsed = static_cast<unsigned long>( tu_timer.elapsed() * 1e6 );
+
+                // cleanup leftover context
+                m_context.clear();
+
+                // restore state and abort if necessary
+                m_curr_test_case = bkup;
+            }
+        }
+
+        // if run error is critical skip teardown, who knows what the state of the program at this point
+        if( !unit_test_monitor.is_critical_error( result ) ) {
+            // execute teardown fixtures if any in reverse order
+            BOOST_TEST_REVERSE_FOREACH( test_unit_fixture_ptr, F, tu.p_fixtures.get() ) {
+                result = (std::min)( result, unit_test_monitor.execute_and_translate( pdalboost::bind( &test_unit_fixture::teardown, F ), 0 ) );
+
+                if( unit_test_monitor.is_critical_error( result ) )
+                    break;
+            }
+        }
+
+        // notify all observers about abortion
+        if( unit_test_monitor.is_critical_error( result ) ) {
+            BOOST_TEST_FOREACH( test_observer*, to, m_observers )
+                to->test_aborted();
+        }
+
+        // notify all observers about completion
+        BOOST_TEST_REVERSE_FOREACH( test_observer*, to, m_observers )
+            to->test_unit_finish( tu, elapsed );
+
+        return result;
+    }
+
+    //////////////////////////////////////////////////////////////////
+
+    unsigned child_timeout( unsigned tu_timeout, double elapsed )
+    {
+      if( tu_timeout == 0U )
+          return 0U;
+
+      unsigned elpsed_sec = static_cast<unsigned>(elapsed); // rounding to number of whole seconds
+
+      return tu_timeout > elpsed_sec ? tu_timeout - elpsed_sec : TIMEOUT_EXCEEDED;
+    }
+
+    struct priority_order {
+        bool operator()( test_observer* lhs, test_observer* rhs ) const
+        {
+            return (lhs->priority() < rhs->priority()) || ((lhs->priority() == rhs->priority()) && (lhs < rhs));
+        }
+    };
+
+    // Data members
+    typedef std::map<test_unit_id,test_unit*>       test_unit_store;
+    typedef std::set<test_observer*,priority_order> observer_store;
+    struct context_frame {
+        context_frame( std::string const& d, int id, bool sticky )
+        : descr( d )
+        , frame_id( id )
+        , is_sticky( sticky )
+        {}
+
+        std::string descr;
+        int         frame_id;
+        bool        is_sticky;
+    };
+    typedef std::vector<context_frame> context_data;
+
+    master_test_suite_t* m_master_test_suite;
+    std::vector<test_suite*> m_auto_test_suites;
+
+    test_unit_id    m_curr_test_case;
+    test_unit_store m_test_units;
+
+    test_unit_id    m_next_test_case_id;
+    test_unit_id    m_next_test_suite_id;
+
+    bool            m_test_in_progress;
+
+    observer_store  m_observers;
+    context_data    m_context;
+    int             m_context_idx;
+
+    pdalboost::execution_monitor m_aux_em;
+
+    runtime_config::stream_holder m_log_sink;
+    runtime_config::stream_holder m_report_sink;
+};
+
+//____________________________________________________________________________//
+
+namespace impl {
+namespace {
+
+#if defined(__CYGWIN__)
+framework::state& s_frk_state() { static framework::state* the_inst = 0; if(!the_inst) the_inst = new framework::state; return *the_inst; }
+#else
+framework::state& s_frk_state() { static framework::state the_inst; return the_inst; }
+#endif
+
+} // local namespace
+
+void
+setup_for_execution( test_unit const& tu )
+{
+    s_frk_state().deduce_run_status( tu.p_id );
+}
+ 
+//____________________________________________________________________________//
+
+} // namespace impl
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                framework::init               ************** //
+// ************************************************************************** //
+
+void
+init( init_unit_test_func init_func, int argc, char* argv[] )
+{
+    using namespace impl;
+
+    // 10. Set up runtime parameters
+    runtime_config::init( argc, argv );
+
+    // 20. Set the desired log level, format and sink
+    unit_test_log.set_threshold_level( runtime_config::get<log_level>( runtime_config::LOG_LEVEL ) );
+    unit_test_log.set_format( runtime_config::get<output_format>( runtime_config::LOG_FORMAT ) );
+    s_frk_state().m_log_sink.setup( runtime_config::LOG_SINK );
+    unit_test_log.set_stream( s_frk_state().m_log_sink.ref() );
+
+    // 30. Set the desired report level, format and sink
+    results_reporter::set_level( runtime_config::get<report_level>( runtime_config::REPORT_LEVEL ) );
+    results_reporter::set_format( runtime_config::get<output_format>( runtime_config::REPORT_FORMAT ) );
+    s_frk_state().m_report_sink.setup( runtime_config::REPORT_SINK );
+    results_reporter::set_stream( s_frk_state().m_report_sink.ref() );
+
+    // 40. Register default test observers
+    register_observer( results_collector );
+    register_observer( unit_test_log );
+
+    if( runtime_config::get<bool>( runtime_config::SHOW_PROGRESS ) ) {
+        progress_monitor.set_stream( s_frk_state().m_log_sink.ref() );
+        register_observer( progress_monitor );
+    }
+
+    // 50. Set up memory leak detection
+    unsigned long detect_mem_leak = runtime_config::get<unsigned long>( runtime_config::DETECT_MEM_LEAKS );
+    if( detect_mem_leak > 0 ) {
+        debug::detect_memory_leaks( true, runtime_config::get<std::string>( runtime_config::REPORT_MEM_LEAKS ) );
+        debug::break_memory_alloc( (long)detect_mem_leak );
+    }
+
+    // 60. Initialize master unit test suite
+    master_test_suite().argc = argc;
+    master_test_suite().argv = argv;
+
+    // 70. Invoke test module initialization routine
+    BOOST_TEST_I_TRY {
+        s_frk_state().m_aux_em.vexecute( pdalboost::bind( &impl::invoke_init_func, init_func ) );
+    }
+    BOOST_TEST_I_CATCH( execution_exception, ex )  {
+        BOOST_TEST_SETUP_ASSERT( false, ex.what() );
+    }
+}
+
+//____________________________________________________________________________//
+
+void
+finalize_setup_phase( test_unit_id master_tu_id )
+{
+    if( master_tu_id == INV_TEST_UNIT_ID )
+        master_tu_id = master_test_suite().p_id;
+
+    // 10. Apply all decorators to the auto test units
+    class apply_decorators : public test_tree_visitor {
+    private:
+        // test_tree_visitor interface
+        virtual bool    visit( test_unit const& tu )
+        {
+            BOOST_TEST_FOREACH( decorator::base_ptr, d, tu.p_decorators.get() )
+                d->apply( const_cast<test_unit&>(tu) );
+
+            return true;
+        }
+    } ad;
+    traverse_test_tree( master_tu_id, ad, true );
+
+    // 20. Finalize setup phase
+    impl::order_info_per_tu tuoi;
+    impl::s_frk_state().deduce_siblings_order( master_tu_id, master_tu_id, tuoi );
+    impl::s_frk_state().finalize_default_run_status( master_tu_id, test_unit::RS_INVALID );
+}
+
+// ************************************************************************** //
+// **************               test_in_progress               ************** //
+// ************************************************************************** //
+
+bool
+test_in_progress()
+{
+    return impl::s_frk_state().m_test_in_progress;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************             framework::shutdown              ************** //
+// ************************************************************************** //
+
+void
+shutdown()
+{
+    // eliminating some fake memory leak reports. See for more details:
+    // http://connect.microsoft.com/VisualStudio/feedback/details/106937/memory-leaks-reported-by-debug-crt-inside-typeinfo-name
+
+#  if BOOST_WORKAROUND(BOOST_MSVC,  <= 1600 ) && !defined(_DLL) && defined(_DEBUG)
+#  if BOOST_WORKAROUND(BOOST_MSVC,  < 1600 )
+#define _Next next
+#define _MemPtr memPtr
+#endif
+   __type_info_node* pNode   = __type_info_root_node._Next;
+   __type_info_node* tmpNode = &__type_info_root_node;
+
+   for( ; pNode!=NULL; pNode = tmpNode ) {
+      tmpNode = pNode->_Next;
+      delete pNode->_MemPtr;
+      delete pNode;
+   }
+#  if BOOST_WORKAROUND(BOOST_MSVC,  < 1600 )
+#undef _Next
+#undef _MemPtr
+#endif
+#  endif
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************              register_test_unit              ************** //
+// ************************************************************************** //
+
+void
+register_test_unit( test_case* tc )
+{
+    BOOST_TEST_SETUP_ASSERT( tc->p_id == INV_TEST_UNIT_ID, BOOST_TEST_L( "test case already registered" ) );
+
+    test_unit_id new_id = impl::s_frk_state().m_next_test_case_id;
+
+    BOOST_TEST_SETUP_ASSERT( new_id != MAX_TEST_CASE_ID, BOOST_TEST_L( "too many test cases" ) );
+
+    typedef state::test_unit_store::value_type map_value_type;
+
+    impl::s_frk_state().m_test_units.insert( map_value_type( new_id, tc ) );
+    impl::s_frk_state().m_next_test_case_id++;
+
+    impl::s_frk_state().set_tu_id( *tc, new_id );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************              register_test_unit              ************** //
+// ************************************************************************** //
+
+void
+register_test_unit( test_suite* ts )
+{
+    BOOST_TEST_SETUP_ASSERT( ts->p_id == INV_TEST_UNIT_ID, BOOST_TEST_L( "test suite already registered" ) );
+
+    test_unit_id new_id = impl::s_frk_state().m_next_test_suite_id;
+
+    BOOST_TEST_SETUP_ASSERT( new_id != MAX_TEST_SUITE_ID, BOOST_TEST_L( "too many test suites" ) );
+
+    typedef state::test_unit_store::value_type map_value_type;
+
+    impl::s_frk_state().m_test_units.insert( map_value_type( new_id, ts ) );
+    impl::s_frk_state().m_next_test_suite_id++;
+
+    impl::s_frk_state().set_tu_id( *ts, new_id );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************             deregister_test_unit             ************** //
+// ************************************************************************** //
+
+void
+deregister_test_unit( test_unit* tu )
+{
+    impl::s_frk_state().m_test_units.erase( tu->p_id );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                     clear                    ************** //
+// ************************************************************************** //
+
+void
+clear()
+{
+    impl::s_frk_state().clear();
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               register_observer              ************** //
+// ************************************************************************** //
+
+void
+register_observer( test_observer& to )
+{
+    impl::s_frk_state().m_observers.insert( &to );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************              deregister_observer             ************** //
+// ************************************************************************** //
+
+void
+deregister_observer( test_observer& to )
+{
+    impl::s_frk_state().m_observers.erase( &to );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                  add_context                 ************** //
+// ************************************************************************** //
+
+int
+add_context( ::pdalboost::unit_test::lazy_ostream const& context_descr, bool sticky )
+{
+    std::stringstream buffer;
+    context_descr( buffer );
+    int res_idx  = impl::s_frk_state().m_context_idx++;
+
+    impl::s_frk_state().m_context.push_back( state::context_frame( buffer.str(), res_idx, sticky ) );
+
+    return res_idx;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                 clear_context                ************** //
+// ************************************************************************** //
+
+struct frame_with_id {
+    explicit frame_with_id( int id ) : m_id( id ) {}
+
+    bool    operator()( state::context_frame const& f )
+    {
+        return f.frame_id == m_id;
+    }
+    int     m_id;
+};
+
+//____________________________________________________________________________//
+
+void
+clear_context( int frame_id )
+{
+    if( frame_id == -1 ) {   // clear all non sticky frames
+        for( int i=static_cast<int>(impl::s_frk_state().m_context.size())-1; i>=0; i-- )
+            if( !impl::s_frk_state().m_context[i].is_sticky )
+                impl::s_frk_state().m_context.erase( impl::s_frk_state().m_context.begin()+i );
+    }
+
+    else { // clear specific frame
+        state::context_data::iterator it =
+            std::find_if( impl::s_frk_state().m_context.begin(), impl::s_frk_state().m_context.end(), frame_with_id( frame_id ) );
+
+        if( it != impl::s_frk_state().m_context.end() ) // really an internal error if this is not true
+            impl::s_frk_state().m_context.erase( it );
+    }
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                  get_context                 ************** //
+// ************************************************************************** //
+
+context_generator
+get_context()
+{
+    return context_generator();
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               context_generator              ************** //
+// ************************************************************************** //
+
+bool
+context_generator::is_empty() const
+{
+    return impl::s_frk_state().m_context.empty();
+}
+
+//____________________________________________________________________________//
+
+const_string
+context_generator::next() const
+{
+    return m_curr_frame < impl::s_frk_state().m_context.size() ? impl::s_frk_state().m_context[m_curr_frame++].descr : const_string();
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               master_test_suite              ************** //
+// ************************************************************************** //
+
+master_test_suite_t&
+master_test_suite()
+{
+    if( !impl::s_frk_state().m_master_test_suite )
+        impl::s_frk_state().m_master_test_suite = new master_test_suite_t;
+
+    return *impl::s_frk_state().m_master_test_suite;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************            current_auto_test_suite           ************** //
+// ************************************************************************** //
+
+test_suite&
+current_auto_test_suite( test_suite* ts, bool push_or_pop )
+{
+    if( impl::s_frk_state().m_auto_test_suites.empty() )
+        impl::s_frk_state().m_auto_test_suites.push_back( &framework::master_test_suite() );
+
+    if( !push_or_pop )
+        impl::s_frk_state().m_auto_test_suites.pop_back();
+    else if( ts )
+        impl::s_frk_state().m_auto_test_suites.push_back( ts );
+
+    return *impl::s_frk_state().m_auto_test_suites.back();
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               current_test_case              ************** //
+// ************************************************************************** //
+
+test_case const&
+current_test_case()
+{
+    return get<test_case>( impl::s_frk_state().m_curr_test_case );
+}
+
+//____________________________________________________________________________//
+
+test_unit_id
+current_test_case_id()
+{
+    return impl::s_frk_state().m_curr_test_case;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                framework::get                ************** //
+// ************************************************************************** //
+
+test_unit&
+get( test_unit_id id, test_unit_type t )
+{
+    test_unit* res = impl::s_frk_state().m_test_units[id];
+
+    BOOST_TEST_I_ASSRT( (res->p_type & t) != 0, internal_error( "Invalid test unit type" ) );
+
+    return *res;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                framework::run                ************** //
+// ************************************************************************** //
+
+void
+run( test_unit_id id, bool continue_test )
+{
+    if( id == INV_TEST_UNIT_ID )
+        id = master_test_suite().p_id;
+
+    // Figure out run status for execution phase
+    impl::s_frk_state().deduce_run_status( id );
+
+    test_case_counter tcc;
+    traverse_test_tree( id, tcc );
+
+    BOOST_TEST_SETUP_ASSERT( tcc.p_count != 0 , runtime_config::get<std::vector<std::string> >( runtime_config::RUN_FILTERS ).empty()
+        ? BOOST_TEST_L( "test tree is empty" )
+        : BOOST_TEST_L( "no test cases matching filter or all test cases were disabled" ) );
+
+    bool    was_in_progress     = framework::test_in_progress();
+    bool    call_start_finish   = !continue_test || !was_in_progress;
+
+    impl::s_frk_state().m_test_in_progress = true;
+
+    if( call_start_finish ) {
+        BOOST_TEST_FOREACH( test_observer*, to, impl::s_frk_state().m_observers ) {
+            BOOST_TEST_I_TRY {
+                impl::s_frk_state().m_aux_em.vexecute( pdalboost::bind( &test_observer::test_start, to, tcc.p_count ) );
+            }
+            BOOST_TEST_I_CATCH( execution_exception, ex ) {
+                BOOST_TEST_SETUP_ASSERT( false, ex.what() );
+            }
+        }
+    }
+
+    unsigned seed = runtime_config::get<unsigned>( runtime_config::RANDOM_SEED );
+    switch( seed ) {
+    case 0:
+        break;
+    case 1:
+        seed = static_cast<unsigned>( std::time( 0 ) );
+    default:
+        BOOST_TEST_MESSAGE( "Test cases order is shuffled using seed: " << seed );
+        std::srand( seed );
+    }
+
+    impl::s_frk_state().execute_test_tree( id );
+
+    if( call_start_finish ) {
+        BOOST_TEST_REVERSE_FOREACH( test_observer*, to, impl::s_frk_state().m_observers )
+            to->test_finish();
+    }
+
+    impl::s_frk_state().m_test_in_progress = was_in_progress;
+}
+
+//____________________________________________________________________________//
+
+void
+run( test_unit const* tu, bool continue_test )
+{
+    run( tu->p_id, continue_test );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               assertion_result               ************** //
+// ************************************************************************** //
+
+void
+assertion_result( unit_test::assertion_result ar )
+{
+    BOOST_TEST_FOREACH( test_observer*, to, impl::s_frk_state().m_observers )
+        to->assertion_result( ar );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               exception_caught               ************** //
+// ************************************************************************** //
+
+void
+exception_caught( execution_exception const& ex )
+{
+    BOOST_TEST_FOREACH( test_observer*, to, impl::s_frk_state().m_observers )
+        to->exception_caught( ex );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               test_unit_aborted              ************** //
+// ************************************************************************** //
+
+void
+test_unit_aborted( test_unit const& tu )
+{
+    BOOST_TEST_FOREACH( test_observer*, to, impl::s_frk_state().m_observers )
+        to->test_unit_aborted( tu );
+}
+
+//____________________________________________________________________________//
+
+} // namespace framework
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_FRAMEWORK_IPP_021005GER
diff --git a/vendor/pdalboost/boost/test/impl/plain_report_formatter.ipp b/vendor/pdalboost/boost/test/impl/plain_report_formatter.ipp
new file mode 100644
index 0000000..d6a5833
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/plain_report_formatter.ipp
@@ -0,0 +1,207 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : plain report formatter definition
+// ***************************************************************************
+
+#ifndef BOOST_TEST_PLAIN_REPORT_FORMATTER_IPP_020105GER
+#define BOOST_TEST_PLAIN_REPORT_FORMATTER_IPP_020105GER
+
+// Boost.Test
+#include <boost/test/output/plain_report_formatter.hpp>
+#include <boost/test/utils/custom_manip.hpp>
+#include <boost/test/results_collector.hpp>
+#include <boost/test/unit_test_parameters.hpp>
+
+#include <boost/test/tree/test_unit.hpp>
+
+#include <boost/test/utils/basic_cstring/io.hpp>
+#include <boost/test/utils/setcolor.hpp>
+
+// STL
+#include <iomanip>
+#include <boost/config/no_tr1/cmath.hpp>
+#include <iostream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+# ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::log10; }
+# endif
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace output {
+
+namespace {
+
+typedef utils::custom_manip<struct quote_t> quote;
+
+template<typename T>
+inline std::ostream&
+operator<<( utils::custom_printer<quote> const& p, T const& value )
+{
+    *p << '"' << value << '"';
+
+    return *p;
+}
+
+//____________________________________________________________________________//
+
+void
+print_stat_value( std::ostream& ostr, counter_t v, counter_t indent, counter_t total, const_string name, const_string res )
+{
+    if( v == 0 )
+        return;
+
+    if( total > 0 )
+        ostr << std::setw( static_cast<int>(indent) ) << "" << v << ' ' << name << ( v != 1 ? "s" : "" )
+             << " out of " << total << ' ' << res << '\n';
+    else
+        ostr << std::setw( static_cast<int>(indent) ) << "" << v << ' ' << res << ' ' << name << ( v != 1 ? "s" : "" ) << '\n';
+}
+
+//____________________________________________________________________________//
+
+} // local namespace
+
+// ************************************************************************** //
+// **************             plain_report_formatter           ************** //
+// ************************************************************************** //
+
+void
+plain_report_formatter::results_report_start( std::ostream& ostr )
+{
+    m_indent = 0;
+    m_color_output = runtime_config::get<bool>( runtime_config::COLOR_OUTPUT );
+    ostr << '\n';
+}
+
+//____________________________________________________________________________//
+
+void
+plain_report_formatter::results_report_finish( std::ostream& ostr )
+{
+    ostr.flush();
+}
+
+//____________________________________________________________________________//
+
+void
+plain_report_formatter::test_unit_report_start( test_unit const& tu, std::ostream& ostr )
+{
+    test_results const& tr = results_collector.results( tu.p_id );
+
+    const_string descr;
+
+    if( tr.passed() )
+        descr = "has passed";
+    else if( tr.p_skipped )
+        descr = "was skipped";
+    else if( tr.p_aborted )
+        descr = "was aborted";
+    else
+        descr = "has failed";
+
+    ostr << std::setw( static_cast<int>(m_indent) ) << ""
+         << "Test " << tu.p_type_name << ' ' << quote() << tu.full_name() << ' ' << descr;
+
+    if( tr.p_skipped ) {
+        ostr  << "\n";
+        m_indent += 2;
+        return;
+    }
+
+    counter_t total_assertions  = tr.p_assertions_passed + tr.p_assertions_failed;
+    counter_t total_tc          = tr.p_test_cases_passed + tr.p_test_cases_warned + tr.p_test_cases_failed + tr.p_test_cases_skipped;
+
+    if( total_assertions > 0 || total_tc > 0 || tr.p_warnings_failed > 0)
+        ostr << " with:";
+
+    ostr << '\n';
+    m_indent += 2;
+
+    print_stat_value( ostr, tr.p_test_cases_passed , m_indent, total_tc        , "test case", "passed" );
+    print_stat_value( ostr, tr.p_test_cases_warned , m_indent, total_tc        , "test case", "passed with warnings" );
+    print_stat_value( ostr, tr.p_test_cases_failed , m_indent, total_tc        , "test case", "failed" );
+    print_stat_value( ostr, tr.p_test_cases_skipped, m_indent, total_tc        , "test case", "skipped" );
+    print_stat_value( ostr, tr.p_test_cases_aborted, m_indent, total_tc        , "test case", "aborted" );
+    print_stat_value( ostr, tr.p_assertions_passed , m_indent, total_assertions, "assertion", "passed" );
+    print_stat_value( ostr, tr.p_assertions_failed , m_indent, total_assertions, "assertion", "failed" );
+    print_stat_value( ostr, tr.p_warnings_failed   , m_indent, 0               , "warning"  , "failed" );
+    print_stat_value( ostr, tr.p_expected_failures , m_indent, 0               , "failure"  , "expected" );
+
+    ostr << '\n';
+}
+
+//____________________________________________________________________________//
+
+void
+plain_report_formatter::test_unit_report_finish( test_unit const&, std::ostream& )
+{
+    m_indent -= 2;
+}
+
+//____________________________________________________________________________//
+
+void
+plain_report_formatter::do_confirmation_report( test_unit const& tu, std::ostream& ostr )
+{
+    test_results const& tr = results_collector.results( tu.p_id );
+
+    if( tr.passed() ) {
+        BOOST_TEST_SCOPE_SETCOLOR( m_color_output, ostr, term_attr::BRIGHT, term_color::GREEN );
+
+        ostr << "*** No errors detected\n";
+        return;
+    }
+
+    BOOST_TEST_SCOPE_SETCOLOR( m_color_output, ostr, term_attr::BRIGHT, term_color::RED );
+
+    if( tr.p_skipped ) {
+        ostr << "*** The test " << tu.p_type_name << ' ' << quote() << tu.full_name() << " was skipped"
+             << "; see standard output for details\n";
+        return;
+    }
+
+    if( tr.p_aborted ) {
+        ostr << "*** The test " << tu.p_type_name << ' ' << quote() << tu.full_name() << " was aborted"
+             << "; see standard output for details\n";
+    }
+
+    if( tr.p_assertions_failed == 0 ) {
+        if( !tr.p_aborted )
+            ostr << "*** Errors were detected in the test " << tu.p_type_name << ' ' << quote() << tu.full_name()
+                 << "; see standard output for details\n";
+        return;
+    }
+
+    counter_t num_failures = tr.p_assertions_failed;
+
+    ostr << "*** " << num_failures << " failure" << ( num_failures != 1 ? "s are" : " is" ) << " detected";
+
+    if( tr.p_expected_failures > 0 )
+        ostr << " (" << tr.p_expected_failures << " failure" << ( tr.p_expected_failures != 1 ? "s are" : " is" ) << " expected)";
+
+    ostr << " in the test " << tu.p_type_name << " " << quote() << tu.full_name() << "\n";
+}
+
+//____________________________________________________________________________//
+
+} // namespace output
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_PLAIN_REPORT_FORMATTER_IPP_020105GER
diff --git a/vendor/pdalboost/boost/test/impl/progress_monitor.ipp b/vendor/pdalboost/boost/test/impl/progress_monitor.ipp
new file mode 100644
index 0000000..21ca64e
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/progress_monitor.ipp
@@ -0,0 +1,185 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : implements simple text based progress monitor
+// ***************************************************************************
+
+#ifndef BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER
+#define BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER
+
+// Boost.Test
+#include <boost/test/progress_monitor.hpp>
+#include <boost/test/unit_test_parameters.hpp>
+
+#include <boost/test/utils/setcolor.hpp>
+
+#include <boost/test/tree/test_unit.hpp>
+#include <boost/test/tree/test_case_counter.hpp>
+#include <boost/test/tree/traverse.hpp>
+
+// Boost
+#include <boost/scoped_ptr.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************                progress_monitor              ************** //
+// ************************************************************************** //
+
+struct progress_display {
+    progress_display( counter_t expected_count, std::ostream& os )
+    : m_os(os)
+    , m_count( 0 )
+    , m_expected_count( expected_count )
+    , m_next_tic_count( 0 )
+    , m_tic( 0 )
+    {
+
+        m_os << "\n0%   10   20   30   40   50   60   70   80   90   100%"
+             << "\n|----|----|----|----|----|----|----|----|----|----|"
+             << std::endl;
+
+        if( !m_expected_count ) 
+            m_expected_count = 1;  // prevent divide by zero
+    }
+
+    unsigned long  operator+=( unsigned long increment )
+    {
+        if( (m_count += increment) < m_next_tic_count )
+            return m_count;
+
+        // use of floating point ensures that both large and small counts
+        // work correctly.  static_cast<>() is also used several places
+        // to suppress spurious compiler warnings. 
+        unsigned int tics_needed =  static_cast<unsigned int>(
+            (static_cast<double>(m_count)/m_expected_count)*50.0 );
+
+        do {
+            m_os << '*' << std::flush;
+        } while( ++m_tic < tics_needed );
+
+        m_next_tic_count = static_cast<unsigned long>((m_tic/50.0) * m_expected_count);
+
+        if( m_count == m_expected_count ) {
+            if( m_tic < 51 )
+                m_os << '*';
+
+            m_os << std::endl;
+        }
+
+        return m_count;
+    }
+    unsigned long   operator++()           { return operator+=( 1 ); }
+    unsigned long   count() const          { return m_count; }
+
+private:
+    BOOST_DELETED_FUNCTION(progress_display(progress_display const&))
+    BOOST_DELETED_FUNCTION(progress_display& operator=(progress_display const&))
+
+    std::ostream&   m_os;  // may not be present in all imps
+
+    unsigned long   m_count;
+    unsigned long   m_expected_count;
+    unsigned long   m_next_tic_count;
+    unsigned int    m_tic;
+};
+
+namespace {
+
+struct progress_monitor_impl {
+    // Constructor
+    progress_monitor_impl()
+    : m_stream( &std::cout )
+    , m_color_output( false )
+    {
+    }
+
+    std::ostream*                   m_stream;
+    scoped_ptr<progress_display>    m_progress_display;
+    bool                            m_color_output;
+};
+
+progress_monitor_impl& s_pm_impl() { static progress_monitor_impl the_inst; return the_inst; }
+
+#define PM_SCOPED_COLOR() \
+    BOOST_TEST_SCOPE_SETCOLOR( s_pm_impl().m_color_output, *s_pm_impl().m_stream, term_attr::BRIGHT, term_color::MAGENTA )
+
+} // local namespace
+
+//____________________________________________________________________________//
+
+void
+progress_monitor_t::test_start( counter_t test_cases_amount )
+{
+    s_pm_impl().m_color_output = runtime_config::get<bool>( runtime_config::COLOR_OUTPUT );
+
+    PM_SCOPED_COLOR();
+
+    s_pm_impl().m_progress_display.reset( new progress_display( test_cases_amount, *s_pm_impl().m_stream ) );
+}
+
+//____________________________________________________________________________//
+
+void
+progress_monitor_t::test_aborted()
+{
+    PM_SCOPED_COLOR();
+
+    (*s_pm_impl().m_progress_display) += s_pm_impl().m_progress_display->count();
+}
+
+//____________________________________________________________________________//
+
+void
+progress_monitor_t::test_unit_finish( test_unit const& tu, unsigned long )
+{
+    PM_SCOPED_COLOR();
+
+    if( tu.p_type == TUT_CASE )
+        ++(*s_pm_impl().m_progress_display);
+}
+
+//____________________________________________________________________________//
+
+void
+progress_monitor_t::test_unit_skipped( test_unit const& tu, const_string /*reason*/ )
+{
+    PM_SCOPED_COLOR();
+
+    test_case_counter tcc;
+    traverse_test_tree( tu, tcc );
+
+    (*s_pm_impl().m_progress_display) += tcc.p_count;
+}
+
+//____________________________________________________________________________//
+
+void
+progress_monitor_t::set_stream( std::ostream& ostr )
+{
+    s_pm_impl().m_stream = &ostr;
+}
+
+//____________________________________________________________________________//
+
+#undef PM_SCOPED_COLOR
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER
diff --git a/vendor/pdalboost/boost/test/impl/results_collector.ipp b/vendor/pdalboost/boost/test/impl/results_collector.ipp
new file mode 100644
index 0000000..9ceafba
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/results_collector.ipp
@@ -0,0 +1,276 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : implements Unit Test results collecting facility.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_RESULTS_COLLECTOR_IPP_021105GER
+#define BOOST_TEST_RESULTS_COLLECTOR_IPP_021105GER
+
+// Boost.Test
+#include <boost/test/unit_test_log.hpp>
+#include <boost/test/results_collector.hpp>
+#include <boost/test/framework.hpp>
+
+#include <boost/test/tree/test_unit.hpp>
+#include <boost/test/tree/visitor.hpp>
+#include <boost/test/tree/test_case_counter.hpp>
+#include <boost/test/tree/traverse.hpp>
+
+// Boost
+#include <boost/cstdlib.hpp>
+
+// STL
+#include <map>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************                 test_results                 ************** //
+// ************************************************************************** //
+
+test_results::test_results()
+{
+    clear();
+}
+
+//____________________________________________________________________________//
+
+bool
+test_results::passed() const
+{
+    return  !p_skipped                                  &&
+            p_test_cases_failed == 0                    &&
+            p_assertions_failed <= p_expected_failures  &&
+            p_test_cases_skipped == 0                   &&
+            !p_aborted;
+}
+
+//____________________________________________________________________________//
+
+int
+test_results::result_code() const
+{
+    return passed() ? exit_success
+           : ( (p_assertions_failed > p_expected_failures || p_skipped )
+                    ? exit_test_failure
+                    : exit_exception_failure );
+}
+
+//____________________________________________________________________________//
+
+void
+test_results::operator+=( test_results const& tr )
+{
+    p_assertions_passed.value   += tr.p_assertions_passed;
+    p_assertions_failed.value   += tr.p_assertions_failed;
+    p_warnings_failed.value     += tr.p_warnings_failed;
+    p_test_cases_passed.value   += tr.p_test_cases_passed;
+    p_test_cases_warned.value   += tr.p_test_cases_warned;
+    p_test_cases_failed.value   += tr.p_test_cases_failed;
+    p_test_cases_skipped.value  += tr.p_test_cases_skipped;
+    p_test_cases_aborted.value  += tr.p_test_cases_aborted;
+}
+
+//____________________________________________________________________________//
+
+void
+test_results::clear()
+{
+    p_assertions_passed.value   = 0;
+    p_assertions_failed.value   = 0;
+    p_warnings_failed.value     = 0;
+    p_expected_failures.value   = 0;
+    p_test_cases_passed.value   = 0;
+    p_test_cases_warned.value   = 0;
+    p_test_cases_failed.value   = 0;
+    p_test_cases_skipped.value  = 0;
+    p_test_cases_aborted.value  = 0;
+    p_aborted.value             = false;
+    p_skipped.value             = false;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               results_collector              ************** //
+// ************************************************************************** //
+
+namespace {
+
+struct results_collector_impl {
+    std::map<test_unit_id,test_results> m_results_store;
+};
+
+results_collector_impl& s_rc_impl() { static results_collector_impl the_inst; return the_inst; }
+
+} // local namespace
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::test_start( counter_t )
+{
+    s_rc_impl().m_results_store.clear();
+}
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::test_unit_start( test_unit const& tu )
+{
+    // init test_results entry
+    test_results& tr = s_rc_impl().m_results_store[tu.p_id];
+
+    tr.clear();
+
+    tr.p_expected_failures.value = tu.p_expected_failures;
+}
+
+//____________________________________________________________________________//
+
+class results_collect_helper : public test_tree_visitor {
+public:
+    explicit results_collect_helper( test_results& tr, test_unit const& ts ) : m_tr( tr ), m_ts( ts ) {}
+
+    void    visit( test_case const& tc )
+    {
+        test_results const& tr = results_collector.results( tc.p_id );
+        m_tr += tr;
+
+        if( tr.passed() ) {
+            if( tr.p_warnings_failed )
+                m_tr.p_test_cases_warned.value++;
+            else
+                m_tr.p_test_cases_passed.value++;
+        }
+        else if( tr.p_skipped )
+            m_tr.p_test_cases_skipped.value++;
+        else {
+            if( tr.p_aborted )
+                m_tr.p_test_cases_aborted.value++;
+
+            m_tr.p_test_cases_failed.value++;
+        }
+    }
+    bool    test_suite_start( test_suite const& ts )
+    {
+        if( m_ts.p_id == ts.p_id )
+            return true;
+
+        m_tr += results_collector.results( ts.p_id );
+        return false;
+    }
+
+private:
+    // Data members
+    test_results&       m_tr;
+    test_unit const&    m_ts;
+};
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::test_unit_finish( test_unit const& tu, unsigned long )
+{
+    if( tu.p_type == TUT_SUITE ) {
+        results_collect_helper ch( s_rc_impl().m_results_store[tu.p_id], tu );
+
+        traverse_test_tree( tu, ch );
+    }
+    else {
+        test_results const& tr = s_rc_impl().m_results_store[tu.p_id];
+
+        bool num_failures_match = tr.p_aborted || tr.p_assertions_failed >= tr.p_expected_failures;
+        if( !num_failures_match )
+            BOOST_TEST_MESSAGE( "Test case " << tu.full_name() << " has fewer failures than expected" );
+
+        bool check_any_assertions = tr.p_aborted || (tr.p_assertions_failed != 0) || (tr.p_assertions_passed != 0);
+        if( !check_any_assertions )
+            BOOST_TEST_MESSAGE( "Test case " << tu.full_name() << " did not check any assertions" );
+    }
+}
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::test_unit_skipped( test_unit const& tu, const_string /*reason*/ )
+{
+    test_results& tr = s_rc_impl().m_results_store[tu.p_id];
+
+    tr.clear();
+
+    tr.p_skipped.value = true;
+
+    if( tu.p_type == TUT_SUITE ) {
+        test_case_counter tcc;
+        traverse_test_tree( tu, tcc );
+
+        tr.p_test_cases_skipped.value = tcc.p_count;
+    }
+}
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::assertion_result( unit_test::assertion_result ar )
+{
+    test_results& tr = s_rc_impl().m_results_store[framework::current_test_case_id()];
+
+    switch( ar ) {
+    case AR_PASSED: tr.p_assertions_passed.value++; break;
+    case AR_FAILED: tr.p_assertions_failed.value++; break;
+    case AR_TRIGGERED: tr.p_warnings_failed.value++; break;
+    }
+
+    if( tr.p_assertions_failed == 1 )
+        first_failed_assertion();
+}
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::exception_caught( execution_exception const& )
+{
+    test_results& tr = s_rc_impl().m_results_store[framework::current_test_case_id()];
+
+    tr.p_assertions_failed.value++;
+}
+
+//____________________________________________________________________________//
+
+void
+results_collector_t::test_unit_aborted( test_unit const& tu )
+{
+    s_rc_impl().m_results_store[tu.p_id].p_aborted.value = true;
+}
+
+//____________________________________________________________________________//
+
+test_results const&
+results_collector_t::results( test_unit_id id ) const
+{
+    return s_rc_impl().m_results_store[id];
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_RESULTS_COLLECTOR_IPP_021105GER
diff --git a/vendor/pdalboost/boost/test/impl/results_reporter.ipp b/vendor/pdalboost/boost/test/impl/results_reporter.ipp
new file mode 100644
index 0000000..ee78189
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/results_reporter.ipp
@@ -0,0 +1,197 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : result reporting facilties
+// ***************************************************************************
+
+#ifndef BOOST_TEST_RESULTS_REPORTER_IPP_020105GER
+#define BOOST_TEST_RESULTS_REPORTER_IPP_020105GER
+
+// Boost.Test
+#include <boost/test/results_reporter.hpp>
+#include <boost/test/results_collector.hpp>
+#include <boost/test/framework.hpp>
+
+#include <boost/test/output/plain_report_formatter.hpp>
+#include <boost/test/output/xml_report_formatter.hpp>
+
+#include <boost/test/tree/visitor.hpp>
+#include <boost/test/tree/test_unit.hpp>
+#include <boost/test/tree/traverse.hpp>
+
+// Boost
+#include <boost/scoped_ptr.hpp>
+#include <boost/io/ios_state.hpp>
+typedef ::pdalboost::io::ios_base_all_saver io_saver_type;
+
+// STL
+#include <iostream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace results_reporter {
+
+// ************************************************************************** //
+// **************        result reporter implementation        ************** //
+// ************************************************************************** //
+
+namespace {
+
+struct results_reporter_impl : test_tree_visitor {
+    // Constructor
+    results_reporter_impl()
+    : m_stream( &std::cerr )
+    , m_stream_state_saver( new io_saver_type( std::cerr ) )
+    , m_report_level( CONFIRMATION_REPORT )
+    , m_formatter( new output::plain_report_formatter )
+    {}
+
+    // test tree visitor interface implementation
+    void    visit( test_case const& tc )
+    {
+        m_formatter->test_unit_report_start( tc, *m_stream );
+        m_formatter->test_unit_report_finish( tc, *m_stream );
+    }
+    bool    test_suite_start( test_suite const& ts )
+    {
+        m_formatter->test_unit_report_start( ts, *m_stream );
+
+        if( m_report_level == DETAILED_REPORT && !results_collector.results( ts.p_id ).p_skipped )
+            return true;
+
+        m_formatter->test_unit_report_finish( ts, *m_stream );
+        return false;
+    }
+    void    test_suite_finish( test_suite const& ts )
+    {
+        m_formatter->test_unit_report_finish( ts, *m_stream );
+    }
+
+    typedef scoped_ptr<io_saver_type> saver_ptr;
+
+    // Data members
+    std::ostream*       m_stream;
+    saver_ptr           m_stream_state_saver;
+    report_level        m_report_level;
+    scoped_ptr<format>  m_formatter;
+};
+
+results_reporter_impl& s_rr_impl() { static results_reporter_impl the_inst; return the_inst; }
+
+} // local namespace
+
+// ************************************************************************** //
+// **************              report configuration            ************** //
+// ************************************************************************** //
+
+void
+set_level( report_level l )
+{
+    if( l != INV_REPORT_LEVEL )
+        s_rr_impl().m_report_level = l;
+}
+
+//____________________________________________________________________________//
+
+void
+set_stream( std::ostream& ostr )
+{
+    s_rr_impl().m_stream = &ostr;
+    s_rr_impl().m_stream_state_saver.reset( new io_saver_type( ostr ) );
+}
+
+//____________________________________________________________________________//
+
+std::ostream&
+get_stream()
+{
+    return *s_rr_impl().m_stream;
+}
+
+//____________________________________________________________________________//
+
+void
+set_format( output_format rf )
+{
+    switch( rf ) {
+    default:
+    case OF_CLF:
+        set_format( new output::plain_report_formatter );
+        break;
+    case OF_XML:
+        set_format( new output::xml_report_formatter );
+        break;
+    }
+}
+
+//____________________________________________________________________________//
+
+void
+set_format( results_reporter::format* f )
+{
+    if( f )
+        s_rr_impl().m_formatter.reset( f );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               report initiation              ************** //
+// ************************************************************************** //
+
+void
+make_report( report_level l, test_unit_id id )
+{
+    if( l == INV_REPORT_LEVEL )
+        l = s_rr_impl().m_report_level;
+
+    if( l == NO_REPORT )
+        return;
+
+    if( id == INV_TEST_UNIT_ID )
+        id = framework::master_test_suite().p_id;
+
+    s_rr_impl().m_stream_state_saver->restore();
+
+    report_level bkup = s_rr_impl().m_report_level;
+    s_rr_impl().m_report_level = l;
+
+    s_rr_impl().m_formatter->results_report_start( *s_rr_impl().m_stream );
+
+    switch( l ) {
+    case CONFIRMATION_REPORT:
+        s_rr_impl().m_formatter->do_confirmation_report( framework::get<test_unit>( id ), *s_rr_impl().m_stream );
+        break;
+    case SHORT_REPORT:
+    case DETAILED_REPORT:
+        traverse_test_tree( id, s_rr_impl() );
+        break;
+    default:
+        break;
+    }
+
+    s_rr_impl().m_formatter->results_report_finish( *s_rr_impl().m_stream );
+    s_rr_impl().m_report_level = bkup;
+}
+
+//____________________________________________________________________________//
+
+} // namespace results_reporter
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_RESULTS_REPORTER_IPP_020105GER
diff --git a/vendor/pdalboost/boost/test/impl/test_main.ipp b/vendor/pdalboost/boost/test/impl/test_main.ipp
new file mode 100644
index 0000000..a97b9f6
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/test_main.ipp
@@ -0,0 +1,65 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  (C) Copyright Beman Dawes 1995-2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// @brief Implements main function for Test Execution Monitor.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TEST_MAIN_IPP_012205GER
+#define BOOST_TEST_TEST_MAIN_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/framework.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test_suite.hpp>
+
+// Boost
+#include <boost/cstdlib.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+extern int test_main( int argc, char* argv[] );    // prototype for user's test_main()
+
+struct test_main_caller {
+    test_main_caller( int argc, char** argv ) : m_argc( argc ), m_argv( argv ) {}
+
+    void operator()() {
+        int test_main_result = test_main( m_argc, m_argv );
+
+        // translate a test_main non-success return into a test error
+        BOOST_CHECK( test_main_result == 0 || test_main_result == pdalboost::exit_success );
+    }
+
+private:
+    // Data members
+    int      m_argc;
+    char**   m_argv;
+};
+
+// ************************************************************************** //
+// **************                   test main                  ************** //
+// ************************************************************************** //
+
+::pdalboost::unit_test::test_suite*
+init_unit_test_suite( int argc, char* argv[] ) {
+    using namespace ::pdalboost::unit_test;
+
+    framework::master_test_suite().p_name.value = "Test Program";
+
+    framework::master_test_suite().add( BOOST_TEST_CASE( test_main_caller( argc, argv ) ) );
+
+    return 0;
+}
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TEST_MAIN_IPP_012205GER
diff --git a/vendor/pdalboost/boost/test/impl/test_tools.ipp b/vendor/pdalboost/boost/test/impl/test_tools.ipp
new file mode 100644
index 0000000..cccbc8c
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/test_tools.ipp
@@ -0,0 +1,680 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : supplies offline implementation for the Test Tools
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TEST_TOOLS_IPP_012205GER
+#define BOOST_TEST_TEST_TOOLS_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/unit_test_log.hpp>
+#include <boost/test/tools/context.hpp>
+#include <boost/test/tools/output_test_stream.hpp>
+
+#include <boost/test/tools/detail/fwd.hpp>
+#include <boost/test/tools/detail/print_helper.hpp>
+
+#include <boost/test/framework.hpp>
+#include <boost/test/tree/test_unit.hpp>
+#include <boost/test/execution_monitor.hpp> // execution_aborted
+
+#include <boost/test/detail/throw_exception.hpp>
+
+// Boost
+#include <boost/config.hpp>
+
+// STL
+#include <fstream>
+#include <string>
+#include <cstring>
+#include <cctype>
+#include <cwchar>
+#include <stdexcept>
+#include <vector>
+#include <utility>
+#include <ios>
+
+// !! should we use #include <cstdarg>
+#include <stdarg.h>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+# ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::strcmp; using ::strlen; using ::isprint; }
+#if !defined( BOOST_NO_CWCHAR )
+namespace std { using ::wcscmp; }
+#endif
+# endif
+
+namespace pdalboost {
+namespace test_tools {
+namespace tt_detail {
+
+// ************************************************************************** //
+// **************                print_log_value               ************** //
+// ************************************************************************** //
+
+void
+print_log_value<char>::operator()( std::ostream& ostr, char t )
+{
+    if( (std::isprint)( static_cast<unsigned char>(t) ) )
+        ostr << '\'' << t << '\'';
+    else
+        ostr << std::hex
+#if BOOST_TEST_USE_STD_LOCALE
+        << std::showbase
+#else
+        << "0x"
+#endif
+        << static_cast<int>(t);
+}
+
+//____________________________________________________________________________//
+
+void
+print_log_value<unsigned char>::operator()( std::ostream& ostr, unsigned char t )
+{
+    ostr << std::hex
+        // showbase is only available for new style streams:
+#if BOOST_TEST_USE_STD_LOCALE
+        << std::showbase
+#else
+        << "0x"
+#endif
+        << static_cast<int>(t);
+}
+
+//____________________________________________________________________________//
+
+void
+print_log_value<char const*>::operator()( std::ostream& ostr, char const* t )
+{
+    ostr << ( t ? t : "null string" );
+}
+
+//____________________________________________________________________________//
+
+void
+print_log_value<wchar_t const*>::operator()( std::ostream& ostr, wchar_t const* t )
+{
+    ostr << ( t ? t : L"null string" );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************            TOOL BOX Implementation           ************** //
+// ************************************************************************** //
+
+using ::pdalboost::unit_test::lazy_ostream;
+
+static char const* check_str [] = { " == ", " != ", " < " , " <= ", " > " , " >= " };
+static char const* rever_str [] = { " != ", " == ", " >= ", " > " , " <= ", " < "  };
+
+template<typename OutStream>
+void
+format_report( OutStream& os, assertion_result const& pr, unit_test::lazy_ostream const& assertion_descr,
+               tool_level tl, check_type ct,
+               std::size_t num_args, va_list args,
+               char const*  prefix, char const*  suffix )
+{
+    using namespace unit_test;
+
+    switch( ct ) {
+    case CHECK_PRED:
+        os << prefix << assertion_descr << suffix;
+
+        if( !pr.has_empty_message() )
+            os << ". " << pr.message();
+        break;
+
+    case CHECK_BUILT_ASSERTION: {
+        os << prefix << assertion_descr << suffix;
+
+        if( tl != PASS ) {
+            const_string details_message = pr.message();
+
+            if( !details_message.is_empty() ) {
+                os << details_message;
+            }
+        }
+        break;
+    }
+
+    case CHECK_MSG:
+        if( tl == PASS )
+            os << prefix << "'" << assertion_descr << "'" << suffix;
+        else
+            os << assertion_descr;
+
+        if( !pr.has_empty_message() )
+            os << ". " << pr.message();
+        break;
+
+    case CHECK_EQUAL:
+    case CHECK_NE:
+    case CHECK_LT:
+    case CHECK_LE:
+    case CHECK_GT:
+    case CHECK_GE: {
+        char const*         arg1_descr  = va_arg( args, char const* );
+        lazy_ostream const* arg1_val    = va_arg( args, lazy_ostream const* );
+        char const*         arg2_descr  = va_arg( args, char const* );
+        lazy_ostream const* arg2_val    = va_arg( args, lazy_ostream const* );
+
+        os << prefix << arg1_descr << check_str[ct-CHECK_EQUAL] << arg2_descr << suffix;
+
+        if( tl != PASS )
+            os << " [" << *arg1_val << rever_str[ct-CHECK_EQUAL] << *arg2_val << "]" ;
+
+        if( !pr.has_empty_message() )
+            os << ". " << pr.message();
+        break;
+    }
+
+    case CHECK_CLOSE:
+    case CHECK_CLOSE_FRACTION: {
+        char const*         arg1_descr  = va_arg( args, char const* );
+        lazy_ostream const* arg1_val    = va_arg( args, lazy_ostream const* );
+        char const*         arg2_descr  = va_arg( args, char const* );
+        lazy_ostream const* arg2_val    = va_arg( args, lazy_ostream const* );
+        /* toler_descr = */               va_arg( args, char const* );
+        lazy_ostream const* toler_val   = va_arg( args, lazy_ostream const* );
+
+        os << "difference{" << pr.message()
+                            << "} between " << arg1_descr << "{" << *arg1_val
+                            << "} and "               << arg2_descr << "{" << *arg2_val
+                            << ( tl == PASS ? "} doesn't exceed " : "} exceeds " )
+                            << *toler_val;
+        if( ct == CHECK_CLOSE )
+            os << "%";
+        break;
+    }
+    case CHECK_SMALL: {
+        char const*         arg1_descr  = va_arg( args, char const* );
+        lazy_ostream const* arg1_val    = va_arg( args, lazy_ostream const* );
+        /* toler_descr = */               va_arg( args, char const* );
+        lazy_ostream const* toler_val   = va_arg( args, lazy_ostream const* );
+
+        os << "absolute value of " << arg1_descr << "{" << *arg1_val << "}"
+                                   << ( tl == PASS ? " doesn't exceed " : " exceeds " )
+                                   << *toler_val;
+
+        if( !pr.has_empty_message() )
+            os << ". " << pr.message();
+        break;
+    }
+
+    case CHECK_PRED_WITH_ARGS: {
+        std::vector< std::pair<char const*, lazy_ostream const*> > args_copy;
+        args_copy.reserve( num_args );
+        for( std::size_t i = 0; i < num_args; ++i ) {
+            char const* desc = va_arg( args, char const* );
+            lazy_ostream const* value = va_arg( args, lazy_ostream const* );
+            args_copy.push_back( std::make_pair( desc, value ) );
+        }
+
+        os << prefix << assertion_descr;
+
+        // print predicate call description
+        os << "( ";
+        for( std::size_t i = 0; i < num_args; ++i ) {
+            os << args_copy[i].first;
+
+            if( i != num_args-1 )
+                os << ", ";
+        }
+        os << " )" << suffix;
+
+        if( tl != PASS ) {
+            os << " for ( ";
+            for( std::size_t i = 0; i < num_args; ++i ) {
+                os << *args_copy[i].second;
+
+                if( i != num_args-1 )
+                    os << ", ";
+            }
+            os << " )";
+        }
+
+        if( !pr.has_empty_message() )
+            os << ". " << pr.message();
+        break;
+    }
+
+    case CHECK_EQUAL_COLL: {
+        char const* left_begin_descr    = va_arg( args, char const* );
+        char const* left_end_descr      = va_arg( args, char const* );
+        char const* right_begin_descr   = va_arg( args, char const* );
+        char const* right_end_descr     = va_arg( args, char const* );
+
+        os << prefix << "{ " << left_begin_descr  << ", " << left_end_descr  << " } == { "
+                             << right_begin_descr << ", " << right_end_descr << " }"
+           << suffix;
+
+        if( !pr.has_empty_message() )
+            os << ". " << pr.message();
+        break;
+    }
+
+    case CHECK_BITWISE_EQUAL: {
+        char const* left_descr    = va_arg( args, char const* );
+        char const* right_descr   = va_arg( args, char const* );
+
+        os << prefix << left_descr  << " =.= " << right_descr << suffix;
+
+        if( !pr.has_empty_message() )
+            os << ". " << pr.message();
+        break;
+    }
+    }
+}
+
+//____________________________________________________________________________//
+
+bool
+report_assertion( assertion_result const&   ar,
+                  lazy_ostream const&       assertion_descr,
+                  const_string              file_name,
+                  std::size_t               line_num,
+                  tool_level                tl,
+                  check_type                ct,
+                  std::size_t               num_args, ... )
+{
+    using namespace unit_test;
+
+    BOOST_TEST_I_ASSRT( framework::current_test_case_id() != INV_TEST_UNIT_ID,
+                        std::runtime_error( "Can't use testing tools outside of test case implementation." ) );
+
+    if( !!ar )
+        tl = PASS;
+
+    log_level    ll;
+    char const*  prefix;
+    char const*  suffix;
+
+    switch( tl ) {
+    case PASS:
+        ll      = log_successful_tests;
+        prefix  = "check ";
+        suffix  = " has passed";
+        break;
+    case WARN:
+        ll      = log_warnings;
+        prefix  = "condition ";
+        suffix  = " is not satisfied";
+        break;
+    case CHECK:
+        ll      = log_all_errors;
+        prefix  = "check ";
+        suffix  = " has failed";
+        break;
+    case REQUIRE:
+        ll      = log_fatal_errors;
+        prefix  = "critical check ";
+        suffix  = " has failed";
+        break;
+    default:
+        return true;
+    }
+
+    unit_test_log << unit_test::log::begin( file_name, line_num ) << ll;
+    va_list args;
+    va_start( args, num_args );
+
+    format_report( unit_test_log, ar, assertion_descr, tl, ct, num_args, args, prefix, suffix );
+
+    va_end( args );
+    unit_test_log << unit_test::log::end();
+
+    switch( tl ) {
+    case PASS:
+        framework::assertion_result( AR_PASSED );
+        return true;
+
+    case WARN:
+        framework::assertion_result( AR_TRIGGERED );
+        return false;
+
+    case CHECK:
+        framework::assertion_result( AR_FAILED );
+        return false;
+
+    case REQUIRE:
+        framework::assertion_result( AR_FAILED );
+
+        framework::test_unit_aborted( framework::current_test_case() );
+
+        BOOST_TEST_I_THROW( execution_aborted() );
+    }
+
+    return true;
+}
+
+//____________________________________________________________________________//
+
+assertion_result
+format_assertion_result( const_string expr_val, const_string details )
+{
+    assertion_result res(false);
+
+    bool starts_new_line = first_char( expr_val ) == '\n';
+
+    if( !starts_new_line && !expr_val.is_empty() )
+        res.message().stream() << " [" << expr_val << "]";
+
+    if( !details.is_empty() ) {
+        if( first_char(details) != '[' )
+            res.message().stream() << ". ";
+        else
+            res.message().stream() << " ";
+
+        res.message().stream() << details;
+    }
+
+    if( starts_new_line )
+        res.message().stream() << "." << expr_val;
+
+    return res;
+}
+
+//____________________________________________________________________________//
+
+BOOST_TEST_DECL std::string
+prod_report_format( assertion_result const& ar, unit_test::lazy_ostream const& assertion_descr, check_type ct, std::size_t num_args, ... )
+{
+    std::ostringstream msg_buff;
+
+    va_list args;
+    va_start( args, num_args );
+
+    format_report( msg_buff, ar, assertion_descr, CHECK, ct, num_args, args, "assertion ", " failed" );
+
+    va_end( args );
+
+    return msg_buff.str();
+}
+
+//____________________________________________________________________________//
+
+assertion_result
+equal_impl( char const* left, char const* right )
+{
+    return (left && right) ? std::strcmp( left, right ) == 0 : (left == right);
+}
+
+//____________________________________________________________________________//
+
+#if !defined( BOOST_NO_CWCHAR )
+
+assertion_result
+equal_impl( wchar_t const* left, wchar_t const* right )
+{
+    return (left && right) ? std::wcscmp( left, right ) == 0 : (left == right);
+}
+
+#endif // !defined( BOOST_NO_CWCHAR )
+
+//____________________________________________________________________________//
+
+bool
+is_defined_impl( const_string symbol_name, const_string symbol_value )
+{
+    symbol_value.trim_left( 2 );
+    return symbol_name != symbol_value;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                 context_frame                ************** //
+// ************************************************************************** //
+
+context_frame::context_frame( ::pdalboost::unit_test::lazy_ostream const& context_descr )
+: m_frame_id( unit_test::framework::add_context( context_descr, true ) )
+{
+}
+
+//____________________________________________________________________________//
+
+context_frame::~context_frame()
+{
+    unit_test::framework::clear_context( m_frame_id );
+}
+
+//____________________________________________________________________________//
+
+context_frame::operator bool()
+{
+    return true;
+}
+
+//____________________________________________________________________________//
+
+} // namespace tt_detail
+
+// ************************************************************************** //
+// **************               output_test_stream             ************** //
+// ************************************************************************** //
+
+struct output_test_stream::Impl
+{
+    std::fstream    m_pattern;
+    bool            m_match_or_save;
+    bool            m_text_or_binary;
+    std::string     m_synced_string;
+
+    char            get_char()
+    {
+        char res;
+        do {
+            m_pattern.get( res );
+        } while( m_text_or_binary && res == '\r' && !m_pattern.fail() && !m_pattern.eof() );
+
+        return res;
+    }
+
+    void            check_and_fill( assertion_result& res )
+    {
+        if( !res.p_predicate_value )
+            res.message() << "Output content: \"" << m_synced_string << '\"';
+    }
+};
+
+//____________________________________________________________________________//
+
+output_test_stream::output_test_stream( const_string pattern_file_name, bool match_or_save, bool text_or_binary )
+: m_pimpl( new Impl )
+{
+    if( !pattern_file_name.is_empty() ) {
+        std::ios::openmode m = match_or_save ? std::ios::in : std::ios::out;
+        if( !text_or_binary )
+            m |= std::ios::binary;
+
+        m_pimpl->m_pattern.open( pattern_file_name.begin(), m );
+
+        if( !m_pimpl->m_pattern.is_open() )
+            BOOST_TEST_MESSAGE( "Can't open pattern file " << pattern_file_name << " for " << (match_or_save ? "reading" : "writing") );
+    }
+
+    m_pimpl->m_match_or_save    = match_or_save;
+    m_pimpl->m_text_or_binary   = text_or_binary;
+}
+
+//____________________________________________________________________________//
+
+output_test_stream::~output_test_stream()
+{
+    delete m_pimpl;
+}
+
+//____________________________________________________________________________//
+
+assertion_result
+output_test_stream::is_empty( bool flush_stream )
+{
+    sync();
+
+    assertion_result res( m_pimpl->m_synced_string.empty() );
+
+    m_pimpl->check_and_fill( res );
+
+    if( flush_stream )
+        flush();
+
+    return res;
+}
+
+//____________________________________________________________________________//
+
+assertion_result
+output_test_stream::check_length( std::size_t length_, bool flush_stream )
+{
+    sync();
+
+    assertion_result res( m_pimpl->m_synced_string.length() == length_ );
+
+    m_pimpl->check_and_fill( res );
+
+    if( flush_stream )
+        flush();
+
+    return res;
+}
+
+//____________________________________________________________________________//
+
+assertion_result
+output_test_stream::is_equal( const_string arg, bool flush_stream )
+{
+    sync();
+
+    assertion_result res( const_string( m_pimpl->m_synced_string ) == arg );
+
+    m_pimpl->check_and_fill( res );
+
+    if( flush_stream )
+        flush();
+
+    return res;
+}
+
+//____________________________________________________________________________//
+
+assertion_result
+output_test_stream::match_pattern( bool flush_stream )
+{
+    sync();
+
+    assertion_result result( true );
+
+    if( !m_pimpl->m_pattern.is_open() ) {
+        result = false;
+        result.message() << "Pattern file can't be opened!";
+    }
+    else {
+        if( m_pimpl->m_match_or_save ) {
+            for ( std::string::size_type i = 0; i < m_pimpl->m_synced_string.length(); ++i ) {
+                char c = m_pimpl->get_char();
+
+                result = !m_pimpl->m_pattern.fail() &&
+                         !m_pimpl->m_pattern.eof()  &&
+                         (m_pimpl->m_synced_string[i] == c);
+
+                if( !result ) {
+                    std::string::size_type suffix_size  = (std::min)( m_pimpl->m_synced_string.length() - i,
+                                                                    static_cast<std::string::size_type>(5) );
+
+                    // try to log area around the mismatch
+                    result.message() << "Mismatch at position " << i << '\n'
+                        << "..." << m_pimpl->m_synced_string.substr( i, suffix_size ) << "..." << '\n'
+                        << "..." << c;
+
+                    std::string::size_type counter = suffix_size;
+                    while( --counter ) {
+                        char c2 = m_pimpl->get_char();
+
+                        if( m_pimpl->m_pattern.fail() || m_pimpl->m_pattern.eof() )
+                            break;
+
+                        result.message() << c2;
+                    }
+
+                    result.message() << "...";
+
+                    // skip rest of the bytes. May help for further matching
+                    m_pimpl->m_pattern.ignore(
+                        static_cast<std::streamsize>( m_pimpl->m_synced_string.length() - i - suffix_size) );
+                    break;
+                }
+            }
+        }
+        else {
+            m_pimpl->m_pattern.write( m_pimpl->m_synced_string.c_str(),
+                                      static_cast<std::streamsize>( m_pimpl->m_synced_string.length() ) );
+            m_pimpl->m_pattern.flush();
+        }
+    }
+
+    if( flush_stream )
+        flush();
+
+    return result;
+}
+
+//____________________________________________________________________________//
+
+void
+output_test_stream::flush()
+{
+    m_pimpl->m_synced_string.erase();
+
+#ifndef BOOST_NO_STRINGSTREAM
+    str( std::string() );
+#else
+    seekp( 0, std::ios::beg );
+#endif
+}
+
+//____________________________________________________________________________//
+
+std::size_t
+output_test_stream::length()
+{
+    sync();
+
+    return m_pimpl->m_synced_string.length();
+}
+
+//____________________________________________________________________________//
+
+void
+output_test_stream::sync()
+{
+#ifdef BOOST_NO_STRINGSTREAM
+    m_pimpl->m_synced_string.assign( str(), pcount() );
+    freeze( false );
+#else
+    m_pimpl->m_synced_string = str();
+#endif
+}
+
+//____________________________________________________________________________//
+
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TEST_TOOLS_IPP_012205GER
diff --git a/vendor/pdalboost/boost/test/impl/test_tree.ipp b/vendor/pdalboost/boost/test/impl/test_tree.ipp
new file mode 100644
index 0000000..7c85846
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/test_tree.ipp
@@ -0,0 +1,460 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// Provides core implementation for Unit Test Framework.
+/// Extensions can be provided in separate files
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_SUITE_IPP_012205GER
+#define BOOST_TEST_UNIT_TEST_SUITE_IPP_012205GER
+
+// Boost.Test
+#include <boost/detail/workaround.hpp>
+
+#include <boost/test/framework.hpp>
+#include <boost/test/results_collector.hpp>
+
+#include <boost/test/tree/test_unit.hpp>
+#include <boost/test/tree/visitor.hpp>
+#include <boost/test/tree/traverse.hpp>
+#include <boost/test/tree/auto_registration.hpp>
+#include <boost/test/tree/global_fixture.hpp>
+
+#include <boost/test/utils/foreach.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+#include <boost/test/unit_test_parameters.hpp>
+
+// Boost
+#include <boost/timer.hpp>
+
+// STL
+#include <algorithm>
+#include <vector>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************                   test_unit                  ************** //
+// ************************************************************************** //
+
+test_unit::test_unit( const_string name, const_string file_name, std::size_t line_num, test_unit_type t )
+: p_type( t )
+, p_type_name( t == TUT_CASE ? "case" : "suite" )
+, p_file_name( file_name )
+, p_line_num( line_num )
+, p_id( INV_TEST_UNIT_ID )
+, p_parent_id( INV_TEST_UNIT_ID )
+, p_name( std::string( name.begin(), name.size() ) )
+, p_timeout( 0 )
+, p_expected_failures( 0 )
+, p_default_status( RS_INHERIT )
+, p_run_status( RS_INVALID )
+, p_sibling_rank(0)
+{
+}
+
+//____________________________________________________________________________//
+
+test_unit::test_unit( const_string module_name )
+: p_type( TUT_SUITE )
+, p_type_name( "module" )
+, p_line_num( 0 )
+, p_id( INV_TEST_UNIT_ID )
+, p_parent_id( INV_TEST_UNIT_ID )
+, p_name( std::string( module_name.begin(), module_name.size() ) )
+, p_timeout( 0 )
+, p_expected_failures( 0 )
+, p_default_status( RS_INHERIT )
+, p_run_status( RS_INVALID )
+, p_sibling_rank(0)
+{
+}
+
+//____________________________________________________________________________//
+
+test_unit::~test_unit()
+{
+    framework::deregister_test_unit( this );
+}
+
+//____________________________________________________________________________//
+
+void
+test_unit::depends_on( test_unit* tu )
+{
+    BOOST_TEST_SETUP_ASSERT( p_id != framework::master_test_suite().p_id, 
+                             "Can't add dependency to the master test suite" );
+
+    p_dependencies.value.push_back( tu->p_id );
+}
+
+//____________________________________________________________________________//
+
+void
+test_unit::add_precondition( precondition_t const& pc )
+{
+    p_preconditions.value.push_back( pc );
+}
+
+//____________________________________________________________________________//
+
+test_tools::assertion_result
+test_unit::check_preconditions() const
+{
+    BOOST_TEST_FOREACH( test_unit_id, dep_id, p_dependencies.get() ) {
+        test_unit const& dep = framework::get( dep_id, TUT_ANY );
+
+        if( !dep.is_enabled() ) {
+            test_tools::assertion_result res(false);
+            res.message() << "dependency test " << dep.p_type_name << " \"" << dep.full_name() << "\" is disabled";
+            return res;
+        }
+
+        test_results const& test_rslt = unit_test::results_collector.results( dep_id );
+        if( !test_rslt.passed() ) {
+            test_tools::assertion_result res(false);
+            res.message() << "dependency test " << dep.p_type_name << " \"" << dep.full_name() << "\" has failed";
+            return res;
+        }
+
+        if( test_rslt.p_test_cases_skipped > 0 ) {
+            test_tools::assertion_result res(false);
+            res.message() << "dependency test " << dep.p_type_name << " \"" << dep.full_name() << "\" has skipped test cases";
+            return res;
+        }
+    }
+
+    BOOST_TEST_FOREACH( precondition_t, precondition, p_preconditions.get() ) {
+        test_tools::assertion_result res = precondition( p_id );
+        if( !res ) {
+            test_tools::assertion_result res_out(false);
+            res_out.message() << "precondition failed";
+            if( !res.has_empty_message() )
+                res_out.message() << ": " << res.message();
+            return res_out;
+        }
+    }
+
+    return true;
+}
+
+//____________________________________________________________________________//
+
+void
+test_unit::increase_exp_fail( counter_t num )
+{
+    p_expected_failures.value += num;
+
+    if( p_parent_id != INV_TEST_UNIT_ID )
+        framework::get<test_suite>( p_parent_id ).increase_exp_fail( num );
+}
+
+//____________________________________________________________________________//
+
+std::string
+test_unit::full_name() const
+{
+    if( p_parent_id == INV_TEST_UNIT_ID || p_parent_id == framework::master_test_suite().p_id )
+        return p_name;
+
+    std::string res = framework::get<test_suite>( p_parent_id ).full_name();
+    res.append("/");
+
+    res.append( p_name );
+
+    return res;
+}
+
+//____________________________________________________________________________//
+
+void
+test_unit::add_label( const_string l )
+{
+    p_labels.value.push_back( std::string() + l );
+}
+
+//____________________________________________________________________________//
+
+bool
+test_unit::has_label( const_string l ) const
+{
+    return std::find( p_labels->begin(), p_labels->end(), l ) != p_labels->end();
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                   test_case                  ************** //
+// ************************************************************************** //
+
+test_case::test_case( const_string name, pdalboost::function<void ()> const& test_func )
+: test_unit( name, "", 0, static_cast<test_unit_type>(type) )
+, p_test_func( test_func )
+{
+    framework::register_test_unit( this );
+}
+
+//____________________________________________________________________________//
+
+test_case::test_case( const_string name, const_string file_name, std::size_t line_num, pdalboost::function<void ()> const& test_func )
+: test_unit( name, file_name, line_num, static_cast<test_unit_type>(type) )
+, p_test_func( test_func )
+{
+    framework::register_test_unit( this );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                  test_suite                  ************** //
+// ************************************************************************** //
+
+//____________________________________________________________________________//
+
+test_suite::test_suite( const_string name, const_string file_name, std::size_t line_num )
+: test_unit( name, file_name, line_num, static_cast<test_unit_type>(type) )
+{
+    framework::register_test_unit( this );
+}
+
+//____________________________________________________________________________//
+
+test_suite::test_suite( const_string module_name )
+: test_unit( module_name )
+{
+    framework::register_test_unit( this );
+}
+
+//____________________________________________________________________________//
+
+void
+test_suite::add( test_unit* tu, counter_t expected_failures, unsigned timeout )
+{
+    tu->p_timeout.value = timeout;
+
+    m_children.push_back( tu->p_id );
+    tu->p_parent_id.value = p_id;
+
+    if( tu->p_expected_failures != 0 )
+        increase_exp_fail( tu->p_expected_failures );
+
+    if( expected_failures )
+        tu->increase_exp_fail( expected_failures );
+}
+
+//____________________________________________________________________________//
+
+void
+test_suite::add( test_unit_generator const& gen, unsigned timeout )
+{
+    test_unit* tu;
+    while((tu = gen.next()) != 0)
+        add( tu, 0, timeout );
+}
+
+//____________________________________________________________________________//
+
+void
+test_suite::add( test_unit_generator const& gen, decorator::collector& decorators )
+{
+    test_unit* tu;
+    while((tu = gen.next()) != 0) {
+        decorators.store_in( *tu );
+        add( tu, 0 );
+    }
+
+    decorators.reset();
+}
+
+//____________________________________________________________________________//
+
+void
+test_suite::remove( test_unit_id id )
+{
+    test_unit_id_list::iterator it = std::find( m_children.begin(), m_children.end(), id );
+
+    if( it != m_children.end() )
+        m_children.erase( it );
+}
+
+//____________________________________________________________________________//
+
+test_unit_id
+test_suite::get( const_string tu_name ) const
+{
+    BOOST_TEST_FOREACH( test_unit_id, id, m_children ) {
+        if( tu_name == framework::get( id, ut_detail::test_id_2_unit_type( id ) ).p_name.get() )
+            return id;
+    }
+
+    return INV_TEST_UNIT_ID;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               master_test_suite              ************** //
+// ************************************************************************** //
+
+master_test_suite_t::master_test_suite_t()
+: test_suite( "Master Test Suite" )
+, argc( 0 )
+, argv( 0 )
+{
+    p_default_status.value = RS_ENABLED;
+}
+
+// ************************************************************************** //
+// **************               traverse_test_tree             ************** //
+// ************************************************************************** //
+
+void
+traverse_test_tree( test_case const& tc, test_tree_visitor& V, bool ignore_status )
+{
+    if( tc.is_enabled() || ignore_status )
+        V.visit( tc );
+}
+
+//____________________________________________________________________________//
+
+void
+traverse_test_tree( test_suite const& suite, test_tree_visitor& V, bool ignore_status )
+{
+    // skip disabled test suite unless we asked to ignore this condition
+    if( !ignore_status && !suite.is_enabled() )
+        return;
+
+    // Invoke test_suite_start callback
+    if( !V.test_suite_start( suite ) )
+        return;
+
+    // Recurse into children
+    std::size_t total_children = suite.m_children.size();
+    for( std::size_t i=0; i < total_children; ) {
+        // this statement can remove the test unit from this list
+        traverse_test_tree( suite.m_children[i], V, ignore_status );
+        if( total_children > suite.m_children.size() )
+            total_children = suite.m_children.size();
+        else
+            ++i;
+    }
+
+    // Invoke test_suite_finish callback
+    V.test_suite_finish( suite );
+}
+
+//____________________________________________________________________________//
+
+void
+traverse_test_tree( test_unit_id id, test_tree_visitor& V, bool ignore_status )
+{
+    if( ut_detail::test_id_2_unit_type( id ) == TUT_CASE )
+        traverse_test_tree( framework::get<test_case>( id ), V, ignore_status );
+    else
+        traverse_test_tree( framework::get<test_suite>( id ), V, ignore_status );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               object generators              ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+std::string
+normalize_test_case_name( const_string name )
+{
+    std::string norm_name( name.begin(), name.size() );
+
+    if( name[0] == '&' )
+        norm_name = norm_name.substr( 1 );
+        
+    std::replace(norm_name.begin(), norm_name.end(), ' ', '_'); 
+
+    return norm_name;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************           auto_test_unit_registrar           ************** //
+// ************************************************************************** //
+
+auto_test_unit_registrar::auto_test_unit_registrar( test_case* tc, decorator::collector& decorators, counter_t exp_fail )
+{
+    framework::current_auto_test_suite().add( tc, exp_fail );
+
+    decorators.store_in( *tc );
+    decorators.reset();
+}
+
+//____________________________________________________________________________//
+
+auto_test_unit_registrar::auto_test_unit_registrar( const_string ts_name, const_string ts_file, std::size_t ts_line, decorator::collector& decorators )
+{
+    test_unit_id id = framework::current_auto_test_suite().get( ts_name );
+
+    test_suite* ts;
+
+    if( id != INV_TEST_UNIT_ID ) {
+        ts = &framework::get<test_suite>( id );
+        BOOST_ASSERT( ts->p_parent_id == framework::current_auto_test_suite().p_id );
+    }
+    else {
+        ts = new test_suite( ts_name, ts_file, ts_line );
+        framework::current_auto_test_suite().add( ts );
+    }
+
+    decorators.store_in( *ts );
+    decorators.reset();
+
+    framework::current_auto_test_suite( ts );
+}
+
+//____________________________________________________________________________//
+
+auto_test_unit_registrar::auto_test_unit_registrar( test_unit_generator const& tc_gen, decorator::collector& decorators )
+{
+    framework::current_auto_test_suite().add( tc_gen, decorators );
+}
+
+//____________________________________________________________________________//
+
+auto_test_unit_registrar::auto_test_unit_registrar( int )
+{
+    framework::current_auto_test_suite( 0, false );
+}
+
+//____________________________________________________________________________//
+
+} // namespace ut_detail
+
+// ************************************************************************** //
+// **************                global_fixture                ************** //
+// ************************************************************************** //
+
+global_fixture::global_fixture()
+{
+    framework::register_observer( *this );
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UNIT_TEST_SUITE_IPP_012205GER
diff --git a/vendor/pdalboost/boost/test/impl/unit_test_log.ipp b/vendor/pdalboost/boost/test/impl/unit_test_log.ipp
new file mode 100644
index 0000000..1dc2115
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/unit_test_log.ipp
@@ -0,0 +1,469 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : implemets Unit Test Log
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_LOG_IPP_012205GER
+#define BOOST_TEST_UNIT_TEST_LOG_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/unit_test_log.hpp>
+#include <boost/test/unit_test_log_formatter.hpp>
+#include <boost/test/execution_monitor.hpp>
+#include <boost/test/framework.hpp>
+#include <boost/test/unit_test_parameters.hpp>
+
+#include <boost/test/utils/basic_cstring/compare.hpp>
+
+#include <boost/test/output/compiler_log_formatter.hpp>
+#include <boost/test/output/xml_log_formatter.hpp>
+
+// Boost
+#include <boost/scoped_ptr.hpp>
+#include <boost/io/ios_state.hpp>
+typedef ::pdalboost::io::ios_base_all_saver io_saver_type;
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************             entry_value_collector            ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+entry_value_collector const&
+entry_value_collector::operator<<( lazy_ostream const& v ) const
+{
+    unit_test_log << v;
+
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+entry_value_collector const&
+entry_value_collector::operator<<( const_string v ) const
+{
+    unit_test_log << v;
+
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+entry_value_collector::~entry_value_collector()
+{
+    if( m_last )
+        unit_test_log << log::end();
+}
+
+//____________________________________________________________________________//
+
+} // namespace ut_detail
+
+// ************************************************************************** //
+// **************                 unit_test_log                ************** //
+// ************************************************************************** //
+
+namespace {
+
+struct unit_test_log_impl {
+    // Constructor
+    unit_test_log_impl()
+    : m_stream( &std::cout )
+    , m_stream_state_saver( new io_saver_type( std::cout ) )
+    , m_threshold_level( log_all_errors )
+    , m_log_formatter( new output::compiler_log_formatter )
+    {
+    }
+
+    // log data
+    typedef scoped_ptr<unit_test_log_formatter> formatter_ptr;
+    typedef scoped_ptr<io_saver_type>           saver_ptr;
+
+    std::ostream*       m_stream;
+    saver_ptr           m_stream_state_saver;
+    log_level           m_threshold_level;
+    formatter_ptr       m_log_formatter;
+
+    // entry data
+    bool                m_entry_in_progress;
+    bool                m_entry_started;
+    log_entry_data      m_entry_data;
+
+    // check point data
+    log_checkpoint_data m_checkpoint_data;
+
+    // helper functions
+    std::ostream&       stream()
+    {
+        return *m_stream;
+    }
+    void                set_checkpoint( const_string file, std::size_t line_num, const_string msg )
+    {
+        assign_op( m_checkpoint_data.m_message, msg, 0 );
+        m_checkpoint_data.m_file_name   = file;
+        m_checkpoint_data.m_line_num    = line_num;
+    }
+};
+
+unit_test_log_impl& s_log_impl() { static unit_test_log_impl the_inst; return the_inst; }
+
+} // local namespace
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::test_start( counter_t test_cases_amount )
+{
+    if( s_log_impl().m_threshold_level == log_nothing )
+        return;
+
+    s_log_impl().m_log_formatter->log_start( s_log_impl().stream(), test_cases_amount );
+
+    if( runtime_config::get<bool>( runtime_config::BUILD_INFO ) )
+        s_log_impl().m_log_formatter->log_build_info( s_log_impl().stream() );
+
+    s_log_impl().m_entry_in_progress = false;
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::test_finish()
+{
+    if( s_log_impl().m_threshold_level == log_nothing )
+        return;
+
+    s_log_impl().m_log_formatter->log_finish( s_log_impl().stream() );
+
+    s_log_impl().stream().flush();
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::test_aborted()
+{
+    BOOST_TEST_LOG_ENTRY( log_messages ) << "Test is aborted";
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::test_unit_start( test_unit const& tu )
+{
+    if( s_log_impl().m_threshold_level > log_test_units )
+        return;
+
+    if( s_log_impl().m_entry_in_progress )
+        *this << log::end();
+
+    s_log_impl().m_log_formatter->test_unit_start( s_log_impl().stream(), tu );
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::test_unit_finish( test_unit const& tu, unsigned long elapsed )
+{
+    if( s_log_impl().m_threshold_level > log_test_units )
+        return;
+
+    s_log_impl().m_checkpoint_data.clear();
+
+    if( s_log_impl().m_entry_in_progress )
+        *this << log::end();
+
+    s_log_impl().m_log_formatter->test_unit_finish( s_log_impl().stream(), tu, elapsed );
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::test_unit_skipped( test_unit const& tu, const_string reason )
+{
+    if( s_log_impl().m_threshold_level > log_test_units )
+        return;
+
+    if( s_log_impl().m_entry_in_progress )
+        *this << log::end();
+
+    s_log_impl().m_log_formatter->test_unit_skipped( s_log_impl().stream(), tu, reason );
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::exception_caught( execution_exception const& ex )
+{
+    log_level l =
+        ex.code() <= execution_exception::cpp_exception_error   ? log_cpp_exception_errors :
+        (ex.code() <= execution_exception::timeout_error        ? log_system_errors
+                                                                : log_fatal_errors );
+
+    if( l >= s_log_impl().m_threshold_level ) {
+        if( s_log_impl().m_entry_in_progress )
+            *this << log::end();
+
+        s_log_impl().m_log_formatter->log_exception_start( s_log_impl().stream(), s_log_impl().m_checkpoint_data, ex );
+
+        log_entry_context( l );
+
+        s_log_impl().m_log_formatter->log_exception_finish( s_log_impl().stream() );
+    }
+
+    clear_entry_context();
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::set_checkpoint( const_string file, std::size_t line_num, const_string msg )
+{
+    s_log_impl().set_checkpoint( file, line_num, msg );
+}
+
+//____________________________________________________________________________//
+
+char
+set_unix_slash( char in )
+{
+    return in == '\\' ? '/' : in;
+}
+
+unit_test_log_t&
+unit_test_log_t::operator<<( log::begin const& b )
+{
+    if( s_log_impl().m_entry_in_progress )
+        *this << log::end();
+
+    s_log_impl().m_stream_state_saver->restore();
+
+    s_log_impl().m_entry_data.clear();
+
+    assign_op( s_log_impl().m_entry_data.m_file_name, b.m_file_name, 0 );
+
+    // normalize file name
+    std::transform( s_log_impl().m_entry_data.m_file_name.begin(), s_log_impl().m_entry_data.m_file_name.end(),
+                    s_log_impl().m_entry_data.m_file_name.begin(),
+                    &set_unix_slash );
+
+    s_log_impl().m_entry_data.m_line_num = b.m_line_num;
+
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+unit_test_log_t&
+unit_test_log_t::operator<<( log::end const& )
+{
+    if( s_log_impl().m_entry_in_progress ) {
+        log_entry_context( s_log_impl().m_entry_data.m_level );
+
+        s_log_impl().m_log_formatter->log_entry_finish( s_log_impl().stream() );
+
+        s_log_impl().m_entry_in_progress = false;
+    }
+
+    clear_entry_context();
+
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+unit_test_log_t&
+unit_test_log_t::operator<<( log_level l )
+{
+    s_log_impl().m_entry_data.m_level = l;
+
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+ut_detail::entry_value_collector
+unit_test_log_t::operator()( log_level l )
+{
+    *this << l;
+
+    return ut_detail::entry_value_collector();
+}
+
+//____________________________________________________________________________//
+
+bool
+unit_test_log_t::log_entry_start()
+{
+    if( s_log_impl().m_entry_in_progress )
+        return true;
+
+    switch( s_log_impl().m_entry_data.m_level ) {
+    case log_successful_tests:
+        s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
+                                                       unit_test_log_formatter::BOOST_UTL_ET_INFO );
+        break;
+    case log_messages:
+        s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
+                                                       unit_test_log_formatter::BOOST_UTL_ET_MESSAGE );
+        break;
+    case log_warnings:
+        s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
+                                                       unit_test_log_formatter::BOOST_UTL_ET_WARNING );
+        break;
+    case log_all_errors:
+    case log_cpp_exception_errors:
+    case log_system_errors:
+        s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
+                                                       unit_test_log_formatter::BOOST_UTL_ET_ERROR );
+        break;
+    case log_fatal_errors:
+        s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
+                                                       unit_test_log_formatter::BOOST_UTL_ET_FATAL_ERROR );
+        break;
+    case log_nothing:
+    case log_test_units:
+    case invalid_log_level:
+        return false;
+    }
+
+    s_log_impl().m_entry_in_progress = true;
+
+    return true;
+}
+
+//____________________________________________________________________________//
+
+unit_test_log_t&
+unit_test_log_t::operator<<( const_string value )
+{
+    if( s_log_impl().m_entry_data.m_level >= s_log_impl().m_threshold_level && !value.empty() && log_entry_start() )
+        s_log_impl().m_log_formatter->log_entry_value( s_log_impl().stream(), value );
+
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+unit_test_log_t&
+unit_test_log_t::operator<<( lazy_ostream const& value )
+{
+    if( s_log_impl().m_entry_data.m_level >= s_log_impl().m_threshold_level && !value.empty() && log_entry_start() )
+        s_log_impl().m_log_formatter->log_entry_value( s_log_impl().stream(), value );
+
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::log_entry_context( log_level l )
+{
+    framework::context_generator const& context = framework::get_context();
+    if( context.is_empty() )
+        return;
+
+    const_string frame;
+
+    s_log_impl().m_log_formatter->entry_context_start( s_log_impl().stream(), l );
+
+    while( !(frame=context.next()).is_empty() )
+        s_log_impl().m_log_formatter->log_entry_context( s_log_impl().stream(), frame );
+
+    s_log_impl().m_log_formatter->entry_context_finish( s_log_impl().stream() );
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::clear_entry_context()
+{
+    framework::clear_context();
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::set_stream( std::ostream& str )
+{
+    if( s_log_impl().m_entry_in_progress )
+        return;
+
+    s_log_impl().m_stream = &str;
+    s_log_impl().m_stream_state_saver.reset( new io_saver_type( str ) );
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::set_threshold_level( log_level lev )
+{
+    if( s_log_impl().m_entry_in_progress || lev == invalid_log_level )
+        return;
+
+    s_log_impl().m_threshold_level = lev;
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::set_format( output_format log_format )
+{
+    if( s_log_impl().m_entry_in_progress )
+        return;
+
+    switch( log_format ) {
+    default:
+    case OF_CLF:
+        set_formatter( new output::compiler_log_formatter );
+        break;
+    case OF_XML:
+        set_formatter( new output::xml_log_formatter );
+        break;
+    }
+}
+
+//____________________________________________________________________________//
+
+void
+unit_test_log_t::set_formatter( unit_test_log_formatter* the_formatter )
+{
+    s_log_impl().m_log_formatter.reset( the_formatter );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************            unit_test_log_formatter           ************** //
+// ************************************************************************** //
+
+void
+unit_test_log_formatter::log_entry_value( std::ostream& ostr, lazy_ostream const& value )
+{
+    log_entry_value( ostr, (wrap_stringstream().ref() << value).str() );
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UNIT_TEST_LOG_IPP_012205GER
diff --git a/vendor/pdalboost/boost/test/impl/unit_test_main.ipp b/vendor/pdalboost/boost/test/impl/unit_test_main.ipp
new file mode 100644
index 0000000..44c8473
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/unit_test_main.ipp
@@ -0,0 +1,293 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : main function implementation for Unit Test Framework
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_MAIN_IPP_012205GER
+#define BOOST_TEST_UNIT_TEST_MAIN_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/framework.hpp>
+#include <boost/test/results_collector.hpp>
+#include <boost/test/results_reporter.hpp>
+
+#include <boost/test/tree/visitor.hpp>
+#include <boost/test/tree/test_unit.hpp>
+#include <boost/test/tree/traverse.hpp>
+
+#include <boost/test/unit_test_parameters.hpp>
+
+#include <boost/test/utils/foreach.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+// Boost
+#include <boost/cstdlib.hpp>
+
+// STL
+#include <cstdio>
+#include <stdexcept>
+#include <iostream>
+#include <iomanip>
+#include <set>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+namespace ut_detail {
+
+// ************************************************************************** //
+// **************             hrf_content_reporter             ************** //
+// ************************************************************************** //
+
+struct hrf_content_reporter : test_tree_visitor {
+    explicit        hrf_content_reporter( std::ostream& os ) : m_os( os ), m_indent( -4 ) {} // skip master test suite
+
+private:
+    void            report_test_unit( test_unit const& tu )
+    {
+        m_os << std::setw( m_indent ) << "" << tu.p_name;
+        m_os << (tu.p_default_status == test_unit::RS_ENABLED ? "*" : " ");
+        //m_os << '[' << tu.p_sibling_rank << ']';
+        if( !tu.p_description->empty() )
+            m_os << ": " << tu.p_description;
+
+        m_os << "\n";
+    }
+    virtual void    visit( test_case const& tc ) { report_test_unit( tc ); }
+    virtual bool    test_suite_start( test_suite const& ts )
+    {
+        if( m_indent >= 0 )
+            report_test_unit( ts );
+        m_indent += 4;
+        return true;
+    }
+    virtual void    test_suite_finish( test_suite const& )
+    {
+        m_indent -= 4;
+    }
+
+    // Data members
+    std::ostream&   m_os;
+    int             m_indent;
+};
+
+// ************************************************************************** //
+// **************             dot_content_reporter             ************** //
+// ************************************************************************** //
+
+struct dot_content_reporter : test_tree_visitor {
+    explicit        dot_content_reporter( std::ostream& os ) : m_os( os ) {}
+
+private:
+    void            report_test_unit( test_unit const& tu )
+    {
+        bool master_ts = tu.p_parent_id == INV_TEST_UNIT_ID;
+
+        m_os << "tu" << tu.p_id;
+
+        m_os << (master_ts ? "[shape=ellipse,peripheries=2" : "[shape=Mrecord" );
+
+        m_os << ",fontname=Helvetica";
+
+        m_os << (tu.p_default_status == test_unit::RS_ENABLED ? ",color=green" : ",color=yellow");
+
+        if( master_ts )
+            m_os << ",label=\"" << tu.p_name << "\"];\n";
+        else {
+            m_os << ",label=\"" << tu.p_name << "|" << tu.p_file_name << "(" << tu.p_line_num << ")";
+            if( tu.p_timeout > 0  )
+                m_os << "|timeout=" << tu.p_timeout;
+            if( tu.p_expected_failures != 0  )
+                m_os << "|expected failures=" << tu.p_expected_failures;
+            if( !tu.p_labels->empty() ) {
+                m_os << "|labels:";
+
+                BOOST_TEST_FOREACH( std::string const&, l, tu.p_labels.get() )
+                    m_os << " @" << l;
+            }
+            m_os << "\"];\n";
+        }
+
+        if( !master_ts )
+            m_os << "tu" << tu.p_parent_id << " -> " << "tu" << tu.p_id << ";\n";
+
+        BOOST_TEST_FOREACH( test_unit_id, dep_id, tu.p_dependencies.get() ) {
+            test_unit const& dep = framework::get( dep_id, TUT_ANY );
+
+            m_os << "tu" << tu.p_id << " -> " << "tu" << dep.p_id << "[color=red,style=dotted,constraint=false];\n";
+        }
+
+    }
+    virtual void    visit( test_case const& tc )
+    { 
+        report_test_unit( tc );
+    }
+    virtual bool    test_suite_start( test_suite const& ts )
+    {
+        if( ts.p_parent_id == INV_TEST_UNIT_ID )
+            m_os << "digraph G {rankdir=LR;\n";
+
+        report_test_unit( ts );
+
+        m_os << "{\n";
+
+        return true;
+    }
+    virtual void    test_suite_finish( test_suite const& ts )
+    {
+        m_os << "}\n";
+        if( ts.p_parent_id == INV_TEST_UNIT_ID )
+            m_os << "}\n";
+    }
+
+    std::ostream&   m_os;
+};
+
+// ************************************************************************** //
+// **************               labels_collector               ************** //
+// ************************************************************************** //
+
+struct labels_collector : test_tree_visitor {
+    std::set<std::string> const& labels() const { return m_labels; }
+
+private:
+    virtual bool            visit( test_unit const& tu ) 
+    {
+        m_labels.insert( tu.p_labels->begin(), tu.p_labels->end() );
+        return true;
+    }
+
+    // Data members
+    std::set<std::string>   m_labels;
+};
+
+} // namespace ut_detail
+
+// ************************************************************************** //
+// **************                  unit_test_main              ************** //
+// ************************************************************************** //
+
+int BOOST_TEST_DECL
+unit_test_main( init_unit_test_func init_func, int argc, char* argv[] )
+{
+    int result_code = 0;
+
+    BOOST_TEST_I_TRY {
+        framework::init( init_func, argc, argv );
+
+        if( runtime_config::get<bool>( runtime_config::WAIT_FOR_DEBUGGER ) ) {
+            results_reporter::get_stream() << "Press any key to continue..." << std::endl;
+
+            std::getchar();
+            results_reporter::get_stream() << "Continuing..." << std::endl;
+        }
+
+        framework::finalize_setup_phase();
+
+        output_format list_cont = runtime_config::get<output_format>( runtime_config::LIST_CONTENT );
+        if( list_cont != unit_test::OF_INVALID ) {
+            if( list_cont == unit_test::OF_DOT ) {
+                ut_detail::dot_content_reporter reporter( results_reporter::get_stream() );
+
+                traverse_test_tree( framework::master_test_suite().p_id, reporter, true );
+            }
+            else {
+                ut_detail::hrf_content_reporter reporter( results_reporter::get_stream() );
+
+                traverse_test_tree( framework::master_test_suite().p_id, reporter, true );
+            }
+
+            return pdalboost::exit_success;
+        }
+
+        if( runtime_config::get<bool>( runtime_config::LIST_LABELS ) ) {
+            ut_detail::labels_collector collector;
+
+            traverse_test_tree( framework::master_test_suite().p_id, collector, true );
+
+            results_reporter::get_stream() << "Available labels:\n  ";
+            std::copy( collector.labels().begin(), collector.labels().end(), 
+                       std::ostream_iterator<std::string>( results_reporter::get_stream(), "\n  " ) );
+            results_reporter::get_stream() << "\n";
+
+            return pdalboost::exit_success;
+        }
+
+        framework::run();
+
+        results_reporter::make_report();
+
+        result_code = !runtime_config::get<bool>( runtime_config::RESULT_CODE )
+                        ? pdalboost::exit_success
+                        : results_collector.results( framework::master_test_suite().p_id ).result_code();
+    }
+    BOOST_TEST_I_CATCH( framework::nothing_to_test, ex ) {
+        result_code = ex.m_result_code;
+    }
+    BOOST_TEST_I_CATCH( framework::internal_error, ex ) {
+        results_reporter::get_stream() << "Boost.Test framework internal error: " << ex.what() << std::endl;
+
+        result_code = pdalboost::exit_exception_failure;
+    }
+    BOOST_TEST_I_CATCH( framework::setup_error, ex ) {
+        results_reporter::get_stream() << "Test setup error: " << ex.what() << std::endl;
+
+        result_code = pdalboost::exit_exception_failure;
+    }
+    BOOST_TEST_I_CATCHALL() {
+        results_reporter::get_stream() << "Boost.Test framework internal error: unknown reason" << std::endl;
+
+        result_code = pdalboost::exit_exception_failure;
+    }
+
+    framework::shutdown();
+
+    return result_code;
+}
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#if !defined(BOOST_TEST_DYN_LINK) && !defined(BOOST_TEST_NO_MAIN)
+
+// ************************************************************************** //
+// **************        main function for tests using lib     ************** //
+// ************************************************************************** //
+
+int BOOST_TEST_CALL_DECL
+main( int argc, char* argv[] )
+{
+    // prototype for user's unit test init function
+#ifdef BOOST_TEST_ALTERNATIVE_INIT_API
+    extern bool init_unit_test();
+
+    pdalboost::unit_test::init_unit_test_func init_func = &init_unit_test;
+#else
+    extern ::pdalboost::unit_test::test_suite* init_unit_test_suite( int argc, char* argv[] );
+
+    pdalboost::unit_test::init_unit_test_func init_func = &init_unit_test_suite;
+#endif
+
+    return ::pdalboost::unit_test::unit_test_main( init_func, argc, argv );
+}
+
+#endif // !BOOST_TEST_DYN_LINK && !BOOST_TEST_NO_MAIN
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UNIT_TEST_MAIN_IPP_012205GER
diff --git a/vendor/pdalboost/boost/test/impl/unit_test_monitor.ipp b/vendor/pdalboost/boost/test/impl/unit_test_monitor.ipp
new file mode 100644
index 0000000..71795d9
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/unit_test_monitor.ipp
@@ -0,0 +1,75 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : implements specific subclass of Executon Monitor used by Unit
+//  Test Framework to monitor test cases run.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_MONITOR_IPP_012205GER
+#define BOOST_TEST_UNIT_TEST_MONITOR_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/unit_test_monitor.hpp>
+#include <boost/test/framework.hpp>
+#include <boost/test/tree/test_unit.hpp>
+#include <boost/test/unit_test_parameters.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************               unit_test_monitor              ************** //
+// ************************************************************************** //
+
+unit_test_monitor_t::error_level
+unit_test_monitor_t::execute_and_translate( pdalboost::function<void ()> const& func, unsigned timeout )
+{
+    BOOST_TEST_I_TRY {
+        p_catch_system_errors.value     = runtime_config::get<bool>( runtime_config::CATCH_SYS_ERRORS );
+        p_timeout.value                 = timeout;
+        p_auto_start_dbg.value          = runtime_config::get<bool>( runtime_config::AUTO_START_DBG );
+        p_use_alt_stack.value           = runtime_config::get<bool>( runtime_config::USE_ALT_STACK );
+        p_detect_fp_exceptions.value    = runtime_config::get<bool>( runtime_config::DETECT_FP_EXCEPT );
+
+        vexecute( func );
+    }
+    BOOST_TEST_I_CATCH( execution_exception, ex ) {
+        framework::exception_caught( ex );
+        framework::test_unit_aborted( framework::current_test_case() );
+
+        // translate execution_exception::error_code to error_level
+        switch( ex.code() ) {
+        case execution_exception::no_error:             return test_ok;
+        case execution_exception::user_error:           return unexpected_exception;
+        case execution_exception::cpp_exception_error:  return unexpected_exception;
+        case execution_exception::system_error:         return os_exception;
+        case execution_exception::timeout_error:        return os_timeout;
+        case execution_exception::user_fatal_error:
+        case execution_exception::system_fatal_error:   return fatal_error;
+        default:                                        return unexpected_exception;
+        }
+    }
+
+    return test_ok;
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UNIT_TEST_MONITOR_IPP_012205GER
diff --git a/vendor/pdalboost/boost/test/impl/unit_test_parameters.ipp b/vendor/pdalboost/boost/test/impl/unit_test_parameters.ipp
new file mode 100644
index 0000000..a02e722
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/unit_test_parameters.ipp
@@ -0,0 +1,729 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : simple implementation for Unit Test Framework parameter
+//  handling routines. May be rewritten in future to use some kind of
+//  command-line arguments parsing facility and environment variable handling
+//  facility
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_PARAMETERS_IPP_012205GER
+#define BOOST_TEST_UNIT_TEST_PARAMETERS_IPP_012205GER
+
+// Boost.Test
+#include <boost/test/unit_test_parameters.hpp>
+
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+#include <boost/test/utils/basic_cstring/compare.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+#include <boost/test/debug.hpp>
+#include <boost/test/framework.hpp>
+
+#include <boost/test/detail/log_level.hpp>
+#include <boost/test/detail/throw_exception.hpp>
+
+// Boost.Runtime.Param
+#include <boost/test/utils/runtime/parameter.hpp>
+#include <boost/test/utils/runtime/argument.hpp>
+#include <boost/test/utils/runtime/finalize.hpp>
+#include <boost/test/utils/runtime/cla/parser.hpp>
+#include <boost/test/utils/runtime/env/fetch.hpp>
+
+// Boost
+#include <boost/config.hpp>
+#include <boost/test/detail/suppress_warnings.hpp>
+#include <boost/test/detail/enable_warnings.hpp>
+#include <boost/optional.hpp>
+#include <boost/cstdlib.hpp>
+
+// STL
+#include <cstdlib>
+#include <iostream>
+#include <fstream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+# ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::getenv; using ::strncmp; using ::strcmp; }
+# endif
+
+namespace pdalboost {
+namespace unit_test {
+
+namespace rt = pdalboost::runtime;
+
+// ************************************************************************** //
+// **************                 runtime_config               ************** //
+// ************************************************************************** //
+
+namespace runtime_config {
+
+// UTF parameters 
+std::string AUTO_START_DBG    = "auto_start_dbg";
+std::string BREAK_EXEC_PATH   = "break_exec_path";
+std::string BUILD_INFO        = "build_info";
+std::string CATCH_SYS_ERRORS  = "catch_system_errors";
+std::string COLOR_OUTPUT      = "color_output";
+std::string DETECT_FP_EXCEPT  = "detect_fp_exceptions";
+std::string DETECT_MEM_LEAKS  = "detect_memory_leaks";
+std::string LIST_CONTENT      = "list_content";
+std::string LIST_LABELS       = "list_labels";
+std::string LOG_FORMAT        = "log_format";
+std::string LOG_LEVEL         = "log_level";
+std::string LOG_SINK          = "log_sink";
+std::string OUTPUT_FORMAT     = "output_format";
+std::string RANDOM_SEED       = "random";
+std::string REPORT_FORMAT     = "report_format";
+std::string REPORT_LEVEL      = "report_level";
+std::string REPORT_MEM_LEAKS  = "report_memory_leaks_to";
+std::string REPORT_SINK       = "report_sink";
+std::string RESULT_CODE       = "result_code";
+std::string RUN_FILTERS       = "run_test";
+std::string SAVE_TEST_PATTERN = "save_pattern";
+std::string SHOW_PROGRESS     = "show_progress";
+std::string USE_ALT_STACK     = "use_alt_stack";
+std::string WAIT_FOR_DEBUGGER = "wait_for_debugger";
+
+std::string HELP              = "help";
+std::string USAGE             = "usage";
+
+//____________________________________________________________________________//
+
+namespace {
+
+void
+register_parameters( rt::parameters_store& store )
+{
+    rt::option auto_start_dbg( AUTO_START_DBG, (
+        rt::description = "Automatically attaches debugger in case of system level failure (signal).",
+        rt::env_var = "BOOST_TEST_AUTO_START_DBG",
+
+        rt::help = "Option " + AUTO_START_DBG + " specifies whether Boost.Test should attempt "
+                   "to attach a debugger when fatal system error occurs. At the moment this feature "
+                   "is only available on a few selected platforms: Win32 and *nix. There is a "
+                   "default debugger configured for these platforms. You can manually configure "
+                   "different debugger. For more details on how to configure the debugger see the "
+                   "Boost.Test debug API, specifically the function pdalboost::debug::set_debugger."
+    ));
+
+    auto_start_dbg.add_cla_id( "--", AUTO_START_DBG, "=" );
+    auto_start_dbg.add_cla_id( "-", "d", " " );
+    store.add( auto_start_dbg );
+
+    ///////////////////////////////////////////////
+
+    rt::parameter<std::string> break_exec_path( BREAK_EXEC_PATH, (
+        rt::description = "For the exception safety testing allows to break at specific execution path.",
+        rt::env_var = "BOOST_TEST_BREAK_EXEC_PATH"
+#ifndef BOOST_NO_CXX11_LAMBDAS
+        ,
+        rt::callback = [](rt::cstring) {
+            BOOST_TEST_SETUP_ASSERT( false, "parameter break_exec_path is disabled in this release" );
+        }
+#endif
+    ));
+
+    break_exec_path.add_cla_id( "--", BREAK_EXEC_PATH, "=" );    
+    store.add( break_exec_path );
+
+    rt::option build_info( BUILD_INFO, (
+        rt::description = "Displays library build information.",
+        rt::env_var = "BOOST_TEST_BUILD_INFO",
+        rt::help = "Option " + BUILD_INFO + " displays library build information, including: platform, "
+                   "compiler, STL version and Boost version."
+    ));
+
+    ///////////////////////////////////////////////
+
+    build_info.add_cla_id( "--", BUILD_INFO, "=" );
+    build_info.add_cla_id( "-", "i", " " );
+    store.add( build_info );
+
+
+    rt::option catch_sys_errors( CATCH_SYS_ERRORS, (
+        rt::description = "Allows to switch between catching and ignoring system errors (signals).",
+        rt::env_var = "BOOST_TEST_CATCH_SYSTEM_ERRORS",
+        rt::default_value =
+#ifdef BOOST_TEST_DEFAULTS_TO_CORE_DUMP
+            false,
+#else
+            true,
+#endif
+        rt::help = "If option " + CATCH_SYS_ERRORS + " has value no the frameworks does not attempt to catch "
+                   "asynchronous system failure events (signals on *NIX platforms or structured exceptions on Windows). "
+                   " Default value is " 
+#ifdef BOOST_TEST_DEFAULTS_TO_CORE_DUMP
+                    "no."
+#else
+                    "true."
+#endif
+    ));
+
+    catch_sys_errors.add_cla_id( "--", CATCH_SYS_ERRORS, "=", true );
+    catch_sys_errors.add_cla_id( "-", "s", " " );
+    store.add( catch_sys_errors );
+
+    ///////////////////////////////////////////////
+
+    rt::option color_output( COLOR_OUTPUT, (
+        rt::description = "Enables color output of the framework log and report messages.",
+        rt::env_var = "BOOST_TEST_COLOR_OUTPUT",
+        rt::help = "The framework is able to produce color output on systems which supports it. "
+                   "To enable this behavior set this option to yes. By default the framework "
+                   "does not produces color output."
+    ));
+
+    color_output.add_cla_id( "--", COLOR_OUTPUT, "=", true );
+    color_output.add_cla_id( "-", "x", " " );
+    store.add( color_output );
+
+    ///////////////////////////////////////////////
+
+    rt::option detect_fp_except( DETECT_FP_EXCEPT, (
+        rt::description = "Enables/disables floating point exceptions traps.",
+        rt::env_var = "BOOST_TEST_DETECT_FP_EXCEPTIONS",
+        rt::help = "Option " + DETECT_FP_EXCEPT + " enables/disables hardware traps for the floating "
+                   "point exceptions (if supported on your platfrom)."
+    ));
+
+    detect_fp_except.add_cla_id( "--", DETECT_FP_EXCEPT, "=", true );
+    store.add( detect_fp_except );
+
+    ///////////////////////////////////////////////
+
+    rt::parameter<unsigned long> detect_mem_leaks( DETECT_MEM_LEAKS, (
+        rt::description = "Turns on/off memory leaks detection (optionally breaking on specified alloc order number).",
+        rt::env_var = "BOOST_TEST_DETECT_MEMORY_LEAK",
+        rt::default_value = 1L,
+        rt::optional_value = 1L,
+        rt::value_hint = "<alloc order number>",
+        rt::help = "Parameter " + DETECT_MEM_LEAKS + " enables/disables memory leaks detection. "
+                   "This parameter has optional long integer value. The default value is 1, which "
+                   "enables the memory leak detection. The value 0 disables memory leak detection. "
+                   "Any value N greater than 1 is treated as leak allocation number and tells the "
+                   "framework to setup runtime breakpoint at Nth heap allocation. If value is "
+                   "omitted the default value is assumed."
+    ));
+
+    detect_mem_leaks.add_cla_id( "--", DETECT_MEM_LEAKS, "=" );
+    store.add( detect_mem_leaks );
+
+    ///////////////////////////////////////////////
+
+    rt::enum_parameter<unit_test::output_format> list_content( LIST_CONTENT, (
+        rt::description = "Lists the content of test tree - names of all test suites and test cases.",
+        rt::env_var = "BOOST_TEST_LIST_CONTENT",
+        rt::default_value = OF_INVALID,
+        rt::optional_value = OF_CLF,
+        rt::enum_values<unit_test::output_format>::value = 
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
+        {
+            { "HRF", OF_CLF },
+            { "DOT", OF_DOT }
+        },
+#else
+        rt::enum_values_list<unit_test::output_format>()
+            ( "HRF", OF_CLF )
+            ( "DOT", OF_DOT )
+        ,
+#endif
+        rt::help = "Parameter " + LIST_CONTENT + " instructs the framework to list the content "
+                   "of the test module instead of executing the test cases. Parameter accepts "
+                   "optional string value indicating the format of the output. Currently the "
+                   "framework supports two formats: human readable format (HRF) and dot graph "
+                   "format (DOT). If value is omitted HRF value is assumed."
+    ));
+    list_content.add_cla_id( "--", LIST_CONTENT, "=" );
+    store.add( list_content );
+
+    ///////////////////////////////////////////////
+
+    rt::option list_labels( LIST_LABELS, (
+        rt::description = "Lists all available labels.",
+        rt::env_var = "BOOST_TEST_LIST_LABELS",
+        rt::help = "Option " + LIST_LABELS + " instructs the framework to list all the the labels "
+                   "defined in the test module instead of executing the test cases."
+    ));
+
+    list_labels.add_cla_id( "--", LIST_LABELS, "=" );
+    store.add( list_labels );
+
+    ///////////////////////////////////////////////
+
+    rt::enum_parameter<unit_test::output_format> log_format( LOG_FORMAT, (
+        rt::description = "Specifies log format.",
+        rt::env_var = "BOOST_TEST_LOG_FORMAT",
+        rt::default_value = OF_CLF,
+        rt::enum_values<unit_test::output_format>::value =
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
+        {
+            { "HRF", OF_CLF },
+            { "CLF", OF_CLF },
+            { "XML", OF_XML }
+        },
+#else
+        rt::enum_values_list<unit_test::output_format>()
+            ( "HRF", OF_CLF )
+            ( "CLF", OF_CLF )
+            ( "XML", OF_XML )
+        ,
+#endif
+        rt::help = "Parameter " + LOG_FORMAT + " allows to set the frameowrk's log format to one "
+                   "of the formats supplied by the framework. The only acceptable values for this "
+                   "parameter are the names of the output formats supplied by the framework. By "
+                   "default the framework uses human readable format (HRF) for testing log. This "
+                   "format is similar to compiler error format. Alternatively you can specify XML "
+                   "as log format. This format is easier to process by testing automation tools."
+    ));
+
+    log_format.add_cla_id( "--", LOG_FORMAT, "=" );
+    log_format.add_cla_id( "-", "f", " " );
+    store.add( log_format );
+
+    ///////////////////////////////////////////////
+
+    rt::enum_parameter<unit_test::log_level> log_level( LOG_LEVEL, (
+        rt::description = "Specifies log level.",
+        rt::env_var = "BOOST_TEST_LOG_LEVEL",
+        rt::default_value = log_all_errors,
+        rt::enum_values<unit_test::log_level>::value =
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
+        {
+            { "all"           , log_successful_tests },
+            { "success"       , log_successful_tests },
+            { "test_suite"    , log_test_units },
+            { "unit_scope"    , log_test_units },
+            { "message"       , log_messages },
+            { "warning"       , log_warnings },
+            { "error"         , log_all_errors },
+            { "cpp_exception" , log_cpp_exception_errors },
+            { "system_error"  , log_system_errors },
+            { "fatal_error"   , log_fatal_errors },
+            { "nothing"       , log_nothing }
+        },
+#else
+        rt::enum_values_list<unit_test::log_level>()
+            ( "all"           , log_successful_tests )
+            ( "success"       , log_successful_tests )
+            ( "test_suite"    , log_test_units )
+            ( "unit_scope"    , log_test_units )
+            ( "message"       , log_messages )
+            ( "warning"       , log_warnings )
+            ( "error"         , log_all_errors )
+            ( "cpp_exception" , log_cpp_exception_errors )
+            ( "system_error"  , log_system_errors )
+            ( "fatal_error"   , log_fatal_errors )
+            ( "nothing"       , log_nothing )
+        ,
+#endif
+        rt::help = "Parameter " + LOG_LEVEL + " allows to set the framework's log level. "
+                   "Log level defines the verbosity of testing log produced by a testing "
+                   "module. The verbosity ranges from a complete log, when all assertions "
+                   "(both successful and failing) are reported, all notifications about "
+                   "test units start and finish are included, to an empty log when nothing "
+                   "is reported to a testing log stream."
+    ));
+
+    log_level.add_cla_id( "--", LOG_LEVEL, "=" );
+    log_level.add_cla_id( "-", "l", " " );
+    store.add( log_level );
+
+    ///////////////////////////////////////////////
+
+    rt::parameter<std::string> log_sink( LOG_SINK, (
+        rt::description = "Specifies log sink: stdout(default), stderr or file name.",
+        rt::env_var = "BOOST_TEST_LOG_SINK",
+        rt::value_hint = "<stderr|stdout|file name>",
+        rt::help = "Parameter " + LOG_SINK + " allows to set the log sink - location "
+                   "where we report the log to, thus it allows to easily redirect the "
+                   "test logs to file or standard streams. By default testing log is "
+                   "directed to standard output."
+    ));
+
+    log_sink.add_cla_id( "--", LOG_SINK, "=" );
+    log_sink.add_cla_id( "-", "k", " " );
+    store.add( log_sink );
+
+    ///////////////////////////////////////////////
+
+    rt::enum_parameter<unit_test::output_format> output_format( OUTPUT_FORMAT, (
+        rt::description = "Specifies output format (both log and report).",
+        rt::env_var = "BOOST_TEST_OUTPUT_FORMAT",
+        rt::enum_values<unit_test::output_format>::value =
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
+        {
+            { "HRF", OF_CLF },
+            { "CLF", OF_CLF },
+            { "XML", OF_XML }
+        },
+#else
+        rt::enum_values_list<unit_test::output_format>()
+            ( "HRF", OF_CLF )
+            ( "CLF", OF_CLF )
+            ( "XML", OF_XML )
+        ,
+#endif
+        rt::help = "Parameter " + OUTPUT_FORMAT + " combines an effect of " + REPORT_FORMAT + 
+                   " and " + LOG_FORMAT + " parameters. This parameter has higher priority "
+                   "than either one of them. In other words if this parameter is specified "
+                   "it overrides the value of other two parameters. This parameter does not "
+                   "have a default value. The only acceptable values are string names of "
+                   "output formats: HRF - human readable format and XML - XML formats for "
+                   "automation tools processing."
+    ));
+
+    output_format.add_cla_id( "--", OUTPUT_FORMAT, "=" );
+    output_format.add_cla_id( "-", "o", " " );
+    store.add( output_format );
+
+    ///////////////////////////////////////////////
+
+    rt::parameter<unsigned> random_seed( RANDOM_SEED, (
+        rt::description = "Allows to switch between sequential and random order of test units execution."
+                          " Optionally allows to specify concrete seed for random number generator.",
+        rt::env_var = "BOOST_TEST_RANDOM",
+        rt::default_value = 0U,
+        rt::optional_value = 1U,
+        rt::value_hint = "<seed>",
+        rt::help = "Parameter " + RANDOM_SEED + " instructs the framework to execute the "
+                   "test cases in random order. This parameter accepts optional unsigned "
+                   "integer argument. By default test cases are executed in some specific "
+                   "order defined by order of test units in test files and dependency between "
+                   "test units. If parameter is specified without the argument value testing "
+                   "order is randomized based on current time. Alternatively you can specify "
+                   "any positive value greater than 1 and it will be used as random seed for "
+                   "the run."
+    ));
+
+    random_seed.add_cla_id( "--", RANDOM_SEED, "=" );
+    store.add( random_seed );
+
+    ///////////////////////////////////////////////
+
+    rt::enum_parameter<unit_test::output_format> report_format( REPORT_FORMAT, (
+        rt::description = "Specifies report format.",
+        rt::env_var = "BOOST_TEST_REPORT_FORMAT",
+        rt::default_value = OF_CLF,
+        rt::enum_values<unit_test::output_format>::value =
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
+        {
+            { "HRF", OF_CLF },
+            { "CLF", OF_CLF },
+            { "XML", OF_XML }
+        },
+#else
+        rt::enum_values_list<unit_test::output_format>()
+            ( "HRF", OF_CLF )
+            ( "CLF", OF_CLF )
+            ( "XML", OF_XML )
+        ,
+#endif
+        rt::help = "Parameter " + REPORT_FORMAT + " allows to set the framework's report format "
+                   "to one of the formats supplied by the framework. The only acceptable values "
+                   "for this parameter are the names of the output formats. By default the framework "
+                   "uses human readable format (HRF) for results reporting. Alternatively you can "
+                   "specify XML as report format. This format is easier to process by testing "
+                   "automation tools."
+    ));
+
+    report_format.add_cla_id( "--", REPORT_FORMAT, "=" );
+    report_format.add_cla_id( "-", "m", " " );
+    store.add( report_format );
+
+    ///////////////////////////////////////////////
+
+    rt::enum_parameter<unit_test::report_level> report_level( REPORT_LEVEL, (
+        rt::description = "Specifies report level.",
+        rt::env_var = "BOOST_TEST_REPORT_LEVEL",
+        rt::default_value = CONFIRMATION_REPORT,
+        rt::enum_values<unit_test::report_level>::value =
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
+        {
+            { "confirm",  CONFIRMATION_REPORT },
+            { "short",    SHORT_REPORT },
+            { "detailed", DETAILED_REPORT },
+            { "no",       NO_REPORT }
+        },
+#else
+        rt::enum_values_list<unit_test::report_level>()
+            ( "confirm",  CONFIRMATION_REPORT )
+            ( "short",    SHORT_REPORT )
+            ( "detailed", DETAILED_REPORT )
+            ( "no",       NO_REPORT )
+        ,
+#endif
+        rt::help = "Parameter " + REPORT_LEVEL + " allows to set the verbosity level of the "
+                   "testing result report generated by the framework. Use value 'no' to "
+                   "eliminate the results report completely."
+    ));
+
+    report_level.add_cla_id( "--", REPORT_LEVEL, "=" );
+    report_level.add_cla_id( "-", "r", " " );
+    store.add( report_level );
+
+    ///////////////////////////////////////////////
+
+    rt::parameter<std::string> report_mem_leaks( REPORT_MEM_LEAKS, (
+        rt::description = "File where to report memory leaks to.",
+        rt::env_var = "BOOST_TEST_REPORT_MEMORY_LEAKS_TO",
+        rt::default_value = std::string(),
+        rt::value_hint = "<file name>",
+        rt::help = "Parameter " + REPORT_MEM_LEAKS + " allows to specify a file where to report "
+                   "memory leaks to. The parameter does not have default value. If it is not specified, "
+                   "memory leaks (if any) are reported to the standard error stream."
+    ));
+
+    report_mem_leaks.add_cla_id( "--", REPORT_MEM_LEAKS, "=" );
+    store.add( report_mem_leaks );
+
+    ///////////////////////////////////////////////
+
+    rt::parameter<std::string> report_sink( REPORT_SINK, (
+        rt::description = "Specifies report sink: stderr(default), stdout or file name.",
+        rt::env_var = "BOOST_TEST_REPORT_SINK",
+        rt::value_hint = "<stderr|stdout|file name>",
+        rt::help = "Parameter " + REPORT_SINK + " allows to set the result report sink - "
+                   "the location where the framework writes the result report to, thus it "
+                   "allows to easily redirect the result report to a file or a standard "
+                   "stream. By default the testing result report is directed to the "
+                   "standard error stream."
+    ));
+
+    report_sink.add_cla_id( "--", REPORT_SINK, "=" );
+    report_sink.add_cla_id( "-", "e", " " );
+    store.add( report_sink );
+
+    ///////////////////////////////////////////////
+
+    rt::option result_code( RESULT_CODE, (
+        rt::description = "Disables test modules's result code generation.",
+        rt::env_var = "BOOST_TEST_RESULT_CODE",
+        rt::default_value = true,
+        rt::help = "The 'no' argument value for the parameter " + RESULT_CODE + " instructs the "
+                   "framework to always return zero result code. This can be used for test programs "
+                   "executed within IDE. By default this parameter has value 'yes'."
+    ));
+
+    result_code.add_cla_id( "--", RESULT_CODE, "=", true );
+    result_code.add_cla_id( "-", "c", " " );
+    store.add( result_code );
+
+    ///////////////////////////////////////////////
+
+    rt::parameter<std::string,rt::REPEATABLE_PARAM> tests_to_run( RUN_FILTERS, (
+        rt::description = "Filters, which test units to include or exclude from test module execution.",
+        rt::env_var = "BOOST_TEST_RUN_FILTERS",
+        rt::value_hint = "<test unit filter>",
+        rt::help = "Parameter " + RUN_FILTERS + " allows to filter which test units to execute during "
+                   "testing. The framework supports both 'selection filters', which allow to select "
+                   "which test units to enable from the set of available test units, and 'disabler "
+                   "filters', which allow to disable some test units. The __UTF__ also supports "
+                   "enabling/disabling test units at compile time. These settings identify the default "
+                   "set of test units to run. Parameter " + RUN_FILTERS + " is used to change this default. "
+                   "This parameter is repeatable, so you can specify more than one filter if necessary." 
+    ));
+
+    tests_to_run.add_cla_id( "--", RUN_FILTERS, "=" );
+    tests_to_run.add_cla_id( "-", "t", " " );
+    store.add( tests_to_run );
+
+    ///////////////////////////////////////////////
+
+    rt::option save_test_pattern( SAVE_TEST_PATTERN, (
+        rt::description = "Allows to switch between saving or matching test pattern file.",
+        rt::env_var = "BOOST_TEST_SAVE_PATTERN",
+        rt::help = "Parameter " + SAVE_TEST_PATTERN + " facilitates switching mode of operation for "
+                   "testing output streams.\n\nThis parameter serves no particular purpose within the "
+                   "framework itself. It can be used by test modules relying on output_test_stream to " 
+                   "implement testing logic. Default mode is 'match' (false)." 
+    ));
+
+    save_test_pattern.add_cla_id( "--", SAVE_TEST_PATTERN, "=" );
+    store.add( save_test_pattern );
+
+    ///////////////////////////////////////////////
+
+    rt::option show_progress( SHOW_PROGRESS, (
+        rt::description = "Turns on progress display.",
+        rt::env_var = "BOOST_TEST_SHOW_PROGRESS",
+        rt::help = "Parameter " + SHOW_PROGRESS + " instructs the framework to display test progress "
+                   "information. By default the test progress is not shown."
+    ));
+
+    show_progress.add_cla_id( "--", SHOW_PROGRESS, "=" );
+    show_progress.add_cla_id( "-", "p", " " );
+    store.add( show_progress );
+
+    ///////////////////////////////////////////////
+
+    rt::option use_alt_stack( USE_ALT_STACK, (
+        rt::description = "Turns on/off usage of an alternative stack for signal handling.",
+        rt::env_var = "BOOST_TEST_USE_ALT_STACK",
+        rt::default_value = true,
+        rt::help = "Parameter " + USE_ALT_STACK + " instructs the framework to use alternative "
+                   "stack for signals processing, on platforms where they are supported. The feature "
+                   "is enabled by default, but can be disabled using this parameter."
+    ));
+
+    use_alt_stack.add_cla_id( "--", USE_ALT_STACK, "=", true );
+    store.add( use_alt_stack );
+
+    ///////////////////////////////////////////////
+
+    rt::option wait_for_debugger( WAIT_FOR_DEBUGGER, (
+        rt::description = "Forces test module to wait for button to be pressed before starting test run.",
+        rt::env_var = "BOOST_TEST_WAIT_FOR_DEBUGGER",
+        rt::help = "Parameter " + WAIT_FOR_DEBUGGER + " instructs the framework to pause before starting "
+                   "test units execution, so that you can attach a debugger to running test module. By "
+                   "default this parameters turned off."
+    ));
+
+    wait_for_debugger.add_cla_id( "--", WAIT_FOR_DEBUGGER, "=" );
+    wait_for_debugger.add_cla_id( "-", "w", " " );
+    store.add( wait_for_debugger );
+
+    ///////////////////////////////////////////////
+
+    rt::parameter<std::string> help( HELP, (
+        rt::description = "Help for framework parameters.",
+        rt::optional_value = std::string(),
+        rt::value_hint = "<parameter name>",
+        rt::help = "Parameter " + HELP + " displays help on the framework's parameters. "
+                   "The parameter accepts an optional argument value. If present, an argument value is "
+                   "interpreted as a parameter name (name guessing works as well, so for example "
+                   "--help=rand displays help on the parameter random). If the parameter name is unknown "
+                   "or ambiguous error is reported. If argument value is absent, a summary of all "
+                   "framework's parameter is displayed."
+    ));
+    help.add_cla_id( "--", HELP, "=" );
+    store.add( help );
+
+    ///////////////////////////////////////////////
+
+    rt::option usage( USAGE, (
+        rt::description = "Short message explaining usage of Boost.Test parameters."
+    ));
+    usage.add_cla_id( "-", "?", " " );
+    store.add( usage );
+}
+
+static rt::arguments_store  s_arguments_store;
+static rt::parameters_store s_parameters_store;
+
+//____________________________________________________________________________//
+
+} // local namespace
+
+void
+init( int& argc, char** argv )
+{
+    shared_ptr<rt::cla::parser> parser;
+
+    BOOST_TEST_I_TRY {
+        // Initialize parameters list
+        if( s_parameters_store.is_empty() )
+            register_parameters( s_parameters_store );
+
+        // Clear up arguments store just in case (of multiple init invocations)
+        s_arguments_store.clear();
+
+        // Parse CLA they take precedence over  environment
+        parser.reset( new rt::cla::parser( s_parameters_store, (rt::end_of_params = "--", rt::negation_prefix = "no_") ) );
+        argc = parser->parse( argc, argv, s_arguments_store );
+
+        // Try to fetch missing arguments from environment
+        rt::env::fetch_absent( s_parameters_store, s_arguments_store );
+
+        // Set arguments to default values if defined and perform all the validations
+        rt::finalize_arguments( s_parameters_store, s_arguments_store );
+
+        // Report help if requested
+        if( runtime_config::get<bool>( USAGE ) ) {
+            parser->usage( std::cerr );
+            BOOST_TEST_I_THROW( framework::nothing_to_test( pdalboost::exit_success ) );
+        }
+        else if( s_arguments_store.has( HELP ) ) {
+            parser->help( std::cerr, s_parameters_store, runtime_config::get<std::string>( HELP ) );
+            BOOST_TEST_I_THROW( framework::nothing_to_test( pdalboost::exit_success ) );
+        }
+
+        // A bit of business logic: output_format takes precedence over log/report formats
+        if( s_arguments_store.has( OUTPUT_FORMAT ) ) {
+            unit_test::output_format of = s_arguments_store.get<unit_test::output_format>( OUTPUT_FORMAT );
+            s_arguments_store.set( REPORT_FORMAT, of );
+            s_arguments_store.set( LOG_FORMAT, of );
+        }
+    }
+    BOOST_TEST_I_CATCH( rt::init_error, ex ) {
+        BOOST_TEST_SETUP_ASSERT( false, ex.msg );
+    }
+    BOOST_TEST_I_CATCH( rt::ambiguous_param, ex ) {
+        std::cerr << ex.msg << "\n Did you mean one of these?\n";
+
+        BOOST_TEST_FOREACH( rt::cstring, name, ex.m_amb_candidates )
+            std::cerr << "   " << name << "\n";
+
+        BOOST_TEST_I_THROW( framework::nothing_to_test( pdalboost::exit_exception_failure ) );
+    }
+    BOOST_TEST_I_CATCH( rt::unrecognized_param, ex ) {
+        std::cerr << ex.msg << "\n";
+
+        if( !ex.m_typo_candidates.empty() ) {
+            std::cerr << " Did you mean one of these?\n";
+
+            BOOST_TEST_FOREACH( rt::cstring, name, ex.m_typo_candidates )
+                std::cerr << "   " << name << "\n";
+        }
+        else if( parser ) {
+            std::cerr << "\n";
+            parser->usage( std::cerr );
+        }
+        
+        BOOST_TEST_I_THROW( framework::nothing_to_test( pdalboost::exit_exception_failure ) );
+    }
+    BOOST_TEST_I_CATCH( rt::input_error, ex ) {
+        std::cerr << ex.msg << "\n\n";
+
+        if( parser )
+            parser->usage( std::cerr, ex.param_name );
+        
+        BOOST_TEST_I_THROW( framework::nothing_to_test( pdalboost::exit_exception_failure ) );
+    }
+}
+
+//____________________________________________________________________________//
+
+rt::arguments_store const&
+argument_store()
+{
+    return s_arguments_store;
+}
+
+//____________________________________________________________________________//
+
+bool
+save_pattern()
+{
+    return runtime_config::get<bool>( SAVE_TEST_PATTERN );
+}
+
+//____________________________________________________________________________//
+
+} // namespace runtime_config
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UNIT_TEST_PARAMETERS_IPP_012205GER
diff --git a/vendor/pdalboost/boost/test/impl/xml_log_formatter.ipp b/vendor/pdalboost/boost/test/impl/xml_log_formatter.ipp
new file mode 100644
index 0000000..dacffef
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/xml_log_formatter.ipp
@@ -0,0 +1,223 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : implements OF_XML Log formatter
+// ***************************************************************************
+
+#ifndef BOOST_TEST_XML_LOG_FORMATTER_IPP_020105GER
+#define BOOST_TEST_XML_LOG_FORMATTER_IPP_020105GER
+
+// Boost.Test
+#include <boost/test/output/xml_log_formatter.hpp>
+#include <boost/test/execution_monitor.hpp>
+#include <boost/test/framework.hpp>
+#include <boost/test/tree/test_unit.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+#include <boost/test/utils/xml_printer.hpp>
+
+// Boost
+#include <boost/version.hpp>
+
+// STL
+#include <iostream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace output {
+
+static const_string tu_type_name( test_unit const& tu )
+{
+    return tu.p_type == TUT_CASE ? "TestCase" : "TestSuite";
+}
+
+// ************************************************************************** //
+// **************               xml_log_formatter              ************** //
+// ************************************************************************** //
+
+void
+xml_log_formatter::log_start( std::ostream& ostr, counter_t )
+{
+    ostr  << "<TestLog>";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::log_finish( std::ostream& ostr )
+{
+    ostr  << "</TestLog>";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::log_build_info( std::ostream& ostr )
+{
+    ostr  << "<BuildInfo"
+            << " platform"  << utils::attr_value() << BOOST_PLATFORM
+            << " compiler"  << utils::attr_value() << BOOST_COMPILER
+            << " stl"       << utils::attr_value() << BOOST_STDLIB
+            << " boost=\""  << BOOST_VERSION/100000     << "."
+                            << BOOST_VERSION/100 % 1000 << "."
+                            << BOOST_VERSION % 100      << '\"'
+            << "/>";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::test_unit_start( std::ostream& ostr, test_unit const& tu )
+{
+    ostr << "<" << tu_type_name( tu ) << " name" << utils::attr_value() << tu.p_name.get();
+
+    if( !tu.p_file_name.empty() )
+        ostr << BOOST_TEST_L( " file" ) << utils::attr_value() << tu.p_file_name
+             << BOOST_TEST_L( " line" ) << utils::attr_value() << tu.p_line_num;
+
+    ostr << ">";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::test_unit_finish( std::ostream& ostr, test_unit const& tu, unsigned long elapsed )
+{
+    if( tu.p_type == TUT_CASE )
+        ostr << "<TestingTime>" << elapsed << "</TestingTime>";
+
+    ostr << "</" << tu_type_name( tu ) << ">";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::test_unit_skipped( std::ostream& ostr, test_unit const& tu, const_string reason )
+{
+    ostr << "<" << tu_type_name( tu )
+         << " name"    << utils::attr_value() << tu.p_name
+         << " skipped" << utils::attr_value() << "yes"
+         << " reason"  << utils::attr_value() << reason
+         << "/>";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::log_exception_start( std::ostream& ostr, log_checkpoint_data const& checkpoint_data, execution_exception const& ex )
+{
+    execution_exception::location const& loc = ex.where();
+
+    ostr << "<Exception file" << utils::attr_value() << loc.m_file_name
+         << " line"           << utils::attr_value() << loc.m_line_num;
+
+    if( !loc.m_function.is_empty() )
+        ostr << " function"   << utils::attr_value() << loc.m_function;
+
+    ostr << ">" << utils::cdata() << ex.what();
+
+    if( !checkpoint_data.m_file_name.is_empty() ) {
+        ostr << "<LastCheckpoint file" << utils::attr_value() << checkpoint_data.m_file_name
+             << " line"                << utils::attr_value() << checkpoint_data.m_line_num
+             << ">"
+             << utils::cdata() << checkpoint_data.m_message
+             << "</LastCheckpoint>";
+    }
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::log_exception_finish( std::ostream& ostr )
+{
+    ostr << "</Exception>";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::log_entry_start( std::ostream& ostr, log_entry_data const& entry_data, log_entry_types let )
+{
+    static literal_string xml_tags[] = { "Info", "Message", "Warning", "Error", "FatalError" };
+
+    m_curr_tag = xml_tags[let];
+    ostr << '<' << m_curr_tag
+         << BOOST_TEST_L( " file" ) << utils::attr_value() << entry_data.m_file_name
+         << BOOST_TEST_L( " line" ) << utils::attr_value() << entry_data.m_line_num
+         << BOOST_TEST_L( "><![CDATA[" );
+
+    m_value_closed = false;
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::log_entry_value( std::ostream& ostr, const_string value )
+{
+    utils::print_escaped_cdata( ostr, value );
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::log_entry_finish( std::ostream& ostr )
+{
+    if( !m_value_closed ) {
+        ostr << BOOST_TEST_L( "]]>" );
+        m_value_closed = true;
+    }
+
+    ostr << BOOST_TEST_L( "</" ) << m_curr_tag << BOOST_TEST_L( ">" );
+
+    m_curr_tag.clear();
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::entry_context_start( std::ostream& ostr, log_level )
+{
+    if( !m_value_closed ) {
+        ostr << BOOST_TEST_L( "]]>" );
+        m_value_closed = true;
+    }
+
+    ostr << BOOST_TEST_L( "<Context>" );
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::entry_context_finish( std::ostream& ostr )
+{
+    ostr << BOOST_TEST_L( "</Context>" );
+}
+
+//____________________________________________________________________________//
+
+void
+xml_log_formatter::log_entry_context( std::ostream& ostr, const_string context_descr )
+{
+    ostr << BOOST_TEST_L( "<Frame>" ) << utils::cdata() << context_descr << BOOST_TEST_L( "</Frame>" );
+}
+
+//____________________________________________________________________________//
+
+} // namespace output
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_XML_LOG_FORMATTER_IPP_020105GER
diff --git a/vendor/pdalboost/boost/test/impl/xml_report_formatter.ipp b/vendor/pdalboost/boost/test/impl/xml_report_formatter.ipp
new file mode 100644
index 0000000..1d679fd
--- /dev/null
+++ b/vendor/pdalboost/boost/test/impl/xml_report_formatter.ipp
@@ -0,0 +1,111 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : OF_XML report formatter
+// ***************************************************************************
+
+#ifndef BOOST_TEST_XML_REPORT_FORMATTER_IPP_020105GER
+#define BOOST_TEST_XML_REPORT_FORMATTER_IPP_020105GER
+
+// Boost.Test
+#include <boost/test/results_collector.hpp>
+#include <boost/test/output/xml_report_formatter.hpp>
+
+#include <boost/test/tree/test_unit.hpp>
+#include <boost/test/utils/xml_printer.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace output {
+
+void
+xml_report_formatter::results_report_start( std::ostream& ostr )
+{
+    ostr << "<TestResult>";
+}
+
+//____________________________________________________________________________//
+
+void
+xml_report_formatter::results_report_finish( std::ostream& ostr )
+{
+    ostr << "</TestResult>";
+}
+
+
+//____________________________________________________________________________//
+
+void
+xml_report_formatter::test_unit_report_start( test_unit const& tu, std::ostream& ostr )
+{
+    test_results const& tr = results_collector.results( tu.p_id );
+
+    const_string descr;
+
+    if( tr.passed() )
+        descr = "passed";
+    else if( tr.p_skipped )
+        descr = "skipped";
+    else if( tr.p_aborted )
+        descr = "aborted";
+    else
+        descr = "failed";
+
+    ostr << '<' << ( tu.p_type == TUT_CASE ? "TestCase" : "TestSuite" )
+         << " name"                     << utils::attr_value() << tu.p_name
+         << " result"                   << utils::attr_value() << descr
+         << " assertions_passed"        << utils::attr_value() << tr.p_assertions_passed
+         << " assertions_failed"        << utils::attr_value() << tr.p_assertions_failed
+         << " warnings_failed"          << utils::attr_value() << tr.p_warnings_failed
+         << " expected_failures"        << utils::attr_value() << tr.p_expected_failures;
+
+    if( tu.p_type == TUT_SUITE ) {
+        ostr << " test_cases_passed"    << utils::attr_value() << tr.p_test_cases_passed
+             << " test_cases_passed_with_warnings" << utils::attr_value() << tr.p_test_cases_warned
+             << " test_cases_failed"    << utils::attr_value() << tr.p_test_cases_failed
+             << " test_cases_skipped"   << utils::attr_value() << tr.p_test_cases_skipped
+             << " test_cases_aborted"   << utils::attr_value() << tr.p_test_cases_aborted;
+    }
+
+    ostr << '>';
+}
+
+//____________________________________________________________________________//
+
+void
+xml_report_formatter::test_unit_report_finish( test_unit const& tu, std::ostream& ostr )
+{
+    ostr << "</" << ( tu.p_type == TUT_CASE ? "TestCase" : "TestSuite" ) << '>';
+}
+
+//____________________________________________________________________________//
+
+void
+xml_report_formatter::do_confirmation_report( test_unit const& tu, std::ostream& ostr )
+{
+    test_unit_report_start( tu, ostr );
+    test_unit_report_finish( tu, ostr );
+}
+
+//____________________________________________________________________________//
+
+} // namespace output
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_XML_REPORT_FORMATTER_IPP_020105GER
diff --git a/vendor/pdalboost/boost/test/included/prg_exec_monitor.hpp b/vendor/pdalboost/boost/test/included/prg_exec_monitor.hpp
new file mode 100644
index 0000000..ff48ce5
--- /dev/null
+++ b/vendor/pdalboost/boost/test/included/prg_exec_monitor.hpp
@@ -0,0 +1,25 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : included (vs. linked ) version of Program Execution Monitor
+// ***************************************************************************
+
+#ifndef BOOST_INCLUDED_PRG_EXEC_MONITOR_HPP_071894GER
+#define BOOST_INCLUDED_PRG_EXEC_MONITOR_HPP_071894GER
+
+#include <boost/test/impl/execution_monitor.ipp>
+#include <boost/test/impl/debug.ipp>
+#include <boost/test/impl/cpp_main.ipp>
+
+#define BOOST_TEST_INCLUDED
+#include <boost/test/prg_exec_monitor.hpp>
+
+#endif // BOOST_INCLUDED_PRG_EXEC_MONITOR_HPP_071894GER
diff --git a/vendor/pdalboost/boost/test/minimal.hpp b/vendor/pdalboost/boost/test/minimal.hpp
new file mode 100644
index 0000000..51d712a
--- /dev/null
+++ b/vendor/pdalboost/boost/test/minimal.hpp
@@ -0,0 +1,156 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// @brief Deprecated implementation of simple minimal testing
+/// @deprecated
+/// To convert to Unit Test Framework simply rewrite:
+/// @code
+/// #include <boost/test/minimal.hpp>
+///
+/// int test_main( int, char *[] )
+/// {
+///   ...
+/// }
+/// @endcode
+/// as
+/// @code
+/// #include <boost/test/included/unit_test.hpp>
+///
+/// BOOST_AUTO_TEST_CASE(test_main)
+/// {
+///   ...
+/// }
+/// @endcode
+// ***************************************************************************
+
+#ifndef BOOST_TEST_MINIMAL_HPP_071894GER
+#define BOOST_TEST_MINIMAL_HPP_071894GER
+
+#define BOOST_CHECK(exp)       \
+  ( (exp)                      \
+      ? static_cast<void>(0)   \
+      : pdalboost::minimal_test::report_error(#exp,__FILE__,__LINE__, BOOST_CURRENT_FUNCTION) )
+
+#define BOOST_REQUIRE(exp)     \
+  ( (exp)                      \
+      ? static_cast<void>(0)   \
+      : pdalboost::minimal_test::report_critical_error(#exp,__FILE__,__LINE__,BOOST_CURRENT_FUNCTION))
+
+#define BOOST_ERROR( msg_ )    \
+        pdalboost::minimal_test::report_error( (msg_),__FILE__,__LINE__, BOOST_CURRENT_FUNCTION, true )
+#define BOOST_FAIL( msg_ )     \
+        pdalboost::minimal_test::report_critical_error( (msg_),__FILE__,__LINE__, BOOST_CURRENT_FUNCTION, true )
+
+//____________________________________________________________________________//
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/impl/execution_monitor.ipp>
+#include <boost/test/impl/debug.ipp>
+#include <boost/test/utils/class_properties.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+// Boost
+#include <boost/cstdlib.hpp>            // for exit codes
+#include <boost/current_function.hpp>   // for BOOST_CURRENT_FUNCTION
+
+// STL
+#include <iostream>                     // std::cerr, std::endl
+#include <string>                       // std::string
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+int test_main( int argc, char* argv[] );  // prototype for users test_main()
+
+namespace pdalboost {
+namespace minimal_test {
+
+typedef pdalboost::unit_test::const_string const_string;
+
+inline unit_test::counter_t& errors_counter() { static unit_test::counter_t ec = 0; return ec; }
+
+inline void
+report_error( const char* msg, const char* file, int line, const_string func_name, bool is_msg = false )
+{
+    ++errors_counter();
+    std::cerr << file << "(" << line << "): ";
+
+    if( is_msg )
+        std::cerr << msg;
+    else
+        std::cerr << "test " << msg << " failed";
+
+    if( func_name != "(unknown)" )
+        std::cerr << " in function: '" << func_name << "'";
+
+    std::cerr << std::endl;
+}
+
+inline void
+report_critical_error( const char* msg, const char* file, int line, const_string func_name, bool is_msg = false )
+{
+    report_error( msg, file, line, func_name, is_msg );
+
+    throw pdalboost::execution_aborted();
+}
+
+class caller {
+public:
+    // constructor
+    caller( int argc, char** argv )
+    : m_argc( argc ), m_argv( argv ) {}
+
+    // execution monitor hook implementation
+    int operator()() { return test_main( m_argc, m_argv ); }
+
+private:
+    // Data members
+    int         m_argc;
+    char**      m_argv;
+}; // monitor
+
+} // namespace minimal_test
+} // namespace pdalboost
+
+//____________________________________________________________________________//
+
+int BOOST_TEST_CALL_DECL main( int argc, char* argv[] )
+{
+    using namespace pdalboost::minimal_test;
+
+    try {
+        ::pdalboost::execution_monitor ex_mon;
+        int run_result = ex_mon.execute( caller( argc, argv ) );
+
+        BOOST_CHECK( run_result == 0 || run_result == pdalboost::exit_success );
+    }
+    catch( pdalboost::execution_exception const& exex ) {
+        if( exex.code() != pdalboost::execution_exception::no_error )
+            BOOST_ERROR( (std::string( "exception \"" ) + exex.what() + "\" caught").c_str() );
+        std::cerr << "\n**** Testing aborted.";
+    }
+
+    if( pdalboost::minimal_test::errors_counter() != 0 ) {
+        std::cerr << "\n**** " << errors_counter()
+                  << " error" << (errors_counter() > 1 ? "s" : "" ) << " detected\n";
+
+        return pdalboost::exit_test_failure;
+    }
+
+    std::cout << "\n**** no errors detected\n";
+
+    return pdalboost::exit_success;
+}
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_MINIMAL_HPP_071894GER
diff --git a/vendor/pdalboost/boost/test/output/compiler_log_formatter.hpp b/vendor/pdalboost/boost/test/output/compiler_log_formatter.hpp
new file mode 100644
index 0000000..64c13bd
--- /dev/null
+++ b/vendor/pdalboost/boost/test/output/compiler_log_formatter.hpp
@@ -0,0 +1,72 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : contains compiler like Log formatter definition
+// ***************************************************************************
+
+#ifndef BOOST_TEST_COMPILER_LOG_FORMATTER_HPP_020105GER
+#define BOOST_TEST_COMPILER_LOG_FORMATTER_HPP_020105GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/unit_test_log_formatter.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace output {
+
+// ************************************************************************** //
+// **************             compiler_log_formatter           ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL compiler_log_formatter : public unit_test_log_formatter {
+public:
+    compiler_log_formatter() : m_color_output( false ) {}
+
+    // Formatter interface
+    void    log_start( std::ostream&, counter_t test_cases_amount );
+    void    log_finish( std::ostream& );
+    void    log_build_info( std::ostream& );
+
+    void    test_unit_start( std::ostream&, test_unit const& tu );
+    void    test_unit_finish( std::ostream&, test_unit const& tu, unsigned long elapsed );
+    void    test_unit_skipped( std::ostream&, test_unit const& tu, const_string reason );
+
+    void    log_exception_start( std::ostream&, log_checkpoint_data const&, execution_exception const& ex );
+    void    log_exception_finish( std::ostream& );
+
+    void    log_entry_start( std::ostream&, log_entry_data const&, log_entry_types let );
+    void    log_entry_value( std::ostream&, const_string value );
+    void    log_entry_value( std::ostream&, lazy_ostream const& value );
+    void    log_entry_finish( std::ostream& );
+
+    void    entry_context_start( std::ostream&, log_level );
+    void    log_entry_context( std::ostream&, const_string );
+    void    entry_context_finish( std::ostream& );
+
+protected:
+    virtual void    print_prefix( std::ostream&, const_string file, std::size_t line );
+
+    // Data members
+    bool    m_color_output;
+};
+
+} // namespace output
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_COMPILER_LOG_FORMATTER_HPP_020105GER
diff --git a/vendor/pdalboost/boost/test/output/plain_report_formatter.hpp b/vendor/pdalboost/boost/test/output/plain_report_formatter.hpp
new file mode 100644
index 0000000..1265ec6
--- /dev/null
+++ b/vendor/pdalboost/boost/test/output/plain_report_formatter.hpp
@@ -0,0 +1,59 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : plain report formatter implementation
+// ***************************************************************************
+
+#ifndef BOOST_TEST_PLAIN_REPORT_FORMATTER_HPP_020105GER
+#define BOOST_TEST_PLAIN_REPORT_FORMATTER_HPP_020105GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/results_reporter.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace output {
+
+// ************************************************************************** //
+// **************             plain_report_formatter           ************** //
+// ************************************************************************** //
+
+class plain_report_formatter : public results_reporter::format {
+public:
+    plain_report_formatter() : m_indent( 0 ), m_color_output( false ) {}
+
+    // Formatter interface
+    void    results_report_start( std::ostream& ostr );
+    void    results_report_finish( std::ostream& ostr );
+
+    void    test_unit_report_start( test_unit const&, std::ostream& ostr );
+    void    test_unit_report_finish( test_unit const&, std::ostream& ostr );
+
+    void    do_confirmation_report( test_unit const&, std::ostream& ostr );
+
+private:
+    // Data members
+    counter_t m_indent;
+    bool    m_color_output;
+};
+
+} // namespace output
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_PLAIN_REPORT_FORMATTER_HPP_020105GER
diff --git a/vendor/pdalboost/boost/test/output/xml_log_formatter.hpp b/vendor/pdalboost/boost/test/output/xml_log_formatter.hpp
new file mode 100644
index 0000000..ab78feb
--- /dev/null
+++ b/vendor/pdalboost/boost/test/output/xml_log_formatter.hpp
@@ -0,0 +1,72 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : contains OF_XML Log formatter definition
+// ***************************************************************************
+
+#ifndef BOOST_TEST_XML_LOG_FORMATTER_020105GER
+#define BOOST_TEST_XML_LOG_FORMATTER_020105GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/unit_test_log_formatter.hpp>
+
+// STL
+#include <cstddef> // std::size_t
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace output {
+
+// ************************************************************************** //
+// **************               xml_log_formatter              ************** //
+// ************************************************************************** //
+
+class xml_log_formatter : public unit_test_log_formatter {
+public:
+    // Formatter interface
+    void    log_start( std::ostream&, counter_t test_cases_amount );
+    void    log_finish( std::ostream& );
+    void    log_build_info( std::ostream& );
+
+    void    test_unit_start( std::ostream&, test_unit const& tu );
+    void    test_unit_finish( std::ostream&, test_unit const& tu, unsigned long elapsed );
+    void    test_unit_skipped( std::ostream&, test_unit const& tu, const_string reason );
+
+    void    log_exception_start( std::ostream&, log_checkpoint_data const&, execution_exception const& ex );
+    void    log_exception_finish( std::ostream& );
+
+    void    log_entry_start( std::ostream&, log_entry_data const&, log_entry_types let );
+    using   unit_test_log_formatter::log_entry_value; // bring base class functions into overload set
+    void    log_entry_value( std::ostream&, const_string value );
+    void    log_entry_finish( std::ostream& );
+
+    void    entry_context_start( std::ostream&, log_level );
+    void    log_entry_context( std::ostream&, const_string );
+    void    entry_context_finish( std::ostream& );
+
+private:
+    // Data members
+    const_string    m_curr_tag;
+    bool            m_value_closed;
+};
+
+} // namespace output
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_XML_LOG_FORMATTER_020105GER
diff --git a/vendor/pdalboost/boost/test/output/xml_report_formatter.hpp b/vendor/pdalboost/boost/test/output/xml_report_formatter.hpp
new file mode 100644
index 0000000..7d20859
--- /dev/null
+++ b/vendor/pdalboost/boost/test/output/xml_report_formatter.hpp
@@ -0,0 +1,52 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : OF_XML report formatter implementation
+// ***************************************************************************
+
+#ifndef BOOST_TEST_XML_REPORT_FORMATTER_HPP_020105GER
+#define BOOST_TEST_XML_REPORT_FORMATTER_HPP_020105GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/results_reporter.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace output {
+
+// ************************************************************************** //
+// **************              xml_report_formatter            ************** //
+// ************************************************************************** //
+
+class xml_report_formatter : public results_reporter::format {
+public:
+    // Formatter interface
+    void    results_report_start( std::ostream& ostr );
+    void    results_report_finish( std::ostream& ostr );
+
+    void    test_unit_report_start( test_unit const&, std::ostream& ostr );
+    void    test_unit_report_finish( test_unit const&, std::ostream& ostr );
+
+    void    do_confirmation_report( test_unit const&, std::ostream& ostr );
+};
+
+} // namespace output
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_XML_REPORT_FORMATTER_HPP_020105GER
diff --git a/vendor/pdalboost/boost/test/parameterized_test.hpp b/vendor/pdalboost/boost/test/parameterized_test.hpp
new file mode 100644
index 0000000..723c1ca
--- /dev/null
+++ b/vendor/pdalboost/boost/test/parameterized_test.hpp
@@ -0,0 +1,172 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief generators and helper macros for parameterized tests
+// ***************************************************************************
+
+#ifndef BOOST_TEST_PARAMETERIZED_TEST_HPP_021102GER
+#define BOOST_TEST_PARAMETERIZED_TEST_HPP_021102GER
+
+// Boost.Test
+#include <boost/test/unit_test_suite.hpp>
+
+// Boost
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+#include <boost/bind.hpp>
+#include <boost/function/function1.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+#define BOOST_PARAM_TEST_CASE( function, begin, end )                      \
+pdalboost::unit_test::make_test_case( function,                                \
+                                  BOOST_TEST_STRINGIZE( function ),        \
+                                  __FILE__, __LINE__,                      \
+                                  (begin), (end) )                         \
+/**/
+
+#define BOOST_PARAM_CLASS_TEST_CASE( function, tc_instance, begin, end )   \
+pdalboost::unit_test::make_test_case( function,                                \
+                                  BOOST_TEST_STRINGIZE( function ),        \
+                                  __FILE__, __LINE__,                      \
+                                  (tc_instance),                           \
+                                  (begin), (end) )                         \
+/**/
+
+namespace pdalboost {
+namespace unit_test {
+
+namespace ut_detail {
+
+// ************************************************************************** //
+// **************           param_test_case_generator          ************** //
+// ************************************************************************** //
+
+template<typename ParamType, typename ParamIter>
+class param_test_case_generator : public test_unit_generator {
+public:
+    param_test_case_generator( pdalboost::function<void (ParamType)> const& test_func,
+                               const_string                             tc_name,
+                               const_string                             tc_file,
+                               std::size_t                              tc_line,
+                               ParamIter                                par_begin,
+                               ParamIter                                par_end )
+    : m_test_func( test_func )
+    , m_tc_name( ut_detail::normalize_test_case_name( tc_name ) )
+    , m_tc_file( tc_file )
+    , m_tc_line( tc_line )
+    , m_par_begin( par_begin )
+    , m_par_end( par_end )
+    {}
+
+    virtual test_unit* next() const
+    {
+        if( m_par_begin == m_par_end )
+            return (test_unit*)0;
+
+        test_unit* res = new test_case( m_tc_name, m_tc_file, m_tc_line, pdalboost::bind( m_test_func, *m_par_begin ) );
+
+        ++m_par_begin;
+
+        return res;
+    }
+
+private:
+    // Data members
+    pdalboost::function<void (ParamType)>    m_test_func;
+    std::string             m_tc_name;
+    const_string            m_tc_file;
+    std::size_t             m_tc_line;
+    mutable ParamIter       m_par_begin;
+    ParamIter               m_par_end;
+};
+
+//____________________________________________________________________________//
+
+template<typename UserTestCase,typename ParamType>
+struct user_param_tc_method_invoker {
+    typedef void (UserTestCase::*test_method)( ParamType );
+
+    // Constructor
+    user_param_tc_method_invoker( shared_ptr<UserTestCase> inst, test_method test_method )
+    : m_inst( inst ), m_test_method( test_method ) {}
+
+    void operator()( ParamType p ) { ((*m_inst).*m_test_method)( p ); }
+
+    // Data members
+    shared_ptr<UserTestCase> m_inst;
+    test_method              m_test_method;
+};
+
+//____________________________________________________________________________//
+
+} // namespace ut_detail
+
+template<typename ParamType, typename ParamIter>
+inline ut_detail::param_test_case_generator<ParamType,ParamIter>
+make_test_case( pdalboost::function<void (ParamType)> const& test_func,
+                const_string                             tc_name,
+                const_string                             tc_file,
+                std::size_t                              tc_line,
+                ParamIter                                par_begin,
+                ParamIter                                par_end )
+{
+    return ut_detail::param_test_case_generator<ParamType,ParamIter>( test_func, tc_name, tc_file, tc_line, par_begin, par_end );
+}
+
+//____________________________________________________________________________//
+
+template<typename ParamType, typename ParamIter>
+inline ut_detail::param_test_case_generator<
+    BOOST_DEDUCED_TYPENAME remove_const<BOOST_DEDUCED_TYPENAME remove_reference<ParamType>::type>::type,ParamIter>
+make_test_case( void (*test_func)( ParamType ),
+                const_string  tc_name,
+                const_string  tc_file,
+                std::size_t   tc_line,
+                ParamIter     par_begin,
+                ParamIter     par_end )
+{
+    typedef BOOST_DEDUCED_TYPENAME remove_const<BOOST_DEDUCED_TYPENAME remove_reference<ParamType>::type>::type param_value_type;
+    return ut_detail::param_test_case_generator<param_value_type,ParamIter>( test_func, tc_name, tc_file, tc_line, par_begin, par_end );
+}
+
+//____________________________________________________________________________//
+
+template<typename UserTestCase,typename ParamType, typename ParamIter>
+inline ut_detail::param_test_case_generator<
+    BOOST_DEDUCED_TYPENAME remove_const<BOOST_DEDUCED_TYPENAME remove_reference<ParamType>::type>::type,ParamIter>
+make_test_case( void (UserTestCase::*test_method )( ParamType ),
+                const_string                           tc_name,
+                const_string                           tc_file,
+                std::size_t                            tc_line,
+                pdalboost::shared_ptr<UserTestCase> const& user_test_case,
+                ParamIter                              par_begin,
+                ParamIter                              par_end )
+{
+    typedef BOOST_DEDUCED_TYPENAME remove_const<BOOST_DEDUCED_TYPENAME remove_reference<ParamType>::type>::type param_value_type;
+    return ut_detail::param_test_case_generator<param_value_type,ParamIter>(
+               ut_detail::user_param_tc_method_invoker<UserTestCase,ParamType>( user_test_case, test_method ),
+               tc_name,
+               tc_file,
+               tc_line,
+               par_begin,
+               par_end );
+}
+
+//____________________________________________________________________________//
+
+} // unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_PARAMETERIZED_TEST_HPP_021102GER
+
diff --git a/vendor/pdalboost/boost/test/prg_exec_monitor.hpp b/vendor/pdalboost/boost/test/prg_exec_monitor.hpp
new file mode 100644
index 0000000..1dc679e
--- /dev/null
+++ b/vendor/pdalboost/boost/test/prg_exec_monitor.hpp
@@ -0,0 +1,81 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// @brief Entry point for the end user into the Program Execution Monitor.
+///
+/// Use this header to forward declare function prg_exec_monitor_main and to automatically define a main
+/// function for you. If you prefer to use your own main you are free to do so, but you need to define
+/// BOOST_TEST_NO_MAIN before incuding this header. To initiate your main program body execution you
+/// would use statement like this:
+/// @code ::pdalboost::prg_exec_monitor_main( &my_main, argc, argv ); @endcode
+/// Also this header facilitate auto linking with the Program Execution Monitor library if this feature
+/// is supported
+// ***************************************************************************
+
+#ifndef BOOST_PRG_EXEC_MONITOR_HPP_071894GER
+#define BOOST_PRG_EXEC_MONITOR_HPP_071894GER
+
+#include <boost/test/detail/config.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                 Auto Linking                 ************** //
+// ************************************************************************** //
+
+// Automatically link to the correct build variant where possible.
+#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_TEST_NO_LIB) && \
+    !defined(BOOST_TEST_SOURCE) && !defined(BOOST_TEST_INCLUDED)
+#  define BOOST_LIB_NAME pdalboost_prg_exec_monitor
+
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+#  if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_TEST_DYN_LINK)
+#    define BOOST_DYN_LINK
+#  endif
+
+#  include <boost/config/auto_link.hpp>
+
+#endif  // auto-linking disabled
+
+// ************************************************************************** //
+// **************               prg_exec_monitor_main          ************** //
+// ************************************************************************** //
+
+namespace pdalboost {
+
+/// @brief Wrapper around the main function
+///
+/// Call this routine instead of your own main body implementation directly. This routine impements all the monitoring
+/// functionality. THe monitor behavior is configurable by using the environment variable BOOST_TEST_CATCH_SYSTEM_ERRORS.
+/// If set to string value "no", the monitor will not attempt to catch system errors (signals)
+/// @param[in] cpp_main main function body. Should have the same signature as regular main function
+/// @param[in] argc, argv command line arguments
+int BOOST_TEST_DECL prg_exec_monitor_main( int (*cpp_main)( int argc, char* argv[] ), int argc, char* argv[] );
+
+} // boost
+
+#if defined(BOOST_TEST_DYN_LINK) && !defined(BOOST_TEST_NO_MAIN)
+
+// ************************************************************************** //
+// **************        main function for tests using dll     ************** //
+// ************************************************************************** //
+
+// prototype for user's cpp_main()
+int cpp_main( int argc, char* argv[] );
+
+int BOOST_TEST_CALL_DECL
+main( int argc, char* argv[] )
+{
+    return ::pdalboost::prg_exec_monitor_main( &cpp_main, argc, argv );
+}
+
+//____________________________________________________________________________//
+
+#endif // BOOST_TEST_DYN_LINK && !BOOST_TEST_NO_MAIN
+
+#endif // BOOST_PRG_EXEC_MONITOR_HPP_071894GER
diff --git a/vendor/pdalboost/boost/test/progress_monitor.hpp b/vendor/pdalboost/boost/test/progress_monitor.hpp
new file mode 100644
index 0000000..7dcc8bd
--- /dev/null
+++ b/vendor/pdalboost/boost/test/progress_monitor.hpp
@@ -0,0 +1,66 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// @brief defines simple text based progress monitor
+// ***************************************************************************
+
+#ifndef BOOST_TEST_PROGRESS_MONITOR_HPP_020105GER
+#define BOOST_TEST_PROGRESS_MONITOR_HPP_020105GER
+
+// Boost.Test
+#include <boost/test/tree/observer.hpp>
+#include <boost/test/utils/trivial_singleton.hpp>
+
+// STL
+#include <iosfwd>   // for std::ostream&
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************                progress_monitor              ************** //
+// ************************************************************************** //
+
+/// This class implements test observer interface and updates test progress as test units finish or get aborted
+class BOOST_TEST_DECL progress_monitor_t : public test_observer, public singleton<progress_monitor_t> {
+public:
+    /// @name Test observer interface
+    /// @{
+    virtual void    test_start( counter_t test_cases_amount );
+    virtual void    test_aborted();
+
+    virtual void    test_unit_finish( test_unit const&, unsigned long );
+    virtual void    test_unit_skipped( test_unit const&, const_string );
+
+    virtual int     priority() { return 3; }
+    /// @}
+
+    /// @name Configuration
+    /// @{
+    void            set_stream( std::ostream& );
+    /// @}
+
+private:
+    BOOST_TEST_SINGLETON_CONS( progress_monitor_t )
+}; // progress_monitor_t
+
+BOOST_TEST_SINGLETON_INST( progress_monitor )
+
+} // namespace unit_test
+} // namespace pdalboost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_PROGRESS_MONITOR_HPP_020105GER
+
diff --git a/vendor/pdalboost/boost/test/results_collector.hpp b/vendor/pdalboost/boost/test/results_collector.hpp
new file mode 100644
index 0000000..a8f4eda
--- /dev/null
+++ b/vendor/pdalboost/boost/test/results_collector.hpp
@@ -0,0 +1,128 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file results_collector.hpp @brief defines testing result collector components
+///
+/// Defines class results_collector_t that is responsible for
+/// gathering test results and class test_results for presenting this information to end-user
+// ***************************************************************************
+
+#ifndef BOOST_TEST_RESULTS_COLLECTOR_HPP_071894GER
+#define BOOST_TEST_RESULTS_COLLECTOR_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/tree/observer.hpp>
+
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+
+#include <boost/test/utils/trivial_singleton.hpp>
+#include <boost/test/utils/class_properties.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+namespace {
+
+// ************************************************************************** //
+/// First failed assertion debugger hook
+///
+/// This function is a placeholder where user can set a breakpoint in debugger to catch the
+/// very first assertion failure in each test case
+// ************************************************************************** //
+inline void first_failed_assertion() {}
+}
+
+// ************************************************************************** //
+/// @brief Collection of attributes constituting test unit results
+///
+/// This class is a collection of attributes describing testing results. The atributes presented as public properties on
+/// an instance of the class. In addition summary conclusion methods are presented to generate simple answer to pass/fail question
+// ************************************************************************** //
+
+class BOOST_TEST_DECL test_results {
+public:
+    test_results();
+
+    /// Type representing counter like public property
+    typedef BOOST_READONLY_PROPERTY( counter_t, (results_collector_t)(test_results)(results_collect_helper) ) counter_prop;
+    /// Type representing boolean like public property
+    typedef BOOST_READONLY_PROPERTY( bool,      (results_collector_t)(test_results)(results_collect_helper) ) bool_prop;
+
+    /// @name Public properties
+    counter_prop    p_assertions_passed;
+    counter_prop    p_assertions_failed;
+    counter_prop    p_warnings_failed;
+    counter_prop    p_expected_failures;
+    counter_prop    p_test_cases_passed;
+    counter_prop    p_test_cases_warned;
+    counter_prop    p_test_cases_failed;
+    counter_prop    p_test_cases_skipped;
+    counter_prop    p_test_cases_aborted;
+    bool_prop       p_aborted;
+    bool_prop       p_skipped;
+    /// @}
+
+    /// @name Summary conclusion
+
+    /// Returns true if test unit passed
+    bool            passed() const;
+    /// Produces result code for the test unit execution
+
+    /// This methhod return one of the result codes defined in boost/cstdlib.hpp
+    /// @returns pdalboost::exit_success on success, pdalboost::exit_exception_failure in case test unit was aborted for any reason
+    ///          (incuding uncausght exception) and pdalboost::exit_test_failure otherwise
+    int             result_code() const;
+    /// @}
+
+    // collection helper
+    void            operator+=( test_results const& );
+
+    void            clear();
+};
+
+// ************************************************************************** //
+/// This class implements test observer interface to collect the result of test unit execution
+// ************************************************************************** //
+
+class BOOST_TEST_DECL results_collector_t : public test_observer, public singleton<results_collector_t> {
+public:
+
+    virtual void        test_start( counter_t test_cases_amount );
+
+    virtual void        test_unit_start( test_unit const& );
+    virtual void        test_unit_finish( test_unit const&, unsigned long );
+    virtual void        test_unit_skipped( test_unit const&, const_string );
+    virtual void        test_unit_aborted( test_unit const& );
+
+    virtual void        assertion_result( unit_test::assertion_result );
+    virtual void        exception_caught( execution_exception const& );
+
+    virtual int         priority() { return 2; }
+
+    /// Results access per test unit
+
+    /// @param[in] tu_id id of a test unit
+    test_results const& results( test_unit_id tu_id ) const;
+
+private:
+    BOOST_TEST_SINGLETON_CONS( results_collector_t )
+};
+
+BOOST_TEST_SINGLETON_INST( results_collector )
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_RESULTS_COLLECTOR_HPP_071894GER
+
diff --git a/vendor/pdalboost/boost/test/results_reporter.hpp b/vendor/pdalboost/boost/test/results_reporter.hpp
new file mode 100644
index 0000000..10c8733
--- /dev/null
+++ b/vendor/pdalboost/boost/test/results_reporter.hpp
@@ -0,0 +1,122 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// @brief defines testing result reporter interfaces
+///
+/// This file defines interfaces that are responsible for results reporting. Interface is presented in a form of
+/// free standing function implemented in namespace result_reporter
+// ***************************************************************************
+
+#ifndef BOOST_TEST_RESULTS_REPORTER_HPP_021205GER
+#define BOOST_TEST_RESULTS_REPORTER_HPP_021205GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+
+// STL
+#include <iosfwd>   // for std::ostream&
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+/// Namespace for results reporter interfaces
+namespace results_reporter {
+
+// ************************************************************************** //
+/// @brief Results report formatter interface
+///
+/// This is abstract interface for the report formatter used by results reporter routines.
+/// You can define a custom formatter by implementing this interface and setting the formatter using set_format function.
+/// This is usually done during test module initialization
+// ************************************************************************** //
+
+class BOOST_TEST_DECL format {
+public:
+    // Destructor
+    virtual ~format() {}
+
+    virtual void    results_report_start( std::ostream& ostr ) = 0;
+    virtual void    results_report_finish( std::ostream& ostr ) = 0;
+
+    virtual void    test_unit_report_start( test_unit const&, std::ostream& ostr ) = 0;
+    virtual void    test_unit_report_finish( test_unit const&, std::ostream& ostr ) = 0;
+
+    virtual void    do_confirmation_report( test_unit const&, std::ostream& ostr ) = 0;
+};
+
+// ************************************************************************** //
+/// @name report configuration
+// ************************************************************************** //
+
+/// Sets reporting level
+
+/// There are only four possible levels for results report:
+/// - confirmation report (pdalboost::unit_test::CONFIRMATION_REPORT). This report level only produces short confirmation
+///   message about test module pass/fail status
+/// - short report (pdalboost::unit_test::SHORT_REPORT). This report level produces short summary report for failed/passed
+///   assertions and test units.
+/// - detailed report (pdalboost::unit_test::DETAILED_REPORT). This report level produces detailed report per test unit for
+///   passed/failed assertions and uncaught exceptions
+/// - no report (pdalboost::unit_test::NO_REPORT). This report level produces no results report. This is used for test modules
+///   running as part of some kind of continues integration framework
+/// @param[in] l report level
+BOOST_TEST_DECL void    set_level( report_level l );
+
+/// Sets output stream for results reporting
+
+/// By default std::cerr is used. Use this function to set a different stream. The framework
+/// refers to the stream by reference, so you need to make sure the stream object lifetime exceeds the testing main scope.
+BOOST_TEST_DECL void    set_stream( std::ostream& );
+
+/// Sets one of the predefined formats
+
+/// The framework implements two results report formats:
+/// - plain human readable format (pdalboost::unit_test::OF_CLF)
+/// - XML format (pdalboost::unit_test::OF_XML)
+/// @param[in] of one of the presefined enumeration values for output formats
+BOOST_TEST_DECL void    set_format( output_format of );
+
+/// Sets custom report formatter
+
+/// The framework takes ownership of the pointer passed as an argument. So this should be a pointer to
+/// a heap allocated object
+/// @param[in] f pointer to heap allocated instance of custom report formatter class
+BOOST_TEST_DECL void    set_format( results_reporter::format* f );
+
+/// @brief Access to configured results reporter stream
+///
+/// Use this stream to report additional information abut test module execution
+BOOST_TEST_DECL std::ostream& get_stream();
+
+/// @}
+
+// ************************************************************************** //
+// **************               report initiation              ************** //
+// ************************************************************************** //
+
+BOOST_TEST_DECL void    make_report( report_level l = INV_REPORT_LEVEL, test_unit_id = INV_TEST_UNIT_ID );
+inline void             confirmation_report( test_unit_id id = INV_TEST_UNIT_ID )
+{ make_report( CONFIRMATION_REPORT, id ); }
+inline void             short_report( test_unit_id id = INV_TEST_UNIT_ID )
+{ make_report( SHORT_REPORT, id ); }
+inline void             detailed_report( test_unit_id id = INV_TEST_UNIT_ID )
+{ make_report( DETAILED_REPORT, id ); }
+
+} // namespace results_reporter
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_RESULTS_REPORTER_HPP_021205GER
+
diff --git a/vendor/pdalboost/boost/test/test_tools.hpp b/vendor/pdalboost/boost/test/test_tools.hpp
new file mode 100644
index 0000000..a542d5f
--- /dev/null
+++ b/vendor/pdalboost/boost/test/test_tools.hpp
@@ -0,0 +1,68 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// @brief test tools compatibility header
+///
+/// This file is used to select the test tools implementation and includes all the necessary headers
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_HPP_111812GER
+#define BOOST_TEST_TOOLS_HPP_111812GER
+
+#include <boost/config.hpp>
+
+// brings some compiler configuration like BOOST_PP_VARIADICS
+#include <boost/test/detail/config.hpp>
+
+#include <boost/preprocessor/config/config.hpp>
+
+#if    defined(BOOST_NO_CXX11_VARIADIC_MACROS) \
+    || defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) \
+    || defined(BOOST_NO_CXX11_DECLTYPE)
+#  define BOOST_TEST_MACRO_LIMITED_SUPPORT
+#endif
+
+// Boost.Test
+// #define BOOST_TEST_NO_OLD_TOOLS
+
+#if     defined(BOOST_TEST_MACRO_LIMITED_SUPPORT) \
+    &&  (   !BOOST_PP_VARIADICS \
+         || !(__cplusplus >= 201103L) && defined(BOOST_NO_CXX11_VARIADIC_MACROS))
+#  define BOOST_TEST_NO_NEW_TOOLS
+#endif
+
+// #define BOOST_TEST_TOOLS_UNDER_DEBUGGER
+// #define BOOST_TEST_TOOLS_DEBUGGABLE
+
+#include <boost/test/tools/context.hpp>
+
+#ifndef BOOST_TEST_NO_OLD_TOOLS
+#  include <boost/test/tools/old/interface.hpp>
+#  include <boost/test/tools/old/impl.hpp>
+
+#  include <boost/test/tools/detail/print_helper.hpp>
+#endif
+
+#ifndef BOOST_TEST_NO_NEW_TOOLS
+#  include <boost/test/tools/interface.hpp>
+#  include <boost/test/tools/assertion.hpp>
+#  include <boost/test/tools/fpc_op.hpp>
+#  include <boost/test/tools/collection_comparison_op.hpp>
+#  include <boost/test/tools/cstring_comparison_op.hpp>
+
+#  include <boost/test/tools/detail/fwd.hpp>
+#  include <boost/test/tools/detail/print_helper.hpp>
+#  include <boost/test/tools/detail/it_pair.hpp>
+
+#  include <boost/test/tools/detail/bitwise_manip.hpp>
+#  include <boost/test/tools/detail/tolerance_manip.hpp>
+#  include <boost/test/tools/detail/per_element_manip.hpp>
+#  include <boost/test/tools/detail/lexicographic_manip.hpp>
+#endif
+
+#endif // BOOST_TEST_TOOLS_HPP_111812GER
diff --git a/vendor/pdalboost/boost/test/tools/assertion.hpp b/vendor/pdalboost/boost/test/tools/assertion.hpp
new file mode 100644
index 0000000..690b416
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/assertion.hpp
@@ -0,0 +1,410 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief Defines framework for automated assertion construction
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_ASSERTION_HPP_100911GER
+#define BOOST_TEST_TOOLS_ASSERTION_HPP_100911GER
+
+// Boost.Test
+#include <boost/test/tools/assertion_result.hpp>
+#include <boost/test/tools/detail/print_helper.hpp>
+#include <boost/test/tools/detail/fwd.hpp>
+
+// Boost
+#include <boost/type.hpp>
+#include <boost/type_traits/decay.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/utility/declval.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+// STL
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+#include <utility>
+#endif
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+namespace assertion {
+
+// ************************************************************************** //
+// **************             assertion::operators             ************** //
+// ************************************************************************** //
+// precedence 4: ->*, .*
+// precedence 5: *, /, %
+// precedence 6: +, -
+// precedence 7: << , >>
+// precedence 8: <, <=, > and >=
+// precedence 9: == and !=
+// precedence 10: bitwise AND
+// precedence 11: bitwise XOR
+// precedence 12: bitwise OR
+// precedence 13: logical AND
+//  disabled
+// precedence 14: logical OR
+//  disabled
+// precedence 15: ternary conditional
+//  disabled
+// precedence 16: = and OP= operators
+// precedence 17: throw operator
+//  not supported
+// precedence 18: comma
+//  not supported
+
+namespace op {
+
+#define BOOST_TEST_FOR_EACH_COMP_OP(action) \
+    action( < , LT, >= )                    \
+    action( <=, LE, >  )                    \
+    action( > , GT, <= )                    \
+    action( >=, GE, <  )                    \
+    action( ==, EQ, != )                    \
+    action( !=, NE, == )                    \
+/**/
+
+//____________________________________________________________________________//
+
+#ifndef BOOST_NO_CXX11_DECLTYPE
+
+#define BOOST_TEST_FOR_EACH_CONST_OP(action)\
+    action(->*, MEMP, ->* )                 \
+                                            \
+    action( * , MUL, * )                    \
+    action( / , DIV, / )                    \
+    action( % , MOD, % )                    \
+                                            \
+    action( + , ADD, + )                    \
+    action( - , SUB, - )                    \
+                                            \
+    action( <<, LSH, << )                   \
+    action( >>, RSH, >> )                   \
+                                            \
+    BOOST_TEST_FOR_EACH_COMP_OP(action)     \
+                                            \
+    action( & , BAND, & )                   \
+    action( ^ , XOR, ^ )                    \
+    action( | , BOR, | )                    \
+/**/
+
+#else
+
+#define BOOST_TEST_FOR_EACH_CONST_OP(action)\
+    BOOST_TEST_FOR_EACH_COMP_OP(action)     \
+/**/
+
+#endif
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_FOR_EACH_MUT_OP(action)  \
+    action( = , SET , =  )                  \
+    action( +=, IADD, += )                  \
+    action( -=, ISUB, -= )                  \
+    action( *=, IMUL, *= )                  \
+    action( /=, IDIV, /= )                  \
+    action( %=, IMOD, %= )                  \
+    action(<<=, ILSH, <<=)                  \
+    action(>>=, IRSH, >>=)                  \
+    action( &=, IAND, &= )                  \
+    action( ^=, IXOR, ^= )                  \
+    action( |=, IOR , |= )                  \
+/**/
+
+//____________________________________________________________________________//
+
+#ifndef BOOST_NO_CXX11_DECLTYPE
+#   define DEDUCE_RESULT_TYPE( oper )                                   \
+    decltype(pdalboost::declval<Lhs>() oper pdalboost::declval<Rhs>() ) optype; \
+    typedef typename pdalboost::remove_reference<optype>::type              \
+/**/
+#else
+#   define DEDUCE_RESULT_TYPE( oper ) bool
+#endif
+
+#define DEFINE_CONST_OPER( oper, name, rev )        \
+template<typename Lhs, typename Rhs,                \
+         typename Enabler=void>                     \
+struct name {                                       \
+    typedef DEDUCE_RESULT_TYPE( oper ) result_type; \
+                                                    \
+    static result_type                              \
+    eval( Lhs const& lhs, Rhs const& rhs )          \
+    {                                               \
+        return lhs oper rhs;                        \
+    }                                               \
+                                                    \
+    template<typename PrevExprType>                 \
+    static void                                     \
+    report( std::ostream&       ostr,               \
+            PrevExprType const& lhs,                \
+            Rhs const&          rhs)                \
+    {                                               \
+        lhs.report( ostr );                         \
+        ostr << revert()                            \
+             << tt_detail::print_helper( rhs );     \
+    }                                               \
+                                                    \
+    static char const* revert()                     \
+    { return " " #rev " "; }                        \
+};                                                  \
+/**/
+
+BOOST_TEST_FOR_EACH_CONST_OP( DEFINE_CONST_OPER )
+
+#undef DEDUCE_RESULT_TYPE
+#undef DEFINE_CONST_OPER
+
+//____________________________________________________________________________//
+
+} // namespace op
+
+// ************************************************************************** //
+// **************          assertion::expression_base          ************** //
+// ************************************************************************** //
+// Defines expression operators
+
+template<typename Lhs, typename Rhs, typename OP> class binary_expr;
+
+template<typename ExprType,typename ValType>
+class expression_base {
+public:
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+    template<typename T>
+    struct RhsT : remove_const<typename remove_reference<T>::type> {};
+    
+#define ADD_OP_SUPPORT( oper, name, _ )                         \
+    template<typename T>                                        \
+    binary_expr<ExprType,T,                                     \
+        op::name<ValType,typename RhsT<T>::type> >              \
+    operator oper( T&& rhs )                                    \
+    {                                                           \
+        return binary_expr<ExprType,T,                          \
+         op::name<ValType,typename RhsT<T>::type> >             \
+            ( std::forward<ExprType>(                           \
+                *static_cast<ExprType*>(this) ),                \
+              std::forward<T>(rhs) );                           \
+    }                                                           \
+/**/
+#else
+
+#define ADD_OP_SUPPORT( oper, name, _ )                         \
+    template<typename T>                                        \
+    binary_expr<ExprType,typename pdalboost::decay<T const>::type,  \
+        op::name<ValType,typename pdalboost::decay<T const>::type> >\
+    operator oper( T const& rhs ) const                         \
+    {                                                           \
+        typedef typename pdalboost::decay<T const>::type Rhs;       \
+        return binary_expr<ExprType,Rhs,op::name<ValType,Rhs> > \
+            ( *static_cast<ExprType const*>(this),              \
+              rhs );                                            \
+    }                                                           \
+/**/
+#endif
+
+    BOOST_TEST_FOR_EACH_CONST_OP( ADD_OP_SUPPORT )
+    #undef ADD_OP_SUPPORT
+
+#ifndef BOOST_NO_CXX11_AUTO_DECLARATIONS
+    // Disabled operators
+    template<typename T>
+    ExprType&
+    operator ||( T const& /*rhs*/ )
+    {
+        BOOST_MPL_ASSERT_MSG(false, CANT_USE_LOGICAL_OPERATOR_OR_WITHIN_THIS_TESTING_TOOL, () );
+
+        return *static_cast<ExprType*>(this);
+    }
+
+    template<typename T>
+    ExprType&
+    operator &&( T const& /*rhs*/ )
+    {
+        BOOST_MPL_ASSERT_MSG(false, CANT_USE_LOGICAL_OPERATOR_AND_WITHIN_THIS_TESTING_TOOL, () );
+
+        return *static_cast<ExprType*>(this);
+    }
+
+    operator bool()
+    {
+        BOOST_MPL_ASSERT_MSG(false, CANT_USE_TERNARY_OPERATOR_WITHIN_THIS_TESTING_TOOL, () );
+
+        return false;
+    }
+#endif
+};
+
+// ************************************************************************** //
+// **************            assertion::value_expr             ************** //
+// ************************************************************************** //
+// simple value expression
+
+template<typename T>
+class value_expr : public expression_base<value_expr<T>,typename remove_const<typename remove_reference<T>::type>::type> {
+public:
+    // Public types
+    typedef T                   result_type;
+
+    // Constructor
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+    value_expr( value_expr&& ve )
+    : m_value( std::forward<T>(ve.m_value) )
+    {}
+    explicit                    value_expr( T&& val )
+    : m_value( std::forward<T>(val) )
+    {}
+#else
+    explicit                    value_expr( T const& val )
+    : m_value( val )
+    {}
+#endif
+
+    // Specific expression interface
+    T const&                    value() const
+    {
+        return m_value;
+    }
+    void                        report( std::ostream& ostr ) const
+    {
+        ostr << tt_detail::print_helper( m_value );
+    }
+
+    // Mutating operators
+#define ADD_OP_SUPPORT( OPER, ID, _ )   \
+    template<typename U>                \
+    value_expr<T>&                      \
+    operator OPER( U const& rhs )       \
+    {                                   \
+        m_value OPER rhs;               \
+                                        \
+        return *this;                   \
+    }                                   \
+/**/
+
+    BOOST_TEST_FOR_EACH_MUT_OP( ADD_OP_SUPPORT )
+#undef ADD_OP_SUPPORT
+
+    // expression interface
+    assertion_result            evaluate( bool no_message = false ) const
+    {
+        assertion_result res( value() );
+        if( no_message || res )
+            return res;
+
+        format_message( res.message(), value() );
+
+        return tt_detail::format_assertion_result( "", res.message().str() );
+    }
+
+private:
+    template<typename U>
+    static void format_message( wrap_stringstream& ostr, U const& v )   { ostr << "[(bool)" << v << " is false]"; }
+    static void format_message( wrap_stringstream& /*ostr*/, bool /*v*/ )       {}
+    static void format_message( wrap_stringstream& /*ostr*/, assertion_result const& /*v*/ ) {}
+
+    // Data members
+    T                           m_value;
+};
+
+// ************************************************************************** //
+// **************            assertion::binary_expr            ************** //
+// ************************************************************************** //
+// binary expression
+
+template<typename LExpr, typename Rhs, typename OP>
+class binary_expr : public expression_base<binary_expr<LExpr,Rhs,OP>,typename OP::result_type> {
+public:
+    // Public types
+    typedef typename OP::result_type result_type;
+
+    // Constructor
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+    binary_expr( binary_expr&& be )
+    : m_lhs( std::forward<LExpr>(be.m_lhs) )
+    , m_rhs( std::forward<Rhs>(be.m_rhs) )
+    {}
+    binary_expr( LExpr&& lhs, Rhs&& rhs )
+    : m_lhs( std::forward<LExpr>(lhs) )
+    , m_rhs( std::forward<Rhs>(rhs) )
+    {}
+#else
+    binary_expr( LExpr const& lhs, Rhs const& rhs )
+    : m_lhs( lhs )
+    , m_rhs( rhs )
+    {}
+#endif
+
+    // Specific expression interface
+    result_type                 value() const
+    {
+        return OP::eval( m_lhs.value(), m_rhs );
+    }
+    void                        report( std::ostream& ostr ) const
+    {
+        return OP::report( ostr, m_lhs, m_rhs );
+    }
+
+    assertion_result            evaluate( bool no_message = false ) const
+    {
+        assertion_result const expr_res( value() );
+        if( no_message || expr_res )
+            return expr_res;
+
+        wrap_stringstream buff;
+        report( buff.stream() );
+
+        return tt_detail::format_assertion_result( buff.stream().str(), expr_res.message() );
+    }
+
+    // To support custom manipulators
+    LExpr const&                lhs() const     { return m_lhs; }
+    Rhs const&                  rhs() const     { return m_rhs; }
+private:
+    // Data members
+    LExpr                       m_lhs;
+    Rhs                         m_rhs;
+};
+
+// ************************************************************************** //
+// **************               assertion::seed                ************** //
+// ************************************************************************** //
+// seed added ot the input expression to form an assertion expression
+
+class seed {
+public:
+    // ->* is highest precedence left to right operator
+    template<typename T>
+    value_expr<T>
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+    operator->*( T&& v ) const
+    {
+        return value_expr<T>( std::forward<T>( v ) );
+    }
+#else
+    operator->*( T const& v )  const
+    {
+        return value_expr<T>( v );
+    }
+#endif
+};
+
+#undef BOOST_TEST_FOR_EACH_CONST_OP
+
+} // namespace assertion
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_ASSERTION_HPP_100911GER
diff --git a/vendor/pdalboost/boost/test/tools/assertion_result.hpp b/vendor/pdalboost/boost/test/tools/assertion_result.hpp
new file mode 100644
index 0000000..2946e2f
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/assertion_result.hpp
@@ -0,0 +1,90 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// Enhanced result for test predicate that include message explaining failure
+// ***************************************************************************
+
+#ifndef BOOST_TEST_PREDICATE_RESULT_HPP_012705GER
+#define BOOST_TEST_PREDICATE_RESULT_HPP_012705GER
+
+// Boost.Test
+#include <boost/test/utils/class_properties.hpp>
+#include <boost/test/utils/wrap_stringstream.hpp>
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+
+// Boost
+#include <boost/shared_ptr.hpp>
+#include <boost/detail/workaround.hpp>
+
+// STL
+#include <cstddef>          // for std::size_t
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+
+// ************************************************************************** //
+// **************                assertion_result              ************** //
+// ************************************************************************** //
+
+//!@brief Type used for storing the result of an assertion.
+class BOOST_TEST_DECL assertion_result {
+
+    //!@internal
+    typedef unit_test::const_string      const_string;
+
+    //!@internal
+    struct dummy { void nonnull() {} };
+
+    //!@internal
+    typedef void (dummy::*safe_bool)();
+
+public:
+    // Constructor
+    assertion_result( bool pv_ )
+    : p_predicate_value( pv_ )
+    {}
+
+    template<typename BoolConvertable>
+    assertion_result( BoolConvertable const& pv_ ) : p_predicate_value( !!pv_ ) {}
+
+    // Access methods
+    bool                operator!() const           { return !p_predicate_value; }
+    void                operator=( bool pv_ )       { p_predicate_value.value = pv_; }
+    operator            safe_bool() const           { return !!p_predicate_value ? &dummy::nonnull : 0; }
+
+    // Public properties
+    BOOST_READONLY_PROPERTY( bool, (assertion_result) ) p_predicate_value;
+
+    // Access methods
+    bool                has_empty_message() const   { return !m_message; }
+    wrap_stringstream&  message()
+    {
+        if( !m_message )
+            m_message.reset( new wrap_stringstream );
+
+        return *m_message;
+    }
+    const_string        message() const                   { return !m_message ? const_string() : const_string( m_message->str() ); }
+
+private:
+    // Data members
+    shared_ptr<wrap_stringstream> m_message;
+};
+
+typedef assertion_result predicate_result;
+
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_PREDICATE_RESULT_HPP_012705GER
diff --git a/vendor/pdalboost/boost/test/tools/collection_comparison_op.hpp b/vendor/pdalboost/boost/test/tools/collection_comparison_op.hpp
new file mode 100644
index 0000000..f2e5dd0
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/collection_comparison_op.hpp
@@ -0,0 +1,378 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief Collection comparison with enhanced reporting
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_COLLECTION_COMPARISON_OP_HPP_050815GER
+#define BOOST_TEST_TOOLS_COLLECTION_COMPARISON_OP_HPP_050815GER
+
+// Boost.Test
+#include <boost/test/tools/assertion.hpp>
+
+#include <boost/test/utils/is_forward_iterable.hpp>
+
+// Boost
+#include <boost/mpl/bool.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/decay.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+namespace assertion {
+
+// ************************************************************************** //
+// ************* selectors for specialized comparizon routines ************** //
+// ************************************************************************** //
+
+template<typename T>
+struct specialized_compare : public mpl::false_ {};
+
+#define BOOST_TEST_SPECIALIZED_COLLECTION_COMPARE(Col)          \
+namespace pdalboost { namespace test_tools { namespace assertion {  \
+template<>                                                      \
+struct specialized_compare<Col> : public mpl::true_ {};         \
+}}}                                                             \
+/**/
+
+// ************************************************************************** //
+// **************            lexicographic_compare             ************** //
+// ************************************************************************** //
+
+namespace op {
+
+template <typename OP, bool can_be_equal, bool prefer_shorter,
+          typename Lhs, typename Rhs>
+inline assertion_result
+lexicographic_compare( Lhs const& lhs, Rhs const& rhs )
+{
+    assertion_result ar( true );
+
+    typename Lhs::const_iterator first1 = lhs.begin();
+    typename Rhs::const_iterator first2 = rhs.begin();
+    typename Lhs::const_iterator last1  = lhs.end();
+    typename Rhs::const_iterator last2  = rhs.end();
+    std::size_t                  pos    = 0;
+
+    for( ; (first1 != last1) && (first2 != last2); ++first1, ++first2, ++pos ) {
+        assertion_result const& element_ar = OP::eval(*first1, *first2);
+        if( !can_be_equal && element_ar )
+            return ar; // a < b
+
+        assertion_result const& reverse_ar = OP::eval(*first2, *first1);
+        if( element_ar && !reverse_ar )
+            return ar; // a<=b and !(b<=a) => a < b => return true
+
+        if( element_ar || !reverse_ar )
+            continue; // (a<=b and b<=a) or (!(a<b) and !(b<a)) => a == b => keep looking
+
+        // !(a<=b) and b<=a => b < a => return false
+        ar = false;
+        ar.message() << "\nFailure at position " << pos << ": "
+                     << tt_detail::print_helper(*first1)
+                     << OP::revert()
+                     << tt_detail::print_helper(*first2)
+                     << ". " << element_ar.message();
+        return ar;
+    }
+
+
+    if( first1 != last1 ) {
+        if( prefer_shorter ) {
+            ar = false;
+            ar.message() << "\nFirst collection has extra trailing elements.";
+        }
+    }
+    else if( first2 != last2 ) {
+        if( !prefer_shorter ) {
+            ar = false;
+            ar.message() << "\nSecond collection has extra trailing elements.";
+        }
+    }
+    else if( !can_be_equal ) {
+        ar = false;
+        ar.message() << "\nCollections appear to be equal.";
+    }
+
+    return ar;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               equality_compare               ************** //
+// ************************************************************************** //
+
+template <typename OP, typename Lhs, typename Rhs>
+inline assertion_result
+element_compare( Lhs const& lhs, Rhs const& rhs )
+{
+    assertion_result ar( true );
+
+    if( lhs.size() != rhs.size() ) {
+        ar = false;
+        ar.message() << "\nCollections size mismatch: " << lhs.size() << " != " << rhs.size();
+        return ar;
+    }
+
+    typename Lhs::const_iterator left  = lhs.begin();
+    typename Rhs::const_iterator right = rhs.begin();
+    std::size_t                  pos   = 0;
+
+    for( ; pos < lhs.size(); ++left, ++right, ++pos ) {
+        assertion_result const element_ar = OP::eval( *left, *right );
+        if( element_ar )
+            continue;
+
+        ar = false;
+        ar.message() << "\nMismatch at position " << pos << ": "
+                     << tt_detail::print_helper(*left)
+                     << OP::revert()
+                     << tt_detail::print_helper(*right)
+                     << ". " << element_ar.message();
+    }
+
+    return ar;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************             non_equality_compare             ************** //
+// ************************************************************************** //
+
+template <typename OP, typename Lhs, typename Rhs>
+inline assertion_result
+non_equality_compare( Lhs const& lhs, Rhs const& rhs )
+{
+    assertion_result ar( true );
+
+    if( lhs.size() != rhs.size() )
+        return ar;
+
+    typename Lhs::const_iterator left  = lhs.begin();
+    typename Rhs::const_iterator right = rhs.begin();
+    typename Lhs::const_iterator end   = lhs.end();
+
+    for( ; left != end; ++left, ++right ) {
+        if( OP::eval( *left, *right ) )
+            return ar;
+    }
+
+    ar = false;
+    ar.message() << "\nCollections appear to be equal";
+
+    return ar;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                   cctraits                   ************** //
+// ************************************************************************** //
+// set of collection comparison traits per comparison OP
+
+template<typename OP>
+struct cctraits;
+
+template<typename Lhs, typename Rhs>
+struct cctraits<op::EQ<Lhs, Rhs> > {
+    typedef specialized_compare<Lhs> is_specialized;
+};
+
+template<typename Lhs, typename Rhs>
+struct cctraits<op::NE<Lhs, Rhs> > {
+    typedef specialized_compare<Lhs> is_specialized;
+};
+
+template<typename Lhs, typename Rhs>
+struct cctraits<op::LT<Lhs, Rhs> > {
+    static const bool can_be_equal = false;
+    static const bool prefer_short = true;
+
+    typedef specialized_compare<Lhs> is_specialized;
+};
+
+template<typename Lhs, typename Rhs>
+struct cctraits<op::LE<Lhs, Rhs> > {
+    static const bool can_be_equal = true;
+    static const bool prefer_short = true;
+
+    typedef specialized_compare<Lhs> is_specialized;
+};
+
+template<typename Lhs, typename Rhs>
+struct cctraits<op::GT<Lhs, Rhs> > {
+    static const bool can_be_equal = false;
+    static const bool prefer_short = false;
+
+    typedef specialized_compare<Lhs> is_specialized;
+};
+
+template<typename Lhs, typename Rhs>
+struct cctraits<op::GE<Lhs, Rhs> > {
+    static const bool can_be_equal = true;
+    static const bool prefer_short = false;
+
+    typedef specialized_compare<Lhs> is_specialized;
+};
+
+// ************************************************************************** //
+// **************              compare_collections             ************** //
+// ************************************************************************** //
+// Overloaded set of functions dispatching to specific implementation of comparison
+
+template <typename Lhs, typename Rhs, typename L, typename R>
+inline assertion_result
+compare_collections( Lhs const& lhs, Rhs const& rhs, pdalboost::type<op::EQ<L, R> >*, mpl::true_ )
+{
+    return assertion::op::element_compare<op::EQ<L, R> >( lhs, rhs );
+}
+
+//____________________________________________________________________________//
+
+template <typename Lhs, typename Rhs, typename L, typename R>
+inline assertion_result
+compare_collections( Lhs const& lhs, Rhs const& rhs, pdalboost::type<op::EQ<L, R> >*, mpl::false_ )
+{
+    return lhs == rhs;
+}
+
+//____________________________________________________________________________//
+
+template <typename Lhs, typename Rhs, typename L, typename R>
+inline assertion_result
+compare_collections( Lhs const& lhs, Rhs const& rhs, pdalboost::type<op::NE<L, R> >*, mpl::true_ )
+{
+    return assertion::op::non_equality_compare<op::NE<L, R> >( lhs, rhs );
+}
+
+//____________________________________________________________________________//
+
+template <typename Lhs, typename Rhs, typename L, typename R>
+inline assertion_result
+compare_collections( Lhs const& lhs, Rhs const& rhs, pdalboost::type<op::NE<L, R> >*, mpl::false_ )
+{
+    return lhs != rhs;
+}
+
+//____________________________________________________________________________//
+
+template <typename OP, typename Lhs, typename Rhs>
+inline assertion_result
+lexicographic_compare( Lhs const& lhs, Rhs const& rhs )
+{
+    return assertion::op::lexicographic_compare<OP, cctraits<OP>::can_be_equal, cctraits<OP>::prefer_short>( lhs, rhs );
+}
+
+//____________________________________________________________________________//
+
+template <typename Lhs, typename Rhs, typename OP>
+inline assertion_result
+compare_collections( Lhs const& lhs, Rhs const& rhs, pdalboost::type<OP>* tp, mpl::true_ )
+{
+    return lexicographic_compare<OP>( lhs, rhs );
+}
+
+//____________________________________________________________________________//
+
+template <typename Lhs, typename Rhs, typename L, typename R>
+inline assertion_result
+compare_collections( Lhs const& lhs, Rhs const& rhs, pdalboost::type<op::LT<L, R> >* tp, mpl::false_ )
+{
+    return lhs < rhs;
+}
+
+//____________________________________________________________________________//
+
+template <typename Lhs, typename Rhs, typename L, typename R>
+inline assertion_result
+compare_collections( Lhs const& lhs, Rhs const& rhs, pdalboost::type<op::LE<L, R> >* tp, mpl::false_ )
+{
+    return lhs <= rhs;
+}
+
+//____________________________________________________________________________//
+
+template <typename Lhs, typename Rhs, typename L, typename R>
+inline assertion_result
+compare_collections( Lhs const& lhs, Rhs const& rhs, pdalboost::type<op::GT<L, R> >* tp, mpl::false_ )
+{
+    return lhs > rhs;
+}
+
+//____________________________________________________________________________//
+
+template <typename Lhs, typename Rhs, typename L, typename R>
+inline assertion_result
+compare_collections( Lhs const& lhs, Rhs const& rhs, pdalboost::type<op::GE<L, R> >* tp, mpl::false_ )
+{
+    return lhs >= rhs;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ********* specialization of comparison operators for collections ********* //
+// ************************************************************************** //
+
+#define DEFINE_COLLECTION_COMPARISON( oper, name, rev )             \
+template<typename Lhs,typename Rhs>                                 \
+struct name<Lhs,Rhs,typename pdalboost::enable_if_c<                    \
+    unit_test::is_forward_iterable<Lhs>::value &&                   \
+    unit_test::is_forward_iterable<Rhs>::value>::type> {            \
+public:                                                             \
+    typedef assertion_result result_type;                           \
+                                                                    \
+    typedef name<Lhs, Rhs> OP;                                      \
+    typedef typename                                                \
+        mpl::if_c<is_same<typename decay<Lhs>::type,                \
+                          typename decay<Rhs>::type>::value,        \
+                  typename cctraits<OP>::is_specialized,            \
+                  mpl::false_>::type is_specialized;                \
+                                                                    \
+    typedef name<typename Lhs::value_type,                          \
+                 typename Rhs::value_type> elem_op;                 \
+                                                                    \
+    static assertion_result                                         \
+    eval( Lhs const& lhs, Rhs const& rhs)                           \
+    {                                                               \
+        return assertion::op::compare_collections( lhs, rhs,        \
+            (pdalboost::type<elem_op>*)0,                               \
+            is_specialized() );                                     \
+    }                                                               \
+                                                                    \
+    template<typename PrevExprType>                                 \
+    static void                                                     \
+    report( std::ostream&,                                          \
+            PrevExprType const&,                                    \
+            Rhs const& ) {}                                         \
+                                                                    \
+    static char const* revert()                                     \
+    { return " " #rev " "; }                                        \
+                                                                    \
+};                                                                  \
+/**/
+
+BOOST_TEST_FOR_EACH_COMP_OP( DEFINE_COLLECTION_COMPARISON )
+#undef DEFINE_COLLECTION_COMPARISON
+
+//____________________________________________________________________________//
+
+} // namespace op
+} // namespace assertion
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_COLLECTION_COMPARISON_OP_HPP_050815GER
diff --git a/vendor/pdalboost/boost/test/tools/context.hpp b/vendor/pdalboost/boost/test/tools/context.hpp
new file mode 100644
index 0000000..394d9e6
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/context.hpp
@@ -0,0 +1,65 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: 74248 $
+//
+//  Description : test tools context interfaces
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_CONTEXT_HPP_111712GER
+#define BOOST_TEST_TOOLS_CONTEXT_HPP_111712GER
+
+// Boost.Test
+#include <boost/test/utils/lazy_ostream.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+namespace tt_detail {
+
+// ************************************************************************** //
+// **************                 context_frame                ************** //
+// ************************************************************************** //
+
+struct BOOST_TEST_DECL context_frame {
+    explicit    context_frame( ::pdalboost::unit_test::lazy_ostream const& context_descr );
+    ~context_frame();
+
+    operator    bool();
+
+private:
+    // Data members
+    int         m_frame_id;
+};
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_INFO( context_descr )                                                        \
+    ::pdalboost::unit_test::framework::add_context( BOOST_TEST_LAZY_MSG( context_descr ) , false )  \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_CONTEXT( context_descr )                                                     \
+    if( ::pdalboost::test_tools::tt_detail::context_frame BOOST_JOIN( context_frame_, __LINE__ ) =  \
+        ::pdalboost::test_tools::tt_detail::context_frame( BOOST_TEST_LAZY_MSG( context_descr ) ) ) \
+/**/
+
+//____________________________________________________________________________//
+
+} // namespace tt_detail
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_CONTEXT_HPP_111712GER
diff --git a/vendor/pdalboost/boost/test/tools/cstring_comparison_op.hpp b/vendor/pdalboost/boost/test/tools/cstring_comparison_op.hpp
new file mode 100644
index 0000000..5543f26
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/cstring_comparison_op.hpp
@@ -0,0 +1,91 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief C string comparison with enhanced reporting
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_CSTRING_COMPARISON_OP_HPP_050815GER
+#define BOOST_TEST_TOOLS_CSTRING_COMPARISON_OP_HPP_050815GER
+
+// Boost.Test
+#include <boost/test/tools/assertion.hpp>
+
+#include <boost/test/utils/is_cstring.hpp>
+#include <boost/test/utils/basic_cstring/compare.hpp>
+
+// Boost
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+namespace assertion {
+namespace op {
+
+
+
+// ************************************************************************** //
+// **************               string_compare                 ************** //
+// ************************************************************************** //
+
+#define DEFINE_CSTRING_COMPARISON( oper, name, rev )                \
+template<typename Lhs,typename Rhs>                                 \
+struct name<Lhs,Rhs,typename pdalboost::enable_if_c<                    \
+    unit_test::is_cstring<Lhs>::value &&                            \
+    unit_test::is_cstring<Rhs>::value>::type> {                     \
+    typedef typename pdalboost::add_const<                              \
+                typename remove_pointer<                            \
+                    typename decay<Lhs>::type>::type>::type         \
+        lhs_char_type;                                              \
+    typedef typename pdalboost::add_const<                              \
+                typename remove_pointer<                            \
+                    typename decay<Rhs>::type>::type>::type         \
+        rhs_char_type;                                              \
+public:                                                             \
+    typedef assertion_result result_type;                           \
+                                                                    \
+    static bool                                                     \
+    eval( Lhs const& lhs, Rhs const& rhs)                           \
+    {                                                               \
+        return unit_test::basic_cstring<lhs_char_type>(lhs) oper    \
+               unit_test::basic_cstring<rhs_char_type>(rhs);        \
+    }                                                               \
+                                                                    \
+    template<typename PrevExprType>                                 \
+    static void                                                     \
+    report( std::ostream&       ostr,                               \
+            PrevExprType const& lhs,                                \
+            Rhs const&          rhs)                                \
+    {                                                               \
+        lhs.report( ostr );                                         \
+        ostr << revert()                                            \
+             << tt_detail::print_helper( rhs );                     \
+    }                                                               \
+                                                                    \
+    static char const* revert()                                     \
+    { return " " #rev " "; }                                        \
+};                                                                  \
+/**/
+
+BOOST_TEST_FOR_EACH_COMP_OP( DEFINE_CSTRING_COMPARISON )
+#undef DEFINE_CSTRING_COMPARISON
+
+//____________________________________________________________________________//
+
+} // namespace op
+} // namespace assertion
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_CSTRING_COMPARISON_OP_HPP_050815GER
+
diff --git a/vendor/pdalboost/boost/test/tools/detail/bitwise_manip.hpp b/vendor/pdalboost/boost/test/tools/detail/bitwise_manip.hpp
new file mode 100644
index 0000000..c4c6b1e
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/detail/bitwise_manip.hpp
@@ -0,0 +1,123 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//! @file
+//! Bitwise comparison manipulator implementation
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_DETAIL_BITWISE_MANIP_HPP_012705GER
+#define BOOST_TEST_TOOLS_DETAIL_BITWISE_MANIP_HPP_012705GER
+
+// Boost Test
+#include <boost/test/tools/detail/fwd.hpp>
+#include <boost/test/tools/detail/indirections.hpp>
+
+#include <boost/test/tools/assertion_result.hpp>
+#include <boost/test/tools/assertion.hpp>
+
+// STL
+#include <climits>          // for CHAR_BIT
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+
+// ************************************************************************** //
+// **************        bitwise comparison manipulator        ************** //
+// ************************************************************************** //
+
+//! Bitwise comparison manipulator
+struct bitwise {};
+
+//____________________________________________________________________________//
+
+inline int
+operator<<( unit_test::lazy_ostream const&, bitwise )   { return 0; }
+
+//____________________________________________________________________________//
+
+namespace tt_detail {
+
+/*!@brief Bitwise comparison of two operands
+ *
+ * This class constructs an @ref assertion_result that contains precise bit comparison information.
+ * In particular the location of the mismatches (if any) are printed in the assertion result. 
+ */
+template<typename Lhs, typename Rhs, typename E>
+inline assertion_result
+bitwise_compare(Lhs const& lhs, Rhs const& rhs, E const& expr )
+{
+    assertion_result    pr( true );
+
+    std::size_t left_bit_size  = sizeof(Lhs)*CHAR_BIT;
+    std::size_t right_bit_size = sizeof(Rhs)*CHAR_BIT;
+
+    static Lhs const leftOne( 1 );
+    static Rhs const rightOne( 1 );
+
+    std::size_t total_bits = left_bit_size < right_bit_size ? left_bit_size : right_bit_size;
+
+    for( std::size_t counter = 0; counter < total_bits; ++counter ) {
+        if( (lhs & ( leftOne << counter )) != (rhs & (rightOne << counter)) ) {
+            if( pr ) {
+                pr.message() << " [";
+                expr.report( pr.message().stream() );
+                pr.message() << "]. Bitwise comparison failed";
+                pr = false;
+            }
+            pr.message() << "\nMismatch at position " << counter;
+        }
+    }
+
+    if( left_bit_size != right_bit_size ) {
+        if( pr ) {
+            pr.message() << " [";
+            expr.report( pr.message().stream() );
+            pr.message() << "]. Bitwise comparison failed";
+            pr = false;
+        }
+        pr.message() << "\nOperands bit sizes mismatch: " << left_bit_size << " != " << right_bit_size;
+    }
+
+    return pr;
+}
+
+//____________________________________________________________________________//
+
+//! Returns an assertion_result using the bitwise comparison out of an expression
+//!
+//! This is used as a modifer of the normal operator<< on expressions to use the
+//! bitwise comparison. 
+//!
+//! @note Available only for compilers supporting the @c auto declaration. 
+template<typename T1, typename T2, typename T3, typename T4>
+inline assertion_result
+operator<<(assertion_evaluate_t<assertion::binary_expr<T1,T2,assertion::op::EQ<T3,T4> > > const& ae, bitwise )
+{
+    return bitwise_compare( ae.m_e.lhs().value(), ae.m_e.rhs(), ae.m_e );
+}
+
+//____________________________________________________________________________//
+
+inline check_type
+operator<<( assertion_type const& , bitwise )
+{
+    return CHECK_BUILT_ASSERTION;
+}
+
+//____________________________________________________________________________//
+
+} // namespace tt_detail
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_DETAIL_BITWISE_MANIP_HPP_012705GER
diff --git a/vendor/pdalboost/boost/test/tools/detail/expression_holder.hpp b/vendor/pdalboost/boost/test/tools/detail/expression_holder.hpp
new file mode 100644
index 0000000..2b836b8
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/detail/expression_holder.hpp
@@ -0,0 +1,70 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: 74248 $
+//
+//  Description : toolbox implementation details
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_DETAIL_EXPRESSION_HOLDER_HPP_012705GER
+#define BOOST_TEST_TOOLS_DETAIL_EXPRESSION_HOLDER_HPP_012705GER
+
+#ifdef BOOST_NO_CXX11_AUTO_DECLARATIONS
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+namespace tt_detail {
+
+// ************************************************************************** //
+// **************         tt_detail::expression_holder         ************** //
+// ************************************************************************** //
+
+class expression_holder {
+public:
+    virtual                     ~expression_holder() {}
+    virtual assertion_result    evaluate( bool no_message = false )  const = 0;
+};
+
+//____________________________________________________________________________//
+
+template<typename E>
+class  expression_holder_t: public expression_holder {
+public:
+    explicit                    expression_holder_t( E const& e ) : m_expr( e ) {}
+
+private:
+    virtual assertion_result    evaluate( bool no_message = false )  const { return m_expr.evaluate( no_message ); }
+
+    E                           m_expr;
+};
+
+//____________________________________________________________________________//
+
+template<typename E>
+expression_holder_t<E>
+hold_expression( E const& e )
+{
+    return expression_holder_t<E>( e );
+}
+
+//____________________________________________________________________________//
+
+} // namespace tt_detail
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif
+
+#endif // BOOST_TEST_TOOLS_DETAIL_EXPRESSION_HOLDER_HPP_012705GER
diff --git a/vendor/pdalboost/boost/test/tools/detail/fwd.hpp b/vendor/pdalboost/boost/test/tools/detail/fwd.hpp
new file mode 100644
index 0000000..5c76b9e
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/detail/fwd.hpp
@@ -0,0 +1,121 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: 74248 $
+//
+//  Description : toolbox implementation types and forward declarations
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_DETAIL_FWD_HPP_012705GER
+#define BOOST_TEST_TOOLS_DETAIL_FWD_HPP_012705GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+// STL
+#include <cstddef>          // for std::size_t
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+class lazy_ostream;
+
+} // namespace unit_test
+
+namespace test_tools {
+
+using unit_test::const_string;
+class assertion_result;
+
+//____________________________________________________________________________//
+
+namespace tt_detail {
+
+inline bool dummy_cond() { return false; }
+
+// ************************************************************************** //
+// **************        types of supported assertions         ************** //
+// ************************************************************************** //
+
+//____________________________________________________________________________//
+
+enum check_type {
+    CHECK_PRED,
+    CHECK_MSG,
+    CHECK_EQUAL,
+    CHECK_NE,
+    CHECK_LT,
+    CHECK_LE,
+    CHECK_GT,
+    CHECK_GE,
+    CHECK_CLOSE,
+    CHECK_CLOSE_FRACTION,
+    CHECK_SMALL,
+    CHECK_BITWISE_EQUAL,
+    CHECK_PRED_WITH_ARGS,
+    CHECK_EQUAL_COLL,
+    CHECK_BUILT_ASSERTION
+};
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************        levels of supported assertions        ************** //
+// ************************************************************************** //
+
+enum tool_level {
+    WARN, CHECK, REQUIRE, PASS
+};
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************         Tools offline implementation         ************** //
+// ************************************************************************** //
+
+BOOST_TEST_DECL bool
+report_assertion( assertion_result const& pr, unit_test::lazy_ostream const& assertion_descr,
+                  const_string file_name, std::size_t line_num,
+                  tool_level tl, check_type ct,
+                  std::size_t num_args, ... );
+
+//____________________________________________________________________________//
+
+BOOST_TEST_DECL assertion_result
+format_assertion_result( const_string expr_val, const_string details );
+
+//____________________________________________________________________________//
+
+BOOST_TEST_DECL assertion_result
+format_fpc_report( const_string expr_val, const_string details );
+
+//____________________________________________________________________________//
+
+BOOST_TEST_DECL bool
+is_defined_impl( const_string symbol_name, const_string symbol_value );
+
+//____________________________________________________________________________//
+
+BOOST_TEST_DECL assertion_result
+equal_impl( char const* left, char const* right );
+
+//____________________________________________________________________________//
+
+} // namespace tt_detail
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_DETAIL_FWD_HPP_012705GER
diff --git a/vendor/pdalboost/boost/test/tools/detail/indirections.hpp b/vendor/pdalboost/boost/test/tools/detail/indirections.hpp
new file mode 100644
index 0000000..b70861e
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/detail/indirections.hpp
@@ -0,0 +1,94 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: 74248 $
+//
+//  Description : inidiration interfaces to support manipulators and message output
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_DETAIL_INDIRECTIONS_HPP_112812GER
+#define BOOST_TEST_TOOLS_DETAIL_INDIRECTIONS_HPP_112812GER
+
+// Boost.Test
+#include <boost/test/tools/detail/fwd.hpp>
+
+#include <boost/test/tools/assertion_result.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+namespace tt_detail {
+
+// ************************************************************************** //
+// **************        assertion_evaluate indirection        ************** //
+// ************************************************************************** //
+
+template<typename E>
+struct assertion_evaluate_t {
+    assertion_evaluate_t( E const& e ) : m_e( e ) {}
+    operator assertion_result() { return m_e.evaluate( true ); }
+
+    E const& m_e;
+};
+
+//____________________________________________________________________________//
+
+template<typename E>
+inline assertion_evaluate_t<E>
+assertion_evaluate( E const& e ) { return assertion_evaluate_t<E>( e ); }
+
+//____________________________________________________________________________//
+
+template<typename E, typename T>
+inline assertion_evaluate_t<E>
+operator<<( assertion_evaluate_t<E> const& ae, T const& ) { return ae; }
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************          assertion_text indirection          ************** //
+// ************************************************************************** //
+
+template<typename T>
+inline unit_test::lazy_ostream const&
+assertion_text( unit_test::lazy_ostream const& /*et*/, T const& m ) { return m; }
+
+//____________________________________________________________________________//
+
+inline unit_test::lazy_ostream const&
+assertion_text( unit_test::lazy_ostream const& et, int ) { return et; }
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************        assertion_evaluate indirection        ************** //
+// ************************************************************************** //
+
+struct assertion_type {
+    operator check_type() { return CHECK_MSG; }
+};
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline assertion_type
+operator<<( assertion_type const& at, T const& ) { return at; }
+
+//____________________________________________________________________________//
+
+} // namespace tt_detail
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_DETAIL_INDIRECTIONS_HPP_112812GER
diff --git a/vendor/pdalboost/boost/test/tools/detail/it_pair.hpp b/vendor/pdalboost/boost/test/tools/detail/it_pair.hpp
new file mode 100644
index 0000000..1192add
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/detail/it_pair.hpp
@@ -0,0 +1,74 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: 74248 $
+//
+//  Description : support for backward compatible collection comparison interface
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_DETAIL_IT_PAIR_HPP_112812GER
+#define BOOST_TEST_TOOLS_DETAIL_IT_PAIR_HPP_112812GER
+
+#ifdef BOOST_TEST_NO_OLD_TOOLS
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+namespace tt_detail {
+
+// ************************************************************************** //
+// **************       backward compatibility support         ************** //
+// ************************************************************************** //
+
+template<typename It>
+struct it_pair {
+    typedef It const_iterator;
+    typedef typename std::iterator_traits<It>::value_type value_type;
+
+    it_pair( It const& b, It const& e ) : m_begin( b ), m_size( 0 )
+    {
+        It tmp = b;
+        while( tmp != e ) { ++m_size; ++tmp; }
+    }
+
+    It      begin() const   { return m_begin; }
+    It      end() const     { return m_begin + m_size; }
+    size_t  size() const    { return m_size; }
+
+private:
+    It      m_begin;
+    size_t  m_size;
+};
+
+//____________________________________________________________________________//
+
+template<typename It>
+it_pair<It>
+make_it_pair( It const& b, It const& e ) { return it_pair<It>( b, e ); }
+
+//____________________________________________________________________________//
+
+template<typename T>
+it_pair<T const*>
+make_it_pair( T const* b, T const* e ) { return it_pair<T const*>( b, e ); }
+
+//____________________________________________________________________________//
+
+} // namespace tt_detail
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_NO_OLD_TOOLS
+
+#endif // BOOST_TEST_TOOLS_DETAIL_IT_PAIR_HPP_112812GER
diff --git a/vendor/pdalboost/boost/test/tools/detail/lexicographic_manip.hpp b/vendor/pdalboost/boost/test/tools/detail/lexicographic_manip.hpp
new file mode 100644
index 0000000..c4d09fb
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/detail/lexicographic_manip.hpp
@@ -0,0 +1,69 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//! @file
+//! Lexicographic comparison manipulator implementation
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_DETAIL_LEXICOGRAPHIC_MANIP_HPP_050815GER
+#define BOOST_TEST_TOOLS_DETAIL_LEXICOGRAPHIC_MANIP_HPP_050815GER
+
+// Boost Test
+#include <boost/test/tools/detail/fwd.hpp>
+#include <boost/test/tools/detail/indirections.hpp>
+
+#include <boost/test/tools/assertion.hpp>
+#include <boost/test/tools/collection_comparison_op.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+
+// ************************************************************************** //
+// **************      per element comparison manipulator      ************** //
+// ************************************************************************** //
+
+//! Lexicographic comparison manipulator, for containers
+struct lexicographic {};
+
+//____________________________________________________________________________//
+
+inline int
+operator<<( unit_test::lazy_ostream const&, lexicographic )   { return 0; }
+
+//____________________________________________________________________________//
+
+namespace tt_detail {
+
+template<typename T1, typename T2, typename OP>
+inline assertion_result
+operator<<(assertion_evaluate_t<assertion::binary_expr<T1,T2,OP> > const& ae, lexicographic )
+{
+    typedef typename OP::elem_op elem_op;
+    return assertion::op::lexicographic_compare<elem_op>( ae.m_e.lhs().value(), ae.m_e.rhs() );
+}
+
+//____________________________________________________________________________//
+
+inline check_type
+operator<<( assertion_type const&, lexicographic )
+{
+    return CHECK_BUILT_ASSERTION;
+}
+
+//____________________________________________________________________________//
+
+} // namespace tt_detail
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_DETAIL_LEXICOGRAPHIC_MANIP_HPP_050815GER
diff --git a/vendor/pdalboost/boost/test/tools/detail/per_element_manip.hpp b/vendor/pdalboost/boost/test/tools/detail/per_element_manip.hpp
new file mode 100644
index 0000000..2f1f9df
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/detail/per_element_manip.hpp
@@ -0,0 +1,69 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//! @file
+//! Per element comparison manipulator implementation
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_DETAIL_PER_ELEMENT_MANIP_HPP_050815GER
+#define BOOST_TEST_TOOLS_DETAIL_PER_ELEMENT_MANIP_HPP_050815GER
+
+// Boost Test
+#include <boost/test/tools/detail/fwd.hpp>
+#include <boost/test/tools/detail/indirections.hpp>
+
+#include <boost/test/tools/assertion.hpp>
+#include <boost/test/tools/collection_comparison_op.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+
+// ************************************************************************** //
+// **************      per element comparison manipulator      ************** //
+// ************************************************************************** //
+
+//! Per element comparison manipulator, for containers
+struct per_element {};
+
+//____________________________________________________________________________//
+
+inline int
+operator<<( unit_test::lazy_ostream const&, per_element )   { return 0; }
+
+//____________________________________________________________________________//
+
+namespace tt_detail {
+
+template<typename T1, typename T2, typename OP>
+inline assertion_result
+operator<<(assertion_evaluate_t<assertion::binary_expr<T1,T2,OP> > const& ae, per_element )
+{
+    typedef typename OP::elem_op elem_op;
+    return assertion::op::element_compare<elem_op>( ae.m_e.lhs().value(), ae.m_e.rhs() );
+}
+
+//____________________________________________________________________________//
+
+inline check_type
+operator<<( assertion_type const&, per_element )
+{
+    return CHECK_BUILT_ASSERTION;
+}
+
+//____________________________________________________________________________//
+
+} // namespace tt_detail
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_DETAIL_PER_ELEMENT_MANIP_HPP_050815GER
diff --git a/vendor/pdalboost/boost/test/tools/detail/print_helper.hpp b/vendor/pdalboost/boost/test/tools/detail/print_helper.hpp
new file mode 100644
index 0000000..a3a9e99
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/detail/print_helper.hpp
@@ -0,0 +1,199 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: 74248 $
+//
+//  Description : defines level of indiration facilitating workarounds for non printable types
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_IMPL_COMMON_HPP_012705GER
+#define BOOST_TEST_TOOLS_IMPL_COMMON_HPP_012705GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/workaround.hpp>
+
+// Boost
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/is_abstract.hpp>
+#include <limits>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+namespace tt_detail {
+
+// ************************************************************************** //
+// **************                print_log_value               ************** //
+// ************************************************************************** //
+
+template<typename T>
+struct print_log_value {
+    void    operator()( std::ostream& ostr, T const& t )
+    {
+        typedef typename mpl::or_<is_array<T>,is_function<T>,is_abstract<T> >::type cant_use_nl;
+
+        std::streamsize old_precision = set_precision( ostr, cant_use_nl() );
+
+        ostr << t;
+
+        if( old_precision != (std::streamsize)-1 )
+            ostr.precision( old_precision );
+    }
+
+    std::streamsize set_precision( std::ostream& ostr, mpl::false_ )
+    {
+        if( std::numeric_limits<T>::is_specialized && std::numeric_limits<T>::radix == 2 )
+            return ostr.precision( 2 + std::numeric_limits<T>::digits * 301/1000 );
+        else if ( std::numeric_limits<T>::is_specialized && std::numeric_limits<T>::radix == 10 ) {
+#ifdef BOOST_NO_CXX11_NUMERIC_LIMITS
+            // (was BOOST_NO_NUMERIC_LIMITS_LOWEST but now deprecated).
+            // No support for std::numeric_limits<double>::max_digits10,
+            // so guess that a couple of guard digits more than digits10 will display any difference.
+            return ostr.precision( 2 + std::numeric_limits<T>::digits10 );
+#else
+            // std::numeric_limits<double>::max_digits10; IS supported.
+            // Any noisy or guard digits needed to display any difference are included in max_digits10.
+            return ostr.precision( std::numeric_limits<T>::max_digits10 );
+#endif
+        }
+        // else if T is not specialized for std::numeric_limits<>,
+        // then will just get the default precision of 6 digits.
+        return (std::streamsize)-1;
+    }
+
+    std::streamsize set_precision( std::ostream&, mpl::true_ ) { return (std::streamsize)-1; }
+};
+
+//____________________________________________________________________________//
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+template<typename T, std::size_t N >
+struct print_log_value< T[N] > {
+    void    operator()( std::ostream& ostr, T const* t )
+    {
+        ostr << t;
+    }
+};
+#endif
+
+//____________________________________________________________________________//
+
+template<>
+struct BOOST_TEST_DECL print_log_value<bool> {
+    void    operator()( std::ostream& ostr, bool t )
+    {
+         ostr << std::boolalpha << t;
+    }
+};
+
+//____________________________________________________________________________//
+
+template<>
+struct BOOST_TEST_DECL print_log_value<char> {
+    void    operator()( std::ostream& ostr, char t );
+};
+
+//____________________________________________________________________________//
+
+template<>
+struct BOOST_TEST_DECL print_log_value<unsigned char> {
+    void    operator()( std::ostream& ostr, unsigned char t );
+};
+
+//____________________________________________________________________________//
+
+template<>
+struct BOOST_TEST_DECL print_log_value<char const*> {
+    void    operator()( std::ostream& ostr, char const* t );
+};
+
+//____________________________________________________________________________//
+
+template<>
+struct BOOST_TEST_DECL print_log_value<wchar_t const*> {
+    void    operator()( std::ostream& ostr, wchar_t const* t );
+};
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                 print_helper                 ************** //
+// ************************************************************************** //
+// Adds level of indirection to the output operation, allowing us to customize
+// it for types that do not support operator << directly or for any other reason
+
+template<typename T>
+struct print_helper_t {
+    explicit    print_helper_t( T const& t ) : m_t( t ) {}
+
+    T const&    m_t;
+};
+
+//____________________________________________________________________________//
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+// Borland suffers premature pointer decay passing arrays by reference
+template<typename T, std::size_t N >
+struct print_helper_t< T[N] > {
+    explicit    print_helper_t( T const * t ) : m_t( t ) {}
+
+    T const *   m_t;
+};
+#endif
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline print_helper_t<T>
+print_helper( T const& t )
+{
+    return print_helper_t<T>( t );
+}
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline std::ostream&
+operator<<( std::ostream& ostr, print_helper_t<T> const& ph )
+{
+    print_log_value<T>()( ostr, ph.m_t );
+
+    return ostr;
+}
+
+//____________________________________________________________________________//
+
+} // namespace tt_detail
+
+// ************************************************************************** //
+// **************       BOOST_TEST_DONT_PRINT_LOG_VALUE        ************** //
+// ************************************************************************** //
+
+#define BOOST_TEST_DONT_PRINT_LOG_VALUE( the_type )         \
+namespace pdalboost{ namespace test_tools{ namespace tt_detail{ \
+template<>                                                  \
+struct print_log_value<the_type > {                         \
+    void    operator()( std::ostream&, the_type const& ) {} \
+};                                                          \
+}}}                                                         \
+/**/
+
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_IMPL_COMMON_HPP_012705GER
diff --git a/vendor/pdalboost/boost/test/tools/detail/tolerance_manip.hpp b/vendor/pdalboost/boost/test/tools/detail/tolerance_manip.hpp
new file mode 100644
index 0000000..96fe1f8
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/detail/tolerance_manip.hpp
@@ -0,0 +1,130 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//! @file
+//! @brief Floating point comparison tolerance manipulators
+//! 
+//! This file defines several manipulators for floating point comparison. These
+//! manipulators are intended to be used with BOOST_TEST.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_DETAIL_TOLERANCE_MANIP_HPP_012705GER
+#define BOOST_TEST_TOOLS_DETAIL_TOLERANCE_MANIP_HPP_012705GER
+
+// Boost Test
+#include <boost/test/tools/detail/fwd.hpp>
+#include <boost/test/tools/detail/indirections.hpp>
+
+#include <boost/test/tools/fpc_tolerance.hpp>
+#include <boost/test/tools/floating_point_comparison.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+namespace tt_detail {
+
+// ************************************************************************** //
+// **************           fpc tolerance manipulator          ************** //
+// ************************************************************************** //
+
+template<typename FPT>
+struct tolerance_manip {
+    explicit tolerance_manip( FPT const & tol ) : m_value( tol ) {}
+
+    FPT m_value;
+};
+
+//____________________________________________________________________________//
+
+struct tolerance_manip_delay {};
+
+template<typename FPT>
+inline tolerance_manip<FPT>
+operator%( FPT v, tolerance_manip_delay const& )
+{
+    BOOST_STATIC_ASSERT_MSG( (fpc::tolerance_based<FPT>::value), 
+                             "tolerance should be specified using a floating points type" );
+
+    return tolerance_manip<FPT>( FPT(v / 100) );
+}
+
+//____________________________________________________________________________//
+
+template<typename E, typename FPT>
+inline assertion_result
+operator<<(assertion_evaluate_t<E> const& ae, tolerance_manip<FPT> const& tol)
+{
+    local_fpc_tolerance<FPT> lt( tol.m_value );
+
+    return ae.m_e.evaluate();
+}
+
+//____________________________________________________________________________//
+
+template<typename FPT>
+inline int
+operator<<( unit_test::lazy_ostream const&, tolerance_manip<FPT> const& )   { return 0; }
+
+//____________________________________________________________________________//
+
+template<typename FPT>
+inline check_type
+operator<<( assertion_type const& /*at*/, tolerance_manip<FPT> const& )         { return CHECK_BUILT_ASSERTION; }
+
+//____________________________________________________________________________//
+
+} // namespace tt_detail
+
+
+/*! Tolerance manipulator
+ *
+ * These functions return a manipulator that can be used in conjunction with BOOST_TEST
+ * in order to specify the tolerance with which floating point comparisons are made.
+ */
+template<typename FPT>
+inline tt_detail::tolerance_manip<FPT>
+tolerance( FPT v )
+{
+    BOOST_STATIC_ASSERT_MSG( (fpc::tolerance_based<FPT>::value), 
+                             "tolerance only for floating points" );
+
+    return tt_detail::tolerance_manip<FPT>( v );
+}
+
+//____________________________________________________________________________//
+
+//! @overload tolerance( FPT v )
+template<typename FPT>
+inline tt_detail::tolerance_manip<FPT>
+tolerance( fpc::percent_tolerance_t<FPT> v )
+{
+    BOOST_STATIC_ASSERT_MSG( (fpc::tolerance_based<FPT>::value), 
+                             "tolerance only for floating points" );
+
+    return tt_detail::tolerance_manip<FPT>( static_cast<FPT>(v.m_value / 100) );
+}
+
+//____________________________________________________________________________//
+
+//! @overload tolerance( FPT v )
+inline tt_detail::tolerance_manip_delay
+tolerance()
+{
+    return tt_detail::tolerance_manip_delay();
+}
+
+//____________________________________________________________________________//
+
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_DETAIL_TOLERANCE_MANIP_HPP_012705GER
diff --git a/vendor/pdalboost/boost/test/tools/floating_point_comparison.hpp b/vendor/pdalboost/boost/test/tools/floating_point_comparison.hpp
new file mode 100644
index 0000000..ec76165
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/floating_point_comparison.hpp
@@ -0,0 +1,315 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file 
+//!@brief algorithms for comparing floating point values
+// ***************************************************************************
+
+#ifndef BOOST_TEST_FLOATING_POINT_COMPARISON_HPP_071894GER
+#define BOOST_TEST_FLOATING_POINT_COMPARISON_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/tools/assertion_result.hpp>
+
+// Boost
+#include <boost/limits.hpp>  // for std::numeric_limits
+#include <boost/static_assert.hpp>
+#include <boost/assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_floating_point.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/conditional.hpp>
+#include <boost/utility/enable_if.hpp>
+
+// STL
+#include <iosfwd>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace math {
+namespace fpc {
+
+// ************************************************************************** //
+// **************              fpc::tolerance_based            ************** //
+// ************************************************************************** //
+
+
+//! @internal
+//! Protects the instanciation of std::numeric_limits from non-supported types (eg. T=array)
+template <typename T, bool enabled>
+struct tolerance_based_delegate;
+
+template <typename T>
+struct tolerance_based_delegate<T, false> : mpl::false_ {};
+
+template <typename T>
+struct tolerance_based_delegate<T, true>
+: mpl::bool_<
+    is_floating_point<T>::value ||
+    (!std::numeric_limits<T>::is_integer && std::numeric_limits<T>::is_specialized && !std::numeric_limits<T>::is_exact)>
+{};
+
+
+/*!@brief Indicates if a type can be compared using a tolerance scheme
+ *
+ * This is a metafunction that should evaluate to @c mpl::true_ if the type
+ * @c T can be compared using a tolerance based method, typically for floating point
+ * types.
+ *
+ * This metafunction can be specialized further to declare user types that are
+ * floating point (eg. boost.multiprecision).
+ */
+template <typename T>
+struct tolerance_based : tolerance_based_delegate<T, !is_array<T>::value >::type {};
+
+// ************************************************************************** //
+// **************                 fpc::strength                ************** //
+// ************************************************************************** //
+
+//! Method for comparing floating point numbers
+enum strength {
+    FPC_STRONG, //!< "Very close"   - equation 2' in docs, the default
+    FPC_WEAK    //!< "Close enough" - equation 3' in docs.
+};
+
+
+// ************************************************************************** //
+// **************         tolerance presentation types         ************** //
+// ************************************************************************** //
+
+template<typename FPT>
+struct percent_tolerance_t {
+    explicit    percent_tolerance_t( FPT v ) : m_value( v ) {}
+
+    FPT m_value;
+};
+
+//____________________________________________________________________________//
+
+template<typename FPT>
+inline std::ostream& operator<<( std::ostream& out, percent_tolerance_t<FPT> t )
+{
+    return out << t.m_value;
+}
+
+//____________________________________________________________________________//
+
+template<typename FPT>
+inline percent_tolerance_t<FPT>
+percent_tolerance( FPT v )
+{
+    return percent_tolerance_t<FPT>( v );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                    details                   ************** //
+// ************************************************************************** //
+
+namespace fpc_detail {
+
+// FPT is Floating-Point Type: float, double, long double or User-Defined.
+template<typename FPT>
+inline FPT
+fpt_abs( FPT fpv ) 
+{
+    return fpv < static_cast<FPT>(0) ? -fpv : fpv;
+}
+
+//____________________________________________________________________________//
+
+template<typename FPT>
+struct fpt_specialized_limits
+{
+  static FPT    min_value() { return (std::numeric_limits<FPT>::min)(); }
+  static FPT    max_value() { return (std::numeric_limits<FPT>::max)(); }
+};
+
+template<typename FPT>
+struct fpt_non_specialized_limits
+{
+  static FPT    min_value() { return static_cast<FPT>(0); }
+  static FPT    max_value() { return static_cast<FPT>(1000000); } // for our purposes it doesn't really matter what value is returned here
+};
+
+template<typename FPT>
+struct fpt_limits : pdalboost::conditional<std::numeric_limits<FPT>::is_specialized,
+                                       fpt_specialized_limits<FPT>,
+                                       fpt_non_specialized_limits<FPT>
+                                      >::type
+{};
+
+//____________________________________________________________________________//
+
+// both f1 and f2 are unsigned here
+template<typename FPT>
+inline FPT
+safe_fpt_division( FPT f1, FPT f2 )
+{
+    // Avoid overflow.
+    if( (f2 < static_cast<FPT>(1))  && (f1 > f2*fpt_limits<FPT>::max_value()) )
+        return fpt_limits<FPT>::max_value();
+
+    // Avoid underflow.
+    if( (f1 == static_cast<FPT>(0)) ||
+        ((f2 > static_cast<FPT>(1)) && (f1 < f2*fpt_limits<FPT>::min_value())) )
+        return static_cast<FPT>(0);
+
+    return f1/f2;
+}
+
+//____________________________________________________________________________//
+
+template<typename FPT, typename ToleranceType>
+inline FPT
+fraction_tolerance( ToleranceType tolerance )
+{
+  return static_cast<FPT>(tolerance);
+} 
+
+//____________________________________________________________________________//
+
+template<typename FPT2, typename FPT>
+inline FPT2
+fraction_tolerance( percent_tolerance_t<FPT> tolerance )
+{
+    return FPT2(tolerance.m_value)*FPT2(0.01); 
+}
+
+//____________________________________________________________________________//
+
+} // namespace fpc_detail
+
+// ************************************************************************** //
+// **************             close_at_tolerance               ************** //
+// ************************************************************************** //
+
+
+/*!@brief Predicate for comparing floating point numbers
+ *
+ * This predicate is used to compare floating point numbers. In addition the comparison produces maximum 
+ * related differnce, which can be used to generate detailed error message
+ * The methods for comparing floating points are detailed in the documentation. The method is chosen
+ * by the @ref pdalboost::math::fpc::strength given at construction.
+ */
+template<typename FPT>
+class close_at_tolerance {
+public:
+    // Public typedefs
+    typedef bool result_type;
+
+    // Constructor
+    template<typename ToleranceType>
+    explicit    close_at_tolerance( ToleranceType tolerance, fpc::strength fpc_strength = FPC_STRONG ) 
+    : m_fraction_tolerance( fpc_detail::fraction_tolerance<FPT>( tolerance ) )
+    , m_strength( fpc_strength )
+    , m_tested_rel_diff( 0 )
+    {
+        BOOST_ASSERT_MSG( m_fraction_tolerance >= FPT(0), "tolerance must not be negative!" ); // no reason for tolerance to be negative
+    }
+
+    // Access methods
+    //! Returns the tolerance
+    FPT                 fraction_tolerance() const  { return m_fraction_tolerance; }
+
+    //! Returns the comparison method
+    fpc::strength       strength() const            { return m_strength; }
+
+    //! Returns the failing fraction
+    FPT                 tested_rel_diff() const     { return m_tested_rel_diff; }
+
+    /*! Compares two floating point numbers a and b such that their "left" relative difference |a-b|/a and/or
+     * "right" relative difference |a-b|/b does not exceed specified relative (fraction) tolerance.
+     *
+     *  @param[in] left first floating point number to be compared
+     *  @param[in] right second floating point number to be compared
+     *
+     * What is reported by @c tested_rel_diff in case of failure depends on the comparison method:
+     * - for @c FPC_STRONG: the max of the two fractions
+     * - for @c FPC_WEAK: the min of the two fractions
+     * The rationale behind is to report the tolerance to set in order to make a test pass.
+     */
+    bool                operator()( FPT left, FPT right ) const
+    {
+        FPT diff              = fpc_detail::fpt_abs<FPT>( left - right );
+        FPT fraction_of_right = fpc_detail::safe_fpt_division( diff, fpc_detail::fpt_abs( right ) );
+        FPT fraction_of_left  = fpc_detail::safe_fpt_division( diff, fpc_detail::fpt_abs( left ) );
+
+        FPT max_rel_diff = (std::max)( fraction_of_left, fraction_of_right );
+        FPT min_rel_diff = (std::min)( fraction_of_left, fraction_of_right );
+
+        m_tested_rel_diff = m_strength == FPC_STRONG ? max_rel_diff : min_rel_diff;
+
+        return m_tested_rel_diff <= m_fraction_tolerance;
+    }
+
+private:
+    // Data members
+    FPT                 m_fraction_tolerance;
+    fpc::strength       m_strength;
+    mutable FPT         m_tested_rel_diff;
+};
+
+// ************************************************************************** //
+// **************            small_with_tolerance              ************** //
+// ************************************************************************** //
+
+
+/*!@brief Predicate for comparing floating point numbers against 0
+ *
+ * Serves the same purpose as pdalboost::math::fpc::close_at_tolerance, but used when one
+ * of the operand is null. 
+ */
+template<typename FPT>
+class small_with_tolerance {
+public:
+    // Public typedefs
+    typedef bool result_type;
+
+    // Constructor
+    explicit    small_with_tolerance( FPT tolerance ) // <= absolute tolerance
+    : m_tolerance( tolerance )
+    {
+        BOOST_ASSERT( m_tolerance >= FPT(0) ); // no reason for the tolerance to be negative
+    }
+
+    // Action method
+    bool        operator()( FPT fpv ) const
+    {
+        return fpc::fpc_detail::fpt_abs( fpv ) <= m_tolerance;
+    }
+
+private:
+    // Data members
+    FPT         m_tolerance;
+};
+
+// ************************************************************************** //
+// **************                  is_small                    ************** //
+// ************************************************************************** //
+
+template<typename FPT>
+inline bool
+is_small( FPT fpv, FPT tolerance )
+{
+    return small_with_tolerance<FPT>( tolerance )( fpv );
+}
+
+//____________________________________________________________________________//
+
+} // namespace fpc
+} // namespace math
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_FLOATING_POINT_COMAPARISON_HPP_071894GER
diff --git a/vendor/pdalboost/boost/test/tools/fpc_op.hpp b/vendor/pdalboost/boost/test/tools/fpc_op.hpp
new file mode 100644
index 0000000..a43b09f
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/fpc_op.hpp
@@ -0,0 +1,224 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief Floating point comparison with enhanced reporting
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_FPC_OP_HPP_050915GER
+#define BOOST_TEST_TOOLS_FPC_OP_HPP_050915GER
+
+// Boost.Test
+#include <boost/test/tools/assertion.hpp>
+
+#include <boost/test/tools/floating_point_comparison.hpp>
+#include <boost/test/tools/fpc_tolerance.hpp>
+
+// Boost
+#include <boost/type_traits/common_type.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+namespace assertion {
+namespace op {
+
+// ************************************************************************** //
+// **************                   fpctraits                  ************** //
+// ************************************************************************** //
+// set of floating point comparison traits per comparison OP
+
+template<typename OP>
+struct fpctraits {
+    static const bool cmp_direct = true;
+};
+
+template <typename Lhs, typename Rhs>
+struct fpctraits<op::NE<Lhs,Rhs> > {
+    static const bool cmp_direct = false;
+};
+
+template <typename Lhs, typename Rhs>
+struct fpctraits<op::LT<Lhs,Rhs> > {
+    static const bool cmp_direct = false;
+};
+
+template <typename Lhs, typename Rhs>
+struct fpctraits<op::GT<Lhs,Rhs> > {
+    static const bool cmp_direct = false;
+};
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// ************** set of overloads to select correct fpc algo  ************** //
+// ************************************************************************** //
+// we really only care about EQ vs NE. All other comparisons use direct first
+// and then need EQ. For example a < b (tolerance t) IFF a < b OR a == b (tolerance t)
+
+template <typename FPT, typename Lhs, typename Rhs, typename OP>
+inline assertion_result
+compare_fpv( Lhs const& lhs, Rhs const& rhs, OP* )
+{
+    fpc::close_at_tolerance<FPT> P( fpc_tolerance<FPT>(), fpc::FPC_STRONG );
+
+    assertion_result ar( P( lhs, rhs ) );
+    if( !ar )
+        ar.message() << "Relative difference exceeds tolerance ["
+                     << P.tested_rel_diff() << " > " << P.fraction_tolerance() << ']';
+    return ar;
+}
+
+//____________________________________________________________________________//
+
+template <typename FPT, typename OP>
+inline assertion_result
+compare_fpv_near_zero( FPT const& fpv, OP* )
+{
+    fpc::small_with_tolerance<FPT> P( fpc_tolerance<FPT>() );
+
+    assertion_result ar( P( fpv ) );
+    if( !ar )
+        ar.message() << "Absolute value exceeds tolerance [|" << fpv << "| > "<< fpc_tolerance<FPT>() << ']';
+
+    return ar;
+}
+
+//____________________________________________________________________________//
+
+template <typename FPT, typename Lhs, typename Rhs>
+inline assertion_result
+compare_fpv( Lhs const& lhs, Rhs const& rhs, op::NE<Lhs,Rhs>* )
+{
+    fpc::close_at_tolerance<FPT> P( fpc_tolerance<FPT>(), fpc::FPC_WEAK );
+
+    assertion_result ar( !P( lhs, rhs ) );
+    if( !ar )
+        ar.message() << "Relative difference is within tolerance ["
+                     << P.tested_rel_diff() << " < " << fpc_tolerance<FPT>() << ']';
+
+    return ar;
+}
+
+//____________________________________________________________________________//
+
+template <typename FPT, typename Lhs, typename Rhs>
+inline assertion_result
+compare_fpv_near_zero( FPT const& fpv, op::NE<Lhs,Rhs>* )
+{
+    fpc::small_with_tolerance<FPT> P( fpc_tolerance<FPT>() );
+
+    assertion_result ar( !P( fpv ) );
+    if( !ar )
+        ar.message() << "Absolute value is within tolerance [|" << fpv << "| < "<< fpc_tolerance<FPT>() << ']';
+    return ar;
+}
+
+//____________________________________________________________________________//
+
+template <typename FPT, typename Lhs, typename Rhs>
+inline assertion_result
+compare_fpv( Lhs const& lhs, Rhs const& rhs, op::LT<Lhs,Rhs>* )
+{
+    return lhs >= rhs ? assertion_result( false ) : compare_fpv<FPT>( lhs, rhs, (op::NE<Lhs,Rhs>*)0 );
+}
+
+template <typename FPT, typename Lhs, typename Rhs>
+inline assertion_result
+compare_fpv_near_zero( FPT const& fpv, op::LT<Lhs,Rhs>* )
+{
+    return fpv >= 0 ? assertion_result( false ) : compare_fpv_near_zero( fpv, (op::NE<Lhs,Rhs>*)0 );
+}
+
+//____________________________________________________________________________//
+
+template <typename FPT, typename Lhs, typename Rhs>
+inline assertion_result
+compare_fpv( Lhs const& lhs, Rhs const& rhs, op::GT<Lhs,Rhs>* )
+{
+    return lhs <= rhs ? assertion_result( false ) : compare_fpv<FPT>( lhs, rhs, (op::NE<Lhs,Rhs>*)0 );
+}
+
+template <typename FPT, typename Lhs, typename Rhs>
+inline assertion_result
+compare_fpv_near_zero( FPT const& fpv, op::GT<Lhs,Rhs>* )
+{
+    return fpv <= 0 ? assertion_result( false ) : compare_fpv_near_zero( fpv, (op::NE<Lhs,Rhs>*)0 );
+}
+
+
+//____________________________________________________________________________//
+
+#define DEFINE_FPV_COMPARISON( oper, name, rev )                        \
+template<typename Lhs,typename Rhs>                                     \
+struct name<Lhs,Rhs,typename pdalboost::enable_if_c<                        \
+    (fpc::tolerance_based<Lhs>::value &&                                \
+     fpc::tolerance_based<Rhs>::value)>::type> {                        \
+public:                                                                 \
+    typedef typename common_type<Lhs,Rhs>::type FPT;                    \
+    typedef name<Lhs,Rhs> OP;                                           \
+                                                                        \
+    typedef assertion_result result_type;                               \
+                                                                        \
+    static bool                                                         \
+    eval_direct( Lhs const& lhs, Rhs const& rhs )                       \
+    {                                                                   \
+        return lhs oper rhs;                                            \
+    }                                                                   \
+                                                                        \
+    static assertion_result                                             \
+    eval( Lhs const& lhs, Rhs const& rhs )                              \
+    {                                                                   \
+        if( lhs == 0 )                                                  \
+            return compare_fpv_near_zero( rhs, (OP*)0 );                \
+                                                                        \
+        if( rhs == 0 )                                                  \
+            return compare_fpv_near_zero( lhs, (OP*)0 );                \
+                                                                        \
+        bool direct_res = eval_direct( lhs, rhs );                      \
+                                                                        \
+        if( (direct_res && fpctraits<OP>::cmp_direct) ||                \
+            fpc_tolerance<FPT>() == FPT(0) )                            \
+            return direct_res;                                          \
+                                                                        \
+        return compare_fpv<FPT>( lhs, rhs, (OP*)0 );                    \
+    }                                                                   \
+                                                                        \
+    template<typename PrevExprType>                                     \
+    static void                                                         \
+    report( std::ostream&       ostr,                                   \
+            PrevExprType const& lhs,                                    \
+            Rhs const&          rhs )                                   \
+    {                                                                   \
+        lhs.report( ostr );                                             \
+        ostr << revert()                                                \
+             << tt_detail::print_helper( rhs );                         \
+    }                                                                   \
+                                                                        \
+    static char const* revert()                                         \
+    { return " " #rev " "; }                                            \
+};                                                                      \
+/**/
+
+BOOST_TEST_FOR_EACH_COMP_OP( DEFINE_FPV_COMPARISON )
+#undef DEFINE_FPV_COMPARISON
+
+//____________________________________________________________________________//
+
+} // namespace op
+} // namespace assertion
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_FPC_OP_HPP_050915GER
+
diff --git a/vendor/pdalboost/boost/test/tools/fpc_tolerance.hpp b/vendor/pdalboost/boost/test/tools/fpc_tolerance.hpp
new file mode 100644
index 0000000..3a80111
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/fpc_tolerance.hpp
@@ -0,0 +1,103 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: 74248 $
+//
+//  Description : FPC tools tolerance holder
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_FPC_TOLERANCE_HPP_121612GER
+#define BOOST_TEST_TOOLS_FPC_TOLERANCE_HPP_121612GER
+
+// Boost Test
+#include <boost/test/tree/decorator.hpp>
+#include <boost/test/tools/floating_point_comparison.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+
+namespace fpc = math::fpc;
+
+// ************************************************************************** //
+// **************     floating point comparison tolerance      ************** //
+// ************************************************************************** //
+
+template<typename FPT>
+inline FPT&
+fpc_tolerance()
+{
+    static FPT s_value = 0;
+    return s_value;
+}
+
+//____________________________________________________________________________//
+
+template<typename FPT>
+struct local_fpc_tolerance {
+    local_fpc_tolerance( FPT fraction_tolerance ) : m_old_tolerance( fpc_tolerance<FPT>() )
+    {
+        fpc_tolerance<FPT>() = fraction_tolerance;
+    }
+
+    ~local_fpc_tolerance()
+    {
+        if( m_old_tolerance != (FPT)-1 )
+            fpc_tolerance<FPT>() = m_old_tolerance;
+    }
+
+private:
+    // Data members
+    FPT         m_old_tolerance;
+};
+
+//____________________________________________________________________________//
+
+} // namespace test_tools
+
+// ************************************************************************** //
+// **************             decorator::tolerance             ************** //
+// ************************************************************************** //
+
+namespace unit_test {
+namespace decorator {
+
+template<typename FPT>
+inline fixture_t
+tolerance( FPT v )
+{
+    return fixture_t( test_unit_fixture_ptr(
+        new unit_test::class_based_fixture<test_tools::local_fpc_tolerance<FPT>,FPT>( v ) ) );
+}
+
+//____________________________________________________________________________//
+
+template<typename FPT>
+inline fixture_t
+tolerance( test_tools::fpc::percent_tolerance_t<FPT> v )
+{
+    return fixture_t( test_unit_fixture_ptr(
+        new unit_test::class_based_fixture<test_tools::local_fpc_tolerance<FPT>,FPT>( pdalboost::math::fpc::fpc_detail::fraction_tolerance<FPT>( v ) ) ) );
+}
+
+//____________________________________________________________________________//
+
+} // namespace decorator
+
+using decorator::tolerance;
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_FPC_TOLERANCE_HPP_121612GER
diff --git a/vendor/pdalboost/boost/test/tools/interface.hpp b/vendor/pdalboost/boost/test/tools/interface.hpp
new file mode 100644
index 0000000..e0c00d7
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/interface.hpp
@@ -0,0 +1,376 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: 81247 $
+//
+//  Description : contains definition for all test tools in test toolbox
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_INTERFACE_HPP_111712GER
+#define BOOST_TEST_TOOLS_INTERFACE_HPP_111712GER
+
+// Boost.Test
+#include <boost/test/unit_test_log.hpp>
+#ifdef BOOST_TEST_TOOLS_DEBUGGABLE
+#include <boost/test/debug.hpp>
+#endif
+#ifdef BOOST_NO_CXX11_AUTO_DECLARATIONS
+#include <boost/test/tools/detail/expression_holder.hpp>
+#endif
+
+#include <boost/test/detail/pp_variadic.hpp>
+
+#ifdef BOOST_TEST_NO_OLD_TOOLS
+#include <boost/preprocessor/seq/to_tuple.hpp>
+
+#include <iterator>
+#endif // BOOST_TEST_NO_OLD_TOOLS
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               BOOST_TEST_<level>             ************** //
+// ************************************************************************** //
+
+#ifdef BOOST_NO_CXX11_AUTO_DECLARATIONS
+#define BOOST_TEST_BUILD_ASSERTION( P )                         \
+    ::pdalboost::test_tools::tt_detail::expression_holder const& E= \
+    ::pdalboost::test_tools::tt_detail::hold_expression(            \
+        ::pdalboost::test_tools::assertion::seed() ->* P )          \
+/**/
+#else
+#define BOOST_TEST_BUILD_ASSERTION( P )                         \
+    auto const& E = ::pdalboost::test_tools::assertion::seed()->*P  \
+/**/
+#endif
+
+//____________________________________________________________________________//
+
+// Implementation based on direct predicate evaluation
+#define BOOST_TEST_TOOL_DIRECT_IMPL( P, level, M )              \
+do {                                                            \
+    ::pdalboost::test_tools::assertion_result res = (P);            \
+    report_assertion(                                           \
+        res,                                                    \
+        BOOST_TEST_LAZY_MSG( M ),                               \
+        BOOST_TEST_L(__FILE__),                                 \
+        static_cast<std::size_t>(__LINE__),                     \
+        ::pdalboost::test_tools::tt_detail::level,                  \
+        ::pdalboost::test_tools::tt_detail::CHECK_MSG,              \
+        0 );                                                    \
+} while( ::pdalboost::test_tools::tt_detail::dummy_cond() )         \
+/**/
+
+//____________________________________________________________________________//
+
+// Implementation based on expression template construction
+#define BOOST_TEST_TOOL_ET_IMPL( P, level )                     \
+do {                                                            \
+    BOOST_TEST_PASSPOINT();                                     \
+    BOOST_TEST_BUILD_ASSERTION( P );                            \
+    ::pdalboost::test_tools::tt_detail::                            \
+    report_assertion(                                           \
+      E.evaluate(),                                             \
+      BOOST_TEST_LAZY_MSG( BOOST_TEST_STRINGIZE( P ) ),         \
+      BOOST_TEST_L(__FILE__),                                   \
+      static_cast<std::size_t>(__LINE__),                       \
+      ::pdalboost::test_tools::tt_detail::level,                    \
+      ::pdalboost::test_tools::tt_detail::CHECK_BUILT_ASSERTION,    \
+      0 );                                                      \
+} while( ::pdalboost::test_tools::tt_detail::dummy_cond() )         \
+/**/
+
+//____________________________________________________________________________//
+
+// Implementation based on expression template construction with extra tool arguments
+#define BOOST_TEST_TOOL_ET_IMPL_EX( P, level, arg )             \
+do {                                                            \
+    BOOST_TEST_PASSPOINT();                                     \
+    BOOST_TEST_BUILD_ASSERTION( P );                            \
+    ::pdalboost::test_tools::tt_detail::                            \
+    report_assertion(                                           \
+      ::pdalboost::test_tools::tt_detail::assertion_evaluate(E)     \
+          << arg,                                               \
+      ::pdalboost::test_tools::tt_detail::assertion_text(           \
+          BOOST_TEST_LAZY_MSG( BOOST_TEST_STRINGIZE(P) ),       \
+          BOOST_TEST_LAZY_MSG( arg ) ),                         \
+      BOOST_TEST_L(__FILE__),                                   \
+      static_cast<std::size_t>(__LINE__),                       \
+      ::pdalboost::test_tools::tt_detail::level,                    \
+      ::pdalboost::test_tools::tt_detail::assertion_type()          \
+          << arg,                                               \
+      0 );                                                      \
+} while( ::pdalboost::test_tools::tt_detail::dummy_cond() )         \
+/**/
+
+//____________________________________________________________________________//
+
+#ifdef BOOST_TEST_TOOLS_UNDER_DEBUGGER
+
+#define BOOST_TEST_TOOL_UNIV( level, P )                                    \
+    BOOST_TEST_TOOL_DIRECT_IMPL( P, level, BOOST_TEST_STRINGIZE( P ) )      \
+/**/
+
+#define BOOST_TEST_TOOL_UNIV_EX( level, P, ... )                            \
+    BOOST_TEST_TOOL_UNIV( level, P )                                        \
+/**/
+
+#elif defined(BOOST_TEST_TOOLS_DEBUGGABLE)
+
+#define BOOST_TEST_TOOL_UNIV( level, P )                                    \
+do {                                                                        \
+    if( ::pdalboost::debug::under_debugger() )                                  \
+        BOOST_TEST_TOOL_DIRECT_IMPL( P, level, BOOST_TEST_STRINGIZE( P ) ); \
+    else                                                                    \
+        BOOST_TEST_TOOL_ET_IMPL( P, level );                                \
+} while( ::pdalboost::test_tools::tt_detail::dummy_cond() )                     \
+/**/
+
+#define BOOST_TEST_TOOL_UNIV_EX( level, P, ... )                            \
+    BOOST_TEST_TOOL_UNIV( level, P )                                        \
+/**/
+
+#else
+
+#define BOOST_TEST_TOOL_UNIV( level, P )                                    \
+    BOOST_TEST_TOOL_ET_IMPL( P, level )                                     \
+/**/
+
+#define BOOST_TEST_TOOL_UNIV_EX( level, P, ... )                            \
+    BOOST_TEST_TOOL_ET_IMPL_EX( P, level, __VA_ARGS__ )                     \
+/**/
+
+#endif
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_WARN( ... )              BOOST_TEST_INVOKE_IF_N_ARGS(    \
+    2, BOOST_TEST_TOOL_UNIV, BOOST_TEST_TOOL_UNIV_EX, WARN, __VA_ARGS__ )   \
+/**/
+#define BOOST_TEST_CHECK( ... )             BOOST_TEST_INVOKE_IF_N_ARGS(    \
+    2, BOOST_TEST_TOOL_UNIV, BOOST_TEST_TOOL_UNIV_EX, CHECK, __VA_ARGS__ )  \
+/**/
+#define BOOST_TEST_REQUIRE( ... )           BOOST_TEST_INVOKE_IF_N_ARGS(    \
+    2, BOOST_TEST_TOOL_UNIV, BOOST_TEST_TOOL_UNIV_EX, REQUIRE, __VA_ARGS__ )\
+/**/
+
+#define BOOST_TEST( ... )                   BOOST_TEST_INVOKE_IF_N_ARGS(    \
+    2, BOOST_TEST_TOOL_UNIV, BOOST_TEST_TOOL_UNIV_EX, CHECK, __VA_ARGS__ )  \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_ERROR( M )               BOOST_CHECK_MESSAGE( false, M )
+#define BOOST_TEST_FAIL( M )                BOOST_REQUIRE_MESSAGE( false, M )
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_IS_DEFINED( symb ) ::pdalboost::test_tools::tt_detail::is_defined_impl( symb, BOOST_STRINGIZE(= symb) )
+
+//____________________________________________________________________________//
+
+#ifdef BOOST_TEST_NO_OLD_TOOLS
+
+#ifdef BOOST_TEST_TOOLS_UNDER_DEBUGGER
+
+#define BOOST_CHECK_THROW_IMPL(S, E, TL, Ppassed, Mpassed, Pcaught, Mcaught)\
+do { try {                                                                  \
+    S;                                                                      \
+    BOOST_TEST_TOOL_DIRECT_IMPL( Ppassed, TL, Mpassed );                    \
+} catch( E ) {                                                              \
+    BOOST_TEST_TOOL_DIRECT_IMPL( Pcaught, TL, Mcaught );                    \
+}} while( ::pdalboost::test_tools::tt_detail::dummy_cond() )                    \
+/**/
+
+#elif defined(BOOST_TEST_TOOLS_DEBUGGABLE)
+
+#define BOOST_CHECK_THROW_IMPL(S, E, TL, Ppassed, Mpassed, Pcaught, Mcaught)\
+do { try {                                                                  \
+    if( ::pdalboost::debug::under_debugger() )                                  \
+        BOOST_TEST_PASSPOINT();                                             \
+    S;                                                                      \
+    BOOST_TEST_TOOL_DIRECT_IMPL( Ppassed, TL, Mpassed );                    \
+} catch( E ) {                                                              \
+    BOOST_TEST_TOOL_DIRECT_IMPL( Pcaught, TL, Mcaught );                    \
+}} while( ::pdalboost::test_tools::tt_detail::dummy_cond() )                    \
+/**/
+
+#else
+
+#define BOOST_CHECK_THROW_IMPL(S, E, TL, Ppassed, Mpassed, Pcaught, Mcaught)\
+do { try {                                                                  \
+    BOOST_TEST_PASSPOINT();                                                 \
+    S;                                                                      \
+    BOOST_TEST_TOOL_DIRECT_IMPL( Ppassed, TL, Mpassed );                    \
+} catch( E ) {                                                              \
+    BOOST_TEST_TOOL_DIRECT_IMPL( Pcaught, TL, Mcaught );                    \
+}} while( ::pdalboost::test_tools::tt_detail::dummy_cond() )                    \
+/**/
+
+#endif
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_THROW( S, E )                                            \
+    BOOST_CHECK_THROW_IMPL(S, E const&, WARN,                               \
+            false, "exception " BOOST_STRINGIZE(E) " is expected",          \
+            true , "exception " BOOST_STRINGIZE(E) " is caught" )           \
+/**/
+#define BOOST_CHECK_THROW( S, E )                                           \
+    BOOST_CHECK_THROW_IMPL(S, E const&, CHECK,                              \
+            false, "exception " BOOST_STRINGIZE(E) " is expected",          \
+            true , "exception " BOOST_STRINGIZE(E) " is caught" )           \
+/**/
+#define BOOST_REQUIRE_THROW( S, E )                                         \
+    BOOST_CHECK_THROW_IMPL(S, E const&, REQUIRE,                            \
+            false, "exception " BOOST_STRINGIZE(E) " is expected",          \
+            true , "exception " BOOST_STRINGIZE(E) " is caught" )           \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_EXCEPTION( S, E, P )                                     \
+    BOOST_CHECK_THROW_IMPL(S, E const& ex, WARN,                            \
+            false, "exception " BOOST_STRINGIZE(E) " is expected",          \
+            P(ex), "incorrect exception " BOOST_STRINGIZE(E) " is caught" ) \
+/**/
+#define BOOST_CHECK_EXCEPTION( S, E, P )                                    \
+    BOOST_CHECK_THROW_IMPL(S, E const& ex, CHECK,                           \
+            false, "exception " BOOST_STRINGIZE(E) " is expected",          \
+            P(ex), "incorrect exception " BOOST_STRINGIZE(E) " is caught" ) \
+/**/
+#define BOOST_REQUIRE_EXCEPTION( S, E, P )                                  \
+    BOOST_CHECK_THROW_IMPL(S, E const& ex, REQUIRE,                         \
+            false, "exception " BOOST_STRINGIZE(E) " is expected",          \
+            P(ex), "incorrect exception " BOOST_STRINGIZE(E) " is caught" ) \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_NO_THROW( S )                                            \
+    BOOST_CHECK_THROW_IMPL(S, ..., WARN,                                    \
+            true , "no exceptions thrown by " BOOST_STRINGIZE( S ),         \
+            false, "exception thrown by " BOOST_STRINGIZE( S ) )            \
+/**/
+#define BOOST_CHECK_NO_THROW( S )                                           \
+    BOOST_CHECK_THROW_IMPL(S, ..., CHECK,                                   \
+            true , "no exceptions thrown by " BOOST_STRINGIZE( S ),         \
+            false, "exception thrown by " BOOST_STRINGIZE( S ) )            \
+/**/
+#define BOOST_REQUIRE_NO_THROW( S )                                         \
+    BOOST_CHECK_THROW_IMPL(S, ..., REQUIRE,                                 \
+            true , "no exceptions thrown by " BOOST_STRINGIZE( S ),         \
+            false, "exception thrown by " BOOST_STRINGIZE( S ) )            \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_MESSAGE( P, M )          BOOST_TEST_TOOL_DIRECT_IMPL( P, WARN, M )
+#define BOOST_CHECK_MESSAGE( P, M )         BOOST_TEST_TOOL_DIRECT_IMPL( P, CHECK, M )
+#define BOOST_REQUIRE_MESSAGE( P, M )       BOOST_TEST_TOOL_DIRECT_IMPL( P, REQUIRE, M )
+
+//____________________________________________________________________________//
+
+////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////   DEPRECATED TOOLS   /////////////////////////////
+
+#define BOOST_WARN( P )                     BOOST_TEST_WARN( P )
+#define BOOST_CHECK( P )                    BOOST_TEST_CHECK( P )
+#define BOOST_REQUIRE( P )                  BOOST_TEST_REQUIRE( P )
+
+//____________________________________________________________________________//
+
+#define BOOST_ERROR( M )                    BOOST_TEST_ERROR( M )
+#define BOOST_FAIL( M )                     BOOST_TEST_FAIL( M )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_EQUAL( L, R )            BOOST_TEST_WARN( L == R )
+#define BOOST_CHECK_EQUAL( L, R )           BOOST_TEST_CHECK( L == R )
+#define BOOST_REQUIRE_EQUAL( L, R )         BOOST_TEST_REQUIRE( L == R )
+
+#define BOOST_WARN_NE( L, R )               BOOST_TEST_WARN( L != R )
+#define BOOST_CHECK_NE( L, R )              BOOST_TEST_CHECK( L != R )
+#define BOOST_REQUIRE_NE( L, R )            BOOST_TEST_REQUIRE( L != R )
+
+#define BOOST_WARN_LT( L, R )               BOOST_TEST_WARN( L < R )
+#define BOOST_CHECK_LT( L, R )              BOOST_TEST_CHECK( L < R )
+#define BOOST_REQUIRE_LT( L, R )            BOOST_TEST_REQUIRE( L < R )
+
+#define BOOST_WARN_LE( L, R )               BOOST_TEST_WARN( L <= R )
+#define BOOST_CHECK_LE( L, R )              BOOST_TEST_CHECK( L <= R )
+#define BOOST_REQUIRE_LE( L, R )            BOOST_TEST_REQUIRE( L <= R )
+
+#define BOOST_WARN_GT( L, R )               BOOST_TEST_WARN( L > R )
+#define BOOST_CHECK_GT( L, R )              BOOST_TEST_CHECK( L > R )
+#define BOOST_REQUIRE_GT( L, R )            BOOST_TEST_REQUIRE( L > R )
+
+#define BOOST_WARN_GE( L, R )               BOOST_TEST_WARN( L >= R )
+#define BOOST_CHECK_GE( L, R )              BOOST_TEST_CHECK( L >= R )
+#define BOOST_REQUIRE_GE( L, R )            BOOST_TEST_REQUIRE( L >= R )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_CLOSE( L, R, T )         BOOST_TEST_WARN( L == R, T % ::pdalboost::test_tools::tolerance() )
+#define BOOST_CHECK_CLOSE( L, R, T )        BOOST_TEST_CHECK( L == R, T % ::pdalboost::test_tools::tolerance() )
+#define BOOST_REQUIRE_CLOSE( L, R, T )      BOOST_TEST_REQUIRE( L == R, T % ::pdalboost::test_tools::tolerance() )
+
+#define BOOST_WARN_CLOSE_FRACTION(L, R, T)  BOOST_TEST_WARN( L == R, ::pdalboost::test_tools::tolerance( T ) )
+#define BOOST_CHECK_CLOSE_FRACTION(L, R, T) BOOST_TEST_CHECK( L == R, ::pdalboost::test_tools::tolerance( T ) )
+#define BOOST_REQUIRE_CLOSE_FRACTION(L,R,T) BOOST_TEST_REQUIRE( L == R, ::pdalboost::test_tools::tolerance( T ) )
+
+#define BOOST_WARN_SMALL( FPV, T )          BOOST_TEST_WARN( FPV == 0., ::pdalboost::test_tools::tolerance( T ) )
+#define BOOST_CHECK_SMALL( FPV, T )         BOOST_TEST_CHECK( FPV == 0., ::pdalboost::test_tools::tolerance( T ) )
+#define BOOST_REQUIRE_SMALL( FPV, T )       BOOST_TEST_REQUIRE( FPV == 0., ::pdalboost::test_tools::tolerance( T ) )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_EQUAL_COLLECTIONS( L_begin, L_end, R_begin, R_end )              \
+    BOOST_TEST_WARN( ::pdalboost::test_tools::tt_detail::make_it_pair(L_begin, L_end) ==\
+                     ::pdalboost::test_tools::tt_detail::make_it_pair(R_begin, R_end),  \
+                     ::pdalboost::test_tools::per_element() )                           \
+/**/
+
+#define BOOST_CHECK_EQUAL_COLLECTIONS( L_begin, L_end, R_begin, R_end )              \
+    BOOST_TEST_CHECK( ::pdalboost::test_tools::tt_detail::make_it_pair(L_begin, L_end) ==\
+                      ::pdalboost::test_tools::tt_detail::make_it_pair(R_begin, R_end),  \
+                      ::pdalboost::test_tools::per_element() )                           \
+/**/
+
+#define BOOST_REQUIRE_EQUAL_COLLECTIONS( L_begin, L_end, R_begin, R_end )              \
+    BOOST_TEST_REQUIRE( ::pdalboost::test_tools::tt_detail::make_it_pair(L_begin, L_end) ==\
+                        ::pdalboost::test_tools::tt_detail::make_it_pair(R_begin, R_end),  \
+                        ::pdalboost::test_tools::per_element() )                           \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_BITWISE_EQUAL( L, R )    BOOST_TEST_WARN( L == R, ::pdalboost::test_tools::bitwise() )
+#define BOOST_CHECK_BITWISE_EQUAL( L, R )   BOOST_TEST_CHECK( L == R, ::pdalboost::test_tools::bitwise() )
+#define BOOST_REQUIRE_BITWISE_EQUAL( L, R ) BOOST_TEST_REQUIRE( L == R, ::pdalboost::test_tools::bitwise() )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_PREDICATE( P, ARGS )     BOOST_TEST_WARN( P BOOST_PP_SEQ_TO_TUPLE(ARGS) )
+#define BOOST_CHECK_PREDICATE( P, ARGS )    BOOST_TEST_CHECK( P BOOST_PP_SEQ_TO_TUPLE(ARGS) )
+#define BOOST_REQUIRE_PREDICATE( P, ARGS )  BOOST_TEST_REQUIRE( P BOOST_PP_SEQ_TO_TUPLE(ARGS) )
+
+//____________________________________________________________________________//
+
+#define BOOST_IS_DEFINED( symb ) ::pdalboost::test_tools::tt_detail::is_defined_impl( #symb, BOOST_STRINGIZE(= symb) )
+
+//____________________________________________________________________________//
+
+#endif // BOOST_TEST_NO_OLD_TOOLS
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_INTERFACE_HPP_111712GER
diff --git a/vendor/pdalboost/boost/test/tools/old/impl.hpp b/vendor/pdalboost/boost/test/tools/old/impl.hpp
new file mode 100644
index 0000000..8aa110f
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/old/impl.hpp
@@ -0,0 +1,358 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: 74248 $
+//
+//  Description : implementation details for old toolbox
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_OLD_IMPL_HPP_012705GER
+#define BOOST_TEST_TOOLS_OLD_IMPL_HPP_012705GER
+
+// Boost.Test
+#include <boost/test/unit_test_log.hpp>
+#include <boost/test/tools/assertion_result.hpp>
+#include <boost/test/tools/floating_point_comparison.hpp>
+
+#include <boost/test/tools/detail/fwd.hpp>
+#include <boost/test/tools/detail/print_helper.hpp>
+
+// Boost
+#include <boost/limits.hpp>
+#include <boost/numeric/conversion/conversion_traits.hpp> // for numeric::conversion_traits
+#include <boost/type_traits/is_array.hpp>
+
+#include <boost/preprocessor/repetition/repeat.hpp>
+#include <boost/preprocessor/arithmetic/add.hpp>
+
+// STL
+#include <cstddef>          // for std::size_t
+#include <climits>          // for CHAR_BIT
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace test_tools {
+namespace tt_detail {
+
+// ************************************************************************** //
+// **************          old TOOLBOX Implementation          ************** //
+// ************************************************************************** //
+
+// This function adds level of indirection, but it makes sure we evaluate predicate
+// arguments only once
+
+#ifndef BOOST_TEST_PROD
+#define TEMPL_PARAMS( z, m, dummy ) , typename BOOST_JOIN( Arg, m )
+
+#define FUNC_PARAMS( z, m, dummy )                                                  \
+ , BOOST_JOIN( Arg, m ) const& BOOST_JOIN( arg, m )                                 \
+ , char const* BOOST_JOIN( BOOST_JOIN( arg, m ), _descr )                           \
+/**/
+
+#define PRED_PARAMS( z, m, dummy ) BOOST_PP_COMMA_IF( m ) BOOST_JOIN( arg, m )
+
+#define ARG_INFO( z, m, dummy )                                                     \
+ , BOOST_JOIN( BOOST_JOIN( arg, m ), _descr )                                       \
+ , &static_cast<const unit_test::lazy_ostream&>(unit_test::lazy_ostream::instance() \
+        << ::pdalboost::test_tools::tt_detail::print_helper( BOOST_JOIN( arg, m ) ))    \
+/**/
+
+#define IMPL_FRWD( z, n, dummy )                                                    \
+template<typename Pred                                                              \
+         BOOST_PP_REPEAT_ ## z( BOOST_PP_ADD( n, 1 ), TEMPL_PARAMS, _ )>            \
+inline bool                                                                         \
+check_frwd( Pred P, unit_test::lazy_ostream const& assertion_descr,                 \
+            const_string file_name, std::size_t line_num,                           \
+            tool_level tl, check_type ct                                            \
+            BOOST_PP_REPEAT_ ## z( BOOST_PP_ADD( n, 1 ), FUNC_PARAMS, _ )           \
+)                                                                                   \
+{                                                                                   \
+    return                                                                          \
+    report_assertion( P( BOOST_PP_REPEAT_ ## z(BOOST_PP_ADD(n, 1), PRED_PARAMS,_) ),\
+                assertion_descr, file_name, line_num, tl, ct,                       \
+                BOOST_PP_ADD( n, 1 )                                                \
+                BOOST_PP_REPEAT_ ## z( BOOST_PP_ADD( n, 1 ), ARG_INFO, _ )          \
+    );                                                                              \
+}                                                                                   \
+/**/
+
+#ifndef BOOST_TEST_MAX_PREDICATE_ARITY
+#define BOOST_TEST_MAX_PREDICATE_ARITY 5
+#endif
+
+BOOST_PP_REPEAT( BOOST_TEST_MAX_PREDICATE_ARITY, IMPL_FRWD, _ )
+
+#undef TEMPL_PARAMS
+#undef FUNC_PARAMS
+#undef PRED_INFO
+#undef ARG_INFO
+#undef IMPL_FRWD
+
+#endif
+
+//____________________________________________________________________________//
+
+template <class Left, class Right>
+inline assertion_result equal_impl( Left const& left, Right const& right )
+{
+    return left == right;
+}
+
+//____________________________________________________________________________//
+
+inline assertion_result equal_impl( char* left, char const* right ) { return equal_impl( static_cast<char const*>(left), static_cast<char const*>(right) ); }
+inline assertion_result equal_impl( char const* left, char* right ) { return equal_impl( static_cast<char const*>(left), static_cast<char const*>(right) ); }
+inline assertion_result equal_impl( char* left, char* right )       { return equal_impl( static_cast<char const*>(left), static_cast<char const*>(right) ); }
+
+#if !defined( BOOST_NO_CWCHAR )
+assertion_result        BOOST_TEST_DECL equal_impl( wchar_t const* left, wchar_t const* right );
+inline assertion_result equal_impl( wchar_t* left, wchar_t const* right ) { return equal_impl( static_cast<wchar_t const*>(left), static_cast<wchar_t const*>(right) ); }
+inline assertion_result equal_impl( wchar_t const* left, wchar_t* right ) { return equal_impl( static_cast<wchar_t const*>(left), static_cast<wchar_t const*>(right) ); }
+inline assertion_result equal_impl( wchar_t* left, wchar_t* right )       { return equal_impl( static_cast<wchar_t const*>(left), static_cast<wchar_t const*>(right) ); }
+#endif
+
+//____________________________________________________________________________//
+
+struct equal_impl_frwd {
+    template <typename Left, typename Right>
+    inline assertion_result
+    call_impl( Left const& left, Right const& right, mpl::false_ ) const
+    {
+        return equal_impl( left, right );
+    }
+
+    template <typename Left, typename Right>
+    inline assertion_result
+    call_impl( Left const& left, Right const& right, mpl::true_ ) const
+    {
+        return (*this)( right, &left[0] );
+    }
+
+    template <typename Left, typename Right>
+    inline assertion_result
+    operator()( Left const& left, Right const& right ) const
+    {
+        typedef typename is_array<Left>::type left_is_array;
+        return call_impl( left, right, left_is_array() );
+    }
+};
+
+//____________________________________________________________________________//
+
+struct ne_impl {
+    template <class Left, class Right>
+    assertion_result operator()( Left const& left, Right const& right )
+    {
+        return !equal_impl_frwd()( left, right );
+    }
+};
+
+//____________________________________________________________________________//
+
+struct lt_impl {
+    template <class Left, class Right>
+    assertion_result operator()( Left const& left, Right const& right )
+    {
+        return left < right;
+    }
+};
+
+//____________________________________________________________________________//
+
+struct le_impl {
+    template <class Left, class Right>
+    assertion_result operator()( Left const& left, Right const& right )
+    {
+        return left <= right;
+    }
+};
+
+//____________________________________________________________________________//
+
+struct gt_impl {
+    template <class Left, class Right>
+    assertion_result operator()( Left const& left, Right const& right )
+    {
+        return left > right;
+    }
+};
+
+//____________________________________________________________________________//
+
+struct ge_impl {
+    template <class Left, class Right>
+    assertion_result operator()( Left const& left, Right const& right )
+    {
+        return left >= right;
+    }
+};
+
+//____________________________________________________________________________//
+
+struct equal_coll_impl {
+    template <typename Left, typename Right>
+    assertion_result operator()( Left left_begin, Left left_end, Right right_begin, Right right_end )
+    {
+        assertion_result    pr( true );
+        std::size_t         pos = 0;
+
+        for( ; left_begin != left_end && right_begin != right_end; ++left_begin, ++right_begin, ++pos ) {
+            if( *left_begin != *right_begin ) {
+                pr = false;
+                pr.message() << "\nMismatch at position " << pos << ": "
+                  << ::pdalboost::test_tools::tt_detail::print_helper(*left_begin)
+                  << " != "
+                  << ::pdalboost::test_tools::tt_detail::print_helper(*right_begin);
+            }
+        }
+
+        if( left_begin != left_end ) {
+            std::size_t r_size = pos;
+            while( left_begin != left_end ) {
+                ++pos;
+                ++left_begin;
+            }
+
+            pr = false;
+            pr.message() << "\nCollections size mismatch: " << pos << " != " << r_size;
+        }
+
+        if( right_begin != right_end ) {
+            std::size_t l_size = pos;
+            while( right_begin != right_end ) {
+                ++pos;
+                ++right_begin;
+            }
+
+            pr = false;
+            pr.message() << "\nCollections size mismatch: " << l_size << " != " << pos;
+        }
+
+        return pr;
+    }
+};
+
+//____________________________________________________________________________//
+
+struct bitwise_equal_impl {
+    template <class Left, class Right>
+    assertion_result    operator()( Left const& left, Right const& right )
+    {
+        assertion_result    pr( true );
+
+        std::size_t left_bit_size  = sizeof(Left)*CHAR_BIT;
+        std::size_t right_bit_size = sizeof(Right)*CHAR_BIT;
+
+        static Left const leftOne( 1 );
+        static Right const rightOne( 1 );
+
+        std::size_t total_bits = left_bit_size < right_bit_size ? left_bit_size : right_bit_size;
+
+        for( std::size_t counter = 0; counter < total_bits; ++counter ) {
+            if( ( left & ( leftOne << counter ) ) != ( right & ( rightOne << counter ) ) ) {
+                pr = false;
+                pr.message() << "\nMismatch at position " << counter;
+            }
+        }
+
+        if( left_bit_size != right_bit_size ) {
+            pr = false;
+            pr.message() << "\nOperands bit sizes mismatch: " << left_bit_size << " != " << right_bit_size;
+        }
+
+        return pr;
+    }
+};
+
+//____________________________________________________________________________//
+
+template<typename FPT1, typename FPT2>
+struct comp_supertype {
+    // deduce "better" type from types of arguments being compared
+    // if one type is floating and the second integral we use floating type and
+    // value of integral type is promoted to the floating. The same for float and double
+    // But we don't want to compare two values of integral types using this tool.
+    typedef typename numeric::conversion_traits<FPT1,FPT2>::supertype type;
+    BOOST_STATIC_ASSERT_MSG( !is_integral<type>::value, "Only floating-point types can be compared!");
+};
+
+} // namespace tt_detail
+
+namespace fpc = math::fpc;
+
+// ************************************************************************** //
+// **************               check_is_close                 ************** //
+// ************************************************************************** //
+
+struct BOOST_TEST_DECL check_is_close_t {
+    // Public typedefs
+    typedef assertion_result result_type;
+
+    template<typename FPT1, typename FPT2, typename ToleranceType>
+    assertion_result
+    operator()( FPT1 left, FPT2 right, ToleranceType tolerance ) const
+    {
+        fpc::close_at_tolerance<typename tt_detail::comp_supertype<FPT1,FPT2>::type> pred( tolerance, fpc::FPC_STRONG );
+
+        assertion_result ar( pred( left, right ) );
+
+        if( !ar )
+            ar.message() << pred.tested_rel_diff();
+
+        return ar;
+    }
+};
+
+//____________________________________________________________________________//
+
+template<typename FPT1, typename FPT2, typename ToleranceType>
+inline assertion_result
+check_is_close( FPT1 left, FPT2 right, ToleranceType tolerance )
+{
+    return check_is_close_t()( left, right, tolerance );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               check_is_small                 ************** //
+// ************************************************************************** //
+
+struct BOOST_TEST_DECL check_is_small_t {
+    // Public typedefs
+    typedef bool result_type;
+
+    template<typename FPT>
+    bool
+    operator()( FPT fpv, FPT tolerance ) const
+    {
+        return fpc::is_small( fpv, tolerance );
+    }
+};
+
+//____________________________________________________________________________//
+
+template<typename FPT>
+inline bool
+check_is_small( FPT fpv, FPT tolerance )
+{
+    return fpc::is_small( fpv, tolerance );
+}
+
+//____________________________________________________________________________//
+
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_OLD_IMPL_HPP_012705GER
diff --git a/vendor/pdalboost/boost/test/tools/old/interface.hpp b/vendor/pdalboost/boost/test/tools/old/interface.hpp
new file mode 100644
index 0000000..41b284e
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/old/interface.hpp
@@ -0,0 +1,282 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: 81247 $
+//
+//  Description : contains definition for all test tools in old test toolbox
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TOOLS_OLD_INTERFACE_HPP_111712GER
+#define BOOST_TEST_TOOLS_OLD_INTERFACE_HPP_111712GER
+
+// Boost
+#include <boost/preprocessor/seq/for_each.hpp>
+#include <boost/preprocessor/seq/size.hpp>
+#include <boost/preprocessor/seq/to_tuple.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                    TOOL BOX                  ************** //
+// ************************************************************************** //
+
+// In macros below following argument abbreviations are used:
+// P - predicate
+// M - message
+// S - statement
+// E - exception
+// L - left argument
+// R - right argument
+// TL - tool level
+// CT - check type
+// ARGS - arguments list (as PP sequence)
+
+// frwd_type:
+// 0 - args exists and need to be forwarded; call check_frwd
+// 1 - args exists, but do not need to be forwarded; call report_assertion directly
+// 2 - no arguments; call report_assertion directly
+
+#define BOOST_TEST_TOOL_PASS_PRED0( P, ARGS ) P
+#define BOOST_TEST_TOOL_PASS_PRED1( P, ARGS ) P BOOST_PP_SEQ_TO_TUPLE(ARGS)
+#define BOOST_TEST_TOOL_PASS_PRED2( P, ARGS ) P
+
+#define BOOST_TEST_TOOL_PASS_ARG( r, _, arg ) , arg, BOOST_STRINGIZE( arg )
+#define BOOST_TEST_TOOL_PASS_ARG_DSCR( r, _, arg ) , BOOST_STRINGIZE( arg )
+
+#define BOOST_TEST_TOOL_PASS_ARGS0( ARGS ) \
+    BOOST_PP_SEQ_FOR_EACH( BOOST_TEST_TOOL_PASS_ARG, _, ARGS )
+#define BOOST_TEST_TOOL_PASS_ARGS1( ARGS ) \
+    , BOOST_PP_SEQ_SIZE(ARGS) BOOST_PP_SEQ_FOR_EACH( BOOST_TEST_TOOL_PASS_ARG_DSCR, _, ARGS )
+#define BOOST_TEST_TOOL_PASS_ARGS2( ARGS ) \
+    , 0
+
+#define BOOST_TEST_TOOL_IMPL( frwd_type, P, assertion_descr, TL, CT, ARGS )     \
+do {                                                                            \
+    BOOST_TEST_PASSPOINT();                                                     \
+    ::pdalboost::test_tools::tt_detail::                                            \
+    BOOST_PP_IF( frwd_type, report_assertion, check_frwd ) (                    \
+        BOOST_JOIN( BOOST_TEST_TOOL_PASS_PRED, frwd_type )( P, ARGS ),          \
+        BOOST_TEST_LAZY_MSG( assertion_descr ),                                 \
+        BOOST_TEST_L(__FILE__),                                                 \
+        static_cast<std::size_t>(__LINE__),                                     \
+        ::pdalboost::test_tools::tt_detail::TL,                                     \
+        ::pdalboost::test_tools::tt_detail::CT                                      \
+        BOOST_JOIN( BOOST_TEST_TOOL_PASS_ARGS, frwd_type )( ARGS ) );           \
+} while( ::pdalboost::test_tools::tt_detail::dummy_cond() )                         \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN( P )                     BOOST_TEST_TOOL_IMPL( 2, \
+    (P), BOOST_TEST_STRINGIZE( P ), WARN, CHECK_PRED, _ )
+#define BOOST_CHECK( P )                    BOOST_TEST_TOOL_IMPL( 2, \
+    (P), BOOST_TEST_STRINGIZE( P ), CHECK, CHECK_PRED, _ )
+#define BOOST_REQUIRE( P )                  BOOST_TEST_TOOL_IMPL( 2, \
+    (P), BOOST_TEST_STRINGIZE( P ), REQUIRE, CHECK_PRED, _ )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_MESSAGE( P, M )          BOOST_TEST_TOOL_IMPL( 2, (P), M, WARN, CHECK_MSG, _ )
+#define BOOST_CHECK_MESSAGE( P, M )         BOOST_TEST_TOOL_IMPL( 2, (P), M, CHECK, CHECK_MSG, _ )
+#define BOOST_REQUIRE_MESSAGE( P, M )       BOOST_TEST_TOOL_IMPL( 2, (P), M, REQUIRE, CHECK_MSG, _ )
+
+//____________________________________________________________________________//
+
+#define BOOST_ERROR( M )                    BOOST_CHECK_MESSAGE( false, M )
+#define BOOST_FAIL( M )                     BOOST_REQUIRE_MESSAGE( false, M )
+
+//____________________________________________________________________________//
+
+#define BOOST_CHECK_THROW_IMPL( S, E, P, postfix, TL )                                   \
+do {                                                                                    \
+    try {                                                                               \
+        BOOST_TEST_PASSPOINT();                                                         \
+        S;                                                                              \
+        BOOST_TEST_TOOL_IMPL( 2, false, "exception " BOOST_STRINGIZE(E) " expected but not raised", \
+                              TL, CHECK_MSG, _ );                                       \
+    } catch( E const& ex ) {                                                            \
+        ::pdalboost::unit_test::ut_detail::ignore_unused_variable_warning( ex );            \
+        BOOST_TEST_TOOL_IMPL( 2, P, \
+                              "exception \"" BOOST_STRINGIZE( E )"\" raised as expected" postfix,           \
+                              TL, CHECK_MSG, _  );                                      \
+    }                                                                                   \
+} while( ::pdalboost::test_tools::tt_detail::dummy_cond() )                                 \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_THROW( S, E )            BOOST_CHECK_THROW_IMPL( S, E, true, "", WARN )
+#define BOOST_CHECK_THROW( S, E )           BOOST_CHECK_THROW_IMPL( S, E, true, "", CHECK )
+#define BOOST_REQUIRE_THROW( S, E )         BOOST_CHECK_THROW_IMPL( S, E, true, "", REQUIRE )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_EXCEPTION( S, E, P )     BOOST_CHECK_THROW_IMPL( S, E, P( ex ), \
+              ": validation on the raised exception through predicate \"" BOOST_STRINGIZE(P) "\"", WARN )
+#define BOOST_CHECK_EXCEPTION( S, E, P )    BOOST_CHECK_THROW_IMPL( S, E, P( ex ), \
+              ": validation on the raised exception through predicate \"" BOOST_STRINGIZE(P) "\"", CHECK )
+#define BOOST_REQUIRE_EXCEPTION( S, E, P )  BOOST_CHECK_THROW_IMPL( S, E, P( ex ), \
+              ": validation on the raised exception through predicate \"" BOOST_STRINGIZE(P) "\"", REQUIRE )
+
+//____________________________________________________________________________//
+
+#define BOOST_CHECK_NO_THROW_IMPL( S, TL )                                              \
+do {                                                                                    \
+    try {                                                                               \
+        S;                                                                              \
+        BOOST_TEST_TOOL_IMPL( 2, true, "no exceptions thrown by " BOOST_STRINGIZE( S ), \
+                              TL, CHECK_MSG, _ );                                       \
+    } catch( ... ) {                                                                    \
+        BOOST_TEST_TOOL_IMPL( 2, false, "unexpected exception thrown by " BOOST_STRINGIZE( S ),    \
+                              TL, CHECK_MSG, _ );                                       \
+    }                                                                                   \
+} while( ::pdalboost::test_tools::tt_detail::dummy_cond() )                                 \
+/**/
+
+#define BOOST_WARN_NO_THROW( S )            BOOST_CHECK_NO_THROW_IMPL( S, WARN )
+#define BOOST_CHECK_NO_THROW( S )           BOOST_CHECK_NO_THROW_IMPL( S, CHECK )
+#define BOOST_REQUIRE_NO_THROW( S )         BOOST_CHECK_NO_THROW_IMPL( S, REQUIRE )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_EQUAL( L, R )            BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::equal_impl_frwd(), "", WARN, CHECK_EQUAL, (L)(R) )
+#define BOOST_CHECK_EQUAL( L, R )           BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::equal_impl_frwd(), "", CHECK, CHECK_EQUAL, (L)(R) )
+#define BOOST_REQUIRE_EQUAL( L, R )         BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::equal_impl_frwd(), "", REQUIRE, CHECK_EQUAL, (L)(R) )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_NE( L, R )               BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::ne_impl(), "", WARN, CHECK_NE, (L)(R) )
+#define BOOST_CHECK_NE( L, R )              BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::ne_impl(), "", CHECK, CHECK_NE, (L)(R) )
+#define BOOST_REQUIRE_NE( L, R )            BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::ne_impl(), "", REQUIRE, CHECK_NE, (L)(R) )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_LT( L, R )               BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::lt_impl(), "", WARN, CHECK_LT, (L)(R) )
+#define BOOST_CHECK_LT( L, R )              BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::lt_impl(), "", CHECK, CHECK_LT, (L)(R) )
+#define BOOST_REQUIRE_LT( L, R )            BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::lt_impl(), "", REQUIRE, CHECK_LT, (L)(R) )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_LE( L, R )               BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::le_impl(), "", WARN, CHECK_LE, (L)(R) )
+#define BOOST_CHECK_LE( L, R )              BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::le_impl(), "", CHECK, CHECK_LE, (L)(R) )
+#define BOOST_REQUIRE_LE( L, R )            BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::le_impl(), "", REQUIRE, CHECK_LE, (L)(R) )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_GT( L, R )               BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::gt_impl(), "", WARN, CHECK_GT, (L)(R) )
+#define BOOST_CHECK_GT( L, R )              BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::gt_impl(), "", CHECK, CHECK_GT, (L)(R) )
+#define BOOST_REQUIRE_GT( L, R )            BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::gt_impl(), "", REQUIRE, CHECK_GT, (L)(R) )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_GE( L, R )               BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::ge_impl(), "", WARN, CHECK_GE, (L)(R) )
+#define BOOST_CHECK_GE( L, R )              BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::ge_impl(), "", CHECK, CHECK_GE, (L)(R) )
+#define BOOST_REQUIRE_GE( L, R )            BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::tt_detail::ge_impl(), "", REQUIRE, CHECK_GE, (L)(R) )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_CLOSE( L, R, T )         BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::check_is_close_t(), "", WARN, CHECK_CLOSE, (L)(R)(::pdalboost::math::fpc::percent_tolerance(T)) )
+#define BOOST_CHECK_CLOSE( L, R, T )        BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::check_is_close_t(), "", CHECK, CHECK_CLOSE, (L)(R)(::pdalboost::math::fpc::percent_tolerance(T)) )
+#define BOOST_REQUIRE_CLOSE( L, R, T )      BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::check_is_close_t(), "", REQUIRE, CHECK_CLOSE, (L)(R)(::pdalboost::math::fpc::percent_tolerance(T)) )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_CLOSE_FRACTION(L, R, T)  BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::check_is_close_t(), "", WARN, CHECK_CLOSE_FRACTION, (L)(R)(T) )
+#define BOOST_CHECK_CLOSE_FRACTION(L, R, T) BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::check_is_close_t(), "", CHECK, CHECK_CLOSE_FRACTION, (L)(R)(T) )
+#define BOOST_REQUIRE_CLOSE_FRACTION(L,R,T) BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::check_is_close_t(), "", REQUIRE, CHECK_CLOSE_FRACTION, (L)(R)(T) )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_SMALL( FPV, T )          BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::check_is_small_t(), "", WARN, CHECK_SMALL, (FPV)(T) )
+#define BOOST_CHECK_SMALL( FPV, T )         BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::check_is_small_t(), "", CHECK, CHECK_SMALL, (FPV)(T) )
+#define BOOST_REQUIRE_SMALL( FPV, T )       BOOST_TEST_TOOL_IMPL( 0, \
+    ::pdalboost::test_tools::check_is_small_t(), "", REQUIRE, CHECK_SMALL, (FPV)(T) )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_PREDICATE( P, ARGS )     BOOST_TEST_TOOL_IMPL( 0, \
+    P, BOOST_TEST_STRINGIZE( P ), WARN, CHECK_PRED_WITH_ARGS, ARGS )
+#define BOOST_CHECK_PREDICATE( P, ARGS )    BOOST_TEST_TOOL_IMPL( 0, \
+    P, BOOST_TEST_STRINGIZE( P ), CHECK, CHECK_PRED_WITH_ARGS, ARGS )
+#define BOOST_REQUIRE_PREDICATE( P, ARGS )  BOOST_TEST_TOOL_IMPL( 0, \
+    P, BOOST_TEST_STRINGIZE( P ), REQUIRE, CHECK_PRED_WITH_ARGS, ARGS )
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_EQUAL_COLLECTIONS( L_begin, L_end, R_begin, R_end )                  \
+    BOOST_TEST_TOOL_IMPL( 1, ::pdalboost::test_tools::tt_detail::equal_coll_impl(),         \
+        "", WARN, CHECK_EQUAL_COLL, (L_begin)(L_end)(R_begin)(R_end) )                  \
+/**/
+#define BOOST_CHECK_EQUAL_COLLECTIONS( L_begin, L_end, R_begin, R_end )                 \
+    BOOST_TEST_TOOL_IMPL( 1, ::pdalboost::test_tools::tt_detail::equal_coll_impl(),         \
+        "", CHECK, CHECK_EQUAL_COLL, (L_begin)(L_end)(R_begin)(R_end) )                 \
+/**/
+#define BOOST_REQUIRE_EQUAL_COLLECTIONS( L_begin, L_end, R_begin, R_end )               \
+    BOOST_TEST_TOOL_IMPL( 1, ::pdalboost::test_tools::tt_detail::equal_coll_impl(),         \
+        "", REQUIRE, CHECK_EQUAL_COLL, (L_begin)(L_end)(R_begin)(R_end) )               \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_WARN_BITWISE_EQUAL( L, R )    BOOST_TEST_TOOL_IMPL( 1, \
+    ::pdalboost::test_tools::tt_detail::bitwise_equal_impl(), "", WARN, CHECK_BITWISE_EQUAL, (L)(R) )
+#define BOOST_CHECK_BITWISE_EQUAL( L, R )   BOOST_TEST_TOOL_IMPL( 1, \
+    ::pdalboost::test_tools::tt_detail::bitwise_equal_impl(), "", CHECK, CHECK_BITWISE_EQUAL, (L)(R) )
+#define BOOST_REQUIRE_BITWISE_EQUAL( L, R ) BOOST_TEST_TOOL_IMPL( 1, \
+    ::pdalboost::test_tools::tt_detail::bitwise_equal_impl(), "", REQUIRE, CHECK_BITWISE_EQUAL, (L)(R) )
+
+//____________________________________________________________________________//
+
+#define BOOST_IS_DEFINED( symb ) ::pdalboost::test_tools::tt_detail::is_defined_impl( #symb, BOOST_STRINGIZE(= symb) )
+
+//____________________________________________________________________________//
+
+#ifdef BOOST_TEST_NO_NEW_TOOLS
+
+#define BOOST_TEST_WARN( P )                BOOST_WARN( P )
+#define BOOST_TEST_CHECK( P )               BOOST_CHECK( P )
+#define BOOST_TEST_REQUIRE( P )             BOOST_REQUIRE( P )
+
+#define BOOST_TEST( P )                     BOOST_CHECK( P )
+
+#endif
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TOOLS_OLD_INTERFACE_HPP_111712GER
diff --git a/vendor/pdalboost/boost/test/tools/output_test_stream.hpp b/vendor/pdalboost/boost/test/tools/output_test_stream.hpp
new file mode 100644
index 0000000..d0c8fa8
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tools/output_test_stream.hpp
@@ -0,0 +1,96 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// @brief output_test_stream class definition
+// ***************************************************************************
+
+#ifndef BOOST_TEST_OUTPUT_TEST_STREAM_HPP_012705GER
+#define BOOST_TEST_OUTPUT_TEST_STREAM_HPP_012705GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/utils/wrap_stringstream.hpp>
+#include <boost/test/tools/assertion_result.hpp>
+
+// STL
+#include <cstddef>          // for std::size_t
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************               output_test_stream             ************** //
+// ************************************************************************** //
+
+
+
+namespace pdalboost {
+namespace test_tools {
+
+//! Class to be used to simplify testing of ostream-based output operations
+class BOOST_TEST_DECL output_test_stream : public wrap_stringstream::wrapped_stream {
+    typedef unit_test::const_string const_string;
+public:
+    //! Constructor
+    //!
+    //!@param[in] pattern_file_name indicates the name of the file for matching. If the 
+    //!           string is empty, the standard input or output streams are used instead
+    //!           (depending on match_or_save)
+    //!@param[in] match_or_save if true, the pattern file will be read, otherwise it will be 
+    //!           written
+    //!@param[in] text_or_binary if false, opens the stream in binary mode. Otherwise the stream
+    //!           is opened with default flags and the carriage returns are ignored.
+    explicit        output_test_stream( const_string    pattern_file_name = const_string(),
+                                        bool            match_or_save     = true,
+                                        bool            text_or_binary    = true );
+
+    // Destructor
+    ~output_test_stream();
+
+    //! Checks if the stream is empty
+    //!
+    //!@param[in] flush_stream if true, flushes the stream after the call
+    assertion_result    is_empty( bool flush_stream = true );
+    
+    //! Checks the length of the stream
+    //!
+    //!@param[in] length target length
+    //!@param[in] flush_stream if true, flushes the stream after the call. Set to false to call
+    //!           additional checks on the same content.
+    assertion_result    check_length( std::size_t length, bool flush_stream = true );
+    
+    //! Checks the content of the stream against a string
+    //!
+    //!@param[in] arg_ the target stream
+    //!@param[in] flush_stream if true, flushes the stream after the call.
+    assertion_result    is_equal( const_string arg_, bool flush_stream = true );
+
+    //! Checks the content of the stream against a pattern file
+    //!
+    //!@param[in] flush_stream if true, flushes the stream after the call.
+    assertion_result    match_pattern( bool flush_stream = true );
+
+    //! Flushes the stream
+    void            flush();
+
+private:
+    // helper functions
+    std::size_t     length();
+    void            sync();
+
+    struct Impl;
+    Impl*           m_pimpl;
+};
+
+} // namespace test_tools
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_OUTPUT_TEST_STREAM_HPP_012705GER
diff --git a/vendor/pdalboost/boost/test/tree/auto_registration.hpp b/vendor/pdalboost/boost/test/tree/auto_registration.hpp
new file mode 100644
index 0000000..9c6ccb0
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tree/auto_registration.hpp
@@ -0,0 +1,53 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: 74640 $
+//
+//  Description : defines auto_test_unit_registrar
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TREE_AUTO_REGISTRATION_HPP_100211GER
+#define BOOST_TEST_TREE_AUTO_REGISTRATION_HPP_100211GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/tree/decorator.hpp>
+#include <boost/test/tree/test_unit.hpp>
+
+// STL
+#include <list>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace ut_detail {
+
+// ************************************************************************** //
+// **************           auto_test_unit_registrar           ************** //
+// ************************************************************************** //
+
+struct BOOST_TEST_DECL auto_test_unit_registrar {
+    // Constructors
+                auto_test_unit_registrar( test_case* tc, decorator::collector& decorators, counter_t exp_fail = 0 );
+    explicit    auto_test_unit_registrar( const_string ts_name, const_string ts_file, std::size_t ts_line, decorator::collector& decorators );
+    explicit    auto_test_unit_registrar( test_unit_generator const& tc_gen, decorator::collector& decorators );
+    explicit    auto_test_unit_registrar( int );
+};
+
+} // namespace ut_detail
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TREE_AUTO_REGISTRATION_HPP_100211GER
+
diff --git a/vendor/pdalboost/boost/test/tree/decorator.hpp b/vendor/pdalboost/boost/test/tree/decorator.hpp
new file mode 100644
index 0000000..958cc81
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tree/decorator.hpp
@@ -0,0 +1,277 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: 62016 $
+//
+//  Description : defines decorators to be using with auto registered test units
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TREE_DECORATOR_HPP_091911GER
+#define BOOST_TEST_TREE_DECORATOR_HPP_091911GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/detail/global_typedef.hpp>
+
+#include <boost/test/tree/fixture.hpp>
+
+#include <boost/test/tools/assertion_result.hpp>
+
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+#include <boost/test/utils/trivial_singleton.hpp>
+
+// Boost
+#include <boost/shared_ptr.hpp>
+#include <boost/function/function0.hpp>
+#include <boost/function/function1.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+// STL
+#include <vector>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+class test_unit;
+
+namespace decorator {
+
+// ************************************************************************** //
+// **************             decorator::collector             ************** //
+// ************************************************************************** //
+
+class base;
+typedef pdalboost::shared_ptr<base> base_ptr;
+
+class BOOST_TEST_DECL collector : public singleton<collector> {
+public:
+    collector&              operator*( base const& d );
+
+    void                    store_in( test_unit& tu );
+
+    void                    reset();
+
+private:
+    BOOST_TEST_SINGLETON_CONS( collector )
+
+    // Data members
+    std::vector<base_ptr>   m_tu_decorators;
+};
+
+// ************************************************************************** //
+// **************               decorator::base                ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL base {
+public:
+    // composition interface
+    collector&              operator*() const;
+
+    // application interface
+    virtual void            apply( test_unit& tu ) = 0;
+
+    // deep cloning interface
+    virtual base_ptr        clone() const = 0;
+
+protected:
+    virtual ~base() {}
+};
+
+// ************************************************************************** //
+// **************               decorator::label               ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL label : public decorator::base {
+public:
+    explicit                label( const_string l ) : m_label( l ) {}
+
+private:
+    // decorator::base interface
+    virtual void            apply( test_unit& tu );
+    virtual base_ptr        clone() const { return base_ptr(new label( m_label )); }
+
+    // Data members
+    const_string            m_label;
+};
+
+// ************************************************************************** //
+// **************         decorator::expected_failures         ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL expected_failures : public decorator::base {
+public:
+    explicit                expected_failures( counter_t ef ) : m_exp_fail( ef ) {}
+
+private:
+    // decorator::base interface
+    virtual void            apply( test_unit& tu );
+    virtual base_ptr        clone() const { return base_ptr(new expected_failures( m_exp_fail )); }
+
+    // Data members
+    counter_t               m_exp_fail;
+};
+
+// ************************************************************************** //
+// **************              decorator::timeout              ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL timeout : public decorator::base {
+public:
+    explicit                timeout( unsigned t ) : m_timeout( t ) {}
+
+private:
+    // decorator::base interface
+    virtual void            apply( test_unit& tu );
+    virtual base_ptr        clone() const { return base_ptr(new timeout( m_timeout )); }
+
+    // Data members
+    unsigned                m_timeout;
+};
+
+// ************************************************************************** //
+// **************            decorator::description            ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL description : public decorator::base {
+public:
+    explicit                description( const_string descr ) : m_description( descr ) {}
+
+private:
+    // decorator::base interface
+    virtual void            apply( test_unit& tu );
+    virtual base_ptr        clone() const { return base_ptr(new description( m_description )); }
+
+    // Data members
+    const_string            m_description;
+};
+
+// ************************************************************************** //
+// **************            decorator::depends_on             ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL depends_on : public decorator::base {
+public:
+    explicit                depends_on( const_string dependency ) : m_dependency( dependency ) {}
+
+private:
+    // decorator::base interface
+    virtual void            apply( test_unit& tu );
+    virtual base_ptr        clone() const { return base_ptr(new depends_on( m_dependency )); }
+
+    // Data members
+    const_string            m_dependency;
+};
+
+// ************************************************************************** //
+// **************    decorator::enable_if/enabled/disabled     ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL enable_if_impl : public decorator::base {
+protected:
+    void                    apply_impl( test_unit& tu, bool condition );
+};
+
+template<bool condition>
+class enable_if : public enable_if_impl {
+private:
+    // decorator::base interface
+    virtual void            apply( test_unit& tu )   { this->apply_impl( tu, condition ); }
+    virtual base_ptr        clone() const            { return base_ptr(new enable_if<condition>()); }
+};
+
+typedef enable_if<true> enabled;
+typedef enable_if<false> disabled;
+
+// ************************************************************************** //
+// **************              decorator::fixture              ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL fixture_t : public decorator::base {
+public:
+    // Constructor
+    explicit                fixture_t( test_unit_fixture_ptr impl ) : m_impl( impl ) {}
+
+private:
+    // decorator::base interface
+    virtual void            apply( test_unit& tu );
+    virtual base_ptr        clone() const { return base_ptr(new fixture_t( m_impl )); }
+
+    // Data members
+    test_unit_fixture_ptr m_impl;
+};
+
+//____________________________________________________________________________//
+
+template<typename F>
+inline fixture_t
+fixture()
+{
+    return fixture_t( test_unit_fixture_ptr( new unit_test::class_based_fixture<F>() ) );
+}
+
+//____________________________________________________________________________//
+
+template<typename F, typename Arg>
+inline fixture_t
+fixture( Arg const& arg )
+{
+    return fixture_t( test_unit_fixture_ptr( new unit_test::class_based_fixture<F,Arg>( arg ) ) );
+}
+
+//____________________________________________________________________________//
+
+inline fixture_t
+fixture( pdalboost::function<void()> const& setup, pdalboost::function<void()> const& teardown = pdalboost::function<void()>() )
+{
+    return fixture_t( test_unit_fixture_ptr( new unit_test::function_based_fixture( setup, teardown ) ) );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************            decorator::depends_on             ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL precondition : public decorator::base {
+public:
+    typedef pdalboost::function<test_tools::assertion_result (test_unit_id)>   predicate_t;
+
+    explicit                precondition( predicate_t p ) : m_precondition( p ) {}
+
+private:
+    // decorator::base interface
+    virtual void            apply( test_unit& tu );
+    virtual base_ptr        clone() const { return base_ptr(new precondition( m_precondition )); }
+
+    // Data members
+    predicate_t             m_precondition;
+};
+
+} // namespace decorator
+
+using decorator::label;
+using decorator::expected_failures;
+using decorator::timeout;
+using decorator::description;
+using decorator::depends_on;
+using decorator::enable_if;
+using decorator::enabled;
+using decorator::disabled;
+using decorator::fixture;
+using decorator::precondition;
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TREE_DECORATOR_HPP_091911GER
diff --git a/vendor/pdalboost/boost/test/tree/fixture.hpp b/vendor/pdalboost/boost/test/tree/fixture.hpp
new file mode 100644
index 0000000..4f6b0f7
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tree/fixture.hpp
@@ -0,0 +1,116 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: 74640 $
+//
+//  Description : defines fixture interface and object makers
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TREE_FIXTURE_HPP_100311GER
+#define BOOST_TEST_TREE_FIXTURE_HPP_100311GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+// Boost
+#include <boost/shared_ptr.hpp>
+#include <boost/scoped_ptr.hpp>
+#include <boost/function/function0.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************               test_unit_fixture              ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL test_unit_fixture {
+public:
+    virtual ~test_unit_fixture() {}
+
+    // Fixture interface
+    virtual void    setup() = 0;
+    virtual void    teardown() = 0;
+};
+
+typedef shared_ptr<test_unit_fixture> test_unit_fixture_ptr;
+
+// ************************************************************************** //
+// **************              class_based_fixture             ************** //
+// ************************************************************************** //
+
+template<typename F, typename Arg=void>
+class class_based_fixture : public test_unit_fixture {
+public:
+    // Constructor
+    explicit class_based_fixture( Arg const& arg ) : m_inst(), m_arg( arg ) {}
+
+private:
+    // Fixture interface
+    virtual void    setup()         { m_inst.reset( new F( m_arg ) ); }
+    virtual void    teardown()      { m_inst.reset(); }
+
+    // Data members
+    scoped_ptr<F>   m_inst;
+    Arg             m_arg;
+};
+
+//____________________________________________________________________________//
+
+template<typename F>
+class class_based_fixture<F,void> : public test_unit_fixture {
+public:
+    // Constructor
+    class_based_fixture() : m_inst( 0 ) {}
+
+private:
+    // Fixture interface
+    virtual void    setup()         { m_inst.reset( new F ); }
+    virtual void    teardown()      { m_inst.reset(); }
+
+    // Data members
+    scoped_ptr<F>   m_inst;
+};
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************            function_based_fixture            ************** //
+// ************************************************************************** //
+
+class function_based_fixture : public test_unit_fixture {
+public:
+    // Constructor
+    function_based_fixture( pdalboost::function<void ()> const& setup_, pdalboost::function<void ()> const& teardown_ )
+    : m_setup( setup_ )
+    , m_teardown( teardown_ )
+    {
+    }
+
+private:
+    // Fixture interface
+    virtual void                setup()     { if( m_setup ) m_setup(); }
+    virtual void                teardown()  { if( m_teardown ) m_teardown(); }
+
+    // Data members
+    pdalboost::function<void ()>    m_setup;
+    pdalboost::function<void ()>    m_teardown;
+};
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TREE_FIXTURE_HPP_100311GER
+
diff --git a/vendor/pdalboost/boost/test/tree/global_fixture.hpp b/vendor/pdalboost/boost/test/tree/global_fixture.hpp
new file mode 100644
index 0000000..ca8e31b
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tree/global_fixture.hpp
@@ -0,0 +1,68 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: 74640 $
+//
+//  Description : defines global_fixture
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TREE_GLOBAL_FIXTURE_HPP_091911GER
+#define BOOST_TEST_TREE_GLOBAL_FIXTURE_HPP_091911GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/detail/global_typedef.hpp>
+
+#include <boost/test/tree/observer.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************                global_fixture                ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL global_fixture : public test_observer {
+public:
+    // Constructor
+    global_fixture();
+};
+
+//____________________________________________________________________________//
+
+namespace ut_detail {
+
+template<typename F>
+struct global_fixture_impl : public global_fixture {
+    // Constructor
+    global_fixture_impl() : m_fixture( 0 )    {}
+
+    // test observer interface
+    virtual void    test_start( counter_t ) { m_fixture = new F; }
+    virtual void    test_finish()           { delete m_fixture; m_fixture = 0; }
+    virtual void    test_aborted()          { delete m_fixture; m_fixture = 0; }
+
+private:
+    // Data members
+    F*  m_fixture;
+};
+
+} // namespace ut_detail
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TREE_GLOBAL_FIXTURE_HPP_091911GER
+
diff --git a/vendor/pdalboost/boost/test/tree/observer.hpp b/vendor/pdalboost/boost/test/tree/observer.hpp
new file mode 100644
index 0000000..81d36d6
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tree/observer.hpp
@@ -0,0 +1,70 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief defines abstract interface for test observer
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TEST_OBSERVER_HPP_021005GER
+#define BOOST_TEST_TEST_OBSERVER_HPP_021005GER
+
+// Boost.Test
+#include <boost/test/detail/fwd_decl.hpp>
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/config.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************                 test_observer                ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL test_observer {
+public:
+    // test observer interface
+    virtual void    test_start( counter_t /* test_cases_amount */ ) {}
+    virtual void    test_finish() {}
+    virtual void    test_aborted() {}
+
+    virtual void    test_unit_start( test_unit const& ) {}
+    virtual void    test_unit_finish( test_unit const&, unsigned long /* elapsed */ ) {}
+    virtual void    test_unit_skipped( test_unit const& tu, const_string ) { test_unit_skipped( tu ); }
+    virtual void    test_unit_skipped( test_unit const& ) {} ///< backward compatibility
+    virtual void    test_unit_aborted( test_unit const& ) {}
+
+    virtual void    assertion_result( unit_test::assertion_result ar )
+    {
+        switch( ar ) {
+        case AR_PASSED: assertion_result( true ); break;
+        case AR_FAILED: assertion_result( false ); break;
+        case AR_TRIGGERED: break;
+        default: break;
+        }
+    }
+    virtual void    exception_caught( execution_exception const& ) {}
+
+    virtual int     priority() { return 0; }
+
+protected:
+    // depracated now
+    virtual void    assertion_result( bool /* passed */ ) {}
+
+    BOOST_TEST_PROTECTED_VIRTUAL ~test_observer() {}
+};
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TEST_OBSERVER_HPP_021005GER
+
diff --git a/vendor/pdalboost/boost/test/tree/test_case_counter.hpp b/vendor/pdalboost/boost/test/tree/test_case_counter.hpp
new file mode 100644
index 0000000..350ea06
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tree/test_case_counter.hpp
@@ -0,0 +1,54 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: 74640 $
+//
+//  Description : defines test_case_counter
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TREE_TEST_CASE_COUNTER_HPP_100211GER
+#define BOOST_TEST_TREE_TEST_CASE_COUNTER_HPP_100211GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/utils/class_properties.hpp>
+
+#include <boost/test/tree/test_unit.hpp>
+#include <boost/test/tree/visitor.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************                test_case_counter             ************** //
+// ************************************************************************** //
+
+class test_case_counter : public test_tree_visitor {
+public:
+    // Constructor
+    test_case_counter() : p_count( 0 ) {}
+
+    BOOST_READONLY_PROPERTY( counter_t, (test_case_counter)) p_count;
+private:
+    // test tree visitor interface
+    virtual void    visit( test_case const& tc )                { if( tc.is_enabled() ) ++p_count.value; }
+    virtual bool    test_suite_start( test_suite const& ts )    { return ts.is_enabled(); }
+};
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TREE_TEST_CASE_COUNTER_HPP_100211GER
+
diff --git a/vendor/pdalboost/boost/test/tree/test_case_template.hpp b/vendor/pdalboost/boost/test/tree/test_case_template.hpp
new file mode 100644
index 0000000..3a00a93
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tree/test_case_template.hpp
@@ -0,0 +1,144 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: -1 $
+//
+//  Description : defines template_test_case_gen
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TREE_TEST_CASE_TEMPLATE_HPP_091911GER
+#define BOOST_TEST_TREE_TEST_CASE_TEMPLATE_HPP_091911GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+#include <boost/test/detail/workaround.hpp>
+
+#include <boost/test/utils/class_properties.hpp>
+
+#include <boost/test/tree/observer.hpp>
+
+
+// Boost
+#include <boost/shared_ptr.hpp>
+#include <boost/mpl/for_each.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/type.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/function/function0.hpp>
+
+#ifndef BOOST_NO_RTTI
+#include <typeinfo> // for typeid
+#else
+#include <boost/current_function.hpp>
+#endif
+
+// STL
+#include <string>   // for std::string
+#include <list>     // for std::list
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace ut_detail {
+
+// ************************************************************************** //
+// **************          test_case_template_invoker          ************** //
+// ************************************************************************** //
+
+template<typename TestCaseTemplate,typename TestType>
+class test_case_template_invoker {
+public:
+    void    operator()()    { TestCaseTemplate::run( (pdalboost::type<TestType>*)0 ); }
+};
+
+// ************************************************************************** //
+// **************           generate_test_case_4_type          ************** //
+// ************************************************************************** //
+
+template<typename Generator,typename TestCaseTemplate>
+struct generate_test_case_4_type {
+    explicit    generate_test_case_4_type( const_string tc_name, const_string tc_file, std::size_t tc_line, Generator& G )
+    : m_test_case_name( tc_name )
+    , m_test_case_file( tc_file )
+    , m_test_case_line( tc_line )
+    , m_holder( G )
+    {}
+
+    template<typename TestType>
+    void        operator()( mpl::identity<TestType> )
+    {
+        std::string full_name;
+        assign_op( full_name, m_test_case_name, 0 );
+        full_name += '<';
+#ifndef BOOST_NO_RTTI
+         full_name += typeid(TestType).name();
+#else
+        full_name += BOOST_CURRENT_FUNCTION;
+#endif
+        if( pdalboost::is_const<TestType>::value )
+            full_name += "_const";
+        full_name += '>';
+
+        m_holder.m_test_cases.push_back( new test_case( ut_detail::normalize_test_case_name( full_name ),
+                                                        m_test_case_file,
+                                                        m_test_case_line,
+                                                        test_case_template_invoker<TestCaseTemplate,TestType>() ) );
+    }
+
+private:
+    // Data members
+    const_string    m_test_case_name;
+    const_string    m_test_case_file;
+    std::size_t     m_test_case_line;
+    Generator&      m_holder;
+};
+
+// ************************************************************************** //
+// **************              test_case_template              ************** //
+// ************************************************************************** //
+
+template<typename TestCaseTemplate,typename TestTypesList>
+class template_test_case_gen : public test_unit_generator {
+public:
+    // Constructor
+    template_test_case_gen( const_string tc_name, const_string tc_file, std::size_t tc_line )
+    {
+        typedef generate_test_case_4_type<template_test_case_gen<TestCaseTemplate,TestTypesList>,TestCaseTemplate> single_test_gen;
+
+        mpl::for_each<TestTypesList,mpl::make_identity<mpl::_> >( single_test_gen( tc_name, tc_file, tc_line, *this ) );
+    }
+
+    virtual test_unit* next() const
+    {
+        if( m_test_cases.empty() )
+            return 0;
+
+        test_unit* res = m_test_cases.front();
+        m_test_cases.pop_front();
+
+        return res;
+    }
+
+    // Data members
+    mutable std::list<test_unit*> m_test_cases;
+};
+
+} // namespace ut_detail
+} // unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TREE_TEST_CASE_TEMPLATE_HPP_091911GER
diff --git a/vendor/pdalboost/boost/test/tree/test_unit.hpp b/vendor/pdalboost/boost/test/tree/test_unit.hpp
new file mode 100644
index 0000000..676af30
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tree/test_unit.hpp
@@ -0,0 +1,275 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// Defines @ref pdalboost::unit_test::test_unit "test_unit", @ref pdalboost::unit_test::test_case "test_case",
+/// @ref pdalboost::unit_test::test_suite "test_suite" and @ref pdalboost::unit_test::master_test_suite_t "master_test_suite_t"
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TREE_TEST_UNIT_HPP_100211GER
+#define BOOST_TEST_TREE_TEST_UNIT_HPP_100211GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+
+#include <boost/test/tree/decorator.hpp>
+#include <boost/test/tree/fixture.hpp>
+
+#include <boost/test/tools/assertion_result.hpp>
+
+#include <boost/test/utils/class_properties.hpp>
+
+// Boost
+#include <boost/function/function0.hpp>
+#include <boost/function/function1.hpp>
+
+// STL
+#include <vector>
+#include <string>
+#include <map>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+namespace framework {
+class state;
+}
+
+// ************************************************************************** //
+// **************                   test_unit                  ************** //
+// ************************************************************************** //
+
+typedef std::vector<test_unit_id> test_unit_id_list;
+
+class BOOST_TEST_DECL test_unit {
+public:
+    enum { type = TUT_ANY };
+    enum run_status { RS_DISABLED, RS_ENABLED, RS_INHERIT, RS_INVALID };
+
+    typedef std::vector<test_unit_id>                                       id_list;
+    typedef std::vector<test_unit_fixture_ptr>                              fixture_list_t;
+    typedef BOOST_READONLY_PROPERTY(test_unit_id,(framework::state))        id_t;
+    typedef BOOST_READONLY_PROPERTY(test_unit_id,(test_suite))              parent_id_t;
+    typedef BOOST_READONLY_PROPERTY(id_list,(test_unit))                    id_list_t;
+    typedef std::vector<decorator::base_ptr>                                decor_list_t;
+    typedef BOOST_READONLY_PROPERTY(std::vector<std::string>,(test_unit))   label_list_t;
+
+    typedef pdalboost::function<test_tools::assertion_result (test_unit_id)>    precondition_t;
+    typedef BOOST_READONLY_PROPERTY(std::vector<precondition_t>,(test_unit)) precond_list_t;
+
+    // preconditions management
+    void                                depends_on( test_unit* tu );
+    void                                add_precondition( precondition_t const& );
+    test_tools::assertion_result        check_preconditions() const;
+
+    // labels management
+    void                                add_label( const_string l );
+    bool                                has_label( const_string l ) const;
+
+    // helper access methods
+    void                                increase_exp_fail( counter_t num );
+    bool                                is_enabled() const    { return p_run_status == RS_ENABLED; }
+    std::string                         full_name() const;
+
+    // Public r/o properties
+    test_unit_type const                p_type;                 ///< type for this test unit
+    const_string const                  p_type_name;            ///< "case"/"suite"/"module"
+    const_string const                  p_file_name;
+    std::size_t const                   p_line_num;
+    id_t                                p_id;                   ///< unique id for this test unit
+    parent_id_t                         p_parent_id;            ///< parent test suite id
+    label_list_t                        p_labels;               ///< list of labels associated with this test unit
+
+    id_list_t                           p_dependencies;         ///< list of test units this one depends on
+    precond_list_t                      p_preconditions;        ///< user supplied preconditions for this test unit;
+
+    // Public r/w properties
+    readwrite_property<std::string>     p_name;                 ///< name for this test unit
+    readwrite_property<std::string>     p_description;          ///< description for this test unit
+    readwrite_property<unsigned>        p_timeout;              ///< timeout for the test unit execution in seconds
+    readwrite_property<counter_t>       p_expected_failures;    ///< number of expected failures in this test unit
+
+    readwrite_property<run_status>      p_default_status;       ///< run status obtained by this unit during setup phase
+    readwrite_property<run_status>      p_run_status;           ///< run status assigned to this unit before execution phase after applying all filters
+
+    readwrite_property<counter_t>       p_sibling_rank;         ///< rank of this test unit amoung siblings of the same parent
+
+    readwrite_property<decor_list_t>    p_decorators;           ///< automatically assigned decorators; execution is delayed till framework::finalize_setup_phase function
+    readwrite_property<fixture_list_t>  p_fixtures;             ///< fixtures associated with this test unit
+
+protected:
+    ~test_unit();
+    // Constructor
+    test_unit( const_string tu_name, const_string tc_file, std::size_t tc_line, test_unit_type t );
+    // Master test suite constructor
+    explicit                            test_unit( const_string module_name );
+
+private:
+};
+
+// ************************************************************************** //
+// **************              test_unit_generator             ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL test_unit_generator {
+public:
+    virtual test_unit*  next() const = 0;
+
+protected:
+    BOOST_TEST_PROTECTED_VIRTUAL ~test_unit_generator() {}
+};
+
+// ************************************************************************** //
+// **************                   test_case                  ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL test_case : public test_unit {
+public:
+    enum { type = TUT_CASE };
+
+    // Constructor
+    test_case( const_string tc_name, pdalboost::function<void ()> const& test_func );
+    test_case( const_string tc_name, const_string tc_file, std::size_t tc_line, pdalboost::function<void ()> const& test_func );
+
+    // Public property
+    typedef BOOST_READONLY_PROPERTY(pdalboost::function<void ()>,(test_case))  test_func;
+
+    test_func   p_test_func;
+
+private:
+    friend class framework::state;
+    ~test_case() {}
+};
+
+// ************************************************************************** //
+// **************                  test_suite                  ************** //
+// ************************************************************************** //
+
+//! Class representing test suites
+class BOOST_TEST_DECL test_suite : public test_unit {
+public:
+    enum { type = TUT_SUITE };
+
+    // Constructor
+    explicit        test_suite( const_string ts_name, const_string ts_file, std::size_t ts_line );
+
+    // test unit list management
+
+    /*!@brief Adds a test unit to a test suite.
+     *
+     * It is possible to specify the timeout and the expected failures.
+     */
+    void            add( test_unit* tu, counter_t expected_failures = 0, unsigned timeout = 0 );
+
+    /// @overload
+    void            add( test_unit_generator const& gen, unsigned timeout = 0 );
+
+    /// @overload
+    void            add( test_unit_generator const& gen, decorator::collector& decorators );
+
+    //! Removes a test from the test suite.
+    void            remove( test_unit_id id );
+
+
+    // access methods
+    test_unit_id    get( const_string tu_name ) const;
+    std::size_t     size() const { return m_children.size(); }
+
+protected:
+    // Master test suite constructor
+    explicit        test_suite( const_string module_name );
+
+    friend BOOST_TEST_DECL
+    void            traverse_test_tree( test_suite const&, test_tree_visitor&, bool );
+    friend class    framework::state;
+    virtual         ~test_suite() {}
+
+    typedef std::multimap<counter_t,test_unit_id> children_per_rank;
+    // Data members
+
+    test_unit_id_list   m_children;
+    children_per_rank   m_ranked_children; ///< maps child sibling rank to list of children with that rank
+};
+
+// ************************************************************************** //
+// **************               master_test_suite              ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL master_test_suite_t : public test_suite {
+public:
+    master_test_suite_t();
+
+    // Data members
+    int      argc;
+    char**   argv;
+};
+
+// ************************************************************************** //
+// **************            user_tc_method_invoker            ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+BOOST_TEST_DECL std::string normalize_test_case_name( const_string tu_name );
+
+//____________________________________________________________________________//
+
+template<typename InstanceType,typename UserTestCase>
+struct user_tc_method_invoker {
+    typedef void (UserTestCase::*TestMethod )();
+
+    user_tc_method_invoker( shared_ptr<InstanceType> inst, TestMethod test_method )
+    : m_inst( inst ), m_test_method( test_method ) {}
+
+    void operator()() { ((*m_inst).*m_test_method)(); }
+
+    shared_ptr<InstanceType> m_inst;
+    TestMethod               m_test_method;
+};
+
+} // namespace ut_detail
+
+// ************************************************************************** //
+// **************                make_test_case                ************** //
+// ************************************************************************** //
+
+inline test_case*
+make_test_case( pdalboost::function<void ()> const& test_func, const_string tc_name, const_string tc_file, std::size_t tc_line )
+{
+    return new test_case( ut_detail::normalize_test_case_name( tc_name ), tc_file, tc_line, test_func );
+}
+
+//____________________________________________________________________________//
+
+template<typename UserTestCase, typename InstanceType>
+inline test_case*
+make_test_case( void (UserTestCase::*           test_method )(),
+                const_string                    tc_name,
+                const_string                    tc_file,
+                std::size_t                     tc_line,
+                pdalboost::shared_ptr<InstanceType> user_test_case )
+{
+    return new test_case( ut_detail::normalize_test_case_name( tc_name ),
+                          tc_file,
+                          tc_line,
+                          ut_detail::user_tc_method_invoker<InstanceType,UserTestCase>( user_test_case, test_method ) );
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TREE_TEST_UNIT_HPP_100211GER
diff --git a/vendor/pdalboost/boost/test/tree/traverse.hpp b/vendor/pdalboost/boost/test/tree/traverse.hpp
new file mode 100644
index 0000000..f85c2f3
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tree/traverse.hpp
@@ -0,0 +1,58 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: -1 $
+//
+//  Description : defines traverse_test_tree algorithm
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TREE_TRAVERSE_HPP_100211GER
+#define BOOST_TEST_TREE_TRAVERSE_HPP_100211GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+#include <boost/test/tree/test_unit.hpp>
+#include <boost/test/tree/visitor.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************               traverse_test_tree             ************** //
+// ************************************************************************** //
+
+BOOST_TEST_DECL void    traverse_test_tree( test_case const&, test_tree_visitor&, bool ignore_status = false );
+BOOST_TEST_DECL void    traverse_test_tree( test_suite const&, test_tree_visitor&, bool ignore_status = false );
+BOOST_TEST_DECL void    traverse_test_tree( test_unit_id     , test_tree_visitor&, bool ignore_status = false );
+
+//____________________________________________________________________________//
+
+inline void
+traverse_test_tree( test_unit const& tu, test_tree_visitor& V, bool ignore_status = false )
+{
+    if( tu.p_type == TUT_CASE )
+        traverse_test_tree( static_cast<test_case const&>( tu ), V, ignore_status );
+    else
+        traverse_test_tree( static_cast<test_suite const&>( tu ), V, ignore_status );
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TREE_TRAVERSE_HPP_100211GER
diff --git a/vendor/pdalboost/boost/test/tree/visitor.hpp b/vendor/pdalboost/boost/test/tree/visitor.hpp
new file mode 100644
index 0000000..db69399
--- /dev/null
+++ b/vendor/pdalboost/boost/test/tree/visitor.hpp
@@ -0,0 +1,52 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision: -1 $
+//
+//  Description : defines test_tree_visitor
+// ***************************************************************************
+
+#ifndef BOOST_TEST_TREE_VISITOR_HPP_100211GER
+#define BOOST_TEST_TREE_VISITOR_HPP_100211GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+#include <boost/test/tree/test_unit.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************               test_tree_visitor              ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL test_tree_visitor {
+public:
+    // test tree visitor interface
+    virtual bool    visit( test_unit const& )               { return true; }
+    virtual void    visit( test_case const& tc )            { visit( (test_unit const&)tc ); }
+    virtual bool    test_suite_start( test_suite const& ts ){ return visit( (test_unit const&)ts ); }
+    virtual void    test_suite_finish( test_suite const& )  {}
+
+protected:
+    BOOST_TEST_PROTECTED_VIRTUAL ~test_tree_visitor() {}
+};
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_TREE_VISITOR_HPP_100211GER
+
diff --git a/vendor/pdalboost/boost/test/unit_test.hpp b/vendor/pdalboost/boost/test/unit_test.hpp
new file mode 100644
index 0000000..de9118d
--- /dev/null
+++ b/vendor/pdalboost/boost/test/unit_test.hpp
@@ -0,0 +1,70 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// @brief Entry point into the Unit Test Framework
+///
+/// This header should be the only header necessary to include to start using the framework
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_HPP_071894GER
+#define BOOST_TEST_UNIT_TEST_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test_suite.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                 Auto Linking                 ************** //
+// ************************************************************************** //
+
+#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_TEST_NO_LIB) && \
+    !defined(BOOST_TEST_SOURCE) && !defined(BOOST_TEST_INCLUDED)
+#  define BOOST_LIB_NAME pdalboost_unit_test_framework
+
+#  if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_TEST_DYN_LINK)
+#    define BOOST_DYN_LINK
+#  endif
+
+#  include <boost/config/auto_link.hpp>
+
+#endif  // auto-linking disabled
+
+// ************************************************************************** //
+// **************                  unit_test_main              ************** //
+// ************************************************************************** //
+
+namespace pdalboost { namespace unit_test {
+
+int BOOST_TEST_DECL unit_test_main( init_unit_test_func init_func, int argc, char* argv[] );
+
+}
+
+// !! ?? to remove
+namespace unit_test_framework=unit_test;
+
+}
+
+#if defined(BOOST_TEST_DYN_LINK) && defined(BOOST_TEST_MAIN) && !defined(BOOST_TEST_NO_MAIN)
+
+// ************************************************************************** //
+// **************        main function for tests using dll     ************** //
+// ************************************************************************** //
+
+int BOOST_TEST_CALL_DECL
+main( int argc, char* argv[] )
+{
+    return ::pdalboost::unit_test::unit_test_main( &init_unit_test, argc, argv );
+}
+
+//____________________________________________________________________________//
+
+#endif // BOOST_TEST_DYN_LINK && BOOST_TEST_MAIN && !BOOST_TEST_NO_MAIN
+
+#endif // BOOST_TEST_UNIT_TEST_HPP_071894GER
diff --git a/vendor/pdalboost/boost/test/unit_test_log.hpp b/vendor/pdalboost/boost/test/unit_test_log.hpp
new file mode 100644
index 0000000..447a8cf
--- /dev/null
+++ b/vendor/pdalboost/boost/test/unit_test_log.hpp
@@ -0,0 +1,172 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// @brief defines singleton class unit_test_log and all manipulators.
+/// unit_test_log has output stream like interface. It's implementation is
+/// completely hidden with pimple idiom
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_LOG_HPP_071894GER
+#define BOOST_TEST_UNIT_TEST_LOG_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/tree/observer.hpp>
+
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/log_level.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+
+#include <boost/test/utils/wrap_stringstream.hpp>
+#include <boost/test/utils/trivial_singleton.hpp>
+#include <boost/test/utils/lazy_ostream.hpp>
+
+// Boost
+
+// STL
+#include <iosfwd>   // for std::ostream&
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************                log manipulators              ************** //
+// ************************************************************************** //
+
+namespace log {
+
+struct BOOST_TEST_DECL begin {
+    begin( const_string fn, std::size_t ln )
+    : m_file_name( fn )
+    , m_line_num( ln )
+    {}
+
+    const_string m_file_name;
+    std::size_t m_line_num;
+};
+
+struct end {};
+
+} // namespace log
+
+// ************************************************************************** //
+// **************             entry_value_collector            ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+class BOOST_TEST_DECL entry_value_collector {
+public:
+    // Constructors
+    entry_value_collector() : m_last( true ) {}
+    entry_value_collector( entry_value_collector const& rhs ) : m_last( true ) { rhs.m_last = false; }
+    ~entry_value_collector();
+
+    // collection interface
+    entry_value_collector const& operator<<( lazy_ostream const& ) const;
+    entry_value_collector const& operator<<( const_string ) const;
+
+private:
+    // Data members
+    mutable bool    m_last;
+};
+
+} // namespace ut_detail
+
+// ************************************************************************** //
+// **************                 unit_test_log                ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL unit_test_log_t : public test_observer, public singleton<unit_test_log_t> {
+public:
+    // test_observer interface implementation
+    virtual void        test_start( counter_t test_cases_amount );
+    virtual void        test_finish();
+    virtual void        test_aborted();
+
+    virtual void        test_unit_start( test_unit const& );
+    virtual void        test_unit_finish( test_unit const&, unsigned long elapsed );
+    virtual void        test_unit_skipped( test_unit const&, const_string );
+
+    virtual void        exception_caught( execution_exception const& ex );
+
+    virtual int         priority() { return 1; }
+
+    // log configuration methods
+    void                set_stream( std::ostream& );
+    void                set_threshold_level( log_level );
+    void                set_format( output_format );
+    void                set_formatter( unit_test_log_formatter* );
+
+    // test progress logging
+    void                set_checkpoint( const_string file, std::size_t line_num, const_string msg = const_string() );
+
+    // entry logging
+    unit_test_log_t&    operator<<( log::begin const& );        // begin entry
+    unit_test_log_t&    operator<<( log::end const& );          // end entry
+    unit_test_log_t&    operator<<( log_level );                // set entry level
+    unit_test_log_t&    operator<<( const_string );             // log entry value
+    unit_test_log_t&    operator<<( lazy_ostream const& );      // log entry value
+
+    ut_detail::entry_value_collector operator()( log_level );   // initiate entry collection
+
+private:
+    // Implementation helpers
+    bool                log_entry_start();
+    void                log_entry_context( log_level l );
+    void                clear_entry_context();
+
+    BOOST_TEST_SINGLETON_CONS( unit_test_log_t )
+}; // unit_test_log_t
+
+BOOST_TEST_SINGLETON_INST( unit_test_log )
+
+// helper macros
+#define BOOST_TEST_LOG_ENTRY( ll )                                                  \
+    (::pdalboost::unit_test::unit_test_log                                              \
+        << ::pdalboost::unit_test::log::begin( BOOST_TEST_L(__FILE__), __LINE__ ))(ll)  \
+/**/
+
+} // namespace unit_test
+} // namespace pdalboost
+
+// ************************************************************************** //
+// **************       Unit test log interface helpers        ************** //
+// ************************************************************************** //
+
+#define BOOST_TEST_MESSAGE( M )                                 \
+    BOOST_TEST_LOG_ENTRY( ::pdalboost::unit_test::log_messages )    \
+    << BOOST_TEST_LAZY_MSG( M )                                 \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_PASSPOINT()                                  \
+    ::pdalboost::unit_test::unit_test_log.set_checkpoint(           \
+        BOOST_TEST_L(__FILE__),                                 \
+        static_cast<std::size_t>(__LINE__) )                    \
+/**/
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_CHECKPOINT( M )                              \
+    ::pdalboost::unit_test::unit_test_log.set_checkpoint(           \
+        BOOST_TEST_L(__FILE__),                                 \
+        static_cast<std::size_t>(__LINE__),                     \
+        (::pdalboost::wrap_stringstream().ref() << M).str() )       \
+/**/
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UNIT_TEST_LOG_HPP_071894GER
+
diff --git a/vendor/pdalboost/boost/test/unit_test_log_formatter.hpp b/vendor/pdalboost/boost/test/unit_test_log_formatter.hpp
new file mode 100644
index 0000000..ffa036d
--- /dev/null
+++ b/vendor/pdalboost/boost/test/unit_test_log_formatter.hpp
@@ -0,0 +1,248 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// @brief Defines unit test log formatter interface
+///
+/// You can define a class with implements this interface and use an instance of it
+/// as a Unit Test Framework log formatter
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_LOG_FORMATTER_HPP_071894GER
+#define BOOST_TEST_UNIT_TEST_LOG_FORMATTER_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/detail/log_level.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+
+// STL
+#include <iosfwd>
+#include <string> // for std::string
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+/// Collection of log entry attributes
+// ************************************************************************** //
+
+struct BOOST_TEST_DECL log_entry_data {
+    log_entry_data()
+    {
+        m_file_name.reserve( 200 );
+    }
+
+    std::string     m_file_name; ///< log entry file name
+    std::size_t     m_line_num;  ///< log entry line number
+    log_level       m_level;     ///< log entry level
+
+    void clear()
+    {
+        m_file_name.erase();
+        m_line_num      = 0;
+        m_level     = log_nothing;
+    }
+};
+
+// ************************************************************************** //
+/// Collection of log checkpoint attributes
+// ************************************************************************** //
+
+struct BOOST_TEST_DECL log_checkpoint_data
+{
+    const_string    m_file_name; ///< log checkpoint file name
+    std::size_t     m_line_num;  ///< log checkpoint file name
+    std::string     m_message;   ///< log checkpoint message
+
+    void clear()
+    {
+        m_file_name.clear();
+        m_line_num  = 0;
+        m_message   = std::string();
+    }
+};
+
+// ************************************************************************** //
+/// Abstract Unit Test Framework log formatter interface
+
+/// During the test module execution Unit Test Framework can report messages about success or failure of assertions,
+/// which test suites are being run and more (specifically which messages are reported depends on log level threshold selected by the user).
+/// All these messages constitute Unit Test Framework log. There are many ways (formats) to present these messages to the user. Boost.Test comes with
+/// two formats: "Compiler-like log format" and "XML based log format". Former is intended for human consumption and later is intended for processing
+/// by automated regression test systems. If you want to produce some other format you need to implement class with specific interface and use
+/// method unit_test_log_t::set_formatter during a test module initialization to set an active formatter. The class unit_test_log_formatter defines this
+/// interface.
+///
+/// This interface requires you to format all possible messages being produced in the log. These includes error messages about failed assertions, messages
+/// about caught exceptions and information messages about test units being started/ended. All the methods in this interface takes a reference to standard
+/// stream as a first argument. This is where final messages needs to be directed to. Also you are given all the information necessary to produce a message.
+class BOOST_TEST_DECL unit_test_log_formatter {
+public:
+    /// Types of log entries (messages written into a log)
+    enum log_entry_types { BOOST_UTL_ET_INFO,       ///< Information message from the framework
+                           BOOST_UTL_ET_MESSAGE,    ///< Information message from the user
+                           BOOST_UTL_ET_WARNING,    ///< Warning (non error) condition notification message
+                           BOOST_UTL_ET_ERROR,      ///< Non fatal error notification message
+                           BOOST_UTL_ET_FATAL_ERROR ///< Fatal error notification message
+    };
+
+    // Destructor
+    virtual             ~unit_test_log_formatter() {}
+
+    // @name Test start/finish
+
+    /// Invoked at the beginning of test module execution
+
+    /// @param[in] os   output stream to write a messages to
+    /// @param[in] test_cases_amount total test case amount to be run
+    /// @see log_finish
+    virtual void        log_start( std::ostream& os, counter_t test_cases_amount ) = 0;
+
+    /// Invoked at the end of test module execution
+
+    /// @param[in] os   output stream to write a messages into
+    /// @see log_start
+    virtual void        log_finish( std::ostream& os ) = 0;
+
+    /// Invoked when Unit Test Framework build information is requested
+
+    /// @param[in] os   output stream to write a messages into
+    virtual void        log_build_info( std::ostream& os ) = 0;
+    // @}
+
+    // @name Test unit start/finish
+
+    /// Invoked when test unit starts (either test suite or test case)
+
+    /// @param[in] os   output stream to write a messages into
+    /// @param[in] tu   test unit being started
+    /// @see test_unit_finish
+    virtual void        test_unit_start( std::ostream& os, test_unit const& tu ) = 0;
+
+    /// Invoked when test unit finishes
+
+    /// @param[in] os   output stream to write a messages into
+    /// @param[in] tu   test unit being finished
+    /// @param[in] elapsed time in milliseconds spend executing this test unit
+    /// @see test_unit_start
+    virtual void        test_unit_finish( std::ostream& os, test_unit const& tu, unsigned long elapsed ) = 0;
+
+    /// Invoked if test unit skipped for any reason
+
+    /// @param[in] os   output stream to write a messages into
+    /// @param[in] tu   skipped test unit
+    /// @param[in] reason explanation why was it skipped
+    virtual void        test_unit_skipped( std::ostream& os, test_unit const& tu, const_string reason )
+    {
+        test_unit_skipped( os, tu );
+    }
+
+    /// Deprecated version of this interface
+    virtual void        test_unit_skipped( std::ostream& os, test_unit const& tu ) {}
+
+    // @}
+
+    // @name Uncaught exception report
+
+    /// Invoked when Unit Test Framework detects uncaught exception
+
+    /// Call to this function starts uncaught exception report. It is going to followed by context information. Report is finalized by call to
+    /// log_exception_finish.
+    /// @param[in] os   output stream to write a messages into
+    /// @param[in] lcd  information about the last checkpoint before the exception was triggered
+    /// @param[in] ex   information about the caught exception
+    /// @see log_exception_finish
+    virtual void        log_exception_start( std::ostream& os, log_checkpoint_data const& lcd, execution_exception const& ex ) = 0;
+
+    /// Invoked when Unit Test Framework detects uncaught exception
+
+    /// Call to this function finishes uncaught exception report.
+    /// @param[in] os   output stream to write a messages into
+    /// @see log_exception_start
+    virtual void        log_exception_finish( std::ostream& os ) = 0;
+    // @}
+
+    // @name Regular log entry
+
+    /// Invoked by Unit Test Framework to start new log entry
+
+    /// Call to this function starts new log entry. It is followed by series of log_entry_value calls and finally call to log_entry_finish.
+    /// A log entry may consist of one or more values being reported. Some of these values will be plain strings, while others can be complicated
+    /// expressions in a form of "lazy" expression template lazy_ostream.
+    /// @param[in] os   output stream to write a messages into
+    /// @param[in] led  log entry attributes
+    /// @param[in] let  log entry type log_entry_finish
+    /// @see log_entry_value, log_entry_finish
+    virtual void        log_entry_start( std::ostream& os, log_entry_data const& led, log_entry_types let ) = 0;
+
+    /// Invoked by Unit Test Framework to report a log entry content
+
+    /// This is one of two overloaded methods to report log entry content. This one is used to report plain string value.
+    /// @param[in] os   output stream to write a messages into.
+    /// @param[in] value log entry string value
+    /// @see log_entry_start, log_entry_finish
+    virtual void        log_entry_value( std::ostream& os, const_string value ) = 0;
+
+    /// Invoked by Unit Test Framework to report a log entry content
+
+    /// This is one of two overloaded methods to report log entry content. This one is used to report some complicated expression passed as
+    /// an expression template lazy_ostream. In most cases default implementation provided by the framework should work as is (it just converts
+    /// the lazy expression into a string.
+    /// @param[in] os   output stream to write a messages into
+    /// @param[in] value log entry "lazy" value
+    /// @see log_entry_start, log_entry_finish
+    virtual void        log_entry_value( std::ostream& os, lazy_ostream const& value ); // there is a default impl
+
+    /// Invoked by Unit Test Framework to finish a log entry report
+
+    /// @param[in] os   output stream to write a messages into
+    /// @see log_entry_start, log_entry_start
+    virtual void        log_entry_finish( std::ostream& os ) = 0;
+    // @}
+
+    // @name Log entry context report
+
+    /// Invoked by Unit Test Framework to start log entry context report
+
+    /// Unit Test Framework logs for failed assertions and uncaught exceptions context if one was defined by a test module.
+    /// Context consists of multiple "scopes" identified by description messages assigned by the test module using
+    /// BOOST_TEST_INFO/BOOST_TEST_CONTEXT statements.
+    /// @param[in] os   output stream to write a messages into
+    /// @param[in] l    entry log_leveg, to be used to fine tune the message
+    /// @see log_entry_context, entry_context_finish
+    virtual void        entry_context_start( std::ostream& os, log_level l ) = 0;
+
+    /// Invoked by Unit Test Framework to report log entry context "scope" description
+
+    /// Each "scope" description is reported by separate call to log_entry_context.
+    /// @param[in] os   output stream to write a messages into
+    /// @param[in] value  context "scope" description
+    /// @see log_entry_start, entry_context_finish
+    virtual void        log_entry_context( std::ostream& os, const_string value ) = 0;
+
+    /// Invoked by Unit Test Framework to finish log entry context report
+
+    /// @param[in] os   output stream to write a messages into
+    /// @see log_entry_start, entry_context_context
+    virtual void        entry_context_finish( std::ostream& os ) = 0;
+    // @}
+};
+
+} // namespace unit_test
+} // namespace pdalboost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UNIT_TEST_LOG_FORMATTER_HPP_071894GER
+
diff --git a/vendor/pdalboost/boost/test/unit_test_monitor.hpp b/vendor/pdalboost/boost/test/unit_test_monitor.hpp
new file mode 100644
index 0000000..db98217
--- /dev/null
+++ b/vendor/pdalboost/boost/test/unit_test_monitor.hpp
@@ -0,0 +1,60 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// @brief defines specific version of execution monitor used to managed run unit of test cases
+///
+/// Translates execution exception into error level
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_MONITOR_HPP_020905GER
+#define BOOST_TEST_UNIT_TEST_MONITOR_HPP_020905GER
+
+// Boost.Test
+#include <boost/test/execution_monitor.hpp>
+#include <boost/test/detail/fwd_decl.hpp>
+#include <boost/test/utils/trivial_singleton.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************               unit_test_monitor              ************** //
+// ************************************************************************** //
+
+class BOOST_TEST_DECL unit_test_monitor_t : public singleton<unit_test_monitor_t>, public execution_monitor {
+public:
+    enum error_level {
+        test_ok                 =  0,
+        precondition_failure    = -1,
+        unexpected_exception    = -2,
+        os_exception            = -3,
+        os_timeout              = -4,
+        fatal_error             = -5  // includes both system and user
+    };
+
+    static bool is_critical_error( error_level e ) { return e <= fatal_error; }
+
+    // monitor method
+    error_level execute_and_translate( pdalboost::function<void ()> const& func, unsigned timeout = 0 );
+
+private:
+    BOOST_TEST_SINGLETON_CONS( unit_test_monitor_t )
+};
+
+BOOST_TEST_SINGLETON_INST( unit_test_monitor )
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UNIT_TEST_MONITOR_HPP_020905GER
diff --git a/vendor/pdalboost/boost/test/unit_test_parameters.hpp b/vendor/pdalboost/boost/test/unit_test_parameters.hpp
new file mode 100644
index 0000000..43f394d
--- /dev/null
+++ b/vendor/pdalboost/boost/test/unit_test_parameters.hpp
@@ -0,0 +1,128 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// @brief Provides access to various Unit Test Framework runtime parameters
+///
+/// Primarily for use by the framework itself
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER
+#define BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/detail/global_typedef.hpp>
+#include <boost/test/utils/runtime/argument.hpp>
+
+// STL
+#include <iostream>
+#include <fstream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace runtime_config {
+
+// ************************************************************************** //
+// **************                 runtime_config               ************** //
+// ************************************************************************** //
+
+// UTF parameters 
+BOOST_TEST_DECL extern std::string AUTO_START_DBG;
+BOOST_TEST_DECL extern std::string BREAK_EXEC_PATH;
+BOOST_TEST_DECL extern std::string BUILD_INFO;
+BOOST_TEST_DECL extern std::string CATCH_SYS_ERRORS;
+BOOST_TEST_DECL extern std::string COLOR_OUTPUT;
+BOOST_TEST_DECL extern std::string DETECT_FP_EXCEPT;
+BOOST_TEST_DECL extern std::string DETECT_MEM_LEAKS;
+BOOST_TEST_DECL extern std::string LIST_CONTENT;
+BOOST_TEST_DECL extern std::string LIST_LABELS;
+BOOST_TEST_DECL extern std::string LOG_FORMAT;
+BOOST_TEST_DECL extern std::string LOG_LEVEL;
+BOOST_TEST_DECL extern std::string LOG_SINK;
+BOOST_TEST_DECL extern std::string OUTPUT_FORMAT;
+BOOST_TEST_DECL extern std::string RANDOM_SEED;
+BOOST_TEST_DECL extern std::string REPORT_FORMAT;
+BOOST_TEST_DECL extern std::string REPORT_LEVEL;
+BOOST_TEST_DECL extern std::string REPORT_MEM_LEAKS;
+BOOST_TEST_DECL extern std::string REPORT_SINK;
+BOOST_TEST_DECL extern std::string RESULT_CODE;
+BOOST_TEST_DECL extern std::string RUN_FILTERS;
+BOOST_TEST_DECL extern std::string SAVE_TEST_PATTERN;
+BOOST_TEST_DECL extern std::string SHOW_PROGRESS;
+BOOST_TEST_DECL extern std::string USE_ALT_STACK;
+BOOST_TEST_DECL extern std::string WAIT_FOR_DEBUGGER;
+
+BOOST_TEST_DECL void init( int& argc, char** argv );
+
+// ************************************************************************** //
+// **************              runtime_param::get              ************** //
+// ************************************************************************** //
+
+/// Access to arguments
+BOOST_TEST_DECL runtime::arguments_store const& argument_store();
+
+template<typename T>
+inline T const&
+get( runtime::cstring parameter_name )
+{
+    return argument_store().get<T>( parameter_name );
+}
+
+/// For public access
+BOOST_TEST_DECL bool save_pattern();
+
+// ************************************************************************** //
+// **************                  stream_holder               ************** //
+// ************************************************************************** //
+
+class stream_holder {
+public:
+    // Constructor
+    explicit        stream_holder( std::ostream& default_stream )
+    : m_stream( &default_stream )
+    {
+    }
+
+    void            setup( runtime::cstring param_name )
+    {
+        if( !runtime_config::argument_store().has( param_name ) )
+            return;
+
+        std::string const& file_name = runtime_config::get<std::string>( param_name );
+
+        if( file_name == "stderr" )
+            m_stream = &std::cerr;
+        else if( file_name == "stdout" )
+            m_stream = &std::cout;
+        else {
+            m_file.open( file_name.c_str() );
+            m_stream = &m_file;
+        }
+    }
+
+    // Access methods
+    std::ostream&   ref() const { return *m_stream; }  
+
+private:
+    // Data members
+    std::ofstream   m_file;
+    std::ostream*   m_stream;  
+};
+
+} // namespace runtime_config
+} // namespace unit_test
+} // namespace pdalboost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UNIT_TEST_PARAMETERS_HPP_071894GER
diff --git a/vendor/pdalboost/boost/test/unit_test_suite.hpp b/vendor/pdalboost/boost/test/unit_test_suite.hpp
new file mode 100644
index 0000000..24aac01
--- /dev/null
+++ b/vendor/pdalboost/boost/test/unit_test_suite.hpp
@@ -0,0 +1,366 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// @brief Defines Unit Test Framework public API
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UNIT_TEST_SUITE_HPP_071894GER
+#define BOOST_TEST_UNIT_TEST_SUITE_HPP_071894GER
+
+// Boost.Test
+#include <boost/test/framework.hpp>
+#include <boost/test/tree/auto_registration.hpp>
+#include <boost/test/tree/test_case_template.hpp>
+#include <boost/test/tree/global_fixture.hpp>
+
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+
+#include <boost/test/detail/pp_variadic.hpp>
+
+
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************    Non-auto (explicit) test case interface   ************** //
+// ************************************************************************** //
+
+#define BOOST_TEST_CASE( test_function )                                   \
+pdalboost::unit_test::make_test_case( pdalboost::function<void ()>(test_function), \
+                                  BOOST_TEST_STRINGIZE( test_function ),   \
+                                  __FILE__, __LINE__ )
+#define BOOST_CLASS_TEST_CASE( test_function, tc_instance )                \
+pdalboost::unit_test::make_test_case( (test_function),                         \
+                                  BOOST_TEST_STRINGIZE( test_function ),   \
+                                  __FILE__, __LINE__, tc_instance )
+
+// ************************************************************************** //
+// **************               BOOST_TEST_SUITE               ************** //
+// ************************************************************************** //
+
+#define BOOST_TEST_SUITE( testsuite_name ) \
+( new pdalboost::unit_test::test_suite( testsuite_name, __FILE__, __LINE__ ) )
+
+// ************************************************************************** //
+// **************             BOOST_AUTO_TEST_SUITE            ************** //
+// ************************************************************************** //
+
+#define BOOST_AUTO_TEST_SUITE_WITH_DECOR( suite_name, decorators )      \
+namespace suite_name {                                                  \
+BOOST_AUTO_TU_REGISTRAR( suite_name )(                                  \
+    BOOST_STRINGIZE( suite_name ),                                      \
+    __FILE__, __LINE__,                                                 \
+    decorators );                                                       \
+/**/
+
+#define BOOST_AUTO_TEST_SUITE_NO_DECOR( suite_name )                    \
+    BOOST_AUTO_TEST_SUITE_WITH_DECOR(                                   \
+        suite_name,                                                     \
+        pdalboost::unit_test::decorator::collector::instance() )            \
+/**/
+
+#if BOOST_PP_VARIADICS
+#define BOOST_AUTO_TEST_SUITE( ... )                                    \
+    BOOST_TEST_INVOKE_IF_N_ARGS( 1,                                     \
+        BOOST_AUTO_TEST_SUITE_NO_DECOR,                                 \
+        BOOST_AUTO_TEST_SUITE_WITH_DECOR,                               \
+        __VA_ARGS__)                                                    \
+/**/
+
+#else /* BOOST_PP_VARIADICS */
+
+#define BOOST_AUTO_TEST_SUITE( suite_name )                             \
+    BOOST_AUTO_TEST_SUITE_NO_DECOR( suite_name )                        \
+/**/
+
+
+#endif /* BOOST_PP_VARIADICS */
+
+// ************************************************************************** //
+// **************            BOOST_FIXTURE_TEST_SUITE          ************** //
+// ************************************************************************** //
+
+#define BOOST_FIXTURE_TEST_SUITE_WITH_DECOR(suite_name, F, decorators)  \
+    BOOST_AUTO_TEST_SUITE_WITH_DECOR( suite_name, decorators )          \
+typedef F BOOST_AUTO_TEST_CASE_FIXTURE;                                 \
+/**/
+
+#define BOOST_FIXTURE_TEST_SUITE_NO_DECOR( suite_name, F )              \
+    BOOST_AUTO_TEST_SUITE_NO_DECOR( suite_name )                        \
+typedef F BOOST_AUTO_TEST_CASE_FIXTURE;                                 \
+/**/
+
+#if BOOST_PP_VARIADICS
+
+#define BOOST_FIXTURE_TEST_SUITE( ... )                                 \
+    BOOST_TEST_INVOKE_IF_N_ARGS( 2,                                     \
+        BOOST_FIXTURE_TEST_SUITE_NO_DECOR,                              \
+        BOOST_FIXTURE_TEST_SUITE_WITH_DECOR,                            \
+        __VA_ARGS__)                                                    \
+/**/
+
+#else /* BOOST_PP_VARIADICS */
+
+#define BOOST_FIXTURE_TEST_SUITE( suite_name, F  )                      \
+   BOOST_FIXTURE_TEST_SUITE_NO_DECOR( suite_name, F )                   \
+/**/
+
+
+#endif /* BOOST_PP_VARIADICS */
+
+
+// ************************************************************************** //
+// **************           BOOST_AUTO_TEST_SUITE_END          ************** //
+// ************************************************************************** //
+
+#define BOOST_AUTO_TEST_SUITE_END()                                     \
+BOOST_AUTO_TU_REGISTRAR( BOOST_JOIN( end_suite, __LINE__ ) )( 1 );      \
+}                                                                       \
+/**/
+
+// ************************************************************************** //
+// **************    BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES    ************** //
+// ************************************************************************** //
+
+/// @deprecated use decorator instead
+#define BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES( test_name, n )          \
+BOOST_TEST_DECORATOR( * pdalboost::unit_test::expected_failures( n ) )      \
+/**/
+
+// ************************************************************************** //
+// **************            BOOST_FIXTURE_TEST_CASE           ************** //
+// ************************************************************************** //
+
+#define BOOST_FIXTURE_TEST_CASE_WITH_DECOR( test_name, F, decorators )  \
+struct test_name : public F { void test_method(); };                    \
+                                                                        \
+static void BOOST_AUTO_TC_INVOKER( test_name )()                        \
+{                                                                       \
+    BOOST_TEST_CHECKPOINT('"' << #test_name << "\" fixture entry.");    \
+    test_name t;                                                        \
+    BOOST_TEST_CHECKPOINT('"' << #test_name << "\" entry.");            \
+    t.test_method();                                                    \
+    BOOST_TEST_CHECKPOINT('"' << #test_name << "\" exit.");             \
+}                                                                       \
+                                                                        \
+struct BOOST_AUTO_TC_UNIQUE_ID( test_name ) {};                         \
+                                                                        \
+BOOST_AUTO_TU_REGISTRAR( test_name )(                                   \
+    pdalboost::unit_test::make_test_case(                                   \
+        &BOOST_AUTO_TC_INVOKER( test_name ),                            \
+        #test_name, __FILE__, __LINE__ ),                               \
+        decorators );                                                   \
+                                                                        \
+void test_name::test_method()                                           \
+/**/
+
+#define BOOST_FIXTURE_TEST_CASE_NO_DECOR( test_name, F )                \
+BOOST_FIXTURE_TEST_CASE_WITH_DECOR( test_name, F,                       \
+    pdalboost::unit_test::decorator::collector::instance() )                \
+/**/
+
+#if BOOST_PP_VARIADICS
+
+#define BOOST_FIXTURE_TEST_CASE( ... )                                  \
+    BOOST_TEST_INVOKE_IF_N_ARGS( 2,                                     \
+        BOOST_FIXTURE_TEST_CASE_NO_DECOR,                               \
+        BOOST_FIXTURE_TEST_CASE_WITH_DECOR,                             \
+         __VA_ARGS__)                                                   \
+/**/
+
+#else /* BOOST_PP_VARIADICS */
+
+#define BOOST_FIXTURE_TEST_CASE( test_name, F )                         \
+     BOOST_FIXTURE_TEST_CASE_NO_DECOR(test_name, F)                     \
+/**/
+
+
+#endif /* BOOST_PP_VARIADICS */
+
+// ************************************************************************** //
+// **************             BOOST_AUTO_TEST_CASE             ************** //
+// ************************************************************************** //
+
+#define BOOST_AUTO_TEST_CASE_NO_DECOR( test_name )                      \
+    BOOST_FIXTURE_TEST_CASE_NO_DECOR( test_name,                        \
+        BOOST_AUTO_TEST_CASE_FIXTURE )                                  \
+/**/
+
+#define BOOST_AUTO_TEST_CASE_WITH_DECOR( test_name, decorators )        \
+    BOOST_FIXTURE_TEST_CASE_WITH_DECOR( test_name,                      \
+        BOOST_AUTO_TEST_CASE_FIXTURE, decorators )                      \
+/**/
+
+#if BOOST_PP_VARIADICS
+
+#define BOOST_AUTO_TEST_CASE( ... )                                     \
+    BOOST_TEST_INVOKE_IF_N_ARGS( 1,                                     \
+        BOOST_AUTO_TEST_CASE_NO_DECOR,                                  \
+        BOOST_AUTO_TEST_CASE_WITH_DECOR,                                \
+         __VA_ARGS__)                                                   \
+/**/
+
+#else /* BOOST_PP_VARIADICS */
+
+#define BOOST_AUTO_TEST_CASE( test_name )                               \
+    BOOST_AUTO_TEST_CASE_NO_DECOR( test_name )                          \
+/**/
+
+
+#endif /* BOOST_PP_VARIADICS */
+
+// ************************************************************************** //
+// **************       BOOST_FIXTURE_TEST_CASE_TEMPLATE       ************** //
+// ************************************************************************** //
+
+#define BOOST_FIXTURE_TEST_CASE_TEMPLATE( test_name, type_name, TL, F ) \
+template<typename type_name>                                            \
+struct test_name : public F                                             \
+{ void test_method(); };                                                \
+                                                                        \
+struct BOOST_AUTO_TC_INVOKER( test_name ) {                             \
+    template<typename TestType>                                         \
+    static void run( pdalboost::type<TestType>* = 0 )                       \
+    {                                                                   \
+        BOOST_TEST_CHECKPOINT('"' << #test_name <<"\" fixture entry."); \
+        test_name<TestType> t;                                          \
+        BOOST_TEST_CHECKPOINT('"' << #test_name << "\" entry.");        \
+        t.test_method();                                                \
+        BOOST_TEST_CHECKPOINT('"' << #test_name << "\" exit.");         \
+    }                                                                   \
+};                                                                      \
+                                                                        \
+BOOST_AUTO_TU_REGISTRAR( test_name )(                                   \
+    pdalboost::unit_test::ut_detail::template_test_case_gen<                \
+        BOOST_AUTO_TC_INVOKER( test_name ),TL >(                        \
+          BOOST_STRINGIZE( test_name ), __FILE__, __LINE__ ),           \
+    pdalboost::unit_test::decorator::collector::instance() );               \
+                                                                        \
+template<typename type_name>                                            \
+void test_name<type_name>::test_method()                                \
+/**/
+
+// ************************************************************************** //
+// **************        BOOST_AUTO_TEST_CASE_TEMPLATE         ************** //
+// ************************************************************************** //
+
+#define BOOST_AUTO_TEST_CASE_TEMPLATE( test_name, type_name, TL )       \
+BOOST_FIXTURE_TEST_CASE_TEMPLATE( test_name, type_name, TL,             \
+    BOOST_AUTO_TEST_CASE_FIXTURE )                                      \
+/**/
+
+// ************************************************************************** //
+// **************           BOOST_TEST_CASE_TEMPLATE           ************** //
+// ************************************************************************** //
+
+#define BOOST_TEST_CASE_TEMPLATE( name, typelist )                      \
+    pdalboost::unit_test::ut_detail::template_test_case_gen<name,typelist>( \
+        BOOST_TEST_STRINGIZE( name ), __FILE__, __LINE__ )              \
+/**/
+
+// ************************************************************************** //
+// **************      BOOST_TEST_CASE_TEMPLATE_FUNCTION       ************** //
+// ************************************************************************** //
+
+#define BOOST_TEST_CASE_TEMPLATE_FUNCTION( name, type_name )            \
+template<typename type_name>                                            \
+void BOOST_JOIN( name, _impl )( pdalboost::type<type_name>* );              \
+                                                                        \
+struct name {                                                           \
+    template<typename TestType>                                         \
+    static void run( pdalboost::type<TestType>* frwrd = 0 )                 \
+    {                                                                   \
+       BOOST_JOIN( name, _impl )( frwrd );                              \
+    }                                                                   \
+};                                                                      \
+                                                                        \
+template<typename type_name>                                            \
+void BOOST_JOIN( name, _impl )( pdalboost::type<type_name>* )               \
+/**/
+
+// ************************************************************************** //
+// **************              BOOST_GLOBAL_FIXTURE            ************** //
+// ************************************************************************** //
+
+#define BOOST_GLOBAL_FIXTURE( F ) \
+static pdalboost::unit_test::ut_detail::global_fixture_impl<F> BOOST_JOIN( gf_, F ) \
+/**/
+
+// ************************************************************************** //
+// **************             BOOST_TEST_DECORATOR             ************** //
+// ************************************************************************** //
+
+#define BOOST_TEST_DECORATOR( D )                                       \
+static pdalboost::unit_test::decorator::collector const&                    \
+BOOST_JOIN(decorator_collector,__LINE__) = D;                           \
+/**/
+
+// ************************************************************************** //
+// **************         BOOST_AUTO_TEST_CASE_FIXTURE         ************** //
+// ************************************************************************** //
+
+namespace pdalboost { namespace unit_test { namespace ut_detail {
+
+struct nil_t {};
+
+} // namespace ut_detail
+} // unit_test
+} // namespace pdalboost
+
+// Intentionally is in global namespace, so that FIXTURE_TEST_SUITE can reset it in user code.
+typedef ::pdalboost::unit_test::ut_detail::nil_t BOOST_AUTO_TEST_CASE_FIXTURE;
+
+// ************************************************************************** //
+// **************   Auto registration facility helper macros   ************** //
+// ************************************************************************** //
+
+#define BOOST_AUTO_TU_REGISTRAR( test_name )                    \
+static pdalboost::unit_test::ut_detail::auto_test_unit_registrar    \
+BOOST_JOIN( BOOST_JOIN( test_name, _registrar ), __LINE__ )     \
+/**/
+#define BOOST_AUTO_TC_INVOKER( test_name )      BOOST_JOIN( test_name, _invoker )
+#define BOOST_AUTO_TC_UNIQUE_ID( test_name )    BOOST_JOIN( test_name, _id )
+
+// ************************************************************************** //
+// **************                BOOST_TEST_MAIN               ************** //
+// ************************************************************************** //
+
+#if defined(BOOST_TEST_MAIN)
+
+#ifdef BOOST_TEST_ALTERNATIVE_INIT_API
+bool init_unit_test()                   {
+#else
+::pdalboost::unit_test::test_suite*
+init_unit_test_suite( int, char* [] )   {
+#endif
+
+#ifdef BOOST_TEST_MODULE
+    using namespace ::pdalboost::unit_test;
+    assign_op( framework::master_test_suite().p_name.value, BOOST_TEST_STRINGIZE( BOOST_TEST_MODULE ).trim( "\"" ), 0 );
+
+#endif
+
+#ifdef BOOST_TEST_ALTERNATIVE_INIT_API
+    return true;
+}
+#else
+    return 0;
+}
+#endif
+
+#endif
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+
+#endif // BOOST_TEST_UNIT_TEST_SUITE_HPP_071894GER
+
diff --git a/vendor/pdalboost/boost/test/utils/algorithm.hpp b/vendor/pdalboost/boost/test/utils/algorithm.hpp
new file mode 100644
index 0000000..257ea68
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/algorithm.hpp
@@ -0,0 +1,222 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// Addition to STL algorithms
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_ALGORITHM_HPP
+#define BOOST_TEST_UTILS_ALGORITHM_HPP
+
+// STL
+#include <utility>
+#include <algorithm> // std::find
+#include <functional> // std::bind1st
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace utils {
+
+/// @brief this algorithm search through two collections for first mismatch position that get returned as a pair
+/// of iterators, first pointing to the mismatch position in first collection, second iterator in second one
+///
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+template <class InputIter1, class InputIter2>
+inline std::pair<InputIter1, InputIter2>
+mismatch( InputIter1 first1, InputIter1 last1,
+          InputIter2 first2, InputIter2 last2 )
+{
+    while( first1 != last1 && first2 != last2 && *first1 == *first2 ) {
+        ++first1;
+        ++first2;
+    }
+
+    return std::pair<InputIter1, InputIter2>(first1, first2);
+}
+
+//____________________________________________________________________________//
+
+/// @brief this algorithm search through two collections for first mismatch position that get returned as a pair
+/// of iterators, first pointing to the mismatch position in first collection, second iterator in second one. This algorithms
+/// uses supplied predicate for collection elements comparison
+///
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+/// @param pred - predicate to be used for search
+template <class InputIter1, class InputIter2, class Predicate>
+inline std::pair<InputIter1, InputIter2>
+mismatch( InputIter1 first1, InputIter1 last1,
+          InputIter2 first2, InputIter2 last2,
+          Predicate pred )
+{
+    while( first1 != last1 && first2 != last2 && pred( *first1, *first2 ) ) {
+        ++first1;
+        ++first2;
+    }
+
+    return std::pair<InputIter1, InputIter2>(first1, first2);
+}
+
+//____________________________________________________________________________//
+
+/// @brief this algorithm search through first collection for first element that does not belong a second one
+///
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+template<class ForwardIterator1, class ForwardIterator2>
+inline ForwardIterator1
+find_first_not_of( ForwardIterator1 first1, ForwardIterator1 last1,
+                   ForwardIterator2 first2, ForwardIterator2 last2 )
+{
+    while( first1 != last1 ) {
+        if( std::find( first2, last2, *first1 ) == last2 )
+            break;
+        ++first1;
+    }
+
+    return first1;
+}
+
+//____________________________________________________________________________//
+
+/// @brief this algorithm search through first collection for first element that does not satisfy binary
+/// predicate in conjunction will any element in second collection
+///
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+/// @param pred - predicate to be used for search
+template<class ForwardIterator1, class ForwardIterator2, class Predicate>
+inline ForwardIterator1
+find_first_not_of( ForwardIterator1 first1, ForwardIterator1 last1,
+                   ForwardIterator2 first2, ForwardIterator2 last2,
+                   Predicate pred )
+{
+    while( first1 != last1 ) {
+        if( std::find_if( first2, last2, std::bind1st( pred, *first1 ) ) == last2 )
+            break;
+        ++first1;
+    }
+
+    return first1;
+}
+
+//____________________________________________________________________________//
+
+/// @brief this algorithm search through first collection for last element that belongs to a second one
+///
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+template<class BidirectionalIterator1, class ForwardIterator2>
+inline BidirectionalIterator1
+find_last_of( BidirectionalIterator1 first1, BidirectionalIterator1 last1,
+              ForwardIterator2 first2, ForwardIterator2 last2 )
+{
+    if( first1 == last1 || first2 == last2 )
+        return last1;
+
+    BidirectionalIterator1 it1 = last1;
+    while( --it1 != first1 && std::find( first2, last2, *it1 ) == last2 ) {}
+
+    return it1 == first1 && std::find( first2, last2, *it1 ) == last2 ? last1 : it1;
+}
+
+//____________________________________________________________________________//
+
+/// @brief this algorithm search through first collection for last element that satisfy binary
+/// predicate in conjunction will at least one element in second collection
+///
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+/// @param pred - predicate to be used for search
+template<class BidirectionalIterator1, class ForwardIterator2, class Predicate>
+inline BidirectionalIterator1
+find_last_of( BidirectionalIterator1 first1, BidirectionalIterator1 last1,
+              ForwardIterator2 first2, ForwardIterator2 last2,
+              Predicate pred )
+{
+    if( first1 == last1 || first2 == last2 )
+        return last1;
+
+    BidirectionalIterator1 it1 = last1;
+    while( --it1 != first1 && std::find_if( first2, last2, std::bind1st( pred, *it1 ) ) == last2 ) {}
+
+    return it1 == first1 && std::find_if( first2, last2, std::bind1st( pred, *it1 ) ) == last2 ? last1 : it1;
+}
+
+//____________________________________________________________________________//
+
+/// @brief this algorithm search through first collection for last element that does not belong to a second one
+///
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+template<class BidirectionalIterator1, class ForwardIterator2>
+inline BidirectionalIterator1
+find_last_not_of( BidirectionalIterator1 first1, BidirectionalIterator1 last1,
+                  ForwardIterator2 first2, ForwardIterator2 last2 )
+{
+    if( first1 == last1 || first2 == last2 )
+        return last1;
+
+    BidirectionalIterator1 it1 = last1;
+    while( --it1 != first1 && std::find( first2, last2, *it1 ) != last2 ) {}
+
+    return it1 == first1 && std::find( first2, last2, *it1 ) != last2 ? last1 : it1;
+}
+
+//____________________________________________________________________________//
+
+/// @brief this algorithm search through first collection for last element that does not satisfy binary
+/// predicate in conjunction will any element in second collection
+///
+/// @param first1 - first collection begin iterator
+/// @param last1 - first collection end iterator
+/// @param first2 - second collection begin iterator
+/// @param last2 - second collection end iterator
+/// @param pred - predicate to be used for search
+template<class BidirectionalIterator1, class ForwardIterator2, class Predicate>
+inline BidirectionalIterator1
+find_last_not_of( BidirectionalIterator1 first1, BidirectionalIterator1 last1,
+                  ForwardIterator2 first2, ForwardIterator2 last2,
+                  Predicate pred )
+{
+    if( first1 == last1 || first2 == last2 )
+        return last1;
+
+    BidirectionalIterator1 it1 = last1;
+    while( --it1 != first1 && std::find_if( first2, last2, std::bind1st( pred, *it1 ) ) != last2 ) {}
+
+    return it1 == first1 && std::find_if( first2, last2, std::bind1st( pred, *it1 ) ) == last2 ? last1 : it1;
+}
+
+//____________________________________________________________________________//
+
+} // namespace utils
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_ALGORITHM_HPP
diff --git a/vendor/pdalboost/boost/test/utils/assign_op.hpp b/vendor/pdalboost/boost/test/utils/assign_op.hpp
new file mode 100644
index 0000000..cc34ebd
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/assign_op.hpp
@@ -0,0 +1,39 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : overloadable assignment
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_ASSIGN_OP_HPP
+#define BOOST_TEST_UTILS_ASSIGN_OP_HPP
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************             generic assign operator          ************** //
+// ************************************************************************** //
+
+// generic
+template<typename T,typename S>
+inline void
+assign_op( T& t, S const& s, long )
+{
+    t = s;
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#endif // BOOST_TEST_UTILS_ASSIGN_OP_HPP
+
diff --git a/vendor/pdalboost/boost/test/utils/basic_cstring/basic_cstring.hpp b/vendor/pdalboost/boost/test/utils/basic_cstring/basic_cstring.hpp
new file mode 100644
index 0000000..da30a0c
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/basic_cstring/basic_cstring.hpp
@@ -0,0 +1,738 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : class basic_cstring wraps C string and provide std_string like
+//                interface
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_BASIC_CSTRING_HPP
+#define BOOST_TEST_UTILS_BASIC_CSTRING_HPP
+
+// Boost.Test
+#include <boost/test/utils/basic_cstring/basic_cstring_fwd.hpp>
+#include <boost/test/utils/basic_cstring/bcs_char_traits.hpp>
+
+// Boost
+#include <boost/type_traits/remove_cv.hpp>
+
+// STL
+#include <string>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// **************                basic_cstring                 ************** //
+// ************************************************************************** //
+
+template<typename CharT>
+class basic_cstring {
+    typedef basic_cstring<CharT>                        self_type;
+public:
+    // Subtypes
+    typedef ut_detail::bcs_char_traits<CharT>           traits_type;
+    typedef typename ut_detail::bcs_char_traits<CharT>::std_string  std_string;
+
+    typedef CharT                                       value_type;
+    typedef typename remove_cv<value_type>::type        value_ret_type;
+    typedef value_type*                                 pointer;
+    typedef value_type const*                           const_pointer;
+    typedef value_type&                                 reference;
+    typedef const value_type&                           const_reference;
+    typedef std::size_t                                 size_type;
+    typedef std::ptrdiff_t                              difference_type;
+
+    typedef value_type const*                           const_iterator;
+    typedef value_type*                                 iterator;
+
+    // !! should also present reverse_iterator, const_reverse_iterator
+
+#if !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+    enum npos_type { npos = static_cast<size_type>(-1) };
+#else
+    // IBM/VisualAge version 6 is not able to handle enums larger than 4 bytes.
+    // But size_type is 8 bytes in 64bit mode.
+    static const size_type npos = -1 ;
+#endif
+
+    static pointer  null_str();
+
+    // Constructors; default copy constructor is generated by compiler
+    basic_cstring();
+    basic_cstring( std_string const& s );
+    basic_cstring( pointer s );
+    template<typename LenType>
+    basic_cstring( pointer s, LenType len ) : m_begin( s ), m_end( m_begin + len ) {}
+    basic_cstring( pointer first, pointer last );
+
+    // data access methods
+    value_ret_type  operator[]( size_type index ) const;
+    value_ret_type  at( size_type index ) const;
+
+    // size operators
+    size_type       size() const;
+    bool            is_empty() const;
+    void            clear();
+    void            resize( size_type new_len );
+
+    // !! only for STL container conformance use is_empty instead
+    bool            empty() const;
+
+    // Trimming
+    self_type&      trim_right( size_type trim_size );
+    self_type&      trim_left( size_type trim_size );
+    self_type&      trim_right( iterator it );
+    self_type&      trim_left( iterator it );
+#if !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(800))
+    self_type&      trim_left( self_type exclusions = self_type() ) ;
+    self_type&      trim_right( self_type exclusions = self_type() ) ;
+    self_type&      trim( self_type exclusions = self_type() ) ;
+#else
+    // VA C++/XL C++ v6 and v8 has in this case a problem with the default arguments.
+    self_type&      trim_left( self_type exclusions );
+    self_type&      trim_right( self_type exclusions );
+    self_type&      trim( self_type exclusions );
+    self_type&      trim_left()     { return trim_left( self_type() ); }
+    self_type&      trim_right()    { return trim_right( self_type() ); }
+    self_type&      trim()          { return trim( self_type() ); }
+#endif
+
+    // Assignment operators
+    basic_cstring&  operator=( self_type const& s );
+    basic_cstring&  operator=( std_string const& s );
+    basic_cstring&  operator=( pointer s );
+
+    template<typename CharT2>
+    basic_cstring&  assign( basic_cstring<CharT2> const& s )
+    {
+        return *this = basic_cstring<CharT>( s.begin(), s.end() );
+    }
+    template<typename PosType, typename LenType>
+    basic_cstring&  assign( self_type const& s, PosType pos, LenType len )
+    {
+        return *this = self_type( s.m_begin + pos, len );
+    }
+
+    basic_cstring&  assign( std_string const& s );
+    template<typename PosType, typename LenType>
+    basic_cstring&  assign( std_string const& s, PosType pos, LenType len )
+    {
+        return *this = self_type( s.c_str() + pos, len );
+    }
+    basic_cstring&  assign( pointer s );
+    template<typename LenType>
+    basic_cstring&  assign( pointer s, LenType len )
+    {
+        return *this = self_type( s, len );
+    }
+    basic_cstring&  assign( pointer f, pointer l );
+
+    // swapping
+    void            swap( self_type& s );
+
+    // Iterators
+    iterator        begin();
+    const_iterator  begin() const;
+    iterator        end();
+    const_iterator  end() const;
+
+    // !! should have rbegin, rend
+
+    // substring search operation
+    size_type       find( basic_cstring ) const;
+    size_type       rfind( basic_cstring ) const;
+    self_type       substr( size_type beg_index, size_type end_index = npos ) const;
+
+private:
+    static self_type default_trim_ex();
+
+    // Data members
+    iterator        m_begin;
+    iterator        m_end;
+};
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::pointer
+basic_cstring<CharT>::null_str()
+{
+    static CharT null = 0;
+    return &null;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline
+basic_cstring<CharT>::basic_cstring()
+: m_begin( null_str() )
+, m_end( m_begin )
+{
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline
+basic_cstring<CharT>::basic_cstring( std_string const& s )
+: m_begin( s.c_str() )
+, m_end( m_begin + s.size() )
+{
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline
+basic_cstring<CharT>::basic_cstring( pointer s )
+: m_begin( s ? s : null_str() )
+, m_end  ( m_begin + (s ? traits_type::length( s ) : 0 ) )
+{
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline
+basic_cstring<CharT>::basic_cstring( pointer first, pointer last )
+: m_begin( first )
+, m_end( last )
+{
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::value_ret_type
+basic_cstring<CharT>::operator[]( size_type index ) const
+{
+    return m_begin[index];
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::value_ret_type
+basic_cstring<CharT>::at( size_type index ) const
+{
+    if( m_begin + index >= m_end )
+        return static_cast<value_type>(0);
+
+    return m_begin[index];
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::size_type
+basic_cstring<CharT>::size() const
+{
+    return static_cast<size_type>(m_end - m_begin);
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+basic_cstring<CharT>::is_empty() const
+{
+    return m_end == m_begin;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+basic_cstring<CharT>::empty() const
+{
+    return is_empty();
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline void
+basic_cstring<CharT>::clear()
+{
+    m_begin = m_end;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline void
+basic_cstring<CharT>::resize( size_type new_len )
+{
+    if( m_begin + new_len < m_end )
+        m_end = m_begin + new_len;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::trim_left( size_type trim_size )
+{
+    m_begin += trim_size;
+    if( m_end <= m_begin )
+        clear();
+
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::trim_left( iterator it )
+{
+    m_begin = it;
+    if( m_end <= m_begin )
+        clear();
+
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::trim_left( basic_cstring exclusions )
+{
+    if( exclusions.is_empty() )
+        exclusions = default_trim_ex();
+
+    iterator it;
+    for( it = begin(); it != end(); ++it ) {
+        if( traits_type::find( exclusions.begin(), exclusions.size(), *it ) == reinterpret_cast<pointer>(0) )
+            break;
+    }
+
+    return trim_left( it );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::trim_right( size_type trim_size )
+{
+    m_end  -= trim_size;
+    if( m_end <= m_begin )
+        clear();
+
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::trim_right( iterator it )
+{
+    m_end = it;
+    if( m_end <= m_begin )
+        clear();
+
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::trim_right( basic_cstring exclusions )
+{
+    if( exclusions.is_empty() )
+        exclusions = default_trim_ex();
+
+    iterator it;
+
+    for( it = end()-1; it != begin()-1; --it ) {
+        if( self_type::traits_type::find( exclusions.begin(),  exclusions.size(), *it ) == reinterpret_cast<pointer>(0) )
+            break;
+    }
+
+    return trim_right( it+1 );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::trim( basic_cstring exclusions )
+{
+    trim_left( exclusions );
+    trim_right( exclusions );
+
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::operator=( basic_cstring<CharT> const& s )
+{
+    m_begin = s.m_begin;
+    m_end   = s.m_end;
+
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::operator=( std_string const& s )
+{
+    return *this = self_type( s );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::operator=( pointer s )
+{
+    return *this = self_type( s );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::assign( std_string const& s )
+{
+    return *this = self_type( s );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::assign( pointer s )
+{
+    return *this = self_type( s );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>&
+basic_cstring<CharT>::assign( pointer f, pointer l )
+{
+    return *this = self_type( f, l );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline void
+basic_cstring<CharT>::swap( basic_cstring<CharT>& s )
+{
+    // do not want to include alogrithm
+    pointer tmp1    = m_begin;
+    pointer tmp2    = m_end;
+
+    m_begin         = s.m_begin;
+    m_end           = s.m_end;
+
+    s.m_begin       = tmp1;
+    s.m_end         = tmp2;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::iterator
+basic_cstring<CharT>::begin()
+{
+    return m_begin;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::const_iterator
+basic_cstring<CharT>::begin() const
+{
+    return m_begin;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::iterator
+basic_cstring<CharT>::end()
+{
+    return m_end;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::const_iterator
+basic_cstring<CharT>::end() const
+{
+    return m_end;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::size_type
+basic_cstring<CharT>::find( basic_cstring<CharT> str ) const
+{
+    if( str.is_empty() || str.size() > size() )
+        return static_cast<size_type>(npos);
+
+    const_iterator it   = begin();
+    const_iterator last = end() - str.size() + 1;
+
+    while( it != last ) {
+        if( traits_type::compare( it, str.begin(), str.size() ) == 0 )
+            break;
+
+        ++it;
+    }
+
+    return it == last ? npos : static_cast<size_type>(it - begin());
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::size_type
+basic_cstring<CharT>::rfind( basic_cstring<CharT> str ) const
+{
+    if( str.is_empty() || str.size() > size() )
+        return static_cast<size_type>(npos);
+
+    const_iterator it   = end() - str.size();
+    const_iterator last = begin()-1;
+
+    while( it != last ) {
+        if( traits_type::compare( it, str.begin(), str.size() ) == 0 )
+            break;
+
+        --it;
+    }
+
+    return it == last ? static_cast<size_type>(npos) : static_cast<size_type>(it - begin());
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>
+basic_cstring<CharT>::substr( size_type beg_index, size_type end_index ) const
+{
+    return beg_index > size()
+            ?       self_type()
+            : end_index > size()
+                ?   self_type( m_begin + beg_index, m_end )
+                :   self_type( m_begin + beg_index, m_begin + end_index );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline basic_cstring<CharT>
+basic_cstring<CharT>::default_trim_ex()
+{
+    static CharT ws[3] = { CharT(' '), CharT('\t'), CharT('\n') }; // !! wide case
+
+    return self_type( ws, 3 );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************             comparison operators             ************** //
+// ************************************************************************** //
+
+template<typename CharT1,typename CharT2>
+inline bool
+operator==( basic_cstring<CharT1> const& s1, basic_cstring<CharT2> const& s2 )
+{
+    typedef typename basic_cstring<CharT1>::traits_type traits_type;
+    return s1.size() == s2.size() &&
+               traits_type::compare( s1.begin(), s2.begin(), s1.size() ) == 0;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT1,typename CharT2>
+inline bool
+operator==( basic_cstring<CharT1> const& s1, CharT2* s2 )
+{
+#if !defined(__DMC__)
+    return s1 == basic_cstring<CharT2>( s2 );
+#else
+    return s1 == basic_cstring<CharT2 const>( s2 );
+#endif
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+operator==( basic_cstring<CharT> const& s1, typename basic_cstring<CharT>::std_string const& s2 )
+{
+    return s1 == basic_cstring<CharT>( s2 );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT1,typename CharT2>
+inline bool
+operator==( CharT1* s2, basic_cstring<CharT2> const& s1 )
+{
+    return s1 == s2;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+operator==( typename basic_cstring<CharT>::std_string const& s2, basic_cstring<CharT> const& s1 )
+{
+    return s1 == s2;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+operator!=( basic_cstring<CharT> const& s1, CharT* s2 )
+{
+    return !(s1 == s2);
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+operator!=( CharT* s2, basic_cstring<CharT> const& s1 )
+{
+    return !(s1 == s2);
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+operator!=( basic_cstring<CharT> const& s1, basic_cstring<CharT> const& s2 )
+{
+    return !(s1 == s2);
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+operator!=( basic_cstring<CharT> const& s1, typename basic_cstring<CharT>::std_string const& s2 )
+{
+    return !(s1 == s2);
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT>
+inline bool
+operator!=( typename basic_cstring<CharT>::std_string const& s2, basic_cstring<CharT> const& s1 )
+{
+    return !(s1 == s2);
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                  first_char                  ************** //
+// ************************************************************************** //
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::value_ret_type
+first_char( basic_cstring<CharT> source )
+{
+    typedef typename basic_cstring<CharT>::value_ret_type res_type;
+
+    return source.is_empty() ? static_cast<res_type>(0) : *source.begin();
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                  last_char                   ************** //
+// ************************************************************************** //
+
+template<typename CharT>
+inline typename basic_cstring<CharT>::value_ret_type
+last_char( basic_cstring<CharT> source )
+{
+    typedef typename basic_cstring<CharT>::value_ret_type res_type;
+
+    return source.is_empty() ? static_cast<res_type>(0) : *(source.end()-1);
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                  assign_op                   ************** //
+// ************************************************************************** //
+
+template<typename CharT1, typename CharT2>
+inline void
+assign_op( std::basic_string<CharT1>& target, basic_cstring<CharT2> src, int )
+{
+    target.assign( src.begin(), src.size() );
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT1, typename CharT2>
+inline std::basic_string<CharT1>&
+operator+=( std::basic_string<CharT1>& target, basic_cstring<CharT2> const& str )
+{
+    target.append( str.begin(), str.end() );
+    return target;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT1, typename CharT2>
+inline std::basic_string<CharT1>
+operator+( std::basic_string<CharT1> const& lhs, basic_cstring<CharT2> const& rhs )
+{
+    std::basic_string<CharT1> res( lhs );
+
+    res.append( rhs.begin(), rhs.end() );
+    return res;
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+
+} // namespace pdalboost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_BASIC_CSTRING_HPP
diff --git a/vendor/pdalboost/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp b/vendor/pdalboost/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp
new file mode 100644
index 0000000..a9dd7c5
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/basic_cstring/basic_cstring_fwd.hpp
@@ -0,0 +1,40 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : basic_cstring class wrap C string and provide std_string like
+//                interface
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_BASIC_CSTRING_FWD_HPP
+#define BOOST_TEST_UTILS_BASIC_CSTRING_FWD_HPP
+
+#include <boost/detail/workaround.hpp>
+
+namespace pdalboost {
+
+namespace unit_test {
+
+template<typename CharT> class      basic_cstring;
+typedef basic_cstring<char const>   const_string;
+#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590041))
+typedef const_string                literal_string;
+#else
+typedef const_string const          literal_string;
+#endif
+
+typedef char const* const           c_literal_string;
+
+} // namespace unit_test
+
+} // namespace pdalboost
+
+#endif // BOOST_TEST_UTILS_BASIC_CSTRING_FWD_HPP
+
diff --git a/vendor/pdalboost/boost/test/utils/basic_cstring/bcs_char_traits.hpp b/vendor/pdalboost/boost/test/utils/basic_cstring/bcs_char_traits.hpp
new file mode 100644
index 0000000..dec908a
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/basic_cstring/bcs_char_traits.hpp
@@ -0,0 +1,150 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : generic char traits class; wraps std::char_traits
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_BCS_CHAR_TRAITS_HPP
+#define BOOST_TEST_UTILS_BCS_CHAR_TRAITS_HPP
+
+// Boost
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/test/detail/config.hpp>
+#include <boost/type_traits/add_const.hpp>
+
+// STL
+#include <string>                       // std::char_traits
+#include <cstddef>                      // std::size_t
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+
+namespace unit_test {
+
+namespace ut_detail {
+
+template<typename CharT> struct bcs_base_char           { typedef CharT type; };
+
+template<> struct bcs_base_char<char const>             { typedef char type; };
+template<> struct bcs_base_char<unsigned char>          { typedef char type; };
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+template<> struct bcs_base_char<unsigned char const>    { typedef char type; };
+#endif
+
+template<> struct bcs_base_char<wchar_t const>          { typedef wchar_t type; };
+
+// ************************************************************************** //
+// **************               bcs_char_traits                ************** //
+// ************************************************************************** //
+
+template<typename CharT>
+struct bcs_char_traits_impl
+{
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+    typedef CharT const const_char;
+#else
+    typedef typename pdalboost::add_const<CharT>::type const_char;
+#endif
+    static bool eq( CharT c1, CharT c2 )
+    {
+        return c1 == c2;
+    }
+    static bool lt( CharT c1, CharT c2 )
+    {
+        return c1 < c2;
+    }
+
+    static int compare( const_char* cstr1, const_char* cstr2, std::size_t n )
+    {
+        while( n > 0 ) {
+            if( !eq( *cstr1, *cstr2 ) )
+                return lt( *cstr1, *cstr2 ) ? -1 : 1;
+            ++cstr1;
+            ++cstr2;
+            --n;
+        }
+
+        return 0;
+    }
+
+    static std::size_t length( const_char* cstr )
+    {
+        const_char null_char = CharT();
+
+        const_char* ptr = cstr;
+        while( !eq( *ptr, null_char ) )
+            ++ptr;
+
+        return ptr - cstr;
+    }
+
+    static const_char* find( const_char* s, std::size_t n, CharT c )
+    {
+        while( n > 0 ) {
+            if( eq( *s, c ) )
+                return s;
+
+            ++s;
+            --n;
+        }
+        return 0;
+    }
+};
+
+#ifdef BOOST_CLASSIC_IOSTREAMS
+template<typename CharT>
+struct char_traits_with_find : std::string_char_traits<CharT> {
+    static CharT const* find( CharT const* s, std::size_t n, CharT c )
+    {
+        while( n > 0 ) {
+            if( eq( *s, c ) )
+                return s;
+
+            ++s;
+            --n;
+        }
+        return 0;
+    }
+};
+
+template<> struct bcs_char_traits_impl<char> : public char_traits_with_find<char> {};
+template<> struct bcs_char_traits_impl<wchar_t> : public char_traits_with_find<wchar_t> {};
+#else
+template<> struct bcs_char_traits_impl<char> : public std::char_traits<char> {};
+template<> struct bcs_char_traits_impl<wchar_t> : public std::char_traits<wchar_t> {};
+#endif
+
+template<typename CharT>
+class bcs_char_traits : public bcs_char_traits_impl<CharT> {
+    typedef typename ut_detail::bcs_base_char<CharT>::type                              the_base_char;
+public:
+#ifdef BOOST_CLASSIC_IOSTREAMS
+    typedef std::basic_string<the_base_char, std::string_char_traits<the_base_char> >   std_string;
+#else
+    typedef std::basic_string<the_base_char, std::char_traits<the_base_char> >          std_string;
+#endif
+};
+
+} // namespace ut_detail
+
+} // namespace unit_test
+
+} // namespace pdalboost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_BCS_CHAR_TRAITS_HPP
diff --git a/vendor/pdalboost/boost/test/utils/basic_cstring/compare.hpp b/vendor/pdalboost/boost/test/utils/basic_cstring/compare.hpp
new file mode 100644
index 0000000..2fef73f
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/basic_cstring/compare.hpp
@@ -0,0 +1,147 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : class basic_cstring comparisons implementation
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_BASIC_CSTRING_COMPARE_HPP
+#define BOOST_TEST_UTILS_BASIC_CSTRING_COMPARE_HPP
+
+// Boost.Test
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+
+// STL
+#include <functional>
+#include <cctype>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+# if defined(BOOST_NO_STDC_NAMESPACE) && !BOOST_WORKAROUND(__BORLANDC__, <= 0x570)
+namespace std { using ::toupper; }
+# endif
+
+namespace pdalboost {
+
+namespace unit_test {
+
+// ************************************************************************** //
+// **************                case_ins_compare              ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+template<class CharT>
+struct case_ins
+{
+    static bool         eq( CharT c1, CharT c2 ) { return (std::toupper)( c1 ) == (std::toupper)( c2 ); }
+    static bool         lt( CharT c1, CharT c2 ) { return (std::toupper)( c1 ) <  (std::toupper)( c2 ); }
+
+    static int          compare( CharT const* s1, CharT const* s2, std::size_t n )
+    {
+        for( std::size_t i = 0; i < n; ++i ) {
+            if( !eq( s1[i], s2[i] ) )
+                return lt( s1[i], s2[i] ) ? -1 : 1;
+        }
+        return 0;
+    }
+};
+
+} // namespace ut_detail
+
+// ************************************************************************** //
+// **************                  case_ins_eq                 ************** //
+// ************************************************************************** //
+
+template<class CharT>
+inline bool
+case_ins_eq( basic_cstring<CharT> x, basic_cstring<CharT> y )
+{
+    return x.size() == y.size() && ut_detail::case_ins<CharT>::compare( x.begin(), y.begin(), x.size() ) == 0;
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                 case_ins_less                ************** //
+// ************************************************************************** //
+
+template<class CharT>
+class case_ins_less : public std::binary_function<basic_cstring<CharT>,basic_cstring<CharT>,bool>
+{
+public:
+    bool operator()( basic_cstring<CharT> x, basic_cstring<CharT> y ) const
+    {
+        return x.size() != y.size()
+                ? x.size() < y.size()
+                : ut_detail::case_ins<CharT>::compare( x.begin(), y.begin(), x.size() ) < 0;
+    }
+};
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                 operators <,>                ************** //
+// ************************************************************************** //
+
+template<class CharT>
+inline bool
+operator <( pdalboost::unit_test::basic_cstring<CharT> const& x,
+            pdalboost::unit_test::basic_cstring<CharT> const& y )
+{
+    typedef typename pdalboost::unit_test::basic_cstring<CharT>::traits_type traits_type;
+    return x.size() != y.size()
+            ? x.size() < y.size()
+            : traits_type::compare( x.begin(), y.begin(), x.size() ) < 0;
+}
+
+//____________________________________________________________________________//
+
+template<class CharT>
+inline bool
+operator <=( pdalboost::unit_test::basic_cstring<CharT> const& x,
+            pdalboost::unit_test::basic_cstring<CharT> const& y )
+{
+    return !(y < x);
+}
+
+//____________________________________________________________________________//
+
+template<class CharT>
+inline bool
+operator >( pdalboost::unit_test::basic_cstring<CharT> const& x,
+            pdalboost::unit_test::basic_cstring<CharT> const& y )
+{
+    return y < x;
+}
+
+//____________________________________________________________________________//
+
+template<class CharT>
+inline bool
+operator >=( pdalboost::unit_test::basic_cstring<CharT> const& x,
+            pdalboost::unit_test::basic_cstring<CharT> const& y )
+{
+    return !(x < y);
+}
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+
+} // namespace pdalboost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_BASIC_CSTRING_COMPARE_HPP_071894GER
diff --git a/vendor/pdalboost/boost/test/utils/basic_cstring/io.hpp b/vendor/pdalboost/boost/test/utils/basic_cstring/io.hpp
new file mode 100644
index 0000000..cf6006a
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/basic_cstring/io.hpp
@@ -0,0 +1,73 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : basic_cstring i/o implementation
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_BASIC_CSTRING_IO_HPP
+#define BOOST_TEST_UTILS_BASIC_CSTRING_IO_HPP
+
+// Boost.Test
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+
+// STL
+#include <iosfwd>
+#include <string>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+
+namespace unit_test {
+
+#ifdef BOOST_CLASSIC_IOSTREAMS
+
+template<typename CharT>
+inline std::ostream&
+operator<<( std::ostream& os, basic_cstring<CharT> const& str )
+{
+    typedef typename ut_detail::bcs_base_char<CharT>::type char_type;
+    char_type const* const beg = reinterpret_cast<char_type const* const>( str.begin() );
+    char_type const* const end = reinterpret_cast<char_type const* const>( str.end() );
+    os << std::basic_string<char_type>( beg, end - beg );
+
+    return os;
+}
+
+#else
+
+template<typename CharT1, typename Tr,typename CharT2>
+inline std::basic_ostream<CharT1,Tr>&
+operator<<( std::basic_ostream<CharT1,Tr>& os, basic_cstring<CharT2> const& str )
+{
+    CharT1 const* const beg = reinterpret_cast<CharT1 const*>( str.begin() ); // !!
+    CharT1 const* const end = reinterpret_cast<CharT1 const*>( str.end() );
+    os << std::basic_string<CharT1,Tr>( beg, end - beg );
+
+    return os;
+}
+
+#endif
+
+//____________________________________________________________________________//
+
+
+} // namespace unit_test
+
+} // namespace pdalboost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_BASIC_CSTRING_IO_HPP_071894GER
diff --git a/vendor/pdalboost/boost/test/utils/class_properties.hpp b/vendor/pdalboost/boost/test/utils/class_properties.hpp
new file mode 100644
index 0000000..92d8793
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/class_properties.hpp
@@ -0,0 +1,195 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : simple facility that mimmic notion of read-only read-write
+//  properties in C++ classes. Original idea by Henrik Ravn.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_CLASS_PROPERTIES_HPP
+#define BOOST_TEST_UTILS_CLASS_PROPERTIES_HPP
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+// Boost
+#if !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+#include <boost/preprocessor/seq/for_each.hpp>
+#endif
+#include <boost/call_traits.hpp>
+#include <boost/type_traits/add_pointer.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/utility/addressof.hpp>
+
+// STL
+#include <iosfwd>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************                 class_property               ************** //
+// ************************************************************************** //
+
+template<class PropertyType>
+class class_property {
+protected:
+    typedef typename call_traits<PropertyType>::const_reference     read_access_t;
+    typedef typename call_traits<PropertyType>::param_type          write_param_t;
+    typedef typename add_pointer<typename add_const<PropertyType>::type>::type address_res_t;
+public:
+    // Constructor
+                    class_property() : value( PropertyType() ) {}
+    explicit        class_property( write_param_t init_value )
+    : value( init_value ) {}
+
+    // Access methods
+    operator        read_access_t() const   { return value; }
+    read_access_t   get() const             { return value; }
+    bool            operator!() const       { return !value; }
+    address_res_t   operator&() const       { return &value; }
+
+    // Data members
+#ifndef BOOST_TEST_NO_PROTECTED_USING
+protected:
+#endif
+    PropertyType        value;
+};
+
+//____________________________________________________________________________//
+
+#ifdef BOOST_CLASSIC_IOSTREAMS
+
+template<class PropertyType>
+inline std::ostream&
+operator<<( std::ostream& os, class_property<PropertyType> const& p )
+
+#else
+
+template<typename CharT1, typename Tr,class PropertyType>
+inline std::basic_ostream<CharT1,Tr>&
+operator<<( std::basic_ostream<CharT1,Tr>& os, class_property<PropertyType> const& p )
+
+#endif
+{
+    return os << p.get();
+}
+
+//____________________________________________________________________________//
+
+#define DEFINE_PROPERTY_FREE_BINARY_OPERATOR( op )                              \
+template<class PropertyType>                                                    \
+inline bool                                                                     \
+operator op( PropertyType const& lhs, class_property<PropertyType> const& rhs ) \
+{                                                                               \
+    return lhs op rhs.get();                                                    \
+}                                                                               \
+template<class PropertyType>                                                    \
+inline bool                                                                     \
+operator op( class_property<PropertyType> const& lhs, PropertyType const& rhs ) \
+{                                                                               \
+    return lhs.get() op rhs;                                                    \
+}                                                                               \
+template<class PropertyType>                                                    \
+inline bool                                                                     \
+operator op( class_property<PropertyType> const& lhs,                           \
+             class_property<PropertyType> const& rhs )                          \
+{                                                                               \
+    return lhs.get() op rhs.get();                                              \
+}                                                                               \
+/**/
+
+DEFINE_PROPERTY_FREE_BINARY_OPERATOR( == )
+DEFINE_PROPERTY_FREE_BINARY_OPERATOR( != )
+
+#undef DEFINE_PROPERTY_FREE_BINARY_OPERATOR
+
+// ************************************************************************** //
+// **************               readonly_property              ************** //
+// ************************************************************************** //
+
+template<class PropertyType>
+class readonly_property : public class_property<PropertyType> {
+    typedef class_property<PropertyType>         base_prop;
+    typedef typename base_prop::address_res_t    arrow_res_t;
+protected:
+    typedef typename base_prop::write_param_t    write_param_t;
+public:
+    // Constructor
+                    readonly_property() {}
+    explicit        readonly_property( write_param_t init_value ) : base_prop( init_value ) {}
+
+    // access methods
+    arrow_res_t     operator->() const      { return pdalboost::addressof( base_prop::value ); }
+};
+
+//____________________________________________________________________________//
+
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+
+#define BOOST_READONLY_PROPERTY( property_type, friends ) pdalboost::unit_test::readwrite_property<property_type >
+
+#else
+
+#define BOOST_READONLY_PROPERTY_DECLARE_FRIEND(r, data, elem) friend class elem;
+
+#define BOOST_READONLY_PROPERTY( property_type, friends )                           \
+class BOOST_JOIN( readonly_property, __LINE__ )                                     \
+: public pdalboost::unit_test::readonly_property<property_type > {                      \
+    typedef pdalboost::unit_test::readonly_property<property_type > base_prop;          \
+    BOOST_PP_SEQ_FOR_EACH( BOOST_READONLY_PROPERTY_DECLARE_FRIEND, ' ', friends )   \
+    typedef base_prop::write_param_t  write_param_t;                                \
+public:                                                                             \
+                BOOST_JOIN( readonly_property, __LINE__ )() {}                      \
+    explicit    BOOST_JOIN( readonly_property, __LINE__ )( write_param_t init_v  )  \
+    : base_prop( init_v ) {}                                                        \
+}                                                                                   \
+/**/
+
+#endif
+
+// ************************************************************************** //
+// **************              readwrite_property              ************** //
+// ************************************************************************** //
+
+template<class PropertyType>
+class readwrite_property : public class_property<PropertyType> {
+    typedef class_property<PropertyType>                base_prop;
+    typedef typename add_pointer<PropertyType>::type    arrow_res_t;
+    typedef typename base_prop::address_res_t           const_arrow_res_t;
+    typedef typename base_prop::write_param_t           write_param_t;
+public:
+                    readwrite_property() : base_prop() {}
+    explicit        readwrite_property( write_param_t init_value ) : base_prop( init_value ) {}
+
+    // access methods
+    void            set( write_param_t v )  { base_prop::value = v; }
+    arrow_res_t     operator->()            { return pdalboost::addressof( base_prop::value ); }
+    const_arrow_res_t operator->() const    { return pdalboost::addressof( base_prop::value ); }
+
+#ifndef BOOST_TEST_NO_PROTECTED_USING
+    using           base_prop::value;
+#endif
+};
+
+//____________________________________________________________________________//
+
+} // unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#undef BOOST_TEST_NO_PROTECTED_USING
+
+#endif // BOOST_TEST_UTILS_CLASS_PROPERTIES_HPP
diff --git a/vendor/pdalboost/boost/test/utils/custom_manip.hpp b/vendor/pdalboost/boost/test/utils/custom_manip.hpp
new file mode 100644
index 0000000..e93bfa4
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/custom_manip.hpp
@@ -0,0 +1,61 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : simple helpers for creating cusom output manipulators
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_CUSTOM_MANIP_HPP
+#define BOOST_TEST_UTILS_CUSTOM_MANIP_HPP
+
+// STL
+#include <iosfwd>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace utils {
+
+// ************************************************************************** //
+// **************          custom manipulators helpers         ************** //
+// ************************************************************************** //
+
+template<typename Manip>
+struct custom_printer {
+    explicit custom_printer( std::ostream& ostr ) : m_ostr( &ostr ) {}
+
+    std::ostream& operator*() const { return *m_ostr; }
+
+private:
+    std::ostream* const m_ostr;
+};
+
+//____________________________________________________________________________//
+
+template<typename Uniq> struct custom_manip {};
+
+//____________________________________________________________________________//
+
+template<typename Uniq>
+inline custom_printer<custom_manip<Uniq> >
+operator<<( std::ostream& ostr, custom_manip<Uniq> const& ) { return custom_printer<custom_manip<Uniq> >( ostr ); }
+
+//____________________________________________________________________________//
+
+} // namespace utils
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_CUSTOM_MANIP_HPP
diff --git a/vendor/pdalboost/boost/test/utils/foreach.hpp b/vendor/pdalboost/boost/test/utils/foreach.hpp
new file mode 100644
index 0000000..6f0dca6
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/foreach.hpp
@@ -0,0 +1,316 @@
+//  (C) Copyright Eric Niebler 2004-2005
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : this is an abridged version of an excelent BOOST_FOREACH facility
+//  presented by Eric Niebler. I am so fond of it so I can't wait till it
+//  going to be accepted into Boost. Also I need version with less number of dependencies
+//  and more portable. This version doesn't support rvalues and will reeveluate it's
+//  parameters, but should be good enough for my purposes.
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_FOREACH_HPP
+#define BOOST_TEST_UTILS_FOREACH_HPP
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+// Boost
+#include <boost/type.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/test/detail/workaround.hpp>
+
+#include <boost/type_traits/is_const.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace for_each {
+
+// ************************************************************************** //
+// **************                  static_any                  ************** //
+// ************************************************************************** //
+
+struct static_any_base
+{
+    operator bool() const { return false; }
+};
+
+//____________________________________________________________________________//
+
+template<typename Iter>
+struct static_any : static_any_base
+{
+    static_any( Iter const& t ) : m_it( t ) {}
+
+    mutable Iter m_it;
+};
+
+//____________________________________________________________________________//
+
+typedef static_any_base const& static_any_t;
+
+//____________________________________________________________________________//
+
+template<typename Iter>
+inline Iter&
+static_any_cast( static_any_t a, Iter* = 0 )
+{
+    return static_cast<Iter&>( static_cast<static_any<Iter> const&>( a ).m_it );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                   is_const                   ************** //
+// ************************************************************************** //
+
+template<typename C>
+inline is_const<C>
+is_const_coll( C& )
+{
+    return is_const<C>();
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                     begin                    ************** //
+// ************************************************************************** //
+
+template<typename C>
+inline static_any<BOOST_DEDUCED_TYPENAME C::iterator>
+begin( C& t, mpl::false_ )
+{
+    return static_any<BOOST_DEDUCED_TYPENAME C::iterator>( t.begin() );
+}
+
+//____________________________________________________________________________//
+
+template<typename C>
+inline static_any<BOOST_DEDUCED_TYPENAME C::const_iterator>
+begin( C const& t, mpl::true_ )
+{
+    return static_any<BOOST_DEDUCED_TYPENAME C::const_iterator>( t.begin() );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                      end                     ************** //
+// ************************************************************************** //
+
+template<typename C>
+inline static_any<BOOST_DEDUCED_TYPENAME C::iterator>
+end( C& t, mpl::false_ )
+{
+    return static_any<BOOST_DEDUCED_TYPENAME C::iterator>( t.end() );
+}
+
+//____________________________________________________________________________//
+
+template<typename C>
+inline static_any<BOOST_DEDUCED_TYPENAME C::const_iterator>
+end( C const& t, mpl::true_ )
+{
+    return static_any<BOOST_DEDUCED_TYPENAME C::const_iterator>( t.end() );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                      done                    ************** //
+// ************************************************************************** //
+
+template<typename C>
+inline bool
+done( static_any_t cur, static_any_t end, C&, mpl::false_ )
+{
+    return  static_any_cast<BOOST_DEDUCED_TYPENAME C::iterator>( cur ) ==
+            static_any_cast<BOOST_DEDUCED_TYPENAME C::iterator>( end );
+}
+
+//____________________________________________________________________________//
+
+template<typename C>
+inline bool
+done( static_any_t cur, static_any_t end, C const&, mpl::true_ )
+{
+    return  static_any_cast<BOOST_DEDUCED_TYPENAME C::const_iterator>( cur ) ==
+            static_any_cast<BOOST_DEDUCED_TYPENAME C::const_iterator>( end );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                      next                    ************** //
+// ************************************************************************** //
+
+template<typename C>
+inline void
+next( static_any_t cur, C&, mpl::false_ )
+{
+    ++static_any_cast<BOOST_DEDUCED_TYPENAME C::iterator>( cur );
+}
+
+//____________________________________________________________________________//
+
+template<typename C>
+inline void
+next( static_any_t cur, C const&, mpl::true_ )
+{
+    ++static_any_cast<BOOST_DEDUCED_TYPENAME C::const_iterator>( cur );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                      prev                    ************** //
+// ************************************************************************** //
+
+template<typename C>
+inline void
+prev( static_any_t cur, C&, mpl::false_ )
+{
+    --static_any_cast<BOOST_DEDUCED_TYPENAME C::iterator>( cur );
+}
+
+//____________________________________________________________________________//
+
+template<typename C>
+inline void
+prev( static_any_t cur, C const&, mpl::true_ )
+{
+    --static_any_cast<BOOST_DEDUCED_TYPENAME C::const_iterator>( cur );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                      deref                   ************** //
+// ************************************************************************** //
+
+template<class RefType,typename C>
+inline RefType
+deref( static_any_t cur, C&, ::pdalboost::type<RefType>, mpl::false_ )
+{
+    return *static_any_cast<BOOST_DEDUCED_TYPENAME C::iterator>( cur );
+}
+
+//____________________________________________________________________________//
+
+template<class RefType,typename C>
+inline RefType
+deref( static_any_t cur, C const&, ::pdalboost::type<RefType>, mpl::true_ )
+{
+    return *static_any_cast<BOOST_DEDUCED_TYPENAME C::const_iterator>( cur );
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************              BOOST_TEST_FOREACH              ************** //
+// ************************************************************************** //
+
+#define BOOST_TEST_FE_ANY                   ::pdalboost::unit_test::for_each::static_any_t
+#define BOOST_TEST_FE_IS_CONST( COL )       ::pdalboost::unit_test::for_each::is_const_coll( COL )
+
+#define BOOST_TEST_FE_BEG( COL )            \
+    ::pdalboost::unit_test::for_each::begin(    \
+        COL,                                \
+        BOOST_TEST_FE_IS_CONST( COL ) )     \
+/**/
+
+#define BOOST_TEST_FE_END( COL )            \
+    ::pdalboost::unit_test::for_each::end(      \
+        COL,                                \
+        BOOST_TEST_FE_IS_CONST( COL ) )     \
+/**/
+
+#define BOOST_TEST_FE_DONE( COL )           \
+    ::pdalboost::unit_test::for_each::done(     \
+        BOOST_TEST_FE_CUR_VAR,              \
+        BOOST_TEST_FE_END_VAR,              \
+        COL,                                \
+        BOOST_TEST_FE_IS_CONST( COL ) )     \
+/**/
+
+#define BOOST_TEST_FE_NEXT( COL )           \
+    ::pdalboost::unit_test::for_each::next(     \
+        BOOST_TEST_FE_CUR_VAR,              \
+        COL,                                \
+        BOOST_TEST_FE_IS_CONST( COL ) )     \
+/**/
+
+#define BOOST_TEST_FE_PREV( COL )           \
+    ::pdalboost::unit_test::for_each::prev(     \
+        BOOST_TEST_FE_CUR_VAR,              \
+        COL,                                \
+        BOOST_TEST_FE_IS_CONST( COL ) )     \
+/**/
+
+#define BOOST_FOREACH_NOOP(COL)             \
+    ((void)&(COL))
+
+#define BOOST_TEST_FE_DEREF( COL, RefType ) \
+    ::pdalboost::unit_test::for_each::deref(    \
+        BOOST_TEST_FE_CUR_VAR,              \
+        COL,                                \
+        ::pdalboost::type<RefType >(),          \
+        BOOST_TEST_FE_IS_CONST( COL ) )     \
+/**/
+
+#if BOOST_WORKAROUND( BOOST_MSVC, == 1310 )
+#define BOOST_TEST_LINE_NUM
+#else
+#define BOOST_TEST_LINE_NUM     __LINE__
+#endif
+
+#define BOOST_TEST_FE_CUR_VAR   BOOST_JOIN( _fe_cur_, BOOST_TEST_LINE_NUM )
+#define BOOST_TEST_FE_END_VAR   BOOST_JOIN( _fe_end_, BOOST_TEST_LINE_NUM )
+#define BOOST_TEST_FE_CON_VAR   BOOST_JOIN( _fe_con_, BOOST_TEST_LINE_NUM )
+
+#define BOOST_TEST_FOREACH( RefType, var, COL )                                             \
+if( BOOST_TEST_FE_ANY BOOST_TEST_FE_CUR_VAR = BOOST_TEST_FE_BEG( COL ) ) {} else            \
+if( BOOST_TEST_FE_ANY BOOST_TEST_FE_END_VAR = BOOST_TEST_FE_END( COL ) ) {} else            \
+for( bool BOOST_TEST_FE_CON_VAR = true;                                                     \
+          BOOST_TEST_FE_CON_VAR && !BOOST_TEST_FE_DONE( COL );                              \
+          BOOST_TEST_FE_CON_VAR ? BOOST_TEST_FE_NEXT( COL ) : BOOST_FOREACH_NOOP( COL ))    \
+                                                                                            \
+    if( (BOOST_TEST_FE_CON_VAR = false, false) ) {} else                                    \
+    for( RefType var = BOOST_TEST_FE_DEREF( COL, RefType );                                 \
+         !BOOST_TEST_FE_CON_VAR; BOOST_TEST_FE_CON_VAR = true )                             \
+/**/
+
+#define BOOST_TEST_REVERSE_FOREACH( RefType, var, COL )                                     \
+if( BOOST_TEST_FE_ANY BOOST_TEST_FE_CUR_VAR = BOOST_TEST_FE_END( COL ) ) {} else            \
+if( BOOST_TEST_FE_ANY BOOST_TEST_FE_END_VAR = BOOST_TEST_FE_BEG( COL ) ) {} else            \
+for( bool BOOST_TEST_FE_CON_VAR = true;                                                     \
+          BOOST_TEST_FE_CON_VAR && !BOOST_TEST_FE_DONE( COL ); )                            \
+                                                                                            \
+    if( (BOOST_TEST_FE_CON_VAR = false, false) ) {} else                                    \
+    if( (BOOST_TEST_FE_PREV( COL ), false) ) {} else                                        \
+    for( RefType var = BOOST_TEST_FE_DEREF( COL, RefType );                                 \
+         !BOOST_TEST_FE_CON_VAR; BOOST_TEST_FE_CON_VAR = true )                             \
+/**/
+
+//____________________________________________________________________________//
+
+} // namespace for_each
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_FOREACH_HPP
diff --git a/vendor/pdalboost/boost/test/utils/is_cstring.hpp b/vendor/pdalboost/boost/test/utils/is_cstring.hpp
new file mode 100644
index 0000000..bbff156
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/is_cstring.hpp
@@ -0,0 +1,58 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : defines the is_cstring type trait
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_IS_CSTRING_HPP
+#define BOOST_TEST_UTILS_IS_CSTRING_HPP
+
+// Boost
+#include <boost/mpl/bool.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/decay.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************                  is_cstring                  ************** //
+// ************************************************************************** //
+
+namespace ut_detail {
+
+template<typename T>
+struct is_cstring_impl : public mpl::false_ {};
+
+template<typename T>
+struct is_cstring_impl<T const*> : public is_cstring_impl<T*> {};
+
+template<typename T>
+struct is_cstring_impl<T const* const> : public is_cstring_impl<T*> {};
+
+template<>
+struct is_cstring_impl<char*> : public mpl::true_ {};
+
+template<>
+struct is_cstring_impl<wchar_t*> : public mpl::true_ {};
+
+} // namespace ut_detail
+
+template<typename T>
+struct is_cstring : public ut_detail::is_cstring_impl<typename decay<T>::type> {};
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#endif // BOOST_TEST_UTILS_IS_CSTRING_HPP
diff --git a/vendor/pdalboost/boost/test/utils/is_forward_iterable.hpp b/vendor/pdalboost/boost/test/utils/is_forward_iterable.hpp
new file mode 100644
index 0000000..9723e66
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/is_forward_iterable.hpp
@@ -0,0 +1,166 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//! @file
+//! Defines the is_forward_iterable collection type trait
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_IS_FORWARD_ITERABLE_HPP
+#define BOOST_TEST_UTILS_IS_FORWARD_ITERABLE_HPP
+
+#if defined(BOOST_NO_CXX11_DECLTYPE) || \
+    defined(BOOST_NO_CXX11_NULLPTR) || \
+    defined(BOOST_NO_CXX11_TRAILING_RESULT_TYPES)
+
+  // some issues with boost.config
+  #if !defined(BOOST_MSVC) || BOOST_MSVC_FULL_VER < 170061030 /* VC2012 upd 5 */
+    #define BOOST_TEST_FWD_ITERABLE_CXX03
+  #endif
+#endif
+
+#if defined(BOOST_TEST_FWD_ITERABLE_CXX03)
+// Boost
+#include <boost/mpl/bool.hpp>
+
+// STL
+#include <list>
+#include <vector>
+#include <map>
+#include <set>
+
+#else
+
+// Boost
+#include <boost/utility/declval.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/test/utils/is_cstring.hpp>
+
+// STL
+#include <utility>
+#include <type_traits>
+
+#endif
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************             is_forward_iterable              ************** //
+// ************************************************************************** //
+
+#if defined(BOOST_TEST_FWD_ITERABLE_CXX03) && !defined(BOOST_TEST_DOXYGEN_DOC__)
+template<typename T>
+struct is_forward_iterable : public mpl::false_ {};
+
+template<typename T>
+struct is_forward_iterable<T const> : public is_forward_iterable<T> {};
+
+template<typename T>
+struct is_forward_iterable<T&> : public is_forward_iterable<T> {};
+
+template<typename T, typename A>
+struct is_forward_iterable< std::vector<T, A> > : public mpl::true_ {};
+
+template<typename T, typename A>
+struct is_forward_iterable< std::list<T, A> > : public mpl::true_ {};
+
+template<typename K, typename V, typename C, typename A>
+struct is_forward_iterable< std::map<K, V, C, A> > : public mpl::true_ {};
+
+template<typename K, typename C, typename A>
+struct is_forward_iterable< std::set<K, C, A> > : public mpl::true_ {};
+
+#else
+
+namespace ut_detail {
+
+template<typename T>
+struct is_present : public mpl::true_ {};
+
+//____________________________________________________________________________//
+
+// some compiler do not implement properly decltype non expression involving members (eg. VS2013)
+// a workaround is to use -> decltype syntax.
+template <class T>
+struct has_member_size {
+private:
+    struct nil_t {};
+    template<typename U> static auto  test( U* ) -> decltype(pdalboost::declval<U>().size());
+    template<typename>   static nil_t test( ... );
+
+public:
+    static bool const value = !std::is_same< decltype(test<T>( nullptr )), nil_t>::value;
+};
+
+//____________________________________________________________________________//
+
+template <class T>
+struct has_member_begin {
+private:
+    struct nil_t {};
+    template<typename U>  static auto  test( U* ) -> decltype(pdalboost::declval<U>().begin());
+    template<typename>    static nil_t test( ... );
+public:
+    static bool const value = !std::is_same< decltype(test<T>( nullptr )), nil_t>::value;
+};
+
+//____________________________________________________________________________//
+
+template <class T>
+struct has_member_end {
+private:
+    struct nil_t {};
+    template<typename U>  static auto  test( U* ) -> decltype(pdalboost::declval<U>().end());
+    template<typename>    static nil_t test( ... );
+public:
+    static bool const value = !std::is_same< decltype(test<T>( nullptr )), nil_t>::value;
+};
+
+//____________________________________________________________________________//
+
+template <class T, class enabled = void>
+struct is_forward_iterable_impl : std::false_type {
+};
+
+//____________________________________________________________________________//
+
+template <class T>
+struct is_forward_iterable_impl<
+    T,
+    typename std::enable_if<
+    is_present<typename T::const_iterator>::value &&
+    is_present<typename T::value_type>::value &&
+    has_member_size<T>::value &&
+    has_member_begin<T>::value &&
+    has_member_end<T>::value &&
+    !is_cstring<T>::value
+    >::type
+> : std::true_type
+{};
+
+//____________________________________________________________________________//
+
+} // namespace ut_detail
+
+/*! Indicates that a specific type implements the forward iterable concept. */
+template<typename T>
+struct is_forward_iterable {
+    typedef typename std::remove_reference<T>::type T_ref;
+    typedef ut_detail::is_forward_iterable_impl<T_ref> is_fwd_it_t;
+    typedef mpl::bool_<is_fwd_it_t::value> type;
+    enum { value = is_fwd_it_t::value };
+};
+
+#endif /* defined(BOOST_TEST_FWD_ITERABLE_CXX03) */
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#endif // BOOST_TEST_UTILS_IS_FORWARD_ITERABLE_HPP
diff --git a/vendor/pdalboost/boost/test/utils/iterator/input_iterator_facade.hpp b/vendor/pdalboost/boost/test/utils/iterator/input_iterator_facade.hpp
new file mode 100644
index 0000000..25a6bbc
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/iterator/input_iterator_facade.hpp
@@ -0,0 +1,105 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//! Input iterator facade
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_INPUT_ITERATOR_FACADE_HPP
+#define BOOST_TEST_UTILS_INPUT_ITERATOR_FACADE_HPP
+
+// Boost
+#include <boost/iterator/iterator_facade.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace utils {
+
+// ************************************************************************** //
+// **************          input_iterator_core_access          ************** //
+// ************************************************************************** //
+
+class input_iterator_core_access
+{
+#if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+public:
+#else
+    template <class I, class V, class R, class TC> friend class input_iterator_facade;
+#endif
+
+    template <class Facade>
+    static bool get( Facade& f )
+    {
+        return f.get();
+    }
+
+private:
+    // objects of this class are useless
+    input_iterator_core_access(); //undefined
+};
+
+// ************************************************************************** //
+// **************            input_iterator_facade             ************** //
+// ************************************************************************** //
+
+template<typename Derived,
+         typename ValueType,
+         typename Reference = ValueType const&,
+         typename Traversal = single_pass_traversal_tag>
+class input_iterator_facade : public iterator_facade<Derived,ValueType,Traversal,Reference>
+{
+public:
+    // Constructor
+    input_iterator_facade() : m_valid( false ), m_value() {}
+
+protected: // provide access to the Derived
+    void                init()
+    {
+        m_valid = true;
+        increment();
+    }
+
+    // Data members
+    mutable bool        m_valid;
+    ValueType           m_value;
+
+private:
+    friend class pdalboost::iterator_core_access;
+
+    // iterator facade interface implementation
+    void                increment()
+    {
+        // we make post-end incrementation indefinetly safe
+        if( m_valid )
+            m_valid = input_iterator_core_access::get( *static_cast<Derived*>(this) );
+    }
+    Reference           dereference() const
+    {
+        return m_value;
+    }
+
+    // iterator facade interface implementation
+    bool                equal( input_iterator_facade const& rhs ) const
+    {
+        // two invalid iterator equals, inequal otherwise
+        return !m_valid && !rhs.m_valid;
+    }
+};
+
+} // namespace utils
+} // namespace unit_test
+} // namespace pdalboost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_INPUT_ITERATOR_FACADE_HPP
diff --git a/vendor/pdalboost/boost/test/utils/iterator/token_iterator.hpp b/vendor/pdalboost/boost/test/utils/iterator/token_iterator.hpp
new file mode 100644
index 0000000..5128a60
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/iterator/token_iterator.hpp
@@ -0,0 +1,417 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : token iterator for string and range tokenization
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_TOKEN_ITERATOR_HPP
+#define BOOST_TEST_UTILS_TOKEN_ITERATOR_HPP
+
+// Boost
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/iterator/iterator_categories.hpp>
+#include <boost/iterator/iterator_traits.hpp>
+
+#include <boost/test/utils/iterator/input_iterator_facade.hpp>
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+#include <boost/test/utils/named_params.hpp>
+#include <boost/test/utils/foreach.hpp>
+
+// STL
+#include <iosfwd>
+#include <cctype>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{ using ::ispunct; using ::isspace; }
+#endif
+
+namespace pdalboost {
+namespace unit_test {
+namespace utils {
+
+// ************************************************************************** //
+// **************               ti_delimeter_type              ************** //
+// ************************************************************************** //
+
+enum ti_delimeter_type {
+    dt_char,        // character is delimeter if it among explicit list of some characters
+    dt_ispunct,     // character is delimeter if it satisfies ispunct functor
+    dt_isspace,     // character is delimeter if it satisfies isspace functor
+    dt_none         // no character is delimeter
+};
+
+namespace ut_detail {
+
+// ************************************************************************** //
+// **************             default_char_compare             ************** //
+// ************************************************************************** //
+
+template<typename CharT>
+class default_char_compare {
+public:
+    bool operator()( CharT c1, CharT c2 )
+    {
+#ifdef BOOST_CLASSIC_IOSTREAMS
+        return std::string_char_traits<CharT>::eq( c1, c2 );
+#else
+        return std::char_traits<CharT>::eq( c1, c2 );
+#endif
+    }
+};
+
+// ************************************************************************** //
+// **************                 delim_policy                 ************** //
+// ************************************************************************** //
+
+template<typename CharT,typename CharCompare>
+class delim_policy {
+    typedef basic_cstring<CharT const> cstring;
+public:
+    // Constructor
+    explicit    delim_policy( ti_delimeter_type type_ = dt_char, cstring delimeters_ = cstring() )
+    : m_type( type_ )
+    {
+        set_delimeters( delimeters_ );
+    }
+
+    void        set_delimeters( ti_delimeter_type type_ ) { m_type = type_; }
+    void        set_delimeters( cstring delimeters_ )
+    {
+        m_delimeters = delimeters_;
+
+        if( !m_delimeters.is_empty() )
+            m_type = dt_char;
+    }
+    void        set_delimeters( nfp::nil ) {}
+    bool        operator()( CharT c )
+    {
+        switch( m_type ) {
+        case dt_char: {
+            BOOST_TEST_FOREACH( CharT, delim, m_delimeters )
+                if( CharCompare()( delim, c ) )
+                    return true;
+
+            return false;
+        }
+        case dt_ispunct:
+            return (std::ispunct)( c ) != 0;
+        case dt_isspace:
+            return (std::isspace)( c ) != 0;
+        case dt_none:
+            return false;
+        }
+
+        return false;
+    }
+
+private:
+    // Data members
+    cstring             m_delimeters;
+    ti_delimeter_type   m_type;
+};
+
+// ************************************************************************** //
+// **************                 token_assigner               ************** //
+// ************************************************************************** //
+
+template<typename TraversalTag>
+struct token_assigner {
+#if BOOST_WORKAROUND( BOOST_DINKUMWARE_STDLIB, < 306 )
+    template<typename Iterator, typename C, typename T>
+    static void assign( Iterator b, Iterator e, std::basic_string<C,T>& t )
+    { for( ; b != e; ++b ) t += *b; }
+
+    template<typename Iterator, typename C>
+    static void assign( Iterator b, Iterator e, basic_cstring<C>& t )  { t.assign( b, e ); }
+#else
+    template<typename Iterator, typename Token>
+    static void assign( Iterator b, Iterator e, Token& t )  { t.assign( b, e ); }
+#endif
+    template<typename Iterator, typename Token>
+    static void append_move( Iterator& b, Token& )          { ++b; }
+};
+
+//____________________________________________________________________________//
+
+template<>
+struct token_assigner<single_pass_traversal_tag> {
+    template<typename Iterator, typename Token>
+    static void assign( Iterator /*b*/, Iterator /*e*/, Token& /*t*/ )  {}
+
+    template<typename Iterator, typename Token>
+    static void append_move( Iterator& b, Token& t )        { t += *b; ++b; }
+};
+
+} // namespace ut_detail
+
+// ************************************************************************** //
+// **************                  modifiers                   ************** //
+// ************************************************************************** //
+
+namespace {
+nfp::keyword<struct dropped_delimeters_t >           dropped_delimeters;
+nfp::keyword<struct kept_delimeters_t >              kept_delimeters;
+nfp::typed_keyword<bool,struct keep_empty_tokens_t > keep_empty_tokens;
+nfp::typed_keyword<std::size_t,struct max_tokens_t > max_tokens;
+}
+
+// ************************************************************************** //
+// **************             token_iterator_base              ************** //
+// ************************************************************************** //
+
+template<typename Derived,
+         typename CharT,
+         typename CharCompare   = ut_detail::default_char_compare<CharT>,
+         typename ValueType     = basic_cstring<CharT const>,
+         typename Reference     = basic_cstring<CharT const>,
+         typename Traversal     = forward_traversal_tag>
+class token_iterator_base
+: public input_iterator_facade<Derived,ValueType,Reference,Traversal> {
+    typedef basic_cstring<CharT const>                                      cstring;
+    typedef ut_detail::delim_policy<CharT,CharCompare>                      delim_policy;
+    typedef input_iterator_facade<Derived,ValueType,Reference,Traversal>    base;
+
+protected:
+    // Constructor
+    explicit    token_iterator_base()
+    : m_is_dropped( dt_isspace )
+    , m_is_kept( dt_ispunct )
+    , m_keep_empty_tokens( false )
+    , m_tokens_left( static_cast<std::size_t>(-1) )
+    , m_token_produced( false )
+    {
+    }
+
+    template<typename Modifier>
+    void
+    apply_modifier( Modifier const& m )
+    {
+        if( m.has( dropped_delimeters ) )
+            m_is_dropped.set_delimeters( m[dropped_delimeters] );
+
+        if( m.has( kept_delimeters ) )
+            m_is_kept.set_delimeters( m[kept_delimeters] );
+
+        if( m.has( keep_empty_tokens ) )
+            m_keep_empty_tokens = true;
+
+        nfp::opt_assign( m_tokens_left, m, max_tokens );
+    }
+
+    template<typename Iter>
+    bool                    get( Iter& begin, Iter end )
+    {
+        typedef ut_detail::token_assigner<BOOST_DEDUCED_TYPENAME iterator_traversal<Iter>::type> Assigner;
+        Iter check_point;
+
+        this->m_value.clear();
+
+        if( !m_keep_empty_tokens ) {
+            while( begin != end && m_is_dropped( *begin ) )
+                ++begin;
+
+            if( begin == end )
+                return false;
+
+            check_point = begin;
+
+            if( m_tokens_left == 1 )
+                while( begin != end )
+                    Assigner::append_move( begin, this->m_value );
+            else if( m_is_kept( *begin ) )
+                Assigner::append_move( begin, this->m_value );
+            else
+                while( begin != end && !m_is_dropped( *begin ) && !m_is_kept( *begin ) )
+                    Assigner::append_move( begin, this->m_value );
+
+            --m_tokens_left;
+        }
+        else { // m_keep_empty_tokens is true
+            check_point = begin;
+
+            if( begin == end ) {
+                if( m_token_produced )
+                    return false;
+
+                m_token_produced = true;
+            }
+            if( m_is_kept( *begin ) ) {
+                if( m_token_produced )
+                    Assigner::append_move( begin, this->m_value );
+
+                m_token_produced = !m_token_produced;
+            }
+            else if( !m_token_produced && m_is_dropped( *begin ) )
+                m_token_produced = true;
+            else {
+                if( m_is_dropped( *begin ) )
+                    check_point = ++begin;
+
+                while( begin != end && !m_is_dropped( *begin ) && !m_is_kept( *begin ) )
+                    Assigner::append_move( begin, this->m_value );
+
+                m_token_produced = true;
+            }
+        }
+
+        Assigner::assign( check_point, begin, this->m_value );
+
+        return true;
+    }
+
+private:
+    // Data members
+    delim_policy            m_is_dropped;
+    delim_policy            m_is_kept;
+    bool                    m_keep_empty_tokens;
+    std::size_t             m_tokens_left;
+    bool                    m_token_produced;
+};
+
+// ************************************************************************** //
+// **************          basic_string_token_iterator         ************** //
+// ************************************************************************** //
+
+template<typename CharT,
+         typename CharCompare = ut_detail::default_char_compare<CharT> >
+class basic_string_token_iterator
+: public token_iterator_base<basic_string_token_iterator<CharT,CharCompare>,CharT,CharCompare> {
+    typedef basic_cstring<CharT const> cstring;
+    typedef token_iterator_base<basic_string_token_iterator<CharT,CharCompare>,CharT,CharCompare> base;
+public:
+    explicit    basic_string_token_iterator() {}
+    explicit    basic_string_token_iterator( cstring src )
+    : m_src( src )
+    {
+        this->init();
+    }
+
+    template<typename Src, typename Modifier>
+    basic_string_token_iterator( Src src, Modifier const& m )
+    : m_src( src )
+    {
+        this->apply_modifier( m );
+
+        this->init();
+    }
+
+private:
+    friend class input_iterator_core_access;
+
+    // input iterator implementation
+    bool        get()
+    {
+        typename cstring::iterator begin = m_src.begin();
+        bool res = base::get( begin, m_src.end() );
+
+        m_src.assign( begin, m_src.end() );
+
+        return res;
+    }
+
+    // Data members
+    cstring     m_src;
+};
+
+typedef basic_string_token_iterator<char>       string_token_iterator;
+typedef basic_string_token_iterator<wchar_t>    wstring_token_iterator;
+
+// ************************************************************************** //
+// **************              range_token_iterator            ************** //
+// ************************************************************************** //
+
+template<typename Iter,
+         typename CharCompare = ut_detail::default_char_compare<BOOST_DEDUCED_TYPENAME iterator_value<Iter>::type>,
+         typename ValueType   = std::basic_string<BOOST_DEDUCED_TYPENAME iterator_value<Iter>::type>,
+         typename Reference   = ValueType const&>
+class range_token_iterator
+: public token_iterator_base<range_token_iterator<Iter,CharCompare,ValueType,Reference>,
+                             typename iterator_value<Iter>::type,CharCompare,ValueType,Reference> {
+    typedef basic_cstring<typename ValueType::value_type> cstring;
+    typedef token_iterator_base<range_token_iterator<Iter,CharCompare,ValueType,Reference>,
+                                typename iterator_value<Iter>::type,CharCompare,ValueType,Reference> base;
+public:
+    explicit    range_token_iterator() {}
+    explicit    range_token_iterator( Iter begin, Iter end = Iter() )
+    : m_begin( begin ), m_end( end )
+    {
+        this->init();
+    }
+    range_token_iterator( range_token_iterator const& rhs )
+    : base( rhs )
+    {
+        if( this->m_valid ) {
+            m_begin = rhs.m_begin;
+            m_end   = rhs.m_end;
+        }
+    }
+
+    template<typename Modifier>
+    range_token_iterator( Iter begin, Iter end, Modifier const& m )
+    : m_begin( begin ), m_end( end )
+    {
+        this->apply_modifier( m );
+
+        this->init();
+    }
+
+private:
+    friend class input_iterator_core_access;
+
+    // input iterator implementation
+    bool        get()
+    {
+        return base::get( m_begin, m_end );
+    }
+
+    // Data members
+    Iter m_begin;
+    Iter m_end;
+};
+
+// ************************************************************************** //
+// **************            make_range_token_iterator         ************** //
+// ************************************************************************** //
+
+template<typename Iter>
+inline range_token_iterator<Iter>
+make_range_token_iterator( Iter begin, Iter end = Iter() )
+{
+    return range_token_iterator<Iter>( begin, end );
+}
+
+//____________________________________________________________________________//
+
+template<typename Iter,typename Modifier>
+inline range_token_iterator<Iter>
+make_range_token_iterator( Iter begin, Iter end, Modifier const& m )
+{
+    return range_token_iterator<Iter>( begin, end, m );
+}
+
+//____________________________________________________________________________//
+
+} // namespace utils
+} // namespace unit_test
+} // namespace pdalboost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_TOKEN_ITERATOR_HPP
+
diff --git a/vendor/pdalboost/boost/test/utils/lazy_ostream.hpp b/vendor/pdalboost/boost/test/utils/lazy_ostream.hpp
new file mode 100644
index 0000000..f5d9470
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/lazy_ostream.hpp
@@ -0,0 +1,128 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  Description : contains definition for all test tools in test toolbox
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_LAZY_OSTREAM_HPP
+#define BOOST_TEST_UTILS_LAZY_OSTREAM_HPP
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+// STL
+#include <iosfwd>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                  lazy_ostream                ************** //
+// ************************************************************************** //
+
+namespace pdalboost {
+namespace unit_test {
+
+class lazy_ostream {
+public:
+    virtual                 ~lazy_ostream()                                         {}
+
+    static lazy_ostream&    instance()                                              { static lazy_ostream inst; return inst; }
+
+    friend std::ostream&    operator<<( std::ostream& ostr, lazy_ostream const& o ) { return o( ostr ); }
+
+    // access method
+    bool                    empty() const                                           { return m_empty; }
+
+    // actual printing interface; to be accessed only by this class and children
+    virtual std::ostream&   operator()( std::ostream& ostr ) const                  { return ostr; }
+protected:
+    explicit                lazy_ostream( bool p_empty = true ) : m_empty( p_empty )    {}
+
+private:
+    // Data members
+    bool                    m_empty;
+};
+
+//____________________________________________________________________________//
+
+template<typename PrevType, typename T, typename StorageT=T const&>
+class lazy_ostream_impl : public lazy_ostream {
+public:
+    lazy_ostream_impl( PrevType const& prev, T const& value )
+    : lazy_ostream( false )
+    , m_prev( prev )
+    , m_value( value )
+    {
+    }
+
+    virtual std::ostream&   operator()( std::ostream& ostr ) const
+    {
+        return m_prev(ostr) << m_value;
+    }
+private:
+    // Data members
+    PrevType const&         m_prev;
+    StorageT                m_value;
+};
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline lazy_ostream_impl<lazy_ostream,T>
+operator<<( lazy_ostream const& prev, T const& v )
+{
+    return lazy_ostream_impl<lazy_ostream,T>( prev, v );
+}
+
+//____________________________________________________________________________//
+
+template<typename PrevPrevType, typename TPrev, typename T>
+inline lazy_ostream_impl<lazy_ostream_impl<PrevPrevType,TPrev>,T>
+operator<<( lazy_ostream_impl<PrevPrevType,TPrev> const& prev, T const& v )
+{
+    typedef lazy_ostream_impl<PrevPrevType,TPrev> PrevType;
+    return lazy_ostream_impl<PrevType,T>( prev, v );
+}
+
+//____________________________________________________________________________//
+
+#if BOOST_TEST_USE_STD_LOCALE
+
+template<typename R,typename S>
+inline lazy_ostream_impl<lazy_ostream,R& (BOOST_TEST_CALL_DECL *)(S&),R& (BOOST_TEST_CALL_DECL *)(S&)>
+operator<<( lazy_ostream const& prev, R& (BOOST_TEST_CALL_DECL *man)(S&) )
+{
+    typedef R& (BOOST_TEST_CALL_DECL * ManipType)(S&);
+
+    return lazy_ostream_impl<lazy_ostream,ManipType,ManipType>( prev, man );
+}
+
+//____________________________________________________________________________//
+
+template<typename PrevPrevType, typename TPrev,typename R,typename S>
+inline lazy_ostream_impl<lazy_ostream_impl<PrevPrevType,TPrev>,R& (BOOST_TEST_CALL_DECL *)(S&),R& (BOOST_TEST_CALL_DECL *)(S&)>
+operator<<( lazy_ostream_impl<PrevPrevType,TPrev> const& prev, R& (BOOST_TEST_CALL_DECL *man)(S&) )
+{
+    typedef R& (BOOST_TEST_CALL_DECL * ManipType)(S&);
+
+    return lazy_ostream_impl<lazy_ostream_impl<PrevPrevType,TPrev>,ManipType,ManipType>( prev, man );
+}
+
+//____________________________________________________________________________//
+
+#endif
+
+#define BOOST_TEST_LAZY_MSG( M ) (::pdalboost::unit_test::lazy_ostream::instance() << M)
+
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_LAZY_OSTREAM_HPP
diff --git a/vendor/pdalboost/boost/test/utils/named_params.hpp b/vendor/pdalboost/boost/test/utils/named_params.hpp
new file mode 100644
index 0000000..a8418aa
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/named_params.hpp
@@ -0,0 +1,388 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : named function parameters library
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_NAMED_PARAM
+#define BOOST_TEST_UTILS_NAMED_PARAM
+
+// Boost
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+// Boost.Test
+#include <boost/test/utils/rtti.hpp>
+#include <boost/test/utils/assign_op.hpp>
+
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#include <boost/test/detail/throw_exception.hpp>
+
+// Boost
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/mpl/bool.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace nfp { // named function parameters
+
+// ************************************************************************** //
+// **************             forward declarations             ************** //
+// ************************************************************************** //
+
+template<typename unique_id, bool required>                     struct keyword;
+template<typename T, typename unique_id, bool required = false> struct typed_keyword;
+
+template<typename T, typename unique_id, typename RefType=T&>   struct named_parameter;
+template<typename NP1,typename NP2>                             struct named_parameter_combine;
+
+// ************************************************************************** //
+// **************              is_named_param_pack             ************** //
+// ************************************************************************** //
+
+/// is_named_param_pack<T>::value is true if T is parameters pack
+
+template<typename T>
+struct is_named_param_pack : public mpl::false_ {};
+
+template<typename T, typename unique_id, typename RefType>
+struct is_named_param_pack<named_parameter<T,unique_id,RefType> > : public mpl::true_ {};
+
+template<typename NP, typename Rest>
+struct is_named_param_pack<named_parameter_combine<NP,Rest> > : public mpl::true_ {};
+
+// ************************************************************************** //
+// **************                  param_type                  ************** //
+// ************************************************************************** //
+
+/// param_type<Params,Keyword,Default>::type is is the type of the parameter
+/// corresponding to the Keyword (if parameter is present) or Default
+
+template<typename NP, typename Keyword, typename DefaultType=void>
+struct param_type
+: mpl::if_<typename is_same<typename NP::id,typename Keyword::id>::type,
+           typename remove_cv<typename NP::data_type>::type,
+           DefaultType> {};
+
+template<typename NP, typename Rest, typename Keyword, typename DefaultType>
+struct param_type<named_parameter_combine<NP,Rest>,Keyword,DefaultType>
+: mpl::if_<typename is_same<typename NP::id,typename Keyword::id>::type,
+           typename remove_cv<typename NP::data_type>::type,
+           typename param_type<Rest,Keyword,DefaultType>::type> {};
+
+// ************************************************************************** //
+// **************                  has_param                   ************** //
+// ************************************************************************** //
+
+/// has_param<Params,Keyword>::value is true id Params has parameter corresponding
+/// to the Keyword
+
+template<typename NP, typename Keyword>
+struct has_param : is_same<typename NP::id,typename Keyword::id> {};
+
+template<typename NP, typename Rest, typename Keyword>
+struct has_param<named_parameter_combine<NP,Rest>,Keyword>
+: mpl::or_<typename is_same<typename NP::id,typename Keyword::id>::type,
+           typename has_param<Rest,Keyword>::type> {};
+
+// ************************************************************************** //
+// **************          access_to_invalid_parameter         ************** //
+// ************************************************************************** //
+
+namespace nfp_detail {
+
+struct access_to_invalid_parameter {};
+
+//____________________________________________________________________________//
+
+inline void
+report_access_to_invalid_parameter( bool v )
+{
+    BOOST_TEST_I_ASSRT( !v, access_to_invalid_parameter() );
+}
+
+} // namespace nfp_detail
+
+// ************************************************************************** //
+// **************                      nil                     ************** //
+// ************************************************************************** //
+
+struct nil {
+    template<typename T>
+#if defined(__GNUC__) || defined(__HP_aCC) || defined(__EDG__) || defined(__SUNPRO_CC)
+    operator T() const
+#else
+    operator T const&() const
+#endif
+    { nfp_detail::report_access_to_invalid_parameter(true); static T* v = 0; return *v; }
+
+    template<typename T>
+    T any_cast() const
+    { nfp_detail::report_access_to_invalid_parameter(true); static typename remove_reference<T>::type* v = 0; return *v; }
+
+    template<typename Arg1>
+    nil operator()( Arg1 const& )
+    { nfp_detail::report_access_to_invalid_parameter(true); return nil(); }
+
+    template<typename Arg1,typename Arg2>
+    nil operator()( Arg1 const&, Arg2 const& )
+    { nfp_detail::report_access_to_invalid_parameter(true); return nil(); }
+
+    template<typename Arg1,typename Arg2,typename Arg3>
+    nil operator()( Arg1 const&, Arg2 const&, Arg3 const& )
+    { nfp_detail::report_access_to_invalid_parameter(true); return nil(); }
+
+    // Visitation support
+    template<typename Visitor>
+    void            apply_to( Visitor& /*v*/ ) const {}
+
+    static nil&     inst() { static nil s_inst; return s_inst; }
+private:
+    nil() {}
+};
+
+// ************************************************************************** //
+// **************             named_parameter_base             ************** //
+// ************************************************************************** //
+
+namespace nfp_detail {
+
+template<typename Derived>
+struct named_parameter_base {
+    template<typename NP>
+    named_parameter_combine<NP,Derived>
+    operator,( NP const& np ) const { return named_parameter_combine<NP,Derived>( np, *static_cast<Derived const*>(this) ); }
+};
+
+} // namespace nfp_detail
+
+// ************************************************************************** //
+// **************            named_parameter_combine           ************** //
+// ************************************************************************** //
+
+template<typename NP, typename Rest = nil>
+struct named_parameter_combine
+: Rest
+, nfp_detail::named_parameter_base<named_parameter_combine<NP,Rest> > {
+    typedef typename NP::ref_type  res_type;
+    typedef named_parameter_combine<NP,Rest> self_type;
+
+    // Constructor
+    named_parameter_combine( NP const& np, Rest const& r )
+    : Rest( r )
+    , m_param( np )
+    {
+    }
+
+    // Access methods
+    res_type    operator[]( keyword<typename NP::id,true> kw ) const    { return m_param[kw]; }
+    res_type    operator[]( keyword<typename NP::id,false> kw ) const   { return m_param[kw]; }
+    using       Rest::operator[];
+
+    bool        has( keyword<typename NP::id,false> kw ) const          { return m_param.has( kw ); }
+    using       Rest::has;
+
+    void        erase( keyword<typename NP::id,false> kw ) const        { m_param.erase( kw ); }
+    using       Rest::erase;
+
+    using       nfp_detail::named_parameter_base<named_parameter_combine<NP,Rest> >::operator,;
+
+    // Visitation support
+    template<typename Visitor>
+    void            apply_to( Visitor& V ) const
+    {
+        m_param.apply_to( V );
+
+        Rest::apply_to( V );
+    }
+private:
+    // Data members
+    NP          m_param;
+};
+
+// ************************************************************************** //
+// **************                named_parameter               ************** //
+// ************************************************************************** //
+
+template<typename T, typename unique_id, typename RefType>
+struct named_parameter
+: nfp_detail::named_parameter_base<named_parameter<T,unique_id,RefType> >
+{
+    typedef T               data_type;
+    typedef RefType         ref_type;
+    typedef unique_id       id;
+
+    // Constructor
+    explicit        named_parameter( ref_type v )
+    : m_value( v )
+    , m_erased( false )
+    {}
+    named_parameter( named_parameter const& np )
+    : m_value( np.m_value )
+    , m_erased( np.m_erased )
+    {}
+
+    // Access methods
+    ref_type        operator[]( keyword<unique_id,true> ) const     { return m_erased ? nil::inst().template any_cast<ref_type>() :  m_value; }
+    ref_type        operator[]( keyword<unique_id,false> ) const    { return m_erased ? nil::inst().template any_cast<ref_type>() :  m_value; }
+    template<typename UnknownId>
+    nil             operator[]( keyword<UnknownId,false> ) const    { return nil::inst(); }
+
+    bool            has( keyword<unique_id,false> ) const           { return !m_erased; }
+    template<typename UnknownId>
+    bool            has( keyword<UnknownId,false> ) const           { return false; }
+
+    void            erase( keyword<unique_id,false> ) const         { m_erased = true; }
+    template<typename UnknownId>
+    void            erase( keyword<UnknownId,false> ) const         {}
+
+    // Visitation support
+    template<typename Visitor>
+    void            apply_to( Visitor& V ) const
+    {
+        V.set_parameter( rtti::type_id<unique_id>(), m_value );
+    }
+
+private:
+    // Data members
+    ref_type        m_value;
+    mutable bool    m_erased;
+};
+
+// ************************************************************************** //
+// **************                   no_params                  ************** //
+// ************************************************************************** //
+
+typedef named_parameter<char, struct no_params_type_t,char> no_params_type;
+
+namespace {
+no_params_type no_params( '\0' );
+} // local namespace
+
+// ************************************************************************** //
+// **************                    keyword                   ************** //
+// ************************************************************************** //
+
+template<typename unique_id, bool required = false>
+struct keyword {
+    typedef unique_id id;
+
+    template<typename T>
+    named_parameter<T const,unique_id>
+    operator=( T const& t ) const       { return named_parameter<T const,unique_id>( t ); }
+
+    template<typename T>
+    named_parameter<T,unique_id>
+    operator=( T& t ) const             { return named_parameter<T,unique_id>( t ); }
+
+    named_parameter<char const*,unique_id,char const*>
+    operator=( char const* t ) const    { return named_parameter<char const*,unique_id,char const*>( t ); }
+};
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                 typed_keyword                ************** //
+// ************************************************************************** //
+
+template<typename T, typename unique_id, bool required>
+struct typed_keyword : keyword<unique_id,required> {
+    named_parameter<T const,unique_id>
+    operator=( T const& t ) const       { return named_parameter<T const,unique_id>( t ); }
+
+    named_parameter<T,unique_id>
+    operator=( T& t ) const             { return named_parameter<T,unique_id>( t ); }
+};
+
+//____________________________________________________________________________//
+
+template<typename unique_id, bool required>
+struct typed_keyword<bool,unique_id,required>
+: keyword<unique_id,required>
+, named_parameter<bool,unique_id,bool> {
+    typedef unique_id id;
+
+    typed_keyword() : named_parameter<bool,unique_id,bool>( true ) {}
+
+    named_parameter<bool,unique_id,bool>
+    operator!() const           { return named_parameter<bool,unique_id,bool>( false ); }
+};
+
+// ************************************************************************** //
+// **************                  opt_assign                  ************** //
+// ************************************************************************** //
+
+template<typename T, typename Params, typename Keyword>
+inline typename enable_if_c<!has_param<Params,Keyword>::value,void>::type
+opt_assign( T& target, Params const& p, Keyword k )
+{
+}
+
+//____________________________________________________________________________//
+
+template<typename T, typename Params, typename Keyword>
+inline typename enable_if_c<has_param<Params,Keyword>::value,void>::type
+opt_assign( T& target, Params const& p, Keyword k )
+{
+    using namespace unit_test;
+
+    assign_op( target, p[k], static_cast<int>(0) );
+}
+
+// ************************************************************************** //
+// **************                    opt_get                   ************** //
+// ************************************************************************** //
+
+template<typename T, typename Params, typename Keyword>
+inline T
+opt_get( Params const& p, Keyword k, T default_val )
+{
+    opt_assign( default_val, p, k );
+
+    return default_val;
+}
+
+// ************************************************************************** //
+// **************                    opt_get                   ************** //
+// ************************************************************************** //
+
+template<typename Params, typename NP>
+inline typename enable_if_c<!has_param<Params,keyword<typename NP::id> >::value,
+named_parameter_combine<NP,Params> >::type
+opt_append( Params const& params, NP const& np )
+{
+    return (params,np);
+}
+
+//____________________________________________________________________________//
+
+template<typename Params, typename NP>
+inline typename enable_if_c<has_param<Params,keyword<typename NP::id> >::value,Params>::type
+opt_append( Params const& params, NP const& )
+{
+    return params;
+}
+
+} // namespace nfp
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_NAMED_PARAM
diff --git a/vendor/pdalboost/boost/test/utils/rtti.hpp b/vendor/pdalboost/boost/test/utils/rtti.hpp
new file mode 100644
index 0000000..c8f144d
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/rtti.hpp
@@ -0,0 +1,63 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : simple facilities for accessing type information at runtime
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_RTTI_HPP
+#define BOOST_TEST_UTILS_RTTI_HPP
+
+// C Runtime
+#include <cstddef>
+
+namespace pdalboost {
+namespace rtti {
+
+// ************************************************************************** //
+// **************                   rtti::type_id              ************** //
+// ************************************************************************** //
+
+typedef std::ptrdiff_t id_t;
+
+namespace rtti_detail {
+
+template<typename T>
+struct rttid_holder {
+    static id_t id() { return reinterpret_cast<id_t>( &inst() ); }
+
+private:
+    struct rttid {};
+
+    static rttid const& inst() { static rttid s_inst; return s_inst; }
+};
+
+} // namespace rtti_detail
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline id_t
+type_id()
+{
+    return rtti_detail::rttid_holder<T>::id();
+}
+
+//____________________________________________________________________________//
+
+#define BOOST_RTTI_SWITCH( type_id_ ) if( ::pdalboost::rtti::id_t switch_by_id = type_id_ )
+#define BOOST_RTTI_CASE( type )       if( switch_by_id == ::pdalboost::rtti::type_id<type>() )
+
+//____________________________________________________________________________//
+
+} // namespace rtti
+} // namespace pdalboost
+
+#endif // BOOST_TEST_UTILS_RTTI_HPP
diff --git a/vendor/pdalboost/boost/test/utils/runtime/argument.hpp b/vendor/pdalboost/boost/test/utils/runtime/argument.hpp
new file mode 100644
index 0000000..66252be
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/runtime/argument.hpp
@@ -0,0 +1,131 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : model of actual argument (both typed and abstract interface)
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_RUNTIME_ARGUMENT_HPP
+#define BOOST_TEST_UTILS_RUNTIME_ARGUMENT_HPP
+
+// Boost.Test Runtime parameters
+#include <boost/test/utils/runtime/fwd.hpp>
+#include <boost/test/utils/runtime/errors.hpp>
+
+// Boost.Test
+#include <boost/test/utils/class_properties.hpp>
+#include <boost/test/utils/rtti.hpp>
+#include <boost/test/utils/basic_cstring/compare.hpp>
+#include <boost/test/detail/throw_exception.hpp>
+
+// STL
+#include <cassert>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+namespace pdalboost {
+namespace runtime {
+
+// ************************************************************************** //
+// **************              runtime::argument               ************** //
+// ************************************************************************** //
+
+class argument {
+public:
+    // Constructor
+    argument( rtti::id_t value_type )
+    : p_value_type( value_type )
+    {}
+
+    // Destructor
+    virtual     ~argument()  {}
+
+    // Public properties
+    rtti::id_t const    p_value_type;
+};
+
+// ************************************************************************** //
+// **************             runtime::typed_argument          ************** //
+// ************************************************************************** //
+
+template<typename T>
+class typed_argument : public argument {
+public:
+    // Constructor
+    explicit typed_argument( T const& v )
+    : argument( rtti::type_id<T>() )
+    , p_value( v )
+    {}
+
+    unit_test::readwrite_property<T>    p_value;
+};
+
+// ************************************************************************** //
+// **************           runtime::arguments_store          ************** //
+// ************************************************************************** //
+
+class arguments_store {
+public:
+    typedef std::map<cstring, argument_ptr> storage_type;
+
+    /// Returns number of arguments in the store; mostly used for testing
+    std::size_t size() const        { return m_arguments.size(); }
+
+    /// Clears the store for reuse
+    void        clear()             { m_arguments.clear(); }
+
+    /// Returns true if there is an argument corresponding to the specified parameter name
+    bool        has( cstring parameter_name ) const
+    {
+        return m_arguments.find( parameter_name ) != m_arguments.end();
+    }
+
+    /// Provides types access to argument value by parameter name
+    template<typename T>
+    T const&    get( cstring parameter_name ) const {
+        return const_cast<arguments_store*>(this)->get<T>( parameter_name );
+    }
+
+    template<typename T>
+    T&          get( cstring parameter_name ) {
+        storage_type::const_iterator found = m_arguments.find( parameter_name );
+        BOOST_TEST_I_ASSRT( found != m_arguments.end(),
+                            access_to_missing_argument() 
+                                << "There is no argument provided for parameter "
+                                << parameter_name );
+
+        argument_ptr arg = found->second;
+
+        BOOST_TEST_I_ASSRT( arg->p_value_type == rtti::type_id<T>(),
+                            arg_type_mismatch()
+                                << "Access with invalid type for argument corresponding to parameter "
+                                << parameter_name );
+
+        return static_cast<typed_argument<T>&>( *arg ).p_value.value;
+    }
+
+    /// Set's the argument value for specified parameter name
+    template<typename T>
+    void        set( cstring parameter_name, T const& value )
+    {
+        m_arguments[parameter_name] = argument_ptr( new typed_argument<T>( value ) );
+    }
+
+private:
+    // Data members
+    storage_type            m_arguments;
+};
+
+} // namespace runtime
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_RUNTIME_ARGUMENT_HPP
diff --git a/vendor/pdalboost/boost/test/utils/runtime/argument_factory.hpp b/vendor/pdalboost/boost/test/utils/runtime/argument_factory.hpp
new file mode 100644
index 0000000..5d6bf48
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/runtime/argument_factory.hpp
@@ -0,0 +1,242 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : argument factories for different kinds of parameters
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_RUNTIME_ARGUMENT_FACTORY_HPP
+#define BOOST_TEST_UTILS_RUNTIME_ARGUMENT_FACTORY_HPP
+
+// Boost.Test Runtime parameters
+#include <boost/test/utils/runtime/errors.hpp>
+#include <boost/test/utils/runtime/argument.hpp>
+
+// Boost.Test
+#include <boost/test/utils/basic_cstring/io.hpp>
+#include <boost/test/utils/basic_cstring/compare.hpp>
+#include <boost/test/utils/string_cast.hpp>
+
+// Boost
+#include <boost/function/function2.hpp>
+
+// STL
+#include <vector>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+namespace pdalboost {
+namespace runtime {
+
+// ************************************************************************** //
+// **************          runtime::value_interpreter          ************** //
+// ************************************************************************** //
+
+template<typename ValueType, bool is_enum>
+struct value_interpreter;
+
+//____________________________________________________________________________//
+
+template<typename ValueType>
+struct value_interpreter<ValueType, false> {
+    template<typename Modifiers>
+    explicit    value_interpreter( Modifiers const& ) {}
+
+    ValueType interpret( cstring param_name, cstring source ) const
+    {
+        ValueType res;
+        if( !unit_test::utils::string_as<ValueType>( source, res ) )
+            BOOST_TEST_I_THROW( format_error( param_name ) << source <<
+                                " can't be interpreted as value of parameter " << param_name << "." );
+        return res;
+    }
+};
+
+//____________________________________________________________________________//
+
+template<>
+struct value_interpreter<std::string, false> {
+    template<typename Modifiers>
+    explicit    value_interpreter( Modifiers const& ) {}
+
+    std::string interpret( cstring, cstring source ) const
+    {
+        return std::string( source.begin(), source.size() );
+    }
+};
+
+//____________________________________________________________________________//
+
+template<>
+struct value_interpreter<cstring, false> {
+    template<typename Modifiers>
+    explicit    value_interpreter( Modifiers const& ) {}
+
+    cstring interpret( cstring, cstring source ) const
+    {
+        return source;
+    }
+};
+
+//____________________________________________________________________________//
+
+template<>
+struct value_interpreter<bool, false> {
+    template<typename Modifiers>
+    explicit    value_interpreter( Modifiers const& ) {}
+
+    bool    interpret( cstring param_name, cstring source ) const
+    {
+        static cstring const s_YES( "YES" );
+        static cstring const s_Y( "Y" );
+        static cstring const s_NO( "NO" );
+        static cstring const s_N( "N" );
+        static cstring const s_TRUE( "TRUE" );
+        static cstring const s_FALSE( "FALSE" );
+        static cstring const s_one( "1" );
+        static cstring const s_zero( "0" );
+
+        source.trim();
+
+        if( source.is_empty() ||
+            case_ins_eq( source, s_YES ) ||
+            case_ins_eq( source, s_Y ) ||
+            case_ins_eq( source, s_one ) ||
+            case_ins_eq( source, s_TRUE ) )
+            return true;
+
+        if( case_ins_eq( source, s_NO ) ||
+            case_ins_eq( source, s_N ) ||
+            case_ins_eq( source, s_zero ) ||
+            case_ins_eq( source, s_FALSE ) )
+            return false;
+
+        BOOST_TEST_I_THROW( format_error( param_name ) << source << " can't be interpreted as bool value." );
+    }
+};
+
+//____________________________________________________________________________//
+
+template<typename EnumType>
+struct value_interpreter<EnumType, true> {
+    template<typename Modifiers>
+    explicit        value_interpreter( Modifiers const& m )
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
+    : m_name_to_value( m[enum_values<EnumType>::value] )
+    {
+    }
+#else
+    {
+        std::vector<std::pair<cstring,EnumType> > const& values = m[enum_values<EnumType>::value];
+
+        m_name_to_value.insert( values.begin(), values.end() );
+    }
+#endif
+
+    EnumType        interpret( cstring param_name, cstring source ) const
+    {
+        typename std::map<cstring,EnumType>::const_iterator found = m_name_to_value.find( source );
+
+        BOOST_TEST_I_ASSRT( found != m_name_to_value.end(),
+                            format_error( param_name ) << source <<
+                            " is not a valid enumeration value name for parameter " << param_name << "." );
+
+        return found->second;
+    }
+
+private:
+    // Data members
+    std::map<cstring,EnumType>  m_name_to_value;
+};
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************           runtime::argument_factory          ************** //
+// ************************************************************************** //
+
+template<typename ValueType, bool is_enum, bool repeatable>
+class argument_factory;
+
+//____________________________________________________________________________//
+
+template<typename ValueType, bool is_enum>
+class argument_factory<ValueType, is_enum, false> {
+public:
+    template<typename Modifiers>
+    explicit    argument_factory( Modifiers const& m )
+    : m_interpreter( m )
+    , m_optional_value( nfp::opt_get( m, optional_value, ValueType() ) )
+    , m_default_value( nfp::opt_get( m, default_value, ValueType() ) )
+    {
+    }
+
+    void        produce_argument( cstring source, cstring param_name, arguments_store& store ) const
+    {
+        store.set( param_name, source.empty() ? m_optional_value : m_interpreter.interpret( param_name, source ) );
+    }
+
+    void        produce_default( cstring param_name, arguments_store& store ) const
+    {
+        store.set( param_name, m_default_value );
+    }
+
+private:
+    // Data members
+    typedef value_interpreter<ValueType, is_enum> interp_t;
+    interp_t    m_interpreter;
+    ValueType   m_optional_value;
+    ValueType   m_default_value;
+};
+
+//____________________________________________________________________________//
+
+template<typename ValueType, bool is_enum>
+class argument_factory<ValueType, is_enum, true> {
+public:
+    template<typename Modifiers>
+    explicit    argument_factory( Modifiers const& m )
+    : m_interpreter( m )
+    {
+    }
+
+    void        produce_argument( cstring source, cstring param_name, arguments_store& store ) const
+    {
+        ValueType value = m_interpreter.interpret( param_name, source );
+
+        if( store.has( param_name ) ) {
+            std::vector<ValueType>& values = store.get<std::vector<ValueType> >( param_name );
+            values.push_back( value );
+        }
+        else {
+            std::vector<ValueType> values( 1, value );
+
+            store.set( param_name, values );
+        }
+
+    }
+    void        produce_default( cstring param_name, arguments_store& store ) const
+    {
+        store.set( param_name, std::vector<ValueType>() );
+    }
+
+private:
+    // Data members
+    value_interpreter<ValueType, is_enum> m_interpreter;
+};
+
+//____________________________________________________________________________//
+
+} // namespace runtime
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_RUNTIME_ARGUMENT_FACTORY_HPP
diff --git a/vendor/pdalboost/boost/test/utils/runtime/cla/argv_traverser.hpp b/vendor/pdalboost/boost/test/utils/runtime/cla/argv_traverser.hpp
new file mode 100644
index 0000000..760dc37
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/runtime/cla/argv_traverser.hpp
@@ -0,0 +1,105 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Use, modification, and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : defines facility to hide input traversing details
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_RUNTIME_CLA_ARGV_TRAVERSER_HPP
+#define BOOST_TEST_UTILS_RUNTIME_CLA_ARGV_TRAVERSER_HPP
+
+// Boost.Test Runtime parameters
+#include <boost/test/utils/runtime/fwd.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+namespace pdalboost {
+namespace runtime {
+namespace cla {
+
+// ************************************************************************** //
+// **************          runtime::cla::argv_traverser        ************** //
+// ************************************************************************** //
+
+class argv_traverser {
+    typedef char const** argv_type;
+public:
+    /// Constructs traverser based on argc/argv pair
+    /// argv is taken "by reference" and later can be
+    /// updated in remainder method
+    argv_traverser( int argc, argv_type argv )
+    : m_argc( argc )
+    , m_curr_token( 0 )
+    , m_token_size( 0 )
+    , m_argv( argv )
+    {
+        // save program name
+        save_token();
+    }
+
+    /// Returns new argc
+    int         remainder()
+    {
+        return m_argc;
+    }
+
+    /// Returns true, if we reached end on input
+    bool        eoi() const
+    {
+        return m_curr_token == m_argc;
+    }
+
+    /// Returns current token in the input
+    cstring     current_token()
+    {
+        if( eoi() )
+            return cstring();
+
+        return cstring( m_argv[m_curr_token], m_token_size );
+    }
+
+    /// Saves current token for remainder
+    void        save_token()
+    {
+        ++m_curr_token;
+
+        if( !eoi() )
+            m_token_size = ::strlen( m_argv[m_curr_token] );
+    }
+
+    /// Commit current token and iterate to next one
+    void        next_token()
+    {
+        if( !eoi() ) {
+            for( std::size_t i = m_curr_token; i < m_argc-1; ++i )
+                m_argv[i] = m_argv[i + 1];
+
+            --m_argc;
+
+            m_token_size = ::strlen( m_argv[m_curr_token] );
+        }
+    }
+
+private:
+
+    // Data members
+    std::size_t m_argc;         // total number of arguments
+    std::size_t m_curr_token;   // current token index in argv
+    std::size_t m_token_size;   // current token size
+    argv_type   m_argv;         // all arguments
+};
+
+} // namespace cla
+} // namespace runtime
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_RUNTIME_CLA_ARGV_TRAVERSER_HPP
diff --git a/vendor/pdalboost/boost/test/utils/runtime/cla/parser.hpp b/vendor/pdalboost/boost/test/utils/runtime/cla/parser.hpp
new file mode 100644
index 0000000..8b9e5cd
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/runtime/cla/parser.hpp
@@ -0,0 +1,491 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Use, modification, and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//!@file
+//!@brief CLA parser
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_RUNTIME_CLA_PARSER_HPP
+#define BOOST_TEST_UTILS_RUNTIME_CLA_PARSER_HPP
+
+// Boost.Test Runtime parameters
+#include <boost/test/utils/runtime/argument.hpp>
+#include <boost/test/utils/runtime/modifier.hpp>
+#include <boost/test/utils/runtime/parameter.hpp>
+
+#include <boost/test/utils/runtime/cla/argv_traverser.hpp>
+
+// Boost.Test
+#include <boost/test/utils/foreach.hpp>
+#include <boost/test/utils/algorithm.hpp>
+#include <boost/test/detail/throw_exception.hpp>
+
+#include <boost/algorithm/cxx11/all_of.hpp> // !! ?? unnecessary after cxx11
+
+// STL
+// !! ?? #include <unordered_set>
+#include <set>
+#include <iostream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+namespace pdalboost {
+namespace runtime {
+namespace cla {
+
+// ************************************************************************** //
+// **************         runtime::cla::parameter_trie         ************** //
+// ************************************************************************** //
+
+namespace rt_cla_detail {
+
+struct parameter_trie;
+typedef shared_ptr<parameter_trie> parameter_trie_ptr;
+typedef std::map<char,parameter_trie_ptr> trie_per_char;
+typedef std::vector<pdalboost::reference_wrapper<parameter_cla_id const> > param_cla_id_list;
+
+struct parameter_trie {
+    parameter_trie() : m_has_final_candidate( false ) {}
+
+    /// If subtrie corresponding to the char c exists returns it otherwise creates new
+    parameter_trie_ptr  make_subtrie( char c )
+    {
+        trie_per_char::const_iterator it = m_subtrie.find( c );
+
+        if( it == m_subtrie.end() )
+            it = m_subtrie.insert( std::make_pair( c, parameter_trie_ptr( new parameter_trie ) ) ).first;
+
+        return it->second;
+    }
+
+    /// Creates series of sub-tries per characters in a string
+    parameter_trie_ptr  make_subtrie( cstring s )
+    {
+        parameter_trie_ptr res;
+
+        BOOST_TEST_FOREACH( char, c, s )
+            res = (res ? res->make_subtrie( c ) : make_subtrie( c ));
+
+        return res;
+    }
+
+    /// Registers candidate parameter for this subtrie. If final, it needs to be unique
+    void                add_candidate_id( parameter_cla_id const& param_id, basic_param_ptr param_candidate, bool final )
+    {
+        BOOST_TEST_I_ASSRT( !m_has_final_candidate && (!final || m_id_candidates.empty()),
+          conflicting_param() << "Parameter cla id " << param_id.m_tag << " conflicts with the "
+                              << "parameter cla id " << m_id_candidates.back().get().m_tag );
+
+        m_has_final_candidate = final;
+        m_id_candidates.push_back( ref(param_id) );
+
+        if( m_id_candidates.size() == 1 )
+            m_param_candidate = param_candidate;
+        else
+            m_param_candidate.reset();
+    }
+
+    /// Gets subtrie for specified char if present or nullptr otherwise
+    parameter_trie_ptr  get_subtrie( char c ) const
+    {
+        trie_per_char::const_iterator it = m_subtrie.find( c );
+
+        return it != m_subtrie.end() ? it->second : parameter_trie_ptr();
+    }
+
+    // Data members
+    trie_per_char       m_subtrie;
+    param_cla_id_list   m_id_candidates;
+    basic_param_ptr     m_param_candidate;
+    bool                m_has_final_candidate;
+};
+
+// ************************************************************************** //
+// **************      runtime::cla::report_foreing_token      ************** //
+// ************************************************************************** //
+
+static void 
+report_foreing_token( cstring program_name, cstring token )
+{
+    std::cerr << "Boost.Test WARNING: token \"" << token << "\" does not correspond to the Boost.Test argument \n"
+              << "                    and should be placed after all Boost.Test arguments and the -- separator.\n"
+              << "                    For example: " << program_name << " --random -- " << token << "\n"; 
+}
+
+} // namespace rt_cla_detail
+
+// ************************************************************************** //
+// **************             runtime::cla::parser             ************** //
+// ************************************************************************** //
+
+class parser {
+public:
+    /// Initializes a parser and builds internal trie representation used for
+    /// parsing based on the supplied parameters
+#ifndef BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+    template<typename Modifiers=nfp::no_params_type>
+    parser( parameters_store const& parameters, Modifiers const& m = nfp::no_params )
+#else
+    template<typename Modifiers>
+    parser( parameters_store const& parameters, Modifiers const& m )
+#endif
+    {
+        nfp::opt_assign( m_end_of_param_indicator, m, end_of_params );
+        nfp::opt_assign( m_negation_prefix, m, negation_prefix );
+
+        BOOST_TEST_I_ASSRT( algorithm::all_of( m_end_of_param_indicator.begin(),
+                                               m_end_of_param_indicator.end(),
+                                               parameter_cla_id::valid_prefix_char ),
+                            invalid_cla_id() << "End of parameters indicator can only consist of prefix characters." );
+
+        BOOST_TEST_I_ASSRT( algorithm::all_of( m_negation_prefix.begin(),
+                                               m_negation_prefix.end(),
+                                               parameter_cla_id::valid_name_char ),
+                            invalid_cla_id() << "Negation prefix can only consist of prefix characters." );
+
+        build_trie( parameters );
+    }
+
+    // input processing method
+    int
+    parse( int argc, char** argv, runtime::arguments_store& res )
+    {
+        // save program name for help message
+        m_program_name = argv[0];
+        cstring path_sep( "\\/" );
+
+        cstring::iterator it = unit_test::utils::find_last_of( m_program_name.begin(), m_program_name.end(),
+                                                                path_sep.begin(), path_sep.end() );
+        if( it != m_program_name.end() )
+            m_program_name.trim_left( it + 1 );
+
+        // Set up the traverser
+        argv_traverser tr( argc, (char const**)argv );
+
+        // Loop till we reach end of input
+        while( !tr.eoi() ) {
+            cstring curr_token = tr.current_token();
+
+            cstring prefix;
+            cstring name;
+            cstring value_separator;
+            bool    negative_form = false;
+
+            // Perform format validations and split the argument into prefix, name and separator
+            // False return value indicates end of params indicator is met
+            if( !validate_token_format( curr_token, prefix, name, value_separator, negative_form ) ) {
+                // get rid of "end of params" token
+                tr.next_token();
+                break;
+            }
+
+            // Locate trie corresponding to found prefix and skip it in the input
+            trie_ptr curr_trie = m_param_trie[prefix];
+
+            if( !curr_trie ) {
+                //  format_error() << "Unrecognized parameter prefix in the argument " << tr.current_token()
+                rt_cla_detail::report_foreing_token( m_program_name, curr_token );
+                tr.save_token();
+                continue;
+            }
+
+            curr_token.trim_left( prefix.size() );
+
+            // Locate parameter based on a name and skip it in the input
+            locate_result locate_res = locate_parameter( curr_trie, name, curr_token );
+            parameter_cla_id const& found_id    = locate_res.first;
+            basic_param_ptr         found_param = locate_res.second;
+
+            if( negative_form ) {
+                BOOST_TEST_I_ASSRT( found_id.m_negatable,
+                                    format_error( found_param->p_name ) 
+                                        << "Parameter tag " << found_id.m_tag << " is not negatable." );
+
+                curr_token.trim_left( m_negation_prefix.size() );
+            }
+
+            curr_token.trim_left( name.size() );
+
+            cstring value;
+
+            // Skip validations if parameter has optional value and we are at the end of token
+            if( !value_separator.is_empty() || !found_param->p_has_optional_value ) {
+                // Validate and skip value separator in the input
+                BOOST_TEST_I_ASSRT( found_id.m_value_separator == value_separator,
+                                    format_error( found_param->p_name ) 
+                                        << "Invalid separator for the parameter "
+                                        << found_param->p_name
+                                        << " in the argument " << tr.current_token() );
+
+                curr_token.trim_left( value_separator.size() );
+
+                // Deduce value source
+                value = curr_token;
+                if( value.is_empty() ) {
+                    tr.next_token();
+                    value = tr.current_token();
+                }
+
+                BOOST_TEST_I_ASSRT( !value.is_empty(),
+                                    format_error( found_param->p_name )
+                                        << "Missing an argument value for the parameter "
+                                        << found_param->p_name
+                                        << " in the argument " << tr.current_token() );
+            }
+
+            // Validate against argument duplication
+            BOOST_TEST_I_ASSRT( !res.has( found_param->p_name ) || found_param->p_repeatable,
+                                duplicate_arg( found_param->p_name )
+                                    << "Duplicate argument value for the parameter "
+                                    << found_param->p_name
+                                    << " in the argument " << tr.current_token() );
+
+            // Produce argument value
+            found_param->produce_argument( value, negative_form, res );
+
+            tr.next_token();
+        }
+
+        // generate the remainder and return it's size
+        return tr.remainder();
+    }
+
+    // help/usage
+    void
+    usage( std::ostream& ostr, cstring param_name = cstring() )
+    {
+        if( !param_name.is_empty() ) {
+            basic_param_ptr param = locate_parameter( m_param_trie[help_prefix], param_name, "" ).second;
+            param->usage( ostr, m_negation_prefix );
+        }
+        else {
+            ostr << "Usage: " << m_program_name << " [Boost.Test argument]... ";
+            if( !m_end_of_param_indicator.empty() )
+                ostr << m_end_of_param_indicator << " [custom test module argument]...";
+            ostr << "\n";
+        }
+
+        ostr << "\nFor detailed help on Boost.Test parameters use:\n"
+             << "  " << m_program_name << " --help\n"
+             << "or\n"
+             << "  " << m_program_name << " --help=<parameter name>\n";
+    }
+
+    void
+    help( std::ostream& ostr, parameters_store const& parameters, cstring param_name )
+    {
+        if( !param_name.is_empty() ) {
+            basic_param_ptr param = locate_parameter( m_param_trie[help_prefix], param_name, "" ).second;
+            param->help( ostr, m_negation_prefix );
+            return;
+        }
+
+        ostr << "Usage: " << m_program_name << " [Boost.Test argument]... ";
+        if( !m_end_of_param_indicator.empty() )
+            ostr << m_end_of_param_indicator << " [custom test module argument]...";
+
+        ostr << "\n\nBoost.Test arguments correspond to parameters listed below. "
+                "All parameters are optional. You can use specify parameter value either "
+                "as a command line argument or as a value of corresponding environment "
+                "variable. In case if argument for the same parameter is specified in both "
+                "places, command line is taking precedence. Command line argument format "
+                "supports parameter name guessing, so you can use any unambiguous "
+                "prefix to identify a parameter.";
+        if( !m_end_of_param_indicator.empty() )
+            ostr << " All the arguments after the " << m_end_of_param_indicator << " are ignored by the Boost.Test.";
+
+        ostr << "\n\nBoost.Test supports following parameters:\n";
+
+        BOOST_TEST_FOREACH( parameters_store::storage_type::value_type const&, v, parameters.all() ) {
+            basic_param_ptr param = v.second;
+
+            param->usage( ostr, m_negation_prefix );
+        }
+
+        ostr << "\nUse --help=<parameter name> to display detailed help for specific parameter.\n";
+    }
+
+private:
+    typedef rt_cla_detail::parameter_trie_ptr   trie_ptr;
+    typedef rt_cla_detail::trie_per_char        trie_per_char;
+    typedef std::map<cstring,trie_ptr>          str_to_trie;
+
+    void
+    build_trie( parameters_store const& parameters )
+    {
+        // Iterate over all parameters
+        BOOST_TEST_FOREACH( parameters_store::storage_type::value_type const&, v, parameters.all() ) {
+            basic_param_ptr param = v.second;
+
+            // Register all parameter's ids in trie.
+            BOOST_TEST_FOREACH( parameter_cla_id const&, id, param->cla_ids() ) {
+                // This is the trie corresponding to the prefix.
+                trie_ptr next_trie = m_param_trie[id.m_prefix];
+                if( !next_trie )
+                    next_trie = m_param_trie[id.m_prefix] = trie_ptr( new rt_cla_detail::parameter_trie );
+
+                // Build the trie, by following name's characters
+                // and register this parameter as candidate on each level
+                for( size_t index = 0; index < id.m_tag.size(); ++index ) {
+                    next_trie = next_trie->make_subtrie( id.m_tag[index] );
+
+                    next_trie->add_candidate_id( id, param, index == (id.m_tag.size() - 1) );
+                }
+            }
+        }
+    }
+
+    bool
+    validate_token_format( cstring token, cstring& prefix, cstring& name, cstring& separator, bool& negative_form )
+    {
+        // Match prefix
+        cstring::iterator it = token.begin();
+        while( it != token.end() && parameter_cla_id::valid_prefix_char( *it ) )
+            ++it;
+
+        prefix.assign( token.begin(), it );
+
+        if( prefix.empty() )
+            return true;
+
+        // Match name
+        while( it != token.end() && parameter_cla_id::valid_name_char( *it ) )
+            ++it;
+
+        name.assign( prefix.end(), it );
+
+        if( name.empty() ) {
+            if( prefix == m_end_of_param_indicator )
+                return false;
+
+            BOOST_TEST_I_THROW( format_error() << "Invalid format for an actual argument " << token );
+        }
+
+        // Match value separator
+        while( it != token.end() && parameter_cla_id::valid_separator_char( *it ) )
+            ++it;
+
+        separator.assign( name.end(), it );
+
+        // Match negation prefix
+        negative_form = !m_negation_prefix.empty() && ( name.substr( 0, m_negation_prefix.size() ) == m_negation_prefix );
+        if( negative_form )
+            name.trim_left( m_negation_prefix.size() );
+
+        return true;
+    }
+
+    // C++03: cannot have references as types
+    typedef std::pair<parameter_cla_id, basic_param_ptr> locate_result;
+
+    locate_result
+    locate_parameter( trie_ptr curr_trie, cstring name, cstring token )
+    {
+        std::vector<trie_ptr> typo_candidates;
+        std::vector<trie_ptr> next_typo_candidates;
+        trie_ptr next_trie;
+
+        BOOST_TEST_FOREACH( char, c, name ) {
+            if( curr_trie ) {
+                // locate next subtrie corresponding to the char
+                next_trie = curr_trie->get_subtrie( c );
+
+                if( next_trie )
+                    curr_trie = next_trie;
+                else {
+                    // Initiate search for typo candicates. We will account for 'wrong char' typo
+                    // 'missing char' typo and 'extra char' typo
+                    BOOST_TEST_FOREACH( trie_per_char::value_type const&, typo_cand, curr_trie->m_subtrie ) {
+                        // 'wrong char' typo
+                        typo_candidates.push_back( typo_cand.second );
+
+                        // 'missing char' typo
+                        if( (next_trie = typo_cand.second->get_subtrie( c )) )
+                            typo_candidates.push_back( next_trie );
+                    }
+
+                    // 'extra char' typo
+                    typo_candidates.push_back( curr_trie );
+
+                    curr_trie.reset();
+                }
+            }
+            else {
+                // go over existing typo candidates and see if they are still viable
+                BOOST_TEST_FOREACH( trie_ptr, typo_cand, typo_candidates ) {
+                    trie_ptr next_typo_cand = typo_cand->get_subtrie( c );
+
+                    if( next_typo_cand )
+                        next_typo_candidates.push_back( next_typo_cand );
+                }
+
+                next_typo_candidates.swap( typo_candidates );
+                next_typo_candidates.clear();
+            }
+        }
+
+        if( !curr_trie ) {
+            std::vector<cstring> typo_candidate_names;
+            std::set<parameter_cla_id const*> unique_typo_candidate; // !! ?? unordered_set
+            typo_candidate_names.reserve( typo_candidates.size() );
+// !! ??            unique_typo_candidate.reserve( typo_candidates.size() );
+
+            BOOST_TEST_FOREACH( trie_ptr, trie_cand, typo_candidates ) {
+                // avoid ambiguos candidate trie
+                if( trie_cand->m_id_candidates.size() > 1 )
+                    continue;
+
+                BOOST_TEST_FOREACH( parameter_cla_id const&, param_cand, trie_cand->m_id_candidates ) {
+                    if( !unique_typo_candidate.insert( &param_cand ).second )
+                        continue;
+
+                    typo_candidate_names.push_back( param_cand.m_tag );
+                }
+            }
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+            BOOST_TEST_I_THROW( unrecognized_param( std::move(typo_candidate_names) )
+                                << "An unrecognized parameter in the argument "
+                                << token );
+#else
+            BOOST_TEST_I_THROW( unrecognized_param( typo_candidate_names )
+                                << "An unrecognized parameter in the argument "
+                                << token );
+#endif
+        }
+
+        if( curr_trie->m_id_candidates.size() > 1 ) {
+            std::vector<cstring> amb_names;
+            BOOST_TEST_FOREACH( parameter_cla_id const&, param_id, curr_trie->m_id_candidates )
+                amb_names.push_back( param_id.m_tag );
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+            BOOST_TEST_I_THROW( ambiguous_param( std::move( amb_names ) )
+                                << "An ambiguous parameter name in the argument " << token );
+#else
+            BOOST_TEST_I_THROW( ambiguous_param( amb_names )
+                                << "An ambiguous parameter name in the argument " << token );
+#endif
+        }
+
+        return locate_result( curr_trie->m_id_candidates.back().get(), curr_trie->m_param_candidate );
+    }
+
+    // Data members
+    cstring     m_program_name;
+    std::string m_end_of_param_indicator;
+    std::string m_negation_prefix;
+    str_to_trie m_param_trie;
+};
+
+} // namespace cla
+} // namespace runtime
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_RUNTIME_CLA_PARSER_HPP
diff --git a/vendor/pdalboost/boost/test/utils/runtime/env/fetch.hpp b/vendor/pdalboost/boost/test/utils/runtime/env/fetch.hpp
new file mode 100644
index 0000000..1f06b40
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/runtime/env/fetch.hpp
@@ -0,0 +1,108 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : implements fetching absent parameter athuments from environment
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_RUNTIME_ENV_FETCH_HPP
+#define BOOST_TEST_UTILS_RUNTIME_ENV_FETCH_HPP
+
+// Boost.Test Runtime parameters
+#include <boost/test/utils/runtime/parameter.hpp>
+#include <boost/test/utils/runtime/argument.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+// C Runtime
+#include <stdlib.h>
+
+namespace pdalboost {
+namespace runtime {
+namespace env {
+
+namespace env_detail {
+
+#ifndef UNDER_CE
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4996) // getenv
+#endif
+
+inline std::pair<cstring,bool>
+sys_read_var( cstring var_name )
+{
+    using namespace std;
+    char const* res = getenv( var_name.begin() );
+
+    return std::make_pair( cstring(res), res != NULL );
+}
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#else
+
+inline std::pair<cstring,bool>
+sys_read_var( cstring var_name )
+{
+    return std::make_pair( cstring(), false );
+}
+
+#endif
+
+//____________________________________________________________________________//
+
+template<typename ReadFunc>
+inline void
+fetch_absent( parameters_store const& params, runtime::arguments_store& args, ReadFunc read_func )
+{
+    BOOST_TEST_FOREACH( parameters_store::storage_type::value_type const&, v, params.all() ) {
+        basic_param_ptr param = v.second;
+
+        if( args.has( param->p_name ) || param->p_env_var.empty() )
+            continue;
+
+        std::pair<cstring,bool> value = read_func( param->p_env_var );
+
+        if( !value.second )
+            continue;
+
+        // Validate against unexpected empty value
+        BOOST_TEST_I_ASSRT( !value.first.is_empty() || param->p_has_optional_value,
+            format_error( param->p_name ) 
+                << "Missing an argument value for the parameter " << param->p_name
+                << " in the environment." );
+
+        // Produce argument value
+        param->produce_argument( value.first, false, args );
+
+    }
+}
+
+//____________________________________________________________________________//
+
+} // namespace env_detail
+
+inline void
+fetch_absent( parameters_store const& params, runtime::arguments_store& args )
+{
+    env_detail::fetch_absent( params, args, &env_detail::sys_read_var );
+}
+
+} // namespace env
+} // namespace runtime
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_RUNTIME_ENV_FETCH_HPP
diff --git a/vendor/pdalboost/boost/test/utils/runtime/errors.hpp b/vendor/pdalboost/boost/test/utils/runtime/errors.hpp
new file mode 100644
index 0000000..002c8c3
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/runtime/errors.hpp
@@ -0,0 +1,195 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : defines runtime parameters setup error
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_RUNTIME_INIT_ERROR_HPP
+#define BOOST_TEST_UTILS_RUNTIME_INIT_ERROR_HPP
+
+// Boost.Test Runtime parameters
+#include <boost/test/utils/runtime/fwd.hpp>
+
+// Boost.Test
+#include <boost/test/utils/string_cast.hpp>
+
+// Boost.Test
+#include <boost/config.hpp>
+
+// STL
+#include <exception>
+#include <vector>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+namespace pdalboost {
+namespace runtime {
+
+// ************************************************************************** //
+// **************             runtime::param_error             ************** //
+// ************************************************************************** //
+
+class param_error : public std::exception {
+public:
+    ~param_error() BOOST_NOEXCEPT_OR_NOTHROW {}
+
+    virtual const char * what() const BOOST_NOEXCEPT_OR_NOTHROW
+    {
+        return msg.c_str();
+    }
+
+    cstring     param_name;
+    std::string msg;
+
+protected:
+    explicit    param_error( cstring param_name_ ) : param_name( param_name_) {}
+};
+
+//____________________________________________________________________________//
+
+class init_error : public param_error {
+protected:
+    explicit    init_error( cstring param_name ) : param_error( param_name ) {}
+    ~init_error() BOOST_NOEXCEPT_OR_NOTHROW {}
+};
+
+class input_error : public param_error {
+protected:
+    explicit    input_error( cstring param_name ) : param_error( param_name ) {}
+    ~input_error() BOOST_NOEXCEPT_OR_NOTHROW {}
+};
+
+//____________________________________________________________________________//
+
+template<typename Derived, typename Base>
+class specific_param_error : public Base {
+protected:
+    explicit    specific_param_error( cstring param_name ) : Base( param_name ) {}
+    ~specific_param_error() BOOST_NOEXCEPT_OR_NOTHROW {}
+};
+
+//____________________________________________________________________________//
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+template<typename Derived, typename Base>
+inline Derived
+operator<<(specific_param_error<Derived, Base>&& ex, char const* val)
+{
+    ex.msg.append( val );
+
+    return reinterpret_cast<Derived&&>(ex);
+}
+
+//____________________________________________________________________________//
+
+template<typename Derived, typename Base, typename T>
+inline Derived
+operator<<(specific_param_error<Derived, Base>&& ex, T const& val)
+{
+    ex.msg.append( unit_test::utils::string_cast( val ) );
+
+    return reinterpret_cast<Derived&&>(ex);
+}
+
+//____________________________________________________________________________//
+
+#else
+
+template<typename Derived, typename Base>
+inline Derived
+operator<<(specific_param_error<Derived, Base> const& ex, char const* val)
+{
+    const_cast<specific_param_error<Derived, Base>&>(ex).msg.append( val );
+
+    return static_cast<Derived const&>(ex);
+}
+
+//____________________________________________________________________________//
+
+template<typename Derived, typename Base, typename T>
+inline Derived
+operator<<(specific_param_error<Derived, Base> const& ex, T const& val)
+{
+    const_cast<specific_param_error<Derived, Base>&>(ex).msg.append( unit_test::utils::string_cast( val ) );
+
+    return static_cast<Derived const&>(ex);
+}
+
+//____________________________________________________________________________//
+
+#endif
+
+// ************************************************************************** //
+// **************           specific exception types           ************** //
+// ************************************************************************** //
+
+#define SPECIFIC_EX_TYPE( type, base )                  \
+class type : public specific_param_error<type,base> {   \
+public:                                                 \
+    explicit type( cstring param_name = cstring() )     \
+    : specific_param_error<type,base>( param_name )     \
+    {}                                                  \
+}                                                       \
+/**/
+
+SPECIFIC_EX_TYPE( invalid_cla_id, init_error );
+SPECIFIC_EX_TYPE( duplicate_param, init_error );
+SPECIFIC_EX_TYPE( conflicting_param, init_error );
+SPECIFIC_EX_TYPE( unknown_param, init_error );
+SPECIFIC_EX_TYPE( access_to_missing_argument, init_error );
+SPECIFIC_EX_TYPE( arg_type_mismatch, init_error );
+SPECIFIC_EX_TYPE( invalid_param_spec, init_error );
+
+SPECIFIC_EX_TYPE( format_error, input_error );
+SPECIFIC_EX_TYPE( duplicate_arg, input_error );
+SPECIFIC_EX_TYPE( missing_req_arg, input_error );
+
+#undef SPECIFIC_EX_TYPE
+
+class ambiguous_param : public specific_param_error<ambiguous_param, input_error> {
+public:
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+    explicit    ambiguous_param( std::vector<cstring>&& amb_candidates )
+    : specific_param_error<ambiguous_param,input_error>( "" )
+    , m_amb_candidates( std::move( amb_candidates ) ) {}
+#else
+    explicit    ambiguous_param( std::vector<cstring> const& amb_candidates )
+    : specific_param_error<ambiguous_param,input_error>( "" )
+    , m_amb_candidates( amb_candidates ) {}
+#endif
+    ~ambiguous_param() BOOST_NOEXCEPT_OR_NOTHROW {}
+
+    std::vector<cstring> m_amb_candidates;
+};
+
+class unrecognized_param : public specific_param_error<unrecognized_param, input_error> {
+public:
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+    explicit    unrecognized_param( std::vector<cstring>&& type_candidates )
+    : specific_param_error<unrecognized_param,input_error>( "" )
+    , m_typo_candidates( std::move( type_candidates ) ) {}
+#else
+    explicit    unrecognized_param( std::vector<cstring> const& type_candidates )
+    : specific_param_error<unrecognized_param,input_error>( "" )
+    , m_typo_candidates( type_candidates ) {}
+#endif
+    ~unrecognized_param() BOOST_NOEXCEPT_OR_NOTHROW {}
+
+    std::vector<cstring> m_typo_candidates;
+};
+
+} // namespace runtime
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_RUNTIME_INIT_ERROR_HPP
diff --git a/vendor/pdalboost/boost/test/utils/runtime/finalize.hpp b/vendor/pdalboost/boost/test/utils/runtime/finalize.hpp
new file mode 100644
index 0000000..bfd0dba
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/runtime/finalize.hpp
@@ -0,0 +1,56 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : runtime parameters initialization final step
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_RUNTIME_FINALIZE_HPP
+#define BOOST_TEST_UTILS_RUNTIME_FINALIZE_HPP
+
+// Boost.Test Runtime parameters
+#include <boost/test/utils/runtime/parameter.hpp>
+#include <boost/test/utils/runtime/argument.hpp>
+
+// Boost.Test
+#include <boost/test/utils/foreach.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+namespace pdalboost {
+namespace runtime {
+
+inline void
+finalize_arguments( parameters_store const& params, runtime::arguments_store& args )
+{
+    BOOST_TEST_FOREACH( parameters_store::storage_type::value_type const&, v, params.all() ) {
+        basic_param_ptr param = v.second;
+
+        if( !args.has( param->p_name ) ) {
+            if( param->p_has_default_value )
+                param->produce_default( args );
+
+            if( !args.has( param->p_name ) ) {
+                BOOST_TEST_I_ASSRT( param->p_optional,
+                    missing_req_arg( param->p_name ) << "Missing argument for required parameter " << param->p_name << "." );
+            }
+        }
+
+        if( args.has( param->p_name ) && !!param->p_callback )
+            param->p_callback( param->p_name );
+    }
+}
+
+} // namespace runtime
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_RUNTIME_FINALIZE_HPP
diff --git a/vendor/pdalboost/boost/test/utils/runtime/fwd.hpp b/vendor/pdalboost/boost/test/utils/runtime/fwd.hpp
new file mode 100644
index 0000000..65ebe7b
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/runtime/fwd.hpp
@@ -0,0 +1,45 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : runtime parameters forward declaration
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_RUNTIME_FWD_HPP
+#define BOOST_TEST_UTILS_RUNTIME_FWD_HPP
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp> // operator<<(pdalboost::runtime::cstring)
+
+// Boost
+#include <boost/shared_ptr.hpp>
+
+// STL
+#include <map>
+
+namespace pdalboost {
+namespace runtime {
+
+typedef unit_test::const_string     cstring;
+
+class argument;
+typedef shared_ptr<argument> argument_ptr;
+
+template<typename T> class typed_argument;
+
+class basic_param;
+typedef shared_ptr<basic_param> basic_param_ptr;
+
+} // namespace runtime
+} // namespace pdalboost
+
+#endif // BOOST_TEST_UTILS_RUNTIME_FWD_HPP
diff --git a/vendor/pdalboost/boost/test/utils/runtime/modifier.hpp b/vendor/pdalboost/boost/test/utils/runtime/modifier.hpp
new file mode 100644
index 0000000..56aafe2
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/runtime/modifier.hpp
@@ -0,0 +1,101 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Use, modification, and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : parameter modifiers
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_RUNTIME_MODIFIER_HPP
+#define BOOST_TEST_UTILS_RUNTIME_MODIFIER_HPP
+
+// Boost.Test Runtime parameters
+#include <boost/test/utils/runtime/fwd.hpp>
+
+// Boost.Test
+#include <boost/test/utils/named_params.hpp>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+namespace pdalboost {
+namespace runtime {
+
+// ************************************************************************** //
+// **************         environment variable modifiers       ************** //
+// ************************************************************************** //
+
+namespace {
+
+#if !defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) && !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
+#define BOOST_TEST_CLA_NEW_API
+#endif
+
+#ifdef BOOST_TEST_CLA_NEW_API
+auto const& description     = unit_test::static_constant<nfp::typed_keyword<cstring,struct description_t>>::value;
+auto const& help            = unit_test::static_constant<nfp::typed_keyword<cstring,struct help_t>>::value;
+auto const& env_var         = unit_test::static_constant<nfp::typed_keyword<cstring,struct env_var_t>>::value;
+auto const& end_of_params   = unit_test::static_constant<nfp::typed_keyword<cstring,struct end_of_params_t>>::value;
+auto const& negation_prefix = unit_test::static_constant<nfp::typed_keyword<cstring,struct neg_prefix_t>>::value;
+auto const& value_hint      = unit_test::static_constant<nfp::typed_keyword<cstring,struct value_hint_t>>::value;
+auto const& optional_value  = unit_test::static_constant<nfp::keyword<struct optional_value_t>>::value;
+auto const& default_value   = unit_test::static_constant<nfp::keyword<struct default_value_t>>::value;
+auto const& callback        = unit_test::static_constant<nfp::keyword<struct callback_t>>::value;
+
+template<typename EnumType>
+using enum_values = unit_test::static_constant<
+  nfp::typed_keyword<std::initializer_list<std::pair<const cstring,EnumType>>, struct enum_values_t>
+>;
+
+#else
+
+nfp::typed_keyword<cstring,struct description_t> description;
+nfp::typed_keyword<cstring,struct help_t> help;
+nfp::typed_keyword<cstring,struct env_var_t> env_var;
+nfp::typed_keyword<cstring,struct end_of_params_t> end_of_params;
+nfp::typed_keyword<cstring,struct neg_prefix_t> negation_prefix;
+nfp::typed_keyword<cstring,struct value_hint_t> value_hint;
+nfp::keyword<struct optional_value_t> optional_value;
+nfp::keyword<struct default_value_t> default_value;
+nfp::keyword<struct callback_t> callback;
+
+template<typename EnumType>
+struct enum_values_list {
+    typedef std::pair<cstring,EnumType> ElemT;
+    typedef std::vector<ElemT> ValuesT;
+
+    enum_values_list const&
+    operator()( cstring k, EnumType v ) const
+    {
+        const_cast<enum_values_list*>(this)->m_values.push_back( ElemT( k, v ) );
+
+        return *this;
+    }
+
+    operator ValuesT const&() const { return m_values; }
+
+private:
+    ValuesT m_values;
+};
+
+template<typename EnumType>
+struct enum_values : unit_test::static_constant<
+  nfp::typed_keyword<enum_values_list<EnumType>, struct enum_values_t> >
+{
+};
+
+#endif
+
+} // local namespace
+
+} // namespace runtime
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_RUNTIME_MODIFIER_HPP
diff --git a/vendor/pdalboost/boost/test/utils/runtime/parameter.hpp b/vendor/pdalboost/boost/test/utils/runtime/parameter.hpp
new file mode 100644
index 0000000..e268a05
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/runtime/parameter.hpp
@@ -0,0 +1,472 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : formal parameter definition
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_RUNTIME_PARAMETER_HPP
+#define BOOST_TEST_UTILS_RUNTIME_PARAMETER_HPP
+
+// Boost.Test Runtime parameters
+#include <boost/test/utils/runtime/fwd.hpp>
+#include <boost/test/utils/runtime/modifier.hpp>
+#include <boost/test/utils/runtime/argument.hpp>
+#include <boost/test/utils/runtime/argument_factory.hpp>
+
+// Boost.Test
+#include <boost/test/utils/class_properties.hpp>
+#include <boost/test/utils/foreach.hpp>
+
+// Boost
+#include <boost/function/function2.hpp>
+#include <boost/algorithm/cxx11/all_of.hpp>
+
+// STL
+#include <algorithm>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+namespace pdalboost {
+namespace runtime {
+
+// ************************************************************************** //
+// **************           runtime::parameter_cla_id          ************** //
+// ************************************************************************** //
+// set of attributes identifying the parameter in the command line
+
+struct parameter_cla_id {
+    parameter_cla_id( cstring prefix, cstring tag, cstring value_separator, bool negatable )
+    : m_prefix( prefix.begin(), prefix.size() )
+    , m_tag( tag.begin(), tag.size() )
+    , m_value_separator( value_separator.begin(), value_separator.size() )
+    , m_negatable( negatable )
+    {
+
+        BOOST_TEST_I_ASSRT( algorithm::all_of( m_prefix.begin(), m_prefix.end(), valid_prefix_char ),
+                            invalid_cla_id() << "Parameter " << m_tag
+                                             << " has invalid characters in prefix." );
+
+        BOOST_TEST_I_ASSRT( algorithm::all_of( m_tag.begin(), m_tag.end(), valid_name_char ),
+                            invalid_cla_id() << "Parameter " << m_tag
+                                             << " has invalid characters in name." );
+
+        BOOST_TEST_I_ASSRT( algorithm::all_of( m_value_separator.begin(), m_value_separator.end(), valid_separator_char ),
+                            invalid_cla_id() << "Parameter " << m_tag
+                                             << " has invalid characters in value separator." );
+    }
+
+    static bool             valid_prefix_char( char c )
+    {
+        return c == '-' || c == '/' ;
+    }
+    static bool             valid_separator_char( char c )
+    {
+        return c == '=' || c == ':' || c == ' ' || c == '\0';
+    }
+    static bool             valid_name_char( char c )
+    {
+        return std::isalnum( c ) || c == '+' || c == '_' || c == '?';
+    }
+
+    std::string             m_prefix;
+    std::string             m_tag;
+    std::string             m_value_separator;
+    bool                    m_negatable;
+};
+
+typedef std::vector<parameter_cla_id> param_cla_ids;
+
+// ************************************************************************** //
+// **************             runtime::basic_param             ************** //
+// ************************************************************************** //
+
+cstring const help_prefix("////");
+
+class basic_param {
+    typedef function<void (cstring)>            callback_type;
+    typedef unit_test::readwrite_property<bool> bool_property;
+
+protected:
+    /// Constructor with modifiers
+    template<typename Modifiers>
+    basic_param( cstring name, bool is_optional, bool is_repeatable, Modifiers const& m )
+    : p_name( name.begin(), name.end() )
+    , p_description( nfp::opt_get( m, description, std::string() ) )
+    , p_help( nfp::opt_get( m, runtime::help, std::string() ) )
+    , p_env_var( nfp::opt_get( m, env_var, std::string() ) )
+    , p_value_hint( nfp::opt_get( m, value_hint, std::string() ) )
+    , p_optional( is_optional )
+    , p_repeatable( is_repeatable )
+    , p_has_optional_value( m.has( optional_value ) )
+    , p_has_default_value( m.has( default_value ) || is_repeatable )
+    , p_callback( nfp::opt_get( m, callback, callback_type() ) )
+    {
+        add_cla_id( help_prefix, name, ":" );
+    }
+
+public:
+    virtual                 ~basic_param() {}
+
+    // Pubic properties
+    std::string const       p_name;
+    std::string const       p_description;
+    std::string const       p_help;
+    std::string const       p_env_var;
+    std::string const       p_value_hint;
+    bool const              p_optional;
+    bool const              p_repeatable;
+    bool_property           p_has_optional_value;
+    bool_property           p_has_default_value;
+    callback_type const     p_callback;
+
+    /// interface for cloning typed parameters
+    virtual basic_param_ptr clone() const = 0;
+
+    /// Access methods
+    param_cla_ids const&    cla_ids() const { return m_cla_ids; }
+    void                    add_cla_id( cstring prefix, cstring tag, cstring value_separator )
+    {
+        add_cla_id_impl( prefix, tag, value_separator, false, true );
+    }
+
+    /// interface for producing argument values for this parameter
+    virtual void            produce_argument( cstring token, bool negative_form, arguments_store& store ) const = 0;
+    virtual void            produce_default( arguments_store& store ) const = 0;
+
+    /// interfaces for help message reporting
+    virtual void            usage( std::ostream& ostr, cstring negation_prefix_ )
+    {
+        ostr     << "Parameter: " << p_name << '\n';
+        if( !p_description.empty() )
+            ostr << ' ' << p_description << '\n';
+
+        ostr     << " Command line formats:\n";
+        BOOST_TEST_FOREACH( parameter_cla_id const&, id, cla_ids() ) {
+            if( id.m_prefix == help_prefix )
+                continue;
+
+            ostr << "   " << id.m_prefix;
+            if( id.m_negatable )
+                cla_name_help( ostr, id.m_tag, negation_prefix_ );
+            else
+                cla_name_help( ostr, id.m_tag, "" );
+
+            bool optional_value_ = false;
+
+            if( p_has_optional_value ) {
+                optional_value_ = true;
+                ostr << '[';
+            }
+
+            if( id.m_value_separator.empty() )
+                ostr << ' ';
+            else {
+                ostr << id.m_value_separator;
+            }
+
+            value_help( ostr );
+
+            if( optional_value_ )
+                ostr << ']';
+
+            ostr << '\n';
+        }
+        if( !p_env_var.empty() )
+            ostr << " Environment variable: " << p_env_var << '\n';
+    }
+
+    virtual void            help( std::ostream& ostr, cstring negation_prefix_ )
+    {
+        usage( ostr, negation_prefix_ );
+
+        if( !p_help.empty() )
+            ostr << '\n' << p_help << '\n';
+    }
+
+protected:
+    void                    add_cla_id_impl( cstring prefix,
+                                             cstring tag,
+                                             cstring value_separator,
+                                             bool negatable,
+                                             bool validate_value_separator )
+    {
+        BOOST_TEST_I_ASSRT( !tag.is_empty(),
+                            invalid_cla_id() << "Parameter can't have an empty name." );
+
+        BOOST_TEST_I_ASSRT( !prefix.is_empty(),
+                            invalid_cla_id() << "Parameter " << tag
+                                             << " can't have an empty prefix." );
+
+        BOOST_TEST_I_ASSRT( !value_separator.is_empty(),
+                            invalid_cla_id() << "Parameter " << tag
+                                             << " can't have an empty value separator." );
+
+        // We trim value separator from all the spaces, so token end will indicate separator
+        value_separator.trim();
+        BOOST_TEST_I_ASSRT( !validate_value_separator || !value_separator.is_empty() || !p_has_optional_value,
+                            invalid_cla_id() << "Parameter " << tag
+                                             << " with optional value attribute can't use space as value separator." );
+
+        m_cla_ids.push_back( parameter_cla_id( prefix, tag, value_separator, negatable ) );
+    }
+
+private:
+    /// interface for usage/help customization
+    virtual void            cla_name_help( std::ostream& ostr, cstring cla_tag, cstring negation_prefix_ ) const
+    {
+        ostr << cla_tag;
+    }
+    virtual void            value_help( std::ostream& ostr ) const
+    {
+        if( p_value_hint.empty() )
+            ostr << "<value>";
+        else
+            ostr << p_value_hint;
+    }
+
+    // Data members
+    param_cla_ids       m_cla_ids;
+};
+
+// ************************************************************************** //
+// **************              runtime::parameter              ************** //
+// ************************************************************************** //
+
+enum args_amount {
+    OPTIONAL_PARAM,   // 0-1
+    REQUIRED_PARAM,   // exactly 1
+    REPEATABLE_PARAM  // 0-N
+};
+
+//____________________________________________________________________________//
+
+template<typename ValueType, args_amount a = runtime::OPTIONAL_PARAM, bool is_enum = false>
+class parameter : public basic_param {
+public:
+    /// Constructor with modifiers
+#ifndef BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+    template<typename Modifiers=nfp::no_params_type>
+    parameter( cstring name, Modifiers const& m = nfp::no_params )
+#else
+    template<typename Modifiers>
+    parameter( cstring name, Modifiers const& m )
+#endif
+    : basic_param( name, a != runtime::REQUIRED_PARAM, a == runtime::REPEATABLE_PARAM, m )
+    , m_arg_factory( m )
+    {
+        BOOST_TEST_I_ASSRT( !m.has( default_value ) || a == runtime::OPTIONAL_PARAM,
+                            invalid_param_spec() << "Parameter " << name
+                                                 << " is not optional and can't have default_value." );
+
+        BOOST_TEST_I_ASSRT( !m.has( optional_value ) || !this->p_repeatable,
+                            invalid_param_spec() << "Parameter " << name
+                                                 << " is repeatable and can't have optional_value." );
+    }
+
+private:
+    virtual basic_param_ptr clone() const
+    {
+        return basic_param_ptr( new parameter( *this ) );
+    }
+    virtual void    produce_argument( cstring token, bool , arguments_store& store ) const
+    {
+        m_arg_factory.produce_argument( token, this->p_name, store );
+    }
+    virtual void    produce_default( arguments_store& store ) const
+    {
+        if( !this->p_has_default_value )
+            return;
+
+        m_arg_factory.produce_default( this->p_name, store );
+    }
+
+    // Data members
+    typedef argument_factory<ValueType, is_enum, a == runtime::REPEATABLE_PARAM> factory_t;
+    factory_t       m_arg_factory;
+};
+
+//____________________________________________________________________________//
+
+class option : public basic_param {
+public:
+    /// Constructor with modifiers
+#ifndef BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+    template<typename Modifiers=nfp::no_params_type>
+    option( cstring name, Modifiers const& m = nfp::no_params )
+#else
+    template<typename Modifiers>
+    option( cstring name, Modifiers const& m )
+#endif
+    : basic_param( name, true, false, nfp::opt_append( nfp::opt_append( m, optional_value = true), default_value = false) )
+    , m_arg_factory( nfp::opt_append( nfp::opt_append( m, optional_value = true), default_value = false) )
+    {
+    }
+
+    void            add_cla_id( cstring prefix, cstring tag, cstring value_separator, bool negatable = false )
+    {
+        add_cla_id_impl( prefix, tag, value_separator, negatable, false );
+    }
+
+private:
+    virtual basic_param_ptr clone() const
+    {
+        return basic_param_ptr( new option( *this ) );
+    }
+
+    virtual void    produce_argument( cstring token, bool negative_form, arguments_store& store ) const
+    {
+        if( token.empty() )
+            store.set( p_name, !negative_form );
+        else {
+            BOOST_TEST_I_ASSRT( !negative_form,
+                                format_error( p_name ) << "Can't set value to negative form of the argument." );
+
+            m_arg_factory.produce_argument( token, p_name, store );
+        }
+    }
+
+    virtual void    produce_default( arguments_store& store ) const
+    {
+        m_arg_factory.produce_default( p_name, store );
+    }
+    virtual void    cla_name_help( std::ostream& ostr, cstring cla_tag, cstring negation_prefix_ ) const
+    {
+        if( negation_prefix_.is_empty() )
+            ostr << cla_tag;
+        else
+            ostr << '[' << negation_prefix_ << ']' << cla_tag;
+    }
+    virtual void    value_help( std::ostream& ostr ) const
+    {
+        if( p_value_hint.empty() )
+            ostr << "<boolean value>";
+        else
+            ostr << p_value_hint;
+    }
+
+    // Data members
+    typedef argument_factory<bool, false, false> factory_t;
+    factory_t       m_arg_factory;
+};
+
+//____________________________________________________________________________//
+
+template<typename EnumType, args_amount a = runtime::OPTIONAL_PARAM>
+class enum_parameter : public parameter<EnumType, a, true> {
+    typedef parameter<EnumType, a, true> base;
+public:
+    /// Constructor with modifiers
+#ifndef BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
+    template<typename Modifiers=nfp::no_params_type>
+    enum_parameter( cstring name, Modifiers const& m = nfp::no_params )
+#else
+    template<typename Modifiers>
+    enum_parameter( cstring name, Modifiers const& m )
+#endif
+    : base( name, m )
+    {
+#ifdef BOOST_TEST_CLA_NEW_API
+        auto const& values = m[enum_values<EnumType>::value];
+        auto it = values.begin();
+#else
+        std::vector<std::pair<cstring, EnumType> > const& values = m[enum_values<EnumType>::value];
+        typename std::vector<std::pair<cstring, EnumType> >::const_iterator it = values.begin();
+#endif
+        while( it != values.end() ) {
+            m_valid_names.push_back( it->first );
+            ++it;
+        }
+    }
+
+private:
+    virtual basic_param_ptr clone() const
+    {
+        return basic_param_ptr( new enum_parameter( *this ) );
+    }
+
+    virtual void    value_help( std::ostream& ostr ) const
+    {
+        if( this->p_value_hint.empty() ) {
+            ostr << "<";
+            bool first = true;
+            BOOST_TEST_FOREACH( cstring, name, m_valid_names ) {
+                if( first )
+                    first = false;
+                else
+                    ostr << '|';
+                ostr << name;
+            }
+            ostr << ">";
+        }
+        else
+            ostr << this->p_value_hint;
+    }
+
+    // Data members
+    std::vector<cstring>    m_valid_names;
+};
+
+
+// ************************************************************************** //
+// **************           runtime::parameters_store          ************** //
+// ************************************************************************** //
+
+class parameters_store {
+    struct lg_compare {
+        bool operator()( cstring lh, cstring rh ) const
+        {
+            return std::lexicographical_compare(lh.begin(), lh.end(),
+                                                rh.begin(), rh.end());
+        }
+    };
+public:
+
+    typedef std::map<cstring, basic_param_ptr, lg_compare> storage_type;
+
+    /// Adds parameter into the persistent store
+    void                    add( basic_param const& in )
+    {
+        basic_param_ptr p = in.clone();
+
+        BOOST_TEST_I_ASSRT( m_parameters.insert( std::make_pair( cstring(p->p_name), p ) ).second,
+                            duplicate_param() << "Parameter " << p->p_name << " is duplicate." );
+    }
+
+    /// Returns true if there is no parameters registered
+    bool                    is_empty() const    { return m_parameters.empty(); }
+    /// Returns map of all the registered parameter
+    storage_type const&     all() const         { return m_parameters; }
+    /// Returns true if parameter with psecified name is registered
+    bool                    has( cstring name ) const
+    {
+        return m_parameters.find( name ) != m_parameters.end();
+    }
+    /// Returns map of all the registered parameter
+    basic_param_ptr         get( cstring name ) const
+    {
+        storage_type::const_iterator const& found = m_parameters.find( name );
+        BOOST_TEST_I_ASSRT( found != m_parameters.end(),
+                            unknown_param() << "Parameter " << name << " is unknown." );
+
+        return found->second;
+    }
+
+private:
+    // Data members
+    storage_type            m_parameters;
+};
+
+} // namespace runtime
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_RUNTIME_PARAMETER_HPP
diff --git a/vendor/pdalboost/boost/test/utils/setcolor.hpp b/vendor/pdalboost/boost/test/utils/setcolor.hpp
new file mode 100644
index 0000000..6e22f14
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/setcolor.hpp
@@ -0,0 +1,126 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : contains definition for setcolor iostream manipulator
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_SETCOLOR_HPP
+#define BOOST_TEST_UTILS_SETCOLOR_HPP
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+// STL
+#include <iostream>
+#include <cstdio>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace utils {
+
+// ************************************************************************** //
+// **************                    term_attr                 ************** //
+// ************************************************************************** //
+
+struct term_attr { enum _ {
+    NORMAL    = 0,
+    BRIGHT    = 1,
+    DIM       = 2,
+    UNDERLINE = 4,
+    BLINK     = 5,
+    REVERSE   = 7,
+    CROSSOUT  = 9
+}; };
+
+// ************************************************************************** //
+// **************                   term_color                 ************** //
+// ************************************************************************** //
+
+struct term_color { enum _ {
+    BLACK    = 0,
+    RED      = 1,
+    GREEN    = 2,
+    YELLOW   = 3,
+    BLUE     = 4,
+    MAGENTA  = 5,
+    CYAN     = 6,
+    WHITE    = 7,
+    ORIGINAL = 9
+}; };
+
+// ************************************************************************** //
+// **************                    setcolor                  ************** //
+// ************************************************************************** //
+
+class setcolor {
+public:
+    // Constructor
+    explicit    setcolor( term_attr::_  attr = term_attr::NORMAL,
+                          term_color::_ fg   = term_color::ORIGINAL,
+                          term_color::_ bg   = term_color::ORIGINAL )
+    {
+        m_command_size = std::sprintf( m_control_command, "%c[%d;%d;%dm", 0x1B, attr, fg + 30, bg + 40 );
+    }
+
+    friend std::ostream&
+    operator<<( std::ostream& os, setcolor const& sc )
+    {
+        return os.write( sc.m_control_command, sc.m_command_size );
+    }
+
+private:
+    // Data members
+    char        m_control_command[13];
+    int         m_command_size;
+};
+
+// ************************************************************************** //
+// **************                 scope_setcolor               ************** //
+// ************************************************************************** //
+
+struct scope_setcolor {
+    scope_setcolor() : m_os( 0 ) {}
+    explicit    scope_setcolor( std::ostream& os,
+                                term_attr::_  attr = term_attr::NORMAL,
+                                term_color::_ fg   = term_color::ORIGINAL,
+                                term_color::_ bg   = term_color::ORIGINAL )
+    : m_os( &os )
+    {
+        os << setcolor( attr, fg, bg );
+    }
+    ~scope_setcolor()
+    {
+        if( m_os )
+            *m_os << setcolor();
+    }
+private:
+    // Data members
+    std::ostream* m_os;
+};
+
+#define BOOST_TEST_SCOPE_SETCOLOR( is_color_output, os, attr, color )   \
+    utils::scope_setcolor const& sc = is_color_output                   \
+           ? utils::scope_setcolor( os, utils::attr, utils::color )     \
+           : utils::scope_setcolor();                                   \
+    ut_detail::ignore_unused_variable_warning( sc )                     \
+/**/
+
+} // namespace utils
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_SETCOLOR_HPP
diff --git a/vendor/pdalboost/boost/test/utils/string_cast.hpp b/vendor/pdalboost/boost/test/utils/string_cast.hpp
new file mode 100644
index 0000000..e74651b
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/string_cast.hpp
@@ -0,0 +1,69 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : trivial utility to cast to/from strings
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_STRING_CAST_HPP
+#define BOOST_TEST_UTILS_STRING_CAST_HPP
+
+// Boost.Test
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+
+// STL
+#include <sstream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace utils {
+
+// ************************************************************************** //
+// **************                  string_cast                 ************** //
+// ************************************************************************** //
+
+template<typename T>
+inline std::string
+string_cast( T const& t )
+{
+    std::ostringstream buff;
+    buff << t;
+    return buff.str();
+}
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                  string_as                 ************** //
+// ************************************************************************** //
+
+template<typename T>
+inline bool
+string_as( const_string str, T& res )
+{
+    std::istringstream buff( std::string( str.begin(), str.end() ) );
+    buff >> res;
+
+    return !buff.fail() && buff.eof();
+}
+
+//____________________________________________________________________________//
+
+} // namespace utils
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_STRING_CAST_HPP
diff --git a/vendor/pdalboost/boost/test/utils/trivial_singleton.hpp b/vendor/pdalboost/boost/test/utils/trivial_singleton.hpp
new file mode 100644
index 0000000..e4a660d
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/trivial_singleton.hpp
@@ -0,0 +1,79 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : simple helpers for creating cusom output manipulators
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_TRIVIAL_SIGNLETON_HPP
+#define BOOST_TEST_UTILS_TRIVIAL_SIGNLETON_HPP
+
+// Boost.Test
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+// Boost
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+
+// ************************************************************************** //
+// **************                   singleton                  ************** //
+// ************************************************************************** //
+
+template<typename Derived>
+class singleton {
+public:
+    static Derived& instance() { static Derived the_inst; return the_inst; }
+
+    BOOST_DELETED_FUNCTION(singleton(singleton const&))
+    BOOST_DELETED_FUNCTION(singleton& operator=(singleton const&))
+
+protected:
+    BOOST_DEFAULTED_FUNCTION(singleton(), {})
+    BOOST_DEFAULTED_FUNCTION(~singleton(), {})
+};
+
+//____________________________________________________________________________//
+
+#define BOOST_TEST_SINGLETON_CONS( type )       \
+friend class pdalboost::unit_test::singleton<type>; \
+type() {}                                       \
+/**/
+
+#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
+
+#define BOOST_TEST_SINGLETON_INST( inst ) \
+template class unit_test::singleton< BOOST_JOIN( inst, _t ) > ; \
+namespace { BOOST_JOIN( inst, _t)& inst = BOOST_JOIN( inst, _t)::instance(); }
+
+#elif defined(__APPLE_CC__) && defined(__GNUC__) && __GNUC__ < 4
+#define BOOST_TEST_SINGLETON_INST( inst ) \
+static BOOST_JOIN( inst, _t)& inst = BOOST_JOIN (inst, _t)::instance();
+
+#else
+
+#define BOOST_TEST_SINGLETON_INST( inst ) \
+namespace { BOOST_JOIN( inst, _t)& inst = BOOST_JOIN( inst, _t)::instance(); }
+
+#endif
+
+//____________________________________________________________________________//
+
+} // namespace unit_test
+} // namespace pdalboost
+
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_TRIVIAL_SIGNLETON_HPP
diff --git a/vendor/pdalboost/boost/test/utils/wrap_stringstream.hpp b/vendor/pdalboost/boost/test/utils/wrap_stringstream.hpp
new file mode 100644
index 0000000..ca3f8de
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/wrap_stringstream.hpp
@@ -0,0 +1,162 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : wraps strstream and stringstream (depends with one is present)
+//                to provide the unified interface
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_WRAP_STRINGSTREAM_HPP
+#define BOOST_TEST_UTILS_WRAP_STRINGSTREAM_HPP
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+// STL
+#ifdef BOOST_NO_STRINGSTREAM
+#include <strstream>        // for std::ostrstream
+#else
+#include <sstream>          // for std::ostringstream
+#endif // BOOST_NO_STRINGSTREAM
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+
+// ************************************************************************** //
+// **************            basic_wrap_stringstream           ************** //
+// ************************************************************************** //
+
+template<typename CharT>
+class basic_wrap_stringstream {
+public:
+#if defined(BOOST_CLASSIC_IOSTREAMS)
+    typedef std::ostringstream               wrapped_stream;
+#elif defined(BOOST_NO_STRINGSTREAM)
+    typedef std::basic_ostrstream<CharT>     wrapped_stream;
+#else
+    typedef std::basic_ostringstream<CharT>  wrapped_stream;
+#endif // BOOST_NO_STRINGSTREAM
+    // Access methods
+    basic_wrap_stringstream&        ref();
+    wrapped_stream&                 stream();
+    std::basic_string<CharT> const& str();
+
+private:
+    // Data members
+    wrapped_stream                  m_stream;
+    std::basic_string<CharT>        m_str;
+};
+
+//____________________________________________________________________________//
+
+template <typename CharT, typename T>
+inline basic_wrap_stringstream<CharT>&
+operator<<( basic_wrap_stringstream<CharT>& targ, T const& t )
+{
+    targ.stream() << t;
+    return targ;
+}
+
+//____________________________________________________________________________//
+
+template <typename CharT>
+inline typename basic_wrap_stringstream<CharT>::wrapped_stream&
+basic_wrap_stringstream<CharT>::stream()
+{
+    return m_stream;
+}
+
+//____________________________________________________________________________//
+
+template <typename CharT>
+inline basic_wrap_stringstream<CharT>&
+basic_wrap_stringstream<CharT>::ref()
+{
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+template <typename CharT>
+inline std::basic_string<CharT> const&
+basic_wrap_stringstream<CharT>::str()
+{
+
+#ifdef BOOST_NO_STRINGSTREAM
+    m_str.assign( m_stream.str(), m_stream.pcount() );
+    m_stream.freeze( false );
+#else
+    m_str = m_stream.str();
+#endif
+
+    return m_str;
+}
+
+//____________________________________________________________________________//
+
+template <typename CharT>
+inline basic_wrap_stringstream<CharT>&
+operator<<( basic_wrap_stringstream<CharT>& targ, basic_wrap_stringstream<CharT>& src )
+{
+    targ << src.str();
+    return targ;
+}
+
+//____________________________________________________________________________//
+
+#if BOOST_TEST_USE_STD_LOCALE
+
+template <typename CharT>
+inline basic_wrap_stringstream<CharT>&
+operator<<( basic_wrap_stringstream<CharT>& targ, std::ios_base& (BOOST_TEST_CALL_DECL *man)(std::ios_base&) )
+{
+    targ.stream() << man;
+    return targ;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT,typename Elem,typename Tr>
+inline basic_wrap_stringstream<CharT>&
+operator<<( basic_wrap_stringstream<CharT>& targ, std::basic_ostream<Elem,Tr>& (BOOST_TEST_CALL_DECL *man)(std::basic_ostream<Elem, Tr>&) )
+{
+    targ.stream() << man;
+    return targ;
+}
+
+//____________________________________________________________________________//
+
+template<typename CharT,typename Elem,typename Tr>
+inline basic_wrap_stringstream<CharT>&
+operator<<( basic_wrap_stringstream<CharT>& targ, std::basic_ios<Elem, Tr>& (BOOST_TEST_CALL_DECL *man)(std::basic_ios<Elem, Tr>&) )
+{
+    targ.stream() << man;
+    return targ;
+}
+
+//____________________________________________________________________________//
+
+#endif
+
+// ************************************************************************** //
+// **************               wrap_stringstream              ************** //
+// ************************************************************************** //
+
+typedef basic_wrap_stringstream<char>       wrap_stringstream;
+typedef basic_wrap_stringstream<wchar_t>    wrap_wstringstream;
+
+}  // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif  // BOOST_TEST_UTILS_WRAP_STRINGSTREAM_HPP
diff --git a/vendor/pdalboost/boost/test/utils/xml_printer.hpp b/vendor/pdalboost/boost/test/utils/xml_printer.hpp
new file mode 100644
index 0000000..15d523c
--- /dev/null
+++ b/vendor/pdalboost/boost/test/utils/xml_printer.hpp
@@ -0,0 +1,143 @@
+//  (C) Copyright Gennadiy Rozental 2001.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : common code used by any agent serving as OF_XML printer
+// ***************************************************************************
+
+#ifndef BOOST_TEST_UTILS_XML_PRINTER_HPP
+#define BOOST_TEST_UTILS_XML_PRINTER_HPP
+
+// Boost.Test
+#include <boost/test/utils/basic_cstring/basic_cstring.hpp>
+#include <boost/test/utils/custom_manip.hpp>
+#include <boost/test/utils/foreach.hpp>
+#include <boost/test/utils/basic_cstring/io.hpp>
+
+// Boost
+#include <boost/config.hpp>
+
+// STL
+#include <iostream>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+namespace pdalboost {
+namespace unit_test {
+namespace utils {
+
+// ************************************************************************** //
+// **************               xml print helpers              ************** //
+// ************************************************************************** //
+
+inline void
+print_escaped( std::ostream& where_to, const_string value )
+{
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
+    static std::map<char,char const*> const char_type{{
+        {'<' , "lt"},
+        {'>' , "gt"},
+        {'&' , "amp"},
+        {'\'', "apos"},
+        {'"' , "quot"}
+    }};
+#else
+    static std::map<char,char const*> char_type;
+
+    if( char_type.empty() ) {
+        char_type['<'] = "lt";
+        char_type['>'] = "gt";
+        char_type['&'] = "amp";
+        char_type['\'']= "apos";
+        char_type['"'] = "quot";
+    }
+#endif
+
+    BOOST_TEST_FOREACH( char, c, value ) {
+        std::map<char,char const*>::const_iterator found_ref = char_type.find( c );
+
+        if( found_ref != char_type.end() )
+            where_to << '&' << found_ref->second << ';';
+        else
+            where_to << c;
+    }
+}
+
+//____________________________________________________________________________//
+
+inline void
+print_escaped( std::ostream& where_to, std::string const& value )
+{
+    print_escaped( where_to, const_string( value ) );
+}
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline void
+print_escaped( std::ostream& where_to, T const& value )
+{
+    where_to << value;
+}
+
+//____________________________________________________________________________//
+
+inline void
+print_escaped_cdata( std::ostream& where_to, const_string value )
+{
+    static const_string cdata_end( "]]>" );
+
+    const_string::size_type pos = value.find( cdata_end );
+    if( pos == const_string::npos )
+        where_to << value;
+    else {
+        where_to << value.substr( 0, pos+2 ) << cdata_end
+                 << BOOST_TEST_L( "<![CDATA[" ) << value.substr( pos+2 );
+    }
+}
+
+//____________________________________________________________________________//
+
+typedef custom_manip<struct attr_value_t> attr_value;
+
+template<typename T>
+inline std::ostream&
+operator<<( custom_printer<attr_value> const& p, T const& value )
+{
+    *p << "=\"";
+    print_escaped( *p, value );
+    *p << '"';
+
+    return *p;
+}
+
+//____________________________________________________________________________//
+
+typedef custom_manip<struct cdata_t> cdata;
+
+inline std::ostream&
+operator<<( custom_printer<cdata> const& p, const_string value )
+{
+    *p << BOOST_TEST_L( "<![CDATA[" );
+    print_escaped_cdata( *p, value );
+    return  *p << BOOST_TEST_L( "]]>" );
+}
+
+//____________________________________________________________________________//
+
+} // namespace utils
+} // namespace unit_test
+} // namespace pdalboost
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_UTILS_XML_PRINTER_HPP
diff --git a/vendor/pdalboost/boost/throw_exception.hpp b/vendor/pdalboost/boost/throw_exception.hpp
new file mode 100644
index 0000000..6f0fe3d
--- /dev/null
+++ b/vendor/pdalboost/boost/throw_exception.hpp
@@ -0,0 +1,102 @@
+#ifndef UUID_AA15E74A856F11E08B8D93F24824019B
+#define UUID_AA15E74A856F11E08B8D93F24824019B
+#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma GCC system_header
+#endif
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(push,1)
+#endif
+
+// MS compatible compilers support #pragma once
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+//
+//  boost/throw_exception.hpp
+//
+//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+//  Copyright (c) 2008-2009 Emil Dotchevski and Reverge Studios, Inc.
+//
+//  Distributed under the Boost Software License, Version 1.0. (See
+//  accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//
+//  http://www.boost.org/libs/utility/throw_exception.html
+//
+
+#include <boost/detail/workaround.hpp>
+#include <boost/config.hpp>
+#include <exception>
+
+#if !defined( BOOST_EXCEPTION_DISABLE ) && defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x593) )
+# define BOOST_EXCEPTION_DISABLE
+#endif
+
+#if !defined( BOOST_EXCEPTION_DISABLE ) && defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1310 )
+# define BOOST_EXCEPTION_DISABLE
+#endif
+
+#if !defined( BOOST_EXCEPTION_DISABLE )
+# include <boost/exception/exception.hpp>
+#if !defined(BOOST_THROW_EXCEPTION_CURRENT_FUNCTION)
+# include <boost/current_function.hpp>
+# define BOOST_THROW_EXCEPTION_CURRENT_FUNCTION BOOST_CURRENT_FUNCTION
+#endif
+# define BOOST_THROW_EXCEPTION(x) ::pdalboost::exception_detail::throw_exception_(x,BOOST_THROW_EXCEPTION_CURRENT_FUNCTION,__FILE__,__LINE__)
+#else
+# define BOOST_THROW_EXCEPTION(x) ::pdalboost::throw_exception(x)
+#endif
+
+namespace pdalboost
+{
+#ifdef BOOST_NO_EXCEPTIONS
+
+void throw_exception( std::exception const & e ); // user defined
+
+#else
+
+inline void throw_exception_assert_compatibility( std::exception const & ) { }
+
+template<class E> BOOST_NORETURN inline void throw_exception( E const & e )
+{
+    //All boost exceptions are required to derive from std::exception,
+    //to ensure compatibility with BOOST_NO_EXCEPTIONS.
+    throw_exception_assert_compatibility(e);
+
+#ifndef BOOST_EXCEPTION_DISABLE
+    throw enable_current_exception(enable_error_info(e));
+#else
+    throw e;
+#endif
+}
+
+#endif
+
+#if !defined( BOOST_EXCEPTION_DISABLE )
+    namespace
+    exception_detail
+    {
+        template <class E>
+        BOOST_NORETURN
+        void
+        throw_exception_( E const & x, char const * current_function, char const * file, int line )
+        {
+            pdalboost::throw_exception(
+                set_info(
+                    set_info(
+                        set_info(
+                            enable_error_info(x),
+                            throw_function(current_function)),
+                        throw_file(file)),
+                    throw_line(line)));
+        }
+    }
+#endif
+} // namespace pdalboost
+
+#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/vendor/pdalboost/boost/timer.hpp b/vendor/pdalboost/boost/timer.hpp
new file mode 100644
index 0000000..7fe36a0
--- /dev/null
+++ b/vendor/pdalboost/boost/timer.hpp
@@ -0,0 +1,72 @@
+//  boost timer.hpp header file  ---------------------------------------------//
+
+//  Copyright Beman Dawes 1994-99.  Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/timer for documentation.
+
+//  Revision History
+//  01 Apr 01  Modified to use new <boost/limits.hpp> header. (JMaddock)
+//  12 Jan 01  Change to inline implementation to allow use without library
+//             builds. See docs for more rationale. (Beman Dawes) 
+//  25 Sep 99  elapsed_max() and elapsed_min() added (John Maddock)
+//  16 Jul 99  Second beta
+//   6 Jul 99  Initial boost version
+
+#ifndef BOOST_TIMER_HPP
+#define BOOST_TIMER_HPP
+
+#include <boost/config.hpp>
+#include <ctime>
+#include <boost/limits.hpp>
+
+# ifdef BOOST_NO_STDC_NAMESPACE
+    namespace std { using ::clock_t; using ::clock; }
+# endif
+
+
+namespace pdalboost {
+
+//  timer  -------------------------------------------------------------------//
+
+//  A timer object measures elapsed time.
+
+//  It is recommended that implementations measure wall clock rather than CPU
+//  time since the intended use is performance measurement on systems where
+//  total elapsed time is more important than just process or CPU time.
+
+//  Warnings: The maximum measurable elapsed time may well be only 596.5+ hours
+//  due to implementation limitations.  The accuracy of timings depends on the
+//  accuracy of timing information provided by the underlying platform, and
+//  this varies a great deal from platform to platform.
+
+class timer
+{
+ public:
+         timer() { _start_time = std::clock(); } // postcondition: elapsed()==0
+//         timer( const timer& src );      // post: elapsed()==src.elapsed()
+//        ~timer(){}
+//  timer& operator=( const timer& src );  // post: elapsed()==src.elapsed()
+  void   restart() { _start_time = std::clock(); } // post: elapsed()==0
+  double elapsed() const                  // return elapsed time in seconds
+    { return  double(std::clock() - _start_time) / CLOCKS_PER_SEC; }
+
+  double elapsed_max() const   // return estimated maximum value for elapsed()
+  // Portability warning: elapsed_max() may return too high a value on systems
+  // where std::clock_t overflows or resets at surprising values.
+  {
+    return (double((std::numeric_limits<std::clock_t>::max)())
+       - double(_start_time)) / double(CLOCKS_PER_SEC); 
+  }
+
+  double elapsed_min() const            // return minimum value for elapsed()
+   { return double(1)/double(CLOCKS_PER_SEC); }
+
+ private:
+  std::clock_t _start_time;
+}; // timer
+
+} // namespace pdalboost
+
+#endif  // BOOST_TIMER_HPP
diff --git a/vendor/pdalboost/boost/timer/config.hpp b/vendor/pdalboost/boost/timer/config.hpp
new file mode 100644
index 0000000..df6971c
--- /dev/null
+++ b/vendor/pdalboost/boost/timer/config.hpp
@@ -0,0 +1,53 @@
+//  boost/timer/config.hpp  -----------------------------------------------------------//
+
+//  Copyright Beman Dawes 2003, 2006, 2011
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  See http://www.boost.org/libs/timer for documentation.
+
+#ifndef BOOST_TIMER_CONFIG_HPP
+#define BOOST_TIMER_CONFIG_HPP
+
+#include <boost/config.hpp>
+
+#include <boost/system/api_config.hpp> 
+
+// This header implements separate compilation features as described in
+// http://www.boost.org/more/separate_compilation.html
+
+//  enable dynamic or static linking as requested --------------------------------------//
+
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_TIMER_DYN_LINK)
+# if defined(BOOST_TIMER_SOURCE)
+#   define BOOST_TIMER_DECL BOOST_SYMBOL_EXPORT
+# else
+#   define BOOST_TIMER_DECL BOOST_SYMBOL_IMPORT
+# endif
+#else
+# define BOOST_TIMER_DECL
+#endif
+
+//  enable automatic library variant selection  ----------------------------------------//
+
+#if !defined(BOOST_TIMER_SOURCE) && !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_TIMER_NO_LIB)
+//
+// Set the name of our library, this will get undef'ed by auto_link.hpp
+// once it's done with it:
+//
+#define BOOST_LIB_NAME pdalboost_timer
+//
+// If we're importing code from a dll, then tell auto_link.hpp about it:
+//
+#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_TIMER_DYN_LINK)
+#  define BOOST_DYN_LINK
+#endif
+//
+// And include the header that does the work:
+//
+#include <boost/config/auto_link.hpp>
+#endif  // auto-linking disabled
+
+#endif // BOOST_TIMER_CONFIG_HPP
+
diff --git a/vendor/pdalboost/boost/timer/timer.hpp b/vendor/pdalboost/boost/timer/timer.hpp
new file mode 100644
index 0000000..15d73f9
--- /dev/null
+++ b/vendor/pdalboost/boost/timer/timer.hpp
@@ -0,0 +1,132 @@
+//  boost/timer/timer.hpp  -------------------------------------------------------------//
+
+//  Copyright Beman Dawes 1994-2007, 2011
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_TIMER_TIMER_HPP                  
+#define BOOST_TIMER_TIMER_HPP
+
+#include <boost/config/warning_disable.hpp>
+
+#include <boost/timer/config.hpp>
+//#include <boost/chrono/chrono.hpp>
+#include <boost/cstdint.hpp>
+#include <string>
+#include <cstring>
+#include <ostream>
+
+#include <boost/config/abi_prefix.hpp> // must be the last #include
+
+#   if defined(_MSC_VER)
+#     pragma warning(push)           // Save warning settings
+#     pragma warning(disable : 4251) // disable warning: class 'std::basic_string<_Elem,_Traits,_Ax>'
+#   endif                            // needs to have dll-interface...
+
+//--------------------------------------------------------------------------------------//
+
+namespace pdalboost
+{
+namespace timer
+{
+  class cpu_timer;
+  class auto_cpu_timer;
+
+  typedef pdalboost::int_least64_t nanosecond_type;
+
+  struct cpu_times
+  {
+    nanosecond_type wall;
+    nanosecond_type user;
+    nanosecond_type system;
+
+    void clear() { wall = user = system = 0LL; }
+  };
+      
+  const short         default_places = 6;
+
+  BOOST_TIMER_DECL
+  std::string format(const cpu_times& times, short places, const std::string& format); 
+
+  BOOST_TIMER_DECL
+  std::string format(const cpu_times& times, short places = default_places); 
+
+//  cpu_timer  -------------------------------------------------------------------------//
+
+  class BOOST_TIMER_DECL cpu_timer
+  {
+  public:
+
+    //  constructor
+    cpu_timer() BOOST_NOEXCEPT                                   { start(); }
+
+    //  observers
+    bool          is_stopped() const BOOST_NOEXCEPT              { return m_is_stopped; }
+    cpu_times     elapsed() const BOOST_NOEXCEPT;  // does not stop()
+    std::string   format(short places, const std::string& format) const
+                        { return ::pdalboost::timer::format(elapsed(), places, format); }
+    std::string   format(short places = default_places) const
+                        { return ::pdalboost::timer::format(elapsed(), places); }
+    //  actions
+    void          start() BOOST_NOEXCEPT;
+    void          stop() BOOST_NOEXCEPT;
+    void          resume() BOOST_NOEXCEPT; 
+
+  private:
+    cpu_times     m_times;
+    bool          m_is_stopped;
+  };
+
+//  auto_cpu_timer  --------------------------------------------------------------------//
+
+  class BOOST_TIMER_DECL auto_cpu_timer : public cpu_timer
+  {
+  public:
+
+    //  Explicit defaults for os are not provided to avoid including <iostream>, which has
+    //  high costs even when the standard streams are not actually used. Explicit defaults
+    //  for format are not provided to avoid order-of-dynamic-initialization issues with a
+    //  std::string.
+
+    explicit auto_cpu_timer(short places = default_places);                          // #1
+             auto_cpu_timer(short places, const std::string& format);                // #2
+    explicit auto_cpu_timer(const std::string& format);                              // #3
+             auto_cpu_timer(std::ostream& os, short places,
+                            const std::string& format)                               // #4
+                                   : m_places(places), m_os(&os), m_format(format)
+                                   { start(); }
+    explicit auto_cpu_timer(std::ostream& os, short places = default_places);        // #5
+             auto_cpu_timer(std::ostream& os, const std::string& format)             // #6
+                                   : m_places(default_places), m_os(&os), m_format(format)
+                                   { start(); }
+
+   ~auto_cpu_timer();
+
+   //  observers
+   //    not particularly useful to users, but allow testing of constructor
+   //    postconditions and ease specification of other functionality without resorting
+   //    to "for exposition only" private members.
+   std::ostream&       ostream() const       { return *m_os; }
+   short               places() const        { return m_places; }
+   const std::string&  format_string() const { return m_format; }
+
+    //  actions
+    void   report(); 
+
+  private:
+    short           m_places;
+    std::ostream*   m_os;      // stored as ptr so compiler can generate operator= 
+    std::string     m_format;  
+  };
+   
+} // namespace timer
+} // namespace pdalboost
+
+#   if defined(_MSC_VER)
+#     pragma warning(pop) // restore warning settings.
+#   endif 
+
+#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
+
+#endif  // BOOST_TIMER_TIMER_HPP
diff --git a/vendor/pdalboost/boost/token_functions.hpp b/vendor/pdalboost/boost/token_functions.hpp
new file mode 100644
index 0000000..3da49ea
--- /dev/null
+++ b/vendor/pdalboost/boost/token_functions.hpp
@@ -0,0 +1,651 @@
+// Boost token_functions.hpp  ------------------------------------------------//
+
+// Copyright John R. Bandela 2001.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/tokenizer/ for documentation.
+
+// Revision History:
+// 01 Oct 2004   Joaquin M Lopez Munoz
+//      Workaround for a problem with string::assign in msvc-stlport
+// 06 Apr 2004   John Bandela
+//      Fixed a bug involving using char_delimiter with a true input iterator
+// 28 Nov 2003   Robert Zeh and John Bandela
+//      Converted into "fast" functions that avoid using += when
+//      the supplied iterator isn't an input_iterator; based on
+//      some work done at Archelon and a version that was checked into
+//      the boost CVS for a short period of time.
+// 20 Feb 2002   John Maddock
+//      Removed using namespace std declarations and added
+//      workaround for BOOST_NO_STDC_NAMESPACE (the library
+//      can be safely mixed with regex).
+// 06 Feb 2002   Jeremy Siek
+//      Added char_separator.
+// 02 Feb 2002   Jeremy Siek
+//      Removed tabs and a little cleanup.
+
+
+#ifndef BOOST_TOKEN_FUNCTIONS_JRB120303_HPP_
+#define BOOST_TOKEN_FUNCTIONS_JRB120303_HPP_
+
+#include <vector>
+#include <stdexcept>
+#include <string>
+#include <cctype>
+#include <algorithm> // for find_if
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/throw_exception.hpp>
+#if !defined(BOOST_NO_CWCTYPE)
+#include <cwctype>
+#endif
+
+//
+// the following must not be macros if we are to prefix them
+// with std:: (they shouldn't be macros anyway...)
+//
+#ifdef ispunct
+#  undef ispunct
+#endif
+#ifdef iswpunct
+#  undef iswpunct
+#endif
+#ifdef isspace
+#  undef isspace
+#endif
+#ifdef iswspace
+#  undef iswspace
+#endif
+//
+// fix namespace problems:
+//
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{
+ using ::ispunct;
+ using ::isspace;
+#if !defined(BOOST_NO_CWCTYPE)
+ using ::iswpunct;
+ using ::iswspace;
+#endif
+}
+#endif
+
+namespace pdalboost{
+  //===========================================================================
+  // The escaped_list_separator class. Which is a model of TokenizerFunction
+  // An escaped list is a super-set of what is commonly known as a comma
+  // separated value (csv) list.It is separated into fields by a comma or
+  // other character. If the delimiting character is inside quotes, then it is
+  // counted as a regular character.To allow for embedded quotes in a field,
+  // there can be escape sequences using the \ much like C.
+  // The role of the comma, the quotation mark, and the escape
+  // character (backslash \), can be assigned to other characters.
+
+  struct escaped_list_error : public std::runtime_error{
+    escaped_list_error(const std::string& what_arg):std::runtime_error(what_arg) { }
+  };
+
+
+// The out of the box GCC 2.95 on cygwin does not have a char_traits class.
+// MSVC does not like the following typename
+  template <class Char,
+    class Traits = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type >
+  class escaped_list_separator {
+
+  private:
+    typedef std::basic_string<Char,Traits> string_type;
+    struct char_eq {
+      Char e_;
+      char_eq(Char e):e_(e) { }
+      bool operator()(Char c) {
+        return Traits::eq(e_,c);
+      }
+    };
+    string_type  escape_;
+    string_type  c_;
+    string_type  quote_;
+    bool last_;
+
+    bool is_escape(Char e) {
+      char_eq f(e);
+      return std::find_if(escape_.begin(),escape_.end(),f)!=escape_.end();
+    }
+    bool is_c(Char e) {
+      char_eq f(e);
+      return std::find_if(c_.begin(),c_.end(),f)!=c_.end();
+    }
+    bool is_quote(Char e) {
+      char_eq f(e);
+      return std::find_if(quote_.begin(),quote_.end(),f)!=quote_.end();
+    }
+    template <typename iterator, typename Token>
+    void do_escape(iterator& next,iterator end,Token& tok) {
+      if (++next == end)
+        BOOST_THROW_EXCEPTION(escaped_list_error(std::string("cannot end with escape")));
+      if (Traits::eq(*next,'n')) {
+        tok+='\n';
+        return;
+      }
+      else if (is_quote(*next)) {
+        tok+=*next;
+        return;
+      }
+      else if (is_c(*next)) {
+        tok+=*next;
+        return;
+      }
+      else if (is_escape(*next)) {
+        tok+=*next;
+        return;
+      }
+      else
+        BOOST_THROW_EXCEPTION(escaped_list_error(std::string("unknown escape sequence")));
+    }
+
+    public:
+
+    explicit escaped_list_separator(Char  e = '\\',
+                                    Char c = ',',Char  q = '\"')
+      : escape_(1,e), c_(1,c), quote_(1,q), last_(false) { }
+
+    escaped_list_separator(string_type e, string_type c, string_type q)
+      : escape_(e), c_(c), quote_(q), last_(false) { }
+
+    void reset() {last_=false;}
+
+    template <typename InputIterator, typename Token>
+    bool operator()(InputIterator& next,InputIterator end,Token& tok) {
+      bool bInQuote = false;
+      tok = Token();
+
+      if (next == end) {
+        if (last_) {
+          last_ = false;
+          return true;
+        }
+        else
+          return false;
+      }
+      last_ = false;
+      for (;next != end;++next) {
+        if (is_escape(*next)) {
+          do_escape(next,end,tok);
+        }
+        else if (is_c(*next)) {
+          if (!bInQuote) {
+            // If we are not in quote, then we are done
+            ++next;
+            // The last character was a c, that means there is
+            // 1 more blank field
+            last_ = true;
+            return true;
+          }
+          else tok+=*next;
+        }
+        else if (is_quote(*next)) {
+          bInQuote=!bInQuote;
+        }
+        else {
+          tok += *next;
+        }
+      }
+      return true;
+    }
+  };
+
+  //===========================================================================
+  // The classes here are used by offset_separator and char_separator to implement
+  // faster assigning of tokens using assign instead of +=
+
+  namespace tokenizer_detail {
+  //===========================================================================
+  // Tokenizer was broken for wide character separators, at least on Windows, since
+  // CRT functions isspace etc only expect values in [0, 0xFF]. Debug build asserts
+  // if higher values are passed in. The traits extension class should take care of this.
+  // Assuming that the conditional will always get optimized out in the function
+  // implementations, argument types are not a problem since both forms of character classifiers
+  // expect an int.
+
+#if !defined(BOOST_NO_CWCTYPE)
+  template<typename traits, int N>
+  struct traits_extension_details : public traits {
+    typedef typename traits::char_type char_type;
+    static bool isspace(char_type c)
+    {
+       return std::iswspace(c) != 0;
+    }
+    static bool ispunct(char_type c)
+    {
+       return std::iswpunct(c) != 0;
+    }
+  };
+
+  template<typename traits>
+  struct traits_extension_details<traits, 1> : public traits {
+    typedef typename traits::char_type char_type;
+    static bool isspace(char_type c)
+    {
+       return std::isspace(c) != 0;
+    }
+    static bool ispunct(char_type c)
+    {
+       return std::ispunct(c) != 0;
+    }
+  };
+#endif
+
+
+  // In case there is no cwctype header, we implement the checks manually.
+  // We make use of the fact that the tested categories should fit in ASCII.
+  template<typename traits>
+  struct traits_extension : public traits {
+    typedef typename traits::char_type char_type;
+    static bool isspace(char_type c)
+    {
+#if !defined(BOOST_NO_CWCTYPE)
+      return traits_extension_details<traits, sizeof(char_type)>::isspace(c);
+#else
+      return static_cast< unsigned >(c) <= 255 && std::isspace(c) != 0;
+#endif
+    }
+
+    static bool ispunct(char_type c)
+    {
+#if !defined(BOOST_NO_CWCTYPE)
+      return traits_extension_details<traits, sizeof(char_type)>::ispunct(c);
+#else
+      return static_cast< unsigned >(c) <= 255 && std::ispunct(c) != 0;
+#endif
+    }
+  };
+
+  // The assign_or_plus_equal struct contains functions that implement
+  // assign, +=, and clearing based on the iterator type.  The
+  // generic case does nothing for plus_equal and clearing, while
+  // passing through the call for assign.
+  //
+  // When an input iterator is being used, the situation is reversed.
+  // The assign method does nothing, plus_equal invokes operator +=,
+  // and the clearing method sets the supplied token to the default
+  // token constructor's result.
+  //
+
+  template<class IteratorTag>
+  struct assign_or_plus_equal {
+    template<class Iterator, class Token>
+    static void assign(Iterator b, Iterator e, Token &t) {
+      t.assign(b, e);
+    }
+
+    template<class Token, class Value>
+    static void plus_equal(Token &, const Value &) { }
+
+    // If we are doing an assign, there is no need for the
+    // the clear.
+    //
+    template<class Token>
+    static void clear(Token &) { }
+  };
+
+  template <>
+  struct assign_or_plus_equal<std::input_iterator_tag> {
+    template<class Iterator, class Token>
+    static void assign(Iterator , Iterator , Token &) { }
+    template<class Token, class Value>
+    static void plus_equal(Token &t, const Value &v) {
+      t += v;
+    }
+    template<class Token>
+    static void clear(Token &t) {
+      t = Token();
+    }
+  };
+
+
+  template<class Iterator>
+  struct pointer_iterator_category{
+    typedef std::random_access_iterator_tag type;
+  };
+
+
+  template<class Iterator>
+  struct class_iterator_category{
+    typedef typename Iterator::iterator_category type;
+  };
+
+
+
+  // This portably gets the iterator_tag without partial template specialization
+  template<class Iterator>
+    struct get_iterator_category{
+    typedef typename mpl::if_<is_pointer<Iterator>,
+      pointer_iterator_category<Iterator>,
+      class_iterator_category<Iterator>
+    >::type cat;
+
+    typedef typename cat::type iterator_category;
+  };
+
+
+  } // namespace tokenizer_detail
+
+
+  //===========================================================================
+  // The offset_separator class, which is a model of TokenizerFunction.
+  // Offset breaks a string into tokens based on a range of offsets
+
+  class offset_separator {
+  private:
+
+    std::vector<int> offsets_;
+    unsigned int current_offset_;
+    bool wrap_offsets_;
+    bool return_partial_last_;
+
+  public:
+    template <typename Iter>
+    offset_separator(Iter begin, Iter end, bool wrap_offsets = true,
+                     bool return_partial_last = true)
+      : offsets_(begin,end), current_offset_(0),
+        wrap_offsets_(wrap_offsets),
+        return_partial_last_(return_partial_last) { }
+
+    offset_separator()
+      : offsets_(1,1), current_offset_(),
+        wrap_offsets_(true), return_partial_last_(true) { }
+
+    void reset() {
+      current_offset_ = 0;
+    }
+
+    template <typename InputIterator, typename Token>
+    bool operator()(InputIterator& next, InputIterator end, Token& tok)
+    {
+      typedef tokenizer_detail::assign_or_plus_equal<
+        BOOST_DEDUCED_TYPENAME tokenizer_detail::get_iterator_category<
+          InputIterator
+        >::iterator_category
+      > assigner;
+
+      BOOST_ASSERT(!offsets_.empty());
+
+      assigner::clear(tok);
+      InputIterator start(next);
+
+      if (next == end)
+        return false;
+
+      if (current_offset_ == offsets_.size())
+      {
+        if (wrap_offsets_)
+          current_offset_=0;
+        else
+          return false;
+      }
+
+      int c = offsets_[current_offset_];
+      int i = 0;
+      for (; i < c; ++i) {
+        if (next == end)break;
+        assigner::plus_equal(tok,*next++);
+      }
+      assigner::assign(start,next,tok);
+
+      if (!return_partial_last_)
+        if (i < (c-1) )
+          return false;
+
+      ++current_offset_;
+      return true;
+    }
+  };
+
+
+  //===========================================================================
+  // The char_separator class breaks a sequence of characters into
+  // tokens based on the character delimiters (very much like bad old
+  // strtok). A delimiter character can either be kept or dropped. A
+  // kept delimiter shows up as an output token, whereas a dropped
+  // delimiter does not.
+
+  // This class replaces the char_delimiters_separator class. The
+  // constructor for the char_delimiters_separator class was too
+  // confusing and needed to be deprecated. However, because of the
+  // default arguments to the constructor, adding the new constructor
+  // would cause ambiguity, so instead I deprecated the whole class.
+  // The implementation of the class was also simplified considerably.
+
+  enum empty_token_policy { drop_empty_tokens, keep_empty_tokens };
+
+  // The out of the box GCC 2.95 on cygwin does not have a char_traits class.
+  template <typename Char,
+    typename Tr = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type >
+  class char_separator
+  {
+    typedef tokenizer_detail::traits_extension<Tr> Traits;
+    typedef std::basic_string<Char,Tr> string_type;
+  public:
+    explicit
+    char_separator(const Char* dropped_delims,
+                   const Char* kept_delims = 0,
+                   empty_token_policy empty_tokens = drop_empty_tokens)
+      : m_dropped_delims(dropped_delims),
+        m_use_ispunct(false),
+        m_use_isspace(false),
+        m_empty_tokens(empty_tokens),
+        m_output_done(false)
+    {
+      // Borland workaround
+      if (kept_delims)
+        m_kept_delims = kept_delims;
+    }
+
+                // use ispunct() for kept delimiters and isspace for dropped.
+    explicit
+    char_separator()
+      : m_use_ispunct(true),
+        m_use_isspace(true),
+        m_empty_tokens(drop_empty_tokens) { }
+
+    void reset() { }
+
+    template <typename InputIterator, typename Token>
+    bool operator()(InputIterator& next, InputIterator end, Token& tok)
+    {
+      typedef tokenizer_detail::assign_or_plus_equal<
+        BOOST_DEDUCED_TYPENAME tokenizer_detail::get_iterator_category<
+          InputIterator
+        >::iterator_category
+      > assigner;
+
+      assigner::clear(tok);
+
+      // skip past all dropped_delims
+      if (m_empty_tokens == drop_empty_tokens)
+        for (; next != end  && is_dropped(*next); ++next)
+          { }
+
+      InputIterator start(next);
+
+      if (m_empty_tokens == drop_empty_tokens) {
+
+        if (next == end)
+          return false;
+
+
+        // if we are on a kept_delims move past it and stop
+        if (is_kept(*next)) {
+          assigner::plus_equal(tok,*next);
+          ++next;
+        } else
+          // append all the non delim characters
+          for (; next != end && !is_dropped(*next) && !is_kept(*next); ++next)
+            assigner::plus_equal(tok,*next);
+      }
+      else { // m_empty_tokens == keep_empty_tokens
+
+        // Handle empty token at the end
+        if (next == end)
+        {
+          if (m_output_done == false)
+          {
+            m_output_done = true;
+            assigner::assign(start,next,tok);
+            return true;
+          }
+          else
+            return false;
+        }
+
+        if (is_kept(*next)) {
+          if (m_output_done == false)
+            m_output_done = true;
+          else {
+            assigner::plus_equal(tok,*next);
+            ++next;
+            m_output_done = false;
+          }
+        }
+        else if (m_output_done == false && is_dropped(*next)) {
+          m_output_done = true;
+        }
+        else {
+          if (is_dropped(*next))
+            start=++next;
+          for (; next != end && !is_dropped(*next) && !is_kept(*next); ++next)
+            assigner::plus_equal(tok,*next);
+          m_output_done = true;
+        }
+      }
+      assigner::assign(start,next,tok);
+      return true;
+    }
+
+  private:
+    string_type m_kept_delims;
+    string_type m_dropped_delims;
+    bool m_use_ispunct;
+    bool m_use_isspace;
+    empty_token_policy m_empty_tokens;
+    bool m_output_done;
+
+    bool is_kept(Char E) const
+    {
+      if (m_kept_delims.length())
+        return m_kept_delims.find(E) != string_type::npos;
+      else if (m_use_ispunct) {
+        return Traits::ispunct(E) != 0;
+      } else
+        return false;
+    }
+    bool is_dropped(Char E) const
+    {
+      if (m_dropped_delims.length())
+        return m_dropped_delims.find(E) != string_type::npos;
+      else if (m_use_isspace) {
+        return Traits::isspace(E) != 0;
+      } else
+        return false;
+    }
+  };
+
+  //===========================================================================
+  // The following class is DEPRECATED, use class char_separators instead.
+  //
+  // The char_delimiters_separator class, which is a model of
+  // TokenizerFunction.  char_delimiters_separator breaks a string
+  // into tokens based on character delimiters. There are 2 types of
+  // delimiters. returnable delimiters can be returned as
+  // tokens. These are often punctuation. nonreturnable delimiters
+  // cannot be returned as tokens. These are often whitespace
+
+  // The out of the box GCC 2.95 on cygwin does not have a char_traits class.
+  template <class Char,
+    class Tr = BOOST_DEDUCED_TYPENAME std::basic_string<Char>::traits_type >
+  class char_delimiters_separator {
+  private:
+
+    typedef tokenizer_detail::traits_extension<Tr> Traits;
+    typedef std::basic_string<Char,Tr> string_type;
+    string_type returnable_;
+    string_type nonreturnable_;
+    bool return_delims_;
+    bool no_ispunct_;
+    bool no_isspace_;
+
+    bool is_ret(Char E)const
+    {
+      if (returnable_.length())
+        return  returnable_.find(E) != string_type::npos;
+      else{
+        if (no_ispunct_) {return false;}
+        else{
+          int r = Traits::ispunct(E);
+          return r != 0;
+        }
+      }
+    }
+    bool is_nonret(Char E)const
+    {
+      if (nonreturnable_.length())
+        return  nonreturnable_.find(E) != string_type::npos;
+      else{
+        if (no_isspace_) {return false;}
+        else{
+          int r = Traits::isspace(E);
+          return r != 0;
+        }
+      }
+    }
+
+  public:
+    explicit char_delimiters_separator(bool return_delims = false,
+                                       const Char* returnable = 0,
+                                       const Char* nonreturnable = 0)
+      : returnable_(returnable ? returnable : string_type().c_str()),
+        nonreturnable_(nonreturnable ? nonreturnable:string_type().c_str()),
+        return_delims_(return_delims), no_ispunct_(returnable!=0),
+        no_isspace_(nonreturnable!=0) { }
+
+    void reset() { }
+
+  public:
+
+     template <typename InputIterator, typename Token>
+     bool operator()(InputIterator& next, InputIterator end,Token& tok) {
+     tok = Token();
+
+     // skip past all nonreturnable delims
+     // skip past the returnable only if we are not returning delims
+     for (;next!=end && ( is_nonret(*next) || (is_ret(*next)
+       && !return_delims_ ) );++next) { }
+
+     if (next == end) {
+       return false;
+     }
+
+     // if we are to return delims and we are one a returnable one
+     // move past it and stop
+     if (is_ret(*next) && return_delims_) {
+       tok+=*next;
+       ++next;
+     }
+     else
+       // append all the non delim characters
+       for (;next!=end && !is_nonret(*next) && !is_ret(*next);++next)
+         tok+=*next;
+
+
+     return true;
+   }
+  };
+
+
+} //namespace pdalboost
+
+#endif
diff --git a/vendor/pdalboost/boost/token_iterator.hpp b/vendor/pdalboost/boost/token_iterator.hpp
new file mode 100644
index 0000000..3eaab12
--- /dev/null
+++ b/vendor/pdalboost/boost/token_iterator.hpp
@@ -0,0 +1,128 @@
+// Boost token_iterator.hpp  -------------------------------------------------//
+
+// Copyright John R. Bandela 2001
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/tokenizer for documentation.
+
+// Revision History:
+// 16 Jul 2003   John Bandela
+//      Allowed conversions from convertible base iterators
+// 03 Jul 2003   John Bandela
+//      Converted to new iterator adapter
+
+
+
+#ifndef BOOST_TOKENIZER_POLICY_JRB070303_HPP_
+#define BOOST_TOKENIZER_POLICY_JRB070303_HPP_
+
+#include <boost/assert.hpp>
+#include <boost/iterator/iterator_adaptor.hpp>
+#include <boost/iterator/minimum_category.hpp>
+#include <boost/token_functions.hpp>
+#include <utility>
+
+namespace pdalboost
+{
+  template <class TokenizerFunc, class Iterator, class Type>
+  class token_iterator
+      : public iterator_facade<
+            token_iterator<TokenizerFunc, Iterator, Type>
+          , Type
+          , typename iterators::minimum_category<
+                forward_traversal_tag
+              , typename iterator_traversal<Iterator>::type
+            >::type
+          , const Type&
+        >
+  {
+
+      friend class iterator_core_access;
+
+      TokenizerFunc f_;
+      Iterator begin_;
+      Iterator end_;
+      bool valid_;
+      Type tok_;
+
+      void increment(){
+          BOOST_ASSERT(valid_);
+          valid_ = f_(begin_,end_,tok_);
+      }
+
+      const Type&  dereference() const {
+          BOOST_ASSERT(valid_);
+          return tok_;
+      }
+      template<class Other>
+      bool equal(const Other& a) const{
+          return (a.valid_ && valid_)
+              ?( (a.begin_==begin_) && (a.end_ == end_) )
+              :(a.valid_==valid_);
+
+      }
+
+      void initialize(){
+          if(valid_) return;
+          f_.reset();
+          valid_ = (begin_ != end_)?
+              f_(begin_,end_,tok_):false;
+      }
+  public:
+      token_iterator():begin_(),end_(),valid_(false),tok_() { }
+
+      token_iterator(TokenizerFunc f, Iterator begin, Iterator e = Iterator())
+          : f_(f),begin_(begin),end_(e),valid_(false),tok_(){ initialize(); }
+
+      token_iterator(Iterator begin, Iterator e = Iterator())
+            : f_(),begin_(begin),end_(e),valid_(false),tok_() {initialize();}
+
+      template<class OtherIter>
+      token_iterator(
+            token_iterator<TokenizerFunc, OtherIter,Type> const& t
+            , typename enable_if_convertible<OtherIter, Iterator>::type* = 0)
+            : f_(t.tokenizer_function()),begin_(t.base())
+            ,end_(t.end()),valid_(!t.at_end()),tok_(t.current_token()) {}
+
+      Iterator base()const{return begin_;}
+
+      Iterator end()const{return end_;}
+
+      TokenizerFunc tokenizer_function()const{return f_;}
+
+      Type current_token()const{return tok_;}
+
+      bool at_end()const{return !valid_;}
+
+
+
+
+  };
+    template <
+        class TokenizerFunc = char_delimiters_separator<char>,
+        class Iterator = std::string::const_iterator,
+        class Type = std::string
+    >
+    class token_iterator_generator {
+
+    private:
+    public:
+        typedef token_iterator<TokenizerFunc,Iterator,Type> type;
+    };
+
+
+    // Type has to be first because it needs to be explicitly specified
+    // because there is no way the function can deduce it.
+    template<class Type, class Iterator, class TokenizerFunc>
+        typename token_iterator_generator<TokenizerFunc,Iterator,Type>::type
+    make_token_iterator(Iterator begin, Iterator end,const TokenizerFunc& fun){
+        typedef typename
+            token_iterator_generator<TokenizerFunc,Iterator,Type>::type ret_type;
+        return ret_type(fun,begin,end);
+    }
+
+} // namespace pdalboost
+
+#endif
diff --git a/vendor/pdalboost/boost/tokenizer.hpp b/vendor/pdalboost/boost/tokenizer.hpp
new file mode 100644
index 0000000..ecb0893
--- /dev/null
+++ b/vendor/pdalboost/boost/tokenizer.hpp
@@ -0,0 +1,98 @@
+// Boost tokenizer.hpp  -----------------------------------------------------//
+
+// (c) Copyright Jeremy Siek and John R. Bandela 2001. 
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/tokenizer for documenation
+
+// Revision History:
+// 03 Jul 2003   John Bandela
+//      Converted to new iterator adapter
+// 02 Feb 2002   Jeremy Siek
+//      Removed tabs and a little cleanup.
+
+#ifndef BOOST_TOKENIZER_JRB070303_HPP_
+#define BOOST_TOKENIZER_JRB070303_HPP_
+
+#include <boost/token_iterator.hpp>
+
+namespace pdalboost {
+
+  
+  //===========================================================================
+  // A container-view of a tokenized "sequence"
+  template <
+    typename TokenizerFunc = char_delimiters_separator<char>, 
+    typename Iterator = std::string::const_iterator,
+    typename Type = std::string
+  >
+  class tokenizer {
+  private:
+    typedef token_iterator_generator<TokenizerFunc,Iterator,Type> TGen;
+        
+    // It seems that MSVC does not like the unqualified use of iterator,
+    // Thus we use iter internally when it is used unqualified and
+    // the users of this class will always qualify iterator.     
+    typedef typename TGen::type iter;
+    
+  public:
+    
+    typedef iter iterator;
+    typedef iter const_iterator;
+    typedef Type value_type;
+    typedef value_type& reference;
+    typedef const value_type& const_reference;
+    typedef value_type* pointer;
+    typedef const pointer const_pointer;
+    typedef void size_type;
+    typedef void difference_type;
+
+    tokenizer(Iterator first, Iterator last,
+              const TokenizerFunc& f = TokenizerFunc()) 
+      : first_(first), last_(last), f_(f) { }
+        
+    template <typename Container>
+    tokenizer(const Container& c)
+      : first_(c.begin()), last_(c.end()), f_() { }
+    
+    template <typename Container>
+    tokenizer(const Container& c,const TokenizerFunc& f)
+      : first_(c.begin()), last_(c.end()), f_(f) { }
+    
+    void assign(Iterator first, Iterator last){
+      first_ = first;
+      last_ = last;
+    }
+    
+    void assign(Iterator first, Iterator last, const TokenizerFunc& f){
+      assign(first,last);
+      f_ = f;
+    }
+    
+    template <typename Container>
+    void assign(const Container& c){
+      assign(c.begin(),c.end());
+    }
+    
+    
+    template <typename Container>
+    void assign(const Container& c, const TokenizerFunc& f){
+      assign(c.begin(),c.end(),f);
+    }
+    
+    iter begin() const { return iter(f_,first_,last_); }
+    iter end() const { return iter(f_,last_,last_); }
+        
+  private:
+    Iterator first_;
+    Iterator last_;
+    TokenizerFunc f_;
+  };
+
+
+} // namespace pdalboost
+
+#endif
diff --git a/vendor/pdalboost/boost/tuple/detail/tuple_basic.hpp b/vendor/pdalboost/boost/tuple/detail/tuple_basic.hpp
new file mode 100644
index 0000000..3786338
--- /dev/null
+++ b/vendor/pdalboost/boost/tuple/detail/tuple_basic.hpp
@@ -0,0 +1,989 @@
+//  tuple_basic.hpp -----------------------------------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi at cs.utu.fi)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+// Outside help:
+// This and that, Gary Powell.
+// Fixed return types for get_head/get_tail
+// ( and other bugs ) per suggestion of Jens Maurer
+// simplified element type accessors + bug fix  (Jeremy Siek)
+// Several changes/additions according to suggestions by Douglas Gregor,
+// William Kempf, Vesa Karvonen, John Max Skaller, Ed Brey, Beman Dawes,
+// David Abrahams.
+
+// Revision history:
+// 2002 05 01 Hugo Duncan: Fix for Borland after Jaakko's previous changes
+// 2002 04 18 Jaakko: tuple element types can be void or plain function
+//                    types, as long as no object is created.
+//                    Tuple objects can no hold even noncopyable types
+//                    such as arrays.
+// 2001 10 22 John Maddock
+//      Fixes for Borland C++
+// 2001 08 30 David Abrahams
+//      Added default constructor for cons<>.
+// -----------------------------------------------------------------
+
+#ifndef BOOST_TUPLE_BASIC_HPP
+#define BOOST_TUPLE_BASIC_HPP
+
+
+#include <utility> // needed for the assignment from pair to tuple
+
+#include "boost/type_traits/cv_traits.hpp"
+#include "boost/type_traits/function_traits.hpp"
+#include "boost/utility/swap.hpp"
+
+#include "boost/detail/workaround.hpp" // needed for BOOST_WORKAROUND
+
+#if BOOST_GCC >= 40700
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
+#endif
+
+namespace pdalboost {
+namespace tuples {
+
+// -- null_type --------------------------------------------------------
+struct null_type {};
+
+// a helper function to provide a const null_type type temporary
+namespace detail {
+  inline const null_type cnull() { return null_type(); }
+
+
+// -- if construct ------------------------------------------------
+// Proposed by Krzysztof Czarnecki and Ulrich Eisenecker
+
+template <bool If, class Then, class Else> struct IF { typedef Then RET; };
+
+template <class Then, class Else> struct IF<false, Then, Else> {
+  typedef Else RET;
+};
+
+} // end detail
+
+// - cons forward declaration -----------------------------------------------
+template <class HT, class TT> struct cons;
+
+
+// - tuple forward declaration -----------------------------------------------
+template <
+  class T0 = null_type, class T1 = null_type, class T2 = null_type,
+  class T3 = null_type, class T4 = null_type, class T5 = null_type,
+  class T6 = null_type, class T7 = null_type, class T8 = null_type,
+  class T9 = null_type>
+class tuple;
+
+// tuple_length forward declaration
+template<class T> struct length;
+
+
+
+namespace detail {
+
+// -- generate error template, referencing to non-existing members of this
+// template is used to produce compilation errors intentionally
+template<class T>
+class generate_error;
+
+template<int N>
+struct drop_front {
+    template<class Tuple>
+    struct apply {
+        typedef BOOST_DEDUCED_TYPENAME drop_front<N-1>::BOOST_NESTED_TEMPLATE
+            apply<Tuple> next;
+        typedef BOOST_DEDUCED_TYPENAME next::type::tail_type type;
+        static const type& call(const Tuple& tup) {
+            return next::call(tup).tail;
+        }
+    };
+};
+
+template<>
+struct drop_front<0> {
+    template<class Tuple>
+    struct apply {
+        typedef Tuple type;
+        static const type& call(const Tuple& tup) {
+            return tup;
+        }
+    };
+};
+
+} // end of namespace detail
+
+
+// -cons type accessors ----------------------------------------
+// typename tuples::element<N,T>::type gets the type of the
+// Nth element ot T, first element is at index 0
+// -------------------------------------------------------
+
+#ifndef BOOST_NO_CV_SPECIALIZATIONS
+
+template<int N, class T>
+struct element
+{
+  typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
+      apply<T>::type::head_type type;
+};
+
+template<int N, class T>
+struct element<N, const T>
+{
+private:
+  typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
+      apply<T>::type::head_type unqualified_type;
+public:
+#if BOOST_WORKAROUND(__BORLANDC__,<0x600)
+  typedef const unqualified_type type;
+#else
+  typedef BOOST_DEDUCED_TYPENAME pdalboost::add_const<unqualified_type>::type type;
+#endif
+};
+#else // def BOOST_NO_CV_SPECIALIZATIONS
+
+namespace detail {
+
+template<int N, class T, bool IsConst>
+struct element_impl
+{
+  typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
+      apply<T>::type::head_type type;
+};
+
+template<int N, class T>
+struct element_impl<N, T, true /* IsConst */>
+{
+  typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
+      apply<T>::type::head_type unqualified_type;
+  typedef const unqualified_type type;
+};
+
+} // end of namespace detail
+
+
+template<int N, class T>
+struct element:
+  public detail::element_impl<N, T, ::pdalboost::is_const<T>::value>
+{
+};
+
+#endif
+
+
+// -get function templates -----------------------------------------------
+// Usage: get<N>(aTuple)
+
+// -- some traits classes for get functions
+
+// access traits lifted from detail namespace to be part of the interface,
+// (Joel de Guzman's suggestion). Rationale: get functions are part of the
+// interface, so should the way to express their return types be.
+
+template <class T> struct access_traits {
+  typedef const T& const_type;
+  typedef T& non_const_type;
+
+  typedef const typename pdalboost::remove_cv<T>::type& parameter_type;
+
+// used as the tuple constructors parameter types
+// Rationale: non-reference tuple element types can be cv-qualified.
+// It should be possible to initialize such types with temporaries,
+// and when binding temporaries to references, the reference must
+// be non-volatile and const. 8.5.3. (5)
+};
+
+template <class T> struct access_traits<T&> {
+
+  typedef T& const_type;
+  typedef T& non_const_type;
+
+  typedef T& parameter_type;
+};
+
+// get function for non-const cons-lists, returns a reference to the element
+
+template<int N, class HT, class TT>
+inline typename access_traits<
+                  typename element<N, cons<HT, TT> >::type
+                >::non_const_type
+get(cons<HT, TT>& c) {
+  typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
+      apply<cons<HT, TT> > impl;
+  typedef BOOST_DEDUCED_TYPENAME impl::type cons_element;
+  return const_cast<cons_element&>(impl::call(c)).head;
+}
+
+// get function for const cons-lists, returns a const reference to
+// the element. If the element is a reference, returns the reference
+// as such (that is, can return a non-const reference)
+template<int N, class HT, class TT>
+inline typename access_traits<
+                  typename element<N, cons<HT, TT> >::type
+                >::const_type
+get(const cons<HT, TT>& c) {
+  typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
+      apply<cons<HT, TT> > impl;
+  return impl::call(c).head;
+}
+
+// -- the cons template  --------------------------------------------------
+namespace detail {
+
+//  These helper templates wrap void types and plain function types.
+//  The reationale is to allow one to write tuple types with those types
+//  as elements, even though it is not possible to instantiate such object.
+//  E.g: typedef tuple<void> some_type; // ok
+//  but: some_type x; // fails
+
+template <class T> class non_storeable_type {
+  non_storeable_type();
+};
+
+template <class T> struct wrap_non_storeable_type {
+  typedef typename IF<
+    ::pdalboost::is_function<T>::value, non_storeable_type<T>, T
+  >::RET type;
+};
+template <> struct wrap_non_storeable_type<void> {
+  typedef non_storeable_type<void> type;
+};
+
+} // detail
+
+template <class HT, class TT>
+struct cons {
+
+  typedef HT head_type;
+  typedef TT tail_type;
+
+  typedef typename
+    detail::wrap_non_storeable_type<head_type>::type stored_head_type;
+
+  stored_head_type head;
+  tail_type tail;
+
+  typename access_traits<stored_head_type>::non_const_type
+  get_head() { return head; }
+
+  typename access_traits<tail_type>::non_const_type
+  get_tail() { return tail; }
+
+  typename access_traits<stored_head_type>::const_type
+  get_head() const { return head; }
+
+  typename access_traits<tail_type>::const_type
+  get_tail() const { return tail; }
+
+  cons() : head(), tail() {}
+  //  cons() : head(detail::default_arg<HT>::f()), tail() {}
+
+  // the argument for head is not strictly needed, but it prevents
+  // array type elements. This is good, since array type elements
+  // cannot be supported properly in any case (no assignment,
+  // copy works only if the tails are exactly the same type, ...)
+
+  cons(typename access_traits<stored_head_type>::parameter_type h,
+       const tail_type& t)
+    : head (h), tail(t) {}
+
+  template <class T1, class T2, class T3, class T4, class T5,
+            class T6, class T7, class T8, class T9, class T10>
+  cons( T1& t1, T2& t2, T3& t3, T4& t4, T5& t5,
+        T6& t6, T7& t7, T8& t8, T9& t9, T10& t10 )
+    : head (t1),
+      tail (t2, t3, t4, t5, t6, t7, t8, t9, t10, detail::cnull())
+      {}
+
+  template <class T2, class T3, class T4, class T5,
+            class T6, class T7, class T8, class T9, class T10>
+  cons( const null_type& /*t1*/, T2& t2, T3& t3, T4& t4, T5& t5,
+        T6& t6, T7& t7, T8& t8, T9& t9, T10& t10 )
+    : head (),
+      tail (t2, t3, t4, t5, t6, t7, t8, t9, t10, detail::cnull())
+      {}
+
+
+  template <class HT2, class TT2>
+  cons( const cons<HT2, TT2>& u ) : head(u.head), tail(u.tail) {}
+
+  template <class HT2, class TT2>
+  cons& operator=( const cons<HT2, TT2>& u ) {
+    head=u.head; tail=u.tail; return *this;
+  }
+
+  // must define assignment operator explicitly, implicit version is
+  // illformed if HT is a reference (12.8. (12))
+  cons& operator=(const cons& u) {
+    head = u.head; tail = u.tail;  return *this;
+  }
+
+  template <class T1, class T2>
+  cons& operator=( const std::pair<T1, T2>& u ) {
+    BOOST_STATIC_ASSERT(length<cons>::value == 2); // check length = 2
+    head = u.first; tail.head = u.second; return *this;
+  }
+
+  // get member functions (non-const and const)
+  template <int N>
+  typename access_traits<
+             typename element<N, cons<HT, TT> >::type
+           >::non_const_type
+  get() {
+    return pdalboost::tuples::get<N>(*this); // delegate to non-member get
+  }
+
+  template <int N>
+  typename access_traits<
+             typename element<N, cons<HT, TT> >::type
+           >::const_type
+  get() const {
+    return pdalboost::tuples::get<N>(*this); // delegate to non-member get
+  }
+};
+
+template <class HT>
+struct cons<HT, null_type> {
+
+  typedef HT head_type;
+  typedef null_type tail_type;
+  typedef cons<HT, null_type> self_type;
+
+  typedef typename
+    detail::wrap_non_storeable_type<head_type>::type stored_head_type;
+  stored_head_type head;
+
+  typename access_traits<stored_head_type>::non_const_type
+  get_head() { return head; }
+
+  null_type get_tail() { return null_type(); }
+
+  typename access_traits<stored_head_type>::const_type
+  get_head() const { return head; }
+
+  const null_type get_tail() const { return null_type(); }
+
+  //  cons() : head(detail::default_arg<HT>::f()) {}
+  cons() : head() {}
+
+  cons(typename access_traits<stored_head_type>::parameter_type h,
+       const null_type& = null_type())
+    : head (h) {}
+
+  template<class T1>
+  cons(T1& t1, const null_type&, const null_type&, const null_type&,
+       const null_type&, const null_type&, const null_type&,
+       const null_type&, const null_type&, const null_type&)
+  : head (t1) {}
+
+  cons(const null_type&,
+       const null_type&, const null_type&, const null_type&,
+       const null_type&, const null_type&, const null_type&,
+       const null_type&, const null_type&, const null_type&)
+  : head () {}
+
+  template <class HT2>
+  cons( const cons<HT2, null_type>& u ) : head(u.head) {}
+
+  template <class HT2>
+  cons& operator=(const cons<HT2, null_type>& u )
+  { head = u.head; return *this; }
+
+  // must define assignment operator explicitely, implicit version
+  // is illformed if HT is a reference
+  cons& operator=(const cons& u) { head = u.head; return *this; }
+
+  template <int N>
+  typename access_traits<
+             typename element<N, self_type>::type
+            >::non_const_type
+  get() {
+    return pdalboost::tuples::get<N>(*this);
+  }
+
+  template <int N>
+  typename access_traits<
+             typename element<N, self_type>::type
+           >::const_type
+  get() const {
+    return pdalboost::tuples::get<N>(*this);
+  }
+
+};
+
+// templates for finding out the length of the tuple -------------------
+
+template<class T>
+struct length  {
+  BOOST_STATIC_CONSTANT(int, value = 1 + length<typename T::tail_type>::value);
+};
+
+template<>
+struct length<tuple<> > {
+  BOOST_STATIC_CONSTANT(int, value = 0);
+};
+
+template<>
+struct length<tuple<> const> {
+  BOOST_STATIC_CONSTANT(int, value = 0);
+};
+
+template<>
+struct length<null_type> {
+  BOOST_STATIC_CONSTANT(int, value = 0);
+};
+
+template<>
+struct length<null_type const> {
+  BOOST_STATIC_CONSTANT(int, value = 0);
+};
+
+namespace detail {
+
+// Tuple to cons mapper --------------------------------------------------
+template <class T0, class T1, class T2, class T3, class T4,
+          class T5, class T6, class T7, class T8, class T9>
+struct map_tuple_to_cons
+{
+  typedef cons<T0,
+               typename map_tuple_to_cons<T1, T2, T3, T4, T5,
+                                          T6, T7, T8, T9, null_type>::type
+              > type;
+};
+
+// The empty tuple is a null_type
+template <>
+struct map_tuple_to_cons<null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type>
+{
+  typedef null_type type;
+};
+
+} // end detail
+
+// -------------------------------------------------------------------
+// -- tuple ------------------------------------------------------
+template <class T0, class T1, class T2, class T3, class T4,
+          class T5, class T6, class T7, class T8, class T9>
+
+class tuple :
+  public detail::map_tuple_to_cons<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::type
+{
+public:
+  typedef typename
+    detail::map_tuple_to_cons<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::type inherited;
+  typedef typename inherited::head_type head_type;
+  typedef typename inherited::tail_type tail_type;
+
+
+// access_traits<T>::parameter_type takes non-reference types as const T&
+  tuple() {}
+
+  tuple(typename access_traits<T0>::parameter_type t0)
+    : inherited(t0, detail::cnull(), detail::cnull(), detail::cnull(),
+                detail::cnull(), detail::cnull(), detail::cnull(),
+                detail::cnull(), detail::cnull(), detail::cnull()) {}
+
+  tuple(typename access_traits<T0>::parameter_type t0,
+        typename access_traits<T1>::parameter_type t1)
+    : inherited(t0, t1, detail::cnull(), detail::cnull(),
+                detail::cnull(), detail::cnull(), detail::cnull(),
+                detail::cnull(), detail::cnull(), detail::cnull()) {}
+
+  tuple(typename access_traits<T0>::parameter_type t0,
+        typename access_traits<T1>::parameter_type t1,
+        typename access_traits<T2>::parameter_type t2)
+    : inherited(t0, t1, t2, detail::cnull(), detail::cnull(),
+                detail::cnull(), detail::cnull(), detail::cnull(),
+                detail::cnull(), detail::cnull()) {}
+
+  tuple(typename access_traits<T0>::parameter_type t0,
+        typename access_traits<T1>::parameter_type t1,
+        typename access_traits<T2>::parameter_type t2,
+        typename access_traits<T3>::parameter_type t3)
+    : inherited(t0, t1, t2, t3, detail::cnull(), detail::cnull(),
+                detail::cnull(), detail::cnull(), detail::cnull(),
+                detail::cnull()) {}
+
+  tuple(typename access_traits<T0>::parameter_type t0,
+        typename access_traits<T1>::parameter_type t1,
+        typename access_traits<T2>::parameter_type t2,
+        typename access_traits<T3>::parameter_type t3,
+        typename access_traits<T4>::parameter_type t4)
+    : inherited(t0, t1, t2, t3, t4, detail::cnull(), detail::cnull(),
+                detail::cnull(), detail::cnull(), detail::cnull()) {}
+
+  tuple(typename access_traits<T0>::parameter_type t0,
+        typename access_traits<T1>::parameter_type t1,
+        typename access_traits<T2>::parameter_type t2,
+        typename access_traits<T3>::parameter_type t3,
+        typename access_traits<T4>::parameter_type t4,
+        typename access_traits<T5>::parameter_type t5)
+    : inherited(t0, t1, t2, t3, t4, t5, detail::cnull(), detail::cnull(),
+                detail::cnull(), detail::cnull()) {}
+
+  tuple(typename access_traits<T0>::parameter_type t0,
+        typename access_traits<T1>::parameter_type t1,
+        typename access_traits<T2>::parameter_type t2,
+        typename access_traits<T3>::parameter_type t3,
+        typename access_traits<T4>::parameter_type t4,
+        typename access_traits<T5>::parameter_type t5,
+        typename access_traits<T6>::parameter_type t6)
+    : inherited(t0, t1, t2, t3, t4, t5, t6, detail::cnull(),
+                detail::cnull(), detail::cnull()) {}
+
+  tuple(typename access_traits<T0>::parameter_type t0,
+        typename access_traits<T1>::parameter_type t1,
+        typename access_traits<T2>::parameter_type t2,
+        typename access_traits<T3>::parameter_type t3,
+        typename access_traits<T4>::parameter_type t4,
+        typename access_traits<T5>::parameter_type t5,
+        typename access_traits<T6>::parameter_type t6,
+        typename access_traits<T7>::parameter_type t7)
+    : inherited(t0, t1, t2, t3, t4, t5, t6, t7, detail::cnull(),
+                detail::cnull()) {}
+
+  tuple(typename access_traits<T0>::parameter_type t0,
+        typename access_traits<T1>::parameter_type t1,
+        typename access_traits<T2>::parameter_type t2,
+        typename access_traits<T3>::parameter_type t3,
+        typename access_traits<T4>::parameter_type t4,
+        typename access_traits<T5>::parameter_type t5,
+        typename access_traits<T6>::parameter_type t6,
+        typename access_traits<T7>::parameter_type t7,
+        typename access_traits<T8>::parameter_type t8)
+    : inherited(t0, t1, t2, t3, t4, t5, t6, t7, t8, detail::cnull()) {}
+
+  tuple(typename access_traits<T0>::parameter_type t0,
+        typename access_traits<T1>::parameter_type t1,
+        typename access_traits<T2>::parameter_type t2,
+        typename access_traits<T3>::parameter_type t3,
+        typename access_traits<T4>::parameter_type t4,
+        typename access_traits<T5>::parameter_type t5,
+        typename access_traits<T6>::parameter_type t6,
+        typename access_traits<T7>::parameter_type t7,
+        typename access_traits<T8>::parameter_type t8,
+        typename access_traits<T9>::parameter_type t9)
+    : inherited(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9) {}
+
+
+  template<class U1, class U2>
+  tuple(const cons<U1, U2>& p) : inherited(p) {}
+
+  template <class U1, class U2>
+  tuple& operator=(const cons<U1, U2>& k) {
+    inherited::operator=(k);
+    return *this;
+  }
+
+  template <class U1, class U2>
+  tuple& operator=(const std::pair<U1, U2>& k) {
+    BOOST_STATIC_ASSERT(length<tuple>::value == 2);// check_length = 2
+    this->head = k.first;
+    this->tail.head = k.second;
+    return *this;
+  }
+
+};
+
+// The empty tuple
+template <>
+class tuple<null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type, null_type>  :
+  public null_type
+{
+public:
+  typedef null_type inherited;
+};
+
+
+// Swallows any assignment   (by Doug Gregor)
+namespace detail {
+
+struct swallow_assign;
+typedef void (detail::swallow_assign::*ignore_t)();
+struct swallow_assign {
+  swallow_assign(ignore_t(*)(ignore_t)) {}
+  template<typename T>
+  swallow_assign const& operator=(const T&) const {
+    return *this;
+  }
+};
+
+
+} // namespace detail
+
+// "ignore" allows tuple positions to be ignored when using "tie".
+inline detail::ignore_t ignore(detail::ignore_t) { return 0; }
+
+// ---------------------------------------------------------------------------
+// The call_traits for make_tuple
+// Honours the reference_wrapper class.
+
+// Must be instantiated with plain or const plain types (not with references)
+
+// from template<class T> foo(const T& t) : make_tuple_traits<const T>::type
+// from template<class T> foo(T& t) : make_tuple_traits<T>::type
+
+// Conversions:
+// T -> T,
+// references -> compile_time_error
+// reference_wrapper<T> -> T&
+// const reference_wrapper<T> -> T&
+// array -> const ref array
+
+
+template<class T>
+struct make_tuple_traits {
+  typedef T type;
+
+  // commented away, see below  (JJ)
+  //  typedef typename IF<
+  //  pdalboost::is_function<T>::value,
+  //  T&,
+  //  T>::RET type;
+
+};
+
+// The is_function test was there originally for plain function types,
+// which can't be stored as such (we must either store them as references or
+// pointers). Such a type could be formed if make_tuple was called with a
+// reference to a function.
+// But this would mean that a const qualified function type was formed in
+// the make_tuple function and hence make_tuple can't take a function
+// reference as a parameter, and thus T can't be a function type.
+// So is_function test was removed.
+// (14.8.3. says that type deduction fails if a cv-qualified function type
+// is created. (It only applies for the case of explicitly specifying template
+// args, though?)) (JJ)
+
+template<class T>
+struct make_tuple_traits<T&> {
+  typedef typename
+     detail::generate_error<T&>::
+       do_not_use_with_reference_type error;
+};
+
+// Arrays can't be stored as plain types; convert them to references.
+// All arrays are converted to const. This is because make_tuple takes its
+// parameters as const T& and thus the knowledge of the potential
+// non-constness of actual argument is lost.
+template<class T, int n>  struct make_tuple_traits <T[n]> {
+  typedef const T (&type)[n];
+};
+
+template<class T, int n>
+struct make_tuple_traits<const T[n]> {
+  typedef const T (&type)[n];
+};
+
+template<class T, int n>  struct make_tuple_traits<volatile T[n]> {
+  typedef const volatile T (&type)[n];
+};
+
+template<class T, int n>
+struct make_tuple_traits<const volatile T[n]> {
+  typedef const volatile T (&type)[n];
+};
+
+template<class T>
+struct make_tuple_traits<reference_wrapper<T> >{
+  typedef T& type;
+};
+
+template<class T>
+struct make_tuple_traits<const reference_wrapper<T> >{
+  typedef T& type;
+};
+
+template<>
+struct make_tuple_traits<detail::ignore_t(detail::ignore_t)> {
+  typedef detail::swallow_assign type;
+};
+
+
+
+namespace detail {
+
+// a helper traits to make the make_tuple functions shorter (Vesa Karvonen's
+// suggestion)
+template <
+  class T0 = null_type, class T1 = null_type, class T2 = null_type,
+  class T3 = null_type, class T4 = null_type, class T5 = null_type,
+  class T6 = null_type, class T7 = null_type, class T8 = null_type,
+  class T9 = null_type
+>
+struct make_tuple_mapper {
+  typedef
+    tuple<typename make_tuple_traits<T0>::type,
+          typename make_tuple_traits<T1>::type,
+          typename make_tuple_traits<T2>::type,
+          typename make_tuple_traits<T3>::type,
+          typename make_tuple_traits<T4>::type,
+          typename make_tuple_traits<T5>::type,
+          typename make_tuple_traits<T6>::type,
+          typename make_tuple_traits<T7>::type,
+          typename make_tuple_traits<T8>::type,
+          typename make_tuple_traits<T9>::type> type;
+};
+
+} // end detail
+
+// -make_tuple function templates -----------------------------------
+inline tuple<> make_tuple() {
+  return tuple<>();
+}
+
+template<class T0>
+inline typename detail::make_tuple_mapper<T0>::type
+make_tuple(const T0& t0) {
+  typedef typename detail::make_tuple_mapper<T0>::type t;
+  return t(t0);
+}
+
+template<class T0, class T1>
+inline typename detail::make_tuple_mapper<T0, T1>::type
+make_tuple(const T0& t0, const T1& t1) {
+  typedef typename detail::make_tuple_mapper<T0, T1>::type t;
+  return t(t0, t1);
+}
+
+template<class T0, class T1, class T2>
+inline typename detail::make_tuple_mapper<T0, T1, T2>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2) {
+  typedef typename detail::make_tuple_mapper<T0, T1, T2>::type t;
+  return t(t0, t1, t2);
+}
+
+template<class T0, class T1, class T2, class T3>
+inline typename detail::make_tuple_mapper<T0, T1, T2, T3>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2, const T3& t3) {
+  typedef typename detail::make_tuple_mapper<T0, T1, T2, T3>::type t;
+  return t(t0, t1, t2, t3);
+}
+
+template<class T0, class T1, class T2, class T3, class T4>
+inline typename detail::make_tuple_mapper<T0, T1, T2, T3, T4>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2, const T3& t3,
+                  const T4& t4) {
+  typedef typename detail::make_tuple_mapper<T0, T1, T2, T3, T4>::type t;
+  return t(t0, t1, t2, t3, t4);
+}
+
+template<class T0, class T1, class T2, class T3, class T4, class T5>
+inline typename detail::make_tuple_mapper<T0, T1, T2, T3, T4, T5>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2, const T3& t3,
+                  const T4& t4, const T5& t5) {
+  typedef typename detail::make_tuple_mapper<T0, T1, T2, T3, T4, T5>::type t;
+  return t(t0, t1, t2, t3, t4, t5);
+}
+
+template<class T0, class T1, class T2, class T3, class T4, class T5, class T6>
+inline typename detail::make_tuple_mapper<T0, T1, T2, T3, T4, T5, T6>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2, const T3& t3,
+                  const T4& t4, const T5& t5, const T6& t6) {
+  typedef typename detail::make_tuple_mapper
+           <T0, T1, T2, T3, T4, T5, T6>::type t;
+  return t(t0, t1, t2, t3, t4, t5, t6);
+}
+
+template<class T0, class T1, class T2, class T3, class T4, class T5, class T6,
+         class T7>
+inline typename detail::make_tuple_mapper<T0, T1, T2, T3, T4, T5, T6, T7>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2, const T3& t3,
+                  const T4& t4, const T5& t5, const T6& t6, const T7& t7) {
+  typedef typename detail::make_tuple_mapper
+           <T0, T1, T2, T3, T4, T5, T6, T7>::type t;
+  return t(t0, t1, t2, t3, t4, t5, t6, t7);
+}
+
+template<class T0, class T1, class T2, class T3, class T4, class T5, class T6,
+         class T7, class T8>
+inline typename detail::make_tuple_mapper
+  <T0, T1, T2, T3, T4, T5, T6, T7, T8>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2, const T3& t3,
+                  const T4& t4, const T5& t5, const T6& t6, const T7& t7,
+                  const T8& t8) {
+  typedef typename detail::make_tuple_mapper
+           <T0, T1, T2, T3, T4, T5, T6, T7, T8>::type t;
+  return t(t0, t1, t2, t3, t4, t5, t6, t7, t8);
+}
+
+template<class T0, class T1, class T2, class T3, class T4, class T5, class T6,
+         class T7, class T8, class T9>
+inline typename detail::make_tuple_mapper
+  <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::type
+make_tuple(const T0& t0, const T1& t1, const T2& t2, const T3& t3,
+                  const T4& t4, const T5& t5, const T6& t6, const T7& t7,
+                  const T8& t8, const T9& t9) {
+  typedef typename detail::make_tuple_mapper
+           <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::type t;
+  return t(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
+}
+
+namespace detail {
+
+template<class T>
+struct tie_traits {
+  typedef T& type;
+};
+
+template<>
+struct tie_traits<ignore_t(ignore_t)> {
+  typedef swallow_assign type;
+};
+
+template<>
+struct tie_traits<void> {
+  typedef null_type type;
+};
+
+template <
+  class T0 = void, class T1 = void, class T2 = void,
+  class T3 = void, class T4 = void, class T5 = void,
+  class T6 = void, class T7 = void, class T8 = void,
+  class T9 = void
+>
+struct tie_mapper {
+  typedef
+    tuple<typename tie_traits<T0>::type,
+          typename tie_traits<T1>::type,
+          typename tie_traits<T2>::type,
+          typename tie_traits<T3>::type,
+          typename tie_traits<T4>::type,
+          typename tie_traits<T5>::type,
+          typename tie_traits<T6>::type,
+          typename tie_traits<T7>::type,
+          typename tie_traits<T8>::type,
+          typename tie_traits<T9>::type> type;
+};
+
+}
+
+// Tie function templates -------------------------------------------------
+template<class T0>
+inline typename detail::tie_mapper<T0>::type
+tie(T0& t0) {
+  typedef typename detail::tie_mapper<T0>::type t;
+  return t(t0);
+}
+
+template<class T0, class T1>
+inline typename detail::tie_mapper<T0, T1>::type
+tie(T0& t0, T1& t1) {
+  typedef typename detail::tie_mapper<T0, T1>::type t;
+  return t(t0, t1);
+}
+
+template<class T0, class T1, class T2>
+inline typename detail::tie_mapper<T0, T1, T2>::type
+tie(T0& t0, T1& t1, T2& t2) {
+  typedef typename detail::tie_mapper<T0, T1, T2>::type t;
+  return t(t0, t1, t2);
+}
+
+template<class T0, class T1, class T2, class T3>
+inline typename detail::tie_mapper<T0, T1, T2, T3>::type
+tie(T0& t0, T1& t1, T2& t2, T3& t3) {
+  typedef typename detail::tie_mapper<T0, T1, T2, T3>::type t;
+  return t(t0, t1, t2, t3);
+}
+
+template<class T0, class T1, class T2, class T3, class T4>
+inline typename detail::tie_mapper<T0, T1, T2, T3, T4>::type
+tie(T0& t0, T1& t1, T2& t2, T3& t3,
+                  T4& t4) {
+  typedef typename detail::tie_mapper<T0, T1, T2, T3, T4>::type t;
+  return t(t0, t1, t2, t3, t4);
+}
+
+template<class T0, class T1, class T2, class T3, class T4, class T5>
+inline typename detail::tie_mapper<T0, T1, T2, T3, T4, T5>::type
+tie(T0& t0, T1& t1, T2& t2, T3& t3,
+                  T4& t4, T5& t5) {
+  typedef typename detail::tie_mapper<T0, T1, T2, T3, T4, T5>::type t;
+  return t(t0, t1, t2, t3, t4, t5);
+}
+
+template<class T0, class T1, class T2, class T3, class T4, class T5, class T6>
+inline typename detail::tie_mapper<T0, T1, T2, T3, T4, T5, T6>::type
+tie(T0& t0, T1& t1, T2& t2, T3& t3,
+                  T4& t4, T5& t5, T6& t6) {
+  typedef typename detail::tie_mapper
+           <T0, T1, T2, T3, T4, T5, T6>::type t;
+  return t(t0, t1, t2, t3, t4, t5, t6);
+}
+
+template<class T0, class T1, class T2, class T3, class T4, class T5, class T6,
+         class T7>
+inline typename detail::tie_mapper<T0, T1, T2, T3, T4, T5, T6, T7>::type
+tie(T0& t0, T1& t1, T2& t2, T3& t3,
+                  T4& t4, T5& t5, T6& t6, T7& t7) {
+  typedef typename detail::tie_mapper
+           <T0, T1, T2, T3, T4, T5, T6, T7>::type t;
+  return t(t0, t1, t2, t3, t4, t5, t6, t7);
+}
+
+template<class T0, class T1, class T2, class T3, class T4, class T5, class T6,
+         class T7, class T8>
+inline typename detail::tie_mapper
+  <T0, T1, T2, T3, T4, T5, T6, T7, T8>::type
+tie(T0& t0, T1& t1, T2& t2, T3& t3,
+                  T4& t4, T5& t5, T6& t6, T7& t7,
+                  T8& t8) {
+  typedef typename detail::tie_mapper
+           <T0, T1, T2, T3, T4, T5, T6, T7, T8>::type t;
+  return t(t0, t1, t2, t3, t4, t5, t6, t7, t8);
+}
+
+template<class T0, class T1, class T2, class T3, class T4, class T5, class T6,
+         class T7, class T8, class T9>
+inline typename detail::tie_mapper
+  <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::type
+tie(T0& t0, T1& t1, T2& t2, T3& t3,
+                  T4& t4, T5& t5, T6& t6, T7& t7,
+                  T8& t8, T9& t9) {
+  typedef typename detail::tie_mapper
+           <T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::type t;
+  return t(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
+}
+
+template <class T0, class T1, class T2, class T3, class T4,
+          class T5, class T6, class T7, class T8, class T9>
+void swap(tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& lhs,
+          tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& rhs);
+inline void swap(null_type&, null_type&) {}
+template<class HH>
+inline void swap(cons<HH, null_type>& lhs, cons<HH, null_type>& rhs) {
+  ::pdalboost::swap(lhs.head, rhs.head);
+}
+template<class HH, class TT>
+inline void swap(cons<HH, TT>& lhs, cons<HH, TT>& rhs) {
+  ::pdalboost::swap(lhs.head, rhs.head);
+  ::pdalboost::tuples::swap(lhs.tail, rhs.tail);
+}
+template <class T0, class T1, class T2, class T3, class T4,
+          class T5, class T6, class T7, class T8, class T9>
+inline void swap(tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& lhs,
+          tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& rhs) {
+  typedef tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> tuple_type;
+  typedef typename tuple_type::inherited base;
+  ::pdalboost::tuples::swap(static_cast<base&>(lhs), static_cast<base&>(rhs));
+}
+
+} // end of namespace tuples
+} // end of namespace pdalboost
+
+
+#if BOOST_GCC >= 40700
+#pragma GCC diagnostic pop
+#endif
+
+
+#endif // BOOST_TUPLE_BASIC_HPP
+
+
diff --git a/vendor/pdalboost/boost/tuple/tuple.hpp b/vendor/pdalboost/boost/tuple/tuple.hpp
new file mode 100644
index 0000000..9a4d1d0
--- /dev/null
+++ b/vendor/pdalboost/boost/tuple/tuple.hpp
@@ -0,0 +1,67 @@
+//  tuple.hpp - Boost Tuple Library --------------------------------------
+
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi at cs.utu.fi)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org
+
+// ----------------------------------------------------------------- 
+
+#ifndef BOOST_TUPLE_HPP
+#define BOOST_TUPLE_HPP
+
+#if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730
+// Work around a compiler bug.
+// pdalboost::python::tuple has to be seen by the compiler before the
+// pdalboost::tuple class template.
+namespace pdalboost { namespace python { class tuple; }}
+#endif
+
+#include "boost/config.hpp"
+#include "boost/static_assert.hpp"
+
+// other compilers
+#include "boost/ref.hpp"
+#include "boost/tuple/detail/tuple_basic.hpp"
+
+
+namespace pdalboost {    
+
+using tuples::tuple;
+using tuples::make_tuple;
+using tuples::tie;
+#if !defined(BOOST_NO_USING_TEMPLATE)
+using tuples::get;
+#else
+//
+// The "using tuples::get" statement causes the
+// Borland compiler to ICE, use forwarding
+// functions instead:
+//
+template<int N, class HT, class TT>
+inline typename tuples::access_traits<
+                  typename tuples::element<N, tuples::cons<HT, TT> >::type
+                >::non_const_type
+get(tuples::cons<HT, TT>& c) {
+  return tuples::get<N,HT,TT>(c);
+} 
+// get function for const cons-lists, returns a const reference to
+// the element. If the element is a reference, returns the reference
+// as such (that is, can return a non-const reference)
+template<int N, class HT, class TT>
+inline typename tuples::access_traits<
+                  typename tuples::element<N, tuples::cons<HT, TT> >::type
+                >::const_type
+get(const tuples::cons<HT, TT>& c) {
+  return tuples::get<N,HT,TT>(c);
+}
+
+#endif // BOOST_NO_USING_TEMPLATE
+   
+} // end namespace pdalboost
+
+
+#endif // BOOST_TUPLE_HPP
diff --git a/vendor/pdalboost/boost/type.hpp b/vendor/pdalboost/boost/type.hpp
new file mode 100644
index 0000000..1ab5a11
--- /dev/null
+++ b/vendor/pdalboost/boost/type.hpp
@@ -0,0 +1,18 @@
+// (C) Copyright David Abrahams 2001.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPE_DWA20010120_HPP
+# define BOOST_TYPE_DWA20010120_HPP
+
+namespace pdalboost {
+
+  // Just a simple "type envelope". Useful in various contexts, mostly to work
+  // around some MSVC deficiencies.
+  template <class T>
+  struct type {};
+
+}
+
+#endif // BOOST_TYPE_DWA20010120_HPP
diff --git a/vendor/pdalboost/boost/type_index.hpp b/vendor/pdalboost/boost/type_index.hpp
new file mode 100644
index 0000000..c7e5f7e
--- /dev/null
+++ b/vendor/pdalboost/boost/type_index.hpp
@@ -0,0 +1,265 @@
+//
+// Copyright (c) Antony Polukhin, 2012-2014.
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_TYPE_INDEX_HPP
+#define BOOST_TYPE_INDEX_HPP
+
+/// \file boost/type_index.hpp
+/// \brief Includes minimal set of headers required to use the Boost.TypeIndex library.
+///
+/// By inclusion of this file most optimal type index classes will be included and used 
+/// as a pdalboost::typeindex::type_index and pdalboost::typeindex::type_info.
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+#if defined(BOOST_TYPE_INDEX_USER_TYPEINDEX)
+#   include BOOST_TYPE_INDEX_USER_TYPEINDEX
+#   ifdef BOOST_HAS_PRAGMA_DETECT_MISMATCH
+#       pragma detect_mismatch( "boost__type_index__abi", "user defined type_index class is used: " BOOST_STRINGIZE(BOOST_TYPE_INDEX_USER_TYPEINDEX))
+#   endif
+#elif (!defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY)) || defined(BOOST_MSVC)
+#   include <boost/type_index/stl_type_index.hpp>
+#   if defined(BOOST_NO_RTTI) || defined(BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY)
+#       include <boost/type_index/detail/stl_register_class.hpp>
+#       ifdef BOOST_HAS_PRAGMA_DETECT_MISMATCH
+#           pragma detect_mismatch( "boost__type_index__abi", "RTTI is off - typeid() is used only for templates")
+#       endif
+#   else
+#       ifdef BOOST_HAS_PRAGMA_DETECT_MISMATCH
+#           pragma detect_mismatch( "boost__type_index__abi", "RTTI is used")
+#       endif
+#   endif
+#else
+#   include <boost/type_index/ctti_type_index.hpp>
+#   include <boost/type_index/detail/ctti_register_class.hpp>
+#   ifdef BOOST_HAS_PRAGMA_DETECT_MISMATCH
+#       pragma detect_mismatch( "boost__type_index__abi", "RTTI is off - using CTTI")
+#   endif
+#endif
+
+#ifndef BOOST_TYPE_INDEX_REGISTER_CLASS
+#define BOOST_TYPE_INDEX_REGISTER_CLASS
+#endif
+
+namespace pdalboost { namespace typeindex {
+
+#if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED)
+
+/// \def BOOST_TYPE_INDEX_FUNCTION_SIGNATURE
+/// BOOST_TYPE_INDEX_FUNCTION_SIGNATURE is used by pdalboost::typeindex::ctti_type_index class to
+/// deduce the name of a type. If your compiler is not recognized
+/// by the TypeIndex library and you wish to work with pdalboost::typeindex::ctti_type_index, you may
+/// define this macro by yourself.
+///
+/// BOOST_TYPE_INDEX_FUNCTION_SIGNATURE must be defined to a compiler specific macro
+/// that outputs the \b whole function signature \b including \b template \b parameters.
+///
+/// If your compiler is not recognised and BOOST_TYPE_INDEX_FUNCTION_SIGNATURE is not defined,
+/// then a compile-time error will arise at any attempt to use pdalboost::typeindex::ctti_type_index classes.
+///
+/// See BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS and BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING
+/// for an information of how to tune the implementation to make a nice pretty_name() output.
+#define BOOST_TYPE_INDEX_FUNCTION_SIGNATURE BOOST_CURRENT_FUNCTION
+
+/// \def BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING
+/// This is a helper macro for making correct pretty_names() with RTTI off.
+///
+/// BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING macro may be defined to
+/// '(begin_skip, end_skip, runtime_skip, runtime_skip_until)' with parameters for adding a
+/// support for compilers, that by default are not recognized by TypeIndex library.
+///
+/// \b Example:
+///
+/// Imagine the situation when
+/// \code pdalboost::typeindex::ctti_type_index::type_id<int>().pretty_name() \endcode
+/// returns the following string:
+/// \code "static const char *pdalboost::detail::ctti<int>::n() [T = int]" \endcode
+/// and \code pdalboost::typeindex::ctti_type_index::type_id<short>().pretty_name() \endcode returns the following:
+/// \code "static const char *pdalboost::detail::ctti<short>::n() [T = short]" \endcode
+///
+/// As we may see first 39 characters are "static const char *pdalboost::detail::ctti<" and they do not depend on
+/// the type T. After first 39 characters we have a human readable type name which is duplicated at the end
+/// of a string. String always ends on ']', which consumes 1 character.
+///
+/// Now if we define `BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING` to
+/// `(39, 1, false, "")` we'll be getting \code "int>::n() [T = int" \endcode
+/// for `pdalboost::typeindex::ctti_type_index::type_id<int>().pretty_name()` and \code "short>::n() [T = short" \endcode
+/// for `pdalboost::typeindex::ctti_type_index::type_id<short>().pretty_name()`.
+///
+/// Now we need to take additional care of the characters that go before the last mention of our type. We'll
+/// do that by telling the macro that we need to cut off everything that goes before the "T = " including the "T = "
+/// itself:
+///
+/// \code (39, 1, true, "T = ") \endcode
+///
+/// In case of GCC or Clang command line we need to add the following line while compiling all the sources:
+///
+/// \code
+/// -DBOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING='(39, 1, true, "T = ")'
+/// \endcode
+/// \param begin_skip How many characters must be skipped at the beginning of the type holding string.
+/// Must be a compile time constant.
+/// \param end_skip How many characters must be skipped at the end of the type holding string.
+/// Must be a compile time constant.
+/// \param runtime_skip Do we need additional checks at runtime to cut off the more characters.
+/// Must be `true` or `false`.
+/// \param runtime_skip_until Skip all the characters before the following string (including the string itself).
+/// Must be a compile time array of characters.
+///
+/// See [RTTI emulation limitations](boost_typeindex/rtti_emulation_limitations.html) for more info.
+#define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING (0, 0, false, "")
+
+
+    /// Depending on a compiler flags, optimal implementation of type_index will be used 
+    /// as a default pdalboost::typeindex::type_index.
+    ///
+    /// Could be a pdalboost::typeindex::stl_type_index, pdalboost::typeindex::ctti_type_index or 
+    /// user defined type_index class.
+    ///
+    /// \b See pdalboost::typeindex::type_index_facade for a full description of type_index functions.
+    typedef platform_specific type_index;
+#elif defined(BOOST_TYPE_INDEX_USER_TYPEINDEX)
+    // Nothing to do
+#elif (!defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY)) || defined(BOOST_MSVC)
+    typedef pdalboost::typeindex::stl_type_index type_index;
+#else 
+    typedef pdalboost::typeindex::ctti_type_index type_index;
+#endif
+
+/// Depending on a compiler flags, optimal implementation of type_info will be used 
+/// as a default pdalboost::typeindex::type_info.
+///
+/// Could be a std::type_info, pdalboost::typeindex::detail::ctti_data or 
+/// some user defined class.
+///
+/// type_info \b is \b not copyable or default constructible. It is \b not assignable too!
+typedef type_index::type_info_t type_info;
+
+#if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED)
+
+/// \def BOOST_TYPE_INDEX_USER_TYPEINDEX
+/// BOOST_TYPE_INDEX_USER_TYPEINDEX can be defined to the path to header file
+/// with user provided implementation of type_index.
+///
+/// See [Making a custom type_index](boost_typeindex/making_a_custom_type_index.html) section
+/// of documentation for usage example.
+#define BOOST_TYPE_INDEX_USER_TYPEINDEX <full/absolute/path/to/header/with/type_index.hpp>
+
+
+/// \def BOOST_TYPE_INDEX_REGISTER_CLASS
+/// BOOST_TYPE_INDEX_REGISTER_CLASS is used to help to emulate RTTI.
+/// Put this macro into the public section of polymorphic class to allow runtime type detection.
+///
+/// Depending on the typeid() availability this macro will expand to nothing or to virtual helper function
+/// `virtual const type_info& boost_type_info_type_id_runtime_() const noexcept`.
+///
+/// \b Example:
+/// \code
+/// class A {
+/// public:
+///     BOOST_TYPE_INDEX_REGISTER_CLASS
+///     virtual ~A(){}
+/// };
+///
+/// struct B: public A {
+///     BOOST_TYPE_INDEX_REGISTER_CLASS
+/// };
+///
+/// struct C: public B {
+///     BOOST_TYPE_INDEX_REGISTER_CLASS
+/// };
+///
+/// ...
+///
+/// C c1;
+/// A* pc1 = &c1;
+/// assert(pdalboost::typeindex::type_id<C>() == pdalboost::typeindex::type_id_runtime(*pc1));
+/// \endcode
+#define BOOST_TYPE_INDEX_REGISTER_CLASS nothing-or-some-virtual-functions
+
+/// \def BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY
+/// BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY is a helper macro that must be defined if mixing
+/// RTTI on/off modules. See
+/// [Mixing sources with RTTI on and RTTI off](boost_typeindex/mixing_sources_with_rtti_on_and_.html)
+/// section of documentation for more info.
+#define BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY
+
+#endif // defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED)
+
+
+/// Function to get pdalboost::typeindex::type_index for a type T.
+/// Removes const, volatile && and & modifiers from T.
+///
+/// \b Example:
+/// \code
+/// type_index ti = type_id<int&>();
+/// std::cout << ti.pretty_name();  // Outputs 'int'
+/// \endcode
+///
+/// \tparam T Type for which type_index must be created.
+/// \throw Nothing.
+/// \return pdalboost::typeindex::type_index with information about the specified type T.
+template <class T>
+inline type_index type_id() BOOST_NOEXCEPT {
+    return type_index::type_id<T>();
+}
+
+/// Function for constructing pdalboost::typeindex::type_index instance for type T. 
+/// Does not remove const, volatile, & and && modifiers from T.
+///
+/// If T has no const, volatile, & and && modifiers, then returns exactly 
+/// the same result as in case of calling `type_id<T>()`.
+///
+/// \b Example:
+/// \code
+/// type_index ti = type_id_with_cvr<int&>();
+/// std::cout << ti.pretty_name();  // Outputs 'int&'
+/// \endcode
+///
+/// \tparam T Type for which type_index must be created.
+/// \throw Nothing.
+/// \return pdalboost::typeindex::type_index with information about the specified type T.
+template <class T>
+inline type_index type_id_with_cvr() BOOST_NOEXCEPT {
+    return type_index::type_id_with_cvr<T>();
+}
+
+/// Function that works exactly like C++ typeid(rtti_val) call, but returns pdalboost::type_index.
+///
+/// Retunrs runtime information about specified type.
+///
+/// \b Requirements: RTTI available or Base and Derived classes must be marked with BOOST_TYPE_INDEX_REGISTER_CLASS.
+///
+/// \b Example:
+/// \code
+/// struct Base { virtual ~Base(){} };
+/// struct Derived: public Base  {};
+/// ...
+/// Derived d;
+/// Base& b = d;
+/// type_index ti = type_id_runtime(b);
+/// std::cout << ti.pretty_name();  // Outputs 'Derived'
+/// \endcode
+///
+/// \param runtime_val Varaible which runtime type must be returned.
+/// \throw Nothing.
+/// \return pdalboost::typeindex::type_index with information about the specified variable.
+template <class T>
+inline type_index type_id_runtime(const T& runtime_val) BOOST_NOEXCEPT {
+    return type_index::type_id_runtime(runtime_val);
+}
+
+}} // namespace pdalboost::typeindex
+
+
+
+#endif // BOOST_TYPE_INDEX_HPP
+
diff --git a/vendor/pdalboost/boost/type_index/ctti_type_index.hpp b/vendor/pdalboost/boost/type_index/ctti_type_index.hpp
new file mode 100644
index 0000000..8ce94cf
--- /dev/null
+++ b/vendor/pdalboost/boost/type_index/ctti_type_index.hpp
@@ -0,0 +1,179 @@
+//
+// Copyright (c) Antony Polukhin, 2013-2014.
+//
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_TYPE_INDEX_CTTI_TYPE_INDEX_HPP
+#define BOOST_TYPE_INDEX_CTTI_TYPE_INDEX_HPP
+
+/// \file ctti_type_index.hpp
+/// \brief Contains pdalboost::typeindex::ctti_type_index class.
+///
+/// pdalboost::typeindex::ctti_type_index class can be used as a drop-in replacement 
+/// for std::type_index.
+///
+/// It is used in situations when typeid() method is not available or 
+/// BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY macro is defined.
+
+#include <boost/type_index/type_index_facade.hpp>
+#include <boost/type_index/detail/compile_time_type_info.hpp>
+
+#include <cstring>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+namespace pdalboost { namespace typeindex {
+
+namespace detail {
+
+// That's the most trickiest part of the TypeIndex library:
+//      1) we do not want to give user ability to manually construct and compare `struct-that-represents-type`
+//      2) we need to distinguish between `struct-that-represents-type` and `const char*`
+//      3) we need a thread-safe way to have references to instances `struct-that-represents-type`
+//      4) we need a compile-time control to make sure that user does not copy or
+// default construct `struct-that-represents-type`
+//
+// Solution would be the following:
+
+/// \class ctti_data
+/// Standard-layout class with private constructors and assignment operators.
+///
+/// You can not work with this class directly. The  purpose of this class is to hold type info 
+/// \b when \b RTTI \b is \b off and allow ctti_type_index construction from itself.
+///
+/// \b Example:
+/// \code
+/// const detail::ctti_data& foo();
+/// ...
+/// type_index ti = type_index(foo());
+/// std::cout << ti.pretty_name();
+/// \endcode
+class ctti_data {
+#ifndef BOOST_NO_CXX11_DELETED_FUNCTIONS
+public:
+    ctti_data() = delete;
+    ctti_data(const ctti_data&) = delete;
+    ctti_data& operator=(const ctti_data&) = delete;
+#else
+private:
+    ctti_data();
+    ctti_data(const ctti_data&);
+    ctti_data& operator=(const ctti_data&);
+#endif
+};
+
+} // namespace detail
+
+/// Helper method for getting detail::ctti_data of a template parameter T.
+template <class T>
+inline const detail::ctti_data& ctti_construct() BOOST_NOEXCEPT {
+    // Standard C++11, 5.2.10 Reinterpret cast:
+    // An object pointer can be explicitly converted to an object pointer of a different type. When a prvalue
+    // v of type "pointer to T1" is converted to the type "pointer to cv T2", the result is static_cast<cv
+    // T2*>(static_cast<cv void*>(v)) if both T1 and T2 are standard-layout types (3.9) and the alignment
+    // requirements of T2 are no stricter than those of T1, or if either type is void. Converting a prvalue of type
+    // "pointer to T1" to the type "pointer to T2" (where T1 and T2 are object types and where the alignment
+    // requirements of T2 are no stricter than those of T1) and back to its original type yields the original pointer
+    // value.
+    //
+    // Alignments are checked in `type_index_test_ctti_alignment.cpp` test.
+    return *reinterpret_cast<const detail::ctti_data*>(pdalboost::detail::ctti<T>::n());
+}
+
+/// \class ctti_type_index
+/// This class is a wrapper that pretends to work exactly like stl_type_index, but does 
+/// not require RTTI support. \b For \b description \b of \b functions \b see type_index_facade.
+///
+/// This class produces slightly longer type names, so consider using stl_type_index 
+/// in situations when typeid() is working.
+class ctti_type_index: public type_index_facade<ctti_type_index, detail::ctti_data> {
+    const detail::ctti_data* data_;
+
+    inline std::size_t get_raw_name_length() const BOOST_NOEXCEPT;
+
+public:
+    typedef detail::ctti_data type_info_t;
+
+    inline ctti_type_index() BOOST_NOEXCEPT
+        : data_(&ctti_construct<void>())
+    {}
+
+    inline ctti_type_index(const type_info_t& data) BOOST_NOEXCEPT
+        : data_(&data)
+    {}
+
+    inline const type_info_t&  type_info() const BOOST_NOEXCEPT;
+    inline const char*  raw_name() const BOOST_NOEXCEPT;
+    inline std::string  pretty_name() const;
+    inline std::size_t  hash_code() const BOOST_NOEXCEPT;
+
+    template <class T>
+    inline static ctti_type_index type_id() BOOST_NOEXCEPT;
+
+    template <class T>
+    inline static ctti_type_index type_id_with_cvr() BOOST_NOEXCEPT;
+
+    template <class T>
+    inline static ctti_type_index type_id_runtime(const T& variable) BOOST_NOEXCEPT;
+};
+
+
+inline const ctti_type_index::type_info_t& ctti_type_index::type_info() const BOOST_NOEXCEPT {
+    return *data_;
+}
+
+
+template <class T>
+inline ctti_type_index ctti_type_index::type_id() BOOST_NOEXCEPT {
+    typedef BOOST_DEDUCED_TYPENAME pdalboost::remove_reference<T>::type no_ref_t;
+    typedef BOOST_DEDUCED_TYPENAME pdalboost::remove_cv<no_ref_t>::type no_cvr_t;
+    return ctti_construct<no_cvr_t>();
+}
+
+
+
+template <class T>
+inline ctti_type_index ctti_type_index::type_id_with_cvr() BOOST_NOEXCEPT {
+    return ctti_construct<T>();
+}
+
+
+template <class T>
+inline ctti_type_index ctti_type_index::type_id_runtime(const T& variable) BOOST_NOEXCEPT {
+    return variable.boost_type_index_type_id_runtime_();
+}
+
+
+inline const char* ctti_type_index::raw_name() const BOOST_NOEXCEPT {
+    return reinterpret_cast<const char*>(data_);
+}
+
+inline std::size_t ctti_type_index::get_raw_name_length() const BOOST_NOEXCEPT {
+    return std::strlen(raw_name() + detail::ctti_skip_size_at_end);
+}
+
+
+inline std::string ctti_type_index::pretty_name() const {
+    std::size_t len = get_raw_name_length();
+    while (raw_name()[len - 1] == ' ') --len; // MSVC sometimes adds whitespaces
+    return std::string(raw_name(), len);
+}
+
+
+inline std::size_t ctti_type_index::hash_code() const BOOST_NOEXCEPT {
+    return pdalboost::hash_range(raw_name(), raw_name() + get_raw_name_length());
+}
+
+
+}} // namespace pdalboost::typeindex
+
+#endif // BOOST_TYPE_INDEX_CTTI_TYPE_INDEX_HPP
+
diff --git a/vendor/pdalboost/boost/type_index/detail/compile_time_type_info.hpp b/vendor/pdalboost/boost/type_index/detail/compile_time_type_info.hpp
new file mode 100644
index 0000000..0b690b0
--- /dev/null
+++ b/vendor/pdalboost/boost/type_index/detail/compile_time_type_info.hpp
@@ -0,0 +1,144 @@
+//
+// Copyright (c) Antony Polukhin, 2012-2014.
+//
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_TYPE_INDEX_DETAIL_COMPILE_TIME_TYPE_INFO_HPP
+#define BOOST_TYPE_INDEX_DETAIL_COMPILE_TIME_TYPE_INFO_HPP
+
+/// \file compile_time_type_info.hpp
+/// \brief Contains helper macros and implementation details of pdalboost::typeindex::ctti_type_index.
+/// Not intended for inclusion from user's code. 
+
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/mpl/bool.hpp>
+#include <algorithm>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+/// @cond
+#define BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(begin_skip, end_skip, runtime_skip, runtime_skip_until)   \
+    namespace pdalboost { namespace typeindex { namespace detail {                                                  \
+        BOOST_STATIC_CONSTEXPR std::size_t ctti_skip_size_at_begin  = begin_skip;                               \
+        BOOST_STATIC_CONSTEXPR std::size_t ctti_skip_size_at_end    = end_skip;                                 \
+        BOOST_STATIC_CONSTEXPR bool ctti_skip_more_at_runtime       = runtime_skip;                             \
+        BOOST_STATIC_CONSTEXPR char ctti_skip_until_runtime[]       = runtime_skip_until;                       \
+    }}} /* namespace pdalboost::typeindex::detail */                                                                \
+    /**/  
+/// @endcond
+
+#if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED)
+    /* Nothing to document. All the macro docs are moved to <boost/type_index.hpp> */
+#elif defined(BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING)
+
+#   include <boost/preprocessor/facilities/expand.hpp>
+    BOOST_PP_EXPAND( BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING )
+
+#elif defined(_MSC_VER)
+    // sizeof("const char *__cdecl pdalboost::detail::ctti<") - 1, sizeof(">::n(void)") - 1
+    BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(40, 10, false, "")
+#elif defined(__clang__) && defined(__APPLE__)
+    // Someone made __clang_major__ equal to LLVM version rather than compiler version
+    // on APPLE platform.
+    //
+    // Using less efficient solution because there is no good way to detect real version of Clang.
+    // sizeof("static const char *pdalboost::detail::ctti<") - 1, sizeof("]") - 1, true, "???????????>::n() [T = int"
+    BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(39, 1, true, "T = ")
+#elif defined(__clang__) && (__clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ == 0))
+    // sizeof("static const char *pdalboost::detail::ctti<") - 1, sizeof(">::n()") - 1
+    // note: checked on 3.0
+    BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(39, 6, false, "")
+#elif defined(__clang__) && __clang_major__ == 3 && __clang_minor__ > 0
+    // sizeof("static const char *pdalboost::detail::ctti<") - 1, sizeof("]") - 1, true, "int>::n() [T = int"
+    // note: checked on 3.1, 3.4
+    BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(39, 1, true, "T = ")
+#elif defined(__GNUC__)
+    // sizeof("static const char* pdalboost::detail::ctti<T>::n() [with T = ") - 1, sizeof("]") - 1
+    BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(57, 1, false, "")
+#else
+    // Deafult code for other platforms... Just skip nothing!
+    BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS(0, 0, false, "")
+#endif
+
+#undef BOOST_TYPE_INDEX_REGISTER_CTTI_PARSING_PARAMS
+
+namespace pdalboost { namespace typeindex { namespace detail { 
+    template <bool Condition>
+    inline void assert_compile_time_legths() BOOST_NOEXCEPT {
+        BOOST_STATIC_ASSERT_MSG(
+            Condition,
+            "TypeIndex library is misconfigured for your compiler. "
+            "Please define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING to correct values. See section "
+            "'RTTI emulation limitations' of the documentation for more information."
+        );
+    }
+    
+    template <std::size_t ArrayLength>
+    inline const char* skip_begining_runtime(const char* begin, pdalboost::mpl::false_) BOOST_NOEXCEPT {
+        return begin;
+    }
+
+    template <std::size_t ArrayLength>
+    inline const char* skip_begining_runtime(const char* begin, pdalboost::mpl::true_) BOOST_NOEXCEPT {
+        const char* const it = std::search(
+            begin, begin + ArrayLength,
+            ctti_skip_until_runtime, ctti_skip_until_runtime + sizeof(ctti_skip_until_runtime) - 1
+        );
+        return (it == begin + ArrayLength ? begin : it + sizeof(ctti_skip_until_runtime) - 1);
+    }
+
+    template <std::size_t ArrayLength>
+    inline const char* skip_begining(const char* begin) BOOST_NOEXCEPT {
+        assert_compile_time_legths<(ArrayLength > ctti_skip_size_at_begin + ctti_skip_size_at_end)>();
+        return skip_begining_runtime<ArrayLength - ctti_skip_size_at_begin>(
+            begin + ctti_skip_size_at_begin, 
+            pdalboost::mpl::bool_<ctti_skip_more_at_runtime>()
+        );
+    }
+}}} // namespace pdalboost::typeindex::detail
+
+namespace pdalboost { namespace detail {
+
+/// Noncopyable type_info that does not require RTTI.
+/// CTTI == Compile Time Type Info.
+/// This name must be as short as possible, to avoid code bloat
+template <class T>
+struct ctti {
+
+    /// Returns raw name. Must be as short, as possible, to avoid code bloat
+    static const char* n() BOOST_NOEXCEPT {
+    #if defined(BOOST_TYPE_INDEX_FUNCTION_SIGNATURE)
+        return pdalboost::typeindex::detail::skip_begining< sizeof(BOOST_TYPE_INDEX_FUNCTION_SIGNATURE >(BOOST_TYPE_INDEX_FUNCTION_SIGNATURE);
+    #elif defined(__FUNCSIG__)
+        return pdalboost::typeindex::detail::skip_begining< sizeof(__FUNCSIG__) >(__FUNCSIG__);
+    #elif defined(__PRETTY_FUNCTION__) \
+                || defined(__GNUC__) \
+                || (defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x5130)) \
+                || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) \
+                || (defined(__ICC) && (__ICC >= 600)) \
+                || defined(__ghs__) \
+                || defined(__DMC__)
+
+        return pdalboost::typeindex::detail::skip_begining< sizeof(__PRETTY_FUNCTION__) >(__PRETTY_FUNCTION__);
+    #else
+        BOOST_STATIC_ASSERT_MSG(
+            sizeof(T) && false,
+            "TypeIndex library could not detect your compiler. "
+            "Please make the BOOST_TYPE_INDEX_FUNCTION_SIGNATURE macro use "
+            "correct compiler macro for getting the whole function name. "
+            "Define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING to correct value after that."
+        );
+    #endif
+    }
+};
+
+}} // namespace pdalboost::detail
+
+#endif // BOOST_TYPE_INDEX_DETAIL_COMPILE_TIME_TYPE_INFO_HPP
+
diff --git a/vendor/pdalboost/boost/type_index/detail/ctti_register_class.hpp b/vendor/pdalboost/boost/type_index/detail/ctti_register_class.hpp
new file mode 100644
index 0000000..70bca41
--- /dev/null
+++ b/vendor/pdalboost/boost/type_index/detail/ctti_register_class.hpp
@@ -0,0 +1,40 @@
+//
+// Copyright (c) Antony Polukhin, 2013-2014.
+//
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_TYPE_INDEX_CTTI_REGISTER_CLASS_HPP
+#define BOOST_TYPE_INDEX_CTTI_REGISTER_CLASS_HPP
+
+/// \file ctti_register_class.hpp
+/// \brief Contains BOOST_TYPE_INDEX_REGISTER_CLASS macro implementation that uses pdalboost::typeindex::ctti_type_index.
+/// Not intended for inclusion from user's code.
+
+#include <boost/type_index/ctti_type_index.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+namespace pdalboost { namespace typeindex { namespace detail {
+
+template <class T>
+inline const ctti_data& ctti_construct_typeid_ref(const T*) BOOST_NOEXCEPT {
+    return ctti_construct<T>();
+}
+
+}}} // namespace pdalboost::typeindex::detail
+
+/// @cond
+#define BOOST_TYPE_INDEX_REGISTER_CLASS                                                                             \
+    virtual const pdalboost::typeindex::detail::ctti_data& boost_type_index_type_id_runtime_() const BOOST_NOEXCEPT {   \
+        return pdalboost::typeindex::detail::ctti_construct_typeid_ref(this);                                           \
+    }                                                                                                               \
+/**/
+/// @endcond
+
+#endif // BOOST_TYPE_INDEX_CTTI_REGISTER_CLASS_HPP
+
diff --git a/vendor/pdalboost/boost/type_index/detail/stl_register_class.hpp b/vendor/pdalboost/boost/type_index/detail/stl_register_class.hpp
new file mode 100644
index 0000000..bef767b
--- /dev/null
+++ b/vendor/pdalboost/boost/type_index/detail/stl_register_class.hpp
@@ -0,0 +1,40 @@
+//
+// Copyright (c) Antony Polukhin, 2013-2014.
+//
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_TYPE_INDEX_STL_REGISTER_CLASS_HPP
+#define BOOST_TYPE_INDEX_STL_REGISTER_CLASS_HPP
+
+/// \file stl_register_class.hpp
+/// \brief Contains BOOST_TYPE_INDEX_REGISTER_CLASS macro implementation that uses pdalboost::typeindex::stl_type_index.
+/// Not intended for inclusion from user's code.
+
+#include <boost/type_index/stl_type_index.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+namespace pdalboost { namespace typeindex { namespace detail {
+
+template <class T>
+inline const stl_type_index::type_info_t& stl_construct_typeid_ref(const T*) BOOST_NOEXCEPT {
+    return typeid(T);
+}
+
+}}} // namespace pdalboost::typeindex::detail
+
+/// @cond
+#define BOOST_TYPE_INDEX_REGISTER_CLASS                                                                                     \
+    virtual const pdalboost::typeindex::stl_type_index::type_info_t& boost_type_index_type_id_runtime_() const BOOST_NOEXCEPT { \
+        return pdalboost::typeindex::detail::stl_construct_typeid_ref(this);                                                    \
+    }                                                                                                                       \
+/**/
+/// @endcond
+
+#endif // BOOST_TYPE_INDEX_STL_REGISTER_CLASS_HPP
+
diff --git a/vendor/pdalboost/boost/type_index/stl_type_index.hpp b/vendor/pdalboost/boost/type_index/stl_type_index.hpp
new file mode 100644
index 0000000..cc41d94
--- /dev/null
+++ b/vendor/pdalboost/boost/type_index/stl_type_index.hpp
@@ -0,0 +1,272 @@
+//
+// Copyright (c) Antony Polukhin, 2013-2014.
+//
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_TYPE_INDEX_STL_TYPE_INDEX_HPP
+#define BOOST_TYPE_INDEX_STL_TYPE_INDEX_HPP
+
+/// \file stl_type_index.hpp
+/// \brief Contains pdalboost::typeindex::stl_type_index class.
+///
+/// pdalboost::typeindex::stl_type_index class can be used as a drop-in replacement 
+/// for std::type_index.
+///
+/// It is used in situations when RTTI is enabled or typeid() method is available.
+/// When typeid() is disabled or BOOST_TYPE_INDEX_FORCE_NO_RTTI_COMPATIBILITY macro
+/// is defined pdalboost::typeindex::ctti is usually used instead of pdalboost::typeindex::stl_type_index.
+
+#include <boost/type_index/type_index_facade.hpp>
+
+// MSVC is capable of calling typeid(T) even when RTTI is off
+#if defined(BOOST_NO_RTTI) && !defined(BOOST_MSVC)
+#error "File boost/type_index/stl_type_index.ipp is not usable when typeid() is not available."
+#endif
+
+#include <typeinfo>
+#include <cstring>                                  // std::strcmp, std::strlen, std::strstr
+#include <stdexcept>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/core/demangle.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+
+#if (defined(__EDG_VERSION__) && __EDG_VERSION__ < 245) \
+        || (defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 744)
+#   include <boost/type_traits/is_signed.hpp>
+#   include <boost/type_traits/make_signed.hpp>
+#   include <boost/mpl/identity.hpp>
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+namespace pdalboost { namespace typeindex {
+
+/// \class stl_type_index
+/// This class is a wrapper around std::type_info, that workarounds issues and provides
+/// much more rich interface. \b For \b description \b of \b functions \b see type_index_facade.
+///
+/// This class requires typeid() to work. For cases when RTTI is disabled see ctti_type_index.
+class stl_type_index
+    : public type_index_facade<
+        stl_type_index, 
+        #ifdef BOOST_NO_STD_TYPEINFO
+            type_info
+        #else
+            std::type_info
+        #endif
+    > 
+{
+public:
+#ifdef BOOST_NO_STD_TYPEINFO
+    typedef type_info type_info_t;
+#else
+    typedef std::type_info type_info_t;
+#endif
+
+private:
+    const type_info_t* data_;
+
+public:
+    inline stl_type_index() BOOST_NOEXCEPT
+        : data_(&typeid(void))
+    {}
+
+    inline stl_type_index(const type_info_t& data) BOOST_NOEXCEPT
+        : data_(&data)
+    {}
+
+    inline const type_info_t&  type_info() const BOOST_NOEXCEPT;
+
+    inline const char*  raw_name() const BOOST_NOEXCEPT;
+    inline const char*  name() const BOOST_NOEXCEPT;
+    inline std::string  pretty_name() const;
+
+    inline std::size_t  hash_code() const BOOST_NOEXCEPT;
+    inline bool         equal(const stl_type_index& rhs) const BOOST_NOEXCEPT;
+    inline bool         before(const stl_type_index& rhs) const BOOST_NOEXCEPT;
+
+    template <class T>
+    inline static stl_type_index type_id() BOOST_NOEXCEPT;
+
+    template <class T>
+    inline static stl_type_index type_id_with_cvr() BOOST_NOEXCEPT;
+
+    template <class T>
+    inline static stl_type_index type_id_runtime(const T& value) BOOST_NOEXCEPT;
+};
+
+inline const stl_type_index::type_info_t& stl_type_index::type_info() const BOOST_NOEXCEPT {
+    return *data_;
+}
+
+
+inline const char* stl_type_index::raw_name() const BOOST_NOEXCEPT {
+#ifdef _MSC_VER
+    return data_->raw_name();
+#else
+    return data_->name();
+#endif
+}
+
+inline const char* stl_type_index::name() const BOOST_NOEXCEPT {
+    return data_->name();
+}
+
+inline std::string stl_type_index::pretty_name() const {
+    static const char cvr_saver_name[] = "pdalboost::typeindex::detail::cvr_saver<";
+    static BOOST_CONSTEXPR_OR_CONST std::string::size_type cvr_saver_name_len = sizeof(cvr_saver_name) - 1;
+
+    // In case of MSVC demangle() is a no-op, and name() already returns demangled name.
+    // In case of GCC and Clang (on non-Windows systems) name() returns mangled name and demangle() undecorates it.
+    const pdalboost::core::scoped_demangled_name demangled_name(data_->name());
+
+    const char* begin = demangled_name.get();
+    if (!begin) {
+        pdalboost::throw_exception(std::runtime_error("Type name demangling failed"));
+    }
+
+    const std::string::size_type len = std::strlen(begin);
+    const char* end = begin + len;
+
+    if (len > cvr_saver_name_len) {
+        const char* b = std::strstr(begin, cvr_saver_name);
+        if (b) {
+            b += cvr_saver_name_len;
+
+            // Trim leading spaces
+            while (*b == ' ') {         // the string is zero terminated, we won't exceed the buffer size
+                ++ b;
+            }
+
+            // Skip the closing angle bracket
+            const char* e = end - 1;
+            while (e > b && *e != '>') {
+                -- e;
+            }
+
+            // Trim trailing spaces
+            while (e > b && *(e - 1) == ' ') {
+                -- e;
+            }
+
+            if (b < e) {
+                // Parsing seems to have succeeded, the type name is not empty
+                begin = b;
+                end = e;
+            }
+        }
+    }
+
+    return std::string(begin, end);
+}
+
+
+inline std::size_t stl_type_index::hash_code() const BOOST_NOEXCEPT {
+#if _MSC_VER > 1600 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5 && defined(__GXX_EXPERIMENTAL_CXX0X__))
+    return data_->hash_code();
+#else
+    return pdalboost::hash_range(raw_name(), raw_name() + std::strlen(raw_name()));
+#endif
+}
+
+
+/// @cond
+
+// for this compiler at least, cross-shared-library type_info
+// comparisons don't work, so we are using typeid(x).name() instead.
+# if (defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5))) \
+    || defined(_AIX) \
+    || (defined(__sgi) && defined(__host_mips)) \
+    || (defined(__hpux) && defined(__HP_aCC)) \
+    || (defined(linux) && defined(__INTEL_COMPILER) && defined(__ICC))
+#  define BOOST_CLASSINFO_COMPARE_BY_NAMES
+# endif
+
+/// @endcond
+
+inline bool stl_type_index::equal(const stl_type_index& rhs) const BOOST_NOEXCEPT {
+#ifdef BOOST_CLASSINFO_COMPARE_BY_NAMES
+    return raw_name() == rhs.raw_name() || !std::strcmp(raw_name(), rhs.raw_name());
+#else
+    return *data_ == *rhs.data_;
+#endif
+}
+
+inline bool stl_type_index::before(const stl_type_index& rhs) const BOOST_NOEXCEPT {
+#ifdef BOOST_CLASSINFO_COMPARE_BY_NAMES
+    return raw_name() != rhs.raw_name() && std::strcmp(raw_name(), rhs.raw_name()) < 0;
+#else
+    return !!data_->before(*rhs.data_);
+#endif
+}
+
+#ifdef BOOST_CLASSINFO_COMPARE_BY_NAMES
+#undef BOOST_CLASSINFO_COMPARE_BY_NAMES
+#endif
+
+
+
+template <class T>
+inline stl_type_index stl_type_index::type_id() BOOST_NOEXCEPT {
+    typedef BOOST_DEDUCED_TYPENAME pdalboost::remove_reference<T>::type no_ref_t;
+    typedef BOOST_DEDUCED_TYPENAME pdalboost::remove_cv<no_ref_t>::type no_cvr_prefinal_t;
+
+    #  if (defined(__EDG_VERSION__) && __EDG_VERSION__ < 245) \
+        || (defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 744)
+
+        // Old EDG-based compilers seem to mistakenly distinguish 'integral' from 'signed integral'
+        // in typeid() expressions. Full template specialization for 'integral' fixes that issue:
+        typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_<
+            pdalboost::is_signed<no_cvr_prefinal_t>,
+            pdalboost::make_signed<no_cvr_prefinal_t>,
+            pdalboost::mpl::identity<no_cvr_prefinal_t>
+        >::type no_cvr_prefinal_lazy_t;
+
+        typedef BOOST_DEDUCED_TYPENAME no_cvr_prefinal_t::type no_cvr_t;
+    #else
+        typedef no_cvr_prefinal_t no_cvr_t;
+    #endif
+
+    return typeid(no_cvr_t);
+}
+
+namespace detail {
+    template <class T> class cvr_saver{};
+}
+
+template <class T>
+inline stl_type_index stl_type_index::type_id_with_cvr() BOOST_NOEXCEPT {
+    typedef BOOST_DEDUCED_TYPENAME pdalboost::mpl::if_<
+        pdalboost::mpl::or_<pdalboost::is_reference<T>, pdalboost::is_const<T>, pdalboost::is_volatile<T> >,
+        detail::cvr_saver<T>,
+        T
+    >::type type;
+
+    return typeid(type);
+}
+
+
+template <class T>
+inline stl_type_index stl_type_index::type_id_runtime(const T& value) BOOST_NOEXCEPT {
+#ifdef BOOST_NO_RTTI
+    return value.boost_type_index_type_id_runtime_();
+#else
+    return typeid(value);
+#endif
+}
+
+}} // namespace pdalboost::typeindex
+
+#endif // BOOST_TYPE_INDEX_STL_TYPE_INDEX_HPP
diff --git a/vendor/pdalboost/boost/type_index/type_index_facade.hpp b/vendor/pdalboost/boost/type_index/type_index_facade.hpp
new file mode 100644
index 0000000..4baacce
--- /dev/null
+++ b/vendor/pdalboost/boost/type_index/type_index_facade.hpp
@@ -0,0 +1,300 @@
+//
+// Copyright (c) Antony Polukhin, 2013-2015.
+//
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_TYPE_INDEX_TYPE_INDEX_FACADE_HPP
+#define BOOST_TYPE_INDEX_TYPE_INDEX_FACADE_HPP
+
+#include <boost/config.hpp>
+#include <string>
+#include <cstring>
+
+#if !defined(BOOST_NO_IOSTREAM)
+#if !defined(BOOST_NO_IOSFWD)
+#include <iosfwd>               // for std::basic_ostream
+#else
+#include <ostream>
+#endif
+#endif
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+// Forward declaration from #include <boost/functional/hash_fwd.hpp>
+namespace pdalboost {
+    template <class It> std::size_t hash_range(It, It);
+}
+
+namespace pdalboost { namespace typeindex {
+
+/// \class type_index_facade
+///
+/// This class takes care about the comparison operators, hash functions and 
+/// ostream operators. Use this class as a public base class for defining new
+/// type_info-conforming classes.
+///
+/// \b Example:
+/// \code
+/// class stl_type_index: public type_index_facade<stl_type_index, std::type_info> 
+/// {
+/// public:
+///     typedef std::type_info type_info_t;
+/// private:
+///     const type_info_t* data_;
+///
+/// public:
+///     stl_type_index(const type_info_t& data) noexcept
+///         : data_(&data)
+///     {}
+/// // ...
+/// };
+/// \endcode
+///
+/// \tparam Derived Class derived from type_index_facade.
+/// \tparam TypeInfo Class that will be used as a base type_info class.
+/// \note Take a look at the protected methods. They are \b not \b defined in type_index_facade. 
+/// Protected member functions raw_name() \b must be defined in Derived class. All the other 
+/// methods are mandatory.
+/// \see 'Making a custom type_index' section for more information about 
+/// creating your own type_index using type_index_facade.
+template <class Derived, class TypeInfo>
+class type_index_facade {
+private:
+    /// @cond
+    const Derived & derived() const BOOST_NOEXCEPT {
+      return *static_cast<Derived const*>(this);
+    }
+    /// @endcond
+public:
+    typedef TypeInfo                                type_info_t;
+
+    /// \b Override: This function \b may be redefined in Derived class. Overrides \b must not throw.
+    /// \return Name of a type. By default returns Derived::raw_name().
+    inline const char* name() const BOOST_NOEXCEPT {
+        return derived().raw_name();
+    }
+
+    /// \b Override: This function \b may be redefined in Derived class. Overrides may throw.
+    /// \return Human readable type name. By default returns Derived::name().
+    inline std::string pretty_name() const {
+        return derived().name();
+    }
+
+    /// \b Override: This function \b may be redefined in Derived class. Overrides \b must not throw.
+    /// \return True if two types are equal. By default compares types by raw_name().
+    inline bool equal(const Derived& rhs) const BOOST_NOEXCEPT {
+        const char* const left = derived().raw_name();
+        const char* const right = rhs.raw_name();
+        return left == right || !std::strcmp(left, right);
+    }
+
+    /// \b Override: This function \b may be redefined in Derived class. Overrides \b must not throw.
+    /// \return True if rhs is greater than this. By default compares types by raw_name().
+    inline bool before(const Derived& rhs) const BOOST_NOEXCEPT {
+        const char* const left = derived().raw_name();
+        const char* const right = rhs.raw_name();
+        return left != right && std::strcmp(left, right) < 0;
+    }
+
+    /// \b Override: This function \b may be redefined in Derived class. Overrides \b must not throw.
+    /// \return Hash code of a type. By default hashes types by raw_name().
+    /// \note <boost/functional/hash.hpp> has to be included if this function is used.
+    inline std::size_t hash_code() const BOOST_NOEXCEPT {
+        const char* const name_raw = derived().raw_name();
+        return pdalboost::hash_range(name_raw, name_raw + std::strlen(name_raw));
+    }
+
+#if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED)
+protected:
+    /// \b Override: This function \b must be redefined in Derived class. Overrides \b must not throw.
+    /// \return Pointer to unredable/raw type name.
+    inline const char* raw_name() const BOOST_NOEXCEPT;
+
+    /// \b Override: This function \b may be redefined in Derived class. Overrides \b must not throw.
+    /// \return Const reference to underlying low level type_info_t.
+    inline const type_info_t& type_info() const BOOST_NOEXCEPT;
+
+    /// This is a factory method that is used to create instances of Derived classes.
+    /// pdalboost::typeindex::type_id() will call this method, if Derived has same type as pdalboost::typeindex::type_index.
+    ///
+    /// \b Override: This function \b may be redefined and made public in Derived class. Overrides \b must not throw. 
+    /// Overrides \b must remove const, volatile && and & modifiers from T.
+    /// \tparam T Type for which type_index must be created.
+    /// \return type_index for type T.
+    template <class T>
+    static Derived type_id() BOOST_NOEXCEPT;
+
+    /// This is a factory method that is used to create instances of Derived classes.
+    /// pdalboost::typeindex::type_id_with_cvr() will call this method, if Derived has same type as pdalboost::typeindex::type_index.
+    ///
+    /// \b Override: This function \b may be redefined and made public in Derived class. Overrides \b must not throw. 
+    /// Overrides \b must \b not remove const, volatile && and & modifiers from T.
+    /// \tparam T Type for which type_index must be created.
+    /// \return type_index for type T.
+    template <class T>
+    static Derived type_id_with_cvr() BOOST_NOEXCEPT;
+
+    /// This is a factory method that is used to create instances of Derived classes.
+    /// pdalboost::typeindex::type_id_runtime(const T&) will call this method, if Derived has same type as pdalboost::typeindex::type_index.
+    ///
+    /// \b Override: This function \b may be redefined and made public in Derived class.
+    /// \param variable Variable which runtime type will be stored in type_index.
+    /// \return type_index with runtime type of variable.
+    template <class T>
+    static Derived type_id_runtime(const T& variable) BOOST_NOEXCEPT;
+
+#endif
+
+};
+
+/// @cond
+template <class Derived, class TypeInfo>
+inline bool operator == (const type_index_facade<Derived, TypeInfo>& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+    return static_cast<Derived const&>(lhs).equal(static_cast<Derived const&>(rhs));
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator < (const type_index_facade<Derived, TypeInfo>& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+    return static_cast<Derived const&>(lhs).before(static_cast<Derived const&>(rhs));;
+}
+
+
+
+template <class Derived, class TypeInfo>
+inline bool operator > (const type_index_facade<Derived, TypeInfo>& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+    return rhs < lhs;
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator <= (const type_index_facade<Derived, TypeInfo>& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+    return !(lhs > rhs);
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator >= (const type_index_facade<Derived, TypeInfo>& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+    return !(lhs < rhs);
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator != (const type_index_facade<Derived, TypeInfo>& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+    return !(lhs == rhs);
+}
+
+// ######################### COMPARISONS with Derived ############################ //
+template <class Derived, class TypeInfo>
+inline bool operator == (const TypeInfo& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+    return Derived(lhs) == rhs;
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator < (const TypeInfo& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+    return Derived(lhs) < rhs;
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator > (const TypeInfo& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+    return rhs < Derived(lhs);
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator <= (const TypeInfo& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+    return !(Derived(lhs) > rhs);
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator >= (const TypeInfo& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+    return !(Derived(lhs) < rhs);
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator != (const TypeInfo& lhs, const type_index_facade<Derived, TypeInfo>& rhs) BOOST_NOEXCEPT {
+    return !(Derived(lhs) == rhs);
+}
+
+
+template <class Derived, class TypeInfo>
+inline bool operator == (const type_index_facade<Derived, TypeInfo>& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT {
+    return lhs == Derived(rhs);
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator < (const type_index_facade<Derived, TypeInfo>& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT {
+    return lhs < Derived(rhs);
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator > (const type_index_facade<Derived, TypeInfo>& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT {
+    return Derived(rhs) < lhs;
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator <= (const type_index_facade<Derived, TypeInfo>& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT {
+    return !(lhs > Derived(rhs));
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator >= (const type_index_facade<Derived, TypeInfo>& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT {
+    return !(lhs < Derived(rhs));
+}
+
+template <class Derived, class TypeInfo>
+inline bool operator != (const type_index_facade<Derived, TypeInfo>& lhs, const TypeInfo& rhs) BOOST_NOEXCEPT {
+    return !(lhs == Derived(rhs));
+}
+
+// ######################### COMPARISONS with Derived END ############################ //
+
+/// @endcond
+
+#if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED)
+
+/// noexcept comparison operators for type_index_facade classes.
+bool operator ==, !=, <, ... (const type_index_facade& lhs, const type_index_facade& rhs) noexcept;
+
+/// noexcept comparison operators for type_index_facade and it's TypeInfo classes.
+bool operator ==, !=, <, ... (const type_index_facade& lhs, const TypeInfo& rhs) noexcept;
+
+/// noexcept comparison operators for type_index_facade's TypeInfo and type_index_facade classes.
+bool operator ==, !=, <, ... (const TypeInfo& lhs, const type_index_facade& rhs) noexcept;
+
+#endif
+
+#ifndef BOOST_NO_IOSTREAM
+#ifdef BOOST_NO_TEMPLATED_IOSTREAMS
+/// @cond
+/// Ostream operator that will output demangled name
+template <class Derived, class TypeInfo>
+inline std::ostream& operator<<(std::ostream& ostr, const type_index_facade<Derived, TypeInfo>& ind) {
+    ostr << static_cast<Derived const&>(ind).pretty_name();
+    return ostr;
+}
+/// @endcond
+#else
+/// Ostream operator that will output demangled name.
+template <class CharT, class TriatT, class Derived, class TypeInfo>
+inline std::basic_ostream<CharT, TriatT>& operator<<(
+    std::basic_ostream<CharT, TriatT>& ostr, 
+    const type_index_facade<Derived, TypeInfo>& ind) 
+{
+    ostr << static_cast<Derived const&>(ind).pretty_name();
+    return ostr;
+}
+#endif // BOOST_NO_TEMPLATED_IOSTREAMS
+#endif // BOOST_NO_IOSTREAM
+
+/// This free function is used by Boost's unordered containers.
+/// \note <boost/functional/hash.hpp> has to be included if this function is used.
+template <class Derived, class TypeInfo>
+inline std::size_t hash_value(const type_index_facade<Derived, TypeInfo>& lhs) BOOST_NOEXCEPT {
+    return static_cast<Derived const&>(lhs).hash_code();
+}
+
+}} // namespace pdalboost::typeindex
+
+#endif // BOOST_TYPE_INDEX_TYPE_INDEX_FACADE_HPP
+
diff --git a/vendor/pdalboost/boost/type_traits/add_const.hpp b/vendor/pdalboost/boost/type_traits/add_const.hpp
new file mode 100644
index 0000000..6627be7
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/add_const.hpp
@@ -0,0 +1,46 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+//  Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_ADD_CONST_HPP_INCLUDED
+#define BOOST_TT_ADD_CONST_HPP_INCLUDED
+
+#include <boost/type_traits/detail/config.hpp>
+
+namespace pdalboost {
+
+// * convert a type T to const type - add_const<T>
+// this is not required since the result is always
+// the same as "T const", but it does suppress warnings
+// from some compilers:
+
+#if defined(BOOST_MSVC)
+// This bogus warning will appear when add_const is applied to a
+// const volatile reference because we can't detect const volatile
+// references with MSVC6.
+#   pragma warning(push)
+#   pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored
+#endif 
+
+   template <class T> struct add_const
+   {
+      typedef T const type;
+   };
+
+#if defined(BOOST_MSVC)
+#   pragma warning(pop)
+#endif 
+
+   template <class T> struct add_const<T&>
+   {
+      typedef T& type;
+   };
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_ADD_CONST_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/add_cv.hpp b/vendor/pdalboost/boost/type_traits/add_cv.hpp
new file mode 100644
index 0000000..3485527
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/add_cv.hpp
@@ -0,0 +1,41 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+//  Hinnant & John Maddock 2000.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_ADD_CV_HPP_INCLUDED
+#define BOOST_TT_ADD_CV_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+namespace pdalboost {
+
+// * convert a type T to a const volatile type - add_cv<T>
+// this is not required since the result is always
+// the same as "T const volatile", but it does suppress warnings
+// from some compilers:
+
+#if defined(BOOST_MSVC)
+// This bogus warning will appear when add_volatile is applied to a
+// const volatile reference because we can't detect const volatile
+// references with MSVC6.
+#   pragma warning(push)
+#   pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored
+#endif 
+
+template <class T> struct add_cv{ typedef T const volatile type; };
+
+#if defined(BOOST_MSVC)
+#   pragma warning(pop)
+#endif 
+
+template <class T> struct add_cv<T&>{ typedef T& type; };
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_ADD_CV_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/add_lvalue_reference.hpp b/vendor/pdalboost/boost/type_traits/add_lvalue_reference.hpp
new file mode 100644
index 0000000..368d6e0
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/add_lvalue_reference.hpp
@@ -0,0 +1,27 @@
+//  Copyright 2010 John Maddock
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_TYPE_TRAITS_EXT_ADD_LVALUE_REFERENCE__HPP
+#define BOOST_TYPE_TRAITS_EXT_ADD_LVALUE_REFERENCE__HPP
+
+#include <boost/type_traits/add_reference.hpp>
+
+namespace pdalboost{
+
+template <class T> struct add_lvalue_reference
+{
+   typedef typename pdalboost::add_reference<T>::type type; 
+};
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template <class T> struct add_lvalue_reference<T&&>
+{
+   typedef T& type;
+};
+#endif
+
+}
+
+#endif  // BOOST_TYPE_TRAITS_EXT_ADD_LVALUE_REFERENCE__HPP
diff --git a/vendor/pdalboost/boost/type_traits/add_pointer.hpp b/vendor/pdalboost/boost/type_traits/add_pointer.hpp
new file mode 100644
index 0000000..6190192
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/add_pointer.hpp
@@ -0,0 +1,61 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_ADD_POINTER_HPP_INCLUDED
+#define BOOST_TT_ADD_POINTER_HPP_INCLUDED
+
+#include <boost/type_traits/remove_reference.hpp>
+
+namespace pdalboost {
+
+#if defined(__BORLANDC__) && (__BORLANDC__ < 0x5A0)
+//
+// For some reason this implementation stops Borlands compiler
+// from dropping cv-qualifiers, it still fails with references
+// to arrays for some reason though (shrug...) (JM 20021104)
+//
+template <typename T>
+struct add_pointer
+{
+    typedef T* type;
+};
+template <typename T>
+struct add_pointer<T&>
+{
+    typedef T* type;
+};
+template <typename T>
+struct add_pointer<T&const>
+{
+    typedef T* type;
+};
+template <typename T>
+struct add_pointer<T&volatile>
+{
+    typedef T* type;
+};
+template <typename T>
+struct add_pointer<T&const volatile>
+{
+    typedef T* type;
+};
+
+#else
+
+template <typename T>
+struct add_pointer
+{
+    typedef typename remove_reference<T>::type no_ref_type;
+    typedef no_ref_type* type;
+};
+
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_ADD_POINTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/add_reference.hpp b/vendor/pdalboost/boost/type_traits/add_reference.hpp
new file mode 100644
index 0000000..46f9173
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/add_reference.hpp
@@ -0,0 +1,59 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_ADD_REFERENCE_HPP_INCLUDED
+#define BOOST_TT_ADD_REFERENCE_HPP_INCLUDED
+
+#include <boost/detail/workaround.hpp>
+#include <boost/config.hpp>
+
+namespace pdalboost {
+
+namespace detail {
+
+//
+// We can't filter out rvalue_references at the same level as
+// references or we get ambiguities from msvc:
+//
+
+template <typename T>
+struct add_reference_impl
+{
+    typedef T& type;
+};
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template <typename T>
+struct add_reference_impl<T&&>
+{
+    typedef T&& type;
+};
+#endif
+
+} // namespace detail
+
+template <class T> struct add_reference
+{
+   typedef typename pdalboost::detail::add_reference_impl<T>::type type;
+};
+template <class T> struct add_reference<T&>
+{
+   typedef T& type;
+};
+
+// these full specialisations are always required:
+template <> struct add_reference<void> { typedef void type; };
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template <> struct add_reference<const void> { typedef void type; };
+template <> struct add_reference<const volatile void> { typedef void type; };
+template <> struct add_reference<volatile void> { typedef void type; };
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/add_rvalue_reference.hpp b/vendor/pdalboost/boost/type_traits/add_rvalue_reference.hpp
new file mode 100644
index 0000000..9ffba72
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/add_rvalue_reference.hpp
@@ -0,0 +1,64 @@
+//  add_rvalue_reference.hpp  ---------------------------------------------------------//
+
+//  Copyright 2010 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP
+#define BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP
+
+#include <boost/config.hpp>
+
+//----------------------------------------------------------------------------//
+
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/is_reference.hpp>
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//                           C++03 implementation of                          //
+//             20.9.7.2 Reference modifications [meta.trans.ref]              //
+//                          Written by Vicente J. Botet Escriba               //
+//                                                                            //
+// If T names an object or function type then the member typedef type
+// shall name T&&; otherwise, type shall name T. [ Note: This rule reflects
+// the semantics of reference collapsing. For example, when a type T names
+// a type T1&, the type add_rvalue_reference<T>::type is not an rvalue
+// reference. -end note ]
+//----------------------------------------------------------------------------//
+
+namespace pdalboost {
+
+namespace type_traits_detail {
+
+    template <typename T, bool b>
+    struct add_rvalue_reference_helper
+    { typedef T   type; };
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+    template <typename T>
+    struct add_rvalue_reference_helper<T, true>
+    {
+        typedef T&&   type;
+    };
+#endif
+
+    template <typename T>
+    struct add_rvalue_reference_imp
+    {
+       typedef typename pdalboost::type_traits_detail::add_rvalue_reference_helper
+                  <T, (is_void<T>::value == false && is_reference<T>::value == false) >::type type;
+    };
+
+}
+
+template <class T> struct add_rvalue_reference
+{
+   typedef typename pdalboost::type_traits_detail::add_rvalue_reference_imp<T>::type type;
+};
+
+}  // namespace pdalboost
+
+#endif  // BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP
+
diff --git a/vendor/pdalboost/boost/type_traits/add_volatile.hpp b/vendor/pdalboost/boost/type_traits/add_volatile.hpp
new file mode 100644
index 0000000..4680af9
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/add_volatile.hpp
@@ -0,0 +1,40 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+//  Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_ADD_VOLATILE_HPP_INCLUDED
+#define BOOST_TT_ADD_VOLATILE_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+namespace pdalboost {
+
+// * convert a type T to volatile type - add_volatile<T>
+// this is not required since the result is always
+// the same as "T volatile", but it does suppress warnings
+// from some compilers:
+
+#if defined(BOOST_MSVC)
+// This bogus warning will appear when add_volatile is applied to a
+// const volatile reference because we can't detect const volatile
+// references with MSVC6.
+#   pragma warning(push)
+#   pragma warning(disable:4181) // warning C4181: qualifier applied to reference type ignored
+#endif 
+
+template <class T> struct add_volatile{ typedef T volatile type; };
+
+#if defined(BOOST_MSVC)
+#   pragma warning(pop)
+#endif 
+
+template <class T> struct add_volatile<T&>{ typedef T& type; };
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_ADD_VOLATILE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/aligned_storage.hpp b/vendor/pdalboost/boost/type_traits/aligned_storage.hpp
new file mode 100644
index 0000000..d188629
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/aligned_storage.hpp
@@ -0,0 +1,138 @@
+//-----------------------------------------------------------------------------
+// boost aligned_storage.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002-2003
+// Eric Friedman, Itay Maman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TT_ALIGNED_STORAGE_HPP
+#define BOOST_TT_ALIGNED_STORAGE_HPP
+
+#include <cstddef> // for std::size_t
+
+#include "boost/config.hpp"
+#include "boost/detail/workaround.hpp"
+#include "boost/type_traits/alignment_of.hpp"
+#include "boost/type_traits/type_with_alignment.hpp"
+#include "boost/type_traits/is_pod.hpp"
+#include "boost/type_traits/conditional.hpp"
+
+namespace pdalboost {
+
+namespace detail { namespace aligned_storage {
+
+BOOST_STATIC_CONSTANT(
+      std::size_t
+    , alignment_of_max_align = ::pdalboost::alignment_of<pdalboost::detail::max_align>::value
+    );
+
+//
+// To be TR1 conforming this must be a POD type:
+//
+template <
+      std::size_t size_
+    , std::size_t alignment_
+>
+struct aligned_storage_imp
+{
+    union data_t
+    {
+        char buf[size_];
+
+        typename ::pdalboost::type_with_alignment<alignment_>::type align_;
+    } data_;
+    void* address() const { return const_cast<aligned_storage_imp*>(this); }
+};
+template <std::size_t size>
+struct aligned_storage_imp<size, std::size_t(-1)>
+{
+   union data_t
+   {
+      char buf[size];
+      ::pdalboost::detail::max_align align_;
+   } data_;
+   void* address() const { return const_cast<aligned_storage_imp*>(this); }
+};
+
+template< std::size_t alignment_ >
+struct aligned_storage_imp<0u,alignment_>
+{
+    /* intentionally empty */
+    void* address() const { return 0; }
+};
+
+}} // namespace detail::aligned_storage
+
+template <
+      std::size_t size_
+    , std::size_t alignment_ = std::size_t(-1)
+>
+class aligned_storage : 
+#ifndef __BORLANDC__
+   private 
+#else
+   public
+#endif
+   ::pdalboost::detail::aligned_storage::aligned_storage_imp<size_, alignment_> 
+{
+ 
+public: // constants
+
+    typedef ::pdalboost::detail::aligned_storage::aligned_storage_imp<size_, alignment_> type;
+
+    BOOST_STATIC_CONSTANT(
+          std::size_t
+        , size = size_
+        );
+    BOOST_STATIC_CONSTANT(
+          std::size_t
+        , alignment = (
+              alignment_ == std::size_t(-1)
+            ? ::pdalboost::detail::aligned_storage::alignment_of_max_align
+            : alignment_
+            )
+        );
+
+private: // noncopyable
+
+    aligned_storage(const aligned_storage&);
+    aligned_storage& operator=(const aligned_storage&);
+
+public: // structors
+
+    aligned_storage()
+    {
+    }
+
+    ~aligned_storage()
+    {
+    }
+
+public: // accessors
+
+    void* address()
+    {
+        return static_cast<type*>(this)->address();
+    }
+
+    const void* address() const
+    {
+        return static_cast<const type*>(this)->address();
+    }
+};
+
+//
+// Make sure that is_pod recognises aligned_storage<>::type
+// as a POD (Note that aligned_storage<> itself is not a POD):
+//
+template <std::size_t size_, std::size_t alignment_>
+struct is_pod< ::pdalboost::detail::aligned_storage::aligned_storage_imp<size_, alignment_> > : public true_type{};
+
+} // namespace pdalboost
+
+#endif // BOOST_ALIGNED_STORAGE_HPP
diff --git a/vendor/pdalboost/boost/type_traits/alignment_of.hpp b/vendor/pdalboost/boost/type_traits/alignment_of.hpp
new file mode 100644
index 0000000..3668a57
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/alignment_of.hpp
@@ -0,0 +1,119 @@
+
+//  (C) Copyright John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED
+#define BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <cstddef>
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+#ifdef BOOST_MSVC
+#   pragma warning(push)
+#   pragma warning(disable: 4121 4512) // alignment is sensitive to packing
+#endif
+#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600)
+#pragma option push -Vx- -Ve-
+#endif
+
+namespace pdalboost {
+
+template <typename T> struct alignment_of;
+
+// get the alignment of some arbitrary type:
+namespace detail {
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4324) // structure was padded due to __declspec(align())
+#endif
+template <typename T>
+struct alignment_of_hack
+{
+    char c;
+    T t;
+    alignment_of_hack();
+};
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+template <unsigned A, unsigned S>
+struct alignment_logic
+{
+    BOOST_STATIC_CONSTANT(std::size_t, value = A < S ? A : S);
+};
+
+
+template< typename T >
+struct alignment_of_impl
+{
+#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1400)
+    //
+    // With MSVC both the native __alignof operator
+    // and our own logic gets things wrong from time to time :-(
+    // Using a combination of the two seems to make the most of a bad job:
+    //
+    BOOST_STATIC_CONSTANT(std::size_t, value =
+        (::pdalboost::detail::alignment_logic<
+            sizeof(::pdalboost::detail::alignment_of_hack<T>) - sizeof(T),
+            __alignof(T)
+        >::value));
+#elif !defined(BOOST_ALIGNMENT_OF)
+    BOOST_STATIC_CONSTANT(std::size_t, value =
+        (::pdalboost::detail::alignment_logic<
+            sizeof(::pdalboost::detail::alignment_of_hack<T>) - sizeof(T),
+            sizeof(T)
+        >::value));
+#else
+   //
+   // We put this here, rather than in the definition of
+   // alignment_of below, because MSVC's __alignof doesn't
+   // always work in that context for some unexplained reason.
+   // (See type_with_alignment tests for test cases).
+   //
+   BOOST_STATIC_CONSTANT(std::size_t, value = BOOST_ALIGNMENT_OF(T));
+#endif
+};
+
+} // namespace detail
+
+template <class T> struct alignment_of : public integral_constant<std::size_t, ::pdalboost::detail::alignment_of_impl<T>::value>{};
+
+// references have to be treated specially, assume
+// that a reference is just a special pointer:
+template <typename T> struct alignment_of<T&> : public alignment_of<T*>{};
+
+#ifdef __BORLANDC__
+// long double gives an incorrect value of 10 (!)
+// unless we do this...
+struct long_double_wrapper{ long double ld; };
+template<> struct alignment_of<long double> : public alignment_of<long_double_wrapper>{};
+#endif
+
+// void has to be treated specially:
+template<> struct alignment_of<void> : integral_constant<std::size_t, 0>{};
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template<> struct alignment_of<void const> : integral_constant<std::size_t, 0>{};
+template<> struct alignment_of<void const volatile> : integral_constant<std::size_t, 0>{};
+template<> struct alignment_of<void volatile> : integral_constant<std::size_t, 0>{};
+#endif
+
+} // namespace pdalboost
+
+#if defined(__BORLANDC__) && (__BORLANDC__ < 0x600)
+#pragma option pop
+#endif
+#ifdef BOOST_MSVC
+#   pragma warning(pop)
+#endif
+
+#endif // BOOST_TT_ALIGNMENT_OF_HPP_INCLUDED
+
diff --git a/vendor/pdalboost/boost/type_traits/common_type.hpp b/vendor/pdalboost/boost/type_traits/common_type.hpp
new file mode 100644
index 0000000..aac5214
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/common_type.hpp
@@ -0,0 +1,144 @@
+#ifndef BOOST_TYPE_TRAITS_COMMON_TYPE_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_COMMON_TYPE_HPP_INCLUDED
+
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/config.hpp>
+#include <boost/type_traits/decay.hpp>
+#include <boost/type_traits/declval.hpp>
+
+#if defined(BOOST_NO_CXX11_DECLTYPE)
+#include <boost/type_traits/detail/common_type_impl.hpp>
+#endif
+
+#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+#include <boost/type_traits/detail/mp_defer.hpp>
+#endif
+
+namespace pdalboost
+{
+
+// variadic common_type
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+template<class... T> struct common_type
+{
+};
+
+#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
+
+template<class... T> using common_type_t = typename common_type<T...>::type;
+
+namespace type_traits_detail
+{
+
+template<class T1, class T2, class... T> using common_type_fold = common_type_t<common_type_t<T1, T2>, T...>;
+
+} // namespace type_traits_detail
+
+template<class T1, class T2, class... T>
+struct common_type<T1, T2, T...>: type_traits_detail::mp_defer<type_traits_detail::common_type_fold, T1, T2, T...>
+{
+};
+
+#else
+
+template<class T1, class T2, class... T>
+struct common_type<T1, T2, T...>: common_type<typename common_type<T1, T2>::type, T...>
+{
+};
+
+#endif // !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
+
+#else
+
+template<
+    class T1 = void, class T2 = void, class T3 = void,
+    class T4 = void, class T5 = void, class T6 = void,
+    class T7 = void, class T8 = void, class T9 = void
+>
+struct common_type: common_type<typename common_type<T1, T2>::type, T3, T4, T5, T6, T7, T8, T9>
+{
+};
+
+#endif // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+// one argument
+
+template<class T> struct common_type<T>: pdalboost::decay<T>
+{
+};
+
+// two arguments
+
+namespace type_traits_detail
+{
+
+// binary common_type
+
+#if !defined(BOOST_NO_CXX11_DECLTYPE)
+
+#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+    
+#if !defined(BOOST_MSVC) || BOOST_MSVC > 1800
+
+// internal compiler error on msvc-12.0
+
+template<class T1, class T2> using builtin_common_type = typename pdalboost::decay<decltype( pdalboost::declval<bool>()? pdalboost::declval<T1>(): pdalboost::declval<T2>() )>::type;
+
+template<class T1, class T2> struct common_type_impl: mp_defer<builtin_common_type, T1, T2>
+{
+};
+
+#else
+
+template<class T1, class T2> using builtin_common_type = decltype( pdalboost::declval<bool>()? pdalboost::declval<T1>(): pdalboost::declval<T2>() );
+
+template<class T1, class T2> struct common_type_impl_2: mp_defer<builtin_common_type, T1, T2>
+{
+};
+
+template<class T1, class T2> using decay_common_type = typename pdalboost::decay<typename common_type_impl_2<T1, T2>::type>::type;
+
+template<class T1, class T2> struct common_type_impl: mp_defer<decay_common_type, T1, T2>
+{
+};
+
+#endif // !defined(BOOST_MSVC) || BOOST_MSVC > 1800
+
+#else
+
+template<class T1, class T2> struct common_type_impl: pdalboost::decay<decltype( pdalboost::declval<bool>()? pdalboost::declval<T1>(): pdalboost::declval<T2>() )>
+{
+};
+
+#endif // #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
+
+#endif // #if !defined(BOOST_NO_CXX11_DECLTYPE)
+
+// decay helper
+
+template<class T1, class T2, class T1d = typename pdalboost::decay<T1>::type, class T2d = typename pdalboost::decay<T2>::type> struct common_type_decay_helper: pdalboost::common_type<T1d, T2d>
+{
+};
+
+template<class T1, class T2> struct common_type_decay_helper<T1, T2, T1, T2>: common_type_impl<T1, T2>
+{
+};
+
+} // type_traits_detail
+
+template<class T1, class T2> struct common_type<T1, T2>: type_traits_detail::common_type_decay_helper<T1, T2>
+{
+};
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_COMMON_TYPE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/composite_traits.hpp b/vendor/pdalboost/boost/type_traits/composite_traits.hpp
new file mode 100644
index 0000000..985a4c5
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/composite_traits.hpp
@@ -0,0 +1,29 @@
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+//  Hinnant & John Maddock 2000.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+//
+//  defines traits classes for composite types:
+//  is_array, is_pointer, is_reference, is_member_pointer, is_enum, is_union.
+//
+
+#ifndef BOOST_TT_COMPOSITE_TRAITS_HPP_INCLUDED
+#define BOOST_TT_COMPOSITE_TRAITS_HPP_INCLUDED
+
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_union.hpp>
+
+#endif // BOOST_TT_COMPOSITE_TRAITS_HPP_INCLUDED
+
+
+
+
+
diff --git a/vendor/pdalboost/boost/type_traits/conditional.hpp b/vendor/pdalboost/boost/type_traits/conditional.hpp
new file mode 100644
index 0000000..df461a3
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/conditional.hpp
@@ -0,0 +1,20 @@
+//  (C) Copyright John Maddock 2010.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_CONDITIONAL_HPP_INCLUDED
+#define BOOST_TT_CONDITIONAL_HPP_INCLUDED
+
+namespace pdalboost {
+
+template <bool b, class T, class U> struct conditional { typedef T type; };
+template <class T, class U> struct conditional<false, T, U> { typedef U type; };
+
+} // namespace pdalboost
+
+
+#endif // BOOST_TT_CONDITIONAL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/conversion_traits.hpp b/vendor/pdalboost/boost/type_traits/conversion_traits.hpp
new file mode 100644
index 0000000..c8e5139
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/conversion_traits.hpp
@@ -0,0 +1,17 @@
+
+// Copyright 2000 John Maddock (john at johnmaddock.co.uk)
+// Copyright 2000 Jeremy Siek (jsiek at lsc.nd.edu)
+// Copyright 1999, 2000 Jaakko Jarvi (jaakko.jarvi at cs.utu.fi)
+//
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_CONVERSION_TRAITS_HPP_INCLUDED
+#define BOOST_TT_CONVERSION_TRAITS_HPP_INCLUDED
+
+#include <boost/type_traits/is_convertible.hpp>
+
+#endif // BOOST_TT_CONVERSION_TRAITS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/copy_cv.hpp b/vendor/pdalboost/boost/type_traits/copy_cv.hpp
new file mode 100644
index 0000000..24ca4c8
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/copy_cv.hpp
@@ -0,0 +1,34 @@
+#ifndef BOOST_TYPE_TRAITS_COPY_CV_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_COPY_CV_HPP_INCLUDED
+
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_volatile.hpp>
+#include <boost/type_traits/conditional.hpp>
+
+namespace pdalboost
+{
+
+template<class T, class U> struct copy_cv
+{
+private:
+
+    typedef typename pdalboost::conditional<pdalboost::is_const<U>::value, typename pdalboost::add_const<T>::type, T>::type CT;
+
+public:
+
+    typedef typename pdalboost::conditional<pdalboost::is_volatile<U>::value, typename pdalboost::add_volatile<CT>::type, CT>::type type;
+};
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_COPY_CV_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/cv_traits.hpp b/vendor/pdalboost/boost/type_traits/cv_traits.hpp
new file mode 100644
index 0000000..5bd6c4f
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/cv_traits.hpp
@@ -0,0 +1,24 @@
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+//  Hinnant & John Maddock 2000.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+//
+//  defines traits classes for cv-qualified types:
+//  is_const, is_volatile, remove_const, remove_volatile, remove_cv.
+
+#ifndef BOOST_TT_CV_TRAITS_HPP_INCLUDED
+#define BOOST_TT_CV_TRAITS_HPP_INCLUDED
+
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_volatile.hpp>
+#include <boost/type_traits/add_cv.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#include <boost/type_traits/remove_volatile.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#endif // BOOST_TT_CV_TRAITS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/decay.hpp b/vendor/pdalboost/boost/type_traits/decay.hpp
new file mode 100644
index 0000000..13840f0
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/decay.hpp
@@ -0,0 +1,43 @@
+//  (C) Copyright John Maddock & Thorsten Ottosen 2005.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_DECAY_HPP_INCLUDED
+#define BOOST_TT_DECAY_HPP_INCLUDED
+
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/remove_bounds.hpp>
+#include <boost/type_traits/add_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace pdalboost 
+{
+
+   namespace detail
+   {
+
+      template <class T, bool Array, bool Function> struct decay_imp { typedef typename remove_cv<T>::type type; };
+      template <class T> struct decay_imp<T, true, false> { typedef typename remove_bounds<T>::type* type; };
+      template <class T> struct decay_imp<T, false, true> { typedef T* type; };
+
+   }
+
+    template< class T >
+    struct decay
+    {
+    private:
+        typedef typename remove_reference<T>::type Ty;
+    public:
+       typedef typename pdalboost::detail::decay_imp<Ty, pdalboost::is_array<Ty>::value, pdalboost::is_function<Ty>::value>::type type;
+    };
+    
+} // namespace pdalboost
+
+
+#endif // BOOST_TT_DECAY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/declval.hpp b/vendor/pdalboost/boost/type_traits/declval.hpp
new file mode 100644
index 0000000..b07b126
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/declval.hpp
@@ -0,0 +1,44 @@
+//  declval.hpp  -------------------------------------------------------------//
+
+//  Copyright 2010 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_TYPE_TRAITS_DECLVAL_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_DECLVAL_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+//----------------------------------------------------------------------------//
+
+#include <boost/type_traits/add_rvalue_reference.hpp>
+
+//----------------------------------------------------------------------------//
+//                                                                            //
+//                           C++03 implementation of                          //
+//                   20.2.4 Function template declval [declval]               //
+//                          Written by Vicente J. Botet Escriba               //
+//                                                                            //
+// 1 The library provides the function template declval to simplify the
+// definition of expressions which occur as unevaluated operands.
+// 2 Remarks: If this function is used, the program is ill-formed.
+// 3 Remarks: The template parameter T of declval may be an incomplete type.
+// [ Example:
+//
+// template <class To, class From>
+// decltype(static_cast<To>(declval<From>())) convert(From&&);
+//
+// declares a function template convert which only participates in overloading
+// if the type From can be explicitly converted to type To. For another example
+// see class template common_type (20.9.7.6). -end example ]
+//----------------------------------------------------------------------------//
+
+namespace pdalboost {
+
+    template <typename T>
+    typename add_rvalue_reference<T>::type declval() BOOST_NOEXCEPT; // as unevaluated operand
+
+}  // namespace pdalboost
+
+#endif  // BOOST_TYPE_TRAITS_DECLVAL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/detail/bool_trait_def.hpp b/vendor/pdalboost/boost/type_traits/detail/bool_trait_def.hpp
new file mode 100644
index 0000000..273e94e
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/detail/bool_trait_def.hpp
@@ -0,0 +1,179 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// $Source$
+// $Date$
+// $Revision$
+
+//
+// This header is deprecated and no longer used by type_traits:
+//
+#if defined(__GNUC__) || defined(_MSC_VER)
+# pragma message("NOTE: Use of this header (bool_trait_def.hpp) is deprecated")
+#endif
+
+#include <boost/type_traits/detail/template_arity_spec.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/config.hpp>
+
+//
+// Unfortunately some libraries have started using this header without
+// cleaning up afterwards: so we'd better undef the macros just in case 
+// they've been defined already....
+//
+#ifdef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
+#undef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
+#undef BOOST_TT_AUX_BOOL_C_BASE
+#undef BOOST_TT_AUX_BOOL_TRAIT_DEF1
+#undef BOOST_TT_AUX_BOOL_TRAIT_DEF2
+#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC1
+#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC2
+#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1
+#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2
+#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1
+#undef BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1
+#endif
+
+#ifndef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
+#   define BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) /**/
+#endif
+
+#ifndef BOOST_TT_AUX_BOOL_C_BASE
+#   define BOOST_TT_AUX_BOOL_C_BASE(C) : public ::pdalboost::integral_constant<bool,C>
+#endif 
+
+
+#define BOOST_TT_AUX_BOOL_TRAIT_DEF1(trait,T,C) \
+template< typename T > struct trait \
+    BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+public:\
+    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+}; \
+\
+BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1,trait) \
+/**/
+
+
+#define BOOST_TT_AUX_BOOL_TRAIT_DEF2(trait,T1,T2,C) \
+template< typename T1, typename T2 > struct trait \
+    BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+public:\
+    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+}; \
+\
+BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(2,trait) \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_DEF3(trait,T1,T2,T3,C) \
+template< typename T1, typename T2, typename T3 > struct trait \
+    BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+public:\
+    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+}; \
+\
+BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(3,trait) \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,C) \
+template<> struct trait< sp > \
+    BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+public:\
+    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_SPEC2(trait,sp1,sp2,C) \
+template<> struct trait< sp1,sp2 > \
+    BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+public:\
+    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1(trait,sp,C) \
+template<> struct trait##_impl< sp > \
+{ \
+public:\
+    BOOST_STATIC_CONSTANT(bool, value = (C)); \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2(trait,sp1,sp2,C) \
+template<> struct trait##_impl< sp1,sp2 > \
+{ \
+public:\
+    BOOST_STATIC_CONSTANT(bool, value = (C)); \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(param,trait,sp,C) \
+template< param > struct trait< sp > \
+    BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+public:\
+    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2(param1,param2,trait,sp,C) \
+template< param1, param2 > struct trait< sp > \
+    BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+public:\
+    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1(param,trait,sp1,sp2,C) \
+template< param > struct trait< sp1,sp2 > \
+    BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+public:\
+    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2(param1,param2,trait,sp1,sp2,C) \
+template< param1, param2 > struct trait< sp1,sp2 > \
+    BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+public:\
+    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+}; \
+/**/
+
+#define BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1(param,trait,sp1,sp2,C) \
+template< param > struct trait##_impl< sp1,sp2 > \
+{ \
+public:\
+    BOOST_STATIC_CONSTANT(bool, value = (C)); \
+}; \
+/**/
+
+#ifndef BOOST_NO_CV_SPECIALIZATIONS
+#   define BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(trait,sp,value) \
+    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,value) \
+    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp const,value) \
+    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp volatile,value) \
+    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp const volatile,value) \
+    /**/
+#else
+#   define BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(trait,sp,value) \
+    BOOST_TT_AUX_BOOL_TRAIT_SPEC1(trait,sp,value) \
+    /**/
+#endif
diff --git a/vendor/pdalboost/boost/type_traits/detail/bool_trait_undef.hpp b/vendor/pdalboost/boost/type_traits/detail/bool_trait_undef.hpp
new file mode 100644
index 0000000..4ac61ef
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/detail/bool_trait_undef.hpp
@@ -0,0 +1,28 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// $Source$
+// $Date$
+// $Revision$
+
+#undef BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL
+#undef BOOST_TT_AUX_BOOL_C_BASE
+#undef BOOST_TT_AUX_BOOL_TRAIT_DEF1
+#undef BOOST_TT_AUX_BOOL_TRAIT_DEF2
+#undef BOOST_TT_AUX_BOOL_TRAIT_DEF3
+#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC1
+#undef BOOST_TT_AUX_BOOL_TRAIT_SPEC2
+#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC1
+#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_SPEC2
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_2
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_1
+#undef BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC2_2
+#undef BOOST_TT_AUX_BOOL_TRAIT_IMPL_PARTIAL_SPEC2_1
+#undef BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1
diff --git a/vendor/pdalboost/boost/type_traits/detail/common_arithmetic_type.hpp b/vendor/pdalboost/boost/type_traits/detail/common_arithmetic_type.hpp
new file mode 100644
index 0000000..8372dd7
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/detail/common_arithmetic_type.hpp
@@ -0,0 +1,212 @@
+#ifndef BOOST_TYPE_TRAITS_DETAIL_COMMON_ARITHMETIC_TYPE_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_DETAIL_COMMON_ARITHMETIC_TYPE_HPP_INCLUDED
+
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/config.hpp>
+
+namespace pdalboost
+{
+
+namespace type_traits_detail
+{
+
+template<int I> struct arithmetic_type;
+
+// Types bool, char, char16_t, char32_t, wchar_t,
+// and the signed and unsigned integer types are
+// collectively called integral types
+
+template<> struct arithmetic_type<1>
+{
+    typedef bool type;
+    typedef char (&result_type) [1];
+};
+
+template<> struct arithmetic_type<2>
+{
+    typedef char type;
+    typedef char (&result_type) [2];
+};
+
+template<> struct arithmetic_type<3>
+{
+    typedef wchar_t type;
+    typedef char (&result_type) [3];
+};
+
+// There are five standard signed integer types:
+// “signed char”, “short int”, “int”, “long int”, and “long long int”.
+
+template<> struct arithmetic_type<4>
+{
+    typedef signed char type;
+    typedef char (&result_type) [4];
+};
+
+template<> struct arithmetic_type<5>
+{
+    typedef short type;
+    typedef char (&result_type) [5];
+};
+
+template<> struct arithmetic_type<6>
+{
+    typedef int type;
+    typedef char (&result_type) [6];
+};
+
+template<> struct arithmetic_type<7>
+{
+    typedef long type;
+    typedef char (&result_type) [7];
+};
+
+template<> struct arithmetic_type<8>
+{
+    typedef pdalboost::long_long_type type;
+    typedef char (&result_type) [8];
+};
+
+// For each of the standard signed integer types, there exists a corresponding
+// (but different) standard unsigned integer type: “unsigned char”, “unsigned short int”,
+// “unsigned int”, “unsigned long int”, and “unsigned long long int”
+
+template<> struct arithmetic_type<9>
+{
+    typedef unsigned char type;
+    typedef char (&result_type) [9];
+};
+
+template<> struct arithmetic_type<10>
+{
+    typedef unsigned short type;
+    typedef char (&result_type) [10];
+};
+
+template<> struct arithmetic_type<11>
+{
+    typedef unsigned int type;
+    typedef char (&result_type) [11];
+};
+
+template<> struct arithmetic_type<12>
+{
+    typedef unsigned long type;
+    typedef char (&result_type) [12];
+};
+
+template<> struct arithmetic_type<13>
+{
+    typedef pdalboost::ulong_long_type type;
+    typedef char (&result_type) [13];
+};
+
+// There are three floating point types: float, double, and long double.
+
+template<> struct arithmetic_type<14>
+{
+    typedef float type;
+    typedef char (&result_type) [14];
+};
+
+template<> struct arithmetic_type<15>
+{
+    typedef double type;
+    typedef char (&result_type) [15];
+};
+
+template<> struct arithmetic_type<16>
+{
+    typedef long double type;
+    typedef char (&result_type) [16];
+};
+
+#if !defined( BOOST_NO_CXX11_CHAR16_T )
+
+template<> struct arithmetic_type<17>
+{
+    typedef char16_t type;
+    typedef char (&result_type) [17];
+};
+
+#endif
+
+#if !defined( BOOST_NO_CXX11_CHAR32_T )
+
+template<> struct arithmetic_type<18>
+{
+    typedef char32_t type;
+    typedef char (&result_type) [18];
+};
+
+#endif
+
+#if defined( BOOST_HAS_INT128 )
+
+template<> struct arithmetic_type<19>
+{
+    typedef pdalboost::int128_type type;
+    typedef char (&result_type) [19];
+};
+
+template<> struct arithmetic_type<20>
+{
+    typedef pdalboost::uint128_type type;
+    typedef char (&result_type) [20];
+};
+
+#endif
+
+template<class T, class U> class common_arithmetic_type
+{
+private:
+
+    static arithmetic_type<1>::result_type select( arithmetic_type<1>::type );
+    static arithmetic_type<2>::result_type select( arithmetic_type<2>::type );
+    static arithmetic_type<3>::result_type select( arithmetic_type<3>::type );
+    static arithmetic_type<4>::result_type select( arithmetic_type<4>::type );
+    static arithmetic_type<5>::result_type select( arithmetic_type<5>::type );
+    static arithmetic_type<6>::result_type select( arithmetic_type<6>::type );
+    static arithmetic_type<7>::result_type select( arithmetic_type<7>::type );
+    static arithmetic_type<8>::result_type select( arithmetic_type<8>::type );
+    static arithmetic_type<9>::result_type select( arithmetic_type<9>::type );
+    static arithmetic_type<10>::result_type select( arithmetic_type<10>::type );
+    static arithmetic_type<11>::result_type select( arithmetic_type<11>::type );
+    static arithmetic_type<12>::result_type select( arithmetic_type<12>::type );
+    static arithmetic_type<13>::result_type select( arithmetic_type<13>::type );
+    static arithmetic_type<14>::result_type select( arithmetic_type<14>::type );
+    static arithmetic_type<15>::result_type select( arithmetic_type<15>::type );
+    static arithmetic_type<16>::result_type select( arithmetic_type<16>::type );
+
+#if !defined( BOOST_NO_CXX11_CHAR16_T )
+    static arithmetic_type<17>::result_type select( arithmetic_type<17>::type );
+#endif
+
+#if !defined( BOOST_NO_CXX11_CHAR32_T )
+    static arithmetic_type<18>::result_type select( arithmetic_type<18>::type );
+#endif
+
+#if defined( BOOST_HAS_INT128 )
+    static arithmetic_type<19>::result_type select( arithmetic_type<19>::type );
+    static arithmetic_type<20>::result_type select( arithmetic_type<20>::type );
+#endif
+
+    static bool cond();
+
+public:
+
+    typedef typename arithmetic_type< sizeof(select( cond()? T(): U() )) >::type type;
+};
+
+} // namespace type_traits_detail
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_COMMON_ARITHMETIC_TYPE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/detail/common_type_impl.hpp b/vendor/pdalboost/boost/type_traits/detail/common_type_impl.hpp
new file mode 100644
index 0000000..2a87d82
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/detail/common_type_impl.hpp
@@ -0,0 +1,107 @@
+#ifndef BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_IMPL_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_IMPL_HPP_INCLUDED
+
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/type_traits/detail/common_arithmetic_type.hpp>
+#include <boost/type_traits/detail/composite_pointer_type.hpp>
+#include <boost/type_traits/detail/composite_member_pointer_type.hpp>
+#include <boost/type_traits/type_identity.hpp>
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_union.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/type_traits/conditional.hpp>
+
+namespace pdalboost
+{
+
+namespace type_traits_detail
+{
+
+// the arguments to common_type_impl have already been passed through decay<>
+
+template<class T, class U> struct common_type_impl;
+
+// same type
+
+template<class T> struct common_type_impl<T, T>
+{
+    typedef T type;
+};
+
+// one of the operands is a class type, try conversions in both directions
+
+template<class T, class U> struct ct_class
+{
+    BOOST_STATIC_CONSTANT( bool, ct = pdalboost::is_class<T>::value || pdalboost::is_union<T>::value );
+    BOOST_STATIC_CONSTANT( bool, cu = pdalboost::is_class<U>::value || pdalboost::is_union<U>::value );
+
+    BOOST_STATIC_CONSTANT( bool, value = ct || cu );
+};
+
+template<class T, class U> struct common_type_impl3;
+
+template<class T, class U> struct common_type_class: public pdalboost::conditional<
+
+    pdalboost::is_convertible<T, U>::value && !pdalboost::is_convertible<U, T>::value,
+    pdalboost::type_identity<U>,
+
+    typename pdalboost::conditional<
+
+        pdalboost::is_convertible<U, T>::value && !pdalboost::is_convertible<T, U>::value,
+        pdalboost::type_identity<T>,
+
+        common_type_impl3<T, U>
+    >::type
+>::type
+{
+};
+
+template<class T, class U> struct common_type_impl: public pdalboost::conditional<
+    ct_class<T, U>::value,
+    common_type_class<T, U>,
+    common_type_impl3<T, U> >::type
+{
+};
+
+// pointers
+
+template<class T, class U> struct common_type_impl4;
+
+template<class T, class U> struct common_type_impl3: public pdalboost::conditional<
+    pdalboost::is_pointer<T>::value || pdalboost::is_pointer<U>::value,
+    composite_pointer_type<T, U>,
+    common_type_impl4<T, U> >::type
+{
+};
+
+// pointers to members
+
+template<class T, class U> struct common_type_impl5;
+
+template<class T, class U> struct common_type_impl4: public pdalboost::conditional<
+    pdalboost::is_member_pointer<T>::value || pdalboost::is_member_pointer<U>::value,
+    composite_member_pointer_type<T, U>,
+    common_type_impl5<T, U> >::type
+{
+};
+
+// arithmetic types (including class types w/ conversions to arithmetic and enums)
+
+template<class T, class U> struct common_type_impl5: public common_arithmetic_type<T, U>
+{
+};
+
+} // namespace type_traits_detail
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_IMPL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/detail/composite_member_pointer_type.hpp b/vendor/pdalboost/boost/type_traits/detail/composite_member_pointer_type.hpp
new file mode 100644
index 0000000..a4dd0ab
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/detail/composite_member_pointer_type.hpp
@@ -0,0 +1,113 @@
+#ifndef BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_MEMBER_POINTER_TYPE_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_MEMBER_POINTER_TYPE_HPP_INCLUDED
+
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/type_traits/detail/composite_pointer_type.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/type_traits/conditional.hpp>
+#include <boost/config.hpp>
+#include <cstddef>
+
+namespace pdalboost
+{
+
+namespace type_traits_detail
+{
+
+template<class T, class U> struct composite_member_pointer_type;
+
+// nullptr_t
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+#if !defined( BOOST_NO_CXX11_DECLTYPE ) && ( ( defined( __clang__ ) && !defined( _LIBCPP_VERSION ) ) || defined( __INTEL_COMPILER ) )
+
+template<class C, class T> struct composite_member_pointer_type<T C::*, decltype(nullptr)>
+{
+    typedef T C::* type;
+};
+
+template<class C, class T> struct composite_member_pointer_type<decltype(nullptr), T C::*>
+{
+    typedef T C::* type;
+};
+
+template<> struct composite_member_pointer_type<decltype(nullptr), decltype(nullptr)>
+{
+    typedef decltype(nullptr) type;
+};
+
+#else
+
+template<class C, class T> struct composite_member_pointer_type<T C::*, std::nullptr_t>
+{
+    typedef T C::* type;
+};
+
+template<class C, class T> struct composite_member_pointer_type<std::nullptr_t, T C::*>
+{
+    typedef T C::* type;
+};
+
+template<> struct composite_member_pointer_type<std::nullptr_t, std::nullptr_t>
+{
+    typedef std::nullptr_t type;
+};
+
+#endif
+
+#endif // !defined( BOOST_NO_CXX11_NULLPTR )
+
+template<class C1, class C2> struct common_member_class;
+
+template<class C> struct common_member_class<C, C>
+{
+    typedef C type;
+};
+
+template<class C1, class C2> struct common_member_class
+{
+    typedef typename pdalboost::conditional<
+
+        pdalboost::is_base_of<C1, C2>::value,
+        C2,
+        typename pdalboost::conditional<pdalboost::is_base_of<C2, C1>::value, C1, void>::type
+
+    >::type type;
+};
+
+//This indirection avoids compilation errors on some older 
+//compilers like MSVC 7.1
+template<class CT, class CB>
+struct common_member_class_pointer_to_member
+{
+    typedef CT CB::* type;
+};
+
+template<class C1, class T1, class C2, class T2> struct composite_member_pointer_type<T1 C1::*, T2 C2::*>
+{
+private:
+
+    typedef typename composite_pointer_type<T1*, T2*>::type CPT;
+    typedef typename pdalboost::remove_pointer<CPT>::type CT;
+
+    typedef typename common_member_class<C1, C2>::type CB;
+
+public:
+
+    typedef typename common_member_class_pointer_to_member<CT, CB>::type type;
+};
+
+} // namespace type_traits_detail
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_MEMBER_POINTER_TYPE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/detail/composite_pointer_type.hpp b/vendor/pdalboost/boost/type_traits/detail/composite_pointer_type.hpp
new file mode 100644
index 0000000..8ea7e36
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/detail/composite_pointer_type.hpp
@@ -0,0 +1,153 @@
+#ifndef BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_POINTER_TYPE_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_POINTER_TYPE_HPP_INCLUDED
+
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/type_traits/copy_cv.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/config.hpp>
+#include <cstddef>
+
+namespace pdalboost
+{
+
+namespace type_traits_detail
+{
+
+template<class T, class U> struct composite_pointer_type;
+
+// same type
+
+template<class T> struct composite_pointer_type<T*, T*>
+{
+    typedef T* type;
+};
+
+// nullptr_t
+
+#if !defined( BOOST_NO_CXX11_NULLPTR )
+
+#if !defined( BOOST_NO_CXX11_DECLTYPE ) && ( ( defined( __clang__ ) && !defined( _LIBCPP_VERSION ) ) || defined( __INTEL_COMPILER ) )
+
+template<class T> struct composite_pointer_type<T*, decltype(nullptr)>
+{
+    typedef T* type;
+};
+
+template<class T> struct composite_pointer_type<decltype(nullptr), T*>
+{
+    typedef T* type;
+};
+
+template<> struct composite_pointer_type<decltype(nullptr), decltype(nullptr)>
+{
+    typedef decltype(nullptr) type;
+};
+
+#else
+
+template<class T> struct composite_pointer_type<T*, std::nullptr_t>
+{
+    typedef T* type;
+};
+
+template<class T> struct composite_pointer_type<std::nullptr_t, T*>
+{
+    typedef T* type;
+};
+
+template<> struct composite_pointer_type<std::nullptr_t, std::nullptr_t>
+{
+    typedef std::nullptr_t type;
+};
+
+#endif
+
+#endif // !defined( BOOST_NO_CXX11_NULLPTR )
+
+namespace detail
+{
+
+template<class T, class U> struct has_common_pointee
+{
+private:
+
+    typedef typename pdalboost::remove_cv<T>::type T2;
+    typedef typename pdalboost::remove_cv<U>::type U2;
+
+public:
+
+    BOOST_STATIC_CONSTANT( bool, value =
+        (pdalboost::is_same<T2, U2>::value)
+        || pdalboost::is_void<T2>::value
+        || pdalboost::is_void<U2>::value
+        || (pdalboost::is_base_of<T2, U2>::value)
+        || (pdalboost::is_base_of<U2, T2>::value) );
+};
+
+template<class T, class U> struct common_pointee
+{
+private:
+
+    typedef typename pdalboost::remove_cv<T>::type T2;
+    typedef typename pdalboost::remove_cv<U>::type U2;
+
+public:
+
+    typedef typename pdalboost::conditional<
+
+        pdalboost::is_same<T2, U2>::value || pdalboost::is_void<T2>::value || pdalboost::is_base_of<T2, U2>::value,
+        typename pdalboost::copy_cv<T, U>::type,
+        typename pdalboost::copy_cv<U, T>::type
+
+    >::type type;
+};
+
+template<class T, class U> struct composite_pointer_impl
+{
+private:
+
+    typedef typename pdalboost::remove_cv<T>::type T2;
+    typedef typename pdalboost::remove_cv<U>::type U2;
+
+public:
+
+    typedef typename pdalboost::copy_cv<typename pdalboost::copy_cv<typename composite_pointer_type<T2, U2>::type const, T>::type, U>::type type;
+};
+
+//Old compilers like MSVC-7.1 have problems using pdalboost::conditional in
+//composite_pointer_type. Partially specializing on has_common_pointee<T, U>::value
+//seems to make their life easier
+template<class T, class U, bool = has_common_pointee<T, U>::value >
+struct composite_pointer_type_dispatch
+   : common_pointee<T, U>
+{};
+
+template<class T, class U>
+struct composite_pointer_type_dispatch<T, U, false>
+   : composite_pointer_impl<T, U>
+{};
+
+
+} // detail
+
+
+template<class T, class U> struct composite_pointer_type<T*, U*>
+{
+    typedef typename detail::composite_pointer_type_dispatch<T, U>::type* type;
+};
+
+} // namespace type_traits_detail
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_COMPOSITE_POINTER_TYPE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/detail/config.hpp b/vendor/pdalboost/boost/type_traits/detail/config.hpp
new file mode 100644
index 0000000..ebb1dd6
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/detail/config.hpp
@@ -0,0 +1,72 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_CONFIG_HPP_INCLUDED
+#define BOOST_TT_CONFIG_HPP_INCLUDED
+
+#ifndef BOOST_CONFIG_HPP
+#include <boost/config.hpp>
+#endif
+#include <boost/version.hpp>
+#include <boost/detail/workaround.hpp>
+
+//
+// whenever we have a conversion function with ellipses
+// it needs to be declared __cdecl to suppress compiler
+// warnings from MS and Borland compilers (this *must*
+// appear before we include is_same.hpp below):
+#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32))
+#   define BOOST_TT_DECL __cdecl
+#else
+#   define BOOST_TT_DECL /**/
+#endif
+
+# if (BOOST_WORKAROUND(__MWERKS__, < 0x3000)                         \
+    || BOOST_WORKAROUND(__IBMCPP__, < 600 )                         \
+    || BOOST_WORKAROUND(__BORLANDC__, < 0x5A0)                      \
+    || defined(__ghs)                                               \
+    || BOOST_WORKAROUND(__HP_aCC, < 60700)           \
+    || BOOST_WORKAROUND(MPW_CPLUS, BOOST_TESTED_AT(0x890))          \
+    || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580)))       \
+    && defined(BOOST_NO_IS_ABSTRACT)
+
+#   define BOOST_TT_NO_CONFORMING_IS_CLASS_IMPLEMENTATION 1
+
+#endif
+
+#ifndef BOOST_TT_NO_CONFORMING_IS_CLASS_IMPLEMENTATION
+# define BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION 1
+#endif
+
+//
+// define BOOST_TT_TEST_MS_FUNC_SIGS
+// when we want to test __stdcall etc function types with is_function etc
+// (Note, does not work with Borland, even though it does support __stdcall etc):
+//
+#if defined(_MSC_EXTENSIONS) && !defined(__BORLANDC__)
+#  define BOOST_TT_TEST_MS_FUNC_SIGS
+#endif
+
+//
+// define BOOST_TT_NO_CV_FUNC_TEST
+// if tests for cv-qualified member functions don't 
+// work in is_member_function_pointer
+//
+#if BOOST_WORKAROUND(__MWERKS__, < 0x3000) || BOOST_WORKAROUND(__IBMCPP__, <= 600)
+#  define BOOST_TT_NO_CV_FUNC_TEST
+#endif
+
+//
+// Macros that have been deprecated, defined here for backwards compatibility:
+//
+#define BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(x)
+#define BOOST_TT_BROKEN_COMPILER_SPEC(x)
+
+#endif // BOOST_TT_CONFIG_HPP_INCLUDED
+
+
diff --git a/vendor/pdalboost/boost/type_traits/detail/has_binary_operator.hpp b/vendor/pdalboost/boost/type_traits/detail/has_binary_operator.hpp
new file mode 100644
index 0000000..34d0d33
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/detail/has_binary_operator.hpp
@@ -0,0 +1,222 @@
+//  (C) Copyright 2009-2011 Frederic Bron, Robert Stewart, Steven Watanabe & Roman Perepelitsa.
+//
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#include <boost/config.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_fundamental.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+// cannot include this header without getting warnings of the kind:
+// gcc:
+//    warning: value computed is not used
+//    warning: comparison between signed and unsigned integer expressions
+// msvc:
+//    warning C4018: '<' : signed/unsigned mismatch
+//    warning C4244: '+=' : conversion from 'double' to 'char', possible loss of data
+//    warning C4547: '*' : operator before comma has no effect; expected operator with side-effect
+//    warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
+//    warning C4804: '<' : unsafe use of type 'bool' in operation
+//    warning C4805: '==' : unsafe mix of type 'bool' and type 'char' in operation
+// cannot find another implementation -> declared as system header to suppress these warnings.
+#if defined(__GNUC__)
+#   pragma GCC system_header
+#elif defined(BOOST_MSVC)
+#   pragma warning ( push )
+#   pragma warning ( disable : 4018 4244 4547 4800 4804 4805 4913)
+#   if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)
+#       pragma warning ( disable : 6334)
+#   endif
+#endif
+
+namespace pdalboost {
+namespace detail {
+
+// This namespace ensures that argument-dependent name lookup does not mess things up.
+namespace BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl) {
+
+// 1. a function to have an instance of type T without requiring T to be default
+// constructible
+template <typename T> T &make();
+
+
+// 2. we provide our operator definition for types that do not have one already
+
+// a type returned from operator BOOST_TT_TRAIT_OP when no such operator is
+// found in the type's own namespace (our own operator is used) so that we have
+// a means to know that our operator was used
+struct no_operator { };
+
+// this class allows implicit conversions and makes the following operator
+// definition less-preferred than any other such operators that might be found
+// via argument-dependent name lookup
+struct any { template <class T> any(T const&); };
+
+// when operator BOOST_TT_TRAIT_OP is not available, this one is used
+no_operator operator BOOST_TT_TRAIT_OP (const any&, const any&);
+
+
+// 3. checks if the operator returns void or not
+// conditions: Lhs!=void and Rhs!=void
+
+// we first redefine "operator," so that we have no compilation error if
+// operator BOOST_TT_TRAIT_OP returns void and we can use the return type of
+// (lhs BOOST_TT_TRAIT_OP rhs, returns_void_t()) to deduce if
+// operator BOOST_TT_TRAIT_OP returns void or not:
+// - operator BOOST_TT_TRAIT_OP returns void   -> (lhs BOOST_TT_TRAIT_OP rhs, returns_void_t()) returns returns_void_t
+// - operator BOOST_TT_TRAIT_OP returns !=void -> (lhs BOOST_TT_TRAIT_OP rhs, returns_void_t()) returns int
+struct returns_void_t { };
+template <typename T> int operator,(const T&, returns_void_t);
+template <typename T> int operator,(const volatile T&, returns_void_t);
+
+// this intermediate trait has member value of type bool:
+// - value==true -> operator BOOST_TT_TRAIT_OP returns void
+// - value==false -> operator BOOST_TT_TRAIT_OP does not return void
+template < typename Lhs, typename Rhs >
+struct operator_returns_void {
+   // overloads of function returns_void make the difference
+   // yes_type and no_type have different size by construction
+   static ::pdalboost::type_traits::yes_type returns_void(returns_void_t);
+   static ::pdalboost::type_traits::no_type returns_void(int);
+   BOOST_STATIC_CONSTANT(bool, value = (sizeof(::pdalboost::type_traits::yes_type)==sizeof(returns_void((make<Lhs>() BOOST_TT_TRAIT_OP make<Rhs>(),returns_void_t())))));
+};
+
+
+// 4. checks if the return type is Ret or Ret==dont_care
+// conditions: Lhs!=void and Rhs!=void
+
+struct dont_care { };
+
+template < typename Lhs, typename Rhs, typename Ret, bool Returns_void >
+struct operator_returns_Ret;
+
+template < typename Lhs, typename Rhs >
+struct operator_returns_Ret < Lhs, Rhs, dont_care, true > {
+   BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template < typename Lhs, typename Rhs >
+struct operator_returns_Ret < Lhs, Rhs, dont_care, false > {
+   BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template < typename Lhs, typename Rhs >
+struct operator_returns_Ret < Lhs, Rhs, void, true > {
+   BOOST_STATIC_CONSTANT(bool, value = true);
+};
+
+template < typename Lhs, typename Rhs >
+struct operator_returns_Ret < Lhs, Rhs, void, false > {
+   BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template < typename Lhs, typename Rhs, typename Ret >
+struct operator_returns_Ret < Lhs, Rhs, Ret, true > {
+   BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+// otherwise checks if it is convertible to Ret using the sizeof trick
+// based on overload resolution
+// condition: Ret!=void and Ret!=dont_care and the operator does not return void
+template < typename Lhs, typename Rhs, typename Ret >
+struct operator_returns_Ret < Lhs, Rhs, Ret, false > {
+   static ::pdalboost::type_traits::yes_type is_convertible_to_Ret(Ret); // this version is preferred for types convertible to Ret
+   static ::pdalboost::type_traits::no_type is_convertible_to_Ret(...); // this version is used otherwise
+
+   BOOST_STATIC_CONSTANT(bool, value = (sizeof(is_convertible_to_Ret(make<Lhs>() BOOST_TT_TRAIT_OP make<Rhs>()))==sizeof(::pdalboost::type_traits::yes_type)));
+};
+
+
+// 5. checks for operator existence
+// condition: Lhs!=void and Rhs!=void
+
+// checks if our definition of operator BOOST_TT_TRAIT_OP is used or an other
+// existing one;
+// this is done with redefinition of "operator," that returns no_operator or has_operator
+struct has_operator { };
+no_operator operator,(no_operator, has_operator);
+
+template < typename Lhs, typename Rhs >
+struct operator_exists {
+   static ::pdalboost::type_traits::yes_type s_check(has_operator); // this version is preferred when operator exists
+   static ::pdalboost::type_traits::no_type s_check(no_operator); // this version is used otherwise
+
+   BOOST_STATIC_CONSTANT(bool, value = (sizeof(s_check(((make<Lhs>() BOOST_TT_TRAIT_OP make<Rhs>()),make<has_operator>())))==sizeof(::pdalboost::type_traits::yes_type)));
+};
+
+
+// 6. main trait: to avoid any compilation error, this class behaves
+// differently when operator BOOST_TT_TRAIT_OP(Lhs, Rhs) is forbidden by the
+// standard.
+// Forbidden_if is a bool that is:
+// - true when the operator BOOST_TT_TRAIT_OP(Lhs, Rhs) is forbidden by the standard
+//   (would yield compilation error if used)
+// - false otherwise
+template < typename Lhs, typename Rhs, typename Ret, bool Forbidden_if >
+struct trait_impl1;
+
+template < typename Lhs, typename Rhs, typename Ret >
+struct trait_impl1 < Lhs, Rhs, Ret, true > {
+   BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template < typename Lhs, typename Rhs, typename Ret >
+struct trait_impl1 < Lhs, Rhs, Ret, false > {
+   BOOST_STATIC_CONSTANT(bool,
+      value = (operator_exists < Lhs, Rhs >::value && operator_returns_Ret < Lhs, Rhs, Ret, operator_returns_void < Lhs, Rhs >::value >::value));
+};
+
+// some specializations needs to be declared for the special void case
+template < typename Rhs, typename Ret >
+struct trait_impl1 < void, Rhs, Ret, false > {
+   BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template < typename Lhs, typename Ret >
+struct trait_impl1 < Lhs, void, Ret, false > {
+   BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template < typename Ret >
+struct trait_impl1 < void, void, Ret, false > {
+   BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+// defines some typedef for convenience
+template < typename Lhs, typename Rhs, typename Ret >
+struct trait_impl {
+   typedef typename ::pdalboost::remove_reference<Lhs>::type Lhs_noref;
+   typedef typename ::pdalboost::remove_reference<Rhs>::type Rhs_noref;
+   typedef typename ::pdalboost::remove_cv<Lhs_noref>::type Lhs_nocv;
+   typedef typename ::pdalboost::remove_cv<Rhs_noref>::type Rhs_nocv;
+   typedef typename ::pdalboost::remove_cv< typename ::pdalboost::remove_reference< typename ::pdalboost::remove_pointer<Lhs_noref>::type >::type >::type Lhs_noptr;
+   typedef typename ::pdalboost::remove_cv< typename ::pdalboost::remove_reference< typename ::pdalboost::remove_pointer<Rhs_noref>::type >::type >::type Rhs_noptr;
+   BOOST_STATIC_CONSTANT(bool, value = (trait_impl1 < Lhs_noref, Rhs_noref, Ret, BOOST_TT_FORBIDDEN_IF >::value));
+};
+
+} // namespace impl
+} // namespace detail
+
+// this is the accessible definition of the trait to end user
+template <class Lhs, class Rhs=Lhs, class Ret=::pdalboost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME,_impl)::dont_care>
+struct BOOST_TT_TRAIT_NAME : public integral_constant<bool, (::pdalboost::detail::BOOST_JOIN(BOOST_TT_TRAIT_NAME, _impl)::trait_impl < Lhs, Rhs, Ret >::value)>{};
+
+} // namespace pdalboost
+
+#if defined(BOOST_MSVC)
+#   pragma warning ( pop )
+#endif
diff --git a/vendor/pdalboost/boost/type_traits/detail/is_function_ptr_helper.hpp b/vendor/pdalboost/boost/type_traits/detail/is_function_ptr_helper.hpp
new file mode 100644
index 0000000..05ee68b
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/detail/is_function_ptr_helper.hpp
@@ -0,0 +1,176 @@
+
+//  Copyright 2000 John Maddock (john at johnmaddock.co.uk)
+//  Copyright 2002 Aleksey Gurtovoy (agurtovoy at meta-comm.com)
+//
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED
+#define BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED
+
+#if defined(BOOST_TT_PREPROCESSING_MODE)
+//
+// Hide these #include from dependency analysers as
+// these are required in maintenance mode only:
+//
+#define PP1 <boost/preprocessor/iterate.hpp>
+#include PP1
+#undef PP1
+#define PP1 <boost/preprocessor/enum_params.hpp>
+#include PP1
+#undef PP1
+#define PP1 <boost/preprocessor/comma_if.hpp>
+#include PP1
+#undef PP1
+#endif
+
+namespace pdalboost {
+namespace type_traits {
+
+template <class R>
+struct is_function_ptr_helper
+{
+    BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+#if !defined(BOOST_TT_PREPROCESSING_MODE)
+// preprocessor-generated part, don't edit by hand!
+
+template <class R >
+struct is_function_ptr_helper<R (*)()> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R >
+struct is_function_ptr_helper<R (*)( ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0>
+struct is_function_ptr_helper<R (*)( T0)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0>
+struct is_function_ptr_helper<R (*)( T0 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1>
+struct is_function_ptr_helper<R (*)( T0 , T1)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1>
+struct is_function_ptr_helper<R (*)( T0 , T1 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+#else
+
+#undef BOOST_STATIC_CONSTANT
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3, (0, 25, "boost/type_traits/detail/is_function_ptr_helper.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif // BOOST_TT_PREPROCESSING_MODE
+
+} // namespace type_traits
+} // namespace pdalboost
+
+#endif // BOOST_TT_DETAIL_IS_FUNCTION_PTR_HELPER_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1)
+
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_function_ptr_helper<R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T))> { BOOST_STATIC_CONSTANT(bool, value = true); };
+@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_function_ptr_helper<R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...)> { BOOST_STATIC_CONSTANT(bool, value = true); };
+@#endif
+#undef BOOST_PP_COUNTER
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/type_traits/detail/is_function_ptr_tester.hpp b/vendor/pdalboost/boost/type_traits/detail/is_function_ptr_tester.hpp
new file mode 100644
index 0000000..8fee31d
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/detail/is_function_ptr_tester.hpp
@@ -0,0 +1,449 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, 
+//  Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_TT_DETAIL_IS_FUNCTION_PTR_TESTER_HPP_INCLUDED
+#define BOOST_TT_DETAIL_IS_FUNCTION_PTR_TESTER_HPP_INCLUDED
+
+#include <boost/type_traits/detail/yes_no_type.hpp>
+
+#if defined(BOOST_TT_PREPROCESSING_MODE)
+//
+// Hide include dependencies from analysers since they're
+// only require in maintenance mode:
+//
+#define PP1 <boost/preprocessor/iterate.hpp>
+#define PP2 <boost/preprocessor/enum_params.hpp>
+#define PP3 <boost/preprocessor/comma_if.hpp>
+#include PP1
+#include PP2
+#include PP3
+#undef PP1
+#undef PP2
+#undef PP3
+#endif
+
+namespace pdalboost {
+namespace type_traits {
+
+// Note it is acceptable to use ellipsis here, since the argument will
+// always be a pointer type of some sort (JM 2005/06/04):
+no_type BOOST_TT_DECL is_function_ptr_tester(...);
+
+#if !defined(BOOST_TT_PREPROCESSING_MODE)
+// pre-processed code, don't edit, try GNU cpp with 
+// cpp -I../../../ -DBOOST_TT_PREPROCESSING_MODE -x c++ -P filename
+
+template <class R >
+yes_type is_function_ptr_tester(R (*)());
+template <class R >
+yes_type is_function_ptr_tester(R (*)( ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R >
+yes_type is_function_ptr_tester(R (__stdcall*)());
+#ifndef _MANAGED
+template <class R >
+yes_type is_function_ptr_tester(R (__fastcall*)());
+#endif
+template <class R >
+yes_type is_function_ptr_tester(R (__cdecl*)());
+#endif
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (*)( T0));
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (*)( T0 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0));
+#ifndef _MANAGED
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0));
+#endif
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0));
+#endif
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1));
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1));
+#endif
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1));
+#endif
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2));
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2));
+#endif
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3));
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+#ifndef _MANAGED
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+#endif
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+#endif
+#else
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3, (0, 25, "boost/type_traits/detail/is_function_ptr_tester.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif // BOOST_TT_PREPROCESSING_MODE
+
+} // namespace type_traits
+} // namespace pdalboost
+
+#endif // BOOST_TT_DETAIL_IS_FUNCTION_PTR_TESTER_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1)
+#undef __stdcall
+#undef __fastcall
+#undef __cdecl
+
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_function_ptr_tester(R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_function_ptr_tester(R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
+@#endif
+@#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_function_ptr_tester(R (__stdcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+@#ifndef _MANAGED
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_function_ptr_tester(R (__fastcall*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+@#endif
+template <class R BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_function_ptr_tester(R (__cdecl*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+@#endif
+
+#undef BOOST_PP_COUNTER
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp b/vendor/pdalboost/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp
new file mode 100644
index 0000000..bf6eeb0
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp
@@ -0,0 +1,723 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, 
+//  Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_IMPL_HPP_INCLUDED
+#define BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_IMPL_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_TT_PREPROCESSING_MODE)
+//
+// Maintenance mode, hide include dependencies
+// from trackers:
+//
+#define PPI <boost/preprocessor/iterate.hpp>
+#include PPI
+#undef PPI
+#define PPI <boost/preprocessor/enum_params.hpp>
+#include PPI
+#undef PPI
+#define PPI <boost/preprocessor/comma_if.hpp>
+#include PPI
+#undef PPI
+#endif
+
+namespace pdalboost {
+namespace type_traits {
+
+template <typename T>
+struct is_mem_fun_pointer_impl
+{
+    BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+#if !defined(BOOST_TT_PREPROCESSING_MODE)
+// pre-processed code, don't edit, try GNU cpp with 
+// cpp -I../../../ -DBOOST_TT_PREPROCESSING_MODE -x c++ -P filename
+
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)() > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)( ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)() const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)() volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)() const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)( ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)( ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T >
+struct is_mem_fun_pointer_impl<R (T::*)( ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
+struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+#endif
+
+#else
+
+#undef BOOST_STATIC_CONSTANT
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3, (0, 25, "boost/type_traits/detail/is_mem_fun_pointer_impl.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif // BOOST_TT_PREPROCESSING_MODE
+
+} // namespace type_traits
+} // namespace pdalboost
+
+#endif // BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_IMPL_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1)
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) > { BOOST_STATIC_CONSTANT(bool, value = true); };
+@#endif
+
+@#if !defined(BOOST_TT_NO_CV_FUNC_TEST)
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T)>
+struct is_mem_fun_pointer_impl<R (T::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile > { BOOST_STATIC_CONSTANT(bool, value = true); };
+@#endif
+@#endif
+
+#undef BOOST_PP_COUNTER
+#endif // BOOST_PP_IS_ITERATING
+
diff --git a/vendor/pdalboost/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp b/vendor/pdalboost/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp
new file mode 100644
index 0000000..601bb89
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp
@@ -0,0 +1,1800 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, 
+//  Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+#ifndef BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_TESTER_HPP_INCLUDED
+#define BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_TESTER_HPP_INCLUDED
+
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/detail/config.hpp>
+
+#if defined(BOOST_TT_PREPROCESSING_MODE)
+//
+// Maintentance mode, hide include dependencies
+// from dependency trackers:
+//
+#define PPI <boost/preprocessor/iterate.hpp>
+#include PPI
+#undef PPI
+#define PPI <boost/preprocessor/enum_params.hpp>
+#include PPI
+#undef PPI
+#define <boost/preprocessor/comma_if.hpp>
+#include PPI
+#undef
+#endif
+
+namespace pdalboost {
+namespace type_traits {
+
+no_type BOOST_TT_DECL is_mem_fun_pointer_tester(...);
+
+#if !defined(BOOST_TT_PREPROCESSING_MODE)
+// pre-processed code, don't edit, try GNU cpp with 
+// cpp -I../../../ -DBOOST_TT_PREPROCESSING_MODE -x c++ -P filename
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)());
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() const volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...));
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)());
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() const volatile);
+
+#ifndef _MANAGED
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)());
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() const volatile);
+
+#endif
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)());
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() const volatile);
+
+#endif
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) const volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) const volatile);
+
+#endif
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) const volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile);
+
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
+
+#endif
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile);
+#ifdef BOOST_TT_TEST_MS_FUNC_SIGS
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
+
+#ifndef _MANAGED
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
+
+#endif
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
+
+#endif
+
+#else
+
+#define BOOST_PP_ITERATION_PARAMS_1 \
+    (3, (0, 25, "boost/type_traits/detail/is_mem_fun_pointer_tester.hpp"))
+#include BOOST_PP_ITERATE()
+
+#endif // BOOST_TT_PREPROCESSING_MODE
+
+} // namespace type_traits
+} // namespace pdalboost
+
+#endif // BOOST_TT_DETAIL_IS_MEM_FUN_POINTER_TESTER_HPP_INCLUDED
+
+///// iteration
+
+#else
+#define BOOST_PP_COUNTER BOOST_PP_FRAME_ITERATION(1)
+#undef __stdcall
+#undef __fastcall
+#undef __cdecl
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile);
+
+@#ifndef BOOST_TT_NO_ELLIPSIS_IN_FUNC_TESTING
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...));
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T) ...) const volatile);
+@#endif
+@#ifdef BOOST_TT_TEST_MS_FUNC_SIGS // Other calling conventions used by MS compatible compilers:
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile);
+
+@#ifndef _MANAGED
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile);
+
+@#endif
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)));
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) volatile);
+
+template <class R, class T BOOST_PP_COMMA_IF(BOOST_PP_COUNTER) BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,class T) >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_COUNTER,T)) const volatile);
+
+@#endif
+
+#undef BOOST_PP_COUNTER
+#endif // BOOST_PP_IS_ITERATING
diff --git a/vendor/pdalboost/boost/type_traits/detail/mp_defer.hpp b/vendor/pdalboost/boost/type_traits/detail/mp_defer.hpp
new file mode 100644
index 0000000..f5afbeb
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/detail/mp_defer.hpp
@@ -0,0 +1,56 @@
+#ifndef BOOST_TYPE_TRAITS_DETAIL_MP_DEFER_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_DETAIL_MP_DEFER_HPP_INCLUDED
+
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/conditional.hpp>
+
+namespace pdalboost
+{
+
+namespace type_traits_detail
+{
+
+// mp_valid
+// implementation by Bruno Dutra (by the name is_evaluable)
+
+template<template<class...> class F, class... T>
+struct mp_valid_impl
+{
+    template<template<class...> class G, class = G<T...>>
+    static pdalboost::true_type check(int);
+
+    template<template<class...> class>
+    static pdalboost::false_type check(...);
+
+    using type = decltype(check<F>(0));
+};
+
+template<template<class...> class F, class... T>
+using mp_valid = typename mp_valid_impl<F, T...>::type;
+
+// mp_defer
+
+struct mp_empty
+{
+};
+
+template<template<class...> class F, class... T> struct mp_defer_impl
+{
+    using type = F<T...>;
+};
+
+template<template<class...> class F, class... T> using mp_defer = typename pdalboost::conditional<mp_valid<F, T...>::value, mp_defer_impl<F, T...>, mp_empty>::type;
+
+} // namespace type_traits_detail
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_MP_DEFER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/detail/template_arity_spec.hpp b/vendor/pdalboost/boost/type_traits/detail/template_arity_spec.hpp
new file mode 100644
index 0000000..36ea96d
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/detail/template_arity_spec.hpp
@@ -0,0 +1,16 @@
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//
+// This header is deprecated and no longer used by type_traits:
+//
+#if defined(__GNUC__) || defined(_MSC_VER)
+# pragma message("NOTE: Use of this header (template_arity_spec.hpp) is deprecated")
+#endif
+
+#   define BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(i, name) /**/
diff --git a/vendor/pdalboost/boost/type_traits/detail/yes_no_type.hpp b/vendor/pdalboost/boost/type_traits/detail/yes_no_type.hpp
new file mode 100644
index 0000000..44ba398
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/detail/yes_no_type.hpp
@@ -0,0 +1,26 @@
+
+//  (C) Copyright John Maddock and Steve Cleary 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+//
+//  macros and helpers for working with integral-constant-expressions.
+
+#ifndef BOOST_TT_DETAIL_YES_NO_TYPE_HPP_INCLUDED
+#define BOOST_TT_DETAIL_YES_NO_TYPE_HPP_INCLUDED
+
+namespace pdalboost {
+namespace type_traits {
+
+typedef char yes_type;
+struct no_type
+{
+   char padding[8];
+};
+
+} // namespace type_traits
+} // namespace pdalboost
+
+#endif // BOOST_TT_DETAIL_YES_NO_TYPE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/function_traits.hpp b/vendor/pdalboost/boost/type_traits/function_traits.hpp
new file mode 100644
index 0000000..5730b6c
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/function_traits.hpp
@@ -0,0 +1,174 @@
+
+//  Copyright 2000 John Maddock (john at johnmaddock.co.uk)
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_FUNCTION_TRAITS_HPP_INCLUDED
+#define BOOST_TT_FUNCTION_TRAITS_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/add_pointer.hpp>
+
+namespace pdalboost {
+
+namespace detail {
+
+template<typename Function> struct function_traits_helper;
+
+template<typename R>
+struct function_traits_helper<R (*)(void)>
+{
+  BOOST_STATIC_CONSTANT(unsigned, arity = 0);
+  typedef R result_type;
+};
+
+template<typename R, typename T1>
+struct function_traits_helper<R (*)(T1)>
+{
+  BOOST_STATIC_CONSTANT(unsigned, arity = 1);
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T1 argument_type;
+};
+
+template<typename R, typename T1, typename T2>
+struct function_traits_helper<R (*)(T1, T2)>
+{
+  BOOST_STATIC_CONSTANT(unsigned, arity = 2);
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T1 first_argument_type;
+  typedef T2 second_argument_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3>
+struct function_traits_helper<R (*)(T1, T2, T3)>
+{
+  BOOST_STATIC_CONSTANT(unsigned, arity = 3);
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4>
+struct function_traits_helper<R (*)(T1, T2, T3, T4)>
+{
+  BOOST_STATIC_CONSTANT(unsigned, arity = 4);
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+  typedef T4 arg4_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+         typename T5>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5)>
+{
+  BOOST_STATIC_CONSTANT(unsigned, arity = 5);
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+  typedef T4 arg4_type;
+  typedef T5 arg5_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+         typename T5, typename T6>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6)>
+{
+  BOOST_STATIC_CONSTANT(unsigned, arity = 6);
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+  typedef T4 arg4_type;
+  typedef T5 arg5_type;
+  typedef T6 arg6_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+         typename T5, typename T6, typename T7>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7)>
+{
+  BOOST_STATIC_CONSTANT(unsigned, arity = 7);
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+  typedef T4 arg4_type;
+  typedef T5 arg5_type;
+  typedef T6 arg6_type;
+  typedef T7 arg7_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+         typename T5, typename T6, typename T7, typename T8>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8)>
+{
+  BOOST_STATIC_CONSTANT(unsigned, arity = 8);
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+  typedef T4 arg4_type;
+  typedef T5 arg5_type;
+  typedef T6 arg6_type;
+  typedef T7 arg7_type;
+  typedef T8 arg8_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+         typename T5, typename T6, typename T7, typename T8, typename T9>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9)>
+{
+  BOOST_STATIC_CONSTANT(unsigned, arity = 9);
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+  typedef T4 arg4_type;
+  typedef T5 arg5_type;
+  typedef T6 arg6_type;
+  typedef T7 arg7_type;
+  typedef T8 arg8_type;
+  typedef T9 arg9_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+         typename T5, typename T6, typename T7, typename T8, typename T9,
+         typename T10>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>
+{
+  BOOST_STATIC_CONSTANT(unsigned, arity = 10);
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+  typedef T4 arg4_type;
+  typedef T5 arg5_type;
+  typedef T6 arg6_type;
+  typedef T7 arg7_type;
+  typedef T8 arg8_type;
+  typedef T9 arg9_type;
+  typedef T10 arg10_type;
+};
+
+} // end namespace detail
+
+template<typename Function>
+struct function_traits : 
+  public pdalboost::detail::function_traits_helper<typename pdalboost::add_pointer<Function>::type>
+{
+};
+
+}
+
+#endif // BOOST_TT_FUNCTION_TRAITS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/has_left_shift.hpp b/vendor/pdalboost/boost/type_traits/has_left_shift.hpp
new file mode 100644
index 0000000..e444760
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_left_shift.hpp
@@ -0,0 +1,49 @@
+//  (C) Copyright 2009-2011 Frederic Bron.
+//
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_LEFT_SHIFT_HPP_INCLUDED
+#define BOOST_TT_HAS_LEFT_SHIFT_HPP_INCLUDED
+
+#define BOOST_TT_TRAIT_NAME has_left_shift
+#define BOOST_TT_TRAIT_OP <<
+#define BOOST_TT_FORBIDDEN_IF\
+   (\
+      /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\
+      (\
+         ::pdalboost::is_fundamental< Lhs_nocv >::value && \
+         ::pdalboost::is_fundamental< Rhs_nocv >::value && \
+         ( \
+            (!  ::pdalboost::is_integral< Lhs_noref >::value ) || \
+            (!  ::pdalboost::is_integral< Rhs_noref >::value )\
+         )\
+      )||\
+      /* Lhs==fundamental and Rhs==pointer */\
+      (\
+         ::pdalboost::is_fundamental< Lhs_nocv >::value && \
+         ::pdalboost::is_pointer< Rhs_noref >::value\
+      )||\
+      /* Rhs==fundamental and Lhs==pointer */\
+      (\
+         ::pdalboost::is_fundamental< Rhs_nocv >::value && \
+         ::pdalboost::is_pointer< Lhs_noref >::value\
+      )||\
+      /* Lhs==pointer and Rhs==pointer */\
+      (\
+         ::pdalboost::is_pointer< Lhs_noref >::value && \
+         ::pdalboost::is_pointer< Rhs_noref >::value\
+      )\
+      )
+
+
+#include <boost/type_traits/detail/has_binary_operator.hpp>
+
+#undef BOOST_TT_TRAIT_NAME
+#undef BOOST_TT_TRAIT_OP
+#undef BOOST_TT_FORBIDDEN_IF
+
+#endif
diff --git a/vendor/pdalboost/boost/type_traits/has_minus.hpp b/vendor/pdalboost/boost/type_traits/has_minus.hpp
new file mode 100644
index 0000000..f74897c
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_minus.hpp
@@ -0,0 +1,60 @@
+//  (C) Copyright 2009-2011 Frederic Bron.
+//
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_MINUS_HPP_INCLUDED
+#define BOOST_TT_HAS_MINUS_HPP_INCLUDED
+
+#define BOOST_TT_TRAIT_NAME has_minus
+#define BOOST_TT_TRAIT_OP -
+#define BOOST_TT_FORBIDDEN_IF\
+   (\
+      /* Lhs==pointer and Rhs==fundamental and Rhs!=integral */\
+      (\
+         ::pdalboost::is_pointer< Lhs_noref >::value && \
+         ::pdalboost::is_fundamental< Rhs_nocv >::value && \
+         (!  ::pdalboost::is_integral< Rhs_noref >::value )\
+      ) || \
+      /* Lhs==void* and (Rhs==fundamental or Rhs==pointer) */\
+      (\
+         ::pdalboost::is_pointer< Lhs_noref >::value && \
+         ::pdalboost::is_void< Lhs_noptr >::value && \
+         ( \
+            ::pdalboost::is_fundamental< Rhs_nocv >::value || \
+            ::pdalboost::is_pointer< Rhs_noref >::value\
+          )\
+      ) || \
+      /* Rhs==void* and (Lhs==fundamental or Lhs==pointer) */\
+      (\
+         ::pdalboost::is_pointer< Rhs_noref >::value && \
+         ::pdalboost::is_void< Rhs_noptr >::value && \
+         (\
+            ::pdalboost::is_fundamental< Lhs_nocv >::value || \
+            ::pdalboost::is_pointer< Lhs_noref >::value\
+          )\
+      ) ||\
+      /* Lhs=fundamental and Rhs=pointer */\
+      (\
+         ::pdalboost::is_fundamental< Lhs_nocv >::value && \
+         ::pdalboost::is_pointer< Rhs_noref >::value\
+      ) ||\
+      /* two different pointers */\
+      (\
+         ::pdalboost::is_pointer< Lhs_noref >::value && \
+         ::pdalboost::is_pointer< Rhs_noref >::value && \
+         (!  ::pdalboost::is_same< Lhs_nocv, Rhs_nocv >::value )\
+      )\
+      )
+
+
+#include <boost/type_traits/detail/has_binary_operator.hpp>
+
+#undef BOOST_TT_TRAIT_NAME
+#undef BOOST_TT_TRAIT_OP
+#undef BOOST_TT_FORBIDDEN_IF
+
+#endif
diff --git a/vendor/pdalboost/boost/type_traits/has_minus_assign.hpp b/vendor/pdalboost/boost/type_traits/has_minus_assign.hpp
new file mode 100644
index 0000000..d168540
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_minus_assign.hpp
@@ -0,0 +1,65 @@
+//  (C) Copyright 2009-2011 Frederic Bron.
+//
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_MINUS_ASSIGN_HPP_INCLUDED
+#define BOOST_TT_HAS_MINUS_ASSIGN_HPP_INCLUDED
+
+#define BOOST_TT_TRAIT_NAME has_minus_assign
+#define BOOST_TT_TRAIT_OP -=
+#define BOOST_TT_FORBIDDEN_IF\
+   (\
+      /* Lhs==pointer and Rhs==fundamental and Rhs!=integral */\
+      (\
+         ::pdalboost::is_pointer< Lhs_noref >::value && \
+         ::pdalboost::is_fundamental< Rhs_nocv >::value && \
+         (!  ::pdalboost::is_integral< Rhs_noref >::value )\
+      ) || \
+      /* Lhs==void* and Rhs==fundamental */\
+      (\
+         ::pdalboost::is_pointer< Lhs_noref >::value && \
+         ::pdalboost::is_void< Lhs_noptr >::value && \
+         ::pdalboost::is_fundamental< Rhs_nocv >::value\
+      ) || \
+      /* Rhs==void* and Lhs==fundamental */\
+      (\
+         ::pdalboost::is_pointer< Rhs_noref >::value && \
+         ::pdalboost::is_void< Rhs_noptr >::value && \
+         ::pdalboost::is_fundamental< Lhs_nocv >::value\
+      ) || \
+      /* Lhs=fundamental and Rhs=pointer */\
+      (\
+         ::pdalboost::is_fundamental< Lhs_nocv >::value && \
+         ::pdalboost::is_pointer< Rhs_noref >::value\
+      ) || \
+      /* Lhs==pointer and Rhs==pointer */\
+      (\
+         ::pdalboost::is_pointer< Lhs_noref >::value && \
+         ::pdalboost::is_pointer< Rhs_noref >::value\
+      ) || \
+      /* (Lhs==fundamental or Lhs==pointer) and (Rhs==fundamental or Rhs==pointer) and (Lhs==const) */\
+      (\
+         (\
+            ::pdalboost::is_fundamental< Lhs_nocv >::value || \
+            ::pdalboost::is_pointer< Lhs_noref >::value\
+         ) && \
+         (\
+            ::pdalboost::is_fundamental< Rhs_nocv >::value || \
+            ::pdalboost::is_pointer< Rhs_noref >::value\
+          ) && \
+         ::pdalboost::is_const< Lhs_noref >::value\
+      )\
+      )
+
+
+#include <boost/type_traits/detail/has_binary_operator.hpp>
+
+#undef BOOST_TT_TRAIT_NAME
+#undef BOOST_TT_TRAIT_OP
+#undef BOOST_TT_FORBIDDEN_IF
+
+#endif
diff --git a/vendor/pdalboost/boost/type_traits/has_new_operator.hpp b/vendor/pdalboost/boost/type_traits/has_new_operator.hpp
new file mode 100644
index 0000000..04137b9
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_new_operator.hpp
@@ -0,0 +1,147 @@
+
+//  (C) Copyright Runar Undheim, Robert Ramey & John Maddock 2008.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_NEW_OPERATOR_HPP_INCLUDED
+#define BOOST_TT_HAS_NEW_OPERATOR_HPP_INCLUDED
+
+#include <new> // std::nothrow_t
+#include <cstddef> // std::size_t
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if defined(new) 
+#  if BOOST_WORKAROUND(BOOST_MSVC, >= 1310)
+#     define BOOST_TT_AUX_MACRO_NEW_DEFINED
+#     pragma push_macro("new")
+#     undef new
+#  else
+#     error "Sorry but you can't include this header if 'new' is defined as a macro."
+#  endif
+#endif
+
+namespace pdalboost {
+namespace detail {
+    template <class U, U x> 
+    struct test;
+
+    template <typename T>
+    struct has_new_operator_impl {
+        template<class U>
+        static type_traits::yes_type check_sig1(
+            U*, 
+            test<
+            void *(*)(std::size_t),
+                &U::operator new
+            >* = NULL
+        );
+        template<class U>
+        static type_traits::no_type check_sig1(...);
+
+        template<class U>
+        static type_traits::yes_type check_sig2(
+            U*, 
+            test<
+            void *(*)(std::size_t, const std::nothrow_t&),
+                &U::operator new
+            >* = NULL
+        );
+        template<class U>
+        static type_traits::no_type check_sig2(...);
+
+        template<class U>
+        static type_traits::yes_type check_sig3(
+            U*, 
+            test<
+            void *(*)(std::size_t, void*),
+                &U::operator new
+            >* = NULL
+        );
+        template<class U>
+        static type_traits::no_type check_sig3(...);
+
+
+        template<class U>
+        static type_traits::yes_type check_sig4(
+            U*, 
+            test<
+            void *(*)(std::size_t),
+                &U::operator new[]
+            >* = NULL
+        );
+        template<class U>
+        static type_traits::no_type check_sig4(...);
+
+        template<class U>
+        static type_traits::yes_type check_sig5(
+            U*, 
+            test<
+            void *(*)(std::size_t, const std::nothrow_t&),
+                &U::operator new[]
+            >* = NULL
+        );
+        template<class U>
+        static type_traits::no_type check_sig5(...);
+
+        template<class U>
+        static type_traits::yes_type check_sig6(
+            U*, 
+            test<
+            void *(*)(std::size_t, void*),
+                &U::operator new[]
+            >* = NULL
+        );
+        template<class U>
+        static type_traits::no_type check_sig6(...);
+
+        // GCC2 won't even parse this template if we embed the computation
+        // of s1 in the computation of value.
+        #ifdef __GNUC__
+            BOOST_STATIC_CONSTANT(unsigned, s1 = sizeof(has_new_operator_impl<T>::template check_sig1<T>(0)));
+            BOOST_STATIC_CONSTANT(unsigned, s2 = sizeof(has_new_operator_impl<T>::template check_sig2<T>(0)));
+            BOOST_STATIC_CONSTANT(unsigned, s3 = sizeof(has_new_operator_impl<T>::template check_sig3<T>(0)));
+            BOOST_STATIC_CONSTANT(unsigned, s4 = sizeof(has_new_operator_impl<T>::template check_sig4<T>(0)));
+            BOOST_STATIC_CONSTANT(unsigned, s5 = sizeof(has_new_operator_impl<T>::template check_sig5<T>(0)));
+            BOOST_STATIC_CONSTANT(unsigned, s6 = sizeof(has_new_operator_impl<T>::template check_sig6<T>(0)));
+        #else
+            #if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)
+                #pragma warning(push)
+                #pragma warning(disable:6334)
+            #endif
+
+            BOOST_STATIC_CONSTANT(unsigned, s1 = sizeof(check_sig1<T>(0)));
+            BOOST_STATIC_CONSTANT(unsigned, s2 = sizeof(check_sig2<T>(0)));
+            BOOST_STATIC_CONSTANT(unsigned, s3 = sizeof(check_sig3<T>(0)));
+            BOOST_STATIC_CONSTANT(unsigned, s4 = sizeof(check_sig4<T>(0)));
+            BOOST_STATIC_CONSTANT(unsigned, s5 = sizeof(check_sig5<T>(0)));
+            BOOST_STATIC_CONSTANT(unsigned, s6 = sizeof(check_sig6<T>(0)));
+
+            #if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)
+                #pragma warning(pop)
+            #endif
+        #endif
+        BOOST_STATIC_CONSTANT(bool, value = 
+            (s1 == sizeof(type_traits::yes_type)) ||
+            (s2 == sizeof(type_traits::yes_type)) ||
+            (s3 == sizeof(type_traits::yes_type)) ||
+            (s4 == sizeof(type_traits::yes_type)) ||
+            (s5 == sizeof(type_traits::yes_type)) ||
+            (s6 == sizeof(type_traits::yes_type))
+        );
+    };
+} // namespace detail
+
+template <class T> struct has_new_operator : public integral_constant<bool, ::pdalboost::detail::has_new_operator_impl<T>::value>{};
+
+} // namespace pdalboost
+
+#if defined(BOOST_TT_AUX_MACRO_NEW_DEFINED)
+#  pragma pop_macro("new")
+#endif
+
+#endif // BOOST_TT_HAS_NEW_OPERATOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/has_nothrow_assign.hpp b/vendor/pdalboost/boost/type_traits/has_nothrow_assign.hpp
new file mode 100644
index 0000000..8f3ebe1
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_nothrow_assign.hpp
@@ -0,0 +1,83 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_NOTHROW_ASSIGN_HPP_INCLUDED
+#define BOOST_TT_HAS_NOTHROW_ASSIGN_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+
+#if !defined(BOOST_HAS_NOTHROW_ASSIGN) || defined(BOOST_MSVC) || defined(BOOST_INTEL)
+#include <boost/type_traits/has_trivial_assign.hpp>
+#if !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#include <boost/type_traits/declval.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_assignable.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#endif
+#endif
+#if defined(__GNUC__) || defined(__SUNPRO_CC)
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/is_assignable.hpp>
+#include <boost/type_traits/is_array.hpp>
+#ifdef BOOST_INTEL
+#include <boost/type_traits/is_pod.hpp>
+#endif
+#endif
+
+namespace pdalboost {
+
+#if !defined(BOOST_HAS_NOTHROW_ASSIGN) && !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+
+   namespace detail
+   {
+      template <class T, bool b1, bool b2> struct has_nothrow_assign_imp{ static const bool value = false; };
+      template <class T>          struct has_nothrow_assign_imp<T, false, true>{ static const bool value = noexcept(pdalboost::declval<typename add_reference<T>::type>() = pdalboost::declval<typename add_reference<T const>::type>()); };
+      template <class T, std::size_t N> struct has_nothrow_assign_imp<T[N], false, true>{ static const bool value = has_nothrow_assign_imp<T, false, true>::value; };
+      template <class T>          struct has_nothrow_assign_imp<T[], false, true>{ static const bool value = has_nothrow_assign_imp<T, false, true>::value; };
+   }
+
+#endif
+
+   template <class T>
+   struct has_nothrow_assign : public integral_constant < bool,
+#ifndef BOOST_HAS_NOTHROW_ASSIGN
+#if !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+      // Portable C++11 version:
+      detail::has_nothrow_assign_imp<T, 
+      (is_const<typename remove_reference<T>::type>::value || is_volatile<typename remove_reference<T>::type>::value || is_reference<T>::value), 
+      is_assignable<typename add_reference<T>::type, typename add_reference<const T>::type>::value
+      >::value
+#else
+      ::pdalboost::has_trivial_assign<T>::value
+#endif
+#else
+      BOOST_HAS_NOTHROW_ASSIGN(T)
+#endif
+   > {};
+
+template <class T, std::size_t N> struct has_nothrow_assign <T[N]> : public has_nothrow_assign<T> {};
+template <> struct has_nothrow_assign<void> : public false_type{};
+template <class T> struct has_nothrow_assign<T volatile> : public false_type{};
+template <class T> struct has_nothrow_assign<T&> : public false_type{};
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+template <class T> struct has_nothrow_assign<T&&> : public false_type{};
+#endif
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template <> struct has_nothrow_assign<void const> : public false_type{};
+template <> struct has_nothrow_assign<void const volatile> : public false_type{};
+template <> struct has_nothrow_assign<void volatile> : public false_type{};
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_HAS_NOTHROW_ASSIGN_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/has_nothrow_constructor.hpp b/vendor/pdalboost/boost/type_traits/has_nothrow_constructor.hpp
new file mode 100644
index 0000000..75b93b1
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_nothrow_constructor.hpp
@@ -0,0 +1,72 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED
+#define BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+#ifdef BOOST_HAS_NOTHROW_CONSTRUCTOR
+
+#if defined(BOOST_MSVC) || defined(BOOST_INTEL)
+#include <boost/type_traits/has_trivial_constructor.hpp>
+#endif
+#if defined(__GNUC__ ) || defined(__SUNPRO_CC)
+#include <boost/type_traits/is_default_constructible.hpp>
+#endif
+
+namespace pdalboost {
+
+template <class T> struct has_nothrow_constructor : public integral_constant<bool, BOOST_HAS_NOTHROW_CONSTRUCTOR(T)>{};
+
+#elif !defined(BOOST_NO_CXX11_NOEXCEPT)
+
+#include <boost/type_traits/is_default_constructible.hpp>
+#include <boost/type_traits/remove_all_extents.hpp>
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4197) // top-level volatile in cast is ignored
+#endif
+
+namespace pdalboost { namespace detail{
+
+   template <class T, bool b> struct has_nothrow_constructor_imp : public pdalboost::integral_constant<bool, false>{};
+   template <class T> struct has_nothrow_constructor_imp<T, true> : public pdalboost::integral_constant<bool, noexcept(T())>{};
+   template <class T, std::size_t N> struct has_nothrow_constructor_imp<T[N], true> : public has_nothrow_constructor_imp<T, true> {};
+}
+
+template <class T> struct has_nothrow_constructor : public detail::has_nothrow_constructor_imp<T, is_default_constructible<T>::value>{};
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#else
+
+#include <boost/type_traits/has_trivial_constructor.hpp>
+
+namespace pdalboost {
+
+template <class T> struct has_nothrow_constructor : public ::pdalboost::has_trivial_constructor<T> {};
+
+#endif
+
+template<> struct has_nothrow_constructor<void> : public false_type {};
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template<> struct has_nothrow_constructor<void const> : public false_type{};
+template<> struct has_nothrow_constructor<void const volatile> : public false_type{};
+template<> struct has_nothrow_constructor<void volatile> : public false_type{};
+#endif
+
+template <class T> struct has_nothrow_default_constructor : public has_nothrow_constructor<T>{};
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_HAS_NOTHROW_CONSTRUCTOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/has_nothrow_copy.hpp b/vendor/pdalboost/boost/type_traits/has_nothrow_copy.hpp
new file mode 100644
index 0000000..2bdb46f
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_nothrow_copy.hpp
@@ -0,0 +1,82 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED
+#define BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+#ifdef BOOST_HAS_NOTHROW_COPY
+
+#if defined(BOOST_CLANG) || defined(__GNUC__) || defined(__ghs__) || defined(__CODEGEARC__) || defined(__SUNPRO_CC)
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/is_copy_constructible.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_array.hpp>
+#ifdef BOOST_INTEL
+#include <boost/type_traits/is_pod.hpp>
+#endif
+#elif defined(BOOST_MSVC) || defined(BOOST_INTEL)
+#include <boost/type_traits/has_trivial_copy.hpp>
+#include <boost/type_traits/is_array.hpp>
+#ifdef BOOST_INTEL
+#include <boost/type_traits/add_lvalue_reference.hpp>
+#include <boost/type_traits/add_const.hpp>
+#endif
+#endif
+
+namespace pdalboost {
+
+template <class T> struct has_nothrow_copy_constructor : public integral_constant<bool, BOOST_HAS_NOTHROW_COPY(T)>{};
+
+#elif !defined(BOOST_NO_CXX11_NOEXCEPT)
+
+#include <boost/type_traits/declval.hpp>
+#include <boost/type_traits/is_copy_constructible.hpp>
+
+namespace pdalboost{
+
+namespace detail{
+
+template <class T, bool b>
+struct has_nothrow_copy_constructor_imp : public pdalboost::integral_constant<bool, false>{};
+template <class T>
+struct has_nothrow_copy_constructor_imp<T, true> : public pdalboost::integral_constant<bool, noexcept(T(pdalboost::declval<const T&>()))>{};
+
+}
+
+template <class T> struct has_nothrow_copy_constructor : public detail::has_nothrow_copy_constructor_imp<T, pdalboost::is_copy_constructible<T>::value>{};
+
+#else
+
+#include <boost/type_traits/has_trivial_copy.hpp>
+
+namespace pdalboost{
+
+template <class T> struct has_nothrow_copy_constructor : public integral_constant<bool, ::pdalboost::has_trivial_copy<T>::value>{};
+
+#endif
+
+template <> struct has_nothrow_copy_constructor<void> : public false_type{};
+template <class T> struct has_nothrow_copy_constructor<T volatile> : public false_type{};
+template <class T> struct has_nothrow_copy_constructor<T&> : public false_type{};
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) 
+template <class T> struct has_nothrow_copy_constructor<T&&> : public false_type{};
+#endif
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template <> struct has_nothrow_copy_constructor<void const> : public false_type{};
+template <> struct has_nothrow_copy_constructor<void volatile> : public false_type{};
+template <> struct has_nothrow_copy_constructor<void const volatile> : public false_type{};
+#endif
+
+template <class T> struct has_nothrow_copy : public has_nothrow_copy_constructor<T>{};
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_HAS_NOTHROW_COPY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/has_plus.hpp b/vendor/pdalboost/boost/type_traits/has_plus.hpp
new file mode 100644
index 0000000..2be7b66
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_plus.hpp
@@ -0,0 +1,54 @@
+//  (C) Copyright 2009-2011 Frederic Bron.
+//
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_PLUS_HPP_INCLUDED
+#define BOOST_TT_HAS_PLUS_HPP_INCLUDED
+
+#define BOOST_TT_TRAIT_NAME has_plus
+#define BOOST_TT_TRAIT_OP +
+#define BOOST_TT_FORBIDDEN_IF\
+   (\
+      /* Lhs==pointer and Rhs==pointer */\
+      (\
+         ::pdalboost::is_pointer< Lhs_noref >::value && \
+         ::pdalboost::is_pointer< Rhs_noref >::value\
+      ) || \
+      /* Lhs==void* and Rhs==fundamental */\
+      (\
+         ::pdalboost::is_pointer< Lhs_noref >::value && \
+         ::pdalboost::is_void< Lhs_noptr >::value && \
+         ::pdalboost::is_fundamental< Rhs_nocv >::value\
+      ) || \
+      /* Rhs==void* and Lhs==fundamental */\
+      (\
+         ::pdalboost::is_pointer< Rhs_noref >::value && \
+         ::pdalboost::is_void< Rhs_noptr >::value && \
+         ::pdalboost::is_fundamental< Lhs_nocv >::value\
+      ) || \
+      /* Lhs==pointer and Rhs==fundamental and Rhs!=integral */\
+      (\
+         ::pdalboost::is_pointer< Lhs_noref >::value && \
+         ::pdalboost::is_fundamental< Rhs_nocv >::value && \
+         (!  ::pdalboost::is_integral< Rhs_noref >::value )\
+      ) || \
+      /* Rhs==pointer and Lhs==fundamental and Lhs!=integral */\
+      (\
+         ::pdalboost::is_pointer< Rhs_noref >::value && \
+         ::pdalboost::is_fundamental< Lhs_nocv >::value && \
+         (!  ::pdalboost::is_integral< Lhs_noref >::value )\
+      )\
+   )
+
+
+#include <boost/type_traits/detail/has_binary_operator.hpp>
+
+#undef BOOST_TT_TRAIT_NAME
+#undef BOOST_TT_TRAIT_OP
+#undef BOOST_TT_FORBIDDEN_IF
+
+#endif
diff --git a/vendor/pdalboost/boost/type_traits/has_plus_assign.hpp b/vendor/pdalboost/boost/type_traits/has_plus_assign.hpp
new file mode 100644
index 0000000..2b3815b
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_plus_assign.hpp
@@ -0,0 +1,66 @@
+//  (C) Copyright 2009-2011 Frederic Bron.
+//
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_PLUS_ASSIGN_HPP_INCLUDED
+#define BOOST_TT_HAS_PLUS_ASSIGN_HPP_INCLUDED
+
+#define BOOST_TT_TRAIT_NAME has_plus_assign
+#define BOOST_TT_TRAIT_OP +=
+#define BOOST_TT_FORBIDDEN_IF\
+   (\
+      /* Lhs==pointer and Rhs==pointer */\
+      (\
+         ::pdalboost::is_pointer< Lhs_noref >::value && \
+         ::pdalboost::is_pointer< Rhs_noref >::value\
+      ) || \
+      /* Lhs==void* and Rhs==fundamental */\
+      (\
+         ::pdalboost::is_pointer< Lhs_noref >::value && \
+         ::pdalboost::is_void< Lhs_noptr >::value && \
+         ::pdalboost::is_fundamental< Rhs_nocv >::value\
+      ) || \
+      /* Rhs==void* and Lhs==fundamental */\
+      (\
+         ::pdalboost::is_pointer< Rhs_noref >::value && \
+         ::pdalboost::is_void< Rhs_noptr >::value && \
+         ::pdalboost::is_fundamental< Lhs_nocv >::value\
+      ) || \
+      /* Lhs==pointer and Rhs==fundamental and Rhs!=integral */\
+      (\
+         ::pdalboost::is_pointer< Lhs_noref >::value && \
+         ::pdalboost::is_fundamental< Rhs_nocv >::value && \
+         (!  ::pdalboost::is_integral< Rhs_noref >::value )\
+      ) || \
+      /* Rhs==pointer and Lhs==fundamental and Lhs!=bool */\
+      (\
+         ::pdalboost::is_pointer< Rhs_noref >::value && \
+         ::pdalboost::is_fundamental< Lhs_nocv >::value && \
+         (!  ::pdalboost::is_same< Lhs_nocv, bool >::value )\
+      ) || \
+      /* (Lhs==fundamental or Lhs==pointer) and (Rhs==fundamental or Rhs==pointer) and (Lhs==const) */\
+      (\
+         (\
+            ::pdalboost::is_fundamental< Lhs_nocv >::value || \
+            ::pdalboost::is_pointer< Lhs_noref >::value\
+          ) && \
+         ( \
+            ::pdalboost::is_fundamental< Rhs_nocv >::value || \
+            ::pdalboost::is_pointer< Rhs_noref >::value\
+          ) && \
+         ::pdalboost::is_const< Lhs_noref >::value\
+      )\
+      )
+
+
+#include <boost/type_traits/detail/has_binary_operator.hpp>
+
+#undef BOOST_TT_TRAIT_NAME
+#undef BOOST_TT_TRAIT_OP
+#undef BOOST_TT_FORBIDDEN_IF
+
+#endif
diff --git a/vendor/pdalboost/boost/type_traits/has_right_shift.hpp b/vendor/pdalboost/boost/type_traits/has_right_shift.hpp
new file mode 100644
index 0000000..f68d610
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_right_shift.hpp
@@ -0,0 +1,49 @@
+//  (C) Copyright 2009-2011 Frederic Bron.
+//
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_RIGHT_SHIFT_HPP_INCLUDED
+#define BOOST_TT_HAS_RIGHT_SHIFT_HPP_INCLUDED
+
+#define BOOST_TT_TRAIT_NAME has_right_shift
+#define BOOST_TT_TRAIT_OP >>
+#define BOOST_TT_FORBIDDEN_IF\
+   (\
+      /* Lhs==fundamental and Rhs==fundamental and (Lhs!=integral or Rhs!=integral) */\
+      (\
+         ::pdalboost::is_fundamental< Lhs_nocv >::value && \
+         ::pdalboost::is_fundamental< Rhs_nocv >::value && \
+         ( \
+            (!  ::pdalboost::is_integral< Lhs_noref >::value ) || \
+            (!  ::pdalboost::is_integral< Rhs_noref >::value )\
+         )\
+      )||\
+      /* Lhs==fundamental and Rhs==pointer */\
+      (\
+         ::pdalboost::is_fundamental< Lhs_nocv >::value && \
+         ::pdalboost::is_pointer< Rhs_noref >::value\
+      )||\
+      /* Rhs==fundamental and Lhs==pointer */\
+      (\
+         ::pdalboost::is_fundamental< Rhs_nocv >::value && \
+         ::pdalboost::is_pointer< Lhs_noref >::value\
+      )||\
+      /* Lhs==pointer and Rhs==pointer */\
+      (\
+         ::pdalboost::is_pointer< Lhs_noref >::value && \
+         ::pdalboost::is_pointer< Rhs_noref >::value\
+      )\
+      )
+
+
+#include <boost/type_traits/detail/has_binary_operator.hpp>
+
+#undef BOOST_TT_TRAIT_NAME
+#undef BOOST_TT_TRAIT_OP
+#undef BOOST_TT_FORBIDDEN_IF
+
+#endif
diff --git a/vendor/pdalboost/boost/type_traits/has_trivial_assign.hpp b/vendor/pdalboost/boost/type_traits/has_trivial_assign.hpp
new file mode 100644
index 0000000..9d70483
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_trivial_assign.hpp
@@ -0,0 +1,51 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_TRIVIAL_ASSIGN_HPP_INCLUDED
+#define BOOST_TT_HAS_TRIVIAL_ASSIGN_HPP_INCLUDED
+
+#include <boost/type_traits/detail/config.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+#if !defined(BOOST_HAS_TRIVIAL_ASSIGN) || defined(BOOST_MSVC) || defined(__GNUC__) || defined(BOOST_INTEL) || defined(__SUNPRO_CC) || defined(__clang)
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/is_assignable.hpp>
+#endif
+
+namespace pdalboost {
+
+   template <typename T>
+   struct has_trivial_assign : public integral_constant < bool,
+#ifdef BOOST_HAS_TRIVIAL_ASSIGN
+      BOOST_HAS_TRIVIAL_ASSIGN(T)
+#else
+      ::pdalboost::is_pod<T>::value && !::pdalboost::is_const<T>::value && !::pdalboost::is_volatile<T>::value
+#endif
+   > {};
+
+   template<> struct has_trivial_assign<void> : public false_type{};
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+   template<> struct has_trivial_assign<void const> : public false_type{};
+   template<> struct has_trivial_assign<void const volatile> : public false_type{};
+   template<> struct has_trivial_assign<void volatile> : public false_type{};
+#endif
+   template <class T> struct has_trivial_assign<T volatile> : public false_type{};
+   template <class T> struct has_trivial_assign<T&> : public false_type{};
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+   template <class T> struct has_trivial_assign<T&&> : public false_type{};
+#endif
+   // Arrays are not explictly assignable:
+   template <typename T, std::size_t N> struct has_trivial_assign<T[N]> : public false_type{};
+   template <typename T> struct has_trivial_assign<T[]> : public false_type{};
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_HAS_TRIVIAL_ASSIGN_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/has_trivial_constructor.hpp b/vendor/pdalboost/boost/type_traits/has_trivial_constructor.hpp
new file mode 100644
index 0000000..3a2f728
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_trivial_constructor.hpp
@@ -0,0 +1,57 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED
+#define BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/type_traits/is_default_constructible.hpp>
+
+#ifdef BOOST_HAS_TRIVIAL_CONSTRUCTOR
+#ifdef BOOST_HAS_SGI_TYPE_TRAITS
+#include <boost/type_traits/is_same.hpp>
+#elif defined(__GNUC__) || defined(__SUNPRO_CC)
+#include <boost/type_traits/is_volatile.hpp>
+#ifdef BOOST_INTEL
+#include <boost/type_traits/is_pod.hpp>
+#endif
+#endif
+#endif
+
+
+#if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 409)) || defined(BOOST_CLANG) || (defined(__SUNPRO_CC) && defined(BOOST_HAS_TRIVIAL_CONSTRUCTOR))
+#include <boost/type_traits/is_default_constructible.hpp>
+#define BOOST_TT_TRIVIAL_CONSTRUCT_FIX && is_default_constructible<T>::value
+#else
+//
+// Mot all compilers, particularly older GCC versions can handle the fix above.
+#define BOOST_TT_TRIVIAL_CONSTRUCT_FIX
+#endif
+
+namespace pdalboost {
+
+template <typename T> struct has_trivial_constructor
+#ifdef BOOST_HAS_TRIVIAL_CONSTRUCTOR
+   : public integral_constant <bool, ((::pdalboost::is_pod<T>::value || BOOST_HAS_TRIVIAL_CONSTRUCTOR(T)) BOOST_TT_TRIVIAL_CONSTRUCT_FIX)>{};
+#else
+   : public integral_constant <bool, ::pdalboost::is_pod<T>::value>{};
+#endif
+
+template <> struct has_trivial_constructor<void> : public pdalboost::false_type{};
+template <> struct has_trivial_constructor<void const> : public pdalboost::false_type{};
+template <> struct has_trivial_constructor<void const volatile> : public pdalboost::false_type{};
+template <> struct has_trivial_constructor<void volatile> : public pdalboost::false_type{};
+
+template <class T> struct has_trivial_default_constructor : public has_trivial_constructor<T> {};
+
+#undef BOOST_TT_TRIVIAL_CONSTRUCT_FIX
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_HAS_TRIVIAL_CONSTRUCTOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/has_trivial_copy.hpp b/vendor/pdalboost/boost/type_traits/has_trivial_copy.hpp
new file mode 100644
index 0000000..fd12d7f
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_trivial_copy.hpp
@@ -0,0 +1,62 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED
+#define BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/type_traits/is_reference.hpp>
+
+#if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 409)) || defined(BOOST_CLANG) || (defined(__SUNPRO_CC) && defined(BOOST_HAS_TRIVIAL_COPY))
+#include <boost/type_traits/is_copy_constructible.hpp>
+#define BOOST_TT_TRIVIAL_CONSTRUCT_FIX && is_copy_constructible<T>::value
+#else
+#define BOOST_TT_TRIVIAL_CONSTRUCT_FIX
+#endif
+
+#ifdef BOOST_INTEL
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_lvalue_reference.hpp>
+#endif
+
+namespace pdalboost {
+
+template <typename T> struct has_trivial_copy 
+: public integral_constant<bool, 
+#ifdef BOOST_HAS_TRIVIAL_COPY
+   BOOST_HAS_TRIVIAL_COPY(T) BOOST_TT_TRIVIAL_CONSTRUCT_FIX
+#else
+   ::pdalboost::is_pod<T>::value
+#endif
+>{};
+// Arrays are not explicitly copyable:
+template <typename T, std::size_t N> struct has_trivial_copy<T[N]> : public false_type{};
+template <typename T> struct has_trivial_copy<T[]> : public false_type{};
+// Are volatile types ever trivial?  We don't really know, so assume not:
+template <typename T> struct has_trivial_copy<T volatile> : public false_type{};
+
+template <> struct has_trivial_copy<void> : public false_type{};
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template <> struct has_trivial_copy<void const> : public false_type{};
+template <> struct has_trivial_copy<void volatile> : public false_type{};
+template <> struct has_trivial_copy<void const volatile> : public false_type{};
+#endif
+
+template <class T> struct has_trivial_copy<T&> : public false_type{};
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) 
+template <class T> struct has_trivial_copy<T&&> : public false_type{};
+#endif
+
+template <class T> struct has_trivial_copy_constructor : public has_trivial_copy<T>{};
+
+#undef BOOST_TT_TRIVIAL_CONSTRUCT_FIX
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_HAS_TRIVIAL_COPY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/has_trivial_destructor.hpp b/vendor/pdalboost/boost/type_traits/has_trivial_destructor.hpp
new file mode 100644
index 0000000..ba4197b
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_trivial_destructor.hpp
@@ -0,0 +1,48 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_TRIVIAL_DESTRUCTOR_HPP_INCLUDED
+#define BOOST_TT_HAS_TRIVIAL_DESTRUCTOR_HPP_INCLUDED
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+#ifdef BOOST_HAS_TRIVIAL_DESTRUCTOR
+
+#if defined(BOOST_INTEL) || defined(BOOST_MSVC)
+#include <boost/type_traits/is_pod.hpp>
+#endif
+#ifdef BOOST_HAS_SGI_TYPE_TRAITS
+#include <boost/type_traits/is_same.hpp>
+#endif
+
+#if defined(__GNUC__) || defined(__clang) || defined(__SUNPRO_CC)
+#include <boost/type_traits/is_destructible.hpp>
+#endif
+
+namespace pdalboost {
+
+template <typename T> struct has_trivial_destructor : public integral_constant<bool, BOOST_HAS_TRIVIAL_DESTRUCTOR(T)>{};
+#else
+#include <boost/type_traits/is_pod.hpp>
+
+namespace pdalboost{
+
+template <typename T> struct has_trivial_destructor : public integral_constant<bool, ::pdalboost::is_pod<T>::value>{};
+#endif
+
+template <> struct has_trivial_destructor<void> : public false_type{};
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template <> struct has_trivial_destructor<void const> : public false_type{};
+template <> struct has_trivial_destructor<void const volatile> : public false_type{};
+template <> struct has_trivial_destructor<void volatile> : public false_type{};
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_HAS_TRIVIAL_DESTRUCTOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/has_trivial_move_assign.hpp b/vendor/pdalboost/boost/type_traits/has_trivial_move_assign.hpp
new file mode 100644
index 0000000..7b02234
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_trivial_move_assign.hpp
@@ -0,0 +1,72 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  (C) Copyright Eric Friedman 2002-2003.
+//  (C) Copyright Antony Polukhin 2013.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_TRIVIAL_MOVE_ASSIGN_HPP_INCLUDED
+#define BOOST_TT_HAS_TRIVIAL_MOVE_ASSIGN_HPP_INCLUDED
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+#if !defined(BOOST_HAS_TRIVIAL_MOVE_ASSIGN) || defined(BOOST_MSVC) || defined(BOOST_INTEL)
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#ifdef BOOST_MSVC
+#include <boost/type_traits/is_reference.hpp>
+#endif
+#endif
+
+#if defined(__GNUC__) || defined(__clang)
+#include <boost/type_traits/is_assignable.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#endif
+
+#ifdef __SUNPRO_CC
+#include <boost/type_traits/is_assignable.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#if __cplusplus >= 201103
+#define SOLARIS_EXTRA_CHECK && is_assignable<typename remove_const<T>::type&, typename remove_const<T>::type&&>::value
+#endif
+#endif
+
+#ifndef SOLARIS_EXTRA_CHECK
+#define SOLARIS_EXTRA_CHECK
+#endif
+
+namespace pdalboost{
+
+template <typename T>
+struct has_trivial_move_assign : public integral_constant<bool,
+#ifdef BOOST_HAS_TRIVIAL_MOVE_ASSIGN
+   BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T)
+#else
+   ::pdalboost::is_pod<T>::value && !::pdalboost::is_const<T>::value && !::pdalboost::is_volatile<T>::value SOLARIS_EXTRA_CHECK
+#endif
+   > {};
+
+template <> struct has_trivial_move_assign<void> : public false_type{};
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template <> struct has_trivial_move_assign<void const> : public false_type{};
+template <> struct has_trivial_move_assign<void const volatile> : public false_type{};
+template <> struct has_trivial_move_assign<void volatile> : public false_type{};
+#endif
+template <class T> struct has_trivial_move_assign<T&> : public false_type{};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template <class T> struct has_trivial_move_assign<T&&> : public false_type{};
+#endif
+// Array types are not assignable:
+template <class T, std::size_t N> struct has_trivial_move_assign<T[N]> : public false_type{};
+template <class T> struct has_trivial_move_assign<T[]> : public false_type{};
+
+} // namespace pdalboost
+
+#undef SOLARIS_EXTRA_CHECK
+
+#endif // BOOST_TT_HAS_TRIVIAL_MOVE_ASSIGN_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/has_trivial_move_constructor.hpp b/vendor/pdalboost/boost/type_traits/has_trivial_move_constructor.hpp
new file mode 100644
index 0000000..61a5fe4
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/has_trivial_move_constructor.hpp
@@ -0,0 +1,77 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  (C) Copyright Eric Friedman 2002-2003.
+//  (C) Copyright Antony Polukhin 2013.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_HAS_TRIVIAL_MOVE_CONSTRUCTOR_HPP_INCLUDED
+#define BOOST_TT_HAS_TRIVIAL_MOVE_CONSTRUCTOR_HPP_INCLUDED
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+#ifdef BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR
+
+#if defined(BOOST_MSVC) || defined(BOOST_INTEL)
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#endif
+
+#if defined(__GNUC__) || defined(__clang)
+#include <boost/type_traits/is_constructible.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#endif
+
+
+namespace pdalboost {
+
+template <typename T> struct has_trivial_move_constructor : public integral_constant<bool, BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T)>{};
+
+#else
+
+#ifdef __SUNPRO_CC
+#include <boost/type_traits/is_constructible.hpp>
+#include <boost/type_traits/remove_const.hpp>
+#if __cplusplus >= 201103
+#define SOLARIS_EXTRA_CHECK && is_constructible<typename remove_const<T>::type, typename remove_const<T>::type&&>::value
+#endif
+#endif
+
+#ifndef SOLARIS_EXTRA_CHECK
+#define SOLARIS_EXTRA_CHECK
+#endif
+
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+
+namespace pdalboost {
+
+template <typename T> struct has_trivial_move_constructor 
+   : public integral_constant<bool, ::pdalboost::is_pod<T>::value && !::pdalboost::is_volatile<T>::value SOLARIS_EXTRA_CHECK>{};
+
+#undef SOLARIS_EXTRA_CHECK
+
+#endif
+
+template <> struct has_trivial_move_constructor<void> : public false_type{};
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template <> struct has_trivial_move_constructor<void const> : public false_type{};
+template <> struct has_trivial_move_constructor<void volatile> : public false_type{};
+template <> struct has_trivial_move_constructor<void const volatile> : public false_type{};
+#endif
+// What should we do with reference types??? The standard seems to suggest these are trivial, even if the thing they reference is not:
+template <class T> struct has_trivial_move_constructor<T&> : public true_type{};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template <class T> struct has_trivial_move_constructor<T&&> : public true_type{};
+#endif
+// Arrays can not be explicitly copied:
+template <class T, std::size_t N> struct has_trivial_move_constructor<T[N]> : public false_type{};
+template <class T> struct has_trivial_move_constructor<T[]> : public false_type{};
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_HAS_TRIVIAL_MOVE_CONSTRUCTOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/integral_constant.hpp b/vendor/pdalboost/boost/type_traits/integral_constant.hpp
new file mode 100644
index 0000000..7558184
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/integral_constant.hpp
@@ -0,0 +1,106 @@
+//  (C) Copyright John Maddock 2015. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP
+#define BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if (BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+   || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
+   || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) \
+   || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \
+   || BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, BOOST_TESTED_AT(810)) )
+
+
+namespace pdalboost{
+   namespace mpl
+   {
+      template <bool B> struct bool_;
+      template <class I, I val> struct integral_c;
+      struct integral_c_tag;
+   }
+}
+
+#else
+
+namespace mpl_{
+
+   template <bool B> struct bool_;
+   template <class I, I val> struct integral_c;
+   struct integral_c_tag;
+}
+
+namespace pdalboost
+{
+   namespace mpl
+   {
+      using ::mpl_::bool_;
+      using ::mpl_::integral_c;
+      using ::mpl_::integral_c_tag;
+   }
+}
+
+#endif
+
+namespace pdalboost{
+
+   template <class T, T val>
+   struct integral_constant
+   {
+      typedef mpl::integral_c_tag tag;
+      typedef T value_type;
+      typedef integral_constant<T, val> type;
+      static const T value = val;
+      //
+      // This helper function is just to disable type-punning 
+      // warnings from GCC:
+      //
+      template <class U>
+      static U& dereference(U* p) { return *p; }
+
+      operator const mpl::integral_c<T, val>& ()const
+      {
+         static const char data[sizeof(long)] = { 0 };
+         return dereference(reinterpret_cast<const mpl::integral_c<T, val>*>(&data));
+      }
+      BOOST_CONSTEXPR operator T()const { return val; }
+   };
+
+   template <class T, T val>
+   T const integral_constant<T, val>::value;
+      
+   template <bool val>
+   struct integral_constant<bool, val>
+   {
+      typedef mpl::integral_c_tag tag;
+      typedef bool value_type;
+      typedef integral_constant<bool, val> type;
+      static const bool value = val;
+      //
+      // This helper function is just to disable type-punning 
+      // warnings from GCC:
+      //
+      template <class T>
+      static T& dereference(T* p) { return *p; }
+
+      operator const mpl::bool_<val>& ()const
+      {
+         static const char data = 0;
+         return dereference(reinterpret_cast<const mpl::bool_<val>*>(&data));
+      }
+      BOOST_CONSTEXPR operator bool()const { return val; }
+   };
+
+   template <bool val>
+   bool const integral_constant<bool, val>::value;
+
+   typedef integral_constant<bool, true> true_type;
+   typedef integral_constant<bool, false> false_type;
+
+}
+
+#endif
diff --git a/vendor/pdalboost/boost/type_traits/integral_promotion.hpp b/vendor/pdalboost/boost/type_traits/integral_promotion.hpp
new file mode 100644
index 0000000..17d5803
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/integral_promotion.hpp
@@ -0,0 +1,181 @@
+// Copyright 2005 Alexander Nasonov.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef FILE_boost_type_traits_integral_promotion_hpp_INCLUDED
+#define FILE_boost_type_traits_integral_promotion_hpp_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+namespace pdalboost {
+
+namespace type_traits { namespace detail {
+
+// 4.5/2
+template <class T> struct need_promotion : public pdalboost::is_enum<T> {};
+
+// 4.5/1
+template<> struct need_promotion<char              > : public true_type {};
+template<> struct need_promotion<signed char       > : public true_type {};
+template<> struct need_promotion<unsigned char     > : public true_type {};
+template<> struct need_promotion<signed short int  > : public true_type {};
+template<> struct need_promotion<unsigned short int> : public true_type {};
+
+
+// Specializations for non-standard types.
+// Type is promoted if it's smaller then int.
+
+#define BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(T) \
+    template<> struct need_promotion<T>          \
+        : public integral_constant<bool, (sizeof(T) < sizeof(int))> {};
+
+// Same set of integral types as in boost/type_traits/is_integral.hpp.
+// Please, keep in sync.
+#if (defined(BOOST_INTEL_CXX_VERSION) && defined(_MSC_VER) && (BOOST_INTEL_CXX_VERSION <= 600)) \
+    || (defined(__BORLANDC__) && (__BORLANDC__ == 0x600) && (_MSC_VER < 1300))
+// TODO: common macro for this #if. Or better yet, PP SEQ of non-standard types.
+BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(__int8          )
+BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(unsigned __int8 )
+BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(__int16         )
+BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(unsigned __int16)
+BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(__int32         )
+BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(unsigned __int32)
+#ifdef __BORLANDC__
+BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(unsigned __int64)
+BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(         __int64)
+#endif
+#endif
+
+#if defined(BOOST_HAS_LONG_LONG)
+BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(pdalboost::ulong_long_type)
+BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(pdalboost::long_long_type )
+#elif defined(BOOST_HAS_MS_INT64)
+BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(unsigned __int64)
+BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE(         __int64)
+#endif
+
+#undef BOOST_TT_AUX_PROMOTE_NONSTANDARD_TYPE
+
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+// 4.5/2
+template<> struct need_promotion<wchar_t> : public true_type {};
+#endif
+
+// 4.5/3 (integral bit-field) is not supported.
+
+// 4.5/4
+template<> struct need_promotion<bool> : public true_type {};
+
+
+// Get promoted type by index and cv qualifiers.
+
+template<int Index, int IsConst, int IsVolatile> struct promote_from_index;
+
+#define BOOST_TT_AUX_PROMOTE_FROM_INDEX(N,T)                                   \
+    template<> struct promote_from_index<N,0,0> { typedef T type; };           \
+    template<> struct promote_from_index<N,0,1> { typedef T volatile type; };  \
+    template<> struct promote_from_index<N,1,0> { typedef T const type; };     \
+    template<> struct promote_from_index<N,1,1> { typedef T const volatile type; };
+
+
+BOOST_TT_AUX_PROMOTE_FROM_INDEX(1, int          )
+BOOST_TT_AUX_PROMOTE_FROM_INDEX(2, unsigned int )
+BOOST_TT_AUX_PROMOTE_FROM_INDEX(3, long         )
+BOOST_TT_AUX_PROMOTE_FROM_INDEX(4, unsigned long)
+
+
+// WARNING: integral promotions to non-standard types
+// long long and __int64 are not defined by the standard.
+// Additional specialisations and overloads shouldn't
+// introduce ambiguity, though.
+
+#if defined(BOOST_HAS_LONG_LONG)
+BOOST_TT_AUX_PROMOTE_FROM_INDEX(5, pdalboost::long_long_type )
+BOOST_TT_AUX_PROMOTE_FROM_INDEX(6, pdalboost::ulong_long_type)
+#elif defined(BOOST_HAS_MS_INT64)
+BOOST_TT_AUX_PROMOTE_FROM_INDEX(7, __int64         )
+BOOST_TT_AUX_PROMOTE_FROM_INDEX(8, unsigned __int64)
+#endif
+
+#undef BOOST_TT_AUX_PROMOTE_FROM_INDEX
+
+
+// Define BOOST_TT_AUX_PROMOTED_INDEX_TESTER:
+#if !defined(BOOST_MSVC)
+
+template<int N>
+struct sized_type_for_promotion
+{
+    typedef char (&type)[N];
+};
+
+#define BOOST_TT_AUX_PROMOTED_INDEX_TESTER(I,T) \
+    sized_type_for_promotion<I>::type promoted_index_tester(T);
+
+#else
+
+#define BOOST_TT_AUX_PROMOTED_INDEX_TESTER(I,T) \
+    char (&promoted_index_tester(T))[I];
+
+#endif
+
+BOOST_TT_AUX_PROMOTED_INDEX_TESTER(1, int          )
+BOOST_TT_AUX_PROMOTED_INDEX_TESTER(2, unsigned int )
+BOOST_TT_AUX_PROMOTED_INDEX_TESTER(3, long         )
+BOOST_TT_AUX_PROMOTED_INDEX_TESTER(4, unsigned long)
+
+#if defined(BOOST_HAS_LONG_LONG)
+BOOST_TT_AUX_PROMOTED_INDEX_TESTER(5, pdalboost::long_long_type )
+BOOST_TT_AUX_PROMOTED_INDEX_TESTER(6, pdalboost::ulong_long_type)
+#elif defined(BOOST_HAS_MS_INT64)
+BOOST_TT_AUX_PROMOTED_INDEX_TESTER(7, __int64         )
+BOOST_TT_AUX_PROMOTED_INDEX_TESTER(8, unsigned __int64)
+#endif
+
+#undef BOOST_TT_AUX_PROMOTED_INDEX_TESTER
+
+
+// Get an index of promoted type for type T.
+// Precondition: need_promotion<T>
+template<class T>
+struct promoted_index
+{
+    static T testee; // undefined
+    BOOST_STATIC_CONSTANT(int, value = sizeof(promoted_index_tester(+testee)) );
+    // Unary plus promotes testee                    LOOK HERE ---> ^
+};
+
+template<class T>
+struct integral_promotion_impl
+{
+    typedef BOOST_DEDUCED_TYPENAME promote_from_index<
+        (pdalboost::type_traits::detail::promoted_index<T>::value)
+      , (pdalboost::is_const<T>::value)
+      , (pdalboost::is_volatile<T>::value)
+      >::type type;
+};
+
+template<class T, bool b> struct integral_promotion { typedef T type; };
+template<class T> struct integral_promotion<T, true> : public integral_promotion_impl<T>{};
+
+} }
+
+template <class T> struct integral_promotion
+{
+private:
+   typedef pdalboost::type_traits::detail::need_promotion<typename remove_cv<T>::type> tag_type;
+public:
+   typedef typename pdalboost::type_traits::detail::integral_promotion<T, tag_type::value>::type type;
+};
+
+}
+
+#endif // #ifndef FILE_boost_type_traits_integral_promotion_hpp_INCLUDED
+
diff --git a/vendor/pdalboost/boost/type_traits/intrinsics.hpp b/vendor/pdalboost/boost/type_traits/intrinsics.hpp
new file mode 100644
index 0000000..2e23a56
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/intrinsics.hpp
@@ -0,0 +1,380 @@
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_INTRINSICS_HPP_INCLUDED
+#define BOOST_TT_INTRINSICS_HPP_INCLUDED
+
+#ifndef BOOST_TT_DISABLE_INTRINSICS
+
+#include <boost/config.hpp>
+
+#ifndef BOOST_TT_CONFIG_HPP_INCLUDED
+#include <boost/type_traits/detail/config.hpp>
+#endif
+
+//
+// Helper macros for builtin compiler support.
+// If your compiler has builtin support for any of the following
+// traits concepts, then redefine the appropriate macros to pick
+// up on the compiler support:
+//
+// (these should largely ignore cv-qualifiers)
+// BOOST_IS_UNION(T) should evaluate to true if T is a union type
+// BOOST_IS_POD(T) should evaluate to true if T is a POD type
+// BOOST_IS_EMPTY(T) should evaluate to true if T is an empty class type (and not a union)
+// BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) should evaluate to true if "T x;" has no effect
+// BOOST_HAS_TRIVIAL_COPY(T) should evaluate to true if T(t) <==> memcpy
+// BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) should evaluate to true if T(pdalboost::move(t)) <==> memcpy
+// BOOST_HAS_TRIVIAL_ASSIGN(T) should evaluate to true if t = u <==> memcpy
+// BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) should evaluate to true if t = pdalboost::move(u) <==> memcpy
+// BOOST_HAS_TRIVIAL_DESTRUCTOR(T) should evaluate to true if ~T() has no effect
+// BOOST_HAS_NOTHROW_CONSTRUCTOR(T) should evaluate to true if "T x;" can not throw
+// BOOST_HAS_NOTHROW_COPY(T) should evaluate to true if T(t) can not throw
+// BOOST_HAS_NOTHROW_ASSIGN(T) should evaluate to true if t = u can not throw
+// BOOST_HAS_VIRTUAL_DESTRUCTOR(T) should evaluate to true T has a virtual destructor
+// BOOST_IS_NOTHROW_MOVE_CONSTRUCT(T) should evaluate to true if T has a non-throwing move constructor.
+// BOOST_IS_NOTHROW_MOVE_ASSIGN(T) should evaluate to true if T has a non-throwing move assignment operator.
+//
+// The following can also be defined: when detected our implementation is greatly simplified.
+//
+// BOOST_IS_ABSTRACT(T) true if T is an abstract type
+// BOOST_IS_BASE_OF(T,U) true if T is a base class of U
+// BOOST_IS_CLASS(T) true if T is a class type (and not a union)
+// BOOST_IS_CONVERTIBLE(T,U) true if T is convertible to U
+// BOOST_IS_ENUM(T) true is T is an enum
+// BOOST_IS_POLYMORPHIC(T) true if T is a polymorphic type
+// BOOST_ALIGNMENT_OF(T) should evaluate to the alignment requirements of type T.
+//
+// define BOOST_TT_DISABLE_INTRINSICS to prevent any intrinsics being used (mostly used when testing)
+//
+
+#ifdef BOOST_HAS_SGI_TYPE_TRAITS
+    // Hook into SGI's __type_traits class, this will pick up user supplied
+    // specializations as well as SGI - compiler supplied specializations.
+#   include <boost/type_traits/is_same.hpp>
+#   ifdef __NetBSD__
+      // There are two different versions of type_traits.h on NetBSD on Spark
+      // use an implicit include via algorithm instead, to make sure we get
+      // the same version as the std lib:
+#     include <algorithm>
+#   else
+#    include <type_traits.h>
+#   endif
+#   define BOOST_IS_POD(T) ::pdalboost::is_same< typename ::__type_traits<T>::is_POD_type, ::__true_type>::value
+#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) ::pdalboost::is_same< typename ::__type_traits<T>::has_trivial_default_constructor, ::__true_type>::value
+#   define BOOST_HAS_TRIVIAL_COPY(T) ::pdalboost::is_same< typename ::__type_traits<T>::has_trivial_copy_constructor, ::__true_type>::value
+#   define BOOST_HAS_TRIVIAL_ASSIGN(T) ::pdalboost::is_same< typename ::__type_traits<T>::has_trivial_assignment_operator, ::__true_type>::value
+#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) ::pdalboost::is_same< typename ::__type_traits<T>::has_trivial_destructor, ::__true_type>::value
+
+#   ifdef __sgi
+#      define BOOST_HAS_TYPE_TRAITS_INTRINSICS
+#   endif
+#endif
+
+#if defined(__MSL_CPP__) && (__MSL_CPP__ >= 0x8000)
+    // Metrowerks compiler is acquiring intrinsic type traits support
+    // post version 8.  We hook into the published interface to pick up
+    // user defined specializations as well as compiler intrinsics as 
+    // and when they become available:
+#   include <msl_utility>
+#   define BOOST_IS_UNION(T) BOOST_STD_EXTENSION_NAMESPACE::is_union<T>::value
+#   define BOOST_IS_POD(T) BOOST_STD_EXTENSION_NAMESPACE::is_POD<T>::value
+#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_default_ctor<T>::value
+#   define BOOST_HAS_TRIVIAL_COPY(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_copy_ctor<T>::value
+#   define BOOST_HAS_TRIVIAL_ASSIGN(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_assignment<T>::value
+#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) BOOST_STD_EXTENSION_NAMESPACE::has_trivial_dtor<T>::value
+#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS
+#endif
+
+#if (defined(BOOST_MSVC) && defined(BOOST_MSVC_FULL_VER) && (BOOST_MSVC_FULL_VER >=140050215))\
+         || (defined(BOOST_INTEL) && defined(_MSC_VER) && (_MSC_VER >= 1500))
+//
+// Note that even though these intrinsics rely on other type traits classes
+// we do not #include those here as it produces cyclic dependencies and
+// can cause the intrinsics to not even be used at all!
+//
+#   define BOOST_IS_UNION(T) __is_union(T)
+#   define BOOST_IS_POD(T) (__is_pod(T) && __has_trivial_constructor(T))
+#   define BOOST_IS_EMPTY(T) __is_empty(T)
+#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)
+#   define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) || ( ::pdalboost::is_pod<T>::value && ! ::pdalboost::is_const<T>::value && !::pdalboost::is_volatile<T>::value))
+#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) || ::pdalboost::is_pod<T>::value)
+#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) || ::pdalboost::has_trivial_constructor<T>::value)
+#if !defined(BOOST_INTEL)
+#   define BOOST_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T) || ::pdalboost::has_trivial_copy<T>::value) && !is_array<T>::value)
+#   define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) || ::pdalboost::is_pod<T>::value)
+#elif (_MSC_VER >= 1900)
+#   define BOOST_HAS_NOTHROW_COPY(T) ((__is_nothrow_constructible(T, typename add_lvalue_reference<typename add_const<T>::type>::type)) && !is_array<T>::value)
+#   define BOOST_HAS_TRIVIAL_COPY(T) (__is_trivially_constructible(T, typename add_lvalue_reference<typename add_const<T>::type>::type))
+#endif
+#   define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) || ::pdalboost::has_trivial_assign<T>::value)
+#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
+
+#   define BOOST_IS_ABSTRACT(T) __is_abstract(T)
+#   define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same<T,U>::value)
+#   define BOOST_IS_CLASS(T) __is_class(T)
+#   define BOOST_IS_CONVERTIBLE(T,U) ((__is_convertible_to(T,U) || (is_same<T,U>::value && !is_function<U>::value)) && !__is_abstract(U))
+#   define BOOST_IS_ENUM(T) __is_enum(T)
+//  This one fails if the default alignment has been changed with /Zp:
+//  #   define BOOST_ALIGNMENT_OF(T) __alignof(T)
+
+#   if defined(_MSC_VER) && (_MSC_VER >= 1700)
+#       define BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) ((__has_trivial_move_constructor(T) || pdalboost::is_pod<T>::value) && ! ::pdalboost::is_volatile<T>::value && ! ::pdalboost::is_reference<T>::value)
+#       define BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) ((__has_trivial_move_assign(T) || pdalboost::is_pod<T>::value) && ! ::pdalboost::is_const<T>::value && !::pdalboost::is_volatile<T>::value && ! ::pdalboost::is_reference<T>::value)
+#   endif
+#ifndef BOOST_NO_CXX11_FINAL
+//  This one doesn't quite always do the right thing on older VC++ versions
+//  we really need it when the final keyword is supporyted though:
+#   define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)
+#endif
+#if _MSC_FULL_VER >= 180020827
+#   define BOOST_IS_NOTHROW_MOVE_ASSIGN(T) (__is_nothrow_assignable(T&, T&&))
+#   define BOOST_IS_NOTHROW_MOVE_CONSTRUCT(T) (__is_nothrow_constructible(T, T&&))
+#endif
+#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS
+#endif
+
+#if defined(__DMC__) && (__DMC__ >= 0x848)
+// For Digital Mars C++, www.digitalmars.com
+#   define BOOST_IS_UNION(T) (__typeinfo(T) & 0x400)
+#   define BOOST_IS_POD(T) (__typeinfo(T) & 0x800)
+#   define BOOST_IS_EMPTY(T) (__typeinfo(T) & 0x1000)
+#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__typeinfo(T) & 0x10)
+#   define BOOST_HAS_TRIVIAL_COPY(T) (__typeinfo(T) & 0x20)
+#   define BOOST_HAS_TRIVIAL_ASSIGN(T) (__typeinfo(T) & 0x40)
+#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__typeinfo(T) & 0x8)
+#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__typeinfo(T) & 0x80)
+#   define BOOST_HAS_NOTHROW_COPY(T) (__typeinfo(T) & 0x100)
+#   define BOOST_HAS_NOTHROW_ASSIGN(T) (__typeinfo(T) & 0x200)
+#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) (__typeinfo(T) & 0x4)
+#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS
+#endif
+
+#if defined(BOOST_CLANG) && defined(__has_feature) && !defined(__CUDACC__)
+//
+// Note that these intrinsics are disabled for the CUDA meta-compiler as it appears
+// to not support them, even though the underlying clang compiler does so.
+// This is a rubbish fix as it basically stops type traits from working correctly, 
+// but maybe the best we can do for now.  See https://svn.boost.org/trac/boost/ticket/10694
+//
+//
+// Note that even though these intrinsics rely on other type traits classes
+// we do not #include those here as it produces cyclic dependencies and
+// can cause the intrinsics to not even be used at all!
+//
+#   include <cstddef>
+
+#   if __has_feature(is_union)
+#     define BOOST_IS_UNION(T) __is_union(T)
+#   endif
+#   if (!defined(__GLIBCXX__) || (__GLIBCXX__ >= 20080306 && __GLIBCXX__ != 20080519)) && __has_feature(is_pod)
+#     define BOOST_IS_POD(T) __is_pod(T)
+#   endif
+#   if (!defined(__GLIBCXX__) || (__GLIBCXX__ >= 20080306 && __GLIBCXX__ != 20080519)) && __has_feature(is_empty)
+#     define BOOST_IS_EMPTY(T) __is_empty(T)
+#   endif
+#   if __has_feature(has_trivial_constructor)
+#     define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)
+#   endif
+#   if __has_feature(has_trivial_copy)
+#     define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference<T>::value)
+#   endif
+#   if __has_feature(has_trivial_assign)
+#     define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value && is_assignable<T&, const T&>::value)
+#   endif
+#   if __has_feature(has_trivial_destructor)
+#     define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T)  && is_destructible<T>::value)
+#   endif
+#   if __has_feature(has_nothrow_constructor)
+#     define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) && is_default_constructible<T>::value)
+#   endif
+#   if __has_feature(has_nothrow_copy)
+#     define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) && !is_volatile<T>::value && !is_reference<T>::value && is_copy_constructible<T>::value)
+#   endif
+#   if __has_feature(has_nothrow_assign)
+#     define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile<T>::value && is_assignable<T&, const T&>::value)
+#   endif
+#   if __has_feature(has_virtual_destructor)
+#     define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
+#   endif
+#   if __has_feature(is_abstract)
+#     define BOOST_IS_ABSTRACT(T) __is_abstract(T)
+#   endif
+#   if __has_feature(is_base_of)
+#     define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same<T,U>::value)
+#   endif
+#   if __has_feature(is_class)
+#     define BOOST_IS_CLASS(T) __is_class(T)
+#   endif
+#   if __has_feature(is_convertible_to)
+#     define BOOST_IS_CONVERTIBLE(T,U) __is_convertible_to(T,U)
+#   endif
+#   if __has_feature(is_enum)
+#     define BOOST_IS_ENUM(T) __is_enum(T)
+#   endif
+#   if __has_feature(is_polymorphic)
+#     define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)
+#   endif
+#   if __has_feature(has_trivial_move_constructor)
+#     define BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) (__has_trivial_move_constructor(T)  && is_constructible<T, T&&>::value && !::pdalboost::is_volatile<T>::value)
+#   endif
+#   if __has_feature(has_trivial_move_assign)
+#     define BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) (__has_trivial_move_assign(T) && is_assignable<T&, T&&>::value && !::pdalboost::is_volatile<T>::value)
+#   endif
+#   if (!defined(unix) && !defined(__unix__)) || defined(__LP64__) || !defined(__GNUC__)
+// GCC sometimes lies about alignment requirements
+// of type double on 32-bit unix platforms, use the
+// old implementation instead in that case:
+#     define BOOST_ALIGNMENT_OF(T) __alignof(T)
+#   endif
+#   if __has_feature(is_final)
+#     define BOOST_IS_FINAL(T) __is_final(T)
+#   endif
+
+#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS
+#endif
+
+#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3) && !defined(__GCCXML__))) && !defined(BOOST_CLANG)
+//
+// Note that even though these intrinsics rely on other type traits classes
+// we do not #include those here as it produces cyclic dependencies and
+// can cause the intrinsics to not even be used at all!
+//
+
+#ifdef BOOST_INTEL
+#  define BOOST_INTEL_TT_OPTS || is_pod<T>::value
+#else
+#  define BOOST_INTEL_TT_OPTS
+#endif
+
+#   define BOOST_IS_UNION(T) __is_union(T)
+#   define BOOST_IS_POD(T) __is_pod(T)
+#   define BOOST_IS_EMPTY(T) __is_empty(T)
+#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) ((__has_trivial_constructor(T) BOOST_INTEL_TT_OPTS) && ! ::pdalboost::is_volatile<T>::value)
+#   define BOOST_HAS_TRIVIAL_COPY(T) ((__has_trivial_copy(T) BOOST_INTEL_TT_OPTS) && !is_reference<T>::value)
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409
+#   define BOOST_HAS_TRIVIAL_ASSIGN(T) ((__has_trivial_assign(T) BOOST_INTEL_TT_OPTS) && ! ::pdalboost::is_volatile<T>::value && ! ::pdalboost::is_const<T>::value && is_assignable<T&, const T&>::value)
+#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) BOOST_INTEL_TT_OPTS && is_destructible<T>::value)
+#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) && is_default_constructible<T>::value BOOST_INTEL_TT_OPTS)
+#   define BOOST_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_reference<T>::value && is_copy_constructible<T>::value)
+#   define BOOST_HAS_NOTHROW_ASSIGN(T) ((__has_nothrow_assign(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_const<T>::value && is_assignable<T&, const T&>::value)
+#else
+#   define BOOST_HAS_TRIVIAL_ASSIGN(T) ((__has_trivial_assign(T) BOOST_INTEL_TT_OPTS) && ! ::pdalboost::is_volatile<T>::value && ! ::pdalboost::is_const<T>::value)
+#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T) BOOST_INTEL_TT_OPTS)
+#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) BOOST_INTEL_TT_OPTS)
+#   define BOOST_HAS_NOTHROW_COPY(T) ((__has_nothrow_copy(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_reference<T>::value && !is_array<T>::value)
+#   define BOOST_HAS_NOTHROW_ASSIGN(T) ((__has_nothrow_assign(T) BOOST_INTEL_TT_OPTS) && !is_volatile<T>::value && !is_const<T>::value && !is_array<T>::value)
+#endif
+#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
+
+#   define BOOST_IS_ABSTRACT(T) __is_abstract(T)
+#   define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same<T,U>::value)
+#   define BOOST_IS_CLASS(T) __is_class(T)
+#   define BOOST_IS_ENUM(T) __is_enum(T)
+#   define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)
+#   if (!defined(unix) && !defined(__unix__)) || defined(__LP64__)
+      // GCC sometimes lies about alignment requirements
+      // of type double on 32-bit unix platforms, use the
+      // old implementation instead in that case:
+#     define BOOST_ALIGNMENT_OF(T) __alignof__(T)
+#   endif
+#   if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7))
+#     define BOOST_IS_FINAL(T) __is_final(T)
+#   endif
+
+#   if (__GNUC__ >= 5) && (__cplusplus >= 201103)
+#     define BOOST_HAS_TRIVIAL_MOVE_ASSIGN(T) (__is_trivially_assignable(T&, T&&) && is_assignable<T&, T&&>::value && !::pdalboost::is_volatile<T>::value)
+#     define BOOST_HAS_TRIVIAL_MOVE_CONSTRUCTOR(T) (__is_trivially_constructible(T, T&&) && is_constructible<T, T&&>::value && !::pdalboost::is_volatile<T>::value)
+#   endif
+
+#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS
+#endif
+
+#if defined(__SUNPRO_CC) && (__SUNPRO_CC >= 0x5130)
+#   define BOOST_IS_UNION(T) __oracle_is_union(T)
+#   define BOOST_IS_POD(T) (__oracle_is_pod(T) && !is_function<T>::value)
+#   define BOOST_IS_EMPTY(T) __oracle_is_empty(T)
+#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__oracle_has_trivial_constructor(T) && ! ::pdalboost::is_volatile<T>::value)
+#   define BOOST_HAS_TRIVIAL_COPY(T) (__oracle_has_trivial_copy(T) && !is_reference<T>::value)
+#   define BOOST_HAS_TRIVIAL_ASSIGN(T) ((__oracle_has_trivial_assign(T) || __oracle_is_trivial(T)) && ! ::pdalboost::is_volatile<T>::value && ! ::pdalboost::is_const<T>::value && is_assignable<T&, const T&>::value)
+#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__oracle_has_trivial_destructor(T) && is_destructible<T>::value)
+#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) ((__oracle_has_nothrow_constructor(T) || __oracle_has_trivial_constructor(T) || __oracle_is_trivial(T)) && is_default_constructible<T>::value)
+//  __oracle_has_nothrow_copy appears to behave the same as __oracle_has_nothrow_assign, disabled for now:
+//#   define BOOST_HAS_NOTHROW_COPY(T) ((__oracle_has_nothrow_copy(T) || __oracle_has_trivial_copy(T) || __oracle_is_trivial(T)) && !is_volatile<T>::value && !is_reference<T>::value && is_copy_constructible<T>::value)
+#   define BOOST_HAS_NOTHROW_ASSIGN(T) ((__oracle_has_nothrow_assign(T) || __oracle_has_trivial_assign(T) || __oracle_is_trivial(T)) && !is_volatile<T>::value && !is_const<T>::value && is_assignable<T&, const T&>::value)
+#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __oracle_has_virtual_destructor(T)
+
+#   define BOOST_IS_ABSTRACT(T) __oracle_is_abstract(T)
+//#   define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same<T,U>::value)
+#   define BOOST_IS_CLASS(T) __oracle_is_class(T)
+#   define BOOST_IS_ENUM(T) __oracle_is_enum(T)
+#   define BOOST_IS_POLYMORPHIC(T) __oracle_is_polymorphic(T)
+#   define BOOST_ALIGNMENT_OF(T) __alignof__(T)
+#   define BOOST_IS_FINAL(T) __oracle_is_final(T)
+
+#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS
+#endif
+
+#if defined(__ghs__) && (__GHS_VERSION_NUMBER >= 600)
+#   include <boost/type_traits/is_same.hpp>
+#   include <boost/type_traits/is_reference.hpp>
+#   include <boost/type_traits/is_volatile.hpp>
+
+#   define BOOST_IS_UNION(T) __is_union(T)
+#   define BOOST_IS_POD(T) __is_pod(T)
+#   define BOOST_IS_EMPTY(T) __is_empty(T)
+#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T)
+#   define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy(T) && !is_reference<T>::value)
+#   define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value)
+#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
+#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T)
+#   define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T) && !is_volatile<T>::value && !is_reference<T>::value)
+#   define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile<T>::value)
+#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
+
+#   define BOOST_IS_ABSTRACT(T) __is_abstract(T)
+#   define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same<T,U>::value)
+#   define BOOST_IS_CLASS(T) __is_class(T)
+#   define BOOST_IS_ENUM(T) __is_enum(T)
+#   define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)
+#   define BOOST_ALIGNMENT_OF(T) __alignof__(T)
+#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS
+#endif
+
+# if defined(__CODEGEARC__)
+#   include <boost/type_traits/is_same.hpp>
+#   include <boost/type_traits/is_reference.hpp>
+#   include <boost/type_traits/is_volatile.hpp>
+#   include <boost/type_traits/is_void.hpp>
+
+#   define BOOST_IS_UNION(T) __is_union(T)
+#   define BOOST_IS_POD(T) __is_pod(T)
+#   define BOOST_IS_EMPTY(T) __is_empty(T)
+#   define BOOST_HAS_TRIVIAL_CONSTRUCTOR(T) (__has_trivial_default_constructor(T))
+#   define BOOST_HAS_TRIVIAL_COPY(T) (__has_trivial_copy_constructor(T) && !is_reference<T>::value)
+#   define BOOST_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) && !is_volatile<T>::value)
+#   define BOOST_HAS_TRIVIAL_DESTRUCTOR(T) (__has_trivial_destructor(T))
+#   define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_default_constructor(T))
+#   define BOOST_HAS_NOTHROW_COPY(T) (__has_nothrow_copy_constructor(T) && !is_volatile<T>::value && !is_reference<T>::value)
+#   define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile<T>::value)
+#   define BOOST_HAS_VIRTUAL_DESTRUCTOR(T) __has_virtual_destructor(T)
+
+#   define BOOST_IS_ABSTRACT(T) __is_abstract(T)
+#   define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_void<T>::value && !is_void<U>::value)
+#   define BOOST_IS_CLASS(T) __is_class(T)
+#   define BOOST_IS_CONVERTIBLE(T,U) (__is_convertible(T,U) || is_void<U>::value)
+#   define BOOST_IS_ENUM(T) __is_enum(T)
+#   define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)
+#   define BOOST_ALIGNMENT_OF(T) alignof(T)
+
+#   define BOOST_HAS_TYPE_TRAITS_INTRINSICS
+#endif
+
+#endif // BOOST_TT_DISABLE_INTRINSICS
+
+#endif // BOOST_TT_INTRINSICS_HPP_INCLUDED
+
diff --git a/vendor/pdalboost/boost/type_traits/is_abstract.hpp b/vendor/pdalboost/boost/type_traits/is_abstract.hpp
new file mode 100644
index 0000000..8251404
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_abstract.hpp
@@ -0,0 +1,149 @@
+#ifndef BOOST_TT_IS_ABSTRACT_CLASS_HPP
+#define BOOST_TT_IS_ABSTRACT_CLASS_HPP
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// is_abstract_class.hpp:
+//
+//  (C) Copyright 2002 Rani Sharoni (rani_sharoni at hotmail.com) and Robert Ramey
+//  Use, modification and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+//  
+//  See http://www.boost.org for updates, documentation, and revision history.
+//
+
+// Compile type discovery whether given type is abstract class or not.
+//
+//   Requires DR 337 to be supported by compiler
+//   (http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#337).
+//
+//
+// Believed (Jan 2004) to work on:
+//  - GCC 3.4
+//  - VC++ 7.1
+//  - compilers with new EDG frontend (Intel C++ 7, Comeau 4.3.2)
+//
+// Doesn't work on:
+//  - VC++6, VC++7.0 and less
+//  - GCC 3.3.X and less
+//  - Borland C++ 6 and less
+//      
+//
+// History:
+//  - Originally written by Rani Sharoni, see
+//    http://groups.google.com/groups?selm=df893da6.0207110613.75b2fe90%40posting.google.com
+//    At this time supported by EDG (Intel C++ 7, Comeau 4.3.2) and VC7.1.
+//  - Adapted and added into Boost.Serialization library by Robert Ramey 
+//    (starting with submission #10).
+//  - Jan 2004: GCC 3.4 fixed to support DR337 (Giovanni Bajo).
+//  - Jan 2004: modified to be part of Boost.TypeTraits (Pavel Vozenilek).
+//  - Nov 2004: Christoph Ludwig found that the implementation did not work with
+//              template types and gcc-3.4 or VC7.1, fix due to Christoph Ludwig
+//              and John Maddock.
+//  - Dec 2004: Added new config macro BOOST_NO_IS_ABSTRACT which causes the template
+//              to degrade gracefully, rather than trash the compiler (John Maddock).
+//
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#ifndef BOOST_IS_ABSTRACT
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/is_class.hpp>
+#ifdef BOOST_NO_IS_ABSTRACT
+#include <boost/type_traits/is_polymorphic.hpp>
+#endif
+#endif
+
+namespace pdalboost {
+
+namespace detail{
+
+#ifdef BOOST_IS_ABSTRACT
+template <class T>
+struct is_abstract_imp
+{
+   BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_ABSTRACT(T));
+};
+#elif !defined(BOOST_NO_IS_ABSTRACT)
+template<class T>
+struct is_abstract_imp2
+{
+   // Deduction fails if T is void, function type, 
+   // reference type (14.8.2/2)or an abstract class type 
+   // according to review status issue #337
+   //
+   template<class U>
+   static type_traits::no_type check_sig(U (*)[1]);
+   template<class U>
+   static type_traits::yes_type check_sig(...);
+   //
+   // T must be a complete type, further if T is a template then
+   // it must be instantiated in order for us to get the right answer:
+   //
+   BOOST_STATIC_ASSERT(sizeof(T) != 0);
+
+   // GCC2 won't even parse this template if we embed the computation
+   // of s1 in the computation of value.
+#ifdef __GNUC__
+   BOOST_STATIC_CONSTANT(std::size_t, s1 = sizeof(is_abstract_imp2<T>::template check_sig<T>(0)));
+#else
+#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)
+#pragma warning(push)
+#pragma warning(disable:6334)
+#endif
+   BOOST_STATIC_CONSTANT(std::size_t, s1 = sizeof(check_sig<T>(0)));
+#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)
+#pragma warning(pop)
+#endif
+#endif
+    
+   BOOST_STATIC_CONSTANT(bool, value = 
+      (s1 == sizeof(type_traits::yes_type)));
+};
+
+template <bool v>
+struct is_abstract_select
+{
+   template <class T>
+   struct rebind
+   {
+      typedef is_abstract_imp2<T> type;
+   };
+};
+template <>
+struct is_abstract_select<false>
+{
+   template <class T>
+   struct rebind
+   {
+      typedef false_type type;
+   };
+};
+
+template <class T>
+struct is_abstract_imp
+{
+   typedef is_abstract_select< ::pdalboost::is_class<T>::value> selector;
+   typedef typename selector::template rebind<T> binder;
+   typedef typename binder::type type;
+
+   BOOST_STATIC_CONSTANT(bool, value = type::value);
+};
+
+#endif
+}
+
+#ifndef BOOST_NO_IS_ABSTRACT
+template <class T> struct is_abstract : public integral_constant<bool, ::pdalboost::detail::is_abstract_imp<T>::value> {};
+#else
+template <class T> struct is_abstract : public integral_constant<bool, ::pdalboost::detail::is_polymorphic_imp<T>::value> {};
+#endif
+
+} // namespace pdalboost
+
+#endif //BOOST_TT_IS_ABSTRACT_CLASS_HPP
diff --git a/vendor/pdalboost/boost/type_traits/is_arithmetic.hpp b/vendor/pdalboost/boost/type_traits/is_arithmetic.hpp
new file mode 100644
index 0000000..0ff22dd
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_arithmetic.hpp
@@ -0,0 +1,22 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED
+#define BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED
+
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_floating_point.hpp>
+
+namespace pdalboost {
+
+template <class T>
+struct is_arithmetic : public integral_constant<bool, is_integral<T>::value || is_floating_point<T>::value> {};
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_ARITHMETIC_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_array.hpp b/vendor/pdalboost/boost/type_traits/is_array.hpp
new file mode 100644
index 0000000..c0717a3
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_array.hpp
@@ -0,0 +1,43 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+//  Hinnant & John Maddock 2000.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+// Some fixes for is_array are based on a newsgroup posting by Jonathan Lundquist.
+
+
+#ifndef BOOST_TT_IS_ARRAY_HPP_INCLUDED
+#define BOOST_TT_IS_ARRAY_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <cstddef>
+
+namespace pdalboost {
+
+#if defined( __CODEGEARC__ )
+   template <class T> struct is_array : public integral_constant<bool, __is_array(T)> {};
+#else
+   template <class T> struct is_array : public false_type {};
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+   template <class T, std::size_t N> struct is_array<T[N]> : public true_type {};
+   template <class T, std::size_t N> struct is_array<T const[N]> : public true_type{};
+   template <class T, std::size_t N> struct is_array<T volatile[N]> : public true_type{};
+   template <class T, std::size_t N> struct is_array<T const volatile[N]> : public true_type{};
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+   template <class T> struct is_array<T[]> : public true_type{};
+   template <class T> struct is_array<T const[]> : public true_type{};
+   template <class T> struct is_array<T const volatile[]> : public true_type{};
+   template <class T> struct is_array<T volatile[]> : public true_type{};
+#endif
+#endif
+
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_ARRAY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_assignable.hpp b/vendor/pdalboost/boost/type_traits/is_assignable.hpp
new file mode 100644
index 0000000..c37ebd8
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_assignable.hpp
@@ -0,0 +1,76 @@
+
+//  (C) Copyright John Maddock 2015.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_ASSIGNABLE_HPP_INCLUDED
+#define BOOST_TT_IS_ASSIGNABLE_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace pdalboost{
+
+   template <class T, class U = T> struct is_assignable;
+
+}
+
+#if !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800)
+
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/declval.hpp>
+
+namespace pdalboost{
+
+   namespace detail{
+
+      struct is_assignable_imp
+      {
+         template<typename T, typename U, typename = decltype(pdalboost::declval<T>() = pdalboost::declval<U>())>
+         static pdalboost::type_traits::yes_type test(int);
+
+         template<typename, typename>
+         static pdalboost::type_traits::no_type test(...);
+      };
+
+   }
+
+   template <class T, class U> struct is_assignable : public integral_constant<bool, sizeof(detail::is_assignable_imp::test<T, U>(0)) == sizeof(pdalboost::type_traits::yes_type)>{};
+   template <class T, std::size_t N, class U> struct is_assignable<T[N], U> : public is_assignable<T, U>{};
+   template <class T, std::size_t N, class U> struct is_assignable<T(&)[N], U> : public is_assignable<T&, U>{};
+   template <class T, class U> struct is_assignable<T[], U> : public is_assignable<T, U>{};
+   template <class T, class U> struct is_assignable<T(&)[], U> : public is_assignable<T&, U>{};
+   template <class U> struct is_assignable<void, U> : public integral_constant<bool, false>{};
+   template <class U> struct is_assignable<void const, U> : public integral_constant<bool, false>{};
+   template <class U> struct is_assignable<void volatile, U> : public integral_constant<bool, false>{};
+   template <class U> struct is_assignable<void const volatile, U> : public integral_constant<bool, false>{};
+
+#else
+
+#include <boost/type_traits/has_trivial_assign.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+
+namespace pdalboost{
+
+   // We don't know how to implement this:
+   template <class T, class U> struct is_assignable : public integral_constant<bool, false>{};
+   template <class T, class U> struct is_assignable<T&, U> : public integral_constant<bool, is_pod<T>::value && is_pod<typename remove_reference<U>::type>::value>{};
+   template <class T, class U> struct is_assignable<const T&, U> : public integral_constant<bool, false>{};
+   template <class U> struct is_assignable<void, U> : public integral_constant<bool, false>{};
+   template <class U> struct is_assignable<void const, U> : public integral_constant<bool, false>{};
+   template <class U> struct is_assignable<void volatile, U> : public integral_constant<bool, false>{};
+   template <class U> struct is_assignable<void const volatile, U> : public integral_constant<bool, false>{};
+   /*
+   template <> struct is_assignable<void, void> : public integral_constant<bool, false>{};
+   template <> struct is_assignable<void const, void const> : public integral_constant<bool, false>{};
+   template <> struct is_assignable<void volatile, void volatile> : public integral_constant<bool, false>{};
+   template <> struct is_assignable<void const volatile, void const volatile> : public integral_constant<bool, false>{};
+   */
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_ASSIGNABLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_base_and_derived.hpp b/vendor/pdalboost/boost/type_traits/is_base_and_derived.hpp
new file mode 100644
index 0000000..ffa1087
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_base_and_derived.hpp
@@ -0,0 +1,244 @@
+
+//  (C) Copyright Rani Sharoni 2003.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+ 
+#ifndef BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED
+#define BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#ifndef BOOST_IS_BASE_OF
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/config.hpp>
+#include <boost/static_assert.hpp>
+#endif
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost {
+
+namespace detail {
+
+#ifndef BOOST_IS_BASE_OF
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581)) \
+ && !BOOST_WORKAROUND(__SUNPRO_CC , <= 0x540) \
+ && !BOOST_WORKAROUND(__EDG_VERSION__, <= 243) \
+ && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+
+                             // The EDG version number is a lower estimate.
+                             // It is not currently known which EDG version
+                             // exactly fixes the problem.
+
+/*************************************************************************
+
+This version detects ambiguous base classes and private base classes
+correctly, and was devised by Rani Sharoni.
+
+Explanation by Terje Slettebo and Rani Sharoni.
+
+Let's take the multiple base class below as an example, and the following
+will also show why there's not a problem with private or ambiguous base
+class:
+
+struct B {};
+struct B1 : B {};
+struct B2 : B {};
+struct D : private B1, private B2 {};
+
+is_base_and_derived<B, D>::value;
+
+First, some terminology:
+
+SC  - Standard conversion
+UDC - User-defined conversion
+
+A user-defined conversion sequence consists of an SC, followed by an UDC,
+followed by another SC. Either SC may be the identity conversion.
+
+When passing the default-constructed Host object to the overloaded check_sig()
+functions (initialization 8.5/14/4/3), we have several viable implicit
+conversion sequences:
+
+For "static no_type check_sig(B const volatile *, int)" we have the conversion
+sequences:
+
+C -> C const (SC - Qualification Adjustment) -> B const volatile* (UDC)
+C -> D const volatile* (UDC) -> B1 const volatile* / B2 const volatile* ->
+     B const volatile* (SC - Conversion)
+
+For "static yes_type check_sig(D const volatile *, T)" we have the conversion
+sequence:
+
+C -> D const volatile* (UDC)
+
+According to 13.3.3.1/4, in context of user-defined conversion only the
+standard conversion sequence is considered when selecting the best viable
+function, so it only considers up to the user-defined conversion. For the
+first function this means choosing between C -> C const and C -> C, and it
+chooses the latter, because it's a proper subset (13.3.3.2/3/2) of the
+former. Therefore, we have:
+
+C -> D const volatile* (UDC) -> B1 const volatile* / B2 const volatile* ->
+     B const volatile* (SC - Conversion)
+C -> D const volatile* (UDC)
+
+Here, the principle of the "shortest subsequence" applies again, and it
+chooses C -> D const volatile*. This shows that it doesn't even need to
+consider the multiple paths to B, or accessibility, as that possibility is
+eliminated before it could possibly cause ambiguity or access violation.
+
+If D is not derived from B, it has to choose between C -> C const -> B const
+volatile* for the first function, and C -> D const volatile* for the second
+function, which are just as good (both requires a UDC, 13.3.3.2), had it not
+been for the fact that "static no_type check_sig(B const volatile *, int)" is
+not templated, which makes C -> C const -> B const volatile* the best choice
+(13.3.3/1/4), resulting in "no".
+
+Also, if Host::operator B const volatile* hadn't been const, the two
+conversion sequences for "static no_type check_sig(B const volatile *, int)", in
+the case where D is derived from B, would have been ambiguous.
+
+See also
+http://groups.google.com/groups?selm=df893da6.0301280859.522081f7%40posting.
+google.com and links therein.
+
+*************************************************************************/
+
+template <typename B, typename D>
+struct bd_helper
+{
+   //
+   // This VC7.1 specific workaround stops the compiler from generating
+   // an internal compiler error when compiling with /vmg (thanks to
+   // Aleksey Gurtovoy for figuring out the workaround).
+   //
+#if !BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+    template <typename T>
+    static type_traits::yes_type check_sig(D const volatile *, T);
+    static type_traits::no_type  check_sig(B const volatile *, int);
+#else
+    static type_traits::yes_type check_sig(D const volatile *, long);
+    static type_traits::no_type  check_sig(B const volatile * const&, int);
+#endif
+};
+
+template<typename B, typename D>
+struct is_base_and_derived_impl2
+{
+#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)
+#pragma warning(push)
+#pragma warning(disable:6334)
+#endif
+    //
+    // May silently do the wrong thing with incomplete types
+    // unless we trap them here:
+    //
+    BOOST_STATIC_ASSERT(sizeof(B) != 0);
+    BOOST_STATIC_ASSERT(sizeof(D) != 0);
+
+    struct Host
+    {
+#if !BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+        operator B const volatile *() const;
+#else
+        operator B const volatile * const&() const;
+#endif
+        operator D const volatile *();
+    };
+
+    BOOST_STATIC_CONSTANT(bool, value =
+        sizeof(bd_helper<B,D>::check_sig(Host(), 0)) == sizeof(type_traits::yes_type));
+#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)
+#pragma warning(pop)
+#endif
+};
+
+#else
+
+//
+// broken version:
+//
+template<typename B, typename D>
+struct is_base_and_derived_impl2
+{
+    BOOST_STATIC_CONSTANT(bool, value =
+        (::pdalboost::is_convertible<D*,B*>::value));
+};
+
+#define BOOST_BROKEN_IS_BASE_AND_DERIVED
+
+#endif
+
+template <typename B, typename D>
+struct is_base_and_derived_impl3
+{
+    BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template <bool ic1, bool ic2, bool iss>
+struct is_base_and_derived_select
+{
+   template <class T, class U>
+   struct rebind
+   {
+      typedef is_base_and_derived_impl3<T,U> type;
+   };
+};
+
+template <>
+struct is_base_and_derived_select<true,true,false>
+{
+   template <class T, class U>
+   struct rebind
+   {
+      typedef is_base_and_derived_impl2<T,U> type;
+   };
+};
+
+template <typename B, typename D>
+struct is_base_and_derived_impl
+{
+    typedef typename remove_cv<B>::type ncvB;
+    typedef typename remove_cv<D>::type ncvD;
+
+    typedef is_base_and_derived_select<
+       ::pdalboost::is_class<B>::value,
+       ::pdalboost::is_class<D>::value,
+       ::pdalboost::is_same<ncvB,ncvD>::value> selector;
+    typedef typename selector::template rebind<ncvB,ncvD> binder;
+    typedef typename binder::type bound_type;
+
+    BOOST_STATIC_CONSTANT(bool, value = bound_type::value);
+};
+#else
+template <typename B, typename D>
+struct is_base_and_derived_impl
+{
+    typedef typename remove_cv<B>::type ncvB;
+    typedef typename remove_cv<D>::type ncvD;
+
+    BOOST_STATIC_CONSTANT(bool, value = (BOOST_IS_BASE_OF(B,D) && ! ::pdalboost::is_same<ncvB,ncvD>::value));
+};
+#endif
+} // namespace detail
+
+template <class Base, class Derived> struct is_base_and_derived
+   : public integral_constant<bool, (::pdalboost::detail::is_base_and_derived_impl<Base, Derived>::value)> {};
+
+template <class Base, class Derived> struct is_base_and_derived<Base&, Derived> : public false_type{};
+template <class Base, class Derived> struct is_base_and_derived<Base, Derived&> : public false_type{};
+template <class Base, class Derived> struct is_base_and_derived<Base&, Derived&> : public false_type{};
+
+#if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610))
+template <class Base> struct is_base_and_derived<Base, Base> : public true_type{};
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_base_of.hpp b/vendor/pdalboost/boost/type_traits/is_base_of.hpp
new file mode 100644
index 0000000..21c09bb
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_base_of.hpp
@@ -0,0 +1,39 @@
+
+//  (C) Copyright Rani Sharoni 2003-2005.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+ 
+#ifndef BOOST_TT_IS_BASE_OF_HPP_INCLUDED
+#define BOOST_TT_IS_BASE_OF_HPP_INCLUDED
+
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_class.hpp>
+
+namespace pdalboost {
+
+   namespace detail{
+      template <class B, class D>
+      struct is_base_of_imp
+      {
+          typedef typename remove_cv<B>::type ncvB;
+          typedef typename remove_cv<D>::type ncvD;
+          BOOST_STATIC_CONSTANT(bool, value = (
+            (::pdalboost::detail::is_base_and_derived_impl<ncvB,ncvD>::value) ||
+            (::pdalboost::is_same<ncvB,ncvD>::value && ::pdalboost::is_class<ncvB>::value)));
+      };
+   }
+
+   template <class Base, class Derived> struct is_base_of
+      : public integral_constant<bool, (::pdalboost::detail::is_base_of_imp<Base, Derived>::value)> {};
+
+   template <class Base, class Derived> struct is_base_of<Base, Derived&> : false_type{};
+   template <class Base, class Derived> struct is_base_of<Base&, Derived&> : false_type{};
+   template <class Base, class Derived> struct is_base_of<Base&, Derived> : false_type{};
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_BASE_AND_DERIVED_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_class.hpp b/vendor/pdalboost/boost/type_traits/is_class.hpp
new file mode 100644
index 0000000..95847d7
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_class.hpp
@@ -0,0 +1,114 @@
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+//  Hinnant & John Maddock 2000-2003.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_IS_CLASS_HPP_INCLUDED
+#define BOOST_TT_IS_CLASS_HPP_INCLUDED
+
+#include <boost/type_traits/detail/config.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#ifndef BOOST_IS_CLASS
+#   include <boost/type_traits/is_union.hpp>
+
+#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
+#   include <boost/type_traits/detail/yes_no_type.hpp>
+#else
+#   include <boost/type_traits/is_scalar.hpp>
+#   include <boost/type_traits/is_array.hpp>
+#   include <boost/type_traits/is_reference.hpp>
+#   include <boost/type_traits/is_void.hpp>
+#   include <boost/type_traits/is_function.hpp>
+#endif
+
+#endif // BOOST_IS_CLASS
+
+namespace pdalboost {
+
+namespace detail {
+
+#ifndef BOOST_IS_CLASS
+#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
+
+// This is actually the conforming implementation which works with
+// abstract classes.  However, enough compilers have trouble with
+// it that most will use the one in
+// boost/type_traits/object_traits.hpp. This implementation
+// actually works with VC7.0, but other interactions seem to fail
+// when we use it.
+
+// is_class<> metafunction due to Paul Mensonides
+// (leavings at attbi.com). For more details:
+// http://groups.google.com/groups?hl=en&selm=000001c1cc83%24e154d5e0%247772e50c%40c161550a&rnum=1
+#if defined(__GNUC__)  && !defined(__EDG_VERSION__)
+
+template <class U> ::pdalboost::type_traits::yes_type is_class_tester(void(U::*)(void));
+template <class U> ::pdalboost::type_traits::no_type is_class_tester(...);
+
+template <typename T>
+struct is_class_impl
+{
+
+    BOOST_STATIC_CONSTANT(bool, value =
+            sizeof(is_class_tester<T>(0)) == sizeof(::pdalboost::type_traits::yes_type)
+            && ! ::pdalboost::is_union<T>::value
+        );
+};
+
+#else
+
+template <typename T>
+struct is_class_impl
+{
+    template <class U> static ::pdalboost::type_traits::yes_type is_class_tester(void(U::*)(void));
+    template <class U> static ::pdalboost::type_traits::no_type is_class_tester(...);
+
+    BOOST_STATIC_CONSTANT(bool, value =
+            sizeof(is_class_tester<T>(0)) == sizeof(::pdalboost::type_traits::yes_type)
+            && ! ::pdalboost::is_union<T>::value
+        );
+};
+
+#endif
+
+#else
+
+template <typename T>
+struct is_class_impl
+{
+    BOOST_STATIC_CONSTANT(bool, value =
+        ! ::pdalboost::is_union<T>::value >::value
+        && ! ::pdalboost::is_scalar<T>::value
+        && ! ::pdalboost::is_array<T>::value
+        && ! ::pdalboost::is_reference<T>::value
+        && ! ::pdalboost::is_void<T>::value
+        && ! ::pdalboost::is_function<T>::value
+        );
+};
+
+# endif // BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
+# else // BOOST_IS_CLASS
+template <typename T>
+struct is_class_impl
+{
+    BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_CLASS(T));
+};
+# endif // BOOST_IS_CLASS
+
+} // namespace detail
+
+template <class T> struct is_class : public integral_constant<bool, ::pdalboost::detail::is_class_impl<T>::value> {};
+# ifdef __EDG_VERSION__
+template <class T> struct is_class<const T> : public is_class<T>{};
+template <class T> struct is_class<const volatile T> : public is_class<T>{};
+template <class T> struct is_class<volatile T> : public is_class<T>{};
+# endif
+    
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_CLASS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_const.hpp b/vendor/pdalboost/boost/type_traits/is_const.hpp
new file mode 100644
index 0000000..6434dc4
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_const.hpp
@@ -0,0 +1,46 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, 
+//      Howard Hinnant and John Maddock 2000. 
+//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, 
+//    is_member_pointer based on the Simulated Partial Specialization work 
+//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or 
+//    http://groups.yahoo.com/group/boost/message/5441 
+//    Some workarounds in here use ideas suggested from "Generic<Programming>: 
+//    Mappings between Types and Values" 
+//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).
+
+
+#ifndef BOOST_TT_IS_CONST_HPP_INCLUDED
+#define BOOST_TT_IS_CONST_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+
+namespace pdalboost {
+
+#if defined( __CODEGEARC__ )
+
+   template <class T>
+   struct is_const : public integral_constant<bool, __is_const(T)> {};
+
+#else
+
+   template <class T>
+   struct is_const : public false_type {};
+   template <class T> struct is_const<T const> : public true_type{};
+   template <class T, size_t N> struct is_const<T const[N]> : public true_type{};
+   template <class T> struct is_const<T const[]> : public true_type{};
+
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_CONST_HPP_INCLUDED
+
diff --git a/vendor/pdalboost/boost/type_traits/is_constructible.hpp b/vendor/pdalboost/boost/type_traits/is_constructible.hpp
new file mode 100644
index 0000000..f075b30
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_constructible.hpp
@@ -0,0 +1,80 @@
+
+//  (C) Copyright John Maddock 2015.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_CONSTRUCTIBLE_HPP_INCLUDED
+#define BOOST_TT_IS_CONSTRUCTIBLE_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40500)
+
+#include <boost/type_traits/is_destructible.hpp>
+#include <boost/type_traits/is_default_constructible.hpp>
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/declval.hpp>
+
+namespace pdalboost{
+
+   namespace detail{
+
+      struct is_constructible_imp
+      {
+         template<typename T, typename ...TheArgs, typename = decltype(T(pdalboost::declval<TheArgs>()...))>
+         static pdalboost::type_traits::yes_type test(int);
+         template<typename, typename...>
+         static pdalboost::type_traits::no_type test(...);
+
+         template<typename T, typename Arg, typename = decltype(::new T(pdalboost::declval<Arg>()))>
+         static pdalboost::type_traits::yes_type test1(int);
+         template<typename, typename>
+         static pdalboost::type_traits::no_type test1(...);
+
+         template <typename T>
+         static pdalboost::type_traits::yes_type ref_test(T);
+         template <typename T>
+         static pdalboost::type_traits::no_type ref_test(...);
+      };
+
+   }
+
+   template <class T, class ...Args> struct is_constructible : public integral_constant<bool, sizeof(detail::is_constructible_imp::test<T, Args...>(0)) == sizeof(pdalboost::type_traits::yes_type)>{};
+   template <class T, class Arg> struct is_constructible<T, Arg> : public integral_constant<bool, is_destructible<T>::value && sizeof(detail::is_constructible_imp::test1<T, Arg>(0)) == sizeof(pdalboost::type_traits::yes_type)>{};
+   template <class Ref, class Arg> struct is_constructible<Ref&, Arg> : public integral_constant<bool, sizeof(detail::is_constructible_imp::ref_test<Ref&>(pdalboost::declval<Arg>())) == sizeof(pdalboost::type_traits::yes_type)>{};
+   template <class Ref, class Arg> struct is_constructible<Ref&&, Arg> : public integral_constant<bool, sizeof(detail::is_constructible_imp::ref_test<Ref&&>(pdalboost::declval<Arg>())) == sizeof(pdalboost::type_traits::yes_type)>{};
+
+   template <> struct is_constructible<void> : public false_type{};
+   template <> struct is_constructible<void const> : public false_type{};
+   template <> struct is_constructible<void const volatile> : public false_type{};
+   template <> struct is_constructible<void volatile> : public false_type{};
+
+   template <class T> struct is_constructible<T> : public is_default_constructible<T>{};
+
+#else
+
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_default_constructible.hpp>
+
+namespace pdalboost{
+
+   // We don't know how to implement this:
+   template <class T, class U = void> struct is_constructible : public is_convertible<U, T>{};
+   template <class T> struct is_constructible<T, void> : public is_default_constructible<T>{};
+   template <> struct is_constructible<void, void> : public false_type{};
+   template <> struct is_constructible<void const, void> : public false_type{};
+   template <> struct is_constructible<void const volatile, void> : public false_type{};
+   template <> struct is_constructible<void volatile, void> : public false_type{};
+   template <class Ref> struct is_constructible<Ref&, void> : public false_type{};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+   template <class Ref> struct is_constructible<Ref&&, void> : public false_type{};
+#endif
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_CONSTRUCTIBLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_convertible.hpp b/vendor/pdalboost/boost/type_traits/is_convertible.hpp
new file mode 100644
index 0000000..eaaed06
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_convertible.hpp
@@ -0,0 +1,488 @@
+
+// Copyright 2000 John Maddock (john at johnmaddock.co.uk)
+// Copyright 2000 Jeremy Siek (jsiek at lsc.nd.edu)
+// Copyright 1999, 2000 Jaakko Jarvi (jaakko.jarvi at cs.utu.fi)
+//
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED
+#define BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#ifndef BOOST_IS_CONVERTIBLE
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/detail/config.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_void.hpp>
+#if !defined(BOOST_NO_IS_ABSTRACT)
+#include <boost/type_traits/is_abstract.hpp>
+#endif
+#include <boost/type_traits/add_lvalue_reference.hpp>
+#include <boost/type_traits/add_rvalue_reference.hpp>
+#include <boost/type_traits/is_function.hpp>
+
+#if defined(__MWERKS__)
+#include <boost/type_traits/remove_reference.hpp>
+#endif
+#if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#  include <boost/type_traits/declval.hpp>
+#endif
+#elif defined(BOOST_MSVC) || defined(BOOST_INTEL)
+#include <boost/type_traits/is_function.hpp>
+#include <boost/type_traits/is_same.hpp>
+#endif // BOOST_IS_CONVERTIBLE
+
+namespace pdalboost {
+
+#ifndef BOOST_IS_CONVERTIBLE
+
+// is one type convertible to another?
+//
+// there are multiple versions of the is_convertible
+// template, almost every compiler seems to require its
+// own version.
+//
+// Thanks to Andrei Alexandrescu for the original version of the
+// conversion detection technique!
+//
+
+namespace detail {
+
+#if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !(defined(BOOST_GCC) && (BOOST_GCC < 40700))
+
+   // This is a C++11 conforming version, place this first and use it wherever possible:
+
+#  define BOOST_TT_CXX11_IS_CONVERTIBLE
+
+   template <class A, class B, class C>
+   struct or_helper
+   {
+      static const bool value = (A::value || B::value || C::value);
+   };
+
+   template<typename From, typename To, bool b = or_helper<pdalboost::is_void<From>, pdalboost::is_function<To>, pdalboost::is_array<To> >::value>
+   struct is_convertible_basic_impl
+   {
+      // Nothing converts to function or array, but void converts to void:
+      static const bool value = is_void<To>::value; 
+   };
+
+   template<typename From, typename To>
+   class is_convertible_basic_impl<From, To, false>
+   {
+      typedef char one;
+      typedef int  two;
+
+      template<typename To1>
+      static void test_aux(To1);
+
+      template<typename From1, typename To1>
+      static decltype(test_aux<To1>(pdalboost::declval<From1>()), one()) test(int);
+
+      template<typename, typename>
+      static two test(...);
+
+   public:
+      static const bool value = sizeof(test<From, To>(0)) == 1;
+   };
+
+#elif defined(__BORLANDC__) && (__BORLANDC__ < 0x560)
+//
+// special version for Borland compilers
+// this version breaks when used for some
+// UDT conversions:
+//
+template <typename From, typename To>
+struct is_convertible_impl
+{
+#pragma option push -w-8074
+    // This workaround for Borland breaks the EDG C++ frontend,
+    // so we only use it for Borland.
+    template <typename T> struct checker
+    {
+        static ::pdalboost::type_traits::no_type BOOST_TT_DECL _m_check(...);
+        static ::pdalboost::type_traits::yes_type BOOST_TT_DECL _m_check(T);
+    };
+
+    static typename add_lvalue_reference<From>::type  _m_from;
+    static bool const value = sizeof( checker<To>::_m_check(_m_from) )
+        == sizeof(::pdalboost::type_traits::yes_type);
+#pragma option pop
+};
+
+#elif defined(__GNUC__) || defined(__BORLANDC__) && (__BORLANDC__ < 0x600)
+// special version for gcc compiler + recent Borland versions
+// note that this does not pass UDT's through (...)
+
+struct any_conversion
+{
+    template <typename T> any_conversion(const volatile T&);
+    template <typename T> any_conversion(const T&);
+    template <typename T> any_conversion(volatile T&);
+    template <typename T> any_conversion(T&);
+};
+
+template <typename T> struct checker
+{
+    static pdalboost::type_traits::no_type _m_check(any_conversion ...);
+    static pdalboost::type_traits::yes_type _m_check(T, int);
+};
+
+template <typename From, typename To>
+struct is_convertible_basic_impl
+{
+    typedef typename add_lvalue_reference<From>::type lvalue_type;
+    typedef typename add_rvalue_reference<From>::type rvalue_type;
+    static lvalue_type _m_from;
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 6)))
+    static bool const value =
+        sizeof( pdalboost::detail::checker<To>::_m_check(static_cast<rvalue_type>(_m_from), 0) )
+        == sizeof(::pdalboost::type_traits::yes_type);
+#else
+    static bool const value =
+        sizeof( pdalboost::detail::checker<To>::_m_check(_m_from, 0) )
+        == sizeof(::pdalboost::type_traits::yes_type);
+#endif
+};
+
+#elif (defined(__EDG_VERSION__) && (__EDG_VERSION__ >= 245) && !defined(__ICL)) \
+      || defined(__IBMCPP__) || defined(__HP_aCC)
+//
+// This is *almost* an ideal world implementation as it doesn't rely
+// on undefined behaviour by passing UDT's through (...).
+// Unfortunately it doesn't quite pass all the tests for most compilers (sigh...)
+// Enable this for your compiler if is_convertible_test.cpp will compile it...
+//
+// Note we do not enable this for VC7.1, because even though it passes all the
+// type_traits tests it is known to cause problems when instantiation occurs
+// deep within the instantiation tree :-(
+//
+struct any_conversion
+{
+    template <typename T> any_conversion(const volatile T&);
+    template <typename T> any_conversion(const T&);
+    template <typename T> any_conversion(volatile T&);
+    // we need this constructor to catch references to functions
+    // (which can not be cv-qualified):
+    template <typename T> any_conversion(T&);
+};
+
+template <typename From, typename To>
+struct is_convertible_basic_impl
+{
+    static ::pdalboost::type_traits::no_type BOOST_TT_DECL _m_check(any_conversion ...);
+    static ::pdalboost::type_traits::yes_type BOOST_TT_DECL _m_check(To, int);
+    typedef typename add_lvalue_reference<From>::type lvalue_type;
+    typedef typename add_rvalue_reference<From>::type rvalue_type; 
+    static lvalue_type _m_from;
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+    BOOST_STATIC_CONSTANT(bool, value =
+        sizeof( _m_check(static_cast<rvalue_type>(_m_from), 0) ) == sizeof(::pdalboost::type_traits::yes_type)
+        );
+#else
+    BOOST_STATIC_CONSTANT(bool, value =
+        sizeof( _m_check(_m_from, 0) ) == sizeof(::pdalboost::type_traits::yes_type)
+        );
+#endif
+};
+
+#elif defined(__DMC__)
+
+struct any_conversion
+{
+    template <typename T> any_conversion(const volatile T&);
+    template <typename T> any_conversion(const T&);
+    template <typename T> any_conversion(volatile T&);
+    // we need this constructor to catch references to functions
+    // (which can not be cv-qualified):
+    template <typename T> any_conversion(T&);
+};
+
+template <typename From, typename To>
+struct is_convertible_basic_impl
+{
+    // Using '...' doesn't always work on Digital Mars. This version seems to.
+    template <class T>
+    static ::pdalboost::type_traits::no_type BOOST_TT_DECL _m_check(any_conversion,  float, T);
+    static ::pdalboost::type_traits::yes_type BOOST_TT_DECL _m_check(To, int, int);
+    typedef typename add_lvalue_reference<From>::type lvalue_type;
+    typedef typename add_rvalue_reference<From>::type rvalue_type;
+    static lvalue_type _m_from;
+
+    // Static constants sometime cause the conversion of _m_from to To to be
+    // called. This doesn't happen with an enum.
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+    enum { value =
+        sizeof( _m_check(static_cast<rvalue_type>(_m_from), 0, 0) ) == sizeof(::pdalboost::type_traits::yes_type)
+        };
+#else
+    enum { value =
+        sizeof( _m_check(_m_from, 0, 0) ) == sizeof(::pdalboost::type_traits::yes_type)
+        };
+#endif
+};
+
+#elif defined(__MWERKS__)
+// 
+// CW works with the technique implemented above for EDG, except when From
+// is a function type (or a reference to such a type), in which case
+// any_conversion won't be accepted as a valid conversion. We detect this
+// exceptional situation and channel it through an alternative algorithm.
+//
+
+template <typename From, typename To,bool FromIsFunctionRef>
+struct is_convertible_basic_impl_aux;
+
+struct any_conversion
+{
+    template <typename T> any_conversion(const volatile T&);
+    template <typename T> any_conversion(const T&);
+    template <typename T> any_conversion(volatile T&);
+    template <typename T> any_conversion(T&);
+};
+
+template <typename From, typename To>
+struct is_convertible_basic_impl_aux<From,To,false /*FromIsFunctionRef*/>
+{
+    static ::pdalboost::type_traits::no_type BOOST_TT_DECL _m_check(any_conversion ...);
+    static ::pdalboost::type_traits::yes_type BOOST_TT_DECL _m_check(To, int);
+    typedef typename add_lvalue_reference<From>::type lvalue_type;
+    typedef typename add_rvalue_reference<From>::type rvalue_type; 
+    static lvalue_type _m_from;
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+    BOOST_STATIC_CONSTANT(bool, value =
+        sizeof( _m_check(static_cast<rvalue_type>(_m_from), 0) ) == sizeof(::pdalboost::type_traits::yes_type)
+        );
+#else
+    BOOST_STATIC_CONSTANT(bool, value =
+        sizeof( _m_check(_m_from, 0) ) == sizeof(::pdalboost::type_traits::yes_type)
+        );
+#endif
+};
+
+template <typename From, typename To>
+struct is_convertible_basic_impl_aux<From,To,true /*FromIsFunctionRef*/>
+{
+    static ::pdalboost::type_traits::no_type BOOST_TT_DECL _m_check(...);
+    static ::pdalboost::type_traits::yes_type BOOST_TT_DECL _m_check(To);
+    typedef typename add_lvalue_reference<From>::type lvalue_type;
+    typedef typename add_rvalue_reference<From>::type rvalue_type;
+    static lvalue_type _m_from;
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+    BOOST_STATIC_CONSTANT(bool, value =
+        sizeof( _m_check(static_cast<rvalue_type>(_m_from)) ) == sizeof(::pdalboost::type_traits::yes_type)
+        );
+#else
+    BOOST_STATIC_CONSTANT(bool, value =
+        sizeof( _m_check(_m_from) ) == sizeof(::pdalboost::type_traits::yes_type)
+        );
+#endif
+};
+
+template <typename From, typename To>
+struct is_convertible_basic_impl:
+  is_convertible_basic_impl_aux<
+    From,To,
+    ::pdalboost::is_function<typename ::pdalboost::remove_reference<From>::type>::value
+  >
+{};
+
+#else
+//
+// This version seems to work pretty well for a wide spectrum of compilers,
+// however it does rely on undefined behaviour by passing UDT's through (...).
+//
+
+//Workaround for old compilers like MSVC 7.1 to avoid
+//forming a reference to an array of unknown bound
+template <typename From>
+struct is_convertible_basic_impl_add_lvalue_reference
+   : add_lvalue_reference<From>
+{};
+
+template <typename From>
+struct is_convertible_basic_impl_add_lvalue_reference<From[]>
+{
+    typedef From type [];
+};
+
+template <typename From, typename To>
+struct is_convertible_basic_impl
+{
+    static ::pdalboost::type_traits::no_type BOOST_TT_DECL _m_check(...);
+    static ::pdalboost::type_traits::yes_type BOOST_TT_DECL _m_check(To);
+    typedef typename is_convertible_basic_impl_add_lvalue_reference<From>::type lvalue_type;
+    static lvalue_type _m_from;
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4244)
+#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)
+#pragma warning(disable:6334)
+#endif
+#endif
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+    typedef typename add_rvalue_reference<From>::type rvalue_type; 
+    BOOST_STATIC_CONSTANT(bool, value =
+        sizeof( _m_check(static_cast<rvalue_type>(_m_from)) ) == sizeof(::pdalboost::type_traits::yes_type)
+        );
+#else
+    BOOST_STATIC_CONSTANT(bool, value =
+        sizeof( _m_check(_m_from) ) == sizeof(::pdalboost::type_traits::yes_type)
+        );
+#endif
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+};
+
+#endif // is_convertible_impl
+
+#if defined(__DMC__)
+// As before, a static constant sometimes causes errors on Digital Mars.
+template <typename From, typename To>
+struct is_convertible_impl
+{
+    enum { 
+       value = ( ::pdalboost::detail::is_convertible_basic_impl<From,To>::value && ! ::pdalboost::is_array<To>::value && ! ::pdalboost::is_function<To>::value) 
+    };
+};
+#elif !defined(__BORLANDC__) || __BORLANDC__ > 0x551
+template <typename From, typename To>
+struct is_convertible_impl
+{
+   BOOST_STATIC_CONSTANT(bool, value = ( ::pdalboost::detail::is_convertible_basic_impl<From, To>::value && !::pdalboost::is_array<To>::value && !::pdalboost::is_function<To>::value));
+};
+#endif
+
+template <bool trivial1, bool trivial2, bool abstract_target>
+struct is_convertible_impl_select
+{
+   template <class From, class To>
+   struct rebind
+   {
+      typedef is_convertible_impl<From, To> type;
+   };
+};
+
+template <>
+struct is_convertible_impl_select<true, true, false>
+{
+   template <class From, class To>
+   struct rebind
+   {
+      typedef true_type type;
+   };
+};
+
+template <>
+struct is_convertible_impl_select<false, false, true>
+{
+   template <class From, class To>
+   struct rebind
+   {
+      typedef false_type type;
+   };
+};
+
+template <>
+struct is_convertible_impl_select<true, false, true>
+{
+   template <class From, class To>
+   struct rebind
+   {
+      typedef false_type type;
+   };
+};
+
+template <typename From, typename To>
+struct is_convertible_impl_dispatch_base
+{
+#if !BOOST_WORKAROUND(__HP_aCC, < 60700)
+   typedef is_convertible_impl_select< 
+      ::pdalboost::is_arithmetic<From>::value, 
+      ::pdalboost::is_arithmetic<To>::value,
+#if !defined(BOOST_NO_IS_ABSTRACT) && !defined(BOOST_TT_CXX11_IS_CONVERTIBLE)
+      // We need to filter out abstract types, only if we don't have a strictly conforming C++11 version:
+      ::pdalboost::is_abstract<To>::value
+#else
+      false
+#endif
+   > selector;
+#else
+   typedef is_convertible_impl_select<false, false, false> selector;
+#endif
+   typedef typename selector::template rebind<From, To> isc_binder;
+   typedef typename isc_binder::type type;
+};
+
+template <typename From, typename To>
+struct is_convertible_impl_dispatch 
+   : public is_convertible_impl_dispatch_base<From, To>::type
+{};
+
+//
+// Now add the full and partial specialisations
+// for void types, these are common to all the
+// implementation above:
+//
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+
+template <> struct is_convertible_impl_dispatch<void, void> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void, void const> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void, void const volatile> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void, void volatile> : public true_type{};
+
+template <> struct is_convertible_impl_dispatch<void const, void> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void const, void const> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void const, void const volatile> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void const, void volatile> : public true_type{};
+
+template <> struct is_convertible_impl_dispatch<void const volatile, void> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void const volatile, void const> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void const volatile, void const volatile> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void const volatile, void volatile> : public true_type{};
+
+template <> struct is_convertible_impl_dispatch<void volatile, void> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void volatile, void const> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void volatile, void const volatile> : public true_type{};
+template <> struct is_convertible_impl_dispatch<void volatile, void volatile> : public true_type{};
+
+#else
+template <> struct is_convertible_impl_dispatch<void, void> : public true_type{};
+#endif // BOOST_NO_CV_VOID_SPECIALIZATIONS
+
+template <class To> struct is_convertible_impl_dispatch<void, To> : public false_type{};
+template <class From> struct is_convertible_impl_dispatch<From, void> : public false_type{};
+
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template <class To> struct is_convertible_impl_dispatch<void const, To> : public false_type{};
+template <class From> struct is_convertible_impl_dispatch<From, void const> : public false_type{};
+template <class To> struct is_convertible_impl_dispatch<void const volatile, To> : public false_type{};
+template <class From> struct is_convertible_impl_dispatch<From, void const volatile> : public false_type{};
+template <class To> struct is_convertible_impl_dispatch<void volatile, To> : public false_type{};
+template <class From> struct is_convertible_impl_dispatch<From, void volatile> : public false_type{};
+#endif
+
+} // namespace detail
+
+template <class From, class To> 
+struct is_convertible : public integral_constant<bool, ::pdalboost::detail::is_convertible_impl_dispatch<From, To>::value> {};
+
+#else
+
+template <class From, class To>
+struct is_convertible : public integral_constant<bool, BOOST_IS_CONVERTIBLE(From, To)> {};
+
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_CONVERTIBLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_copy_constructible.hpp b/vendor/pdalboost/boost/type_traits/is_copy_constructible.hpp
new file mode 100644
index 0000000..1a3674b
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_copy_constructible.hpp
@@ -0,0 +1,187 @@
+//  (C) Copyright Antony Polukhin 2013.
+//
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_COPY_CONSTRUCTIBLE_HPP_INCLUDED
+#define BOOST_TT_IS_COPY_CONSTRUCTIBLE_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40900)
+
+#include <boost/type_traits/is_constructible.hpp>
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1800)
+
+namespace pdalboost {
+
+template <class T> struct is_copy_constructible : public pdalboost::is_constructible<T, const T&>{};
+
+template <> struct is_copy_constructible<void> : public false_type{};
+template <> struct is_copy_constructible<void const> : public false_type{};
+template <> struct is_copy_constructible<void const volatile> : public false_type{};
+template <> struct is_copy_constructible<void volatile> : public false_type{};
+
+} // namespace pdalboost
+
+#else
+//
+// Special version for VC12 which has a problem when a base class (such as non_copyable) has a deleted
+// copy constructor.  In this case the compiler thinks there really is a copy-constructor and tries to
+// instantiate the deleted member.  std::is_copy_constructible has the same issue (or at least returns
+// an incorrect value, which just defers the issue into the users code) as well.  We can at least fix
+// pdalboost::non_copyable as a base class as a special case:
+//
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/noncopyable.hpp>
+
+namespace pdalboost {
+
+   namespace detail
+   {
+
+      template <class T, bool b> struct is_copy_constructible_imp : public pdalboost::is_constructible<T, const T&>{};
+      template <class T> struct is_copy_constructible_imp<T, true> : public false_type{};
+
+   }
+
+   template <class T> struct is_copy_constructible : public detail::is_copy_constructible_imp<T, is_base_and_derived<pdalboost::noncopyable, T>::value>{};
+
+   template <> struct is_copy_constructible<void> : public false_type{};
+   template <> struct is_copy_constructible<void const> : public false_type{};
+   template <> struct is_copy_constructible<void const volatile> : public false_type{};
+   template <> struct is_copy_constructible<void volatile> : public false_type{};
+
+} // namespace pdalboost
+
+#endif
+
+#else
+
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_rvalue_reference.hpp>
+#include <boost/type_traits/declval.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/declval.hpp>
+#include <boost/noncopyable.hpp>
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4181)
+#endif
+
+namespace pdalboost {
+
+   namespace detail{
+
+      template <bool DerivedFromNoncopyable, class T>
+      struct is_copy_constructible_impl2 {
+
+         // Intel compiler has problems with SFINAE for copy constructors and deleted functions:
+         //
+         // error: function *function_name* cannot be referenced -- it is a deleted function
+         // static pdalboost::type_traits::yes_type test(T1&, decltype(T1(pdalboost::declval<T1&>()))* = 0);
+         //                                                        ^ 
+         //
+         // MSVC 12.0 (Visual 2013) has problems when the copy constructor has been deleted. See:
+         // https://connect.microsoft.com/VisualStudio/feedback/details/800328/std-is-copy-constructible-is-broken
+#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) && !defined(BOOST_INTEL_CXX_VERSION) && !(defined(BOOST_MSVC) && _MSC_VER == 1800)
+
+#ifdef BOOST_NO_CXX11_DECLTYPE
+         template <class T1>
+         static pdalboost::type_traits::yes_type test(const T1&, pdalboost::mpl::int_<sizeof(T1(pdalboost::declval<const T1&>()))>* = 0);
+#else
+         template <class T1>
+         static pdalboost::type_traits::yes_type test(const T1&, decltype(T1(pdalboost::declval<const T1&>()))* = 0);
+#endif
+
+         static pdalboost::type_traits::no_type test(...);
+#else
+         template <class T1>
+         static pdalboost::type_traits::no_type test(const T1&, typename T1::boost_move_no_copy_constructor_or_assign* = 0);
+         static pdalboost::type_traits::yes_type test(...);
+#endif
+
+         // If you see errors like this:
+         //
+         //      `'T::T(const T&)' is private`
+         //      `boost/type_traits/is_copy_constructible.hpp:68:5: error: within this context`
+         //
+         // then you are trying to call that macro for a structure defined like that:
+         //
+         //      struct T {
+         //          ...
+         //      private:
+         //          T(const T &);
+         //          ...
+         //      };
+         //
+         // To fix that you must modify your structure:
+         //
+         //      // C++03 and C++11 version
+         //      struct T: private pdalboost::noncopyable {
+         //          ...
+         //      private:
+         //          T(const T &);
+         //          ...
+         //      };
+         //
+         //      // C++11 version
+         //      struct T {
+         //          ...
+         //      private:
+         //          T(const T &) = delete;
+         //          ...
+         //      };
+         BOOST_STATIC_CONSTANT(bool, value = (
+            sizeof(test(
+            pdalboost::declval<BOOST_DEDUCED_TYPENAME pdalboost::add_reference<T const>::type>()
+            )) == sizeof(pdalboost::type_traits::yes_type)
+            &&
+            !pdalboost::is_rvalue_reference<T>::value
+            && !pdalboost::is_array<T>::value
+            ));
+      };
+
+      template <class T>
+      struct is_copy_constructible_impl2<true, T> {
+         BOOST_STATIC_CONSTANT(bool, value = false);
+      };
+
+      template <class T>
+      struct is_copy_constructible_impl {
+
+         BOOST_STATIC_CONSTANT(bool, value = (
+            pdalboost::detail::is_copy_constructible_impl2<
+            pdalboost::is_base_and_derived<pdalboost::noncopyable, T>::value,
+            T
+            >::value
+            ));
+      };
+
+   } // namespace detail
+
+   template <class T> struct is_copy_constructible : public integral_constant<bool, ::pdalboost::detail::is_copy_constructible_impl<T>::value>{};
+   template <> struct is_copy_constructible<void> : public false_type{};
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+   template <> struct is_copy_constructible<void const> : public false_type{};
+   template <> struct is_copy_constructible<void volatile> : public false_type{};
+   template <> struct is_copy_constructible<void const volatile> : public false_type{};
+#endif
+
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif
+
+#endif // BOOST_TT_IS_COPY_CONSTRUCTIBLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_default_constructible.hpp b/vendor/pdalboost/boost/type_traits/is_default_constructible.hpp
new file mode 100644
index 0000000..ce498fd
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_default_constructible.hpp
@@ -0,0 +1,64 @@
+
+//  (C) Copyright John Maddock 2015.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_DEFAULT_CONSTRUCTIBLE_HPP_INCLUDED
+#define BOOST_TT_IS_DEFAULT_CONSTRUCTIBLE_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40500)
+
+#include <boost/type_traits/detail/yes_no_type.hpp>
+
+namespace pdalboost{
+
+   namespace detail{
+
+      struct is_default_constructible_imp
+      {
+         template<typename _Tp, typename = decltype(_Tp())>
+         static pdalboost::type_traits::yes_type test(int);
+
+         template<typename>
+         static pdalboost::type_traits::no_type test(...);
+      };
+
+   }
+
+   template <class T> struct is_default_constructible : public integral_constant<bool, sizeof(detail::is_default_constructible_imp::test<T>(0)) == sizeof(pdalboost::type_traits::yes_type)>{};
+   template <class T, std::size_t N> struct is_default_constructible<T[N]> : public is_default_constructible<T>{};
+   template <class T> struct is_default_constructible<T[]> : public is_default_constructible<T>{};
+   template <class T> struct is_default_constructible<T&> : public integral_constant<bool, false>{};
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) 
+   template <class T> struct is_default_constructible<T&&> : public integral_constant<bool, false>{};
+#endif
+   template <> struct is_default_constructible<void> : public integral_constant<bool, false>{};
+   template <> struct is_default_constructible<void const> : public integral_constant<bool, false>{};
+   template <> struct is_default_constructible<void volatile> : public integral_constant<bool, false>{};
+   template <> struct is_default_constructible<void const volatile> : public integral_constant<bool, false>{};
+
+#else
+
+#include <boost/type_traits/is_pod.hpp>
+
+namespace pdalboost{
+
+   // We don't know how to implement this, note we can not use has_trivial_constructor here
+   // because the correct implementation of that trait requires this one:
+   template <class T> struct is_default_constructible : public is_pod<T>{};
+   template <> struct is_default_constructible<void> : public integral_constant<bool, false>{};
+   template <> struct is_default_constructible<void const> : public integral_constant<bool, false>{};
+   template <> struct is_default_constructible<void volatile> : public integral_constant<bool, false>{};
+   template <> struct is_default_constructible<void const volatile> : public integral_constant<bool, false>{};
+
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_DEFAULT_CONSTRUCTIBLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_destructible.hpp b/vendor/pdalboost/boost/type_traits/is_destructible.hpp
new file mode 100644
index 0000000..74d6746
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_destructible.hpp
@@ -0,0 +1,60 @@
+
+//  (C) Copyright John Maddock 2015.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_DESTRUCTIBLE_HPP_INCLUDED
+#define BOOST_TT_IS_DESTRUCTIBLE_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !defined(BOOST_NO_CXX11_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, < 1800)
+
+#include <boost/type_traits/detail/yes_no_type.hpp>
+#include <boost/type_traits/declval.hpp>
+
+namespace pdalboost{
+
+   namespace detail{
+
+      struct is_destructible_imp
+      {
+         template<typename T, typename = decltype(pdalboost::declval<T&>().~T())>
+         static pdalboost::type_traits::yes_type test(int);
+         template<typename>
+         static pdalboost::type_traits::no_type test(...);
+      };
+
+   }
+
+   template <class T> struct is_destructible : public integral_constant<bool, sizeof(detail::is_destructible_imp::test<T>(0)) == sizeof(pdalboost::type_traits::yes_type)>{};
+
+#else
+
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/type_traits/is_class.hpp>
+
+namespace pdalboost{
+
+   // We don't know how to implement this:
+   template <class T> struct is_destructible : public integral_constant<bool, is_pod<T>::value || is_class<T>::value>{};
+#endif
+
+   template <> struct is_destructible<void> : public false_type{};
+   template <> struct is_destructible<void const> : public false_type{};
+   template <> struct is_destructible<void volatile> : public false_type{};
+   template <> struct is_destructible<void const volatile> : public false_type{};
+   template <class T> struct is_destructible<T&> : public is_destructible<T>{};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+   template <class T> struct is_destructible<T&&> : public is_destructible<T>{};
+#endif
+   template <class T, std::size_t N> struct is_destructible<T[N]> : public is_destructible<T>{};
+   template <class T> struct is_destructible<T[]> : public is_destructible<T>{};
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_DESTRUCTIBLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_empty.hpp b/vendor/pdalboost/boost/type_traits/is_empty.hpp
new file mode 100644
index 0000000..22ceeee
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_empty.hpp
@@ -0,0 +1,120 @@
+
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_EMPTY_HPP_INCLUDED
+#define BOOST_TT_IS_EMPTY_HPP_INCLUDED
+
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/detail/config.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/add_reference.hpp>
+
+#ifndef BOOST_INTERNAL_IS_EMPTY
+#define BOOST_INTERNAL_IS_EMPTY(T) false
+#else
+#define BOOST_INTERNAL_IS_EMPTY(T) BOOST_IS_EMPTY(T)
+#endif
+
+namespace pdalboost {
+
+namespace detail {
+
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4624) // destructor could not be generated
+#endif
+
+template <typename T>
+struct empty_helper_t1 : public T
+{
+    empty_helper_t1();  // hh compiler bug workaround
+    int i[256];
+private:
+   // suppress compiler warnings:
+   empty_helper_t1(const empty_helper_t1&);
+   empty_helper_t1& operator=(const empty_helper_t1&);
+};
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+struct empty_helper_t2 { int i[256]; };
+
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+
+template <typename T, bool is_a_class = false>
+struct empty_helper
+{
+    BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template <typename T>
+struct empty_helper<T, true>
+{
+    BOOST_STATIC_CONSTANT(
+        bool, value = (sizeof(empty_helper_t1<T>) == sizeof(empty_helper_t2))
+        );
+};
+
+template <typename T>
+struct is_empty_impl
+{
+    typedef typename remove_cv<T>::type cvt;
+    BOOST_STATIC_CONSTANT(
+        bool, 
+        value = ( ::pdalboost::detail::empty_helper<cvt,::pdalboost::is_class<T>::value>::value || BOOST_INTERNAL_IS_EMPTY(cvt)));
+};
+
+#else // __BORLANDC__
+
+template <typename T, bool is_a_class, bool convertible_to_int>
+struct empty_helper
+{
+    BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template <typename T>
+struct empty_helper<T, true, false>
+{
+    BOOST_STATIC_CONSTANT(bool, value = (
+        sizeof(empty_helper_t1<T>) == sizeof(empty_helper_t2)
+        ));
+};
+
+template <typename T>
+struct is_empty_impl
+{
+   typedef typename remove_cv<T>::type cvt;
+   typedef typename add_reference<T>::type r_type;
+
+   BOOST_STATIC_CONSTANT(
+       bool, value = (
+              ::pdalboost::detail::empty_helper<
+                  cvt
+                , ::pdalboost::is_class<T>::value
+                , ::pdalboost::is_convertible< r_type,int>::value
+              >::value || BOOST_INTERNAL_IS_EMPTY(cvt));
+};
+
+#endif // __BORLANDC__
+
+} // namespace detail
+
+template <class T> struct is_empty : integral_constant<bool, ::pdalboost::detail::is_empty_impl<T>::value> {};
+
+} // namespace pdalboost
+
+#undef BOOST_INTERNAL_IS_EMPTY
+
+#endif // BOOST_TT_IS_EMPTY_HPP_INCLUDED
+
diff --git a/vendor/pdalboost/boost/type_traits/is_enum.hpp b/vendor/pdalboost/boost/type_traits/is_enum.hpp
new file mode 100644
index 0000000..6d8ea04
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_enum.hpp
@@ -0,0 +1,166 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+//  Hinnant & John Maddock 2000.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_IS_ENUM_HPP_INCLUDED
+#define BOOST_TT_IS_ENUM_HPP_INCLUDED
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#ifndef BOOST_IS_ENUM
+#include <boost/type_traits/add_reference.hpp>
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#include <boost/type_traits/is_array.hpp>
+#ifdef __GNUC__
+#include <boost/type_traits/is_function.hpp>
+#endif
+#include <boost/type_traits/detail/config.hpp>
+#if defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) 
+#  include <boost/type_traits/is_class.hpp>
+#  include <boost/type_traits/is_union.hpp>
+#endif
+#endif
+
+namespace pdalboost {
+
+#ifndef BOOST_IS_ENUM
+#if !(defined(__BORLANDC__) && (__BORLANDC__ <= 0x551))
+
+namespace detail {
+
+#if defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) 
+
+template <typename T>
+struct is_class_or_union
+{
+   BOOST_STATIC_CONSTANT(bool, value = ::pdalboost::is_class<T>::value || ::pdalboost::is_union<T>::value);
+};
+
+#else
+
+template <typename T>
+struct is_class_or_union
+{
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x581))// we simply can't detect it this way.
+    BOOST_STATIC_CONSTANT(bool, value = false);
+# else
+    template <class U> static ::pdalboost::type_traits::yes_type is_class_or_union_tester(void(U::*)(void));
+
+#  if BOOST_WORKAROUND(__MWERKS__, <= 0x3000) // no SFINAE
+    static ::pdalboost::type_traits::no_type is_class_or_union_tester(...);
+    BOOST_STATIC_CONSTANT(
+        bool, value = sizeof(is_class_or_union_tester(0)) == sizeof(::pdalboost::type_traits::yes_type));
+#  else
+    template <class U>
+    static ::pdalboost::type_traits::no_type is_class_or_union_tester(...);
+    BOOST_STATIC_CONSTANT(
+        bool, value = sizeof(is_class_or_union_tester<T>(0)) == sizeof(::pdalboost::type_traits::yes_type));
+#  endif
+# endif
+};
+#endif
+
+struct int_convertible
+{
+    int_convertible(int);
+};
+
+// Don't evaluate convertibility to int_convertible unless the type
+// is non-arithmetic. This suppresses warnings with GCC.
+template <bool is_typename_arithmetic_or_reference = true>
+struct is_enum_helper
+{
+    template <typename T> struct type
+    {
+        BOOST_STATIC_CONSTANT(bool, value = false);
+    };
+};
+
+template <>
+struct is_enum_helper<false>
+{
+    template <typename T> struct type
+    {
+       static const bool value = ::pdalboost::is_convertible<typename pdalboost::add_reference<T>::type, ::pdalboost::detail::int_convertible>::value;
+    };
+};
+
+template <typename T> struct is_enum_impl
+{
+   //typedef ::pdalboost::add_reference<T> ar_t;
+   //typedef typename ar_t::type r_type;
+
+#if defined(__GNUC__)
+
+#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
+    
+   // We MUST check for is_class_or_union on conforming compilers in
+   // order to correctly deduce that noncopyable types are not enums
+   // (dwa 2002/04/15)...
+   BOOST_STATIC_CONSTANT(bool, selector =
+           ::pdalboost::is_arithmetic<T>::value
+         || ::pdalboost::is_reference<T>::value
+         || ::pdalboost::is_function<T>::value
+         || is_class_or_union<T>::value
+         || is_array<T>::value);
+#else
+   // ...however, not checking is_class_or_union on non-conforming
+   // compilers prevents a dependency recursion.
+   BOOST_STATIC_CONSTANT(bool, selector =
+           ::pdalboost::is_arithmetic<T>::value
+         || ::pdalboost::is_reference<T>::value
+         || ::pdalboost::is_function<T>::value
+         || is_array<T>::value);
+#endif // BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
+
+#else // !defined(__GNUC__):
+    
+   BOOST_STATIC_CONSTANT(bool, selector =
+           ::pdalboost::is_arithmetic<T>::value
+         || ::pdalboost::is_reference<T>::value
+         || is_class_or_union<T>::value
+         || is_array<T>::value);
+    
+#endif
+
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+    typedef ::pdalboost::detail::is_enum_helper<
+          ::pdalboost::detail::is_enum_impl<T>::selector
+        > se_t;
+#else
+    typedef ::pdalboost::detail::is_enum_helper<selector> se_t;
+#endif
+
+    typedef typename se_t::template type<T> helper;
+    BOOST_STATIC_CONSTANT(bool, value = helper::value);
+};
+
+} // namespace detail
+
+template <class T> struct is_enum : public integral_constant<bool, ::pdalboost::detail::is_enum_impl<T>::value> {};
+
+#else // __BORLANDC__
+//
+// buggy is_convertible prevents working
+// implementation of is_enum:
+template <class T> struct is_enum : public integral_constant<bool, false> {};
+
+#endif
+
+#else // BOOST_IS_ENUM
+
+template <class T> struct is_enum : public integral_constant<bool, BOOST_IS_ENUM(T)> {};
+
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_ENUM_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_final.hpp b/vendor/pdalboost/boost/type_traits/is_final.hpp
new file mode 100644
index 0000000..e3bfa01
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_final.hpp
@@ -0,0 +1,30 @@
+
+//  Copyright (c) 2014 Agustin Berge
+//
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_IS_FINAL_HPP_INCLUDED
+#define BOOST_TT_IS_FINAL_HPP_INCLUDED
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#ifdef BOOST_IS_FINAL
+#include <boost/type_traits/remove_cv.hpp>
+#endif
+
+namespace pdalboost {
+
+#ifdef BOOST_IS_FINAL
+template <class T> struct is_final : public integral_constant<bool, BOOST_IS_FINAL(typename remove_cv<T>::type)> {};
+#else
+template <class T> struct is_final : public integral_constant<bool, false> {};
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_FINAL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_float.hpp b/vendor/pdalboost/boost/type_traits/is_float.hpp
new file mode 100644
index 0000000..ba0a717
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_float.hpp
@@ -0,0 +1,20 @@
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED
+
+// should be the last #include
+#include <boost/type_traits/is_floating_point.hpp>
+
+namespace pdalboost {
+
+//* is a type T a floating-point type described in the standard (3.9.1p8)
+   template <class T> struct is_float : public is_floating_point<T> {};
+} // namespace pdalboost
+
+#endif // BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_floating_point.hpp b/vendor/pdalboost/boost/type_traits/is_floating_point.hpp
new file mode 100644
index 0000000..917029c
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_floating_point.hpp
@@ -0,0 +1,30 @@
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000-2005.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TYPE_TRAITS_IS_FLOATING_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_IS_FLOATING_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+
+namespace pdalboost {
+
+//* is a type T a floating-point type described in the standard (3.9.1p8)
+   template <class T> struct is_floating_point : public false_type{};
+   template <class T> struct is_floating_point<const T> : public is_floating_point<T>{};
+   template <class T> struct is_floating_point<volatile const T> : public is_floating_point<T>{};
+   template <class T> struct is_floating_point<volatile T> : public is_floating_point<T>{};
+   template<> struct is_floating_point<float> : public true_type{};
+   template<> struct is_floating_point<double> : public true_type{};
+   template<> struct is_floating_point<long double> : public true_type{};
+   
+#if defined(BOOST_HAS_FLOAT128)
+   template<> struct is_floating_point<__float128> : public true_type{};
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TYPE_TRAITS_IS_FLOAT_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_function.hpp b/vendor/pdalboost/boost/type_traits/is_function.hpp
new file mode 100644
index 0000000..abdda03
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_function.hpp
@@ -0,0 +1,102 @@
+
+//  Copyright 2000 John Maddock (john at johnmaddock.co.uk)
+//  Copyright 2002 Aleksey Gurtovoy (agurtovoy at meta-comm.com)
+//
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_FUNCTION_HPP_INCLUDED
+#define BOOST_TT_IS_FUNCTION_HPP_INCLUDED
+
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/type_traits/detail/config.hpp>
+
+#if !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
+#   include <boost/type_traits/detail/is_function_ptr_helper.hpp>
+#else
+#   include <boost/type_traits/detail/is_function_ptr_tester.hpp>
+#   include <boost/type_traits/detail/yes_no_type.hpp>
+#endif
+
+// is a type a function?
+// Please note that this implementation is unnecessarily complex:
+// we could just use !is_convertible<T*, const volatile void*>::value,
+// except that some compilers erroneously allow conversions from
+// function pointers to void*.
+
+namespace pdalboost {
+
+#if !defined( __CODEGEARC__ )
+
+namespace detail {
+
+#if !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
+template<bool is_ref = true>
+struct is_function_chooser
+{
+   template< typename T > struct result_
+      : public false_type {};
+};
+
+template <>
+struct is_function_chooser<false>
+{
+    template< typename T > struct result_
+        : public ::pdalboost::type_traits::is_function_ptr_helper<T*> {};
+};
+
+template <typename T>
+struct is_function_impl
+    : public is_function_chooser< ::pdalboost::is_reference<T>::value >
+        ::BOOST_NESTED_TEMPLATE result_<T>
+{
+};
+
+#else
+
+template <typename T>
+struct is_function_impl
+{
+#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)
+#pragma warning(push)
+#pragma warning(disable:6334)
+#endif
+    static T* t;
+    BOOST_STATIC_CONSTANT(
+        bool, value = sizeof(::pdalboost::type_traits::is_function_ptr_tester(t))
+        == sizeof(::pdalboost::type_traits::yes_type)
+        );
+#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)
+#pragma warning(pop)
+#endif
+};
+
+template <typename T>
+struct is_function_impl<T&> : public false_type
+{};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template <typename T>
+struct is_function_impl<T&&> : public false_type
+{};
+#endif
+
+#endif
+
+} // namespace detail
+
+#endif // !defined( __CODEGEARC__ )
+
+#if defined( __CODEGEARC__ )
+template <class T> struct is_function : integral_constant<bool, __is_function(T)> {};
+#else
+template <class T> struct is_function : integral_constant<bool, ::pdalboost::detail::is_function_impl<T>::value> {};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template <class T> struct is_function<T&&> : public false_type {};
+#endif
+#endif
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_FUNCTION_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_fundamental.hpp b/vendor/pdalboost/boost/type_traits/is_fundamental.hpp
new file mode 100644
index 0000000..ae79b7c
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_fundamental.hpp
@@ -0,0 +1,26 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_FUNDAMENTAL_HPP_INCLUDED
+#define BOOST_TT_IS_FUNDAMENTAL_HPP_INCLUDED
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_void.hpp>
+
+namespace pdalboost {
+
+//* is a type T a fundamental type described in the standard (3.9.1)
+#if defined( __CODEGEARC__ )
+template <class T> struct is_fundamental : public integral_constant<bool, __is_fundamental(T)> {};
+#else
+template <class T> struct is_fundamental : public integral_constant<bool, ::pdalboost::is_arithmetic<T>::value || ::pdalboost::is_void<T>::value> {};
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_FUNDAMENTAL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_integral.hpp b/vendor/pdalboost/boost/type_traits/is_integral.hpp
new file mode 100644
index 0000000..d9dba61
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_integral.hpp
@@ -0,0 +1,89 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_INTEGRAL_HPP_INCLUDED
+#define BOOST_TT_IS_INTEGRAL_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+namespace pdalboost {
+
+#if defined( __CODEGEARC__ )
+   template <class T>
+   struct is_integral : public integral_constant<bool, __is_integral(T)> {};
+#else
+
+template <class T> struct is_integral : public false_type {};
+template <class T> struct is_integral<const T> : public is_integral<T> {};
+template <class T> struct is_integral<volatile const T> : public is_integral<T>{};
+template <class T> struct is_integral<volatile T> : public is_integral<T>{};
+
+//* is a type T an [cv-qualified-] integral type described in the standard (3.9.1p3)
+// as an extension we include long long, as this is likely to be added to the
+// standard at a later date
+template<> struct is_integral<unsigned char> : public true_type {};
+template<> struct is_integral<unsigned short> : public true_type{};
+template<> struct is_integral<unsigned int> : public true_type{};
+template<> struct is_integral<unsigned long> : public true_type{};
+
+template<> struct is_integral<signed char> : public true_type{};
+template<> struct is_integral<short> : public true_type{};
+template<> struct is_integral<int> : public true_type{};
+template<> struct is_integral<long> : public true_type{};
+
+template<> struct is_integral<char> : public true_type{};
+template<> struct is_integral<bool> : public true_type{};
+
+#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+// If the following line fails to compile and you're using the Intel
+// compiler, see http://lists.boost.org/MailArchives/boost-users/msg06567.php,
+// and define BOOST_NO_INTRINSIC_WCHAR_T on the command line.
+template<> struct is_integral<wchar_t> : public true_type{};
+#endif
+
+// Same set of integral types as in boost/type_traits/integral_promotion.hpp.
+// Please, keep in sync. -- Alexander Nasonov
+#if (defined(BOOST_INTEL_CXX_VERSION) && defined(_MSC_VER) && (BOOST_INTEL_CXX_VERSION <= 600)) \
+    || (defined(__BORLANDC__) && (__BORLANDC__ == 0x600) && (_MSC_VER < 1300))
+template<> struct is_integral<unsigned __int8> : public true_type{};
+template<> struct is_integral<unsigned __int16> : public true_type{};
+template<> struct is_integral<unsigned __int32> : public true_type{};
+template<> struct is_integral<__int8> : public true_type{};
+template<> struct is_integral<__int16> : public true_type{};
+template<> struct is_integral<__int32> : public true_type{};
+#ifdef __BORLANDC__
+template<> struct is_integral<unsigned __int64> : public true_type{};
+template<> struct is_integral<__int64> : public true_type{};
+#endif
+#endif
+
+# if defined(BOOST_HAS_LONG_LONG)
+template<> struct is_integral< ::pdalboost::ulong_long_type> : public true_type{};
+template<> struct is_integral< ::pdalboost::long_long_type> : public true_type{};
+#elif defined(BOOST_HAS_MS_INT64)
+template<> struct is_integral<unsigned __int64> : public true_type{};
+template<> struct is_integral<__int64> : public true_type{};
+#endif
+        
+#ifdef BOOST_HAS_INT128
+template<> struct is_integral<pdalboost::int128_type> : public true_type{};
+template<> struct is_integral<pdalboost::uint128_type> : public true_type{};
+#endif
+#ifndef BOOST_NO_CXX11_CHAR16_T
+template<> struct is_integral<char16_t> : public true_type{};
+#endif
+#ifndef BOOST_NO_CXX11_CHAR32_T
+template<> struct is_integral<char32_t> : public true_type{};
+#endif
+
+#endif  // non-CodeGear implementation
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_INTEGRAL_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_lvalue_reference.hpp b/vendor/pdalboost/boost/type_traits/is_lvalue_reference.hpp
new file mode 100644
index 0000000..9113549
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_lvalue_reference.hpp
@@ -0,0 +1,50 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, 
+//      Howard Hinnant and John Maddock 2000. 
+//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+//    Fixed is_pointer, is_lvalue_reference, is_const, is_volatile, is_same, 
+//    is_member_pointer based on the Simulated Partial Specialization work 
+//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or 
+//    http://groups.yahoo.com/group/boost/message/5441 
+//    Some workarounds in here use ideas suggested from "Generic<Programming>: 
+//    Mappings between Types and Values" 
+//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).
+
+
+#ifndef BOOST_TT_IS_LVALUE_REFERENCE_HPP_INCLUDED
+#define BOOST_TT_IS_LVALUE_REFERENCE_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+
+namespace pdalboost {
+
+#if defined( __CODEGEARC__ )
+   template <class T> struct is_lvalue_reference : public integral_constant<bool, __is_reference(T)>{};
+#else
+
+   template <class T> struct is_lvalue_reference : public false_type{};
+   template <class T> struct is_lvalue_reference<T&> : public true_type{};
+
+#if  defined(BOOST_ILLEGAL_CV_REFERENCES)
+// these are illegal specialisations; cv-qualifies applied to
+// references have no effect according to [8.3.2p1],
+// C++ Builder requires them though as it treats cv-qualified
+// references as distinct types...
+   template <class T> struct is_lvalue_reference<T&const> : public true_type{};
+   template <class T> struct is_lvalue_reference<T&volatile> : public true_type{};
+   template <class T> struct is_lvalue_reference<T&const volatile> : public true_type{};
+#endif
+
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED
+
diff --git a/vendor/pdalboost/boost/type_traits/is_member_function_pointer.hpp b/vendor/pdalboost/boost/type_traits/is_member_function_pointer.hpp
new file mode 100644
index 0000000..125e5d9
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_member_function_pointer.hpp
@@ -0,0 +1,120 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+//  Hinnant & John Maddock 2000.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
+#define BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
+
+#include <boost/type_traits/detail/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
+   //
+   // Note: we use the "workaround" version for MSVC because it works for 
+   // __stdcall etc function types, where as the partial specialisation
+   // version does not do so.
+   //
+#   include <boost/type_traits/detail/is_mem_fun_pointer_impl.hpp>
+#   include <boost/type_traits/remove_cv.hpp>
+#   include <boost/type_traits/integral_constant.hpp>
+#else
+#   include <boost/type_traits/is_reference.hpp>
+#   include <boost/type_traits/is_array.hpp>
+#   include <boost/type_traits/detail/yes_no_type.hpp>
+#   include <boost/type_traits/detail/is_mem_fun_pointer_tester.hpp>
+#endif
+
+namespace pdalboost {
+
+#if defined( __CODEGEARC__ )
+template <class T> struct is_member_function_pointer : public integral_constant<bool, __is_member_function_pointer( T )> {};
+#elif !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(BOOST_TT_TEST_MS_FUNC_SIGS)
+
+template <class T> struct is_member_function_pointer 
+   : public ::pdalboost::integral_constant<bool, ::pdalboost::type_traits::is_mem_fun_pointer_impl<typename remove_cv<T>::type>::value>{};
+
+#else
+
+namespace detail {
+
+#ifndef __BORLANDC__
+
+template <bool>
+struct is_mem_fun_pointer_select
+{
+   template <class T> struct result_ : public false_type{};
+};
+
+template <>
+struct is_mem_fun_pointer_select<false>
+{
+    template <typename T> struct result_
+    {
+#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)
+#pragma warning(push)
+#pragma warning(disable:6334)
+#endif
+        static T* make_t;
+        typedef result_<T> self_type;
+
+        BOOST_STATIC_CONSTANT(
+            bool, value = (
+                1 == sizeof(::pdalboost::type_traits::is_mem_fun_pointer_tester(self_type::make_t))
+            ));
+#if BOOST_WORKAROUND(BOOST_MSVC_FULL_VER, >= 140050000)
+#pragma warning(pop)
+#endif
+    };
+};
+
+template <typename T>
+struct is_member_function_pointer_impl
+    : public is_mem_fun_pointer_select< 
+      ::pdalboost::is_reference<T>::value || ::pdalboost::is_array<T>::value>::template result_<T>{};
+
+template <typename T>
+struct is_member_function_pointer_impl<T&> : public false_type{};
+
+#else // Borland C++
+
+template <typename T>
+struct is_member_function_pointer_impl
+{
+   static T* m_t;
+   BOOST_STATIC_CONSTANT(
+              bool, value =
+               (1 == sizeof(type_traits::is_mem_fun_pointer_tester(m_t))) );
+};
+
+template <typename T>
+struct is_member_function_pointer_impl<T&>
+{
+   BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+#endif
+
+template<> struct is_member_function_pointer_impl<void> : public false_type{};
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template<> struct is_member_function_pointer_impl<void const> : public false_type{};
+template<> struct is_member_function_pointer_impl<void const volatile> : public false_type{};
+template<> struct is_member_function_pointer_impl<void volatile> : public false_type{};
+#endif
+
+} // namespace detail
+
+template <class T>
+struct is_member_function_pointer
+   : public integral_constant<bool, ::pdalboost::detail::is_member_function_pointer_impl<T>::value>{};
+
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_member_pointer.hpp b/vendor/pdalboost/boost/type_traits/is_member_pointer.hpp
new file mode 100644
index 0000000..2aaf30a
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_member_pointer.hpp
@@ -0,0 +1,45 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, 
+//      Howard Hinnant and John Maddock 2000. 
+//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, 
+//    is_member_pointer based on the Simulated Partial Specialization work 
+//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or 
+//    http://groups.yahoo.com/group/boost/message/5441 
+//    Some workarounds in here use ideas suggested from "Generic<Programming>: 
+//    Mappings between Types and Values" 
+//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).
+
+
+#ifndef BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED
+#define BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED
+
+#include <boost/detail/workaround.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
+
+namespace pdalboost {
+
+#if defined( __CODEGEARC__ )
+template <class T> struct is_member_pointer : public integral_constant<bool, __is_member_pointer(T)>{};
+#else
+template <class T> struct is_member_pointer : public integral_constant<bool, ::pdalboost::is_member_function_pointer<T>::value>{};
+template <class T, class U> struct is_member_pointer<U T::* > : public true_type{};
+
+#if !BOOST_WORKAROUND(__MWERKS__,<=0x3003) && !BOOST_WORKAROUND(__IBMCPP__, <=600)
+template <class T, class U> struct is_member_pointer<U T::*const> : public true_type{};
+template <class T, class U> struct is_member_pointer<U T::*const volatile> : public true_type{};
+template <class T, class U> struct is_member_pointer<U T::*volatile> : public true_type{};
+#endif
+
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_MEMBER_POINTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_nothrow_move_assignable.hpp b/vendor/pdalboost/boost/type_traits/is_nothrow_move_assignable.hpp
new file mode 100644
index 0000000..3b58759
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_nothrow_move_assignable.hpp
@@ -0,0 +1,81 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  (C) Copyright Eric Friedman 2002-2003.
+//  (C) Copyright Antony Polukhin 2013.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_NOTHROW_MOVE_ASSIGNABLE_HPP_INCLUDED
+#define BOOST_TT_IS_NOTHROW_MOVE_ASSIGNABLE_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/type_traits/has_trivial_move_assign.hpp>
+#include <boost/type_traits/has_nothrow_assign.hpp>
+#include <boost/type_traits/is_array.hpp>
+#include <boost/type_traits/is_reference.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/declval.hpp>
+
+namespace pdalboost {
+
+#ifdef BOOST_IS_NOTHROW_MOVE_ASSIGN
+
+template <class T>
+struct is_nothrow_move_assignable : public integral_constant<bool, BOOST_IS_NOTHROW_MOVE_ASSIGN(T)>{};
+template <class T> struct is_nothrow_move_assignable<T const> : public false_type{};
+template <class T> struct is_nothrow_move_assignable<T volatile> : public false_type{};
+template <class T> struct is_nothrow_move_assignable<T const volatile> : public false_type{};
+template <class T> struct is_nothrow_move_assignable<T&> : public false_type{};
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) 
+template <class T> struct is_nothrow_move_assignable<T&&> : public false_type{};
+#endif
+
+#elif !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_SFINAE_EXPR)
+
+namespace detail{
+
+template <class T, class Enable = void>
+struct false_or_cpp11_noexcept_move_assignable: public ::pdalboost::false_type {};
+
+template <class T>
+struct false_or_cpp11_noexcept_move_assignable <
+        T,
+        typename ::pdalboost::enable_if_c<sizeof(T) && BOOST_NOEXCEPT_EXPR(::pdalboost::declval<T&>() = ::pdalboost::declval<T>())>::type
+    > : public ::pdalboost::integral_constant<bool, BOOST_NOEXCEPT_EXPR(::pdalboost::declval<T&>() = ::pdalboost::declval<T>())>
+{};
+
+}
+
+template <class T>
+struct is_nothrow_move_assignable : public integral_constant<bool, ::pdalboost::detail::false_or_cpp11_noexcept_move_assignable<T>::value>{};
+
+template <class T> struct is_nothrow_move_assignable<T const> : public ::pdalboost::false_type {};
+template <class T> struct is_nothrow_move_assignable<T const volatile> : public ::pdalboost::false_type{};
+template <class T> struct is_nothrow_move_assignable<T volatile> : public ::pdalboost::false_type{};
+template <class T> struct is_nothrow_move_assignable<T&> : public ::pdalboost::false_type{};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template <class T> struct is_nothrow_move_assignable<T&&> : public ::pdalboost::false_type{};
+#endif
+
+#else
+
+template <class T>
+struct is_nothrow_move_assignable : public integral_constant<bool,
+   (::pdalboost::has_trivial_move_assign<T>::value || ::pdalboost::has_nothrow_assign<T>::value) &&  ! ::pdalboost::is_array<T>::value>{};
+
+#endif
+
+
+template <> struct is_nothrow_move_assignable<void> : public false_type{};
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template <> struct is_nothrow_move_assignable<void const> : public false_type{};
+template <> struct is_nothrow_move_assignable<void const volatile> : public false_type{};
+template <> struct is_nothrow_move_assignable<void volatile> : public false_type{};
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_NOTHROW_MOVE_ASSIGNABLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_nothrow_move_constructible.hpp b/vendor/pdalboost/boost/type_traits/is_nothrow_move_constructible.hpp
new file mode 100644
index 0000000..4d8f542
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_nothrow_move_constructible.hpp
@@ -0,0 +1,86 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  (C) Copyright Eric Friedman 2002-2003.
+//  (C) Copyright Antony Polukhin 2013.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_NOTHROW_MOVE_CONSTRUCTIBLE_HPP_INCLUDED
+#define BOOST_TT_IS_NOTHROW_MOVE_CONSTRUCTIBLE_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/detail/workaround.hpp>
+
+#ifdef BOOST_IS_NOTHROW_MOVE_CONSTRUCT
+
+namespace pdalboost {
+
+template <class T>
+struct is_nothrow_move_constructible : public integral_constant<bool, BOOST_IS_NOTHROW_MOVE_CONSTRUCT(T)>{};
+
+template <class T> struct is_nothrow_move_constructible<volatile T> : public ::pdalboost::false_type {};
+template <class T> struct is_nothrow_move_constructible<const volatile T> : public ::pdalboost::false_type{};
+
+#elif !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_SFINAE_EXPR) && !BOOST_WORKAROUND(BOOST_GCC_VERSION, < 40700)
+
+#include <boost/type_traits/declval.hpp>
+#include <boost/utility/enable_if.hpp>
+
+namespace pdalboost{ namespace detail{
+
+template <class T, class Enable = void>
+struct false_or_cpp11_noexcept_move_constructible: public ::pdalboost::false_type {};
+
+template <class T>
+struct false_or_cpp11_noexcept_move_constructible <
+        T,
+        typename ::pdalboost::enable_if_c<sizeof(T) && BOOST_NOEXCEPT_EXPR(T(::pdalboost::declval<T>()))>::type
+    > : public ::pdalboost::integral_constant<bool, BOOST_NOEXCEPT_EXPR(T(::pdalboost::declval<T>()))>
+{};
+
+}
+
+template <class T> struct is_nothrow_move_constructible
+   : public integral_constant<bool, ::pdalboost::detail::false_or_cpp11_noexcept_move_constructible<T>::value>{};
+
+template <class T> struct is_nothrow_move_constructible<volatile T> : public ::pdalboost::false_type {};
+template <class T> struct is_nothrow_move_constructible<const volatile T> : public ::pdalboost::false_type{};
+template <class T, std::size_t N> struct is_nothrow_move_constructible<T[N]> : public ::pdalboost::false_type{};
+template <class T> struct is_nothrow_move_constructible<T[]> : public ::pdalboost::false_type{};
+
+#else
+
+#include <boost/type_traits/has_trivial_move_constructor.hpp>
+#include <boost/type_traits/has_nothrow_copy.hpp>
+#include <boost/type_traits/is_array.hpp>
+
+namespace pdalboost{
+
+template <class T>
+struct is_nothrow_move_constructible
+   : public integral_constant<bool,
+   (::pdalboost::has_trivial_move_constructor<T>::value || ::pdalboost::has_nothrow_copy<T>::value) && !::pdalboost::is_array<T>::value>
+{};
+
+#endif
+
+template <> struct is_nothrow_move_constructible<void> : false_type{};
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template <> struct is_nothrow_move_constructible<void const> : false_type{};
+template <> struct is_nothrow_move_constructible<void volatile> : false_type{};
+template <> struct is_nothrow_move_constructible<void const volatile> : false_type{};
+#endif
+// References are always trivially constructible, even if the thing they reference is not:
+template <class T> struct is_nothrow_move_constructible<T&> : public ::pdalboost::true_type{};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template <class T> struct is_nothrow_move_constructible<T&&> : public ::pdalboost::true_type{};
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_NOTHROW_MOVE_CONSTRUCTIBLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_pod.hpp b/vendor/pdalboost/boost/type_traits/is_pod.hpp
new file mode 100644
index 0000000..ff73e22
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_pod.hpp
@@ -0,0 +1,58 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_POD_HPP_INCLUDED
+#define BOOST_TT_IS_POD_HPP_INCLUDED
+
+#include <boost/type_traits/detail/config.hpp>
+#include <boost/type_traits/is_void.hpp>
+#include <boost/type_traits/is_scalar.hpp>
+#include <boost/type_traits/intrinsics.hpp>
+
+#ifdef __SUNPRO_CC
+#include <boost/type_traits/is_function.hpp>
+#endif
+
+#include <cstddef>
+
+#ifndef BOOST_IS_POD
+#define BOOST_INTERNAL_IS_POD(T) false
+#else
+#define BOOST_INTERNAL_IS_POD(T) BOOST_IS_POD(T)
+#endif
+
+namespace pdalboost {
+
+// forward declaration, needed by 'is_pod_array_helper' template below
+template< typename T > struct is_POD;
+
+template <typename T> struct is_pod
+: public integral_constant<bool, ::pdalboost::is_scalar<T>::value || ::pdalboost::is_void<T>::value || BOOST_INTERNAL_IS_POD(T)>
+{};
+
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+template <typename T, std::size_t sz> struct is_pod<T[sz]> : public is_pod<T>{};
+#endif
+
+
+// the following help compilers without partial specialization support:
+template<> struct is_pod<void> : public true_type{};
+
+#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
+template<> struct is_pod<void const> : public true_type{};
+template<> struct is_pod<void const volatile> : public true_type{};
+template<> struct is_pod<void volatile> : public true_type{};
+#endif
+
+template<class T> struct is_POD : public is_pod<T>{};
+
+} // namespace pdalboost
+
+#undef BOOST_INTERNAL_IS_POD
+
+#endif // BOOST_TT_IS_POD_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_pointer.hpp b/vendor/pdalboost/boost/type_traits/is_pointer.hpp
new file mode 100644
index 0000000..ba699ea
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_pointer.hpp
@@ -0,0 +1,47 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, 
+//      Howard Hinnant and John Maddock 2000. 
+//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, 
+//    is_member_pointer based on the Simulated Partial Specialization work 
+//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or 
+//    http://groups.yahoo.com/group/boost/message/5441 
+//    Some workarounds in here use ideas suggested from "Generic<Programming>: 
+//    Mappings between Types and Values" 
+//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).
+
+
+#ifndef BOOST_TT_IS_POINTER_HPP_INCLUDED
+#define BOOST_TT_IS_POINTER_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+
+namespace pdalboost {
+
+#if defined( __CODEGEARC__ )
+template <class T> struct is_pointer : public integral_constant<bool, __is_pointer(T)>{};
+#else
+template <class T> struct is_pointer : public false_type{};
+template <class T> struct is_pointer<T*> : public true_type{};
+template <class T> struct is_pointer<T*const> : public true_type{};
+template <class T> struct is_pointer<T*const volatile> : public true_type{};
+template <class T> struct is_pointer<T*volatile> : public true_type{};
+
+#ifdef BOOST_MSVC
+template <class T> struct is_pointer<T const> : public is_pointer<T>{};
+template <class T> struct is_pointer<T const volatile> : public is_pointer<T>{};
+template <class T> struct is_pointer<T volatile> : public is_pointer<T>{};
+#endif
+
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_POINTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_polymorphic.hpp b/vendor/pdalboost/boost/type_traits/is_polymorphic.hpp
new file mode 100644
index 0000000..0354bd4
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_polymorphic.hpp
@@ -0,0 +1,122 @@
+//  (C) Copyright John Maddock 2000. 
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_POLYMORPHIC_HPP
+#define BOOST_TT_IS_POLYMORPHIC_HPP
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+#ifndef BOOST_IS_POLYMORPHIC
+#include <boost/type_traits/is_class.hpp>
+#endif
+#include <boost/detail/workaround.hpp>
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1700)
+#pragma warning(push)
+#pragma warning(disable:4250)
+#endif
+
+namespace pdalboost{
+
+#ifndef BOOST_IS_POLYMORPHIC
+
+namespace detail{
+
+template <class T>
+struct is_polymorphic_imp1
+{
+# if BOOST_WORKAROUND(__MWERKS__, <= 0x2407) // CWPro7 should return false always.
+    typedef char d1, (&d2)[2];
+# else 
+   struct d1 : public T
+   {
+      d1();
+#  if !defined(__GNUC__) // this raises warnings with some classes, and buys nothing with GCC
+      ~d1()throw();
+#  endif 
+      char padding[256];
+   private:
+      // keep some picky compilers happy:
+      d1(const d1&);
+      d1& operator=(const d1&);
+   };
+   struct d2 : public T
+   {
+      d2();
+      virtual ~d2()throw();
+#  if !defined(BOOST_MSVC) && !defined(__ICL)
+      // for some reason this messes up VC++ when T has virtual bases,
+      // probably likewise for compilers that use the same ABI:
+      struct unique{};
+      virtual void unique_name_to_boost5487629(unique*);
+#  endif
+      char padding[256];
+   private:
+      // keep some picky compilers happy:
+      d2(const d2&);
+      d2& operator=(const d2&);
+   };
+# endif 
+   BOOST_STATIC_CONSTANT(bool, value = (sizeof(d2) == sizeof(d1)));
+};
+
+template <class T> struct is_polymorphic_imp1<T const> : public is_polymorphic_imp1<T>{};
+template <class T> struct is_polymorphic_imp1<T const volatile> : public is_polymorphic_imp1<T>{};
+template <class T> struct is_polymorphic_imp1<T volatile> : public is_polymorphic_imp1<T>{};
+
+template <class T>
+struct is_polymorphic_imp2
+{
+   BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template <bool is_class>
+struct is_polymorphic_selector
+{
+   template <class T>
+   struct rebind
+   {
+      typedef is_polymorphic_imp2<T> type;
+   };
+};
+
+template <>
+struct is_polymorphic_selector<true>
+{
+   template <class T>
+   struct rebind
+   {
+      typedef is_polymorphic_imp1<T> type;
+   };
+};
+
+template <class T>
+struct is_polymorphic_imp
+{
+   typedef is_polymorphic_selector< ::pdalboost::is_class<T>::value> selector;
+   typedef typename selector::template rebind<T> binder;
+   typedef typename binder::type imp_type;
+   BOOST_STATIC_CONSTANT(bool, value = imp_type::value);
+};
+
+} // namespace detail
+
+template <class T> struct is_polymorphic : public integral_constant<bool, ::pdalboost::detail::is_polymorphic_imp<T>::value> {};
+
+#else // BOOST_IS_POLYMORPHIC
+
+template <class T> struct is_polymorphic : public integral_constant<bool, BOOST_IS_POLYMORPHIC(T)> {};
+
+#endif
+
+} // namespace pdalboost
+
+#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1700)
+#pragma warning(pop)
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/type_traits/is_reference.hpp b/vendor/pdalboost/boost/type_traits/is_reference.hpp
new file mode 100644
index 0000000..1e380d6
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_reference.hpp
@@ -0,0 +1,30 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, 
+//      Howard Hinnant and John Maddock 2000, 2010. 
+//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_REFERENCE_HPP_INCLUDED
+#define BOOST_TT_IS_REFERENCE_HPP_INCLUDED
+
+#include <boost/type_traits/is_lvalue_reference.hpp>
+#include <boost/type_traits/is_rvalue_reference.hpp>
+
+namespace pdalboost {
+
+template <class T> struct is_reference 
+   : public 
+   integral_constant<
+      bool, 
+      ::pdalboost::is_lvalue_reference<T>::value || ::pdalboost::is_rvalue_reference<T>::value>
+{};
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED
+
diff --git a/vendor/pdalboost/boost/type_traits/is_rvalue_reference.hpp b/vendor/pdalboost/boost/type_traits/is_rvalue_reference.hpp
new file mode 100644
index 0000000..a457882
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_rvalue_reference.hpp
@@ -0,0 +1,25 @@
+
+//  (C) John Maddock 2010. 
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_RVALUE_REFERENCE_HPP_INCLUDED
+#define BOOST_TT_IS_RVALUE_REFERENCE_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+namespace pdalboost {
+
+template <class T> struct is_rvalue_reference : public false_type {};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template <class T> struct is_rvalue_reference<T&&> : public true_type {};
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_REFERENCE_HPP_INCLUDED
+
diff --git a/vendor/pdalboost/boost/type_traits/is_same.hpp b/vendor/pdalboost/boost/type_traits/is_same.hpp
new file mode 100644
index 0000000..f59d8bf
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_same.hpp
@@ -0,0 +1,41 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, 
+//      Howard Hinnant and John Maddock 2000. 
+//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, 
+//    is_member_pointer based on the Simulated Partial Specialization work 
+//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or 
+//    http://groups.yahoo.com/group/boost/message/5441 
+//    Some workarounds in here use ideas suggested from "Generic<Programming>: 
+//    Mappings between Types and Values" 
+//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).
+
+
+#ifndef BOOST_TT_IS_SAME_HPP_INCLUDED
+#define BOOST_TT_IS_SAME_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+
+namespace pdalboost {
+
+
+   template <class T, class U> struct is_same : public false_type {};
+   template <class T> struct is_same<T,T> : public true_type {};
+#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+// without this, Borland's compiler gives the wrong answer for
+// references to arrays:
+   template <class T> struct is_same<T&, T&> : public true_type{};
+#endif
+
+
+} // namespace pdalboost
+
+#endif  // BOOST_TT_IS_SAME_HPP_INCLUDED
+
diff --git a/vendor/pdalboost/boost/type_traits/is_scalar.hpp b/vendor/pdalboost/boost/type_traits/is_scalar.hpp
new file mode 100644
index 0000000..67f1b87
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_scalar.hpp
@@ -0,0 +1,27 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_SCALAR_HPP_INCLUDED
+#define BOOST_TT_IS_SCALAR_HPP_INCLUDED
+
+#include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/config.hpp>
+
+namespace pdalboost {
+
+template <typename T>
+struct is_scalar
+   : public integral_constant<bool, ::pdalboost::is_arithmetic<T>::value || ::pdalboost::is_enum<T>::value || ::pdalboost::is_pointer<T>::value || ::pdalboost::is_member_pointer<T>::value>
+{};
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_SCALAR_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_signed.hpp b/vendor/pdalboost/boost/type_traits/is_signed.hpp
new file mode 100644
index 0000000..6ef35d2
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_signed.hpp
@@ -0,0 +1,163 @@
+
+//  (C) Copyright John Maddock 2005.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_IS_SIGNED_HPP_INCLUDED
+#define BOOST_TT_IS_SIGNED_HPP_INCLUDED
+
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <climits>
+
+namespace pdalboost {
+
+#if !defined( __CODEGEARC__ )
+
+#if !(defined(BOOST_MSVC) && BOOST_MSVC <= 1310) && \
+    !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238) &&\
+    !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
+
+namespace detail{
+
+template <class T>
+struct is_signed_values
+{
+   //
+   // Note that we cannot use BOOST_STATIC_CONSTANT here, using enum's
+   // rather than "real" static constants simply doesn't work or give
+   // the correct answer.
+   //
+   typedef typename remove_cv<T>::type no_cv_t;
+   static const no_cv_t minus_one = (static_cast<no_cv_t>(-1));
+   static const no_cv_t zero = (static_cast<no_cv_t>(0));
+};
+
+template <class T>
+struct is_signed_helper
+{
+   typedef typename remove_cv<T>::type no_cv_t;
+   BOOST_STATIC_CONSTANT(bool, value = (!(::pdalboost::detail::is_signed_values<T>::minus_one  > pdalboost::detail::is_signed_values<T>::zero)));
+};
+
+template <bool integral_type>
+struct is_signed_select_helper
+{
+   template <class T>
+   struct rebind
+   {
+      typedef is_signed_helper<T> type;
+   };
+};
+
+template <>
+struct is_signed_select_helper<false>
+{
+   template <class T>
+   struct rebind
+   {
+      typedef false_type type;
+   };
+};
+
+template <class T>
+struct is_signed_impl
+{
+   typedef ::pdalboost::detail::is_signed_select_helper< ::pdalboost::is_integral<T>::value || ::pdalboost::is_enum<T>::value> selector;
+   typedef typename selector::template rebind<T> binder;
+   typedef typename binder::type type;
+   BOOST_STATIC_CONSTANT(bool, value = type::value);
+};
+
+}
+
+template <class T> struct is_signed : public integral_constant<bool, pdalboost::detail::is_signed_impl<T>::value> {};
+
+#else
+
+template <class T> struct is_signed : public false_type{};
+
+#endif
+
+#else //defined( __CODEGEARC__ )
+   template <class T> struct is_signed : public integral_constant<bool, __is_signed(T)>{};
+#endif
+
+template <> struct is_signed<signed char> : public true_type{};
+template <> struct is_signed<const signed char> : public true_type{};
+template <> struct is_signed<volatile signed char> : public true_type{};
+template <> struct is_signed<const volatile signed char> : public true_type{};
+template <> struct is_signed<short> : public true_type{};
+template <> struct is_signed<const short> : public true_type{};
+template <> struct is_signed<volatile short> : public true_type{};
+template <> struct is_signed<const volatile short> : public true_type{};
+template <> struct is_signed<int> : public true_type{};
+template <> struct is_signed<const int> : public true_type{};
+template <> struct is_signed<volatile int> : public true_type{};
+template <> struct is_signed<const volatile int> : public true_type{};
+template <> struct is_signed<long> : public true_type{};
+template <> struct is_signed<const long> : public true_type{};
+template <> struct is_signed<volatile long> : public true_type{};
+template <> struct is_signed<const volatile long> : public true_type{};
+
+template <> struct is_signed<unsigned char> : public false_type{};
+template <> struct is_signed<const unsigned char> : public false_type{};
+template <> struct is_signed<volatile unsigned char> : public false_type{};
+template <> struct is_signed<const volatile unsigned char> : public false_type{};
+template <> struct is_signed<unsigned short> : public false_type{};
+template <> struct is_signed<const unsigned short> : public false_type{};
+template <> struct is_signed<volatile unsigned short> : public false_type{};
+template <> struct is_signed<const volatile unsigned short> : public false_type{};
+template <> struct is_signed<unsigned int> : public false_type{};
+template <> struct is_signed<const unsigned int> : public false_type{};
+template <> struct is_signed<volatile unsigned int> : public false_type{};
+template <> struct is_signed<const volatile unsigned int> : public false_type{};
+template <> struct is_signed<unsigned long> : public false_type{};
+template <> struct is_signed<const unsigned long> : public false_type{};
+template <> struct is_signed<volatile unsigned long> : public false_type{};
+template <> struct is_signed<const volatile unsigned long> : public false_type{};
+#ifdef BOOST_HAS_LONG_LONG
+template <> struct is_signed< ::pdalboost::long_long_type> : public true_type{};
+template <> struct is_signed<const ::pdalboost::long_long_type> : public true_type{};
+template <> struct is_signed<volatile ::pdalboost::long_long_type> : public true_type{};
+template <> struct is_signed<const volatile ::pdalboost::long_long_type> : public true_type{};
+
+template <> struct is_signed< ::pdalboost::ulong_long_type> : public false_type{};
+template <> struct is_signed<const ::pdalboost::ulong_long_type> : public false_type{};
+template <> struct is_signed<volatile ::pdalboost::ulong_long_type> : public false_type{};
+template <> struct is_signed<const volatile ::pdalboost::ulong_long_type> : public false_type{};
+#endif
+#if defined(CHAR_MIN) 
+#if CHAR_MIN != 0
+template <> struct is_signed<char> : public true_type{};
+template <> struct is_signed<const char> : public true_type{};
+template <> struct is_signed<volatile char> : public true_type{};
+template <> struct is_signed<const volatile char> : public true_type{};
+#else
+template <> struct is_signed<char> : public false_type{};
+template <> struct is_signed<const char> : public false_type{};
+template <> struct is_signed<volatile char> : public false_type{};
+template <> struct is_signed<const volatile char> : public false_type{};
+#endif
+#endif
+#if defined(WCHAR_MIN) && !defined(BOOST_NO_INTRINSIC_WCHAR_T)
+#if WCHAR_MIN != 0
+template <> struct is_signed<wchar_t> : public true_type{};
+template <> struct is_signed<const wchar_t> : public true_type{};
+template <> struct is_signed<volatile wchar_t> : public true_type{};
+template <> struct is_signed<const volatile wchar_t> : public true_type{};
+#else
+template <> struct is_signed<wchar_t> : public false_type{};
+template <> struct is_signed<const wchar_t> : public false_type{};
+template <> struct is_signed<volatile wchar_t> : public false_type{};
+template <> struct is_signed<const volatile wchar_t> : public false_type{};
+#endif
+#endif
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_union.hpp b/vendor/pdalboost/boost/type_traits/is_union.hpp
new file mode 100644
index 0000000..23b4a0a
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_union.hpp
@@ -0,0 +1,31 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+//  Hinnant & John Maddock 2000.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_IS_UNION_HPP_INCLUDED
+#define BOOST_TT_IS_UNION_HPP_INCLUDED
+
+#include <boost/type_traits/intrinsics.hpp>
+#include <boost/type_traits/integral_constant.hpp>
+
+namespace pdalboost {
+
+#ifdef BOOST_IS_UNION
+template <class T> struct is_union : public integral_constant<bool, BOOST_IS_UNION(T)> {};
+#else
+template <class T> struct is_union : public integral_constant<bool, false> {};
+#endif
+
+template <class T> struct is_union<T const> : public is_union<T>{};
+template <class T> struct is_union<T volatile const> : public is_union<T>{};
+template <class T> struct is_union<T volatile> : public is_union<T>{};
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_UNION_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_unsigned.hpp b/vendor/pdalboost/boost/type_traits/is_unsigned.hpp
new file mode 100644
index 0000000..9fd2001
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_unsigned.hpp
@@ -0,0 +1,163 @@
+
+//  (C) Copyright John Maddock 2005.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_IS_UNSIGNED_HPP_INCLUDED
+#define BOOST_TT_IS_UNSIGNED_HPP_INCLUDED
+
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+
+#include <climits>
+
+namespace pdalboost {
+
+#if !defined( __CODEGEARC__ )
+
+#if !(defined(BOOST_MSVC) && BOOST_MSVC <= 1310) &&\
+    !(defined(__EDG_VERSION__) && __EDG_VERSION__ <= 238) &&\
+    !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
+
+namespace detail{
+
+template <class T>
+struct is_unsigned_values
+{
+   //
+   // Note that we cannot use BOOST_STATIC_CONSTANT here, using enum's
+   // rather than "real" static constants simply doesn't work or give
+   // the correct answer.
+   //
+   typedef typename remove_cv<T>::type no_cv_t;
+   static const no_cv_t minus_one = (static_cast<no_cv_t>(-1));
+   static const no_cv_t zero = (static_cast<no_cv_t>(0));
+};
+
+template <class T>
+struct is_ununsigned_helper
+{
+   BOOST_STATIC_CONSTANT(bool, value = (::pdalboost::detail::is_unsigned_values<T>::minus_one > ::pdalboost::detail::is_unsigned_values<T>::zero));
+};
+
+template <bool integral_type>
+struct is_unsigned_select_helper
+{
+   template <class T>
+   struct rebind
+   {
+      typedef is_ununsigned_helper<T> type;
+   };
+};
+
+template <>
+struct is_unsigned_select_helper<false>
+{
+   template <class T>
+   struct rebind
+   {
+      typedef false_type type;
+   };
+};
+
+template <class T>
+struct is_unsigned
+{
+   typedef ::pdalboost::detail::is_unsigned_select_helper< ::pdalboost::is_integral<T>::value || ::pdalboost::is_enum<T>::value > selector;
+   typedef typename selector::template rebind<T> binder;
+   typedef typename binder::type type;
+   BOOST_STATIC_CONSTANT(bool, value = type::value);
+};
+
+} // namespace detail
+
+template <class T> struct is_unsigned : public integral_constant<bool, pdalboost::detail::is_unsigned<T>::value> {};
+
+#else
+
+template <class T> struct is_unsigned : public false_type{};
+
+#endif
+
+#else // defined( __CODEGEARC__ )
+template <class T> struct is_unsigned : public integral_constant<bool, __is_unsigned(T)> {};
+#endif
+
+template <> struct is_unsigned<unsigned char> : public true_type{};
+template <> struct is_unsigned<const unsigned char> : public true_type{};
+template <> struct is_unsigned<volatile unsigned char> : public true_type{};
+template <> struct is_unsigned<const volatile unsigned char> : public true_type{};
+template <> struct is_unsigned<unsigned short> : public true_type{};
+template <> struct is_unsigned<const unsigned short> : public true_type{};
+template <> struct is_unsigned<volatile unsigned short> : public true_type{};
+template <> struct is_unsigned<const volatile unsigned short> : public true_type{};
+template <> struct is_unsigned<unsigned int> : public true_type{};
+template <> struct is_unsigned<const unsigned int> : public true_type{};
+template <> struct is_unsigned<volatile unsigned int> : public true_type{};
+template <> struct is_unsigned<const volatile unsigned int> : public true_type{};
+template <> struct is_unsigned<unsigned long> : public true_type{};
+template <> struct is_unsigned<const unsigned long> : public true_type{};
+template <> struct is_unsigned<volatile unsigned long> : public true_type{};
+template <> struct is_unsigned<const volatile unsigned long> : public true_type{};
+
+template <> struct is_unsigned<signed char> : public false_type{};
+template <> struct is_unsigned<const signed char> : public false_type{};
+template <> struct is_unsigned<volatile signed char> : public false_type{};
+template <> struct is_unsigned<const volatile signed char> : public false_type{};
+template <> struct is_unsigned< short> : public false_type{};
+template <> struct is_unsigned<const  short> : public false_type{};
+template <> struct is_unsigned<volatile  short> : public false_type{};
+template <> struct is_unsigned<const volatile  short> : public false_type{};
+template <> struct is_unsigned< int> : public false_type{};
+template <> struct is_unsigned<const  int> : public false_type{};
+template <> struct is_unsigned<volatile  int> : public false_type{};
+template <> struct is_unsigned<const volatile  int> : public false_type{};
+template <> struct is_unsigned< long> : public false_type{};
+template <> struct is_unsigned<const  long> : public false_type{};
+template <> struct is_unsigned<volatile  long> : public false_type{};
+template <> struct is_unsigned<const volatile  long> : public false_type{};
+#ifdef BOOST_HAS_LONG_LONG
+template <> struct is_unsigned< ::pdalboost::ulong_long_type> : public true_type{};
+template <> struct is_unsigned<const ::pdalboost::ulong_long_type> : public true_type{};
+template <> struct is_unsigned<volatile ::pdalboost::ulong_long_type> : public true_type{};
+template <> struct is_unsigned<const volatile ::pdalboost::ulong_long_type> : public true_type{};
+
+template <> struct is_unsigned< ::pdalboost::long_long_type> : public false_type{};
+template <> struct is_unsigned<const ::pdalboost::long_long_type> : public false_type{};
+template <> struct is_unsigned<volatile ::pdalboost::long_long_type> : public false_type{};
+template <> struct is_unsigned<const volatile ::pdalboost::long_long_type> : public false_type{};
+#endif
+#if defined(CHAR_MIN) 
+#if CHAR_MIN == 0
+template <> struct is_unsigned<char> : public true_type{};
+template <> struct is_unsigned<const char> : public true_type{};
+template <> struct is_unsigned<volatile char> : public true_type{};
+template <> struct is_unsigned<const volatile char> : public true_type{};
+#else
+template <> struct is_unsigned<char> : public false_type{};
+template <> struct is_unsigned<const char> : public false_type{};
+template <> struct is_unsigned<volatile char> : public false_type{};
+template <> struct is_unsigned<const volatile char> : public false_type{};
+#endif
+#endif
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) && defined(WCHAR_MIN)
+#if WCHAR_MIN == 0
+template <> struct is_unsigned<wchar_t> : public true_type{};
+template <> struct is_unsigned<const wchar_t> : public true_type{};
+template <> struct is_unsigned<volatile wchar_t> : public true_type{};
+template <> struct is_unsigned<const volatile wchar_t> : public true_type{};
+#else
+template <> struct is_unsigned<wchar_t> : public false_type{};
+template <> struct is_unsigned<const wchar_t> : public false_type{};
+template <> struct is_unsigned<volatile wchar_t> : public false_type{};
+template <> struct is_unsigned<const volatile wchar_t> : public false_type{};
+#endif
+#endif
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_virtual_base_of.hpp b/vendor/pdalboost/boost/type_traits/is_virtual_base_of.hpp
new file mode 100644
index 0000000..7042563
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_virtual_base_of.hpp
@@ -0,0 +1,105 @@
+//  (C) Copyright Daniel Frey and Robert Ramey 2009.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+ 
+#ifndef BOOST_TT_IS_VIRTUAL_BASE_OF_HPP_INCLUDED
+#define BOOST_TT_IS_VIRTUAL_BASE_OF_HPP_INCLUDED
+
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace pdalboost {
+namespace detail {
+
+
+#ifdef BOOST_MSVC
+#pragma warning( push )
+#pragma warning( disable : 4584 4250)
+#elif defined(__GNUC__) && (__GNUC__ >= 4)
+#pragma GCC system_header
+#endif
+
+template<typename Base, typename Derived, typename tag>
+struct is_virtual_base_of_impl
+{
+    BOOST_STATIC_CONSTANT(bool, value = false);
+};
+
+template<typename Base, typename Derived>
+struct is_virtual_base_of_impl<Base, Derived, true_type>
+{
+   union max_align
+   {
+      unsigned u;
+      unsigned long ul;
+      void* v;
+      double d;
+      long double ld;
+#ifndef BOOST_NO_LONG_LONG
+      long long ll;
+#endif
+   };
+#ifdef __BORLANDC__
+    struct boost_type_traits_internal_struct_X : public virtual Derived, public virtual Base 
+    {
+       boost_type_traits_internal_struct_X();
+       boost_type_traits_internal_struct_X(const boost_type_traits_internal_struct_X&);
+       boost_type_traits_internal_struct_X& operator=(const boost_type_traits_internal_struct_X&);
+       ~boost_type_traits_internal_struct_X()throw();
+       max_align data[4];
+    };
+    struct boost_type_traits_internal_struct_Y : public virtual Derived 
+    {
+       boost_type_traits_internal_struct_Y();
+       boost_type_traits_internal_struct_Y(const boost_type_traits_internal_struct_Y&);
+       boost_type_traits_internal_struct_Y& operator=(const boost_type_traits_internal_struct_Y&);
+       ~boost_type_traits_internal_struct_Y()throw();
+       max_align data[4];
+    };
+#else
+    struct boost_type_traits_internal_struct_X : public Derived, virtual Base 
+    {
+       boost_type_traits_internal_struct_X();
+       boost_type_traits_internal_struct_X(const boost_type_traits_internal_struct_X&);
+       boost_type_traits_internal_struct_X& operator=(const boost_type_traits_internal_struct_X&);
+       ~boost_type_traits_internal_struct_X()throw();
+       max_align data[16];
+    };
+    struct boost_type_traits_internal_struct_Y : public Derived 
+    {
+       boost_type_traits_internal_struct_Y();
+       boost_type_traits_internal_struct_Y(const boost_type_traits_internal_struct_Y&);
+       boost_type_traits_internal_struct_Y& operator=(const boost_type_traits_internal_struct_Y&);
+       ~boost_type_traits_internal_struct_Y()throw();
+       max_align data[16];
+    };
+#endif
+    BOOST_STATIC_CONSTANT(bool, value = (sizeof(boost_type_traits_internal_struct_X)==sizeof(boost_type_traits_internal_struct_Y)));
+};
+
+template<typename Base, typename Derived>
+struct is_virtual_base_of_impl2
+{
+   typedef pdalboost::integral_constant<bool, (pdalboost::is_base_of<Base, Derived>::value && ! pdalboost::is_same<Base, Derived>::value)> tag_type;
+   typedef is_virtual_base_of_impl<Base, Derived, tag_type> imp;
+   BOOST_STATIC_CONSTANT(bool, value = imp::value);
+};
+
+#ifdef BOOST_MSVC
+#pragma warning( pop )
+#endif
+
+} // namespace detail
+
+template <class Base, class Derived> struct is_virtual_base_of : public integral_constant<bool, (::pdalboost::detail::is_virtual_base_of_impl2<Base, Derived>::value)>{};
+
+template <class Base, class Derived> struct is_virtual_base_of<Base&, Derived> : public false_type{};
+template <class Base, class Derived> struct is_virtual_base_of<Base, Derived&> : public false_type{};
+template <class Base, class Derived> struct is_virtual_base_of<Base&, Derived&> : public false_type{};
+
+} // namespace pdalboost
+
+#endif
diff --git a/vendor/pdalboost/boost/type_traits/is_void.hpp b/vendor/pdalboost/boost/type_traits/is_void.hpp
new file mode 100644
index 0000000..6ddd8fb
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_void.hpp
@@ -0,0 +1,26 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_IS_VOID_HPP_INCLUDED
+#define BOOST_TT_IS_VOID_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+
+namespace pdalboost {
+
+template <class T>
+struct is_void : public false_type {};
+
+template<> struct is_void<void> : public true_type {};
+template<> struct is_void<const void> : public true_type{};
+template<> struct is_void<const volatile void> : public true_type{};
+template<> struct is_void<volatile void> : public true_type{};
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_VOID_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/is_volatile.hpp b/vendor/pdalboost/boost/type_traits/is_volatile.hpp
new file mode 100644
index 0000000..0fe56ee
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/is_volatile.hpp
@@ -0,0 +1,45 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, 
+//      Howard Hinnant and John Maddock 2000. 
+//  (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+//    Fixed is_pointer, is_reference, is_const, is_volatile, is_same, 
+//    is_member_pointer based on the Simulated Partial Specialization work 
+//    of Mat Marcus and Jesse Jones. See  http://opensource.adobe.com or 
+//    http://groups.yahoo.com/group/boost/message/5441 
+//    Some workarounds in here use ideas suggested from "Generic<Programming>: 
+//    Mappings between Types and Values" 
+//    by Andrei Alexandrescu (see http://www.cuj.com/experts/1810/alexandr.html).
+
+
+#ifndef BOOST_TT_IS_VOLATILE_HPP_INCLUDED
+#define BOOST_TT_IS_VOLATILE_HPP_INCLUDED
+
+#include <boost/type_traits/integral_constant.hpp>
+
+namespace pdalboost {
+
+#if defined( __CODEGEARC__ )
+
+   template <class T>
+   struct is_volatile : public integral_constant<bool, __is_volatile(T)> {};
+
+#else
+
+   template <class T>
+   struct is_volatile : public false_type {};
+   template <class T> struct is_volatile<T volatile> : public true_type{};
+   template <class T, size_t N> struct is_volatile<T volatile[N]> : public true_type{};
+   template <class T> struct is_volatile<T volatile[]> : public true_type{};
+
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_IS_VOLATILE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/make_signed.hpp b/vendor/pdalboost/boost/type_traits/make_signed.hpp
new file mode 100644
index 0000000..b48e43d
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/make_signed.hpp
@@ -0,0 +1,131 @@
+
+//  (C) Copyright John Maddock 2007.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_MAKE_SIGNED_HPP_INCLUDED
+#define BOOST_TT_MAKE_SIGNED_HPP_INCLUDED
+
+#include <boost/type_traits/conditional.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_signed.hpp>
+#include <boost/type_traits/is_unsigned.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_volatile.hpp>
+#include <boost/static_assert.hpp>
+
+namespace pdalboost {
+
+template <class T>
+struct make_signed
+{
+private:
+   BOOST_STATIC_ASSERT_MSG(( ::pdalboost::is_integral<T>::value || ::pdalboost::is_enum<T>::value), "The template argument to make_signed must be an integer or enum type.");
+   BOOST_STATIC_ASSERT_MSG(!(::pdalboost::is_same<typename remove_cv<T>::type, bool>::value), "The template argument to make_signed must not be the type bool.");
+
+   typedef typename remove_cv<T>::type t_no_cv;
+   typedef typename conditional<
+      (::pdalboost::is_signed<T>::value
+      && ::pdalboost::is_integral<T>::value
+      && ! ::pdalboost::is_same<t_no_cv, char>::value
+      && ! ::pdalboost::is_same<t_no_cv, wchar_t>::value
+      && ! ::pdalboost::is_same<t_no_cv, bool>::value),
+      T,
+      typename conditional<
+         (::pdalboost::is_integral<T>::value
+         && ! ::pdalboost::is_same<t_no_cv, char>::value
+         && ! ::pdalboost::is_same<t_no_cv, wchar_t>::value
+         && ! ::pdalboost::is_same<t_no_cv, bool>::value),
+         typename conditional<
+            is_same<t_no_cv, unsigned char>::value,
+            signed char,
+            typename conditional<
+               is_same<t_no_cv, unsigned short>::value,
+               signed short,
+               typename conditional<
+                  is_same<t_no_cv, unsigned int>::value,
+                  int,
+                  typename conditional<
+                     is_same<t_no_cv, unsigned long>::value,
+                     long,
+#if defined(BOOST_HAS_LONG_LONG)
+#ifdef BOOST_HAS_INT128
+                     typename conditional<
+                        sizeof(t_no_cv) == sizeof(pdalboost::long_long_type), 
+                        pdalboost::long_long_type, 
+                        pdalboost::int128_type
+                     >::type
+#else
+                     pdalboost::long_long_type
+#endif
+#elif defined(BOOST_HAS_MS_INT64)
+                     __int64
+#else
+                     long
+#endif
+                  >::type
+               >::type
+            >::type
+         >::type,
+         // Not a regular integer type:
+         typename conditional<
+            sizeof(t_no_cv) == sizeof(unsigned char),
+            signed char,
+            typename conditional<
+               sizeof(t_no_cv) == sizeof(unsigned short),
+               signed short,
+               typename conditional<
+                  sizeof(t_no_cv) == sizeof(unsigned int),
+                  int,
+                  typename conditional<
+                     sizeof(t_no_cv) == sizeof(unsigned long),
+                     long,
+#if defined(BOOST_HAS_LONG_LONG)
+#ifdef BOOST_HAS_INT128
+                     typename conditional<
+                        sizeof(t_no_cv) == sizeof(pdalboost::long_long_type), 
+                        pdalboost::long_long_type, 
+                        pdalboost::int128_type
+                     >::type
+#else
+                     pdalboost::long_long_type
+#endif
+#elif defined(BOOST_HAS_MS_INT64)
+                     __int64
+#else
+                     long
+#endif
+                  >::type
+               >::type
+            >::type
+         >::type
+      >::type
+   >::type base_integer_type;
+   
+   // Add back any const qualifier:
+   typedef typename conditional<
+      is_const<T>::value,
+      typename add_const<base_integer_type>::type,
+      base_integer_type
+   >::type const_base_integer_type;
+public:
+   // Add back any volatile qualifier:
+   typedef typename conditional<
+      is_volatile<T>::value,
+      typename add_volatile<const_base_integer_type>::type,
+      const_base_integer_type
+   >::type type;
+};
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED
+
diff --git a/vendor/pdalboost/boost/type_traits/make_unsigned.hpp b/vendor/pdalboost/boost/type_traits/make_unsigned.hpp
new file mode 100644
index 0000000..6e39267
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/make_unsigned.hpp
@@ -0,0 +1,130 @@
+
+//  (C) Copyright John Maddock 2007.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_MAKE_UNSIGNED_HPP_INCLUDED
+#define BOOST_TT_MAKE_UNSIGNED_HPP_INCLUDED
+
+#include <boost/type_traits/conditional.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_signed.hpp>
+#include <boost/type_traits/is_unsigned.hpp>
+#include <boost/type_traits/is_enum.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_volatile.hpp>
+#include <boost/static_assert.hpp>
+
+namespace pdalboost {
+
+template <class T>
+struct make_unsigned
+{
+private:
+   BOOST_STATIC_ASSERT_MSG((::pdalboost::is_integral<T>::value || ::pdalboost::is_enum<T>::value), "The template argument to make_unsigned must be an integer or enum type.");
+   BOOST_STATIC_ASSERT_MSG((! ::pdalboost::is_same<typename remove_cv<T>::type, bool>::value), "The template argument to make_unsigned must not be the type bool");
+
+   typedef typename remove_cv<T>::type t_no_cv;
+   typedef typename conditional<
+      (::pdalboost::is_unsigned<T>::value && ::pdalboost::is_integral<T>::value 
+      && ! ::pdalboost::is_same<t_no_cv, char>::value
+      && ! ::pdalboost::is_same<t_no_cv, wchar_t>::value
+      && ! ::pdalboost::is_same<t_no_cv, bool>::value),
+      T,
+      typename conditional<
+         (::pdalboost::is_integral<T>::value 
+         && ! ::pdalboost::is_same<t_no_cv, char>::value
+         && ! ::pdalboost::is_same<t_no_cv, wchar_t>::value
+         && ! ::pdalboost::is_same<t_no_cv, bool>::value),
+         typename conditional<
+            is_same<t_no_cv, signed char>::value,
+            unsigned char,
+            typename conditional<
+               is_same<t_no_cv, short>::value,
+               unsigned short,
+               typename conditional<
+                  is_same<t_no_cv, int>::value,
+                  unsigned int,
+                  typename conditional<
+                     is_same<t_no_cv, long>::value,
+                     unsigned long,
+#if defined(BOOST_HAS_LONG_LONG)
+#ifdef BOOST_HAS_INT128
+                     typename conditional<
+                        sizeof(t_no_cv) == sizeof(pdalboost::ulong_long_type), 
+                        pdalboost::ulong_long_type, 
+                        pdalboost::uint128_type
+                     >::type
+#else
+                     pdalboost::ulong_long_type
+#endif
+#elif defined(BOOST_HAS_MS_INT64)
+                     unsigned __int64
+#else
+                     unsigned long
+#endif
+                  >::type
+               >::type
+            >::type
+         >::type,
+         // Not a regular integer type:
+         typename conditional<
+            sizeof(t_no_cv) == sizeof(unsigned char),
+            unsigned char,
+            typename conditional<
+               sizeof(t_no_cv) == sizeof(unsigned short),
+               unsigned short,
+               typename conditional<
+                  sizeof(t_no_cv) == sizeof(unsigned int),
+                  unsigned int,
+                  typename conditional<
+                     sizeof(t_no_cv) == sizeof(unsigned long),
+                     unsigned long,
+#if defined(BOOST_HAS_LONG_LONG)
+#ifdef BOOST_HAS_INT128
+                     typename conditional<
+                        sizeof(t_no_cv) == sizeof(pdalboost::ulong_long_type), 
+                        pdalboost::ulong_long_type, 
+                        pdalboost::uint128_type
+                     >::type
+#else
+                     pdalboost::ulong_long_type
+#endif
+#elif defined(BOOST_HAS_MS_INT64)
+                     unsigned __int64
+#else
+                     unsigned long
+#endif
+                  >::type
+               >::type
+            >::type
+         >::type
+      >::type
+   >::type base_integer_type;
+   
+   // Add back any const qualifier:
+   typedef typename conditional<
+      is_const<T>::value,
+      typename add_const<base_integer_type>::type,
+      base_integer_type
+   >::type const_base_integer_type;
+public:
+   // Add back any volatile qualifier:
+   typedef typename conditional<
+      is_volatile<T>::value,
+      typename add_volatile<const_base_integer_type>::type,
+      const_base_integer_type
+   >::type type;
+};
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_ADD_REFERENCE_HPP_INCLUDED
+
diff --git a/vendor/pdalboost/boost/type_traits/remove_all_extents.hpp b/vendor/pdalboost/boost/type_traits/remove_all_extents.hpp
new file mode 100644
index 0000000..2141ce0
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/remove_all_extents.hpp
@@ -0,0 +1,35 @@
+
+//  (C) Copyright John Maddock 2005.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_REMOVE_ALL_EXTENTS_HPP_INCLUDED
+#define BOOST_TT_REMOVE_ALL_EXTENTS_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <cstddef>
+#include <boost/detail/workaround.hpp>
+
+namespace pdalboost {
+
+template <class T> struct remove_all_extents{ typedef T type; };
+
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+template <class T, std::size_t N> struct remove_all_extents<T[N]> : public remove_all_extents<T>{};
+template <class T, std::size_t N> struct remove_all_extents<T const[N]> : public remove_all_extents<T const>{};
+template <class T, std::size_t N> struct remove_all_extents<T volatile[N]> : public remove_all_extents<T volatile>{};
+template <class T, std::size_t N> struct remove_all_extents<T const volatile[N]> : public remove_all_extents<T const volatile>{};
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+template <class T> struct remove_all_extents<T[]> : public remove_all_extents<T>{};
+template <class T> struct remove_all_extents<T const[]> : public remove_all_extents<T const>{};
+template <class T> struct remove_all_extents<T volatile[]> : public remove_all_extents<T volatile>{};
+template <class T> struct remove_all_extents<T const volatile[]> : public remove_all_extents<T const volatile>{};
+#endif
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/remove_bounds.hpp b/vendor/pdalboost/boost/type_traits/remove_bounds.hpp
new file mode 100644
index 0000000..2cd1760
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/remove_bounds.hpp
@@ -0,0 +1,21 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
+#define BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
+
+#include <boost/type_traits/remove_extent.hpp>
+
+namespace pdalboost 
+{
+
+template <class T> struct remove_bounds : public remove_extent<T> {};
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/remove_const.hpp b/vendor/pdalboost/boost/type_traits/remove_const.hpp
new file mode 100644
index 0000000..350ba62
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/remove_const.hpp
@@ -0,0 +1,33 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+//  Hinnant & John Maddock 2000.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_REMOVE_CONST_HPP_INCLUDED
+#define BOOST_TT_REMOVE_CONST_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <cstddef>
+#include <boost/detail/workaround.hpp>
+
+namespace pdalboost {
+
+   //  convert a type T to a non-cv-qualified type - remove_const<T>
+   template <class T> struct remove_const{ typedef T type; };
+   template <class T> struct remove_const<T const>{ typedef T type; };
+
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+   template <class T, std::size_t N> struct remove_const<T const[N]>{ typedef T type[N]; };
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+   template <class T> struct remove_const<T const[]>{ typedef T type[]; };
+#endif
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_REMOVE_CONST_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/remove_cv.hpp b/vendor/pdalboost/boost/type_traits/remove_cv.hpp
new file mode 100644
index 0000000..4f7e98c
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/remove_cv.hpp
@@ -0,0 +1,40 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+//  Hinnant & John Maddock 2000.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_REMOVE_CV_HPP_INCLUDED
+#define BOOST_TT_REMOVE_CV_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <cstddef>
+
+namespace pdalboost {
+
+   //  convert a type T to a non-cv-qualified type - remove_cv<T>
+template <class T> struct remove_cv{ typedef T type; };
+template <class T> struct remove_cv<T const>{ typedef T type;  };
+template <class T> struct remove_cv<T volatile>{ typedef T type; };
+template <class T> struct remove_cv<T const volatile>{ typedef T type; };
+
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+template <class T, std::size_t N> struct remove_cv<T const[N]>{ typedef T type[N]; };
+template <class T, std::size_t N> struct remove_cv<T const volatile[N]>{ typedef T type[N]; };
+template <class T, std::size_t N> struct remove_cv<T volatile[N]>{ typedef T type[N]; };
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+template <class T> struct remove_cv<T const[]>{ typedef T type[]; };
+template <class T> struct remove_cv<T const volatile[]>{ typedef T type[]; };
+template <class T> struct remove_cv<T volatile[]>{ typedef T type[]; };
+#endif
+#endif
+
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_REMOVE_CV_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/remove_extent.hpp b/vendor/pdalboost/boost/type_traits/remove_extent.hpp
new file mode 100644
index 0000000..ffed41a
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/remove_extent.hpp
@@ -0,0 +1,35 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000-2005.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_REMOVE_EXTENT_HPP_INCLUDED
+#define BOOST_TT_REMOVE_EXTENT_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <cstddef>
+
+namespace pdalboost {
+
+template <class T> struct remove_extent{ typedef T type; };
+
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+template <typename T, std::size_t N> struct remove_extent<T[N]> { typedef T type; };
+template <typename T, std::size_t N> struct remove_extent<T const[N]> { typedef T const type; };
+template <typename T, std::size_t N> struct remove_extent<T volatile [N]> { typedef T volatile type; };
+template <typename T, std::size_t N> struct remove_extent<T const volatile [N]> { typedef T const volatile type; };
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+template <typename T> struct remove_extent<T[]> { typedef T type; };
+template <typename T> struct remove_extent<T const[]> { typedef T const type; };
+template <typename T> struct remove_extent<T volatile[]> { typedef T volatile type; };
+template <typename T> struct remove_extent<T const volatile[]> { typedef T const volatile type; };
+#endif
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/remove_pointer.hpp b/vendor/pdalboost/boost/type_traits/remove_pointer.hpp
new file mode 100644
index 0000000..f936697
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/remove_pointer.hpp
@@ -0,0 +1,77 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_REMOVE_POINTER_HPP_INCLUDED
+#define BOOST_TT_REMOVE_POINTER_HPP_INCLUDED
+
+#include <boost/config.hpp>
+
+#if defined(BOOST_MSVC)
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#endif
+
+namespace pdalboost {
+
+#ifdef BOOST_MSVC
+
+namespace detail{
+
+   //
+   // We need all this crazy indirection because a type such as:
+   //
+   // T (*const)(U)
+   //
+   // Does not bind to a <T*> or <T*const> partial specialization with VC10 and earlier
+   //
+   template <class T> 
+   struct remove_pointer_imp
+   {
+      typedef T type;
+   };
+
+   template <class T> 
+   struct remove_pointer_imp<T*>
+   {
+      typedef T type;
+   };
+
+   template <class T, bool b> 
+   struct remove_pointer_imp3
+   {
+      typedef typename remove_pointer_imp<typename pdalboost::remove_cv<T>::type>::type type;
+   };
+
+   template <class T> 
+   struct remove_pointer_imp3<T, false>
+   {
+      typedef T type;
+   };
+
+   template <class T> 
+   struct remove_pointer_imp2
+   {
+      typedef typename remove_pointer_imp3<T, ::pdalboost::is_pointer<T>::value>::type type;
+   };
+}
+
+template <class T> struct remove_pointer{ typedef typename pdalboost::detail::remove_pointer_imp2<T>::type type; };
+
+#else
+
+template <class T> struct remove_pointer{ typedef T type; };
+template <class T> struct remove_pointer<T*>{ typedef T type; };
+template <class T> struct remove_pointer<T*const>{ typedef T type; };
+template <class T> struct remove_pointer<T*volatile>{ typedef T type; };
+template <class T> struct remove_pointer<T*const volatile>{ typedef T type; };
+
+#endif
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_REMOVE_POINTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/remove_reference.hpp b/vendor/pdalboost/boost/type_traits/remove_reference.hpp
new file mode 100644
index 0000000..129a249
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/remove_reference.hpp
@@ -0,0 +1,54 @@
+
+//  (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED
+#define BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+namespace pdalboost {
+
+
+namespace detail{
+//
+// We can't filter out rvalue_references at the same level as
+// references or we get ambiguities from msvc:
+//
+template <class T>
+struct remove_rvalue_ref
+{
+   typedef T type;
+};
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template <class T>
+struct remove_rvalue_ref<T&&>
+{
+   typedef T type;
+};
+#endif
+
+} // namespace detail
+
+template <class T> struct remove_reference{ typedef typename pdalboost::detail::remove_rvalue_ref<T>::type type; };
+template <class T> struct remove_reference<T&>{ typedef T type; };
+
+#if defined(BOOST_ILLEGAL_CV_REFERENCES)
+// these are illegal specialisations; cv-qualifies applied to
+// references have no effect according to [8.3.2p1],
+// C++ Builder requires them though as it treats cv-qualified
+// references as distinct types...
+template <class T> struct remove_reference<T&const>{ typedef T type; };
+template <class T> struct remove_reference<T&volatile>{ typedef T type; };
+template <class T> struct remove_reference<T&const volatile>{ typedef T type; };
+#endif
+
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_REMOVE_REFERENCE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/remove_volatile.hpp b/vendor/pdalboost/boost/type_traits/remove_volatile.hpp
new file mode 100644
index 0000000..9453dbc
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/remove_volatile.hpp
@@ -0,0 +1,34 @@
+
+//  (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+//  Hinnant & John Maddock 2000.  
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+
+#ifndef BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED
+#define BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <cstddef>
+
+namespace pdalboost {
+
+   //  convert a type T to a non-cv-qualified type - remove_volatile<T>
+   template <class T> struct remove_volatile{ typedef T type; };
+   template <class T> struct remove_volatile<T volatile>{ typedef T type; };
+
+#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
+   template <class T, std::size_t N> struct remove_volatile<T volatile[N]>{ typedef T type[N]; };
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+   template <class T> struct remove_volatile<T volatile[]>{ typedef T type[]; };
+#endif
+#endif
+
+
+} // namespace pdalboost
+
+#endif // BOOST_TT_REMOVE_VOLATILE_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/type_identity.hpp b/vendor/pdalboost/boost/type_traits/type_identity.hpp
new file mode 100644
index 0000000..98c7d6d
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/type_identity.hpp
@@ -0,0 +1,22 @@
+#ifndef BOOST_TYPE_TRAITS_TYPE_IDENTITY_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_TYPE_IDENTITY_HPP_INCLUDED
+
+//
+//  Copyright 2015 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+
+namespace pdalboost
+{
+
+template<class T> struct type_identity
+{
+    typedef T type;
+};
+
+} // namespace pdalboost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_TYPE_IDENTITY_HPP_INCLUDED
diff --git a/vendor/pdalboost/boost/type_traits/type_with_alignment.hpp b/vendor/pdalboost/boost/type_traits/type_with_alignment.hpp
new file mode 100644
index 0000000..789b8fa
--- /dev/null
+++ b/vendor/pdalboost/boost/type_traits/type_with_alignment.hpp
@@ -0,0 +1,261 @@
+//  (C) Copyright John Maddock 2000.
+//  Use, modification and distribution are subject to the Boost Software License,
+//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt).
+//
+//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
+
+#ifndef BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED
+#define BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED
+
+#include <boost/type_traits/alignment_of.hpp>
+#include <boost/type_traits/is_pod.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/config.hpp>
+#include <cstddef>
+#include <boost/detail/workaround.hpp>
+
+#ifdef BOOST_MSVC
+#   pragma warning(push)
+#   pragma warning(disable: 4121) // alignment is sensitive to packing
+#endif
+
+#ifdef _MSC_VER
+#include <boost/type_traits/conditional.hpp>
+#endif
+
+namespace pdalboost {
+   namespace detail{
+
+#ifndef __BORLANDC__
+
+      union max_align
+      {
+         char c;
+         short s;
+         int i;
+         long l;
+#ifndef BOOST_NO_LONG_LONG
+         pdalboost::long_long_type ll;
+#endif
+#ifdef BOOST_HAS_INT128
+         pdalboost::int128_type i128;
+#endif
+         float f;
+         double d;
+         long double ld;
+#ifdef BOOST_HAS_FLOAT128
+         __float128 f128;
+#endif
+      };
+
+template <std::size_t Target, bool check> struct long_double_alignment{ typedef long double type; };
+template <std::size_t Target> struct long_double_alignment<Target, false>{ typedef pdalboost::detail::max_align type; };
+
+template <std::size_t Target, bool check> struct double_alignment{ typedef double type; };
+template <std::size_t Target> struct double_alignment<Target, false>{ typedef typename long_double_alignment<Target, pdalboost::alignment_of<long double>::value >= Target>::type type; };
+
+#ifndef BOOST_NO_LONG_LONG
+template <std::size_t Target, bool check> struct long_long_alignment{ typedef pdalboost::long_long_type type; };
+template <std::size_t Target> struct long_long_alignment<Target, false>{ typedef typename double_alignment<Target, pdalboost::alignment_of<double>::value >= Target>::type type; };
+#endif
+
+template <std::size_t Target, bool check> struct long_alignment{ typedef long type; };
+#ifndef BOOST_NO_LONG_LONG
+template <std::size_t Target> struct long_alignment<Target, false>{ typedef typename long_long_alignment<Target, pdalboost::alignment_of<pdalboost::long_long_type>::value >= Target>::type type; };
+#else
+template <std::size_t Target> struct long_alignment<Target, false>{ typedef typename double_alignment<Target, pdalboost::alignment_of<double>::value >= Target>::type type; };
+#endif
+
+template <std::size_t Target, bool check> struct int_alignment{ typedef int type; };
+template <std::size_t Target> struct int_alignment<Target, false>{ typedef typename long_alignment<Target, pdalboost::alignment_of<long>::value >= Target>::type type; };
+
+template <std::size_t Target, bool check> struct short_alignment{ typedef short type; };
+template <std::size_t Target> struct short_alignment<Target, false>{ typedef typename int_alignment<Target, pdalboost::alignment_of<int>::value >= Target>::type type; };
+
+template <std::size_t Target, bool check> struct char_alignment{ typedef char type; };
+template <std::size_t Target> struct char_alignment<Target, false>{ typedef typename short_alignment<Target, pdalboost::alignment_of<short>::value >= Target>::type type; };
+
+}
+
+template <std::size_t Align>
+struct type_with_alignment 
+{
+   typedef typename pdalboost::detail::char_alignment<Align, pdalboost::alignment_of<char>::value >= Align>::type type;
+};
+
+#if (defined(__GNUC__) || (defined (__SUNPRO_CC) &&  (__SUNPRO_CC >= 0x5130)) || defined(__clang__)) && !defined(BOOST_TT_DISABLE_INTRINSICS)
+namespace tt_align_ns {
+struct __attribute__((__aligned__(2))) a2 {};
+struct __attribute__((__aligned__(4))) a4 {};
+struct __attribute__((__aligned__(8))) a8 {};
+struct __attribute__((__aligned__(16))) a16 {};
+struct __attribute__((__aligned__(32))) a32 {};
+struct __attribute__((__aligned__(64))) a64 {};
+struct __attribute__((__aligned__(128))) a128 {};
+}
+
+template<> struct type_with_alignment<1>  { public: typedef char type; };
+template<> struct type_with_alignment<2>  { public: typedef tt_align_ns::a2 type; };
+template<> struct type_with_alignment<4>  { public: typedef tt_align_ns::a4 type; };
+template<> struct type_with_alignment<8>  { public: typedef tt_align_ns::a8 type; };
+template<> struct type_with_alignment<16> { public: typedef tt_align_ns::a16 type; };
+template<> struct type_with_alignment<32> { public: typedef tt_align_ns::a32 type; };
+template<> struct type_with_alignment<64> { public: typedef tt_align_ns::a64 type; };
+template<> struct type_with_alignment<128> { public: typedef tt_align_ns::a128 type; };
+
+template<> struct is_pod< ::pdalboost::tt_align_ns::a2> : public true_type{};
+template<> struct is_pod< ::pdalboost::tt_align_ns::a4> : public true_type{};
+template<> struct is_pod< ::pdalboost::tt_align_ns::a8> : public true_type{};
+template<> struct is_pod< ::pdalboost::tt_align_ns::a16> : public true_type{};
+template<> struct is_pod< ::pdalboost::tt_align_ns::a32> : public true_type{};
+template<> struct is_pod< ::pdalboost::tt_align_ns::a64> : public true_type{};
+template<> struct is_pod< ::pdalboost::tt_align_ns::a128> : public true_type{};
+
+#endif
+#if (defined(BOOST_MSVC) || (defined(BOOST_INTEL) && defined(_MSC_VER))) && !defined(BOOST_TT_DISABLE_INTRINSICS)
+//
+// MSVC supports types which have alignments greater than the normal
+// maximum: these are used for example in the types __m64 and __m128
+// to provide types with alignment requirements which match the SSE
+// registers.  Therefore we extend type_with_alignment<> to support
+// such types, however, we have to be careful to use a builtin type
+// whenever possible otherwise we break previously working code:
+// see http://article.gmane.org/gmane.comp.lib.boost.devel/173011
+// for an example and test case.  Thus types like a8 below will
+// be used *only* if the existing implementation can't provide a type
+// with suitable alignment.  This does mean however, that type_with_alignment<>
+// may return a type which cannot be passed through a function call
+// by value (and neither can any type containing such a type like
+// Boost.Optional).  However, this only happens when we have no choice 
+// in the matter because no other "ordinary" type is available.
+//
+namespace tt_align_ns {
+struct __declspec(align(8)) a8 { 
+   char m[8]; 
+   typedef a8 type;
+};
+struct __declspec(align(16)) a16 { 
+   char m[16]; 
+   typedef a16 type;
+};
+struct __declspec(align(32)) a32 { 
+   char m[32]; 
+   typedef a32 type;
+};
+struct __declspec(align(64)) a64 
+{ 
+   char m[64]; 
+   typedef a64 type;
+};
+struct __declspec(align(128)) a128 { 
+   char m[128]; 
+   typedef a128 type;
+};
+}
+
+template<> struct type_with_alignment<8>  
+{ 
+   typedef pdalboost::conditional<
+      ::pdalboost::alignment_of<pdalboost::detail::max_align>::value < 8,
+      tt_align_ns::a8,
+      pdalboost::detail::char_alignment<8, false> >::type t1;
+public: 
+   typedef t1::type type;
+};
+template<> struct type_with_alignment<16> 
+{ 
+   typedef pdalboost::conditional<
+      ::pdalboost::alignment_of<pdalboost::detail::max_align>::value < 16,
+      tt_align_ns::a16,
+      pdalboost::detail::char_alignment<16, false> >::type t1;
+public: 
+   typedef t1::type type;
+};
+template<> struct type_with_alignment<32> 
+{ 
+   typedef pdalboost::conditional<
+      ::pdalboost::alignment_of<pdalboost::detail::max_align>::value < 32,
+      tt_align_ns::a32,
+      pdalboost::detail::char_alignment<32, false> >::type t1;
+public: 
+   typedef t1::type type;
+};
+template<> struct type_with_alignment<64> {
+   typedef pdalboost::conditional<
+      ::pdalboost::alignment_of<pdalboost::detail::max_align>::value < 64,
+      tt_align_ns::a64,
+      pdalboost::detail::char_alignment<64, false> >::type t1;
+public: 
+   typedef t1::type type;
+};
+template<> struct type_with_alignment<128> {
+   typedef pdalboost::conditional<
+      ::pdalboost::alignment_of<pdalboost::detail::max_align>::value < 128,
+      tt_align_ns::a128,
+      pdalboost::detail::char_alignment<128, false> >::type t1;
+public: 
+   typedef t1::type type;
+};
+
+template<> struct is_pod< ::pdalboost::tt_align_ns::a8> : public true_type{};
+template<> struct is_pod< ::pdalboost::tt_align_ns::a16> : public true_type{};
+template<> struct is_pod< ::pdalboost::tt_align_ns::a32> : public true_type{};
+template<> struct is_pod< ::pdalboost::tt_align_ns::a64> : public true_type{};
+template<> struct is_pod< ::pdalboost::tt_align_ns::a128> : public true_type{};
+
+#endif
+
+#else
+
+//
+// Borland specific version, we have this for two reasons:
+// 1) The version above doesn't always compile (with the new test cases for example)
+// 2) Because of Borlands #pragma option we can create types with alignments that are
+//    greater that the largest aligned builtin type.
+
+namespace tt_align_ns{
+#pragma option push -a16
+struct a2{ short s; };
+struct a4{ int s; };
+struct a8{ double s; };
+struct a16{ long double s; };
+#pragma option pop
+}
+
+namespace detail {
+
+typedef ::pdalboost::tt_align_ns::a16 max_align;
+
+}
+//#if ! BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610))
+template <> struct is_pod< ::pdalboost::tt_align_ns::a2> : public true_type{};
+template <> struct is_pod< ::pdalboost::tt_align_ns::a4> : public true_type{};
+template <> struct is_pod< ::pdalboost::tt_align_ns::a8> : public true_type{};
+template <> struct is_pod< ::pdalboost::tt_align_ns::a16> : public true_type{};
+//#endif
+
+template <std::size_t N> struct type_with_alignment
+{
+   // We should never get to here, but if we do use the maximally
+   // aligned type:
+   // BOOST_STATIC_ASSERT(0);
+   typedef tt_align_ns::a16 type;
+};
+template <> struct type_with_alignment<1>{ typedef char type; };
+template <> struct type_with_alignment<2>{ typedef tt_align_ns::a2 type; };
+template <> struct type_with_alignment<4>{ typedef tt_align_ns::a4 type; };
+template <> struct type_with_alignment<8>{ typedef tt_align_ns::a8 type; };
+template <> struct type_with_alignment<16>{ typedef tt_align_ns::a16 type; };
+
+#endif
+
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#   pragma warning(pop)
+#endif
+
+#endif // BOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED
+
+
diff --git a/vendor/pdalboost/boost/utility.hpp b/vendor/pdalboost/boost/utility.hpp
new file mode 100644
index 0000000..82177c8
--- /dev/null
+++ b/vendor/pdalboost/boost/utility.hpp
@@ -0,0 +1,21 @@
+//  Boost utility.hpp header file  -------------------------------------------//
+
+//  Copyright 1999-2003 Aleksey Gurtovoy.  Use, modification, and distribution are
+//  subject to the Boost Software License, Version 1.0.  (See accompanying file
+//  LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+//  See <http://www.boost.org/libs/utility/> for the library's home page.
+
+#ifndef BOOST_UTILITY_HPP
+#define BOOST_UTILITY_HPP
+
+#include <boost/utility/addressof.hpp>
+#include <boost/utility/base_from_member.hpp>
+#include <boost/utility/binary.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/utility/identity_type.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/next_prior.hpp>
+#include <boost/noncopyable.hpp>
+
+#endif  // BOOST_UTILITY_HPP
diff --git a/vendor/pdalboost/boost/utility/addressof.hpp b/vendor/pdalboost/boost/utility/addressof.hpp
new file mode 100644
index 0000000..db4da80
--- /dev/null
+++ b/vendor/pdalboost/boost/utility/addressof.hpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#ifndef BOOST_UTILITY_ADDRESSOF_HPP
+#define BOOST_UTILITY_ADDRESSOF_HPP
+
+// The header file at this path is deprecated;
+// use boost/core/addressof.hpp instead.
+
+#include <boost/core/addressof.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/utility/base_from_member.hpp b/vendor/pdalboost/boost/utility/base_from_member.hpp
new file mode 100644
index 0000000..25a0a8c
--- /dev/null
+++ b/vendor/pdalboost/boost/utility/base_from_member.hpp
@@ -0,0 +1,171 @@
+//  boost utility/base_from_member.hpp header file  --------------------------//
+
+//  Copyright 2001, 2003, 2004, 2012 Daryle Walker.  Use, modification, and
+//  distribution are subject to the Boost Software License, Version 1.0.  (See
+//  accompanying file LICENSE_1_0.txt or a copy at
+//  <http://www.boost.org/LICENSE_1_0.txt>.)
+
+//  See <http://www.boost.org/libs/utility/> for the library's home page.
+
+#ifndef BOOST_UTILITY_BASE_FROM_MEMBER_HPP
+#define BOOST_UTILITY_BASE_FROM_MEMBER_HPP
+
+#include <boost/config.hpp>
+#include <boost/preprocessor/arithmetic/inc.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/enable_if.hpp>
+
+
+//  Base-from-member arity configuration macro  ------------------------------//
+
+// The following macro determines how many arguments will be in the largest
+// constructor template of base_from_member.  Constructor templates will be
+// generated from one argument to this maximum.  Code from other files can read
+// this number if they need to always match the exact maximum base_from_member
+// uses.  The maximum constructor length can be changed by overriding the
+// #defined constant.  Make sure to apply the override, if any, for all source
+// files during project compiling for consistency.
+
+// Contributed by Jonathan Turkanis
+
+#ifndef BOOST_BASE_FROM_MEMBER_MAX_ARITY
+#define BOOST_BASE_FROM_MEMBER_MAX_ARITY  10
+#endif
+
+
+//  An iteration of a constructor template for base_from_member  -------------//
+
+// A macro that should expand to:
+//     template < typename T1, ..., typename Tn >
+//     base_from_member( T1 x1, ..., Tn xn )
+//         : member( x1, ..., xn )
+//         {}
+// This macro should only persist within this file.
+
+#define BOOST_PRIVATE_CTR_DEF( z, n, data )                            \
+    template < BOOST_PP_ENUM_PARAMS(n, typename T) >                   \
+    explicit base_from_member( BOOST_PP_ENUM_BINARY_PARAMS(n, T, x) )  \
+        : member( BOOST_PP_ENUM_PARAMS(n, x) )                         \
+        {}                                                             \
+    /**/
+
+
+namespace pdalboost
+{
+
+namespace detail
+{
+
+//  Type-unmarking class template  -------------------------------------------//
+
+// Type-trait to get the raw type, i.e. the type without top-level reference nor
+// cv-qualification, from a type expression.  Mainly for function arguments, any
+// reference part is stripped first.
+
+// Contributed by Daryle Walker
+
+template < typename T >
+struct remove_cv_ref
+{
+    typedef typename ::pdalboost::remove_cv<typename
+     ::pdalboost::remove_reference<T>::type>::type  type;
+
+};  // pdalboost::detail::remove_cv_ref
+
+//  Unmarked-type comparison class template  ---------------------------------//
+
+// Type-trait to check if two type expressions have the same raw type.
+
+// Contributed by Daryle Walker, based on a work-around by Luc Danton
+
+template < typename T, typename U >
+struct is_related
+    : public ::pdalboost::is_same<
+     typename ::pdalboost::detail::remove_cv_ref<T>::type,
+     typename ::pdalboost::detail::remove_cv_ref<U>::type >
+{};
+
+//  Enable-if-on-unidentical-unmarked-type class template  -------------------//
+
+// Enable-if on the first two type expressions NOT having the same raw type.
+
+// Contributed by Daryle Walker, based on a work-around by Luc Danton
+
+#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES
+template<typename ...T>
+struct enable_if_unrelated
+    : public ::pdalboost::enable_if_c<true>
+{};
+
+template<typename T, typename U, typename ...U2>
+struct enable_if_unrelated<T, U, U2...>
+    : public ::pdalboost::disable_if< ::pdalboost::detail::is_related<T, U> >
+{};
+#endif
+
+}  // namespace pdalboost::detail
+
+
+//  Base-from-member class template  -----------------------------------------//
+
+// Helper to initialize a base object so a derived class can use this
+// object in the initialization of another base class.  Used by
+// Dietmar Kuehl from ideas by Ron Klatcho to solve the problem of a
+// base class needing to be initialized by a member.
+
+// Contributed by Daryle Walker
+
+template < typename MemberType, int UniqueID = 0 >
+class base_from_member
+{
+protected:
+    MemberType  member;
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \
+    !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
+    !defined(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS) && \
+    !(defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ < 4))
+    template <typename ...T, typename EnableIf = typename
+     ::pdalboost::detail::enable_if_unrelated<base_from_member, T...>::type>
+    explicit BOOST_CONSTEXPR base_from_member( T&& ...x )
+        BOOST_NOEXCEPT_IF( BOOST_NOEXCEPT_EXPR(::new ((void*) 0) MemberType(
+         static_cast<T&&>(x)... )) )  // no std::is_nothrow_constructible...
+        : member( static_cast<T&&>(x)... )     // ...nor std::forward needed
+        {}
+#else
+    base_from_member()
+        : member()
+        {}
+
+    BOOST_PP_REPEAT_FROM_TO( 1, BOOST_PP_INC(BOOST_BASE_FROM_MEMBER_MAX_ARITY),
+     BOOST_PRIVATE_CTR_DEF, _ )
+#endif
+
+};  // pdalboost::base_from_member
+
+template < typename MemberType, int UniqueID >
+class base_from_member<MemberType&, UniqueID>
+{
+protected:
+    MemberType& member;
+
+    explicit BOOST_CONSTEXPR base_from_member( MemberType& x )
+        BOOST_NOEXCEPT
+        : member( x )
+        {}
+
+};  // pdalboost::base_from_member
+
+}  // namespace pdalboost
+
+
+// Undo any private macros
+#undef BOOST_PRIVATE_CTR_DEF
+
+
+#endif  // BOOST_UTILITY_BASE_FROM_MEMBER_HPP
diff --git a/vendor/pdalboost/boost/utility/binary.hpp b/vendor/pdalboost/boost/utility/binary.hpp
new file mode 100644
index 0000000..8cef146
--- /dev/null
+++ b/vendor/pdalboost/boost/utility/binary.hpp
@@ -0,0 +1,708 @@
+/*=============================================================================
+    Copyright (c) 2005 Matthew Calabrese
+
+    Use, modification and distribution is subject to the Boost Software
+    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+    http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+
+#ifndef BOOST_UTILITY_BINARY_HPP
+#define BOOST_UTILITY_BINARY_HPP
+
+/*=============================================================================
+
+    Binary Literal Utility
+    ______________________
+
+
+    The following code works by converting the input bit pattern into a
+    Boost.Preprocessor sequence, then converting groupings of 3 bits each into
+    the corresponding octal digit, and finally concatenating all of the digits
+    together along with a leading zero. This yields a standard octal literal
+    with the desired value as specified in bits.
+
+==============================================================================*/
+
+#include <boost/preprocessor/control/deduce_d.hpp>
+#include <boost/preprocessor/facilities/identity.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/seq/cat.hpp>
+#include <boost/preprocessor/seq/transform.hpp>
+#include <boost/preprocessor/arithmetic/mod.hpp>
+#include <boost/preprocessor/seq/size.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/control/while.hpp>
+
+#define BOOST_BINARY( bit_groupings )                                          \
+  BOOST_BINARY_LITERAL_D( BOOST_PP_DEDUCE_D(), bit_groupings ) 
+
+#define BOOST_BINARY_U( bit_groupings )                                        \
+  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, U ) 
+
+#define BOOST_BINARY_L( bit_groupings )                                        \
+  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, L ) 
+
+#define BOOST_BINARY_UL( bit_groupings )                                       \
+  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, UL ) 
+
+#define BOOST_BINARY_LU( bit_groupings )                                       \
+  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, LU ) 
+
+#define BOOST_BINARY_LL( bit_groupings )                                       \
+  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, LL ) 
+
+#define BOOST_BINARY_ULL( bit_groupings )                                      \
+  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, ULL ) 
+
+#define BOOST_BINARY_LLU( bit_groupings )                                      \
+  BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, LLU ) 
+
+#define BOOST_SUFFIXED_BINARY_LITERAL( bit_groupings, suffix )                 \
+  BOOST_SUFFIXED_BINARY_LITERAL_D( BOOST_PP_DEDUCE_D(), bit_groupings, suffix ) 
+
+#define BOOST_SUFFIXED_BINARY_LITERAL_D( d, bit_groupings, suffix )            \
+  BOOST_PP_CAT( BOOST_BINARY_LITERAL_D( d, bit_groupings ), suffix ) 
+
+#define BOOST_BINARY_LITERAL_D( d, bit_groupings )                             \
+  BOOST_PP_SEQ_CAT                                                             \
+  ( (0) BOOST_DETAIL_CREATE_BINARY_LITERAL_OCTAL_SEQUENCE( d, bit_groupings )  \
+  ) 
+
+#define BOOST_DETAIL_CREATE_BINARY_LITERAL_OCTAL_SEQUENCE( d, bit_groupings )  \
+  BOOST_PP_SEQ_TRANSFORM                                                       \
+  ( BOOST_DETAIL_TRIPLE_TO_OCTAL_OPERATION                                     \
+  , BOOST_PP_NIL                                                               \
+  , BOOST_PP_IDENTITY( BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_TRIPLE_SEQUENCE )()\
+    ( BOOST_DETAIL_COMPLETE_TRIPLE_SEQUENCE                                    \
+      (                                                                        \
+        d                                                                      \
+      , BOOST_DETAIL_CREATE_BINARY_LITERAL_BIT_SEQUENCE( d, bit_groupings )    \
+      )                                                                        \
+    )                                                                          \
+  ) 
+
+#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_TRIPLE_SEQUENCE( bit_sequence )   \
+  BOOST_PP_CAT                                                                 \
+  ( BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1 bit_sequence      \
+  , END_BIT                                                                    \
+  ) 
+
+#define BOOST_DETAIL_BITS_PER_OCTIT 3
+
+#define BOOST_DETAIL_COMPLETE_TRIPLE_SEQUENCE( d, incomplete_nibble_sequence ) \
+  BOOST_PP_CAT                                                                 \
+  ( BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_                            \
+  , BOOST_PP_MOD_D( d                                                          \
+                  , BOOST_PP_SEQ_SIZE( incomplete_nibble_sequence )            \
+                  , BOOST_DETAIL_BITS_PER_OCTIT                                \
+                  )                                                            \
+  )                                                                            \
+  incomplete_nibble_sequence 
+
+#define BOOST_DETAIL_FIXED_COMPL( bit )                                        \
+  BOOST_PP_CAT( BOOST_DETAIL_FIXED_COMPL_, bit )
+
+#define BOOST_DETAIL_FIXED_COMPL_0 1 
+
+#define BOOST_DETAIL_FIXED_COMPL_1 0 
+
+#define BOOST_DETAIL_CREATE_BINARY_LITERAL_BIT_SEQUENCE( d, bit_groupings )    \
+  BOOST_PP_EMPTY                                                               \
+  BOOST_PP_CAT( BOOST_PP_WHILE_, d )                                           \
+  ( BOOST_DETAIL_BINARY_LITERAL_PREDICATE                                      \
+  , BOOST_DETAIL_BINARY_LITERAL_OPERATION                                      \
+  , bit_groupings ()                                                           \
+  ) 
+
+#define BOOST_DETAIL_BINARY_LITERAL_PREDICATE( d, state )                      \
+  BOOST_DETAIL_FIXED_COMPL( BOOST_DETAIL_IS_NULLARY_ARGS( state ) ) 
+
+#define BOOST_DETAIL_BINARY_LITERAL_OPERATION( d, state )                      \
+  BOOST_DETAIL_SPLIT_AND_SWAP                                                  \
+  ( BOOST_PP_CAT( BOOST_DETAIL_BINARY_LITERAL_ELEMENT_, state ) ) 
+
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_OPERATION( s, dummy_param, tuple )        \
+  BOOST_DETAIL_TERNARY_TRIPLE_TO_OCTAL tuple 
+
+#define BOOST_DETAIL_TERNARY_TRIPLE_TO_OCTAL( bit2, bit1, bit0 )               \
+  BOOST_DETAIL_TRIPLE_TO_OCTAL_ ## bit2 ## bit1 ## bit0 
+
+#define BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_1 (0)(0)
+#define BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_2 (0)
+#define BOOST_DETAIL_CREATE_TRIPLE_COMPLETION_SEQUENCE_0  
+
+#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1END_BIT  
+
+#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1( bit )        \
+  ( ( bit, BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_2 
+
+#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_2( bit )        \
+  bit, BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_3 
+
+#define BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_3( bit )        \
+  bit ) ) BOOST_DETAIL_CONVERT_BIT_SEQUENCE_TO_PARENTHETIC_TUPLE_1 
+
+#define BOOST_DETAIL_SPLIT_AND_SWAP( params )                                  \
+  BOOST_PP_IDENTITY( BOOST_DETAIL_SPLIT_AND_SWAP_PARAMS )()( params )
+
+#define BOOST_DETAIL_SPLIT_AND_SWAP_PARAMS( first_param, second_param )        \
+  second_param first_param 
+
+#define BOOST_DETAIL_LEFT_OF_COMMA( params )                                   \
+  BOOST_PP_IDENTITY( BOOST_DETAIL_FIRST_MACRO_PARAM )()( params ) 
+
+#define BOOST_DETAIL_FIRST_MACRO_PARAM( first_param, second_param )            \
+  first_param 
+
+/* Begin derived concepts from Chaos by Paul Mensonides */
+
+#define BOOST_DETAIL_IS_NULLARY_ARGS( param )                                  \
+  BOOST_DETAIL_LEFT_OF_COMMA                                                   \
+  ( BOOST_PP_CAT( BOOST_DETAIL_IS_NULLARY_ARGS_R_                              \
+                , BOOST_DETAIL_IS_NULLARY_ARGS_C param                         \
+                )                                                              \
+  ) 
+
+#define BOOST_DETAIL_IS_NULLARY_ARGS_C()                                       \
+  1 
+
+#define BOOST_DETAIL_IS_NULLARY_ARGS_R_1                                       \
+  1, BOOST_PP_NIL 
+
+#define BOOST_DETAIL_IS_NULLARY_ARGS_R_BOOST_DETAIL_IS_NULLARY_ARGS_C          \
+  0, BOOST_PP_NIL 
+
+/* End derived concepts from Chaos by Paul Mensonides */
+
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_000 0 
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_001 1 
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_010 2 
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_011 3 
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_100 4 
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_101 5 
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_110 6 
+#define BOOST_DETAIL_TRIPLE_TO_OCTAL_111 7 
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0 (0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1 (1), 
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00 (0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01 (0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10 (1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11 (1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00 (0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01 (0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10 (1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11 (1)(1), 
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000 (0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001 (0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010 (0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011 (0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100 (1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101 (1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110 (1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111 (1)(1)(1), 
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000 (0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001 (0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010 (0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011 (0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100 (0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101 (0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110 (0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111 (0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000 (1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001 (1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010 (1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011 (1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100 (1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101 (1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110 (1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111 (1)(1)(1)(1), 
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000 (0)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001 (0)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010 (0)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011 (0)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100 (0)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101 (0)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110 (0)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111 (0)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000 (0)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001 (0)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010 (0)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011 (0)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100 (0)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101 (0)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110 (0)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111 (0)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000 (1)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001 (1)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010 (1)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011 (1)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100 (1)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101 (1)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110 (1)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111 (1)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000 (1)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001 (1)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010 (1)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011 (1)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100 (1)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101 (1)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110 (1)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111 (1)(1)(1)(1)(1), 
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000000 (0)(0)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000001 (0)(0)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000010 (0)(0)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000011 (0)(0)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000100 (0)(0)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000101 (0)(0)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000110 (0)(0)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_000111 (0)(0)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001000 (0)(0)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001001 (0)(0)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001010 (0)(0)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001011 (0)(0)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001100 (0)(0)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001101 (0)(0)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001110 (0)(0)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_001111 (0)(0)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010000 (0)(1)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010001 (0)(1)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010010 (0)(1)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010011 (0)(1)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010100 (0)(1)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010101 (0)(1)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010110 (0)(1)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_010111 (0)(1)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011000 (0)(1)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011001 (0)(1)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011010 (0)(1)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011011 (0)(1)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011100 (0)(1)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011101 (0)(1)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011110 (0)(1)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_011111 (0)(1)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100000 (1)(0)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100001 (1)(0)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100010 (1)(0)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100011 (1)(0)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100100 (1)(0)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100101 (1)(0)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100110 (1)(0)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_100111 (1)(0)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101000 (1)(0)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101001 (1)(0)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101010 (1)(0)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101011 (1)(0)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101100 (1)(0)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101101 (1)(0)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101110 (1)(0)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_101111 (1)(0)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110000 (1)(1)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110001 (1)(1)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110010 (1)(1)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110011 (1)(1)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110100 (1)(1)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110101 (1)(1)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110110 (1)(1)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_110111 (1)(1)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111000 (1)(1)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111001 (1)(1)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111010 (1)(1)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111011 (1)(1)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111100 (1)(1)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111101 (1)(1)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111110 (1)(1)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_111111 (1)(1)(1)(1)(1)(1), 
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000000 (0)(0)(0)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000001 (0)(0)(0)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000010 (0)(0)(0)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000011 (0)(0)(0)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000100 (0)(0)(0)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000101 (0)(0)(0)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000110 (0)(0)(0)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0000111 (0)(0)(0)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001000 (0)(0)(0)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001001 (0)(0)(0)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001010 (0)(0)(0)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001011 (0)(0)(0)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001100 (0)(0)(0)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001101 (0)(0)(0)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001110 (0)(0)(0)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0001111 (0)(0)(0)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010000 (0)(0)(1)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010001 (0)(0)(1)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010010 (0)(0)(1)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010011 (0)(0)(1)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010100 (0)(0)(1)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010101 (0)(0)(1)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010110 (0)(0)(1)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0010111 (0)(0)(1)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011000 (0)(0)(1)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011001 (0)(0)(1)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011010 (0)(0)(1)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011011 (0)(0)(1)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011100 (0)(0)(1)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011101 (0)(0)(1)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011110 (0)(0)(1)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0011111 (0)(0)(1)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100000 (0)(1)(0)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100001 (0)(1)(0)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100010 (0)(1)(0)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100011 (0)(1)(0)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100100 (0)(1)(0)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100101 (0)(1)(0)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100110 (0)(1)(0)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0100111 (0)(1)(0)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101000 (0)(1)(0)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101001 (0)(1)(0)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101010 (0)(1)(0)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101011 (0)(1)(0)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101100 (0)(1)(0)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101101 (0)(1)(0)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101110 (0)(1)(0)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0101111 (0)(1)(0)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110000 (0)(1)(1)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110001 (0)(1)(1)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110010 (0)(1)(1)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110011 (0)(1)(1)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110100 (0)(1)(1)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110101 (0)(1)(1)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110110 (0)(1)(1)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0110111 (0)(1)(1)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111000 (0)(1)(1)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111001 (0)(1)(1)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111010 (0)(1)(1)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111011 (0)(1)(1)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111100 (0)(1)(1)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111101 (0)(1)(1)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111110 (0)(1)(1)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_0111111 (0)(1)(1)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000000 (1)(0)(0)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000001 (1)(0)(0)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000010 (1)(0)(0)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000011 (1)(0)(0)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000100 (1)(0)(0)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000101 (1)(0)(0)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000110 (1)(0)(0)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1000111 (1)(0)(0)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001000 (1)(0)(0)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001001 (1)(0)(0)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001010 (1)(0)(0)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001011 (1)(0)(0)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001100 (1)(0)(0)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001101 (1)(0)(0)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001110 (1)(0)(0)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1001111 (1)(0)(0)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010000 (1)(0)(1)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010001 (1)(0)(1)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010010 (1)(0)(1)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010011 (1)(0)(1)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010100 (1)(0)(1)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010101 (1)(0)(1)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010110 (1)(0)(1)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1010111 (1)(0)(1)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011000 (1)(0)(1)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011001 (1)(0)(1)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011010 (1)(0)(1)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011011 (1)(0)(1)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011100 (1)(0)(1)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011101 (1)(0)(1)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011110 (1)(0)(1)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1011111 (1)(0)(1)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100000 (1)(1)(0)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100001 (1)(1)(0)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100010 (1)(1)(0)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100011 (1)(1)(0)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100100 (1)(1)(0)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100101 (1)(1)(0)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100110 (1)(1)(0)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1100111 (1)(1)(0)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101000 (1)(1)(0)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101001 (1)(1)(0)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101010 (1)(1)(0)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101011 (1)(1)(0)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101100 (1)(1)(0)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101101 (1)(1)(0)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101110 (1)(1)(0)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1101111 (1)(1)(0)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110000 (1)(1)(1)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110001 (1)(1)(1)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110010 (1)(1)(1)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110011 (1)(1)(1)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110100 (1)(1)(1)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110101 (1)(1)(1)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110110 (1)(1)(1)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1110111 (1)(1)(1)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111000 (1)(1)(1)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111001 (1)(1)(1)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111010 (1)(1)(1)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111011 (1)(1)(1)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111100 (1)(1)(1)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111101 (1)(1)(1)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111110 (1)(1)(1)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_1111111 (1)(1)(1)(1)(1)(1)(1), 
+
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000000 (0)(0)(0)(0)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000001 (0)(0)(0)(0)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000010 (0)(0)(0)(0)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000011 (0)(0)(0)(0)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000100 (0)(0)(0)(0)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000101 (0)(0)(0)(0)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000110 (0)(0)(0)(0)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00000111 (0)(0)(0)(0)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001000 (0)(0)(0)(0)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001001 (0)(0)(0)(0)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001010 (0)(0)(0)(0)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001011 (0)(0)(0)(0)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001100 (0)(0)(0)(0)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001101 (0)(0)(0)(0)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001110 (0)(0)(0)(0)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00001111 (0)(0)(0)(0)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010000 (0)(0)(0)(1)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010001 (0)(0)(0)(1)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010010 (0)(0)(0)(1)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010011 (0)(0)(0)(1)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010100 (0)(0)(0)(1)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010101 (0)(0)(0)(1)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010110 (0)(0)(0)(1)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00010111 (0)(0)(0)(1)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011000 (0)(0)(0)(1)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011001 (0)(0)(0)(1)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011010 (0)(0)(0)(1)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011011 (0)(0)(0)(1)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011100 (0)(0)(0)(1)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011101 (0)(0)(0)(1)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011110 (0)(0)(0)(1)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00011111 (0)(0)(0)(1)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100000 (0)(0)(1)(0)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100001 (0)(0)(1)(0)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100010 (0)(0)(1)(0)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100011 (0)(0)(1)(0)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100100 (0)(0)(1)(0)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100101 (0)(0)(1)(0)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100110 (0)(0)(1)(0)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00100111 (0)(0)(1)(0)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101000 (0)(0)(1)(0)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101001 (0)(0)(1)(0)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101010 (0)(0)(1)(0)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101011 (0)(0)(1)(0)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101100 (0)(0)(1)(0)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101101 (0)(0)(1)(0)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101110 (0)(0)(1)(0)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00101111 (0)(0)(1)(0)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110000 (0)(0)(1)(1)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110001 (0)(0)(1)(1)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110010 (0)(0)(1)(1)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110011 (0)(0)(1)(1)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110100 (0)(0)(1)(1)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110101 (0)(0)(1)(1)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110110 (0)(0)(1)(1)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00110111 (0)(0)(1)(1)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111000 (0)(0)(1)(1)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111001 (0)(0)(1)(1)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111010 (0)(0)(1)(1)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111011 (0)(0)(1)(1)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111100 (0)(0)(1)(1)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111101 (0)(0)(1)(1)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111110 (0)(0)(1)(1)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_00111111 (0)(0)(1)(1)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000000 (0)(1)(0)(0)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000001 (0)(1)(0)(0)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000010 (0)(1)(0)(0)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000011 (0)(1)(0)(0)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000100 (0)(1)(0)(0)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000101 (0)(1)(0)(0)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000110 (0)(1)(0)(0)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01000111 (0)(1)(0)(0)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001000 (0)(1)(0)(0)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001001 (0)(1)(0)(0)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001010 (0)(1)(0)(0)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001011 (0)(1)(0)(0)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001100 (0)(1)(0)(0)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001101 (0)(1)(0)(0)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001110 (0)(1)(0)(0)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01001111 (0)(1)(0)(0)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010000 (0)(1)(0)(1)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010001 (0)(1)(0)(1)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010010 (0)(1)(0)(1)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010011 (0)(1)(0)(1)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010100 (0)(1)(0)(1)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010101 (0)(1)(0)(1)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010110 (0)(1)(0)(1)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01010111 (0)(1)(0)(1)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011000 (0)(1)(0)(1)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011001 (0)(1)(0)(1)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011010 (0)(1)(0)(1)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011011 (0)(1)(0)(1)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011100 (0)(1)(0)(1)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011101 (0)(1)(0)(1)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011110 (0)(1)(0)(1)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01011111 (0)(1)(0)(1)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100000 (0)(1)(1)(0)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100001 (0)(1)(1)(0)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100010 (0)(1)(1)(0)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100011 (0)(1)(1)(0)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100100 (0)(1)(1)(0)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100101 (0)(1)(1)(0)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100110 (0)(1)(1)(0)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01100111 (0)(1)(1)(0)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101000 (0)(1)(1)(0)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101001 (0)(1)(1)(0)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101010 (0)(1)(1)(0)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101011 (0)(1)(1)(0)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101100 (0)(1)(1)(0)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101101 (0)(1)(1)(0)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101110 (0)(1)(1)(0)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01101111 (0)(1)(1)(0)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110000 (0)(1)(1)(1)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110001 (0)(1)(1)(1)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110010 (0)(1)(1)(1)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110011 (0)(1)(1)(1)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110100 (0)(1)(1)(1)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110101 (0)(1)(1)(1)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110110 (0)(1)(1)(1)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01110111 (0)(1)(1)(1)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111000 (0)(1)(1)(1)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111001 (0)(1)(1)(1)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111010 (0)(1)(1)(1)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111011 (0)(1)(1)(1)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111100 (0)(1)(1)(1)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111101 (0)(1)(1)(1)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111110 (0)(1)(1)(1)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_01111111 (0)(1)(1)(1)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000000 (1)(0)(0)(0)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000001 (1)(0)(0)(0)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000010 (1)(0)(0)(0)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000011 (1)(0)(0)(0)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000100 (1)(0)(0)(0)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000101 (1)(0)(0)(0)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000110 (1)(0)(0)(0)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10000111 (1)(0)(0)(0)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001000 (1)(0)(0)(0)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001001 (1)(0)(0)(0)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001010 (1)(0)(0)(0)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001011 (1)(0)(0)(0)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001100 (1)(0)(0)(0)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001101 (1)(0)(0)(0)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001110 (1)(0)(0)(0)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10001111 (1)(0)(0)(0)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010000 (1)(0)(0)(1)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010001 (1)(0)(0)(1)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010010 (1)(0)(0)(1)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010011 (1)(0)(0)(1)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010100 (1)(0)(0)(1)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010101 (1)(0)(0)(1)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010110 (1)(0)(0)(1)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10010111 (1)(0)(0)(1)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011000 (1)(0)(0)(1)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011001 (1)(0)(0)(1)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011010 (1)(0)(0)(1)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011011 (1)(0)(0)(1)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011100 (1)(0)(0)(1)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011101 (1)(0)(0)(1)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011110 (1)(0)(0)(1)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10011111 (1)(0)(0)(1)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100000 (1)(0)(1)(0)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100001 (1)(0)(1)(0)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100010 (1)(0)(1)(0)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100011 (1)(0)(1)(0)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100100 (1)(0)(1)(0)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100101 (1)(0)(1)(0)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100110 (1)(0)(1)(0)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10100111 (1)(0)(1)(0)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101000 (1)(0)(1)(0)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101001 (1)(0)(1)(0)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101010 (1)(0)(1)(0)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101011 (1)(0)(1)(0)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101100 (1)(0)(1)(0)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101101 (1)(0)(1)(0)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101110 (1)(0)(1)(0)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10101111 (1)(0)(1)(0)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110000 (1)(0)(1)(1)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110001 (1)(0)(1)(1)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110010 (1)(0)(1)(1)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110011 (1)(0)(1)(1)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110100 (1)(0)(1)(1)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110101 (1)(0)(1)(1)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110110 (1)(0)(1)(1)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10110111 (1)(0)(1)(1)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111000 (1)(0)(1)(1)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111001 (1)(0)(1)(1)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111010 (1)(0)(1)(1)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111011 (1)(0)(1)(1)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111100 (1)(0)(1)(1)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111101 (1)(0)(1)(1)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111110 (1)(0)(1)(1)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_10111111 (1)(0)(1)(1)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000000 (1)(1)(0)(0)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000001 (1)(1)(0)(0)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000010 (1)(1)(0)(0)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000011 (1)(1)(0)(0)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000100 (1)(1)(0)(0)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000101 (1)(1)(0)(0)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000110 (1)(1)(0)(0)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11000111 (1)(1)(0)(0)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001000 (1)(1)(0)(0)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001001 (1)(1)(0)(0)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001010 (1)(1)(0)(0)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001011 (1)(1)(0)(0)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001100 (1)(1)(0)(0)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001101 (1)(1)(0)(0)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001110 (1)(1)(0)(0)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11001111 (1)(1)(0)(0)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010000 (1)(1)(0)(1)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010001 (1)(1)(0)(1)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010010 (1)(1)(0)(1)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010011 (1)(1)(0)(1)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010100 (1)(1)(0)(1)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010101 (1)(1)(0)(1)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010110 (1)(1)(0)(1)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11010111 (1)(1)(0)(1)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011000 (1)(1)(0)(1)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011001 (1)(1)(0)(1)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011010 (1)(1)(0)(1)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011011 (1)(1)(0)(1)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011100 (1)(1)(0)(1)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011101 (1)(1)(0)(1)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011110 (1)(1)(0)(1)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11011111 (1)(1)(0)(1)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100000 (1)(1)(1)(0)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100001 (1)(1)(1)(0)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100010 (1)(1)(1)(0)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100011 (1)(1)(1)(0)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100100 (1)(1)(1)(0)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100101 (1)(1)(1)(0)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100110 (1)(1)(1)(0)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11100111 (1)(1)(1)(0)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101000 (1)(1)(1)(0)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101001 (1)(1)(1)(0)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101010 (1)(1)(1)(0)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101011 (1)(1)(1)(0)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101100 (1)(1)(1)(0)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101101 (1)(1)(1)(0)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101110 (1)(1)(1)(0)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11101111 (1)(1)(1)(0)(1)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110000 (1)(1)(1)(1)(0)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110001 (1)(1)(1)(1)(0)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110010 (1)(1)(1)(1)(0)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110011 (1)(1)(1)(1)(0)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110100 (1)(1)(1)(1)(0)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110101 (1)(1)(1)(1)(0)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110110 (1)(1)(1)(1)(0)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11110111 (1)(1)(1)(1)(0)(1)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111000 (1)(1)(1)(1)(1)(0)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111001 (1)(1)(1)(1)(1)(0)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111010 (1)(1)(1)(1)(1)(0)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111011 (1)(1)(1)(1)(1)(0)(1)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111100 (1)(1)(1)(1)(1)(1)(0)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111101 (1)(1)(1)(1)(1)(1)(0)(1), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111110 (1)(1)(1)(1)(1)(1)(1)(0), 
+#define BOOST_DETAIL_BINARY_LITERAL_ELEMENT_11111111 (1)(1)(1)(1)(1)(1)(1)(1), 
+
+#endif
diff --git a/vendor/pdalboost/boost/utility/compare_pointees.hpp b/vendor/pdalboost/boost/utility/compare_pointees.hpp
new file mode 100644
index 0000000..b1defdc
--- /dev/null
+++ b/vendor/pdalboost/boost/utility/compare_pointees.hpp
@@ -0,0 +1,68 @@
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+//
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/optional for documentation.
+//
+// You are welcome to contact the author at:
+//  fernando_cacciola at hotmail.com
+//
+#ifndef BOOST_UTILITY_COMPARE_POINTEES_25AGO2003_HPP
+#define BOOST_UTILITY_COMPARE_POINTEES_25AGO2003_HPP
+
+#include<functional>
+
+namespace pdalboost {
+
+// template<class OP> bool equal_pointees(OP const& x, OP const& y);
+// template<class OP> struct equal_pointees_t;
+//
+// Being OP a model of OptionalPointee (either a pointer or an optional):
+//
+// If both x and y have valid pointees, returns the result of (*x == *y)
+// If only one has a valid pointee, returns false.
+// If none have valid pointees, returns true.
+// No-throw
+template<class OptionalPointee>
+inline
+bool equal_pointees ( OptionalPointee const& x, OptionalPointee const& y )
+{
+  return (!x) != (!y) ? false : ( !x ? true : (*x) == (*y) ) ;
+}
+
+template<class OptionalPointee>
+struct equal_pointees_t : std::binary_function<OptionalPointee,OptionalPointee,bool>
+{
+  bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const
+    { return equal_pointees(x,y) ; }
+} ;
+
+// template<class OP> bool less_pointees(OP const& x, OP const& y);
+// template<class OP> struct less_pointees_t;
+//
+// Being OP a model of OptionalPointee (either a pointer or an optional):
+//
+// If y has not a valid pointee, returns false.
+// ElseIf x has not a valid pointee, returns true.
+// ElseIf both x and y have valid pointees, returns the result of (*x < *y)
+// No-throw
+template<class OptionalPointee>
+inline
+bool less_pointees ( OptionalPointee const& x, OptionalPointee const& y )
+{
+  return !y ? false : ( !x ? true : (*x) < (*y) ) ;
+}
+
+template<class OptionalPointee>
+struct less_pointees_t : std::binary_function<OptionalPointee,OptionalPointee,bool>
+{
+  bool operator() ( OptionalPointee const& x, OptionalPointee const& y ) const
+    { return less_pointees(x,y) ; }
+} ;
+
+} // namespace pdalboost
+
+#endif
+
diff --git a/vendor/pdalboost/boost/utility/declval.hpp b/vendor/pdalboost/boost/utility/declval.hpp
new file mode 100644
index 0000000..229e9a3
--- /dev/null
+++ b/vendor/pdalboost/boost/utility/declval.hpp
@@ -0,0 +1,13 @@
+//  declval.hpp  -------------------------------------------------------------//
+
+//  Copyright 2010 Vicente J. Botet Escriba
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#ifndef BOOST_UTILITY_DECLVAL_HPP
+#define BOOST_UTILITY_DECLVAL_HPP
+
+#include <boost/type_traits/declval.hpp>
+
+#endif  // BOOST_UTILITY_DECLVAL_HPP
diff --git a/vendor/pdalboost/boost/utility/detail/result_of_iterate.hpp b/vendor/pdalboost/boost/utility/detail/result_of_iterate.hpp
new file mode 100644
index 0000000..0460012
--- /dev/null
+++ b/vendor/pdalboost/boost/utility/detail/result_of_iterate.hpp
@@ -0,0 +1,221 @@
+// Boost result_of library
+
+//  Copyright Douglas Gregor 2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  Copyright Daniel Walker, Eric Niebler, Michel Morin 2008-2012.
+//  Use, modification and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or
+//  copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org/libs/utility
+#if !defined(BOOST_PP_IS_ITERATING)
+# error Boost result_of - do not include this file!
+#endif
+
+// CWPro8 requires an argument in a function type specialization
+#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3002)) && BOOST_PP_ITERATION() == 0
+# define BOOST_RESULT_OF_ARGS void
+#else
+# define BOOST_RESULT_OF_ARGS BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)
+#endif
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+template<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct tr1_result_of<F(BOOST_RESULT_OF_ARGS)>
+    : mpl::if_<
+          mpl::or_< is_pointer<F>, is_member_function_pointer<F> >
+        , pdalboost::detail::tr1_result_of_impl<
+            typename remove_cv<F>::type,
+            typename remove_cv<F>::type(BOOST_RESULT_OF_ARGS),
+            (pdalboost::detail::has_result_type<F>::value)>
+        , pdalboost::detail::tr1_result_of_impl<
+            F,
+            F(BOOST_RESULT_OF_ARGS),
+            (pdalboost::detail::has_result_type<F>::value)> >::type { };
+#endif
+
+#ifdef BOOST_RESULT_OF_USE_DECLTYPE
+template<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct result_of<F(BOOST_RESULT_OF_ARGS)>
+    : detail::cpp0x_result_of<F(BOOST_RESULT_OF_ARGS)> { };
+#endif // BOOST_RESULT_OF_USE_DECLTYPE
+
+#ifdef BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK
+template<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct result_of<F(BOOST_RESULT_OF_ARGS)>
+    : mpl::if_<mpl::or_<detail::has_result_type<F>, detail::has_result<F> >,
+               tr1_result_of<F(BOOST_RESULT_OF_ARGS)>,
+               detail::cpp0x_result_of<F(BOOST_RESULT_OF_ARGS)> >::type { };
+#endif // BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK
+
+#if defined(BOOST_RESULT_OF_USE_DECLTYPE) || defined(BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK)
+
+namespace detail {
+
+template<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct cpp0x_result_of<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T))>
+    : mpl::if_<
+          is_member_function_pointer<F>
+        , detail::tr1_result_of_impl<
+            typename remove_cv<F>::type,
+            typename remove_cv<F>::type(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), false
+          >
+        , detail::cpp0x_result_of_impl<
+              F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T))
+          >
+      >::type
+{};
+
+#ifdef BOOST_NO_SFINAE_EXPR
+
+template<typename F>
+struct BOOST_PP_CAT(result_of_callable_fun_2_, BOOST_PP_ITERATION());
+
+template<typename R BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), typename T)>
+struct BOOST_PP_CAT(result_of_callable_fun_2_, BOOST_PP_ITERATION())<R(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T))> {
+    R operator()(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)) const;
+    typedef result_of_private_type const &(*pfn_t)(...);
+    operator pfn_t() const volatile;
+};
+
+template<typename F>
+struct BOOST_PP_CAT(result_of_callable_fun_, BOOST_PP_ITERATION());
+
+template<typename F>
+struct BOOST_PP_CAT(result_of_callable_fun_, BOOST_PP_ITERATION())<F *>
+  : BOOST_PP_CAT(result_of_callable_fun_2_, BOOST_PP_ITERATION())<F>
+{};
+
+template<typename F>
+struct BOOST_PP_CAT(result_of_callable_fun_, BOOST_PP_ITERATION())<F &>
+  : BOOST_PP_CAT(result_of_callable_fun_2_, BOOST_PP_ITERATION())<F>
+{};
+
+template<typename F>
+struct BOOST_PP_CAT(result_of_select_call_wrapper_type_, BOOST_PP_ITERATION())
+  : mpl::eval_if<
+        is_class<typename remove_reference<F>::type>,
+        result_of_wrap_callable_class<F>,
+        mpl::identity<BOOST_PP_CAT(result_of_callable_fun_, BOOST_PP_ITERATION())<typename remove_cv<F>::type> >
+    >
+{};
+
+template<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), typename T)>
+struct BOOST_PP_CAT(result_of_is_callable_, BOOST_PP_ITERATION()) {
+    typedef typename BOOST_PP_CAT(result_of_select_call_wrapper_type_, BOOST_PP_ITERATION())<F>::type wrapper_t;
+    static const bool value = (
+        sizeof(result_of_no_type) == sizeof(detail::result_of_is_private_type(
+            (pdalboost::declval<wrapper_t>()(BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), pdalboost::declval<T, >() BOOST_PP_INTERCEPT)), result_of_weird_type())
+        ))
+    );
+    typedef mpl::bool_<value> type;
+};
+
+template<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct cpp0x_result_of_impl<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), true>
+    : lazy_enable_if<
+          BOOST_PP_CAT(result_of_is_callable_, BOOST_PP_ITERATION())<F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), T)>
+        , cpp0x_result_of_impl<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), false>
+      >
+{};
+
+template<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct cpp0x_result_of_impl<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), false>
+{
+  typedef decltype(
+    pdalboost::declval<F>()(
+      BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), pdalboost::declval<T, >() BOOST_PP_INTERCEPT)
+    )
+  ) type;
+};
+
+#else // BOOST_NO_SFINAE_EXPR
+
+template<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct cpp0x_result_of_impl<F(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)),
+                            typename result_of_always_void<decltype(
+                                pdalboost::declval<F>()(
+                                    BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), pdalboost::declval<T, >() BOOST_PP_INTERCEPT)
+                                )
+                            )>::type> {
+  typedef decltype(
+    pdalboost::declval<F>()(
+      BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), pdalboost::declval<T, >() BOOST_PP_INTERCEPT)
+    )
+  ) type;
+};
+
+#endif // BOOST_NO_SFINAE_EXPR
+
+} // namespace detail
+
+#else // defined(BOOST_RESULT_OF_USE_DECLTYPE) || defined(BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK)
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+template<typename F BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct result_of<F(BOOST_RESULT_OF_ARGS)>
+    : tr1_result_of<F(BOOST_RESULT_OF_ARGS)> { };
+#endif
+
+#endif // defined(BOOST_RESULT_OF_USE_DECLTYPE)
+
+#undef BOOST_RESULT_OF_ARGS
+
+#if BOOST_PP_ITERATION() >= 1
+
+namespace detail {
+
+template<typename R,  typename FArgs BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct tr1_result_of_impl<R (*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), FArgs, false>
+{
+  typedef R type;
+};
+
+template<typename R,  typename FArgs BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct tr1_result_of_impl<R (&)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), FArgs, false>
+{
+  typedef R type;
+};
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
+template<typename R, typename FArgs BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct tr1_result_of_impl<R (T0::*)
+                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T)),
+                 FArgs, false>
+{
+  typedef R type;
+};
+
+template<typename R, typename FArgs BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct tr1_result_of_impl<R (T0::*)
+                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
+                     const,
+                 FArgs, false>
+{
+  typedef R type;
+};
+
+template<typename R, typename FArgs BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct tr1_result_of_impl<R (T0::*)
+                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
+                     volatile,
+                 FArgs, false>
+{
+  typedef R type;
+};
+
+template<typename R, typename FArgs BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(),typename T)>
+struct tr1_result_of_impl<R (T0::*)
+                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
+                     const volatile,
+                 FArgs, false>
+{
+  typedef R type;
+};
+#endif
+
+}
+#endif
diff --git a/vendor/pdalboost/boost/utility/enable_if.hpp b/vendor/pdalboost/boost/utility/enable_if.hpp
new file mode 100644
index 0000000..803bfca
--- /dev/null
+++ b/vendor/pdalboost/boost/utility/enable_if.hpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#ifndef BOOST_UTILITY_ENABLE_IF_HPP
+#define BOOST_UTILITY_ENABLE_IF_HPP
+
+// The header file at this path is deprecated;
+// use boost/core/enable_if.hpp instead.
+
+#include <boost/core/enable_if.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/utility/identity_type.hpp b/vendor/pdalboost/boost/utility/identity_type.hpp
new file mode 100644
index 0000000..f43e5a8
--- /dev/null
+++ b/vendor/pdalboost/boost/utility/identity_type.hpp
@@ -0,0 +1,46 @@
+
+// Copyright (C) 2009-2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// Home at http://www.boost.org/libs/utility/identity_type
+
+/** @file
+Wrap type expressions with round parenthesis so they can be passed to macros
+even if they contain commas.
+*/
+
+#ifndef BOOST_IDENTITY_TYPE_HPP_
+#define BOOST_IDENTITY_TYPE_HPP_
+
+#include <boost/type_traits/function_traits.hpp>
+
+/**
+ at brief This macro allows to wrap the specified type expression within extra
+round parenthesis so the type can be passed as a single macro parameter even if
+it contains commas (not already wrapped within round parenthesis).
+
+ at Params
+ at Param{parenthesized_type,
+The type expression to be passed as macro parameter wrapped by a single set
+of round parenthesis <c>(...)</c>.
+This type expression can contain an arbitrary number of commas.
+}
+ at EndParams
+
+This macro works on any C++03 compiler (it does not use variadic macros).
+
+This macro must be prefixed by <c>typename</c> when used within templates.
+Note that the compiler will not be able to automatically determine function
+template parameters when they are wrapped with this macro (these parameters
+need to be explicitly specified when calling the function template).
+
+On some compilers (like GCC), using this macro on abstract types requires to
+add and remove a reference to the specified type.
+*/
+#define BOOST_IDENTITY_TYPE(parenthesized_type) \
+    /* must NOT prefix this with `::` to work with parenthesized syntax */ \
+    pdalboost::function_traits< void parenthesized_type >::arg1_type
+
+#endif // #include guard
+
diff --git a/vendor/pdalboost/boost/utility/result_of.hpp b/vendor/pdalboost/boost/utility/result_of.hpp
new file mode 100644
index 0000000..3820caf
--- /dev/null
+++ b/vendor/pdalboost/boost/utility/result_of.hpp
@@ -0,0 +1,210 @@
+// Boost result_of library
+
+//  Copyright Douglas Gregor 2004. Use, modification and
+//  distribution is subject to the Boost Software License, Version
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org/libs/utility
+#ifndef BOOST_RESULT_OF_HPP
+#define BOOST_RESULT_OF_HPP
+
+#include <boost/config.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/iteration/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
+#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+#include <boost/preprocessor/facilities/intercept.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/type_traits/is_class.hpp>
+#include <boost/type_traits/is_pointer.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/utility/declval.hpp>
+#include <boost/utility/enable_if.hpp>
+
+#ifndef BOOST_RESULT_OF_NUM_ARGS
+#  define BOOST_RESULT_OF_NUM_ARGS 16
+#endif
+
+// Use the decltype-based version of result_of by default if the compiler
+// supports N3276 <http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3276.pdf>.
+// The user can force the choice by defining BOOST_RESULT_OF_USE_DECLTYPE,
+// BOOST_RESULT_OF_USE_TR1, or BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK but not more than one!
+#if (defined(BOOST_RESULT_OF_USE_DECLTYPE) && defined(BOOST_RESULT_OF_USE_TR1)) || \
+    (defined(BOOST_RESULT_OF_USE_DECLTYPE) && defined(BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK)) || \
+    (defined(BOOST_RESULT_OF_USE_TR1) && defined(BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK))
+#  error More than one of BOOST_RESULT_OF_USE_DECLTYPE, BOOST_RESULT_OF_USE_TR1 and \
+  BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK cannot be defined at the same time.
+#endif
+
+#if defined(BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK) && defined(BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE)
+#  error Cannot fallback to decltype if BOOST_MPL_CFG_NO_HAS_XXX_TEMPLATE is not defined.
+#endif
+
+#ifndef BOOST_RESULT_OF_USE_TR1
+#  ifndef BOOST_RESULT_OF_USE_DECLTYPE
+#    ifndef BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK
+#      ifndef BOOST_NO_CXX11_DECLTYPE_N3276 // this implies !defined(BOOST_NO_CXX11_DECLTYPE)
+#        define BOOST_RESULT_OF_USE_DECLTYPE
+#      else
+#        define BOOST_RESULT_OF_USE_TR1
+#      endif
+#    endif
+#  endif
+#endif
+
+namespace pdalboost {
+
+template<typename F> struct result_of;
+template<typename F> struct tr1_result_of; // a TR1-style implementation of result_of
+
+#if !defined(BOOST_NO_SFINAE)
+namespace detail {
+
+BOOST_MPL_HAS_XXX_TRAIT_DEF(result_type)
+
+// Work around a nvcc bug by only defining has_result when it's needed.
+#ifdef BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK
+BOOST_MPL_HAS_XXX_TEMPLATE_DEF(result)
+#endif
+
+template<typename F, typename FArgs, bool HasResultType> struct tr1_result_of_impl;
+
+template<typename F> struct cpp0x_result_of;
+
+#ifdef BOOST_NO_SFINAE_EXPR
+
+// There doesn't seem to be any other way to turn this off such that the presence of
+// the user-defined operator,() below doesn't cause spurious warning all over the place,
+// so unconditionally turn it off.
+#if BOOST_MSVC
+#  pragma warning(disable: 4913) // user defined binary operator ',' exists but no overload could convert all operands, default built-in binary operator ',' used
+#endif
+
+struct result_of_private_type {};
+
+struct result_of_weird_type {
+  friend result_of_private_type operator,(result_of_private_type, result_of_weird_type);
+};
+
+typedef char result_of_yes_type;      // sizeof(result_of_yes_type) == 1
+typedef char (&result_of_no_type)[2]; // sizeof(result_of_no_type)  == 2
+
+template<typename T>
+result_of_no_type result_of_is_private_type(T const &);
+result_of_yes_type result_of_is_private_type(result_of_private_type);
+
+template<typename C>
+struct result_of_callable_class : C {
+    result_of_callable_class();
+    typedef result_of_private_type const &(*pfn_t)(...);
+    operator pfn_t() const volatile;
+};
+
+template<typename C>
+struct result_of_wrap_callable_class {
+  typedef result_of_callable_class<C> type;
+};
+
+template<typename C>
+struct result_of_wrap_callable_class<C const> {
+  typedef result_of_callable_class<C> const type;
+};
+
+template<typename C>
+struct result_of_wrap_callable_class<C volatile> {
+  typedef result_of_callable_class<C> volatile type;
+};
+
+template<typename C>
+struct result_of_wrap_callable_class<C const volatile> {
+  typedef result_of_callable_class<C> const volatile type;
+};
+
+template<typename C>
+struct result_of_wrap_callable_class<C &> {
+  typedef typename result_of_wrap_callable_class<C>::type &type;
+};
+
+template<typename F, bool TestCallability = true> struct cpp0x_result_of_impl;
+
+#else // BOOST_NO_SFINAE_EXPR
+
+template<typename T>
+struct result_of_always_void
+{
+  typedef void type;
+};
+
+template<typename F, typename Enable = void> struct cpp0x_result_of_impl {};
+
+#endif // BOOST_NO_SFINAE_EXPR
+
+template<typename F>
+struct result_of_void_impl
+{
+  typedef void type;
+};
+
+template<typename R>
+struct result_of_void_impl<R (*)(void)>
+{
+  typedef R type;
+};
+
+template<typename R>
+struct result_of_void_impl<R (&)(void)>
+{
+  typedef R type;
+};
+
+// Determine the return type of a function pointer or pointer to member.
+template<typename F, typename FArgs>
+struct result_of_pointer
+  : tr1_result_of_impl<typename remove_cv<F>::type, FArgs, false> { };
+
+template<typename F, typename FArgs>
+struct tr1_result_of_impl<F, FArgs, true>
+{
+  typedef typename F::result_type type;
+};
+
+template<typename FArgs>
+struct is_function_with_no_args : mpl::false_ {};
+
+template<typename F>
+struct is_function_with_no_args<F(void)> : mpl::true_ {};
+
+template<typename F, typename FArgs>
+struct result_of_nested_result : F::template result<FArgs>
+{};
+
+template<typename F, typename FArgs>
+struct tr1_result_of_impl<F, FArgs, false>
+  : mpl::if_<is_function_with_no_args<FArgs>,
+             result_of_void_impl<F>,
+             result_of_nested_result<F, FArgs> >::type
+{};
+
+} // end namespace detail
+
+#define BOOST_PP_ITERATION_PARAMS_1 (3,(0,BOOST_RESULT_OF_NUM_ARGS,<boost/utility/detail/result_of_iterate.hpp>))
+#include BOOST_PP_ITERATE()
+
+#else
+#  define BOOST_NO_RESULT_OF 1
+#endif
+
+}
+
+#endif // BOOST_RESULT_OF_HPP
diff --git a/vendor/pdalboost/boost/utility/swap.hpp b/vendor/pdalboost/boost/utility/swap.hpp
new file mode 100644
index 0000000..dd9ecd9
--- /dev/null
+++ b/vendor/pdalboost/boost/utility/swap.hpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2014 Glen Fernandes
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#ifndef BOOST_UTILITY_SWAP_HPP
+#define BOOST_UTILITY_SWAP_HPP
+
+// The header file at this path is deprecated;
+// use boost/core/swap.hpp instead.
+
+#include <boost/core/swap.hpp>
+
+#endif
diff --git a/vendor/pdalboost/boost/utility/value_init.hpp b/vendor/pdalboost/boost/utility/value_init.hpp
new file mode 100644
index 0000000..9c20bb5
--- /dev/null
+++ b/vendor/pdalboost/boost/utility/value_init.hpp
@@ -0,0 +1,281 @@
+// (C) Copyright 2002-2008, Fernando Luis Cacciola Carballal.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// 21 Ago 2002 (Created) Fernando Cacciola
+// 24 Dec 2007 (Refactored and worked around various compiler bugs) Fernando Cacciola, Niels Dekker
+// 23 May 2008 (Fixed operator= const issue, added initialized_value) Niels Dekker, Fernando Cacciola
+// 21 Ago 2008 (Added swap) Niels Dekker, Fernando Cacciola
+// 20 Feb 2009 (Fixed logical const-ness issues) Niels Dekker, Fernando Cacciola
+// 03 Apr 2010 (Added initialized<T>, suggested by Jeffrey Hellrung, fixing #3472) Niels Dekker
+// 30 May 2010 (Made memset call conditional, fixing #3869) Niels Dekker
+//
+#ifndef BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP
+#define BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP
+
+// Note: The implementation of pdalboost::value_initialized had to deal with the
+// fact that various compilers haven't fully implemented value-initialization.
+// The constructor of pdalboost::value_initialized<T> works around these compiler
+// issues, by clearing the bytes of T, before constructing the T object it
+// contains. More details on these issues are at libs/utility/value_init.htm
+
+#include <boost/aligned_storage.hpp>
+#include <boost/config.hpp> // For BOOST_NO_COMPLETE_VALUE_INITIALIZATION.
+#include <boost/detail/workaround.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/cv_traits.hpp>
+#include <boost/type_traits/alignment_of.hpp>
+#include <boost/swap.hpp>
+#include <cstring>
+#include <new>
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+// It is safe to ignore the following warning from MSVC 7.1 or higher:
+// "warning C4351: new behavior: elements of array will be default initialized"
+#pragma warning(disable: 4351)
+// It is safe to ignore the following MSVC warning, which may pop up when T is 
+// a const type: "warning C4512: assignment operator could not be generated".
+#pragma warning(disable: 4512)
+#endif
+
+#ifdef BOOST_NO_COMPLETE_VALUE_INITIALIZATION
+  // Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED 
+  // suggests that a workaround should be applied, because of compiler issues 
+  // regarding value-initialization.
+  #define BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED
+#endif
+
+// Implementation detail: The macro BOOST_DETAIL_VALUE_INIT_WORKAROUND
+// switches the value-initialization workaround either on or off.
+#ifndef BOOST_DETAIL_VALUE_INIT_WORKAROUND
+  #ifdef BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED
+  #define BOOST_DETAIL_VALUE_INIT_WORKAROUND 1
+  #else
+  #define BOOST_DETAIL_VALUE_INIT_WORKAROUND 0
+  #endif
+#endif
+
+namespace pdalboost {
+
+template<class T>
+class initialized
+{
+  private :
+    struct wrapper
+    {
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
+      typename
+#endif 
+      remove_const<T>::type data;
+
+      BOOST_GPU_ENABLED
+      wrapper()
+      :
+      data()
+      {
+      }
+
+      BOOST_GPU_ENABLED
+      wrapper(T const & arg)
+      :
+      data(arg)
+      {
+      }
+    };
+
+    mutable
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
+      typename
+#endif 
+      aligned_storage<sizeof(wrapper), alignment_of<wrapper>::value>::type x;
+
+    BOOST_GPU_ENABLED
+    wrapper * wrapper_address() const
+    {
+      return static_cast<wrapper *>( static_cast<void*>(&x));
+    }
+
+  public :
+
+    BOOST_GPU_ENABLED
+    initialized()
+    {
+#if BOOST_DETAIL_VALUE_INIT_WORKAROUND
+      std::memset(&x, 0, sizeof(x));
+#endif
+      new (wrapper_address()) wrapper();
+    }
+
+    BOOST_GPU_ENABLED
+    initialized(initialized const & arg)
+    {
+      new (wrapper_address()) wrapper( static_cast<wrapper const &>(*(arg.wrapper_address())));
+    }
+
+    BOOST_GPU_ENABLED
+    explicit initialized(T const & arg)
+    {
+      new (wrapper_address()) wrapper(arg);
+    }
+
+    BOOST_GPU_ENABLED
+    initialized & operator=(initialized const & arg)
+    {
+      // Assignment is only allowed when T is non-const.
+      BOOST_STATIC_ASSERT( ! is_const<T>::value );
+      *wrapper_address() = static_cast<wrapper const &>(*(arg.wrapper_address()));
+      return *this;
+    }
+
+    BOOST_GPU_ENABLED
+    ~initialized()
+    {
+      wrapper_address()->wrapper::~wrapper();
+    }
+
+    BOOST_GPU_ENABLED
+    T const & data() const
+    {
+      return wrapper_address()->data;
+    }
+
+    BOOST_GPU_ENABLED
+    T& data()
+    {
+      return wrapper_address()->data;
+    }
+
+    BOOST_GPU_ENABLED
+    void swap(initialized & arg)
+    {
+      ::pdalboost::swap( this->data(), arg.data() );
+    }
+
+    BOOST_GPU_ENABLED
+    operator T const &() const
+    {
+      return wrapper_address()->data;
+    }
+
+    BOOST_GPU_ENABLED
+    operator T&()
+    {
+      return wrapper_address()->data;
+    }
+
+} ;
+
+template<class T>
+BOOST_GPU_ENABLED
+T const& get ( initialized<T> const& x )
+{
+  return x.data() ;
+}
+
+template<class T>
+BOOST_GPU_ENABLED
+T& get ( initialized<T>& x )
+{
+  return x.data() ;
+}
+
+template<class T>
+BOOST_GPU_ENABLED
+void swap ( initialized<T> & lhs, initialized<T> & rhs )
+{
+  lhs.swap(rhs) ;
+}
+
+template<class T>
+class value_initialized
+{
+  private :
+
+    // initialized<T> does value-initialization by default.
+    initialized<T> m_data;
+
+  public :
+    
+    BOOST_GPU_ENABLED
+    value_initialized()
+    :
+    m_data()
+    { }
+    
+    BOOST_GPU_ENABLED
+    T const & data() const
+    {
+      return m_data.data();
+    }
+
+    BOOST_GPU_ENABLED
+    T& data()
+    {
+      return m_data.data();
+    }
+
+    BOOST_GPU_ENABLED
+    void swap(value_initialized & arg)
+    {
+      m_data.swap(arg.m_data);
+    }
+
+    BOOST_GPU_ENABLED
+    operator T const &() const
+    {
+      return m_data;
+    }
+
+    BOOST_GPU_ENABLED
+    operator T&()
+    {
+      return m_data;
+    }
+} ;
+
+
+template<class T>
+BOOST_GPU_ENABLED
+T const& get ( value_initialized<T> const& x )
+{
+  return x.data() ;
+}
+
+template<class T>
+BOOST_GPU_ENABLED
+T& get ( value_initialized<T>& x )
+{
+  return x.data() ;
+}
+
+template<class T>
+BOOST_GPU_ENABLED
+void swap ( value_initialized<T> & lhs, value_initialized<T> & rhs )
+{
+  lhs.swap(rhs) ;
+}
+
+
+class initialized_value_t
+{
+  public :
+    
+    template <class T> BOOST_GPU_ENABLED operator T() const
+    {
+      return initialized<T>().data();
+    }
+};
+
+initialized_value_t const initialized_value = {} ;
+
+
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+#endif
diff --git a/vendor/pdalboost/boost/version.hpp b/vendor/pdalboost/boost/version.hpp
new file mode 100644
index 0000000..fce02ec
--- /dev/null
+++ b/vendor/pdalboost/boost/version.hpp
@@ -0,0 +1,32 @@
+//  Boost version.hpp configuration header file  ------------------------------//
+
+//  (C) Copyright John maddock 1999. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/config for documentation
+
+#ifndef BOOST_VERSION_HPP
+#define BOOST_VERSION_HPP
+
+//
+//  Caution: this is the only Boost header that is guaranteed
+//  to change with every Boost release. Including this header
+//  will cause a recompile every time a new Boost version is
+//  used.
+//
+//  BOOST_VERSION % 100 is the patch level
+//  BOOST_VERSION / 100 % 1000 is the minor version
+//  BOOST_VERSION / 100000 is the major version
+
+#define BOOST_VERSION 106000
+
+//
+//  BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION
+//  but as a *string* in the form "x_y[_z]" where x is the major version
+//  number, y is the minor version number, and z is the patch level if not 0.
+//  This is used by <config/auto_link.hpp> to select which library version to link to.
+
+#define BOOST_LIB_VERSION "1_60"
+
+#endif
diff --git a/vendor/pdalboost/boost/visit_each.hpp b/vendor/pdalboost/boost/visit_each.hpp
new file mode 100644
index 0000000..0487b16
--- /dev/null
+++ b/vendor/pdalboost/boost/visit_each.hpp
@@ -0,0 +1,27 @@
+// Boost.Signals library
+
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// For more information, see http://www.boost.org/libs/signals
+
+#ifndef BOOST_VISIT_EACH_HPP
+#define BOOST_VISIT_EACH_HPP
+
+namespace pdalboost {
+  template<typename Visitor, typename T>
+  inline void visit_each(Visitor& visitor, const T& t, long)
+  {
+    visitor(t);
+  }
+
+  template<typename Visitor, typename T>
+  inline void visit_each(Visitor& visitor, const T& t)
+  {
+    visit_each(visitor, t, 0);
+  }
+}
+
+#endif // BOOST_VISIT_EACH_HPP
diff --git a/vendor/pdalboost/boost/weak_ptr.hpp b/vendor/pdalboost/boost/weak_ptr.hpp
new file mode 100644
index 0000000..dd26869
--- /dev/null
+++ b/vendor/pdalboost/boost/weak_ptr.hpp
@@ -0,0 +1,18 @@
+#ifndef BOOST_WEAK_PTR_HPP_INCLUDED
+#define BOOST_WEAK_PTR_HPP_INCLUDED
+
+//
+//  weak_ptr.hpp
+//
+//  Copyright (c) 2001, 2002, 2003 Peter Dimov
+//
+//  Distributed under the Boost Software License, Version 1.0.
+//  See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt
+//
+//  See http://www.boost.org/libs/smart_ptr/weak_ptr.htm for documentation.
+//
+
+#include <boost/smart_ptr/weak_ptr.hpp>
+
+#endif  // #ifndef BOOST_WEAK_PTR_HPP_INCLUDED
diff --git a/vendor/pdalboost/doc/src/minimal.css b/vendor/pdalboost/doc/src/minimal.css
new file mode 100644
index 0000000..76d1031
--- /dev/null
+++ b/vendor/pdalboost/doc/src/minimal.css
@@ -0,0 +1,23 @@
+/*
+
+  � Copyright Beman Dawes, 2007
+
+  Distributed under the Boost Software License, Version 1.0.
+  See www.boost.org/LICENSE_1_0.txt
+  
+*/
+
+body  {
+        font-family: sans-serif;
+        margin: 1em;
+        max-width : 8.5in;
+      }
+
+table { margin: 0.5em; }
+
+pre   { background-color:#D7EEFF }
+
+ins   { background-color:#A0FFA0 }
+del   { background-color:#FFA0A0 }
+
+/*** end ***/
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/atomic/src/lockpool.cpp b/vendor/pdalboost/libs/atomic/src/lockpool.cpp
new file mode 100644
index 0000000..c40e7a7
--- /dev/null
+++ b/vendor/pdalboost/libs/atomic/src/lockpool.cpp
@@ -0,0 +1,151 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013-2014 Andrey Semashev
+ */
+/*!
+ * \file   lockpool.cpp
+ *
+ * This file contains implementation of the lockpool used to emulate atomic ops.
+ */
+
+#include <cstddef>
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/memory_order.hpp>
+#include <boost/atomic/capabilities.hpp>
+
+#if BOOST_ATOMIC_FLAG_LOCK_FREE == 2
+#include <boost/atomic/detail/operations_lockfree.hpp>
+#elif !defined(BOOST_HAS_PTHREADS)
+#error Boost.Atomic: Unsupported target platform, POSIX threads are required when native atomic operations are not available
+#else
+#include <pthread.h>
+#define BOOST_ATOMIC_USE_PTHREAD
+#endif
+
+#include <boost/atomic/detail/lockpool.hpp>
+#include <boost/atomic/detail/pause.hpp>
+
+namespace pdalboost {
+namespace atomics {
+namespace detail {
+
+namespace {
+
+// This seems to be the maximum across all modern CPUs
+// NOTE: This constant is made as a macro because some compilers (gcc 4.4 for one) don't allow enums or namespace scope constants in alignment attributes
+#define BOOST_ATOMIC_CACHE_LINE_SIZE 64
+
+#if defined(BOOST_ATOMIC_USE_PTHREAD)
+typedef pthread_mutex_t lock_type;
+#else
+typedef atomics::detail::operations< 1u, false > lock_operations;
+typedef lock_operations::storage_type lock_type;
+#endif
+
+enum
+{
+    padding_size = (sizeof(lock_type) <= BOOST_ATOMIC_CACHE_LINE_SIZE ?
+        (BOOST_ATOMIC_CACHE_LINE_SIZE - sizeof(lock_type)) :
+        (BOOST_ATOMIC_CACHE_LINE_SIZE - sizeof(lock_type) % BOOST_ATOMIC_CACHE_LINE_SIZE))
+};
+
+template< unsigned int PaddingSize >
+struct BOOST_ALIGNMENT(BOOST_ATOMIC_CACHE_LINE_SIZE) padded_lock
+{
+    lock_type lock;
+    // The additional padding is needed to avoid false sharing between locks
+    char padding[PaddingSize];
+};
+
+template< >
+struct BOOST_ALIGNMENT(BOOST_ATOMIC_CACHE_LINE_SIZE) padded_lock< 0u >
+{
+    lock_type lock;
+};
+
+typedef padded_lock< padding_size > padded_lock_t;
+
+static padded_lock_t g_lock_pool[41]
+#if defined(BOOST_ATOMIC_USE_PTHREAD)
+=
+{
+    { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER },
+    { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER },
+    { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER },
+    { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER },
+    { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER },
+    { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER },
+    { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER },
+    { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER }, { PTHREAD_MUTEX_INITIALIZER },
+    { PTHREAD_MUTEX_INITIALIZER }
+}
+#endif
+;
+
+} // namespace
+
+
+#if !defined(BOOST_ATOMIC_USE_PTHREAD)
+
+// NOTE: This function must NOT be inline. Otherwise MSVC 9 will sometimes generate broken code for modulus operation which result in crashes.
+BOOST_ATOMIC_DECL lockpool::scoped_lock::scoped_lock(const volatile void* addr) BOOST_NOEXCEPT :
+    m_lock(&g_lock_pool[reinterpret_cast< std::size_t >(addr) % (sizeof(g_lock_pool) / sizeof(*g_lock_pool))].lock)
+{
+    while (lock_operations::test_and_set(*static_cast< lock_type* >(m_lock), memory_order_acquire))
+    {
+        do
+        {
+            atomics::detail::pause();
+        }
+        while (!!lock_operations::load(*static_cast< lock_type* >(m_lock), memory_order_relaxed));
+    }
+}
+
+BOOST_ATOMIC_DECL lockpool::scoped_lock::~scoped_lock() BOOST_NOEXCEPT
+{
+    lock_operations::clear(*static_cast< lock_type* >(m_lock), memory_order_release);
+}
+
+BOOST_ATOMIC_DECL void signal_fence() BOOST_NOEXCEPT;
+
+#else // !defined(BOOST_ATOMIC_USE_PTHREAD)
+
+BOOST_ATOMIC_DECL lockpool::scoped_lock::scoped_lock(const volatile void* addr) BOOST_NOEXCEPT :
+    m_lock(&g_lock_pool[reinterpret_cast< std::size_t >(addr) % (sizeof(g_lock_pool) / sizeof(*g_lock_pool))].lock)
+{
+    BOOST_VERIFY(pthread_mutex_lock(static_cast< pthread_mutex_t* >(m_lock)) == 0);
+}
+
+BOOST_ATOMIC_DECL lockpool::scoped_lock::~scoped_lock() BOOST_NOEXCEPT
+{
+    BOOST_VERIFY(pthread_mutex_unlock(static_cast< pthread_mutex_t* >(m_lock)) == 0);
+}
+
+#endif // !defined(BOOST_ATOMIC_USE_PTHREAD)
+
+BOOST_ATOMIC_DECL void lockpool::thread_fence() BOOST_NOEXCEPT
+{
+#if BOOST_ATOMIC_THREAD_FENCE > 0
+    atomics::detail::thread_fence(memory_order_seq_cst);
+#else
+    // Emulate full fence by locking/unlocking a mutex
+    scoped_lock lock(0);
+#endif
+}
+
+BOOST_ATOMIC_DECL void lockpool::signal_fence() BOOST_NOEXCEPT
+{
+    // This function is intentionally non-inline, even if empty. This forces the compiler to treat its call as a compiler barrier.
+#if BOOST_ATOMIC_SIGNAL_FENCE > 0
+    atomics::detail::signal_fence(memory_order_seq_cst);
+#endif
+}
+
+} // namespace detail
+} // namespace atomics
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/config/test/config_info.cpp b/vendor/pdalboost/libs/config/test/config_info.cpp
new file mode 100644
index 0000000..bb512ac
--- /dev/null
+++ b/vendor/pdalboost/libs/config/test/config_info.cpp
@@ -0,0 +1,1164 @@
+//  Boost config.hpp configuration test program file  -----------------------//
+
+//  (C) Copyright John Maddock 2001 - 2003. 
+//  (C) Copyright Jens Maurer 2001. 
+//  (C) Copyright Peter Dimov 2001. 
+//  (C) Copyright Darin Adler 2001. 
+//  (C) Copyright Beman Dawes 2002. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/config for most recent version.
+//
+//  Revision $Id$
+//
+
+#include <boost/config.hpp>
+#include <boost/version.hpp>
+#include <iostream>
+#include <iomanip>
+#include <string.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <stddef.h>
+
+#ifdef BOOST_HAS_UNISTD_H
+#include <unistd.h>
+#endif
+
+#if defined(__MINGW32__)
+#  include <_mingw.h>
+#endif
+
+static unsigned int indent = 4;
+static unsigned int width = 40;
+
+using std::cout;
+using std::istream;
+
+void print_macro(const char* name, const char* value)
+{
+   // if name == value+1 then then macro is not defined,
+   // in which case we don't print anything:
+   if(0 != strcmp(name, value+1))
+   {
+      for(unsigned i = 0; i < indent; ++i) std::cout.put(' ');
+      std::cout << std::setw(width);
+      cout.setf(istream::left, istream::adjustfield);
+      std::cout << name;
+      if(value[1])
+      {
+         // macro has a value:
+         std::cout << value << "\n";
+      }
+      else
+      {
+         // macro is defined but has no value:
+         std::cout << " [no value]\n";
+      }
+   }
+}
+
+#define PRINT_MACRO(X) print_macro(#X, BOOST_STRINGIZE(=X))
+
+template <class T>
+void print_expression(const char* expression, T val)
+{
+   for(unsigned i = 0; i < indent; ++i) std::cout.put(' ');
+   std::cout << std::setw(width);
+   std::cout.setf(istream::left, istream::adjustfield);
+   std::cout << expression << "=" << val << std::endl;
+}
+
+#define PRINT_EXPRESSION(E) print_expression(#E, E);
+
+template <class T>
+void print_byte_order(const char* what, T /* t */ )
+{
+   T val = 0;
+   unsigned i;
+   for(i = 1; i < sizeof(T); ++i)
+   {
+      val |= (CHAR_BIT * static_cast<T>(i)) << (CHAR_BIT * static_cast<T>(i));
+   }
+   const char* p = reinterpret_cast<const char*>(&val);
+
+   for(i = 0; i < indent; ++i) std::cout.put(' ');
+   std::cout << std::setw(width);
+   std::cout.setf(istream::left, istream::adjustfield);
+   std::cout << what << "=";
+   for(i = 0; i < sizeof(T); ++i)
+   {
+      std::cout << (int)p[i] << " ";
+   }
+   std::cout << std::endl;
+}
+
+#define PRINT_ORDER(T) print_byte_order(BOOST_STRINGIZE(byte order for type T), T())
+
+template <class T>
+void print_sign(const char* what, T t)
+{
+   t = static_cast<T>(-1);  // cast suppresses warnings
+   for(unsigned i = 0; i < indent; ++i) std::cout.put(' ');
+   std::cout << "Type " << what << " is " << ((t > 0) ? "unsigned" : "signed") << std::endl;
+}
+
+#define PRINT_SIGN(T) print_sign(#T, T())
+
+
+void print_compiler_macros()
+{
+   std::cout << BOOST_COMPILER << "\n";
+   // Borland options:
+  PRINT_MACRO(__BORLANDC__);
+  PRINT_MACRO(__CDECL__);
+  PRINT_MACRO(_CHAR_UNSIGNED);
+  PRINT_MACRO(__CODEGUARD__);
+  PRINT_MACRO(__CONSOLE__);
+  PRINT_MACRO(_CPPUNWIND);
+  PRINT_MACRO(__cplusplus);
+  PRINT_MACRO(__FLAT__);
+  PRINT_MACRO(__FUNC__);
+  PRINT_MACRO(_M_IX86);
+  PRINT_MACRO(__MSDOS__);
+  PRINT_MACRO(__MT__ );
+  PRINT_MACRO(__PASCAL__);
+  PRINT_MACRO(__STDC__);
+  PRINT_MACRO(__TLS__);
+  PRINT_MACRO(_WCHAR_T);
+  PRINT_MACRO(_Windows);
+  PRINT_MACRO(__WIN32__);
+  PRINT_MACRO(_WIN32);
+  PRINT_MACRO(_WIN64);
+  PRINT_MACRO(_WIN32_WCE);
+  PRINT_MACRO(WIN32);
+  PRINT_MACRO(_RTLDLL);
+  PRINT_MACRO(__DEBUG);
+
+// Internal MSVC 7 error workaround (Peter Dimov)
+
+#ifndef _NATIVE_WCHAR_T_DEFINED
+  PRINT_MACRO(_WCHAR_T_DEFINED);
+#endif
+  // MSVC macros:
+  PRINT_MACRO(_CPPRTTI);
+  PRINT_MACRO(_DLL);
+  PRINT_MACRO(_M_ALPHA);
+  PRINT_MACRO(_M_MPPC);
+  PRINT_MACRO(_M_MRX000);
+  PRINT_MACRO(_M_PPC);
+  PRINT_MACRO(_MFC_VER);
+  PRINT_MACRO(_MSC_EXTENSIONS);
+  PRINT_MACRO(_MSC_VER);
+  PRINT_MACRO(_MSC_FULL_VER);
+  PRINT_MACRO(_MT);
+  PRINT_MACRO(_NATIVE_WCHAR_T_DEFINED);
+  // GNUC options:
+  PRINT_MACRO(__GNUC__);
+  PRINT_MACRO(__GNUC_MINOR__);
+  PRINT_MACRO(__GNUC_PATCHLEVEL__);
+  PRINT_MACRO(__STDC_VERSION__);
+  PRINT_MACRO(__GNUG__);
+  PRINT_MACRO(__STRICT_ANSI__);
+  PRINT_MACRO(__GXX_EXPERIMENTAL_CXX0X__);
+  PRINT_MACRO(__VERSION__);
+  PRINT_MACRO(__OPTIMIZE__);
+  PRINT_MACRO(__CHAR_UNSIGNED__);
+  PRINT_MACRO(__REGISTER_PREFIX__);
+  PRINT_MACRO(__USER_LABEL_PREFIX__);
+  PRINT_MACRO(__GNUPRO__);
+  PRINT_MACRO(__EXCEPTIONS);
+  PRINT_MACRO(__FreeBSD__);
+  PRINT_MACRO(__FreeBSD_cc_version);
+  PRINT_MACRO(__ELF__);
+  PRINT_MACRO(__GNUPRO__);
+  PRINT_MACRO(unix);
+  PRINT_MACRO(bsd);
+  PRINT_MACRO(vax);
+  PRINT_MACRO(mc68000);
+  PRINT_MACRO(m68k);
+  PRINT_MACRO(M68020);
+  PRINT_MACRO(_AM29K);
+  PRINT_MACRO(ns32000);
+  PRINT_MACRO(sun);
+  PRINT_MACRO(pyr);
+  PRINT_MACRO(sequent);
+  PRINT_MACRO(__i386__);
+  PRINT_MACRO(__sparc);
+  PRINT_MACRO(__sparc__);
+  PRINT_MACRO(__powerpc__);
+  PRINT_MACRO(__hppa);
+  PRINT_MACRO(__CYGWIN__);
+  PRINT_MACRO(__MINGW32__);
+  PRINT_MACRO(__GXX_RTTI);
+  // HP aCC:
+  PRINT_MACRO(__HP_aCC);
+  PRINT_MACRO(_HPACC_);
+  PRINT_MACRO(__LP64__);
+  PRINT_MACRO(__RISC2_0__);
+  PRINT_MACRO(__STDCPP__);
+  PRINT_MACRO(__hppa);
+  PRINT_MACRO(__hpux);
+  PRINT_MACRO(__hp9000s800);
+  PRINT_MACRO(__hp9000s700);
+  PRINT_MACRO(_PA_RISC1_1);
+  PRINT_MACRO(__HPUX_SOURCE);
+  PRINT_MACRO(_INCLUDE__STDC_A1_SOURCE);
+  // SGI IRIX:
+  PRINT_MACRO(__sgi);
+  PRINT_MACRO(_COMPILER_VERSION);
+  // Sunpro:
+  PRINT_MACRO(__SUNPRO_CC);
+  PRINT_MACRO(__SUNPRO_CC_COMPAT);
+  PRINT_MACRO(__BUILTIN_VA_ARG_INCR);
+  PRINT_MACRO(__sun);
+  PRINT_MACRO(__SVR4);
+  PRINT_MACRO(__unix);
+  PRINT_MACRO(__sparcv9);
+  PRINT_MACRO(__i386);
+  PRINT_MACRO(i386);
+  // Metrowerks
+  PRINT_MACRO(__MWERKS__);
+  PRINT_MACRO(__MSL__);
+  PRINT_MACRO(__MSL_CPP__);
+  PRINT_MACRO(__A5__);
+  PRINT_MACRO(__embedded_cplusplus);
+  PRINT_MACRO(__fourbyteints__);
+  PRINT_MACRO(__IEEEdoubles__);
+  PRINT_MACRO(__MC68K__);
+  PRINT_MACRO(__MC68020__);
+  PRINT_MACRO(__MC68881__);
+  PRINT_MACRO(__MIPS__);
+  PRINT_MACRO(__MIPS_ISA2__);
+  PRINT_MACRO(__MIPS_ISA3__);
+  PRINT_MACRO(__MIPS_ISA4__);
+  PRINT_MACRO(__MWBROWSER__);
+  PRINT_MACRO(__profile__);
+  PRINT_MACRO(__powerc);
+  PRINT_MACRO(_powerc);
+  PRINT_MACRO(__POWERPC__);
+  PRINT_MACRO(macintosh);
+  PRINT_MACRO(__MACH__);
+  PRINT_MACRO(__APPLE__);
+  PRINT_MACRO(__APPLE_CC__);
+  // MPW (MrCpp and SCpp)
+  PRINT_MACRO(__MRC__);
+  PRINT_MACRO(__SC__);
+  PRINT_MACRO(__FPCE__);
+  PRINT_MACRO(__FPCE_IEEE__);
+  PRINT_MACRO(MPW_CPLUS);
+  PRINT_MACRO(MPW_C);
+  PRINT_MACRO(__MC601);
+  PRINT_MACRO(__POWERPC);
+  PRINT_MACRO(__useAppleExts__);
+  PRINT_MACRO(powerc);
+  PRINT_MACRO(MC68000);
+  PRINT_MACRO(THINK_PLUS);
+  PRINT_MACRO(mc68881);
+  PRINT_MACRO(__FAR_CODE__);
+  PRINT_MACRO(__FAR_DATA__);
+  PRINT_MACRO(__CFM68K__);
+  // EDG
+  PRINT_MACRO(__EDG__);
+  PRINT_MACRO(__EDG_VERSION__);
+  PRINT_MACRO(c_plusplus);       // indication for strict mode
+  PRINT_MACRO(_BOOL);
+  PRINT_MACRO(_EXPLICIT);
+  PRINT_MACRO(__SIGNED_CHARS__);
+  PRINT_MACRO(_TYPENAME);
+  PRINT_MACRO(_WCHAR_T);
+  PRINT_MACRO(__ARRAY_OPERATORS);
+  PRINT_MACRO(__EDG_ABI_COMPATIBILITY_VERSION);
+  PRINT_MACRO(__EDG_IMPLICIT_USING_STD);
+  PRINT_MACRO(__EDG_RUNTIME_USES_NAMESPACES);
+  PRINT_MACRO(__BOOL_DEFINED);
+  PRINT_MACRO(__RTTI);
+  PRINT_MACRO(__PLACEMENT_DELETE);
+  PRINT_MACRO(__NO_LONG_LONG);
+
+  // Intel options:
+  PRINT_MACRO(__INTEL__);
+  PRINT_MACRO(__ICC);
+  PRINT_MACRO(__ICL);
+  PRINT_MACRO(__ECC);
+  PRINT_MACRO(__INTEL_COMPILER);
+  PRINT_MACRO(__INITIAL_POINTER_SIZE);
+  PRINT_MACRO(_INTEGRAL_MAX_BITS);
+  PRINT_MACRO(__INTEL_COMPILER_BUILD_DATE);
+  PRINT_MACRO(__INTEL_MS_COMPAT_LEVEL);
+  PRINT_MACRO(__LONG_DOUBLE_SIZE__);
+  PRINT_MACRO(_M_X64);
+  PRINT_MACRO(_OPENMP);
+  PRINT_MACRO(_OPENMPT);
+  PRINT_MACRO(_PGO_INSTRUMENT);
+  PRINT_MACRO(__QMSPP_); 
+  PRINT_MACRO(__INTEL_RTTI__);
+  PRINT_MACRO(__INTEL_CXX11_MODE__);
+
+  // Cray options:
+  PRINT_MACRO(_CRAYC); 
+  PRINT_MACRO(_RELEASE); 
+  PRINT_MACRO(cray); 
+  PRINT_MACRO(CRAY); 
+  PRINT_MACRO(CRAY1); 
+  PRINT_MACRO(_CRAY1); 
+  PRINT_MACRO(_CRAYMPP); 
+  PRINT_MACRO(_CRAYT3E); 
+  PRINT_MACRO(_CRAYIEEE); 
+  PRINT_MACRO(_ADDR32); 
+  PRINT_MACRO(_ADDR64); 
+  PRINT_MACRO(_LD64); 
+  PRINT_MACRO(_FASTMD); 
+  PRINT_MACRO(_MAXVL); 
+
+  // misc compilers not covered so far:
+  PRINT_MACRO(__USLC__);
+  PRINT_MACRO(__DECCXX);
+  PRINT_MACRO(__IBMCPP__);
+  PRINT_MACRO(_REENTRANT);
+  PRINT_MACRO(_PTHREADS);
+  PRINT_MACRO(__STDC_HOSTED__);
+  PRINT_MACRO(__COMO__);
+  PRINT_MACRO(__COMO_VERSION__);
+  PRINT_MACRO(__DM__);
+  PRINT_MACRO(__osf__);
+  PRINT_MACRO(__OSF__);
+  PRINT_MACRO(__QNXNTO__);
+  PRINT_MACRO(__QNX__);
+  PRINT_MACRO(_NTO_VERSION);
+  PRINT_MACRO(__OPEN64__);
+  PRINT_MACRO(__open64);
+}
+
+void print_stdlib_macros()
+{
+   std::cout << BOOST_STDLIB << std::endl;
+   #ifdef _RWSTD_VER
+   // Rogue Wave 2.x config options:
+   PRINT_MACRO(__NO_EDG_EXCEPTION_CLASSES);
+   PRINT_MACRO(_RWSTD_ALLOCATOR);
+   PRINT_MACRO(_RWSTD_BAD_ALLOC_DEFINED);
+   PRINT_MACRO(_RWSTD_BAD_EXCEPTION_DEFINED);
+   PRINT_MACRO(_RWSTD_BOUNDS_CHECKING);
+   PRINT_MACRO(_RWSTD_COMPILE_INSTANTIATE);
+   PRINT_MACRO(_RWSTD_DEFAULT_PRECISION);
+   PRINT_MACRO(_RWSTD_EXCEPTION_DEFINED);
+   PRINT_MACRO(_RWSTD_EXCEPTION_HANDLER_IN_STD);
+   PRINT_MACRO(_RWSTD_EXCEPTION_PREDEFINED);
+   PRINT_MACRO(_RWSTD_FLT_ROUNDS_IS_CONSTANT);
+   PRINT_MACRO(_RWSTD_LOCALIZED_ERRORS);
+   PRINT_MACRO(_RWSTD_MESSAGE);
+   PRINT_MACRO(_RWSTD_MUTEXATTR_DEFAULT);
+   PRINT_MACRO(_RWSTD_NO_ANSI_SPRINTF);
+   PRINT_MACRO(_RWSTD_NO_ARG_MATCH);
+   PRINT_MACRO(_RWSTD_NO_BAD_CAST);
+   PRINT_MACRO(_RWSTD_NO_BASE_CLASS_MATCH);
+   PRINT_MACRO(_RWSTD_NO_BOOL);
+   PRINT_MACRO(_RWSTD_NO_BUILTIN_CTOR);
+   PRINT_MACRO(_RWSTD_NO_CATOPEN_CATGETS);
+   PRINT_MACRO(_RWSTD_NO_CLASS_PARTIAL_SPEC);
+   PRINT_MACRO(_RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES);
+   PRINT_MACRO(_RWSTD_NO_COMPLICATED_EXCEPTIONS);
+   PRINT_MACRO(_RWSTD_NO_COMPLICATED_TYPEDEF);
+   PRINT_MACRO(_RWSTD_NO_CONST_INST);
+   PRINT_MACRO(_RWSTD_NO_CTOR_RETURN);
+   PRINT_MACRO(_RWSTD_NO_DEFAULT_FOR_TPARAM);
+   PRINT_MACRO(_RWSTD_NO_DEFAULT_TEMPLATE_ARGS);
+   PRINT_MACRO(_RWSTD_NO_DESTROY_BUILTIN);
+   PRINT_MACRO(_RWSTD_NO_DESTROY_NONBUILTIN);
+   PRINT_MACRO(_RWSTD_NO_EMBEDDED_TYPEDEF);
+   PRINT_MACRO(_RWSTD_NO_EX_SPEC);
+   PRINT_MACRO(_RWSTD_NO_EXCEPTIONS);
+   PRINT_MACRO(_RWSTD_NO_EXPLICIT);
+   PRINT_MACRO(_RWSTD_NO_EXPLICIT_ARG);
+   PRINT_MACRO(_RWSTD_NO_EXPLICIT_FUNC_INSTANTIATION);
+   PRINT_MACRO(_RWSTD_NO_EXPLICIT_INSTANTIATION);
+   PRINT_MACRO(_RWSTD_NO_EXTENSION);
+   PRINT_MACRO(_RWSTD_NO_FORWARD_SPECIALIZATIONS);
+   PRINT_MACRO(_RWSTD_NO_FPOS_T);
+   PRINT_MACRO(_RWSTD_NO_FRIEND_TEMPLATES);
+   PRINT_MACRO(_RWSTD_NO_FUNC_PARTIAL_SPEC);
+   PRINT_MACRO(_RWSTD_NO_GETTIMEOFDAY);
+   PRINT_MACRO(_RWSTD_NO_GLOBAL_TZ);
+   PRINT_MACRO(_RWSTD_NO_INHERITED_TYPEDEFS);
+   PRINT_MACRO(_RWSTD_NO_INIT_CONST_TEMPLATE_REF_ARG);
+   PRINT_MACRO(_RWSTD_NO_INT_TYPEDEF);
+   PRINT_MACRO(_RWSTD_NO_LDIV);
+   PRINT_MACRO(_RWSTD_NO_LEADING_UNDERSCORE);
+   PRINT_MACRO(_RWSTD_NO_LOCALE);
+   PRINT_MACRO(_RWSTD_NO_LONG_NAME);
+   PRINT_MACRO(_RWSTD_NO_LONGDOUBLE);
+   PRINT_MACRO(_RWSTD_NO_MBSTATE_T);
+   PRINT_MACRO(_RWSTD_NO_MEM_CLASS_TEMPLATES);
+   PRINT_MACRO(_RWSTD_NO_MEMBER_TEMPLATES);
+   PRINT_MACRO(_RWSTD_NO_MEMBER_TYPE_TPARAM);
+   PRINT_MACRO(_RWSTD_NO_MEMBER_WO_DEF_CTOR);
+   PRINT_MACRO(_RWSTD_NO_MEMMOVE);
+   PRINT_MACRO(_RWSTD_NO_MULTI_DIM_ARRAY);
+   PRINT_MACRO(_RWSTD_NO_MUTABLE);
+   PRINT_MACRO(_RWSTD_NO_NAME_INJECTION);
+   PRINT_MACRO(_RWSTD_NO_NAMESPACE);
+   PRINT_MACRO(_RWSTD_NO_NESTING_TEMPLATES);
+   PRINT_MACRO(_RWSTD_NO_NEW_BRACKETS);
+   PRINT_MACRO(_RWSTD_NO_NEW_DECL);
+   PRINT_MACRO(_RWSTD_NO_NEW_HEADER);
+   PRINT_MACRO(_RWSTD_NO_NEW_TEMPLATE_SYNTAX);
+   PRINT_MACRO(_RWSTD_NO_NONCLASS_ARROW_RETURN);
+   PRINT_MACRO(_RWSTD_NO_NONTYPE_ARGS);
+   PRINT_MACRO(_RWSTD_NO_ONLY_NEEDED_INSTANTIATION);
+   PRINT_MACRO(_RWSTD_NO_OVERLOAD_C_POW);
+   PRINT_MACRO(_RWSTD_NO_OVERLOAD_OF_TEMPLATE_FUNCTION);
+   PRINT_MACRO(_RWSTD_NO_OVERLOAD_WCHAR);
+   PRINT_MACRO(_RWSTD_NO_PART_SPEC_OVERLOAD);
+   PRINT_MACRO(_RWSTD_NO_RET_TEMPLATE);
+   PRINT_MACRO(_RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES);
+   PRINT_MACRO(_RWSTD_NO_STATIC_CAST);
+   PRINT_MACRO(_RWSTD_NO_STATIC_DEF);
+   PRINT_MACRO(_RWSTD_NO_STATIC_DEF2);
+   PRINT_MACRO(_RWSTD_NO_STATIC_DEF3);
+   PRINT_MACRO(_RWSTD_NO_STATIC_MEM_DEF);
+   PRINT_MACRO(_RWSTD_NO_STI_SIMPLE);
+   PRINT_MACRO(_RWSTD_NO_STI_TEMPLATE);
+   PRINT_MACRO(_RWSTD_NO_STREAM_LONG_DOUBLE);
+   PRINT_MACRO(_RWSTD_NO_STRFTIME_CAPC);
+   PRINT_MACRO(_RWSTD_NO_STRICT_TEMPLATE_INSTANTIATE);
+   PRINT_MACRO(_RWSTD_NO_SWPRINTF);
+   PRINT_MACRO(_RWSTD_NO_TEMPLATE_ON_RETURN_TYPE);
+   PRINT_MACRO(_RWSTD_NO_TEMPLATE_TEMPLATE);
+   PRINT_MACRO(_RWSTD_NO_THREADS);
+   PRINT_MACRO(_RWSTD_NO_THROW_SPEC_ON_NEW);
+   PRINT_MACRO(_RWSTD_NO_THROW_WITH_SHARED);
+   PRINT_MACRO(_RWSTD_NO_TYPEDEF_INST);
+   PRINT_MACRO(_RWSTD_NO_TYPEDEF_OVERLOAD);
+   PRINT_MACRO(_RWSTD_NO_TYPENAME);
+   PRINT_MACRO(_RWSTD_NO_UNDEFINED_FRIEND);
+   PRINT_MACRO(_RWSTD_NO_UNINITIALIZED_STATIC_DEF);
+   PRINT_MACRO(_RWSTD_NO_WCHAR_H);
+   PRINT_MACRO(_RWSTD_NO_WCTYPE_H);
+   PRINT_MACRO(_RWSTD_NO_WIDE_CHAR);
+   PRINT_MACRO(_RWSTD_NO_WINT_TYPE);
+   PRINT_MACRO(_RWSTD_NO_WSTR);
+   PRINT_MACRO(_RWSTD_NOT_ALL_WSTR_CFUNCTIONS);
+   PRINT_MACRO(_RWSTD_POSIX_D10_THREADS);
+   PRINT_MACRO(_RWSTD_POSIX_THREADS);
+   PRINT_MACRO(_RWSTD_REQUIRES_IEEEFP);
+   PRINT_MACRO(_RWSTD_SOLARIS_THREADS);
+   PRINT_MACRO(_RWSTD_STRUCT_TM_TZ);
+   PRINT_MACRO(_RWSTD_WIDE_STRING_NULL_PROBLEM);
+   #elif defined(__STD_RWCOMPILER_H__)
+   // Rogue Wave 1.x std lib:
+   PRINT_MACRO(__NO_EDG_EXCEPTION_CLASSES);
+   PRINT_MACRO(RWSTD_ALLOCATOR);
+   PRINT_MACRO(RWSTD_BAD_ALLOC_DEFINED);
+   PRINT_MACRO(RWSTD_BAD_EXCEPTION_DEFINED);
+   PRINT_MACRO(RWSTD_BOUNDS_CHECKING);
+   PRINT_MACRO(RWSTD_COMPILE_INSTANTIATE);
+   PRINT_MACRO(RWSTD_DEFAULT_PRECISION);
+   PRINT_MACRO(RWSTD_EXCEPTION_DEFINED);
+   PRINT_MACRO(RWSTD_EXCEPTION_HANDLER_IN_STD);
+   PRINT_MACRO(RWSTD_EXCEPTION_PREDEFINED);
+   PRINT_MACRO(RWSTD_FLT_ROUNDS_IS_CONSTANT);
+   PRINT_MACRO(RWSTD_LOCALIZED_ERRORS);
+   PRINT_MACRO(RWSTD_MESSAGE);
+   PRINT_MACRO(RWSTD_MUTEXATTR_DEFAULT);
+   PRINT_MACRO(RWSTD_NO_ANSI_SPRINTF);
+   PRINT_MACRO(RWSTD_NO_ARG_MATCH);
+   PRINT_MACRO(RWSTD_NO_BAD_CAST);
+   PRINT_MACRO(RWSTD_NO_BASE_CLASS_MATCH);
+   PRINT_MACRO(RWSTD_NO_BOOL);
+   PRINT_MACRO(RWSTD_NO_BUILTIN_CTOR);
+   PRINT_MACRO(RWSTD_NO_CATOPEN_CATGETS);
+   PRINT_MACRO(RWSTD_NO_CLASS_PARTIAL_SPEC);
+   PRINT_MACRO(RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES);
+   PRINT_MACRO(RWSTD_NO_COMPLICATED_EXCEPTIONS);
+   PRINT_MACRO(RWSTD_NO_COMPLICATED_TYPEDEF);
+   PRINT_MACRO(RWSTD_NO_CONST_INST);
+   PRINT_MACRO(RWSTD_NO_CTOR_RETURN);
+   PRINT_MACRO(RWSTD_NO_DEFAULT_FOR_TPARAM);
+   PRINT_MACRO(RWSTD_NO_DEFAULT_TEMPLATE_ARGS);
+   PRINT_MACRO(RWSTD_NO_DESTROY_BUILTIN);
+   PRINT_MACRO(RWSTD_NO_DESTROY_NONBUILTIN);
+   PRINT_MACRO(RWSTD_NO_EMBEDDED_TYPEDEF);
+   PRINT_MACRO(RWSTD_NO_EX_SPEC);
+   PRINT_MACRO(RWSTD_NO_EXCEPTIONS);
+   PRINT_MACRO(RWSTD_NO_EXPLICIT);
+   PRINT_MACRO(RWSTD_NO_EXPLICIT_ARG);
+   PRINT_MACRO(RWSTD_NO_EXPLICIT_FUNC_INSTANTIATION);
+   PRINT_MACRO(RWSTD_NO_EXPLICIT_INSTANTIATION);
+   PRINT_MACRO(RWSTD_NO_EXTENSION);
+   PRINT_MACRO(RWSTD_NO_FORWARD_SPECIALIZATIONS);
+   PRINT_MACRO(RWSTD_NO_FPOS_T);
+   PRINT_MACRO(RWSTD_NO_FRIEND_TEMPLATES);
+   PRINT_MACRO(RWSTD_NO_FUNC_PARTIAL_SPEC);
+   PRINT_MACRO(RWSTD_NO_GETTIMEOFDAY);
+   PRINT_MACRO(RWSTD_NO_GLOBAL_TZ);
+   PRINT_MACRO(RWSTD_NO_INHERITED_TYPEDEFS);
+   PRINT_MACRO(RWSTD_NO_INIT_CONST_TEMPLATE_REF_ARG);
+   PRINT_MACRO(RWSTD_NO_INT_TYPEDEF);
+   PRINT_MACRO(RWSTD_NO_LDIV);
+   PRINT_MACRO(RWSTD_NO_LEADING_UNDERSCORE);
+   PRINT_MACRO(RWSTD_NO_LOCALE);
+   PRINT_MACRO(RWSTD_NO_LONG_NAME);
+   PRINT_MACRO(RWSTD_NO_LONGDOUBLE);
+   PRINT_MACRO(RWSTD_NO_MBSTATE_T);
+   PRINT_MACRO(RWSTD_NO_MEM_CLASS_TEMPLATES);
+   PRINT_MACRO(RWSTD_NO_MEMBER_TEMPLATES);
+   PRINT_MACRO(RWSTD_NO_MEMBER_TYPE_TPARAM);
+   PRINT_MACRO(RWSTD_NO_MEMBER_WO_DEF_CTOR);
+   PRINT_MACRO(RWSTD_NO_MEMMOVE);
+   PRINT_MACRO(RWSTD_NO_MULTI_DIM_ARRAY);
+   PRINT_MACRO(RWSTD_NO_MUTABLE);
+   PRINT_MACRO(RWSTD_NO_NAME_INJECTION);
+   PRINT_MACRO(RWSTD_NO_NAMESPACE);
+   PRINT_MACRO(RWSTD_NO_NESTING_TEMPLATES);
+   PRINT_MACRO(RWSTD_NO_NEW_BRACKETS);
+   PRINT_MACRO(RWSTD_NO_NEW_DECL);
+   PRINT_MACRO(RWSTD_NO_NEW_HEADER);
+   PRINT_MACRO(RWSTD_NO_NEW_TEMPLATE_SYNTAX);
+   PRINT_MACRO(RWSTD_NO_NONCLASS_ARROW_RETURN);
+   PRINT_MACRO(RWSTD_NO_NONTYPE_ARGS);
+   PRINT_MACRO(RWSTD_NO_ONLY_NEEDED_INSTANTIATION);
+   PRINT_MACRO(RWSTD_NO_OVERLOAD_C_POW);
+   PRINT_MACRO(RWSTD_NO_OVERLOAD_OF_TEMPLATE_FUNCTION);
+   PRINT_MACRO(RWSTD_NO_OVERLOAD_WCHAR);
+   PRINT_MACRO(RWSTD_NO_PART_SPEC_OVERLOAD);
+   PRINT_MACRO(RWSTD_NO_RET_TEMPLATE);
+   PRINT_MACRO(RWSTD_NO_SIMPLE_DEFAULT_TEMPLATES);
+   PRINT_MACRO(RWSTD_NO_STATIC_CAST);
+   PRINT_MACRO(RWSTD_NO_STATIC_DEF);
+   PRINT_MACRO(RWSTD_NO_STATIC_DEF2);
+   PRINT_MACRO(RWSTD_NO_STATIC_DEF3);
+   PRINT_MACRO(RWSTD_NO_STATIC_MEM_DEF);
+   PRINT_MACRO(RWSTD_NO_STI_SIMPLE);
+   PRINT_MACRO(RWSTD_NO_STI_TEMPLATE);
+   PRINT_MACRO(RWSTD_NO_STREAM_LONG_DOUBLE);
+   PRINT_MACRO(RWSTD_NO_STRFTIME_CAPC);
+   PRINT_MACRO(RWSTD_NO_STRICT_TEMPLATE_INSTANTIATE);
+   PRINT_MACRO(RWSTD_NO_SWPRINTF);
+   PRINT_MACRO(RWSTD_NO_TEMPLATE_ON_RETURN_TYPE);
+   PRINT_MACRO(RWSTD_NO_TEMPLATE_TEMPLATE);
+   PRINT_MACRO(RWSTD_NO_THREADS);
+   PRINT_MACRO(RWSTD_NO_THROW_SPEC_ON_NEW);
+   PRINT_MACRO(RWSTD_NO_THROW_WITH_SHARED);
+   PRINT_MACRO(RWSTD_NO_TYPEDEF_INST);
+   PRINT_MACRO(RWSTD_NO_TYPEDEF_OVERLOAD);
+   PRINT_MACRO(RWSTD_NO_TYPENAME);
+   PRINT_MACRO(RWSTD_NO_UNDEFINED_FRIEND);
+   PRINT_MACRO(RWSTD_NO_UNINITIALIZED_STATIC_DEF);
+   PRINT_MACRO(RWSTD_NO_WCHAR_H);
+   PRINT_MACRO(RWSTD_NO_WCTYPE_H);
+   PRINT_MACRO(RWSTD_NO_WIDE_CHAR);
+   PRINT_MACRO(RWSTD_NO_WINT_TYPE);
+   PRINT_MACRO(RWSTD_NO_WSTR);
+   PRINT_MACRO(RWSTD_NOT_ALL_WSTR_CFUNCTIONS);
+   PRINT_MACRO(RWSTD_POSIX_D10_THREADS);
+   PRINT_MACRO(RWSTD_POSIX_THREADS);
+   PRINT_MACRO(RWSTD_REQUIRES_IEEEFP);
+   PRINT_MACRO(RWSTD_SOLARIS_THREADS);
+   PRINT_MACRO(RWSTD_STRUCT_TM_TZ);
+   PRINT_MACRO(RWSTD_WIDE_STRING_NULL_PROBLEM);
+   #endif
+   // Dinkumware options:
+   PRINT_MACRO(_CPPLIB_VER);
+   PRINT_MACRO(_GLOBAL_USING);
+   PRINT_MACRO(_HAS_EXCEPTIONS);
+   PRINT_MACRO(_HAS_MEMBER_TEMPLATES_REBIND);
+   PRINT_MACRO(_HAS_TEMPLATE_PARTIAL_ORDERING);
+   // Libc++:
+   PRINT_MACRO(_LIBCPP_VERSION);
+   // STLPort and generic SGI STL options:
+   PRINT_MACRO(__SGI_STL_NO_ARROW_OPERATOR);
+   PRINT_MACRO(__SGI_STL_OWN_IOSTREAMS);
+   PRINT_MACRO(__SGI_STL_PORT);
+   PRINT_MACRO(__STL_AUTOMATIC_TYPE_TRAITS);
+   PRINT_MACRO(__STL_BASE_MATCH_BUG);
+   PRINT_MACRO(__STL_BASE_TYPEDEF_BUG);
+   PRINT_MACRO(__STL_BASE_TYPEDEF_OUTSIDE_BUG);
+   PRINT_MACRO(__STL_BROKEN_USING_DIRECTIVE);
+   PRINT_MACRO(__STL_CONST_CONSTRUCTOR_BUG);
+   PRINT_MACRO(__STL_DEBUG);
+   PRINT_MACRO(__STL_DEBUG_ALLOC);
+   PRINT_MACRO(__STL_DEFAULT_CONSTRUCTOR_BUG);
+   PRINT_MACRO(__STL_DEFAULT_TYPE_PARAM);
+   PRINT_MACRO(__STL_DONT_REDEFINE_STD);
+   PRINT_MACRO(__STL_DONT_USE_BOOL_TYPEDEF);
+   PRINT_MACRO(__STL_HAS_NO_EXCEPTIONS);
+   PRINT_MACRO(__STL_HAS_NO_NAMESPACES);
+   PRINT_MACRO(__STL_HAS_NO_NEW_C_HEADERS);
+   PRINT_MACRO(__STL_HAS_NO_NEW_IOSTREAMS);
+   PRINT_MACRO(__STL_IMPORT_VENDOR_CSTD);
+   PRINT_MACRO(__STL_LIMITED_DEFAULT_TEMPLATES);
+   PRINT_MACRO(__STL_LINK_TIME_INSTANTIATION);
+   PRINT_MACRO(__STL_LONG_LONG);
+   PRINT_MACRO(__STL_LOOP_INLINE_PROBLEMS);
+   PRINT_MACRO(__STL_MEMBER_POINTER_PARAM_BUG);
+   PRINT_MACRO(__STL_NEED_EXPLICIT);
+   PRINT_MACRO(__STL_NEED_MUTABLE);
+   PRINT_MACRO(__STL_NEED_TYPENAME);
+   PRINT_MACRO(__STL_NESTED_TYPE_PARAM_BUG);
+   PRINT_MACRO(__STL_NO_BAD_ALLOC);
+   PRINT_MACRO(__STL_NO_BOOL);
+   PRINT_MACRO(__STL_NO_CLASS_PARTIAL_SPECIALIZATION);
+   PRINT_MACRO(__STL_NO_CSTD_FUNCTION_IMPORTS);
+   PRINT_MACRO(__STL_NO_DEFAULT_NON_TYPE_PARAM);
+   PRINT_MACRO(__STL_NO_EXCEPTION_HEADER);
+   PRINT_MACRO(__STL_NO_EXCEPTION_SPEC);
+   PRINT_MACRO(__STL_NO_EXCEPTIONS);
+   PRINT_MACRO(__STL_NO_EXPLICIT_FUNCTION_TMPL_ARGS);
+   PRINT_MACRO(__STL_NO_FRIEND_TEMPLATES);
+   PRINT_MACRO(__STL_NO_FUNCTION_TMPL_PARTIAL_ORDER);
+   PRINT_MACRO(__STL_NO_IOSTREAMS);
+   PRINT_MACRO(__STL_NO_LONG_DOUBLE);
+   PRINT_MACRO(__STL_NO_MEMBER_TEMPLATE_CLASSES);
+   PRINT_MACRO(__STL_NO_MEMBER_TEMPLATE_KEYWORD);
+   PRINT_MACRO(__STL_NO_MEMBER_TEMPLATES);
+   PRINT_MACRO(__STL_NO_METHOD_SPECIALIZATION);
+   PRINT_MACRO(__STL_NO_NAMESPACES);
+   PRINT_MACRO(__STL_NO_NEW_IOSTREAMS);
+   PRINT_MACRO(__STL_NO_NEW_NEW_HEADER);
+   PRINT_MACRO(__STL_NO_NEW_STYLE_CASTS);
+   PRINT_MACRO(__STL_NO_PARTIAL_SPECIALIZATION_SYNTAX);
+   PRINT_MACRO(__STL_NO_QUALIFIED_FRIENDS);
+   PRINT_MACRO(__STL_NO_RELOPS_NAMESPACE);
+   PRINT_MACRO(__STL_NO_SGI_IOSTREAMS);
+   PRINT_MACRO(__STL_NO_STATIC_TEMPLATE_DATA);
+   PRINT_MACRO(__STL_NO_TEMPLATE_CONVERSIONS);
+   PRINT_MACRO(__STL_NO_WCHAR_T);
+   PRINT_MACRO(__STL_NON_TYPE_TMPL_PARAM_BUG);
+   PRINT_MACRO(__STL_NONTEMPL_BASE_MATCH_BUG);
+   PRINT_MACRO(__STL_PARTIAL_SPEC_NEEDS_TEMPLATE_ARGS);
+   PRINT_MACRO(__STL_RAND48);
+   PRINT_MACRO(__STL_STATIC_ARRAY_BUG);
+   PRINT_MACRO(__STL_STATIC_CONST_INIT_BUG);
+   PRINT_MACRO(__STL_STATIC_CONST_INIT_BUG);
+   PRINT_MACRO(__STL_THROW_RETURN_BUG);
+   PRINT_MACRO(__STL_TRIVIAL_CONSTRUCTOR_BUG);
+   PRINT_MACRO(__STL_TRIVIAL_DESTRUCTOR_BUG);
+   PRINT_MACRO(__STL_UNINITIALIZABLE_PRIVATE);
+   PRINT_MACRO(__STL_USE_ABBREVS);
+   PRINT_MACRO(__STL_USE_DEFALLOC);
+   PRINT_MACRO(__STL_USE_MALLOC);
+   PRINT_MACRO(__STL_USE_NEW_C_HEADERS);
+   PRINT_MACRO(__STL_USE_NEW_IOSTREAMS);
+   PRINT_MACRO(__STL_USE_NEWALLOC);
+   PRINT_MACRO(__STL_USE_OWN_NAMESPACE);
+   PRINT_MACRO(__STL_USE_SGI_ALLOCATORS);
+   PRINT_MACRO(__STL_WCHAR_T_IS_USHORT);
+   PRINT_MACRO(__STL_WEAK_ATTRIBUTE);
+   PRINT_MACRO(__STL_YVALS_H);
+   PRINT_MACRO(_NOTHREADS);
+   PRINT_MACRO(_PTHREADS);
+#if defined(__SGI_STL_PORT) && (__SGI_STL_PORT > 0x0400)
+   PRINT_MACRO(_STLP_AUTOMATIC_TYPE_TRAITS);
+   PRINT_MACRO(_STLP_BASE_MATCH_BUG);
+   PRINT_MACRO(_STLP_BASE_TYPEDEF_BUG);
+   PRINT_MACRO(_STLP_BASE_TYPEDEF_OUTSIDE_BUG);
+   PRINT_MACRO(_STLP_BROKEN_USING_DIRECTIVE);
+   PRINT_MACRO(_STLP_CONST_CONSTRUCTOR_BUG);
+   PRINT_MACRO(_STLP_DEBUG);
+   PRINT_MACRO(_STLP_DEBUG_ALLOC);
+   PRINT_MACRO(_STLP_DEFAULT_CONSTRUCTOR_BUG);
+   PRINT_MACRO(_STLP_DEFAULT_TYPE_PARAM);
+   PRINT_MACRO(_STLP_DONT_REDEFINE_STD);
+   PRINT_MACRO(_STLP_DONT_USE_BOOL_TYPEDEF);
+   PRINT_MACRO(_STLP_HAS_NO_EXCEPTIONS);
+   PRINT_MACRO(_STLP_HAS_NO_NAMESPACES);
+   PRINT_MACRO(_STLP_HAS_NO_NEW_C_HEADERS);
+   PRINT_MACRO(_STLP_HAS_NO_NEW_IOSTREAMS);
+   PRINT_MACRO(_STLP_IMPORT_VENDOR_CSTD);
+   PRINT_MACRO(_STLP_LIMITED_DEFAULT_TEMPLATES);
+   PRINT_MACRO(_STLP_LINK_TIME_INSTANTIATION);
+   PRINT_MACRO(_STLP_LONG_LONG);
+   PRINT_MACRO(_STLP_LOOP_INLINE_PROBLEMS);
+   PRINT_MACRO(_STLP_MEMBER_POINTER_PARAM_BUG);
+   PRINT_MACRO(_STLP_NEED_EXPLICIT);
+   PRINT_MACRO(_STLP_NEED_MUTABLE);
+   PRINT_MACRO(_STLP_NEED_TYPENAME);
+   PRINT_MACRO(_STLP_NESTED_TYPE_PARAM_BUG);
+   PRINT_MACRO(_STLP_NO_ARROW_OPERATOR);
+   PRINT_MACRO(_STLP_NO_BAD_ALLOC);
+   PRINT_MACRO(_STLP_NO_BOOL);
+   PRINT_MACRO(_STLP_NO_CLASS_PARTIAL_SPECIALIZATION);
+   PRINT_MACRO(_STLP_NO_CSTD_FUNCTION_IMPORTS);
+   PRINT_MACRO(_STLP_NO_DEFAULT_NON_TYPE_PARAM);
+   PRINT_MACRO(_STLP_NO_EXCEPTION_HEADER);
+   PRINT_MACRO(_STLP_NO_EXCEPTION_SPEC);
+   PRINT_MACRO(_STLP_NO_EXCEPTIONS);
+   PRINT_MACRO(_STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS);
+   PRINT_MACRO(_STLP_NO_FRIEND_TEMPLATES);
+   PRINT_MACRO(_STLP_NO_FUNCTION_TMPL_PARTIAL_ORDER);
+   PRINT_MACRO(_STLP_NO_IOSTREAMS);
+   PRINT_MACRO(_STLP_NO_LONG_DOUBLE);
+   PRINT_MACRO(_STLP_NO_MEMBER_TEMPLATE_CLASSES);
+   PRINT_MACRO(_STLP_NO_MEMBER_TEMPLATE_KEYWORD);
+   PRINT_MACRO(_STLP_NO_MEMBER_TEMPLATES);
+   PRINT_MACRO(_STLP_NO_METHOD_SPECIALIZATION);
+   PRINT_MACRO(_STLP_NO_NAMESPACES);
+   PRINT_MACRO(_STLP_NO_NEW_IOSTREAMS);
+   PRINT_MACRO(_STLP_NO_NEW_NEW_HEADER);
+   PRINT_MACRO(_STLP_NO_NEW_STYLE_CASTS);
+   PRINT_MACRO(_STLP_NO_PARTIAL_SPECIALIZATION_SYNTAX);
+   PRINT_MACRO(_STLP_NO_QUALIFIED_FRIENDS);
+   PRINT_MACRO(_STLP_NO_RELOPS_NAMESPACE);
+   PRINT_MACRO(_STLP_NO_SGI_IOSTREAMS);
+   PRINT_MACRO(_STLP_NO_STATIC_TEMPLATE_DATA);
+   PRINT_MACRO(_STLP_NO_TEMPLATE_CONVERSIONS);
+   PRINT_MACRO(_STLP_NO_WCHAR_T);
+   PRINT_MACRO(_STLP_NON_TYPE_TMPL_PARAM_BUG);
+   PRINT_MACRO(_STLP_NONTEMPL_BASE_MATCH_BUG);
+   PRINT_MACRO(_STLP_OWN_IOSTREAMS);
+   PRINT_MACRO(_STLP_PARTIAL_SPEC_NEEDS_TEMPLATE_ARGS);
+   PRINT_MACRO(_STLP_RAND48);
+   PRINT_MACRO(_STLP_STATIC_ARRAY_BUG);
+   PRINT_MACRO(_STLP_STATIC_CONST_INIT_BUG);
+   PRINT_MACRO(_STLP_STATIC_CONST_INIT_BUG);
+   PRINT_MACRO(_STLP_THROW_RETURN_BUG);
+   PRINT_MACRO(_STLP_TRIVIAL_CONSTRUCTOR_BUG);
+   PRINT_MACRO(_STLP_TRIVIAL_DESTRUCTOR_BUG);
+   PRINT_MACRO(_STLP_UNINITIALIZABLE_PRIVATE);
+   PRINT_MACRO(_STLP_USE_ABBREVS);
+   PRINT_MACRO(_STLP_USE_DEFALLOC);
+   PRINT_MACRO(_STLP_USE_MALLOC);
+   PRINT_MACRO(_STLP_USE_NEW_C_HEADERS);
+   PRINT_MACRO(_STLP_USE_NEWALLOC);
+   PRINT_MACRO(_STLP_USE_OWN_NAMESPACE);
+   PRINT_MACRO(_STLP_USE_SGI_ALLOCATORS);
+   PRINT_MACRO(_STLP_WCHAR_T_IS_USHORT);
+   PRINT_MACRO(_STLP_WEAK_ATTRIBUTE);
+   PRINT_MACRO(_STLP_YVALS_H);
+#endif
+   PRINT_MACRO(__GLIBCPP__);
+   PRINT_MACRO(_GLIBCPP_USE_WCHAR_T);
+   PRINT_MACRO(_GLIBCPP_VERSION);
+   PRINT_MACRO(__GLIBCXX__);
+   PRINT_MACRO(_GLIBCXX_USE_WCHAR_T);
+   PRINT_MACRO(_GLIBCXX_VERSION);
+   PRINT_MACRO(_GLIBCXX_USE_LONG_LONG);
+   PRINT_MACRO(_GLIBCXX_USE_NLS);
+   PRINT_MACRO(_GLIBCXX_USE_C99_MATH);
+   PRINT_MACRO(_GLIBCXX_USE_C99);
+   PRINT_MACRO(_GLIBCXX_CONCEPT_CHECKS);
+   PRINT_MACRO(_GLIBCXX_USE_LFS);
+   PRINT_MACRO(_GLIBCXX_SYMVER);
+   PRINT_MACRO(_GLIBCXX_MEM_LIMITS);
+   PRINT_MACRO(_GLIBCXX_HOSTED);
+   PRINT_MACRO(_GLIBCXX_SJLJ_EXCEPTIONS);
+
+   // Modena C++ standard library
+   PRINT_MACRO(MSIPL_ANSI_HEADER);
+   PRINT_MACRO(MSIPL_BOOL_BUILTIN);
+   PRINT_MACRO(MSIPL_DEF_EXPLICIT);
+   PRINT_MACRO(MSIPL_DEF_TEMPARG);
+   PRINT_MACRO(MSIPL_EXPINST_ALLOWED);
+   PRINT_MACRO(MSIPL_EXPLICIT_FUNC_TEMPLATE_ARG);
+   PRINT_MACRO(MISPL_EXPLICIT_TEMPLATE_ARGUMENT);
+   PRINT_MACRO(MSIPL_FUNC_TEMPLATE_DEFARG);
+   PRINT_MACRO(MSIPL_MEMBER_TEMPLATE);
+   PRINT_MACRO(MSIPL_MULTITHREAD);
+   PRINT_MACRO(MSIPL_NON_TYPE_TEMPARG);
+   PRINT_MACRO(MSIPL_PARTIAL_TEMPL);
+   PRINT_MACRO(MSIPL_STATIC_CONST_INIT);
+   PRINT_MACRO(MSIPL_TEMPL_NEWSPEC);
+   PRINT_MACRO(MSIPL_TYPENAME);
+   PRINT_MACRO(MSIPL_USING_NAMESPACE);
+   PRINT_MACRO(MSIPL_WCHART);
+}
+
+void print_platform_macros()
+{
+   std::cout << "Detected Platform: " << BOOST_PLATFORM << std::endl;
+   // signedness:
+   PRINT_SIGN(char);
+   PRINT_SIGN(wchar_t);
+   // byte ordering:
+   PRINT_ORDER(short);
+   PRINT_ORDER(int);
+   PRINT_ORDER(long);
+   // sizes:
+   PRINT_EXPRESSION(sizeof(wchar_t));
+   PRINT_EXPRESSION(sizeof(short));
+   PRINT_EXPRESSION(sizeof(int));
+   PRINT_EXPRESSION(sizeof(long));
+   PRINT_EXPRESSION(sizeof(size_t));
+   PRINT_EXPRESSION(sizeof(ptrdiff_t));
+   PRINT_EXPRESSION(sizeof(void*));
+   PRINT_EXPRESSION(sizeof(void(*)(void)));
+   PRINT_EXPRESSION(sizeof(float));
+   PRINT_EXPRESSION(sizeof(double));
+   PRINT_EXPRESSION(sizeof(long double));
+   // limits:
+   PRINT_MACRO(CHAR_BIT);
+   PRINT_MACRO(CHAR_MAX);
+   PRINT_MACRO(WCHAR_MAX);
+   PRINT_MACRO(SHRT_MAX);
+   PRINT_MACRO(INT_MAX);
+   PRINT_MACRO(LONG_MAX);
+   PRINT_MACRO(LLONG_MAX);
+   PRINT_MACRO(LONG_LONG_MAX);
+   PRINT_MACRO(LONGLONG_MAX);
+   PRINT_MACRO(ULLONG_MAX); // <boost/cstdint.hpp> uses these, so we need to know them
+   PRINT_MACRO(ULONG_LONG_MAX);
+   PRINT_MACRO(ULONGLONG_MAX);
+   // general C99:
+   PRINT_MACRO(__STDC_IEC_559__);
+   PRINT_MACRO(__STDC_IEC_559_COMPLEX__);
+   PRINT_MACRO(__STDC_ISO_10646__);
+   // GNU:
+   PRINT_MACRO(__GLIBC__);
+   PRINT_MACRO(__GLIBC_MINOR__);
+   PRINT_MACRO(__GNU_LIBRARY__);
+   PRINT_MACRO(_BSD_SOURCE);
+   PRINT_MACRO(_GNU_SOURCE);
+   PRINT_MACRO(_ISOC99_SOURCE);
+   PRINT_MACRO(_ISOC9X_SOURCE);
+   PRINT_MACRO(_LARGEFILE_SOURCE);
+   PRINT_MACRO(_LARGEFILE64_SOURCE);
+   PRINT_MACRO(_SVID_SOURCE);
+   PRINT_MACRO(_THREAD_SAFE);
+   PRINT_MACRO(_XOPEN_SOURCE_EXTENDED);
+   PRINT_MACRO(XPG);
+   PRINT_MACRO(__MINGW32_MAJOR_VERSION);
+   PRINT_MACRO(__MINGW32_MINOR_VERSION);
+   // POSIX:
+   PRINT_MACRO(_POSIX_ADVISORY_INFO);
+   PRINT_MACRO(_POSIX_ASYNCHRONOUS_IO);
+   PRINT_MACRO(_POSIX_BARRIERS);
+   PRINT_MACRO(_POSIX_C_SOURCE);
+   PRINT_MACRO(_POSIX_CHOWN_RESTRICTED);
+   PRINT_MACRO(_POSIX_CLOCK_SELECTION);
+   PRINT_MACRO(_POSIX_CPUTIME);
+   PRINT_MACRO(_POSIX_FSYNC);
+   PRINT_MACRO(_POSIX_JOB_CONTROL);
+   PRINT_MACRO(_POSIX_MAPPED_FILES);
+   PRINT_MACRO(_POSIX_MEMLOCK);
+   PRINT_MACRO(_POSIX_MEMLOCK_RANGE);
+   PRINT_MACRO(_POSIX_MEMORY_PROTECTION);
+   PRINT_MACRO(_POSIX_MESSAGE_PASSING);
+   PRINT_MACRO(_POSIX_MONOTONIC_CLOCK);
+   PRINT_MACRO(_POSIX_NO_TRUNC);
+   PRINT_MACRO(_POSIX_PRIORITIZED_IO);
+   PRINT_MACRO(_POSIX_PRIORITY_SCHEDULING);
+   PRINT_MACRO(_POSIX_RAW_SOCKETS);
+   PRINT_MACRO(_POSIX_READER_WRITER_LOCKS);
+   PRINT_MACRO(_POSIX_REALTIME_SIGNALS);
+   PRINT_MACRO(_POSIX_REGEXP);
+   PRINT_MACRO(_POSIX_SAVED_IDS);
+   PRINT_MACRO(_POSIX_SEMAPHORES);
+   PRINT_MACRO(_POSIX_SHARED_MEMORY_OBJECTS);
+   PRINT_MACRO(_POSIX_SHELL);
+   PRINT_MACRO(_POSIX_SOURCE);
+   PRINT_MACRO(_POSIX_SPAWN);
+   PRINT_MACRO(_POSIX_SPIN_LOCKS);
+   PRINT_MACRO(_POSIX_SPORADIC_SERVER);
+   PRINT_MACRO(_POSIX_SYNCHRONIZED_IO);
+   PRINT_MACRO(_POSIX_THREAD_ATTR_STACKADDR);
+   PRINT_MACRO(_POSIX_THREAD_ATTR_STACKSIZE);
+   PRINT_MACRO(_POSIX_THREAD_CPUTIME);
+   PRINT_MACRO(_POSIX_THREAD_PRIO_INHERIT);
+   PRINT_MACRO(_POSIX_THREAD_PRIO_PROTECT);
+   PRINT_MACRO(_POSIX_THREAD_PRIORITY_SCHEDULING);
+   PRINT_MACRO(_POSIX_THREAD_PROCESS_SHARED);
+   PRINT_MACRO(_POSIX_THREAD_SAFE_FUNCTIONS);
+   PRINT_MACRO(_POSIX_THREAD_SPORADIC_SERVER);
+   PRINT_MACRO(_POSIX_THREADS);
+   PRINT_MACRO(_POSIX_TIMEOUTS);
+   PRINT_MACRO(_POSIX_TIMERS);
+   PRINT_MACRO(_POSIX_TRACE);
+   PRINT_MACRO(_POSIX_TRACE_EVENT_FILTER);
+   PRINT_MACRO(_POSIX_TRACE_INHERIT);
+   PRINT_MACRO(_POSIX_TRACE_LOG);
+   PRINT_MACRO(_POSIX_TYPED_MEMORY_OBJECTS);
+   PRINT_MACRO(_POSIX_VDISABLE);
+   PRINT_MACRO(_POSIX_VERSION);
+   PRINT_MACRO(_POSIX2_C_BIND);
+   PRINT_MACRO(_POSIX2_C_DEV);
+   PRINT_MACRO(_POSIX2_CHAR_TERM);
+   PRINT_MACRO(_POSIX2_FORT_DEV);
+   PRINT_MACRO(_POSIX2_FORT_RUN);
+   PRINT_MACRO(_POSIX2_LOCALEDEF);
+   PRINT_MACRO(_POSIX2_PBS);
+   PRINT_MACRO(_POSIX2_PBS_ACCOUNTING);
+   PRINT_MACRO(_POSIX2_PBS_CHECKPOINT);
+   PRINT_MACRO(_POSIX2_PBS_LOCATE);
+   PRINT_MACRO(_POSIX2_PBS_MESSAGE);
+   PRINT_MACRO(_POSIX2_PBS_TRACK);
+   PRINT_MACRO(_POSIX2_SW_DEV);
+   PRINT_MACRO(_POSIX2_UPE);
+   PRINT_MACRO(_POSIX2_VERSION);
+   PRINT_MACRO(_V6_ILP32_OFF32);
+   PRINT_MACRO(_V6_ILP32_OFFBIG);
+   PRINT_MACRO(_V6_LP64_OFF64);
+   PRINT_MACRO(_V6_LPBIG_OFFBIG);
+   PRINT_MACRO(_XBS5_ILP32_OFF32);
+   PRINT_MACRO(_XBS5_ILP32_OFFBIG);
+   PRINT_MACRO(_XBS5_LP64_OFF64);
+   PRINT_MACRO(_XBS5_LPBIG_OFFBIG);
+   PRINT_MACRO(_XOPEN_CRYPT);
+   PRINT_MACRO(_XOPEN_ENH_I18N);
+   PRINT_MACRO(_XOPEN_LEGACY);
+   PRINT_MACRO(_XOPEN_REALTIME);
+   PRINT_MACRO(_XOPEN_REALTIME_THREADS);
+   PRINT_MACRO(_XOPEN_SHM);
+   PRINT_MACRO(_XOPEN_SOURCE);
+   PRINT_MACRO(_XOPEN_STREAMS);
+   PRINT_MACRO(_XOPEN_UNIX);
+   PRINT_MACRO(_XOPEN_VERSION);
+   // Misc:
+   PRINT_MACRO(__USE_BSD);
+   PRINT_MACRO(_FILE_OFFSET_BITS);
+}
+
+void print_boost_macros()
+{
+   std::cout << "Boost version " << BOOST_STRINGIZE(BOOST_VERSION) << std::endl;
+   // config setup macros first:
+   PRINT_MACRO(BOOST_USER_CONFIG);
+   PRINT_MACRO(BOOST_COMPILER_CONFIG);
+   PRINT_MACRO(BOOST_STDLIB_CONFIG);
+   PRINT_MACRO(BOOST_PLATFORM_CONFIG);
+   PRINT_MACRO(BOOST_NO_CONFIG);
+   PRINT_MACRO(BOOST_NO_USER_CONFIG);
+   PRINT_MACRO(BOOST_NO_COMPILER_CONFIG);
+   PRINT_MACRO(BOOST_NO_STDLIB_CONFIG);
+   PRINT_MACRO(BOOST_NO_PLATFORM_CONFIG);
+   // then defect and feature macros:
+   PRINT_MACRO(BOOST_DISABLE_THREADS);
+   PRINT_MACRO(BOOST_DISABLE_WIN32);
+   PRINT_MACRO(BOOST_HAS_THREADS);
+   PRINT_MACRO(BOOST_WINDOWS);
+
+   // BEGIN GENERATED BLOCK DO NOT EDIT THIS!!!!!!
+   PRINT_MACRO(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG);
+   PRINT_MACRO(BOOST_DEDUCED_TYPENAME);
+   PRINT_MACRO(BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL);
+   PRINT_MACRO(BOOST_HAS_BETHREADS);
+   PRINT_MACRO(BOOST_HAS_CLOCK_GETTIME);
+   PRINT_MACRO(BOOST_HAS_DIRENT_H);
+   PRINT_MACRO(BOOST_HAS_EXPM1);
+   PRINT_MACRO(BOOST_HAS_FLOAT128);
+   PRINT_MACRO(BOOST_HAS_FTIME);
+   PRINT_MACRO(BOOST_HAS_GETSYSTEMTIMEASFILETIME);
+   PRINT_MACRO(BOOST_HAS_GETTIMEOFDAY);
+   PRINT_MACRO(BOOST_HAS_HASH);
+   PRINT_MACRO(BOOST_HAS_INT128);
+   PRINT_MACRO(BOOST_HAS_LOG1P);
+   PRINT_MACRO(BOOST_HAS_LONG_LONG);
+   PRINT_MACRO(BOOST_HAS_MACRO_USE_FACET);
+   PRINT_MACRO(BOOST_HAS_MS_INT64);
+   PRINT_MACRO(BOOST_HAS_NANOSLEEP);
+   PRINT_MACRO(BOOST_HAS_NL_TYPES_H);
+   PRINT_MACRO(BOOST_HAS_NRVO);
+   PRINT_MACRO(BOOST_HAS_PARTIAL_STD_ALLOCATOR);
+   PRINT_MACRO(BOOST_HAS_PTHREADS);
+   PRINT_MACRO(BOOST_HAS_PTHREAD_DELAY_NP);
+   PRINT_MACRO(BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE);
+   PRINT_MACRO(BOOST_HAS_PTHREAD_YIELD);
+   PRINT_MACRO(BOOST_HAS_RVALUE_REFS);
+   PRINT_MACRO(BOOST_HAS_SCHED_YIELD);
+   PRINT_MACRO(BOOST_HAS_SGI_TYPE_TRAITS);
+   PRINT_MACRO(BOOST_HAS_SIGACTION);
+   PRINT_MACRO(BOOST_HAS_SLIST);
+   PRINT_MACRO(BOOST_HAS_STATIC_ASSERT);
+   PRINT_MACRO(BOOST_HAS_STDINT_H);
+   PRINT_MACRO(BOOST_HAS_STLP_USE_FACET);
+   PRINT_MACRO(BOOST_HAS_TR1_ARRAY);
+   PRINT_MACRO(BOOST_HAS_TR1_BIND);
+   PRINT_MACRO(BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG);
+   PRINT_MACRO(BOOST_HAS_TR1_COMPLEX_OVERLOADS);
+   PRINT_MACRO(BOOST_HAS_TR1_FUNCTION);
+   PRINT_MACRO(BOOST_HAS_TR1_HASH);
+   PRINT_MACRO(BOOST_HAS_TR1_MEM_FN);
+   PRINT_MACRO(BOOST_HAS_TR1_RANDOM);
+   PRINT_MACRO(BOOST_HAS_TR1_REFERENCE_WRAPPER);
+   PRINT_MACRO(BOOST_HAS_TR1_REGEX);
+   PRINT_MACRO(BOOST_HAS_TR1_RESULT_OF);
+   PRINT_MACRO(BOOST_HAS_TR1_SHARED_PTR);
+   PRINT_MACRO(BOOST_HAS_TR1_TUPLE);
+   PRINT_MACRO(BOOST_HAS_TR1_TYPE_TRAITS);
+   PRINT_MACRO(BOOST_HAS_TR1_UNORDERED_MAP);
+   PRINT_MACRO(BOOST_HAS_TR1_UNORDERED_SET);
+   PRINT_MACRO(BOOST_HAS_TR1_UTILITY);
+   PRINT_MACRO(BOOST_HAS_TWO_ARG_USE_FACET);
+   PRINT_MACRO(BOOST_HAS_UNISTD_H);
+   PRINT_MACRO(BOOST_HAS_VARIADIC_TMPL);
+   PRINT_MACRO(BOOST_HAS_WINTHREADS);
+   PRINT_MACRO(BOOST_MSVC6_MEMBER_TEMPLATES);
+   PRINT_MACRO(BOOST_MSVC_STD_ITERATOR);
+   PRINT_MACRO(BOOST_NO_ADL_BARRIER);
+   PRINT_MACRO(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP);
+   PRINT_MACRO(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS);
+   PRINT_MACRO(BOOST_NO_AUTO_PTR);
+   PRINT_MACRO(BOOST_NO_COMPLETE_VALUE_INITIALIZATION);
+   PRINT_MACRO(BOOST_NO_CTYPE_FUNCTIONS);
+   PRINT_MACRO(BOOST_NO_CV_SPECIALIZATIONS);
+   PRINT_MACRO(BOOST_NO_CV_VOID_SPECIALIZATIONS);
+   PRINT_MACRO(BOOST_NO_CWCHAR);
+   PRINT_MACRO(BOOST_NO_CWCTYPE);
+   PRINT_MACRO(BOOST_NO_CXX11_ADDRESSOF);
+   PRINT_MACRO(BOOST_NO_CXX11_ALIGNAS);
+   PRINT_MACRO(BOOST_NO_CXX11_ALLOCATOR);
+   PRINT_MACRO(BOOST_NO_CXX11_ATOMIC_SMART_PTR);
+   PRINT_MACRO(BOOST_NO_CXX11_AUTO_DECLARATIONS);
+   PRINT_MACRO(BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS);
+   PRINT_MACRO(BOOST_NO_CXX11_CHAR16_T);
+   PRINT_MACRO(BOOST_NO_CXX11_CHAR32_T);
+   PRINT_MACRO(BOOST_NO_CXX11_CONSTEXPR);
+   PRINT_MACRO(BOOST_NO_CXX11_DECLTYPE);
+   PRINT_MACRO(BOOST_NO_CXX11_DECLTYPE_N3276);
+   PRINT_MACRO(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS);
+   PRINT_MACRO(BOOST_NO_CXX11_DELETED_FUNCTIONS);
+   PRINT_MACRO(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS);
+   PRINT_MACRO(BOOST_NO_CXX11_EXTERN_TEMPLATE);
+   PRINT_MACRO(BOOST_NO_CXX11_FINAL);
+   PRINT_MACRO(BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS);
+   PRINT_MACRO(BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_ARRAY);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_ATOMIC);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_CHRONO);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_CODECVT);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_CONDITION_VARIABLE);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_FORWARD_LIST);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_FUNCTIONAL);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_FUTURE);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_INITIALIZER_LIST);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_MUTEX);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_RANDOM);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_RATIO);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_REGEX);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_SYSTEM_ERROR);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_THREAD);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_TUPLE);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_TYPEINDEX);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_TYPE_TRAITS);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_UNORDERED_MAP);
+   PRINT_MACRO(BOOST_NO_CXX11_HDR_UNORDERED_SET);
+   PRINT_MACRO(BOOST_NO_CXX11_INLINE_NAMESPACES);
+   PRINT_MACRO(BOOST_NO_CXX11_LAMBDAS);
+   PRINT_MACRO(BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS);
+   PRINT_MACRO(BOOST_NO_CXX11_NOEXCEPT);
+   PRINT_MACRO(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS);
+   PRINT_MACRO(BOOST_NO_CXX11_NULLPTR);
+   PRINT_MACRO(BOOST_NO_CXX11_NUMERIC_LIMITS);
+   PRINT_MACRO(BOOST_NO_CXX11_RANGE_BASED_FOR);
+   PRINT_MACRO(BOOST_NO_CXX11_RAW_LITERALS);
+   PRINT_MACRO(BOOST_NO_CXX11_REF_QUALIFIERS);
+   PRINT_MACRO(BOOST_NO_CXX11_RVALUE_REFERENCES);
+   PRINT_MACRO(BOOST_NO_CXX11_SCOPED_ENUMS);
+   PRINT_MACRO(BOOST_NO_CXX11_SMART_PTR);
+   PRINT_MACRO(BOOST_NO_CXX11_STATIC_ASSERT);
+   PRINT_MACRO(BOOST_NO_CXX11_STD_ALIGN);
+   PRINT_MACRO(BOOST_NO_CXX11_TEMPLATE_ALIASES);
+   PRINT_MACRO(BOOST_NO_CXX11_TRAILING_RESULT_TYPES);
+   PRINT_MACRO(BOOST_NO_CXX11_UNICODE_LITERALS);
+   PRINT_MACRO(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX);
+   PRINT_MACRO(BOOST_NO_CXX11_USER_DEFINED_LITERALS);
+   PRINT_MACRO(BOOST_NO_CXX11_VARIADIC_MACROS);
+   PRINT_MACRO(BOOST_NO_CXX11_VARIADIC_TEMPLATES);
+   PRINT_MACRO(BOOST_NO_CXX14_AGGREGATE_NSDMI);
+   PRINT_MACRO(BOOST_NO_CXX14_BINARY_LITERALS);
+   PRINT_MACRO(BOOST_NO_CXX14_CONSTEXPR);
+   PRINT_MACRO(BOOST_NO_CXX14_DECLTYPE_AUTO);
+   PRINT_MACRO(BOOST_NO_CXX14_DIGIT_SEPARATORS);
+   PRINT_MACRO(BOOST_NO_CXX14_GENERIC_LAMBDAS);
+   PRINT_MACRO(BOOST_NO_CXX14_HDR_SHARED_MUTEX);
+   PRINT_MACRO(BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES);
+   PRINT_MACRO(BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION);
+   PRINT_MACRO(BOOST_NO_CXX14_VARIABLE_TEMPLATES);
+   PRINT_MACRO(BOOST_NO_DEPENDENT_NESTED_DERIVATIONS);
+   PRINT_MACRO(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS);
+   PRINT_MACRO(BOOST_NO_EXCEPTIONS);
+   PRINT_MACRO(BOOST_NO_EXCEPTION_STD_NAMESPACE);
+   PRINT_MACRO(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS);
+   PRINT_MACRO(BOOST_NO_FENV_H);
+   PRINT_MACRO(BOOST_NO_FUNCTION_TEMPLATE_ORDERING);
+   PRINT_MACRO(BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS);
+   PRINT_MACRO(BOOST_NO_INCLASS_MEMBER_INITIALIZATION);
+   PRINT_MACRO(BOOST_NO_INTEGRAL_INT64_T);
+   PRINT_MACRO(BOOST_NO_INTRINSIC_WCHAR_T);
+   PRINT_MACRO(BOOST_NO_IOSFWD);
+   PRINT_MACRO(BOOST_NO_IOSTREAM);
+   PRINT_MACRO(BOOST_NO_IS_ABSTRACT);
+   PRINT_MACRO(BOOST_NO_LIMITS);
+   PRINT_MACRO(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS);
+   PRINT_MACRO(BOOST_NO_LONG_LONG);
+   PRINT_MACRO(BOOST_NO_LONG_LONG_NUMERIC_LIMITS);
+   PRINT_MACRO(BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS);
+   PRINT_MACRO(BOOST_NO_MEMBER_TEMPLATES);
+   PRINT_MACRO(BOOST_NO_MEMBER_TEMPLATE_FRIENDS);
+   PRINT_MACRO(BOOST_NO_MEMBER_TEMPLATE_KEYWORD);
+   PRINT_MACRO(BOOST_NO_MS_INT64_NUMERIC_LIMITS);
+   PRINT_MACRO(BOOST_NO_NESTED_FRIENDSHIP);
+   PRINT_MACRO(BOOST_NO_OPERATORS_IN_NAMESPACE);
+   PRINT_MACRO(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS);
+   PRINT_MACRO(BOOST_NO_POINTER_TO_MEMBER_CONST);
+   PRINT_MACRO(BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS);
+   PRINT_MACRO(BOOST_NO_PRIVATE_IN_AGGREGATE);
+   PRINT_MACRO(BOOST_NO_RTTI);
+   PRINT_MACRO(BOOST_NO_SFINAE);
+   PRINT_MACRO(BOOST_NO_SFINAE_EXPR);
+   PRINT_MACRO(BOOST_NO_STDC_NAMESPACE);
+   PRINT_MACRO(BOOST_NO_STD_ALLOCATOR);
+   PRINT_MACRO(BOOST_NO_STD_DISTANCE);
+   PRINT_MACRO(BOOST_NO_STD_ITERATOR);
+   PRINT_MACRO(BOOST_NO_STD_ITERATOR_TRAITS);
+   PRINT_MACRO(BOOST_NO_STD_LOCALE);
+   PRINT_MACRO(BOOST_NO_STD_MESSAGES);
+   PRINT_MACRO(BOOST_NO_STD_MIN_MAX);
+   PRINT_MACRO(BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN);
+   PRINT_MACRO(BOOST_NO_STD_TYPEINFO);
+   PRINT_MACRO(BOOST_NO_STD_USE_FACET);
+   PRINT_MACRO(BOOST_NO_STD_WSTREAMBUF);
+   PRINT_MACRO(BOOST_NO_STD_WSTRING);
+   PRINT_MACRO(BOOST_NO_STRINGSTREAM);
+   PRINT_MACRO(BOOST_NO_SWPRINTF);
+   PRINT_MACRO(BOOST_NO_TEMPLATED_IOSTREAMS);
+   PRINT_MACRO(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS);
+   PRINT_MACRO(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION);
+   PRINT_MACRO(BOOST_NO_TEMPLATE_TEMPLATES);
+   PRINT_MACRO(BOOST_NO_TWO_PHASE_NAME_LOOKUP);
+   PRINT_MACRO(BOOST_NO_TYPEID);
+   PRINT_MACRO(BOOST_NO_TYPENAME_WITH_CTOR);
+   PRINT_MACRO(BOOST_NO_UNREACHABLE_RETURN_DETECTION);
+   PRINT_MACRO(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE);
+   PRINT_MACRO(BOOST_NO_USING_TEMPLATE);
+   PRINT_MACRO(BOOST_NO_VOID_RETURNS);
+
+
+
+   // END GENERATED BLOCK
+
+   PRINT_MACRO(BOOST_INTEL);
+   PRINT_MACRO(BOOST_MSVC);
+   PRINT_MACRO(BOOST_STD_EXTENSION_NAMESPACE);
+   PRINT_MACRO(BOOST_UNREACHABLE_RETURN(0));
+   PRINT_MACRO(BOOST_CONSTEXPR);
+   PRINT_MACRO(BOOST_CONSTEXPR_OR_CONST);
+   PRINT_MACRO(BOOST_STATIC_CONSTEXPR);
+   PRINT_MACRO(BOOST_NOEXCEPT);
+   PRINT_MACRO(BOOST_FORCEINLINE);
+   PRINT_MACRO(BOOST_NOINLINE);
+   PRINT_MACRO(BOOST_FALLTHROUGH);
+}
+
+void print_separator()
+{
+   std::cout <<
+"\n\n*********************************************************************\n\n";
+}
+
+int main()
+{
+
+  // boost compiler workaround defines
+  print_compiler_macros();
+  print_separator();
+  print_stdlib_macros();
+  print_separator();
+  print_platform_macros();
+  print_separator();
+  print_boost_macros();
+
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/date_time/src/date_time.doc b/vendor/pdalboost/libs/date_time/src/date_time.doc
new file mode 100644
index 0000000..920fac2
--- /dev/null
+++ b/vendor/pdalboost/libs/date_time/src/date_time.doc
@@ -0,0 +1,72 @@
+/* Copyright (c) 2001-2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland 
+ * $Date$
+ */
+
+
+/*! @mainpage Boost Date-Time Library Reference Documentation
+ *  
+ * 
+ *@section intro Introduction
+ *
+ * The Boost Date-Time Library (originally the Generic Date-Time Library or GDTL) 
+ * is a set of C++ date-time libraries based on the concepts of generic programming. 
+ * This is an online reference guide generated from the source code
+ * that provides a handy way to learn about the details of the 
+ * library.  If you are a user you should start with the 
+ * <a href="../user_docs/index.html">User Documentation</a>.
+ *
+ *@section using Using This Documentation
+ *
+ * The online documentation provides extensive information about the details
+ * of the library including:
+ * - <A href="inherits.html">Class hierarchy</A>
+ * - <A href="namespaces.html">Namespace Documentation</A>
+ * - List of <A href="files.html">source files</A>
+ * - Annotated list of classes and structs  
+ *   <A href="annotated.html">(Compound List)</A>
+ *
+ * For example, suppose you wanted to learn more about the 
+ * gregorian::greg_month class.
+ * You could alternatively browse the 
+ * - <A href="classboost_1_1gregorian_1_1greg__month.html">Class documentation page</A>
+ * - Include dependencies for greg_month.hpp
+ * - Hyperlinked and colorized source files: <A href="greg__month_8hpp-source.html">[hpp file]</A> <A href="greg__month_8cpp-source.html">[cpp file]</A>
+ *
+ * The main navigation bar at the top provides that access to many 
+ * different modes of naviation through the library.
+
+ *  
+ */
+
+//! Overall boost namespace -- library does not put any symbols here
+namespace boost {
+
+//! Namespace for basic templates and components used to construct date-time systems
+/*!
+ This namespace encapsulates various types of templates and classes used 
+ to construct coherent date-time systems including date, time, etc.  These
+ components should be considered helper components to be utilized in the
+ construction of specific date-time system implementations.  See namespace
+ gregorian for one such example.
+*/
+namespace date_time {}
+
+}
+/*! Namespace for the c++ standard library.  Library does not define any symbols in the namespace, but uses some classes from this namespace.
+*/
+namespace std {}
+
+/*!\class std::out_of_range
+   \brief Exception class defined in c++ standard library.
+  A derivative of std::logic_error and std::exception and base class for 
+  many exceptions in the library.  See also:
+
+   <a href="http://docs.mandragor.org/files/Programming_languages/Cpp/libstdcpp_v3_Source_Documentation/classstd_1_1out__of__range.html">Mandragor docs for libstdcpp_v3 std::out_of_range</a>
+*/
+
+
+
diff --git a/vendor/pdalboost/libs/date_time/src/gregorian/date_generators.cpp b/vendor/pdalboost/libs/date_time/src/gregorian/date_generators.cpp
new file mode 100644
index 0000000..4b51077
--- /dev/null
+++ b/vendor/pdalboost/libs/date_time/src/gregorian/date_generators.cpp
@@ -0,0 +1,38 @@
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst 
+ * $Date$
+ */
+
+
+
+#ifndef BOOST_DATE_TIME_SOURCE
+#define BOOST_DATE_TIME_SOURCE
+#endif
+#include "boost/date_time/date_generators.hpp"
+
+namespace pdalboost {
+namespace date_time {
+
+  const char* const _nth_as_str[] = {"out of range", "first", "second",
+    "third", "fourth", "fifth"};
+    
+  //! Returns nth arg as string. 1 -> "first", 2 -> "second", max is 5.
+  BOOST_DATE_TIME_DECL const char* nth_as_str(int ele)
+  {
+    if(ele >= 1 && ele <= 5) {
+      return _nth_as_str[ele];
+    } 
+    else {
+      return _nth_as_str[0];
+    }
+  }
+
+} } //namespace date_time 
+
+
+
+
+
diff --git a/vendor/pdalboost/libs/date_time/src/gregorian/greg_month.cpp b/vendor/pdalboost/libs/date_time/src/gregorian/greg_month.cpp
new file mode 100644
index 0000000..b42f58d
--- /dev/null
+++ b/vendor/pdalboost/libs/date_time/src/gregorian/greg_month.cpp
@@ -0,0 +1,173 @@
+/* Copyright (c) 2002-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+
+#ifndef BOOST_DATE_TIME_SOURCE
+#define BOOST_DATE_TIME_SOURCE
+#endif
+#include "boost/date_time/gregorian/greg_month.hpp"
+#include "boost/date_time/gregorian/greg_facet.hpp"
+#include "boost/date_time/date_format_simple.hpp"
+#include "boost/date_time/compiler_config.hpp"
+#if defined(BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS)
+#include "boost/date_time/gregorian/formatters_limited.hpp"
+#else
+#include "boost/date_time/gregorian/formatters.hpp"
+#endif
+#include "boost/date_time/date_parsing.hpp"
+#include "boost/date_time/gregorian/parsers.hpp"
+
+#include "greg_names.hpp"
+namespace pdalboost {
+namespace gregorian {
+
+  /*! Returns a shared pointer to a map of Month strings & numbers.
+   * Strings are both full names and abbreviations.
+   * Ex. ("jan",1), ("february",2), etc...
+   * Note: All characters are lowercase - for case insensitivity
+   */
+  greg_month::month_map_ptr_type greg_month::get_month_map_ptr()
+  {
+    static month_map_ptr_type month_map_ptr(new greg_month::month_map_type());
+
+    if(month_map_ptr->empty()) {
+      std::string s("");
+      for(unsigned short i = 1; i <= 12; ++i) {
+        greg_month m(static_cast<month_enum>(i));
+        s = m.as_long_string();
+        s = date_time::convert_to_lower(s);
+        month_map_ptr->insert(std::make_pair(s, i));
+        s = m.as_short_string();
+        s = date_time::convert_to_lower(s);
+        month_map_ptr->insert(std::make_pair(s, i));
+      }
+    }
+    return month_map_ptr;
+  }
+
+
+  //! Returns 3 char english string for the month ex: Jan, Feb, Mar, Apr
+  const char*
+  greg_month::as_short_string() const 
+  {
+    return short_month_names[value_-1];
+  }
+  
+  //! Returns full name of month as string in english ex: January, February
+  const char*
+  greg_month::as_long_string()  const 
+  {
+    return long_month_names[value_-1];
+  }
+ 
+  //! Return special_value from string argument
+  /*! Return special_value from string argument. If argument is 
+   * not one of the special value names (defined in names.hpp), 
+   * return 'not_special' */
+  special_values special_value_from_string(const std::string& s) {
+    short i = date_time::find_match(special_value_names,
+                                    special_value_names,
+                                    date_time::NumSpecialValues,
+                                    s);
+    if(i >= date_time::NumSpecialValues) { // match not found
+      return not_special;
+    }
+    else {
+      return static_cast<special_values>(i);
+    }
+  }
+
+
+#ifndef BOOST_NO_STD_WSTRING
+  //! Returns 3 wchar_t english string for the month ex: Jan, Feb, Mar, Apr
+  const wchar_t*
+  greg_month::as_short_wstring() const 
+  {
+    return w_short_month_names[value_-1];
+  }
+  
+  //! Returns full name of month as wchar_t string in english ex: January, February
+  const wchar_t*
+  greg_month::as_long_wstring()  const 
+  {
+    return w_long_month_names[value_-1];
+  }
+#endif // BOOST_NO_STD_WSTRING
+  
+#ifndef BOOST_DATE_TIME_NO_LOCALE
+  /*! creates an all_date_names_put object with the correct set of names.
+   * This function is only called in the event of an exception where
+   * the imbued locale containing the needed facet is for some reason 
+   * unreachable.
+   */
+  BOOST_DATE_TIME_DECL 
+  pdalboost::date_time::all_date_names_put<greg_facet_config, char>* 
+  create_facet_def(char /*type*/)
+  {
+    typedef 
+      pdalboost::date_time::all_date_names_put<greg_facet_config, char> facet_def;
+    
+    return new facet_def(short_month_names,
+                         long_month_names,
+                         special_value_names,
+                         short_weekday_names,
+                         long_weekday_names);
+  }
+  
+  //! generates a locale with the set of gregorian name-strings of type char*
+  BOOST_DATE_TIME_DECL std::locale generate_locale(std::locale& loc, char /*type*/){
+    typedef pdalboost::date_time::all_date_names_put<greg_facet_config, char> facet_def;
+    return std::locale(loc, new facet_def(short_month_names,
+                                          long_month_names,
+                                          special_value_names,
+                                          short_weekday_names,
+                                          long_weekday_names)
+        );
+  }
+  
+#ifndef BOOST_NO_STD_WSTRING
+  /*! creates an all_date_names_put object with the correct set of names.
+   * This function is only called in the event of an exception where
+   * the imbued locale containing the needed facet is for some reason 
+   * unreachable.
+   */
+  BOOST_DATE_TIME_DECL 
+  pdalboost::date_time::all_date_names_put<greg_facet_config, wchar_t>* 
+  create_facet_def(wchar_t /*type*/)
+  {
+    typedef 
+      pdalboost::date_time::all_date_names_put<greg_facet_config,wchar_t> facet_def;
+    
+    return new facet_def(w_short_month_names,
+                         w_long_month_names,
+                         w_special_value_names,
+                         w_short_weekday_names,
+                         w_long_weekday_names);
+  }
+
+  //! generates a locale with the set of gregorian name-strings of type wchar_t*
+  BOOST_DATE_TIME_DECL std::locale generate_locale(std::locale& loc, wchar_t /*type*/){
+    typedef pdalboost::date_time::all_date_names_put<greg_facet_config, wchar_t> facet_def;
+    return std::locale(loc, new facet_def(w_short_month_names,
+                                          w_long_month_names,
+                                          w_special_value_names,
+                                          w_short_weekday_names,
+                                          w_long_weekday_names)
+        );
+  }
+#endif // BOOST_NO_STD_WSTRING
+#endif // BOOST_DATE_TIME_NO_LOCALE
+
+} } //namespace gregorian
+
+
+
+
+
+
diff --git a/vendor/pdalboost/libs/date_time/src/gregorian/greg_names.hpp b/vendor/pdalboost/libs/date_time/src/gregorian/greg_names.hpp
new file mode 100644
index 0000000..15fe822
--- /dev/null
+++ b/vendor/pdalboost/libs/date_time/src/gregorian/greg_names.hpp
@@ -0,0 +1,43 @@
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+
+#ifndef DATE_TIME_SRC_GREG_NAMES_HPP___
+#define DATE_TIME_SRC_GREG_NAMES_HPP___
+
+#include "boost/date_time/gregorian/greg_month.hpp"
+#include "boost/date_time/special_defs.hpp"
+namespace pdalboost {
+namespace gregorian {
+
+
+  const char* const short_month_names[NumMonths]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec", "NAM"};
+  const char* const long_month_names[NumMonths]={"January","February","March","April","May","June","July","August","September","October","November","December","NotAMonth"};
+  const char* const special_value_names[date_time::NumSpecialValues]={"not-a-date-time","-infinity","+infinity","min_date_time","max_date_time","not_special"};
+
+
+  const char* const short_weekday_names[]={"Sun", "Mon", "Tue", 
+                                           "Wed", "Thu", "Fri", "Sat"};
+  const char* const long_weekday_names[]= {"Sunday","Monday","Tuesday",
+                                           "Wednesday", "Thursday",
+                                           "Friday", "Saturday"};
+
+#ifndef BOOST_NO_STD_WSTRING
+  const wchar_t* const w_short_month_names[NumMonths]={L"Jan",L"Feb",L"Mar",L"Apr",L"May",L"Jun",L"Jul",L"Aug",L"Sep",L"Oct",L"Nov",L"Dec",L"NAM"};
+  const wchar_t* const w_long_month_names[NumMonths]={L"January",L"February",L"March",L"April",L"May",L"June",L"July",L"August",L"September",L"October",L"November",L"December",L"NotAMonth"};
+  const wchar_t* const w_special_value_names[date_time::NumSpecialValues]={L"not-a-date-time",L"-infinity",L"+infinity",L"min_date_time",L"max_date_time",L"not_special"};
+
+  const wchar_t* const w_short_weekday_names[]={L"Sun", L"Mon", L"Tue", 
+                                           L"Wed", L"Thu", L"Fri", L"Sat"};
+  const wchar_t* const w_long_weekday_names[]= {L"Sunday",L"Monday",L"Tuesday",
+                                           L"Wednesday", L"Thursday",
+                                           L"Friday", L"Saturday"};
+#endif // BOOST_NO_STD_WSTRING
+} } // pdalboost::gregorian
+#endif // DATE_TIME_SRC_GREG_NAMES_HPP___
diff --git a/vendor/pdalboost/libs/date_time/src/gregorian/greg_weekday.cpp b/vendor/pdalboost/libs/date_time/src/gregorian/greg_weekday.cpp
new file mode 100644
index 0000000..72ac7db
--- /dev/null
+++ b/vendor/pdalboost/libs/date_time/src/gregorian/greg_weekday.cpp
@@ -0,0 +1,50 @@
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+
+
+#ifndef BOOST_DATE_TIME_SOURCE
+#define BOOST_DATE_TIME_SOURCE
+#endif
+#include "boost/date_time/gregorian/greg_weekday.hpp"
+
+#include "greg_names.hpp"
+
+namespace pdalboost {
+namespace gregorian {
+  
+  //! Return a 3 digit english string of the day of week (eg: Sun)
+  const char*
+  greg_weekday::as_short_string() const 
+  {
+    return short_weekday_names[value_];
+  }
+  //! Return a point to a long english string representing day of week
+  const char*
+  greg_weekday::as_long_string()  const 
+  {
+    return long_weekday_names[value_];
+  }
+  
+#ifndef BOOST_NO_STD_WSTRING
+  //! Return a 3 digit english wchar_t string of the day of week (eg: Sun)
+  const wchar_t*
+  greg_weekday::as_short_wstring() const 
+  {
+    return w_short_weekday_names[value_];
+  }
+  //! Return a point to a long english wchar_t string representing day of week
+  const wchar_t*
+  greg_weekday::as_long_wstring()  const 
+  {
+    return w_long_weekday_names[value_];
+  }
+#endif // BOOST_NO_STD_WSTRING
+  
+} } //namespace gregorian
+
diff --git a/vendor/pdalboost/libs/date_time/src/gregorian/gregorian_types.cpp b/vendor/pdalboost/libs/date_time/src/gregorian/gregorian_types.cpp
new file mode 100644
index 0000000..7dd7f22
--- /dev/null
+++ b/vendor/pdalboost/libs/date_time/src/gregorian/gregorian_types.cpp
@@ -0,0 +1,62 @@
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland 
+ * $Date$
+ */
+
+
+/** @defgroup date_basics Date Basics
+  This page summarizes some of the key user types and functions needed 
+  to write programs using the gregorian date system.  This is not a
+  comprehensive list, but rather some key types to start exploring.
+
+
+**/ 
+
+/** @defgroup date_alg Date Algorithms / Generators
+  Date algorithms or generators are tools for generating other dates or
+  schedules of dates.  A generator function starts with some part of a
+  date such as a month and day and is supplied another part to then
+  generate a final date.
+
+**/ 
+
+/** @defgroup date_format Date Formatting
+  The functions on these page are some of the key formatting functions
+  for dates.  
+**/ 
+
+
+//File doesn't have a current purpose except to generate docs
+//and keep it changeable without recompiles
+/*! @example days_alive.cpp 
+  Calculate the number of days you have been living using durations and dates.
+*/
+/*! @example days_till_new_year.cpp 
+  Calculate the number of days till new years
+*/
+/*! @example print_month.cpp 
+  Simple utility to print out days of the month with the days of a month.  Demontstrates date iteration (date_time::date_itr). 
+*/
+/*! @example localization.cpp
+  An example showing localized stream-based I/O.
+*/
+/*! @example dates_as_strings.cpp 
+  Various parsing and output of strings (mostly supported for 
+  compilers that do not support localized streams).
+*/
+/*! @example period_calc.cpp 
+  Calculates if a date is in an 'irregular' collection of periods using
+  period calculation functions.
+*/
+/*! @example print_holidays.cpp
+  This is an example of using functors to define a holiday schedule
+ */
+/*! @example localization.cpp
+  Demonstrates the use of facets to localize date output for Gregorian dates.
+ */
+
+ 
+
diff --git a/vendor/pdalboost/libs/date_time/src/posix_time/posix_time_types.cpp b/vendor/pdalboost/libs/date_time/src/posix_time/posix_time_types.cpp
new file mode 100644
index 0000000..4395301
--- /dev/null
+++ b/vendor/pdalboost/libs/date_time/src/posix_time/posix_time_types.cpp
@@ -0,0 +1,35 @@
+
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the 
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland 
+ * $Date$
+ */
+
+
+//File doesn't have a current purpose except to generate docs
+//and keep it changeable without recompiles
+
+/** @defgroup time_basics Time Basics
+  
+**/ 
+
+/** @defgroup time_format Time Formatting
+  
+**/ 
+
+
+
+/*! @example local_utc_conversion.cpp
+  Demonstrate utc to local and local to utc calculations including dst.
+*/
+/*! @example time_periods.cpp Demonstrate some simple uses of time periods.
+*/
+/*! @example print_hours.cpp Demonstrate time iteration, clock retrieval, and simple calculation.
+ */
+/*! @example time_math.cpp Various types of calculations with times and time durations.
+ */
+
+ 
+
diff --git a/vendor/pdalboost/libs/exception/src/clone_current_exception_non_intrusive.cpp b/vendor/pdalboost/libs/exception/src/clone_current_exception_non_intrusive.cpp
new file mode 100644
index 0000000..33cf73e
--- /dev/null
+++ b/vendor/pdalboost/libs/exception/src/clone_current_exception_non_intrusive.cpp
@@ -0,0 +1,320 @@
+//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//This MSVC-specific cpp file implements non-intrusive cloning of exception objects.
+//Based on an exception_ptr implementation by Anthony Williams.
+
+#ifdef BOOST_NO_EXCEPTIONS
+#error This file requires exception handling to be enabled.
+#endif
+
+#include <boost/exception/detail/clone_current_exception.hpp>
+
+#if defined(BOOST_ENABLE_NON_INTRUSIVE_EXCEPTION_PTR) && defined(_MSC_VER) && defined(_M_IX86) && !defined(_M_X64)
+
+//Non-intrusive cloning support implemented below, only for MSVC versions mentioned above.
+//Thanks Anthony Williams!
+
+#include <boost/exception/exception.hpp>
+#include <boost/shared_ptr.hpp>
+#ifndef BOOST_NO_RTTI
+#include <typeinfo>
+#endif
+#include <windows.h>
+#include <malloc.h>
+
+namespace
+    {
+    unsigned const exception_maximum_parameters=15;
+    unsigned const exception_noncontinuable=1;
+
+#if _MSC_VER==1310
+    int const exception_info_offset=0x74;
+#elif (_MSC_VER==1400 || _MSC_VER==1500)
+    int const exception_info_offset=0x80;
+#else
+    int const exception_info_offset=-1;
+#endif
+
+    struct
+    exception_record
+        {
+        unsigned long ExceptionCode;
+        unsigned long ExceptionFlags;
+        exception_record * ExceptionRecord;
+        void * ExceptionAddress;
+        unsigned long NumberParameters;
+        ULONG_PTR ExceptionInformation[exception_maximum_parameters];
+        };
+
+    struct
+    exception_pointers
+        {
+        exception_record * ExceptionRecord;
+        void * ContextRecord;
+        };
+
+    unsigned const cpp_exception_code=0xE06D7363;
+    unsigned const cpp_exception_magic_flag=0x19930520;
+    unsigned const cpp_exception_parameter_count=3;
+
+    struct
+    dummy_exception_type
+        {
+        };
+
+    typedef int(dummy_exception_type::*normal_copy_constructor_ptr)(void * src);
+    typedef int(dummy_exception_type::*copy_constructor_with_virtual_base_ptr)(void * src,void * dst);
+    typedef void (dummy_exception_type::*destructor_ptr)();
+
+    union
+    cpp_copy_constructor
+        {
+        normal_copy_constructor_ptr normal_copy_constructor;
+        copy_constructor_with_virtual_base_ptr copy_constructor_with_virtual_base;
+        };
+
+    enum
+    cpp_type_flags
+        {
+        class_is_simple_type=1,
+        class_has_virtual_base=4
+        };
+
+    struct
+    cpp_type_info
+        {
+        unsigned flags;
+#ifndef BOOST_NO_RTTI
+        void const * type_info;
+#else
+        std::type_info * type_info;
+#endif
+        int this_offset;
+        int vbase_descr;
+        int vbase_offset;
+        unsigned long size;
+        cpp_copy_constructor copy_constructor;
+        };
+
+    struct
+    cpp_type_info_table
+        {
+        unsigned count;
+        const cpp_type_info * info[1];
+        };
+
+    struct
+    cpp_exception_type
+        {
+        unsigned flags;
+        destructor_ptr destructor;
+        void(*custom_handler)();
+        cpp_type_info_table const * type_info_table;
+        };
+
+    struct
+    exception_object_deleter
+        {
+        cpp_exception_type const & et_;
+
+        exception_object_deleter( cpp_exception_type const & et ):
+            et_(et)
+            {
+            }
+
+        void
+        operator()( void * obj )
+            {
+            BOOST_ASSERT(obj!=0);
+            dummy_exception_type * dummy_exception_ptr=reinterpret_cast<dummy_exception_type *>(obj);
+            (dummy_exception_ptr->*(et_.destructor))();
+            free(obj);
+            }
+        };
+
+    cpp_type_info const &
+    get_cpp_type_info( cpp_exception_type const & et )
+        {
+        cpp_type_info const * ti = et.type_info_table->info[0];
+        BOOST_ASSERT(ti!=0);
+        return *ti;
+        }
+
+    void
+    copy_msvc_exception( void * dst, void * src, cpp_type_info const & ti )
+        {
+        if( !(ti.flags & class_is_simple_type) && ti.copy_constructor.normal_copy_constructor )
+            {
+            dummy_exception_type * dummy_exception_ptr = reinterpret_cast<dummy_exception_type *>(dst);
+            if( ti.flags & class_has_virtual_base )
+                (dummy_exception_ptr->*(ti.copy_constructor.copy_constructor_with_virtual_base))(src,dst);
+            else
+                (dummy_exception_ptr->*(ti.copy_constructor.normal_copy_constructor))(src);
+            }
+        else
+            memmove(dst,src,ti.size);
+        }
+
+    pdalboost::shared_ptr<void>
+    clone_msvc_exception( void * src, cpp_exception_type const & et )
+        {
+        assert(src!=0);
+        cpp_type_info const & ti=get_cpp_type_info(et);
+        if( void * dst = malloc(ti.size) )
+            {
+            try
+                {
+                copy_msvc_exception(dst,src,ti);
+                }
+            catch(
+            ... )
+                {
+                free(dst);
+                throw;
+                }
+            return pdalboost::shared_ptr<void>(dst,exception_object_deleter(et));
+            }
+        else
+            throw std::bad_alloc();
+        }
+
+    class
+    cloned_exception:
+        public pdalboost::exception_detail::clone_base
+        {
+        cloned_exception( cloned_exception const & );
+        cloned_exception & operator=( cloned_exception const & );
+
+        cpp_exception_type const & et_;
+        pdalboost::shared_ptr<void> exc_;
+
+        public:
+
+        cloned_exception( void * exc, cpp_exception_type const & et ):
+            et_(et),
+            exc_(clone_msvc_exception(exc,et_))
+            {
+            }
+
+        ~cloned_exception() throw()
+            {
+            }
+
+        pdalboost::exception_detail::clone_base const *
+        clone() const
+            {
+            return new cloned_exception(exc_.get(),et_);
+            }
+
+        void
+        rethrow() const
+            {
+            cpp_type_info const & ti=get_cpp_type_info(et_);
+            void * dst = _alloca(ti.size);
+            copy_msvc_exception(dst,exc_.get(),ti);
+            ULONG_PTR args[cpp_exception_parameter_count];
+            args[0]=cpp_exception_magic_flag;
+            args[1]=reinterpret_cast<ULONG_PTR>(dst);
+            args[2]=reinterpret_cast<ULONG_PTR>(&et_);
+            RaiseException(cpp_exception_code,EXCEPTION_NONCONTINUABLE,cpp_exception_parameter_count,args);
+            }
+        };
+
+    bool
+    is_cpp_exception( EXCEPTION_RECORD const * record )
+        {
+        return record && 
+            (record->ExceptionCode==cpp_exception_code) &&
+            (record->NumberParameters==cpp_exception_parameter_count) &&
+            (record->ExceptionInformation[0]==cpp_exception_magic_flag);
+        }
+
+    unsigned long
+    exception_cloning_filter( int & result, pdalboost::exception_detail::clone_base const * & ptr, void * info_ )
+        {
+        BOOST_ASSERT(exception_info_offset>=0);
+        BOOST_ASSERT(info_!=0);
+        EXCEPTION_POINTERS * info=reinterpret_cast<EXCEPTION_POINTERS *>(info_);
+        EXCEPTION_RECORD * record=info->ExceptionRecord;
+        if( is_cpp_exception(record) )
+            {
+            if( !record->ExceptionInformation[2] )
+                record = *reinterpret_cast<EXCEPTION_RECORD * *>(reinterpret_cast<char *>(_errno())+exception_info_offset);
+            if( is_cpp_exception(record) && record->ExceptionInformation[2] )
+                try
+                    {
+                    ptr = new cloned_exception(
+                            reinterpret_cast<void *>(record->ExceptionInformation[1]),
+                            *reinterpret_cast<cpp_exception_type const *>(record->ExceptionInformation[2]));
+                    result = pdalboost::exception_detail::clone_current_exception_result::success;
+                    }
+                catch(
+                std::bad_alloc & )
+                    {
+                    result = pdalboost::exception_detail::clone_current_exception_result::bad_alloc;
+                    }
+                catch(
+                ... )
+                    {
+                    result = pdalboost::exception_detail::clone_current_exception_result::bad_exception;
+                    }
+            }
+        return EXCEPTION_EXECUTE_HANDLER;
+        }
+    }
+
+namespace
+pdalboost
+    {
+    namespace
+    exception_detail
+        {
+        int
+        clone_current_exception_non_intrusive( clone_base const * & cloned )
+            {
+            BOOST_ASSERT(!cloned);
+            int result = clone_current_exception_result::not_supported;
+            if( exception_info_offset>=0 )
+                {
+                 clone_base const * ptr=0;
+                __try
+                    {
+                    throw;
+                    }
+                __except(exception_cloning_filter(result,ptr,GetExceptionInformation()))
+                    {
+                    }
+                if( result==clone_current_exception_result::success )
+                    cloned=ptr;
+                }
+            BOOST_ASSERT(result!=clone_current_exception_result::success || cloned);
+            return result;
+            }
+        }
+    }
+
+#else
+
+//On all other compilers, return clone_current_exception_result::not_supported.
+//On such platforms, only the intrusive enable_current_exception() cloning will work.
+
+#include <boost/config.hpp>
+
+namespace
+pdalboost
+    {
+    namespace
+    exception_detail
+        {
+        int
+        clone_current_exception_non_intrusive( clone_base const * & )
+            {
+            return clone_current_exception_result::not_supported;
+            }
+        }
+    }
+
+#endif
diff --git a/vendor/pdalboost/libs/filesystem/bug/Jamfile.v2 b/vendor/pdalboost/libs/filesystem/bug/Jamfile.v2
new file mode 100644
index 0000000..e053843
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/bug/Jamfile.v2
@@ -0,0 +1,19 @@
+# Boost Filesystem Library Bug report Jamfile
+ 
+# Copyright Beman Dawes 2014
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+# Library home page: http://www.boost.org/libs/filesystem
+
+project
+    : requirements
+      <library>/boost/filesystem//pdalboost_filesystem
+      <library>/boost/system//pdalboost_system
+      <toolset>msvc:<asynch-exceptions>on
+    ;
+    
+exe bug : bug.cpp : <link>static ;
+
+# install in ./bin; invoke via "b2", not "b2 install"
+install bin : bug ;
diff --git a/vendor/pdalboost/libs/filesystem/bug/bug.cpp b/vendor/pdalboost/libs/filesystem/bug/bug.cpp
new file mode 100644
index 0000000..fc3b957
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/bug/bug.cpp
@@ -0,0 +1,19 @@
+//  filesystem/bug/bug.cpp
+
+#include <boost/detail/lightweight_test_report.hpp>
+#include <boost/filesystem.hpp>
+
+namespace fs = pdalboost::filesystem;
+
+int test_main(int, char*[])     // note name
+{
+  BOOST_TEST(2 + 2 == 5);       // one convertible-to-bool argument
+  BOOST_TEST_EQ(4 + 4, 9);      // two EqualityComparible arguments
+  BOOST_TEST(fs::exists("."));  // should pass, so nothing reported
+
+  return ::pdalboost::report_errors();   // required
+}
+
+//  Copyright Beman Dawes 2014
+//  Distributed under the Boost Software License, Version 1.0.
+//  www.boost.org/LICENSE_1_0.txt
diff --git a/vendor/pdalboost/libs/filesystem/bug/index.html b/vendor/pdalboost/libs/filesystem/bug/index.html
new file mode 100644
index 0000000..985b9c0
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/bug/index.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0; URL=../doc/issue_reporting.html">
+</head>
+<body>
+Automatic redirection failed, please go to
+<a href="../doc/issue_reporting.html">../doc/issue_reporting.html</a>.
+<hr>
+<p>© Copyright Beman Dawes, 2014</p>
+<p> Distributed under the Boost Software License, Version 1.0.
+See http://www.boost.org/LICENSE_1_0.txt</p>
+</body>
+</html>
diff --git a/vendor/pdalboost/libs/filesystem/doc/Jamfile.v2 b/vendor/pdalboost/libs/filesystem/doc/Jamfile.v2
new file mode 100644
index 0000000..ac5a67d
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/Jamfile.v2
@@ -0,0 +1,19 @@
+# Boost Filesystem Library Example Jamfile
+ 
+# Copyright Beman Dawes 2010
+
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+# Library home page: http://www.boost.org/libs/filesystem
+
+project
+    : requirements
+      <library>/boost/filesystem//pdalboost_filesystem
+      <library>/boost/system//pdalboost_system
+      <toolset>msvc:<asynch-exceptions>on
+      <link>static
+    ;
+    
+exe path_table : path_table.cpp ;    
+install path_table-copy : path_table : <location>. ;
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/POSIX_filename_encoding.txt b/vendor/pdalboost/libs/filesystem/doc/POSIX_filename_encoding.txt
new file mode 100644
index 0000000..14c45c0
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/POSIX_filename_encoding.txt
@@ -0,0 +1,55 @@
+http://www.linuxfromscratch.org/blfs/view/svn/introduction/locale-issues.html
+
+"The POSIX standard mandates that the filename encoding is the encoding implied by the current LC_CTYPE locale category." 
+
+-------
+
+http://mail.nl.linux.org/linux-utf8/2001-02/msg00103.html
+
+From: Markus Kuhn
+
+Tom Tromey wrote on 2001-02-05 00:36 UTC:
+> Kai> IMAO, a *real* filesystem should use some encoding of ISO 10646 -
+> Kai> UTF-8, UTF-16, or UTF-32 are all viable options. The same should
+> Kai> be true for the kernel filename interfaces.
+> 
+> I like this, but what should I do right now?
+
+The POSIX kernel file system interface is engraved into stone and
+extremely unlikely to change. File names are arbitrary binary strings,
+with only the '/' and '\0' bytes having any special semantics. You can
+use arbitrary coded character sets on it as long as they do not
+introduce '/' and '\0' bytes spuriously. Writers and readers have to
+somehow agree on what encoding to use and the only really practical way
+is to use the same encoding on all systems that share files. Eventually,
+everyone will be using UTF-8 for file names on POSIX systems. Right now,
+I would recommend users to use only ASCII for filenames, as this is
+already UTF-8 and therefore simplifies migration. Using the ISO 8859,
+JIS, etc. filenames should soon be considered deprecated practice.
+
+> I work on libgcj, the runtime component of gcj, the Java front end to
+> GCC.  In libgcj of course we use UCS-2 everywhere, since that is what
+> Java does.  Currently, for Unixy systems, we assume that all file
+> names are UTF-8.
+
+The best solution is to assume that the file names are in the
+locale-specific multi-byte encoding. Simply use mbrtowc and wcrtomb to
+convert between Unicode and the locale-dependent multi-byte encoding
+used in file names and text files if the ISO C 99 symbol
+__STDC_ISO_10646__ is defined (which guarantees that wchar_t = UCS). On
+Linux, this has been the case since glibc 2.2.
+
+> (Actually, we do something notably worse, which is
+> assume that file names are Java-style UTF-8, with the weird encoding
+> for \u0000.)
+
+\u0000 = NUL was never a character allowed in filenames under POSIX.
+Raise an exception if someone tries to use it in a filename. Problem
+solved.
+
+I never understood, why Java found it necessary to introduce two
+distinct ASCII NUL characters.
+
+------
+
+Interesting idea. Use iconv to create shift-jis or other mbcs test cases.
diff --git a/vendor/pdalboost/libs/filesystem/doc/build_tutorial.bat b/vendor/pdalboost/libs/filesystem/doc/build_tutorial.bat
new file mode 100644
index 0000000..5c5cd35
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/build_tutorial.bat
@@ -0,0 +1,7 @@
+ at echo off
+copy /y tutorial.html tutorial.bak
+html_include_files +# tutorial.bak tutorial.html
+tutorial.html
+rem Copyright Beman Dawes 2015 
+rem Distributed under the Boost Software License, Version 1.0.
+rem See http://www.boost.org/LICENSE_1_0.txt
diff --git a/vendor/pdalboost/libs/filesystem/doc/deprecated.html b/vendor/pdalboost/libs/filesystem/doc/deprecated.html
new file mode 100644
index 0000000..9ba05e2
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/deprecated.html
@@ -0,0 +1,387 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Filesystem Deprecated Features</title>
+<link href="styles.css" rel="stylesheet">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td width="277">
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem Deprecated Features</font>
+    </td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="index.htm">Home</a>   
+    <a href="tutorial.html">Tutorial</a>   
+    <a href="reference.html">Reference</a>   
+    <a href="faq.htm">FAQ</a>   
+    <a href="release_history.html">Releases</a>   
+    <a href="portability_guide.htm">Portability</a>   
+    <a href="v3.html">V3 Intro</a>   
+    <a href="v3_design.html">V3 Design</a>   
+    <a href="deprecated.html">Deprecated</a>   
+    <a href="issue_reporting.html">Bug Reports </a>  
+    </td>
+</table>
+
+<h2><a name="Deprecated-names">Deprecated names</a> and features</h2>
+<p style="font-size: 10pt">As the library evolves over time, names sometimes 
+change or old features are removed to make way for new features. To ease transition, Boost.Filesystem deprecates 
+the old names and features, but by default continues to provide many of them. 
+The deprecated names and other workarounds can be suppressed by defining macro <code>
+BOOST_FILESYSTEM_NO_DEPRECATED</code>, and this is recommended for all new code.</p>
+<p style="font-size: 10pt">In the table, ✔ indicates a synonym or other 
+workaround is provided unless <code>
+BOOST_FILESYSTEM_NO_DEPRECATED</code> is defined.</p>
+<table border="1" cellpadding="5" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <b><i>Component or location</i></b></td>
+    <td style="font-size: 10pt" valign="top">
+    <p style="font-size: 10pt"><b><i>Old name, now deprecated</i></b></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <p style="font-size: 10pt"><b><i>New name</i></b></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+    <td style="font-size: 10pt" valign="top"><code>branch_path()</code></td>
+    <td style="font-size: 10pt" valign="top">✔</td>
+    <td style="font-size: 10pt" valign="top"><code>parent_path()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>canonize()</code></td>
+    <td style="font-size: 10pt" valign="top">
+     </td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>default_name_check()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>default_name_check(name_check)</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>default_name_check_writable()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+    <td style="font-size: 10pt" valign="top"><code>directory_string()</code></td>
+    <td style="font-size: 10pt" valign="top">✔</td>
+    <td style="font-size: 10pt" valign="top"><code>string</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+    <td style="font-size: 10pt" valign="top"><code>external_directory_string()</code></td>
+    <td style="font-size: 10pt" valign="top">✔</td>
+    <td style="font-size: 10pt" valign="top"><code>native()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+    <td style="font-size: 10pt" valign="top"><code>external_file_string()</code></td>
+    <td style="font-size: 10pt" valign="top">✔</td>
+    <td style="font-size: 10pt" valign="top"><code>native()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+    <td style="font-size: 10pt" valign="top"><code>file_string()</code></td>
+    <td style="font-size: 10pt" valign="top">✔</td>
+    <td style="font-size: 10pt" valign="top"><code>string()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+    <td style="font-size: 10pt" valign="top"><code>has_branch_path()</code></td>
+    <td style="font-size: 10pt" valign="top">✔</td>
+    <td style="font-size: 10pt" valign="top"><code>has_parent_path()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+    <td style="font-size: 10pt" valign="top"><code>has_leaf()</code></td>
+    <td style="font-size: 10pt" valign="top">✔</td>
+    <td style="font-size: 10pt" valign="top"><code>has_filename()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+    <td style="font-size: 10pt" valign="top"><code>is_complere()</code></td>
+    <td style="font-size: 10pt" valign="top">✔</td>
+    <td style="font-size: 10pt" valign="top"><code>is_absolute()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top"><code>class path</code></td>
+    <td style="font-size: 10pt" valign="top"><code>leaf()</code></td>
+    <td style="font-size: 10pt" valign="top">✔</td>
+    <td style="font-size: 10pt" valign="top"><code>filename()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>native_directory_string()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <code>string()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>native_file_string()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <code>string()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>normalize()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>path(const string_type& str, name_check)</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed. Workaround ignores </i><code>name_check</code><i> 
+    argument.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>path(const string_type::value_type* s,  name_check)</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed. Workaround ignores </i><code>name_check</code><i> 
+    argument.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <p style="font-size: 10pt"><code>remove_leaf()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <p style="font-size: 10pt"><code>remove_filename()</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>path.hpp</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>template<class String, class Traits><br>
+  class basic_path;</code></td>
+    <td style="font-size: 10pt" valign="top">
+     </td>
+    <td style="font-size: 10pt" valign="top">
+    Class template <code>basic_path</code> is replaced by <code>class path</code>. 
+    No workaround for an explicitly coded <code>basic_path</code> is provided, 
+    but see the next row - <code>path</code>.</td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>path.hpp</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>typedef basic_path<std::string, path_traits> path</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <code>class path</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>path.hpp</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>typedef basic_path<std::wstring, wpath_traits> wpath</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Removed; use </i><code>class path</code><i> instead. Workaround provides
+    </i><code>typedef path wpath</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>operations.hpp</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>initial_path()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>operations.hpp</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <p dir="ltr"><code>template <class Path><br>
+    Path complete(const Path& p,<br>
+ const Path& base=<br>
+   initial_path<Path>())</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <p dir="ltr"><code>path absolute(const path& p, const path& base=<br>
+  current_path())</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>operations.hpp</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>is_regular(file_status f)</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <p dir="ltr">
+    <code>is_regular_file(file_status f)</code></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>operations.hpp</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>symbolic_link_exists(const path& ph)</code></td>
+    <td style="font-size: 10pt" valign="top">
+     </td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class directory_entry</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>filename()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed, use </i><code>path().filename()</code><i> instead.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class directory_entry</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>leaf()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed, use </i><code>path().filename()</code><i> instead.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    <code>class directory_entry</code></td>
+    <td style="font-size: 10pt" valign="top">
+    <code>string()</code></td>
+    <td style="font-size: 10pt" valign="top">
+    ✔</td>
+    <td style="font-size: 10pt" valign="top">
+    <i>Function removed, use </i><code>path().string()</code><i> instead.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    Macro definitions</td>
+    <td style="font-size: 10pt" valign="top">
+    <code>BOOST_WINDOW_API</code></td>
+    <td style="font-size: 10pt" valign="top">
+     </td>
+    <td style="font-size: 10pt" valign="top">
+    <i>No longer supported; API selection is always automatic.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    Macro definitions</td>
+    <td style="font-size: 10pt" valign="top">
+    <code>BOOST_POSIX_API</code></td>
+    <td style="font-size: 10pt" valign="top">
+     </td>
+    <td style="font-size: 10pt" valign="top">
+    <i>No longer supported; API selection is always automatic.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    Macro definitions</td>
+    <td style="font-size: 10pt" valign="top">
+    <code>BOOST_WINDOW_PATH</code></td>
+    <td style="font-size: 10pt" valign="top">
+     </td>
+    <td style="font-size: 10pt" valign="top">
+    <i>No longer supported; native path format selection is always automatic.</i></td>
+  </tr>
+  <tr>
+    <td style="font-size: 10pt" valign="top">
+    Macro definitions</td>
+    <td style="font-size: 10pt" valign="top">
+    <code>BOOST_POSIX_PATH</code></td>
+    <td style="font-size: 10pt" valign="top">
+     </td>
+    <td style="font-size: 10pt" valign="top">
+    <i>No longer supported; native path format selection is always automatic.</i></td>
+  </tr>
+</table>
+
+<h2>Deprecation rationale</h2>
+<h3><code>initial_path</code> function</h3>
+<p dir="ltr">Full implementation of <code>initial_path()</code> would require 
+support from the C++ runtime startup code, and that doesn't seem likely to 
+happen. Depending on the user to call <code>initial_path()</code> at the 
+beginning of <code>main()</code> is too error prone.  An equivalent 
+function can trivially be provided by a user.</p>
+
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->29 December, 2014<!--webbot bot="Timestamp" endspan i-checksum="38652" --></p>
+
+<p>© Copyright Beman Dawes, 2002-2005, 2010</p>
+<p> Use, modification, and distribution are subject to the Boost Software 
+License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a></p>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/design.htm b/vendor/pdalboost/libs/filesystem/doc/design.htm
new file mode 100644
index 0000000..07977ca
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/design.htm
@@ -0,0 +1,353 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Boost Filesystem Library Design</title>
+<link href="styles.css" rel="stylesheet">
+</head>
+
+<body bgcolor="#FFFFFF">
+
+<h1>
+<img border="0" src="../../../boost.png" align="center" width="277" height="86">Filesystem 
+Library Design</h1>
+
+<p><a href="#Introduction">Introduction</a><br>
+<a href="#Requirements">Requirements</a><br>
+<a href="#Realities">Realities</a><br>
+<a href="#Rationale">Rationale</a><br>
+<a href="#Abandoned_Designs">Abandoned_Designs</a><br>
+<a href="#References">References</a></p>
+
+<h2><a name="Introduction">Introduction</a></h2>
+
+<p>The primary motivation for beginning work on the Filesystem Library was 
+frustration with Boost administrative tools.  Scripts were written in 
+Python, Perl, Bash, and Windows command languages.  There was no single 
+scripting language familiar and acceptable to all Boost administrators. Yet they 
+were all skilled C++ programmers - why couldn't C++ be used as the scripting 
+language?</p>
+
+<p>The key feature C++ lacked for script-like applications was the ability to 
+perform portable filesystem operations on directories and their contents. The 
+Filesystem Library was developed to fill that void.</p>
+
+<p>The intent is not to compete with traditional scripting languages, but to 
+provide a solution for situations where C++ is already the language 
+of choice..</p>
+
+<h2><a name="Requirements">Requirements</a></h2>
+<ul>
+  <li>Be able to write portable script-style filesystem operations in modern 
+  C++.<br>
+  <br>
+  Rationale: This is a common programming need. It is both an 
+  embarrassment and a hardship that this is not possible with either the current 
+  C++ or Boost libraries.  The need is particularly acute 
+  when C++ is the only toolset allowed in the tool chain.  File system 
+  operations are provided by many languages used on multiple platforms, 
+  such as Perl and Python, as well as by many platform specific scripting 
+  languages. All operating systems provide some form of API for filesystem 
+  operations, and the POSIX bindings are increasingly available even on 
+  operating systems not normally associated with POSIX, such as the Mac, z/OS, 
+  or OS/390.<br>
+ </li>
+  <li>Work within the <a href="#Realities">realities</a> described below.<br>
+  <br>
+  Rationale: This isn't a research project. The need is for something that works on 
+  today's platforms, including some of the embedded operating systems 
+  with limited file systems. Because of the emphasis on portability, such a 
+  library would be much more useful if standardized. That means being able to 
+  work with a much wider range of platforms that just Unix or Windows and their 
+  clones.<br>
+ </li>
+  <li>Avoid dangerous programming practices. Particularly, all-too-easy-to-ignore error notifications 
+  and use of global variables. If a dangerous feature is provided, identify it as such.<br>
+  <br>
+  Rationale: Normally this would be covered by "the usual Boost requirements...", 
+  but it is mentioned explicitly because the equivalent native platform and 
+  scripting language interfaces often depend on all-too-easy-to-ignore error 
+  notifications and global variables like "current 
+  working directory".<br>
+ </li>
+  <li>Structure the library so that it is still useful even if some functionality 
+  does not map well onto a given platform or directory tree. Particularly, much 
+  useful functionality should be portable even to flat 
+(non-hierarchical) filesystems.<br>
+  <br>
+  Rationale: Much functionality which does not 
+  require a hierarchical directory structure is still useful on flat-structure 
+  filesystems.  There are many systems, particularly embedded systems, 
+  where even very limited functionality is still useful.</li>
+</ul>
+<ul>
+  <li>Interface smoothly with current C++ Standard Library input/output 
+  facilities.  For example, paths should be 
+  easy to use in std::basic_fstream constructors.<br>
+  <br>
+  Rationale: One of the most common uses of file system functionality is to 
+  manipulate paths for eventual use in input/output operations.  
+  Thus the need to interface smoothly with standard library I/O.<br>
+ </li>
+  <li>Suitable for eventual standardization. The implication of this requirement 
+  is that the interface be close to minimal, and that great care be take 
+  regarding portability.<br>
+  <br>
+  Rationale: The lack of file system operations is a serious hole 
+  in the current standard, with no other known candidates to fill that hole. 
+  Libraries with elaborate interfaces and difficult to port specifications are much less likely to be accepted for 
+  standardization.<br>
+ </li>
+  <li>The usual Boost <a href="http://www.boost.org/more/lib_guide.htm">requirements and 
+  guidelines</a> apply.<br>
+ </li>
+  <li>Encourage, but do not require, portability in path names.<br>
+  <br>
+  Rationale: For paths which originate from user input it is unreasonable to 
+  require portable path syntax.<br>
+ </li>
+  <li>Avoid giving the illusion of portability where portability in fact does not 
+  exist.<br>
+  <br>
+  Rationale: Leaving important behavior unspecified or "implementation defined" does a 
+  great disservice to programmers using a library because it makes it appear 
+  that code relying on the behavior is portable, when in fact there is nothing 
+  portable about it. The only case where such under-specification is acceptable is when both users and implementors know from 
+  other sources exactly what behavior is required, yet for some reason it isn't 
+  possible to specify it exactly.</li>
+</ul>
+<h2><a name="Realities">Realities</a></h2>
+<ul>
+  <li>Some operating systems have a single directory tree root, others have 
+  multiple roots.<br>
+ </li>
+  <li>Some file systems provide both a long and short form of filenames.<br>
+ </li>
+  <li>Some file systems have different syntax for file paths and directory 
+  paths.<br>
+ </li>
+  <li>Some file systems have different rules for valid file names and valid 
+  directory names.<br>
+ </li>
+  <li>Some file systems (ISO-9660, level 1, for example) use very restricted 
+  (so-called 8.3) file names.<br>
+ </li>
+  <li>Some operating systems allow file systems with different 
+  characteristics to be "mounted" within a directory tree.  Thus a 
+  ISO-9660 or Windows 
+  file system may end up as a sub-tree of a POSIX directory tree.<br>
+ </li>
+  <li>Wide-character versions of directory and file operations are available on some operating 
+  systems, and not available on others.<br>
+ </li>
+  <li>There is no law that says directory hierarchies have to be specified in 
+  terms of left-to-right decent from the root.<br>
+ </li>
+  <li>Some file systems have a concept of file "version number" or "generation 
+  number".  Some don't.<br>
+ </li>
+  <li>Not all operating systems use single character separators in path names.  Some use 
+  paired notations. A typical fully-specified OpenVMS filename
+  might look something like this:<br>
+  <br>
+  <code>   DISK$SCRATCH:[GEORGE.PROJECT1.DAT]BIG_DATA_FILE.NTP;5<br>
+  </code><br>
+  The general OpenVMS format is:<br>
+  <br>
+     
+  <i>Device:[directories.dot.separated]filename.extension;version_number</i><br>
+ </li>
+  <li>For common file systems, determining if two descriptors are for same 
+  entity is extremely difficult or impossible.  For example, the concept of 
+  equality can be different for each portion of a path - some portions may be 
+  case or locale sensitive, others not. Case sensitivity is a property of the 
+  pathname itself, and not the platform. Determining collating sequence is even 
+  worse.<br>
+ </li>
+  <li>Race-conditions may occur. Directory trees, directories, files, and file attributes are in effect shared between all threads, processes, and computers which have access to the 
+  filesystem.  That may well include computers on the other side of the 
+  world or in orbit around the world. This implies that file system operations 
+  may fail in unexpected ways. For example:<br>
+  <br>
+  <code>     assert( exists("foo") == exists("foo") ); 
+  // may fail!<br>
+     assert( is_directory("foo") == is_directory("foo"); 
+  // may fail!<br>
+  </code><br>
+  In the first example, the file may have been deleted between calls to 
+  exists().  In the second example, the file may have been deleted and then 
+  replaced by a directory of the same name between the calls to is_directory().<br>
+ </li>
+  <li>Even though an application may be portable, it still will have to traffic 
+  in system specific paths occasionally; user provided input is a common 
+  example.<br>
+ </li>
+  <li><a name="symbolic-link-use-case">Symbolic</a> links cause canonical and 
+  normal form of some paths to represent different files or directories. For 
+  example, given the directory hierarchy <code>/a/b/c</code>, with a symbolic 
+  link in <code>/a</code> named <code>x</code>  pointing to <code>b/c</code>, 
+  then under POSIX Pathname Resolution rules a path of <code>"/a/x/.."</code> 
+  should resolve to <code>"/a/b"</code>. If <code>"/a/x/.."</code> were first 
+  normalized to <code>"/a"</code>, it would resolve incorrectly. (Case supplied 
+  by Walter Landry.)</li>
+</ul>
+
+<h2><a name="Rationale">Rationale</a></h2>
+
+<p>The <a href="#Requirements">Requirements</a> and <a href="#Realities">
+Realities</a> above drove much of the C++ interface design.  In particular, 
+the desire to make script-like code straightforward caused a great deal of 
+effort to go into ensuring that apparently simple expressions like <i>exists( "foo" 
+)</i> work as expected.</p>
+
+<p>See the <a href="faq.htm">FAQ</a> for the rationale behind many detailed 
+design decisions.</p>
+
+<p>Several key insights went into the <i>path</i> class design:</p>
+<ul>
+  <li>Decoupling of the input formats, internal conceptual (<i>vector<string></i> 
+  or other sequence) 
+  model, and output formats.</li>
+  <li>Providing two input formats (generic and O/S specific) broke a major 
+  design deadlock.</li>
+  <li>Providing several output formats solved another set of previously 
+  intractable problems.</li>
+  <li>Several non-obvious functions (particularly decomposition and composition) 
+  are required to support portable code. (Peter Dimov, Thomas Witt, Glen 
+  Knowles, others.)</li>
+</ul>
+
+<p>Error checking was a particularly difficult area. One key insight was that 
+with file and directory names, portability isn't a universal truth.  
+Rather, the programmer must think out the question "What operating systems do I 
+want this path to be portable to?"  By providing support for several 
+answers to that question, the Filesystem Library alerts programmers of the need 
+to ask it in the first place.</p>
+<h2><a name="Abandoned_Designs">Abandoned Designs</a></h2>
+<h3>operations.hpp</h3>
+<p>Dietmar K�hl's original dir_it design and implementation supported 
+wide-character file and directory names. It was abandoned after extensive 
+discussions among Library Working Group members failed to identify portable 
+semantics for wide-character names on systems not providing native support. See
+<a href="faq.htm#wide-character_names">FAQ</a>.</p>
+<p>Previous iterations of the interface design used explicitly named functions providing a 
+large number of convenience operations, with no compile-time or run-time 
+options. There were so many function names that they were very confusing to use, 
+and the interface was much larger. Any benefits seemed theoretical rather than 
+real. </p>
+<p>Designs based on compile time (rather than runtime) flag and option selection 
+(via policy, enum, or int template parameters) became so complicated that they 
+were abandoned, often after investing quite a bit of time and effort. The need 
+to qualify attribute or option names with namespaces, even aliases, made use in 
+template parameters ugly; that wasn't fully appreciated until actually writing 
+real code.</p>
+<p>Yet another set of convenience functions ( for example, <i>remove</i> with 
+permissive, prune, recurse, and other options, plus predicate, and possibly 
+other, filtering features) were abandoned because the details became both 
+complex and contentious.</p>
+
+<p>What is left is a toolkit of low-level operations from which the user can 
+create more complex convenience operations, plus a very small number of 
+convenience functions which were found to be useful enough to justify inclusion.</p>
+
+<h3>path.hpp</h3>
+
+<p>There were so many abandoned path designs, I've lost track. Policy-based 
+class templates in several flavors, constructor supplied runtime policies, 
+operation specific runtime policies, they were all considered, often 
+implemented, and ultimately abandoned as far too complicated for any small 
+benefits observed.</p>
+
+<p>Additional design considerations apply to <a href="v3_design.html">Internationalization</a>. </p>
+
+<h3>error checking</h3>
+
+<p>A number of designs for the error checking machinery were abandoned, some 
+after experiments with implementations. Totally automatic error checking was 
+attempted in particular. But automatic error checking tended to make the overall 
+library design much more complicated.</p>
+
+<p>Some designs associated error checking mechanisms with paths.  Some with 
+operations functions.  A policy-based error checking template design was 
+partially implemented, then abandoned as too complicated for everyday 
+script-like programs.</p>
+
+<p>The final design, which depends partially on explicit error checking function 
+calls,  is much simpler and straightforward, although it does depend to 
+some extent on programmer discipline.  But it should allow programmers who 
+are concerned about portability to be reasonably sure that their programs will 
+work correctly on their choice of target systems.</p>
+
+<h2><a name="References">References</a></h2>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
+  <tr>
+    <td width="13%" valign="top">[<a name="IBM-01">IBM-01</a>]</td>
+    <td width="87%">IBM Corporation, <i>z/OS V1R3.0 C/C++ Run-Time 
+Library Reference</i>, SA22-7821-02, 2001,
+<a href="http://www-1.ibm.com/servers/eserver/zseries/zos/bkserv/">
+    www-1.ibm.com/servers/eserver/zseries/zos/bkserv/</a></td>
+  </tr>
+  <tr>
+    <td width="13%" valign="top">[<a name="ISO-9660">ISO-9660</a>]</td>
+    <td width="87%">International Standards Organization, 1988</td>
+  </tr>
+  <tr>
+    <td width="13%" valign="top">[<a name="Kuhn">Kuhn</a>]</td>
+    <td width="87%">UTF-8 and Unicode FAQ for Unix/Linux,
+<a href="http://www.cl.cam.ac.uk/~mgk25/unicode.html">
+    www.cl.cam.ac.uk/~mgk25/unicode.html</a></td>
+  </tr>
+  <tr>
+    <td width="13%" valign="top">[<a name="MSDN">MSDN</a>] </td>
+    <td width="87%">Microsoft Platform SDK for Windows, Storage Start 
+Page,
+<a href="http://msdn.microsoft.com/library/en-us/fileio/base/storage_start_page.asp">
+    msdn.microsoft.com/library/en-us/fileio/base/storage_start_page.asp</a></td>
+  </tr>
+  <tr>
+    <td width="13%" valign="top">[<a name="POSIX-01">POSIX-01</a>]</td>
+    <td width="87%">IEEE Std 1003.1-2001, ISO/IEC 9945:2002, and The Open Group Base Specifications, Issue 6. Also known as The 
+    Single Unix<font face="Times New Roman">� Specification, Version 3. 
+    Available from each of the organizations involved in its creation. For 
+    example, read online or download from
+    <a href="http://www.unix.org/single_unix_specification/">
+    www.unix.org/single_unix_specification/</a>.</font> The ISO JTC1/SC22/WG15 - POSIX 
+homepage is <a href="http://www.open-std.org/jtc1/sc22/WG15/">
+    www.open-std.org/jtc1/sc22/WG15/</a></td>
+  </tr>
+  <tr>
+    <td width="13%" valign="top">[<a name="URI">URI</a>]</td>
+    <td width="87%">RFC-2396, Uniform Resource Identifiers (URI): Generic 
+Syntax, <a href="http://www.ietf.org/rfc/rfc2396.txt">
+    www.ietf.org/rfc/rfc2396.txt</a></td>
+  </tr>
+  <tr>
+    <td width="13%" valign="top">[<a name="UTF-16">UTF-16</a>]</td>
+    <td width="87%">Wikipedia, UTF-16,
+<a href="http://en.wikipedia.org/wiki/UTF-16">
+    en.wikipedia.org/wiki/UTF-16</a></td>
+  </tr>
+  <tr>
+    <td width="13%" valign="top">[<a name="Wulf-Shaw-73">Wulf-Shaw-73</a>]</td>
+    <td width="87%">William Wulf, Mary Shaw, <i>Global 
+Variable Considered Harmful</i>, ACM SIGPLAN Notices, 8, 2, 1973, pp. 23-34</td>
+  </tr>
+</table>
+
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->26 December, 2014<!--webbot bot="Timestamp" endspan i-checksum="38646" --></p>
+
+<p>© Copyright Beman Dawes, 2002</p>
+<p> Use, modification, and distribution are subject to the Boost Software 
+License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
+LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a>)</p>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/do_list.html b/vendor/pdalboost/libs/filesystem/doc/do_list.html
new file mode 100644
index 0000000..b6fc3eb
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/do_list.html
@@ -0,0 +1,146 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Do List</title>
+<style type="text/css">
+  body    { font-family: sans-serif; margin: 1em; }
+  p, td, li, blockquote { font-size: 10pt; }
+  pre     { font-size: 9pt; }
+</style>
+</head>
+
+<body>
+
+<h1>Boost Filesystem Do List<br>
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->24 June 2010<!--webbot bot="Timestamp" endspan i-checksum="17552" --></h1>
+
+<h2>Beta 1 comments</h2>
+<ul>
+  <li dir="ltr">
+
+<p dir="ltr">Zach Laine:</li>
+</ul>
+<blockquote>
+  <pre dir="ltr">The descriptions for portable_name() and portable_directory_name()
+appear to be at odds.
+
+portable_name() : ... && (name is "." or "..", and the first character
+not a period or hyphen)
+
+portable_directory_name(): ... && (name is "." or ".."  or contains no periods)
+
+Should portable_name() be "... && (name is "." or "..", or contains no
+periods) && (first character not a hyphen)"?  Maybe I'm missing
+something?</pre>
+</blockquote>
+<ul>
+  <li dir="ltr">
+<p dir="ltr">Scott McMurray - treat as Wish List:</li>
+</ul>
+<blockquote>
+  <pre dir="ltr">- uncomplete(p, base)
+
+My pet request.  It may be useful to simplify other functions as well,
+since there's no current way to go from an absolute path to a relative
+one, meaning that most functions need to handle relative ones even
+when that might not be natural.  With this functionality,
+preconditions requiring absolute paths would be less onerous.
+
+   Precondition: p.is_absolute() && base.is_absolute()
+
+   Effects: Extracts a path, rp, from p relative to base such that
+canonical(p) == complete(rp, base).  Any ".." path elements in rp form
+a prefix.
+
+   Returns: The extracted path.
+
+   Postconditions: For the returned path, rp, rp.is_relative() ==
+(p.root_name() == b.root_name()).
+
+[Notes: This function simplifies paths by omitting context.  It is
+particularly useful for serializing paths such that it can be usefully
+moved between hosts where the context may be different, such as inside
+source control trees.  It can also be helpful for display to users,
+such as in shells where paths are often shown relative to $HOME.
+
+In the presence of symlinks, the result of this function may differ
+between implementations, as some may expand symlinks that others may
+not.  The simplest implementation uses canonical to expand both p and
+base, then removes the common prefix and prepends the requisite ".."
+elements.  Smarter implementations will avoid expanding symlinks
+unnecessarily.  No implementation is expected to discover new symlinks
+to return paths with fewer elements.]</pre>
+</blockquote>
+<h2 dir="ltr">Docs</h2>
+<ul>
+  <li>Reorganize files - delete examples that no longer apply.</li>
+  <li>Should minimal.css be changed to used relative font sizes? See
+  <a href="http://www.w3schools.com/CSS/pr_font_font-size.asp/">http://www.w3schools.com/CSS/pr_font_font-size.asp\</a></li>
+  <li>Document behavior of path::replace_extension has change WRT argument w/o a 
+  dot.</li>
+  <li style="font-size: 10pt">Document leading //: no longer treated specially. 
+  But is that really correct?</li>
+  <li style="font-size: 10pt">Behavior of root_path() has been changed. Change 
+  needs to be propagated to trunk?</li>
+  <li style="font-size: 10pt">Regenerate path decomposition table.</li>
+</ul>
+
+<h2>Code</h2>
+<h3>All</h3>
+<ul>
+  <li style="font-size: 10pt">Move semantics.</li>
+  <li style="font-size: 10pt">Use BOOST_DELETED, BOOST_DEFAULTED, where 
+  appropriate.</li>
+  <li style="font-size: 10pt">Other C++0x features.</li>
+</ul>
+<h3>Class path</h3>
+<ul>
+  <li>Windows, POSIX, conversions for char16_t, char32_t for C++0x compilers.</li>
+  <li>Add Windows Alternate Data Stream test cases. See http://en.wikipedia.org/wiki/NTFS 
+  Features.</li>
+  <li>Add test case: relational operators on paths differing only in trailing 
+  separator. Rationale?</li>
+  <li>Provide the name check functions for more character types? Templatize? 
+  take a path argument?</li>
+  <li style="font-size: 10pt">Add codepage 936/950/etc test cases.</li>
+  <li style="font-size: 10pt">Should UDT's be supported?</li>
+  <li style="font-size: 10pt">Should path iteration to a separator result in:<br>
+  -- the actual separator used<br>
+  -- the preferred separator<br>
+  -- the generic separator <-- makes it easier to write portable code<br>
+  -- a dot</li>
+</ul>
+<h3>Operations</h3>
+<ul>
+  <li>Would complete(), system_complete() be clearer if renamed absolute(), 
+  absolute_system() (or absolute_native())?</li>
+  <li>Review all operations.cpp code for race conditions similar to #2925. Fix 
+  or document.</li>
+  <li>Enable all BOOST_FILESYSTEM_NO_DEPRECATED code.</li>
+  <li>rename and remove names are problems. If users says "using 
+  namespace boost::filesystem"<br>
+  and some header included stdio, there is just too much chance of silent error.</li>
+  <li>create_directories error handling needs work.</li>
+  <li>Fold convenience.hpp into operations.hpp</li>
+  <li>Two argument recursive_directory_iterator ctor isn't recognizing throws(). 
+  Would it be better to fold into a single two argument ctor with default?</li>
+  <li>Add the push_directory class from tools/release/required_files.cpp</li>
+</ul>
+
+<h3>Miscellaneous</h3>
+<ul>
+  <li style="font-size: 10pt"><i>Regular</i> classes need hash functions.</li>
+</ul>
+
+<hr>
+<p>© Copyright Beman Dawes, 2010</p>
+<p>Distributed under the Boost Software License, Version 1.0. See
+<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a></p>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/faq.htm b/vendor/pdalboost/libs/filesystem/doc/faq.htm
new file mode 100644
index 0000000..ec177c2
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/faq.htm
@@ -0,0 +1,148 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Filesystem FAQ</title>
+<link href="styles.css" rel="stylesheet">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td width="277">
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem FAQ</font>
+    </td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="index.htm">Home</a>   
+    <a href="tutorial.html">Tutorial</a>   
+    <a href="reference.html">Reference</a>   
+    <a href="faq.htm">FAQ</a>   
+    <a href="release_history.html">Releases</a>   
+    <a href="portability_guide.htm">Portability</a>   
+    <a href="v3.html">V3 Intro</a>   
+    <a href="v3_design.html">V3 Design</a>   
+    <a href="deprecated.html">Deprecated</a>   
+    <a href="issue_reporting.html">Bug Reports </a>  
+    </td>
+</table>
+
+<h1>
+Frequently Asked Questions</h1>
+<h2>General questions</h2>
+<p><b>Why not support a  concept of specific kinds of file systems, such as posix_file_system or windows_file_system.</b></p>
+<p>Portability is one of the most important requirements for the 
+library. Features specific to a particular operating system or file system 
+can always be accessed by using the operating system's API.</p>
+
+<h2>
+Class <code><font size="6">path</font></code> questions </h2>
+<p><b>Why base the generic pathname format on POSIX?</b></p>
+<p><a href="design.htm#POSIX-01">POSIX</a> is an ISO Standard. It is the basis for the most familiar 
+pathname formats, 
+not just for POSIX-based operating systems but also for Windows  and the 
+URL portion of URI's. It is ubiquitous and 
+familiar.  On many systems, it is very easy to implement because it is 
+either the native operating system format (Unix and Windows) or via a 
+operating system supplied 
+POSIX library (z/OS, OS/390, and many more.)</p>
+<p><b>Why not use a full URI (Universal Resource Identifier) based path?</b></p>
+<p><a href="design.htm#URI">URI's</a> would promise more than the Filesystem Library can actually deliver, 
+since URI's extend far beyond what most operating systems consider a file or a 
+directory.  Thus for the primary "portable script-style file system 
+operations" requirement of the Filesystem Library, full URI's appear to be over-specification.</p>
+<p><b>Why isn't <i>path</i> a base class with derived <i>directory_path</i> and
+<i>file_path</i> classes?</b></p>
+<p>Why bother?  The behavior of all three classes is essentially identical. 
+Several early versions did require users to identify each path as a file or 
+directory path, and this seemed to increase coding errors and decrease code 
+readability. There was no apparent upside benefit.</p>
+<p><b>Why do path decomposition functions yielding a single element return a 
+path rather than a string?</b></p>
+<p>Interface simplicity. If they returned strings, flavors would be needed for
+<code>string</code>, <code>wstring</code>, <code>u16string</code>, <code>
+u32string</code>, and generic strings.</p>
+<p><b>Why don't path member functions have overloads with error_code& arguments?</b></p>
+<p>They have not been requested by users; the need for error reporting via 
+error_code seems limited to operations failures rather than path failures.</p>
+<h2>Operations function questions</h2>
+<p><b>Why not supply a 'handle' type, and let the file and directory operations 
+traffic in it?</b></p>
+<p>It isn't clear there is any feasible way to meet the "portable script-style 
+file system operations" requirement with such a system. File systems exist where operations are usually performed on 
+  some non-string handle type. The classic Mac OS has been mentioned explicitly as a case where 
+trafficking in paths isn't always natural.    </p>
+<p>The case for the "handle" (opaque data type to identify a file) 
+style may be strongest for directory iterator value type.  (See Jesse Jones' Jan 28, 
+2002, Boost postings). However, as class path has evolved, it seems sufficient 
+even as the directory iterator value type.</p>
+<p><b>Why are the operations functions so low-level?</b></p>
+<p>To provide a toolkit from which higher-level functionality can be created.</p>
+<p>An 
+extended attempt to add convenience functions on top of, or as a replacement 
+for, the low-level functionality failed because there is no widely acceptable 
+set of simple semantics for most convenience functions considered.  
+Attempts to provide alternate semantics via either run-time options or 
+compile-time polices became overly complicated in relation to the value 
+delivered, or became contentious.  OTOH, the specific functionality needed for several trial 
+applications was very easy for the user to construct from the lower-level 
+toolkit functions.  See <a href="design.htm#Abandoned_Designs">Failed 
+Attempts</a>.</p>
+<p><b>Isn't it inconsistent then to provide a few convenience functions?</b></p>
+<p>Yes, but experience with both this library, POSIX, and Windows, indicates 
+the utility of certain convenience functions, and that it is possible to provide 
+simple, yet widely acceptable, semantics for them. For example, <code>remove_all()</code>.</p>
+<p><b>Why are there directory_iterator overloads for operations.hpp 
+predicate functions? Isn't two ways to do the same thing poor design?</b></p>
+<p>Yes, two ways to do the same thing is often a poor design practice. But the 
+iterator versions are often much more efficient. Calling status() during 
+iteration over a directory containing 15,000 files took 6 seconds for the path 
+overload, and 1 second for the iterator overload, for tests on a freshly booted 
+machine. Times were .90 seconds and .30 seconds, for tests after prior use of 
+the directory. This performance gain is large enough to justify deviating from 
+preferred design practices. Neither overload alone meets all needs.</p>
+<p><b>Why are the operations functions so picky about errors?</b></p>
+<p>Safety. The default is to be safe rather than sorry. This is particularly 
+important given the reality that on many computer systems files and directories 
+are globally shared resources, and thus subject to 
+race conditions.</p>
+<p><b>Why are attributes accessed via named functions rather than property maps?</b></p>
+<p>For  commonly used attributes (existence, directory or file, emptiness), 
+simple syntax and guaranteed presence outweigh other considerations. Because 
+access to many other attributes is inherently system dependent, 
+property maps are viewed as the best hope for access and modification, but it is 
+better design to provide such functionality in a separate library. (Historical 
+note: even the apparently simple attribute "read-only" turned out to be so 
+system depend as to be disqualified as a "guaranteed presence" operation.)</p>
+<p><b>Why isn't automatic name portability error detection provided?</b></p>
+<p>A number (at least six) of designs for  name validity error 
+detection were evaluated, including at least four complete implementations.  
+While the details for rejection differed, all of the more powerful name validity checking 
+designs distorted other 
+otherwise simple aspects of the library. Even the simple name checking provided 
+in prior library versions was a constant source of user complaints. While name checking can be helpful, it 
+isn't important enough to justify added a lot of additional complexity.</p>
+<p><b>Why are paths sometimes manipulated by member functions and sometimes by 
+non-member functions?</b></p>
+<p>The design rule is that purely lexical operations are supplied as <i>class 
+path</i> member 
+functions, while operations performed by the operating system are provided as 
+free functions.</p>
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->29 December, 2014<!--webbot bot="Timestamp" endspan i-checksum="38652" --></p>
+<p>© Copyright Beman Dawes, 2002</p>
+<p> Use, modification, and distribution are subject to the Boost Software 
+License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a></p>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/index.htm b/vendor/pdalboost/libs/filesystem/doc/index.htm
new file mode 100644
index 0000000..c050948
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/index.htm
@@ -0,0 +1,456 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Filesystem Home</title>
+<link href="styles.css" rel="stylesheet">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111">
+  <tr>
+    <td width="277">
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle"
+ width="300" height="86" border="0"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem Library<br>
+    Version 3</font>
+    </td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="index.htm">Home</a>   
+    <a href="tutorial.html">Tutorial</a>   
+    <a href="reference.html">Reference</a>   
+    <a href="faq.htm">FAQ</a>   
+    <a href="release_history.html">Releases</a>   
+    <a href="portability_guide.htm">Portability</a>   
+    <a href="v3.html">V3 Intro</a>   
+    <a href="v3_design.html">V3 Design</a>   
+    <a href="deprecated.html">Deprecated</a>   
+    <a href="issue_reporting.html">Bug Reports</a>  
+    </td>
+</table>
+<p></p>
+<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" align="right">
+  <tr>
+    <td width="100%" bgcolor="#D7EEFF" align="center">
+      <i><b>Contents</b></i></td>
+  </tr>
+  <tr>
+    <td width="100%" bgcolor="#E8F5FF">
+    <a href="#Introduction">Introduction</a><br>
+    <a href="#Documentation">Documentation</a><br>
+    <a href="#Using">Using the library</a><br>
+    <a href="#Coding-guidelines">Coding guidelines</a><br>
+    <a href="#Cautions">Cautions</a><br>
+    <a href="#Headers">Headers</a><br>
+    <a href="#Examples">Example programs</a><br>
+    <a href="#Implementation">Implementation</a><br>
+    <a href="#Macros">Macros</a><br>
+    <a href="#Building">Building the object-library</a><br>
+    <a href="#Cgywin">Notes for Cygwin users</a><br>
+    <a href="#Change-history">Version history<br>
+  with acknowledgements</a></td>
+  </tr>
+  </table>
+<p></p>
+<h2><a name="Introduction">Introduction</a></h2>
+<p>The Boost.Filesystem library provides facilities to manipulate files and directories, 
+and the paths that identify them.</p>
+
+<p>The features of the library include:</p>
+
+<ul>
+  <li><b>A modern C++ interface, highly compatible with the C++ standard 
+  library.</b></li>
+</ul>
+<blockquote>
+  <blockquote>
+
+<p>Many users say the interface is their primary motivation for using 
+Boost.Filesystem. They like its use of familiar idioms based on standard library 
+containers, iterators, and algorithms. They like having errors reported by 
+throwing exceptions.</p>
+
+  </blockquote>
+</blockquote>
+<ul>
+  <li><b>Portability between operating systems.</b><br>
+ <ul>
+    <li>At the C++ syntax level, it is convenient to learn and use one interface 
+    regardless of the operating system.</li>
+    <li>At the semantic level, behavior of code is reasonably portable across 
+    operating systems.</li>
+    <li>Dual generic or native path format support encourages program 
+    portability, yet still allows communication with users in system specific 
+    formats.<br>
+ </li>
+  </ul>
+  </li>
+  <li><b>Error handling and reporting via C++ exceptions (the default) or error 
+  codes.</b><br>
+ <ul>
+    <li>C++ exceptions are the preferred error reporting mechanism for most 
+    applications. The exception thrown includes the detailed error code 
+    information important for diagnosing the exact cause of file system errors.</li>
+    <li>Error reporting via error code allows user code that provides detailed 
+    error recovery to avoid becoming so littered with try-catch blocks as to be 
+    unmaintainable. <br>
+ </li>
+  </ul>
+  </li>
+  <li><b>Suitable for a broad spectrum of applications, ranging from simple 
+  script-like operations to extremely complex production code.</b><br>
+ <ul>
+    <li>At the simple script-like end of the spectrum, the intent is not to 
+    compete with Python, Perl, or shell languages, but rather to provide 
+    filesystem operations when C++ is already the language of choice.</li>
+    <li dir="ltr">
+    <p dir="ltr">Finer grained control over operations and error handling is available to 
+    support more complex applications or other cases where throwing exceptions 
+    isn't desired.<br>
+ </li>
+  </ul>
+  </li>
+  <li>
+  <p dir="ltr"><b>Forms the basis for
+  <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4100.pdf">
+  ISO/IEC TS 18822</a>, the C++ standard library Filesystem Technical 
+  Specification.</b></li>
+</ul>
+
+<h2><a name="Documentation">Documentation</a></h2>
+
+<p><b><a href="tutorial.html">Tutorial</a></b> - A gentle introduction to 
+the library, with example programs provided for you to experiment with.</p>
+
+<p><b><a href="reference.html">Reference</a></b> - Formal documentation in the 
+style of the C++ standard for 
+every component of the library.</p>
+
+<p><b><a href="faq.htm">FAQ</a></b> - Frequently asked questions.</p>
+
+<p><b><a href="portability_guide.htm">Portability Guide</a></b> - Help for those 
+concerned with writing code to run on multiple operating systems.</p>
+
+<p><b><a href="deprecated.html">Deprecated Features</a></b> - Identifies 
+deprecated features and their replacements.</p>
+
+<p><b><a href="v3.html">Version 3 Introduction</a></b> - Aimed at users of prior 
+Boost.Filesystem versions.</p>
+
+<p><b><a href="v3_design.html">Version 3 Design</a></b> - Historical document 
+from the start of the Version 3 design process.</p>
+
+<p><b><a href="design.htm">Original Design</a></b> - Historical document from 
+the start of the Version 1 design process.</p>
+
+<p><b><a href="do_list.html">Do List</a></b> - Boost.Filesystem development work 
+in the pipeline.</p>
+
+<h2><a name="Using">Using</a> the library</h2>
+<p>Boost.Filesystem is implemented as a separately compiled library, so  you must install 
+binaries in a location that can be found by your linker. If you followed the 
+<a href="http://www.boost.org/doc/libs/release/more/getting_started/index.html">Boost Getting Started</a> instructions, that's already been done for you.</p>
+<h2><a name="Coding-guidelines">Coding guidelines</a></h2>
+<p>For new code, defining <code>BOOST_FILESYSTEM_NO_DEPRECATED</code> before 
+including filesystem headers is strongly recommended. This prevents inadvertent 
+use of old features, particularly legacy function names, that have been replaced 
+and are going to go away in the future.</p>
+<h2><a name="Cautions">Cautions</a></h2>
+<p>After reading the tutorial you can dive right into  simple, 
+script-like programs using the Filesystem Library! Before doing any serious 
+work, however, there a few cautions to be aware of:</p>
+<h4><b>Effects and Postconditions not guaranteed in the presence of race-conditions</b></h4>
+<p>Filesystem function specifications follow the C++ Standard Library form, specifying behavior in terms of 
+effects and postconditions. If 
+a <a href="reference.html#Race-condition">race-condition</a> exists, a function's 
+postconditions may no longer be true by the time the function returns to the 
+caller.</p>
+<blockquote>
+<p><b><i>Explanation: </i></b>The state of files and directories is often
+globally shared, and thus may be changed unexpectedly by other threads, 
+processes, or even other computers having network access to the filesystem. As an 
+example of the difficulties this can cause, note that the following asserts 
+may fail:</p>
+<blockquote>
+<p><code>assert( exists( "foo" ) == exists( "foo" ) );  // 
+(1)<br>
+<br>
+remove_all( "foo" );<br>
+assert( !exists( "foo" ) );  // (2)<br>
+<br>
+assert( is_directory( "foo" ) == is_directory( "foo" ) ); // 
+(3)</code></p>
+</blockquote>
+<p>(1) will fail if a non-existent "foo" comes into existence, or an 
+existent "foo" is removed, between the first and second call to <i>exists()</i>. 
+This could happen if, during the execution of the example code, another thread, 
+process, or computer is also performing operations in the same directory.</p>
+<p>(2) will fail if between the call to <i>remove_all()</i> and the call to
+<i>exists()</i> a new file or directory named "foo" is created by another 
+thread, process, or computer.</p>
+<p>(3) will fail if another thread, process, or computer removes an 
+existing file "foo" and then creates a directory named "foo", between the 
+example code's two calls to <i>is_directory()</i>.</p>
+</blockquote>
+<h4>E<b>xceptions</b></h4>
+<p>Unless otherwise specified, Boost.Filesystem functions throw <i>
+<a href="reference.html#basic_filesystem_error-constructors">basic_filesystem_error</a></i> 
+exceptions to report failures such as I/O errors. Implementations may also use C++ Standard Library functions 
+which can throw <i>std::bad_alloc </i>exceptions to report memory allocation 
+errors. These exceptions may be thrown even 
+though the error condition leading to the exception is not explicitly specified 
+in the function's "Throws" paragraph.</p>
+<p>Nominally non-throwing versions are provided for
+<a href="reference.html#Operational-functions">operational functions</a> that 
+access the external file system, since these are often used 
+in contexts where error codes may be the preferred way to report an error. Even 
+the nominally non-throwing versions of functions will throw <i>std::bad_alloc </i>
+exceptions to report memory allocation errors. However, functions marked <code>
+noexcept</code> never throw exceptions.</p>
+
+<h2><a name="Headers">Headers</a></h2>
+
+<p>The Boost.Filesystem library provides several headers:</p>
+
+<ul>
+  <li>Header <<a href="../../../boost/filesystem.hpp">boost/filesystem.hpp</a>> 
+  provides access to all features of the library, except file streams.<br>
+ </li>
+  <li>Header <<a href="../../../boost/filesystem/fstream.hpp">boost/filesystem<i>/</i>fstream.hpp</a>> 
+  inherits the same components as the C++ Standard 
+  Library's <i>fstream</i> header, but files are identified by <code>const path&</code> 
+  arguments rather that <code>const char*</code> arguments.</li>
+</ul>
+<h2><a name="Examples">Example programs</a></h2>
+<p>See the <a href="tutorial.html">tutorial</a> for example programs.</p>
+<h2><a name="Implementation">Implementation</a></h2>
+<p>The current implementation supports operating systems which provide 
+the POSIX or Windows API's.</p>
+<p>The library is in regular use on Apple  OS X, HP-UX, IBM AIX, Linux, 
+Microsoft Windows, SGI IRIX, and Sun Solaris operating systems using a variety 
+of compilers. It is also used by several smart phone operating systems.</p>
+<h2><a name="Macros">Macros</a></h2>
+<p>Users may defined the following macros if desired. Sensible defaults are 
+provided, so users can ignore these macros unless they have special needs.</p>
+<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td><b><i>Macro Name</i></b></td>
+    <td><b><i>Default</i></b></td>
+    <td><b><i>Effect if defined</i></b></td>
+  </tr>
+  <tr>
+    <td valign="top"><code>BOOST_FILESYSTEM_NO_DEPRECATED</code></td>
+    <td valign="top">Not defined.</td>
+    <td valign="top">Deprecated features are excluded from headers.</td>
+  </tr>
+  <tr>
+    <td valign="top"><code>BOOST_FILESYSTEM_DYN_LINK</code></td>
+    <td valign="top">Defined if <code>BOOST_ALL_DYN_LINK</code> is defined, 
+    otherwise not defined.</td>
+    <td valign="top">The Boost.Filesystem library is dynamically linked. If not defined, 
+    static linking is assumed.</td>
+  </tr>
+  <tr>
+    <td valign="top"><code>BOOST_FILESYSTEM_NO_LIB</code></td>
+    <td valign="top">Defined if <code>BOOST_ALL_NO_LIB</code> is defined, 
+    otherwise not defined.</td>
+    <td valign="top">Boost.Filesystem library does not use the Boost auto-link 
+    facility.</td>
+  </tr>
+  </table>
+<p>User-defined BOOST_POSIX_API and BOOST_WINDOWS_API macros are no longer 
+supported.</p>
+<h2><a name="Building">Building</a> the object-library</h2>
+<p>The object-library will  be built automatically if you are using the Boost 
+build system. See
+<a href="../../../more/getting_started.html">Getting Started</a>. It can also be 
+built manually using a <a href="../build/Jamfile.v2">Jamfile</a> 
+supplied in directory libs/filesystem/build, or the user can construct an IDE 
+project or make file which includes the object-library source files.</p>
+<p>The object-library source files are 
+supplied in the <a href="../src">src directory</a>. These source files implement the 
+library for POSIX or Windows compatible operating systems; no implementation is 
+supplied for other operating systems. Note that many operating systems not 
+normally thought of as POSIX  systems, such as mainframe legacy 
+operating systems or embedded operating systems, support POSIX compatible file 
+systems and so will work with the Filesystem Library.</p>
+<p>The object-library can be built for static or dynamic (shared/dll) linking. 
+This is controlled by the BOOST_ALL_DYN_LINK or BOOST_FILESYSTEM_DYN_LINK 
+macros. See the <a href="http://www.boost.org/development/separate_compilation.html">Separate 
+Compilation</a> page for a description of the techniques used.</p>
+<h3>Note for <a name="Cgywin">Cygwin</a> users</h3>
+<p> <a href="http://www.cygwin.com/">Cygwin</a> version 1.7 or later is 
+required because only versions of GCC with wide character strings are supported.</p>
+
+<p> The library's implementation code treats Cygwin as a Windows platform, and 
+thus uses the Windows API and uses Windows path syntax as the native path 
+syntax.</p>
+
+<h2><a name="Change-history">Version history</a></h2>
+
+<h3>Version 4</h3>
+
+<p><b>Under development </b>- Add support for the
+<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4099.html">ISO 
+C++ File System Technical Specification</a>. The Filesystem TS is based on 
+Boost.Filesystem Version 3, with only a small number of changes. Most user code 
+written for Version 3 should work unchanged with Version 4.</p>
+
+<h3>Version 3</h3>
+
+<p>Boost 1.44.0 - June, 2010 - Internationalization via single class <code>path</code>. 
+More uniform error handling.</p>
+
+<p>Peter Dimov suggested use of a single path class rather than a <code>basic_path</code> 
+class template. That idea was the basis for the Version 3 redesign.</p>
+
+<p>Thanks for comments from Robert Stewart, Zach Laine, Peter Dimov, Gregory 
+Peele, Scott McMurray, John Bytheway, Jeff Flinn, Jeffery Bosboom.</p>
+
+<h3>Version 2</h3>
+
+<p>Boost 1.34.0 - May, 2007 - Internationalization via <code>basic_path</code> 
+template.</p>
+
+<p>So many people have contributed comments and bug reports that it isn't any 
+longer possible to acknowledge them individually. That said, Peter Dimov and Rob 
+Stewart need to be specially thanked for their many constructive criticisms and 
+suggestions. Terence 
+Wilson and Chris Frey contributed timing programs which helped illuminate 
+performance issues.</p>
+
+<h3>Version 1</h3>
+
+<p>Boost 1.30.0 - March, 2003 - Initial official Boost release.</p>
+
+<p>The Filesystem Library was designed and implemented by Beman Dawes. The 
+original <i>directory_iterator</i> and <i>filesystem_error</i> classes were 
+based on prior work from Dietmar Kuehl, as modified by Jan Langer. Thomas Witt 
+was a particular help in later stages of initial development. Peter Dimov and 
+Rob Stewart made many useful suggestions and comments over a long period of 
+time. Howard Hinnant helped with internationalization issues.</p>
+
+<p>Key <a href="design.htm#Requirements">design requirements</a> and
+<a href="design.htm#Realities">design realities</a> were developed during 
+extensive discussions on the Boost mailing list, followed by comments on the 
+initial implementation. Numerous helpful comments were then received during the 
+Formal Review.<p>Participants included 
+Aaron Brashears,
+Alan Bellingham,
+Aleksey Gurtovoy,
+Alex Rosenberg,
+Alisdair Meredith,
+Andy Glew,
+Anthony Williams,
+Baptiste Lepilleur, 
+Beman Dawes,
+Bill Kempf,
+Bill Seymour, 
+Carl Daniel,
+Chris Little,
+Chuck Allison,
+Craig Henderson, 
+Dan Nuffer,
+Dan'l Miller,
+Daniel Frey, 
+Darin Adler, 
+David Abrahams,
+David Held, 
+Davlet Panech,
+Dietmar Kuehl,
+Douglas Gregor, 
+Dylan Nicholson,
+Ed Brey, 
+Eric Jensen,
+Eric Woodruff,
+Fedder Skovgaard,
+Gary Powell,
+Gennaro Prota,
+Geoff Leyland, 
+George Heintzelman, 
+Giovanni Bajo,
+Glen Knowles,
+Hillel Sims,
+Howard Hinnant,
+Jaap Suter,
+James Dennett, 
+Jan Langer, 
+Jani Kajala, 
+Jason Stewart, 
+Jeff Garland,
+Jens Maurer,
+Jesse Jones,
+Jim Hyslop,
+Joel de Guzman,
+Joel Young,
+John Levon, 
+John Maddock,
+John Williston,
+Jonathan Caves,
+Jonathan Biggar,
+Jurko,
+Justus Schwartz,
+Keith Burton, 
+Ken Hagen,
+Kostya Altukhov, 
+Mark Rodgers,
+Martin Schuerch, 
+Matt Austern,
+Matthias Troyer, 
+Mattias Flodin, 
+Michiel Salters,
+Mickael Pointier,
+Misha Bergal,
+Neal Becker,
+Noel Yap,
+Parksie,
+Patrick Hartling, Pavel Vozenilek,
+Pete Becker, 
+Peter Dimov,
+Rainer Deyke,
+Rene Rivera,
+Rob Lievaart,
+Rob Stewart,
+Ron Garcia,
+Ross Smith,
+Sashan,
+Steve Robbins, 
+Thomas Witt, 
+Tom Harris, 
+Toon Knapen,
+Victor Wagner,
+Vincent Finn,
+Vladimir Prus, and
+Yitzhak Sapir
+ 
+<p>A lengthy discussion on the C++ committee's library reflector illuminated the "illusion 
+of portability" problem, particularly in postings by PJ Plauger and Pete Becker.</p>
+
+<p>Walter Landry provided much help illuminating symbolic link use cases for 
+version 1.31.0. </p>
+
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->25 October, 2015<!--webbot bot="Timestamp" endspan i-checksum="38877" --></p>
+
+<p>© Copyright Beman Dawes, 2002-2005</p>
+<p> Use, modification, and distribution are subject to the Boost Software 
+License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a></p>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/issue_reporting.html b/vendor/pdalboost/libs/filesystem/doc/issue_reporting.html
new file mode 100644
index 0000000..44b80b2
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/issue_reporting.html
@@ -0,0 +1,224 @@
+<html>
+
+<head>
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Filesystem issue reporting</title>
+<link href="styles.css" rel="stylesheet">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td width="277">
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem Bug Reporting</font>
+    </td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="index.htm">Home</a>   
+    <a href="tutorial.html">Tutorial</a>   
+    <a href="reference.html">Reference</a>   
+    <a href="faq.htm">FAQ</a>   
+    <a href="release_history.html">Releases</a>   
+    <a href="portability_guide.htm">Portability</a>   
+    <a href="v3.html">V3 Intro</a>   
+    <a href="v3_design.html">V3 Design</a>   
+    <a href="deprecated.html">Deprecated</a>   
+    <a href="issue_reporting.html">Bug Reports </a>  
+    </td>
+</table>
+
+<p>Boost.Filesystem issues such as bug reports or feature requests should be 
+reported via a <a href="https://svn.boost.org/trac/boost/newticket">Boost Trac ticket</a>.</p>
+<p><a href="https://github.com/boostorg/filesystem/pulls">GitHub pull requests</a> 
+are encouraged, too, although anything beyond really trivial fixes needs a trac 
+ticket.</p>
+<h3>Bug reports</h3>
+<p>A timely response to your bug report is much more likely if <b>the problem can 
+be immediately reproduced without  guesswork and regression tests can be easily 
+created</b>. </p>
+<p>You need to provide the following:</p>
+<ol>
+  <li>A simple test program 
+that:<ul>
+    <li>Illustrates the problem, and</li>
+    <li>Automatically yields an unambiguous pass or fail result - returning zero 
+    for pass and non-zero for fail is preferred, and </li>
+    <li>Can be used as the basis for adding tests to Boost.Filesystem's 
+    regression test suite.</li>
+  </ul>
+  </li>
+  <li>The compiler, standard library, platform, and Boost version you 
+  used to build and run your test program.</li>
+  <li>A description of how to build and run the test program. 
+  </li>
+  <li>A copy of the output from the test 
+  program, if any.</li>
+  <li>An email address for follow-up questions.</li>
+</ol>
+<p>See <a href="#Rationale">Rationale</a> to find out why the above is needed.</p>
+<p>For a mostly automatic framework to provide the above, read on!</p>
+<h3>Bug reporting framework</h3>
+<p>The directory <code><boost-root>/libs/filesystem/bug></code> provides a bug test program (<code><a href="#bug-cpp">bug.cpp</a></code>) 
+and a build file (<code>Jamfile.v2</code>). Here is what you need to do:</p>
+<ol>
+  <li>Add one or more test cases to <code><a href="#bug-cpp">bug.cpp</a></code> 
+  using any text or program editor.</li>
+  <li><a href="#Build-and-test">Build and test</a>.</li>
+  <li>Attach copies of the <a href="#Test-output">Test output</a> and test 
+  program to the <a href="https://svn.boost.org/trac/boost/newticket">Trac 
+  ticket</a>.</li>
+</ol>
+<p>That's it! When you complete those steps, you will be done!</p>
+<p>The test output supplies all of the basic information about the compiler, std 
+library, platform, Boost version, and command line, and the test cases you have 
+added should make it easy for the library maintainer to reproduce the problem. </p>
+<h3>Using the framework</h3>
+<h4><a name="bug-cpp"><code>bug.cpp</code></a></h4>
+<p>Here is <code>bug.cpp</code> as supplied. To report a real bug, use
+<code>BOOST_TEST</code> and <code>BOOST_TEST_EQ</code> macros to build your own 
+test cases. You can delete the three tests already in <code>bug.cpp</code>:</p>
+<blockquote>
+  <pre>#include <boost/detail/lightweight_test_report.hpp>
+#include <boost/filesystem.hpp>
+
+namespace fs = boost::filesystem;
+
+int test_main(int, char*[])     // note name
+{
+  BOOST_TEST(2 + 2 == 5);       // one convertible-to-bool argument; this one fails!
+  BOOST_TEST_EQ(4 + 4, 9);      // two EqualityComparible arguments; this one fails!
+  BOOST_TEST(fs::exists("."));  // should pass, so nothing should be reported
+
+  return ::boost::report_errors();   // required
+}
+</pre>
+</blockquote>
+<h4><a name="Build-and-test">Build and test</a></h4>
+
+
+<p>POSIX-like systems:</p>
+
+
+<blockquote>
+  <pre>cd <boost-root>/libs/filesystem/bug
+../../../b2 -a
+bin/bug</pre>
+</blockquote>
+<p>Windows:</p>
+<blockquote>
+  <pre>cd <boost-root>\libs\filesystem\bug
+..\..\..\b2 -a
+bin\bug</pre>
+</blockquote>
+<h4><a name="Test-output">Test output</a></h4>
+
+
+<p>Running the test on Windows produced this test output:</p>
+
+
+<blockquote>
+
+
+<pre>Microsoft Visual C++ version 14.0
+Dinkumware standard library version 610
+Win32
+Boost version 1.58.0
+Command line: bin\bug
+bug.cpp(10): test '2 + 2 == 5' failed in function
+  'int __cdecl test_main(int,char *[])'
+bug.cpp(11): test '4 + 4 == 9' failed in function
+  'int __cdecl test_main(int,char *[])': '8' != '9'
+2 errors detected.</pre>
+</blockquote>
+<p>The test framework runs <code>test_main()</code> from a <code>try</code> 
+block with a <code>catch</code> block that reports exceptions via <code>
+std::exception what()</code>. So the output will differ if an exception is 
+thrown.</p>
+<h2>Background information</h2>
+<p>You should now have enough information to file an easy-to-reproduce bug 
+report. So you can skip reading the rest of this page unless you need to do 
+something a bit out of the ordinary.</p>
+<h3><a name="b2-command-line-options"><code>b2</code> command line</a></h3>
+<p><code>b2</code> (formerly <code>bjam</code>) usage:  <code>b2 
+[options] [properties] [target]</code></p>
+<p>Boost.Build b2 has many options, properties, and targets, but you will not 
+need most of them for bug reporting. Here are a few you might find helpful:</p>
+<p><b>Options</b></p>
+<blockquote>
+  <p><code>-a</code>    Rebuild everything rather than 
+  just out-of-date targets. Used in the example build above to ensure libraries 
+  are built with the same setup as the test program.</p>
+</blockquote>
+<p><b>Properties</b></p>
+<blockquote>
+  <p><code>address-model=<i>n  n</i></code> is 32 or 64. 
+  Explicitly request either 32-bit or 64-bit code generation. This typically 
+  requires that your compiler is appropriately configured.</p>
+  <p><code>variant=</code><i>string      string </i>is
+  <code>debug</code> or <code>release</code>.</p>
+  <p><code>toolset=</code><i>string</i>      The C++ 
+  compiler to use. For example, <code>gcc-4.9</code>, <code>clang-3.3</code>,
+  <code>or msvc-14.0</code>.</p>
+  <p><code>include=</code><i>string      </i>
+  Additional include paths for C and C++ compilers.</p>
+  <p><code>cxxflags=</code><i>string      </i>
+  Custom options to pass to the C++ compiler.</p>
+  <p><code>define=</code><i>string</i>      
+  Additional macro definitions for C and C++ compilers. <i>string</i> should be 
+  either <code class="computeroutput">SYMBOL</code> or
+  <code class="computeroutput">SYMBOL=VALUE</code></p>
+</blockquote>
+<h3><a name="Rationale">Rationale</a></h3>
+<p>Here is the request list again, with rationale added:</p>
+<ol>
+  <li>A simple test program 
+that:<ul>
+    <li dir="ltr">
+    <p dir="ltr">Illustrates the problem <b>[Code communicates more clearly than 
+    prose. If it looks like it will it will take some time to figure out exactly what the 
+    problem is, or worse yet, might result in a wild-goose chase, the bug report 
+    gets set aside to be worked on later and then is often forgotten.] </b>and</li>
+    <li>Automatically yields an unambiguous pass or fail result - returning zero 
+    for pass and non-zero for fail is preferred <b>[Prevents 
+    miscommunications and allows use in automatic regression tests.]</b>, and </li>
+    <li>Can be used as the basis for adding tests to Boost.Filesystem's 
+    regression test suite <b>[With good test cases fixes come easier and 
+    regressions become less likely]</b>.</li>
+  </ul>
+  </li>
+  <li>The compiler, standard library, platform, and Boost version you 
+  used to build and run your test program. <b>[The implementation includes much 
+  platform dependent code, and also depends on the other factors mentioned. Know 
+  these things upfront brings the bug report into focus without having to ask 
+  for more information. ]</b></li>
+  <li>A description of how to build and run the test program. <b>[If b2 
+  (formerly known as bjam) is used as the build engine, this is not a concern, 
+  but otherwise much more information is needed.]</b></li>
+  <li>A copy of the output from the test 
+  program, if any. <b>[Avoids misinterpreting results.]</b></li>
+  <li>An email address for follow-up questions.<b> [Trac comments are the 
+  primary means of response, but it is disheartening when a trac question is not 
+  answered and there is no email address attached for followup.]</b></li>
+</ol>
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->28 January, 2015<!--webbot bot="Timestamp" endspan i-checksum="38902" --></p>
+<p>© Copyright Beman Dawes, 2014</p>
+<p> Distributed under the Boost Software 
+License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a></p>
+
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/path_table.cpp b/vendor/pdalboost/libs/filesystem/doc/path_table.cpp
new file mode 100644
index 0000000..e93018a
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/path_table.cpp
@@ -0,0 +1,260 @@
+//  Generate an HTML table showing path decomposition  ---------------------------------//
+
+//  Copyright Beman Dawes 2005.
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  See http://www.boost.org/libs/filesystem for documentation.
+
+//  For purposes of generating the table, support both POSIX and Windows paths
+
+#include "boost/filesystem.hpp"
+#include <iostream>
+#include <fstream>
+
+using pdalboost::filesystem::path;
+using std::string;
+using std::cout;
+
+namespace
+{
+  std::ifstream infile;
+  std::ofstream posix_outfile;
+  std::ifstream posix_infile;
+  std::ofstream outfile;
+
+  bool posix;
+
+  const string empty_string;
+
+  struct column_base
+  {
+    virtual string heading() const = 0;
+    virtual string cell_value( const path & p ) const = 0;
+  };
+
+  struct c0 : public column_base
+  {
+    string heading() const { return string("<code>string()</code>"); }
+    string cell_value( const path & p ) const { return p.string(); }
+  } o0;
+
+    struct c1 : public column_base
+  {
+    string heading() const { return string("<code>generic_<br>string()</code>"); }
+    string cell_value( const path & p ) const { return p.generic_string(); }
+  } o1;
+
+  struct c2 : public column_base
+  {
+    string heading() const { return string("Iteration<br>over<br>Elements"); }
+    string cell_value( const path & p ) const
+    {
+      string s;
+      for( path::iterator i(p.begin()); i != p.end(); ++i )
+      {
+        if ( i != p.begin() ) s += ',';
+        s += (*i).string();
+      }
+      return s;
+    }
+  } o2;
+
+  struct c3 : public column_base
+  {
+    string heading() const { return string("<code>root_<br>path()</code>"); }
+    string cell_value( const path & p ) const { return p.root_path().string(); }
+  } o3;
+
+  struct c4 : public column_base
+  {
+    string heading() const { return string("<code>root_<br>name()</code>"); }
+    string cell_value( const path & p ) const { return p.root_name().string(); }
+  } o4;
+
+  struct c5 : public column_base
+  {
+    string heading() const { return string("<code>root_<br>directory()</code>"); }
+    string cell_value( const path & p ) const { return p.root_directory().string(); }
+  } o5;
+
+  struct c6 : public column_base
+  {
+    string heading() const { return string("<code>relative_<br>path()</code>"); }
+    string cell_value( const path & p ) const { return p.relative_path().string(); }
+  } o6;
+
+  struct c7 : public column_base
+  {
+    string heading() const { return string("<code>parent_<br>path()</code>"); }
+    string cell_value( const path & p ) const { return p.parent_path().string(); }
+  } o7;
+
+  struct c8 : public column_base
+  {
+    string heading() const { return string("<code>filename()</code>"); }
+    string cell_value( const path & p ) const { return p.filename().string(); }
+  } o8;
+
+  const column_base * column[] = { &o2, &o0, &o1, &o3, &o4, &o5, &o6, &o7, &o8 };
+
+  //  do_cell  ---------------------------------------------------------------//
+
+  void do_cell( const string & test_case, int i )
+  {
+    string temp = column[i]->cell_value(path(test_case));
+    string value;
+    outfile << "<td>";
+    if (temp.empty())
+      value = "<font size=\"-1\"><i>empty</i></font>";
+    else
+     value = string("<code>") + temp + "</code>";
+
+    if (posix)
+      posix_outfile << value << '\n';
+    else
+    {
+      std::getline(posix_infile, temp);
+      if (value != temp) // POSIX and Windows differ
+      {
+        value.insert(0, "<br>");
+        value.insert(0, temp);
+        value.insert(0, "<span style=\"background-color: #CCFFCC\">");
+        value += "</span>";
+      }
+      outfile << value;
+    }
+    outfile << "</td>\n";
+  }
+
+//  do_row  ------------------------------------------------------------------//
+
+  void do_row( const string & test_case )
+  {
+    outfile << "<tr>\n";
+
+    if (test_case.empty())
+      outfile << "<td><font size=\"-1\"><i>empty</i></font></td>\n";
+    else
+      outfile << "<td><code>" << test_case << "</code></td>\n";
+    
+    for ( int i = 0; i < sizeof(column)/sizeof(column_base&); ++i )
+    {
+      do_cell( test_case, i );
+    }
+
+    outfile << "</tr>\n";
+  }
+
+//  do_table  ----------------------------------------------------------------//
+
+  void do_table()
+  {
+    outfile <<
+      "<h1>Path Decomposition Table</h1>\n"
+      "<p>Shaded entries indicate cases where <i>POSIX</i> and <i>Windows</i>\n"
+      "implementations yield different results. The top value is the\n"
+      "<i>POSIX</i> result and the bottom value is the <i>Windows</i> result.\n" 
+      "<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">\n"
+      "<p>\n"
+      ;
+
+    // generate the column headings
+
+    outfile << "<tr><td><b>Constructor<br>argument</b></td>\n";
+
+    for ( int i = 0; i < sizeof(column)/sizeof(column_base&); ++i )
+    {
+      outfile << "<td><b>" << column[i]->heading() << "</b></td>\n";
+    }
+
+    outfile << "</tr>\n";
+
+    // generate a row for each input line
+
+    string test_case;
+    while ( std::getline( infile, test_case ) )
+    {
+      if (!test_case.empty() && *--test_case.end() == '\r')
+        test_case.erase(test_case.size()-1);
+      if (test_case.empty() || test_case[0] != '#')
+        do_row( test_case );
+    }
+
+    outfile << "</table>\n";
+  }
+
+} // unnamed namespace
+
+//  main  ------------------------------------------------------------------------------//
+
+#define BOOST_NO_CPP_MAIN_SUCCESS_MESSAGE
+#include <boost/test/included/prg_exec_monitor.hpp>
+
+int cpp_main( int argc, char * argv[] ) // note name!
+{
+  if ( argc != 5 )
+  {
+    std::cerr <<
+      "Usage: path_table \"POSIX\"|\"Windows\" input-file posix-file output-file\n"
+      "Run on POSIX first, then on Windows\n"
+      "  \"POSIX\" causes POSIX results to be saved in posix-file;\n"
+      "  \"Windows\" causes POSIX results read from posix-file\n"
+      "  input-file contains the paths to appear in the table.\n"
+      "  posix-file will be used for POSIX results\n"
+      "  output-file will contain the generated HTML.\n"
+      ;
+    return 1;
+  }
+
+  infile.open( argv[2] );
+  if ( !infile )
+  {
+    std::cerr << "Could not open input file: " << argv[2] << std::endl;
+    return 1;
+  }
+
+  if (string(argv[1]) == "POSIX")
+  {
+    posix = true;
+    posix_outfile.open( argv[3] );
+    if ( !posix_outfile )
+    {
+      std::cerr << "Could not open POSIX output file: " << argv[3] << std::endl;
+      return 1;
+    }
+  }
+  else
+  {
+    posix = false;
+    posix_infile.open( argv[3] );
+    if ( !posix_infile )
+    {
+      std::cerr << "Could not open POSIX input file: " << argv[3] << std::endl;
+      return 1;
+    }
+  }
+
+  outfile.open( argv[4] );
+  if ( !outfile )
+  {
+    std::cerr << "Could not open output file: " << argv[2] << std::endl;
+    return 1;
+  }
+
+  outfile << "<html>\n"
+          "<head>\n"
+          "<title>Path Decomposition Table</title>\n"
+          "</head>\n"
+          "<body bgcolor=\"#ffffff\" text=\"#000000\">\n"
+          ;
+
+  do_table();
+
+  outfile << "</body>\n"
+          "</html>\n"
+          ;
+
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/doc/path_table.txt b/vendor/pdalboost/libs/filesystem/doc/path_table.txt
new file mode 100644
index 0000000..40809c6
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/path_table.txt
@@ -0,0 +1,50 @@
+# Paths for the reference.html Path Decomposition Table
+#
+# This is the input file for path_table, which generates the actual html
+#
+# Copyright Beman Dawes 2010
+#
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+#
+# Note that an empty line is treated as input rather than as a comment
+
+.
+..
+foo
+/
+/foo
+foo/
+/foo/
+foo/bar
+/foo/bar
+//net
+//net/foo
+///foo///
+///foo///bar
+/.
+./
+/..
+../
+foo/.
+foo/..
+foo/./
+foo/./bar
+foo/..
+foo/../
+foo/../bar
+c:
+c:/
+c:foo
+c:/foo
+c:foo/
+c:/foo/
+c:/foo/bar
+prn:
+c:\
+c:foo
+c:\foo
+c:foo\
+c:\foo\
+c:\foo/
+c:/foo\bar
diff --git a/vendor/pdalboost/libs/filesystem/doc/portability_guide.htm b/vendor/pdalboost/libs/filesystem/doc/portability_guide.htm
new file mode 100644
index 0000000..676c25c
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/portability_guide.htm
@@ -0,0 +1,242 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Portability Guide</title>
+<link href="styles.css" rel="stylesheet">
+</head>
+
+<body bgcolor="#FFFFFF">
+
+<h1>
+<img border="0" src="../../../boost.png" align="center" width="300" height="86">Path 
+Name Portability 
+Guide</h1>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="index.htm">Home</a>   
+    <a href="tutorial.html">Tutorial</a>   
+    <a href="reference.html">Reference</a>   
+    <a href="faq.htm">FAQ</a>   
+    <a href="release_history.html">Releases</a>   
+    <a href="portability_guide.htm">Portability</a>   
+    <a href="v3.html">V3 Intro</a>   
+    <a href="v3_design.html">V3 Design</a>   
+    <a href="deprecated.html">Deprecated</a>   
+    <a href="issue_reporting.html">Bug Reports </a>  
+    </td>
+</table>
+
+<p>
+<a href="#Introduction">Introduction</a><br>
+<a href="#name_check�_functions">name_check functions</a><br>
+<a href="#recommendations">File and directory name recommendations</a></p>
+<h2><a name="Introduction">Introduction</a></h2>
+<p>Like any other C++ program which performs I/O operations, there is no 
+guarantee that a program using Boost.Filesystem will be portable between 
+operating systems. Critical aspects of I/O such as how the operating system 
+interprets paths are unspecified by the C and C++ Standards.</p>
+<p>It is not possible to know  if a file or directory name will be 
+valid (and thus portable) for an unknown operating system. There is always the possibility that an operating system could use 
+names which are unusual (numbers less than 4096, for example) or very 
+limited in size (maximum of six character names, for example). In other words, 
+portability is never absolute; it is always relative to specific operating 
+systems or 
+file systems.</p>
+<p>It is possible, however, to know in advance if a directory or file name is likely to be valid for a particular 
+operating system. It is also possible to construct names which are 
+likely to be portable to a large number of modern and legacy operating systems.</p>
+
+<p>Almost all modern operating systems support multiple file systems. At the 
+minimum, they support a native file system plus a CD-ROM file system (Generally 
+ISO-9669, often with Juliet extensions).</p>
+
+<p>Each file system 
+may have its own naming rules. For example, modern versions of Windows support NTFS, FAT, FAT32, and ISO-9660 file systems, among others, and the naming rules 
+for those file systems differ. Each file system may also have 
+differing rules for overall path validity, such as a maximum length or number of 
+sub-directories. Some legacy systems have different rules for directory names 
+versus regular file names.</p>
+
+<p>As a result, Boost.Filesystem's <i>name_check</i> functions 
+cannot guarantee directory and file name portability. Rather, they are intended to 
+give the programmer a "fighting chance" to achieve portability by early 
+detection of common naming problems.</p>
+
+<h2><a name="name_check�_functions">name_check functions</a></h2>
+
+<p>A <i>name_check</i> function 
+returns true if its argument is valid as a directory and regular file name for a 
+particular operating or file system. A number of these functions are provided.</p>
+
+<p>The <a href="#portable_name">portable_name</a> function is of particular 
+interest because it has been carefully designed to provide wide 
+portability yet not overly restrict expressiveness.</p>
+
+<table border="1" cellpadding="5" cellspacing="0">
+  <tr>
+    <td align="center" colspan="2"><b>Library Supplied name_check Functions</b></td>
+  </tr>
+  <tr>
+    <td align="center"><b>Function</b></td>
+    <td align="center"><b>Description</b></td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code><a name="portable_posix_name">portable_posix_name</a>(const 
+    std::string&<i> name</i>)</code></td>
+    <td><b>Returns:</b> <i>true</i> if <code>!name.empty() && name</code> contains only the characters 
+    specified in<i> Portable Filename Character Set</i> rules as defined in by 
+    POSIX (<a href="http://www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap03.html">www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap03.html</a>).<br>
+    The allowed characters are <code>0-9</code>, <code>a-z</code>, <code>A-Z</code>, 
+    <code>'.'</code>, <code>'_'</code>, and <code>'-'</code>.<p><b>Use:</b> 
+    applications which must be portable to any POSIX system.</td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code><a name="windows_name">windows_name</a>(const 
+    std::string&<i> name</i>)</code></td>
+    <td><b>Returns:</b>  <i>true</i> if <code>!name.empty() && name</code> contains 
+    only the characters specified by the Windows platform SDK as valid 
+    regardless of the file system <code>&& (name</code> is <code>"."</code> or
+    <code>".."</code>  or does not end with a trailing space or period<code>)</code>.  
+    The allowed characters are anything except <code>0x0-0x1F</code>, <code>'<'</code>,
+    <code>'>'</code>, <code>':'</code>, <code>'"'</code>, <code>'/'</code>,
+    <code>'\'</code>, and <code>'|'</code>.<p>
+    <b>Use:</b> applications which must be portable to Windows.</p>
+    <p><b>Note:</b> Reserved device names are not valid as file names, but are 
+    not being detected because they are still valid as a path. Specifically, 
+    CON, PRN, AUX, CLOCK$, NUL, COM[1-9], LPT[1-9], and these names followed by 
+    an extension (for example, NUL.tx7).</td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code><a name="portable_name">portable_name</a>(const 
+    std::string&<i> name</i>)</code></td>
+    <td><b>Returns:</b> <code> windows_name(name) && portable_posix_name(name) 
+    && (name</code> is <code>"."</code> or <code>".."</code>, and the first character not a period or hyphen<code>)</code>.<p><b>Use:</b> applications which must be portable to a wide variety of 
+    modern operating systems, large and small, and to some legacy O/S's. The 
+    first character not a period or hyphen restriction is a requirement of 
+    several older operating systems.</td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code><a name="portable_directory_name">
+    portable_directory_name</a>(const std::string&<i> name</i>)</code></td>
+    <td><b>Returns:</b> <code>portable_name(name) && (name</code> is <code>"."</code> 
+    or <code>".."</code>  or contains no periods<code>)</code>.<p><b>Use:</b> applications 
+    which must be portable to a wide variety of platforms, including OpenVMS.</td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code><a name="portable_file_name">
+    portable_file_name</a>(const std::string&<i> name</i>)</code></td>
+    <td><b>Returns:</b> <code>portable_name(name) && </code>any period is followed by one to three additional 
+    non-period characters.<p><b>Use:</b> 
+    applications which must be portable to a wide variety of platforms, 
+    including OpenVMS and other systems which have a concept of "file extension" 
+    but limit its length.</td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code><a name="native">native</a>(const 
+    std::string&<i> name</i>)</code></td>
+    <td><b>Returns:</b> Implementation defined. Returns <i>
+    true</i> for names considered valid by the operating system's native file 
+    systems.<p><b>Note:</b> May return <i>true</i> for some names not considered valid 
+    by the operating system under all conditions (particularly on operating systems which support 
+    multiple file systems.)</td>
+  </tr>
+</table>
+
+<h2>File and directory name <a name="recommendations">recommendations</a></h2>
+
+<table border="1" cellpadding="5" cellspacing="0">
+
+  <tr>
+    <td align="center" valign="top"><strong>Recommendation</strong></td>
+    <td align="center" valign="top"><strong>Rationale</strong></td>
+  </tr>
+  <tr>
+    <td valign="top">Limit file and directory names to the characters A-Z, a-z, 0-9, period, hyphen, and
+    underscore.<p>Use any of the "portable_" <a href="#name_check�_functions">
+    name check functions</a> to enforce this recommendation.</td>
+    <td valign="top">These are the characters specified by the POSIX standard for portable directory and
+    file names, and are also valid for Windows, Mac, and many other modern file systems.</td>
+  </tr>
+  <tr>
+    <td valign="top">Do not use a period or hyphen as the first 
+    character of a name. Do not use period as the last character of a name.<p>
+    Use <a href="#portable_name">portable_name</a>,
+    <a href="#portable_directory_name">portable_directory_name</a>, or
+    <a href="#portable_file_name">portable_file_name</a> to enforce this 
+    recommendation.</td>
+    <td valign="top">Some operating systems treat have special rules for the 
+    first character of names. POSIX, for example. Windows does not permit period 
+    as the last character.</td>
+  </tr>
+  <tr>
+    <td valign="top">Do not use periods in directory names.<p>Use
+    <a href="#portable_directory_name">portable_directory_name</a> to enforce 
+    this recommendation.</td>
+    <td valign="top">Requirement for ISO-9660 without Juliet extensions, OpenVMS filesystem, and other legacy systems.</td>
+  </tr>
+  <tr>
+    <td valign="top">Do not use more that one period in a file name, and limit 
+    the portion after the period to three characters.<p>Use
+    <a href="#portable_file_name">portable_file_name</a> to enforce this 
+    recommendation.</td>
+    <td valign="top">Requirement for ISO-9660 level 1, OpenVMS filesystem, and 
+    other legacy systems. </td>
+  </tr>
+  <tr>
+    <td valign="top">Do not assume names are case sensitive. For example, do not expected a directory to be
+    able to hold separate elements named "Foo" and "foo". </td>
+    <td valign="top">Some file systems are case insensitive.  For example, Windows 
+    NTFS is case preserving in the way it stores names, but case insensitive in 
+    searching for names (unless running under the POSIX sub-system, it which 
+    case it does case sensitive searches). </td>
+  </tr>
+  <tr>
+    <td valign="top">Do not assume names are case insensitive.  For example, do not expect a file
+    created with the name of "Foo" to be opened successfully with the name of "foo".</td>
+    <td valign="top">Some file systems are case sensitive.  For example, POSIX.</td>
+  </tr>
+  <tr>
+    <td valign="top">Don't use hyphens in names.</td>
+    <td valign="top">ISO-9660 level 1, and possibly some legacy systems, do not permit 
+    hyphens.</td>
+  </tr>
+  <tr>
+    <td valign="top">Limit the length of the string returned by path::string() to 
+    255 characters.  
+    Note that ISO 9660 has an explicit directory tree depth limit of 8, although 
+    this depth limit is removed by the Juliet extensions.</td>
+    <td valign="top">Some operating systems place limits on the total path length.  For example,
+    Windows 2000 limits paths to 260 characters total length.</td>
+  </tr>
+  <tr>
+    <td valign="top">Limit the length of any one name in a path.  Pick the specific limit according to
+    the operating systems and or file systems you wish portability to:<br>
+       Not a concern::  POSIX, Windows, MAC OS X.<br>
+       31 characters: Classic Mac OS<br>
+   8 characters + period + 3 characters: ISO 9660 level 1<br>
+   32 characters: ISO 9660 level 2 and 3<br>
+   128 characters (64 if Unicode): ISO 9660 with Juliet extensions</td>
+    <td valign="top">Limiting name length can markedly reduce the expressiveness of file names, yet placing
+    only very high limits on lengths inhibits widest portability.</td>
+  </tr>
+</table>
+
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->29 December, 2014<!--webbot bot="Timestamp" endspan i-checksum="38652" --></p>
+
+<p>© Copyright Beman Dawes, 2002, 2003</p>
+<p> Use, modification, and distribution are subject to the Boost Software 
+License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
+LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a>)</p>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/publish.bat b/vendor/pdalboost/libs/filesystem/doc/publish.bat
new file mode 100644
index 0000000..454646e
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/publish.bat
@@ -0,0 +1,21 @@
+ at echo off
+copy /y styles.css ..\..\..\..\filesystem-gh-pages
+copy /y deprecated.html ..\..\..\..\filesystem-gh-pages
+copy /y design.htm ..\..\..\..\filesystem-gh-pages
+copy /y faq.htm ..\..\..\..\filesystem-gh-pages
+copy /y index.htm ..\..\..\..\filesystem-gh-pages
+copy /y issue_reporting.html ..\..\..\..\filesystem-gh-pages
+copy /y portability_guide.htm ..\..\..\..\filesystem-gh-pages
+copy /y reference.html ..\..\..\..\filesystem-gh-pages
+copy /y relative_proposal.html ..\..\..\..\filesystem-gh-pages
+copy /y release_history.html ..\..\..\..\filesystem-gh-pages
+copy /y tutorial.html ..\..\..\..\filesystem-gh-pages
+copy /y v3.html ..\..\..\..\filesystem-gh-pages
+copy /y v3_design.html ..\..\..\..\filesystem-gh-pages
+pushd ..\..\..\..\filesystem-gh-pages
+git commit -a -m "copy from develop"
+git push
+popd
+rem Copyright Beman Dawes, 2015
+rem Distributed under the Boost Software License, Version 1.0.
+rem See www.boost.org/LICENSE_1_0.txt
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/reference.html b/vendor/pdalboost/libs/filesystem/doc/reference.html
new file mode 100644
index 0000000..b4fb0a7
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/reference.html
@@ -0,0 +1,4227 @@
+<html>
+<!-- © Copyright Beman Dawes, 2002, 2006, 2007, 2009, 2010, 2011 -->
+<!-- Distributed under the Boost Software License, Version 1.0. -->
+<!-- See http://www.boost.org/LICENSE_1_0.txt -->
+
+<!-- generate-section-numbers=false -->
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link href="styles.css" rel="stylesheet">
+<title>Filesystem Reference</title>
+</head>
+
+<body>
+
+
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td width="277">
+<p dir="ltr">
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem Library<br>
+    </font>
+    <font size="6">Version 3</font></td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="index.htm">Home</a>   
+    <a href="tutorial.html">Tutorial</a>   
+    <a href="reference.html">Reference</a>   
+    <a href="faq.htm">FAQ</a>   
+    <a href="release_history.html">Releases</a>   
+    <a href="portability_guide.htm">Portability</a>   
+    <a href="v3.html">V3 Intro</a>   
+    <a href="v3_design.html">V3 Design</a>   
+    <a href="deprecated.html">Deprecated</a>   
+    <a href="issue_reporting.html">Bug Reports </a>  
+    </td>
+</table>
+
+<h1>Reference Documentation</h1>
+
+
+
+<p><i>Headings and synopsis for recently added functionality is show with <ins>a green background</ins>. </i></p>
+
+
+
+<h2><a name="TOC">Table of Contents</a></h2>
+
+<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
+  <tr>
+    <td width="33%" valign="top">
+    <p><a href="#Introduction">Introduction</a><br>
+    <a href="#Definitions">Definitions</a><br>
+    <a href="#Conformance">Conformance</a><br>
+    <a href="#Header-filesystem-synopsis">
+    Header <code><boost/filesystem.hpp></code> synopsis</a><br>
+    <a href="#Error-reporting">Error reporting</a><br>
+    <a href="#class-path">Class <code>path</code></a><br>
+    <a href="#path-Conversions"><code>path</code> conversions</a><br>
+    <a href="#path-Conversions-to-native-format"><code>path</code> 
+    conversions to native format</a><br>
+    <a href="#path-Conversions-to-generic-format"><code>path</code> 
+    conversions to generic format</a><br>
+    <a href="#path-Encoding-conversions"><code>path</code> 
+    encoding conversions</a><br>
+    <a href="#path-Requirements"><code>path</code> requirements</a><br>
+        <a href="#path-constructors"><code>path</code> constructors</a><br>
+    <a href="#path-assignments"><code>path</code> assignments</a><br>
+        <a href="#path-appends"><code>path</code> appends</a><br>
+        <a href="#path-concatenation"><code>path</code> concatenation</a><br>
+    <a href="#path-modifiers"><code>path</code> modifiers</a><br>
+    <a href="#path-native-format-observers"><code>path</code> native 
+    format observers</a><br>
+    <a href="#path-generic-format-observers"><code>path</code> generic 
+    format observers</a><br>
+    <a href="#path-compare"><code>path</code> compare</a><br>
+    <a href="#path-decomposition"><code>path</code> decomposition</a><br>
+    <a href="#path-query"><code>path</code> query</a><br>
+    <a href="#path-iterators"><code>path</code> iterators</a><br>
+
+    <a href="#path-deprecated-functions"><code>path</code> deprecated functions</a><br>
+    <a href="#path-non-member-functions"><code>path</code> non-member functions</a><br>
+    <a href="#path-inserter-extractor"><code>path</code> inserters and extractors</a><br>
+  <a href="#Class-filesystem_error">Class <code>filesystem_error</code></a><br>
+    <a href="#filesystem_error-members"><code>filesystem_error</code> 
+    constructors</a><br>
+    <code>f</code><a href="#filesystem_error-path1"><code>ilesystem_error</code> path1</a><br>
+    <a href="#filesystem_error-path2"><code>filesystem_error</code> path2</a><br>
+    <a href="#filesystem_error-what"><code>filesystem_error </code>what</a></td>
+    <td width="33%" valign="top">
+    <p>
+    <a href="#Enum-file_type">Enum <code>file_type</code></a><br>
+    <a href="#Enum-perms">Enum <code>perms</code></a><br>
+    <a href="#file_status">Class 
+    <code>file_status</code></a><br>
+   
+    <a href="#file_status"> 
+    <code>file_status</code></a><a href="#file_status-constructors"> constructors</a><br>
+    <code><a href="#file_status-modifiers">file_status-modifiers</a></code><a href="#directory_entry-observers"> observers</a><br>
+    <code><a href="#file_status-observers">file_status-observers</a></code><a href="#directory_entry-modifiers"> modifiers</a><br>
+<a href="#Class-directory_entry">Class <code>directory_entry</code></a><br>
+   
+<a href="#directory_entry-constructors"><code>directory_entry</code> constructors</a><br>
+    <a href="#directory_entry-observers"><code>directory_entry</code> observers</a><br>
+    <a href="#directory_entry-modifiers"><code>directory_entry</code> modifiers</a><br>
+<a href="#Class-directory_iterator">Class  <code>directory_iterator</code></a><br>
+    <a href="#directory_iterator-members"><code>directory_iterator</code> 
+    members</a><br>
+<a href="#Class-recursive_directory_iterator">Class <code>recursive_directory_iterator</code></a><br>
+    <a href="#Operational-functions">
+    Operational functions</a><br>
+    <code>     <a href="#absolute">absolute</a><br>
+     <a href="#canonical">canonical</a><br>
+     <a href="#copy">copy</a><br>
+     <a href="#copy_directory">copy_directory</a><br>
+     <a href="#copy_file">copy_file</a><br>
+     <a href="#copy_symlink">copy_symlink</a><br>
+     <a href="#create_directories">create_directories</a><br>
+     <a href="#create_directory">create_directory</a><br>
+     <a href="#create_hard_link">create_hard_link</a><br>
+     <a href="#create_symlink">create_symlink</a><br>
+     <a href="#current_path">current_path</a><br>
+     <a href="#exists">exists</a><br>
+     <a href="#equivalent">equivalent</a><br>
+     <a href="#file_size">file_size</a><br>
+     <a href="#hard_link_count">hard_link_count</a><br>
+     <a href="#initial_path">initial_path</a><br>
+      i<a href="#is_directory">s_directory</a><br>
+     <a href="#is_empty">is_empty</a></code></td>
+    <td width="34%" valign="top">
+    <p>
+    <code>     <a href="#is_other">is_other</a><br>
+     <a href="#is_regular_file">is_regular_file</a><br>
+     <a href="#is_symlink">is_symlink</a><br>
+     <a href="#last_write_time">last_write_time</a><br>
+     <a href="#permissions">permissions</a><br>
+     <a href="#read_symlink">read_symlink</a><br>
+     <a href="#op-relative"><ins>relative</ins></a><br>
+     <a href="#remove">remove</a><br>
+     <a href="#remove_all">remove_all</a><br>
+     <a href="#rename">rename</a><br>
+     <a href="#resize_file">resize_file</a><br>
+     <a href="#space">space</a><br>
+     <a href="#status">status</a><br>
+     <a href="#status_known">status_known</a><br>
+     <a href="#symlink_status">symlink_status</a><br>
+     <a href="#system_complete">system_complete</a><br>
+     <a href="#temp_directory_path">temp_directory_path</a><br>
+     <a href="#unique_path">unique_path</a><br>
+     <a href="#weakly_canonical"><ins>weakly_canonical</ins></a><br></code>
+    <a href="#File-streams">File streams</a><br>
+<a href="#path-decomposition-table">Path decomposition table</a><br>
+    <a href="#long-path-warning">Warning: Long paths on Windows and the 
+    extended-length <b>\\?\ </b>prefix</a><br>
+<a href="#Acknowledgements">Acknowledgements</a><br>
+<a href="#References">References</a><br>
+ </td>
+  </tr>
+</table>
+
+
+<h2><a name="Introduction">Introduction</a></h2>
+
+<p>This reference documentation describes components that C++ programs may use 
+to perform operations involving file systems, including paths, regular files, 
+and directories.</p>
+
+<blockquote>
+<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+  bordercolor="#111111" bgcolor="#D7EEFF" width="90%">
+  <tr>
+    <td width="100%" align="center" colspan="2">
+    <p align="center"><b>C++11 Support</b><p align="left">This reference 
+    documentation is written as if all compilers supported C++11. Where 
+    possible, the implementation falls back to C++03 if a C++11 feature is not 
+    available.</td>
+  </tr>
+  <tr>
+    <td width="35%" align="center">
+    <p>
+    <b>C++11 Feature</b></td>
+    <td width="65%" align="center">
+    <p>
+    <b>Action if not supported by compiler</b></td>
+  </tr>
+  <tr>
+    <td width="35%" align="left">
+    <p>
+    <code>noexcept</code></td>
+    <td width="65%" align="left">
+    <p>Keyword omitted.</td>
+  </tr>
+  <tr>
+    <td width="35%" align="left">
+    <p>
+    <code>constexpr</code></td>
+    <td width="65%" align="left">
+    <p>Keyword omitted.</td>
+  </tr>
+  <tr>
+    <td width="35%" align="left">
+    <p>R-value references</td>
+    <td width="65%" align="left">
+    <p>Function signature omitted.</td>
+  </tr>
+  <tr>
+    <td width="35%" align="left">
+    <p>New character types</td>
+    <td width="65%" align="left">
+    <p>The <code>boost::filesystem</code> interface doesn't use the 
+    new types directly. It does use <code>u16string</code> and <code>u32string</code> 
+    in namespace <code>boost</code>. These are typedefs to <code>std::u16string</code> 
+    and <code>std::u32string</code> for C++11, or to <code>
+    std::basic_string<boost::u16_t></code> and <code>
+    std::basic_string<boost::u32_t></code> for C++03.</td>
+  </tr>
+  <tr>
+    <td width="35%" align="left">
+    <p>Defaulted and deleted functions</td>
+    <td width="65%" align="left">
+    <p>Workaround replacement functions provided.</td>
+  </tr>
+  <tr>
+    <td width="35%" align="left">
+    <p>Initializer lists</td>
+    <td width="65%" align="left">
+    <p>Not currently used.</td>
+  </tr>
+  <tr>
+    <td width="35%" align="left">
+    <p>Variadic templates</td>
+    <td width="65%" align="left">
+    <p>Not currently used.</td>
+  </tr>
+  <tr>
+    <td width="35%" align="left">
+    <p>Range-based for statements</td>
+    <td width="65%" align="left">
+    <p>Supporting functions always provided; they do no harm even for C++03 
+    compilers.</td>
+  </tr>
+</table>
+</blockquote>
+
+
+
+<h2><a name="Conformance">Conformance</a> [fs.conformance]</h2>
+
+<h3>ISO/IEC 9945 conformance [fs.conform.9945]</h3>
+<p>Some behavior in this reference documentation is specified by reference to ISO/IEC 9945. How such behavior is actually implemented is unspecified.</p>
+<blockquote>
+<p>[<i>Note:</i> This constitutes an "as if" rule for implementation of 
+operating system dependent behavior. In practice implementations will usually call native 
+operating system API's. <i>—end note</i>]</p>
+</blockquote>
+<p>Implementations are encouraged to provide such behavior 
+ 
+as it is defined by ISO/IEC 9945. Implementations shall document any 
+behavior that differs from the behavior defined by ISO/IEC 9945. Implementations that do not support exact 
+ISO/IEC 9945 behavior are 
+encouraged to provide behavior as close to ISO/IEC 9945 behavior as is reasonable given the 
+limitations of actual operating systems and file systems. If an implementation cannot provide any 
+reasonable behavior, the implementation shall report an error in an 
+implementation-defined manner.</p>
+<blockquote>
+<p>[<i>Note:</i> Such errors might be reported by an #error directive, a <code>
+static_assert</code>, a <code>filesystem_error</code> exception, a special 
+return value, or some other manner. <i>—end note</i>]</p>
+</blockquote>
+<p>Implementations are not required to provide behavior that is not supported by 
+a particular file system.</p>
+<blockquote>
+<p>[<i>Example:</i> The <a href="http://en.wikipedia.org/wiki/FAT_filesystem">
+FAT file system</a> used by some memory cards, camera memory, and floppy discs 
+does not support hard links, symlinks, and many other features of more capable 
+file systems. Implementations are only required to support the FAT features 
+supported by the host operating system. <i>—end example</i>]</p>
+</blockquote>
+<p>The behavior of functions described in this 
+reference 
+may differ from their specification in 
+the presence of <a href="#file-system-race">file system races</a>. No diagnostic is required.</p>
+<p>If the possibility of a file system race would make it unreliable for a program to 
+test for a precondition before calling a function described in this reference documentation, <i>
+Requires</i> is not specified for the condition. Instead, the condition is 
+specified as a <i>Throws</i> condition.</p>
+<blockquote>
+<p>[<i>Note:</i> As a design practice, preconditions are not specified when it 
+is unreasonable for a program to detect them prior to calling the function. <i>
+—end note</i>]</p>
+</blockquote>
+<h3>Operating system dependent conformance [fs.conform.os]</h3>
+<p>Some behavior is specified in this reference documentation as being 
+operating system dependent ([fs.def.osdep]). The operation system an 
+implementation is dependent upon is implementation defined.</p>
+<p>It is permissible for an implementation to be dependent upon an operating 
+system emulator rather than the actual operating system.</p>
+<blockquote>
+<p>[<i>Example:</i> An implementation uses Cygwin, a Linux® API emulator for 
+some Windows® operating system versions. The implementation would define Cygwin 
+as its operating system. Users could refer to the Cygwin documentation to find 
+details of the operating system dependent behavior.  <i>—end example</i>]</p>
+<p><span style="background-color: #E0E0E0"><i>It is user and conformance test 
+detectable that such an implementation is running on Cygwin. Users would be 
+misled and conformance tests would fail if the implementation defined Linux or 
+Windows rather than Cygwin as the operating system, since real behavior is a 
+blend of the two.</i></span> </p>
+</blockquote>
+<h2><a name="Definitions">Definitions</a> [fs.definitions]</h2>
+<p>The following definitions  shall apply throughout this reference documentation:</p>
+<h3><a name="operating system dependent">operating system dependent</a> behavior 
+[fs.def.osdep]</h3>
+<p>Behavior  that is dependent upon the behavior 
+and characteristics of an operating system. See [fs.conform.os].</p>
+<h3><a name="file">file</a> [fs.def.file]</h3>
+<p>An object that can be written to, or read from, or both. A file 
+has certain attributes, including type. File types include regular files 
+and directories. Other types of files, such as symbolic links, may be supported by the 
+implementation.</p>
+<h3><a name="file-system">file system</a> [fs.def.filesystem]</h3>
+<p>A collection of files and certain of their attributes.</p>
+<h3><a name="filename">filename</a> [fs.def.filename]</h3>
+  <p>The name of a file. Filenames <code>
+  "."</code>  
+and <code>".."</code>  have special meaning. The follow characteristics of 
+  filenames are operating system dependent:</p>
+<ul>
+  <li>
+  <p>The permitted characters. See [<a href="#Operating-system-examples">fs.os.example</a>s].</p>
+  </li>
+  <li>
+  <p>Specific filenames that are not permitted.</p>
+  </li>
+  <li>
+  <p>Additional filenames that have special meaning.</p>
+  </li>
+  <li>
+  <p>Case awareness and sensitivity during path resolution.</p>
+  </li>
+  <li>
+  <p>Special rules that may apply to file types other than regular 
+  files, such as directories.</p>
+  </li>
+</ul>
+<h3><a name="path">path</a> [fs.def.path]</h3>
+<p>A sequence of elements that identify 
+the location of a file within a filesystem. The elements are the <i>root-name<sub>opt</sub></i>, <i>
+root-directory<sub>opt</sub></i>, and an optional sequence of filenames. [<i>Note:</i> 
+A <a href="#pathname">pathname</a> is the concrete representation of a path. <i>—end note</i>]</p>
+
+<h3><a name="Absolute-path">absolute path</a> [fs.def.absolute-path]</h3>
+<p>A path that 
+unambiguously 
+identifies the location of a file without reference to an additional starting 
+location. The elements of a path that determine if it is absolute are 
+operating system dependent.</p>
+
+<h3><a name="Relative-path">relative path</a> [fs.def.relative-path]</h3>
+<p>A path that 
+is not absolute, and so only 
+unambiguously 
+identifies the location of a file when resolved relative to 
+an implied starting location. The elements of a path that determine if it is 
+relative are operating system dependent.  [<i>Note:</i> 
+Paths <code>"."</code> and <code>".."</code> are relative paths. <i>—end note</i>]</p>
+<h3><a name="canonical-path">canonical path</a> [fs.def.cannonical-path]</h3>
+<p>An absolute path that has 
+no elements that are symbolic links, and no <code>"."</code> or <code>".."</code> elements.</p>
+<h3><a name="pathname">pathname</a> [fs.def.pathname]</h3>
+<p>A character string that represents 
+the name of a 
+path. Pathnames are formatted according to the generic pathname grammar or an 
+operating system dependent 
+native pathname format.</p>
+
+<h3><a name="native-pathname-format">native pathname format</a> [fs.def.native]</h3>
+<p>The operating system dependent pathname format accepted by the host operating system.</p>
+<h3><ins><a name="normal-form">normal form</a> path [fs.def.normal]</ins></h3>
+<p>A path with no redundant current directory (<i>dot</i>) or parent directory (<i>dot-dot</i>) 
+elements. The normal form for an empty path is an empty path. The normal form 
+for a path ending in a <i>directory-separator</i> that is not the root directory 
+is the same path with a current directory (<i>dot</i>) element appended.</p>
+<h3><a name="link">link</a> [fs.def.link]</h3>
+<p>A directory entry object that associates a 
+filename with a file. On some file systems, several directory entries can 
+associate names with the same file.</p>
+<h3><a name="hard-link">hard link</a> [fs.def.hardlink]</h3>
+<p>A link to an existing file. Some 
+file systems support multiple hard links to a file. If the last hard link to a 
+file is removed, the file itself is removed.</p>
+<blockquote>
+<p>[<i>Note:</i> A hard link can be thought of as a shared-ownership smart 
+pointer to a file.<i> —end note</i>]<i> </i></p>
+</blockquote>
+<h3><a name="symbolic-link">symbolic link</a> [fs.def.symlink]</h3>
+<p>A type of file with the 
+property that when the file is encountered during pathname resolution, a string 
+stored by the file is used to modify the pathname resolution.</p>
+<blockquote>
+<p>[<i>Note:</i> A symbolic link can be thought of as a raw pointer to a file. 
+If the file pointed to does not exist, the symbolic link is said to be a 
+"dangling" symbolic link.<i> —end note</i>]<i> </i></p>
+</blockquote>
+<h3><a name="file-system-race">file system race</a> [fs.def.race]</h3>
+<p>The condition that occurs 
+when multiple threads, processes, or computers interleave access and 
+modification of 
+the same object within a file system.</p>
+<h2><a name="generic-pathname-format">Generic pathname format</a> [path.generic]</h2>
+<p><i>pathname:<br>
+            root-name<sub>opt</sub> 
+root-directory<sub>opt</sub> relative-path<sub>opt</sub></i></p>
+<p><i>root-name:<br>
+            </i>An 
+operating system dependent name that identifies the starting location for 
+absolute paths. </p>
+<blockquote>
+  <blockquote>
+<p>[<i>Note:</i> Many operating systems define a name 
+beginning with two <i>directory-separator</i> characters as a <i>root-name</i> 
+that identifies network or other resource locations. Some operating systems define a single letter followed by a colon as a drive 
+specifier - a <i>root-name</i> identifying a specific device such as a disc drive. <i>—end note</i>]</p>
+  </blockquote>
+</blockquote>
+<p><i>root-directory:<br>
+            
+directory-separator</i></p>
+<p><i>relative-path:<br>
+            
+filename<br>
+            relative-path 
+directory-separator<br>
+            relative-path 
+directory-separator filename</i></p>
+<p><i>filename:<br>
+            name<br>
+            </i><code>"."</code><i><br>
+            </i><code>
+".."</code></p>
+<p><i>preferred-separator:<br>
+            </i>An 
+operating system dependent directory separator character. May be a synonym for <i> <code>"/"</code>.</i></p>
+<p><i>directory-separator:<br>
+            <code>"/"<br>
+      "/"</code> directory-separator<br>
+            
+preferred-separator<br>
+            
+preferred-separator directory-separator</i></p>
+<p>Multiple successive <i>directory-separator</i> characters are considered to 
+be the same as one <i>directory-separator</i> character.</p>
+<p>The <i>filename</i>
+<code>"."</code> is considered to be a reference to the current directory. The
+<i>filename</i> <code>".."</code> is considered to be a reference to the 
+parent 
+directory. Specific <i>filenames</i> may have special meanings for a particular 
+operating system.</p>
+<h2><a name="Operating-system-examples">Operating system dependent examples</a> (Informative) [fs.os.examples]</h2>
+<p>Certain features are specified in this reference documentation as being operating system dependent. The following table shows the application of those 
+specifications for operating systems that use the ISO/IEC 9945  or Windows® application program interfaces 
+(APIs).<sup>[footnote1]</sup></p>
+<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td valign="top" align="center">
+    <p><b>Feature</b></td>
+    <td valign="top" align="center">
+    <p><b>Section</b></td>
+    <td valign="top" align="center">
+    <p><b>ISO/IEC 9945<br>
+ POSIX</b>®<b> API</b></td>
+    <td valign="top" align="center">
+    <p><b>Windows</b>®<b> API</b></td>
+    <td valign="top" align="center">
+    <p><b>Notes</b></td>
+  </tr>
+  <tr>
+    <td valign="top">
+    <p><code>path<br>
+ ::value_type</code></td>
+    <td valign="top">
+    <p>[<a href="#class-path">class.path</a>]</td>
+    <td valign="top">
+    <p><code>char</code></td>
+    <td valign="top">
+    <p><code>wchar_t</code></td>
+    <td valign="top">
+    <p> </td>
+  </tr>
+  <tr>
+    <td valign="top">
+    <p><code>path::preferred<br>
+ _separator</code></td>
+    <td valign="top">
+    <p>[<a href="#class-path">class.path</a>]</td>
+    <td valign="top">
+    <p><code>'/'</code></td>
+    <td valign="top">
+    <p><code>L'\\'</code> (single backslash)</td>
+    <td valign="top">
+    <p> </td>
+  </tr>
+  <tr>
+    <td valign="top">
+    <p><code>path("/")<br>
+ .is_absolute()<br>
+    path("c:/")<br>
+ .is_absolute()</code></td>
+    <td valign="top">
+    <p>[<a href="#path-query">path</a><br>
+ <a href="#path-query">.query</a>]</td>
+    <td valign="top">
+    <p><code><br>
+    true<br>
+    <br>
+    false</code></td>
+    <td valign="top">
+    <p><code><br>
+    false<br>
+    <br>
+    true</code></td>
+    <td valign="top">
+    <p> </td>
+  </tr>
+  <tr>
+    <td valign="top">
+    <p><code>path</code> argument disambiguation between generic format and 
+    native format</td>
+    <td valign="top">
+    <p>[<a href="#path-Conversions-to-native-format">path.arg</a><br>
+ <a href="#path-Conversions-to-native-format">.fmt.cvt</a>]</td>
+    <td valign="top">
+    <p>Not required</td>
+    <td valign="top">
+    <p>Not required</td>
+    <td valign="top">
+    <p>There is no need to distinguish between the generic format and native 
+    format for these operating systems.</td>
+  </tr>
+  <tr>
+    <td valign="top">
+    <p><code>path</code> argument format conversion</td>
+    <td valign="top">
+    <p>[<a href="#path-Conversions-to-native-format">path.arg</a><br>
+ <a href="#path-Conversions-to-native-format">.fmt.cvt</a>]</td>
+    <td valign="top">
+    <p>No conversion performed</td>
+    <td valign="top">
+    <p>No conversion performed</td>
+    <td valign="top">
+    <p>The generic format is already acceptable to the native API of these operating systems.</td>
+  </tr>
+  <tr>
+    <td valign="top">
+    <p><code>path<br>
+ ("/cats/jane")<br>
+ .c_str()<br>
+    path|<br>
+ ("/cats/jane/")<br>
+ .c_str()</code></td>
+    <td valign="top">
+    <p>[<a href="#path-Conversions-to-native-format">path.arg</a><br>
+ <a href="#path-Conversions-to-native-format">.fmt.cvt</a>]</td>
+    <td valign="top"> 
+    <p> <code><br>
+    <br>
+    "/cats/jane"<br>
+    <br>
+    <br>
+    "/cats/jane/"</code></td>
+    <td valign="top">
+    <p><code><br>
+    <br>
+    L"/cats/jane"<br>
+    <br>
+    <br>
+    L"/cats/jane/"</code></td>
+    <td valign="top">
+    <p>These operating systems accept the same native separator between 
+    directory names and a final file name, so no format conversion is performed. 
+    Other operating systems might require conversion.</td>
+  </tr>
+  <tr>
+    <td valign="top">
+    <p>Format conversion by <code>path</code> native format observers</td>
+    <td valign="top">
+    <p>[<a href="#path-native-format-observers">path.native</a><br>
+ <a href="#path-native-format-observers">.obs</a>]</td>
+    <td valign="top">
+    <p>No conversion performed</td>
+    <td valign="top">
+    <p>No conversion performed</td>
+    <td valign="top">
+    <p>For efficiency, <code>path</code> objects are required to store pathnames in the native 
+    format regardless of operating system.</td>
+  </tr>
+  <tr>
+    <td valign="top">
+    <p>Format conversion by <code>path</code> generic format observers</td>
+    <td valign="top">
+    <p>[<a href="#path-generic-format-observers">path</a><br>
+ <a href="#path-generic-format-observers">.generic</a><br>
+ <a href="#path-generic-format-observers">.obs</a>]</td>
+    <td valign="top">
+    <p>No conversion performed</td>
+    <td valign="top">
+    <p>Backslashes converted to slashes</td>
+    <td valign="top">
+    <p> </td>
+  </tr>
+  <tr>
+    <td valign="top">
+    <p><code>p.<br>
+ make_preferred()</code></td>
+    <td valign="top">
+    <p>[<a href="#path-modifiers">fs.path</a><br>
+ <a href="#path-modifiers">.modifiers</a>]</td>
+    <td valign="top">
+    <p>No change</td>
+    <td valign="top">
+    <p>Slashes converted to backslashes</td>
+    <td valign="top">
+    <p> </td>
+  </tr>
+  <tr>
+    <td valign="top">
+    <p>Characters prohibited in filenames</td>
+    <td valign="top">
+    <p>[<a href="#filename">fs.def</a><br>
+ <a href="#filename">.filename</a>]</td>
+    <td valign="top">
+    <p>0x00, <code>'/'</code></td>
+    <td valign="top">
+    <p>0x00-0x1F, <code>'"'</code>, <code>'*'</code>,<code> '*'</code>, 
+    <code>'<'</code>, 
+    <code>'>'</code>, <code>'?'</code>, <code>'\\'</code> (single backslash), 
+    <code>'/'</code>, <code>'|'</code></td>
+    <td valign="top">
+    <p>Many operating systems prohibit the ASCII control characters (0x00-0x1F) 
+    in filenames.</td>
+  </tr>
+  <tr>
+    <td valign="top">
+    <p>Initial imbued <code>path</code> locale</td>
+    <td valign="top">
+    <p>[<a href="#path-imbued-locale">path</a><br>
+ <a href="#path-imbued-locale">.imbued</a><br>
+ <a href="#path-imbued-locale">.locale</a>]</td>
+    <td valign="top"> 
+    <p> <code>std::<br>
+  locale("")<br>
+    </code><sup>[footnote 2]</sup></td>
+    <td valign="top">
+    <p>Implementation supplied locale using <code>MultiByte<br>
+  ToWideChar</code> 
+    and <code>WideChar<br>
+  ToMultiByte</code> with a codepage of <code>CP_ACP</code> 
+    if <code>AreFileApisANSI</code> is true, otherwise codepage <code>CP_OEMCP</code>.<sup>[footnote 
+    3]</sup></td>
+    <td valign="top">
+    <p>Apple OS X®:  Implementation supplied locale providing UTF-8 <code>codecvt</code> 
+    facet.<sup>[footnote 4]</sup></td>
+  </tr>
+</table>
+<p><sup>[footnote1]</sup> OS X® and Windows® are examples of commercially 
+available operating systems. This information is given for the convenience of 
+users of this document and does not constitute an endorsement by ISO or IEC of 
+these products.</p>
+<p><sup>[footnote 2] </sup>Rationale: ISO C specifies <code>std::locale("")</code> as "the locale-specific native 
+environment", while ISO/IEC 9945 says it "Specifies an implementation-defined native 
+environment."</p>
+<p><sup>[footnote 3] </sup>Rationale: This is the current behavior of C and C++ 
+standard library functions that perform file operations using narrow character 
+strings to identify paths. Changing this behavior would be surprising and at 
+variance with existing code, particularly where user input is involved.</p>
+<p><sup>[footnote 4]</sup> Rationale: Vendor's documentation states "All BSD 
+system functions expect their string parameters to be in UTF-8 encoding and 
+nothing else."</p>
+<h2><a name="Header-filesystem-synopsis">Header <code><boost/filesystem.hpp></code> synopsis</a> 
+[filesystem.synopsis]</h2>
+
+
+
+<pre>namespace boost
+{
+  namespace filesystem
+  {
+    class <a href="#class-path">path</a>;
+    
+    bool lexicographical_compare(path::iterator first1, path::iterator last1,
+      path::iterator first2, path::iterator last2);
+    void swap(path& lhs, path& rhs);
+    std::size_t <a href="#hash_value">hash_value</a>(const path& p);
+
+    bool operator==(const path& lhs, const path& rhs);
+    bool operator!=(const path& lhs, const path& rhs);
+    bool operator< (const path& lhs, const path& rhs);
+    bool operator<=(const path& lhs, const path& rhs);
+    bool operator> (const path& lhs, const path& rhs);
+    bool operator>=(const path& lhs, const path& rhs);
+
+    path operator/ (const path& lhs, const path& rhs);
+    
+    std::ostream&  operator<<( std::ostream& os, const path& p );
+    std::wostream& operator<<( std::wostream& os, const path& p );
+    std::istream&  operator>>( std::istream& is, path& p );
+    std::wistream& operator>>( std::wistream& is, path& p )
+
+    class <a href="#Class-filesystem_error">filesystem_error</a>;      
+    class <a href="#Class-directory_entry">directory_entry</a>;
+
+    class <a href="#Class-directory_iterator">directory_iterator</a>;
+
+    // enable c++11 range-based for statements
+    const directory_iterator& <a href="#directory_iterator-non-member-functions">begin</a>(const directory_iterator& iter);
+    directory_iterator <a href="#directory_iterator-non-member-functions">end</a>(const directory_iterator&);
+
+
+    // enable BOOST_FOREACH
+    directory_iterator& range_begin(directory_iterator& iter);
+    directory_iterator range_begin(const directory_iterator& iter);
+    directory_iterator range_end(const directory_iterator&);
+
+    class <a href="#Class-recursive_directory_iterator">recursive_directory_iterator</a>;
+
+    // enable c++11 range-based for statements
+    const recursive_directory_iterator&
+      <a href="#recursive_directory_iterator-non-member-functions">begin</a>(const recursive_directory_iterator& iter);
+    recursive_directory_iterator
+      <a href="#recursive_directory_iterator-non-member-functions">end</a>(const recursive_directory_iterator&);
+
+
+    // enable BOOST_FOREACH
+    recursive_directory_iterator&
+      range_begin(recursive_directory_iterator& iter);
+    recursive_directory_iterator
+      range_begin(const recursive_directory_iterator& iter);
+    recursive_directory_iterator
+      range_end(const recursive_directory_iterator&);
+
+    enum <a name="file_type" href="#Enum-file_type">file_type</a>
+    {
+      status_error, file_not_found, regular_file, directory_file,
+      symlink_file, block_file, character_file, fifo_file, socket_file,
+      type_unknown
+    };
+
+    enum <a href="#Enum-perms">perms</a>
+    {
+      no_perms,
+      owner_read, owner_write, owner_exe, owner_all,
+      group_read, group_write, group_exe, group_all,
+      others_read, others_write, others_exe, others_all, all_all,
+      set_uid_on_exe, set_gid_on_exe, sticky_bit,
+      perms_mask, perms_not_known,
+      add_perms, remove_perms, symlink_perms
+    };
+
+    class <a href="#file_status">file_status</a>;
+
+    struct <a name="space_info">space_info</a>  // returned by <a href="#space" style="text-decoration: none">space</a> function
+    {
+      uintmax_t capacity;
+      uintmax_t free; 
+      uintmax_t available; // free space available to non-privileged process
+    };
+
+    enum class <a name="copy_option">copy_option</a>
+    {
+      none
+      fail_if_exists = none,
+      overwrite_if_exists
+    };
+
+    enum class <a name="symlink_option">symlink_option</a>
+    {
+      none
+      no_recurse = none,
+      recurse
+    };
+
+    // <a href="#Operational-functions">operational functions</a>
+
+    path         <a href="#absolute">absolute</a>(const path& p, const path& base=current_path());
+
+    path         <a href="#canonical">canonical</a>(const path& p, const path& base = current_path());
+    path         <a href="#canonical">canonical</a>(const path& p, system::error_code& ec);
+    path         <a href="#canonical">canonical</a>(const path& p, const path& base,
+                   system::error_code& ec);
+
+    void         <a href="#copy">copy</a>(const path& from, const path& to);
+    void         <a href="#copy">copy</a>(const path& from, const path& to,
+                   system::error_code& ec);
+
+    void         <a href="#create_directory">copy_directory</a>(const path& from, const path& to);
+    void         <a href="#create_directory">copy_directory</a>(const path& from, const path& to,
+                   system::error_code& ec);
+
+    void         <a href="#copy_file">copy_file</a>(const path& from, const path& to);
+    void         <a href="#copy_file">copy_file</a>(const path& from, const path& to,
+                   system::error_code& ec);
+    void         <a href="#copy_file">copy_file</a>(const path& from, const path& to,
+                   <a href="#copy_option">copy_option</a> option);
+    void         <a href="#copy_file">copy_file</a>(const path& from, const path& to,
+                   <a href="#copy_option">copy_option</a> option, system::error_code& ec);
+
+    void         <a href="#copy_symlink">copy_symlink</a>(const path& existing_symlink,
+                   const path& new_symlink);
+    void         <a href="#copy_symlink">copy_symlink</a>(const path& existing_symlink,
+                   const path& new_symlink, system::error_code& ec);
+
+    bool         <a href="#create_directories">create_directories</a>(const path& p);
+    bool         <a href="#create_directories">create_directories</a>(const path& p,
+                   system::error_code& ec);
+
+    bool         <a href="#create_directory">create_directory</a>(const path& p);
+    bool         <a href="#create_directory">create_directory</a>(const path& p, system::error_code& ec);
+
+    void         <a href="#create_directory_symlink">create_directory_symlink</a>(const path& to,
+                   const path& new_symlink);
+    void         <a href="#create_directory_symlink">create_directory_symlink</a>(const path& to,
+                   const path& new_symlink, system::error_code& ec);
+
+    void         <a href="#create_hard_link">create_hard_link</a>(const path& to, const path& new_hard_link);
+    void         <a href="#create_hard_link">create_hard_link</a>(const path& to, const path& new_hard_link,
+                                  system::error_code& ec);
+
+    void         <a href="#create_symlink">create_symlink</a>(const path& to, const path& new_symlink);
+    void         <a href="#create_symlink">create_symlink</a>(const path& to, const path& new_symlink,
+                                system::error_code& ec);
+
+    path         <a href="#current_path">current_path</a>();
+    path         <a href="#current_path">current_path</a>(system::error_code& ec);
+    void         <a href="#current_path">current_path</a>(const path& p);
+    void         <a href="#current_path">current_path</a>(const path& p, system::error_code& ec);
+
+    bool         <a href="#exists">exists</a>(file_status s) noexcept;
+    bool         <a href="#exists">exists</a>(const path& p);
+    bool         <a href="#exists">exists</a>(const path& p, system::error_code& ec) noexcept;
+
+    bool         <a href="#equivalent">equivalent</a>(const path& p1, const path& p2);
+    bool         <a href="#equivalent">equivalent</a>(const path& p1, const path& p2,
+                   system::error_code& ec);
+
+    uintmax_t    <a href="#file_size">file_size</a>(const path& p);
+    uintmax_t    <a href="#file_size">file_size</a>(const path& p, system::error_code& ec);
+
+    uintmax_t    <a href="#hard_link_count">hard_link_count</a>(const path& p);
+    uintmax_t    <a href="#hard_link_count">hard_link_count</a>(const path& p, system::error_code& ec);
+
+    const path&  <a href="#initial_path">initial_path</a>();
+    const path&  <a href="#initial_path">initial_path</a>(<code>system::error_code& ec</code>);
+
+    bool         <a href="#is_directory">is_directory</a>(file_status s) noexcept;
+    bool         <a href="#is_directory2">is_directory</a>(const path& p);
+    bool         <a href="#is_directory2">is_directory</a>(const path& p,
+                   system::error_code& ec) noexcept;
+
+    bool         <a href="#is_empty">is_empty</a>(const path& p);
+    bool         <a href="#is_empty">is_empty</a>(const path& p, system::error_code& ec);
+
+    bool         <a href="#is_other">is_other</a>(file_status s) noexcept;
+    bool         <a href="#is_other2">is_other</a>(const path& p,);
+    bool         <a href="#is_other2">is_other</a>(const path& p, system::error_code& ec) noexcept;
+
+    bool         <a href="#is_regular_file">is_regular_file</a>(file_status s) noexcept; 
+    bool         i<a href="#is_regular_file2">s_regular_file</a>(const path& p);
+    bool         i<a href="#is_regular_file2">s_regular_file</a>(const path& p,
+                   system::error_code& ec) noexcept;
+
+    bool         <a href="#is_symlink">is_symlink</a>(file_status s noexcept);
+    bool         <a href="#is_symlink2">is_symlink</a>(const path& p);
+    bool         <a href="#is_symlink2">is_symlink</a>(const path& p, system::error_code& ec) noexcept;
+
+    std::time_t  <a href="#last_write_time">last_write_time</a>(const path& p);
+    std::time_t  <a href="#last_write_time">last_write_time</a>(const path& p, system::error_code& ec);
+    void         <a href="#last_write_time2">last_write_time</a>(const path& p, const std::time_t new_time);
+    void         <a href="#last_write_time2">last_write_time</a>(const path& p, const std::time_t new_time,
+                                 system::error_code& ec);
+
+    path         <a href="#read_symlink">read_symlink</a>(const path& p);
+    path         <a href="#read_symlink">read_symlink</a>(const path& p, system::error_code& ec);
+    
+    <span style="background-color: #E8FFE8">path         </span><span style="background-color: #E8FFE8">relative(const</span><span style="background-color: #E8FFE8"> path& p, </span><span style="background-color: #E8FFE8">system::error_code</span><span style="background-color: #E8FFE8">& </span><span style="background-color: #E8FFE8">ec</span><span style="background-color: #E8FFE8">);</span>
+    <span style="background-color: #E8FFE8">path         </span><span style="background-color: #E8FFE8">relative(const</span><span style="background-color: #E8FFE8"> path& p, const path& base=</span><span style="background-color: #E8FFE8">current_path</span><span style="background-color: #E8FFE8">());</span>
+    <span style="background-color: #E8FFE8">path         </span><span style="background-color: #E8FFE8">relative(const</span><span style="background-color: #E8FFE8"> path& p,</span>
+                     <span style="background-color: #E8FFE8">const path& base, </span><span style="background-color: #E8FFE8">system::error_code</span><span style="background-color: #E8FFE8">& </span><span style="background-color: #E8FFE8">ec</span><span style="background-color: #E8FFE8">);</span>
+
+    bool         <a href="#remove">remove</a>(const path& p);
+    bool         <a href="#remove">remove</a>(const path& p, system::error_code& ec);
+
+    uintmax_t    <a href="#remove_all">remove_all</a>(const path& p);
+    uintmax_t    <a href="#remove_all">remove_all</a>(const path& p, system::error_code& ec);
+
+    void         <a href="#rename">rename</a>(const path& from, const path& to);
+    void         <a href="#rename">rename</a>(const path& from, const path& to,
+                   system::error_code& ec);
+
+    void         <a href="#resize_file">resize_file</a>(const path& p, uintmax_t size);
+    void         <a href="#resize_file2">resize_file</a>(const path& p, uintmax_t size,
+                   system::error_code& ec);
+
+    <a href="#space_info">space_info</a>   <a href="#space">space</a>(const path& p);
+    <a href="#space_info">space_info</a>   <a href="#space">space</a>(const path& p, system::error_code& ec);
+
+    <a href="#file_status">file_status</a>  <a href="#status">status</a>(const path& p);
+    <a href="#file_status">file_status</a>  <a href="#status">status</a>(const path& p, system::error_code& ec) noexcept;
+
+    bool         <a href="#status_known">status_known</a>(file_status s) noexcept;
+
+    <a href="#file_status">file_status</a>  <a href="#symlink_status">symlink_status</a>(const path& p);
+    <a href="#file_status">file_status</a>  <a href="#symlink_status">symlink_status</a>(const path& p,
+                   system::error_code& ec) noexcept;
+
+    path         <a href="#system_complete">system_complete</a>(const path& p);
+    path         <a href="#system_complete">system_complete</a>(const path& p, system::error_code& ec);
+
+    path         <a href="#temp_directory_path">temp_directory_path</a>();
+    path         <a href="#temp_directory_path">temp_directory_path</a>(system::error_code& ec);
+
+    path         <a href="#unique_path">unique_path</a>(const path& model="%%%%-%%%%-%%%%-%%%%");
+    path         <a href="#unique_path">unique_path</a>(const path& model, system::error_code& ec);
+
+    <span style="background-color: #E8FFE8">path         </span><span style="background-color: #E8FFE8">weakly_canonical(const</span><span style="background-color: #E8FFE8"> path& p);</span>
+    <span style="background-color: #E8FFE8">path         </span><span style="background-color: #E8FFE8">weakly_canonical(const</span><span style="background-color: #E8FFE8"> path& p, </span><span style="background-color: #E8FFE8">system::error_code</span><span style="background-color: #E8FFE8">& </span><span style="background-color: #E8FFE8">ec</span><span style="background-color: #E8FFE8">);</span>
+
+  }  // namespace filesystem
+}  // namespace boost</pre>
+
+
+
+<h2><a name="Error-reporting">Error reporting</a> [fs.err.report]</h2>
+<p>Filesystem library functions often provide two overloads, one that 
+throws an exception to report file system errors, and another that sets an <code>error_code</code>.</p>
+<blockquote>
+<p>[<i>Note:</i> This supports two common use cases:</p>
+<ul>
+  <li>
+  <p>Uses where file system 
+errors are truly exceptional and indicate a serious failure. Throwing an 
+  exception is the most appropriate response. This is the preferred default for 
+  most everyday programming.<br>
+ </li>
+  <li>
+  <p>Uses where file system system errors are routine and do not necessarily represent 
+  failure. Returning an error code is the most appropriate response. This allows 
+  application specific error handling, including simply ignoring the error.</li>
+</ul>
+  <p><i>—end note</i>]</p>
+</blockquote>
+<p>Functions <b>not</b> having an argument of type <code>system::error_code&</code> report errors as follows, unless otherwise specified:</p>
+  <ul>
+  <li>
+  <p>When a call by the 
+  implementation to an operating system or other underlying API results in an 
+  error that prevents the function from meeting its specifications, an exception 
+  of type
+<code>filesystem_error</code> is thrown.<br>
+ </li>
+  <li>
+  <p>Failure to allocate storage is reported by throwing an exception as described in the C++ standard, 
+  17.6.4.10 [res.on.exception.handling].<br>
+ </li>
+  <li>
+  <p>Destructors throw nothing.</li>
+  </ul>
+  <p>Functions having an argument of type <code>system::error_code&</code> report errors as follows, unless otherwise 
+  specified:</p>
+<ul>
+  <li>
+  <p>If a call by the 
+  implementation to an operating system or other underlying API results in an 
+  error that prevents the function from meeting its specifications, the
+<code>system::error_code&</code> argument is set as 
+  appropriate appropriate for the specific error. Otherwise, <code>clear()</code> 
+  is called on the
+<code>system::error_code&</code> argument.<br>
+ </li>
+  <li>
+  <p>Failure to allocate storage is reported by 
+  throwing an exception as described in the C++ standard, 
+  17.6.4.10 [res.on.exception.handling].</li>
+</ul>
+<h2><a name="class-path">Class <code>path</code> [class.path]</a></h2>
+<p>An object of class <code>path</code> represents a <a href="#path">path</a>, 
+and contains a <a href="#pathname">pathname</a> Such an object is concerned only with the lexical and syntactic aspects 
+of a path. The path does not necessarily exist in external storage, and the 
+pathname is not necessarily valid for the current operating 
+system or for a particular file system.</p>
+
+<pre>namespace boost
+{
+  namespace filesystem
+  {
+      class path
+      {
+      public:
+        typedef <b><i><a href="#value_type">see below</a></i></b>                                    value_type;
+        typedef std::basic_string<value_type>                string_type;
+        typedef std::codecvt<wchar_t, char, std::mbstate_t>  codecvt_type;
+        constexpr value_type                                 preferred_separator;
+
+        // <a href="#path-constructors">constructors</a> and destructor
+        path();
+        path(const path& p);
+        path(path&& p) noexcept;
+
+        template <class <a href="#Source">Source</a>>
+          path(Source const& source, const codecvt_type& cvt=codecvt());
+
+        template <class <a href="#InputIterator">InputIterator</a>>
+          path(InputIterator begin, InputIterator end,
+            const codecvt_type& cvt=codecvt());
+
+       ~path();
+
+        // <a href="#path-assignments">assignments</a>
+        path& operator=(const path& p);
+        path& operator=(path&& p) noexcept;
+
+        template <class <a href="#Source">Source</a>>
+          path& operator=(Source const& source);
+
+        template <class <a href="#Source">Source</a>>
+          path& assign(Source const& source, const codecvt_type& cvt)
+
+        template <class <a href="#InputIterator">InputIterator</a>>
+          path& assign(InputIterator begin, InputIterator end,
+            const codecvt_type& cvt=codecvt());
+
+        // <a href="#path-appends">appends</a>
+        path& operator/=(const path& p);
+
+        template <class <a href="#Source">Source</a>>
+          path& operator/=(Source const& source);
+
+        template <class <a href="#Source">Source</a>>
+          path& append(Source const& source, const codecvt_type& cvt);
+
+        template <class <a href="#InputIterator">InputIterator</a>>
+          path& append(InputIterator begin, InputIterator end,
+            const codecvt_type& cvt=codecvt());
+
+        // <a href="#path-concatenation">concatenation</a>
+        path& operator+=(const path& x);
+        path& operator+=(const string_type& x);
+        path& operator+=(const value_type* x);
+        path& operator+=(value_type x);
+        template <class Source>
+          path& operator+=(Source const& x);
+        template <class CharT>
+          path& operator+=(CharT x);
+        template <class Source>
+          path& concat(Source const& x, const codecvt_type& cvt);
+        template <class InputIterator>
+          path& concat(InputIterator begin, InputIterator end);
+        template <class InputIterator>
+          path& concat(InputIterator begin, InputIterator end,
+            const codecvt_type& cvt);
+        
+        // <a href="#path-modifiers">modifiers</a>
+        void  <a href="#path-clear">clear</a>();
+        path& <a href="#path-make_preferred">make_preferred</a>();
+        path& <a href="#path-remove_filename">remove_filename</a>();
+        path& <a href="#path-replace_extension">replace_extension</a>(const path& new_extension = path());
+        void  <a href="#path-swap">swap</a>(path& rhs);
+
+        // lexical operations
+        <span style="background-color: #E8FFE8">path </span><span style="background-color: #E8FFE8">lexically_normal</span><span style="background-color: #E8FFE8">() const;</span>
+        <span style="background-color: #E8FFE8">path </span><span style="background-color: #E8FFE8">lexically_relative(const</span><span style="background-color: #E8FFE8"> path& base) const;</span>
+
+        // <a href="#path-native-format-observers">native format observers</a>
+        const string_type&  <a href="#native">native</a>() const noexcept;  // native format, encoding
+        const value_type*   <a href="#c_str">c_str</a>() const noexcept;   // native().c_str()
+        <span style="background-color: #E8FFE8">string_type::size_type</span><span style="background-color: #E8FFE8"> </span><a href="#path-size"><span style="background-color: #E8FFE8">size</span></a><span style="background-color: #E8FFE8">() const noexcept; // </span><span style="background-color: #E8FFE8">native().size</span><span style="background-color: #E8FFE8">()</span>
+
+        template <class String>
+          String  <a href="#string-template">string</a>(const codecvt_type& cvt=codecvt()) const;
+        string    <a href="#string">string</a>(const codecvt_type& cvt=codecvt()) const;
+        wstring   <a href="#wstring">wstring</a>(const codecvt_type& cvt=codecvt()) const;
+        u16string <a href="#u16string">u16string</a>() const;
+        u32string <a href="#u32wstring">u32string</a>() const;
+
+        // <a href="#path-generic-format-observers">generic format observers</a>
+        template <class String>
+          String  <a href="#generic_string-template">generic_string</a>() const;
+
+        string    <a href="#generic_string">generic_string</a>(const codecvt_type& cvt=codecvt()) const; 
+        wstring   <a href="#generic_wstring">generic_wstring</a>(const codecvt_type& cvt=codecvt()) const;
+        u16string <a href="#generic_u16string">generic_u16string</a>()
+        u32string <a href="#generic_u32wstring">generic_u32string</a>()
+
+        // <a href="#path-compare">compare</a>
+        int   <a href="#path-compare">compare</a>(const path& p) const noexcept;
+        int   <a href="#path-compare">compare</a>(const std::string& s) const;
+        int   <a href="#path-compare">compare</a>(const value_type* s) const;
+
+        // <a href="#path-decomposition">decomposition</a>
+        path  <a href="#path-root_name">root_name</a>() const;
+        path  <a href="#path-root_directory">root_directory</a>() const;
+        path  <a href="#path-root_path">root_path</a>() const;
+        path  <a href="#path-relative_path">relative_path</a>() const;
+        path  <a href="#path-parent_path">parent_path</a>() const;
+        path  <a href="#path-filename">filename</a>() const;
+        path  <a href="#path-stem">stem</a>() const;
+        path  <a href="#path-extension">extension</a>() const;
+
+        // <a href="#path-query">query</a>
+        bool <a href="#path-query">empty</a>() const;
+        bool <a href="#path-has_root_name">has_root_name</a>() const;
+        bool <a href="#path-has_root_directory">has_root_directory</a>() const;
+        bool <a href="#path-has_root_path">has_root_path</a>() const;
+        bool <a href="#path-has_relative_path">has_relative_path</a>() const;
+        bool <a href="#path-has_parent_path">has_parent_path</a>() const;
+        bool <a href="#path-has_filename">has_filename</a>() const;
+        bool <a href="#path-has_stem">has_stem</a>() const;
+        bool <a href="#path-has_extension">has_extension</a>() const;
+        bool <a href="#path-is_absolute">is_absolute</a>() const;
+        bool <a href="#path-is_relative">is_relative</a>() const;
+
+        // <a href="#path-iterators">iterators</a>
+        class iterator;
+        typedef iterator const_iterator;
+        class reverse_iterator;
+        typedef reverse_iterator const_reverse_iterator;
+
+        iterator begin() const;
+        iterator end() const;
+        reverse_iterator rbegin() const;
+        reverse_iterator rend() const;
+        
+        // <a href="#path-imbued-locale">imbued locale</a>
+        static std::locale <a href="#path-imbue">imbue</a>(const std::locale& loc);
+        static const codecvt_type & <a href="#path-codecvt">codecvt</a>();
+
+      private:
+        string_type pathname;  // <b><i>exposition only</i></b>
+      };
+
+  }  // namespace filesystem
+}  // namespace boost</pre>
+
+<p><code><a name="value_type">value_type</a></code> is a <code>typedef</code> for the 
+character type used by the operating system to represent pathnames.</p>
+
+
+<h3><a name="path-Usage"><code>path</code> Usage concerns</a> [path.usage]</h3>
+
+<h4>Multithreading concerns</h4>
+
+<p>Filesystem library functions are not protected against data races. [Modifying 
+an object of a Filesystem library type that is shared between threads risks 
+undefined behavior unless objects of that type are explicitly specified as being 
+sharable without data races or the user supplies a locking mechanism. <i>—end 
+note</i>] [<i>Note:</i> Thus the Filesystem library behaves as if it were part 
+of the standard library, and C++ standard 17.6.4.10 <i>Shared objects and the 
+library</i> [res.on.objects] would thus apply.  <i>—end note</i>]</p>
+
+<h4>Windows concerns</h4>
+
+<p>Visual C++ at least through version 2012 does not employ C++11-style static 
+initialization locks, so the initialization of <code>path::codecvt()</code> can 
+race, either with itself or <code>path::imbue::()</code> if they are called from 
+a different thread. A workaround is to call:</p>
+
+<blockquote>
+<p><code>path::codecvt();  // ensure VC++ does not race during 
+initialization.</code></p>
+
+</blockquote>
+<p>in the main thread before launching any additional threads. [<i>Note:</i> The 
+obvious fix of the Filesystem implementation doing the locking doesn't work 
+because of unrelated problems with the Microsoft compiler; for static linking 
+the runtime tries to do the initialization before main() starts, but doesn't 
+permit operating system lock calls at that time.  <i>—end note</i>]</p>
+
+<h4>POSIX concerns</h4>
+
+<p>Filesystem library initialization may throw an exception on POSIX 
+systems (e.g. Linux, but not Mac OS X) that use environmental variables to 
+determine the encoding of paths. This happens when <code>std::locale("")</code> 
+throws because an environmental variable such as LANG is set to an invalid 
+value, so it can affect any use of  <code>std::locale("")</code>, not just 
+the Filesystem library. Filesystem uses lazy initialization so the exception is 
+only thrown if a valid <code>std::locale("")</code> is actually needed, and also 
+so that the exception is thrown after <code>main()</code> starts.</p>
+
+<p>Rather than waiting until a call to some Filesystem library function 
+unexpectedly triggers the exception when it calls <code>path::codecvt()</code>, 
+a program that needs be highly robust against environmental variable problems 
+may want to preemptively call <code>std::locale("")</code> within a try block, 
+catch the exception, and diagnose or repair the invalid environmental variable.</p>
+
+<h3><a name="path-Conversions"><code>path</code> Conversions</a> [path.cvt]</h3>
+<h4><code>path</code> argument conversions [<a name="path.arg.convert">path.arg.cvt</a>]</h4>
+<h5><a name="path-Conversions-to-native-format"><code>path</code> argument 
+format conversions</a> [path.arg.fmt.cvt]</h5>
+<p>Member function arguments that take character sequences representing paths 
+may use the <a href="#generic-pathname-format">generic pathname format</a> or 
+the <a href="#native-pathname-format">native pathname format</a>. Iff such  arguments 
+are in the generic format and the generic format is not acceptable to the 
+operating system as a native path,  conversion to native format shall be performed 
+during the processing of the argument. See [<a href="#Operating-system-examples">fs.os.examples</a>].</p>
+<blockquote>
+<p>[<i>Note:</i> Depending on the operating system, there may be no unambiguous way for an implementation to 
+always be able to distinguish between native format and generic format arguments. 
+This is by design as it simplifies use for operating systems that do not require 
+disambiguation. Should an implementation encounter an 
+operating system where disambiguation is required, an implementation can defined 
+an extension to distinguish between the formats. <i>
+—end note</i>]</p>
+</blockquote>
+
+<p>If the native format requires 
+paths for regular files to be formatted differently from paths for directories, the 
+path shall be treated as a directory path if last element is a separator, 
+otherwise it shall be treated as a regular file path.</p>
+
+<h5><a name="path-Encoding-conversions"><code>
+path</code> argument encoding conversions</a> 
+[path.arg.encoding.cvt]</h5>
+<p>For member function arguments that take character sequences representing 
+paths, if the value type of the argument is not <code>value_type and </code>one 
+of the value types is <code>char</code> and the other is <code>wchar_t</code>, conversion to <code>value_type</code> 
+shall be performed by the <code>path::codecvt()</code> facet. ([<a href="#path-imbued-locale">path.imbued.locale</a>]).</p>
+<h4><a name="path-Conversions-to-generic-format"><code>path</code> Conversions 
+to generic format</a> [fs.cvt.to.generic]</h4>
+<p><a href="#path-generic-format-observers">Generic format observer</a> functions 
+shall return strings formatted according to the <a href="#generic-pathname-format">generic pathname format</a> 
+using <i>preferred-separator</i>. See [<a href="#Operating-system-examples">fs.os.examples</a>].</p>
+<h3><a name="path-Requirements"><code>path</code> Requirements</a> [path.req]</h3>
+<p>Template parameters named <code><a name="InputIterator">InputIterator</a></code> are required meet the 
+requirements for a C++ standard library <code>RandomIterator</code> compliant iterator. The iterator's value type is required to be <code>char</code>, <code>wchar_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</p>
+<p>Template parameters named <code><a name="Source">Source</a></code> are required to be one of:</p>
+<ul>
+  <li>
+  <p>A container with a value type of <code>char</code>, <code>
+  wchar_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</li>
+  <li>
+  <p>An iterator for a null terminated byte-string. The value type is required 
+  to be <code>char</code>, <code>wchar_t</code>, <code>char16_t</code>, or <code>
+  char32_t</code>.</li>
+  <li>
+  <p>A C-array. The value type is required to be <code>char</code>, <code>
+  wchar_t</code>, <code>char16_t</code>, or <code>char32_t</code>.</li>
+  <li>
+  <p>A <code>boost::filesystem::directory_entry</code>.</li>
+</ul>
+
+<h3> <a name="path-constructors"> <code>
+<font size="4">path</font></code> constructors</a> [path.construct]</h3>
+
+<pre>template <class <a href="#Source">Source</a>>
+  path(Source const& source, const codecvt_type& cvt=codecvt());</pre>
+
+
+<pre>template <class <a href="#InputIterator">InputIterator</a>>
+  path(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());</pre>
+
+<blockquote>
+  <p><i>Effects:</i> Stores the contents [<code>begin</code>,<code>end</code>) 
+  or <code>source</code> in <code>pathname</code>, converting format and 
+  encoding if required ([<a href="#path.arg.convert">path.arg.convert</a>]).</p>
+</blockquote>
+<h3> <a name="path-assignments"> <code>
+<font size="4">path</font></code> assignments</a> [path.assign]</h3>
+
+<pre>template <class <a href="#Source">Source</a>>
+  path& operator=(Source const& source);
+  template <class <a href="#Source">Source</a>>
+  path& assign(Source const& source, const codecvt_type& cvt);
+  template <class <a href="#InputIterator">InputIterator</a>>
+  path& assign(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());</pre>
+
+<blockquote>
+  <p><i>Effects:</i> Stores the contents [<code>begin</code>,<code>end</code>) 
+  or <code>source</code> in <code>pathname</code>, converting format and 
+  encoding if required ([<a href="#path.arg.convert">path.arg.convert</a>]). </p>
+  <p>
+  <i>Returns: </i><code>*this</code></p>
+  </blockquote>
+<h3><a name="path-appends"><code><font size="4"> path</font></code> appends</a> 
+[path.append]</h3>
+  <p>The append operations use <code>
+  operator/=</code> to denote their semantic effect of appending <i>
+  preferred-separator</i> when needed. </p>
+
+<pre>path& operator/=(const path& p);</pre>
+
+<blockquote>
+  <p><i>Effects:</i></p>
+  <blockquote>
+    <p>Appends <code>path::preferred_separator</code> to <code>pathname</code>, 
+    converting format and encoding if required ([<a href="#path.arg.convert">path.arg.convert</a>]), unless:</p>
+    <ul>
+    <li>
+    <p>an added separator 
+    would be redundant, or</li>
+    <li>
+    <p>would change an relative path to an absolute path, or</li>
+    <li>
+    <p><code>p.empty()</code>, or</li>
+    <li>
+    <p><code>*p.native().cbegin()</code> is a directory separator.</li>
+  </ul>
+    <p>Then appends <code>p.native()</code> to <code>pathname</code>.</p>
+  </blockquote>
+  <p><i>Returns: </i><code>*this</code></p>
+</blockquote>
+
+<pre>template <class <a href="#Source">Source</a>>
+  path& operator/=(Source const & source);
+  template <class <a href="#Source">Source</a>>
+  path& append(Source const & source, const codecvt_type& cvt);
+  template <class <a href="#InputIterator">InputIterator</a>>
+  path& append(InputIterator begin, InputIterator end, const codecvt_type& cvt=codecvt());</pre>
+
+<blockquote>
+  <p><i>Effects:</i></p>
+  <blockquote>
+    <p>Appends <code>path::preferred_separator</code> to <code>pathname</code>, converting 
+    format and encoding if required ([<a href="#path.arg.convert">path.arg.convert</a>]), unless:</p>
+    <ul>
+    <li>
+    <p>an added separator 
+    would be redundant, or</li>
+    <li>
+    <p>would change an relative path to an absolute path, or</li>
+    <li>
+    <p><code>p.empty()</code>, or</li>
+    <li>
+    <p><code>*p.native().cbegin()</code> is a separator.</li>
+  </ul>
+    <p>Appends the contents [<code>begin</code>,<code>end</code>) 
+  or <code>source</code> to <code>pathname</code>, converting format and 
+    encoding if required ([<a href="#path.arg.convert">path.arg.convert</a>]).</p>
+  </blockquote>
+  <p><i>Returns: </i><code>*this</code></p>
+  </blockquote>
+  
+<h3><a name="path-concatenation"><code>path</code> concatenation</a> [path.concat]</h3>
+
+<pre>path& operator+=(const path& x);
+path& operator+=(const string_type& x);
+path& operator+=(const value_type* x);
+path& operator+=(value_type x);
+template <class Source>
+  path& operator+=(Source const& x);
+template <class CharT>
+  path& operator+=(CharT x);
+template <class InputIterator>
+  path& concat(InputIterator begin, InputIterator end);
+template <class InputIterator>
+  path& concat(InputIterator begin, InputIterator end, const codecvt_type& cvt);</pre>
+
+<blockquote><p><i>Postcondition:</i> <code>native() == prior_native + <i>effective-argument</i></code>,
+ where <code>prior_native</code> is <code>native()</code> prior to the call to <code>operator+=</code>,
+ and <code><i>effective-argument</i></code> is:</p>
+ <ul><li>
+   <p><code>x.native()</code> if <code>x</code> is present and is <code>const path&</code>, otherwise</li>
+ <li>
+ <p><code>s</code>, where <code>s</code> is
+  <code>std::basic_string<typename std::iterator_traits<InputIterator>::value_type><br>s(begin, end)</code>,
+   if <code>begin</code> and <code>end</code> arguments are present, otherwise</li>
+ <li>
+ <p><code>x</code>.</li></ul><p>If the value type of <code><i>effective-argument</i></code> would not be <code>path::value_type</code>, the actual argument or argument range is first
+   converted so that <code><i>effective-argument</i></code> has value type <code>path::value_type</code>.</li> </p>
+ <p><i>Returns: </i><code>*this</code></p>
+ </blockquote>
+<h3><a name="path-modifiers"> <code>
+path</code> modifiers</a> [path.modifiers]</h3>
+
+  <pre>void <a name="path-clear">clear</a>();</pre>
+
+<blockquote>
+<p><i>Postcondition:</i> <code>this->empty()</code> is true.</p>
+</blockquote>
+
+<pre>path& <a name="path-make_preferred">make_preferred</a>();</pre>
+
+<blockquote>
+  <p><i>Effects:</i> <i>directory-separator</i>s are converted to <i>prefered-separator</i>s. 
+  See [<a href="#Operating-system-examples">fs.os.examples</a>].</p>
+  <p><i>Returns:</i> <code>*this</code></p>
+</blockquote>
+
+
+
+<pre>path& <a name="path-remove_filename">remove_filename</a>();</pre>
+
+<blockquote>
+  <p><i>Returns: </i>As if, <code>*this = parent_path();</code></p>
+  <p>[<i>Note:</i> This function is needed to efficiently implement <code>directory_iterator</code>. It is exposed to allow additional uses. The actual 
+  implementation may be much more efficient than <code>*this = parent_path()</code>  <i>—end 
+  note</i>]</p>
+</blockquote>
+
+<pre>path& <a name="path-replace_extension">replace_extension</a>(const path& new_extension = path());</pre>
+
+<blockquote>
+  <p><i>Effects:</i></p>
+  <ul>
+    <li>
+    <p>Any existing <code>extension()</code> is removed from the stored path, 
+    then</li>
+    <li>
+    <p>iff
+  <code>new_extension</code> is not empty and does not begin with a dot 
+    character, a dot character is appended to the stored path, then</li>
+    <li>
+  <p>
+  <code>new_extension</code> is appended to the stored path.</li>
+  </ul>
+  <p><i>Returns:</i> <code>*this</code></p>
+</blockquote>
+
+<pre><code>void <a name="path-swap">swap</a>(path& rhs) noexcept;</code></pre>
+
+<blockquote>
+  <p><i>Effects:</i> Swaps the contents of the two paths.</p>
+  <p><i>Complexity: </i>constant time.</p>
+</blockquote>
+
+  <h3><a name="path-lexical-operations"><code>path</code> lexical operations</a> 
+  [path.lex.ops]</h3>
+  <pre><span style="background-color: #E8FFE8">path </span><a name="lexically_normal"><span style="background-color: #E8FFE8">lexically_normal</span></a><span style="background-color: #E8FFE8">() const;</span></pre>
+<blockquote>
+<p><i>Overview:</i> Returns <code>*this</code> with redundant current directory 
+(<i>dot</i>), parent directory (<i>dot-dot</i>), and <i>directory-separator</i> elements removed.</p>
+<p><i>Returns:</i> <code>*this</code> in <a href="#normal-form">normal form</a>.</p>
+<p><i>Remarks:</i> Uses <code>operator/=</code> to compose the returned path.</p>
+<p>[<i>Example:</i></p>
+<p><code>assert(path("foo/./bar/..").lexically_normal() == "foo");<br>
+assert(path("foo/.///bar/../").lexically_normal() == "foo/.");</code></p>
+<p>The above assertions will succeed.<i> </i>On Windows, the 
+returned path's <i>directory-separator</i> characters will be backslashes rather than slashes, but that 
+does not affect <code>path</code> equality.<i> —end example</i>]</p>
+</blockquote>
+
+<pre><span style="background-color: #E8FFE8">path </span><a name="lexically-relative"><span style="background-color: #E8FFE8">lexically_relative</span></a><span style="background-color: #E8FFE8">(const</span><span style="background-color: #E8FFE8"> path& base) const;</span></pre>
+  <blockquote>
+  <p><i>Overview:</i> Returns <code>*this</code> made relative to <code>base</code>. 
+  Treats empty or identical paths as corner cases, not errors. Does not resolve 
+  symlinks. Does not first normalize <code>*this</code> or <code>base</code>.</p>
+
+  <p><i>Remarks:</i> Uses <code>std::mismatch(begin(), end(), base.begin(), base.end())</code>, to determine the first mismatched element of
+  <code>*this</code> and <code>base</code>. Uses <code>operator==</code> to 
+  determine if elements match. </p>
+  
+  <p><i>Returns:</i> </p>
+  
+  <ul>
+    <li>
+  <code>path()</code> if the first mismatched element of <code>*this</code> is equal to <code>
+  begin()</code> or the first mismatched element 
+  of <code>base</code> is equal to <code>base.begin()</code>, or<br> 
+    </li>
+    <li>
+  <code>path(".")</code> if the first mismatched element of <code>
+  *this</code> is equal to <code>
+  end()</code> and the first mismatched element 
+  of <code>base</code> is equal to <code>base.end()</code>, or<br> 
+    </li>
+    <li>An object of class <code>path</code> composed via application of <code>
+    operator/= path("..")</code> for each element in the half-open 
+    range [first 
+    mismatched element of <code>base</code>, <code>base.end()</code>), and then 
+    application of <code>operator/=</code> for each element in the half-open 
+    range 
+    [first mismatched element of <code>*this</code>, <code>end()</code>).
+    </li>
+</ul>
+  
+<p>[<i>Example:</i></p>
+<p><code>assert(path("/a/d").lexically_relative("/a/b/c") ==  "../../d");<br>
+assert(path("/a/b/c").lexically_relative("/a/d") ==  "../b/c");<br>
+assert(path("a/b/c").lexically_relative("a") == "b/c");<br>
+assert(path("a/b/c").lexically_relative("a/b/c/x/y") ==  "../..");<br>
+assert(path("a/b/c").lexically_relative("a/b/c") ==  ".");<br>
+assert(path("a/b").lexically_relative("c/d") ==  "");</code></p>
+<p>The above assertions will succeed.<i> </i>On Windows, the 
+returned path's <i>directory-separator</i>s will be backslashes rather than 
+forward slashes, but that 
+does not affect <code>path</code> equality.<i> —end example</i>]</p>
+  
+  <p>[<i>Note:</i> If symlink following semantics are desired, use the  operational function <code>
+  <a href="#op-proximate">relative</a></code>  <i>—end note</i>]</p>
+  
+  <p>[<i>Note:</i> If <a href="#lexically_normal">normalization</a> is needed to ensure 
+  consistent matching of elements, apply <code><a href="#lexically_normal">lexically_normal()</a></code> 
+  to <code>*this</code>, <code>base</code>, or both. <i>—end note</i>]</p>
+
+<h3> <a name="path-native-format-observers"><code><font size="4">path</font></code> native format observers</a> 
+[path.native.obs]</h3>
+<p>The string returned by all native format observers is in the <a href="#native-pathname-format">native pathname format</a>.</p>
+
+<pre>const string_type&  <a name="native">native</a>() const noexcept;</pre>
+
+<blockquote>
+<p><i>Returns:</i> <code>pathname</code>.</p>
+</blockquote>
+
+<pre>const value_type* <a name="c_str">c_str</a>() const noexcept;</pre>
+
+<blockquote>
+<p><i>Returns:</i> <code>pathname.c_str()</code>.</p>
+</blockquote>
+
+<pre><ins>string_type::size_type <a name="path-size">size</a>() const noexcept;</ins></pre>
+
+<blockquote>
+<p><i>Returns:</i> <code>pathname.size()</code>.</p>
+</blockquote>
+
+<pre>template <class String>
+String <a name="string-template">string</a>(const codecvt_type& cvt=codecvt()) const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>pathname</code>.</p>
+<p><i>Remarks:</i> If <code>string_type</code> is a different type than <code>String</code>, conversion is performed by <code>cvt</code>.</p>
+</blockquote>
+
+<pre>string <a name="string">string</a>(const codecvt_type& cvt=codecvt()) const;
+wstring <a name="wstring">wstring</a>(const codecvt_type& cvt=codecvt()) const;
+u16string <a name="u16string">u16string</a>() const;
+u32wstring <a name="u32wstring">u32wstring</a>() const; </pre>
+
+<blockquote>
+<p><i>Returns:</i> <code>pathname</code>.</p>
+<p><i>Remarks:</i> If <code>string_type</code> is a different type than 
+function's return type, conversion is performed by <code>cvt</code>.</p>
+</blockquote>
+
+<h3> <a name="path-generic-format-observers"><code><font size="4">path</font></code> generic format observers</a> 
+[path.generic.obs]</h3>
+<p>The string returned by all generic format observers is in the <a href="#generic-pathname-format">generic pathname format</a>.</p>
+
+<pre>template <class String>
+String <a name="generic_string-template">generic_string</a>(const codecvt_type& cvt=codecvt()) const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>pathname</code>.</p>
+<p><i>Remarks:</i> If <code>string_type</code> is a different type than <code>String</code>, conversion is performed by <code>cvt</code>.</p>
+</blockquote>
+
+<pre>string <a name="generic_string">generic_string</a>(const codecvt_type& cvt=codecvt()) const;
+wstring <a name="generic_wstring">generic_wstring</a>(const codecvt_type& cvt=codecvt()) const;
+u16string <a name="generic_u16string">generic_u16string</a>() const;
+u32wstring <a name="generic_u32wstring">generic_u32wstring</a>() const; </pre>
+
+<blockquote>
+<p><i>Returns:</i> <code>pathname</code>.</p>
+<p><i>Remarks:</i>  If <code>string_type</code> is a different type than 
+function's return type, conversion is performed by <code>cvt</code>.</p>
+</blockquote>
+
+<h3> <a name="path-compare"><code>path</code> compare</a> [path.compare]</h3>
+
+<pre>int compare(const path& p) const noexcept;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> A value less than 0 if the elements of <code>*this</code> are lexicographically less than the elements of <code>p</code>, otherwise a 
+  value greater than 0 if the elements of <code>*this</code> are 
+  lexicographically greater than the elements of <code>p</code>, otherwise 0.</p>
+  <p>Remark: The elements are determined as if by iteration over the half-open 
+  range [<code>begin()</code>, <code>end()</code>) for <code>*this</code> and  <code>p</code>.</p>
+</blockquote>
+
+<pre>int compare(const std::string& s) const</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>compare(path(s))</code>.</p>
+</blockquote>
+
+<pre>int compare(const value_type* s) const</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>compare(path(s))</code>.</p>
+</blockquote>
+<h3> <a name="path-decomposition"> <code><font size="4">path</font></code> decomposition</a> 
+[path.decompose]</h3>
+<p><span style="background-color: #E0E0E0"><i>See the <a href="#path-decomposition-table">Path decomposition table</a> for examples 
+for values returned by decomposition functions. The <a href="tutorial.html#Using-path-decomposition">Tutorial</a> may also be 
+helpful.</i></span></p>
+
+<pre>path <a name="path-root_name">root_name</a>() const;</pre>
+
+<blockquote>
+<p><i>Returns:</i> <i>root-name,</i> if <code>pathname</code> includes <i>root-name</i>, otherwise <code>path()</code>. </p>
+</blockquote>
+
+<pre>path <a name="path-root_directory">root_directory</a>() const;</pre>
+
+<blockquote>
+<p><i>Returns:</i> <i>root-directory</i>, if <code>pathname</code> includes <i>root-directory</i>, otherwise <code>path()</code>.</p>
+<p>If <i>root-directory</i> is composed of <i>slash name</i>, <i>slash</i> is 
+excluded from the returned string.</p>
+</blockquote>
+
+<pre>path <a name="path-root_path">root_path</a>() const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>root_name() / root_directory()</code></p>
+</blockquote>
+
+<pre>path <a name="path-relative_path">relative_path</a>() const;</pre>
+
+<blockquote>
+<p><i>Returns:</i> A <code>path</code> composed from <code>pathname</code>, if <code>!empty()</code>, beginning 
+with the first <i>filename</i> after <i>root-path</i>. Otherwise, <code>path()</code>.</p>
+</blockquote>
+
+<pre>path <a name="path-parent_path">parent_path</a>() const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>(empty() || begin() == —end()) ? path() : <i>pp</i></code>, where <code><i>pp</i></code> is constructed as if by 
+  starting with an empty <code>path</code> and successively applying <code>operator/=</code> for each element in the range <code>begin()</code>, <code>—end()</code>.</p>
+  <p>[<i>Example:</i></p>
+  <blockquote>
+    
+    <pre>std::cout << path("/foo/bar.txt").parent_path(); // outputs "/foo"
+std::cout << path("/foo/bar").parent_path();     // outputs "/foo"
+std::cout << path("/foo/bar/").parent_path();    // outputs "/foo/bar"
+std::cout << path("/").parent_path();            // outputs ""
+std::cout << path(".").parent_path();            // outputs ""
+std::cout << path("..").parent_path();           // outputs ""</pre>
+    
+  </blockquote>
+  <p> See the last bullet item in the <a href="#path-iterators">
+  forward traversal order</a> list for why the <code>"/foo/bar/"</code> example 
+  doesn't output <code>"/foo"</code>.</p>
+  <p> <i>—end example</i>]</p>
+</blockquote>
+
+<pre>path <a name="path-filename">filename</a>() const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>empty() ? path() : *—end()</code></p>
+  <p>[<i>Example:</i></p>
+  <blockquote>
+    
+    <pre>std::cout << path("/foo/bar.txt").filename(); // outputs "bar.txt"
+std::cout << path("/foo/bar").filename();     // outputs "bar"
+std::cout << path("/foo/bar/").filename();    // outputs "."
+std::cout << path("/").filename();            // outputs "/"
+std::cout << path(".").filename();            // outputs "."
+std::cout << path("..").filename();           // outputs ".."</pre>
+    
+  </blockquote>
+  <p> See the last bullet item in the <a href="#path-iterators">
+  forward traversal order</a> list for why the <code>"/foo/bar/"</code> example 
+  doesn't output <code>"bar"</code>.</p>
+  <p> <i>—end example</i>]</p>
+</blockquote>
+
+<pre>path <a name="path-stem">stem</a>(const path& p) const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> if <code>p.filename()</code> contains a dot but does not 
+  consist solely of one or to two dots, returns 
+  the substring of <code>p.filename()</code> starting at its beginning and 
+  ending at the last dot (the dot is not included). Otherwise, 
+  returns <code>p.filename()</code>.</p>
+  <p>[<i>Example:</i></p>
+  <blockquote>
+    
+    <pre><code>std::cout << path("/foo/bar.txt").stem();</code> // outputs "<code>bar</code>"
+path p = "foo.bar.baz.tar";
+for (; !p.extension().empty(); p = p.stem())
+  std::cout << p.extension() << '\n';
+  // outputs: .tar
+  //          .baz
+  //          .bar</pre>
+    
+  </blockquote>
+  <p> <i>—end example</i>]</p>
+</blockquote>
+
+<pre>path <a name="path-extension">extension</a>(const path& p) const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> if <code>p.filename()</code> contains a dot but does not 
+  consist solely of one or to two dots, returns 
+  the substring of <code>p.filename()</code> starting at the rightmost dot 
+  and ending at the path's end. Otherwise, returns an empty <code>path</code> object. </p>
+  <p><i>Remarks:</i> Implementations are permitted but not required to define additional 
+  behavior for file systems which append additional elements to extensions, such 
+  as alternate data streams or partitioned dataset names.</p>
+  <p>[<i>Example:</i></p>
+  <blockquote>
+    
+    <pre><code>std::cout << path("/foo/bar.txt").extension(); //</code> outputs "<code>.txt</code>"</pre>
+    
+  </blockquote>
+  <p> <i>—end example</i>]</p>
+  <p>[<i>Note:<b> </b></i>The dot is included in the return value so that it is 
+  possible to distinguish between no extension and an empty extension. <span style="background-color: #FFFF00">
+  See
+  </span> <a href="http://permalink.gmane.org/gmane.comp.lib.boost.devel/199744">
+  <span style="background-color: #FFFF00">http://permalink.gmane.org/gmane.comp.lib.boost.devel/199744</span></a><span style="background-color: #FFFF00"> for more 
+  extensive rationale.  </span> <i><span style="background-color: #FFFF00">—end note</span></i><span style="background-color: #FFFF00">]</span></p>
+</blockquote>
+<h3> <a name="path-query"> <code><font size="4">path</font></code> query</a> [path.query]</h3>
+
+<pre>bool <a name="path-empty">empty</a>() const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>m_pathname.empty()</code>.</p>
+</blockquote>
+
+<pre>bool <a name="path-has_root_path">has_root_path</a>() const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>!<a href="#path-root_path">root_path</a>().empty()</code></p>
+</blockquote>
+
+<pre>bool <a name="path-has_root_name">has_root_name</a>() const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>!<a href="#path-root_name">root_name</a>().empty()</code></p>
+</blockquote>
+
+<pre>bool <a name="path-has_root_directory">has_root_directory</a>() const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>!<a href="#path-root_directory">root_directory</a>().empty()</code></p>
+</blockquote>
+
+<pre>bool <a name="path-has_relative_path">has_relative_path</a>() const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>!<a href="#path-has_relative_path">relative_path</a>().empty()</code></p>
+</blockquote>
+
+<pre>bool <a name="path-has_parent_path">has_parent_path</a>() const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>!<a href="#path-parent_path">parent_path</a>().empty()</code></p>
+</blockquote>
+
+<pre>bool <a name="path-has_filename">has_filename</a>() const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>!<a href="#path-filename">filename</a>().empty()</code></p>
+</blockquote>
+
+<pre>bool <a name="path-has_stem">has_stem</a>() const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>!<a href="#path-stem">stem</a>().empty()</code></p>
+</blockquote>
+
+<pre>bool <a name="path-has_extension">has_extension</a>() const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>!<a href="#path-has_extension">extension</a>().empty()</code></p>
+</blockquote>
+
+<pre>bool <a name="path-is_absolute">is_absolute</a>() const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>true</code> if the elements of <code>root_path()</code> uniquely identify a directory, else <code>false</code>.</p>
+</blockquote>
+
+<pre>bool <a name="path-is_relative">is_relative</a>() const;</pre>
+
+<blockquote>
+  <p><i>Returns:</i> <code>!is_absolute()</code>.</p>
+</blockquote>
+<h3> <a name="path-iterators"> <code>
+<font size="4">path</font></code> iterators</a> [path.itr]</h3>
+<p> Path iterators <code>iterator</code>, <code>const_iterator</code>,
+<code>reverse_iterator</code>, and <code>const_reverse_iterator</code> iterate over the elements of the stored pathname.</p>
+<p> Path iterators are constant iterators satisfying  
+the requirements of a bidirectional iterator (C++ Std, 24.1.4 Bidirectional 
+iterators [lib.bidirectional.iterators]). The <code>value_type</code>  of 
+an iterator is <code>path</code>.</p>
+  <blockquote>
+<p> [<i>Note:</i> Path iterators store their value objects internally 
+and when dereferenced return references to those internal objects. They cannot 
+be used with iterator adaptors such as <code>std::reverse_iterator</code> that 
+assume references obtained by dereferencing an iterator point to objects that 
+out-live the iterator itself. <i>—end note</i>] </p>
+</blockquote>
+  <p>Calling any non-const member function of a <code>path</code> object 
+  invalidates all iterators referring to elements of that object.</p>
+<p> The forward traversal order is as follows:</p>
+<ul>
+  <li>The <i>root-name</i> element, if present.</li>
+  <li>The <i>root-directory</i> element, if present, in the generic format. <i>
+  [note:</i> the generic format is required to ensure lexicographical 
+  comparison works correctly. <i>—end note</i>]</li>
+  <li>Each successive <i>filename</i> element, if present.</li>
+  <li><i>Dot</i>, if one or more trailing non-root <i>slash</i> 
+  characters are present.|</li>
+</ul>
+  <blockquote>
+  <p>[<i>Note:</i> Treating the last element during iteration as <i>dot</i> when 
+  there is a trailing directory separator enables lexical (i.e. syntactic) 
+  distinction between paths to directories versus paths to regular files. Such a 
+  distinction is usually irrelevant on POSIX and Windows based operating 
+  systems, but may be a requirement on other operating systems. <i>—end note</i>]</p>
+  </blockquote>
+  <p>The backward traversal order is the reverse of forward traversal.</p>
+  <pre>iterator begin() const;</pre>
+<blockquote>
+  <p><i>Returns:</i> An iterator for the first  element in forward traversal 
+  order. If no elements are present, the end iterator.</p>
+</blockquote>
+<pre>iterator end() const;</pre>
+<blockquote>
+  <p><i>Returns:</i> The end iterator.</p>
+</blockquote>
+  <pre>reverse_iterator rbegin() const;</pre>
+<blockquote>
+  <p><i>Returns:</i> An iterator for the first element in backward traversal 
+  order. If no elements are present, the end iterator.</p>
+</blockquote>
+<pre>reverse_iterator rend() const;</pre>
+<blockquote>
+  <p><i>Returns:</i> The end iterator.</p>
+</blockquote>
+ <h3><a name="path-imbued-locale"><code><font size="4"> path</font></code> 
+ imbued locale</a> [path.imbued.locale]</h3>
+ <p><code>path</code> operations sometimes require encoding conversions between
+ <code>pathname</code> and some other string object where one of the value types 
+ is <code>char</code> and the other is <code>wchar_t</code>. Such conversions 
+ shall be performed by the <code>path::codecvt()</code> facet.</p>
+ <blockquote>
+ <p><span style="background-color: #FFFF00">[</span><i><span style="background-color: #FFFF00">Example:</span></i><span style="background-color: #FFFF00"> 
+ ... </span><i><span style="background-color: #FFFF00">—end example</span></i><span style="background-color: #FFFF00">]</span></p>
+ </blockquote>
+ <pre>static std::locale <a name="path-imbue">imbue</a>(const std::locale& loc);</pre>
+<blockquote>
+  <p><i>Effects:</i> Stores a copy of <code>loc</code> as the imbued <code>path</code> 
+  locale.</p>
+  <p><i>Returns:</i> The previous imbued <code>path</code> locale.</p>
+  <p><i>Remarks:</i> The initial value of the imbued <code>path</code> locale is 
+  operating system dependent. It shall be a locale with a <code>codecvt</code> 
+  facet for a <code>char</code> string encoding appropriate for the operating 
+  system. See ([<a href="#Operating-system-examples">fs.os.examples</a>]).  </p>
+</blockquote>
+<pre>static const codecvt_type& <a name="path-codecvt">codecvt</a>();</pre>
+<blockquote>
+  <p><i>Returns:</i> The <code>codecvt</code> facet for the imbued<code> path</code> 
+  locale .</p>
+</blockquote>
+
+
+<h3> <a name="path-deprecated-functions"><code><font size="4"> path</font></code> deprecated functions</a></h3>
+<p> Several member functions from previous versions of <code>class path</code> have been deprecated, either because they have been renamed or because the 
+functionality is no longer desirable or has become obsolete.</p>
+<p> Deprecated functions available by default; will be suppressed if <code>BOOST_FILESYSTEM_NO_DEPRECATED</code> is defined:</p>
+<blockquote>
+  <pre>path&  remove_leaf()           { return remove_filename(); }
+path   leaf() const            { return filename(); }
+path   branch_path() const     { return parent_path(); }
+bool   has_leaf() const        { return !m_path.empty(); }
+bool   has_branch_path() const { return !parent_path().empty(); }</pre>
+</blockquote>
+<p> Deprecated functions not available by default; will be supplied if <code>BOOST_FILESYSTEM_DEPRECATED</code> is defined:</p>
+<blockquote>
+<pre>const std::string  file_string() const               { return native_string(); }
+const std::string  directory_string() const          { return native_string(); }
+const std::string  native_file_string() const        { return native_string(); }
+const std::string  native_directory_string() const   { return native_string(); }
+const string_type  external_file_string() const      { return native(); }
+const string_type  external_directory_string() const { return native(); }</pre>
+</blockquote>
+
+<h3> <a name="path-non-member-functions"> <code><font size="4">path</font></code> non-member functions</a> 
+[path.non-member]</h3>
+
+  <pre>bool lexicographical_compare(path::iterator first1, path::iterator last1,
+                             path::iterator first2, path::iterator last2);</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>true</code> if the sequence of <code>native()</code> strings for the elements defined by the half-open range <code>[first1,last1)</code> is 
+  lexicographically less than the sequence of <code>native()</code> strings for 
+  the elements defined by the half-open range <code>[first2,last2)</code>. Returns <code>false</code> otherwise.</p>
+  <p><i>Remarks:</i> If two sequences have the same number of elements and their 
+  corresponding elements are equivalent, then neither sequence is 
+  lexicographically less than the other. If one sequence is a prefix of the 
+  other, then the shorter sequence is lexicographically less than the longer 
+  sequence. Otherwise, the lexicographical comparison of the sequences yields 
+  the same result as the comparison of the first corresponding pair of elements 
+  that are not equivalent.</p>
+  <p>[<i>Note:</i> A <code>path</code> aware <code>lexicographical_compare</code> algorithm is provided for historical reasons. <i>—end note</i>]</p>
+</blockquote>
+
+  <pre><ins>path lexically_<a name="lex-normal">normal</a>(const path& p);</ins></pre>
+
+<blockquote>
+  <p><i>Overview:</i> Returns <code>p</code> with redundant current 
+  directory (<i>dot</i>), parent directory (<i>dot-dot</i>), and <i>
+  directory-separator</i> elements removed.</p>
+  <p><i>Returns:</i> <code>p</code> in
+  <a href="#normal-form">
+  normal form</a>.</p>
+  <p><i>Remarks:</i> Uses <code>operator/=</code> to compose the 
+  returned path.</p>
+  <p>[<i>Example:</i></p>
+  <p><code>assert(lexically_normal("foo/./bar/..") == "foo");<br>
+  assert(lexically_normal("foo/.///bar/../") == "foo/.");</code></p>
+  <p>All of the above assertions will succeed.<i> </i>On Windows, the 
+  returned path's <i>directory-separator</i> characters will be backslashes 
+  rather than slashes, but that does not affect <code>path</code> equality.<i> 
+  —end example</i>]</p>
+</blockquote>
+
+  <pre><ins>path lexically_<a name="lex-relative">relative</a>(const path& p, const path& base);</ins></pre>
+
+<blockquote>
+  <p><i>Overview:</i> Returns <code>p</code> made relative to <code>
+  base</code>. Treats empty or identical paths as corner cases, not errors. Does 
+  not resolve symlinks. Does not first normalize <code>p</code> or <code>base</code>.</p>
+  <p><i>Remarks:</i> Uses <code>std::mismatch(p.begin(), p.end(), 
+  base.begin(), base.end())</code>, to determine the first mismatched element of
+  <code>p</code> and <code>base</code>. Uses <code>operator==</code> to 
+  determine if elements match. </p>
+  <p><i>Returns:</i> </p>
+  <ul>
+    <li>
+    <p><code>path()</code> if the first mismatched element of <code>p</code> 
+    is equal to <code>p.begin()</code> or the first mismatched element of <code>
+    base</code> is equal to <code>base.begin()</code>, or<br>
+      </li>
+    <li>
+    <p><code>path(".")</code> if the first mismatched element of <code>
+    p</code> is equal to <code>p.end()</code> and the first mismatched element 
+    of <code>base</code> is equal to <code>base.end()</code>, or<br>
+      </li>
+    <li>
+    <p>An object of class <code>path</code> composed via application 
+    of <code>operator/= path("..")</code> for each element in the half-open 
+    range [first mismatched element of <code>base</code>, <code>base.end()</code>), 
+    and then application of <code>operator/=</code> for each element in the 
+    half-open range [first mismatched element of <code>p</code>, <code>p.end()</code>).
+    </li>
+  </ul>
+  <p>[<i>Example:</i></p>
+  <p><code>assert(lexically_relative("/a/d", "/a/b/c") == "../../d");<br>
+  assert(lexically_relative("/a/b/c", "/a/d") == "../b/c");<br>
+  assert(lexically_relative("a/b/c", "a") == "b/c");<br>
+  assert(lexically_relative("a/b/c", "a/b/c/x/y") == "../..");<br>
+  assert(lexically_relative("a/b/c", "a/b/c") == ".");<br>
+  assert(lexically_relative("a/b", "c/d") == "");</code></p>
+  <p>All of the above assertions will succeed.<i> </i>On Windows, the 
+  returned path's <i>directory-separator</i>s will be backslashes rather than 
+  forward slashes, but that does not affect <code>path</code> equality.<i> —end 
+  example</i>]</p>
+  <p>[<i>Note:</i> If symlink following semantics are desired, use the 
+  operational function <code>
+  <a href="#op-relative">
+  relative</a></code>  <i>—end note</i>]</p>
+  <p>[<i>Note:</i> If <a href="#normal-form">normalization</a> is needed to ensure consistent matching of elements, wrap
+  <code>p</code>, <code>base</code>, or both in calls <code>
+  <a href="#lex-normal">
+  lexically_normal()</a></code>. <i>—end note</i>]</p>
+</blockquote>
+<pre>void swap( path& lhs, path& rhs )</pre>
+<blockquote>
+  <p><i>Effects: </i><code>lhs.swap(rhs)</code>.</p>
+</blockquote>
+<pre>std::size_t <a name="hash_value">hash_value</a> (const path& p);</pre>
+<blockquote>
+  <p><i>Returns:</i> A hash value for the path <code>p</code>. If
+  for two paths, <code>p1 == p2</code> then <code>hash_value(p1) == hash_value(p2)</code>.</p>
+  <p>This allows paths to be used with <a href="../../functional/hash/index.html">Boost.Hash</a>.</p>
+</blockquote>
+<pre>bool operator< (const path& lhs, const path& rhs);</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>return lhs.compare(rhs.begin) < 0</code>.</p>
+</blockquote>
+<pre>bool operator<=(const path& lhs, const path& rhs);</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>!(rhs < lhs)</code>.</p>
+</blockquote>
+<pre>bool operator> (const path& lhs, const path& rhs);</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>rhs < lhs</code>.</p>
+</blockquote>
+<pre>bool operator>=(const path& lhs, const path& rhs);</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>!(lhs < rhs)</code>.</p>
+</blockquote>
+<pre>bool operator==(const path& lhs, const path& rhs);</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>!(lhs < rhs) && !(rhs < lhs)</code>.</p>
+  <p>[<i>Note:</i> <a name="Path-equality">Path equality</a> and path 
+  equivalence have different semantics.</p>
+  <p>Equality is determined by the <code>path</code> non-member <code>operator==</code>, which considers the two path's lexical 
+  representations only. Thus <code>path("foo") == "bar"</code> is never <code>true</code>.</p>
+  <p>Equivalence is determined by the <a href="#equivalent"><code>equivalent()</code></a> non-member function, which determines if two paths <a href="#path">resolve</a> to the same file system entity. 
+  Thus <code>equivalent("foo", "bar")</code> will be <code>true</code> when both paths resolve to the same file.</p>
+  <p>Programmers wishing to determine if two paths are "the same" must decide if 
+  "the same" means "the same representation" or "resolve to the same actual 
+  file", and choose the appropriate function accordingly. <i>—end note</i>]</p>
+</blockquote>
+<pre>bool operator!=(const path& lhs, const path& rhs);</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>!(lhs == rhs)</code>.</p>
+</blockquote>
+<pre>path operator/ (const path& lhs, const path& rhs);</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>path(lhs) /= rhs</code>.</p>
+</blockquote>
+<h3> <a name="path-non-member-operators"><code><font size="4">path</font></code></a><a name="path-inserter-extractor"> inserter 
+  and extractor</a> [path.io]</h3>
+<p> The inserter and extractor delimit the string with double-quotes (<code>"</code>) 
+so that paths with embedded spaces will round trip correctly. Ampersand (<code>&</code>) 
+is as an escape character, so the path can itself contain double quotes.</p>
+<pre>template <class Char, class Traits>
+std::basic_ostream<Char, Traits>& operator<<(std::basic_ostream<Char, Traits>& os,
+                                             const path& p)
+</pre>
+<blockquote>
+  <p><i>Effects: </i>Insert characters into <code>os</code>:</p>
+  <ul>
+    <li>
+  <p>A double-quote.</p>
+    </li>
+    <li>
+  <p>Each character in <code>p.string<std::basic_string<Char>>()</code>. 
+  If the character to be inserted is equal to the escape character or a 
+  double-quote, as determined by <code>operator==</code>, first insert the 
+  escape character.</p>
+    </li>
+    <li>
+  <p>A double-quote.</p>
+    </li>
+  </ul>
+  <p><i>Returns:</i> <code>os</code></p>
+</blockquote>
+<pre>template <class Char, class Traits>
+inline std::basic_istream<Char, Traits>& operator>>(std::basic_istream<Char, Traits>& is,
+                                                    path& p)
+</pre>
+<blockquote>
+  <p><i>Effects:  </i><code> std::basic_string<Char> str;<br>
+        is >> <a href="../../io/doc/quoted_manip.html">boost::io::quoted</a>(str, static_cast<Char>('&'));<br>
+        p = str;</code></p>
+  <p><i>Effects:  </i>Extract characters from os:</p>
+  <ul>
+    <li>If the first character that would be extracted is equal to double-quote, 
+    as determined by <code>operator==</code>, then:<ul>
+      <li>Discard the initial double-quote.</li>
+      <li>Save the value and then turn off the <code>skipws</code> flag.</li>
+      <li><code>p.clear()</code></li>
+      <li>Until an unescaped double-quote character is reached or <code>
+      is.not_good()</code>, extract characters from <code>os</code> and append 
+      them to <code>p</code>, except that if an escape character is reached, 
+      ignore it and append the next character to <code>p</code>.</li>
+      <li>Discard the final double-quote character.</li>
+      <li>Restore the <code>skipws</code> flag to its original value.</li>
+    </ul>
+    </li>
+    <li>Otherwise, <code>os >> p</code>.</li>
+  </ul>
+  <p><i>Returns:</i> <code>is</code></p>
+  </blockquote>
+<h2><a name="Class-filesystem_error">Class <code>filesystem_error</code> 
+[class.filesystem_error]</a></h2>
+<pre>namespace boost
+{
+  namespace filesystem
+  {
+      class filesystem_error : public system_error
+      {
+      public:
+        filesystem_error();
+        filesystem_error(const filesystem_error&);
+        <a href="#filesystem_error-2-arg">filesystem_error</a>(const std::string& what_arg,
+          system::error_code ec);
+        <a href="#filesystem_error-3-arg">filesystem_error</a>(const std::string& what_arg,
+          const path& p1, system::error_code ec);
+        <a href="#filesystem_error-4-arg">filesystem_error</a>(const std::string& what_arg,
+          const path& p1, const path& p2, system::error_code ec);
+
+        filesystem_error& filesystem_error(const filesystem_error&);
+       ~filesystem_error();
+
+        filesystem_error& operator=(const filesystem_error&);
+
+        const path& <a href="#filesystem_error-path1">path1</a>() const;
+        const path& <a href="#filesystem_error-path2">path2</a>() const;
+
+        const char * <a href="#filesystem_error-what">what</a>() const;
+      };
+  }  // namespace filesystem
+}  // namespace boost</pre>
+<p>The class template <code>filesystem_error</code> defines the type of 
+objects thrown as exceptions to report file system errors from functions described in this 
+reference documentation.</p>
+<h3> <a name="filesystem_error-members"> <code>filesystem_error</code> members</a> 
+[filesystem_error.members]</h3>
+<pre><a name="filesystem_error-2-arg">filesystem_error</a>(const std::string& what_arg, error_code ec);</pre>
+<blockquote>
+  <p><i>Postcondition:</i></p>
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="46%">
+    <tr>
+      <td width="18%"><b>Expression</b></td>
+      <td width="82%"><b>Value</b></td>
+    </tr>
+    <tr>
+      <td width="18%" bgcolor="#FFFFFF"><code>
+      runtime_error::what()</code></td>
+      <td width="82%" bgcolor="#FFFFFF">
+      <code><i>what_arg</i>.c_str()</code></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>code()</code></td>
+      <td width="82%"><code>ec</code></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>path1().empty()</code></td>
+      <td width="82%"><code>true</code></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>path2().empty()</code></td>
+      <td width="82%"><code>true</code></td>
+    </tr>
+  </table>
+</blockquote>
+<pre><a name="filesystem_error-3-arg">filesystem_error</a>(const std::string& what_arg, const path& p1, error_code ec);</pre>
+<blockquote>
+  <p><i>Postcondition:</i></p>
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="46%">
+    <tr>
+      <td width="18%"><b>Expression</b></td>
+      <td width="82%"><b>Value</b></td>
+    </tr>
+    <tr>
+      <td width="18%" valign="top"><code>
+      runtime_error::what()</code></td>
+      <td width="82%">
+      <code><i>what_arg</i>.c_str()</code></td>
+    </tr>
+    <tr>
+      <td width="18%" valign="top"><code>code()</code></td>
+      <td width="82%"><code>ec</code></td>
+    </tr>
+    <tr>
+      <td width="18%" valign="top"><code>path1()</code></td>
+      <td width="82%">Reference to stored copy of <code>p1</code></td>
+    </tr>
+    <tr>
+      <td width="18%" valign="top"><code>path2().empty()</code></td>
+      <td width="82%"><code>true</code></td>
+    </tr>
+  </table>
+</blockquote>
+<pre><a name="filesystem_error-4-arg">filesystem_error</a>(const std::string& what_arg, const path& p1, const path& p2, error_code ec);</pre>
+<blockquote>
+  <p><i>Postcondition:</i></p>
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="46%">
+    <tr>
+      <td width="18%"><b>Expression</b></td>
+      <td width="82%"><b>Value</b></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>
+      runtime_error::what()</code></td>
+      <td width="82%">
+      <u>
+      <code><i>w</i></code></u><code><i>hat_arg</i>.c_str()</code></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>code()</code></td>
+      <td width="82%"><code>ec</code></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>path1()</code></td>
+      <td width="82%">Reference to stored copy of <code>p1</code></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>path2()</code></td>
+      <td width="82%">Reference to stored copy of <code>p2</code></td>
+    </tr>
+  </table>
+</blockquote>
+<pre>const path& <a name="filesystem_error-path1">path1</a>() const;</pre>
+<blockquote>
+  <p><i>Returns:</i> Reference to copy of <code>p1</code> stored by the 
+  constructor, or, if none, an empty path.</p>
+</blockquote>
+<pre>const path& <a name="filesystem_error-path2">path2</a>() const;</pre>
+<blockquote>
+  <p><i>Returns:</i> Reference to copy of <code>p2</code> stored by the 
+  constructor, or, if none, an empty path.</p>
+</blockquote>
+<pre>const char* <a name="filesystem_error-what">what</a>() const;</pre>
+<blockquote>
+  <p><i>Returns: </i>A string containing <code>runtime_error::what()</code>. The exact format is unspecified. 
+  Implementations are encouraged but not required to include <code>path1.native_string()</code>if not empty, <code>path2.native_string()</code>if 
+  not empty, and <code>system_error::what()</code> strings in the returned 
+  string.</p>
+</blockquote>
+<h2><a name="Enum-file_type">Enum file_type</a> [enum.file_type]</h2>
+<p>This enum specifies constants uses to identify file types.</p>
+<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td><b>Constant Name</b></td>
+    <td><b>Meaning</b></td>
+  </tr>
+  <tr>
+    <td><code>status_error</code></td>
+    <td>An error occurred while trying to obtain the status of the file. The 
+    file simply not being found is <b><u>not</u></b> considered a status error. </td>
+  </tr>
+  <tr>
+    <td><code>file_not_found</code></td>
+    <td>The file could not be found</td>
+  </tr>
+  <tr>
+    <td><code>regular_file</code></td>
+    <td>Regular file</td>
+  </tr>
+  <tr>
+    <td><code>directory_file</code></td>
+    <td>Directory file</td>
+  </tr>
+  <tr>
+    <td><code>symlink_file</code></td>
+    <td>Symbolic link file</td>
+  </tr>
+  <tr>
+    <td><code>block_file</code></td>
+    <td>Block special file</td>
+  </tr>
+  <tr>
+    <td><code>character_file</code></td>
+    <td>Character special file</td>
+  </tr>
+  <tr>
+    <td><code>fifo_file</code></td>
+    <td>FIFO or pipe file</td>
+  </tr>
+  <tr>
+    <td><code>socket_file</code></td>
+    <td>Socket file</td>
+  </tr>
+  <tr>
+    <td><code>type_unknown</code></td>
+    <td>The file exists, but it is of a system specific type not covered by any 
+    of the above cases.</td>
+  </tr>
+</table>
+<h2><a name="Enum-perms">Enum perms</a> [enum.perms]</h2>
+<p>This <code>enum</code> specifies bitmask constants uses to identify file 
+permissions. <i><span style="background-color: #E0E0E0">ISO/</span><span style="background-color: #E0E0E0">IEC</span><span style="background-color: #E0E0E0"> 9945 
+(POSIX) specifies actual values, and those values have been adopted here because 
+they are very familiar and ingrained for many POSIX 
+users.</span></i></p>
+<blockquote>
+<p><span style="background-color: #FFFF00">Windows: All permissions except write are currently ignored. There is only a 
+single write permission; setting write permission for owner, group, or others 
+sets write permission for all, and removing write permission for owner, group, 
+or others removes write permission for all. </span> </p>
+</blockquote>
+<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td><b>Name</b></td>
+    <td align="center"><b>Value<br>
+    (octal)</b></td>
+    <td align="center"><b>ISO/IEC 9945<br>
+    macro</b></td>
+    <td><b>Definition or notes</b></td>
+  </tr>
+
+<tr><td>
+  <p><code>no_perms</code></td><td><code>0</code></td><td></td>
+  <td>There are no permissions set for the file. Note: <code>file_not_found</code> is <code>no_perms</code> rather than <code>perms_not_known</code></td>
+</tr>
+<tr><td><code>owner_read</code></td><td><code>0400</code></td><td> <code>S_IRUSR</code></td>
+  <td> Read permission, owner</td>
+</tr>
+<tr><td><code>owner_write</code></td><td><code>0200</code></td><td> <code>S_IWUSR</code></td>
+  <td> Write permission, owner</td>
+</tr>
+<tr><td><code>owner_exe</code></td><td><code>0100</code></td><td>  <code>S_IXUSR</code></td>
+  <td> Execute/search permission, owner</td>
+</tr>
+<tr><td><code>owner_all</code></td><td><code>0700</code></td><td>  <code>S_IRWXU</code></td>
+  <td> Read, write, execute/search by owner; <code>owner_read | owner_write | owner_exe</code></td>
+</tr>
+<tr><td><code>group_read</code></td><td><code>040</code></td><td>  <code>S_IRGRP</code></td>
+  <td> Read permission, group</td>
+</tr>
+<tr><td><code>group_write</code></td><td><code>020</code></td><td> <code>S_IWGRP</code></td>
+  <td> Write permission, group</td>
+</tr>
+<tr><td><code>group_exe</code></td><td><code>010</code></td><td>   <code>S_IXGRP</code></td>
+  <td> Execute/search permission, group</td>
+</tr>
+<tr><td><code>group_all</code></td><td><code>070</code></td><td>   <code>S_IRWXG</code></td>
+  <td> Read, write, execute/search by group; <code>group_read | group_write | group_exe</code></td>
+</tr>
+<tr><td><code>others_read</code></td><td><code>04</code></td><td>  <code>S_IROTH</code></td>
+  <td> Read permission, others</td>
+</tr>
+<tr><td><code>others_write</code></td><td><code>02</code></td><td> <code>S_IWOTH</code></td>
+  <td> Write permission, others</td>
+</tr>
+<tr><td><code>others_exe</code></td><td><code>01</code></td><td>   <code>S_IXOTH</code></td>
+  <td> Execute/search permission, others</td>
+</tr>
+<tr><td><code>others_all</code></td><td><code>07</code></td><td>   <code>S_IRWXO</code></td>
+  <td>Read, write, execute/search by others; <code>others_read | others_write | others_exe</code></td>
+</tr>
+<tr><td><code>all_all</code></td><td><code>0777</code></td><td> </td><td><code>owner_all | group_all | others_all</code></td>
+</tr>
+<tr><td><code>set_uid_on_exe</code></td><td><code>04000</code></td><td> <code>S_ISUID</code></td>
+  <td> Set-user-ID on execution</td>
+</tr>
+<tr><td><code>set_gid_on_exe</code></td><td><code>02000</code></td><td> <code>S_ISGID</code></td>
+  <td> Set-group-ID on execution</td>
+</tr>
+<tr><td><code><a name="sticky_bit">sticky_bit</a> </code></td><td><code>01000</code></td><td> <code>S_ISVTX</code></td>
+  <td> Operating system dependent. Inherently non-portable, even between ISO/IEC 9945 
+  operating systems.</td>
+</tr>
+<tr><td><code><a name="perms_mask">perms_mask</a></code></td><td><code>07777</code></td><td>  </td>
+  <td><code>all_all | set_uid_on_exe | set_gid_on_exe | sticky_bit</code></td>
+</tr>
+<tr><td><code>perms_not_known</code></td><td><code>0xFFFF</code></td><td></td><td> 
+  The permissions are not known, such as when a <code>file_status</code> object 
+  is created without specifying the permissions</td>
+</tr>
+<tr><td>
+  <p><code>add_perms</code></td><td><code>0x1000</code></td><td></td><td>
+  <p><code>permissions()</code> adds the argument permission bits to the 
+  file's current bits</td>
+</tr>
+<tr><td><code>remove_perms</code></td><td><code>0x2000</code></td><td></td><td>
+  <code>permissions()</code> removes the argument permission bits from the 
+  file's current bits</td>
+</tr>
+<tr><td><code><a name="symlink_perms">symlink_perms</a></code></td><td><code>0x4000</code></td><td></td><td>
+  <span style="background-color: #FFFF00">On ISO/</span><span style="background-color: #FFFF00">IEC</span><span style="background-color: #FFFF00"> 9945
+  </span> <code><span style="background-color: #FFFF00">permissions()</span></code><span style="background-color: #FFFF00"> resolves symlinks unless
+  </span> <code><span style="background-color: #FFFF00">symlink_perms</span></code><span style="background-color: #FFFF00"> is specified. 
+  Meaningless on Windows as </span> <code>
+  <span style="background-color: #FFFF00">permissions()</span></code><span style="background-color: #FFFF00"> never resolves symlinks. 
+  Meaningless on Mac OS X and some other BSD systems as </span> <code>
+  <span style="background-color: #FFFF00">permissions()</span></code><span style="background-color: #FFFF00"> always resolves symlinks. Get over it.</span></td>
+</tr>
+
+</table>
+<h2><a name="file_status">Class file_status</a> [class.file_status]</h2>
+<pre>namespace boost
+{
+  namespace filesystem
+  {
+      class file_status
+      {
+      public:
+
+        // <a href="#file_status-constructors">constructors</a>
+        file_status() noexcept;
+        explicit file_status(<a href="#file_type">file_type</a> ft, <a href="#Enum-perms">perms</a> prms = perms_not_known) noexcept;
+
+        // compiler generated
+        file_status(const file_status&) noexcept;
+        file_status& operator=(const file_status&) noexcept;
+       ~file_status() noexcept;
+
+        // <a href="#file_status-observers">observers</a>
+        <a href="#file_type">file_type</a>  type() const noexcept;
+        <a href="#Enum-perms">perms</a>      permissions() const noexcept;
+
+        // <a href="#file_status-modifiers">modifiers</a>
+        void       type(<a href="#file_type">file_type</a> ft) noexcept;
+        void       permissions(<a href="#Enum-perms">perms</a> prms) noexcept;
+      };
+  }  // namespace filesystem
+}  // namespace boost</pre>
+<p>An object of type <code>file_status</code> stores information about the type 
+and permissions of a file.</p>
+<h3><a name="file_status-constructors"><code>file_status</code> constructors</a> 
+[file_status.cons]</h3>
+<pre>explicit file_status() noexcept;</pre>
+<blockquote>
+  <p><i>Postconditions:</i> <code>type() == status_error</code>, <code>permissions() == perms_not_known</code>.</p>
+</blockquote>
+<pre>explicit file_status(<a href="#file_type">file_type</a> ft, <a href="#Enum-perms">perms</a> prms = perms_not_known) noexcept;</pre>
+<blockquote>
+  <p><i>Postconditions:</i> <code>type() == ft</code>, <code>permissions() == prms</code>.</p>
+</blockquote>
+  <h3><a name="file_status-observers"><code>file_status</code> observers</a> [file_status.obs]</h3>
+<pre><a href="#file_type">file_type</a> type() const noexcept;</pre>
+<blockquote>
+  <p><i>Returns: </i>The value of <code>type()</code> specified by the <i>postconditions</i> of the most recent call to a constructor, operator=, or <code>type(file_type)</code> function.</p>
+</blockquote>
+<pre><a href="#Enum-perms">perms</a> permissions() const noexcept;</pre>
+<blockquote>
+  <p><i>Returns: </i>The value of <code>permissions()</code> specified by the <i>postconditions</i> of the most recent call to a constructor, operator=, or <code>permissions(perms)</code> function.</p>
+</blockquote>
+<h3><a name="file_status-modifiers"><code>file_status</code> modifiers</a> [file_status.mods]</h3>
+<pre>void type(<a href="#file_type">file_type</a> ft) noexcept;</pre>
+<blockquote>
+  <p><i>Postconditions:</i> <code>type() == ft</code>.</p>
+</blockquote>
+<pre>void permissions(<a href="#Enum-perms">perms</a> prms) noexcept;</pre>
+<blockquote>
+  <p><i>Postconditions:</i> <code>permissions() == prms</code>.</p>
+</blockquote>
+<h2><a name="Class-directory_entry">Class <code>directory_entry</code></a> [class.directory_entry]</h2>
+
+<pre>namespace boost
+{
+  namespace filesystem
+  {
+      class directory_entry
+      {
+      public:
+
+        // <a href="#directory_entry-constructors">constructors</a> and destructor
+        directory_entry();
+        directory_entry(const directory_entry&);
+        explicit directory_entry(const path& p, file_status st=file_status(),
+          file_status symlink_st=file_status());
+       ~directory_entry(); 
+
+        // <a href="#directory_entry-modifiers">modifiers</a>
+        directory_entry& operator=(const directory_entry&);
+        void assign(const path& p, file_status st=file_status(),
+          file_status symlink_st=file_status());
+        void replace_filename(const path& p, file_status st=file_status(),
+          file_status symlink_st=file_status());
+
+        // <a href="#directory_entry-observers">observers</a>
+        const path&  path() const;
+        file_status  status() const;
+        file_status  status(system::error_code& ec) const;
+        file_status  symlink_status() const;
+        file_status  symlink_status(system::error_code& ec) const;
+
+        bool operator< (const directory_entry& rhs);
+        bool operator==(const directory_entry& rhs); 
+        bool operator!=(const directory_entry& rhs); 
+        bool operator< (const directory_entry& rhs);
+        bool operator<=(const directory_entry& rhs);
+        bool operator> (const directory_entry& rhs);
+        bool operator>=(const directory_entry& rhs);
+      private:
+        path                 m_path;           // for exposition only
+        mutable file_status  m_status;         // for exposition only; stat()-like
+        mutable file_status  m_symlink_status; // for exposition only; lstat()-like
+      };
+
+  }  // namespace filesystem
+}  // namespace boost</pre>
+
+<p>A <code>directory_entry</code> object stores a <code>path object</code>, 
+a <code>file_status</code> object for non-symbolic link status, and a <code>file_status</code> object for symbolic link status. The <code>file_status</code> objects act as value caches.</p>
+<blockquote>
+<p>[<i>Note:</i> Because <code>status()</code>on a pathname may be a relatively expensive operation, 
+some operating systems provide status information as a byproduct of directory 
+iteration. Caching such status information can result is significant time savings. Cached and 
+non-cached results may differ in the presence of file system races. <i>—end note</i>]</p>
+<p><span style="background-color: #E0E0E0"><i>Actual cold-boot timing of iteration over 
+a directory with 15,047 entries was six seconds for non-cached status queries 
+versus one second for cached status queries. Windows XP, 3.0 GHz processor, with 
+a moderately fast hard-drive. Similar speedups are expected on Linux and BSD-derived 
+systems that provide status as a by-product of directory iteration.</i></span></p>
+</blockquote>
+<h3> <a name="directory_entry-constructors"> <code>directory_entry </code>constructors</a> 
+[directory_entry.cons]</h3>
+<pre>directory_entry();</pre>
+<blockquote>
+  <p><i>Postcondition:</i></p>
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="36%">
+    <tr>
+      <td width="18%"><b>Expression</b></td>
+      <td width="82%"><b>Value</b></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>path().empty()</code></td>
+      <td width="82%"><code>true</code></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>status()</code></td>
+      <td width="82%"><code>file_status()</code></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>symlink_status()</code></td>
+      <td width="82%"><code>file_status()</code></td>
+    </tr>
+  </table>
+</blockquote>
+<pre>explicit directory_entry(const path& p, file_status st=file_status(), file_status symlink_st=file_status());</pre>
+<blockquote>
+  <p><i>Postcondition:</i></p>
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="36%">
+    <tr>
+      <td width="18%"><b>Expression</b></td>
+      <td width="82%"><b>Value</b></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>path()</code></td>
+      <td width="82%"><code>p</code></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>status()</code></td>
+      <td width="82%"><code>st</code></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>symlink_status()</code></td>
+      <td width="82%"><code>symlink_st</code></td>
+    </tr>
+  </table>
+</blockquote>
+<h3> <a name="directory_entry-modifiers"> <code>directory_entry </code>modifiers</a> 
+[directory_entry.mods]</h3>
+<pre>void assign(const path& p, file_status st=file_status(), file_status symlink_st=file_status());</pre>
+<blockquote>
+  <p><i>Postcondition:</i></p>
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="36%">
+    <tr>
+      <td width="18%"><b>Expression</b></td>
+      <td width="82%"><b>Value</b></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>path()</code></td>
+      <td width="82%"><code>p</code></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>status()</code></td>
+      <td width="82%"><code>st</code></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>symlink_status()</code></td>
+      <td width="82%"><code>symlink_st</code></td>
+    </tr>
+  </table>
+</blockquote>
+<pre>void replace_filename(const path& p, file_status st=file_status(), file_status symlink_st=file_status());</pre>
+<blockquote>
+  <p><i>Postcondition:</i></p>
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="43%">
+    <tr>
+      <td width="18%"><b>Expression</b></td>
+      <td width="82%"><b>Value</b></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>path()</code></td>
+      <td width="82%"><code>path().branch() / s</code></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>status()</code></td>
+      <td width="82%"><code>st</code></td>
+    </tr>
+    <tr>
+      <td width="18%"><code>symlink_status()</code></td>
+      <td width="82%"><code>symlink_st</code></td>
+    </tr>
+  </table>
+</blockquote>
+<h3> <a name="directory_entry-observers"> <code>directory_entry</code> observers</a> 
+[directory_entry.obs]</h3>
+<pre>const path& path() const;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>m_path</code></p>
+</blockquote>
+<pre>file_status status() const;
+file_status status(system::error_code& ec) const;</pre>
+<blockquote>
+<p><i>Effects:</i> As if,</p>
+  <blockquote>
+    <pre>if ( !status_known( m_status ) )
+{
+  if ( status_known(m_symlink_status) && !is_symlink(m_symlink_status) )
+    { m_status = m_symlink_status; }
+  else { m_status = status(m_path<i>[, ec]</i>); }
+}</pre>
+  </blockquote>
+  <p><i>Returns:</i> <code>m_status</code></p>
+  
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  
+</blockquote>
+<pre>file_status  symlink_status() const;
+file_status  symlink_status(system::error_code& ec) const;</pre>
+<blockquote>
+<p>
+  <i>Effects:</i> As if,</p>
+  <blockquote>
+    <pre>if ( !status_known( m_symlink_status ) )
+{
+  m_symlink_status = symlink_status(m_path<i>[, ec]</i>);
+}</pre>
+  </blockquote>
+  <p><i>Returns:</i> <code>m_symlink_status</code></p>
+  
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  
+</blockquote>
+<pre>bool operator==(const directory_entry& rhs);</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>m_path == rhs.m_path</code>.</p>
+</blockquote>
+<pre>bool operator!=(const directory_entry& rhs);</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>m_path != rhs.m_path</code>.</p>
+</blockquote>
+<pre>bool operator< (const directory_entry& rhs);</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>m_path < rhs.m_path</code>.</p>
+</blockquote>
+<pre>bool operator<=(const directory_entry& rhs);</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>m_path <= rhs.m_path</code>.</p>
+</blockquote>
+<pre>bool operator> (const directory_entry& rhs);</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>m_path > rhs.m_path</code>.</p>
+</blockquote>
+<pre>bool operator>=(const directory_entry& rhs);</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>m_path >= rhs.m_path</code>.</p>
+</blockquote>
+<h2><a name="Class-directory_iterator">Class <code>directory_iterator</code> 
+[class.directory_iterator]</a></h2>
+<p>Objects of type <code>directory_iterator</code> provide standard library 
+compliant iteration over the contents of a directory. Also see class <code><a href="#Class-recursive_directory_iterator">recursive_directory_iterator</a></code>.</p>
+<pre>namespace boost
+{
+  namespace filesystem
+  {
+      class directory_iterator
+      {
+      public:
+        // <a href="#directory_iterator-members">member functions</a>
+
+        directory_iterator() noexcept;  // creates the "end" iterator
+        directory_iterator(const directory_iterator&);
+        explicit directory_iterator(const path& p);
+        directory_iterator(const path& p, system::error_code& ec);
+       ~directory_iterator();
+
+        directory_iterator& operator=(const directory_iterator&);
+
+        directory_iterator& operator++();
+        directory_iterator& increment(system::error_code& ec);
+
+        // other members as required by
+        //  C++ Std, 24.1.1 Input iterators [input.iterators]
+      };
+
+  }  // namespace filesystem
+}  // namespace boost</pre>
+<p> <code>directory_iterator</code> satisfies the requirements of an 
+input iterator (C++ Std, 24.2.1, Input iterators [input.iterators]).</p>
+<p>A <code>directory_iterator</code> reads successive elements from the directory for 
+which it was constructed, as if by calling ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/readdir_r.html">readdir_r()</a></code>. After a <code>directory_iterator</code> is constructed, and every time <code>operator++</code> is called, 
+it reads a directory element and stores information about it in a object of type <code><a href="#Class-directory_entry">directory_entry</a></code>. <code>operator++</code> is not equality preserving; that is, <code>i == j</code> does not imply that <code>++i == ++j</code>. </p>
+<blockquote>
+<p>[<i>Note:</i> The practical consequence of not preserving equality is that directory iterators 
+can only be used for single-pass algorithms. <i>—end note</i>]</p>
+</blockquote>
+<p>If the end of the directory elements is reached, the iterator shall become equal to 
+the end iterator value. The constructor <code>directory_iterator()</code> with no arguments always constructs an end iterator object, which 
+shall be the only valid iterator for the end condition. The result of <code>operator*</code> on an end iterator is not defined. For any other iterator value 
+a <code>const directory_entry&</code> is returned. The result of <code>operator-></code> on an end iterator is 
+undefined behavior. For any other iterator value a <code>const directory_entry*</code> is 
+returned. </p>
+<p>Two end iterators are always equal. An end iterator shall not be equal to a non-end 
+iterator.</p>
+<blockquote>
+<p><i><span style="background-color: #E0E0E0">The above wording is based on the 
+Standard Library's istream_iterator wording.</span></i></p>
+</blockquote>
+<p>The result of calling the <code>path()</code> member of the <code>directory_entry</code> object obtained by dereferencing a <code>directory_iterator</code> is a reference to a <code>path</code> object composed of the directory argument from which the iterator was 
+constructed with filename of the directory entry appended as if by <code>operator/=</code>. </p>
+<p>Directory iteration shall not yield directory entries for the current (<i>dot</i>) 
+and parent (<i>dot dot</i>) directories.</p>
+<p>The order of directory entries obtained by dereferencing successive 
+increments of a <code>directory_iterator</code> is unspecified.</p>
+<blockquote>
+<p>[<i>Note:</i> Programs performing directory iteration may wish to test if the 
+path obtained by dereferencing a directory iterator actually exists. It could be 
+a
+symbolic link to a non-existent file. Programs recursively 
+walking directory trees for purposes of removing and renaming entries may wish 
+to avoid following symbolic links.</p>
+<p>If a file  is removed from or added to a directory after the 
+construction of a <code>directory_iterator</code> for the directory, it is 
+unspecified whether or not subsequent incrementing of the iterator will ever 
+result in an iterator whose value is the removed or added directory entry. See
+ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/readdir_r.html">readdir_r()</a></code>. <i>—end note</i>]</p>
+</blockquote>
+<h3><a name="directory_iterator-members"><code>directory_iterator</code> members</a> 
+[directory_iterator.members]</h3>
+
+<p><code><a name="directory_iterator-default-ctor">directory_iterator</a>() 
+noexcept;</code></p>
+
+<blockquote>
+
+<p><i>Effects:</i> Constructs the end iterator.</p>
+
+</blockquote>
+
+<pre><code>explicit <a name="directory_iterator-ctor-path">directory_iterator</a>(</code>const path& p<code>);
+directory_iterator(</code>const path& p, system::error_code& ec<code>);</code></pre>
+<blockquote>
+
+<p><i>Effects:</i> Constructs a iterator representing the first 
+entry in the directory <code>p</code> resolves to, if any; otherwise, the end iterator.</p>
+
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+
+<p>[<i>Note:</i> To iterate over the current directory, use <code>directory_iterator(".")</code> rather than <code>directory_iterator("")</code>. <i>—end note</i>]</p>
+</blockquote>
+<pre>directory_iterator& <a name="directory_iterator-increment">operator++</a>();
+directory_iterator& increment(system::error_code& ec);</pre>
+<blockquote>
+
+<p><i>Effects:</i> As specified by the C++ Standard, 24.1.1 Input iterators [input.iterators]</p>
+
+<p><i>Returns:</i> <code>*this</code>.</p>
+
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+
+</blockquote>
+<h3><a name="directory_iterator-non-member-functions"><code>directory_iterator</code> non-member functions</a></h3>
+<pre>const directory_iterator& begin(const directory_iterator& iter);</pre>
+<blockquote>
+  <p><i>Returns: </i><code>iter</code>.</p>
+</blockquote>
+<pre>directory_iterator end(const directory_iterator&);</pre>
+<blockquote>
+  <p><i>Returns: </i><code>directory_iterator()</code>.</p>
+</blockquote>
+<h2><a name="Class-recursive_directory_iterator">Class <code>recursive_directory_iterator</code> 
+[class.rec.dir.itr]</a></h2>
+<p>Objects of type <code>recursive_directory_iterator</code> provide standard library 
+compliant iteration over the contents of a directory, including recursion into 
+its sub-directories.</p>
+<pre>namespace boost
+{
+  namespace filesystem
+  {
+      class recursive_directory_iterator :
+        public iterator<input_iterator_tag, directory_entry>
+      {
+      public:
+
+        // constructors and destructor
+        recursive_directory_iterator() noexcept;
+        recursive_directory_iterator(const recursive_directory_iterator&);
+        explicit recursive_directory_iterator(const path& p,
+          <a href="#symlink_option">symlink_option</a> opt = symlink_option::none);
+        recursive_directory_iterator(const path& p,
+          <a href="#symlink_option">symlink_option</a> opt, system::error_code& ec);
+        recursive_directory_iterator(const path& p, system::error_code& ec);
+       ~recursive_directory_iterator();
+
+        // observers
+        int level() const noexcept;
+        bool no_push<code>_pending</code>() const noexcept;
+
+        // modifiers
+        recursive_directory_iterator& operator=(const recursive_directory_iterator&);
+
+        recursive_directory_iterator& operator++();
+        recursive_directory_iterator& increment(system::error_code& ec);
+
+        void pop();
+        void no_push(bool value=true);
+
+        // other members as required by
+        //  C++ Std, Input iterators [input.iterators]
+
+      private:
+<i><b>        // actual data members will probably be stored in a shared object,
+        // or some similar mechanism, to achieve the required input iterator
+        // copy semantics
+</b></i>        int            m_level; <b><i>   // for exposition only</i></b>
+        bool           m_no_<code>push</code>;  <i><b>// for exposition only
+        </b></i><a href="#symlink_option">symlink_option</a> m_options;  <i><b>// for exposition only</b></i>
+      };
+
+  }  // namespace filesystem
+}  // namespace boost</pre>
+
+<p>The behavior of a <code>recursive_directory_iterator</code> is the same 
+as a <code>directory_iterator</code> unless otherwise specified.</p>
+<ul>
+  <li>Incrementing a <code>recursive_directory_iterator</code> pointing to a 
+  directory causes that directory itself to be iterated over, as specified by 
+  the <code>operator++</code> and <code>increment</code> functions.<br>
+ </li>
+  <li>When a <code>recursive_directory_iterator</code> reaches the end of the directory currently being iterated 
+  over, or when <code>pop()</code> is called, <code>m_level</code> is 
+  decremented, and iteration of the parent directory continues.</li>
+</ul>
+<pre>recursive_directory_iterator() noexcept;</pre>
+<blockquote>
+
+<p><i>Effects:</i> Constructs the end iterator.</p>
+
+</blockquote>
+
+<pre>explicit recursive_directory_iterator(const path& p, <a href="#symlink_option">symlink_option</a> opt = symlink_option::none);
+recursive_directory_iterator(const path& p, <a href="#symlink_option">symlink_option</a> opt, system::error_code& ec);
+recursive_<code>directory_iterator(</code>const path& p, system::error_code& ec<code>);</code></pre>
+<blockquote>
+
+<p><i>Effects:</i>  Constructs a iterator representing the first 
+entry in the directory <code>p</code> resolves to, if any; otherwise, the end iterator.</p>
+
+<p><i>Postcondition: </i>Unless the end iterator was constructed,<i> </i><code>level() == 0 && no_push_pending() == false && m_options == opt</code>. 
+For the signature without a <code>symlink_option</code> argument, <code>opt</code> is assumed to be <code>symlink_option::none</code>.</p>
+
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+
+<p>[<i>Note:</i> To iterate over the current directory, use <code>recursive_directory_iterator(".")</code> rather than <code>recursive_directory_iterator("")</code>. <i>—end note</i>]</p>
+
+<p>[<i>Note:</i> By default, <code>recursive_directory_iterator</code> does not 
+follow directory symlinks. To follow directory symlinks, specify <code>opt</code> as <code>symlink_option::recurse</code> <i>—end note</i>]</p>
+</blockquote>
+<pre>int level() const noexcept;</pre>
+<blockquote>
+  <p><i>Requires:</i> <code>*this != recursive_directory_iterator()</code>.</p>
+  <p><i>Returns:</i> <code>m_level</code>.</p>
+</blockquote>
+<pre>bool <code>no_push_pending</code>() const noexcept;</pre>
+<blockquote>
+  <p><i>Requires:</i> <code>*this != recursive_directory_iterator()</code>.</p>
+  <p><i>Returns:</i> <code>m_no_push</code>.</p>
+</blockquote>
+<pre><code>recursive_directory_iterator</code>& <a name="recursive_directory_iterator-increment">operator++</a>();
+recursive_directory_iterator& increment(system::error_code& ec);</pre>
+<blockquote>
+
+<p><i>Effects:</i> As specified by the C++ Standard, 24.1.1 Input iterators [input.iterators], 
+except:</p>
+
+<ul>
+  <li>
+
+<p>if <code>!no_push_pending() && is_directory(this->status()) 
+&& (!is_symlink(this->symlink_status()) || (m_options & symlink_option::recurse) != 0)</code> then  <code>m_level</code> is incremented and directory <code>(*this)->path()</code> is recursively iterated into.<br>
+ </p>
+
+  </li>
+  <li>if there are no more directory entries at this level then <code>m_level</code> 
+is decremented and iteration of the parent directory resumes.</li>
+</ul>
+
+<p><i>Postcondition:</i> <code>no_push_pending() == false</code>.</p>
+
+<p><i>Returns:</i> <code>*this</code>.</p>
+
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+
+</blockquote>
+<pre>void pop();</pre>
+<blockquote>
+  <p><i>Requires:</i> <code>*this != recursive_directory_iterator()</code>.</p>
+  <p><i>Effects:</i> If <code>level() == 0</code>, set <code>*this</code> to <code>recursive_directory_iterator()</code>. 
+  Otherwise, <code>--m_level</code>, cease iteration of the directory currently being 
+  iterated over, and continue iteration over the parent directory.</p>
+</blockquote>
+<pre>void no_push(bool value=true);</pre>
+<blockquote>
+  <p><i>Requires:</i> <code>*this != recursive_directory_iterator()</code>.</p>
+<p><i>Postcondition:</i> <code>no_push_pending() == value</code>.</p>
+  <p>[<i>Note:</i> <code>no_push()</code> is used to prevent 
+  unwanted recursion into a directory. <i>—end note</i>]</p>
+</blockquote>
+<h3><a name="recursive_directory_iterator-non-member-functions"><code>recursive_directory_iterator</code> non-member functions</a></h3>
+<pre>const recursive_directory_iterator& begin(const recursive_directory_iterator& iter);</pre>
+<blockquote>
+  <p><i>Returns: </i><code>iter</code>.</p>
+</blockquote>
+<pre>recursive_directory_iterator end(const recursive_directory_iterator&);</pre>
+<blockquote>
+  <p><i>Returns: </i><code>recursive_directory_iterator()</code>.</p>
+</blockquote>
+<h2><a name="Operational-functions">Operational functions</a> [fs.op.funcs]</h2>
+<p>Operational functions query or modify files, including directories, in external 
+storage.</p>
+<p>Operational functions access a file by resolving an 
+object of class <code>path</code> to a particular file in a file hierarchy. The 
+path is resolved as if by the ISO/IEC 9945 <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap04.html#tag_04_11">Pathname Resolution</a> mechanism.</p>
+<p>[<i>Note: </i>Because hardware failures, network failures, <a href="#file-system-race">file system races</a>, and many 
+other kinds of errors occur frequently in file system operations, users should be aware 
+that any filesystem operational function, no matter how apparently innocuous, may encounter 
+an error. See <a href="#Error-reporting">Error reporting</a>. <i>—end note</i>]</p>
+<pre>path <a name="absolute">absolute</a>(const path& p, const path& base=current_path());</pre>
+  <blockquote>
+  <p><i>Returns:</i> A <a href="#Absolute-path">absolute path</a> composed according to the 
+  following table</p>
+  <table border="1" cellpadding="5" cellspacing="0" bordercolor="#111111" style="border-collapse: collapse">
+    <tr>
+      <td align="center"> </td>
+      <td align="center"><b><code>p.<br>
+      has_root_directory()</code></b></td>
+      <td align="center"><b><code>!p.has_root_directory()</code></b></td>
+    </tr>
+    <tr>
+      <td align="center"><b><code>p.has_root_name()</code></b></td>
+      <td align="left"><code>return p</code></td>
+      <td align="left"><code>return<br>
+ p.root_name()<br>
+ / absolute(base)<br>
+    .root_directory()<br>
+       / absolute(base)<br>
+    .relative_path()<br>
+ / p.relative_path()</code></td>
+    </tr>
+    <tr>
+      <td align="center"><b><code>!p.has_root_name()</code></b></td>
+      <td align="left"><code>return<br>
+ absolute(base)<br>
+  .root_name()<br>
+       / p</code></td>
+      <td align="left"><code>return absolute(base)<br>
+ / p</code></td>
+    </tr>
+  </table>
+  <p>[<i>Note:</i> For the returned path, <code>rp,</code> <code>rp.is_absolute()</code> is true. <i>—end note</i>]</p>
+  <p><i>Throws:</i> If <code>base.is_absolute()</code> is true, throws only if 
+  memory allocation fails.</p>
+</blockquote>
+<pre>path <a name="canonical">canonical</a>(const path& p, const path& base = current_path());
+path canonical(const path& p, system::error_code& ec);
+path canonical(const path& p, const path& base, system::error_code& ec);</pre>
+<blockquote>
+<p><i>Overview:</i> Converts <code>p</code>, which must exist, to an absolute 
+path that has no symbolic link, <a href="#Dot">dot</a>, 
+or <a href="#Dot">dot-dot</a> elements. </p>
+<p><i>Returns:</i> A <a href="#canonical-path">canonical path</a> that refers to 
+the same file system object as <code>absolute(p,base)</code>. For the overload 
+without a <code>base</code> argument, <code>base</code> is <code>current_path()</code>.</p>
+  <p><i>Throws:</i>  As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  
+  <p><i>Remarks:</i> <code>!exists(p)</code> is an error.</p>
+  
+  <p>[<i>Note:</i> Canonical pathnames allow security checking of a path (eg. 
+  does this path live in /home/goodguy or /home/badguy?)  —end note]</p>
+  
+</blockquote>
+<pre>void <a name="copy">copy</a>(const path& from, const path& to);
+void copy(const path& from, const path& to, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Effects:</i> As if</p>
+  
+  <blockquote>
+    <pre>file_status s(symlink_status(from<i>[</i><code>, ec</code><i>]</i>));
+if(is_symlink(s))
+  copy_symlink(from, to<i>[</i><code>, ec</code><i>]</i>);
+else if(is_directory(s))
+  copy_directory(from, to<i>[</i><code>, ec</code><i>]</i>);
+else if(is_regular_file(s))
+  copy_file(from, to, copy_option::fail_if_exists<i>[</i><code>, ec</code><i>]</i>);
+else
+<i> Report error as specified in <a href="#Error-reporting">Error reporting</a>.</i></pre>
+  </blockquote>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  
+</blockquote>
+<pre>void <a name="copy_directory">copy_directory</a>(const path& from, const path& to);
+void copy_directory(const path& from, const path& to, system::error_code& ec);</pre>
+<blockquote>
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+   bordercolor="#111111" width="90%" bgcolor="#E0E0E0">
+    <tr>
+      <td width="100%">
+      <p><i>This function is poorly named; it should probably be an overload of
+      <code>create_directory</code> with an additional argument.</i></td>
+    </tr>
+  </table>
+  
+  <p><i>Effects: </i>Creates directory <code>to</code>, with 
+  attributes copied from directory <code>from</code>. The set of attributes 
+  copied is operating system dependent.</p>
+  
+<blockquote>
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+   bordercolor="#111111" width="90%" bgcolor="#E8FFE8">
+    <tr>
+      <td width="100%">
+      <p>[<i>Note:</i> For ISO 9945/POSIX based operating systems the 
+      attributes are those copied by native API <code>stat(from.c_str(), &from_stat)</code> 
+      followed by <code>mkdir(to.c_str(),from_stat.st_mode)</code>.  For 
+      Windows based operating systems the attributes are those copied by native 
+      API <code>CreateDirectoryExW(from.c_str(), to.c_str(), 0)</code>.  <i>
+      —end note</i>]</td>
+    </tr>
+  </table>
+</blockquote>
+  
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+
+</blockquote>
+
+<pre>void copy_file(const path& from, const path& to);
+void copy_file(const path& from, const path& to, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Effects: </i><code>copy_file(from, to, copy_option::fail_if_exists</code><i>[</i><code>, ec</code><i>]</i><code>)</code>.</p>
+  
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  
+</blockquote>
+<pre>void <a name="copy_file">copy_file</a>(const path& from, const path& to, <a href="#copy_option">copy_option</a> option);
+void <a name="copy_file2">copy_file</a>(const path& from, const path& to, <a href="#copy_option">copy_option</a> option, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Effects:</i> If <code>option == copy_option::</code><code>fail_if_exists && exists(to)</code>, an error is reported. Otherwise, the contents and attributes of the file <code>from</code> resolves to are copied to the file <code>to</code> resolves to.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+</blockquote>
+<pre>void <a name="copy_symlink">copy_symlink</a>(const path& existing_symlink, const path& new_symlink);
+void copy_symlink(const path& existing_symlink, const path& new_symlink, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Effects: </i><code>create_symlink(read_symlink(existing_symlink</code><i>[</i><code>, ec</code><i>]</i><code>), new_symlink</code><i>[</i><code>, ec</code><i>]</i><code>)</code>.</p>
+  
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  
+</blockquote>
+<pre>bool <a name="create_directories">create_directories</a>(const path& p);
+bool <a name="create_directories2">create_directories</a>(const path& p, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Effects:</i> Establishes the postcondition by calling <code>
+  create_directory()</code> for any element of <code>p</code> that does not 
+  exist.</p>
+  <p><i>Postcondition:</i> <code>is_directory(p)</code></p>
+  <p><i>Returns:</i> <code>true</code> if a new directory was created, otherwise <code>
+  false</code>.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  <p><i>Complexity:</i> <i>O(n+1)</i> where <i>n</i> is the number of elements 
+  of <code>p</code> that do not exist.</p>
+</blockquote>
+<pre>bool <a name="create_directory">create_directory</a>(const path& p);
+bool <a name="create_directory2">create_directory</a>(const path& p, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Effects:</i> Establishes the postcondition by attempting to create the 
+  directory <code>p</code> resolves to, as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/mkdir.html">
+  mkdir()</a></code> with a second argument of S_IRWXU|S_IRWXG|S_IRWXO. Creation 
+  failure because <code>p</code> resolves to an existing directory shall not be 
+  treated as an error. </p>
+  <p><i>Postcondition:</i> <code>is_directory(p)</code></p>
+  <p><i>Returns:</i> <code>true</code> if a new directory was created, otherwise <code>false</code>.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+</blockquote>
+<pre>void <a name="create_directory_symlink">create_directory_symlink</a>(const path& to, const path& new_symlink);
+void create_directory_symlink(const path& to, const path& new_symlink, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Effects:</i> Establishes the postcondition, as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/symlink.html">symlink()</a></code>.</p>
+  <p><i>
+  Postcondition:</i> <code>new_symlink</code> resolves to a symbolic link file that 
+  contains an unspecified representation of <code>to</code>.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  <p>[<i>Note:</i> Some operating systems, such as Windows, require symlink creation to 
+  identify that the link is to a directory. Portable code should use <code>create_directory_symlink()</code> to create directory symlinks rather than <code>create_symlink()</code> <i>—end note</i>]</p>
+  <p>[<i>Note:</i> Some operating systems do not support symbolic links at all or support 
+  them only for regular files. 
+  Some file systems do not 
+  support 
+  symbolic links regardless of the operating system - the FAT file system used on 
+  memory cards and flash drives, for example. <i>—end note</i>]</p>
+  </blockquote>
+<pre>void <a name="create_hard_link">create_hard_link</a>(const path& to, const path& new_hard_link);
+void <a name="create_hard_link2">create_hard_link</a>(const path& to, const path& new_hard_link, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Effects:</i> Establishes the postcondition, as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/link.html">link()</a></code>.</p>
+  <p><i>Postcondition:</i></p>
+  <ul>
+    <li> <code>exists(to) && 
+    exists(</code><code>new_hard_link</code><code>) && equivalent(to, 
+     
+    </code><code>new_hard_link</code><code>)</code></li>
+    <li>The contents of the file or directory
+    <code>to</code> resolves to are unchanged.</li>
+  </ul>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  <p>[<i>Note:</i> Some operating systems do not support hard links at all or support 
+  them only for regular files. Some file systems do not support hard 
+  links regardless of the operating system - the FAT file system used on memory 
+  cards and flash drives, for example. Some file systems limit the number of 
+  links per file. <i>—end note</i>]</p>
+  </blockquote>
+<pre>void <a name="create_symlink">create_symlink</a>(const path& to, const path& new_symlink);
+void <a name="create_symlink2">create_symlink</a>(const path& to, const path& new_symlink, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Effects:</i> Establishes the postcondition, as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/symlink.html">symlink()</a></code>.</p>
+  <p><i>
+  Postcondition:</i> <code>new_symlink</code> resolves to a symbolic link file that 
+  contains an unspecified representation of <code>to</code>.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  <p>[<i>Note:</i> Some operating systems do not support symbolic links at all or support 
+  them only for regular files. 
+  Some file systems do not 
+  support 
+  symbolic links regardless of the operating system - the FAT system used on 
+  memory cards and flash drives, for example. <i>—end note</i>]</p>
+  </blockquote>
+<pre>path <a name="current_path">current_path</a>();
+path <a name="current_path2">current_path</a>(system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Returns:</i> The current working directory path, as if by ISO/IEC  
+  9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/getcwd.html">getcwd()</a></code>. <code>is_absolute()</code> is true for the returned path.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  <p>[<i>Note: </i>The <code>current_path()</code> name was chosen to emphasize that the return is a 
+  path, not just a single directory name.</p>
+  <p>The current path as returned by many operating systems is a dangerous 
+  global variable. It may be changed unexpectedly by a third-party or system 
+  library functions, or by another thread.  <i>—end note</i>]</p>
+</blockquote>
+<pre>void current_path(const path& p);
+void current_path(const path& p, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Effects:</i> Establishes the postcondition, as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/chdir.html">chdir()</a></code>.</p>
+<p><i>Postcondition:</i> <code>equivalent(p, current_path())</code>.</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  <p>[<i>Note: </i>The current path for many operating systems is a dangerous 
+  global state. It may be changed unexpectedly by a third-party or system 
+  library functions, or by another thread.  <i>—end note</i>]</p>
+</blockquote>
+<pre>bool <a name="exists">exists</a>(file_status s) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>status_known(s) && s.type() != file_not_found</code></p>
+</blockquote>
+<pre>bool <a name="exists2">exists</a>(const path& p);
+bool <a name="exists3">exists</a>(const path& p, system::error_code& ec) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>exists(status(p))</code> or <code>exists(status(p, ec))</code>, 
+  respectively. If ec != 0 and an error</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+</blockquote>
+<pre><code>bool <a name="equivalent">equivalent</a>(const path& p1, const path& p2);
+bool <a name="equivalent2">equivalent</a>(const path& p1, const path& p2, system::error_code& ec);</code></pre>
+<blockquote>
+  <p><i>Effects:</i> Determines <code>file_status s1</code> and <code>s2</code>, as if by <code>status(p1)</code> and  <code>status(p2)</code>, 
+  respectively.</p>
+  <p><i>Returns:</i> <code>true</code>, if <code>sf1 == 
+  sf2</code> and <code>p1</code> and <code>p2</code> resolve to the same file 
+  system entity, else <code>false</code>.</p>
+  <blockquote>
+  <p>Two paths are considered to resolve to the same 
+  file system entity if two candidate entities reside on the same device at the 
+  same location. This is determined as if by the values of the ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure<code>,</code> obtained as if by <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code> for the two paths, having equal <code>st_dev</code> values 
+  and equal <code>st_ino</code> values.</p>
+  <p>[<i>Note:</i> ISO/IEC 9945 requires that <i>"st_dev</i> must be unique within a Local Area Network". Conservative
+  ISO/IEC 9945 implementations may also wish to check for equal <code>st_size</code> and <code>st_mtime</code> values. <i>Windows</i> implementations may use <code>GetFileInformationByHandle()</code> as a surrogate for <code>stat()</code>, 
+  and consider "same" to be equal values for <code>dwVolumeSerialNumber</code>, <code>nFileIndexHigh</code>, <code>nFileIndexLow</code>, <code>nFileSizeHigh</code>, <code>nFileSizeLow</code>, <code>ftLastWriteTime.dwLowDateTime</code>, and <code>ftLastWriteTime.dwHighDateTime</code>. <i>—end note</i>]</p>
+  </blockquote>
+  <p><i>Throws:</i> <code>filesystem_error</code> if <code>(!exists(s1) && !exists(s2)) || (is_other(s1) && is_other(s2))</code>, 
+  otherwise as specified in <a href="#Error-reporting">Error reporting</a>.</p>
+</blockquote>
+
+<pre>uintmax_t <a name="file_size">file_size</a>(const path& p);
+uintmax_t <a name="file_size2">file_size</a>(const path& p, system::error_code& ec);</pre>
+
+<blockquote>
+  <p><i>Returns:</i> If <code>exists(p) && is_regular_file(p)</code>, the size 
+  in bytes 
+  of the file <code>p</code> resolves to, determined as if by the value of 
+  the ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure member <code>st_size</code> obtained as if by
+  ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>. 
+  Otherwise, <code>static_cast<uintmax_t>(-1)</code>.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+</blockquote>
+<pre>uintmax_t <a name="hard_link_count">hard_link_count</a>(const path& p);
+uintmax_t hard_link_count(const path& p, system::error_code& ec);</pre>
+<blockquote>
+
+  <p><i>Returns:</i> The number of hard links for <code>p</code>.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+
+</blockquote>
+
+<pre>const path& <a name="initial_path">initial_path</a>();
+const path& <a name="initial_path2">initial_path</a>(<code>system::error_code& ec</code>);</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>current_path()</code> as of the first call to <code>initial_path()</code>.</p>
+  <p>[<i>Note:</i> <code>initial_path()</code> is not thread safe, and may return an undesirable result 
+  if called subsequent to a change to the current directory. These problems can 
+  be avoided by calling <code>initial_path()</code> immediately on entry to 
+  main().  <i>—end note</i>]</p>
+  <p><i>Throws:</i> For the first call, as specified in <a href="#Error-reporting">Error reporting</a>. Subsequent calls throw nothing.</p>
+</blockquote>
+<pre>bool <code><a name="is_directory">is_directory</a></code>(file_status s) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>s.type() == directory_file</code></p>
+</blockquote>
+<pre><code>bool <a name="is_directory2">is_directory</a>(const path& p);
+bool <a name="is_directory3">is_directory</a>(const path& p, system::error_code& ec) noexcept;</code></pre>
+<blockquote>
+  <p><i>Returns:</i> <code>is_directory(status(p))</code> or <code>is_directory(status(p, ec))</code>, 
+  respectively.</p>
+<p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&</code> throws 
+nothing.</p>
+</blockquote>
+<pre><code>bool <a name="is_empty">is_empty</a>(const path& p);
+bool <a name="is_empty2">is_empty</a></a>(const path& p, system::error_code& ec);</code></pre>
+<blockquote>
+  <p><i>Effects:</i> Determines <code>file_status s</code>, as if by <code>status(p, ec)</code>.</p>
+  <p><i>Returns:</i> <code>is_directory(s)<br>
+         ? directory_iterator(p) == directory_iterator()<br>
+         : file_size(p) == 0;</code></p>
+</blockquote>
+<pre>bool <code><a name="is_regular_file">is_regular_file</a></code>(file_status s) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>s.type() == regular_file</code></p>
+</blockquote>
+<pre><code>bool <a name="is_regular_file2">is_regular_file</a>(const path& p);</code></pre>
+<blockquote>
+  <p><i>Returns:</i> <code>is_regular_file(status(p))</code>.</p>
+  <p><i>Throws:</i> <code>filesystem_error</code> if <code>status(p)</code> would throw <code>filesystem_error.</code></p>
+  </blockquote>
+<pre><code>bool <a name="is_regular_file3">is_regular_file</a>(const path& p, system::error_code& ec) noexcept;</code></pre>
+<blockquote>
+  <p><i>Effects:</i> Sets <code>ec</code> as if by <code>status(p, ec)</code>. [<i>Note:</i> <code>status_error</code>, <code>file_not_found</code> and <code>type_unknown</code> cases set <code>ec</code> to error values. To distinguish between cases, call the <code>status</code> function directly. <i>—end 
+  note</i>] </p>
+  <p><i>Returns:</i> <code>is_regular_file(status(p, ec))</code>.</p>
+</blockquote>
+<pre>bool <a name="is_other">is_other</a>(file_status s) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>return exists(s) && !is_regular_file(s) && !is_directory(s) && !is_symlink(s)</code></p>
+</blockquote>
+<pre><code>bool <a name="is_other2">is_other</a>(const path& p);
+bool <a name="is_other3">is_other</a>(const path& p, system::error_code& ec) noexcept;</code></pre>
+<blockquote>
+  <p><i>Returns:</i> <code>is_other(status(p))</code> or <code>is_other(status(p, ec))</code>, 
+  respectively.</p>
+  <p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&</code> throws 
+  nothing.</p>
+</blockquote>
+<pre>bool <a name="is_symlink">is_symlink</a>(file_status s) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>s.type() == symlink_file</code></p>
+</blockquote>
+<pre><code>bool <a name="is_symlink2">is_symlink</a>(const path& p);
+bool <a name="is_symlink3">is_symlink</a>(const path& p, system::error_code& ec) noexcept;</code></pre>
+<blockquote>
+  <p><i>Returns:</i> <code>is_symlink(symlink_status(p))</code> or <code>is_symlink(symlink_status(p, ec))</code>, 
+  respectively.</p>
+  <p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&</code> throws 
+  nothing.</p>
+</blockquote>
+<pre>std::time_t <a name="last_write_time">last_write_time</a>(const path& p);
+std::time_t <a name="last_write_time2">last_write_time</a>(const path& p<code>, system::error_code& ec</code>);</pre>
+<blockquote>
+  <p><i>Returns:</i> The time of last data modification of <code>p</code>, determined as if by the 
+  value of the ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">stat</a></code> structure member <code>st_mtime</code>  obtained 
+  as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+</blockquote>
+<pre>void <a name="last_write_time3">last_write_time</a>(const path& p, const std::time_t new_time);
+void <a name="last_write_time4">last_write_time</a>(const path& p, const std::time_t new_time<code>, system::error_code& ec</code>);</pre>
+<blockquote>
+  <p><i>Effects:</i> Sets the time of last data modification of the file 
+  resolved to by <code>p</code> to <code>new_time</code>, as if by ISO/IEC 
+  9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code> followed by
+  ISO/IEC 9945 <a href="http://www.opengroup.org/onlinepubs/000095399/functions/utime.html"><code>utime()</code></a>.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  <p>[<i>Note:</i> A postcondition of <code>last_write_time(p) == new_time</code> is not specified since it might not hold for file systems 
+  with coarse time granularity. <i>—end note</i>]</p>
+</blockquote>
+<pre>void <a name="permissions">permissions</a>(const path& p, <a href="#symlink_perms">perms</a> prms);
+void permissions(const path& p, <a href="#symlink_perms">perms</a> prms, system::error_code& ec);</pre>
+<blockquote>
+  <p>
+  <i>Requires:</i> <code>!((prms & add_perms) && (prms & remove_perms))</code>.</p>
+  <p><i>Effects:</i> Applies the effective permissions bits from <code>prms</code> to the file <code>p</code> resolves to, as if by
+  ISO/IEC 9945 <code><a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/fchmodat.html">fchmodat()</a></code>. The effective permission bits are determined as 
+  specified by the following table. </p>
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+    <tr>
+      <td><b>bits present in <code>prms</code></b></td>
+      <td><b>Effective bits applied</b></td>
+    </tr>
+    <tr>
+      <td>Neither <code>add_perms</code> nor <code>remove_perms</code></td>
+      <td><code>prms & perms_mask</code></td>
+    </tr>
+    <tr>
+      <td><code>add_perms</code></td>
+      <td>
+      <p><code>status(p).permissions() | (prms & <a href="#perms_mask">perms_mask</a>)</code> </td>
+    </tr>
+    <tr>
+      <td><code>remove_perms</code></td>
+      <td><code>status(p)</code><code>.permissions() & ~(prms & <a href="#perms_mask">perms_mask</a>) </code></td>
+    </tr>
+  </table>
+  <p>[<i>Note:</i> Conceptually permissions are viewed as bits, but the actual 
+  implementation may use some other mechanism. -- <i>end note</i>]</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+</blockquote>
+<pre>path <a name="read_symlink">read_symlink</a>(const path& p);
+path read_symlink(const path& p, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Returns:</i>  If <code>p</code> resolves to a symbolic 
+  link, a <code>path</code> object containing the contents of that symbolic 
+  link. Otherwise an empty <code>path</code> object.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>. [<i>Note:</i> It is an error if <code>p</code> does not 
+  resolve to a symbolic link. <i>—end note</i>]</p>
+</blockquote>
+<pre><span style="background-color: #E8FFE8">path </span><a name="op-relative"><span style="background-color: #E8FFE8">relative</span></a><span style="background-color: #E8FFE8">(const</span><span style="background-color: #E8FFE8"> path& p, </span><span style="background-color: #E8FFE8">system::error_code</span><span style="background-color: #E8FFE8">& </span><span style="background-color: #E8FFE8">ec</span><span style="background-color: #E8FFE8">);</span></pre>
+<blockquote>
+  <p><i>Returns:</i> <code>relative(p, current_path(), ec)</code>.</p>
+  <p><i>Throws:</i>  As specified in Error reporting.</p>
+</blockquote>
+<pre><span style="background-color: #E8FFE8">path </span><span style="background-color: #E8FFE8">relative(const</span><span style="background-color: #E8FFE8"> path& p, const path& base=</span><span style="background-color: #E8FFE8">current_path</span><span style="background-color: #E8FFE8">());</span>
+<span style="background-color: #E8FFE8">path </span><span style="background-color: #E8FFE8">relative(const</span><span style="background-color: #E8FFE8"> path& p, const path& base, </span><span style="background-color: #E8FFE8">system::error_code</span><span style="background-color: #E8FFE8">& </span><span style="background-color: #E8FFE8">ec</span><span style="background-color: #E8FFE8">);</span></pre>
+<blockquote>
+  <p><i>Overview:</i> Returns <code>p</code> made relative to <code>base</code>. 
+  Treats empty or identical paths as corner cases, not errors. Resolves symlinks 
+  and normalizes both <code>p</code> and <code>base</code> before other 
+  processing.</p>
+  <p><i>Returns:</i> <code><a href="#weakly_canonical">weakly_canonical</a>(p).<a href="#lex-relative">lexically_relative</a>(<a href="#weakly_canonical">weakly_canonical</a>(base))</code>. The second form returns <code>path()</code> 
+  if an error occurs.</p>
+  <p><i>Throws:</i> As specified in Error reporting.</p>
+</blockquote>
+<pre>bool <a name="remove">remove</a>(const path& p);
+bool <a name="remove2">remove</a>(const path& p, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Effects:</i>  If <code>exists(symlink_status(p,ec))</code>, it is 
+  removed 
+  as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/remove.html">remove()</a></code>.</p>
+  <blockquote>
+  <p>[<i>Note:</i> A symbolic link is itself removed, rather than the file it 
+  resolves to being removed. <i>—end note</i>]</p>
+  </blockquote>
+  <p><i>Postcondition:</i> <code>!exists(symlink_status(p))</code>.</p>
+  <p><i>Returns:</i>  <code>false</code> if p did not exist in the first 
+  place, otherwise <code>true</code>.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+</blockquote>
+<pre>uintmax_t <a name="remove_all">remove_all</a>(const path& p);
+uintmax_t <a name="remove_all2">remove_all</a>(const path& p, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Effects:</i>  Recursively deletes the contents of p if it exists, 
+  then deletes file <code>p</code> itself, 
+  as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/remove.html">remove()</a></code>.</p>
+  <blockquote>
+  <p>[<i>Note:</i> A symbolic link is itself removed, rather than the file it 
+  resolves to being removed. <i>—end note</i>]</p>
+  </blockquote>
+  <p><i>Postcondition:</i> <code>!exists(p)</code></p>
+  <p><i>Returns:</i> The number of files removed.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+</blockquote>
+<pre>void <a name="rename">rename</a>(const path& old_p, const path& new_p);
+void <a name="rename2">rename</a>(const path& old_p, const path& new_p, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Effects:</i> Renames <code>old_p</code> to <code>new_p</code>, as if by
+  ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/rename.html">rename()</a></code>.</p>
+  <blockquote>
+  <p>[<i>Note:</i> If <code>old_p</code> and <code>new_p</code> resolve to the 
+  same existing file, no action is taken. Otherwise, if <code>new_p</code> resolves to an 
+  existing non-directory file, it is removed, while if <code>new_p</code> resolves to an 
+  existing directory, it is removed if empty on ISO/IEC 9945 but is an error on Windows. A symbolic link is itself renamed, rather than 
+  the file it resolves to being renamed. <i>—end note</i>]</p>
+  </blockquote>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+</blockquote>
+<pre>void <a name="resize_file">resize_file</a>(const path& p, uintmax_t new_size);
+void <a name="resize_file2">resize_file</a>(const path& p, uintmax_t new_size, system::error_code& ec);</pre>
+<blockquote>
+<p><i>Postcondition:</i> <code>file_size() == new_size</code>.</p>
+<p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  <p><i>Remarks:</i> Achieves its postconditions as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/truncate.html">truncate()</a></code>.</p>
+</blockquote>
+<pre>space_info <a name="space">space</a>(const path& p);
+space_info <a name="space2">space</a>(const path& p, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Returns:</i> An object of type <code><a href="#space_info">space_info</a></code>. The value of the <code>space_info</code> object is determined as if by 
+  using ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/statvfs.html"
+   style="text-decoration: none">statvfs()</a></code> to obtain a ISO/IEC 9945 struct
+  <code><a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/statvfs.h.html" style="text-decoration: none">statvfs</a></code>,
+   and then multiplying its <code>f_blocks</code>, <code>f_bfree</code>,
+   and <code>f_bavail</code> members by its <code>f_frsize</code> member,
+   and assigning the results to the <code>capacity</code>, <code>free</code>, 
+  and <code>available</code> members respectively. Any members for which the 
+  value cannot be determined shall be set to -1.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+</blockquote>
+<pre><a href="#file_status">file_status</a> <a name="status">status</a>(const path& p);</pre>
+<blockquote>
+  <p><i>Effects: </i>As if:</p>
+  <blockquote>
+    <pre>system::error_code ec;
+file_status result = status(p, ec);
+if (result == status_error)
+  throw filesystem_error(<i>implementation-supplied-message</i>, p, ec);
+return result;</pre>
+  </blockquote>
+  <p><i>Returns:</i> See above.</p>
+  <p><i>Throws:</i> <code>filesystem_error</code>. 
+[<i>Note:</i> <code>result</code> values of <code>file_status(file_not_found)</code>and <code>file_status(type_unknown)</code> are not considered failures and do not 
+  cause an exception to be 
+thrown.<i> —end note</i>] </p>
+  </blockquote>
+<pre><a href="#file_status">file_status</a> <a name="status2">status</a>(const path& p, system::error_code& ec) noexcept;</pre>
+<blockquote>
+  <p><i>Effects: </i></p>
+  <blockquote>
+    <p>If possible, determines the attributes 
+    of the file <code>p</code> resolves to, as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/stat.html">stat()</a></code>.</p>
+      If, during attribute determination, the underlying file system API reports 
+    an error, sets <code>ec</code> to indicate the specific error reported. 
+    Otherwise, <code>ec.clear()</code>.<blockquote>
+      <p>[<i>Note:</i> This allows users to inspect the specifics of underlying 
+      API errors even when the value returned by <code>status()</code> is not <code>file_status(status_error)</code>.  <i>—end note</i>]</p>
+    </blockquote>
+    </blockquote>
+  <p><i>Returns:</i></p>
+  <blockquote>
+    <p>If <code>ec != error_code()</code>:</p>
+    <ul>
+      <li>If the specific error indicates that <code>p</code> cannot be resolved 
+      because some element of the path does not exist, return <code>
+      file_status(file_not_found)</code>. [<i>Note:</i> ISO/IEC 9945 errors that 
+      indicate this are ENOENT or ENOTDIR. Windows equivalents 
+      include ERROR_FILE_NOT_FOUND, ERROR_PATH_NOT_FOUND, ERROR_INVALID_NAME, 
+      ERROR_INVALID_PARAMETER, ERROR_BAD_PATHNAME, and ERROR_BAD_NETPATH. <i>-- 
+      end note</i>]<br>
+ </li>
+      <li>Otherwise, if the specific error indicates that <code>p</code> can be resolved 
+      but the attributes cannot be determined, return <code>
+      file_status(type_unknown)</code>. [<i>Note: </i>For example, Windows 
+      ERROR_SHARING_VIOLATION errors. For ISO/IEC 9945, the case never arises. <i>—end 
+      note</i>]<br>
+ </li>
+      <li>Otherwise, return <code>
+      file_status(status_error)</code>.</li>
+    </ul>
+        <blockquote>
+        <p>[<i>Note:</i> These semantics distinguish between <code>p</code> being known not to exist, <code>p</code> existing but not being able to determine its attributes, 
+        and there being an error that prevents even knowing if <code>p</code> exists. These 
+        distinctions are important to some use cases. <i>—end note</i>]</p>
+    </blockquote>
+    <p>Otherwise,</p>
+    <ul>
+      <li>If the attributes indicate a regular file, as if by ISO/IEC 9945 <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISREG()</a>, 
+      return <code>
+      file_status(regular_file)</code>. [<i>Note:</i> <code>
+regular_file</code> implies appropriate <code><fstream></code> operations 
+      would succeed, assuming no hardware, permission, access, or file system 
+      race 
+      errors. Lack of
+<code>regular_file</code> does not necessarily imply <code><fstream></code> operations would 
+fail on a directory.
+<i>—end note</i>]<br>
+ </li>
+      <li>Otherwise, if the attributes indicate a directory, as if by ISO/IEC 9945
+      <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISDIR()</a>, 
+      return <code>
+      file_status(directory_file)</code>. [<i>Note:</i> <code>directory_file</code> implies <code>
+directory_iterator(p)</code>would succeed.
+<i>—end note</i>]<br>
+ </li>
+      <li>Otherwise, if the attributes indicate a block special file, as if by ISO/IEC 9945
+      <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISBLK()</a>, 
+      return <code>
+      file_status(block_file)</code>.<br>
+ </li>
+      <li>Otherwise, if the attributes indicate a character special file, as if by ISO/IEC 9945
+      <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISCHR()</a>, 
+      return <code>
+      file_status(character_file)</code>.<br>
+ </li>
+      <li>Otherwise, if the attributes indicate a fifo or pipe file, as if by
+      ISO/IEC 9945
+      <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISFIFO()</a>, 
+      return <code>
+      file_status(fifo_file)</code>.<br>
+ </li>
+      <li>Otherwise, if the attributes indicate a socket, as if by ISO/IEC 
+      9945
+      <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISSOCK()</a>, 
+      return <code>
+      file_status(socket_file)</code>.<br>
+ </li>
+      <li>Otherwise, return <code>
+      file_status(type_unknown)</code>.</li>
+    </ul>
+    </blockquote>
+      <p><i>Remarks:</i> If a symbolic link is encountered during pathname 
+      resolution, 
+      pathname resolution continues using the contents of the symbolic link.</p>
+</blockquote>
+<pre>bool <a name="status_known">status_known</a>(file_status s) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>s.type() != status_error</code></p>
+</blockquote>
+<pre>file_status <a name="symlink_status">symlink_status</a>(const path& p);
+file_status <a name="symlink_status2">symlink_status</a>(const path& p, system::error_code& ec) noexcept;</pre>
+<blockquote>
+  <p><i>Effects:</i>  Same as <a href="#status">status()</a>, above, 
+  except that the attributes 
+    of <code>p</code> are determined as if by ISO/IEC 9945 <code><a href="http://www.opengroup.org/onlinepubs/000095399/functions/lstat.html">lstat()</a></code>.</p>
+</blockquote>
+<blockquote>
+      <p><i>Returns:</i> Same as <a href="#status">status()</a>, above, except 
+      that if the attributes indicate a symbolic link, as if by ISO/IEC 9945 <a class="external" href="http://www.opengroup.org/onlinepubs/000095399/basedefs/sys/stat.h.html">S_ISLNK()</a>, return <code>file_status(symlink_file)</code>.</p>
+      <p><i>Remarks:</i> Pathname resolution terminates if <code>p</code> names a symbolic link.</p>
+  <p><i>Throws:</i> <code>filesystem_error</code>; overload with <code>error_code&</code> throws 
+  nothing.</p>
+</blockquote>
+<pre>path <a name="system_complete">system_complete</a>(const path& p);
+path <a name="system_complete2">system_complete</a>(const path& p, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Effects:</i> Composes an absolute path from <code>p</code>, using the 
+  same rules used by the operating system to resolve a path passed as the 
+  filename argument to standard library open functions.</p>
+  <p><i>Returns:</i> The composed path.</p>
+  <p><i>Postcondition:</i> For the returned path, <code>rp,</code> <code>rp.is_absolute()</code> is true.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  <p>[<i>Note:</i> For ISO/IEC 9945, <code>system_complete(p)</code> has the same semantics as <code>complete(p, current_path())</code>.</p>
+  <p><a name="windows_effects">For <i>Windows</i></a>, <code>system_complete(p)</code> has the 
+  same semantics as <code>complete(ph, current_path())</code> if <code>p.is_absolute() || !p.has_root_name()</code> or <code>p</code> and <code>base</code> have the same <code>root_name()</code>. 
+  Otherwise it acts like <code>complete(p, kinky)</code>, where <code>kinky</code> is the current directory for the <code>p.root_name()</code> drive. This will 
+  be the current directory of that drive the last time it was set, and thus may 
+  be <b>residue left over from a prior program</b> run by the command 
+  processor! Although these semantics are often useful, they are also very 
+  error-prone.</p>
+  <p>See <a href="#complete_note"><i>complete()</i> note</a> for usage suggestions. <i>—end note</i>]</p>
+</blockquote>
+<pre>path <a name="temp_directory_path">temp_directory_path</a>();
+path temp_directory_path(system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Returns:</i> A directory path suitable for temporary files under the 
+  conventions of the operating system. The specifics of how this path is 
+  determined are implementation defined. An error shall be reported if<code> !exists(p) 
+  || !is_directory(p)</code>, where <code>p</code> is the path to be returned.</p>
+  <p>ISO/IEC 9945: The path supplied by the first environment variable found in the 
+  list TMPDIR, TMP, TEMP, TEMPDIR. If none of these are found, <code>"/tmp"</code>, 
+  or, if macro <code>__ANDROID__ </code>is defined, <code>"/data/local/tmp"</code>.</p>
+  <p><i>Windows:</i> The path reported by the <i>Windows</i> <code>GetTempPath</code> API function.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  <p>[<i>Note: </i>The <code>temp_directory_path()</code> name was chosen to emphasize that the return is a 
+  path, not just a single directory name.  <i>—end note</i>]</p>
+</blockquote>
+<pre>path <a name="unique_path">unique_path</a>(const path& model="%%%%-%%%%-%%%%-%%%%");
+path unique_path(const path& model, system::error_code& ec);</pre>
+<blockquote>
+  <p>The <code>unique_path</code> function generates a path name suitable for 
+  creating temporary files, including directories. The name is based 
+  on a model that uses the percent sign character to specify replacement by a 
+  random hexadecimal digit. [<i>Note:</i> The more bits of randomness in the 
+  generated path name, the less likelihood of prior existence or being guessed. 
+  Each replacement hexadecimal digit in the model adds four bits of randomness. 
+  The default model thus provides 64 bits of randomness. This is sufficient for 
+  most applications. <i>—end note</i>]</p>
+  <p><i>Returns:</i> A path identical to <code>model</code>, except that each 
+  occurrence of a percent sign character is replaced by a random hexadecimal 
+  digit character in the range 0-9, a-f.</p>
+  <p><i>Throws:</i> As specified in <a href="#Error-reporting">Error reporting</a>.</p>
+  <p><i>Remarks:</i> Implementations are encouraged to obtain the required 
+  randomness via a <a href="http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator">cryptographically secure pseudo-random number generator</a>, such as one 
+  provided by the operating system. [<i>Note</i>: Such generators may block 
+  until sufficient entropy develops. <i>—end note</i>]</p>
+</blockquote>
+<pre><span style="background-color: #E8FFE8">path </span><a name="weakly_canonical"><span style="background-color: #E8FFE8">weakly_canonical</span></a><span style="background-color: #E8FFE8">(const</span><span style="background-color: #E8FFE8"> path& p);</span>
+<span style="background-color: #E8FFE8">path </span><span style="background-color: #E8FFE8">weakly_canonical(const</span><span style="background-color: #E8FFE8"> path& p, </span><span style="background-color: #E8FFE8">system::error_code</span><span style="background-color: #E8FFE8">& </span><span style="background-color: #E8FFE8">ec</span><span style="background-color: #E8FFE8">);</span></pre>
+<blockquote>
+  <p><i>Overview:</i> Returns <code>p</code> with symlinks resolved and the 
+  result normalized.</p>
+  <p><i>Returns: </i>A path composed of the result of calling the <code>
+  canonical</code> function on a path composed of the leading elements of <code>
+  p</code> that exist, if any, followed by the elements of <code>p</code> that 
+  do not exist, if any.</p>
+  <p><i>Postcondition:</i> The returned path is in
+  <a href="#normal-form">
+  normal form</a>.</p>
+  <p><i>Remarks:</i> Uses <code>operator/=</code> to compose the returned path. 
+  Uses the <code>status</code> function to determine existence.</p>
+  <p><i>Remarks:</i> Implementations are encouraged to avoid unnecessary 
+  normalization such as when <code>canonical</code> has already been called on 
+  the entirety of <code>p</code>.</p>
+  <p><i>Throws:</i>  As specified in Error reporting.</p>
+</blockquote>
+<pre> </pre>
+  <p> </p>
+<hr>
+
+<!-- generate-section-numbers=false -->
+
+
+<h3><a name="File-streams">File streams</a> -
+<a href="../../../boost/filesystem/fstream.hpp"><boost/filesystem/fstream.hpp></a></h3>
+<p>Replacements are provided for the file stream classes from the C++ standard 
+library's <code><fstream></code> header. These replacement classes 
+publicly inherit from the standard library classes. In the Boost.Filesystem 
+version, constructors and open functions take <code>const path&</code> arguments 
+instead of <code>
+const char*</code> arguments. There are no other differences in syntax or 
+semantics.</p>
+<pre>namespace boost
+{
+  namespace filesystem
+  {
+    template < class charT, class traits = std::char_traits<charT> >
+    class basic_filebuf : public std::basic_filebuf<charT,traits>
+    {
+    public:
+      basic_filebuf<charT,traits>*
+        open(const path& p, std::ios_base::openmode mode);
+    };
+
+    template < class charT, class traits = std::char_traits<charT> >
+    class basic_ifstream : public std::basic_ifstream<charT,traits>
+    {
+    public:
+      explicit basic_ifstream(const path& p, std::ios_base::openmode mode=std::ios_base::in)
+      void open(const path& p, std::ios_base::openmode mode=std::ios_base::in);
+    };
+
+    template < class charT, class traits = std::char_traits<charT> >
+    class basic_ofstream : public std::basic_ofstream<charT,traits>
+    {
+    public:
+      explicit basic_ofstream(const path& p, std::ios_base::openmode mode=std::ios_base::out);
+      void open(const path& p, std::ios_base::openmode mode=std::ios_base::out);
+    };
+
+    template < class charT, class traits = std::char_traits<charT> >
+    class basic_fstream : public std::basic_fstream<charT,traits>
+    {
+    public:
+      explicit basic_fstream(const path& p,
+        std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out);
+      void open(const path& p,
+        std::ios_base::openmode mode=std::ios_base::in | std::ios_base::out);
+    };
+
+    typedef basic_filebuf<char> filebuf;
+    typedef basic_ifstream<char> ifstream;
+    typedef basic_ofstream<char> ofstream;
+    typedef basic_fstream<char> fstream;
+
+    typedef basic_filebuf<wchar_t> wfilebuf;
+    typedef basic_ifstream<wchar_t> wifstream;
+    typedef basic_fstream<wchar_t> wfstream;
+    typedef basic_ofstream<wchar_t> wofstream;
+    
+  }  // namespace filesystem
+}  // namespace boost</pre>
+
+
+
+<h2><a name="path-decomposition-table">Path decomposition table</a></h2>
+<p>The table is generated by a program compiled with the Boost implementation.</p>
+<p>Shaded entries indicate cases where ISO/IEC 9945 (POSIX) and Windows implementations yield different results. The top value is the
+ISO/IEC 9945 result and the bottom value is the Windows result. <br>
+<table border="1" cellspacing="0" cellpadding="5">
+<p>
+<tr><td><b>Constructor<br>argument</b></td>
+<td><b>Iteration<br>over<br>Elements</b></td>
+<td><b><code>string()</code></b></td>
+<td><b><code>generic_<br>string()</code></b></td>
+<td><b><code>root_<br>path()</code></b></td>
+<td><b><code>root_<br>name()</code></b></td>
+<td><b><code>root_<br>directory()</code></b></td>
+<td><b><code>relative_<br>path()</code></b></td>
+<td><b><code>parent_<br>path()</code></b></td>
+<td><b><code>filename()</code></b></td>
+</tr>
+<tr>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+</tr>
+<tr>
+<td><code>.</code></td>
+<td><code>.</code></td>
+<td><code>.</code></td>
+<td><code>.</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>.</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>.</code></td>
+</tr>
+<tr>
+<td><code>..</code></td>
+<td><code>..</code></td>
+<td><code>..</code></td>
+<td><code>..</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>..</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>..</code></td>
+</tr>
+<tr>
+<td><code>foo</code></td>
+<td><code>foo</code></td>
+<td><code>foo</code></td>
+<td><code>foo</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>foo</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>foo</code></td>
+</tr>
+<tr>
+<td><code>/</code></td>
+<td><code>/</code></td>
+<td><code>/</code></td>
+<td><code>/</code></td>
+<td><code>/</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>/</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>/</code></td>
+</tr>
+<tr>
+<td><code>/foo</code></td>
+<td><code>/,foo</code></td>
+<td><code>/foo</code></td>
+<td><code>/foo</code></td>
+<td><code>/</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>/</code></td>
+<td><code>foo</code></td>
+<td><code>/</code></td>
+<td><code>foo</code></td>
+</tr>
+<tr>
+<td><code>foo/</code></td>
+<td><code>foo,.</code></td>
+<td><code>foo/</code></td>
+<td><code>foo/</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>foo/</code></td>
+<td><code>foo</code></td>
+<td><code>.</code></td>
+</tr>
+<tr>
+<td><code>/foo/</code></td>
+<td><code>/,foo,.</code></td>
+<td><code>/foo/</code></td>
+<td><code>/foo/</code></td>
+<td><code>/</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>/</code></td>
+<td><code>foo/</code></td>
+<td><code>/foo</code></td>
+<td><code>.</code></td>
+</tr>
+<tr>
+<td><code>foo/bar</code></td>
+<td><code>foo,bar</code></td>
+<td><code>foo/bar</code></td>
+<td><code>foo/bar</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>foo/bar</code></td>
+<td><code>foo</code></td>
+<td><code>bar</code></td>
+</tr>
+<tr>
+<td><code>/foo/bar</code></td>
+<td><code>/,foo,bar</code></td>
+<td><code>/foo/bar</code></td>
+<td><code>/foo/bar</code></td>
+<td><code>/</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>/</code></td>
+<td><code>foo/bar</code></td>
+<td><code>/foo</code></td>
+<td><code>bar</code></td>
+</tr>
+<tr>
+<td><code>//net</code></td>
+<td><code>//net</code></td>
+<td><code>//net</code></td>
+<td><code>//net</code></td>
+<td><code>//net</code></td>
+<td><code>//net</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>//net</code></td>
+</tr>
+<tr>
+<td><code>//net/foo</code></td>
+<td><code>//net,/,foo</code></td>
+<td><code>//net/foo</code></td>
+<td><code>//net/foo</code></td>
+<td><code>//net/</code></td>
+<td><code>//net</code></td>
+<td><code>/</code></td>
+<td><code>foo</code></td>
+<td><code>//net/</code></td>
+<td><code>foo</code></td>
+</tr>
+<tr>
+<td><code>///foo///</code></td>
+<td><code>/,foo,.</code></td>
+<td><code>///foo///</code></td>
+<td><code>///foo///</code></td>
+<td><code>/</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>/</code></td>
+<td><code>foo///</code></td>
+<td><code>///foo</code></td>
+<td><code>.</code></td>
+</tr>
+<tr>
+<td><code>///foo///bar</code></td>
+<td><code>/,foo,bar</code></td>
+<td><code>///foo///bar</code></td>
+<td><code>///foo///bar</code></td>
+<td><code>/</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>/</code></td>
+<td><code>foo///bar</code></td>
+<td><code>///foo</code></td>
+<td><code>bar</code></td>
+</tr>
+<tr>
+<td><code>/.</code></td>
+<td><code>/,.</code></td>
+<td><code>/.</code></td>
+<td><code>/.</code></td>
+<td><code>/</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>/</code></td>
+<td><code>.</code></td>
+<td><code>/</code></td>
+<td><code>.</code></td>
+</tr>
+<tr>
+<td><code>./</code></td>
+<td><code>.,.</code></td>
+<td><code>./</code></td>
+<td><code>./</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>./</code></td>
+<td><code>.</code></td>
+<td><code>.</code></td>
+</tr>
+<tr>
+<td><code>/..</code></td>
+<td><code>/,..</code></td>
+<td><code>/..</code></td>
+<td><code>/..</code></td>
+<td><code>/</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>/</code></td>
+<td><code>..</code></td>
+<td><code>/</code></td>
+<td><code>..</code></td>
+</tr>
+<tr>
+<td><code>../</code></td>
+<td><code>..,.</code></td>
+<td><code>../</code></td>
+<td><code>../</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>../</code></td>
+<td><code>..</code></td>
+<td><code>.</code></td>
+</tr>
+<tr>
+<td><code>foo/.</code></td>
+<td><code>foo,.</code></td>
+<td><code>foo/.</code></td>
+<td><code>foo/.</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>foo/.</code></td>
+<td><code>foo</code></td>
+<td><code>.</code></td>
+</tr>
+<tr>
+<td><code>foo/..</code></td>
+<td><code>foo,..</code></td>
+<td><code>foo/..</code></td>
+<td><code>foo/..</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>foo/..</code></td>
+<td><code>foo</code></td>
+<td><code>..</code></td>
+</tr>
+<tr>
+<td><code>foo/./</code></td>
+<td><code>foo,.,.</code></td>
+<td><code>foo/./</code></td>
+<td><code>foo/./</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>foo/./</code></td>
+<td><code>foo/.</code></td>
+<td><code>.</code></td>
+</tr>
+<tr>
+<td><code>foo/./bar</code></td>
+<td><code>foo,.,bar</code></td>
+<td><code>foo/./bar</code></td>
+<td><code>foo/./bar</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>foo/./bar</code></td>
+<td><code>foo/.</code></td>
+<td><code>bar</code></td>
+</tr>
+<tr>
+<td><code>foo/..</code></td>
+<td><code>foo,..</code></td>
+<td><code>foo/..</code></td>
+<td><code>foo/..</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>foo/..</code></td>
+<td><code>foo</code></td>
+<td><code>..</code></td>
+</tr>
+<tr>
+<td><code>foo/../</code></td>
+<td><code>foo,..,.</code></td>
+<td><code>foo/../</code></td>
+<td><code>foo/../</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>foo/../</code></td>
+<td><code>foo/..</code></td>
+<td><code>.</code></td>
+</tr>
+<tr>
+<td><code>foo/../bar</code></td>
+<td><code>foo,..,bar</code></td>
+<td><code>foo/../bar</code></td>
+<td><code>foo/../bar</code></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>foo/../bar</code></td>
+<td><code>foo/..</code></td>
+<td><code>bar</code></td>
+</tr>
+<tr>
+<td><code>c:</code></td>
+<td><code>c:</code></td>
+<td><code>c:</code></td>
+<td><code>c:</code></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><span style="background-color: #CCFFCC"><code>c:</code><br><font size="-1"><i>empty</i></font></span></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>c:</code></td>
+</tr>
+<tr>
+<td><code>c:/</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:,.</code><br><code>c:,/</code></span></td>
+<td><code>c:/</code></td>
+<td><code>c:/</code></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:/</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>/</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:/</code><br><font size="-1"><i>empty</i></font></span></td>
+<td><code>c:</code></td>
+<td><span style="background-color: #CCFFCC"><code>.</code><br><code>/</code></span></td>
+</tr>
+<tr>
+<td><code>c:foo</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>c:,foo</code></span></td>
+<td><code>c:foo</code></td>
+<td><code>c:foo</code></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>foo</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>foo</code></span></td>
+</tr>
+<tr>
+<td><code>c:/foo</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:,foo</code><br><code>c:,/,foo</code></span></td>
+<td><code>c:/foo</code></td>
+<td><code>c:/foo</code></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:/</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>/</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:/foo</code><br><code>foo</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:</code><br><code>c:/</code></span></td>
+<td><code>foo</code></td>
+</tr>
+<tr>
+<td><code>c:foo/</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:foo,.</code><br><code>c:,foo,.</code></span></td>
+<td><code>c:foo/</code></td>
+<td><code>c:foo/</code></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><span style="background-color: #CCFFCC"><code>c:foo/</code><br><code>foo/</code></span></td>
+<td><code>c:foo</code></td>
+<td><code>.</code></td>
+</tr>
+<tr>
+<td><code>c:/foo/</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:,foo,.</code><br><code>c:,/,foo,.</code></span></td>
+<td><code>c:/foo/</code></td>
+<td><code>c:/foo/</code></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:/</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>/</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:/foo/</code><br><code>foo/</code></span></td>
+<td><code>c:/foo</code></td>
+<td><code>.</code></td>
+</tr>
+<tr>
+<td><code>c:/foo/bar</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:,foo,bar</code><br><code>c:,/,foo,bar</code></span></td>
+<td><code>c:/foo/bar</code></td>
+<td><code>c:/foo/bar</code></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:/</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>/</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:/foo/bar</code><br><code>foo/bar</code></span></td>
+<td><code>c:/foo</code></td>
+<td><code>bar</code></td>
+</tr>
+<tr>
+<td><code>prn:</code></td>
+<td><code>prn:</code></td>
+<td><code>prn:</code></td>
+<td><code>prn:</code></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>prn:</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>prn:</code></span></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><span style="background-color: #CCFFCC"><code>prn:</code><br><font size="-1"><i>empty</i></font></span></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><code>prn:</code></td>
+</tr>
+<tr>
+<td><code>c:\</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:\</code><br><code>c:,/</code></span></td>
+<td><code>c:\</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:\</code><br><code>c:/</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>\</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:\</code><br><font size="-1"><i>empty</i></font></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:\</code><br><code>\</code></span></td>
+</tr>
+<tr>
+<td><code>c:foo</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>c:,foo</code></span></td>
+<td><code>c:foo</code></td>
+<td><code>c:foo</code></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>foo</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:foo</code><br><code>foo</code></span></td>
+</tr>
+<tr>
+<td><code>c:\foo</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:\foo</code><br><code>c:,/,foo</code></span></td>
+<td><code>c:\foo</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:\foo</code><br><code>c:/foo</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>\</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:\foo</code><br><code>foo</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:\foo</code><br><code>foo</code></span></td>
+</tr>
+<tr>
+<td><code>c:foo\</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:foo\</code><br><code>c:,foo,.</code></span></td>
+<td><code>c:foo\</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:foo\</code><br><code>c:foo/</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><font size="-1"><i>empty</i></font></td>
+<td><span style="background-color: #CCFFCC"><code>c:foo\</code><br><code>foo\</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:foo</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:foo\</code><br><code>.</code></span></td>
+</tr>
+<tr>
+<td><code>c:\foo\</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:\foo\</code><br><code>c:,/,foo,.</code></span></td>
+<td><code>c:\foo\</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:\foo\</code><br><code>c:/foo/</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>\</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:\foo\</code><br><code>foo\</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\foo</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:\foo\</code><br><code>.</code></span></td>
+</tr>
+<tr>
+<td><code>c:\foo/</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:\foo,.</code><br><code>c:,/,foo,.</code></span></td>
+<td><code>c:\foo/</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:\foo/</code><br><code>c:/foo/</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:\</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>\</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:\foo/</code><br><code>foo/</code></span></td>
+<td><code>c:\foo</code></td>
+<td><code>.</code></td>
+</tr>
+<tr>
+<td><code>c:/foo\bar</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:,foo\bar</code><br><code>c:,/,foo,bar</code></span></td>
+<td><code>c:/foo\bar</code></td>
+<td><span style="background-color: #CCFFCC"><code>c:/foo\bar</code><br><code>c:/foo/bar</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:/</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>c:</code></span></td>
+<td><span style="background-color: #CCFFCC"><font size="-1"><i>empty</i></font><br><code>/</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:/foo\bar</code><br><code>foo\bar</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>c:</code><br><code>c:/foo</code></span></td>
+<td><span style="background-color: #CCFFCC"><code>foo\bar</code><br><code>bar</code></span></td>
+</tr>
+</table>
+<h2><a name="long-path-warning"></a>Warning: Long paths on Windows and the 
+extended-length <b>\\?\ </b>prefix</h2>
+<p>The Microsoft Windows "Maximum Path Length Limitation" specifies:</p>
+<blockquote>
+<p>In the Windows API (with some exceptions ...), the maximum length for a path 
+is MAX_PATH, which is defined as 260 characters.</p>
+<p>The Windows API has many functions that also have Unicode versions to permit 
+an extended-length path for a maximum total path length of 32,767 characters. 
+... To specify an extended-length path, use the <b>"\\?\" prefix</b>. For 
+example, "\\?\D:\<em>very long path</em>".  <i>[C++ string literals require backslashes be doubled, of course.]</i></p>
+</blockquote>
+<p>Because most Boost.Filesystem operational functions just pass the contents of 
+a class path object to the Windows API, they do work with the extended-length 
+prefixes. But some won't work, because to the limitations imposed by Windows. 
+Read the following cautions carefully!</p>
+<h3>Cautions for paths with extended-length prefixes</h3>
+<ul>
+  <li>Individual components of a path are still are limited to whatever is 
+  supported for the particular filesystem, commonly 255 characters.</li>
+  <li>Only backslashes only are acceptable as directory separators. Slashes are 
+  not treated as separators.</li>
+  <li>All paths must be absolute - relative paths are not allowed.</li>
+  <li>Once an absolute path grows beyond 260 characters, it is essentially 
+  poisoned and all operations must use extended-length prefixes. So even a 
+  simple operation like <code>create_directory("a")</code> will fail if the 
+  absolute path of the resulting directory would exceed 260 characters.</li>
+  <li>Certain Boost.Filesystem functions that decompose their argument path and 
+  then work on individual relative directories or files will not work properly 
+  with extended-length prefix paths.</li>
+</ul>
+<h2><a name="Acknowledgements">Acknowledgements</a></h2>
+<p>This Filesystem Library is dedicated to my wife, Sonda, who provided the 
+support necessary to see both a trial implementation and the proposal itself 
+through to completion. She gave me the strength to continue after a difficult 
+year of cancer treatment in the middle of it all.</p>
+<p>Many people contributed technical comments, ideas, and suggestions to the 
+Boost Filesystem Library. See <a href="http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements">http://www.boost.org/libs/filesystem/doc/index.htm#Acknowledgements</a>.</p>
+<p>Dietmar Kuehl contributed the original Boost Filesystem Library directory_iterator design. Peter Dimov, Walter Landry, Rob Stewart, and Thomas 
+Witt were particularly helpful in refining the library.</p>
+<p>The create_directories, extension, basename, and replace_extension functions 
+were developed by Vladimir Prus. The temp_directory_path function was 
+contributed by Jeff Flinn. David Svoboda suggested the canonical function and 
+provided psuedo-code.</p>
+<p>Howard Hinnant and John Maddock reviewed a draft of the version 2 proposal, and 
+identified a number of mistakes or weaknesses, resulting in a more polished 
+final document.</p>
+<p>Peter Dimov suggested a single class path, with member templates to adapt to 
+multiple string types. His idea became the basis for the version 3 path design.</p>
+<h2><a name="References">References</a></h2>
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">
+  <tr>
+    <td width="16%" valign="top">[<a name="ISO_POSIX">ISO/IEC 9945</a>]</td>
+    <td width="84%">ISO/IEC 9945:2003, IEEE Std 1003.1-2001, and The Open Group 
+    Base Specifications, Issue 6. Also known as The Single Unix<font face="Times New Roman">® 
+    Specification, Version 3. Available from each of the organizations involved 
+    in its creation. For example, read online or download from <a href="http://www.unix.org/single_unix_specification/">www.unix.org/single_unix_specification/</a>.</font> The ISO JTC1/SC22/WG15 - 
+    POSIX homepage is <a href="http://www.open-std.org/jtc1/sc22/WG15/">www.open-std.org/jtc1/sc22/WG15/</a></td>
+  </tr>
+  <tr>
+    <td width="16%" valign="top">[Abrahams]</td>
+    <td width="84%">Dave Abrahams, Error and Exception Handling, <a href="http://www.boost.org/more/error_handling.html">www.boost.org/more/error_handling.html</a></td>
+  </tr>
+</table>
+<hr>
+<p><font size="2">© Copyright Beman Dawes, 2002, 2006, 2007, 2009, 2010, 2011</font></p>
+<p><font size="2">Distributed under the Boost Software License, Version 1.0. See
+</font>
+<a href="http://www.boost.org/LICENSE_1_0.txt"><font size="2">www.boost.org/LICENSE_1_0.txt</font></a></p>
+<p><font size="2">Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->25 October 2015<!--webbot bot="Timestamp" endspan i-checksum="32445" --></font></p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/relative_proposal.html b/vendor/pdalboost/libs/filesystem/doc/relative_proposal.html
new file mode 100644
index 0000000..416e1d2
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/relative_proposal.html
@@ -0,0 +1,510 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Filesystem Relative Proposal</title>
+<link href="styles.css" rel="stylesheet">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td width="277">
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem Relative<br>
+    Draft Proposal</font>
+    </td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="index.htm">Home</a>   
+    <a href="tutorial.html">Tutorial</a>   
+    <a href="reference.html">Reference</a>   
+    <a href="faq.htm">FAQ</a>   
+    <a href="release_history.html">Releases</a>   
+    <a href="portability_guide.htm">Portability</a>   
+    <a href="v3.html">V3 Intro</a>   
+    <a href="v3_design.html">V3 Design</a>   
+    <a href="deprecated.html">Deprecated</a>   
+    <a href="issue_reporting.html">Bug Reports </a>  
+    </td>
+</table>
+
+<p><a href="#Introduction">
+      Introduction</a><br>
+    <a href="#Acknowledgement">Acknowledgement</a><br>
+    <a href="#Preliminary-implementation">Preliminary implementation</a><br>
+<a href="#Requirements">Requirements</a><br>
+<a href="#Issues">Issues</a><br>
+<a href="#Design-decisions">
+      Design decisions</a><br>
+    <a href="#Provide-separate-relative">Provide separate lexical and 
+      operational <code>relative</code> functions</a><br>
+    <a href="#Provide-separate-proximate">Provide 
+separate lexical and operational <code>proximate</code> functions</a><br>
+    <a href="#Add-lexical-functions">Add lexical functions as <code>path</code> member functions</a><br>
+    <a href="#Provide-normal">Provide a non-member function
+<code>lexically_normal</code> returning a 
+      normal form path</a><br>
+    <a href="#Provide-weakly">Provide a <code>weakly_canonical</code> operational function</a><br>
+    <a href="#just-work">Resolve issues in ways that "just work" for users</a><br>
+    <a href="#mismatch">Specify <code>lexical relative</code> in terms 
+      of <code>std::mismatch</code></a><br>
+    <a href="#Specify-op-rel-weakly">Specify operational <code>relative</code> in terms of <code>
+      weakly_canonical</code></a><br>
+    <a href="#Specify-op-rel-lex-rel">Specify operational <code>relative</code> in terms of 
+      <code>lexically
+      relative</code></a><br>
+<a href="#Proposed-wording">Proposed wording</a><br>
+    <a href="#Define-normal-form">Define <i>normal form</i></a><br>
+    <a href="#New-class-path-member-functions">New class path member functions</a><br>
+        <a href="#Synopsis-path">Synopsis</a><br>
+        <a href="#Specification-path">Specification</a><br>
+    <a href="#operational-functions">New operational functions</a><br>
+        <a href="#Synopsis-ops">Synopsis</a><br>
+        <a href="#Specification-ops">Specification</a></p>
+
+<h2>
+      <a name="Introduction">Introduction</a></h2>
+
+<p>There have been requests for a Filesystem library relative function for at 
+      least ten years.</p>
+
+<p>
+      The requested functionality seems simple - given two paths with a common 
+      prefix, return the non-common suffix portion of one of the paths such that 
+      it is relative to the other path.</p>
+
+<p>
+      In terms of the Filesystem library,</p>
+
+<blockquote>
+  <pre>path p("/a/b/c");
+path base("/a/b");
+path rel = relative(p, base);  // the requested function
+cout << rel << endl;           // outputs "c"
+assert(absolute(rel, base) == p);</pre>
+</blockquote>
+<p>If that was all there was to it, the Filesystem library would have had a
+<code>relative</code> function years ago.</p>
+<blockquote>
+<p>Blocking issues: Clashing requirements, symlinks, directory placeholders (<i>dot</i>,
+<i>dot-dot</i>), user-expectations, corner cases.</p>
+</blockquote>
+<h3><a name="Acknowledgement">Acknowledgement</a></h3>
+<p>A paper by Jamie Allsop, <i>Additions to Filesystem supporting Relative Paths</i>, 
+is what broke my mental logjam. Much of what follows is based directly on 
+Jamie's analysis and proposal. The <code>weakly_canonical</code> function and 
+aspects of the semantic specifications are my contributions. Mistakes, of 
+course, are mine.</p>
+<h3><a name="Preliminary-implementation">Preliminary implementation</a></h3>
+<p>A preliminary implementation is available in the
+<a href="https://github.com/boostorg/filesystem/tree/feature/relative2">
+feature/relative2</a> branch of the Boost Filesystem Git repository. See
+<a href="https://github.com/boostorg/filesystem/tree/feature/relative2">
+github.com/boostorg/filesystem/tree/feature/relative2</a></p>
+<h2><a name="Requirements">Requirements</a></h2>
+<b><a name="Requirement-1">Requirement 1</a>:</b> Some uses require symlinks be followed; i.e. the path must be resolved in 
+  the actual file system.<p><b><a name="Requirement-2">Requirement 2</a>: </b>Some uses require symlinks not be followed; i.e. the path must not be 
+  resolved in the actual file system.</p>
+<b><a name="Requirement-3">Requirement 3</a>: </b>Some uses require removing redundant current directory (<i>dot</i>) 
+  or parent directory (<i>dot-dot</i>) placeholders.<p><b>
+<a name="Requirement-4">Requirement 4</a>: </b>Some uses do not require removing redundant current directory (<i>dot</i>) 
+  or parent directory (<i>dot-dot</i>) placeholders since the path is known to 
+be 
+already in normal form.</p>
+<h2><a name="Issues">Issues</a></h2>
+<p><b><a name="Issue-1">Issue 1</a>:</b> What happens if <code>p</code> 
+and <code>base</code> are themselves relative?</p>
+<b><a name="Issue-2">Issue 2</a>:</b> What happens if there is no common prefix? Is this an error, the whole of
+  <code>p</code> is relative to <code>base</code>, or something else?<p><b>
+<a name="Issue-3">Issue 3</a>:</b> What happens if <code>p</code>, <code>base</code>, or both are empty?</p>
+<b><a name="Issue-4">Issue 4</a>:</b> What happens if <code>p</code> and <code>base</code> are the same?<p>
+<b><a name="Issue-5">Issue 5</a>:</b> How is the "common prefix" determined?</p>
+<b><a name="Issue-6">Issue 6</a>:</b> What happens if portions of <code>p</code> or <code>base</code> exist but 
+  the entire path does not exist and yet symlinks need to be followed?<p><b>
+<a name="Issue-7">Issue 7</a>:</b> What happens when a symlink in the existing portion of a path is affected 
+  by a directory (<i>dot-dot</i>) placeholder in a later non-existent portion of 
+  the path?</p>
+<p><b><a name="Issue-8">Issue 8</a>:</b> Overly complex semantics (and thus 
+specifications) in preliminary designs made reasoning about uses difficult.</p>
+<p><b><a name="Issue-9">Issue 9</a>: </b>Some uses never have redundant current directory (<i>dot</i>) 
+  or parent directory (<i>dot-dot</i>) placeholders, so a removal operation 
+  would be an unnecessary expense although otherwise harmless.</p>
+
+<h2>
+      <a name="Design-decisions">Design decisions</a></h2>
+
+<h4>
+      <a name="Provide-separate-relative">Provide separate</a> lexical and 
+      operational <code>relative</code> functions</h4>
+
+<p align="left">
+      Resolves the conflict between <a href="#Requirement-1">requirement 1</a> 
+      and <a href="#Requirement-2">requirement 2</a> and ensures both 
+      requirements are met.</p>
+
+<p>
+      A purely lexical function is needed by users working with directory 
+      hierarchies that do not actually exist.</p>
+
+<p>
+      An operational function that queries the current file system for existence 
+      and follows symlinks is needed by users working with actual existing 
+      directory hierarchies.</p>
+
+<h4>
+      <a name="Provide-separate-proximate">Provide separate</a> lexical and operational
+      <code>proximate</code> functions</h4>
+
+<p>
+      Although not the only possibility, a likely fallback when the relative 
+      functions cannot find a relative path is to return the path being made relative. As 
+      a convenience, the <code>proximate</code> functions do just that.</p>
+
+<h4>
+      <a name="Add-lexical-functions">Add lexical functions as 
+      <code>path</code> member functions</a></h4>
+
+<p dir="ltr">
+      The Filesystem library is unusual in that it has several functions with 
+      both lexical (i.e. cheap) and operational (i.e. expensive due to file 
+      system access) forms with differing semantics. It is important that users 
+      choose the form that meets their application's specific needs. The library 
+      has always made the distinction via the convention of lexical functions 
+      being members of class <code>path</code>, while operational functions are 
+      non-member functions. The lexical functions proposed here also use the 
+      name prefix <code>lexically_</code> to drive home the distinction.</p>
+
+<p>
+      For the contrary argument, see Sutter and Alexandrescu, <i>C++ Coding Standards</i>, 44: 
+      "Prefer writing nonmember nonfriend functions", and Meyers, <i>Effective C++ Third Edition</i>, 23: 
+      "Prefer non-member non-friend functions to member functions."</p>
+
+<h4>
+      <a name="Provide-normal">Provide</a><b> </b>a non-member function <code>
+      <a href="#normal">lexically_normal</a></code> returning a 
+      <a href="#normal-form">normal form</a> path</h4>
+
+<p>
+      Enables resolution of <a href="#Requirement-3">requirement 3</a> and
+      <a href="#Requirement-4">requirement 4</a> in a way consistent with
+      <a href="#Issue-9">issue 9</a>. Is a contributor to the resolution of
+      <a href="#Issue-8">issue 8</a>.</p>
+
+<p>
+      "Normalization" is the process of removing redundant current directory (<i>dot</i>) 
+      , parent 
+      directory (<i>dot-dot</i>), and directory separator elements.</p>
+
+<p>
+      Normalization is a byproduct the current <code>canonical</code> function. 
+      But for the path returned by the 
+      proposed <code><a href="#weakly_canonical">weakly_canonical</a></code> function, 
+      only any leading canonic portion is in canonical form. So any trailing 
+      portion of the returned path has not been normalized.</p>
+
+<p>
+      Jamie Allsop has proposed adding a separate normalization function returning a 
+      path, and I agree with him.</p>
+
+<p>
+      Boost.filesystem has a deprecated non-const normalization function that 
+      modifies the path, but I agree with Jamie that a function returning a path 
+      is a better solution.</p>
+
+<h4>
+      <a name="Provide-weakly">Provide</a><b> </b>a <code><a href="#weakly_canonical">weakly_canonical</a></code> operational function</h4>
+
+<p>
+      Resolves <a href="#Issue-6">issue 6</a>, <a href="#Issue-7">issue 7</a>,
+      <a href="#Issue-9">issue 9</a>, and is a contributor to the resolution of
+      <a href="#Issue-8">issue 8</a>.</p>
+
+<p>
+      The operational function
+      <code>weakly_canonical(p)</code> returns a path composed of <code>
+      canonical(x)/y</code>, where <code>x</code> is a path composed of the 
+      longest leading sequence of elements in <code>p</code> that exist, and
+      <code>y</code> is a path composed of the remaining trailing non-existent elements of
+      <code>p</code> if any. "<code>weakly</code>" refers to weakened existence 
+      requirements compared to the existing canonical function.</p>
+
+<ul>
+  <li>Having <code>weakly_canonical</code> as a separate function, and then 
+  specifying the processing of operational <code>relative</code> arguments in 
+  terms of calls to <code>weakly_canonical</code> makes it much easier to 
+  specify the operational <code>relative</code> function and reason about it. 
+  The difficulty of reasoning about operational <code>relative</code> 
+  semantics before the invention of <code>weakly_canonical</code> was what led to its 
+  initial development.</li>
+  <li>Having <code>weakly_canonical</code> as a separate function also allows 
+  use in other contexts.</li>
+  <li>Specifying the return be in <a href="#normal-form">normal form</a> is an 
+  engineering trade-off to resolve <a href="#Issue-7">issue 7</a> in a way that 
+  just works for most use cases.</li>
+  <li>Specifying normative encouragement to not perform unneeded normalization 
+  is a reasonable resolution for <a href="#Issue-9">issue 9</a>.</li>
+</ul>
+
+<h4>
+      Resolve issues in ways that "<a name="just-work">just work</a>" for users</h4>
+
+<p>
+      Resolves issues <a href="#Issue-1">1</a>, <a href="#Issue-2">2</a>,
+      <a href="#Issue-3">3</a>, <a href="#Issue-4">4</a>, <a href="#Issue-7">6</a>, 
+      and <a href="#Issue-7">7</a>. Is a contributor to the resolution of
+      <a href="#Issue-8">issue 8</a>.</p>
+
+<p>
+      The "just works" approach was suggested by Jamie Allsop. It is implemented 
+      by specifying a reasonable return value for all of the "What happens 
+      if..." corner case issues, rather that treating them as hard errors 
+      requiring an exception or error code.</p>
+
+<h4>
+      Specify <a href="#lex-proximate"><code>lexically relative</code></a> in terms 
+      of <code>std::<a name="mismatch">mismatch</a></code></h4>
+
+<p>
+      Resolves <a href="#Issue-5">issue 5</a>. Is a contributor to the 
+      resolution of <a href="#Issue-8">issue 8</a>.</p>
+
+<h4>
+      <a name="Specify-op-rel-weakly">Specify</a> <a href="#op-proximate">operational <code>relative</code></a> in terms of <code>
+      <a href="#weakly_canonical">weakly_canonical</a></code></h4>
+
+<p>
+      Is a contributor to the resolution of <a href="#Issue-8">issue 8</a>.</p>
+
+<ul>
+  <li>Covers a wide range of uses cases since a single function works for 
+  existing, non-existing, and partially existing paths.</li>
+  <li>Works correctly for partially existing paths that contain symlinks.</li>
+</ul>
+
+<h4>
+      <a name="Specify-op-rel-lex-rel">Specify</a> <a href="#op-proximate">operational <code>relative</code></a> in terms of 
+      <a href="#lex-proximate"><code>lexically
+      relative</code></a></h4>
+
+<p>
+      Is a contributor to the resolution of <a href="#Issue-5">issue 5</a> and
+      <a href="#Issue-8">issue 8</a>.</p>
+
+<p>
+      If would be confusing to users and difficult to specify correctly if the 
+      two functions had differing semantics:</p>
+<ul>
+  <li>When either or both paths are empty.</li>
+  <li>When all elements of the two paths match exactly.</li>
+  <li>Because different matching algorithms were used.</li>
+  <li>Because although the same matching algorithm was used, it was applied in different ways.</li>
+</ul>
+
+<p>
+      These problems are avoided by specifying operational <code>relative</code> 
+      in terms of lexical <code>relative</code> after preparatory 
+      calls to operational functions.</p>
+
+<h2><a name="Proposed-wording">Proposed wording</a></h2>
+
+<p><span style="background-color: #DBDBDB"><i>"Overview:" sections below are 
+non-normative experiments attempting to make the normative reference 
+specifications easier to grasp.</i></span></p>
+
+<h3><a name="Define-normal-form">Define <i>normal form</i></a></h3>
+
+<p>A path is in <b><i><a name="normal-form">normal form</a></i></b> if it has no 
+redundant current directory (<i>dot</i>) or parent directory (<i>dot-dot</i>) 
+elements. The normal form for an empty path is an empty path. The normal form 
+for a path ending in a <i>directory-separator</i> that is not the root directory 
+is the same path with a current directory (<i>dot</i>) element appended.</p>
+
+<p><span style="background-color: #DBDBDB"><i>The last sentence above is not 
+necessary for POSIX-like or Windows-like operating systems, but supports systems 
+like OpenVMS that use different syntax for directory and regular-file names.</i></span></p>
+
+<h3><a name="New-class-path-member-functions">New class path member functions</a></h3>
+
+<h4><a name="Synopsis-path">Synopsis</a></h4>
+
+<pre>path lexically_normal() const;
+path lexically_relative(const path& base) const;
+path lexically_proximate(const path& base) const;</pre>
+
+<h4><a name="Specification-path">Specification</a></h4>
+
+
+<pre>path <a name="lex-normal">lexically_normal</a>() const;</pre>
+<blockquote>
+<p><i>Overview:</i> Returns <code>*this</code> with redundant current directory 
+(<i>dot</i>), parent directory (<i>dot-dot</i>), and <i>directory-separator</i> elements removed.</p>
+<p><i>Returns:</i> <code>*this</code> in <a href="#normal-form">normal form</a>.</p>
+<p><i>Remarks:</i> Uses <code>operator/=</code> to compose the returned path.</p>
+<p>[<i>Example:</i></p>
+<p><code>assert(path("foo/./bar/..").lexically_normal() == "foo");<br>
+assert(path("foo/.///bar/../").lexically_normal() == "foo/.");</code></p>
+<p>The above assertions will succeed.<i> </i>On Windows, the 
+returned path's <i>directory-separator</i> characters will be backslashes rather than slashes, but that 
+does not affect <code>path</code> equality.<i> —end example</i>]</p>
+</blockquote>
+
+<pre>path <a name="lex-relative">lexically_relative</a>(const path& base) const;</pre>
+  <blockquote>
+  <p><i>Overview:</i> Returns <code>*this</code> made relative to <code>base</code>. 
+  Treats empty or identical paths as corner cases, not errors. Does not resolve 
+  symlinks. Does not first normalize <code>*this</code> or <code>base</code>.</p>
+
+  <p><i>Remarks:</i> Uses <code>std::mismatch(begin(), end(), base.begin(), base.end())</code>, to determine the first mismatched element of
+  <code>*this</code> and <code>base</code>. Uses <code>operator==</code> to 
+  determine if elements match. </p>
+  
+  <p><i>Returns:</i> </p>
+  
+  <ul>
+    <li>
+  <code>path()</code> if the first mismatched element of <code>*this</code> is equal to <code>
+  begin()</code> or the first mismatched element 
+  of <code>base</code> is equal to <code>base.begin()</code>, or<br> 
+    </li>
+    <li>
+  <code>path(".")</code> if the first mismatched element of <code>
+  *this</code> is equal to <code>
+  end()</code> and the first mismatched element 
+  of <code>base</code> is equal to <code>base.end()</code>, or<br> 
+    </li>
+    <li>An object of class <code>path</code> composed via application of <code>
+    operator/= path("..")</code> for each element in the half-open 
+    range [first 
+    mismatched element of <code>base</code>, <code>base.end()</code>), and then 
+    application of <code>operator/=</code> for each element in the half-open 
+    range 
+    [first mismatched element of <code>*this</code>, <code>end()</code>).
+    </li>
+</ul>
+  
+<p>[<i>Example:</i></p>
+<p><code>assert(path("/a/d").lexically_relative("/a/b/c") ==  "../../d");<br>
+assert(path("/a/b/c").lexically_relative("/a/d") ==  "../b/c");<br>
+assert(path("a/b/c").lexically_relative("a") == "b/c");<br>
+assert(path("a/b/c").lexically_relative("a/b/c/x/y") ==  "../..");<br>
+assert(path("a/b/c").lexically_relative("a/b/c") ==  ".");<br>
+assert(path("a/b").lexically_relative("c/d") ==  "");</code></p>
+<p>The above assertions will succeed.<i> </i>On Windows, the 
+returned path's <i>directory-separator</i>s will be backslashes rather than 
+forward slashes, but that 
+does not affect <code>path</code> equality.<i> —end example</i>]</p>
+  
+  <p>[<i>Note:</i> If symlink following semantics are desired, use the  operational function <code>
+  <a href="#op-proximate">relative</a></code>  <i>—end note</i>]</p>
+  
+  <p>[<i>Note:</i> If <a href="#normal">normalization</a> is needed to ensure 
+  consistent matching of elements, apply <code><a href="#normal">lexically_normal()</a></code> 
+  to <code>*this</code>, <code>base</code>, or both. <i>—end note</i>]</p>
+  
+</blockquote>
+
+
+<pre>path <a name="lex-proximate">lexically_proximate</a>(const path& base) const;</pre>
+
+  <blockquote>
+  
+  <p><i>Returns:</i> If the value of <code>lexically_relative(base)</code> is 
+  not an empty path, return it. Otherwise return <code>*this</code>.</p>
+  
+  <p>[<i>Note:</i> If symlink following semantics are desired, use the  operational function
+  <code><a href="#op-proximate">proximate</a></code>  <i>—end note</i>]</p>
+  
+  <p>[<i>Note:</i> If <a href="#normal">normalization</a> is needed to ensure 
+  consistent matching of elements, apply <code><a href="#normal">lexically_normal()</a></code> 
+  to <code>*this</code>, <code>base</code>, or both. <i>—end note</i>]</p>
+  
+</blockquote>
+
+
+<h3>New <a name="operational-functions">operational functions</a></h3>
+
+
+<h4><a name="Synopsis-ops">Synopsis</a></h4>
+
+
+<pre>path weakly_canonical(const path& p);
+path weakly_canonical(const path& p, system::error_code& ec);
+path relative(const path& p, system::error_code& ec);
+path relative(const path& p, const path& base=current_path());
+path relative(const path& p, const path& base, system::error_code& ec);
+path proximate(const path& p, system::error_code& ec);
+path proximate(const path& p, const path& base=current_path());
+path proximate(const path& p, const path& base, system::error_code& ec);
+</pre>
+<h4><a name="Specification-ops">Specification</a></h4>
+
+<pre>path <a name="weakly_canonical">weakly_canonical</a>(const path& p);
+path weakly_canonical(const path& p, system::error_code& ec);</pre>
+<blockquote>
+<i>Overview:</i> Returns <code>p</code> with symlinks resolved and the result 
+normalized.<p>
+<i>Returns: </i>
+A path composed of the result of calling the <code>canonical</code> function on 
+a path composed of the leading elements of <code>p</code> that exist, if any, 
+followed by the elements of <code>p</code> that do not exist, if any.</p>
+<p><i>Postcondition:</i> The returned path is in <a href="#normal">normal form</a>.</p>
+<p><i>Remarks:</i> Uses <code>operator/=</code> to compose the returned path. 
+Uses the <code>status</code> function to determine existence.</p>
+<p><i>Remarks:</i> Implementations are encouraged to avoid unnecessary 
+normalization such as when <code>canonical</code> has already been called on the 
+entirety of <code>p</code>.</p>
+<p><i>Throws:</i>  As specified in Error reporting.</p>
+</blockquote>
+<pre>path <a name="op-relative">relative</a>(const path& p, system::error_code& ec);</pre>
+<blockquote>
+<p><i>Returns:</i> <code>relative(p, current_path(), ec)</code>.</p>
+  <p><i>Throws:</i>  As specified in Error reporting.</p>
+  
+  </blockquote>
+<pre>path relative(const path& p, const path& base=current_path());
+path relative(const path& p, const path& base, system::error_code& ec);</pre>
+<blockquote>
+  <p><i>Overview:</i> Returns <code>p</code> made relative to <code>
+  base</code>. Treats empty or identical paths as corner cases, not errors. 
+  Resolves symlinks and normalizes both <code>p</code> and <code>base</code> 
+  before other processing.</p>
+
+<p><i>Returns:</i> <code><a href="#weakly_canonical">weakly_canonical</a>(p).l<a href="#lex-proximate">exically_relative</a>(<a href="#weakly_canonical">weakly_canonical</a>(base))</code>. The second form returns <code>path()</code> if an error occurs.</p>
+  <p><i>Throws:</i> As specified in Error reporting.</p>
+</blockquote>
+
+<pre>path <a name="op-proximate">proximate</a>(const path& p, system::error_code& ec);</pre>
+<blockquote>
+<p><i>Returns:</i> <code>proximate(p, current_path(), ec)</code>.</p>
+  <p><i>Throws:</i>  As specified in Error reporting.</p>
+  
+  </blockquote>
+<pre>path proximate(const path& p, const path& base=current_path());
+path proximate(const path& p, const path& base, system::error_code& ec);</pre>
+<blockquote>
+
+<p><i>Returns:</i> <code><a href="#weakly_canonical">weakly_canonical</a>(p).l<a href="#lex-proximate">exically_proximate</a>(<a href="#weakly_canonical">weakly_canonical</a>(base))</code>. The second form returns <code>path()</code> if an error occurs.</p>
+  <p><i>Throws:</i> As specified in Error reporting.</p>
+</blockquote>
+
+<hr>
+<p>© Copyright Beman Dawes 2015</p>
+<p>Distributed under the Boost Software License, Version 1.0. See
+<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a></p>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->25 October 2015<!--webbot bot="Timestamp" endspan i-checksum="32445" --></p>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/release_history.html b/vendor/pdalboost/libs/filesystem/doc/release_history.html
new file mode 100644
index 0000000..3b60333
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/release_history.html
@@ -0,0 +1,401 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Filesystem Release History</title>
+<link href="styles.css" rel="stylesheet">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td width="277">
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem Release History</font>
+    </td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="index.htm">Home</a>   
+    <a href="tutorial.html">Tutorial</a>   
+    <a href="reference.html">Reference</a>   
+    <a href="faq.htm">FAQ</a>   
+    <a href="release_history.html">Releases</a>   
+    <a href="portability_guide.htm">Portability</a>   
+    <a href="v3.html">V3 Intro</a>   
+    <a href="v3_design.html">V3 Design</a>   
+    <a href="deprecated.html">Deprecated</a>   
+    <a href="issue_reporting.html">Bug Reports </a>  
+    </td>
+</table>
+
+<h2>1.60.0</h2>
+<ul>
+  <li dir="ltr">
+  <p dir="ltr"><b>New:</b> Added functions <code>
+  <a href="reference.html#lex-normal">lexically_normal</a></code>, <code>
+  <a href="reference.html#lex-relative">lexically_relative</a></code>, <code>
+  <a href="reference.html#op-relative">relative</a></code>, and <code>
+  <a href="reference.html#weakly_canonical">weakly_canonical</a></code>. Many thanks to Jamie Allsop for his help and 
+  perseverance. Resolves tickets
+  <a href="https://svn.boost.org/trac/boost/ticket/1976">#1976</a>,
+  <a href="https://svn.boost.org/trac/boost/ticket/5897">#5897</a>,
+  <a href="https://svn.boost.org/trac/boost/ticket/6249">#6249</a></li>
+  <li><b>New:</b> Class <code>path</code> now has
+  <a href="reference.html#path-iterators"> <code>reverse_iterator</code>,
+  <code>const_reverse_iterator</code>, <code>rbegin()</code>, and <code>rend()</code></a>. </li>
+  <li><b>New:</b> C++11 <code>noexcept</code> supplied as specified in the 
+  Filesystem TS if supported by the compiler.</li>
+  <li><b>New:</b> C++11 move constructors and move assignments supplied as 
+  specified in the Filesystem TS if supported by the compiler. Resolves
+  <a href="https://svn.boost.org/trac/boost/ticket/10291">#10291</a>.</li>
+  <li><b>New:</b> Existing functions whose names changed in the Filesystem TS 
+  are now supported under both the old and new names.</li>
+  <li><b>New: </b>Added <code><a href="reference.html#path-size">size</a>()</code> 
+  function to class <code>path</code>. Resolves
+  <a href="https://svn.boost.org/trac/boost/ticket/6874">#6874</a>, <i>Path 
+  should have a size() member function</i>.</li>
+  <li>Clear several spurious GCC warnings.</li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/11733">#11733</a>, <i>
+  Missing unistd.h include in boost/libs/filesystem/src/unique_path.cpp</i> by 
+  apply a patch from Idar Tollefsen.</li>
+  <li>Fix a race condition in <code>unique_path</code> by applying
+  <a href="https://github.com/boostorg/filesystem/pull/15">pull request #15</a> 
+  from Sebastian Redl. Also fixes
+  <a href="unique_path%20Fails%20on%20Windows%20for%20Temporary%20User%20Profiles">
+  #5706</a>, <i><code>unique_path</code> Fails on Windows for Temporary User 
+  Profiles</i>.</li>
+  <li>Fix bug in <i><code>file_status</code></i> and <i><code>
+  recursive_directory_iterator</code></i>: C++ turns an explicit constructor 
+  with all arguments except first defaulted into non-explicit single argument 
+  constructor.</li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/10591">#10591</a>, <i>
+  boost::filesystem does not build on iOS 8</i>, by applying a patch submitted 
+  by Daniel Seither.</li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/9454">#9454</a>, <i>
+  Boost Filesystem [library build] not compiling when 
+  BOOST_FILESYSTEM_NO_DEPRECATED is defined</i>, by applying a patch submitted 
+  by Makesim.</li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/11447">#11447</a>, <i>
+  __OpenBSD__ macro name misspelled</i>, by applying a patch submitted by Jasper 
+  Lievisse Adriaanse.</li>
+  <li>
+  <p>Fix <a href="https://svn.boost.org/trac/boost/ticket/11288">#11288</a>, <i>
+  <font face="Arial">A patch to avoid redundant string allocations</font></i>, 
+  by applying a patch submitted by Yevhen Ivannikov.</li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/11175">#11175</a>, 
+  out-of-date documentation causing users to incorrectly expect that the library 
+  could be used with exceptions disabled.</li>
+  <li>Resolve <a href="https://svn.boost.org/trac/boost/ticket/11175">#11166</a> 
+  by mitigating (i.e. reducing the likelihood of) a possible external file 
+  system race in <code>remove()</code>.</li>
+  <li>
+  <p>Fix <a href="https://svn.boost.org/trac/boost/ticket/7258">#7258</a>,
+  <i><code>create_directories</code> returns false if the path ends with a slash</i>. 
+  Also fix related issues if path contains <i>dot</i> or <i>dot-dot</i> 
+  elements, and added test cases to the test suite.</li>
+  <li>
+  <p>Reference docs editorial cleanups: Use same style sheet as the 
+  rest of the documentation. Tweak tab font size. Fix excessively long lines in 
+  tables, synopsis.</li>
+  <li>Resolve <a href="https://svn.boost.org/trac/boost/ticket/10766">
+  #10766</a>, <i>parent_path() with redundant separator returns wrong value</i>, 
+  by adding examples and notes to the reference documentation to show why the 
+  returned value is in fact correct, and to provide rationale for that behavior. 
+  See <a href="reference.html#path-iterators">[path.itr]</a>, and
+  <a href="reference.html#path-decomposition">[path.decompose]</a> <code>
+  parent_path()</code> and <code>filename()</code> sections of the reference 
+  docs.</li>
+  <li>Minor other fixes, including pull requests from Jonathan Wakely and Marcel 
+  Raad.</li>
+  <li>Closed several tickets as duplicates or otherwise resolved by the 
+  above changes:<ul>
+  <li><a href="https://svn.boost.org/trac/boost/ticket/7607">#7607</a>, <i>path 
+  should not infer an invisible "." at the end of a path that ends with a slash;
+  </i><a href="https://svn.boost.org/trac/boost/ticket/7258">#7258</a>,
+  <a href="https://svn.boost.org/trac/boost/ticket/10766">#10766</a></li>
+  <li><a href="https://svn.boost.org/trac/boost/ticket/11061">#11061</a>,
+  <a href="https://svn.boost.org/trac/boost/ticket/11062">#11062</a>, <i>
+  impossible to traverse the path of the reverse iterator</i>, is effectively 
+  resolved by the addition of the class <code>path</code> reverse iteration 
+  feature. The reference documentation has also been updated with
+  <a href="reference.html#path-iterators">a note</a> warning about the 
+  limitations of class <code>path</code> iterators.</li>
+</ul>
+
+  </li>
+</ul>
+
+<h2>1.59.0</h2>
+<ul>
+  <li>Update the Tutorial:<ul>
+    <li>Use C++11 in the example programs to improve clarity.</li>
+    <li>Update the example source code show to match the actual example source 
+    code in the cpp files.</li>
+    <li>Rerun all the examples and update the output shown in the tutorial 
+    accordingly.</li>
+    <li>Fix spacing and other HTML presentation issues.</li>
+  </ul>
+  </li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/11491">#11491</a>, <i>
+  <code>temp_directory_path()</code> doesn't return valid temp path on Android</i>.</li>
+</ul>
+
+<h2>1.58.0</h2>
+<ul>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/6124">#6124</a>,
+  <a href="https://svn.boost.org/trac/boost/ticket/6779">#6779</a>, and
+  <a href="https://svn.boost.org/trac/boost/ticket/10038">#10038</a>. Cannot 
+  pass a BOOST_SCOPED_ENUM to a compiled function because it will result in an 
+  undefined reference if the library is compiled with -std=c++0x but the use is 
+  compiled in C++03 mode, or visa versa.</li>
+  <li>Rewrite Windows implementation of <code>temp_directory_path()</code> to (1) avoid
+  <code>GetTempPath()</code> failure if path length > 130 (ticket #5300) and (2) provide a 
+  more sensible sequence of directories than provided by <code>GetTempPath()</code>, per 
+  boost list discussion "[filesystem] temp_directory_path() behavior on 
+  Windows". The new sequence is:<ol>
+    <li><i><code>%TMP%</code></i></li>
+    <li><i><code>%TEMP%</code></i></li>
+    <li><code><i>%LOCALAPPDATA%</i>/Temp</code></li>
+    <li><code><i>%USERPROFILE%</i>/Temp</code></li>
+    <li><code><i>GetWindowsDirectoryW()</i>/Temp</code></li>
+  </ol>
+  </li>
+</ul>
+
+<h2>1.57.0</h2>
+<ul>
+  <li>Rework class <code>path</code> locale and codecvt implementation for increased reliability. 
+  This change was SVN revision 83021, which should have gone into 1.56.0 but 
+  unfortunately the merge didn't happen until too late.</li>
+  <li>Fix tickets <a href="https://svn.boost.org/trac/boost/ticket/8930">#8930</a>, <a href="https://svn.boost.org/trac/boost/ticket/9054">#9054</a>,
+  <a href="https://svn.boost.org/trac/boost/ticket/9214">#9219</a>,
+  <a href="https://svn.boost.org/trac/boost/ticket/10228">#10228</a>, and
+  <a href="https://svn.boost.org/trac/boost/ticket/10641">#10641</a>, all 
+  related to locales and codecvt facets.</li>
+  <li>The net effect of the above changes and fixes should be to eliminate 
+  spurious "locale::facet::_S_create_c_locale name not valid" errors on Linux 
+  and other non-BSD POSIX-like systems. The error will continue to occur, as it 
+  should, when a path encoding conversion char-to-wchar_t or wchar_t-to-char is 
+  attempted in an environment without a valid C locale (for example, if the LANG 
+  environment variable is invalid or not defined).</li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/6124">#6124</a>,
+  <a href="https://svn.boost.org/trac/boost/ticket/6779">#6779</a>, and
+  <a href="https://svn.boost.org/trac/boost/ticket/10038">#10038</a> - an 
+  undefined reference that occurred when the library was compiled for C++03 but 
+  the using program was compiled for C++11, or vice versa. The private library 
+  interface has been changed to use a plain-old C++03 enum. This is the fix 
+  suggested by Andy in 6779.</li>
+  <li>The Windows implementation now treats NTFS directory junctions (also known 
+  as junctions, also known as mount points) as symlinks. This has the effect of 
+  treating directory junctions as directories, and thus supporting all 
+  operations suitable for directories. This resolves
+  <a href="https://svn.boost.org/trac/boost/ticket/9016">#9016</a>. Directory 
+  junctions are very similar to symlinks, but may have performance or other 
+  advantages in some situations. They can be created from the command line with 
+  "<code>mklink /j link target</code>". There is no plan for Boost.Filesystem to 
+  be able to create them directly other than by calling <code>std::system()</code>.</li>
+</ul>
+
+<h2>1.56.0</h2>
+<ul>
+  <li>Reorganize <code>recursive_directory_iterator::increment</code>, adding an 
+  invariant that progress is always made, even if an error is reported by 
+  exception or error_code. Add a manually executed test, <code>
+  test/issues/recurse_dir_iter_5403.cpp</code>. Adjust regular regression tests 
+  as needed. Thanks to Claudio Bley for the
+  <a href="https://github.com/boostorg/filesystem/pull/4">pull request</a> - the 
+  change was incorporated into the reorganized code. Fixes
+  <a href="https://svn.boost.org/trac/boost/ticket/5403">#5403</a> and
+  <a href="https://svn.boost.org/trac/boost/ticket/6821">#6821</a>.</li>
+  <li>Fix <code>canonical()</code> to treat parent of root as root. (Christian 
+  Hammerl) Fixes <a href="https://svn.boost.org/trac/boost/ticket/9683">#9683</a> 
+  and <a href="https://svn.boost.org/trac/boost/ticket/10187">#10187</a>.</li>
+  <li>Added missing test for <code>__sun</code> macro which is defined on 
+  Solaris 10. (Chris Stylianou)</li>
+  <li>Minor fixes and code cleanup.</li>
+  <li>Update IDE projects to Visual Studio 2013.</li>
+  <li>Remove unused <code>const char colon</code> to clear clang warning. (J?gen 
+  Hunold)</li>
+  <li>Add BOOST_NOEXCEPT to <code>class filesystem_error</code>.</li>
+  <li>Change <code>perms::all_all</code> and <code>perms::perms_mask</code> to 
+  absolute values to quiet intellisense warnings, and conform to C++11.</li>
+</ul>
+
+<h2>1.54.0</h2>
+<ul>
+  <li>Reimplement <code>path::codecvt()</code> and <code>path::imbue()</code> 
+  with portable code that is intended to be much more robust and maintainable. A 
+  section on <a href="reference.html#path-Usage">path usage concerns</a> has 
+  been added to the reference documentation describing several concerns that 
+  arise in the context of multithreading and <code>path::codecvt()</code>.</li>
+</ul>
+
+<h2>1.52.0</h2>
+<ul>
+  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/7239">#7239</a>, <i>Stack 
+  overflow when calling <code>create_directories(":D")</code></i>. The reported 
+  problem was a symptom of an internal bug that caused <code>path::filename()</code> 
+  and <code>path::parent_path()</code> to fail on Windows for <code>path(":")</code>, 
+  and that in turn caused other functions that depend on <code>filename()</code> 
+  or <code>parent_path()</code> to fail, such as <code>create_directories()</code>.</li>
+</ul>
+
+<h2>1.51.0</h2>
+<ul>
+  <li>Add begin() and end() non-member functions for directory_iterator and 
+  recursive_directory_iterator so that C++11 range-based for statements  work. 
+  Suggested by feature requests
+  <a href="https://svn.boost.org/trac/boost/ticket/5896">#5896</a> and
+  <a href="https://svn.boost.org/trac/boost/ticket/6521">#6521</a>, using the
+  <a href="https://svn.boost.org/trac/boost/ticket/5896">#5896</a> approach.</li>
+  <li>Add range_begin() and range_end() non-member functions for directory_iterator and 
+  recursive_directory_iterator so that 
+  <a href="http://www.boost.org/libs/foreach/">BOOST_FOREACH</a> works.</li>
+  <li>Fix a Linux fchmodat problem affecting symlink permissions reported during 
+  discussion of <a href="https://svn.boost.org/trac/boost/ticket/6659">#6659</a>.</li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/6659">#6659</a> and
+  <a href="https://svn.boost.org/trac/boost/ticket/7051">#7051</a>, <i>fchmodat 
+  supported only on Solaris 11</i>. Fix for both Sun and GCC compilers. </li>
+</ul>
+
+<h2>1.50.0</h2>
+<ul>
+  <li>Remove Filesystem Version 2 from the distribution. Version 3 is now the 
+  only distributed version. Those still using V2 are urged to migrate to V3 as 
+  soon as possible.</li>
+  <li>Add <code>constexpr value_type preferred_separator</code> to class path.</li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5118">#5118</a>, <i>
+  <code>replace_extension</code> doesn't work as specified in documentation</i>. The 
+  documentation, implementation, and test cases have all had fixes applied. The 
+  documentation had failed to mention that any existing extension is removed. 
+  The behavior for simple cases has been reverted to the Version 2 behavior, but 
+  with corrections so that complex replacements now work. Two test cases from 
+  #5118 have been added.</li>
+  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/3737">#3737</a>, 
+  <i>Boost.Filesystem does not compile on Windows Mobile</i>. On Windows, <sys/stat.h> 
+  is no longer included.</li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/4065">#4065</a>, 
+  <i>Boost Filesystem lexicographic path comparison inconsistent</i>. This required 
+  multiple source code bug fixes and code cleanup, correcting problems not 
+  related to lexicographical issues.</li>
+  <li>Add class path member function <code>compare</code> for consistency with 
+  std::string.</li>
+  <li>Tighten BOOST_FILESYSTEM_DYN_LINK and BOOST_FILESYSTEM_STATIC_LINK logic 
+  in filesystem/config.hpp so that one or the other is always defined, and both 
+  being defined is a #error.</li>
+  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6690">#6690</a> and
+  <a href="http://svn.boost.org/trac/boost/ticket/6737">#6737</a>, resolving 
+  static linking related problems with VC++ 8 through 11. Note that this fix may 
+  reintroduce codecvt thread safety problems
+  <a href="http://svn.boost.org/trac/boost/ticket/4889">#4889</a>,
+  <a href="http://svn.boost.org/trac/boost/ticket/6320">#6320</a>, for these 
+  compilers if static linking is used.</li>
+  <li>Add path::operator+= and concat functions to tack on things like suffixes 
+  or numbers. Suggested by Ed Smith-Rowland and others.</li>
+  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6809">#6809</a>, 
+  <i>Implementation of filesystem::rename() method for MS Windows is wrong</i>, by 
+  adding MOVEFILE_COPY_ALLOWED to deal with renames across drives, volumes, file 
+  systems. Fix has no effect on non-Windows systems.</li>
+  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6819">#6819</a>, A path operand with a source that was a one character array was 
+  treated as empty, even if it wasn't empty. Such arrays can occur in unions or 
+  in code using C variable length array idioms.</li>
+  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6932">#6932</a>, 
+  <i>create_directories throws exception even if error_code is specified</i>.</li>
+</ul>
+
+<h2>1.49.0</h2>
+<ul>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/3714">#3714</a>, 
+  Added test cases and fixes for class path errors when assignment or append 
+  used self or portion of self as source. </li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/4889">#4889</a>, 
+  <a href="https://svn.boost.org/trac/boost/ticket/6320">#6320</a>, <i>Locale codecvt_facet not thread safe on Windows</i>. Move 
+  Windows, Mac OS X, locale and codecvt facet back to namespace scope. POSIX 
+  except OS X uses local static initialization (IE lazy) to ensure exceptions 
+  are catchable if environmental variables are misconfigured and to avoid use of 
+  locale("") if not actually used.</li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5652">#5652</a>, 
+  <i>recursive_directory_iterator fails on cyclic symbolic links</i>. Thanks to Daniel Aarno for the patch.</li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5653">#5653</a>, 
+  <i>recursive_directory_iterator(error_code) can still throw filesystem_error</i>.</li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900">#5900</a>, <i>directory_iterator 
+  access violation on Windows if error is thrown</i>. Thanks to Andreas Eckleder for the patch.</li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900#comment:2">#5900 
+  comment 2</a>, a bug in director_iterator construction with error_code argument that 
+  caused increment to be called without the ec argument being passed.</li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900">#5989</a> by cleaning up test suite path_test.cpp code even 
+  though the ticket itself was not a defect, and clarifying docs; iteration over a path yields 
+  generic format.</li>
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5592">#5592</a>, <i>Change Windows codecvt processing from CP_THREAD_ACP to CP_ACP</i>.</li>
+  <li>Operations function fixes for PGI compiler, thanks to Noel Belcourt.</li>
+  <li>Relax permissions test to reflect reality, particularly on the Sandia test 
+  platforms.</li>
+</ul>
+
+<h2>1.48.0</h2>
+<ul>
+  <li>Added operational function <a href="reference.html#canonical">canonical()</a>, 
+  suggested by David Svoboda, who also provided pseudo-code.</li>
+  <li>Added <a href="reference.html#hash_value">hash_value()</a> function for 
+  paths. (Daniel James)</li>
+  <li>Fix path inserter problem (<a href="https://svn.boost.org/trac/boost/ticket/5764">#5764</a>) 
+  reported for QNX6.3.2 host (gcc-3.3.5)</li>
+  <li>Fix problem of locale("") exception being thrown before main() starts on 
+  poorly configured (e.g. LANG="bad name") POSIX systems. Resolves the most 
+  serious aspect of tickets
+  <a href="https://svn.boost.org/trac/boost/ticket/4688">#4688</a>,
+  <a href="https://svn.boost.org/trac/boost/ticket/5100">#5100</a>,
+  <a href="https://svn.boost.org/trac/boost/ticket/5289">#5289</a>.</li>
+</ul>
+
+<h2>1.47.0</h2>
+<ul>
+  <li>Program file_status.cpp added (V3). See boost-root/libs/filesystem/v3/example. 
+  Useful both as an example and to explore how Boost.Filesystem treats various 
+  status errors.  Run "bjam" (NOT "bjam install") in the example directory 
+  to install in example/bin.</li>
+</ul>
+
+<h2>1.46.1</h2>
+
+<ul>
+  <li>Fix fstream problem for STLPort masquerading as Dinkumware (<a href="https://svn.boost.org/trac/boost/ticket/5217">#5217</a>).</li>
+</ul>
+
+<h2>1.46.0</h2>
+<ul>
+  <li>Version 3 of the library is now the default.</li>
+  <li>IBM vacpp: Workaround for compiler bug affecting iterator_facade. (<a href="https://svn.boost.org/trac/boost/ticket/4912">#4912</a>)</li>
+  <li>Verify, clarify, document that <boost/config/user.hpp> can be used to 
+  specify BOOST_FILESYSTEM_VERSION. (<a href="https://svn.boost.org/trac/boost/ticket/4891">#4891</a>)</li>
+  <li>Replaced C-style assert with BOOST_ASSERT.</li>
+  <li>Undeprecated unique_path(). Instead, add a note mentioning the workaround 
+  for lack of thread safety and possible change to cwd. unique_path() is just 
+  too convenient to deprecate!</li>
+  <li>Cleared several GCC warnings.</li>
+  <li>Changed V2 code to use BOOST_THROW_EXCEPTION.</li>
+  <li>Windows: Fix status() to report non-symlink reparse point correctly.</li>
+  <li>Add <code>symlink_option</code> to <code>recursive_directory_iterator</code>, 
+  allowing control over recursion into directory symlinks. Note that the default 
+  is changed to not recurse into directory symlinks.</li>
+  <li><a href="reference.html">Reference</a> documentation cleanup, including 
+  fixing missing and broken links, and adding missing functions.</li>
+  <li>Miscellaneous implementation code cleanup. </li>
+</ul>
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->25 October, 2015<!--webbot bot="Timestamp" endspan i-checksum="38877" --></p>
+<p>© Copyright Beman Dawes, 2011</p>
+<p> Use, modification, and distribution are subject to the Boost Software 
+License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a></p>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/styles.css b/vendor/pdalboost/libs/filesystem/doc/styles.css
new file mode 100644
index 0000000..680e68c
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/styles.css
@@ -0,0 +1,19 @@
+body
+{
+  font-family: arial, sans-serif;
+  max-width: 6.5in;
+  margin: 0px auto;
+  font-size: 85%;
+}
+ ins  {background-color: #CCFFCC; text-decoration: none;}
+ del  {background-color: #FFCACA; text-decoration: none;}
+ pre  {background-color: #D7EEFF; font-size: 95%; font-family: "courier new", courier, serif;}
+ code {font-size: 110%; font-family: "courier new", courier, serif;}
+ table {font-size: 90%;}
+ 
+ /*
+ � Copyright Beman Dawes, 2014
+ Distributed under the Boost Software License, Version 1.0.
+ See www.boost.org/LICENSE_1_0.txt
+ */
+ 
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/tickets.html b/vendor/pdalboost/libs/filesystem/doc/tickets.html
new file mode 100644
index 0000000..054acb4
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/tickets.html
@@ -0,0 +1,52 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Filesystem Tickets</title>
+</head>
+
+<body>
+
+<p> </p>
+<h2>Locale related</h2>
+<p><a href="https://svn.boost.org/trac/boost/ticket/3332">#3332</a> 
+boost::filesystem::path will get trobule in locale Chinese_Taiwan.950 (windows)<br>
+<a href="https://svn.boost.org/trac/boost/ticket/7211">#7211</a> path_locale 
+destructor crashes when overloaded operator new and delete are present<br>
+<a href="https://svn.boost.org/trac/boost/ticket/8388">#8388</a> 
+windows_file_codecvt should be allocated with _NEW_CRT<br>
+<a href="https://svn.boost.org/trac/boost/ticket/8642">#8642</a> Global locale 
+prevents from using Boost.Filesystem in global constructors and destructors<br>
+<a href="https://svn.boost.org/trac/boost/ticket/8930">#8930</a> 
+boost::path::root_directory() throws locale::facet::_S_create_c_locale name not 
+valid<br>
+<a href="https://svn.boost.org/trac/boost/ticket/9182">#9182</a> 
+Boost-filesystem std::runtime_error: locale::facet::_S_create_c_locale name not 
+valid failure on Xamarin.Android<br>
+<a href="https://svn.boost.org/trac/boost/ticket/9219">#9219</a> path::codecvt() 
+is called when not required<br>
+<a href="https://svn.boost.org/trac/boost/ticket/9560">#9560</a> 
+operations_test_static unit test crashes during static initialization phase on 
+Mac/10.7/32-bit/darwin-4.2.1<br>
+<a href="https://svn.boost.org/trac/boost/ticket/10205">#10205</a> FileSystem 
+runtime error: locale::facet::_S_create_c_locale name not valid<br>
+<br>
+ </p>
+<h2>TR alignment</h2>
+<p>Work has started to bring the library into alignment with the C++ File System 
+Technical Specification (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4099.html">HTML</a>) 
+(<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4100.pdf">PDF</a>). 
+This work is occurring on the
+<a href="https://github.com/boostorg/filesystem/tree/ts-develop">git <code>
+ts-develop</code> branch</a>, and is currently very unstable. </p>
+<ul>
+  <li><a href="https://svn.boost.org/trac/boost/ticket/10291">#10291</a> path 
+  doesn't have move constructor/assignment operator.</li>
+</ul>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/tutorial.html b/vendor/pdalboost/libs/filesystem/doc/tutorial.html
new file mode 100644
index 0000000..e53bc2e
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/tutorial.html
@@ -0,0 +1,1330 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Filesystem Tutorial</title>
+<link href="styles.css" rel="stylesheet">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td width="277">
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem Tutorial</font>
+    </td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="index.htm">Home</a>   
+    <a href="tutorial.html">Tutorial</a>   
+    <a href="reference.html">Reference</a>   
+    <a href="faq.htm">FAQ</a>   
+    <a href="release_history.html">Releases</a>   
+    <a href="portability_guide.htm">Portability</a>   
+    <a href="v3.html">V3 Intro</a>   
+    <a href="v3_design.html">V3 Design</a>   
+    <a href="deprecated.html">Deprecated</a>   
+    <a href="issue_reporting.html">Bug Reports </a>  
+    </td>
+</table>
+
+<p>
+      <a href="#Introduction">Introduction</a><br>
+      <a href="#Preliminaries">Preliminaries</a><br>
+      <a href="#Reporting-size">Reporting the size of a file - (tut1.cpp)</a><br>
+      <a href="#Using-status-queries">Using status queries to determine file existence and type - (tut2.cpp)</a><br>
+      <a href="#Directory-iteration">Directory iteration plus catching 
+      exceptions - (tut3.cpp)</a><br>
+      <a href="#Using-path-decomposition">Using path decomposition, plus sorting results - (tut4.cpp)</a><br>
+      <a href="#Class-path-Constructors">Class path: Constructors, including 
+      Unicode - (tut5.cpp)</a><br>
+      <a href="#Class-path-formats">Class path: Generic format vs. Native format</a><br>
+      <a href="#Class path-iterators-etc">Class path: Iterators, observers, composition, decomposition, and query - (path_info.cpp)</a><br>
+      <a href="#Error-reporting">Error reporting</a><br>
+</p>
+<h2><a name="Introduction">Introduction</a></h2>
+
+<p>This tutorial develops a little command line program to list information 
+about files and directories - essentially a much simplified version of the POSIX <code>ls</code> or Windows <code>dir</code> 
+commands. We'll start with the simplest possible version and progress to more 
+complex functionality. Along the way we'll digress to cover topics you'll need 
+to know about to understand Boost.Filesystem.</p>
+
+<p>Source code for each  of the tutorial programs is available, and you 
+are encouraged to compile, test, and experiment with it. To conserve space, we won't 
+always show boilerplate code here, but the provided source is complete and 
+ready to build.</p>
+
+<h2><a name="Preliminaries">Preliminaries</a></h2>
+
+<p>Install the Boost distribution if you haven't already done so. See the
+<a href="http://www.boost.org/more/getting_started/index.html">Boost Getting 
+Started</a> docs.</p>
+
+<p>This tutorial assumes you are going to compile and test the examples using 
+the provided scripts. That's highly recommended.</p>
+
+<blockquote>
+
+<p><b>If you are planning to compile and test the examples but not use the 
+scripts, make sure your build setup knows where to 
+locate or build the Boost library binaries.</b></p>
+
+</blockquote>
+<p>Fire up your command line interpreter, and type the following commands:</p>
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Ubuntu Linux </b></i></td>
+    </tr>
+    <tr>
+      <td>
+      <pre>$ cd <i><b>boost-root</b></i>/libs/filesystem/example/test
+
+$ ./setup.sh
+Copying example programs...
+
+$ ./build.sh
+Compiling example programs...
+
+$ ./tut1
+Usage: tut1 path</pre>
+      </td>
+    </tr>
+  </table>
+  
+   
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+    <td>
+      <pre>>cd <i><b>boost-root</b></i>\libs\filesystem\example\test
+
+>setup
+Copying example programs...
+
+>build
+Compiling example programs...
+
+>tut1
+Usage: tut1 path</pre>
+      </td>
+    </tr>
+  </table>
+
+<p>If the <code>tut1</code> command outputs "<code>Usage: tut1 path</code>", all 
+is well. A set of tutorial example programs has been copied (by <code>setup</code>) to
+<i><b><code>boost-root</code></b></i><code>/libs/filesystem/example/test</code> 
+and then built. You are encouraged to modify and experiment with them as the 
+tutorial progresses. Just invoke the <code>build</code> script again to rebuild, 
+or invoke <code>b2</code> directly.</p>
+
+<p>If something didn't work right, here are some troubleshooting suggestions:</p>
+
+  <ul>
+    <li>If the <code>b2</code> program executable isn't being found, check your path environmental variable 
+    or see
+    <a href="http://www.boost.org/more/getting_started/windows.html">Boost 
+    Getting Started</a>.<br>
+ </li>
+    <li>Look at <code>b2.log</code> to try to spot an indication of the 
+    problem.</li>
+  </ul>
+
+<h2><a name="Reporting-size">Reporting the size of a file</a> - (<a href="../example/tut1.cpp">tut1.cpp</a>)</h2>
+
+<p>Let's get started. Our first example program, <a href="../example/tut1.cpp">tut1.cpp</a>, 
+reports the size of a file:</p>
+
+<table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+  <tr>
+    <td>
+      <pre><!-- include file "../example/tut1.cpp" -->#include <iostream>
+#include <boost/filesystem.hpp>
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    std::cout << "Usage: tut1 path\n";
+    return 1;
+  }
+  std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
+  return 0;
+}<!-- end include file --></pre>
+    </td>
+  </tr>
+</table>
+
+<p>The Boost.Filesystem <code><a href="reference.html#file_size">file_size</a></code> 
+function returns a <code>uintmax_t</code> 
+containing the size of the file named by the argument. The declaration looks 
+like this:</p>
+
+<blockquote>
+  <pre><code>uintmax_t file_size(const path& p);</code> </pre>
+</blockquote>
+<p>For now, all you need to know is that <code>class path</code> has constructors that take
+<code>const char *</code> and other string types. (If you can't wait to 
+find out more, skip ahead to the <a href="#Class-path-Constructors">class path</a> section of 
+the tutorial.)</p>
+<p>Please take a minute to try out <code>tut1</code> on your system, using a 
+file that is known to exist, such as <code>tut1.cpp</code>. Here is what the 
+results look like on two different operating systems:</p>
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Ubuntu Linux </b></i></td>
+    </tr>
+    <tr>
+      <td valign="top">
+      <pre>$ ./tut1 tut1.cpp
+tut1.cpp 569</pre>
+      <pre>$ ls -l tut1.cpp
+-rw-rw-r-- 1 beman beman 569 Jul 26 12:04 tut1.cpp</pre>
+      </td>
+    </tr>
+  </table>
+  
+   
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+ 
+      <td valign="top">
+      <pre>>tut1 tut1.cpp
+tut1.cpp 592
+
+>dir tut1.cpp
+...
+07/26/2015 07:20 AM 592 tut1.cpp
+...</pre>
+      </td>
+    </tr>
+  </table>
+
+<p>So far, so good. The reported Linux and Windows sizes are different because 
+the Linux tests used <code>"\n"</code> line endings, while the Windows tests 
+used <code>"\r\n"</code> line endings. The sizes reported may differ 
+from the above if changes have been made to <code>tut1.cpp</code>.</p>
+  <p>Now try again, but give a path that doesn't exist:</p>
+
+  <table border="1" cellpadding="5" cellspacing="0"
+    style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Ubuntu Linux </b></i></td>
+    </tr>
+    <tr>
+      <td valign="top">
+      <pre>$ ./tut1 foo
+terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
+what(): boost::filesystem::file_size: No such file or directory: "foo"
+Aborted (core dumped)</pre>
+      </td>
+    </tr>
+  </table>
+
+ 
+
+  <table border="1" cellpadding="5" cellspacing="0"
+    style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td valign="top">
+      <pre>>tut1 foo</pre>
+      <p><b><i>An exception is thrown;<br>
+      the exact form of the response depends on 
+      Windows system options.</i></b></td>
+    </tr>
+  </table>
+
+  <p>What happens?
+  There's no file named <code>foo</code> in the current directory, so by default an 
+exception is thrown. See <a href="#Error-reporting">Error reporting</a> to learn 
+  about error reporting via error codes rather than exceptions.</p>
+  <p>Try this:</p>
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Ubuntu Linux </b></i></td>
+    </tr>
+    <tr>
+      <td>
+      <pre>$ ./tut1 .
+terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
+what(): boost::filesystem::file_size: Operation not permitted: "."
+Aborted (core dumped)</pre>
+      </td>
+    </tr>
+  </table>
+  
+   
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td valign="top">
+      <pre>>tut1 .</pre>
+      <p><b><i>An exception is thrown;<br>
+      the exact form of the response depends on Windows system options.</i></b></td>
+    </tr>
+  </table>
+
+  <p>The current directory exists, but <code>file_size()</code> works on regular 
+  files, not directories, so again an exception is thrown.</p>
+
+  <p>We'll deal with those situations in <code>tut2.cpp</code>.</p>
+
+<h2><a name="Using-status-queries">Using status queries to determine file existence and type</a> - (<a href="../example/tut2.cpp">tut2.cpp</a>)</h2>
+
+<p>Boost.Filesystem includes status query functions such as <code>
+<a href="reference.html#exists-path">exists</a></code>,
+<code><a href="reference.html#is_directory-path">is_directory</a></code>, and <code>
+<a href="reference.html#is_regular_file-path">is_regular_file</a></code>. These return
+<code>bool</code>'s, and will return <code>true</code> if the condition 
+described by their name is met. Otherwise they return <code>false</code>, 
+including when any element 
+of the path argument can't be found.</p>
+
+<p><a href="../example/tut2.cpp">tut2.cpp</a> uses several of the status query functions to cope with non-existent 
+files and with different kinds of files:</p>
+
+<table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+  <tr>
+    <td>
+      <pre><!-- include file "../example/tut2.cpp" -->#include <iostream>
+#include <boost/filesystem.hpp>
+using namespace std;
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    cout << "Usage: tut2 path\n";
+    return 1;
+  }
+
+  path p(argv[1]);  // avoid repeated path construction below
+
+  if (exists(p))    // does path p actually exist?
+  {
+    if (is_regular_file(p))        // is path p a regular file?
+      cout << p << " size is " << file_size(p) << '\n';
+
+    else if (is_directory(p))      // is path p a directory?
+      cout << p << " is a directory\n";
+
+    else
+      cout << p << " exists, but is not a regular file or directory\n";
+  }
+  else
+    cout << p << " does not exist\n";
+
+  return 0;
+}<!-- end include file --></pre>
+    </td>
+  </tr>
+</table>
+
+<p>Give it a try:</p>
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Ubuntu Linux </b></i></td>
+    </tr>
+    <tr>
+      <td valign="top">
+      <pre>$ ./tut2 tut2.cpp
+"tut2.cpp" size is 997
+
+$ ./tut2 foo
+"foo" does not exist
+
+$ ./tut2 .
+"." is a directory</pre>
+      </td>
+    </tr>
+  </table>
+
+ 
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+       <td valign="top">
+      <pre>>tut2 tut2.cpp
+tut2.cpp size is 1039
+
+>tut2 foo
+"foo" does not exist
+
+>tut2 .
+"." is a directory</pre>
+      </td>
+    </tr>
+  </table>
+
+<p>Although tut2 works OK in these tests, the output is less than satisfactory 
+for a directory. We'd typically like to see a list of the directory's contents. In <code>tut3.cpp</code> 
+we will see how to iterate over directories.</p>
+
+<p>But first, let's try one more test:</p>
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Ubuntu Linux </b></i></td>
+    </tr>
+    <tr>
+      <td valign="top">
+      <pre>$ ls /home/jane/foo
+ls: cannot access /home/jane/foo: No such file or directory
+
+$ ./tut2 /home/jane/foo
+terminate called after throwing an instance of 'boost::
+filesystem::filesystem_error>'
+   what(): boost::filesystem::status: Permission denied:
+     "/home/jane/foo"
+Aborted</pre>
+      </td>
+     </tr>
+  </table>
+  
+   
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td valign="top">
+      <pre>>dir e:\
+The device is not ready.
+
+>tut2 e:\</pre>
+      <p dir="ltr"><b><i>An exception is thrown;<br>
+      the exact form of the response depends on 
+      Windows system options.</i></b></td>
+    </tr>
+  </table>
+
+<p>On the Linux system, the test was being run from an account that did not have 
+permission to access <code>/home/jane/foo</code>. On the Windows system, <code>
+e:</code> was a Compact Disc reader/writer that was not ready. End users 
+shouldn't have to interpret cryptic exceptions reports, so as we move on to <code>tut3.cpp</code> 
+we will increase the robustness of the code, too.</p>
+
+<h2><a name="Directory-iteration">Directory iteration</a> plus catching 
+exceptions - (<a href="../example/tut3.cpp">tut3.cpp</a>)</h2>
+
+<p>Boost.Filesystem's <code><a href="reference.html#directory_iterator">
+directory_iterator</a></code> class is just what we need here. It follows the 
+general pattern of the standard library's <code>istream_iterator</code>. Constructed from 
+a path, it iterates over the contents of the directory. A default constructed <code>directory_iterator</code> 
+acts as the end iterator.</p>
+
+<p>The value type of <code>directory_iterator</code> is <code>
+<a href="reference.html#directory_entry">directory_entry</a></code>. A <code>
+directory_entry</code> object contains <code>path</code> and <code><a href="reference.html#file_status">file_status</a></code> 
+information.  A <code>
+directory_entry</code> object 
+can be used directly, but can also be passed to <code>path</code> arguments in function calls.</p>
+
+<p>The other need is increased robustness in the face of the many kinds of 
+errors that can affect file system operations. We could do that at the level of 
+each call to a Boost.Filesystem function (see <a href="#Error-reporting">Error 
+reporting</a>), but for simplicity <a href="../example/tut3.cpp">tut3.cpp</a> 
+uses an overall try/catch block.</p>
+
+<table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+  <tr>
+    <td>
+      <pre><!-- include file "../example/tut3.cpp" -->#include <iostream>
+#include <boost/filesystem.hpp>
+using std::cout;
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    cout << "Usage: tut3 path\n";
+    return 1;
+  }
+
+  path p (argv[1]);
+
+  try
+  {
+    if (exists(p))
+    {
+      if (is_regular_file(p))
+        cout << p << " size is " << file_size(p) << '\n';
+
+      else if (is_directory(p))
+      {
+        cout << p << " is a directory containing:\n";
+
+        for (directory_entry& x : directory_iterator(p))
+          cout << "    " << x.path() << '\n'; 
+      }
+      else
+        cout << p << " exists, but is not a regular file or directory\n";
+    }
+    else
+      cout << p << " does not exist\n";
+  }
+
+  catch (const filesystem_error& ex)
+  {
+    cout << ex.what() << '\n';
+  }
+
+  return 0;
+}<!-- end include file --></pre>
+    </td>
+  </tr>
+</table>
+
+<p>Give <code>tut3</code> a try, passing it a path to a directory as a command line argument. 
+Here is a run on a checkout of the Boost Git develop branch, followed by a repeat 
+of the test cases that caused exceptions on Linux and Windows:</p>
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Ubuntu Linux </b></i></td>
+    </tr>
+    <tr>
+      <td valign="top">
+      <pre>$ ./tut3 ~/boost/develop
+    "/home/beman/boost/develop" is a directory containing:
+    "/home/beman/boost/develop/rst.css"
+    "/home/beman/boost/develop/boost"
+    "/home/beman/boost/develop/boost.png"
+    "/home/beman/boost/develop/libs"
+    "/home/beman/boost/develop/doc"
+    "/home/beman/boost/develop/project-config.jam.2"
+    "/home/beman/boost/develop/.gitmodules"
+    "/home/beman/boost/develop/boostcpp.py"
+    "/home/beman/boost/develop/.travis.yml"
+    "/home/beman/boost/develop/.gitattributes"
+    "/home/beman/boost/develop/index.htm"
+    "/home/beman/boost/develop/index.html"
+    "/home/beman/boost/develop/bjam"
+    "/home/beman/boost/develop/project-config.jam.1"
+    "/home/beman/boost/develop/LICENSE_1_0.txt"
+    "/home/beman/boost/develop/.git"
+    "/home/beman/boost/develop/tools"
+    "/home/beman/boost/develop/stage"
+    "/home/beman/boost/develop/boostcpp.jam"
+    "/home/beman/boost/develop/Jamroot"
+    "/home/beman/boost/develop/.gitignore"
+    "/home/beman/boost/develop/INSTALL"
+    "/home/beman/boost/develop/more"
+    "/home/beman/boost/develop/bin.v2"
+    "/home/beman/boost/develop/project-config.jam"
+    "/home/beman/boost/develop/boost-build.jam"
+    "/home/beman/boost/develop/bootstrap.bat"
+    "/home/beman/boost/develop/bootstrap.sh"
+    "/home/beman/boost/develop/status"
+    "/home/beman/boost/develop/boost.css"</pre>
+    </td>
+     </tr>
+  </table>
+  
+   
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+       <td align="center"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+ 
+      <td valign="top">
+      <pre>>tut3 \boost\develop
+"\boost\develop" is a directory containing:
+    "\boost\develop\.git"
+    "\boost\develop\.gitattributes"
+    "\boost\develop\.gitignore"
+    "\boost\develop\.gitmodules"
+    "\boost\develop\.travis.yml"
+    "\boost\develop\bin.v2"
+    "\boost\develop\boost"
+    "\boost\develop\boost-build.jam"
+    "\boost\develop\boost.css"
+    "\boost\develop\boost.png"
+    "\boost\develop\boostcpp.jam"
+    "\boost\develop\boostcpp.py"
+    "\boost\develop\bootstrap.bat"
+    "\boost\develop\bootstrap.sh"
+    "\boost\develop\doc"
+    "\boost\develop\index.htm"
+    "\boost\develop\index.html"
+    "\boost\develop\INSTALL"
+    "\boost\develop\Jamroot"
+    "\boost\develop\libs"
+    "\boost\develop\LICENSE_1_0.txt"
+    "\boost\develop\more"
+    "\boost\develop\project-config.jam"
+    "\boost\develop\rst.css"
+    "\boost\develop\stage"
+    "\boost\develop\status"
+    "\boost\develop\tools"</pre>
+      <pre>>tut3 e:\
+boost::filesystem::status: The device is not ready: "e:\"</pre>
+      </td>
+    </tr>
+  </table>
+
+<p>Not bad, but we can make further improvements:</p>
+
+    <ul>
+      <li>The listing would be much easier to read if only the filename was 
+      displayed, rather than the full path.<br>
+ </li>
+      <li>The Linux listing isn't sorted. That's because the ordering of 
+      directory iteration is unspecified. Ordering depends on the underlying 
+      operating system API and file system specifics. So we need to sort the 
+      results ourselves. </li>
+    </ul>
+
+<p>The next sections show how how those changes play out, so read on!</p>
+
+<h2><a name="Using-path-decomposition">Using path decomposition, plus sorting results</a> - (<a href="../example/tut4.cpp">tut4.cpp</a>)</h2>
+
+<p>For directories, <a href="../example/tut4.cpp">tut4.cpp</a> builds a <code>
+std::vector</code> of all the entries and then sorts it before writing to <code>
+cout</code>.</p>
+
+<table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+  <tr>
+    <td>
+    <pre><!-- include file "../example/tut4.cpp" -->#include <iostream>
+#include <vector>
+#include <algorithm>
+#include <boost/filesystem.hpp>
+using std::cout;
+using namespace boost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    cout << "Usage: tut4 path\n";
+    return 1;
+  }
+
+  path p (argv[1]);
+
+  try
+  {
+    if (exists(p))
+    {
+      if (is_regular_file(p))
+        cout << p << " size is " << file_size(p) << '\n';
+
+      else if (is_directory(p))
+      {
+        cout << p << " is a directory containing:\n";
+
+        std::vector<std::string> v;
+
+        for (auto&& x : directory_iterator(p))
+          v.push_back(x.path().filename().string()); 
+
+        std::sort(v.begin(), v.end());  
+
+        for (auto&& x : v)
+          cout << "    " << x << '\n';
+      }
+      else
+        cout << p << " exists, but is not a regular file or directory\n";
+    }
+    else
+      cout << p << " does not exist\n";
+  }
+
+  catch (const filesystem_error& ex)
+  {
+    cout << ex.what() << '\n';
+  }
+
+  return 0;
+}<!-- end include file --></pre>
+   </blockquote>
+    </td>
+  </tr>
+</table>
+
+    <p>The key difference between <code>tut3.cpp</code> and <code>tut4.cpp</code> is 
+    what happens in the directory iteration loop. We changed:</p>
+    <blockquote>
+      <pre>cout << " " << *it << '\n';   // *it returns a <a href="reference.html#Class-directory_entry">directory_entry</a>,</pre>
+    </blockquote>
+    <p>to:</p>
+    <blockquote>
+      <pre>path fn = it->path().filename();   // extract the filename from the path
+v.push_back(fn);                   // push into vector for later sorting</pre>
+    </blockquote>
+    <p><code><a href="reference.html#directory_entry-observers">path()</a></code> 
+    is a <code>directory_entry</code> observer function. <code>
+    <a href="reference.html#path-filename">filename()</a></code> is one of 
+    several path decomposition functions. It extracts the filename portion (<code>"index.html"</code>) 
+    from a path (<code>"/home/beman/boost/trunk/index.html"</code>). These decomposition functions are 
+    more fully explored in the <a href="#Class path-iterators-etc">Path iterators, observers, 
+    composition, decomposition and query</a> portion of this tutorial.</p>
+    <p>The above was written as two lines of code for clarity. It could have 
+    been written more concisely as:</p>
+    <blockquote>
+      <pre>v.push_back(it->path().filename()); // we only care about the filename</pre>
+    </blockquote>
+    <p>Here is the output from a test of <code><a href="../example/tut4.cpp">tut4.cpp</a></code>:</p>
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Ubuntu Linux </b></i></td>
+    </tr>
+    <tr>
+      <td>
+      <pre>$ ./tut4  v</pre>
+      </td>
+    </tr>
+  </table>
+
+ 
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td>
+      <pre>$ ./tut4 ~/boost/develop
+"/home/beman/boost/develop" is a directory containing:
+    .git
+    .gitattributes
+    .gitignore
+    .gitmodules
+    .travis.yml
+    INSTALL
+    Jamroot
+    LICENSE_1_0.txt
+    bin.v2
+    boost
+    boost-build.jam
+    boost.css
+    boost.png
+    boostcpp.jam
+    boostcpp.py
+    bootstrap.bat
+    bootstrap.sh
+    doc
+    index.htm
+    index.html
+    libs
+    more
+    project-config.jam
+    project-config.jam.1
+    project-config.jam.2
+    rst.css
+    stage
+    status
+    tools</pre>
+      </td>
+    </tr>
+  </table>
+
+    <p>That completes the main portion of this tutorial. If you haven't already 
+    worked through the <a href="#Class-path-Constructors">Class path</a> sections of this tutorial, dig into them now. 
+    The <a href="#Error-reporting">Error reporting</a> section may also be of 
+    interest, although it can be skipped unless you are deeply concerned about 
+    error handling issues.</p>
+
+<h2><a name="Class-path-Constructors">Class path: Constructors</a>, 
+including Unicode - (<a href="../example/tut5.cpp">tut5.cpp</a>)</h2>
+
+<p>Traditional C interfaces pass paths as <code>const char*</code> arguments. 
+C++ interfaces may add <code>const std::string&</code> overloads, but adding 
+overloads becomes untenable if wide characters, containers, and iterator ranges 
+need to be supported.</p>
+<p>Passing paths as <code>const path&</code> arguments is far simpler, yet far 
+more flexible because class <code>path</code> itself is far more flexible:</p>
+<ol>
+  <li>Class <code>path</code> supports multiple character types and encodings, including Unicode, to 
+  ease internationalization.</li>
+  <li>Class <code>path</code> supports multiple source types, such as iterators for null terminated 
+  sequences, iterator ranges, containers (including <code>std::basic_string</code>), 
+  and <code><a href="reference.html#Class-directory_entry">directory_entry</a></code>'s, 
+  so functions taking paths don't need to provide several overloads.</li>
+  <li>Class <code>path</code> supports both native and generic pathname formats, so programs can be 
+  portable between operating systems yet use native formats where desirable.</li>
+  <li>Class <code>path</code> supplies a full set of iterators, observers, composition, 
+  decomposition, and query functions, making pathname manipulations easy, 
+  convenient, reliable, and portable.</li>
+</ol>
+<p>Here is how (1) and (2) work. Class path constructors, 
+assignments, and appends have member templates for sources. For example, here 
+are the constructors that take sources:</p>
+
+<blockquote>
+  <pre>template <class <a href="reference.html#Source">Source</a>>
+  path(Source const& source);</pre>
+  <pre>template <class InputIterator>
+  path(InputIterator begin, InputIterator end);</pre>
+</blockquote>
+<p>Let's look at a little program that shows how comfortable class <code>path</code> is with 
+both narrow and wide characters in C-style strings, C++ strings, and via C++ 
+iterators:</p>
+
+<table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+  <tr>
+    <td>
+      <pre><!-- include file "../example/tut5.cpp" -->#include <boost/filesystem/fstream.hpp>
+#include <string>
+#include <list>
+namespace fs = boost::filesystem;
+
+int main()
+{
+  // \u263A is "Unicode WHITE SMILING FACE = have a nice day!"
+  std::string narrow_string ("smile2");
+  std::wstring wide_string (L"smile2\u263A");
+  std::list<char> narrow_list;
+  narrow_list.push_back('s');
+  narrow_list.push_back('m');
+  narrow_list.push_back('i');
+  narrow_list.push_back('l');
+  narrow_list.push_back('e');
+  narrow_list.push_back('3');
+  std::list<wchar_t> wide_list;
+  wide_list.push_back(L's');
+  wide_list.push_back(L'm');
+  wide_list.push_back(L'i');
+  wide_list.push_back(L'l');
+  wide_list.push_back(L'e');
+  wide_list.push_back(L'3');
+  wide_list.push_back(L'\u263A');
+
+  { fs::ofstream f("smile"); }
+  { fs::ofstream f(L"smile\u263A"); }
+  { fs::ofstream f(narrow_string); }
+  { fs::ofstream f(wide_string); }
+  { fs::ofstream f(narrow_list); }
+  { fs::ofstream f(wide_list); }
+  narrow_list.pop_back();
+  narrow_list.push_back('4');
+  wide_list.pop_back();
+  wide_list.pop_back();
+  wide_list.push_back(L'4');
+  wide_list.push_back(L'\u263A');
+  { fs::ofstream f(fs::path(narrow_list.begin(), narrow_list.end())); }
+  { fs::ofstream f(fs::path(wide_list.begin(), wide_list.end())); }
+
+  return 0;
+}<!-- end include file --></pre>
+    </td>
+  </tr>
+</table>
+
+<p>Testing <code>tut5</code>:</p>
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Ubuntu Linux </b></i></td>
+    </tr>
+    <tr>
+      <td valign="top">
+      <pre>$ ./tut5
+
+$ ls smile*
+smile smile☺ smile2 smile2☺ smile3 smile3☺ smile4 smile4☺</pre>
+      </td>
+    </tr>
+  </table>
+
+ 
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+      <td valign="top">
+      <pre>>tut5
+
+>dir /b smile*
+smile
+smile2
+smile2☺
+smile3
+smile3☺
+smile4
+smile4☺
+smile☺</pre>
+      </td>
+    </tr>
+  </table>
+
+<p>The exact appearance of the smiling face will depend on the font, 
+font size, and other settings for your command line window. The above tests were 
+run with out-of-the-box Ubuntu 14.04 and Windows 7, US Edition. If you don't get 
+the above results, take a look at the <code><i>boost-root</i>/libs/filesystem/example/test</code> 
+directory with your system's GUI file browser, such as Linux Nautilus, Mac OS X 
+Finder, or Windows Explorer. These tend to be more comfortable with 
+international character sets than command line interpreters.</p>
+
+  <p>Class <code>path</code> takes care of whatever character type or encoding 
+  conversions are required by the particular operating system. Thus as <code>
+  tut5</code> demonstrates, it's no problem to pass a wide character string to a 
+  Boost.Filesystem operational function even if the underlying operating system 
+  uses narrow characters, and visa versa. And the same applies to user supplied 
+  functions that take <code>const path&</code> arguments.</p>
+
+  <p>Class <code>path</code> also provides path syntax that is portable across operating systems, 
+  element iterators, and observer, composition, decomposition, and query 
+  functions to manipulate the elements of a path. The next section of this 
+  tutorial deals with path syntax.</p>
+
+<h2><a name="Class-path-formats">Class path: Generic format vs. Native format</a></h2>
+
+<p>Class <code>path</code> deals with two different pathname 
+formats - generic format and native format. For POSIX-like 
+file systems, these formats are the same. But for users of Windows and 
+other non-POSIX file systems, the distinction is important. Even 
+programmers writing for POSIX-like systems need to understand the distinction if 
+they want their code to be portable to non-POSIX systems.</p>
+
+<p>The <b>generic format</b> is the familiar <code>/my_directory/my_file.txt</code> format used by POSIX-like 
+operating systems such as the Unix variants, Linux, and Mac OS X. Windows also 
+recognizes the generic format, and it is the basis for the familiar Internet URL 
+format. The directory 
+separator character is always one or more slash characters.</p>
+
+<p>The <b>native format</b> is the format as defined by the particular 
+operating system. For Windows, either the slash or the backslash can be used as 
+the directory separator character, so <code>/my_directory\my_file.txt</code> 
+would work fine. Of course, if you write that in a C++ string literal, it 
+becomes <code>"/my_directory\\my_file.txt"</code>.</p>
+
+<p>If a drive specifier or a backslash appears 
+in a pathname on a Windows system, it is always treated as the native format.</p>
+
+<p>Class <code>path</code> has observer functions that allow you to 
+obtain the string representation of a path object in either the native format 
+or the generic format. See the <a href="#Class path-iterators-etc">next section</a> 
+for how that plays out.</p>
+
+  <p>The distinction between generic format and native format is important when 
+  communicating with native C-style API's and with users. Both tend to expect 
+  paths in the native format and may be confused by the generic format. The generic 
+  format is great, however, for writing portable programs that work regardless 
+  of operating system.</p>
+
+  <p>The next section covers class <code>path</code> observers, composition, 
+  decomposition, query, and iteration over the elements of a path.</p>
+
+<h2><a name="Class path-iterators-etc">Class path: Iterators, observers, composition, decomposition, and query</a> 
+- (<a href="../example/path_info.cpp">path_info.cpp</a>)</h2>
+
+<p>The <code><a href="../example/path_info.cpp">path_info.cpp</a></code> program is handy for learning how class <code>path</code> 
+iterators, 
+observers, composition, decomposition, and query functions work on your system. 
+It is one of the programs built by the <code>build.sh</code> and <code>build.bat</code> 
+scripts:</p>
+
+
+<table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+  <tr>
+    <td>
+      <pre><!-- include file "../example/path_info.cpp" -->#include <iostream>
+#include <boost/filesystem.hpp>
+using namespace std;
+using namespace boost::filesystem;
+
+const char * say_what(bool b) { return b ? "true" : "false"; }
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    cout << "Usage: path_info path-element [path-element...]\n"
+            "Composes a path via operator/= from one or more path-element arguments\n"
+            "Example: path_info foo/bar baz\n"
+#            ifdef BOOST_POSIX_API
+            "         would report info about the composed path foo/bar/baz\n";
+#            else  // BOOST_WINDOWS_API
+            "         would report info about the composed path foo/bar\\baz\n";
+#            endif
+    return 1;
+  }
+
+  path p;
+  for (; argc > 1; --argc, ++argv)
+    p /= argv[1];  // compose path p from the command line arguments
+
+  cout  <<  "\ncomposed path:\n";
+  cout  <<  "  operator<<()---------: " << p << "\n";
+  cout  <<  "  make_preferred()-----: " << p.make_preferred() << "\n";
+
+  cout << "\nelements:\n";
+  for (auto element : p)
+    cout << "  " << element << '\n';
+
+  cout  <<  "\nobservers, native format:" << endl;
+# ifdef BOOST_POSIX_API
+  cout  <<  "  native()-------------: " << p.native() << endl;
+  cout  <<  "  c_str()--------------: " << p.c_str() << endl;
+# else  // BOOST_WINDOWS_API
+  wcout << L"  native()-------------: " << p.native() << endl;
+  wcout << L"  c_str()--------------: " << p.c_str() << endl;
+# endif
+  cout  <<  "  string()-------------: " << p.string() << endl;
+  wcout << L"  wstring()------------: " << p.wstring() << endl;
+
+  cout  <<  "\nobservers, generic format:\n";
+  cout  <<  "  generic_string()-----: " << p.generic_string() << endl;
+  wcout << L"  generic_wstring()----: " << p.generic_wstring() << endl;
+
+  cout  <<  "\ndecomposition:\n";
+  cout  <<  "  root_name()----------: " << p.root_name() << '\n';
+  cout  <<  "  root_directory()-----: " << p.root_directory() << '\n';
+  cout  <<  "  root_path()----------: " << p.root_path() << '\n';
+  cout  <<  "  relative_path()------: " << p.relative_path() << '\n';
+  cout  <<  "  parent_path()--------: " << p.parent_path() << '\n';
+  cout  <<  "  filename()-----------: " << p.filename() << '\n';
+  cout  <<  "  stem()---------------: " << p.stem() << '\n';
+  cout  <<  "  extension()----------: " << p.extension() << '\n';
+
+  cout  <<  "\nquery:\n";
+  cout  <<  "  empty()--------------: " << say_what(p.empty()) << '\n';
+  cout  <<  "  is_absolute()--------: " << say_what(p.is_absolute()) << '\n';
+  cout  <<  "  has_root_name()------: " << say_what(p.has_root_name()) << '\n';
+  cout  <<  "  has_root_directory()-: " << say_what(p.has_root_directory()) << '\n';
+  cout  <<  "  has_root_path()------: " << say_what(p.has_root_path()) << '\n';
+  cout  <<  "  has_relative_path()--: " << say_what(p.has_relative_path()) << '\n';
+  cout  <<  "  has_parent_path()----: " << say_what(p.has_parent_path()) << '\n';
+  cout  <<  "  has_filename()-------: " << say_what(p.has_filename()) << '\n';
+  cout  <<  "  has_stem()-----------: " << say_what(p.has_stem()) << '\n';
+  cout  <<  "  has_extension()------: " << say_what(p.has_extension()) << '\n';
+
+  return 0;
+}<!-- end include file --></pre>
+    </td>
+  </tr>
+</table>
+
+
+<p>Run the examples below on your system, and try some different path arguments 
+as we go along. Here is the invocation we will talk about in detail:</p>
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Ubuntu Linux </b></i></td>
+    </tr>
+    <tr>
+      <td>
+      <pre>$ ./path_info /foo bar baa.txt
+
+composed path:
+  operator<<()---------: "/foo/bar/baa.txt"
+  make_preferred()-----: "/foo/bar/baa.txt"
+
+elements:
+  "/"
+  "foo"
+  "bar"
+  "baa.txt"
+
+observers, native format:
+  native()-------------: /foo/bar/baa.txt
+  c_str()--------------: /foo/bar/baa.txt
+  string()-------------: /foo/bar/baa.txt
+  wstring()------------: /foo/bar/baa.txt
+
+observers, generic format:
+  generic_string()-----: /foo/bar/baa.txt
+  generic_wstring()----: /foo/bar/baa.txt
+
+decomposition:
+  root_name()----------: ""
+  root_directory()-----: "/"
+  root_path()----------: "/"
+  relative_path()------: "foo/bar/baa.txt"
+  parent_path()--------: "/foo/bar"
+  filename()-----------: "baa.txt"
+  stem()---------------: "baa"
+  extension()----------: ".txt"
+
+query:
+  empty()--------------: false
+  is_absolute()--------: true
+  has_root_name()------: false
+  has_root_directory()-: true
+  has_root_path()------: true
+  has_relative_path()--: true
+  has_parent_path()----: true
+  has_filename()-------: true
+  has_stem()-----------: true
+  has_extension()------: true</pre>
+      </td>
+    </tr>
+  </table>
+  
+   
+
+  <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+    <tr>
+      <td align="center"><i><b>Microsoft Windows</b></i></td>
+    </tr>
+    <tr>
+    <td>
+      <pre>>path_info \foo bar baa.txt
+
+composed path:
+operator<<()---------: "\foo\bar\baa.txt"
+make_preferred()-----: "\foo\bar\baa.txt"
+
+elements:
+  "/"
+  "foo"
+  "bar"
+  "baa.txt"
+
+observers, native format:
+native()-------------: \foo\bar\baa.txt
+c_str()--------------: \foo\bar\baa.txt
+string()-------------: \foo\bar\baa.txt
+wstring()------------: \foo\bar\baa.txt
+
+observers, generic format:
+generic_string()-----: /foo/bar/baa.txt
+generic_wstring()----: /foo/bar/baa.txt
+
+decomposition:
+root_name()----------: ""
+root_directory()-----: "\"
+root_path()----------: "\"
+relative_path()------: "foo\bar\baa.txt"
+parent_path()--------: "\foo\bar"
+filename()-----------: "baa.txt"
+stem()---------------: "baa"
+extension()----------: ".txt"
+
+query:
+empty()--------------: false
+is_absolute()--------: false
+has_root_name()------: false
+has_root_directory()-: true
+has_root_path()------: true
+has_relative_path()--: true
+has_parent_path()----: true
+has_filename()-------: true
+has_stem()-----------: true
+has_extension()------: true</pre>
+      </td>
+    </tr>
+  </table>
+
+<p>We will go through the above code in detail to gain a better 
+understanding of what is going on.</p>
+
+<p dir="ltr">A common need is to compose a path from its constituent 
+directories. Class <code>path</code> uses <code>/</code> and <code>/=</code> operators to 
+append elements. That's a reminder 
+that these operations append the operating system's preferred directory 
+separator if needed. The preferred 
+directory separator is a slash on POSIX-like systems, and a backslash on 
+Windows-like systems.</p>
+
+<p dir="ltr">That's what this code does before displaying the resulting <code>
+path p</code> using the <code>class path</code> stream inserter: </p>
+
+
+<table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+  <tr>
+    <td>
+      <pre><!-- include file "../example/path_info.cpp" -->  path p;
+  for (; argc > 1; --argc, ++argv)
+    p /= argv[1];  // compose path p from the command line arguments
+
+  cout  <<  "\ncomposed path:\n";
+  cout  <<  "  operator<<()---------: " << p << "\n";
+  cout  <<  "  make_preferred()-----: " << p.make_preferred() << "\n";</pre>
+    </td>
+  </tr>
+</table>
+
+
+<p>One abstraction for thinking about a path is as a sequence of elements, where 
+the elements are directory and file names. To support this abstraction, class
+<code>path</code> provides STL-like  iterators and also <code>begin()</code> 
+and <code>end()</code> functions.</p>
+
+<p>Here is the code that produced the list of elements in the above output listing:</p>
+
+<table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+  <tr>
+    <td>
+    <pre>cout << "\nelements:\n";
+for (auto element : p)
+  cout << " " << element << '\n';</pre>
+    </td>
+  </tr>
+</table>
+
+<p>Let's look at class path observer functions:</p>
+
+
+<table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+  <tr>
+    <td>
+      <pre><!-- include file "../example/path_info.cpp" -->  cout  <<  "\nobservers, native format:" << endl;
+# ifdef BOOST_POSIX_API
+  cout  <<  "  native()-------------: " << p.native() << endl;
+  cout  <<  "  c_str()--------------: " << p.c_str() << endl;
+# else  // BOOST_WINDOWS_API
+  wcout << L"  native()-------------: " << p.native() << endl;
+  wcout << L"  c_str()--------------: " << p.c_str() << endl;
+# endif
+  cout  <<  "  string()-------------: " << p.string() << endl;
+  wcout << L"  wstring()------------: " << p.wstring() << endl;
+
+  cout  <<  "\nobservers, generic format:\n";
+  cout  <<  "  generic_string()-----: " << p.generic_string() << endl;
+  wcout << L"  generic_wstring()----: " << p.generic_wstring() << endl;</pre>
+    </td>
+  </tr>
+</table>
+
+
+<p>Native format observers should be used when interacting with the 
+operating system or with users; that's what they expect.</p>
+
+<p>Generic format observers should be used when the results need to be 
+portable and uniform regardless of the operating system.</p>
+
+<p><code>path</code> objects always hold pathnames in the native 
+format, but otherwise leave them unchanged from their source. The
+<a href="reference.html#preferred">preferred()</a> function will convert to the 
+preferred form, if the native format has several forms. Thus on Windows, it will 
+convert slashes to backslashes.</p>
+
+<p>Moving on to decomposition:</p>
+
+
+<table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+  <tr>
+    <td>
+      <pre><!-- include file "../example/path_info.cpp" -->  cout  <<  "\ndecomposition:\n";
+  cout  <<  "  root_name()----------: " << p.root_name() << '\n';
+  cout  <<  "  root_directory()-----: " << p.root_directory() << '\n';
+  cout  <<  "  root_path()----------: " << p.root_path() << '\n';
+  cout  <<  "  relative_path()------: " << p.relative_path() << '\n';
+  cout  <<  "  parent_path()--------: " << p.parent_path() << '\n';
+  cout  <<  "  filename()-----------: " << p.filename() << '\n';
+  cout  <<  "  stem()---------------: " << p.stem() << '\n';
+  cout  <<  "  extension()----------: " << p.extension() << '\n';</pre>
+    </td>
+  </tr>
+</table>
+
+
+<p> And, finally, query functions:</p>
+
+
+<table border="1" cellpadding="3" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF">
+  <tr>
+    <td>
+      <pre><!-- include file "../example/path_info.cpp" -->  cout  <<  "\nquery:\n";
+  cout  <<  "  empty()--------------: " << say_what(p.empty()) << '\n';
+  cout  <<  "  is_absolute()--------: " << say_what(p.is_absolute()) << '\n';
+  cout  <<  "  has_root_name()------: " << say_what(p.has_root_name()) << '\n';
+  cout  <<  "  has_root_directory()-: " << say_what(p.has_root_directory()) << '\n';
+  cout  <<  "  has_root_path()------: " << say_what(p.has_root_path()) << '\n';
+  cout  <<  "  has_relative_path()--: " << say_what(p.has_relative_path()) << '\n';
+  cout  <<  "  has_parent_path()----: " << say_what(p.has_parent_path()) << '\n';
+  cout  <<  "  has_filename()-------: " << say_what(p.has_filename()) << '\n';
+  cout  <<  "  has_stem()-----------: " << say_what(p.has_stem()) << '\n';
+  cout  <<  "  has_extension()------: " << say_what(p.has_extension()) << '\n';</pre>
+    </td>
+  </tr>
+</table>
+
+
+<p>These are pretty self-evident, but do note the difference in the 
+result of <code>is_absolute()</code> between Linux and Windows. Because there is 
+no root name (i.e. drive specifier or network name), a lone slash (or backslash) 
+is a relative path on Windows but an absolute path on POSIX-like operating 
+systems. </p>
+
+  <h2><a name="Error-reporting">Error reporting</a></h2>
+
+  <p>The Boost.Filesystem <code>file_size</code> function, like many of the 
+  operational functions, has two overloads:</p>
+
+  <blockquote>
+  <pre>uintmax_t <a name="file_size">file_size</a>(const path& p);
+uintmax_t <a name="file_size2">file_size</a>(const path& p, system::error_code& ec);</pre>
+</blockquote>
+<p>The only significant difference between the two is how they report errors.</p>
+<p>The 
+  first signature will throw exceptions to report errors. A <code>
+<a href="reference.html#Class-filesystem_error">filesystem_error</a></code> exception will be thrown 
+on an 
+  operational error. <code>filesystem_error</code> is derived from <code>std::runtime_error</code>. 
+It has a 
+  member function to obtain the <code>
+<a href="../../system/doc/reference.html#Class-error_code">error_code</a></code> reported by the source 
+  of the error. It also has member functions to obtain the path or paths that caused 
+  the error.</p>
+
+  <blockquote>
+
+  <p><b>Motivation for the second signature:</b> Throwing exceptions on errors was the entire error reporting story for the earliest versions of 
+  Boost.Filesystem, and indeed throwing exceptions on errors works very well for 
+  many applications. But user reports trickled in that some code became so 
+  littered with try and catch blocks as to be unreadable and unmaintainable. In 
+  some applications I/O errors aren't exceptional, and that's the use case for 
+  the second signature.</p>
+
+  </blockquote>
+
+  <p>Functions with a <code>system::error_code&</code> argument set that 
+  argument to report operational error status, and so do not throw exceptions when I/O 
+  related errors occur. For a full explanation, see
+  <a href="reference.html#Error-reporting">Error reporting</a> in the reference 
+  documentation. </p>
+
+<hr>
+<p>© Copyright Beman Dawes 2010, 2015</p>
+<p>Distributed under the Boost Software License, Version 1.0. See
+<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a></p>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->26 July 2015<!--webbot bot="Timestamp" endspan i-checksum="18812" --></p>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/v3.html b/vendor/pdalboost/libs/filesystem/doc/v3.html
new file mode 100644
index 0000000..062c56c
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/v3.html
@@ -0,0 +1,152 @@
+<html>
+
+<head>
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Filesystem V3 Intro</title>
+<link href="styles.css" rel="stylesheet">
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td width="277">
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="300" height="86" border="0"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem
+    Version 3<br>
+    Introduction</font></td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="index.htm">Home</a>   
+    <a href="tutorial.html">Tutorial</a>   
+    <a href="reference.html">Reference</a>   
+    <a href="faq.htm">FAQ</a>   
+    <a href="release_history.html">Releases</a>   
+    <a href="portability_guide.htm">Portability</a>   
+    <a href="v3.html">V3 Intro</a>   
+    <a href="v3_design.html">V3 Design</a>   
+    <a href="deprecated.html">Deprecated</a>   
+    <a href="issue_reporting.html">Bug Reports </a>  
+    </td>
+</table>
+
+<h1>Boost Filesystem Version 3</h1>
+
+<p>Version 3 is a major revision of the Boost Filesystem library. Important 
+changes include:</p>
+
+<ul>
+  <li>A single class <code>path</code> handles all aspects of 
+  internationalization, replacing the previous template and its <code>path</code> 
+  and <code>wpath</code> instantiations. Character types <code>char</code>,
+  <code>wchar_t</code>, <code>char16_t</code>, and <code>char32_t</code> are 
+  supported. This is a major simplification of the path abstraction, 
+  particularly for functions that take path arguments.<br>
+ </li>
+  <li>New <code>class path</code> members include:<br>
+ <ul>
+  <li><code><a href="reference.html#path-has_stem">has_stem</a>()</code></li>
+  <li><code><a href="reference.html#path-has_extension">has_extension</a>()</code></li>
+  <li><code><a href="reference.html#path-is_absolute">is_absolute</a>()</code>. This renames <code>is_complete()</code>, which 
+  is now deprecated.</li>
+  <li><code><a href="reference.html#path-is_relative">is_relative</a>()</code></li>
+  <li><code><a href="reference.html#path-make_preferred">make_preferred</a>()<br>
+ </code></li>
+</ul>
+
+  </li>
+  <li>New or improved operations functions include:<br>
+ <ul>
+    <li><code><a href="reference.html#absolute">absolute</a>()</code>. This replaces the operations function <code>
+  complete()</code>, which is now deprecated. Semantics are now provided for a 
+    Windows corner case where the <code>base</code> argument was not an absolute 
+    path. Previously this resulted in an exception being thrown.</li>
+    <li><code><a href="reference.html#create_symlink">create_symlink</a>()</code> now supported on both POSIX and Windows.</li>
+    <li><code><a href="reference.html#read_symlink">read_symlink</a>()</code> function added. Supported on both POSIX and 
+    Windows. Used to read the contents of a symlink itself.</li>
+    <li><code><a href="reference.html#resize_file">resize_file</a>()</code> function added. Supported on both POSIX and 
+    Windows. Used to shrink or grow a regular file.</li>
+    <li><code><a href="reference.html#unique_path">unique_path</a>()</code> function added. Supported on both POSIX and 
+    Windows. Used to generate a secure temporary pathname.<br>
+ </li>
+  </ul>
+  </li>
+  <li>Support for error reporting via <code>error_code</code> is now uniform 
+  throughout the operations functions.<br>
+ </li>
+  <li>Documentation has been reworked, including re-writes of major portions.<br>
+ </li>
+  <li>A new <a href="tutorial.html">Tutorial</a> provides a hopefully much 
+  gentler and more complete introduction for new users. Current users might want 
+  to review the <a href="tutorial.html">three sections related to class path</a>.</li>
+</ul>
+
+<h2>Deprecated names and other features</h2>
+
+<p>See the <a href="deprecated.html">Deprecated Features page</a> for transition 
+aids that allow much existing code to compile without change using Version 3.</p>
+
+<h2>Breaking changes</h2>
+
+<p>To ease the transition, Versions 2 and 3 will both be included in the next 
+several Boost releases. Version 2 will be the default version for one release 
+cycle, and then Version 3 will become the default version.</p>
+<h3>Class <code>path</code></h3>
+<ul>
+  <li>Class template <code>basic_path</code> and its specializations are 
+  replaced by a single <code>class path</code>. Thus any code, such as 
+  overloaded functions, that depends on <code>path</code> and <code>wpath</code> 
+  being two distinct types will fail to compile and must be restructured. 
+  Restructuring may be as simple as removing one of the overloads, but also 
+  might require more complex redesign.<br>
+ </li>
+  <li>Certain functions now return <code>path</code> objects rather than <code>
+  string or wstring</code> objects:<ul>
+    <li><code>root_name()</code></li>
+    <li><code>root_directory()</code></li>
+    <li><code>filename()</code></li>
+    <li><code>stem()</code></li>
+    <li><code>extension()</code></li>
+  </ul>
+  <p>Not all uses will fail; if the function is being called in a context that 
+  accepts a <code>path</code>, all is well. If the result is being used in a 
+  context requiring a <code>std::string</code> or <code>std::wstring</code>, 
+  then <code>.string()</code> or <code>.wstring()</code> respectively must be 
+  appended to the function call.<br>
+ </li>
+  <li> <code>path::iterator::value_type</code> and  <code>
+  path::const_iterator::value_type</code> is <code>path</code> rather than <code>
+  basic_string</code>.</li>
+</ul>
+<h3>Compiler support</h3>
+<ul>
+  <li>Compilers and standard libraries that do not fully support wide characters 
+  and wide character strings (<code>std::wstring</code>) are no longer 
+  supported.<br>
+ </li>
+  <li>Cygwin versions prior to 1.7 are no longer supported because they lack 
+  wide string support. Cygwin now compiles only for the Windows API and path 
+  syntax.<br>
+ </li>
+  <li>MinGW versions not supporting wide strings are no longer supported.<br>
+ </li>
+  <li>Microsoft VC++ 7.1 and earlier are no longer supported.</li>
+</ul>
+
+<hr>
+<p>© Copyright Beman Dawes, 2009</p>
+<p>Distributed under the Boost Software License, Version 1.0. See
+<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a></p>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->29 December 2014<!--webbot bot="Timestamp" endspan i-checksum="39176" --></p>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/doc/v3_design.html b/vendor/pdalboost/libs/filesystem/doc/v3_design.html
new file mode 100644
index 0000000..5f1326d
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/doc/v3_design.html
@@ -0,0 +1,199 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<title>Filesystem V3 Design</title>
+<link href="styles.css" rel="stylesheet">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111">
+  <tr>
+    <td>
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" border="0"
+ width="300" height="86"></a></td>
+    <td align="middle">
+    <font size="7">Filesystem Version 3<br>
+    Design</font></td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="index.htm">Home</a>   
+    <a href="tutorial.html">Tutorial</a>   
+    <a href="reference.html">Reference</a>   
+    <a href="faq.htm">FAQ</a>   
+    <a href="release_history.html">Releases</a>   
+    <a href="portability_guide.htm">Portability</a>   
+    <a href="v3.html">V3 Intro</a>   
+    <a href="v3_design.html">V3 Design</a>   
+    <a href="deprecated.html">Deprecated</a>   
+    <a href="issue_reporting.html">Bug Reports </a>  
+    </td>
+</table>
+
+<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" align="right">
+  <tr>
+    <td width="100%" bgcolor="#D7EEFF" align="center">
+      <i><b>Contents</b></i></td>
+  </tr>
+  <tr>
+    <td width="100%" bgcolor="#E8F5FF">
+    <a href="#Introduction">Introduction</a><br>
+    <a href="#Problem">Problem</a><br>
+    <a href="#Solution">Solution</a><br>
+    <a href="#Details">Details</a><br>
+    <a href="#Other-changes">Other changes</a><br>
+    <a href="#Acknowledgements">Acknowledgements</a></td>
+  </tr>
+  </table>
+
+<p><b>Caution:</b> This page documents thinking early in the V3 development 
+process, and is intended to serve historical purposes. It is not updated to 
+reflect the current state of the library.</p>
+
+<h2><a name="Introduction">Introduction</a></h2>
+
+<p>During the review of Boost.Filesystem.V2 (Internationalization), Peter Dimov 
+suggested that the<code> basic_path</code> class template was unwieldy, and that a single 
+path type that accommodated multiple character types and encodings would be more 
+flexible. Although I wasn't willing to stop development at that time to 
+explore how this idea might be implemented, or to break from the pattern for 
+Internationalization used the C++ standard library, I've often thought about 
+Peter's suggestion. With the advent of C++0x <code>char16_t</code> and <code>char32_t</code>
+character 
+types, the <code>basic_path</code> class template approach becomes even more unwieldy, so it 
+is time to revisit the problem in light of Peter's suggestion.</p>
+
+<h2><b><a name="Problem">Problem</a></b></h2>
+
+<p>With Filesystem.V2, a path argument to a user defined function that is to 
+accommodate multiple character types and encodings must be written as a 
+template. Do-the-right-thing overloads or template metaprogramming must be 
+employed to allow arguments to be written as string literals. Here's what it 
+looks like:</p>
+
+<blockquote>
+  <pre>template<class Path>
+void foo( const Path & p );</pre>
+  <pre>inline void foo( const path & p )
+{
+  return foo<path>( p );
+}
+inline void foo( const wpath & p )
+{
+  return foo<wpath>( p );
+}</pre>
+</blockquote>
+<p>That's really ugly for such a simple need, and there would be a combinatorial 
+explosion if the function took multiple Path arguments and each could be either 
+narrow or wide. It gets even worse if the C++0x <code>char16_t</code> and <code>
+char32_t</code> types are to be supported.</p>
+
+<h2><a name="Solution">Solution</a></h2>
+
+<p>Overview:</p>
+
+<ul>
+  <li>A single, non-template, <code>class path</code>.</li>
+  <li>Each member function is a template accommodating the various 
+  applicable character types, including user-defined character types.</li>
+  <li>Hold the path internally in a string of the type used by the operating 
+  system API; <code>std::string</code> for POSIX, <code>std::wstring</code> for Windows.</li>
+</ul>
+
+<p>The signatures presented in <a href="#Problem">Problem</a> collapse to 
+simply:</p>
+<blockquote>
+  <pre>void foo( const path & p );</pre>
+</blockquote>
+
+<p>That's a signification reduction in code complexity. Specification becomes 
+simpler, too. I believe it will be far easier to teach, and result in much more 
+flexible user code.</p>
+
+<p>Other benefits:</p>
+<ul>
+  <li>All the polymorphism still occurs at compile time.</li>
+  <li>Efficiency is increased, in that conversions of the encoding, if required, 
+  only occur once at the time of creation, not each time the path is used.</li>
+  <li>The size of the implementation code drops approximately in half and 
+  becomes much more readable.</li>
+</ul>
+  <p>Possible problems:</p>
+<ul>
+  <li>The combination of member function templates and implicit constructors can 
+  result in unclear error messages when the user makes simple commonplace coding 
+  errors. This should be much less of a problem with C++ concepts, but in the 
+  meantime work continues to restrict over aggressive templates via enable_if/disable_if.</li>
+</ul>
+  <h2><a name="Details">Details</a></h2>
+
+<table border="1" cellpadding="4" cellspacing="0" style="border-collapse: collapse"
+ bordercolor="#111111" width="100%">
+  <tr>
+    <td width="33%" colspan="3">
+    <p align="center"><b><i>Encoding </i></b><i><b>Conversions</b></i></td>
+  </tr>
+  <tr>
+    <td width="33%">
+    <p align="center"><i><b>Host system</b></i></td>
+    <td width="33%">
+    <p align="center"><i><b>char string path arguments</b></i></td>
+    <td width="34%">
+    <p align="center"><i><b>wide string path arguments</b></i></td>
+  </tr>
+  <tr>
+    <td width="33%">Systems with <code>char</code> as the native API path character type (i.e. 
+    POSIX-like systems)</td>
+    <td width="33%">No conversion.</td>
+    <td width="34%">Conversion occurs, performed by the current path locale's 
+    <code>codecvt</code> facet.</td>
+  </tr>
+  <tr>
+    <td width="33%">Systems with <code>wchar_t</code> as the native API path character type 
+    (i.e. Windows-like systems).</td>
+    <td width="33%">Conversion occurs, performed by the current path locale's 
+    <code>codecvt</code> facet.</td>
+    <td width="34%">No conversion.</td>
+  </tr>
+</table>
+
+<p>When a class path function argument type matches the the operating system's 
+API argument type for paths, no conversion is performed rather than conversion 
+to a specified encoding such as one of the Unicode encodings. This avoids 
+unintended consequences, etc.</p>
+
+<h2><a name="Other-changes">Other changes</a></h2>
+
+<p><b>Uniform hybrid error handling: </b>The hybrid error handling idiom has 
+been consistently applied to all applicable functions.</p>
+
+<h2><a name="Acknowledgements">Acknowledgements</a></h2>
+
+<p>Peter Dimov suggested the idea of a single path class that could cope with 
+multiple character types and encodings. Walter Landry contributed both the design
+and implementation of the copy_any, 
+copy_directory, copy_symlink, and read_symlink functions.</p>
+
+<hr>
+<p>Revised
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->29 December, 2014<!--webbot bot="Timestamp" endspan i-checksum="38652" --></p>
+
+<p>© Copyright Beman Dawes, 2008</p>
+<p> Use, modification, and distribution are subject to the Boost Software 
+License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a></p>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/example/Jamfile.v2 b/vendor/pdalboost/libs/filesystem/example/Jamfile.v2
new file mode 100644
index 0000000..df89e49
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/Jamfile.v2
@@ -0,0 +1,27 @@
+# Boost Filesystem Library Example Jamfile
+ 
+# (C) Copyright Vladimir Prus 2003
+
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+# Library home page: http://www.boost.org/libs/filesystem
+
+project
+    : requirements
+      <library>/boost/filesystem//pdalboost_filesystem
+      <library>/boost/system//pdalboost_system
+      <toolset>msvc:<asynch-exceptions>on
+      <link>static
+    ;
+    
+exe tut0 : tut0.cpp ;
+exe tut1 : tut1.cpp ;
+exe tut2 : tut2.cpp ;
+exe tut3 : tut3.cpp ;
+exe tut4 : tut4.cpp ;
+exe tut5 : tut5.cpp ;
+exe path_info : path_info.cpp ;
+exe file_status : file_status.cpp ;
+exe file_size : file_size.cpp ;
+exe directory_symlink_parent_resolution : directory_symlink_parent_resolution.cpp ;
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/example/directory_symlink_parent_resolution.cpp b/vendor/pdalboost/libs/filesystem/example/directory_symlink_parent_resolution.cpp
new file mode 100644
index 0000000..88feb17
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/directory_symlink_parent_resolution.cpp
@@ -0,0 +1,41 @@
+//  directory_symlink_parent_resolution.cpp  -------------------------------------------//
+
+//  Copyright Beman Dawes 2015
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/string_file.hpp>
+#include <boost/detail/lightweight_main.hpp>
+#include <iostream>
+#include <string>
+using std::cout;
+using std::endl;
+using namespace pdalboost::filesystem;
+
+int cpp_main(int argc, char* argv[])
+{
+# ifdef BOOST_WINDOWS_API
+  cout  << "BOOST_WINDOWS_API" << endl;
+# else
+  cout  << "BOOST_POSIX_API" << endl;
+# endif
+
+  path test_dir(current_path() / "dspr_demo");
+
+  remove_all(test_dir);
+  create_directories(test_dir / "a/c/d");
+  current_path(test_dir / "a");
+  create_directory_symlink("c/d", "b");
+  save_string_file("name.txt", "Windows");
+  save_string_file("c/name.txt", "POSIX");
+  current_path(test_dir);
+  std::string s;
+  load_string_file("a/b/../name.txt", s);
+  cout << s << endl;
+
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/example/error_demo.cpp b/vendor/pdalboost/libs/filesystem/example/error_demo.cpp
new file mode 100644
index 0000000..267ae2f
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/error_demo.cpp
@@ -0,0 +1,185 @@
+//  error_demo.cpp  --------------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//  The purpose of this program is to demonstrate how error reporting works.            //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+#include <boost/filesystem.hpp>
+#include <boost/system/system_error.hpp>
+#include <iostream>
+
+using std::cout;
+using pdalboost::filesystem::path;
+using pdalboost::filesystem::filesystem_error;
+using pdalboost::system::error_code;
+using pdalboost::system::system_error;
+namespace fs = pdalboost::filesystem;
+
+namespace
+{
+  void report_system_error(const system_error& ex)
+  {
+    cout << " threw system_error:\n"
+         << "    ex.code().value() is " << ex.code().value() << '\n'
+         << "    ex.code().category().name() is " << ex.code().category().name() << '\n'
+         << "    ex.what() is " << ex.what() << '\n'
+         ;
+  }
+
+  void report_filesystem_error(const system_error& ex)
+  {
+    cout << "  threw filesystem_error exception:\n"
+         << "    ex.code().value() is " << ex.code().value() << '\n'
+         << "    ex.code().category().name() is " << ex.code().category().name() << '\n'
+         << "    ex.what() is " << ex.what() << '\n'
+         ;
+  }
+
+  void report_status(fs::file_status s)
+  {
+    cout << "  file_status::type() is ";
+    switch (s.type())
+    {
+    case fs::status_error:
+      cout << "status_error\n"; break;
+    case fs::file_not_found:
+      cout << "file_not_found\n"; break;
+    case fs::regular_file:
+      cout << "regular_file\n"; break;
+    case fs::directory_file:
+      cout << "directory_file\n"; break;
+    case fs::symlink_file:
+      cout << "symlink_file\n"; break;
+    case fs::block_file:
+      cout << "block_file\n"; break;
+    case fs::character_file:
+      cout << "character_file\n"; break;
+    case fs::fifo_file:
+      cout << "fifo_file\n"; break;
+    case fs::socket_file:
+      cout << "socket_file\n"; break;
+    case fs::type_unknown:
+      cout << "type_unknown\n"; break;
+    default:
+      cout << "not a valid enumeration constant\n";
+    }
+  }
+
+  void report_error_code(const error_code& ec)
+  {
+    cout << "  ec:\n"
+         << "    value() is " << ec.value() << '\n'
+         << "    category().name() is " << ec.category().name() << '\n'
+         << "    message() is " <<  ec.message() << '\n'
+         ;
+  }
+
+  bool threw_exception;
+
+}
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    cout << "Usage: error_demo path\n";
+    return 1;
+  }
+
+  error_code ec;
+
+  ////  construct path - no error_code
+
+  //try { path p1(argv[1]); }
+  //catch (const system_error& ex)
+  //{
+  //  cout << "construct path without error_code";
+  //  report_system_error(ex);
+  //}
+
+  ////  construct path - with error_code
+
+  path p (argv[1]);
+
+  fs::file_status s;
+  bool            b (false);
+  fs::directory_iterator di;
+
+  //  get status - no error_code
+
+  cout << "\nstatus(\"" << p.string() << "\");\n";
+  threw_exception = false;
+
+  try { s = fs::status(p); }
+  catch (const system_error& ex)
+  {
+    report_filesystem_error(ex);
+    threw_exception = true;
+  }
+  if (!threw_exception)
+    cout << "  Did not throw exception\n";
+  report_status(s);
+
+  //  get status - with error_code
+
+  cout << "\nstatus(\"" << p.string() << "\", ec);\n";
+  s = fs::status(p, ec);
+  report_status(s);
+  report_error_code(ec);
+
+  //  query existence - no error_code
+
+  cout << "\nexists(\"" << p.string() << "\");\n";
+  threw_exception = false;
+
+  try { b = fs::exists(p); }
+  catch (const system_error& ex)
+  {
+    report_filesystem_error(ex);
+    threw_exception = true;
+  }
+  if (!threw_exception)
+  {
+    cout << "  Did not throw exception\n"
+         << "  Returns: " << (b ? "true" : "false") << '\n';
+  }
+
+  //  query existence - with error_code
+
+  //  directory_iterator - no error_code
+
+  cout << "\ndirectory_iterator(\"" << p.string() << "\");\n";
+  threw_exception = false;
+
+  try { di = fs::directory_iterator(p); }
+  catch (const system_error& ex)
+  {
+    report_filesystem_error(ex);
+    threw_exception = true;
+  }
+  if (!threw_exception)
+  {
+    cout << "  Did not throw exception\n"
+      << (di == fs::directory_iterator() ? "  Equal" : "  Not equal")
+      << " to the end iterator\n";
+  }
+
+  //  directory_iterator - with error_code
+
+  cout << "\ndirectory_iterator(\"" << p.string() << "\", ec);\n";
+  di = fs::directory_iterator(p, ec);
+  cout << (di == fs::directory_iterator() ? "  Equal" : "  Not equal")
+       << " to the end iterator\n";
+  report_error_code(ec);
+
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/example/file_size.cpp b/vendor/pdalboost/libs/filesystem/example/file_size.cpp
new file mode 100644
index 0000000..8c81046
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/file_size.cpp
@@ -0,0 +1,44 @@
+//  file_size program  -------------------------------------------------------//
+
+//  Copyright Beman Dawes, 2004
+
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/filesystem for documentation.
+
+#include <boost/filesystem/operations.hpp>
+#include <iostream>
+
+namespace fs = pdalboost::filesystem;
+
+int main( int argc, char* argv[] )
+{
+
+  if ( argc != 2 )
+  {
+    std::cout << "Usage: file_size path\n";
+    return 1;
+  }
+
+  std::cout << "sizeof(intmax_t) is " << sizeof(pdalboost::intmax_t) << '\n';
+
+  fs::path p( argv[1] );
+
+  if ( !fs::exists( p ) )
+  {
+    std::cout << "not found: " << argv[1] << std::endl;
+    return 1;
+  }
+
+  if ( !fs::is_regular( p ) )
+  {
+    std::cout << "not a regular file: " << argv[1] << std::endl;
+    return 1;
+  }
+ 
+  std::cout << "size of " << argv[1] << " is " << fs::file_size( p )
+    << std::endl;
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/example/file_status.cpp b/vendor/pdalboost/libs/filesystem/example/file_status.cpp
new file mode 100644
index 0000000..51b7140
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/file_status.cpp
@@ -0,0 +1,117 @@
+//  status.cpp  ------------------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2011
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/config.hpp>
+#include <boost/version.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+using std::cout; using std::endl;
+using namespace pdalboost::filesystem;
+
+namespace
+{
+  path p;
+  
+  void print_boost_macros()
+  {
+    std::cout << "Boost "
+              << BOOST_VERSION / 100000 << '.'
+              << BOOST_VERSION / 100 % 1000 << '.'
+              << BOOST_VERSION % 100 << ", "
+#           ifndef _WIN64
+              << BOOST_COMPILER << ", "
+#           else
+              << BOOST_COMPILER << " with _WIN64 defined, "
+#           endif
+              << BOOST_STDLIB << ", "
+              << BOOST_PLATFORM
+              << std::endl;
+  }
+
+  const char* file_type_tab[] = 
+    { "status_error", "file_not_found", "regular_file", "directory_file",
+      "symlink_file", "block_file", "character_file", "fifo_file", "socket_file",
+      "type_unknown"
+    };
+
+  const char* file_type_c_str(enum file_type t)
+  {
+    return file_type_tab[t];
+  }
+
+  void show_status(file_status s, pdalboost::system::error_code ec)
+  {
+    pdalboost::system::error_condition econd;
+
+    if (ec)
+    {
+      econd = ec.default_error_condition();
+      cout << "sets ec to indicate an error:\n"
+           << "   ec.value() is " << ec.value() << '\n'
+           << "   ec.message() is \"" << ec.message() << "\"\n"
+           << "   ec.default_error_condition().value() is " << econd.value() << '\n'
+           << "   ec.default_error_condition().message() is \"" << econd.message() << "\"\n";
+    }
+    else
+      cout << "clears ec.\n";
+
+    cout << "s.type() is " << s.type()
+         << ", which is defined as \"" << file_type_c_str(s.type()) << "\"\n";
+
+    cout << "exists(s) is " << (exists(s) ? "true" : "false") << "\n";
+    cout << "status_known(s) is " << (status_known(s) ? "true" : "false") << "\n";
+    cout << "is_regular_file(s) is " << (is_regular_file(s) ? "true" : "false") << "\n";
+    cout << "is_directory(s) is " << (is_directory(s) ? "true" : "false") << "\n";
+    cout << "is_other(s) is " << (is_other(s) ? "true" : "false") << "\n";
+    cout << "is_symlink(s) is " << (is_symlink(s) ? "true" : "false") << "\n";
+  }
+
+  void try_exists()
+  {
+    cout << "\nexists(" << p << ") ";
+    try
+    {
+      bool result = exists(p);
+      cout << "is " << (result ? "true" : "false") << "\n";
+    }
+    catch (const filesystem_error& ex)
+    {
+      cout << "throws a filesystem_error exception: " << ex.what() << "\n";
+    }
+  }
+
+}
+
+int cpp_main(int argc, char* argv[])
+{
+  print_boost_macros();
+
+  if (argc < 2)
+  {
+    std::cout << "Usage: file_status <path>\n";
+    p = argv[0];
+  }
+  else
+    p = argv[1];
+
+  pdalboost::system::error_code ec;
+  file_status s = status(p, ec);
+  cout << "\nfile_status s = status(" << p << ", ec) ";
+  show_status(s, ec);
+
+  s = symlink_status(p, ec);
+  cout << "\nfile_status s = symlink_status(" << p << ", ec) ";
+  show_status(s, ec);
+
+  try_exists();
+
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/example/mbcopy.cpp b/vendor/pdalboost/libs/filesystem/example/mbcopy.cpp
new file mode 100644
index 0000000..818a04e
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/mbcopy.cpp
@@ -0,0 +1,90 @@
+//  Boost.Filesystem mbcopy.cpp  ---------------------------------------------//
+
+//  Copyright Beman Dawes 2005
+
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  Copy the files in a directory, using mbpath to represent the new file names
+//  See http://../doc/path.htm#mbpath for more information
+
+//  See deprecated_test for tests of deprecated features
+#define BOOST_FILESYSTEM_NO_DEPRECATED
+
+#include <boost/filesystem/config.hpp>
+# ifdef BOOST_FILESYSTEM_NARROW_ONLY
+#   error This compiler or standard library does not support wide-character strings or paths
+# endif
+
+#include "mbpath.hpp"
+#include <iostream>
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/fstream.hpp>
+#include "../src/utf8_codecvt_facet.hpp"
+
+namespace fs = pdalboost::filesystem;
+
+namespace
+{
+  // we can't use pdalboost::filesystem::copy_file() because the argument types
+  // differ, so provide a not-very-smart replacement.
+
+  void copy_file( const fs::wpath & from, const user::mbpath & to )
+  {
+    fs::ifstream from_file( from, std::ios_base::in | std::ios_base::binary );
+    if ( !from_file ) { std::cout << "input open failed\n"; return; }
+
+    fs::ofstream to_file( to, std::ios_base::out | std::ios_base::binary );
+    if ( !to_file ) { std::cout << "output open failed\n"; return; }
+
+    char c;
+    while ( from_file.get(c) )
+    {
+      to_file.put(c);
+      if ( to_file.fail() ) { std::cout << "write error\n"; return; }
+    }
+
+    if ( !from_file.eof() ) { std::cout << "read error\n"; }
+  }
+}
+
+int main( int argc, char * argv[] )
+{
+  if ( argc != 2 )
+  {
+    std::cout << "Copy files in the current directory to a target directory\n"
+              << "Usage: mbcopy <target-dir>\n";
+    return 1;
+  }
+
+  // For encoding, use Boost UTF-8 codecvt
+  std::locale global_loc = std::locale();
+  std::locale loc( global_loc, new fs::detail::utf8_codecvt_facet );
+  user::mbpath_traits::imbue( loc );
+
+  std::string target_string( argv[1] );
+  user::mbpath target_dir( user::mbpath_traits::to_internal( target_string ) );
+
+  if ( !fs::is_directory( target_dir ) )
+  {
+    std::cout << "Error: " << argv[1] << " is not a directory\n";
+    return 1;
+  }
+
+  for ( fs::wdirectory_iterator it( L"." );
+    it != fs::wdirectory_iterator(); ++it )
+  {
+    if ( fs::is_regular_file(it->status()) )
+    {
+      copy_file( *it, target_dir / it->path().filename() );
+    }
+  }
+
+  return 0;
+}
+
+
+
+
+
diff --git a/vendor/pdalboost/libs/filesystem/example/mbpath.cpp b/vendor/pdalboost/libs/filesystem/example/mbpath.cpp
new file mode 100644
index 0000000..7ba2a09
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/mbpath.cpp
@@ -0,0 +1,80 @@
+//  Boost.Filesystem mbpath.cpp  ---------------------------------------------//
+
+//  (c) Copyright Beman Dawes 2005
+
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See Boost.Filesystem home page at http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem/config.hpp>
+# ifdef BOOST_FILESYSTEM_NARROW_ONLY
+#   error This compiler or standard library does not support wide-character strings or paths
+# endif
+
+#include "mbpath.hpp"
+#include <boost/system/system_error.hpp>
+#include <boost/scoped_array.hpp>
+
+namespace fs = pdalboost::filesystem;
+
+namespace
+{
+  // ISO C calls this "the locale-specific native environment":
+  std::locale loc("");
+
+  const std::codecvt<wchar_t, char, std::mbstate_t> *
+    cvt( &std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >
+           ( loc ) );
+}
+
+namespace user
+{
+  mbpath_traits::external_string_type
+  mbpath_traits::to_external( const mbpath & ph,
+    const internal_string_type & src )
+  {
+    std::size_t work_size( cvt->max_length() * (src.size()+1) );
+    pdalboost::scoped_array<char> work( new char[ work_size ] );
+    std::mbstate_t state;
+    const internal_string_type::value_type * from_next;
+    external_string_type::value_type * to_next;
+    if ( cvt->out( 
+      state, src.c_str(), src.c_str()+src.size(), from_next, work.get(),
+      work.get()+work_size, to_next ) != std::codecvt_base::ok )
+      pdalboost::throw_exception<fs::basic_filesystem_error<mbpath> >(
+        fs::basic_filesystem_error<mbpath>(
+          "user::mbpath::to_external conversion error",
+          ph, pdalboost::system::error_code( EINVAL, pdalboost::system::errno_ecat ) ) );
+    *to_next = '\0';
+    return external_string_type( work.get() );
+  }
+
+  mbpath_traits::internal_string_type 
+  mbpath_traits::to_internal( const external_string_type & src )
+  {
+      std::size_t work_size( src.size()+1 );
+      pdalboost::scoped_array<wchar_t> work( new wchar_t[ work_size ] );
+      std::mbstate_t state;
+      const external_string_type::value_type * from_next;
+      internal_string_type::value_type * to_next;
+      if ( cvt->in( 
+        state, src.c_str(), src.c_str()+src.size(), from_next, work.get(),
+        work.get()+work_size, to_next ) != std::codecvt_base::ok )
+        pdalboost::throw_exception<fs::basic_filesystem_error<mbpath> >(
+          fs::basic_filesystem_error<mbpath>(
+            "user::mbpath::to_internal conversion error",
+            pdalboost::system::error_code( EINVAL, pdalboost::system::errno_ecat ) ) );
+      *to_next = L'\0';
+      return internal_string_type( work.get() );
+  }
+
+  void mbpath_traits::imbue( const std::locale & new_loc )
+  {
+    loc = new_loc;
+    cvt = &std::use_facet
+      <std::codecvt<wchar_t, char, std::mbstate_t> >( loc );
+  }
+
+} // namespace user
diff --git a/vendor/pdalboost/libs/filesystem/example/mbpath.hpp b/vendor/pdalboost/libs/filesystem/example/mbpath.hpp
new file mode 100644
index 0000000..9656db1
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/mbpath.hpp
@@ -0,0 +1,44 @@
+//  Boost.Filesystem mbpath.hpp  ---------------------------------------------//
+
+//  Copyright Beman Dawes 2005
+
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  Encodes wide character paths as MBCS
+//  See http://../doc/path.htm#mbpath for more information
+
+#include <boost/filesystem/path.hpp>
+#include <cwchar>     // for std::mbstate_t
+#include <string>
+#include <locale>
+
+namespace user
+{
+  struct mbpath_traits;
+  
+  typedef pdalboost::filesystem::basic_path<std::wstring, mbpath_traits> mbpath;
+
+  struct mbpath_traits
+  {
+    typedef std::wstring internal_string_type;
+    typedef std::string external_string_type;
+
+    static external_string_type to_external( const mbpath & ph,
+      const internal_string_type & src );
+
+    static internal_string_type to_internal( const external_string_type & src );
+
+    static void imbue( const std::locale & loc );
+  };
+} // namespace user
+
+namespace pdalboost
+{
+  namespace filesystem
+  {
+    template<> struct is_basic_path<user::mbpath>
+      { static const bool value = true; };
+  }
+}
diff --git a/vendor/pdalboost/libs/filesystem/example/msvc/common.props b/vendor/pdalboost/libs/filesystem/example/msvc/common.props
new file mode 100644
index 0000000..527c3c8
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/msvc/common.props
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ImportGroup Label="PropertySheets" />
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup />
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\..\..\..</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>..\..\..\..\..\stage\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup />
+</Project>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/example/path_info.cpp b/vendor/pdalboost/libs/filesystem/example/path_info.cpp
new file mode 100644
index 0000000..9c0f594
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/path_info.cpp
@@ -0,0 +1,82 @@
+//  path_info.cpp  ---------------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/filesystem.hpp>
+using namespace std;
+using namespace pdalboost::filesystem;
+
+const char * say_what(bool b) { return b ? "true" : "false"; }
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    cout << "Usage: path_info path-element [path-element...]\n"
+            "Composes a path via operator/= from one or more path-element arguments\n"
+            "Example: path_info foo/bar baz\n"
+#            ifdef BOOST_POSIX_API
+            "         would report info about the composed path foo/bar/baz\n";
+#            else  // BOOST_WINDOWS_API
+            "         would report info about the composed path foo/bar\\baz\n";
+#            endif
+    return 1;
+  }
+
+  path p;
+  for (; argc > 1; --argc, ++argv)
+    p /= argv[1];  // compose path p from the command line arguments
+
+  cout  <<  "\ncomposed path:\n";
+  cout  <<  "  operator<<()---------: " << p << "\n";
+  cout  <<  "  make_preferred()-----: " << p.make_preferred() << "\n";
+
+  cout << "\nelements:\n";
+  for (auto element : p)
+    cout << "  " << element << '\n';
+
+  cout  <<  "\nobservers, native format:" << endl;
+# ifdef BOOST_POSIX_API
+  cout  <<  "  native()-------------: " << p.native() << endl;
+  cout  <<  "  c_str()--------------: " << p.c_str() << endl;
+# else  // BOOST_WINDOWS_API
+  wcout << L"  native()-------------: " << p.native() << endl;
+  wcout << L"  c_str()--------------: " << p.c_str() << endl;
+# endif
+  cout  <<  "  string()-------------: " << p.string() << endl;
+  wcout << L"  wstring()------------: " << p.wstring() << endl;
+
+  cout  <<  "\nobservers, generic format:\n";
+  cout  <<  "  generic_string()-----: " << p.generic_string() << endl;
+  wcout << L"  generic_wstring()----: " << p.generic_wstring() << endl;
+
+  cout  <<  "\ndecomposition:\n";
+  cout  <<  "  root_name()----------: " << p.root_name() << '\n';
+  cout  <<  "  root_directory()-----: " << p.root_directory() << '\n';
+  cout  <<  "  root_path()----------: " << p.root_path() << '\n';
+  cout  <<  "  relative_path()------: " << p.relative_path() << '\n';
+  cout  <<  "  parent_path()--------: " << p.parent_path() << '\n';
+  cout  <<  "  filename()-----------: " << p.filename() << '\n';
+  cout  <<  "  stem()---------------: " << p.stem() << '\n';
+  cout  <<  "  extension()----------: " << p.extension() << '\n';
+
+  cout  <<  "\nquery:\n";
+  cout  <<  "  empty()--------------: " << say_what(p.empty()) << '\n';
+  cout  <<  "  is_absolute()--------: " << say_what(p.is_absolute()) << '\n';
+  cout  <<  "  has_root_name()------: " << say_what(p.has_root_name()) << '\n';
+  cout  <<  "  has_root_directory()-: " << say_what(p.has_root_directory()) << '\n';
+  cout  <<  "  has_root_path()------: " << say_what(p.has_root_path()) << '\n';
+  cout  <<  "  has_relative_path()--: " << say_what(p.has_relative_path()) << '\n';
+  cout  <<  "  has_parent_path()----: " << say_what(p.has_parent_path()) << '\n';
+  cout  <<  "  has_filename()-------: " << say_what(p.has_filename()) << '\n';
+  cout  <<  "  has_stem()-----------: " << say_what(p.has_stem()) << '\n';
+  cout  <<  "  has_extension()------: " << say_what(p.has_extension()) << '\n';
+
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/example/simple_ls.cpp b/vendor/pdalboost/libs/filesystem/example/simple_ls.cpp
new file mode 100644
index 0000000..44a714a
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/simple_ls.cpp
@@ -0,0 +1,91 @@
+//  simple_ls program  -------------------------------------------------------//
+
+//  Copyright Jeff Garland and Beman Dawes, 2002
+
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/filesystem for documentation.
+
+#define BOOST_FILESYSTEM_VERSION 3
+
+//  As an example program, we don't want to use any deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED 
+#  define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+#  define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include "boost/filesystem/operations.hpp"
+#include "boost/filesystem/path.hpp"
+#include "boost/progress.hpp"
+#include <iostream>
+
+namespace fs = pdalboost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  fs::path p(fs::current_path());
+
+  if (argc > 1)
+    p = fs::system_complete(argv[1]);
+  else
+    std::cout << "\nusage:   simple_ls [path]" << std::endl;
+
+  unsigned long file_count = 0;
+  unsigned long dir_count = 0;
+  unsigned long other_count = 0;
+  unsigned long err_count = 0;
+
+  if (!fs::exists(p))
+  {
+    std::cout << "\nNot found: " << p << std::endl;
+    return 1;
+  }
+
+  if (fs::is_directory(p))
+  {
+    std::cout << "\nIn directory: " << p << "\n\n";
+    fs::directory_iterator end_iter;
+    for (fs::directory_iterator dir_itr(p);
+          dir_itr != end_iter;
+          ++dir_itr)
+    {
+      try
+      {
+        if (fs::is_directory(dir_itr->status()))
+        {
+          ++dir_count;
+          std::cout << dir_itr->path().filename() << " [directory]\n";
+        }
+        else if (fs::is_regular_file(dir_itr->status()))
+        {
+          ++file_count;
+          std::cout << dir_itr->path().filename() << "\n";
+        }
+        else
+        {
+          ++other_count;
+          std::cout << dir_itr->path().filename() << " [other]\n";
+        }
+
+      }
+      catch (const std::exception & ex)
+      {
+        ++err_count;
+        std::cout << dir_itr->path().filename() << " " << ex.what() << std::endl;
+      }
+    }
+    std::cout << "\n" << file_count << " files\n"
+              << dir_count << " directories\n"
+              << other_count << " others\n"
+              << err_count << " errors\n";
+  }
+  else // must be a file
+  {
+    std::cout << "\nFound: " << p << "\n";    
+  }
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/example/stems.cpp b/vendor/pdalboost/libs/filesystem/example/stems.cpp
new file mode 100644
index 0000000..467806a
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/stems.cpp
@@ -0,0 +1,31 @@
+//  filesystem example stems.cpp  ------------------------------------------------------//
+
+//  Copyright Beman Dawes 2011
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem.hpp>
+#include <iostream>
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    std::cout << "Usage: stems <path>\n";
+    return 1;
+  }
+
+  pdalboost::filesystem::path p(argv[1]), name(p.filename());
+
+  for(;;)
+  {
+    std::cout << "filename " << name  << " has stem " << name.stem()
+      << " and extension " << name.extension() << "\n";
+    if (name.stem().empty() || name.extension().empty())
+      return 0;
+    name = name.stem();
+  }
+}
diff --git a/vendor/pdalboost/libs/filesystem/example/tchar.cpp b/vendor/pdalboost/libs/filesystem/example/tchar.cpp
new file mode 100644
index 0000000..98f4921
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/tchar.cpp
@@ -0,0 +1,39 @@
+//  Example use of Microsoft TCHAR  ----------------------------------------------------//
+
+//  Copyright Beman Dawes 2008
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <string>
+#include <cassert>
+#include <windows.h>
+#include <winnt.h>
+
+namespace fs = pdalboost::filesystem;
+
+typedef std::basic_string<TCHAR> tstring;
+
+void func( const fs::path & p )
+{
+  assert( fs::exists( p ) );
+}
+
+int main()
+{
+  // get a path that is known to exist
+  fs::path cp = fs::current_path(); 
+
+  // demo: get tstring from the path
+  tstring cp_as_tstring = cp.string<tstring>();
+
+  // demo: pass tstring to filesystem function taking path
+  assert( fs::exists( cp_as_tstring ) );
+
+  // demo: pass tstring to user function taking path
+  func( cp_as_tstring );
+
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/example/test/Jamfile.v2 b/vendor/pdalboost/libs/filesystem/example/test/Jamfile.v2
new file mode 100644
index 0000000..a42a08b
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/test/Jamfile.v2
@@ -0,0 +1,31 @@
+# Boost Filesystem Library Tutorial Jamfile
+ 
+# (C) Copyright Beman Dawes 2010
+# (C) Copyright Vladimir Prus 2003
+
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+# Library home page: http://www.boost.org/libs/filesystem
+
+project
+    : requirements
+      <library>/boost/filesystem//pdalboost_filesystem
+      <library>/boost/system//pdalboost_system
+      <toolset>msvc:<asynch-exceptions>on
+    ;
+    
+exe tut1 : tut1.cpp ;
+exe tut2 : tut2.cpp ;
+exe tut3 : tut3.cpp ;
+exe tut4 : tut4.cpp ;
+exe tut5 : tut5.cpp ;
+exe path_info : path_info.cpp ;
+
+install tut1-copy : tut1 : <location>. ;
+install tut2-copy : tut2 : <location>. ;
+install tut3-copy : tut3 : <location>. ;
+install tut4-copy : tut4 : <location>. ;
+install tut5-copy : tut5 : <location>. ;
+install path_info-copy : path_info : <location>. ;
+  
diff --git a/vendor/pdalboost/libs/filesystem/example/test/build.bat b/vendor/pdalboost/libs/filesystem/example/test/build.bat
new file mode 100644
index 0000000..1921ca1
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/test/build.bat
@@ -0,0 +1,7 @@
+ at echo off
+rem Copyright Beman Dawes, 2010
+rem Distributed under the Boost Software License, Version 1.0.
+rem See www.boost.org/LICENSE_1_0.txt
+echo Compiling example programs...
+b2 %* >b2.log
+find "error" <b2.log
diff --git a/vendor/pdalboost/libs/filesystem/example/test/build.sh b/vendor/pdalboost/libs/filesystem/example/test/build.sh
new file mode 100755
index 0000000..19b1a78
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/test/build.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+# Copyright Beman Dawes, 2010
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+echo Compiling example programs...
+b2 $* >b2.log
+grep "error" <b2.log
diff --git a/vendor/pdalboost/libs/filesystem/example/test/setup.bat b/vendor/pdalboost/libs/filesystem/example/test/setup.bat
new file mode 100644
index 0000000..59822a5
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/test/setup.bat
@@ -0,0 +1,13 @@
+ at echo off
+rem Copyright Beman Dawes, 2010
+rem Distributed under the Boost Software License, Version 1.0.
+rem See www.boost.org/LICENSE_1_0.txt
+echo Copying example programs...
+copy /y ..\tut1.cpp >nul
+copy /y ..\tut2.cpp >nul
+copy /y ..\tut3.cpp >nul
+copy /y ..\tut4.cpp >nul
+copy /y ..\tut5.cpp >nul
+copy /y ..\path_info.cpp >nul
+del *.exe 2>nul
+del *.pdb 2>nul
diff --git a/vendor/pdalboost/libs/filesystem/example/test/setup.sh b/vendor/pdalboost/libs/filesystem/example/test/setup.sh
new file mode 100755
index 0000000..cb1ba68
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/test/setup.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+
+# Copyright Beman Dawes, 2010
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+echo Copying example programs...
+cp ../tut1.cpp .
+cp ../tut2.cpp .
+cp ../tut3.cpp .
+cp ../tut4.cpp .
+cp ../tut5.cpp .
+cp ../path_info.cpp .
+rm tut1 2>~/junk
+rm tut2 2>~/junk
+rm tut3 2>~/junk
+rm tut4 2>~/junk
+rm tut5 2>~/junk
+rm path_info 2>~/junk
+
diff --git a/vendor/pdalboost/libs/filesystem/example/tut0.cpp b/vendor/pdalboost/libs/filesystem/example/tut0.cpp
new file mode 100644
index 0000000..c2ac27e
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/tut0.cpp
@@ -0,0 +1,23 @@
+//  filesystem tut0.cpp  ---------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/filesystem.hpp>
+namespace fs = pdalboost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    std::cout << "Usage: tut0 path\n";
+    return 1;
+  }
+  std::cout << argv[1] << '\n';
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/example/tut1.cpp b/vendor/pdalboost/libs/filesystem/example/tut1.cpp
new file mode 100644
index 0000000..81307d0
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/tut1.cpp
@@ -0,0 +1,23 @@
+//  filesystem tut1.cpp  ---------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/filesystem.hpp>
+using namespace pdalboost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    std::cout << "Usage: tut1 path\n";
+    return 1;
+  }
+  std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/example/tut2.cpp b/vendor/pdalboost/libs/filesystem/example/tut2.cpp
new file mode 100644
index 0000000..4de0a86
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/tut2.cpp
@@ -0,0 +1,40 @@
+//  filesystem tut2.cpp  ---------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/filesystem.hpp>
+using namespace std;
+using namespace pdalboost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    cout << "Usage: tut2 path\n";
+    return 1;
+  }
+
+  path p(argv[1]);  // avoid repeated path construction below
+
+  if (exists(p))    // does path p actually exist?
+  {
+    if (is_regular_file(p))        // is path p a regular file?
+      cout << p << " size is " << file_size(p) << '\n';
+
+    else if (is_directory(p))      // is path p a directory?
+      cout << p << " is a directory\n";
+
+    else
+      cout << p << " exists, but is not a regular file or directory\n";
+  }
+  else
+    cout << p << " does not exist\n";
+
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/example/tut3.cpp b/vendor/pdalboost/libs/filesystem/example/tut3.cpp
new file mode 100644
index 0000000..5902c8c
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/tut3.cpp
@@ -0,0 +1,52 @@
+//  filesystem tut3.cpp  ---------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <boost/filesystem.hpp>
+using std::cout;
+using namespace pdalboost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    cout << "Usage: tut3 path\n";
+    return 1;
+  }
+
+  path p (argv[1]);
+
+  try
+  {
+    if (exists(p))
+    {
+      if (is_regular_file(p))
+        cout << p << " size is " << file_size(p) << '\n';
+
+      else if (is_directory(p))
+      {
+        cout << p << " is a directory containing:\n";
+
+        for (directory_entry& x : directory_iterator(p))
+          cout << "    " << x.path() << '\n'; 
+      }
+      else
+        cout << p << " exists, but is not a regular file or directory\n";
+    }
+    else
+      cout << p << " does not exist\n";
+  }
+
+  catch (const filesystem_error& ex)
+  {
+    cout << ex.what() << '\n';
+  }
+
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/example/tut4.cpp b/vendor/pdalboost/libs/filesystem/example/tut4.cpp
new file mode 100644
index 0000000..957939f
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/tut4.cpp
@@ -0,0 +1,61 @@
+//  filesystem tut4.cpp  ---------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <vector>
+#include <algorithm>
+#include <boost/filesystem.hpp>
+using std::cout;
+using namespace pdalboost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    cout << "Usage: tut4 path\n";
+    return 1;
+  }
+
+  path p (argv[1]);
+
+  try
+  {
+    if (exists(p))
+    {
+      if (is_regular_file(p))
+        cout << p << " size is " << file_size(p) << '\n';
+
+      else if (is_directory(p))
+      {
+        cout << p << " is a directory containing:\n";
+
+        std::vector<std::string> v;
+
+        for (auto&& x : directory_iterator(p))
+          v.push_back(x.path().filename().string()); 
+
+        std::sort(v.begin(), v.end());  
+
+        for (auto&& x : v)
+          cout << "    " << x << '\n';
+      }
+      else
+        cout << p << " exists, but is not a regular file or directory\n";
+    }
+    else
+      cout << p << " does not exist\n";
+  }
+
+  catch (const filesystem_error& ex)
+  {
+    cout << ex.what() << '\n';
+  }
+
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/example/tut5.cpp b/vendor/pdalboost/libs/filesystem/example/tut5.cpp
new file mode 100644
index 0000000..ae144cd
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/tut5.cpp
@@ -0,0 +1,52 @@
+//  filesystem tut5.cpp  ---------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2010
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem/fstream.hpp>
+#include <string>
+#include <list>
+namespace fs = pdalboost::filesystem;
+
+int main()
+{
+  // \u263A is "Unicode WHITE SMILING FACE = have a nice day!"
+  std::string narrow_string ("smile2");
+  std::wstring wide_string (L"smile2\u263A");
+  std::list<char> narrow_list;
+  narrow_list.push_back('s');
+  narrow_list.push_back('m');
+  narrow_list.push_back('i');
+  narrow_list.push_back('l');
+  narrow_list.push_back('e');
+  narrow_list.push_back('3');
+  std::list<wchar_t> wide_list;
+  wide_list.push_back(L's');
+  wide_list.push_back(L'm');
+  wide_list.push_back(L'i');
+  wide_list.push_back(L'l');
+  wide_list.push_back(L'e');
+  wide_list.push_back(L'3');
+  wide_list.push_back(L'\u263A');
+
+  { fs::ofstream f("smile"); }
+  { fs::ofstream f(L"smile\u263A"); }
+  { fs::ofstream f(narrow_string); }
+  { fs::ofstream f(wide_string); }
+  { fs::ofstream f(narrow_list); }
+  { fs::ofstream f(wide_list); }
+  narrow_list.pop_back();
+  narrow_list.push_back('4');
+  wide_list.pop_back();
+  wide_list.pop_back();
+  wide_list.push_back(L'4');
+  wide_list.push_back(L'\u263A');
+  { fs::ofstream f(fs::path(narrow_list.begin(), narrow_list.end())); }
+  { fs::ofstream f(fs::path(wide_list.begin(), wide_list.end())); }
+
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/example/tut6a.cpp b/vendor/pdalboost/libs/filesystem/example/tut6a.cpp
new file mode 100644
index 0000000..78acfd9
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/tut6a.cpp
@@ -0,0 +1,48 @@
+//  filesystem tut6a.cpp  --------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2010
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <exception>
+#include <boost/filesystem.hpp>
+using namespace pdalboost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    std::cout << "Usage: tut6a path\n";
+    return 1;
+  }
+
+  try
+  {
+    for (recursive_directory_iterator it (argv[1]);
+         it != recursive_directory_iterator();
+         ++it)
+    {
+      if (it.level() > 1)
+        it.pop();
+      else
+      {
+        for (int i = 0; i <= it.level(); ++i)
+          std::cout << "  ";
+
+        std::cout << it->path() << '\n';
+      }
+    }
+  }
+  
+  catch (const std::exception& ex)
+  {
+    std::cout << "************* exception *****************\n";
+    std::cout << ex.what() << '\n';
+  }
+
+  return 0;
+}  
diff --git a/vendor/pdalboost/libs/filesystem/example/tut6b.cpp b/vendor/pdalboost/libs/filesystem/example/tut6b.cpp
new file mode 100644
index 0000000..4e89c3c
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/tut6b.cpp
@@ -0,0 +1,50 @@
+//  filesystem tut6b.cpp  --------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2010
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <exception>
+#include <boost/filesystem.hpp>
+using namespace pdalboost::filesystem;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    std::cout << "Usage: tut6b path\n";
+    return 1;
+  }
+
+  try
+  {
+    for (recursive_directory_iterator it (argv[1]);
+         it != recursive_directory_iterator();
+        )
+    {
+      for (int i = 0; i <= it.level(); ++i)
+        std::cout << "  ";
+
+      std::cout << it->path() << '\n';
+
+      try { ++it; }
+      catch (const filesystem_error& ex)
+      {
+        std::cout << "************* filesystem_error *****************\n";
+        std::cout << ex.what() << '\n';
+      }
+    }
+  }
+  
+  catch (const std::exception& ex)
+  {
+    std::cout << "************* exception *****************\n";
+    std::cout << ex.what() << '\n';
+  }
+
+  return 0;
+}  
diff --git a/vendor/pdalboost/libs/filesystem/example/tut6c.cpp b/vendor/pdalboost/libs/filesystem/example/tut6c.cpp
new file mode 100644
index 0000000..2e71422
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/example/tut6c.cpp
@@ -0,0 +1,40 @@
+//  filesystem tut6c.cpp  --------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2010
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <iostream>
+#include <exception>
+#include <boost/filesystem.hpp>
+#include <boost/system/error_code.hpp>
+
+using namespace pdalboost::filesystem;
+using namespace pdalboost::system;
+
+int main(int argc, char* argv[])
+{
+  if (argc < 2)
+  {
+    std::cout << "Usage: tut6c path\n";
+    return 1;
+  }
+
+  error_code ec;
+  for (recursive_directory_iterator it (argv[1], ec);
+        it != recursive_directory_iterator();
+      )
+  {
+    for (int i = 0; i <= it.level(); ++i)
+      std::cout << "  ";
+
+    std::cout << it->path() << '\n';
+
+    it.increment(ec);
+  }
+
+  return 0;
+}  
diff --git a/vendor/pdalboost/libs/filesystem/index.html b/vendor/pdalboost/libs/filesystem/index.html
new file mode 100644
index 0000000..1803c23
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/index.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0; URL=doc/index.htm">
+</head>
+<body>
+Automatic redirection failed, please go to
+<a href="doc/index.htm">doc/index.htm</a>.
+<hr>
+<p>© Copyright Beman Dawes, 2003</p>
+<p> Distributed under the Boost Software License, Version 1.0.
+See http://www.boost.org/LICENSE_1_0.txt</p>
+</body>
+</html>
diff --git a/vendor/pdalboost/libs/filesystem/meta/libraries.json b/vendor/pdalboost/libs/filesystem/meta/libraries.json
new file mode 100644
index 0000000..d7f7b39
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/meta/libraries.json
@@ -0,0 +1,14 @@
+{
+    "key": "filesystem",
+    "name": "Filesystem",
+    "authors": [
+        "Beman Dawes"
+    ],
+    "description": "The Boost Filesystem Library provides portable facilities to query and manipulate paths, files, and directories.",
+    "category": [
+        "System"
+    ],
+    "maintainers": [
+        "Beman Dawes <bdawes -at- acm.org>"
+    ]
+}
diff --git a/vendor/pdalboost/libs/filesystem/src/codecvt_error_category.cpp b/vendor/pdalboost/libs/filesystem/src/codecvt_error_category.cpp
new file mode 100644
index 0000000..ecf40d8
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/src/codecvt_error_category.cpp
@@ -0,0 +1,84 @@
+//  codecvt_error_category implementation file  ----------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt)
+
+//  Library home page at http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+#include <boost/config/warning_disable.hpp>
+
+// define BOOST_FILESYSTEM_SOURCE so that <boost/filesystem/config.hpp> knows
+// the library is being built (possibly exporting rather than importing code)
+#define BOOST_FILESYSTEM_SOURCE
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+#  define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/path_traits.hpp>
+#include <boost/system/error_code.hpp>
+#include <locale>
+#include <vector>
+#include <cstdlib>
+#include <cassert>
+
+//--------------------------------------------------------------------------------------//
+
+namespace
+{
+  class codecvt_error_cat : public pdalboost::system::error_category
+  {
+  public:
+    codecvt_error_cat(){}
+    const char*   name() const BOOST_SYSTEM_NOEXCEPT;
+    std::string    message(int ev) const;
+  };
+
+  const char* codecvt_error_cat::name() const BOOST_SYSTEM_NOEXCEPT
+  {
+    return "codecvt";
+  }
+
+  std::string codecvt_error_cat::message(int ev) const
+  {
+    std::string str;
+    switch (ev)
+    {
+    case std::codecvt_base::ok:
+      str = "ok";
+      break;
+    case std::codecvt_base::partial:
+      str = "partial";
+      break;
+    case std::codecvt_base::error:
+      str = "error";
+      break;
+    case std::codecvt_base::noconv:
+      str = "noconv";
+      break;
+    default:
+      str = "unknown error";
+    }
+    return str;
+  }
+
+} // unnamed namespace
+
+namespace pdalboost
+{
+  namespace filesystem
+  {
+
+    BOOST_FILESYSTEM_DECL const pdalboost::system::error_category& codecvt_error_category()
+    {
+      static const codecvt_error_cat  codecvt_error_cat_const;
+      return codecvt_error_cat_const;
+    }
+
+  } // namespace filesystem
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/filesystem/src/operations.cpp b/vendor/pdalboost/libs/filesystem/src/operations.cpp
new file mode 100644
index 0000000..87feec0
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/src/operations.cpp
@@ -0,0 +1,2341 @@
+//  operations.cpp  --------------------------------------------------------------------//
+
+//  Copyright 2002-2009, 2014 Beman Dawes
+//  Copyright 2001 Dietmar Kuehl
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  See library home page at http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------// 
+
+//  define 64-bit offset macros BEFORE including boost/config.hpp (see ticket #5355) 
+#if !(defined(__HP_aCC) && defined(_ILP32) && !defined(_STATVFS_ACPP_PROBLEMS_FIXED))
+#define _FILE_OFFSET_BITS 64 // at worst, these defines may have no effect,
+#endif
+#if !defined(__PGI)
+#define __USE_FILE_OFFSET64 // but that is harmless on Windows and on POSIX
+      // 64-bit systems or on 32-bit systems which don't have files larger 
+      // than can be represented by a traditional POSIX/UNIX off_t type. 
+      // OTOH, defining them should kick in 64-bit off_t's (and thus 
+      // st_size)on 32-bit systems that provide the Large File
+      // Support (LFS)interface, such as Linux, Solaris, and IRIX.
+      // The defines are given before any headers are included to
+      // ensure that they are available to all included headers.
+      // That is required at least on Solaris, and possibly on other
+      // systems as well.
+#else
+#define _FILE_OFFSET_BITS 64
+#endif
+
+// define BOOST_FILESYSTEM_SOURCE so that <boost/filesystem/config.hpp> knows
+// the library is being built (possibly exporting rather than importing code)
+#define BOOST_FILESYSTEM_SOURCE 
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# define _POSIX_PTHREAD_SEMANTICS  // Sun readdir_r()needs this
+#endif
+
+#include <boost/filesystem/operations.hpp>
+#include <boost/scoped_array.hpp>
+#include <boost/detail/workaround.hpp>
+#include <vector> 
+#include <cstdlib>     // for malloc, free
+#include <cstring>
+#include <cstdio>      // for remove, rename
+#if defined(__QNXNTO__)  // see ticket #5355 
+# include <stdio.h>
+#endif
+#include <cerrno>
+
+#ifdef BOOST_FILEYSTEM_INCLUDE_IOSTREAM
+# include <iostream>
+#endif
+
+namespace fs = pdalboost::filesystem;
+using pdalboost::filesystem::path;
+using pdalboost::filesystem::filesystem_error;
+using pdalboost::filesystem::perms;
+using pdalboost::system::error_code;
+using pdalboost::system::error_category;
+using pdalboost::system::system_category;
+using std::string;
+using std::wstring;
+
+# ifdef BOOST_POSIX_API
+
+#   include <sys/types.h>
+#   include <sys/stat.h>
+#   if !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__ANDROID__) \
+ && !defined(__VXWORKS__)
+#     include <sys/statvfs.h>
+#     define BOOST_STATVFS statvfs
+#     define BOOST_STATVFS_F_FRSIZE vfs.f_frsize
+#   else
+#     ifdef __OpenBSD__
+#       include <sys/param.h>
+#     elif defined(__ANDROID__)
+#       include <sys/vfs.h>
+#     endif
+#     if !defined(__VXWORKS__)
+#       include <sys/mount.h>
+#     endif
+#     define BOOST_STATVFS statfs
+#     define BOOST_STATVFS_F_FRSIZE static_cast<pdalboost::uintmax_t>(vfs.f_bsize)
+#   endif
+#   include <dirent.h>
+#   include <unistd.h>
+#   include <fcntl.h>
+#   include <utime.h>
+#   include "limits.h"
+
+# else // BOOST_WINDOW_API
+
+#   if (defined(__MINGW32__) || defined(__CYGWIN__)) && !defined(WINVER)
+      // Versions of MinGW or Cygwin that support Filesystem V3 support at least WINVER 0x501.
+      // See MinGW's windef.h
+#     define WINVER 0x501
+#   endif
+#   include <io.h>
+#   include <windows.h>
+#   include <winnt.h>
+#   if !defined(_WIN32_WINNT)
+#     define  _WIN32_WINNT   0x0500
+#   endif
+#   if defined(__BORLANDC__) || defined(__MWERKS__)
+#     if defined(__BORLANDC__)
+        using std::time_t;
+#     endif
+#     include <utime.h>
+#   else
+#     include <sys/utime.h>
+#   endif
+
+//  REPARSE_DATA_BUFFER related definitions are found in ntifs.h, which is part of the 
+//  Windows Device Driver Kit. Since that's inconvenient, the definitions are provided
+//  here. See http://msdn.microsoft.com/en-us/library/ms791514.aspx
+
+#if !defined(REPARSE_DATA_BUFFER_HEADER_SIZE)  // mingw winnt.h does provide the defs
+
+#define SYMLINK_FLAG_RELATIVE 1
+
+typedef struct _REPARSE_DATA_BUFFER {
+  ULONG  ReparseTag;
+  USHORT  ReparseDataLength;
+  USHORT  Reserved;
+  union {
+    struct {
+      USHORT  SubstituteNameOffset;
+      USHORT  SubstituteNameLength;
+      USHORT  PrintNameOffset;
+      USHORT  PrintNameLength;
+      ULONG  Flags;
+      WCHAR  PathBuffer[1];
+  /*  Example of distinction between substitute and print names:
+        mklink /d ldrive c:\
+        SubstituteName: c:\\??\
+        PrintName: c:\
+  */
+     } SymbolicLinkReparseBuffer;
+    struct {
+      USHORT  SubstituteNameOffset;
+      USHORT  SubstituteNameLength;
+      USHORT  PrintNameOffset;
+      USHORT  PrintNameLength;
+      WCHAR  PathBuffer[1];
+      } MountPointReparseBuffer;
+    struct {
+      UCHAR  DataBuffer[1];
+    } GenericReparseBuffer;
+  };
+} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
+
+#define REPARSE_DATA_BUFFER_HEADER_SIZE \
+  FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
+
+#endif
+
+#ifndef MAXIMUM_REPARSE_DATA_BUFFER_SIZE
+#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE  ( 16 * 1024 )
+#endif
+
+# ifndef FSCTL_GET_REPARSE_POINT
+#   define FSCTL_GET_REPARSE_POINT 0x900a8
+# endif
+
+# ifndef IO_REPARSE_TAG_SYMLINK
+#   define IO_REPARSE_TAG_SYMLINK (0xA000000CL)       
+# endif
+
+inline std::wstring wgetenv(const wchar_t* name)
+{
+  // use vector since for C++03 basic_string is not required to be contiguous
+  std::vector<wchar_t> buf(::GetEnvironmentVariableW(name, NULL, 0));
+
+  // C++03 vector does not have data() so use &buf[0]
+  return (buf.empty()
+    || ::GetEnvironmentVariableW(name, &buf[0], static_cast<DWORD>(buf.size())) == 0)
+    ? std::wstring() : std::wstring(&buf[0]);
+}
+
+# endif  // BOOST_WINDOWS_API
+
+//  BOOST_FILESYSTEM_STATUS_CACHE enables file_status cache in
+//  dir_itr_increment. The config tests are placed here because some of the
+//  macros being tested come from dirent.h.
+//
+// TODO: find out what macros indicate dirent::d_type present in more libraries
+# if defined(BOOST_WINDOWS_API)\
+  || defined(_DIRENT_HAVE_D_TYPE)// defined by GNU C library if d_type present
+#   define BOOST_FILESYSTEM_STATUS_CACHE
+# endif
+
+//  POSIX/Windows macros  ----------------------------------------------------//
+
+//  Portions of the POSIX and Windows API's are very similar, except for name,
+//  order of arguments, and meaning of zero/non-zero returns. The macros below
+//  abstract away those differences. They follow Windows naming and order of
+//  arguments, and return true to indicate no error occurred. [POSIX naming,
+//  order of arguments, and meaning of return were followed initially, but
+//  found to be less clear and cause more coding errors.]
+
+# if defined(BOOST_POSIX_API)
+
+typedef int err_t;
+
+//  POSIX uses a 0 return to indicate success
+#   define BOOST_ERRNO    errno 
+#   define BOOST_SET_CURRENT_DIRECTORY(P)(::chdir(P)== 0)
+#   define BOOST_CREATE_DIRECTORY(P)(::mkdir(P, S_IRWXU|S_IRWXG|S_IRWXO)== 0)
+#   define BOOST_CREATE_HARD_LINK(F,T)(::link(T, F)== 0)
+#   define BOOST_CREATE_SYMBOLIC_LINK(F,T,Flag)(::symlink(T, F)== 0)
+#   define BOOST_REMOVE_DIRECTORY(P)(::rmdir(P)== 0)
+#   define BOOST_DELETE_FILE(P)(::unlink(P)== 0)
+#   define BOOST_COPY_DIRECTORY(F,T)(!(::stat(from.c_str(), &from_stat)!= 0\
+         || ::mkdir(to.c_str(),from_stat.st_mode)!= 0))
+#   define BOOST_COPY_FILE(F,T,FailIfExistsBool)copy_file_api(F, T, FailIfExistsBool)
+#   define BOOST_MOVE_FILE(OLD,NEW)(::rename(OLD, NEW)== 0)
+#   define BOOST_RESIZE_FILE(P,SZ)(::truncate(P, SZ)== 0)
+
+#   define BOOST_ERROR_NOT_SUPPORTED ENOSYS
+#   define BOOST_ERROR_ALREADY_EXISTS EEXIST
+
+# else  // BOOST_WINDOWS_API
+
+typedef DWORD err_t;
+
+//  Windows uses a non-0 return to indicate success
+#   define BOOST_ERRNO    ::GetLastError()
+#   define BOOST_SET_CURRENT_DIRECTORY(P)(::SetCurrentDirectoryW(P)!= 0)
+#   define BOOST_CREATE_DIRECTORY(P)(::CreateDirectoryW(P, 0)!= 0)
+#   define BOOST_CREATE_HARD_LINK(F,T)(create_hard_link_api(F, T, 0)!= 0)
+#   define BOOST_CREATE_SYMBOLIC_LINK(F,T,Flag)(create_symbolic_link_api(F, T, Flag)!= 0)
+#   define BOOST_REMOVE_DIRECTORY(P)(::RemoveDirectoryW(P)!= 0)
+#   define BOOST_DELETE_FILE(P)(::DeleteFileW(P)!= 0)
+#   define BOOST_COPY_DIRECTORY(F,T)(::CreateDirectoryExW(F, T, 0)!= 0)
+#   define BOOST_COPY_FILE(F,T,FailIfExistsBool)(::CopyFileW(F, T, FailIfExistsBool)!= 0)
+#   define BOOST_MOVE_FILE(OLD,NEW)(::MoveFileExW(OLD, NEW, MOVEFILE_REPLACE_EXISTING|MOVEFILE_COPY_ALLOWED)!= 0)
+#   define BOOST_RESIZE_FILE(P,SZ)(resize_file_api(P, SZ)!= 0)
+#   define BOOST_READ_SYMLINK(P,T)
+
+#   define BOOST_ERROR_ALREADY_EXISTS ERROR_ALREADY_EXISTS
+#   define BOOST_ERROR_NOT_SUPPORTED ERROR_NOT_SUPPORTED
+
+# endif
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                        helpers (all operating systems)                               //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+namespace
+{
+
+  fs::file_type query_file_type(const path& p, error_code* ec);
+
+  pdalboost::filesystem::directory_iterator end_dir_itr;
+
+  //  error handling helpers  ----------------------------------------------------------//
+
+  bool error(err_t error_num, error_code* ec, const char* message);
+  bool error(err_t error_num, const path& p, error_code* ec, const char* message);
+  bool error(err_t error_num, const path& p1, const path& p2, error_code* ec,
+    const char* message);
+
+  const error_code ok;
+
+  //  error_num is value of errno on POSIX, error code (from ::GetLastError()) on Windows.
+  //  Interface changed 30 Jan 15 to have caller supply error_num as ::SetLastError()
+  //  values were apparently getting cleared before they could be retrieved by error().
+
+  bool error(err_t error_num, error_code* ec, const char* message)
+  {
+    if (!error_num)
+    {
+      if (ec != 0) ec->clear();
+    }
+    else  
+    { //  error
+      if (ec == 0)
+        BOOST_FILESYSTEM_THROW(filesystem_error(message,
+          error_code(error_num, system_category())));
+      else
+        ec->assign(error_num, system_category());
+    }
+    return error_num != 0;
+  }
+
+  bool error(err_t error_num, const path& p, error_code* ec, const char* message)
+  {
+    if (!error_num)
+    {
+      if (ec != 0) ec->clear();
+    }
+    else  
+    { //  error
+      if (ec == 0)
+        BOOST_FILESYSTEM_THROW(filesystem_error(message,
+          p, error_code(error_num, system_category())));
+      else
+        ec->assign(error_num, system_category());
+    }
+    return error_num != 0;
+  }
+
+  bool error(err_t error_num, const path& p1, const path& p2, error_code* ec,
+    const char* message)
+  {
+    if (!error_num)
+    {
+      if (ec != 0) ec->clear();
+    }
+    else  
+    { //  error
+      if (ec == 0)
+        BOOST_FILESYSTEM_THROW(filesystem_error(message,
+          p1, p2, error_code(error_num, system_category())));
+      else
+        ec->assign(error_num, system_category());
+    }
+    return error_num != 0;
+  }
+
+  //  general helpers  -----------------------------------------------------------------//
+
+  bool is_empty_directory(const path& p)
+  {
+    return fs::directory_iterator(p)== end_dir_itr;
+  }
+
+  bool not_found_error(int errval); // forward declaration
+
+  // only called if directory exists
+  bool remove_directory(const path& p) // true if succeeds or not found
+  { 
+    return BOOST_REMOVE_DIRECTORY(p.c_str())
+      || not_found_error(BOOST_ERRNO);  // mitigate possible file system race. See #11166
+  }
+  
+  // only called if file exists
+  bool remove_file(const path& p) // true if succeeds or not found
+  {
+    return BOOST_DELETE_FILE(p.c_str())
+      || not_found_error(BOOST_ERRNO);  // mitigate possible file system race. See #11166
+  }
+  
+  // called by remove and remove_all_aux
+  bool remove_file_or_directory(const path& p, fs::file_type type, error_code* ec)
+    // return true if file removed, false if not removed
+  {
+    if (type == fs::file_not_found)
+    {
+      if (ec != 0) ec->clear();
+      return false;
+    }
+
+    if (type == fs::directory_file
+#     ifdef BOOST_WINDOWS_API
+        || type == fs::_detail_directory_symlink
+#     endif
+      )
+    {
+      if (error(!remove_directory(p) ? BOOST_ERRNO : 0, p, ec,
+        "pdalboost::filesystem::remove"))
+          return false;
+    }
+    else
+    {
+      if (error(!remove_file(p) ? BOOST_ERRNO : 0, p, ec,
+        "pdalboost::filesystem::remove"))
+          return false;
+    }
+    return true;
+  }
+
+  pdalboost::uintmax_t remove_all_aux(const path& p, fs::file_type type,
+    error_code* ec)
+  {
+    pdalboost::uintmax_t count = 1;
+
+    if (type == fs::directory_file)  // but not a directory symlink
+    {
+      for (fs::directory_iterator itr(p);
+            itr != end_dir_itr; ++itr)
+      {
+        fs::file_type tmp_type = query_file_type(itr->path(), ec);
+        if (ec != 0 && *ec)
+          return count;
+        count += remove_all_aux(itr->path(), tmp_type, ec);
+      }
+    }
+    remove_file_or_directory(p, type, ec);
+    return count;
+  }
+
+#ifdef BOOST_POSIX_API
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                            POSIX-specific helpers                                    //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+  const char dot = '.';
+
+  bool not_found_error(int errval)
+  {
+    return errno == ENOENT || errno == ENOTDIR;
+  }
+
+  bool // true if ok
+  copy_file_api(const std::string& from_p,
+    const std::string& to_p, bool fail_if_exists)
+  {
+    const std::size_t buf_sz = 32768;
+    pdalboost::scoped_array<char> buf(new char [buf_sz]);
+    int infile=-1, outfile=-1;  // -1 means not open
+
+    // bug fixed: code previously did a stat()on the from_file first, but that
+    // introduced a gratuitous race condition; the stat()is now done after the open()
+
+    if ((infile = ::open(from_p.c_str(), O_RDONLY))< 0)
+      { return false; }
+
+    struct stat from_stat;
+    if (::stat(from_p.c_str(), &from_stat)!= 0)
+    { 
+      ::close(infile);
+      return false;
+    }
+
+    int oflag = O_CREAT | O_WRONLY | O_TRUNC;
+    if (fail_if_exists)
+      oflag |= O_EXCL;
+    if ((outfile = ::open(to_p.c_str(), oflag, from_stat.st_mode))< 0)
+    {
+      int open_errno = errno;
+      BOOST_ASSERT(infile >= 0);
+      ::close(infile);
+      errno = open_errno;
+      return false;
+    }
+
+    ssize_t sz, sz_read=1, sz_write;
+    while (sz_read > 0
+      && (sz_read = ::read(infile, buf.get(), buf_sz)) > 0)
+    {
+      // Allow for partial writes - see Advanced Unix Programming (2nd Ed.),
+      // Marc Rochkind, Addison-Wesley, 2004, page 94
+      sz_write = 0;
+      do
+      {
+        BOOST_ASSERT(sz_read - sz_write > 0);  // #1
+          // ticket 4438 claimed possible infinite loop if write returns 0. My analysis
+          // is that POSIX specifies 0 return only if 3rd arg is 0, and that will never
+          // happen due to loop entry and coninuation conditions. BOOST_ASSERT #1 above
+          // and #2 below added to verify that analysis.
+        if ((sz = ::write(outfile, buf.get() + sz_write,
+          sz_read - sz_write)) < 0)
+        { 
+          sz_read = sz; // cause read loop termination
+          break;        //  and error reported after closes
+        }
+        BOOST_ASSERT(sz > 0);                  // #2
+        sz_write += sz;
+      } while (sz_write < sz_read);
+    }
+
+    if (::close(infile)< 0)
+      sz_read = -1;
+    if (::close(outfile)< 0)
+      sz_read = -1;
+
+    return sz_read >= 0;
+  }
+
+  inline fs::file_type query_file_type(const path& p, error_code* ec)
+  {
+    return fs::detail::symlink_status(p, ec).type();
+  }
+
+# else
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                            Windows-specific helpers                                  //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+  const std::size_t buf_size=128;
+
+  const wchar_t dot = L'.';
+
+  bool not_found_error(int errval)
+  {
+    return errval == ERROR_FILE_NOT_FOUND
+      || errval == ERROR_PATH_NOT_FOUND
+      || errval == ERROR_INVALID_NAME  // "tools/jam/src/:sys:stat.h", "//foo"
+      || errval == ERROR_INVALID_DRIVE  // USB card reader with no card inserted
+      || errval == ERROR_NOT_READY  // CD/DVD drive with no disc inserted
+      || errval == ERROR_INVALID_PARAMETER  // ":sys:stat.h"
+      || errval == ERROR_BAD_PATHNAME  // "//nosuch" on Win64
+      || errval == ERROR_BAD_NETPATH;  // "//nosuch" on Win32
+  }
+
+// some distributions of mingw as early as GLIBCXX__ 20110325 have _stricmp, but the
+// offical 4.6.2 release with __GLIBCXX__ 20111026  doesn't. Play it safe for now, and
+// only use _stricmp if _MSC_VER is defined
+#if defined(_MSC_VER) // || (defined(__GLIBCXX__) && __GLIBCXX__ >= 20110325)
+#  define BOOST_FILESYSTEM_STRICMP _stricmp
+#else
+#  define BOOST_FILESYSTEM_STRICMP strcmp
+#endif
+
+  perms make_permissions(const path& p, DWORD attr)
+  {
+    perms prms = fs::owner_read | fs::group_read | fs::others_read;
+    if  ((attr & FILE_ATTRIBUTE_READONLY) == 0)
+      prms |= fs::owner_write | fs::group_write | fs::others_write;
+    if (BOOST_FILESYSTEM_STRICMP(p.extension().string().c_str(), ".exe") == 0
+      || BOOST_FILESYSTEM_STRICMP(p.extension().string().c_str(), ".com") == 0
+      || BOOST_FILESYSTEM_STRICMP(p.extension().string().c_str(), ".bat") == 0
+      || BOOST_FILESYSTEM_STRICMP(p.extension().string().c_str(), ".cmd") == 0)
+      prms |= fs::owner_exe | fs::group_exe | fs::others_exe;
+    return prms;
+  }
+
+  // these constants come from inspecting some Microsoft sample code
+  std::time_t to_time_t(const FILETIME & ft)
+  {
+    __int64 t = (static_cast<__int64>(ft.dwHighDateTime)<< 32)
+      + ft.dwLowDateTime;
+#   if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 // > VC++ 7.0
+    t -= 116444736000000000LL;
+#   else
+    t -= 116444736000000000;
+#   endif
+    t /= 10000000;
+    return static_cast<std::time_t>(t);
+  }
+
+  void to_FILETIME(std::time_t t, FILETIME & ft)
+  {
+    __int64 temp = t;
+    temp *= 10000000;
+#   if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 // > VC++ 7.0
+    temp += 116444736000000000LL;
+#   else
+    temp += 116444736000000000;
+#   endif
+    ft.dwLowDateTime = static_cast<DWORD>(temp);
+    ft.dwHighDateTime = static_cast<DWORD>(temp >> 32);
+  }
+
+  // Thanks to Jeremy Maitin-Shepard for much help and for permission to
+  // base the equivalent()implementation on portions of his 
+  // file-equivalence-win32.cpp experimental code.
+
+  struct handle_wrapper
+  {
+    HANDLE handle;
+    handle_wrapper(HANDLE h)
+      : handle(h){}
+    ~handle_wrapper()
+    {
+      if (handle != INVALID_HANDLE_VALUE)
+        ::CloseHandle(handle);
+    }
+  };
+
+  HANDLE create_file_handle(const path& p, DWORD dwDesiredAccess,
+    DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+    DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,
+    HANDLE hTemplateFile)
+  {
+    return ::CreateFileW(p.c_str(), dwDesiredAccess, dwShareMode,
+      lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes,
+      hTemplateFile);
+  }
+
+  bool is_reparse_point_a_symlink(const path& p)
+  {
+    handle_wrapper h(create_file_handle(p, FILE_READ_EA,
+      FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING,
+      FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, NULL));
+    if (h.handle == INVALID_HANDLE_VALUE)
+      return false;
+
+    pdalboost::scoped_array<char> buf(new char [MAXIMUM_REPARSE_DATA_BUFFER_SIZE]);    
+ 
+    // Query the reparse data
+    DWORD dwRetLen;
+    BOOL result = ::DeviceIoControl(h.handle, FSCTL_GET_REPARSE_POINT, NULL, 0, buf.get(),
+      MAXIMUM_REPARSE_DATA_BUFFER_SIZE, &dwRetLen, NULL);
+    if (!result) return false;
+
+    return reinterpret_cast<const REPARSE_DATA_BUFFER*>(buf.get())->ReparseTag
+        == IO_REPARSE_TAG_SYMLINK
+        // Issue 9016 asked that NTFS directory junctions be recognized as directories.
+        // That is equivalent to recognizing them as symlinks, and then the normal symlink
+        // mechanism will take care of recognizing them as directories.
+        //
+        // Directory junctions are very similar to symlinks, but have some performance
+        // and other advantages over symlinks. They can be created from the command line
+        // with "mklink /j junction-name target-path".
+      || reinterpret_cast<const REPARSE_DATA_BUFFER*>(buf.get())->ReparseTag
+        == IO_REPARSE_TAG_MOUNT_POINT;  // aka "directory junction" or "junction"
+  }
+
+  inline std::size_t get_full_path_name(
+    const path& src, std::size_t len, wchar_t* buf, wchar_t** p)
+  {
+    return static_cast<std::size_t>(
+      ::GetFullPathNameW(src.c_str(), static_cast<DWORD>(len), buf, p));
+  }
+
+  fs::file_status process_status_failure(const path& p, error_code* ec)
+  {
+    int errval(::GetLastError());
+    if (ec != 0)                             // always report errval, even though some
+      ec->assign(errval, system_category());   // errval values are not status_errors
+
+    if (not_found_error(errval))
+    {
+      return fs::file_status(fs::file_not_found, fs::no_perms);
+    }
+    else if ((errval == ERROR_SHARING_VIOLATION))
+    {
+      return fs::file_status(fs::type_unknown);
+    }
+    if (ec == 0)
+      BOOST_FILESYSTEM_THROW(filesystem_error("pdalboost::filesystem::status",
+        p, error_code(errval, system_category())));
+    return fs::file_status(fs::status_error);
+  }
+
+  //  differs from symlink_status() in that directory symlinks are reported as
+  //  _detail_directory_symlink, as required on Windows by remove() and its helpers.
+  fs::file_type query_file_type(const path& p, error_code* ec)
+  {
+    DWORD attr(::GetFileAttributesW(p.c_str()));
+    if (attr == 0xFFFFFFFF)
+    {
+      return process_status_failure(p, ec).type();
+    }
+
+    if (ec != 0) ec->clear();
+
+    if (attr & FILE_ATTRIBUTE_REPARSE_POINT)
+    {
+      if (is_reparse_point_a_symlink(p))
+        return (attr & FILE_ATTRIBUTE_DIRECTORY)
+          ? fs::_detail_directory_symlink
+          : fs::symlink_file;
+      return fs::reparse_file;
+    }
+
+    return (attr & FILE_ATTRIBUTE_DIRECTORY)
+      ? fs::directory_file
+      : fs::regular_file;
+  }
+
+  BOOL resize_file_api(const wchar_t* p, pdalboost::uintmax_t size)
+  {
+    handle_wrapper h(CreateFileW(p, GENERIC_WRITE, 0, 0, OPEN_EXISTING,
+                                FILE_ATTRIBUTE_NORMAL, 0));
+    LARGE_INTEGER sz;
+    sz.QuadPart = size;
+    return h.handle != INVALID_HANDLE_VALUE
+      && ::SetFilePointerEx(h.handle, sz, 0, FILE_BEGIN)
+      && ::SetEndOfFile(h.handle);
+  }
+
+  //  Windows kernel32.dll functions that may or may not be present
+  //  must be accessed through pointers
+
+  typedef BOOL (WINAPI *PtrCreateHardLinkW)(
+    /*__in*/       LPCWSTR lpFileName,
+    /*__in*/       LPCWSTR lpExistingFileName,
+    /*__reserved*/ LPSECURITY_ATTRIBUTES lpSecurityAttributes
+   );
+
+  PtrCreateHardLinkW create_hard_link_api = PtrCreateHardLinkW(
+    ::GetProcAddress(
+      ::GetModuleHandle(TEXT("kernel32.dll")), "CreateHardLinkW"));
+
+  typedef BOOLEAN (WINAPI *PtrCreateSymbolicLinkW)(
+    /*__in*/ LPCWSTR lpSymlinkFileName,
+    /*__in*/ LPCWSTR lpTargetFileName,
+    /*__in*/ DWORD dwFlags
+   );
+
+  PtrCreateSymbolicLinkW create_symbolic_link_api = PtrCreateSymbolicLinkW(
+    ::GetProcAddress(
+      ::GetModuleHandle(TEXT("kernel32.dll")), "CreateSymbolicLinkW"));
+
+#endif
+
+//#ifdef BOOST_WINDOWS_API
+//
+//
+//  inline bool get_free_disk_space(const std::wstring& ph,
+//    PULARGE_INTEGER avail, PULARGE_INTEGER total, PULARGE_INTEGER free)
+//    { return ::GetDiskFreeSpaceExW(ph.c_str(), avail, total, free)!= 0; }
+//
+//#endif
+
+} // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                operations functions declared in operations.hpp                       //
+//                            in alphabetic order                                       //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+namespace pdalboost
+{
+namespace filesystem
+{
+
+  BOOST_FILESYSTEM_DECL
+  path absolute(const path& p, const path& base)
+  {
+//    if ( p.empty() || p.is_absolute() )
+//      return p;
+//    //  recursively calling absolute is sub-optimal, but is simple
+//    path abs_base(base.is_absolute() ? base : absolute(base));
+//# ifdef BOOST_WINDOWS_API
+//    if (p.has_root_directory())
+//      return abs_base.root_name() / p;
+//    //  !p.has_root_directory
+//    if (p.has_root_name())
+//      return p.root_name()
+//        / abs_base.root_directory() / abs_base.relative_path() / p.relative_path();
+//    //  !p.has_root_name()
+//# endif
+//    return abs_base / p;
+
+    //  recursively calling absolute is sub-optimal, but is sure and simple
+    path abs_base(base.is_absolute() ? base : absolute(base));
+
+    //  store expensive to compute values that are needed multiple times
+    path p_root_name (p.root_name());
+    path base_root_name (abs_base.root_name());
+    path p_root_directory (p.root_directory());
+
+    if (p.empty())
+      return abs_base;
+
+    if (!p_root_name.empty())  // p.has_root_name()
+    {
+      if (p_root_directory.empty())  // !p.has_root_directory()
+        return p_root_name / abs_base.root_directory()
+        / abs_base.relative_path() / p.relative_path();
+      // p is absolute, so fall through to return p at end of block
+    }
+
+    else if (!p_root_directory.empty())  // p.has_root_directory()
+    {
+#     ifdef BOOST_POSIX_API
+      // POSIX can have root name it it is a network path
+      if (base_root_name.empty())   // !abs_base.has_root_name()
+        return p;
+#     endif
+      return base_root_name / p;
+    }
+
+    else
+    {
+      return abs_base / p;
+    }
+
+    return p;  // p.is_absolute() is true
+  }
+
+namespace detail
+{
+  BOOST_FILESYSTEM_DECL bool possible_large_file_size_support()
+  {
+#   ifdef BOOST_POSIX_API
+    struct stat lcl_stat;
+    return sizeof(lcl_stat.st_size)> 4;
+#   else
+    return true;
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  path canonical(const path& p, const path& base, system::error_code* ec)
+  {
+    path source (p.is_absolute() ? p : absolute(p, base));
+    path root(source.root_path());
+    path result;
+
+    system::error_code local_ec;
+    file_status stat (status(source, local_ec));
+
+    if (stat.type() == fs::file_not_found)
+    {
+      if (ec == 0)
+        BOOST_FILESYSTEM_THROW(filesystem_error(
+          "pdalboost::filesystem::canonical", source,
+          error_code(system::errc::no_such_file_or_directory, system::generic_category())));
+      ec->assign(system::errc::no_such_file_or_directory, system::generic_category());
+      return result;
+    }
+    else if (local_ec)
+    {
+      if (ec == 0)
+        BOOST_FILESYSTEM_THROW(filesystem_error(
+          "pdalboost::filesystem::canonical", source, local_ec));
+      *ec = local_ec;
+      return result;
+    }
+
+    bool scan (true);
+    while (scan)
+    {
+      scan = false;
+      result.clear();
+      for (path::iterator itr = source.begin(); itr != source.end(); ++itr)
+      {
+        if (*itr == dot_path())
+          continue;
+        if (*itr == dot_dot_path())
+        {
+          if (result != root)
+            result.remove_filename();
+          continue;
+        }
+
+        result /= *itr;
+
+        bool is_sym (is_symlink(detail::symlink_status(result, ec)));
+        if (ec && *ec)
+          return path();
+
+        if (is_sym)
+        {
+          path link(detail::read_symlink(result, ec));
+          if (ec && *ec)
+            return path();
+          result.remove_filename();
+
+          if (link.is_absolute())
+          {
+            for (++itr; itr != source.end(); ++itr)
+              link /= *itr;
+            source = link;
+          }
+          else // link is relative
+          {
+            path new_source(result);
+            new_source /= link;
+            for (++itr; itr != source.end(); ++itr)
+              new_source /= *itr;
+            source = new_source;
+          }
+          scan = true;  // symlink causes scan to be restarted
+          break;
+        }
+      }
+    }
+    if (ec != 0)
+      ec->clear();
+    BOOST_ASSERT_MSG(result.is_absolute(), "canonical() implementation error; please report");
+    return result;
+  }
+
+  BOOST_FILESYSTEM_DECL
+  void copy(const path& from, const path& to, system::error_code* ec)
+  {
+    file_status s(symlink_status(from, *ec));
+    if (ec != 0 && *ec) return;
+
+    if(is_symlink(s))
+    {
+      copy_symlink(from, to, *ec);
+    }
+    else if(is_directory(s))
+    {
+      copy_directory(from, to, *ec);
+    }
+    else if(is_regular_file(s))
+    {
+      copy_file(from, to, fs::copy_option::fail_if_exists, *ec);
+    }
+    else
+    {
+      if (ec == 0)
+        BOOST_FILESYSTEM_THROW(filesystem_error("pdalboost::filesystem::copy",
+          from, to, error_code(BOOST_ERROR_NOT_SUPPORTED, system_category())));
+      ec->assign(BOOST_ERROR_NOT_SUPPORTED, system_category());
+    }
+  }
+
+  BOOST_FILESYSTEM_DECL
+  void copy_directory(const path& from, const path& to, system::error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+    struct stat from_stat;
+#   endif
+    error(!BOOST_COPY_DIRECTORY(from.c_str(), to.c_str()) ? BOOST_ERRNO : 0,
+      from, to, ec, "pdalboost::filesystem::copy_directory");
+  }
+
+  BOOST_FILESYSTEM_DECL
+  void copy_file(const path& from, const path& to, copy_option option, error_code* ec)
+  {
+    error(!BOOST_COPY_FILE(from.c_str(), to.c_str(),
+      option == fail_if_exists) ? BOOST_ERRNO : 0,
+        from, to, ec, "pdalboost::filesystem::copy_file");
+  }
+
+  BOOST_FILESYSTEM_DECL
+  void copy_symlink(const path& existing_symlink, const path& new_symlink,
+    system::error_code* ec)
+  {
+# if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600
+    error(BOOST_ERROR_NOT_SUPPORTED, new_symlink, existing_symlink, ec,
+      "pdalboost::filesystem::copy_symlink");
+
+# else  // modern Windows or BOOST_POSIX_API 
+    path p(read_symlink(existing_symlink, ec));
+    if (ec != 0 && *ec) return;
+    create_symlink(p, new_symlink, ec);
+
+# endif
+  }
+
+ BOOST_FILESYSTEM_DECL
+  bool create_directories(const path& p, system::error_code* ec)
+  {
+    path filename(p.filename());
+    if ((filename.native().size() == 1 && filename.native()[0] == dot)
+      || (filename.native().size() == 2
+        && filename.native()[0] == dot && filename.native()[1] == dot))
+      return create_directories(p.parent_path(), ec);
+
+    error_code local_ec;
+    file_status p_status = status(p, local_ec);
+
+    if (p_status.type() == directory_file)
+    {
+      if (ec != 0)
+        ec->clear();
+      return false;
+    }
+
+    path parent = p.parent_path();
+    BOOST_ASSERT_MSG(parent != p, "internal error: p == p.parent_path()");
+    if (!parent.empty())
+    {
+      // determine if the parent exists
+      file_status parent_status = status(parent, local_ec);
+
+      // if the parent does not exist, create the parent
+      if (parent_status.type() == file_not_found)
+      {
+        create_directories(parent, local_ec);
+        if (local_ec)
+        {
+          if (ec == 0)
+            BOOST_FILESYSTEM_THROW(filesystem_error(
+              "pdalboost::filesystem::create_directories", parent, local_ec));
+          else
+            *ec = local_ec;
+          return false;
+        }
+      }
+    }
+
+    // create the directory
+    return create_directory(p, ec);
+  }
+
+  BOOST_FILESYSTEM_DECL
+  bool create_directory(const path& p, error_code* ec)
+  {
+    if (BOOST_CREATE_DIRECTORY(p.c_str()))
+    {
+      if (ec != 0)
+        ec->clear();
+      return true;
+    }
+
+    //  attempt to create directory failed
+    int errval(BOOST_ERRNO);  // save reason for failure
+    error_code dummy;
+    if (errval == BOOST_ERROR_ALREADY_EXISTS && is_directory(p, dummy))
+    {
+      if (ec != 0)
+        ec->clear();
+      return false;
+    }
+
+    //  attempt to create directory failed && it doesn't already exist
+    if (ec == 0)
+      BOOST_FILESYSTEM_THROW(filesystem_error("pdalboost::filesystem::create_directory",
+        p, error_code(errval, system_category())));
+    else
+      ec->assign(errval, system_category());
+    return false;
+  }
+
+  BOOST_FILESYSTEM_DECL
+  void create_directory_symlink(const path& to, const path& from,
+                                 system::error_code* ec)
+  {
+#   if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0600  // SDK earlier than Vista and Server 2008
+
+    error(BOOST_ERROR_NOT_SUPPORTED, to, from, ec,
+      "pdalboost::filesystem::create_directory_symlink");
+#   else
+
+#     if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0600
+        // see if actually supported by Windows runtime dll
+        if (error(!create_symbolic_link_api ? BOOST_ERROR_NOT_SUPPORTED : 0, to, from, ec,
+            "pdalboost::filesystem::create_directory_symlink"))
+          return;
+#     endif
+
+    error(!BOOST_CREATE_SYMBOLIC_LINK(from.c_str(), to.c_str(),
+      SYMBOLIC_LINK_FLAG_DIRECTORY) ? BOOST_ERRNO : 0,
+      to, from, ec, "pdalboost::filesystem::create_directory_symlink");
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  void create_hard_link(const path& to, const path& from, error_code* ec)
+  {
+
+#   if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0500  // SDK earlier than Win 2K
+
+    error(BOOST_ERROR_NOT_SUPPORTED, to, from, ec,
+      "pdalboost::filesystem::create_hard_link");
+#   else
+
+#     if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0500
+        // see if actually supported by Windows runtime dll
+        if (error(!create_hard_link_api ? BOOST_ERROR_NOT_SUPPORTED : 0, to, from, ec,
+            "pdalboost::filesystem::create_hard_link"))
+          return;
+#     endif
+
+    error(!BOOST_CREATE_HARD_LINK(from.c_str(), to.c_str()) ? BOOST_ERRNO : 0, to, from, ec,
+      "pdalboost::filesystem::create_hard_link");
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  void create_symlink(const path& to, const path& from, error_code* ec)
+  {
+#   if defined(BOOST_WINDOWS_API) && _WIN32_WINNT < 0x0600  // SDK earlier than Vista and Server 2008
+    error(BOOST_ERROR_NOT_SUPPORTED, to, from, ec,
+      "pdalboost::filesystem::create_directory_symlink");
+#   else
+
+#     if defined(BOOST_WINDOWS_API) && _WIN32_WINNT >= 0x0600
+        // see if actually supported by Windows runtime dll
+        if (error(!create_symbolic_link_api ? BOOST_ERROR_NOT_SUPPORTED : 0, to, from, ec,
+            "pdalboost::filesystem::create_symlink"))
+          return;
+#     endif
+
+    error(!BOOST_CREATE_SYMBOLIC_LINK(from.c_str(), to.c_str(), 0) ? BOOST_ERRNO : 0,
+      to, from, ec, "pdalboost::filesystem::create_symlink");
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  path current_path(error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+    path cur;
+    for (long path_max = 128;; path_max *=2)// loop 'til buffer large enough
+    {
+      pdalboost::scoped_array<char>
+        buf(new char[static_cast<std::size_t>(path_max)]);
+      if (::getcwd(buf.get(), static_cast<std::size_t>(path_max))== 0)
+      {
+        if (error(errno != ERANGE ? errno : 0
+      // bug in some versions of the Metrowerks C lib on the Mac: wrong errno set 
+#         if defined(__MSL__) && (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))
+          && errno != 0
+#         endif
+          , ec, "pdalboost::filesystem::current_path"))
+        {
+          break;
+        }
+      }
+      else
+      {
+        cur = buf.get();
+        if (ec != 0) ec->clear();
+        break;
+      }
+    }
+    return cur;
+
+#   else
+    DWORD sz;
+    if ((sz = ::GetCurrentDirectoryW(0, NULL)) == 0)sz = 1;
+    pdalboost::scoped_array<path::value_type> buf(new path::value_type[sz]);
+    error(::GetCurrentDirectoryW(sz, buf.get()) == 0 ? BOOST_ERRNO : 0, ec,
+      "pdalboost::filesystem::current_path");
+    return path(buf.get());
+#   endif
+  }
+
+
+  BOOST_FILESYSTEM_DECL
+  void current_path(const path& p, system::error_code* ec)
+  {
+    error(!BOOST_SET_CURRENT_DIRECTORY(p.c_str()) ? BOOST_ERRNO : 0,
+      p, ec, "pdalboost::filesystem::current_path");
+  }
+
+  BOOST_FILESYSTEM_DECL
+  bool equivalent(const path& p1, const path& p2, system::error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+    struct stat s2;
+    int e2(::stat(p2.c_str(), &s2));
+    struct stat s1;
+    int e1(::stat(p1.c_str(), &s1));
+
+    if (e1 != 0 || e2 != 0)
+    {
+      // if one is invalid and the other isn't then they aren't equivalent,
+      // but if both are invalid then it is an error
+      error (e1 != 0 && e2 != 0, p1, p2, ec, "pdalboost::filesystem::equivalent");
+      return false;
+    }
+
+    // both stats now known to be valid
+    return  s1.st_dev == s2.st_dev && s1.st_ino == s2.st_ino
+        // According to the POSIX stat specs, "The st_ino and st_dev fields
+        // taken together uniquely identify the file within the system."
+        // Just to be sure, size and mod time are also checked.
+        && s1.st_size == s2.st_size && s1.st_mtime == s2.st_mtime;
+
+#   else  // Windows
+
+    // Note well: Physical location on external media is part of the
+    // equivalence criteria. If there are no open handles, physical location
+    // can change due to defragmentation or other relocations. Thus handles
+    // must be held open until location information for both paths has
+    // been retrieved.
+
+    // p2 is done first, so any error reported is for p1
+    handle_wrapper h2(
+      create_file_handle(
+          p2.c_str(),
+          0,
+          FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
+          0,
+          OPEN_EXISTING,
+          FILE_FLAG_BACKUP_SEMANTICS,
+          0));
+
+    handle_wrapper h1(
+      create_file_handle(
+          p1.c_str(),
+          0,
+          FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
+          0,
+          OPEN_EXISTING,
+          FILE_FLAG_BACKUP_SEMANTICS,
+          0));
+
+    if (h1.handle == INVALID_HANDLE_VALUE
+      || h2.handle == INVALID_HANDLE_VALUE)
+    {
+      // if one is invalid and the other isn't, then they aren't equivalent,
+      // but if both are invalid then it is an error
+      error((h1.handle == INVALID_HANDLE_VALUE
+        && h2.handle == INVALID_HANDLE_VALUE) ? BOOST_ERROR_NOT_SUPPORTED : 0, p1, p2, ec,
+          "pdalboost::filesystem::equivalent");
+      return false;
+    }
+
+    // at this point, both handles are known to be valid
+
+    BY_HANDLE_FILE_INFORMATION info1, info2;
+
+    if (error(!::GetFileInformationByHandle(h1.handle, &info1) ? BOOST_ERRNO : 0,
+      p1, p2, ec, "pdalboost::filesystem::equivalent"))
+        return  false;
+
+    if (error(!::GetFileInformationByHandle(h2.handle, &info2) ? BOOST_ERRNO : 0,
+      p1, p2, ec, "pdalboost::filesystem::equivalent"))
+        return  false;
+
+    // In theory, volume serial numbers are sufficient to distinguish between
+    // devices, but in practice VSN's are sometimes duplicated, so last write
+    // time and file size are also checked.
+      return 
+        info1.dwVolumeSerialNumber == info2.dwVolumeSerialNumber
+        && info1.nFileIndexHigh == info2.nFileIndexHigh
+        && info1.nFileIndexLow == info2.nFileIndexLow
+        && info1.nFileSizeHigh == info2.nFileSizeHigh
+        && info1.nFileSizeLow == info2.nFileSizeLow
+        && info1.ftLastWriteTime.dwLowDateTime
+          == info2.ftLastWriteTime.dwLowDateTime
+        && info1.ftLastWriteTime.dwHighDateTime
+          == info2.ftLastWriteTime.dwHighDateTime;
+
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  pdalboost::uintmax_t file_size(const path& p, error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+
+    struct stat path_stat;
+    if (error(::stat(p.c_str(), &path_stat)!= 0 ? BOOST_ERRNO : 0,
+        p, ec, "pdalboost::filesystem::file_size"))
+      return static_cast<pdalboost::uintmax_t>(-1);
+   if (error(!S_ISREG(path_stat.st_mode) ? EPERM : 0,
+        p, ec, "pdalboost::filesystem::file_size"))
+      return static_cast<pdalboost::uintmax_t>(-1);
+
+    return static_cast<pdalboost::uintmax_t>(path_stat.st_size);
+
+#   else  // Windows
+
+    // assume uintmax_t is 64-bits on all Windows compilers
+
+    WIN32_FILE_ATTRIBUTE_DATA fad;
+
+    if (error(::GetFileAttributesExW(p.c_str(), ::GetFileExInfoStandard, &fad)== 0
+      ? BOOST_ERRNO : 0, p, ec, "pdalboost::filesystem::file_size"))
+          return static_cast<pdalboost::uintmax_t>(-1);
+
+    if (error((fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)!= 0
+      ? ERROR_NOT_SUPPORTED : 0, p, ec, "pdalboost::filesystem::file_size"))
+      return static_cast<pdalboost::uintmax_t>(-1);
+
+    return (static_cast<pdalboost::uintmax_t>(fad.nFileSizeHigh)
+              << (sizeof(fad.nFileSizeLow)*8)) + fad.nFileSizeLow;
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  pdalboost::uintmax_t hard_link_count(const path& p, system::error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+
+    struct stat path_stat;
+    return error(::stat(p.c_str(), &path_stat)!= 0 ? BOOST_ERRNO : 0,
+                  p, ec, "pdalboost::filesystem::hard_link_count")
+           ? 0
+           : static_cast<pdalboost::uintmax_t>(path_stat.st_nlink);
+
+#   else // Windows
+
+    // Link count info is only available through GetFileInformationByHandle
+    BY_HANDLE_FILE_INFORMATION info;
+    handle_wrapper h(
+      create_file_handle(p.c_str(), 0,
+          FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
+          OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0));
+    return
+      !error(h.handle == INVALID_HANDLE_VALUE ? BOOST_ERRNO : 0,
+              p, ec, "pdalboost::filesystem::hard_link_count")
+      && !error(::GetFileInformationByHandle(h.handle, &info)== 0 ? BOOST_ERRNO : 0,
+                 p, ec, "pdalboost::filesystem::hard_link_count")
+           ? info.nNumberOfLinks
+           : 0;
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  path initial_path(error_code* ec)
+  {
+      static path init_path;
+      if (init_path.empty())
+        init_path = current_path(ec);
+      else if (ec != 0) ec->clear();
+      return init_path;
+  }
+
+  BOOST_FILESYSTEM_DECL
+  bool is_empty(const path& p, system::error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+
+    struct stat path_stat;
+    if (error(::stat(p.c_str(), &path_stat)!= 0,
+        p, ec, "pdalboost::filesystem::is_empty"))
+      return false;        
+    return S_ISDIR(path_stat.st_mode)
+      ? is_empty_directory(p)
+      : path_stat.st_size == 0;
+#   else
+
+    WIN32_FILE_ATTRIBUTE_DATA fad;
+    if (error(::GetFileAttributesExW(p.c_str(), ::GetFileExInfoStandard, &fad)== 0
+      ? BOOST_ERRNO : 0, p, ec, "pdalboost::filesystem::is_empty"))
+        return false;
+
+    if (ec != 0) ec->clear();
+    return 
+      (fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+        ? is_empty_directory(p)
+        : (!fad.nFileSizeHigh && !fad.nFileSizeLow);
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  std::time_t last_write_time(const path& p, system::error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+
+    struct stat path_stat;
+    if (error(::stat(p.c_str(), &path_stat)!= 0 ? BOOST_ERRNO : 0,
+      p, ec, "pdalboost::filesystem::last_write_time"))
+        return std::time_t(-1);
+    return path_stat.st_mtime;
+
+#   else
+
+    handle_wrapper hw(
+      create_file_handle(p.c_str(), 0,
+        FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
+        OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0));
+
+    if (error(hw.handle == INVALID_HANDLE_VALUE ? BOOST_ERRNO : 0,
+      p, ec, "pdalboost::filesystem::last_write_time"))
+        return std::time_t(-1);
+
+    FILETIME lwt;
+
+    if (error(::GetFileTime(hw.handle, 0, 0, &lwt)== 0 ? BOOST_ERRNO : 0,
+      p, ec, "pdalboost::filesystem::last_write_time"))
+        return std::time_t(-1);
+
+    return to_time_t(lwt);
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  void last_write_time(const path& p, const std::time_t new_time,
+                        system::error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+
+    struct stat path_stat;
+    if (error(::stat(p.c_str(), &path_stat)!= 0,
+      p, ec, "pdalboost::filesystem::last_write_time"))
+        return;
+    ::utimbuf buf;
+    buf.actime = path_stat.st_atime; // utime()updates access time too:-(
+    buf.modtime = new_time;
+    error(::utime(p.c_str(), &buf)!= 0 ? BOOST_ERRNO : 0,
+      p, ec, "pdalboost::filesystem::last_write_time");
+
+#   else
+
+    handle_wrapper hw(
+      create_file_handle(p.c_str(), FILE_WRITE_ATTRIBUTES,
+        FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
+        OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0));
+
+    if (error(hw.handle == INVALID_HANDLE_VALUE ? BOOST_ERRNO : 0,
+      p, ec, "pdalboost::filesystem::last_write_time"))
+        return;
+
+    FILETIME lwt;
+    to_FILETIME(new_time, lwt);
+
+    error(::SetFileTime(hw.handle, 0, 0, &lwt)== 0 ? BOOST_ERRNO : 0,
+      p, ec, "pdalboost::filesystem::last_write_time");
+#   endif
+  }
+
+# ifdef BOOST_POSIX_API
+    const perms active_bits(all_all | set_uid_on_exe | set_gid_on_exe | sticky_bit);
+    inline mode_t mode_cast(perms prms) { return prms & active_bits; }
+# endif
+
+  BOOST_FILESYSTEM_DECL
+  void permissions(const path& p, perms prms, system::error_code* ec)
+  {
+    BOOST_ASSERT_MSG(!((prms & add_perms) && (prms & remove_perms)),
+      "add_perms and remove_perms are mutually exclusive");
+
+    if ((prms & add_perms) && (prms & remove_perms))  // precondition failed
+      return;
+
+# ifdef BOOST_POSIX_API
+    error_code local_ec;
+    file_status current_status((prms & symlink_perms)
+                               ? fs::symlink_status(p, local_ec)
+                               : fs::status(p, local_ec));
+    if (local_ec)
+    {
+      if (ec == 0)
+      BOOST_FILESYSTEM_THROW(filesystem_error(
+          "pdalboost::filesystem::permissions", p, local_ec));
+      else
+        *ec = local_ec;
+      return;
+    }
+
+    if (prms & add_perms)
+      prms |= current_status.permissions();
+    else if (prms & remove_perms)
+      prms = current_status.permissions() & ~prms;
+
+    // OS X <10.10, iOS <8.0 and some other platforms don't support fchmodat().
+    // Solaris (SunPro and gcc) only support fchmodat() on Solaris 11 and higher,
+    // and a runtime check is too much trouble.
+    // Linux does not support permissions on symbolic links and has no plans to
+    // support them in the future.  The chmod() code is thus more practical,
+    // rather than always hitting ENOTSUP when sending in AT_SYMLINK_NO_FOLLOW.
+    //  - See the 3rd paragraph of
+    // "Symbolic link ownership, permissions, and timestamps" at:
+    //   "http://man7.org/linux/man-pages/man7/symlink.7.html"
+    //  - See the fchmodat() Linux man page:
+    //   "http://man7.org/linux/man-pages/man2/fchmodat.2.html"
+#   if defined(AT_FDCWD) && defined(AT_SYMLINK_NOFOLLOW) \
+      && !(defined(__SUNPRO_CC) || defined(__sun) || defined(sun)) \
+      && !(defined(linux) || defined(__linux) || defined(__linux__)) \
+      && !(defined(__MAC_OS_X_VERSION_MIN_REQUIRED) \
+           && __MAC_OS_X_VERSION_MIN_REQUIRED < 101000) \
+      && !(defined(__IPHONE_OS_VERSION_MIN_REQUIRED) \
+           && __IPHONE_OS_VERSION_MIN_REQUIRED < 80000)
+      if (::fchmodat(AT_FDCWD, p.c_str(), mode_cast(prms),
+           !(prms & symlink_perms) ? 0 : AT_SYMLINK_NOFOLLOW))
+#   else  // fallback if fchmodat() not supported
+      if (::chmod(p.c_str(), mode_cast(prms)))
+#   endif
+    {
+      if (ec == 0)
+      BOOST_FILESYSTEM_THROW(filesystem_error(
+          "pdalboost::filesystem::permissions", p,
+          error_code(errno, system::generic_category())));
+      else
+        ec->assign(errno, system::generic_category());
+    }
+
+# else  // Windows
+
+    // if not going to alter FILE_ATTRIBUTE_READONLY, just return
+    if (!(!((prms & (add_perms | remove_perms)))
+      || (prms & (owner_write|group_write|others_write))))
+      return;
+
+    DWORD attr = ::GetFileAttributesW(p.c_str());
+
+    if (error(attr == 0 ? BOOST_ERRNO : 0, p, ec, "pdalboost::filesystem::permissions"))
+      return;
+
+    if (prms & add_perms)
+      attr &= ~FILE_ATTRIBUTE_READONLY;
+    else if (prms & remove_perms)
+      attr |= FILE_ATTRIBUTE_READONLY;
+    else if (prms & (owner_write|group_write|others_write))
+      attr &= ~FILE_ATTRIBUTE_READONLY;
+    else
+      attr |= FILE_ATTRIBUTE_READONLY;
+
+    error(::SetFileAttributesW(p.c_str(), attr) == 0 ? BOOST_ERRNO : 0,
+      p, ec, "pdalboost::filesystem::permissions");
+# endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  path read_symlink(const path& p, system::error_code* ec)
+  {
+    path symlink_path;
+
+#   ifdef BOOST_POSIX_API
+
+    for (std::size_t path_max = 64;; path_max *= 2)// loop 'til buffer large enough
+    {
+      pdalboost::scoped_array<char> buf(new char[path_max]);
+      ssize_t result;
+      if ((result=::readlink(p.c_str(), buf.get(), path_max))== -1)
+      {
+        if (ec == 0)
+          BOOST_FILESYSTEM_THROW(filesystem_error("pdalboost::filesystem::read_symlink",
+            p, error_code(errno, system_category())));
+        else ec->assign(errno, system_category());
+        break;
+      }
+      else
+      {
+        if(result != static_cast<ssize_t>(path_max))
+        {
+          symlink_path.assign(buf.get(), buf.get() + result);
+          if (ec != 0) ec->clear();
+          break;
+        }
+      }
+    }
+
+#   elif _WIN32_WINNT < 0x0600  // SDK earlier than Vista and Server 2008
+    error(BOOST_ERROR_NOT_SUPPORTED, p, ec,
+          "pdalboost::filesystem::read_symlink");
+#   else  // Vista and Server 2008 SDK, or later
+
+    union info_t
+    {
+      char buf[REPARSE_DATA_BUFFER_HEADER_SIZE+MAXIMUM_REPARSE_DATA_BUFFER_SIZE];
+      REPARSE_DATA_BUFFER rdb;
+    } info;
+
+    handle_wrapper h(
+      create_file_handle(p.c_str(), GENERIC_READ, 0, 0, OPEN_EXISTING,
+        FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, 0));
+
+    if (error(h.handle == INVALID_HANDLE_VALUE ? BOOST_ERRNO : 0,
+      p, ec, "pdalboost::filesystem::read_symlink"))
+        return symlink_path;
+
+    DWORD sz;
+
+    if (!error(::DeviceIoControl(h.handle, FSCTL_GET_REPARSE_POINT,
+          0, 0, info.buf, sizeof(info), &sz, 0) == 0 ? BOOST_ERRNO : 0, p, ec,
+          "pdalboost::filesystem::read_symlink" ))
+      symlink_path.assign(
+        static_cast<wchar_t*>(info.rdb.SymbolicLinkReparseBuffer.PathBuffer)
+        + info.rdb.SymbolicLinkReparseBuffer.PrintNameOffset/sizeof(wchar_t),
+        static_cast<wchar_t*>(info.rdb.SymbolicLinkReparseBuffer.PathBuffer)
+        + info.rdb.SymbolicLinkReparseBuffer.PrintNameOffset/sizeof(wchar_t)
+        + info.rdb.SymbolicLinkReparseBuffer.PrintNameLength/sizeof(wchar_t));
+#     endif
+    return symlink_path;
+  }
+
+  BOOST_FILESYSTEM_DECL
+  path relative(const path& p, const path& base, error_code* ec)
+  {
+    error_code tmp_ec;
+    path wc_base(weakly_canonical(base, &tmp_ec));
+    if (error(tmp_ec.value(), base, ec, "pdalboost::filesystem::relative"))
+      return path();
+    path wc_p(weakly_canonical(p, &tmp_ec));
+    if (error(tmp_ec.value(), base, ec, "pdalboost::filesystem::relative"))
+      return path();
+    return wc_p.lexically_relative(wc_base);
+  }
+  
+  BOOST_FILESYSTEM_DECL
+  bool remove(const path& p, error_code* ec)
+  {
+    error_code tmp_ec;
+    file_type type = query_file_type(p, &tmp_ec);
+    if (error(type == status_error ? tmp_ec.value() : 0, p, ec,
+        "pdalboost::filesystem::remove"))
+      return false;
+
+    // Since POSIX remove() is specified to work with either files or directories, in a
+    // perfect world it could just be called. But some important real-world operating
+    // systems (Windows, Mac OS X, for example) don't implement the POSIX spec. So
+    // remove_file_or_directory() is always called to keep it simple.
+    return remove_file_or_directory(p, type, ec);
+  }
+
+  BOOST_FILESYSTEM_DECL
+  pdalboost::uintmax_t remove_all(const path& p, error_code* ec)
+  {
+    error_code tmp_ec;
+    file_type type = query_file_type(p, &tmp_ec);
+    if (error(type == status_error ? tmp_ec.value() : 0, p, ec,
+      "pdalboost::filesystem::remove_all"))
+      return 0;
+
+    return (type != status_error && type != file_not_found) // exists
+      ? remove_all_aux(p, type, ec)
+      : 0;
+  }
+
+  BOOST_FILESYSTEM_DECL
+  void rename(const path& old_p, const path& new_p, error_code* ec)
+  {
+    error(!BOOST_MOVE_FILE(old_p.c_str(), new_p.c_str()) ? BOOST_ERRNO : 0, old_p, new_p,
+      ec, "pdalboost::filesystem::rename");
+  }
+
+  BOOST_FILESYSTEM_DECL
+  void resize_file(const path& p, uintmax_t size, system::error_code* ec)
+  {
+    error(!BOOST_RESIZE_FILE(p.c_str(), size) ? BOOST_ERRNO : 0, p, ec,
+      "pdalboost::filesystem::resize_file");
+  }
+
+  BOOST_FILESYSTEM_DECL
+  space_info space(const path& p, error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+    struct BOOST_STATVFS vfs;
+    space_info info;
+    if (!error(::BOOST_STATVFS(p.c_str(), &vfs)!= 0,
+      p, ec, "pdalboost::filesystem::space"))
+    {
+      info.capacity 
+        = static_cast<pdalboost::uintmax_t>(vfs.f_blocks)* BOOST_STATVFS_F_FRSIZE;
+      info.free 
+        = static_cast<pdalboost::uintmax_t>(vfs.f_bfree)* BOOST_STATVFS_F_FRSIZE;
+      info.available
+        = static_cast<pdalboost::uintmax_t>(vfs.f_bavail)* BOOST_STATVFS_F_FRSIZE;
+    }
+
+#   else
+    ULARGE_INTEGER avail, total, free;
+    space_info info;
+
+    if (!error(::GetDiskFreeSpaceExW(p.c_str(), &avail, &total, &free)== 0,
+       p, ec, "pdalboost::filesystem::space"))
+    {
+      info.capacity
+        = (static_cast<pdalboost::uintmax_t>(total.HighPart)<< 32)
+          + total.LowPart;
+      info.free
+        = (static_cast<pdalboost::uintmax_t>(free.HighPart)<< 32)
+          + free.LowPart;
+      info.available
+        = (static_cast<pdalboost::uintmax_t>(avail.HighPart)<< 32)
+          + avail.LowPart;
+    }
+
+#   endif
+
+    else
+    {
+      info.capacity = info.free = info.available = 0;
+    }
+    return info;
+  }
+
+  BOOST_FILESYSTEM_DECL
+  file_status status(const path& p, error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+
+    struct stat path_stat;
+    if (::stat(p.c_str(), &path_stat)!= 0)
+    {
+      if (ec != 0)                            // always report errno, even though some
+        ec->assign(errno, system_category());   // errno values are not status_errors
+
+      if (not_found_error(errno))
+      {
+        return fs::file_status(fs::file_not_found, fs::no_perms);
+      }
+      if (ec == 0)
+        BOOST_FILESYSTEM_THROW(filesystem_error("pdalboost::filesystem::status",
+          p, error_code(errno, system_category())));
+      return fs::file_status(fs::status_error);
+    }
+    if (ec != 0) ec->clear();;
+    if (S_ISDIR(path_stat.st_mode))
+      return fs::file_status(fs::directory_file,
+        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+    if (S_ISREG(path_stat.st_mode))
+      return fs::file_status(fs::regular_file,
+        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+    if (S_ISBLK(path_stat.st_mode))
+      return fs::file_status(fs::block_file,
+        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+    if (S_ISCHR(path_stat.st_mode))
+      return fs::file_status(fs::character_file,
+        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+    if (S_ISFIFO(path_stat.st_mode))
+      return fs::file_status(fs::fifo_file,
+        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+    if (S_ISSOCK(path_stat.st_mode))
+      return fs::file_status(fs::socket_file,
+        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+    return fs::file_status(fs::type_unknown);
+
+#   else  // Windows
+
+    DWORD attr(::GetFileAttributesW(p.c_str()));
+    if (attr == 0xFFFFFFFF)
+    {
+      return process_status_failure(p, ec);
+    }
+
+    //  reparse point handling;
+    //    since GetFileAttributesW does not resolve symlinks, try to open a file
+    //    handle to discover if the file exists
+    if (attr & FILE_ATTRIBUTE_REPARSE_POINT)
+    {
+      handle_wrapper h(
+        create_file_handle(
+            p.c_str(),
+            0,  // dwDesiredAccess; attributes only
+            FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
+            0,  // lpSecurityAttributes
+            OPEN_EXISTING,
+            FILE_FLAG_BACKUP_SEMANTICS,
+            0)); // hTemplateFile
+      if (h.handle == INVALID_HANDLE_VALUE)
+      {
+        return process_status_failure(p, ec);
+      }
+
+      if (!is_reparse_point_a_symlink(p))
+        return file_status(reparse_file, make_permissions(p, attr));
+    }
+
+    if (ec != 0) ec->clear();
+    return (attr & FILE_ATTRIBUTE_DIRECTORY)
+      ? file_status(directory_file, make_permissions(p, attr))
+      : file_status(regular_file, make_permissions(p, attr));
+
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  file_status symlink_status(const path& p, error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+
+    struct stat path_stat;
+    if (::lstat(p.c_str(), &path_stat)!= 0)
+    {
+      if (ec != 0)                            // always report errno, even though some
+        ec->assign(errno, system_category());   // errno values are not status_errors
+
+      if (errno == ENOENT || errno == ENOTDIR) // these are not errors
+      {
+        return fs::file_status(fs::file_not_found, fs::no_perms);
+      }
+      if (ec == 0)
+        BOOST_FILESYSTEM_THROW(filesystem_error("pdalboost::filesystem::status",
+          p, error_code(errno, system_category())));
+      return fs::file_status(fs::status_error);
+    }
+    if (ec != 0) ec->clear();
+    if (S_ISREG(path_stat.st_mode))
+      return fs::file_status(fs::regular_file,
+        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+    if (S_ISDIR(path_stat.st_mode))
+      return fs::file_status(fs::directory_file,
+        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+    if (S_ISLNK(path_stat.st_mode))
+      return fs::file_status(fs::symlink_file,
+        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+    if (S_ISBLK(path_stat.st_mode))
+      return fs::file_status(fs::block_file,
+        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+    if (S_ISCHR(path_stat.st_mode))
+      return fs::file_status(fs::character_file,
+        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+    if (S_ISFIFO(path_stat.st_mode))
+      return fs::file_status(fs::fifo_file,
+        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+    if (S_ISSOCK(path_stat.st_mode))
+      return fs::file_status(fs::socket_file,
+        static_cast<perms>(path_stat.st_mode) & fs::perms_mask);
+    return fs::file_status(fs::type_unknown);
+
+#   else  // Windows
+
+    DWORD attr(::GetFileAttributesW(p.c_str()));
+    if (attr == 0xFFFFFFFF)
+    {
+      return process_status_failure(p, ec);
+    }
+
+    if (ec != 0) ec->clear();
+
+    if (attr & FILE_ATTRIBUTE_REPARSE_POINT)
+      return is_reparse_point_a_symlink(p)
+             ? file_status(symlink_file, make_permissions(p, attr))
+             : file_status(reparse_file, make_permissions(p, attr));
+
+    return (attr & FILE_ATTRIBUTE_DIRECTORY)
+      ? file_status(directory_file, make_permissions(p, attr))
+      : file_status(regular_file, make_permissions(p, attr));
+
+#   endif
+  }
+
+   // contributed by Jeff Flinn
+  BOOST_FILESYSTEM_DECL
+  path temp_directory_path(system::error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+      const char* val = 0;
+      
+      (val = std::getenv("TMPDIR" )) ||
+      (val = std::getenv("TMP"    )) ||
+      (val = std::getenv("TEMP"   )) ||
+      (val = std::getenv("TEMPDIR"));
+      
+#     ifdef __ANDROID__
+        const char* default_tmp = "/data/local/tmp";
+#     else
+        const char* default_tmp = "/tmp";
+#     endif
+      path p((val!=0) ? val : default_tmp);
+       
+      if (p.empty() || (ec&&!is_directory(p, *ec))||(!ec&&!is_directory(p)))
+      {
+        error(ENOTDIR, p, ec, "pdalboost::filesystem::temp_directory_path");
+        return p;
+      }
+        
+      return p;
+      
+#   else  // Windows
+
+      const wchar_t* tmp_env = L"TMP";
+      const wchar_t* temp_env = L"TEMP";
+      const wchar_t* localappdata_env = L"LOCALAPPDATA";
+      const wchar_t* userprofile_env = L"USERPROFILE";
+      const wchar_t* env_list[]
+        = {tmp_env, temp_env, localappdata_env, userprofile_env, 0};
+
+      path p;
+      for (int i = 0; env_list[i]; ++i)
+      {
+        std::wstring env = wgetenv(env_list[i]);
+        if (!env.empty())
+        {
+          p = env;
+          if (i >= 2)
+            p /= L"Temp";
+          error_code lcl_ec;
+          if (exists(p, lcl_ec) && !lcl_ec && is_directory(p, lcl_ec) && !lcl_ec)
+            break;
+          p.clear();
+        }
+      }
+
+      if (p.empty())
+      {
+        // use vector since in C++03 a string is not required to be contiguous
+        std::vector<wchar_t> buf(::GetWindowsDirectoryW(NULL, 0));
+
+        if (buf.empty()
+          || ::GetWindowsDirectoryW(&buf[0], static_cast<UINT>(buf.size())) == 0)
+        {
+          error(::GetLastError(), ec, "pdalboost::filesystem::temp_directory_path");
+          return path();
+        }
+        p = &*buf.begin();  // do not depend on buf.size(); see ticket #10388
+        p /= L"Temp";
+      }
+      return p;
+
+#   endif
+  }
+  
+  BOOST_FILESYSTEM_DECL
+  path system_complete(const path& p, system::error_code* ec)
+  {
+#   ifdef BOOST_POSIX_API
+    return (p.empty() || p.is_absolute())
+      ? p : current_path()/ p;
+
+#   else
+    if (p.empty())
+    {
+      if (ec != 0) ec->clear();
+      return p;
+    }
+    wchar_t buf[buf_size];
+    wchar_t* pfn;
+    std::size_t len = get_full_path_name(p, buf_size, buf, &pfn);
+
+    if (error(len == 0 ? BOOST_ERRNO : 0, p, ec, "pdalboost::filesystem::system_complete"))
+      return path();
+
+    if (len < buf_size)// len does not include null termination character
+      return path(&buf[0]);
+
+    pdalboost::scoped_array<wchar_t> big_buf(new wchar_t[len]);
+
+    return error(get_full_path_name(p, len , big_buf.get(), &pfn)== 0 ? BOOST_ERRNO : 0,
+      p, ec, "pdalboost::filesystem::system_complete")
+      ? path()
+      : path(big_buf.get());
+#   endif
+  }
+
+  BOOST_FILESYSTEM_DECL
+  path weakly_canonical(const path& p, system::error_code* ec)
+  {
+    path head(p);
+    path tail;
+    system::error_code tmp_ec;
+    path::iterator itr = p.end();
+
+    for (; !head.empty(); --itr)
+    {
+      file_status head_status = status(head, tmp_ec);
+      if (error(head_status.type() == fs::status_error,
+        head, ec, "pdalboost::filesystem::weakly_canonical"))
+        return path();
+      if (head_status.type() != fs::file_not_found)
+        break;
+      head.remove_filename();
+    }
+
+    bool tail_has_dots = false;
+    for (; itr != p.end(); ++itr)
+    { 
+      tail /= *itr;
+      // for a later optimization, track if any dot or dot-dot elements are present
+      if (itr->native().size() <= 2
+        && itr->native()[0] == dot
+        && (itr->native().size() == 1 || itr->native()[1] == dot))
+        tail_has_dots = true;
+    }
+    
+    if (head.empty())
+      return p.lexically_normal();
+    head = canonical(head, tmp_ec);
+    if (error(tmp_ec.value(), head, ec, "pdalboost::filesystem::weakly_canonical"))
+      return path();
+    return tail.empty()
+      ? head
+      : (tail_has_dots  // optimization: only normalize if tail had dot or dot-dot element
+          ? (head/tail).lexically_normal()  
+          : head/tail);
+  }
+}  // namespace detail
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                                 directory_entry                                      //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+  file_status
+  directory_entry::m_get_status(system::error_code* ec) const
+  {
+    if (!status_known(m_status))
+    {
+      // optimization: if the symlink status is known, and it isn't a symlink,
+      // then status and symlink_status are identical so just copy the
+      // symlink status to the regular status.
+      if (status_known(m_symlink_status)
+        && !is_symlink(m_symlink_status))
+      { 
+        m_status = m_symlink_status;
+        if (ec != 0) ec->clear();
+      }
+      else m_status = detail::status(m_path, ec);
+    }
+    else if (ec != 0) ec->clear();
+    return m_status;
+  }
+
+  file_status
+  directory_entry::m_get_symlink_status(system::error_code* ec) const
+  {
+    if (!status_known(m_symlink_status))
+      m_symlink_status = detail::symlink_status(m_path, ec);
+    else if (ec != 0) ec->clear();
+    return m_symlink_status;
+  }
+
+//  dispatch directory_entry supplied here rather than in 
+//  <boost/filesystem/path_traits.hpp>, thus avoiding header circularity.
+//  test cases are in operations_unit_test.cpp
+
+namespace path_traits
+{
+  void dispatch(const directory_entry & de,
+#                ifdef BOOST_WINDOWS_API
+    std::wstring& to,
+#                else   
+    std::string& to,
+#                endif
+    const codecvt_type &)
+  {
+    to = de.path().native();
+  }
+
+  void dispatch(const directory_entry & de,
+#                ifdef BOOST_WINDOWS_API
+    std::wstring& to
+#                else   
+    std::string& to
+#                endif
+    )
+  {
+    to = de.path().native();
+  }
+}  // namespace path_traits
+} // namespace filesystem
+} // namespace pdalboost
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                               directory_iterator                                     //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+namespace
+{
+# ifdef BOOST_POSIX_API
+
+  error_code path_max(std::size_t & result)
+  // this code is based on Stevens and Rago, Advanced Programming in the
+  // UNIX envirnment, 2nd Ed., ISBN 0-201-43307-9, page 49
+  {
+#   ifdef PATH_MAX
+    static std::size_t max = PATH_MAX;
+#   else
+    static std::size_t max = 0;
+#   endif
+    if (max == 0)
+    {
+      errno = 0;
+      long tmp = ::pathconf("/", _PC_NAME_MAX);
+      if (tmp < 0)
+      {
+        if (errno == 0)// indeterminate
+          max = 4096; // guess
+        else return error_code(errno, system_category());
+      }
+      else max = static_cast<std::size_t>(tmp + 1); // relative root
+    }
+    result = max;
+    return ok;
+  }
+
+#if defined(__PGI) && defined(__USE_FILE_OFFSET64)
+#define dirent dirent64
+#endif
+
+  error_code dir_itr_first(void *& handle, void *& buffer,
+    const char* dir, string& target,
+    fs::file_status &, fs::file_status &)
+  {
+    if ((handle = ::opendir(dir))== 0)
+      return error_code(errno, system_category());
+    target = string(".");  // string was static but caused trouble
+                             // when iteration called from dtor, after
+                             // static had already been destroyed
+    std::size_t path_size (0);  // initialization quiets gcc warning (ticket #3509)
+    error_code ec = path_max(path_size);
+    if (ec)return ec;
+    dirent de;
+    buffer = std::malloc((sizeof(dirent) - sizeof(de.d_name))
+      +  path_size + 1); // + 1 for "/0"
+    return ok;
+  }  
+
+  // warning: the only dirent member updated is d_name
+  inline int readdir_r_simulator(DIR * dirp, struct dirent * entry,
+    struct dirent ** result)// *result set to 0 on end of directory
+  {
+    errno = 0;
+
+#   if !defined(__CYGWIN__)\
+    && defined(_POSIX_THREAD_SAFE_FUNCTIONS)\
+    && defined(_SC_THREAD_SAFE_FUNCTIONS)\
+    && (_POSIX_THREAD_SAFE_FUNCTIONS+0 >= 0)\
+    && (!defined(__hpux) || defined(_REENTRANT)) \
+    && (!defined(_AIX) || defined(__THREAD_SAFE))
+    if (::sysconf(_SC_THREAD_SAFE_FUNCTIONS)>= 0)
+      { return ::readdir_r(dirp, entry, result); }
+#   endif
+
+    struct dirent * p;
+    *result = 0;
+    if ((p = ::readdir(dirp))== 0)
+      return errno;
+    std::strcpy(entry->d_name, p->d_name);
+    *result = entry;
+    return 0;
+  }
+
+  error_code dir_itr_increment(void *& handle, void *& buffer,
+    string& target, fs::file_status & sf, fs::file_status & symlink_sf)
+  {
+    BOOST_ASSERT(buffer != 0);
+    dirent * entry(static_cast<dirent *>(buffer));
+    dirent * result;
+    int return_code;
+    if ((return_code = readdir_r_simulator(static_cast<DIR*>(handle), entry, &result))!= 0)
+      return error_code(errno, system_category());
+    if (result == 0)
+      return fs::detail::dir_itr_close(handle, buffer);
+    target = entry->d_name;
+#   ifdef BOOST_FILESYSTEM_STATUS_CACHE
+    if (entry->d_type == DT_UNKNOWN) // filesystem does not supply d_type value
+    {
+      sf = symlink_sf = fs::file_status(fs::status_error);
+    }
+    else  // filesystem supplies d_type value
+    {
+      if (entry->d_type == DT_DIR)
+        sf = symlink_sf = fs::file_status(fs::directory_file);
+      else if (entry->d_type == DT_REG)
+        sf = symlink_sf = fs::file_status(fs::regular_file);
+      else if (entry->d_type == DT_LNK)
+      {
+        sf = fs::file_status(fs::status_error);
+        symlink_sf = fs::file_status(fs::symlink_file);
+      }
+      else sf = symlink_sf = fs::file_status(fs::status_error);
+    }
+#   else
+    sf = symlink_sf = fs::file_status(fs::status_error);
+#    endif
+    return ok;
+  }
+
+# else // BOOST_WINDOWS_API
+
+  error_code dir_itr_first(void *& handle, const fs::path& dir,
+    wstring& target, fs::file_status & sf, fs::file_status & symlink_sf)
+  // Note: an empty root directory has no "." or ".." entries, so this
+  // causes a ERROR_FILE_NOT_FOUND error which we do not considered an
+  // error. It is treated as eof instead.
+  {
+    // use a form of search Sebastian Martel reports will work with Win98
+    wstring dirpath(dir.wstring());
+    dirpath += (dirpath.empty()
+      || (dirpath[dirpath.size()-1] != L'\\'
+        && dirpath[dirpath.size()-1] != L'/'
+        && dirpath[dirpath.size()-1] != L':'))? L"\\*" : L"*";
+
+    WIN32_FIND_DATAW data;
+    if ((handle = ::FindFirstFileW(dirpath.c_str(), &data))
+      == INVALID_HANDLE_VALUE)
+    { 
+      handle = 0;  // signal eof
+      return error_code( (::GetLastError() == ERROR_FILE_NOT_FOUND
+                       // Windows Mobile returns ERROR_NO_MORE_FILES; see ticket #3551                                           
+                       || ::GetLastError() == ERROR_NO_MORE_FILES) 
+        ? 0 : ::GetLastError(), system_category() );
+    }
+    target = data.cFileName;
+    if (data.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
+    // reparse points are complex, so don't try to handle them here; instead just mark
+    // them as status_error which causes directory_entry caching to call status()
+    // and symlink_status() which do handle reparse points fully
+    {
+      sf.type(fs::status_error);
+      symlink_sf.type(fs::status_error);
+    }
+    else
+    {
+      if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+      {
+        sf.type(fs::directory_file);
+        symlink_sf.type(fs::directory_file);
+      }
+      else
+      {
+        sf.type(fs::regular_file);
+        symlink_sf.type(fs::regular_file);
+      }
+      sf.permissions(make_permissions(data.cFileName, data.dwFileAttributes));
+      symlink_sf.permissions(sf.permissions());
+    }
+    return error_code();
+  }
+
+  error_code  dir_itr_increment(void *& handle, wstring& target,
+    fs::file_status & sf, fs::file_status & symlink_sf)
+  {
+    WIN32_FIND_DATAW data;
+    if (::FindNextFileW(handle, &data)== 0)// fails
+    {
+      int error = ::GetLastError();
+      fs::detail::dir_itr_close(handle);
+      return error_code(error == ERROR_NO_MORE_FILES ? 0 : error, system_category());
+    }
+    target = data.cFileName;
+    if (data.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
+    // reparse points are complex, so don't try to handle them here; instead just mark
+    // them as status_error which causes directory_entry caching to call status()
+    // and symlink_status() which do handle reparse points fully
+    {
+      sf.type(fs::status_error);
+      symlink_sf.type(fs::status_error);
+    }
+    else
+    {
+      if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+      {
+        sf.type(fs::directory_file);
+        symlink_sf.type(fs::directory_file);
+      }
+      else
+      {
+        sf.type(fs::regular_file);
+        symlink_sf.type(fs::regular_file);
+      }
+      sf.permissions(make_permissions(data.cFileName, data.dwFileAttributes));
+      symlink_sf.permissions(sf.permissions());
+    }
+    return error_code();
+  }
+#endif
+
+  const error_code not_found_error_code (
+#     ifdef BOOST_WINDOWS_API
+        ERROR_PATH_NOT_FOUND
+#     else
+        ENOENT 
+#     endif
+        , system_category());
+
+}  // unnamed namespace
+
+namespace pdalboost
+{
+namespace filesystem
+{
+
+namespace detail
+{
+  //  dir_itr_close is called both from the ~dir_itr_imp()destructor 
+  //  and dir_itr_increment()
+  BOOST_FILESYSTEM_DECL
+  system::error_code dir_itr_close( // never throws
+    void *& handle
+#   if defined(BOOST_POSIX_API)
+    , void *& buffer
+#   endif
+   )
+  {
+#   ifdef BOOST_POSIX_API
+    std::free(buffer);
+    buffer = 0;
+    if (handle == 0)return ok;
+    DIR * h(static_cast<DIR*>(handle));
+    handle = 0;
+    return error_code(::closedir(h)== 0 ? 0 : errno, system_category());
+
+#   else
+    if (handle != 0)
+    {
+      ::FindClose(handle);
+      handle = 0;
+    }
+    return ok;
+
+#   endif
+  }
+
+  void directory_iterator_construct(directory_iterator& it,
+    const path& p, system::error_code* ec)    
+  {
+    if (error(p.empty() ? not_found_error_code.value() : 0, p, ec,
+              "pdalboost::filesystem::directory_iterator::construct"))
+      return;
+
+    path::string_type filename;
+    file_status file_stat, symlink_file_stat;
+    error_code result = dir_itr_first(it.m_imp->handle,
+#     if defined(BOOST_POSIX_API)
+      it.m_imp->buffer,
+#     endif
+      p.c_str(), filename, file_stat, symlink_file_stat);
+
+    if (result)
+    {
+      it.m_imp.reset();
+      error(result.value(), p,
+        ec, "pdalboost::filesystem::directory_iterator::construct");
+      return;
+    }
+    
+    if (it.m_imp->handle == 0)
+      it.m_imp.reset(); // eof, so make end iterator
+    else // not eof
+    {
+      it.m_imp->dir_entry.assign(p / filename, file_stat, symlink_file_stat);
+      if (filename[0] == dot // dot or dot-dot
+        && (filename.size()== 1
+          || (filename[1] == dot
+            && filename.size()== 2)))
+        {  it.increment(*ec); }
+    }
+  }
+
+  void directory_iterator_increment(directory_iterator& it,
+    system::error_code* ec)
+  {
+    BOOST_ASSERT_MSG(it.m_imp.get(), "attempt to increment end iterator");
+    BOOST_ASSERT_MSG(it.m_imp->handle != 0, "internal program error");
+    
+    path::string_type filename;
+    file_status file_stat, symlink_file_stat;
+    system::error_code temp_ec;
+
+    for (;;)
+    {
+      temp_ec = dir_itr_increment(it.m_imp->handle,
+#       if defined(BOOST_POSIX_API)
+        it.m_imp->buffer,
+#       endif
+        filename, file_stat, symlink_file_stat);
+
+      if (temp_ec)  // happens if filesystem is corrupt, such as on a damaged optical disc
+      {
+        path error_path(it.m_imp->dir_entry.path().parent_path());  // fix ticket #5900
+        it.m_imp.reset();
+        if (ec == 0)
+          BOOST_FILESYSTEM_THROW(
+            filesystem_error("pdalboost::filesystem::directory_iterator::operator++",
+              error_path,
+              error_code(BOOST_ERRNO, system_category())));
+        ec->assign(BOOST_ERRNO, system_category());
+        return;
+      }
+      else if (ec != 0) ec->clear();
+
+      if (it.m_imp->handle == 0)  // eof, make end
+      {
+        it.m_imp.reset();
+        return;
+      }
+
+      if (!(filename[0] == dot // !(dot or dot-dot)
+        && (filename.size()== 1
+          || (filename[1] == dot
+            && filename.size()== 2))))
+      {
+        it.m_imp->dir_entry.replace_filename(
+          filename, file_stat, symlink_file_stat);
+        return;
+      }
+    }
+  }
+}  // namespace detail
+} // namespace filesystem
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/filesystem/src/path.cpp b/vendor/pdalboost/libs/filesystem/src/path.cpp
new file mode 100644
index 0000000..3647ed6
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/src/path.cpp
@@ -0,0 +1,964 @@
+//  filesystem path.cpp  -------------------------------------------------------------  //
+
+//  Copyright Beman Dawes 2008
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//  Old standard library configurations, particularly MingGW, don't support wide strings.
+//  Report this with an explicit error message.
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+// define BOOST_FILESYSTEM_SOURCE so that <boost/system/config.hpp> knows
+// the library is being built (possibly exporting rather than importing code)
+#define BOOST_FILESYSTEM_SOURCE 
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/operations.hpp>  // for filesystem_error
+#include <boost/scoped_array.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/assert.hpp>
+#include <algorithm>
+#include <cstddef>
+#include <cstring>
+#include <cassert>
+
+#ifdef BOOST_WINDOWS_API
+# include "windows_file_codecvt.hpp"
+# include <windows.h>
+#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \
+ || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__HAIKU__)
+# include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
+#endif
+
+#ifdef BOOST_FILESYSTEM_DEBUG
+# include <iostream>
+# include <iomanip>
+#endif
+
+namespace fs = pdalboost::filesystem;
+
+using pdalboost::filesystem::path;
+
+using std::string;
+using std::wstring;
+
+using pdalboost::system::error_code;
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                                class path helpers                                    //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+namespace
+{
+  //------------------------------------------------------------------------------------//
+  //                        miscellaneous class path helpers                            //
+  //------------------------------------------------------------------------------------//
+
+  typedef path::value_type        value_type;
+  typedef path::string_type       string_type;
+  typedef string_type::size_type  size_type;
+
+# ifdef BOOST_WINDOWS_API
+
+  const wchar_t separator = L'/';
+  const wchar_t* const separators = L"/\\";
+  const wchar_t* separator_string = L"/";
+  const wchar_t* preferred_separator_string = L"\\";
+  const wchar_t colon = L':';
+  const wchar_t dot = L'.';
+  const wchar_t questionmark = L'?';
+
+  inline bool is_letter(wchar_t c)
+  {
+    return (c >= L'a' && c <=L'z') || (c >= L'A' && c <=L'Z');
+  }
+
+# else
+
+  const char separator = '/';
+  const char* const separators = "/";
+  const char* separator_string = "/";
+  const char* preferred_separator_string = "/";
+  const char dot = '.';
+
+# endif
+
+  inline bool is_separator(fs::path::value_type c)
+  {
+    return c == separator
+#     ifdef BOOST_WINDOWS_API
+      || c == path::preferred_separator
+#     endif
+      ;
+  }
+
+  bool is_root_separator(const string_type& str, size_type pos);
+    // pos is position of the separator
+
+  size_type filename_pos(const string_type& str,
+                          size_type end_pos); // end_pos is past-the-end position
+  //  Returns: 0 if str itself is filename (or empty)
+
+  size_type root_directory_start(const string_type& path, size_type size);
+  //  Returns:  npos if no root_directory found
+
+  void first_element(
+      const string_type& src,
+      size_type& element_pos,
+      size_type& element_size,
+#     if !BOOST_WORKAROUND(BOOST_MSVC, <= 1310) // VC++ 7.1
+      size_type size = string_type::npos
+#     else
+      size_type size = -1
+#     endif
+    );
+
+}  // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                            class path implementation                                 //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+namespace pdalboost
+{
+namespace filesystem
+{
+  path& path::operator/=(const path& p)
+  {
+    if (p.empty())
+      return *this;
+    if (this == &p)  // self-append
+    {
+      path rhs(p);
+      if (!is_separator(rhs.m_pathname[0]))
+        m_append_separator_if_needed();
+      m_pathname += rhs.m_pathname;
+    }
+    else
+    {
+      if (!is_separator(*p.m_pathname.begin()))
+        m_append_separator_if_needed();
+      m_pathname += p.m_pathname;
+    }
+    return *this;
+  }
+
+  path& path::operator/=(const value_type* ptr)
+  {
+    if (!*ptr)
+      return *this;
+    if (ptr >= m_pathname.data()
+      && ptr < m_pathname.data() + m_pathname.size())  // overlapping source
+    {
+      path rhs(ptr);
+      if (!is_separator(rhs.m_pathname[0]))
+        m_append_separator_if_needed();
+      m_pathname += rhs.m_pathname;
+    }
+    else
+    {
+      if (!is_separator(*ptr))
+        m_append_separator_if_needed();
+      m_pathname += ptr;
+    }
+    return *this;
+  }
+
+  int path::compare(const path& p) const BOOST_NOEXCEPT
+  {
+    return detail::lex_compare(begin(), end(), p.begin(), p.end());
+  }
+
+# ifdef BOOST_WINDOWS_API
+
+  const std::string path::generic_string() const
+  {
+    path tmp(*this);
+    std::replace(tmp.m_pathname.begin(), tmp.m_pathname.end(), L'\\', L'/');
+    return tmp.string();
+  }
+
+  const std::string path::generic_string(const codecvt_type& cvt) const
+  {
+    path tmp(*this);
+    std::replace(tmp.m_pathname.begin(), tmp.m_pathname.end(), L'\\', L'/');
+    return tmp.string(cvt);
+  }
+
+  const std::wstring path::generic_wstring() const
+  { 
+    path tmp(*this);
+    std::replace(tmp.m_pathname.begin(), tmp.m_pathname.end(), L'\\', L'/');
+    return tmp.wstring();
+  }
+
+# endif  // BOOST_WINDOWS_API
+
+  //  m_append_separator_if_needed  ----------------------------------------------------//
+
+  path::string_type::size_type path::m_append_separator_if_needed()
+  {
+    if (!m_pathname.empty() &&
+#     ifdef BOOST_WINDOWS_API
+      *(m_pathname.end()-1) != colon && 
+#     endif
+      !is_separator(*(m_pathname.end()-1)))
+    {
+      string_type::size_type tmp(m_pathname.size());
+      m_pathname += preferred_separator;
+      return tmp;
+    }
+    return 0;
+  }
+
+  //  m_erase_redundant_separator  -----------------------------------------------------//
+
+  void path::m_erase_redundant_separator(string_type::size_type sep_pos)
+  {
+    if (sep_pos                         // a separator was added
+      && sep_pos < m_pathname.size()         // and something was appended
+      && (m_pathname[sep_pos+1] == separator // and it was also separator
+#      ifdef BOOST_WINDOWS_API
+       || m_pathname[sep_pos+1] == preferred_separator  // or preferred_separator
+#      endif
+)) { m_pathname.erase(sep_pos, 1); } // erase the added separator
+  }
+
+  //  modifiers  -----------------------------------------------------------------------//
+
+# ifdef BOOST_WINDOWS_API
+  path & path::make_preferred()
+  {
+    std::replace(m_pathname.begin(), m_pathname.end(), L'/', L'\\');
+    return *this;
+  }
+# endif
+
+  path& path::remove_filename()
+  {
+    m_pathname.erase(m_parent_path_end());
+    return *this;
+  }
+
+  path&  path::remove_trailing_separator()
+  {
+    if (!m_pathname.empty() && is_separator(m_pathname[m_pathname.size() - 1]))
+      m_pathname.erase(m_pathname.size() - 1);
+    return *this;
+  }
+
+  path& path::replace_extension(const path& new_extension)
+  {
+    // erase existing extension, including the dot, if any
+    m_pathname.erase(m_pathname.size()-extension().m_pathname.size());
+
+    if (!new_extension.empty())
+    {
+      // append new_extension, adding the dot if necessary
+      if (new_extension.m_pathname[0] != dot)
+        m_pathname.push_back(dot);
+      m_pathname.append(new_extension.m_pathname);
+    }
+
+    return *this;
+  }
+
+  //  decomposition  -------------------------------------------------------------------//
+
+  path  path::root_path() const
+  { 
+    path temp(root_name());
+    if (!root_directory().empty()) temp.m_pathname += root_directory().c_str();
+    return temp;
+  } 
+
+  path path::root_name() const
+  {
+    iterator itr(begin());
+
+    return (itr.m_pos != m_pathname.size()
+      && (
+          (itr.m_element.m_pathname.size() > 1
+            && is_separator(itr.m_element.m_pathname[0])
+            && is_separator(itr.m_element.m_pathname[1])
+   )
+#       ifdef BOOST_WINDOWS_API
+        || itr.m_element.m_pathname[itr.m_element.m_pathname.size()-1] == colon
+#       endif
+  ))
+      ? itr.m_element
+      : path();
+  }
+
+  path path::root_directory() const
+  {
+    size_type pos(root_directory_start(m_pathname, m_pathname.size()));
+
+    return pos == string_type::npos
+      ? path()
+      : path(m_pathname.c_str() + pos, m_pathname.c_str() + pos + 1);
+  }
+
+  path path::relative_path() const
+  {
+    iterator itr(begin());
+
+    for (; itr.m_pos != m_pathname.size()
+      && (is_separator(itr.m_element.m_pathname[0])
+#     ifdef BOOST_WINDOWS_API
+      || itr.m_element.m_pathname[itr.m_element.m_pathname.size()-1] == colon
+#     endif
+    ); ++itr) {}
+
+    return path(m_pathname.c_str() + itr.m_pos);
+  }
+
+  string_type::size_type path::m_parent_path_end() const
+  {
+    size_type end_pos(filename_pos(m_pathname, m_pathname.size()));
+
+    bool filename_was_separator(m_pathname.size()
+      && is_separator(m_pathname[end_pos]));
+
+    // skip separators unless root directory
+    size_type root_dir_pos(root_directory_start(m_pathname, end_pos));
+    for (; 
+      end_pos > 0
+      && (end_pos-1) != root_dir_pos
+      && is_separator(m_pathname[end_pos-1])
+      ;
+      --end_pos) {}
+
+   return (end_pos == 1 && root_dir_pos == 0 && filename_was_separator)
+     ? string_type::npos
+     : end_pos;
+  }
+
+  path path::parent_path() const
+  {
+   size_type end_pos(m_parent_path_end());
+   return end_pos == string_type::npos
+     ? path()
+     : path(m_pathname.c_str(), m_pathname.c_str() + end_pos);
+  }
+
+  path path::filename() const
+  {
+    size_type pos(filename_pos(m_pathname, m_pathname.size()));
+    return (m_pathname.size()
+              && pos
+              && is_separator(m_pathname[pos])
+              && !is_root_separator(m_pathname, pos))
+      ? detail::dot_path()
+      : path(m_pathname.c_str() + pos);
+  }
+
+  path path::stem() const
+  {
+    path name(filename());
+    if (name == detail::dot_path() || name == detail::dot_dot_path()) return name;
+    size_type pos(name.m_pathname.rfind(dot));
+    return pos == string_type::npos
+      ? name
+      : path(name.m_pathname.c_str(), name.m_pathname.c_str() + pos);
+  }
+
+  path path::extension() const
+  {
+    path name(filename());
+    if (name == detail::dot_path() || name == detail::dot_dot_path()) return path();
+    size_type pos(name.m_pathname.rfind(dot));
+    return pos == string_type::npos
+      ? path()
+      : path(name.m_pathname.c_str() + pos);
+  }
+
+  //  lexical operations  --------------------------------------------------------------//
+
+  namespace detail
+  {
+    // C++14 provide a mismatch algorithm with four iterator arguments(), but earlier
+    // standard libraries didn't, so provide this needed functionality.
+    inline
+    std::pair<path::iterator, path::iterator> mismatch(path::iterator it1,
+      path::iterator it1end, path::iterator it2, path::iterator it2end)
+    {
+      for (; it1 != it1end && it2 != it2end && *it1 == *it2;)
+      {
+        ++it1;
+        ++it2;
+      }
+      return std::make_pair(it1, it2);
+    }
+  }
+
+  path path::lexically_relative(const path& base) const
+  {
+    std::pair<path::iterator, path::iterator> mm
+      = detail::mismatch(begin(), end(), base.begin(), base.end());
+    if (mm.first == begin() && mm.second == base.begin())
+      return path();
+    if (mm.first == end() && mm.second == base.end())
+      return detail::dot_path();
+    path tmp;
+    for (; mm.second != base.end(); ++mm.second)
+      tmp /= detail::dot_dot_path();
+    for (; mm.first != end(); ++mm.first)
+      tmp /= *mm.first;
+    return tmp;
+  }
+
+  //  normal  --------------------------------------------------------------------------//
+
+  path path::lexically_normal() const
+  {
+    if (m_pathname.empty())
+      return *this;
+      
+    path temp;
+    iterator start(begin());
+    iterator last(end());
+    iterator stop(last--);
+    for (iterator itr(start); itr != stop; ++itr)
+    {
+      // ignore "." except at start and last
+      if (itr->native().size() == 1
+        && (itr->native())[0] == dot
+        && itr != start
+        && itr != last) continue;
+
+      // ignore a name and following ".."
+      if (!temp.empty()
+        && itr->native().size() == 2
+        && (itr->native())[0] == dot
+        && (itr->native())[1] == dot) // dot dot
+      {
+        string_type lf(temp.filename().native());  
+        if (lf.size() > 0  
+          && (lf.size() != 1
+            || (lf[0] != dot
+              && lf[0] != separator))
+          && (lf.size() != 2 
+            || (lf[0] != dot
+              && lf[1] != dot
+#             ifdef BOOST_WINDOWS_API
+              && lf[1] != colon
+#             endif
+               )
+             )
+          )
+        {
+          temp.remove_filename();
+          //// if not root directory, must also remove "/" if any
+          //if (temp.native().size() > 0
+          //  && temp.native()[temp.native().size()-1]
+          //    == separator)
+          //{
+          //  string_type::size_type rds(
+          //    root_directory_start(temp.native(), temp.native().size()));
+          //  if (rds == string_type::npos
+          //    || rds != temp.native().size()-1) 
+          //  {
+          //    temp.m_pathname.erase(temp.native().size()-1);
+          //  }
+          //}
+
+          iterator next(itr);
+          if (temp.empty() && ++next != stop
+            && next == last && *last == detail::dot_path())
+          {
+            temp /= detail::dot_path();
+          }
+          continue;
+        }
+      }
+
+      temp /= *itr;
+    };
+
+    if (temp.empty())
+      temp /= detail::dot_path();
+    return temp;
+  }
+
+}  // namespace filesystem
+}  // namespace pdalboost
+  
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                         class path helpers implementation                            //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+namespace
+{
+
+  //  is_root_separator  ---------------------------------------------------------------//
+
+  bool is_root_separator(const string_type & str, size_type pos)
+    // pos is position of the separator
+  {
+    BOOST_ASSERT_MSG(!str.empty() && is_separator(str[pos]),
+      "precondition violation");
+
+    // subsequent logic expects pos to be for leftmost slash of a set
+    while (pos > 0 && is_separator(str[pos-1]))
+      --pos;
+
+    //  "/" [...]
+    if (pos == 0)  
+      return true;
+
+# ifdef BOOST_WINDOWS_API
+    //  "c:/" [...]
+    if (pos == 2 && is_letter(str[0]) && str[1] == colon)  
+      return true;
+# endif
+
+    //  "//" name "/"
+    if (pos < 3 || !is_separator(str[0]) || !is_separator(str[1]))
+      return false;
+
+    return str.find_first_of(separators, 2) == pos;
+  }
+
+  //  filename_pos  --------------------------------------------------------------------//
+
+  size_type filename_pos(const string_type & str,
+                          size_type end_pos) // end_pos is past-the-end position
+    // return 0 if str itself is filename (or empty)
+  {
+    // case: "//"
+    if (end_pos == 2 
+      && is_separator(str[0])
+      && is_separator(str[1])) return 0;
+
+    // case: ends in "/"
+    if (end_pos && is_separator(str[end_pos-1]))
+      return end_pos-1;
+    
+    // set pos to start of last element
+    size_type pos(str.find_last_of(separators, end_pos-1));
+
+#   ifdef BOOST_WINDOWS_API
+    if (pos == string_type::npos && end_pos > 1)
+      pos = str.find_last_of(colon, end_pos-2);
+#   endif
+
+    return (pos == string_type::npos // path itself must be a filename (or empty)
+      || (pos == 1 && is_separator(str[0]))) // or net
+        ? 0 // so filename is entire string
+        : pos + 1; // or starts after delimiter
+  }
+
+  //  root_directory_start  ------------------------------------------------------------//
+
+  size_type root_directory_start(const string_type & path, size_type size)
+  // return npos if no root_directory found
+  {
+
+#   ifdef BOOST_WINDOWS_API
+    // case "c:/"
+    if (size > 2
+      && path[1] == colon
+      && is_separator(path[2])) return 2;
+#   endif
+
+    // case "//"
+    if (size == 2
+      && is_separator(path[0])
+      && is_separator(path[1])) return string_type::npos;
+
+#   ifdef BOOST_WINDOWS_API
+    // case "\\?\"
+    if (size > 4
+      && is_separator(path[0])
+      && is_separator(path[1])
+      && path[2] == questionmark
+      && is_separator(path[3]))
+    {
+      string_type::size_type pos(path.find_first_of(separators, 4));
+        return pos < size ? pos : string_type::npos;
+    }
+#   endif
+
+    // case "//net {/}"
+    if (size > 3
+      && is_separator(path[0])
+      && is_separator(path[1])
+      && !is_separator(path[2]))
+    {
+      string_type::size_type pos(path.find_first_of(separators, 2));
+      return pos < size ? pos : string_type::npos;
+    }
+    
+    // case "/"
+    if (size > 0 && is_separator(path[0])) return 0;
+
+    return string_type::npos;
+  }
+
+  //  first_element --------------------------------------------------------------------//
+  //   sets pos and len of first element, excluding extra separators
+  //   if src.empty(), sets pos,len, to 0,0.
+
+  void first_element(
+      const string_type & src,
+      size_type & element_pos,
+      size_type & element_size,
+      size_type size
+)
+  {
+    if (size == string_type::npos) size = src.size();
+    element_pos = 0;
+    element_size = 0;
+    if (src.empty()) return;
+
+    string_type::size_type cur(0);
+    
+    // deal with // [network]
+    if (size >= 2 && is_separator(src[0])
+      && is_separator(src[1])
+      && (size == 2
+        || !is_separator(src[2])))
+    { 
+      cur += 2;
+      element_size += 2;
+    }
+
+    // leading (not non-network) separator
+    else if (is_separator(src[0]))
+    {
+      ++element_size;
+      // bypass extra leading separators
+      while (cur+1 < size
+        && is_separator(src[cur+1]))
+      {
+        ++cur;
+        ++element_pos;
+      }
+      return;
+    }
+
+    // at this point, we have either a plain name, a network name,
+    // or (on Windows only) a device name
+
+    // find the end
+    while (cur < size
+#     ifdef BOOST_WINDOWS_API
+      && src[cur] != colon
+#     endif
+      && !is_separator(src[cur]))
+    {
+      ++cur;
+      ++element_size;
+    }
+
+#   ifdef BOOST_WINDOWS_API
+    if (cur == size) return;
+    // include device delimiter
+    if (src[cur] == colon)
+      { ++element_size; }
+#   endif
+
+    return;
+  }
+
+}  // unnamed namespace
+
+
+namespace pdalboost
+{
+namespace filesystem
+{
+  namespace detail
+  {
+    BOOST_FILESYSTEM_DECL
+      int lex_compare(path::iterator first1, path::iterator last1,
+        path::iterator first2, path::iterator last2)
+    {
+      for (; first1 != last1 && first2 != last2;)
+      {
+        if (first1->native() < first2->native()) return -1;
+        if (first2->native() < first1->native()) return 1;
+        BOOST_ASSERT(first2->native() == first1->native());
+        ++first1;
+        ++first2;
+      }
+      if (first1 == last1 && first2 == last2)
+        return 0;
+      return first1 == last1 ? -1 : 1;
+    }
+
+    BOOST_FILESYSTEM_DECL
+    const path&  dot_path()
+    {
+#   ifdef BOOST_WINDOWS_API
+      static const fs::path dot_pth(L".");
+#   else
+      static const fs::path dot_pth(".");
+#   endif
+      return dot_pth;
+    }
+
+    BOOST_FILESYSTEM_DECL
+    const path&  dot_dot_path()
+    {
+#   ifdef BOOST_WINDOWS_API
+      static const fs::path dot_dot(L"..");
+#   else
+      static const fs::path dot_dot("..");
+#   endif
+      return dot_dot;
+    }
+  }
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                        class path::iterator implementation                           //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+  path::iterator path::begin() const
+  {
+    iterator itr;
+    itr.m_path_ptr = this;
+    size_type element_size;
+    first_element(m_pathname, itr.m_pos, element_size);
+    itr.m_element = m_pathname.substr(itr.m_pos, element_size);
+    if (itr.m_element.m_pathname == preferred_separator_string)
+      itr.m_element.m_pathname = separator_string;  // needed for Windows, harmless on POSIX
+    return itr;
+  }
+
+  path::iterator path::end() const
+  {
+    iterator itr;
+    itr.m_path_ptr = this;
+    itr.m_pos = m_pathname.size();
+    return itr;
+  }
+
+  void path::m_path_iterator_increment(path::iterator & it)
+  {
+    BOOST_ASSERT_MSG(it.m_pos < it.m_path_ptr->m_pathname.size(),
+      "path::basic_iterator increment past end()");
+
+    // increment to position past current element; if current element is implicit dot,
+    // this will cause it.m_pos to represent the end iterator
+    it.m_pos += it.m_element.m_pathname.size();
+
+    // if the end is reached, we are done
+    if (it.m_pos == it.m_path_ptr->m_pathname.size())
+    {
+      it.m_element.clear();  // aids debugging, may release unneeded memory
+      return;
+    }
+
+    // both POSIX and Windows treat paths that begin with exactly two separators specially
+    bool was_net(it.m_element.m_pathname.size() > 2
+      && is_separator(it.m_element.m_pathname[0])
+      && is_separator(it.m_element.m_pathname[1])
+      && !is_separator(it.m_element.m_pathname[2]));
+
+    // process separator (Windows drive spec is only case not a separator)
+    if (is_separator(it.m_path_ptr->m_pathname[it.m_pos]))
+    {
+      // detect root directory
+      if (was_net
+#       ifdef BOOST_WINDOWS_API
+        // case "c:/"
+        || it.m_element.m_pathname[it.m_element.m_pathname.size()-1] == colon
+#       endif
+         )
+      {
+        it.m_element.m_pathname = separator;  // generic format; see docs
+        return;
+      }
+
+      // skip separators until it.m_pos points to the start of the next element
+      while (it.m_pos != it.m_path_ptr->m_pathname.size()
+        && is_separator(it.m_path_ptr->m_pathname[it.m_pos]))
+        { ++it.m_pos; }
+
+      // detect trailing separator, and treat it as ".", per POSIX spec
+      if (it.m_pos == it.m_path_ptr->m_pathname.size()
+        && !is_root_separator(it.m_path_ptr->m_pathname, it.m_pos-1)) 
+      {
+        --it.m_pos;
+        it.m_element = detail::dot_path();
+        return;
+      }
+    }
+
+    // get m_element
+    size_type end_pos(it.m_path_ptr->m_pathname.find_first_of(separators, it.m_pos));
+    if (end_pos == string_type::npos)
+      end_pos = it.m_path_ptr->m_pathname.size();
+    it.m_element = it.m_path_ptr->m_pathname.substr(it.m_pos, end_pos - it.m_pos);
+  }
+
+  void path::m_path_iterator_decrement(path::iterator & it)
+  {
+    BOOST_ASSERT_MSG(it.m_pos, "path::iterator decrement past begin()");
+
+    size_type end_pos(it.m_pos);
+
+    // if at end and there was a trailing non-root '/', return "."
+    if (it.m_pos == it.m_path_ptr->m_pathname.size()
+      && it.m_path_ptr->m_pathname.size() > 1
+      && is_separator(it.m_path_ptr->m_pathname[it.m_pos-1])
+      && !is_root_separator(it.m_path_ptr->m_pathname, it.m_pos-1) 
+       )
+    {
+      --it.m_pos;
+      it.m_element = detail::dot_path();
+      return;
+    }
+
+    size_type root_dir_pos(root_directory_start(it.m_path_ptr->m_pathname, end_pos));
+
+    // skip separators unless root directory
+    for (
+      ; 
+      end_pos > 0
+      && (end_pos-1) != root_dir_pos
+      && is_separator(it.m_path_ptr->m_pathname[end_pos-1])
+      ;
+      --end_pos) {}
+
+    it.m_pos = filename_pos(it.m_path_ptr->m_pathname, end_pos);
+    it.m_element = it.m_path_ptr->m_pathname.substr(it.m_pos, end_pos - it.m_pos);
+    if (it.m_element.m_pathname == preferred_separator_string) // needed for Windows, harmless on POSIX 
+      it.m_element.m_pathname = separator_string;    // generic format; see docs 
+  }
+
+}  // namespace filesystem
+}  // namespace pdalboost
+
+namespace
+{
+
+  //------------------------------------------------------------------------------------//
+  //                                locale helpers                                      //
+  //------------------------------------------------------------------------------------//
+
+  //  Prior versions of these locale and codecvt implementations tried to take advantage
+  //  of static initialization where possible, kept a local copy of the current codecvt
+  //  facet (to avoid codecvt() having to call use_facet()), and was not multi-threading
+  //  safe (again for efficiency).
+  //
+  //  This was error prone, and required different implementation techniques depending
+  //  on the compiler and also whether static or dynamic linking was used. Furthermore,
+  //  users could not easily provide their multi-threading safe wrappers because the
+  //  path interface requires the implementation itself to call codecvt() to obtain the
+  //  default facet, and the initialization of the static within path_locale() could race.
+  //
+  //  The code below is portable to all platforms, is much simpler, and hopefully will be 
+  //  much more robust. Timing tests (on Windows, using a Visual C++ release build)
+  //  indicated the current code is roughly 9% slower than the previous code, and that
+  //  seems a small price to pay for better code that is easier to use. 
+
+  std::locale default_locale()
+  {
+# if defined(BOOST_WINDOWS_API)
+    std::locale global_loc = std::locale();
+    return std::locale(global_loc, new windows_file_codecvt);
+# elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \
+  || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__HAIKU__)
+    // "All BSD system functions expect their string parameters to be in UTF-8 encoding
+    // and nothing else." See
+    // http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPInternational/Articles/FileEncodings.html
+    //
+    // "The kernel will reject any filename that is not a valid UTF-8 string, and it will
+    // even be normalized (to Unicode NFD) before stored on disk, at least when using HFS.
+    // The right way to deal with it would be to always convert the filename to UTF-8
+    // before trying to open/create a file." See
+    // http://lists.apple.com/archives/unix-porting/2007/Sep/msg00023.html
+    //
+    // "How a file name looks at the API level depends on the API. Current Carbon APIs
+    // handle file names as an array of UTF-16 characters; POSIX ones handle them as an
+    // array of UTF-8, which is why UTF-8 works well in Terminal. How it's stored on disk
+    // depends on the disk format; HFS+ uses UTF-16, but that's not important in most
+    // cases." See
+    // http://lists.apple.com/archives/applescript-users/2002/Sep/msg00319.html
+    //
+    // Many thanks to Peter Dimov for digging out the above references!
+
+    std::locale global_loc = std::locale();
+    return std::locale(global_loc, new pdalboost::filesystem::detail::utf8_codecvt_facet);
+# else  // Other POSIX
+    // ISO C calls std::locale("") "the locale-specific native environment", and this
+    // locale is the default for many POSIX-based operating systems such as Linux.
+    return std::locale("");
+# endif
+  }
+
+  std::locale& path_locale()
+  // std::locale("") construction, needed on non-Apple POSIX systems, can throw
+  // (if environmental variables LC_MESSAGES or LANG are wrong, for example), so
+  // path_locale() provides lazy initialization via a local static to ensure that any 
+  // exceptions occur after main() starts and so can be caught. Furthermore,
+  // path_locale() is only called if path::codecvt() or path::imbue() are themselves
+  // actually called, ensuring that an exception will only be thrown if std::locale("")
+  // is really needed.
+  {
+    // [locale] paragraph 6: Once a facet reference is obtained from a locale object by
+    // calling use_facet<>, that reference remains usable, and the results from member
+    // functions of it may be cached and re-used, as long as some locale object refers
+    // to that facet.
+    static std::locale loc(default_locale());
+#ifdef BOOST_FILESYSTEM_DEBUG
+    std::cout << "***** path_locale() called" << std::endl;
+#endif
+    return loc;
+  }
+}  // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+//              path::codecvt() and path::imbue() implementation                        //
+//--------------------------------------------------------------------------------------//
+
+namespace pdalboost
+{
+namespace filesystem
+{
+  // See comments above
+
+  const path::codecvt_type& path::codecvt()
+  {
+#ifdef BOOST_FILESYSTEM_DEBUG
+    std::cout << "***** path::codecvt() called" << std::endl;
+#endif
+    BOOST_ASSERT_MSG(&path_locale(), "pdalboost::filesystem::path locale initialization error");
+
+    return std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >(path_locale());
+  }
+
+  std::locale path::imbue(const std::locale& loc)
+  {
+#ifdef BOOST_FILESYSTEM_DEBUG
+    std::cout << "***** path::imbue() called" << std::endl;
+#endif
+    std::locale temp(path_locale());
+    path_locale() = loc;
+    return temp;
+  }
+
+}  // namespace filesystem
+}  // namespace pdalboost
diff --git a/vendor/pdalboost/libs/filesystem/src/path_traits.cpp b/vendor/pdalboost/libs/filesystem/src/path_traits.cpp
new file mode 100644
index 0000000..cb16406
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/src/path_traits.cpp
@@ -0,0 +1,200 @@
+//  filesystem path_traits.cpp  --------------------------------------------------------//
+
+//  Copyright Beman Dawes 2008, 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+// define BOOST_FILESYSTEM_SOURCE so that <boost/system/config.hpp> knows
+// the library is being built (possibly exporting rather than importing code)
+#define BOOST_FILESYSTEM_SOURCE 
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/path_traits.hpp>
+#include <boost/system/system_error.hpp>
+#include <boost/scoped_array.hpp>
+#include <locale>   // for codecvt_base::result
+#include <cstring>  // for strlen
+#include <cwchar>   // for wcslen
+
+namespace pt = pdalboost::filesystem::path_traits;
+namespace fs = pdalboost::filesystem;
+namespace bs = pdalboost::system;
+
+//--------------------------------------------------------------------------------------//
+//                                  configuration                                       //
+//--------------------------------------------------------------------------------------//
+
+#ifndef BOOST_FILESYSTEM_CODECVT_BUF_SIZE
+# define BOOST_FILESYSTEM_CODECVT_BUF_SIZE 256
+#endif
+
+namespace {
+
+  const std::size_t default_codecvt_buf_size = BOOST_FILESYSTEM_CODECVT_BUF_SIZE;
+
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//  The public convert() functions do buffer management, and then forward to the        //
+//  convert_aux() functions for the actual call to the codecvt facet.                   //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+//--------------------------------------------------------------------------------------//
+//                      convert_aux const char* to wstring                             //
+//--------------------------------------------------------------------------------------//
+
+  void convert_aux(
+                   const char* from,
+                   const char* from_end,
+                   wchar_t* to, wchar_t* to_end,
+                   std::wstring & target,
+                   const pt::codecvt_type & cvt)
+  {
+    //std::cout << std::hex
+    //          << " from=" << std::size_t(from)
+    //          << " from_end=" << std::size_t(from_end)
+    //          << " to=" << std::size_t(to)
+    //          << " to_end=" << std::size_t(to_end)
+    //          << std::endl;
+
+    std::mbstate_t state  = std::mbstate_t();  // perhaps unneeded, but cuts bug reports
+    const char* from_next;
+    wchar_t* to_next;
+
+    std::codecvt_base::result res;
+
+    if ((res=cvt.in(state, from, from_end, from_next,
+           to, to_end, to_next)) != std::codecvt_base::ok)
+    {
+      //std::cout << " result is " << static_cast<int>(res) << std::endl;
+      BOOST_FILESYSTEM_THROW(bs::system_error(res, fs::codecvt_error_category(),
+        "pdalboost::filesystem::path codecvt to wstring"));
+    }
+    target.append(to, to_next); 
+  }
+
+//--------------------------------------------------------------------------------------//
+//                      convert_aux const wchar_t* to string                           //
+//--------------------------------------------------------------------------------------//
+
+  void convert_aux(
+                   const wchar_t* from,
+                   const wchar_t* from_end,
+                   char* to, char* to_end,
+                   std::string & target,
+                   const pt::codecvt_type & cvt)
+  {
+    //std::cout << std::hex
+    //          << " from=" << std::size_t(from)
+    //          << " from_end=" << std::size_t(from_end)
+    //          << " to=" << std::size_t(to)
+    //          << " to_end=" << std::size_t(to_end)
+    //          << std::endl;
+
+    std::mbstate_t state  = std::mbstate_t();  // perhaps unneeded, but cuts bug reports
+    const wchar_t* from_next;
+    char* to_next;
+
+    std::codecvt_base::result res;
+
+    if ((res=cvt.out(state, from, from_end, from_next,
+           to, to_end, to_next)) != std::codecvt_base::ok)
+    {
+      //std::cout << " result is " << static_cast<int>(res) << std::endl;
+      BOOST_FILESYSTEM_THROW(bs::system_error(res, fs::codecvt_error_category(),
+        "pdalboost::filesystem::path codecvt to string"));
+    }
+    target.append(to, to_next); 
+  }
+  
+}  // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+//                                   path_traits                                        //
+//--------------------------------------------------------------------------------------//
+
+namespace pdalboost { namespace filesystem { namespace path_traits {
+
+//--------------------------------------------------------------------------------------//
+//                          convert const char* to wstring                              //
+//--------------------------------------------------------------------------------------//
+
+  BOOST_FILESYSTEM_DECL
+  void convert(const char* from,
+                const char* from_end,    // 0 for null terminated MBCS
+                std::wstring & to,
+                const codecvt_type & cvt)
+  {
+    BOOST_ASSERT(from);
+
+    if (!from_end)  // null terminated
+    {
+      from_end = from + std::strlen(from);
+    }
+
+    if (from == from_end) return;
+
+    std::size_t buf_size = (from_end - from) * 3;  // perhaps too large, but that's OK
+
+    //  dynamically allocate a buffer only if source is unusually large
+    if (buf_size > default_codecvt_buf_size)
+    {
+      pdalboost::scoped_array< wchar_t > buf(new wchar_t [buf_size]);
+      convert_aux(from, from_end, buf.get(), buf.get()+buf_size, to, cvt);
+    }
+    else
+    {
+      wchar_t buf[default_codecvt_buf_size];
+      convert_aux(from, from_end, buf, buf+default_codecvt_buf_size, to, cvt);
+    }
+  }
+
+//--------------------------------------------------------------------------------------//
+//                         convert const wchar_t* to string                            //
+//--------------------------------------------------------------------------------------//
+
+  BOOST_FILESYSTEM_DECL
+  void convert(const wchar_t* from,
+                const wchar_t* from_end,  // 0 for null terminated MBCS
+                std::string & to,
+                const codecvt_type & cvt)
+  {
+    BOOST_ASSERT(from);
+
+    if (!from_end)  // null terminated
+    {
+      from_end = from + std::wcslen(from);
+    }
+
+    if (from == from_end) return;
+
+    //  The codecvt length functions may not be implemented, and I don't really
+    //  understand them either. Thus this code is just a guess; if it turns
+    //  out the buffer is too small then an error will be reported and the code
+    //  will have to be fixed.
+    std::size_t buf_size = (from_end - from) * 4;  // perhaps too large, but that's OK
+    buf_size += 4;  // encodings like shift-JIS need some prefix space
+
+    //  dynamically allocate a buffer only if source is unusually large
+    if (buf_size > default_codecvt_buf_size)
+    {
+      pdalboost::scoped_array< char > buf(new char [buf_size]);
+      convert_aux(from, from_end, buf.get(), buf.get()+buf_size, to, cvt);
+    }
+    else
+    {
+      char buf[default_codecvt_buf_size];
+      convert_aux(from, from_end, buf, buf+default_codecvt_buf_size, to, cvt);
+    }
+  }
+}}} // namespace pdalboost::filesystem::path_traits
diff --git a/vendor/pdalboost/libs/filesystem/src/portability.cpp b/vendor/pdalboost/libs/filesystem/src/portability.cpp
new file mode 100644
index 0000000..46c922a
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/src/portability.cpp
@@ -0,0 +1,119 @@
+//  portability.cpp  -------------------------------------------------------------------//
+
+//  Copyright 2002-2005 Beman Dawes
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
+//  at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------// 
+
+// define BOOST_FILESYSTEM_SOURCE so that <boost/filesystem/config.hpp> knows
+// the library is being built (possibly exporting rather than importing code)
+#define BOOST_FILESYSTEM_SOURCE 
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/config.hpp>
+#include <boost/filesystem/path.hpp>
+
+namespace fs = pdalboost::filesystem;
+
+#include <cstring> // SGI MIPSpro compilers need this
+
+# ifdef BOOST_NO_STDC_NAMESPACE
+    namespace std { using ::strerror; }
+# endif
+
+//--------------------------------------------------------------------------------------//
+
+namespace
+{
+  const char invalid_chars[] =
+    "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"
+    "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"
+    "<>:\"/\\|";
+  // note that the terminating '\0' is part of the string - thus the size below
+  // is sizeof(invalid_chars) rather than sizeof(invalid_chars)-1.  I 
+  const std::string windows_invalid_chars(invalid_chars, sizeof(invalid_chars));
+
+  const std::string valid_posix(
+    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-");
+
+} // unnamed namespace
+
+namespace pdalboost
+{
+  namespace filesystem
+  {
+
+    //  name_check functions  ----------------------------------------------//
+
+#   ifdef BOOST_WINDOWS
+    BOOST_FILESYSTEM_DECL bool native(const std::string & name)
+    {
+      return windows_name(name);
+    }
+#   else
+    BOOST_FILESYSTEM_DECL bool native(const std::string & name)
+    {
+      return  name.size() != 0
+        && name[0] != ' '
+        && name.find('/') == std::string::npos;
+    }
+#   endif
+
+    BOOST_FILESYSTEM_DECL bool portable_posix_name(const std::string & name)
+    {
+      return name.size() != 0
+        && name.find_first_not_of(valid_posix) == std::string::npos;     
+    }
+
+    BOOST_FILESYSTEM_DECL bool windows_name(const std::string & name)
+    {
+      return name.size() != 0
+        && name[0] != ' '
+        && name.find_first_of(windows_invalid_chars) == std::string::npos
+        && *(name.end()-1) != ' '
+        && (*(name.end()-1) != '.'
+          || name.length() == 1 || name == "..");
+    }
+
+    BOOST_FILESYSTEM_DECL bool portable_name(const std::string & name)
+    {
+      return
+        name.size() != 0
+        && (name == "."
+          || name == ".."
+          || (windows_name(name)
+            && portable_posix_name(name)
+            && name[0] != '.' && name[0] != '-'));
+    }
+
+    BOOST_FILESYSTEM_DECL bool portable_directory_name(const std::string & name)
+    {
+      return
+        name == "."
+        || name == ".."
+        || (portable_name(name)
+          && name.find('.') == std::string::npos);
+    }
+
+    BOOST_FILESYSTEM_DECL bool portable_file_name(const std::string & name)
+    {
+      std::string::size_type pos;
+      return
+         portable_name(name)
+         && name != "."
+         && name != ".."
+         && ((pos = name.find('.')) == std::string::npos
+             || (name.find('.', pos+1) == std::string::npos
+               && (pos + 5) > name.length()))
+        ;
+    }
+
+  } // namespace filesystem
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/filesystem/src/unique_path.cpp b/vendor/pdalboost/libs/filesystem/src/unique_path.cpp
new file mode 100644
index 0000000..22b3472
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/src/unique_path.cpp
@@ -0,0 +1,161 @@
+//  filesystem unique_path.cpp  --------------------------------------------------------//
+
+//  Copyright Beman Dawes 2010
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------// 
+
+// define BOOST_FILESYSTEM_SOURCE so that <boost/filesystem/config.hpp> knows
+// the library is being built (possibly exporting rather than importing code)
+#define BOOST_FILESYSTEM_SOURCE 
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/operations.hpp>
+#include <cassert>
+
+# ifdef BOOST_POSIX_API
+#   include <fcntl.h>
+#   ifdef BOOST_HAS_UNISTD_H
+#      include <unistd.h>
+#   endif
+# else // BOOST_WINDOWS_API
+#   include <windows.h>
+#   include <wincrypt.h>
+#   pragma comment(lib, "Advapi32.lib")
+# endif
+
+namespace {
+
+void fail(int err, pdalboost::system::error_code* ec)
+{
+  if (ec == 0)
+    BOOST_FILESYSTEM_THROW( pdalboost::system::system_error(err,
+      pdalboost::system::system_category(),
+      "pdalboost::filesystem::unique_path"));
+
+  ec->assign(err, pdalboost::system::system_category());
+  return;
+}
+
+#ifdef BOOST_WINDOWS_API
+
+int acquire_crypt_handle(HCRYPTPROV& handle)
+{
+  if (::CryptAcquireContextW(&handle, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
+    return 0;
+
+  int errval = ::GetLastError();
+  if (errval != NTE_BAD_KEYSET)
+    return errval;
+
+  if (::CryptAcquireContextW(&handle, 0, 0, PROV_RSA_FULL, CRYPT_NEWKEYSET | CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
+    return 0;
+
+  errval = ::GetLastError();
+  // Another thread could have attempted to create the keyset at the same time.
+  if (errval != NTE_EXISTS)
+    return errval;
+
+  if (::CryptAcquireContextW(&handle, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
+    return 0;
+
+  return ::GetLastError();
+}
+
+#endif
+
+void system_crypt_random(void* buf, std::size_t len, pdalboost::system::error_code* ec)
+{
+# ifdef BOOST_POSIX_API
+
+  int file = open("/dev/urandom", O_RDONLY);
+  if (file == -1)
+  {
+    file = open("/dev/random", O_RDONLY);
+    if (file == -1)
+    {
+      fail(errno, ec);
+      return;
+    }
+  }
+
+  size_t bytes_read = 0;
+  while (bytes_read < len)
+  {
+    ssize_t n = read(file, buf, len - bytes_read);
+    if (n == -1)
+    {
+      close(file);
+      fail(errno, ec);
+      return;
+    }
+    bytes_read += n;
+    buf = static_cast<char*>(buf) + n;
+  }
+
+  close(file);
+
+# else // BOOST_WINDOWS_API
+
+  HCRYPTPROV handle;
+  int errval = acquire_crypt_handle(handle);
+
+  if (!errval)
+  {
+    BOOL gen_ok = ::CryptGenRandom(handle, len, static_cast<unsigned char*>(buf));
+    if (!gen_ok)
+      errval = ::GetLastError();
+    ::CryptReleaseContext(handle, 0);
+  }
+
+  if (!errval) return;
+
+  fail(errval, ec);
+# endif
+}
+
+}  // unnamed namespace
+
+namespace pdalboost { namespace filesystem { namespace detail {
+
+BOOST_FILESYSTEM_DECL
+path unique_path(const path& model, system::error_code* ec)
+{
+  std::wstring s (model.wstring());  // std::string ng for MBCS encoded POSIX
+  const wchar_t hex[] = L"0123456789abcdef";
+  char ran[] = "123456789abcdef";  // init to avoid clang static analyzer message
+                                   // see ticket #8954
+  assert(sizeof(ran) == 16);
+  const int max_nibbles = 2 * sizeof(ran);   // 4-bits per nibble
+
+  int nibbles_used = max_nibbles;
+  for(std::wstring::size_type i=0; i < s.size(); ++i)
+  {
+    if (s[i] == L'%')                        // digit request
+    {
+      if (nibbles_used == max_nibbles)
+      {
+        system_crypt_random(ran, sizeof(ran), ec);
+        if (ec != 0 && *ec)
+          return "";
+        nibbles_used = 0;
+      }
+      int c = ran[nibbles_used/2];
+      c >>= 4 * (nibbles_used++ & 1);  // if odd, shift right 1 nibble
+      s[i] = hex[c & 0xf];             // convert to hex digit and replace
+    }
+  }
+
+  if (ec != 0) ec->clear();
+
+  return s;
+}
+
+}}}
diff --git a/vendor/pdalboost/libs/filesystem/src/utf8_codecvt_facet.cpp b/vendor/pdalboost/libs/filesystem/src/utf8_codecvt_facet.cpp
new file mode 100644
index 0000000..17028db
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/src/utf8_codecvt_facet.cpp
@@ -0,0 +1,27 @@
+// Copyright Vladimir Prus 2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// For HP-UX, request that WCHAR_MAX and WCHAR_MIN be defined as macros,
+// not casts. See ticket 5048
+#define _INCLUDE_STDCSOURCE_199901
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#define BOOST_FILESYSTEM_SOURCE
+#include <boost/filesystem/config.hpp>
+
+#define BOOST_UTF8_BEGIN_NAMESPACE \
+     namespace pdalboost { namespace filesystem { namespace detail {
+
+#define BOOST_UTF8_END_NAMESPACE }}}
+#define BOOST_UTF8_DECL BOOST_FILESYSTEM_DECL
+
+#include <boost/detail/utf8_codecvt_facet.ipp>
+
+#undef BOOST_UTF8_BEGIN_NAMESPACE
+#undef BOOST_UTF8_END_NAMESPACE
+#undef BOOST_UTF8_DECL
diff --git a/vendor/pdalboost/libs/filesystem/src/windows_file_codecvt.cpp b/vendor/pdalboost/libs/filesystem/src/windows_file_codecvt.cpp
new file mode 100644
index 0000000..998db60
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/src/windows_file_codecvt.cpp
@@ -0,0 +1,75 @@
+//  filesystem windows_file_codecvt.cpp  -----------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------// 
+
+// define BOOST_FILESYSTEM_SOURCE so that <boost/system/config.hpp> knows
+// the library is being built (possibly exporting rather than importing code)
+#define BOOST_FILESYSTEM_SOURCE 
+
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/config.hpp>
+#include <cwchar>  // for mbstate_t
+
+#ifdef BOOST_WINDOWS_API
+
+#include "windows_file_codecvt.hpp"
+
+// Versions of MinGW prior to GCC 4.6 requires this
+#ifndef WINVER
+# define WINVER 0x0500
+#endif
+
+#include <windows.h>
+
+  std::codecvt_base::result windows_file_codecvt::do_in(
+    std::mbstate_t &, 
+    const char* from, const char* from_end, const char*& from_next,
+    wchar_t* to, wchar_t* to_end, wchar_t*& to_next) const
+  {
+    UINT codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP;
+
+    int count;
+    if ((count = ::MultiByteToWideChar(codepage, MB_PRECOMPOSED, from,
+      from_end - from, to, to_end - to)) == 0) 
+    {
+      return error;  // conversion failed
+    }
+
+    from_next = from_end;
+    to_next = to + count;
+    *to_next = L'\0';
+    return ok;
+ }
+
+  std::codecvt_base::result windows_file_codecvt::do_out(
+    std::mbstate_t &,
+    const wchar_t* from, const wchar_t* from_end, const wchar_t*  & from_next,
+    char* to, char* to_end, char* & to_next) const
+  {
+    UINT codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP;
+
+    int count;
+    if ((count = ::WideCharToMultiByte(codepage, WC_NO_BEST_FIT_CHARS, from,
+      from_end - from, to, to_end - to, 0, 0)) == 0)
+    {
+      return error;  // conversion failed
+    }
+
+    from_next = from_end;
+    to_next = to + count;
+    *to_next = '\0';
+    return ok;
+  }
+
+  # endif  // BOOST_WINDOWS_API
+
diff --git a/vendor/pdalboost/libs/filesystem/src/windows_file_codecvt.hpp b/vendor/pdalboost/libs/filesystem/src/windows_file_codecvt.hpp
new file mode 100644
index 0000000..2bd797f
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/src/windows_file_codecvt.hpp
@@ -0,0 +1,56 @@
+//  filesystem windows_file_codecvt.hpp  -----------------------------------------------//
+
+//  Copyright Beman Dawes 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#ifndef BOOST_FILESYSTEM3_WIN_FILE_CODECVT_HPP
+#define BOOST_FILESYSTEM3_WIN_FILE_CODECVT_HPP
+
+#include <boost/filesystem/config.hpp>
+#include <locale>  
+
+  //------------------------------------------------------------------------------------//
+  //                                                                                    //
+  //                          class windows_file_codecvt                                //
+  //                                                                                    //
+  //  Warning: partial implementation; even do_in and do_out only partially meet the    //
+  //  standard library specifications as the "to" buffer must hold the entire result.   //
+  //                                                                                    //
+  //------------------------------------------------------------------------------------//
+
+  class BOOST_FILESYSTEM_DECL windows_file_codecvt
+    : public std::codecvt< wchar_t, char, std::mbstate_t >  
+  {
+  public:
+    explicit windows_file_codecvt(std::size_t refs = 0)
+        : std::codecvt<wchar_t, char, std::mbstate_t>(refs) {}
+  protected:
+
+    virtual bool do_always_noconv() const throw() { return false; }
+
+    //  seems safest to assume variable number of characters since we don't
+    //  actually know what codepage is active
+    virtual int do_encoding() const throw() { return 0; }
+
+    virtual std::codecvt_base::result do_in(std::mbstate_t& state, 
+      const char* from, const char* from_end, const char*& from_next,
+      wchar_t* to, wchar_t* to_end, wchar_t*& to_next) const;
+
+    virtual std::codecvt_base::result do_out(std::mbstate_t & state,
+      const wchar_t* from, const wchar_t* from_end, const wchar_t*& from_next,
+      char* to, char* to_end, char*& to_next) const;
+
+    virtual std::codecvt_base::result do_unshift(std::mbstate_t&,
+        char* /*from*/, char* /*to*/, char* & /*next*/) const  { return ok; } 
+
+    virtual int do_length(std::mbstate_t&,
+      const char* /*from*/, const char* /*from_end*/, std::size_t /*max*/) const  { return 0; }
+
+    virtual int do_max_length() const throw () { return 0; }
+  };
+
+#endif  // BOOST_FILESYSTEM3_WIN_FILE_CODECVT_HPP
diff --git a/vendor/pdalboost/libs/filesystem/test/Jamfile.v2 b/vendor/pdalboost/libs/filesystem/test/Jamfile.v2
new file mode 100644
index 0000000..8f831a6
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/Jamfile.v2
@@ -0,0 +1,36 @@
+# Boost Filesystem Library test Jamfile
+
+# (C) Copyright Beman Dawes 2002-2006
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+project 
+    : requirements
+      <library>/boost/filesystem//pdalboost_filesystem
+      <library>/boost/system//pdalboost_system
+      <toolset>msvc:<asynch-exceptions>on
+    ;
+    
+# Some tests are run both statically and as shared libraries since Filesystem
+# has a history of bugs that appear only in one type of build or the other.
+
+   test-suite "filesystem" :
+       [ run convenience_test.cpp ]
+       [ compile macro_default_test.cpp ]
+       [ run odr1_test.cpp odr2_test.cpp ]
+       [ run deprecated_test.cpp ]                  
+       [ run fstream_test.cpp ]
+       [ run large_file_support_test.cpp ]
+       [ run locale_info.cpp  : : : <test-info>always_show_run_output ]
+       [ run operations_test.cpp :  :  : <link>shared <test-info>always_show_run_output ]
+       [ run operations_test.cpp :  :  : <link>static : operations_test_static ]
+       [ run operations_unit_test.cpp :  :  : <link>shared <test-info>always_show_run_output ]
+       [ run path_test.cpp :  :  : <link>shared ]                  
+       [ run path_test.cpp :  :  : <link>static : path_test_static ]                  
+       [ run path_unit_test.cpp :  :  : <link>shared ]                  
+       [ run path_unit_test.cpp :  :  : <link>static : path_unit_test_static ]
+       [ run relative_test.cpp ]       
+       [ run ../example/simple_ls.cpp ]
+       [ run ../example/file_status.cpp ]
+
+       ;
diff --git a/vendor/pdalboost/libs/filesystem/test/convenience_test.cpp b/vendor/pdalboost/libs/filesystem/test/convenience_test.cpp
new file mode 100644
index 0000000..fd68ae8
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/convenience_test.cpp
@@ -0,0 +1,177 @@
+//  libs/filesystem/test/convenience_test.cpp  -----------------------------------------//
+
+//  Copyright Beman Dawes, 2002
+//  Copyright Vladimir Prus, 2002
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/filesystem
+
+#include <boost/config/warning_disable.hpp>
+
+//  See deprecated_test for tests of deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED 
+#  define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+#  define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/convenience.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+#include <boost/bind.hpp>
+#include <fstream>
+#include <iostream>
+
+namespace fs = pdalboost::filesystem;
+using fs::path;
+namespace sys = pdalboost::system;
+
+namespace
+{
+  template< typename F >
+    bool throws_fs_error(F func)
+  {
+    try { func(); }
+
+    catch (const fs::filesystem_error &)
+    {
+      return true;
+    }
+    return false;
+  }
+
+    void create_recursive_iterator(const fs::path & ph)
+    {
+      fs::recursive_directory_iterator it(ph);
+    }
+}
+
+//  ------------------------------------------------------------------------------------//
+
+int cpp_main(int, char*[])
+{
+
+//  create_directories() tests  --------------------------------------------------------//
+
+  BOOST_TEST(!fs::create_directories("/")); // should be harmless
+
+  path unique_dir = fs::unique_path();  // unique name in case tests running in parallel
+  path unique_yy = unique_dir / "yy";
+  path unique_yya = unique_dir / "yya";
+  path unique_yy_zz = unique_dir / "yy" / "zz";
+
+  fs::remove_all(unique_dir);  // make sure slate is blank
+  BOOST_TEST(!fs::exists(unique_dir)); // reality check
+
+  BOOST_TEST(fs::create_directories(unique_dir));
+  BOOST_TEST(fs::exists(unique_dir));
+  BOOST_TEST(fs::is_directory(unique_dir));
+
+  BOOST_TEST(fs::create_directories(unique_yy_zz));
+  BOOST_TEST(fs::exists(unique_dir));
+  BOOST_TEST(fs::exists(unique_yy));
+  BOOST_TEST(fs::exists(unique_yy_zz));
+  BOOST_TEST(fs::is_directory(unique_dir));
+  BOOST_TEST(fs::is_directory(unique_yy));
+  BOOST_TEST(fs::is_directory(unique_yy_zz));
+
+  path is_a_file(unique_dir / "uu");
+  {
+    std::ofstream f(is_a_file.string().c_str());
+    BOOST_TEST(!!f);
+  }
+  BOOST_TEST(throws_fs_error(
+    pdalboost::bind(fs::create_directories, is_a_file)));
+  BOOST_TEST(throws_fs_error(
+    pdalboost::bind(fs::create_directories, is_a_file / "aa")));
+
+// recursive_directory_iterator tests ----------------------------------------//
+
+  sys::error_code ec;
+  fs::recursive_directory_iterator it("/no-such-path", ec);
+  BOOST_TEST(ec);
+
+  BOOST_TEST(throws_fs_error(
+    pdalboost::bind(create_recursive_iterator, "/no-such-path")));
+
+  fs::remove(unique_dir / "uu");
+
+#ifdef BOOST_WINDOWS_API
+  // These tests depends on ordering of directory entries, and that's guaranteed
+  // on Windows but not necessarily on other operating systems
+  {
+    std::ofstream f(unique_yya.string().c_str());
+    BOOST_TEST(!!f);
+  }
+
+  for (it = fs::recursive_directory_iterator(unique_dir);
+        it != fs::recursive_directory_iterator(); ++it)
+    { std::cout << it->path() << '\n'; }
+
+  it = fs::recursive_directory_iterator(unique_dir);
+  BOOST_TEST(it->path() == unique_yy);
+  BOOST_TEST(it.level() == 0);
+  ++it;
+  BOOST_TEST(it->path() == unique_yy_zz);
+  BOOST_TEST(it.level() == 1);
+  it.pop();
+  BOOST_TEST(it->path() == unique_yya);
+  BOOST_TEST(it.level() == 0);
+  it++;
+  BOOST_TEST(it == fs::recursive_directory_iterator());
+
+  it = fs::recursive_directory_iterator(unique_dir);
+  BOOST_TEST(it->path() == unique_yy);
+  it.no_push();
+  ++it;
+  BOOST_TEST(it->path() == unique_yya);
+  ++it;
+  BOOST_TEST(it == fs::recursive_directory_iterator());
+
+  fs::remove(unique_yya);
+#endif
+
+  it = fs::recursive_directory_iterator(unique_yy_zz);
+  BOOST_TEST(it == fs::recursive_directory_iterator());
+  
+  it = fs::recursive_directory_iterator(unique_dir);
+  BOOST_TEST(it->path() == unique_yy);
+  BOOST_TEST(it.level() == 0);
+  ++it;
+  BOOST_TEST(it->path() == unique_yy_zz);
+  BOOST_TEST(it.level() == 1);
+  it++;
+  BOOST_TEST(it == fs::recursive_directory_iterator());
+
+  it = fs::recursive_directory_iterator(unique_dir);
+  BOOST_TEST(it->path() == unique_yy);
+  it.no_push();
+  ++it;
+  BOOST_TEST(it == fs::recursive_directory_iterator());
+
+  it = fs::recursive_directory_iterator(unique_dir);
+  BOOST_TEST(it->path() == unique_yy);
+  ++it;
+  it.pop();
+  BOOST_TEST(it == fs::recursive_directory_iterator());
+
+  ec.clear();
+  BOOST_TEST(!ec);
+  // check that two argument failed constructor creates the end iterator 
+  BOOST_TEST(fs::recursive_directory_iterator("nosuchdir", ec)
+    == fs::recursive_directory_iterator());
+  BOOST_TEST(ec);
+
+  fs::remove_all(unique_dir);  // clean up behind ourselves
+
+  return ::pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/deprecated_test.cpp b/vendor/pdalboost/libs/filesystem/test/deprecated_test.cpp
new file mode 100644
index 0000000..5b5fd86
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/deprecated_test.cpp
@@ -0,0 +1,250 @@
+//  deprecated_test program --------------------------------------------------//
+
+//  Copyright Beman Dawes 2002
+//  Copyright Vladimir Prus 2002
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//  This test verifies that various deprecated names still work. This is
+//  important to preserve existing code that uses the old names.
+
+#define BOOST_FILESYSTEM_DEPRECATED
+
+#include <boost/filesystem.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+namespace fs = pdalboost::filesystem;
+using pdalboost::filesystem::path;
+
+#define PATH_CHECK(a, b) check(a, b, __LINE__)
+
+namespace
+{
+  std::string platform(BOOST_PLATFORM);
+
+  void check(const fs::path & source,
+              const std::string & expected, int line)
+  {
+    if (source.generic_string()== expected) return;
+
+    ++::pdalboost::detail::test_errors();
+
+    std::cout << '(' << line << ") source.string(): \"" << source.string()
+              << "\" != expected: \"" << expected
+              << "\"" << std::endl;
+  }
+
+  void normalize_test()
+  {
+    PATH_CHECK(path("").normalize(), "");
+    PATH_CHECK(path("/").normalize(), "/");
+    PATH_CHECK(path("//").normalize(), "//");
+    PATH_CHECK(path("///").normalize(), "/");
+    PATH_CHECK(path("f").normalize(), "f");
+    PATH_CHECK(path("foo").normalize(), "foo");
+    PATH_CHECK(path("foo/").normalize(), "foo/.");
+    PATH_CHECK(path("f/").normalize(), "f/.");
+    PATH_CHECK(path("/foo").normalize(), "/foo");
+    PATH_CHECK(path("foo/bar").normalize(), "foo/bar");
+    PATH_CHECK(path("..").normalize(), "..");
+    PATH_CHECK(path("../..").normalize(), "../..");
+    PATH_CHECK(path("/..").normalize(), "/..");
+    PATH_CHECK(path("/../..").normalize(), "/../..");
+    PATH_CHECK(path("../foo").normalize(), "../foo");
+    PATH_CHECK(path("foo/..").normalize(), ".");
+    PATH_CHECK(path("foo/../").normalize(), "./.");
+    PATH_CHECK((path("foo") / "..").normalize() , ".");
+    PATH_CHECK(path("foo/...").normalize(), "foo/...");
+    PATH_CHECK(path("foo/.../").normalize(), "foo/.../.");
+    PATH_CHECK(path("foo/..bar").normalize(), "foo/..bar");
+    PATH_CHECK(path("../f").normalize(), "../f");
+    PATH_CHECK(path("/../f").normalize(), "/../f");
+    PATH_CHECK(path("f/..").normalize(), ".");
+    PATH_CHECK((path("f") / "..").normalize() , ".");
+    PATH_CHECK(path("foo/../..").normalize(), "..");
+    PATH_CHECK(path("foo/../../").normalize(), "../.");
+    PATH_CHECK(path("foo/../../..").normalize(), "../..");
+    PATH_CHECK(path("foo/../../../").normalize(), "../../.");
+    PATH_CHECK(path("foo/../bar").normalize(), "bar");
+    PATH_CHECK(path("foo/../bar/").normalize(), "bar/.");
+    PATH_CHECK(path("foo/bar/..").normalize(), "foo");
+    PATH_CHECK(path("foo/bar/../").normalize(), "foo/.");
+    PATH_CHECK(path("foo/bar/../..").normalize(), ".");
+    PATH_CHECK(path("foo/bar/../../").normalize(), "./.");
+    PATH_CHECK(path("foo/bar/../blah").normalize(), "foo/blah");
+    PATH_CHECK(path("f/../b").normalize(), "b");
+    PATH_CHECK(path("f/b/..").normalize(), "f");
+    PATH_CHECK(path("f/b/../").normalize(), "f/.");
+    PATH_CHECK(path("f/b/../a").normalize(), "f/a");
+    PATH_CHECK(path("foo/bar/blah/../..").normalize(), "foo");
+    PATH_CHECK(path("foo/bar/blah/../../bletch").normalize(), "foo/bletch");
+    PATH_CHECK(path("//net").normalize(), "//net");
+    PATH_CHECK(path("//net/").normalize(), "//net/");
+    PATH_CHECK(path("//..net").normalize(), "//..net");
+    PATH_CHECK(path("//net/..").normalize(), "//net/..");
+    PATH_CHECK(path("//net/foo").normalize(), "//net/foo");
+    PATH_CHECK(path("//net/foo/").normalize(), "//net/foo/.");
+    PATH_CHECK(path("//net/foo/..").normalize(), "//net/");
+    PATH_CHECK(path("//net/foo/../").normalize(), "//net/.");
+
+    PATH_CHECK(path("/net/foo/bar").normalize(), "/net/foo/bar");
+    PATH_CHECK(path("/net/foo/bar/").normalize(), "/net/foo/bar/.");
+    PATH_CHECK(path("/net/foo/..").normalize(), "/net");
+    PATH_CHECK(path("/net/foo/../").normalize(), "/net/.");
+
+    PATH_CHECK(path("//net//foo//bar").normalize(), "//net/foo/bar");
+    PATH_CHECK(path("//net//foo//bar//").normalize(), "//net/foo/bar/.");
+    PATH_CHECK(path("//net//foo//..").normalize(), "//net/");
+    PATH_CHECK(path("//net//foo//..//").normalize(), "//net/.");
+
+    PATH_CHECK(path("///net///foo///bar").normalize(), "/net/foo/bar");
+    PATH_CHECK(path("///net///foo///bar///").normalize(), "/net/foo/bar/.");
+    PATH_CHECK(path("///net///foo///..").normalize(), "/net");
+    PATH_CHECK(path("///net///foo///..///").normalize(), "/net/.");
+
+    if (platform == "Windows")
+    {
+      PATH_CHECK(path("c:..").normalize(), "c:..");
+      PATH_CHECK(path("c:foo/..").normalize(), "c:");
+
+      PATH_CHECK(path("c:foo/../").normalize(), "c:.");
+
+      PATH_CHECK(path("c:/foo/..").normalize(), "c:/");
+      PATH_CHECK(path("c:/foo/../").normalize(), "c:/.");
+      PATH_CHECK(path("c:/..").normalize(), "c:/..");
+      PATH_CHECK(path("c:/../").normalize(), "c:/../.");
+      PATH_CHECK(path("c:/../..").normalize(), "c:/../..");
+      PATH_CHECK(path("c:/../../").normalize(), "c:/../../.");
+      PATH_CHECK(path("c:/../foo").normalize(), "c:/../foo");
+      PATH_CHECK(path("c:/../foo/").normalize(), "c:/../foo/.");
+      PATH_CHECK(path("c:/../../foo").normalize(), "c:/../../foo");
+      PATH_CHECK(path("c:/../../foo/").normalize(), "c:/../../foo/.");
+      PATH_CHECK(path("c:/..foo").normalize(), "c:/..foo");
+    }
+    else // POSIX
+    {
+      PATH_CHECK(path("c:..").normalize(), "c:..");
+      PATH_CHECK(path("c:foo/..").normalize(), ".");
+      PATH_CHECK(path("c:foo/../").normalize(), "./.");
+      PATH_CHECK(path("c:/foo/..").normalize(), "c:");
+      PATH_CHECK(path("c:/foo/../").normalize(), "c:/.");
+      PATH_CHECK(path("c:/..").normalize(), ".");
+      PATH_CHECK(path("c:/../").normalize(), "./.");
+      PATH_CHECK(path("c:/../..").normalize(), "..");
+      PATH_CHECK(path("c:/../../").normalize(), "../.");
+      PATH_CHECK(path("c:/../foo").normalize(), "foo");
+      PATH_CHECK(path("c:/../foo/").normalize(), "foo/.");
+      PATH_CHECK(path("c:/../../foo").normalize(), "../foo");
+      PATH_CHECK(path("c:/../../foo/").normalize(), "../foo/.");
+      PATH_CHECK(path("c:/..foo").normalize(), "c:/..foo");
+    }
+  }
+
+  //  misc_test ------------------------------------------------------------------------//
+
+  void misc_test()
+  {
+    fs::path p;
+
+    fs::initial_path<fs::path>();
+    fs::initial_path<fs::wpath>();
+
+    p.file_string();
+    p.directory_string();
+  }
+
+  //  path_rename_test -----------------------------------------------------------------//
+
+  void path_rename_test()
+  {
+    fs::path p("foo/bar/blah");
+
+    BOOST_TEST_EQ(path("foo/bar/blah").remove_leaf(), "foo/bar");
+    BOOST_TEST_EQ(p.leaf(), "blah");
+    BOOST_TEST_EQ(p.branch_path(), "foo/bar");
+    BOOST_TEST(p.has_leaf());
+    BOOST_TEST(p.has_branch_path());
+    BOOST_TEST(!p.is_complete());
+
+    if (platform == "Windows")
+    {
+      BOOST_TEST_EQ(path("foo\\bar\\blah").remove_leaf(), "foo\\bar");
+      p = "foo\\bar\\blah";
+      BOOST_TEST_EQ(p.branch_path(), "foo\\bar");
+    }
+  }
+
+} // unnamed namespace
+
+
+//--------------------------------------------------------------------------------------//
+
+int cpp_main(int /*argc*/, char* /*argv*/[])
+{
+  // The choice of platform is make at runtime rather than compile-time
+  // so that compile errors for all platforms will be detected even though
+  // only the current platform is runtime tested.
+  platform = (platform == "Win32" || platform == "Win64" || platform == "Cygwin")
+               ? "Windows"
+               : "POSIX";
+  std::cout << "Platform is " << platform << '\n';
+
+  BOOST_TEST(fs::initial_path() == fs::current_path());
+
+  //path::default_name_check(fs::no_check);
+
+  fs::directory_entry de("foo/bar");
+
+  de.replace_leaf("", fs::file_status(), fs::file_status());
+
+  //de.leaf();
+  //de.string();
+
+  fs::path ng(" no-way, Jose");
+  BOOST_TEST(!fs::is_regular(ng));  // verify deprecated name still works
+  BOOST_TEST(!fs::symbolic_link_exists("nosuchfileordirectory"));
+
+  misc_test();
+  path_rename_test();
+  normalize_test();
+ 
+// extension() tests ---------------------------------------------------------//
+
+  BOOST_TEST(fs::extension("a/b") == "");
+  BOOST_TEST(fs::extension("a/b.txt") == ".txt");
+  BOOST_TEST(fs::extension("a/b.") == ".");
+  BOOST_TEST(fs::extension("a.b.c") == ".c");
+  BOOST_TEST(fs::extension("a.b.c.") == ".");
+  BOOST_TEST(fs::extension("") == "");
+  BOOST_TEST(fs::extension("a/") == "");
+  
+// basename() tests ----------------------------------------------------------//
+
+  BOOST_TEST(fs::basename("b") == "b");
+  BOOST_TEST(fs::basename("a/b.txt") == "b");
+  BOOST_TEST(fs::basename("a/b.") == "b"); 
+  BOOST_TEST(fs::basename("a.b.c") == "a.b");
+  BOOST_TEST(fs::basename("a.b.c.") == "a.b.c");
+  BOOST_TEST(fs::basename("") == "");
+  
+// change_extension tests ---------------------------------------------------//
+
+  BOOST_TEST(fs::change_extension("a.txt", ".tex").string() == "a.tex");
+  BOOST_TEST(fs::change_extension("a.", ".tex").string() == "a.tex");
+  BOOST_TEST(fs::change_extension("a", ".txt").string() == "a.txt");
+  BOOST_TEST(fs::change_extension("a.b.txt", ".tex").string() == "a.b.tex");  
+  // see the rationale in html docs for explanation why this works
+  BOOST_TEST(fs::change_extension("", ".png").string() == ".png");
+
+  return ::pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/design_use_cases.cpp b/vendor/pdalboost/libs/filesystem/test/design_use_cases.cpp
new file mode 100644
index 0000000..49b0c28
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/design_use_cases.cpp
@@ -0,0 +1,81 @@
+#include <string>
+#include <iostream>
+
+//  Minimal class path
+
+class path
+{
+public:
+  path( const char * )
+  {
+    std::cout << "path( const char * )\n";
+  }
+  path( const std::string & )
+  {
+    std::cout << "path( std::string & )\n";
+  }
+
+//  for maximum efficiency, either signature must work
+# ifdef BY_VALUE
+  operator const std::string() const
+# else
+  operator const std::string&() const
+# endif
+  {
+    std::cout << "operator string\n";
+    return m_path;
+  }
+
+#ifdef NAMED_CONVERSION
+  std::string string() const
+  {
+    std::cout << "std::string string() const\n";
+    return m_path;
+  }
+#endif
+
+private:
+  std::string m_path;
+};
+
+bool operator==( const path &, const path & )
+{
+  std::cout << "operator==( const path &, const path & )\n";
+  return true;
+}
+
+//  These are the critical use cases. If any of these don't compile, usability
+//  is unacceptably degraded.
+
+void f( const path & )
+{
+  std::cout << "f( const path & )\n";
+}
+
+int main()
+{
+  f( "foo" );
+  f( std::string( "foo" ) );
+  f( path( "foo" ) );
+
+  std::cout << '\n';
+
+  std::string s1( path( "foo" ) );
+  std::string s2 = path( "foo" );
+  s2 = path( "foo" );
+
+#ifdef NAMED_CONVERSION
+  s2 = path( "foo" ).string();
+#endif
+
+  std::cout << '\n';
+
+  // these must call bool path( const path &, const path & );
+  path( "foo" ) == path( "foo" );
+  path( "foo" ) == "foo";
+  path( "foo" ) == std::string( "foo" );
+  "foo" == path( "foo" );
+  std::string( "foo" ) == path( "foo" );
+
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/equivalent.cpp b/vendor/pdalboost/libs/filesystem/test/equivalent.cpp
new file mode 100644
index 0000000..5959432
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/equivalent.cpp
@@ -0,0 +1,39 @@
+//  equivalent program -------------------------------------------------------//
+
+//  Copyright (c) 2004 Beman Dawes
+
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
+//  at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/filesystem
+
+//----------------------------------------------------------------------------//
+
+#include <boost/filesystem/operations.hpp>
+#include <iostream>
+#include <exception>
+
+int main( int argc, char * argv[] )
+{
+  pdalboost::filesystem::path::default_name_check( pdalboost::filesystem::native );
+  if ( argc != 3 )
+  {
+    std::cout << "Usage: equivalent path1 path2\n";
+    return 2;
+  }
+  
+  bool eq;
+  try
+  {
+    eq = pdalboost::filesystem::equivalent( argv[1], argv[2] );
+  }
+  catch ( const std::exception & ex )
+  {
+    std::cout << ex.what() << "\n";
+    return 3;
+  }
+
+  std::cout << (eq ? "Paths are equivalent\n" : "Paths are not equivalent\n");
+  return !eq;
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/fstream_test.cpp b/vendor/pdalboost/libs/filesystem/test/fstream_test.cpp
new file mode 100644
index 0000000..fa1701a
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/fstream_test.cpp
@@ -0,0 +1,169 @@
+//  fstream_test.cpp  ------------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2002
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/config/warning_disable.hpp>
+
+//  See deprecated_test for tests of deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED 
+#  define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+#  define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/fstream.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/filesystem/operations.hpp>
+#include <string>
+#include <iostream>
+#include <cstdio> // for std::remove
+
+#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
+
+namespace fs = pdalboost::filesystem;
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STDC_NAMESPACE
+  namespace std { using ::remove; }
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+namespace
+{
+  bool cleanup = true;
+  
+  void test(const fs::path & p)
+  {
+    fs::remove(p);
+    {
+      std::cout << " in test 1\n";
+      fs::filebuf fb1;
+      fb1.open(p, std::ios_base::out);
+      BOOST_TEST(fb1.is_open());
+    }
+    {
+      std::cout << " in test 2\n";
+      fs::filebuf fb2;
+      fb2.open(p, std::ios_base::in);
+      BOOST_TEST(fb2.is_open());
+    }
+    {
+      std::cout << " in test 3\n";
+      fs::ifstream tfs(p);
+      BOOST_TEST(tfs.is_open());
+    }
+    {
+      std::cout << " in test 4\n";
+      fs::ifstream tfs(p / p.filename()); // should fail
+      BOOST_TEST(!tfs.is_open());
+    }
+    {
+      std::cout << " in test 5\n";
+      fs::ifstream tfs(p, std::ios_base::in);
+      BOOST_TEST(tfs.is_open());
+    }
+    {
+      std::cout << " in test 6\n";
+      fs::ifstream tfs;
+      tfs.open(p);
+      BOOST_TEST(tfs.is_open());
+    }
+    {
+      std::cout << " in test 7\n";
+      fs::ifstream tfs;
+      tfs.open(p, std::ios_base::in);
+      BOOST_TEST(tfs.is_open());
+    }
+    {
+      std::cout << " in test 8\n";
+      fs::ofstream tfs(p);
+      BOOST_TEST(tfs.is_open());
+    }
+    {
+      std::cout << " in test 9\n";
+      fs::ofstream tfs(p, std::ios_base::out);
+      BOOST_TEST(tfs.is_open());
+    }
+    {
+      std::cout << " in test 10\n";
+      fs::ofstream tfs;
+      tfs.open(p);
+      BOOST_TEST(tfs.is_open());
+    }
+    {
+      std::cout << " in test 11\n";
+      fs::ofstream tfs;
+      tfs.open(p, std::ios_base::out);
+      BOOST_TEST(tfs.is_open());
+    }
+    {
+      std::cout << " in test 12\n";
+      fs::fstream tfs(p);
+      BOOST_TEST(tfs.is_open());
+    }
+    {
+      std::cout << " in test 13\n";
+      fs::fstream tfs(p, std::ios_base::in|std::ios_base::out);
+      BOOST_TEST(tfs.is_open());
+    }
+    {
+      std::cout << " in test 14\n";
+      fs::fstream tfs;
+      tfs.open(p);
+      BOOST_TEST(tfs.is_open());
+    }
+    {
+      std::cout << " in test 15\n";
+      fs::fstream tfs;
+      tfs.open(p, std::ios_base::in|std::ios_base::out);
+      BOOST_TEST(tfs.is_open());
+    }
+
+    if (cleanup)
+      fs::remove(p);
+
+  } // test
+} // unnamed namespace
+
+int cpp_main(int argc, char*[])
+{
+  if (argc > 1) cleanup = false;
+
+  std::cout << "BOOST_FILESYSTEM_C_STR defined as \""
+            << BOOST_STRINGIZE(BOOST_FILESYSTEM_C_STR) << "\"\n";
+
+  // test narrow characters
+  std::cout << "narrow character tests:\n";
+  test("narrow_fstream_test");
+
+
+  // So that tests are run with known encoding, use Boost UTF-8 codecvt
+  std::locale global_loc = std::locale();
+  std::locale loc(global_loc, new fs::detail::utf8_codecvt_facet);
+  fs::path::imbue(loc);
+
+  // test with some wide characters
+  //  \u2780 is circled 1 against white background == e2 9e 80 in UTF-8
+  //  \u2781 is circled 2 against white background == e2 9e 81 in UTF-8
+  //  \u263A is a white smiling face
+  std::cout << "\nwide character tests:\n";
+  std::wstring ws(L"wide_fstream_test_");
+  ws += 0x2780;
+  ws += 0x263A;
+  test(ws);
+
+  return ::pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/10038.cpp b/vendor/pdalboost/libs/filesystem/test/issues/10038.cpp
new file mode 100644
index 0000000..64246eb
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/10038.cpp
@@ -0,0 +1,8 @@
+#include <boost/filesystem.hpp>
+
+int main(void)
+{
+    pdalboost::filesystem::copy_file("a", "b");
+    return 0;
+}
+
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/10205.cpp b/vendor/pdalboost/libs/filesystem/test/issues/10205.cpp
new file mode 100644
index 0000000..e918434
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/10205.cpp
@@ -0,0 +1,17 @@
+// Linux test; before running: export LANG=foo
+
+#include <locale>
+#include <iostream>
+#include <string>
+#include <boost/filesystem/path.hpp>
+
+int main()
+{
+  std::string pathname = "/some/filesystem/path/%%%%";
+
+  pdalboost::filesystem::path path(pathname);
+
+  std::wcout << path.wstring() << std::endl;
+
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/10485.cpp b/vendor/pdalboost/libs/filesystem/test/issues/10485.cpp
new file mode 100644
index 0000000..9b7ad3b
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/10485.cpp
@@ -0,0 +1,14 @@
+//  Copyright iamvfx at gmail.com 2014
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#include <stdio.h>
+#include <boost/filesystem.hpp>
+
+int main()
+{
+  pdalboost::filesystem::path dir("/");
+  for (char c : dir.filename().string())
+    printf("%c\n", c);
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/10641.cpp b/vendor/pdalboost/libs/filesystem/test/issues/10641.cpp
new file mode 100644
index 0000000..502062e
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/10641.cpp
@@ -0,0 +1,20 @@
+#include <iostream>
+#include <boost/filesystem/path.hpp>
+using namespace std;
+namespace fs = pdalboost::filesystem;
+int main(int argc, char** argv)
+{
+
+	try
+	{
+		fs::path my_path("test/test.txt");
+		cout << "current path is      " << my_path << endl;
+		cout << "parent path is       " << my_path.parent_path() << endl;
+	}
+	catch(std::exception& e) {
+		cerr << endl << "Error during execution: " << e.what() << endl << endl;
+		return EXIT_FAILURE;
+	}
+	return EXIT_SUCCESS;
+}
+
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/11166-remove-race.cpp b/vendor/pdalboost/libs/filesystem/test/issues/11166-remove-race.cpp
new file mode 100644
index 0000000..f7dda1b
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/11166-remove-race.cpp
@@ -0,0 +1,38 @@
+#include <boost/filesystem.hpp>
+#include <boost/thread.hpp>
+#include <fstream>
+
+pdalboost::condition_variable cond;
+pdalboost::mutex mut;
+
+#define FNAME ("remove-test")
+void remover()
+{
+    while(1)
+    {
+        pdalboost::filesystem::remove(FNAME);
+    }
+}
+
+void creater()
+{
+    for(int i=0; i<100000; i++) std::fstream(FNAME, std::fstream::out);
+}
+
+int main()
+{
+    pdalboost::filesystem::remove(FNAME);
+    pdalboost::filesystem::remove(FNAME);
+
+    std::cout <<
+        "If you got this far, it's OK to remove a file that doesn't exist\n"
+        "Now trying with one creator thread and two remover threads.\n"
+        "This is likely to crash after just a few seconds at most." <<
+        std::endl;
+
+    pdalboost::thread c(creater), r1(remover), r2(remover);
+
+    c.join();
+    r1.interrupt(); r1.join();
+    r2.interrupt(); r2.join();
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/11228--filtered-recursive_directory_iterator-range.cpp b/vendor/pdalboost/libs/filesystem/test/issues/11228--filtered-recursive_directory_iterator-range.cpp
new file mode 100644
index 0000000..3f8c671
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/11228--filtered-recursive_directory_iterator-range.cpp
@@ -0,0 +1,25 @@
+#include <boost/filesystem.hpp>
+#include <boost/range.hpp>
+#include <boost/range/algorithm.hpp>
+#include <boost/range/adaptors.hpp>
+#include <vector>
+#include <iostream>
+
+namespace fs = pdalboost::filesystem;
+using namespace pdalboost::adaptors;
+
+int main() {
+    fs::recursive_directory_iterator beg("."), end;
+
+    auto fileFilter = [](fs::path const & path)
+    { 
+      return is_regular_file(path);
+    };
+
+    std::vector<fs::path> paths;
+    copy(pdalboost::make_iterator_range(beg, end) | filtered(fileFilter),
+      std::back_inserter(paths));
+
+    for(auto& p : paths)
+        std::cout << p << "\n";
+}
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/3332/test.cpp b/vendor/pdalboost/libs/filesystem/test/issues/3332/test.cpp
new file mode 100644
index 0000000..9f66644
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/3332/test.cpp
@@ -0,0 +1,37 @@
+#include <boost/filesystem.hpp>
+#include <cvt/cp950>
+#include <iostream>
+#include <string>
+#include <locale>
+
+namespace fs = pdalboost::filesystem;
+
+int main(void) {
+
+  std::locale global_loc = std::locale();
+  std::locale loc(global_loc, new stdext::cvt::codecvt_cp950<wchar_t>);
+  fs::path::imbue(loc);
+
+  std::cout <<
+    "HEADS UP! PIPE OUTPUT TO FILE AND INSPECT WITH HEX OR CP950 EDITOR.\n"
+    "WINDOWS COMMAND PROMPT FONTS DON'T SUPPORT CHINESE,\n"
+    "EVEN WITH CODEPAGE SET AND EVEN AS OF WIN 10 TECH PREVIEW." << std::endl;
+
+  fs::recursive_directory_iterator end;
+  fs::recursive_directory_iterator iter
+    ("C:/boost/test-files/utf-8");
+
+  while (iter != end)
+  {
+    if (fs::is_directory(*iter))
+    {
+      std::cout << "[directory] " << iter->path().generic_string() << std::endl;
+    }
+    else if (fs::is_regular(*iter))
+    {
+      std::cout << " [file] " << iter->path().generic_string() << std::endl;
+    }
+    ++iter;
+  }
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/4329.-basename.cpp b/vendor/pdalboost/libs/filesystem/test/issues/4329.-basename.cpp
new file mode 100644
index 0000000..5319ebc
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/4329.-basename.cpp
@@ -0,0 +1,20 @@
+#include <iostream>
+#include <boost/filesystem.hpp>
+using pdalboost::filesystem::path;
+
+int main()
+{
+  std::cout << path("a").stem() << std::endl;
+  std::cout << path("a/").stem() << std::endl;
+  std::cout << path("a/b").stem() << std::endl;
+  std::cout << path("a/b/").stem() << std::endl;
+  std::cout << path("a/b/c").stem() << std::endl;
+  std::cout << path("a/b/c/").stem() << std::endl;
+  std::cout << path("a/b/c/d").stem() << std::endl;
+  std::cout << path("a/b/c/d/").stem() << std::endl;
+  std::cout << path("a/b/c/d/e").stem() << std::endl;
+  std::cout << path("a/b/c/d/e/").stem() << std::endl;
+  return 0;
+}
+
+
diff --git a/plugins/python/test/CMakeLists.txt b/vendor/pdalboost/libs/filesystem/test/issues/5300-temp-dir-path-130.cpp
similarity index 100%
copy from plugins/python/test/CMakeLists.txt
copy to vendor/pdalboost/libs/filesystem/test/issues/5300-temp-dir-path-130.cpp
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/6638-global-init-fails-3.cpp b/vendor/pdalboost/libs/filesystem/test/issues/6638-global-init-fails-3.cpp
new file mode 100644
index 0000000..1dd6fb4
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/6638-global-init-fails-3.cpp
@@ -0,0 +1,36 @@
+#include <boost/filesystem.hpp>
+#include <boost/detail/lightweight_main.hpp>
+#include <string>
+
+using namespace pdalboost::filesystem;
+
+//  The original bug report was that this broke:
+//     path p(L"C:\\TEMP\\");
+//     path r(p / "narrow");
+//  That code now works, but ...
+
+//  Nils Gladitz has provided this example ... 
+
+class Test
+{
+public:
+	~Test()
+	{
+		path p(L"C:\\TEMP\\");
+		path r(p / "narrow");    
+	}
+};
+
+//  path p("narrow");
+
+//  fails if static linked and Test object is global variable, but does not fail if
+//  path p("narrow") line above is not commented out, and also does not fail if the
+//  Test test2 line below is commented out.
+
+Test test1;
+Test test2;
+
+int cpp_main(int, char* [])
+{
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/8930.cpp b/vendor/pdalboost/libs/filesystem/test/issues/8930.cpp
new file mode 100644
index 0000000..615965f
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/8930.cpp
@@ -0,0 +1,7 @@
+// Before running this test: export LANG=foo
+
+#include <boost/filesystem.hpp>
+int main() {
+  pdalboost::filesystem::path("/abc").root_directory();
+}
+
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/9054_static_const_codecvt_segfault_pre_main.cpp b/vendor/pdalboost/libs/filesystem/test/issues/9054_static_const_codecvt_segfault_pre_main.cpp
new file mode 100644
index 0000000..c918eae
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/9054_static_const_codecvt_segfault_pre_main.cpp
@@ -0,0 +1,10 @@
+#include "boost/filesystem.hpp"
+
+static const pdalboost::filesystem::path::codecvt_type &dummy =
+  pdalboost::filesystem::path::codecvt();
+
+int main()
+{
+  return 0;
+}
+
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/9219.cpp b/vendor/pdalboost/libs/filesystem/test/issues/9219.cpp
new file mode 100644
index 0000000..521f68a
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/9219.cpp
@@ -0,0 +1,40 @@
+//  Boost 9219.cpp  --------------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2014
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//  In researching filesystem issues it is convenient to have a program that can be     //
+//  quickly modified to test reported problems. That's the purpose of this file and     //
+//  its associated Visual Studio and Boost.Build infrastructure.                        //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+#include <boost/config/warning_disable.hpp>
+
+#include <boost/filesystem.hpp>
+
+#include <iostream>
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+using std::cout;
+using std::endl;
+namespace fs = pdalboost::filesystem;
+
+//------------------------------------  cpp_main  --------------------------------------//
+
+int cpp_main(int argc, char* argv[])
+{
+  cout << "Hello, 9219" << endl;
+  cout << "This is a test for non-Windows systems" << endl;
+
+  BOOST_TEST(fs::exists(const_cast<char*>(".")));
+
+  return ::pdalboost::report_errors();
+} // cpp_main
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/Jamfile.v2 b/vendor/pdalboost/libs/filesystem/test/issues/Jamfile.v2
new file mode 100644
index 0000000..ffa011f
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/Jamfile.v2
@@ -0,0 +1,40 @@
+# Boost Filesystem test/issues Jamfile
+ 
+# Copyright Beman Dawes 2014
+
+# Distributed under the Boost Software License, Version 1.0.
+# See www.boost.org/LICENSE_1_0.txt
+
+# Library home page: http://www.boost.org/libs/filesystem
+
+project
+    : requirements
+      <library>/boost/filesystem//pdalboost_filesystem
+      <library>/boost/system//pdalboost_system
+      <toolset>msvc:<asynch-exceptions>on
+      <link>static
+    ;
+    
+   test-suite "filesystem-issues" :
+#       [ run 9054_static_const_codecvt_segfault_pre_main.cpp 
+#           :  :  : <link>shared : 9054_shared ]                  
+#       [ run 9054_static_const_codecvt_segfault_pre_main.cpp
+#           :  :  : <link>static : 9054_static ]                  
+#       [ run hello_filesystem.cpp
+#           :  :  : <link>shared : hello_shared ]                  
+#       [ run hello_filesystem.cpp
+#           :  :  : <link>static : hello_static ]                  
+#       [ run 9219.cpp
+#           :  :  : <link>shared : 9219_shared ]                  
+#       [ run 9219.cpp
+#           :  :  : <link>static : 9219_static ]                  
+#       [ run 10485.cpp
+#           :  :  : <link>shared <test-info>always_show_run_output ]                  
+#       [ run copy_file-compilation-error-2015-05-04.cpp ]
+        [ run 6638-convert_aux-fails-init-global.cpp
+           :  :  : <link>shared : 6638_shared ]                  
+        [ run 6638-convert_aux-fails-init-global.cpp
+           :  :  : <link>static : 6638_static ]                  
+        
+       ;
+       
diff --git a/plugins/python/test/CMakeLists.txt b/vendor/pdalboost/libs/filesystem/test/issues/boost-no-inspect
similarity index 100%
copy from plugins/python/test/CMakeLists.txt
copy to vendor/pdalboost/libs/filesystem/test/issues/boost-no-inspect
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/copy_file-compilation-error-2015-05-04.cpp b/vendor/pdalboost/libs/filesystem/test/issues/copy_file-compilation-error-2015-05-04.cpp
new file mode 100644
index 0000000..9c5464c
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/copy_file-compilation-error-2015-05-04.cpp
@@ -0,0 +1,14 @@
+// Rob Conde <rob.conde at ai-solutions.com> reports this fails
+// to compile for Boost 1.58 with g++ 4.4.7 but is OK with FC++ 2013
+
+#include "boost/filesystem/operations.hpp"
+
+void myFunc()
+{
+   using namespace pdalboost::filesystem;
+
+   copy_option opt(copy_option::overwrite_if_exists);
+
+   copy_file(path("p1"),path("p2"),copy_option::overwrite_if_exists);
+//   copy_file(path("p1"),path("p2"),opt);
+}
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp b/vendor/pdalboost/libs/filesystem/test/issues/fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp
new file mode 100644
index 0000000..e69f9ba
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp
@@ -0,0 +1,38 @@
+// Test program to demonstrate that Linux does not support AT_SYMLINK_NOFOLLOW
+
+//  Copyright Duncan Exon Smith 2012
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+// Test this by running:
+//
+// rm -rf data && mkdir data && g++ -otest-fchmodat fchmodat_AT_SYMLINK_NOFOLLOW_6659.cpp && (cd data && ../test-fchmodat)
+//
+// If no assertions go off, then it looks like fchmodat is supported,
+// but AT_SYMLINK_NOFOLLOW is not supported.
+
+#include <fstream>
+#include <cassert>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <cerrno>
+
+#ifdef NDEBUG
+# error This program depends on assert() so makes no sense if NDEBUG is defined
+#endif
+
+int main(int argc, char *argv[])
+{
+    { std::ofstream file("out"); file << "contents"; }
+
+    assert(!::symlink("out", "sym"));
+
+    assert(!::fchmodat(AT_FDCWD, "out", S_IRUSR | S_IWUSR | S_IXUSR, 0));
+    assert(!::fchmodat(AT_FDCWD, "sym", S_IRUSR | S_IWUSR | S_IXUSR, 0));
+
+    assert(::fchmodat(AT_FDCWD, "sym", S_IRUSR | S_IWUSR | S_IXUSR, AT_SYMLINK_NOFOLLOW) == -1);
+    assert(errno == ENOTSUP);
+
+    return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/hello_filesystem.cpp b/vendor/pdalboost/libs/filesystem/test/issues/hello_filesystem.cpp
new file mode 100644
index 0000000..2cc9178
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/hello_filesystem.cpp
@@ -0,0 +1,39 @@
+//  Boost hello_filesystem.cpp  --------------------------------------------------------//
+
+//  Copyright Beman Dawes 2014
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//  In researching filesystem issues it is convenient to have a program that can be     //
+//  quickly modified to test reported problems. That's the purpose of this file and     //
+//  its associated Visual Studio and Boost.Build infrastructure.                        //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+#include <boost/config/warning_disable.hpp>
+
+#include <boost/filesystem.hpp>
+
+#include <iostream>
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+using std::cout;
+using std::endl;
+namespace fs = pdalboost::filesystem;
+
+//------------------------------------  cpp_main  --------------------------------------//
+
+int cpp_main(int argc, char* argv[])
+{
+  cout << "Hello, filesystem world" << endl;
+
+  BOOST_TEST(fs::exists("."));
+
+  return ::pdalboost::report_errors();
+} // cpp_main
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/readme.txt b/vendor/pdalboost/libs/filesystem/test/issues/readme.txt
new file mode 100644
index 0000000..cf8198e
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/readme.txt
@@ -0,0 +1,9 @@
+This directory contains tests related to specific issues.
+
+The names are intended to indicate both the function or condition being tested
+and the issue number.
+
+-----
+Copyright Beman Dawes 2012
+Distributed under the Boost Software License, Version 1.0.
+See http://www.boost.org/LICENSE_1_0.txt
diff --git a/vendor/pdalboost/libs/filesystem/test/issues/recurse_dir_iter_5403.cpp b/vendor/pdalboost/libs/filesystem/test/issues/recurse_dir_iter_5403.cpp
new file mode 100644
index 0000000..4775b2d
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/issues/recurse_dir_iter_5403.cpp
@@ -0,0 +1,132 @@
+//  Boost Filesystem recurse_dir_iter_test.cpp  ----------------------------------------//
+
+//  Copyright Beman Dawes 2014.
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/config/warning_disable.hpp>
+
+//  See deprecated_test for tests of deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED 
+#  define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+#  define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/operations.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/cerrno.hpp>
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+namespace fs = pdalboost::filesystem;
+using pdalboost::system::error_code;
+using pdalboost::system::system_category;
+using pdalboost::system::system_error;
+
+#include <iostream>
+
+using std::cout;
+using std::endl;
+
+#ifdef BOOST_WINDOWS_API
+# include <windows.h>
+#endif
+namespace
+{
+  typedef int errno_t;
+  std::string platform(BOOST_PLATFORM);
+  bool report_throws = false;
+  bool cleanup = true;
+  bool skip_long_windows_tests = false;
+  unsigned short language_id;  // 0 except for Windows
+
+} // unnamed namespace
+
+//------------------------------------------------------------------------------------//
+//                                                                                    //
+//                                    main                                            //
+//                                                                                    //
+//------------------------------------------------------------------------------------//
+
+int cpp_main(int argc, char* argv[])
+{
+  // document state of critical macros
+#ifdef BOOST_POSIX_API
+  cout << "BOOST_POSIX_API is defined\n";
+#endif
+#ifdef BOOST_WINDOWS_API
+  cout << "BOOST_WINDOWS_API is defined\n";
+#endif
+
+  for (; argc > 1; --argc, ++argv)
+  {
+    //if (*argv[1]=='-' && *(argv[1]+1)=='t')
+    //  report_throws = true;
+    //else if (*argv[1]=='-' && *(argv[1]+1)=='x')
+    //  cleanup = false;
+    //else if (*argv[1]=='-' && *(argv[1]+1)=='w')
+    //  skip_long_windows_tests = true;
+  }
+
+  // The choice of platform to test is made at runtime rather than compile-time
+  // so that compile errors for all platforms will be detected even though
+  // only the current platform is runtime tested.
+# if defined(BOOST_POSIX_API)
+  platform = "POSIX";
+# elif defined(BOOST_WINDOWS_API)
+  platform = "Windows";
+#   if !defined(__MINGW32__) && !defined(__CYGWIN__)
+  language_id = ::GetUserDefaultUILanguage();
+#   else
+  language_id = 0x0409; // Assume US English
+#   endif
+# else
+#   error neither BOOST_POSIX_API nor BOOST_WINDOWS_API is defined. See boost/system/api_config.hpp
+# endif
+  cout << "API is " << platform << endl;
+  cout << "initial_path() is " << fs::initial_path() << endl;
+  fs::path ip = fs::initial_path();
+
+  for (fs::path::const_iterator it = ip.begin(); it != ip.end(); ++it)
+  {
+    if (it != ip.begin())
+      cout << ", ";
+    cout << *it;
+  }
+  cout << endl;
+
+  //  From the root, walk the directory tree looking for a permissions error
+
+  fs::recursive_directory_iterator it("/");
+  fs::recursive_directory_iterator end_it;
+
+  //  The increment function has an invarient that it always makes progress,
+  //  so even if an error occurs this loop will eventually terminate.
+
+  while (it != end_it)
+  {
+    error_code ec;
+    fs::path init_path = it->path();
+    it.increment(ec);
+    if (ec)
+    {
+      cout << "initial path: " << init_path << endl;
+      cout << "error_code: " << ec.value() << " with msg: " << ec.message() << endl;
+      if (it != end_it)
+        cout << "post-increment path: " << it->path() << endl;
+    }
+  }
+
+  cout << "returning from main()" << endl;
+  return ::pdalboost::report_errors();
+} // main
diff --git a/vendor/pdalboost/libs/filesystem/test/large_file_support_test.cpp b/vendor/pdalboost/libs/filesystem/test/large_file_support_test.cpp
new file mode 100644
index 0000000..65368df
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/large_file_support_test.cpp
@@ -0,0 +1,42 @@
+//  Boost large_file_support_test.cpp  ---------------------------------------//
+
+//  Copyright Beman Dawes 2004.
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/filesystem
+
+//  See deprecated_test for tests of deprecated features
+#define BOOST_FILESYSTEM_NO_DEPRECATED
+#define BOOST_SYSTEM_NO_DEPRECATED
+
+#include <boost/filesystem/operations.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+namespace fs = pdalboost::filesystem;
+
+#include <iostream>
+
+int main()
+{
+  if ( fs::detail::possible_large_file_size_support() )
+  {
+    std::cout << "It appears that file sizes greater that 2 gigabytes are possible\n"
+                 "for this configuration on this platform since the operating system\n"
+                 "does use a large enough integer type to report large file sizes.\n\n"
+                 "Whether or not such support is actually present depends on the OS\n";
+    return 0;
+  }
+  std::cout << "The operating system is using an integer type to report file sizes\n"
+               "that can not represent file sizes greater that 2 gigabytes (31-bits).\n"
+               "Thus the Filesystem Library will not correctly deal with such large\n"
+               "files. If you think that this operatiing system should be able to\n"
+               "support large files, please report the problem to the Boost developers\n"
+               "mailing list.\n";
+  return 1;
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/locale_info.cpp b/vendor/pdalboost/libs/filesystem/test/locale_info.cpp
new file mode 100644
index 0000000..db57bb1
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/locale_info.cpp
@@ -0,0 +1,88 @@
+//  locale_info.cpp  ---------------------------------------------------------//
+
+//  Copyright Beman Dawes 2011
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+#include <locale>
+#include <iostream>
+#include <exception>
+#include <cstdlib>
+using namespace std;
+
+#ifdef _MSC_VER
+#  pragma warning(push)
+#  pragma warning(disable: 4996)  // ... Function call with parameters that may be unsafe
+#endif
+
+namespace
+{
+  void facet_info(const locale& loc, const char* msg)
+  {
+    cout << "has_facet<std::codecvt<wchar_t, char, std::mbstate_t> >("
+      << msg << ") is "
+      << (has_facet<std::codecvt<wchar_t, char, std::mbstate_t> >(loc)
+          ? "true\n"
+          : "false\n");
+  }
+
+  void default_info()
+  {
+    try
+    {
+      locale loc;
+      cout << "\nlocale default construction OK" << endl;
+      facet_info(loc, "locale()");
+    }
+    catch (const exception& ex)
+    {
+      cout << "\nlocale default construction threw: " << ex.what() << endl;
+    }
+  }
+
+  void null_string_info()
+  {
+    try
+    {
+      locale loc("");
+      cout << "\nlocale(\"\") construction OK" << endl;
+      facet_info(loc, "locale(\"\")");
+    }
+    catch (const exception& ex)
+    {
+      cout << "\nlocale(\"\") construction threw: " << ex.what() << endl;
+    }
+  }
+
+  void classic_info()
+  {
+    try
+    {
+      locale loc(locale::classic());
+      cout << "\nlocale(locale::classic()) copy construction OK" << endl;
+      facet_info(loc, "locale::classic()");
+    }
+    catch (const exception& ex)
+    {
+      cout << "\nlocale(locale::clasic()) copy construction threw: " << ex.what() << endl;
+    }
+  }
+}
+
+int main()
+{
+  const char* lang = getenv("LANG");
+  cout << "\nLANG environmental variable is "
+    << (lang ? lang : "not present") << endl;
+
+  default_info();
+  null_string_info();
+  classic_info();
+
+  return 0;
+}
+
+#ifdef _MSC_VER
+#  pragma warning(pop)
+#endif
diff --git a/vendor/pdalboost/libs/filesystem/test/long_path_test.cpp b/vendor/pdalboost/libs/filesystem/test/long_path_test.cpp
new file mode 100644
index 0000000..009a91a
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/long_path_test.cpp
@@ -0,0 +1,59 @@
+//  long_path_test.cpp  ----------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2011
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  http://www.boost.org/LICENSE_1_0.txt
+
+//  See http://www.boost.org/libs/btree for documentation.
+
+//  See http://msdn.microsoft.com/en-us/library/aa365247%28v=vs.85%29.aspx
+
+#include <boost/config/warning_disable.hpp>
+
+#include <boost/filesystem.hpp>
+#include <iostream>
+#include <string>
+
+using namespace pdalboost::filesystem;
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+namespace
+{
+}  // unnamed namespace
+
+int cpp_main(int, char*[])
+{
+
+  std::string prefix("d:\\temp\\");
+  std::cout << "prefix is " << prefix << '\n';
+
+  const std::size_t safe_size
+    = 260 - prefix.size() - 100;  // Windows MAX_PATH is 260
+
+  std::string safe_x_string(safe_size, 'x');
+  std::string safe_y_string(safe_size, 'y');
+  std::string path_escape("\\\\?\\");
+
+  path x_p(prefix + safe_x_string);
+  path y_p(path_escape + prefix + safe_x_string + "\\" + safe_y_string);
+
+  std::cout << "x_p.native().size() is " << x_p.native().size() << '\n';
+  std::cout << "y_p.native().size() is " << y_p.native().size() << '\n';
+
+  create_directory(x_p);
+  BOOST_TEST(exists(x_p));
+  create_directory(y_p);
+  BOOST_TEST(exists(y_p));
+
+  //std::cout << "directory x.../y... ready for testing, where ... is " << safe_size
+  //          << " repeats of x and y, respectively\n";
+
+  BOOST_TEST(exists(x_p));
+
+  //remove_all(x_p);
+
+  return ::pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/macro_default_test.cpp b/vendor/pdalboost/libs/filesystem/test/macro_default_test.cpp
new file mode 100644
index 0000000..4f8de19
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/macro_default_test.cpp
@@ -0,0 +1,36 @@
+//  macro_default_test program  --------------------------------------------------------//
+
+//  Copyright Beman Dawes 2012
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#undef BOOST_ALL_DYN_LINK
+#undef BOOST_ALL_STATIC_LINK
+#undef BOOST_FILESYSTEM_DYN_LINK
+#undef BOOST_FILESYSTEM_STATIC_LINK
+#undef BOOST_SYSTEM_DYN_LINK
+#undef BOOST_SYSTEM_STATIC_LINK
+
+#ifndef BOOST_ALL_NO_LIB
+# define BOOST_ALL_NO_LIB
+#endif
+
+#include <boost/filesystem/config.hpp>
+#include <boost/system/config.hpp>
+
+#ifndef BOOST_FILESYSTEM_STATIC_LINK
+# error BOOST_FILESYSTEM_STATIC_LINK not set by default
+#endif
+
+
+#ifndef BOOST_SYSTEM_STATIC_LINK
+# error BOOST_SYSTEM_STATIC_LINK not set by default
+#endif
+
+int main()
+{
+  return 0;
+}
diff --git a/plugins/python/test/CMakeLists.txt b/vendor/pdalboost/libs/filesystem/test/msvc/boost-no-inspect
similarity index 100%
rename from plugins/python/test/CMakeLists.txt
rename to vendor/pdalboost/libs/filesystem/test/msvc/boost-no-inspect
diff --git a/vendor/pdalboost/libs/filesystem/test/msvc/common.props b/vendor/pdalboost/libs/filesystem/test/msvc/common.props
new file mode 100644
index 0000000..f256ad1
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/msvc/common.props
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <AdditionalIncludeDirectories>../../../../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>BOOST_SYSTEM_NO_DEPRECATED;BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <DisableLanguageExtensions>false</DisableLanguageExtensions>
+      <WarningLevel>Level4</WarningLevel>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>C:\boost\develop\stage\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+</Project>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/filesystem/test/odr1_test.cpp b/vendor/pdalboost/libs/filesystem/test/odr1_test.cpp
new file mode 100644
index 0000000..1537d00
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/odr1_test.cpp
@@ -0,0 +1,24 @@
+//  Boost Filesystem odr1_test.cpp  ----------------------------------------------------//
+
+//  Copyright Beman Dawes 2014.
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem.hpp>
+
+namespace pdalboost
+{
+  namespace filesystem
+  {
+    void tu2();
+  }
+}
+
+int main()
+{
+  pdalboost::filesystem::tu2();
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/odr2_test.cpp b/vendor/pdalboost/libs/filesystem/test/odr2_test.cpp
new file mode 100644
index 0000000..02d5e39
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/odr2_test.cpp
@@ -0,0 +1,18 @@
+//  Boost Filesystem odr2_test.cpp  ----------------------------------------------------//
+
+//  Copyright Beman Dawes 2014.
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/filesystem.hpp>
+
+namespace pdalboost
+{
+  namespace filesystem
+  {
+    void tu2() {}
+  }
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/operations_test.cpp b/vendor/pdalboost/libs/filesystem/test/operations_test.cpp
new file mode 100644
index 0000000..2c3d046
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/operations_test.cpp
@@ -0,0 +1,2223 @@
+//  Boost operations_test.cpp  ---------------------------------------------------------//
+
+//  Copyright Beman Dawes 2002, 2009.
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/config/warning_disable.hpp>
+
+//  See deprecated_test for tests of deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED 
+#  define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+#  define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/operations.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/cerrno.hpp>
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+namespace fs = pdalboost::filesystem;
+using pdalboost::system::error_code;
+using pdalboost::system::system_category;
+using pdalboost::system::system_error;
+
+#include <fstream>
+#include <iostream>
+
+using std::cout;
+using std::endl;
+
+#include <string>
+#include <vector>
+#include <algorithm>
+#include <cstring> // for strncmp, etc.
+#include <ctime>
+#include <cstdlib> // for system(), getenv(), etc.
+
+#ifdef BOOST_WINDOWS_API
+# include <windows.h>
+
+inline std::wstring convert(const char* c)
+{
+   std::string s(c);
+   
+   return std::wstring(s.begin(), s.end());
+}
+
+#if defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__)
+//  Note: these three setenv* functions are not general solutions for the missing
+//  setenv* problem on VC++. See Microsoft's _putenv for that need, and ticker #7018
+//  for discussion and rationale for returning void for this test program, which needs
+//  to work for both the MSVC Runtime and the Windows Runtime (which does not support
+//  _putenv).
+
+inline void setenv(const char* name, const fs::path::value_type* val, int) 
+{
+  SetEnvironmentVariableW(convert(name).c_str(), val); 
+}
+
+inline void setenv(const char* name, const char* val, int) 
+{
+  SetEnvironmentVariableW(convert(name).c_str(), convert(val).c_str()); 
+}
+
+inline void unsetenv(const char* name) 
+{ 
+  SetEnvironmentVariableW(convert(name).c_str(), 0); 
+}
+#endif
+
+#else
+
+#include <stdlib.h>  // allow unqualifed calls to env funcs on SunOS
+
+#endif
+
+//  on Windows, except for standard libaries known to have wchar_t overloads for
+//  file stream I/O, use path::string() to get a narrow character c_str()
+#if defined(BOOST_WINDOWS_API) \
+  && (!defined(_CPPLIB_VER) || _CPPLIB_VER < 405)  // not Dinkumware || no wide overloads
+# define BOOST_FILESYSTEM_C_STR string().c_str()  // use narrow, since wide not available
+#else  // use the native c_str, which will be narrow on POSIX, wide on Windows
+# define BOOST_FILESYSTEM_C_STR c_str()
+#endif
+
+#define CHECK_EXCEPTION(Functor,Expect) throws_fs_error(Functor,Expect,__LINE__)
+
+namespace
+{
+  typedef int errno_t;
+  std::string platform(BOOST_PLATFORM);
+  bool report_throws = false;
+  bool cleanup = true;
+  bool skip_long_windows_tests = false;
+
+  fs::directory_iterator end_itr;
+  fs::path dir;
+  fs::path d1;
+  fs::path d2;
+  fs::path f0;
+  fs::path f1;
+  fs::path d1f1;
+
+  bool create_symlink_ok(true);
+
+  fs::path ng(" no-way, Jose");
+
+  unsigned short language_id;  // 0 except for Windows
+
+  const fs::path temp_dir(fs::unique_path("op-test-%%%%-%%%%"));
+
+  void create_file(const fs::path & ph, const std::string & contents = std::string())
+  {
+    std::ofstream f(ph.BOOST_FILESYSTEM_C_STR);
+    if (!f)
+      throw fs::filesystem_error("operations_test create_file",
+      ph, error_code(errno, system_category()));
+    if (!contents.empty()) f << contents;
+  }
+
+  void verify_file(const fs::path & ph, const std::string & expected)
+  {
+    std::ifstream f(ph.BOOST_FILESYSTEM_C_STR);
+    if (!f)
+      throw fs::filesystem_error("operations_test verify_file",
+        ph, error_code(errno, system_category()));
+    std::string contents;
+    f >> contents;
+    if (contents != expected)
+      throw fs::filesystem_error("operations_test verify_file contents \""
+        + contents  + "\" != \"" + expected + "\"", ph, error_code());
+  }
+
+  template< typename F >
+    bool throws_fs_error(F func, errno_t en, int line)
+  {
+    try { func(); }
+
+    catch (const fs::filesystem_error & ex)
+    {
+      if (report_throws)
+      {
+        // use the what() convenience function to display exceptions
+        cout << "\n" << ex.what() << "\n";
+      }
+      if (en == 0
+        || en == ex.code().default_error_condition().value()) return true;
+      cout
+        << "\nWarning: line " << line
+        << " exception reports default_error_condition().value() "
+        << ex.code().default_error_condition().value()
+        << ", should be " << en
+        << "\n value() is " << ex.code().value()
+        << endl;
+      return true;
+    }
+    return false;
+  }
+
+  pdalboost::system::error_category* poison_category_aux() { return 0; }
+  pdalboost::system::error_category& poison_category()     { return *poison_category_aux(); }
+
+  // compile-only two argument "do-the-right-thing" tests
+  //   verifies that all overload combinations compile without error
+  void do_the_right_thing_tests(bool call_ = false)
+  {
+    if (call_)
+    {
+      fs::path p;
+      std::string s;
+      const char* a = 0;
+      fs::copy_file(p, p);
+      fs::copy_file(s, p);
+      fs::copy_file(a, p);
+      fs::copy_file(p, s);
+      fs::copy_file(p, a);
+      fs::copy_file(s, s);
+      fs::copy_file(a, s);
+      fs::copy_file(s, a);
+      fs::copy_file(a, a);
+    }
+  }
+
+  void bad_file_size()
+  {
+    fs::file_size(" No way, Jose");
+  }
+  
+  void bad_directory_size()
+  {
+    fs::file_size(fs::current_path());
+  }
+  
+  fs::path bad_create_directory_path;
+  void bad_create_directory()
+  {
+    fs::create_directory(bad_create_directory_path);
+  }
+  
+  void bad_equivalent()
+  {
+    fs::equivalent("no-such-path", "another-not-present-path");
+  }
+
+  fs::path bad_remove_dir;
+  void bad_remove()
+  {
+    fs::remove(bad_remove_dir);
+  }
+
+  class renamer
+  {
+  public:
+    renamer(const fs::path & p1, const fs::path & p2)
+      : from(p1), to(p2) {}
+    void operator()()
+    {
+      fs::rename(from, to);
+    }
+  private:
+    fs::path from;
+    fs::path to;
+  };
+
+  //------------------------------ debugging aids --------------------------------------//
+
+  //std::ostream& operator<<(std::ostream& os, const fs::file_status& s)
+  //{
+  //  if (s.type() == fs::status_error)        { os << "status_error"; }
+  //  else if (s.type() == fs::file_not_found) { os << "file_not_found"; }
+  //  else if (s.type() == fs::regular_file)   { os << "regular_file"; }
+  //  else if (s.type() == fs::directory_file) { os << "directory_file"; }
+  //  else if (s.type() == fs::symlink_file)   { os << "symlink_file"; }
+  //  else if (s.type() == fs::block_file)     { os << "block_file"; }
+  //  else if (s.type() == fs::character_file) { os << "character_file"; }
+  //  else if (s.type() == fs::fifo_file)      { os << "fifo_file"; }
+  //  else if (s.type() == fs::socket_file)    { os << "socket_file"; }
+  //  else if (s.type() == fs::reparse_file)   { os << "reparse_file"; }
+  //  else if (s.type() == fs::type_unknown)   { os << "type_unknown"; }
+  //  else                                     { os << "_detail_directory_symlink"; }
+  //  return os;
+  //}
+
+  //void dump_tree(const fs::path & root)
+  //{
+  //  cout << "dumping tree rooted at " << root << endl;
+  //  for (fs::recursive_directory_iterator it (root, fs::symlink_option::recurse);
+  //       it != fs::recursive_directory_iterator();
+  //       ++it)
+  //  {
+  //    for (int i = 0; i <= it.level(); ++i)
+  //      cout << "  ";
+
+  //    cout << it->path();
+  //    if (fs::is_symlink(it->path()))
+  //    {
+  //      cout << " [symlink]" << endl;
+  //    }
+  //    else
+  //      cout << endl;
+  //  }
+  //}
+
+  //  exception_tests()  ---------------------------------------------------------------//
+
+  void exception_tests()
+  {
+    cout << "exception_tests..." << endl;
+    bool exception_thrown;
+
+    //  catch runtime_error by value
+
+    cout << "  catch runtime_error by value" << endl;
+    exception_thrown = false;
+    try
+    {
+      fs::create_directory("no-such-dir/foo/bar");
+    }
+    catch (std::runtime_error x)
+    {
+      exception_thrown = true;
+      if (report_throws) cout << x.what() << endl;
+      if (platform == "Windows" && language_id == 0x0409) // English (United States)
+        // the stdcxx standard library apparently appends additional info
+        // to what(), so check only the initial portion: 
+        BOOST_TEST(std::strncmp(x.what(),
+          "pdalboost::filesystem::create_directory",
+          sizeof("pdalboost::filesystem::create_directory")-1) == 0);
+    }
+    BOOST_TEST(exception_thrown);
+
+    //  catch system_error by value
+
+    cout << "  catch system_error by value" << endl;
+    exception_thrown = false;
+    try
+    {
+      fs::create_directory("no-such-dir/foo/bar");
+    }
+    catch (system_error x)
+    {
+      exception_thrown = true;
+      if (report_throws) cout << x.what() << endl;
+      if (platform == "Windows" && language_id == 0x0409) // English (United States)
+        BOOST_TEST(std::strcmp(x.what(),
+          "pdalboost::filesystem::create_directory: The system cannot find the path specified") == 0);
+    }
+    BOOST_TEST(exception_thrown);
+
+    //  catch filesystem_error by value
+
+    cout << "  catch filesystem_error by value" << endl;
+    exception_thrown = false;
+    try
+    {
+      fs::create_directory("no-such-dir/foo/bar");
+    }
+    catch (fs::filesystem_error x)
+    {
+      exception_thrown = true;
+      if (report_throws) cout << x.what() << endl;
+      if (platform == "Windows" && language_id == 0x0409) // English (United States)
+      {
+        bool ok (std::strcmp(x.what(),
+          "pdalboost::filesystem::create_directory: The system cannot find the path specified: \"no-such-dir/foo/bar\"") == 0);
+        BOOST_TEST(ok);
+        if (!ok)
+        {
+          cout << "what returns \"" << x.what() << "\"" << endl;
+        }
+      }
+    }
+    BOOST_TEST(exception_thrown);
+
+    //  catch filesystem_error by const reference
+
+    cout << "  catch filesystem_error by const reference" << endl;
+    exception_thrown = false;
+    try
+    {
+      fs::create_directory("no-such-dir/foo/bar");
+    }
+    catch (const fs::filesystem_error & x)
+    {
+      exception_thrown = true;
+      if (report_throws) cout << x.what() << endl;
+      if (platform == "Windows" && language_id == 0x0409) // English (United States)
+      {
+        bool ok (std::strcmp(x.what(),
+          "pdalboost::filesystem::create_directory: The system cannot find the path specified: \"no-such-dir/foo/bar\"") == 0);
+        BOOST_TEST(ok);
+        if (!ok)
+        {
+          cout << "what returns \"" << x.what() << "\"" << endl;
+        }
+      }
+    }
+    BOOST_TEST(exception_thrown);
+
+    // the bound functions should throw, so CHECK_EXCEPTION() should return true
+
+    BOOST_TEST(CHECK_EXCEPTION(bad_file_size, ENOENT));
+
+    if (platform == "Windows")
+      BOOST_TEST(CHECK_EXCEPTION(bad_directory_size, ENOENT));
+    else
+      BOOST_TEST(CHECK_EXCEPTION(bad_directory_size, 0));
+
+    // test path::exception members
+    try { fs::file_size(ng); } // will throw
+
+    catch (const fs::filesystem_error & ex)
+    {
+      BOOST_TEST(ex.path1().string() == " no-way, Jose");
+    }
+
+    cout << "  exception_tests complete" << endl;
+  }
+
+  // create a directory tree that can be used by subsequent tests  ---------------------//
+  //
+  //    dir
+  //      d1
+  //        d1f1       // an empty file
+  //      f0           // an empty file
+  //      f1           // a file containing "file-f1"
+ 
+  void create_tree()
+  {
+    cout << "creating test directories and files in " << dir << endl;
+
+    // create directory d1
+    BOOST_TEST(!fs::create_directory(dir));
+    BOOST_TEST(!fs::is_symlink(dir));
+    BOOST_TEST(!fs::is_symlink("nosuchfileordirectory"));
+    d1 = dir / "d1";
+    BOOST_TEST(fs::create_directory(d1));
+    BOOST_TEST(fs::exists(d1));
+    BOOST_TEST(fs::is_directory(d1));
+    BOOST_TEST(fs::is_empty(d1));
+
+    // create an empty file named "d1f1"
+    d1f1 = d1 / "d1f1";
+    create_file(d1f1, "");
+    BOOST_TEST(fs::exists(d1f1));
+    BOOST_TEST(!fs::is_directory(d1f1));
+    BOOST_TEST(fs::is_regular_file(d1f1));
+    BOOST_TEST(fs::is_empty(d1f1));
+    BOOST_TEST(fs::file_size(d1f1) == 0);
+    BOOST_TEST(fs::hard_link_count(d1f1) == 1);
+
+    // create an empty file named "f0"
+    f0 = dir / "f0";
+    create_file(f0, "");
+    BOOST_TEST(fs::exists(f0));
+    BOOST_TEST(!fs::is_directory(f0));
+    BOOST_TEST(fs::is_regular_file(f0));
+    BOOST_TEST(fs::is_empty(f0));
+    BOOST_TEST(fs::file_size(f0) == 0);
+    BOOST_TEST(fs::hard_link_count(f0) == 1);
+
+    // create a file named "f1"
+    f1 = dir / "f1";
+    create_file(f1, "file-f1");
+    BOOST_TEST(fs::exists(f1));
+    BOOST_TEST(!fs::is_directory(f1));
+    BOOST_TEST(fs::is_regular_file(f1));
+    BOOST_TEST(fs::file_size(f1) == 7);
+    verify_file(f1, "file-f1");
+  }
+
+  //  directory_iterator_tests  --------------------------------------------------------//
+
+  void directory_iterator_tests()
+  {
+    cout << "directory_iterator_tests..." << endl;
+
+    bool dir_itr_exception(false);
+    try { fs::directory_iterator it(""); }
+    catch (const fs::filesystem_error &) { dir_itr_exception = true; }
+    BOOST_TEST(dir_itr_exception);
+
+    error_code ec;
+
+    BOOST_TEST(!ec);
+    fs::directory_iterator it("", ec);
+    BOOST_TEST(ec);
+
+    dir_itr_exception = false;
+    try { fs::directory_iterator itx("nosuchdirectory"); }
+    catch (const fs::filesystem_error &) { dir_itr_exception = true; }
+    BOOST_TEST(dir_itr_exception);
+
+    ec.clear();
+    fs::directory_iterator it2x("nosuchdirectory", ec);
+    BOOST_TEST(ec);
+
+    dir_itr_exception = false;
+    try
+    {
+      error_code ecx;
+      fs::directory_iterator itx("nosuchdirectory", ecx);
+      BOOST_TEST(ecx);
+      BOOST_TEST(ecx == pdalboost::system::errc::no_such_file_or_directory);
+    }
+    catch (const fs::filesystem_error &) { dir_itr_exception = true; }
+    BOOST_TEST(!dir_itr_exception);
+    
+    // create a second directory named d2
+    d2 = dir / "d2";
+    fs::create_directory(d2);
+    BOOST_TEST(fs::exists(d2));
+    BOOST_TEST(fs::is_directory(d2));
+
+    // test the basic operation of directory_iterators, and test that
+    // stepping one iterator doesn't affect a different iterator.
+    {
+      typedef std::vector<fs::directory_entry> vec_type;
+      vec_type vec;
+
+      fs::directory_iterator it1(dir);
+      BOOST_TEST(it1 != fs::directory_iterator());
+      BOOST_TEST(fs::exists(it1->status()));
+      vec.push_back(*it1);
+      BOOST_TEST(*it1 == vec[0]);
+
+      fs::directory_iterator it2(dir);
+      BOOST_TEST(it2 != fs::directory_iterator());
+      BOOST_TEST(*it1 == *it2);
+
+      ++it1;
+      BOOST_TEST(it1 != fs::directory_iterator());
+      BOOST_TEST(fs::exists(it1->status()));
+      BOOST_TEST(it1 != it2);
+      BOOST_TEST(*it1 != vec[0]);
+      BOOST_TEST(*it2 == vec[0]);
+      vec.push_back(*it1);
+
+      ++it1;
+      BOOST_TEST(it1 != fs::directory_iterator());
+      BOOST_TEST(fs::exists(it1->status()));
+      BOOST_TEST(it1 != it2);
+      BOOST_TEST(*it2 == vec[0]);
+      vec.push_back(*it1);
+
+      ++it1;
+      BOOST_TEST(it1 != fs::directory_iterator());
+      BOOST_TEST(fs::exists(it1->status()));
+      BOOST_TEST(it1 != it2);
+      BOOST_TEST(*it2 == vec[0]);
+      vec.push_back(*it1);
+
+      ++it1;
+      BOOST_TEST(it1 == fs::directory_iterator());
+
+      BOOST_TEST(*it2 == vec[0]);
+      ec.clear();
+      it2.increment(ec);
+      BOOST_TEST(!ec);
+      BOOST_TEST(it2 != fs::directory_iterator());
+      BOOST_TEST(it1 == fs::directory_iterator());
+      BOOST_TEST(*it2 == vec[1]);
+      ++it2;
+      BOOST_TEST(*it2 == vec[2]);
+      BOOST_TEST(it1 == fs::directory_iterator());
+      ++it2;
+      BOOST_TEST(*it2 == vec[3]);
+      ++it2;
+      BOOST_TEST(it1 == fs::directory_iterator());
+      BOOST_TEST(it2 == fs::directory_iterator());
+
+      // sort vec and check that the right directory entries were found
+      std::sort(vec.begin(), vec.end());
+
+      BOOST_TEST_EQ(vec[0].path().filename().string(), std::string("d1"));
+      BOOST_TEST_EQ(vec[1].path().filename().string(), std::string("d2"));
+      BOOST_TEST_EQ(vec[2].path().filename().string(), std::string("f0"));
+      BOOST_TEST_EQ(vec[3].path().filename().string(), std::string("f1"));
+    }
+
+    { // *i++ must meet the standard's InputIterator requirements
+      fs::directory_iterator dir_itr(dir);
+      BOOST_TEST(dir_itr != fs::directory_iterator());
+      fs::path p = dir_itr->path();
+      BOOST_TEST((*dir_itr++).path() == p);
+      BOOST_TEST(dir_itr != fs::directory_iterator());
+      BOOST_TEST(dir_itr->path() != p);
+
+      // test case reported in comment to SourceForge bug tracker [937606]
+      fs::directory_iterator itx(dir);
+      const fs::path p1 = (*itx++).path();
+      BOOST_TEST(itx != fs::directory_iterator());
+      const fs::path p2 = (*itx++).path();
+      BOOST_TEST(p1 != p2);
+      ++itx;
+      ++itx;
+      BOOST_TEST(itx == fs::directory_iterator());
+    }
+
+    //  Windows has a tricky special case when just the root-name is given,
+    //  causing the rest of the path to default to the current directory.
+    //  Reported as S/F bug [ 1259176 ]
+    if (platform == "Windows")
+    {
+      fs::path root_name_path(fs::current_path().root_name());
+      fs::directory_iterator itx(root_name_path);
+      BOOST_TEST(itx != fs::directory_iterator());
+//      BOOST_TEST(fs::exists((*itx).path()));
+      BOOST_TEST(fs::exists(itx->path()));
+      BOOST_TEST(itx->path().parent_path() == root_name_path);
+      bool found(false);
+      do
+      {
+        if (itx->path().filename() == temp_dir.filename())
+          found = true;
+      } while (++itx != fs::directory_iterator());
+      BOOST_TEST(found);
+    }
+
+    // there was an inital bug in directory_iterator that caused premature
+    // close of an OS handle. This block will detect regression.
+    {
+      fs::directory_iterator di;
+      { 
+        di = fs::directory_iterator(dir);
+      }
+      BOOST_TEST(++di != fs::directory_iterator());
+    }
+
+    cout << "  directory_iterator_tests complete" << endl;
+  }
+
+  //  recursive_directory_iterator_tests  ----------------------------------------------//
+
+  int walk_tree(bool recursive)
+  {
+//    cout << "    walk_tree" << endl;
+    error_code ec;
+    int d1f1_count = 0;
+    for (fs::recursive_directory_iterator it (dir,
+      recursive ? fs::symlink_option::recurse : fs::symlink_option::no_recurse);
+         it != fs::recursive_directory_iterator();
+         it.increment(ec))
+    {
+//      cout << "      " << it->path() << endl;
+      if (it->path().filename() == "d1f1")
+        ++d1f1_count;
+    }
+    return d1f1_count;
+  }
+
+  void recursive_directory_iterator_tests()
+  {
+    cout << "recursive_directory_iterator_tests..." << endl;
+    BOOST_TEST_EQ(walk_tree(false), 1);
+    if (create_symlink_ok)
+      BOOST_TEST(walk_tree(true) > 1);
+
+    //  test iterator increment with error_code argument
+    cout << "  with error_code argument" << endl;
+    pdalboost::system::error_code ec;
+    int d1f1_count = 0;
+    for (fs::recursive_directory_iterator it (dir, fs::symlink_option::no_recurse);
+         it != fs::recursive_directory_iterator();
+         it.increment(ec))
+    {
+      if (it->path().filename() == "d1f1")
+        ++d1f1_count;
+    }
+    BOOST_TEST(!ec);
+    BOOST_TEST_EQ(d1f1_count, 1);
+
+    cout << "  recursive_directory_iterator_tests complete" << endl;
+  }
+
+  //  iterator_status_tests  -----------------------------------------------------------//
+
+  void iterator_status_tests()
+  {
+    cout << "iterator_status_tests..." << endl;
+
+    error_code ec;
+    // harmless if these fail:
+    fs::create_symlink(dir/"f0", dir/"f0_symlink", ec);
+    fs::create_symlink(dir/"no such file", dir/"dangling_symlink", ec);
+    fs::create_directory_symlink(dir/"d1", dir/"d1_symlink", ec);
+    fs::create_directory_symlink(dir/"no such directory",
+      dir/"dangling_directory_symlink", ec);
+
+    for (fs::directory_iterator it(dir);
+          it != fs::directory_iterator(); ++it)
+    {
+      BOOST_TEST(fs::status(it->path()).type() == it->status().type());
+      BOOST_TEST(fs::symlink_status(it->path()).type() == it->symlink_status().type());
+      if (it->path().filename() == "d1")
+      {
+        BOOST_TEST(fs::is_directory(it->status()));
+        BOOST_TEST(fs::is_directory(it->symlink_status()));
+      }
+      else if (it->path().filename() == "d2")
+      {
+        BOOST_TEST(fs::is_directory(it->status()));
+        BOOST_TEST(fs::is_directory(it->symlink_status()));
+      }
+      else if (it->path().filename() == "f0")
+      {
+        BOOST_TEST(fs::is_regular_file(it->status()));
+        BOOST_TEST(fs::is_regular_file(it->symlink_status()));
+      }
+      else if (it->path().filename() == "f1")
+      {
+        BOOST_TEST(fs::is_regular_file(it->status()));
+        BOOST_TEST(fs::is_regular_file(it->symlink_status()));
+      }
+      else if (it->path().filename() == "f0_symlink")
+      {
+        BOOST_TEST(fs::is_regular_file(it->status()));
+        BOOST_TEST(fs::is_symlink(it->symlink_status()));
+      }
+      else if (it->path().filename() == "dangling_symlink")
+      {
+        BOOST_TEST(it->status().type() == fs::file_not_found);
+        BOOST_TEST(fs::is_symlink(it->symlink_status()));
+      }
+      else if (it->path().filename() == "d1_symlink")
+      {
+        BOOST_TEST(fs::is_directory(it->status()));
+        BOOST_TEST(fs::is_symlink(it->symlink_status()));
+      }
+      else if (it->path().filename() == "dangling_directory_symlink")
+      {
+        BOOST_TEST(it->status().type() == fs::file_not_found);
+        BOOST_TEST(fs::is_symlink(it->symlink_status()));
+      }
+      //else
+      //  cout << "    Note: unexpected directory entry " << it->path().filename() << endl;
+    }
+  }
+  
+  //  recursive_iterator_status_tests  -------------------------------------------------//
+
+  void recursive_iterator_status_tests()
+  {
+    cout << "recursive_iterator_status_tests..." << endl;
+    for (fs::recursive_directory_iterator it (dir);
+         it != fs::recursive_directory_iterator();
+         ++it)
+    {
+      BOOST_TEST(fs::status(it->path()).type() == it->status().type());
+      BOOST_TEST(fs::symlink_status(it->path()).type() == it->symlink_status().type());
+    }
+  }
+  
+  //  create_hard_link_tests  ----------------------------------------------------------//
+
+  void create_hard_link_tests()
+  {
+    cout << "create_hard_link_tests..." << endl;
+
+    fs::path from_ph(dir / "f3");
+    fs::path f1x(dir / "f1");
+
+    BOOST_TEST(!fs::exists(from_ph));
+    BOOST_TEST(fs::exists(f1x));
+    bool create_hard_link_ok(true);
+    try { fs::create_hard_link(f1x, from_ph); }
+    catch (const fs::filesystem_error & ex)
+    {
+      create_hard_link_ok = false;
+      cout
+        << "     *** For information only ***\n"
+           "     create_hard_link() attempt failed\n"
+           "     filesystem_error.what() reports: " << ex.what() << "\n"
+           "     create_hard_link() may not be supported on this file system\n";
+    }
+
+    if (create_hard_link_ok)
+    {
+      cout
+        << "     *** For information only ***\n"
+           "     create_hard_link() succeeded\n";
+      BOOST_TEST(fs::exists(from_ph));
+      BOOST_TEST(fs::exists(f1x));
+      BOOST_TEST(fs::equivalent(from_ph, f1x));
+      BOOST_TEST(fs::hard_link_count(from_ph) == 2);
+      BOOST_TEST(fs::hard_link_count(f1x) == 2);
+    }
+
+    //  Although tests may be running on a FAT or other file system that does
+    //  not support hard links, that is unusual enough that it is considered
+    //  a test failure.
+    BOOST_TEST(create_hard_link_ok);
+
+    error_code ec;
+    fs::create_hard_link(fs::path("doesnotexist"),
+      fs::path("shouldnotwork"), ec);
+    BOOST_TEST(ec);
+  }
+  
+  //  create_symlink_tests  ------------------------------------------------------------//
+
+  void create_symlink_tests()
+  {
+    cout << "create_symlink_tests..." << endl;
+
+    fs::path from_ph(dir / "f4");
+    fs::path f1x(dir / "f1");
+    BOOST_TEST(!fs::exists(from_ph));
+    BOOST_TEST(fs::exists(f1x));
+    try { fs::create_symlink(f1x, from_ph); }
+    catch (const fs::filesystem_error & ex)
+    {
+      create_symlink_ok = false;
+      cout                             
+        << "     *** For information only ***\n"
+           "     create_symlink() attempt failed\n"
+           "     filesystem_error.what() reports: " << ex.what() << "\n"
+           "     create_symlink() may not be supported on this operating system or file system\n";
+    }
+
+    if (create_symlink_ok)
+    {
+      cout
+        << "     *** For information only ***\n"
+           "     create_symlink() succeeded\n";
+      BOOST_TEST(fs::exists(from_ph));
+      BOOST_TEST(fs::is_symlink(from_ph));
+      BOOST_TEST(fs::exists(f1x));
+      BOOST_TEST(fs::equivalent(from_ph, f1x));
+      BOOST_TEST(fs::read_symlink(from_ph) == f1x);
+
+      fs::file_status stat = fs::symlink_status(from_ph);
+      BOOST_TEST(fs::exists(stat));
+      BOOST_TEST(!fs::is_directory(stat));
+      BOOST_TEST(!fs::is_regular_file(stat));
+      BOOST_TEST(!fs::is_other(stat));
+      BOOST_TEST(fs::is_symlink(stat));
+
+      stat = fs::status(from_ph);
+      BOOST_TEST(fs::exists(stat));
+      BOOST_TEST(!fs::is_directory(stat));
+      BOOST_TEST(fs::is_regular_file(stat));
+      BOOST_TEST(!fs::is_other(stat));
+      BOOST_TEST(!fs::is_symlink(stat));
+       
+      // since create_symlink worked, copy_symlink should also work
+      fs::path symlink2_ph(dir / "symlink2");
+      fs::copy_symlink(from_ph, symlink2_ph);
+      stat = fs::symlink_status(symlink2_ph);
+      BOOST_TEST(fs::is_symlink(stat));
+      BOOST_TEST(fs::exists(stat));
+      BOOST_TEST(!fs::is_directory(stat));
+      BOOST_TEST(!fs::is_regular_file(stat));
+      BOOST_TEST(!fs::is_other(stat));
+    }
+
+    error_code ec = error_code();
+    fs::create_symlink("doesnotexist", "", ec);
+    BOOST_TEST(ec);
+  }
+
+  //  permissions_tests  ---------------------------------------------------------------//
+
+  void permissions_tests()
+  {
+    cout << "permissions_tests..." << endl;
+
+    fs::path p(dir / "permissions.txt");
+    create_file(p);
+
+    if (platform == "POSIX")
+    {
+      cout << "  fs::status(p).permissions() " << std::oct << fs::status(p).permissions()
+        << std::dec << endl;
+      BOOST_TEST((fs::status(p).permissions() & 0600) == 0600);  // 0644, 0664 sometimes returned
+
+      fs::permissions(p, fs::owner_all);
+      BOOST_TEST(fs::status(p).permissions() == fs::owner_all);
+
+      fs::permissions(p, fs::add_perms | fs::group_all);
+      BOOST_TEST(fs::status(p).permissions() == (fs::owner_all | fs::group_all));
+
+      fs::permissions(p, fs::remove_perms | fs::group_all);
+      BOOST_TEST(fs::status(p).permissions() == fs::owner_all);
+
+      // some POSIX platforms cache permissions during directory iteration, some don't
+      // so test that iteration finds the correct permissions
+      for (fs::directory_iterator itr(dir); itr != fs::directory_iterator(); ++itr)
+        if (itr->path().filename() == fs::path("permissions.txt"))
+          BOOST_TEST(itr->status().permissions() == fs::owner_all);
+
+      if (create_symlink_ok)  // only if symlinks supported
+      {
+        BOOST_TEST(fs::status(p).permissions() == fs::owner_all);
+        fs::path p2(dir / "permissions-symlink.txt");
+        fs::create_symlink(p, p2);
+        cout << std::oct; 
+        cout << "   status(p).permissions() "  << fs::status(p).permissions() << endl;
+        cout << "  status(p2).permissions() "  << fs::status(p).permissions() << endl;
+        fs::permissions(p2, fs::add_perms | fs::others_read);
+        cout << "   status(p).permissions(): " << fs::status(p).permissions() << endl; 
+        cout << "  status(p2).permissions(): " << fs::status(p2).permissions() << endl;
+        cout << std::dec;
+      }
+
+    }
+    else // Windows
+    {
+      BOOST_TEST(fs::status(p).permissions() == 0666);
+      fs::permissions(p, fs::remove_perms | fs::group_write);
+      BOOST_TEST(fs::status(p).permissions() == 0444);
+      fs::permissions(p, fs::add_perms | fs::group_write);
+      BOOST_TEST(fs::status(p).permissions() == 0666);
+    }
+  }
+  
+  //  rename_tests  --------------------------------------------------------------------//
+
+  void rename_tests()
+  {
+    cout << "rename_tests..." << endl;
+
+    fs::path f1x(dir / "f1");
+    BOOST_TEST(fs::exists(f1x));
+
+    // error: rename a non-existent old file
+    BOOST_TEST(!fs::exists(d1 / "f99"));
+    BOOST_TEST(!fs::exists(d1 / "f98"));
+    renamer n1a(d1 / "f99", d1 / "f98");
+    BOOST_TEST(CHECK_EXCEPTION(n1a, ENOENT));
+    renamer n1b(fs::path(""), d1 / "f98");
+    BOOST_TEST(CHECK_EXCEPTION(n1b, ENOENT));
+
+    // error: rename an existing file to ""
+    renamer n2(f1x, "");
+    BOOST_TEST(CHECK_EXCEPTION(n2, ENOENT));
+
+    // rename an existing file to an existent file
+    create_file(dir / "ff1", "ff1");
+    create_file(dir / "ff2", "ff2");
+    fs::rename(dir / "ff2", dir / "ff1");
+    BOOST_TEST(fs::exists(dir / "ff1"));
+    verify_file(dir / "ff1", "ff2");
+    BOOST_TEST(!fs::exists(dir / "ff2"));
+
+    // rename an existing file to itself
+    BOOST_TEST(fs::exists(dir / "f1"));
+    fs::rename(dir / "f1", dir / "f1");
+    BOOST_TEST(fs::exists(dir / "f1"));
+
+    // error: rename an existing directory to an existing non-empty directory
+    BOOST_TEST(fs::exists(dir / "f1"));
+    BOOST_TEST(fs::exists(d1 / "f2"));
+    // several POSIX implementations (cygwin, openBSD) report ENOENT instead of EEXIST,
+    // so we don't verify error type on the following test.
+    renamer n3b(dir, d1);
+    BOOST_TEST(CHECK_EXCEPTION(n3b, 0));
+
+    //  error: move existing file to a nonexistent parent directory
+    BOOST_TEST(!fs::is_directory(dir / "f1"));
+    BOOST_TEST(!fs::exists(dir / "d3/f3"));
+    renamer n4a(dir / "f1", dir / "d3/f3");
+    BOOST_TEST(CHECK_EXCEPTION(n4a, ENOENT));
+
+    // rename existing file in same directory
+    BOOST_TEST(fs::exists(d1 / "f2"));
+    BOOST_TEST(!fs::exists(d1 / "f50"));
+    fs::rename(d1 / "f2", d1 / "f50");
+    BOOST_TEST(!fs::exists(d1 / "f2"));
+    BOOST_TEST(fs::exists(d1 / "f50"));
+    fs::rename(d1 / "f50", d1 / "f2");
+    BOOST_TEST(fs::exists(d1 / "f2"));
+    BOOST_TEST(!fs::exists(d1 / "f50"));
+
+    // move and rename an existing file to a different directory
+    fs::rename(d1 / "f2", d2 / "f3");
+    BOOST_TEST(!fs::exists(d1 / "f2"));
+    BOOST_TEST(!fs::exists(d2 / "f2"));
+    BOOST_TEST(fs::exists(d2 / "f3"));
+    BOOST_TEST(!fs::is_directory(d2 / "f3"));
+    verify_file(d2 / "f3", "file-f1");
+    fs::rename(d2 / "f3", d1 / "f2");
+    BOOST_TEST(fs::exists(d1 / "f2"));
+
+    // error: move existing directory to nonexistent parent directory
+    BOOST_TEST(fs::exists(d1));
+    BOOST_TEST(!fs::exists(dir / "d3/d5"));
+    BOOST_TEST(!fs::exists(dir / "d3"));
+    renamer n5a(d1, dir / "d3/d5");
+    BOOST_TEST(CHECK_EXCEPTION(n5a, ENOENT));
+
+    // rename existing directory
+    fs::path d3(dir / "d3");
+    BOOST_TEST(fs::exists(d1));
+    BOOST_TEST(fs::exists(d1 / "f2"));
+    BOOST_TEST(!fs::exists(d3));
+    fs::rename(d1, d3);
+    BOOST_TEST(!fs::exists(d1));
+    BOOST_TEST(fs::exists(d3));
+    BOOST_TEST(fs::is_directory(d3));
+    BOOST_TEST(!fs::exists(d1 / "f2"));
+    BOOST_TEST(fs::exists(d3 / "f2"));
+    fs::rename(d3, d1);
+    BOOST_TEST(fs::exists(d1));
+    BOOST_TEST(fs::exists(d1 / "f2"));
+    BOOST_TEST(!fs::exists(d3));
+
+    // rename and move d1 to d2 / "d20"
+    BOOST_TEST(fs::exists(d1));
+    BOOST_TEST(!fs::exists(d2 / "d20"));
+    BOOST_TEST(fs::exists(d1 / "f2"));
+    fs::rename(d1, d2 / "d20");
+    BOOST_TEST(!fs::exists(d1));
+    BOOST_TEST(fs::exists(d2 / "d20"));
+    BOOST_TEST(fs::exists(d2 / "d20" / "f2"));
+    fs::rename(d2 / "d20", d1);
+    BOOST_TEST(fs::exists(d1));
+    BOOST_TEST(!fs::exists(d2 / "d20"));
+    BOOST_TEST(fs::exists(d1 / "f2"));
+  }
+  
+  //  predicate_and_status_tests  ------------------------------------------------------//
+
+  void predicate_and_status_tests()
+  {
+    cout << "predicate_and_status_tests..." << endl;
+
+    BOOST_TEST(!fs::exists(ng));
+    BOOST_TEST(!fs::is_directory(ng));
+    BOOST_TEST(!fs::is_regular_file(ng));
+    BOOST_TEST(!fs::is_symlink(ng));
+    fs::file_status stat(fs::status(ng));
+    BOOST_TEST(fs::type_present(stat));
+    BOOST_TEST(fs::permissions_present(stat));
+    BOOST_TEST(fs::status_known(stat));
+    BOOST_TEST(!fs::exists(stat));
+    BOOST_TEST(!fs::is_directory(stat));
+    BOOST_TEST(!fs::is_regular_file(stat));
+    BOOST_TEST(!fs::is_other(stat));
+    BOOST_TEST(!fs::is_symlink(stat));
+    stat = fs::status("");
+    BOOST_TEST(fs::type_present(stat));
+    BOOST_TEST(fs::permissions_present(stat));
+    BOOST_TEST(fs::status_known(stat));
+    BOOST_TEST(!fs::exists(stat));
+    BOOST_TEST(!fs::is_directory(stat));
+    BOOST_TEST(!fs::is_regular_file(stat));
+    BOOST_TEST(!fs::is_other(stat));
+    BOOST_TEST(!fs::is_symlink(stat));
+  }
+  
+  //  create_directory_tests  ----------------------------------------------------------//
+
+  void create_directory_tests()
+  {
+    cout << "create_directory_tests..." << endl;
+
+    BOOST_TEST(!fs::create_directory("."));
+    BOOST_TEST(!fs::create_directory(".."));
+
+    // create a directory, then check it for consistency
+    //   take extra care to report problems, since if this fails
+    //   many subsequent tests will fail
+    try
+    {
+      fs::create_directory(dir);
+    }
+
+    catch (const fs::filesystem_error & x)
+    {
+      cout << x.what() << "\n\n"
+         "***** Creating directory " << dir << " failed.   *****\n"
+         "***** This is a serious error that will prevent further tests    *****\n"
+         "***** from returning useful results. Further testing is aborted. *****\n\n";
+      std::exit(1);
+    }
+
+    catch (...)
+    {
+      cout << "\n\n"
+         "***** Creating directory " << dir << " failed.   *****\n"
+         "***** This is a serious error that will prevent further tests    *****\n"
+         "***** from returning useful results. Further testing is aborted. *****\n\n";
+      std::exit(1);
+    }
+
+    BOOST_TEST(fs::exists(dir));
+    BOOST_TEST(fs::is_empty(dir));
+    BOOST_TEST(fs::is_directory(dir));
+    BOOST_TEST(!fs::is_regular_file(dir));
+    BOOST_TEST(!fs::is_other(dir));
+    BOOST_TEST(!fs::is_symlink(dir));
+    fs::file_status stat = fs::status(dir);
+    BOOST_TEST(fs::exists(stat));
+    BOOST_TEST(fs::is_directory(stat));
+    BOOST_TEST(!fs::is_regular_file(stat));
+    BOOST_TEST(!fs::is_other(stat));
+    BOOST_TEST(!fs::is_symlink(stat));
+
+    cout << "  create_directory_tests complete" << endl;
+  }
+  
+  //  current_directory_tests  ---------------------------------------------------------//
+
+  void current_directory_tests()
+  {
+    cout << "current_directory_tests..." << endl;
+
+    // set the current directory, then check it for consistency
+    fs::path original_dir = fs::current_path();
+    BOOST_TEST(dir != original_dir);
+    fs::current_path(dir);
+    BOOST_TEST(fs::current_path() == dir);
+    BOOST_TEST(fs::current_path() != original_dir);
+    fs::current_path(original_dir);
+    BOOST_TEST(fs::current_path() == original_dir);
+    BOOST_TEST(fs::current_path() != dir);
+
+    // make sure the overloads work
+    fs::current_path(dir.c_str());
+    BOOST_TEST(fs::current_path() == dir);
+    BOOST_TEST(fs::current_path() != original_dir);
+    fs::current_path(original_dir.string());
+    BOOST_TEST(fs::current_path() == original_dir);
+    BOOST_TEST(fs::current_path() != dir);
+  }
+
+  //  create_directories_tests  --------------------------------------------------------//
+
+  void create_directories_tests()
+  {
+    cout << "create_directories_tests..." << endl;
+
+    BOOST_TEST(!fs::create_directories("/")); 
+
+    fs::path p = dir / "level1/." / "level2/./.." / "level3/";
+    // trailing "/.", "/./..", and "/" in the above elements test ticket #7258 and
+    // related issues
+
+    BOOST_TEST(!fs::exists(p));
+    BOOST_TEST(fs::create_directories(p));
+    BOOST_TEST(fs::exists(p));
+    BOOST_TEST(fs::is_directory(p));
+
+    if (fs::exists("/permissions_test"))
+    {
+      error_code ec;
+      BOOST_TEST(!fs::create_directories("/permissions_test", ec));
+      BOOST_TEST(!fs::create_directories("/permissions_test/another_directory", ec));
+      BOOST_TEST(ec);
+    }
+  }
+
+  //  resize_file_tests  ---------------------------------------------------------------//
+
+  void resize_file_tests()
+  {
+    cout << "resize_file_tests..." << endl;
+
+    fs::path p(dir / "resize_file_test.txt");
+
+    fs::remove(p);
+    create_file(p, "1234567890");
+
+    BOOST_TEST(fs::exists(p));
+    BOOST_TEST_EQ(fs::file_size(p), 10U);
+    fs::resize_file(p, 5);
+    BOOST_TEST(fs::exists(p));
+    BOOST_TEST_EQ(fs::file_size(p), 5U);
+    fs::resize_file(p, 15);
+    BOOST_TEST(fs::exists(p));
+    BOOST_TEST_EQ(fs::file_size(p), 15U);
+
+    error_code ec;
+    fs::resize_file("no such file", 15, ec);
+    BOOST_TEST(ec);
+  }
+
+  //  status_of_nonexistent_tests  -----------------------------------------------------//
+
+  void status_of_nonexistent_tests()
+  {
+    cout << "status_of_nonexistent_tests..." << endl;
+    fs::path p ("nosuch");
+    BOOST_TEST(!fs::exists(p));
+    BOOST_TEST(!fs::is_regular_file(p));
+    BOOST_TEST(!fs::is_directory(p));
+    BOOST_TEST(!fs::is_symlink(p));
+    BOOST_TEST(!fs::is_other(p));
+
+    fs::file_status s = fs::status(p);
+    BOOST_TEST(!fs::exists(s));
+    BOOST_TEST_EQ(s.type(), fs::file_not_found);
+    BOOST_TEST(fs::type_present(s));
+    BOOST_TEST(!fs::is_regular_file(s));
+    BOOST_TEST(!fs::is_directory(s));
+    BOOST_TEST(!fs::is_symlink(s));
+    BOOST_TEST(!fs::is_other(s));
+  }
+
+  //  status_error_reporting_tests  ----------------------------------------------------//
+
+  void status_error_reporting_tests()
+  {
+    cout << "status_error_reporting_tests..." << endl;
+
+    error_code ec;
+
+    // test status, ec, for existing file
+    ec.assign(-1,poison_category());
+    BOOST_TEST(ec.value() == -1);
+    BOOST_TEST(&ec.category() == &poison_category()); 
+    fs::file_status s = fs::status(".",ec);
+    BOOST_TEST(ec.value() == 0);
+    BOOST_TEST(ec.category() == system_category()); 
+    BOOST_TEST(fs::exists(s));
+    BOOST_TEST(fs::is_directory(s));
+
+    // test status, ec, for non-existing file
+    fs::path p ("nosuch");
+    ec.assign(-1,poison_category());
+    s = fs::status(p,ec);
+    BOOST_TEST(ec.value() != 0);
+    BOOST_TEST(ec.category() == system_category()); 
+
+    BOOST_TEST(!fs::exists(s));
+    BOOST_TEST_EQ(s.type(), fs::file_not_found);
+    BOOST_TEST(fs::type_present(s));
+    BOOST_TEST(!fs::is_regular_file(s));
+    BOOST_TEST(!fs::is_directory(s));
+    BOOST_TEST(!fs::is_symlink(s));
+    BOOST_TEST(!fs::is_other(s));
+
+    // test queries, ec, for existing file
+    ec.assign(-1,poison_category());
+    BOOST_TEST(fs::exists(".", ec));
+    BOOST_TEST(ec.value() == 0);
+    BOOST_TEST(ec.category() == system_category()); 
+    ec.assign(-1,poison_category());
+    BOOST_TEST(!fs::is_regular_file(".", ec));
+    BOOST_TEST(ec.value() == 0);
+    BOOST_TEST(ec.category() == system_category()); 
+    ec.assign(-1,poison_category());
+    BOOST_TEST(fs::is_directory(".", ec));
+    BOOST_TEST(ec.value() == 0);
+    BOOST_TEST(ec.category() == system_category()); 
+
+    // test queries, ec, for non-existing file
+    ec.assign(-1,poison_category());
+    BOOST_TEST(!fs::exists(p, ec));
+    BOOST_TEST(ec.value() != 0);
+    BOOST_TEST(ec.category() == system_category()); 
+    ec.assign(-1,poison_category());
+    BOOST_TEST(!fs::is_regular_file(p, ec));
+    BOOST_TEST(ec.value() != 0);
+    BOOST_TEST(ec.category() == system_category()); 
+    ec.assign(-1,poison_category());
+    BOOST_TEST(!fs::is_directory(p, ec));
+    BOOST_TEST(ec.value() != 0);
+    BOOST_TEST(ec.category() == system_category()); 
+  }
+
+  //  remove_tests  --------------------------------------------------------------------//
+
+  void remove_tests(const fs::path& dirx)
+  {
+    cout << "remove_tests..." << endl;
+
+    // remove() file
+    fs::path f1x = dirx / "shortlife";
+    BOOST_TEST(!fs::exists(f1x));
+    create_file(f1x, "");
+    BOOST_TEST(fs::exists(f1x));
+    BOOST_TEST(!fs::is_directory(f1x));
+    BOOST_TEST(fs::remove(f1x));
+    BOOST_TEST(!fs::exists(f1x));
+    BOOST_TEST(!fs::remove("no-such-file"));
+    BOOST_TEST(!fs::remove("no-such-directory/no-such-file"));
+
+    // remove() directory
+    fs::path d1x = dirx / "shortlife_dir";
+    BOOST_TEST(!fs::exists(d1x));
+    fs::create_directory(d1x);
+    BOOST_TEST(fs::exists(d1x));
+    BOOST_TEST(fs::is_directory(d1x));
+    BOOST_TEST(fs::is_empty(d1x));
+    bad_remove_dir = dirx;
+    BOOST_TEST(CHECK_EXCEPTION(bad_remove, ENOTEMPTY));
+    BOOST_TEST(fs::remove(d1x));
+    BOOST_TEST(!fs::exists(d1x));
+  }
+
+  //  remove_symlink_tests  ------------------------------------------------------------//
+      
+  void remove_symlink_tests()
+  {
+    cout << "remove_symlink_tests..." << endl;
+
+    // remove() dangling symbolic link
+    fs::path link("dangling_link");
+    fs::remove(link);  // remove any residue from past tests
+    BOOST_TEST(!fs::is_symlink(link));
+    BOOST_TEST(!fs::exists(link));
+    fs::create_symlink("nowhere", link);
+    BOOST_TEST(!fs::exists(link));
+    BOOST_TEST(fs::is_symlink(link));
+    BOOST_TEST(fs::remove(link));
+    BOOST_TEST(!fs::is_symlink(link));
+
+    // remove() self-refering symbolic link
+    link = "link_to_self";
+    fs::remove(link);  // remove any residue from past tests
+    BOOST_TEST(!fs::is_symlink(link));
+    BOOST_TEST(!fs::exists(link));
+    fs::create_symlink(link, link);
+    BOOST_TEST(fs::remove(link));
+    BOOST_TEST(!fs::exists(link));
+    BOOST_TEST(!fs::is_symlink(link));
+
+    // remove() cyclic symbolic link
+    link = "link_to_a";
+    fs::path link2("link_to_b");
+    fs::remove(link);   // remove any residue from past tests
+    fs::remove(link2);  // remove any residue from past tests
+    BOOST_TEST(!fs::is_symlink(link));
+    BOOST_TEST(!fs::exists(link));
+    fs::create_symlink(link, link2);
+    fs::create_symlink(link2, link);
+    BOOST_TEST(fs::remove(link));
+    BOOST_TEST(fs::remove(link2));
+    BOOST_TEST(!fs::exists(link));
+    BOOST_TEST(!fs::exists(link2));
+    BOOST_TEST(!fs::is_symlink(link));
+
+    // remove() symbolic link to file
+    fs::path f1x = "link_target";
+    fs::remove(f1x);  // remove any residue from past tests
+    BOOST_TEST(!fs::exists(f1x));
+    create_file(f1x, "");
+    BOOST_TEST(fs::exists(f1x));
+    BOOST_TEST(!fs::is_directory(f1x));
+    BOOST_TEST(fs::is_regular_file(f1x));
+    link = "non_dangling_link";
+    fs::create_symlink(f1x, link);
+    BOOST_TEST(fs::exists(link));
+    BOOST_TEST(!fs::is_directory(link));
+    BOOST_TEST(fs::is_regular_file(link));
+    BOOST_TEST(fs::is_symlink(link));
+    BOOST_TEST(fs::remove(link));
+    BOOST_TEST(fs::exists(f1x));
+    BOOST_TEST(!fs::exists(link));
+    BOOST_TEST(!fs::is_symlink(link));
+    BOOST_TEST(fs::remove(f1x));
+    BOOST_TEST(!fs::exists(f1x));
+  }
+
+  //  absolute_tests  -----------------------------------------------------------------//
+
+  void absolute_tests()
+  {
+    cout << "absolute_tests..." << endl;
+
+    BOOST_TEST_EQ(fs::absolute(""), fs::current_path() );
+    BOOST_TEST_EQ(fs::absolute("", ""), fs::current_path() );
+    BOOST_TEST_EQ(fs::absolute(fs::current_path() / "foo/bar"), fs::current_path() / "foo/bar");
+    BOOST_TEST_EQ(fs::absolute("foo"), fs::current_path() / "foo");
+    BOOST_TEST_EQ(fs::absolute("foo", fs::current_path()), fs::current_path() / "foo");
+    BOOST_TEST_EQ(fs::absolute("bar", "foo"), fs::current_path() / "foo" / "bar");
+    BOOST_TEST_EQ(fs::absolute("/foo"), fs::current_path().root_path().string() + "foo");
+
+#  ifdef BOOST_WINDOWS_API
+    BOOST_TEST_EQ(fs::absolute("a:foo", "b:/bar"), "a:/bar/foo");
+#  endif
+
+    // these tests were moved from elsewhere, so may duplicate some of the above tests
+
+    // p.empty()
+      BOOST_TEST_EQ(fs::absolute(fs::path(), "//foo/bar"), "//foo/bar");
+      if (platform == "Windows")
+      {
+        BOOST_TEST_EQ(fs::absolute(fs::path(), "a:/bar"), "a:/bar");
+      }
+
+    // p.has_root_name()
+      //   p.has_root_directory()
+        BOOST_TEST_EQ(fs::absolute(fs::path("//foo/bar"), "//uvw/xyz"), "//foo/bar");
+        if (platform == "Windows")
+        {
+          BOOST_TEST_EQ(fs::absolute(fs::path("a:/bar"), "b:/xyz"), "a:/bar");
+        }
+      //   !p.has_root_directory()
+        BOOST_TEST_EQ(fs::absolute(fs::path("//net"), "//xyz/"), "//net/");
+        BOOST_TEST_EQ(fs::absolute(fs::path("//net"), "//xyz/abc"), "//net/abc");
+        BOOST_TEST_EQ(fs::absolute(fs::path("//net"), "//xyz/abc/def"), "//net/abc/def");
+        if (platform == "Windows")
+        {
+          BOOST_TEST_EQ(fs::absolute(fs::path("a:"), "b:/"), "a:/");
+          BOOST_TEST_EQ(fs::absolute(fs::path("a:"),"b:/abc"), "a:/abc");
+          BOOST_TEST_EQ(fs::absolute(fs::path("a:"),"b:/abc/def"), "a:/abc/def");
+          BOOST_TEST_EQ(fs::absolute(fs::path("a:foo"), "b:/"), "a:/foo");
+          BOOST_TEST_EQ(fs::absolute(fs::path("a:foo"), "b:/abc"), "a:/abc/foo");
+          BOOST_TEST_EQ(fs::absolute(fs::path("a:foo"), "b:/abc/def"), "a:/abc/def/foo");
+          BOOST_TEST_EQ(fs::absolute(fs::path("a:foo/bar"), "b:/"), "a:/foo/bar");
+          BOOST_TEST_EQ(fs::absolute(fs::path("a:foo/bar"), "b:/abc"), "a:/abc/foo/bar");
+          BOOST_TEST_EQ(fs::absolute(fs::path("a:foo/bar"), "b:/abc/def"), "a:/abc/def/foo/bar");
+        }
+    // !p.has_root_name()
+      //   p.has_root_directory()
+        BOOST_TEST_EQ(fs::absolute(fs::path("/"), "//xyz/"), "//xyz/");
+        BOOST_TEST_EQ(fs::absolute(fs::path("/"), "//xyz/abc"), "//xyz/");
+        BOOST_TEST_EQ(fs::absolute(fs::path("/foo"), "//xyz/"), "//xyz/foo");
+        BOOST_TEST_EQ(fs::absolute(fs::path("/foo"), "//xyz/abc"), "//xyz/foo");
+      //   !p.has_root_directory()
+        BOOST_TEST_EQ(fs::absolute(fs::path("foo"), "//xyz/abc"), "//xyz/abc/foo");
+        BOOST_TEST_EQ(fs::absolute(fs::path("foo/bar"), "//xyz/abc"), "//xyz/abc/foo/bar");
+        BOOST_TEST_EQ(fs::absolute(fs::path("."), "//xyz/abc"), "//xyz/abc/.");
+        BOOST_TEST_EQ(fs::absolute(fs::path(".."), "//xyz/abc"), "//xyz/abc/..");
+        BOOST_TEST_EQ(fs::absolute(fs::path("./foo"), "//xyz/abc"), "//xyz/abc/./foo");
+        BOOST_TEST_EQ(fs::absolute(fs::path("../foo"), "//xyz/abc"), "//xyz/abc/../foo");
+        if (platform == "POSIX")
+        {
+          BOOST_TEST_EQ(fs::absolute(fs::path("foo"), "/abc"), "/abc/foo");
+          BOOST_TEST_EQ(fs::absolute(fs::path("foo/bar"), "/abc"), "/abc/foo/bar");
+          BOOST_TEST_EQ(fs::absolute(fs::path("."), "/abc"), "/abc/.");
+          BOOST_TEST_EQ(fs::absolute(fs::path(".."), "/abc"), "/abc/..");
+          BOOST_TEST_EQ(fs::absolute(fs::path("./foo"), "/abc"), "/abc/./foo");
+          BOOST_TEST_EQ(fs::absolute(fs::path("../foo"), "/abc"), "/abc/../foo");
+        }
+
+  }
+
+  //  canonical_basic_tests  -----------------------------------------------------------//
+
+  void canonical_basic_tests()
+  {
+    cout << "canonical_basic_tests..." << endl;
+
+    // error handling
+    error_code ec;
+    ec.clear();
+    fs::canonical("no-such-file", ec);
+    BOOST_TEST(ec);
+    ec.clear();
+    fs::canonical("no-such-file", "x", ec);
+    BOOST_TEST(ec);
+    bool ok(false);
+    try { fs::canonical("no-such-file"); }
+    catch (const fs::filesystem_error&) { ok = true; }
+    BOOST_TEST(ok);
+
+    // non-symlink tests; also see canonical_symlink_tests()
+    BOOST_TEST_EQ(fs::canonical(""), fs::current_path());
+    BOOST_TEST_EQ(fs::canonical("", fs::current_path()), fs::current_path());
+    BOOST_TEST_EQ(fs::canonical("", ""), fs::current_path());
+    BOOST_TEST_EQ(fs::canonical(fs::current_path()), fs::current_path());
+    BOOST_TEST_EQ(fs::canonical(fs::current_path(), ""), fs::current_path());
+    BOOST_TEST_EQ(fs::canonical(fs::current_path(), "no-such-file"), fs::current_path());
+
+    BOOST_TEST_EQ(fs::canonical("."), fs::current_path());
+    BOOST_TEST_EQ(fs::canonical(".."), fs::current_path().parent_path());
+    BOOST_TEST_EQ(fs::canonical("/"), fs::current_path().root_path());
+
+    fs::path relative_dir(dir.filename());
+    BOOST_TEST_EQ(fs::canonical(dir), dir);
+    BOOST_TEST_EQ(fs::canonical(relative_dir), dir);
+    BOOST_TEST_EQ(fs::canonical(dir / "f0"), dir / "f0");
+    BOOST_TEST_EQ(fs::canonical(relative_dir / "f0"), dir / "f0");
+    BOOST_TEST_EQ(fs::canonical(relative_dir / "./f0"), dir / "f0");
+    BOOST_TEST_EQ(fs::canonical(relative_dir / "d1/../f0"), dir / "f0");
+
+    // treat parent of root as itself on both POSIX and Windows
+    fs::path init(fs::initial_path());
+    fs::path root(init.root_path());
+    fs::path::const_iterator it(init.begin());
+    fs::path first;   // relative first non-root directory
+#  ifdef BOOST_WINDOWS_API
+    if (!init.empty())
+      ++it;
+#  endif
+    if (++it != init.end())
+      first = *it;
+    fs::path expected(root/first);
+
+    cout << "  init: " << init << endl;
+    cout << "  root: " << root << endl;
+    cout << "  first: " << first << endl;
+    cout << "  expected: " << expected << endl;
+
+    //  ticket 10187 tests
+    BOOST_TEST_EQ(fs::canonical(root / "../.." / first), expected);
+    BOOST_TEST_EQ(fs::canonical(fs::path("../..") / first, root), expected);
+    BOOST_TEST_EQ(fs::canonical(fs::path("/../..") / first, fs::current_path().root_name()), expected);
+
+    //  ticket 9683 test
+    BOOST_TEST_EQ(fs::canonical(root / first / "../../../../.."), root);
+  }
+
+  //  canonical_symlink_tests  -----------------------------------------------------------//
+
+  void canonical_symlink_tests()
+  {
+    cout << "canonical_symlink_tests..." << endl;
+
+    fs::path relative_dir(dir.filename());
+    BOOST_TEST_EQ(fs::canonical(dir / "sym-d1/f2"), d1 / "f2");
+    BOOST_TEST_EQ(fs::canonical(relative_dir / "sym-d1/f2"), d1 / "f2");
+  }
+
+ //  copy_file_tests  ------------------------------------------------------------------//
+
+  void copy_file_tests(const fs::path& f1x, const fs::path& d1x)
+  {
+    cout << "copy_file_tests..." << endl;
+
+    BOOST_TEST(fs::exists(f1x));
+    fs::remove(d1x / "f2");  // remove possible residue from prior testing
+    BOOST_TEST(fs::exists(d1x));
+    BOOST_TEST(!fs::exists(d1x / "f2"));
+    cout << " copy " << f1x << " to " << d1x / "f2" << endl;
+    fs::copy_file(f1x, d1x / "f2");
+    cout << " copy complete" << endl;
+    BOOST_TEST(fs::exists(f1x));
+    BOOST_TEST(fs::exists(d1x / "f2"));
+    BOOST_TEST(!fs::is_directory(d1x / "f2"));
+    verify_file(d1x / "f2", "file-f1");
+
+    bool copy_ex_ok = false;
+    try { fs::copy_file(f1x, d1x / "f2"); }
+    catch (const fs::filesystem_error &) { copy_ex_ok = true; }
+    BOOST_TEST(copy_ex_ok);
+
+    copy_ex_ok = false;
+    try { fs::copy_file(f1x, d1x / "f2", fs::copy_option::fail_if_exists); }
+    catch (const fs::filesystem_error &) { copy_ex_ok = true; }
+    BOOST_TEST(copy_ex_ok);
+
+    create_file(d1x / "f2", "1234567890");
+    BOOST_TEST_EQ(fs::file_size(d1x / "f2"), 10U);
+    copy_ex_ok = true;
+    try { fs::copy_file(f1x, d1x / "f2", fs::copy_option::overwrite_if_exists); }
+    catch (const fs::filesystem_error &) { copy_ex_ok = false; }
+    BOOST_TEST(copy_ex_ok);
+    BOOST_TEST_EQ(fs::file_size(d1x / "f2"), 7U);
+    verify_file(d1x / "f2", "file-f1");
+  }
+
+ //  symlink_status_tests  -------------------------------------------------------------//
+
+  void symlink_status_tests()
+  {
+    cout << "symlink_status_tests..." << endl;
+
+    pdalboost::system::error_code ec;
+
+    fs::path dangling_sym(dir / "dangling-sym");
+    fs::path dangling_directory_sym(dir / "dangling-directory-sym");
+    fs::path sym_d1(dir / "sym-d1");
+    fs::path symsym_d1(dir / "symsym-d1");
+    fs::path sym_f1(dir / "sym-f1");
+    fs::path symsym_f1(dir / "symsym-f1");
+    fs::create_symlink("does not exist", dangling_sym);
+    fs::create_directory_symlink("does not exist", dangling_directory_sym);
+    fs::create_directory_symlink(d1, sym_d1);
+    fs::create_directory_symlink(sym_d1, symsym_d1);
+    fs::create_symlink(f1, sym_f1);
+    fs::create_symlink(sym_f1, symsym_f1);
+
+    //  verify all cases detected as symlinks
+    BOOST_TEST_EQ(fs::symlink_status(dangling_sym, ec).type(), fs::symlink_file);
+    BOOST_TEST_EQ(fs::symlink_status(dangling_directory_sym, ec).type(), fs::symlink_file);
+    BOOST_TEST_EQ(fs::symlink_status(sym_d1, ec).type(), fs::symlink_file);
+    BOOST_TEST_EQ(fs::symlink_status(symsym_d1, ec).type(), fs::symlink_file);
+    BOOST_TEST_EQ(fs::symlink_status(sym_f1, ec).type(), fs::symlink_file);
+    BOOST_TEST_EQ(fs::symlink_status(symsym_f1, ec).type(), fs::symlink_file);
+
+    //  verify all cases resolve to the (possibly recursive) symlink target
+    BOOST_TEST_EQ(fs::status(dangling_sym, ec).type(), fs::file_not_found);
+    BOOST_TEST_EQ(fs::status(dangling_directory_sym, ec).type(), fs::file_not_found);
+
+    BOOST_TEST_EQ(fs::status(sym_d1, ec).type(), fs::directory_file);
+    BOOST_TEST_EQ(fs::status(sym_d1 / "d1f1", ec).type(), fs::regular_file);
+    BOOST_TEST_EQ(fs::status(symsym_d1, ec).type(), fs::directory_file);
+    BOOST_TEST_EQ(fs::status(symsym_d1 / "d1f1", ec).type(), fs::regular_file);
+    BOOST_TEST_EQ(fs::status(sym_f1, ec).type(), fs::regular_file);
+    BOOST_TEST_EQ(fs::status(symsym_f1, ec).type(), fs::regular_file);
+
+#ifdef BOOST_WINDOWS_API
+
+    //  On Windows, telling if a filesystem entry is a symlink (or junction which is
+    //  treated as a symlink), rather than some other kind of reparse point, requires some
+    //  baroque code. See ticket #4663, filesystem objects falsely identified as symlinks.
+    //  This test checks two directory entries created by Windows itself to verify
+    //  is_symlink() works correctly. Try "dir /A %HOMEPATH%\.." from the command line to
+    //  verify this test is valid on your version of Windows. It only works on Vista and
+    //  later.
+
+    fs::path users(getenv("HOMEDRIVE"));
+    BOOST_TEST(!users.empty());
+    users /= "\\Users";
+    BOOST_TEST(fs::exists(users));
+    BOOST_TEST(fs::exists(users/"All Users"));
+    BOOST_TEST(fs::exists(users/"Default User"));
+    BOOST_TEST(fs::is_symlink(users/"All Users"));      // dir /A reports <SYMLINKD>
+    BOOST_TEST(fs::is_symlink(users/"Default User"));   // dir /A reports <JUNCTION>
+
+#endif
+  }
+
+ //  copy_symlink_tests  ---------------------------------------------------------------//
+
+  void copy_symlink_tests(const fs::path& f1x, const fs::path& d1x)
+  {
+    cout << "copy_symlink_tests..." << endl;
+
+    BOOST_TEST(fs::exists(f1x));
+    BOOST_TEST(fs::exists(d1x));
+    fs::path sym1(d1x / "symlink1");
+    fs::remove(sym1);  // remove possible residue from prior testing
+    fs::create_symlink(f1x, sym1);
+    BOOST_TEST(fs::exists(sym1));
+    BOOST_TEST(fs::is_symlink(sym1));
+    fs::path sym2(d1x / "symlink2");
+    fs::copy_symlink(sym1, sym2);
+    BOOST_TEST(fs::exists(sym2));
+    BOOST_TEST(fs::is_symlink(sym2));
+    //fs::path sym3(d1x / "symlink3");
+    //fs::copy(sym1, sym3);
+    //BOOST_TEST(fs::exists(sym3));
+    //BOOST_TEST(fs::is_symlink(sym3));
+
+    bool copy_ex_ok = false;
+    try { fs::copy_symlink("no-such-file", "new-symlink1"); }
+    catch (const fs::filesystem_error &) { copy_ex_ok = true; }
+    BOOST_TEST(copy_ex_ok);
+
+    copy_ex_ok = false;
+    try { fs::copy_symlink(f1x, "new-symlink2"); } // should fail; f1x not symlink
+    catch (const fs::filesystem_error &) { copy_ex_ok = true; }
+    BOOST_TEST(copy_ex_ok);
+  }
+
+  //  write_time_tests  ----------------------------------------------------------------//
+
+  void write_time_tests(const fs::path& dirx)
+  {    
+    cout << "write_time_tests..." << endl;
+
+    fs::path f1x = dirx / "foobar2";
+    create_file(f1x, "foobar2");
+    BOOST_TEST(fs::exists(f1x));
+    BOOST_TEST(!fs::is_directory(f1x));
+    BOOST_TEST(fs::is_regular_file(f1x));
+    BOOST_TEST(fs::file_size(f1x) == 7);
+    verify_file(f1x, "foobar2");
+
+    // Some file system report last write time as local (FAT), while
+    // others (NTFS) report it as UTC. The C standard does not specify
+    // if time_t is local or UTC. 
+
+    std::time_t ft = fs::last_write_time(f1x);
+    cout << "\n  UTC last_write_time() for a file just created is "
+      << std::asctime(std::gmtime(&ft)) << endl;
+
+    std::tm * tmp = std::localtime(&ft);
+    cout << "\n  Year is " << tmp->tm_year << endl;
+    --tmp->tm_year;
+    cout << "  Change year to " << tmp->tm_year << endl;
+    fs::last_write_time(f1x, std::mktime(tmp));
+    std::time_t ft2 = fs::last_write_time(f1x);
+    cout << "  last_write_time() for the file is now "
+      << std::asctime(std::gmtime(&ft2)) << endl;
+    BOOST_TEST(ft != fs::last_write_time(f1x));
+
+    cout << "\n  Reset to current time" << endl;
+    fs::last_write_time(f1x, ft);
+    double time_diff = std::difftime(ft, fs::last_write_time(f1x));
+    cout 
+      << "  original last_write_time() - current last_write_time() is "
+      << time_diff << " seconds" << endl;
+    BOOST_TEST(time_diff >= -60.0 && time_diff <= 60.0);
+  }
+
+  //  platform_specific_tests  ---------------------------------------------------------//
+
+  void platform_specific_tests()
+  {
+    // Windows only tests
+    if (platform == "Windows")
+    {
+      cout << "Windows specific tests..." << endl;
+      if (!skip_long_windows_tests)
+      {
+        cout << "  (may take several seconds)"<< endl;
+
+        BOOST_TEST(!fs::exists(fs::path("//share-not")));
+        BOOST_TEST(!fs::exists(fs::path("//share-not/")));
+        BOOST_TEST(!fs::exists(fs::path("//share-not/foo")));
+      }
+      cout << endl;
+
+      BOOST_TEST(!fs::exists("tools/jam/src/:sys:stat.h")); // !exists() if ERROR_INVALID_NAME
+      BOOST_TEST(!fs::exists(":sys:stat.h")); // !exists() if ERROR_INVALID_PARAMETER
+      BOOST_TEST(dir.string().size() > 1
+        && dir.string()[1] == ':'); // verify path includes drive
+
+      BOOST_TEST(fs::system_complete("").empty());
+      BOOST_TEST(fs::system_complete("/") == fs::initial_path().root_path());
+      BOOST_TEST(fs::system_complete("foo")
+        == fs::initial_path() / "foo");
+
+      fs::path p1(fs::system_complete("/foo"));
+      BOOST_TEST_EQ(p1.string().size(), 6U);  // this failed during v3 development due to bug
+      std::string s1(p1.string() );
+      std::string s2(fs::initial_path().root_path().string()+"foo");
+      BOOST_TEST_EQ(s1, s2);
+
+      BOOST_TEST(fs::system_complete(fs::path(fs::initial_path().root_name()))
+        == fs::initial_path());
+      BOOST_TEST(fs::system_complete(fs::path(fs::initial_path().root_name().string()
+        + "foo")).string() == fs::initial_path() / "foo");
+      BOOST_TEST(fs::system_complete(fs::path("c:/")).generic_string()
+        == "c:/");
+      BOOST_TEST(fs::system_complete(fs::path("c:/foo")).generic_string()
+        ==  "c:/foo");
+      BOOST_TEST(fs::system_complete(fs::path("//share")).generic_string()
+        ==  "//share");
+
+      // Issue 9016 asked that NTFS directory junctions be recognized as directories.
+      // That is equivalent to recognizing them as symlinks, and then the normal symlink
+      // mechanism takes care of recognizing them as directories.
+      //
+      // Directory junctions are very similar to symlinks, but have some performance
+      // and other advantages over symlinks. They can be created from the command line
+      // with "mklink /j junction-name target-path".
+
+      if (create_symlink_ok)  // only if symlinks supported
+      {
+        cout << "  directory junction tests..." << endl;
+        BOOST_TEST(fs::exists(dir));
+        BOOST_TEST(fs::exists(dir / "d1/d1f1"));
+        fs::path junc(dir / "junc");
+        if (fs::exists(junc))
+          fs::remove(junc);
+        fs::path new_junc(dir / "new-junc");
+        if (fs::exists(new_junc))
+          fs::remove(new_junc);
+
+        //cout << "    dir is " << dir << endl;
+        //cout << "    junc is " << junc << endl;
+        //cout << "    new_junc is " << new_junc << endl;
+        //cout << "    current_path() is " << fs::current_path() << endl;
+
+        fs::path cur_path(fs::current_path());
+        fs::current_path(dir);
+        //cout << "    current_path() is " << fs::current_path() << endl;
+        std::system("mklink /j junc d1");
+        //std::system("dir");
+        fs::current_path(cur_path);
+        //cout << "    current_path() is " << fs::current_path() << endl;
+
+        BOOST_TEST(fs::exists(junc));
+        BOOST_TEST(fs::is_symlink(junc));
+        BOOST_TEST(fs::is_directory(junc));
+        BOOST_TEST(!fs::is_regular_file(junc));
+        BOOST_TEST(fs::exists(junc / "d1f1"));
+        BOOST_TEST(fs::is_regular_file(junc / "d1f1"));
+
+        int count = 0;
+        for (fs::directory_iterator itr(junc);
+          itr != fs::directory_iterator(); ++itr)
+        {
+          //cout << itr->path() << endl;
+          ++count;
+        }
+        cout << "    iteration count is " << count << endl;
+        BOOST_TEST(count > 0);
+
+        fs::rename(junc, new_junc);
+        BOOST_TEST(!fs::exists(junc));
+        BOOST_TEST(fs::exists(new_junc));
+        BOOST_TEST(fs::is_symlink(new_junc));
+        BOOST_TEST(fs::is_directory(new_junc));
+        BOOST_TEST(!fs::is_regular_file(new_junc));
+        BOOST_TEST(fs::exists(new_junc / "d1f1"));
+        BOOST_TEST(fs::is_regular_file(new_junc / "d1f1"));
+
+        fs::remove(new_junc);
+        BOOST_TEST(!fs::exists(new_junc / "d1f1"));
+        BOOST_TEST(!fs::exists(new_junc));
+        BOOST_TEST(fs::exists(dir));
+        BOOST_TEST(fs::exists(dir / "d1/d1f1"));
+      }
+
+    } // Windows
+
+    else if (platform == "POSIX")
+    {
+      cout << "POSIX specific tests..." << endl;
+      BOOST_TEST(fs::system_complete("").empty());
+      BOOST_TEST(fs::initial_path().root_path().string() == "/");
+      BOOST_TEST(fs::system_complete("/").string() == "/");
+      BOOST_TEST(fs::system_complete("foo").string()
+        == fs::initial_path().string()+"/foo");
+      BOOST_TEST(fs::system_complete("/foo").string()
+        == fs::initial_path().root_path().string()+"foo");
+    } // POSIX
+  }
+
+  //  initial_tests  -------------------------------------------------------------------//
+
+  void initial_tests()
+  {
+    cout << "initial_tests..." << endl;
+
+    cout << "  current_path().string() is\n  \""
+              << fs::initial_path().string()
+              << "\"\n\n";
+    BOOST_TEST(fs::initial_path() == fs::current_path());
+    BOOST_TEST(fs::initial_path().is_absolute());
+    BOOST_TEST(fs::current_path().is_absolute());
+    BOOST_TEST(fs::initial_path().string()
+      == fs::current_path().string());
+  }
+
+  //  space_tests  ---------------------------------------------------------------------//
+
+  void space_tests()
+  {
+    cout << "space_tests..." << endl;
+
+    // make some reasonable assuptions for testing purposes
+    fs::space_info spi(fs::space(dir));
+    BOOST_TEST(spi.capacity > 1000000);
+    BOOST_TEST(spi.free > 1000);
+    BOOST_TEST(spi.capacity > spi.free);
+    BOOST_TEST(spi.free >= spi.available);
+
+    // it is convenient to display space, but older VC++ versions choke 
+#   if !defined(BOOST_MSVC) || _MSC_VER >= 1300  // 1300 == VC++ 7.0
+      cout << "   capacity = " << spi.capacity << '\n';
+      cout << "       free = " << spi.free << '\n';
+      cout << "  available = " << spi.available << '\n';
+#   endif
+  }
+
+  //  equivalent_tests  ----------------------------------------------------------------//
+
+  void equivalent_tests(const fs::path& f1x)
+  {
+    cout << "equivalent_tests..." << endl;
+
+    BOOST_TEST(CHECK_EXCEPTION(bad_equivalent, ENOENT));
+    BOOST_TEST(fs::equivalent(f1x, dir / "f1"));
+    BOOST_TEST(fs::equivalent(dir, d1 / ".."));
+    BOOST_TEST(!fs::equivalent(f1x, dir));
+    BOOST_TEST(!fs::equivalent(dir, f1x));
+    BOOST_TEST(!fs::equivalent(d1, d2));
+    BOOST_TEST(!fs::equivalent(dir, ng));
+    BOOST_TEST(!fs::equivalent(ng, dir));
+    BOOST_TEST(!fs::equivalent(f1x, ng));
+    BOOST_TEST(!fs::equivalent(ng, f1x));
+  }
+
+  //  temp_directory_path_tests  -------------------------------------------------------//
+  //    contributed by Jeff Flinn
+  
+  struct guarded_env_var
+  {
+    struct previous_value
+    {
+      std::string m_name;
+      std::string m_string;
+      bool        m_empty;
+      
+      previous_value(const char* name)
+      : m_name(name)
+      , m_empty (true)
+      {
+        if(const char* value = getenv(name))
+        {
+          m_string.assign(value);
+          m_empty = false;
+        }
+        else
+        {
+          m_empty = true;
+        }
+      }
+      ~previous_value()
+      {
+        m_empty? unsetenv(m_name.c_str()) 
+               : setenv(m_name.c_str(), m_string.c_str(), 1);
+      }
+    };
+  
+    previous_value m_previous_value;
+    
+    guarded_env_var(const char* name, const char* value) 
+    : m_previous_value(name) 
+    {
+//      std::cout << name << " old value is \"" << getenv(name) << "\"" << std::endl;
+      value ? setenv(name, value, 1) : unsetenv(name);
+//      std::cout << name << " new value is \"" << getenv(name) << "\"" << std::endl;
+    }
+  };
+
+  void temp_directory_path_tests()
+  {
+    {
+      cout << "temp_directory_path_tests..." << endl;
+
+#if defined(BOOST_WINDOWS_API)
+
+//**************************************************************************************//
+//   Bug in GCC 4.9 getenv() when !defined(__GXX_EXPERIMENTAL_CXX0X__) makes these
+//   tests meaningless, so skip them 
+//**************************************************************************************//
+
+#if defined(__CYGWIN__) && !defined(__GXX_EXPERIMENTAL_CXX0X__) && __GNUC__ == 4
+      cout << "Bug in GCC 4.9 getenv() when !defined(__GXX_EXPERIMENTAL_CXX0X__) makes these"
+        "tests meaningless, so skip them" << endl;
+      return;
+#endif
+      // Test ticket #5300, temp_directory_path failure on Windows with path length > 130.
+      // (This test failed prior to the fix being applied.) 
+      {
+        const wchar_t long_name[] =
+          L"12345678901234567890123456789012345678901234567890"
+          L"12345678901234567890123456789012345678901234567890"
+          L"12345678901234567890123456789012345678901234567890#"   // total 151 chars
+          ;
+        fs::path p (temp_dir);
+        p /= long_name;
+        fs::create_directory(p);
+
+        guarded_env_var tmp_guard("TMP", p.string().c_str());
+        error_code ec;
+        fs::path tmp_path = fs::temp_directory_path(ec);
+        BOOST_TEST(!ec);
+        BOOST_TEST_EQ(p, tmp_path);
+        fs::remove(p);
+      }
+
+      // Test ticket #10388, null character at end of filesystem::temp_directory_path path
+      {
+        guarded_env_var tmp_guard("TMP", fs::initial_path().string().c_str());
+
+        error_code ec;
+        fs::path tmp_path = fs::temp_directory_path(ec);
+        BOOST_TEST_EQ(tmp_path, fs::initial_path()); 
+      }
+
+#endif
+      BOOST_TEST(!fs::temp_directory_path().empty());
+      BOOST_TEST(exists(fs::temp_directory_path()));
+      fs::path ph = fs::temp_directory_path()/"temp_directory_path_test.txt";
+      {
+          if(exists(ph)) remove(ph);
+          std::ofstream f(ph.BOOST_FILESYSTEM_C_STR);
+          f << "passed";
+      }
+      BOOST_TEST(exists(ph));
+      {
+          std::ifstream f(ph.BOOST_FILESYSTEM_C_STR);
+          std::string   s;
+          f >> s;
+          BOOST_TEST(s == "passed");
+      }
+      remove(ph);
+      BOOST_TEST(!exists(ph));
+    }
+    
+    fs::path test_temp_dir = temp_dir;
+
+#if defined(BOOST_POSIX_API)
+    {
+      struct guarded_tmp_vars
+      {
+        guarded_env_var m_tmpdir ;
+        guarded_env_var m_tmp    ;
+        guarded_env_var m_temp   ;
+        guarded_env_var m_tempdir;
+
+        guarded_tmp_vars
+        ( const fs::path::value_type* tmpdir  
+        , const fs::path::value_type* tmp    
+        , const fs::path::value_type* temp   
+        , const fs::path::value_type* tempdir
+        )
+        : m_tmpdir ("TMPDIR" , tmpdir )
+        , m_tmp    ("TMP"    , tmp    )
+        , m_temp   ("TEMP"   , temp   )
+        , m_tempdir("TEMPDIR", tempdir)
+        {}                
+      };
+
+      {
+        guarded_tmp_vars vars(test_temp_dir.c_str(), 0, 0, 0);
+        fs::path ph = fs::temp_directory_path();
+        BOOST_TEST(equivalent(test_temp_dir, ph));
+      }
+      {
+        guarded_tmp_vars vars(0, test_temp_dir.c_str(), 0, 0);
+        fs::path ph = fs::temp_directory_path();
+        BOOST_TEST(equivalent(test_temp_dir, ph));
+      }
+      {
+        guarded_tmp_vars vars(0, 0, test_temp_dir.c_str(), 0);
+        fs::path ph = fs::temp_directory_path();
+        BOOST_TEST(equivalent(test_temp_dir, ph));
+      }
+      {
+        guarded_tmp_vars vars(0, 0, 0, test_temp_dir.c_str());
+        fs::path ph = fs::temp_directory_path();
+        BOOST_TEST(equivalent(test_temp_dir, ph));
+      }
+    }
+#endif
+
+#if defined(BOOST_WINDOWS_API)
+
+    struct guarded_tmp_vars
+    {
+      guarded_env_var m_tmp        ;
+      guarded_env_var m_temp       ;
+      guarded_env_var m_localappdata;
+      guarded_env_var m_userprofile;
+
+      guarded_tmp_vars
+      ( const char* tmp    
+      , const char* temp
+      , const char* localappdata
+      , const char* userprofile
+      )
+      : m_tmp          ("TMP"           , tmp         )
+      , m_temp         ("TEMP"          , temp        )
+      , m_localappdata ("LOCALAPPDATA"  , localappdata)
+      , m_userprofile  ("USERPROFILE"   , userprofile )
+      {}                
+    };
+
+    // test the GetWindowsDirectoryW()/Temp fallback
+    {
+      guarded_tmp_vars vars(0, 0, 0, 0);
+      error_code ec;
+      fs::path ph = fs::temp_directory_path(ec);
+      BOOST_TEST(!ec);
+      cout << "Fallback test, temp_directory_path() returned " << ph << endl;
+    }
+
+    {
+      guarded_tmp_vars vars(test_temp_dir.string().c_str(), 0, 0, 0);
+      fs::path ph = fs::temp_directory_path();
+      BOOST_TEST(equivalent(test_temp_dir, ph));
+    }
+    {
+      guarded_tmp_vars vars(0, test_temp_dir.string().c_str(), 0, 0);
+      fs::path ph = fs::temp_directory_path();
+      BOOST_TEST(equivalent(test_temp_dir, ph));
+    }
+
+    fs::create_directory(test_temp_dir / L"Temp");
+    {
+      guarded_tmp_vars vars(0, 0, test_temp_dir.string().c_str(), 0);
+      fs::path ph = fs::temp_directory_path();
+      BOOST_TEST(equivalent(test_temp_dir/L"Temp", ph));
+      cout << "temp_directory_path() returned " << ph << endl;
+    }
+    {
+      guarded_tmp_vars vars(0, 0, 0, test_temp_dir.string().c_str());
+      fs::path ph = fs::temp_directory_path();
+      BOOST_TEST(equivalent(test_temp_dir/L"Temp", ph));
+      cout << "temp_directory_path() returned " << ph << endl;
+    }
+#endif    
+  }
+
+  //  weakly_canonical_tests  ----------------------------------------------------------//
+
+  void weakly_canonical_tests()
+  {
+    cout << "weakly_canonical_tests..." << endl;
+    cout << "  dir is " << dir << endl;
+
+    BOOST_TEST_EQ(fs::weakly_canonical("no-such/foo/bar"), "no-such/foo/bar");
+    BOOST_TEST_EQ(fs::weakly_canonical("no-such/foo/../bar"), "no-such/bar");
+    BOOST_TEST_EQ(fs::weakly_canonical(dir), dir);
+    BOOST_TEST_EQ(fs::weakly_canonical(dir/"no-such/foo/bar"), dir/"no-such/foo/bar");
+    BOOST_TEST_EQ(fs::weakly_canonical(dir/"no-such/foo/../bar"), dir/"no-such/bar");
+    BOOST_TEST_EQ(fs::weakly_canonical(dir/"../no-such/foo/../bar"),
+      dir.parent_path()/"no-such/bar");
+    BOOST_TEST_EQ(fs::weakly_canonical("c:/no-such/foo/bar"), "c:/no-such/foo/bar");
+
+    fs::create_directory_symlink(dir / "d1", dir / "sld1");
+    BOOST_TEST_EQ(fs::weakly_canonical(dir / "sld1/foo/bar"), dir / "d1/foo/bar");
+
+    BOOST_TEST_EQ(relative(dir / "sld1/foo/bar/baz", dir / "d1/foo"), "bar/baz");
+  }
+
+  //  _tests  --------------------------------------------------------------------------//
+
+  //void _tests()
+  //{
+  //  cout << "_tests..." << endl;
+  //}
+  
+} // unnamed namespace
+
+  //------------------------------------------------------------------------------------//
+  //                                                                                    //
+  //                                    main                                            //
+  //                                                                                    //
+  //------------------------------------------------------------------------------------//
+
+int cpp_main(int argc, char* argv[])
+{
+// document state of critical macros
+#ifdef BOOST_POSIX_API
+  cout << "BOOST_POSIX_API is defined\n";
+#endif
+#ifdef BOOST_WINDOWS_API
+  cout << "BOOST_WINDOWS_API is defined\n";
+#endif
+
+  for (; argc > 1; --argc, ++argv)
+  {
+    if (*argv[1]=='-' && *(argv[1]+1)=='t')
+      report_throws = true;
+    else if (*argv[1]=='-' && *(argv[1]+1)=='x')
+      cleanup = false;
+    else if (*argv[1]=='-' && *(argv[1]+1)=='w')
+      skip_long_windows_tests = true;
+  }
+
+  // The choice of platform to test is made at runtime rather than compile-time
+  // so that compile errors for all platforms will be detected even though
+  // only the current platform is runtime tested.
+# if defined(BOOST_POSIX_API)
+    platform = "POSIX";
+# elif defined(BOOST_WINDOWS_API)
+    platform = "Windows";
+#   if !defined(__MINGW32__) && !defined(__CYGWIN__)
+      language_id = ::GetUserDefaultUILanguage();
+#   else
+      language_id = 0x0409; // Assume US English
+#   endif
+# else
+#   error neither BOOST_POSIX_API nor BOOST_WINDOWS_API is defined. See boost/system/api_config.hpp
+# endif
+  cout << "API is " << platform << endl;
+  cout << "initial_path() is " << fs::initial_path() << endl;
+  fs::path ip = fs::initial_path();
+  do_the_right_thing_tests(); // compile-only tests, but call anyhow to suppress warnings
+
+  for (fs::path::const_iterator it = ip.begin(); it != ip.end(); ++it)
+  {
+    if (it != ip.begin())
+      cout << ", ";
+    cout << *it;
+  }
+  cout << endl;
+
+  dir = fs::initial_path() / temp_dir;
+
+  if (fs::exists(dir))
+  {
+    cout << "remove residue from prior failed tests..." << endl;
+    fs::remove_all(dir);
+  }
+  BOOST_TEST(!fs::exists(dir));
+
+  // several functions give unreasonable results if uintmax_t isn't 64-bits
+  cout << "sizeof(pdalboost::uintmax_t) = " << sizeof(pdalboost::uintmax_t) << '\n';
+  BOOST_TEST(sizeof(pdalboost::uintmax_t) >= 8);
+
+  initial_tests();
+  predicate_and_status_tests();
+  exception_tests();
+  create_directory_tests();
+  current_directory_tests();
+  space_tests();
+
+  // create a directory tree that can be used by subsequent tests
+  //
+  //    dir
+  //      d1
+  //        d1f1       // an empty file
+  //      f0           // an empty file
+  //      f1           // a file containing "file f1"
+  //
+  create_tree();
+
+  status_of_nonexistent_tests();
+  status_error_reporting_tests();
+  directory_iterator_tests();
+  create_directories_tests();  // must run AFTER directory_iterator_tests
+
+  bad_create_directory_path = f1;
+  BOOST_TEST(CHECK_EXCEPTION(bad_create_directory, EEXIST));
+  fs::file_status stat = fs::status(f1);
+  BOOST_TEST(fs::status_known(stat));
+  BOOST_TEST(fs::exists(stat));
+  BOOST_TEST(!fs::is_directory(stat));
+  BOOST_TEST(fs::is_regular_file(stat));
+  BOOST_TEST(!fs::is_other(stat));
+  BOOST_TEST(!fs::is_symlink(stat));
+  
+  equivalent_tests(f1);
+  create_hard_link_tests();
+  create_symlink_tests();
+  resize_file_tests();
+  absolute_tests();
+  canonical_basic_tests();
+  permissions_tests();
+  copy_file_tests(f1, d1);
+  if (create_symlink_ok)  // only if symlinks supported
+  {
+    symlink_status_tests();
+    copy_symlink_tests(f1, d1);
+    canonical_symlink_tests();
+    weakly_canonical_tests();
+  }
+  iterator_status_tests();  // lots of cases by now, so a good time to test
+//  dump_tree(dir);
+  recursive_directory_iterator_tests();
+  recursive_iterator_status_tests();  // lots of cases by now, so a good time to test
+  rename_tests();
+  remove_tests(dir);
+  if (create_symlink_ok)  // only if symlinks supported
+    remove_symlink_tests();
+  write_time_tests(dir);
+  temp_directory_path_tests();
+
+  platform_specific_tests();  // do these last since they take a lot of time on Windows,
+                              // and that's a pain during manual testing
+  
+  cout << "testing complete" << endl;
+
+  // post-test cleanup
+  if (cleanup)
+  {
+    cout << "post-test removal of " << dir << endl;
+    BOOST_TEST(fs::remove_all(dir) != 0);
+    // above was added just to simplify testing, but it ended up detecting
+    // a bug (failure to close an internal search handle). 
+    cout << "post-test removal complete" << endl;
+//    BOOST_TEST(!fs::exists(dir));  // nice test, but doesn't play well with TortoiseGit cache
+  }
+
+  cout << "returning from main()" << endl;
+  return ::pdalboost::report_errors();
+} // main
diff --git a/vendor/pdalboost/libs/filesystem/test/operations_unit_test.cpp b/vendor/pdalboost/libs/filesystem/test/operations_unit_test.cpp
new file mode 100644
index 0000000..94250a1
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/operations_unit_test.cpp
@@ -0,0 +1,386 @@
+//  operations_unit_test.cpp  ----------------------------------------------------------//
+
+//  Copyright Beman Dawes 2008, 2009, 2015
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//  ------------------------------------------------------------------------------------//
+
+//  This program is misnamed - it is really a smoke test rather than a unit test
+
+//  ------------------------------------------------------------------------------------//
+
+
+#include <boost/config/warning_disable.hpp>
+
+//  See deprecated_test for tests of deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED 
+#  define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+#  define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem.hpp>   // make sure filesystem.hpp works
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/system/error_code.hpp>
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+#include <iostream>
+
+using namespace pdalboost::filesystem;
+using namespace pdalboost::system;
+using std::cout;
+using std::endl;
+using std::string;
+
+#define CHECK(x) check(x, __FILE__, __LINE__)
+
+namespace
+{
+  const path temp_dir(initial_path() / unique_path("op-unit_test-%%%%-%%%%-%%%%"));
+
+  bool cleanup = true;
+
+  void check(bool ok, const char* file, int line)
+  {
+    if (ok) return;
+
+    ++::pdalboost::detail::test_errors();
+
+    cout << file << '(' << line << "): test failed\n";
+  }
+
+  //  file_status_test  ----------------------------------------------------------------//
+
+  void file_status_test()
+  {
+    cout << "file_status test..." << endl;
+
+    file_status s = status(".");
+    int v = s.permissions();
+    cout << "  status(\".\") permissions are "
+      << std::oct << (v & 0777) << std::dec << endl; 
+    CHECK((v & 0400) == 0400);
+
+    s = symlink_status(".");
+    v = s.permissions();
+    cout << "  symlink_status(\".\") permissions are "
+      << std::oct << (v & 0777) << std::dec << endl; 
+    CHECK((v & 0400) == 0400);
+  }
+
+  //  query_test  ----------------------------------------------------------------------//
+
+  void query_test()
+  {
+    cout << "query test..." << endl;
+
+    error_code ec;
+
+    CHECK(file_size("no-such-file", ec) == static_cast<pdalboost::uintmax_t>(-1));
+    CHECK(ec == errc::no_such_file_or_directory);
+
+    CHECK(status("no-such-file") == file_status(file_not_found, no_perms));
+
+    CHECK(exists("/"));
+    CHECK(is_directory("/"));
+    CHECK(!exists("no-such-file"));
+
+    exists("/", ec);
+    if (ec)
+    {
+      cout << "exists(\"/\", ec) resulted in non-zero ec.value()" << endl;
+      cout << "ec value: " << ec.value() << ", message: "<< ec.message() << endl;
+    }
+    CHECK(!ec);
+
+    CHECK(exists("/"));
+    CHECK(is_directory("/"));
+    CHECK(!is_regular_file("/"));
+    CHECK(!pdalboost::filesystem::is_empty("/"));
+    CHECK(!is_other("/"));
+  }
+
+  //  directory_iterator_test  -----------------------------------------------//
+
+  void directory_iterator_test()
+  {
+    cout << "directory_iterator_test..." << endl;
+
+    directory_iterator end;
+
+    directory_iterator it(".");
+
+    CHECK(!it->path().empty());
+
+    if (is_regular_file(it->status()))
+    {
+      CHECK(is_regular_file(it->symlink_status()));
+      CHECK(!is_directory(it->status()));
+      CHECK(!is_symlink(it->status()));
+      CHECK(!is_directory(it->symlink_status()));
+      CHECK(!is_symlink(it->symlink_status()));
+    }
+    else
+    {
+      CHECK(is_directory(it->status()));
+      CHECK(is_directory(it->symlink_status()));
+      CHECK(!is_regular_file(it->status()));
+      CHECK(!is_regular_file(it->symlink_status()));
+      CHECK(!is_symlink(it->status()));
+      CHECK(!is_symlink(it->symlink_status()));
+    }
+
+    for (; it != end; ++it)
+    {
+      //cout << "  " << it->path() << "\n";
+    }
+
+    CHECK(directory_iterator(".") != directory_iterator());
+    CHECK(directory_iterator() == end);
+
+#ifndef BOOST_NO_CXX11_RANGE_BASED_FOR
+    for (directory_entry& x : directory_iterator("."))
+    {
+      CHECK(!x.path().empty());
+       //cout << "  " << x.path() << "\n";
+    }
+    const directory_iterator dir_itr(".");
+    for (directory_entry& x : dir_itr)
+    {
+      CHECK(!x.path().empty());
+      //cout << "  " << x.path() << "\n";
+    }
+#endif
+
+    for (directory_iterator itr("."); itr != directory_iterator(); ++itr)
+    {
+      CHECK(!itr->path().empty());
+      //cout << "  " << itr->path() << "\n";
+    }
+
+    cout << "directory_iterator_test complete" << endl;
+  }
+
+  //  recursive_directory_iterator_test  -----------------------------------------------//
+
+  void recursive_directory_iterator_test()
+  {
+    cout << "recursive_directory_iterator_test..." << endl;
+
+    recursive_directory_iterator end;
+
+    recursive_directory_iterator it("..");
+
+    CHECK(!it->path().empty());
+
+    if (is_regular_file(it->status()))
+    {
+      CHECK(is_regular_file(it->symlink_status()));
+      CHECK(!is_directory(it->status()));
+      CHECK(!is_symlink(it->status()));
+      CHECK(!is_directory(it->symlink_status()));
+      CHECK(!is_symlink(it->symlink_status()));
+    }
+    else
+    {
+      CHECK(is_directory(it->status()));
+      CHECK(is_directory(it->symlink_status()));
+      CHECK(!is_regular_file(it->status()));
+      CHECK(!is_regular_file(it->symlink_status()));
+      CHECK(!is_symlink(it->status()));
+      CHECK(!is_symlink(it->symlink_status()));
+    }
+
+    for (; it != end; ++it)
+    {
+      //cout << "  " << it->path() << "\n";
+    }
+
+    CHECK(recursive_directory_iterator("..") != recursive_directory_iterator());
+    CHECK(recursive_directory_iterator() == end);
+
+#ifndef BOOST_NO_CXX11_RANGE_BASED_FOR
+    for (directory_entry& x : recursive_directory_iterator(".."))
+    {
+      CHECK(!x.path().empty());
+      //cout << "  " << x.path() << "\n";
+    }
+    const recursive_directory_iterator dir_itr("..");
+    for (directory_entry& x : dir_itr)
+    {
+      CHECK(!x.path().empty());
+      //cout << "  " << x.path() << "\n";
+    }
+#endif
+
+    for (recursive_directory_iterator itr("..");
+      itr != recursive_directory_iterator(); ++itr)
+    {
+      CHECK(!itr->path().empty());
+      //cout << "  " << itr->path() << "\n";
+    }
+
+    cout << "recursive_directory_iterator_test complete" << endl;
+  }
+
+  //  operations_test  -------------------------------------------------------//
+
+  void operations_test()
+  {
+    cout << "operations test..." << endl;
+
+    error_code ec;
+
+    CHECK(!create_directory("/", ec));
+
+    CHECK(!pdalboost::filesystem::remove("no-such-file-or-directory"));
+    CHECK(!remove_all("no-such-file-or-directory"));
+
+    space_info info = space("/");
+
+    CHECK(info.available <= info.capacity);
+
+    CHECK(equivalent("/", "/"));
+    CHECK(!equivalent("/", "."));
+
+    std::time_t ft = last_write_time(".");
+    ft = -1;
+    last_write_time(".", ft, ec);
+  }
+
+  //  directory_entry_test  ------------------------------------------------------------//
+
+  void directory_entry_test()
+  {
+    cout << "directory_entry test..." << endl;
+
+    directory_entry de("foo.bar",
+      file_status(regular_file, owner_all), file_status(directory_file, group_all));
+
+    CHECK(de.path() == "foo.bar");
+    CHECK(de.status() == file_status(regular_file, owner_all));
+    CHECK(de.symlink_status() == file_status(directory_file, group_all));
+    CHECK(de < directory_entry("goo.bar"));
+    CHECK(de == directory_entry("foo.bar"));
+    CHECK(de != directory_entry("goo.bar"));
+    de.replace_filename("bar.foo");
+    CHECK(de.path() == "bar.foo");
+  }
+
+  //  directory_entry_overload_test  ---------------------------------------------------//
+
+  void directory_entry_overload_test()
+  {
+    cout << "directory_entry overload test..." << endl;
+
+    directory_iterator it(".");
+    path p(*it);
+  }
+
+  //  error_handling_test  -------------------------------------------------------------//
+
+  void error_handling_test()
+  {
+    cout << "error handling test..." << endl;
+
+    bool threw(false);
+    try
+    { 
+      file_size("no-such-file");
+    }
+    catch (const pdalboost::filesystem::filesystem_error & ex)
+    {
+      threw = true;
+      cout << "\nas expected, attempt to get size of non-existent file threw a filesystem_error\n"
+        "what() returns " << ex.what() << "\n";
+    }
+    catch (...)
+    {
+      cout << "\nunexpected exception type caught" << endl;
+    }
+
+    CHECK(threw);
+
+    error_code ec;
+    CHECK(!create_directory("/", ec));
+  }
+
+  //  string_file_tests  ---------------------------------------------------------------//
+
+  void string_file_tests()
+  {
+    cout << "string_file_tests..." << endl;
+    std::string contents("0123456789");
+    path p(temp_dir / "string_file");
+    save_string_file(p, contents);
+    save_string_file(p, contents);
+    BOOST_TEST_EQ(file_size(p), 10u);
+    std::string round_trip;
+    load_string_file(p, round_trip);
+    BOOST_TEST_EQ(contents, round_trip);
+  }
+
+}  // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                                    main                                              //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+int cpp_main(int, char*[])
+{
+// document state of critical macros
+#ifdef BOOST_POSIX_API
+  cout << "BOOST_POSIX_API is defined\n";
+#endif
+#ifdef BOOST_WINDOWS_API
+  cout << "BOOST_WINDOWS_API is defined\n";
+#endif
+  cout << "BOOST_FILESYSTEM_DECL" << BOOST_STRINGIZE(=BOOST_FILESYSTEM_DECL) << "\n";
+  cout << "BOOST_SYMBOL_VISIBLE" << BOOST_STRINGIZE(=BOOST_SYMBOL_VISIBLE) << "\n";
+  
+  cout << "current_path() is " << current_path().string() << endl;
+
+  create_directory(temp_dir);
+
+  file_status_test();
+  query_test();
+  directory_iterator_test();
+  recursive_directory_iterator_test();
+  operations_test();
+  directory_entry_test();
+  directory_entry_overload_test();
+  error_handling_test();
+  string_file_tests();
+
+  cout << unique_path() << endl;
+  cout << unique_path("foo-%%%%%-%%%%%-bar") << endl;
+  cout << unique_path("foo-%%%%%-%%%%%-%%%%%-%%%%%-%%%%%-%%%%%-%%%%%-%%%%-bar") << endl;
+  cout << unique_path("foo-%%%%%-%%%%%-%%%%%-%%%%%-%%%%%-%%%%%-%%%%%-%%%%%-bar") << endl;
+  
+  cout << "testing complete" << endl;
+
+  // post-test cleanup
+  if (cleanup)
+  {
+    cout << "post-test removal of " << temp_dir << endl;
+    BOOST_TEST(remove_all(temp_dir) != 0);
+    // above was added just to simplify testing, but it ended up detecting
+    // a bug (failure to close an internal search handle). 
+    cout << "post-test removal complete" << endl;
+//    BOOST_TEST(!fs::exists(dir));  // nice test, but doesn't play well with TortoiseGit cache
+  }
+
+  return ::pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/path_test.cpp b/vendor/pdalboost/libs/filesystem/test/path_test.cpp
new file mode 100644
index 0000000..bf2e770
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/path_test.cpp
@@ -0,0 +1,2026 @@
+//  path_test program  -----------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2002, 2008
+//  Copyright Vladimir Prus 2002
+
+//  Use, modification, and distribution is subject to the Boost Software
+//  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/filesystem
+
+//  basic_path's stem(), extension(), and replace_extension() tests are based
+//  on basename(), extension(), and change_extension() tests from the original
+//  convenience_test.cpp by Vladimir Prus.
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                                     Caution                                          //
+//                                                                                      //
+//  The class path relational operators (==, !=, <, etc.) on Windows treat slash and    //
+//  backslash as equal. Thus any tests on Windows where the difference between slash    //
+//  and backslash is significant should compare strings rather than paths.              //
+//                                                                                      //
+//  BOOST_TEST(path == path)                     // '\\' and '/' are equal              //
+//  BOOST_TEST(path == convertable to string)    // '\\' and '/' are equal              //
+//  PATH_TEST_EQ(path, path)                     // '\\' and '/' are equal              //
+//                                                                                      //
+//  BOOST_TEST(path.string() == path.string())   // '\\' and '/' are not equal          //
+//  BOOST_TEST(path.string() ==                                                         //
+//               convertable to string)          // '\\' and '/' are not equal          //
+//  PATH_TEST_EQ(path.string(),                                                         //
+//                convertable to string)         // '\\' and '/' are not equal          //
+//                                                                                      //
+//  The last of these is often what is needed, so the PATH_TEST_EQ macro is provided.   //
+//  It converts its first argument to a path, and then performs a .string() on it,      //
+//  eliminating much boilerplate .string() or even path(...).string() code.             //
+//                                                                                      //
+//  PATH_TEST_EQ(path, convertable to string)    // '\\' and '/' are not equal          //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+#include <boost/config/warning_disable.hpp>
+
+//  See deprecated_test for tests of deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED 
+#  define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+#  define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/operations.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/utility.hpp>
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <vector>
+#include <cstring>
+#include <cassert>
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/detail/lightweight_main.hpp>
+
+namespace fs = pdalboost::filesystem;
+using pdalboost::filesystem::path;
+using pdalboost::next;
+using pdalboost::prior;
+
+#ifdef BOOST_WINDOWS_API
+# define BOOST_DIR_SEP "\\"
+#else
+# define BOOST_DIR_SEP "/"
+#endif
+
+#define PATH_TEST_EQ(a, b) check(a, b, __FILE__, __LINE__)
+
+namespace
+{
+  std::string platform(BOOST_PLATFORM);
+
+  void check(const fs::path & source,
+              const std::string & expected, const char* file, int line)
+  {
+    if (source.string() == expected)
+      return;
+
+    std::cout << file
+              << '(' << line << "): source: \"" << source.string()
+              << "\" != expected: \"" << expected
+              << "\"" << std::endl;
+
+    ++::pdalboost::detail::test_errors();
+  }
+
+  path p1("fe/fi/fo/fum");
+  path p2(p1);
+  path p3;
+  path p4("foobar");
+  path p5;
+
+  //  exception_tests  -----------------------------------------------------------------//
+
+  void exception_tests()
+  {
+    std::cout << "exception_tests..." << std::endl;
+    const std::string str_1("string-1");
+    pdalboost::system::error_code ec(12345, pdalboost::system::system_category());
+    try { throw fs::filesystem_error(str_1, ec); }
+    catch (const fs::filesystem_error & ex)
+    {
+      //std::cout << ex.what() << "*" << std::endl;
+      //BOOST_TEST(std::strcmp(ex.what(),
+      //  "string-1: Unknown error") == 0);
+      BOOST_TEST(ex.code() == ec);
+    }
+
+    try { throw fs::filesystem_error(str_1, "p1", "p2", ec); }
+    catch (const fs::filesystem_error & ex)
+    {
+      //std::cout << ex.what() << "*" << std::endl;                    
+      //BOOST_TEST(std::strcmp(ex.what(),
+      //  "string-1: Unknown error: \"p1\", \"p2\"") == 0);
+      BOOST_TEST(ex.code() == ec);
+      BOOST_TEST(ex.path1() == "p1");
+      BOOST_TEST(ex.path2() == "p2");
+    }
+  }
+
+  //  overload_tests  ------------------------------------------------------------------//
+
+  // These verify various overloads don't cause compiler errors
+  // They pre-date operations_unit_test.cpp
+
+  void overload_tests()
+  {
+    std::cout << "overload_tests..." << std::endl;
+
+    fs::exists(p1);
+    fs::exists("foo");
+    fs::exists(std::string("foo"));
+
+    fs::exists(p1 / path("foo"));
+    fs::exists(p1 / "foo");
+    fs::exists(p1 / std::string("foo"));
+
+    fs::exists("foo" / p1);
+    fs::exists(std::string("foo") / p1);
+
+    p4 /= path("foo");
+    p4 /= "foo";
+    p4 /= std::string("foo");
+  }
+
+  //  iterator_tests  ------------------------------------------------------------------//
+
+  void iterator_tests()
+  {
+    std::cout << "iterator_tests..." << std::endl;
+
+    path itr_ck = "";
+    path::const_iterator itr = itr_ck.begin();
+    BOOST_TEST(itr == itr_ck.end());
+
+    itr_ck = "/";
+    itr = itr_ck.begin();
+    BOOST_TEST(itr->string() == "/");
+    BOOST_TEST(++itr == itr_ck.end());
+    BOOST_TEST((--itr)->string() == "/");
+
+    itr_ck = "foo";
+    BOOST_TEST(*itr_ck.begin() == std::string("foo"));
+    BOOST_TEST(pdalboost::next(itr_ck.begin()) == itr_ck.end());
+    BOOST_TEST(*pdalboost::prior(itr_ck.end()) == std::string("foo"));
+    BOOST_TEST(pdalboost::prior(itr_ck.end()) == itr_ck.begin());
+
+    itr_ck = path("/foo");
+    BOOST_TEST((itr_ck.begin())->string() == "/");
+    BOOST_TEST(*pdalboost::next(itr_ck.begin()) == std::string("foo"));
+    BOOST_TEST(pdalboost::next(pdalboost::next(itr_ck.begin())) == itr_ck.end());
+    BOOST_TEST(pdalboost::next(itr_ck.begin()) == pdalboost::prior(itr_ck.end()));
+    BOOST_TEST(*pdalboost::prior(itr_ck.end()) == std::string("foo"));
+    BOOST_TEST(*pdalboost::prior(pdalboost::prior(itr_ck.end())) == std::string("/"));
+    BOOST_TEST(pdalboost::prior(pdalboost::prior(itr_ck.end())) == itr_ck.begin());
+
+    itr_ck = "/foo/bar";
+    itr = itr_ck.begin();
+    BOOST_TEST(itr->string() == "/");
+    BOOST_TEST(*++itr == std::string("foo"));
+    BOOST_TEST(*++itr == std::string("bar"));
+    BOOST_TEST(++itr == itr_ck.end());
+    PATH_TEST_EQ(*--itr, "bar");
+    PATH_TEST_EQ(*--itr, "foo");
+    PATH_TEST_EQ(*--itr, "/");
+
+    itr_ck = "../f"; // previously failed due to short name bug
+    itr = itr_ck.begin();
+    PATH_TEST_EQ(itr->string(), "..");
+    PATH_TEST_EQ(*++itr, "f");
+    BOOST_TEST(++itr == itr_ck.end());
+    PATH_TEST_EQ(*--itr, "f");
+    PATH_TEST_EQ(*--itr, "..");
+
+    // POSIX says treat "/foo/bar/" as "/foo/bar/."
+    itr_ck = "/foo/bar/";
+    itr = itr_ck.begin();
+    PATH_TEST_EQ(itr->string(), "/");
+    PATH_TEST_EQ(*++itr, "foo");
+    BOOST_TEST(itr != itr_ck.end());
+    PATH_TEST_EQ(*++itr, "bar");
+    BOOST_TEST(itr != itr_ck.end());
+    PATH_TEST_EQ(*++itr, ".");
+    BOOST_TEST(itr != itr_ck.end());  // verify the . isn't also seen as end()
+    BOOST_TEST(++itr == itr_ck.end());
+    PATH_TEST_EQ(*--itr, ".");
+    PATH_TEST_EQ(*--itr, "bar");
+    PATH_TEST_EQ(*--itr, "foo");
+    PATH_TEST_EQ(*--itr, "/");
+
+    // POSIX says treat "/f/b/" as "/f/b/."
+    itr_ck = "/f/b/";
+    itr = itr_ck.begin();
+    PATH_TEST_EQ(itr->string(), "/");
+    PATH_TEST_EQ(*++itr, "f");
+    PATH_TEST_EQ(*++itr, "b");
+    PATH_TEST_EQ(*++itr, ".");
+    BOOST_TEST(itr != itr_ck.end());  // verify the . isn't also seen as end()
+    BOOST_TEST(++itr == itr_ck.end());
+    PATH_TEST_EQ(*--itr, ".");
+    PATH_TEST_EQ(*--itr, "b");
+    PATH_TEST_EQ(*--itr, "f");
+    PATH_TEST_EQ(*--itr, "/");
+
+    // POSIX says treat "a/b/" as "a/b/."
+    // Although similar to the prior test case, this failed the ". isn't end" test due to
+    // a bug while the prior case did not fail.
+    itr_ck = "a/b/";
+    itr = itr_ck.begin();
+    PATH_TEST_EQ(*itr, "a");
+    PATH_TEST_EQ(*++itr, "b");
+    PATH_TEST_EQ(*++itr, ".");
+    BOOST_TEST(itr != itr_ck.end());  // verify the . isn't also seen as end()
+    BOOST_TEST(++itr == itr_ck.end());
+    PATH_TEST_EQ(*--itr, ".");
+    PATH_TEST_EQ(*--itr, "b");
+    PATH_TEST_EQ(*--itr, "a");
+
+    itr_ck = "//net";
+    itr = itr_ck.begin();
+    // two leading slashes are permitted by POSIX (as implementation defined),
+    // while for Windows it is always well defined (as a network name)
+    PATH_TEST_EQ(itr->string(), "//net");
+    BOOST_TEST(++itr == itr_ck.end());
+    PATH_TEST_EQ(*--itr, "//net");
+
+    itr_ck = "//net/";
+    itr = itr_ck.begin();
+    PATH_TEST_EQ(itr->string(), "//net");
+    PATH_TEST_EQ(*++itr, "/");
+    BOOST_TEST(++itr == itr_ck.end());
+    PATH_TEST_EQ(*--itr, "/");
+    PATH_TEST_EQ(*--itr, "//net");
+
+    itr_ck = "//foo///bar///";
+    itr = itr_ck.begin();
+    PATH_TEST_EQ(itr->string(), "//foo");
+    PATH_TEST_EQ(*++itr, "/");
+    PATH_TEST_EQ(*++itr, "bar");
+    PATH_TEST_EQ(*++itr, ".");
+    BOOST_TEST(++itr == itr_ck.end());
+    PATH_TEST_EQ(*--itr, ".");
+    PATH_TEST_EQ(*--itr, "bar");
+    PATH_TEST_EQ(*--itr, "/");
+    PATH_TEST_EQ(*--itr, "//foo");
+
+    itr_ck = "///foo///bar///";
+    itr = itr_ck.begin();
+    // three or more leading slashes are to be treated as a single slash
+    PATH_TEST_EQ(itr->string(), "/");
+    PATH_TEST_EQ(*++itr, "foo");
+    PATH_TEST_EQ(*++itr, "bar");
+    PATH_TEST_EQ(*++itr, ".");
+    BOOST_TEST(++itr == itr_ck.end());
+    PATH_TEST_EQ(*--itr, ".");
+    PATH_TEST_EQ(*--itr, "bar");
+    PATH_TEST_EQ(*--itr, "foo");
+    PATH_TEST_EQ(*--itr, "/");
+
+    if (platform == "Windows")
+    {
+      itr_ck = "c:/";
+      itr = itr_ck.begin();
+      PATH_TEST_EQ(itr->string(), "c:");
+      PATH_TEST_EQ(*++itr, std::string("/"));
+      BOOST_TEST(++itr == itr_ck.end());
+      PATH_TEST_EQ(*--itr, "/");
+      PATH_TEST_EQ(*--itr, "c:");
+
+      itr_ck = "c:\\";
+      itr = itr_ck.begin();
+      PATH_TEST_EQ(itr->string(), "c:");
+      PATH_TEST_EQ(*++itr, "/");  // test that iteration returns generic format
+      BOOST_TEST(++itr == itr_ck.end());
+      PATH_TEST_EQ(*--itr, "/");  // test that iteration returns generic format
+      PATH_TEST_EQ(*--itr, "c:");
+
+      itr_ck = "c:/foo";
+      itr = itr_ck.begin();
+      BOOST_TEST(*itr == std::string("c:"));
+      BOOST_TEST(*++itr == std::string("/"));
+      BOOST_TEST(*++itr == std::string("foo"));
+      BOOST_TEST(++itr == itr_ck.end());
+      BOOST_TEST(*--itr == std::string("foo"));
+      BOOST_TEST((--itr)->string() == "/");
+      BOOST_TEST(*--itr == std::string("c:"));
+
+      itr_ck = "c:\\foo";
+      itr = itr_ck.begin();
+      BOOST_TEST(*itr == std::string("c:"));
+      BOOST_TEST(*++itr == std::string("\\"));
+      BOOST_TEST(*++itr == std::string("foo"));
+      BOOST_TEST(++itr == itr_ck.end());
+      BOOST_TEST(*--itr == std::string("foo"));
+      BOOST_TEST(*--itr == std::string("\\"));
+      BOOST_TEST(*--itr == std::string("c:"));
+
+      itr_ck = "\\\\\\foo\\\\\\bar\\\\\\";
+      itr = itr_ck.begin();
+      // three or more leading slashes are to be treated as a single slash
+      PATH_TEST_EQ(itr->string(), "/");
+      PATH_TEST_EQ(*++itr, "foo");
+      PATH_TEST_EQ(*++itr, "bar");
+      PATH_TEST_EQ(*++itr, ".");
+      BOOST_TEST(++itr == itr_ck.end());
+      PATH_TEST_EQ(*--itr, ".");
+      PATH_TEST_EQ(*--itr, "bar");
+      PATH_TEST_EQ(*--itr, "foo");
+      PATH_TEST_EQ(*--itr, "/");
+
+      itr_ck = "c:foo";
+      itr = itr_ck.begin();
+      BOOST_TEST(*itr == std::string("c:"));
+      BOOST_TEST(*++itr == std::string("foo"));
+      BOOST_TEST(++itr == itr_ck.end());
+      BOOST_TEST(*--itr == std::string("foo"));
+      BOOST_TEST(*--itr == std::string("c:"));
+
+      itr_ck = "c:foo/";
+      itr = itr_ck.begin();
+      BOOST_TEST(*itr == std::string("c:"));
+      BOOST_TEST(*++itr == std::string("foo"));
+      BOOST_TEST(*++itr == std::string("."));
+      BOOST_TEST(++itr == itr_ck.end());
+      BOOST_TEST(*--itr == std::string("."));
+      BOOST_TEST(*--itr == std::string("foo"));
+      BOOST_TEST(*--itr == std::string("c:"));
+
+      itr_ck = path("c:");
+      BOOST_TEST(*itr_ck.begin() == std::string("c:"));
+      BOOST_TEST(next(itr_ck.begin()) == itr_ck.end());
+      BOOST_TEST(prior(itr_ck.end()) == itr_ck.begin());
+      BOOST_TEST(*prior(itr_ck.end()) == std::string("c:"));
+
+      itr_ck = path("c:/");
+      BOOST_TEST(*itr_ck.begin() == std::string("c:"));
+      BOOST_TEST(*next(itr_ck.begin()) == std::string("/"));
+      BOOST_TEST(next(next(itr_ck.begin())) == itr_ck.end());
+      BOOST_TEST(prior(prior(itr_ck.end())) == itr_ck.begin());
+      BOOST_TEST(*prior(itr_ck.end()) == std::string("/"));
+      BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("c:"));
+
+      itr_ck = path("c:foo");
+      BOOST_TEST(*itr_ck.begin() == std::string("c:"));
+      BOOST_TEST(*next(itr_ck.begin()) == std::string("foo"));
+      BOOST_TEST(next(next(itr_ck.begin())) == itr_ck.end());
+      BOOST_TEST(prior(prior(itr_ck.end())) == itr_ck.begin());
+      BOOST_TEST(*prior(itr_ck.end()) == std::string("foo"));
+      BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("c:"));
+
+      itr_ck = path("c:/foo");
+      BOOST_TEST(*itr_ck.begin() == std::string("c:"));
+      BOOST_TEST(*next(itr_ck.begin()) == std::string("/"));
+      BOOST_TEST(*next(next(itr_ck.begin())) == std::string("foo"));
+      BOOST_TEST(next(next(next(itr_ck.begin()))) == itr_ck.end());
+      BOOST_TEST(prior(prior(prior(itr_ck.end()))) == itr_ck.begin());
+      BOOST_TEST(*prior(itr_ck.end()) == std::string("foo"));
+      BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("/"));
+      BOOST_TEST(*prior(prior(prior(itr_ck.end()))) == std::string("c:"));
+
+      itr_ck = path("//net");
+      BOOST_TEST(*itr_ck.begin() == std::string("//net"));
+      BOOST_TEST(next(itr_ck.begin()) == itr_ck.end());
+      BOOST_TEST(prior(itr_ck.end()) == itr_ck.begin());
+      BOOST_TEST(*prior(itr_ck.end()) == std::string("//net"));
+
+      itr_ck = path("//net/");
+      PATH_TEST_EQ(itr_ck.begin()->string(), "//net");
+      PATH_TEST_EQ(next(itr_ck.begin())->string(), "/");
+      BOOST_TEST(next(next(itr_ck.begin())) == itr_ck.end());
+      BOOST_TEST(prior(prior(itr_ck.end())) == itr_ck.begin());
+      PATH_TEST_EQ(prior(itr_ck.end())->string(), "/");
+      PATH_TEST_EQ(prior(prior(itr_ck.end()))->string(), "//net");
+
+      itr_ck = path("//net/foo");
+      BOOST_TEST(*itr_ck.begin() == std::string("//net"));
+      BOOST_TEST(*next(itr_ck.begin()) == std::string("/"));
+      BOOST_TEST(*next(next(itr_ck.begin())) == std::string("foo"));
+      BOOST_TEST(next(next(next(itr_ck.begin()))) == itr_ck.end());
+      BOOST_TEST(prior(prior(prior(itr_ck.end()))) == itr_ck.begin());
+      BOOST_TEST(*prior(itr_ck.end()) == std::string("foo"));
+      BOOST_TEST(*prior(prior(itr_ck.end())) == std::string("/"));
+      BOOST_TEST(*prior(prior(prior(itr_ck.end()))) == std::string("//net"));
+
+      itr_ck = path("prn:");
+      BOOST_TEST(*itr_ck.begin() == std::string("prn:"));
+      BOOST_TEST(next(itr_ck.begin()) == itr_ck.end());
+      BOOST_TEST(prior(itr_ck.end()) == itr_ck.begin());
+      BOOST_TEST(*prior(itr_ck.end()) == std::string("prn:"));
+    }
+    else
+    {
+      itr_ck = "///";
+      itr = itr_ck.begin();
+      PATH_TEST_EQ(itr->string(),  "/");
+      BOOST_TEST(++itr == itr_ck.end());
+    }
+  }
+
+  //  non_member_tests  ----------------------------------------------------------------//
+
+  void non_member_tests()
+  {
+    std::cout << "non_member_tests..." << std::endl;
+
+    // test non-member functions, particularly operator overloads
+                                                               
+    path e, e2;
+    std::string es, es2;
+    char ecs[] = "";
+    char ecs2[] = "";
+
+    char acs[] = "a";
+    std::string as(acs);
+    path a(as);
+
+    char acs2[] = "a";
+    std::string as2(acs2);
+    path a2(as2);
+
+    char bcs[] = "b";
+    std::string bs(bcs);
+    path b(bs);
+
+    // swap
+    a.swap(b);
+    BOOST_TEST(a.string() == "b");
+    BOOST_TEST(b.string() == "a");
+    fs::swap(a, b);
+    BOOST_TEST(a.string() == "a");
+    BOOST_TEST(b.string() == "b");
+
+    // probe operator /
+    PATH_TEST_EQ(path("") / ".", ".");
+    PATH_TEST_EQ(path("") / "..", "..");
+    if (platform == "Windows")
+    {
+      BOOST_TEST(path("foo\\bar") == "foo/bar");
+      BOOST_TEST((b / a).native() == path("b\\a").native());
+      BOOST_TEST((bs / a).native() == path("b\\a").native());
+      BOOST_TEST((bcs / a).native() == path("b\\a").native());
+      BOOST_TEST((b / as).native() == path("b\\a").native());
+      BOOST_TEST((b / acs).native() == path("b\\a").native());
+      PATH_TEST_EQ(path("a") / "b", "a\\b");
+      PATH_TEST_EQ(path("..") / "", "..");
+      PATH_TEST_EQ(path("foo") / path("bar"), "foo\\bar"); // path arg
+      PATH_TEST_EQ(path("foo") / "bar", "foo\\bar");       // const char* arg
+      PATH_TEST_EQ(path("foo") / path("woo/bar").filename(), "foo\\bar"); // const std::string & arg
+      PATH_TEST_EQ("foo" / path("bar"), "foo\\bar");
+      PATH_TEST_EQ(path("..") / ".." , "..\\..");
+      PATH_TEST_EQ(path("/") / ".." , "/..");
+      PATH_TEST_EQ(path("/..") / ".." , "/..\\..");
+      PATH_TEST_EQ(path("..") / "foo" , "..\\foo");
+      PATH_TEST_EQ(path("foo") / ".." , "foo\\..");
+      PATH_TEST_EQ(path("..") / "f" , "..\\f");
+      PATH_TEST_EQ(path("/..") / "f" , "/..\\f");
+      PATH_TEST_EQ(path("f") / ".." , "f\\..");
+      PATH_TEST_EQ(path("foo") / ".." / ".." , "foo\\..\\..");
+      PATH_TEST_EQ(path("foo") / ".." / ".." / ".." , "foo\\..\\..\\..");
+      PATH_TEST_EQ(path("f") / ".." / "b" , "f\\..\\b");
+      PATH_TEST_EQ(path("foo") / ".." / "bar" , "foo\\..\\bar");
+      PATH_TEST_EQ(path("foo") / "bar" / ".." , "foo\\bar\\..");
+      PATH_TEST_EQ(path("foo") / "bar" / ".." / "..", "foo\\bar\\..\\..");
+      PATH_TEST_EQ(path("foo") / "bar" / ".." / "blah", "foo\\bar\\..\\blah");
+      PATH_TEST_EQ(path("f") / "b" / ".." , "f\\b\\..");
+      PATH_TEST_EQ(path("f") / "b" / ".." / "a", "f\\b\\..\\a");
+      PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / "..", "foo\\bar\\blah\\..\\..");
+      PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / ".." / "bletch", "foo\\bar\\blah\\..\\..\\bletch");
+
+      PATH_TEST_EQ(path(".") / "foo", ".\\foo");
+      PATH_TEST_EQ(path(".") / "..", ".\\..");
+      PATH_TEST_EQ(path("foo") / ".", "foo\\.");
+      PATH_TEST_EQ(path("..") / ".", "..\\.");
+      PATH_TEST_EQ(path(".") / ".", ".\\.");
+      PATH_TEST_EQ(path(".") / "." / ".", ".\\.\\.");
+      PATH_TEST_EQ(path(".") / "foo" / ".", ".\\foo\\.");
+      PATH_TEST_EQ(path("foo") / "." / "bar", "foo\\.\\bar");
+      PATH_TEST_EQ(path("foo") / "." / ".", "foo\\.\\.");
+      PATH_TEST_EQ(path("foo") / "." / "..", "foo\\.\\..");
+      PATH_TEST_EQ(path(".") / "." / "..", ".\\.\\..");
+      PATH_TEST_EQ(path(".") / ".." / ".", ".\\..\\.");
+      PATH_TEST_EQ(path("..") / "." / ".", "..\\.\\.");
+    }
+    else  // POSIX
+    {
+      PATH_TEST_EQ(b / a, "b/a");
+      PATH_TEST_EQ(bs / a, "b/a");
+      PATH_TEST_EQ(bcs / a, "b/a");
+      PATH_TEST_EQ(b / as, "b/a");
+      PATH_TEST_EQ(b / acs, "b/a");
+      PATH_TEST_EQ(path("a") / "b", "a/b");
+      PATH_TEST_EQ(path("..") / "", "..");
+      PATH_TEST_EQ(path("") / "..", "..");
+      PATH_TEST_EQ(path("foo") / path("bar"), "foo/bar"); // path arg
+      PATH_TEST_EQ(path("foo") / "bar", "foo/bar");       // const char* arg
+      PATH_TEST_EQ(path("foo") / path("woo/bar").filename(), "foo/bar"); // const std::string & arg
+      PATH_TEST_EQ("foo" / path("bar"), "foo/bar");
+      PATH_TEST_EQ(path("..") / ".." , "../..");
+      PATH_TEST_EQ(path("/") / ".." , "/..");
+      PATH_TEST_EQ(path("/..") / ".." , "/../..");
+      PATH_TEST_EQ(path("..") / "foo" , "../foo");
+      PATH_TEST_EQ(path("foo") / ".." , "foo/..");
+      PATH_TEST_EQ(path("..") / "f" , "../f");
+      PATH_TEST_EQ(path("/..") / "f" , "/../f");
+      PATH_TEST_EQ(path("f") / ".." , "f/..");
+      PATH_TEST_EQ(path("foo") / ".." / ".." , "foo/../..");
+      PATH_TEST_EQ(path("foo") / ".." / ".." / ".." , "foo/../../..");
+      PATH_TEST_EQ(path("f") / ".." / "b" , "f/../b");
+      PATH_TEST_EQ(path("foo") / ".." / "bar" , "foo/../bar");
+      PATH_TEST_EQ(path("foo") / "bar" / ".." , "foo/bar/..");
+      PATH_TEST_EQ(path("foo") / "bar" / ".." / "..", "foo/bar/../..");
+      PATH_TEST_EQ(path("foo") / "bar" / ".." / "blah", "foo/bar/../blah");
+      PATH_TEST_EQ(path("f") / "b" / ".." , "f/b/..");
+      PATH_TEST_EQ(path("f") / "b" / ".." / "a", "f/b/../a");
+      PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / "..", "foo/bar/blah/../..");
+      PATH_TEST_EQ(path("foo") / "bar" / "blah" / ".." / ".." / "bletch", "foo/bar/blah/../../bletch");
+
+      PATH_TEST_EQ(path(".") / "foo", "./foo");
+      PATH_TEST_EQ(path(".") / "..", "./..");
+      PATH_TEST_EQ(path("foo") / ".", "foo/.");
+      PATH_TEST_EQ(path("..") / ".", "../.");
+      PATH_TEST_EQ(path(".") / ".", "./.");
+      PATH_TEST_EQ(path(".") / "." / ".", "././.");
+      PATH_TEST_EQ(path(".") / "foo" / ".", "./foo/.");
+      PATH_TEST_EQ(path("foo") / "." / "bar", "foo/./bar");
+      PATH_TEST_EQ(path("foo") / "." / ".", "foo/./.");
+      PATH_TEST_EQ(path("foo") / "." / "..", "foo/./..");
+      PATH_TEST_EQ(path(".") / "." / "..", "././..");
+      PATH_TEST_EQ(path(".") / ".." / ".", "./../.");
+      PATH_TEST_EQ(path("..") / "." / ".", ".././.");
+    }
+
+    // probe operator <
+    BOOST_TEST(!(e < e2));
+    BOOST_TEST(!(es < e2));
+    BOOST_TEST(!(ecs < e2));
+    BOOST_TEST(!(e < es2));
+    BOOST_TEST(!(e < ecs2));
+
+    BOOST_TEST(e < a);
+    BOOST_TEST(es < a);
+    BOOST_TEST(ecs < a);
+    BOOST_TEST(e < as);
+    BOOST_TEST(e < acs);
+
+    BOOST_TEST(a < b);
+    BOOST_TEST(as < b);
+    BOOST_TEST(acs < b);
+    BOOST_TEST(a < bs);
+    BOOST_TEST(a < bcs);
+
+    BOOST_TEST(!(a < a2));
+    BOOST_TEST(!(as < a2));
+    BOOST_TEST(!(acs < a2));
+    BOOST_TEST(!(a < as2));
+    BOOST_TEST(!(a < acs2));
+
+    // make sure basic_path overloads don't conflict with std::string overloads
+
+    BOOST_TEST(!(as < as));
+    BOOST_TEST(!(as < acs));
+    BOOST_TEST(!(acs < as));
+
+    // character set reality check before lexicographical tests
+    BOOST_TEST(std::string("a.b") < std::string("a/b"));
+    // verify compare is actually lexicographical
+    BOOST_TEST(path("a/b") < path("a.b"));
+    BOOST_TEST(path("a/b") == path("a///b"));
+    BOOST_TEST(path("a/b/") == path("a/b/."));
+    BOOST_TEST(path("a/b") != path("a/b/"));
+
+    // make sure the derivative operators also work
+
+    BOOST_TEST(b > a);
+    BOOST_TEST(b > as);
+    BOOST_TEST(b > acs);
+    BOOST_TEST(bs > a);
+    BOOST_TEST(bcs > a);
+
+    BOOST_TEST(!(a2 > a));
+    BOOST_TEST(!(a2 > as));
+    BOOST_TEST(!(a2 > acs));
+    BOOST_TEST(!(as2 > a));
+    BOOST_TEST(!(acs2 > a));
+
+    BOOST_TEST(a <= b);
+    BOOST_TEST(as <= b);
+    BOOST_TEST(acs <= b);
+    BOOST_TEST(a <= bs);
+    BOOST_TEST(a <= bcs);
+
+    BOOST_TEST(a <= a2);
+    BOOST_TEST(as <= a2);
+    BOOST_TEST(acs <= a2);
+    BOOST_TEST(a <= as2);
+    BOOST_TEST(a <= acs2);
+
+    BOOST_TEST(b >= a);
+    BOOST_TEST(bs >= a);
+    BOOST_TEST(bcs >= a);
+    BOOST_TEST(b >= as);
+    BOOST_TEST(b >= acs);
+
+    BOOST_TEST(a2 >= a);
+    BOOST_TEST(as2 >= a);
+    BOOST_TEST(acs2 >= a);
+    BOOST_TEST(a2 >= as);
+    BOOST_TEST(a2 >= acs);
+
+    //  operator == and != are implemented separately, so test separately
+
+    path p101("fe/fi/fo/fum");
+    path p102(p101);
+    path p103("fe/fi/fo/fumm");
+    BOOST_TEST(p101.string() != p103.string());
+
+    // check each overload
+    BOOST_TEST(p101 != p103);
+    BOOST_TEST(p101 != p103.string());
+    BOOST_TEST(p101 != p103.string().c_str());
+    BOOST_TEST(p101.string() != p103);
+    BOOST_TEST(p101.string().c_str() != p103);
+
+    p103 = p102;
+    BOOST_TEST(p101.string() == p103.string());
+
+    // check each overload
+    BOOST_TEST(p101 == p103);
+    BOOST_TEST(p101 == p103.string());
+    BOOST_TEST(p101 == p103.string().c_str());
+    BOOST_TEST(p101.string() == p103);
+    BOOST_TEST(p101.string().c_str() == p103);
+
+    if (platform == "Windows")
+    {
+      std::cout << "  Windows relational tests..." << std::endl;
+      path p10 ("c:\\file");
+      path p11 ("c:/file");
+      // check each overload
+      BOOST_TEST(p10.generic_string() == p11.generic_string());
+      BOOST_TEST(p10 == p11);
+      BOOST_TEST(p10 == p11.string());
+      BOOST_TEST(p10 == p11.string().c_str());
+      BOOST_TEST(p10.string() == p11);
+      BOOST_TEST(p10.string().c_str() == p11);
+      BOOST_TEST(p10 == L"c:\\file");
+      BOOST_TEST(p10 == L"c:/file");
+      BOOST_TEST(p11 == L"c:\\file");
+      BOOST_TEST(p11 == L"c:/file");
+      BOOST_TEST(L"c:\\file" == p10);
+      BOOST_TEST(L"c:/file" == p10);
+      BOOST_TEST(L"c:\\file" == p11);
+      BOOST_TEST(L"c:/file" == p11);
+
+      BOOST_TEST(!(p10.generic_string() != p11.generic_string()));
+      BOOST_TEST(!(p10 != p11));
+      BOOST_TEST(!(p10 != p11.string()));
+      BOOST_TEST(!(p10 != p11.string().c_str()));
+      BOOST_TEST(!(p10.string() != p11));
+      BOOST_TEST(!(p10.string().c_str() != p11));
+      BOOST_TEST(!(p10 != L"c:\\file"));
+      BOOST_TEST(!(p10 != L"c:/file"));
+      BOOST_TEST(!(p11 != L"c:\\file"));
+      BOOST_TEST(!(p11 != L"c:/file"));
+      BOOST_TEST(!(L"c:\\file" != p10));
+      BOOST_TEST(!(L"c:/file" != p10));
+      BOOST_TEST(!(L"c:\\file" != p11));
+      BOOST_TEST(!(L"c:/file" != p11));
+
+      BOOST_TEST(!(p10.string() < p11.string()));
+      BOOST_TEST(!(p10 < p11));
+      BOOST_TEST(!(p10 < p11.string()));
+      BOOST_TEST(!(p10 < p11.string().c_str()));
+      BOOST_TEST(!(p10.string() < p11));
+      BOOST_TEST(!(p10.string().c_str() < p11));
+      BOOST_TEST(!(p10 < L"c:\\file"));
+      BOOST_TEST(!(p10 < L"c:/file"));
+      BOOST_TEST(!(p11 < L"c:\\file"));
+      BOOST_TEST(!(p11 < L"c:/file"));
+      BOOST_TEST(!(L"c:\\file" < p10));
+      BOOST_TEST(!(L"c:/file" < p10));
+      BOOST_TEST(!(L"c:\\file" < p11));
+      BOOST_TEST(!(L"c:/file" < p11));
+
+      BOOST_TEST(!(p10.generic_string() > p11.generic_string()));
+      BOOST_TEST(!(p10 > p11));
+      BOOST_TEST(!(p10 > p11.string()));
+      BOOST_TEST(!(p10 > p11.string().c_str()));
+      BOOST_TEST(!(p10.string() > p11));
+      BOOST_TEST(!(p10.string().c_str() > p11));
+      BOOST_TEST(!(p10 > L"c:\\file"));
+      BOOST_TEST(!(p10 > L"c:/file"));
+      BOOST_TEST(!(p11 > L"c:\\file"));
+      BOOST_TEST(!(p11 > L"c:/file"));
+      BOOST_TEST(!(L"c:\\file" > p10));
+      BOOST_TEST(!(L"c:/file" > p10));
+      BOOST_TEST(!(L"c:\\file" > p11));
+      BOOST_TEST(!(L"c:/file" > p11));
+    }
+
+    // relative
+
+    BOOST_TEST(fs::relative("/abc/def", "/abc") == path("def"));
+    BOOST_TEST(fs::relative("abc/def", "abc") == path("def"));
+    BOOST_TEST(fs::relative("/abc/xyz/def", "/abc") == path("xyz/def"));
+    BOOST_TEST(fs::relative("abc/xyz/def", "abc") == path("xyz/def"));
+
+    if (platform == "Windows")
+    {
+      std::cout << "  Windows relatie tests..." << std::endl;
+      BOOST_TEST(fs::relative("\\abc\\xyz\\def", "/abc") == path("xyz/def"));
+      std::cout << "    fs::relative(\"/abc/xyz/def\", \"/abc\") is "
+        << fs::relative("/abc/xyz/def", "/abc") << std::endl;
+      BOOST_TEST(fs::relative("abc\\xyz\\def", "abc") == path("xyz/def"));
+    }
+  }
+
+  //  query_and_decomposition_tests  ---------------------------------------------------//
+  //
+  //  remove_filename() is also tested here, because its specification depends on
+  //  a decomposition function.
+
+  void query_and_decomposition_tests()
+  {
+    std::cout << "query_and_decomposition_tests..." << std::endl;
+
+    // these are the examples given in reference docs, so check they work
+    BOOST_TEST(path("/foo/bar.txt").parent_path() == "/foo");
+    BOOST_TEST(path("/foo/bar").parent_path() == "/foo");    
+    BOOST_TEST(path("/foo/bar/").parent_path() == "/foo/bar");   
+    BOOST_TEST(path("/").parent_path() == "");           
+    BOOST_TEST(path(".").parent_path() == "");           
+    BOOST_TEST(path("..").parent_path() == "");
+    BOOST_TEST(path("/foo/bar.txt").filename() == "bar.txt");
+    BOOST_TEST(path("/foo/bar").filename() == "bar");    
+    BOOST_TEST(path("/foo/bar/").filename() == ".");   
+    BOOST_TEST(path("/").filename() == "/");           
+    BOOST_TEST(path(".").filename() == ".");           
+    BOOST_TEST(path("..").filename() == "..");
+
+    // stem() tests not otherwise covered
+    BOOST_TEST(path("b").stem() == "b");
+    BOOST_TEST(path("a/b.txt").stem() == "b");
+    BOOST_TEST(path("a/b.").stem() == "b"); 
+    BOOST_TEST(path("a.b.c").stem() == "a.b");
+    BOOST_TEST(path("a.b.c.").stem() == "a.b.c");
+
+    // extension() tests not otherwise covered
+    BOOST_TEST(path("a/b").extension() == "");
+    BOOST_TEST(path("a.b/c").extension() == "");
+    BOOST_TEST(path("a/b.txt").extension() == ".txt");
+    BOOST_TEST(path("a/b.").extension() == ".");
+    BOOST_TEST(path("a.b.c").extension() == ".c");
+    BOOST_TEST(path("a.b.c.").extension() == ".");
+    BOOST_TEST(path("a/").extension() == "");
+
+    // main q & d test sequence
+    path p;
+    path q;
+
+    p = q = "";
+    BOOST_TEST(p.relative_path().string() == "");
+    BOOST_TEST(p.parent_path().string() == "");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    BOOST_TEST(p.filename() == "");
+    BOOST_TEST(p.stem() == "");
+    BOOST_TEST(p.extension() == "");
+    BOOST_TEST(p.root_name() == "");
+    BOOST_TEST(p.root_directory() == "");
+    BOOST_TEST(p.root_path().string() == "");
+    BOOST_TEST(!p.has_root_path());
+    BOOST_TEST(!p.has_root_name());
+    BOOST_TEST(!p.has_root_directory());
+    BOOST_TEST(!p.has_relative_path());
+    BOOST_TEST(!p.has_filename());
+    BOOST_TEST(!p.has_stem());
+    BOOST_TEST(!p.has_extension());
+    BOOST_TEST(!p.has_parent_path());
+    BOOST_TEST(!p.is_absolute());
+
+    p = q = "/";
+    BOOST_TEST(p.relative_path().string() == "");
+    BOOST_TEST(p.parent_path().string() == "");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    BOOST_TEST(p.filename() == "/");
+    BOOST_TEST(p.stem() == "/");
+    BOOST_TEST(p.extension() == "");
+    BOOST_TEST(p.root_name() == "");
+    BOOST_TEST(p.root_directory() == "/");
+    BOOST_TEST(p.root_path().string() == "/");
+    BOOST_TEST(p.has_root_path());
+    BOOST_TEST(!p.has_root_name());
+    BOOST_TEST(p.has_root_directory());
+    BOOST_TEST(!p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_stem());
+    BOOST_TEST(!p.has_extension());
+    BOOST_TEST(!p.has_parent_path());
+    if (platform == "POSIX")
+      BOOST_TEST(p.is_absolute());
+    else
+      BOOST_TEST(!p.is_absolute());
+
+    p = q = "//";
+    PATH_TEST_EQ(p.relative_path().string(), "");
+    PATH_TEST_EQ(p.parent_path().string(), "");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    PATH_TEST_EQ(p.filename(), "//");
+    PATH_TEST_EQ(p.stem(), "//");
+    PATH_TEST_EQ(p.extension(), "");
+    PATH_TEST_EQ(p.root_name(), "//");
+    PATH_TEST_EQ(p.root_directory(), "");
+    PATH_TEST_EQ(p.root_path().string(), "//");
+    BOOST_TEST(p.has_root_path());
+    BOOST_TEST(p.has_root_name());
+    BOOST_TEST(!p.has_root_directory());
+    BOOST_TEST(!p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_stem());
+    BOOST_TEST(!p.has_extension());
+    BOOST_TEST(!p.has_parent_path());
+    BOOST_TEST(!p.is_absolute());
+
+    p = q = "///";
+    PATH_TEST_EQ(p.relative_path().string(), "");
+    PATH_TEST_EQ(p.parent_path().string(), "");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    PATH_TEST_EQ(p.filename(), "/");
+    PATH_TEST_EQ(p.stem(), "/");
+    PATH_TEST_EQ(p.extension(), "");
+    PATH_TEST_EQ(p.root_name(), "");
+    PATH_TEST_EQ(p.root_directory(), "/");
+    PATH_TEST_EQ(p.root_path().string(), "/");
+    BOOST_TEST(p.has_root_path());
+    BOOST_TEST(!p.has_root_name());
+    BOOST_TEST(p.has_root_directory());
+    BOOST_TEST(!p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_stem());
+    BOOST_TEST(!p.has_extension());
+    BOOST_TEST(!p.has_parent_path());
+    if (platform == "POSIX")
+      BOOST_TEST(p.is_absolute());
+    else
+      BOOST_TEST(!p.is_absolute());
+
+    p = q = ".";
+    BOOST_TEST(p.relative_path().string() == ".");
+    BOOST_TEST(p.parent_path().string() == "");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    BOOST_TEST(p.filename() == ".");
+    BOOST_TEST(p.stem() == ".");
+    BOOST_TEST(p.extension() == "");
+    BOOST_TEST(p.root_name() == "");
+    BOOST_TEST(p.root_directory() == "");
+    BOOST_TEST(p.root_path().string() == "");
+    BOOST_TEST(!p.has_root_path());
+    BOOST_TEST(!p.has_root_name());
+    BOOST_TEST(!p.has_root_directory());
+    BOOST_TEST(p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_stem());
+    BOOST_TEST(!p.has_extension());
+    BOOST_TEST(!p.has_parent_path());
+    BOOST_TEST(!p.is_absolute());
+
+    p = q = "..";
+    BOOST_TEST(p.relative_path().string() == "..");
+    BOOST_TEST(p.parent_path().string() == "");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    BOOST_TEST(p.filename() == "..");
+    BOOST_TEST(p.stem() == "..");
+    BOOST_TEST(p.extension() == "");
+    BOOST_TEST(p.root_name() == "");
+    BOOST_TEST(p.root_directory() == "");
+    BOOST_TEST(p.root_path().string() == "");
+    BOOST_TEST(!p.has_root_path());
+    BOOST_TEST(!p.has_root_name());
+    BOOST_TEST(!p.has_root_directory());
+    BOOST_TEST(p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_stem());
+    BOOST_TEST(!p.has_extension());
+    BOOST_TEST(!p.has_parent_path());
+    BOOST_TEST(!p.is_absolute());
+
+    p = q = "foo";
+    BOOST_TEST(p.relative_path().string() == "foo");
+    BOOST_TEST(p.parent_path().string() == "");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    BOOST_TEST(p.filename() == "foo");
+    BOOST_TEST(p.stem() == "foo");
+    BOOST_TEST(p.extension() == "");
+    BOOST_TEST(p.root_name() == "");
+    BOOST_TEST(p.root_directory() == "");
+    BOOST_TEST(p.root_path().string() == "");
+    BOOST_TEST(!p.has_root_path());
+    BOOST_TEST(!p.has_root_name());
+    BOOST_TEST(!p.has_root_directory());
+    BOOST_TEST(p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_stem());
+    BOOST_TEST(!p.has_extension());
+    BOOST_TEST(!p.has_parent_path());
+    BOOST_TEST(!p.is_absolute());
+
+    p = q = "/foo";
+    PATH_TEST_EQ(p.relative_path().string(), "foo");
+    PATH_TEST_EQ(p.parent_path().string(), "/");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    PATH_TEST_EQ(p.filename(), "foo");
+    PATH_TEST_EQ(p.stem(), "foo");
+    PATH_TEST_EQ(p.extension(), "");
+    PATH_TEST_EQ(p.root_name(), "");
+    PATH_TEST_EQ(p.root_directory(), "/");
+    PATH_TEST_EQ(p.root_path().string(), "/");
+    BOOST_TEST(p.has_root_path());
+    BOOST_TEST(!p.has_root_name());
+    BOOST_TEST(p.has_root_directory());
+    BOOST_TEST(p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_stem());
+    BOOST_TEST(!p.has_extension());
+    BOOST_TEST(p.has_parent_path());
+    if (platform == "POSIX")
+      BOOST_TEST(p.is_absolute());
+    else
+      BOOST_TEST(!p.is_absolute());
+
+    p = q = "/foo/";
+    PATH_TEST_EQ(p.relative_path().string(), "foo/");
+    PATH_TEST_EQ(p.parent_path().string(), "/foo");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    PATH_TEST_EQ(p.filename(), ".");
+    PATH_TEST_EQ(p.stem(), ".");
+    PATH_TEST_EQ(p.extension(), "");
+    PATH_TEST_EQ(p.root_name(), "");
+    PATH_TEST_EQ(p.root_directory(), "/");
+    PATH_TEST_EQ(p.root_path().string(), "/");
+    BOOST_TEST(p.has_root_path());
+    BOOST_TEST(!p.has_root_name());
+    BOOST_TEST(p.has_root_directory());
+    BOOST_TEST(p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_stem());
+    BOOST_TEST(!p.has_extension());
+    BOOST_TEST(p.has_parent_path());
+    if (platform == "POSIX")
+      BOOST_TEST(p.is_absolute());
+    else
+      BOOST_TEST(!p.is_absolute());
+
+    p = q = "///foo";
+    PATH_TEST_EQ(p.relative_path().string(), "foo");
+    PATH_TEST_EQ(p.parent_path().string(), "/");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    PATH_TEST_EQ(p.filename(), "foo");
+    PATH_TEST_EQ(p.root_name(), "");
+    PATH_TEST_EQ(p.root_directory(), "/");
+    PATH_TEST_EQ(p.root_path().string(), "/");
+    BOOST_TEST(p.has_root_path());
+    BOOST_TEST(!p.has_root_name());
+    BOOST_TEST(p.has_root_directory());
+    BOOST_TEST(p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_parent_path());
+    if (platform == "POSIX")
+      BOOST_TEST(p.is_absolute());
+    else
+      BOOST_TEST(!p.is_absolute());
+
+    p = q = "foo/bar";
+    BOOST_TEST(p.relative_path().string() == "foo/bar");
+    BOOST_TEST(p.parent_path().string() == "foo");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    BOOST_TEST(p.filename() == "bar");
+    BOOST_TEST(p.stem() == "bar");
+    BOOST_TEST(p.extension() == "");
+    BOOST_TEST(p.root_name() == "");
+    BOOST_TEST(p.root_directory() == "");
+    BOOST_TEST(p.root_path().string() == "");
+    BOOST_TEST(!p.has_root_path());
+    BOOST_TEST(!p.has_root_name());
+    BOOST_TEST(!p.has_root_directory());
+    BOOST_TEST(p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_stem());
+    BOOST_TEST(!p.has_extension());
+    BOOST_TEST(p.has_parent_path());
+    BOOST_TEST(!p.is_absolute());
+
+    p = q = "../foo";
+    BOOST_TEST(p.relative_path().string() == "../foo");
+    BOOST_TEST(p.parent_path().string() == "..");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    BOOST_TEST(p.filename() == "foo");
+    BOOST_TEST(p.root_name() == "");
+    BOOST_TEST(p.root_directory() == "");
+    BOOST_TEST(p.root_path().string() == "");
+    BOOST_TEST(!p.has_root_path());
+    BOOST_TEST(!p.has_root_name());
+    BOOST_TEST(!p.has_root_directory());
+    BOOST_TEST(p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_parent_path());
+    BOOST_TEST(!p.is_absolute());
+
+    p = q = "..///foo";
+    PATH_TEST_EQ(p.relative_path().string(), "..///foo");
+    PATH_TEST_EQ(p.parent_path().string(), "..");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    PATH_TEST_EQ(p.filename(), "foo");
+    PATH_TEST_EQ(p.root_name(), "");
+    PATH_TEST_EQ(p.root_directory(), "");
+    PATH_TEST_EQ(p.root_path().string(), "");
+    BOOST_TEST(!p.has_root_path());
+    BOOST_TEST(!p.has_root_name());
+    BOOST_TEST(!p.has_root_directory());
+    BOOST_TEST(p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_parent_path());
+    BOOST_TEST(!p.is_absolute());
+
+    p = q = "/foo/bar";
+    BOOST_TEST(p.relative_path().string() == "foo/bar");
+    BOOST_TEST(p.parent_path().string() == "/foo");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    BOOST_TEST(p.filename() == "bar");
+    BOOST_TEST(p.root_name() == "");
+    BOOST_TEST(p.root_directory() == "/");
+    BOOST_TEST(p.root_path().string() == "/");
+    BOOST_TEST(p.has_root_path());
+    BOOST_TEST(!p.has_root_name());
+    BOOST_TEST(p.has_root_directory());
+    BOOST_TEST(p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_parent_path());
+    if (platform == "POSIX")
+      BOOST_TEST(p.is_absolute());
+    else
+      BOOST_TEST(!p.is_absolute());
+
+    // Both POSIX and Windows allow two leading slashs
+    // (POSIX meaning is implementation defined)
+    PATH_TEST_EQ(path("//resource"), "//resource");
+    PATH_TEST_EQ(path("//resource/"), "//resource/");
+    PATH_TEST_EQ(path("//resource/foo"), "//resource/foo");
+
+    p = q = path("//net");
+    PATH_TEST_EQ(p.string(), "//net");
+    PATH_TEST_EQ(p.relative_path().string(), "");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    PATH_TEST_EQ(p.parent_path().string(), "");
+    PATH_TEST_EQ(p.filename(), "//net");
+    PATH_TEST_EQ(p.root_name(), "//net");
+    PATH_TEST_EQ(p.root_directory(), "");
+    PATH_TEST_EQ(p.root_path().string(), "//net");
+    BOOST_TEST(p.has_root_path());
+    BOOST_TEST(p.has_root_name());
+    BOOST_TEST(!p.has_root_directory());
+    BOOST_TEST(!p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(!p.has_parent_path());
+    BOOST_TEST(!p.is_absolute());
+
+    p = q = path("//net/");
+    BOOST_TEST(p.relative_path().string() == "");
+    BOOST_TEST(p.parent_path().string() == "//net");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    BOOST_TEST(p.filename() == "/");
+    BOOST_TEST(p.root_name() == "//net");
+    BOOST_TEST(p.root_directory() == "/");
+    BOOST_TEST(p.root_path().string() == "//net/");
+    BOOST_TEST(p.has_root_path());
+    BOOST_TEST(p.has_root_name());
+    BOOST_TEST(p.has_root_directory());
+    BOOST_TEST(!p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_parent_path());
+    BOOST_TEST(p.is_absolute());
+
+    p = q = path("//net/foo");
+    BOOST_TEST(p.relative_path().string() == "foo");
+    BOOST_TEST(p.parent_path().string() == "//net/");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    BOOST_TEST(p.filename() == "foo");
+    BOOST_TEST(p.root_name() == "//net");
+    BOOST_TEST(p.root_directory() == "/");
+    BOOST_TEST(p.root_path().string() == "//net/");
+    BOOST_TEST(p.has_root_path());
+    BOOST_TEST(p.has_root_name());
+    BOOST_TEST(p.has_root_directory());
+    BOOST_TEST(p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_parent_path());
+    BOOST_TEST(p.is_absolute());
+
+    p = q = path("//net///foo");
+    PATH_TEST_EQ(p.relative_path().string(), "foo");
+    PATH_TEST_EQ(p.parent_path().string(), "//net/");
+    PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+    PATH_TEST_EQ(p.filename(), "foo");
+    PATH_TEST_EQ(p.root_name(), "//net");
+    PATH_TEST_EQ(p.root_directory(), "/");
+    PATH_TEST_EQ(p.root_path().string(), "//net/");
+    BOOST_TEST(p.has_root_path());
+    BOOST_TEST(p.has_root_name());
+    BOOST_TEST(p.has_root_directory());
+    BOOST_TEST(p.has_relative_path());
+    BOOST_TEST(p.has_filename());
+    BOOST_TEST(p.has_parent_path());
+    BOOST_TEST(p.is_absolute());
+
+    //  ticket 2739, infinite recursion leading to stack overflow, was caused
+    //  by failure to handle this case correctly on Windows.
+    p = path(":"); 
+    PATH_TEST_EQ(p.parent_path().string(), "");
+    PATH_TEST_EQ(p.filename(), ":");
+    BOOST_TEST(!p.has_parent_path());
+    BOOST_TEST(p.has_filename());
+
+    //  test some similar cases that both POSIX and Windows should handle identically
+    p = path("c:"); 
+    PATH_TEST_EQ(p.parent_path().string(), "");
+    PATH_TEST_EQ(p.filename(), "c:");
+    BOOST_TEST(!p.has_parent_path());
+    BOOST_TEST(p.has_filename());
+    p = path("cc:"); 
+    PATH_TEST_EQ(p.parent_path().string(), "");
+    PATH_TEST_EQ(p.filename(), "cc:");
+    BOOST_TEST(!p.has_parent_path());
+    BOOST_TEST(p.has_filename());
+ 
+    //  Windows specific tests
+    if (platform == "Windows")
+    {
+ 
+      //p = q = L"\\\\?\\";
+      //BOOST_TEST(p.relative_path().string() == "");
+      //BOOST_TEST(p.parent_path().string() == "");
+      //PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+      //BOOST_TEST(p.filename() == "");
+      //BOOST_TEST(p.stem() == "");
+      //BOOST_TEST(p.extension() == "");
+      //BOOST_TEST(p.root_name() == "");
+      //BOOST_TEST(p.root_directory() == "");
+      //BOOST_TEST(p.root_path().string() == "");
+      //BOOST_TEST(!p.has_root_path());
+      //BOOST_TEST(!p.has_root_name());
+      //BOOST_TEST(!p.has_root_directory());
+      //BOOST_TEST(!p.has_relative_path());
+      //BOOST_TEST(!p.has_filename());
+      //BOOST_TEST(!p.has_stem());
+      //BOOST_TEST(!p.has_extension());
+      //BOOST_TEST(!p.has_parent_path());
+      //BOOST_TEST(!p.is_absolute());
+
+      p = q = path("c:");
+      BOOST_TEST(p.relative_path().string() == "");
+      BOOST_TEST(p.parent_path().string() == "");
+      PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+      BOOST_TEST(p.filename() == "c:");
+      BOOST_TEST(p.root_name() == "c:");
+      BOOST_TEST(p.root_directory() == "");
+      BOOST_TEST(p.root_path().string() == "c:");
+      BOOST_TEST(p.has_root_path());
+      BOOST_TEST(p.has_root_name());
+      BOOST_TEST(!p.has_root_directory());
+      BOOST_TEST(!p.has_relative_path());
+      BOOST_TEST(p.has_filename());
+      BOOST_TEST(!p.has_parent_path());
+      BOOST_TEST(!p.is_absolute());
+ 
+      //p = q = path(L"\\\\?\\c:");
+      //BOOST_TEST(p.relative_path().string() == "");
+      //BOOST_TEST(p.parent_path().string() == "");
+      //PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+      //BOOST_TEST(p.filename() == "c:");
+      //BOOST_TEST(p.root_name() == "c:");
+      //BOOST_TEST(p.root_directory() == "");
+      //BOOST_TEST(p.root_path().string() == "c:");
+      //BOOST_TEST(p.has_root_path());
+      //BOOST_TEST(p.has_root_name());
+      //BOOST_TEST(!p.has_root_directory());
+      //BOOST_TEST(!p.has_relative_path());
+      //BOOST_TEST(p.has_filename());
+      //BOOST_TEST(!p.has_parent_path());
+      //BOOST_TEST(!p.is_absolute());
+
+      p = q = path("c:foo");
+      BOOST_TEST(p.relative_path().string() == "foo");
+      BOOST_TEST(p.parent_path().string() == "c:");
+      PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+      BOOST_TEST(p.filename() == "foo");
+      BOOST_TEST(p.root_name() == "c:");
+      BOOST_TEST(p.root_directory() == "");
+      BOOST_TEST(p.root_path().string() == "c:");
+      BOOST_TEST(p.has_root_path());
+      BOOST_TEST(p.has_root_name());
+      BOOST_TEST(!p.has_root_directory());
+      BOOST_TEST(p.has_relative_path());
+      BOOST_TEST(p.has_filename());
+      BOOST_TEST(p.has_parent_path());
+      BOOST_TEST(!p.is_absolute());
+
+      //p = q = path(L"\\\\?\\c:foo");
+      //BOOST_TEST(p.relative_path().string() == "foo");
+      //BOOST_TEST(p.parent_path().string() == "c:");
+      //PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+      //BOOST_TEST(p.filename() == "foo");
+      //BOOST_TEST(p.root_name() == "c:");
+      //BOOST_TEST(p.root_directory() == "");
+      //BOOST_TEST(p.root_path().string() == "c:");
+      //BOOST_TEST(p.has_root_path());
+      //BOOST_TEST(p.has_root_name());
+      //BOOST_TEST(!p.has_root_directory());
+      //BOOST_TEST(p.has_relative_path());
+      //BOOST_TEST(p.has_filename());
+      //BOOST_TEST(p.has_parent_path());
+      //BOOST_TEST(!p.is_absolute());
+   
+      p = q = path("c:/");
+      BOOST_TEST(p.relative_path().string() == "");
+      BOOST_TEST(p.parent_path().string() == "c:");
+      PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+      BOOST_TEST(p.filename() == "/");
+      BOOST_TEST(p.root_name() == "c:");
+      BOOST_TEST(p.root_directory() == "/");
+      BOOST_TEST(p.root_path().string() == "c:/");
+      BOOST_TEST(p.has_root_path());
+      BOOST_TEST(p.has_root_name());
+      BOOST_TEST(p.has_root_directory());
+      BOOST_TEST(!p.has_relative_path());
+      BOOST_TEST(p.has_filename());
+      BOOST_TEST(p.has_parent_path());
+      BOOST_TEST(p.is_absolute());
+
+      p = q = path("c:..");
+      BOOST_TEST(p.relative_path().string() == "..");
+      BOOST_TEST(p.parent_path().string() == "c:");
+      PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+      BOOST_TEST(p.filename() == "..");
+      BOOST_TEST(p.root_name() == "c:");
+      BOOST_TEST(p.root_directory() == "");
+      BOOST_TEST(p.root_path().string() == "c:");
+      BOOST_TEST(p.has_root_path());
+      BOOST_TEST(p.has_root_name());
+      BOOST_TEST(!p.has_root_directory());
+      BOOST_TEST(p.has_relative_path());
+      BOOST_TEST(p.has_filename());
+      BOOST_TEST(p.has_parent_path());
+      BOOST_TEST(!p.is_absolute());
+
+      p = q = path("c:/foo");
+      PATH_TEST_EQ(p.relative_path().string(), "foo");
+      PATH_TEST_EQ(p.parent_path().string(), "c:/");
+      PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+      PATH_TEST_EQ(p.filename(), "foo");
+      PATH_TEST_EQ(p.root_name(), "c:");
+      PATH_TEST_EQ(p.root_directory(), "/");
+      PATH_TEST_EQ(p.root_path().string(), "c:/");
+      BOOST_TEST(p.has_root_path());
+      BOOST_TEST(p.has_root_name());
+      BOOST_TEST(p.has_root_directory());
+      BOOST_TEST(p.has_relative_path());
+      BOOST_TEST(p.has_filename());
+      BOOST_TEST(p.has_parent_path());
+      BOOST_TEST(p.is_absolute());
+
+      p = q = path("c://foo");
+      PATH_TEST_EQ(p.relative_path().string(), "foo");
+      PATH_TEST_EQ(p.parent_path().string(), "c:/");
+      PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+      PATH_TEST_EQ(p.filename(), "foo");
+      PATH_TEST_EQ(p.root_name(), "c:");
+      PATH_TEST_EQ(p.root_directory(), "/");
+      PATH_TEST_EQ(p.root_path().string(), "c:/");
+      BOOST_TEST(p.has_root_path());
+      BOOST_TEST(p.has_root_name());
+      BOOST_TEST(p.has_root_directory());
+      BOOST_TEST(p.has_relative_path());
+      BOOST_TEST(p.has_filename());
+      BOOST_TEST(p.has_parent_path());
+      BOOST_TEST(p.is_absolute());
+
+      p = q = path("c:\\foo\\bar");
+      PATH_TEST_EQ(p.relative_path().string(), "foo\\bar");
+      PATH_TEST_EQ(p.parent_path().string(), "c:\\foo");
+      PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+      PATH_TEST_EQ(p.filename(), "bar");
+      PATH_TEST_EQ(p.root_name(), "c:");
+      PATH_TEST_EQ(p.root_directory(), "\\");
+      PATH_TEST_EQ(p.root_path().string(), "c:\\");
+      BOOST_TEST(p.has_root_path());
+      BOOST_TEST(p.has_root_name());
+      BOOST_TEST(p.has_root_directory());
+      BOOST_TEST(p.has_relative_path());
+      BOOST_TEST(p.has_filename());
+      BOOST_TEST(p.has_parent_path());
+      BOOST_TEST(p.is_absolute());
+
+      p = q = path("prn:");
+      BOOST_TEST(p.relative_path().string() == "");
+      BOOST_TEST(p.parent_path().string() == "");
+      PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+      BOOST_TEST(p.filename() == "prn:");
+      BOOST_TEST(p.root_name() == "prn:");
+      BOOST_TEST(p.root_directory() == "");
+      BOOST_TEST(p.root_path().string() == "prn:");
+      BOOST_TEST(p.has_root_path());
+      BOOST_TEST(p.has_root_name());
+      BOOST_TEST(!p.has_root_directory());
+      BOOST_TEST(!p.has_relative_path());
+      BOOST_TEST(p.has_filename());
+      BOOST_TEST(!p.has_parent_path());
+      BOOST_TEST(!p.is_absolute());
+
+      p = q = path("\\\\net\\\\\\foo");
+      PATH_TEST_EQ(p.relative_path().string(), "foo");
+      PATH_TEST_EQ(p.parent_path().string(), "\\\\net\\");
+      PATH_TEST_EQ(q.remove_filename().string(), p.parent_path().string());
+      PATH_TEST_EQ(p.filename(), "foo");
+      PATH_TEST_EQ(p.root_name(), "\\\\net");
+      PATH_TEST_EQ(p.root_directory(), "\\");
+      PATH_TEST_EQ(p.root_path().string(), "\\\\net\\");
+      BOOST_TEST(p.has_root_path());
+      BOOST_TEST(p.has_root_name());
+      BOOST_TEST(p.has_root_directory());
+      BOOST_TEST(p.has_relative_path());
+      BOOST_TEST(p.has_filename());
+      BOOST_TEST(p.has_parent_path());
+      BOOST_TEST(p.is_absolute());
+    } // Windows
+
+    else
+    { // POSIX
+      PATH_TEST_EQ(path("/foo/bar/"), "/foo/bar/");
+      PATH_TEST_EQ(path("//foo//bar//"), "//foo//bar//");
+      PATH_TEST_EQ(path("///foo///bar///"), "///foo///bar///");
+
+      p = path("/usr/local/bin:/usr/bin:/bin");
+      BOOST_TEST(p.string() == "/usr/local/bin:/usr/bin:/bin");
+    } // POSIX
+  }
+
+ //  composition_tests  ----------------------------------------------------------------//
+
+  void composition_tests()
+  {
+    std::cout << "composition_tests..." << std::endl;
+
+  }
+
+ //  construction_tests  ---------------------------------------------------------------//
+
+  void construction_tests()
+  {
+    std::cout << "construction_tests..." << std::endl;
+
+    PATH_TEST_EQ("", "");
+
+    PATH_TEST_EQ("foo", "foo");
+    PATH_TEST_EQ("f", "f");
+
+    PATH_TEST_EQ("foo/", "foo/");
+    PATH_TEST_EQ("f/", "f/");
+    PATH_TEST_EQ("foo/..", "foo/..");
+    PATH_TEST_EQ("foo/../", "foo/../");
+    PATH_TEST_EQ("foo/bar/../..", "foo/bar/../..");
+    PATH_TEST_EQ("foo/bar/../../", "foo/bar/../../");
+    PATH_TEST_EQ("/", "/");
+    PATH_TEST_EQ("/f", "/f");
+
+    PATH_TEST_EQ("/foo", "/foo");
+    PATH_TEST_EQ("/foo/bar/", "/foo/bar/");
+    PATH_TEST_EQ("//foo//bar//", "//foo//bar//");
+    PATH_TEST_EQ("///foo///bar///", "///foo///bar///");
+    PATH_TEST_EQ("\\/foo\\/bar\\/", "\\/foo\\/bar\\/");
+    PATH_TEST_EQ("\\//foo\\//bar\\//", "\\//foo\\//bar\\//");
+
+    if (platform == "Windows")
+    {
+      PATH_TEST_EQ(path("c:") / "foo", "c:foo");
+      PATH_TEST_EQ(path("c:") / "/foo", "c:/foo");
+
+      PATH_TEST_EQ("\\foo\\bar\\", "\\foo\\bar\\");
+      PATH_TEST_EQ("\\\\foo\\\\bar\\\\", "\\\\foo\\\\bar\\\\");
+      PATH_TEST_EQ("\\\\\\foo\\\\\\bar\\\\\\", "\\\\\\foo\\\\\\bar\\\\\\");
+
+      PATH_TEST_EQ("\\", "\\");
+      PATH_TEST_EQ("\\f", "\\f");
+      PATH_TEST_EQ("\\foo", "\\foo");
+      PATH_TEST_EQ("foo\\bar", "foo\\bar");
+      PATH_TEST_EQ("foo bar", "foo bar");
+      PATH_TEST_EQ("c:", "c:");
+      PATH_TEST_EQ("c:/", "c:/");
+      PATH_TEST_EQ("c:.", "c:.");
+      PATH_TEST_EQ("c:./foo", "c:./foo");
+      PATH_TEST_EQ("c:.\\foo", "c:.\\foo");
+      PATH_TEST_EQ("c:..", "c:..");
+      PATH_TEST_EQ("c:/.", "c:/.");
+      PATH_TEST_EQ("c:/..", "c:/..");
+      PATH_TEST_EQ("c:/../", "c:/../");
+      PATH_TEST_EQ("c:\\..\\", "c:\\..\\");
+      PATH_TEST_EQ("c:/../..", "c:/../..");
+      PATH_TEST_EQ("c:/../foo", "c:/../foo");
+      PATH_TEST_EQ("c:\\..\\foo", "c:\\..\\foo");
+      PATH_TEST_EQ("c:../foo", "c:../foo");
+      PATH_TEST_EQ("c:..\\foo", "c:..\\foo");
+      PATH_TEST_EQ("c:/../../foo", "c:/../../foo");
+      PATH_TEST_EQ("c:\\..\\..\\foo", "c:\\..\\..\\foo");
+      PATH_TEST_EQ("c:foo/..", "c:foo/..");
+      PATH_TEST_EQ("c:/foo/..", "c:/foo/..");
+      PATH_TEST_EQ("c:/..foo", "c:/..foo");
+      PATH_TEST_EQ("c:foo", "c:foo");
+      PATH_TEST_EQ("c:/foo", "c:/foo");
+      PATH_TEST_EQ("\\\\netname", "\\\\netname");
+      PATH_TEST_EQ("\\\\netname\\", "\\\\netname\\");
+      PATH_TEST_EQ("\\\\netname\\foo", "\\\\netname\\foo");
+      PATH_TEST_EQ("c:/foo", "c:/foo");
+      PATH_TEST_EQ("prn:", "prn:");
+    }
+    else
+    {
+    }
+
+    PATH_TEST_EQ("foo/bar", "foo/bar");
+    PATH_TEST_EQ("a/b", "a/b");  // probe for length effects
+    PATH_TEST_EQ("..", "..");
+    PATH_TEST_EQ("../..", "../..");
+    PATH_TEST_EQ("/..", "/..");
+    PATH_TEST_EQ("/../..", "/../..");
+    PATH_TEST_EQ("../foo", "../foo");
+    PATH_TEST_EQ("foo/..", "foo/..");
+    PATH_TEST_EQ("foo/..bar", "foo/..bar");
+    PATH_TEST_EQ("../f", "../f");
+    PATH_TEST_EQ("/../f", "/../f");
+    PATH_TEST_EQ("f/..", "f/..");
+    PATH_TEST_EQ("foo/../..", "foo/../..");
+    PATH_TEST_EQ("foo/../../..", "foo/../../..");
+    PATH_TEST_EQ("foo/../bar", "foo/../bar");
+    PATH_TEST_EQ("foo/bar/..", "foo/bar/..");
+    PATH_TEST_EQ("foo/bar/../..", "foo/bar/../..");
+    PATH_TEST_EQ("foo/bar/../blah", "foo/bar/../blah");
+    PATH_TEST_EQ("f/../b", "f/../b");
+    PATH_TEST_EQ("f/b/..", "f/b/..");
+    PATH_TEST_EQ("f/b/../a", "f/b/../a");
+    PATH_TEST_EQ("foo/bar/blah/../..", "foo/bar/blah/../..");
+    PATH_TEST_EQ("foo/bar/blah/../../bletch", "foo/bar/blah/../../bletch");
+    PATH_TEST_EQ("...", "...");
+    PATH_TEST_EQ("....", "....");
+    PATH_TEST_EQ("foo/...", "foo/...");
+    PATH_TEST_EQ("abc.", "abc.");
+    PATH_TEST_EQ("abc..", "abc..");
+    PATH_TEST_EQ("foo/abc.", "foo/abc.");
+    PATH_TEST_EQ("foo/abc..", "foo/abc..");
+
+    PATH_TEST_EQ(".abc", ".abc");
+    PATH_TEST_EQ("a.c", "a.c");
+    PATH_TEST_EQ("..abc", "..abc");
+    PATH_TEST_EQ("a..c", "a..c");
+    PATH_TEST_EQ("foo/.abc", "foo/.abc");
+    PATH_TEST_EQ("foo/a.c", "foo/a.c");
+    PATH_TEST_EQ("foo/..abc", "foo/..abc");
+    PATH_TEST_EQ("foo/a..c", "foo/a..c");
+
+    PATH_TEST_EQ(".", ".");
+    PATH_TEST_EQ("./foo", "./foo");
+    PATH_TEST_EQ("./..", "./..");
+    PATH_TEST_EQ("./../foo", "./../foo");
+    PATH_TEST_EQ("foo/.", "foo/.");
+    PATH_TEST_EQ("../.", "../.");
+    PATH_TEST_EQ("./.", "./.");
+    PATH_TEST_EQ("././.", "././.");
+    PATH_TEST_EQ("./foo/.", "./foo/.");
+    PATH_TEST_EQ("foo/./bar", "foo/./bar");
+    PATH_TEST_EQ("foo/./.", "foo/./.");
+    PATH_TEST_EQ("foo/./..", "foo/./..");
+    PATH_TEST_EQ("foo/./../bar", "foo/./../bar");
+    PATH_TEST_EQ("foo/../.", "foo/../.");
+    PATH_TEST_EQ("././..", "././..");
+    PATH_TEST_EQ("./../.", "./../.");
+    PATH_TEST_EQ(".././.", ".././.");
+  }
+
+  //  append_tests  --------------------------------------------------------------------//
+
+  void append_test_aux(const path & p, const std::string & s, const std::string & expect)
+  {
+    PATH_TEST_EQ((p / path(s)).string(), expect);
+    PATH_TEST_EQ((p / s.c_str()).string(), expect);
+    PATH_TEST_EQ((p / s).string(), expect);
+    path x(p);
+    x.append(s.begin(), s.end());
+    PATH_TEST_EQ(x.string(), expect);
+  }
+
+  void append_tests()
+  {
+    std::cout << "append_tests..." << std::endl;
+
+    // There are many control paths to be exercised, since empty paths and arguments,
+    // paths with trailing separators, arguments with leading separators, with or without
+    // other characters being present, are all separate cases that need to be tested.
+    // Furthermore, some of the code to be tested is specific to argument categories,
+    // so that results in further permutations to be tested.
+
+    //// code to generate test cases
+    //// 
+    //// expected results must be checked by hand
+    //// "foo\bar" expected result must be edited by hand and moved for Windows/POSIX
+    ////
+    //const char* x[]    = { "", "/", "foo", "foo/" };
+    //const char* y[] = { "", "/", "bar", "/bar" };
+
+    //for (int i = 0; i < sizeof(x)/sizeof(char*); ++i)
+    //  for (int j = 0; j < sizeof(y)/sizeof(char*); ++j)
+    //  {
+    //    std::cout << "\n    PATH_TEST_EQ(path(\"" << x[i] << "\") / \"" << y[j] << "\", \"" 
+    //              << path(x[i]) / y[j] << "\");\n";
+    //    std::cout << "    append_test_aux(\"" << x[i] << "\", \"" << y[j] << "\", \""
+    //              << path(x[i]) / y[j] << "\");\n";
+    //  }
+
+    PATH_TEST_EQ(path("") / "", "");
+    append_test_aux("", "", "");
+
+    PATH_TEST_EQ(path("") / "/", "/");
+    append_test_aux("", "/", "/");
+
+    PATH_TEST_EQ(path("") / "bar", "bar");
+    append_test_aux("", "bar", "bar");
+
+    PATH_TEST_EQ(path("") / "/bar", "/bar");
+    append_test_aux("", "/bar", "/bar");
+
+    PATH_TEST_EQ(path("/") / "", "/");
+    append_test_aux("/", "", "/");
+
+    PATH_TEST_EQ(path("/") / "/", "//");
+    append_test_aux("/", "/", "//");
+
+    PATH_TEST_EQ(path("/") / "bar", "/bar");
+    append_test_aux("/", "bar", "/bar");
+
+    PATH_TEST_EQ(path("/") / "/bar", "//bar");
+    append_test_aux("/", "/bar", "//bar");
+
+    PATH_TEST_EQ(path("foo") / "", "foo");
+    append_test_aux("foo", "", "foo");
+
+    PATH_TEST_EQ(path("foo") / "/", "foo/");
+    append_test_aux("foo", "/", "foo/");
+
+    PATH_TEST_EQ(path("foo") / "/bar", "foo/bar");
+    append_test_aux("foo", "/bar", "foo/bar");
+
+    PATH_TEST_EQ(path("foo/") / "", "foo/");
+    append_test_aux("foo/", "", "foo/");
+
+    PATH_TEST_EQ(path("foo/") / "/", "foo//");
+    append_test_aux("foo/", "/", "foo//");
+
+    PATH_TEST_EQ(path("foo/") / "bar", "foo/bar");
+    append_test_aux("foo/", "bar", "foo/bar");
+
+
+    if (platform == "Windows")
+    {
+      PATH_TEST_EQ(path("foo") / "bar", "foo\\bar");
+      append_test_aux("foo", "bar", "foo\\bar");
+
+      PATH_TEST_EQ(path("foo\\") / "\\bar", "foo\\\\bar");
+      append_test_aux("foo\\", "\\bar", "foo\\\\bar");
+
+      // hand created test case specific to Windows
+      PATH_TEST_EQ(path("c:") / "bar", "c:bar");
+      append_test_aux("c:", "bar", "c:bar");
+    }
+    else
+    {
+      PATH_TEST_EQ(path("foo") / "bar", "foo/bar");
+      append_test_aux("foo", "bar", "foo/bar");
+    }
+
+    // ticket #6819
+    union
+    {
+      char a[1];
+      char b[3];
+    } u;
+
+    u.b[0] = 'a';
+    u.b[1] = 'b';
+    u.b[2] = '\0';
+
+    path p6819;
+    p6819 /= u.a;
+    BOOST_TEST_EQ(p6819, path("ab"));
+  }
+
+//  self_assign_and_append_tests  ------------------------------------------------------//
+
+  void self_assign_and_append_tests()
+  {
+    std::cout << "self_assign_and_append_tests..." << std::endl;
+
+    path p;
+
+    p = "snafubar";
+    PATH_TEST_EQ(p = p, "snafubar");
+
+    p = "snafubar";
+    p = p.c_str();
+    PATH_TEST_EQ(p, "snafubar");
+
+    p = "snafubar";
+    p.assign(p.c_str(), path::codecvt());
+    PATH_TEST_EQ(p, "snafubar");  
+
+    p = "snafubar";
+    PATH_TEST_EQ(p = p.c_str()+5, "bar");
+
+    p = "snafubar";
+    PATH_TEST_EQ(p.assign(p.c_str() + 5, p.c_str() + 7), "ba");
+
+    p = "snafubar";
+    p /= p;
+    PATH_TEST_EQ(p, "snafubar" BOOST_DIR_SEP "snafubar");
+
+    p = "snafubar";
+    p /= p.c_str();
+    PATH_TEST_EQ(p, "snafubar" BOOST_DIR_SEP "snafubar");  
+
+    p = "snafubar";
+    p.append(p.c_str(), path::codecvt());
+    PATH_TEST_EQ(p, "snafubar" BOOST_DIR_SEP "snafubar"); 
+
+    p = "snafubar";
+    PATH_TEST_EQ(p.append(p.c_str() + 5, p.c_str() + 7), "snafubar" BOOST_DIR_SEP "ba");
+  }
+
+
+  //  name_function_tests  -------------------------------------------------------------//
+
+  void name_function_tests()
+  {
+    std::cout << "name_function_tests..." << std::endl;
+
+    BOOST_TEST(fs::portable_posix_name(std::string("x")));
+    BOOST_TEST(fs::windows_name(std::string("x")));
+    BOOST_TEST(fs::portable_name(std::string("x")));
+    BOOST_TEST(fs::portable_directory_name(std::string("x")));
+    BOOST_TEST(fs::portable_file_name(std::string("x")));
+
+    BOOST_TEST(fs::portable_posix_name(std::string(".")));
+    BOOST_TEST(fs::windows_name(std::string(".")));
+    BOOST_TEST(fs::portable_name(std::string(".")));
+    BOOST_TEST(fs::portable_directory_name(std::string(".")));
+    BOOST_TEST(!fs::portable_file_name(std::string(".")));
+
+    BOOST_TEST(fs::portable_posix_name(std::string("..")));
+    BOOST_TEST(fs::windows_name(std::string("..")));
+    BOOST_TEST(fs::portable_name(std::string("..")));
+    BOOST_TEST(fs::portable_directory_name(std::string("..")));
+    BOOST_TEST(!fs::portable_file_name(std::string("..")));
+
+    BOOST_TEST(!fs::native(std::string("")));
+    BOOST_TEST(!fs::portable_posix_name(std::string("")));
+    BOOST_TEST(!fs::windows_name(std::string("")));
+    BOOST_TEST(!fs::portable_name(std::string("")));
+    BOOST_TEST(!fs::portable_directory_name(std::string("")));
+    BOOST_TEST(!fs::portable_file_name(std::string("")));
+
+    BOOST_TEST(!fs::native(std::string(" ")));
+    BOOST_TEST(!fs::portable_posix_name(std::string(" ")));
+    BOOST_TEST(!fs::windows_name(std::string(" ")));
+    BOOST_TEST(!fs::portable_name(std::string(" ")));
+    BOOST_TEST(!fs::portable_directory_name(std::string(" ")));
+    BOOST_TEST(!fs::portable_file_name(std::string(" ")));
+
+    BOOST_TEST(!fs::portable_posix_name(std::string(":")));
+    BOOST_TEST(!fs::windows_name(std::string(":")));
+    BOOST_TEST(!fs::portable_name(std::string(":")));
+    BOOST_TEST(!fs::portable_directory_name(std::string(":")));
+    BOOST_TEST(!fs::portable_file_name(std::string(":")));
+
+    BOOST_TEST(fs::portable_posix_name(std::string("-")));
+    BOOST_TEST(fs::windows_name(std::string("-")));
+    BOOST_TEST(!fs::portable_name(std::string("-")));
+    BOOST_TEST(!fs::portable_directory_name(std::string("-")));
+    BOOST_TEST(!fs::portable_file_name(std::string("-")));
+
+    BOOST_TEST(!fs::portable_posix_name(std::string("foo bar")));
+    BOOST_TEST(fs::windows_name(std::string("foo bar")));
+    BOOST_TEST(!fs::windows_name(std::string(" bar")));
+    BOOST_TEST(!fs::windows_name(std::string("foo ")));
+    BOOST_TEST(!fs::portable_name(std::string("foo bar")));
+    BOOST_TEST(!fs::portable_directory_name(std::string("foo bar")));
+    BOOST_TEST(!fs::portable_file_name(std::string("foo bar")));
+
+    BOOST_TEST(fs::portable_posix_name(std::string("foo.bar")));
+    BOOST_TEST(fs::windows_name(std::string("foo.bar")));
+    BOOST_TEST(fs::portable_name(std::string("foo.bar")));
+    BOOST_TEST(!fs::portable_directory_name(std::string("foo.bar")));
+    BOOST_TEST(fs::portable_file_name(std::string("foo.bar")));
+
+    BOOST_TEST(fs::portable_posix_name(std::string("foo.barf")));
+    BOOST_TEST(fs::windows_name(std::string("foo.barf")));
+    BOOST_TEST(fs::portable_name(std::string("foo.barf")));
+    BOOST_TEST(!fs::portable_directory_name(std::string("foo.barf")));
+    BOOST_TEST(!fs::portable_file_name(std::string("foo.barf")));
+
+    BOOST_TEST(fs::portable_posix_name(std::string(".foo")));
+    BOOST_TEST(fs::windows_name(std::string(".foo")));
+    BOOST_TEST(!fs::portable_name(std::string(".foo")));
+    BOOST_TEST(!fs::portable_directory_name(std::string(".foo")));
+    BOOST_TEST(!fs::portable_file_name(std::string(".foo")));
+
+    BOOST_TEST(fs::portable_posix_name(std::string("foo.")));
+    BOOST_TEST(!fs::windows_name(std::string("foo.")));
+    BOOST_TEST(!fs::portable_name(std::string("foo.")));
+    BOOST_TEST(!fs::portable_directory_name(std::string("foo.")));
+    BOOST_TEST(!fs::portable_file_name(std::string("foo.")));
+  }
+  
+  //  replace_extension_tests  ---------------------------------------------------------//
+
+  void replace_extension_tests()
+  {
+    std::cout << "replace_extension_tests..." << std::endl;
+
+    BOOST_TEST(path().replace_extension().empty());
+    BOOST_TEST(path().replace_extension("a") == ".a");
+    BOOST_TEST(path().replace_extension("a.") == ".a.");
+    BOOST_TEST(path().replace_extension(".a") == ".a");
+    BOOST_TEST(path().replace_extension("a.txt") == ".a.txt");
+    // see the rationale in html docs for explanation why this works:
+    BOOST_TEST(path().replace_extension(".txt") == ".txt");
+
+    BOOST_TEST(path("a.txt").replace_extension() == "a");
+    BOOST_TEST(path("a.txt").replace_extension("") == "a");
+    BOOST_TEST(path("a.txt").replace_extension(".") == "a.");
+    BOOST_TEST(path("a.txt").replace_extension(".tex") == "a.tex");
+    BOOST_TEST(path("a.txt").replace_extension("tex") == "a.tex");
+    BOOST_TEST(path("a.").replace_extension(".tex") == "a.tex");
+    BOOST_TEST(path("a.").replace_extension("tex") == "a.tex");
+    BOOST_TEST(path("a").replace_extension(".txt") == "a.txt");
+    BOOST_TEST(path("a").replace_extension("txt") == "a.txt");
+    BOOST_TEST(path("a.b.txt").replace_extension(".tex") == "a.b.tex");  
+    BOOST_TEST(path("a.b.txt").replace_extension("tex") == "a.b.tex");
+    BOOST_TEST(path("a/b").replace_extension(".c") == "a/b.c");
+    PATH_TEST_EQ(path("a.txt/b").replace_extension(".c"), "a.txt/b.c"); // ticket 4702
+    BOOST_TEST(path("foo.txt").replace_extension("exe") == "foo.exe");  // ticket 5118
+    BOOST_TEST(path("foo.txt").replace_extension(".tar.bz2")
+                                                    == "foo.tar.bz2");  // ticket 5118
+  }
+  
+  //  make_preferred_tests  ------------------------------------------------------------//
+
+  void make_preferred_tests()
+  {
+    std::cout << "make_preferred_tests..." << std::endl;
+
+    if (platform == "Windows")
+    {
+      BOOST_TEST(path("//abc\\def/ghi").make_preferred().native()
+        == path("\\\\abc\\def\\ghi").native());
+    }
+    else
+    {
+      BOOST_TEST(path("//abc\\def/ghi").make_preferred().native()
+        == path("//abc\\def/ghi").native());
+    }
+  }
+
+  //  lexically_normal_tests  ----------------------------------------------------------//
+
+  void lexically_normal_tests()
+  {
+    std::cout << "lexically_normal_tests..." << std::endl;
+
+    //  Note: lexically_lexically_normal() uses /= to build up some results, so these results will
+    //  have the platform's preferred separator. Since that is immaterial to the correct
+    //  functioning of lexically_lexically_normal(), the test results are converted to generic form,
+    //  and the expected results are also given in generic form. Otherwise many of the
+    //  tests would incorrectly be reported as failing on Windows.
+
+    PATH_TEST_EQ(path("").lexically_normal().generic(), "");
+    PATH_TEST_EQ(path("/").lexically_normal().generic(), "/");
+    PATH_TEST_EQ(path("//").lexically_normal().generic(), "//");
+    PATH_TEST_EQ(path("///").lexically_normal().generic(), "/");
+    PATH_TEST_EQ(path("f").lexically_normal().generic(), "f");
+    PATH_TEST_EQ(path("foo").lexically_normal().generic(), "foo");
+    PATH_TEST_EQ(path("foo/").lexically_normal().generic(), "foo/.");
+    PATH_TEST_EQ(path("f/").lexically_normal().generic(), "f/.");
+    PATH_TEST_EQ(path("/foo").lexically_normal().generic(), "/foo");
+    PATH_TEST_EQ(path("foo/bar").lexically_normal().generic(), "foo/bar");
+    PATH_TEST_EQ(path("..").lexically_normal().generic(), "..");
+    PATH_TEST_EQ(path("../..").lexically_normal().generic(), "../..");
+    PATH_TEST_EQ(path("/..").lexically_normal().generic(), "/..");
+    PATH_TEST_EQ(path("/../..").lexically_normal().generic(), "/../..");
+    PATH_TEST_EQ(path("../foo").lexically_normal().generic(), "../foo");
+    PATH_TEST_EQ(path("foo/..").lexically_normal().generic(), ".");
+    PATH_TEST_EQ(path("foo/../").lexically_normal().generic(), "./.");
+    PATH_TEST_EQ((path("foo") / "..").lexically_normal().generic() , ".");
+    PATH_TEST_EQ(path("foo/...").lexically_normal().generic(), "foo/...");
+    PATH_TEST_EQ(path("foo/.../").lexically_normal().generic(), "foo/.../.");
+    PATH_TEST_EQ(path("foo/..bar").lexically_normal().generic(), "foo/..bar");
+    PATH_TEST_EQ(path("../f").lexically_normal().generic(), "../f");
+    PATH_TEST_EQ(path("/../f").lexically_normal().generic(), "/../f");
+    PATH_TEST_EQ(path("f/..").lexically_normal().generic(), ".");
+    PATH_TEST_EQ((path("f") / "..").lexically_normal().generic() , ".");
+    PATH_TEST_EQ(path("foo/../..").lexically_normal().generic(), "..");
+    PATH_TEST_EQ(path("foo/../../").lexically_normal().generic(), "../.");
+    PATH_TEST_EQ(path("foo/../../..").lexically_normal().generic(), "../..");
+    PATH_TEST_EQ(path("foo/../../../").lexically_normal().generic(), "../../.");
+    PATH_TEST_EQ(path("foo/../bar").lexically_normal().generic(), "bar");
+    PATH_TEST_EQ(path("foo/../bar/").lexically_normal().generic(), "bar/.");
+    PATH_TEST_EQ(path("foo/bar/..").lexically_normal().generic(), "foo");
+    PATH_TEST_EQ(path("foo/./bar/..").lexically_normal().generic(), "foo");
+    std::cout << path("foo/./bar/..").lexically_normal() << std::endl;  // outputs "foo"
+    PATH_TEST_EQ(path("foo/bar/../").lexically_normal().generic(), "foo/.");
+    PATH_TEST_EQ(path("foo/./bar/../").lexically_normal().generic(), "foo/.");
+    std::cout << path("foo/./bar/../").lexically_normal() << std::endl;  // POSIX: "foo/.", Windows: "foo\." 
+    PATH_TEST_EQ(path("foo/bar/../..").lexically_normal().generic(), ".");
+    PATH_TEST_EQ(path("foo/bar/../../").lexically_normal().generic(), "./.");
+    PATH_TEST_EQ(path("foo/bar/../blah").lexically_normal().generic(), "foo/blah");
+    PATH_TEST_EQ(path("f/../b").lexically_normal().generic(), "b");
+    PATH_TEST_EQ(path("f/b/..").lexically_normal().generic(), "f");
+    PATH_TEST_EQ(path("f/b/../").lexically_normal().generic(), "f/.");
+    PATH_TEST_EQ(path("f/b/../a").lexically_normal().generic(), "f/a");
+    PATH_TEST_EQ(path("foo/bar/blah/../..").lexically_normal().generic(), "foo");
+    PATH_TEST_EQ(path("foo/bar/blah/../../bletch").lexically_normal().generic(), "foo/bletch");
+    PATH_TEST_EQ(path("//net").lexically_normal().generic(), "//net");
+    PATH_TEST_EQ(path("//net/").lexically_normal().generic(), "//net/");
+    PATH_TEST_EQ(path("//..net").lexically_normal().generic(), "//..net");
+    PATH_TEST_EQ(path("//net/..").lexically_normal().generic(), "//net/..");
+    PATH_TEST_EQ(path("//net/foo").lexically_normal().generic(), "//net/foo");
+    PATH_TEST_EQ(path("//net/foo/").lexically_normal().generic(), "//net/foo/.");
+    PATH_TEST_EQ(path("//net/foo/..").lexically_normal().generic(), "//net/");
+    PATH_TEST_EQ(path("//net/foo/../").lexically_normal().generic(), "//net/.");
+
+    PATH_TEST_EQ(path("/net/foo/bar").lexically_normal().generic(), "/net/foo/bar");
+    PATH_TEST_EQ(path("/net/foo/bar/").lexically_normal().generic(), "/net/foo/bar/.");
+    PATH_TEST_EQ(path("/net/foo/..").lexically_normal().generic(), "/net");
+    PATH_TEST_EQ(path("/net/foo/../").lexically_normal().generic(), "/net/.");
+
+    PATH_TEST_EQ(path("//net//foo//bar").lexically_normal().generic(), "//net/foo/bar");
+    PATH_TEST_EQ(path("//net//foo//bar//").lexically_normal().generic(), "//net/foo/bar/.");
+    PATH_TEST_EQ(path("//net//foo//..").lexically_normal().generic(), "//net/");
+    PATH_TEST_EQ(path("//net//foo//..//").lexically_normal().generic(), "//net/.");
+
+    PATH_TEST_EQ(path("///net///foo///bar").lexically_normal().generic(), "/net/foo/bar");
+    PATH_TEST_EQ(path("///net///foo///bar///").lexically_normal().generic(), "/net/foo/bar/.");
+    PATH_TEST_EQ(path("///net///foo///..").lexically_normal().generic(), "/net");
+    PATH_TEST_EQ(path("///net///foo///..///").lexically_normal().generic(), "/net/.");
+
+    if (platform == "Windows")
+    {
+      PATH_TEST_EQ(path("c:..").lexically_normal().generic(), "c:..");
+      PATH_TEST_EQ(path("c:foo/..").lexically_normal().generic(), "c:");
+
+      PATH_TEST_EQ(path("c:foo/../").lexically_normal().generic(), "c:.");
+
+      PATH_TEST_EQ(path("c:/foo/..").lexically_normal().generic(), "c:/");
+      PATH_TEST_EQ(path("c:/foo/../").lexically_normal().generic(), "c:/.");
+      PATH_TEST_EQ(path("c:/..").lexically_normal().generic(), "c:/..");
+      PATH_TEST_EQ(path("c:/../").lexically_normal().generic(), "c:/../.");
+      PATH_TEST_EQ(path("c:/../..").lexically_normal().generic(), "c:/../..");
+      PATH_TEST_EQ(path("c:/../../").lexically_normal().generic(), "c:/../../.");
+      PATH_TEST_EQ(path("c:/../foo").lexically_normal().generic(), "c:/../foo");
+      PATH_TEST_EQ(path("c:/../foo/").lexically_normal().generic(), "c:/../foo/.");
+      PATH_TEST_EQ(path("c:/../../foo").lexically_normal().generic(), "c:/../../foo");
+      PATH_TEST_EQ(path("c:/../../foo/").lexically_normal().generic(), "c:/../../foo/.");
+      PATH_TEST_EQ(path("c:/..foo").lexically_normal().generic(), "c:/..foo");
+    }
+    else // POSIX
+    {
+      PATH_TEST_EQ(path("c:..").lexically_normal(), "c:..");
+      PATH_TEST_EQ(path("c:foo/..").lexically_normal(), ".");
+      PATH_TEST_EQ(path("c:foo/../").lexically_normal(), "./.");
+      PATH_TEST_EQ(path("c:/foo/..").lexically_normal(), "c:");
+      PATH_TEST_EQ(path("c:/foo/../").lexically_normal(), "c:/.");
+      PATH_TEST_EQ(path("c:/..").lexically_normal(), ".");
+      PATH_TEST_EQ(path("c:/../").lexically_normal(), "./.");
+      PATH_TEST_EQ(path("c:/../..").lexically_normal(), "..");
+      PATH_TEST_EQ(path("c:/../../").lexically_normal(), "../.");
+      PATH_TEST_EQ(path("c:/../foo").lexically_normal(), "foo");
+      PATH_TEST_EQ(path("c:/../foo/").lexically_normal(), "foo/.");
+      PATH_TEST_EQ(path("c:/../../foo").lexically_normal(), "../foo");
+      PATH_TEST_EQ(path("c:/../../foo/").lexically_normal(), "../foo/.");
+      PATH_TEST_EQ(path("c:/..foo").lexically_normal(), "c:/..foo");
+    }
+  }
+
+} // unnamed namespace
+
+static pdalboost::filesystem::path ticket_6737 = "FilePath";  // #6737 reported this crashed
+                                                          // on VC++ debug mode build 
+const pdalboost::filesystem::path ticket_6690("test");  // #6690 another V++ static init crash
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                                     main                                             //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+int cpp_main(int, char*[])
+{
+  // The choice of platform is make at runtime rather than compile-time
+  // so that compile errors for all platforms will be detected even though
+  // only the current platform is runtime tested.
+  platform = (platform == "Win32" || platform == "Win64" || platform == "Cygwin")
+               ? "Windows"
+               : "POSIX";
+  std::cout << "Platform is " << platform << '\n';
+
+  BOOST_TEST(p1.string() != p3.string());
+  p3 = p2;
+  BOOST_TEST(p1.string() == p3.string());
+
+  path p04("foobar");
+  BOOST_TEST(p04.string() == "foobar");
+  p04 = p04; // self-assignment
+  BOOST_TEST(p04.string() == "foobar");
+
+  construction_tests();
+  append_tests();
+  self_assign_and_append_tests();
+  overload_tests();
+  query_and_decomposition_tests();
+  composition_tests();
+  iterator_tests();
+  non_member_tests();
+  exception_tests();
+  name_function_tests();
+  replace_extension_tests();
+  make_preferred_tests();
+  lexically_normal_tests();
+
+  // verify deprecated names still available
+
+# ifndef BOOST_FILESYSTEM_NO_DEPRECATED
+
+  p1.branch_path();
+  p1.leaf();
+  path p_remove_leaf;
+  p_remove_leaf.remove_leaf();
+
+# endif
+
+  std::string s1("//:somestring");  // this used to be treated specially
+
+  // check the path member templates
+  p5.assign(s1.begin(), s1.end());
+
+  PATH_TEST_EQ(p5.string(), "//:somestring");
+  p5 = s1;
+  PATH_TEST_EQ(p5.string(), "//:somestring");
+
+  // this code, courtesy of David Whetstone, detects a now fixed bug that
+  // derefereced the end iterator (assuming debug build with checked itors)
+  std::vector<char> v1;
+  p5.assign(v1.begin(), v1.end());
+  std::string s2(v1.begin(), v1.end());
+  PATH_TEST_EQ(p5.string(), s2);
+  p5.assign(s1.begin(), s1.begin() + 1);
+  PATH_TEST_EQ(p5.string(), "/");
+
+  BOOST_TEST(p1 != p4);
+  BOOST_TEST(p1.string() == p2.string());
+  BOOST_TEST(p1.string() == p3.string());
+  BOOST_TEST(path("foo").filename() == "foo");
+  BOOST_TEST(path("foo").parent_path().string() == "");
+  BOOST_TEST(p1.filename() == "fum");
+  BOOST_TEST(p1.parent_path().string() == "fe/fi/fo");
+  BOOST_TEST(path("").empty() == true);
+  BOOST_TEST(path("foo").empty() == false);
+
+  // inserter and extractor tests
+# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300 // bypass VC++ 7.0 and earlier
+  std::cout << "\nInserter and extractor test...";
+  std::stringstream ss;
+  ss << fs::path("foo/bar") << std::endl;
+  fs::path round_trip;
+  ss >> round_trip;
+  BOOST_TEST(round_trip.string() == "foo/bar");
+  std::cout << round_trip.string() << "..." << round_trip << " complete\n";
+# endif
+
+  return ::pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/path_times.cpp b/vendor/pdalboost/libs/filesystem/test/path_times.cpp
new file mode 100644
index 0000000..63131e7
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/path_times.cpp
@@ -0,0 +1,103 @@
+//  Boost Filesystem path_times.cpp  ---------------------------------------------------//
+
+//  Copyright Beman Dawes 2013
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#include <boost/config/warning_disable.hpp>
+
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED 
+#  define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+#  define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/timer/timer.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/cstdint.hpp>
+
+#include <boost/config.hpp>
+# if defined( BOOST_NO_STD_WSTRING )
+#   error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
+# endif
+
+#include <boost/detail/lightweight_main.hpp>
+
+namespace fs = pdalboost::filesystem;
+using namespace pdalboost::timer;
+
+#include <fstream>
+#include <iostream>
+
+using std::cout;
+using std::endl;
+
+namespace
+{
+  pdalboost::int64_t max_cycles;
+
+  template <class STD_STRING>
+  nanosecond_type time_ctor(const STD_STRING& s)
+  {
+    pdalboost::timer::auto_cpu_timer tmr;
+    pdalboost::int64_t count = 0;
+    do
+    {
+      fs::path p(s);
+      ++count;
+    } while (count < max_cycles);
+
+    pdalboost::timer::cpu_times elapsed = tmr.elapsed();
+    return elapsed.user + elapsed.system;
+  }
+
+  nanosecond_type time_loop()
+  {
+    pdalboost::timer::auto_cpu_timer tmr;
+    pdalboost::int64_t count = 0;
+    do
+    {
+      ++count;
+    } while (count < max_cycles);
+
+    pdalboost::timer::cpu_times elapsed = tmr.elapsed();
+    return elapsed.user + elapsed.system;
+  }
+}  // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+//                                      main                                            //
+//--------------------------------------------------------------------------------------//
+
+int cpp_main(int argc, char* argv[])
+{
+  if (argc != 2)
+  {
+    cout << "Usage: path_times <cycles-in-millions>\n";
+    return 1;
+  }
+
+  max_cycles = std::atoi(argv[1]) * 1000000LL;
+  cout << "testing " << std::atoi(argv[1]) << " million cycles" << endl;
+
+  cout << "time_loop" << endl;
+  nanosecond_type x = time_loop();
+   
+  cout << "time_ctor with string" << endl;
+  nanosecond_type s = time_ctor(std::string("/foo/bar/baz"));
+   
+  cout << "time_ctor with wstring" << endl;
+  nanosecond_type w = time_ctor(std::wstring(L"/foo/bar/baz"));
+
+  if (s > w)
+    cout << "narrow/wide CPU-time ratio = " << long double(s)/w << endl;
+  else
+    cout << "wide/narrow CPU-time ratio = " << long double(w)/s << endl;
+
+  cout << "returning from main()" << endl;
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/path_unit_test.cpp b/vendor/pdalboost/libs/filesystem/test/path_unit_test.cpp
new file mode 100644
index 0000000..44d444c
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/path_unit_test.cpp
@@ -0,0 +1,1177 @@
+//  filesystem path_unit_test.cpp  ---------------------------------------------------  //
+
+//  Copyright Beman Dawes 2008, 2009
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//  ----------------------------------------------------------------------------------  //
+//
+//  The purpose of this test is to ensure that each function in the public
+//  interface can be called with arguments of the appropriate types. It does
+//  not attempt to verify that the full range of values for each argument
+//  are processed correctly.
+//
+//  For full functionality tests, including probes with many different argument
+//  values, see path_test.cpp and other test programs.
+//
+//  ----------------------------------------------------------------------------------  //
+
+#include <boost/config/warning_disable.hpp>
+
+//  See deprecated_test for tests of deprecated features
+#ifndef BOOST_FILESYSTEM_NO_DEPRECATED 
+# define BOOST_FILESYSTEM_NO_DEPRECATED
+#endif
+#ifndef BOOST_SYSTEM_NO_DEPRECATED 
+# define BOOST_SYSTEM_NO_DEPRECATED
+#endif
+
+#include <boost/filesystem/path.hpp>
+
+#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>  // for imbue tests
+#include "test_codecvt.hpp"                                // for codecvt arg tests
+#include <boost/detail/lightweight_test_report.hpp>
+#include <boost/smart_ptr.hpp>  // used constructor tests
+#include <boost/functional/hash.hpp>
+
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <string>
+#include <cstring>
+#include <cwchar>
+#include <locale>
+#include <list>
+
+namespace fs = pdalboost::filesystem;
+namespace bs = pdalboost::system;
+using pdalboost::filesystem::path;
+using std::cout;
+using std::endl;
+using std::string;
+using std::wstring;
+
+#define CHECK(x) check(x, __FILE__, __LINE__)
+#define PATH_IS(a, b) check_path(a, b, __FILE__, __LINE__)
+#define NATIVE_IS(p, s, ws) check_native(p, s, ws, __FILE__, __LINE__)
+#define IS(a,b) check_equal(a, b, __FILE__, __LINE__)
+
+#if defined(_MSC_VER)
+# pragma warning(push) // Save warning settings.
+# pragma warning(disable : 4428) // Disable universal-character-name encountered in source warning.
+#endif
+
+namespace
+{
+
+  pdalboost::system::error_code ec;
+  const pdalboost::system::error_code ok;
+  const pdalboost::system::error_code ng(-1, pdalboost::system::system_category());
+
+  std::string platform(BOOST_PLATFORM);
+
+  void check_path(const path& source,
+              const wstring& expected, const char* file, int line)
+  {
+    if (source == expected) return;
+
+    ++::pdalboost::detail::test_errors();
+
+    std::cout << file;
+    std::wcout << L'(' << line << L"): source.wstring(): \""
+               << source.wstring()
+               << L"\" != expected: \"" << expected
+               << L"\"\n" ;
+  }
+
+# ifdef BOOST_WINDOWS_API
+  void check_native(const path& p,
+    const string&, const wstring& expected, const char* file, int line)
+# else
+  void check_native(const path& p,
+    const string& expected, const wstring&, const char* file, int line)
+# endif
+  {
+    if (p.native() == expected) return;
+
+    ++::pdalboost::detail::test_errors();
+
+    std::cout << file  << '(' << line << "): native() is not equal expected\n"
+      "  native---: " << std::hex;
+    path::string_type nat(p.native());
+    for (path::string_type::const_iterator it = nat.begin(); it != nat.end(); ++it)
+      std::cout << long(*it) << ' ';
+    std::cout << "\n  expected-: ";
+    for (path::string_type::const_iterator it = expected.begin(); it != expected.end(); ++it)
+      std::cout << long(*it) << ' ';
+    std::cout << std::dec << std::endl;
+  }
+
+  template< class T1, class T2 >
+  void check_equal(const T1& value,
+                    const T2& expected, const char* file, int line)
+  {
+    if (value == expected) return;
+
+    ++::pdalboost::detail::test_errors();
+
+    std::cout << file;
+
+    std::wcout << L'(' << line << L"): value: \"" << value
+               << L"\" != expected: \"" << expected
+               << L"\"\n" ;
+  }
+
+  void check(bool ok_, const char* file, int line)
+  {
+    if (ok_) return;
+
+    ++::pdalboost::detail::test_errors();
+
+    std::cout << file << '(' << line << "): test failed\n";
+  }
+
+  string s("string");
+  wstring ws(L"wstring");
+  std::list<char> l;      // see main() for initialization to s, t, r, i, n, g
+  std::list<wchar_t> wl;  // see main() for initialization to w, s, t, r, i, n, g
+  std::vector<char> v;      // see main() for initialization to f, u, z
+  std::vector<wchar_t> wv;  // see main() for initialization to w, f, u, z
+
+  class Base {};
+  class Derived : public Base {};
+  void fun(const pdalboost::shared_ptr< Base >&) {}
+
+  //  test_constructors  ---------------------------------------------------------------//
+
+  void test_constructors()
+  {
+    std::cout << "testing constructors..." << std::endl;
+
+    path x0;                                           // default constructor
+    PATH_IS(x0, L"");
+    BOOST_TEST_EQ(x0.native().size(), 0U);
+
+    path x1(l.begin(), l.end());                       // iterator range char
+    PATH_IS(x1, L"string");
+    BOOST_TEST_EQ(x1.native().size(), 6U);
+
+    path x2(x1);                                       // copy constructor
+    PATH_IS(x2, L"string");
+    BOOST_TEST_EQ(x2.native().size(), 6U);
+
+    path x3(wl.begin(), wl.end());                     // iterator range wchar_t
+    PATH_IS(x3, L"wstring");
+    BOOST_TEST_EQ(x3.native().size(), 7U);
+
+    // contiguous containers
+    path x4(string("std::string"));                    // std::string
+    PATH_IS(x4, L"std::string");
+    BOOST_TEST_EQ(x4.native().size(), 11U);
+
+    path x5(wstring(L"std::wstring"));                 // std::wstring
+    PATH_IS(x5, L"std::wstring");
+    BOOST_TEST_EQ(x5.native().size(), 12U);
+
+    path x4v(v);                                       // std::vector<char>
+    PATH_IS(x4v, L"fuz");
+    BOOST_TEST_EQ(x4v.native().size(), 3U);
+
+    path x5v(wv);                                      // std::vector<wchar_t>
+    PATH_IS(x5v, L"wfuz");
+    BOOST_TEST_EQ(x5v.native().size(), 4U);
+
+    path x6("array char");                             // array char
+    PATH_IS(x6, L"array char");
+    BOOST_TEST_EQ(x6.native().size(), 10U);
+
+    path x7(L"array wchar_t");                         // array wchar_t
+    PATH_IS(x7, L"array wchar_t");
+    BOOST_TEST_EQ(x7.native().size(), 13U);
+
+    char char_array[100];
+    std::strcpy(char_array, "big array char");
+    path x6o(char_array);                              // array char, only partially full
+    PATH_IS(x6o, L"big array char");
+    BOOST_TEST_EQ(x6o.native().size(), 14U);
+
+    wchar_t wchar_array[100];
+    std::wcscpy(wchar_array, L"big array wchar_t");
+    path x7o(wchar_array);                             // array char, only partially full
+    PATH_IS(x7o, L"big array wchar_t");
+    BOOST_TEST_EQ(x7o.native().size(), 17U);
+
+    path x8(s.c_str());                                // const char* null terminated
+    PATH_IS(x8, L"string");
+    BOOST_TEST_EQ(x8.native().size(), 6U);
+
+    path x9(ws.c_str());                               // const wchar_t* null terminated
+    PATH_IS(x9, L"wstring");
+    BOOST_TEST_EQ(x9.native().size(), 7U);
+
+    path x8nc(const_cast<char*>(s.c_str()));           // char* null terminated
+    PATH_IS(x8nc, L"string");
+    BOOST_TEST_EQ(x8nc.native().size(), 6U);
+
+    path x9nc(const_cast<wchar_t*>(ws.c_str()));       // wchar_t* null terminated
+    PATH_IS(x9nc, L"wstring");
+    BOOST_TEST_EQ(x9nc.native().size(), 7U);
+
+    // non-contiguous containers
+    path x10(l);                                       // std::list<char>
+    PATH_IS(x10, L"string");
+    BOOST_TEST_EQ(x10.native().size(), 6U);
+
+    path xll(wl);                                      // std::list<wchar_t>
+    PATH_IS(xll, L"wstring");
+    BOOST_TEST_EQ(xll.native().size(), 7U);
+
+    // easy-to-make coding errors
+    // path e1(x0, path::codecvt());  // fails to compile, and that is OK
+
+    pdalboost::shared_ptr< Derived > pDerived( new Derived() ); 
+    fun( pDerived );  // tests constructor member template enable_if working correctly;
+                      // will fail to compile if enable_if not taking path off the table
+  }
+
+  path x;
+  path y;
+
+  //  test_assignments  ----------------------------------------------------------------//
+
+  void test_assignments()
+  {
+    std::cout << "testing assignments..." << std::endl;
+
+    x = path("yet another path");                      // another path
+    PATH_IS(x, L"yet another path");
+    BOOST_TEST_EQ(x.native().size(), 16U);
+
+    x = x;                                             // self-assignment
+    PATH_IS(x, L"yet another path");
+    BOOST_TEST_EQ(x.native().size(), 16U);
+
+    x.assign(l.begin(), l.end());                      // iterator range char
+    PATH_IS(x, L"string");
+
+    x.assign(wl.begin(), wl.end());                    // iterator range wchar_t
+    PATH_IS(x, L"wstring");
+
+    x = string("std::string");                         // container char
+    PATH_IS(x, L"std::string");
+
+    x = wstring(L"std::wstring");                      // container wchar_t
+    PATH_IS(x, L"std::wstring");
+
+    x = "array char";                                  // array char
+    PATH_IS(x, L"array char");
+
+    x = L"array wchar";                                // array wchar_t
+    PATH_IS(x, L"array wchar");
+
+    x = s.c_str();                                     // const char* null terminated
+    PATH_IS(x, L"string");
+
+    x = ws.c_str();                                    // const wchar_t* null terminated
+    PATH_IS(x, L"wstring");
+   }
+
+  //  test_move_construction_and_assignment  -------------------------------------------//
+
+  void test_move_construction_and_assignment()
+  {
+    std::cout << "testing move_construction_and_assignment..." << std::endl;
+
+# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+    path from("long enough to avoid small object optimization");
+    path to(std::move(from));
+    BOOST_TEST(to == "long enough to avoid small object optimization");
+    if (!from.empty())
+      cout << "Note: move construction did not result in empty source path" << endl;
+
+    path from2("long enough to avoid small object optimization");
+    path to2;
+    to2 = std::move(from2);
+    BOOST_TEST(to2 == "long enough to avoid small object optimization");
+    if (!from2.empty())
+      cout << "Note: move assignment did not result in empty rhs path" << endl;
+# else
+    std::cout << 
+      "Test skipped because compiler does not support move semantics" << std::endl;
+# endif
+
+  }
+
+  //  test_appends  --------------------------------------------------------------------//
+
+  void test_appends()
+  {
+    std::cout << "testing appends..." << std::endl;
+
+# ifdef BOOST_WINDOWS_API
+#   define BOOST_FS_FOO L"/foo\\"
+# else   // POSIX paths
+#   define BOOST_FS_FOO L"/foo/"
+# endif
+
+    x = "/foo";
+    x /= path("");                                      // empty path
+    PATH_IS(x, L"/foo");
+
+    x = "/foo";
+    x /= path("/");                                     // slash path
+    PATH_IS(x, L"/foo/");
+
+    x = "/foo";
+    x /= path("/boo");                                  // slash path
+    PATH_IS(x, L"/foo/boo");
+
+    x = "/foo";
+    x /= x;                                             // self-append
+    PATH_IS(x, L"/foo/foo");
+
+    x = "/foo";
+    x /= path("yet another path");                      // another path
+    PATH_IS(x, BOOST_FS_FOO L"yet another path");
+
+    x = "/foo";
+    x.append(l.begin(), l.end());                      // iterator range char
+    PATH_IS(x, BOOST_FS_FOO L"string");
+
+    x = "/foo";
+    x.append(wl.begin(), wl.end());                    // iterator range wchar_t
+    PATH_IS(x, BOOST_FS_FOO L"wstring");
+
+    x = "/foo";
+    x /= string("std::string");                         // container char
+    PATH_IS(x, BOOST_FS_FOO L"std::string");
+
+    x = "/foo";
+    x /= wstring(L"std::wstring");                      // container wchar_t
+    PATH_IS(x, BOOST_FS_FOO L"std::wstring");
+
+    x = "/foo";
+    x /= "array char";                                  // array char
+    PATH_IS(x, BOOST_FS_FOO L"array char");
+
+    x = "/foo";
+    x /= L"array wchar";                                // array wchar_t
+    PATH_IS(x, BOOST_FS_FOO L"array wchar");
+
+    x = "/foo";
+    x /= s.c_str();                                     // const char* null terminated
+    PATH_IS(x, BOOST_FS_FOO L"string");
+
+    x = "/foo";
+    x /= ws.c_str();                                    // const wchar_t* null terminated
+    PATH_IS(x, BOOST_FS_FOO L"wstring");
+   }
+
+  //  test_concats  --------------------------------------------------------------------//
+
+  void test_concats()
+  {
+    std::cout << "testing concats..." << std::endl;
+
+    x = "/foo";
+    x += path("");                                      // empty path
+    PATH_IS(x, L"/foo");
+
+    x = "/foo";
+    x += path("/");                                     // slash path
+    PATH_IS(x, L"/foo/");
+
+    x = "/foo";
+    x += path("boo");                                  // slash path
+    PATH_IS(x, L"/fooboo");
+
+    x = "foo";
+    x += x;                                             // self-append
+    PATH_IS(x, L"foofoo");
+
+    x = "foo-";
+    x += path("yet another path");                      // another path
+    PATH_IS(x, L"foo-yet another path");
+
+    x = "foo-";
+    x.concat(l.begin(), l.end());                      // iterator range char
+    PATH_IS(x, L"foo-string");
+
+    x = "foo-";
+    x.concat(wl.begin(), wl.end());                    // iterator range wchar_t
+    PATH_IS(x, L"foo-wstring");
+
+    x = "foo-";
+    x += string("std::string");                         // container char
+    PATH_IS(x, L"foo-std::string");
+
+    x = "foo-";
+    x += wstring(L"std::wstring");                      // container wchar_t
+    PATH_IS(x, L"foo-std::wstring");
+
+    x = "foo-";
+    x += "array char";                                  // array char
+    PATH_IS(x, L"foo-array char");
+
+    x = "foo-";
+    x += L"array wchar";                                // array wchar_t
+    PATH_IS(x, L"foo-array wchar");
+
+    x = "foo-";
+    x += s.c_str();                                     // const char* null terminated
+    PATH_IS(x, L"foo-string");
+
+    x = "foo-";
+    x += ws.c_str();                                    // const wchar_t* null terminated
+    PATH_IS(x, L"foo-wstring");
+
+    x = "foo-";
+    x += 'x';                                           // char
+    PATH_IS(x, L"foo-x");
+
+    x = "foo-";
+    x += L'x';                                          // wchar
+    PATH_IS(x, L"foo-x");
+   }
+
+  //  test_observers  ------------------------------------------------------------------//
+
+  void test_observers()
+  {
+    std::cout << "testing observers..." << std::endl;
+
+    path p0("abc");
+
+    CHECK(p0.native().size() == 3);
+    CHECK(p0.size() == 3);
+    CHECK(p0.string() == "abc");
+    CHECK(p0.string().size() == 3);
+    CHECK(p0.wstring() == L"abc");
+    CHECK(p0.wstring().size() == 3);
+
+    p0 = "";
+    CHECK(p0.native().size() == 0);
+    CHECK(p0.size() == 0);
+
+# ifdef BOOST_WINDOWS_API
+
+    path p("abc\\def/ghi");
+
+    CHECK(std::wstring(p.c_str()) == L"abc\\def/ghi");
+
+    CHECK(p.string() == "abc\\def/ghi");
+    CHECK(p.wstring() == L"abc\\def/ghi");
+
+    CHECK(p.generic().string() == "abc/def/ghi");
+    CHECK(p.generic_string() == "abc/def/ghi");
+    CHECK(p.generic_wstring() == L"abc/def/ghi");
+
+    CHECK(p.generic_string<string>() == "abc/def/ghi");
+    CHECK(p.generic_string<wstring>() == L"abc/def/ghi");
+    CHECK(p.generic_string<path::string_type>() == L"abc/def/ghi");
+
+# else  // BOOST_POSIX_API
+
+    path p("abc\\def/ghi");
+
+    CHECK(string(p.c_str()) == "abc\\def/ghi");
+
+    CHECK(p.string() == "abc\\def/ghi");
+    CHECK(p.wstring() == L"abc\\def/ghi");
+
+    CHECK(p.generic().string() == "abc\\def/ghi");
+    CHECK(p.generic_string() == "abc\\def/ghi");
+    CHECK(p.generic_wstring() == L"abc\\def/ghi");
+
+    CHECK(p.generic_string<string>() == "abc\\def/ghi");
+    CHECK(p.generic_string<wstring>() == L"abc\\def/ghi");
+    CHECK(p.generic_string<path::string_type>() == "abc\\def/ghi");
+
+# endif
+  }
+
+  //  test_relationals  ----------------------------------------------------------------//
+
+  void test_relationals()
+  {
+    std::cout << "testing relationals..." << std::endl;
+
+    pdalboost::hash<path> hash;
+
+# ifdef BOOST_WINDOWS_API
+    // this is a critical use case to meet user expectations
+    CHECK(path("c:\\abc") == path("c:/abc"));
+    CHECK(hash(path("c:\\abc")) == hash(path("c:/abc")));
+# endif
+
+    const path p("bar");
+    const path p2("baz");
+
+    CHECK(!(p < p));
+    CHECK(p < p2);
+    CHECK(!(p2 < p));
+    CHECK(p < "baz");
+    CHECK(p < string("baz"));
+    CHECK(p < L"baz");
+    CHECK(p < wstring(L"baz"));
+    CHECK(!("baz" < p));
+    CHECK(!(string("baz") < p));
+    CHECK(!(L"baz" < p));
+    CHECK(!(wstring(L"baz") < p));
+
+    CHECK(p == p);
+    CHECK(!(p == p2));
+    CHECK(!(p2 == p));
+    CHECK(p2 == "baz");
+    CHECK(p2 == string("baz"));
+    CHECK(p2 == L"baz");
+    CHECK(p2 == wstring(L"baz"));
+    CHECK("baz" == p2);
+    CHECK(string("baz") == p2);
+    CHECK(L"baz" == p2);
+    CHECK(wstring(L"baz") == p2);
+
+    CHECK(hash(p) == hash(p));
+    CHECK(hash(p) != hash(p2)); // Not strictly required, but desirable
+
+    CHECK(!(p != p));
+    CHECK(p != p2);
+    CHECK(p2 != p);
+
+    CHECK(p <= p);
+    CHECK(p <= p2);
+    CHECK(!(p2 <= p));
+
+    CHECK(!(p > p));
+    CHECK(!(p > p2));
+    CHECK(p2 > p);
+
+    CHECK(p >= p);
+    CHECK(!(p >= p2));
+    CHECK(p2 >= p);
+}
+
+  //  test_inserter_and_extractor  -----------------------------------------------------//
+
+  void test_inserter_and_extractor()
+  {
+    std::cout << "testing inserter and extractor..." << std::endl;
+
+    path p1("foo bar");  // verify space in path roundtrips per ticket #3863
+    path p2;
+
+    std::stringstream ss;
+
+    CHECK(p1 != p2);
+    ss << p1;
+    ss >> p2;
+    CHECK(p1 == p2);
+
+    path wp1(L"foo bar");
+    path wp2;
+
+    std::wstringstream wss;
+
+    CHECK(wp1 != wp2);
+    wss << wp1;
+    wss >> wp2;
+    CHECK(wp1 == wp2);
+  }
+
+  //  test_other_non_members  ----------------------------------------------------------//
+
+  void test_other_non_members()
+  {
+    std::cout << "testing other_non_members..." << std::endl;
+
+    path p1("foo");
+    path p2("bar");
+
+    //  operator /
+
+    CHECK(p1 / p2 == path("foo/bar").make_preferred());
+    CHECK("foo" / p2 == path("foo/bar").make_preferred());
+    CHECK(L"foo" / p2 == path("foo/bar").make_preferred());
+    CHECK(string("foo") / p2 == path("foo/bar").make_preferred());
+    CHECK(wstring(L"foo") / p2 == path("foo/bar").make_preferred());
+    CHECK(p1 / "bar" == path("foo/bar").make_preferred());
+    CHECK(p1 / L"bar" == path("foo/bar").make_preferred());
+    CHECK(p1 / string("bar") == path("foo/bar").make_preferred());
+    CHECK(p1 / wstring(L"bar") == path("foo/bar").make_preferred());
+
+    swap(p1, p2);
+
+    CHECK(p1 == "bar");
+    CHECK(p2 == "foo");
+  }
+
+//  //  test_modifiers  ------------------------------------------------------------------//
+//
+//  void test_modifiers()
+//  {
+//    std::cout << "testing modifiers..." << std::endl;
+//
+//  }
+
+  //  test_iterators  ------------------------------------------------------------------//
+
+  void test_iterators()
+  {
+    std::cout << "testing iterators..." << std::endl;
+
+    path p1;
+    CHECK(p1.begin() == p1.end());
+
+    path p2("/");
+    CHECK(p2.begin() != p2.end());
+    CHECK(*p2.begin() == "/");
+    CHECK(++p2.begin() == p2.end());
+
+    path p3("foo/bar/baz");
+
+    path::iterator it(p3.begin());
+    CHECK(p3.begin() != p3.end());
+    CHECK(*it == "foo");
+    CHECK(*++it == "bar");
+    CHECK(*++it == "baz");
+    CHECK(*--it == "bar");
+    CHECK(*--it == "foo");
+    CHECK(*++it == "bar");
+    CHECK(*++it == "baz");
+    CHECK(++it == p3.end());
+  }
+
+  //  test_reverse_iterators  ----------------------------------------------------------//
+
+  void test_reverse_iterators()
+  {
+    std::cout << "testing reverse_iterators..." << std::endl;
+
+    path p1;
+    CHECK(p1.rbegin() == p1.rend());
+
+    path p2("/");
+    CHECK(p2.rbegin() != p2.rend());
+    CHECK(*p2.rbegin() == "/");
+    CHECK(++p2.rbegin() == p2.rend());
+
+    path p3("foo/bar/baz");
+
+    path::reverse_iterator it(p3.rbegin());
+    CHECK(p3.rbegin() != p3.rend());
+    CHECK(*it == "baz");
+    CHECK(*++it == "bar");
+    CHECK(*++it == "foo");
+    CHECK(*--it == "bar");
+    CHECK(*--it == "baz");
+    CHECK(*++it == "bar");
+    CHECK(*++it == "foo");
+    CHECK(++it == p3.rend());
+  }
+
+  //  test_modifiers  ------------------------------------------------------------------//
+
+  void test_modifiers()
+  {
+    std::cout << "testing modifiers..." << std::endl;
+
+    CHECK(path("").remove_filename() == "");
+    CHECK(path("foo").remove_filename() == "");
+    CHECK(path("/foo").remove_filename() == "/");
+    CHECK(path("foo/bar").remove_filename() == "foo");
+    BOOST_TEST_EQ(path("foo/bar/").remove_filename(), path("foo/bar"));
+    BOOST_TEST_EQ(path(".").remove_filename(), path(""));
+    BOOST_TEST_EQ(path("./.").remove_filename(), path("."));
+    BOOST_TEST_EQ(path("/.").remove_filename(), path("/"));
+    BOOST_TEST_EQ(path("..").remove_filename(), path(""));
+    BOOST_TEST_EQ(path("../..").remove_filename(), path(".."));
+    BOOST_TEST_EQ(path("/..").remove_filename(), path("/"));
+
+  }
+
+  //  test_decompositions  -------------------------------------------------------------//
+
+  void test_decompositions()
+  {
+    std::cout << "testing decompositions..." << std::endl;
+
+    CHECK(path("").root_name().string() == "");
+    CHECK(path("foo").root_name().string() == "");
+    CHECK(path("/").root_name().string() == "");
+    CHECK(path("/foo").root_name().string() == "");
+    CHECK(path("//netname").root_name().string() == "//netname");
+    CHECK(path("//netname/foo").root_name().string() == "//netname");
+
+    CHECK(path("").root_directory().string() == "");
+    CHECK(path("foo").root_directory().string() == "");
+    CHECK(path("/").root_directory().string() == "/");
+    CHECK(path("/foo").root_directory().string() == "/");
+    CHECK(path("//netname").root_directory().string() == "");
+    CHECK(path("//netname/foo").root_directory().string() == "/");
+
+    CHECK(path("").root_path().string() == "");
+    CHECK(path("/").root_path().string() == "/");
+    CHECK(path("/foo").root_path().string() == "/");
+    CHECK(path("//netname").root_path().string() == "//netname");
+    CHECK(path("//netname/foo").root_path().string() == "//netname/");
+
+#   ifdef BOOST_WINDOWS_API
+    CHECK(path("c:/foo").root_path().string() == "c:/");
+#   endif
+
+    CHECK(path("").relative_path().string() == "");
+    CHECK(path("/").relative_path().string() == "");
+    CHECK(path("/foo").relative_path().string() == "foo");
+
+    CHECK(path("").parent_path().string() == "");
+    CHECK(path("/").parent_path().string() == "");
+    CHECK(path("/foo").parent_path().string() == "/");
+    CHECK(path("/foo/bar").parent_path().string() == "/foo");
+
+    CHECK(path("/foo/bar/baz.zoo").filename().string() == "baz.zoo");
+
+    CHECK(path("/foo/bar/baz.zoo").stem().string() == "baz");
+    CHECK(path("/foo/bar.woo/baz").stem().string() == "baz");
+
+    CHECK(path("foo.bar.baz.tar.bz2").extension().string() == ".bz2");
+    CHECK(path("/foo/bar/baz.zoo").extension().string() == ".zoo");
+    CHECK(path("/foo/bar.woo/baz").extension().string() == "");
+  }
+
+  //  test_queries  --------------------------------------------------------------------//
+
+  void test_queries()
+  {
+    std::cout << "testing queries..." << std::endl;
+
+    path p1("");
+    path p2("//netname/foo.doo");
+
+    CHECK(p1.empty());
+    CHECK(!p1.has_root_path());
+    CHECK(!p1.has_root_name());
+    CHECK(!p1.has_root_directory());
+    CHECK(!p1.has_relative_path());
+    CHECK(!p1.has_parent_path());
+    CHECK(!p1.has_filename());
+    CHECK(!p1.has_stem());
+    CHECK(!p1.has_extension());
+    CHECK(!p1.is_absolute());
+    CHECK(p1.is_relative());
+
+    CHECK(!p2.empty());
+    CHECK(p2.has_root_path());
+    CHECK(p2.has_root_name());
+    CHECK(p2.has_root_directory());
+    CHECK(p2.has_relative_path());
+    CHECK(p2.has_parent_path());
+    CHECK(p2.has_filename());
+    CHECK(p2.has_stem());
+    CHECK(p2.has_extension());
+    CHECK(p2.is_absolute());
+    CHECK(!p2.is_relative());
+
+  }
+
+  //  test_imbue_locale  ---------------------------------------------------------------//
+
+  void test_imbue_locale()
+  {
+    std::cout << "testing imbue locale..." << std::endl;
+
+    //  weak test case for before/after states since we don't know what characters the
+    //  default locale accepts. 
+    path before("abc");
+
+    //  So that tests are run with known encoding, use Boost UTF-8 codecvt
+    //  \u2722 and \xE2\x9C\xA2 are UTF-16 and UTF-8 FOUR TEARDROP-SPOKED ASTERISK
+
+    std::locale global_loc = std::locale();
+    std::locale loc(global_loc, new fs::detail::utf8_codecvt_facet);
+    std::cout << "  imbuing locale ..." << std::endl;
+    std::locale old_loc = path::imbue(loc);
+
+    std::cout << "  testing with the imbued locale ..." << std::endl;
+    path p2("\xE2\x9C\xA2");
+    CHECK(p2.wstring().size() == 1);
+    CHECK(p2.wstring()[0] == 0x2722);
+
+    std::cout << "  imbuing the original locale ..." << std::endl;
+    path::imbue(old_loc);
+
+    std::cout << "  testing with the original locale ..." << std::endl;
+    path after("abc");
+    CHECK(before == after);
+
+    std::cout << "  locale testing complete" << std::endl;
+  }
+
+  //  test_codecvt_argument  -----------------------------------------------------------//
+
+  void test_codecvt_argument()
+  {
+    std::cout << "testing codecvt arguments..." << std::endl;
+
+    const char * c1 = "a1";
+    const std::string s1(c1);
+    const std::wstring ws1(L"b2");  // off-by-one mimics test_codecvt
+    const std::string s2("y8");
+    const std::wstring ws2(L"z9");
+
+    test_codecvt cvt;  // produces off-by-one values that will always differ from
+                       // the system's default locale codecvt facet
+
+    int t = 0;
+
+    //  constructors
+    std::cout << "  constructors test " << ++t << std::endl;
+    path p(c1, cvt);
+    NATIVE_IS(p, s1, ws1);
+
+    std::cout << "  test " << ++t << std::endl;
+    path p1(s1.begin(), s1.end(), cvt);
+    NATIVE_IS(p1, s1, ws1);
+
+    std::cout << "  test " << ++t << std::endl;
+    path p2(ws2, cvt);
+    NATIVE_IS(p2, s2, ws2);
+
+    std::cout << "  test " << ++t << std::endl;
+    path p3(ws2.begin(), ws2.end(), cvt);
+    NATIVE_IS(p3, s2, ws2);
+
+    // path p2(p1, cvt);  // fails to compile, and that is OK
+
+    //  assigns
+    p1.clear();
+    std::cout << "  assigns test " << ++t << std::endl;
+    p1.assign(s1,cvt);
+    NATIVE_IS(p1, s1, ws1);
+    p1.clear();
+    std::cout << "  test " << ++t << std::endl;
+    p1.assign(s1.begin(), s1.end(), cvt);
+    NATIVE_IS(p1, s1, ws1);
+    // p1.assign(p, cvt);  // fails to compile, and that is OK
+
+    //  appends
+    p1.clear();
+    std::cout << "  appends test " << ++t << std::endl;
+    p1.append(s1,cvt);
+    NATIVE_IS(p1, s1, ws1);
+    p1.clear();
+    std::cout << "  test " << ++t << std::endl;
+    p1.append(s1.begin(), s1.end(), cvt);
+    NATIVE_IS(p1, s1, ws1);
+    // p1.append(p, cvt);  // fails to compile, and that is OK
+
+    //  native observers
+    std::cout << "  native observers test " << ++t << std::endl;
+    CHECK(p.string<std::string>(cvt) == s1);
+    std::cout << "  test " << ++t << std::endl;
+    CHECK(p.string(cvt) == s1);
+    std::cout << "  test " << ++t << std::endl;
+    CHECK(p.string<std::wstring>(cvt) == ws1);
+    std::cout << "  test " << ++t << std::endl;
+    CHECK(p.wstring(cvt) == ws1);
+
+    //  generic observers
+    std::cout << "  generic observers test " << ++t << std::endl;
+    CHECK(p.generic_string<std::string>(cvt) == s1);
+    std::cout << "  test " << ++t << std::endl;
+    CHECK(p.generic_string(cvt) == s1);
+    std::cout << "  test " << ++t << std::endl;
+    CHECK(p.generic_string<std::wstring>(cvt) == ws1);
+    std::cout << "  test " << ++t << std::endl;
+    CHECK(p.generic_wstring(cvt) == ws1);
+
+    std::cout << "  codecvt arguments testing complete" << std::endl;
+  }
+
+  //  test_overloads  ------------------------------------------------------------------//
+
+  void test_overloads()
+  {
+    std::cout << "testing overloads..." << std::endl;
+    std::string sto("hello");
+    const char a[] = "goodbye";
+    path p1(sto);
+    path p2(sto.c_str());
+    path p3(a);
+    path p4("foo");
+
+    std::wstring wsto(L"hello");
+    const wchar_t wa[] = L"goodbye";
+    path wp1(wsto);
+    path wp2(wsto.c_str());
+    path wp3(wa);
+    path wp4(L"foo");
+  }
+
+  //  test_error_handling  -------------------------------------------------------------//
+
+  class error_codecvt
+    : public std::codecvt< wchar_t, char, std::mbstate_t >
+  {
+  public:
+    explicit error_codecvt()
+        : std::codecvt<wchar_t, char, std::mbstate_t>() {}
+  protected:
+
+    virtual bool do_always_noconv() const throw() { return false; }
+    virtual int do_encoding() const throw() { return 0; }
+
+    virtual std::codecvt_base::result do_in(std::mbstate_t&,
+      const char*, const char*, const char*&,
+      wchar_t*, wchar_t*, wchar_t*&) const
+    {
+      static std::codecvt_base::result r = std::codecvt_base::noconv;
+      if (r == std::codecvt_base::partial) r = std::codecvt_base::error;
+      else if (r == std::codecvt_base::error) r = std::codecvt_base::noconv;
+      else r = std::codecvt_base::partial;
+      return r;
+    }
+
+    virtual std::codecvt_base::result do_out(std::mbstate_t &,
+      const wchar_t*, const wchar_t*, const wchar_t*&,
+      char*, char*, char*&) const
+    {
+      static std::codecvt_base::result r = std::codecvt_base::noconv;
+      if (r == std::codecvt_base::partial) r = std::codecvt_base::error;
+      else if (r == std::codecvt_base::error) r = std::codecvt_base::noconv;
+      else r = std::codecvt_base::partial;
+      return r;
+    }
+
+    virtual std::codecvt_base::result do_unshift(std::mbstate_t&,
+        char*, char*, char* &) const  { return ok; }
+    virtual int do_length(std::mbstate_t &,
+      const char*, const char*, std::size_t) const  { return 0; }
+    virtual int do_max_length() const throw () { return 0; }
+  };
+
+  void test_error_handling()
+  {
+    std::cout << "testing error handling..." << std::endl;
+
+    std::locale global_loc = std::locale();
+    std::locale loc(global_loc, new error_codecvt);
+    std::cout << "  imbuing error locale ..." << std::endl;
+    std::locale old_loc = path::imbue(loc);
+
+    //  These tests rely on a path constructor that fails in the locale conversion.
+    //  Thus construction has to call codecvt. Force that by using a narrow string
+    //  for Windows, and a wide string for POSIX.
+#   ifdef BOOST_WINDOWS_API
+#     define STRING_FOO_ "foo"
+#   else
+#     define STRING_FOO_ L"foo"
+#   endif
+
+    {
+      std::cout << "    testing std::codecvt_base::partial error..." << std::endl;
+      bool exception_thrown (false);
+      try { path(STRING_FOO_); }
+      catch (const bs::system_error & ex)
+      {
+        exception_thrown = true;
+        BOOST_TEST_EQ(ex.code(), bs::error_code(std::codecvt_base::partial,
+          fs::codecvt_error_category()));
+      }
+      catch (...) { std::cout << "***** unexpected exception type *****" << std::endl; }
+      BOOST_TEST(exception_thrown);
+    }
+
+    {
+      std::cout << "    testing std::codecvt_base::error error..." << std::endl;
+      bool exception_thrown (false);
+      try { path(STRING_FOO_); }
+      catch (const bs::system_error & ex)
+      {
+        exception_thrown = true;
+        BOOST_TEST_EQ(ex.code(), bs::error_code(std::codecvt_base::error,
+          fs::codecvt_error_category()));
+      }
+      catch (...) { std::cout << "***** unexpected exception type *****" << std::endl; }
+      BOOST_TEST(exception_thrown);
+    }
+
+    {
+      std::cout << "    testing std::codecvt_base::noconv error..." << std::endl;
+      bool exception_thrown (false);
+      try { path(STRING_FOO_); }
+      catch (const bs::system_error & ex)
+      {
+        exception_thrown = true;
+        BOOST_TEST_EQ(ex.code(), bs::error_code(std::codecvt_base::noconv,
+          fs::codecvt_error_category()));
+      }
+      catch (...) { std::cout << "***** unexpected exception type *****" << std::endl; }
+      BOOST_TEST(exception_thrown);
+    }
+
+    std::cout << "  restoring original locale ..." << std::endl;
+    path::imbue(old_loc);
+    std::cout << "  testing error handling complete" << std::endl;
+ }
+
+# if 0
+
+//  //  test_locales  --------------------------------------------------------------------//
+//
+//  void test_locales()
+//  {
+//    std::cout << "testing locales..." << std::endl;
+//
+//  }
+
+  //  test_user_supplied_type  ---------------------------------------------------------//
+
+  typedef std::basic_string<int> user_string;
+
+}  // unnamed namespace
+
+namespace pdalboost
+{
+namespace filesystem
+{
+  namespace path_traits
+  {
+    template<> struct is_iterator<const user_string::value_type *> { static const bool value = true; };
+    template<> struct is_iterator<user_string::value_type *> { static const bool value = true; };
+    template<> struct is_iterator<user_string::iterator> { static const bool value = true; };
+    template<> struct is_iterator<user_string::const_iterator> { static const bool value = true; };
+    template<> struct is_container<user_string> { static const bool value = true; };
+
+    template<>
+    void append<user_string::value_type>(const user_string::value_type * begin,
+      const user_string::value_type * end, string_type & target, system::error_code & ec)
+    {
+      for (; begin != end && *begin; ++begin)
+        target += *begin + 1;  // change so that results distinguishable from char cvts
+    }
+
+#  ifdef __GNUC__
+    //  This specialization shouldn't be needed, and VC++, Intel, and others work
+    //  fine without it. But gcc 4.3.2, and presumably other versions, need it.
+    template<>
+    void append<user_string::value_type>(const user_string::value_type * begin,
+      string_type & target, system::error_code & ec)
+    {
+      path_traits::append<user_string::value_type>(begin,
+        static_cast<const user_string::value_type *>(0), target, ec);
+    }
+#  endif
+
+    template<>
+    user_string convert<user_string>(const string_type & source,
+      system::error_code & ec)
+    {
+      user_string temp;
+      for (string_type::const_iterator it = source.begin();
+            it != source.end(); ++it)
+        temp += *it - 1;
+      return temp;
+    }
+  }  // namespace path_traits
+}  // namespace filesystem
+}  // namespace pdalboost
+
+namespace
+{
+
+  void test_user_supplied_type()
+  {
+    std::cout << "testing user supplied type..." << std::endl;
+
+    user_string::value_type usr_c_str[] = { 'a', 'b', 'c', 0 };
+    user_string usr(usr_c_str);
+
+    path p1(usr.c_str());
+    CHECK(p1 == path("bcd"));
+    CHECK(p1 == "bcd");
+    user_string s1(p1.string<user_string>());
+    CHECK(s1 == usr);
+  }
+
+# endif
+
+}  // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                                     main                                             //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+int test_main(int, char*[])
+{
+// document state of critical macros
+#ifdef BOOST_POSIX_API
+  cout << "BOOST_POSIX_API" << endl;
+  BOOST_TEST(path::preferred_separator == '/');
+#endif
+#ifdef BOOST_WINDOWS_API
+  cout << "BOOST_WINDOWS_API" << endl;
+  BOOST_TEST(path::preferred_separator == '\\');
+#endif
+
+  l.push_back('s');
+  l.push_back('t');
+  l.push_back('r');
+  l.push_back('i');
+  l.push_back('n');
+  l.push_back('g');
+
+  wl.push_back(L'w');
+  wl.push_back(L's');
+  wl.push_back(L't');
+  wl.push_back(L'r');
+  wl.push_back(L'i');
+  wl.push_back(L'n');
+  wl.push_back(L'g');
+
+  v.push_back('f');
+  v.push_back('u');
+  v.push_back('z');
+
+  wv.push_back(L'w');
+  wv.push_back(L'f');
+  wv.push_back(L'u');
+  wv.push_back(L'z');
+
+  test_overloads();
+  test_constructors();
+  test_assignments();
+  test_move_construction_and_assignment();
+  test_appends();
+  test_concats();
+  test_modifiers();
+  test_observers();
+  test_relationals();
+  test_inserter_and_extractor();
+  test_other_non_members();
+  test_iterators();
+  test_reverse_iterators();
+  test_decompositions();
+  test_queries();
+  test_imbue_locale();
+  test_codecvt_argument();
+  test_error_handling();
+
+#if 0
+
+  test_user_supplied_type();
+
+#endif
+
+  std::string foo("\\abc");
+  const char* bar = "/abc";
+
+  if (foo == bar)
+    cout << "unintended consequence\n";
+
+  return ::pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/relative_test.cpp b/vendor/pdalboost/libs/filesystem/test/relative_test.cpp
new file mode 100644
index 0000000..db202f6
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/relative_test.cpp
@@ -0,0 +1,111 @@
+//  filesystem relative_test.cpp  ----------------------------------------------------  //
+
+//  Copyright Beman Dawes 2015
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//  ----------------------------------------------------------------------------------  //
+//
+//  At least initially, development is easier if these tests are in a separate file.
+//
+//  ----------------------------------------------------------------------------------  //
+
+#include <boost/config/warning_disable.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/detail/lightweight_test_report.hpp>
+#include <iostream>
+
+using pdalboost::filesystem::path;
+using std::cout;
+using std::endl;
+
+namespace
+{
+  void lexically_relative_test()
+  {
+    cout << "lexically_relative_test..." << endl;
+
+    BOOST_TEST(path("").lexically_relative("") == "");
+    BOOST_TEST(path("").lexically_relative("/foo") == "");
+    BOOST_TEST(path("/foo").lexically_relative("") == "");
+    BOOST_TEST(path("/foo").lexically_relative("/foo") == ".");
+    BOOST_TEST(path("").lexically_relative("foo") == "");
+    BOOST_TEST(path("foo").lexically_relative("") == "");
+    BOOST_TEST(path("foo").lexically_relative("foo") == ".");
+
+    BOOST_TEST(path("a/b/c").lexically_relative("a") == "b/c");
+    BOOST_TEST(path("a//b//c").lexically_relative("a") == "b/c");
+    BOOST_TEST(path("a/b/c").lexically_relative("a/b") == "c");
+    BOOST_TEST(path("a///b//c").lexically_relative("a//b") == "c");
+    BOOST_TEST(path("a/b/c").lexically_relative("a/b/c") == ".");
+    BOOST_TEST(path("a/b/c").lexically_relative("a/b/c/x") == "..");
+    BOOST_TEST(path("a/b/c").lexically_relative("a/b/c/x/y") == "../..");
+    BOOST_TEST(path("a/b/c").lexically_relative("a/x") == "../b/c");
+    BOOST_TEST(path("a/b/c").lexically_relative("a/b/x") == "../c");
+    BOOST_TEST(path("a/b/c").lexically_relative("a/x/y") == "../../b/c");
+    BOOST_TEST(path("a/b/c").lexically_relative("a/b/x/y") == "../../c");
+    BOOST_TEST(path("a/b/c").lexically_relative("a/b/c/x/y/z") == "../../..");
+ 
+    // paths unrelated except first element, and first element is root directory
+    BOOST_TEST(path("/a/b/c").lexically_relative("/x") == "../a/b/c");
+    BOOST_TEST(path("/a/b/c").lexically_relative("/x/y") == "../../a/b/c");
+    BOOST_TEST(path("/a/b/c").lexically_relative("/x/y/z") == "../../../a/b/c");
+ 
+    // paths unrelated
+    BOOST_TEST(path("a/b/c").lexically_relative("x") == "");
+    BOOST_TEST(path("a/b/c").lexically_relative("x/y") == "");
+    BOOST_TEST(path("a/b/c").lexically_relative("x/y/z") == "");
+    BOOST_TEST(path("a/b/c").lexically_relative("/x") == "");
+    BOOST_TEST(path("a/b/c").lexically_relative("/x/y") == "");
+    BOOST_TEST(path("a/b/c").lexically_relative("/x/y/z") == "");
+    BOOST_TEST(path("a/b/c").lexically_relative("/a/b/c") == "");
+  
+    // TODO: add some Windows-only test cases that probe presence or absence of
+    // drive specifier-and root-directory
+
+    //  Some tests from Jamie Allsop's paper
+    BOOST_TEST(path("/a/d").lexically_relative("/a/b/c") == "../../d");
+    BOOST_TEST(path("/a/b/c").lexically_relative("/a/d") == "../b/c");
+  #ifdef BOOST_WINDOWS_API  
+    BOOST_TEST(path("c:\\y").lexically_relative("c:\\x") == "../y");
+  #else
+    BOOST_TEST(path("c:\\y").lexically_relative("c:\\x") == "");
+  #endif  
+    BOOST_TEST(path("d:\\y").lexically_relative("c:\\x") == "");
+
+    //  From issue #1976
+    BOOST_TEST(path("/foo/new").lexically_relative("/foo/bar") == "../new");
+  }
+
+  void lexically_proximate_test()
+  {
+    cout << "lexically_proximate_test..." << endl;
+    // paths unrelated
+    BOOST_TEST(path("a/b/c").lexically_proximate("x") == "a/b/c");
+  }
+}  // unnamed namespace
+
+//--------------------------------------------------------------------------------------//
+//                                                                                      //
+//                                     main                                             //
+//                                                                                      //
+//--------------------------------------------------------------------------------------//
+
+int test_main(int, char*[])
+{
+// document state of critical macros
+#ifdef BOOST_POSIX_API
+  cout << "BOOST_POSIX_API" << endl;
+#endif
+#ifdef BOOST_WINDOWS_API
+  cout << "BOOST_WINDOWS_API" << endl;
+#endif
+
+  lexically_relative_test();
+  lexically_proximate_test();
+
+  return ::pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/sample_test.cpp b/vendor/pdalboost/libs/filesystem/test/sample_test.cpp
new file mode 100644
index 0000000..e70b6a5
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/sample_test.cpp
@@ -0,0 +1,63 @@
+//  filesystem sample_test.cpp  ----------------------------------------------//
+
+//  Copyright Beman Dawes 2012
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  --------------------------------------------------------------------------//
+//
+//  This program provides a template for bug reporting test cases.
+//
+//  --------------------------------------------------------------------------//
+
+#include <boost/config/warning_disable.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/detail/lightweight_test.hpp>
+#include <iostream>
+#include <string>
+#include <cstring>
+#ifndef BOOST_LIGHTWEIGHT_MAIN
+#  include <boost/test/prg_exec_monitor.hpp>
+#else
+#  include <boost/detail/lightweight_main.hpp>
+#endif
+
+namespace fs = pdalboost::filesystem;
+using fs::path;
+using std::cout;
+using std::endl;
+using std::string;
+using std::wstring;
+
+namespace
+{
+  bool cleanup = true;
+}
+
+//  cpp_main  ----------------------------------------------------------------//
+
+int cpp_main(int argc, char* argv[])
+{
+  if (argc > 1 && std::strcmp(argv[1], "--no-cleanup") == 0)
+    cleanup = false;
+
+  //  Test cases go after this block of comments
+  //    Use test case macros from boost/detail/lightweight_test.hpp:
+  //
+  //    BOOST_TEST(predicate);  // test passes if predicate evaluates to true
+  //    BOOST_TEST_EQ(x, y);    // test passes if x == y
+  //    BOOST_TEST_NE(x, y);    // test passes if x != y
+  //    BOOST_ERROR(msg);       // test fails, outputs msg 
+  //    Examples:
+  //      BOOST_TEST(path("f00").size() == 3);   // test passes
+  //      BOOST_TEST_EQ(path("f00").size(), 3);  // test passes
+  //      BOOST_MSG("Oops!");  // test fails, outputs "Oops!"
+
+  if (cleanup)
+  {
+    // Remove any test files or directories here
+  }
+
+  return ::pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/filesystem/test/test_codecvt.hpp b/vendor/pdalboost/libs/filesystem/test/test_codecvt.hpp
new file mode 100644
index 0000000..666805e
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/test_codecvt.hpp
@@ -0,0 +1,79 @@
+//  test_codecvt.hpp  ------------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2009, 2010
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+#ifndef BOOST_FILESYSTEM3_TEST_CODECVT_HPP
+#define BOOST_FILESYSTEM3_TEST_CODECVT_HPP
+
+#include <boost/filesystem/config.hpp>
+#include <locale>
+#include <cwchar>  // for mbstate_t
+
+  //------------------------------------------------------------------------------------//
+  //                                                                                    //
+  //                              class test_codecvt                                    //
+  //                                                                                    //
+  //  Warning: partial implementation; even do_in and do_out only partially meet the    //
+  //  standard library specifications as the "to" buffer must hold the entire result.   //
+  //                                                                                    //
+  //  The value of a wide character is the value of the corresponding narrow character  //
+  //  plus 1. This ensures that compares against expected values will fail if the       //
+  //  code conversion did not occur as expected.                                        //
+  //                                                                                    //
+  //------------------------------------------------------------------------------------//
+
+  class test_codecvt
+    : public std::codecvt< wchar_t, char, std::mbstate_t >  
+  {
+  public:
+    explicit test_codecvt()
+        : std::codecvt<wchar_t, char, std::mbstate_t>() {}
+  protected:
+
+    virtual bool do_always_noconv() const throw() { return false; }
+
+    virtual int do_encoding() const throw() { return 0; }
+
+    virtual std::codecvt_base::result do_in(std::mbstate_t&, 
+      const char* from, const char* from_end, const char*& from_next,
+      wchar_t* to, wchar_t* to_end, wchar_t*& to_next) const
+    {
+      for (; from != from_end && to != to_end; ++from, ++to)
+        *to = wchar_t(*from + 1);
+      if (to == to_end)
+        return error;
+      *to = L'\0';
+      from_next = from;
+      to_next = to;
+      return ok;
+   }
+
+    virtual std::codecvt_base::result do_out(std::mbstate_t&,
+      const wchar_t* from, const wchar_t* from_end, const wchar_t*& from_next,
+      char* to, char* to_end, char*& to_next) const
+    {
+      for (; from != from_end && to != to_end; ++from, ++to)
+        *to = static_cast<char>(*from - 1);
+      if (to == to_end)
+        return error;
+      *to = '\0';
+      from_next = from;
+      to_next = to;
+      return ok;
+    }
+
+    virtual std::codecvt_base::result do_unshift(std::mbstate_t&,
+        char* /*from*/, char* /*to*/, char* & /*next*/) const  { return ok; } 
+
+    virtual int do_length(std::mbstate_t&,
+      const char* /*from*/, const char* /*from_end*/, std::size_t /*max*/) const  { return 0; }
+
+    virtual int do_max_length() const throw () { return 0; }
+  };
+
+#endif  // BOOST_FILESYSTEM3_TEST_CODECVT_HPP
diff --git a/vendor/pdalboost/libs/filesystem/test/windows_attributes.cpp b/vendor/pdalboost/libs/filesystem/test/windows_attributes.cpp
new file mode 100644
index 0000000..8c0a074
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/test/windows_attributes.cpp
@@ -0,0 +1,108 @@
+//  windows_attributes  ----------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2010
+   
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+//                   Useful for debugging status related issues                         //
+
+//--------------------------------------------------------------------------------------//
+
+#include <boost/filesystem.hpp>
+#include <boost/detail/lightweight_main.hpp>
+#include <windows.h>
+#include <map>
+#include <utility>
+#include <iostream>
+#include <string>
+
+using std::make_pair;
+namespace fs = pdalboost::filesystem;
+
+int cpp_main( int argc, char* argv[])
+{
+  typedef std::map<DWORD, std::string> decode_type;
+  decode_type table;
+
+  table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_ARCHIVE, "FILE_ATTRIBUTE_ARCHIVE"));
+  table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_COMPRESSED, "FILE_ATTRIBUTE_COMPRESSED"));
+  table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_DEVICE, "FILE_ATTRIBUTE_DEVICE"));
+  table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_DIRECTORY, "FILE_ATTRIBUTE_DIRECTORY"));
+  table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_ENCRYPTED, "FILE_ATTRIBUTE_ENCRYPTED"));
+  table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_HIDDEN, "FILE_ATTRIBUTE_HIDDEN"));
+  table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_NOT_CONTENT_INDEXED, "FILE_ATTRIBUTE_NOT_CONTENT_INDEXED"));
+  table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_OFFLINE, "FILE_ATTRIBUTE_OFFLINE"));
+  table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_READONLY, "FILE_ATTRIBUTE_READONLY"));
+  table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_REPARSE_POINT, "FILE_ATTRIBUTE_REPARSE_POINT"));
+  table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_SPARSE_FILE, "FILE_ATTRIBUTE_SPARSE_FILE"));
+  table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_SYSTEM, "FILE_ATTRIBUTE_SYSTEM"));
+  table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_TEMPORARY, "FILE_ATTRIBUTE_TEMPORARY"));
+  table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_VIRTUAL, "FILE_ATTRIBUTE_VIRTUAL"));
+
+  if (argc < 2)
+  {
+    std::cout << "Usage: windows_attributes path\n";
+    return 1;
+  }
+
+  //  report Win32  ::GetFileAttributesA()
+
+  DWORD at(::GetFileAttributesA(argv[1]));
+  if (at == INVALID_FILE_ATTRIBUTES)
+  {
+    std::cout << "GetFileAttributes(\"" << argv[1]
+              << "\") returned INVALID_FILE_ATTRIBUTES\n";
+    return 0;
+  }
+
+  std::cout << "GetFileAttributes(\"" << argv[1]
+            << "\") returned ";
+
+  bool bar = false;
+  for (decode_type::iterator it = table.begin(); it != table.end(); ++it)
+  {
+    if (!(it->first & at))
+      continue;
+    if (bar)
+      std::cout << " | ";
+    bar = true;
+    std::cout << it->second;
+    at &= ~it->first;
+  }
+  std::cout << std::endl;
+
+  if (at)
+    std::cout << "plus unknown attributes " << at << std::endl;
+
+  //  report Boost Filesystem file_type
+
+  fs::file_status stat = fs::status(argv[1]);
+
+  const char* types[] = 
+    { 
+    "status_error",
+    "file_not_found",
+    "regular_file",
+    "directory_file",
+    // the following may not apply to some operating systems or file systems
+    "symlink_file",
+    "block_file",
+    "character_file",
+    "fifo_file",
+    "socket_file",
+    "reparse_file",  // Windows: FILE_ATTRIBUTE_REPARSE_POINT that is not a symlink
+    "type_unknown",  // file does exist", but isn't one of the above types or
+                   // we don't have strong enough permission to find its type
+
+    "_detail_directory_symlink"  // internal use only; never exposed to users
+  };
+
+  std::cout << "pdalboost::filesystem::status().type() is " << types[stat.type()] << std::endl;
+
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/filesystem/tools/backup.bat b/vendor/pdalboost/libs/filesystem/tools/backup.bat
new file mode 100644
index 0000000..d5157ba
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/tools/backup.bat
@@ -0,0 +1,27 @@
+ at echo off
+
+rem  Copyright Beman Dawes 2011
+rem  Distributed under to the Boost Software License, Version 1.0 
+rem  See http://www.boost.org/LICENSE_1_0.txt
+
+if not $%1==$ goto ok
+:error
+echo Usage: backup target-directory-path
+goto done
+
+:ok
+mkdir %1\boost\filesystem 2>nul
+mkdir %1\libs\filesystem 2>nul
+
+set BOOST_CURRENT_ROOT=.
+:loop
+if exist %BOOST_CURRENT_ROOT%\boost-build.jam goto loopend
+set BOOST_CURRENT_ROOT=..\%BOOST_CURRENT_ROOT%
+goto loop
+:loopend
+
+xcopy /exclude:exclude.txt /y /d /k /r %BOOST_CURRENT_ROOT%\boost\filesystem.hpp %1\boost
+xcopy /exclude:exclude.txt /y /d /k /s /r %BOOST_CURRENT_ROOT%\boost\filesystem %1\boost\filesystem
+xcopy /exclude:exclude.txt /y /d /k /s /r %BOOST_CURRENT_ROOT%\libs\filesystem %1\libs\filesystem
+
+:done
diff --git a/vendor/pdalboost/libs/filesystem/tools/exclude.txt b/vendor/pdalboost/libs/filesystem/tools/exclude.txt
new file mode 100644
index 0000000..037de66
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/tools/exclude.txt
@@ -0,0 +1,14 @@
+.svn
+.obj
+.exe
+.log
+.user
+.filters
+.sdf
+.ncb
+.ipch
+ipch
+Debug
+Release
+v3_operations_test
+temp_fs_test_dir
diff --git a/vendor/pdalboost/libs/filesystem/tools/publish.bat b/vendor/pdalboost/libs/filesystem/tools/publish.bat
new file mode 100644
index 0000000..e1ca8a9
--- /dev/null
+++ b/vendor/pdalboost/libs/filesystem/tools/publish.bat
@@ -0,0 +1,8 @@
+copy /y c:\boost\modular\develop\libs\filesystem\doc\*.htm? C:\boost\filesystem-gh-pages
+pushd C:\boost\filesystem-gh-pages
+git commit -a -m "merge from develop"
+git push
+popd
+rem Copyright Beman Dawes, 2015
+rem Distributed under the Boost Software License, Version 1.0.
+rem See www.boost.org/LICENSE_1_0.txt
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/acknowledgments.html b/vendor/pdalboost/libs/iostreams/doc/acknowledgments.html
new file mode 100644
index 0000000..a50557d
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/acknowledgments.html
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Acknowledgments</TITLE>
+    <LINK REL="stylesheet" HREF="../../../boost.css">
+    <LINK REL="stylesheet" HREF="theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Acknowledgments</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H3>1.35</H3>
+
+<P>Numerous users submitted bug reports and patches to correct and optimize Boost.Iostreams for release 1.35. Frank Birbacher and Chad Walters deserve special thanks for diagnosing and fixing bugs and for prodding the author to resume active maintenance of the library.
+
+<H3>1.33</H3>
+
+<P>
+    The original idea for the library came from the example stream buffer implementations in <I>Standard C++ IOStreams and Locales</I>, by Angelika Langer and Klaus Kreft (<A CLASS="bib_ref" HREF="bibliography.html#langer">[Langer]</A>). <A HREF="http://lists.boost.org/MailArchives/boost/msg48300.php" TARGET="_top">Robert Ramey</A> suggested extending the library to handle filtering. In addition:
+</P>
+
+<UL>
+    <LI CLASS="square">
+        The implementation of <A HREF="guide/generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A> is indebted to work of Angelika Langer and Klaus Kreft (<A CLASS="bib_ref" HREF="bibliography.html#langer">[Langer]</A>, <I>pp.</I> 228-43).
+    </LI>
+    <LI CLASS="square">
+        The filtering stream buffer concept was invented by James Kanze and Dietmar Kühl. <I>See</I> <A CLASS="bib_ref" HREF="bibliography.html#kanze">[Kanze]</A>. 
+    </LI>
+    <LI>
+        The concepts <A HREF="concepts/input_filter.html">InputFilter</A> and <A HREF="concepts/output_filter.html">OutputFilter</A> were inspired by James Kanze's <I>extractors</I> and <I>inserters</I>. In addition, the names of the components <A HREF="classes/filtering_stream.html"><CODE>filtering_stream</CODE></A> and <A HREF="classes/filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A> are borrwed from Kanze, as are several of the Filters from the <A HREF="tutorial/tutorial [...]
+    </LI>
+    <LI CLASS="square">
+        <A HREF="guide/pipelines.html">Pipelines</A> were introduce by Jan Christiaan van Winkel and John van Krieken. <I>See</I> <A CLASS="bib_ref" HREF="bibliography.html#van_winkel">[van Winkel].</A> Dietmar Kühl suggested adding this functionality to the Iostreams library.
+    </LI>
+    <LI CLASS="square">
+        The facility for adding iterator ranges and output iterators to filter chains was inspired by work of Maxim Egorushkin. <I>See</I> <A CLASS="bib_ref" HREF="bibliography.html#egorushkin">[Egorushkin]</A>.
+    </LI>
+    <LI CLASS="square">
+        The devices for accessing <A HREF="classes/mapped_file.html">memory-mapped file</A> are based on work of Craig Henderson; <I>see</I> (<A CLASS="bib_ref" HREF="bibliography.html#henderson">[Henderson]</A>). Jonathan Graehl added several useful features. 
+    </LI>
+    <LI CLASS="square">
+        The devices for accessing <A HREF="classes/file_descriptor.html">file descriptors</A> are based on work of Nicolai Josuttis (<A CLASS="bib_ref" HREF="bibliography.html#josuttis1">[Josuttis1]</A> and <A CLASS="bib_ref" HREF="bibliography.html#josuttis2">[Josuttis2]</A>).
+    </LI>
+    <LI CLASS="square">
+        The <A HREF="classes/array.html">array devices</A> and <A HREF="classes/null.html">null devices</A> were inspired by work of Dayle Walker.
+    </LI>
+    <LI CLASS="square">
+        The Filters for compression and decompression were influenced by the work of Jeff Garland (<A CLASS="bib_ref" HREF="bibliography.html#garland">[Garland]</A>) and Jonathan de Halleux (<A CLASS="bib_ref" HREF="bibliography.html#de_halleux">[de Halleux]</A>).
+    </LI>
+    <LI CLASS="square">
+        The template <A HREF="classes/stdio_filter.html"><CODE>basic_stdio_filter</CODE></A> was inspired by work of Christopher Diggins. <I>See</I> <A CLASS="bib_ref" HREF="bibliography.html#diggins">[Diggins]</A>.
+    </LI>
+    <LI CLASS="square">
+        The treatment of 64-bit <A HREF="functions/positioning.html">stream offsets</A> was suggested by Gareth Sylvester-Bradley, who also supplied the implementation of the positioning functions used with the Dinkumware standard library.
+    </LI>
+    <LI CLASS="square">
+        The template <A HREF="functions/restrict.html#restriction"><CODE>restiction</CODE></A> was suggested by David Abrahams. <I>See</I>  <A CLASS="bib_ref" HREF="bibliography.html#abrahams2">[Abrahams2]</A>.
+    </LI>
+    <LI CLASS="square">
+        Maxim Egorushkin, Larry Evans, George M. Garner, Jonathan Graehl, Robert Ramey, Rob Stewart, John Torjo, Pavel Vozenilek and Carlo Woods provided extensive criticism of various versions of the library.
+    </LI>
+    <LI CLASS="square">
+        Angelika Langer and James Kanze provided useful insights into the proper role of exceptions in the Iostream library.
+    </LI>
+    <LI CLASS="square">
+        Robert Ramey's documentation for <A HREF="../../serialization/index.html" TARGET="_top">Boost.Serialization</A> provided the inspiration for the <A HREF="http://www.kangaroologic.com/tree_control/doc/tree/doc/demo.html?path=1" TARGET="_top">Javascript Tree Control</A> used in this documenation.
+    </LI>
+    <LI CLASS="square">
+        Jeff Garland served as review manager and provided helpful criticism and guidance.
+    </LI>
+    <LI CLASS="square">
+        Those who participated in the formal review or the post-review discussions, or who submitted bug reports or patches, include (in no particular order) Adam Peterson, Joaquín M López Muñoz, Neal D. Becker, Stas Garifulin, Vladimir Prus, Rob Stewart, Robert Ramey, Michel Decima, Michiel Salters, Pedro Lamarão, Dietmar Kühl, Oleg Rekutin, Reece Dunn, Stefan Slapeta, Jeff Flinn, Jeff Garland, Eugene Lazutkin, John Torjo, Brian Braatz, Keith Burton, Kei [...]
+    </LI>
+</UL>
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/bibliography.html b/vendor/pdalboost/libs/iostreams/doc/bibliography.html
new file mode 100644
index 0000000..babe889
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/bibliography.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Bibliography</TITLE>
+    <LINK REL="stylesheet" HREF="../../../boost.css">
+    <LINK REL="stylesheet" HREF="theme/iostreams.css">
+    <STYLE> 
+        A { text-decoration:none } 
+        TH { font-weight:normal } 
+    </STYLE>
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Bibliography</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<TABLE CELLPADDING=7=2>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="abrahams1">[Abrahams1]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Abrahams, D. <A HREF="http://www.boost.org/more/generic_exception_safety.html" TARGET="_top">Exception Safety in Generic Components.</A> <I>In</I> M. Jazayeri, R. Loos, D. Musser (eds.), <I>Generic Programming '98, Proc. of a Dagstuhl Seminar</I>, Lecture Notes on Computer Science, Vol. 1766, pp. 69-79. Springer-Verlag Berlin Heidelberg, 2000.
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="abrahams2">[Abrahams2]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Abrahams, D. Re: iostreams library review. Post to mailing list gmane.comp.lib.boost.devel. June 1, 2004. <I>See</I> <A HREF="http://lists.boost.org/boost/2004/06/6280.php" TARGET="_top"><CODE>http://lists.boost.org/boost/2004/06/6280.php</CODE></A>.</TD>
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="deutsch1">[Deutsch1]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Deutch, P. and Gailly, J-L. Z<SPAN STYLE="font-size:80%">LIB</SPAN> Compressed Data Format Specification version 3.3. R<SPAN STYLE="font-size:80%">FC</SPAN>-1950. <I>See</I> <A HREF="http://www.ietf.org/rfc/rfc1950.txt" TARGET="_top"><CODE>http://www.ietf.org/rfc/rfc1950.txt</CODE></A>.</TD>
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="deutsch2">[Deutsch2]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Deutsch, P. D<SPAN STYLE="font-size:80%">EFLATE</SPAN> Compressed Data Format Specification version 1.3. R<SPAN STYLE="font-size:80%">FC</SPAN>-1951. <I>See</I> <A HREF="http://www.ietf.org/rfc/rfc1951.txt" TARGET="_top"><CODE>http://www.ietf.org/rfc/rfc1951.txt</CODE></A>.</TD>
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="deutsch3">[Deutsch3]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Deutsch, P. G<SPAN STYLE="font-size:80%">ZIP</SPAN> File Format Specification Version 4.3. R<SPAN STYLE="font-size:80%">FC</SPAN>-1952. <I>See</I> <A HREF="http://www.ietf.org/rfc/rfc1952.txt" TARGET="_top"><CODE>http://www.ietf.org/rfc/rfc1952.txt</CODE></A>.</TD>
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="diggins">[Diggins]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Diggins, C. Revisiting Unix Filters. C/C++ User Journal, CMP Media LCC, ISSN 1075-2838, Vol. 23, No. 5, May 2005. <I>See</I> <A HREF="http://www.cuj.com/documents/s=9724/cuj0505diggins/" TARGET="_top"><CODE>http://www.cuj.com/documents/s=9724/cuj0505diggins/</CODE></A>.</TD>
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="dimov">[Dimov]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Dimov, P., Hinnant, H. and Abrahams, A. The Forwarding Problem: Arguments. C++ standards committe document N1385=02-0043, September, 2002. <I>See</I> <A HREF="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1385.htm" TARGET="_top"><CODE>http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1385.htm</CODE></A>.</TD>
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="egorushkin">[Egorushkin]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Egorushkin, M. sequence_buffer.h. <I>See</I> <A HREF="http://lists.boost.org/MailArchives/boost/msg48453.php" TARGET="_top"><CODE>http://lists.boost.org/MailArchives/boost/msg48453.php</CODE></A>.</TD>
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="gailly">[Gailly]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Gailly, J. and Adler, M. <I>The Zlib General Purpose Compression Library</I>. <I>See</I> <A HREF="http://www.gzip.org/zlib" TARGET="_top"><CODE>http://www.gzip.org/zlib</CODE></A>.</TD>
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="garland">[Garland]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Garland, J. <I>Boost ZStream</I>.<A CLASS="footnote_ref" NAME="note_1_ref" HREF="#note_1"><SUP>[1]</SUP></A> 
+        Available at the Boost <A HREF="http://groups.yahoo.com/files/boost/compressed_streams/zstream_boost.zip" TARGET="_top">Yahoo Files Section</A> (<I>see</I> <A HREF="http://www.boost.org/more/mailing_lists.htm#main" TARGET="_top">here</A> for registration information).</TD> 
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="de_halleux">[de Halleux]</A></TD><TD WIDTH="1em"></TH>
+    <TD>de Halleux, J. <I>ZipStream</I>. Available at the Boost <A HREF="http://groups.yahoo.com/files/boost/zipstream/ZipStream_20nov.zip" TARGET="_top">Yahoo Files Section</A> (<I>see</I> <A HREF="http://www.boost.org/more/mailing_lists.htm#main" TARGET="_top">here</A> for registration information), or at <A HREF="http://www.codeproject.com/vcpp/stl/zipstream.asp" TARGET="_top">The Code Project</A>.</TD> 
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="henderson">[Henderson]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Henderson, C. <I>Boost Memory Mapped File</I>.<A CLASS="footnote_ref" NAME="note_1_ref2" HREF="#note_1"><SUP>[1]</SUP></A> Available in the <A HREF="http://www.boost.org/more/mailing_lists.htm#sandbox" TARGET="_top">Boost Sandbox</A>.</TD>
+</TR>
+<TR>
+    <TH ALIGN="left" VALIGN="top"><A NAME="ieee">[I<SPAN STYLE="font-size:80%">EEE</SPAN>]</A></TD><TD WIDTH="1em"></TH>
+    <TD><I>I<SPAN STYLE="font-size:80%">EEE</SPAN> Std 1003.1, 2004 Edition</I>, Shells & Utilities volume. <I>See</I> <A HREF="http://www.opengroup.org/onlinepubs/009695399/utilities/grep.html" TARGET="_top"><CODE>http://www.opengroup.org/onlinepubs/009695399/utilities/grep.html</CODE></A>.</TD></TD>
+</TR>
+<TR>
+    <TH ALIGN="left" VALIGN="top"><A NAME="iso">[I<SPAN STYLE="font-size:80%">SO</SPAN>]</A></TD><TD WIDTH="1em"></TH>
+    <TD><I>I<SPAN STYLE="font-size:80%">SO</SPAN>/I<SPAN STYLE="font-size:80%">EC</SPAN> 14882:1998(E) Programming Language C++, 2nd ed.</I>. I<SPAN STYLE="font-size:80%">SO</SPAN>/I<SPAN STYLE="font-size:80%">EC</SPAN>, 2003.
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="josuttis1">[Josuttis1]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Josuttis, N. <I>The C++ Standard Library, A Tutorial and Reference</I>. Addison-Wesley, 1999.</TD>
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="josuttis2">[Josuttis2]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Josuttis, N. fdstream.hpp: Classes for File Descriptors and File Handles. <I>See</I> <A HREF="http://www.josuttis.com/cppcode/fdstream.html" TARGET="_top"><CODE>http://www.josuttis.com/cppcode/fdstream.html</CODE></A>.</TD>
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="kanze">[Kanze]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Kanze, J. Filtering streambufs, Variations on a 
+        Theme by Schwarz. <I>C++ Report</I>, Sept 1998. </TD>
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="langer">[Langer]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Langer, A. and Kreft, K. <I>Standard C++ IOStreams and Locales</I>. Addison-Wesley, 1999.</TD>
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="maddock">[Maddock]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Maddock, J. <A HREF="http://www.boost.org/libs/regex" TARGET="_top"><I>The Boost Regular Expression Library</I></A>. Boost, 2000.</TD>
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A name="seward">[Seward]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Seward, J. <I>The Libbzip2 Compression Library</I>. See <A HREF="http://www.bzip.org/" TARGET="_top"><CODE>http://www.bzip.org</CODE></A>.</TD>
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="sutter">[Sutter]</A></TD><TD WIDTH="1em"></TH>
+    <TD>Sutter, H. <I>More Exceptional C++, 40 New Engineering Puzzles, Programming Problems, and Solutions</I>. C++ In-Depth Series, B. Stroustrup, ed. Addison-Wesley, 2002.</TD>
+</TR>
+<TR>
+    <TH ALIGN="left"  VALIGN="top"><A NAME="van_winkel">[van Winkel]</A></TD><TD WIDTH="1em"></TH>
+    <TD>van Winkel, J. C., and van Krieken, J. GNIR TS ESAC REWOL: Bringing UNIX Filters to iostream. Presented at the ACCU Spring Conference, 2003.</TD>
+</TR>
+
+</TABLE>
+
+<!-- Begin Footnotes -->
+
+<HR>
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_1" HREF="#note_1_ref"><SUP>[1]</SUP></A>Not an official Boost library.
+</P>
+
+<!-- End Footnotes -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/aggregate.html b/vendor/pdalboost/libs/iostreams/doc/classes/aggregate.html
new file mode 100644
index 0000000..0a7c915
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/aggregate.html
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template aggregate_filter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>aggregate_filter</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+  <DT><A href="#examples">Examples</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The class template <CODE>aggregate_filter</CODE> is a <A HREF='../concepts/dual_use_filter.html'>DualUseFilter</A> for use as a base class by Filters which filter an entire character sequence at once. Because a <CODE>aggregate_filter</CODE> must read an entire character sequence into memory before it begins to filter, it is not suitable in low-memory situations or for processing character sequences which have no natural end, such as stock tickers. Because of these limitations, <CODE> [...]
+</P>
+<P>
+    When used as an <A HREF="../concepts/input_filter.html">InputFilter</A>, an instance of <CODE>aggregate_filter</CODE> reads to the end of the stream as soon as input is commenced. The entire contents of the stream are filtered using the <CODE>private virtual</CODE> function <A HREF="#do_filter"><CODE>do_filter</CODE></A>. The filtered data is stored and used to satisfy all future requests for input until the end of the filtered data is reached.
+</P>
+<P>
+    When used as an <A HREF="../concepts/output_filter.html">OutputFilter</A>, an instance of <CODE>aggregate_filter</CODE> stores all data written to it without passing it downstream. When the stream is closed, the entire contents of the stream are filtered using <A HREF="#do_filter"><CODE>do_filter</CODE></A>. The filtered data is then written, all at once, to the next downstream Filter or Device.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/filter/aggregate.hpp"><CODE><boost/iostreams/filter/aggregate.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><vector></SPAN>
+
+<SPAN CLASS="keyword"><SPAN CLASS="keyword">template</SPAN></SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Ch</A>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Tr</A> = std::char_traits<Ch>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Alloc</A> = std::allocator<Ch> >
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#template_params">aggregate_filter</A>  {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> Ch                            char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN>        category;
+    <SPAN CLASS="keyword">typedef</SPAN> std::vector<Char, Alloc>      vector_type;
+    <SPAN CLASS="keyword">virtual</SPAN> ~aggregate_filter();
+    <SPAN CLASS="omitted">...</SPAN>
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">virtual</SPAN> <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#do_filter">do_filter</A>(<SPAN CLASS="keyword">const</SPAN> vector_type& src, vector_type& dest) = 0;
+};
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Ch</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The character type</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Tr</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The traits type</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A standard library allocator type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to instantiate <CODE>std::vector</CODE></TD>
+    </TR>
+</TABLE>
+
+<A NAME="do_filter"></A>
+<H4><CODE>aggregate_filter::do_filter</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">virtual</SPAN> <SPAN CLASS="keyword">void</SPAN> <B>do_filter</B>(<SPAN CLASS="keyword">const</SPAN> vector_type& src, vector_type& dest) = 0;</PRE>
+
+<P>Reads unflitered characters from <CODE>src</CODE> and appends filtered characters to <CODE>dest</CODE>, returning after all the characters in <CODE>src</CODE> have been consumed.</P>
+
+<A NAME="examples"></A>
+<H2>Examples</H2>
+
+<P>For example uses of <CODE>aggregate_filter</CODE>, see the headers <A CLASS="header" HREF="../../../../boost/iostreams/filter/regex.hpp"><CODE><boost/iostreams/filter/regex.hpp></CODE></A> and <A CLASS="header" HREF="../../../../boost/iostreams/filter/stdio.hpp"><CODE><boost/iostreams/filter/stdio.hpp></CODE></A>.</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/array.html b/vendor/pdalboost/libs/iostreams/doc/classes/array.html
new file mode 100644
index 0000000..a0ec2b9
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/array.html
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Array Devices</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Array Devices</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#implementation">Implementation</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A>
+    <DL>
+      <DT><A href="#array_source">Class template <CODE>basic_array_source</CODE></A></DT>
+      <DT><A href="#array_sink">Class template <CODE>basic_array_sink</CODE></A></DT>
+      <DT><A href="#array">Class template <CODE>basic_array</CODE></A></DT>
+    </DL>
+  </DT>
+  <DT><A href="#acknowledgments">Acknowledgments</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The class templates <CODE>basic_array_source</CODE>, <CODE>basic_array_sink</CODE> and <CODE>basic_array</CODE> provide access to a sequence of characters in memory. The array Devices do not manage the lifetimes of the underlying character sequences.
+</P>
+
+<A NAME="implementation"></A>
+<H2>Implementation</H2>
+
+<P>
+    The array Devices are implemented as <A HREF="../concepts/direct.html">Direct</A> Devices in order to provide efficient unbuffered access to the underlying character sequences.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/device/array.hpp"><CODE><boost/iostreams/device/array.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="array_source"></A>
+<H3>Class template <CODE>basic_array_source</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Model of <A HREF="../concepts/source.html">Source</A> providing read-only access to a sequence of characters in memory.</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#array_source_params">Ch</A>>
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#array_source_params">basic_array_source</A> { 
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> Ch          char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> source_tag  category;
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">int</SPAN> N> <A CLASS="documented" HREF="#array_source_constructors">basic_array_source</A>(char_type (&)[N]);
+    <A CLASS="documented" HREF="#array_source_constructors">basic_array_source</A>(<SPAN CLASS="keyword">const</SPAN> char_type* begin, <SPAN CLASS="keyword">const</SPAN> char_type* end);
+    <A CLASS="documented" HREF="#array_source_constructors">basic_array_source</A>(<SPAN CLASS="keyword">const</SPAN> char_type* begin, std::size_t length);
+    <SPAN CLASS="omitted">...</SPAN>
+};
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_array_source<<SPAN CLASS="keyword">char</SPAN>>     <SPAN CLASS='defined'>array_source</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> basic_array_source<<SPAN CLASS="keyword">wchar_t</SPAN>>  <SPAN CLASS='defined'>warray_source</SPAN>;
+
+} } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE>
+
+<A NAME="array_source_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em">
+<TR>
+    <TD><I>Ch</I></TD><TD VALIGN="top">-</TD>
+    <TD>The character type.</TD>
+</TR>
+</TABLE>
+
+<A NAME="array_source_constructors"></A>
+<H4><CODE>basic_array_source::basic_array_source</CODE></H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">int</SPAN> N> basic_array_source(char_type (&)[N]);
+basic_array_source(<SPAN CLASS="keyword">const</SPAN> char_type* begin, <SPAN CLASS="keyword">const</SPAN> char_type* end);
+basic_array_source(<SPAN CLASS="keyword">const</SPAN> char_type* begin, std::size_t length);</PRE>
+    
+<P>Constructs a <CODE>basic_array_source</CODE> to read from the indicated character sequence.</P>
+
+<A NAME="array_sink"></A>
+<H3>Class template <CODE>basic_array_sink</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Model of <A HREF="../concepts/sink.html">Sink</A> providing write-only access to a sequence of characters in memory.
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#array_sink_params">Ch</A>>
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#array_sink_params">basic_array_sink</A> { 
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> Ch        char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> sink_tag  category;
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">int</SPAN> N> <A CLASS="documented" HREF="#array_sink_constructors">basic_array_sink</A>(char_type (&)[N]);
+    <A CLASS="documented" HREF="#array_sink_constructors">basic_array_sink</A>(char_type* begin, char_type* end);
+    <A CLASS="documented" HREF="#array_sink_constructors">basic_array_sink</A>(char_type* begin, std::size_t length);
+
+    <SPAN CLASS="comment">// Additional nember functions</SPAN>
+};
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_array_sink<<SPAN CLASS="keyword">char</SPAN>>     <SPAN CLASS='defined'>array_sink</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> basic_array_sink<<SPAN CLASS="keyword">wchar_t</SPAN>>  <SPAN CLASS='defined'>warray_sink</SPAN>;
+
+} } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE>
+
+<A NAME="array_sink_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em">
+<TR>
+    <TD><I>Ch</I></TD><TD VALIGN="top">-</TD>
+    <TD>The character type.</TD>
+</TR>
+</TABLE>
+
+<A NAME="array_sink_constructors"></A>
+<H4><CODE>basic_array_sink::basic_array_sink</CODE></H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">int</SPAN> N> basic_array_sink(char_type (&)[N]);
+basic_array_sink(char_type* begin, char_type* end);
+basic_array_sink(char_type* begin, std::size_t length);</PRE>
+    
+<P>Constructs an <CODE>basic_array_sink</CODE> to write to the indicated character sequence.</P>
+
+<A NAME="array"></A>
+<H3>Class template <CODE>basic_array</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Model of <A HREF="../concepts/seekable_device.html">SeekableDevice</A> providing read-write access to a sequence of characters in memory.
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#array_params">Ch</A>>
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#array_params">basic_array</A> {
+<SPAN CLASS="keyword">public</SPAN>:    
+    <SPAN CLASS="keyword">typedef</SPAN> Ch                   char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> seekable_device_tag  category;
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">int</SPAN> N> <A CLASS="documented" HREF="#array_constructor">basic_array</A>(char_type (&)[N]);
+    <A CLASS="documented" HREF="#array_constructor">basic_array</A>(char_type* begin, char_type* end);
+    <A CLASS="documented" HREF="#array_constructor">basic_array</A>(char_type* begin, std::size_t length);
+
+    <SPAN CLASS="comment">// Additional nember functions</SPAN>
+};
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_array<<SPAN CLASS="keyword">char</SPAN>>     <SPAN CLASS='defined'>array</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> basic_array<<SPAN CLASS="keyword">wchar_t</SPAN>>  <SPAN CLASS='defined'>warray</SPAN>;
+
+} } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE>
+
+<A NAME="array_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em">
+<TR>
+    <TD><I>Ch</I></TD><TD VALIGN="top">-</TD>
+    <TD>The character type.</TD>
+</TR>
+</TABLE>
+
+<A NAME="array_constructor"></A>
+<H4><CODE>array::array</CODE></H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">int</SPAN> N> basic_array(char_type (&)[N]);
+basic_array(char_type* begin, char_type* end);
+basic_array(char_type* begin, std::size_t length);</PRE>
+
+<P>Constructs a <CODE>basic_array</CODE> to access the indicated character sequence.</P>
+
+<A NAME="acknowledgments"></A>
+<H2>Acknowledgments</H2>
+
+<P>
+The concept of Devices which provide unbuffered access to character sequences was suggested by <A HREF="http://www.boost.org/people/daryle_walker.html">Daryle Walker's</A> <A HREF="http://boost-sandbox.cvs.sourceforge.net/viewvc/boost-sandbox/boost-sandbox/libs/io/doc/array_stream.html"><CODE>array_stream</CODE></A> template.
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/back_inserter.html b/vendor/pdalboost/libs/iostreams/doc/classes/back_inserter.html
new file mode 100644
index 0000000..7eb0de8
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/back_inserter.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>class template back_insert_device</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>back_insert_device</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#synopsis">Synopsis</A></DT>
+</DL>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The header <A CLASS="header" HREF="../../../../boost/iostreams/device/back_inserter.hpp"><CODE><boost/iostreams/device/back_inserter.hpp></CODE></A> contains the definition of the class template <CODE>back_insert_device</CODE> — implementing a <A HREF="../concepts/sink.html">Sink</A> which appends to a standard library sequence container — as well as the definition of a corresponding object generator, the function template <CODE>boost::iostreams::back_inserter</CODE>.
+</P>
+
+<P>
+    The Iostream Library allows OutputIterators to be used in many places where <A HREF="../concepts/sink.html">Sinks</A> are allowed. However, using <CODE>boost::iostreams::back_inserter</CODE> my be somewhat more efficient than using <CODE>std::back_inserter</CODE>, since the former uses the function <CODE>insert</CODE> to append a sequence of characters in one operation. Furthermore, <CODE>std::back_insert_iterator</CODE> is not strictly a model of <A HREF="../concepts/sink.html">Sink [...]
+</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS="keyword">typedef</SPAN> io::stream< io::back_insert_device<std::string> > my_stream</PRE>
+
+<P>But not</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">typedef</SPAN> io::stream< std::back_insert_iterator<std::string> > my_stream</PRE>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/device/back_inserter.hpp"><CODE><boost/iostreams/device/back_inserter.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="synopsis"></A>
+<H2>Synopsis</H2>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A HREF="#back_insert_device_template_params" CLASS="documented">Container</A>>
+<SPAN CLASS="keyword">class</SPAN> <A HREF="#back_insert_device_template_params" CLASS="documented">back_insert_device</A> {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">typename</SPAN> Container::value_type  char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> sink_tag                        category;
+    <A HREF="#back_insert_device_constructor" CLASS="documented">back_insert_device</A>(Container& cnt);
+    <SPAN CLASS="omitted">...</SPAN> 
+};
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A HREF="#back_insert_device_template_params" CLASS="documented">Container</A>>
+<A CLASS="documented" HREF="#back_insert_device_template_params">back_insert_device</A><Container> <A CLASS="documented" HREF="#back_inserter">back_inserter</A>(Container& cnt);
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="back_insert_device_template_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Container</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A C++ standard library sequence type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 23.1.1).
+    </TR>
+</TABLE>
+
+<A NAME="back_insert_device_constructor"></A>
+<H4><CODE>back_insert_device::back_insert_device</CODE></H4>
+
+<PRE CLASS="broken_ie">    back_insert_device(Container& cnt);</PRE>
+
+<P>Constructs an instance of <CODE>back_insert_device</CODE> for appending to the given container. The given reference must remain valid for the lifetime of the instance of <CODE>back_insert_device</CODE>.</P>
+
+<A NAME="back_inserter"></A>
+<H4><CODE>back_inserter</CODE></H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Container>
+back_insert_device<Container> back_inserter(Container& cnt);</PRE>
+
+<P>Returns an instance of <CODE>back_insert_device</CODE> for appending to the given container.</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/bzip2.html b/vendor/pdalboost/libs/iostreams/doc/classes/bzip2.html
new file mode 100644
index 0000000..cfa24e7
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/bzip2.html
@@ -0,0 +1,324 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Bzip2 Filters</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Bzip2 Filters</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#acknowledgments">Acknowledgments</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#synopsis">Synopsis</A></DT>
+  <DT><A HREF="#reference">Reference</A>
+    <DL class="page-index">
+      <DT><A HREF="#constants">namespace <CODE>boost::iostreams::bzip2</CODE></A></DT>
+      <DT><A HREF="#bzip2_params">Class <CODE>bzip2_params</CODE></A></DT>
+      <DT><A HREF="#basic_bzip2_compressor">Class template <CODE>bzip2_compressor</CODE></A></DT>
+      <DT><A HREF="#basic_bzip2_decompressor">Class template <CODE>bzip2_decompressor</CODE></A></DT>
+      <DT><A HREF="#bzip2_error">Class <CODE>bzip2_error</CODE></A></DT>
+    </DL>
+  </DT>
+  <DT><A href="#examples">Examples</A></DT>
+  <DT><A href="#installation">Installation</A></DT>
+</DL>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The class templates <A HREF="#basic_bzip2_compressor"><CODE>basic_bzip2_compressor</CODE></A> and <A HREF="#basic_bzip2_decompressor"><CODE>basic_bzip2_decompressor</CODE></A> perform compression and decompression using Julian Seward's libbzip2 compression library (<A CLASS="bib_ref" HREF="../bibliography.html#seward">[Seward]</A>). 
+</P>
+<P>
+    The bzip2 Filters are <A HREF="../concepts/dual_use_filter.html">DualUseFilters</A> so that they may be used for either input or output. Most commonly, however, the compression Filters will be used for output and the decompression Filters for input.
+</P>
+
+<A NAME="acknowledgments"></A>
+<H2>Acknowledgments</H2>
+
+<P>
+    The bzip2 Filters were influences by the work of Jeff Garland (<A CLASS="bib_ref" HREF="../bibliography.html#garland">[Garland]</A>) and Jonathan de Halleux (<A CLASS="bib_ref" HREF="../bibliography.html#de_halleux">[de Halleux]</A>).
+</P>
+
+Thanks to <A HREF="mailto:jseward at acm.org">Julian Seward</A> for making his excellent library available to the public with a <A HREF="http://www.boost.org/more/lib_guide.htm#Requirements">Boost-compatible</A> license.
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/filter/bzip2.hpp"><CODE><boost/iostreams/filter/bzip2.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="synopsis"></A>
+<H2>Synopsis</H2>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">namespace</SPAN> <A CLASS="documented" HREF="#constants">bzip2</A> {
+                    
+    <SPAN CLASS="comment">// Error codes</SPAN>
+
+<SPAN CLASS="keyword">extern</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#data_error">data_error</A>;
+<SPAN CLASS="keyword">extern</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#data_error_magic">data_error_magic</A>;
+<SPAN CLASS="keyword">extern</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#config_error">config_error</A>;
+
+}   <SPAN CLASS="comment">// End namespace boost::iostreams::bzip2</SPAN>
+
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#bzip2_params">bzip2_params</A>;
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Alloc = std::allocator<<SPAN CLASS="keyword">char</SPAN>> >
+<SPAN CLASS="keyword">struc</SPAN>t <A CLASS="documented" HREF="#basic_bzip2_compressor">basic_bzip2_compressor</A>;
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Alloc = std::allocator<<SPAN CLASS="keyword">char</SPAN>> >
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#basic_bzip2_decompressor">basic_bzip2_decompressor</A>;
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_bzip2_compressor<>   <SPAN CLASS="defined">bzip2_compressor</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> basic_bzip2_decompressor<> <SPAN CLASS="defined">bzip2_decompressor</SPAN>;
+
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#bzip2_error">bzip2_error</A>;
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="constants"></A>
+<H3>Namespace <CODE>boost::iostreams::bzip2</CODE></H3>
+
+<P>The namespace <CODE>boost::iostreams::bzip2</CODE> contains integral error codes. The constants have the following interpretations. <I>See</I> <A CLASS="bib_ref" HREF="../bibliography.html#seward">[Seward]</A> for additional details.</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=1 CELLPADDING=4>
+<TR><TH>Constant</TH><TH>Interpretation</TH></TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="data_error"></A><CODE>data_error</CODE></TD>
+        <TD>Indicates that the compressed data stream is corrupted. Equal to <CODE>BZ_DATA_ERROR</CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="data_error_magic"></A><CODE>data_error_magic</CODE></TD>
+        <TD>Indicates that the compressed data stream does not begin with the 'magic' sequence <CODE>'B' 'Z' 'h'</CODE>. Equal to <CODE>BZ_DATA_ERROR_MAGIC</CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="config_error"></A><CODE>config_error</CODE></TD>
+        <TD>Indicates that libbzip2 has been improperly configured for the current platform. Equal to <CODE>BZ_CONFIG_ERROR</CODE>.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="bzip2_params"></A>
+<H3>Class <CODE>bzip2_params</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Encapsulates the parameters used to configure <A HREF="#basic_bzip2_compressor"><CODE>basic_bzip2_compressor</CODE></A> and <A HREF="#basic_bzip2_decompressor"><CODE>basic_bzip2_decompressor</CODE></A>.</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">struct</SPAN> <SPAN CLASS="defined">bzip2_params</SPAN> {
+
+    <SPAN CLASS="comment">// Non-explicit constructor for compression</SPAN>
+    <A CLASS="documented" HREF="#bzip2_params_constructors">bzip2_params</A>( <SPAN CLASS="keyword">int</SPAN> block_size   = <SPAN CLASS="omitted">default value</SPAN>,
+                  <SPAN CLASS="keyword">int</SPAN> work_factor  = <SPAN CLASS="omitted">default value</SPAN> );
+
+    <SPAN CLASS="comment">// Constructor for decompression.</SPAN>
+    <A CLASS="documented" HREF="#bzip2_params_constructors">bzip2_params</A>( <SPAN CLASS="keyword">bool</SPAN> small );
+
+    <SPAN CLASS="keyword">union</SPAN> {
+        <SPAN CLASS="keyword">int</SPAN>   <A CLASS="documented" HREF="#block_size">block_size</A>;    <SPAN CLASS="comment">// For compression</SPAN>
+        <SPAN CLASS="keyword">bool</SPAN>  <A CLASS="documented" HREF="#small">small</A>;         <SPAN CLASS="comment">// For decompression</SPAN>
+    };
+    <SPAN CLASS="keyword">int</SPAN>       <A CLASS="documented" HREF="#work_factor">work_factor</A>;   <SPAN CLASS="comment">// For compression</SPAN>
+};</PRE>
+
+<A NAME="bzip2_params_constructors"></A>
+<H4><CODE>bzip2_params::bzip2_params</CODE></H4>
+
+<PRE CLASS="broken_ie">    bzip2_params( <SPAN CLASS="keyword">int</SPAN> block_size   = <SPAN CLASS="omitted">default value</SPAN>,
+                  <SPAN CLASS="keyword">int</SPAN> work_factor  = <SPAN CLASS="omitted">default value</SPAN> );
+    bzip2_params( <SPAN CLASS="keyword">bool</SPAN> small );</PRE>
+
+<P>The first member constructs a <CODE>bzip2_params</CODE> object for configuring <CODE>basic_bzip2_compressor</CODE>.</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="block_size"></A><I>block_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Block size to use for compression; actual block size is <CODE>100000 * </CODE><I>block_size</I>. Must be in range <CODE>1-9</CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="work_factor"></A><I>work_factor</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Controls behavior of compression with worst case data. Must be in the range 0-250.</TD>
+    </TR>
+</TABLE>
+
+<P>The second constructs a <CODE>bzip2_params</CODE> object for configuring <CODE>basic_bzip2_decompressor</CODE>.</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="small"></A><I>small</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Indicates whether a slower decompression algorithm, using less memory, should be used.</TD>
+    </TR>
+</TABLE>
+
+<P><I>See</I> <A CLASS="bib_ref" HREF="../bibliography.html#seward">[Seward]</A> for additional details.</P>
+
+<A NAME="basic_bzip2_compressor"></A>
+<H3>Class template <CODE>basic_bzip2_compressor</CODE></H3>
+
+<H4>Description</H4>
+
+Model of <A HREF="../concepts/dual_use_filter.html">DualUseFilter</A> which performs compression using libbzip2 (<A CLASS="bib_ref" HREF="../bibliography.html#seward">[Seward]</A>).
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#basic_bzip2_compressor_params">Alloc</A> = std::allocator<<SPAN CLASS="keyword">char</SPAN>> >
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#basic_bzip2_compressor_params">basic_bzip2_compressor</A> {
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">char</SPAN>                    char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN>  category;
+
+    <A CLASS="documented" HREF="#basic_bzip2_compressor_constructors">basic_bzip2_compressor</A>( <SPAN CLASS="keyword">const</SPAN> <A CLASS="documented" HREF="#bzip2_params">bzip2_params</A>& = <SPAN CLASS="omitted">bzip2::default_block_size</SPAN>,
+                            std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN> );
+    <SPAN CLASS="omitted">...</SPAN>
+};
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_bzip2_compressor<> <SPAN CLASS="defined">bzip2_compressor</SPAN>;</PRE>
+
+<A NAME="basic_bzip2_compressor_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A C++ standard library allocator type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate a character buffer and to configure libbzip2.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="basic_bzip2_compressor_constructors"></A>
+<H4><CODE>basic_bzip2_compressor::basic_bzip2_compressor</CODE></H4>
+
+<PRE CLASS="broken_ie">    basic_bzip2_compressor(<SPAN CLASS="keyword">const</SPAN> <A CLASS="documented" HREF="#bzip2_params">bzip2_params</A>&, std::streamsize buffer_size);</PRE>
+
+<P>Constructs an instance of <CODE>basic_bzip2_compressor</CODE> with the given parameters and buffer size. Since a <A CLASS="documented" HREF="#bzip2_params"><CODE>bzip2_params</CODE></A> object is implicitly constructible from an <CODE>int</CODE> representing a block size, an <CODE>int</CODE> may be passed as the first constructor argument.</P>
+
+<A NAME="basic_bzip2_decompressor"></A>
+<H3>Class template <CODE>basic_bzip2_decompressor</CODE></H3>
+
+<H4>Description</H4>
+
+Model of <A HREF="../concepts/dual_use_filter.html">DualUseFilter</A> which performs decompression using libbzip2 (<A CLASS="bib_ref" HREF="../bibliography.html#seward">[Seward]</A>).
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#basic_bzip2_decompressor_params">Alloc</A> = std::allocator<<SPAN CLASS="keyword">char</SPAN>> >
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#basic_bzip2_decompressor_params">basic_bzip2_decompressor</A> {
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">char</SPAN>                    char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN>  category;
+
+    <A CLASS="documented" HREF="#basic_bzip2_decompressor_constructors">basic_bzip2_decompressor</A>( <SPAN CLASS="keyword">bool</SPAN> small = <SPAN CLASS="omitted">false</SPAN>, 
+                              std::streamsize buffer_size = 
+                                  <SPAN CLASS="omitted">default value</SPAN> );
+    <SPAN CLASS="omitted">...</SPAN>
+};
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_bzip2_decompressor<> <SPAN CLASS="defined">bzip2_decompressor</SPAN>;</PRE>
+
+<A NAME="basic_bzip2_decompressor_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A C++ standard library allocator type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate a character buffer and to configure libbzip2.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="basic_bzip2_decompressor_constructors"></A>
+<H4><CODE>basic_bzip2_decompressor::basic_bzip2_decompressor</CODE></H4>
+
+<PRE CLASS="broken_ie">    basic_bzip2_decompressor(<SPAN CLASS="keyword">bool</SPAN> small, std::streamsize buffer_size);</PRE>
+
+<P>Constructs an instance of <CODE>basic_bzip2_decompressor</CODE> with the given value for <A HREF="#small">small</A> and the given buffer size.</P>
+
+<A NAME="bzip2_error"></A>
+<H3>Class <CODE>bzip2_error</CODE></H3>
+
+<H4>Description</H4>
+
+Used by the bzip2 Filters to report errors.
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">class</SPAN> <SPAN CLASS="defined">bzip2_error</SPAN> : <SPAN CLASS="keyword">public</SPAN> std::ios_base::failure {
+<SPAN CLASS="keyword">public:</SPAN>
+    <A CLASS="documented" HREF="#bzip2_error_constructor">bzip2_error</A>(<SPAN CLASS="keyword">int</SPAN> error);
+    <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#bzip2_error_error">error</A>() const;
+};</PRE>
+
+<A NAME="bzip2_error_constructor"></A>
+<H4><CODE>bzip2_error::bzip2_error</CODE></H4>
+
+<PRE CLASS="broken_ie">    bzip2_error(<SPAN CLASS="keyword">int</SPAN> error);</PRE>
+
+<P>Constructs an instance of <CODE>bzip2_error</CODE> with the given error code from the namespace <A HREF="#constants"><CODE>boost::iostreams::bzip2</CODE></A>.</P>
+
+<A NAME="bzip2_error_error"></A>
+<H4><CODE>bzip2_error::error</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> error() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Returns an error code from the namespace <A HREF="#constants"><CODE>boost::iostreams::bzip2</CODE></A>.</P>
+
+<A NAME="examples"></A>
+<H2>Examples</H2>
+
+The following code decompresses data from a file and writes it to standard output.
+
+<PRE CLASS="broken_ie"><SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><fstream></SPAN>
+<SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><iostream></SPAN>
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/filtering_streambuf.hpp"><SPAN CLASS="literal"><boost/iostreams/filtering_streambuf.hpp></SPAN></A>
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/copy.hpp"><SPAN CLASS="literal"><boost/iostreams/copy.hpp></SPAN></A>
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/filter/bzip2.hpp"><SPAN CLASS="literal"><boost/iostreams/filter/bzip2.hpp></SPAN></A>
+
+int main() 
+{
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> boost::iostreams;
+
+    ifstream file(<SPAN CLASS="literal">"hello.bz2"</SPAN>, ios_base::in | ios_base::binary);
+    filtering_streambuf<input> in;
+    in.push(bzip2_decompressor());
+    in.push(file);
+    boost::iostreams::copy(in, cout);
+}</PRE>
+
+<A NAME="installation"></A>
+<H3>Installation</H3>
+
+<P>
+     The bzip2 Filters depend on the third-party libbz2 library, which is <I>not</I> included in the Boost distribution. Prebuilt libbz2 binaries are available on most UNIX and UNIX-like systems, and will be found automatically by the Boost build system. Users can also configure the Boost Iostream library to build libbz2 from the source code, which is available at the <A HREF="http://www.bzip.org/" TARGET="_top">libbz2 homepage</A>. For details on configuring the build system to find you [...]
+</P>
+
+<!-- Adler's obfuscated address is copied from his homepage -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/chain.html b/vendor/pdalboost/libs/iostreams/doc/classes/chain.html
new file mode 100644
index 0000000..a12fc6f
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/chain.html
@@ -0,0 +1,389 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template chain</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>chain</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    Chains are used by <A HREF='../guide/filtering_streams.html'>filtering streams and stream buffers</A> to manage their underlying sequence of Filters and Devices. A chain represents a sequence of zero or more Filters with an optional Device at the end. If a chain contains a Device, it is considered <I>complete</I> and can be used to perform i/o. When a chain is used for output, data passes through the first filter in the chain, then through the second filter, and so on, and eventually [...]
+</P>
+<P>
+    The class template <CODE>chain</CODE> is parameterized by a <A HREF='../guide/modes.html'>mode</A>. All the Filters and Devices which constitute a chain must have modes which refine the mode of the chain. For example, the class <CODE>chain<input></CODE> has mode <A HREF="../guide/modes.html#input">input</A>. All <A HREF="../concepts/filter.html">Filters</A> pushed onto such a chain must at least be <A HREF="../concepts/input_filter.html">InputFilters</A>. Any <A HREF="../concep [...]
+</P>
+<P>
+    Chains are <A HREF='../../../../doc/html/CopyConstructible.html' TARGET='_top'>CopyConstructible</A> and <A HREF='../../../../doc/html/Assignable.html' TARGET='_top'>Assignable</A>. A copy of a chain represents the same sequence of Filters and Devices as the original chain; the components are not copied.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/chain.hpp"><CODE><boost/iostreams/chain.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Mode</A>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Ch</A>    = <SPAN CLASS="keyword">char</SPAN>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Tr</A>    = std::char_traits<Ch>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Alloc</A> = std::allocator<<CODE>Ch</CODE>> >
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#chain">chain</A>;
+
+<SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Mode</A>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Ch</A>    = <SPAN CLASS="keyword">wchar_t</SPAN>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Tr</A>    = std::char_traits<Ch>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Alloc</A> = std::allocator<<CODE>Ch</CODE>> >
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#wchain">wchain</A>;
+
+<SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Mode</A>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Ch</A>    = <SPAN CLASS="keyword">char</SPAN>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Tr</A>    = std::char_traits<Ch>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Alloc</A> = std::allocator<<CODE>Ch</CODE>> >
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="chain.html">chain</A> : <SPAN CLASS="keyword">public</SPAN> <SPAN CLASS="omitted">implementation-defined stream type</SPAN> {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> Ch                      char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> Tr                      traits_type;
+    <SPAN CLASS="keyword">typedef</SPAN> Mode                    mode;
+    <SPAN CLASS="keyword">typedef</SPAN> Alloc                   allocator_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN>  size_type;
+
+    <A CLASS="documented" HREF="#default_constructor">chain</A>();
+    <A CLASS="documented" HREF="#copy_constructor">chain</A>(<SPAN CLASS='keyword'>const</SPAN> chain&);
+
+    std::streamsize <A CLASS='documented' HREF='#read'>read</A>(char_type* s, std::streamsize n);
+    std::streamsize <A CLASS='documented' HREF='#write'>write</A>(<SPAN CLASS='keyword'>const</SPAN> char_type* s, std::streamsize n);
+    <A CLASS='documented' HREF='../functions/positioning.html#synopsis'>stream_offset</A> <A CLASS='documented' HREF='#seek'>seek</A>(<A CLASS='documented' HREF='../functions/positioning.html#synopsis'>stream_offset</A> off, std::ios_base::seekdir way);
+
+    <SPAN CLASS='keyword'>const</SPAN> std::type_info& <A CLASS='documented' HREF='#component_type'>component_type</A>(<SPAN CLASS="keyword">int</SPAN> n) <SPAN CLASS='keyword'>const</SPAN>;
+
+    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> T>
+    T* <A CLASS='documented' HREF='#component'>component</A>(<SPAN CLASS="keyword">int</SPAN> n) <SPAN CLASS='keyword'>const</SPAN>;
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#policy_push">push</A>( <SPAN CLASS="keyword">const</SPAN> T& t,
+               std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN>,
+               std::streamsize pback_size = <SPAN CLASS="omitted">default value</SPAN> );
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> StreamOrStreambuf>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#stream_push">push</A>( StreamOrStreambuf& t,
+               std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN>,
+               std::streamsize pback_size = <SPAN CLASS="omitted">default value</SPAN> );
+
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#pop">pop</A>();
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#empty">empty</A>() <SPAN CLASS="keyword">const</SPAN>;
+    size_type <A CLASS="documented" HREF="#size">size</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#reset">reset</A>();
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#is_complete">is_complete</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#auto_close">auto_close</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#set_auto_close">set_auto_close</A>(<SPAN CLASS='keyword'>bool</SPAN> close);
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#sync">sync</A>();
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#strict_sync">strict_sync</A>();
+
+        <SPAN CLASS='comment'>// Deprecated members</SPAN>
+
+    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>int</SPAN> N>
+    <SPAN CLASS='keyword'>const</SPAN> std::type_info& <A CLASS='documented' HREF='#component_type'>component_type</A>() <SPAN CLASS='keyword'>const</SPAN>;
+
+    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>int</SPAN> N, <SPAN CLASS='keyword'>typename</SPAN> T>
+    T* <A CLASS='documented' HREF='#component'>component</A>() <SPAN CLASS='keyword'>const</SPAN>;
+};
+
+} } // End namespace boost::io</PRE>
+
+<A NAME="chain"></A>
+<H2>Class Template <CODE>chain</CODE></H2>
+
+<A NAME="template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Mode</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="../guide/modes.html#mode_tags">mode tag</A>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Ch</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The character type</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Tr</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The traits type</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A standard library allocator type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate character buffers</TD>
+    </TR>
+</TABLE>
+
+<A NAME="default_constructor"></A>
+<H4><CODE>chain::chain</CODE></H4>
+
+<PRE CLASS="broken_ie">    chain();</PRE>
+
+<P>
+    Constructs a <CODE>chain</CODE> with an empty chain of Filters and Devices.
+</P>
+
+<A NAME="copy_constructor"></A>
+<H4><CODE>chain::chain</CODE></H4>
+
+<PRE CLASS="broken_ie">    chain(<SPAN CLASS='keyword'>const</SPAN> chain& rhs);</PRE>
+
+<P>
+    Constructs a <CODE>chain</CODE> representing the same sequence of Filters and Devices as the given chain.
+</P>
+
+<A NAME="read"></A>
+<H4><CODE>chain::read</CODE></H4>
+
+<PRE CLASS="broken_ie">    std::streamsize read(char_type* s, std::streamsize n);</PRE>
+
+<P>
+      Invokes <A HREF='../functions/read.html'><CODE>read</CODE></A> on the first filter or device in this chain, which must be non-empty.
+</P>
+
+<A NAME="write"></A>
+<H4><CODE>chain::write</CODE></H4>
+
+<PRE CLASS="broken_ie">    std::streamsize write(<SPAN CLASS='keyword'>const</SPAN> char_type* s, std::streamsize n);</PRE>
+
+<P>
+      Invokes <A HREF='../functions/write.html'><CODE>write</CODE></A> on the first filter or device in this chain, which must be non-empty.
+</P>
+
+<A NAME="seek"></A>
+<H4><CODE>chain::seek</CODE></H4>
+
+<PRE CLASS="broken_ie">    <A CLASS='documented' HREF='../functions/positioning.html#synopsis'>stream_offset</A> seek(<A CLASS='documented' HREF='../functions/positioning.html#synopsis'>stream_offset</A> off, std::ios_base::seekdir way);
+</PRE>
+
+<P>
+      Invokes <A HREF='../functions/seek.html'><CODE>seek</CODE></A> on the first filter or device in this chain, which must be non-empty.
+</P>
+
+<A NAME="component_type"></A>
+<H4><CODE>chain::component_type</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>const</SPAN> std::type_info& component_type(<SPAN CLASS="keyword">int</SPAN> n) <SPAN CLASS='keyword'>const</SPAN>;
+</PRE>
+
+<P>
+      Returns a reference to an instance <CODE>std::type_info</CODE> corresponding to the type of the <CODE>n</CODE><I>th</I> Filter or Device in this chain, which must have size at least <CODE>n + 1</CODE>. Components are numbered beginning at zero.
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>int</SPAN> N>
+    <SPAN CLASS='keyword'>const</SPAN> std::type_info& component_type() <SPAN CLASS='keyword'>const</SPAN>;
+</PRE>
+
+<P>
+      Returns a reference to an instance <CODE>std::type_info</CODE> corresponding to the type of the <CODE>N</CODE><I>th</I> Filter or Device in this chain, which must have size at least <CODE>N + 1</CODE>. Components are numbered beginning at zero. The template argument <CODE>N</CODE> cannot be deduced, and must therefore be explicitly specified.
+</P>
+
+<P>
+      <I>This member is deprecated; use the overload of <CODE>component_type</CODE> that takes an <CODE>int</CODE> argument instead.</I>
+</P>
+
+<A NAME="component"></A>
+<H4><CODE>chain::component</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> T>
+    T* component(<SPAN CLASS="keyword">int</SPAN> n) <SPAN CLASS='keyword'>const</SPAN>;
+</PRE>
+
+<P>
+      Returns a pointer to the <CODE>n</CODE><I>th</I> Filter or Device in this chain, if this chain has size at least <CODE>n + 1</CODE> and the type of the <CODE>n</CODE><I>th</I> Filter or Device is equal to <CODE>T</CODE>. Otherwise, returns a null pointer. The template argument <CODE>T</CODE> cannot be deduced, and must therefore be explicitly specified.
+</P>
+<P>
+      Users of Microsoft Visual Studio versions 6.0-7.0 must use the macro <A HREF='../macros/workarounds.html#boost_iostreams_component'><CODE>BOOST_IOSTREAMS_COMPONENT</CODE></A> instead of this function.
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>int</SPAN> N, <SPAN CLASS='keyword'>typename</SPAN> T>
+    T* component() <SPAN CLASS='keyword'>const</SPAN>;
+</PRE>
+
+<P>
+      Returns a pointer to the <CODE>N</CODE><I>th</I> Filter or Device in this chain, if this chain has size at least <CODE>N + 1</CODE> and the type of the <CODE>N</CODE><I>th</I> Filter or Device is equal to <CODE>T</CODE>. Otherwise, returns a null pointer. The template arguments <CODE>N</CODE> and <CODE>T</CODE> cannot be deduced, and must therefore be explicitly specified.
+</P>
+<P>
+      <I>This member is deprecated; use the overload of <CODE>component</CODE> that takes an <CODE>int</CODE> argument instead.</I>
+</P>
+
+<A NAME="policy_push"></A>
+<H4><CODE>chain::push</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>
+    void push( <SPAN CLASS="keyword">const</SPAN> T& t,
+               std::streamsize buffer_size,
+               std::streamsize pback_size );</PRE>
+<P>
+    Appends a copy of <CODE>t</CODE> to this chain, which must not be <A HREF="#is_complete">complete</A>. The parameters have the following interpretations:
+</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2 ID="Table3">
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="../../../../doc/html/CopyConstructible.html" TARGET="_top">CopyConstructible</A> model of one of the <A HREF="../guide/concepts.html#filter_concepts">Filter</A> or <A HREF="../guide/concepts.html#device_concepts">Device</A> concepts whose <A HREF="../guide/traits.html#char_type">character type</A> is <A HREF="#template_params"><CODE>Ch</CODE></A> and whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="#template_params"><CODE>Mode</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>t</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>An instance of <I>T</I></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>buffer_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of any buffers that need to be allocated</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>pback_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of the putback buffer, relevant only if <CODE>Mode</CODE> is a refinement of <A HREF="../guide/modes.html#input"><CODE>input</CODE></TD>
+    </TR>
+</TABLE>
+
+<P>
+    An instance of a Filter or Device type <CODE>T</CODE> which is not <A HREF="../../../../doc/html/CopyConstructible.html"  TARGET="_top">CopyConstructible</A> may be appended to the chain in one of two ways:
+</P>
+<UL>
+    <LI>by using a <A HREF="../../../../doc/html/ref.html" TARGET="_top">reference wrapper</A>, or 
+    <LI>if <CODE>T</CODE> is a standard stream or stream buffer type, by using the templated overload of <A HREF="#stream_push"><CODE>push</CODE></A> taking a non-<CODE>const</CODE> reference.
+</UL>
+<P>
+    If T is a Device, this chain will become <I>complete</I> upon the return of this function, and can then be used to perform i/o.
+</P>
+
+<A NAME="stream_push"></A>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> StreamOrStreambuffer>
+    void push( StreamOrStreambuffer& t,
+               std::streamsize buffer_size,
+               std::streamsize pback_size );</PRE>
+
+<P>
+    Appends the given stream or stream buffer to this chain, which must not be <A HREF="#is_complete">complete</A>. The parameters have the following interpretations:
+</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2 ID="Table4">
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>StreamOrStreambuffer</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A standard stream or stream buffer type whose <A HREF="../guide/traits.html#char_type">character type</A> is <A HREF="#template_params"><CODE>Ch</CODE></A> and whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="#template_params"><CODE>Mode</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>buffer_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of any buffers that need to be allocated</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>pback_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of the putback buffer, relevant only if <CODE>Mode</CODE> is a refinement of <A HREF="../guide/modes.html#input"><CODE>input</CODE></TD>
+    </TR>
+</TABLE>
+
+<P>
+    This chain will become <I>complete</I> upon the return of this function, and can then be used to perform i/o.
+</P>
+
+<A NAME="pop"></A>
+<H4><CODE>chain::pop</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> pop();</PRE>
+
+<P>Removes the final Filter or Device from this chain, which must be non-empty. If this chain is  <A HREF="#is_complete">complete</A>, <CODE>pop</CODE> causes each Filter and Device in the chain to be closed using the function <A HREF="../functions/close.html"><CODE>close</CODE></A>, unless the auto-close feature has been disabled using <A HREF='#set_auto_close'><CODE>set_auto_clos</CODE></A>.</P>
+
+<A NAME="empty"></A>
+<H4><CODE>chain::empty</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> empty() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Returns <CODE>true</CODE> if this chain contains no Filters or Devices.</P>
+
+<A NAME="size"></A>
+<H4><CODE>chain::size</CODE></H4>
+<PRE CLASS="broken_ie">    size_type size() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Returns the number of Filters and Devices in this chain.</P>
+
+<A NAME="reset"></A>
+<H4><CODE>chain::reset</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> reset();</PRE>
+
+<P>Clears this chain. If this chain is <A HREF="#is_complete">complete</A>, <CODE>reset</CODE> causes each Filter and Device in the chain to be closed using the function <A HREF="../functions/close.html"><CODE>close</CODE></A>, regardless of whether the auto-close feature has been disabled using <A HREF='#set_auto_close'><CODE>set_auto_close</CODE></A>.</P></P>
+
+<A NAME="is_complete"></A>
+<H4><CODE>chain::is_complete</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> is_complete() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Returns <CODE>true</CODE> if this chain contains a <A HREF="../concepts/device.html">Device</A>. A chain is complete if and only if it is capable of performing i/o.</P>
+
+<A NAME="auto_close"></A>
+<H4><CODE>chain::auto_close</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> auto_close() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Indicates whether the Filters and Devices in this chain will be closed automatically if <A HREF='#pop'><CODE>pop</CODE></A> is invoked while the chain is complete. Returns <CODE>true</CODE> unless the auto-close feature has been disabled using <A HREF='#set_auto_close'><CODE>set_auto_close</CODE></A>.</P>
+
+<A NAME="set_auto_close"></A>
+<H4><CODE>chain::set_auto_close</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> set_auto_close(<SPAN CLASS='keyword'>bool</SPAN> close);</PRE>
+
+<P>Specifies whether the Filters and Devices in this chain will be closed automatically if <A HREF='#pop'><CODE>pop</CODE></A> is invoked while the chain is complete. Does not prevent the Filters and Devices in this chain from being closed automatically if the chain is complete at destruction.</P>
+
+<A NAME="sync"></A>
+<H4><CODE>chain::sync</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> sync();</PRE>
+
+<P>Invokes the function <A HREF='../functions/flush.html'><CODE>flush</CODE></A> on each Filter and Device in this chain, which must be complete. Returns <CODE>true</CODE> unless at least one of these components is <A HREF='../concepts/flushable.html'>Flushable</A> and <A HREF='../functions/flush.html'><CODE>flush</CODE></A> returns <CODE>false</CODE> when invoked on that component. A return value of <CODE>true</CODE> indicates that no error occurred, but does <I>not</I> guarantee that a [...]
+
+<A NAME="strict_sync"></A>
+<H4><CODE>chain::strict_sync</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> strict_sync();</PRE>
+
+<P>Identical to <CODE>sync</CODE> except for the return value, which is <CODE>false</CODE> unless <I>each</I> Filter in this chain is <A HREF='../concepts/flushable.html'>Flushable</A> and <A HREF='../functions/flush.html'><CODE>flush</CODE></A> returns <CODE>true</CODE> when invoked on <I>each</I> component.  A return value of <CODE>true</CODE> guarantees that all buffered data has been successfully forwarded.</P>
+
+<A NAME="wchain"></A>
+<H2>Class Template <CODE>wchain</CODE></H2>
+
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> Mode,
+          <SPAN CLASS="keyword">typename</SPAN> Ch    = <SPAN CLASS="keyword">wchar_t</SPAN>,
+          <SPAN CLASS="keyword">typename</SPAN> Tr    = std::char_traits<Ch>, 
+          <SPAN CLASS="keyword">typename</SPAN> Alloc = std::allocator<<CODE>Ch</CODE>> >
+<SPAN CLASS="keyword">class</SPAN> wchain;</PRE>
+
+<P>Identical to <CODE>chain</CODE>, except for the default character type.
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/char_traits.html b/vendor/pdalboost/libs/iostreams/doc/classes/char_traits.html
new file mode 100644
index 0000000..75f9281
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/char_traits.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template chain</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>char_traits</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The class template <CODE>boost::iostreams::char_traits</CODE> is a derived class of <CODE>std::char_traits</CODE> which has an additional static function <A HREF='#would_block_function'><CODE>would_block</CODE></A>, used to indicate that an attempt to read a character has failed because no input is currently available. 
+</P>
+
+<P>
+    The constants <CODE>WOULD_BLOCK</CODE> and <CODE>WWOULD_BLOCK</CODE> are provided for convenience.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/char_traits.hpp"><CODE><boost/iostreams/char_traits.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="synopsis"></A>
+<H3>Synopsis</H3>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#WOULD_BLOCK">WOULD_BLOCK</A>;
+
+<SPAN CLASS="keyword">const</SPAN> std::wint_t <A CLASS="documented" HREF="#WWOULD_BLOCK">WWOULD_BLOCK</A>;
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Ch</A>>
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#template_params">char_traits</A> : public std::char_traits<Ch> {
+    <SPAN CLASS='keyword'>static</SPAN> <SPAN CLASS='keyword'>typename</SPAN> std::char_traits<Ch>::int_type <A CLASS='documented' HREF='#would_block_function'>would_block</A>();
+};
+
+} } // End namespace boost::io</PRE>
+
+<A NAME="WOULD_BLOCK"></A>
+<H3>Constant <CODE>WOULD_BLOCK</CODE></H3>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> WOULD_BLOCK;</PRE>
+
+<P>The return value of <CODE>char_traits<char>::would_block</CODE>. Used by the function template <A HREF="../functions/get.html"><CODE>get</CODE></A> to indicate that no character could be returned because input was temporarily unavailable.</P>
+
+<A NAME="WWOULD_BLOCK"></A>
+<H3>Constant <CODE>WWOULD_BLOCK</CODE></H3>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">const</SPAN> std::wint_t WWOULD_BLOCK;</PRE>
+
+<P>The return value of <CODE>char_traits<wchar_t>::would_block</CODE>. Used by the function template <A HREF="../functions/get.html"><CODE>get</CODE></A> to indicate that no character could be returned because input was temporarily unavailable.</P>
+
+<A NAME="char_traits"></A>
+<H3>Class Template <CODE>boost::iostreams::char_traits</CODE></H3>
+
+<A NAME="template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+    <TR>
+        <TD VALIGN="top"><I>Ch</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The character type</TD>
+    </TR>
+</TABLE>
+
+<A NAME="would_block_function"></A>
+<H4><CODE>char_traits::would_block</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>static</SPAN> <SPAN CLASS='keyword'>typename</SPAN> std::char_traits<Ch>::int_type would_block();</PRE>
+
+<P>
+    Returns an instance of <CODE>int_type</CODE> used by the function template <A HREF='../functions/get.html'><CODE>get</CODE></A> to indicate that an attempt to read a character from a <A HREF='../concepts/source.html'>Source</A> has failed because no input is currently available. Future attempts to read a character may succeed.
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/classes.html b/vendor/pdalboost/libs/iostreams/doc/classes/classes.html
new file mode 100644
index 0000000..7273a5d
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/classes.html
@@ -0,0 +1,252 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Iostreams Library Classes By Category</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<STYLE> 
+    H4 A { text-decoration:none } 
+    .sep { font-weight:normal } 
+</STYLE>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Iostreams Library Classes</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H4 STYLE="text-align:center;margin-bottom:1.5em">
+    <A HREF="#a">A</A> <SPAN CLASS="sep">|</SPAN> 
+    <A HREF="#b">B</A> <SPAN CLASS="sep">|</SPAN> 
+    <A HREF="#c">C</A> <SPAN CLASS="sep">|</SPAN> 
+    <A HREF="#d">D</A> <SPAN CLASS="sep">|</SPAN> 
+    <A HREF="#f">F</A> <SPAN CLASS="sep">|</SPAN> 
+    <A HREF="#g">G</A> <SPAN CLASS="sep">|</SPAN> 
+    <A HREF="#i">I</A> <SPAN CLASS="sep">|</SPAN> 
+    <A HREF="#l">L</A> <SPAN CLASS="sep">|</SPAN> 
+    <A HREF="#m">M</A> <SPAN CLASS="sep">|</SPAN> 
+    <A HREF="#n">N</A> <SPAN CLASS="sep">|</SPAN> 
+    <A HREF="#o">O</A> <SPAN CLASS="sep">|</SPAN> 
+    <A HREF="#r">R</A> <SPAN CLASS="sep">|</SPAN> 
+    <A HREF="#s">S</A> <SPAN CLASS="sep">|</SPAN> 
+    <A HREF="#t">T</A> <SPAN CLASS="sep">|</SPAN> 
+    <A HREF="#w">W</A> <SPAN CLASS="sep">|</SPAN> 
+    <A HREF="#z">Z</A>
+</H4>
+
+<A NAME="a"></A>
+<H4>A</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="aggregate.html"><CODE>aggregate_filter</CODE></A></DT>
+  <DT><A HREF="array.html#array"><CODE>array</CODE></A></DT>
+  <DT><A HREF="array.html#array_sink"><CODE>array_sink</CODE></A></DT>
+  <DT><A HREF="array.html#array_source"><CODE>array_source</CODE></A></DT>
+</DL>
+
+<A NAME="b"></A>
+<H4>B</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="back_inserter.html"><CODE>back_insert_device</CODE></A></DT>
+  <DT><A HREF="array.html#array"><CODE>basic_array</CODE></A></DT>
+  <DT><A HREF="array.html#array_sink"><CODE>basic_array_sink</CODE></A></DT>
+  <DT><A HREF="array.html#array_source"><CODE>basic_array_source</CODE></A></DT>
+  <DT><A HREF="bzip2.html#basic_bzip2_compressor"><CODE>basic_bzip2_compressor</CODE></A></DT>
+  <DT><A HREF="bzip2.html#basic_bzip2_decompressor"><CODE>basic_bzip2_decompressor</CODE></A></DT>
+  <DT><A HREF="counter.html"><CODE>basic_counter</CODE></A></DT>
+  <DT><A HREF="file.html#file"><CODE>basic_file</CODE></A></DT>
+  <DT><A HREF="file.html#file_sink"><CODE>basic_file_sink</CODE></A></DT>
+  <DT><A HREF="file.html#file_source"><CODE>basic_file_source</CODE></A></DT>
+  <DT><A HREF="gzip.html#basic_gzip_compressor"><CODE>basic_gzip_compressor</CODE></A></DT>
+  <DT><A HREF="gzip.html#basic_gzip_decompressor"><CODE>basic_gzip_decompressor</CODE></A></DT>
+  <DT><A HREF="line_filter.html"><CODE>basic_line_filter</CODE></A></DT>
+  <DT><A HREF="null.html#null_device"><CODE>basic_null_device</CODE></A></DT>
+  <DT><A HREF="null.html#null_sink"><CODE>basic_null_sink</CODE></A></DT>
+  <DT><A HREF="null.html#null_source"><CODE>basic_null_source</CODE></A></DT>
+  <DT><A HREF="regex_filter.html"><CODE>basic_regex_filter</CODE></A></DT>
+  <DT><A HREF="stdio_filter.html"><CODE>basic_stdio_filter</CODE></A></DT>
+  <DT><A HREF="zlib.html#basic_zlib_compressor"><CODE>basic_zlib_compressor</CODE></A></DT>
+  <DT><A HREF="zlib.html#basic_zlib_decompressor"><CODE>basic_zlib_decompressor</CODE></A></DT>
+  <DT><A HREF="bzip2.html#basic_bzip2_compressor"><CODE>bzip2_compressor</CODE></A></DT>
+  <DT><A HREF="bzip2.html#basic_bzip2_decompressor"><CODE>bzip2_decompressor</CODE></A></DT>
+  <DT><A HREF="bzip2.html#bzip2_error"><CODE>bzip2_error</CODE></A></DT>
+  <DT><A HREF="bzip2.html#bzip2_params"><CODE>bzip2_params</CODE></A></DT>
+</DL>
+
+<A NAME="c"></A>
+<H4>C</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="../guide/traits.html#category_ref"><CODE>category_of</CODE></A></DT>
+  <DT><A HREF="chain.html"><CODE>chain</CODE></A></DT>
+  <DT><A HREF="../classes/char_traits.html"><CODE>char_traits</CODE></A></DT>
+  <DT><A HREF="../guide/traits.html#char_type_of_ref"><CODE>char_type_of</CODE></A></DT>
+  <DT><A HREF="code_converter.html"><CODE>code_converter</CODE></A></DT>
+  <DT><A HREF="../functions/combine.html#synopsis"><CODE>combination</CODE></A></DT>
+  <DT><A HREF="../functions/compose.html#composite"><CODE>composite</CODE></A></DT>
+  <DT><A HREF="counter.html#reference"><CODE>counter</CODE></A></DT>
+</DL>
+
+<A NAME="d"></A>
+<H4>D</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="device.html"><CODE>device</CODE></A></DT>
+  <DT><A HREF="filter.html#reference"><CODE>dual_use_filter</CODE></A></DT>
+  <DT><A HREF="filter.html#reference"><CODE>dual_use_wfilter</CODE></A></DT>
+</DL>
+
+
+<A NAME="f"></A>
+<H4>F</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="file.html#file"><CODE>file</CODE></A></DT>
+  <DT><A HREF="file_descriptor.html#file_descriptor"><CODE>file_descriptor</CODE></A></DT>
+  <DT><A HREF="file_descriptor.html#file_descriptor_sink"><CODE>file_descriptor_sink</CODE></A></DT>
+  <DT><A HREF="file_descriptor.html#file_descriptor_source"><CODE>file_descriptor_source</CODE></A></DT>
+  <DT><A HREF="file.html#file_sink"><CODE>file_sink</CODE></A></DT>
+  <DT><A HREF="file.html#file_source"><CODE>file_source</CODE></A></DT>
+  <DT><A HREF="filtering_stream.html"><CODE>filtering_stream</CODE></A></DT>
+  <DT><A HREF="filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A></DT>
+  <DT><A HREF="filter.html"><CODE>filter</CODE></A></DT>
+</DL>
+
+<A NAME="g"></A>
+<H4>G</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="gzip.html#basic_gzip_compressor"><CODE>gzip_compressor</CODE></A></DT>
+  <DT><A HREF="gzip.html#basic_gzip_decompressor"><CODE>gzip_decompressor</CODE></A></DT>
+  <DT><A HREF="gzip.html#gzip_error"><CODE>gzip_error</CODE></A></DT>
+  <DT><A HREF="gzip.html#gzip_params"><CODE>gzip_params</CODE></A></DT>
+</DL>
+
+<A NAME="i"></A>
+<H4>I</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="filter.html#reference"><CODE>input_filter</CODE></A></DT>
+  <DT><A HREF="filter.html#reference"><CODE>input_wfilter</CODE></A></DT>
+  <DT><A HREF="../functions/invert.html#inverse"><CODE>inverse</CODE></A></DT>
+</DL>
+
+<A NAME="l"></A>
+<H4>L</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="line_filter.html#reference"><CODE>line_filter</CODE></A></DT>
+</DL>
+
+<A NAME="m"></A>
+<H4>M</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="mapped_file.html#mapped_file"><CODE>mapped_file</CODE></A></DT>
+  <DT><A HREF="mapped_file.html#mapped_file_sink"><CODE>mapped_file_sink</CODE></A></DT>
+  <DT><A HREF="mapped_file.html#mapped_file_source"><CODE>mapped_file_source</CODE></A></DT>
+  <DT><A HREF="mode.html"><CODE>mode_of</CODE></A></DT>
+  <DT><A HREF="filter.html#reference"><CODE>multichar_dual_use_filter</CODE></A></DT>
+  <DT><A HREF="filter.html#reference"><CODE>multichar_dual_use_wfilter</CODE></A></DT>
+  <DT><A HREF="filter.html"><CODE>multichar_filter</CODE></A></DT>
+  <DT><A HREF="filter.html#reference"><CODE>multichar_input_filter</CODE></A></DT>
+  <DT><A HREF="filter.html#reference"><CODE>multichar_input_wfilter</CODE></A></DT>
+  <DT><A HREF="filter.html#reference"><CODE>multichar_output_filter</CODE></A></DT>
+  <DT><A HREF="filter.html#reference"><CODE>multichar_output_wfilter</CODE></A></DT>
+  <DT><A HREF="filter.html#reference"><CODE>multichar_wfilter</CODE></A></DT>
+</DL>
+
+<A NAME="n"></A>
+<H4>N</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="newline_filter.html"><CODE>newline_filter</CODE></A></DT>
+  <DT><A HREF="null.html#null_sink"><CODE>null_sink</CODE></A></DT>
+  <DT><A HREF="null.html#null_source"><CODE>null_source</CODE></A></DT>
+</DL>
+
+<A NAME="o"></A>
+<H4>O</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="filter.html#reference"><CODE>output_filter</CODE></A></DT>
+  <DT><A HREF="filter.html#reference"><CODE>output_wfilter</CODE></A></DT>
+</DL>
+
+<A NAME="r"></A>
+<H4>R</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="../classes/regex_filter.html#reference"><CODE>regex_filter</CODE></A></DT>
+  <DT><A HREF="../functions/restrict.html#restriction"><CODE>restriction</CODE></A></DT>
+</DL>
+
+<A NAME="s"></A>
+<H4>S</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="filter.html#reference"><CODE>seekable_filter</CODE></A></DT>
+  <DT><A HREF="filter.html#reference"><CODE>seekable_wfilter</CODE></A></DT>
+  <DT><A HREF="device.html#reference"><CODE>sink</CODE></A></DT>
+  <DT><A HREF="device.html#reference"><CODE>source</CODE></A></DT>
+  <DT><A HREF="stdio_filter.html#reference"><CODE>stdio_filter</CODE></A></DT>
+  <DT><A HREF="../guide/generic_streams.html#stream"><CODE>stream</CODE></A></DT>
+  <DT><A HREF="../guide/generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A></DT>
+  <DT><A HREF="symmetric_filter.html"><CODE>symmetric_filter</CODE></A></DT>
+</DL>
+
+<A NAME="t"></A>
+<H4>T</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="../functions/tee.html#tee_device"><CODE>tee_device</CODE></A></DT>
+  <DT><A HREF="../functions/tee.html#tee_filter"><CODE>tee_filter</CODE></A></DT>
+</DL>
+
+<A NAME="w"></A>
+<H4>W</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="array.html#array"><CODE>warray</CODE></A></DT>
+  <DT><A HREF="array.html#array_sink"><CODE>warray_sink</CODE></A></DT>
+  <DT><A HREF="array.html#array_source"><CODE>warray_source</CODE></A></DT>
+  <DT><A HREF="chain.html#wchain"><CODE>wchain</CODE></A></DT>
+  <DT><A HREF="counter.html#reference"><CODE>wcounter</CODE></A></DT>
+  <DT><A HREF="device.html"><CODE>wdevice</CODE></A></DT>
+  <DT><A HREF="file.html#file"><CODE>wfile</CODE></A></DT>
+  <DT><A HREF="file.html#file_sink"><CODE>wfile_sink</CODE></A></DT>
+  <DT><A HREF="file.html#file_source"><CODE>wfile_source</CODE></A></DT>
+  <DT><A HREF="filter.html"><CODE>wfilter</CODE></A></DT>
+  <DT><A HREF="line_filter.html#reference"><CODE>wline_filter</CODE></A></DT>
+  <DT><A HREF="null.html#null_sink"><CODE>wnull_sink</CODE></A></DT>
+  <DT><A HREF="null.html#null_source"><CODE>wnull_source</CODE></A></DT>
+  <DT><A HREF="../classes/regex_filter.html#reference"><CODE>wregex_filter</CODE></A></DT>
+  <DT><A HREF="device.html#reference"><CODE>wsink</CODE></A></DT>
+  <DT><A HREF="device.html#reference"><CODE>wsource</CODE></A></DT>
+  <DT><A HREF="stdio_filter.html#reference"><CODE>wstdio_filter</CODE></A></DT>
+</DL>
+
+<A NAME="z"></A>
+<H4>Z</H4>
+
+<DL CLASS="page-index">
+  <DT><A HREF="zlib.html#basic_zlib_compressor"><CODE>zlib_compressor</CODE></A></DT>
+  <DT><A HREF="zlib.html#basic_zlib_decompressor"><CODE>zlib_decompressor</CODE></A></DT>
+  <DT><A HREF="zlib.html#zlib_error"><CODE>zlib_error</CODE></A></DT>
+  <DT><A HREF="zlib.html#zlib_params"><CODE>zlib_params</CODE></A></DT>
+</DL>
+
+<!-- Begin Footer -->
+
+<HR STYLE="margin-top:2em">
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a><br/>Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/code_converter.html b/vendor/pdalboost/libs/iostreams/doc/classes/code_converter.html
new file mode 100644
index 0000000..b7eeffa
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/code_converter.html
@@ -0,0 +1,203 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template code_converter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>code_converter</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The class templates <CODE>code_converter</CODE> is a <SPAN CLASS="term">Device adapter</SPAN> which takes a Device with a narrow <A HREF="../guide/traits.html#char_type">character type</A> � typically <CODE>char</CODE> � and produces a Device with wide character type � typically <CODE>wchar_t</CODE> � by introducing a layer of <A HREF="../guide/code_conversion.html">code conversion</A>. The code conversion is performed using a <CODE>std::codecvt</CODE> facet which can either be speci [...]
+</P>
+<P>
+    For example, we can define a wide-character Device for reading from a memory-mapped file as follows:
+    <PRE CLASS="broken_ie">    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/device/mapped_file.hpp"><SPAN CLASS="literal"><boost/iostreams/maped_file.hpp></SPAN></A>
+
+    <SPAN CLASS="keyword">typedef</SPAN> code_converter<mapped_file_source> my_source;</PRE>
+
+    Similarly, we can define a wide-character Device which writes multibyte characters to an in-memory character sequence as follows:
+
+    <PRE CLASS="broken_ie">    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/device/array.hpp"><SPAN CLASS="literal"><boost/iostreams/device/array.hpp></SPAN></A>
+
+    <SPAN CLASS="keyword">typedef</SPAN> code_converter<array_sink> my_sink;</PRE>
+</P>
+<P>
+    The <A HREF="../guide/modes.html">mode</A> of a specialization of <CODE>code_converter</CODE> is determined as follows. If a narrow character Device is read-only, the resulting specialization of <CODE>code_converter</CODE> has mode <A HREF="../guide/modes.html#input">input</A>. If a narrow character Device is write-only, the resulting specialization of <CODE>code_converter</CODE> has mode <A HREF="../guide/modes.html#output">output</A>. If a narrow character Device performs input and [...]
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/code_converter.hpp"><CODE><boost/iostreams/code_converter.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Device</A>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Codecvt</A> = <SPAN CLASS='omitted'>default_value</SPAN>
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Alloc</A> = std::allocator<<CODE>char</CODE>> >
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#template_params">code_converter</A> {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">typename</SPAN> Codecvt::intern_type  char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN>         category;
+    <A CLASS="documented" HREF="#constructors">code_converter</A>();
+    <A CLASS="documented" HREF="#constructors">code_converter</A>( <SPAN CLASS="keyword">const</SPAN> Device& dev, 
+                    int buffer_size = <SPAN CLASS="omitted">default_value</SPAN> );
+    <A CLASS="documented" HREF="code_converter.html#constructors">code_converter</A>( <SPAN CLASS="omitted">device-constructor-args...</SPAN>,
+                    int buffer_size = <SPAN CLASS="omitted">default_value</SPAN> );
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="code_converter.html#open">open</A>( <SPAN CLASS="keyword">const</SPAN> Device& dev, 
+               int buffer_size = <SPAN CLASS="omitted">default_value</SPAN> );
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="code_converter.html#open">open</A>( <SPAN CLASS="omitted">device-constructor-args...</SPAN>,
+               int buffer_size = <SPAN CLASS="omitted">default_value</SPAN> );
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#is_open">is_open</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>();
+    std::locale <A CLASS="documented" HREF="#imbue">imbue</A>(<SPAN CLASS="keyword">const</SPAN> std::locale& loc);
+    Device& <A CLASS="documented" HREF="#operator_star">operator*</A>();
+    Device* <A CLASS="documented" HREF="#operator_arrow">operator-></A>();
+};
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Device</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of one of the <A HREF="../guide/concepts.html#device_concepts">Device</A> concepts; typically has <A HREF="../guide/traits.html#char_type">character type</A> <CODE>char</CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Codecvt</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>
+            A standard library codecvt facet, which must be default constructible. If this parameter is not specified,
+            an instance of <CODE>std::codecvt<wchar_t, char, std::mbstate_t></CODE> will be fetched from the global
+            local when a <CODE>code_converter</CODE> is constructed or opened.
+        </TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A standard library allocator type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate character buffers</TD>
+    </TR>
+</TABLE>
+
+<A NAME="constructors"></A>
+<H4><CODE>code_converter::code_converter</CODE></H4>
+
+<PRE CLASS="broken_ie">    code_converter();
+    code_converter( <SPAN CLASS="keyword">const</SPAN> Device& dev, 
+                    int buffer_size );
+    code_converter( <SPAN CLASS="omitted">device-constructor-args...</SPAN>, 
+                    int buffer_size );</PRE>
+    
+<P>
+    The first member constructs a <CODE>code_converter</CODE> with no associated instance of the Device type <CODE>Device</CODE>. Before the instance can be used for i/o, the member function <CODE>open()</CODE> must be invoked. 
+</P>
+    
+<P>
+    The second member constructs a <CODE>code_converter</CODE> based on the given instance of <CODE>Device</CODE>. The second parameter determines the size of the buffers or buffers used for code conversion. If a <CODE>std::codecvt</CODE> was specified as a template parameter, an instance of it will be default constructed. Otherwise, a copy of the global <CODE>locale</CODE> will be made, and an instance of <CODE>std::codecvt<wchar_t, char, std::mbstate_t></CODE> will be fetched from it.
+</P>
+
+<P>
+    The third member constructs a <CODE>code_converter</CODE> based on the given instance of <CODE>Device</CODE> constructed with the forwarded arguments. Take care as the <CODE>buffer_size</CODE> can be confused for a constructor argument if it isn't an <CODE>int</CODE>.<br>
+</P>
+
+<A NAME="imbue"></A>
+<H4><CODE>code_converter::imbue</CODE></H4>
+
+<PRE CLASS="broken_ie">    std::locale imbue(<SPAN CLASS="keyword">const</SPAN> std::locale& loc);</PRE>
+
+<P>
+    Used to specify a locale from which a <CODE>std::codecvt</CODE> facet will be fetched to perform code conversion. The effect of invoking imbue while code conversion is in progress is undefined.
+</P>
+
+<P>
+    This function is a no-op if a <CODE>std::codecvt</CODE> facet was specified as a template parameter.
+</P>
+
+<A NAME="open"></A>
+<H4><CODE>code_converter::open</CODE></H4>
+
+<PRE CLASS="broken_ie">     <SPAN CLASS="keyword">void</SPAN> open( <SPAN CLASS="keyword">const</SPAN> Device& dev,
+                std::streamsize buffer_size = <SPAN CLASS="omitted">default_value</SPAN> );
+     <SPAN CLASS="keyword">void</SPAN> open( <SPAN CLASS="omitted">device-constructor-args</SPAN>,
+                std::streamsize buffer_size = <SPAN CLASS="omitted">default_value</SPAN> );<br></PRE>
+
+<P>
+    Associates the given instance of <CODE>Device</CODE> with <CODE>this</CODE> instance of <CODE>code_converter</CODE>, if there is no such instance currently associated; otherwise, throws <CODE>std::ios_base::failure</CODE>. The second parameter determines the size of the buffer or buffers used for code conversion. If a <CODE>std::codecvt</CODE> was specified as a template parameter, an instance of it will be default constructed. Otherwise, a copy of the global <CODE>locale</CODE> will [...]
+</P>
+<P>
+    The second member constructs a <CODE>Device</CODE> with the forwarded arguments. Take care as the <CODE>buffer_size</CODE> can be confused for a constructor argument if it isn't an <CODE>int</CODE>.
+</P>
+
+<A NAME="is_open"></A>
+<H4><CODE>code_converter::is_open</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> is_open() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Returns true if there is an instance of the Device type <CODE>Device</CODE> associated with <CODE>this</CODE> instance of <CODE>code_converter</CODE>.</P>
+
+<A NAME="close"></A>
+<H4><CODE>code_converter::close</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> close();</PRE>
+
+<P>
+    Disassociates from <CODE>this</CODE> instance of <CODE>code_converter</CODE> any instance of the Device type <CODE>Device</CODE> currently associated with it, calling cleanup functions as appropriate and destroying the associated instance of <CODE>Device</CODE>.
+</P>
+
+<A NAME="operator_star"></A>
+<H4><CODE>code_converter::operator*</CODE></H4>
+
+<PRE CLASS="broken_ie">    Device& operator*();</PRE>
+
+<P>
+     Returns a reference to the instance of Device associated with this instance of <CODE>code_converter</CODE>, which must be <A HREF="#is_open">open</A>.
+</P>
+
+<A NAME="operator_arrow"></A>
+<H4><CODE>code_converter::operator-></CODE></H4>
+
+<PRE CLASS="broken_ie">    Device* operator->();</PRE>
+
+<P>
+    Returns a pointer to the instance of Device associated with this instance of <CODE>code_converter</CODE>, which must be <A HREF="#is_open">open</A>.
+</P>
+    
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/counter.html b/vendor/pdalboost/libs/iostreams/doc/classes/counter.html
new file mode 100644
index 0000000..2d921f3
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/counter.html
@@ -0,0 +1,157 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template counter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>basic_counter</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+  <DT><A href="#examples">Examples</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The class template <CODE>basic_counter</CODE> is a <A HREF='../concepts/dual_use_filter.html'>DualUseFilter</A> which forwards data unmodified to the next filter in a chain, keeping track of the number of characters and lines it has processed. 
+</P>
+<P>
+    <CODE>basic_counter</CODE> is <A HREF='../concepts/optimally_buffered.html'>OptimallyBuffered</A> with an optimal buffer size of <CODE>0</CODE> to keep the character and line counts accurate. When a <CODE>basic_counter</CODE> is used for output, the line and character counts should exactly reflect the data which has been passed to downstream fillters. When a <CODE>basic_counter</CODE> is used for input, the character counts may deviate slightly from the number of characters that have [...]
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/filter/counter.hpp"><CODE><boost/iostreams/filter/counter.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> <A CLASS='documented' HREF='#template_params'>Ch</A>>
+<SPAN CLASS='keyword'>class</SPAN> <A CLASS='documented' HREF='#template_params'>basic_counter</A> {
+<SPAN CLASS='keyword'>public:</SPAN>
+    <SPAN CLASS='keyword'>typedef</SPAN> Ch                                char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>typename</SPAN> [implmentation defined]  category;
+    <SPAN CLASS='keyword'>explicit</SPAN> <A CLASS='documented' HREF='#basic_counter_ctor'>basic_counter</A>(<SPAN CLASS='keyword'>int</SPAN> first_line = <SPAN CLASS='literal'>0</SPAN>, <SPAN CLASS='keyword'>int</SPAN> first_char = <SPAN CLASS='literal'>0</SPAN>);
+    <SPAN CLASS='keyword'>int</SPAN> <A CLASS='documented' HREF='#lines'>lines</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>int</SPAN> <A CLASS='documented' HREF='#characters'>characters</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    std::streamsize <A CLASS='documented' HREF='#optimal_buffer_size'>optimal_buffer_size</A>() <SPAN CLASS='keyword'>const</SPAN>;
+};
+
+<SPAN CLASS='keyword'>typedef</SPAN> basic_counter<<SPAN CLASS='keyword'>char</SPAN>>     <SPAN CLASS='defined'>counter</SPAN>;
+<SPAN CLASS='keyword'>typedef</SPAN> basic_counter<<SPAN CLASS='keyword'>wchar_t</SPAN>>  <SPAN CLASS='defined'>wcounter</SPAN>;
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Ch</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The <A HREF='../guide/traits.html#char_type'>character type</A></TD>
+    </TR>
+</TABLE>
+
+<A NAME="basic_counter_ctor"></A>
+<H4><CODE>counter::counter</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>explicit</SPAN> basic_counter(<SPAN CLASS='keyword'>int</SPAN> first_line = <SPAN CLASS='literal'>0</SPAN>, <SPAN CLASS='keyword'>int</SPAN> first_char = <SPAN CLASS='literal'>0</SPAN>);</PRE>
+
+<P>Constructs a <CODE>basic_counter</CODE> with the given initial counts.</P>
+
+<A NAME="lines"></A>
+<H4><CODE>counter::lines</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>int</SPAN> lines() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns the current line count.</P>
+
+<A NAME="characters"></A>
+<H4><CODE>counter::characters</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>int</SPAN> characters() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns the current character count.</P>
+
+<A NAME="optimal_buffer_size"></A>
+<H4><CODE>counter::optimal_buffer_size</CODE></H4>
+
+<PRE CLASS="broken_ie">    std::streamsize optimal_buffer_size() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns <CODE>0</CODE>.</P>
+
+<A NAME="examples"></A>
+<H2>Examples</H2>
+
+<P>The following example illustrates one way of obtaining the line and character counts after a <CODE>basic_counter</CODE> has been added to a filter chain: the <A HREF='filtering_stream.html'><CODE>filtering_stream</CODE></A> member function <A HREF='filtering_stream.html#component'><CODE>component</CODE></A> to obtain a pointer to <CODE>basic_counter</CODE>.</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/device/file.hpp'><SPAN CLASS='literal'><boost/iostreams/device/file.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/filter/counter.hpp'><SPAN CLASS='literal'><boost/iostreams/filter/counter.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/filtering_stream.hpp'><SPAN CLASS='literal'><boost/iostreams/filtering_stream.hpp></SPAN></A>
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS='keyword'>int</SPAN> main()
+{
+    io::filtering_istream in;
+    in.push(io::counter());
+    in.push(io::file_source(<SPAN CLASS='literal'>"poem.txt"</SPAN>));
+    <SPAN CLASS='comment'>// read from in</SPAN>
+    <SPAN CLASS='keyword'>int</SPAN> lines = in.component<<SPAN CLASS='literal'>0</SPAN>, counter>()->lines();
+    <SPAN CLASS='keyword'>int</SPAN> characters = in.component<<SPAN CLASS='literal'>0</SPAN>, counter>()->characters();
+}</PRE>
+
+<P>The following example illustrates a second way of obtaining the line and character counts: add the <CODE>basic_counter</CODE> to the filter chain by referece, using <A HREF='../../../../doc/html/ref.html'><CODE>boost::ref</CODE></A>, and access the <CODE>basic_counter</CODE> directly.
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/device/file.hpp'><SPAN CLASS='literal'><boost/iostreams/device/file.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/filter/counter.hpp'><SPAN CLASS='literal'><boost/iostreams/filter/counter.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/filtering_stream.hpp'><SPAN CLASS='literal'><boost/iostreams/filtering_stream.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/ref.hpp'><SPAN CLASS='literal'><boost/ref.hpp></SPAN></A>
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS='keyword'>int</SPAN> main()
+{
+    io::counter cnt;
+    io::filtering_ostreams out;
+    out.push(boost::ref(cnt));
+    out.push(io::file_sink(<SPAN CLASS='literal'>"log.txt"</SPAN>));
+    <SPAN CLASS='comment'>// write to out</SPAN>
+    <SPAN CLASS='keyword'>int</SPAN> lines = cnt.lines();
+    <SPAN CLASS='keyword'>int</SPAN> characters = cnt.characters();
+}</PRE>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/device.html b/vendor/pdalboost/libs/iostreams/doc/classes/device.html
new file mode 100644
index 0000000..f753d80
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/device.html
@@ -0,0 +1,127 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template device</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>device</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The class template <CODE>device</CODE>, its subclass <CODE>wdevice</CODE> and their specializations <CODE>source</CODE>, <CODE>sink</CODE>, <CODE>wsource</CODE> and <CODE>wsink</CODE> are provided by the Iostreams library to ease the definitions of new models of the various <A HREF="../guide/concepts.html#device_concepts">Device Concepts</A>. These templates and <CODE>typedef</CODE>s are intended to be used as base classes for user-defined Devices. They supply the member types <CODE> [...]
+</P>
+<P>
+    The supplied <CODE>category</CODE> member is convertible to <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A> and to <A HREF="../guide/traits.html#category_tags"><CODE>localizable_tag</CODE></A>. This allows users to define models of the concepts <A HREF="../concepts/closable.html">Closable</A> and <A HREF="../concepts/closable.html">Localizable</A> simply by providing definitions of member functions <CODE>close</CODE> and <CODE>imbue</CODE>.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><CODE><boost/iostreams/concepts.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="synopsis"></A>
+<H3>Synopsis</H3>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost{ <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Mode, <SPAN CLASS="keyword">typename</SPAN> Ch = <SPAN CLASS="keyword">char</SPAN>>
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#description">device</A>;
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Mode, <SPAN CLASS="keyword">typename</SPAN> Ch = <SPAN CLASS="keyword">wchar_t</SPAN>>
+<SPAN CLASS="keyword">struct</SPAN> <SPAN CLASS="defined">wdevice</SPAN> : device<Mode, Ch> { };
+
+<SPAN CLASS="keyword">typedef</SPAN> device<input>    <SPAN CLASS="defined">source</SPAN></A>;
+<SPAN CLASS="keyword">typedef</SPAN> device<output>   <SPAN CLASS="defined">sink</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> wdevice<input>   <SPAN CLASS="defined">wsource</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> wdevice<output>  <SPAN CLASS="defined">wsink</SPAN>;
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Mode</A>, <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Ch</A> = <SPAN CLASS="keyword">char</SPAN>>
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#description">device</A> {
+    <SPAN CLASS="keyword">typedef</SPAN> Ch         char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <A STYLE="text-decoration:none" HREF="#category"><SPAN CLASS="omitted">see below</SPAN></A>  category;
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>();
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>(std::ios_base::openmode);
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#imbue">imbue</A>(<SPAN CLASS="keyword">const</SPAN> std::locale&);
+};
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Mode</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="../guide/modes.html#mode_tags">mode tag</A>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Ch</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The character type</TD>
+    </TR>
+</TABLE>
+
+<A NAME="category"></A>
+<H4><CODE>device::category</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">see below</SPAN> category;</PRE>
+
+<P>
+    A category tag convertible to <A HREF="#template_params"><CODE>Mode</CODE></A>, <A HREF="../guide/traits.html#category_tags"><CODE>device_tag</CODE></A>, <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A> and <A HREF="../guide/traits.html#category_tags"><CODE>localizable_tag</CODE></A>.
+</P>
+    
+<A NAME="close"></A>
+<H4><CODE>device::close</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>();
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>(std::ios_base::openmode);</PRE>
+
+<P>
+    Both overloads are implemented as no-ops. The second is available only if <A HREF="#template_params">Mode</A> is convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>bidirectional</CODE></A>. The first is available only if Mode is <I>not</I> convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>bidirectional</CODE></A>.
+</P>
+<P>
+    Required by <A HREF="../concepts/closable.html">Closable</A>.
+</P>
+
+<A NAME="imbue"></A>
+<H4><CODE>device::imbue</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#imbue">imbue</A>(<SPAN CLASS="keyword">const</SPAN> std::locale&);</PRE>
+
+<P>
+    Implemented as a no-op. Required by <A HREF="../concepts/localizable.html">Localizable</A>.
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/file.html b/vendor/pdalboost/libs/iostreams/doc/classes/file.html
new file mode 100644
index 0000000..159b318
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/file.html
@@ -0,0 +1,242 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>File Wrappers</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">File Wrappers</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A>
+    <UL>
+      <LI CLASS="square"><A href="#file_source">Class template <CODE>basic_file_source</CODE></A></LI>
+      <LI CLASS="square"><A href="#file_sink">Class template <CODE>basic_file_sink</CODE></A></LI>
+      <LI CLASS="square"><A href="#file">Class template <CODE>basic_file</CODE></A></LI>
+    </UL>
+  </DT>
+</DL>
+
+<HR>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The class templates <CODE>basic_file_source</CODE>, <CODE>basic_file_sink</CODE> and <CODE>basic_file</CODE> are wrappers for <CODE>std::basic_filebuf</CODE> which are <A HREF="http://www.boost.org/libs/utility/CopyConstructible.html"  TARGET="_top">CopyConstructible</A> and <A HREF="http://www.boost.org/libs/utility/Assignable.html">Assignable</A>. They are useful whenever one wants to access a file without managing the lifetime of a standard file stream or stream buffer. This is be [...]
+</P>
+<P> 
+    The most common specializations are accessible via the typedefs <CODE>file_source</CODE>, <CODE>file_sink</CODE>, <CODE>file</CODE>, <CODE>wfile_source</CODE>, <CODE>wfile_sink</CODE> and <CODE>wfile</CODE>.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/device/file.hpp"><CODE><boost/iostreams/device/file.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="file_source"></A>
+<H3>Class template <CODE>basic_file_source</CODE></H3>
+
+<H4>Description</H4>
+
+<P>
+    <A HREF="http://www.boost.org/libs/utility/CopyConstructible.html" TARGET="_top">CopyConstructible</A> and <A HREF="http://www.boost.org/libs/utility/Assignable.html">Assignable</A> wrapper for a <CODE>std::basic_filebuf</CODE> opened in read-only mode.
+<P>
+
+<A NAME="file_source_synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#basic_file_source_params">Ch</A>>
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#basic_file_source_params">basic_file_source</A> {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> Ch                      char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN>  category;
+    <A CLASS="documented" HREF="#basic_file_source_constructor">basic_file_source</A>( <SPAN CLASS="keyword">const</SPAN> std::string& path,
+                       std::ios_base::openmode mode =
+                           std::ios_base::in );
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#basic_file_source_is_open">is_open</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="omitted">...</SPAN>
+};
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_file_source<<SPAN CLASS="keyword">char</SPAN>>     <SPAN CLASS="defined">file_source</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> basic_file_source<<SPAN CLASS="keyword">wchar_t</SPAN>>  <SPAN CLASS="defined">wfile_source</SPAN>;
+
+} } <SPAN CLASS='comment'>// End namespace boost::iostreams</SPAN></PRE>
+
+<A NAME="basic_file_source_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em">
+<TR>
+    <TD><I>Ch</I></TD><TD VALIGN="top">-</TD>
+    <TD>The character type.</TD></TR>
+<TR>
+</TABLE>
+
+<A NAME="basic_file_source_constructor"></A>
+<H4><CODE>basic_file_source::basic_file_source</CODE></H4>
+
+<PRE CLASS="broken_ie">    basic_file_source( <SPAN CLASS="keyword">const</SPAN> std::string& path,
+                       std::ios_base::openmode mode );</PRE>
+    
+<P>
+    Constructs a <CODE>basic_file_source</CODE> which wraps a <CODE>std::basic_filebuf</CODE> <CODE>buf</CODE> opened as follows:
+    <PRE CLASS="broken_ie">    mode |= std::ios_base::in;
+    mode &= ~std::ios_base::out;
+    buf.open(path.c_str(), mode);</PRE>
+</P>
+
+<A NAME="basic_file_source_is_open"></A>
+<H4><CODE>basic_file_source::is_open</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> is_open() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+    
+<P>Returns <CODE>true</CODE> if the underlying instance of <CODE>basic_filebuf</CODE> was opened successfully.</P>
+
+<A NAME="file_sink"></A>
+<H3>Class template <CODE>basic_file_sink</CODE></H3>
+
+<H4>Description</H4>
+
+<P>
+    <A HREF="http://www.boost.org/libs/utility/CopyConstructible.html" TARGET="_top">CopyConstructible</A> and <A HREF="http://www.boost.org/libs/utility/Assignable.html">Assignable</A> wrapper for a <CODE>std::basic_filebuf</CODE> opened in write-only mode.
+<P>
+
+<A NAME="file_sink_synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#basic_file_sink_params">Ch</A>>
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#basic_file_sink_params">basic_file_sink</A> {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> Ch                      char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN>  category;
+    <A CLASS="documented" HREF="#basic_file_sink_constructor">basic_file_sink</A>( <SPAN CLASS="keyword">const</SPAN> std::string& path,
+                     std::ios_base::openmode mode =
+                         std::ios_base::out );
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#basic_file_sink_is_open">is_open</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="omitted">...</SPAN>
+};
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_file_sink<<SPAN CLASS="keyword">char</SPAN>>     <SPAN CLASS="defined">file_sink</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> basic_file_sink<<SPAN CLASS="keyword">wchar_t</SPAN>>  <SPAN CLASS="defined">wfile_sink</SPAN>;
+
+} } <SPAN CLASS='comment'>// End namespace boost::iostreams</SPAN></PRE>
+
+<A NAME="basic_file_sink_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em">
+<TR>
+    <TD><I>Ch</I></TD><TD VALIGN="top">-</TD>
+    <TD>The character type.</TD></TR>
+<TR>
+</TABLE>
+
+<A NAME="basic_file_sink_constructor"></A>
+<H4><CODE>basic_file_sink::basic_file_sink</CODE></H4>
+
+<PRE CLASS="broken_ie">    basic_file_sink( <SPAN CLASS="keyword">const</SPAN> std::string& path,
+                     std::ios_base::openmode mode );</PRE>
+    
+<P>
+    Constructs a <CODE>basic_file_sink</CODE> which wraps a <CODE>std::basic_filebuf</CODE> <CODE>buf</CODE> opened as follows:
+    <PRE CLASS="broken_ie">    mode |= std::ios_base::out;
+    mode &= ~std::ios_base::in;
+    buf.open(path.c_str(), mode);</PRE>
+</P>
+
+<A NAME="basic_file_sink_is_open"></A>
+<H4><CODE>basic_file_sink::is_open</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> is_open() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+    
+<P>Returns <CODE>true</CODE> if the underlying instance of <CODE>basic_filebuf</CODE> was opened successfully.</P>
+
+<A NAME="file"></A>
+<H3>Class template <CODE>basic_file</CODE></H3>
+
+<H4>Description</H4>
+
+<P><A HREF="http://www.boost.org/libs/utility/CopyConstructible.html"  TARGET="_top">CopyConstructible</A> and <A HREF="http://www.boost.org/libs/utility/Assignable.html">Assignable</A> wrapper for a <CODE>std::basic_filebuf</CODE> opened in read-write mode by default.
+
+<A NAME="file_synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#basic_file_params">Ch</A>>
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#basic_file_params">basic_file</A> {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> Ch                      char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN>  category;
+    <A CLASS="documented" HREF="#basic_file_constructor">basic_file</A>( <SPAN CLASS="keyword">const</SPAN> std::string& path,
+                std::ios_base::openmode mode =
+                    std::ios_base::in | std::ios_base::out );
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#basic_file_is_open">is_open</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="omitted">...</SPAN>
+};
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_file<<SPAN CLASS="keyword">char</SPAN>>     <SPAN CLASS="defined">file</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> basic_file<<SPAN CLASS="keyword">wchar_t</SPAN>>  <SPAN CLASS="defined">wfile</SPAN>;
+
+} } <SPAN CLASS='comment'>// End namespace boost::iostreams</SPAN></PRE>
+
+<A NAME="basic_file_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em">
+<TR>
+    <TD><I>Ch</I></TD><TD VALIGN="top">-</TD>
+    <TD>The character type.</TD></TR>
+<TR>
+</TABLE>
+
+<A NAME="basic_file_constructor"></A>
+<H4><CODE>basic_file_::basic_file</CODE></H4>
+
+<PRE CLASS="broken_ie">    basic_file( <SPAN CLASS="keyword">const</SPAN> std::string& path,
+                std::ios_base::openmode mode );</PRE>
+    
+<P>
+    Constructs a <CODE>basic_file</CODE> which wraps a <CODE>std::basic_filebuf</CODE> <CODE>buf</CODE> opened as follows:
+    <PRE CLASS="broken_ie">    mode |= std::ios_base::in | std::ios_base::out;
+    buf.open(path.c_str(), mode);</PRE>
+</P> 
+
+<A NAME="basic_file_is_open"></A>
+<H4><CODE>basic_file::is_open</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> is_open() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+    
+<P>Returns <CODE>true</CODE> if the underlying instance of <CODE>basic_filebuf</CODE> was opened successfully.</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/file_descriptor.html b/vendor/pdalboost/libs/iostreams/doc/classes/file_descriptor.html
new file mode 100644
index 0000000..f2607af
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/file_descriptor.html
@@ -0,0 +1,529 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>File Descriptor Devices</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+    <STYLE> H3 CODE { font-size: 110% } </STYLE>
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">File Descriptors</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#acknowledgments">Acknowledments</A></DT>
+  <DT><A href="#installation">Installation</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A>
+    <UL>
+      <LI CLASS="square"><A href="#file_descriptor_source">Class <CODE>file_descriptor_source</CODE></A></LI>
+      <LI CLASS="square"><A href="#file_descriptor_sink">Class <CODE>file_descriptor_sink</CODE></A></LI>
+      <LI CLASS="square"><A href="#file_descriptor">Class <CODE>file_descriptor</CODE></A></LI>
+    </UL>
+  </DT>
+</DL>
+
+<HR>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The classes <CODE>file_descriptor_source</CODE>, <CODE>file_descriptor_sink</CODE> and <CODE>file_descriptor</CODE> provide file access via operating system file handles or file descriptors. These <A HREF="../guide/concepts.html#device_concepts">Devices</A> behave much like the <A HREF="file.html">File Wrappers</A> <CODE>basic_file_source</CODE>, <CODE>basic_file_sink</CODE> and <CODE>basic_file</CODE>, with the following important differences:
+</P>
+<UL>
+    <LI CLASS="square">A file descriptor Device may be constructed from a file descriptor which is already open.
+    <LI CLASS="square">The only <A HREF="../guide/buffering.html">buffering</A> is provded by the Boost Iostreams library.
+    <LI CLASS="square">There is no automatic line-ending conversion.
+    <LI CLASS="square">Wide-character streams are not supported. 
+</UL>
+
+<P>
+    When a file descriptor Device is copied, the result represents the same underlying file descriptor. The underlying file descriptor is <I>not</I> duplicated. 
+</P>
+
+<P>
+    The classes <CODE>file_descriptor</CODE> supports 64-bit seek offsets whenever they are supported by the underlying operating system or runtime library. Currently, file descriptor Devices may not work corectly with file descriptors opened in non-blocking mode.
+</P>
+
+<P>
+    Line-ending conversion can be provided, if desired, using the class <A HREF="newline_filter.html"><CODE>newline_filter</CODE></A>. Wide-character versions of the file descriptor Devices may be defined as follows, using the template <A HREF="code_converter.html"><CODE>code_converter</CODE></A>:
+    <PRE CLASS="broken_ie">    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/code_converter.hpp"><SPAN CLASS="literal"><boost/iostreams/code_converter.hpp></SPAN></A>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/device/file_descriptor.hpp"><SPAN CLASS="literal"><boost/iostreams/maped_file.hpp></SPAN></A>
+
+    <SPAN CLASS='keyword'>typedef</SPAN> code_converter<file_descriptor_source>  wfile_descriptor_source;
+    <SPAN CLASS='keyword'>typedef</SPAN> code_converter<file_descriptor_sink>    wfile_descriptor_sink;</PRE>
+</P>
+
+<A NAME="acknowledgments"></A>
+<H2>Acknowledgments</H2>
+
+<P>
+    The file descriptor Devices are based on work of Nicolai Josuttis  (<A CLASS="bib_ref" HREF="../bibliography.html#josuttis1">[Josuttis1]</A> <I>pp.</I> 672-3 and <A CLASS="bib_ref" HREF="../bibliography.html#josuttis2">[Josuttis2]</A>).
+</P>
+
+<A NAME="installation"></A>
+<H2>Installation</H2>
+
+<P>
+    The file descriptor Devices depends on the source file <A CLASS="header" HREF="../../src/file_descriptor.cpp"><CODE><libs/iostreams/src/file_descriptor.cpp></CODE></A>, which makes use of Windows or POSIX headers depending on the user's operating system. For installation instructions see <A HREF="../installation.html">Installation</A>.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/device/file_descriptor.hpp"><CODE><boost/iostreams/device/file_descriptor.hpp></CODE></A></DT>
+</DL>
+
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="file_descriptor_source"></A>
+<H3>Class <CODE>file_descriptor_source</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Model of <A HREF="../concepts/device.html">SeekableSource</A> and <A HREF="../concepts/closable.html">Closable</A> providing read-only access to a file through an operating system file descriptor.</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">enum</SPAN> file_descriptor_flags {
+    never_close_handle,
+    close_handle
+};
+
+<SPAN CLASS="keyword">class</SPAN> file_descriptor_source {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>char</SPAN>                      char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  handle_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  category;
+    <A CLASS="documented" HREF="#file_descriptor_source_ctor">file_descriptor_source</A>();
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Path>
+    <A CLASS="documented" HREF="#file_descriptor_source_ctor">file_descriptor_source</A>( <SPAN CLASS="keyword">const</SPAN> Path& pathname,
+                            std::ios_base::open_mode mode = 
+                                std::ios_base::in );
+    <A CLASS="documented" HREF="#file_descriptor_source_ctor">file_descriptor_source</A>( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Windows-only</SPAN>
+    <A CLASS="documented" HREF="#file_descriptor_source_ctor">file_descriptor_source</A>( HANDLE hFile, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    <A CLASS="documented" HREF="#file_descriptor_source_ctor">file_descriptor_source</A>( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated, Windows-only</SPAN>
+    <A CLASS="documented" HREF="#file_descriptor_source_ctor">file_descriptor_source</A>( HANDLE hFile, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Path>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#file_descriptor_source_open">open</A>( <SPAN CLASS="keyword">const</SPAN> Path& pathname,
+                     std::ios_base::open_mode mode = 
+                         std::ios_base::in );
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#file_descriptor_source_open">open</A>( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );   
+
+    <SPAN CLASS='comment'>// Windows-only</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#file_descriptor_source_open">open</A>( HANDLE hFile, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#file_descriptor_source_open">open</A>( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );   
+
+    <SPAN CLASS='comment'>// Deprecated, Windows-only</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#file_descriptor_source_open">open</A>( HANDLE hFile, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );
+
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#file_descriptor_source_is_open">is_open</A>() <SPAN CLASS="keyword">const</SPAN>;
+
+    handle_type <A CLASS="documented" HREF="#file_descriptor_source_handle">handle</A>() <SPAN CLASS="keyword">const</SPAN>;
+};
+
+} } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE>
+
+<A NAME="file_descriptor_source_ctor"></A>
+<H4><CODE>file_descriptor_source::file_descriptor_source</CODE></H4>
+
+<PRE CLASS="broken_ie">    file_descriptor_source();
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Path>
+    file_descriptor_source( <SPAN CLASS="keyword">const</SPAN> Path& pathname,
+                            std::ios_base::open_mode mode = 
+                                std::ios_base::in );
+    file_descriptor_source( <SPAN CLASS="keyword">int </SPAN>fd, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Windows-only</SPAN>
+    file_descriptor_source( HANDLE hFile, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    file_descriptor_source( <SPAN CLASS="keyword">int </SPAN>fd, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated, Windows-only</SPAN>
+    file_descriptor_source( HANDLE hFile, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );</PRE>
+<P>
+    The first member constructs an empty <CODE>file_descriptor_source</CODE>.
+</P>
+
+<P>
+    The second member constructs a <CODE>file_descriptor_source</CODE> to access the file with the given pathname. <CODE>Path</CODE> should be either a string or a Boost.Filesystem path. The parameter <CODE>mode</CODE> has the same interpretation as <CODE>(mode | std::ios_base::in)</CODE> in <CODE>std::basic_filebuf::open</CODE>.<A CLASS="footnote_ref" NAME="note_1_ref" HREF="#note_1"><SUP>[1]</SUP></A>
+</P>
+
+<P>
+    The third member constructs a <CODE>file_descriptor_source</CODE> to access the file with the given operating system or runtime-library file descriptor.
+    If the second argument is <CODE>close_handle</CODE>, the file descriptor is closed when the <CODE>file_descriptor_source</CODE> being constructed — or one of its copies — is closed or destructed.
+</P>
+
+<P>
+    The fourth member is the same as the third, except that it accepts a Windows file handle instead of a file descriptor.
+    If the second argument is <CODE>close_handle</CODE>, the file descriptor is closed when the <CODE>file_descriptor_source</CODE> being constructed — or one of its copies — is closed or destructed.
+</P>
+
+<P>
+    The deprecated members are there to provide backwards compatability with old versions.
+    To use them you need to define <CODE>BOOST_IOSTREAMS_USE_DEPRECATED</CODE>.
+    The descriptor is always closed by <CODE>close</CODE> but only closed in destructors if <CODE>close_on_exit</CODE> is <CODE>true</CODE>.
+</P>
+
+<A NAME="file_descriptor_source_open"></A>
+<H4><CODE>file_descriptor_source::open</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Path>
+    <SPAN CLASS="keyword">void</SPAN> open( <SPAN CLASS="keyword">const</SPAN> Path& pathname,
+                     std::ios_base::open_mode mode = 
+                         std::ios_base::in );
+    <SPAN CLASS="keyword">void</SPAN> open( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Windows-only</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> open( HANDLE hFile, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> open( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated, Windows-only</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> open( HANDLE hFile, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );</PRE>
+
+<P>
+    The parameters of <CODE>open</CODE> the same as those of the corresponding constructors.
+    If the file descriptor already holds a file, it'll be closed
+    (unless opened or constructed with <CODE>never_close_handle</CODE>).
+</P>
+
+<A NAME="file_descriptor_source_is_open"></A>
+<H4><CODE>file_descriptor_source::is_open</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> is_open() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+    
+<P>Returns <CODE>true</CODE> if the underlying file was opened successfully.</P>
+
+<A NAME="file_descriptor_source_handle"></A>
+<H4><CODE>file_descriptor_source::handle</CODE></H4>
+
+<PRE CLASS="broken_ie">    handle_type handle() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+    
+<P>Returns the underlying OS file descriptor.  On Windows, this is a <CODE>HANDLE</CODE>.  On other systems, it is an <CODE><SPAN CLASS="keyword">int</SPAN></CODE>.</P>
+
+<A NAME="file_descriptor_sink"></A>
+<H3>Class <CODE>file_descriptor_sink</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Model of <A HREF="../concepts/device.html">SeekableSink</A> and <A HREF="../concepts/closable.html">Closable</A> providing write-only access to a file through an operating system file descriptor.
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">enum</SPAN> file_descriptor_flags {
+    never_close_handle,
+    close_handle
+};
+
+<SPAN CLASS="keyword">class</SPAN> file_descriptor_sink {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>char</SPAN>                      char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  handle_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  category;
+    <A CLASS="documented" HREF="#file_descriptor_sink_ctor">file_descriptor_sink</A>();
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Path>
+    <A CLASS="documented" HREF="#file_descriptor_sink_ctor">file_descriptor_sink</A>( <SPAN CLASS="keyword">const</SPAN> Path& pathname,
+                          std::ios_base::open_mode mode = 
+                              std::ios_base::out );
+    <A CLASS="documented" HREF="#file_descriptor_sink_ctor">file_descriptor_sink</A>( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Windows-only</SPAN>
+    <A CLASS="documented" HREF="#file_descriptor_sink_ctor">file_descriptor_sink</A>( HANDLE hFile, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    <A CLASS="documented" HREF="#file_descriptor_sink_ctor">file_descriptor_sink</A>( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated, Windows-only</SPAN>
+    <A CLASS="documented" HREF="#file_descriptor_sink_ctor">file_descriptor_sink</A>( HANDLE hFile, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Path>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#file_descriptor_sink_open">open</A>( <SPAN CLASS="keyword">const</SPAN> Path& pathname,
+                     std::ios_base::open_mode mode = 
+                         std::ios_base::out );
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#file_descriptor_sink_open">open</A>( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );   
+
+    <SPAN CLASS='comment'>// Windows-only</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#file_descriptor_sink_open">open</A>( HANDLE hFile, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#file_descriptor_sink_open">open</A>( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );   
+
+    <SPAN CLASS='comment'>// Deprecated, Windows-only</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#file_descriptor_sink_open">open</A>( HANDLE hFile, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );
+
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#file_descriptor_sink_is_open">is_open</A>() <SPAN CLASS="keyword">const</SPAN>;
+
+    handle_type <A CLASS="documented" HREF="#file_descriptor_sink_handle">handle</A>() <SPAN CLASS="keyword">const</SPAN>;
+};
+
+} } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE>
+
+<A NAME="file_descriptor_sink_ctor"></A>
+<H4><CODE>file_descriptor_sink::file_descriptor_sink</CODE></H4>
+
+<PRE CLASS="broken_ie">    file_descriptor_sink();
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Path>
+    file_descriptor_sink( <SPAN CLASS="keyword">const</SPAN> Path& pathname,
+                          std::ios_base::open_mode mode = 
+                              std::ios_base::out );
+    file_descriptor_sink( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Windows-only</SPAN>
+    file_descriptor_sink( HANDLE hFile, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    file_descriptor_sink( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated, Windows-only</SPAN>
+    file_descriptor_sink( HANDLE hFile, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );</PRE>
+
+<P>
+    The first member constructs an empty <CODE>file_descriptor_sink</CODE>.
+</P>
+
+<P>
+    The second member constructs a <CODE>file_descriptor_sink</CODE> to access the file with the given pathname. <CODE>Path</CODE> should be either a string or a Boost.Filesystem path. The parameter <CODE>mode</CODE> has the same interpretation as <CODE>(mode | std::ios_base::out)</CODE> in <CODE>std::basic_filebuf::open</CODE>.<A CLASS="footnote_ref" NAME="note_1_ref2" HREF="#note_1"><SUP>[1]</SUP></A>
+</P>
+
+<P>
+    The third member constructs a <CODE>file_descriptor_sink</CODE> to access the file with the given operating system or runtime-library file descriptor.
+    If the second argument is <CODE>close_handle</CODE>, the file descriptor is closed when the <CODE>file_descriptor_sink</CODE> being constructed — or one of its copies — is closed or destructed.
+</P>
+
+<P>
+    The fourth member is the same as the third, except that it accepts a Windows file handle instead of a file descriptor.
+    If the second argument is <CODE>close_handle</CODE>, the file descriptor is closed when the <CODE>file_descriptor_sink</CODE> being constructed — or one of its copies — is closed or destructed.
+</P>
+
+<P>
+    The deprecated members are there to provide backwards compatability with old versions.
+    To use them you need to define <CODE>BOOST_IOSTREAMS_USE_DEPRECATED</CODE>.
+    The descriptor is always closed by <CODE>close</CODE> but only closed in destructors if <CODE>close_on_exit</CODE> is <CODE>true</CODE>.
+</P>
+
+<A NAME="file_descriptor_sink_open"></A>
+<H4><CODE>file_descriptor_sink::open</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Path>
+    <SPAN CLASS="keyword">void</SPAN> open( <SPAN CLASS="keyword">const</SPAN> Path& pathname,
+                     std::ios_base::open_mode mode = 
+                         std::ios_base::out );
+    <SPAN CLASS="keyword">void</SPAN> open( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Windows-only</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> open( HANDLE hFile, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> open( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated, Windows-only</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> open( HANDLE hFile, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );</PRE>
+
+<P>
+    The parameters of <CODE>open</CODE> the same as those of the corresponding constructors.
+    If the file descriptor already holds a file, it'll be closed
+    (unless opened or constructed with <CODE>never_close_handle</CODE>).
+</P>
+
+<A NAME="file_descriptor_sink_is_open"></A>
+<H4><CODE>file_descriptor_sink::is_open</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> is_open() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+    
+<P>Returns <CODE>true</CODE> if the underlying file was opened successfully.</P>
+
+<A NAME="file_descriptor_sink_handle"></A>
+<H4><CODE>file_descriptor_sink::handle</CODE></H4>
+
+<PRE CLASS="broken_ie">    handle_type handle() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+    
+<P>Returns the underlying OS file descriptor.  On Windows, this is a <CODE>HANDLE</CODE>.  On other systems, it is an <CODE><SPAN CLASS="keyword">int</SPAN></CODE>.</P>
+
+<A NAME="file_descriptor"></A>
+<H3>Class <CODE>file_descriptor</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Model of <A HREF="../concepts/seekable_device.html">SeekableDevice</A> and <A HREF="../concepts/closable.html">Closable</A> providing read-write access to a file through an operating system file descriptor.
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">enum</SPAN> file_descriptor_flags {
+    never_close_handle,
+    close_handle
+};
+
+<SPAN CLASS="keyword">class</SPAN> file_descriptor {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>char</SPAN>                      char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  handle_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  category;
+    <A CLASS="documented" HREF="#file_descriptor_constructor">file_descriptor</A>();
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Path>
+    <A CLASS="documented" HREF="#file_descriptor_constructor">file_descriptor</A>( <SPAN CLASS="keyword">const</SPAN> Path& pathname,
+                     std::ios_base::open_mode mode = 
+                         std::ios_base::in | std::ios_base::out );
+    <A CLASS="documented" HREF="#file_descriptor_constructor">file_descriptor</A>( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Windows-only</SPAN>
+    <A CLASS="documented" HREF="#file_descriptor_constructor">file_descriptor</A>( HANDLE hFile, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    <A CLASS="documented" HREF="#file_descriptor_constructor">file_descriptor</A>( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );   
+
+    <SPAN CLASS='comment'>// Deprecated, Windows-only</SPAN>
+    <A CLASS="documented" HREF="#file_descriptor_constructor">file_descriptor</A>( HANDLE hFile, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Path>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#file_descriptor_open">open</A>( <SPAN CLASS="keyword">const</SPAN> Path& pathname,
+                     std::ios_base::open_mode mode = 
+                         std::ios_base::in | std::ios_base::out );
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#file_descriptor_open">open</A>( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );   
+
+    <SPAN CLASS='comment'>// Windows-only</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#file_descriptor_open">open</A>( HANDLE hFile, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#file_descriptor_open">open</A>( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );   
+
+    <SPAN CLASS='comment'>// Deprecated, Windows-only</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#file_descriptor_open">open</A>( HANDLE hFile, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );
+
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#file_descriptor_is_open">is_open</A>() <SPAN CLASS="keyword">const</SPAN>;
+
+    handle_type <A CLASS="documented" HREF="#file_descriptor_handle">handle</A>() <SPAN CLASS="keyword">const</SPAN>;
+};
+
+} } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE>
+
+<A NAME="file_descriptor_constructor"></A>
+<H4><CODE>file_descriptor::file_descriptor</CODE></H4>
+
+<PRE CLASS="broken_ie">    file_descriptor();
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Path>
+    file_descriptor( <SPAN CLASS="keyword">const</SPAN> Path& pathname,
+                     std::ios_base::open_mode mode = 
+                         std::ios_base::in | std::ios_base::out );
+    file_descriptor( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Windows-only</SPAN>
+    file_descriptor( HANDLE hFile, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    file_descriptor( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated, Windows-only</SPAN>
+    file_descriptor( HANDLE hFile, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );</PRE>
+
+<P>
+    The first member constructs an empty <CODE>file_descriptor</CODE>.
+</P>
+
+<P>
+    The second member constructs a <CODE>file_descriptor</CODE> to access the file with the given pathname. <CODE>Path</CODE> should be either a string or a Boost.Filesystem path. The parameter <CODE>mode</CODE> has the same interpretation as in <CODE>std::basic_filebuf::open</CODE>.<A CLASS="footnote_ref" NAME="note_1_ref3" HREF="#note_1"><SUP>[1]</SUP></A>
+</P>
+
+<P>
+    The third member constructs a <CODE>file_descriptor</CODE> to access the file with the given operating system or runtime-library file descriptor.
+    If the second argument is <CODE>close_handle</CODE>, the file descriptor is closed when the <CODE>file_descriptor</CODE> being constructed — or one of its copies — is closed or destructed.
+</P>
+
+<P>
+    The fourth member is the same as the third, except that it accepts a Windows file handle instead of a file descriptor.
+    If the second argument is <CODE>close_handle</CODE>, the file descriptor is closed when the new <CODE>file_descriptor</CODE> — or one of its copies — is closed or destructed.
+</P>
+
+<P>
+    The deprecated members are there to provide backwards compatability with old versions.
+    To use them you need to define <CODE>BOOST_IOSTREAMS_USE_DEPRECATED</CODE>.
+    The descriptor is always closed by <CODE>close</CODE> but only closed in destructors if <CODE>close_on_exit</CODE> is <CODE>true</CODE>.
+</P>
+
+<A NAME="file_descriptor_open"></A>
+<H4><CODE>file_descriptor::open</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Path>
+    <SPAN CLASS="keyword">void</SPAN> open( <SPAN CLASS="keyword">const</SPAN> Path& pathname,
+                     std::ios_base::open_mode mode = 
+                         std::ios_base::in | std::ios_base::out );
+    <SPAN CLASS="keyword">void</SPAN> open( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Windows-only</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> open( HANDLE hFile, <SPAN CLASS="keyword">file_descriptor_flags</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> open( <SPAN CLASS="keyword">int</SPAN> fd, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );
+
+    <SPAN CLASS='comment'>// Deprecated, Windows-only</SPAN>
+    <SPAN CLASS="keyword">void</SPAN> open( HANDLE hFile, <SPAN CLASS="keyword">bool</SPAN> close_on_exit = <SPAN CLASS="keyword">false</SPAN> );</PRE>
+
+<P>
+    The parameters of <CODE>open</CODE> the same as those of the corresponding constructors.
+    If the file descriptor already holds a file, it'll be closed
+    (unless opened or constructed with <CODE>never_close_handle</CODE>).
+</P>
+
+<A NAME="file_descriptor_is_open"></A>
+<H4><CODE>file_descriptor::is_open</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> is_open() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+    
+<P>Returns <CODE><SPAN CLASS="keyword">true</SPAN></CODE> if the underlying file was opened successfully.</P>
+
+<A NAME="file_descriptor_handle"></A>
+<H4><CODE>file_descriptor::handle</CODE></H4>
+
+<PRE CLASS="broken_ie">    handle_type handle() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+    
+<P>Returns the underlying OS file descriptor.  On Windows, this is a <CODE>HANDLE</CODE>.  On other systems, it is an <CODE><SPAN CLASS="keyword">int</SPAN></CODE>.</P>
+
+<!-- Begin Footnotes -->
+
+<HR>
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_1" HREF="#note_1_ref"><SUP>[1]</SUP></A><A CLASS="bib_ref" HREF="../bibliography.html#iso">[I<SPAN STYLE="font-size:80%">SO</SPAN>]</A>, Table 92. 
+</P>
+
+<!-- End Footnotes -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/filter.html b/vendor/pdalboost/libs/iostreams/doc/classes/filter.html
new file mode 100644
index 0000000..d91e456
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/filter.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template filter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>filter</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The class templates <CODE>filter</CODE>, <CODE>wfilter</CODE>, <CODE>multichar_filter</CODE>, <CODE>multichar_wfilter</CODE> and their specializations are provided by the Iostreams library for use as base classes for user-defined <A HREF="../concepts/filter.html">Filters</A>. These base classes supply the member types <CODE>char_type</CODE> and <CODE>category</CODE> used internally by the Iostreams library to classify filters.
+</P>
+<P>
+    The supplied <CODE>category</CODE> member is convertible to <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A> and to <A HREF="../guide/traits.html#category_tags"><CODE>localizable_tag</CODE></A>. This allows users to define models of the concepts <A HREF="../concepts/closable.html">Closable</A> and <A HREF="../concepts/closable.html">Localizable</A> simply by providing definitions of member functions <CODE>close</CODE> and <CODE>imbue</CODE>.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><CODE><boost/iostreams/concepts.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="synopsis"></A>
+<H3>Synopsis</H3>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost{ <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Mode, <SPAN CLASS="keyword">typename</SPAN> Ch = <SPAN CLASS="keyword">char</SPAN>>
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#description">filter</A>;
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Mode, <SPAN CLASS="keyword">typename</SPAN> Ch = <SPAN CLASS="keyword">wchar_t</SPAN>>
+<SPAN CLASS="keyword">struct</SPAN> <SPAN CLASS="defined">wfilter</SPAN> : filter<Mode, Ch> { };
+
+<SPAN CLASS="keyword">typedef</SPAN> filter<input>      input_filter;
+<SPAN CLASS="keyword">typedef</SPAN> wfilter<input>     input_wfilter;
+<SPAN CLASS="keyword">typedef</SPAN> filter<output>     output_filter;
+<SPAN CLASS="keyword">typedef</SPAN> wfilter<output>    output_wfilter;
+<SPAN CLASS="keyword">typedef</SPAN> filter<seekable>   seekable_filter;
+<SPAN CLASS="keyword">typedef</SPAN> wfilter<seekable>  seekable_wfilter;
+<SPAN CLASS="keyword">typedef</SPAN> filter<dual_use>   dual_use_filter;
+<SPAN CLASS="keyword">typedef</SPAN> wfilter<dual_use>  dual_use_wfilter;
+
+<SPAN CLASS="keyword"><SPAN CLASS="keyword">template</SPAN></SPAN><<SPAN CLASS="keyword">typename</SPAN> Mode, <SPAN CLASS="keyword">typename</SPAN> Ch = <SPAN CLASS="keyword">char</SPAN>>
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#multichar_filter">multichar_filter</A> : filter<Mode, Ch> {
+    <SPAN CLASS="keyword">typedef</SPAN> <A STYLE="text-decoration:none" HREF="#category"><SPAN CLASS="omitted">see below</SPAN></A>  category;
+};
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Mode, <SPAN CLASS="keyword">typename</SPAN> Ch = <SPAN CLASS="keyword">wchar_t</SPAN>>
+<SPAN CLASS="keyword">struct</SPAN> <SPAN CLASS="defined">multichar_wfilter</SPAN> : multichar_filter<Mode, Ch> { };
+
+<SPAN CLASS="keyword">typedef</SPAN> multichar_filter<input>     multichar_input_filter;
+<SPAN CLASS="keyword">typedef</SPAN> multichar_filter<input>     multichar_input_wfilter;
+<SPAN CLASS="keyword">typedef</SPAN> multichar_filter<output>    multichar_output_filter;
+<SPAN CLASS="keyword">typedef</SPAN> multichar_filter<output>    multichar_output_wfilter;
+<SPAN CLASS="keyword">typedef</SPAN> multichar_filter<dual_use>  multichar_dual_use_filter;
+<SPAN CLASS="keyword">typedef</SPAN> multichar_filter<dual_use>  multichar_dual_use_wfilter;
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#filter_template_params">Mode</A>, <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#filter_template_params">Ch</A> = <SPAN CLASS="keyword">char</SPAN>>
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#filter">filter</A> {
+    <SPAN CLASS="keyword">typedef</SPAN> Ch         char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <A STYLE="text-decoration:none" HREF="#category"><SPAN CLASS="omitted">see below</SPAN></A>  category;
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Device>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>(Device&);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Device>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>(Device&, std::ios_base::openmode);
+
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#imbue">imbue</A>(<SPAN CLASS="keyword">const</SPAN> std::locale&);
+};
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="filter"></A>
+<H3>Class Template <CODE>filter</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Convenience base class for defining <A HREF="../concepts/filter.html">Filters</A></P>
+
+<A NAME="filter_template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+    <TR>
+        <TD VALIGN="top"><I>Mode</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="../guide/modes.html#mode_tags">mode tag</A>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Ch</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The character type</TD>
+    </TR>
+</TABLE>
+
+<A NAME="category"></A>
+<H4><CODE>filter::category</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">see below</SPAN> category;</PRE>
+
+<P>
+    A category tag convertible to <A HREF="#filter_template_params"><CODE>Mode</CODE></A>, <A HREF="../guide/traits.html#category_tags"><CODE>filter_tag</CODE></A>, <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A> and <A HREF="../guide/traits.html#category_tags"><CODE>localizable_tag</CODE></A>.
+</P>
+    
+<A NAME="close"></A>
+<H4><CODE>filter::close</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Device>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>(Device&);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Device>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close">close</A>(Device&, std::ios_base::openmode);</PRE>
+
+<P>
+    Both overloads are implemented as no-ops. The second is available only if <A HREF="#filter_template_params">Mode</A> is convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>bidirectional</CODE></A>. The first is available only if Mode is <I>not</I> convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>bidirectional</CODE></A>.
+</P>
+<P>
+    Required by <A HREF="../concepts/closable.html">Closable</A>.
+</P>
+
+<A NAME="imbue"></A>
+<H4><CODE>filter::imbue</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#imbue">imbue</A>(<SPAN CLASS="keyword">const</SPAN> std::locale&);</PRE>
+
+<P>
+    Implemented as a no-op. Required by <A HREF="../concepts/localizable.html">Localizable</A>.
+</P>
+
+<A NAME="multichar_filter"></A>
+<H3>Class Template <CODE>multichar_filter</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Convenience base class for defining <A HREF="../concepts/multi_character.html">Multi-Character Filters</A>. Derived class of <A HREF="#filter"><CODE>filter</CODE></A> whose member type <CODE>category</CODE> is convertible to the template parameter Mode and to <A HREF="../guide/traits.html#category_tags"><CODE>multichar_filter_tag</CODE></A>, <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A> and <A HREF="../guide/traits.html#category_tags"><CODE>localizable_tag [...]
+
+<A NAME="multichar_filter_template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+    <TR>
+        <TD VALIGN="top"><I>Mode</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="../guide/modes.html#mode_tags">mode tag</A>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Ch</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The character type</TD>
+    </TR>
+</TABLE>
+
+<!-- Begin Footer -->
+
+<HR STYLE="margin-top:2em">
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/filtering_stream.html b/vendor/pdalboost/libs/iostreams/doc/classes/filtering_stream.html
new file mode 100644
index 0000000..f8a9248
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/filtering_stream.html
@@ -0,0 +1,430 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template filtering_stream</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>filtering_stream</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    Derived class of <CODE>std::basic_istream</CODE>, <CODE>std::basic_ostream</CODE> or <CODE>std::basic_iostream</CODE>, used to perform filtering. Each <CODE>filtering_stream</CODE> contains a <A HREF="chain.html">chain</A> of zero or more Filters with an optional Device at the end. If the chain contains a Device, the <CODE>filtering_stream</CODE> is <I>complete</I> and can be used to perform i/o. When a <CODE>filtering_stream</CODE> is used for output, data passes through the first f [...]
+</P>
+
+<P>
+    <CODE>filtering_stream</CODE> derives from <CODE>std::basic_istream</CODE>, <CODE>std::basic_ostream</CODE> or <CODE>std::basic_iostream</CODE>, depending on its <A HREF="#template_params"><CODE>Mode</CODE></A> parameter.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/filtering_stream.hpp"><CODE><boost/iostreams/filtering_stream.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="synopsis"></A>
+<H3>Synopsis</H3>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Mode</A>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Ch</A>     = <SPAN CLASS="keyword">char</SPAN>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Tr</A>     = std::char_traits<Ch>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Alloc</A>  = std::allocator<<CODE>Ch</CODE>>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Access</A> = public_ >
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#template_params">filtering_stream</A>;
+
+<SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Mode</A>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Ch</A>     = <SPAN CLASS="keyword">wchar_t</SPAN>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Tr</A>     = std::char_traits<Ch>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Alloc</A>  = std::allocator<<CODE>Ch</CODE>>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Access</A> = public_ >
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#filtering_wstream">filtering_wstream</A>;
+
+<SPAN CLASS="keyword">typedef</SPAN> filtering_stream<input>    <SPAN CLASS="defined">filtering_istream</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> filtering_stream<output>   <SPAN CLASS="defined">filtering_ostream</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> filtering_wstream<input>   <SPAN CLASS="defined">filtering_wistream</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> filtering_wstream<output>  <SPAN CLASS="defined">filtering_wostream</SPAN>;
+
+<SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Mode</A>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Ch</A>     = <SPAN CLASS="keyword">char</SPAN>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Tr</A>     = std::char_traits<Ch>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Alloc</A>  = std::allocator<<CODE>Ch</CODE>>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Access</A> = public_ >
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#filtering_stream">filtering_stream</A> : <SPAN CLASS="keyword">public</SPAN> <SPAN CLASS="omitted">implementation-defined stream type</SPAN> {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> Ch                      char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> Mode                    mode;
+    <SPAN CLASS="keyword">typedef</SPAN> Alloc                   allocator_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN>  size_type;
+
+    <A CLASS="documented" HREF="#default_ctor">filtering_stream</A>();
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>
+    <A CLASS="documented" HREF="#policy_ctor">filtering_stream</A>( <SPAN CLASS="keyword">const</SPAN> T& t,
+                      std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN>,
+                      std::streamsize pback_size = <SPAN CLASS="omitted">default value</SPAN> );
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> StreamOrStreambuf>
+    <A CLASS="documented" HREF="#stream_ctor">filtering_stream</A>( StreamOrStreambuf& t,
+                      std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN>,
+                      std::streamsize pback_size = <SPAN CLASS="omitted">default value</SPAN> );
+
+    <SPAN CLASS='keyword'>const</SPAN> std::type_info& <A CLASS='documented' HREF='#component_type'>component_type</A>(<SPAN CLASS="keyword">int</SPAN> n) <SPAN CLASS='keyword'>const</SPAN>;
+
+    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> T>
+    T* <A CLASS='documented' HREF='#component'>component</A>(<SPAN CLASS="keyword">int</SPAN> n) <SPAN CLASS='keyword'>const</SPAN>;
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#policy_push">push</A>( <SPAN CLASS="keyword">const</SPAN> T& t,
+               std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN>,
+               std::streamsize pback_size = <SPAN CLASS="omitted">default value</SPAN> );
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> StreamOrStreambuf>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#stream_push">push</A>( StreamOrStreambuf& t,
+               std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN>,
+               std::streamsize pback_size = <SPAN CLASS="omitted">default value</SPAN> );
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#pop">pop</A>();
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#empty">empty</A>() <SPAN CLASS="keyword">const</SPAN>;
+    size_type <A CLASS="documented" HREF="#size">size</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#reset">reset</A>();
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#is_complete">is_complete</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#auto_close">auto_close</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#set_auto_close">set_auto_close</A>(<SPAN CLASS='keyword'>bool</SPAN> close);
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#sync">sync</A>();
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#strict_sync">strict_sync</A>();
+
+        <SPAN CLASS='comment'>// Deprecated members</SPAN>
+
+    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>int</SPAN> N>
+    <SPAN CLASS='keyword'>const</SPAN> std::type_info& <A CLASS='documented' HREF='#component_type'>component_type</A>() <SPAN CLASS='keyword'>const</SPAN>;
+
+    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>int</SPAN> N, <SPAN CLASS='keyword'>typename</SPAN> T>
+    T* <A CLASS='documented' HREF='#component'>component</A>() <SPAN CLASS='keyword'>const</SPAN>;
+};
+
+} } // End namespace boost::io</PRE>
+
+<A NAME="filtering_stream"></A>
+<H3>Class Template <CODE>filtering_stream</CODE></H3>
+
+<A NAME="template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+    <TR>
+        <TD VALIGN="top"><I>Mode</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="../guide/modes.html#mode_tags">mode tag</A>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Ch</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The character type</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Tr</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The traits type</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A standard library allocator type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate character buffers</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Access</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>One of <CODE>public_</CODE> or <CODE>protected_</CODE>, indicating the level of access of the chain interface. Used to hide the chain interface when defining a derived class of <CODE>filtering_stream</CODE></TD>
+    </TR>
+</TABLE>
+
+<A NAME="default_ctor"></A>
+<H4><CODE>filtering_stream::filtering_stream</CODE></H4>
+
+<PRE CLASS="broken_ie">    filtering_stream();</PRE>
+
+<P>
+    Constructs a <CODE>filtering_stream</CODE> with an empty chain of Filters and Devices.
+</P>
+
+<A NAME="policy_ctor"></A>
+<H4><CODE>filtering_stream::filtering_stream</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>
+    filtering_stream( <SPAN CLASS="keyword">const</SPAN> T& t,
+                      std::streamsize buffer_size,
+                      std::streamsize pback_size );</PRE>
+<P>
+    Constructs a <CODE>filtering_stream</CODE> whose chain contains a copy of <CODE>t</CODE>. The parameters have the following interpretations:
+</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2 ID="Table1">
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="../../../../doc/html/CopyConstructible.html" TARGET="_top">CopyConstructible</A> model of one of the <A HREF="../guide/concepts.html#filter_concepts">Filter</A> or <A HREF="../guide/concepts.html#device_concepts">Device</A> concepts whose <A HREF="../guide/traits.html#char_type">character type</A> is <A HREF="#template_params"><CODE>Ch</CODE></A> and whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="#template_params"><CODE>Mode</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>t</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>An instance of <I>T</I></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>buffer_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of any buffers that need to be allocated</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>pback_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of the putback buffer, relevant only if <CODE>Mode</CODE> is a refinement of <A HREF="../guide/modes.html#input"><CODE>input</CODE></A></TD>
+    </TR>
+</TABLE>
+
+<P>
+    A <CODE>filtering_stream</CODE> may be constructed from an instance of a Filter or Device type <CODE>T</CODE> which is not <A HREF="../../../../doc/html/CopyConstructible.html" TARGET="_top">CopyConstructible</A> in one of two ways:
+</P>
+<UL>
+    <LI>by using a <A HREF="../../../../doc/html/ref.html" TARGET="_top">reference wrapper</A>, or 
+    <LI>if <CODE>T</CODE> is a standard stream or stream buffer type, by using the constructor taking a non-<CODE>const</CODE> reference.
+</UL>
+<P>
+    If T is a Device, the <CODE>filtering_stream</CODE> will become <I>complete</I> upon construction, and can then be used to perform i/o.
+</P>
+
+<A NAME="stream_ctor"></A>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> StreamOrStreambuffer>
+    filering_stream( StreamOrStreambuffer& t,
+                     std::streamsize buffer_size,
+                     std::streamsize pback_size );</PRE>
+
+<P>
+    Constructs a <CODE>filtering_stream</CODE> whose chain contains a reference to the given stream or stream buffer. The parameters have the following interpretations:
+</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2 ID="Table2">
+    <TR>
+        <TD VALIGN="top"><I>StreamOrStreambuffer</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A standard stream or stream buffer type whose <A HREF="../guide/traits.html#char_type">character type</A> is <A HREF="#template_params"><CODE>Ch</CODE></A> and whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="#template_params"><CODE>Mode</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>buffer_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of any buffers that need to be allocated</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>pback_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of the putback buffer, relevant only if <CODE>Mode</CODE> is a refinement of <A HREF="../guide/modes.html#input"><CODE>input</CODE></A></TD>
+    </TR>
+</TABLE>
+
+<P>
+    The <CODE>filtering_stream</CODE> will become <I>complete</I> upon construction, and can then be used to perform i/o.
+</P>
+
+<A NAME="component_type"></A>
+<H4><CODE>filtering_stream::component_type</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>const</SPAN> std::type_info& component_type(<SPAN CLASS="keyword">int</SPAN> n) <SPAN CLASS='keyword'>const</SPAN>;
+</PRE>
+
+<P>
+      Returns a reference to an instance <CODE>std::type_info</CODE> corresponding to the type of the <CODE>n</CODE><I>th</I> Filter or Device in the underlying chain, which must have size at least <CODE>n + 1</CODE>. Components are numbered beginning at zero. 
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>int</SPAN> N>
+    <SPAN CLASS='keyword'>const</SPAN> std::type_info& component_type() <SPAN CLASS='keyword'>const</SPAN>;
+</PRE>
+
+<P>
+      Returns a reference to an instance <CODE>std::type_info</CODE> corresponding to the type of the <CODE>N</CODE><I>th</I> Filter or Device in the underlying chain, which must have size at least <CODE>N + 1</CODE>. Components are numbered beginning at zero. The template argument <CODE>N</CODE> cannot be deduced, and must therefore be explicitly specified.
+</P>
+
+<P>
+      <I>This member is deprecated; use the overload of <CODE>component_type</CODE> that takes an <CODE>int</CODE> argument instead.</I>
+</P>
+
+<A NAME="component"></A>
+<H4><CODE>filtering_stream::component</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> T>
+    T* component(<SPAN CLASS="keyword">int</SPAN> n) <SPAN CLASS='keyword'>const</SPAN>;
+</PRE>
+
+<P>
+      Returns a pointer to the <CODE>n</CODE><I>th</I> Filter or Device in the underlying chain, if the chain has size at least <CODE>n + 1</CODE> and the type of the <CODE>n</CODE><I>th</I> Filter or Device is equal to <CODE>T</CODE>. Otherwise, returns a null pointer. The template argument <CODE>T</CODE> cannot be deduced, and must therefore be explicitly specified.
+</P>
+<P>
+      Users of Microsoft Visual Studio versions 6.0-7.0 must use the macro <A HREF='../macros/workarounds.html#boost_iostreams_component'><CODE>BOOST_IOSTREAMS_COMPONENT</CODE></A> instead of this function.
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>int</SPAN> N, <SPAN CLASS='keyword'>typename</SPAN> T>
+    T* component() <SPAN CLASS='keyword'>const</SPAN>;
+</PRE>
+
+<P>
+      Returns a pointer to the <CODE>N</CODE><I>th</I> Filter or Device in the underlying chain, if the chain has size at least <CODE>N + 1</CODE> and the type of the <CODE>N</CODE><I>th</I> Filter or Device is equal to <CODE>T</CODE>. Otherwise, returns a null pointer. The template arguments <CODE>N</CODE> and <CODE>T</CODE> cannot be deduced, and must therefore be explicitly specified.
+</P>
+<P>
+      <I>This member is deprecated; use the overload of <CODE>component</CODE> that takes an <CODE>int</CODE> argument instead.</I>
+</P>
+
+<A NAME="policy_push"></A>
+<H4><CODE>filtering_stream::push</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>
+    void push( <SPAN CLASS="keyword">const</SPAN> T& t,
+               std::streamsize buffer_size,
+               std::streamsize pback_size );</PRE>
+<P>
+    Appends a copy of <CODE>t</CODE> to the underlying chain, which must not be <A HREF="#is_complete">complete</A>. The parameters have the following interpretations:
+</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2 ID="Table3">
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="../../../../doc/html/CopyConstructible.html" TARGET="_top">CopyConstructible</A> model of one of the <A HREF="../guide/concepts.html#filter_concepts">Filter</A> or <A HREF="../guide/concepts.html#device_concepts">Device</A> concepts whose <A HREF="../guide/traits.html#char_type">character type</A> is <A HREF="#template_params"><CODE>Ch</CODE></A> and whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="#template_params"><CODE>Mode</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>t</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>An instance of <I>T</I></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>buffer_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of any buffers that need to be allocated</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>pback_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of the putback buffer, relevant only if <CODE>Mode</CODE> is a refinement of <A HREF="../guide/modes.html#input"><CODE>input</CODE></A></TD>
+    </TR>
+</TABLE>
+
+<P>
+    An instance of a Filter or Device type <CODE>T</CODE> which is not <A HREF="../../../../doc/html/CopyConstructible.html"  TARGET="_top">CopyConstructible</A> may be appended to the chain in one of two ways:
+</P>
+<UL>
+    <LI>by using a <A HREF="../../../../doc/html/ref.html" TARGET="_top">reference wrapper</A>, or 
+    <LI>if <CODE>T</CODE> is a standard stream or stream buffer type, by using the templated overload of <A HREF="#stream_push"><CODE>push</CODE></A> taking a non-<CODE>const</CODE> reference.
+</UL>
+<P>
+    If T is a Device, this <CODE>filtering_stream</CODE> will become <I>complete</I> upon the return of this function, and can then be used to perform i/o.
+</P>
+
+<A NAME="stream_push"></A>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> StreamOrStreambuffer>
+    void push( StreamOrStreambuffer& t,
+               std::streamsize buffer_size,
+               std::streamsize pback_size );</PRE>
+
+<P>
+    Appends the given stream or stream buffer to the underlying chain, which must not be <A HREF="#is_complete">complete</A>. The parameters have the following interpretations:
+</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2 ID="Table4">
+    <TR>
+        <TD VALIGN="top"><I>StreamOrStreambuffer</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A standard stream or stream buffer type whose <A HREF="../guide/traits.html#char_type">character type</A> is <A HREF="#template_params"><CODE>Ch</CODE></A> and whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="#template_params"><CODE>Mode</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>buffer_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of any buffers that need to be allocated</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>pback_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of the putback buffer, relevant only if <CODE>Mode</CODE> is a refinement of <A HREF="../guide/modes.html#input"><CODE>input</CODE></A></TD>
+    </TR>
+</TABLE>
+
+<P>
+    This <CODE>filtering_stream</CODE> will become <I>complete</I> upon the return of this function, and can then be used to perform i/o.
+</P>
+
+<A NAME="pop"></A>
+<H4><CODE>filtering_stream::pop</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> pop();</PRE>
+
+<P>Removes the final Filter or Device from the underlying chain, which must be non-empty. If the chain is initially <A HREF="#is_complete">complete</A>, causes each Filter and Device in the chain to be closed using the function <A HREF="../functions/close.html"><CODE>close</CODE></A>, unless the auto-close feature has been disabled using <A HREF="#set_auto_close"><CODE>set_auto_close</CODE></A></P>
+
+<A NAME="empty"></A>
+<H4><CODE>filtering_stream::empty</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> empty() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Returns <CODE>true</CODE> if the underlying chain is empty.</P>
+
+<A NAME="size"></A>
+<H4><CODE>filtering_stream::size</CODE></H4>
+<PRE CLASS="broken_ie">    size_type size() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Returns the number Filters and Devices in the underlying chain.</P>
+
+<A NAME="reset"></A>
+<H4><CODE>filtering_stream::reset</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> reset();</PRE>
+
+<P>Clears the underlying chain. If the chain is initially <A HREF="#is_complete">complete</A>, causes each Filter and Device in the chain to be closed using the function <A HREF="../functions/close.html"><CODE>close</CODE></A>.</P>
+
+<A NAME="is_complete"></A>
+<H4><CODE>filtering_stream::is_complete</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> is_complete() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Returns <CODE>true</CODE> if the underlying chain ends in a <A HREF="../concepts/device.html">Device</A>. </P>
+
+<A NAME="auto_close"></A>
+<H4><CODE>filtering_stream::auto_close</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> auto_close() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Indicates whether the Filters and Devices in the underlying chain will be closed automatically if <A HREF='#pop'><CODE>pop</CODE></A> is invoked while the chain is complete. Returns <CODE>true</CODE> unless the auto-close feature has been disabled using <A HREF='#set_auto_close'><CODE>set_auto_close</CODE></A>.</P>
+
+<A NAME="set_auto_close"></A>
+<H4><CODE>filtering_stream::set_auto_close</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> set_auto_close(<SPAN CLASS='keyword'>bool</SPAN> close);</PRE>
+
+<P>Specifies whether the Filters and Devices in the underlying chain will be closed automatically if <A HREF='#pop'><CODE>pop</CODE></A> is invoked while the chain is complete. Does <I>not</I> prevent the Filters and Devices in the chain from being closed automatically if the chain is complete at destruction.</P>
+
+<A NAME="sync"></A>
+<H4><CODE>filtering_stream::sync</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> sync();</PRE>
+
+<P>Invokes the function <A HREF='../functions/flush.html'><CODE>flush</CODE></A> on each Filter and Device in the underlying chain, which must be complete. Returns <CODE>true</CODE> unless at least one of these components is <A HREF='../concepts/flushable.html'>Flushable</A> and <A HREF='../functions/flush.html'><CODE>flush</CODE></A> returns <CODE>false</CODE> when invoked on that component. A return value of <CODE>true</CODE> indicates that no error occurred, but does <I>not</I> guaran [...]
+
+<A NAME="strict_sync"></A>
+<H4><CODE>filtering_stream::strict_sync</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> strict_sync();</PRE>
+
+<P>Identical to <CODE>sync</CODE> except for the return value, which is <CODE>false</CODE> unless <I>each</I> Filter in the underlying chain is <A HREF='../concepts/flushable.html'>Flushable</A> and <A HREF='../functions/flush.html'><CODE>flush</CODE></A> returns <CODE>true</CODE> when invoked on <I>each</I> component.  A return value of <CODE>true</CODE> guarantees that all buffered data has been successfully forwarded.</P>
+
+<A NAME="filtering_wstream"></A>
+<H3>Class Template <CODE>filtering_wstream</CODE></H3>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> Mode,
+          <SPAN CLASS="keyword">typename</SPAN> Ch     = <SPAN CLASS="keyword">wchar_t</SPAN>,
+          <SPAN CLASS="keyword">typename</SPAN> Tr     = std::char_traits<Ch>, 
+          <SPAN CLASS="keyword">typename</SPAN> Alloc  = std::allocator<<CODE>Ch</CODE>>, 
+          <SPAN CLASS="keyword">typename</SPAN> Access = public_ >
+<SPAN CLASS="keyword">class</SPAN> filtering_wstream;</PRE>
+
+<P>Identical to <CODE>filtering_stream</CODE>, except for the default character type.
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/filtering_streambuf.html b/vendor/pdalboost/libs/iostreams/doc/classes/filtering_streambuf.html
new file mode 100644
index 0000000..91cc042
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/filtering_streambuf.html
@@ -0,0 +1,426 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template filtering_streambuf</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>filtering_streambuf</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    Derived class of <CODE>std::basic_streambuf</CODE>, used to perform filtering. Each <CODE>filtering_streambuf</CODE> contains a <A HREF="chain.html">chain</A> of zero or more Filters with an optional Device at the end. If the chain contains a Device, the <CODE>filtering_streambuf</CODE> is <I>complete</I> and can be used to perform i/o. When a <CODE>filtering_streambuf</CODE> is used for output, data passes through the first filter in the chain, then through the second filter, and so [...]
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/filtering_streambuf.hpp"><CODE><boost/iostreams/filtering_streambuf.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="synopsis"></A>
+<H3>Synopsis</H3>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Mode</A>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Ch</A>     = <SPAN CLASS="keyword">char</SPAN>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Tr</A>     = std::char_traits<Ch>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Alloc</A>  = std::allocator<<CODE>Ch</CODE>>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Access</A> = public_ >
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#template_params">filtering_streambuf</A>;
+
+<SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Mode</A>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Ch</A>     = <SPAN CLASS="keyword">wchar_t</SPAN>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Tr</A>     = std::char_traits<Ch>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Alloc</A>  = std::allocator<<CODE>Ch</CODE>>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Access</A> = public_ >
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#filtering_wstreambuf">filtering_wstreambuf</A>;
+
+<SPAN CLASS="keyword">typedef</SPAN> filtering_streambuf<input>    <SPAN CLASS="defined">filtering_istream</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> filtering_streambuf<output>   <SPAN CLASS="defined">filtering_ostream</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> filtering_wstreambuf<input>   <SPAN CLASS="defined">filtering_wistream</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> filtering_wstreambuf<output>  <SPAN CLASS="defined">filtering_wostream</SPAN>;
+
+<SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Mode</A>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Ch</A>     = <SPAN CLASS="keyword">char</SPAN>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Tr</A>     = std::char_traits<Ch>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Alloc</A>  = std::allocator<<CODE>Ch</CODE>>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Access</A> = public_ >
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#filtering_streambuf">filtering_streambuf</A> : <SPAN CLASS="keyword">public</SPAN> <SPAN CLASS="omitted">implementation-defined stream type</SPAN> {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> Ch                      char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> Mode                    mode;
+    <SPAN CLASS="keyword">typedef</SPAN> Alloc                   allocator_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN>  size_type;
+
+    <A CLASS="documented" HREF="#default_ctor">filtering_streambuf</A>();
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>
+    <A CLASS="documented" HREF="#policy_ctor">filtering_streambuf</A>( <SPAN CLASS="keyword">const</SPAN> T& t,
+                         std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN>,
+                         std::streamsize pback_size = <SPAN CLASS="omitted">default value</SPAN> );
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> StreamOrStreambuf>
+    <A CLASS="documented" HREF="#stream_ctor">filtering_streambuf</A>( StreamOrStreambuf& t,
+                         std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN>,
+                         std::streamsize pback_size = <SPAN CLASS="omitted">default value</SPAN> );
+
+    <SPAN CLASS='keyword'>const</SPAN> std::type_info& <A CLASS='documented' HREF='#component_type'>component_type</A>(<SPAN CLASS="keyword">int</SPAN> n) <SPAN CLASS='keyword'>const</SPAN>;
+
+    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> T>
+    T* <A CLASS='documented' HREF='#component'>component</A>(<SPAN CLASS="keyword">int</SPAN> n) <SPAN CLASS='keyword'>const</SPAN>;
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#policy_push">push</A>( <SPAN CLASS="keyword">const</SPAN> T& t,
+               std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN>,
+               std::streamsize pback_size = <SPAN CLASS="omitted">default value</SPAN> );
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> StreamOrStreambuf>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#stream_push">push</A>( StreamOrStreambuf& t,
+               std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN>,
+               std::streamsize pback_size = <SPAN CLASS="omitted">default value</SPAN> );
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#pop">pop</A>();
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#empty">empty</A>() <SPAN CLASS="keyword">const</SPAN>;
+    size_type <A CLASS="documented" HREF="#size">size</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#reset">reset</A>();
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#is_complete">is_complete</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#auto_close">auto_close</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#set_auto_close">set_auto_close</A>(<SPAN CLASS='keyword'>bool</SPAN> close);
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#sync">sync</A>();
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#strict_sync">strict_sync</A>();
+
+        <SPAN CLASS='comment'>// Deprecated members</SPAN>
+
+    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>int</SPAN> N>
+    <SPAN CLASS='keyword'>const</SPAN> std::type_info& <A CLASS='documented' HREF='#component_type'>component_type</A>() <SPAN CLASS='keyword'>const</SPAN>;
+
+    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>int</SPAN> N, <SPAN CLASS='keyword'>typename</SPAN> T>
+    T* <A CLASS='documented' HREF='#component'>component</A>() <SPAN CLASS='keyword'>const</SPAN>;
+};
+
+} } // End namespace boost::io</PRE>
+
+<A NAME="filtering_streambuf"></A>
+<H3>Class Template <CODE>filtering_streambuf</CODE></H3>
+
+<A NAME="template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+    <TR>
+        <TD VALIGN="top"><I>Mode</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="../guide/modes.html#mode_tags">mode tag</A>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Ch</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The character type</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Tr</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The traits type</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A standard library allocator type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate character buffers</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Access</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>One of <CODE>public_</CODE> or <CODE>protected_</CODE>, indicating the level of access of the chain interface. Used to hide the chain interface when defining a derived class of <CODE>filtering_streambuf</CODE></A></TD>
+    </TR>
+</TABLE>
+
+<A NAME="default_ctor"></A>
+<H4><CODE>filtering_streambuf::filtering_streambuf</CODE></H4>
+
+<PRE CLASS="broken_ie">    filtering_streambuf();</PRE>
+
+<P>
+    Constructs a <CODE>filtering_streambuf</CODE> with an empty chain of Filters and Devices.
+</P>
+
+<A NAME="policy_ctor"></A>
+<H4><CODE>filtering_streambuf::filtering_streambuf</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>
+    filtering_streambuf( <SPAN CLASS="keyword">const</SPAN> T& t,
+                         std::streamsize buffer_size,
+                         std::streamsize pback_size );</PRE>
+<P>
+    Constructs a <CODE>filtering_streambuf</CODE> whose chain contains a copy of <CODE>t</CODE>. The parameters have the following interpretations:
+</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2 ID="Table1">
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="../../../../doc/html/CopyConstructible.html" TARGET="_top">CopyConstructible</A> model of one of the <A HREF="../guide/concepts.html#filter_concepts">Filter</A> or <A HREF="../guide/concepts.html#device_concepts">Device</A> concepts whose <A HREF="../guide/traits.html#char_type">character type</A> is <A HREF="#template_params"><CODE>Ch</CODE></A> and whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="#template_params"><CODE>Mode</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>t</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>An instance of <I>T</I></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>buffer_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of any buffers that need to be allocated</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>pback_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of the putback buffer, relevant only if <CODE>Mode</CODE> is a refinement of <A HREF="../guide/modes.html#input"><CODE>input</CODE></A></TD>
+    </TR>
+</TABLE>
+
+<P>
+    A <CODE>filtering_streambuf</CODE> may be constructed from an instance of a Filter or Device type <CODE>T</CODE> which is not <A HREF="../../../../doc/html/CopyConstructible.html" TARGET="_top">CopyConstructible</A> in one of two ways:
+</P>
+<UL>
+    <LI>by using a <A HREF="../../../../doc/html/ref.html" TARGET="_top">reference wrapper</A>, or 
+    <LI>if <CODE>T</CODE> is a standard stream or stream buffer type, by using the constructor taking a non-<CODE>const</CODE> reference.
+</UL>
+<P>
+    If T is a Device, the <CODE>filtering_streambuf</CODE> will become <I>complete</I> upon construction, and can then be used to perform i/o.
+</P>
+
+<A NAME="stream_ctor"></A>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> StreamOrStreambuffer>
+    filtering_streambuf( StreamOrStreambuffer& t,
+                         std::streamsize buffer_size,
+                         std::streamsize pback_size );</PRE>
+
+<P>
+    Constructs a <CODE>filtering_streambuf</CODE> whose chain contains a reference to the given stream or stream buffer. The parameters have the following interpretations:
+</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2 ID="Table2">
+    <TR>
+        <TD VALIGN="top"><I>StreamOrStreambuffer</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A standard stream or stream buffer type whose <A HREF="../guide/traits.html#char_type">character type</A> is <A HREF="#template_params"><CODE>Ch</CODE></A> and whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="#template_params"><CODE>Mode</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>buffer_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of any buffers that need to be allocated</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>pback_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of the putback buffer, relevant only if <CODE>Mode</CODE> is a refinement of <A HREF="../guide/modes.html#input"><CODE>input</CODE></A></TD>
+    </TR>
+</TABLE>
+
+<P>
+    The <CODE>filtering_streambuf</CODE> will become <I>complete</I> upon construction, and can then be used to perform i/o.
+</P>
+
+<A NAME="component_type"></A>
+<H4><CODE>filtering_streambuf::component_type</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>const</SPAN> std::type_info& component_type(<SPAN CLASS="keyword">int</SPAN> n) <SPAN CLASS='keyword'>const</SPAN>;
+</PRE>
+
+<P>
+      Returns a reference to an instance <CODE>std::type_info</CODE> corresponding to the type of the <CODE>n</CODE><I>th</I> Filter or Device in the underlying chain, which must have size at least <CODE>n + 1</CODE>. Components are numbered beginning at zero.
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>int</SPAN> N>
+    <SPAN CLASS='keyword'>const</SPAN> std::type_info& component_type() <SPAN CLASS='keyword'>const</SPAN>;
+</PRE>
+
+<P>
+      Returns a reference to an instance <CODE>std::type_info</CODE> corresponding to the type of the <CODE>N</CODE><I>th</I> Filter or Device in the underlying chain, which must have size at least <CODE>N + 1</CODE>. Components are numbered beginning at zero. The template argument <CODE>N</CODE> cannot be deduced, and must therefore be explicitly specified.
+</P>
+
+<P>
+      <I>This member is deprecated; use the overload of <CODE>component_type</CODE> that takes an <CODE>int</CODE> argument instead.</I>
+</P>
+
+<A NAME="component"></A>
+<H4><CODE>filtering_streambuf::component</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> T>
+    T* component(<SPAN CLASS="keyword">int</SPAN> n) <SPAN CLASS='keyword'>const</SPAN>;
+</PRE>
+
+<P>
+      Returns a pointer to the <CODE>n</CODE><I>th</I> Filter or Device in the underlying chain, if the chain has size at least <CODE>n + 1</CODE> and the type of the <CODE>n</CODE><I>th</I> Filter or Device is equal to <CODE>T</CODE>. Otherwise, returns a null pointer. The template argument <CODE>T</CODE> cannot be deduced, and must therefore be explicitly specified.
+</P>
+<P>
+      Users of Microsoft Visual Studio versions 6.0-7.0 must use the macro <A HREF='../macros/workarounds.html#boost_iostreams_component'><CODE>BOOST_IOSTREAMS_COMPONENT</CODE></A> instead of this function.
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='comment'>// Deprecated</SPAN>
+    <SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>int</SPAN> N, <SPAN CLASS='keyword'>typename</SPAN> T>
+    T* component() <SPAN CLASS='keyword'>const</SPAN>;
+</PRE>
+
+<P>
+      Returns a pointer to the <CODE>N</CODE><I>th</I> Filter or Device in the underlying chain, if the chain has size at least <CODE>N + 1</CODE> and the type of the <CODE>N</CODE><I>th</I> Filter or Device is equal to <CODE>T</CODE>. Otherwise, returns a null pointer. The template arguments <CODE>N</CODE> and <CODE>T</CODE> cannot be deduced, and must therefore be explicitly specified.
+</P>
+<P>
+      <I>This member is deprecated; use the overload of <CODE>component</CODE> that takes an <CODE>int</CODE> argument instead.</I>
+</P>
+
+<A NAME="policy_push"></A>
+<H4><CODE>filtering_streambuf::push</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>
+    void push( <SPAN CLASS="keyword">const</SPAN> T& t,
+               std::streamsize buffer_size,
+               std::streamsize pback_size );</PRE>
+<P>
+    Appends a copy of <CODE>t</CODE> to the underlying chain, which must not be <A HREF="#is_complete">complete</A>. The parameters have the following interpretations:
+</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2 ID="Table3">
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="../../../../doc/html/CopyConstructible.html" TARGET="_top">CopyConstructible</A> model of one of the <A HREF="../guide/concepts.html#filter_concepts">Filter</A> or <A HREF="../guide/concepts.html#device_concepts">Device</A> concepts whose <A HREF="../guide/traits.html#char_type">character type</A> is <A HREF="#template_params"><CODE>Ch</CODE></A> and whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="#template_params"><CODE>Mode</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>t</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>An instance of <I>T</I></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>buffer_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of any buffers that need to be allocated</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>pback_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of the putback buffer, relevant only if <CODE>Mode</CODE> is a refinement of <A HREF="../guide/modes.html#input"><CODE>input</CODE></A></TD>
+    </TR>
+</TABLE>
+
+<P>
+    An instance of a Filter or Device type <CODE>T</CODE> which is not <A HREF="../../../../doc/html/CopyConstructible.html"  TARGET="_top">CopyConstructible</A> may be appended to the chain in one of two ways:
+</P>
+<UL>
+    <LI>by using a <A HREF="../../../../doc/html/ref.html" TARGET="_top">reference wrapper</A>, or 
+    <LI>if <CODE>T</CODE> is a standard stream or stream buffer type, by using the templated overload of <A HREF="#stream_push"><CODE>push</CODE></A> taking a non-<CODE>const</CODE> reference.
+</UL>
+<P>
+    If T is a Device, this <CODE>filtering_streambuf</CODE> will become <I>complete</I> upon the return of this function, and can then be used to perform i/o.
+</P>
+
+<A NAME="stream_push"></A>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> StreamOrStreambuffer>
+    void push( StreamOrStreambuffer& t,
+               std::streamsize buffer_size,
+               std::streamsize pback_size );</PRE>
+
+<P>
+    Appends the given stream or stream buffer to the underlying chain, which must not be <A HREF="#is_complete">complete</A>. The parameters have the following interpretations:
+</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2 ID="Table4">
+    <TR>
+        <TD VALIGN="top"><I>StreamOrStreambuffer</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A standard stream or stream buffer type whose <A HREF="../guide/traits.html#char_type">character type</A> is <A HREF="#template_params"><CODE>Ch</CODE></A> and whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="#template_params"><CODE>Mode</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>buffer_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of any buffers that need to be allocated</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>pback_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of the putback buffer, relevant only if <CODE>Mode</CODE> is a refinement of <A HREF="../guide/modes.html#input"><CODE>input</CODE></A></TD>
+    </TR>
+</TABLE>
+
+<P>
+    This <CODE>filtering_streambuf</CODE> will become <I>complete</I> upon the return of this function, and can then be used to perform i/o.
+</P>
+
+<A NAME="pop"></A>
+<H4><CODE>filtering_streambuf::pop</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> pop();</PRE>
+
+<P>Removes the final Filter or Device from the underlying chain, which must be non-empty. If the chain is initially <A HREF="#is_complete">complete</A>, causes each Filter and Device in the chain to be closed using the function <A HREF="../functions/close.html"><CODE>close</CODE></A>, unless the auto-close feature has been disabled using <A HREF="#set_auto_close"><CODE>set_auto_close</CODE></A></P>
+
+<A NAME="empty"></A>
+<H4><CODE>filtering_streambuf::empty</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> empty() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Returns <CODE>true</CODE> if the underlying chain is empty.</P>
+
+<A NAME="size"></A>
+<H4><CODE>filtering_streambuf::size</CODE></H4>
+<PRE CLASS="broken_ie">    size_type size() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Returns the number Filters and Devices in the underlying chain.</P>
+
+<A NAME="reset"></A>
+<H4><CODE>filtering_streambuf::reset</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> reset();</PRE>
+
+<P>Clears the underlying chain. If the chain is initially <A HREF="#is_complete">complete</A>, causes each Filter and Device in the chain to be closed using the function <A HREF="../functions/close.html"><CODE>close</CODE></A>.</P>
+
+<A NAME="is_complete"></A>
+<H4><CODE>filtering_streambuf::is_complete</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> is_complete() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Returns <CODE>true</CODE> if the underlying chain ends in a <A HREF="../concepts/device.html">Device</A>. </P>
+
+<A NAME="auto_close"></A>
+<H4><CODE>filtering_streambuf::auto_close</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> auto_close() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Indicates whether the Filters and Devices in the underlying chain will be closed automatically if <A HREF='#pop'><CODE>pop</CODE></A> is invoked while the chain is complete. Returns <CODE>true</CODE> unless the auto-close feature has been disabled using <A HREF='#set_auto_close'><CODE>set_auto_close</CODE></A>.</P>
+
+<A NAME="set_auto_close"></A>
+<H4><CODE>filtering_streambuf::set_auto_close</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> set_auto_close(<SPAN CLASS='keyword'>bool</SPAN> close);</PRE>
+
+<P>Specifies whether the Filters and Devices in the underlying chain will be closed automatically if <A HREF='#pop'><CODE>pop</CODE></A> is invoked while the chain is complete. Does <I>not</I> prevent the Filters and Devices in the chain from being closed automatically if the chain is complete at destruction.</P>
+
+<A NAME="sync"></A>
+<H4><CODE>filtering_streambuf::sync</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> sync();</PRE>
+
+<P>Invokes the function <A HREF='../functions/flush.html'><CODE>flush</CODE></A> on each Filter and Device in the underlying chain, which must be complete. Returns <CODE>true</CODE> unless at least one of these components is <A HREF='../concepts/flushable.html'>Flushable</A> and <A HREF='../functions/flush.html'><CODE>flush</CODE></A> returns <CODE>false</CODE> when invoked on that component. A return value of <CODE>true</CODE> indicates that no error occurred, but does <I>not</I> guaran [...]
+
+<A NAME="strict_sync"></A>
+<H4><CODE>filtering_streambuf::strict_sync</CODE></H4>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">bool</SPAN> strict_sync();</PRE>
+
+<P>Identical to <CODE>sync</CODE> except for the return value, which is <CODE>false</CODE> unless <I>each</I> Filter in the underlying chain is <A HREF='../concepts/flushable.html'>Flushable</A> and <A HREF='../functions/flush.html'><CODE>flush</CODE></A> returns <CODE>true</CODE> when invoked on <I>each</I> component.  A return value of <CODE>true</CODE> guarantees that all buffered data has been successfully forwarded.</P>
+
+<A NAME="filtering_wstreambuf"></A>
+<H3>Class Template <CODE>filtering_wstreambuf</CODE></H3>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> Mode,
+          <SPAN CLASS="keyword">typename</SPAN> Ch     = <SPAN CLASS="keyword">wchar_t</SPAN>,
+          <SPAN CLASS="keyword">typename</SPAN> Tr     = std::char_traits<Ch>, 
+          <SPAN CLASS="keyword">typename</SPAN> Alloc  = std::allocator<<CODE>Ch</CODE>>, 
+          <SPAN CLASS="keyword">typename</SPAN> Access = public_ >
+<SPAN CLASS="keyword">class</SPAN> filtering_wstreambuf;</PRE>
+
+<P>Identical to <CODE>filtering_streambuf</CODE>, except for the default character type.
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/grep_filter.html b/vendor/pdalboost/libs/iostreams/doc/classes/grep_filter.html
new file mode 100644
index 0000000..7aeda9f
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/grep_filter.html
@@ -0,0 +1,154 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template basic_grep_filter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>basic_grep_filter</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#installation">Installation</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The class template <CODE>basic_grep_filter</CODE> filters a character sequence line by line using a regular expression provided at construction, in a manner similar to the command-line utility <i>grep</i> (<A CLASS="bib_ref" HREF="../bibliography.html#grep">[IEEE]</A>). The filter uses regular expressions from the <A HREF="http://www.boost.org/libs/regex" TARGET="_top">Boost Regular Expression Library</A> (<A CLASS="bib_ref" HREF="../bibliography.html#maddock">[Maddock]</A>).
+</P>
+<P>
+    By default, the filtered character sequence consists of those lines of the unfiltered sequence that contain a subsequence matching the regular expression. By specifying appropriate options at construction, <CODE>basic_grep_filter</CODE> can be made to pass through only those lines which exactly match the regular expression (as if the option <i>-x</i> had been  passed to the command-line utility) or only those lines that <i>do not</i> contain a match (as if the option <i>-v</i> had be [...]
+</P>
+<P>
+    A running count of the lines in the filtered character sequence is available via the member function <code><a href="#count">count</a></code>.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/filter/grep.hpp"><CODE><boost/iostreams/filter/grep.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="installation"></A>
+<H2>Installation</H2>
+
+<P>
+    The template <CODE>basic_grep_filter</CODE> uses the <A HREF="http://www.boost.org/libs/regex" TARGET="_top">Boost Regular Expression Library</A>, which must be built separately. See <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/install.html" TARGET="_top">here</A> for details.
+</P>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/function.hpp" TARGET="_top"><SPAN CLASS="literal"><boost/function.hpp></SPAN></A>
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/regex.hpp" TARGET="_top"><SPAN CLASS="literal"><boost/regex.hpp></SPAN></A>
+
+<SPAN CLASS="keyword">namespace</SPAN> grep {
+
+<SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> invert;
+<SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> whole_line;
+
+}
+
+<SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A HREF="#template_params" CLASS="documented">Ch</A>,
+          <SPAN CLASS="keyword">typename</SPAN> <A HREF="#template_params" CLASS="documented">Tr</A> = regex_traits<Ch>,
+          <SPAN CLASS="keyword">typename</SPAN> <A HREF="#template_params" CLASS="documented">Alloc</A> = std::allocator<Ch> >
+<SPAN CLASS="keyword">class</SPAN> <A HREF="#template_params" CLASS="documented">basic_grep_filter</A> {   
+<SPAN CLASS="keyword">public:</SPAN>
+    <A CLASS="documented" HREF="#constructor">basic_grep_filter</A>( <SPAN CLASS="keyword">const</SPAN> basic_regex<Ch, Tr, Alloc>& pattern,
+                       regex_constants::match_flag_type flags = 
+                           regex_constants::match_default,
+                       <SPAN CLASS="keyword">int</SPAN> options = <SPAN CLASS="numeric_literal">0</SPAN> );
+    <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#count">count</A>() <SPAN CLASS="keyword">const</SPAN>;
+};
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_grep_filter<<SPAN CLASS="keyword">char</SPAN>>     <SPAN CLASS="defined">grep_filter</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> basic_grep_filter<<SPAN CLASS="keyword">wchar_t</SPAN>>  <SPAN CLASS="defined">wgrep_filter</SPAN>;
+
+} } // End namespace boost::io</PRE>
+
+<A NAME="template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Ch</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The character type</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Tr</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/ref/regex_traits.html" TARGET="_top">regular expression traits</A> type</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A standard library allocator type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate character buffers</TD>
+    </TR>
+</TABLE>
+
+<A NAME="constructor"></A>
+<H4><CODE>basic_grep_filter::basic_grep_filter</CODE></H4>
+
+<PRE CLASS="broken_ie">    <B>basic_grep_filter</B>( <SPAN CLASS="keyword">const</SPAN> basic_regex<Ch, Tr, Alloc>& pattern,
+                       regex_constants::match_flag_type flags = 
+                           regex_constants::match_default,
+                       <SPAN CLASS="keyword">int</SPAN> options = <SPAN CLASS="numeric_literal">0</SPAN> );</PRE>
+    
+<P>Constructs a <CODE>basic_grep_filter</CODE> from the given regular expression, match flags, and grep options. The parameters have the following interpretations:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>pattern</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The regular expression to be matched against the stream of unfiltered data</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>flags</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The flags passed to <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/ref/regex_search.html" TARGET="_top">regex_search</A> or <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/ref/regex_match.html" TARGET="_top">regex_match</A> to specify regular expression matching behavior</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>options</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A bitwise OR of zero or more constants from the namespace <CODE>boost::iostreams::grep</CODE>. Currently two constants are recongnized: <CODE>grep::whole_line</CODE> causes the filter to pass through only those lines which exactly match the regular expression, and <CODE>grep::invert</CODE> causes the filter to pass through only those lines that <i>do not</i> contain a match.</TD>
+    </TR>
+</TABLE>
+
+</P>
+
+<A NAME="count"></A>
+<H4><CODE>basic_grep_filter::count</CODE></H4>
+
+<A NAME="second_constructor"></A>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">int</SPAN> count() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+    
+<P>Returns a running count of the lines passed through from the unfiltered character sequence to the filtered character sequence. The count is reset to zero automatically when the filter begins processing a new character sequence.</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/gzip.html b/vendor/pdalboost/libs/iostreams/doc/classes/gzip.html
new file mode 100644
index 0000000..fac3958
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/gzip.html
@@ -0,0 +1,368 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Gzip Filters</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Gzip Filters</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#acknowledgments">Acknowledgments</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#synopsis">Synopsis</A></DT>
+  <DT><A HREF="#reference">Reference</A>
+    <DL class="page-index">
+      <DT><A HREF="#constants">namespace <CODE>boost::iostreams::gzip</CODE></A></DT>
+      <DT><A HREF="#gzip_params">Class <CODE>gzip_params</CODE></A></DT>
+      <DT><A HREF="#basic_gzip_compressor">Class template <CODE>gzip_compressor</CODE></A></DT>
+      <DT><A HREF="#basic_gzip_decompressor">Class template <CODE>gzip_decompressor</CODE></A></DT>
+      <DT><A HREF="#gzip_error">Class <CODE>gzip_error</CODE></A></DT>
+    </DL>
+  </DT>
+  <DT><A href="#examples">Examples</A></DT>
+  <DT><A href="#installation">Installation</A></DT>
+</DL>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The class templates <A HREF="#basic_gzip_compressor"><CODE>basic_gzip_compressor</CODE></A> and <A HREF="#basic_gzip_decompressor"><CODE>basic_gzip_decompressor</CODE></A> perform compression and decompression based on the G<SPAN STYLE="font-size:80%">ZIP</SPAN> format (<A CLASS="bib_ref" HREF="../bibliography.html#deutsch3">[Deutsch3]</A>) using Jean-loup Gailly's and Mark Adler's zlib compression library (<A CLASS="bib_ref" HREF="../bibliography.html#gailly">[Gailly]</A>). They are [...]
+</P>
+<P>
+    Currently, <CODE>basic_gzip_compressor</CODE> is a <A HREF="../concepts/dual_use_filter.html">DualUseFilters</A>, but <CODE>basic_gzip_compressor</CODE> is only an <A HREF="../concepts/input_filter.html">InputFilter</A>.
+</P>
+
+<A NAME="acknowledgments"></A>
+<H2>Acknowledgments</H2>
+
+<P>
+    The gzip Filters were influences by the work of Jeff Garland (<A CLASS="bib_ref" HREF="../bibliography.html#garland">[Garland]</A>) and Jonathan de Halleux (<A CLASS="bib_ref" HREF="../bibliography.html#de_halleux">[de Halleux]</A>).
+</P>
+
+Thanks to <A HREF="mailto:jloup at gailly.net">Jean-loup Gailly</A> and <A HREF="mailto:madler@alumni.caltech.edu">Mark Adler</A> for making their excellent library available to the public with a <A HREF="http://www.boost.org/more/lib_guide.htm#Requirements">Boost-compatible</A> license.
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/filter/gzip.hpp"><CODE><boost/iostreams/filter/gzip.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="synopsis"></A>
+<H2>Synopsis</H2>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">namespace</SPAN> <A CLASS="documented" HREF="#constants">gzip</A> {
+                    
+<SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> <A CLASS="documented" HREF="zlib.html#constants">boost::iostreams::zlib</A>;
+
+    <SPAN CLASS="comment">// Error codes used by gzip_error.</SPAN>
+
+<SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#zlib_error">zlib_error</A>;
+<SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#bad_crc">bad_crc</A>;
+<SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#bad_length">bad_length</A>;
+<SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#bad_header">bad_header</A>;
+<SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#bad_footer">bad_footer</A>;
+
+}   <SPAN CLASS="comment">// End namespace boost::iostreams::gzip</SPAN>
+
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#gzip_params">gzip_params</A>;
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Alloc = std::allocator<<SPAN CLASS="keyword">char</SPAN>> >
+<SPAN CLASS="keyword">struc</SPAN>t <A CLASS="documented" HREF="#basic_gzip_compressor">basic_gzip_compressor</A>;
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Alloc = std::allocator<<SPAN CLASS="keyword">char</SPAN>> >
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#basic_gzip_decompressor">basic_gzip_decompressor</A>;
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_gzip_compressor<>   <SPAN CLASS="defined">gzip_compressor</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> basic_gzip_decompressor<> <SPAN CLASS="defined">gzip_decompressor</SPAN>;
+
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#gzip_error">gzip_error</A>;
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="constants"></A>
+<H3>Namespace <CODE>boost::iostreams::gzip</CODE></H3>
+
+<P>The namespace <CODE>boost::iostreams::gzip</CODE> contains integral constants used to configure gzip Filters and to report errors. The constants have the following interpretations. (<I>See</I> <A CLASS="bib_ref" HREF="../bibliography.html#deutsch3">[Deutsch3]</A> for additional details.)</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=1 CELLPADDING=4>
+<TR><TH>Constant</TH><TH>Interpretation</TH></TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="zlib_error"></A><CODE>zlib_error</CODE></TD>
+        <TD>A zlib error has occurred; use <A HREF="#gzip_error_zlib_error_code"><CODE>gzip_error::zlib_error_code</CODE></A> to obtain an error code.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="bad_crc"></A><CODE>bad_crc</CODE></TD>
+        <TD>Recorded crc doesn't match data.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="bad_length"></A><CODE>bad_length</CODE></TD>
+        <TD>Recorded length doesn't match data.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="bad_header"></A><CODE>bad_header</CODE></TD>
+        <TD>Malformed file header.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="bad_footer"></A><CODE>bad_footer</CODE></TD>
+        <TD>Portion of file following compressed data is malformed.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="gzip_params"></A>
+<H3>Class <CODE>gzip_params</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Encapsulates the parameters used to configure <A HREF="#basic_gzip_compressor"><CODE>basic_gzip_compressor</CODE></A> and <A HREF="#basic_gzip_decompressor"><CODE>basic_gzip_decompressor</CODE></A>.</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">struct</SPAN> <SPAN CLASS="defined">gzip_params</SPAN> : <A CLASS="documented" HREF="zlib.html#zlib_params">zlib_params</A> {
+
+    <SPAN CLASS="comment">// Non-explicit constructor.</SPAN>
+    <A CLASS="documented" HREF="#gzip_params_constructor">gzip_params</A>( <SPAN CLASS="keyword">int</SPAN> level              = <SPAN CLASS="omitted">default value</SPAN>,
+                 <SPAN CLASS="keyword">int</SPAN> method             = <SPAN CLASS="omitted">default value</SPAN>,
+                 <SPAN CLASS="keyword">int</SPAN> window_bits        = <SPAN CLASS="omitted">default value</SPAN>, 
+                 <SPAN CLASS="keyword">int</SPAN> mem_level          = <SPAN CLASS="omitted">default value</SPAN>, 
+                 <SPAN CLASS="keyword">int</SPAN> strategy           = <SPAN CLASS="omitted">default value</SPAN>,
+                 std::string file_name  = "",
+                 std::string comment    = "",
+                 std::time_t mtime      = 0 );
+
+    std::string  file_name;
+    std::string  comment;
+    std::time_t  mtime;
+};</PRE>
+
+<A NAME="gzip_params_constructor"></A>
+<H4><CODE>gzip_params::gzip_params</CODE></H4>
+
+<PRE CLASS="broken_ie">    gzip_params( <SPAN CLASS="keyword">int</SPAN> level              = <SPAN CLASS="omitted">default value</SPAN>,
+                 <SPAN CLASS="keyword">int</SPAN> method             = <SPAN CLASS="omitted">default value</SPAN>,
+                 <SPAN CLASS="keyword">int</SPAN> window_bits        = <SPAN CLASS="omitted">default value</SPAN>, 
+                 <SPAN CLASS="keyword">int</SPAN> mem_level          = <SPAN CLASS="omitted">default value</SPAN>, 
+                 <SPAN CLASS="keyword">int</SPAN> strategy           = <SPAN CLASS="omitted">default value</SPAN>,
+                 std::string file_name  = "",
+                 std::string comment    = "",
+                 std::time_t mtime      = 0 );</PRE>
+
+<P>Constructs a <CODE>gzip_params</CODE> object, where the parameters have the following interpretations:</AP>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="level"></A><I>level</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Compression level. Must be equal to <CODE>zlib::default_compression</CODE> or a value in the range <CODE>0-9</CODE>. The value <CODE>0</CODE> yields no compression, while <CODE>9</CODE> yields the best compression ratio. Affects compression only.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="method"></A><I>method</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Compression method. Must equal <A HREF="zlib.html#deflated"><CODE>zlib::deflated</CODE></A>. Affects compression only.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="window_bits"></A><I>window_bits</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The base two logarithm of the window size. Must be in the range 8-15; defaults to 15.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="mem_level"></A><I>mem_level</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Specifies the amount of memory to be used. Must be in the range 1-9; defaults to 8. Affects compression only.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="strategy"></A><I>strategy</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Must be <A HREF="zlib.html#default_strategy"><CODE>zlib::default_strategy</CODE></A>, <A HREF="zlib.html#filtered"><CODE>zlib::filtered</CODE></A> or <A HREF="zlib.html#huffman_only"><CODE>zlib::huffman_only</CODE></A>. Affects compression only. </TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="file_name"></A><I>file_name</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Represents the optional section of the G<SPAN STYLE="font-size:80%">ZIP</SPAN> header containing a file name.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="comment"></A><I>comment</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Represents the optional section of the G<SPAN STYLE="font-size:80%">ZIP</SPAN> header containing a comment.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="mtime"></A><I>mtime</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Represents the optional section of the G<SPAN STYLE="font-size:80%">ZIP</SPAN> header containing a file modification time.</TD>
+    </TR>
+</TABLE>
+
+<P>See <A CLASS="bib_ref" HREF="../bibliography.html#gailly">[Gailly]</A> and <A CLASS="bib_ref" HREF="../bibliography.html#deutsch1">[Deutsch1]</A> for additional details.</P>
+
+<A NAME="basic_gzip_compressor"></A>
+<H3>Class template <CODE>basic_gzip_compressor</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Model of <A HREF="../concepts/dual_use_filter.html">DualUseFilter</A> which compresses data in the G<SPAN STYLE="font-size:80%">ZIP</SPAN> format (<A CLASS="bib_ref" HREF="../bibliography.html#deutsch3">[Deutsch3]</A>).</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#basic_gzip_compressor_params">Alloc</A> = std::allocator<<SPAN CLASS="keyword">char</SPAN>> >
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#basic_gzip_compressor_params">basic_gzip_compressor</A> {
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">char</SPAN>                    char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN>  category;
+
+    <A CLASS="documented" HREF="#basic_gzip_compressor_ctors">basic_gzip_compressor</A>( <SPAN CLASS="keyword">const</SPAN> <A CLASS="documented" HREF="#gzip_params">gzip_params</A>& = <SPAN CLASS="omitted">zlib::default_compression</SPAN>,
+                           std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN> );
+
+    <SPAN CLASS="comment">// DualUseFilter members.</SPAN>
+};
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_gzip_compressor<> <SPAN CLASS="defined">gzip_compressor</SPAN>;</PRE>
+
+<A NAME="basic_gzip_compressor_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A C++ standard library allocator type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate a character buffer and to configure zlib.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="basic_gzip_compressor_ctors"></A>
+<H4><CODE>basic_gzip_compressor::basic_gzip_compressor</CODE></H4>
+
+<PRE CLASS="broken_ie">    basic_gzip_compressor( <SPAN CLASS="keyword">const</SPAN> gzip_params& = <SPAN CLASS="omitted">zlib::default_compression</SPAN>,
+                           std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN> );</PRE>
+
+<P>Constructs an instance of <CODE>basic_gzip_compressor</CODE> with the given parameters and buffer size. Since a <A CLASS="documented" HREF="#gzip_params"><CODE>gzip_params</CODE></A> object is implicitly constructible from an <CODE>int</CODE> representing a compression level, an <CODE>int</CODE> may be passed as the first constructor argument.</P>
+
+<A NAME="basic_gzip_decompressor"></A>
+<H3>Class template <CODE>basic_gzip_decompressor</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Model of <A HREF="../concepts/dual_use_filter.html">DualUseFilter</A> which decompresses data in the G<SPAN STYLE="font-size:80%">ZIP</SPAN> format (<A CLASS="bib_ref" HREF="../bibliography.html#deutsch3">[Deutsch3]</A>).</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#basic_gzip_decompressor_params">Alloc</A> = std::allocator<<SPAN CLASS="keyword">char</SPAN>> >
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#basic_gzip_decompressor_params">basic_gzip_decompressor</A> {
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">char</SPAN>                    char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN>  category;
+
+    <A CLASS="documented" HREF="#basic_gzip_decompressor_constructor">basic_gzip_decompressor</A>( <SPAN CLASS="keyword">int</SPAN> window_bits = <SPAN CLASS="omitted">default value</SPAN>, 
+                             std::streamsize buffer_size = 
+                                 <SPAN CLASS="omitted">default value</SPAN> );
+
+    <SPAN CLASS="comment">// DualUseFilter members.</SPAN>
+};
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_gzip_decompressor<> <SPAN CLASS="defined">gzip_decompressor</SPAN>;</PRE>
+
+<A NAME="basic_gzip_decompressor_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A C++ standard library allocator type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate a character buffer and to configure zlib.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="basic_gzip_decompressor_constructor"></A>
+<H4><CODE>basic_gzip_decompressor::basic_gzip_decompressor</CODE></H4>
+
+<PRE CLASS="broken_ie">    basic_gzip_decompressor( <SPAN CLASS="keyword">int</SPAN> window_bits = <SPAN CLASS="omitted">default value</SPAN>, 
+                             std::streamsize buffer_size = 
+                                 <SPAN CLASS="omitted">default value</SPAN> );</PRE>
+
+<P>Constructs an instance of <CODE>basic_gzip_decompressor</CODE> with the given <A HREF="#window_bits">window bits</A> value and buffer size. Other parameters affecting decompression are set to default values.</P>
+
+<A NAME="gzip_error"></A>
+<H3>Class <CODE>gzip_error</CODE></H3>
+
+<H4>Description</H4>
+
+Used by the gzip Filters to report errors.
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">class</SPAN> <SPAN CLASS="defined">gzip_error</SPAN> : <SPAN CLASS="keyword">public</SPAN> std::ios_base::failure {
+<SPAN CLASS="keyword">public:</SPAN>
+    <A CLASS="documented" HREF="#gzip_error_constructor">gzip_error</A>(<SPAN CLASS="keyword">int</SPAN> error);
+    <A CLASS="documented" HREF="#gzip_error_constructor">gzip_error</A>(<SPAN CLASS="keyword">const</SPAN> <A CLASS="documented" HREF="zlib.html#zlib_error">zlib_error</A>& e);
+    <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#gzip_error_error">error</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#gzip_error_zlib_error_code">zlib_error_code</A>() <SPAN CLASS="keyword">const</SPAN>;
+};</PRE>
+
+<A NAME="gzip_error_constructor"></A>
+<H4><CODE>gzip_error::gzip_error</CODE></H4>
+
+<PRE CLASS="broken_ie">    gzip_error(<SPAN CLASS="keyword">int</SPAN> error);
+    gzip_error(<SPAN CLASS="keyword">const</SPAN> <A HREF="#zlib_error">zlib_error</A>& e);</PRE>
+
+<P>The first member constructs an instance of <CODE>gzip_error</CODE> with the given error code from the namespace <A HREF="#constants"><CODE>boost::iostreams::gzip</CODE></A>. The second constructs an instance of <CODE>gzip_error</CODE> based on an instance of <A HREF="zlib.html#zlib_error"><CODE>zlib_error</CODE></A>.</P>
+
+<A NAME="gzip_error_error"></A>
+<H4><CODE>gzip_error::error</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> error() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Returns an error code from the namespace <A HREF="#constants"><CODE>boost::iostreams::gzip</CODE></A>.</P>
+
+<A NAME="gzip_error_zlib_error_code"></A>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> zlib_error_code() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Returns an error code from the namespace <A HREF="zlib.html#constants"><CODE>boost::iostreams::zlib</CODE></A>. Meaningful only if <A HREF="#gzip_error_error"><CODE>error()</CODE></A> returns the constant <A HREF="#constants"><CODE>boost::iostreams::gzip::zlib_error</CODE></A>.</P>
+
+<A NAME="examples"></A>
+<H2>Examples</H2>
+
+The following code decompresses data from a file and writes it to standard output.
+
+<PRE CLASS="broken_ie"><SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><fstream></SPAN>
+<SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><iostream></SPAN>
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/filtering_streambuf.hpp"><SPAN CLASS="literal"><boost/iostreams/filtering_streambuf.hpp></SPAN></A>
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/copy.hpp"><SPAN CLASS="literal"><boost/iostreams/copy.hpp></SPAN></A>
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/filter/gzip.hpp"><SPAN CLASS="literal"><boost/iostreams/filter/gzip.hpp></SPAN></A>
+
+int main() 
+{
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+
+    ifstream file(<SPAN CLASS="literal">"hello.gz"</SPAN>, ios_base::in | ios_base::binary);
+    filtering_streambuf<input> in;
+    in.push(gzip_decompressor());
+    in.push(file);
+    boost::iostreams::copy(in, cout);
+}</PRE>
+
+<A NAME="installation"></A>
+<H3>Installation</H3>
+
+<P>
+     The gzip Filters depend on the third-party zlib library, which is <I>not</I> included in the Boost distribution. Prebuilt zlib binaries are available on most UNIX and UNIX-like systems, and will be found automatically by the Boost build system. Windows users can obtain prebuilt binaries at the <A HREF="http://www.gzip.org/zlib/">zlib homepage</A>. Users can also configure the Boost Iostream library to build zlib from the source code, which is available at the zlib homepage. For deta [...]
+</P>
+
+<!-- Adler's obfuscated address is copied from his homepage -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/line_filter.html b/vendor/pdalboost/libs/iostreams/doc/classes/line_filter.html
new file mode 100644
index 0000000..319f39a
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/line_filter.html
@@ -0,0 +1,128 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template basic_line_filter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>basic_line_filter</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+  <DT><A href="#example">Example</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The class template <CODE>basic_line_filter</CODE> is a <A HREF='../concepts/dual_use_filter.html'>DualUseFilter</A> for use as a base class by Filters which filter a character sequence one line at a time. Derived classes override the <CODE>private</CODE> <CODE>virtual</CODE> function <CODE>do_filter</CODE>, which takes a line of unfiltered text as argument returns the result of filtering the line.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/filter/line.hpp"><CODE><boost/iostreams/filter/line.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> <A CLASS='documented' HREF='#template_params'>Ch</A>, <SPAN CLASS='keyword'>typename</SPAN> <A CLASS='documented' HREF='#template_params'>Alloc</A> = std::allocator<Ch> >
+<SPAN CLASS='keyword'>class</SPAN> <A CLASS='documented' HREF='#template_params'>basic_line_filter</A>  {
+<SPAN CLASS='keyword'>public:</SPAN>
+    <SPAN CLASS='keyword'>typedef</SPAN> Ch                                char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> std::basic_string<
+                Ch, 
+                std::char_traits<char_type>,   
+                Alloc
+            >                                 string_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>          category;
+<SPAN CLASS='keyword'>protected:</SPAN>
+    basic_line_filter();
+<SPAN CLASS='keyword'>public:</SPAN>
+    <SPAN CLASS='keyword'>virtual</SPAN> ~basic_line_filter();
+<SPAN CLASS='keyword'>private:</SPAN>
+    <SPAN CLASS='keyword'>virtual</SPAN> string_type <A CLASS='documented' HREF='#do_filter'>do_filter</A>(<SPAN CLASS='keyword'>const</SPAN> string_type& line) <SPAN CLASS='numeric_literal'>= 0</SPAN>;
+};
+
+<SPAN CLASS='keyword'>typedef</SPAN> basic_line_filter<<SPAN CLASS='keyword'>char</SPAN>>     <SPAN CLASS='defined'>line_filter</SPAN>;
+<SPAN CLASS='keyword'>typedef</SPAN> basic_line_filter<<SPAN CLASS='keyword'>wchar_t</SPAN>>  <SPAN CLASS='defined'>wline_filter</SPAN>;
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Ch</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The <A HREF='../guide/traits.html#char_type'>character type</A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A standard library allocator type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate a character buffer</TD>
+    </TR>
+</TABLE>
+
+<A NAME="do_filter"></A>
+<H4><CODE>line_filter::do_filter</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>virtual</SPAN> string_type do_filter(<SPAN CLASS='keyword'>const</SPAN> string_type& line) <SPAN CLASS='numeric_literal'>= 0</SPAN>;</PRE>
+
+<P>The argument <CODE>line</CODE> represents a single line of unfiltered text, not including any terminal newline character. Returns the result of filtering <CODE>line</CODE>.</P>
+
+<A NAME="example"></A>
+<H2>Example</H2>
+
+<P>The following example shows a <CODE>line_filter</CODE> which counts the number of lines which exceed a given length.</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/filter/line.hpp'><SPAN CLASS='literal'><boost/iostreams/filter/line.hpp></SPAN></A>
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS='keyword'>class</SPAN> long_line_counter : <SPAN CLASS='keyword'>public</SPAN> io::line_filter {
+<SPAN CLASS='keyword'>public</SPAN>
+    <SPAN CLASS="keyword">explicit</SPAN> long_line_counter(<SPAN CLASS='keyword'>int</SPAN> max_length = <SPAN CLASS='numeric_literal'>80</SPAN>) 
+        : max_(max_length), count_(<SPAN CLASS='numeric_literal'>0</SPAN>) 
+        { }
+    <SPAN CLASS='keyword'>int</SPAN> count() <SPAN CLASS='keyword'>const</SPAN> { <SPAN CLASS='keyword'>return</SPAN> count_; }
+<SPAN CLASS='keyword'>private:</SPAN>
+    std::string do_filter(<SPAN CLASS='keyword'>const</SPAN> std::string& line)
+    {
+        <SPAN CLASS='keyword'>if</SPAN> (line.size() > max_)
+            ++count_;
+    }
+    <SPAN CLASS='keyword'>int</SPAN> max_;
+    <SPAN CLASS='keyword'>int</SPAN> count_;
+};</PRE>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/mapped_file.html b/vendor/pdalboost/libs/iostreams/doc/classes/mapped_file.html
new file mode 100644
index 0000000..ba11602
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/mapped_file.html
@@ -0,0 +1,680 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Memory-Mapped Files</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Memory-Mapped Files</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#acknowledgments">Acknowledgments</A></DT>
+  <DT><A href="#installation">Installation</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A>
+    <OL>
+      <LI CLASS="square"><A href="#mapped_file_params">Class <CODE>mapped_file_params</CODE></A></LI>
+      <LI CLASS="square"><A href="#mapped_file_source">Class <CODE>mapped_file_source</CODE></A></LI>
+      <LI CLASS="square"><A href="#mapped_file_sink">Class <CODE>mapped_file_sink</CODE></A></LI>
+      <LI CLASS="square"><A href="#mapped_file">Class <CODE>mapped_file</CODE></A></LI>
+    </OL>
+  </DT>
+</DL>
+
+<HR>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The classes <CODE>mapped_file_source</CODE>, <CODE>mapped_file_sink</CODE> and <CODE>mapped_file</CODE> provide access to memory-mapped files on Windows and POSIX systems. These <A HREF="../guide/concepts.html#device_concepts">Devices</A> behave much like the <A HREF="file.html">File Wrappers</A> <CODE>basic_file_source</CODE>, <CODE>basic_file_sink</CODE> and <CODE>basic_file</CODE>, with the following important differences:
+</P>
+    <UL>
+        <LI CLASS="square">By default, files must exist before being opened, and are not truncated; attempting to write past the end of a file results in an error. To map a file which does not yet exist, use <A HREF="#mapped_file_params_size"><CODE>mapped_file_params::new_file_size</CODE></A>.
+        <LI CLASS="square">Files are always opened in binary mode.
+        <LI CLASS="square">Wide-character streams are not supported. 
+    </UL>
+<P>
+    Wide-character versions of the memory-mapped file Devices may be defined as follows, using the template <A HREF="code_converter.html"><CODE>code_converter</CODE></A>:
+    <PRE CLASS="broken_ie">    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/code_converter.hpp"><SPAN CLASS="literal"><boost/iostreams/code_converter.hpp></SPAN></A>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/device/mapped_file.hpp"><SPAN CLASS="literal"><boost/iostreams/device/mapped_file.hpp></SPAN></A>
+
+    <SPAN CLASS="keyword">typedef</SPAN> code_converter<mapped_file_source>  <SPAN CLASS="defined">wmapped_file_source</SPAN>;
+    <SPAN CLASS="keyword">typedef</SPAN> code_converter<mapped_file_sink>    <SPAN CLASS="defined">wmapped_file_sink</SPAN>;</PRE>
+</P>
+
+<A NAME="acknowledgments"></A>
+<H2>Acknowledgments</H2>
+
+<P>
+The memory-mapped file Devices are based on the work of Craig Henderson (<A CLASS="bib_ref" HREF="../bibliography.html#henderson">[Henderson]</A>). Additionals features were implemented by Jonathan Graehl.
+</P>
+
+<A NAME="installation"></A>
+<H2>Installation</H2>
+
+<P>
+    The memory-mapped file Devices depend on the source file <A CLASS="header" HREF="../../src/mapped_file.cpp"><CODE><libs/iostreams/src/mapped_file.cpp></CODE></A>. This source file makes use of Windows or POSIX headers depending on the user's operating system. For installation instructions see <A HREF="../installation.html">Installation</A>.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/device/mapped_file.hpp"><CODE><boost/iostreams/device/mapped_file.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="mapped_file_params"></A>
+<H3>1. Class <CODE>mapped_file_params</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Class encapsulating the parameters used to open a memory-mapped file.</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">struct</SPAN> <SPAN CLASS="defined">mapped_file_params</SPAN> {
+    <SPAN CLASS='keyword'>explicit</SPAN> mapped_file_params();
+    <SPAN CLASS='keyword'>explicit</SPAN> mapped_file_params(<SPAN CLASS='keyword'>const</SPAN> std::string& path);
+    std::string              <A CLASS='documented' HREF='#mapped_file_params_hint'>path</A>;
+    mapped_file::mapmode     <A CLASS='documented' HREF='#mapped_file_params_flags'>flags</A>;
+    std::ios_base::openmode  <A CLASS='documented' HREF='#mapped_file_params_mode'>mode</A>;  // Deprecated
+    stream_offset            <A CLASS='documented' HREF='#mapped_file_params_offset'>offset</A>;
+    std::size_t              <A CLASS='documented' HREF='#mapped_file_params_length'>length</A>;
+    stream_offset            <A CLASS="documented" HREF="#mapped_file_params_size">new_file_size</A>;
+    <SPAN CLASS='keyword'>const</SPAN> <SPAN CLASS='keyword'>char</SPAN>*              <A CLASS='documented' HREF='#mapped_file_params_hint'>hint</A>;
+};
+
+} } // End namespace boost::io</PRE>
+
+<A NAME="mapped_file_params_path"></A>
+<H4><CODE>mapped_file_params::path</CODE></H4>
+
+<PRE CLASS="broken_ie">    std::string              path;</PRE>
+    
+<P>The pathname of the file to map.</P>
+
+<A NAME="mapped_file_params_mode"></A>
+<H4><CODE>mapped_file_params::mode</CODE></H4>
+
+<PRE CLASS="broken_ie">    std::ios_base::openmode  mode;</PRE>
+    
+<P>Indicates whether the file should be opened with read-access, write-access or both. Ignored by <CODE>mapped_file_source</CODE> and <CODE>mapped_file_sink</CODE>. This member is deprecated.  Please use flags in new code instead.</P>
+
+<A NAME="mapped_file_params_flags"></A>
+<H4><CODE>mapped_file_params::flags</CODE></H4>
+
+<PRE CLASS="broken_ie">    mapped_file::mapmode  flags;</PRE>
+    
+<P>Indicates whether the file should be opened with read-access, read-write-access, or private access.  A file opened with private access can be written to, but the changes will not affect the underlying file.</P>
+
+<A NAME="mapped_file_params_offset"></A>
+<H4><CODE>mapped_file_params::offset</CODE></H4>
+
+<PRE CLASS="broken_ie">    stream_offset            offset;</PRE>
+    
+<P>The offset where the mapping is to begin. This value must be a multiple of the operating system's virtual memory allocation granularity, which can be abotained via the static member function <A HREF="#mapped_file_alignment"><CODE>alignment</CODE></A> of  <CODE>mapped_file_source</CODE>, <CODE>mapped_file_sink</CODE> or <CODE>mapped_file</CODE>. Defaults to <CODE>0</CODE>.</P>
+
+<A NAME="mapped_file_params_length"></A>
+<H4><CODE>mapped_file_params::length</CODE></H4>
+
+<PRE CLASS="broken_ie">    std::size_t              length;</PRE>
+    
+<P>The number of bytes to map. If this parameter is not specified, the entire file is mapped.</P>
+
+<A NAME="mapped_file_params_size"></A>
+<H4><CODE>mapped_file_params::new_file_size</CODE></H4>
+
+<PRE CLASS="broken_ie">    stream_offset            new_file_size;</PRE>
+    
+<P>If this value is non-zero it specifies the size of a file to be created. If a file with pathname <I>path</I> already exists, it will be overwritten.</P>
+
+<A NAME="mapped_file_params_hint"></A>
+<H4><CODE>mapped_file_params::hint</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>const</SPAN> <SPAN CLASS='keyword'>char</SPAN>*              hint;</PRE>
+    
+<P>Suggests a location in the process's address space for the mapping to begin.</P>
+
+<A NAME="mapped_file_source"></A>
+<H3>2. Class <CODE>mapped_file_source</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Model of <A HREF="../concepts/source.html">Source</A> providing read-only access to memory-mapped files on Windows and POSIX systems.</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">class</SPAN> <SPAN CLASS="defined">mapped_file_source</SPAN> {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>char</SPAN>                      char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  category;
+    <A CLASS='documented' HREF='#mapped_file_source_default_ctor'>mapped_file_source</A>();
+    <SPAN CLASS='keyword'>explicit</SPAN> <A CLASS='documented' HREF='#mapped_file_source_params_ctor'>mapped_file_source</A>(<A CLASS='documented' HREF='#mapped_file_params'>mapped_file_params</A> params);
+    <SPAN CLASS='keyword'>explicit</SPAN> <A CLASS='documented' HREF='#mapped_file_source_basic_ctor'>mapped_file_source</A>( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+                                 size_type length = max_length,
+                                 boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN> );
+    void <A CLASS='documented' HREF='#mapped_file_source_params_open'>open</A>(<A CLASS='documented' HREF='#mapped_file_params'>mapped_file_params</A> params);
+    void <A CLASS='documented' HREF='#mapped_file_source_basic_open'>open</A>( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+               size_type length = max_length,
+               boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN> );
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS='documented' HREF='#mapped_file_source_is_open'>is_open</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>void</SPAN> <A CLASS='documented' HREF='#mapped_file_source_close'>close</A>();
+    size_type <A CLASS='documented' HREF='#mapped_file_source_size'>size</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>const</SPAN> <SPAN CLASS='keyword'>char</SPAN>* <A CLASS='documented' HREF='#mapped_file_source_data'>data</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>static</SPAN> <SPAN CLASS='keyword'>int</SPAN> <A CLASS='documented' HREF='#mapped_file_source_alignment'>alignment</A>();
+};
+
+} } // End namespace boost::io</PRE>
+
+<A NAME="mapped_file_source_default_ctor"></A>
+<H4><CODE>mapped_file_source::mapped_file_source</CODE></H4>
+
+<PRE CLASS="broken_ie">    mapped_file_source();</PRE>
+    
+<P>Constructs a <CODE>mapped_file_source</CODE> which must be opened before it can be used to perform i/o.</P>
+
+<A NAME="mapped_file_source_params_ctor"></A>
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>explicit</SPAN> mapped_file_source(<A CLASS='documented' HREF='#mapped_file_params'>mapped_file_params</A> params);</PRE>
+    
+<P>Constructs a <CODE>mapped_file_source</CODE> from the given parameters.</P>
+
+<A NAME="mapped_file_source_basic_ctor"></A>
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>explicit</SPAN> mapped_file_source( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+                                 size_type length = max_length,
+                                 boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN> );</PRE>
+    
+<P>Constructs a <CODE>mapped_file_source</CODE> to access a specified file. The parameters have the following interpretation:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>path</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The pathname of the file to map.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>length</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The number of bytes to map. If this parameter is not specified, the entire file is mapped.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>offset</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The offset where the mapping is to begin. This value must be a multiple of the operating system's virtual memory allocation granularity, which can be obtained using the static member function <A HREF='#mapped_file_source_alignment'><CODE>alignment</CODE></A>.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="mapped_file_source_params_open"></A>
+<H4><CODE>mapped_file_source::open</CODE></H4>
+
+<PRE CLASS="broken_ie">    void open(<A CLASS='documented' HREF='#mapped_file_params'>mapped_file_params</A> params);</PRE>
+    
+<P>Connects this <CODE>mapped_file_source</CODE> to a memory-mapped file obtained as described by the given parameters.</P>
+
+<A NAME="mapped_file_source_basic_open"></A>
+<PRE CLASS="broken_ie">        void open( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+                   size_type length = max_length,
+                   boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN> );</PRE>
+    
+<P>Connects this <CODE>mapped_file_source</CODE> to a memory-mapped file obtained as described by the given parameters, which have the following interpretation:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>path</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The pathname of the file to map.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>length</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The number of bytes to map. If this parameter is not specified, the entire file is mapped.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>offset</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The offset where the mapping is to begin. This value must be a multiple of the operating system's virtual memory allocation granularity, which can be obtained using the static member function <A HREF='#mapped_file_source_alignment'><CODE>alignment</CODE></A>.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="mapped_file_source_is_open"></A>
+<H4><CODE>mapped_file_source::is_open</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_open() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+    
+<P>Returns <CODE>true</CODE> if this <CODE>mapped_file_source</CODE> has been successfully opened without subsequently having been closed.</P>
+
+<A NAME="mapped_file_source_close"></A>
+<H4><CODE>mapped_file_source::close</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>void</SPAN> close();</PRE>
+    
+<P>Frees the mapping associated with this <CODE>mapped_file_source</CODE>.</P>
+
+<A NAME="mapped_file_source_size"></A>
+<H4><CODE>mapped_file_source::size</CODE></H4>
+
+<PRE CLASS="broken_ie">    size_type size() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+    
+<P>Returns the size in bytes of the mapping associated with this <CODE>mapped_file_source</CODE>.</P>
+
+<A NAME="mapped_file_source_data"></A>
+<H4><CODE>mapped_file_source::data</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>const</SPAN> <SPAN CLASS='keyword'>char</SPAN>* data() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+    
+<P>Returns a pointer to the first byte of data in the mapping associated with this <CODE>mapped_file_source</CODE>.</P>
+
+<A NAME="mapped_file_source_alignment"></A>
+<H4><CODE>mapped_file_source::alignment</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>static</SPAN> <SPAN CLASS='keyword'>int</SPAN> alignment();</PRE>
+    
+<P>Returns the operating system's virtual memory allocation granularity.</P>
+
+<A NAME="mapped_file_sink"></A>
+<H3>3. Class <CODE>mapped_file_sink</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Model of <A HREF="../concepts/sink.html">Sink</A> providing write-only access to memory-mapped files on Windows and POSIX systems.</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">class</SPAN> <SPAN CLASS="defined">mapped_file_sink</SPAN> {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>char</SPAN>                      char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  category;
+    <SPAN CLASS='keyword'>enum</SPAN> mapmode { readwrite, priv };
+    <A CLASS='documented' HREF='#mapped_file_sink_default_ctor'>mapped_file_sink</A>();
+    <SPAN CLASS='keyword'>explicit</SPAN> <A CLASS='documented' HREF='#mapped_file_sink_params_ctor'>mapped_file_sink</A>(<A CLASS='documented' HREF='#mapped_file_params'>mapped_file_params</A> params);
+    <SPAN CLASS='keyword'>explicit</SPAN> <A CLASS='documented' HREF='#mapped_file_sink_basic_ctor'>mapped_file_sink</A>( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+                               size_type length = max_length,
+                               boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN>,
+                               mapmode flags = readwrite );
+    void <A CLASS='documented' HREF='#mapped_file_sink_params_open'>open</A>(<A CLASS='documented' HREF='#mapped_file_params'>mapped_file_params</A> params);
+    void <A CLASS='documented' HREF='#mapped_file_sink_basic_open'>open</A>( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+               size_type length = max_length,
+               boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN>,
+               mapmode flags = readwrite );
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS='documented' HREF='#mapped_file_sink_is_open'>is_open</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    mapmode <A CLASS='documented' HREF='#mapped_file_sink_flags'>flags</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>void</SPAN> <A CLASS='documented' HREF='#mapped_file_sink_close'>close</A>();
+    size_type <A CLASS='documented' HREF='#mapped_file_sink_size'>size</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>char</SPAN>* <A CLASS='documented' HREF='#mapped_file_sink_data'>data</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>static</SPAN> <SPAN CLASS='keyword'>int</SPAN> <A CLASS='documented' HREF='#mapped_file_sink_alignment'>alignment</A>();
+};
+
+} } // End namespace boost::io</PRE>
+
+<A NAME="mapped_file_sink_default_ctor"></A>
+<H4><CODE>mapped_file_sink::mapped_file_sink</CODE></H4>
+
+<PRE CLASS="broken_ie">    mapped_file_sink();</PRE>
+    
+<P>Constructs a <CODE>mapped_file_sink</CODE> which must be opened before it can be used to perform i/o.</P>
+
+<A NAME="mapped_file_sink_params_ctor"></A>
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>explicit</SPAN> mapped_file_sink(<A CLASS='documented' HREF='#mapped_file_params'>mapped_file_params</A> params);</PRE>
+    
+<P>Constructs a <CODE>mapped_file_sink</CODE> from the given parameters.</P>
+
+<A NAME="mapped_file_sink_basic_ctor"></A>
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>explicit</SPAN> mapped_file_sink( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+                               size_type length = max_length,
+                               boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN>,
+                               mapmode flags );</PRE>
+    
+<P>Constructs a <CODE>mapped_file_sink</CODE> to access a specified file. The parameters have the following interpretation:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>path</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The pathname of the file to map.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>length</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The number of bytes to map. If this parameter is not specified, the entire file is mapped.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>offset</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The offset where the mapping is to begin. This value must be a multiple of the operating system's virtual memory allocation granularity, which can be obtained using the static member function <A HREF='#mapped_file_sink_alignment'><CODE>alignment</CODE></A>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>flags</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Indicates whether the <CODE>mapped_file_sink</CODE> should be opened for read-write access or private access.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="mapped_file_sink_params_open"></A>
+<H4><CODE>mapped_file_sink::open</CODE></H4>
+
+<PRE CLASS="broken_ie">    void open(<A CLASS='documented' HREF='#mapped_file_params'>mapped_file_params</A> params);</PRE>
+    
+<P>Connects this <CODE>mapped_file_sink</CODE> to a memory-mapped file obtained as described by the given parameters.</P>
+
+<A NAME="mapped_file_sink_basic_open"></A>
+<PRE CLASS="broken_ie">        void open( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+                   size_type length = max_length,
+                   boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN>
+                   mapmode flags );</PRE>
+    
+<P>Connects this <CODE>mapped_file_sink</CODE> to a memory-mapped file obtained as described by the given parameters, which have the following interpretation:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>path</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The pathname of the file to map.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>length</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The number of bytes to map. If this parameter is not specified, the entire file is mapped.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>offset</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The offset where the mapping is to begin. This value must be a multiple of the operating system's virtual memory allocation granularity, which can be obtained using the static member function <A HREF='#mapped_file_sink_alignment'><CODE>alignment</CODE></A>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>flags</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Indicates whether the <CODE>mapped_file_sink</CODE> should be opened for read-write access or private access.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="mapped_file_sink_is_open"></A>
+<H4><CODE>mapped_file_sink::is_open</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_open() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+    
+<P>Returns <CODE>true</CODE> if this <CODE>mapped_file_sink</CODE> has been successfully opened without subsequently having been closed.</P>
+
+<A NAME="mapped_file_sink_flags"></A>
+<H4><CODE>mapped_file_sink::flags</CODE></H4>
+
+<PRE CLASS="broken_ie">    mapmode flags() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+    
+<P>Indicates whether the <CODE>mapped_file_sink</CODE> was opened for read/write-access or private-access.</P>
+
+<A NAME="mapped_file_sink_close"></A>
+<H4><CODE>mapped_file_sink::close</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>void</SPAN> close();</PRE>
+    
+<P>Frees the mapping associated with this <CODE>mapped_file_sink</CODE>.</P>
+
+<A NAME="mapped_file_sink_size"></A>
+<H4><CODE>mapped_file_sink::size</CODE></H4>
+
+<PRE CLASS="broken_ie">    size_type size() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+    
+<P>Returns the size in bytes of the mapping associated with this <CODE>mapped_file_sink</CODE>.</P>
+
+<A NAME="mapped_file_sink_data"></A>
+<H4><CODE>mapped_file_sink::data</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>char</SPAN>* data() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+    
+<P>Returns a pointer to the first byte of data in the mapping associated with this <CODE>mapped_file_sink</CODE>.</P>
+
+<A NAME="mapped_file_sink_alignment"></A>
+<H4><CODE>mapped_file_sink::alignment</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>static</SPAN> <SPAN CLASS='keyword'>int</SPAN> alignment();</PRE>
+    
+<P>Returns the operating system's virtual memory allocation granularity.</P>
+
+<A NAME="mapped_file"></A>
+<H3>4. Class <CODE>mapped_file</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Model of <A HREF="../concepts/seekable_device.html">SeekableDevice</A> providing read-write access to memory-mapped files on Windows and POSIX systems.</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">class</SPAN> <SPAN CLASS="defined">mapped_file</SPAN> {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>char</SPAN>                      char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  category;
+    <SPAN CLASS='keyword'>enum</SPAN> mapmode { readonly, readwrite, priv };
+    <A CLASS='documented' HREF='#mapped_file_default_ctor'>mapped_file</A>();
+    <SPAN CLASS='keyword'>explicit</SPAN> <A CLASS='documented' HREF='#mapped_file_params_ctor'>mapped_file</A>(<A CLASS='documented' HREF='#mapped_file_params'>mapped_file_params</A> params);
+    <SPAN CLASS='keyword'>explicit</SPAN> <A CLASS='documented' HREF='#mapped_file_basic_ctor'>mapped_file</A>( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+                          std::ios_base::openmode mode =
+                              std::ios_base::in | std::ios_base::out,
+                          size_type length = max_length,
+                          boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN> );
+    <SPAN CLASS='keyword'>explicit</SPAN> <A CLASS='documented' HREF='#mapped_file_mapmode_ctor'>mapped_file</A>( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+                          mapmode mode,
+                          size_type length = max_length,
+                          boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN> );
+    <SPAN CLASS='keyword'>void</SPAN> <A CLASS='documented' HREF='#mapped_file_params_open'>open</A>(<A CLASS='documented' HREF='#mapped_file_params'>mapped_file_params</A> params);
+    <SPAN CLASS='keyword'>void</SPAN> <A CLASS='documented' HREF='#mapped_file_basic_open'>open</A>( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+               std::ios_base::openmode mode = 
+                   std::ios_base | std::ios_base,
+               size_type length = max_length,
+               boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN> );
+    <SPAN CLASS='keyword'>void</SPAN> <A CLASS='documented' HREF='#mapped_file_mapmode_open'>open</A>( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+               mapmode mode,
+               size_type length = max_length,
+               boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN> );
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS='documented' HREF='#mapped_file_is_open'>is_open</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    mapmode <A CLASS='documented' HREF='#mapped_file_flags'>flags</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>void</SPAN> <A CLASS='documented' HREF='#mapped_file_close'>close</A>();
+    size_type <A CLASS='documented' HREF='#mapped_file_size'>size</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>char</SPAN>* <A CLASS='documented' HREF='#mapped_file_data'>data</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>const</SPAN> <SPAN CLASS='keyword'>char</SPAN>* <A CLASS='documented' HREF='#mapped_file_const_data'>const_data</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>static</SPAN> <SPAN CLASS='keyword'>int</SPAN> <A CLASS='documented' HREF='#mapped_file_alignment'>alignment</A>();
+};
+
+} } // End namespace boost::iostreams</PRE>
+
+<A NAME="mapped_file_default_ctor"></A>
+<H4><CODE>mapped_file::mapped_file</CODE></H4>
+
+<PRE CLASS="broken_ie">    mapped_file();</PRE>
+    
+<P>Constructs a <CODE>mapped_file</CODE> which must be opened before it can be used to perform i/o.</P>
+
+<A NAME="mapped_file_params_ctor"></A>
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>explicit</SPAN> mapped_file(<A CLASS='documented' HREF='#mapped_file_params'>mapped_file_params</A> params);</PRE>
+    
+<P>Constructs a <CODE>mapped_file</CODE> from the given parameters.</P>
+
+<A NAME="mapped_file_basic_ctor"></A>
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>explicit</SPAN> mapped_file( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+                          std::ios_base::openmode mode = 
+                              std::ios_base | std::ios_base,
+                          size_type length = max_length,
+                          boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN> );</PRE>
+    
+<P>Constructs a <CODE>mapped_file</CODE> to access a specified file. The parameters have the following interpretation:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>path</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The pathname of the file to map.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>mode</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Indicates whether the file should be opened with read-access, write-access or both. Use of <CODE>std::ios_base::openmode</CODE> with <CODE>mapped_file</CODE> is deprecated.  Please use <CODE>mapmode</CODE> instead in new code.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>length</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The number of bytes to map. If this parameter is not specified, the entire file is mapped.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>offset</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The offset where the mapping is to begin. This value must be a multiple of the operating system's virtual memory allocation granularity, which can be obtained using the static member function <A HREF='#mapped_file_alignment'><CODE>alignment</CODE></A>.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="mapped_file_mapmode_ctor"></A>
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>explicit</SPAN> mapped_file( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+                          mapmode mode,
+                          size_type length = max_length,
+                          boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN> );</PRE>
+    
+<P>Constructs a <CODE>mapped_file</CODE> to access a specified file. The parameters have the following interpretation:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>path</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The pathname of the file to map.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>mode</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Indicates whether the file should be opened with read-access, read/write-access or private-access.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>length</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The number of bytes to map. If this parameter is not specified, the entire file is mapped.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>offset</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The offset where the mapping is to begin. This value must be a multiple of the operating system's virtual memory allocation granularity, which can be obtained using the static member function <A HREF='#mapped_file_alignment'><CODE>alignment</CODE></A>.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="mapped_file_params_open"></A>
+<H4><CODE>mapped_file::open</CODE></H4>
+
+<PRE CLASS="broken_ie">    void open(<A CLASS='documented' HREF='#mapped_file_params'>mapped_file_params</A> params);</PRE>
+    
+<P>Connects this <CODE>mapped_file</CODE> to a memory-mapped file obtained as described by the given parameters.</P>
+
+<A NAME="mapped_file_basic_open"></A>
+<PRE CLASS="broken_ie">        void open( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+                   std::ios_base::openmode mode = 
+                       std::ios_base | std::ios_base,
+                   size_type length = max_length,
+                   boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN> );</PRE>
+    
+<P>Connects this <CODE>mapped_file</CODE> to a memory-mapped file obtained as described by the given parameters, which have the following interpretation:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>path</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The pathname of the file to map.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>mode</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Indicates whether the file should be opened with read-access, write-access or both. Use of <CODE>std::ios_base::openmode</CODE> with <CODE>mapped_file</CODE> is deprecated. Please use <CODE>mapmode</CODE> in new code.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>length</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The number of bytes to map. If this parameter is not specified, the entire file is mapped.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>offset</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The offset where the mapping is to begin. This value must be a multiple of the operating system's virtual memory allocation granularity, which can be obtained using the static member function <A HREF='#mapped_file_alignment'><CODE>alignment</CODE></A>.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="mapped_file_mapmode_open"></A>
+<PRE CLASS="broken_ie">        void open( <SPAN CLASS='keyword'>const</SPAN> std::string& path,
+                   mapmode mode,
+                   size_type length = max_length,
+                   boost::intmax_t offset = <SPAN CLASS='numeric_literal'>0</SPAN> );</PRE>
+    
+<P>Connects this <CODE>mapped_file</CODE> to a memory-mapped file obtained as described by the given parameters, which have the following interpretation:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>path</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The pathname of the file to map.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>mode</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Indicates whether the file should be opened with read-access, read/write-access or private access.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>length</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The number of bytes to map. If this parameter is not specified, the entire file is mapped.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>offset</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The offset where the mapping is to begin. This value must be a multiple of the operating system's virtual memory allocation granularity, which can be obtained using the static member function <A HREF='#mapped_file_alignment'><CODE>alignment</CODE></A>.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="mapped_file_is_open"></A>
+<H4><CODE>mapped_file::is_open</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_open() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+    
+<P>Returns <CODE>true</CODE> if this <CODE>mapped_file</CODE> has been successfully opened without subsequently having been closed.</P>
+
+<A NAME="mapped_file_flags"></A>
+<H4><CODE>mapped_file::flags</CODE></H4>
+
+<PRE CLASS="broken_ie">    mapmode flags() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+    
+<P>Indicates whether the <CODE>mapped_file</CODE> was opened for read-access, read/write-access or private-access.</P>
+
+<A NAME="mapped_file_close"></A>
+<H4><CODE>mapped_file::close</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>void</SPAN> close();</PRE>
+    
+<P>Frees the mapping associated with this <CODE>mapped_file</CODE>.</P>
+
+<A NAME="mapped_file_size"></A>
+<H4><CODE>mapped_file::size</CODE></H4>
+
+<PRE CLASS="broken_ie">    size_type size() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+    
+<P>Returns the size in bytes of the mapping associated with this <CODE>mapped_file</CODE>.</P>
+
+<A NAME="mapped_file_data"></A>
+<H4><CODE>mapped_file::data</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>char</SPAN>* data() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+    
+<P>Returns a pointer to the first byte of data in the mapping associated with this <CODE>mapped_file</CODE>, if it was opened with write-access, and a null pointer otherwise.</P>
+
+<A NAME="mapped_file_const_data"></A>
+<H4><CODE>mapped_file::const_data</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>const</SPAN> <SPAN CLASS='keyword'>char</SPAN>* const_data() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+    
+<P>Returns a pointer to the first byte of data in the mapping associated with this <CODE>mapped_file</CODE>.</P>
+
+<A NAME="mapped_file_alignment"></A>
+<H4><CODE>mapped_file::alignment</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>static</SPAN> <SPAN CLASS='keyword'>int</SPAN> alignment();</PRE>
+    
+<P>Returns the operating system's virtual memory allocation granularity.</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/mode.html b/vendor/pdalboost/libs/iostreams/doc/classes/mode.html
new file mode 100644
index 0000000..f031646
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/mode.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template mode_of</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>mode_of</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P><A HREF="http://www.boost.org/libs/mpl/doc/refmanual/metafunction.html" TARGET="_top">Metafunction</A> returning a <A HREF="../guide/modes.html#mode_tags">mode tag</A> corresponding the the <A HREF="../guide/modes.html">mode</A> of a model of one of the <A HREF="../guide/concepts.html#filter_concepts">Filter</A> or <A HREF="../guide/concepts.html#device_concepts">Device</A> concepts.</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/traits.hpp"><CODE><boost/iostreams/traits.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A HREF="#template_params" CLASS="documented">T</A>>
+<SPAN CLASS="keyword">struct</SPAN> mode_of {
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">see below</SPAN> <A HREF="#type" CLASS="documented">type</A>;
+};
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A Model of one of the <A HREF="../guide/concepts.html#filter_concepts">Filter</A> or <A HREF="../guide/concepts.html#device_concepts">Device</A> concepts</TD>
+    </TR>
+</TABLE>
+
+<A NAME="type"></A>
+<H4><CODE>mode_of::type</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN> <A HREF="#type" CLASS="documented">type</A>;</PRE>
+
+<P>The most-derived <A HREF="../guide/modes.html#mode_tags">mode tag</A> to which <A HREF="../guide/traits.html#category"><CODE>category_of<T>::type</CODE></A> is convertible. If there is no such most-derived tag, a compile-time error occurs.</P>
+
+<P>Modes assigned to standard library types are displayed in the following table.</P>
+
+<TABLE STYLE="margin-bottom:2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>T</CODE></TH><TH><CODE>category</CODE></TH></TR>
+    <TR>
+        <TD VALIGN="top">Specialization of <CODE>std::basic_iostream</CODE>, or derived from such a specialization</TD>
+        <TD><CODE>seekable</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">Specialization of <CODE>std::basic_istream</CODE>, or derived from such a specialization</TD>
+        <TD><CODE>input_seekable</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">Specialization of <CODE>std::basic_ostream</CODE>, or derived from such a specialization</TD>
+        <TD><CODE>output_seekable</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">Specialization of <CODE>std::basic_streambuf</CODE>, or derived from such a specialization</TD>
+        <TD><CODE>seekable</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">Specialization of <CODE>std::back_insert_iterator</CODE>, or derived from such a specialization</TD>
+        <TD><CODE>output</CODE></TD>
+    </TR>
+</TABLE>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/newline_filter.html b/vendor/pdalboost/libs/iostreams/doc/classes/newline_filter.html
new file mode 100644
index 0000000..fa25490
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/newline_filter.html
@@ -0,0 +1,311 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Newline Filters</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Newline Filters</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#synopsis">Synopsis</A></DT>
+  <DT><A HREF="#reference">Reference</A>
+    <DL class="page-index">
+      <DT>1. <A HREF="#constants">namespace <CODE>boost::iostreams::newline</CODE></A></DT>
+      <DT>2. <A HREF="#newline_filter">Class <CODE>newline_filter</CODE></A></DT>
+      <DT>3. <A HREF="#newline_checker">Class <CODE>newline_checker</CODE></A></DT>
+      <DT>4. <A HREF="#newline_error">Class <CODE>newline_error</CODE></A></DT>
+    </DL>
+  </DT>
+</DL>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    Boost.Iostreams provides two components for working with line-ending conventions: the class template <A HREF="#newline_filter"><CODE>newline_filter</CODE></A> translates between line-ending conventions, and the class template <A HREF="#newline_checker"><CODE>newline_checker</CODE></A> verifies that a character sequence conforms to a given line-ending convention.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/filter/newline.hpp"><CODE><boost/iostreams/filter/newline.hpp></CODE></A></DT>
+</DL>
+
+<A name="synopsis"></A>
+<H2>Synopsis</H2>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">namespace</SPAN> <A CLASS="documented" HREF="#constants">newline</A> {
+                    
+<SPAN CLASS='keyword'>const</SPAN> <SPAN CLASS='keyword'>int</SPAN> <A CLASS='documented' HREF='#posix'>posix</A>             = 1;    <SPAN CLASS='comment'>// Use CR as line separator.</SPAN>
+<SPAN CLASS='keyword'>const</SPAN> <SPAN CLASS='keyword'>int</SPAN> <A CLASS="documented" HREF="#mac">mac</A>               = 2;    <SPAN CLASS='comment'>// Use LF as line separator.</SPAN>
+<SPAN CLASS='keyword'>const</SPAN> <SPAN CLASS='keyword'>int</SPAN> <A CLASS="documented" HREF="#dos">dos</A>               = 4;    <SPAN CLASS='comment'>// Use CRLF as line separator.</SPAN>
+<SPAN CLASS='keyword'>const</SPAN> <SPAN CLASS='keyword'>int</SPAN> <A CLASS="documented" HREF="#mixed">mixed</A>             = 8;    <SPAN CLASS='comment'>// Mixed line endings.</SPAN>
+<SPAN CLASS='keyword'>const</SPAN> <SPAN CLASS='keyword'>int</SPAN> <A CLASS="documented" HREF="#final_newline">final_newline</A>     = 16;
+
+}   <SPAN CLASS="comment">// End namespace boost::iostreams::newline</SPAN>
+
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#newline_filter">newline_filter</A>;
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#newline_checker">newline_checker</A>;
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#newline_error">newline_error</A>;
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A name="reference"></A>
+<H2>Reference</H2>
+
+<A name="constants"></A>
+<H3>1. Namespace <CODE>boost::iostreams::newline</CODE></H3>
+
+<P>The namespace <CODE>boost::iostreams::newline</CODE> contains integral constants used to configure <CODE>newline_filter</CODE>, <CODE>newline_checker</CODE> and to report errors. The constants have the following interpretations.</P>
+
+<TABLE STYLE="margin-left:2em; margin-bottom:2em" BORDER=1 CELLPADDING=4>
+<TR><TH>Constant</TH><TH>Interpretation</TH></TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="posix"></A><CODE>posix</CODE></TD>
+        <TD>
+            Used to indicate POSIX line-ending conventions.
+        </TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="dos"></A><CODE>dos</CODE></TD>
+        <TD>
+            Used to indicate DOS line-ending conventions.
+        </TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="mac"></A><CODE>mac</CODE></TD>
+        <TD>
+            Used to indicate classic Mac line-ending conventions.
+        </TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="mixed"></A><CODE>mixed</CODE></TD>
+        <TD>
+            Used to describe a document with mixed line endings.
+        </TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="final_newline"></A><CODE>final_newline</CODE></TD>
+        <TD>
+            Used to indicate that a document ends in a newline sequence.
+        </TD>
+    </TR>
+</TABLE>
+
+<A name="newline_filter"></A>
+<H3>2. Class <CODE>newline_filter</CODE></H3>
+
+<H4>Description</H4>
+
+<P>
+    <A HREF="../concepts/dual_use_filter.html">DualUseFilter</A> which converts between the line-ending conventions used by various operating systems. Its sole constructor takes an integral parameter used to specify the target format.
+</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">class</SPAN> <SPAN CLASS="defined">newline_filter</SPAN> {
+<SPAN CLASS='keyword'>public:</SPAN>
+    <SPAN CLASS='keyword'>typedef</SPAN> char                      char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  category;
+    <SPAN CLASS='keyword'>explicit</SPAN> <A CLASS="documented" HREF="#newline_filter_ctor">newline_filter</A>(<SPAN CLASS='keyword'>int</SPAN> target);
+};</PRE>
+
+<A name="newline_filter_ctor"></A>
+<H4><CODE>newline_filter::newline_filter</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>explicit</SPAN> newline_filter(<SPAN CLASS='keyword'>int</SPAN> target);</PRE>
+
+<P>Constructs a newline_filter for converting to the specified format. The parameter target must be <A HREF='#posix'><CODE>newline::posix</CODE></A>, <A HREF='#dos'><CODE>newline::dos</CODE></A> or <A HREF='#mac'><CODE>newline::mac</CODE></A>.</P>
+
+<A name="newline_checker"></A>
+<H3>3. Class <CODE>newline_checker</CODE></H3>
+
+<H4>Description</H4>
+
+<P>
+    <A HREF="../concepts/dual_use_filter.html">DualUseFilter</A> used to verify that a character sequence conforms to a given line-ending convention. 
+</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">class</SPAN> <SPAN CLASS="defined">newline_checker</SPAN> {
+<SPAN CLASS='keyword'>public:</SPAN>
+    <SPAN CLASS='keyword'>typedef</SPAN> char                      char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  category;
+    <SPAN CLASS='keyword'>explicit</SPAN> <A CLASS="documented" HREF="#newline_filter_ctor">newline_checker</A>(<SPAN CLASS='keyword'>int</SPAN> target = <SPAN CLASS='omitted'>default_value</SPAN> );
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS='documented' HREF='#newline_checker_is_posix'>is_posix</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#newline_checker_is_dos">is_dos</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#newline_checker_is_mac">is_mac</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#newline_checker_is_mixed_posix">is_mixed_posix</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#newline_checker_is_mixed_dos">is_mixed_dos</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#newline_checker_is_mixed_mac">is_mixed_mac</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#newline_checker_is_mixed">is_mixed</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#newline_checker_has_final_newline">has_final_newline</A>() <SPAN CLASS='keyword'>const</SPAN>;
+};</PRE>
+
+<A name="newline_checker::newline_checker_ctor"></A>
+<H4><CODE>newline_checker::newline_checker</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>explicit</SPAN> newline_checker(<SPAN CLASS='keyword'>int</SPAN> target = <SPAN CLASS='omitted'>default_value</SPAN> );</PRE>
+
+<P>Constructs a newline_checker. If a target is specified, a newline_error will be thrown as soon as a line-ending sequence is encountered which does not conform to the target. The value target must be be <A HREF='#posix'><CODE>newline::posix</CODE></A>, <A HREF='#dos'><CODE>newline::dos</CODE></A> or <A HREF='#mac'><CODE>newline::mac</CODE></A> or the bitwise OR of one of these values with <A HREF='#mac'><CODE>newline::final_newline</CODE></A>.</P>
+
+<P><B>Note:</B> If a <CODE>newline_checker</CODE> is being used to perform output, the failure of a character sequence to end with a newline sequence may be discovered only when the newline_checker is <A HREF='../functions/close.html'>closed</A>. There are certain circumstances in which exceptions thrown by <A HREF='../functions/close.html'><CODE>close</CODE></A> are caught and ignored by the Iostreams library. Consequently, when performing output specifying <CODE>newline::final_newline< [...]
+
+<A name="newline_checker_is_posix"></A>
+<H4><CODE>newline_checker::is_posix</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_posix() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns true if the characters examined so far contained at least one POSIX line-ending sequence and no line-ending sequences of any other type.</P>
+
+<A name="newline_checker_is_dos"></A>
+<H4><CODE>newline_checker::is_dos</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_dos() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns true if the characters examined so far contained at least one DOS line-ending sequence and no line-ending sequences of any other type.</P>
+
+<A name="newline_checker_is_mac"></A>
+<H4><CODE>newline_checker::is_mac</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_mac() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns true if the characters examined so far contained at least one classic Mac line-ending sequence and no line-ending sequences of any other type.</P>
+
+<A name="newline_checker_is_mixed_posix"></A>
+<H4><CODE>newline_checker::is_mixed_posix</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_mixed_posix() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns true if the characters examined so far contained at least one POSIX line-ending sequence.</P>
+
+<A name="newline_checker_is_mixed_dos"></A>
+<H4><CODE>newline_checker::is_mixed_dos</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_mixed_dos() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns true if the characters examined so far contained at least one DOS line-ending sequence.</P>
+
+<A name="newline_checker_is_mixed_mac"></A>
+<H4><CODE>newline_checker::is_mixed_mac</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_mixed_mac() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns true if the characters examined so far contained at least one classic Mac line-ending sequence.</P>
+
+<A name="newline_checker_is_mixed"></A>
+<H4><CODE>newline_checker::is_mixed</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_mixed() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns true if the characters examined so far contained line-ending sequences of more than one type.</P>
+
+<A name="newline_checker_has_final_newline"></A>
+<H4><CODE>newline_checker::has_final_newline</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> has_final_newline() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns <CODE>true</CODE> if this <CODE>newline_checker</CODE> has either been closed or has reached end-of-stream, and if the examined character sequence ended with a newline sequence.</P>
+
+<A name="newline_error"></A>
+<H3>4. Class template <CODE>newline_error</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Used by <A HREF='#newline_checker'><CODE>newline_checker</CODE></A> to report errors.</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">class</SPAN> <SPAN CLASS="defined">newline_error</SPAN> : <SPAN CLASS="keyword">public</SPAN> std::ios_base::failure {
+<SPAN CLASS='keyword'>public:</SPAN>
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS='documented' HREF='#newline_error_is_posix'>is_posix</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#newline_error_is_dos">is_dos</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#newline_error_is_mac">is_mac</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#newline_error_is_mixed_posix">is_mixed_posix</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#newline_error_is_mixed_dos">is_mixed_dos</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#newline_error_is_mixed_mac">is_mixed_mac</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#newline_error_is_mixed">is_mixed</A>() <SPAN CLASS='keyword'>const</SPAN>;
+    <SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#newline_error_has_final_newline">has_final_newline</A>() <SPAN CLASS='keyword'>const</SPAN>;
+};</PRE>
+
+<A name="newline_error_is_posix"></A>
+<H4><CODE>newline_error::is_posix</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_posix() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns true if the characters examined by the <CODE>newline_checker</CODE> which threw this exception contained at least one POSIX line-ending sequence and no line-ending sequences of any other type.</P>
+
+<A name="newline_error_is_dos"></A>
+<H4><CODE>newline_error::is_dos</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_dos() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns true if the characters examined by the <CODE>newline_checker</CODE> which threw this exception contained at least one DOS line-ending sequence and no line-ending sequences of any other type.</P>
+
+<A name="newline_error_is_mac"></A>
+<H4><CODE>newline_error::is_mac</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_mac() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns true if the characters examined by the <CODE>newline_checker</CODE> which threw this exception contained at least one classic Mac line-ending sequence and no line-ending sequences of any other type.</P>
+
+<A name="newline_error_is_mixed_posix"></A>
+<H4><CODE>newline_error::is_mixed_posix</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_mixed_posix() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns true if the characters examined by the <CODE>newline_checker</CODE> which threw this exception contained at least one POSIX line-ending sequence.</P>
+
+<A name="newline_error_is_mixed_dos"></A>
+<H4><CODE>newline_error::is_mixed_dos</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_mixed_dos() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns true if the characters examined by the <CODE>newline_checker</CODE> which threw this exception contained at least one DOS line-ending sequence.</P>
+
+<A name="newline_error_is_mixed_mac"></A>
+<H4><CODE>newline_error::is_mixed_mac</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_mixed_mac() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns true if the characters examined by the <CODE>newline_checker</CODE> which threw this exception contained at least one classic Mac line-ending sequence.</P>
+
+<A name="newline_error_is_mixed"></A>
+<H4><CODE>newline_error::is_mixed</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> is_mixed() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns true if the characters examined by the <CODE>newline_checker</CODE> which threw this exception contained line-ending sequences of more than one type.</P>
+
+<A name="newline_error_has_final_newline"></A>
+<H4><CODE>newline_error::has_final_newline</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>bool</SPAN> has_final_newline() <SPAN CLASS='keyword'>const</SPAN>;</PRE>
+
+<P>Returns <CODE>true</CODE> if the <CODE>newline_checker</CODE> which threw this exception was either closed or had reached end-of-stream and if the examined character sequence ended with a newline sequence.</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/null.html b/vendor/pdalboost/libs/iostreams/doc/classes/null.html
new file mode 100644
index 0000000..8ba4acf
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/null.html
@@ -0,0 +1,273 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Null Devices</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Null Devices</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#acknowledgments">Acknowledgments</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A>
+    <DL>
+      <DT><A href="#null_source">Class template <CODE>basic_null_source</CODE></A></DT>
+      <DT><A href="#null_sink">Class template <CODE>basic_null_sink</CODE></A></DT>
+      <DT><A href="#null_device">Class template <CODE>basic_null_device</CODE></A></DT>
+    </DL>
+  </DT>
+</DL>
+
+<HR>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The class templates <CODE>basic_null_source</CODE>, <CODE>basic_null_sink</CODE> and <CODE>basic_null_device</CODE> are models of Device whose member functions all have trivial implementations. A <CODE>basic_null_source</CODE> is a <A HREF="../concepts/source.html">Source</A> whose member function <CODE>read</CODE> returns <CODE>-1</CODE>, indicating end-of-sequence. A <CODE>basic_null_sink</CODE> is a <A HREF="../concepts/sink.html">Sink</A> whose member function <CODE>write</CODE>  [...]
+</P>
+
+<P>
+    In addition, each of the above templates is <A HREF='../concepts/closable.html'>Closable</A>, with a no-op implementation of <CODE>close</CODE>.
+</P>
+
+<A NAME="acknowledgments"></A>
+<H2>Acknowledgments</H2>
+
+<P>
+    The templates described here were inspired by <A HREF="http://www.boost.org/people/daryle_walker.html" TARGET="_top">Daryle Walker's</A> <CODE>basic_nullbuf</CODE> template. <I>See</I> <A HREF="http://boost-sandbox.cvs.sourceforge.net/viewvc/boost-sandbox/boost-sandbox/libs/io/doc/null_stream.html" TARGET="_top">Disconnected Streams</A>.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/device/null.hpp"><CODE><boost/iostreams/device/null.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="null_source"></A>
+<H3>Class template <CODE>basic_null_source</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Model of <A HREF="../concepts/source.html">Source</A> whose member function <CODE>read</CODE> returns <CODE>-1</CODE>, indicating end-of-sequence.</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#null_source_params">Ch</A>>
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#null_source_params">basic_null_source</A> { 
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> Ch                        char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  category;
+
+    <A CLASS="documented" HREF="#null_source_ctor">basic_null_source</A>();    
+    std::streamsize <A CLASS="documented" HREF="#null_source_read">read</A>(char_type* s, std::streamsize n);
+    <SPAN CLASS='keyword'>void</SPAN> <A CLASS='documented' HREF='#null_source_close'>close</A>();
+};
+
+<SPAN CLASS='keyword'>typedef</SPAN> basic_null_source<<SPAN CLASS='keyword'>char</SPAN>>     <SPAN CLASS='defined'>null_source</SPAN>;
+<SPAN CLASS='keyword'>typedef</SPAN> basic_null_source<<SPAN CLASS='keyword'>wchar_t</SPAN>>  <SPAN CLASS='defined'>wnull_source</SPAN>;
+
+} } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE>
+
+<A NAME="null_source_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em">
+<TR>
+    <TD><P><I>Ch</I></TD><TD VALIGN="top">-</TD>
+    <TD><P>The <A HREF='../guide/traits.html#char_type'>character type</A> type.</TD>
+</TR>
+</TABLE>
+
+<A NAME="null_source_ctor"></A>
+
+<H4><CODE>basic_null_source::basic_null_source</CODE></H4>
+
+<PRE CLASS="broken_ie">    basic_null_source();</PRE>
+
+<P>Constructs a <CODE>basic_null_source</CODE>.</P>
+
+<A NAME="null_source_read"></A>
+<H4><CODE>basic_null_source::read</CODE></H4>
+
+<PRE CLASS="broken_ie">    std::streamsize read(char_type* s, std::streamsize n);</PRE>
+
+<P>Returns <CODE>-1</CODE>.</P>
+
+<A NAME="null_source_close"></A>
+<H4><CODE>basic_null_source::close</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>void</SPAN> close();</PRE>
+
+<P>No-op.</P>
+
+<A NAME="null_sink"></A>
+<H3>Class template <CODE>basic_null_sink</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Model of <A HREF="../concepts/sink.html">Sink</A> whose member function <CODE>write</CODE> consumes and ignores the contents of the character buffer passed to it.
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#null_sink_params">Ch</A>>
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#null_sink_params">basic_null_sink</A> { 
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> Ch                        char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  category;
+
+    <A CLASS="documented" HREF="#null_sink_ctor">basic_null_sink</A>();
+    std::streamsize <A CLASS="documented" HREF="#null_sink_write">write</A>(<SPAN CLASS='keyword'>const</SPAN> char_type* s, std::streamsize n);
+    <SPAN CLASS='keyword'>void</SPAN> <A CLASS='documented' HREF='#null_sink_close'>close</A>();
+};
+
+<SPAN CLASS='keyword'>typedef</SPAN> basic_null_sink<<SPAN CLASS='keyword'>char</SPAN>>     <SPAN CLASS='defined'>null_sink</SPAN>;
+<SPAN CLASS='keyword'>typedef</SPAN> basic_null_sink<<SPAN CLASS='keyword'>wchar_t</SPAN>>  <SPAN CLASS='defined'>wnull_sink</SPAN>;
+
+} } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE>
+
+<A NAME="null_sink_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em">
+<TR>
+    <TD><P><I>Ch</I></TD><TD VALIGN="top">-</TD>
+    <TD><P>The <A HREF='../guide/traits.html#char_type'>character type</A> type.</TD>
+</TR>
+</TABLE>
+
+<A NAME="null_sink_ctor"></A>
+
+<H4><CODE>basic_null_sink::basic_null_sink</CODE></H4>
+
+<PRE CLASS="broken_ie">    basic_null_sink();</PRE>
+
+<P>Constructs a <CODE>basic_null_sink</CODE>.</P>
+
+<A NAME="null_sink_write"></A>
+<H4><CODE>basic_null_sink::write</CODE></H4>
+
+<PRE CLASS="broken_ie">    std::streamsize write(<SPAN CLASS='keyword'>const</SPAN> char_type* s, std::streamsize n);</PRE>
+
+<P>Returns <CODE>n</CODE>.</P>
+
+<A NAME="null_sink_close"></A>
+<H4><CODE>basic_null_sink::close</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>void</SPAN> close();</PRE>
+
+<P>No-op.</P>
+
+<A NAME="null_device"></A>
+<H3>Class template <CODE>basic_null_device</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Model of <A HREF="../concepts/seekable_device.html">Device</A> whose mode is specified as a template parameter, and whose member functions have trivial implementations, as follows:</P>
+<UL>
+<LI><CODE>read</CODE> returns <CODE>-1</CODE>, indicating end-of-sequence
+<LI><CODE>write</CODE> consumes but ignores the entire contents of the character buffer passed to it
+<LI><CODE>seek</CODE> returns an invalid stream position
+</UL>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#null_device_params">Ch</A>, <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#null_device_params">Mode</A>>
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#null_device_params">basic_null_device</A> {
+<SPAN CLASS="keyword">public</SPAN>:    
+    <SPAN CLASS="keyword">typedef</SPAN> Ch                        char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  category;
+
+    <A CLASS="documented" HREF="#null_device_ctor">basic_null_device</A>();
+    std::streamsize <A CLASS="documented" HREF="#null_device_read">read</A>(char_type* s, std::streamsize n);
+    std::streamsize <A CLASS="documented" HREF="#null_device_write">write</A>(<SPAN CLASS='keyword'>const</SPAN> char_type* s, std::streamsize n);
+    <A CLASS='documented' HREF='../functions/positioning.html#synopsis'>stream_offset</A> <A CLASS='documented' HREF='#null_device_seek'>seek</A>( <A CLASS='documented' HREF='../functions/positioning.html#synopsis'>stream_offset</A> off, std::ios_base::seekdir way,
+                        std::ios_base::openmode which =
+                            std::ios_base::in | std::ios_base::out );
+    <SPAN CLASS='keyword'>void</SPAN> <A CLASS='documented' HREF='#null_device_close'>close</A>();
+};
+
+} } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE>
+
+<A NAME="null_device_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em">
+<TR>
+    <TD><P><I>Ch</I></TD><TD VALIGN="top">-</TD>
+    <TD><P>The <A HREF='../guide/traits.html#char_type'>character type</A>.</TD>
+</TR>
+<TR>
+    <TD><P><I>Mode</I></TD><TD VALIGN="top">-</TD>
+    <TD><P>The <A HREF='../guide/modes.html'>mode</A>.</TD>
+</TR>
+</TABLE>
+
+<A NAME="null_device_ctor"></A>
+<H4><CODE>basic_null_device::basic_null_device</CODE></H4>
+
+<PRE CLASS="broken_ie">    basic_null_device();</PRE>
+
+<P>Constructs a <CODE>basic_null_device</CODE>.</P>
+
+<A NAME="null_device_read"></A>
+<H4><CODE>basic_null_device::read</CODE></H4>
+
+<PRE CLASS="broken_ie">    std::streamsize read(char_type* s, std::streamsize n);</PRE>
+
+<P>Returns <CODE>-1</CODE>. Enabled if <CODE>Mode</CODE> refines <A HREF='../guide/modes.html#mode_tags'><CODE>input</CODE></A>.</P>
+
+<A NAME="null_device_write"></A>
+<H4><CODE>basic_null_device::write</CODE></H4>
+
+<PRE CLASS="broken_ie">    std::streamsize write(<SPAN CLASS='keyword'>const</SPAN> char_type* s, std::streamsize n);</PRE>
+
+<P>Returns <CODE>n</CODE>. Enabled if <CODE>Mode</CODE> refines <A HREF='../guide/modes.html#mode_tags'><CODE>output</CODE></A>.</P>
+
+<A NAME="null_device_seek"></A>
+<H4><CODE>basic_null_device::seek</CODE></H4>
+
+<PRE CLASS="broken_ie">     <A CLASS='documented' HREF='../functions/positioning.html#synopsis'>stream_offset</A> seek( <A CLASS='documented' HREF='../functions/positioning.html#synopsis'>stream_offset</A> off, std::ios_base::seekdir way,
+                         std::ios_base::openmode which =
+                             std::ios_base::in | std::ios_base::out );</PRE>
+
+<P>Returns an invalid stream position. Enabled if <CODE>Mode</CODE> permits random access.</P>
+
+<A NAME="null_device_close"></A>
+<H4><CODE>basic_null_device::close</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>void</SPAN> close();</PRE>
+
+<P>No-op.</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/regex_filter.html b/vendor/pdalboost/libs/iostreams/doc/classes/regex_filter.html
new file mode 100644
index 0000000..81bcd45
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/regex_filter.html
@@ -0,0 +1,246 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template basic_regex_filter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>basic_regex_filter</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#installation">Installation</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The class template <CODE>basic_regex_filter</CODE> performs text substitutions using regular expressions from the <A HREF="http://www.boost.org/libs/regex" TARGET="_top">Boost Regular Expression Library</A> (<A CLASS="bib_ref" HREF="../bibliography.html#maddock">[Maddock]</A>).
+</P>
+<P>
+    Each <CODE>basic_regex_filter</CODE> stores a regular expression and a formatting function. As unfiltered data is scanned for matches, portions of data which fall between regular expression matches are forwarded unchanged. Each time a match is found, the corresponding <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/ref/match_results.html" TARGET="_top"><CODE>match_results</CODE></A> object is passed to the formatting function and the return value is forwarded in place o [...]
+</P>
+<P>
+    Users may construct instances of <CODE>basic_regex_filter</CODE> either from <A HREF="#formatter">formatting functions</A> or from <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/format.html" TARGET="_top">format strings</A>.
+</P>
+<P>
+    Since a regular expression may need to look arbitrarily far ahead in a character sequence, <CODE>basic_regex_filter</CODE> derives from <A HREF="aggregate.html"><CODE>aggregate_filter</CODE></A> and processes an entire sequence of data at once.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/filter/regex.hpp"><CODE><boost/iostreams/filter/regex.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="installation"></A>
+<H2>Installation</H2>
+
+<P>
+    The template <CODE>basic_regex_filter</CODE> uses the <A HREF="http://www.boost.org/libs/regex" TARGET="_top">Boost Regular Expression Library</A>, which must be built separately. See <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/install.html" TARGET="_top">here</A> for details.
+</P>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/function.hpp" TARGET="_top"><SPAN CLASS="literal"><boost/function.hpp></SPAN></A>
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/regex.hpp" TARGET="_top"><SPAN CLASS="literal"><boost/regex.hpp></SPAN></A>
+
+<SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A HREF="#template_params" CLASS="documented">Ch</A>,
+          <SPAN CLASS="keyword">typename</SPAN> <A HREF="#template_params" CLASS="documented">Tr</A> = regex_traits<Ch>,
+          <SPAN CLASS="keyword">typename</SPAN> <A HREF="#template_params" CLASS="documented">Alloc</A> = std::allocator<Ch> >
+<SPAN CLASS="keyword">class</SPAN> <A HREF="#template_params" CLASS="documented">basic_regex_filter</A>
+    : <SPAN CLASS="keyword">public</SPAN> <A CLASS="documented" HREF="aggregate.html">aggregate_filter</A><Ch, std::char_traits<Ch>, Alloc> // Exposition only
+{   
+<SPAN CLASS="keyword">public:</SPAN>
+    <SPAN CLASS="keyword">typedef</SPAN> <A CLASS="documented" HREF="../../../../doc/html/function.html" TARGET="_top">boost::function1<</A>
+                std::basic_string<Ch>, 
+                <SPAN CLASS="keyword">const</SPAN> match_results<const Ch*>&
+            > 
+            <A CLASS="documented" HREF="#formatter">formatter</A>;
+    <A CLASS="documented" HREF="#first_constructor">basic_regex_filter</A>( <SPAN CLASS="keyword">const</SPAN> basic_regex<Ch, Tr, Alloc>& pattern,
+                        <SPAN CLASS="keyword">const</SPAN> formatter& replace,
+                        regex_constants::match_flag_type flags = 
+                            regex_constants::match_default );
+    <A CLASS="documented" HREF="#second_constructor">basic_regex_filter</A>( <SPAN CLASS="keyword">const</SPAN> basic_regex<Ch, Tr, Alloc>& pattern,
+                        <SPAN CLASS="keyword">const</SPAN> std::basic_string<Ch>& fmt,
+                        regex_constants::match_flag_type flags = 
+                            regex_constants::match_default,
+                        regex_constants::match_flag_type fmt_flags = 
+                            regex_constants::format_default );
+    <A CLASS="documented" HREF="#third_constructor">basic_regex_filter</A>( <SPAN CLASS="keyword">const</SPAN> basic_regex<Ch, Tr, Alloc>& pattern,
+                        <SPAN CLASS="keyword">const</SPAN> Ch* fmt,
+                        regex_constants::match_flag_type flags = 
+                            regex_constants::match_default,
+                        regex_constants::match_flag_type fmt_flags = 
+                            regex_constants::format_default );
+};
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_regex_filter<<SPAN CLASS="keyword">char</SPAN>>     <SPAN CLASS="defined">regex_filter</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> basic_regex_filter<<SPAN CLASS="keyword">wchar_t</SPAN>>  <SPAN CLASS="defined">wregex_filter</SPAN>;
+
+} } // End namespace boost::io</PRE>
+
+<A NAME="template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Ch</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The character type</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Tr</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/ref/regex_traits.html" TARGET="_top">regular expression traits</A> type</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A standard library allocator type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate character buffers</TD>
+    </TR>
+</TABLE>
+
+<A NAME="formatter"></A>
+<H4><CODE>basic_regex_filter::formatter</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">typedef</SPAN> boost::function1<
+                std::basic_string<Ch>, 
+                <SPAN CLASS="keyword">const</SPAN> match_results<const Ch*>&
+            > 
+            <B>formatter</B>;</PRE>
+    
+<P>
+    The type of object which a <CODE>basic_regex_filter</CODE> uses to determine the replacement text for a given regular expression match. Each time a match is found, a corresponding <CODE>match_results</CODE> object is passed to a <CODE>formatter</CODE>, which returns the appropriate replacement text. Since <A HREF="http://www.boost.org/libs/function" TARGET="_top">Boost.Function</A> objects are implictly constructible from function objects with the correct signature, users of regular  [...]
+<PRE CLASS="broken_ie">    struct my_formatter {
+        std::string operator()(const match_results<const char*>& match)
+        {
+            <SPAN CLASS="comment">// Examine match and return the appropriate replacement text</SPAN>
+        }
+    };
+    int main()
+    {
+        regex         pattern( <SPAN CLASS="omitted">...</SPAN> );
+        regex_filter  filter(pattern, my_formatter());
+        <SPAN CLASS="omitted">...</SPAN>
+    }</PRE> 
+</P>
+
+<H4><CODE>basic_regex_filter::basic_regex_filter</CODE></H4>
+
+<A NAME="first_constructor"></A>
+<PRE CLASS="broken_ie">    <B>basic_regex_filter</B>( <SPAN CLASS="keyword">const</SPAN> basic_regex<Ch, Tr, Alloc>& pattern,
+                        <SPAN CLASS="keyword">const</SPAN> formatter& replace,
+                        regex_constants::match_flag_type flags = 
+                            regex_constants::match_default );</PRE>
+    
+<P>Constructs a <CODE>basic_regex_filter</CODE> from the given regular expression, formatting function and match flags. The parameters have the following interpretations:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>pattern</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The regular expression to be matched against the stream of unfiltered data</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>replace</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A function which will be passed each <CODE>match_results</CODE> object in succession and whose return values will be be used as replacement text</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>flags</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Used to construct a <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/ref/regex_iterator.html" TARGET="_top">regex_iterator</A></TD>
+    </TR>
+</TABLE>
+
+</P>
+
+<A NAME="second_constructor"></A>
+
+<PRE CLASS="broken_ie">    <B>basic_regex_filter</B>( <SPAN CLASS="keyword">const</SPAN> basic_regex<Ch, Tr, Alloc>& pattern,
+                        <SPAN CLASS="keyword">const</SPAN> std::basic_string<Ch>& fmt,
+                        regex_constants::match_flag_type flags = 
+                            regex_constants::match_default,
+                        regex_constants::match_flag_type fmt_flags = 
+                            regex_constants::format_default );</PRE>
+    
+<P>Constructs a <CODE>basic_regex_filter</CODE> from the given regular expression, format string and pair of match flags. The parameters have the following interpretations:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>pattern</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The regular expression to be matched against the stream of unfiltered data</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>fmt</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/format.html" TARGET="_top">format string</A> which specifies the replacement text for each regular expression match, using <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/ref/match_results.html#boost_regex.match_results.format2" TARGET="_top">match_results::format</A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>flags</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Used to construct a <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/ref/regex_iterator.html" TARGET="_top">regex_iterator</A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>fmt_flags</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The flags argument to <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/ref/match_results.html#boost_regex.match_results.format2" TARGET="_top">match_results::format</A></TD>
+    </TR>
+</TABLE>
+
+<A NAME="third_constructor"></A>
+
+<PRE CLASS="broken_ie">    <B>basic_regex_filter</B>( <SPAN CLASS="keyword">const</SPAN> basic_regex<Ch, Tr, Alloc>& pattern,
+                        <SPAN CLASS="keyword">const</SPAN> Ch* fmt,
+                        regex_constants::match_flag_type flags = 
+                            regex_constants::match_default,
+                        regex_constants::match_flag_type fmt_flags = 
+                            regex_constants::format_default );</PRE>
+    
+<P>Constructs a <CODE>basic_regex_filter</CODE> from the given regular expression, format string and pair of match flags. The parameters have the following interpretations:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>pattern</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The regular expression to be matched against the stream of unfiltered data</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>fmt</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/format.html" TARGET="_top">format string</A> which specifies the replacement text for each regular expression match, using <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/ref/match_results.html#boost_regex.match_results.format2" TARGET="_top">match_results::format</A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>flags</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Used to construct a <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/ref/regex_iterator.html" TARGET="_top">regex_iterator</A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>fmt_flags</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The flags argument to <A HREF="http://www.boost.org/libs/regex/doc/html/boost_regex/ref/match_results.html#boost_regex.match_results.format2" TARGET="_top">match_results::format</A></TD>
+    </TR>
+</TABLE>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/stdio_filter.html b/vendor/pdalboost/libs/iostreams/doc/classes/stdio_filter.html
new file mode 100644
index 0000000..72f1fe8
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/stdio_filter.html
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template basic_stdio_filter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>basic_stdio_filter</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+  <DT><A href="#example">Example</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The class template <CODE>basic_stdio_filter</CODE> is a <A HREF='../concepts/dual_use_filter.html'>DualUseFilter</A> for use as a base class by Filters which read unfiltered data from standard input and write filtered data to standard output.
+</P>
+<P>
+    <CODE>basic_stdio_filter</CODE> is implemented by redirecting <CODE>std::cin</CODE> and <CODE>std::cout</CODE> (or <CODE>std::wcin</CODE> and <CODE>std::wcout</CODE>). Before <CODE>do_filter</CODE> is invoked, the entire stream of unfiltered data is read and stored in memory. As a result, <CODE>basic_stdio_filter</CODE> is unsuitable for use in low-memory environments or in conjunction with streams of data that have no natural end, such as stock tickers. Because of these limitations, [...]
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/filter/stdio.hpp"><CODE><boost/iostreams/filter/stdio.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> <A CLASS='documented' HREF='#template_params'>Ch</A>>
+<SPAN CLASS='keyword'>class</SPAN> <A CLASS='documented' HREF='#template_params'>basic_stdio_filter</A> {
+<SPAN CLASS='keyword'>public:</SPAN>
+    <SPAN CLASS='keyword'>typedef</SPAN> Ch                        char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>  category;
+<SPAN CLASS='keyword'>protected:</SPAN>
+    basic_stdio_filter();
+<SPAN CLASS='keyword'>public:</SPAN>
+    <SPAN CLASS='keyword'>virtual</SPAN> ~basic_stdio_filter();
+<SPAN CLASS='keyword'>private:</SPAN>
+    <SPAN CLASS='keyword'>virtual</SPAN> <SPAN CLASS='keyword'>void</SPAN> <A CLASS='documented' HREF='#do_filter'>do_filter</A>() <SPAN CLASS='numeric_literal'>= 0</SPAN>;
+};
+
+<SPAN CLASS='keyword'>typedef</SPAN> basic_stdio_filter<<SPAN CLASS='keyword'>char</SPAN>>     <SPAN CLASS='defined'>stdio_filter</SPAN>;
+<SPAN CLASS='keyword'>typedef</SPAN> basic_stdio_filter<<SPAN CLASS='keyword'>wchar_t</SPAN>>  <SPAN CLASS='defined'>wstdio_filter</SPAN>;
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Ch</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The <A HREF='../guide/traits.html#char_type'>character type</A></TD>
+    </TR>
+</TABLE>
+
+<A NAME="do_filter"></A>
+<H4><CODE>counter::do_filter</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>virtual</SPAN> <SPAN CLASS='keyword'>void</SPAN> do_filter() <SPAN CLASS='numeric_literal'>= 0</SPAN>;</PRE>
+
+<P>Reads from standard input and writes to standard output until standard input is exhausted. If <CODE>Ch</CODE> is <CODE>char</CODE>, uses <CODE>std::cin</CODE> and <CODE>std::cout</CODE>; if <CODE>Ch</CODE> is <CODE>wchar_t</CODE>, uses <CODE>std::wcin</CODE> and <CODE>std::wcout</CODE>.</P>
+
+<A NAME="example"></A>
+<H2>Example</H2>
+
+<P>Five examples of <CODE>stdio_filter</CODE>s are presented in the <A HREF="../tutorial/writing_filters.html">Tutorial</A>.</P>
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/symmetric_filter.html b/vendor/pdalboost/libs/iostreams/doc/classes/symmetric_filter.html
new file mode 100644
index 0000000..35e505a
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/symmetric_filter.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template symmetric_filter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Class Template <CODE>symmetric_filter</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+  <DT><A href="#examples">Examples</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The class template <CODE>symmetric_filter</CODE> is tool for generating models of <A HREF="../concepts/dual_use_filter.html">DualUseFilter</A> from models of <A HREF="../concepts/symmetric_filter.html">SymmetricFilter</A>. It is useful for defining filters based on C language APIs.
+</P>
+<P>
+    The Iostreams library uses <CODE>symmetric_filter</CODE> to implement the <A HREF="zlib.html">Zlib</A> and <A HREF="bzip2.html">Bzip2</A> Filters.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/filter/symmetric.hpp"><CODE><boost/iostreams/filter/symmetric.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">SymmetricFilter</A>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Alloc</A> = std::allocator<...> >
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#template_params">symmetric_filter</A> {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="../guide/traits.html">char_type_of</A><SymmetricFilter>::type  char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN>                        category;
+
+    <SPAN CLASS="keyword">explicit</SPAN> symmetric_filter(<SPAN CLASS="keyword">int</SPAN> buffer_size);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T0>
+    symmetric_filter(<SPAN CLASS="keyword">int</SPAN> buffer_size, <SPAN CLASS="keyword">const</SPAN> T0& t0);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T0, <SPAN CLASS="keyword">typename</SPAN> T1>
+    symmetric_filter(<SPAN CLASS="keyword">int</SPAN> buffer_size, <SPAN CLASS="keyword">const</SPAN> T0& t0, <SPAN CLASS="keyword">const</SPAN> T1& t1);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T0, ..., <SPAN CLASS="keyword">typename</SPAN> TN>
+    symmetric_filter( <SPAN CLASS="keyword">int</SPAN> buffer_size, const T0& t0,
+                      <SPAN CLASS="keyword">const</SPAN> T1& t1, ..., <SPAN CLASS="keyword">const</SPAN> TN& tN );
+
+    <SPAN CLASS="omitted">...</SPAN>
+<SPAN CLASS="keyword">protected</SPAN>:
+    SymmetricFilter& <A CLASS="documented" HREF="#filter">filter</A>();
+    std::basic_string<char_type, Alloc> <A CLASS="documented" HREF="#unconsumed_input">unconsumed_input</A>() <SPAN CLASS="keyword">const</SPAN>;
+};
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>SymmetricFilter</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of <A HREF="../concepts/symmetric_filter.html">SymmetricFilter</A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A standard library allocator type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate a character buffer</TD>
+    </TR>
+</TABLE>
+
+<A NAME="first_ctor"></A>
+<H4><CODE>symmetric_filter::symmetric_filter</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">explicit</SPAN> symmetric_filter(<SPAN CLASS="keyword">int</SPAN> buffer_size);</PRE>
+
+<P>Constructs an instance of <CODE>symmetric_filter</CODE> based on a default-constructed instance of the template parameter <A HREF="#template_params"><CODE>SymmetricFilter</CODE></A> and having an internal buffer of size <CODE>buffer_size</CODE>.</P>
+
+<A NAME="forwarding_ctors"></A>
+<H4><CODE>symmetric_filter::symmetric_filter</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T0>
+    symmetric_filter(<SPAN CLASS="keyword">int</SPAN> buffer_size, <SPAN CLASS="keyword">const</SPAN> T0& t0);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T0, <SPAN CLASS="keyword">typename</SPAN> T1>
+    symmetric_filter(<SPAN CLASS="keyword">int</SPAN> buffer_size, <SPAN CLASS="keyword">const</SPAN> T0& t0, <SPAN CLASS="keyword">const</SPAN> T1& t1);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T0, ..., <SPAN CLASS="keyword">typename</SPAN> TN>
+    symmetric_filter( <SPAN CLASS="keyword">int</SPAN> buffer_size, <SPAN CLASS="keyword">const</SPAN> T0& t0,
+                              <SPAN CLASS="keyword">const</SPAN> T1& t1, ..., <SPAN CLASS="keyword">const</SPAN> TN& tN );</PRE>
+
+<P>Each member constructs an instance of <CODE>symmetric_filter</CODE> based on an instance of the template parameter <A HREF="#template_params"><CODE>SymmetricFilter</CODE></A> constructed with the given sequence of arguments and having an internal buffer of size <CODE>buffer_size</CODE>.</P>
+
+<A NAME="filter"></A>
+<H4><CODE>symmetric_filter::filter</CODE></H4>
+
+<PRE CLASS="broken_ie">    SymmetricFilter& <A CLASS="documented" HREF="#filter">filter</A>();</PRE>
+
+<P>Returns a reference to the underlying instance of <CODE>SymmetricFilter</CODE>.</P>
+
+<A NAME="unconsumed_input"></A>
+<H4><CODE>symmetric_filter::unconsumed_input</CODE></H4>
+
+<PRE CLASS="broken_ie">    std::basic_string<char_type, Alloc> <A CLASS="documented" HREF="#unconsumed_input">unconsumed_input</A>() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Returns any uncomsumed data remaining in the internal buffer as a standard string. Valid from the time the end of a stream is reached — that is, from the time <CODE><A HREF="../concepts/symmetric_filter.html">SymmetricFilter::filter</A></CODE> returns <CODE>false</CODE> — until <CODE>filter</CODE> is invoked to begin processing a new sequence of data.</P>
+
+<A NAME="examples"></A>
+<H2>Examples</H2>
+
+<P>For example uses of <CODE>symmetric_filter</CODE>, see the headers <A CLASS="header" HREF="../../../../boost/iostreams/filter/zlib.hpp"><CODE><boost/iostreams/filter/zlib.hpp></CODE></A> and <A CLASS="header" HREF="../../../../boost/iostreams/filter/bzip2.hpp"><CODE><boost/iostreams/filter/bzip2.hpp></CODE></A> and the corresponding implementation files <A CLASS="header" HREF="../../src/zlib.cpp"><CODE><libs/iostreams/src/zlib.cpp></CODE></A> and <A CLASS="header" HR [...]
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/classes/zlib.html b/vendor/pdalboost/libs/iostreams/doc/classes/zlib.html
new file mode 100644
index 0000000..c6bb224
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/classes/zlib.html
@@ -0,0 +1,402 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Zlib Filters</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Zlib Filters</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#acknowledgments">Acknowledgments</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#synopsis">Synopsis</A></DT>
+  <DT><A HREF="#reference">Reference</A>
+    <DL class="page-index">
+      <DT><A HREF="#constants">namespace <CODE>boost::iostreams::zlib</CODE></A></DT>
+      <DT><A HREF="#zlib_params">Class <CODE>zlib_params</CODE></A></DT>
+      <DT><A HREF="#basic_zlib_compressor">Class template <CODE>zlib_compressor</CODE></A></DT>
+      <DT><A HREF="#basic_zlib_decompressor">Class template <CODE>zlib_decompressor</CODE></A></DT>
+      <DT><A HREF="#zlib_error">Class <CODE>zlib_error</CODE></A></DT>
+    </DL>
+  </DT>
+  <DT><A href="#examples">Examples</A></DT>
+  <DT><A href="#installation">Installation</A></DT>
+</DL>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The class templates <A HREF="#basic_zlib_compressor"><CODE>basic_zlib_compressor</CODE></A> and <A HREF="#basic_zlib_decompressor"><CODE>basic_zlib_decompressor</CODE></A> perform compression and decompression in the Z<SPAN STYLE="font-size:80%">LIB</SPAN> format (<A CLASS="bib_ref" HREF="../bibliography.html#deutsch1">[Deutsch1]</A>) using Jean-loup Gailly's and Mark Adler's zlib compression library (<A CLASS="bib_ref" HREF="../bibliography.html#gailly">[Gailly]</A>). 
+</P>
+<P>
+    The zlib Filters are <A HREF="../concepts/dual_use_filter.html">DualUseFilters</A> so that they may be used for either input or output. Most commonly, however, the compression Filters will be used for output and the decompression Filters for input.
+</P>
+
+<A NAME="acknowledgments"></A>
+<H2>Acknowledgments</H2>
+
+<P>
+    The zlib Filters were influences by the work of Jeff Garland (<A CLASS="bib_ref" HREF="../bibliography.html#garland">[Garland]</A>) and Jonathan de Halleux (<A CLASS="bib_ref" HREF="../bibliography.html#de_halleux">[de Halleux]</A>).
+</P>
+
+Thanks to <A HREF="mailto:jloup at gailly.net">Jean-loup Gailly</A> and <A HREF="mailto:madler@alumni.caltech.edu">Mark Adler</A> for making their excellent library available to the public with a <A HREF="http://www.boost.org/more/lib_guide.htm#Requirements">Boost-compatible</A> license.
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/filter/zlib.hpp"><CODE><boost/iostreams/filter/zlib.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="synopsis"></A>
+<H2>Synopsis</H2>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">namespace</SPAN> <A CLASS="documented" HREF="#constants">zlib</A> {
+                    
+    <SPAN CLASS="comment">// Compression levels</SPAN>
+
+<SPAN CLASS="keyword">extern</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#no_compression">no_compression</A>;
+<SPAN CLASS="keyword">extern</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#best_speed">best_speed</A>;
+<SPAN CLASS="keyword">extern</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#best_compression">best_compression</A>;
+<SPAN CLASS="keyword">extern</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#default_compression">default_compression</A>;
+
+    <SPAN CLASS="comment">// Compression methods</SPAN>
+
+<SPAN CLASS="keyword">extern</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#deflated">deflated</A>;
+
+    <SPAN CLASS="comment">// Compression strategies</SPAN>
+
+<SPAN CLASS="keyword">extern</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#default_strategy">default_strategy</A>;
+<SPAN CLASS="keyword">extern</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#filtered">filtered</A>;
+<SPAN CLASS="keyword">extern</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#huffman_only">huffman_only</A>;
+
+    <SPAN CLASS="comment">// Status codes</SPAN>
+
+<SPAN CLASS="keyword">extern</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#stream_error">stream_error</A>;
+<SPAN CLASS="keyword">extern</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#version_error">version_error</A>;
+<SPAN CLASS="keyword">extern</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#data_error">data_error</A>;
+<SPAN CLASS="keyword">extern</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#buf_error">buf_error</A>;
+
+}   <SPAN CLASS="comment">// End namespace boost::iostreams::zlib</SPAN>
+
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#zlib_params">zlib_params</A>;
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Alloc = std::allocator<<SPAN CLASS="keyword">char</SPAN>> >
+<SPAN CLASS="keyword">struc</SPAN>t <A CLASS="documented" HREF="#basic_zlib_compressor">basic_zlib_compressor</A>;
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Alloc = std::allocator<<SPAN CLASS="keyword">char</SPAN>> >
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#basic_zlib_decompressor">basic_zlib_decompressor</A>;
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_zlib_compressor<>   <SPAN CLASS="defined">zlib_compressor</SPAN>;
+<SPAN CLASS="keyword">typedef</SPAN> basic_zlib_decompressor<> <SPAN CLASS="defined">zlib_decompressor</SPAN>;
+
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#zlib_error">zlib_error</A>;
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="constants"></A>
+<H3>Namespace <CODE>boost::iostreams::zlib</CODE></H3>
+
+<P>The namespace <CODE>boost::iostreams::zlib</CODE> contains integral constants used to configure zlib Filters and to report errors. The constants have the following interpretations. (<I>See</I> <A CLASS="bib_ref" HREF="../bibliography.html#gailly">[Gailly]</A> for additional details.)</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=1 CELLPADDING=4>
+<TR><TH>Constant</TH><TH>Interpretation</TH></TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="no_compression"></A><CODE>no_compression</CODE></TD>
+        <TD>Compression-level constant specifying that no compression should be performed. Equal to <CODE>Z_NO_COMPRESSION</CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="best_speed"></A><CODE>best_speed</CODE></TD>
+        <TD>Compression-level constant requesting the fasted compression. Equal to <CODE>Z_BEST_SPEED</CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="best_compression"></A><CODE>best_compression.</CODE></TD>
+        <TD>Compression-level constant requesting the best compression ratio. Equal to <CODE>Z_BEST_COMPRESSION</CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="default_compression"></A><CODE>default_compression</CODE></TD>
+        <TD>Default compression level. Equal to <CODE>Z_DEFAULT_COMPRESSION</CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="deflated"></A><CODE>deflated</CODE></TD>
+        <TD>Compression method constant; currently the only supported method. Equal to <CODE>Z_DEFLATED</CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="default_strategy"></A><CODE>default_strategy</CODE></TD>
+        <TD>Compression strategy constant. Equal to <CODE>Z_DEFAULT_STRATEGY</CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="filtered"></A><CODE>filtered</CODE></TD>
+        <TD>Compression strategy constant. Equal to <CODE>Z_FILTERED</CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="huffman_only"></A><CODE>huffman_only</CODE></TD>
+        <TD>Compression strategy constant. Equal to <CODE>Z_HUFFMAN_ONLY</CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="stream_error"></A><CODE>stream_error</CODE></TD>
+        <TD>Error code used to indicate that one of the members of <CODE>zlib_params</CODE> is invalid; may also indicate an internal Iostreams library error. Equal to <CODE>Z_STREAM_ERROR</CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="version_error"></A><CODE>version_error</CODE></TD>
+        <TD>
+            Error code used to indicate that data was compressed with an incompatible version of zlib. Equal to <CODE>Z_VERSION_ERROR</CODE>.
+        </TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="data_error"></A><CODE>data_error</CODE></TD>
+        <TD>
+            Error code used to indicate that a compressed datastream is corrupted. Equal to <CODE>Z_DATA_ERROR.</CODE>
+        </TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="buf_error"></A><CODE>buf_error</CODE></TD>
+        <TD>Error code indicating an internal Iostreams library error. Equal to <CODE>Z_BUF_ERROR.</CODE></TD>
+    </TR>
+</TABLE>
+
+<A NAME="zlib_params"></A>
+<H3>Class <CODE>zlib_params</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Encapsulates the parameters used to configure <A HREF="#basic_zlib_compressor"><CODE>basic_zlib_compressor</CODE></A> and <A HREF="#basic_zlib_decompressor"><CODE>basic_zlib_decompressor</CODE></A>.</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">struct</SPAN> <SPAN CLASS="defined">zlib_params</SPAN> {
+
+    <SPAN CLASS="comment">// Non-explicit constructor</SPAN>
+    <A CLASS="documented" HREF="#zlib_params_constructors">zlib_params</A>( <SPAN CLASS="keyword">int</SPAN> level           = zlib::default_compression,
+                 <SPAN CLASS="keyword">int</SPAN> method          = zlib::deflated,
+                 <SPAN CLASS="keyword">int</SPAN> window_bits     = default value, 
+                 <SPAN CLASS="keyword">int</SPAN> mem_level       = default value, 
+                 <SPAN CLASS="keyword">int</SPAN> strategy        = zlib::default_strategy,
+                 <SPAN CLASS="keyword">bool</SPAN> noheader       = false );
+    <SPAN CLASS="keyword">int</SPAN>  level;
+    <SPAN CLASS="keyword">int</SPAN>  method;
+    <SPAN CLASS="keyword">int</SPAN>  window_bits;
+    <SPAN CLASS="keyword">int</SPAN>  mem_level;
+    <SPAN CLASS="keyword">int</SPAN>  strategy;
+    <SPAN CLASS="keyword">bool</SPAN> noheader;
+};</PRE>
+
+<A NAME="zlib_params_constructors"></A>
+<H4><CODE>zlib_params::zlib_params</CODE></H4>
+
+<PRE CLASS="broken_ie">    zlib_params( <SPAN CLASS="keyword">int</SPAN> level           = zlib::default_compression,
+                 <SPAN CLASS="keyword">int</SPAN> method          = zlib::deflated,
+                 <SPAN CLASS="keyword">int</SPAN> window_bits     = default value, 
+                 <SPAN CLASS="keyword">int</SPAN> mem_level       = default value, 
+                 <SPAN CLASS="keyword">int</SPAN> strategy        = zlib::default_strategy,
+                 <SPAN CLASS="keyword">bool</SPAN> noheader       = false );</PRE>
+
+<P>Constructs a <CODE>zlib_params</CODE> object, where the parameters have the following interpretations:</AP>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="level"></A><I>level</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Compression level. Must be equal to <CODE>zlib::default_compression</CODE> or a value in the range <CODE>0-9</CODE>. The value <CODE>0</CODE> yields no compression, while <CODE>9</CODE> yields the best compression ratio. Affects compression only.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="method"></A><I>method</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Compression method. Must equal <A HREF="#deflated"><CODE>zlib::deflated</CODE></A>. Affects compression only.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="window_bits"></A><I>window_bits</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The base two logarithm of the window size. Must be in the range 8-15; defaults to 15.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="mem_level"></A><I>mem_level</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Specifies the amount of memory to be used. Must be in the range 1-9; defaults to 8. Affects compression only.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="strategy"></A><I>strategy</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Must be <A HREF="#default_strategy"><CODE>zlib::default_strategy</CODE></A>, <A HREF="#filtered"><CODE>zlib::filtered</CODE></A> or <A HREF="#huffman_only"><CODE>zlib::huffman_only</CODE></A>. Affects compression only. </TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><A NAME="noheader"></A><I>noheader</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>True if the Z<SPAN STYLE="font-size:80%">LIB</SPAN> header and trailing A<SPAN STYLE="font-size:80%">DLER</SPAN>-32 checksum should be omitted (see <A CLASS="bib_ref" HREF="../bibliography.html#deutsch1">[Deutsch1]</A>). This results in compression according to the <I>deflate</I> specification (see <A CLASS="bib_ref" HREF="../bibliography.html#deutsch2">[Deutsch2]</A>).</TD>
+    </TR>
+</TABLE>
+
+<P>See <A CLASS="bib_ref" HREF="../bibliography.html#gailly">[Gailly]</A> for additional details.</P>
+
+<A NAME="basic_zlib_compressor"></A>
+<H3>Class template <CODE>basic_zlib_compressor</CODE></H3>
+
+<H4>Description</H4>
+
+Model of <A HREF="../concepts/dual_use_filter.html">DualUseFilter</A> which performs compression using zlib (<A CLASS="bib_ref" HREF="../bibliography.html#gailly">[Gailly]</A>).
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#basic_zlib_compressor_params">Alloc</A> = std::allocator<<SPAN CLASS="keyword">char</SPAN>> >
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#basic_zlib_compressor_params">basic_zlib_compressor</A> {
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">char</SPAN>                    char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN>  category;
+
+    <A CLASS="documented" HREF="#basic_zlib_compressor_constructors">basic_zlib_compressor</A>( <SPAN CLASS="keyword">const</SPAN> <A CLASS="documented" HREF="#zlib_params">zlib_params</A>& = <SPAN CLASS="omitted">zlib::default_compression</SPAN>,
+                           std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN> );
+
+    <SPAN CLASS="comment">// DualUseFilter members.</SPAN>
+};
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_zlib_compressor<> <SPAN CLASS="defined">zlib_compressor</SPAN>;</PRE>
+
+<A NAME="basic_zlib_compressor_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A C++ standard library allocator type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate a character buffer and to configure zlib.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="basic_zlib_compressor_constructors"></A>
+<H4><CODE>basic_zlib_compressor::basic_zlib_compressor</CODE></H4>
+
+<PRE CLASS="broken_ie">    basic_zlib_compressor( <SPAN CLASS="keyword">const</SPAN> <A CLASS="documented" HREF="#zlib_params">zlib_params</A>& = <SPAN CLASS="omitted">zlib::default_compression</SPAN>,
+                           std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN> );</PRE>
+
+<P>Constructs an instance of <CODE>basic_zlib_compressor</CODE> with the given parameters and buffer size. Since a <A CLASS="documented" HREF="#zlib_params"><CODE>zlib_params</CODE></A> object is implicitly constructible from an <CODE>int</CODE> representing a compression level, an <CODE>int</CODE> may be passed as the first constructor argument.</P>
+
+<A NAME="basic_zlib_decompressor"></A>
+<H3>Class template <CODE>basic_zlib_decompressor</CODE></H3>
+
+<H4>Description</H4>
+
+Model of <A HREF="../concepts/dual_use_filter.html">DualUseFilter</A> which performs decompression using zlib (<A CLASS="bib_ref" HREF="../bibliography.html#gailly">[Gailly]</A>).
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#basic_zlib_decompressor_params">Alloc</A> = std::allocator<<SPAN CLASS="keyword">char</SPAN>> >
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#basic_zlib_decompressor_params">basic_zlib_decompressor</A> {
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">char</SPAN>                    char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">implementation-defined</SPAN>  category;
+
+    <A CLASS="documented" HREF="#basic_zlib_decompressor_constructors">basic_zlib_decompressor</A>( <SPAN CLASS="keyword">int</SPAN> window_bits = <SPAN CLASS="omitted">default value</SPAN>, 
+                             std::streamsize buffer_size = 
+                                 <SPAN CLASS="omitted">default value</SPAN> );
+    <A CLASS="documented" HREF="#basic_zlib_decompressor_constructors">basic_zlib_decompressor</A>( <SPAN CLASS="keyword">const</SPAN> <A CLASS="documented" HREF="#zlib_params">zlib_params</A>&,
+                             std::streamsize buffer_size = 
+                                 <SPAN CLASS="omitted">default value</SPAN> );
+
+    <SPAN CLASS="comment">// DualUseFilter members.</SPAN>
+};
+
+<SPAN CLASS="keyword">typedef</SPAN> basic_zlib_decompressor<> <SPAN CLASS="defined">zlib_decompressor</SPAN>;</PRE>
+
+<A NAME="basic_zlib_decompressor_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A C++ standard library allocator type (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate a character buffer and to configure zlib.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="basic_zlib_decompressor_constructors"></A>
+<H4><CODE>basic_zlib_decompressor::basic_zlib_decompressor</CODE></H4>
+
+<PRE CLASS="broken_ie">    basic_zlib_decompressor( <SPAN CLASS="keyword">int</SPAN> window_bits = <SPAN CLASS="omitted">default value</SPAN>, 
+                             std::streamsize buffer_size = 
+                                 <SPAN CLASS="omitted">default value</SPAN> );
+    basic_zlib_decompressor( <SPAN CLASS="keyword">const</SPAN> <A CLASS="documented" HREF="#zlib_params">zlib_params</A>&,
+                             std::streamsize buffer_size = 
+                                 <SPAN CLASS="omitted">default value</SPAN> );</PRE>
+
+<P>The first member constructs an instance of <CODE>basic_zlib_decompressor</CODE> with the given parameters and buffer size.
+The second member constructs an instance of <CODE>basic_zlib_decompressor</CODE> with the given <A HREF="#window_bits">window bits</A> value and buffer size. Other parameters affecting decompression are set to default values.</P>
+
+<A NAME="zlib_error"></A>
+<H3>Class <CODE>zlib_error</CODE></H3>
+
+<H4>Description</H4>
+
+Used by the zlib Filters to report errors.
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">class</SPAN> <SPAN CLASS="defined">zlib_error</SPAN> : <SPAN CLASS="keyword">public</SPAN> std::ios_base::failure {
+<SPAN CLASS="keyword">public:</SPAN>
+    <A CLASS="documented" HREF="#zlib_error_constructor">zlib_error</A>(<SPAN CLASS="keyword">int</SPAN> error);
+    <SPAN CLASS="keyword">int</SPAN> <A CLASS="documented" HREF="#zlib_error_error">error</A>() const;
+};</PRE>
+
+<A NAME="zlib_error_constructor"></A>
+<H4><CODE>zlib_error::zlib_error</CODE></H4>
+
+<PRE CLASS="broken_ie">    zlib_error(<SPAN CLASS="keyword">int</SPAN> error);</PRE>
+
+<P>Constructs an instance of <CODE>zlib_error</CODE> with the given error code from the namespace <A HREF="#constants"><CODE>boost::iostreams::zlib</CODE></A>.</P>
+
+<A NAME="zlib_error_error"></A>
+<H4><CODE>zlib_error::error</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> error() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+
+<P>Returns an error code from the namespace <A HREF="#constants"><CODE>boost::iostreams::zlib</CODE></A>.</P>
+
+<A NAME="examples"></A>
+<H2>Examples</H2>
+
+The following code decompresses data from a file and writes it to standard output.
+
+<PRE CLASS="broken_ie"><SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><fstream></SPAN>
+<SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><iostream></SPAN>
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/filtering_streambuf.hpp"><SPAN CLASS="literal"><boost/iostreams/filtering_streambuf.hpp></SPAN></A>
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/copy.hpp"><SPAN CLASS="literal"><boost/iostreams/copy.hpp></SPAN></A>
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/filter/zlib.hpp"><SPAN CLASS="literal"><boost/iostreams/filter/zlib.hpp></SPAN></A>
+
+int main() 
+{
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+
+    ifstream file(<SPAN CLASS="literal">"hello.z"</SPAN>, ios_base::in | ios_base::binary);
+    filtering_streambuf<input> in;
+    in.push(zlib_decompressor());
+    in.push(file);
+    boost::iostreams::copy(in, cout);
+}</PRE>
+
+<A NAME="installation"></A>
+<H3>Installation</H3>
+
+<P>
+     The zlib Filters depend on the third-party zlib library, which is <I>not</I> included in the Boost distribution. Prebuilt zlib binaries are available on most UNIX and UNIX-like systems, and will be found automatically by the Boost build system. Windows users can obtain prebuilt binaries at the <A HREF="http://www.gzip.org/zlib/" TARGET="_top">zlib homepage</A>. Users can also configure the Boost Iostream library to build zlib from the source code, which is available at the zlib home [...]
+</P>
+
+<!-- Adler's obfuscated address is copied from his homepage -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/bidirectional_device.html b/vendor/pdalboost/libs/iostreams/doc/concepts/bidirectional_device.html
new file mode 100644
index 0000000..1402b3b
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/bidirectional_device.html
@@ -0,0 +1,160 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>BidirectionalDevice</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">BidirectionalDevice</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Definition</H2>
+
+<P>
+    An BidirectionalDevice is a <A HREF="device.html">Device</A> whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="../guide/modes.html#bidirectional">bidirectional</A>.
+</P>
+
+<H2>Description</H2>
+
+<P>
+    An BidirectionalDevice provides read-access to a sequence of characters of a given type and write-access
+    to a separate sequence of characters of the same type. An BidirectionalDevice may expose these sequences in three ways:<A CLASS="footnote_ref" NAME="note_1_ref" HREF="#note_1"><SUP>[1]</SUP></A>
+    <OL>
+        <LI STYLE="list-style-type:lower-roman">
+            by defining member functions <CODE>read</CODE> and <CODE>write</CODE> , invoked indirectly by the Iostreams Library through the functions <A HREF="../functions/read.html"><CODE>boost::iostreams::read</CODE></A> and <A HREF="../functions/write.html"><CODE>boost::iostreams::write</CODE></A>;
+        </LI>
+        <LI STYLE="list-style-type:lower-roman">
+            by overloading or specializing <A HREF="../functions/read.html"><CODE>boost::iostreams::read</CODE></A> and <A HREF="../functions/write.html"><CODE>boost::iostreams::write</CODE></A>; or
+        </LI>
+        <LI STYLE="list-style-type:lower-roman">
+            by defining member functions <CODE>input_sequence</CODE> and <CODE>output_sequence</CODE> returning pairs of pointers delimiting the two sequences in their entirety.
+        </LI>
+    </OL>
+</P>
+
+<P>The i/o mode of a BidirectionalDevice is <A HREF="../guide/modes.html#bidirectional">bidirectional</A> or <A HREF="../guide/modes.html#bidirectional_seekable">bidirectional-seekable</A>.</P>
+
+<H2>Example</H2>
+
+<P>A model of BidirectionalDevice can be defined as follows:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">struct</SPAN> BidirectionalDevice {
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">char</SPAN>                char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> bidirectional_device_tag    category;
+    std::streamsize read(<SPAN CLASS="keyword">char</SPAN>* s, std::streamsize n) 
+        {
+            <SPAN CLASS="comment">// Reads up to n characters from the input 
+            // sequence into the buffer s, returning the number 
+            // of characters read. Returning a value less than n 
+            // indicates end-of-sequence.</SPAN>
+        }
+    std::streamsize write(<SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">char</SPAN>* s, std::streamsize n) 
+        {
+            <SPAN CLASS="comment">// Write up to n characters from the buffer
+            // s to the output sequence, returning the 
+            // number of characters written</SPAN>
+        }
+};</PRE>
+
+<P>
+    Here <CODE>category</CODE> is a tag <CODE>struct</CODE> identifying the containing type as a model of BidirectionalDevice. When defining a new BidirectionalDevice, it suffices to use the tag <CODE>bidirectional_device_tag</CODE>. One can also derive from the helper classes <A HREF="../classes/device.html"><CODE>device<bidirectional></CODE></A> or <A HREF="../classes/device.html#synopsis"><CODE>wdevice<bidirectional></CODE></A>.
+</P>
+
+<H2>Refinement of</H2>
+
+<P><A HREF="source.html">Source</A>, <A HREF="sink.html">Sink</A>.</P>
+
+<H2>Associated Types</H2>
+
+<P>Same as <A HREF="device.html#types">Device</A>, with the following additional requirements:</P>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Category</TD><TD>A type convertible to <A HREF="../guide/traits.html#category_tags">device_tag</A> and to <A HREF="../guide/modes.html#mode_tags"><CODE>bidirectional</CODE></A></TD></TR>
+</TABLE>
+
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>D</CODE></TD><TD>- A type which is a model of BidirectionalDevice</TD></TR>
+    <TR><TD><CODE>Ch</CODE></TD><TD>- The character type of <CODE>D</CODE></TD></TR>
+    <TR><TD><CODE>dev</CODE></TD><TD>- Object of type <CODE>D</CODE></TD></TR>
+    <TR><TD><CODE>s1</CODE></TD><TD>- Object of type <CODE>Ch*</CODE></SPAN></TD></TR>
+    <TR><TD><CODE>s2</CODE></TD><TD>- Object of type <CODE>const Ch*</CODE></SPAN></TD></TR>
+    <TR><TD><CODE>n</CODE></TD><TD>- Object of type <CODE>std::streamsize</CODE></TD></TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics</H2>
+
+<P>Same as <A HREF="device.html#types">Device</A>, with the following additional requirements:</P>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Category Precondition</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE><A HREF="../functions/read.html">boost::iostreams::read</A>(dev, s1, n)</CODE></PRE></TD>
+        <TD><CODE>std::streamsize</CODE></TD>
+        <TD ROWSPAN="2">Not convertible to <A HREF="direct.html"><CODE>direct_tag</CODE></A></TD>
+        <TD>
+            Reads up to <CODE>n</CODE> characters from the input sequence controlled by <CODE>dev</CODE> into <CODE>s1</CODE>, returning the number of characters read; returning a value less than n indicates end-of-sequence
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE><A HREF="../functions/write.html">boost::iostreams::write</A>(dev, s2, n)</CODE></PRE></TD>
+        <TD><CODE>std::streamsize</CODE></TD>
+        <TD>
+            Writes up to <CODE>n</CODE> characters from the sequence beginning at <CODE>s2</CODE> to the sequence controlled by <CODE>dev</CODE>, returning the number of characters written
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>dev.input_sequence()</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::pair<Ch*,Ch*></CODE></PRE></TD>
+        <TD ROWSPAN="2">Convertible to <A HREF="direct.html"><CODE>direct_tag</CODE></A></TD>
+        <TD>Returns a pair of pointers delimiting the input sequence controlled by <CODE>dev</CODE></TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>dev.output_sequence()</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::pair<Ch*,Ch*></CODE></PRE></TD>
+        <TD>Returns a pair of pointers delimiting the output sequence controlled by <CODE>dev</CODE></TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    Errors which occur during the execution of member functions <CODE>read</CODE>, <CODE>write</CODE>, <CODE>input_sequence</CODE> or <CODE>output_sequence</CODE> are indicated by throwing exceptions. Reaching the end of the input sequence is not an error, but attempting to write past the end of the output sequence is.
+</P>
+
+<P>
+    After an exception is thrown, an BidirectionalDevice must be in a consistent state; further i/o operations may throw exceptions but must have well-defined behaviour.
+</P>
+
+
+<H2>Models</H2>
+
+<HR>
+
+<!-- Begin Footnotes -->
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_1" HREF="#note_1_ref"><SUP>[1]</SUP></A>Strictly speaking, (i) and (ii) can be varied independently for input and output, so there are actually five possibilities.
+</P>
+
+<!-- End Footnotes -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/bidirectional_filter.html b/vendor/pdalboost/libs/iostreams/doc/concepts/bidirectional_filter.html
new file mode 100644
index 0000000..86fba9f
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/bidirectional_filter.html
@@ -0,0 +1,154 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>BidirectionalFilter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">BidirectionalFilter</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Definition</H2>
+
+<P>
+    An BidirectionalFilter is a <A HREF="filter.html">Filter</A> whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="../guide/modes.html#bidirectional"><CODE>bidirectional</CODE></A>. 
+</P>
+
+<H2>Description</H2>
+
+<P>
+    An BidirectionalFilter operates on the character sequences controlled by a <A HREF="bidirectional_device.html">BidirectionalDevice</A>, providing access to two filtered sequences having the same character type. It may expose the filtered sequences in two ways:
+    <OL>
+        <LI STYLE="list-style-type:lower-roman">
+            by defining member function <CODE>get</CODE> and <CODE>put</CODE>.
+        </LI>
+        <LI STYLE="list-style-type:lower-roman">
+            by defining member functions <CODE>read</CODE> and <CODE>write</CODE>.
+        </LI>
+    </OL>
+    The second alternative is provided for enhanced performance. BidirectionalFilters implementing this alternative are referred to as <A HREF="multi_character.html">Multi-Character Filters</A>.
+</P>
+
+<H2>Refinement of</H2>
+
+<P><A HREF="input_filter.html">InputFilter</A>, <A HREF="output_filter.html">OutputFilter</A>.</P>
+
+<H2>Associated Types</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Character type</TD><TD>The type of the characters in the filtered sequences</TD></TR>
+    <TR>
+        <TD>Category</TD>
+        <TD>
+            A type convertible to <A HREF="../guide/traits.html#category_tags"><CODE>filter_tag</CODE></A> and to <A HREF="../guide/modes.html#bidirectional"><CODE>bidirectional</CODE></A>
+        </TD>
+    </TR>
+    <TR>
+        <TD>Mode</TD>
+        <TD>
+            The unique <I>most-derived</I> <A HREF="../guide/modes.html#mode_tags">mode tag</A> to which Category is convertible
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>F</CODE></TD><TD>- A type which is a model of BidirectionalFilter</TD></TR>
+    <TR><TD><CODE>D</CODE></TD><TD>- A type which is a model of <A HREF="device.html">Device</A>, with the same character type as <CODE>F</CODE> and with mode refining the mode of <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>Ch</CODE></TD><TD>- The character type of <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>Tr</CODE></A></TD><TD>- <A HREF="../classes/char_traits.html"><CODE>boost::iostreams::char_traits<Ch></CODE></A></TD></TR>
+    <TR><TD><CODE>f</CODE></TD><TD>- Object of type <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>d</CODE></TD><TD>- Object of type <CODE>D</CODE></TD></TR>
+    <TR><TD><CODE>c</CODE></TD><TD>- Object of type <CODE>Ch</CODE></TD></TR>
+    <TR><TD><CODE>s1</CODE></TD><TD>- Object of type <CODE>Ch*</CODE></TD></TR>
+    <TR><TD><CODE>s2</CODE></TD><TD>- Object of type <CODE>const Ch*</CODE></TD></TR>
+    <TR><TD><CODE>n</CODE></TD><TD>- Object of type <CODE>std::streamsize</CODE></TD></TR>
+    <TR><TD><CODE>io</CODE></TD><TD>- Alias for namespace <CODE>boost::iostreams</CODE></TD></TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Category Precondition</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE>typename <A HREF="../guide/traits.html#char_type_of_ref">char_type_of</A><F>::type</CODE></PRE>
+        </TD>
+        <TD><CODE>typename</CODE> of the character type</TD>
+        <TD ALIGN="center">-</TD><TD ALIGN="center">-</TD>
+    </TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE>typename <A HREF="../guide/traits.html#category_ref">category_of</A><F>::type</CODE></PRE>
+        </TD>
+        <TD><CODE>typename</CODE> of the category</TD>
+        <TD ALIGN="center">-</TD><TD ALIGN="center">-</TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.get(d)</CODE></PRE></TD>
+        <TD><CODE>Tr::int_type</CODE></TD>
+        <TD ROWSPAN="2">
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>input</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>multichar_tag</CODE></A>
+        </TD>
+        <TD>
+            Returns the next character in the input sequence controlled by <CODE>f</CODE>, <CODE>Tr::eof()</CODE> if the end of the sequence has been reached or <CODE>Tr::would_block()</CODE> if input is temporarily unavilable because a call to <CODE>d</CODE> has produced fewer characters than requested. The input sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/get.html"><CODE>io::get</CODE></A>, <A HREF="../functions/read.html"><CODE>io::read</CODE></A> [...]
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.put(d, c)</CODE></PRE></TD>
+        <TD><CODE>bool</CODE></TD>
+        <TD>
+            Attempts to writes the character <CODE>c</CODE> to the output sequence controlled by <CODE>f</CODE>, returning <CODE>false</CODE> if <CODE>c</CODE> cannot be consumed because a call to <CODE>d</CODE> has consumed fewer characters than requested. The output sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/put.html"><CODE>io::put</CODE></A> and <A HREF="../functions/write.html"><CODE>io::write</CODE></A>.
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.read(d, s1, n)</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::streamsize</CODE></PRE></TD>
+        <TD ROWSPAN="2">
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>input</CODE></A> and to <A HREF="../guide/traits.html#category_tags"><CODE>multichar_tag</CODE></A>
+        </TD>
+        <TD>
+            Reads up to <CODE>n</CODE> characters from the input sequence controlled by <CODE>f</CODE> into the buffer <CODE>s1</CODE>, returning the number of characters read or <CODE>-1</CODE> to indicate end-of-sequence. A value less than <CODE>n</CODE> may be returned only at end-of-sequence or if input is temporarily unavilable because a call to <CODE>d</CODE> has produced fewer characters than requested. The input sequence controlled by <CODE>d</CODE> may be accessed using <A HREF= [...]
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.write(d, s2, n)</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::streamsize</CODE></PRE></TD>
+        <TD>
+            Writes up to <CODE>n</CODE> characters from the buffer <CODE>s2</CODE> to the output sequence controlled by <CODE>d</CODE>, returning the number of characters written. A value less than <CODE>n</CODE> may be returned only if a call to <CODE>d</CODE> has consumed fewer characters than requested. The output sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/put.html"><CODE>io::put</CODE></A> and <A HREF="../functions/write.html"><CODE>io::write</C [...]
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    Errors which occur during the execution of <CODE>get</CODE>, <CODE>put</CODE>, <CODE>read</CODE> or <CODE>write</CODE> are indicated by throwing exceptions. Reaching the end of the input sequence is not an error, but attempting to write past the end of the output sequence is.
+</P>
+
+<P>
+    After an exception is thrown, an BidirectionalFilter must be in a consistent state; further i/o operations may throw exceptions but must have well-defined behaviour. Furthermore, unless it is <A HREF="closable.html">Closable</A>, it must be ready to begin processing a new character sequence.
+</P>
+
+
+<H2>Models</H2>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/blocking.html b/vendor/pdalboost/libs/iostreams/doc/concepts/blocking.html
new file mode 100644
index 0000000..9456359
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/blocking.html
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Blocking</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Blocking</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Description</H2>
+
+<P>
+    A <A HREF="device.html">Device</A> is Blocking if a <CODE>read</CODE> request never produces fewer characters than requested except at end-of-stream, and if a <CODE>write</CODE> request never consumes fewer characters than requested under any circumstances. All Devices currently provided with the Iostreams library are Blocking. Limited support for non-Blocking Devices has been provided as a foundation for future more comprehensive support of <A HREF='../guide/asynchronous.html'>async [...]
+</P>
+
+<P>
+    The Blocking concept does not apply to filters. Instead, filters are required to be <SPAN CLASS='term'>blocking-preserving</SPAN>, which means that
+</P>
+<UL>
+    <LI>
+        a <CODE>read</CODE> request never produces fewer characters than requested unless end-of-stream has been reached or unless a <CODE>read</CODE> request to a downsteam Source produces fewer characters than requested, and
+    </LI>
+    <LI>
+        a <CODE>write</CODE> request never consumes fewer characters than requested unless a <CODE>write</CODE> request to a downsteam Sink consumes fewer characters than requested.
+    </LI>
+</UL>
+
+<P>
+    Unlike other Iostreams library concepts, Blocking is not associated with any <A HREF='../guide/traits.html#category_tags'>category tag</A>. In the future, a <CODE>non_blocking_tag</CODE> may be introduced.
+</P>
+
+<H2>Refinement of</H2>
+
+<P><A HREF="device.html">Device</A>.</P>
+
+<A NAME="types"></A>
+<H2>Associated Types</H2>
+
+<P>Same as <A HREF="device.html">Device</A>.</P>
+
+<A NAME="expressions"></A>
+<H2>Valid Expressions / Semantics</H2>
+
+<P>Valid expressions are the same as <A HREF="device.html">Device</A>. The additional semantic requirements are described informally above.</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/closable.html b/vendor/pdalboost/libs/iostreams/doc/concepts/closable.html
new file mode 100644
index 0000000..e042338
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/closable.html
@@ -0,0 +1,153 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Closable</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Closable</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Description</H2>
+
+<P>
+    A Closable Filter or Device receives notifications before a stream or stream buffer which contains it is closed.
+</P>
+
+<H4>Motivation</H4>
+
+<P>
+    The C++ standard library does not recognize the notion of an arbitrary stream or stream buffer being <I>open</I> or <I>closed</I>. For the Iostreams library, however, the notion of opening and closing streams and stream buffers is important. Some Filters and Devices have special behavior reserved for the end of a stream — <I>e.g.</I>, an
+    <A HREF="output_filter.html">OutputFilter</A> might conclude each sequence of data with a newline character. 
+    Other Filters or Devices maintain state during a sequence of i/o operations which must be 
+    reset before the Filter or Device can be reused. Such Filters and Devices need to be notified before a stream is closed, and should model Closable.
+</P>
+
+<H4>Closure Notifications</H4>
+    
+<P>
+    The Iostreams library sends closure notifications by invoking the function <A HREF="../functions/close.html"><CODE>close</CODE></A>. For most Closable Filter or Device, <CODE>close</CODE> delegates to a member function <CODE>close</CODE>; for non-Closable Devices, <CODE>close</CODE> calls <A HREF="../functions/flush.html"><CODE>flush</CODE></A>. The <A HREF="../functions/close.html#when">details</A> regarding when and how <CODE>close</CODE> is invoked are complicated. However, defini [...]
+</P>
+
+<H4>Single-Sequence Devices</H4>
+
+<P>
+    If a Device controls a single sequence of characters, it can be made Closable simply by specifying a <A HREF="../guide/traits.html#category_tags">category tag</A> which is convertible to <CODE>closable_tag</CODE> and by adding a member function <CODE>close</CODE>, like so:
+</P>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> close() { <SPAN CLASS="comment"> /* process closure notification */ </SPAN> }</PRE>
+<P>
+    Filters and Devices which derive from the <A HREF="../guide/concepts.html#convenience">convenience templates and <CODE>typedef</CODE>s</A> have category tags convertible to <CODE>closable_tag</CODE> provided automatically.
+</P>
+
+<H4>Single-Sequence Filters</H4>
+
+<P>For Filters controlling a single sequence, the signature of <CODE>close</CODE> is:</P>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Device>
+    <SPAN CLASS="keyword">void</SPAN> close(Device&);</PRE>
+
+<H4>Two-Sequence Devices</H4>
+
+<P>
+    If a Device controls separate input and output sequences, the signature of <CODE>close</CODE> is:</P>
+    <PRE CLASS="broken_ie">    <SPAN CLASS="keyword">void</SPAN> close(std::ios_base::openmode);</PRE>
+<P>This function will be called twice: first with argument <CODE>std::ios_base::in</CODE>, to signal the closing of the input sequence, and later with argument <CODE>std::ios_base::out</CODE>, to signal the closing of the output sequence. </P>
+
+<H4>Two-Sequence Filters</H4>
+
+<P>
+    If a Filter controls separate input and output sequences, the signature of <CODE>close</CODE> is:</P>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Device>
+    <SPAN CLASS="keyword">void</SPAN> close(Device&, std::ios_base::openmode);</PRE>
+<P>This function will be called twice: first with argument <CODE>std::ios_base::in</CODE>, to signal the closing of the input sequence, and later with argument <CODE>std::ios_base::out</CODE>, to signal the closing of the output sequence.</P>
+
+<H4>Dual-Use Filters</H4>
+
+<P>The signature of  <CODE>close</CODE> for <A HREF="dual_use_filter.html">DualUserFilters</A> is the same as that for two-sequence Filters:</P>
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Device>
+    <SPAN CLASS="keyword">void</SPAN> close(Device&, std::ios_base::openmode);</PRE>
+<P>This function will be called only once, depending on whether the filter is being used for input or output.</P>
+
+<H2>Refinement of</H2>
+
+<A NAME="types"></A>
+<H2>Associated Types</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Character type</TD><TD>The type of the characters in the associated sequence</TD></TR>
+    <TR><TD>Category</TD><TD>A category tag convertible to <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A></TD></TR>
+</TABLE>
+
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>C</CODE></TD><TD>-</TD><TD>A type which is a model of Closable</TD></TR>
+    <TR><TD><CODE>D</CODE></TD><TD>-</TD><TD>A type which is a model of <A HREF="blocking.html">Blocking</A>, with the same character type as <CODE>C</CODE> and with mode refining the mode of <CODE>C</CODE></TD></TR>
+    <TR><TD><CODE>c</CODE></TD><TD>-</TD><TD>Object of type <CODE>C</CODE></TD></TR>
+    <TR><TD><CODE>d</CODE></TD><TD>-</TD><TD>Object of type <CODE>D</CODE></TD></TR>
+    <TR><TD><CODE>w</CODE></TD><TD>-</TD><TD>Object of type <CODE>std::ios_base::openmode</CODE>, equal to <CODE>std::ios_base::in</CODE> or <CODE>std::ios_base::out</CODE></TD></TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics</H2>
+
+<P>Same as <A HREF="filter.html">Filter</A> or <A HREF="device.html">Device</A>, with the following additional requirements:</P>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Precondition</TH><TH>Semantics</TH><TH>Postcondition</TH></TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE><A HREF="../functions/close.html#close_device">boost::iostreams::close</A>(c, w)</CODE></PRE>
+        </TD>
+        <TD><CODE>void</CODE></TD>
+        <TD>Category convertible to <A HREF="../guide/traits.html#category_tags"><CODE>device_tag</CODE></A></TD>
+        <TD>
+            If <CODE>w</CODE> is <CODE>std::ios_base::out</CODE>, writes zero or more characters to the output sequence
+        </TD>
+        <TD><CODE>c</CODE> is ready to begin processing a new character sequence</TD>
+    </TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE><A HREF="../functions/close.html#close_filter">boost::iostreams::close</A>(c, d, w)</CODE></PRE>
+        </TD>
+        <TD><CODE>void</CODE></TD>
+        <TD>Category convertible to <A HREF="../guide/traits.html#category_tags"><CODE>filter_tag</CODE></A></TD>
+        <TD>
+            <P>
+                If <CODE>w</CODE> is <CODE>std::ios_base::out</CODE>, writes zero or more characters to <CODE>d</CODE> using <A HREF="../functions/put.html"><CODE>boost::iostreams::put</CODE></A> and <A HREF="../functions/write.html"><CODE>boost::iostreams::write</CODE></A>
+            </P>
+        </TD>
+        <TD><CODE>c</CODE> is ready to begin processing a new character sequence</TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    Errors which occur during the execution of <A CLASS="code" HREF="../functions/close.html"><CODE>close</CODE></A> are be indicated by throwing exceptions. Such exceptions are caught and ignored if they occur during the execution of stream or stream buffer destructor.
+</P>
+
+<H2>Models</H2>
+
+<UL>
+    <LI><A HREF="../guide/generic_streams.html">Generic Streams and Stream Buffers</A>.
+    <LI><A HREF="../guide/filtering_streams.html">Filtering Streams and Stream Buffers</A>.
+    <LI>Standard file streams and stream buffers.</A>
+</UL>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/concepts.html b/vendor/pdalboost/libs/iostreams/doc/concepts/concepts.html
new file mode 100644
index 0000000..502f957
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/concepts.html
@@ -0,0 +1,70 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Iostreams Library Concepts</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<STYLE> 
+    DT A { /*text-decoration:none*/ } 
+    LI A { /*text-decoration:none;*/ font: 80% Verdana, Tahoma, Arial, Helvetica, sans-serif }
+</STYLE>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Iostreams Library Concepts</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<A NAME="devices"></A>
+<H4>Devices</H4>
+
+<DL CLASS="page-index">
+  <DT><A href="bidirectional_device.html"><CODE>BidirectionalDevice</CODE></A></DT>
+  <DT><A href="blocking.html"><CODE>Blocking</CODE></A></DT>
+  <DT><A href="device.html"><CODE>Device</CODE></A></DT>
+  <DT><A href="direct.html"><CODE>Direct</CODE></A></DT>
+  <DT><A href="peekable.html"><CODE>Peekable</CODE></A></DT>
+  <DT><A href="seekable_device.html"><CODE>SeekableDevice</CODE></A></DT>
+  <DT><A href="sink.html"><CODE>Sink</CODE></A></DT>
+  <DT><A href="source.html"><CODE>Source</CODE></A></DT>
+</DL>
+
+<A NAME="filters"></A>
+<H4>Filters</H4>
+
+<DL CLASS="page-index">
+  <DT><A href="bidirectional_filter.html"><CODE>BidirectionalFilter</CODE></A></DT>
+  <DT><A href="dual_use_filter.html"><CODE>DualUseFilter</CODE></A></DT>
+  <DT><A href="filter.html"><CODE>Filter</CODE></A></DT>
+  <DT><A href="input_filter.html"><CODE>InputFilter</CODE></A></DT>
+  <DT><A href="multi_character.html"><CODE>Multi-Character</CODE></A></DT>
+  <DT><A href="output_filter.html"><CODE>OutputFilter</CODE></A></DT>
+  <DT><A href="pipable.html"><CODE>Pipable</CODE></A></DT>
+  <DT><A href="seekable_filter.html"><CODE>SeekableFilter</CODE></A></DT>
+</DL>
+
+<A NAME="other"></A>
+<H4>Other</H4>
+
+<DL CLASS="page-index">
+  <DT><A href="closable.html"><CODE>Closable</CODE></A></DT>
+  <DT><A href="flushable.html"><CODE>Flushable</CODE></A></DT>
+  <DT><A href="localizable.html"><CODE>Localizable</CODE></A></DT>
+  <DT><A href="optimally_buffered.html"><CODE>OptimallyBuffered</CODE></A></DT>
+  <DT><A href="symmetric_filter.html"><CODE>SymmetricFilter</CODE></A></DT>
+</DL>
+
+<HR STYLE="margin-top:1em">
+
+<!-- Begin Footer -->
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a><br/>Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/device.html b/vendor/pdalboost/libs/iostreams/doc/concepts/device.html
new file mode 100644
index 0000000..667d8c2
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/device.html
@@ -0,0 +1,259 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Device</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+    <STYLE> P.concept { margin:.5em } </STYLE>
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Device</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Description</H2>
+
+<P>
+    A Device provides access to one or two character sequences. It may provide access to an <SPAN CLASS="term">input sequence</SPAN>, for reading, an <SPAN CLASS="term">output sequence</SPAN>, for writing, or both. The relationship between the two sequences, as well as the operations that may be performed on them, depends on the Device type.
+</P> 
+<P>
+    Typically, Devices are class types which define one or more member functions <CODE>read</CODE>, <CODE>write</CODE> and <CODE>seek</CODE>. The concept Device is defined a bit more broadly, however, so that pre-existing types, such as standard streams and stream buffers, can be treated as models of Device, and so that Devices managing in-memory sequences can be optimized.
+</P> 
+<P>
+    Each Device type has an associated character type and category. The <A HREF="../guide/traits.html#char_type">character type</A> is the type of the characters in the sequence or sequences controlled by instances of the Device. The <A HREF="../guide/traits.html#category">category</A> is a tag structure which the Iostreams library relies on to determine which operations the Device supports. Its function is similar to the <CODE>iterator_category</CODE> member of <CODE>std::iterator_trait [...]
+</P>
+<P>
+    There is one refinement of Device for each of the eight <A HREF="../guide/modes.html">modes</A>, and for each such refinement there is a corresponding refinement of <A HREF="filter.html">Filter</A>. In order to express this corresponce cleanly, it is helpful to include the requirements of the various refinements of Device in the definition of Device itself, qualified by category. The various refinements of Device can then be characterized exactly by the following definitions. For con [...]
+</P>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Concept</TH><TH>Definition</TH></TR>
+    <TR>
+        <TD><A href="source.html">Source</A></TD>
+        <TD>Refinement of Device with mode convertible to <A HREF="../guide/modes.html#input"><CODE>input</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD><A href="sink.html">Sink</A></TD>
+        <TD>Refinement of Device with mode convertible to <A HREF="../guide/modes.html#output"><CODE>output</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD><A href="bidirectional_device.html">BidirectionalDevice</A></TD>
+        <TD>Refinement of Device with mode convertible to <A HREF="../guide/modes.html#bidirectional"><CODE>bidirectional</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD><A href="seekable_device.html">SeekableDevice</A></TD>
+        <TD>Refinement of Device with mode convertible to <A HREF="../guide/modes.html#seekable"><CODE>seekable</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD>SeekableSource</TD>
+        <TD>Refinement of Device with mode convertible to <A HREF="../guide/modes.html#input_seekable"><CODE>input_seekable</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD>SeekableSink</TD>
+        <TD>Refinement of Device with mode convertible to <A HREF="../guide/modes.html#output_seekable"><CODE>output_seekable</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD>BidirectionalSeekableDevice</TD>
+        <TD>Refinement of Device with mode convertible to <A HREF="../guide/modes.html#bidirectional_seekable"><CODE>bidirectional_seekable</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD>DualSeekableDevice</TD>
+        <TD>Refinement of Device with mode convertible to <A HREF="../guide/modes.html#dual_seekable"><CODE>dual_seekable</CODE></A></TD>
+    </TR>
+</TABLE>
+
+<H2>Note</H2>
+
+<P>To be usable with the streams and stream buffers provided by the Boost Iostreams library, Devices must model <A HREF="blocking.html">Blocking</A>.
+
+<H2>Standard Streams and Stream Buffers</H2>
+
+<P>
+    Standard streams and stream buffers are models of Device. It is not possible to tell the exact <A HREF="../guide/modes.html">mode</A> of an arbitrary stream or stream buffer, so the Iostreams library must make an educated guess. (<I>See</I> <A HREF="../classes/mode.html#type">Class Template <CODE>mode_of</CODE>.</A>) Since this guess may not accurately reflect the behavior of a particular stream or stream buffer, the user is allowed some flexibility when adding a stream or stream buf [...]
+</P>
+
+<H2>Refinement of</H2>
+
+<A NAME="types"></A>
+<H2>Associated Types</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Character type</TD><TD>The type of the characters in the controlled sequences</TD></TR>
+    <TR>
+        <TD>Category</TD>
+        <TD>
+            A type convertible to <A HREF="../guide/traits.html#category_tags"><CODE>device_tag</CODE></A> and to a unique <I>most-derived</I> <A HREF="../guide/modes.html#mode_tags">mode tag</A>
+        </TD>
+    </TR>
+    <TR>
+        <TD>Mode</TD>
+        <TD>
+            The unique <I>most-derived</I> <A HREF="../guide/modes.html#mode_tags">mode tag</A> to which Category is convertible
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>D</CODE></TD><TD>- A type which is a model of Device</TD></TR>
+    <TR><TD><CODE>Ch</CODE></TD><TD>- The character type of <CODE>D</CODE></TD></TR>
+    <TR><TD><CODE>dev</CODE></TD><TD>- Object of type <CODE>D</CODE></TD></TR>
+    <TR><TD><CODE>s1</CODE></TD><TD>- Object of type <CODE>Ch*</CODE></TD></TR>
+    <TR><TD><CODE>s2</CODE></TD><TD>- Object of type <CODE>const Ch*</CODE></TD></TR>
+    <TR><TD><CODE>n</CODE></TD><TD>- Object of type <CODE>std::streamsize</CODE></TD></TR>
+    <TR><TD><CODE>off</CODE></TD><TD>- Object of type <A HREF="../functions/positioning.html#synopsis"><CODE>stream_offset</CODE></A></TD></TR>
+    <TR><TD><CODE>way</CODE></TD><TD>- Object of type <CODE>std::ios_base::seekdir</CODE></TD></TR>
+    <TR><TD><CODE>which</CODE></TD><TD>- Object of type <CODE>std::ios_base::openmode</CODE></TD></TR>
+    <TR><TD><CODE>io</CODE></TD><TD>- Alias for namespace <CODE>boost::iostreams</CODE></TD></TR>
+</TABLE>
+
+
+<A NAME="expressions"></A>
+<H2>Valid Expressions — Typenames</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH></TR>
+    <TR>
+        <TD><CODE>typename <A HREF="../guide/traits.html#char_type_of_ref">char_type_of</A><D>::type</CODE></TD>
+        <TD><CODE>typename</CODE> of the character type</TD>
+    </TR>
+    <TR>
+        <TD><CODE>typename <A HREF="../guide/traits.html#category_ref">category_of</A><D>::type</CODE></TD>
+        <TD><CODE>typename</CODE> of the category</TD>
+    </TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics — Input</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Category Precondition</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE><A HREF="../functions/read.html">io::read</A>(dev, s1, n)</CODE></PRE></TD>
+        <TD><CODE>std::streamsize</CODE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>input</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>direct_tag</CODE></A>
+        </TD>
+        <TD>
+            Reads up to <CODE>n</CODE> characters from the sequence controlled by <CODE>dev</CODE> into <CODE>s1</CODE>, returning the number of characters read, or <CODE>-1</CODE> to indicate end-of-sequence
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>dev.input_sequence()</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::pair<Ch*,Ch*></CODE></PRE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>input</CODE></A> and to <A HREF="../guide/traits.html#category_tags"><CODE>direct_tag</CODE></A>
+        </TD>
+        <TD>Returns a pair of pointers delimiting the sequence controlled by <CODE>dev</CODE></TD>
+    </TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics — Output</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Category Precondition</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE><A HREF="../functions/write.html">io::write</A>(dev, s2, n)</CODE></PRE></TD>
+        <TD><CODE>std::streamsize</CODE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>output</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>direct_tag</CODE></A>
+        </TD>
+        <TD>
+            Writes up to <CODE>n</CODE> characters from the sequence beginning at <CODE>s2</CODE> to the sequence controlled by <CODE>dev</CODE>, returning the number of characters written
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>dev.output_sequence()</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::pair<Ch*,Ch*></CODE></PRE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>output</CODE></A> and to <A HREF="../guide/traits.html#category_tags"><CODE>direct_tag</CODE></A>
+        </TD>
+        <TD>Returns a pair of pointers delimiting the sequence controlled by <CODE>dev</CODE></TD>
+    </TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics — Random-Access</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Category Precondition</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE><A HREF="../functions/seek.html">io::seek</A>(dev, off, way)</CODE></PRE></TD>
+        <TD><CODE>std::streampos</CODE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>seekable</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>direct_tag</CODE></A>
+        </TD>
+        <TD>
+            <P CLASS="concept">
+                Advances the read/write head by <CODE>off</CODE> characters, returning the new position, where the offset is calculated from:
+            </P>
+            <UL STYLE="margin:0,0,0,auto">
+                <LI STYLE="list-style-type:disc;list-style-image:none">the start of the sequence if <CODE>way</CODE> is <CODE>ios_base::beg</CODE>
+                <LI STYLE="list-style-type:disc;list-style-image:none">the current position if <CODE>way</CODE> is <CODE>ios_base::cur</CODE>
+                <LI STYLE="list-style-type:disc;list-style-image:none">the end of the sequence if <CODE>way</CODE> is <CODE>ios_base::end</CODE>
+            </UL>
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE><A HREF="../functions/seek.html">io::seek</A>(dev, off, way, which)</CODE></PRE></TD>
+        <TD><CODE>std::streampos</CODE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>dual_seekable</CODE></A> or <A HREF="../guide/modes.html#mode_tags"><CODE>bidirectional_seekable</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>direct_tag</CODE></A>
+        </TD>
+        <TD>
+             <P CLASS="concept">
+                Advances the read head (if <CODE>which</CODE> is <CODE>std::ios_base::in</CODE>), the write head (if <CODE>which</CODE> is <CODE>std::ios_base::out</CODE>) or both heads (if <CODE>which</CODE> is <CODE>std::ios_base::in | std::ios_base::out</CODE>) by <CODE>off</CODE> characters, returning the new position, where the offset is calculated from
+            </P>
+            <UL STYLE="margin:0,0,0,auto">
+                <LI STYLE="list-style-type:disc;list-style-image:none">the start of the sequence if <CODE>way</CODE> is <CODE>ios_base::beg</CODE>
+                <LI STYLE="list-style-type:disc;list-style-image:none">the current position if <CODE>way</CODE> is <CODE>ios_base::cur</CODE>
+                <LI STYLE="list-style-type:disc;list-style-image:none">the end of the sequence if <CODE>way</CODE> is <CODE>ios_base::end</CODE>
+            </UL>
+            <P CLASS="concept">
+                The result is undefined if <CODE>way</CODE> is <CODE>ios_base::cur</CODE> and <CODE>which</CODE> is <CODE>(std::ios_base::in | std::ios_base::out)</CODE>.
+            </P>
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    Errors which occur during the execution of <CODE>read</CODE>, <CODE>write</CODE>, <CODE>seek</CODE>, <CODE>input_sequence</CODE> or <CODE>output_sequence</CODE> are indicated by throwing exceptions. Reaching the end of the input sequence is not an error, but attempting to write past the end of the output sequence is.
+</P>
+
+<P>
+    After an exception is thrown, a Device must be in a consistent state; further i/o operations may throw exceptions but must have well-defined behaviour.
+</P>
+
+<H2>Models</H2>
+
+<P>
+    See <A HREF="source.html">Source</A>, <A HREF="sink.html">Sink</A>, <A HREF="bidirectional_device.html">BidirectionalDevice</A> and <A HREF="seekable_device.html">SeekableDevice</A>.
+</P>
+
+<!-- Begin Footnotes -->
+
+<HR>
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_1" HREF="#note_1_ref"><SUP>[1]</SUP></A><A CLASS="bib_ref" HREF="../bibliography.html#iso">[I<SPAN STYLE="font-size:80%">SO</SPAN>]</A>, 24.3.1. <I>See</I> <A HREF="http://www.boost.org/more/generic_programming.html#tag_dispatching" TARGET="_top">Tag Dispatching</A> for a discussion.
+</P>
+
+<!-- End Footnotes -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/direct.html b/vendor/pdalboost/libs/iostreams/doc/concepts/direct.html
new file mode 100644
index 0000000..c875681
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/direct.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Direct</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Direct</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Description</H2>
+
+<P>
+    A Device is Direct if it provides access to its controlled sequences as in-memory arrays rather than <I>via</I> a socket-like interface. The difference between a Device which is Direct and one which is not is reflected in the specifications of the various Device refinements, <I>e.g.</I>, <A HREF="source.html">Source</A> and <A HREF="sink.html">Sink</A>.</P>
+</P>
+
+<P>
+    A model of <A HREF="device.html">Device</A> which does not model Direct is called <SPAN CLASS="term">indirect</SPAN>.
+</P>
+
+<H2>Refinement of</H2>
+
+<P><A HREF="device.html">Device</A>.</P>
+
+<A NAME="types"></A>
+<H2>Associated Types</H2>
+
+<P>Same as <A HREF="device.html#types">Device</A>, with the following additional requirements:</P>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Category</TD><TD>A type convertible to <A HREF="../guide/traits.html#category_tags"><CODE>device_tag</CODE></A> and to <A HREF="../guide/traits.html#category_tags"><CODE>direct_tag</CODE></A></TD></TR>
+</TABLE>
+
+<A NAME="expressions"></A>
+<H2>Valid Expressions / Semantics</H2>
+
+<P>Same as <A HREF="device.html">Device</A>.</P>
+
+<H2>Models</H2>
+
+<UL>
+    <LI>The <A HREF="../classes/array.html">Array Devices</A>
+    <LI>The <A HREF="../classes/mapped_file.html">Memory-Mapped File Devices</A>
+</UL>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/dual_use_filter.html b/vendor/pdalboost/libs/iostreams/doc/concepts/dual_use_filter.html
new file mode 100644
index 0000000..8061545
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/dual_use_filter.html
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>DualUseFilter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">DualUseFilter</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Description</H2>
+
+<P>
+    A DualUseFilter is a Filter which can act as an <A HREF="input_filter.html">InputFilter</A> or as an <A HREF="output_filter.html">OutputFilter</A>, but not as both simultaneously. 
+</P>
+<P>
+    DualUseFilters help reduce the number of different Filter types required to implement a particlar filtering algorithm. For example, by implementing <A HREF="../classes/regex_filter.html"><CODE>basic_regex_filter</CODE></A> as a DualUseFilter, the Iostreams library avoids having to define separate templates <CODE>basic_regex_input_filter</CODE> and <CODE>basic_regex_output_filter</CODE>.
+</P>
+
+<H2>Refinement of</H2>
+
+<P><A HREF="input_filter.html">InputFilter</A>, <A HREF="output_filter.html">OutputFilter</A>.</P>
+
+<H2>Associated Types</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Character type</TD><TD>The type of the characters in the filtered sequences</TD></TR>
+    <TR>
+        <TD>Category</TD>
+        <TD>
+            A type convertible to <A HREF="../guide/traits.html#category_tags"><CODE>filter_tag</CODE></A> and to <A HREF="../guide/modes.html#mode_tags"><CODE>dual_use</CODE></A>
+        </TD>
+    </TR>
+    <TR>
+        <TD>Mode</TD>
+        <TD>
+            The unique <I>most-derived</I> <A HREF="../guide/modes.html#mode_tags">mode tag</A> to which Category is convertible
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics</H2>
+
+Same as <A HREF="bidirectional_filter.html">BidirectionalFilter</A>.
+
+<H2>Exceptions</H2>
+
+Same as <A HREF="bidirectional_filter.html">BidirectionalFilter</A>.
+
+<H2>Models</H2>
+
+<UL>
+    <LI>The <A HREF="../guide/text_processing.html">Text Processing Filters</A>.
+    <LI>The compression and decompression filters, except for <A HREF="../classes/gzip.html#basic_gzip_decompressor"><CODE>basic_gzip_decompressor</CODE></A>.
+</UL>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/filter.html b/vendor/pdalboost/libs/iostreams/doc/concepts/filter.html
new file mode 100644
index 0000000..4ee446d
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/filter.html
@@ -0,0 +1,270 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Filter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+    <STYLE> P.concept { margin:.5em } </STYLE>
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Filter</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Description</H2>
+
+<P>
+    A Filter operates on the character sequence or sequences controlled by a <A HREF="device.html">Device</A>, providing access to a filtered input sequence, output sequence or both. Informally, when a Filter <CODE>f</CODE> is used in conjunction with a Device <CODE>d</CODE>, data read from the input sequence of <CODE>d</CODE> is processed by <CODE>f</CODE> before being returned to the user, data written to the output sequence of <CODE>d</CODE> is first processed by <CODE>f</CODE>, and r [...]
+</P> 
+<P>
+    Filters are class types which define one or more member functions <CODE>get</CODE>, <CODE>put</CODE>, <CODE>read</CODE>, <CODE>write</CODE> and <CODE>seek</CODE>; each function takes a reference to a Device as its first argument. Whenever a Filter is used to perform an i/o operation, a reference to the Device being filtered is passed to the Filter as a function argument.
+</P> 
+<P>
+    Each Filter type has an associated character type and category. The <A HREF="../guide/traits.html#char_type">character type</A> is the type of the characters in the input and output sequences. The <A HREF="../guide/traits.html#category">category</A> is a tag structure which the Iostreams library relies on to determine which operations the Filter type supports. Its function is similar to the <CODE>iterator_category</CODE> member of <CODE>std::iterator_traits</CODE>.<A CLASS="footnote_ [...]
+</P>
+<P>
+    There is one refinement of Filter for each of the eight <A HREF="../guide/modes.html">modes</A>, and each such refinement corresponds to a refinement of <A HREF="device.html">Device</A>. In order to express this corresponce cleanly, it is helpful to include the requirements of the various refinements of Filter in the definition of Filter itself, qualified by category. The various refinements of Filter can then be characterized exactly by the following definitions. For convenience, th [...]
+</P>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Concept</TH><TH>Definition</TH></TR>
+    <TR>
+        <TD><A href="input_filter.html">InputFilter</A></TD>
+        <TD>Refinement of Filter with mode convertible to <A HREF="../guide/modes.html#input"><CODE>input</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD><A href="output_filter.html">OutputFilter</A></TD>
+        <TD>Refinement of Filter with mode convertible to <A HREF="../guide/modes.html#output"><CODE>output</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD><A href="bidirectional_filter.html">BidirectionalFilter</A></TD>
+        <TD>Refinement of Filter with mode convertible to <A HREF="../guide/modes.html#bidirectional"><CODE>bidirectional</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD><A href="seekable_filter.html">SeekableFilter</A></TD>
+        <TD>Refinement of Filter with mode convertible to <A HREF="../guide/modes.html#seekable"><CODE>seekable</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD>InputSeekableFilter</TD>
+        <TD>Refinement of Filter with mode convertible to <A HREF="../guide/modes.html#input_seekable"><CODE>input_seekable</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD>OutputSeekableFilter</TD>
+        <TD>Refinement of Filter with mode convertible to <A HREF="../guide/modes.html#output_seekable"><CODE>output_seekable</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD>BidirectionalSeekableFilter</TD>
+        <TD>Refinement of Filter with mode convertible to <A HREF="../guide/modes.html#bidirectional_seekable"><CODE>bidirectional_seekable</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD>DualSeekableFilter</TD>
+        <TD>Refinement of Filter with mode convertible to <A HREF="../guide/modes.html#dual_seekable"><CODE>dual_seekable</CODE></A></TD>
+    </TR>
+</TABLE>
+
+<H2>Refinement of</H2>
+
+<A NAME="types"></A>
+<H2>Associated Types</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Character type</TD><TD>The type of the characters in the filtered sequences</TD></TR>
+    <TR>
+        <TD>Category</TD>
+        <TD>
+            A type convertible to <A HREF="../guide/traits.html#category_tags"><CODE>filter_tag</CODE></A> and to a unique <I>most-derived</I> <A HREF="../guide/modes.html#mode_tags">mode tag</A>
+        </TD>
+    </TR>
+    <TR>
+        <TD>Mode</TD>
+        <TD>
+            The unique <I>most-derived</I> <A HREF="../guide/modes.html#mode_tags">mode tag</A> to which Category is convertible
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>F</CODE></TD><TD>- A type which is a model of Filter</TD></TR>
+    <TR><TD><CODE>D</CODE></TD><TD>- A type which is a model of <A HREF="device.html">Device</A>, with the same character type as <CODE>F</CODE> and with mode refining the mode of <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>Ch</CODE></TD><TD>- The character type of <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>Tr</CODE></A></TD><TD>- <A HREF="../classes/char_traits.html"><CODE>boost::iostreams::char_traits<Ch></CODE></A></TD></TR>
+    <TR><TD><CODE>f</CODE></TD><TD>- Object of type <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>d</CODE></TD><TD>- Object of type <CODE>D</CODE></TD></TR>
+    <TR><TD><CODE>c</CODE></TD><TD>- Object of type <CODE>Ch</CODE></TD></TR>
+    <TR><TD><CODE>s1</CODE></TD><TD>- Object of type <CODE>Ch*</CODE></TD></TR>
+    <TR><TD><CODE>s2</CODE></TD><TD>- Object of type <CODE>const Ch*</CODE></TD></TR>
+    <TR><TD><CODE>n</CODE></TD><TD>- Object of type <CODE>std::streamsize</CODE></TD></TR>
+    <TR><TD><CODE>off</CODE></TD><TD>- Object of type <A HREF="../functions/positioning.html#synopsis"><CODE>stream_offset</CODE></A></TD></TR>
+    <TR><TD><CODE>way</CODE></TD><TD>- Object of type <CODE>std::ios_base::seekdir</CODE></TD></TR>
+    <TR><TD><CODE>which</CODE></TD><TD>- Object of type <CODE>std::ios_base::openmode</CODE></TD></TR>
+    <TR><TD><CODE>io</CODE></TD><TD>- Alias for namespace <CODE>boost::iostreams</CODE></TD></TR>
+</TABLE>
+
+
+<A NAME="expressions"></A>
+<H2>Valid Expressions — Typenames</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH></TR>
+    <TR>
+        <TD><CODE>typename <A HREF="../guide/traits.html#char_type_of_ref">char_type_of</A><F>::type</CODE></TD>
+        <TD><CODE>typename</CODE> of the character type</TD>
+    </TR>
+    <TR>
+        <TD><CODE>typename <A HREF="../guide/traits.html#category_ref">category_of</A><F>::type</CODE></TD>
+        <TD><CODE>typename</CODE> of the category</TD>
+    </TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics — Input</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Category Precondition</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.get(d)</CODE></PRE></TD>
+        <TD><CODE>Tr::int_type</CODE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>input</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>multichar_tag</CODE></A>
+        </TD>
+        <TD>
+            Returns the next character in the input sequence controlled by <CODE>f</CODE>, <CODE>Tr::eof()</CODE> if the end of the sequence has been reached or <CODE>Tr::would_block()</CODE> if input is temporarily unavilable because a call to <CODE>d</CODE> has produced fewer characters than requested. The input sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/get.html"><CODE>io::get</CODE></A>, <A HREF="../functions/read.html"><CODE>io::read</CODE></A> [...]
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.read(d, s1, n)</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::streamsize</CODE></PRE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>input</CODE></A> and to <A HREF="../guide/traits.html#category_tags"><CODE>multichar_tag</CODE></A>
+        </TD>
+        <TD>
+            Reads up to <CODE>n</CODE> characters from the input sequence controlled by <CODE>f</CODE> into the buffer <CODE>s1</CODE>, returning the number of characters read or <CODE>-1</CODE> to indicate end-of-sequence. A value less than <CODE>n</CODE> may be returned only at end-of-sequence or if input is temporarily unavilable because a call to <CODE>d</CODE> has produced fewer characters than requested. The input sequence controlled by <CODE>d</CODE> may be accessed using <A HREF= [...]
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics — Output</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Category Precondition</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.put(d, c)</CODE></PRE></TD>
+        <TD><CODE>bool</CODE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>output</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>multichar_tag</CODE></A>
+        </TD>
+        <TD>
+            Attempts to writes the character <CODE>c</CODE> to the output sequence controlled by <CODE>f</CODE>, returning <CODE>false</CODE> if <CODE>c</CODE> cannot be consumed because a call to <CODE>d</CODE> has consumed fewer characters than requested. The output sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/put.html"><CODE>io::put</CODE></A> and <A HREF="../functions/write.html"><CODE>io::write</CODE></A>.
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.write(d, s2, n)</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::streamsize</CODE></PRE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>output</CODE></A> and to <A HREF="../guide/traits.html#category_tags"><CODE>multichar_tag</CODE></A>
+        </TD>
+        <TD>
+            Writes up to <CODE>n</CODE> characters from the buffer <CODE>s2</CODE> to the output sequence controlled by <CODE>d</CODE>, returning the number of characters written. A value less than <CODE>n</CODE> may be returned only if a call to <CODE>d</CODE> has consumed fewer characters than requested. The output sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/put.html"><CODE>io::put</CODE></A> and <A HREF="../functions/write.html"><CODE>io::write</C [...]
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics — Random-Access</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Category Precondition</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.seek(d, off, way)</CODE></PRE></TD>
+        <TD><CODE>std::streampos</CODE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>seekable</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>direct_tag</CODE></A>
+        </TD>
+        <TD>
+            <P CLASS="concept">
+                Advances the read/write head by <CODE>off</CODE> characters, returning the new position, where the offset is calculated from:
+            </P>
+            <UL STYLE="margin:0,0,0,auto">
+                <LI STYLE="list-style-type:disc;list-style-image:none">the start of the sequence if <CODE>way</CODE> is <CODE>ios_base::beg</CODE>
+                <LI STYLE="list-style-type:disc;list-style-image:none">the current position if <CODE>way</CODE> is <CODE>ios_base::cur</CODE>
+                <LI STYLE="list-style-type:disc;list-style-image:none">the end of the sequence if <CODE>way</CODE> is <CODE>ios_base::end</CODE>
+            </UL>
+            <P CLASS="concept">
+                The input sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/read.html"><CODE>io::seek</CODE></A> and using <A HREF="../functions/putback.html"><CODE>io::write</CODE></A> if the <A HREF="../guide/modes.html">mode</A> of <CODE>F</CODE> is convertible to <A HREF="../guide/modes.html#output"><CODE>output</CODE></A>.
+            </P>
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.seek(d, off, way, which)</CODE></PRE></TD>
+        <TD><CODE>std::streampos</CODE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>dual_seekable</CODE></A> or <A HREF="../guide/modes.html#mode_tags"><CODE>bidirectional_seekable</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>direct_tag</CODE></A>
+        </TD>
+        <TD>
+            <P CLASS="concept">
+                Advances the read head (if <CODE>which</CODE> is <CODE>std::ios_base::in</CODE>), the write head (if <CODE>which</CODE> is <CODE>std::ios_base::out</CODE>) or both heads (if <CODE>which</CODE> is <CODE>std::ios_base::in | std::ios_base::out</CODE>) by <CODE>off</CODE> characters, returning the new position, where the offset is calculated from
+            </P>
+            <UL STYLE="margin:0,0,0,auto">
+                <LI STYLE="list-style-type:disc;list-style-image:none">the start of the sequence if <CODE>way</CODE> is <CODE>ios_base::beg</CODE>
+                <LI STYLE="list-style-type:disc;list-style-image:none">the current position if <CODE>way</CODE> is <CODE>ios_base::cur</CODE>
+                <LI STYLE="list-style-type:disc;list-style-image:none">the end of the sequence if <CODE>way</CODE> is <CODE>ios_base::end</CODE>
+            </UL>
+            <P CLASS="concept">
+                The input sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/read.html"><CODE>io::seek</CODE></A>, and using <A HREF="../functions/putback.html"><CODE>io::write</CODE></A> if the <A HREF="../guide/modes.html">mode</A> of <CODE>F</CODE> is convertible to <A HREF="../guide/modes.html#output"><CODE>output</CODE></A>.
+            </P>
+            <P CLASS="concept">
+                The result is undefined if <CODE>way</CODE> is <CODE>ios_base::cur</CODE> and <CODE>which</CODE> is <CODE>(std::ios_base::in | std::ios_base::out)</CODE>.
+            </P>
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    Errors which occur during the execution of <CODE>get</CODE>, <CODE>put</CODE>, <CODE>read</CODE>, <CODE>write</CODE> or <CODE>seek</CODE> are indicated by throwing exceptions. Reaching the end of the input sequence is not an error, but attempting to write past the end of the output sequence is.
+</P>
+
+<P>
+    After an exception is thrown, a Filter must be in a consistent state; further i/o operations may throw exceptions but must have well-defined behaviour. Furthermore, unless it is <A HREF="closable.html">Closable</A>, it must be ready to begin processing a new character sequence.
+</P>
+
+
+<H2>Models</H2>
+
+<P>
+    See <A HREF="input_filter.html">InputFilter</A>, <A HREF="output_filter.html">OutputFilter</A>, <A HREF="bidirectional_filter.html">BidirectionalFilter</A> and <A HREF="seekable_filter.html">SeekableFilter</A>.
+</P>
+
+<H2>Acknowledgments</H2>
+
+<P>
+    The concept Filter was inspired by the <I>inserters</I> and <I>extractors</I> of <A CLASS="footnote_ref" HREF="../bibliography.html#kanze">[Kanze]</A>.
+</P>
+
+<!-- Begin Footnotes -->
+
+<HR>
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_1" HREF="#note_1_ref"><SUP>[1]</SUP></A><A CLASS="bib_ref" HREF="../bibliography.html#iso">[I<SPAN STYLE="font-size:80%">SO</SPAN>]</A>, 24.3.1. <I>See</I> <A HREF="http://www.boost.org/more/generic_programming.html#tag_dispatching" TARGET="_top">Tag Dispatching</A> for a discussion.
+</P>
+
+<!-- End Footnotes -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/flushable.html b/vendor/pdalboost/libs/iostreams/doc/concepts/flushable.html
new file mode 100644
index 0000000..408994c
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/flushable.html
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Flushable</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Flushable</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Description</H2>
+
+<P>
+    A Flushable Sink or OutputFilter provides a means for the user to request that all buffered characters be sent downstream.
+</P>
+
+<H2>Refinement of</H2>
+
+<A NAME="types"></A>
+<H2>Associated Types</H2>
+
+<P>Same as <A HREF="filter.html#types">Filter</A> or <A HREF="device.html#types">Device</A>, with the following additional requirement:</P>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Category</TD><TD>A type convertible to <A HREF="../guide/traits.html#category_tags"><CODE>flushable_tag</CODE></A></TD></TR>
+</TABLE>
+
+
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>F</CODE></TD><TD>-</TD><TD>A type which is a model of Flushable</TD></TR>
+    <TR><TD><CODE>D</CODE></TD><TD>-</TD><TD>A type which is a model of <A HREF="device.html">Sink</A>, with the same character type as <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>f</CODE></TD><TD>-</TD><TD>Object of type <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>d</CODE></TD><TD>-</TD><TD>Object of type <CODE>D</CODE></TD></TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Precondition</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE><A HREF="../functions/flush.html#flush_device">boost::iostreams::flush</A>(f)</CODE></PRE>
+        </TD>
+        <TD><CODE>bool</CODE></TD>
+        <TD>Category convertible to <A HREF="../guide/traits.html#category_tags"><CODE>device_tag</CODE></A></TD>
+        <TD>
+            Attempts to send all buffered characters downstream, returning <CODE>true</CODE> unless an error occurs.<A CLASS='footnote_ref' NAME='note_1_ref' HREF='#note_1'><SUP>[1]</SUP></A>
+        </TD>
+    </TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE><A HREF="../functions/flush.html#flush_filter">boost::iostreams::flush</A>(f, d)</CODE></PRE>
+        </TD>
+        <TD><CODE>bool</CODE></TD>
+        <TD>Category convertible to <A HREF="../guide/traits.html#category_tags"><CODE>filter_tag</CODE></A></TD>
+        <TD>
+            <P>
+                Attempts to write all buffered characters to d, returning <CODE>true</CODE> if all buffered characters were written.
+            </P>
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    Errors which occur during the execution of <A CLASS="code" HREF="../functions/flush.html"><CODE>flush</CODE></A> are be indicated by throwing exceptions. Such exceptions are caught and ignored if they occur during the execution of stream or stream buffer destructor.
+</P>
+
+<H2>Models</H2>
+
+<P>Several of the Filters and Devices provided by the Iostreams library are Flushable, but this is an implementation detail.</P>
+
+<HR>
+
+<P>
+    <A CLASS='footnote_ref' NAME='note_1' HREF='#note_1_ref'><SUP>[1]</SUP></A>It was noticed late in developement that to be consistent with the policy of reporting errors using exceptions (<I>see</I> <A HREF='../guide/exceptions.html'>Exceptions</A>), <CODE>flush</CODE> should have been specified to return <CODE>void</CODE> when invoked on a Device. Until the specification is changed, Devices should always return <CODE>true</CODE> when flushed.
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/input_filter.html b/vendor/pdalboost/libs/iostreams/doc/concepts/input_filter.html
new file mode 100644
index 0000000..9b2e024
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/input_filter.html
@@ -0,0 +1,254 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>InputFilter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">InputFilter</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL CLASS="page-index" STYLE="margin-top:0">
+    <DT><A HREF="#definition">Definition</A>
+    <DT><A HREF="#description">Description</A>
+    <DT><A HREF="#examples">Examples</A>
+    <DT><A HREF="#detailed_specification">Detailed Specification</A>
+</DL>
+
+<A NAME="definition"></A>
+<H2>Definition</H2>
+
+<P>
+    An InputFilter is a <A HREF="filter.html">Filter</A> whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="../guide/modes.html#input">input</A>. 
+</P>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    An InputFilter operates on the character sequence controlled by a <A HREF="source.html">Source</A>, providing access to a filtered sequence having the same character type. It may expose the filtered sequence in two ways:
+    <OL>
+        <LI STYLE="list-style-type:lower-roman">
+            by defining a member function <CODE>get</CODE>
+        </LI>
+        <LI STYLE="list-style-type:lower-roman">
+            by defining a member function <CODE>read</CODE> 
+    </OL>
+    The second alternative is provided for enhanced performance. InputFilters implementing this alternative are referred to as <I>Multi-Character</I>. (<I>See</I> <A HREF="multi_character.html">Multi-Character Filter</A>.)
+</P>
+
+<A NAME="examples"></A>
+<H2>Examples</H2>
+
+<H4>I. Ordinary InputFilter</H4>
+
+<P>
+    The following example shows an InputFilter which removes all non-alphabetic characters from a sequence.
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><ctype.h></SPAN>                 <SPAN CLASS="comment">// isalpha</SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><cstdio.h></SPAN>                <SPAN CLASS="comment">// EOF</SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/categories.hpp"><SPAN CLASS="literal"><boost/iostreams/categories.hpp></SPAN></A> <SPAN CLASS="comment">// input_filter_tag</SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A> <SPAN CLASS="comment">// get, WOULD_BLOCK</SPAN>
+
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> boost::iostreams;
+
+    <SPAN CLASS="keyword">struct</SPAN> alphabetic_input_filter {
+        <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">char</SPAN>              char_type;
+        <SPAN CLASS="keyword">typedef</SPAN> input_filter_tag  category;
+
+        <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+        <SPAN CLASS="keyword">int</SPAN> get(Source& src)
+        {
+            <SPAN CLASS="keyword">int</SPAN> c;
+            <SPAN CLASS="keyword">while</SPAN> ( (c = boost::iostreams::get(src)) != EOF &&
+                     c != WOULD_BLOCK &&
+                    !isalpha((<SPAN CLASS="keyword">unsigned</SPAN> <SPAN CLASS="keyword">char</SPAN>) c) )
+                ;
+            <SPAN CLASS="keyword">return</SPAN> c;
+        }
+    };</PRE>
+
+<P>
+    Here <CODE>char_type</CODE> is the <A HREF="../guide/traits.html#char_type">character type</A> of the Filter, <CODE>input_filter_tag</CODE> is a <A HREF="../guide/traits.html#category_tags">category tag</A> identifying the Filter as a model of InputFilter, and the function <A HREF="../functions/get.html"><CODE>boost::iostreams::get</CODE></A> reads a character from an arbitrary Source.<A CLASS="footnote_ref" NAME="note_1_ref" HREF="#note_1"><SUP>[1]</SUP></A> The constant <A HREF=".. [...]
+</P>
+
+<P>
+    The Iostreams library defines two convenience classes, <A HREF="../classes/filter.html#synopsis"><CODE>input_filter</CODE></A> and <A HREF="../classes/filter.html#synopsis"><CODE>input_wfilter</CODE></A>, which provide member <CODE>typedef</CODE>s <CODE>char_type</CODE> and <CODE>category</CODE> as well as default implementations of several member functions. When defining a new model of InputFilter, it is often sufficient to derive from <CODE>input_filter</CODE> or <CODE>input_wfilte [...]
+</P>
+
+<H4>II. Multi-Character InputFilter</H4>
+
+<P>
+    The following example shows a Multi-Character InputFilter which performs the same filtering operation as the Filter in Example I.
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><ctype.h></SPAN>                 <SPAN CLASS="comment">// isalpha</SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><cstdio.h></SPAN>                <SPAN CLASS="comment">// EOF</SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/categories.hpp"><SPAN CLASS="literal"><boost/iostreams/categories.hpp></SPAN></A> <SPAN CLASS="comment">// input_filter_tag</SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A> <SPAN CLASS="comment">// get</SPAN>
+
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> boost::io;
+
+    <SPAN CLASS="keyword">struct</SPAN> alphabetic_input_filter {
+        <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">char</SPAN>                       char_type;
+        <SPAN CLASS="keyword">typedef</SPAN> multichar_input_filter_tag  category;
+
+        <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+        streamsize read(Source& src, <SPAN CLASS="keyword">char</SPAN>* s, streamsize n)
+            {
+                <SPAN CLASS="keyword">int</SPAN>   c;
+                <SPAN CLASS="keyword">char</SPAN>* first = s;
+                <SPAN CLASS="keyword">char</SPAN>* last  = s + n;
+                <SPAN CLASS="keyword">while</SPAN> ( first != last &&
+                        (c = boost::iostreams::get(src)) != EOF &&
+                         c != WOULD_BLOCK &&
+                        isalpha((<SPAN CLASS="keyword">unsigned</SPAN> <SPAN CLASS="keyword">char</SPAN>) c) )
+                {
+                    *first++ = c;
+                }
+                streamsize result = <SPAN CLASS="keyword">static_cast</SPAN><streamsize>(first - s);
+                <SPAN CLASS="keyword">return</SPAN> result == <SPAN CLASS='numeric_literal'>0</SPAN> && c != WOULD_BLOCK ?
+                    <SPAN CLASS='numeric_literal'>-1</SPAN> :
+                    result;
+            }
+    };</PRE>
+
+<P>
+    Here <CODE>multichar_input_filter_tag</CODE> is a <A HREF="../guide/traits.html#category">category tag</A> identifying the Filter as a Multi-Character InputFilter.
+</P>
+<P>
+    The Iostreams library defines two convenience classes, <A HREF="../classes/filter.html#synopsis"><CODE>multichar_input_filter</CODE></A> and <A HREF="../classes/filter.html#synopsis"><CODE>multichar_input_wfilter</CODE></A>, which provide the member <CODE>typedef</CODE>s <CODE>char_type</CODE> and <CODE>category</CODE> as well as default implementations of several member functions. When defining a new Multi-Character InputFilter, it is often sufficient to derive from <CODE>multichar_ [...]
+</P>
+
+<A NAME="detailed_specification"></A>
+<H2>Refinement of</H2>
+
+<P><A HREF="filter.html">Filter</A>.</P>
+
+<H2>Associated Types</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Character type</TD><TD>The type of the characters in the filtered sequences</TD></TR>
+    <TR>
+        <TD>Category</TD>
+        <TD>
+            A type convertible to <A HREF="../guide/traits.html#category_tags"><CODE>filter_tag</CODE></A> and to <A HREF="../guide/modes.html#input"><CODE>input</CODE></A>
+        </TD>
+    </TR>
+    <TR>
+        <TD>Mode</TD>
+        <TD>
+            The unique <I>most-derived</I> <A HREF="../guide/modes.html#mode_tags">mode tag</A> to which Category is convertible
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>F</CODE></TD><TD>- A type which is a model of InputFilter</TD></TR>
+    <TR><TD><CODE>D</CODE></TD><TD>- A type which is a model of <A HREF="device.html">Device</A>, with the same character type as <CODE>F</CODE> and with mode refining the mode of <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>Ch</CODE></TD><TD>- The character type of <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>Tr</CODE></A></TD><TD>- <A HREF="../classes/char_traits.html"><CODE>boost::iostreams::char_traits<Ch></CODE></A></TD></TR>
+    <TR><TD><CODE>f</CODE></TD><TD>- Object of type <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>d</CODE></TD><TD>- Object of type <CODE>D</CODE></TD></TR>
+    <TR><TD><CODE>s</CODE></TD><TD>- Object of type <CODE>Ch*</CODE></TD></TR>
+    <TR><TD><CODE>n</CODE></TD><TD>- Object of type <CODE>std::streamsize</CODE></TD></TR>
+    <TR><TD><CODE>io</CODE></TD><TD>- Alias for namespace <CODE>boost::iostreams</CODE></TD></TR>
+</TABLE>
+
+<A NAME="semantics"></A>
+<H2>Valid Expressions / Semantics</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Category Precondition</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE>typename <A HREF="../guide/traits.html#char_type_of_ref">char_type_of</A><F>::type</CODE></PRE>
+        </TD>
+        <TD><CODE>typename</CODE> of the character type</TD>
+        <TD ALIGN="center">-</TD><TD ALIGN="center">-</TD>
+    </TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE>typename <A HREF="../guide/traits.html#category_ref">category_of</A><F>::type</CODE></PRE>
+        </TD>
+        <TD><CODE>typename</CODE> of the category</TD>
+        <TD ALIGN="center">-</TD><TD ALIGN="center">-</TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.get(d)</CODE></PRE></TD>
+        <TD><CODE>Tr::int_type</CODE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>input</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>multichar_tag</CODE></A>
+        </TD>
+        <TD>
+            Returns the next character in the input sequence controlled by <CODE>f</CODE>, <CODE>Tr::eof()</CODE> if the end of the sequence has been reached or <CODE>Tr::would_block()</CODE> if input is temporarily unavilable because a call to <CODE>d</CODE> has produced fewer characters than requested. The input sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/get.html"><CODE>io::get</CODE></A>, <A HREF="../functions/read.html"><CODE>io::read</CODE></A> [...]
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.read(d, s, n)</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::streamsize</CODE></PRE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>input</CODE></A> and to <A HREF="../guide/traits.html#category_tags"><CODE>multichar_tag</CODE></A>
+        </TD>
+        <TD>
+            Reads up to <CODE>n</CODE> characters from the input sequence controlled by <CODE>f</CODE> into the buffer <CODE>s</CODE>, returning the number of characters read or <CODE>-1</CODE> to indicate end-of-sequence. A value less than <CODE>n</CODE> may be returned only at end-of-sequence or if input is temporarily unavilable because a call to <CODE>d</CODE> has produced fewer characters than requested. The input sequence controlled by <CODE>d</CODE> may be accessed using <A HREF=" [...]
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    Errors which occur during the execution of <CODE>get</CODE> and <CODE>read</CODE> are indicated by throwing exceptions. Reaching the end of the sequence is not an error.
+</P>
+
+<P>
+    After an exception is thrown, an InputFilter must be in a consistent state; further i/o operations may throw exceptions but must have well-defined behaviour. Furthermore, unless it is <A HREF="closable.html">Closable</A>, it must be ready to begin processing a new character sequence.
+</P>
+
+<H2>Models</H2>
+
+<UL>
+    <LI>The <A HREF="../guide/text_processing.html">Text Processing Filters</A>.
+    <LI>The compression and decompression filters.
+</UL>
+
+<H2>Acknowledgments</H2>
+
+<P>
+    The concept InputFilter was inspired by the <I>extractors</I> of <A CLASS="footnote_ref" HREF="../bibliography.html#kanze">[Kanze]</A>.
+</P>
+
+<!-- Begin Footnotes -->
+
+<HR>
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_1" HREF="#note_1_ref"><SUP>[1]</SUP></A>Technically, <CODE>boost::iostreams::get</CODE> requires that a Source be <A HREF="../concepts/direct.html"><I>indirect</I></A>.
+</P>
+
+<!-- End Footnotes -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/localizable.html b/vendor/pdalboost/libs/iostreams/doc/concepts/localizable.html
new file mode 100644
index 0000000..4dfb3b3
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/localizable.html
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Localizable</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Localizable</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Description</H2>
+
+<P>
+    A Localizable Filter or Device receives notifications when a stream or stream buffer which contains it has its  <CODE>std::locale</CODE> set using <CODE>std::basic_ios::imbue</CODE> or <CODE>std::basic_streambuf::pubimbue</CODE>.
+</P>
+
+<H2>Refinement of</H2>
+
+<A NAME="types"></A>
+<H2>Associated Types</H2>
+
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>L</CODE></TD><TD>-</TD><TD>A type which is a model of Localizable</TD></TR>
+    <TR><TD><CODE>z</CODE></TD><TD>-</TD><TD>Object of type <CODE>L</CODE></TD></TR>
+    <TR><TD><CODE>loc</CODE></TD><TD>-</TD><TD>Object of type <CODE>std::locale</CODE></TD></TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Postcondition</TH></TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE><A HREF="../functions/imbue.html">boost::iostreams::imbue</A>(z, loc)</CODE></PRE>
+        </TD>
+        <TD><CODE>void</CODE></TD>
+        <TD><CODE>locale</CODE>-sensitive i/o performed by <CODE>z</CODE> uses a copy of <CODE>loc</CODE> until a subsequent invocation of <CODE>boost::iostreams::imbue</CODE></TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    Errors which occur during the execution of <A CLASS="code" HREF="../functions/imbue.html"><CODE>imbue</CODE></A> are be indicated by throwing exceptions.
+</P>
+
+<H2>Models</H2>
+<UL>
+    <LI>Standard streams and stream buffers.
+    <LI><A HREF="../classes/code_converter.html"><CODE>code_converter</CODE></A>
+</UL>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/multi_character.html b/vendor/pdalboost/libs/iostreams/doc/concepts/multi_character.html
new file mode 100644
index 0000000..76bd650
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/multi_character.html
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Multi-Character Filter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Multi-Character Filter</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Description</H2>
+
+<P><A HREF="filter.html">Filter</A> which provides access to its controlled sequence or sequences several characters at a time. The difference between a Filter which is Multi-Character and one which is not is reflected in the specifications of the various Filter refinements. <I>See</I>, <I>e.g.</I>, <A HREF="input_filter.html">InputFilter</A> and <A HREF="output_filter.html">OutputFilter</A>.</P>
+
+<H2>Refinement of</H2>
+
+<P><A HREF="filter.html">Filter</A>.</P>
+
+<A NAME="types"></A>
+<H2>Associated Types</H2>
+
+<P>Same as <A HREF="filter.html#types">Filter</A>, with the following additional requirements:</P>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Category</TD><TD>A type convertible to <A HREF="../guide/traits.html#category_tags"><CODE>filter_tag</CODE></A> and to <A HREF="../guide/traits.html#category_tags"><CODE>multichar_tag</CODE></A></TD></TR>
+</TABLE>
+
+<A NAME="expressions"></A>
+<H2>Valid Expressions / Semantics</H2>
+
+<P>Same as <A HREF="filter.html">Filter</A>.</P>
+
+<H2>Models</H2>
+
+<UL>
+    <LI>The compression and decompression Filters
+    <LI><A HREF="../classes/regex_filter.html"><CODE>basic_regex_filter</CODE></A>
+    <LI><A HREF="../classes/aggregate.html"><CODE>aggregate_filter</CODE></A>
+    <LI><A HREF="../classes/symmetric_filter.html"><CODE>symmetric_filter</CODE></A>
+</UL>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/optimally_buffered.html b/vendor/pdalboost/libs/iostreams/doc/concepts/optimally_buffered.html
new file mode 100644
index 0000000..85df102
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/optimally_buffered.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>OptimallyBuffered</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">OptimallyBuffered</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Description</H2>
+
+<P>
+    A OptimallyBuffered Filter or Device provides a way for the Iostreams library to determine the best size of buffer to allocate for it if the user doesn't explicitly specify a buffer size.
+</P>
+
+<H2>Refinement of</H2>
+
+<A NAME="types"></A>
+<H2>Associated Types</H2>
+
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>O</CODE></TD><TD>-</TD><TD>A type which is a model of OptimallyBuffered</TD></TR>
+    <TR><TD><CODE>o</CODE></TD><TD>-</TD><TD>Object of type <CODE>O</CODE></TD></TR>
+    <TR><TD><CODE>io</CODE></TD><TD>-</TD><TD>Alias for namespace <CODE>boost::iostreams</CODE></TD></TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE><A HREF="../functions/optimal_buffer_size.html">io::optimal_buffer_size</A>(o)</CODE></PRE>
+        </TD>
+        <TD><CODE>std::streamsize</CODE></TD>
+        <TD>Returns the size of buffer that should be allocated for <CODE>o</CODE> if the user has not explicitly specified a buffer size.</TD>
+    </TR>
+</TABLE>
+
+<H2>Models</H2>
+<UL>
+    <LI><A HREF="../classes/counter.html"><CODE>basic_counter</CODE></A>
+</UL>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/output_filter.html b/vendor/pdalboost/libs/iostreams/doc/concepts/output_filter.html
new file mode 100644
index 0000000..0ba18b5
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/output_filter.html
@@ -0,0 +1,232 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>OutputFilter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">OutputFilter</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL CLASS="page-index" STYLE="margin-top:0">
+    <DT><A HREF="#definition">Definition</A>
+    <DT><A HREF="#description">Description</A>
+    <DT><A HREF="#examples">Examples</A>
+    <DT><A HREF="#detailed_specification">Detailed Specification</A>
+</DL>
+
+<A NAME="definition"></A>
+<H2>Definition</H2>
+
+<P>
+    An OutputFilter is a <A HREF="filter.html">Filter</A> whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="../guide/modes.html#output">output</A>. 
+</P>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    An OutputFilter operates on the character sequence controlled by a <A HREF="sink.html">Sink</A>, providing access to a filtered sequence having the same character type. It may expose the filtered sequence in two ways:
+    <OL>
+        <LI STYLE="list-style-type:lower-roman">
+            by defining a member function <CODE>put</CODE>
+        </LI>
+        <LI STYLE="list-style-type:lower-roman">
+            by defining a member function <CODE>write</CODE>
+    </OL>
+    The second alternative is provided for enhanced performance. OutputFilters implementing this alternative are referred to as as <I>Multi-Character</I>. (<I>See</I> <A HREF="multi_character.html">Multi-Character Filter</A>.)
+</P>
+
+<A NAME="examples"></A>
+<H2>Examples</H2>
+
+<H4>I. Ordinary OutputFilter</H4>
+
+<P>
+    The following example shows an OutputFilter which converts each character in a sequence to uppercase.
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><ctype.h></SPAN>                        <SPAN CLASS="comment">// toupper</SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/categories.hpp"><SPAN CLASS="literal"><boost/iostreams/categories.hpp></SPAN></A> <SPAN CLASS="comment">// output_filter_tag</SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A> <SPAN CLASS="comment">// put</SPAN>
+
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+    <SPAN CLASS="keyword">namespace</SPAN> io = boost::iostreams;
+
+    <SPAN CLASS="keyword">struct</SPAN> toupper_output_filter {
+        <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">char</SPAN>                   char_type;
+        <SPAN CLASS="keyword">typedef</SPAN> io::output_filter_tag  category;
+
+        <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+        <SPAN CLASS="keyword">bool</SPAN> put(Sink& snk, <SPAN CLASS="keyword">char</SPAN> c)
+        { 
+            <SPAN CLASS="keyword">return</SPAN> io::put(snk, toupper((<SPAN CLASS="keyword">unsigned</SPAN> <SPAN CLASS="keyword">char</SPAN>) c)); 
+        }
+    };</PRE>
+
+<P>
+    Here <CODE>char_type</CODE> is the <A HREF="../guide/traits.html#char_type">character type</A> of the Filter, <CODE>output_filter_tag</CODE> is a <A HREF="../guide/traits.html#category">category tag</A> identifying the Filter as a model of OutputFilter, and the function <A HREF="../functions/put.html"><CODE>io::put</CODE></A> writes a character to an arbitrary Sink.<A CLASS="footnote_ref" NAME="note_1_ref" HREF="#note_1"><SUP>[1]</SUP></A>
+</P>
+
+<P>
+    The Iostreams library defines two convenience classes, <A HREF="../classes/filter.html#synopsis"><CODE>output_filter</CODE></A> and <A HREF="../classes/filter.html#synopsis"><CODE>output_wfilter</CODE></A>, which provide member <CODE>typedef</CODE>s <CODE>char_type</CODE> and <CODE>category</CODE> as well as default implementations of several member functions. When defining a new model of OutputFilter, it is often sufficient to derive from <CODE>output_filter</CODE> or <CODE>output_w [...]
+</P>
+
+<H4>II. Multi-Character OutputFilter</H4>
+
+<P>
+    The following example shows a Multi-Character OutputFilter which performs the same filtering operation as the Filter in Example I.
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><ctype.h></SPAN>                        <SPAN CLASS="comment">// toupper</SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/categories.hpp"><SPAN CLASS="literal"><boost/iostreams/categories.hpp></SPAN></A> <SPAN CLASS="comment">// output_filter_tag</SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A> <SPAN CLASS="comment">// put</SPAN>
+
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+    <SPAN CLASS="keyword">namespace</SPAN> io = boost::iostreams;
+
+    <SPAN CLASS="keyword">struct</SPAN> toupper_filter {
+        <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">char</SPAN>                             char_type;
+        <SPAN CLASS="keyword">typedef</SPAN> io::multichar_output_filter_tag  category;
+
+        <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+        <SPAN CLASS="keyword">std::streamsize</SPAN> write(Sink& snk, <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">char</SPAN>* s, streamsize n)
+        { 
+            std::streamsize rest = n;
+            <SPAN CLASS="keyword">while</SPAN> (rest != 0 && io::put(snk, toupper((<SPAN CLASS="keyword">unsigned</SPAN> <SPAN CLASS="keyword">char</SPAN>) *s++))
+                --rest;
+            <SPAN CLASS="keyword">return</SPAN> n - rest;
+        }
+    };</PRE>
+
+<P>
+    Here <CODE>multichar_output_filter_tag</CODE> is a <A HREF="../guide/traits.html#category">category tag</A> identifying the Filter as a multichar OutputFilter.
+</P>
+<P>
+    The Iostreams library defines two convenience classes, <A HREF="../classes/filter.html#synopsis"><CODE>multichar_output_filter</CODE></A> and <A HREF="../classes/filter.html#synopsis"><CODE>multichar_output_wfilter</CODE></A>, which provide the member <CODE>typedef</CODE>s <CODE>char_type</CODE> and <CODE>category</CODE> as well as default implementations of several member functions. When defining a new multichar OutputFilter, it is often sufficient to derive from <CODE>multichar_out [...]
+</P>
+
+<A NAME="detailed_specification"></A>
+<H2>Refinement of</H2>
+
+<P><A HREF="filter.html">Filter</A>.</P>
+
+<H2>Associated Types</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Character type</TD><TD>The type of the characters in the filtered sequences</TD></TR>
+    <TR>
+        <TD>Category</TD>
+        <TD>
+            A type convertible to <A HREF="../guide/traits.html#category_tags"><CODE>filter_tag</CODE></A> and to <A HREF="../guide/modes.html#output"><CODE>output</CODE></A>
+        </TD>
+    </TR>
+    <TR>
+        <TD>Mode</TD>
+        <TD>
+            The unique <I>most-derived</I> <A HREF="../guide/modes.html#mode_tags">mode tag</A> to which Category is convertible
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>F</CODE></TD><TD>- A type which is a model of OutputFilter</TD></TR>
+    <TR><TD><CODE>D</CODE></TD><TD>- A type which is a model of <A HREF="device.html">Device</A>, with the same character type as <CODE>F</CODE> and with mode refining the mode of <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>Ch</CODE></TD><TD>- The character type of <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>Tr</CODE></A></TD><TD>- <A HREF="../classes/char_traits.html"><CODE>boost::iostreams::char_traits<Ch></CODE></A></TD></TR>
+    <TR><TD><CODE>f</CODE></TD><TD>- Object of type <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>d</CODE></TD><TD>- Object of type <CODE>D</CODE></TD></TR>
+    <TR><TD><CODE>c</CODE></TD><TD>- Object of type <CODE>Ch</CODE></TD></TR>
+    <TR><TD><CODE>s</CODE></TD><TD>- Object of type <CODE>const Ch*</CODE></TD></TR>
+    <TR><TD><CODE>n</CODE></TD><TD>- Object of type <CODE>std::streamsize</CODE></TD></TR>
+    <TR><TD><CODE>io</CODE></TD><TD>- Alias for namespace <CODE>boost::iostreams</CODE></TD></TR>
+</TABLE>
+
+<A NAME="semantics"></A>
+<H2>Valid Expressions / Semantics</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Category Precondition</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE>typename <A HREF="../guide/traits.html#char_type_of_ref">char_type_of</A><F>::type</CODE></PRE>
+        </TD>
+        <TD><CODE>typename</CODE> of the character type</TD>
+        <TD ALIGN="center">-</TD><TD ALIGN="center">-</TD>
+    </TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE>typename <A HREF="../guide/traits.html#category_ref">category_of</A><F>::type</CODE></PRE>
+        </TD>
+        <TD><CODE>typename</CODE> of the category</TD>
+        <TD ALIGN="center">-</TD><TD ALIGN="center">-</TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.put(d, c)</CODE></PRE></TD>
+        <TD><CODE>bool</CODE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>output</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>multichar_tag</CODE></A>
+        </TD>
+        <TD>
+            Attempts to writes the character <CODE>c</CODE> to the output sequence controlled by <CODE>f</CODE>, returning <CODE>false</CODE> if <CODE>c</CODE> cannot be consumed because a call to <CODE>d</CODE> has consumed fewer characters than requested. The output sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/put.html"><CODE>io::put</CODE></A> and <A HREF="../functions/write.html"><CODE>io::write</CODE></A>.
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.write(d, s, n)</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::streamsize</CODE></PRE></TD>
+        <TD>
+            Convertible to <A HREF="../guide/modes.html#mode_tags"><CODE>output</CODE></A> and to <A HREF="../guide/traits.html#category_tags"><CODE>multichar_tag</CODE></A>
+        </TD>
+        <TD>
+            Writes up to <CODE>n</CODE> characters from the buffer <CODE>s</CODE> to the output sequence controlled by <CODE>d</CODE>, returning the number of characters written. A value less than <CODE>n</CODE> may be returned only if a call to <CODE>d</CODE> has consumed fewer characters than requested. The output sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/put.html"><CODE>io::put</CODE></A> and <A HREF="../functions/write.html"><CODE>io::write</CO [...]
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    Errors which occur during the execution of <CODE>put</CODE> or <CODE>write</CODE> are indicated by throwing exceptions. Attempting to write past the end of the sequence is always an error.
+</P>
+
+<P>
+    After an exception is thrown, an OutputFilter must be in a consistent state; further i/o operations may throw exceptions but must have well-defined behaviour.Furthermore, unless it is <A HREF="closable.html">Closable</A>, it must be ready to begin processing a new character sequence.
+</P>
+
+<H2>Models</H2>
+
+<H2>Acknowledgments</H2>
+
+<P>
+    The concept OutputFilter was inspired by the <I>inserters</I> of <A CLASS="footnote_ref" HREF="../bibliography.html#kanze">[Kanze]</A>.
+</P>
+
+<!-- Begin Footnotes -->
+
+<HR>
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_1" HREF="#note_1_ref"><SUP>[1]</SUP></A>Technically, <CODE>boost::iostreams::put</CODE> requires that a Sink be <A HREF="../concepts/direct.html"><I>indirect</I></A>.
+</P>
+
+<!-- End Footnotes -->
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/peekable.html b/vendor/pdalboost/libs/iostreams/doc/concepts/peekable.html
new file mode 100644
index 0000000..8dc7bcd
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/peekable.html
@@ -0,0 +1,88 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Peekable</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Peekable</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Description</H2>
+
+<P>
+    A Peekable <A HREF="device.html">Device</A> allows a character read from the input sequence to be putback. 
+</P>
+
+<P>
+    The name of the concept is based on the observation that a PeekableDevice allow the user to peek at the first character in the sequence it controls by calling <A HREF="../functions/get.html"><CODE>get</CODE></A> or <A HREF="../functions/read.html"><CODE>read</CODE></A> followed by <A HREF="../functions/putback.html"><CODE>putback</CODE></A>. The names Putbackable and InputRevertable were considered but rejected.
+</P>
+
+<H2>Refinement of</H2>
+
+<A HREF="source.html">Source</A>.
+
+<A NAME="types"></A>
+<H2>Associated Types</H2>
+
+Same as <A HREF="source.html">Source</A>.
+
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>P</CODE></TD><TD>-</TD><TD>A type which is a model of Peekable</TD></TR>
+    <TR><TD><CODE>p</CODE></TD><TD>-</TD><TD>Object of type <CODE>P</CODE></TD></TR>
+    <TR><TD><CODE>c</CODE></TD><TD>-</TD><TD>Object of type equal to the character type of <CODE>P</CODE></TD></TR>
+    <TR><TD><CODE>io</CODE></TD><TD>-</TD><TD>Alias for namespace <CODE>boost::iostreams</CODE></TD></TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Precondition</TH><TH>Semantics</TH><TH>Postcondition</TH></TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE><A HREF="../functions/putback.html">io::putback</A>(p, c)</CODE></PRE>
+        </TD>
+        <TD><CODE>bool</CODE></TD>
+        <TD>
+           One or more characters has been read from <CODE>p</CODE> using <A HREF="../functions/get.html"><CODE>io::get</CODE></A> or <A HREF="../functions/read.html"><CODE>io::read</CODE></A>, with no intervening i/o operations having been performed
+        </TD>
+        <TD>
+            Attempts to put back <CODE>c</CODE> to <CODE>p</CODE>, returning <CODE>true</CODE> for success
+        </TD>
+        <TD>
+            If putback returns <CODE>true</CODE>, the next character read from <CODE>p</CODE> using <A HREF="../functions/get.html"><CODE>io::get</CODE></A> or <A HREF="../functions/read.html"><CODE>io::read</CODE></A> will be equal to <CODE>c</CODE></A>
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    Errors which occur during the execution of <A CLASS="code" HREF="../functions/putback.html"><CODE>putback</CODE></A> are be indicated by throwing exceptions.
+</P>
+
+<H2>Models</H2>
+<UL>
+    <LI>Standard input streams and stream buffers.
+</UL>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/pipable.html b/vendor/pdalboost/libs/iostreams/doc/concepts/pipable.html
new file mode 100644
index 0000000..4bd4293
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/pipable.html
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Pipable</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Pipable</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Description</H2>
+
+<P>
+    A Pipable Filter can appear as a component of a <A HREF="../guide/pipelines.html">pipline</A>.
+</P>
+
+<P>
+     Certian overloads of <CODE>operator|</CODE> must be defined to make a Filter Pipable; this is achieved by invoking the macro <A HREF="../guide/pipelines.html#boost_iostreams_pipable"><CODE>BOOST_IOSTREAMS_PIPABLE</CODE></A>.
+</P>
+
+<H2>Refinement of</H2>
+
+<A HREF="filter.html">Filter</A>.
+
+<A NAME="types"></A>
+<H2>Associated Types</H2>
+
+Same as <A HREF="filter.html">Filter</A>.
+
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>P</CODE></TD><TD>-</TD><TD>A type which is a model of Pipable</TD></TR>
+    <TR><TD><CODE>C</CODE></TD><TD>-</TD><TD>A type which is a model of <A HREF="filter.html">Filter</A> or <A HREF="device.html">Device</A> and which is <A HREF="../../../../doc/html/CopyConstructible.html"  TARGET="_top">CopyConstructible</A><A CLASS='footnote_ref' NAME='note_1_ref' HREF="#note_1"><SUP>[1]</A></SUP></TD></TR>
+    <TR><TD><CODE>p</CODE></TD><TD>-</TD><TD>Object of type <CODE>P</CODE></TD></TR>
+    <TR><TD><CODE>c</CODE></TD><TD>-</TD><TD>Object of type <CODE>C</CODE></TD></TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE>f | c</CODE></PRE>
+        </TD>
+        <TD><I>implementation-defined</I></TD>
+        <TD>
+           Returns a pipeline corresponding to the sequence <CODE>f</CODE>, <CODE>c</CODE>
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    None.
+</P>
+
+<H2>Models</H2>
+<UL>
+    <LI>All the Filters provided by the Iostreams library.
+</UL>
+
+<!-- Begin Footnotes -->
+
+<HR>
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_1" HREF="#note_1_ref"><SUP>[1]</SUP></A>This requirement prevents streams and stream buffers from appearing in pipelines without the use of <A HREF="../../../../doc/html/ref.html">reference wrappers</A>. This restriction may be removed in a future version of the Iostreams library.
+</P>
+
+<!-- End Footnotes -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/seekable_device.html b/vendor/pdalboost/libs/iostreams/doc/concepts/seekable_device.html
new file mode 100644
index 0000000..53059dc
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/seekable_device.html
@@ -0,0 +1,183 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>SeekableDevice</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">SeekableDevice</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Definition</H2>
+
+<P>
+    A SeekableDevice is a <A HREF="device.html">Device</A> whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="../guide/modes.html#seekable">seekable</A>.
+</P>
+
+<H2>Description</H2>
+
+<P>
+    A SeekableDevice provides read- write- and random-access to a sequence of characters of a given type, with a single repositionable read/write head. A SeekableDevice may expose this sequence in two ways:
+    <OL>
+        <LI STYLE="list-style-type:lower-roman">
+            by defining member functions <CODE>read</CODE>, <CODE>write</CODE> and <CODE>seek</CODE>; or
+        </LI>
+        <LI STYLE="list-style-type:lower-roman">
+            by defining member functions <CODE>input_sequence</CODE> and <CODE>output_sequence</CODE>, returning pairs of pointers delimiting the sequences in its entirety. The return values of these two functions must be the same.<A CLASS="footnote_ref" NAME="note_1_ref" HREF="#note_1"><SUP>[1]</SUP></A>
+        </LI>
+    </OL>
+</P>
+<P>A SeekableDevice has mode <A HREF="../guide/modes.html#seekable"><CODE>seekable</CODE></A>.</P>
+
+<H2>Note</H2>
+
+<P>To be usable with streams and stream buffers, SeekableDevices must model <A HREF="blocking.html">Blocking</A>.
+
+<H2>Example</H2>
+
+<P>A model of SeekableDevice can be defined as follows:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">struct</SPAN> SeekableDevice {
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">char</SPAN>                 char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> seekable_device_tag  category;
+    std::streamsize read(<SPAN CLASS="keyword">char</SPAN>* s, std::streamsize n) 
+        {
+            <SPAN CLASS="comment">// Read up to n characters from the input 
+            // sequence into the buffer s, returning   
+            // the number of characters read, or -1 
+            // to indicate end-of-sequence.</SPAN>
+        }
+    <SPAN CLASS="keyword">void</SPAN> write(<SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">char</SPAN>* s, std::streamsize n) 
+        {
+            <SPAN CLASS="comment">// Write up to n characters from the buffer
+            // s to the output sequence, returning the 
+            // number of characters written</SPAN>
+        }
+    std::streampos seek(stream_offset off, std::ios_base::seekdir way) 
+        {
+            <SPAN CLASS="comment">// Advances the read/write head by off characters, 
+            // returning the new position, where the offset is 
+            // calculated from:
+            //  - the start of the sequence if way == ios_base::beg
+            //  - the current position if way == ios_base::cur
+            //  - the end of the sequence if way == ios_base::end</SPAN>
+        }
+};</PRE>
+
+<P>
+    Here <CODE>seekable_device_tag</CODE> is a <A HREF="../guide/traits.html#category_tags">category tag</A> identifying the containing type as a model of SeekableDevice. When defining a new SeekableDevice, it suffices to use the tag <CODE>seekable_device_tag</CODE>. One can also derive from the helper classes <A HREF="../classes/device.html"><CODE>device<seekable></CODE></A> or <A HREF="../classes/device.html#synopsis"><CODE>wdevice<seekable></CODE></A>.
+</P>
+
+<H2>Refinement of</H2>
+
+<P><A HREF="source.html">Source</A>, <A HREF="sink.html">Sink</A>.</P>
+
+<H2>Associated Types</H2>
+
+<P>Same as <A HREF="device.html#types">Device</A>, with the following additional requirements:</P>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Category</TD><TD>A type convertible to <A HREF="../guide/traits.html#category_tags"><CODE>device_tag</CODE></A> and to <A HREF="../guide/modes.html#mode_tags"><CODE>seekable</CODE></A></TD></TR>
+</TABLE>
+
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>D</CODE></TD><TD>- A type which is a model of SeekableDevice</TD></TR>
+    <TR><TD><CODE>Ch</CODE></TD><TD>- The character type of <CODE>D</CODE></TD></TR>
+    <TR><TD><CODE>dev</CODE></TD><TD>- Object of type <CODE>D</CODE></TD></TR>
+    <TR><TD><CODE>s1</CODE></TD><TD>- Object of type <CODE>Ch*</CODE></SPAN></TD></TR>
+    <TR><TD><CODE>s2</CODE></TD><TD>- Object of type <CODE>const Ch*</CODE></SPAN></TD></TR>
+    <TR><TD><CODE>n</CODE></TD><TD>- Object of type <CODE>std::streamsize</CODE></TD></TR>
+    <TR><TD><CODE>off</CODE></TD><TD>- Object of type <A HREF="../functions/positioning.html#synopsis"><CODE>stream_offset</CODE></A></TD></TR>
+    <TR><TD><CODE>way</CODE></TD><TD>- Object of type <CODE>std::ios_base::seekdir</CODE></TD></TR>
+    <TR><TD><CODE>io</CODE></TD><TD>- Alias for namespace <CODE>boost::iostreams</CODE></TD></TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics</H2>
+
+<P>Same as <A HREF="device.html#types">Device</A>, with the following additional requirements:</P>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Category Precondition</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE><A HREF="../functions/read.html">io::read</A>(dev, s1, n)</CODE></PRE></TD>
+        <TD><CODE>std::streamsize</CODE></TD>
+        <TD ROWSPAN="3">Not convertible to <A HREF="direct.html"><CODE>direct_tag</CODE></A></TD>
+        <TD>
+            Reads up to <CODE>n</CODE> characters from the sequence controlled by <CODE>dev</CODE> into <CODE>s1</CODE>, returning the number of characters read, or <CODE>-1</CODE> to indicate end-of-sequence
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE><A HREF="../functions/write.html">io::write</A>(dev, s2, n)</CODE></PRE></TD>
+        <TD><CODE>std::streamsize</CODE></TD>
+        <TD>
+            Writes up to <CODE>n</CODE> characters from the sequence beginning at <CODE>s2</CODE> to the sequence controlled by <CODE>dev</CODE>, returning the number of characters written
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE><A HREF="../functions/seek.html">io::seek</A>(dev, off, way)</CODE></PRE></TD>
+        <TD><CODE>std::streampos</CODE></TD>
+        <TD>Advances the read/write head by <CODE>off</CODE> characters, returning the new position, where the offset is calculated from:
+            <UL STYLE="margin:0,0,0,auto">
+                <LI STYLE="list-style-type:disc;list-style-image:none">the start of the sequence if <CODE>way</CODE> is <CODE>ios_base::beg</CODE>
+                <LI STYLE="list-style-type:disc;list-style-image:none">the current position if <CODE>way</CODE> is <CODE>ios_base::cur</CODE>
+                <LI STYLE="list-style-type:disc;list-style-image:none">the end of the sequence if <CODE>way</CODE> is <CODE>ios_base::end</CODE>
+            </UL>
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>dev.input_sequence()</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::pair<Ch*,Ch*></CODE></PRE></TD>
+        <TD ROWSPAN="2">Convertible to <A HREF="direct.html"><CODE>direct_tag</CODE></A></TD>
+        <TD>Returns a pair of pointers delimiting the sequence controlled by <CODE>dev</CODE></TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>dev.output_sequence()</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::pair<Ch*,Ch*></CODE></PRE></TD>
+        <TD>Returns a pair of pointers delimiting the sequence controlled by <CODE>dev</CODE></TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    Errors which occur during the execution of member functions <CODE>read</CODE>, <CODE>write</CODE>, <CODE>seek</CODE>, <CODE>input_sequence</CODE> or <CODE>output_sequence</CODE> are indicated by throwing exceptions. Reaching the end of the sequence is not an error, but attempting to write past the end of the sequence is.
+</P>
+
+<P>
+    After an exception is thrown, a SeekableDevice must be in a consistent state; further i/o operations may throw exceptions but must have well-defined behaviour.
+</P>
+
+<H2>Models</H2>
+
+<UL>
+    <LI><A HREF="../classes/array.html#array"><CODE>array</CODE></A>, <A HREF="../classes/file.html#file"><CODE>file</CODE></A>, <A HREF="../classes/file_descriptor.html#file_descriptor"><CODE>file_descriptor</CODE></A>, <A HREF="../classes/mapped_file.html#mapped_file"><CODE>mapped_file</CODE></A>.
+</UL>
+
+<!-- Begin Footnotes -->
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_1" HREF="#note_1_ref"><SUP>[1]</SUP></A>A more elegant specification would require a single member function <CODE>sequence</CODE>; the present version was selected to simplify the implementation of <A HREF="../guide/generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A>.
+</P>
+
+<!-- End Footnotes -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/seekable_filter.html b/vendor/pdalboost/libs/iostreams/doc/concepts/seekable_filter.html
new file mode 100644
index 0000000..78476d8
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/seekable_filter.html
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>SeekableFilter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">SeekableFilter</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Definition</H2>
+
+<P>
+    A SeekableFilter is a <A HREF="filter.html">Filter</A> whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="../guide/modes.html#seekable">seekable</A>. 
+</P>
+
+<H2>Description</H2>
+
+<P>
+    A SeekableFilter operates on the character sequence controlled by a <A HREF="seekable_device.html">SeekableDevice</A>, providing access to a filtered sequence having the same character type. It may expose the filtered sequence in two ways:
+    <OL>
+        <LI STYLE="list-style-type:lower-roman">
+            by defining member function <CODE>get</CODE>, <CODE>put</CODE> and <CODE>seek</CODE>.
+        </LI>
+        <LI STYLE="list-style-type:lower-roman">
+            by defining member functions <CODE>read</CODE>, <CODE>write</CODE> and <CODE>seek</CODE>.
+        </LI>
+    </OL>
+    The second alternative is provided for enhanced performance. SeekableFilters implementing this alternative are referred to as <I>Multi-Character</I>. (<I>See</I> <A HREF="multi_character.html">Multi-Character Filter</A>.)
+</P>
+
+<H2>Refinement of</H2>
+
+<P><A HREF="input_filter.html">InputFilter</A>, <A HREF="output_filter.html">OutputFilter</A>.</P>
+
+<H2>Associated Types</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Character type</TD><TD>The type of the characters in the filtered sequences</TD></TR>
+    <TR>
+        <TD>Category</TD>
+        <TD>
+            A type convertible to <A HREF="../guide/traits.html#category_tags"><CODE>filter_tag</CODE></A> and to <A HREF="../guide/modes.html#seekable"><CODE>seekable</CODE></A>
+        </TD>
+    </TR>
+    <TR>
+        <TD>Mode</TD>
+        <TD>
+            The unique <I>most-derived</I> <A HREF="../guide/modes.html#mode_tags">mode tag</A> to which Category is convertible
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>F</CODE></TD><TD>- A type which is a model of SeekableFilter</TD></TR>
+    <TR><TD><CODE>D</CODE></TD><TD>- A type which is a model of <A HREF="device.html">Device</A>, with the same character type as <CODE>F</CODE> and with mode convertible to the mode of <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>Ch</CODE></TD><TD>- The character type of <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>Tr</CODE></A></TD><TD>- <A HREF="../classes/char_traits.html"><CODE>boost::iostreams::char_traits<Ch></CODE></A></TD></TR>
+    <TR><TD><CODE>f</CODE></TD><TD>- Object of type <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>d</CODE></TD><TD>- Object of type <CODE>D</CODE></TD></TR>
+    <TR><TD><CODE>c</CODE></TD><TD>- Object of type <CODE>Ch</CODE></TD></TR>
+    <TR><TD><CODE>s1</CODE></TD><TD>- Object of type <CODE>Ch*</CODE></TD></TR>
+    <TR><TD><CODE>s2</CODE></TD><TD>- Object of type <CODE>const Ch*</CODE></TD></TR>
+    <TR><TD><CODE>n</CODE></TD><TD>- Object of type <CODE>std::streamsize</CODE></TD></TR>
+    <TR><TD><CODE>off</CODE></TD><TD>- Object of type <A HREF="../functions/positioning.html#synopsis"><CODE>stream_offset</CODE></A></TD></TR>
+    <TR><TD><CODE>way</CODE></TD><TD>- Object of type <CODE>std::ios_base::seekdir</CODE></TD></TR>
+    <TR><TD><CODE>which</CODE></TD><TD>- Object of type <CODE>std::ios_base::openmode</CODE></TD></TR>
+    <TR><TD><CODE>io</CODE></TD><TD>- Alias for namespace <CODE>boost::iostreams</CODE></TD></TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Category Precondition</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE>typename <A HREF="../guide/traits.html#char_type_of_ref">char_type_of</A><F>::type</CODE></PRE>
+        </TD>
+        <TD><CODE>typename</CODE> of the character type</TD>
+        <TD ALIGN="center">-</TD><TD ALIGN="center">-</TD>
+    </TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE>typename <A HREF="../guide/traits.html#category_ref">category_of</A><F>::type</CODE></PRE>
+        </TD>
+        <TD><CODE>typename</CODE> of the category</TD>
+        <TD ALIGN="center">-</TD><TD ALIGN="center">-</TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.get(d)</CODE></PRE></TD>
+        <TD><CODE>Tr::int_type</CODE></TD>
+        <TD ROWSPAN="2">
+            Not convertible to <A HREF="../guide/traits.html#category_tags"><CODE>multi_char_tag</CODE></A>
+        </TD>
+        <TD>
+            Returns the next character in the sequence controlled by <CODE>f</CODE>, or <CODE>Tr::eof()</CODE> if the end of the sequence has been reached. The sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/read.html"><CODE>io::read</CODE></A> and <A HREF="../functions/putback.html"><CODE>io::putback</CODE></A>.
+
+            <!-- reads up to <CODE>n</CODE> characters from the sequence controlled by <CODE>dev</CODE> into <CODE>s</CODE>, returning the number of characters read; returning a value less than n indicates end-of-sequence -->
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.put(d, c)</CODE></PRE></TD>
+        <TD><CODE>bool</CODE></TD>
+        <TD>
+            Writes the character <CODE>c</CODE> to the sequence controlled by <CODE>f</CODE>. The sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/write.html"><CODE>io::write</CODE></A>.
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.read(d, s1, n)</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::streamsize</CODE></PRE></TD>
+        <TD ROWSPAN="2">
+            Convertible to <A HREF="../guide/traits.html#category_tags"><CODE>multi_char_tag</CODE></A>
+        </TD>
+        <TD>
+            Reads up to <CODE></CODE> characters from the sequence controlled by <CODE>f</CODE> into the buffer <CODE>s1</CODE>, returning the number of characters read. Returning a value less than <CODE>n</CODE> indicates end-of-sequence. The sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/read.html"><CODE>io::read</CODE></A> and <A HREF="../functions/putback.html"><CODE>io::putback</CODE></A>.
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.write(d, s2, n)</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::streamsize</CODE></PRE></TD>
+        <TD>
+            Writes n characters from the buffer <CODE>s2</CODE> to the sequence controlled by <CODE>f</CODE>. The sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/write.html"><CODE>io::write</CODE></A>.
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.seek(d, off, way)</CODE></PRE></TD>
+        <TD><CODE>std::streampos</CODE></TD>
+        <TD ALIGN="center">-</TD>
+        <TD>
+            <P CLASS="concept">
+                Advances the read/write head by <CODE>off</CODE> characters, returning the new position, where the offset is calculated from:
+            </P>
+            <UL STYLE="margin:0,0,0,auto">
+                <LI STYLE="list-style-type:disc;list-style-image:none">the start of the sequence if <CODE>way</CODE> is <CODE>ios_base::beg</CODE>
+                <LI STYLE="list-style-type:disc;list-style-image:none">the current position if <CODE>way</CODE> is <CODE>ios_base::cur</CODE>
+                <LI STYLE="list-style-type:disc;list-style-image:none">the end of the sequence if <CODE>way</CODE> is <CODE>ios_base::end</CODE>
+            </UL>
+            <P CLASS="concept">
+                The sequence controlled by <CODE>d</CODE> may be accessed using <A HREF="../functions/read.html"><CODE>io::seek</CODE></A> and using <A HREF="../functions/putback.html"><CODE>io::write</CODE></A> if the <A HREF="../guide/modes.html">mode</A> of <CODE>F</CODE> is convertible to <A HREF="../guide/modes.html#output"><CODE>output</CODE></A>.
+            </P>
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    Errors which occur during the execution of <CODE>get</CODE>, <CODE>put</CODE>, <CODE>read</CODE>, <CODE>write</CODE> or <CODE>seek</CODE> are indicated by throwing exceptions. Reaching the end of the sequence is not an error, but attempting to write past the end of the sequence is.
+</P>
+
+<P>
+    After an exception is thrown, a SeekableFilter must be in a consistent state; further i/o operations may throw exceptions but must have well-defined behaviour. Furthermore, unless it is <A HREF="closable.html">Closable</A>, it must be ready to begin processing a new character sequence.
+</P>
+
+<H2>Models</H2>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/sink.html b/vendor/pdalboost/libs/iostreams/doc/concepts/sink.html
new file mode 100644
index 0000000..57e1559
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/sink.html
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Sink</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Sink</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Definition</H2>
+
+<P>
+    A Sink is a <A HREF="device.html">Device</A> whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="../guide/modes.html#output">output</A>. 
+</P>
+
+<H2>Description</H2>
+
+<P>A Sink provides write-access to a sequence of characters of a given type. In general, a Sink may expose this sequence in two ways:</P> 
+<OL>
+    <LI STYLE="list-style-type:lower-roman">
+        by defining a member function <CODE>write</CODE>, invoked indirectly by the Iostreams library through the function <A HREF="../functions/write.html"><CODE>boost::iostreams::write</CODE></A>;
+    </LI>
+    <LI STYLE="list-style-type:lower-roman">
+        by defining a member function <CODE>output_sequence</CODE> returning a pair of pointers delimiting the sequence in its entirety.
+    </LI>
+</OL>
+
+<P>As a special case, Boost.Iostreams treats standard output streams as Sinks. (For details, see <A HREF="../functions/write.html"><CODE>write</CODE></A>.)</P>
+
+<P>The mode of a Sink is <A HREF="../guide/modes.html#output"><CODE>output</CODE></A> or one of its refinements.</P>
+
+<H2>Note</H2>
+
+<P>To be usable with the streams and stream buffers provided by the Boost Iostreams library, Sinks must model <A HREF="blocking.html">Blocking</A>.
+
+<H2>Example</H2>
+
+<P>A model of Sink can be defined as follows:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">struct</SPAN> Sink {
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">char</SPAN>      char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> sink_tag  category;
+    std::streamsize write(<SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">char</SPAN>* s, std::streamsize n) 
+    {
+        <SPAN CLASS="comment">// Write up to n characters from the buffer
+        // s to the output sequence, returning the 
+        // number of characters written</SPAN>
+    }
+};</PRE>
+
+<P>
+    Here <CODE>sink_tag</CODE> is a <A HREF="../guide/traits.html#category_tags">category tag</A> identifying the type as a model of Sink. Typically a Sink can be defined by deriving from the helper classes <A HREF="../classes/device.html#synopsis"><CODE>sink</CODE></A> or <A HREF="../classes/device.html#synopsis"><CODE>wsink</CODE></A> and defining a member function <CODE>write</CODE>.
+
+<H2>Refinement of</H2>
+
+<P><A HREF="device.html">Device</A>.</P>
+
+<A NAME="types"></A>
+<H2>Associated Types</H2>
+
+<P>Same as <A HREF="device.html#types">Device</A>, with the following additional requirements:</P>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Category</TD><TD>A type convertible to <A HREF="../guide/traits.html#category_tags"><CODE>device_tag</CODE></A> and to <A HREF="../guide/modes.html#mode_tags"><CODE>output</CODE></A></TD></TR>
+</TABLE>
+
+<A NAME="notation"></A>
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>S</CODE></TD><TD>- A type which is a model of Sink</TD></TR>
+    <TR><TD><CODE>Ch</CODE></TD><TD>- The character type</TD></TR>
+    <TR><TD><CODE>snk</CODE></TD><TD>- Object of type <CODE>S</CODE></TD></TR>
+    <TR><TD><CODE>s</CODE></TD><TD>- Object of type <CODE>const Ch*</CODE></SPAN></TD></TR>
+    <TR><TD><CODE>n</CODE></TD><TD>- Object of type <CODE>std::streamsize</CODE></TD></TR>
+    <TR><TD><CODE>io</CODE></TD><TD>- Alias for namespace <CODE>boost::iostreams</CODE></TD></TR>
+</TABLE>
+
+<A NAME="expressions"></A>
+<H2>Valid Expressions / Semantics</H2>
+
+<P>Same as <A HREF="device.html#types">Device</A>, with the following additional requirements:</P>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Category Precondition</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE>typename <A HREF="../guide/traits.html#char_type_of_ref">char_type_of</A><S>::type</CODE></PRE>
+        </TD>
+        <TD><CODE>typename</CODE> of the character type</TD>
+        <TD ALIGN="center">-</TD><TD ALIGN="center">-</TD>
+    </TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE>typename <A HREF="../guide/traits.html#category_ref">category_of</A><S>::type</CODE></PRE>
+        </TD>
+        <TD><CODE>typename</CODE> of the category</TD>
+        <TD ALIGN="center">-</TD><TD ALIGN="center">-</TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE><A HREF="../functions/write.html">io::write</A>(snk, s, n)</CODE></PRE></TD>
+        <TD><CODE>std::streamsize</CODE></TD>
+        <TD>Not convertible to <A HREF="direct.html"><CODE>direct_tag</CODE></A></TD>
+        <TD>
+            Writes up to <CODE>n</CODE> characters from the sequence beginning at <CODE>s</CODE> to the output sequence controlled by <CODE>dev</CODE>, returning the number of characters written
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>snk.output_sequence()</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::pair<Ch*,Ch*></CODE></PRE></TD>
+        <TD>Convertible to <A HREF="direct.html"><CODE>direct_tag</CODE></A></TD>
+        <TD>Returns a pair of pointers delimiting the sequence controlled by <CODE>snk</CODE></TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    Errors which occur during the execution of member functions <CODE>write</CODE> or <CODE>output_sequence</CODE>
+    are indicated by throwing exceptions. Attempting to write past the end of the sequence is always an error.
+</P>
+
+<P>
+    After an exception is thrown, a Sink must be in a consistent state; further i/o operations may throw exceptions but must have well-defined behaviour.
+</P>
+
+<H2>Models</H2>
+
+<UL>
+    <LI>Standard output streams and stream buffers.
+    <LI><A HREF="../classes/array.html#array_sink"><CODE>array_sink</CODE></A>, <A HREF="../classes/file.html#file_sink"><CODE>file_sink</CODE></A>, <A HREF="../classes/file_descriptor.html#file_descriptor_sink"><CODE>file_descriptor_sink</CODE></A>, <A HREF="../classes/mapped_file.html#mapped_file_sink"><CODE>mapped_file_sink</CODE></A>.
+</UL>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/source.html b/vendor/pdalboost/libs/iostreams/doc/concepts/source.html
new file mode 100644
index 0000000..676f0fe
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/source.html
@@ -0,0 +1,153 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Source</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Source</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Definition</H2>
+
+<P>
+    A Source is a <A HREF="device.html">Device</A> whose <A HREF="../guide/modes.html">mode</A> refines <A HREF="../guide/modes.html#input">input</A>. 
+</P>
+
+<H2>Description</H2>
+
+<P>A Source provides read-access to a sequence of characters of a given type. In general, a Source may expose this sequence in two ways:</P> 
+
+<OL>
+    <LI STYLE="list-style-type:lower-roman">
+        by defining a member function <CODE>read</CODE>; or
+    </LI>
+    <LI STYLE="list-style-type:lower-roman">
+        by defining a member function <CODE>input_sequence</CODE> returning a pair of pointers delimiting the sequence in its entirety.
+    </LI>
+</OL>
+
+<P>As a special case, Boost.Iostreams treats standard input streams as Sources. (For details, see <A HREF="../functions/read.html"><CODE>read</CODE></A>.)</P>
+
+<P>The mode of a Source is <A HREF="../guide/modes.html#input"><CODE>input</CODE></A> or one of its refinements.</P>
+
+<H2>Note</H2>
+
+<P>To be usable with the streams and stream buffers provided by the Boost Iostreams library, Sources must model <A HREF="blocking.html">Blocking</A>.
+
+<H2>Example</H2>
+
+<P>
+    A model of Source can be defined as follows:
+</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">struct</SPAN> Source {
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">char</SPAN>        char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> source_tag  category;
+    std::streamsize read(<SPAN CLASS="keyword">char</SPAN>* s, std::streamsize n) 
+    {
+        <SPAN CLASS="comment">// Read up to n characters from the input 
+        // sequence into the buffer s, returning   
+        // the number of characters read, or -1 
+        // to indicate end-of-sequence.</SPAN>
+    }
+};</PRE>
+
+<P>
+    Here <CODE>source_tag</CODE> is a <A HREF="../guide/traits.html#category_tags">category tag</A> identifying the type as a model of Source. Typically a Source can be defined by deriving from the helper classes <A HREF="../classes/device.html#synopsis"><CODE>source</CODE></A> or <A HREF="../classes/device.html#synopsis"><CODE>wsource</CODE></A> and defining a member function <CODE>read</CODE>.
+
+<H2>Refinement of</H2>
+
+<P><A HREF="device.html">Device</A>.</P>
+
+<A NAME="types"></A>
+<H2>Associated Types</H2>
+
+<P>Same as <A HREF="device.html#types">Device</A>, with the following additional requirements:</P>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Category</TD><TD>A type convertible to <A HREF="../guide/traits.html#category_tags"><CODE>device_tag</CODE></A> and to <A HREF="../guide/modes.html#mode_tags"><CODE>input</CODE></A></TD></TR>
+</TABLE>
+
+<A NAME="notation"></A>
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>S</CODE></TD><TD>- A type which is a model of Source</TD></TR>
+    <TR><TD><CODE>Ch</CODE></TD><TD>- The character type</TD></TR>
+    <TR><TD><CODE>src</CODE></TD><TD>- Object of type <CODE>S</CODE></TD></TR>
+    <TR><TD><CODE>s</CODE></TD><TD>- Object of type <CODE>Ch*</CODE></SPAN></TD></TR>
+    <TR><TD><CODE>n</CODE></TD><TD>- Object of type <CODE>std::streamsize</CODE></TD></TR>
+    <TR><TD><CODE>io</CODE></TD><TD>- Alias for namespace <CODE>boost::iostreams</CODE></TD></TR>
+</TABLE>
+
+<A NAME="expressions"></A>
+<H2>Valid Expressions / Semantics</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Category Precondition</TH><TH>Semantics</TH></TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE>typename <A HREF="../guide/traits.html#char_type_of_ref">char_type_of</A><S>::type</CODE></PRE>
+        </TD>
+        <TD><CODE>typename</CODE> of the character type</TD>
+        <TD ALIGN="center">-</TD><TD ALIGN="center">-</TD>
+    </TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE>typename <A HREF="../guide/traits.html#category_ref">category_of</A><S>::type</CODE></PRE>
+        </TD>
+        <TD><CODE>typename</CODE> of the category</TD>
+        <TD ALIGN="center">-</TD><TD ALIGN="center">-</TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE><A HREF="../functions/read.html">io::read</A>(src, s, n)</CODE></PRE></TD>
+        <TD><CODE>std::streamsize</CODE></TD>
+        <TD>Not convertible to <A HREF="direct.html"><CODE>direct_tag</CODE></A></TD>
+        <TD>
+            Reads up to <CODE>n</CODE> characters from the input sequence controlled by <CODE>dev</CODE> into <CODE>s</CODE>, returning the number of characters read, or <CODE>-1</CODE> to indicate end-of-sequence
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>src.input_sequence()</CODE></PRE></TD>
+        <TD><PRE CLASS="plain_code"><CODE>std::pair<Ch*,Ch*></CODE></PRE></TD>
+        <TD>Convertible to <A HREF="direct.html"><CODE>direct_tag</CODE></A></TD>
+        <TD>Returns a pair of pointers delimiting the sequence controlled by <CODE>src</CODE></TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    Errors which occur during the execution of member functions <CODE>read</CODE> or <CODE>input_sequence</CODE> are indicated by throwing exceptions. Reaching the end of the sequence is not an error.
+</P>
+
+<P>
+    After an exception is thrown, a Source must be in a consistent state; further i/o operations may throw exceptions but must have well-defined behaviour.
+</P>
+
+<H2>Models</H2>
+
+<UL>
+    <LI>Standard input streams and stream buffers.
+    <LI><A HREF="../classes/array.html#array_source"><CODE>array_source</CODE></A>, <A HREF="../classes/file.html#file_source"><CODE>file_source</CODE></A>, <A HREF="../classes/file_descriptor.html#file_descriptor_source"><CODE>file_descriptor_source</CODE></A>, <A HREF="../classes/mapped_file.html#mapped_file_source"><CODE>mapped_file_source</CODE></A>.
+</UL>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/concepts/symmetric_filter.html b/vendor/pdalboost/libs/iostreams/doc/concepts/symmetric_filter.html
new file mode 100644
index 0000000..255c219
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/concepts/symmetric_filter.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>SymmetricFilter</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">SymmetricFilter</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>Description</H2>
+
+<P>
+    A SymmetricFilter processes a character sequence fed to it incrementally in a user-supplied buffer and outputs a filtered sequence incrementally to a second user-supplied buffer. It is useful for defining filters based on C language APIs.
+</P>
+
+<P>
+    SymmetricFilter does not refine <A HREF="filter.html">Filter</A>. Instead, the template <A HREF="../classes/symmetric_filter.html"><CODE>symmetric_filter</CODE></A> can used to generate a Filter from a SymmetricFilter. The Filters generated in this manner are <A HREF="dual_use_filter.html">DualUseFilters</A> and are <A HREF="../../../../doc/html/CopyConstructible.html" TARGET="_top">CopyConstructible</A> regardless of whether the SymmetricFilters on which they are based are  <A HREF= [...]
+</P>
+
+<P>
+    The concept SymmetricFilter is notable in that its definition does not involve the concept of a <A HREF="source.html">Source</A> or <A HREF="sink.html">Sink</A>.
+</P>
+
+<H2>Associated Types</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TD>Character type</TD><TD>The type of the characters in the filtered sequences</TD></TR>
+</TABLE>
+
+<H2>Notation</H2>
+
+<TABLE CELLPADDING="2">
+    <TR><TD><CODE>F</CODE></TD><TD>- A type which is a model of SymmetricFilter</TD></TR>
+    <TR><TD><CODE>Ch</CODE></TD><TD>- The character type of <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>f</CODE></TD><TD>- Object of type <CODE>F</CODE></TD></TR>
+    <TR><TD><CODE>i1, i2</CODE></TD><TD>- Objects of type <CODE>const Ch*</CODE></TD></TR>
+    <TR><TD><CODE>o1, o2</CODE></TD><TD>- Objects of type <CODE>Ch*</CODE></TD></TR>
+    <TR><TD><CODE>flush</CODE></TD><TD>- Object of type <CODE>bool</CODE></TD></TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics — Typenames</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH></TR>
+    <TR>
+        <TD>
+            <PRE CLASS="plain_code"><CODE>typename <A HREF="../guide/traits.html#char_type_of_ref">char_type_of</A><F>::type</CODE></PRE>
+        </TD>
+        <TD><CODE>typename</CODE> of the character type</TD>
+    </TR>
+</TABLE>
+
+<H2>Valid Expressions / Semantics — Member Functions</H2>
+
+<TABLE CELLPADDING="5" BORDER="1">
+    <TR><TH>Expression</TH><TH>Expression Type</TH><TH>Semantics</TH><TH>Postcondition</TH></TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.filter(i1, i2, o1, o2, flush)</CODE></PRE></TD>
+        <TD><CODE>bool</CODE></TD>
+        <TD>
+            Attempts to filter the sequence <CODE>[i1, i2)</CODE>, storing the result in the sequence <CODE>[o1, o2)</CODE>. If <CODE>flush</CODE> is true, writes as much output to <CODE>[o1, o2)</CODE> as possible. If <CODE>flush</CODE> is <CODE>false</CODE>, returns <CODE>false</CODE> to indicate that a “natural” end of stream has been detected. Otherwise, returns <CODE>true</CODE> to indicate that additional characters, not yet stored in <CODE>[o1, o2)</CODE>, are availabl [...]
+        </TD>
+        <TD>
+                <P><CODE>i1</CODE> points to the first unconsumed character in the orginal sequence <CODE>[i1, i2)</CODE>.
+                <P><CODE>o1</CODE> points to the first unconsumed character in the orginal sequence <CODE>[o1, o2)</CODE>.
+                <P>Either <CODE>i1 == i2</CODE> or <CODE>o1 == o2</CODE>.
+        </TD>
+    </TR>
+    <TR>
+        <TD><PRE CLASS="plain_code"><CODE>f.close()</CODE></PRE></TD>
+        <TD><CODE>void</CODE></TD>
+        <TD ALIGN="center">-</TD>
+        <TD>
+            <CODE></CODE><CODE>f</CODE> is ready to begin filtering a new sequence
+        </TD>
+    </TR>
+</TABLE>
+
+<H2>Exceptions</H2>
+
+<P>
+    Errors which occur during the execution of <CODE>filter</CODE> or <CODE>close</CODE> are indicated by throwing exceptions.
+</P>
+
+<H2>Models</H2>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/faq.html b/vendor/pdalboost/libs/iostreams/doc/faq.html
new file mode 100644
index 0000000..978a7b5
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/faq.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Frequently Asked Questions</TITLE>
+    <LINK REL="stylesheet" HREF="../../../boost.css">
+    <LINK REL="stylesheet" HREF="theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Frequently Asked Questions</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index" style="margin-top:1em">
+  <DT><A href="#flush">Why is data I've written to a <CODE>filtering_stream</CODE> not reaching the Sink at the end of the chain?</A></DT>
+  <DT><A href="#tee">How do I write to several ostreams at once?</A></DT>
+  <DT><A href="#component_access">How do I access a Filter or Device after I've added it to a chain or attached it to a <CODE>stream</CODE> or <CODE>stream_buffer?</CODE></A></DT>
+  <DT><A href="#offsets">How do perform file positioning operations with large (64-bit) offsets?</A></DT>
+  <DT><A href="#stl">How do I read from or write to an STL sequence?</A></DT>
+  <DT><A href="#multibyte">How do I write a stream which can read or write multibyte character encodings?</A></DT>
+  <DT><A href="#auto_close">Can I swap Filters or Devices in the middle of a sequence of i/o operations?</CODE></A></DT>
+  <DT><A href="#lifetime">Why does my filter chain work with <CODE>std::cout</CODE> but not with another <CODE>ostream</CODE>?</A></DT>
+  <DT><A href="#pipe">Why do I get errors stating that <CODE>operator|</CODE> is ambiguous?</A></DT>
+  <DT><A href="#finite_state">Why do I get errors when compiling the <CODE>finite_state_filter</CODE> examples?</A></DT>
+</DL>
+
+<HR style="margin-top:1em">
+
+<A NAME="flush"></A>
+<H4>Why is data I've written to a <CODE>filtering_stream</CODE> not reaching the Sink at the end of the chain?</H4>
+
+<P>
+     You may need to flush the stream. Note, however, that there is no guarantee that all data written to a <A HREF="classes/filtering_stream.html"><CODE>filtering_stream</CODE></A> will be forwarded to the final Sink until the stream is closed, unless all the Filters in the underlying <A HREF="classes/chain.html"><CODE>chain</CODE></A> are <A HREF="concepts/flushable.html">Flushable</A>.
+</P>
+<P>
+     It's also possible that a buggy Filter is modifying data in a way you don't expect, <I>e.g.</I>, by silently discarding data.
+</P>
+
+<A NAME="tee"></A>
+<H4>How do I write to several ostreams at once?</H4>
+
+<P>
+     Use a <A HREF="functions/tee.html#tee_filter"><CODE>tee_filter</CODE></A> or <A HREF="functions/tee.html#tee_device"><CODE>tee_device</CODE></A>. <I>See</I> <A HREF="functions/tee.html"><CODE>tee</CODE></A>.
+</P>
+
+<A NAME="component_access"></A>
+<H4>How do I access a Filter or Device after I've added it to a chain or attached it to a <CODE>stream</CODE> or <CODE>stream_buffer?</CODE></H4>
+
+<P>
+     If you're using a <A HREF="guide/generic_streams.html#stream"><CODE>stream</CODE></A> or <A HREF="guide/generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A>, use <CODE>operator*</CODE> or <CODE>operator-></CODE>. 
+</P>
+
+<P>
+     If you're using a <A HREF="classes/filtering_stream.html"><CODE>filtering_stream</CODE></A>, <A HREF="classes/filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A> or <A HREF="classes/chain.html"><CODE>chain</CODE></A>, use the member function templates <A HREF="classes/chain.html#component_type"><CODE>component_type</CODE></A> and <A HREF="classes/chain.html#component"><CODE>component</CODE></A>. Alternatively, add your Filter or Device to the chain by reference, using a   [...]
+</P>
+
+<A NAME="offsets"></A>
+<H4>How do perform file positioning operations with large (64-bit) offsets?</H4>
+
+<P>
+    If you're using a raw Device and your compiler supports a 64-bit integral type, you can pass a large offset directly to <CODE>seek</CODE>. To convert the return value of seek to an integral type, use <A HREF="functions/positioning.html#position_to_offset"><CODE>position_to_offset</CODE></A>.
+</P>
+
+<P>
+    If you're using a <A HREF="guide/generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A> or <A HREF="classes/filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A>, convert the offset to a <CODE>std::streampos</CODE> using <A HREF="functions/positioning.html#offset_to_position"><CODE>offset_to_position</CODE></A>, then pass it to <CODE>pubseekpos</CODE>. To convert the return value of seek to an integral type, use <A HREF="functions/positioning.html#position_to_off [...]
+</P>
+
+<P>
+    If you're using a <A HREF="guide/generic_streams.html#stream"><CODE>stream</CODE></A> or <A HREF="classes/filtering_stream.html"><CODE>filtering_stream</CODE></A>, convert the offset to a <CODE>std::streampos</CODE> using <A HREF="functions/positioning.html#offset_to_position"><CODE>offset_to_position</CODE></A>, then pass it to the overload of <CODE>seekg</CODE> or <CODE>seekp</CODE> which takes a single <CODE>std::streampos</CODE> argument. To convert the return value of seek to an [...]
+</P>
+
+<P><I>See</I> <A HREF="functions/positioning.html">Stream Offsets</A>.</P>
+
+<A NAME="stl"></A>
+<H4>How do I read from or write to an STL sequence?</H4>
+
+<P>
+    You can append to an STL sequence using a <A HREF="classes/back_inserter.html"><CODE>back_insert_device</CODE></A>, or the function <A HREF="classes/back_inserter.html#back_inserter"><CODE>boost::iostreams::back_inserter</CODE></A>. You can read from an STL sequence 
+    by adding an instance of <A HREF="../../range/doc/html/range/reference/utilities/iterator_range.html" TARGET="_top"><CODE>boost::itertator_range</CODE></A> to a <A HREF="classes/filtering_stream.html"><CODE>filtering_stream</CODE></A> or <A HREF="classes/filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A>.
+</P>
+
+<P><I>See</I> <A HREF="tutorial/container_source.html">Writing a <CODE>container_source</CODE></A> and <A HREF="tutorial/container_sink.html">Writing a <CODE>container_sink</CODE></A>.</P>
+
+<A NAME="multibyte"></A>
+<H4>How do I write a stream which can read or write multibyte character encodings?</H4>
+
+<P>
+     Use a <A HREF="classes/code_converter.html"><CODE>code_converter</CODE></A>. <I>See</I> <A HREF="guide/code_conversion.html"><CODE>Code Conversion</CODE></A>.
+</P>
+
+<A NAME="auto_close"></A>
+<H4>Can I swap Filters or Devices in the middle of a sequence of i/o operations?</H4>
+
+<P>
+     If you're performing output, and if all the Filters in you chain are <A HREF="concepts/flushable.html">Flushable</A>, then yes. First call <A HREF="classes/chain.html#strict_sync"><CODE>strict_sync</CODE></A>. If it returns <CODE>true</CODE>, you can safely call <CODE><A HREF="classes/chain.html#set_auto_close">set_auto_close</A>(false)</CODE> and <A HREF="classes/chain.html#pop"><CODE>pop</CODE></A> one or more components without closing the stream. This applies to instances of <A  [...]
+</P>
+
+<A NAME="lifetime"></A>
+<H4>Why does my filter chain work with <CODE>std::cout</CODE> but not with another <CODE>ostream</CODE>?</H4>
+
+<P>
+     The Iostreams library stores streams and stream buffers by reference; consequently, streams and stream buffers must outlive any filter chain to which they are added. This is not a problem for <CODE>std::cout</CODE>, since it is guaranteed to live until the end of the program.
+</P>
+
+<P>
+     Check to make sure that the <CODE>ostream</CODE> is not being destroyed before the <CODE>filtering_stream</CODE>. If both objects are constructed on the stack within the same block, make sure that the <CODE>ostream</CODE> is constructed <I>first</I>.
+</P>
+
+<A NAME="pipe"></A>
+<H4>Why do I get errors stating that <CODE>operator|</CODE> is ambiguous?</H4>
+
+<P>
+     During overload resolution for an expression involving <CODE>operator|</CODE>, your compiler could be considering an implicit conversion from an intergral type to a <A HREF="concepts/pipable.html">Pipable</A> Filter. Make sure that all your Pipable Filters have <CODE>explicit</CODE> constructors. <I>See</I> <A HREF="guide/pipelines.html">Pipelines</A>.
+</P>
+
+<A NAME="finite_state"></A>
+<H4>Why do I get errors when compiling the <CODE>finite_state_filter</CODE> examples?</H4>
+
+<P>
+     The template <CODE>finite_state_filter</CODE> requires a highly standard-conforming compiler. See <A HREF="portability.html">Portability</A> and the <A HREF="http://www.boost.org/status/compiler_status.html" TARGET="_top">Compiler Status Tables</A> for details.
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/close.html b/vendor/pdalboost/libs/iostreams/doc/functions/close.html
new file mode 100644
index 0000000..d98ab76
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/close.html
@@ -0,0 +1,288 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Function Template close</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+    <STYLE> H3 CODE { font-size: 120% } </STYLE>
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>close</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#when">When is <CODE>close</CODE> invoked?</DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>The Iostreams library provides three overloads of the function template <CODE>close</CODE>.</P>
+
+<P>The first overload of <CODE>close</CODE> takes a single Device argument. It allows a user to close a Device without worrying whether the Device controls a single sequence or two sequences:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+              
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">T</A>>     
+<SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close_device">close</A>(T& t);
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+
+<P>The other two overloads of <CODE>close</CODE> should rarely be called by library users; they are invoked automatically by the library to indicate to <A HREF="../guide/concepts.html#filter_concepts">Filters</A> and <A HREF="../guide/concepts.html#device_concepts">Devices</A> that a sequence of data is about to end. This gives Filters and Devices an opportunity to free resources or to reset their states in preparation for a new character sequence. Filters and Devices which perform outpu [...]
+</P>
+
+<P>The details regarding when and how <CODE>close</CODE> is invoked are a bit messy:</P>
+
+<A NAME="when"></A>
+<H2>When is <CODE>close</CODE> invoked?</H2>
+
+<H4><CODE>stream_buffer</CODE> and <CODE>stream</CODE></H4>
+
+<P>When an instance of <CODE>stream_buffer</CODE> or <CODE>stream</CODE> based on a Device <CODE>d</CODE> is closed using member function <CODE>close</CODE>, the following sequence of functions calls is made:<P>
+<PRE CLASS="broken_ie">    boost::iostreams::close(d, std::ios_base::in);
+    boost::iostreams::close(d, std::ios_base::out);</PRE>
+<P>The effect, if <CODE>D</CODE> is <A HREF="../concepts/closable.html">Closable</A> and controls a single sequence, is as follows:</P>
+<PRE CLASS="broken_ie">    d.close();</PRE>
+<P>If <CODE>D</CODE> is <A HREF="../concepts/closable.html">Closable</A> and controls separate input and output sequences, the effect is as follows:</P>
+<PRE CLASS="broken_ie">    d.close(std::ios_base::in);
+    d.close(std::ios_base::out);</PRE>
+
+<P>(<I>See</I> the semantics of <CODE>close</CODE> for <A HREF="#close_device">Device types</A>, below.)
+
+<H4><CODE>filtering_streambuf</CODE> and <CODE>filtering_stream</CODE></H4>
+
+<P>
+    A <A HREF="../classes/filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A> or <A HREF="../classes/filtering_stream.html"><CODE>filtering_stream</CODE></A> is considered to be <I>closed</I> if its lifetime ends while its chain is complete or if its terminal Device is removed using <CODE>pop</CODE> or <CODE>reset</CODE>. When this occurs, the following sequence of calls is made, assuming that the underlying sequence of Filters and Devices is <CODE>f<SUB>1</SUB></CODE>, <CODE> [...]
+
+    <PRE CLASS="broken_ie">    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+    
+    <SPAN CLASS="comment">// Close each input sequence, in reverse order:</SPAN>
+    boost::iostreams::close(d,<SPAN STYLE="visibility:hidden"><SUB>n-1</SUB>, buf<SUB>n-1</SUB></SPAN> ios_base::in);
+    boost::iostreams::close(f<SUB>n-1</SUB>, buf<SUB>n</SUB>,<SPAN STYLE="visibility:hidden"><SUB>-1</SUB></SPAN> ios_base::in);
+    boost::iostreams::close(f<SUB>n-2</SUB>, buf<SUB>n-1</SUB>, ios_base::in);
+    <SPAN CLASS="omitted">...</SPAN>
+    boost::iostreams::close(f<SUB>1</SUB>,<SPAN STYLE="visibility:hidden"><SUB>n-</SUB></SPAN> buf<SUB>2</SUB>,<SPAN STYLE="visibility:hidden"><SUB>n-</SUB></SPAN> ios_base::in);
+
+    <SPAN CLASS="comment">// Close each output sequence, in order:</SPAN>
+    boost::iostreams::close(f<SUB>1</SUB>,<SPAN STYLE="visibility:hidden"><SUB>n-</SUB></SPAN> buf<SUB>2</SUB>,<SPAN STYLE="visibility:hidden"><SUB>n-</SUB></SPAN> ios_base::out);
+    boost::iostreams::close(f<SUB>2</SUB>,<SPAN STYLE="visibility:hidden"><SUB>n-</SUB></SPAN> buf<SUB>3</SUB>,<SPAN STYLE="visibility:hidden"><SUB>n-</SUB></SPAN> ios_base::out);
+    <SPAN CLASS="omitted">...</SPAN>
+    boost::iostreams::close(f<SUB>n-1</SUB>, buf<SUB>n</SUB>,<SPAN STYLE="visibility:hidden"><SUB>n-</SUB></SPAN> ios_base::out);
+    boost::iostreams::close(d,<SPAN STYLE="visibility:hidden"><SUB>n-1</SUB>, buf<SUB>n-1</SUB></SPAN> ios_base::out);</PRE>
+</P>
+<P>This implies</P>
+<UL>
+<LI>For filter chains consisting of read-only components, the elements of the chain are closed in reverse order</LI>
+<LI>For filter chains consisting of write-only components, the elements of the chain are closed in forward order</LI>
+<LI>Filters and Devices controlling separate input and output sequences receive two closure notifications, the first with argument <CODE>ios_base::in</CODE> and the second with argument <CODE>ios_base::out</CODE>. 
+</UL>
+
+<P>(<I>See</I> the semantics of <CODE>close</CODE> for <A HREF="#close_filter">Filter</A> and <A HREF="#close_device">Device</A> types, below.)</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/close.hpp"><CODE><boost/iostreams/close.hpp></CODE></A></DT>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><CODE><boost/iostreams/operations.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="synopsis"></A>
+<H3>Synopsis</H3>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+              
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">T</A>>     
+<SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close_convenience">close</A>(T& t);
+              
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params_devices">T</A>>     
+<SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close_device">close</A>(T& t, std::ios_base::openmode which);
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params_filters">T</A>, <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params_filters">Device</A>>
+<SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close_filter">close</A>(T& t, Device& next, std::ios_base::openmode which);
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+
+<A NAME="close_convenience"></A>
+<H3>Function Template <CODE>close</CODE> — Convenience Function</H3>
+
+<A NAME="template_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of one of the <A HREF="../guide/concepts.html#device_concepts">Device</A> concepts.
+    </TR>
+</TABLE>
+
+<H4>Semantics</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>     
+<SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close_device">close</A>(T& t);</PRE>
+
+<P>This overload of <CODE>close</CODE> calls <CODE>close(t, std::ios_base::in)</CODE> followed by <CODE>close(t, std::ios_base::out)</CODE>. It ensures that <CODE>t</CODE> is closed properly, regardless of the <A HREF="../guide/modes.html">mode</A> or <CODE>t</CODE>.
+
+<A NAME="close_device"></A>
+<H3>Function Template <CODE>close</CODE> — Closure Notification for Devices</H3>
+
+<A NAME="template_params_devices"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of one of the <A HREF="../guide/concepts.html#device_concepts">Device</A> concepts.
+    </TR>
+</TABLE>
+
+<H4>Semantics</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>     
+<SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#close_device">close</A>(T& t, std::ios_base::openmode which);</PRE>
+
+<P>If <CODE>t</CODE> is a <A HREF="../guide/filtering_streams.html">filtering stream or stream buffer</A>, <CODE>close</CODE> calls <A HREF="../classes/filtering_stream.html#pop"><CODE>pop</CODE></A> if <CODE>t</CODE> is <A HREF="../classes/filtering_streambuf.html#is_complete">complete</A>. The semantics depends on its <A HREF="../guide/traits.html#category">category</A> as follows:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>category<T>::type</CODE></TH><TH>semantics</TH></TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/modes.html#input"><CODE>input</CODE></A> but not to <A HREF="../guide/modes.html#output"><CODE>output</CODE></A></TD>
+        <TD>calls <CODE>t.pop()</CODE> if <code>t</CODE> is complete and which == ios_base::in</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">otherwise</TD>
+        <TD>calls <CODE>t.pop()</CODE> if <code>t</CODE> is complete and <CODE>which == ios_base::out</CODE></TD>
+    </TR>
+</TABLE>
+
+<P>The semantics of <CODE>close</CODE> for a device <CODE>T</CODE> other than a filtering stream or stream buffer depends on its <A HREF="../guide/traits.html#category">category</A> as follows:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>category<T>::type</CODE></TH><TH>semantics</TH></TR>
+    <TR>
+        <TD VALIGN="top">not convertible to <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A></TD>
+        <TD>calls <A HREF="flush.html"><CODE>flush</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A> and to <A HREF="../guide/modes.html#bidirectional"><CODE>bidirectional</CODE></A></A></TD>
+        <TD>calls <CODE>t.close(which)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A> and to <A HREF="../guide/modes.html#input"><CODE>input</CODE></A> but not to <A HREF="../guide/modes.html#output"><CODE>output</CODE></A></TD>
+        <TD>calls <CODE>t.close()</CODE> if <CODE>which == ios_base::in</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A> and to <A HREF="../guide/modes.html#input"><CODE>output</CODE></A> but not to <A HREF="../guide/modes.html#bidirectional"><CODE>bidirectional</CODE></A></TD>
+        <TD>calls <CODE>t.close()</CODE> if <CODE>which == ios_base::out</CODE></TD>
+    </TR>
+</TABLE>
+
+<P>In short:
+<UL>
+    <LI CLASS="square">If <CODE>T</CODE> is not <A HREF="../concepts/closable.html">Closable</A>, <CODE>close</CODE> calls <A HREF="flush.html"><CODE>flush</CODE></A>.
+    <LI CLASS="square">If <CODE>T</CODE> is <A HREF="../concepts/closable.html">Closable</A> and controls two separate sequences, <CODE>close</CODE> delegates to a member function <CODE>close</CODE> taking a single <CODE>openmode</CODE> parameter.
+    <LI CLASS="square">Otherwise, <CODE>close</CODE> delegates to a member function <CODE>close</CODE> taking no parameters, but only if its <CODE>openmode</CODE> parameter is consistent with the mode of <CODE>T</CODE>. 
+</UL>
+
+<P>The last condition prevents a Device controlling a single sequence from being closed twice in succession.</P>
+
+<P><B>NOTE:</B> Starting with Boost 1.35, the invocation of this function with an <CODE>openmode</CODE> other than <CODE>std::ios_base::in</CODE> or
+    <CODE>std::ios_base::out</CODE> is <B>deprecated</B>. To close both sequences at once, use
+<PRE>close(t)</PRE> 
+instead of 
+<PRE>close(t, std::ios_base::in | std::ios_base::out)</PRE></P>
+
+<A NAME="close_filter"></A>
+<H3>Function Template <CODE>close</CODE> — Closure Notification for Filters</H3>
+
+<A NAME="template_params_filters"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of one of the <A HREF="../guide/concepts.html#filter_concepts">Filter</A> concepts</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Device</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="../concepts/blocking.html">Blocking</A> <A HREF="../concepts/device.html">Device</A> whose <A HREF="../guide/modes.html">mode</A> refines that of <CODE>T</CODE>.</TD>
+    </TR>
+</TABLE>
+
+<H4>Semantics</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T, <SPAN CLASS="keyword">typename</SPAN> Device>
+<SPAN CLASS="keyword">void</SPAN> close(T& t, Device& next, std::ios_base::openmode which);</PRE>
+
+<P>The semantics of <CODE>close</CODE> for a Filter type <CODE>T</CODE> depends on its <A HREF="../guide/traits.html#category">category</A> as follows:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>category<T>::type</CODE></TH><TH>semantics</TH></TR>
+    <TR>
+        <TD VALIGN="top">not convertible to <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A></TD>
+        <TD>calls <A HREF="flush.html"><CODE>flush</CODE></A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A> and to <A HREF="../guide/modes.html#bidirectional"><CODE>bidirectional</CODE></A></A></TD>
+        <TD>calls <CODE>t.close(next, which)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A> and to <A HREF="../guide/modes.html#input"><CODE>input</CODE></A> but not to <A HREF="../guide/modes.html#output"><CODE>output</CODE></A></TD>
+        <TD>calls <CODE>t.close(next)</CODE> if <CODE>which == ios_base::in</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A> and to <A HREF="../guide/modes.html#input"><CODE>output</CODE></A> but not to <A HREF="../guide/modes.html#bidirectional"><CODE>bidirectional</CODE></A></TD>
+        <TD>calls <CODE>t.close(next)</CODE> if <CODE>which == ios_base::out</CODE></TD>
+    </TR>
+</TABLE>
+
+<P>In short:
+<UL>
+    <LI CLASS="square">If <CODE>T</CODE> is not <A HREF="../concepts/closable.html">Closable</A>, <CODE>close</CODE> calls <A HREF="flush.html"><CODE>flush</CODE></A>.
+    <LI CLASS="square">If <CODE>T</CODE> is <A HREF="../concepts/closable.html">Closable</A> and controls two separate sequences, <CODE>close</CODE> delegates to a member function <CODE>close</CODE> taking <CODE>openmode</CODE> and stream buffer parameters.
+    <LI CLASS="square">Otherwise, <CODE>close</CODE> delegates to a member function <CODE>close</CODE> taking a single stream buffer parameter, but only if its <CODE>openmode</CODE> parameter is consistent with the mode of <CODE>T</CODE>. 
+</UL>
+
+<P>The last condition prevents a Filter controlling a single sequence from being closed twice in succession.</P>
+
+<P><B>NOTE:</B> Starting with Boost 1.35, the invocation of this function with an <CODE>openmode</CODE> other than <CODE>std::ios_base::in</CODE> or
+    <CODE>std::ios_base::out</CODE> is <B>deprecated</B>.</P>
+
+<!-- End Footnotes -->
+
+<HR>
+
+<P>
+<A CLASS='footnote_ref' NAME='note_1' HREF="#note_1_ref"><SUP>[1]</SUP></A>This behavior can be disabled in the case of <CODE>pop</CODE> by calling member function <CODE>set_auto_close</CODE> with the argument <CODE>false</CODE>. See, e.g., <A HREF="../classes/filtering_stream.html#set_auto_close"><CODE>filtering_stream::set_auto_close</CODE></A>.
+</P>
+
+<!-- Begin Footnotes -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/combine.html b/vendor/pdalboost/libs/iostreams/doc/functions/combine.html
new file mode 100644
index 0000000..00d962a
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/combine.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Function Template combine</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>combine</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#synopsis">Synopsis</A></DT>
+</DL>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The class template <CODE>combination</CODE> takes an <A HREF="../concepts/input_filter.html">InputFilter</A>/<A HREF="../concepts/output_filter.html">OutputFilter</A> pair or a <A HREF="../concepts/source.html">Source</A>/<A HREF="../concepts/sink.html">Sink</A> pair and yields a Filter or Device which performs input using the first component and output using the second. The function template <CODE>combine</CODE> takes an <A HREF="../concepts/input_filter.html">InputFilter</A>/<A HRE [...]
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/combine.hpp"><CODE><boost/iostreams/combine.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="synopsis"></A>
+<H2>Synopsis</H2>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+   
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> In, <SPAN CLASS="keyword">typename</SPAN> Out>
+<SPAN CLASS="keyword">class</SPAN> combination;
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> In, <SPAN CLASS="keyword">typename</SPAN> Out>
+combination<In, Out> combine(<SPAN CLASS="keyword">const</SPAN> In& in, <SPAN CLASS="keyword">const</SPAN> Out& out);
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/compose.html b/vendor/pdalboost/libs/iostreams/doc/functions/compose.html
new file mode 100644
index 0000000..95921df
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/compose.html
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template chain</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>compose</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    Given a Filter <CODE>f</CODE> and a Device <CODE>d</CODE>, we may construct a device <CODE>c</CODE> whose member functions are implemented by invoking the fundamental i/o operations <A HREF='../functions/read.html'><CODE>read</CODE></A>, <A HREF='../functions/write.html'><CODE>write</CODE></A>, <I>etc.</I> with <CODE>f</CODE> as the first argument and <CODE>d</CODE> as the second. Similarly, if we are given two filters <CODE>f1</CODE> and <CODE>f2</CODE>, we may construct a third fil [...]
+</P>
+
+<P>
+    The function template <A HREF='#composite'><CODE>composite</CODE></A> represents a Filter or Device which has been constructed in the above manner. The function template <A HREF='#compose'><CODE>compose</CODE></A> is an <A HREF='http://www.boost.org/more/generic_programming.html#object_generator' TARGET='_top'>object generator</A> which given a pair of components returns an appropriate instance of <CODE>composite</CODE>.
+</P>
+
+<P>
+    The <A HREF='../guide/modes.html'>mode</A> of a <CODE>composite</CODE> is defined to provide a maximal subset of the common functionality of the two components. A <CODE>composite</CODE> is <A HREF='../concepts/closable.html'>Closable</A>, <A HREF='../concepts/flushable.html'>Flushable</A>, <A HREF='../concepts/localizable.html'>Localizable</A> and <A HREF='../concepts/optimally_buffered.html'>OptimallyBuffered</A>.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/compose.hpp"><CODE><boost/iostreams/compose.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#composite_template_params">Filter</A>, <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#composite_template_params">FilterOrDevice</A>>
+<SPAN CLASS='keyword'>class</SPAN> <A CLASS='documented' HREF='#composite'>composite</A> {
+<SPAN CLASS='keyword'>public:</SPAN>
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>typename</SPAN> <A CLASS='documented' HREF='../guide/traits.html#char_type'>char_type_of</A><Filter>::type  char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>implementation-defined</SPAN>               mode;
+
+    <A CLASS='documented' HREF='#composite_ctor'>composite</A>(<SPAN CLASS='keyword'>const</SPAN> Filter& first, [<SPAN CLASS='keyword'>const</SPAN>] FilterOrDevice& second);
+
+    <SPAN CLASS='comment'>// Filter or Device member functions</SPAN>
+};
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#compose_template_params">Filter</A>, <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#compose_template_params">FilterOrDevice</A>>
+<A CLASS='documented' HREF='#composite'>composite</A><Filter, FilterOrDevice> 
+<A CLASS='documented' HREF='#compose'>compose</A>(<SPAN CLASS='keyword'>const</SPAN> Filter& first, [<SPAN CLASS='keyword'>const</SPAN>] FilterOrDevice& second);
+
+} } // End namespace boost::io</PRE>
+
+<A NAME="composite"></A>
+<H2>Class Template <CODE>composite</CODE></H2>
+
+<A NAME="composite_template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Filter</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of <A HREF='../concepts/filter.html'>Filter</A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>FilterOrDevice</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of <A HREF='../concepts/filter.html'>Filter</A> or <A HREF='../concepts/device.html'>Device</A></TD>
+    </TR>
+</TABLE>
+
+<A NAME="composite_ctor"></A>
+<H4><CODE>composite::composite</CODE></H4>
+
+<PRE CLASS="broken_ie">    composite(<SPAN CLASS='keyword'>const</SPAN> Filter& first, [<SPAN CLASS='keyword'>const</SPAN>] FilterOrDevice& second);</PRE>
+
+<P>
+    Constructs an instance of <CODE>composite</CODE> based on the given components. If <CODE>FilterOrDevice</CODE> is a stream or stream buffer type, the second parameter is a non-<CODE>const</CODE> reference; otherwise it is a <CODE>const</CODE> reference.
+</P>
+
+<A NAME="compose"></A>
+<H2>Function Template <CODE>compose</CODE></H2>
+
+<PRE CLASS="broken_ie">    composite(<SPAN CLASS='keyword'>const</SPAN> Filter& first, [<SPAN CLASS='keyword'>const</SPAN>] FilterOrDevice& second);</PRE>
+
+<A NAME="compose_template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Filter</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of <A HREF='../concepts/filter.html'>Filter</A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>FilterOrDevice</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of <A HREF='../concepts/filter.html'>Filter</A> or <A HREF='../concepts/device.html'>Device</A></TD>
+    </TR>
+</TABLE>
+
+<P>
+    Returns an instance of an appropriate specialization of <CODE>composite</CODE> constructed from the given components. If <CODE>FilterOrDevice</CODE> is a stream or stream buffer type, the second parameter is a non-<CODE>const</CODE> reference; otherwise it is a <CODE>const</CODE> reference.
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/copy.html b/vendor/pdalboost/libs/iostreams/doc/functions/copy.html
new file mode 100644
index 0000000..7bc29fc
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/copy.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Function Template copy</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>copy</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#synopsis">Synopsis</A></DT>
+</DL>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>The function template <CODE>copy</CODE> reads data from a given model of <A HREF="../concepts/source.html">Source</A> and writes it to a given model of <A HREF="../concepts/sink.html">Sink</A> until the end of stream is reached. It then closes both components, using the function template <A HREF="close.html"><CODE>close</CODE></A>, and returns the number of characters written.</P>
+
+<P>The size of the temporary buffer used may be supplied as an optional parameter.</P>
+
+<P>There are four overloads of <CODE>copy</CODE> to accommodate all combinations of <A HREF="../concepts/source.html">Sources</A> and <A HREF="../concepts/sink.html">Sinks</A>, which are passed by <CODE>const</CODE> reference, and streams and stream buffers, which are passed by non-<CODE>const</CODE> reference.</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/copy.hpp"><CODE><boost/iostreams/copy.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="synopsis"></A>
+<H2>Synopsis</H2>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+              
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source, <SPAN CLASS="keyword">typename</SPAN> Sink>
+std::streamsize
+copy( [<SPAN CLASS="keyword">const</SPAN>] Source& src, [<SPAN CLASS="keyword">const</SPAN>] Sink& sink,
+      std::streamsize buffer_size = <SPAN CLASS="omitted">default value</SPAN> );
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/filter_test.html b/vendor/pdalboost/libs/iostreams/doc/functions/filter_test.html
new file mode 100644
index 0000000..527eb0d
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/filter_test.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Filter Testing Functions</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Filter Testing Functions</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A>
+    <DL>
+      <DT><A href="#test_input">Function template <CODE>test_input_filter</CODE></A></DT>
+      <DT><A href="#test_output">Function template <CODE>test_output_filter</CODE></A></DT>
+      <DT><A href="#test_pair">Function template <CODE>test_filter_pair</CODE></A></DT>
+    </DL>
+  </DT>
+</DL>
+
+<HR>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The header <A CLASS="header" HREF="../../../../boost/iostreams/filter/test.hpp"><CODE><boost/iostreams/filter/test.hpp></CODE></A> provides several overloaded function templates for verifying that a filter works as expected when used in conjunction with non-<A HREF='../concepts/blocking.html'>Blocking</A> <A HREF='../concepts/source.html'>Sources</A> and <A HREF='../concepts/sink.html'>Sinks</A>.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/filter/test.hpp"><CODE><boost/iostreams/filter/test.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="test_input"></A>
+<H3>Function template <CODE>test_input_filter</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Verifies that the given <A HREF='../concepts/input_filter.html'>InputFilter</A> yields the given output when passed the given input.</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> InputFilter>
+<SPAN CLASS='keyword'>bool</SPAN> test_input_filter( InputFilter filter, 
+                        <SPAN CLASS='keyword'>const</SPAN> std::string& input,
+                        <SPAN CLASS='keyword'>const</SPAN> std::string& output );
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> InputFilter, <SPAN CLASS='keyword'>typename</SPAN> Source1, <SPAN CLASS='keyword'>typename</SPAN> Source2>
+<SPAN CLASS='keyword'>bool</SPAN> test_input_filter( InputFilter filter, 
+                        <SPAN CLASS='keyword'>const</SPAN> Source1& input,
+                        <SPAN CLASS='keyword'>const</SPAN> Source2& output );
+
+} } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE>
+
+
+<A NAME="test_output"></A>
+<H3>Function template <CODE>test_output_filter</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Verifies that the given <A HREF='../concepts/output_filter.html'>OutputFilter</A> yields the given output when passed the given input.</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> OutputFilter>
+<SPAN CLASS='keyword'>bool</SPAN> test_output_filter( OutputFilter filter, 
+                         <SPAN CLASS='keyword'>const</SPAN> std::string& input,
+                         <SPAN CLASS='keyword'>const</SPAN> std::string& output );
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> OutputFilter, <SPAN CLASS='keyword'>typename</SPAN> Source1, <SPAN CLASS='keyword'>typename</SPAN> Source2>
+<SPAN CLASS='keyword'>bool</SPAN> test_output_filter( OutputFilter filter, 
+                         <SPAN CLASS='keyword'>const</SPAN> Source1& input,
+                         <SPAN CLASS='keyword'>const</SPAN> Source2& output );
+
+} } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE>
+
+<A NAME="test_pair"></A>
+<H3>Function template <CODE>test_filter_pair</CODE></H3>
+
+<H4>Description</H4>
+
+<P>Verifies that the given data is preserved when it is passed first through a given <A HREF='../concepts/output_filter.html'>OutputFilter</A> and then through a given <A HREF='../concepts/input_filter.html'>InputFilter</A>.</P>
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> OutputFilter, <SPAN CLASS='keyword'>typename</SPAN> InputFilter>
+<SPAN CLASS='keyword'>bool</SPAN> test_filter_pair( OutputFilter first, 
+                       InputFilter second,
+                       <SPAN CLASS='keyword'>const</SPAN> std::string& data );
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> OutputFilter, <SPAN CLASS='keyword'>typename</SPAN> InputFilter, <SPAN CLASS='keyword'>typename</SPAN> Source>
+<SPAN CLASS='keyword'>bool</SPAN> test_filter_pair( OutputFilter first, 
+                       InputFilter second, 
+                       <SPAN CLASS='keyword'>const</SPAN> Source& data );
+
+} } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/flush.html b/vendor/pdalboost/libs/iostreams/doc/functions/flush.html
new file mode 100644
index 0000000..bdedd21
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/flush.html
@@ -0,0 +1,147 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Function Template flush</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>flush</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<A NAME="overview"></A></A>
+<H2>Overview</H2>
+
+<P>
+    The function template <CODE>flush</CODE> attemps to flush all buffered characters downstream. It is provided to facilite modifiying a filter chain in the middle of a sequence of output operations; specifically, it is used to implement the function <CODE>strict_sync</CODE> (<I>see</I>, <I>e.g.</I>, <A HREF='../classes/filtering_stream.html#strict_sync'><CODE>filtering_stream::strict_sync</CODE></A>). If <CODE>strict_sync</CODE> succeeds, the auto-close feature of a filter chain can be [...]
+</P>
+<P>
+    For non-<A HREF='../concepts/flushable.html'>Flushable</A> devices, <CODE>flush</CODE> returns <CODE>true</CODE>, indicating that no error has occurred.<A CLASS='footnote_ref' NAME='note_1_ref' HREF="#note_1"><SUP>[1]</SUP></A> For non-<A HREF='../concepts/flushable.html'>Flushable</A> filters, however, <CODE>flush</CODE> returns <CODE>false</CODE>, indicating that some characters may remain buffered.
+</P>
+<P>
+    When working with Devices, <CODE>flush</CODE> may be used as a generic version of <CODE>std::basic_ostream::flush()</CODE>.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/flush.hpp"><CODE><boost/iostreams/flush.hpp></CODE></A></DT>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><CODE><boost/iostreams/operations.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="description"></A>
+<H4>Description</H4>
+
+<P>Attempts to flush all buffered characters downstream. For <A HREF='../concepts/device.html'>Devices</A>, returns <CODE>true</CODE> unless an error occurs.<A CLASS='footnote_ref' NAME='note_1_ref2' HREF='#note_1'><SUP>[1]</SUP></A>. For <A HREF='../concepts/filter.html'>Filters</A>, returns <CODE>true</CODE> only if all buffered characters were successfully written to <CODE>snk</CODE>. </P>
+
+<A NAME="synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+              
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">T</A>>
+<SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#flush_device">flush</A>(T& t);
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">T</A>, <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Sink</A>>
+<SPAN CLASS='keyword'>bool</SPAN> <A CLASS="documented" HREF="#flush_filter">flush</A>(T& t, Sink& snk);
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>For the first overload, a model of <A HREF="../concepts/device.html">Device</A>; for the second overload, a model of <A HREF="../concepts/filter.html">Filter</A>.
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Sink</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of <A HREF="../concepts/sink.html">Sink</A> with the same <A HREF="../guide/traits.html#char_type">character type</A> as <CODE>T</CODE>.
+    </TR>
+</TABLE>
+
+<A NAME="flush_device"></A>
+<H4>Semantics — Device Types</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>
+<SPAN CLASS='keyword'>bool</SPAN> flush(T& t);</PRE>
+
+<P>The semantics of <CODE>flush</CODE> depends on the <A HREF="../guide/traits.html#category">category</A> of <CODE>T</CODE> as follows:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>category_of<T>::type</CODE></TH><TH>semantics</TH></TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>ostream_tag</CODE></A></TD>
+        <TD>Invokes <CODE>t.rdbuf()->pubsync()</CODE> and returns <CODE>true</CODE> if the operation succeeds.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>streambuf_tag</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>istream_tag</CODE></A></TD>
+        <TD>Invokes <CODE>t.pubsync()</CODE> and returns <CODE>true</CODE> if the operation succeeds.</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>not</I> convertible to <A HREF="../guide/traits.html#category_tags"><CODE>flushable_tag</CODE></A></TD>
+        <TD>returns <CODE>t.flush()</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">otherwise</TD>
+        <TD>returns <CODE>true</CODE></TD>
+    </TR>
+</TABLE>
+
+<A NAME="flush_filter"></A>
+<H4>Semantics — Filter Types</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T, <SPAN CLASS="keyword">typename</SPAN> Sink>
+<SPAN CLASS='keyword'>bool</SPAN> flush(T& t, Sink& snk);</PRE>
+
+<P>The semantics of <CODE>flush</CODE> depends on the <A HREF="../guide/traits.html#category">category</A> of <CODE>T</CODE> as follows:</P>
+
+<TABLE STYLE="margin-bottom:2em;margin-left:2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>category_of<T>::type</CODE></TH><TH>semantics</TH></TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>flushable_tag</CODE></A></TD>
+        <TD>returns <CODE>t.flush(snk)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">otherwise</TD>
+        <TD>returns <CODE>false</CODE></TD>
+    </TR>
+</TABLE>
+
+<!-- Begin Footnotes -->
+
+<HR>
+
+<P>
+<A CLASS='footnote_ref' NAME='note_1' HREF='#note_1_ref'><SUP>[1]</SUP></A>It was noticed late in developement that to be consistent with the policy of reporting errors using exceptions (<I>see</I> <A HREF='../guide/exceptions.html'>Exceptions</A>), <CODE>flush</CODE> should have been specified to return <CODE>void</CODE> when invoked on a Device. Until the specification is changed, Devices should always return <CODE>true</CODE> when flushed.
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/functions.html b/vendor/pdalboost/libs/iostreams/doc/functions/functions.html
new file mode 100644
index 0000000..0b114cf
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/functions.html
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Iostreams Library Functions</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<STYLE> 
+    DT A { /*text-decoration:none*/ } 
+    LI A { /*text-decoration:none;*/ font: 80% Verdana, Tahoma, Arial, Helvetica, sans-serif }
+</STYLE>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Iostreams Library Functions</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+    <H4>Functions</H4>
+
+    <DL CLASS="page-index">
+      <DT><A href="../classes/back_inserter.html#synopsis"><CODE>back_inserter</CODE></A></DT>
+      <DT><A href="close.html"><CODE>close</CODE></A></DT>
+      <DT><A href="combine.html"><CODE>combine</CODE></A></DT>
+      <DT><A href="compose.html"><CODE>compose</CODE></A></DT>
+      <DT><A href="copy.html"><CODE>copy</CODE></A></DT>
+      <DT><A href="flush.html"><CODE>flush</CODE></A></DT>
+      <DT><A href="get.html"><CODE>get</CODE></A></DT>
+      <DT><A href="imbue.html"><CODE>imbue</CODE></A></DT>
+      <DT><A href="invert.html"><CODE>invert</CODE></A></DT>
+      <DT><A href="positioning.html#offset_to_position"><CODE>offset_to_position</CODE></A></DT>
+      <DT><A href="optimal_buffer_size.html"><CODE>optimal_buffer_size</CODE></A></DT>
+      <DT><A href="positioning.html#position_to_offset"><CODE>position_to_offset</CODE></A></DT>
+      <DT><A href="put.html"><CODE>put</CODE></A></DT>
+      <DT><A href="putback.html"><CODE>putback</CODE></A></DT>
+      <DT><A href="read.html"><CODE>read</CODE></A></DT>
+      <DT><A href="restrict.html"><CODE>restrict</CODE></A></DT>
+      <DT><A href="seek.html"><CODE>seek</CODE></A></DT>
+      <DT><A href="tee.html"><CODE>tee</CODE></A></DT>
+      <DT><A href="filter_test.html#test_pair"><CODE>test_filter_pair</CODE></A></DT>
+      <DT><A href="filter_test.html#test_input"><CODE>test_input_filter</CODE></A></DT>
+      <DT><A href="filter_test.html#test_output"><CODE>test_output_filter</CODE></A></DT>
+      <DT><A href="write.html"><CODE>write</CODE></A></DT>
+    </DL>
+
+<HR STYLE="margin-top:1em">
+
+<!-- Begin Footer -->
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a><br/>Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/get.html b/vendor/pdalboost/libs/iostreams/doc/functions/get.html
new file mode 100644
index 0000000..8b1a65d
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/get.html
@@ -0,0 +1,149 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Function Template get</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>get</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#example">Example</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The function template <CODE>get</CODE> provides a uniform interface for reading a character from a <A HREF="../concepts/source.html">Source</A>, for use in the definitions of new <A HREF="../guide/concepts.html#filter_concepts">Filter</A> types (<I>see</I> <A HREF="#example">Example</A>).
+</P>
+
+<A NAME="example"></A>
+<H2>Example</H2>
+
+<P>
+    The following code illustrates the use of the function <CODE>get</CODE> in the definition of an <A HREF="../concepts/input_filter.html">InputFilter</A>.
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><ctype.h></SPAN>                        <SPAN CLASS="comment">// tolower</SPAN>    
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/concepts.hpp></SPAN></A>   <SPAN CLASS="comment">// input_filter</SPAN> 
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A> <SPAN CLASS="comment">// get, EOF, WOULD_BLOCK</SPAN>
+
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> boost::io;
+
+    <SPAN CLASS="keyword">struct</SPAN> tolower_filter : <SPAN CLASS="keyword">public</SPAN> input_filter {
+        <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+        <SPAN CLASS="keyword">int</SPAN> get(Source& src)
+        {
+            <SPAN CLASS="keyword">int</SPAN> c;
+            <SPAN CLASS="keyword">return</SPAN> (c = boost::iostreams::get(src)) != <SPAN CLASS='numeric_literal'>EOF</SPAN> &&
+                    c != WOULD_BLOCK 
+                        ?
+                tolower((<SPAN CLASS="keyword">unsigned</SPAN> <SPAN CLASS="keyword">char</SPAN>) c) :
+                c;
+        }
+    };</PRE>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/get.hpp"><CODE><boost/iostreams/get.hpp></CODE></A></DT>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><CODE><boost/iostreams/operations.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="description"></A>
+<H4>Description</H4>
+
+<P>Attemps to extract a character from a given instance of the template parameter <CODE>Source</CODE>, returning the extracted character or one of the special values <CODE>traits_type::eof</CODE> or <A HREF="../classes/char_traits.html#would_block"><CODE>traits_type::would_block</CODE></A>, where <CODE>traits_type</CODE> is an appropriate specialization of <A HREF="../classes/char_traits.html"><CODE>boost::iostreams::char_traits</CODE></A></P>
+
+<A NAME="synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+              
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Source</A>>     
+    <SPAN CLASS="keyword">typename</SPAN> <A CLASS='documented' HREF="../guide/traits.html#int_type_of_ref">int_type_of</A><Source>::type
+    <A CLASS="documented" HREF="#semantics">get</A>(<A CLASS="documented" HREF="#template_params">Source</A>& <A CLASS="documented" HREF="#function_params">src</A>);
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Source</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of <A HREF="../concepts/source.html">Source</A>.
+    </TR>
+</TABLE>
+
+<A NAME="function_params"></A>
+<H4>Function Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>src</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>An instance of <CODE>Source</CODE></TD>
+    </TR>
+</TABLE>
+
+<A NAME="semantics"></A>
+<H4>Semantics</H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>     
+    <SPAN CLASS="keyword">typename</SPAN> int_type_of<Source>::type
+    get(Source& src);</PRE>
+
+<P>The semantics of <CODE>get</CODE> depends on the <A HREF="../guide/traits.html#category">category</A> of <CODE>Source</CODE> as follows:</P>
+
+<TABLE STYLE="margin:0,0,2em,2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>category_of<Source>::type</CODE></TH><TH>semantics</TH></TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>direct_tag</CODE></A></TD>
+        <TD>compile-time error</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>istream_tag</CODE></A></TD>
+        <TD>returns <CODE>src.get()</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>streambuf_tag</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>istream_tag</CODE></A></TD>
+        <TD>returns <CODE>src.sbumpc()</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">otherwise</TD>
+        <TD>
+            attempts to extract a single character using <CODE>src.read()</CODE>, returning the extracted character if successful and one of the special values <CODE>traits_type::eof</CODE> or <A HREF="../classes/char_traits.html#would_block"><CODE>traits_type::would_block</CODE></A> otherwise, where <CODE>traits_type</CODE> is <A HREF="../classes/char_traits.html"><CODE>boost::iostreams::char_traits<Source></CODE></A>
+        </TD>
+    </TR>
+</TABLE>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/imbue.html b/vendor/pdalboost/libs/iostreams/doc/functions/imbue.html
new file mode 100644
index 0000000..5d02dd6
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/imbue.html
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Function Template imbue</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>imbue</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The function template <CODE>imbue</CODE> is invoked automatically by the Iostreams library when the <CODE>std::locale</CODE> of a library stream or stream buffer is set using <CODE>std::basic_ios::imbue</CODE> or <CODE>std::basic_streambuf::pubimbue</CODE>. When the <CODE>std::locale</CODE> of an instance of <A HREF="../guide/generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A> or <A HREF="../guide/generic_streams.html#stream"><CODE>stream</CODE></A> is set, <CODE>imbue [...]
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/imbue.hpp"><CODE><boost/iostreams/detail/imbue.hpp></CODE></A></DT>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><CODE><boost/iostreams/detail/operations.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+              
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">T</A>>     
+<SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#semantics">imbue</A>(T& t, <SPAN CLASS="keyword">const</SPAN> std::locale& loc);
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of one of the <A HREF="../guide/concepts.html#filter_concepts">Filter</A> or <A HREF="../guide/concepts.html#device_concepts">Device</A> concepts</TD>
+    </TR>
+</TABLE>
+
+<A NAME="semantics"></A>
+<H4>Semantics</H4>
+
+<P>The semantics of <CODE>imbue</CODE> for a Filter or Device type <CODE>T</CODE> depends on its <A HREF="../guide/traits.html#category">category</A> as follows:</P>
+
+<TABLE STYLE="margin-left:2em; margin-bottom:2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>category_of<T>::type</CODE></TH><TH>semantics</TH></TR>
+    <TR>
+        <TD VALIGN="top">Convertible to <A HREF="../guide/traits.html#category_tags"><CODE>streambuf_tag</CODE></A></TD>
+        <TD>calls <CODE>t.pubimbue(loc)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">Convertible to <A HREF="../guide/traits.html#category_tags"><CODE>localizable_tag</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>streambuf_tag</CODE></A></TD>
+        <TD>calls <CODE>t.imbue(loc)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>otherwise</I></TD>
+        <TD>no-op</TD>
+    </TR>
+</TABLE>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/invert.html b/vendor/pdalboost/libs/iostreams/doc/functions/invert.html
new file mode 100644
index 0000000..34a7eee
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/invert.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Class Template chain</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>invert</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The class template <CODE>inverse</CODE> is an adapter which transforms an <A HREF='../concepts/input_filter.html'>InputFilter</A> into an <A HREF='../concepts/output_filter.html'>OutputFilter</A> or <I>vice versa</I>. The function template <CODE>invert</CODE> is an <A HREF='http://www.boost.org/more/generic_programming.html#object_generator' TARGET='_top'>object generator</A> which when passed a Filter returns a instance of an appropriate specialization of <CODE>inverse</CODE>.
+</P>
+
+<P>Given an <A HREF='../concepts/input_filter.html'>InputFilter</A> <CODE>f</CODE>, the inverse of <CODE>f</CODE> is <A HREF='../concepts/multi_character.html'>Multi-Character</A> <A HREF='../concepts/output_filter.html'>OutputFilter</A> whose member function <CODE>write</CODE> is implemented as follows. Given a <A HREF='../concepts/sink.html'>Sink</A> <CODE>snk</CODE> and a character buffer <CODE>s</CODE> of length <CODE>n</CODE>, we
+</P>
+<UL>
+    <LI>construct a <A HREF='../concepts/source.html'>Source</A> based on the buffer <CODE>s</CODE> and <A HREF='compose.html'><CODE>compose</CODE></A> it with <CODE>f</CODE> to form a Source, then
+    <LI>repeatedly read sequences of characters from the composite Source and write them to <CODE>snk</CODE> until the buffer <CODE>s</CODE> is exhausted.
+</UL>
+
+<P>Similarly, given an <A HREF='../concepts/output_filter.html'>OutputFilter</A> <CODE>f</CODE>, the inverse of <CODE>f</CODE> is <A HREF='../concepts/multi_character.html'>Multi-Character</A> <A HREF='../concepts/input_filter.html'>InputFilter</A> whose member function <CODE>read</CODE> is implemented as follows. Given a <A HREF='../concepts/source.html'>Source</A> <CODE>src</CODE> and a character buffer <CODE>s</CODE> of length <CODE>n</CODE>, we
+</P>
+<UL>
+    <LI>construct a <A HREF='../concepts/sink.html'>Sink</A> based on the buffer <CODE>s</CODE> and <A HREF='compose.html'><CODE>compose</CODE></A> it with <CODE>f</CODE> to form a Sink, then
+    <LI>repeatedly read sequences of characters from <CODE>src</CODE> and write them to the composite Sink until the buffer <CODE>s</CODE> is full.
+</UL>
+
+<P>
+    The <A HREF='../guide/modes.html'>mode</A> of a specialization of <CODE>inverse</CODE> is equal to <A HREF='../guide/modes.html#output'>output</A> if the mode of the underlying filter refines input, and to <A HREF='../guide/modes.html#input'>input</A> otherwise.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/invert.hpp"><CODE><boost/iostreams/invert.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#inverse_template_params">Filter</A>>
+<SPAN CLASS='keyword'>class</SPAN> <A CLASS='documented' HREF='#inverse'>inverse</A> {
+<SPAN CLASS='keyword'>public:</SPAN>
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>typename</SPAN> <A CLASS='documented' HREF='../guide/traits.html#char_type_of_ref'>char_type_of</A><Filter>::type  char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>see above</SPAN>                            mode;
+
+    <A CLASS='documented' HREF='#inverse_ctor'>inverse</A>(<SPAN CLASS='keyword'>const</SPAN> Filter& filter);
+
+    <SPAN CLASS='comment'>// Filter member functions</SPAN>
+};
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#invert_template_params">Filter</A>>
+<A CLASS='documented' HREF='#inverse'>inverse</A><Filter> <A CLASS='documented' HREF='#invert'>invert</A>(<SPAN CLASS='keyword'>const</SPAN> Filter& filter);
+
+} } // End namespace boost::io</PRE>
+
+<A NAME="inverse"></A>
+<H2>Class Template <CODE>inverse</CODE></H2>
+
+<A NAME="inverse_template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Filter</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of <A HREF='../concepts/filter.html'>Filter</A></TD>
+    </TR>
+</TABLE>
+
+<A NAME="inverse_ctor"></A>
+<H4><CODE>inverse::inverse</CODE></H4>
+
+<PRE CLASS="broken_ie">    inverse(<SPAN CLASS='keyword'>const</SPAN> Filter& filter);</PRE>
+
+<P>
+    Constructs an instance of <CODE>inverse</CODE> based on the given filter.
+</P>
+
+<A NAME="invert"></A>
+<H2>Function Template <CODE>invert</CODE></H2>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Filter>
+inverse<Filter> invert(<SPAN CLASS='keyword'>const</SPAN> Filter& filter);</PRE>
+
+<A NAME="invert_template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Filter</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of <A HREF='../concepts/filter.html'>Filter</A></TD>
+    </TR>
+</TABLE>
+
+<P>
+    Constructs an instance of an appropriate specialization of <CODE>inverse</CODE> based on the given filter.
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/optimal_buffer_size.html b/vendor/pdalboost/libs/iostreams/doc/functions/optimal_buffer_size.html
new file mode 100644
index 0000000..1d67a1a
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/optimal_buffer_size.html
@@ -0,0 +1,95 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Function Template optimal_buffer_size</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>optimal_buffer_size</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The function template <CODE>optimal_buffer_size</CODE> returns the size of the character buffer which is allocated for a Filter or Device by library streams, stream buffers and chains if no buffer size is explicitly specified.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/optimal_buffer_size.hpp"><CODE><boost/iostreams/optimal_buffer_size.hpp></CODE></A></DT>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><CODE><boost/iostreams/operations.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+              
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">T</A>>
+std::streamsize <A CLASS="documented" HREF="#optimal_buffer_size">optimal_buffer_size</A>(T& t);
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of <A HREF="../concepts/filter.html">Filter</A> or <A HREF="../concepts/device.html">Device</A>.
+    </TR>
+</TABLE>
+
+<A NAME="optimal_buffer_size"></A>
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>
+std::streamsize optimal_buffer_size(T& t);</PRE>
+
+<P>The semantics of <CODE>optimal_buffer_size</CODE> depends on the <A HREF="../guide/traits.html#category">category</A> of <CODE>T</CODE> as follows:</P>
+
+<TABLE STYLE="margin-left:2em;margin-bottom:2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>category_of<T>::type</CODE></TH><TH>semantics</TH></TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>optimally_buffered_tag</CODE></A></TD>
+        <TD>Returns <CODE>t.optimal_buffer_size()</CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>filter_tag</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>optimally_buffered_tag</CODE></A></TD>
+        <TD>Returns <A HREF='../macros/buffer_sizes.html'><CODE>default_filter_buffer_size</CODE></A>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">otherwise</TD>
+        <TD>Returns <A HREF='../macros/buffer_sizes.html'><CODE>default_device_buffer_size</CODE></A>.</TD>
+    </TR>
+</TABLE>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/positioning.html b/vendor/pdalboost/libs/iostreams/doc/functions/positioning.html
new file mode 100644
index 0000000..ef129d1
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/positioning.html
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Stream Offsets</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Stream Offsets</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#acknowledgments">Acknowledgments</A>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The header <A CLASS="header" HREF="../../../../boost/iostreams/positioning.hpp"><CODE><boost/iostreams/positioning.hpp></CODE></A> provides the definition of the integral type <CODE>boost::iostreams::stream_offset</CODE>, capable of holding arbitrary stream offsets on most platforms, together with the definition of two functions, <CODE>offset_to_position</CODE> and <CODE>position_to_offset</CODE>, for converting between <CODE>stream_offset</CODE> and <CODE>std::streampos</CODE>.
+</P>
+
+<P>
+    The type <CODE>std::streampos</CODE> is required to be able to hold an arbitrary stream position, but it is not an intergral type. Although <CODE>std::streampos</CODE> is interconvertible with the integral type <CODE>std::streamoff</CODE>, the conversion from <CODE>std::streampos</CODE> to <CODE>std::streamoff</CODE> may not be faithful for large (64-bit) values. The integral type <CODE>boost::iostreams::stream_offset</CODE> is intended as a replacement for <CODE>std::streamoff</CODE [...]
+</P>
+
+<P>
+    The implementation of <CODE>offset_to_position</CODE> and <CODE>position_to_offset</CODE> relies on implementation defined behavior, and is guaranteed to work correctly for large values only for standard libraries which define <CODE>std::streamoff</CODE> to be 64-bit type or for which the Boost Iostreams library has been explicitly configured.
+</P>
+
+<A NAME="acknowledgments"></A>
+<H2>Acknowledgments</H2>
+
+<P>Gareth Sylvester-Bradley suggested the treatment of large stream offsets used by the Boost Iostreams library and supplied the implementation of <CODE>offset_to_position</CODE> and <CODE>position_to_offset</CODE> used with the Dinkumware standard library.</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/positioning.hpp"><CODE><boost/iostreams/positioning.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS='keyword'>typedef</SPAN> <A CLASS='documented' HREF='../../../integer/doc/html/boost_integer/cstdint.html' TARGET='_top'>boost::intmax_t</A> stream_offset;
+std::streampos <A CLASS='documented' HREF='#offset_to_position'>offset_to_position</A>(stream_offset n);
+stream_offset <A CLASS='documented' HREF='#position_to_offset'>position_to_offset</A>(std::streampos pos);
+
+} } <SPAN CLASS='comment'>// End namespace boost::io</SPAN></PRE>
+
+<A NAME="offset_to_position"></A>
+<H4>Function template <CODE>offset_to_position</CODE></H4>
+
+<PRE CLASS="broken_ie">std::streampos offset_to_position(stream_offset n);</PRE>
+
+<P>Returns a <CODE>std::streampos</CODE> representing the <CODE>n</CODE><I>th</I> position in a stream.</P>
+
+<A NAME="position_to_offset"></A>
+<H4>Function template <CODE>position_to_offset</CODE></H4>
+
+<PRE CLASS="broken_ie">stream_offset position_to_offset(std::streampos pos);</PRE>
+
+<P>Returns a <CODE>stream_offset</CODE> representing the same character position as <CODE>pos</CODE>, disregarding any code-conversion state.</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/put.html b/vendor/pdalboost/libs/iostreams/doc/functions/put.html
new file mode 100644
index 0000000..d6230ba
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/put.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Function Template put</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>put</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#example">Example</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The function template <CODE>put</CODE> provides a uniform interface for writing a character to a <A HREF="../concepts/sink.html">Sink</A>, for use in the definitions of new <A HREF="../guide/concepts.html#filter_concepts">Filter</A> types (<I>see</I> <A HREF="#example">Example</A>).
+</P>
+
+<A NAME="example"></A>
+<H2>Example</H2>
+
+<P>
+    The following code illustrates the use of the function <CODE>put</CODE> in the definition of an <A HREF="../concepts/output_filter.html">OutputFilter</A>.
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><ctype.h></SPAN>                        <SPAN CLASS="comment">// toupper</SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/concepts.hpp></SPAN></A>   <SPAN CLASS="comment">// output_filter</SPAN> 
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A> <SPAN CLASS="comment">// put</SPAN>
+
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+    <SPAN CLASS="keyword">namespace</SPAN> io = boost::iostreams;
+
+    <SPAN CLASS="keyword">struct</SPAN> toupper_filter : <SPAN CLASS="keyword">public</SPAN> io::output_filter {
+        <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+        <SPAN CLASS="keyword">bool</SPAN> put(Sink& snk, <SPAN CLASS="keyword">char</SPAN> c)
+        {
+            <SPAN CLASS="keyword">return</SPAN> io::put(snk, toupper((<SPAN CLASS="keyword">unsigned</SPAN> <SPAN CLASS="keyword">char</SPAN>) c));
+        }
+    };</PRE>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><CODE><boost/iostreams/operations.hpp></CODE></A></DT>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/put.hpp"><CODE><boost/iostreams/put.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="description"></A>
+<H4>Description</H4>
+
+<P>Attempts to write a character to a given instance of the template parameter <CODE>Sink</CODE>, returning <CODE>true</CODE> for success.</P>
+
+<A NAME="synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+              
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Sink</A>>     
+    <SPAN CLASS="keyword">void</SPAN> put(Sink& <A CLASS="documented" HREF="#function_params">snk</A>, <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="../guide/traits.html#char_type_of_ref">char_type_of</A><Sink>::type c);
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Sink</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="../concepts/direct.html">indirect</A> model of <A HREF="../concepts/sink.html">Sink</A> or a standard output stream or stream buffer type.
+    </TR>
+</TABLE>
+
+<A NAME="function_params"></A>
+<H4>Function Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>snk</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>An instance of <CODE>Sink</CODE></TD>
+    </TR>
+</TABLE>
+
+<A NAME="semantics"></A>
+<H4>Semantics</H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>     
+    <SPAN CLASS="keyword">void</SPAN> put(Sink& snk, <SPAN CLASS="keyword">typename</SPAN> char_type_of<Sink>::type c);</PRE>
+
+<P>The semantics of <CODE>put</CODE> depends on the <A HREF="../guide/traits.html#category">category</A> of <CODE>Sink</CODE> as follows:</P>
+
+<TABLE STYLE="margin:0,0,2em,2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>category_of<Sink>::type</CODE></TH><TH>semantics</TH></TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>direct_tag</CODE></A></TD>
+        <TD>compile-time error</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>ostream_tag</CODE></A></TD>
+        <TD>invokes <CODE>snk.put(c)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>streambuf_tag</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>ostream_tag</CODE></A></TD>
+        <TD>invokes <CODE>snk.sputc(c)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">otherwise</TD>
+        <TD>invokes <CODE>snk.write(&c, 1)</CODE></TD>
+    </TR>
+</TABLE>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/putback.html b/vendor/pdalboost/libs/iostreams/doc/functions/putback.html
new file mode 100644
index 0000000..3eab8a1
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/putback.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Function Template putback</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>putback</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The function template <CODE>putback</CODE> provides a uniform interface for putting back characters read from models of <A HREF="../concepts/peekable.html">Peekable</A>, for use in the definitions of <A HREF="../concepts/filter.html">Filters</A>.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><CODE><boost/iostreams/operations.hpp></CODE></A></DT>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/putback.hpp"><CODE><boost/iostreams/putback.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="description"></A>
+<H4>Description</H4>
+
+<P>Attempt to putback a character to a given instance of the template parameter <CODE>Peekable</CODE>, returning <CODE>true</CODE> for success.</P>
+
+<A NAME="synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+              
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Peekable</A>>     
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#semantics">putback</A>(Peekable& peekable, <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="../guide/traits.html#char_type_of_ref">char_type_of</A><Peekable>::type c);
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Peekable</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of <A HREF="../concepts/peekable.html">Peekable</A>.
+    </TR>
+</TABLE>
+
+<A NAME="semantics"></A>
+<H4>Semantics</H4>
+
+<P>The semantics of <CODE>putback</CODE> depends on the <A HREF="../guide/traits.html#category">category</A> of <CODE>Peekable</CODE> as follows:</P>
+
+<TABLE STYLE="margin:0,0,2em,2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>category_of<Peekable>::type</CODE></TH><TH>semantics</TH></TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>istream_tag</CODE></A></TD>
+        <TD>invokes <CODE>peekable.rdbuf()->putback(c)</CODE> and returns <CODE>true</CODE> if the operation was successful</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>streambuf_tag</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>istream_tag</CODE></A></TD>
+        <TD>invokes <CODE>peekable.sputbackc(c)</CODE> and returns <CODE>true</CODE> if the operation was successful</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>peekable_tag</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>streambuf_tag</CODE></A> or <A HREF="../guide/traits.html#category_tags"><CODE>istream_tag</CODE></A></TD>
+        <TD>returns <CODE>peekable.putback(c)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">otherwise</TD>
+        <TD>compile-time error</CODE></TD>
+    </TR>
+</TABLE>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/read.html b/vendor/pdalboost/libs/iostreams/doc/functions/read.html
new file mode 100644
index 0000000..a159ed9
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/read.html
@@ -0,0 +1,202 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Function Template read</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>read</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#example">Example</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The two overloads of the function template <CODE>read</CODE> provide a uniform interface for reading a sequence of characters from a <A HREF="../concepts/source.html">Source</A> or <A HREF="../concepts/input_filter.html">InputFilter</A>. 
+    <UL>
+        <LI>The first overload can be used directly in the definitions of new Filter types (<I>see</I> <A HREF="#example">Example</A>), and figures in the specification of the <A HREF="../guide/concepts.html#device_concepts">Device</A> concepts.
+        <LI>The second overload is primarily for internal use by the library.
+    </UL>
+</P>
+
+<A NAME="example"></A>
+<H2>Example</H2>
+
+<P>
+    The following code illustrates the use of the function <CODE>read</CODE> in the definition of a <A HREF="../concepts/multi_character.html">Multi-Character</A> <A HREF="../concepts/input_filter.html">InputFilter</A>.
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><ctype.h></SPAN>                        <SPAN CLASS="comment">// tolower</SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/concepts.hpp></SPAN></A>   <SPAN CLASS="comment">// multichar_input_filter</SPAN> 
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A> <SPAN CLASS="comment">// read</SPAN>
+
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+    <SPAN CLASS="keyword">namespace</SPAN> io = boost::iostreams;
+
+    <SPAN CLASS="keyword">struct</SPAN> tolower_filter : <SPAN CLASS="keyword">public</SPAN> io::multichar_input_filter {
+        <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+        streamsize read(Source& src, <SPAN CLASS="keyword">char</SPAN>* s, streamsize n)
+        {
+            streamsize result;
+            <SPAN CLASS="keyword">if</SPAN> ((result = io::read(src, s, n)) == <SPAN CLASS='numeric_literal'>-1</SPAN>)
+                <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS='numeric_literal'>-1</SPAN>; <SPAN CLASS='comment'>// EOF</SPAN>
+            <SPAN CLASS="keyword">for</SPAN> (streamsize z = <SPAN CLASS="numeric_literal">0</SPAN>; z < result; ++z)
+                s[z] = tolower((<SPAN CLASS="keyword">unsigned</SPAN> <SPAN CLASS="keyword">char</SPAN>) s[z]);
+            <SPAN CLASS="keyword">return</SPAN> result;
+        }
+    };</PRE>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><CODE><boost/iostreams/operations.hpp></CODE></A></DT>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/read.hpp"><CODE><boost/iostreams/read.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="description"></A>
+<H4>Description</H4>
+
+<P>
+    Reads a sequence of characters from a given instance of the template parameter <CODE>T</CODE>, returning the number of characters read, or <CODE>-1</CODE> to indicate end-of-sequence.
+</P>
+
+<A NAME="synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+              
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">T</A>>     
+std::streamsize <A CLASS="documented" HREF="#read_device">read</A>( T& <A CLASS="documented" HREF="#function_params">t</A>,
+                      <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="../guide/traits.html#char_type_of_ref">char_type_of</A><T>::type* <A CLASS="documented" HREF="#function_params">s</A>, 
+                      std::streamsize <A CLASS="documented" HREF="#function_params">n</A> );
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">T</A>, <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Source</A>>
+std::streamsize <A CLASS="documented" HREF="#read_filter">read</A>( T& <A CLASS="documented" HREF="#function_params">t</A>,
+                      Source& <A CLASS="documented" HREF="#function_params">src</A>,
+                      <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="../guide/traits.html#char_type_of_ref">char_type_of</A><T>::type* <A CLASS="documented" HREF="#function_params">s</A>, 
+                      std::streamsize <A CLASS="documented" HREF="#function_params">n</A> );
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>For the first overload, a model of <A HREF="../concepts/source.html">Source</A> or a standard input stream or stream buffer type. For the second overload, a model of <A HREF="../concepts/input_filter.html">InputFilter</A>.
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Source</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>An <A HREF="../concepts/direct.html">indirect</A> model of <A HREF="../concepts/source.html">Source</A> with the same <A HREF="../guide/traits.html#char_type">character type</A> as <CODE>T</CODE> whose <A HREF="../guide/modes.html">mode</A> refines that of <CODE>T</CODE>. <CODE>Source</CODE> must also model <A HREF="../concepts/peekable.html">Peekable</A>.
+    </TR>
+</TABLE>
+
+<A NAME="function_params"></A>
+<H4>Function Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>t</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>An instance of the Filter or Device type <CODE>T</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>s</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The buffer into which characters should be read</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>n</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The maximum number of characters to read</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>src</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>An instance of <CODE>Source</CODE>
+    </TR>
+</TABLE>
+
+<A NAME="read_device"></A>
+<H4>Semantics — Device Types</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>     
+std::streamsize read( T& t,
+                      <SPAN CLASS="keyword">typename</SPAN> char_type_of<T>::type* s, 
+                      std::streamsize n );</PRE>
+
+<P>The semantics of <CODE>read</CODE> depends on the <A HREF="../guide/traits.html#category">category</A> of <CODE>T</CODE> as follows:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>category_of<T>::type</CODE></TH><TH>semantics</TH></TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>istream_tag</CODE></A></TD>
+        <TD>invokes <CODE>t.read(s, n)</CODE> and returns <CODE>t.gcount()</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>streambuf_tag</CODE></A> but not to <A HREF="../guide/traits.html#category_tags"><CODE>istream_tag</CODE></A></TD>
+        <TD>returns <CODE>t.sgetn(s, n)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>not</I> convertible to <A HREF="../guide/traits.html#category_tags"><CODE>direct_tag</CODE></A></TD>
+        <TD>returns <CODE>t.read(s, n)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">otherwise</TD>
+        <TD>compile-time error</CODE></TD>
+    </TR>
+</TABLE>
+
+<A NAME="read_filter"></A>
+<H4>Semantics — Filter Types</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>
+std::streamsize read( T& t,
+                      Source& src,
+                      <SPAN CLASS="keyword">typename</SPAN> char_type_of<T>::type* s,
+                      std::streamsize n );</PRE>
+
+<P>The semantics of <CODE>read</CODE> depends on the <A HREF="../guide/traits.html#category">category</A> of <CODE>T</CODE> as follows:</P>
+
+<TABLE STYLE="margin-bottom:2em;margin-left:2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>category_of<T>::type</CODE></TH><TH>semantics</TH></TR>
+    <TR>
+        <TD VALIGN="top">convertible to <A HREF="../guide/traits.html#category_tags"><CODE>multichar_tag</CODE></A></TD>
+        <TD>returns <CODE>t.read(src, s, n)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">otherwise</TD>
+        <TD>
+            reads up to <CODE>n</CODE> characters into <CODE>s</CODE> by invoking <CODE>t.get(src)</CODE> repeatedly, halting if <CODE>traits_typre::eof</CODE> or <A HREF="../classes/char_traits.html#would_block"><CODE>traits_type::would_block</CODE></A> is returned, where <CODE>traits_type</CODE> is <A HREF="../classes/char_traits.html"><CODE>boost::iostreams::char_traits<Source></CODE></A></A>. Returns the number of characters read, or <CODE>-1</CODE> to indicate end-of-sequence.
+        </TD>
+    </TR>
+</TABLE>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/restrict.html b/vendor/pdalboost/libs/iostreams/doc/functions/restrict.html
new file mode 100644
index 0000000..96b662c
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/restrict.html
@@ -0,0 +1,168 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Function Template restrict</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>restrict</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    Given a Filter or Device that provides access to a single character sequence, we can construct a second Filter or Device which provides access to contiguous subsequence of the the original sequence. This second Filter or Device is called a <I>restriction</I> of the original device. Restrictions are represented by instances of the class template <CODE>restriction</CODE>. The function template <CODE>resrict</CODE> is an <A HREF='http://www.boost.org/more/generic_programming.html#object [...]
+</P>
+
+<P>
+    The <A HREF='../guide/modes.html'>mode</A> of a <CODE>resriction</CODE> is the same as that of the underlying component. A <CODE>resriction</CODE> is <A HREF='../concepts/closable.html'>Closable</A>, <A HREF='../concepts/flushable.html'>Flushable</A>, <A HREF='../concepts/localizable.html'>Localizable</A> and <A HREF='../concepts/optimally_buffered.html'>OptimallyBuffered</A>.
+</P>
+
+<P>
+    The function template <a href="slice.html"><code>slice</code></a> is available as an alias of <code>restrict</code>, for platforms that treat <code>restrict</code> as a keyword.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/restrict.hpp"><CODE><boost/iostreams/restrict.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#restriction_template_params">Component</A>>
+<SPAN CLASS='keyword'>class</SPAN> <A CLASS='documented' HREF='#restriction'>restriction</A> {
+<SPAN CLASS='keyword'>public:</SPAN>
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>typename</SPAN> <A CLASS='documented' HREF='../guide/traits.html#char_type_of_ref'>char_type_of</A><Component>::type  char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>implementation-defined</SPAN>                  mode;
+
+    <A CLASS='documented' HREF='#restriction_ctor'>restriction</A>( [<SPAN CLASS='keyword'>const</SPAN>] Component& component,
+                 <A CLASS='documented' HREF='positioning.html#synopsis'>stream_offset</A> off, 
+                 <A CLASS='documented' HREF='positioning.html#synopsis'>stream_offset</A> len = <SPAN     CLASS='literal'>-1</SPAN> );
+
+    <SPAN CLASS='comment'>// Filter or Device member functions</SPAN>
+};
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#restrict_template_params">Component</A>>
+<A CLASS='documented' HREF='#restriction'>restriction</A><Component> 
+<A CLASS='documented' HREF='#restrict'>restrict</A>( [<SPAN CLASS='keyword'>const</SPAN>] Component& component,
+          <A CLASS='documented' HREF='positioning.html#synopsis'>stream_offset</A> off, 
+          <A CLASS='documented' HREF='positioning.html#synopsis'>stream_offset</A> len = <SPAN     CLASS='literal'>-1</SPAN> );
+
+} } // End namespace boost::io</PRE>
+
+<A NAME="restriction"></A>
+<H2>Class Template <CODE>restriction</CODE></H2>
+
+<A NAME="restriction_template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Component</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of <A HREF='../concepts/filter.html'>Filter</A> or <A HREF='../concepts/device.html'>Device</A></TD>
+    </TR>
+</TABLE>
+
+<A NAME="restriction_ctor"></A>
+<H4><CODE>restriction::restriction</CODE></H4>
+
+<PRE CLASS="broken_ie">    restriction( [<SPAN CLASS='keyword'>const</SPAN>] Component& component,
+                 <A CLASS='documented' HREF='positioning.html#synopsis'>stream_offset</A> off, 
+                 <A CLASS='documented' HREF='positioning.html#synopsis'>stream_offset</A> len = <SPAN     CLASS='literal'>-1</SPAN> );</PRE>
+
+<P>
+    Constructs an instance of <CODE>restriction</CODE> based on the given component and offsets. The parameters have the following interpretation:
+</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>component</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The Filter or Device to be restricted. If <CODE>Component</CODE> is a stream or stream buffer type, the function parameter is a non-<CODE>const</CODE> reference; otherwise it is a <CODE>const</CODE> reference.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>off</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The offset of the beginning of the restricted character sequence.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>len</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The length of the restricted character sequence. A value of <CODE>-1</CODE> indicates that the end of the restricted sequence should be the same as that of the unrestricted sequence.</TD>
+    </TR>
+</TABLE>
+
+<A NAME="restrict"></A>
+<H2>Function Template <CODE>restrict</CODE></H2>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Component>
+restriction<Component> 
+restrict( [<SPAN CLASS='keyword'>const</SPAN>] Component& component,
+          <A CLASS='documented' HREF='positioning.html#synopsis'>stream_offset</A> off, 
+          <A CLASS='documented' HREF='positioning.html#synopsis'>stream_offset</A> len = <SPAN     CLASS='literal'>-1</SPAN> );</PRE>
+
+<A NAME="restrict_template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Component</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of <A HREF='../concepts/filter.html'>Filter</A> or <A HREF='../concepts/device.html'>Device</A></TD>
+    </TR>
+</TABLE>
+
+<P>
+    Constructs an instance of an appropriate specialization of <CODE>restriction</CODE> based on the given component and offsets. The parameters have the following interpretation:
+</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>component</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The Filter or Device to be restricted. If <CODE>Component</CODE> is a stream or stream buffer type, the function parameter is a non-<CODE>const</CODE> reference; otherwise it is a <CODE>const</CODE> reference.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>off</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The offset of the beginning of the restricted character sequence.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>len</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The length of the restricted character sequence. A value of <CODE>-1</CODE> indicates that the end of the restricted sequence should be the same as that of the unrestricted sequence.</TD>
+    </TR>
+</TABLE>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/seek.html b/vendor/pdalboost/libs/iostreams/doc/functions/seek.html
new file mode 100644
index 0000000..2c1d75d
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/seek.html
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Function Template seek</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>seek</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The function template <CODE>seek</CODE> is used by the Iostreams library to perform random access withing a sequence controlled by a <A HREF="../concepts/device.html">Device</A>.</P>
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><CODE><boost/iostreams/operations.hpp></CODE></A></DT>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/seek.hpp"><CODE><boost/iostreams/seek.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="description"></A>
+<H4>Description</H4>
+
+Repositions one or both heads within the sequence controlled by a given instance of the template parameter <CODE>T</CODE>, returning the resulting stream position.
+
+<A NAME="synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+              
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">T</A>>
+std::streampos 
+<A CLASS="documented" HREF="#semantics">seek</A>( T&, <A CLASS="documented" HREF="positioning.html#synopsis">stream_offset</A>  <A CLASS="documented" HREF="#function_params">off</A>, std::ios_base::seekdir <A CLASS="documented" HREF="#function_params">way</A>,
+      std::ios_base::openmode <A CLASS="documented" HREF="#function_params">which</A> =
+          std::ios_base::in | std::ios_base::out );
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of one of the <A HREF="../guide/concepts.html#device_concepts">Device</A> concepts which allows random access.
+    </TR>
+</TABLE>
+
+<A NAME="function_params"></A>
+<H4>Function Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>off</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="positioning.html#synopsis"><CODE>stream_offset</CODE></A> indicating the number of characters by which the appropriate reading or writing heads should be advanced. The initial position is determined by the parameter <I>way</I>.
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>way</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD><P>Determines the initial position to which the offset <I>off</I> is applied, as follows:
+            <UL>
+                <LI CLASS="square">if <I>way</I> is <CODE>std::ios_base::beg</CODE>, the initial position is the begining of the stream
+                <LI CLASS="square">if <I>way</I> is <CODE>std::ios_base::cur</CODE>, the initial position is the current position
+                <LI CLASS="square">if <I>way</I> is <CODE>std::ios_base::end</CODE>, the initial position is the end of the stream
+            </UL>
+            </P>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>which</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>Determines whether the reading head, the writing head or both are repositioned.
+    </TR>
+</TABLE>
+
+<A NAME="semantics"></A>
+<H4>Semantics</H4>
+
+<P>The semantics of <CODE>seek</CODE> depends on the <A HREF="../guide/traits.html#category">category</A> of <CODE>T</CODE> as follows:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>category_of<T>::type</CODE></TH><TH>semantics</TH></TR>
+    <TR>
+        <TD VALIGN="top">convertible to <CODE>istream_tag</CODE> or <CODE>ostream_tag</CODE></TD>
+        <TD>returns:
+        <UL STYLE='margin-top:0'>
+            <LI><CODE>t.rdbuf()->pubseekpos(<A HREF="positioning.html#offset_to_position">offset_to_position</A>(off))</CODE>, if <CODE>way</CODE> is <CODE>std::ios_base::beg</CODE> and <CODE>off</CODE> is outside the range of <CODE>std::streamoff</CODE>, and
+            <LI><CODE>t.rdbuf()->pubseekoff(off, way)</CODE>, otherwise
+        <UL>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <CODE>streambuf_tag</CODE></TD>
+        <TD>returns:
+        <UL STYLE='margin-top:0'>
+            <LI><CODE>t.pubseekpos(<A HREF="positioning.html#offset_to_position">offset_to_position</A>(off))</CODE>, if <CODE>way</CODE> is <CODE>std::ios_base::beg</CODE> and <CODE>off</CODE> is outside the range of <CODE>std::streamoff</CODE>, and
+            <LI><CODE>t.pubseekoff(off, way)</CODE>, otherwise
+        <UL>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <CODE>input_seekable</CODE> but not to <CODE>output_seekable</CODE></TD>
+        <TD>returns <CODE>t.seek(off, way)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <CODE>output_seekable</CODE> but not to <CODE>input_seekable</CODE></TD>
+        <TD>returns <CODE>t.seek(off, way)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <CODE>dual_seekable</CODE> or to <CODE>bidirectional_seekable</CODE></TD>
+        <TD>returns <CODE>t.seek(off, way, which)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <CODE>seekable</CODE></TD>
+        <TD>returns <CODE>t.seek(off, way)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>otherwise</I></TD>
+        <TD>compile-time error</TD>
+    </TR>
+</TABLE>
+
+<P>In short:
+<UL>
+    <LI CLASS="square">If <CODE>T</CODE> is a standard stream or stream buffer type, delegates to <CODE>std::basic_streambuf::pubseekoff</CODE> or <CODE>std::basic_streambuf::pubseekpos</CODE>, as appropriate.
+    <LI CLASS="square">Otherwise, if the <A HREF="../guide/modes.html">mode</A> of <CODE>T</CODE> allows only one reading head, delegates to a member function <CODE>seek</CODE> which takes a <CODE>stream_offset</CODE> and a <CODE>seekdir</CODE> but no <CODE>openmode</CODE>.
+    <LI CLASS="square">Otherwise, if the <A HREF="../guide/modes.html">mode</A> of <CODE>T</CODE> allows random access with two reading heads, delegates to a member function <CODE>seek</CODE> which takes a <CODE>stream_offset</CODE>, a <CODE>seekdir</CODE> and an <CODE>openmode</CODE>.
+    <LI CLASS="square">If the <A HREF="../guide/modes.html">mode</A> of T does not permit random access, attempting to invoke <CODE>seek</CODE> is a compile-time error.
+</UL>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/slice.html b/vendor/pdalboost/libs/iostreams/doc/functions/slice.html
new file mode 100644
index 0000000..eda1c3c
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/slice.html
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Function Template slice</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>slice</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    Alias of <a href="restrict.html"><code>restrict</code></a>, useful on platforms that treat <code>restrict</code> as a keyword.
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/tee.html b/vendor/pdalboost/libs/iostreams/doc/functions/tee.html
new file mode 100644
index 0000000..76e3be6
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/tee.html
@@ -0,0 +1,194 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Function Template tee</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>tee</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#description">Description</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="description"></A>
+<H2>Description</H2>
+
+<P>
+    The class templates <CODE>tee_filter</CODE> and <CODE>tee_device</CODE> provide two ways to split an output sequence so that all data is directed simultaneously to two different locations. A <CODE>tee_filter</CODE> is an <A HREF="../concepts/output_filter.html">OutputFilter</A> which copies all data to a <A HREF="../concepts/sink.html">Sink</A> specified at construction in addition to passing it downstream unmodified.  A <CODE>tee_device</CODE> is a <A HREF="../concepts/sink.html">Si [...]
+</P>
+
+<P>
+    The overloaded function template <A HREF='#tee'><CODE>tee</CODE></A> is an <A HREF='http://www.boost.org/more/generic_programming.html#object_generator' TARGET='_top'>object generator</A> which given a Sink or a pair of Sinks returns an appropriate specialization of <CODE>tee_filter</CODE> or <CODE>tee_device</CODE>.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/tee.hpp"><CODE><boost/iostreams/tee.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> <A CLASS='documented' HREF='#tee_filter_template_params'>Sink</A>>
+<SPAN CLASS='keyword'>class</SPAN> <A CLASS='documented' HREF='#tee_filter'>tee_filter</A> {
+<SPAN CLASS='keyword'>public:</SPAN>
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>typename</SPAN> char_type_of<Sink>::type  char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>           category;
+
+    <SPAN CLASS='keyword'>explicit</SPAN> <A CLASS='documented' HREF='#tee_filter_ctor'>tee_filter</A>([<SPAN CLASS='keyword'>const</SPAN>] Sink& snk);
+
+    <SPAN CLASS='comment'>// OutputFilter member functions</SPAN>
+};
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> <A CLASS='documented' HREF='#tee_device_template_params'>Sink1</A>, <SPAN CLASS='keyword'>typename</SPAN> <A CLASS='documented' HREF='#tee_device_template_params'>Sink2</A>>
+<SPAN CLASS='keyword'>class</SPAN> <A CLASS='documented' HREF='#tee_device'>tee_device</A> {
+<SPAN CLASS='keyword'>public:</SPAN>
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>typename</SPAN> char_type_of<Sink1>::type  char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='omitted'>[implementation-defined]</SPAN>            category;
+
+    <A CLASS='documented' HREF='#tee_device_ctor'>tee_device</A>([<SPAN CLASS='keyword'>const</SPAN>] <SPAN CLASS='keyword'>const</SPAN>& sink1, [<SPAN CLASS='keyword'>const</SPAN>] Sink2& sink2);
+
+    <SPAN CLASS='comment'>// Sink member functions</SPAN>
+};
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> <A CLASS='documented' HREF='#tee_unary_template_params'>Sink</A>>
+<A CLASS='documented' HREF='#tee_filter'>tee_filter</A><Sink> <A CLASS='documented' HREF='#tee_unary'>tee</A>([<SPAN CLASS='keyword'>const</SPAN>] Sink& snk);
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> <A CLASS='documented' HREF='#tee_binary_template_params'>Sink1</A>, <SPAN CLASS='keyword'>typename</SPAN> <A CLASS='documented' HREF='#tee_binary_template_params'>Sink2</A>>
+<A CLASS='documented' HREF='#tee_device'>tee_device</A><Sink1, Sink2> <A CLASS='documented' HREF='#tee_binary'>tee</A>([<SPAN CLASS='keyword'>const</SPAN>] Sink1& sink1, [<SPAN CLASS='keyword'>const</SPAN>] Sink2& sink2);
+
+
+} } // End namespace boost::io</PRE>
+
+<A NAME="tee_filter"></A>
+<H2>Class Template <CODE>tee_filter</CODE></H2>
+
+<H4>Description</H4>
+
+<P>An <A HREF='../concepts/output_filter.html'>OutputFilter</A> which copies all data which passes through it to a <A HREF='../concepts/sink.html'>Sink</A> specified at construction. A <CODE>tee_filter</CODE> is <A HREF='../concepts/closable.html'>Closable</A>, <A HREF='../concepts/flushable.html'>Flushable</A>, <A HREF='../concepts/localizable.html'>Localizable</A> and <A HREF='../concepts/optimally_buffered.html'>OptimallyBuffered</A>.</P> 
+
+<A NAME="tee_filter_template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Sink</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF='../concepts/blocking.html'>Blocking</A> <A HREF='../concepts/sink.html'>Sink</A></TD>
+    </TR>
+</TABLE>
+
+<A NAME="tee_filter_ctor"></A>
+<H4><CODE>tee_filter::tee_filter</CODE></H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='keyword'>explicit</SPAN> tee_filter([<SPAN CLASS='keyword'>const</SPAN>] Sink& sink);</PRE>
+
+<P>
+    Constructs an instance of <CODE>tee_filter</CODE> based on the given Sink. The function parameter is a non-<CODE>const</CODE> reference if <CODE>Sink</CODE> is a stream or stream buffer type, and a <CODE>const</CODE> reference otherwise.
+</P>
+
+<A NAME="tee_device"></A>
+<H2>Class Template <CODE>tee_device</CODE></H2>
+
+<H4>Description</H4>
+
+<P>A <A HREF='../concepts/sink.html'>Sink</A> which copies all data to each of two Sinks specified at construction. A <CODE>tee_device</CODE> is <A HREF='../concepts/closable.html'>Closable</A>, <A HREF='../concepts/flushable.html'>Flushable</A>, <A HREF='../concepts/localizable.html'>Localizable</A> and <A HREF='../concepts/optimally_buffered.html'>OptimallyBuffered</A>.</P> 
+
+<A NAME="tee_device_template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Sink1</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF='../concepts/blocking.html'>Blocking</A> <A HREF='../concepts/sink.html'>Sink</A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Sink2</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF='../concepts/blocking.html'>Blocking</A> <A HREF='../concepts/sink.html'>Sink</A> with the same <A HREF='../guide/traits.html#char_type'>character type</A> as <I>Sink1</I></TD>
+    </TR>
+</TABLE>
+
+<A NAME="tee_device_ctor"></A>
+<H4><CODE>tee_device::tee_device</CODE></H4>
+
+<PRE CLASS="broken_ie">tee_device([<SPAN CLASS='keyword'>const</SPAN>] <SPAN CLASS='keyword'>const</SPAN>& sink1, [<SPAN CLASS='keyword'>const</SPAN>] Sink2& sink2);</PRE>
+
+<P>
+    Constructs an instance of <CODE>tee_device</CODE> based on the given pair of Sinks. Each function parameter is a non-<CODE>const</CODE> reference if the corresponding template argument is a stream or stream buffer type, and a <CODE>const</CODE> reference otherwise.
+</P>
+
+<A NAME="tee"></A>
+<A NAME="tee_unary"></A>
+<H2>Function Template <CODE>tee</CODE></H2>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> Sink>
+tee_filter<Sink> tee([<SPAN CLASS='keyword'>const</SPAN>] Sink& snk);</PRE>
+
+<A NAME="tee_unary_template_params"></A>
+<H4>Template parameters</H4>
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Sink</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF='../concepts/blocking.html'>Blocking</A> <A HREF='../concepts/sink.html'>Sink</A></TD>
+    </TR>
+</TABLE>
+
+<P>
+    Constructs an instance of an appropriate specialization of <CODE>tee_filter</CODE> based on the given Sink. The function parameter is a non-<CODE>const</CODE> reference if <CODE>Sink</CODE> is a stream or stream buffer type, and a <CODE>const</CODE> reference otherwise.
+</P>
+
+<A NAME="tee_binary"></A>
+<PRE CLASS="broken_ie"><SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> Sink1, <SPAN CLASS='keyword'>typename</SPAN> Sink2>
+tee_device<Sink1, Sink2> tee([<SPAN CLASS='keyword'>const</SPAN>] Sink1& sink1, [<SPAN CLASS='keyword'>const</SPAN>] Sink2& sink2);</PRE>
+
+<A NAME="tee_binary_template_params"></A>
+<H4>Template parameters</H4>
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>Sink1</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF='../concepts/blocking.html'>Blocking</A> <A HREF='../concepts/sink.html'>Sink</A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Sink2</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF='../concepts/blocking.html'>Blocking</A> <A HREF='../concepts/sink.html'>Sink</A></TD>
+    </TR>
+</TABLE>
+
+<P>
+    Constructs an instance of an appropriate specialization of <CODE>tee_device</CODE> based on the given pair of Sinks. Each function parameter is a non-<CODE>const</CODE> reference if the corresponding template argument is a stream or stream buffer type, and a <CODE>const</CODE> reference otherwise.
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/functions/write.html b/vendor/pdalboost/libs/iostreams/doc/functions/write.html
new file mode 100644
index 0000000..90b1ae6
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/functions/write.html
@@ -0,0 +1,203 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Function Template write</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Function Template <CODE>write</CODE></H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#example">Example</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The two overloads of the function template <CODE>write</CODE> provide a uniform interface for writing a sequence of characters to a <A HREF="../concepts/source.html">Sink</A> or <A HREF="../concepts/output_filter.html">OutputFilter</A>. 
+    <UL>
+        <LI>The first overload can be used directly in the definitions of new Filter types (<I>see</I> <A HREF="#example">Example</A>), and figures in the specification of the <A HREF="../guide/concepts.html#device_concepts">Device</A> concepts.
+        <LI>The second overload is primarily for internal use by the library.
+    </UL>
+</P>
+
+<A NAME="example"></A>
+<H2>Example</H2>
+
+<P>
+    The following code illustrates the use of the function <CODE>write</CODE> in the definition of an <A HREF="../concepts/output_filter.html">OutputFilter</A> which reverses its controlled sequence.
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><algorithm></SPAN>                      <SPAN CLASS="comment">// reverse</SPAN> 
+    <SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><vector></SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/concepts.hpp></SPAN></A>   <SPAN CLASS="comment">// output_filter</SPAN> 
+    <SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A> <SPAN CLASS="comment">// write</SPAN>
+
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> boost::io;
+
+    <SPAN CLASS="keyword">struct</SPAN> reversing_filter : <SPAN CLASS="keyword">public</SPAN> multichar_output_filter {
+        <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+        std::streamsize write(Sink& snk, <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">char</SPAN>* s, streamsize n)
+        {
+            data.insert(data.end(), s, s + n);
+            <SPAN CLASS="keyword">return</SPAN> n;
+        }
+        <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+        <SPAN CLASS="keyword">void</SPAN> close(Sink& snk)
+        {
+            std::reverse(data.begin(), data.end());
+            boost::iostreams::write(&data[0], (streamsize) data.size());
+            data.clear();
+        }
+        std::vector<<SPAN CLASS="keyword">char</SPAN>> data;
+    };</PRE>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><CODE><boost/iostreams/operations.hpp></CODE></A></DT>
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/write.hpp"><CODE><boost/iostreams/write.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="description"></A>
+<H4>Description</H4>
+
+<P>Attempts to write a sequence of characters to a given instance of the template parameter <CODE>T</CODE>, returning the number of characters written.</P>
+
+<A NAME="synopsis"></A>
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+              
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">T</A>>     
+std::streamsize 
+<A CLASS="documented" HREF="#write_device">write</A>( T& <A CLASS="documented" HREF="#function_params">t</A>,
+       <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="../guide/traits.html#char_type_of_ref">char_type_of</A><T>::type* <A CLASS="documented" HREF="#function_params">s</A>, 
+       std::streamsize <A CLASS="documented" HREF="#function_params">n</A> );
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">T</A>, <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#template_params">Sink</A>>
+std::streamsize 
+<A CLASS="documented" HREF="#write_filter">write</A>( T& <A CLASS="documented" HREF="#function_params">t</A>,
+       Sink& <A CLASS="documented" HREF="#function_params">snk</A>,
+       <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="../guide/traits.html#char_type_of_ref">char_type_of</A><T>::type* <A CLASS="documented" HREF="#function_params">s</A>, 
+       std::streamsize <A CLASS="documented" HREF="#function_params">n</A> );
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="template_params"></A>
+<H4>Template Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>For the first overload, a model of <A HREF="../concepts/sink.html">Sink</A>. For the second overload, a model of <A HREF="../concepts/output_filter.html">OutputFilter</A>.
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Sink</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of <A HREF="../concepts/sink.html">Sink</A> with the same <A HREF="../guide/traits.html#char_type">character type</A> as <CODE>T</CODE> whose <A HREF="../guide/modes.html">mode</A> refines that of <CODE>T</CODE>.
+    </TR>
+</TABLE>
+
+<A NAME="function_params"></A>
+<H4>Function Parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>t</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>An instance of T</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>s</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A buffer containing characters to write</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>n</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The number of characters to write</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>snk</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>An instance of <CODE>Sink</CODE>.
+    </TR>
+</TABLE>
+
+<A NAME="write_device"></A>
+<H4>Semantics — Device Types</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T>     
+std::streamsize
+write( T& t,
+       <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">typename</SPAN> char_type_of<T>::type* s,
+       std::streamsize n );</PRE>
+
+<P>The semantics of <CODE>write</CODE> depends on the <A HREF="../guide/traits.html#category">category</A> of <CODE>T</CODE> as follows:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>category_of<T>::type</CODE></TH><TH>semantics</TH></TR>
+    <TR>
+        <TD VALIGN="top">convertible to <CODE>ostream_tag</CODE></TD>
+        <TD>returns <CODE>t.rdbuf()->sputn(s, n)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">convertible to <CODE>streambuf_tag</CODE> but not to <CODE>ostream_tag</CODE></TD>
+        <TD>returns <CODE>t.sputn(s, n)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">otherwise</TD>
+        <TD>returns <CODE>t.write(s, n)</CODE></TD>
+    </TR>
+</TABLE>
+
+<A NAME="write_filter"></A>
+<H4>Semantics — Filter Types</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> T, <SPAN CLASS="keyword">typename</SPAN> Sink>
+std::streamsize
+write( T& t,
+       Sink& snk,
+       <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword">typename</SPAN> char_type_of<T>::type* s,
+       std::streamsize n );</PRE>
+
+<P>The semantics of <CODE>write</CODE> depends on the <A HREF="../guide/traits.html#category">category</A> of <CODE>T</CODE> as follows:</P>
+
+<TABLE STYLE="margin:0,0,2em,2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>category_of<T>::type</CODE></TH><TH>semantics</TH></TR>
+    <TR>
+        <TD VALIGN="top">convertible to <CODE>multichar_tag</CODE></TD>
+        <TD>returns <CODE>t.write(snk, s, n)</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>otherwise</I></TD>
+        <TD>Attempts to write <CODE>n</CODE> characters from <CODE>s</CODE> by invoking <CODE>t.put(snk, s[m])</CODE> for each value <CODE>m</CODE> in the interval <CODE>[0, n)</CODE>, halting if <CODE>put</CODE> returns <CODE>false</CODE>. Returns the number of characters written.</TD>
+    </TR>
+</TABLE>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/graphics/bidirectional_chain.gif b/vendor/pdalboost/libs/iostreams/doc/graphics/bidirectional_chain.gif
new file mode 100755
index 0000000..3b35a0a
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/graphics/bidirectional_chain.gif differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/graphics/important_modes.gif b/vendor/pdalboost/libs/iostreams/doc/graphics/important_modes.gif
new file mode 100755
index 0000000..66b0d4b
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/graphics/important_modes.gif differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/graphics/input_chain.gif b/vendor/pdalboost/libs/iostreams/doc/graphics/input_chain.gif
new file mode 100755
index 0000000..2f2db37
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/graphics/input_chain.gif differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/graphics/key_bidirectional_seq.gif b/vendor/pdalboost/libs/iostreams/doc/graphics/key_bidirectional_seq.gif
new file mode 100755
index 0000000..574de5b
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/graphics/key_bidirectional_seq.gif differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/graphics/key_important.gif b/vendor/pdalboost/libs/iostreams/doc/graphics/key_important.gif
new file mode 100755
index 0000000..6c1e0f4
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/graphics/key_important.gif differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/graphics/key_input_seq.gif b/vendor/pdalboost/libs/iostreams/doc/graphics/key_input_seq.gif
new file mode 100755
index 0000000..745f45e
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/graphics/key_input_seq.gif differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/graphics/key_output_seq.gif b/vendor/pdalboost/libs/iostreams/doc/graphics/key_output_seq.gif
new file mode 100755
index 0000000..f2d9a9b
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/graphics/key_output_seq.gif differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/graphics/key_read_head.gif b/vendor/pdalboost/libs/iostreams/doc/graphics/key_read_head.gif
new file mode 100755
index 0000000..be8a8f8
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/graphics/key_read_head.gif differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/graphics/key_read_write_head.gif b/vendor/pdalboost/libs/iostreams/doc/graphics/key_read_write_head.gif
new file mode 100755
index 0000000..5c1f402
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/graphics/key_read_write_head.gif differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/graphics/key_write_head.gif b/vendor/pdalboost/libs/iostreams/doc/graphics/key_write_head.gif
new file mode 100755
index 0000000..76ef3a9
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/graphics/key_write_head.gif differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/graphics/modes.gif b/vendor/pdalboost/libs/iostreams/doc/graphics/modes.gif
new file mode 100755
index 0000000..85e9c83
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/graphics/modes.gif differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/graphics/output_chain.gif b/vendor/pdalboost/libs/iostreams/doc/graphics/output_chain.gif
new file mode 100755
index 0000000..f7ac2f4
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/graphics/output_chain.gif differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/graphics/seekable_chain.gif b/vendor/pdalboost/libs/iostreams/doc/graphics/seekable_chain.gif
new file mode 100755
index 0000000..a66a637
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/graphics/seekable_chain.gif differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/guide/asynchronous.html b/vendor/pdalboost/libs/iostreams/doc/guide/asynchronous.html
new file mode 100644
index 0000000..3da04dd
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/guide/asynchronous.html
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Pipelines</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">User's Guide</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+     <A HREF='code_conversion.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='guide.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='lifetimes.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<H2>3.6 Asynchronous and Non-Blocking I/O</H2>
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#devices">Devices</A></DT>
+  <DT><A href="#filters">Filters</A></DT>
+  <DT><A href="#streams">Streams and Stream Buffers</A></DT>
+</DL>
+
+<HR STYLE="margin-top:1em">
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The <A HREF="../concepts/filter.html">Filter</A> and <A HREF="../concepts/device.html">Device</A> concepts provided by Boost.Iostreams have been designed to allow a future version of Boost.Iostreams to support asynchronous and non-blocking i/o. This has been accomplished by providing the functions <A HREF="../functions/get.html"><CODE>get</CODE></A>, <A HREF="../functions/read.html"><CODE>read</CODE></A>, <A HREF="../functions/put.html"><CODE>put</CODE></A> and <A HREF="../functions/ [...]
+    
+    The main challenge was presented by the function <A HREF="../functions/get.html"><CODE>get</CODE></A>: to allow <CODE>get</CODE> to indicate that input is temporarily unavailable, it was necessary to introduce the class template <A HREF="../classes/char_traits.html"><CODE>boost::iostreams::char_traits</CODE></A>, a replacement for <CODE>std::char_traits</CODE> having an additional member function <A HREF="../classes/char_traits.html#would_block"><CODE>would_block</CODE></A>.
+</P>
+<P>For full details, see the definitions of the <A HREF="../concepts/filter.html">Filter</A> and <A HREF="../concepts/device.html">Device</A> concepts.</P>
+
+<A NAME="devices"></A>
+<H2>Devices</H2>
+
+<P>
+    The current Device concepts can handle non-blocking i/o but not asynchronous i/o; additional Device concepts will be required for full support of asynchronous i/o. This is to be expected, since synchronous and asynychronous Devices operate very differently. <I>See</I> <A HREF="../concepts/blocking.html">Blocking</A>.
+</P>
+
+<A NAME="filters"></A>
+<H2>Filters</H2>
+
+<P>
+    Filters are allowed to propagate temporary failure notifications: if a downstream Device consumes or produces fewer characters than requested by a Filter, and if as a result the Filter is not able to satisfy a read or write request, the Filter may return a value indicating that input or output is temporarily unavailable. It is hoped that this ability will suffice to allow the current Filter concepts to be used with both aynchronous and non-blocking i/o. However, in order to be useful [...]
+</P>
+
+<A NAME="streams"></A>
+<H2>Streams and Stream Buffers</H2>
+
+<P>
+    Although the Boost.Iostreams Filter and Device concepts can accommodate non-blocking i/o, the C++ standard library stream and stream buffer interfaces cannot, since they lack a means to distinguish between temporary and permanent failures to satisfy a read or write request. As a result, non-blocking Devices do not work properly with the templates <A HREF="generic_streams.html#stream"><CODE>stream</CODE></A>, <A HREF="generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A>, [...]
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/guide/buffering.html b/vendor/pdalboost/libs/iostreams/doc/guide/buffering.html
new file mode 100644
index 0000000..7b846e0
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/guide/buffering.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Buffering</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">User's Guide</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+     <A HREF='exceptions.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='guide.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next_disabled.png'>
+</DIV>
+
+<!-- End Nav -->
+
+<A NAME="overview"></A>
+<H2>3.11 Buffering</H2>
+
+<HR STYLE="margin-top:1em">
+
+<P>
+[To be supplied in the next release]
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/guide/code_conversion.html b/vendor/pdalboost/libs/iostreams/doc/guide/code_conversion.html
new file mode 100644
index 0000000..782d3ac
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/guide/code_conversion.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Code Conversion</TITLE>
+    <LINK REL="stylesheet" href="../../../../boost.css">
+    <LINK REL="stylesheet" href="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">User's Guide</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+     <A HREF='filtering_streams.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='guide.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='asynchronous.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<A NAME="overview"></A>
+<H2>3.5 Code Conversion</H2>
+
+<HR STYLE="margin-top:1em">
+
+<P>
+    The process of converting between a sequence of wide characters and a sequence of narrow characters is known as <SPAN CLASS='term'>code conversion</SPAN>. The C++ standard library defines a locale facet <CODE>std::codecvt</CODE> that encapulates code conversion. The class template <CODE>codecvt</CODE> has three template parameters, representing an <SPAN CLASS='term'>internal character type</SPAN>, an <SPAN CLASS='term'>external character type</SPAN> and a type to store a <SPAN CLASS= [...]
+</P>
+
+<P>
+    Streams and stream buffers do not perform code conversion by default. Of the streams and stream buffers defined in the C++ standard library, only the file-based streams perform code conversion. To write a stream or stream buffer that performs code conversion, use the class template <A HREF="../classes/code_converter.html"><CODE>code_converter</CODE></A>, which performs code conversion using a <CODE>std::codecvt</CODE> facet.
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/guide/concepts.html b/vendor/pdalboost/libs/iostreams/doc/guide/concepts.html
new file mode 100644
index 0000000..c94be54
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/guide/concepts.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Concepts</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">User's Guide</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev_disabled.png'>
+    <A HREF='guide.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='modes.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<A NAME="overview"></A>
+<H2>3.1 Concepts</H2>
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#device_concepts">Device Concepts</A></DT>
+  <DT><A href="#filter_concepts">Filter Concepts</A></DT>
+  <DT><A href="#optional_behavior">Optional Behavior</A></DT>
+  <DT><A href="#convenience">Convenience Templates and <CODE>typedef</CODE>s</A></DT>
+</DL>
+
+<HR STYLE="margin-top:1em">
+
+<P>
+    The fundamental building blocks of the Iostreams library are the concepts of a <A HREF="../concepts/source.html">Source</A>, which provides read access to a sequence of characters, a <A HREF="../concepts/sink.html">Sink</A>, which provides write access to a sequence of characters, an <A HREF="../concepts/input_filter.html">InputFilter</A>, which Filters input read from a Source, and an <A HREF="../concepts/output_filter.html">OutputFilter</A>, which Filters output written to a Sink.  [...]
+</P>
+<P>
+    Standard streams and stream buffers are Devices; for example, input streams are <A HREF="../concepts/source.html">Sources</A> and output streams are <A HREF="../concepts/sink.html">Sinks</A>.<A CLASS="footnote_ref" NAME="note_1_ref" HREF="#note_1"><SUP>[1]</SUP></A>
+</P>
+<P>
+    In general, a Filter or Device may provide access to an <SPAN>input sequence</SPAN>, for reading, an <SPAN>output sequence</SPAN>, for writing, or both. The relationship between the two sequences, as well as the operations that may be performed on them, depends on the Filter or Device type. The various possible relationships between input and output are referred to as <A HREF="modes.html">modes</A>.<SUP><A CLASS="footnote_ref" NAME="note_2_ref" HREF="#note_2">[2]</A></SUP> The Iostre [...]
+</P>
+<P>
+    The most common Device and Filter concepts are documented individually. Readers new to the Iostreams library should familiarize themselves with the four central concepts <A HREF="../concepts/source.html">Source</A>, <A HREF="../concepts/sink.html">Sink</A>, <A HREF="../concepts/input_filter.html">InputFilter</A> and <A HREF="../concepts/output_filter.html">OutputFilter</A>. The full sets of requirements for the Filter and Device concepts are summarized in the definitions of the conce [...]
+</P>
+<P>
+    To ease the task of defining new Filter and Device types, the Iostreams library provides a number of <A HREF="#convenience">convenience templates and <CODE>typedef</CODE>s</A>.
+</P>
+
+<A NAME="device_concepts"></A>
+<H2>Device Concepts</H2>
+
+<P>The most important Device concepts are these:</P>
+
+<UL>
+    <LI><A STYLE="font-weight:normal" HREF="../concepts/device.html">Device:</A> Base for all Device concepts, provides associated character type and category.
+    <LI><A STYLE="font-weight:normal" HREF="../concepts/source.html">Source:</A> Provides read-only access to a sequence of characters.
+    <LI><A STYLE="font-weight:normal" HREF="../concepts/sink.html">Sink:</A> Provides write-only access to a sequence of characters.
+    <LI><A STYLE="font-weight:normal" HREF="../concepts/bidirectional_device.html">BidirectionalDevice:</A> Provides access to two separate sequences of characters, one for reading and the other for writing.
+    <LI><A STYLE="font-weight:normal" HREF="../concepts/seekable_device.html">SeekableDevice:</A> Provides read-write access to a single sequence of characters, with a single repositionable read/write head. 
+</UL>
+
+<A NAME="filter_concepts"></A>
+<H2>Filter Concepts</H2>
+
+<P>The most important Filter concepts are these:</P>
+
+<UL>
+    <LI><A STYLE="font-weight:normal" HREF="../concepts/filter.html">Filter:</A> Base for all Filter concepts, provides associated character type and category.
+    <LI><A HREF="../concepts/input_filter.html">InputFilter:</A> Filters characters read from a Source.
+    <LI><A HREF="../concepts/output_filter.html">OutputFilter:</A> Filters characters written to a Sink
+    <LI><A HREF="../concepts/bidirectional_filter.html">BidirectionalFilter:</A> Filters two separate character sequences, one read from a Sink and the other written to a Sink.
+    <LI><A HREF="../concepts/seekable_filter.html">SeekableFilter:</A> Filters a single characters sequence, controlled by a SeekableDevice, 
+    providing filtered input, output and random access with a single repositionable read/write head
+</UL>
+
+<A NAME="optional_behavior"></A>
+<H2>Optional Behavior</H2>
+
+<P>Boost.Iostreams prvides several concepts corresponding to optional behavior that a Filter or Device might implement:</P>
+
+<UL>
+    <LI><A HREF="../concepts/blocking.html">Blocking:</A> A Device which blocks when it receives a read or write request until all requested characters are available, or until the end of a stream is reached.
+    <LI><A HREF="../concepts/direct.html">Direct:</A> A Device which provides access to its controlled sequences as regions of memory rather than <I>via</I> a socket-like interface.
+    <LI><A HREF="../concepts/closable.html">Closable:</A> A Filter or Device which receives notifications immediately before a stream is closed.
+    <LI><A HREF="../concepts/flushable.html">Flushable</A> A Filter or Device which receives notifications when a stream is flushed.
+    <LI><A HREF="../concepts/localizable.html">Localizable:</A>  A Filter or Device which receives notifications when the <CODE>locale</CODE> of a stream or stream buffer is set using <CODE>basic_ios::imbue</CODE> or <CODE>basic_streambuf::pubimbue</CODE>.
+    <LI><A HREF="../concepts/multi_character.html">Multi-Character:</A> A Filter which provides access to its controlled sequences several characters at a time, <I>via</I> a socket-like interface.
+    <LI><A HREF="../concepts/optimally_buffered.html">OptimallyBuffered</A> A Filter or Device which will be fitted with a buffer of custom size if no buffer size is explicitly requested by the user.
+    <LI><A HREF="../concepts/peekable.html">Peekable:</A> A source which allows characters to be put back to the input sequence.
+    <LI><A HREF="../concepts/pipable.html">Pipable:</A> A Filter which can appear in <A HREF="pipelines.html">pipelines</A>.
+</UL>
+
+<A NAME="convenience"></A>
+<H2>Convenience Templates and <CODE>typedef</CODE>s</H2>
+
+<P>
+    The Iostreams library provides several templates intended for derivation by user-defined Filter and Device types. They ease the task of defining Filters and Devices by providing member types and default implementations of several member functions.
+</P>
+
+<P>
+    The template <A href="../classes/device.html"><CODE>device</CODE></A> and its specializations <A HREF="../classes/device.html#synopsis"><CODE>source</CODE></A> and <A HREF="../classes/device.html#synopsis"><CODE>sink</CODE></A> help users define new Device types; the template <A href="../classes/filter.html"><CODE>filter</CODE></A> and its specializations <A HREF="../classes/filter.html#synopsis"><CODE>input_filter</CODE></A> and <A HREF="../classes/filter.html#synopsis"><CODE>output [...]
+</P>
+
+<!-- Begin Footnotes -->
+
+<HR>
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_1" HREF="#note_1_ref"><SUP>[1]</SUP></A>For complete details, see <A HREF="../classes/mode.html"><CODE>mode_of</CODE></A>.
+</P>
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_2" HREF="#note_2_ref"><SUP>[2]</SUP></A>A more precise definition is given in <A HREF="modes.html">Modes</A>.
+</P>
+
+<!-- End Footnotes -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/guide/exceptions.html b/vendor/pdalboost/libs/iostreams/doc/guide/exceptions.html
new file mode 100644
index 0000000..fac94ef
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/guide/exceptions.html
@@ -0,0 +1,156 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Exceptions</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+    <STYLE> 
+        OL LI { list-style-image:none; list-style-type: decimal } 
+        OL LI LI { list-style-image:none; list-style-type: lower-alpha } 
+     </STYLE>
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">User's Guide</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+     <A HREF='views.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='guide.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='buffering.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<A NAME="overview"></A>
+<H2>3.10 Exceptions</H2>
+
+<DL class="page-index">
+  <DT><A href="#standard_iostreams">The Standard Iostreams library</A></DT>
+  <DT><A href="#boost_iostreams">The Boost Iostreams library</A></DT>
+  <DT><A href="#safety">Exception Safety</A></DT>
+  <DT><A href="#acknowledgments">Acknowledgments</A></DT>
+</DL>
+
+<HR STYLE="margin-top:1em">
+
+<A NAME="standard_iostreams"></A>
+<H2>The Standard Iostreams library</H2>
+
+<P>
+    The <CODE>public</CODE> member functions of <CODE>std::basic_streambuf</CODE> which perform i/o — <CODE>sgetn()</CODE>, <CODE>sputn()</CODE>, <CODE>pubsync(), <I>etc.</I> </CODE> — are implemented using the <CODE>protected virtual</CODE> interface of <CODE>std::basic_streambuf</CODE> — <CODE>underflow()</CODE>, <CODE>overflow()</CODE>, <CODE>sync()</CODE>, <I>etc</I>. Most of these <CODE>protected virtual</CODE> functions are allowed to signal failure either by thro [...]
+</P>
+
+<P>
+    Standard streams, by contrast, throw no exceptions by default: users must set the <I>exception mask</I> to request that exceptional conditions be reported using exceptions. If <CODE>ios_base::badbit</CODE> is set in a stream's exception mask, all exceptions thrown by the underlying stream buffer will be caught and rethrown.
+</P>
+
+<P>
+    With streams, therefore, the user has a choice whether to enable exceptions; with stream buffers, the implementor has a choice, but the user has none.
+</P>
+
+<A NAME="boost_iostreams"></A>
+<H2>The Boost Iostreams library</H2>
+
+<H5>Policy</H5>
+
+<P>
+    The fundamental stream buffer template in the Boost Iostreams library, <A HREF="generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A>, implements the <CODE>protected virtual</CODE> memeber functions of <CODE>std::basic_streambuf</CODE> by delegating to the i/o functions <A HREF="../functions/read.html"><CODE>read</CODE></A>, <A HREF="../functions/write.html"><CODE>write</CODE></A>, <A HREF="../functions/put.html"><CODE>put</CODE></A>, <A HREF="../functions/get.html"><COD [...]
+</P>
+
+<P>
+    It is recommended that all exceptions thrown by user-defined Filters and Devices 
+    derive from <CODE>std::ios_base::failure</CODE>.<SUP><A CLASS="footnote_ref" NAME="note_1_ref" HREF="#note_1">[1]</A></SUP>
+</P>
+
+<H5>Rationale</H5>
+
+<P>
+    An alternative formulation would have been to require Filter and Device member functions with return type <CODE>std::streamsize</CODE> to return <CODE>-1</CODE> to indicate errors, and to modify the specification of functions returning <CODE>void</CODE> so that they return a <CODE>bool</CODE> indicating success. The decision to rely on exceptions to report errors was made to allow implementors a means to convey aditional information about the cause of errors, and to free them from ha [...]
+</P>
+
+<P>
+    A third possibility would have been to follow the example of <CODE>std::basic_streambuf</CODE> and allow member functions of Filters and Devices to signal errors either by throwing exceptions or by returning designated error indicators. This was rejected because it would have complicated the specifications of the various <A HREF="concepts.html#filter_concepts">Filter</A> and <A HREF="concepts.html#device_concepts">Device</A> concepts and made the internals of <CODE>stream_buffer</COD [...]
+</P>
+
+<A NAME="safety"></A>
+<H2>Exception Safety</H2>
+
+The Iostreams library aims to provide to following guarantees if an exception is thrown during an i/o operation:
+
+<OL>
+    <LI>Resources are freed by calling destructors or <A HREF="../functions/close.html"><CODE>close</CODE></A>, if appropriate.
+    <LI>
+        The invariants specified by the C++ standard library for streams and stream buffers are maintained. Attempting to perform additional i/o is allowed but may cause further exceptions.
+    </LI>
+    <LI>The invariants specified by the Boost Iostreams library for streams and stream buffers are maintained. Specifically,
+        <OL>
+            <LI>
+                A <A HREF="generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A> or <A HREF="generic_streams.html#stream"><CODE>stream</CODE></A> can be closed and reopened to perform additional i/o with a new instance of the underlying <A HREF="concepts.html#filter_concepts">Filter</A> or <A HREF="concepts.html#device_concepts">Device</A> type.
+            </LI>
+            <LI>
+                A <A HREF="../classes/filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A>'s or <A HREF="../classes/filtering_stream.html"><CODE>filtering_stream</CODE></A>'s chain of Filters and Devices is in a consistent state. If the current Device is removed from the chain and a new one added the user may perform i/o as if the the stream or stream buffer were newly constructed.
+            </LI>
+        </OL> 
+    </LI>
+</OL>
+
+<P>
+    Conditions 2. and 3. rely on the specification of the <A HREF="concepts.html#filter_concepts">Filter</A> and <A HREF="concepts.html#device_concepts">Device</A> concepts. Note that there is <I>no</I> guarantee that a stream's or stream buffer's character sequences are in a consistent state, <I>i.e.</I>, that data has not been corrupted, and no way in general to determine the state of these sequences after an exception.
+</P>
+
+<P>
+    These conditions amount to what is known as the <I>basic guarantee</I> of exception safety (<I>see</I> <A CLASS="bib_ref" HREF="../bibliography.html#abrahams1">[Abrahams1]</A>.)
+</P>
+
+<A NAME="acknowledgments"></A>
+<H2>Acknowledgments</H2>
+
+<P>Thanks to Angelika Langer and John Torjo for discussion of exceptions.</P>
+
+<!-- Begin Footnotes -->
+
+<HR>
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_1" HREF="#note_1_ref"><SUP>[1]</SUP></A>The C++ standard describes <CODE>std::ios_base::failure</CODE> as "the base class for the types of all objects thrown as exceptions, by functions in the Iostreams library, to report errors detected during stream buffer operations." (<A CLASS="bib_ref" HREF="../bibliography.html#iso">[ISO]</A>, section 27.4.2.1.1.) There is a difference of opinion among commentators whether this means that <I>all</I> exceptions [...]
+</P>
+
+<P>
+    A leading text on C++ iostreams interprets the language in the standard to mean that exceptions "may be of any type" but that "if the exception is rasied due to an error situation <I>discovered by any of the IOStreams operations</I>, it is of the type <CODE>failure</CODE>" (<A CLASS="bib_ref" HREF="../bibliography.html#langer">[Langer]</A>, p. 36, emphasis added). As an example, the authors state that a <CODE>std::bad_alloc</CODE> generated during buffer allocation need not be caught [...]
+</P>
+
+<P>
+    Another leading text, however, takes the view that <I>all</I> exceptions must derive 
+    from <CODE>failure</CODE>. (<A CLASS="bib_ref" HREF="../bibliography.html#josuttis1">[Josuttis1]</A>, p. 602.) 
+</P>
+<P>
+    The Iostreams library takes a neutral position on this matter: all exceptions thrown
+    internally by the library are of type <CODE>failure</CODE> or a derived class, but exceptions
+    thrown by user-defined types are propogated <I>as-is</I>. 
+</P>
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_2" HREF="#note_2_ref"><SUP>[2]</SUP></A>As Herb Sutter writes, "it is always poor design to allow an operation to report the same error in two different ways....It complicates the interface and the semantics. And it makes the caller's life harder because the caller must be able to handle both flavors of error reporting." (<A CLASS="bib_ref" HREF="../bibliography.html#sutter">[Sutter]</A>, p. 130.)
+</P>
+
+<!-- End Footnotes -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/guide/filtering_streams.html b/vendor/pdalboost/libs/iostreams/doc/guide/filtering_streams.html
new file mode 100644
index 0000000..617c3b8
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/guide/filtering_streams.html
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Filtering Streams and Stream Buffers</TITLE>
+    <LINK REL="stylesheet" href="../../../../boost.css">
+    <LINK REL="stylesheet" href="../theme/iostreams.css">
+    <STYLE>
+        .caption_code { font: bold 8pt monospace }
+    </STYLE>
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">User's Guide</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+     <A HREF='generic_streams.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='guide.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='code_conversion.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<A NAME="overview"></A>
+<H2>3.4 Filtering Streams and Stream Buffers</H2>
+
+<HR STYLE="margin-top:1em">
+
+<P>
+    The class templates <A href="../classes/filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A> and <A href="../classes/filtering_stream.html"><CODE>filtering_stream</CODE></A> are the fundamental components provided by the Iostreams library for filtering data. Each <CODE>filtering_streambuf</CODE> or <CODE>filtering_stream</CODE> contains a chain of zero or more <A HREF="../concepts/filter.html">Filters</A> followed by an optional <A HREF="../concepts/device.html">Device</A>, [...]
+</P>
+<P>
+    The <A HREF="modes.html">mode</A> of each <CODE>stream_buffer</CODE> in the chain must refine the mode of the <CODE>filtering_streambuf</CODE> or <CODE>filtering_stream</CODE>. For example, one cannot use a Filter or Device having mode <A HREF="modes.html#output">output</A> with a <CODE>filtering_streambuf</CODE> having mode <A HREF="modes.html#input">input</A>.
+</P>
+<P>
+    If a <CODE>filtering_streambuf</CODE> or <CODE>filtering_stream</CODE> has mode <A HREF="modes.html#input">input</A>, data flows from the chain's end to its beginning — starting at a <A href="../concepts/source.html">Source</A> and passing through zero or more <A href="../concepts/input_filter.html">InputFilters</A>. If it has mode <A HREF="modes.html#output">output</A>, data flows in the opposite direction — from the beginning of the chain, through zero or more <A href=" [...]
+
+<!-- Begin Footer -->
+
+<HR STYLE="margin-top:1em">
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/guide/generic_streams.html b/vendor/pdalboost/libs/iostreams/doc/guide/generic_streams.html
new file mode 100644
index 0000000..b66174f
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/guide/generic_streams.html
@@ -0,0 +1,530 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Generic Streams and Stream Buffers</TITLE>
+    <LINK REL="stylesheet" href="../../../../boost.css">
+    <LINK REL="stylesheet" href="../theme/iostreams.css">
+    <STYLE>PRE { font-size: 80% }</STYLE>
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">User's Guide</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+     <A HREF='modes.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='guide.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='filtering_streams.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<H2>3.3 Generic Streams and Stream Buffers</H2>
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A>
+    <DL>
+      <DT><A href="#stream_buffer">Class template <CODE>stream_buffer</CODE></A></DT>
+      <DT><A href="#stream">Class template <CODE>stream</CODE></A></DT>
+    </DL>
+  </DT>
+  <DT><A href="#examples">Examples</A></DT>
+</DL>
+
+<HR STYLE="margin-top:1em">
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The fundamental component provided by the Iostreams library is the class template <CODE>stream_buffer</CODE>, a derived class of <CODE>std::basic_streambuf</CODE> which performs i/o by delegating to a contained Device. Instances of the Device can be associated and disassociated with an instance of <CODE>stream_buffer</CODE> using member functions <CODE><A HREF="#stream_buffer_open">open</A></CODE> and <CODE><A HREF="#stream_buffer_close">close</A></CODE>. The interface is patterned a [...]
+</P>
+
+<P>
+    The class template <CODE>stream</CODE> is a stream template which derives from one of <CODE>std::basic_istream</CODE>, <CODE>std::basic_ostream</CODE> and <CODE>std::basic_iostream</CODE> depending on the <A href="modes.html">mode</A> of the first template parameter. As with <CODE>stream_buffer</CODE>, instances of the Device can by associated and disassociated with an instance of <CODE>stream</CODE> using its member functions <CODE><A HREF="#stream_open">open</A></CODE> and <CODE><A [...]
+</P>
+
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" href="../../../../boost/iostreams/stream_buffer.hpp"><CODE><boost/iostreams/stream_buffer.hpp></CODE></A></DT>
+  <DT><A CLASS="header" href="../../../../boost/iostreams/stream.hpp"><CODE><boost/iostreams/stream.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="stream_buffer"></A>
+<H3>Class template <CODE>stream_buffer</CODE></H3>
+
+<H4>Description</H4>
+
+<P>
+    Stream buffer template which performs i/o by delegating to a contained <A HREF="../concepts/device.html">Device</A>. The Device type is specified as the first template parameter to <CODE>stream_buffer</CODE>. Instances of the the Device type are attached and detached using the member functions <A HREF="#stream_buffer_open"><CODE>open</CODE></A> and <A HREF="#stream_buffer_close"><CODE>close</CODE></A>.
+</P>
+
+<H4>Synopsis</H4>
+
+<PRE><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#stream_buffer_params">T</A>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#stream_buffer_params">Tr</A> = std::char_traits<<SPAN CLASS="omitted">...</SPAN>>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#stream_buffer_params">Alloc</A> = std::allocator<<SPAN CLASS="omitted">...</SPAN>>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#stream_buffer_params">Mode</A> = <SPAN CLASS="omitted">...</SPAN> >
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#stream_buffer_params">stream_buffer</A> : <SPAN CLASS="keyword">public</SPAN> std::basic_streambuf<<SPAN CLASS="omitted">...</SPAN>> {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">typename</SPAN> char_type_of<T>::type  char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">typename</SPAN> Tr                     traits_type;
+
+    [<SPAN CLASS="omitted">Standard stream buffer typedefs: int_type, off_type, etc.</SPAN>]
+
+    <A CLASS="documented" HREF="#stream_buffer_default_constructor">stream_buffer</A>();
+    <A CLASS="documented" HREF="#stream_buffer_policy_constructor">stream_buffer</A>( <SPAN CLASS="keyword">const</SPAN> T& t,
+                   std::streamsize buffer_size = <SPAN CLASS="omitted">default_value</SPAN>, 
+                   std::streamsize pback_size = <SPAN CLASS="omitted">default_value</SPAN> );
+
+        <SPAN CLASS="comment">// Forwarding constructors</SPAN>
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U>
+    <A CLASS="documented" HREF="#stream_buffer_forwarding_constructors">stream_buffer</A>([<SPAN CLASS="keyword">const</SPAN>] U& u);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="keyword">typename</SPAN> U2>
+    <A CLASS="documented" HREF="#stream_buffer_forwarding_constructors">stream_buffer</A>([<SPAN CLASS="keyword">const</SPAN>] U1& u1, <SPAN CLASS="keyword">const</SPAN> U2& u2);
+
+        <SPAN CLASS="omitted">...</SPAN>
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">typename</SPAN> UN>
+    <A CLASS="documented" HREF="#stream_buffer_forwarding_constructors">stream_buffer</A>([<SPAN CLASS="keyword">const</SPAN>] U1& u1, <SPAN CLASS="keyword">const</SPAN> U2& u2 <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">const</SPAN> UN& uN);
+
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#stream_buffer_open">open</A>( <SPAN CLASS="keyword">const</SPAN> T& t,
+               std::streamsize buffer_size = <SPAN CLASS="omitted">default_value</SPAN>, 
+               std::streamsize pback_size = <SPAN CLASS="omitted">default_value</SPAN> );
+
+        <SPAN CLASS="comment">// Forwarding overloads of open()</SPAN>
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#stream_buffer_forwarding_open">open</A>([<SPAN CLASS="keyword">const</SPAN>] U& u);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="keyword">typename</SPAN> U2>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#stream_buffer_forwarding_open">open</A>([<SPAN CLASS="keyword">const</SPAN>] U1& u1, <SPAN CLASS="keyword">const</SPAN> U2& u2);
+    
+        <SPAN CLASS="omitted">...</SPAN>
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">typename</SPAN> UN>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#stream_buffer_forwarding_open">open</A>([<SPAN CLASS="keyword">const</SPAN>] U1& u1, <SPAN CLASS="keyword">const</SPAN> U2& u2, <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">const</SPAN> UN& uN);
+
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#stream_buffer_is_open">is_open</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#stream_buffer_close">close</A>();
+
+        <SPAN CLASS="comment">// Device access</SPAN>
+    
+    T& <A CLASS='documented' HREF="#stream_buffer_operator_star"><SPAN CLASS="documented">operator</SPAN>*</A>();
+    T* <A CLASS='documented' HREF="#stream_buffer_operator_arrow"><SPAN CLASS="documented">operator-></SPAN></A>();
+};
+
+} } <SPAN CLASS="comment">// namespace boost::io</SPAN></PRE>
+
+<A NAME="stream_buffer_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="../../../../doc/html/CopyConstructible.html" TARGET="_top">CopyConstructible</A> model of one of the <A HREF="concepts.html#device_concepts">Device</A> concepts.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Tr</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A C++ standard library charatcer traits type (<A CLASS="bib_ref" href="../bibliography.html#iso">[ISO]</A>, 21.1.1) with <CODE>char_type</CODE> equal to the <A HREF="traits.html#char_type">character type</A> <CODE>Ch</CODE> of T. Defaults to <CODE>std::char_traits<Ch></CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A C++ standard library allocator type (<A CLASS="bib_ref" href="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate any required character buffers. Defaults to <CODE>std::allocator<Ch></CODE>, where <CODE>Ch</CODE> is the <A HREF="traits.html#char_type">character type</A> of T.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Mode</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A mode tag <I>convertible to the <A HREF="modes.html">mode</A> of T</I>. This parameter is principally for internal use. Specifying a <A HREF="modes.html#mode_tags">mode tag</A> properly refined by the mode of T can prevent an unneeded buffer from being allocated in some cases. Defaults to the mode of T.</TD>
+    </TR>
+</TABLE>
+
+<H4><CODE>stream_buffer::stream_buffer</CODE></H4>
+
+<A NAME="stream_buffer_default_constructor"></A>
+<PRE>    <B>stream_buffer</B>();</PRE>
+    
+<P>
+    Constructs a <CODE>stream_buffer</CODE> with no associated instance of the Device <CODE>T</CODE>. Before the instance can be used for i/o, one of its <CODE>open()</CODE> overloads must be invoked. 
+</P>
+
+<H4><CODE>stream_buffer::stream_buffer</CODE></H4>
+
+<A NAME="stream_buffer_policy_constructor"></A>
+<PRE>    <B>stream_buffer</B>( <SPAN CLASS="keyword">const</SPAN> T& t,
+                   std::streamsize buffer_size, 
+                   std::streamsize pback_size );</PRE>
+    
+<P>
+    Constructs a <CODE>stream_buffer</CODE> which is ready to perform i/o, where the parameters have the following interpretations:
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>t</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>An instance of T</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>buffer_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of any buffers that need to be allocated</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>pback_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of the putback buffer, relevant only if <CODE>Mode</CODE> is a refinement of <A HREF="modes.html#input"><CODE>input</CODE></TD>
+    </TR>
+</TABLE>
+
+<A NAME="stream_buffer_forwarding_constructors"></A>
+<PRE>    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U>
+    <B>stream_buffer</B>([<SPAN CLASS="keyword">const</SPAN>] U& u);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="keyword">typename</SPAN> U2>
+    <B>stream_buffer</B>([<SPAN CLASS="keyword">const</SPAN>] U1& u1, <SPAN CLASS="keyword">const</SPAN> U2& u2);
+
+        <SPAN CLASS="omitted">...</SPAN>
+
+    template<<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">typename</SPAN> UN>
+    <B>stream_buffer</B>([<SPAN CLASS="keyword">const</SPAN>] U1& u1, <SPAN CLASS="keyword">const</SPAN> U2& u2, <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">const</SPAN> UN& uN);</PRE>
+
+<P>
+    Each of these members constructs an instance of <CODE>stream_buffer</CODE> and associates it with an instance of the Device <CODE>T</CODE> constructed from the given lists of arguments. The <CODE>T</CODE> constructor must take all arguments other than the first by value or <CODE>const</CODE> reference. 
+</P>
+<P>
+    It is not possible to specify a custom buffer size or putback buffer size using these constructors.
+</P>
+
+<H4><CODE>stream_buffer::open</CODE></H4>
+
+<A NAME="stream_buffer_open"></A>
+<PRE>    void <B>open</B>( <SPAN CLASS="keyword">const</SPAN> T& t,
+               std::streamsize buffer_size, 
+               std::streamsize pback_size );</PRE>
+    
+<P>
+    Assocaites the given instance of <CODE>T</CODE> with <CODE>this</CODE> instance of <CODE>stream_buffer</CODE>, if there is no such instance currently associated; otherwise, throws <CODE>std::ios_base::failure</CODE>. The second parameter determines the size of any buffers that need to be allocated; a value of zero indicates that i/o should be unbuffered. The third parameter determines the size of the putback buffer; it is relevant only if <CODE>Mode</CODE> is a refinement of <A HREF= [...]
+</P>
+
+<A NAME="stream_buffer_forwarding_open"></A>
+<PRE>    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U>
+    <SPAN CLASS="keyword">void</SPAN> <B>open</B>(<SPAN CLASS="keyword">const</SPAN> U& u);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="keyword">typename</SPAN> U2>
+    <SPAN CLASS="keyword">void</SPAN> <B>open</B>(<SPAN CLASS="keyword">const</SPAN> U1& u1, <SPAN CLASS="keyword">const</SPAN> U2& u2);
+
+        <SPAN CLASS="omitted">...</SPAN>
+
+    template<<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">typename</SPAN> UN>
+    <SPAN CLASS="keyword">void</SPAN> <B>open</B>(<SPAN CLASS="keyword">const</SPAN> U1& u1, <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">const</SPAN> UN& uN);</PRE>
+
+<P>
+    Each of these members associates with <CODE>this</CODE> instance of <CODE>stream_buffer</CODE> a newly constructed instance of the Device <CODE>T</CODE> constructed from the given lists of arguments, if there is no such instance currently associated; otherwise, they throw <CODE>std::ios_base::failure</CODE>.  The <CODE>T</CODE> constructor must take all arguments other than the first by value or <CODE>const</CODE> reference. 
+</P>
+<P>
+    It is not possible to specify a custom buffer size or putback buffer size using these members.
+</P>
+
+<A NAME="stream_buffer_is_open"></A>
+<H4><CODE>stream_buffer::is_open</CODE></H4>
+<PRE>    <SPAN CLASS="keyword">bool</SPAN> <B>is_open</B>() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+    
+<P>Returns true if there is an instance of the Device <CODE>T</CODE> associated with <CODE>this</CODE> instance of <CODE>stream_buffer</CODE>.</P>
+
+<A NAME="stream_buffer_close"></A>
+<H4><CODE>stream_buffer::close</CODE></H4>
+<PRE>    <SPAN CLASS="keyword">void</SPAN> <B>close</B>();</PRE>
+    
+<P>
+    Disassociates from <CODE>this</CODE> instance of <CODE>stream_buffer</CODE> any instance of the Device <CODE>T</CODE> currently associated with it, calling cleanup functions as appropriate and destroying the associated instance of <CODE>T</CODE>.
+</P>
+
+<A NAME="stream_buffer_operator_star"></A>
+<H4><CODE>stream_buffer::operator*</CODE></H4>
+<PRE>    T& <B>operator*</B>();</PRE>
+    
+<P>
+    Returns a reference to the instance of <CODE>T</CODE> associated with this <CODE>stream_buffer</CODE>, which must be <A HREF="#stream_buffer_is_open"><CODE>open</CODE></A>.
+</P>
+
+<A NAME="stream_buffer_operator_arrow"></A>
+<H4><CODE>stream_buffer::operator-></CODE></H4>
+<PRE>    T* <B>operator-></B>();</PRE>
+    
+<P>
+    Returns a pointer to the instance of <CODE>T</CODE> associated with this <CODE>stream_buffer</CODE>, which must be <A HREF="#stream_buffer_is_open"><CODE>open</CODE></A>.
+</P>
+
+<A NAME="stream"></A>
+<H3>Class template <CODE>stream</CODE></H3>
+
+<H4>Description</H4>
+
+<P>
+    Stream template which performs i/o by delegating to a contained <A HREF="../concepts/device.html">Device</A>. The Device type is specified as the first template parameter to <CODE>stream</CODE>. Instances of the the Device type are attached and detached using the member functions <A HREF="#stream_open"><CODE>open</CODE></A> and <A HREF="#stream_close"><CODE>close</CODE></A>.
+</P>
+
+<P>
+    The template <CODE>stream</CODE> derives from a specialization of <CODE>std::basic_istream</CODE>, <CODE>std::basic_ostream</CODE> or <CODE>std::basic_iostream</CODE>, depending on whether the underlying <A HREF="../concepts/device.html">Device</A> models <A HREF="../concepts/source.html">Source</A>, <A HREF="../concepts/sink.html">Sink</A> or both..
+</P>
+
+
+<H4>Synopsis</H4>
+
+<PRE><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN>< <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#stream_params">T</A>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#stream_params">Tr</A> = std::char_traits<<SPAN CLASS="omitted">...</SPAN>>, 
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#stream_params">Alloc</A> = std::allocator<<SPAN CLASS="omitted">...</SPAN>>,
+          <SPAN CLASS="keyword">typename</SPAN> <A CLASS="documented" HREF="#stream_params">Mode</A> = <SPAN CLASS="omitted">...</SPAN> >
+<SPAN CLASS="keyword">class</SPAN> <A CLASS="documented" HREF="#stream_params">stream</A> : <SPAN CLASS="keyword">public</SPAN> [<SPAN CLASS='omitted'>see Description</SPAN>] {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">typename</SPAN> char_type_of<T>::type  char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">typename</SPAN> Tr                     traits_type;
+
+    [<SPAN CLASS="omitted">Standard stream buffer typedefs: int_type, off_type, etc.</SPAN>]
+
+    <A CLASS="documented" HREF="#stream_default_constructor">stream</A>();
+    <A CLASS="documented" HREF="#stream_policy_constructor">stream</A>( <SPAN CLASS="keyword">const</SPAN> T& t,
+            std::streamsize buffer_size = <SPAN CLASS="omitted">default_value</SPAN>, 
+            std::streamsize pback_size = <SPAN CLASS="omitted">default_value</SPAN> );
+
+        <SPAN CLASS="comment">// Forwarding constructors</SPAN>
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U>
+    <A CLASS="documented" HREF="#stream_forwarding_constructors">stream</A>([<SPAN CLASS="keyword">const</SPAN>] U& u);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="keyword">typename</SPAN> U2>
+    <A CLASS="documented" HREF="#stream_forwarding_constructors">stream</A>([<SPAN CLASS="keyword">const</SPAN>] U1& u1, <SPAN CLASS="keyword">const</SPAN> U2& u2);
+
+        <SPAN CLASS="omitted">...</SPAN>
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">typename</SPAN> UN>
+    <A CLASS="documented" HREF="#stream_forwarding_constructors">stream</A>([<SPAN CLASS="keyword">const</SPAN>] U1& u1, <SPAN CLASS="keyword">const</SPAN> U2& u2, <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">const</SPAN> UN& uN);
+
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#stream_open">open</A>( <SPAN CLASS="keyword">const</SPAN> T& t,
+               std::streamsize buffer_size = <SPAN CLASS="omitted">default_value</SPAN>, 
+               std::streamsize pback_size = <SPAN CLASS="omitted">default_value</SPAN> );
+
+        <SPAN CLASS="comment">// Forwarding overloads of open()</SPAN>
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#stream_forwarding_open">open</A>([<SPAN CLASS="keyword">const</SPAN>] U& u);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="keyword">typename</SPAN> U2>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#stream_forwarding_open">open</A>([<SPAN CLASS="keyword">const</SPAN>] U1& u1, <SPAN CLASS="keyword">const</SPAN> U2& u2);
+    
+        <SPAN CLASS="omitted">...</SPAN>
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">typename</SPAN> UN>
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#stream_forwarding_open">open</A>([<SPAN CLASS="keyword">const</SPAN>] U1& u1, <SPAN CLASS="keyword">const</SPAN> U2& u2, <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">const</SPAN> UN& uN);
+
+    <SPAN CLASS="keyword">bool</SPAN> <A CLASS="documented" HREF="#stream_is_open">is_open</A>() <SPAN CLASS="keyword">const</SPAN>;
+    <SPAN CLASS="keyword">void</SPAN> <A CLASS="documented" HREF="#stream_close">close</A>();
+
+        <SPAN CLASS="comment">// Device access</SPAN>
+    
+    T& <A CLASS='documented' HREF="#stream_operator_star"><SPAN CLASS="documented">operator</SPAN>*</A>();
+    T* <A CLASS='documented' HREF="#stream_operator_arrow"><SPAN CLASS="documented">operator-></SPAN></A>();
+};
+
+} } <SPAN CLASS="comment">// namespace boost::io</SPAN></PRE>
+
+<A NAME="stream_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A <A HREF="../../../../doc/html/CopyConstructible.html" TARGET="_top">CopyConstructible</A> model of one of the <A HREF="concepts.html#device_concepts">Device</A> concepts.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Tr</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A C++ standard library charatcer traits type (<A CLASS="bib_ref" href="../bibliography.html#iso">[ISO]</A>, 21.1.1) with <CODE>char_type</CODE> equal to the <A HREF="traits.html#char_type">character type</A> <CODE>Ch</CODE> of T. Defaults to <CODE>std::char_traits<Ch></CODE>.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Alloc</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A C++ standard library allocator type (<A CLASS="bib_ref" href="../bibliography.html#iso">[ISO]</A>, 20.1.5), used to allocate any required character buffers. Defaults to <CODE>std::allocator<Ch></CODE>, where <CODE>Ch</CODE> is the <A HREF="traits.html#char_type">character type</A> of T.</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>Mode</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A mode tag <I>convertible to the <A HREF="modes.html">mode</A> of T</I>. This parameter is principally for internal use. Specifying a <A HREF="modes.html#mode_tags">mode tag</A> properly refined by the mode of T can prevent an unneeded buffer from being allocated in some cases. Defaults to the mode of T.</TD>
+    </TR>
+</TABLE>
+
+<H4><CODE>stream::stream</CODE></H4>
+
+<A NAME="stream_default_constructor"></A>
+<PRE>    <B>stream</B>();</PRE>
+    
+<P>
+    Constructs a <CODE>stream</CODE> with no associated instance of the Device <CODE>T</CODE>. Before the instance can be used for i/o, one of its <CODE>open()</CODE> overloads must be invoked. 
+</P>
+
+<H4><CODE>stream::stream</CODE></H4>
+
+<A NAME="stream_policy_constructor"></A>
+<PRE>    <B>stream</B>( <SPAN CLASS="keyword">const</SPAN> T& t,
+            std::streamsize buffer_size, 
+            std::streamsize pback_size );</PRE>
+    
+<P>
+    Constructs a <CODE>stream</CODE> which is ready to perform i/o, where the parameters have the following interpretations:
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>t</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>An instance of T</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>buffer_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of any buffers that need to be allocated</TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>pback_size</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The size of the putback buffer, relevant only if <CODE>Mode</CODE> is a refinement of <A HREF="modes.html#input"><CODE>input</CODE></TD>
+    </TR>
+</TABLE>
+
+<A NAME="stream_forwarding_constructors"></A>
+<PRE>    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U>
+    <B>stream</B>([<SPAN CLASS="keyword">const</SPAN>] U& u);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="keyword">typename</SPAN> U2>
+    <B>stream</B>([<SPAN CLASS="keyword">const</SPAN>] U1& u1, <SPAN CLASS="keyword">const</SPAN> U2& u2);
+
+        <SPAN CLASS="omitted">...</SPAN>
+
+    template<<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">typename</SPAN> UN>
+    <B>stream</B>([<SPAN CLASS="keyword">const</SPAN>] U1& u1, <SPAN CLASS="keyword">const</SPAN> U2& u2, <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">const</SPAN> UN& uN);</PRE>
+
+<P>
+    Each of these members constructs an instance of <CODE>stream</CODE> and associates it with an instance of the Device <CODE>T</CODE> constructed from the given lists of arguments. The <CODE>T</CODE> constructors involved must take all arguments by value or <CODE>const</CODE> reference. 
+</P>
+<P>
+    It is not possible to specify a custom buffer size or putback buffer size using these constructors.
+</P>
+
+<H4><CODE>stream::open</CODE></H4>
+
+<A NAME="stream_open"></A>
+<PRE>    void <B>open</B>( <SPAN CLASS="keyword">const</SPAN> T& t,
+               std::streamsize buffer_size, 
+               std::streamsize pback_size );</PRE>
+    
+<P>
+    Assocaites the given instance of <CODE>T</CODE> with <CODE>this</CODE> instance of <CODE>stream</CODE>, if there is no such instance currently associated; otherwise, throws <CODE>std::ios_base::failure</CODE>. The second parameter determines the size of any buffers that need to be allocated; a value of zero indicates that i/o should be unbuffered. The third parameter determines the size of the putback buffer; it is relevant only if <CODE>Mode</CODE> is a refinement of <A HREF="modes. [...]
+</P>
+
+<A NAME="stream_forwarding_open"></A>
+<PRE>    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U>
+    <SPAN CLASS="keyword">void</SPAN> <B>open</B>([<SPAN CLASS="keyword">const</SPAN>] U& u);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="keyword">typename</SPAN> U2>
+    <SPAN CLASS="keyword">void</SPAN> <B>open</B>([<SPAN CLASS="keyword">const</SPAN>] U1& u1, <SPAN CLASS="keyword">const</SPAN> U2& u2);
+
+        <SPAN CLASS="omitted">...</SPAN>
+
+    template<<SPAN CLASS="keyword">typename</SPAN> U1, <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">typename</SPAN> UN>
+    <SPAN CLASS="keyword">void</SPAN> <B>open</B>([<SPAN CLASS="keyword">const</SPAN>] U1& u1, <SPAN CLASS="keyword">const</SPAN> U2& u2, <SPAN CLASS="omitted">...</SPAN>, <SPAN CLASS="keyword">const</SPAN> UN& uN);</PRE>
+
+<P>
+    Each of these members associates with <CODE>this</CODE> instance of <CODE>stream</CODE> a newly constructed instance of the Device <CODE>T</CODE> constructed from the given lists of arguments, if there is no such instance currently associated; otherwise, they throw <CODE>std::ios_base::failure</CODE>.  The <CODE>T</CODE> constructors involved must take all arguments by value or <CODE>const</CODE> reference. 
+</P>
+<P>
+    It is not possible to specify a custom buffer size or putback buffer size using these members.
+</P>
+
+<A NAME="stream_is_open"></A>
+<H4><CODE>stream::is_open</CODE></H4>
+<PRE>    <SPAN CLASS="keyword">bool</SPAN> <B>is_open</B>() <SPAN CLASS="keyword">const</SPAN>;</PRE>
+    
+<P>Returns true if there is an instance of the Device <CODE>T</CODE> associated with <CODE>this</CODE> instance of <CODE>stream</CODE>.</P>
+
+<A NAME="stream_close"></A>
+<H4><CODE>stream::close</CODE></H4>
+<PRE>    <SPAN CLASS="keyword">void</SPAN> <B>close</B>();</PRE>
+    
+<P>
+    Disassociates from <CODE>this</CODE> instance of <CODE>stream</CODE> any instance of the Device <CODE>T</CODE> currently associated with it, calling cleanup functions as appropriate and destroying the associated instance of <CODE>T</CODE>.
+</P>
+
+<A NAME="stream_operator_star"></A>
+<H4><CODE>stream::operator*</CODE></H4>
+<PRE>    T& <B>operator*</B>();</PRE>
+    
+<P>
+    Returns a reference to the instance of <CODE>T</CODE> associated with this <CODE>stream</CODE>, which must be <A HREF="#stream_is_open"><CODE>open</CODE></A>.
+</P>
+
+<A NAME="stream_operator_arrow"></A>
+<H4><CODE>stream::operator-></CODE></H4>
+<PRE>    T* <B>operator-></B>();</PRE>
+    
+<P>
+    Returns a pointer to the instance of <CODE>T</CODE> associated with this <CODE>stream</CODE>, which must be <A HREF="#stream_is_open"><CODE>open</CODE></A>.
+</P>
+
+<A NAME="examples"></A>
+<H2>Examples</H2>
+
+<H4>Defining a simple <CODE>ofstream</CODE></H4>
+
+<P>The following example uses a <A HREF="../classes/file.html#file_sink"><CODE>file_sink</CODE></A> to define a class similar to a <CODE>std::ofstream</CODE>.
+
+<PRE>    <SPAN CLASS="preprocessor">#include</SPAN> <A STYLE="text-decoration:none" href="../../../../boost/iostreams/device/file.hpp"><SPAN CLASS="literal"><boost/iostreams/device/file.hpp></SPAN></A>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A STYLE="text-decoration:none" href="../../../../boost/iostreams/stream.hpp"><SPAN CLASS="literal"><boost/iostreams/stream.hpp></SPAN></A>
+         
+    <SPAN CLASS="keyword">typedef</SPAN> stream<file_sink> ofstream;
+
+    ofstream out(<SPAN CLASS="literal">"HeavyArtillery.txt"</SPAN>); <SPAN CLASS="comment">// Wilfred Owen</SPAN>
+    out << <SPAN CLASS="literal">"Reach at that Arrogance which needs thy harm,\n"</SPAN>
+           <SPAN CLASS="literal">"And beat it down before its sins grow worse.\n"</SPAN>;
+    out.close();</PRE>
+
+<H4>Reading from an array</H4>
+
+<P>The following example uses an <A href="../classes/array.html#array_source"><CODE>array_source</CODE></A> to construct an input stream from a C-style string.
+
+<PRE>    <SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><cstring></SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><iostream></SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><string></SPAN>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A STYLE="text-decoration:none" href="../../../../boost/iostreams/device/array.hpp"><SPAN CLASS="literal"><boost/iostreams/device/array.hpp></SPAN></A>
+    <SPAN CLASS="preprocessor">#include</SPAN> <A STYLE="text-decoration:none" href="../../../../boost/iostreams/stream.hpp"><SPAN CLASS="literal"><boost/iostreams/stream.hpp></SPAN></A>
+
+    const char*           h = <SPAN CLASS="literal">"Hello World!"</SPAN>;
+    stream<array_source>  in(h, std::strlen(h));
+    std::string           hello;
+    std::getline(in, hello);
+    std::cout << hello << "\n";  // <SPAN CLASS="comment">Prints "Hello World!"</SPAN></PRE>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/guide/guide.html b/vendor/pdalboost/libs/iostreams/doc/guide/guide.html
new file mode 100644
index 0000000..4c0d172
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/guide/guide.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Guide</TITLE>
+    <LINK REL="stylesheet" href="../../../../boost.css">
+    <LINK REL="stylesheet" href="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">User's Guide</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>3. User's Guide</H2>
+
+<P>
+  3.1 <A href="concepts.html">Concepts</A><BR>
+  3.2 <A href="modes.html">Modes</A><BR>
+  3.3 <A href="generic_streams.html">Generic Streams and Stream Buffers</A><BR>
+  3.4 <A href="filtering_streams.html">Filtering Streams and Stream Buffers</A><BR>
+  3.5 <A href="code_conversion.html">Code Conversion</A><BR>
+  3.6 <A href="asynchronous.html">Asynchronous and Non-Blocking I/O</A><BR>
+  3.7 <A href="lifetimes.html">Object Lifetimes</A><BR>
+  3.8 <A href="pipelines.html">Pipelines</A><BR>
+  3.9 <A href="views.html">Views</A><BR>
+  3.10 <A href="exceptions.html">Exceptions</A><BR>
+  3.11 <A href="buffering.html">Buffering</A>
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/guide/lifetimes.html b/vendor/pdalboost/libs/iostreams/doc/guide/lifetimes.html
new file mode 100644
index 0000000..a80fec4
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/guide/lifetimes.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Object Lifetimes</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">User's Guide</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+     <A HREF='asynchronous.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='guide.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='pipelines.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<A NAME="overview"></A>
+<H2>3.7 Object Lifetimes</H2>
+
+<HR STYLE="margin-top:1em">
+
+<P>
+[To be supplied in the next release]
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/guide/modes.html b/vendor/pdalboost/libs/iostreams/doc/guide/modes.html
new file mode 100644
index 0000000..3a9b5f4
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/guide/modes.html
@@ -0,0 +1,242 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Modes</TITLE>
+    <LINK REL="stylesheet" href="../../../../boost.css">
+    <LINK REL="stylesheet" href="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">User's Guide</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+     <A HREF='concepts.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='guide.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='generic_streams.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<H2>3.2 Modes</H2>
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#definitions">Definitions of the Modes</A></DT>
+  <DT><A href="#mode_hierarchy_diagrams">Mode Hierarchy Diagrams</A></DT>
+  <DT><A href="#mode_tags">Mode Tags</A></DT>
+  <DT><A href="#the_metafunction_mode">The metafunction <CODE>mode_of</CODE></A></DT>
+</DL>
+
+<HR STYLE="margin-top:1em">
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    In order for a sequence of <A HREF="concepts.html#filter_concepts">Filters</A> and <A HREF="concepts.html#device_concepts">Devices</A> to work together they must have certain properties in common. The most basic requirement is that they have the same <A HREF="traits.html#char_type">character type</A>; a collection of additional properties which Filters and Devices must share to be used for a particular purpose is called a <SPAN CLASS="term">mode</SPAN>.
+</P>
+
+<P>
+    The templates <A HREF="generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A> and <A HREF="generic_streams.html#stream"><CODE>stream</CODE></A> are each parameterized by a mode, represented by a <A HREF="#mode_tags">mode tag</A>.
+</P>
+
+<P>
+    The Iostreams library supports eight modes, described in the next section (<I>see also</I> <A CLASS="caption_ref" HREF="#mode_hierarchy_diagrams">Figure 2</A>). Of these, four are most import (<I>see </I> <A CLASS="caption_ref" HREF="#mode_hierarchy_diagrams">Figure 1</A>). The two modes <A HREF="#input">input</A> and <A HREF="#output">output</A> are by far the most common. Readers new to the Iostreams library should feel free to concentrate primarily on these two modes.
+</P>
+
+<A NAME="definitions"></A>
+<H2>Definitions of the Modes</H2>
+
+<P>Modes can be categorized in several ways:
+<UL>
+    <LI>Whether input, output or both input and output can be performed.
+    <LI>If both input and output are possible, whether there are two separate character sequences for input and output, or a single combined sequence.
+    <LI>Whether the reading or writing heads are repositionable, and if so, whether there are separate heads for reading and writing or a single read/write head.
+</UL>
+<P>
+    The concepts representing <A HREF="concepts.html#optional_behavior">optional behavior</A> are not related to mode, and so need not be shared in order for a collection of Filters and Devices to work together:
+</P>
+
+<P>Modes are summarized in the following table:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=1 CELLPADDING=4>
+<TR><TH>Mode</TH><TH>Definition/Examples</TH></TR>
+    <!-- Input -->
+    <TR>
+        <TD VALIGN="top"><A NAME="input"></A><B>Input</B></TD>
+        <TD>
+            <TABLE>
+                <TR><TD VALIGN="top"><B>Definition:</B></TD><TD>Involves a single sequence of characters, for input</TD></TR>
+                <TR><TD VALIGN="top"><B>Example:</B></TD><TD><CODE>std::cin</CODE></TD></TR>
+            </TABLE>
+        </TD>
+    </TR>
+
+    <!-- Output -->
+    <TR>
+        <TD VALIGN="top"><A NAME="output"></A><B>Output</B></TD>
+        <TD>
+            <TABLE>
+                <TR><TD VALIGN="top"><B>Definition:</B></TD><TD>Involves a single sequence of characters, for output</TD></TR>
+                <TR><TD VALIGN="top"><B>Example:</B></TD><TD><CODE>std::cout</CODE></TD></TR>
+            </TABLE>
+        </TD>
+    </TR>
+
+    <!-- Bidirectional -->
+    <TR>
+        <TD VALIGN="top"><A NAME="bidirectional"></A><B>Bidirectional</B></TD>
+        <TD>
+            <TABLE>
+                <TR><TD VALIGN="top"><B>Definition:</B></TD>
+                <TD>Involves a two separate sequences of characters, one for input and one for output</TD></TR>
+                <TR><TD VALIGN="top"><B>Example:</B></TD><TD>A <CODE>std::iostream</CODE> for accessing a TCP connection</TD></TR>
+            </TABLE>
+        </TD>
+    </TR>
+
+    <!-- Input-seekable -->
+    <TR>
+        <TD VALIGN="top"><A NAME="input_seekable"></A><B>Input-seekable</B></TD>
+        <TD>
+            <TABLE>
+                <TR><TD VALIGN="top"><B>Definition:</B></TD>
+                <TD>Involves a single sequence of characters, for input, with a repositionable reading head</TD></TR>
+                <TR><TD VALIGN="top"><B>Examples:</B></TD><TD><CODE>std::ifstream</CODE>, <CODE>std::istringstream</CODE></TD></TR>
+            </TABLE>
+        </TD>
+    </TR>
+
+    <!-- Output-seekable -->
+    <TR>
+        <TD VALIGN="top"><A NAME="output_seekable"></A><B><PRE CLASS="plain_code"><P>Output-seekable</P></PRE></B></TD>
+        <TD>
+            <TABLE>
+                <TR><TD VALIGN="top"><B>Definition:</B></TD>
+                <TD>Involves a single sequence of characters, for output, with a repositionable writing head</TD></TR>
+                <TR><TD VALIGN="top"><B>Examples:</B></TD><TD><CODE>std::ofstream</CODE>, <CODE>std::ostringstream</CODE></TD></TR>
+            </TABLE>
+        </TD>
+    </TR>
+
+    <!-- Seekable -->
+    <TR>
+        <TD VALIGN="top"><A NAME="seekable"></A><B>Seekable</B></TD>
+        <TD>
+            <TABLE>
+                <TR><TD VALIGN="top"><B>Definition:</B></TD>
+                    <TD>Involves a single sequence of characters, for input and output, with a combined repositionable read/write head</TD></TR>
+                <TR><TD VALIGN="top"><B>Example:</B></TD><TD><CODE>std::fstream</CODE></TD></TR>
+            </TABLE>
+        </TD>
+    </TR>
+
+    <!-- Dual-seekable -->
+    <TR>
+        <TD VALIGN="top"><A NAME="dual_seekable"></A><B>Dual-seekable</B></TD>
+        <TD>
+            <TABLE>
+                <TR><TD VALIGN="top"><B>Definition:</B></TD>
+                <TD>Involves a single sequence of characters, for input and output, with separate repositionable reading and writing heads</TD></TR>
+                <TR><TD VALIGN="top"><B>Example:</B></TD><TD><CODE>std::stringstream</CODE></TD></TR>
+            </TABLE>
+        </TD>
+    </TR>
+
+    <!-- Bidirectional-seekable -->
+    <TR>
+        <TD VALIGN="top"><A NAME="bidirectional_seekable"></A><B>Bidirectional-seekable</B></TD>
+        <TD>
+            <TABLE>
+                <TR><TD VALIGN="top"><B>Definition:</B></TD><TD>Involves a two separate sequences of characters, one for input and one for output, each with a repositionable head</TD></TR>
+                <TR><TD VALIGN="top"><B>Example:</B></TD><TD>No known examples</TD></TR>
+            </TABLE>
+        </TD>
+    </TR>
+    </TR>
+</TABLE>
+    
+
+<P>
+    For more on the selection of modes, see the <A href="../rationale.html">Rationale</A>.
+</P>
+
+<A ID="mode_hierchy_diagrams"></A>
+<H2 ID="mode_hierarchy_diagrams">Mode Hierarchy Diagrams</H2>
+
+<P>The following diagrams display the refinement hierarchies among modes.</P>
+
+<TABLE STYLE="margin-left:2em" CELLSPACING=10>
+<TR>
+    <TD VALIGN="top">
+        <P CLASS="caption"><B>Figure 1.</B> The four most important modes</P>
+        <IMG SRC="../graphics/important_modes.gif">
+    </TD>
+    <TD WIDTH="30"></TD>
+    <TD ALIGN="right" VALIGN="top">
+        <TABLE>
+        <TR><TD><IMG SRC="../graphics/key_important.gif"></TD><TD CLASS="caption">Most important</TD></TR>
+        <TR><TD><IMG SRC="../graphics/key_input_seq.gif"></TD><TD CLASS="caption">Input sequence</TD></TR>
+        <TR><TD><IMG SRC="../graphics/key_output_seq.gif"></TD><TD CLASS="caption">Output sequence</TD></TR>
+        <TR><TD><IMG SRC="../graphics/key_bidirectional_seq.gif"></TD><TD CLASS="caption">Combined input-output sequence</TD></TR>
+        <TR><TD><IMG SRC="../graphics/key_read_head.gif"></TD><TD CLASS="caption">Repositionable file-pointer for reading</TD></TR>
+        <TR><TD><IMG SRC="../graphics/key_write_head.gif"></TD><TD CLASS="caption">Repositionable file-pointer for writing</TD></TR>
+        <TR><TD><IMG SRC="../graphics/key_read_write_head.gif"></TD><TD CLASS="caption">Combined file-pointer for reading and writing</TD></TR>
+        </TABLE>
+    </TD>
+</TR>
+<TR>
+    <TD COLSPAN="3">
+        <P CLASS="caption"><B>Figure 2.</B> The complete hierarchy of modes</P>
+        <IMG SRC="../graphics/modes.gif">
+    </TD>
+</TR>
+</TABLE>
+
+<A NAME="mode_tags"></A>
+<H2>Mode Tags</H2>
+
+<P>
+    Each mode is represented by a <SPAN CLASS="term">mode tag</SPAN>, defined in the header <A href="../../../../boost/iostreams/traits.hpp"><CODE><boost/iostreams/traits.hpp></CODE></A>. There are eight tags for the eight modes: <CODE>input</CODE>, <CODE>output</CODE>, <CODE>bidirectional</CODE>, <CODE>input_seekable</CODE>, <CODE>output_seekable</CODE>, <CODE>seekable</CODE>, <CODE>dual_seekable</CODE> and <CODE>bidirectional_seekable</CODE>.<SUP><A CLASS="footnote_ref" NAME="not [...]
+</P>
+<P>
+    In addition, there is a <SPAN CLASS="term">pseudo-mode tag</SPAN> <CODE>dual_use</CODE>, which is used to define <A href="../concepts/dual_use_filter.html">DualUseFilters</A> — which can perform input or output, but not both simultaneously. This is useful to help reduce the number of different of Filter types. The <A href="../classes/regex_filter.html">Regular Expression Filters</A>, <A href="../classes/newline_filter.html">Newline Filters</A> and compression and decompression  [...]
+</P>
+
+<A NAME="the_metafunction_mode"></A>
+<H2>The Metafunction <CODE>mode_of</CODE></H2>
+
+<P>
+    To determine the mode of a model of a Filter or Device, use the metafunction <A href="../classes/mode.html"><CODE>mode_of</CODE></A>.
+   
+</P>
+
+<!-- Begin Footnotes -->
+
+<HR>
+
+<P>
+    <SUP><A CLASS="footnote_ref" NAME="note_1" HREF="#note_1_ref">[1]</A></SUP>It is traditional for tag structures to have names ending with "<CODE>_tag</CODE>". Since mode tags feature prominently in user code, this suffix was dropped to improve readability.
+</P>
+
+<!-- End Footnotes -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/guide/pipelines.html b/vendor/pdalboost/libs/iostreams/doc/guide/pipelines.html
new file mode 100644
index 0000000..f847ad7
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/guide/pipelines.html
@@ -0,0 +1,142 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Pipelines</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">User's Guide</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+     <A HREF='lifetimes.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='guide.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='views.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<H2>3.8 Pipelines</H2>
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#examples">Examples</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<HR STYLE="margin-top:1em">
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    A pipeline is an expression of the form 
+</P>
+<PRE CLASS="broken_ie">filter<SUB>1</SUB> | ... | filter<SUB>n</SUB> | filter-or-device</PRE>
+<P>
+consiting of one or more filters and an optional device, joined using <CODE>operator|</CODE>. Pipelines are a convenient way to pass chains of Filters and Devices to the constructor or <CODE>push</CODE> function of a <A HREF="../classes/filtering_stream.html"><CODE>filtering_stream</CODE></A> or <A HREF="../classes/filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A>. 
+</P>
+
+<P>
+    In order for instances of a model of Filter to appear in a pipeline, it must be declared <A HREF="../concepts/pipable.html">Pipable</A> using the macro <A HREF="#boost_iostreams_pipable"><CODE>BOOST_IOSTREAMS_PIPABLE</CODE></A>.
+</P>
+
+<P>
+   Pipelines for C++ filtering were introduced by Jan Christiaan van Winkel and John van Krieken. <I>See</I> <A CLASS="bib_ref" HREF="../bibliography.html#van_winkel">[van Winkel].</A> 
+</P>
+
+<A NAME="examples"></A>
+<H2>Examples</H2>
+
+<P>The following example defines a <A HREF="../concepts/pipable.html">Pipable</A> InputFilter.</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/concepts.hpp'><SPAN CLASS='literal'><boost/iostreams/concepts.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/pipeline.hpp'><SPAN CLASS='literal'><boost/iostreams/pipeline.hpp></SPAN></A>
+
+<SPAN CLASS="keyword">namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS="keyword">class</SPAN> my_filter : <SPAN CLASS="keyword">public</SPAN> io::input_filter {
+<SPAN CLASS="keyword">public:</SPAN>
+    <SPAN CLASS='omitted'>...</SPAN>
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword">int</SPAN> get(Source& src)
+    {
+       <SPAN CLASS='omitted'> ...</SPAN>
+    }
+};
+BOOST_IOSTREAMS_PIPABLE(my_filter, 0)
+</PRE>
+
+<P>No semicolon is required (or allowed) following the macro invocation. The following example shows a <A HREF="../classes/filtering_stream.html"><CODE>filtering_stream</CODE></A> constructed from a pipeline</CODE>.</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/filtering_stream.hpp'><SPAN CLASS='literal'><boost/iostreams/filtering_stream.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/device/file.hpp'><SPAN CLASS='literal'><boost/iostreams/device/file.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF='../../../../boost/iostreams/filter/counter.hpp'><SPAN CLASS='literal'><boost/iostreams/filter/counter.hpp></SPAN></A>
+
+<SPAN CLASS="keyword">namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS="keyword">int</SPAN> main()
+{
+    <SPAN CLASS='comment'>// Write to the file "hello," counting</SPAN>
+    <SPAN CLASS='comment'>// the number of lines and characters</SPAN>
+    io::filtering_ostream out(io::counter() | io::file("hello"));
+    <SPAN CLASS='omitted'>...</SPAN>
+}</PRE>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/pipeline.hpp"><CODE><boost/iostreams/pipeline.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="boost_iostreams_pipable"></A>
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<PRE CLASS="broken_ie">
+
+<SPAN CLASS='preprocessor'>#define</SPAN> BOOST_IOSTREAMS_PIPABLE(filter, arity) <SPAN CLASS='omitted'>...</SPAN>
+
+</PRE>
+
+<H4>Description</H4>
+
+<P>Defines the overloads of <CODE>operator|</CODE> necessary for a <A HREF="../concepts/filter.html">Filter</A> to appear in pipelines.</P>
+
+<A NAME="macro_params"></A>
+<H4>Macro parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+<TR>
+    <TR>
+        <TD VALIGN="top"><I>filter</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The name of the <A HREF="../concepts/filter.html">Filter</A> to be declared <A HREF="../concepts/pipable.html">Pipable</A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><I>arity</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>The <A HREF="../concepts/filter.html">Filter</A>'s template arity, <I>i.e.</I>, the number or its template parameters; a value of <CODE>0</CODE> indicates that it is not a class template</TD>
+    </TR>
+</TABLE>
+
+<!-- Begin Footer -->
+
+<HR STYLE="margin-top:1em">
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/guide/text_processing.html b/vendor/pdalboost/libs/iostreams/doc/guide/text_processing.html
new file mode 100644
index 0000000..83d1c9d
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/guide/text_processing.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Text Processing Filters</TITLE>
+    <LINK REL="stylesheet" href="../../../../boost.css">
+    <LINK REL="stylesheet" href="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Text Processing Filters</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#reference">Reference</A></DT>
+</DL>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The Boost Iostreams library provides two types of Filters for text processing: <A href="../classes/regex_filter.html">Regular Expression Filters</A>, which use the  <A HREF="http://www.boost.org/libs/regex" TARGET="_top">Boost Regular Expression Library</A> (<A CLASS="bib_ref" href="../bibliography.html#maddock">[Maddock]</A>) to perform text substitutions, and <A href="../classes/newline_filter.html">Newline Filters</A>, which convert between the text file formats used by various op [...]
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL>
+  <DT><A CLASS="header" href="../../../../boost/iostreams/filter/regex.hpp"><CODE><boost/iostreams/filter/regex.hpp></CODE></A></DT>
+  <DT><A CLASS="header" href="../../../../boost/iostreams/filter/newline.hpp"><CODE><boost/iostreams/filter/newline.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<DL>
+  <DT><A href="../classes/regex_filter.html">Class template <CODE>basic_regex_filter</CODE></A></DT>
+  <DT><A href="../classes/newline_filter.html">Class template <CODE>basic_newline_filter</CODE></A></DT>
+</DL>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/guide/traits.html b/vendor/pdalboost/libs/iostreams/doc/guide/traits.html
new file mode 100644
index 0000000..95282ea
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/guide/traits.html
@@ -0,0 +1,302 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>I/O Traits and Categories</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">I/O Traits and Categories</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#char_type_of_ref">Class template <CODE>char_type_of</CODE></A></DT>
+  <DT><A href="#int_type_of_ref">Class template <CODE>int_type_of</CODE></A></DT>
+  <DT><A href="#category_ref">Class template <CODE>category_of</CODE></A></DT>
+  <DT><A href="#category_tags">Category Tags</A></DT>
+  </DT>
+</DL>
+
+<HR>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The header <A CLASS="header" href="../../../../boost/iostreams/categories.hpp"><CODE><boost/iostreams/categories.hpp></CODE></A> contains <A href="#category_tags">category tags</A> for classifying models of the various <A href="concepts.html#filter_concepts">Filter</A> and <A href="concepts.html#device_concepts">Device</A> concepts. The header <A CLASS="header" href="../../../../boost/iostreams/traits.hpp"><CODE><boost/iostreams/traits.hpp></CODE></A> contains the definit [...]
+</P>
+
+<A NAME="char_type"></A>
+<H4>Character Type</H4>
+
+<P>The type of characters which a Filter or Device reads or writes.</P>
+
+<A NAME="category"></A>
+<H4>Category</H4>
+
+<P>
+    A tag structure which the Iostreams library relies on to determine which operations a Filter or Device supports. It indicates, for a given type <CODE>T</CODE>:
+</P>
+<UL>
+    <LI CLASS="square">whether <CODE>T</CODE> is a <A href="concepts.html#filter_concepts">Filter</A> or a <A href="concepts.html#device_concepts">Device</A>
+    <LI CLASS="square">the <A href="modes.html">mode</A> of <CODE>T</CODE>
+    <LI CLASS="square">any <A href="concepts.html#optional_behavior">optional_behavior</A> <CODE>T</CODE> implements
+</UL>
+<P>
+   Its function is similar to the <CODE>iterator_category</CODE> member of <CODE>std::iterator_traits</CODE>.<A CLASS="footnote_ref" NAME="note_1_ref" HREF="#note_1"><SUP>[1]</SUP></A> Types which serve as categories are called <A HREF="#category_tags">category tags</A>.
+</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" href="../../../../boost/iostreams/categories.hpp"><CODE><boost/iostreams/categories.hpp></CODE></A></DT>
+  <DT><A CLASS="header" href="../../../../boost/iostreams/traits.hpp"><CODE><boost/iostreams/traits.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="char_type_of_ref"></A>
+<H2>Class Template <CODE>char_type_of</CODE></H2>
+
+<H4>Description</H4>
+
+<P><A HREF="http://www.boost.org/libs/mpl/doc/refmanual/metafunction.html" TARGET="_top">Metafunction</A> associating a <A HREF="#char_type">character type</A> to each <A href="concepts.html#filter_concepts">Filter</A> or <A href="concepts.html#device_concepts">Device</A> type. Although <CODE>char_type_of</CODE> is designed to be specialized for new Filter and Device types, the default implementation should be suitable for most purposes.
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A HREF="#char_type_template_params" CLASS="documented">T</A>>
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#char_type_template_params">char_type_of</A> {
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">see below</SPAN> <A HREF="#char_type_of_type" CLASS="documented">type</A>;
+};
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="char_type_template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of one of the <A href="concepts.html#filter_concepts">Filter</A> or <A href="concepts.html#device_concepts">Device</A> concepts</TD>
+    </TR>
+</TABLE>
+
+<A NAME="char_type_of_type"></A>
+<H4><CODE>io_traits::type</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">see below</SPAN> char_type;</PRE>
+
+<P>The value of the nested type <CODE>type</CODE> depends on the template parameter <CODE>T</CODE> as follows:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=1 CELLPADDING=4>
+<TR><TH><CODE>T</CODE></TH><TH><CODE>char_type</CODE></TH></TR>
+    <TR>
+        <TD VALIGN="top">Sepcialization of <CODE>std::back_insert_iterator</CODE></TD>
+        <TD>The <CODE>value_type</CODE> of the iterator's <CODE>container_type</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">All other types</TD>
+        <TD><CODE>T::char_type</CODE></TD>
+    </TR>
+</TABLE>
+
+<A NAME="int_type_of_ref"></A>
+<H2>Class Template <CODE>int_type_of</CODE></H2>
+
+<H4>Description</H4>
+
+<P><A HREF="http://www.boost.org/libs/mpl/doc/refmanual/metafunction.html" TARGET="_top">Metafunction</A> associating an integral type to each <A href="concepts.html#filter_concepts">Filter</A> or <A href="concepts.html#device_concepts">Device</A> type. Although <CODE>int_type_of</CODE> is designed to be specialized for new Filter and Device types, the default implementation should be suitable for most purposes.
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A HREF="#int_type_template_params" CLASS="documented">T</A>>
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#int_type_template_params">int_type_of</A> {
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">see below</SPAN> <A HREF="#int_type_of_type" CLASS="documented">type</A>;
+};
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="int_type_template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of one of the <A href="concepts.html#filter_concepts">Filter</A> or <A href="concepts.html#device_concepts">Device</A> concepts</TD>
+    </TR>
+</TABLE>
+
+<A NAME="int_type_of_type"></A>
+<H4><CODE>io_traits::type</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">see below</SPAN> char_type;</PRE>
+
+<P>Equal to <CODE>std::char_traits<char_type>::int_type</CODE>, where <CODE>char_type</CODE> is <A HREF="#char_type_of_ref"><CODE>char_type_of<T>::type</CODE></A>.
+
+<A NAME="category_ref"></A>
+<H2>Class Template <CODE>category_of</CODE></H2>
+
+<H4>Description</H4>
+
+<P><A HREF="http://www.boost.org/libs/mpl/doc/refmanual/metafunction.html" TARGET="_top">Metafunction</A> associating a <A HREF="#category_tags">category tag</A> to each <A href="concepts.html#filter_concepts">Filter</A> or <A href="concepts.html#device_concepts">Device</A> type. Although <CODE>category</CODE> is designed to be specialized for new Filter and Device types, the default implementation should be suitable for most purposes.
+
+<H4>Synopsis</H4>
+
+<PRE CLASS="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> boost { <SPAN CLASS="keyword">namespace</SPAN> iostreams {
+
+<SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> <A HREF="#category_template_params" CLASS="documented">T</A>>
+<SPAN CLASS="keyword">struct</SPAN> <A CLASS="documented" HREF="#category_template_params">category_of</A> {
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">see below</SPAN> <A HREF="#category_type" CLASS="documented">type</A>;
+};
+
+} } <SPAN CLASS="comment">// End namespace boost::io</SPAN></PRE>
+
+<A NAME="category_template_params"></A>
+<H4>Template parameters</H4>
+
+<TABLE STYLE="margin-left:2em" BORDER=0 CELLPADDING=2>
+    <TR>
+        <TD VALIGN="top"><I>T</I></TD><TD WIDTH="2em" VALIGN="top">-</TD>
+        <TD>A model of one of the <A href="concepts.html#filter_concepts">Filter</A> or <A href="concepts.html#device_concepts">Device</A> concepts</TD>
+    </TR>
+</TABLE>
+
+<A NAME="category_type"></A>
+<H4><CODE>category::type</CODE></H4>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="omitted">see below</SPAN> type;</PRE>
+
+<P>The value of the nested type <CODE>type</CODE> depends on the template parameter <CODE>T</CODE> as follows:</P>
+
+<TABLE STYLE="margin-left:2em" BORDER=1 CELLPADDING=4>
+    <TR><TH><CODE>T</CODE></TH><TH><CODE>category</CODE></TH></TR>
+    <TR>
+        <TD VALIGN="top">Specialization of <CODE>std::basic_iostream</CODE>, or derived from such a specialization</TD>
+        <TD><CODE>iostream_tag</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">Specialization of <CODE>std::basic_istream</CODE>, or derived from such a specialization</TD>
+        <TD><CODE>istream_tag</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">Specialization of <CODE>std::basic_ostream</CODE>, or derived from such a specialization</TD>
+        <TD><CODE>ostream_tag</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">Specialization of <CODE>std::basic_streambuf</CODE>, or derived from such a specialization</TD>
+        <TD><CODE>streambuf_tag</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">Specialization of <CODE>std::back_insert_iterator</CODE>, or derived from such a specialization</TD>
+        <TD><CODE>insert_iterator_tag</CODE></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">All other types</TD>
+        <TD><CODE>T::category</CODE></TD>
+    </TR>
+</TABLE>
+
+<P>For more information, see <A CLASS="header" href="../../../../boost/iostreams/traits.hpp"><CODE><boost/iostreams/traits.hpp></CODE></A>.</P>
+
+<A NAME="category_tags"></A>
+<H2>Category Tags</H2>
+
+<P>
+    In addition to the various <A href="modes.html#mode_tags">mode tags</A>, the header <A CLASS="header" href="../../../../boost/iostreams/categories.hpp"><CODE><boost/iostreams/categories.hpp></CODE></A> provides the category tags shown in the following table. To produce a new category tag which combines several existing tags, simply define a <CODE>struct</CODE> extending the existing tags. <I>E.g.</I>, 
+    <PRE CLASS="broken_ie">    <SPAN CLASS="keyword">struct</SPAN> category
+        : seekable,
+          filter_tag, 
+          localizable_tag 
+        { };</PRE>
+    This defines a category tag representing <A href="modes.html#seekable">Seekable</A>, <A href="../concepts/localizable.html">Localizable</A> <A href="../concepts/filter.html">Filters</A>.
+</P>
+
+
+<TABLE STYLE="margin-left:2em;margin-bottom:2em" BORDER="1" CELLPADDING="6">
+    <TR><TH>Tag</TH><TH>Description</TH></TR>
+    <TR>
+        <TD VALIGN="top"><CODE>filter_tag</CODE></TD>
+        <TD>Indicates that a type models <A href="../concepts/filter.html">Filter</A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><CODE>device_tag</CODE></TD>
+        <TD>Indicates that a type models <A href="../concepts/device.html">Device</A></TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">
+            <CODE>closable_tag</CODE><BR><CODE>localizable_tag</CODE><BR>
+            <CODE>direct_tag</CODE><BR><CODE>peekable_tag</CODE><BR>
+            <CODE>multichar_tag</CODE>
+        </TD>
+        <TD>
+            Used to indicate <A href="concepts.html#optional_behavior">optional behavior</A> implemented by a Filter or Device type
+        </TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">
+            <CODE>source_tag</CODE><BR>
+            <CODE>sink_tag</CODE><BR>
+            <CODE>bidirectional_device_tag</CODE><BR>
+            <CODE>seekable_device_tag</CODE><BR>
+            <CODE>input_filter_tag</CODE><BR>
+            <CODE>output_filter_tag</CODE><BR>
+            <CODE>bidirectional_filter_tag</CODE><BR>
+            <CODE>seekable_filter_tag</CODE><BR>
+            <CODE>multichar_input_filter_tag</CODE><BR>
+            <CODE>multichar_output_filter_tag</CODE><BR>
+            <CODE>multichar_bidirectional_filter_tag</CODE><BR>
+            <CODE>multichar_seekable_filter_tag</CODE>
+        </TD>
+        <TD>
+            Convenience tags for defining models of the various <A href="../concepts/filter.html">Filter</A> and <A href="../concepts/device.html">Device</A> refinements
+        </TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top">
+            <CODE>istream_tag</CODE><BR>
+            <CODE>ostream_tag</CODE><BR>
+            <CODE>iostream_tag</CODE><BR>
+            <CODE>streambuf_tag</CODE>
+        </TD>
+        <TD>
+            Used internally to distinguish standard stream and stream buffer types
+        </TD>
+    </TR>
+    <TR>
+        <TD VALIGN="top"><CODE>insert_iterator_tag</CODE></TD>
+        <TD>Used internally to distinguish specialization of <CODE>std::back_insert_iterator</CODE></TD>
+    </TR>
+</TABLE>
+
+<!-- Begin Footnotes -->
+
+<HR>
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_1" HREF="#note_1_ref"><SUP>[1]</SUP></A><A CLASS="bib_ref" href="../bibliography.html#iso">[I<SPAN STYLE="font-size:80%">SO</SPAN>]</A> 24.3.1. <I>See</I> <A HREF="http://www.boost.org/more/generic_programming.html#tag_dispatching" TARGET="_top">Tag Dispatching</A> for a discussion.
+</P>
+
+<!-- End Footnotes -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use modification and distribution are subject to the Boost Software License Version 1.0. (See accompanying file <A href="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/guide/views.html b/vendor/pdalboost/libs/iostreams/doc/guide/views.html
new file mode 100644
index 0000000..d75e2fa
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/guide/views.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Views</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">User's Guide</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='pipelines.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='guide.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='exceptions.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<A NAME="overview"></A>
+<H2>3.9 Views</H2>
+
+<HR STYLE="margin-top:1em">
+
+<P>
+    Boost.Iostreams provides a number of templates for combining one or more <A HREF="../concepts/filter.html">Filters</A> or <A HREF="../concepts/device.html">Devices</A> to produce a Filter or Device that performs i/o by delegating to the given components in a straightforward way. Each view consists of a class template, whose template parameters represnt the component Filters and Devices, together with an <A HREF="http://www.boost.org/more/generic_programming.html#object_generator">obj [...]
+</P>
+    
+<P>    
+    The views provided with Boost.Iostreams are summarized in the <A HREF="../quick_reference.html#views">Quick Reference</A>.
+</P>
+  
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/home.html b/vendor/pdalboost/libs/iostreams/doc/home.html
new file mode 100644
index 0000000..76bd72f
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/home.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>The Boost Iostreams library</TITLE>
+    <LINK REL="stylesheet" HREF="../../../boost.css" type="text/css">
+    <LINK REL="stylesheet" HREF="theme/iostreams.css" type="text/css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">The Boost Iostreams Library</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL CLASS="page-index">
+  <DT><A href="#purpose">Purpose</A></DT>
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#documentation">How to Read the Iostreams Documentation</A></DT>
+  <DT><A href="#conventions">Conventions</A></DT>
+</DL>
+
+<HR>
+
+<!--                Core Components                -->
+
+<A NAME="purpose"></A>
+<H2>Purpose</H2>
+
+<P>
+    Boost.Iostreams has three aims:
+</P>
+<UL>
+    <LI CLASS="square">
+        To make it easy to create standard C++ streams and stream buffers for accessing new <A HREF="concepts/source.html">Sources</A> and <A HREF="concepts/sink.html">Sinks</A>.
+    </LI>
+    <LI CLASS="square">
+        To provide a framework for defining <A HREF="concepts/filter.html">Filters</A> and attaching them to standard streams and stream buffers.
+    </LI>
+    <LI CLASS="square">
+        To provide a collection of ready-to-use Filters, Sources and Sinks.
+    </LI>
+</UL>
+
+<P>
+    For example, Boost.Iostreams can be used to create streams to access TCP connections or as a framework for cryptography and data compression. The library includes components for accessing <A HREF="classes/mapped_file.html">memory-mapped files</A>, for file access using operating system <A HREF="classes/file_descriptor.html">file descriptors</A>, for <A HREF="guide/code_conversion.html">code conversion</A>, for text filtering with <A HREF="classes/regex_filter.html">regular expression [...]
+</P>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    At the heart of Boost.Iostreams are a collection of <A HREF="http://www.boost.org/more/generic_programming.html#concept" TARGET="_top">concepts</A> and set of templates which turn models of these concepts into C++ standard library streams and stream buffers.
+</P>
+
+<H3>Concepts</H3>
+
+<P>
+    The fundamental building blocks of the library are the concepts of a <A HREF="concepts/source.html">Source</A>, which provides read access to a sequence of characters, a <A HREF="concepts/sink.html">Sink</A>, which provides write access to a sequence of characters, an <A HREF="concepts/input_filter.html">InputFilter</A>, which filters input read from a Source, and an <A HREF="concepts/output_filter.html">OutputFilter</A>, which filters output written to a Sink. Sources, Sinks and the [...]
+</P>
+
+<H3>Generic Streams and Stream Buffers</H3>
+
+<P>
+    The class templates <A HREF="guide/generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A> and <A HREF="guide/generic_streams.html#stream"><CODE>stream</CODE></A> implement standard stream buffers and streams which perform i/o by delegating to a contained <A HREF="concepts/device.html">Device</A>. The Device is accessed using member functions <CODE>open</CODE>, <CODE>is_open</CODE> and <CODE>close</CODE>, providing an interface similar to the standard file-based streams an [...]
+</P>
+
+<H3>Filtering Streams and Stream Buffers</H3>
+
+<P>
+    For filtering, Boost.Iostreams provides the templates <A HREF="classes/filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A> and <A HREF="classes/filtering_stream.html"><CODE>filtering_stream</CODE></A>. Instances of <CODE>filtering_streambuf</CODE> or <CODE>filtering_stream</CODE> contain <A HREF="classes/chain.html"><CODE>chains</CODE></A> of Filters and Devices accessed with an interface similar to that of <CODE>std::stack</CODE>.
+</P>
+
+<A NAME="documentation"></A>
+<H2>How to Read the Iostreams Documentation</H2>
+
+<P>
+    If you haven't used a pre-release version of the library, start by reading the <A HREF="tutorial/tutorial.html">Tutorial</A>. Read the entire section on writing <A HREF="concepts/device.html">Devices</A>, and at least the first few sections on writing <A HREF="concepts/filter.html">Filters</A>. Even if you've used the library before, you might want to check out the Tutorial, since the library interface has been modified to accommodate <A HREF="guide/asynchronous.html">Asynchronous an [...]
+</P>
+
+<P>
+    Next, take a glance at the <A HREF="quick_reference.html">Quick Reference</A> to get an overview of Boost.Iostream's major components.
+</P>
+
+<P>
+    Finally, consult the <A HREF="guide/guide.html">User's Guide</A>, the <A HREF="reference.html">Reference</A> and the <A HREF="faq.html">FAQ</A> when you have questions not answered by the other sections. The <A HREF="guide/guide.html">User's Guide</A> consists of a collection of short essays, which are mostly independent of each other. The <A HREF="reference.html">Reference</A> contains detailed documentation of each public component of Boost.Iostreams.
+</P>
+
+<A NAME="conventions"></A>
+<H2>Conventions</H2>
+
+<P> 
+    All classes, functions and templates introduced in the documentation are in the
+    namespace <CODE>boost::iostreams</CODE>, unless otherwise indicated. Namespace qualification is usually omitted.
+</P>
+<P> 
+    Specializations of <CODE>std::basic_istream</CODE> will be referred to as 
+    <SPAN CLASS="term">standard input streams</SPAN>, specializations of <CODE>std::basic_ostream</CODE>  
+     as <SPAN CLASS="term">standard output streams</SPAN>, specializations of <CODE>std::basic_iostream</CODE> 
+    as <SPAN CLASS="term">standard i/o streams</SPAN>, and specializations of <CODE>std::basic_streambuf</CODE> 
+    as <SPAN CLASS="term">standard stream buffers</SPAN>. Together, standard input streams, standard output streams and standard i/o streams will be referred to as <SPAN CLASS="term">standard streams</SPAN>. Sometimes the qualifier <I>standard</I> will be omitted.
+</P>
+
+<!-- <UL>
+    <LI CLASS="square"> 
+        All classes, functions and templates introduced in the documentation are in the namespace <CODE>boost::iostreams</CODE> unless otherwise indicated. Namespace qualification will usually be omitted.
+    </LI>
+    <LI CLASS="square"> 
+        Specializations of <CODE>std::basic_istream</CODE> will be referred to as 
+        <SPAN CLASS="term">standard input streams</SPAN>, specializations of <CODE>std::basic_ostream</CODE>  
+         as <SPAN CLASS="term">standard output streams</SPAN>, specializations of <CODE>std::basic_iostream</CODE> 
+        as <SPAN CLASS="term">standard i/o streams</SPAN>, and specializations of <CODE>std::basic_streambuf</CODE> 
+        as <SPAN CLASS="term">standard stream buffers</SPAN>. Together, standard input streams, standard output streams and standard i/o streams will be referred to as <SPAN CLASS="term">standard streams</SPAN>. The qualifier <I>standard</I> will usually be omitted.
+    </LI>
+</UL> -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/index.html b/vendor/pdalboost/libs/iostreams/doc/index.html
new file mode 100644
index 0000000..3edb6e9
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/index.html
@@ -0,0 +1,25 @@
+<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
+   "http://www.w3.org/TR/html4/frameset.dtd"><html>
+<!--
+© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a>
+Distributed under the Boost Software License, Version 1.0. (See
+accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+-->
+<html>
+<head>
+<title>Boost.Iostreams</title>
+</head>
+<frameset cols="230,*">
+    <frame scrolling="auto" name="index" src="menu.html">
+    <frame scrolling="auto" name="content" src="home.html">
+    <noframes>
+        <body>
+        <a href="menu.html"></A>
+        <a href="home.html"></A>
+        <P CLASS="copyright"> 
+            Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+        </P>
+        </body>
+    </noframes>
+</frameset>
+</html>
diff --git a/vendor/pdalboost/libs/iostreams/doc/installation.html b/vendor/pdalboost/libs/iostreams/doc/installation.html
new file mode 100644
index 0000000..33aff56
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/installation.html
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Installation</TITLE>
+    <LINK REL="stylesheet" HREF="../../../boost.css">
+    <LINK REL="stylesheet" HREF="theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Installation</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+    <DT><A HREF="#overview">Overview</A>
+    <DT><A HREF="#ide">Building with an IDE or Makefile</A>
+    <DT><A HREF="#bjam">Building with Boost.Build</A>
+</DL>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    Most of Boost.Iostreams can be used simply by including appropriate headers. This is true, for instance, of all the <A HREF="quick_reference.html#core">core components</A> — including <A HREF="guide/generic_streams.html#stream"><CODE>stream</CODE></A>, <A HREF="guide/generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A>, <A HREF="classes/filtering_stream.html"><CODE>filtering_stream</CODE></A> and <A HREF="classes/filtering_streambuf.html"><CODE>filtering_streambuf [...]
+    Some components, however, are implemented in <CODE>.cpp</CODE> files; in addition, the <A HREF="classes/regex_filter.html">regular expression filters</A> depend on <A HREF="../../regex/index.html" TARGET="_top">Boost.Regex</A>, and the compressions filters rely on the third-party libraries zlib (<A CLASS='bib_ref' NAME='gailly' HREF="bibliography.html#gailly"'>[Gailly]</A>) and libbz2 (<A CLASS='bib_ref' NAME='seward' HREF="bibliography.html#seward"'>[Seward]</A>). To obatin zlib and [...]
+</P>
+
+<P>
+    The components which are implemented in <CODE>.cpp</CODE> or which rely on external libraries can be built in two ways: by adding the appropriate <CODE>.cpp</CODE> files to your IDE project or makefile, or by using <A HREF="../../../tools/build/index.html" TARGET="_top">Boost.Build</A>.
+</P>
+
+<A NAME="ide"></A>
+<H2>Building with an IDE or Makefile</H2>
+
+<P>
+    The following table shows which headers contain components defined in <CODE>.cpp</CODE> files. If your application includes one of these headers, you'll need to add the corresponding <CODE>.cpp</CODE> files to you IDE project or makefile, and to define the preprocessor symbol <CODE>BOOST_IOSTREAMS_NO_LIB</CODE>. In addition, if the <CODE>.cpp</CODE> file depends on an external library, you'll have to build it from the source or link to a pre-built binary.
+</P>
+
+<TABLE CELLPADDING=5 BORDER=1>
+<TR><TH>Header</TH><TH>Source File</TH><TH WIDTH=200>External Library</TH></TR>
+<TR>
+    <TD><A HREF="../../../boost/iostreams/device/file_descriptor.hpp"><CODE>boost/iostreams/device/file_descriptor.hpp</CODE></A></TD> <TD><A HREF="../../../libs/iostreams/src/file_descriptor.cpp"><CODE>file_descriptor.cpp</CODE></A></TD>
+    <TD STYLE='padding-left:1.5em'>-</TD>
+</TR>
+<TR>
+    <TD><A HREF="../../../boost/iostreams/device/mapped_file.hpp"><CODE>boost/iostreams/device/mapped_file.hpp</CODE></A></TD> 
+    <TD><A HREF="../../../libs/iostreams/src/mapped_file.cpp"><CODE>mapped_file.cpp</CODE></A></TD>
+    <TD STYLE='padding-left:1.5em'>-</TD>
+</TR>
+<TR>
+    <TD><A HREF="../../../boost/iostreams/filter/bzip2.hpp"><CODE>boost/iostreams/filter/bzip2.hpp</CODE></A></TD> 
+    <TD><A HREF="../../../libs/iostreams/src/bzip2.cpp"><CODE>bzip2.cpp</CODE></A></TD>
+    <TD STYLE='padding-left:1.5em'>libbz2</TD>
+</TR>
+<TR>
+    <TD><A HREF="../../../boost/iostreams/filter/gzip.hpp"><CODE>boost/iostreams/filter/gzip.hpp</CODE></A></TD> 
+    <TD><A HREF="../../../libs/iostreams/src/gzip.cpp"><CODE>gzip.cpp</CODE></A>, <A HREF="../../../libs/iostreams/src/zlib.cpp"><CODE>zlib.cpp</CODE></A></TD>
+    <TD STYLE='padding-left:1.5em'>zlib</TD>
+</TR>
+<TR>
+    <TD><A HREF="../../../boost/iostreams/filter/regex.hpp"><CODE>boost/iostreams/filter/regex.hpp</CODE></A></TD> 
+    <TD STYLE='padding-left:1em'>-</TD>
+    <TD STYLE='padding-left:1.5em'><A HREF="../../regex/index.html" TARGET="_top">Boost.Regex</A></TD>
+</TR>
+<TR>
+    <TD><A HREF="../../../boost/iostreams/filter/zlib.hpp"><CODE>boost/iostreams/filter/zlib.hpp</CODE></A></TD> 
+    <TD><A HREF="../../../libs/iostreams/src/zlib.cpp"><CODE>zlib.cpp</CODE></A></TD>
+    <TD STYLE='padding-left:1.5em'>zlib</TD>
+</TR>
+</TABLE>
+
+<A NAME="bjam"></A>
+<H2>Building with Boost.Build</H2>
+
+<P>
+    To build with <A HREF="../../../tools/build/v2/index.html" TARGET="_top">Boost.Build</A>, run <I>bjam</I> from the directory <CODE>libs/iostreams/build</CODE>, or from the Boost root directory. If you want to use the compression filters, you may need to set several Boost.Build variables indicating where the source files or pre-built binaries are located. These variables are summarized in the following table.
+</P>
+<P>
+    On most UNIX systems, it should not be necessary to set any of these variables, since the zlib and libbz2 headers and binaries are already installed in locations where they will be found automatically. On Windows, the zlib and bzip2 filters are disabled by default; to enable support for these filters, you will need to set variables indicating the location of the source files, if building from the source, or the location of the headers and binaries, if using pre-built binaries.
+</P>
+
+<TABLE STYLE="margin-bottom:1em" BORDER="1" CELLPADDING="6" CELLSPACING="1">
+<TR>
+    <TH>Variable</TH><TH>Interpretation</TH><TH>Default</TH>
+</TR>
+<TR>
+    <TD><CODE>NO_COMPRESSION</CODE></TD>
+    <TD>
+        Disable support for compression filters.
+    </TD>
+    <TD ALIGN="center">-</TD>
+</TR>
+<TR>
+    <TD><CODE>NO_BZIP2</CODE></TD>
+    <TD>
+        Disable support for the bzip2 filters.
+    </TD>
+    <TD><CODE>1</CODE> (Windows)</TD>
+</TR>
+<TR>
+    <TD><CODE>BZIP2_BINARY</CODE></TD>
+    <TD>
+        Name of the libbz2 binary, not including the file extension, or the "lib" prefix on UNIX. On Windows, if linking with a dynamic build of libbz2, specify the name of the import library.
+    </TD>
+    <TD><CODE>bz2</CODE> (UNIX)<BR><CODE>libbz2</CODE> (Windows)</TD>
+</TR>
+<TR>
+    <TD><CODE>BZIP2_INCLUDE</CODE></TD>
+    <TD>
+        Path to the libbz2 headers, if they're not in a location where they'll be found automatically.
+    </TD>
+    <TD><CODE>BZIP2_SOURCE</CODE></TD>
+</TR>
+<TR>
+    <TD><CODE>BZIP2_LIBPATH</CODE></TD>
+    <TD>
+        Path to the libbz2 binary, if it's not in a location where it will be found automatically. On Windows, if linking with a dynamic build of libbz2, specify the path to the import library.
+    </TD>
+    <TD ALIGN="center">-</TD>
+</TR>
+<TR>
+    <TD><CODE>BZIP2_SOURCE</CODE></TD>
+    <TD>
+        Path to the libbz2 source files, if they're not in a location where they'll be found automatically.
+    </TD>
+    <TD ALIGN="center">-</TD>
+</TR>
+<TR>
+    <TD><CODE>NO_ZLIB</CODE></TD>
+    <TD>
+        Disable support for the zlib filters.
+    </TD>
+    <TD><CODE>1</CODE> (Windows)</TD>
+</TR>
+<TR>
+    <TD><CODE>ZLIB_BINARY</CODE></TD>
+    <TD>
+        Name of the zlib binary, not including the file extension, or the "lib" prefix on UNIX. On Windows, if linking with a dynamic build of zlib, specify the name of the import library.
+    </TD>
+    <TD><CODE>z</CODE> (UNIX)<BR><CODE>zdll</CODE> (Windows)</TD>
+</TR>
+<TR>
+    <TD><CODE>ZLIB_INCLUDE</CODE></TD>
+    <TD>
+        Path to the zlib headers, if they're not in a location where they'll be found automatically.
+    </TD>
+    <TD><CODE>ZLIB_SOURCE</CODE></TD>
+</TR>
+<TR>
+    <TD><CODE>ZLIB_LIBPATH</CODE></TD>
+    <TD>
+        Path to the zlib binary, if it's not in a location where it will be found automatically. On Windows, if linking with a dynamic build of zlib, specify the path to the import library.
+    </TD>
+    <TD ALIGN="center">-</TD>
+</TR>
+<TR>
+    <TD><CODE>ZLIB_SOURCE</CODE></TD>
+    <TD>
+        Path to the zlib source files, if they're not in a location where they'll be found automatically.
+    </TD>
+    <TD ALIGN="center">-</TD>
+</TR>
+</TABLE>
+
+<!-- End Footnotes -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/macros/buffer_sizes.html b/vendor/pdalboost/libs/iostreams/doc/macros/buffer_sizes.html
new file mode 100644
index 0000000..5cf4d88
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/macros/buffer_sizes.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Buffer Sizes</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<STYLE> 
+    DT A { /*text-decoration:none*/ } 
+    LI A { /*text-decoration:none;*/ font: 80% Verdana, Tahoma, Arial, Helvetica, sans-serif }
+</STYLE>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Buffer Sizes</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#headers">Headers</A></DT>
+  <DT><A href="#synopsis">Synopsis</A></DT>
+</DL>
+
+<HR>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The macros <CODE>BOOST_IOSTREAMS_DEFAULT_DEVICE_BUFFER_SIZE</CODE>, <CODE>BOOST_IOSTREAMS_DEFAULT_FILTER_BUFFER_SIZE</CODE> and <CODE>BOOST_IOSTREAMS_DEFAULT_PBACK_BUFFER_SIZE</CODE> can be used to configure the default sizes of buffers allocated by the Iostreams library when a <A HREF="../concepts/filter.html">Filter</A> or <A HREF="../concepts/device.html">Device</A> is attached to a <A HREF="../guide/generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A> or <A HREF=".. [...]
+</P>
+
+<P>The default values are subject to change in future versions of the Iostreams library.</P>
+
+<A NAME="headers"></A>
+<H2>Headers</H2>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/constants.hpp"><CODE><boost/iostreams/constants.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="synopsis"></A>
+<H2>Synopsis</H2>
+
+<PRE CLASS='broken_ie'><SPAN CLASS='preprocessor'>#define</SPAN> BOOST_IOSTREAMS_DEFAULT_DEVICE_BUFFER_SIZE  4096
+<SPAN CLASS='preprocessor'>#define</SPAN> BOOST_IOSTREAMS_DEFAULT_FILTER_BUFFER_SIZE  128
+<SPAN CLASS='preprocessor'>#define</SPAN> BOOST_IOSTREAMS_DEFAULT_PBACK_BUFFER_SIZE   4</PRE>
+
+<!-- Begin Footer -->
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a><br/>Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/macros/macros.html b/vendor/pdalboost/libs/iostreams/doc/macros/macros.html
new file mode 100644
index 0000000..928ac2b
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/macros/macros.html
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Iostreams Library Macros</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<STYLE> 
+    DT A { /*text-decoration:none*/ } 
+    LI A { /*text-decoration:none;*/ font: 80% Verdana, Tahoma, Arial, Helvetica, sans-serif }
+</STYLE>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Iostreams Library Macros</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+    <H4>Macros</H4>
+
+    <DL CLASS="page-index">
+      <DT><A href="workarounds.html#ios"><CODE>BOOST_IOS</CODE></A></DT>
+      <DT><A href="workarounds.html#streams"><CODE>BOOST_IOSTREAMS_BASIC_ISTREAM</CODE></A></DT>
+      <DT><A href="workarounds.html#ios"><CODE>BOOST_IOSTREAMS_BASIC_IOS</CODE></A></DT>
+      <DT><A href="workarounds.html#streams"><CODE>BOOST_IOSTREAMS_BASIC_IOSTREAM</CODE></A></DT>
+      <DT><A href="workarounds.html#streams"><CODE>BOOST_IOSTREAMS_BASIC_OSTREAM</CODE></A></DT>
+      <DT><A href="workarounds.html#streambufs"><CODE>BOOST_IOSTREAMS_BASIC_STREAMBUF</CODE></A></DT>
+      <DT><A href="workarounds.html#char_traits"><CODE>BOOST_IOSTREAMS_CHAR_TRAITS</CODE></A></DT>
+      <DT><A href="workarounds.html#component_access"><CODE>BOOST_IOSTREAMS_COMPONENT</CODE></A></DT>
+      <DT><A href="workarounds.html#component_access"><CODE>BOOST_IOSTREAMS_COMPONENT_TYPE</CODE></A></DT>
+      <DT><A href="buffer_sizes.html"><CODE>BOOST_IOSTREAMS_DEFAULT_DEVICE_BUFFER_SIZE</CODE></A></DT>
+      <DT><A href="buffer_sizes.html"><CODE>BOOST_IOSTREAMS_DEFAULT_FILTER_BUFFER_SIZE</CODE></A></DT>
+      <DT><A href="buffer_sizes.html"><CODE>BOOST_IOSTREAMS_DEFAULT_PBACK_BUFFER_SIZE</CODE></A></DT>
+      <DT><A href="workarounds.html#ios"><CODE>BOOST_IOSTREAMS_FAILURE</CODE></A></DT>
+      <DT><A href="../guide/pipelines.html#boost_iostreams_pipable"><CODE>BOOST_IOSTREAMS_PIPABLE</CODE></A></DT>
+      <DT><A href="workarounds.html#streambufs"><CODE>BOOST_IOSTREAMS_PUBSEEKOFF</CODE></A></DT>
+      <DT><A href="workarounds.html#streambufs"><CODE>BOOST_IOSTREAMS_PUBSEEKPOS</CODE></A></DT>
+      <DT><A href="workarounds.html#streambufs"><CODE>BOOST_IOSTREAMS_PUBSYNC</CODE></A></DT>
+    </DL>
+
+<HR STYLE="margin-top:1em">
+
+<!-- Begin Footer -->
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a><br/>Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/macros/workarounds.html b/vendor/pdalboost/libs/iostreams/doc/macros/workarounds.html
new file mode 100644
index 0000000..1ec866d
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/macros/workarounds.html
@@ -0,0 +1,207 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Broken Compiler Workarounds</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<STYLE> 
+    DT A { /*text-decoration:none*/ } 
+    LI A { /*text-decoration:none;*/ font: 80% Verdana, Tahoma, Arial, Helvetica, sans-serif }
+</STYLE>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Broken Compiler Workarounds</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<DL class="page-index">
+  <DT><A href="#overview">Overview</A></DT>
+  <DT><A href="#reference">Reference</A>
+    <DL class="page-index">
+      <DT><A href="#ios">1. Standard header <CODE><ios></CODE></A></DT>
+      <DT><A href="#streams">2. Templated Streams</A></DT>
+      <DT><A href="#streambufs">3. Templated Stream Buffers</A></DT>
+      <DT><A href="#streambufs">4. Character Traits</A></DT>
+      <DT><A href="#component_access">5. Chain Component Access</A></DT>
+    </DL>
+  </DT>
+</DL>
+
+<HR>
+
+<A NAME="overview"></A>
+<H2>Overview</H2>
+
+<P>
+    The Boost Iostreams library contains several macros useful for writing code which works with compilers which fail to support certain core language features and with defective standard library implementations, such as those which do not provide template streams.
+</P>
+
+<A NAME="reference"></A>
+<H2>Reference</H2>
+
+<A NAME="ios"></A>
+<H3>1. Standard header <CODE><ios></CODE></H3>
+
+<A NAME="ios_headers"></A>
+<H3>Headers</H3>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/detail/ios.hpp"><CODE><boost/iostreams/detail/ios.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="ios_synopsis"></A>
+<H3>Synopsis</H3>
+
+<PRE CLASS='broken_ie'><SPAN CLASS='preprocessor'>#define</SPAN> <A CLASS='documented' HREF="#boost_iostreams_basic_ios">BOOST_IOSTREAMS_BASIC_IOS</A>(ch, tr) ...
+<SPAN CLASS='preprocessor'>#define</SPAN> <A CLASS='documented' HREF="#boost_ios">BOOST_IOS</A> ...
+<SPAN CLASS='preprocessor'>#define</SPAN> <A CLASS='documented' HREF="#boost_iostreams_failure">BOOST_IOSTREAMS_FAILURE</A> ...</PRE>
+
+<A NAME="boost_iostreams_basic_ios"></A>
+<H4><CODE>BOOST_IOSTREAMS_BASIC_IOS</CODE></H4>
+
+<P>Expands to <CODE>std::basic_ios<ch, tr></CODE> for standard libraries which support templated streams, and to <CODE>std::ios</CODE> otherwise.</P>
+
+<A NAME="boost_ios"></A>
+<H4><CODE>BOOST_IOS</CODE></H4>
+
+<P>Expands to <CODE>std::ios_base</CODE> if available, and to <CODE>std::ios</CODE> otherwise. To access the nested class <CODE>std::ios_base::failure</CODE>, use <A HREF="#boost_iostreams_failure"><CODE>BOOST_IOSTREAMS_FAILURE</CODE></A>.
+
+<A NAME="boost_iostreams_failure"></A>
+<H4><CODE>BOOST_IOSTREAMS_FAILURE</CODE></H4>
+
+<P>Expands to <CODE>std::ios_base::failure</CODE> if available, and to a suitable derived class of <CODE>std::exception</CODE> otherwise.</P>
+
+<A NAME="streams"></A>
+<H3>2. Templated Streams</H3>
+
+<A NAME="streams_headers"></A>
+<H3>Headers</H3>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/detail/iostream.hpp"><CODE><boost/iostreams/detail/iostream.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="streams_synopsis"></A>
+<H3>Synopsis</H3>
+
+<PRE CLASS='broken_ie'><SPAN CLASS='preprocessor'>#define</SPAN> <A CLASS='documented' HREF="#boost_iostreams_basic_istream">BOOST_IOSTREAMS_BASIC_ISTREAM</A>(ch, tr) ...
+#define</SPAN> <A CLASS='documented' HREF="#boost_iostreams_basic_ostream">BOOST_IOSTREAMS_BASIC_OSTREAM</A>(ch, tr) ...
+#define</SPAN> <A CLASS='documented' HREF="#boost_iostreams_basic_iostream">BOOST_IOSTREAMS_BASIC_IOSTREAM</A>(ch, tr) ...</PRE>
+
+<A NAME="boost_iostreams_basic_istream"></A>
+<H4><CODE>BOOST_IOSTREAMS_BASIC_ISTREAM</CODE></H4>
+
+<P>Expands to <CODE>std::basic_istream<ch, tr></CODE> for standard libraries which support templated streams, and to <CODE>std::istream</CODE> otherwise.</P>
+
+<A NAME="boost_iostreams_basic_ostream"></A>
+<H4><CODE>BOOST_IOSTREAMS_BASIC_OSTREAM</CODE></H4>
+
+<P>Expands to <CODE>std::basic_ostream<ch, tr></CODE> for standard libraries which support templated streams, and to <CODE>std::ostream</CODE> otherwise.</P>
+
+<A NAME="boost_iostreams_basic_iostream"></A>
+<H4><CODE>BOOST_IOSTREAMS_BASIC_IOSTREAM</CODE></H4>
+
+<P>Expands to <CODE>std::basic_iostream<ch, tr></CODE> for standard libraries which support templated streams, and to <CODE>std::iostream</CODE> otherwise.</P>
+
+<A NAME="streambufs"></A>
+<H3>3. Templated Stream Buffers</H3>
+
+<A NAME="streambufs_headers"></A>
+<H3>Headers</H3>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/detail/iostream.hpp"><CODE><boost/iostreams/detail/streambuf.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="streambufs_synopsis"></A>
+<H3>Synopsis</H3>
+
+<PRE CLASS='broken_ie'><SPAN CLASS='preprocessor'>#define</SPAN> <A CLASS='documented' HREF="#boost_iostreams_basic_streambuf">BOOST_IOSTREAMS_BASIC_STREAMBUF</A>(ch, tr) ...
+#define</SPAN> <A CLASS='documented' HREF="#boost_iostreams_pubseekoff">BOOST_IOSTREAMS_PUBSEEKOFF</A> ...
+#define</SPAN> <A CLASS='documented' HREF="#boost_iostreams_pubseekpos">BOOST_IOSTREAMS_PUBSEEKPOS</A> ...
+#define</SPAN> <A CLASS='documented' HREF="#boost_iostreams_pubsync">BOOST_IOSTREAMS_PUBSYNC</A> ...</PRE>
+
+<A NAME="boost_iostreams_basic_streambuf"></A>
+<H4><CODE>BOOST_IOSTREAMS_BASIC_STREAMBUF</CODE></H4>
+
+<P>Expands to <CODE>std::basic_streambuf<ch, tr></CODE> for standard libraries which support <CODE>std::basic_streambuf</CODE>, and to <CODE>std::streambuf</CODE> otherwise.</P>
+
+
+<A NAME="boost_iostreams_pubseekoff"></A>
+<H4><CODE>BOOST_IOSTREAMS_PUBSEEKOFF</CODE></H4>
+
+<P>Expands to <CODE>pubseekoff</CODE> for standard libraries which support <CODE>std::basic_streambuf::pubseekoff</CODE>, and to <CODE>seekoff</CODE> otherwise.</P>
+
+<A NAME="boost_iostreams_pubseekpos"></A>
+<H4><CODE>BOOST_IOSTREAMS_PUBSEEKPOS</CODE></H4>
+
+<P>Expands to <CODE>pubseekpos</CODE> for standard libraries which support <CODE>std::basic_streambuf::pubseekpos</CODE>, and to <CODE>seekpos</CODE> otherwise.</P>
+
+<A NAME="boost_iostreams_pubsync"></A>
+<H4><CODE>BOOST_IOSTREAMS_PUBSYNC</CODE></H4>
+
+<P>Expands to <CODE>pubsync</CODE> for standard libraries which support <CODE>std::basic_streambuf::pubsync</CODE>, and to <CODE>sync</CODE> otherwise.</P>
+
+<A NAME="char_traits"></A>
+<H3>4. Character Traits</H3>
+
+<A NAME="char_traits_headers"></A>
+<H3>Headers</H3>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/detail/char_traits.hpp"><CODE><boost/iostreams/detail/char_traits.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="char_traits_synopsis"></A>
+<H3>Synopsis</H3>
+
+<PRE CLASS='broken_ie'><SPAN CLASS='preprocessor'>#define</SPAN> <A CLASS='documented' HREF="#boost_iostreams_char_traits">BOOST_IOSTREAMS_CHAR_TRAITS</A>(ch) ...</PRE>
+
+<A NAME="boost_iostreams_char_traits"></A>
+<H4><CODE>BOOST_IOSTREAMS_CHAR_TRAITS</CODE></H4>
+
+
+<P>Expands to <CODE>std::char_traits<ch></CODE> for standard libraries which support <CODE>std::char_traits</CODE>, and to a substitute for <CODE>std::char_traits<char></CODE> otherwise.</P>
+<A NAME="component_access"></A>
+<H3>5. Chain Component Access</H3>
+
+<A NAME="component_access_headers"></A>
+<H3>Headers</H3>
+
+<DL class="page-index">
+  <DT><A CLASS="header" HREF="../../../../boost/iostreams/chain.hpp"><CODE><boost/iostreams/chain.hpp></CODE></A></DT>
+</DL>
+
+<A NAME="component_access_synopsis"></A>
+<H3>Synopsis</H3>
+
+<PRE CLASS='broken_ie'><SPAN CLASS='preprocessor'>#define</SPAN> <A CLASS='documented' HREF="#boost_iostreams_component_type">BOOST_IOSTREAMS_COMPONENT_TYPE</A>(chain, n) ...
+<SPAN CLASS='preprocessor'>#define</SPAN> <A CLASS='documented' HREF="#boost_iostreams_component">BOOST_IOSTREAMS_COMPONENT</A>(chain, n, t) ...</PRE>
+
+<A NAME="boost_iostreams_component_type"></A>
+<H4><CODE>BOOST_IOSTREAMS_COMPONENT_TYPE</CODE></H4>
+
+<P>Used in place of <CODE>chain.component_type(n)</CODE> for compilers which don't support explicit specification of member function template arguments. <CODE>chain</CODE> can be an instance of <A HREF="../classes/filtering_stream.html"><CODE>filtering_stream</CODE></A>, <A HREF="../classes/filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A> or <A HREF="../classes/chain.html"><CODE>basic_chain</CODE></A>.</P>
+
+<P><I>This macro is deprecated. Use <CODE>chain.component_type(n)</CODE> instead.</I></P>
+
+<A NAME="boost_iostreams_component"></A>
+<H4><CODE>BOOST_IOSTREAMS_COMPONENT</CODE></H4>
+
+<P>Used in place of <CODE>chain.component<t>(n)</CODE> for compilers which don't support explicit specification of member function template arguments. <CODE>chain</CODE> can be an instance of <A HREF="../classes/filtering_stream.html"><CODE>filtering_stream</CODE></A>, <A HREF="../classes/filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A> or <A HREF="../classes/chain.html"><CODE>basic_chain</CODE></A>.</P>
+
+<HR STYLE="margin-top:1em">
+
+<!-- Begin Footer -->
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a><br/>Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/menu.html b/vendor/pdalboost/libs/iostreams/doc/menu.html
new file mode 100644
index 0000000..5eda3b9
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/menu.html
@@ -0,0 +1,370 @@
+<!--
+
+Copyright 2005 Jonathan Turkanis
+Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+
+-->
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+
+<!-- ------------------ Links to Stylesheets and Scripts  ------------ -->
+
+    <link rel="stylesheet" type="text/css" href="../../../boost.css">
+    <link rel="stylesheet" type="text/css" href="tree/tree.css">
+    <script language="JavaScript" src="tree/tree.js"></script>
+    <style> CODE { font-size:80% } </style>
+
+<!-- ------------------ Create and Populate Tree Control ------------- -->
+
+    <script language="JavaScript">
+    <!--
+
+    var tree = new tree_control("content"); 
+    tree.add("Introduction", "home.html").parent()
+    tree.add("Tutorial", "tutorial/tutorial.html")
+        .add("Writing Devices")
+            .add("Overview", "tutorial/writing_devices.html").parent()
+            .add("<CODE>container_source</CODE>", "tutorial/container_source.html").parent()
+            .add("<CODE>container_sink</CODE>", "tutorial/container_sink.html").parent()
+            .add("<CODE>container_device</CODE>", "tutorial/container_device.html").parent().parent()
+        .add("Writing Filters")
+            .add("Overview", "tutorial/writing_filters.html", true)
+                .add("Input and Output", "tutorial/writing_filters.html#input_filters_and_output_filters").parent()
+                .add("Filter Helpers", "tutorial/writing_filters.html#filter_helpers").parent()
+                .add("Selecting A Filter", "tutorial/writing_filters.html#selecting_a_filter").parent().parent()
+            .add("Filter Usage", "tutorial/filter_usage.html", true).parent()
+            .add("Shell Comments", "tutorial/shell_comments_filters.html", true)
+                .add("<CODE>stdio_filter</CODE>", "tutorial/shell_comments_filters.html#shell_comments_stdio_filter").parent()
+                .add("<CODE>input_filter</CODE>", "tutorial/shell_comments_filters.html#shell_comments_input_filter").parent()
+                .add("<CODE>output_filter</CODE>", "tutorial/shell_comments_filters.html#shell_comments_output_filter").parent().parent()
+            .add("Line-Wrapping", "tutorial/line_wrapping_filters.html", true)
+                .add("<CODE>stdio_filter</CODE>", "tutorial/line_wrapping_filters.html#line_wrapping_stdio_filter").parent()
+                .add("<CODE>input_filter</CODE>", "tutorial/line_wrapping_filters.html#line_wrapping_input_filter").parent()
+                .add("<CODE>output_filter</CODE>", "tutorial/line_wrapping_filters.html#line_wrapping_output_filter").parent().parent()
+            .add("Tab-Expanding", "tutorial/tab_expanding_filters.html", true)
+                .add("<CODE>stdio_filter</CODE>", "tutorial/tab_expanding_filters.html#tab_expanding_stdio_filter").parent()
+                .add("<CODE>input_filter</CODE>", "tutorial/tab_expanding_filters.html#tab_expanding_input_filter").parent()
+                .add("<CODE>output_filter</CODE>", "tutorial/tab_expanding_filters.html#tab_expanding_output_filter").parent().parent()
+            .add("Dictionary", "tutorial/dictionary_filters.html", true)
+                .add("<CODE>stdio_filter</CODE>", "tutorial/dictionary_filters.html#dictionary_stdio_filter").parent()
+                .add("<CODE>input_filter</CODE>", "tutorial/dictionary_filters.html#dictionary_input_filter").parent()
+                .add("<CODE>output_filter</CODE>", "tutorial/dictionary_filters.html#dictionary_output_filter").parent().parent()
+            .add("UNIX-to-DOS", "tutorial/unix2dos_filters.html", true)
+                .add("<CODE>stdio_filter</CODE>", "tutorial/unix2dos_filters.html#unix2dos_stdio_filter").parent()
+                .add("<CODE>input_filter</CODE>", "tutorial/unix2dos_filters.html#unix2dos_input_filter").parent()
+                .add("<CODE>output_filter</CODE>", "tutorial/unix2dos_filters.html#unix2dos_output_filter").parent().parent()
+            .add("Multi-Character Filters", "tutorial/multichar_filters.html", true)
+                .add("InputFilters", "tutorial/multichar_filters.html#multichar_input_filters").parent()
+                .add("<CODE>shell_comments_mutichar_input_filter</CODE>", "tutorial/multichar_filters.html#shell_comments_multichar_input_filter").parent()
+                .add("OutputFilters", "tutorial/multichar_filters.html#multichar_output_filters").parent()
+                .add("<CODE>shell_comments_multichar_output_filter</CODE>", "tutorial/multichar_filters.html#shell_comments_multichar_ouput_filter").parent().parent()
+            .add("Dual-Use Filters", "tutorial/dual_use_filters.html").parent()
+            .add("Finite State Filters", "tutorial/finite_state_filters.html", true)
+                .add("Finite State Machines", "tutorial/finite_state_filters.html#finite_state_machine").parent()
+                .add("<CODE>dos2unix_fsm</CODE>", "tutorial/finite_state_filters.html#dos2unix_fsm").parent()
+                .add("<CODE>unix2dos_fsm</CODE>", "tutorial/finite_state_filters.html#unix2dos_fsm").parent()
+                .add("<CODE>uncommenting_fsm</CODE>", "tutorial/finite_state_filters.html#uncommenting_fsm");
+    tree.add("User's Guide", "guide/guide.html", true)
+        .add("Concepts", "guide/concepts.html").parent()
+        .add("Modes", "guide/modes.html").parent()
+        .add("Generic Streams", "guide/generic_streams.html").parent()
+        .add("Filtering Streams", "guide/filtering_streams.html").parent()
+        .add("Code Conversion", "guide/code_conversion.html").parent()
+        .add("Asynchronous I/O", "guide/asynchronous.html").parent()
+        .add("Object Lifetimes", "guide/lifetimes.html").parent()
+        .add("Pipelines", "guide/pipelines.html").parent()
+        .add("Views", "guide/views.html").parent()
+        .add("Exceptions", "guide/exceptions.html").parent()
+        .add("Buffering", "guide/buffering.html");
+    var ref = tree.add("Reference", "reference.html");
+    ref.add("Concepts", "concepts/concepts.html", true)
+            .add("Devices", "concepts/concepts.html#devices")
+                .add("BidirectionalDevice", "concepts/bidirectional_device.html").parent()
+                .add("Blocking", "concepts/blocking.html").parent()
+                .add("Device", "concepts/device.html").parent()
+                .add("Direct", "concepts/direct.html").parent()
+                .add("Peekable", "concepts/peekable.html").parent()
+                .add("SeekableDevice", "concepts/seekable_device.html").parent()
+                .add("Sink", "concepts/sink.html").parent()
+                .add("Source", "concepts/source.html").parent().parent()
+            .add("Filters", "concepts/concepts.html#filters")
+                .add("BidirectionalFilter", "concepts/bidirectional_filter.html").parent()
+                .add("DualUseFilter", "concepts/dual_use_filter.html").parent()
+                .add("Filter", "concepts/filter.html").parent()
+                .add("InputFilter", "concepts/input_filter.html").parent()
+                .add("Multi-Character", "concepts/multi_character.html").parent()
+                .add("OutputFilter", "concepts/output_filter.html").parent()
+                .add("Pipable", "concepts/pipable.html").parent()
+                .add("SeekableFilter", "concepts/seekable_filter.html").parent().parent()
+            .add("Other", "concepts/concepts.html#other")
+                .add("Closable", "concepts/closable.html").parent()
+                .add("Flushable", "concepts/flushable.html").parent()
+                .add("Localizable", "concepts/localizable.html").parent()
+                .add("OptimallyBuffered", "concepts/optimally_buffered.html").parent()
+                .add("SymmetricFilter", "concepts/symmetric_filter.html");
+    var classes = ref.add("Classes", "classes/classes.html", true);
+    classes.add("A", "classes/classes.html#a")
+                .add("<CODE>aggregate_filter</CODE>", "classes/aggregate.html").parent()
+                .add("<CODE>array</CODE>", "classes/array.html#array").parent()
+                .add("<CODE>array_sink</CODE>", "classes/array.html#array_sink").parent()
+                .add("<CODE>array_source</CODE>", "classes/array.html#array_source").parent().parent()
+            .add("B", "classes/classes.html#b")
+  				.add("<CODE>back_insert_device</CODE>", "classes/back_inserter.html").parent()
+  				.add("<CODE>basic_array</CODE>", "classes/array.html#array").parent()
+  				.add("<CODE>basic_array_sink</CODE>", "classes/array.html#array_sink").parent()
+  				.add("<CODE>basic_array_source</CODE>", "classes/array.html#array_source").parent()
+  				.add("<CODE>basic_bzip2_compressor</CODE>", "classes/bzip2.html#basic_bzip2_compressor").parent()
+  				.add("<CODE>basic_bzip2_decompressor</CODE>", "classes/bzip2.html#basic_bzip2_decompressor").parent()
+  				.add("<CODE>basic_counter</CODE>", "classes/counter.html").parent()
+  				.add("<CODE>basic_file</CODE>", "classes/file.html#file").parent()
+  				.add("<CODE>basic_file_sink</CODE>", "classes/file.html#file_sink").parent()
+  				.add("<CODE>basic_file_source</CODE>", "classes/file.html#file_source").parent()
+  				.add("<CODE>basic_grep_filter</CODE>", "classes/grep_filter.html").parent()
+  				.add("<CODE>basic_gzip_compressor</CODE>", "classes/gzip.html#basic_gzip_compressor").parent()
+  				.add("<CODE>basic_gzip_decompressor</CODE>", "classes/gzip.html#basic_gzip_decompressor").parent()
+  				.add("<CODE>basic_line_filter</CODE>", "classes/line_filter.html").parent()
+  				.add("<CODE>basic_null_device</CODE>", "classes/null.html#null_device").parent()
+  				.add("<CODE>basic_null_sink</CODE>", "classes/null.html#null_sink").parent()
+  				.add("<CODE>basic_null_source</CODE>", "classes/null.html#null_source").parent()
+  				.add("<CODE>basic_regex_filter</CODE>", "classes/regex_filter.html").parent()
+  				.add("<CODE>basic_stdio_filter</CODE>", "classes/stdio_filter.html").parent()
+  				.add("<CODE>basic_zlib_compressor</CODE>", "classes/zlib.html#basic_zlib_compressor").parent()
+  				.add("<CODE>basic_zlib_decompressor</CODE>", "classes/zlib.html#basic_zlib_decompressor").parent()
+  				.add("<CODE>bzip2_compressor</CODE>", "classes/bzip2.html#basic_bzip2_compressor").parent()
+  				.add("<CODE>bzip2_decompressor</CODE>", "classes/bzip2.html#basic_bzip2_decompressor").parent()
+  				.add("<CODE>bzip2_error</CODE>", "classes/bzip2.html#bzip2_error").parent()
+  				.add("<CODE>bzip2_params</CODE>", "classes/bzip2.html#bzip2_params").parent().parent()
+            .add("C", "classes/classes.html#c")
+  				.add("<CODE>category_of</CODE>", "classes/../guide/traits.html#category_ref").parent()
+  				.add("<CODE>chain</CODE>", "classes/chain.html").parent()
+  				.add("<CODE>char_traits</CODE>", "classes/../classes/char_traits.html").parent()
+  				.add("<CODE>char_type_of</CODE>", "classes/../guide/traits.html#char_type_of_ref").parent()
+  				.add("<CODE>code_converter</CODE>", "classes/code_converter.html").parent()
+  				.add("<CODE>combination</CODE>", "classes/../functions/combine.html#synopsis").parent()
+  				.add("<CODE>composite</CODE>", "classes/../functions/compose.html#composite").parent()
+  				.add("<CODE>counter</CODE>", "classes/counter.html#reference").parent().parent()
+            .add("D", "classes/classes.html#d")
+  				.add("<CODE>device</CODE>", "classes/device.html").parent()
+  				.add("<CODE>dual_use_filter</CODE>", "classes/filter.html#reference").parent()
+  				.add("<CODE>dual_use_wfilter</CODE>", "classes/filter.html#reference").parent().parent()
+            .add("F", "classes/classes.html#f")
+  				.add("<CODE>file</CODE>", "classes/file.html#file").parent()
+  				.add("<CODE>file_descriptor</CODE>", "classes/file_descriptor.html#file_descriptor").parent()
+  				.add("<CODE>file_descriptor_sink</CODE>", "classes/file_descriptor.html#file_descriptor_sink").parent()
+  				.add("<CODE>file_descriptor_source</CODE>", "classes/file_descriptor.html#file_descriptor_source").parent()
+  				.add("<CODE>file_sink</CODE>", "classes/file.html#file_sink").parent()
+  				.add("<CODE>file_source</CODE>", "classes/file.html#file_source").parent()
+  				.add("<CODE>filtering_stream</CODE>", "classes/filtering_stream.html").parent()
+  				.add("<CODE>filtering_streambuf</CODE>", "classes/filtering_streambuf.html").parent()
+  				.add("<CODE>filter</CODE>", "classes/filter.html").parent().parent()
+            .add("G", "classes/classes.html#g")
+  				.add("<CODE>grep_filter</CODE>", "classes/grep_filter.html").parent()
+  				.add("<CODE>gzip_compressor</CODE>", "classes/gzip.html#basic_gzip_compressor").parent()
+  				.add("<CODE>gzip_compressor</CODE>", "classes/gzip.html#basic_gzip_compressor").parent()
+  				.add("<CODE>gzip_decompressor</CODE>", "classes/gzip.html#basic_gzip_decompressor").parent()
+  				.add("<CODE>gzip_error</CODE>", "classes/gzip.html#gzip_error").parent()
+  				.add("<CODE>gzip_params</CODE>", "classes/gzip.html#gzip_params").parent().parent()
+            .add("I", "classes/classes.html#i")
+  				.add("<CODE>input_filter</CODE>", "classes/filter.html#reference").parent()
+  				.add("<CODE>input_wfilter</CODE>", "classes/filter.html#reference").parent()
+  				.add("<CODE>inverse</CODE>", "classes/../functions/invert.html#inverse");
+    classes.add("L", "classes/classes.html#l")
+  				.add("<CODE>line_filter</CODE>", "classes/line_filter.html#reference").parent().parent()
+            .add("M", "classes/classes.html#m")
+  				.add("<CODE>mapped_file</CODE>", "classes/mapped_file.html#mapped_file").parent()
+  				.add("<CODE>mapped_file_sink</CODE>", "classes/mapped_file.html#mapped_file_sink").parent()
+  				.add("<CODE>mapped_file_source</CODE>", "classes/mapped_file.html#mapped_file_source").parent()
+  				.add("<CODE>mode_of</CODE>", "classes/mode.html").parent()
+  				.add("<CODE>multichar_dual_use_filter</CODE>", "classes/filter.html#reference").parent()
+  				.add("<CODE>multichar_dual_use_wfilter</CODE>", "classes/filter.html#reference").parent()
+  				.add("<CODE>multichar_filter</CODE>", "classes/filter.html").parent()
+  				.add("<CODE>multichar_input_filter</CODE>", "classes/filter.html#reference").parent()
+  				.add("<CODE>multichar_input_wfilter</CODE>", "classes/filter.html#reference").parent()
+  				.add("<CODE>multichar_output_filter</CODE>", "classes/filter.html#reference").parent()
+  				.add("<CODE>multichar_output_wfilter</CODE>", "classes/filter.html#reference").parent()
+  				.add("<CODE>multichar_wfilter</CODE>", "classes/filter.html#reference").parent().parent()
+            .add("N", "classes/classes.html#n")
+  				.add("<CODE>newline_filter</CODE>", "classes/newline_filter.html").parent()
+  				.add("<CODE>null_sink</CODE>", "classes/null.html#null_sink").parent()
+  				.add("<CODE>null_source</CODE>", "classes/null.html#null_source").parent().parent()
+            .add("O", "classes/classes.html#o")
+  				.add("<CODE>output_filter</CODE>", "classes/filter.html#reference").parent()
+  				.add("<CODE>output_wfilter</CODE>", "classes/filter.html#reference").parent().parent()
+            .add("R", "classes/classes.html#r")
+  				.add("<CODE>regex_filter</CODE>", "classes/../classes/regex_filter.html#reference").parent()
+  				.add("<CODE>restriction</CODE>", "classes/../functions/restrict.html#restriction").parent().parent()
+            .add("S", "classes/classes.html#s")
+  				.add("<CODE>seekable_filter</CODE>", "classes/filter.html#reference").parent()
+  				.add("<CODE>seekable_wfilter</CODE>", "classes/filter.html#reference").parent()
+  				.add("<CODE>sink</CODE>", "classes/device.html#reference").parent()
+  				.add("<CODE>source</CODE>", "classes/device.html#reference").parent()
+  				.add("<CODE>stdio_filter</CODE>", "classes/stdio_filter.html#reference").parent()
+  				.add("<CODE>stream</CODE>", "classes/../guide/generic_streams.html#stream").parent()
+  				.add("<CODE>stream_buffer</CODE>", "classes/../guide/generic_streams.html#stream_buffer").parent()
+  				.add("<CODE>symmetric_filter</CODE>", "classes/symmetric_filter.html").parent().parent()
+            .add("T", "classes/classes.html#t")
+  				.add("<CODE>tee_device</CODE>", "classes/../functions/tee.html#tee_device").parent()
+  				.add("<CODE>tee_filter</CODE>", "classes/../functions/tee.html#tee_filter").parent().parent()
+            .add("W", "classes/classes.html#w")
+  				.add("<CODE>warray</CODE>", "classes/array.html#array").parent()
+  				.add("<CODE>warray_sink</CODE>", "classes/array.html#array_sink").parent()
+  				.add("<CODE>warray_source</CODE>", "classes/array.html#array_source").parent()
+  				.add("<CODE>wchain</CODE>", "classes/chain.html#wchain").parent()
+  				.add("<CODE>wcounter</CODE>", "classes/counter.html#reference").parent()
+  				.add("<CODE>wdevice</CODE>", "classes/device.html").parent()
+  				.add("<CODE>wfile</CODE>", "classes/file.html#file").parent()
+  				.add("<CODE>wfile_sink</CODE>", "classes/file.html#file_sink").parent()
+  				.add("<CODE>wfile_source</CODE>", "classes/file.html#file_source").parent()
+  				.add("<CODE>wfilter</CODE>", "classes/filter.html").parent()
+  				.add("<CODE>wgrep_filter</CODE>", "classes/grep_filter.html").parent()
+  				.add("<CODE>wline_filter</CODE>", "classes/line_filter.html#reference").parent()
+  				.add("<CODE>wnull_sink</CODE>", "classes/null.html#null_sink").parent()
+  				.add("<CODE>wnull_source</CODE>", "classes/null.html#null_source").parent()
+  				.add("<CODE>wregex_filter</CODE>", "classes/../classes/regex_filter.html#reference").parent()
+  				.add("<CODE>wsink</CODE>", "classes/device.html#reference").parent()
+  				.add("<CODE>wsource</CODE>", "classes/device.html#reference").parent()
+  				.add("<CODE>wstdio_filter</CODE>", "classes/stdio_filter.html#reference").parent().parent()
+            .add("Z", "classes/classes.html#z")
+  				.add("<CODE>zlib_compressor</CODE>", "classes/zlib.html#basic_zlib_compressor").parent()
+  				.add("<CODE>zlib_decompressor</CODE>", "classes/zlib.html#basic_zlib_decompressor").parent()
+  				.add("<CODE>zlib_error</CODE>", "classes/zlib.html#zlib_error").parent()
+  				.add("<CODE>zlib_params</CODE>", "classes/zlib.html#zlib_params");
+    ref.add("Functions", "functions/functions.html", true)
+            .add("<CODE>back_inserter</CODE>", "classes/back_inserter.html#back_inserter").parent()
+            .add("<CODE>close</CODE>", "functions/close.html").parent()
+            .add("<CODE>combine</CODE>", "functions/combine.html").parent()
+            .add("<CODE>compose</CODE>", "functions/compose.html").parent()
+            .add("<CODE>copy</CODE>", "functions/copy.html").parent()
+            .add("<CODE>flush</CODE>", "functions/flush.html").parent()
+            .add("<CODE>get</CODE>", "functions/get.html").parent()
+            .add("<CODE>imbue</CODE>", "functions/imbue.html").parent()
+            .add("<CODE>invert</CODE>", "functions/invert.html").parent()
+            .add("<CODE>offset_to_position</CODE>", "functions/positioning.html#offset_to_position").parent()
+            .add("<CODE>optimal_buffer_size</CODE>", "functions/optimal_buffer_size.html").parent()
+            .add("<CODE>position_to_offset</CODE>", "functions/positioning.html#position_to_offset").parent()
+            .add("<CODE>put</CODE>", "functions/put.html").parent()
+            .add("<CODE>putback</CODE>", "functions/putback.html").parent()
+            .add("<CODE>read</CODE>", "functions/read.html").parent()
+            .add("<CODE>restrict</CODE>", "functions/restrict.html").parent()
+            .add("<CODE>seek</CODE>", "functions/seek.html").parent()
+            .add("<CODE>slice</CODE>", "functions/slice.html").parent()
+            .add("<CODE>tee</CODE>", "functions/tee.html").parent()
+            .add("<CODE>test_filter_pair</CODE>", "functions/filter_test.html#test_pair").parent()
+            .add("<CODE>test_input_filter</CODE>", "functions/filter_test.html#test_input").parent()
+            .add("<CODE>test_output_filter</CODE>", "functions/filter_test.html#test_output").parent()
+            .add("<CODE>write</CODE>", "functions/write.html");
+    ref.add("Macros", "macros/macros.html", true)
+            .add("<CODE>IOS</CODE>", "macros/workarounds.html#ios").parent()
+            .add("<CODE>BASIC_ISTREAM</CODE>", "macros/workarounds.html#streams").parent()
+            .add("<CODE>BASIC_IOS</CODE>", "macros/workarounds.html#ios").parent()
+            .add("<CODE>BASIC_IOSTREAM</CODE>", "macros/workarounds.html#streams").parent()
+            .add("<CODE>BASIC_OSTREAM</CODE>", "macros/workarounds.html#streams").parent()
+            .add("<CODE>BASIC_STREAMBUF</CODE>", "macros/workarounds.html#streambufs").parent()
+            .add("<CODE>CHAR_TRAITS</CODE>", "macros/workarounds.html#char_traits").parent()
+            .add("<CODE>COMPONENT</CODE>", "macros/workarounds.html#component_access").parent()
+            .add("<CODE>COMPONENT_TYPE</CODE>", "macros/workarounds.html#component_access").parent()
+            .add("<CODE>DEFAULT_DEVICE_BUFFER_SIZE</CODE>", "macros/buffer_sizes.html#component_access").parent()
+            .add("<CODE>DEFAULT_FILTER_BUFFER_SIZE</CODE>", "macros/buffer_sizes.html#component_access").parent()
+            .add("<CODE>DEFAULT_PBACK_BUFFER_SIZE</CODE>", "macros/buffer_sizes.html#component_access").parent()
+            .add("<CODE>FAILURE</CODE>", "macros/workarounds.html#ios").parent()
+            .add("<CODE>PIPABLE</CODE>", "guide/pipelines.html#boost_iostreams_pipable").parent()
+            .add("<CODE>PUBSEEKOFF</CODE>", "macros/workarounds.html#streambufs").parent()
+            .add("<CODE>PUBSEEKPOS</CODE>", "macros/workarounds.html#streambufs").parent()
+            .add("<CODE>PUBSYNC</CODE>", "macros/workarounds.html#streambufs").parent().parent().parent()
+    tree.add("Quick Reference", "quick_reference.html");
+    tree.add("FAQ", "faq.html");
+    tree.add("Installation", "installation.html");
+    tree.add("Portability", "portability.html");
+    tree.add("Rationale", "rationale.html");
+    tree.add("Bibliography", "bibliography.html");
+    tree.add("Acknowledgments", "acknowledgments.html");
+    tree.add("Release Notes", "release_notes.html");
+
+    //tree.dump_html = true; 
+    tree.indent = 9;
+    tree.draw();
+
+    // -->
+    </script>
+
+</head>
+<body>
+
+<!-- ------------------ Boost Logo and Library Name ------------------ -->
+
+    <table cellpadding=0 cellspacing=0 clear="both" style="margin:0;padding:0" width=170>
+    <tr>
+    <td>
+    <P CLASS="clipped"><a href="../../../index.htm" target="_top">
+    <img border=0 style="position:relative;left:10" SRC="theme/boost_small.png"></a></P>
+    </td>
+    </tr>
+    </table>
+
+    <table clear="both" style="margin-top:0;margin-left:1em;margin-bottom:.5em;padding:0" width=170>
+    <tr>
+    <td align=left width=170>
+        <a style="text-decoration:none" href="index.html" target="_top">
+            <h1 class="lib-name" style="margin:0">Boost.Iostreams</h1>
+        </a>
+    </td>
+    </tr>
+    </table>
+
+    <hr align="center" width="90%">
+
+    <table style="margin:0;padding:0" width=170>
+    <tr><td>
+
+<!-- ------------------ Markup for Browsers with Scripting Disabled -- -->
+
+    <noscript>
+        <table><tr><td align='left'><table width=150><tr><td><h1 class=tree-caption>Contents</h1></td></tr></table></td></tr><tr><td><div id='list' style='white-space:nowrap;display:'>
+<div class='tree-item'><div style='margin-left:0;text-indent:-0'><span class='tree-label'>1</span>  <a class='tree-text' onfocus='blur_tree()' href='home.html' target='content'><span class='tree-text'>Introduction</span></a></div></div>
+<div class='tree-item'><div style='margin-left:0;text-indent:-0'><span class='tree-label'>2</span>  <a class='tree-text' onfocus='blur_tree()' href='tutorial/tutorial.html' target='content'><span class='tree-text'>Tutorial</span></a></div><div id='list.2' style='white-space:nowrap;display:'>
+<div class='tree-item'><div style='margin-left:18;text-indent:-9'><span class='tree-label'>2.1</span>  <span class='tree-text'>Writing Devices</span></div><div id='list.2.1' style='white-space:nowrap;display:'>
+<div class='tree-item'><div style='margin-left:36;text-indent:-18'><span class='tree-label'>2.1.1</span>  <a class='tree-text' onfocus='blur_tree()' href='tutorial/writing_devices.html' target='content'><span class='tree-text'>Overview</span></a></div></div>
+<div class='tree-item'><div style='margin-left:36;text-indent:-18'><span class='tree-label'>2.1.2</span>  <a class='tree-text' onfocus='blur_tree()' href='tutorial/container_source.html' target='content'><span class='tree-text'><CODE>container_source</CODE></span></a></div></div>
+<div class='tree-item'><div style='margin-left:36;text-indent:-18'><span class='tree-label'>2.1.3</span>  <a class='tree-text' onfocus='blur_tree()' href='tutorial/container_sink.html' target='content'><span class='tree-text'><CODE>container_sink</CODE></span></a></div></div>
+<div class='tree-item'><div style='margin-left:36;text-indent:-18'><span class='tree-label'>2.1.4</span>  <a class='tree-text' onfocus='blur_tree()' href='tutorial/container_device.html' target='content'><span class='tree-text'><CODE>container_device</CODE></span></a></div></div></div></div>
+<div class='tree-item'><div style='margin-left:18;text-indent:-9'><span class='tree-label'>2.2</span>  <span class='tree-text'>Writing Filters</span></div><div id='list.2.2' style='white-space:nowrap;display:'>
+<div class='tree-item'><div style='margin-left:36;text-indent:-18'><span class='tree-label'>2.2.1</span>  <a class='tree-text' onfocus='blur_tree()' href='tutorial/writing_filters.html' target='content'><span class='tree-text'>Overview</span></a></div></div>
+<div class='tree-item'><div style='margin-left:36;text-indent:-18'><span class='tree-label'>2.2.2</span>  <a class='tree-text' onfocus='blur_tree()' href='tutorial/filter_usage.html' target='content'><span class='tree-text'>Filter Usage</span></a></div></div>
+<div class='tree-item'><div style='margin-left:36;text-indent:-18'><span class='tree-label'>2.2.3</span>  <a class='tree-text' onfocus='blur_tree()' href='tutorial/shell_comments_filters.html' target='content'><span class='tree-text'>Shell Comments</span></a></div></div>
+<div class='tree-item'><div style='margin-left:36;text-indent:-18'><span class='tree-label'>2.2.4</span>  <a class='tree-text' onfocus='blur_tree()' href='tutorial/line_wrapping_filters.html' target='content'><span class='tree-text'>Line-Wrapping</span></a></div></div>
+<div class='tree-item'><div style='margin-left:36;text-indent:-18'><span class='tree-label'>2.2.5</span>  <a class='tree-text' onfocus='blur_tree()' href='tutorial/tab_expanding_filters.html' target='content'><span class='tree-text'>Tab-Expanding</span></a></div></div>
+<div class='tree-item'><div style='margin-left:36;text-indent:-18'><span class='tree-label'>2.2.6</span>  <a class='tree-text' onfocus='blur_tree()' href='tutorial/dictionary_filters.html' target='content'><span class='tree-text'>Dictionary</span></a></div></div>
+<div class='tree-item'><div style='margin-left:36;text-indent:-18'><span class='tree-label'>2.2.7</span>  <a class='tree-text' onfocus='blur_tree()' href='tutorial/unix2dos_filters.html' target='content'><span class='tree-text'>UNIX-to-DOS</span></a></div></div>
+<div class='tree-item'><div style='margin-left:36;text-indent:-18'><span class='tree-label'>2.2.8</span>  <a class='tree-text' onfocus='blur_tree()' href='tutorial/multichar_filters.html' target='content'><span class='tree-text'>Multi-Character Filters</span></a></div></div>
+<div class='tree-item'><div style='margin-left:36;text-indent:-18'><span class='tree-label'>2.2.9</span>  <a class='tree-text' onfocus='blur_tree()' href='tutorial/dual_use_filters.html' target='content'><span class='tree-text'>Dual-Use Filters</span></a></div></div>
+<div class='tree-item'><div style='margin-left:36;text-indent:-18'><span class='tree-label'>2.2.10</span>  <a class='tree-text' onfocus='blur_tree()' href='tutorial/finite_state_filters.html' target='content'><span class='tree-text'>Finite State Filters</span></a></div></div></div></div></div></div>
+<div class='tree-item'><div style='margin-left:0;text-indent:-0'><span class='tree-label'>3</span>  <a class='tree-text' onfocus='blur_tree()' href='guide/guide.html' target='content'><span class='tree-text'>User's Guide</span></a></div></div>
+<div class='tree-item'><div style='margin-left:0;text-indent:-0'><span class='tree-label'>4</span>  <a class='tree-text' onfocus='blur_tree()' href='reference.html' target='content'><span class='tree-text'>Reference</span></a></div><div id='list.4' style='white-space:nowrap;display:'>
+<div class='tree-item'><div style='margin-left:18;text-indent:-9'><span class='tree-label'>4.1</span>  <a class='tree-text' onfocus='blur_tree()' href='concepts/concepts.html' target='content'><span class='tree-text'>Concepts</span></a></div></div>
+<div class='tree-item'><div style='margin-left:18;text-indent:-9'><span class='tree-label'>4.2</span>  <a class='tree-text' onfocus='blur_tree()' href='classes/classes.html' target='content'><span class='tree-text'>Classes</span></a></div></div>
+<div class='tree-item'><div style='margin-left:18;text-indent:-9'><span class='tree-label'>4.3</span>  <a class='tree-text' onfocus='blur_tree()' href='functions/functions.html' target='content'><span class='tree-text'>Functions</span></a></div></div>
+<div class='tree-item'><div style='margin-left:18;text-indent:-9'><span class='tree-label'>4.4</span>  <a class='tree-text' onfocus='blur_tree()' href='macros/macros.html' target='content'><span class='tree-text'>Macros</span></a></div></div></div></div>
+<div class='tree-item'><div style='margin-left:0;text-indent:-0'><span class='tree-label'>5</span>  <a class='tree-text' onfocus='blur_tree()' href='quick_reference.html' target='content'><span class='tree-text'>Quick Reference</span></a></div></div>
+<div class='tree-item'><div style='margin-left:0;text-indent:-0'><span class='tree-label'>6</span>  <a class='tree-text' onfocus='blur_tree()' href='faq.html' target='content'><span class='tree-text'>FAQ</span></a></div></div>
+<div class='tree-item'><div style='margin-left:0;text-indent:-0'><span class='tree-label'>7</span>  <a class='tree-text' onfocus='blur_tree()' href='installation.html' target='content'><span class='tree-text'>Installation</span></a></div></div>
+<div class='tree-item'><div style='margin-left:0;text-indent:-0'><span class='tree-label'>8</span>  <a class='tree-text' onfocus='blur_tree()' href='portability.html' target='content'><span class='tree-text'>Portability</span></a></div></div>
+<div class='tree-item'><div style='margin-left:0;text-indent:-0'><span class='tree-label'>9</span>  <a class='tree-text' onfocus='blur_tree()' href='rationale.html' target='content'><span class='tree-text'>Rationale</span></a></div></div>
+<div class='tree-item'><div style='margin-left:0;text-indent:-0'><span class='tree-label'>10</span>  <a class='tree-text' onfocus='blur_tree()' href='bibliography.html' target='content'><span class='tree-text'>Bibliography</span></a></div></div>
+<div class='tree-item'><div style='margin-left:0;text-indent:-0'><span class='tree-label'>11</span>  <a class='tree-text' onfocus='blur_tree()' href='acknowledgments.html' target='content'><span class='tree-text'>Acknowledgments</span></a></div></div>
+<div class='tree-item'><div style='margin-left:0;text-indent:-0'><span class='tree-label'>12</span>  <a class='tree-text' onfocus='blur_tree()' href='release_notes.html' target='content'><span class='tree-text'>Release Notes</span></a></div></div></div></td></tr></table>
+
+
+    </noscript>
+
+<!-- ------------------ Tree Control --------------------------------- -->
+
+    <span id="tree_control"></span>
+
+    </td></tr>
+    </table>
+
+</body>
+</html>
+
diff --git a/vendor/pdalboost/libs/iostreams/doc/portability.html b/vendor/pdalboost/libs/iostreams/doc/portability.html
new file mode 100644
index 0000000..cb2675f
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/portability.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Portability</TITLE>
+    <LINK REL="stylesheet" HREF="../../../boost.css">
+    <LINK REL="stylesheet" HREF="theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Portability</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<P>
+    The Iostreams library has been tested with a wide variety of platforms. Please see the <a href="http://www.boost.org/development/testing.html#RegressionTesting">Boost regression reports</a> for details. 
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/quick_reference.html b/vendor/pdalboost/libs/iostreams/doc/quick_reference.html
new file mode 100644
index 0000000..dc2a9e4
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/quick_reference.html
@@ -0,0 +1,423 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Iostreams Quick Reference</TITLE>
+    <LINK REL="stylesheet" HREF="../../../boost.css">
+    <LINK REL="stylesheet" HREF="theme/iostreams.css">
+<STYLE> 
+    DT A { /*text-decoration:none*/ } 
+    LI A { /*text-decoration:none;*/ font: 80% Verdana, Tahoma, Arial, Helvetica, sans-serif }
+</STYLE>
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Quick Reference</H1>
+    <HR STYLE="margin-bottom:1em">
+
+<!-- End Banner -->
+
+<DL CLASS="page-index">
+  <DT><A href="#core">Core Components</A></DT>
+  <DT><A href="#devices">Devices</A></DT>
+  <DT><A href="#filters">Filters</A></DT>
+  <DT><A href="#algorithms">Algorithms</A></DT>
+  <DT><A href="#views">Views</A></DT>
+</DL>
+
+<HR STYLE="margin-top:1em">
+
+<!-- -------------- Core Components -------------- -->
+
+<A NAME='core'></A>
+<H2>Core Components</H2>
+
+<P>These components form the interface between Boost.Iostreams and the standard iostreams library.</P>
+
+<TABLE STYLE="margin-bottom:1em" BORDER="1" CELLPADDING="6" CELLSPACING="1">
+<TR>
+    <TH>Name</TH>
+    <TH>Header<A STYLE='font-weight:normal' CLASS='footnote_ref' NAME='note_1_ref' HREF="#note_1"><SUP>[1]</SUP></A></TH>
+    <TH>Description</TH>
+</TR>
+<TR>
+    <TD><A HREF="guide/generic_streams.html#stream"><CODE>stream</CODE></A></TD>
+    <TD><A HREF="../../../boost/iostreams/stream.hpp"><CODE>stream.hpp</CODE></A></TD>
+    <TD>
+        Stream template which performs i/o using an instance of its first template parameter, which must model the concept <A HREF="concepts/device.html">Device</A>. Derives from <CODE>std::basic_istream</CODE>, <CODE>std::basic_ostream</CODE> or <CODE>std::basic_iostream</CODE> depending on whether its first template parameter models <A HREF="concepts/source.html">Source</A>, <A HREF="concepts/sink.html">Sink</A> or both.
+    </TD>
+</TR>
+<TR>
+    <TD><A HREF="guide/generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A></TD>
+    <TD><A HREF="../../../boost/iostreams/stream_buffer.hpp"><CODE>stream_buffer.hpp</CODE></A></TD>
+    <TD>
+        Stream buffer template which performs i/o using an instance of its first template parameter, which must model the concept <A HREF="concepts/device.html">Device</A>.
+    </TD>
+</TR>
+<TR>
+    <TD><A HREF="classes/filtering_stream.html"><CODE>filtering_stream</CODE></A></TD>
+    <TD><A HREF="../../../boost/iostreams/filtering_stream.hpp"><CODE>filtering_stream.hpp</CODE></A></TD>
+    <TD>
+        Stream template which performs filtered i/o using a contained <A HREF="classes/chain.html"><CODE>chain</CODE></A>. Derives from <CODE>std::basic_istream</CODE>, <CODE>std::basic_ostream</CODE> or <CODE>std::basic_iostream</CODE> depending on its <A HREF="guide/modes.html">mode</A>, which is specified as its first template parameter.
+    </TD>
+</TR>
+<TR>
+    <TD><A HREF="classes/filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A></TD>
+    <TD><A HREF="../../../boost/iostreams/filtering_streambuf.hpp"><CODE>filtering_streambuf.hpp</CODE></A></TD>
+    <TD>
+        Stream buffer template which performs filtered i/o using a contained <A HREF="classes/chain.html"><CODE>chain</CODE></A>.
+    </TD>
+</TR>
+<TR>
+    <TD><A HREF="classes/chain.html"><CODE>chain</CODE></A></TD>
+    <TD><A HREF="../../../boost/iostreams/chain.hpp"><CODE>chain.hpp</CODE></A></TD>
+    <TD>
+        Sequence of zero or more <A HREF="concepts/filter.html">Filters</A>, followed by an optional <A HREF="concepts/device.html">Device</A>, accessed with a stack-like interface. Used by <A HREF="classes/filtering_stream.html"><CODE>filtering_stream</CODE></A> and <A HREF="classes/filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A>.
+    </TD>
+</TR>
+<TR>
+    <TD><A HREF="classes/code_converter.html"><CODE>code_converter</CODE></A></TD>
+    <TD><A HREF="../../../boost/iostreams/code_converter.hpp"><CODE>code_converter.hpp</CODE></A></TD>
+    <TD>
+        Device adapter which takes a narrow-character <A HREF="concepts/device.html">Device</A> and produces a wide-character <A HREF="concepts/device.html">Device</A> by introducing a layer of <A HREF="guide/code_conversion.html">code conversion</A>.
+    </TD>
+</TR>
+</TABLE>
+
+<!-- -------------- Devices -------------- -->
+
+<A NAME='devices'></A>
+<H2>Devices</H2>
+
+<TABLE STYLE="margin-bottom:1em" BORDER="1" CELLPADDING="6" CELLSPACING="1">
+<TR>
+    <TH>Device</TH>
+    <TH>Header<A STYLE='font-weight:normal' CLASS='footnote_ref' NAME='note_2_ref' HREF="#note_2"><SUP>[2]</SUP></A></TH>
+    <TH>Description</TH>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/array.html#array_source"><CODE>basic_array_source</CODE></A>,<BR>
+        <A HREF="classes/array.html#array_sink"><CODE>basic_array_sink</CODE></A>,<BR>
+        <A HREF="classes/array.html#array"><CODE>basic_array</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/device/array.hpp"><CODE>array.hpp</CODE></A></TD>
+    <TD>
+        Accesses a in-memory character sequence.
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/back_inserter.html#synopsis"><CODE>back_insert_device</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/device/back_inserter.hpp"><CODE>back_inserter.hpp</CODE></A></TD>
+    <TD>
+        Appends to an STL sequence.
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/file.html#file_source"><CODE>basic_file_source</CODE></A>,<BR>
+        <A HREF="classes/file.html#file_sink"><CODE>basic_file_sink</CODE></A>,<BR>
+        <A HREF="classes/file.html#file"><CODE>basic_file</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/device/file.hpp"><CODE>file.hpp</CODE></A></TD>
+    <TD>
+        Accesses the filesystem using a <CODE>std::basic_filebuf</CODE>.
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/null.html#null_source"><CODE>basic_null_source</CODE></A>
+    </TD>
+    <TD ROWSPAN=2><A HREF="../../../boost/iostreams/device/null.hpp"><CODE>null.hpp</CODE></A></TD>
+    <TD>
+        Reads characters from an empty sequence.
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/null.html#null_sink"><CODE>basic_null_sink</CODE></A>
+    </TD>
+    <TD>
+        Consumes and ignores characters.
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/file_descriptor.html#file_descriptor_source"><CODE>file_descriptor_source</CODE></A>,<BR>
+        <A HREF="classes/file_descriptor.html#file_descriptor_sink"><CODE>file_descriptor_sink</CODE></A>,<BR>
+        <A HREF="classes/file_descriptor.html#file_descriptor"><CODE>file_descriptor</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/device/file_descriptor.hpp"><CODE>file_descriptor.hpp</CODE></A></TD>
+    <TD>
+        Accesses the filesystem using an operating system file descriptor or file handle.
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/mapped_file.html#mapped_file_source"><CODE>mapped_file_source</CODE></A>,<BR>
+        <A HREF="classes/mapped_file.html#mapped_file_sink"><CODE>mapped_file_sink</CODE></A>,<BR>
+        <A HREF="classes/mapped_file.html#mapped_file"><CODE>mapped_file</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/device/mapped_file.hpp"><CODE>mapped_file.hpp</CODE></A></TD>
+    <TD>
+        Accesses a memory-mapped file.
+    </TD>
+</TR>
+</TABLE>
+
+<!-- -------------- Filters -------------- -->
+
+<A NAME='filters'></A>
+<H2>Filters</H2>
+
+<TABLE STYLE="margin-bottom:1em" BORDER="1" CELLPADDING="6" CELLSPACING="1">
+<TR>
+    <TH>Category</TH>
+    <TH>Filter</TH>
+    <TH>Header<A STYLE='font-weight:normal' CLASS='footnote_ref' NAME='note_3_ref' HREF="#note_3"><SUP>[3]</SUP></A></TH>
+    <TH>Description</TH>
+</TR>
+
+<!-- -------------- Compression -------------- -->
+
+<TR>
+    <TH ROWSPAN=3>Compression</TH>
+    <TD>
+        <A HREF="classes/bzip2.html#basic_bzip2_compressor"><CODE>basic_bzip2_compressor</CODE></A>,<BR>
+        <A HREF="classes/bzip2.html#basic_bzip2_decompressor"><CODE>basic_bzip2_decompressor</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/filter/bzip2.hpp"><CODE>bzip2.hpp</CODE></A></TD>
+    <TD>
+        Perform compression and decompression using the libbzip2 data compression library (<A CLASS='bib_ref' HREF="bibliography.html#seward">[Seward]</A>).
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/gzip.html#basic_gzip_compressor"><CODE>basic_gzip_compressor</CODE></A>,<BR>
+        <A HREF="classes/gzip.html#basic_gzip_decompressor"><CODE>basic_gzip_decompressor</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/filter/gzip.hpp"><CODE>gzip.hpp</CODE></A></TD>
+    <TD>
+        Perform compression and decompression based on the the G<SPAN STYLE="font-size:80%">ZIP</SPAN> format (<A CLASS="bib_ref" HREF="bibliography.html#deutsch3">[Deutsch3]</A>).
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/zlib.html#basic_zlib_compressor"><CODE>basic_zlib_compressor</CODE></A>,<BR>
+        <A HREF="classes/zlib.html#basic_zlib_decompressor"><CODE>basic_zlib_decompressor</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/filter/zlib.hpp"><CODE>zlib.hpp</CODE></A></TD>
+    <TD>
+        Perform compression and decompression using the zlib data compression library (<A CLASS='bib_ref' HREF="bibliography.html#gailly">[Gailly]</A>).
+    </TD>
+</TR>
+
+<!-- -------------- Text -------------- -->
+
+<TR>
+    <TH ROWSPAN=5>Text</TH>
+    <TD>
+        <A HREF="classes/counter.html"><CODE>basic_counter</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/filter/counter.hpp"><CODE>counter.hpp</CODE></A></TD>
+    <TD>
+        Maintains a character and line count.
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/regex_filter.html"><CODE>basic_regex_filter</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/filter/regex.hpp"><CODE>regex.hpp</CODE></A></TD>
+    <TD>
+        Performs text substitutions using regular expressions from the <A HREF="http://www.boost.org/libs/regex" TARGET="_top">Boost Regular Expression Library</A>.
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/grep_filter.html"><CODE>basic_grep_filter</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/filter/grep.hpp"><CODE>grep.hpp</CODE></A></TD>
+    <TD>
+        Filters character sequences line by line using regular expressions from the  <A HREF="http://www.boost.org/libs/regex" TARGET="_top">Boost Regular Expression Library</A>.
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/newline_filter.html#newline_checker"><CODE>newline_checker</CODE></A>
+    </TD>
+    <TD ROWSPAN=2><A HREF="../../../boost/iostreams/filter/newline.hpp"><CODE>newline.hpp</CODE></A></TD>
+    <TD>
+        Verifies that a character sequence conforms to a given line-ending convention.
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/newline_filter.html#newline_filter"><CODE>newline_filter</CODE></A>
+    </TD>
+    <TD>
+        Converts between the line-ending conventions used by various operating systems.
+    </TD>
+</TR>
+
+<!-- -------------- Helpers -------------- -->
+
+<TR>
+    <TH ROWSPAN=4>Helpers</TH>
+    <TD>
+        <A HREF="classes/line_filter.html"><CODE>basic_line_filter</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/filter/line.hpp"><CODE>line.hpp</CODE></A></TD>
+    <TD>
+        Filters a character sequence one line at a time.
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/stdio_filter.html"><CODE>basic_stdio_filter</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/filter/stdio.hpp"><CODE>stdio.hpp</CODE></A></TD>
+    <TD>
+         Filters by reading from standard input and writing to standard output.
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/aggregate.html"><CODE>aggregate_filter</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/filter/aggregate.hpp"><CODE>aggregate.hpp</CODE></A></TD>
+    <TD>
+         Filters an entire character sequence at once.
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="classes/symmetric_filter.html"><CODE>symmetric_filter</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/filter/symmetric.hpp"><CODE>symmetric.hpp</CODE></A></TD>
+    <TD>
+         Filters using a model of <A HREF="concepts/symmetric_filter.html">SymmetricFilter</A>.
+    </TD>
+</TR>
+</TABLE>
+
+<!-- -------------- Algorithms -------------- -->
+
+<A NAME='algorithms'></A>
+<H2>Algorithms</H2>
+
+<TABLE STYLE="margin-bottom:1em" BORDER="1" CELLPADDING="6" CELLSPACING="1">
+<TR>
+    <TH>Algorithm</TH>
+    <TH>Header</TH>
+    <TH>Description</TH>
+</TR>
+<TR>
+    <TD>
+        <A HREF="functions/copy.html"><CODE>copy</CODE></A>
+    </TD>
+    <TD><A HREF="../../../boost/iostreams/copy.hpp"><CODE>boost/iostreams/copy.hpp</CODE></A></TD>
+    <TD>
+        <P>Reads characters from a <A HREF="concepts/source.html">Source</A> and writes them to a <A HREF="concepts/sink.html">Sink</A> until the end of stream is reached; returns the number of characters written.</P>
+    </TD>
+</TR>
+</TABLE>
+
+<!-- -------------- Views -------------- -->
+
+<A NAME='views'></A>
+<H2>Views</H2>
+
+<P>
+    Each view consists of one or more class templates together with an <A HREF="http://www.boost.org/more/generic_programming.html#object_generator" TARGET="_top">object generator</A>. <I>See</I> <A HREF="guide/views.html">Views</A>.
+</P>
+
+<TABLE STYLE="margin-bottom:1em" BORDER="1" CELLPADDING="6" CELLSPACING="1">
+<TR>
+    <TH>Object Generator</TH>
+    <TH>View Template</TH>
+    <TH>Header<A STYLE='font-weight:normal' CLASS='footnote_ref' NAME='note_1_ref2' HREF="#note_1"><SUP>[1]</SUP></A></TH>
+    <TH>Description</TH>
+</TR>
+<TR>
+    <TD><A HREF="functions/combine.html"><CODE>combine</CODE></A></TD>
+    <TD><A HREF="functions/combine.html#synopsis"><CODE>combination</CODE></A></TD>
+    <TD><A HREF="../../../boost/iostreams/combine.hpp"><CODE>combine.hpp</CODE></A></TD>
+    <TD>
+        Takes a pair of <A HREF="concepts/filter.html">Filters</A> or <A HREF="concepts/device.html">Devices</A> and yields a filter or device which performs input using the first component and output using the second.
+    </TD>
+</TR>
+<TR>
+    <TD><A HREF="functions/compose.html"><CODE>compose</CODE></A></TD>
+    <TD><A HREF="functions/compose.html#composite"><CODE>composite</CODE></A></TD>
+    <TD><A HREF="../../../boost/iostreams/compose.hpp"><CODE>compose.hpp</CODE></A></TD>
+    <TD>
+        Takes a <A HREF="concepts/filter.html">Filter</A> and either a second <A HREF="concepts/filter.html">Filter</A> or a <A HREF="concepts/device.html">Device</A> and yields a Filter or Device whose output flows through the two components in order and whose input flows flows through the two components in reverse order.
+    </TD>
+</TR>
+<TR>
+    <TD><A HREF="functions/invert.html"><CODE>invert</CODE></A></TD>
+    <TD><A HREF="functions/invert.html#inverse"><CODE>inverse</CODE></A></TD>
+    <TD><A HREF="../../../boost/iostreams/invert.hpp"><CODE>invert.hpp</CODE></A></TD>
+    <TD>
+        Takes a <A HREF="concepts/filter.html">Filter</A> and yields a Filter that performs the same filtering algorithm but is an <A HREF="concepts/output_filter.html">OutputFilter</A> if the given component is an <A HREF="concepts/input_filter.html">InputFilter</A>, and an <A HREF="concepts/input_filter.html">InputFilter</A> otherwise.
+    </TD>
+</TR>
+<TR>
+    <TD><A HREF="functions/restrict.html"><CODE>restrict</CODE></A><BR><A HREF="functions/slice.html"><CODE>slice</CODE></A></TD>
+    <TD><A HREF="functions/restrict.html#restriction"><CODE>restriction</CODE></A></TD>
+    <TD><A HREF="../../../boost/iostreams/restrict.hpp"><CODE>restrict.hpp</CODE></A><BR><A HREF="../../../boost/iostreams/slice.hpp"><CODE>slice.hpp</CODE></A></TD>
+    <TD>
+        Takes a <A HREF="concepts/filter.html">Filter</A> or <A HREF="concepts/device.html">Device</A> together with a stream offset and an optional length and yields a <A HREF="concepts/filter.html">Filter</A> or <A HREF="concepts/device.html">Device</A> for accessing the specifed subquence of the given component
+    </TD>
+</TR>
+<TR>
+    <TD ROWSPAN='2'><A HREF="functions/tee.html"><CODE>tee</CODE></A></TD>
+    <TD>
+        <A HREF="functions/tee.html#tee_device"><CODE>tee_device</CODE></A>
+    </TD>
+    <TD ROWSPAN='2'><A HREF="../../../boost/iostreams/tee.hpp"><CODE>tee.hpp</CODE></A></TD>
+    <TD> 
+        Takes a pair of <A HREF="concepts/sink.html">Sinks</A> and yields a Sink which sends all incoming data to both of the given Sinks.
+    </TD>
+</TR>
+<TR>
+    <TD>
+        <A HREF="functions/tee.html#tee_filter"><CODE>tee_filter</CODE></A>
+    </TD>
+    <TD> 
+        Takes a <A HREF="concepts/filter.html">Filter</A> and a <A HREF="concepts/sink.html">Sink</A> and yields a Filter which sends all outgoing data to the Sink in addition to passing it downsteam.
+    </TD>
+</TR>
+</TABLE>
+
+<!-- Begin Footnotes -->
+
+<H4>Notes</H4>
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_1" HREF="#note_1_ref"><SUP>[1]</SUP></A>Pathnames should be interpreted relative to the directory <CODE>boost/iostreams</CODE>.
+</P>
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_2" HREF="#note_2_ref"><SUP>[2]</SUP></A>Pathnames should be interpreted relative to the directory <CODE>boost/iostreams/device</CODE>.
+</P>
+
+<P>
+    <A CLASS="footnote_ref" NAME="note_3" HREF="#note_3_ref"><SUP>[3]</SUP></A>Pathnames should be interpreted relative to the directory <CODE>boost/iostreams/filter</CODE>.
+</P>
+
+<!-- End Footnotes -->
+   
+<!-- Begin Footer -->
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a><br/>Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/rationale.html b/vendor/pdalboost/libs/iostreams/doc/rationale.html
new file mode 100644
index 0000000..3794416
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/rationale.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Rationale</TITLE>
+    <LINK REL="stylesheet" HREF="../../../boost.css">
+    <LINK REL="stylesheet" HREF="theme/iostreams.css">
+    <STYLE>
+        OL OL { list-style-type:lower-alpha }
+    </STYLE>
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Rationale</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H3>Contents</H3>
+
+<DL CLASS="page-index">
+  <DT><A href="#goals">Design Goals</A>
+    <DL CLASS="page-index">
+      <DT><A href="#simplicity">Simplicity</A></DT>
+      <DT><A href="#flexibility">Flexibility</A></DT>
+      <DT><A href="#efficiency">Efficiency</A></DT>
+      <DT><A href="#interoperability">Interoperability</A></DT>
+    </DL>
+  </DT>
+  <DT><A href="#decisions">Design Decisions</A>
+    <DL CLASS="page-index">
+      <DT><A href="#generic">Generic Design</A></DT>
+      <DT><A href="#modes">Modes</A></DT>
+      <DT><A href="#lifetime">Lifetime Management</A></DT>
+      <DT><A href="#chain">Chain Interface</A></DT>
+      <DT><A href="#asynchronous">Asynchronous and Non-Blocking I/O</A></DT>
+    </DL>
+  </DT>
+</DL>
+
+<HR>
+
+<A NAME="goals"></A>
+<H2>Design Goals</H2>
+
+<P>Four criteria shaped the design of Boost.Iostreams:<P>
+
+<OL>
+    <LI><B>Simplicity: </B>The library should be easy to learn, use and extend. 
+    <LI><B>Flexibility:</B> The library should be flexible enough to produce streams and stream buffers with almost any desired characteristics. 
+    <LI><B>Efficiency:</B> Streams and stream buffers produced using the library should be as efficient as hand-written components, in most cases.
+    <LI><B>Interoperability:</B> The library should fit easily within the framework of the C++ standard library. In particular,
+    <OL>
+        <LI>The components used to construct streams and stream buffers — <A HREF="concepts/source.html">Source</A>, <A HREF="concepts/sink.html">Sinks</A>, <A HREF="concepts/input_filter.html">InputFilters</A> and <A HREF="concepts/output_filter.html">OutputFilters</A> — should not requirer a richer interface than standard library streams and stream buffers.
+        <LI>Streams and stream buffers constructed using the library should not require a richer interface than standard library streams and stream buffers.
+    </OL>
+</OL>
+
+<P>
+    Essentially, 4a says that standard library streams and stream buffers should be usable wherever Source and Sinks are usable, while 4b says that says that streams and stream buffers should be usable wherever standard library streams and stream buffers are usable. Both guidelines aim to make it easy to integrate Boost.Iostreams into existing code.
+</P>
+
+<A NAME="simplicity"></A>
+<H3>Simplicity</H3>
+
+<P>
+    Many users have reported that the library is easy to learn and use. It has also proved to be relatively easy to extend. The need for flexibility and efficiency has complicated the design, however. A good example is the large number of <A HREF="guide/modes.html">modes</A> required to represent the full range of streams and stream buffers. Another example is the need optimize the treatment of <A HREF="concepts/device.html">Devices</A> representing in-memory character sequences, such as [...]
+</P>
+
+<A NAME="flexibility"></A>
+<H3>Flexibility</H3>
+
+<P>
+    Although Boost.Iostreams is extremely flexible, it has some limitations. For example, it is not possible to customize the buffering strategy used by <A HREF="guide/generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A>: the user must either choose the default buffering strategy or request unbuffered i/o. Giving the user complete control over the buffering strategy would substantially complicated the library interface and implementation.
+</P>
+
+<A NAME="efficiency"></A>
+<H3>Efficiency</H3>
+
+<P>
+    Preliminary measurements indicate that the streams and stream buffers constructed using Boost.Iostreams perform comparably to hand-written components. Further measurements — and appropriate adjustments to the library implementation  — must await the establishment of a comprehensive set of benchmarks. 
+</P>
+
+<A NAME="interoperability"></A>
+<H3>Interoperability</H3>
+
+<P>
+    Standard library streams and stream buffers can currently be used wherever a Device is allowed; this will change, however, when more support for <A HREF="guide/asynchronous.html">asynchronous and non-blocking i/o</A> is added, since streams and stream buffers are unable to distinguish between temporary and permanent failures to satsify a read or write request. Furthermore, streams and stream buffers defined using Boost.Iostreams can be used wherever a standard library stream or strea [...]
+</P>
+
+<A NAME="decisions"></A>
+<H2>Design Decisions</H2>
+
+<A NAME="generic"></A>
+<H3>Generic Design</H3>
+
+<P>
+     The benefits of generic design are well-known. For example,
+</P>
+<UL>
+    <LI>Existing components — such as streams, stream buffers and iterators — can be integrated easily into the library.
+    <LI>The library can be easily extended to handle new Filter and Device concepts.
+    <LI>The internals of the library, such as the implementation of <A HREF="classes/chain.html">filter chains</A> as lists of stream buffers, can be redesigned without affecting user code. 
+</UL>
+<P>
+     One typical benefit of generic design that is neglible in the present case is the performance gain that comes when virtual function calls are replaced by inline code: because <CODE>std::basic_streambuf</CODE> uses virtual functions as customization points, the library cannot resonably expect to eliminate virtual function calls. The cost of these calls, however, is largely mitigated by buffering.
+</P>
+
+<A NAME="modes"></A>
+<H3>Modes</H3>
+
+<P>
+    The number of supported <A HREF="guide/modes.html">modes</A> adds adds greatly to the complexity of the library. Unfortunately, all the modes seem to be necessary to satisfy the flexibility criterion. The examples <A HREF="guide/modes.html#definitions">here</A> indicate that all but one of the modes have important use cases. The exception is <A HREF="guide/modes.html#bidirectional_seekable">bidirectional seekable</A>; this mode, however, is essentially free once the others are implemented.
+</P>
+
+<P>
+    I/o libraries tend to handle this situation in one of two ways:
+</P>
+<UL>
+    <LI>They support only <A HREF="guide/modes.html#input">input</A> and <A HREF="guide/modes.html#output">output</A>, or
+    <LI>They support additional modes but allow components with different modes to be mixed freely. To avoid runtime failures, users must study the documentation for individual components to determine whether they are compatible.
+</UL>
+
+<P>
+    The second alternative is clearly unacceptable. The first alternative is attractive for its simplicity, but leaves out crucial use cases. Boost.Iostreams tries to achieve the best of both worlds by recommending that new users ignore all modes but <A HREF="guide/modes.html#input">input</A> and <A HREF="guide/modes.html#output">output</A>.
+</P>
+
+<A NAME="lifetime"></A>
+<H3>Lifetime Management</H3>
+
+<P>
+    <A HREF="concepts/filter.html">Filters</A> and <A HREF="concepts/device.html">Devices</A> must either be <A HREF="../../../doc/html/CopyConstructible.html" TARGET="_top">CopyConstructible</A> or be passed to streams and stream buffers using <A HREF="../../../doc/html/ref.html"><CODE>boost::ref</CODE></A>. This requirement can complicate the design of Filters and Devices, since some components that could otherwise be non-copyable must use reference counting. The template <A HREF="clas [...]
+</P>
+
+<A NAME="chain"></A>
+<H3>Chain Interface</H3>
+
+<P>
+    Some pre-release versions of Boost.Iostreams provided <A HREF="classes/chain.html">filter chains</A> with a rich interface that allowed chains to be disconnected and reattached at arbitrary positions, much like <CODE>std::list</CODE>. This functionality was removed to make the library easier to learn; if users find a need for it, it can easily be restored.
+</P>
+
+<A NAME="asynchronous"></A>
+<H3>Asynchronous and Non-Blocking I/O</H3>
+
+<P>
+    The <A HREF="concepts/filter.html">Filter</A> concepts provided by Boost.Iostreams have been designed to accommodate <A HREF="guide/asynchronous.html">asynchronous and non-blocking i/o</A>. The <A HREF="concepts/device.html">Device</A> concepts can accommodate non-blocking i/o, but support for asynchronous i/o will require the introdocution of new Device concepts. This limited support has been added for forward compatibility: when additional concepts and components are introduced, us [...]
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/reference.html b/vendor/pdalboost/libs/iostreams/doc/reference.html
new file mode 100644
index 0000000..3cbcf89
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/reference.html
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Iostreams Library Reference</TITLE>
+    <LINK REL="stylesheet" HREF="../../../boost.css">
+    <LINK REL="stylesheet" HREF="theme/iostreams.css">
+</HEAD>
+<STYLE> 
+    DT A { /*text-decoration:none*/ } 
+    LI A { /*text-decoration:none;*/ font: 80% Verdana, Tahoma, Arial, Helvetica, sans-serif }
+</STYLE>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Reference</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<H2>4. Reference</H2>
+
+<P>
+  4.1. <A href="concepts/concepts.html">Concepts</A><BR>
+  4.2. <A href="classes/classes.html">Classes</A><BR>
+  4.3. <A href="functions/functions.html">Functions</A><BR>
+  4.4. <A href="macros/macros.html">Macros</A>
+</P>
+
+   
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a><br/>Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/release_notes.html b/vendor/pdalboost/libs/iostreams/doc/release_notes.html
new file mode 100644
index 0000000..6a4a8f7
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/release_notes.html
@@ -0,0 +1,294 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Release Notes</TITLE>
+    <LINK REL="stylesheet" HREF="../../../boost.css">
+    <LINK REL="stylesheet" HREF="theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Release Notes</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<h4>1.46</h4>
+
+<ul>
+  <li>
+  Use <code>BOOST_ASSERT</code> instead of <code>assert</code>.
+  </li>
+  <li>
+  Fixed flush regression, see <a href="https://svn.boost.org/trac/boost/ticket/4590">#4590</a>
+  </li>
+</ul>
+
+<h4>1.44</h4>
+
+<p>Lots of fixes in this version, almost all are by Steven Watanabe.</p>
+
+<p>File descriptor fixes:</p>
+
+<ul>
+  <li>
+    <strong>Breaking change:</strong>
+    new constructors and <code>open</code> methods from file descriptors/handles for
+    <code>file_descriptor</code>, <code>file_descriptor_source</code>
+    and <code>file_descriptor_sink</code>. See
+    <a title="File descriptor devices referece" href="classes/file_descriptor.html">the documentation</a>
+    for details. The old methods are still available if you define
+    <code>BOOST_IOSTREAMS_USE_DEPRECATED</code>
+    (<a href="https://svn.boost.org/trac/boost/ticket/3517">#3517</a>).
+  </li>
+  <li>
+    Add <code>BOOST_IOSTREAMS_DECL</code> to
+    <code>file_descriptor_source</code> and
+    <code>file_descriptor_sink</code> fixing their use in dynamic libraries
+    (<a href="https://svn.boost.org/trac/boost/ticket/4335">#4335</a>).
+  </li>
+  <li>
+    Rejigger <code>file_descriptors</code> handling of
+    <code>std::ios_base::openmode</code> to match <code>std::fstream</code>.
+    In particular, truncate existing files, if
+    <code>std::ios_base::trunc</code> is passed
+    (<a href="https://svn.boost.org/trac/boost/ticket/3323">#3323</a>).
+  </li>
+  <li>
+    Open files in append mode on Windows instead of seeking to the end at every
+    write when <code>std::ios_base::app</code> is passed
+    (<a href="https://svn.boost.org/trac/boost/ticket/3323">#3323</a>).
+  </li>
+</ul>
+
+<p>Compression/decompression fixes:</p>
+
+<ul>
+  <li>
+    Don't end the stream produced by a reading through a symmetric_filter
+    prematurely
+    (<a href="https://svn.boost.org/trac/boost/ticket/2318">#2318</a>).
+  </li>
+  <li>
+    Allow building zlib 1.2.4+, using a glob to include only source files that
+    actually exist
+    (<a href="https://svn.boost.org/trac/boost/ticket/4091">#4091</a>).
+  </li>
+  <li>
+    Fix compressing an empty string.
+  </li>
+  <li>
+    Allow bzip2 filters to be closed even if no input has been read
+    (<a href="https://svn.boost.org/trac/boost/ticket/3348">#3348</a>).
+  </li>
+  <li>
+    Throw an exception on an unexpected end of file in
+    <code>bzip2_decompressor</code> instead of going into an infinite loop
+    (<a href="https://svn.boost.org/trac/boost/ticket/2783">#2783</a>).
+  </li>
+  <li>
+    Reset the crc for zlib when we reuse a filter.
+  </li>
+  <li>
+    Make <code>gzip_decompressor</code> a <code>DualUseFilter</code>
+    (<a href="https://svn.boost.org/trac/boost/ticket/1579">#1579</a>).
+  </li>
+  <li>
+    Allow <code>bzip2_decompressor</code> to process multiple concatenated
+    streams
+    (<a href="https://svn.boost.org/trac/boost/ticket/3853">#3853</a>).
+  </li>
+</ul>
+
+<p>Other fixes:</p>
+
+<ul>
+  <li>
+    Make <code>aggregate_filter</code> work with wide characters
+    (<a href="https://svn.boost.org/trac/boost/ticket/3851">#3851</a>).
+  </li>
+  <li>
+    Make <code>symmetric_filter</code> compile with <code>wchar_t</code>
+    (<a href="https://svn.boost.org/trac/boost/ticket/3279">#3279</a>).
+  </li>
+  <li>
+    Fix <code>boost/iostreams/detail/resolve.hpp</code> compilation on xlc.
+  </li>
+  <li>
+    Fix definition of <code>multichar_dual_use_filter_tag</code>
+    (<a href="https://svn.boost.org/trac/boost/ticket/3689">#3689</a>).
+  </li>
+  <li>
+    Make <code>concept_adapter</code> work with custom <code>char_traits</code>
+    (<a href="https://svn.boost.org/trac/boost/ticket/2356">#2356</a>).
+  </li>
+  <li>
+    On windows, open mapped files with just read/write permissions, rather than
+    full control - which might not be available
+    (<a href="https://svn.boost.org/trac/boost/ticket/2996">#2996</a>).
+  </li>
+  <li>
+    Make sure that <code>direct_streambuf</code> and
+    <code>indirect_streambuf</code> are reset correctly on open
+    (<a href="https://svn.boost.org/trac/boost/ticket/4102">#4102</a>).
+  </li>
+  <li>
+    Make <code>basic_file</code> and <code>basic_file_sync</code>
+    <code>Flushable</code>
+    (<a href="https://svn.boost.org/trac/boost/ticket/2998">#2998</a>).
+  </li>
+  <li>
+    Several documentation improvements, including
+    documenting private mapping with <code>mapped_file</code>
+    (<a href="https://svn.boost.org/trac/boost/ticket/1612">#1612</a>).
+  </li>
+  <li>
+    Make the tests more reliable by using Boost.Filesystem's
+    <code>unique_path</code> instead of <code>tmpnam</code>
+    (<a href="https://svn.boost.org/trac/boost/ticket/2325">#2325</a>).
+  </li>
+</ul>
+
+<h4>1.43</h4>
+
+<p>
+More fixes.
+</p>
+
+<ul>
+  <li>
+    Fix <code>write_device_impl<ostream_tag></code>
+    (<a href="https://svn.boost.org/trac/boost/ticket/3839">#3839</a>).
+  </li>
+  <li>
+    Fix error checks after calling SetFilePointer
+    (<a href="https://svn.boost.org/trac/boost/ticket/3953">#3953</a>).
+  </li>
+  <li>
+    Gzip filter shouldn't require its source to be peekable
+    (<a href="https://svn.boost.org/trac/boost/ticket/3723">#3723</a>).
+  </li>
+  <li>
+    In <code>position_to_offset</code>, only cast to
+    <code>stream_offset</code> after calculating <code>_Myoff</code>
+    (<a href="https://svn.boost.org/trac/boost/ticket/3969">#3969</a>).
+  </li>
+  <li>
+    <code>ptrdiff_t</code> is in <code>std</code>
+    (<a href="https://svn.boost.org/trac/boost/ticket/2505">#2505</a>).
+  </li>
+</ul>
+
+<h4>1.42</h4>
+
+<p>
+Fixed many outstanding issues. Thanks to Richard Smith for working on a lot
+of these changes.
+</p>
+
+<ul> 
+  <li> 
+    Allocate exceptions on the stack, not the heap (<a href="https://svn.boost.org/trac/boost/ticket/3612">#3612</a>).
+  </li> 
+  <li> 
+    Fix unthrown exceptions. (<a href="https://svn.boost.org/trac/boost/ticket/3311">#3311</a>).
+  </li> 
+  <li> 
+    Use <code>boost::throw_exception</code> to throw exceptions
+    (<a href="https://svn.boost.org/trac/boost/ticket/2094">#2094</a>).
+  </li> 
+  <li> 
+    Add missing include guard (<a href="https://svn.boost.org/trac/boost/ticket/3010">#3010</a>).
+  </li> 
+  <li> 
+    Use the correct type for buffer_size and pback_size parameters (<a href="https://svn.boost.org/trac/boost/ticket/2894">#2894</a>).
+  </li> 
+  <li> 
+    Support <code>boost::ref(std::istream)</code> in code_converter (<a href="https://svn.boost.org/trac/boost/ticket/3011">#3011</a>).
+  </li> 
+  <li> 
+    Fix CRC on x64 during gzip decompression (<a href="https://svn.boost.org/trac/boost/ticket/3352">#3352</a>).
+  </li> 
+  <li> 
+    Fix mapped file errors in windows (<a href="https://svn.boost.org/trac/boost/ticket/3505">#3505</a>).
+  </li> 
+  <li> 
+    Improved support for Visual C++ 2010.
+  </li> 
+  <li> 
+    Fix usage requirements in boost build.
+  </li> 
+  <li> 
+    Fix some boundary checks in <code>restrict</code> and <code>slice</code>.
+  </li> 
+  <li> 
+    Some minor documentation fixes.
+  </li> 
+  <li> 
+    Avoid Apple macro substitutions for <code>check</code>.
+  </li> 
+</ul>
+
+<h4>1.41</h4>
+
+<p>
+Some old unreleased developments. There are still several open issues that
+should be fixed in the next version.
+</p>
+<ul> 
+  <li> 
+    Add a grep filter (<a href="https://svn.boost.org/trac/boost/ticket/1627">#1627</a>).
+  </li> 
+  <li> 
+    Support archives with multiple members (<a href="https://svn.boost.org/trac/boost/ticket/1896">#1896</a>).
+  </li> 
+  <li> 
+    Make <code><span class="identifier">tee</span></code> work with input
+    streams (<a href="https://svn.boost.org/trac/boost/ticket/791">#791</a>).
+  </li> 
+  <li> 
+    Improved filesystem interoperability.
+  </li> 
+  <li> 
+    Several warnings fixed or suppressed (including
+    <a href="https://svn.boost.org/trac/boost/ticket/1618">#1618</a>,
+    <a href="https://svn.boost.org/trac/boost/ticket/1875">#1875</a>,
+    <a href="https://svn.boost.org/trac/boost/ticket/2779">#2779</a>).
+  </li> 
+  <li> 
+    Various other fixes (including
+    <a href="https://svn.boost.org/trac/boost/ticket/1580">#1580</a>,
+    <a href="https://svn.boost.org/trac/boost/ticket/1671">#1671</a>).
+  </li> 
+</ul>
+
+<h3>1.35</h3>
+
+<P>1. The semantics of <A HREF="functions/close.html"><CODE>close</CODE></A> has been modified:</P>
+
+<UL>
+<LI>Calling <CODE>close</CODE> with a <CODE>std::ios_base::openmode</CODE> other than <CODE>in</CODE> or <CODE>out</CODE> is deprecated.</LI>
+<LI>A new overload of <CODE>close</CODE> taking a single Device argument has been provided as a convenience.</LI>
+<LI><A HREF="concepts/dual_use_filter.html">DualUseFilters</A> receive only one closure notification.</LI>
+<LI><A HREF="guide/generic_streams.html">Generic streams and stream buffers</A> and <A HREF="guide/filtering_streams.html">filtering streams and stream buffers</A> are now <A HREF="concepts/closable.html">Closable</A>. For filtering streams and stream buffers, <CODE>close</CODE> calls <A HREF="classes/filtering_stream.html#pop"><CODE>pop</CODE></A>.
+</UL>
+
+<P><EM>These changes will break some existing code</EM>. They were necessary to resolve inconsistencies in the prior specification that resulted in a number of reported bugs.</P>
+
+<P>2. The function template <a href="functions/slice.html"><code>slice</code></a> has been introduced as an alias of <a href="functions/restrict.html"><code>restrict</code></a>, for platforms that treat <code>restrict</code> as a keyword.</P>
+
+<P>3. Numerous bugs have been fixed, many relating to <a href="functions/close.html"><code>close</code></a>, <a href="functions/copy.html"><code>copy</code></a>, and <a href="classes/file_descriptor.html">file descriptors</a>.</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/theme/boost.png b/vendor/pdalboost/libs/iostreams/doc/theme/boost.png
new file mode 100755
index 0000000..acc6cf9
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/theme/boost.png differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/theme/boost_small.png b/vendor/pdalboost/libs/iostreams/doc/theme/boost_small.png
new file mode 100755
index 0000000..acc6cf9
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/theme/boost_small.png differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/theme/iostreams.css b/vendor/pdalboost/libs/iostreams/doc/theme/iostreams.css
new file mode 100755
index 0000000..fcaa6a9
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/theme/iostreams.css
@@ -0,0 +1,220 @@
+/*
+ * (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+ * (C) Copyright 2004-2007 Jonathan Turkanis
+ * Distributed under the Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * Adapted Boost.Spirit stylesheet (www.boost.org/libs/spirit)
+ */
+
+BODY
+{
+    background-color: #FFFFFF;
+    margin: 1em 2em 1em 2em;
+}
+
+H1, H2, H3, H4, H5, H6 
+{ 
+    font-family: Verdana, Tahoma, Arial, Helvetica, sans-serif;
+    font-weight: bold;
+    text-align: left;
+    color: black
+}
+
+H1 { text-align: left }
+H2 { font-size: 140% }
+H3 { font-size: 120% }
+H5 { font-style: italic  }
+H6 { font-variant: small-caps }
+
+A: { text-decoration:none }
+A:link { text-decoration:none }
+A:visited { text-decoration:none }
+A:active { text-decoration:none }
+A:hover { text-decoration:underline }
+
+DL 
+{ 
+    margin-top:0;margin-bottom:0;
+    padding-top:0;padding-bottom:0
+}
+DT DL { margin-left:2em; }
+
+PRE
+{
+    border-top: gray 1pt solid;
+    border-right: gray 1pt solid;
+    border-left: gray 1pt solid;
+    border-bottom: gray 1pt solid;
+
+    padding-top: 2pt;
+    padding-right: 2pt;
+    padding-left: 2pt;
+    padding-bottom: 2pt;
+
+    display: block;
+    font-family: "courier new", courier, mono;
+    background-color: #eeeeee; font-size: small
+}
+
+PRE.plain_code
+{
+    font-size: 100%;
+    background-color:#FFFFFF;
+    border:none;
+    margin:0;
+    padding:0
+}
+
+PRE.plain
+{
+    font-family: "Times New Roman", Times, serif
+    font-size: 100%;
+    background-color:#FFFFFF;
+    border:none;
+    margin:0;
+    padding:0
+}
+
+PRE.broken_ie 
+{
+    font-size: 10pt
+}
+
+/* H3 CODE { font-size: 120% } */
+
+CODE
+{
+    font-family: "Courier New", Courier, mono
+}
+
+P CODE { font-size: 80% }
+T CODE { font-size: 80% }
+TD CODE { font-size: 80% }
+TH CODE { font-size: 80% }
+DL CODE { font-size: 80% }
+DT CODE { font-size: 80% }
+UL CODE { font-size: 80% }
+OL CODE { font-size: 80% }
+H3 CODE { font-size: 105% }
+H4 CODE { font-size: 105% }
+
+TT
+{
+    display: inline;
+    font-family: "Courier New", Courier, mono;
+    color: #000099;
+    font-size: small
+}
+
+P
+{
+    font-family: "Times New Roman", Times, serif
+}
+
+UL
+{
+    font-family: "Times New Roman", Times, serif
+}
+
+OL
+{
+    font-family: "Times New Roman", Times, serif
+}
+
+UL LI 
+{ 
+    list-style-type: square; 
+    list-style-image: url("wedge.gif"); 
+}
+
+TABLE { margin-left:2em }
+TABLE.concept { margin-left:0 }
+
+/* LI.square { list-style-type: square } */
+
+/* A.footnote_ref { text-decoration: none } */
+/* A.bib_ref { text-decoration: none } */
+
+A.caption_ref::visited { color: black }
+
+A::visited { color: #3344cc }
+
+H4.banner { margin:.3em }
+
+TD.banner { text-align:center }
+
+A.banner 
+{ 
+    color: black;
+    font-size: 120%
+    font-family: Verdana, Tahoma, Arial, Helvetica, sans-serif; 
+    font-weight: bold; 
+    text-decoration:none
+}
+
+.menu 
+{ 
+    color: black;
+    font-size: 70%;
+    font-family: Verdana, Tahoma, Arial, Helvetica, sans-serif; 
+    font-weight: bold; 
+    text-decoration:none;
+}
+A.menu:visited { color: black; }
+
+.menu_disabled
+{ 
+    color: #999999;
+    font-size: 70%;
+    font-family: Verdana, Tahoma, Arial, Helvetica, sans-serif; 
+    font-weight: bold; 
+    text-decoration:none;
+}
+
+DIV.nav { text-align: right; padding-top: 0.3em }
+.nav A { padding-left: 0.3em }
+
+.title                  { text-align: center; margin:1.5em }
+.literal                { color: #790000; /*#444444; font-style: italic*/}
+.numeric_literal        { color: #990000}
+.keyword                { color: #0000CC; /*#000080 font-weight: bold;*/ }
+.library                { font-weight: bold; color: #000000}
+.documented             { font-weight: bold; color: #000000}
+A.documented::visited   { font-weight: bold; color: #000000; text-decoration:none}
+.defined                { font-weight: bold; color: #525252}
+.comment                { font-style: italic; color: #008000}
+.special                { color: #800040}
+.preprocessor           { color: #008000}
+.string                 { font-style: italic; color: #666666}
+.copyright              { font-size: small}
+.white_bkd              { background-color: #FFFFFF}
+.dk_grey_bkd            { background-color: #999999}
+.quotes                 { color: #666666; font-style: italic; font-weight: bold}
+.omitted                { color: #007236; font-style: italic }
+.banner                 { text-align: center }
+/* .header                 { text-decoration: none } */
+.semantics              { font-weight:bold }
+.caption    
+{
+    font-size: 65%; 
+    font-family: Verdana, Tahoma, Arial, Helvetica, sans-serif
+}
+.caption_ref    
+{
+    font-size: 80%; 
+    font-family: Verdana, Tahoma, Arial, Helvetica, sans-serif;
+    font-weight: bold;
+    color: black;
+    text-decoration: none
+}
+.term   
+{
+    font-weight: bold;
+    font-style: italic
+}
+.copyright 
+{
+    font: 80%/120%;
+    margin:0
+}
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/theme/wedge.gif b/vendor/pdalboost/libs/iostreams/doc/theme/wedge.gif
new file mode 100755
index 0000000..07c3dd3
Binary files /dev/null and b/vendor/pdalboost/libs/iostreams/doc/theme/wedge.gif differ
diff --git a/vendor/pdalboost/libs/iostreams/doc/tree/tree.css b/vendor/pdalboost/libs/iostreams/doc/tree/tree.css
new file mode 100755
index 0000000..814a7de
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tree/tree.css
@@ -0,0 +1,34 @@
+/*
+ * (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+ * (C) Copyright 2003-2007 Jonathan Turkanis
+ * Distributed under the Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ */
+
+BODY { padding:5; margin:5 }
+HR { width:95%; text-align:center }
+DIV.tree-item { font-family:"Times New Roman",serif }
+SPAN.tree-icon { color:#0000ee }
+A.tree-icon, A.tree-text { text-decoration:none }
+A.tree-text { color:#0000ee }
+A:visited.tree-text { color:#0000ee }
+.lib-name, .tree-caption
+{ 
+    margin-bottom:0;
+    font-size:108%;
+    font-family:Verdana,Tahoma,Arial,Helvetica,sans-serif;
+    text-align:center;
+    color:black
+}
+.tree-sync 
+{ 
+    font-size:10px;
+    font-family:Verdana,Tahoma,Arial,Helvetica,sans-serif;
+    text-decoration:none;
+    color:#0000ee 
+}
+P.tree-sync 
+{ 
+    text-align:center;
+    margin-bottom:1em
+}
diff --git a/vendor/pdalboost/libs/iostreams/doc/tree/tree.js b/vendor/pdalboost/libs/iostreams/doc/tree/tree.js
new file mode 100755
index 0000000..d88e872
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tree/tree.js
@@ -0,0 +1,428 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+//--------------Event-handlers------------------------------------------------//
+
+function toggle(id) { get_tree().find(id).toggle(); }
+function blur_tree() 
+{ 
+    if (  window.event && 
+          window.event.srcElement && 
+          window.event.srcElement.blur &&
+          window.event.srcElement != document.body  )
+        window.event.srcElement.blur();
+    else if (target_frame()) 
+        target_frame().window.focus(); 
+}
+document.onclick = blur_tree;
+
+//--------------Netscape 4.x-specific-----------------------------------------//
+
+window.saved_width = window.outerWidth;
+function reload_tree() 
+{   
+    if (window.outerWidth != window.saved_width) 
+        window.location.reload();
+}
+if (window.Event && Event.RESIZE) {
+    window.captureEvents(Event.RESIZE);
+    window.onResize = reload_tree;
+}
+
+//--------------Functions for browser-sniffing--------------------------------//
+
+function major_version(app)
+{
+    var index = navigator.userAgent.indexOf(app);
+    if (index == -1)
+        return -1;
+    return parseInt(navigator.userAgent.charAt(index + app.length + 1));
+}
+function dom_support()
+{
+    if (dom_support.cache == null)
+        dom_support.cache = dom_support_impl();
+    return dom_support.cache;
+}
+function dom_support_impl()
+{
+    var version;
+    if ( (version = major_version("Mozilla")) != -1 &&
+         navigator.userAgent.indexOf("compatible") == -1 ) 
+        return version > 4;
+    if ((version = major_version("Opera")) != -1) 
+        return version > 6;
+    if ((version = major_version("Konqueror")) != -1) 
+        return version > 2;
+    if ((version = major_version("Links")) != -1) 
+        return false;
+    return document.getElementById || document.all;
+}
+
+//--------------Utility functions---------------------------------------------//
+
+function target_frame() 
+{ 
+    return get_tree() ? top.frames[get_tree().target] : null; 
+}
+function get_tree() { return document.tree_control; }
+function static_display() { return !dom_support() || get_tree().dump_html; }
+function elt_by_id(id)
+{
+    return document.all ?
+        document.all[id] :
+        document.getElementById ?
+            document.getElementById(id) :
+            null;
+}
+function replace_query(url, query)
+{
+    var pos;
+    if ((pos = url.indexOf("?")) != -1)
+        url = url.substring(0, pos);
+    return url + "?" + query;
+}
+
+//--------------Functions for HTML-generation---------------------------------//
+
+function icon_char(state)
+{
+    return state == tree_node.expanded ?
+                "-" :
+                state == tree_node.collapsed ?
+                    "+" :
+                    " ";
+}
+function html_list(id, display, margin)
+{ 
+    return "<div id='" + id + "' style='white-space:nowrap;display:" + 
+           display + "'>";
+}
+function html_list_item(content)
+{ 
+    return "\n<div class='tree-item'>" + content + "</div>"; 
+}
+function html_anchor(content, cl, href, target)
+{ 
+    return "<a class='" + cl + "' onfocus='blur_tree()" + 
+           "' href='" +  href + "'" + 
+           (target ? " target='" + target + "'" : "") +
+           ">" + content + "</a>"; 
+}
+
+//--------------Definition of class tree_node---------------------------------//
+
+function tree_node__add(text_or_node, link_or_hide, hide) 
+{     
+    if (this.state == tree_node.neutral)
+        this.state = tree_node.collapsed;
+    var k;
+    if (text_or_node.length != null) {
+        k = new tree_node(text_or_node, link_or_hide);
+        k.hide_kids = hide != null ? hide : false;
+    } else {
+        k = text_or_node;
+        k.hide_kids = link_or_hide != null ? link_or_hide : false;
+    }
+    k.mom = this;
+    if (this.kids == null)
+        this.kids = new Array();
+    this.kids[this.kids.length] = k; 
+    return k;
+}
+function tree_node__level() 
+{ 
+    var level;
+    var node;
+    for (node = this.mom, level = -1; node; node = node.mom, ++level)
+        ;
+    return level;
+}
+function tree_node__parent() { return this.mom; }
+function tree_node__print() 
+{
+    var icon = 
+        !static_display() ?  
+            "<span style='font-family:monospace' class='tree-icon' id='icon" + 
+                 this.id + "'>" + icon_char(this.state) + "</span>  " :
+            "";
+    var handler = 
+        !static_display() && this.kids ?
+            "javascript:toggle(\"id" + this.id + "\")" :
+            "";
+    var text = "<span class='tree-text'>" + this.text + "</span>"
+    var tree = get_tree();
+    var indent = tree.indent * this.level();
+    return html_list_item(
+               "<div style='margin-left:" + (2 * indent) + 
+               ";text-indent:-" + indent + "'>" +
+               ( !tree.dump_html ?
+                     this.kids ?
+                         html_anchor(icon, "tree-icon", handler) :
+                         icon :
+                     "" ) +
+               ( tree.numbered ? 
+                     "" + "<span class='tree-label'>" + 
+                         this.id.substring(1) + "</span>" : 
+                     "" ) +
+               "  " +
+               ( this.link ?
+                     html_anchor( text, "tree-text", this.link, 
+                                  tree.target ) :
+                     text ) + 
+               "</div>" + 
+               this.print_kids()
+           );
+}
+function tree_node__print_kids(margin) 
+{
+    var result = "";
+    if (this.kids != null && (!static_display() || !this.hide_kids)) {
+        if (margin == null)
+            margin = get_tree().indent;
+        result += html_list( "list" + this.id,
+                             this.state == tree_node.collapsed && 
+                             !static_display() 
+                                ? "none" : "",
+                             margin );
+        for (var z = 0; z < this.kids.length; ++z) {
+            var k = this.kids[z];
+            k.id = this.id + "." + (z + 1);
+            result += k.print();
+        }
+        result += "</div>";
+    }
+    return result;
+}
+function tree_node__toggle(expand) 
+{
+    if ( static_display() ||
+         this.kids == null || 
+         expand != null && expand == 
+            (this.state == tree_node.expanded) )
+    {
+        return;
+    }
+    this.state = 
+        this.state == tree_node.expanded ?
+            tree_node.collapsed :
+            tree_node.expanded;
+    elt_by_id("icon" + this.id).innerHTML = 
+        icon_char(this.state);
+    elt_by_id("list" + this.id).style.display = 
+        this.state == tree_node.expanded ?
+            "" : 
+            "none";
+}
+function add_methods(obj)
+{
+    obj.add = tree_node__add;
+    obj.level = tree_node__level;
+    obj.parent = tree_node__parent;
+    obj.print = tree_node__print;
+    obj.print_kids = tree_node__print_kids;
+    obj.toggle = tree_node__toggle;
+}
+function tree_node(text, link) 
+{
+    // Member data
+    this.text = text;
+    this.link = link;
+    this.mom = null;
+    this.kids = null;
+    this.id = null;
+    this.state = 0; // Neutral.
+
+    if (!add_methods.prototype)
+        add_methods(this);
+}
+tree_node.neutral = 0;
+tree_node.expanded = 1;
+tree_node.collapsed = 2;
+if (tree_node.prototype)
+    add_methods(tree_node.prototype);
+                
+//--------------Definition of class tree_control------------------------------//
+
+function tree_control__add(text, link, hide) 
+{ 
+    return this.root.add(text, link, hide); 
+}
+function tree_control__draw() 
+{ 
+    var tree    = get_tree();
+    var dom     = dom_support();
+    var element = dom ? elt_by_id('tree_control') : null;
+    if (element || !dom || tree.drawn) {
+        var html = tree.html();
+        if (tree.dump_html) {
+            var pat = new RegExp("<", "g");
+            html = "<pre>" + html.replace(pat, "<") + "</pre>";
+            if (document.body.innerHTML)
+                document.body.innerHTML = html;
+            else 
+                document.write(html);
+        } else if (dom) {
+            element.innerHTML = html;
+        } else {
+            document.open();
+            document.write( 
+                "<body>" + html +
+                ( major_version("MSIE") == 3 ?
+                     "<noscript>" :
+                     document.layers ?
+                         "<layer visibility='hide'>" :
+                         "<table width=0 height=0 style='" + 
+                         "visibility:hidden;display:none'><tr><td>" ) 
+            );
+            document.close();
+        } 
+        tree.drawn = true;
+        tree.load();
+    } else { 
+        var t = navigator.userAgent.indexOf("Clue") != -1 ? 500 : 100;
+        setTimeout("tree_control__draw()", t); 
+    }
+}
+function tree_control__find(id) 
+{ 
+    var indices = id.split(".");
+    var node = this.root;
+    for (var z = 1; z < indices.length; ++z) 
+        node = node.kids[indices[z] - 1];
+    return node;
+}
+function tree_control__html()
+{
+    return  "<table><tr><td align='left'><table width=150><tr><td>" +
+            "<h1 class=tree-caption>" + this.caption + "</h1></td></tr>" +
+            ( !static_display() ? 
+                  "<tr><td><p class='tree-sync'><a title='reload current " + 
+                      "page with a url suitable for bookmarking' class=" +
+                      "'tree-sync' href='javascript:get_tree().sync()'>" + 
+                      "[link to this page]</a></p></td></tr>" :
+                  "" ) + 
+            "</table></td></tr><tr><td>" + this.root.print_kids(0) + 
+            "</td></tr></table>";
+}
+function load_target(url)
+{
+    var target;
+    if ((target = target_frame()) && target.location.href != url)
+        target.location.replace(url);
+    else {
+        setTimeout("load_target('" + url + "')", 100);
+    }
+}
+function tree_control__load() 
+{ 
+    var query;
+    if ((query = top.location.search).length == 0) 
+        return;
+    query = query.substring(1);
+    var eq;
+    if ((eq = query.indexOf("=")) != -1) {
+        if (query.substring(0, 4) == "page") {
+            load_target(unescape(query.substring(eq + 1)));
+            return;
+        }
+        query = query.substring(eq + 1);
+    }
+    var indices = query.split(".");
+    if (!indices.length)
+        return;
+    this.reset();
+    var node = this.root;
+    for (var z = 0; z < indices.length; ++z) {
+        var i = parseInt(indices[z]) - 1;
+        if (!node.kids || i < 0 || node.kids.length <= i)
+            break;
+        node = node.kids[i];
+        node.toggle(/*z != indices.length - 1*/);
+    }
+    if (node.link)
+        load_target(node.link);
+}
+function tree_control__recurse(op) 
+{
+    var stack = new Array();
+    stack[stack.length] = this.root;
+    while (stack.length) {
+        var node = stack[stack.length - 1];
+        stack.length -=1 ; // Konqueror 2.
+        op(node);
+        if (node.kids)
+            for (var z = 0; z < node.kids.length; ++z)
+                stack[stack.length] = node.kids[z];
+    }
+}
+function tree_control__reset() 
+{ 
+    if (!dom_support())
+        return;
+    this.recurse(new Function("x", "if (x.parent()) x.toggle(false);"));
+}
+function sync_node(node)
+{
+    if (!node.link)
+        return;
+    var tgt = target_frame().location.href;
+    var pos;
+    if ((pos = tgt.indexOf("?")) != -1)
+        tgt = tgt.substring(0, pos);
+    if (node.link.indexOf("://") != -1) {
+        if (node.link != tgt) 
+            return;
+    } else {
+        var base = window.location.href;
+        if ((pos = base.lastIndexOf("/")) != -1)
+            base = base.substring(0, pos + 1);
+        if (base + node.link != tgt)
+            return;
+    }
+    window.success = true;
+    var href = replace_query( get_tree().top_url,
+                              "path=" + node.id.substring(1) );
+    top.location.replace(href);
+}
+function tree_control__sync() 
+{ 
+    if (!dom_support() || self == top)
+        return;
+    window.success = false;
+    get_tree().recurse(sync_node);
+    if (!window.success)
+        top.location.replace( 
+            replace_query( get_tree().top_url,
+                           "page=" + escape(target_frame().location.href) )
+        );
+}
+function tree_control(target) 
+{
+    // Member data
+    this.root = new tree_node("");
+    this.target = target ? target : "_self";
+    this.dump_html = false;
+    this.caption = "Contents";
+    this.numbered = true;
+    this.indent = 15;
+    this.drawn = false;
+    this.top_url = top.location.href; // For Opera.
+
+    this.root.state = tree_node.expanded;
+    this.root.id = "";
+
+    // Member functions
+    this.add = tree_control__add;
+    this.draw = tree_control__draw;
+    this.find = tree_control__find;
+    this.html = tree_control__html;
+    this.load = tree_control__load;
+    this.recurse = tree_control__recurse;
+    this.reset = tree_control__reset;
+    this.sync = tree_control__sync;
+    document.tree_control = this;
+}
+tree_control.sync = tree_control__sync;
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/tutorial/container_device.html b/vendor/pdalboost/libs/iostreams/doc/tutorial/container_device.html
new file mode 100644
index 0000000..d79ea04
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tutorial/container_device.html
@@ -0,0 +1,236 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Tutorial</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Tutorial</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='container_sink.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='writing_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<A NAME="container_device"></A>
+<H2>2.1.4. Writing a <CODE>container_device</CODE></H2>
+
+<P>Suppose you want to write a Device for reading from and writing to an STL container. In order for combined reading and writing to be useful, you will also need to support seeking within the container. There are several types of Devices which combine reading and writing; they differ according to whether there are two separate character sequences for input and output, or a single combined sequence, and whether there are separate position indicators for reading and writing or a single re [...]
+
+
+<P>A narrow-character Device for read-write access to a single character sequence with a single position indicator is called a <A HREF="../concepts/seekable_device.html">SeekableDevice</A>. A typical SeekableDevice looks like this:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS="literal"><iosfwd></SPAN>                           <SPAN CLASS='comment'>// streamsize, seekdir</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/categories.hpp"><SPAN CLASS='literal'><boost/iostreams/categories.hpp></SPAN></A>   <SPAN CLASS='comment'>// seekable_device_tag</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/positioning.hpp"><SPAN CLASS='literal'><boost/iostreams/positioning.hpp></SPAN></A>  <SPAN CLASS='comment'>// stream_offset</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS='keyword'>class</SPAN> my_device {
+<SPAN CLASS='keyword'>public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>char</SPAN>                 char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> seekable_device_tag  category;
+
+    std::streamsize read(<SPAN CLASS='keyword'>char</SPAN>* s, std::streamsize n)
+    {
+        <SPAN CLASS='comment'>// Read up to n characters from the underlying data source</SPAN>
+        <SPAN CLASS='comment'>// into the buffer s, returning the number of characters</SPAN>
+        <SPAN CLASS='comment'>// read; return -1 to indicate EOF</SPAN>
+    }
+
+    std::streamsize write(const <SPAN CLASS='keyword'>char</SPAN>* s, std::streamsize n)
+    {
+        <SPAN CLASS='comment'>// Write up to n characters to the underlying </SPAN>
+        <SPAN CLASS='comment'>// data sink into the buffer s, returning the </SPAN>
+        <SPAN CLASS='comment'>// number of characters written</SPAN>
+    }
+
+    stream_offset seek(stream_offset off, std::ios_base::seekdir way)
+    {
+        <SPAN CLASS='comment'>// Seek to position off and return the new stream </SPAN>
+        <SPAN CLASS='comment'>// position. The argument way indicates how off is</SPAN>
+        <SPAN CLASS='comment'>// interpretted:</SPAN>
+        <SPAN CLASS='comment'>//    - std::ios_base::beg indicates an offset from the </SPAN>
+        <SPAN CLASS='comment'>//      sequence beginning </SPAN>
+        <SPAN CLASS='comment'>//    - std::ios_base::cur indicates an offset from the </SPAN>
+        <SPAN CLASS='comment'>//      current character position </SPAN>
+        <SPAN CLASS='comment'>//    - std::ios_base::end indicates an offset from the </SPAN>
+        <SPAN CLASS='comment'>//      sequence end </SPAN>
+    }
+
+    <SPAN CLASS='comment'>/* Other members */</SPAN>
+};</PRE>
+
+<P>Here the member type <A HREF="../guide/traits.html#char_type"><CODE>char_type</CODE></A> indicates the type of characters handled by my_source, which will almost always be <CODE>char</CODE> or <CODE>wchar_t</CODE>. The member type <A HREF="../guide/traits.html#char_type">category</A> indicates which of the fundamental i/o operations are supported by the device. The category tag <A HREF="../guide/traits.html#category_tags"><CODE>seekable_tag</CODE></A> indicates that <A HREF="../functi [...]
+
+<P>The type <A HREF="../functions/positioning.html#synopsis"><CODE>stream_offset</CODE></A> is used by the Iostreams library to hold stream offsets.</P>
+
+<P>You could also write the above example as follows:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS='literal'><boost/iostreams/concepts.hpp></SPAN></A>  <SPAN CLASS='comment'>// seekable_device</SPAN>
+
+<SPAN CLASS='keyword'>class</SPAN> my_source : <SPAN CLASS='keyword'>public</SPAN> seekable_device {
+<SPAN CLASS='keyword'>public</SPAN>:
+    std::streamsize read(<SPAN CLASS='keyword'>char</SPAN>* s, std::streamsize n);
+    std::streamsize write(const <SPAN CLASS='keyword'>char</SPAN>* s, std::streamsize n);
+    stream_offset seek(stream_offset off, std::ios_base::seekdir way);
+
+    <SPAN CLASS='comment'>/* Other members */</SPAN>
+};</PRE>
+
+<P>Here <A HREF="../classes/device.html#synopsis"><CODE>seekable_device</CODE></A> is a convenience base class which provides the member types <CODE>char_type</CODE> and <CODE>category</CODE>, as well as no-op implementations of member functions <CODE>close</CODE> and <CODE>imbue</CODE>, not needed here.
+
+<P>You're now ready to write your <CODE>container_device</CODE>. Again, let's assume your container's iterators are RandomAccessIterators.</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><algorithm></SPAN>                       <SPAN CLASS='comment'>// copy, min</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><iosfwd></SPAN>                          <SPAN CLASS='comment'>// streamsize</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF="../../../../boost/iostreams/categories.hpp"><SPAN CLASS='literal'><boost/iostreams/categories.hpp></SPAN></A>  <SPAN CLASS='comment'>// source_tag</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Container>
+<SPAN CLASS="keyword">class</SPAN> container_device {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">typename</SPAN> Container::value_type  char_type;
+    <SPAN CLASS="keyword">typedef</SPAN> seekable_device_tag             category;
+    container_device(Container& container)
+        : container_(container), pos_(<SPAN CLASS='numeric_literal'>0</SPAN>)
+        { }
+
+    std::streamsize read(char_type* s, std::streamsize n)
+    {
+        <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+        streamsize amt = <SPAN CLASS="keyword">static_cast</SPAN><streamsize>(container_.size() - pos_);
+        streamsize result = (min)(n, amt);
+        <SPAN CLASS="keyword">if</SPAN> (result != <SPAN CLASS='numeric_literal'>0</SPAN>) {
+            std::copy( container_.begin() + pos_, 
+                       container_.begin() + pos_ + result, 
+                       s );
+            pos_ += result;
+            <SPAN CLASS="keyword">return</SPAN> result;
+        } <SPAN CLASS="keyword">else</SPAN> {
+            <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS='numeric_literal'>-1</SPAN>; <SPAN CLASS='comment'>// EOF</SPAN>
+        }
+    }
+    std::streamsize write(<SPAN CLASS="keyword">const</SPAN> char_type* s, std::streamsize n)
+    {
+        <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+        streamsize result = <SPAN CLASS='numeric_literal'>0</SPAN>;
+        <SPAN CLASS="keyword">if</SPAN> (pos_ != container_.size()) {
+            streamsize amt = 
+                <SPAN CLASS="keyword">static_cast</SPAN><streamsize>(container_.size() - pos_);
+            result = (min)(n, amt);
+            std::copy(s, s + result, container_.begin() + pos_);
+            pos_ += result;
+        }
+        <SPAN CLASS="keyword">if</SPAN> (result < n) {
+            container_.insert(container_.end(), s + result, s + n);
+            pos_ = container_.size();
+        }
+        <SPAN CLASS="keyword">return</SPAN> n;
+    }
+    stream_offset seek(stream_offset off, std::ios_base::seekdir way)
+    {
+        <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+
+        <SPAN CLASS='comment'>// Determine new value of pos_</SPAN>
+        stream_offset next;
+        <SPAN CLASS="keyword">if</SPAN> (way == ios_base::beg) {
+            next = off;
+        } <SPAN CLASS="keyword">else</SPAN> <SPAN CLASS="keyword">if</SPAN> (way == ios_base::cur) {
+            next = pos_ + off;
+        } <SPAN CLASS="keyword">else</SPAN> <SPAN CLASS="keyword">if</SPAN> (way == ios_base::end) {
+            next = container_.size() + off - <SPAN CLASS='numeric_literal'>1</SPAN>;
+        } <SPAN CLASS="keyword">else</SPAN> {
+            <SPAN CLASS="keyword">throw</SPAN> ios_base::failure(<SPAN CLASS='numeric_literal'>"bad seek direction"</SPAN>);
+        }
+
+        <SPAN CLASS='comment'>// Check for errors</SPAN>
+        <SPAN CLASS="keyword">if</SPAN> (next < <SPAN CLASS='numeric_literal'>0</SPAN> || next >= container_.size())
+            <SPAN CLASS="keyword">throw</SPAN> ios_base::failure(<SPAN CLASS='numeric_literal'>"bad seek offset"</SPAN>);
+
+        pos_ = next;
+        <SPAN CLASS="keyword">return</SPAN> pos_;
+    }
+
+    Container& container() { <SPAN CLASS="keyword">return</SPAN> container_; }
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> <SPAN CLASS="keyword">typename</SPAN> Container::size_type   size_type;
+    Container&  container_;
+    size_type   pos_;
+};
+
+} } } <SPAN CLASS='comment'>// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>Here, note that</P>
+<UL>
+<LI>The member type <CODE>char_type</CODE> is defined to be equal to the container's <CODE>value_type</CODE>;
+<LI>The member type <CODE>category</CODE> tells the Iostreams library that <CODE>container_device</CODE> is a model of <A HREF="../concepts/seekable_device.html">SeekableDevice</A>;
+<LI>A <CODE>container_device</CODE> can be constructed from a instance of <CODE>Container</CODE>, which is passed and stored by reference, and accessible <I>via</I> the member function <CODE>container()</CODE>;
+<LI>The implementation of <CODE>read</CODE> is identical to the implementation in <A HREF="container_source.html"><CODE>container_source</CODE></A>.
+</UL>
+
+<P>The implementation of <CODE>write</CODE> is a bit different from the implementation in <A HREF="container_sink.html"><CODE>container_sink</CODE></A>. Rather than simply appending characters to the container, you first check whether the current character position is somewhere in the middle of the container. If it is, you attempt to satisfy the write request by overwriting existing characters in the container, starting at the current character position. If you reach the end of the conta [...]
+
+<P>The implementation of <CODE>seek</CODE> is straightforward. First, you calculate the new character position based on <CODE>off</CODE> and <CODE>way</CODE>: if <CODE>way</CODE> is <CODE>ios_base::beg</CODE>, the new character position is simply <CODE>off</CODE>; if <CODE>way</CODE> is <CODE>ios_base::cur</CODE>, the new character position is <CODE>pos_ + off</CODE>; if <CODE>way</CODE> is <CODE>ios_base::end</CODE>, the new character position is <CODE>container_.size() + off - 1</CODE> [...]
+
+<P>You can use a container_device as follows</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><cassert></SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><ios></SPAN> <SPAN CLASS='comment'>// ios_base::beg</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><string></SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/stream.hpp"><SPAN CLASS='literal'><boost/iostreams/stream.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header"  HREF="../../example/container_device.hpp"><SPAN CLASS='literal'><libs/iostreams/example/container_device.hpp></SPAN></A>
+
+<SPAN CLASS="keyword">namespace</SPAN> io = boost::iostreams;
+<SPAN CLASS="keyword">namespace</SPAN> ex = boost::iostreams::example;
+
+<SPAN CLASS="keyword">int</SPAN> main()
+{
+    <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+    <SPAN CLASS="keyword">typedef</SPAN> ex::container_device<string> string_device;
+
+    string                     one, two;
+    io::stream<string_device>  io(one);
+    io << <SPAN CLASS='literal'>"Hello World!"</SPAN>;
+    io.flush();
+    io.seekg(0, BOOST_IOS::beg); <SPAN CLASS='comment'>// seek to the beginning</SPAN>
+    getline(io, two);
+    assert(one == <SPAN CLASS='literal'>"Hello World!"</SPAN>);
+    assert(two == <SPAN CLASS='literal'>"Hello World!"</SPAN>);
+}</PRE>
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='container_sink.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='writing_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file <A HREF="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
diff --git a/vendor/pdalboost/libs/iostreams/doc/tutorial/container_sink.html b/vendor/pdalboost/libs/iostreams/doc/tutorial/container_sink.html
new file mode 100644
index 0000000..d39c902
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tutorial/container_sink.html
@@ -0,0 +1,190 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Tutorial</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Tutorial</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='container_source.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='container_device.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<A NAME="container_sink"></A>
+<H2>2.1.3. Writing a <CODE>container_sink</CODE></H2>
+
+<P>Suppose you want to write a Device for appending characters to an STL container. A Device which only supports writing is called a <A HREF="../concepts/sink.html">Sink</A>. A typical narrow-character Sink looks like this:
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS="literal"><iosfwd></SPAN>                          <SPAN CLASS='comment'>// streamsize</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/categories.hpp"><SPAN CLASS='literal'><boost/iostreams/categories.hpp></SPAN></A>  <SPAN CLASS='comment'>// sink_tag
+</SPAN>
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS='keyword'>class</SPAN> my_sink {
+<SPAN CLASS='keyword'>public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>char</SPAN>      char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> sink_tag  category;
+
+    std::streamsize write(const <SPAN CLASS='keyword'>char</SPAN>* s, std::streamsize n)
+    {
+        <SPAN CLASS='comment'>// Write up to n characters to the underlying </SPAN>
+        <SPAN CLASS='comment'>// data sink into the buffer s, returning the </SPAN>
+        <SPAN CLASS='comment'>// number of characters written</SPAN>
+    }
+
+    <SPAN CLASS='comment'>/* Other members */</SPAN>
+};</PRE>
+
+<P>Here the member type <A HREF="../guide/traits.html#char_type"><CODE>char_type</CODE></A> indicates the type of characters handled by my_source, which will almost always be <CODE>char</CODE> or <CODE>wchar_t</CODE>. The member type <A HREF="../guide/traits.html#char_type">category</A> indicates which of the fundamental i/o operations are supported by the device. The category tag <A HREF="../guide/traits.html#category_tags"><CODE>sink_tag</CODE></A> indicates that only <A HREF="../funct [...]
+
+<P>The member function <CODE>write</CODE> writes up to <CODE>n</CODE> character into the buffer <CODE>s</CODE> and returns the number of character written. In general, <CODE>write</CODE> may return fewer characters than requested, in which case the Sink is call <I>non-blocking</I>. Non-blocking Devices do not interact well with stanard streams and stream buffers, however, so most devices should be <A HREF="../concepts/blocking.html">Blocking</A>. <I>See</I> <A HREF="../guide/asynchronous [...]
+
+<P>You could also write the above example as follows:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS='literal'><boost/iostreams/concepts.hpp></SPAN></A>  <SPAN CLASS='comment'>// sink</SPAN>
+
+<SPAN CLASS='keyword'>class</SPAN> my_sink : <SPAN CLASS='keyword'>public</SPAN> sink {
+<SPAN CLASS='keyword'>public</SPAN>:
+    std::streamsize write(const <SPAN CLASS='keyword'>char</SPAN>* s, std::streamsize n);
+
+    <SPAN CLASS='comment'>/* Other members */</SPAN>
+};</PRE>
+
+<P>Here <A HREF="../classes/device.html#synopsis"><CODE>sink</CODE></A> is a convenience base class which provides the member types <CODE>char_type</CODE> and <CODE>category</CODE>, as well as no-op implementations of member functions <CODE>close</CODE> and <CODE>imbue</CODE>, not needed here.
+
+<P>You're now ready to write your <CODE>container_sink</CODE>.</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><algorithm></SPAN>                       <SPAN CLASS='comment'>// copy, min</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><iosfwd></SPAN>                          <SPAN CLASS='comment'>// streamsize</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF="../../../../boost/iostreams/categories.hpp"><SPAN CLASS='literal'><boost/iostreams/categories.hpp></SPAN></A>  <SPAN CLASS='comment'>// sink_tag</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> Container>
+<SPAN CLASS='keyword'>class</SPAN> container_sink {
+<SPAN CLASS='keyword'>public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>typename</SPAN> Container::value_type  char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> sink_tag                        category;
+    container_sink(Container& container) : container_(container) { }
+    std::streamsize write(const char_type* s, std::streamsize n)
+    {
+        container_.insert(container_.end(), s, s + n);
+        <SPAN CLASS='keyword'>return</SPAN> n;
+    }
+    Container& container() { return container_; }
+<SPAN CLASS='keyword'>private</SPAN>:
+    Container& container_;
+};
+
+} } } <SPAN CLASS='comment'>// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>Here, note that</P>
+<UL>
+<LI>The member type <CODE>char_type</CODE> is defined to be equal to the containers's <CODE>value_type</CODE>;
+<LI>The member type <CODE>category</CODE> tells the Iostreams library that <CODE>container_sink</CODE> is a model of <A HREF="../concepts/sink.html">Sink</A>;
+<LI>A <CODE>container_sink</CODE> can be constructed from a instance of <CODE>Container</CODE>, which is passed and stored by reference, and accessible <I>via</I> the member function <CODE>container()</CODE>; and
+<LI>The implementation of <CODE>write()</CODE> simply appends the characters in the specified buffer to the underlying container using the container's <CODE>insert</CODE> funcion,
+</UL>
+
+<P>You can write to a container_sink as follows</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><cassert></SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><string></SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/stream.hpp"><SPAN CLASS='literal'><boost/iostreams/stream.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../example/container_device.hpp"><SPAN CLASS='literal'><libs/iostreams/example/container_device.hpp></SPAN></A> <SPAN CLASS='comment'>// container_sink</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+<SPAN CLASS='keyword'>namespace</SPAN> ex = boost::iostreams::example;
+
+<SPAN CLASS='keyword'>int</SPAN> main()
+{
+    <SPAN CLASS='keyword'>using</SPAN> <SPAN CLASS='keyword'>namespace</SPAN> std;
+    <SPAN CLASS='keyword'>typedef</SPAN> ex::container_sink<string> string_sink;
+
+    string                   result;
+    io::stream<string_sink>  out(result);
+    out << <SPAN CLASS='literal'>"Hello World!"</SPAN>;
+    out.flush();
+    assert(result == <SPAN CLASS='literal'>"Hello World!"</SPAN>);
+}</PRE>
+
+<P>Note that the Iostreams library provides buffering by default. Consequently, the stream <CODE>out</CODE> must be flushed before the characters written are guaranteed to be reflected in the underlying <CODE>string</CODE>.
+
+<P>Finally, I should mention that the Iostreams library offers easier ways to append to an STL-compatible container.
+
+First, OutputIterators can be added directly to <A HREF="../guide/filtering_streams.html">filtering streams and stream buffers</A>. So you could write:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><cassert></SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><iterator></SPAN>  <SPAN CLASS='comment'>// back_inserter</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><string></SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/filtering_stream.hpp"><SPAN CLASS='literal'><boost/iostreams/filtering_stream.hpp></SPAN></A>
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS='keyword'>int</SPAN> main()
+{
+    <SPAN CLASS='keyword'>using</SPAN> <SPAN CLASS='keyword'>namespace</SPAN> std;
+
+    string                 result;
+    io::filtering_ostream  out(back_inserter(result));
+    out << <SPAN CLASS='literal'>"Hello World!"</SPAN>;
+    out.flush();
+    assert(result == <SPAN CLASS='literal'>"Hello World!"</SPAN>);
+}</PRE>
+
+<P>Second, the Iostreams library provides a version of <CODE>back_inserter</CODE> that is somewhat more efficient than <CODE>std::back_inserter</CODE> because the Sink it returns uses <CODE>insert</CODE> rather than <CODE>push_back</CODE>. So you could write:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><cassert></SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><string></SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/device/back_inserter.hpp"><SPAN CLASS='literal'><boost/iostreams/device/back_inserter.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/filtering_stream.hpp"><SPAN CLASS='literal'><boost/iostreams/filtering_stream.hpp></SPAN></A>
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS='keyword'>int</SPAN> main()
+{
+    <SPAN CLASS='keyword'>using</SPAN> <SPAN CLASS='keyword'>namespace</SPAN> std;
+
+    string                 result;
+    io::filtering_ostream  out(io::back_inserter(result));
+    out << <SPAN CLASS='literal'>"Hello World!"</SPAN>;
+    out.flush();
+    assert(result == <SPAN CLASS='literal'>"Hello World!"</SPAN>);
+}</PRE>
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='container_source.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='container_device.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file <A HREF="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/tutorial/container_source.html b/vendor/pdalboost/libs/iostreams/doc/tutorial/container_source.html
new file mode 100644
index 0000000..5f21761
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tutorial/container_source.html
@@ -0,0 +1,183 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Tutorial</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Tutorial</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='writing_devices.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='container_sink.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+        <!-- Container Source -->
+
+<A NAME="container_source"></A>
+<H2>2.1.2. Writing a <CODE>container_source</CODE></H2>
+
+<P>Suppose you want to write a Device for reading characters from an STL container. A Device which only supports reading is called a <A HREF="../concepts/source.html">Source</A>. A typical narrow-character Source looks like this:
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS="literal"><iosfwd></SPAN>                          <SPAN CLASS='comment'>// streamsize</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/categories.hpp"><SPAN CLASS='literal'><boost/iostreams/categories.hpp></SPAN></A>  <SPAN CLASS='comment'>// source_tag
+</SPAN>
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS='keyword'>class</SPAN> my_source {
+<SPAN CLASS='keyword'>public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>char</SPAN>        char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> source_tag  category;
+
+    std::streamsize read(<SPAN CLASS='keyword'>char</SPAN>* s, std::streamsize n)
+    {
+        <SPAN CLASS='comment'>// Read up to n characters from the underlying data source</SPAN>
+        <SPAN CLASS='comment'>// into the buffer s, returning the number of characters</SPAN>
+        <SPAN CLASS='comment'>// read; return -1 to indicate EOF</SPAN>
+    }
+
+    <SPAN CLASS='comment'>/* Other members */</SPAN>
+};</PRE>
+
+<P>Here the member type <A HREF="../guide/traits.html#char_type"><CODE>char_type</CODE></A> indicates the type of characters handled by my_source, which will almost always be <CODE>char</CODE> or <CODE>wchar_t</CODE>. The member type <A HREF="../guide/traits.html#char_type">category</A> indicates which of the fundamental i/o operations are supported by the device. The category tag <A HREF="../guide/traits.html#category_tags"><CODE>source_tag</CODE></A> indicates that only <A HREF="../fun [...]
+
+<P>The member function <CODE>read</CODE> reads up to <CODE>n</CODE> characters into the buffer <CODE>s</CODE> and returns the number of characters read, unless that number is <CODE>0</CODE> and end-of-stream has been reached, in which case the special value <CODE>-1</CODE> is returned. In general, a Source's member function <CODE>read</CODE> may return fewer characters than requested even though end-of-stream has not been reached; such Sources are called <I>non-blocking</I>. Non-blocking [...]
+
+<P>You could also write the above example as follows:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS='literal'><boost/iostreams/concepts.hpp></SPAN></A>  <SPAN CLASS='comment'>// source</SPAN>
+
+<SPAN CLASS='keyword'>class</SPAN> my_source : <SPAN CLASS='keyword'>public</SPAN> source {
+<SPAN CLASS='keyword'>public</SPAN>:
+    std::streamsize read(<SPAN CLASS='keyword'>char</SPAN>* s, std::streamsize n);
+
+    <SPAN CLASS='comment'>/* Other members */</SPAN>
+};</PRE>
+
+<P>Here <A HREF="../classes/device.html#synopsis"><CODE>source</CODE></A> is a convenience base class which provides the member types <CODE>char_type</CODE> and <CODE>category</CODE>, as well as no-op implementations of member functions <CODE>close</CODE> and <CODE>imbue</CODE>, not needed here.
+
+<P>You're now ready to write your <CODE>container_source</CODE>. For simplicity, let's assume that your container's iterators are RandomAccessIterators.</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><algorithm></SPAN>                       <SPAN CLASS='comment'>// copy, min</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><iosfwd></SPAN>                          <SPAN CLASS='comment'>// streamsize</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS='header' HREF="../../../../boost/iostreams/categories.hpp"><SPAN CLASS='literal'><boost/iostreams/categories.hpp></SPAN></A>  <SPAN CLASS='comment'>// source_tag</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS='keyword'>template</SPAN><<SPAN CLASS='keyword'>typename</SPAN> Container>
+<SPAN CLASS='keyword'>class</SPAN> container_source {
+<SPAN CLASS='keyword'>public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>typename</SPAN> Container::value_type  char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> source_tag                      category;
+    container_source(Container& container)
+        : container_(container), pos_(<SPAN CLASS='numeric_literal'>0</SPAN>)
+        { }
+    std::streamsize read(char_type* s, std::streamsize n)
+    {
+        <SPAN CLASS='keyword'>using</SPAN> <SPAN CLASS='keyword'>namespace</SPAN> std;
+        streamsize amt = <SPAN CLASS='keyword'>static_cast</SPAN><streamsize>(container_.size() - pos_);
+        streamsize result = (min)(n, amt);
+        <SPAN CLASS='keyword'>if</SPAN> (result != <SPAN CLASS='numeric_literal'>0</SPAN>) {
+            std::copy( container_.begin() + pos_, 
+                       container_.begin() + pos_ + result, 
+                       s );
+            pos_ += result;
+            <SPAN CLASS='keyword'>return</SPAN> result;
+        } <SPAN CLASS='keyword'>else</SPAN> {
+            <SPAN CLASS='keyword'>return</SPAN> <SPAN CLASS='numeric_literal'>-1</SPAN>; <SPAN CLASS='comment'>// EOF</SPAN>
+        }
+    }
+    Container& container() { <SPAN CLASS='keyword'>return</SPAN> container_; }
+<SPAN CLASS='keyword'>private</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>typename</SPAN> Container::size_type   size_type;
+    Container&  container_;
+    size_type   pos_;
+};
+
+} } } <SPAN CLASS='comment'>// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>Here, note that</P>
+<UL>
+<LI>The member type <CODE>char_type</CODE> is defined to be equal to the containers's <CODE>value_type</CODE>;
+<LI>The member type <CODE>category</CODE> tells the Iostreams library that <CODE>container_source</CODE> is a model of <A HREF="../concepts/source.html">Source</A>; and
+<LI>A <CODE>container_source</CODE> can be constructed from a instance of <CODE>Container</CODE>, which is passed and stored by reference, and accessible <I>via</I> the member function <CODE>container()</CODE>.
+</UL>
+
+<P>The main idea behind the implementation of <CODE>read()</CODE> is simple: First, you calculate the number of characters to be read, which is the minimum of the number of unread characters remaining in the container and the number of characters requested. Second, if the number of characters to be read is non-zero, you copy that number of characters from the container into the provided buffer and update the current read position. If the number of characters is zero, i.e., if all the cha [...]
+
+<P>You can read from a container_source as follows</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><cassert></SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><string></SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/stream.hpp"><SPAN CLASS='literal'><boost/iostreams/stream.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../example/container_device.hpp"><SPAN CLASS='literal'><libs/iostreams/example/container_device.hpp></SPAN></A> <SPAN CLASS='comment'>// container_source</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+<SPAN CLASS='keyword'>namespace</SPAN> ex = boost::iostreams::example;
+
+<SPAN CLASS='keyword'>int</SPAN> main()
+{
+    <SPAN CLASS='keyword'>using</SPAN> <SPAN CLASS='keyword'>namespace</SPAN> std;
+    <SPAN CLASS='keyword'>typedef</SPAN> ex::container_source<string> string_source;
+
+    string                     input = <SPAN CLASS='literal'>"Hello World!"</SPAN>;
+    string                     output;
+    io::stream<string_source>  in(input);
+    getline(in, output);
+    assert(input == output);
+}</PRE>
+
+<P>Finally, I should mention that the Iostreams library provides an easier way to read from an STL container: instances of <A HREF="../../../range/doc/html/range/reference/utilities/iterator_range.html" TARGET="_top"><CODE>boost::iterator_range</CODE></A> can be added directly to <A HREF="../guide/filtering_streams.html">filtering streams and stream buffers</A>. So you could write:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><cassert></SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><string></SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/filtering_stream.hpp"><SPAN CLASS='literal'><boost/iostreams/filtering_stream.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/range/iterator_range.hpp"><SPAN CLASS='literal'><boost/range/iterator_range.hpp></SPAN></A>
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS='keyword'>int</SPAN> main()
+{
+    <SPAN CLASS='keyword'>using</SPAN> <SPAN CLASS='keyword'>namespace</SPAN> std;
+
+    string                 input = <SPAN CLASS='literal'>"Hello World!"</SPAN>;
+    string                 output;
+    io::filtering_istream  in(boost::make_iterator_range(input));
+    getline(in, output);
+    assert(input == output);
+}</PRE>
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='writing_devices.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='container_sink.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file <A HREF="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/tutorial/dictionary_filters.html b/vendor/pdalboost/libs/iostreams/doc/tutorial/dictionary_filters.html
new file mode 100644
index 0000000..646d6f2
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tutorial/dictionary_filters.html
@@ -0,0 +1,319 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Tutorial</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Tutorial</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='tab_expanding_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='unix2dos_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<H2>2.2.6. Dictionary Filters</H2>
+
+<P>
+    A <SPAN CLASS='term'>dictionary filter</SPAN> is a Filter which performs text substitution in the following manner. It maintains a collection of pairs of strings whose first components are words and whose second components represent replacement text — I'll call such a collection a <SPAN CLASS='term'>dictionary</SPAN>, and refer to the pairs it contains as <SPAN CLASS='term'>definitions</SPAN>.  When a dictionary filter encounters a word which appears as the first component of a [...]
+</P>
+
+<P>
+    The basic algorithm is as follows: You examine characters one at a time, appending them to a string which I'll call the <SPAN CLASS='term'>current word</SPAN>. When you encounter a non-alphabetic character, you consult the dictionary to determine whether the current word appears as the first component of a definition. If it does, you forward the replacement text followed by the non-alphabetic character. Otherwise, you forward the current word followed by the non-alphabetic character. [...]
+</P>
+
+<P>
+    In the following sections, I'll express this algorithm as a <A HREF="../classes/stdio_filter.html"><CODE>stdio_filter</CODE></A>, an <A HREF="../concepts/input_filter.html">InputFilter</A> and an <A HREF="../concepts/output_filter.html">OutputFilter</A>. The source code can be found in the header <A HREF="../../example/dictionary_filter.hpp"><CODE><libs/iostreams/example/dictionary_filter.hpp></CODE></A>.
+</P>
+
+<A NAME="dictionary"></A>
+<H4><CODE>dictionary</CODE></H4>
+
+<P>You can represent a dictionary using the following class:</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS="literal"><map></SPAN>
+<SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><string></SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> dictionary {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">void</SPAN> add(std::string key, <SPAN CLASS="keyword">const</SPAN> std::string& value);
+    <SPAN CLASS="keyword">void</SPAN> replace(std::string& key);
+
+    <SPAN CLASS='comment'>/* ... */</SPAN>
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>
+    The member function <CODE>add</CODE> converts <CODE>key</CODE> to lower case and adds the pair <CODE>key</CODE>, <CODE>value</CODE> to the dictionary. The member function <CODE>replace</CODE> searches for a definition whose first component is equal to the result of converting <CODE>key</CODE> to lower case. If it finds such a definition, it assigns the replacement text to <CODE>key</CODE>, adjusting the case of the first character to match the case of the first character of <CODE>key [...]
+</P>
+
+<A NAME="dictionary_stdio_filter"></A>
+<H4><CODE>dictionary_stdio_filter</CODE></H4>
+
+<P>You can express a dictionary filter as a <A HREF="../classes/stdio_filter.html"><CODE>stdio_filter</CODE></A> as follows:</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS="literal"><cstdio></SPAN>    <SPAN CLASS="comment">// EOF</SPAN>
+<SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><iostream></SPAN>  <SPAN CLASS="comment">// cin, cout</SPAN>
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/filter/stdio.hpp"><SPAN CLASS="literal"><boost/iostreams/filter/stdio.hpp></SPAN></A>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> dictionary_stdio_filter : <SPAN CLASS="keyword"><SPAN CLASS="keyword"><SPAN CLASS="keyword">public</SPAN></SPAN></SPAN> stdio_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    dictionary_stdio_filter(dictionary& d) : dictionary_(d) { }
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">void</SPAN> do_filter()
+    {
+        <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+        <SPAN CLASS="keyword">while</SPAN> (<SPAN CLASS="keyword">true</SPAN>) {
+            <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c = std::cin.get();
+            <SPAN CLASS="keyword">if</SPAN> (c == <SPAN CLASS="numeric_literal">EOF</SPAN> || !std::isalpha((<SPAN CLASS="keyword">unsigned</SPAN> <SPAN CLASS="keyword">char</SPAN>) c)) {
+                dictionary_.replace(current_word_);
+                cout.write( current_word_.data(),
+                            <SPAN CLASS="keyword">static_cast</SPAN><streamsize>(current_word_.size()) );
+                current_word_.erase();
+                <SPAN CLASS="keyword">if</SPAN> (c == <SPAN CLASS="numeric_literal">EOF</SPAN>)
+                    break;
+                cout.put(c);
+            } <SPAN CLASS="keyword">else</SPAN> {
+                current_word_ += c;
+            }
+        }
+    }
+    dictionary&  dictionary_;
+    std::string  current_word_;
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>
+    The implementation of <CODE>do_filter</CODE> simply loops, reading characters from <CODE>std::cin</CODE> and <CODE>appending</CODE> them to the member variable <CODE>current_word_</CODE> until a non-alphabetic character or end-of-stream indication is encountered. When this occurs it uses its dictionary, stored in the member variable <CODE>dictionary_</CODE>, to replace the current word if necessary. Finally, it writes the current word, followed by the non-alphabetic character, if any [...]
+</P>
+
+<A NAME="dictionary_input_filter"></A>
+<H4><CODE>dictionary_input_filter</CODE></H4>
+
+<P>You can express a dictionary filter as an <A HREF="../concepts/input_filter.html">InputFilter</A> as follows:</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/char_traits.hpp"><SPAN CLASS="literal"><boost/iostreams/char_traits.hpp></SPAN></A> <SPAN CLASS="comment">// EOF, WOULD_BLOCK</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/concepts.hpp></SPAN></A>    <SPAN CLASS="comment">// input_filter</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A>  <SPAN CLASS="comment">// get</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> dictionary_input_filter : <SPAN CLASS="keyword"><SPAN CLASS="keyword"><SPAN CLASS="keyword">public</SPAN></SPAN></SPAN> input_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    dictionary_input_filter(dictionary& d)
+        : dictionary_(d), off_(std::string::npos), eof_(<SPAN CLASS="keyword">false</SPAN>)
+        { }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> get(Source& src);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword">void</SPAN> close(Source&);
+<SPAN CLASS="keyword">private</SPAN>:
+    dictionary&             dictionary_;
+    std::string             current_word_;
+    std::string::size_type  off_;
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN>                    eof_;
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>The function <CODE>get</CODE> is implemented as follows:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> get(Source& src)
+    {
+        <SPAN CLASS='comment'>// Handle unfinished business.</SPAN>
+        <SPAN CLASS="keyword">if</SPAN> (off_ != std::string::npos && off_ < current_word_.size())
+            <SPAN CLASS="keyword">return</SPAN> current_word_[off_++];
+        <SPAN CLASS="keyword">if</SPAN> (off_ == current_word_.size()) {
+            current_word_.erase();
+            off_ = std::string::npos;
+        }
+        <SPAN CLASS="keyword">if</SPAN> (eof_)
+            <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS="numeric_literal">EOF</SPAN>;
+
+        <SPAN CLASS='comment'>// Compute curent word.</SPAN>
+        <SPAN CLASS="keyword">while</SPAN> (<SPAN CLASS="keyword">true</SPAN>) {
+            <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c;
+            <SPAN CLASS="keyword">if</SPAN> ((c = iostreams::get(src)) == WOULD_BLOCK)
+                <SPAN CLASS="keyword">return</SPAN> WOULD_BLOCK;
+
+            <SPAN CLASS="keyword">if</SPAN> (c == <SPAN CLASS="numeric_literal">EOF</SPAN> || !std::isalpha((<SPAN CLASS="keyword">unsigned</SPAN> <SPAN CLASS="keyword">char</SPAN>) c)) {
+                dictionary_.replace(current_word_);
+                off_ = 0;
+                <SPAN CLASS="keyword">if</SPAN> (c == <SPAN CLASS="numeric_literal">EOF</SPAN>)
+                    eof_ = <SPAN CLASS="keyword">true</SPAN>;
+                <SPAN CLASS="keyword">else</SPAN>
+                    current_word_ += c;
+                break;
+            } <SPAN CLASS="keyword">else</SPAN> {
+                current_word_ += c;
+            }
+        }
+
+        <SPAN CLASS="keyword">return</SPAN> this->get(src); <SPAN CLASS='comment'>// Note: current_word_ is not empty.</SPAN>
+    }</PRE>
+
+<P>
+    You first check to see whether there are any characters which remain from a previous invocation of <CODE>get</CODE>. If so, you update some book keeping information and return the first such character.
+</P>
+<P>
+    The <CODE>while</CODE> loop is very similar to that of <A HREF="#dictionary_stdio_filter"><CODE>dictionary_stdio_filter::do_filter</CODE></A>: it reads characters from the <A HREF="../concepts/source.html">Source</A> <CODE>src</CODE>, appending them to <CODE>current_word_</CODE> until a non-alphabetic character, <CODE>EOF</CODE> or <CODE>WOULD_BLOCK</CODE> is encountered. The value <CODE>WOULD_BLOCK</CODE> is passed on to the caller. In the remaining cases, the dictionary is consulte [...]
+ </P>
+
+ <P>Finally, <CODE>get</CODE> is called recursively to return the first character of the current word.</P>
+
+<P>As usual, the function <CODE>close</CODE> resets the Filter's state:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword">void</SPAN> close(Source&)
+    {
+        current_word_.erase();
+        off_ = std::string::npos;
+        eof_ = <SPAN CLASS="keyword">false</SPAN>;
+    }</PRE>
+
+<A NAME="dictionary_output_filter"></A>
+<H4><CODE>dictionary_output_filter</CODE></H4>
+
+<P>You can express a dictionary filter as an <A HREF="../concepts/output_filter.html">OutputFilter</A> as follows:</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><algorithm></SPAN>                      <SPAN CLASS='comment'>// swap</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/concepts.hpp></SPAN></A>   <SPAN CLASS="comment">// output_filter</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A> <SPAN CLASS="comment">// write</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> dictionary_output_filter : <SPAN CLASS="keyword"><SPAN CLASS="keyword"><SPAN CLASS="keyword">public</SPAN></SPAN></SPAN> output_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">typedef</SPAN> std::map<std::string, std::string> map_type;
+    dictionary_output_filter(dictionary& d)
+        : dictionary_(d), off_(std::string::npos)
+        { }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> put(Sink& dest, <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword">void</SPAN> close(Sink& dest);
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> write_current_word(Sink& dest);
+    dictionary&             dictionary_;
+    std::string             current_word_;
+    std::string::size_type  off_;
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>Let's look first at the helper function <CODE>write_current_word</CODE>:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> write_current_word(Sink& dest)
+    {
+        <SPAN CLASS="keyword">using</SPAN> <SPAN CLASS="keyword">namespace</SPAN> std;
+        streamsize amt = <SPAN CLASS="keyword">static_cast</SPAN><streamsize>(current_word_.size() - off_);
+        streamsize result =
+            iostreams::write(dest, current_word_.data() + off_, amt);
+        <SPAN CLASS="keyword">if</SPAN> (result == amt) {
+            current_word_.erase();
+            off_ = string::npos;
+            <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS="keyword">true</SPAN>;
+        } <SPAN CLASS="keyword">else</SPAN> {
+            off_ += result;
+            <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS="keyword">false</SPAN>;
+        }
+    }</PRE>
+
+<P>
+    This function attempts to write <CODE>current_word_</CODE>, beginning at the offset <CODE>off_</CODE>, to the provided <A HREF="../concepts/sink.html">Sink</A>. If the entire sequence is successfully written, <CODE>current_word_</CODE> is cleared and the function returns <CODE>true</CODE>. Otherwise the member variable <CODE>off_</CODE> is updated to point to the first unwritten character and the function fails.
+</P>
+
+<P>Using <CODE>write_current_word</CODE> you can implement <CODE>put</CODE> as follows:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> put(Sink& dest, <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c)
+    {
+        <SPAN CLASS="keyword">if</SPAN> (off_ != std::string::npos && !write_current_word(dest))
+            <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS="keyword">false</SPAN>;
+        <SPAN CLASS="keyword">if</SPAN> (!std::isalpha((<SPAN CLASS="keyword">unsigned</SPAN> <SPAN CLASS="keyword">char</SPAN>) c)) {
+            dictionary_.replace(current_word_);
+            off_ = 0;
+        }
+
+        current_word_ += c;
+        <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS="keyword">true</SPAN>;
+    }</PRE>
+
+<P>
+    As in the implementation of <A HREF="#dictionary_input_filter"><CODE>dictionary_input_filter::get</CODE></A>, you first check to see whether there are any characters from a previous invocation of <CODE>put</CODE> which remain to be written. If so, you attempt to write these characters using <CODE>write_current_word</CODE>. If successful, you next examine the given character <CODE>c</CODE>. If it is a non-alphabetic character, you consult the dictionary to determine the appropriate re [...]
+</P>
+
+<P>The function <CODE>close</CODE> has more work to do in this case than simply reseting the Filter's state. Unless the last character of the unfiltered sequence happened to be a non-alphabetic character, the contents of current_word_ will not yet have been written:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    void close(Sink& dest)
+    {
+        <SPAN CLASS='comment'>// Reset current_word_ and off_, saving old values.</SPAN>
+        std::string             current_word;
+        std::string::size_type  off = <SPAN CLASS='numeric_literal'>0</SPAN>;
+        current_word.swap(current_word_);
+        std::swap(off, off_);
+
+        <SPAN CLASS='comment'>// Write remaining characters to dest.</SPAN>
+        <SPAN CLASS="keyword">if</SPAN> (off == std::string::npos) {
+            dictionary_.replace(current_word);
+            off = <SPAN CLASS='numeric_literal'>0</SPAN>;
+        }
+        <SPAN CLASS="keyword">if</SPAN> (!current_word.empty())
+            iostreams::write( 
+                dest,
+                current_word.data() + off, 
+                <SPAN CLASS="keyword">static_cast</SPAN><std::streamsize>(current_word.size() - off) 
+            );
+    }</PRE>
+
+<P>Note that you may assume that the template argument is a <A HREF="../concepts/blocking.html">Blocking</A> <A HREF="../concepts/sink.html">Sink</A>, and that you must reset the values of <CODE>current_word_</CODE> and <CODE>off_</CODE> before calling <A HREF="../functions/write.html"><CODE>write</CODE></A>, in case <A HREF="../functions/write.html"><CODE>write</CODE></A> throws an exception.</P>
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='tab_expanding_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='unix2dos_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<!-- Begin Footer -->
+
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file <A HREF="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/tutorial/dual_use_filters.html b/vendor/pdalboost/libs/iostreams/doc/tutorial/dual_use_filters.html
new file mode 100644
index 0000000..e5a4d59
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tutorial/dual_use_filters.html
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Tutorial</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Tutorial</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='multichar_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='finite_state_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<A NAME="dual_use"></A>
+<H2>2.2.9. Dual-Use Filters</H2>
+
+
+<P>
+    It can be confusing to maintain two separate filters — one for input and the other for output — to implement the same filtering algorithm. One way to avoid this is to use the <A HREF="writing_filters.html#filter_helpers">filter helpers</A> mentioned above. The filter helpers produce filters which can be used for either input or output, but not both simultaneously. Such filters are called <A HREF="../concepts/dual_use_filter.html">Dual-Use Filters</A>.
+</P>
+
+<P>
+    A <A HREF="../concepts/dual_use_filter.html">Dual-Use Filter</A> can be produced by merging the implementations of an <A HREF="../concepts/input_filter.html">InputFilter</A> and an <A HREF="../concepts/output_filter.html">OutputFilter</A>, and giving the resulting class a <A HREF="../guide/traits.html#category">category</A> convertible to <A HREF="../guide/traits.html#category_tags"><CODE>dual_use_filter_tag</CODE></A>. For example, you can implement a <A HREF="shell_comments_filters [...]
+</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/char_traits.hpp"><SPAN CLASS="literal"><boost/iostreams/char_traits.hpp></SPAN></A> <SPAN CLASS="comment">// EOF, WOULD_BLOCK</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/concepts.hpp></SPAN></A>    <SPAN CLASS="comment">// input_filter</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A>  <SPAN CLASS="comment">// get</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> shell_comments_input_filter : <SPAN CLASS="keyword"><SPAN CLASS="keyword"><SPAN CLASS="keyword">public</SPAN></SPAN></SPAN> dual_use_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">explicit</SPAN> shell_comments_input_filter(<SPAN CLASS="keyword">char</SPAN> comment_char = <SPAN CLASS="literal">'#'</SPAN>)
+        : comment_char_(comment_char), skip_(<SPAN CLASS="keyword">false</SPAN>)
+        { }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> get(Source& src)
+    {
+        <SPAN CLASS='comment'>/* same as shell_comments_input_filter::get() */</SPAN>
+    }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> put(Sink& dest, <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c)
+    {
+        <SPAN CLASS='comment'>/* same as shell_comments_output_filter::put() */</SPAN>
+    }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Device>
+    <SPAN CLASS="keyword">void</SPAN> close(Device&, std::ios_base::openmode)
+    { 
+        skip_ = <SPAN CLASS="keyword">false</SPAN>; 
+    }
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">char</SPAN> comment_char_;
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> skip_;
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>
+    When a <A HREF="../guide/filtering_streams.html">filtering stream or stream buffer</A> containing a <A HREF="../concepts/closable.html">Closable</A> <A HREF="../concepts/dual_use_filter.html">Dual-Use Filter</A> is closed, the Filter's member function <CODE>close</CODE> is called with one of the values <CODE>std::ios_base::in</CODE> or <CODE>std::ios_base::out</CODE> as the second function argument, indicating whether the Filter was used for input or output.
+</P>
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='multichar_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='finite_state_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file <A HREF="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/tutorial/filter_usage.html b/vendor/pdalboost/libs/iostreams/doc/tutorial/filter_usage.html
new file mode 100644
index 0000000..06c41a0
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tutorial/filter_usage.html
@@ -0,0 +1,110 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Tutorial</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Tutorial</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='writing_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='shell_comments_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+
+<A NAME="filter_usage"></A>
+<H2>2.2.2. Filter Usage Examples</H2>
+
+<P>
+    Filters are generally used in conjunction with <A HREF="../guide/filtering_streams.html">filtering streams and stream buffers.</A> For example, suppose you have some text which you want to compress, then Base64 encode, then write to a file. If you have appropriate OutputFilters <CODE>compressor</CODE> and <CODE>base64_encoder</CODE>, you can do this as follows:<A CLASS='footnote_ref' NAME='note_1_ref' HREF="#note_1"><SUP>[1]</SUP></A>
+</P>
+
+<PRE CLASS="broken_ie">
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/device/file.hpp"><SPAN CLASS='literal'><boost/iostreams/device/file_descriptor.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/filtering_stream.hpp"><SPAN CLASS='literal'><boost/iostreams/filtering_stream.hpp></SPAN></A>
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS="keyword">int</SPAN> main()
+{   
+    io::filtering_ostream out;
+    out.push(compressor());
+    out.push(base64_encoder());
+    out.push(file_sink("my_file.txt"));
+    <SPAN CLASS='comment'>// write to out using std::ostream interface</SPAN>
+}</PRE>
+
+<P>
+    Like all <A HREF="../guide/filtering_streams.html">filtering streams and stream buffers</A>, <CODE>filtering_ostream</CODE> maintains an internal chain of Filters and Devices. (<I>See also</I> <A HREF="../classes/chain.html"><CODE>chain</CODE></A>.) When data is written to this chain, it flows through the components in the order they were pushed. The last component pushed in the above example could be any model of <A HREF="../concepts/sink.html">Sink</A>, including a <CODE>std::ostre [...]
+</P>
+    
+<P>
+    Now suppose you want to recover the original data. If you have appropriate InputFilters <CODE>decompressor</CODE> and <CODE>base64_decoder</CODE>, you can accomplish this as follows:<A CLASS='footnote_ref' NAME='note_2_ref' HREF="#note_2"><SUP>[2]</SUP></A>
+</P>
+
+<PRE CLASS="broken_ie">
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/device/file.hpp"><SPAN CLASS='literal'><boost/iostreams/device/file.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/filtering_stream.hpp"><SPAN CLASS='literal'><boost/iostreams/filtering_stream.hpp></SPAN></A>
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS="keyword">int</SPAN> main()
+{   
+    io::filtering_istream in;
+    in.push(decompressor());
+    in.push(base64_decoder());
+    in.push(file_source("my_file.txt"));
+    <SPAN CLASS='comment'>// read from in using std::istream interface</SPAN>
+}</PRE>
+
+<P>
+    Here you see another use of a filter chain. When data is read from the chain, it flows through the components in <I>reverse</I> order, beginning with the component pushed last. The last component pushed could be any model of <A HREF="../concepts/source.html">Source</A>, including a <CODE>std::istream</CODE> such as <CODE>std::cin</CODE>.
+</P>
+
+<HR>
+
+<!-- Begin Footnotes -->
+
+<P>
+    <A CLASS='footnote_ref' NAME='note_1' HREF="#note_1_ref"><SUP>[1]</SUP></A>Strictly speaking, it would be better to use a <A HREF="../classes/file_descriptor.html#file_descriptor_sink"><CODE>file_descriptor_sink</CODE></A> instead of a <A HREF="../classes/file.html#file_sink"><CODE>file_sink</CODE></A> here, because <A HREF="../classes/file_descriptor.html#file_descriptor_sink"><CODE>file_descriptor_sink</CODE></A> never performs <A HREF="../guide/code_conversion.html">code conversion</A>.
+</P>
+
+<P>
+    <A CLASS='footnote_ref' NAME='note_2' HREF="#note_2_ref"><SUP>[2]</SUP></A>Strictly speaking, it would be better to use a <A HREF="../classes/file_descriptor.html#file_descriptor_source"><CODE>file_descriptor_source</CODE></A> instead of a <A HREF="../classes/file.html#file_source"><CODE>file_source</CODE></A> here, because <A HREF="../classes/file_descriptor.html#file_descriptor_source"><CODE>file_descriptor_source</CODE></A> never performs <A HREF="../guide/code_conversion.html">co [...]
+</P>
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='writing_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='shell_comments_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file <A HREF="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/tutorial/finite_state_filters.html b/vendor/pdalboost/libs/iostreams/doc/tutorial/finite_state_filters.html
new file mode 100644
index 0000000..19beada
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tutorial/finite_state_filters.html
@@ -0,0 +1,184 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Tutorial</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Tutorial</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='dual_use_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next_disabled.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<A NAME="finite_state"></A>
+<H2>2.2.10. Finite State Filters</H2>
+
+<A NAME="finite_state_machine"></A>
+<H4>Finite State Machines</H4>
+
+<P>
+    In this section I show how to construct <A HREF="../concepts/dual_use_filter.html">Dual-Use Filters</A> from finite state machines. For purposes of this section, a finite state machine consists of a collection of <SPAN>states</SPAN>, represented as <CODE>int</CODE>s, a distinguished <SPAN>initial state</SPAN>, a <SPAN>transition table</SPAN>, a collection of <SPAN>event handlers</SPAN> and a stack of characters. These finite state machines were inspired by the finite state machine ex [...]
+</P>
+
+<P>
+    For us, an <SPAN>event</SPAN> is simply a character. A transition table is an <A HREF="../../../mpl/doc/refmanual/forward-sequence.html" TARGET="_top">MPL Forward Sequence</A> of <SPAN>rows</SPAN>. Each row is a 4-tuple consisting of a <SPAN>current state</SPAN>, a <SPAN>character class</SPAN>, a <SPAN>next state</SPAN> and an <SPAN>event handler</SPAN>. During the operation of a finite state machine, its transition table is consulted to determine how the machine's state should be up [...]
+</P>
+
+<P>
+    A character class is a class type with a <CODE>static</CODE> member function <CODE>test</CODE> taking a character and a <CODE>std::locale</CODE> as arguments. <I>E.g.</I>,
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">struct</SPAN> is_any {
+        <SPAN CLASS="keyword">static</SPAN> <SPAN CLASS="keyword">bool</SPAN> test(<SPAN CLASS="keyword">char</SPAN>, <SPAN CLASS="keyword">const</SPAN> std::locale&);
+    };</PRE>
+
+<P>
+    There are several built in character classes. The character class <CODE>is_any</CODE> matches any character. For any character <CODE>c</CODE>, the character class <CODE>is<c></CODE> only matches <CODE>c</CODE>. The character classes <CODE>alnum</CODE>, <CODE>is_alpha</CODE>, <CODE>is_cntrl</CODE>, <CODE>is_digit</CODE>, <CODE>is_graph</CODE>, <CODE>is_lower</CODE>, <CODE>is_print</CODE>, <CODE>is_punct</CODE>, <CODE>is_space</CODE>, <CODE>is_upper</CODE>, <CODE>is_xdigit</CODE> [...]
+</P>
+
+<P>
+    Event handlers are member functions of a finite state machine which take a single character as argument and return <CODE>void</CODE>. The implementation of an event handler typically examines the given character and pushes zero or more characters of filtered data onto the stack. A special event handler <CODE>on_eof</CODE> takes no arguments and is called automatically after the last character in a sequence is processed.
+</P>
+
+<P>
+    There are three built-in event handlers, <CODE>on_any</CODE>, <CODE>push</CODE> and <CODE>skip</CODE>. The handler <CODE>on_any</CODE> is called automatically when an event occurs which is not covered by any row in the transition table. The default behavior of <CODE>on_any</CODE> is to do nothing. The handler <CODE>push</CODE> pushes the given character onto the stack. The handler <CODE>skip</CODE> ignores the current character. The handlers <CODE>push</CODE> and <CODE>skip</CODE> ar [...]
+</P>
+
+<P>
+    Finite state machines must derive from the class template <CODE>boost::iostreams::finite_state_machine</CODE>, defined in the header <A HREF="../../example/finite_state_filter.hpp"><CODE><libs/iostreams/example/finite_state_filter.hpp></CODE></A>. The first template argument to <CODE>finite_state_machine</CODE> should be the derived class itself; the second template argument should be the character type. 
+<P>
+    A finite state machine's transition table should be declared as a member type named <CODE>transition_table</CODE>. Its event handlers should be implemented as member functions. A finite state machine may define a <CODE>static</CODE> integral constant named <CODE>initial_state</CODE>, which will be treated as the machine's initial state. Alternatively, the definition of the initial state can be omitted, in which case it will default to <CODE>0</CODE>.
+</P>
+
+<P>
+    Given a finite state machine <CODE>my_fsm</CODE>, you can define a <A HREF="../concepts/dual_use_filter.html">Dual-Use Filter</A> as follows:
+</P>
+
+<PRE class="broken_ie"><SPAN CLASS="keyword">namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS="keyword">typedef</SPAN> io::finite_state_filter<my_fsm> my_finite_state_filter;</PRE>
+
+<A NAME="dos2unix_fsm"></A>
+<H4><CODE>dos2unix_fsm</CODE></H4>
+
+<P>The following state machine can be used to convert line endings from <CODE>DOS</CODE> to <CODE>UNIX</CODE>. The constant <CODE>initial_state</CODE>, the class template <CODE>row</CODE> and the character classes <CODE>is</CODE> and <CODE>is_any</CODE> are members of the base class <CODE>boost::iostreams::finite_state_machine</CODE>.</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/mpl/vector.hpp"><SPAN CLASS="literal"><boost/mpl/vector></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../example/finite_state_filter.hpp"><SPAN CLASS="literal"><libs/iostreams/example/finite_state_filter.hpp></SPAN></A>
+
+<SPAN CLASS="keyword">namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS="keyword">struct</SPAN> dos2unix_fsm : io::finite_state_machine<dos2unix_fsm> {
+    BOOST_IOSTREAMS_FSM(dos2unix_fsm) <SPAN CLASS='comment'>// Define skip and push.</SPAN>
+    <SPAN CLASS="keyword">typedef</SPAN> dos2unix_fsm self;
+    <SPAN CLASS="keyword">typedef</SPAN> boost::mpl::vector<
+                row<initial_state, is<<SPAN CLASS="literal">'\r'</SPAN>>, initial_state, &self::skip>,
+                row<initial_state, is_any,   initial_state, &self::push>
+            > transition_table;
+};</PRE>
+
+<P>
+    This machine has just a single state. Its transition table can be understood as follows: if the current character is <CODE>'\r'</CODE>, ignore it; otherwise, forward it unchanged.
+</P>
+
+<A NAME="unix2dos_fsm"></A>
+<H4><CODE>unix2dos_fsm</CODE></H4>
+
+<P>The following state machine can be used to convert line endings from <CODE>UNIX</CODE> to <CODE>DOS</CODE>:</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/mpl/vector.hpp"><SPAN CLASS="literal"><boost/mpl/vector></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../example/finite_state_filter.hpp"><SPAN CLASS="literal"><libs/iostreams/example/finite_state_filter.hpp></SPAN></A>
+
+<SPAN CLASS="keyword">namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS="keyword">struct</SPAN> unix2dos_fsm : io::finite_state_machine<unix2dos_fsm> {
+    BOOST_IOSTREAMS_FSM(unix2dos_fsm) <SPAN CLASS='comment'>// Define skip and push.</SPAN>
+    <SPAN CLASS="keyword">typedef</SPAN> unix2dos_fsm self;
+
+    <SPAN CLASS="keyword">void</SPAN> on_lf(<SPAN CLASS="keyword">char</SPAN>) { push(<SPAN CLASS="literal">'\r'</SPAN>); push(<SPAN CLASS="literal">'\n'</SPAN>); }
+
+    <SPAN CLASS="keyword">typedef</SPAN> boost::mpl::vector<
+                row<initial_state, is<<SPAN CLASS="literal">'\n'</SPAN>>, initial_state, &self::on_lf>,
+                row<initial_state, is_any,   initial_state, &self::push>
+            > transition_table;
+};</PRE>
+
+<P>
+    This machine also has just a single state. The event handler <CODE>on_lf</CODE> pushes a <CODE>DOS</CODE> line-ending sequence onto the stack. The transition table can be understood as follows: if the current character is <CODE>'\n'</CODE>, write a <CODE>DOS</CODE> line-ending sequence; otherwise, forward it unchanged.
+</P>
+
+<A NAME="uncommenting_fsm"></A>
+<H4><CODE>uncommenting_fsm</CODE></H4>
+
+<P>The following state machine removes C-style comments. Although it's not quite sophisticated enough for processing source code, it's a good illustration of a multi-state machine.</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/mpl/vector.hpp"><SPAN CLASS="literal"><boost/mpl/vector></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../example/finite_state_filter.hpp"><SPAN CLASS="literal"><libs/iostreams/example/finite_state_filter.hpp></SPAN></A>
+
+
+<SPAN CLASS="keyword">namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS="keyword">struct</SPAN> uncommenting_fsm : io::finite_state_machine<uncommenting_fsm> {
+    BOOST_IOSTREAMS_FSM(uncommenting_fsm) <SPAN CLASS='comment'>// Define skip and push.</SPAN>
+    <SPAN CLASS="keyword">typedef</SPAN> uncommenting_fsm self;
+
+    <SPAN CLASS="keyword">static</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> no_comment   = initial_state;
+    <SPAN CLASS="keyword">static</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> pre_comment  = no_comment <SPAN CLASS='numeric_literal'>+ 1</SPAN>;
+    <SPAN CLASS="keyword">static</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> comment      = pre_comment <SPAN CLASS='numeric_literal'>+ 1</SPAN>;
+    <SPAN CLASS="keyword">static</SPAN> <SPAN CLASS="keyword">const</SPAN> <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> post_comment = comment <SPAN CLASS='numeric_literal'>+ 1</SPAN>;
+
+    <SPAN CLASS="keyword">void</SPAN> push_slash(<SPAN CLASS="keyword">char</SPAN> c) { push('/'); push(c); }
+
+    <SPAN CLASS="keyword">typedef</SPAN> boost::mpl::vector<
+                row<no_comment,   is<<SPAN CLASS='literal'>'/'</SPAN>>, pre_comment,  &self::skip>,
+                row<no_comment,   is_any,  no_comment,   &self::push>,
+                row<pre_comment,  is<<SPAN CLASS='literal'>'*'</SPAN>>, comment,      &self::skip>,
+                row<pre_comment,  is<<SPAN CLASS='literal'>'/'</SPAN>>, pre_comment,  &self::push>,
+                row<pre_comment,  is_any,  no_comment,   &self::push_slash>,
+                row<comment,      is<<SPAN CLASS='literal'>'*'</SPAN>>, post_comment, &self::skip>,
+                row<comment,      is_any,  comment,      &self::skip>,
+                row<post_comment, is<<SPAN CLASS='literal'>'/'</SPAN>>, no_comment,   &self::skip>,
+                row<post_comment, is<<SPAN CLASS='literal'>'*'</SPAN>>, post_comment, &self::skip>,
+                row<post_comment, is_any,  comment,      &self::skip>
+            > transition_table;
+};</PRE>
+
+<P>
+    This machine has four states and one user-defined event handler. I'll leave it as an exercise to discover how it works.
+</P>
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='dual_use_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next_disabled.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file <A HREF="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/tutorial/line_wrapping_filters.html b/vendor/pdalboost/libs/iostreams/doc/tutorial/line_wrapping_filters.html
new file mode 100644
index 0000000..4f3f4cd
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tutorial/line_wrapping_filters.html
@@ -0,0 +1,264 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Tutorial</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Tutorial</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='shell_comments_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='tab_expanding_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+
+<A NAME="line_wrapping"></A>
+<H2>2.2.4. Line-Wrapping Filters</H2>
+
+<P>
+    Suppose you want to write a filter which wraps lines of text to ensure that no line exceeds a certain maximum length. For simplicity, let's not bother to wrap lines at word boundaries or to insert hyphens. The basic algorithm is as follows: You examine characters one at a time, fowarding them <I>as-is</I>, keeping track of the current column number. When you encounter a newline character, you forward it and reset the column count. When the column count reaches the maxim value, you in [...]
+</P>
+
+<P>
+    In the next three sections, I'll express this algorithm as a <A HREF="../classes/stdio_filter.html"><CODE>stdio_filter</CODE></A>, an <A HREF="../concepts/input_filter.html">InputFilter</A> and an <A HREF="../concepts/output_filter.html">OutputFilter</A>. The source code can be found in the header <A HREF="../../example/line_wrapping_filter.hpp"><CODE><libs/iostreams/example/line_wrapping_filter.hpp></CODE></A>. These examples were inspired by James Kanze's <CODE>LineWrappingIn [...]
+</P>
+
+<A NAME="line_wrapping_stdio_filter"></A>
+<H4><CODE>line_wrapping_stdio_filter</CODE></H4>
+
+<P>You can express a line-wrapping Filter as a <A HREF="../classes/stdio_filter.html"><CODE>stdio_filter</CODE></A> as follows:</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS="literal"><cstdio></SPAN>    <SPAN CLASS="comment">// EOF</SPAN>
+<SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><iostream></SPAN>  <SPAN CLASS="comment">// cin, cout</SPAN>
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/filter/stdio.hpp"><SPAN CLASS="literal"><boost/iostreams/filter/stdio.hpp></SPAN></A>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> line_wrapping_stdio_filter : <SPAN CLASS="keyword"><SPAN CLASS="keyword"><SPAN CLASS="keyword">public</SPAN></SPAN></SPAN> stdio_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    explicit line_wrapping_stdio_filter(<SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> line_length = <SPAN CLASS='numeric_literal'>80</SPAN>)
+        : line_length_(line_length), col_no_(<SPAN CLASS='numeric_literal'>0</SPAN>) 
+        { }
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">void</SPAN> do_filter();
+    <SPAN CLASS="keyword">void</SPAN> do_close();
+    <SPAN CLASS="keyword">void</SPAN> put_char(<SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c);
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>  line_length_;
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>  col_no_;
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>Let's look first at the definition of the helper function <CODE>put_char</CODE>:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">void</SPAN> put_char(<SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c)
+    {
+        std::cout.put(c);
+        <SPAN CLASS="keyword">if</SPAN> (c != <SPAN CLASS="literal">'\n'</SPAN>)
+            ++col_no_;
+        <SPAN CLASS="keyword">else</SPAN>
+            col_no_ = <SPAN CLASS='numeric_literal'>0</SPAN>;
+    }</PRE>
+
+
+<P>This function writes the given character to <CODE>std::cout</CODE> and increments the column number, unless the character is a newline, in which case the column number is reset. Using <CODE>put_char</CODE>, you can implement the <CODE>virtual</CODE> function <CODE>do_filter</CODE> as follows:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">void</SPAN> do_filter() 
+    {
+        <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c;
+        <SPAN CLASS="keyword">while</SPAN> ((c = std::cin.get()) != <SPAN CLASS='numeric_literal'>EOF</SPAN>) {
+            <SPAN CLASS="keyword">if</SPAN> (c != <SPAN CLASS="literal">'\n'</SPAN> && col_no_ >= line_length_)
+                put_char(<SPAN CLASS="literal">'\n'</SPAN>);
+            put_char(c);
+        }
+    }</PRE>
+
+<P>The <CODE>while</CODE> loop simply reads a character from <CODE>std::cin</CODE> and writes it to <CODE>std::cout</CODE>, inserting an extra newline character as needed to prevent the column count from exceeding <CODE>line_length_</CODE>.
+
+<P>Finally, the member function <CODE>do_close</CODE> overrides a <CODE>private</CODE> <CODE>virtual</CODE> function declared in <CODE>stdio_filter</CODE>.</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">void</SPAN> do_close() { col_no_ = <SPAN CLASS='numeric_literal'>0</SPAN>; }</PRE>
+
+<P>Its purpose is to reset the state of the Filter when a stream is closed.</P>
+
+<A NAME="line_wrapping_input_filter"></A>
+<H4><CODE>line_wrapping_input_filter</CODE></H4>
+
+<P>You can express a line-wrapping Filter as an <A HREF="../concepts/input_filter.html">InputFilter</A> as follows:</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/char_traits.hpp"><SPAN CLASS="literal"><boost/iostreams/char_traits.hpp></SPAN></A> <SPAN CLASS="comment">// EOF, WOULD_BLOCK</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/concepts.hpp></SPAN></A>    <SPAN CLASS="comment">// input_filter</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A>  <SPAN CLASS="comment">// get</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> line_wrapping_input_filter : <SPAN CLASS="keyword"><SPAN CLASS="keyword"><SPAN CLASS="keyword">public</SPAN></SPAN></SPAN> input_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    explicit line_wrapping_input_filter(<SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> line_length = 80)
+        : line_length_(line_length), col_no_(0), has_next_(<SPAN CLASS="keyword">false</SPAN>)
+        { }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> get(Source& src);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword">void</SPAN> close(Sink&);
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> get_char(<SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c);
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>  line_length_;
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>  col_no_;
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>  next_;
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>  has_next_;
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>Let's look first at the helper function <CODE>get_char</CODE>:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> get_char(<SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c)
+    {
+        <SPAN CLASS="keyword">if</SPAN> (c != <SPAN CLASS="literal">'\n'</SPAN>)
+            ++col_no_;
+        <SPAN CLASS="keyword">else</SPAN>
+            col_no_ = 0;
+        <SPAN CLASS="keyword">return</SPAN> c;
+    }</PRE>
+
+<P>This function updates the column count based on the given character <CODE>c</CODE>, then returns <CODE>c</CODE>. Using <CODE>get_char</CODE>, you can implement <CODE>get</CODE> as follows:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> get(Source& src)
+    {
+        <SPAN CLASS="keyword">if</SPAN> (has_next_) {
+            has_next_ = <SPAN CLASS="keyword">false</SPAN>;
+            <SPAN CLASS="keyword">return</SPAN> get_char(next_);
+        }
+
+        <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c;
+        <SPAN CLASS="keyword">if</SPAN> ((c = iostreams::get(src)) == <SPAN CLASS="numeric_literal">EOF</SPAN> || c == WOULD_BLOCK)
+            <SPAN CLASS="keyword">return</SPAN> c;
+
+        <SPAN CLASS="keyword">if</SPAN> (c != <SPAN CLASS="literal">'\n'</SPAN> && col_no_ >= line_length_) {
+            next_ = c;
+            has_next_ = <SPAN CLASS="keyword">true</SPAN>;
+            <SPAN CLASS="keyword">return</SPAN> get_char(<SPAN CLASS="literal">'\n'</SPAN>);
+        }
+
+        <SPAN CLASS="keyword">return</SPAN> get_char(c);
+    }</PRE>
+
+<P>
+    An <A HREF="../concepts/input_filter.html">InputFilter</A> which is not a <A HREF="../concepts/multi_character.html">MultiCharacterFilter</A> can only return a single character at a time. Consequently, if you wish to insert a newline before a character <CODE>c</CODE> read from <CODE>src</CODE>, you must store <CODE>c</CODE> and return it the next time <CODE>get</CODE> is called. The member variable <CODE>next_</CODE> is used to store such a character; the member variable <CODE>has_ne [...]
+</P>
+
+<P>
+    The implementation of <CODE>get</CODE> first checks to see if there is stored character, and returns it if there is. Otherwise, it attemps to read a character from <CODE>src</CODE>. If no character can be read, it returns one of the special values <CODE>EOF</CODE> or <CODE>WOULD_BLOCK</CODE>. Otherwise, it checks whether a newline must be inserted. If so, it stores the current character and returns a newline. Otherwise, it returns the current character.
+</P>
+
+<P>Finally, the member function <CODE>close</CODE> resets the Filter's state:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword">void</SPAN> close(Sink&)
+    { 
+        col_no_ = 0; 
+        has_next_ = <SPAN CLASS="keyword">false</SPAN>; 
+    }</PRE>
+
+<A NAME="line_wrapping_output_filter"></A>
+<H4><CODE>line_wrapping_output_filter</CODE></H4>
+
+<P>You can express a line-wrapping Filter as an <A HREF="../concepts/output_filter.html">OutputFilter</A> as follows:</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/concepts.hpp></SPAN></A>    <SPAN CLASS="comment">// output_filter</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A>  <SPAN CLASS="comment">// put</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> line_wrapping_output_filter : <SPAN CLASS="keyword"><SPAN CLASS="keyword"><SPAN CLASS="keyword">public</SPAN></SPAN></SPAN> output_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    explicit line_wrapping_output_filter(<SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> line_length = 80)
+        : line_length_(line_length), col_no_(0) 
+        { }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> put(Sink& dest, <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword">void</SPAN> close(Sink&);
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> put_char(Sink& dest, <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c);
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>  line_length_;
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>  col_no_;
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>Let's look first at the helper function <CODE>put_char</CODE>:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> put_char(Sink& dest, <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c)
+    {
+        <SPAN CLASS="keyword">if</SPAN> (!iostreams::put(dest, c))
+            <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS="keyword">false</SPAN>;
+        <SPAN CLASS="keyword">if</SPAN> (c != <SPAN CLASS="literal">'\n'</SPAN>)
+            ++col_no_;
+        <SPAN CLASS="keyword">else</SPAN>
+            col_no_ = 0;
+        <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS="keyword">true</SPAN>;
+    }</PRE>
+
+<P>This function attempts to write the character <CODE>c</CODE> to the given <A HREF="../concepts/sink.html">Sink</A> and updates the column count if successful. Using <CODE>put_char</CODE>, you can implement <CODE>put</CODE> as follows:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> put(Sink& dest, <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c)
+    {
+        <SPAN CLASS="keyword">if</SPAN> (c != <SPAN CLASS="literal">'\n'</SPAN> && col_no_ >= line_length_ && !put_char(dest, <SPAN CLASS="literal">'\n'</SPAN>))
+            <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS="keyword">false</SPAN>;
+        <SPAN CLASS="keyword">return</SPAN> put_char(dest, c);
+    }</PRE>
+
+<P>
+    This function first checks the given character and the column count to see whether a newline character must be inserted. If so, it attempts to write a newline using <CODE>put_char</CODE> and returns false if the operation fails. Otherwise, it attempts to write the the given character using <CODE>put_char</CODE>. Note that if a newline is successfully inserted but the attempt to write the given character fails, the column count will be updated to reflect the newline character so that  [...]
+</P>
+
+<P>Finally, the member function <CODE>close</CODE> resets the Filter's state:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword">void</SPAN> close(Sink&) { col_no_ = 0; }</PRE>
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='shell_comments_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='tab_expanding_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file <A HREF="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/tutorial/multichar_filters.html b/vendor/pdalboost/libs/iostreams/doc/tutorial/multichar_filters.html
new file mode 100644
index 0000000..6c93342
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tutorial/multichar_filters.html
@@ -0,0 +1,274 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Tutorial</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Tutorial</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='unix2dos_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='dual_use_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+
+<A NAME="multichar"></A>
+<H2>2.2.8. Multi-Character Filters</H2>
+
+<P>
+    All the Filters you've seen so far — except for those that derive from <CODE>stdio_filter</CODE> — process characters one at a time. If you instead process several characters at once, you can often reduce the number of function calls it takes to filter a character sequence, resulting in more efficient code. This is what <A HREF="../concepts/multi_character.html">Multi-Character Filters</A> allow you to do.
+</P>
+
+<A NAME="multichar_input_filters"></A>
+<H4>Multi-Character InputFilters</H4>
+
+<P>A typical narrow-character <A HREF="../concepts/multi_character.html">Multi-Character</A> <A HREF="../concepts/input_filter.html">InputFilter</A> looks like this:<P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS="literal"><iosfwd></SPAN>                          <SPAN CLASS='comment'>// streamsize</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/categories.hpp"><SPAN CLASS='literal'><boost/iostreams/categories.hpp></SPAN></A>  <SPAN CLASS='comment'>// tags
+</SPAN>
+<SPAN CLASS='keyword'>class</SPAN> my_input_filter {
+<SPAN CLASS='keyword'>public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>char</SPAN> char_type;
+    <SPAN CLASS='keyword'>struct</SPAN> category 
+        : input_filter_tag,
+          multichar_tag
+        { };
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    std::streamsize read(Source& src, <SPAN CLASS='keyword'>char</SPAN>* s, std::streamsize n)
+    {
+        <SPAN CLASS='comment'>// Read up to n filtered characters into the buffer s,</SPAN>
+        <SPAN CLASS='comment'>// returning the number of characters read or -1 for EOF.</SPAN>
+        <SPAN CLASS='comment'>// Use src to access the unfiltered character sequence</SPAN>
+    }
+
+    <SPAN CLASS='comment'>/* Other members */</SPAN>
+};</PRE>
+
+<P>
+    Notice that the member type category is a <CODE>struct</CODE> convertible to <CODE>input_filter_tag</CODE> and to <CODE>multichar_tag</CODE>. This tells the Iostream library that <CODE>my_input_filter</CODE> is a <A HREF="../concepts/multi_character.html">Multi-Character Filter</A> and an <A HREF="../concepts/input_filter.html">InputFilter</A>. You could have achieved the same effect several ways. <I>E.g.</I>,
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>struct</SPAN> category 
+        : input,
+          filter_tag,
+          multichar_tag
+        { };
+
+        <SPAN CLASS='comment'>/* or */</SPAN>
+
+    <SPAN CLASS='keyword'>typedef</SPAN> multichar_input_filter_tag category;</PRE>
+
+<P>(For details, <I>see</I> <A HREF="../guide/modes.html#mode_tags">Mode Tags</A> and <A HREF="../guide/traits.html#category_tags">Category Tags</A>.)
+
+<P> You could also write the above example as follows:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS="literal"><iosfwd></SPAN>                       <SPAN CLASS='comment'>// streamsize</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS='literal'><boost/iostreams/concepts.hpp></SPAN></A> <SPAN CLASS='comment'>// multichar_input_filter</SPAN>
+
+<SPAN CLASS='keyword'>class</SPAN> my_input_filter : <SPAN CLASS='keyword'>public</SPAN> multichar_input_filter {
+<SPAN CLASS='keyword'>public</SPAN>:
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    std::streamsize read(<SPAN CLASS='keyword'>char</SPAN>* s, std::streamsize n);
+
+    <SPAN CLASS='comment'>/* Other members */</SPAN>
+};</PRE>
+
+<P>Here <A HREF="../classes/filter.html#synopsis"><CODE>multichar_input_filter</CODE></A> is a convenience base class which provides the member types <CODE>char_type</CODE> and <CODE>category</CODE>, as well as no-op implementations of member functions <CODE>close</CODE> and <CODE>imbue</CODE>.
+
+<A NAME="shell_comments_multichar_input_filter"></A>
+<H4><CODE>shell_comments_multichar_input_filter</CODE></H4>
+
+<P>You can express a <A HREF="shell_comments_filters.html">shell comments Filter</A> as an <A HREF="../concepts/multi_character.html">Multi-Character</A> <A HREF="../concepts/input_filter.html">InputFilter</A> as follows:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/char_traits.hpp"><SPAN CLASS="literal"><boost/iostreams/char_traits.hpp></SPAN></A> <SPAN CLASS="comment">// EOF, WOULD_BLOCK</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/concepts.hpp></SPAN></A>    <SPAN CLASS="comment">// multichar_input_filter</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A>  <SPAN CLASS="comment">// get</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> shell_comments_multichar_input_filter : <SPAN CLASS="keyword">public</SPAN> multichar_input_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">explicit</SPAN> shell_comments_multichar_input_filter(<SPAN CLASS="keyword">char</SPAN> comment_char = '#')
+        : comment_char_(comment_char), skip_(<SPAN CLASS="keyword">false</SPAN>)
+        { }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    std::streamsize read(Source& src, <SPAN CLASS="keyword">char</SPAN>* s, std::streamsize n)
+    {
+        <SPAN CLASS="keyword">for</SPAN> (std::streamsize z = <SPAN CLASS='numeric_literal'>0</SPAN>; z < n; ++z) {
+            <SPAN CLASS="keyword">int</SPAN> c;
+            <SPAN CLASS="keyword">while</SPAN> (true) {
+                <SPAN CLASS="keyword">if</SPAN> ((c = boost::iostreams::get(src)) == <SPAN CLASS='numeric_literal'>EOF</SPAN>)
+                    <SPAN CLASS="keyword">return</SPAN> z != <SPAN CLASS='numeric_literal'>0</SPAN> ? z : <SPAN CLASS='numeric_literal'>-1</SPAN>;
+                <SPAN CLASS="keyword">else</SPAN> <SPAN CLASS="keyword">if</SPAN> (c == WOULD_BLOCK)
+                    <SPAN CLASS="keyword">return</SPAN> z;
+                skip_ = c == comment_char_ ?
+                    <SPAN CLASS="keyword">true</SPAN> :
+                    c == '\n' ?
+                        <SPAN CLASS="keyword">false</SPAN> :
+                        skip_;
+                <SPAN CLASS="keyword">if</SPAN> (!skip_)
+                    <SPAN CLASS="keyword">break</SPAN>;
+            }
+            s[z] = c;
+        }
+        <SPAN CLASS="keyword">return</SPAN> n;
+    }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword">void</SPAN> close(Source&) { skip_ = false; }
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">char</SPAN> comment_char_;
+    <SPAN CLASS="keyword">bool</SPAN> skip_;
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>
+    Note that the implementation of <CODE>read</CODE> is very similar to what you would get if you put the implementation of <A HREF="shell_comments_filters.html#shell_comments_input_filter"><CODE>shell_comments_input_filter::get</CODE></A> inside a <CODE>for</CODE> loop iterating from <CODE>0</CODE> to <CODE>n</CODE>. InputFilters which call themselves recursively, such as <A HREF="tab_expanding_filters.html#tab_expanding_input_filter"><CODE>tab_expanding_input_filter</CODE></A>,  are m [...]
+</P>
+
+<A NAME="multichar_output_filters"></A>
+<H4>Multi-Character OutputFilters</H4>
+
+<P>A typical narrow-character <A HREF="../concepts/multi_character.html">Multi-Character</A> <A HREF="../concepts/output_filter.html">OutputFilter</A> looks like this:<P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS="literal"><iosfwd></SPAN>                          <SPAN CLASS='comment'>// streamsize</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/categories.hpp"><SPAN CLASS='literal'><boost/iostreams/categories.hpp></SPAN></A>  <SPAN CLASS='comment'>// tags
+</SPAN>
+<SPAN CLASS='keyword'>class</SPAN> my_output_filter {
+<SPAN CLASS='keyword'>public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>char</SPAN> char_type;
+    <SPAN CLASS='keyword'>struct</SPAN> category 
+        : output_filter_tag,
+          multichar_tag
+        { };
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    std::streamsize write(Sink& dest, <SPAN CLASS='keyword'>const</SPAN> <SPAN CLASS='keyword'>char</SPAN>* s, std::streamsize n)
+    {
+        <SPAN CLASS='comment'>// Consume up to n filtered characters from the buffer s,</SPAN>
+        <SPAN CLASS='comment'>// writing filtered characters to dest. Return the number</SPAN>
+        <SPAN CLASS='comment'>// of characters consumed.</SPAN>
+    }
+
+    <SPAN CLASS='comment'>/* Other members */</SPAN>
+};</PRE>
+
+<P>
+    Notice that the member type category is a <CODE>struct</CODE> convertible to <CODE>keyword</CODE> and to <CODE>multichar_tag</CODE>. This tells the Iostream library that <CODE>my_output_filter</CODE> is a <A HREF="../concepts/multi_character.html">Multi-Character Filter</A> and an <A HREF="../concepts/output_filter.html">OutputFilter</A>. As with <A HREF="../concepts/multi_character.html">Multi-Character</A> <A HREF="../concepts/input_filter.html">InputFilters</A>, you could have ach [...]
+</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS='keyword'>struct</SPAN> category 
+        : output,
+          filter_tag,
+          multichar_tag
+        { };
+
+        <SPAN CLASS='comment'>/* or */</SPAN>
+
+    <SPAN CLASS='keyword'>typedef</SPAN> multichar_output_filter_tag category;</PRE>
+
+<P>(For details, <I>see</I> <A HREF="../guide/modes.html#mode_tags">Mode Tags</A> and <A HREF="../guide/traits.html#category_tags">Category Tags</A>.)
+
+<P> You could also write the above example as follows:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS="literal"><iosfwd></SPAN>                       <SPAN CLASS='comment'>// streamsize</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS='literal'><boost/iostreams/concepts.hpp></SPAN></A> <SPAN CLASS='comment'>// multichar_output_filter</SPAN>
+
+<SPAN CLASS='keyword'>class</SPAN> my_output_filter : <SPAN CLASS='keyword'>public</SPAN> multichar_output_filter {
+<SPAN CLASS='keyword'>public</SPAN>:
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    std::streamsize write(Sink& dest, <SPAN CLASS='keyword'>const</SPAN> <SPAN CLASS='keyword'>char</SPAN>* s, std::streamsize n);
+
+    <SPAN CLASS='comment'>/* Other members */</SPAN>
+};</PRE>
+
+<P>Here <A HREF="../classes/filter.html#synopsis"><CODE>multichar_output_filter</CODE></A> is a convenience base class which provides the member types <CODE>char_type</CODE> and <CODE>category</CODE>, as well as no-op implementations of member functions <CODE>close</CODE> and <CODE>imbue</CODE>.
+
+<A NAME="shell_comments_multichar_ouput_filter"></A>
+<H4><CODE>shell_comments_multichar_output_filter</CODE></H4>
+
+<P>You can express a <A HREF="shell_comments_filters.html">shell comments Filter</A> as an <A HREF="../concepts/multi_character.html">Multi-Character</A> <A HREF="../concepts/output_filter.html">OutputFilter</A> as follows:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/char_traits.hpp"><SPAN CLASS="literal"><boost/iostreams/char_traits.hpp></SPAN></A> <SPAN CLASS="comment">// EOF, WOULD_BLOCK</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/concepts.hpp></SPAN></A>    <SPAN CLASS="comment">// multichar_output_filter</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A>  <SPAN CLASS="comment">// get</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> shell_comments_multichar_output_filter : <SPAN CLASS="keyword">public</SPAN> multichar_output_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS="keyword">explicit</SPAN> shell_comments_multichar_output_filter(<SPAN CLASS="keyword">char</SPAN> comment_char = '#')
+        : comment_char_(comment_char), skip_(<SPAN CLASS="keyword">false</SPAN>)
+        { }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    std::streamsize write(Sink& dest, <SPAN CLASS="keyword">const</SPAN> char* s, std::streamsize n)
+    {
+        std::streamsize z;
+        <SPAN CLASS="keyword">for</SPAN> (z = <SPAN CLASS='numeric_literal'>0</SPAN>; z < n; ++z) {
+            <SPAN CLASS="keyword">int</SPAN> c = s[z];
+            skip_ = c == comment_char_ ?
+                <SPAN CLASS="keyword">true</SPAN> :
+                c == <SPAN CLASS='literal'>'\n'</SPAN> ?
+                    <SPAN CLASS="keyword">false</SPAN> :
+                    skip_;
+            <SPAN CLASS="keyword">if</SPAN> (skip_)
+                <SPAN CLASS="keyword">continue</SPAN>;
+            <SPAN CLASS="keyword">if</SPAN> (!iostreams::put(dest, c))
+                <SPAN CLASS="keyword">break</SPAN>;
+        }
+        <SPAN CLASS="keyword">return</SPAN> z;
+    }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword">void</SPAN> close(Source&) { skip_ = <SPAN CLASS="keyword">false</SPAN>; }
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">char</SPAN> comment_char_;
+    <SPAN CLASS="keyword">bool</SPAN> skip_;
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>
+    Note that the implementation of <CODE>write</CODE> is very similar to what you would get if you put the implementation of <A HREF="shell_comments_filters.html#shell_comments_output_filter"><CODE>shell_comments_output_filter::put</CODE></A> inside a <CODE>for</CODE> loop iterating from <CODE>0</CODE> to <CODE>n</CODE>. OutputFilters which call themselves recursively, such as <A HREF="unix2dos_filters.html#unix2dos_output_filter"><CODE>unix2dos_output_filter</CODE></A>,  are much harde [...]
+</P>
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='unix2dos_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='dual_use_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file <A HREF="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/tutorial/shell_comments_filters.html b/vendor/pdalboost/libs/iostreams/doc/tutorial/shell_comments_filters.html
new file mode 100644
index 0000000..0234cbd
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tutorial/shell_comments_filters.html
@@ -0,0 +1,308 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Tutorial</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Tutorial</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='filter_usage.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='line_wrapping_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+
+<A NAME="shell_comments"></A>
+<H2>2.2.3. Shell Comments Filters</H2>
+
+<P>
+    Suppose you want to write a filter to remove shell-style comments. The basic algorithm is as follows: you examine characters one at a time, forwarding them unchanged, until you encounter a comment character, typically <CODE>'#'</CODE>. When you find a comment character, you examine and ignore characters until you encounter a newline character, at which point the algorithm begins again. Note that this algorithm consists of two subalgorithms: one algorithm for reading ordinary text, an [...]
+</P>
+
+<P>
+    In the next three sections, I'll express this algorithm as a <A HREF="../classes/stdio_filter.html"><CODE>stdio_filter</CODE></A>, an <A HREF="../concepts/input_filter.html">InputFilter</A> and an <A HREF="../concepts/output_filter.html">OutputFilter</A>. The source code can be found in the header <A HREF="../../example/shell_comments_filter.hpp"><CODE><libs/iostreams/example/shell_comments_filter.hpp></CODE></A>. These examples were inspired by James Kanze's <CODE>UncommentExt [...]
+</P>
+
+<A NAME="shell_comments_stdio_filter"></A>
+<H4><CODE>shell_comments_stdio_filter</CODE></H4>
+
+<P>You can express a shell comments Filter as a <A HREF="../classes/stdio_filter.html"><CODE>stdio_filter</CODE></A> as follows:</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS="literal"><cstdio></SPAN>    <SPAN CLASS="comment">// EOF</SPAN>
+<SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><iostream></SPAN>  <SPAN CLASS="comment">// cin, cout</SPAN>
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/filter/stdio.hpp"><SPAN CLASS="literal"><boost/iostreams/filter/stdio.hpp></SPAN></A>
+
+<SPAN CLASS="keyword">class</SPAN> shell_comments_stdio_filter : <SPAN CLASS="keyword"><SPAN CLASS="keyword"><SPAN CLASS="keyword">public</SPAN></SPAN></SPAN> stdio_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    explicit shell_comments_stdio_filter(<SPAN CLASS="keyword">char</SPAN> comment_char = <SPAN CLASS="literal">'#'</SPAN>)
+        : comment_char_(comment_char) 
+        { }
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">void</SPAN> do_filter()
+    {
+        <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN>  skip = <SPAN CLASS="keyword">false</SPAN>;
+        <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>   c;
+        <SPAN CLASS="keyword">while</SPAN> ((c = std::cin.get()) != <SPAN CLASS="numeric_literal">EOF</SPAN>) {
+            skip = c == comment_char_ ?
+                <SPAN CLASS="keyword">true</SPAN> :
+                c == <SPAN CLASS="literal">'\n'</SPAN> ?
+                    <SPAN CLASS="keyword">false</SPAN> :
+                    skip;
+            <SPAN CLASS="keyword">if</SPAN> (!skip)
+                std::cout.put(c);
+        }
+    }
+    <SPAN CLASS="keyword">char</SPAN> comment_char_;
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>
+    The implementation of the <CODE>virtual</CODE> function <CODE>do_filter</CODE> is straightforward: The local variable <CODE>skip</CODE> keeps track of whether you are currently processing a comment; the <CODE>while</CODE> loop reads a character <CODE>c</CODE> from <CODE>std::cin</CODE>, updates <CODE>skip</CODE> and writes <CODE>c</CODE> to <CODE>std::cout</CODE> unless <CODE>skip</CODE> is <CODE>true</CODE>.
+</P>
+
+<P>Filters which derive from <CODE>stdio_filter</CODE> are <A HREF="../concepts/dual_use_filter.html">DualUseFilters</A>, which mean they can be used either for output or for input, but not both simultaneously. Therefore <CODE>unix2dos_stdio_filter</CODE> can be used in place of <A HREF="#shell_comments_input_filter"><CODE>shell_comments_input_filter</CODE></A> and <A HREF="#shell_comments_output_filter"><CODE>shell_comments_output_filter</CODE></A>, below.
+
+<A NAME="shell_comments_input_filter"></A>
+<H4><CODE>shell_comments_input_filter</CODE></H4>
+
+<P>Next you will express a shell comments Filter as an <A HREF="../concepts/input_filter.html">InputFilter</A>. A typical narrow-character InputFilter looks like this:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/categories.hpp"><SPAN CLASS='literal'><boost/iostreams/categories.hpp></SPAN></A>  <SPAN CLASS='comment'>// input_filter_tag</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/char_traits.hpp"><SPAN CLASS='literal'><boost/iostreams/char_traits.hpp></SPAN></A> <SPAN CLASS='comment'>// EOF, WOULD_BLOCK</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS='literal'><boost/iostreams/operations.hpp></SPAN></A>  <SPAN CLASS='comment'>// get, read, putback</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS='keyword'>class</SPAN> my_input_filter {
+<SPAN CLASS='keyword'>public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>char</SPAN>              char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> input_filter_tag  category;
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS='keyword'>int</SPAN> get(Source& src)
+    {
+        <SPAN CLASS='comment'>// Attempt to produce one character of filtered</SPAN>
+        <SPAN CLASS='comment'>// data, reading from src as necessary. If successful,</SPAN>
+        <SPAN CLASS='comment'>// return the character; otherwise return EOF to</SPAN>
+        <SPAN CLASS='comment'>// indicate end-of-stream, or WOULD_BLOCK</SPAN>
+    }
+
+    <SPAN CLASS='comment'>/* Other members */</SPAN>
+};</PRE>
+
+<P>The function <CODE>get</CODE> attempts to produce a single character of filtered output. It accesses the unfiltered character sequence though the provided <A HREF="../concepts/source.html">Source</A> <CODE>src</CODE>, using the fundamental i/o operations <A HREF="../functions/get.html"><CODE>get</CODE></A>, <A HREF="../functions/read.html"><CODE>read</CODE></A> and <A HREF="../functions/putback.html"><CODE>putback</CODE></A>. If a character is produced, <CODE>get</CODE> returns it. Ot [...]
+
+<P> You could also write the above example as follows:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS='literal'><boost/iostreams/concepts.hpp></SPAN></A>  <SPAN CLASS='comment'>// input_filter</SPAN>
+
+<SPAN CLASS='keyword'>class</SPAN> my_input_filter : <SPAN CLASS='keyword'>public</SPAN> input_filter {
+<SPAN CLASS='keyword'>public</SPAN>:
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS='keyword'>int</SPAN> get(Source& src);
+
+    <SPAN CLASS='comment'>/* Other members */</SPAN>
+};</PRE>
+
+<P>Here <A HREF="../classes/filter.html#synopsis"><CODE>input_filter</CODE></A> is a convenience base class which provides the member types <CODE>char_type</CODE> and <CODE>category</CODE>, as well as no-op implementations of member functions <CODE>close</CODE> and <CODE>imbue</CODE>. I will discuss <CODE>close</CODE> shortly.
+
+<P>You're now ready to express a shell Comments Filter as an <A HREF="../concepts/input_filter.html">InputFilter</A>:</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/char_traits.hpp"><SPAN CLASS="literal"><boost/iostreams/char_traits.hpp></SPAN></A> <SPAN CLASS="comment">// EOF, WOULD_BLOCK</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/concepts.hpp></SPAN></A>    <SPAN CLASS="comment">// input_filter</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A>  <SPAN CLASS="comment">// get</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> shell_comments_input_filter : <SPAN CLASS="keyword"><SPAN CLASS="keyword"><SPAN CLASS="keyword">public</SPAN></SPAN></SPAN> input_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    explicit shell_comments_input_filter(<SPAN CLASS="keyword">char</SPAN> comment_char = <SPAN CLASS="literal">'#'</SPAN>)
+        : comment_char_(comment_char), skip_(<SPAN CLASS="keyword">false</SPAN>)
+        { }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> get(Source& src)
+    {
+        <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c;
+        <SPAN CLASS="keyword">while</SPAN> (<SPAN CLASS="keyword">true</SPAN>) {
+            <SPAN CLASS="keyword">if</SPAN> ((c = boost::iostreams::get(src)) == <SPAN CLASS="numeric_literal">EOF</SPAN> || c == WOULD_BLOCK)
+                break;
+            skip_ = c == comment_char_ ?
+                <SPAN CLASS="keyword">true</SPAN> :
+                c == <SPAN CLASS="literal">'\n'</SPAN> ?
+                    <SPAN CLASS="keyword">false</SPAN> :
+                    skip_;
+            <SPAN CLASS="keyword">if</SPAN> (!skip_)
+                break;
+        }
+        <SPAN CLASS="keyword">return</SPAN> c;
+    }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword">void</SPAN> close(Source&) { skip_ = <SPAN CLASS="keyword">false</SPAN>; }
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">char</SPAN> comment_char_;
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> skip_;
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>
+    Here the member variable <CODE>skip_</CODE> plays the same role as the local variable <CODE>skip</CODE> <CODE>shell_comments_stdio_filter::do_filter</CODE>. The implementation of <CODE>get</CODE> is very similar to that of  <CODE>shell_comments_stdio_filter::do_filter</CODE>: the <CODE>while</CODE> loop reads a character <CODE>c</CODE>, updates <CODE>skip_</CODE> and returns <CODE>c</CODE> unless <CODE>skip_</CODE>  is <CODE>true</CODE>. The main difference is that you have to handle [...]
+</P>
+<P>
+    So you see that implementing an <A HREF="../concepts/input_filter.html"><CODE>InputFilter</CODE></A> from scratch is a bit more involved than deriving from <A HREF="../classes/stdio_filter.html"><CODE>stdio_filter</CODE></A>. When writing an <CODE>InputFilter</CODE> you must be prepared to be interrupted at any point in the middle of the algorithm; when this happens, you must record enough information about the current state of the algorithm to allow you to pick up later exactly wher [...]
+</P>
+<P>
+    There's still one problem with <CODE>shell_comments_input_filter</CODE>: its instances can only be used once. That's because someone might close a stream while the <CODE>skip_</CODE> flag is set. If the stream were later reopened — with a fresh sequence of unfiltered data — the first line of text would be filtered out, regardless of whether it were commented.
+</P>
+<P>
+    The way to fix this is to make your Filter <A HREF="../concepts/closable.html">Closable</A>. To do this, you must implement a member function <CODE>close</CODE>. You must also give your filter a <A HREF="../guide/traits.html#category_tags">category tag</A> convertible to <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A>, to tell the Iostream library that your filter implements <CODE>close</CODE>.
+</P>
+
+<P>The improved Filter looks like this:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> shell_comments_input_filter : <SPAN CLASS='keyword'>public</SPAN> input_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    shell_comments_input_filter();
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword">int</SPAN> get(Source& src);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword">void</SPAN> close(Source&) { skip_ = <SPAN CLASS="keyword">false</SPAN>; }
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">bool</SPAN> skip_;
+};
+
+} } } <SPAN CLASS='comment'>// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>
+    Here I've derived from the helper class <A HREF="../classes/filter.html#synopsis"><CODE>input_filter</CODE></A>, which provides a member type <CODE>char_type</CODE> equal to <CODE>char</CODE> and a category tag convertible to <A HREF="../guide/traits.html#category_tags"><CODE>input_filter_tag</CODE></A> and to <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A>. The implementation of <CODE>close</CODE> simply clears the <CODE>skip_</CODE> flag so that the Filte [...]
+</P>
+
+<A NAME="shell_comments_output_filter"></A>
+<H4><CODE>shell_comments_output_filter</CODE></H4>
+
+<P>
+    Next, let's express a shell comments Filter as an <A HREF="../concepts/output_filter.html">OutputFilter</A>. A typical narrow-character OutputFilter looks like this:
+</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/categories.hpp"><SPAN CLASS='literal'><boost/iostreams/categories.hpp></SPAN></A>  
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS='literal'><boost/iostreams/operations.hpp></SPAN></A>  <SPAN CLASS='comment'>// put, write</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS='keyword'>class</SPAN> my_output_filter {
+<SPAN CLASS='keyword'>public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>char</SPAN>               char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> output_filter_tag  category;
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS='keyword'>bool</SPAN> put(Sink& dest, <SPAN CLASS='keyword'>int</SPAN> c)
+    {
+        <SPAN CLASS='comment'>// Attempt to consume the given character of unfiltered</SPAN>
+        <SPAN CLASS='comment'>// data, writing filtered data to dest as appropriate. </SPAN>
+        <SPAN CLASS='comment'>// Return true if the character was successfully consumed.</SPAN>
+    }
+
+    <SPAN CLASS='comment'>/* Other members */</SPAN>
+};</PRE>
+
+<P>
+    The function <CODE>put</CODE> attempts to filter the single character <CODE>c</CODE>, writing filtered output to the <A HREF="../concepts/sink.html">Sink</A> <CODE>dest</CODE>. It accesses <CODE>dest</CODE> using the fundamental i/o operations <A HREF="../functions/put.html"><CODE>put</CODE></A> and <A HREF="../functions/write.html"><CODE>write</CODE></A>. Both of these functions may fail: <CODE>iostreams::put</CODE> can return <CODE>false</CODE>, and <CODE>iostreams::write</CODE> ca [...]
+</P>
+
+<P> You could also write the above example as follows:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS='literal'><boost/iostreams/concepts.hpp></SPAN></A>  <SPAN CLASS='comment'>// output_filter</SPAN>
+
+<SPAN CLASS='keyword'>class</SPAN> my_output_filter : <SPAN CLASS='keyword'>public</SPAN> output_filter {
+<SPAN CLASS='keyword'>public</SPAN>:
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS='keyword'>bool</SPAN> put(Sink& dest, <SPAN CLASS='keyword'>int</SPAN> c);
+
+    <SPAN CLASS='comment'>/* Other members */</SPAN>
+};</PRE>
+
+<P>Here <A HREF="../classes/filter.html#synopsis"><CODE>output_filter</CODE></A> is a convenience base class which provides the member types <CODE>char_type</CODE> and <CODE>category</CODE>, as well as no-op implementations of member functions <CODE>close</CODE> and <CODE>imbue</CODE>.</P>
+
+<P>You're now ready to express a shell comments Filter as an <A HREF="../concepts/output_filter.html">OutputFilter</A>:</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/concepts.hpp></SPAN></A>    <SPAN CLASS="comment">// output_filter</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A>  <SPAN CLASS="comment">// put</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> shell_comments_output_filter : <SPAN CLASS="keyword"><SPAN CLASS="keyword"><SPAN CLASS="keyword">public</SPAN></SPAN></SPAN> output_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS='keyword'>explicit</SPAN> shell_comments_output_filter(<SPAN CLASS="keyword">char</SPAN> comment_char = <SPAN CLASS='literal'>'#'</SPAN>)
+        : comment_char_(comment_char), skip_(<SPAN CLASS="keyword">false</SPAN>)
+        { }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> put(Sink& dest, <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c)
+    {
+        skip_ = c == comment_char_ ?
+            <SPAN CLASS="keyword">true</SPAN> :
+            c == <SPAN CLASS="literal">'\n'</SPAN> ?
+                <SPAN CLASS="keyword">false</SPAN> :
+                skip_;
+
+        <SPAN CLASS="keyword">if</SPAN> (skip_)
+            <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS="keyword">true</SPAN>;
+
+        <SPAN CLASS="keyword">return</SPAN> iostreams::put(dest, c);
+    }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword">void</SPAN> close(Source&) { skip_ = <SPAN CLASS="keyword">false</SPAN>; }
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">char</SPAN> comment_char_;
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> skip_;
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>
+    The member function <CODE>put</CODE> first examines the given character <CODE>c</CODE> and updates the member variable <CODE>skip_</CODE>; next, unless <CODE>skip_</CODE> is <CODE>true</CODE>, it attempt to write c. The member function <CODE>close</CODE> simply clears the <CODE>skip_</CODE> flag so that the Filter will be ready to be used again.
+</P>
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='filter_usage.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='line_wrapping_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file <A HREF="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/tutorial/tab_expanding_filters.html b/vendor/pdalboost/libs/iostreams/doc/tutorial/tab_expanding_filters.html
new file mode 100644
index 0000000..a4d3b78
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tutorial/tab_expanding_filters.html
@@ -0,0 +1,280 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Tutorial</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Tutorial</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='line_wrapping_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='dictionary_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<A NAME="tab_expanding"></A>
+<H2>2.2.5. Tab-Expanding Filters</H2>
+
+<P>
+    Suppose you want to write a filter which replaces each tab character with one or more space characters in such a way that the document appears unchanged when displayed. The basic algorithm is as follows: You examine characters one at a time, forwarding them <I>as-is</I> and keeping track of the current column number. When you encounter a tab character, you replace it with a sequence of space characters whose length depends on the current column count. When you encounter a newline cha [...]
+</P>
+
+<P>
+    In the next three sections, I'll express this algorithm as a <A HREF="../classes/stdio_filter.html"><CODE>stdio_filter</CODE></A>, an <A HREF="../concepts/input_filter.html">InputFilter</A> and an <A HREF="../concepts/output_filter.html">OutputFilter</A>. The source code can be found in the header <A HREF="../../example/tab_expanding_filter.hpp"><CODE><libs/iostreams/example/tab_expanding_filter.hpp></CODE></A>. These examples were inspired by James Kanze's <CODE>ExpandTabsInse [...]
+</P>
+
+<A NAME="tab_expanding_stdio_filter"></A>
+<H4><CODE>tab_expanding_stdio_filter</CODE></H4>
+
+<P>You can express a tab-expanding Filter as a <A HREF="../classes/stdio_filter.html"><CODE>stdio_filter</CODE></A> as follows:</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS="literal"><cstdio></SPAN>    <SPAN CLASS="comment">// EOF</SPAN>
+<SPAN CLASS="preprocessor">#include</SPAN> <SPAN CLASS="literal"><iostream></SPAN>  <SPAN CLASS="comment">// cin, cout</SPAN>
+<SPAN CLASS="preprocessor">#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/filter/stdio.hpp"><SPAN CLASS="literal"><boost/iostreams/filter/stdio.hpp></SPAN></A>
+
+<SPAN CLASS="keyword">class</SPAN> tab_expanding_stdio_filter : <SPAN CLASS="keyword"><SPAN CLASS="keyword"><SPAN CLASS="keyword">public</SPAN></SPAN></SPAN> stdio_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    explicit tab_expanding_stdio_filter(<SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> tab_size = 8)
+        : tab_size_(tab_size), col_no_(0)
+    {
+        assert(tab_size > 0);
+    }
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">void</SPAN> do_filter();
+    <SPAN CLASS="keyword">void</SPAN> do_close();
+    <SPAN CLASS="keyword">void</SPAN> put_char(<SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c);
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>  tab_size_;
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>  col_no_;
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>The helper function <CODE>put_char</CODE> is identical to <A HREF="line_wrapping_filters.html#line_wrapping_stdio_filter"><CODE>line_wrapping_stdio_filter::put_char</CODE></A>. It writes a character to <CODE>std::cout</CODE> and updates the column count:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">void</SPAN> put_char(<SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c)
+    {
+        std::cout.put(c);
+        <SPAN CLASS="keyword">if</SPAN> (c == <SPAN CLASS="literal">'\n'</SPAN>) {
+            col_no_ = 0;
+        } <SPAN CLASS="keyword">else</SPAN> {
+            ++col_no_;
+        }
+    }</PRE>
+
+<P>Using <CODE>put_char</CODE> you can implement <CODE>do_filter</CODE> as follows:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">void</SPAN> do_filter()
+    {
+        <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c;
+        <SPAN CLASS="keyword">while</SPAN> ((c = std::cin.get()) != <SPAN CLASS="numeric_literal">EOF</SPAN>) {
+            <SPAN CLASS="keyword">if</SPAN> (c == '\t') {
+                <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> spaces = tab_size_ - (col_no_ % tab_size_);
+                for (; spaces > 0; --spaces)
+                    put_char(' ');
+            } <SPAN CLASS="keyword">else</SPAN> {
+                put_char(c);
+            }
+        }
+    }</PRE>
+
+<P>The <CODE>while</CODE> loop reads a character from <CODE>std::cin</CODE> and writes it to <CODE>std::cout</CODE>, unless it is a tab character, in which case it writes an appropriate number of space characters to <CODE>std::cout</CODE>.</P>
+
+<P>As with <A HREF="line_wrapping_filters.html#line_wrapping_stdio_filter"><CODE>line_wrapping_stdio_filter</CODE></A>, the <CODE>virtual</CODE> function <CODE>do_close</CODE> resets the Filter's state:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">void</SPAN> do_close() { col_no_ = 0; }</PRE>
+
+<A NAME="tab_expanding_input_filter"></A>
+<H4><CODE>tab_expanding_input_filter</CODE></H4>
+
+<P>You can express a tab-expanding Filter as an <A HREF="../concepts/input_filter.html">InputFilter</A> as follows:</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/char_traits.hpp"><SPAN CLASS="literal"><boost/iostreams/char_traits.hpp></SPAN></A> <SPAN CLASS="comment">// EOF, WOULD_BLOCK</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/concepts.hpp></SPAN></A>    <SPAN CLASS="comment">// input_filter</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A>  <SPAN CLASS="comment">// get</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> tab_expanding_input_filter : <SPAN CLASS="keyword"><SPAN CLASS="keyword"><SPAN CLASS="keyword">public</SPAN></SPAN></SPAN> input_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    explicit tab_expanding_input_filter(<SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> tab_size = 8)
+        : tab_size_(tab_size), col_no_(0), spaces_(0)
+    { 
+        assert(tab_size > 0); 
+    }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> get(Source& src);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword">void</SPAN> close(Source&);
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> get_char(<SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c);
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>   tab_size_;
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>   col_no_;
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>   spaces_;
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>Let's look first at the helper function <CODE>get_char</CODE>:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> get_char(<SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c)
+    {
+        <SPAN CLASS="keyword">if</SPAN> (c == <SPAN CLASS="literal">'\n'</SPAN>) {
+            col_no_ = 0;
+        } <SPAN CLASS="keyword">else</SPAN> {
+            ++col_no_;
+        }
+        <SPAN CLASS="keyword">return</SPAN> c;
+    }</PRE>
+
+<P>This function updates the column count based on the given character <CODE>c</CODE> and returns <CODE>c</CODE>. Using <CODE>get_char</CODE> you can implement <CODE>get</CODE> as follows:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> get(Source& src)
+    {
+        <SPAN CLASS="keyword">if</SPAN> (spaces_ > 0) {
+            --spaces_;
+            <SPAN CLASS="keyword">return</SPAN> get_char(' ');
+        }
+
+        <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c;
+        <SPAN CLASS="keyword">if</SPAN> ((c = iostreams::get(src)) == <SPAN CLASS="numeric_literal">EOF</SPAN> || c == WOULD_BLOCK)
+            <SPAN CLASS="keyword">return</SPAN> c;
+
+        <SPAN CLASS="keyword">if</SPAN> (c != '\t')
+            <SPAN CLASS="keyword">return</SPAN> get_char(c);
+
+        <SPAN CLASS='comment'>// Found a tab. Call this filter recursively.</SPAN>
+        spaces_ = tab_size_ - (col_no_ % tab_size_);
+        <SPAN CLASS="keyword">return</SPAN> this->get(src);
+    }</PRE>
+
+<P>
+    The implementation is similar to that of <A HREF="line_wrapping_filters.html#line_wrapping_input_filter"><CODE>line_wrapping_input_filter::get</CODE></A>. Since <CODE>get</CODE> can only return a single character at a time, whenever a tab character must be replaced by a sequence of space character, only the first space character can be returned. The rest must be returned by subsequent invocations of <CODE>get</CODE>. The member variable <CODE>spaces_</CODE> is used to store the numbe [...]
+</P>
+<P>
+    The implementation begins by checking whether any space characters remain to be returned. If so, it decrements <CODE>spaces_</CODE> and returns a space. Otherwise, a character is read from <CODE>src</CODE>. Ordinary characters, as well as the special values <CODE>EOF</CODE> and <CODE>WOULD_BLOCK</CODE>, are returned <I>as-is</I>. When a tab character is encountered, the number of spaces which must be returned by future invocations of get is recorded, and a space character is returned.
+</P>
+
+<P>As usual, the function <CODE>close</CODE> resets the Filter's state:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">void</SPAN> close(Source&)
+    {
+        col_no_ = 0;
+        spaces_ = 0;
+    }</PRE>
+
+<A NAME="tab_expanding_output_filter"></A>
+<H4><CODE>tab_expanding_output_filter</CODE></H4>
+
+<P>You can express a tab-expanding Filter as an <A HREF="../concepts/output_filter.html">OutputFilter</A> as follows:</P>
+
+<PRE class="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS="literal"><boost/iostreams/concepts.hpp></SPAN></A>    <SPAN CLASS="comment">// output_filter</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS="literal"><boost/iostreams/operations.hpp></SPAN></A>  <SPAN CLASS="comment">// put</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> tab_expanding_output_filter : <SPAN CLASS="keyword"><SPAN CLASS="keyword"><SPAN CLASS="keyword">public</SPAN></SPAN></SPAN> output_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    explicit tab_expanding_output_filter(<SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> tab_size = 8)
+        : tab_size_(tab_size), col_no_(0), spaces_(0)
+    { 
+        assert(tab_size > 0); 
+    }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> put(Sink& dest, <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword">void</SPAN> close(Sink&);
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> put_char(Sink& dest, <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c);
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>  tab_size_;
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>  col_no_;
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN>  spaces_;
+};
+
+} } } <SPAN CLASS="comment">// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>The implemenation helper function <CODE>put_char</CODE> is the same as that of <A HREF="line_wrapping_filters.html#line_wrapping_output_filter"><CODE>line_wrapping_output_filter::put_char</CODE></A>: it writes the given character to <CODE>std::cout</CODE> and increments the column number, unless the character is a newline, in which case the column number is reset.</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> put_char(Sink& dest, <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c)
+    {
+        <SPAN CLASS="keyword">if</SPAN> (!iostreams::put(dest, c))
+            <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS="keyword">false</SPAN>;
+        <SPAN CLASS="keyword">if</SPAN> (c != <SPAN CLASS="literal">'\n'</SPAN>)
+            ++col_no_;
+        <SPAN CLASS="keyword">else</SPAN>
+            col_no_ = 0;
+        <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS="keyword">true</SPAN>;
+    }</PRE>
+
+<P>Using <CODE>put_char</CODE> you can implement <CODE>put</CODE> as follows:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword"><SPAN CLASS="keyword">bool</SPAN></SPAN> put(Sink& dest, <SPAN CLASS="keyword"><SPAN CLASS="keyword">int</SPAN></SPAN> c)
+    {
+        for (; spaces_ > 0; --spaces_)
+            <SPAN CLASS="keyword">if</SPAN> (!put_char(dest, ' '))
+                <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS="keyword">false</SPAN>;
+
+        <SPAN CLASS="keyword">if</SPAN> (c == '\t') {
+            spaces_ = tab_size_ - (col_no_ % tab_size_) - 1;
+            <SPAN CLASS="keyword">return</SPAN> this->put(dest, ' ');
+        } 
+
+        <SPAN CLASS="keyword">return</SPAN> put_char(dest, c);
+    }</PRE>
+
+<P>
+    The implementation begins by attempting to write any space characters left over from previously encountered tabs. If successful, it examine the given character <CODE>c</CODE>. If <CODE>c</CODE> is not a tab character, it attempts to write it to <CODE>dest</CODE>. Otherwise, it calculates the number of spaces which must be inserted and calls itself recursively. Using recursion here saves us from having to decrement the member variable <CODE>spaces_</CODE> at two different points in the code.
+</P>
+<P>
+    Note that after a tab character is encountered, get will return false until all the associated space characters have been written.
+</P>
+
+<P>As usual, the function <CODE>close</CODE> resets the Filter's state:</P>
+
+<PRE class="broken_ie">    <SPAN CLASS="keyword">void</SPAN> close(Source&)
+    {
+        col_no_ = 0;
+        spaces_ = 0;
+    }</PRE>
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='line_wrapping_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='dictionary_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file <A HREF="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/tutorial/tutorial.html b/vendor/pdalboost/libs/iostreams/doc/tutorial/tutorial.html
new file mode 100644
index 0000000..8db7d8a
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tutorial/tutorial.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Tutorial</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Tutorial</H1>
+    <HR STYLE='margin-bottom:0'>
+
+<!-- End Banner -->
+
+<H2>2. Tutorial</H2>
+
+<H4>2.1. Writing Devices</H4>
+
+<P>
+    2.1.1. <A HREF="writing_devices.html">Overview: Devices, <CODE>stream_buffer</CODE> and <CODE>stream</CODE></A><BR>
+    2.1.2. <A HREF="container_source.html">Writing a <CODE>container_source</CODE></A><BR>
+    2.1.3. <A HREF="container_sink.html">Writing a <CODE>container_sink</CODE></A><BR>
+    2.1.4. <A HREF="container_device.html">Writing a <CODE>container_device</CODE></A><BR>
+</P>
+
+<H4>2.2. Writing Filters</H4>
+
+<P>
+    2.2.1. <A HREF="writing_filters.html">Overview: InputFilters, OutputFilters and Filter Helpers</A><BR>
+    2.2.2. <A HREF="filter_usage.html">Filter Usage Examples</A><BR>
+    2.2.3. <A HREF="shell_comments_filters.html">Shell Comments Filters</A><BR>
+    2.2.4. <A HREF="line_wrapping_filters.html">Line-Wrapping Filters</A><BR>
+    2.2.5. <A HREF="tab_expanding_filters.html">Tab-Expanding Filters</A><BR>
+    2.2.6. <A HREF="dictionary_filters.html">Dictionary Filters</A><BR>
+    2.2.7. <A HREF="unix2dos_filters.html"><CODE>UNIX</CODE>-to-<CODE>DOS</CODE> Filters</A><BR>
+    2.2.8. <A HREF="multichar_filters.html">Multi-Character Filters</A><BR>
+    2.2.9. <A HREF="dual_use_filters.html">Dual-Use Filters</A><BR>
+    2.2.10. <A HREF="finite_state_filters.html">Finite State Filters</A>
+</P>
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file <A HREF="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/tutorial/unix2dos_filters.html b/vendor/pdalboost/libs/iostreams/doc/tutorial/unix2dos_filters.html
new file mode 100644
index 0000000..b2cad63
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tutorial/unix2dos_filters.html
@@ -0,0 +1,230 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Tutorial</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Tutorial</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='dictionary_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='multichar_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<A NAME="unix2dos"></A>
+<H2>2.2.7. UNIX-to-DOS Filters</H2>
+
+<P>Suppose you want to write a Filter to convert <CODE>UNIX</CODE> line endings to <CODE>DOS</CODE> line-endings. The basic idea is simple: you process the characters in a sequence one at a time, and whenever you encounter the character 
+<CODE>'\n'</CODE> you replace it with the two-character sequence <CODE>'\r'</CODE>, <CODE>'\n'</CODE>. In the following sections I'll implement this algorithm as a <CODE>stdio_filter</CODE>, an InputFilter and an OutputFilter. The source code can be found in the header <A HREF="../../example/unix2dos_filter.hpp"><<CODE>libs/iostreams/example/unix2dos_filter.hpp</CODE>></A></P>
+
+<A NAME="unix2dos_stdio_filter"></A>
+<H4><CODE>unix2dos_stdio_filter</CODE></H4>
+
+<P>You can express a <CODE>UNIX</CODE>-to-<CODE>DOS</CODE> Filter as a <CODE>stdio_filter</CODE> by deriving from <CODE>stdio_filter</CODE> and overriding the <CODE>private</CODE> <CODE>virtual</CODE> function do_filter as follows:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><cstdio></SPAN>    <SPAN CLASS='comment'>// EOF</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><iostream></SPAN>  <SPAN CLASS='comment'>// cin, cout</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/filter/stdio.hpp"><SPAN CLASS='literal'><boost/iostreams/filter/stdio.hpp></SPAN></A>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> unix2dos_stdio_filter : <SPAN CLASS="keyword">public</SPAN> stdio_filter {
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">void</SPAN> do_filter()
+    {
+        <SPAN CLASS="keyword">int</SPAN> c;
+        <SPAN CLASS="keyword">while</SPAN> ((c = std::cin.get()) != <SPAN CLASS='numeric_literal'>EOF</SPAN>) {
+            <SPAN CLASS="keyword">if</SPAN> (c == <SPAN CLASS='literal'>'\n'</SPAN>)
+                std::cout.put(<SPAN CLASS='literal'>'\r'</SPAN>);
+            std::cout.put(c);
+        }
+    }
+};
+
+} } } <SPAN CLASS='comment'>// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>The function <CODE>do_filter</CODE> consists of a straightforward implementation of the algorithm I described above: it reads characters from standard input and writes them to standard output unchanged, except that when it encounters <CODE>'\n'</CODE> it writes <CODE>'\r'</CODE>, <CODE>'\n'</CODE>.
+
+<A NAME="unix2dos_input_filter"></A>
+<H4><CODE>unix2dos_input_filter</CODE></H4>
+
+<P>Now, let's express a <CODE>UNIX</CODE>-to-<CODE>DOS</CODE> Filter as an <A HREF="../concepts/input_filter.html">InputFilter</A>.
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/categories.hpp"><SPAN CLASS='literal'><boost/iostreams/categories.hpp></SPAN></A> <SPAN CLASS='comment'>// input_filter_tag</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS='literal'><boost/iostreams/operations.hpp></SPAN></A> <SPAN CLASS='comment'>// get</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> unix2dos_input_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    <SPAN CLASS='keyword'>typedef</SPAN> <SPAN CLASS='keyword'>char</SPAN>              char_type;
+    <SPAN CLASS='keyword'>typedef</SPAN> input_filter_tag  category;
+
+    unix2dos_input_filter() : has_linefeed_(<SPAN CLASS='keyword'>false</SPAN>) { }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword">int</SPAN> get(Source& src)
+    {
+        <SPAN CLASS='comment'>// Handle unfinished business</SPAN>
+        <SPAN CLASS="keyword">if</SPAN> (has_linefeed_) {
+            has_linefeed_ = <SPAN CLASS="keyword">false</SPAN>;
+            <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS="literal">'\n'</SPAN>;
+        }
+
+        <SPAN CLASS='comment'>// Forward all characters except '\n'</SPAN>
+        <SPAN CLASS="keyword">int</SPAN> c;
+        if ((c = iostreams::get(src)) == <SPAN CLASS='literal'>'\n'</SPAN>) {
+            has_linefeed_ = true;
+            <SPAN CLASS="keyword">return</SPAN> <SPAN CLASS='literal'>'\r'</SPAN>;
+        }
+
+        <SPAN CLASS="keyword">return</SPAN> c;
+    }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword">void</SPAN> close(Source&);
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">bool</SPAN> has_linefeed_;
+};
+
+} } } <SPAN CLASS='comment'>// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>The implementation of <CODE>get</CODE> can be described as follows. Most of the time, you simply read a character from <CODE>src</CODE> and return it. The special values <CODE>EOF</CODE> and <CODE>WOULD_BLOCK</CODE> are treated the same way: they are simply forwarded <I>as-is</I>. The exception is when <CODE>iostreams::get</CODE> returns <CODE>'\n'</CODE>. In this case, you return <CODE>'\r'</CODE> instead and make a note to return <CODE>'\n'</CODE> the next time <CODE>get</CODE> is c [...]
+
+<P>As usual, the member function <CODE>close</CODE> reset's the Filter's state:</P>
+
+<PRE CLASS="broken_ie">    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Source>
+    <SPAN CLASS="keyword">void</SPAN> close(Source&) { skip_ = <SPAN CLASS="keyword">false</SPAN>; }</PRE>
+
+<A NAME="unix2dos_output_filter"></A>
+<H4><CODE>unix2dos_output_filter</CODE></H4>
+
+<P>You can express a <CODE>UNIX</CODE>-to-<CODE>DOS</CODE> Filter as an <A HREF="../concepts/output_filter.html">OutputFilter</A> as follows:</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS='literal'><boost/iostreams/concepts.hpp></SPAN></A>   <SPAN CLASS='comment'>// output_filter</SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/operations.hpp"><SPAN CLASS='literal'><boost/iostreams/operations.hpp></SPAN></A> <SPAN CLASS='comment'>// put</SPAN>
+
+<SPAN CLASS='keyword'>namespace</SPAN> boost { <SPAN CLASS='keyword'>namespace</SPAN> iostreams { <SPAN CLASS='keyword'>namespace</SPAN> example {
+
+<SPAN CLASS="keyword">class</SPAN> unix2dos_output_filter : <SPAN CLASS="keyword">public</SPAN> output_filter {
+<SPAN CLASS="keyword">public</SPAN>:
+    unix2dos_output_filter() : has_linefeed_(<SPAN CLASS="keyword">false</SPAN>) { }
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword">bool</SPAN> put(Sink& dest, <SPAN CLASS="keyword">int</SPAN> c);
+
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword">void</SPAN> close(Sink&) { has_linefeed_ = <SPAN CLASS="keyword">false</SPAN>; }
+<SPAN CLASS="keyword">private</SPAN>:
+    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword">bool</SPAN> put_char(Sink& dest, <SPAN CLASS="keyword">int</SPAN> c);
+
+    <SPAN CLASS="keyword">bool</SPAN> has_linefeed_;
+};
+
+} } } <SPAN CLASS='comment'>// End namespace boost::iostreams:example</SPAN></PRE>
+
+<P>
+    Here I've derived from the helper class <A HREF="../classes/filter.html#synopsis"><CODE>output_filter</CODE></A>, which provides a member type <CODE>char_type</CODE> equal to <CODE>char</CODE> and a category tag convertible to <A HREF="../guide/traits.html#category_tags"><CODE>output_filter_tag</CODE></A> and to <A HREF="../guide/traits.html#category_tags"><CODE>closable_tag</CODE></A>.
+</P>
+
+<P>Let's look first at the helper function <CODE>put_char</CODE>:</P>
+
+<PRE CLASS='broken_ie'>    <SPAN CLASS="keyword">template</SPAN><<SPAN CLASS="keyword">typename</SPAN> Sink>
+    <SPAN CLASS="keyword">bool</SPAN> put_char(Sink& dest, <SPAN CLASS="keyword">int</SPAN> c)
+    {
+        <SPAN CLASS="keyword">bool</SPAN> result;
+        <SPAN CLASS="keyword">if</SPAN> ((result = iostreams::put(dest, c)) == <SPAN CLASS="keyword">true</SPAN>) {
+            has_linefeed_ =
+                c == <SPAN CLASS="literal">'\r'</SPAN> ?
+                    <SPAN CLASS="keyword">true</SPAN> : 
+                    c == <SPAN CLASS="literal">'\n'</SPAN> ? 
+                        <SPAN CLASS="keyword">false</SPAN> :
+                        has_linefeed_;
+        }
+        <SPAN CLASS="keyword">return</SPAN> result;
+    }</PRE>
+
+<P>
+    This function attempts to write a single character to the Sink dest, returning <CODE>true</CODE> for success. If successful, it updates the flag <CODE>has_linefeed_</CODE>, which indicates that an attempt to write a <CODE>DOS</CODE> line ending sequence failed after the first character was written.  
+</P>
+
+<P>Using <CODE>put_char</CODE> you can implement <CODE>put</CODE> as follows:</P>
+
+<PRE CLASS='broken_ie'>    <SPAN CLASS="keyword">bool</SPAN> put(Sink& dest, <SPAN CLASS="keyword">int</SPAN> c)
+    {
+        <SPAN CLASS="keyword">if</SPAN> (c == <SPAN CLASS="literal">'\n'</SPAN>) 
+            <SPAN CLASS="keyword">return</SPAN> has_linefeed_ ?
+                put_char(dest, <SPAN CLASS="literal">'\n'</SPAN>) :
+                put_char(dest, <SPAN CLASS="literal">'\r'</SPAN>) ?
+                    this->put(dest, <SPAN CLASS="literal">'\n'</SPAN>) :
+                    <SPAN CLASS="keyword">false</SPAN>;
+        <SPAN CLASS="keyword">return</SPAN> iostreams::put(dest, c);
+    }</PRE>
+
+<P>The implementation works like so:</P>
+
+<OL>
+<LI>
+    If you're at the beginning of a <CODE>DOS</CODE> line-ending sequence — that is, if <CODE>c</CODE> is <CODE>'n'</CODE> and <CODE>has_line_feed_</CODE> is <CODE>false</CODE> — you attempt to write <CODE>'\r'</CODE> and then <CODE>'\n'</CODE> to <CODE>dest</CODE>.
+</LI>
+<LI>
+    If you're in the middle of a <CODE>DOS</CODE> line-ending sequence — that is, if <CODE>c</CODE> is <CODE>'n'</CODE> and <CODE>has_line_feed_</CODE> is <CODE>true</CODE> — you attempt to complete it by writing <CODE>'\n'</CODE>.
+</LI>
+<LI>
+    Otherwise, you attempt to write <CODE>c</CODE> to <CODE>dest</CODE>.
+</LI>
+</OL>
+
+<P>
+    There are two subtle points. First, why does <CODE>c == 'n'</CODE> and <CODE>has_line_feed_ == true</CODE> mean that you're in the middle of a <CODE>DOS</CODE> line-ending sequence? Because when you attempt to write <CODE>'\r'</CODE>, <CODE>'\n'</CODE> but only the first character succeeds, you set <CODE>has_line_feed_</CODE> and return <CODE>false</CODE>. This causes the user of the Filter to <I>resend</I> the character <CODE>'\n'</CODE> which triggered the line-ending sequence. Sec [...]
+</P>
+
+<P>
+    Comparing the implementations of <CODE>unix2dos_input_filter</CODE> and <CODE>unix2dos_output_filter</CODE>, you can see that this a case where a filtering algorithm is much easier to express as an Input than as an OutputFilter. If you wanted to avoid the complexity of the above definition, you could use the class template <A HREF="../functions/invert.html#invert"><CODE>inverse</CODE></A> to construct an OutputFilter from <CODE>unix2dos_input_filter</CODE>:
+</P>
+
+<PRE CLASS="broken_ie"><SPAN CLASS='literal'>#include</SPAN></SPAN> <A CLASS="header" HREF="../../../../boost/iostreams/concepts.hpp"><SPAN CLASS='literal'><boost/iostreams/invert.hpp></SPAN></A>   <SPAN CLASS='comment'>// inverse</SPAN>   
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+<SPAN CLASS='keyword'>namespace</SPAN> ex = boost::iostreams::example;
+
+<SPAN CLASS="keyword">typedef</SPAN> io::inverse<ex::unix2dos_input_filter> unix2dos_output_filter;</PRE>
+
+<P>Even this is more work than necessary, however, since line-ending conversions can be handled easily with the built-in component <A HREF="../classes/newline_filter.html#newline_filter"><CODE>newline_filter</CODE></A>.</P>
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='dictionary_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='multichar_filters.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file <A HREF="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/tutorial/writing_devices.html b/vendor/pdalboost/libs/iostreams/doc/tutorial/writing_devices.html
new file mode 100644
index 0000000..278ea16
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tutorial/writing_devices.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Tutorial</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Tutorial</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A><IMG WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev_disabled.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='container_source.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<A NAME="device_overview"></A>
+<H2 CLEAR='right'>2.1.1. Overview: Devices, <CODE>stream_buffer</CODE> and <CODE>stream</CODE></H2>
+
+<P>Writing a new stream or stream buffer class using the Boost Iostreams library is easy: you simply write a class modeling the <A HREF="../concepts/device.html">Device</A> concept, then use that class as the template argument to <A HREF="../guide/generic_streams.html#stream"><CODE>stream</CODE></A> or <A HREF="../guide/generic_streams.html#stream_buffer"><CODE>stream_buffer</CODE></A>:
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/stream.hpp"><SPAN CLASS='literal'><boost/iostreams/stream.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A HREF="../../../../boost/iostreams/stream_buffer.hpp"><SPAN CLASS='literal'><boost/iostreams/stream_buffer.hpp></SPAN></A>
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS='keyword'>class</SPAN> my_device { <SPAN CLASS='comment'>/* */</SPAN> };
+
+<SPAN CLASS='keyword'>typedef</SPAN> io::stream<my_device>         my_stream;
+<SPAN CLASS='keyword'>typedef</SPAN> io::stream_buffer<my_device>  my_streambuf;</PRE>
+
+<P>Here <CODE>io::stream_buffer<my_device></CODE> is a derived class of <CODE>std::basic_streambuf</CODE>, and <CODE>io::stream<my_device></CODE> is a derived class of <CODE>std::basic_istream</CODE>, <CODE>std::basic_ostream</CODE> or <CODE>std::basic_iostream</CODE> depending on the <A HREF="../guide/modes.html">mode</A> of my_device, <I>i.e.</I>, depending on which of the fundamental i/o operations <A HREF="../functions/read.html"><CODE>read</CODE></A>, <A HREF="../functio [...]
+
+<P>The template <CODE>io::stream</CODE> is provided as a convenience. It's always possible to avoid <CODE>io::stream</CODE> and simply use <CODE>io::stream_buffer</CODE> together with one of the standard library stream templates. <I>E.g.</I>, 
+
+<PRE CLASS="broken_ie"><SPAN CLASS='preprocessor'>#include</SPAN> <SPAN CLASS='literal'><ostream></SPAN>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/device/file.hpp"><SPAN CLASS='literal'><boost/iostreams/device/file.hpp></SPAN></A>
+<SPAN CLASS='preprocessor'>#include</SPAN> <A CLASS="HEADER" HREF="../../../../boost/iostreams/stream.hpp"><SPAN CLASS='literal'><boost/iostreams/stream.hpp></SPAN></A>
+
+<SPAN CLASS='keyword'>namespace</SPAN> io = boost::iostreams;
+
+<SPAN CLASS='keyword'>int</SPAN> main()
+{
+    io::stream_buffer<io::file_sink> buf(<SPAN CLASS='literal'>"log.txt"</SPAN>);
+    std::ostream                     out(&buf);
+    <SPAN CLASS='comment'>// out writes to log.txt</SPAN>
+}</PRE>
+
+<P>In this example, the <CODE>ostream</CODE> <CODE>out</CODE> uses the <CODE>stream_buffer</CODE> <CODE>buf</CODE> as its underlying data sink, so that data written to <CODE>out</CODE> goes to the file <I>log.txt</I>. The same effect could be achieved by default constructing <CODE>out</CODE> and telling it to use stream buffer <CODE>buf</CODE> by invoking <CODE>out.rdbuf(&buf)</CODE>.
+
+<P>Another way to define a new stream or stream buffer class using the Boost Iostreams library is to derive from <A HREF="../classes/filtering_stream.html"><CODE>filtering_stream</CODE></A> or <A HREF="../classes/filtering_streambuf.html"><CODE>filtering_streambuf</CODE></A>. 
+<P>The next three items will demonstrate how to write Devices for accessing STL-compatible containers. The source code for the examples can be found in the header <A HREF="../../example/container_device.hpp"><<CODE>libs/iostreams/example/container_device.hpp</CODE>></A></P>
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <IMG WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev_disabled.png'>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='container_source.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file <A HREF="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/doc/tutorial/writing_filters.html b/vendor/pdalboost/libs/iostreams/doc/tutorial/writing_filters.html
new file mode 100644
index 0000000..2e80779
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/doc/tutorial/writing_filters.html
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+    <TITLE>Tutorial</TITLE>
+    <LINK REL="stylesheet" HREF="../../../../boost.css">
+    <LINK REL="stylesheet" HREF="../theme/iostreams.css">
+</HEAD>
+<BODY>
+
+<!-- Begin Banner -->
+
+    <H1 CLASS="title">Tutorial</H1>
+    <HR CLASS="banner">
+
+<!-- End Banner -->
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='container_device.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='filter_usage.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<A NAME="filter_overview"></A>
+<H2>2.2.1. Overview: InputFilters, OutputFilters and Filter Helpers</H2>
+
+<P>Filters are used to modify character sequences. For example, you might use a filter to replace all instances of one word with another, to convert all alphabetic characters to lower case or to encrypt a document. Sometimes the filter is a mere observer; in this case the filtered character sequence if the same as the unfiltered sequence. For example, you might use a filter to count the number of occurrences of a given word.</P>
+
+
+<A NAME="input_filters_and_output_filters"></A>
+<H4>InputFilters and OutputFilters</H4>
+
+<P>The Iostreams library supports two basic categories of Filters, <A HREF="../concepts/input_filter.html">InputFilters</A> and <A HREF="../concepts/output_filter.html">OutputFilters</A>. InputFilters represent a “pull” model of filtering: a source of unfiltered data is provided — represented as a <A HREF="../concepts/source.html">Source</A> — and the Filter is expected to generate a certain number of characters of the filtered sequence. The filtered sequence is g [...]
+
+<P>The simplest InputFilters and OutputFilters process characters one at a time. This type of Filter is easy to write, but is less efficient than Filters that process several characters at a time. Filters which process several characters at a time are called <A HREF="../concepts/multi_character.html">Multi-Character</A> filters.</P>
+
+<A NAME="filter_helpers"></A>
+<H4>Filter Helpers</H4>
+
+<P>The Iostreams library provides several utilities to make Filter writing easier:</P>
+<UL>
+    <LI>
+        <A HREF="../classes/aggregate.html"><CODE>aggregate_filter</CODE></A> allows a programmer to define a Filter by reading unfiltered data from one <CODE>std::vector</CODE> and writing filtered data to another <CODE>std::vector</CODE>.
+    </LI>
+    <LI>
+        <A HREF="../classes/stdio_filter.html"><CODE>stdio_filter</CODE></A> allows a programmer to define a Filter by reading unfiltered data from standard input and writing filtered data to standard output.
+    </LI>
+    <LI>
+        <A HREF="../classes/symmetric_filter.html"><CODE>symmetric_filter</CODE></A> allows a programmer to define a Filter by reading unfiltered data from one array and writing filtered data to another array.
+    </LI>
+    <LI>
+        <A HREF="finite_state_filters.html"><CODE>finite_state_filter</CODE></A> allows a programmer to define a Filter as a finite state machine. This component is included with the example filters; it is not currently an official part of the library.
+    </LI>
+</UL>
+
+<A NAME="selecting_a_filter"></A>
+<H4>Selecting a Filter Concept</H4>
+
+<P>
+    Suppose you need to write a Filter to perform a given filtering task. How do you decide whether to write an <A HREF="../concepts/input_filter.html">InputFilter</A> or <A HREF="../concepts/output_filter.html">OutputFilter</A>, or to use one of the Filter helpers? The first two Filter helpers mentioned above, <A HREF="../classes/aggregate.html"><CODE>aggregate_filter</CODE></A> and <A HREF="../classes/stdio_filter.html"><CODE>stdio_filter</CODE></A>, have high-memory usage and only wor [...]
+</P>
+
+<P>
+In all but the last of the filtering examples below, I will first show how to implement an algorithm using <CODE>stdio_filter</CODE> before implementing it from scratch as an InputFilter or OutputFilter.
+</P>
+
+<!-- Begin Nav -->
+
+<DIV CLASS='nav'>
+    <A HREF='container_device.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/prev.png'></A>
+    <A HREF='tutorial.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/up.png'></A>
+    <A HREF='filter_usage.html'><IMG BORDER=0 WIDTH=19 HEIGHT=19 SRC='../../../../doc/src/images/next.png'></A>
+</DIV>
+
+<!-- End Nav -->
+
+<!-- Begin Footer -->
+
+<HR>
+
+
+<P CLASS="copyright">© Copyright 2008 <a href="http://www.coderage.com/" target="_top">CodeRage, LLC</a><br/>© Copyright 2004-2007 <a href="http://www.coderage.com/turkanis/" target="_top">Jonathan Turkanis</a></P>
+<P CLASS="copyright"> 
+    Use, modification, and distribution are subject to the Boost Software License, Version 2.0. (See accompanying file <A HREF="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy at <A HREF="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)
+</P>
+<!-- End Footer -->
+
+</BODY>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/example/boost_back_inserter_example.cpp b/vendor/pdalboost/libs/iostreams/example/boost_back_inserter_example.cpp
new file mode 100644
index 0000000..b8be9ff
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/example/boost_back_inserter_example.cpp
@@ -0,0 +1,24 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <cassert>
+#include <string>
+#include <boost/iostreams/device/back_inserter.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+
+namespace io = pdalboost::iostreams;
+
+int main()
+{
+    using namespace std;
+
+    string                 result;
+    io::filtering_ostream  out(io::back_inserter(result));
+    out << "Hello World!";
+    out.flush();
+    assert(result == "Hello World!");
+}
diff --git a/vendor/pdalboost/libs/iostreams/example/container_device.hpp b/vendor/pdalboost/libs/iostreams/example/container_device.hpp
new file mode 100644
index 0000000..16004cd
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/example/container_device.hpp
@@ -0,0 +1,155 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_EXAMPLE_CONTAINTER_DEVICE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_EXAMPLE_CONTAINTER_DEVICE_HPP_INCLUDED
+
+#include <algorithm>         // copy, min.
+#include <cassert>
+#include <boost/config.hpp>  // BOOST_NO_STDC_NAMESPACE.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/detail/ios.hpp>  // failure.
+
+namespace pdalboost { namespace iostreams { namespace example {
+
+//
+// Model of Source which reads from an STL-compatible sequence
+// whose iterators are random-access iterators.
+//
+template<typename Container>
+class container_source {
+public:
+    typedef typename Container::value_type  char_type;
+    typedef source_tag                      category;
+    container_source(Container& container)
+        : container_(container), pos_(0)
+        { }
+    std::streamsize read(char_type* s, std::streamsize n)
+    {
+        using namespace std;
+        std::streamsize amt = 
+            static_cast<std::streamsize>(container_.size() - pos_);
+        std::streamsize result = (min)(n, amt);
+        if (result != 0) {
+            std::copy( container_.begin() + pos_,
+                       container_.begin() + pos_ + result,
+                       s );
+            pos_ += result;
+            return result;
+        } else {
+            return -1; // EOF
+        }
+    }
+    Container& container() { return container_; }
+private:
+    container_source operator=(const container_source&);
+    typedef typename Container::size_type   size_type;
+    Container&  container_;
+    size_type   pos_;
+};
+
+//
+// Model of Sink which appends to an STL-compatible sequence.
+//
+template<typename Container>
+class container_sink {
+public:
+    typedef typename Container::value_type  char_type;
+    typedef sink_tag                        category;
+    container_sink(Container& container) : container_(container) { }
+    std::streamsize write(const char_type* s, std::streamsize n)
+    {
+        container_.insert(container_.end(), s, s + n);
+        return n;
+    }
+    Container& container() { return container_; }
+private:
+    container_sink operator=(const container_sink&);
+    Container& container_;
+};
+
+//
+// Model of SeekableDevice which accessS an TL-compatible sequence
+// whose iterators are random-access iterators.
+//
+template<typename Container>
+class container_device {
+public:
+    typedef typename Container::value_type  char_type;
+    typedef seekable_device_tag             category;
+    container_device(Container& container)
+        : container_(container), pos_(0)
+        { }
+
+    std::streamsize read(char_type* s, std::streamsize n)
+    {
+        using namespace std;
+        std::streamsize amt = 
+            static_cast<std::streamsize>(container_.size() - pos_);
+        std::streamsize result = (min)(n, amt);
+        if (result != 0) {
+            std::copy( container_.begin() + pos_,
+                       container_.begin() + pos_ + result,
+                       s );
+            pos_ += result;
+            return result;
+        } else {
+            return -1; // EOF
+        }
+    }
+    std::streamsize write(const char_type* s, std::streamsize n)
+    {
+        using namespace std;
+        std::streamsize result = 0;
+        if (pos_ != container_.size()) {
+            std::streamsize amt =
+                static_cast<std::streamsize>(container_.size() - pos_);
+            result = (min)(n, amt);
+            std::copy(s, s + result, container_.begin() + pos_);
+            pos_ += result;
+        }
+        if (result < n) {
+            container_.insert(container_.end(), s, s + n);
+            pos_ = container_.size();
+        }
+        return n;
+    }
+    stream_offset seek(stream_offset off, BOOST_IOS::seekdir way)
+    {
+        using namespace std;
+
+        // Determine new value of pos_
+        stream_offset next;
+        if (way == BOOST_IOS::beg) {
+            next = off;
+        } else if (way == BOOST_IOS::cur) {
+            next = pos_ + off;
+        } else if (way == BOOST_IOS::end) {
+            next = container_.size() + off - 1;
+        } else {
+            throw BOOST_IOSTREAMS_FAILURE("bad seek direction");
+        }
+
+        // Check for errors
+        if (next < 0 || next >= container_.size())
+            throw BOOST_IOSTREAMS_FAILURE("bad seek offset");
+
+        pos_ = next;
+        return pos_;
+    }
+
+    Container& container() { return container_; }
+private:
+    container_device operator=(const container_device&);
+    typedef typename Container::size_type   size_type;
+    Container&  container_;
+    size_type   pos_;
+};
+
+} } } // End namespaces example, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_EXAMPLE_CONTAINTER_DEVICE_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/example/container_device_example.cpp b/vendor/pdalboost/libs/iostreams/example/container_device_example.cpp
new file mode 100644
index 0000000..8c5f91c
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/example/container_device_example.cpp
@@ -0,0 +1,30 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <cassert>
+#include <string>
+#include <boost/iostreams/stream.hpp>
+#include <boost/iostreams/detail/ios.hpp> // ios_base::beg.
+#include <libs/iostreams/example/container_device.hpp>
+
+namespace io = pdalboost::iostreams;
+namespace ex = pdalboost::iostreams::example;
+
+int main()
+{
+    using namespace std;
+    typedef ex::container_device<string> string_device;
+
+    string                     one, two;
+    io::stream<string_device>  io(one);
+    io << "Hello World!";
+    io.flush();
+    io.seekg(0, BOOST_IOS::beg);
+    getline(io, two);
+    assert(one == "Hello World!");
+    assert(two == "Hello World!");
+}
diff --git a/vendor/pdalboost/libs/iostreams/example/container_sink_example.cpp b/vendor/pdalboost/libs/iostreams/example/container_sink_example.cpp
new file mode 100644
index 0000000..b668909
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/example/container_sink_example.cpp
@@ -0,0 +1,26 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <cassert>
+#include <string>
+#include <boost/iostreams/stream.hpp>
+#include <libs/iostreams/example/container_device.hpp>
+
+namespace io = pdalboost::iostreams;
+namespace ex = pdalboost::iostreams::example;
+
+int main()
+{
+    using namespace std;
+    typedef ex::container_sink<string> string_sink;
+
+    string                   result;
+    io::stream<string_sink>  out(result);
+    out << "Hello World!";
+    out.flush();
+    assert(result == "Hello World!");
+}
diff --git a/vendor/pdalboost/libs/iostreams/example/container_source_example.cpp b/vendor/pdalboost/libs/iostreams/example/container_source_example.cpp
new file mode 100644
index 0000000..b6b8b2d
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/example/container_source_example.cpp
@@ -0,0 +1,26 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <cassert>
+#include <string>
+#include <boost/iostreams/stream.hpp>
+#include <libs/iostreams/example/container_device.hpp>
+
+namespace io = pdalboost::iostreams;
+namespace ex = pdalboost::iostreams::example;
+
+int main()
+{
+    using namespace std;
+    typedef ex::container_source<string> string_source;
+
+    string                     input = "Hello World!";
+    string                     output;
+    io::stream<string_source>  in(input);
+    getline(in, output);
+    assert(input == output);
+}
diff --git a/vendor/pdalboost/libs/iostreams/example/dictionary_filter.hpp b/vendor/pdalboost/libs/iostreams/example/dictionary_filter.hpp
new file mode 100644
index 0000000..43e1efa
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/example/dictionary_filter.hpp
@@ -0,0 +1,221 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_DICTIONARY_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_DICTIONARY_FILTER_HPP_INCLUDED
+
+#include <algorithm>         // swap.
+#include <cassert>
+#include <cstdio>            // EOF.
+#include <iostream>          // cin, cout.
+#include <cctype>
+#include <map>
+#include <boost/config.hpp>  // BOOST_NO_STDC_NAMESPACE.
+#include <boost/iostreams/concepts.hpp>
+#include <boost/iostreams/filter/stdio.hpp>
+#include <boost/iostreams/operations.hpp>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std {
+    using ::isalpha;
+    using ::isupper;
+    using ::toupper;
+    using ::tolower;
+}
+#endif
+
+namespace pdalboost { namespace iostreams { namespace example {
+
+class dictionary {
+public:
+    void add(std::string key, const std::string& value);
+    void replace(std::string& key);
+private:
+    typedef std::map<std::string, std::string> map_type;
+    void tolower(std::string& str);
+    map_type map_;
+};
+
+class dictionary_stdio_filter : public stdio_filter {
+public:
+    dictionary_stdio_filter(dictionary& d) : dictionary_(d) { }
+private:
+    void do_filter()
+    {
+        using namespace std;
+        while (true) {
+            int c = std::cin.get();
+            if (c == EOF || !std::isalpha((unsigned char) c)) {
+                dictionary_.replace(current_word_);
+                cout.write( current_word_.data(),
+                            static_cast<std::streamsize>(current_word_.size()) );
+                current_word_.erase();
+                if (c == EOF)
+                    break;
+                cout.put(c);
+            } else {
+                current_word_ += c;
+            }
+        }
+    }
+    dictionary&  dictionary_;
+    std::string  current_word_;
+};
+
+class dictionary_input_filter : public input_filter {
+public:
+    dictionary_input_filter(dictionary& d)
+        : dictionary_(d), off_(std::string::npos), eof_(false)
+        { }
+
+    template<typename Source>
+    int get(Source& src)
+        {
+            // Handle unfinished business.
+            if (off_ != std::string::npos && off_ < current_word_.size())
+                return current_word_[off_++];
+            if (off_ == current_word_.size()) {
+                current_word_.erase();
+                off_ = std::string::npos;
+            }
+            if (eof_)
+                return EOF;
+
+            // Compute curent word.
+            while (true) {
+                int c;
+                if ((c = iostreams::get(src)) == WOULD_BLOCK)
+                    return WOULD_BLOCK;
+
+                if (c == EOF || !std::isalpha((unsigned char) c)) {
+                    dictionary_.replace(current_word_);
+                    off_ = 0;
+                    if (c == EOF)
+                        eof_ = true;
+                    else
+                        current_word_ += c;
+                    break;
+                } else {
+                    current_word_ += c;
+                }
+            }
+
+            return this->get(src); // Note: current_word_ is not empty.
+        }
+
+    template<typename Source>
+    void close(Source&)
+    {
+        current_word_.erase();
+        off_ = std::string::npos;
+        eof_ = false;
+    }
+private:
+    dictionary&             dictionary_;
+    std::string             current_word_;
+    std::string::size_type  off_;
+    bool                    eof_;
+};
+
+class dictionary_output_filter : public output_filter {
+public:
+    typedef std::map<std::string, std::string> map_type;
+    dictionary_output_filter(dictionary& d)
+        : dictionary_(d), off_(std::string::npos)
+        { }
+
+    template<typename Sink>
+    bool put(Sink& dest, int c)
+    {
+        if (off_ != std::string::npos && !write_current_word(dest))
+            return false;
+        if (!std::isalpha((unsigned char) c)) {
+            dictionary_.replace(current_word_);
+            off_ = 0;
+        }
+
+        current_word_ += c;
+        return true;
+    }
+
+    template<typename Sink>
+    void close(Sink& dest)
+    {
+        // Reset current_word_ and off_, saving old values.
+        std::string             current_word;
+        std::string::size_type  off = 0;
+        current_word.swap(current_word_);
+        std::swap(off, off_);
+
+        // Write remaining characters to dest.
+        if (off == std::string::npos) {
+            dictionary_.replace(current_word);
+            off = 0;
+        }
+        if (!current_word.empty())
+            iostreams::write(
+                dest,
+                current_word.data() + off,
+                static_cast<std::streamsize>(current_word.size() - off)
+            );
+    }
+private:
+    template<typename Sink>
+    bool write_current_word(Sink& dest)
+    {
+        using namespace std;
+        std::streamsize amt = 
+            static_cast<std::streamsize>(current_word_.size() - off_);
+        std::streamsize result =
+            iostreams::write(dest, current_word_.data() + off_, amt);
+        if (result == amt) {
+            current_word_.erase();
+            off_ = string::npos;
+            return true;
+        } else {
+            off_ += result;
+            return false;
+        }
+    }
+
+    dictionary&             dictionary_;
+    std::string             current_word_;
+    std::string::size_type  off_;
+};
+
+//------------------Implementation of dictionary------------------------------//
+
+inline void dictionary::add(std::string key, const std::string& value)
+{
+    tolower(key);
+    map_[key] = value;
+}
+
+inline void dictionary::replace(std::string& key)
+{
+    using namespace std;
+    string copy(key);
+    tolower(copy);
+    map_type::iterator it = map_.find(key);
+    if (it == map_.end())
+        return;
+    string& value = it->second;
+    if (!value.empty() && !key.empty() && std::isupper((unsigned char) key[0]))
+        value[0] = std::toupper((unsigned char) value[0]);
+    key = value;
+    return;
+}
+
+inline void dictionary::tolower(std::string& str)
+{
+    for (std::string::size_type z = 0, len = str.size(); z < len; ++z)
+        str[z] = std::tolower((unsigned char) str[z]);
+}
+
+} } }       // End namespaces example, iostreams, boost.
+
+#endif      // #ifndef BOOST_IOSTREAMS_DICTIONARY_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/example/finite_state_filter.hpp b/vendor/pdalboost/libs/iostreams/example/finite_state_filter.hpp
new file mode 100644
index 0000000..57924e9
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/example/finite_state_filter.hpp
@@ -0,0 +1,365 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from an example of James Kanze, with suggestions from Peter Dimov.
+// See http://www.gabi-soft.fr/codebase-en.html.
+
+#ifndef BOOST_IOSTREAMS_FINITE_STATE_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FINITE_STATE_FILTER_HPP_INCLUDED
+
+#include <cassert>
+#include <cstdio>    // EOF.
+#include <iostream>  // cin, cout.
+#include <locale>
+#include <string>
+#include <boost/config.hpp>                 // JOIN, member template friends.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/checked_operations.hpp>   // put_if.
+#include <boost/iostreams/concepts.hpp>
+#include <boost/iostreams/detail/ios.hpp>           // openmode.
+#include <boost/iostreams/filter/stdio.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_base_and_derived.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+//------------------Definition of basic character classes---------------------//
+
+struct finite_state_machine_base {
+
+    static const int initial_state = 0;
+
+        // All-inclusive character class.
+
+    struct is_any {
+        template<typename Ch>
+        static bool test(Ch, const std::locale&) { return true; }
+    };
+
+        // Locale-sensitive character classes.
+
+    #define BOOST_IOSTREAMS_CHARACTER_CLASS(class) \
+        struct BOOST_JOIN(is_, class) { \
+            template<typename Ch> \
+            static bool test(Ch event, const std::locale& loc) \
+            { return std::BOOST_JOIN(is, class)(event, loc); } \
+        }; \
+        /**/
+
+    BOOST_IOSTREAMS_CHARACTER_CLASS(alnum)
+    BOOST_IOSTREAMS_CHARACTER_CLASS(alpha)
+    BOOST_IOSTREAMS_CHARACTER_CLASS(cntrl)
+    BOOST_IOSTREAMS_CHARACTER_CLASS(digit)
+    BOOST_IOSTREAMS_CHARACTER_CLASS(graph)
+    BOOST_IOSTREAMS_CHARACTER_CLASS(lower)
+    BOOST_IOSTREAMS_CHARACTER_CLASS(print)
+    BOOST_IOSTREAMS_CHARACTER_CLASS(punct)
+    BOOST_IOSTREAMS_CHARACTER_CLASS(space)
+    BOOST_IOSTREAMS_CHARACTER_CLASS(upper)
+    BOOST_IOSTREAMS_CHARACTER_CLASS(xdigit)
+
+    #undef BOOST_IOSTREAMS_CHARACTER_CLASS
+};
+
+template<typename Ch>
+struct finite_state_machine_base_ex : finite_state_machine_base {
+    template<Ch C>
+    struct is {
+        static bool test(Ch event, const std::locale&)
+        {
+            return event == C;
+        }
+    };
+};
+
+//------------------Definition of base class for finite state filters---------//
+
+namespace detail {
+
+template<typename FiniteStateMachine>
+class finite_state_filter_impl;
+
+} // End namespace detail.
+
+template<typename Derived, typename Ch = char>
+class finite_state_machine : public finite_state_machine_base_ex<Ch> {
+public:
+    typedef Ch                                  char_type;
+    typedef typename char_traits<Ch>::int_type  int_type;
+    void imbue(const std::locale& loc) { loc_ = loc; }
+    const std::locale& getloc() const { return loc_; }
+protected:
+    finite_state_machine() : off_(0) { }
+
+    // Template whose instantiations make up transition table.
+
+    template< int State,
+              typename CharacterClass,
+              int NextState,
+              void (Derived::*Action)(char_type) >
+    struct row {
+        typedef CharacterClass  character_class;
+        static const int        state = State;
+        static const int        next_state = NextState;
+        static void execute(Derived& d, char_type event)
+        {
+            (d.*Action)(event);
+        }
+    };
+
+    // Stack interface.
+
+    bool empty() const
+    {
+        return off_ == buf_.size();
+    }
+    void push(char c) { buf_ += c; }
+    char_type pop()
+    {
+        char_type result = buf_[off_++];
+        if (off_ == buf_.size())
+            clear();
+        return result;
+    }
+    char_type& top() { return buf_[off_]; }
+    void clear()
+    {
+        buf_.clear();
+        off_ = 0;
+    }
+
+    // Default event handlers.
+
+    void on_eof() { }
+    void skip(char_type) { }
+
+#if BOOST_WORKAROUND(__MWERKS__, <= 0x3206)
+    template<typename Ch>
+    void _push_impl(Ch c) { push(c); }
+#endif
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+    template<typename FiniteStateFilter>
+    friend class detail::finite_state_filter_impl;
+#else
+    public:
+#endif
+    void on_any(char_type) { }
+private:
+    typedef std::basic_string<char_type>     string_type;
+    typedef typename string_type::size_type  size_type;
+    std::locale  loc_;
+    string_type  buf_;
+    size_type    off_;
+};
+
+#if !BOOST_WORKAROUND(__MWERKS__, <= 0x3206)
+# define BOOST_IOSTREAMS_FSM(fsm) \
+    template<typename Ch> \
+    void push(Ch c) \
+    { ::pdalboost::iostreams::finite_state_machine<fsm, Ch>::push(c); } \
+    template<typename Ch> \
+    void skip(Ch c) { (void) c; } \
+    /**/
+#else // #ifndef __MWERKS__
+# define BOOST_IOSTREAMS_FSM(fsm) \
+    void push(char c) { this->_push_impl(c); } \
+    void push(wchar_t c) { this->_push_impl(c); } \
+    void skip(char c) { (void) c; } \
+    void skip(wchar_t c) { (void) c; } \
+    /**/
+#endif
+
+//------------------Definition of finite_state_filter_impl--------------------//
+
+namespace detail {
+
+template<typename FiniteStateMachine>
+class finite_state_filter_impl : protected FiniteStateMachine
+{
+private:
+    template<typename First, typename Last>
+    struct process_event_impl;
+public:
+    typedef typename char_type_of<FiniteStateMachine>::type char_type;
+
+    finite_state_filter_impl() : state_(FiniteStateMachine::initial_state) { }
+
+    template<typename T0>
+    explicit finite_state_filter_impl(const T0& t0)
+        : FiniteStateMachine(t0), state_(FiniteStateMachine::initial_state)
+        { }
+
+    template<typename T0, typename T1>
+    finite_state_filter_impl(const T0& t0, const T1& t1)
+        : FiniteStateMachine(t0, t1), state_(FiniteStateMachine::initial_state)
+        { }
+
+    template<typename T0, typename T1, typename T2>
+    finite_state_filter_impl(const T0& t0, const T1& t1, const T2& t2)
+        : FiniteStateMachine(t0, t1, t2),
+          state_(FiniteStateMachine::initial_state)
+        { }
+protected:
+    void process_event(char_type c)
+    {
+        typedef typename FiniteStateMachine::transition_table  transitions;
+        typedef typename mpl::begin<transitions>::type         first;
+        typedef typename mpl::end<transitions>::type           last;
+        state_ = process_event_impl<first, last>::execute(*this, state_, c);
+    }
+    int& state() { return state_; }
+    void reset()
+    {
+        state_ = FiniteStateMachine::initial_state;
+        this->clear();
+    }
+private:
+    template<typename First, typename Last>
+    struct process_event_impl {
+        static int execute(FiniteStateMachine& fsm, int state, char_type event)
+        {
+            typedef typename mpl::deref<First>::type  rule;
+            typedef typename mpl::next<First>::type   next;
+            typedef typename rule::character_class    character_class;
+
+            if ( state == rule::state &&
+                 character_class::test(event, fsm.getloc()) )
+            {
+                // Rule applies.
+                rule::execute(fsm, event);
+                return rule::next_state;
+            }
+
+            // Rule is inapplicable: try next rule.
+            return process_event_impl<next, Last>::execute(fsm, state, event);
+        }
+    };
+
+    template<typename Last>
+    struct process_event_impl<Last, Last> {
+        static int execute(FiniteStateMachine& fsm, int state, char_type c)
+        {
+            on_any(fsm, c);
+            return state;
+        }
+    };
+#if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042)) /* Tru64 */ \
+ || BOOST_WORKAROUND(__MWERKS__,   BOOST_TESTED_AT(0x3205))   /* CW9.4 */
+    public:
+#endif
+    template<typename FSM>
+    static void on_any(FSM& fsm, char_type c) { fsm.on_any(c); }
+private:
+    int state_;
+};
+
+} // End namespace detail.
+
+//------------------Definition of finite_state_filter-------------------------//
+
+template<typename FiniteStateMachine>
+class finite_state_filter
+    : public detail::finite_state_filter_impl<FiniteStateMachine>
+{
+private:
+    typedef detail::finite_state_filter_impl<FiniteStateMachine>  base_type;
+public:
+    typedef typename base_type::char_type                         char_type;
+    typedef char_traits<char_type>                                traits_type;
+    typedef typename base_type::int_type                          int_type;
+    struct category
+        : dual_use, filter_tag, closable_tag, localizable_tag
+        { };
+
+    finite_state_filter() : flags_(0) { }
+
+    template<typename T0>
+    finite_state_filter(const T0& t0)
+        : base_type(t0), flags_(0)
+        { }
+
+    template<typename T0, typename T1>
+    finite_state_filter(const T0& t0, const T1& t1)
+        : base_type(t0, t1), flags_(0)
+        { }
+
+    template<typename T0, typename T1, typename T2>
+    finite_state_filter(const T0& t0, const T1& t1, const T2& t2)
+        : base_type(t0, t1, t2), flags_(0)
+        { }
+
+    template<typename Source>
+    int_type get(Source& src)
+    {
+        assert((flags_ & f_write) == 0);
+        flags_ |= f_read;
+
+        while (true) {
+            if ((flags_ & f_eof) == 0) {
+
+                // Read a character and process it.
+                int_type c;
+                if (traits_type::is_eof(c = iostreams::get(src))) {
+                    flags_ |= f_eof;
+                    this->on_eof();
+                } else if (!traits_type::would_block(c)) {
+                    this->process_event(c);
+                }
+            }
+
+            // Return a character, if available.
+            if (!this->empty())
+                return this->pop();
+            else if ((flags_ & f_eof) != 0)
+                return traits_type::eof();
+        }
+    }
+
+    template<typename Sink>
+    bool put(Sink& dest, char_type c)
+    {
+        assert((flags_ & f_read) == 0);
+        flags_ |= f_write;
+
+        this->process_event(c);
+        while (!this->empty() && iostreams::put(dest, this->top()))
+            this->pop();
+
+        return true;
+    }
+
+    template<typename Device>
+    void close(Device& dev, BOOST_IOS::openmode which)
+    {
+        if (which == BOOST_IOS::out) {
+            if (flags_ & f_write)
+                while (!this->empty())
+                    iostreams::put_if(dev, this->pop());
+            this->reset();
+            flags_ = 0;
+        }
+    }
+private:
+    enum flags {
+        f_read    = 1,
+        f_write   = f_read << 1,
+        f_eof     = f_write << 1
+    };
+
+    int flags_;
+};
+
+} }       // End namespaces iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_FINITE_STATE_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/example/iterator_range_example.cpp b/vendor/pdalboost/libs/iostreams/example/iterator_range_example.cpp
new file mode 100644
index 0000000..7bca478
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/example/iterator_range_example.cpp
@@ -0,0 +1,24 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <cassert>
+#include <string>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/range/iterator_range.hpp>
+
+namespace io = pdalboost::iostreams;
+
+int main()
+{
+    using namespace std;
+
+    string                 input = "Hello World!";
+    string                 output;
+    io::filtering_istream  in(pdalboost::make_iterator_range(input));
+    getline(in, output);
+    assert(input == output);
+}
diff --git a/vendor/pdalboost/libs/iostreams/example/line_wrapping_filter.hpp b/vendor/pdalboost/libs/iostreams/example/line_wrapping_filter.hpp
new file mode 100644
index 0000000..06b07e2
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/example/line_wrapping_filter.hpp
@@ -0,0 +1,131 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// Adapted from an example of James Kanze. See
+// http://www.gabi-soft.fr/codebase-en.html.
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_LINE_WRAPPING_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_LINE_WRAPPING_FILTER_HPP_INCLUDED
+
+#include <cstdio>                            // EOF.
+#include <boost/iostreams/concepts.hpp>      // output_filter.
+#include <boost/iostreams/filter/stdio.hpp>
+#include <boost/iostreams/operations.hpp>    // pdalboost::iostreams::put.
+
+namespace pdalboost { namespace iostreams { namespace example {
+
+class line_wrapping_stdio_filter : public stdio_filter {
+public:
+    explicit line_wrapping_stdio_filter(int line_length = 80)
+        : line_length_(line_length), col_no_(0)
+        { }
+private:
+    void do_filter()
+    {
+        int c;
+        while ((c = std::cin.get()) != EOF) {
+            if (c != '\n' && col_no_ >= line_length_)
+                put_char('\n');
+            put_char(c);
+        }
+    }
+    void do_close() { col_no_ = 0; }
+    void put_char(int c)
+    {
+        std::cout.put(c);
+        if (c != '\n')
+            ++col_no_;
+        else
+            col_no_ = 0;
+    }
+    int  line_length_;
+    int  col_no_;
+};
+
+class line_wrapping_input_filter : public input_filter {
+public:
+    explicit line_wrapping_input_filter(int line_length = 80)
+        : line_length_(line_length), col_no_(0), has_next_(false)
+        { }
+
+    template<typename Source>
+    int get(Source& src)
+    {
+        if (has_next_) {
+            has_next_ = false;
+            return get_char(next_);
+        }
+
+        int c;
+        if ((c = iostreams::get(src)) == EOF || c == WOULD_BLOCK)
+            return c;
+
+        if (c != '\n' && col_no_ >= line_length_) {
+            next_ = c;
+            has_next_ = true;
+            return get_char('\n');
+        }
+
+        return get_char(c);
+    }
+
+    template<typename Sink>
+    void close(Sink&)
+    {
+        col_no_ = 0;
+        has_next_ = false;
+    }
+private:
+    int get_char(int c)
+    {
+        if (c != '\n')
+            ++col_no_;
+        else
+            col_no_ = 0;
+        return c;
+    }
+    int  line_length_;
+    int  col_no_;
+    int  next_;
+    int  has_next_;
+};
+
+class line_wrapping_output_filter : public output_filter {
+public:
+    explicit line_wrapping_output_filter(int line_length = 80)
+        : line_length_(line_length), col_no_(0)
+        { }
+
+    template<typename Sink>
+    bool put(Sink& dest, int c)
+    {
+        if (c != '\n' && col_no_ >= line_length_ && !put_char(dest, '\n'))
+            return false;
+        return put_char(dest, c);
+    }
+
+    template<typename Sink>
+    void close(Sink&) { col_no_ = 0; }
+private:
+    template<typename Sink>
+    bool put_char(Sink& dest, int c)
+    {
+        if (!iostreams::put(dest, c))
+            return false;
+        if (c != '\n')
+            ++col_no_;
+        else
+            col_no_ = 0;
+        return true;
+    }
+    int  line_length_;
+    int  col_no_;
+};
+
+} } }       // End namespaces example, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_LINE_WRAPPING_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/example/shell_comments_filter.hpp b/vendor/pdalboost/libs/iostreams/example/shell_comments_filter.hpp
new file mode 100644
index 0000000..a6f3344
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/example/shell_comments_filter.hpp
@@ -0,0 +1,222 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from an example of James Kanze, with suggestions from Peter Dimov.
+// See http://www.gabi-soft.fr/codebase-en.html.
+
+#ifndef BOOST_IOSTREAMS_SHELL_COMMENTS_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_SHELL_COMMENTS_FILTER_HPP_INCLUDED
+
+#include <cassert>
+#include <cstdio>    // EOF.
+#include <iostream>  // cin, cout.
+#include <boost/iostreams/concepts.hpp>
+#include <boost/iostreams/detail/ios.hpp>  // BOOST_IOS.
+#include <boost/iostreams/filter/stdio.hpp>
+#include <boost/iostreams/operations.hpp>
+
+namespace pdalboost { namespace iostreams { namespace example {
+
+class shell_comments_stdio_filter : public stdio_filter {
+public:
+    explicit shell_comments_stdio_filter(char comment_char = '#')
+        : comment_char_(comment_char)
+        { }
+private:
+    void do_filter()
+    {
+        bool  skip = false;
+        int   c;
+        while ((c = std::cin.get()) != EOF) {
+            skip = c == comment_char_ ?
+                true :
+                c == '\n' ?
+                    false :
+                    skip;
+            if (!skip)
+                std::cout.put(c);
+        }
+    }
+    char comment_char_;
+};
+
+class shell_comments_input_filter : public input_filter {
+public:
+    explicit shell_comments_input_filter(char comment_char = '#')
+        : comment_char_(comment_char), skip_(false)
+        { }
+
+    template<typename Source>
+    int get(Source& src)
+    {
+        int c;
+        while (true) {
+            if ((c = pdalboost::iostreams::get(src)) == EOF || c == WOULD_BLOCK)
+                break;
+            skip_ = c == comment_char_ ?
+                true :
+                c == '\n' ?
+                    false :
+                    skip_;
+            if (!skip_)
+                break;
+        }
+        return c;
+    }
+
+    template<typename Source>
+    void close(Source&) { skip_ = false; }
+private:
+    char comment_char_;
+    bool skip_;
+};
+
+class shell_comments_output_filter : public output_filter {
+public:
+    explicit shell_comments_output_filter(char comment_char = '#')
+        : comment_char_(comment_char), skip_(false)
+        { }
+
+    template<typename Sink>
+    bool put(Sink& dest, int c)
+    {
+        skip_ = c == comment_char_ ?
+            true :
+            c == '\n' ?
+                false :
+                skip_;
+
+        if (skip_)
+            return true;
+
+        return iostreams::put(dest, c);
+    }
+
+    template<typename Source>
+    void close(Source&) { skip_ = false; }
+private:
+    char comment_char_;
+    bool skip_;
+};
+
+class shell_comments_dual_use_filter : public dual_use_filter {
+public:
+    explicit shell_comments_dual_use_filter(char comment_char = '#')
+        : comment_char_(comment_char), skip_(false)
+        { }
+
+    template<typename Source>
+    int get(Source& src)
+    {
+        int c;
+        while (true) {
+            if ((c = pdalboost::iostreams::get(src)) == EOF || c == WOULD_BLOCK)
+                break;
+            skip_ = c == comment_char_ ?
+                true :
+                c == '\n' ?
+                    false :
+                    skip_;
+            if (!skip_)
+                break;
+        }
+        return c;
+    }
+
+    template<typename Sink>
+    bool put(Sink& dest, int c)
+    {
+        skip_ = c == comment_char_ ?
+            true :
+            c == '\n' ?
+                false :
+                skip_;
+
+        if (skip_)
+            return true;
+
+        return iostreams::put(dest, c);
+    }
+
+    template<typename Device>
+    void close(Device&, BOOST_IOS::openmode) { skip_ = false; }
+private:
+    char comment_char_;
+    bool skip_;
+};
+
+class shell_comments_multichar_input_filter : public multichar_input_filter {
+public:
+    explicit shell_comments_multichar_input_filter(char comment_char = '#')
+        : comment_char_(comment_char), skip_(false)
+        { }
+
+    template<typename Source>
+    std::streamsize read(Source& src, char* s, std::streamsize n)
+    {
+        for (std::streamsize z = 0; z < n; ++z) {
+            int c;
+            while (true) {
+                if ((c = pdalboost::iostreams::get(src)) == EOF)
+                    return z != 0 ? z : -1;
+                else if (c == WOULD_BLOCK)
+                    return z;
+                skip_ = c == comment_char_ ?
+                    true :
+                    c == '\n' ?
+                        false :
+                        skip_;
+                if (!skip_)
+                    break;
+            }
+            s[z] = c;
+        }
+        return n;
+    }
+
+    template<typename Source>
+    void close(Source&) { skip_ = false; }
+private:
+    char comment_char_;
+    bool skip_;
+};
+
+class shell_comments_multichar_output_filter : public multichar_output_filter {
+public:
+    explicit shell_comments_multichar_output_filter(char comment_char = '#')
+        : comment_char_(comment_char), skip_(false)
+        { }
+
+    template<typename Sink>
+    std::streamsize write(Sink& dest, const char* s, std::streamsize n)
+    {
+        std::streamsize z;
+        for (z = 0; z < n; ++z) {
+            int c = s[z];
+            skip_ = c == comment_char_ ?
+                true :
+                c == '\n' ?
+                    false :
+                    skip_;
+            if (skip_)
+                continue;
+            if (!iostreams::put(dest, c))
+                break;
+        }
+        return z;
+    }
+
+    template<typename Source>
+    void close(Source&) { skip_ = false; }
+private:
+    char comment_char_;
+    bool skip_;
+};
+
+} } }       // End namespaces example, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_SHELL_COMMENTS_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/example/std_back_inserter_example.cpp b/vendor/pdalboost/libs/iostreams/example/std_back_inserter_example.cpp
new file mode 100644
index 0000000..f36f2ef
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/example/std_back_inserter_example.cpp
@@ -0,0 +1,24 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <cassert>
+#include <iterator>  // back_inserter
+#include <string>
+#include <boost/iostreams/filtering_stream.hpp>
+
+namespace io = pdalboost::iostreams;
+
+int main()
+{
+    using namespace std;
+
+    string                 result;
+    io::filtering_ostream  out(std::back_inserter(result));
+    out << "Hello World!";
+    out.flush();
+    assert(result == "Hello World!");
+}
diff --git a/vendor/pdalboost/libs/iostreams/example/tab_expanding_filter.hpp b/vendor/pdalboost/libs/iostreams/example/tab_expanding_filter.hpp
new file mode 100644
index 0000000..2b43b22
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/example/tab_expanding_filter.hpp
@@ -0,0 +1,155 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Adapted from an example of James Kanze, with suggestions from Rob Stewart.
+// See http://www.gabi-soft.fr/codebase-en.html.
+
+#ifndef BOOST_IOSTREAMS_TAB_EXPANDING_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TAB_EXPANDING_FILTER_HPP_INCLUDED
+
+#include <cassert>
+#include <cstdio>    // EOF.
+#include <iostream>  // cin, cout.
+#include <boost/iostreams/concepts.hpp>
+#include <boost/iostreams/filter/stdio.hpp>
+#include <boost/iostreams/operations.hpp>
+
+namespace pdalboost { namespace iostreams { namespace example {
+
+class tab_expanding_stdio_filter : public stdio_filter {
+public:
+    explicit tab_expanding_stdio_filter(int tab_size = 8)
+        : tab_size_(tab_size), col_no_(0)
+    {
+        assert(tab_size > 0);
+    }
+private:
+    void do_filter()
+    {
+        int c;
+        while ((c = std::cin.get()) != EOF) {
+            if (c == '\t') {
+                int spaces = tab_size_ - (col_no_ % tab_size_);
+                for (; spaces > 0; --spaces)
+                    put_char(' ');
+            } else {
+                put_char(c);
+            }
+        }
+    }
+    void do_close() { col_no_ = 0; }
+    void put_char(int c)
+    {
+        std::cout.put(c);
+        if (c == '\n') {
+            col_no_ = 0;
+        } else {
+            ++col_no_;
+        }
+    }
+    int  tab_size_;
+    int  col_no_;
+};
+
+class tab_expanding_input_filter : public input_filter {
+public:
+    explicit tab_expanding_input_filter(int tab_size = 8)
+        : tab_size_(tab_size), col_no_(0), spaces_(0)
+    {
+        assert(tab_size > 0);
+    }
+
+    template<typename Source>
+    int get(Source& src)
+    {
+        if (spaces_ > 0) {
+            --spaces_;
+            return get_char(' ');
+        }
+
+        int c;
+        if ((c = iostreams::get(src)) == EOF || c == WOULD_BLOCK)
+            return c;
+
+        if (c != '\t')
+            return get_char(c);
+
+        // Found a tab. Call this filter recursively.
+        spaces_ = tab_size_ - (col_no_ % tab_size_);
+        return this->get(src);
+    }
+
+    template<typename Source>
+    void close(Source&)
+    {
+        col_no_ = 0;
+        spaces_ = 0;
+    }
+private:
+    int get_char(int c)
+    {
+        if (c == '\n') {
+            col_no_ = 0;
+        } else {
+            ++col_no_;
+        }
+        return c;
+    }
+    int   tab_size_;
+    int   col_no_;
+    int   spaces_;
+};
+
+class tab_expanding_output_filter : public output_filter {
+public:
+    explicit tab_expanding_output_filter(int tab_size = 8)
+        : tab_size_(tab_size), col_no_(0), spaces_(0)
+    {
+        assert(tab_size > 0);
+    }
+
+    template<typename Sink>
+    bool put(Sink& dest, int c)
+    {
+        for (; spaces_ > 0; --spaces_)
+            if (!put_char(dest, ' '))
+                return false;
+
+        if (c == '\t') {
+            spaces_ = tab_size_ - (col_no_ % tab_size_) - 1;
+            return this->put(dest, ' ');
+        }
+
+        return put_char(dest, c);
+    }
+
+    template<typename Sink>
+    void close(Sink&)
+    {
+        col_no_ = 0;
+        spaces_ = 0;
+    }
+private:
+    template<typename Sink>
+    bool put_char(Sink& dest, int c)
+    {
+        if (!iostreams::put(dest, c))
+            return false;
+        if (c != '\n')
+            ++col_no_;
+        else
+            col_no_ = 0;
+        return true;
+    }
+    int  tab_size_;
+    int  col_no_;
+    int  spaces_;
+};
+
+} } } // End namespaces example, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_TAB_EXPANDING_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/example/unix2dos_filter.hpp b/vendor/pdalboost/libs/iostreams/example/unix2dos_filter.hpp
new file mode 100644
index 0000000..1929c4d
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/example/unix2dos_filter.hpp
@@ -0,0 +1,99 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_UNIX2DOS_FILTER_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_UNIX2DOS_FILTER_FILTER_HPP_INCLUDED
+
+#include <cassert>
+#include <cstdio>    // EOF.
+#include <iostream>  // cin, cout.
+#include <boost/iostreams/concepts.hpp>
+#include <boost/iostreams/filter/stdio.hpp>
+#include <boost/iostreams/operations.hpp>
+
+namespace pdalboost { namespace iostreams { namespace example {
+
+class unix2dos_stdio_filter : public stdio_filter {
+private:
+    void do_filter()
+    {
+        int c;
+        while ((c = std::cin.get()) != EOF) {
+            if (c == '\n')
+                std::cout.put('\r');
+            std::cout.put(c);
+        }
+    }
+};
+
+class unix2dos_input_filter : public input_filter {
+public:
+    unix2dos_input_filter() : has_linefeed_(false) { }
+
+    template<typename Source>
+    int get(Source& src)
+    {
+        if (has_linefeed_) {
+            has_linefeed_ = false;
+            return '\n';
+        }
+
+        int c;
+        if ((c = iostreams::get(src)) == '\n') {
+            has_linefeed_ = true;
+            return '\r';
+        }
+
+        return c;
+    }
+
+    template<typename Source>
+    void close(Source&) { has_linefeed_ = false; }
+private:
+    bool has_linefeed_;
+};
+
+class unix2dos_output_filter : public output_filter {
+public:
+    unix2dos_output_filter() : has_linefeed_(false) { }
+
+    template<typename Sink>
+    bool put(Sink& dest, int c)
+    {
+        if (c == '\n')
+            return has_linefeed_ ?
+                put_char(dest, '\n') :
+                put_char(dest, '\r') ?
+                    this->put(dest, '\n') :
+                    false;
+        return iostreams::put(dest, c);
+    }
+
+    template<typename Sink>
+    void close(Sink&) { has_linefeed_ = false; }
+private:
+    template<typename Sink>
+    bool put_char(Sink& dest, int c)
+    {
+        bool result;
+        if ((result = iostreams::put(dest, c)) == true) {
+            has_linefeed_ =
+                c == '\r' ?
+                    true :
+                    c == '\n' ?
+                        false :
+                        has_linefeed_;
+        }
+        return result;
+    }
+
+    bool has_linefeed_;
+};
+
+} } } // End namespaces example, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_UNIX2DOS_FILTER_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/index.html b/vendor/pdalboost/libs/iostreams/index.html
new file mode 100755
index 0000000..8ba2378
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/index.html
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="refresh" CONTENT="0; URL=doc/index.html">
+</HEAD>
+<BODY>
+<P>Please visit our new location at <A HREF="doc/index.html">doc/index.html</A>. </P>
+<hr>
+<p>� Copyright Beman Dawes, 2001</p>
+<p>Distributed under the Boost Software License, Version 1.0. (See accompanying 
+file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy 
+at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</p>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/iostreams/meta/libraries.json b/vendor/pdalboost/libs/iostreams/meta/libraries.json
new file mode 100644
index 0000000..505f888
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/meta/libraries.json
@@ -0,0 +1,15 @@
+{
+    "key": "iostreams",
+    "name": "Iostreams",
+    "authors": [
+        "Jonathan Turkanis"
+    ],
+    "description": "Boost.IOStreams provides a framework for defining streams, stream buffers and i/o filters.",
+    "category": [
+        "IO",
+        "String"
+    ],
+    "maintainers": [
+        "Jonathan Turkanis <turkanis -at- coderage.com>"
+    ]
+}
diff --git a/vendor/pdalboost/libs/iostreams/src/bzip2.cpp b/vendor/pdalboost/libs/iostreams/src/bzip2.cpp
new file mode 100644
index 0000000..e59992a
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/src/bzip2.cpp
@@ -0,0 +1,173 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// To configure Boost to work with libbz2, see the 
+// installation instructions here:
+// http://boost.org/libs/iostreams/doc/index.html?path=7
+
+// Define BOOST_IOSTREAMS_SOURCE so that <boost/iostreams/detail/config.hpp> 
+// knows that we are building the library (possibly exporting code), rather 
+// than using it (possibly importing code).
+#define BOOST_IOSTREAMS_SOURCE 
+
+#include <boost/throw_exception.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/filter/bzip2.hpp> 
+#include "bzlib.h"  // Julian Seward's "bzip.h" header.
+                    // To configure Boost to work with libbz2, see the 
+                    // installation instructions here:
+                    // http://boost.org/libs/iostreams/doc/index.html?path=7
+                    
+namespace pdalboost { namespace iostreams {
+
+namespace bzip2 {
+
+                    // Status codes
+
+const int ok                   = BZ_OK;
+const int run_ok               = BZ_RUN_OK;
+const int flush_ok             = BZ_FLUSH_OK;
+const int finish_ok            = BZ_FINISH_OK;
+const int stream_end           = BZ_STREAM_END;
+const int sequence_error       = BZ_SEQUENCE_ERROR;
+const int param_error          = BZ_PARAM_ERROR;
+const int mem_error            = BZ_MEM_ERROR;
+const int data_error           = BZ_DATA_ERROR;
+const int data_error_magic     = BZ_DATA_ERROR_MAGIC;
+const int io_error             = BZ_IO_ERROR;
+const int unexpected_eof       = BZ_UNEXPECTED_EOF;
+const int outbuff_full         = BZ_OUTBUFF_FULL;
+const int config_error         = BZ_CONFIG_ERROR;
+
+                    // Action codes
+
+const int finish               = BZ_FINISH;
+const int run                  = BZ_RUN;
+
+} // End namespace bzip2. 
+
+//------------------Implementation of bzip2_error-----------------------------//
+                    
+bzip2_error::bzip2_error(int error)
+    : BOOST_IOSTREAMS_FAILURE("bzip2 error"), error_(error) 
+    { }
+
+void bzip2_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(int error)
+{
+    switch (error) {
+    case BZ_OK: 
+    case BZ_RUN_OK: 
+    case BZ_FLUSH_OK:
+    case BZ_FINISH_OK:
+    case BZ_STREAM_END:
+        return;
+    case BZ_MEM_ERROR: 
+        pdalboost::throw_exception(std::bad_alloc());
+    default:
+        pdalboost::throw_exception(bzip2_error(error));
+    }
+}
+
+//------------------Implementation of bzip2_base------------------------------//
+
+namespace detail {
+
+bzip2_base::bzip2_base(const bzip2_params& params)
+    : params_(params), stream_(new bz_stream), ready_(false) 
+    { }
+
+bzip2_base::~bzip2_base() { delete static_cast<bz_stream*>(stream_); }
+
+void bzip2_base::before( const char*& src_begin, const char* src_end,
+                         char*& dest_begin, char* dest_end )
+{
+    bz_stream* s = static_cast<bz_stream*>(stream_);
+    s->next_in = const_cast<char*>(src_begin);
+    s->avail_in = static_cast<unsigned>(src_end - src_begin);
+    s->next_out = reinterpret_cast<char*>(dest_begin);
+    s->avail_out= static_cast<unsigned>(dest_end - dest_begin);
+}
+
+void bzip2_base::after(const char*& src_begin, char*& dest_begin)
+{
+    bz_stream* s = static_cast<bz_stream*>(stream_);
+    src_begin = const_cast<char*>(s->next_in);
+    dest_begin = s->next_out;
+}
+
+int bzip2_base::check_end(const char* src_begin, const char* dest_begin)
+{
+    bz_stream* s = static_cast<bz_stream*>(stream_);
+    if( src_begin == s->next_in &&
+        s->avail_in == 0 &&
+        dest_begin == s->next_out) {
+        return bzip2::unexpected_eof;
+    } else {
+        return bzip2::ok;
+    }
+}
+
+void bzip2_base::end(bool compress)
+{
+    if(!ready_) return;
+    ready_ = false;
+    bz_stream* s = static_cast<bz_stream*>(stream_);
+    bzip2_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(
+        compress ?
+            BZ2_bzCompressEnd(s) : 
+            BZ2_bzDecompressEnd(s)
+    ); 
+}
+
+int bzip2_base::compress(int action)
+{
+    return BZ2_bzCompress(static_cast<bz_stream*>(stream_), action);
+}
+
+int bzip2_base::decompress()
+{
+    return BZ2_bzDecompress(static_cast<bz_stream*>(stream_));
+}
+
+void bzip2_base::do_init
+    ( bool compress, 
+      #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+          bzip2::alloc_func /* alloc */, 
+          bzip2::free_func /* free */, 
+      #endif
+      void* derived )
+{
+    bz_stream* s = static_cast<bz_stream*>(stream_);
+
+    // Current interface for customizing memory management 
+    // is non-conforming and has been disabled:
+    //#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    //    s->bzalloc = alloc;
+    //    s->bzfree = free;
+    //#else
+        s->bzalloc = 0;
+        s->bzfree = 0;
+    //#endif
+    s->opaque = derived;
+    bzip2_error::check BOOST_PREVENT_MACRO_SUBSTITUTION( 
+        compress ?
+            BZ2_bzCompressInit( s,
+                                params_.block_size, 
+                                0, 
+                                params_.work_factor ) :
+            BZ2_bzDecompressInit( s, 
+                                  0, 
+                                  params_.small )
+    );
+    ready_ = true;
+}
+
+} // End namespace detail.
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
diff --git a/vendor/pdalboost/libs/iostreams/src/file_descriptor.cpp b/vendor/pdalboost/libs/iostreams/src/file_descriptor.cpp
new file mode 100644
index 0000000..2911ca2
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/src/file_descriptor.cpp
@@ -0,0 +1,601 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Define BOOST_IOSTREAMS_SOURCE so that <boost/iostreams/detail/config.hpp>
+// knows that we are building the library (possibly exporting code), rather
+// than using it (possibly importing code).
+#define BOOST_IOSTREAMS_SOURCE
+
+#include <cassert>
+#include <cerrno>
+#include <cstdio>                                 // SEEK_SET, etc.
+#include <boost/config.hpp>                       // BOOST_JOIN
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/config/rtl.hpp>  // BOOST_IOSTREAMS_FD_XXX
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+#include <boost/iostreams/detail/system_failure.hpp>
+#include <boost/iostreams/detail/ios.hpp>         // openmodes, failure.
+#include <boost/iostreams/device/file_descriptor.hpp>
+#include <boost/integer_traits.hpp>
+#include <boost/throw_exception.hpp>
+
+    // OS-specific headers for low-level i/o.
+
+#include <fcntl.h>       // file opening flags.
+#include <sys/stat.h>    // file access permissions.
+#ifdef BOOST_IOSTREAMS_WINDOWS
+# include <io.h>         // low-level file i/o.
+# define WINDOWS_LEAN_AND_MEAN
+# include <windows.h>
+# ifndef INVALID_SET_FILE_POINTER
+#  define INVALID_SET_FILE_POINTER ((DWORD)-1)
+# endif
+#else
+# include <sys/types.h>  // mode_t.
+# include <unistd.h>     // low-level file i/o.
+#endif
+
+namespace pdalboost { namespace iostreams {
+
+//------------------Definition of file_descriptor_impl------------------------//
+
+namespace detail {
+
+// Contains the platform dependant implementation
+struct file_descriptor_impl {
+    // Note: These need to match file_desciptor_flags
+    enum flags {
+        never_close = 0,
+        close_on_exit = 1,
+        close_on_close = 2,
+        close_always = 3
+    };
+
+    file_descriptor_impl();
+    ~file_descriptor_impl();
+    void open(file_handle fd, flags);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    void open(int fd, flags);
+#endif
+    void open(const detail::path&, BOOST_IOS::openmode);
+    bool is_open() const;
+    void close();
+    void close_impl(bool close_flag, bool throw_);
+    std::streamsize read(char* s, std::streamsize n);
+    std::streamsize write(const char* s, std::streamsize n);
+    std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
+    static file_handle invalid_handle();
+    file_handle  handle_;
+    int          flags_;
+};
+
+//------------------Implementation of file_descriptor_impl--------------------//
+
+file_descriptor_impl::file_descriptor_impl() 
+    : handle_(invalid_handle()), flags_(0) 
+    { }
+
+file_descriptor_impl::~file_descriptor_impl() 
+{ 
+    close_impl(flags_ & close_on_exit, false);
+}
+
+void file_descriptor_impl::open(file_handle fd, flags f)
+{
+    // Using 'close' to close the existing handle so that it will throw an
+    // exception if it fails.
+    //
+    // Only closing after assigning the new handle, so that the class will
+    // take ownership of the handle regardless of whether close throws.
+
+    file_descriptor_impl tmp;
+    tmp.handle_ = handle_;
+    tmp.flags_ = flags_ & close_on_exit ? close_on_close : never_close;
+
+    handle_ = fd;
+    flags_ = f;
+    
+    tmp.close();
+}
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+
+void file_descriptor_impl::open(int fd, flags f)
+{ open(reinterpret_cast<file_handle>(_get_osfhandle(fd)), f); }
+
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS //-----------------------------------//
+
+void file_descriptor_impl::open(const detail::path& p, BOOST_IOS::openmode mode)
+{
+    close_impl(flags_ & close_on_exit, true);
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+    DWORD dwDesiredAccess;
+    DWORD dwCreationDisposition;
+    if ( (mode & (BOOST_IOS::in | BOOST_IOS::out))
+             ==
+         (BOOST_IOS::in | BOOST_IOS::out) )
+    {
+        if (mode & BOOST_IOS::app)
+            pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad open mode"));
+        dwDesiredAccess = GENERIC_READ | GENERIC_WRITE;
+        dwCreationDisposition =
+            (mode & BOOST_IOS::trunc) ?
+                CREATE_ALWAYS :
+                OPEN_EXISTING;
+    } else if (mode & BOOST_IOS::in) {
+        if (mode & (BOOST_IOS::app | BOOST_IOS::trunc))
+            pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad open mode"));
+        dwDesiredAccess = GENERIC_READ;
+        dwCreationDisposition = OPEN_EXISTING;
+    } else if (mode & BOOST_IOS::out) {
+        if ( (mode & (BOOST_IOS::app | BOOST_IOS::trunc))
+                 ==
+              (BOOST_IOS::app | BOOST_IOS::trunc) )
+            pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad open mode"));
+        if (mode & BOOST_IOS::app) {
+            dwCreationDisposition = OPEN_ALWAYS;
+            dwDesiredAccess = 
+                FILE_APPEND_DATA |
+                FILE_WRITE_ATTRIBUTES |
+                FILE_WRITE_EA |
+                STANDARD_RIGHTS_WRITE |
+                SYNCHRONIZE;
+        } else {
+            dwDesiredAccess = GENERIC_WRITE;
+            dwCreationDisposition = CREATE_ALWAYS;
+        }
+    } else {
+        pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad open mode"));
+    }
+
+    HANDLE handle = p.is_wide() ?
+        ::CreateFileW( p.c_wstr(),
+                       dwDesiredAccess,
+                       FILE_SHARE_READ | FILE_SHARE_WRITE,
+                       NULL,                   // lpSecurityAttributes
+                       dwCreationDisposition,
+                       FILE_ATTRIBUTE_NORMAL,
+                       NULL ) :                // hTemplateFile
+        ::CreateFileA( p.c_str(),
+                       dwDesiredAccess,
+                       FILE_SHARE_READ | FILE_SHARE_WRITE,
+                       NULL,                   // lpSecurityAttributes
+                       dwCreationDisposition,
+                       FILE_ATTRIBUTE_NORMAL,
+                       NULL );                 // hTemplateFile
+    if (handle != INVALID_HANDLE_VALUE) {
+        handle_ = handle;
+        flags_ = close_always;
+    } else {
+        flags_ = 0;
+        throw_system_failure("failed opening file");
+    }
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS //------------------------------------//
+
+        // Calculate oflag argument to open.
+
+    int oflag = 0;
+    if ( (mode & (BOOST_IOS::in | BOOST_IOS::out))
+             ==
+         (BOOST_IOS::in | BOOST_IOS::out) )
+    {
+        if( mode & BOOST_IOS::app )
+            pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad open mode"));
+        oflag |= O_RDWR;
+        if( mode & BOOST_IOS::trunc ) {
+            oflag |= O_TRUNC;
+            oflag |= O_CREAT;
+        }
+    } else if (mode & BOOST_IOS::in) {
+        if( mode & (BOOST_IOS::app | BOOST_IOS::trunc) )
+            pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad open mode"));
+        oflag |= O_RDONLY;
+    } else if (mode & BOOST_IOS::out) {
+        if( (mode & (BOOST_IOS::app | BOOST_IOS::trunc))
+               ==
+            (BOOST_IOS::app | BOOST_IOS::trunc) )
+            pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad open mode"));
+        oflag |= O_WRONLY;
+        if (mode & BOOST_IOS::app)
+            oflag |= O_APPEND;
+        else {
+            oflag |= O_CREAT;
+            oflag |= O_TRUNC; 
+        }
+    } else {
+        pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad open mode"));
+    }
+    #ifdef _LARGEFILE64_SOURCE
+        oflag |= O_LARGEFILE;
+    #endif
+
+        // Calculate pmode argument to open.
+
+    mode_t pmode = S_IRUSR | S_IWUSR |
+                   S_IRGRP | S_IWGRP |
+                   S_IROTH | S_IWOTH;
+
+        // Open file.
+
+    int fd = BOOST_IOSTREAMS_FD_OPEN(p.c_str(), oflag, pmode);
+    if (fd == -1) {
+        pdalboost::throw_exception(system_failure("failed opening file"));
+    } else {
+        handle_ = fd;
+        flags_ = close_always;
+    }
+#endif // #ifndef BOOST_IOSTREAMS_WINDOWS //----------------------------------//
+}
+
+bool file_descriptor_impl::is_open() const
+{ return handle_ != invalid_handle(); }
+
+void file_descriptor_impl::close()
+{
+    close_impl(flags_ & close_on_close, true);
+}
+
+void file_descriptor_impl::close_impl(bool close_flag, bool throw_) {
+    if (handle_ != invalid_handle()) {
+        if (close_flag) {
+            bool success = 
+                #ifdef BOOST_IOSTREAMS_WINDOWS
+                    ::CloseHandle(handle_) == 1;
+                #else
+                    BOOST_IOSTREAMS_FD_CLOSE(handle_) != -1;
+                #endif
+            if (!success && throw_)
+                throw_system_failure("failed closing file");
+        }
+        handle_ = invalid_handle();
+        flags_ = 0;
+    }
+}
+
+std::streamsize file_descriptor_impl::read(char* s, std::streamsize n)
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    DWORD result;
+    if (!::ReadFile(handle_, s, n, &result, NULL))
+    {
+        // report EOF if the write-side of a pipe has been closed
+        if (GetLastError() == ERROR_BROKEN_PIPE)
+        {
+            result = 0;
+        }
+        else
+            throw_system_failure("failed reading");
+    }
+    return result == 0 ? -1 : static_cast<std::streamsize>(result);
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS
+    errno = 0;
+    std::streamsize result = BOOST_IOSTREAMS_FD_READ(handle_, s, n);
+    if (errno != 0)
+        throw_system_failure("failed reading");
+    return result == 0 ? -1 : result;
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
+}
+
+std::streamsize file_descriptor_impl::write(const char* s, std::streamsize n)
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    DWORD ignore;
+    if (!::WriteFile(handle_, s, n, &ignore, NULL))
+        throw_system_failure("failed writing");
+    return n;
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS
+    int amt = BOOST_IOSTREAMS_FD_WRITE(handle_, s, n);
+    if (amt < n) // Handles blocking fd's only.
+        throw_system_failure("failed writing");
+    return n;
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
+}
+
+std::streampos file_descriptor_impl::seek
+    (stream_offset off, BOOST_IOS::seekdir way)
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    LONG lDistanceToMove = static_cast<LONG>(off & 0xffffffff);
+    LONG lDistanceToMoveHigh = static_cast<LONG>(off >> 32);
+    DWORD dwResultLow =
+        ::SetFilePointer( handle_,
+                          lDistanceToMove,
+                          &lDistanceToMoveHigh,
+                          way == BOOST_IOS::beg ?
+                              FILE_BEGIN :
+                              way == BOOST_IOS::cur ?
+                                FILE_CURRENT :
+                                FILE_END );
+    if ( dwResultLow == INVALID_SET_FILE_POINTER &&
+         ::GetLastError() != NO_ERROR )
+    {
+        pdalboost::throw_exception(system_failure("failed seeking"));
+    } else {
+       return offset_to_position(
+                  (stream_offset(lDistanceToMoveHigh) << 32) + dwResultLow
+              );
+    }
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS
+    if ( off > integer_traits<BOOST_IOSTREAMS_FD_OFFSET>::const_max ||
+         off < integer_traits<BOOST_IOSTREAMS_FD_OFFSET>::const_min )
+    {
+        pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("bad offset"));
+    }
+    stream_offset result =
+        BOOST_IOSTREAMS_FD_SEEK(
+            handle_,
+            static_cast<BOOST_IOSTREAMS_FD_OFFSET>(off),
+            ( way == BOOST_IOS::beg ?
+                  SEEK_SET :
+                  way == BOOST_IOS::cur ?
+                      SEEK_CUR :
+                      SEEK_END ) 
+        );
+    if (result == -1)
+        pdalboost::throw_exception(system_failure("failed seeking"));
+    return offset_to_position(result);
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
+}
+
+// Returns the value stored in a file_handle variable when no file is open
+file_handle file_descriptor_impl::invalid_handle()
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    return INVALID_HANDLE_VALUE;
+#else
+    return -1;
+#endif
+}
+
+} // End namespace detail.
+
+//------------------Implementation of file_descriptor-------------------------//
+
+file_descriptor::file_descriptor() : pimpl_(new impl_type) { }
+
+file_descriptor::file_descriptor(handle_type fd, file_descriptor_flags f)
+    : pimpl_(new impl_type)
+{ open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+file_descriptor::file_descriptor(handle_type fd, bool close_on_exit)
+    : pimpl_(new impl_type)
+{ open(fd, close_on_exit); }
+#endif
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+
+file_descriptor::file_descriptor(int fd, file_descriptor_flags f)
+    : pimpl_(new impl_type)
+{ open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+file_descriptor::file_descriptor(int fd, bool close_on_exit)
+    : pimpl_(new impl_type)
+{ open(fd, close_on_exit); }
+#endif
+
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS //-----------------------------------//
+
+file_descriptor::file_descriptor( const std::string& path,
+                                  BOOST_IOS::openmode mode )
+    : pimpl_(new impl_type)
+{ open(path, mode); }
+
+file_descriptor::file_descriptor( const char* path,
+                                  BOOST_IOS::openmode mode )
+    : pimpl_(new impl_type)
+{ open(path, mode); }
+
+file_descriptor::file_descriptor(const file_descriptor& other) 
+    : pimpl_(other.pimpl_) 
+    { }
+
+void file_descriptor::open(handle_type fd, file_descriptor_flags f)
+{ pimpl_->open(fd, static_cast<detail::file_descriptor_impl::flags>(f)); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+void file_descriptor::open(handle_type fd, bool close_on_exit)
+{ pimpl_->open(fd, close_on_exit ?
+    detail::file_descriptor_impl::close_always :
+    detail::file_descriptor_impl::close_on_close); }
+#endif
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+
+void file_descriptor::open(int fd, file_descriptor_flags f)
+{ pimpl_->open(fd, static_cast<detail::file_descriptor_impl::flags>(f)); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+void file_descriptor::open(int fd, bool close_on_exit)
+{ pimpl_->open(fd, close_on_exit ?
+    detail::file_descriptor_impl::close_always :
+    detail::file_descriptor_impl::close_on_close); }
+#endif
+
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS //-----------------------------------//
+
+void file_descriptor::open(const std::string& path, BOOST_IOS::openmode mode)
+{ open(detail::path(path), mode); }
+
+void file_descriptor::open(const char* path, BOOST_IOS::openmode mode)
+{ open(detail::path(path), mode); }
+
+bool file_descriptor::is_open() const { return pimpl_->is_open(); }
+
+void file_descriptor::close() { pimpl_->close(); }
+
+std::streamsize file_descriptor::read(char_type* s, std::streamsize n)
+{ return pimpl_->read(s, n); }
+
+std::streamsize file_descriptor::write(const char_type* s, std::streamsize n)
+{ return pimpl_->write(s, n); }
+
+std::streampos file_descriptor::seek(stream_offset off, BOOST_IOS::seekdir way)
+{ return pimpl_->seek(off, way); }
+
+detail::file_handle file_descriptor::handle() const { return pimpl_->handle_; }
+
+void file_descriptor::init() { pimpl_.reset(new impl_type); }
+
+void file_descriptor::open(
+    const detail::path& path, 
+    BOOST_IOS::openmode mode, 
+    BOOST_IOS::openmode base )
+{
+    mode |= base;
+    pimpl_->open(path, mode);
+}
+                    
+//------------------Implementation of file_descriptor_source------------------//
+
+file_descriptor_source::file_descriptor_source(
+    handle_type fd, file_descriptor_flags f)
+{ open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+file_descriptor_source::file_descriptor_source(
+    handle_type fd, bool close_on_exit)
+{ open(fd, close_on_exit); }
+#endif
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+
+file_descriptor_source::file_descriptor_source(int fd, file_descriptor_flags f)
+{ open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+file_descriptor_source::file_descriptor_source(int fd, bool close_on_exit)
+{ open(fd, close_on_exit); }
+#endif
+
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS //-----------------------------------//
+
+file_descriptor_source::file_descriptor_source(
+    const std::string& path, BOOST_IOS::openmode mode)
+{ open(path, mode); }
+
+file_descriptor_source::file_descriptor_source(
+    const char* path, BOOST_IOS::openmode mode)
+{ open(path, mode); }
+
+file_descriptor_source::file_descriptor_source(
+    const file_descriptor_source& other) 
+        : file_descriptor(static_cast<const file_descriptor&>(other)) 
+    { }
+
+void file_descriptor_source::open(handle_type fd, file_descriptor_flags f)
+{ file_descriptor::open(fd, f);  }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+void file_descriptor_source::open(handle_type fd, bool close_on_exit)
+{ file_descriptor::open(fd, close_on_exit); }
+#endif
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+
+void file_descriptor_source::open(int fd, file_descriptor_flags f)
+{ file_descriptor::open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+void file_descriptor_source::open(int fd, bool close_on_exit)
+{ file_descriptor::open(fd, close_on_exit); }
+#endif
+
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS //-----------------------------------//
+
+void file_descriptor_source::open(
+    const std::string& path, BOOST_IOS::openmode mode)
+{ open(detail::path(path), mode); }
+
+void file_descriptor_source::open(
+    const char* path, BOOST_IOS::openmode mode)
+{ open(detail::path(path), mode); }
+
+void file_descriptor_source::open(
+    const detail::path& path, BOOST_IOS::openmode mode)
+{ 
+    if (mode & (BOOST_IOS::out | BOOST_IOS::app | BOOST_IOS::trunc))
+        pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid mode"));
+    file_descriptor::open(path, mode, BOOST_IOS::in); 
+}
+                    
+//------------------Implementation of file_descriptor_sink--------------------//
+
+file_descriptor_sink::file_descriptor_sink(
+    handle_type fd, file_descriptor_flags f)
+{ open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+file_descriptor_sink::file_descriptor_sink(
+    handle_type fd, bool close_on_exit)
+{ open(fd, close_on_exit); }
+#endif
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+
+file_descriptor_sink::file_descriptor_sink(int fd, file_descriptor_flags f)
+{ open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+file_descriptor_sink::file_descriptor_sink(int fd, bool close_on_exit)
+{ open(fd, close_on_exit); }
+#endif
+
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS //-----------------------------------//
+
+file_descriptor_sink::file_descriptor_sink(
+    const std::string& path, BOOST_IOS::openmode mode)
+{ open(path, mode); }
+
+file_descriptor_sink::file_descriptor_sink(
+    const char* path, BOOST_IOS::openmode mode)
+{ open(path, mode); }
+
+file_descriptor_sink::file_descriptor_sink(const file_descriptor_sink& other) 
+    : file_descriptor(static_cast<const file_descriptor&>(other)) 
+    { }
+
+void file_descriptor_sink::open(handle_type fd, file_descriptor_flags f)
+{ file_descriptor::open(fd, f);  }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+void file_descriptor_sink::open(handle_type fd, bool close_on_exit)
+{ file_descriptor::open(fd, close_on_exit); }
+#endif
+
+#ifdef BOOST_IOSTREAMS_WINDOWS //---------------------------------------------//
+
+void file_descriptor_sink::open(int fd, file_descriptor_flags f)
+{ file_descriptor::open(fd, f); }
+
+#if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
+void file_descriptor_sink::open(int fd, bool close_on_exit)
+{ file_descriptor::open(fd, close_on_exit); }
+#endif
+
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS //-----------------------------------//
+
+void file_descriptor_sink::open(
+    const std::string& path, BOOST_IOS::openmode mode)
+{ open(detail::path(path), mode); }
+
+void file_descriptor_sink::open(
+    const char* path, BOOST_IOS::openmode mode)
+{ open(detail::path(path), mode); }
+
+void file_descriptor_sink::open(
+    const detail::path& path, BOOST_IOS::openmode mode)
+{ 
+    if (mode & BOOST_IOS::in)
+        pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid mode"));
+    file_descriptor::open(path, mode, BOOST_IOS::out); 
+}
+
+} } // End namespaces iostreams, boost.
diff --git a/vendor/pdalboost/libs/iostreams/src/gzip.cpp b/vendor/pdalboost/libs/iostreams/src/gzip.cpp
new file mode 100644
index 0000000..ea5a57a
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/src/gzip.cpp
@@ -0,0 +1,174 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// To configure Boost to work with libbz2, see the 
+// installation instructions here:
+// http://boost.org/libs/iostreams/doc/index.html?path=7
+
+// Define BOOST_IOSTREAMS_SOURCE so that <boost/iostreams/detail/config.hpp> 
+// knows that we are building the library (possibly exporting code), rather 
+// than using it (possibly importing code).
+#define BOOST_IOSTREAMS_SOURCE 
+
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/filter/gzip.hpp>
+#include <boost/throw_exception.hpp>
+
+namespace pdalboost { namespace iostreams {
+
+//------------------Implementation of gzip_header-----------------------------//
+
+namespace detail {
+
+void gzip_header::process(char c)
+{
+    uint8_t value = static_cast<uint8_t>(c);
+    switch (state_) {
+    case s_id1:
+        if (value != gzip::magic::id1)
+            pdalboost::throw_exception(gzip_error(gzip::bad_header));
+        state_ = s_id2;
+        break;
+    case s_id2:
+        if (value != gzip::magic::id2)
+            pdalboost::throw_exception(gzip_error(gzip::bad_header));
+        state_ = s_cm;
+        break;
+    case s_cm:
+        if (value != gzip::method::deflate)
+            pdalboost::throw_exception(gzip_error(gzip::bad_method));
+        state_ = s_flg;
+        break;
+    case s_flg:
+        flags_ = value;
+        state_ = s_mtime;
+        break;
+    case s_mtime:
+        mtime_ += value << (offset_ * 8);
+        if (offset_ == 3) {
+            state_ = s_xfl;
+            offset_ = 0;
+        } else {
+            ++offset_;
+        }
+        break;
+    case s_xfl:
+        state_ = s_os;
+        break;
+    case s_os:
+        os_ = value;
+        if (flags_ & gzip::flags::extra) {
+            state_ = s_xlen;
+        } else if (flags_ & gzip::flags::name) {
+            state_ = s_name;
+        } else if (flags_ & gzip::flags::comment) {
+            state_ = s_comment;
+        } else if (flags_ & gzip::flags::header_crc) {
+            state_ = s_hcrc;
+        } else {
+            state_ = s_done;
+        }
+        break;
+    case s_xlen:
+        xlen_ += value << (offset_ * 8);
+        if (offset_ == 1) {
+            state_ = s_extra;
+            offset_ = 0;
+        } else {
+            ++offset_;
+        }
+        break;
+    case s_extra:
+        if (--xlen_ == 0) {
+            if (flags_ & gzip::flags::name) {
+                state_ = s_name;
+            } else if (flags_ & gzip::flags::comment) {
+                state_ = s_comment;
+            } else if (flags_ & gzip::flags::header_crc) {
+                state_ = s_hcrc;
+            } else {
+                state_ = s_done;
+            }
+        }
+        break;
+    case s_name:
+        if (c != 0) {
+            file_name_ += c;
+        } else if (flags_ & gzip::flags::comment) {
+            state_ = s_comment;
+        } else if (flags_ & gzip::flags::header_crc) {
+            state_ = s_hcrc;
+        } else {
+            state_ = s_done;
+        }
+        break;
+    case s_comment:
+        if (c != 0) {
+            comment_ += c;
+        } else if (flags_ & gzip::flags::header_crc) {
+            state_ = s_hcrc;
+        } else {
+            state_ = s_done;
+        }
+        break;
+    case s_hcrc:
+        if (offset_ == 1) {
+            state_ = s_done;
+            offset_ = 0;
+        } else {
+            ++offset_;
+        }
+        break;
+    default:
+        BOOST_ASSERT(0);
+    }
+}
+
+void gzip_header::reset()
+{
+    file_name_.clear();
+    comment_.clear();
+    os_ = flags_ = offset_ = xlen_ = 0;
+    mtime_ = 0;
+    state_ = s_id1;
+}
+
+//------------------Implementation of gzip_footer-----------------------------//
+
+void gzip_footer::process(char c)
+{
+    uint8_t value = static_cast<uint8_t>(c);
+    if (state_ == s_crc) {
+        crc_ += value << (offset_ * 8);
+        if (offset_ == 3) {
+            state_ = s_isize;
+            offset_ = 0;
+        } else {
+            ++offset_;
+        }
+    } else if (state_ == s_isize) {
+        isize_ += value << (offset_ * 8);
+        if (offset_ == 3) {
+            state_ = s_done;
+            offset_ = 0;
+        } else {
+            ++offset_;
+        }
+    } else {
+        BOOST_ASSERT(0);
+    }
+}
+
+void gzip_footer::reset()
+{
+    crc_ = isize_ = offset_ = 0;
+    state_ = s_crc;
+}
+
+} // End namespace pdalboost::iostreams::detail.
+
+} } // End namespaces iostreams, boost.
diff --git a/vendor/pdalboost/libs/iostreams/src/mapped_file.cpp b/vendor/pdalboost/libs/iostreams/src/mapped_file.cpp
new file mode 100644
index 0000000..0c39654
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/src/mapped_file.cpp
@@ -0,0 +1,496 @@
+// (C) Copyright Craig Henderson 2002 'boost/memmap.hpp' from sandbox
+// (C) Copyright Jonathan Turkanis 2004.
+// (C) Copyright Jonathan Graehl 2004.
+// (C) Copyright Jorge Lodos 2008.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// Define BOOST_IOSTREAMS_SOURCE so that <boost/iostreams/detail/config.hpp>
+// knows that we are building the library (possibly exporting code), rather
+// than using it (possibly importing code).
+#define BOOST_IOSTREAMS_SOURCE
+
+#include <cassert>
+#include <boost/iostreams/detail/config/rtl.hpp>
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+#include <boost/iostreams/detail/file_handle.hpp>
+#include <boost/iostreams/detail/system_failure.hpp>
+#include <boost/iostreams/device/mapped_file.hpp>
+#include <boost/throw_exception.hpp>
+
+#ifdef BOOST_IOSTREAMS_WINDOWS
+# define WIN32_LEAN_AND_MEAN  // Exclude rarely-used stuff from Windows headers
+# include <windows.h>
+#else
+# include <errno.h>
+# include <fcntl.h>
+# include <sys/mman.h>      // mmap, munmap.
+# include <sys/stat.h>
+# include <sys/types.h>     // struct stat.
+# include <unistd.h>        // sysconf.
+#endif
+
+namespace pdalboost { namespace iostreams {
+
+namespace detail {
+
+// Class containing the platform-sepecific implementation
+// Invariant: The members params_, data_, size_, handle_ (and mapped_handle_ 
+// on Windows) either
+//    - all have default values (or INVALID_HANDLE_VALUE for
+//      Windows handles), or
+//    - all have values reflecting a successful mapping.
+// In the first case, error_ may be true, reflecting a recent unsuccessful
+// open or close attempt; in the second case, error_ is always false.
+class mapped_file_impl {
+public:
+    typedef mapped_file_source::size_type   size_type;
+    typedef mapped_file_source::param_type  param_type;
+    typedef mapped_file_source::mapmode     mapmode;
+    BOOST_STATIC_CONSTANT(
+        size_type, max_length =  mapped_file_source::max_length);
+    mapped_file_impl();
+    ~mapped_file_impl();
+    void open(param_type p);
+    bool is_open() const { return data_ != 0; }
+    void close();
+    bool error() const { return error_; }
+    mapmode flags() const { return params_.flags; }
+    std::size_t size() const { return size_; }
+    char* data() const { return data_; }
+    void resize(stream_offset new_size);
+    static int alignment();
+private:
+    void open_file(param_type p);
+    void try_map_file(param_type p);
+    void map_file(param_type& p);
+    bool unmap_file();
+    void clear(bool error);
+    void cleanup_and_throw(const char* msg);
+    param_type     params_;
+    char*          data_;
+    stream_offset  size_;
+    file_handle    handle_;
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    file_handle    mapped_handle_;
+#endif
+    bool           error_;
+};
+
+mapped_file_impl::mapped_file_impl() { clear(false); }
+
+mapped_file_impl::~mapped_file_impl() 
+{ try { close(); } catch (...) { } }
+
+void mapped_file_impl::open(param_type p)
+{
+    if (is_open())
+        pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("file already open"));
+    p.normalize();
+    open_file(p);
+    map_file(p);  // May modify p.hint
+    params_ = p;
+}
+
+void mapped_file_impl::close()
+{
+    if (data_ == 0)
+        return;
+    bool error = false;
+    error = !unmap_file() || error;
+    error = 
+        #ifdef BOOST_IOSTREAMS_WINDOWS
+            !::CloseHandle(handle_) 
+        #else
+            ::close(handle_) != 0 
+        #endif
+            || error;
+    clear(error);
+    if (error)
+        throw_system_failure("failed closing mapped file");
+}
+
+void mapped_file_impl::resize(stream_offset new_size)
+{
+    if (!is_open())
+        pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("file is closed"));
+    if (flags() & mapped_file::priv)
+        pdalboost::throw_exception(
+            BOOST_IOSTREAMS_FAILURE("can't resize private mapped file")
+        );
+    if (!(flags() & mapped_file::readwrite))
+        pdalboost::throw_exception(
+            BOOST_IOSTREAMS_FAILURE("can't resize readonly mapped file")
+        );
+    if (params_.offset >= new_size)
+        pdalboost::throw_exception(
+            BOOST_IOSTREAMS_FAILURE("can't resize below mapped offset")
+        );
+    if (!unmap_file())
+        cleanup_and_throw("failed unmapping file");
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    stream_offset offset = ::SetFilePointer(handle_, 0, NULL, FILE_CURRENT);
+    if (offset == INVALID_SET_FILE_POINTER && ::GetLastError() != NO_ERROR)
+         cleanup_and_throw("failed querying file pointer");
+    LONG sizehigh = (new_size >> (sizeof(LONG) * 8));
+    LONG sizelow = (new_size & 0xffffffff);
+    DWORD result = ::SetFilePointer(handle_, sizelow, &sizehigh, FILE_BEGIN);
+    if ((result == INVALID_SET_FILE_POINTER && ::GetLastError() != NO_ERROR)
+        || !::SetEndOfFile(handle_))
+        cleanup_and_throw("failed resizing mapped file");
+    sizehigh = (offset >> (sizeof(LONG) * 8));
+    sizelow = (offset & 0xffffffff);
+    ::SetFilePointer(handle_, sizelow, &sizehigh, FILE_BEGIN);
+#else
+    if (BOOST_IOSTREAMS_FD_TRUNCATE(handle_, new_size) == -1)
+        cleanup_and_throw("failed resizing mapped file");
+#endif
+    size_ = new_size;
+    param_type p(params_);
+    map_file(p);  // May modify p.hint
+    params_ = p;
+}
+
+int mapped_file_impl::alignment()
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    SYSTEM_INFO info;
+    ::GetSystemInfo(&info);
+    return static_cast<int>(info.dwAllocationGranularity);
+#else
+    return static_cast<int>(sysconf(_SC_PAGESIZE));
+#endif
+}
+
+void mapped_file_impl::open_file(param_type p)
+{
+    bool readonly = p.flags != mapped_file::readwrite;
+#ifdef BOOST_IOSTREAMS_WINDOWS
+
+    // Open file
+    DWORD dwDesiredAccess =
+        readonly ?
+            GENERIC_READ :
+            (GENERIC_READ | GENERIC_WRITE);
+    DWORD dwCreationDisposition = (p.new_file_size != 0 && !readonly) ? 
+        CREATE_ALWAYS : 
+        OPEN_EXISTING;
+    DWORD dwFlagsandAttributes =
+        readonly ?
+            FILE_ATTRIBUTE_READONLY :
+            FILE_ATTRIBUTE_TEMPORARY;
+    handle_ = p.path.is_wide() ?
+        ::CreateFileW( 
+            p.path.c_wstr(),
+            dwDesiredAccess,
+            FILE_SHARE_READ,
+            NULL,
+            dwCreationDisposition,
+            dwFlagsandAttributes,
+            NULL ) :
+        ::CreateFileA( 
+            p.path.c_str(),
+            dwDesiredAccess,
+            FILE_SHARE_READ,
+            NULL,
+            dwCreationDisposition,
+            dwFlagsandAttributes,
+            NULL );
+    if (handle_ == INVALID_HANDLE_VALUE)
+        cleanup_and_throw("failed opening file");
+
+    // Set file size
+    if (p.new_file_size != 0 && !readonly) {
+        LONG sizehigh = (p.new_file_size >> (sizeof(LONG) * 8));
+        LONG sizelow = (p.new_file_size & 0xffffffff);
+        DWORD result = ::SetFilePointer(handle_, sizelow, &sizehigh, FILE_BEGIN);
+        if ((result == INVALID_SET_FILE_POINTER && ::GetLastError() != NO_ERROR)
+            || !::SetEndOfFile(handle_))
+            cleanup_and_throw("failed setting file size");
+    }
+
+    // Determine file size. Dynamically locate GetFileSizeEx for compatibility
+    // with old Platform SDK (thanks to Pavel Vozenilik).
+    typedef BOOL (WINAPI *func)(HANDLE, PLARGE_INTEGER);
+    HMODULE hmod = ::GetModuleHandleA("kernel32.dll");
+    func get_size =
+        reinterpret_cast<func>(::GetProcAddress(hmod, "GetFileSizeEx"));
+    if (get_size) {
+        LARGE_INTEGER info;
+        if (get_size(handle_, &info)) {
+            pdalboost::intmax_t size =
+                ( (static_cast<pdalboost::intmax_t>(info.HighPart) << 32) |
+                  info.LowPart );
+            size_ =
+                static_cast<std::size_t>(
+                    p.length != max_length ?
+                        std::min<pdalboost::intmax_t>(p.length, size) :
+                        size
+                );
+        } else {
+            cleanup_and_throw("failed querying file size");
+            return;
+        }
+    } else {
+        DWORD hi;
+        DWORD low;
+        if ( (low = ::GetFileSize(handle_, &hi))
+                 !=
+             INVALID_FILE_SIZE )
+        {
+            pdalboost::intmax_t size =
+                (static_cast<pdalboost::intmax_t>(hi) << 32) | low;
+            size_ =
+                static_cast<std::size_t>(
+                    p.length != max_length ?
+                        std::min<pdalboost::intmax_t>(p.length, size) :
+                        size
+                );
+        } else {
+            cleanup_and_throw("failed querying file size");
+            return;
+        }
+    }
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS
+
+    // Open file
+    int flags = (readonly ? O_RDONLY : O_RDWR);
+    if (p.new_file_size != 0 && !readonly)
+        flags |= (O_CREAT | O_TRUNC);
+    #ifdef _LARGEFILE64_SOURCE
+        flags |= O_LARGEFILE;
+    #endif
+    errno = 0;
+    handle_ = ::open(p.path.c_str(), flags, S_IRWXU);
+    if (errno != 0)
+        cleanup_and_throw("failed opening file");
+
+    //--------------Set file size---------------------------------------------//
+
+    if (p.new_file_size != 0 && !readonly)
+        if (BOOST_IOSTREAMS_FD_TRUNCATE(handle_, p.new_file_size) == -1)
+            cleanup_and_throw("failed setting file size");
+
+    //--------------Determine file size---------------------------------------//
+
+    bool success = true;
+    if (p.length != max_length) {
+        size_ = p.length;
+    } else {
+        struct BOOST_IOSTREAMS_FD_STAT info;
+        success = ::BOOST_IOSTREAMS_FD_FSTAT(handle_, &info) != -1;
+        size_ = info.st_size;
+    }
+    if (!success)
+        cleanup_and_throw("failed querying file size");
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
+}
+
+void mapped_file_impl::try_map_file(param_type p)
+{
+    bool priv = p.flags == mapped_file::priv;
+    bool readonly = p.flags == mapped_file::readonly;
+#ifdef BOOST_IOSTREAMS_WINDOWS
+
+    // Create mapping
+    DWORD protect = priv ? 
+        PAGE_WRITECOPY : 
+        readonly ? 
+            PAGE_READONLY : 
+            PAGE_READWRITE;
+    mapped_handle_ = 
+        ::CreateFileMappingA( 
+            handle_, 
+            NULL,
+            protect,
+            0, 
+            0, 
+            NULL );
+    if (mapped_handle_ == NULL)
+        cleanup_and_throw("failed create mapping");
+
+    // Access data
+    DWORD access = priv ? 
+        FILE_MAP_COPY : 
+        readonly ? 
+            FILE_MAP_READ : 
+            FILE_MAP_WRITE;
+    void* data =
+        ::MapViewOfFileEx( 
+            mapped_handle_,
+            access,
+            (DWORD) (p.offset >> 32),
+            (DWORD) (p.offset & 0xffffffff),
+            size_ != max_length ? size_ : 0, 
+            (LPVOID) p.hint );
+    if (!data)
+        cleanup_and_throw("failed mapping view");
+#else
+    void* data = 
+        ::BOOST_IOSTREAMS_FD_MMAP( 
+            const_cast<char*>(p.hint), 
+            size_,
+            readonly ? PROT_READ : (PROT_READ | PROT_WRITE),
+            priv ? MAP_PRIVATE : MAP_SHARED,
+            handle_, 
+            p.offset );
+    if (data == MAP_FAILED)
+        cleanup_and_throw("failed mapping file");
+#endif
+    data_ = static_cast<char*>(data);
+}
+
+void mapped_file_impl::map_file(param_type& p)
+{
+    try {
+        try_map_file(p);
+    } catch (const std::exception&) {
+        if (p.hint) {
+            p.hint = 0;
+            try_map_file(p);
+        } else {
+            throw;
+        }
+    }
+}
+
+bool mapped_file_impl::unmap_file()
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    bool error = false;
+    error = !::UnmapViewOfFile(data_) || error;
+    error = !::CloseHandle(mapped_handle_) || error;
+    mapped_handle_ = NULL;
+    return !error;
+#else
+    return ::munmap(data_, size_) == 0;
+#endif
+}
+
+void mapped_file_impl::clear(bool error)
+{
+    params_ = param_type();
+    data_ = 0;
+    size_ = 0;
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    handle_ = INVALID_HANDLE_VALUE;
+    mapped_handle_ = NULL;
+#else
+    handle_ = 0;
+#endif
+    error_ = error;
+}
+
+// Called when an error is encountered during the execution of open_file or
+// map_file
+void mapped_file_impl::cleanup_and_throw(const char* msg)
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    DWORD error = GetLastError();
+    if (mapped_handle_ != NULL)
+        ::CloseHandle(mapped_handle_);
+    if (handle_ != INVALID_HANDLE_VALUE)
+        ::CloseHandle(handle_);
+    SetLastError(error);
+#else
+    int error = errno;
+    if (handle_ != 0)
+        ::close(handle_);
+    errno = error;
+#endif
+    clear(true);
+    pdalboost::iostreams::detail::throw_system_failure(msg);
+}
+
+//------------------Implementation of mapped_file_params_base-----------------//
+
+void mapped_file_params_base::normalize()
+{
+    if (mode && flags)
+        pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE(
+            "at most one of 'mode' and 'flags' may be specified"
+        ));
+    if (flags) {
+        switch (flags) {
+        case mapped_file::readonly:
+        case mapped_file::readwrite:
+        case mapped_file::priv:
+            break;
+        default:
+            pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid flags"));
+        }
+    } else {
+        flags = (mode & BOOST_IOS::out) ? 
+            mapped_file::readwrite :
+            mapped_file::readonly;
+        mode = BOOST_IOS::openmode();
+    }
+    if (offset < 0)
+        pdalboost::throw_exception(BOOST_IOSTREAMS_FAILURE("invalid offset"));
+    if (new_file_size < 0)
+        pdalboost::throw_exception(
+            BOOST_IOSTREAMS_FAILURE("invalid new file size")
+        );
+}
+
+} // End namespace detail.
+
+//------------------Implementation of mapped_file_source----------------------//
+
+mapped_file_source::mapped_file_source() 
+    : pimpl_(new impl_type)
+    { }
+
+mapped_file_source::mapped_file_source(const mapped_file_source& other)
+    : pimpl_(other.pimpl_)
+    { }
+
+bool mapped_file_source::is_open() const
+{ return pimpl_->is_open(); }
+
+void mapped_file_source::close() { pimpl_->close(); }
+
+// safe_bool is explicitly qualified below to please msvc 7.1
+mapped_file_source::operator mapped_file_source::safe_bool() const
+{ return pimpl_->error() ? &safe_bool_helper::x : 0; }
+
+bool mapped_file_source::operator!() const
+{ return pimpl_->error(); }
+
+mapped_file_source::mapmode mapped_file_source::flags() const 
+{ return pimpl_->flags(); }
+
+mapped_file_source::size_type mapped_file_source::size() const
+{ return pimpl_->size(); }
+
+const char* mapped_file_source::data() const { return pimpl_->data(); }
+
+const char* mapped_file_source::begin() const { return data(); }
+
+const char* mapped_file_source::end() const { return data() + size(); }
+int mapped_file_source::alignment()
+{ return detail::mapped_file_impl::alignment(); }
+
+void mapped_file_source::init() { pimpl_.reset(new impl_type); }
+
+void mapped_file_source::open_impl(const param_type& p)
+{ pimpl_->open(p); }
+
+//------------------Implementation of mapped_file-----------------------------//
+
+mapped_file::mapped_file(const mapped_file& other)
+    : delegate_(other.delegate_)
+    { }
+
+void mapped_file::resize(stream_offset new_size)
+{ delegate_.pimpl_->resize(new_size); }
+
+//------------------Implementation of mapped_file_sink------------------------//
+
+mapped_file_sink::mapped_file_sink(const mapped_file_sink& other)
+    : mapped_file(static_cast<const mapped_file&>(other))
+    { }
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
diff --git a/vendor/pdalboost/libs/iostreams/src/zlib.cpp b/vendor/pdalboost/libs/iostreams/src/zlib.cpp
new file mode 100644
index 0000000..ea0c95a
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/src/zlib.cpp
@@ -0,0 +1,193 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// To configure Boost to work with zlib, see the 
+// installation instructions here:
+// http://boost.org/libs/iostreams/doc/index.html?path=7
+
+// Define BOOST_IOSTREAMS_SOURCE so that <boost/iostreams/detail/config.hpp> 
+// knows that we are building the library (possibly exporting code), rather 
+// than using it (possibly importing code).
+#define BOOST_IOSTREAMS_SOURCE 
+
+#include <boost/throw_exception.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/filter/zlib.hpp> 
+#include "zlib.h"   // Jean-loup Gailly's and Mark Adler's "zlib.h" header.
+                    // To configure Boost to work with zlib, see the 
+                    // installation instructions here:
+                    // http://boost.org/libs/iostreams/doc/index.html?path=7
+
+namespace pdalboost { namespace iostreams {
+
+namespace zlib {
+
+                    // Compression levels
+
+const int no_compression       = Z_NO_COMPRESSION;
+const int best_speed           = Z_BEST_SPEED;
+const int best_compression     = Z_BEST_COMPRESSION;
+const int default_compression  = Z_DEFAULT_COMPRESSION;
+
+                    // Compression methods
+
+const int deflated             = Z_DEFLATED;
+
+                    // Compression strategies
+
+const int default_strategy     = Z_DEFAULT_STRATEGY;
+const int filtered             = Z_FILTERED;
+const int huffman_only         = Z_HUFFMAN_ONLY;
+
+                    // Status codes
+
+const int okay                 = Z_OK;
+const int stream_end           = Z_STREAM_END;
+const int stream_error         = Z_STREAM_ERROR;
+const int version_error        = Z_VERSION_ERROR;
+const int data_error           = Z_DATA_ERROR;
+const int mem_error            = Z_MEM_ERROR;
+const int buf_error            = Z_BUF_ERROR;
+
+                    // Flush codes
+
+const int finish               = Z_FINISH;
+const int no_flush             = Z_NO_FLUSH;
+const int sync_flush           = Z_SYNC_FLUSH;
+
+                    // Code for current OS
+
+//const int os_code              = OS_CODE;
+
+} // End namespace zlib. 
+
+//------------------Implementation of zlib_error------------------------------//
+                    
+zlib_error::zlib_error(int error) 
+    : BOOST_IOSTREAMS_FAILURE("zlib error"), error_(error) 
+    { }
+
+void zlib_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(int error)
+{
+    switch (error) {
+    case Z_OK: 
+    case Z_STREAM_END: 
+    //case Z_BUF_ERROR: 
+        return;
+    case Z_MEM_ERROR: 
+        pdalboost::throw_exception(std::bad_alloc());
+    default:
+        pdalboost::throw_exception(zlib_error(error));
+        ;
+    }
+}
+
+//------------------Implementation of zlib_base-------------------------------//
+
+namespace detail {
+
+zlib_base::zlib_base()
+    : stream_(new z_stream), calculate_crc_(false), crc_(0), crc_imp_(0)
+    { }
+
+zlib_base::~zlib_base() { delete static_cast<z_stream*>(stream_); }
+
+void zlib_base::before( const char*& src_begin, const char* src_end,
+                        char*& dest_begin, char* dest_end )
+{
+    z_stream* s = static_cast<z_stream*>(stream_);
+    s->next_in = reinterpret_cast<zlib::byte*>(const_cast<char*>(src_begin));
+    s->avail_in = static_cast<zlib::uint>(src_end - src_begin);
+    s->next_out = reinterpret_cast<zlib::byte*>(dest_begin);
+    s->avail_out= static_cast<zlib::uint>(dest_end - dest_begin);
+}
+
+void zlib_base::after(const char*& src_begin, char*& dest_begin, bool compress)
+{
+    z_stream* s = static_cast<z_stream*>(stream_);
+    char* next_in = reinterpret_cast<char*>(s->next_in);
+    char* next_out = reinterpret_cast<char*>(s->next_out);
+    if (calculate_crc_) {
+        const zlib::byte* buf = compress ?
+            reinterpret_cast<const zlib::byte*>(src_begin) :
+            reinterpret_cast<const zlib::byte*>(
+                const_cast<const char*>(dest_begin)
+            );
+        zlib::uint length = compress ?
+            static_cast<zlib::uint>(next_in - src_begin) :
+            static_cast<zlib::uint>(next_out - dest_begin);
+        if (length > 0)
+            crc_ = crc_imp_ = crc32(crc_imp_, buf, length);
+    }
+    total_in_ = s->total_in;
+    total_out_ = s->total_out;
+    src_begin = const_cast<const char*>(next_in);
+    dest_begin = next_out;
+}
+
+int zlib_base::xdeflate(int flush)
+{ 
+    return ::deflate(static_cast<z_stream*>(stream_), flush);
+}
+
+int zlib_base::xinflate(int flush)
+{ 
+    return ::inflate(static_cast<z_stream*>(stream_), flush);
+}
+
+void zlib_base::reset(bool compress, bool realloc)
+{
+    z_stream* s = static_cast<z_stream*>(stream_);
+    // Undiagnosed bug:
+    // deflateReset(), etc., return Z_DATA_ERROR
+    //zlib_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(
+        realloc ?
+            (compress ? deflateReset(s) : inflateReset(s)) :
+            (compress ? deflateEnd(s) : inflateEnd(s))
+                ;
+    //);
+    crc_imp_ = 0;
+}
+
+void zlib_base::do_init
+    ( const zlib_params& p, bool compress, 
+      #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+          zlib::xalloc_func /* alloc */, zlib::xfree_func /* free*/, 
+      #endif
+      void* derived )
+{
+    calculate_crc_ = p.calculate_crc;
+    z_stream* s = static_cast<z_stream*>(stream_);
+
+    // Current interface for customizing memory management 
+    // is non-conforming and has been disabled:
+    //#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+    //    s->zalloc = alloc;
+    //    s->zfree = free;
+    //#else
+        s->zalloc = 0;
+        s->zfree = 0;
+    //#endif
+    s->opaque = derived;
+    int window_bits = p.noheader? -p.window_bits : p.window_bits;
+    zlib_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(
+        compress ?
+            deflateInit2( s, 
+                          p.level,
+                          p.method,
+                          window_bits,
+                          p.mem_level,
+                          p.strategy ) :
+            inflateInit2(s, window_bits)
+    );
+}
+
+} // End namespace detail.
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
diff --git a/vendor/pdalboost/libs/iostreams/test/Jamfile.v2 b/vendor/pdalboost/libs/iostreams/test/Jamfile.v2
new file mode 100644
index 0000000..cf36c8e
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/Jamfile.v2
@@ -0,0 +1,150 @@
+# Boost.Iostreams Library test Jamfile
+
+# (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+# (C) Copyright 2004-2007 Jonathan Turkanis
+# Distributed under the Boost Software License, Version 1.0. (See accompanying 
+# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+# See http://www.boost.org/libs/iostreams for documentation.
+
+import stlport ;
+import modules ;
+
+local NO_BZIP2 = [ modules.peek : NO_BZIP2 ] ;
+local NO_ZLIB = [ modules.peek : NO_ZLIB ] ;
+local LARGE_FILE_TEMP = [ modules.peek : LARGE_FILE_TEMP ] ;
+local LARGE_FILE_KEEP = [ modules.peek : LARGE_FILE_KEEP ] ;
+
+rule test-iostreams ( sources * : requirements * : target-name ? ) {
+    return [
+            run
+                $(sources)
+                /boost/test//pdalboost_unit_test_framework/<link>static
+                /boost/filesystem//pdalboost_filesystem/<link>static
+            : # command
+            : # input files
+            : # build requirements
+                <toolset>msvc:<define>_CRT_SECURE_NO_DEPRECATE
+                <toolset>msvc:<define>_SCL_SECURE_NO_DEPRECATE
+                <toolset>cw-9.3,<os>darwin:<runtime-link>static
+                <define>BOOST_IOSTREAMS_NO_LIB
+                <link>shared:<define>BOOST_IOSTREAMS_DYN_LINK=1
+                $(requirements)
+            : $(target-name)
+        ] ;
+}
+
+rule compile-fail-iostreams ( sources * : requirements * : target-name ? ) {
+    return [
+            compile-fail
+                $(sources)
+                /boost/test//pdalboost_unit_test_framework/<link>static
+                /boost/filesystem//pdalboost_filesystem/<link>static
+            : # build requirements
+                <toolset>msvc:<define>_CRT_SECURE_NO_DEPRECATE
+                <toolset>msvc:<define>_SCL_SECURE_NO_DEPRECATE
+                <toolset>cw-9.3,<os>darwin:<runtime-link>static
+                <define>BOOST_IOSTREAMS_NO_LIB
+                <link>shared:<define>BOOST_IOSTREAMS_DYN_LINK=1
+                $(requirements)
+            : $(target-name)
+        ] ;
+}
+
+
+    local all-tests = 
+          [ test-iostreams array_test.cpp ]
+          [ test-iostreams auto_close_test.cpp ]
+          [ test-iostreams buffer_size_test.cpp ]
+          [ test-iostreams close_test.cpp ]
+          [ test-iostreams 
+                code_converter_test.cpp    
+                detail/utf8_codecvt_facet.cpp ]
+          [ test-iostreams combine_test.cpp ]
+          [ test-iostreams compose_test.cpp ]
+          [ test-iostreams component_access_test.cpp ]
+          [ test-iostreams copy_test.cpp ]
+          [ test-iostreams counter_test.cpp ]
+          [ test-iostreams direct_adapter_test.cpp ]
+          [ test-iostreams example_test.cpp ]
+          [ test-iostreams execute_test.cpp ]
+          [ test-iostreams file_test.cpp ]
+          [ test-iostreams file_descriptor_test.cpp
+                ../build//pdalboost_iostreams ]
+          [ test-iostreams deprecated_file_descriptor_test.cpp
+                ../build//pdalboost_iostreams
+                : <define>BOOST_IOSTREAMS_USE_DEPRECATED ]
+          [ compile-fail-iostreams deprecated_file_descriptor_test.cpp
+                :
+                : deprecated_file_descriptor_fail ]
+          [ test-iostreams filtering_stream_test.cpp ]
+          [ test-iostreams finite_state_filter_test.cpp ]
+          [ test-iostreams flush_test.cpp ]
+          [ test-iostreams 
+                grep_test.cpp     
+                /boost/regex//pdalboost_regex ]
+          [ test-iostreams invert_test.cpp ]
+          [ test-iostreams line_filter_test.cpp ]
+          [ test-iostreams mapped_file_test.cpp 
+                ../build//pdalboost_iostreams ]
+          [ test-iostreams path_test.cpp ]
+          [ test-iostreams newline_test.cpp ]
+          [ test-iostreams null_test.cpp ]
+          [ test-iostreams operation_sequence_test.cpp ]
+          [ test-iostreams pipeline_test.cpp ]
+          [ test-iostreams 
+                regex_filter_test.cpp     
+                /boost/regex//pdalboost_regex ]
+          [ test-iostreams restrict_test.cpp ]
+          [ test-iostreams seekable_file_test.cpp ]
+          [ test-iostreams seekable_filter_test.cpp ]
+          [ test-iostreams sequence_test.cpp ]
+          [ test-iostreams slice_test.cpp ]
+          [ test-iostreams stdio_filter_test.cpp ]
+          [ test-iostreams stream_offset_32bit_test.cpp ]
+          [ test-iostreams stream_offset_64bit_test.cpp ]
+          #[ test-iostreams stream_state_test.cpp ]
+          [ test-iostreams symmetric_filter_test.cpp ]
+          [ test-iostreams tee_test.cpp ]
+          [ test-iostreams wide_stream_test.cpp ]
+          [ test-iostreams windows_pipe_test.cpp
+               ../build//pdalboost_iostreams
+               : <build>no <target-os>windows:<build>yes ]
+          ;  
+
+      if $(LARGE_FILE_KEEP) 
+      {
+          all-tests += 
+              [ test-iostreams 
+                    large_file_test.cpp 
+                    ../src/file_descriptor.cpp
+                    ../src/mapped_file.cpp
+                  : <define>LARGE_FILE_KEEP=$(LARGE_FILE_KEEP)
+                    <link>static ] ;
+      }
+      if $(LARGE_FILE_TEMP)
+      {
+          all-tests += 
+              [ test-iostreams 
+                    large_file_test.cpp 
+                    ../src/file_descriptor.cpp
+                    ../src/mapped_file.cpp
+                  : <define>LARGE_FILE_TEMP=$(LARGE_FILE_TEMP)
+                    <link>static ] ;
+      }
+      if ! $(NO_BZIP2)
+      {     
+          all-tests += [ test-iostreams 
+                    bzip2_test.cpp ../build//pdalboost_iostreams ] ;
+      }
+      if ! $(NO_ZLIB)
+      {              
+          all-tests += 
+              [ test-iostreams 
+                    gzip_test.cpp ../build//pdalboost_iostreams ]
+              [ test-iostreams 
+                    zlib_test.cpp ../build//pdalboost_iostreams ] ;
+      }
+          
+    test-suite "iostreams" : $(all-tests) ;
+    
diff --git a/vendor/pdalboost/libs/iostreams/test/array_test.cpp b/vendor/pdalboost/libs/iostreams/test/array_test.cpp
new file mode 100644
index 0000000..af99424
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/array_test.cpp
@@ -0,0 +1,99 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <boost/iostreams/detail/fstream.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+using pdalboost::unit_test::test_suite;      
+
+void array_test()
+{
+    using namespace std;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file test;
+
+    //--------------stream<array_source>-------------------------------//
+
+    {
+        test_sequence<> seq;
+        stream<array_source> first(&seq[0], &seq[0] + seq.size());
+        ifstream second(test.name().c_str(), BOOST_IOS::in | BOOST_IOS::binary);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from stream<array_source> in chars"
+        );
+    }
+
+    {
+        test_sequence<> seq;
+        stream<array_source> first(&seq[0], &seq[0] + seq.size());
+        ifstream second(test.name().c_str(), BOOST_IOS::in | BOOST_IOS::binary);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from stream<array_source> in chunks"
+        );
+    }
+
+    //--------------stream<array_sink>---------------------------------//
+
+    {
+        vector<char> first(data_reps * data_length(), '?');
+        stream<array_sink> out(&first[0], &first[0] + first.size());
+        write_data_in_chars(out);
+        ifstream second(test.name().c_str(), BOOST_IOS::in | BOOST_IOS::binary);
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed writing to stream<array_sink> in chars"
+        );
+    }
+
+    {
+        vector<char> first(data_reps * data_length(), '?');
+        stream<array_sink> out(&first[0], &first[0] + first.size());
+        write_data_in_chunks(out);
+        ifstream second(test.name().c_str(), BOOST_IOS::in | BOOST_IOS::binary);
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed writing to stream<array_sink> in chunks"
+        );
+    }
+
+    //--------------random access---------------------------------------------//
+
+    {
+        vector<char> first(data_reps * data_length(), '?');
+        stream<pdalboost::iostreams::array> io(&first[0], &first[0] + first.size());
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chars(io),
+            "failed seeking within stream<array>, in chars"
+        );
+    }
+
+    {
+        vector<char> first(data_reps * data_length(), '?');
+        stream<pdalboost::iostreams::array> io(&first[0], &first[0] + first.size());
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chars(io),
+            "failed seeking within stream<array>, in chunks"
+        );
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("array test");
+    test->add(BOOST_TEST_CASE(&array_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/auto_close_test.cpp b/vendor/pdalboost/libs/iostreams/test/auto_close_test.cpp
new file mode 100644
index 0000000..8582585
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/auto_close_test.cpp
@@ -0,0 +1,184 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <cstdio>  // EOF.
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/iostreams/stream.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>  
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;    
+
+class closable_source : public source {
+public:
+    closable_source() : open_(new bool(true)) { }
+    std::streamsize read(char*, std::streamsize) { return 0; }
+    void open() { *open_ = true; }
+    void close() { *open_ = false; }
+    bool is_open() const { return *open_; }
+private:
+    pdalboost::shared_ptr<bool> open_;
+};
+
+class closable_input_filter : public input_filter {
+public:
+    closable_input_filter() : open_(new bool(true)) { }
+
+    template<typename Source> 
+    int get(Source&) { return EOF; }
+
+    void open() { *open_ = true; }
+
+    template<typename Source> 
+    void close(Source&) { *open_ = false; }
+
+    bool is_open() const { return *open_; }
+private:
+    pdalboost::shared_ptr<bool> open_;
+};
+
+void auto_close_source()
+{
+    // Rely on auto_close to close source.
+    closable_source src;
+    {
+        stream<closable_source> in(src);
+        BOOST_CHECK(src.is_open());
+        BOOST_CHECK(in.auto_close());
+    }
+    BOOST_CHECK(!src.is_open());
+
+    // Use close() to close components.
+    src.open();
+    {
+        stream<closable_source> in(src);
+        BOOST_CHECK(src.is_open());
+        BOOST_CHECK(in.auto_close());
+        in.close();
+        BOOST_CHECK(!src.is_open());
+    }
+
+    // Use close() to close components, with auto_close disabled.
+    src.open();
+    {
+        stream<closable_source> in(src);
+        BOOST_CHECK(src.is_open());
+        in.set_auto_close(false);
+        in.close();
+        BOOST_CHECK(!src.is_open());
+    }
+
+    // Disable auto_close.
+    src.open();
+    {
+        stream<closable_source> in(src);
+        BOOST_CHECK(src.is_open());
+        in.set_auto_close(false);
+        BOOST_CHECK(!in.auto_close());
+    }
+    BOOST_CHECK(src.is_open());
+}
+
+void auto_close_filter()
+{
+    closable_source        src;
+    closable_input_filter  flt;
+
+    // Rely on auto_close to close components.
+    {
+        filtering_istream in;
+        in.push(flt);
+        in.push(src);
+        BOOST_CHECK(flt.is_open());
+        BOOST_CHECK(src.is_open());
+        BOOST_CHECK(in.auto_close());
+    }
+    BOOST_CHECK(!flt.is_open());
+    BOOST_CHECK(!src.is_open());
+
+    // Use reset() to close components.
+    flt.open();
+    src.open();
+    {
+        filtering_istream in;
+        in.push(flt);
+        in.push(src);
+        BOOST_CHECK(flt.is_open());
+        BOOST_CHECK(src.is_open());
+        BOOST_CHECK(in.auto_close());
+        in.reset();
+        BOOST_CHECK(!flt.is_open());
+        BOOST_CHECK(!src.is_open());
+    }
+
+    // Use reset() to close components, with auto_close disabled.
+    flt.open();
+    src.open();
+    {
+        filtering_istream in;
+        in.push(flt);
+        in.push(src);
+        BOOST_CHECK(flt.is_open());
+        BOOST_CHECK(src.is_open());
+        in.set_auto_close(false);
+        in.reset();
+        BOOST_CHECK(!flt.is_open());
+        BOOST_CHECK(!src.is_open());
+    }
+
+    // Disable auto_close.
+    flt.open();
+    src.open();
+    {
+        filtering_istream in;
+        in.push(flt);
+        in.push(src);
+        BOOST_CHECK(flt.is_open());
+        BOOST_CHECK(src.is_open());
+        in.set_auto_close(false);
+        BOOST_CHECK(!in.auto_close());
+        in.pop();
+        BOOST_CHECK(flt.is_open());
+        BOOST_CHECK(src.is_open());
+    }
+    BOOST_CHECK(!flt.is_open());
+    BOOST_CHECK(src.is_open());
+
+    // Disable auto_close; disconnect and reconnect resource.
+    flt.open();
+    src.open();
+    {
+        filtering_istream in;
+        in.push(flt);
+        in.push(src);
+        BOOST_CHECK(flt.is_open());
+        BOOST_CHECK(src.is_open());
+        in.set_auto_close(false);
+        BOOST_CHECK(!in.auto_close());
+        in.pop();
+        BOOST_CHECK(flt.is_open());
+        BOOST_CHECK(src.is_open());
+        in.push(src);
+    }
+    BOOST_CHECK(!flt.is_open());
+    BOOST_CHECK(!src.is_open());
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("auto_close test");
+    test->add(BOOST_TEST_CASE(&auto_close_source));
+    test->add(BOOST_TEST_CASE(&auto_close_filter));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/bool_trait_test.cpp b/vendor/pdalboost/libs/iostreams/test/bool_trait_test.cpp
new file mode 100644
index 0000000..0ff4563
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/bool_trait_test.cpp
@@ -0,0 +1,252 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * Tests the boolean type traits defined in boost/iostreams/traits.hpp.
+ *
+ * File:        libs/iostreams/test/bool_trait_test.cpp
+ * Date:        Sun Feb 17 17:52:59 MST 2008
+ * Copyright:   2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ */
+
+#include <fstream>
+#include <sstream>
+#include <boost/iostreams/detail/iostream.hpp>
+#include <boost/iostreams/detail/streambuf/linked_streambuf.hpp>
+#include <boost/iostreams/detail/iostream.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/iostreams/filtering_streambuf.hpp>
+#include <boost/iostreams/stream.hpp>
+#include <boost/iostreams/stream_buffer.hpp>
+#include <boost/iostreams/traits.hpp>
+#include <boost/test/unit_test.hpp>
+
+using namespace pdalboost::iostreams;
+namespace io = pdalboost::iostreams;
+using pdalboost::unit_test::test_suite;
+
+typedef stream<array_source>   array_istream;
+typedef stream<warray_source>  array_wistream;
+typedef stream<array_sink>     array_ostream;
+typedef stream<warray_sink>    array_wostream;
+typedef stream<array>          array_stream;
+typedef stream<warray>         array_wstream;
+typedef stream_buffer<array>   array_streambuf;
+typedef stream_buffer<warray>  array_wstreambuf;
+ 
+typedef io::filtering_stream<seekable>           filtering_iostream;
+typedef io::filtering_stream<seekable, wchar_t>  filtering_wiostream;
+
+typedef io::detail::linked_streambuf<char>     linkedbuf;
+typedef io::detail::linked_streambuf<wchar_t>  wlinkedbuf;
+
+#define BOOST_CHECK_BOOL_TRAIT(trait, type, status) \
+    BOOST_CHECK(trait< type >::value == status)
+    /**/
+
+#define BOOST_CHECK_STREAM_TRAIT( \
+    trait, \
+    istream_, wistream_, ostream_, wostream_, \
+    iostream_, wiostream_, streambuf_, wstreambuf_, \
+    ifstream_, wifstream_, ofstream_, wofstream_, \
+    fstream_, wfstream_, filebuf_, wfilebuf_, \
+    istringstream_, wistringstream_, ostringstream_, wostringstream_, \
+    stringstream_, wstringstream_, stringbuf_, wstringbuf_, \
+    array_istream_, array_wistream_, array_ostream_, array_wostream_, \
+    array_stream_, array_wstream_, array_streambuf_, array_wstreambuf_, \
+    filtering_istream_, filtering_wistream_, \
+    filtering_ostream_, filtering_wostream_, \
+    filtering_iostream_, filtering_wiostream_, \
+    filtering_istreambuf_, filtering_wistreambuf_, \
+    linkedbuf_, wlinkedbuf_ ) \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::istream, istream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::wistream, wistream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::ostream, ostream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::wostream, wostream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::iostream, iostream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::wiostream, wiostream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::streambuf, streambuf_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::wstreambuf, wstreambuf_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::wifstream, wifstream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::ofstream, ofstream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::wofstream, wofstream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::fstream, fstream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::wfstream, wfstream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::filebuf, filebuf_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::wfilebuf, wfilebuf_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::istringstream, istringstream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::wistringstream, wistringstream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::ostringstream, ostringstream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::wostringstream, wostringstream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::stringstream, stringstream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::wstringstream, wstringstream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::stringbuf, stringbuf_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, std::wstringbuf, wstringbuf_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, array_istream, array_istream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, array_wistream, array_wistream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, array_ostream, array_ostream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, array_wostream, array_wostream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, array_stream, array_stream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, array_wstream, array_wstream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, array_streambuf, array_streambuf_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, array_wstreambuf, array_wstreambuf_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_istream, filtering_istream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_wistream, filtering_wistream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_ostream, filtering_ostream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_wostream, filtering_wostream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, filtering_iostream, filtering_iostream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, filtering_wiostream, filtering_wiostream_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_istreambuf, filtering_istreambuf_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, io::filtering_wistreambuf, filtering_wistreambuf_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, linkedbuf, linkedbuf_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, wlinkedbuf, wlinkedbuf_); \
+    BOOST_CHECK_BOOL_TRAIT(trait, io::array, false); \
+    BOOST_CHECK_BOOL_TRAIT(trait, int, false);
+    /**/
+
+void bool_trait_test()
+{
+    // Test is_istream
+    BOOST_CHECK_STREAM_TRAIT(
+        io::is_istream, 
+        true, true, false, false, true, true, false, false,
+        true, true, false, false, true, true, false, false,
+        true, true, false, false, true, true, false, false,
+        true, true, false, false, true, true, false, false,
+        true, true, false, false, true, true, false, false,
+        false, false
+    );
+
+    // Test is_ostream
+    BOOST_CHECK_STREAM_TRAIT(
+        io::is_ostream, 
+        false, false, true, true, true, true, false, false,
+        false, false, true, true, true, true, false, false,
+        false, false, true, true, true, true, false, false,
+        false, false, true, true, true, true, false, false,
+        false, false, true, true, true, true, false, false,
+        false, false
+    );
+
+    // Test is_iostream
+    BOOST_CHECK_STREAM_TRAIT(
+        io::is_iostream, 
+        false, false, false, false, true, true, false, false,
+        false, false, false, false, true, true, false, false,
+        false, false, false, false, true, true, false, false,
+        false, false, false, false, true, true, false, false,
+        false, false, false, false, true, true, false, false,
+        false, false
+    );
+
+    // Test is_streambuf
+    BOOST_CHECK_STREAM_TRAIT(
+        io::is_streambuf, 
+        false, false, false, false, false, false, true, true,
+        false, false, false, false, false, false, true, true,
+        false, false, false, false, false, false, true, true,
+        false, false, false, false, false, false, true, true,
+        false, false, false, false, false, false, true, true,
+        true, true
+    );
+
+    // Test is_std_io
+    BOOST_CHECK_STREAM_TRAIT(
+        io::is_std_io, 
+        true, true, true, true, true, true, true, true,
+        true, true, true, true, true, true, true, true,
+        true, true, true, true, true, true, true, true,
+        true, true, true, true, true, true, true, true,
+        true, true, true, true, true, true, true, true,
+        true, true
+    );
+
+    // Test is_std_file_device
+    BOOST_CHECK_STREAM_TRAIT(
+        io::is_std_file_device, 
+        false, false, false, false, false, false, false, false,
+        true, true, true, true, true, true, true, true,
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        false, false
+    );
+
+    // Test is_std_string_device
+    BOOST_CHECK_STREAM_TRAIT(
+        io::is_std_string_device, 
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        true, true, true, true, true, true, true, true,
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        false, false
+    );
+
+    // Test is_boost_stream
+    BOOST_CHECK_STREAM_TRAIT(
+        io::detail::is_boost_stream, 
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        true, true, true, true, true, true, false, false,
+        false, false, false, false, false, false, false, false,
+        false, false
+    );
+
+    // Test is_boost_stream_buffer
+    BOOST_CHECK_STREAM_TRAIT(
+        io::detail::is_boost_stream_buffer, 
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, true, true,
+        false, false, false, false, false, false, false, false,
+        false, false
+    );
+
+    // Test is_filtering_stream
+    BOOST_CHECK_STREAM_TRAIT(
+        io::detail::is_filtering_stream, 
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        true, true, true, true, true, true, false, false,
+        false, false
+    );
+
+    // Test is_filtering_streambuf
+    BOOST_CHECK_STREAM_TRAIT(
+        io::detail::is_filtering_streambuf, 
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, true, true,
+        false, false
+    );
+
+    // Test is_boost
+    BOOST_CHECK_STREAM_TRAIT(
+        io::detail::is_boost, 
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        false, false, false, false, false, false, false, false,
+        true, true, true, true, true, true, true, true,
+        true, true, true, true, true, true, true, true,
+        false, false
+    );
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("bool trait test");
+    test->add(BOOST_TEST_CASE(&bool_trait_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/buffer_size_test.cpp b/vendor/pdalboost/libs/iostreams/test/buffer_size_test.cpp
new file mode 100644
index 0000000..e485cac
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/buffer_size_test.cpp
@@ -0,0 +1,82 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include "detail/filters.hpp"  // Must come before operations.hpp for VC6.
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/constants.hpp>
+#include <boost/iostreams/device/null.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+
+using namespace std;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;
+
+struct optimally_buffered_filter {
+    typedef char char_type;
+    struct category
+        : input_filter_tag,
+          optimally_buffered_tag
+        { };
+    std::streamsize optimal_buffer_size() const
+    { return default_filter_buffer_size + 1; }
+};
+
+void buffer_size_test()
+{
+    // Test   device buffer sizes.
+
+    BOOST_CHECK_MESSAGE(
+      optimal_buffer_size(null_source()) == default_device_buffer_size,
+      "wrong buffer size for sourcer"
+    );
+    BOOST_CHECK_MESSAGE(
+      optimal_buffer_size(null_sink()) == default_device_buffer_size,
+      "wrong buffer size for sink"
+    );
+
+    // Test   filter buffer sizes.
+
+    BOOST_CHECK_MESSAGE(
+      optimal_buffer_size(toupper_filter()) == default_filter_buffer_size,
+      "wrong buffer size for input filter"
+    );
+    BOOST_CHECK_MESSAGE(
+      optimal_buffer_size(tolower_filter()) == default_filter_buffer_size,
+      "wrong buffer size for output filter"
+    );
+    BOOST_CHECK_MESSAGE(
+      optimal_buffer_size(toupper_multichar_filter())
+          ==
+      default_filter_buffer_size,
+      "wrong buffer size for multi-character input filter"
+    );
+    BOOST_CHECK_MESSAGE(
+      optimal_buffer_size(tolower_multichar_filter())
+          ==
+      default_filter_buffer_size,
+      "wrong buffer size for multi-character output filter"
+    );
+
+    // Test   custom buffer size.
+
+    BOOST_CHECK_MESSAGE(
+      optimal_buffer_size(optimally_buffered_filter())
+          ==
+      optimally_buffered_filter().optimal_buffer_size(),
+      "wrong buffer size for multi-character output filter"
+    );
+}
+
+test_suite* init_unit_test_suite(int, char* [])
+{
+    test_suite* test = BOOST_TEST_SUITE("buffer_size test");
+    test->add(BOOST_TEST_CASE(&buffer_size_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/bzip2_test.cpp b/vendor/pdalboost/libs/iostreams/test/bzip2_test.cpp
new file mode 100644
index 0000000..e62eadf
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/bzip2_test.cpp
@@ -0,0 +1,96 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <string>
+#include <boost/iostreams/filter/bzip2.hpp>
+#include <boost/iostreams/filter/test.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/sequence.hpp"
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;  
+namespace io = pdalboost::iostreams;
+
+struct bzip2_alloc : std::allocator<char> { };
+
+void bzip2_test()
+{
+    text_sequence data;
+    BOOST_CHECK(
+        test_filter_pair( bzip2_compressor(), 
+                          bzip2_decompressor(), 
+                          std::string(data.begin(), data.end()) )
+    );
+    BOOST_CHECK(
+        test_filter_pair( basic_bzip2_compressor<bzip2_alloc>(), 
+                          basic_bzip2_decompressor<bzip2_alloc>(), 
+                          std::string(data.begin(), data.end()) )
+    );
+    BOOST_CHECK(
+        test_filter_pair( bzip2_compressor(), 
+                          bzip2_decompressor(), 
+                          std::string() )
+    );
+    {
+        filtering_istream strm;
+        strm.push( bzip2_compressor() );
+        strm.push( null_source() );
+    }
+    {
+        filtering_istream strm;
+        strm.push( bzip2_decompressor() );
+        strm.push( null_source() );
+    }
+}    
+
+void multiple_member_test()
+{
+    text_sequence      data;
+    std::vector<char>  temp, dest;
+
+    // Write compressed data to temp, twice in succession
+    filtering_ostream out;
+    out.push(bzip2_compressor());
+    out.push(io::back_inserter(temp));
+    io::copy(make_iterator_range(data), out);
+    out.push(io::back_inserter(temp));
+    io::copy(make_iterator_range(data), out);
+
+    // Read compressed data from temp into dest
+    filtering_istream in;
+    in.push(bzip2_decompressor());
+    in.push(array_source(&temp[0], temp.size()));
+    io::copy(in, io::back_inserter(dest));
+
+    // Check that dest consists of two copies of data
+    BOOST_REQUIRE_EQUAL(data.size() * 2, dest.size());
+    BOOST_CHECK(std::equal(data.begin(), data.end(), dest.begin()));
+    BOOST_CHECK(std::equal(data.begin(), data.end(), dest.begin() + dest.size() / 2));
+
+    dest.clear();
+    io::copy(
+        array_source(&temp[0], temp.size()),
+        io::compose(bzip2_decompressor(), io::back_inserter(dest)));
+
+    // Check that dest consists of two copies of data
+    BOOST_REQUIRE_EQUAL(data.size() * 2, dest.size());
+    BOOST_CHECK(std::equal(data.begin(), data.end(), dest.begin()));
+    BOOST_CHECK(std::equal(data.begin(), data.end(), dest.begin() + dest.size() / 2));
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("bzip2 test");
+    test->add(BOOST_TEST_CASE(&bzip2_test));
+    test->add(BOOST_TEST_CASE(&multiple_member_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/close_test.cpp b/vendor/pdalboost/libs/iostreams/test/close_test.cpp
new file mode 100644
index 0000000..d6f7f20
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/close_test.cpp
@@ -0,0 +1,651 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * Verifies that the close() member functions of filters and devices
+ * are called with the correct arguments in the correct order when 
+ * used with chains and streams.
+ *
+ * File:        libs/iostreams/test/close_test.cpp
+ * Date:        Sun Dec 09 16:12:23 MST 2007
+ * Copyright:   2007 CodeRage
+ * Author:      Jonathan Turkanis
+ */
+
+#include <boost/iostreams/chain.hpp>
+#include <boost/iostreams/filtering_streambuf.hpp>
+#include <boost/iostreams/stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>  
+#include "detail/closable.hpp"
+#include "detail/operation_sequence.hpp"
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;
+namespace io = pdalboost::iostreams;
+
+void input_chain_test()
+{
+    // Test input filter and device
+    {
+        operation_sequence          seq;
+        filtering_streambuf<input>  ch;
+
+        // Test chain::pop()
+        ch.push(closable_filter<input>(seq.new_operation(2)));
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test bidirectional filter and device
+    {
+        operation_sequence          seq;
+        filtering_streambuf<input>  ch;
+
+        // Test chain::pop()
+        ch.push(
+            closable_filter<bidirectional>(
+                seq.new_operation(2),
+                seq.new_operation(3)
+            )
+        );
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test seekable filter and device
+    {
+        operation_sequence          seq;
+        filtering_streambuf<input>  ch;
+
+        // Test chain::pop()
+        ch.push(closable_filter<seekable>(seq.new_operation(1)));
+        ch.push(closable_device<seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(closable_device<seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test dual-user filter
+    {
+        operation_sequence          seq;
+        filtering_streambuf<input>  ch;
+        operation                   dummy;
+
+        // Test chain::pop()
+        ch.push(
+            closable_filter<dual_use>(
+                seq.new_operation(2), 
+                dummy
+            )
+        );
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+        
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test direct source
+    {
+        operation_sequence          seq;
+        filtering_streambuf<input>  ch;
+
+        // Test chain::pop()
+        ch.push(closable_filter<input>(seq.new_operation(2)));
+        ch.push(closable_device<direct_input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+        
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<direct_input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(closable_device<direct_input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test direct bidirectional device
+    {
+        operation_sequence          seq;
+        filtering_streambuf<input>  ch;
+
+        // Test chain::pop()
+        ch.push(closable_filter<input>(seq.new_operation(2)));
+        ch.push(
+            closable_device<direct_bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(3)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(
+            closable_device<direct_bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(3)
+            )
+        );
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(
+            closable_device<direct_bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(3)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test direct seekable device
+    {
+        operation_sequence          seq;
+        filtering_streambuf<input>  ch;
+
+        // Test chain::pop()
+        ch.push(closable_filter<input>(seq.new_operation(1)));
+        ch.push(closable_device<direct_seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<direct_seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(closable_device<direct_seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+}
+
+void output_chain_test()
+{
+    // Test output filter and device
+    {
+        operation_sequence           seq;
+        filtering_streambuf<output>  ch;
+
+        // Test chain::pop()
+        ch.push(closable_filter<output>(seq.new_operation(1)));
+        ch.push(closable_device<output>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<output>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(closable_device<output>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test bidirectional filter and device
+    {
+        operation_sequence           seq;
+        filtering_streambuf<output>  ch;
+        
+        // Test chain::pop()
+        ch.push(
+            closable_filter<bidirectional>(
+                seq.new_operation(2),
+                seq.new_operation(3)
+            )
+        );
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test seekable filter and device
+    {
+        operation_sequence           seq;
+        filtering_streambuf<output>  ch;
+
+        // Test chain::pop()
+        ch.push(closable_filter<seekable>(seq.new_operation(1)));
+        ch.push(closable_device<seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(closable_device<seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test dual-user filter
+    {
+        operation_sequence           seq;
+        filtering_streambuf<output>  ch;
+        operation                    dummy;
+
+        // Test chain::pop()
+        ch.push(
+            closable_filter<dual_use>(
+                dummy, 
+                seq.new_operation(1)
+            )
+        );
+        ch.push(closable_device<output>(seq.new_operation(3)));
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<output>(seq.new_operation(3)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(closable_device<output>(seq.new_operation(3)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test direct sink
+    {
+        operation_sequence           seq;
+        filtering_streambuf<output>  ch;
+
+        // Test chain::pop()
+        ch.push(closable_filter<output>(seq.new_operation(1)));
+        ch.push(closable_device<direct_output>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<direct_output>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(closable_device<direct_output>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test direct bidirectional device
+    {
+        operation_sequence           seq;
+        filtering_streambuf<output>  ch;
+
+        // Test chain::pop()
+        ch.push(closable_filter<output>(seq.new_operation(2)));
+        ch.push(
+            closable_device<direct_bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(3)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(
+            closable_device<direct_bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(3)
+            )
+        );
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(
+            closable_device<direct_bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(3)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test direct seekable device
+    {
+        operation_sequence           seq;
+        filtering_streambuf<output>  ch;
+
+        // Test chain::pop()
+        ch.push(closable_filter<output>(seq.new_operation(1)));
+        ch.push(closable_device<direct_seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<direct_seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(closable_device<direct_seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+}
+
+void bidirectional_chain_test()
+{
+    // Test bidirectional filter and device
+    {
+        operation_sequence                  seq;
+        filtering_streambuf<bidirectional>  ch;
+        
+        // Test chain::pop()
+        ch.push(
+            closable_filter<bidirectional>(
+                seq.new_operation(2),
+                seq.new_operation(3)
+            )
+        );
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test direct bidirectional device
+    {
+        operation_sequence                  seq;
+        filtering_streambuf<bidirectional>  ch;
+
+        // Test chain::pop()
+        ch.push(
+            closable_filter<bidirectional>(
+                seq.new_operation(2),
+                seq.new_operation(3)
+            )
+        );
+        ch.push(
+            closable_device<direct_bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(
+            closable_device<direct_bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(
+            closable_device<direct_bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+}
+
+void seekable_chain_test()
+{
+    // Test seekable filter and device
+    {
+        operation_sequence             seq;
+        filtering_streambuf<seekable>  ch;
+
+        // Test chain::pop()
+        ch.push(closable_filter<seekable>(seq.new_operation(1)));
+        ch.push(closable_device<seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(closable_device<seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test direct seekable device
+    {
+        operation_sequence             seq;
+        filtering_streambuf<seekable>  ch;
+
+        // Test chain::pop()
+        ch.push(closable_filter<seekable>(seq.new_operation(1)));
+        ch.push(closable_device<direct_seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.pop());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and io::close()
+        seq.reset();
+        ch.push(closable_device<direct_seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(io::close(ch));
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+
+        // Test filter reuse and chain::reset()
+        seq.reset();
+        ch.push(closable_device<direct_seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+}
+
+void stream_test()
+{
+    // Test source
+    {
+        operation_sequence                seq;
+        stream< closable_device<input> >  str;
+        str.open(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(str.close());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test sink
+    {
+        operation_sequence                 seq;
+        stream< closable_device<output> >  str;
+        str.open(closable_device<output>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(str.close());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test bidirectional device
+    {
+        operation_sequence                        seq;
+        stream< closable_device<bidirectional> >  str;
+        str.open(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(2)
+            )
+        );
+        BOOST_CHECK_NO_THROW(str.close());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test seekable device
+    {
+        operation_sequence                   seq;
+        stream< closable_device<seekable> >  str;
+        str.open(closable_device<seekable>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(str.close());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("execute test");
+    test->add(BOOST_TEST_CASE(&input_chain_test));
+    test->add(BOOST_TEST_CASE(&output_chain_test));
+    test->add(BOOST_TEST_CASE(&bidirectional_chain_test));
+    test->add(BOOST_TEST_CASE(&seekable_chain_test));
+    test->add(BOOST_TEST_CASE(&stream_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/code_converter_test.cpp b/vendor/pdalboost/libs/iostreams/test/code_converter_test.cpp
new file mode 100644
index 0000000..3753c2d
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/code_converter_test.cpp
@@ -0,0 +1,387 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifdef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+# error wide streams not supported on this platform
+#endif
+
+#include <algorithm>         // equal.
+#include <locale>
+#include <string>
+#include <boost/config.hpp>  // BOOST_DEDUCED_TYPENAME.
+#include <boost/iostreams/code_converter.hpp>
+#include <boost/iostreams/copy.hpp>
+#include <boost/iostreams/detail/add_facet.hpp>
+#include <boost/iostreams/device/back_inserter.hpp>
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+#include <boost/iostreams/device/file.hpp>
+#if !defined(__COMO__) || !defined(BOOST_COMO_STRICT)
+# if defined(BOOST_IOSTREAMS_NO_LIB) || defined(BOOST_ALL_NO_LIB)
+#  include "../src/file_descriptor.cpp"
+# else
+#  include <boost/iostreams/device/file_descriptor.hpp>
+# endif
+#endif
+#include <boost/iostreams/stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/closable.hpp"
+#include "detail/operation_sequence.hpp"
+#include "detail/temp_file.hpp"
+
+    // Include codevct facets
+
+#include "detail/null_padded_codecvt.hpp"
+#include "detail/utf8_codecvt_facet.hpp"
+#ifdef BOOST_IOSTREAMS_USE_DINKUM_COREX
+# include <codecvt/8859_1>
+# include <codecvt/8859_10>
+# include <codecvt/8859_13>
+# include <codecvt/8859_14>
+# include <codecvt/8859_15>
+# include <codecvt/8859_16>
+# include <codecvt/8859_2>
+# include <codecvt/8859_3>
+# include <codecvt/8859_4>
+# include <codecvt/8859_5>
+# include <codecvt/8859_6>
+# include <codecvt/8859_7>
+# include <codecvt/8859_8>
+# include <codecvt/8859_9>
+# include <codecvt/baltic>
+# include <codecvt/big5>
+# include <codecvt/cp037>
+# include <codecvt/cp1006>
+# include <codecvt/cp1026>
+# include <codecvt/cp1250>
+# include <codecvt/cp1251>
+# include <codecvt/cp1252>
+# include <codecvt/cp1253>
+# include <codecvt/cp1254>
+# include <codecvt/cp1255>
+# include <codecvt/cp1256>
+# include <codecvt/cp1257>
+# include <codecvt/cp1258>
+# include <codecvt/cp424>
+# include <codecvt/cp437>
+# include <codecvt/cp500>
+# include <codecvt/cp737>
+# include <codecvt/cp775>
+# include <codecvt/cp850>
+# include <codecvt/cp852>
+# include <codecvt/cp855>
+# include <codecvt/cp856>
+# include <codecvt/cp857>
+# include <codecvt/cp860>
+# include <codecvt/cp861>
+# include <codecvt/cp862>
+# include <codecvt/cp863>
+# include <codecvt/cp864>
+# include <codecvt/cp865>
+# include <codecvt/cp866>
+# include <codecvt/cp869>
+# include <codecvt/cp874>
+# include <codecvt/cp875>
+# include <codecvt/cp932>
+# include <codecvt/cp936>
+# include <codecvt/cp949>
+# include <codecvt/cp950>
+# include <codecvt/cyrillic>
+# include <codecvt/ebcdic>
+# include <codecvt/euc>
+# include <codecvt/euc_0208>
+# include <codecvt/gb12345>
+# include <codecvt/gb2312>
+# include <codecvt/greek>
+# include <codecvt/iceland>
+# include <codecvt/jis>
+# include <codecvt/jis_0208>
+# include <codecvt/jis0201>
+# include <codecvt/ksc5601>
+# include <codecvt/latin2>
+# include <codecvt/one_one>
+# include <codecvt/roman>
+# include <codecvt/sjis>
+# include <codecvt/sjis_0208>
+# include <codecvt/turkish>
+# include <codecvt/utf16>
+# include <codecvt/utf8>
+# include <codecvt/utf8_utf16>
+# include <codecvt/xjis>
+#endif // #ifdef BOOST_IOSTREAMS_USE_DINKUM_COREX]
+
+#include <iostream>
+
+using namespace std;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::detail;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;
+namespace io = pdalboost::iostreams;
+
+const int max_length = 30;
+const unsigned int pattern_length = 100;
+const unsigned int pattern_reps = 100;
+
+template<typename Codecvt>
+bool valid_char(typename codecvt_intern<Codecvt>::type c)
+{
+    typedef typename codecvt_state<Codecvt>::type   state_type;
+    typedef typename codecvt_intern<Codecvt>::type  intern_type;
+    Codecvt             cvt;
+    state_type          state = state_type();
+    const intern_type*  nint;
+    char*               next;
+    char                buf[max_length];
+
+    return cvt.out( state, &c, &c + 1, nint,
+                    buf, buf + max_length, next )
+           ==
+           codecvt_base::ok;
+}
+
+template<typename Codecvt>
+basic_string<
+    BOOST_DEDUCED_TYPENAME
+    codecvt_intern<Codecvt>::type
+>
+test_string()
+{
+    typedef typename codecvt_intern<Codecvt>::type intern_type;
+    std::basic_string<intern_type> pattern, result;
+    for (intern_type c = 255; pattern.size() < pattern_length; --c)
+        if (valid_char<Codecvt>(c))
+            pattern += c;
+    result.reserve(pattern.size() * pattern_reps);
+    for (unsigned int w = 0; w < pattern_reps; ++w)
+        result += pattern;
+    return result;
+}
+
+// Como can't compile file_descriptor.cpp in strict mode; this failure
+// is detected by file_descriptor_test.cpp.
+#if !defined(__COMO__) || !defined(BOOST_COMO_STRICT)
+    typedef io::file_descriptor_source  classic_file_source;
+    typedef io::file_descriptor_sink    classic_file_sink;
+#else
+    struct classic_file_source : io::source {
+        classic_file_source(const std::string& path)
+            : file_(new filebuf)
+        {
+            file_->pubimbue(locale::classic());
+            file_->open(path.c_str(), BOOST_IOS::in | BOOST_IOS::binary);
+        }
+        streamsize read(char* s, streamsize n) { return file_->sgetn(s, n); }
+        pdalboost::shared_ptr<filebuf> file_;
+    };
+
+    struct classic_file_sink : io::sink  {
+        classic_file_sink(const std::string& path)
+            : file_(new filebuf)
+        {
+            file_->pubimbue(locale::classic());
+            file_->open(path.c_str(), BOOST_IOS::out | BOOST_IOS::binary);
+        }
+        streamsize write(const char* s, streamsize n) { return file_->sputn(s, n); }
+        pdalboost::shared_ptr<filebuf> file_;
+    };
+#endif
+
+template<typename Codecvt>
+bool codecvt_test1()
+{
+    typedef basic_string<
+                BOOST_DEDUCED_TYPENAME
+                codecvt_intern<Codecvt>::type
+            >                                             string_type;
+    typedef code_converter<classic_file_source, Codecvt>  wide_file_source;
+    typedef code_converter<classic_file_sink, Codecvt>    wide_file_sink;
+
+    BOOST_CHECK(Codecvt().max_length() <= max_length);
+    temp_file                 temp;
+    string_type               test = test_string<Codecvt>();
+    stream<wide_file_sink>    out(temp.name());
+    out.write(test.data(), static_cast<streamsize>(test.size()));
+    out.close();
+
+    stream<wide_file_source>  in(temp.name());
+    string_type               test2;
+    io::copy(in, io::back_inserter(test2));
+
+    return test == test2;
+}
+
+template<typename Codecvt>
+bool codecvt_test2()
+{
+    typedef basic_string<
+                BOOST_DEDUCED_TYPENAME
+                codecvt_intern<Codecvt>::type
+            >                                    string_type;
+    typedef code_converter<classic_file_source>  wide_file_source;
+    typedef code_converter<classic_file_sink>    wide_file_sink;
+
+    // Set global locale.
+    locale loc = add_facet(locale(), new Codecvt);
+    locale::global(loc);
+
+    temp_file                 temp;
+    string_type               test = test_string<Codecvt>();
+    stream<wide_file_sink>    out(temp.name());
+    out.write(test.data(), static_cast<streamsize>(test.size()));
+    out.close();
+
+    stream<wide_file_source>  in(temp.name());
+    string_type               test2;
+    io::copy(in, io::back_inserter(test2));
+
+    return test == test2;
+}
+
+template<typename Codecvt>
+bool codecvt_test()
+{
+    return codecvt_test1<Codecvt>() && codecvt_test2<Codecvt>();
+}
+
+void code_converter_test()
+{
+    BOOST_CHECK((codecvt_test<utf8_codecvt_facet<wchar_t, char> >()));
+    BOOST_CHECK(codecvt_test<null_padded_codecvt>());
+    BOOST_CHECK(codecvt_test<stateless_null_padded_codecvt>());
+#ifdef BOOST_IOSTREAMS_USE_DINKUM_COREX
+    using namespace Dinkum::conversions;
+    BOOST_CHECK(codecvt_test< codecvt_8859_1<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_8859_10<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_8859_13<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_8859_14<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_8859_15<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_8859_16<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_8859_2<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_8859_3<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_8859_4<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_8859_5<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_8859_6<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_8859_7<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_8859_8<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_8859_9<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_baltic<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_big5<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp037<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp1006<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp1026<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp1250<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp1251<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp1252<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp1253<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp1254<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp1255<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp1256<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp1257<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp1258<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp424<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp437<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp500<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp737<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp775<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp850<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp852<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp855<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp856<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp857<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp860<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp861<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp862<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp863<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp864<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp865<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp866<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp869<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp874<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp875<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp932<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp936<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp949<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cp950<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_cyrillic<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_ebcdic<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_euc<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_euc_0208<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_gb12345<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_gb2312<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_greek<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_iceland<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_jis<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_jis_0208<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_jis0201<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_ksc5601<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_latin2<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_one_one<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_roman<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_sjis<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_sjis_0208<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_turkish<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_utf16<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_utf8<wchar_t> >());
+    BOOST_CHECK(codecvt_test< codecvt_utf8_utf16<wchar_t> >());
+#endif
+}
+
+/* Defer pending further testing
+void close_test()  
+{
+    typedef utf8_codecvt_facet<wchar_t, char> codecvt_type;
+
+    // Test code converter based on a source
+    {
+        operation_sequence  seq;
+        io::wchain<input>   ch;
+        ch.push(
+            code_converter<closable_device<input>, codecvt_type>(
+                seq.new_operation(1)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test code converter based on a sink
+    {
+        operation_sequence   seq;
+        io::wchain<output>    ch;
+        ch.push(
+            code_converter<closable_device<output>, codecvt_type>(
+                seq.new_operation(1)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test code converter based on a bidirectional device
+    {
+        operation_sequence         seq;
+        io::wchain<bidirectional>  ch;
+        ch.push(
+            code_converter<closable_device<bidirectional>, codecvt_type>(
+                seq.new_operation(1), 
+                seq.new_operation(2)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+}*/
+
+test_suite* init_unit_test_suite(int, char* [])
+{
+    test_suite* test = BOOST_TEST_SUITE("code_converter test");
+    test->add(BOOST_TEST_CASE(&code_converter_test));
+    //test->add(BOOST_TEST_CASE(&close_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/combine_test.cpp b/vendor/pdalboost/libs/iostreams/test/combine_test.cpp
new file mode 100644
index 0000000..b27876d
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/combine_test.cpp
@@ -0,0 +1,227 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * Verifies that the close() member functions of filters and devices
+ * are called with the correct arguments in the correct order when 
+ * they are combined using combine().
+ *
+ * File:        libs/iostreams/test/combine_test.cpp
+ * Date:        Sun Jan 06 01:37:37 MST 2008
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ */
+
+#include <boost/iostreams/chain.hpp>
+#include <boost/iostreams/combine.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>  
+#include "detail/closable.hpp"
+#include "detail/operation_sequence.hpp"
+
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;
+namespace io = pdalboost::iostreams;
+
+void combine_test()
+{
+    // Combine a source and a sink
+    {
+        operation_sequence    seq;
+        chain<bidirectional>  ch;
+        ch.push(
+            io::combine(
+                closable_device<input>(seq.new_operation(1)),
+                closable_device<output>(seq.new_operation(2))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Combine two bidirectional devices
+    {
+        operation_sequence    seq;
+        chain<bidirectional>  ch;
+        ch.push(
+            io::combine(
+                closable_device<bidirectional>(
+                    seq.new_operation(1),
+                    seq.new_operation(2)
+                ),
+                closable_device<bidirectional>(
+                    seq.new_operation(3),
+                    seq.new_operation(4)
+                )
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Combine two seekable devices
+    {
+        operation_sequence    seq;
+        chain<bidirectional>  ch;
+        ch.push(
+            io::combine(
+                closable_device<seekable>(seq.new_operation(1)),
+                closable_device<seekable>(seq.new_operation(2))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Combine an input filter and an output filter
+    {
+        operation_sequence    seq;
+        chain<bidirectional>  ch;
+        ch.push(
+            io::combine(
+                closable_filter<input>(seq.new_operation(2)),
+                closable_filter<output>(seq.new_operation(3))
+            )
+        );
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Combine two bidirectional filters
+    {
+        operation_sequence    seq;
+        chain<bidirectional>  ch;
+        ch.push(
+            io::combine(
+                closable_filter<bidirectional>(
+                    seq.new_operation(2),
+                    seq.new_operation(3)
+                ),
+                closable_filter<bidirectional>(
+                    seq.new_operation(4),
+                    seq.new_operation(5)
+                )
+            )
+        );
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(6)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Combine two seekable filters
+    {
+        operation_sequence    seq;
+        chain<bidirectional>  ch;
+        ch.push(
+            io::combine(
+                closable_filter<seekable>(seq.new_operation(2)),
+                closable_filter<seekable>(seq.new_operation(3))
+            )
+        );
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Combine a dual-use filter and an input filter
+    {
+        operation_sequence    seq;
+        chain<bidirectional>  ch;
+        operation             dummy;
+        ch.push(
+            io::combine(
+                closable_filter<input>(seq.new_operation(2)),
+                closable_filter<dual_use>(
+                    dummy,
+                    seq.new_operation(3)
+                )
+            )
+        );
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Combine a dual-use filter and an output filter
+    {
+        operation_sequence    seq;
+        chain<bidirectional>  ch;
+        operation             dummy;
+        ch.push(
+            io::combine(
+                closable_filter<dual_use>(
+                    seq.new_operation(2),
+                    dummy
+                ),
+                closable_filter<output>(seq.new_operation(3))
+            )
+        );
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Combine two dual-use filters
+    {
+        operation_sequence    seq;
+        chain<bidirectional>  ch;
+        operation             dummy;
+        ch.push(
+            io::combine(
+                closable_filter<dual_use>(
+                    seq.new_operation(2),
+                    dummy
+                ),
+                closable_filter<dual_use>(
+                    dummy,
+                    seq.new_operation(3)
+                )
+            )
+        );
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(4)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("combine test");
+    test->add(BOOST_TEST_CASE(&combine_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/component_access_test.cpp b/vendor/pdalboost/libs/iostreams/test/component_access_test.cpp
new file mode 100644
index 0000000..9177a95
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/component_access_test.cpp
@@ -0,0 +1,173 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <stdexcept>  // out_of_range.
+#include <typeinfo>
+#include <utility>    // pair.
+#include <boost/config.hpp>              // BOOST_MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/iostreams/stream.hpp>
+#include <boost/iostreams/stream_buffer.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/constants.hpp"
+#include "detail/filters.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+namespace io = pdalboost::iostreams;
+using pdalboost::unit_test::test_suite;
+
+#define COMPARE_TYPE_ID(x, y) BOOST_IOSTREAMS_COMPARE_TYPE_ID(x, y)
+
+struct indirect_source : io::source {
+    void foo() { }
+    std::streamsize read(char*, std::streamsize) { return 0; }
+};
+
+struct direct_source {
+    typedef char char_type;
+    struct category 
+        : io::input, io::device_tag, io::direct_tag 
+        { };
+    void foo() { }
+    std::pair<char*, char*> input_sequence() 
+    { 
+        return std::pair<char*, char*>(static_cast<char*>(0), static_cast<char*>(0));;
+    }
+};
+
+void compile_time_test()
+{
+    using namespace io;
+
+    stream_buffer<indirect_source> indirect_buf;
+    indirect_buf.open(indirect_source());
+    indirect_buf->foo();
+
+    stream_buffer<direct_source> direct_buf;
+    direct_buf.open(direct_source());
+    direct_buf->foo();
+
+    stream<indirect_source> indirect_stream;
+    indirect_stream.open(indirect_source());
+    indirect_stream->foo();
+
+    stream<direct_source> direct_stream;
+    direct_stream.open(direct_source());
+    direct_stream->foo();
+}
+
+void component_type_test()
+{
+    using namespace std;
+    using namespace io;
+    using namespace pdalboost::iostreams::test;
+
+    temp_file       dest;
+    lowercase_file  lower;
+
+    filtering_ostream out;
+    out.push(tolower_filter());
+    out.push(tolower_multichar_filter());
+    out.push(file_sink(dest.name(), out_mode));
+
+    // Check index 0.
+    BOOST_CHECK(COMPARE_TYPE_ID(
+        out.component_type(0),
+        typeid(tolower_filter)
+    ));
+    BOOST_CHECK(COMPARE_TYPE_ID(
+        BOOST_IOSTREAMS_COMPONENT_TYPE(out, 0), 
+        typeid(tolower_filter)
+    ));
+    BOOST_CHECK_NO_THROW((
+        BOOST_IOSTREAMS_COMPONENT(out, 0, tolower_filter)
+    ));
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+    BOOST_CHECK_NO_THROW((
+        out.component<tolower_filter>(0)
+    ));
+    BOOST_CHECK_NO_THROW((
+        out.component<0, tolower_filter>()
+    ));
+#endif
+
+    // Check index 1.
+    BOOST_CHECK(COMPARE_TYPE_ID(
+        out.component_type(1),
+        typeid(tolower_multichar_filter)
+    ));
+    BOOST_CHECK(COMPARE_TYPE_ID(
+        BOOST_IOSTREAMS_COMPONENT_TYPE(out, 1), 
+        typeid(tolower_multichar_filter)
+    ));
+    BOOST_CHECK_NO_THROW((
+        BOOST_IOSTREAMS_COMPONENT(out, 1, tolower_multichar_filter)
+    ));
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+    BOOST_CHECK_NO_THROW((
+        out.component<tolower_multichar_filter>(1)
+    ));
+    BOOST_CHECK_NO_THROW((
+        out.component<1, tolower_multichar_filter>()
+    ));
+#endif
+
+    // Check index 2.
+    BOOST_CHECK(COMPARE_TYPE_ID(
+        out.component_type(2),
+        typeid(file_sink)
+    ));
+    BOOST_CHECK(COMPARE_TYPE_ID(
+        BOOST_IOSTREAMS_COMPONENT_TYPE(out, 2), 
+        typeid(file_sink)
+    ));
+    BOOST_CHECK_NO_THROW((
+        BOOST_IOSTREAMS_COMPONENT(out, 2, file_sink)
+    ));
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1310)
+    BOOST_CHECK_NO_THROW((
+        out.component<file_sink>(2)
+    ));
+    BOOST_CHECK_NO_THROW((
+        out.component<2, file_sink>()
+    ));
+#endif
+
+    // Check index 3.
+    BOOST_CHECK_THROW(
+        out.component_type(3),
+        std::out_of_range
+    );
+    BOOST_CHECK_THROW(
+        BOOST_IOSTREAMS_COMPONENT_TYPE(out, 3),
+        std::out_of_range
+    );
+
+    // Check components.
+
+    filtering_ostream out2;
+    out2.push(*(BOOST_IOSTREAMS_COMPONENT(out, 0, tolower_filter)));
+    out2.push(*(BOOST_IOSTREAMS_COMPONENT(out, 1, tolower_multichar_filter)));
+    out2.push(*(BOOST_IOSTREAMS_COMPONENT(out, 2, file_sink)));
+    write_data_in_chunks(out);
+    out.reset();
+    BOOST_CHECK_MESSAGE(
+        compare_files(dest.name(), lower.name()),
+        "failed accessing components of chain"
+    );
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("component_type test");
+    test->add(BOOST_TEST_CASE(&component_type_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/compose_test.cpp b/vendor/pdalboost/libs/iostreams/test/compose_test.cpp
new file mode 100644
index 0000000..069ce61
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/compose_test.cpp
@@ -0,0 +1,504 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <cctype>
+#include <boost/iostreams/compose.hpp>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/closable.hpp"
+#include "detail/operation_sequence.hpp"
+#include "detail/filters.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // BCC 5.x.
+
+using namespace std;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;
+namespace io = pdalboost::iostreams;
+
+void read_composite()
+{
+    test_file          src1, src2;
+    filtering_istream  first, second;
+
+    // Test composite device
+    first.push(toupper_filter());
+    first.push(padding_filter('a'));
+    first.push(file_source(src1.name(), in_mode));
+    second.push( compose( toupper_filter(),
+                          compose( padding_filter('a'),
+                                   file_source(src1.name(), in_mode) ) ) );
+    BOOST_CHECK_MESSAGE(
+        compare_streams_in_chunks(first, second),
+        "failed reading from a stdio_filter"
+    );
+
+    // Test composite filter
+    first.reset();
+    second.reset();
+    first.push(toupper_filter());
+    first.push(padding_filter('a'));
+    first.push(file_source(src1.name(), in_mode));
+    second.push( compose( compose( toupper_filter(),
+                                   padding_filter('a') ),
+                          file_source(src1.name(), in_mode) ) );
+    BOOST_CHECK_MESSAGE(
+        compare_streams_in_chunks(first, second),
+        "failed reading from a stdio_filter"
+    );
+}
+
+void write_composite()
+{
+    temp_file          dest1, dest2;
+    filtering_ostream  out1, out2;
+
+    // Test composite device
+    out1.push(tolower_filter());
+    out1.push(padding_filter('a'));
+    out1.push(file_sink(dest1.name(), in_mode));
+    out2.push( compose( tolower_filter(),
+                        compose( padding_filter('a'),
+                                 file_sink(dest2.name(), in_mode) ) ) );
+    write_data_in_chunks(out1);
+    write_data_in_chunks(out2);
+    out1.reset();
+    out2.reset();
+
+    {
+        ifstream first(dest1.name().c_str());
+        ifstream second(dest2.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed writing to a stdio_filter"
+        );
+    }
+
+    // Test composite filter
+    out1.push(tolower_filter());
+    out1.push(padding_filter('a'));
+    out1.push(file_sink(dest1.name(), in_mode));
+    out2.push( compose( compose( tolower_filter(),
+                                 padding_filter('a') ),
+                        file_sink(dest2.name(), in_mode) ) );
+    write_data_in_chunks(out1);
+    write_data_in_chunks(out2);
+    out1.reset();
+    out2.reset();
+
+    {
+        ifstream first(dest1.name().c_str());
+        ifstream second(dest2.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed writing to a stdio_filter"
+        );
+    }
+}
+
+void close_composite_device()
+{
+    // Compose an input filter with a source
+    {
+        operation_sequence  seq;
+        chain<input>        ch;
+        ch.push(
+            io::compose(
+                closable_filter<input>(seq.new_operation(2)),
+                closable_device<input>(seq.new_operation(1))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose a bidirectional filter with a source
+    {
+        operation_sequence  seq;
+        chain<input>        ch;
+        ch.push(
+            io::compose(
+                closable_filter<bidirectional>(
+                    seq.new_operation(2),
+                    seq.new_operation(3)
+                ),
+                closable_device<input>(seq.new_operation(1))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose a seekable filter with a source
+    {
+        operation_sequence  seq;
+        chain<input>        ch;
+        ch.push(
+            io::compose(
+                closable_filter<seekable>(seq.new_operation(2)),
+                closable_device<input>(seq.new_operation(1))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose a dual-use filter with a source
+    {
+        operation_sequence  seq;
+        chain<input>        ch;
+        operation           dummy;
+        ch.push(
+            io::compose(
+                closable_filter<dual_use>(
+                    seq.new_operation(2),
+                    dummy
+                ),
+                closable_device<input>(seq.new_operation(1))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose an output filter with a sink
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            io::compose(
+                closable_filter<output>(seq.new_operation(1)),
+                closable_device<output>(seq.new_operation(2))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose a bidirectional filter with a sink
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            io::compose(
+                closable_filter<bidirectional>(
+                    seq.new_operation(1),
+                    seq.new_operation(2)
+                ),
+                closable_device<output>(seq.new_operation(3))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose a seekable filter with a sink
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            io::compose(
+                closable_filter<seekable>(seq.new_operation(1)),
+                closable_device<output>(seq.new_operation(2))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose a dual-use filter with a sink
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        operation           dummy;
+        ch.push(
+            io::compose(
+                closable_filter<dual_use>(
+                    dummy,
+                    seq.new_operation(1)
+                ),
+                closable_device<output>(seq.new_operation(2))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose a bidirectional filter with a bidirectional device
+    {
+        operation_sequence    seq;
+        chain<bidirectional>  ch;
+        ch.push(
+            io::compose(
+                closable_filter<bidirectional>(
+                    seq.new_operation(2),
+                    seq.new_operation(3)
+                ),
+                closable_device<bidirectional>(
+                    seq.new_operation(1),
+                    seq.new_operation(4)
+                )
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose a seekable filter with a seekable device
+    {
+        operation_sequence  seq;
+        chain<seekable>     ch;
+        ch.push(
+            io::compose(
+                closable_filter<seekable>(seq.new_operation(1)),
+                closable_device<seekable>(seq.new_operation(2))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+}
+
+void close_composite_filter()
+{
+    // Compose two input filters
+    {
+        operation_sequence  seq;
+        chain<input>        ch;
+        ch.push(
+            io::compose(
+                closable_filter<input>(seq.new_operation(3)),
+                closable_filter<input>(seq.new_operation(2))
+            )
+        );
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose a bidirectional filter with an input filter
+    {
+        operation_sequence  seq;
+        chain<input>        ch;
+        ch.push(
+            io::compose(
+                closable_filter<bidirectional>(
+                    seq.new_operation(3),
+                    seq.new_operation(4)
+                ),
+                closable_filter<input>(seq.new_operation(2))
+            )
+        );
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_MESSAGE(seq.is_success(), seq.message());
+    }
+
+    // Compose a seekable filter with an input filter
+    {
+        operation_sequence  seq;
+        chain<input>        ch;
+        ch.push(
+            io::compose(
+                closable_filter<seekable>(seq.new_operation(3)),
+                closable_filter<input>(seq.new_operation(2))
+            )
+        );
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose a dual-use filter with an input filter
+    {
+        operation_sequence  seq;
+        chain<input>        ch;
+        operation           dummy;
+        ch.push(
+            io::compose(
+                closable_filter<dual_use>(
+                    seq.new_operation(3),
+                    dummy
+                ),
+                closable_filter<input>(seq.new_operation(2))
+            )
+        );
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose two output filters
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            io::compose(
+                closable_filter<output>(seq.new_operation(1)),
+                closable_filter<output>(seq.new_operation(2))
+            )
+        );
+        ch.push(closable_device<output>(seq.new_operation(3)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose a bidirectional filter with an output filter
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            io::compose(
+                closable_filter<bidirectional>(
+                    seq.new_operation(1),
+                    seq.new_operation(2)
+                ),
+                closable_filter<output>(seq.new_operation(3))
+            )
+        );
+        ch.push(closable_device<output>(seq.new_operation(4)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose a seekable filter with an output filter
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            io::compose(
+                closable_filter<seekable>(seq.new_operation(1)),
+                closable_filter<output>(seq.new_operation(2))
+            )
+        );
+        ch.push(closable_device<output>(seq.new_operation(3)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose a dual-use filter with an output filter
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        operation           dummy;
+        ch.push(
+            io::compose(
+                closable_filter<dual_use>(
+                    dummy,
+                    seq.new_operation(1)
+                ),
+                closable_filter<output>(seq.new_operation(2))
+            )
+        );
+        ch.push(closable_device<output>(seq.new_operation(3)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose two bidirectional filters
+    {
+        operation_sequence    seq;
+        chain<bidirectional>  ch;
+        ch.push(
+            io::compose(
+                closable_filter<bidirectional>(
+                    seq.new_operation(3),
+                    seq.new_operation(4)
+                ),
+                closable_filter<bidirectional>(
+                    seq.new_operation(2),
+                    seq.new_operation(5)
+                )
+            )
+        );
+        ch.push(
+            closable_device<bidirectional>(
+                seq.new_operation(1),
+                seq.new_operation(6)
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose two seekable filters
+    {
+        operation_sequence  seq;
+        chain<seekable>     ch;
+        ch.push(
+            io::compose(
+                closable_filter<seekable>(seq.new_operation(1)),
+                closable_filter<seekable>(seq.new_operation(2))
+            )
+        );
+        ch.push(closable_device<seekable>(seq.new_operation(3)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose two dual-use filters for input
+    {
+        operation_sequence  seq;
+        chain<input>        ch;
+        operation           dummy;
+        ch.push(
+            io::compose(
+                closable_filter<dual_use>(
+                    seq.new_operation(3),
+                    dummy
+                ),
+                closable_filter<dual_use>(
+                    seq.new_operation(2),
+                    dummy
+                )
+            )
+        );
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Compose two dual-use filters for output
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        operation           dummy;
+        ch.push(
+            io::compose(
+                closable_filter<dual_use>(
+                    dummy,
+                    seq.new_operation(1)
+                ),
+                closable_filter<dual_use>(
+                    dummy,
+                    seq.new_operation(2)
+                )
+            )
+        );
+        ch.push(closable_device<output>(seq.new_operation(3)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* [])
+{
+    test_suite* test = BOOST_TEST_SUITE("line_filter test");
+    test->add(BOOST_TEST_CASE(&read_composite));
+    test->add(BOOST_TEST_CASE(&write_composite));
+    test->add(BOOST_TEST_CASE(&close_composite_device));
+    test->add(BOOST_TEST_CASE(&close_composite_filter));
+    return test;
+}
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // BCC 5.x.
diff --git a/vendor/pdalboost/libs/iostreams/test/copy_test.cpp b/vendor/pdalboost/libs/iostreams/test/copy_test.cpp
new file mode 100644
index 0000000..87cfcf4
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/copy_test.cpp
@@ -0,0 +1,172 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <algorithm>         // Equal
+#include <vector>
+#include <boost/config.hpp>  // MSVC.
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/concepts.hpp>  // sink
+#include <boost/iostreams/copy.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "../example/container_device.hpp"
+#include "detail/sequence.hpp"
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::example;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;
+                    
+//------------------Definition of fixed_sink----------------------------------//
+
+/*class fixed_sink : public sink {
+public:
+    fixed_sink(vector<char>& storage)
+        : storage_(storage), pos_(0)
+        { }
+    std::streamsize write(const char_type* s, std::streamsize n)
+    {
+        streamsize capacity = static_cast<streamsize>(storage_.size() - pos_);
+        streamsize result = (min)(n, capacity);
+        std::copy(s, s + result, storage_.begin() + pos_);
+        pos_ += result;
+        return result;
+    }
+private:
+    fixed_sink operator=(const fixed_sink&);
+    typedef vector<char>::size_type size_type;
+    vector<char>&  storage_;
+    size_type      pos_;
+};*/
+
+//------------------Definition of stream types--------------------------------//
+
+typedef container_source< vector<char> >  vector_source;
+typedef container_sink< vector<char> >    vector_sink;
+typedef stream<vector_source>             vector_istream;
+typedef stream<vector_sink>               vector_ostream;
+//typedef stream<fixed_sink>              fixed_ostream;
+
+//------------------Definition of copy_test-----------------------------------//
+
+void copy_test()
+{
+    // Stream to stream
+    {
+        test_sequence<>  src;
+        vector<char>     dest;
+        vector_istream   first;
+        vector_ostream   second;
+        first.open(vector_source(src));
+        second.open(vector_sink(dest));
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::copy(first, second) ==
+                static_cast<streamsize>(src.size()) &&
+                    src == dest,
+            "failed copying from stream to stream"
+        );
+    }
+
+    // Stream to indirect sink
+    {
+        test_sequence<>  src;
+        vector<char>     dest;
+        vector_istream   in;
+        vector_sink      out(dest);
+        in.open(vector_source(src));
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::copy(in, out) ==
+                static_cast<streamsize>(src.size()) &&
+                    src == dest,
+            "failed copying from stream to indirect sink"
+        );
+    }
+
+    // Indirect source to stream
+    {
+        test_sequence<>  src;
+        vector<char>     dest;
+        vector_source    in(src);
+        vector_ostream   out;
+        out.open(vector_sink(dest));
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::copy(in, out) ==
+                static_cast<streamsize>(src.size()) &&
+                    src == dest,
+            "failed copying from indirect source to stream"
+        );
+    }
+
+    // Indirect source to indirect sink
+    {
+        test_sequence<>  src;
+        vector<char>     dest;
+        vector_source    in(src);
+        vector_sink      out(dest);
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::copy(in, out) ==
+                static_cast<streamsize>(src.size()) &&
+                    src == dest,
+            "failed copying from indirect source to indirect sink"
+        );
+    }
+
+    // Direct source to direct sink
+    {
+        test_sequence<>  src;
+        vector<char>     dest(src.size(), '?');
+        array_source     in(&src[0], &src[0] + src.size());
+        array_sink       out(&dest[0], &dest[0] + dest.size());
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::copy(in, out) ==
+                static_cast<streamsize>(src.size()) &&
+                    src == dest,
+            "failed copying from direct source to direct sink"
+        );
+    }
+
+    // Direct source to indirect sink
+    {
+        test_sequence<>  src;
+        vector<char>     dest;
+        array_source     in(&src[0], &src[0] + src.size());
+        vector_ostream   out(dest);
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::copy(in, out) ==
+                static_cast<streamsize>(src.size()) && 
+                    src == dest,
+            "failed copying from direct source to indirect sink"
+        );
+    }
+
+    // Indirect source to direct sink
+    {
+        test_sequence<>  src;
+        vector<char>     dest(src.size(), '?');
+        vector_istream   in;
+        array_sink       out(&dest[0], &dest[0] + dest.size());
+        in.open(vector_source(src));
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::copy(in, out) ==
+                static_cast<streamsize>(src.size()) && 
+                    src == dest,
+            "failed copying from indirect source to direct sink"
+        );
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("copy test");
+    test->add(BOOST_TEST_CASE(&copy_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/counter_test.cpp b/vendor/pdalboost/libs/iostreams/test/counter_test.cpp
new file mode 100644
index 0000000..29db6e1
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/counter_test.cpp
@@ -0,0 +1,98 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <cctype>
+#include <boost/iostreams/copy.hpp>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/device/null.hpp>
+#include <boost/iostreams/filter/counter.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/constants.hpp"
+#include "detail/filters.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;    
+
+void read_counter()
+{
+    test_file          src;
+    filtering_istream  in;
+    in.push(counter());
+    in.push(padding_filter('a'), 0);
+    in.push(counter());
+    in.push(file_source(src.name(), in_mode));
+
+    counter*  first_counter = BOOST_IOSTREAMS_COMPONENT(in, 0, counter);
+    counter*  second_counter = BOOST_IOSTREAMS_COMPONENT(in, 2, counter);
+    int       first_count = 0;
+    int       second_count = 0;
+    int       line_count = 0;
+    int       reps = data_reps < 50 ? data_reps : 25; // Keep test short.
+    for (int w = 0; w < reps; ++w) {
+        int len = data_length();
+        for (int z = 0; z < len; ++z) {
+            in.get();
+            ++first_count;
+            ++second_count;
+            BOOST_CHECK(first_counter->characters() == first_count);
+            BOOST_CHECK(second_counter->characters() == second_count);
+            in.get();
+            ++first_count;
+            BOOST_CHECK(first_counter->characters() == first_count);
+            BOOST_CHECK(second_counter->characters() == second_count);
+        }
+        ++line_count;
+        BOOST_CHECK(first_counter->lines() == line_count);
+        BOOST_CHECK(first_counter->lines() == line_count);
+    }
+}
+
+void write_counter() 
+{
+    filtering_ostream  out;
+    out.push(counter());
+    out.push(padding_filter('a'), 0);
+    out.push(counter());
+    out.push(null_sink());
+
+    counter*  first_counter = BOOST_IOSTREAMS_COMPONENT(out, 0, counter);
+    counter*  second_counter = BOOST_IOSTREAMS_COMPONENT(out, 2, counter);
+    int       first_count = 0;
+    int       second_count = 0;
+    int       line_count = 0;
+    int       reps = data_reps < 50 ? data_reps : 25; // Keep test short.
+    const char* data = narrow_data();
+    for (int w = 0; w < reps; ++w) {
+        int len = data_length();
+        for (int z = 0; z < len; ++z) {
+            out.put(data[z]);
+            out.flush();
+            ++first_count;
+            second_count += 2;
+            BOOST_CHECK(first_counter->characters() == first_count);
+            BOOST_CHECK(second_counter->characters() == second_count);
+        }
+        ++line_count;
+        BOOST_CHECK(first_counter->lines() == line_count);
+        BOOST_CHECK(first_counter->lines() == line_count);
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("counter test");
+    test->add(BOOST_TEST_CASE(&read_counter));
+    test->add(BOOST_TEST_CASE(&write_counter));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/deprecated_file_descriptor_test.cpp b/vendor/pdalboost/libs/iostreams/test/deprecated_file_descriptor_test.cpp
new file mode 100644
index 0000000..ecde821
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/deprecated_file_descriptor_test.cpp
@@ -0,0 +1,243 @@
+// (C) Copyright 2010 Daniel James
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+#include <boost/iostreams/device/file_descriptor.hpp>
+#include <boost/iostreams/stream.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+#include "detail/file_handle.hpp"
+
+// Test file_descriptor with the depreacted constructors.
+
+namespace pdalboost_ios = pdalboost::iostreams;
+namespace ios_test = pdalboost::iostreams::test;
+
+template <class FileDescriptor>
+void file_handle_test_impl(FileDescriptor*)
+{
+    ios_test::test_file  test1;       
+    ios_test::test_file  test2;       
+                    
+    //--------------Deprecated file descriptor constructor--------------------//
+
+    {
+        pdalboost_ios::detail::file_handle handle = ios_test::open_file_handle(test1.name());
+        {
+            FileDescriptor device1(handle);
+            BOOST_CHECK(device1.handle() == handle);
+        }
+        BOOST_CHECK_HANDLE_OPEN(handle);
+        ios_test::close_file_handle(handle);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle = ios_test::open_file_handle(test1.name());
+        {
+            FileDescriptor device1(handle, false);
+            BOOST_CHECK(device1.handle() == handle);
+        }
+        BOOST_CHECK_HANDLE_OPEN(handle);
+        ios_test::close_file_handle(handle);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle = ios_test::open_file_handle(test1.name());
+        {
+            FileDescriptor device1(handle, true);
+            BOOST_CHECK(device1.handle() == handle);
+        }
+        BOOST_CHECK_HANDLE_CLOSED(handle);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle = ios_test::open_file_handle(test1.name());
+        FileDescriptor device1(handle);
+        BOOST_CHECK(device1.handle() == handle);
+        device1.close();
+        BOOST_CHECK(!device1.is_open());
+        BOOST_CHECK_HANDLE_CLOSED(handle);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle = ios_test::open_file_handle(test1.name());
+        FileDescriptor device1(handle, false);
+        BOOST_CHECK(device1.handle() == handle);
+        device1.close();
+        BOOST_CHECK(!device1.is_open());
+        BOOST_CHECK_HANDLE_CLOSED(handle);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle = ios_test::open_file_handle(test1.name());
+        FileDescriptor device1(handle, true);
+        BOOST_CHECK(device1.handle() == handle);
+        device1.close();
+        BOOST_CHECK(!device1.is_open());
+        BOOST_CHECK_HANDLE_CLOSED(handle);
+    }
+
+    //--------------Deprecated file descriptor open---------------------------//
+
+    {
+        pdalboost_ios::detail::file_handle handle = ios_test::open_file_handle(test1.name());
+        {
+            FileDescriptor device1;
+            device1.open(handle);
+            BOOST_CHECK(device1.handle() == handle);
+        }
+        BOOST_CHECK_HANDLE_OPEN(handle);
+        ios_test::close_file_handle(handle);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle = ios_test::open_file_handle(test1.name());
+        {
+            FileDescriptor device1;
+            device1.open(handle, false);
+            BOOST_CHECK(device1.handle() == handle);
+        }
+        BOOST_CHECK_HANDLE_OPEN(handle);
+        ios_test::close_file_handle(handle);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle = ios_test::open_file_handle(test1.name());
+        {
+            FileDescriptor device1;
+            device1.open(handle, true);
+            BOOST_CHECK(device1.handle() == handle);
+        }
+        BOOST_CHECK_HANDLE_CLOSED(handle);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle = ios_test::open_file_handle(test1.name());
+        FileDescriptor device1;
+        device1.open(handle);
+        BOOST_CHECK(device1.handle() == handle);
+        device1.close();
+        BOOST_CHECK(!device1.is_open());
+        BOOST_CHECK_HANDLE_CLOSED(handle);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle = ios_test::open_file_handle(test1.name());
+        FileDescriptor device1;
+        device1.open(handle, false);
+        BOOST_CHECK(device1.handle() == handle);
+        device1.close();
+        BOOST_CHECK(!device1.is_open());
+        BOOST_CHECK_HANDLE_CLOSED(handle);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle = ios_test::open_file_handle(test1.name());
+        FileDescriptor device1;
+        device1.open(handle, true);
+        BOOST_CHECK(device1.handle() == handle);
+        device1.close();
+        BOOST_CHECK(!device1.is_open());
+        BOOST_CHECK_HANDLE_CLOSED(handle);
+    }
+
+    //--------------Deprecated open with existing descriptor------------------//
+
+    {
+        pdalboost_ios::detail::file_handle handle1 = ios_test::open_file_handle(test1.name());
+        pdalboost_ios::detail::file_handle handle2 = ios_test::open_file_handle(test1.name());
+
+        {
+            FileDescriptor device1(handle1);
+            BOOST_CHECK(device1.handle() == handle1);
+            BOOST_CHECK_HANDLE_OPEN(handle1);
+            BOOST_CHECK_HANDLE_OPEN(handle2);
+            device1.open(handle2);
+            BOOST_CHECK(device1.handle() == handle2);
+            BOOST_CHECK_HANDLE_OPEN(handle1);
+            BOOST_CHECK_HANDLE_OPEN(handle2);
+            device1.close();
+            BOOST_CHECK_HANDLE_OPEN(handle1);
+            BOOST_CHECK_HANDLE_CLOSED(handle2);
+        }
+        BOOST_CHECK_HANDLE_OPEN(handle1);
+        BOOST_CHECK_HANDLE_CLOSED(handle2);
+
+        ios_test::close_file_handle(handle1);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle1 = ios_test::open_file_handle(test1.name());
+        pdalboost_ios::detail::file_handle handle2 = ios_test::open_file_handle(test1.name());
+
+        {
+            FileDescriptor device1(handle1, true);
+            BOOST_CHECK(device1.handle() == handle1);
+            BOOST_CHECK_HANDLE_OPEN(handle1);
+            BOOST_CHECK_HANDLE_OPEN(handle2);
+            device1.open(handle2);
+            BOOST_CHECK(device1.handle() == handle2);
+            BOOST_CHECK_HANDLE_CLOSED(handle1);
+            BOOST_CHECK_HANDLE_OPEN(handle2);
+            device1.close();
+            BOOST_CHECK_HANDLE_CLOSED(handle1);
+            BOOST_CHECK_HANDLE_CLOSED(handle2);
+        }
+        BOOST_CHECK_HANDLE_CLOSED(handle1);
+        BOOST_CHECK_HANDLE_CLOSED(handle2);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle1 = ios_test::open_file_handle(test1.name());
+        pdalboost_ios::detail::file_handle handle2 = ios_test::open_file_handle(test1.name());
+
+        {
+            FileDescriptor device1(handle1, false);
+            BOOST_CHECK(device1.handle() == handle1);
+            BOOST_CHECK_HANDLE_OPEN(handle1);
+            BOOST_CHECK_HANDLE_OPEN(handle2);
+            device1.open(handle2, false);
+            BOOST_CHECK(device1.handle() == handle2);
+            BOOST_CHECK_HANDLE_OPEN(handle1);
+            BOOST_CHECK_HANDLE_OPEN(handle2);
+        }
+        BOOST_CHECK_HANDLE_OPEN(handle1);
+        BOOST_CHECK_HANDLE_OPEN(handle2);
+
+        ios_test::close_file_handle(handle1);
+        ios_test::close_file_handle(handle2);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle1 = ios_test::open_file_handle(test1.name());
+        pdalboost_ios::detail::file_handle handle2 = ios_test::open_file_handle(test1.name());
+
+        {
+            FileDescriptor device1(handle1, true);
+            BOOST_CHECK(device1.handle() == handle1);
+            BOOST_CHECK_HANDLE_OPEN(handle1);
+            BOOST_CHECK_HANDLE_OPEN(handle2);
+            device1.open(handle2, true);
+            BOOST_CHECK(device1.handle() == handle2);
+            BOOST_CHECK_HANDLE_CLOSED(handle1);
+            BOOST_CHECK_HANDLE_OPEN(handle2);
+        }
+        BOOST_CHECK_HANDLE_CLOSED(handle1);
+        BOOST_CHECK_HANDLE_CLOSED(handle2);
+    }
+}
+
+void deprecated_file_descriptor_test()
+{
+    file_handle_test_impl((pdalboost_ios::file_descriptor*) 0);
+    file_handle_test_impl((pdalboost_ios::file_descriptor_sink*) 0);
+    file_handle_test_impl((pdalboost_ios::file_descriptor_source*) 0);
+}
+
+pdalboost::unit_test::test_suite* init_unit_test_suite(int, char* []) 
+{
+    pdalboost::unit_test::test_suite* test = BOOST_TEST_SUITE("deprecated file_descriptor test");
+    test->add(BOOST_TEST_CASE(&deprecated_file_descriptor_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/detail/closable.hpp b/vendor/pdalboost/libs/iostreams/test/detail/closable.hpp
new file mode 100644
index 0000000..3412ff5
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/detail/closable.hpp
@@ -0,0 +1,343 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * Defines a large collection of closable filters and devices that
+ * execute instances of pdalboost::iostreams::test::operation upon
+ * closre(). Used to verify that filters and devices are closed 
+ * correctly by the iostreams library
+ *
+ * File:        libs/iostreams/test/detail/closable.hpp
+ * Date:        Sun Dec 09 16:12:23 MST 2007
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ */
+
+#ifndef BOOST_IOSTREAMS_TEST_CLOSABLE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_CLOSABLE_HPP_INCLUDED
+
+#include <boost/iostreams/categories.hpp>
+#include <boost/iostreams/char_traits.hpp>  // EOF
+#include <boost/iostreams/concepts.hpp>
+#include <boost/iostreams/detail/ios.hpp>
+#include "./operation_sequence.hpp"
+
+namespace pdalboost { namespace iostreams { namespace test {
+
+template<typename Category>
+class closable_device { };
+
+// Source
+template<>
+class closable_device<input> : public source {
+public:
+    closable_device(operation close) : close_(close) { }
+    std::streamsize read(char*, std::streamsize) { return -1; }
+    void close() { close_.execute(); }
+private:
+    operation close_;
+};
+
+// Sink
+template<>
+class closable_device<output> : public sink {
+public:
+    closable_device(operation close) : close_(close) { }
+    std::streamsize write(const char*, std::streamsize) { return 0; }
+    void close() { close_.execute(); }
+private:
+    operation close_;
+};
+
+struct borland_output { };
+
+// Copy of closable_device<output>, for Borland <= 5.8.2
+template<>
+class closable_device<borland_output> : public sink {
+public:
+    closable_device(operation close) : close_(close) { }
+    std::streamsize write(const char*, std::streamsize) { return 0; }
+    void close() { close_.execute(); }
+private:
+    operation close_;
+};
+
+// Bidirectional device
+template<>
+class closable_device<bidirectional> : public device<bidirectional> {
+public:
+    closable_device(operation close_input, operation close_output) 
+        : close_input_(close_input), close_output_(close_output)
+        { }
+    std::streamsize read(char*, std::streamsize) { return -1; }
+    std::streamsize write(const char*, std::streamsize) { return 0; }
+    void close(BOOST_IOS::openmode which) 
+    { 
+        switch (which) {
+        case BOOST_IOS::in:
+            close_input_.execute();
+            break;
+        case BOOST_IOS::out:
+            close_output_.execute();
+            break;
+        default:
+            break;
+        }
+    }
+private:
+    operation close_input_;
+    operation close_output_;
+};
+
+// Seekable device
+template<>
+class closable_device<seekable> : public device<seekable> {
+public:
+    closable_device(operation close) : close_(close) { }
+    std::streamsize read(char*, std::streamsize) { return -1; }
+    std::streamsize write(const char*, std::streamsize) { return 0; }
+    stream_offset seek(stream_offset, BOOST_IOS::seekdir) { return 0; }
+    void close() { close_.execute(); }
+private:
+    operation close_;
+};
+
+struct direct_input 
+    : input, device_tag, closable_tag, direct_tag 
+    { };
+struct direct_output 
+    : output, device_tag, closable_tag, direct_tag 
+    { };
+struct direct_bidirectional 
+    : bidirectional, device_tag, closable_tag, direct_tag 
+    { };
+struct direct_seekable 
+    : seekable, device_tag, closable_tag, direct_tag 
+    { };
+
+// Direct source
+template<>
+class closable_device<direct_input> {
+public:
+    typedef char          char_type;
+    typedef direct_input  category;
+    closable_device(operation close) : close_(close) { }
+    std::pair<char*, char*> input_sequence()
+    { return std::pair<char*, char*>(static_cast<char*>(0), static_cast<char*>(0)); }
+    void close() { close_.execute(); }
+private:
+    operation close_;
+};
+
+// Direct sink
+template<>
+class closable_device<direct_output> {
+public:
+    typedef char           char_type;
+    typedef direct_output  category;
+    closable_device(operation close) : close_(close) { }
+    std::pair<char*, char*> output_sequence()
+    { return std::pair<char*, char*>(static_cast<char*>(0), static_cast<char*>(0)); }
+    void close() { close_.execute(); }
+private:
+    operation close_;
+};
+
+// Direct bidirectional device
+template<>
+class closable_device<direct_bidirectional> {
+public:
+    typedef char                  char_type;
+    typedef direct_bidirectional  category;
+    closable_device(operation close_input, operation close_output) 
+        : close_input_(close_input), close_output_(close_output)
+        { }
+    std::pair<char*, char*> input_sequence()
+    { return std::pair<char*, char*>(static_cast<char*>(0), static_cast<char*>(0)); }
+    std::pair<char*, char*> output_sequence()
+    { return std::pair<char*, char*>(static_cast<char*>(0), static_cast<char*>(0)); }
+    void close(BOOST_IOS::openmode which) 
+    { 
+        switch (which) {
+        case BOOST_IOS::in:
+            close_input_.execute();
+            break;
+        case BOOST_IOS::out:
+            close_output_.execute();
+            break;
+        default:
+            break;
+        }
+    }
+private:
+    operation close_input_;
+    operation close_output_;
+};
+
+// Direct seekable device
+template<>
+class closable_device<direct_seekable> {
+public:
+    typedef char             char_type;
+    typedef direct_seekable  category;
+    closable_device(operation close) : close_(close) { }
+    std::pair<char*, char*> input_sequence()
+    { return std::pair<char*, char*>(static_cast<char*>(0), static_cast<char*>(0)); }
+    std::pair<char*, char*> output_sequence()
+    { return std::pair<char*, char*>(static_cast<char*>(0), static_cast<char*>(0)); }
+    void close() { close_.execute(); }
+private:
+    operation close_;
+};
+
+template<typename Mode>
+class closable_filter { };
+
+// Input filter
+template<>
+class closable_filter<input> : public input_filter {
+public:
+    closable_filter(operation close) : close_(close) { }
+
+    template<typename Source>
+    int get(Source&) { return EOF; }
+
+    template<typename Source>
+    void close(Source&) { close_.execute(); }
+private:
+    operation close_;
+};
+
+// Output filter
+template<>
+class closable_filter<output> : public output_filter {
+public:
+    closable_filter(operation close) : close_(close) { }
+
+    template<typename Sink>
+    bool put(Sink&, char) { return true; }
+
+    template<typename Sink>
+    void close(Sink&) { close_.execute(); }
+private:
+    operation close_;
+};
+
+// Bidirectional filter
+template<>
+class closable_filter<bidirectional> : public filter<bidirectional> {
+public:
+    closable_filter(operation close_input, operation close_output) 
+        : close_input_(close_input), close_output_(close_output)
+        { }
+
+    template<typename Source>
+    int get(Source&) { return EOF; }
+
+    template<typename Sink>
+    bool put(Sink&, char) { return true; }
+
+    template<typename Device>
+    void close(Device&, BOOST_IOS::openmode which) 
+    { 
+        switch (which) {
+        case BOOST_IOS::in:
+            close_input_.execute();
+            break;
+        case BOOST_IOS::out:
+            close_output_.execute();
+            break;
+        default:
+            break;
+        }
+    }
+private:
+    operation close_input_;
+    operation close_output_;
+};
+
+// Seekable filter
+template<>
+class closable_filter<seekable> : public filter<seekable> {
+public:
+    closable_filter(operation close) : close_(close) { }
+    std::streamsize read(char*, std::streamsize) { return -1; }
+
+    template<typename Source>
+    int get(Source&) { return EOF; }
+
+    template<typename Sink>
+    bool put(Sink&, char) { return true; }
+
+    template<typename Device>
+    stream_offset seek(Device&, stream_offset, BOOST_IOS::seekdir)
+    {
+        return 0;
+    }
+
+    template<typename Device>
+    void close(Device&) { close_.execute(); }
+private:
+    operation close_;
+};
+
+// Dual-use filter
+template<>
+class closable_filter<dual_use> {
+public:
+    typedef char char_type;
+    struct category 
+        : filter_tag,
+          dual_use,
+          closable_tag
+        { };
+    closable_filter(operation close_input, operation close_output) 
+        : close_input_(close_input), close_output_(close_output)
+        { }
+
+    template<typename Source>
+    int get(Source&) { return EOF; }
+
+    template<typename Sink>
+    bool put(Sink&, char) { return true; }
+
+    template<typename Device>
+    void close(Device&, BOOST_IOS::openmode which) 
+    { 
+        switch (which) {
+        case BOOST_IOS::in:
+            close_input_.execute();
+            break;
+        case BOOST_IOS::out:
+            close_output_.execute();
+            break;
+        default:
+            break;
+        }
+    }
+private:
+    operation close_input_;
+    operation close_output_;
+};
+
+// Symmetric filter
+class closable_symmetric_filter {
+public:
+    typedef char char_type;
+    closable_symmetric_filter(operation close) : close_(close) { }
+    bool filter( const char*&, const char*,
+                 char*&, char*, bool )
+    {
+        return false;
+    }
+    void close() { close_.execute(); }
+private:
+    operation close_;
+};
+
+} } } // End namespaces test, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_CLOSABLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/detail/constants.hpp b/vendor/pdalboost/libs/iostreams/test/detail/constants.hpp
new file mode 100644
index 0000000..3f76eb1
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/detail/constants.hpp
@@ -0,0 +1,67 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains the definitions of several constants used by the test program.
+
+#ifndef BOOST_IOSTREAMS_TEST_CONSTANTS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_CONSTANTS_HPP_INCLUDED
+
+#include <string.h>
+#include <boost/config.hpp>
+
+namespace pdalboost { namespace iostreams { namespace test {
+
+// Note: openmode could be a class type, so this header must be included
+// by just one TU.
+const BOOST_IOS::openmode in_mode = BOOST_IOS::in | BOOST_IOS::binary;
+const BOOST_IOS::openmode out_mode = BOOST_IOS::out | BOOST_IOS::binary;
+
+// Chunk size for reading or writing in chunks.
+const int chunk_size = 59;       
+
+// Chunk size for reading or writing in chunks.
+const int small_buffer_size = 23;       
+
+// Number of times data is repeated in test files.
+const int data_reps = 300;
+
+namespace detail {
+
+// Returns string which is used to generate test files.
+inline const char* data(char*) 
+{
+    static const char* c =
+        "!\"#$%&'()*+,-./0123456879:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+        "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\n";
+    return c;
+}
+
+// Returns string which is used to generate test files.
+inline const wchar_t* data(wchar_t*) 
+{
+    static const wchar_t* c =
+        L"!\"#$%&'()*+,-./0123456879:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+        L"[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\n";
+    return c;
+}
+
+} // End namespace detail.
+
+inline const char* narrow_data() { return detail::data((char*)0); }
+
+inline const wchar_t* wide_data() { return detail::data((wchar_t*)0); }
+
+// Length of string returned by data().
+inline int data_length() 
+{ 
+    static int len = (int) strlen(narrow_data());
+    return len;
+}
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_CONSTANTS_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/detail/file_handle.hpp b/vendor/pdalboost/libs/iostreams/test/detail/file_handle.hpp
new file mode 100644
index 0000000..6a98414
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/detail/file_handle.hpp
@@ -0,0 +1,108 @@
+// (C) Copyright 2010 Daniel James
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// A few methods for getting and manipulating file handles.
+
+#ifndef BOOST_IOSTREAMS_FILE_HANDLE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_FILE_HANDLE_HPP_INCLUDED
+
+#include <boost/iostreams/detail/file_handle.hpp>
+#include <boost/iostreams/detail/config/rtl.hpp>
+#include <boost/test/test_tools.hpp>
+#include <string>
+
+#ifdef BOOST_IOSTREAMS_WINDOWS
+# include <io.h>         // low-level file i/o.
+# define WINDOWS_LEAN_AND_MEAN
+# include <windows.h>
+#else
+# include <sys/stat.h>
+# include <fcntl.h>
+#endif
+
+namespace pdalboost { namespace iostreams { namespace test {
+
+#ifdef BOOST_IOSTREAMS_WINDOWS
+
+// Windows implementation
+
+pdalboost::iostreams::detail::file_handle open_file_handle(std::string const& name)
+{
+    HANDLE handle = 
+        ::CreateFileA( name.c_str(),
+                       GENERIC_READ | GENERIC_WRITE,
+                       FILE_SHARE_READ | FILE_SHARE_WRITE,
+                       NULL,                   // lpSecurityAttributes
+                       OPEN_EXISTING,
+                       FILE_ATTRIBUTE_NORMAL,
+                       NULL );                 // hTemplateFile
+
+    BOOST_REQUIRE (handle != INVALID_HANDLE_VALUE);
+    return handle;
+}
+
+void close_file_handle(pdalboost::iostreams::detail::file_handle handle)
+{
+    BOOST_REQUIRE(::CloseHandle(handle) == 1);
+}
+
+#define BOOST_CHECK_HANDLE_CLOSED(handle)
+#define BOOST_CHECK_HANDLE_OPEN(handle)
+
+#else // BOOST_IOSTREAMS_WINDOWS
+
+// Non-windows implementation
+
+pdalboost::iostreams::detail::file_handle open_file_handle(std::string const& name)
+{
+    int oflag = O_RDWR;
+
+    #ifdef _LARGEFILE64_SOURCE
+        oflag |= O_LARGEFILE;
+    #endif
+
+    // Calculate pmode argument to open.
+
+    mode_t pmode = S_IRUSR | S_IWUSR |
+                   S_IRGRP | S_IWGRP |
+                   S_IROTH | S_IWOTH;
+
+        // Open file.
+
+    int fd = BOOST_IOSTREAMS_FD_OPEN(name.c_str(), oflag, pmode);
+    BOOST_REQUIRE (fd != -1);
+    
+    return fd;
+}
+
+void close_file_handle(pdalboost::iostreams::detail::file_handle handle)
+{
+    BOOST_REQUIRE(BOOST_IOSTREAMS_FD_CLOSE(handle) != -1);
+}
+
+// This is pretty dubious. First you must make sure that no other
+// operations that could open a descriptor are called before this
+// check, otherwise it's quite likely that a closed descriptor
+// could be used. Secondly, I'm not sure if it's guaranteed that
+// fcntl will know that the descriptor is closed but this seems
+// to work okay, and I can't see any other convenient way to check
+// that a descripter has been closed.
+bool is_handle_open(pdalboost::iostreams::detail::file_handle handle)
+{
+    return ::fcntl(handle, F_GETFD) != -1;
+}
+
+#define BOOST_CHECK_HANDLE_CLOSED(handle) \
+    BOOST_CHECK(!::pdalboost::iostreams::test::is_handle_open(handle))
+#define BOOST_CHECK_HANDLE_OPEN(handle) \
+    BOOST_CHECK(::pdalboost::iostreams::test::is_handle_open(handle))
+
+
+#endif // BOOST_IOSTREAMS_WINDOWS
+
+}}}
+
+#endif // BOOST_IOSTREAMS_FILE_HANDLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/detail/filters.hpp b/vendor/pdalboost/libs/iostreams/test/detail/filters.hpp
new file mode 100644
index 0000000..9edbf6a
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/detail/filters.hpp
@@ -0,0 +1,186 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains the definitions of several constants used by the test program.
+
+#ifndef BOOST_IOSTREAMS_TEST_FILTERS_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_FILTERS_HPP_INCLUDED
+
+#include <boost/config.hpp>                 
+#include <algorithm>                            // min.
+#include <cctype>                               // to_upper, to_lower.
+#include <cstdlib>                              // to_upper, to_lower (VC6).
+#include <cstddef>                              // ptrdiff_t.
+#include <vector>
+#include <boost/iostreams/char_traits.hpp>
+#include <boost/iostreams/concepts.hpp>
+#include <boost/iostreams/constants.hpp>
+#include <boost/iostreams/detail/buffer.hpp>
+#include <boost/iostreams/detail/iostream.hpp>  // seekdir, streamsize.
+#include <boost/iostreams/detail/streambuf.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/iostreams/pipeline.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std { using ::toupper; using ::tolower; }
+#endif
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
+namespace pdalboost { namespace iostreams { namespace test {
+
+struct toupper_filter : public input_filter {
+    template<typename Source>
+    int get(Source& s) 
+    { 
+        int c = pdalboost::iostreams::get(s);
+        return c != EOF && c != WOULD_BLOCK ?
+            std::toupper((unsigned char) c) :
+            c;
+    }
+};
+BOOST_IOSTREAMS_PIPABLE(toupper_filter, 0)
+
+struct tolower_filter : public output_filter {
+    template<typename Sink>
+    bool put(Sink& s, char c)
+    { 
+        return pdalboost::iostreams::put(
+                   s, (char) std::tolower((unsigned char) c)
+               ); 
+    }
+};
+BOOST_IOSTREAMS_PIPABLE(tolower_filter, 0)
+
+struct toupper_multichar_filter : public multichar_input_filter {
+    template<typename Source>
+    std::streamsize read(Source& s, char* buf, std::streamsize n)
+    {
+        std::streamsize result = pdalboost::iostreams::read(s, buf, n);
+        if (result == -1)
+            return -1;
+        for (int z = 0; z < result; ++z)
+            buf[z] = (char) std::toupper((unsigned char) buf[z]);
+        return result;
+    }
+};
+BOOST_IOSTREAMS_PIPABLE(toupper_multichar_filter, 0)
+
+struct tolower_multichar_filter : public multichar_output_filter {
+    template<typename Sink>
+    std::streamsize write(Sink& s, const char* buf, std::streamsize n)
+    {
+        std::streamsize result;
+        for (result = 0; result < n; ++result) {
+            char c = (char) std::tolower((unsigned char) buf[result]);
+            if (!pdalboost::iostreams::put(s, c))
+                break;
+        }
+        return result;
+    }
+};
+BOOST_IOSTREAMS_PIPABLE(tolower_multichar_filter, 0)
+
+struct padding_filter : dual_use_filter {
+    explicit padding_filter(char pad_char) 
+        : pad_char_(pad_char), use_pad_char_(false), eof_(false)
+        { }
+
+    template<typename Source>
+    int get(Source& src) 
+    { 
+        int result;
+        if (use_pad_char_) {
+            result = eof_ ? EOF : pad_char_;
+            use_pad_char_ = false;
+        } else {
+            result = pdalboost::iostreams::get(src);
+            if (result != EOF && result != WOULD_BLOCK)
+                use_pad_char_ = true;
+            eof_ = result == EOF;
+        }
+        return result;
+    }
+
+    template<typename Sink>
+    bool put(Sink& s, char c) 
+    { 
+        if (use_pad_char_) {
+            if (!pdalboost::iostreams::put(s, pad_char_))
+                return false;
+            use_pad_char_ = false;
+        } 
+        if (!pdalboost::iostreams::put(s, c))
+            return false;
+        if (!pdalboost::iostreams::put(s, pad_char_))
+            use_pad_char_ = true;
+        return true;
+    }
+
+    char  pad_char_;
+    bool  use_pad_char_;
+    bool  eof_;
+};
+BOOST_IOSTREAMS_PIPABLE(padding_filter, 0)
+
+struct flushable_output_filter {
+    typedef char char_type;
+    struct category 
+        : output_filter_tag, 
+          flushable_tag
+        { };
+    template<typename Sink>
+    bool put(Sink&, char c) 
+    { 
+        buf_.push_back(c); 
+        return true; 
+    }
+    template<typename Sink>
+    bool flush(Sink& s) 
+    { 
+        if (!buf_.empty()) {
+            pdalboost::iostreams::write(s, &buf_[0], (std::streamsize) buf_.size());
+            buf_.clear();
+        }
+        return true;
+    }
+    std::vector<char> buf_;
+};
+BOOST_IOSTREAMS_PIPABLE(flushable_output_filter, 0)
+
+struct identity_seekable_filter : filter<seekable> {
+    template<typename Source>
+    int get(Source& s) { return pdalboost::iostreams::get(s); }
+
+    template<typename Sink>
+    bool put(Sink& s, char c) { return pdalboost::iostreams::put(s, c); }
+
+    template<typename Device>
+    std::streampos seek(Device& d, stream_offset off, BOOST_IOS::seekdir way)
+    { return pdalboost::iostreams::seek(d, off, way); }
+};
+BOOST_IOSTREAMS_PIPABLE(identity_seekable_filter, 0)
+
+struct identity_seekable_multichar_filter : multichar_filter<seekable> {
+    template<typename Source>
+    std::streamsize read(Source& s, char* buf, std::streamsize n)
+    { return pdalboost::iostreams::read(s, buf, n); }
+    template<typename Sink>
+    std::streamsize write(Sink& s, const char* buf, std::streamsize n)
+    { return pdalboost::iostreams::write(s, buf, n); }
+    template<typename Device>
+    std::streampos seek(Device& d, stream_offset off, BOOST_IOS::seekdir way)
+    { return pdalboost::iostreams::seek(d, off, way); }
+};
+BOOST_IOSTREAMS_PIPABLE(identity_seekable_multichar_filter, 0)
+
+} } } // End namespaces detail, iostreams, boost.
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_FILTERS_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/detail/null_padded_codecvt.hpp b/vendor/pdalboost/libs/iostreams/test/detail/null_padded_codecvt.hpp
new file mode 100644
index 0000000..9aab77f
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/detail/null_padded_codecvt.hpp
@@ -0,0 +1,275 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Contains the definitions of two codecvt facets useful for testing code 
+// conversion. Both represent the "null padded" character encoding described as 
+// follows. A wide character can be represented by the encoding if its value V
+// is within the range of an unsigned char. The first char of the sequence
+// representing V is V % 3 + 1. This is followed by V % 3 null characters, and
+// finally by V itself.
+
+// The first codecvt facet, null_padded_codecvt, is statefull, with state_type
+// equal to int.
+
+// The second codecvt facet, stateless_null_padded_codecvt, is stateless. At 
+// each point in a conversion, no characters are consumed unless there is room 
+// in the output sequence to write an entire multibyte sequence.
+
+#ifndef BOOST_IOSTREAMS_TEST_NULL_PADDED_CODECVT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_NULL_PADDED_CODECVT_HPP_INCLUDED
+
+#include <boost/config.hpp>                          // NO_STDC_NAMESPACE
+#include <boost/iostreams/detail/codecvt_helper.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <cstddef>                                   // mbstate_t.
+#include <locale>                                    // codecvt.
+#include <boost/integer_traits.hpp>                  // const_max.
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+    namespace std { using ::mbstate_t; }
+#endif
+
+namespace pdalboost { namespace iostreams { namespace test {
+
+//------------------Definition of null_padded_codecvt_state-------------------//   
+
+class null_padded_codecvt_state {
+public:
+    null_padded_codecvt_state(int val = 0) : val_(val) { }
+    operator int() const { return val_; }
+    int& val() { return val_; }
+    const int& val() const { return val_; }
+private:
+    int val_;
+};
+
+} } }
+
+BOOST_IOSTREAMS_CODECVT_SPEC(pdalboost::iostreams::test::null_padded_codecvt_state)
+
+namespace pdalboost { namespace iostreams { namespace test {
+
+//------------------Definition of null_padded_codevt--------------------------//            
+
+//
+// state is initially 0. After a single character is consumed, state is set to 
+// the number of characters in the current multibyte sequence and decremented
+// as each character is consumed until its value reaches 0 again.
+//
+class null_padded_codecvt
+    : public iostreams::detail::codecvt_helper<
+                 wchar_t, char, null_padded_codecvt_state
+             >
+{
+public:
+    typedef null_padded_codecvt_state state_type;
+private:
+    std::codecvt_base::result 
+    do_in( state_type& state, const char* first1, const char* last1, 
+           const char*& next1, wchar_t* first2, wchar_t* last2, 
+           wchar_t*& next2 ) const
+    {
+        using namespace std;
+        if (state < 0 || state > 3)
+            return codecvt_base::error;
+        next1 = first1;
+        next2 = first2;
+        while (next2 != last2 && next1 != last1) {
+            while (next1 != last1) {
+                if (state == 0) {
+                    if (*next1 < 1 || *next1 > 3)
+                        return codecvt_base::error;
+                    state = *next1++;
+                } else if (state == 1) {
+                    *next2++ = (unsigned char) *next1++;
+                    state = 0;
+                    break;
+                } else {
+                    if (*next1++ != 0)
+                        return codecvt_base::error;
+                    --state.val();
+                }
+            }
+        }
+        return next2 == last2 ? 
+            codecvt_base::ok : 
+            codecvt_base::partial;
+    }
+
+    std::codecvt_base::result 
+    do_out( state_type& state, const wchar_t* first1, const wchar_t* last1,
+            const wchar_t*& next1, char* first2, char* last2, 
+            char*& next2 ) const
+    {
+        using namespace std;
+        if (state < 0 || state > 3)
+            return codecvt_base::error;
+        next1 = first1;
+        next2 = first2;
+        while (next1 != last1 && next2 != last2) {
+            while (next2 != last2) {
+                if (state == 0) {
+                    if (*next1 > integer_traits<unsigned char>::const_max)
+                        return codecvt_base::noconv;
+                    state = *next1 % 3 + 1;
+                    *next2++ = static_cast<char>(state);
+                } else if (state == 1) {
+                    state = 0;
+                    *next2++ = static_cast<unsigned char>(*next1++);
+                    break;
+                } else {
+                    --state.val();
+                    *next2++ = 0;
+                }
+            }
+        }
+        return next1 == last1 ? 
+            codecvt_base::ok : 
+            codecvt_base::partial;
+    }
+
+    std::codecvt_base::result 
+    do_unshift( state_type& state, 
+                char* /* first2 */, 
+                char* last2, 
+                char*& next2 ) const
+    {
+        using namespace std;
+        next2 = last2;
+        while (state.val()-- > 0)
+            if (next2 != last2)
+                *next2++ = 0;
+            else
+                return codecvt_base::partial;
+        return codecvt_base::ok;
+    }
+
+    bool do_always_noconv() const throw() { return false; }
+
+    int do_max_length() const throw() { return 4; }
+
+    int do_encoding() const throw() { return -1; }
+
+    int do_length( BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER state_type& state, 
+                   const char* first1, const char* last1, 
+                   std::size_t len2 ) const throw()
+    {   // Implementation should follow that of do_in().
+        int st = state;
+        std::size_t result = 0;
+        const char* next1 = first1;
+        while (result < len2 && next1 != last1) {
+            while (next1 != last1) {
+                if (st == 0) {
+                    if (*next1 < 1 || *next1 > 3)
+                        return static_cast<int>(result); // error.
+                    st = *next1++;
+                } else if (st == 1) {
+                    ++result;
+                    st = 0;
+                    break;
+                } else {
+                    if (*next1++ != 0)
+                        return static_cast<int>(result); // error.
+                    --st;
+                }
+            }
+        }
+        return static_cast<int>(result);
+    }
+};
+
+//------------------Definition of stateless_null_padded_codevt----------------//
+
+class stateless_null_padded_codecvt
+    : public std::codecvt<wchar_t, char, std::mbstate_t> 
+{
+    std::codecvt_base::result 
+    do_in( state_type&, const char* first1, const char* last1, 
+           const char*& next1, wchar_t* first2, wchar_t* last2, 
+           wchar_t*& next2 ) const
+    {
+        using namespace std;
+        for ( next1 = first1, next2 = first2;
+              next1 != last1 && next2 != last2; )
+        {
+            int len = (unsigned char) *next1;
+            if (len < 1 || len > 3)
+                return codecvt_base::error;
+            if (last1 - next1 < len + 1)
+                return codecvt_base::partial;
+            ++next1;
+            while (len-- > 1)
+                if (*next1++ != 0)
+                    return codecvt_base::error;
+            *next2++ = (unsigned char) *next1++;
+        }
+        return next1 == last1 && next2 == last2 ? 
+            codecvt_base::ok : 
+            codecvt_base::partial;
+    }
+
+    std::codecvt_base::result 
+    do_out( state_type&, const wchar_t* first1, const wchar_t* last1, 
+            const wchar_t*& next1, char* first2, char* last2, 
+            char*& next2 ) const
+    {
+        using namespace std;
+        for ( next1 = first1, next2 = first2; 
+              next1 != last1 && next2 != last2; ) 
+        {
+            if (*next1 > integer_traits<unsigned char>::const_max)
+                return codecvt_base::noconv;
+            int skip = *next1 % 3 + 2;
+            if (last2 - next2 < skip)
+                return codecvt_base::partial;
+            *next2++ = static_cast<char>(--skip);
+            while (skip-- > 1)
+                *next2++ = 0;
+            *next2++ = (unsigned char) *next1++;
+        }
+        return codecvt_base::ok;
+    }
+
+    std::codecvt_base::result 
+    do_unshift( state_type&, 
+                char* /* first2 */, 
+                char* /* last2 */, 
+                char*& /* next2 */ ) const
+    {  
+        return std::codecvt_base::ok;
+    }
+
+    bool do_always_noconv() const throw() { return false; }
+
+    int do_max_length() const throw() { return 4; }
+
+    int do_encoding() const throw() { return -1; }
+
+    int do_length( BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER state_type&, 
+                   const char* first1, const char* last1,
+                   std::size_t len2 ) const throw()
+    {   // Implementation should follow that of do_in().
+        std::size_t result = 0;
+        for ( const char* next1 = first1;
+              next1 != last1 && result < len2; ++result)
+        {
+            int len = (unsigned char) *next1;
+            if (len < 1 || len > 3 || last1 - next1 < len + 1)
+                return static_cast<int>(result); // error.
+            ++next1;
+            while (len-- > 1)
+                if (*next1++ != 0)
+                    return static_cast<int>(result); // error.
+            ++next1;
+        }
+        return static_cast<int>(result);
+    } 
+};
+
+} } } // End namespaces detail, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_NULL_PADDED_CODECVT_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/detail/operation_sequence.hpp b/vendor/pdalboost/libs/iostreams/test/detail/operation_sequence.hpp
new file mode 100644
index 0000000..9350b75
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/detail/operation_sequence.hpp
@@ -0,0 +1,224 @@
+/*
+ *
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * Defines the classes operation_sequence and operation, in the namespace
+ * pdalboost::iostreams::test, for verifying that all elements of a sequence of 
+ * operations are executed, and that they are executed in the correct order.
+ *
+ * File:        libs/iostreams/test/detail/operation_sequence.hpp
+ * Date:        Mon Dec 10 18:58:19 MST 2007
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ */
+
+#ifndef BOOST_IOSTREAMS_TEST_OPERATION_SEQUENCE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_OPERATION_SEQUENCE_HPP_INCLUDED
+
+#include <boost/config.hpp>  // make sure size_t is in namespace std
+#include <cstddef>
+#include <climits>
+#include <map>
+#include <stdexcept>
+#include <string>
+#include <utility>  // pair
+#include <vector>
+#include <boost/lexical_cast.hpp>
+#include <boost/preprocessor/iteration/local.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/weak_ptr.hpp>
+
+#ifndef BOOST_IOSTREAMS_TEST_MAX_OPERATION_ERROR
+# define BOOST_IOSTREAMS_TEST_MAX_OPERATION_ERROR 20
+#endif
+
+#define BOOST_CHECK_OPERATION_SEQUENCE(seq) \
+    BOOST_CHECK_MESSAGE(seq.is_success(), seq.message()) \
+    /**/
+
+namespace pdalboost { namespace iostreams { namespace test {
+
+// Simple exception class with error code built in to type
+template<int Code>
+struct operation_error { };
+
+class operation_sequence;
+
+// Represent an operation in a sequence of operations to be executed
+class operation {
+public:
+    friend class operation_sequence;
+    operation() : pimpl_() { }
+    void execute();
+private:
+    static void remove_operation(operation_sequence& seq, int id);
+
+    struct impl {
+        impl(operation_sequence& seq, int id, int error_code = -1)
+            : seq(seq), id(id), error_code(error_code)
+            { }
+        ~impl() { remove_operation(seq, id); }
+        impl& operator=(const impl&); // Supress VC warning 4512
+        operation_sequence&  seq;
+        int                  id;
+        int                  error_code;
+    };
+    friend struct impl;
+
+    operation(operation_sequence& seq, int id, int error_code = -1)
+        : pimpl_(new impl(seq, id, error_code))
+        { }
+
+    shared_ptr<impl> pimpl_;
+};
+
+// Represents a sequence of operations to be executed in a particular order
+class operation_sequence {
+public:
+    friend class operation;
+    operation_sequence() { reset(); }
+
+    //
+    // Returns a new operation.
+    // Parameters:
+    //
+    //   id - The operation id, determining the position
+    //        of the new operation in the operation sequence
+    //   error_code - If supplied, indicates that the new
+    //        operation will throw operation_error<error_code>
+    //        when executed. Must be an integer between 0 and
+    //        BOOST_IOSTREAMS_TEST_MAX_OPERATION_ERROR,
+    //        inclusive.
+    // 
+    operation new_operation(int id, int error_code = INT_MAX);
+
+    bool is_success() const { return success_; }
+    bool is_failure() const { return failed_; }
+    std::string message() const;
+    void reset();
+private:
+    void execute(int id);
+    void remove_operation(int id);
+    operation_sequence(const operation_sequence&);
+    operation_sequence& operator=(const operation_sequence&);
+
+    typedef weak_ptr<operation::impl>  ptr_type;      
+    typedef std::map<int, ptr_type>    map_type;
+
+    map_type          operations_;
+    std::vector<int>  log_;
+    std::size_t       total_executed_;
+    int               last_executed_;
+    bool              success_;
+    bool              failed_;
+};
+
+//--------------Implementation of operation-----------------------------------//
+
+void operation::execute()
+{
+    pimpl_->seq.execute(pimpl_->id);
+    switch (pimpl_->error_code) {
+
+    // Implementation with one or more cleanup operations
+    #define BOOST_PP_LOCAL_MACRO(n) \
+    case n: throw operation_error<n>(); \
+    /**/
+
+    #define BOOST_PP_LOCAL_LIMITS (1, BOOST_IOSTREAMS_TEST_MAX_OPERATION_ERROR)
+    #include BOOST_PP_LOCAL_ITERATE()
+    #undef BOOST_PP_LOCAL_MACRO
+
+    default:
+        break;
+    }
+}
+
+inline void operation::remove_operation(operation_sequence& seq, int id)
+{
+    seq.remove_operation(id);
+}
+
+//--------------Implementation of operation_sequence--------------------------//
+
+inline operation operation_sequence::new_operation(int id, int error_code)
+{
+    using namespace std;
+    if ( error_code < 0 || 
+         (error_code > BOOST_IOSTREAMS_TEST_MAX_OPERATION_ERROR &&
+             error_code != INT_MAX) )
+    {
+        throw runtime_error( string("The error code ") + 
+                             lexical_cast<string>(error_code) +
+                             " is out of range" );
+    }
+    if (last_executed_ != INT_MIN)
+        throw runtime_error( "Operations in progress; call reset() "
+                             "before creating more operations" );
+    map_type::const_iterator it = operations_.find(id);
+    if (it != operations_.end())
+        throw runtime_error( string("The operation ") + 
+                             lexical_cast<string>(id) +
+                             " already exists" );
+    operation op(*this, id, error_code);
+    operations_.insert(make_pair(id, ptr_type(op.pimpl_)));
+    return op;
+}
+
+inline std::string operation_sequence::message() const
+{
+    using namespace std;
+    if (success_) 
+        return "success";
+    std::string msg = failed_ ?
+        "operations occurred out of order: " :
+        "operation sequence is incomplete: ";
+    typedef vector<int>::size_type size_type;
+    for (size_type z = 0, n = log_.size(); z < n; ++z) {
+        msg += lexical_cast<string>(log_[z]);
+        if (z < n - 1)
+            msg += ',';
+    }
+    return msg;
+}
+
+inline void operation_sequence::reset() 
+{ 
+    log_.clear();
+    total_executed_ = 0; 
+    last_executed_ = INT_MIN;
+    success_ = false;
+    failed_ = false;
+}
+
+inline void operation_sequence::execute(int id)
+{
+    log_.push_back(id);
+    if (!failed_ && last_executed_ < id) {
+        if (++total_executed_ == operations_.size())
+            success_ = true;
+        last_executed_ = id;
+    } else {
+        success_ = false;
+        failed_ = true;
+    }
+}
+
+inline void operation_sequence::remove_operation(int id)
+{
+    using namespace std;
+    map_type::iterator it = operations_.find(id);
+    if (it == operations_.end())
+        throw runtime_error( string("No such operation: ") + 
+                             lexical_cast<string>(id) );
+    operations_.erase(it);
+}
+
+} } } // End namespace pdalboost::iostreams::test.
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_OPERATION_SEQUENCE_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/detail/sequence.hpp b/vendor/pdalboost/libs/iostreams/test/detail/sequence.hpp
new file mode 100644
index 0000000..212a528
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/detail/sequence.hpp
@@ -0,0 +1,274 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_SEQUENCE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_SEQUENCE_HPP_INCLUDED
+
+#include <algorithm>
+#include <iterator>
+#include <string.h>  // strlen.
+#include <vector>
+#include <boost/iostreams/detail/default_arg.hpp>
+#include "./constants.hpp"
+
+namespace pdalboost { namespace iostreams { namespace test {
+
+template<typename Ch = BOOST_IOSTREAMS_DEFAULT_ARG(char) >
+struct test_sequence : public std::vector<Ch> {
+    test_sequence()
+        {
+            const Ch* buf = test::detail::data((Ch*)0);
+            this->reserve(data_reps * data_length());
+            for (int z = 0; z < data_reps; ++z)
+                std::copy(buf, buf + data_length(), std::back_inserter(*this));
+        }
+};
+
+const char* text = 
+    "The Lord spoke to Moses saying: Speak to the children of "
+    "Israel, and have them take for Me an offering; from every "
+    "person whose heart inspires him to generosity, you shall take "
+    "My offering. And this is the offering that you shall take "
+    "from them: gold, silver, and copper; blue, purple, and "
+    "crimson wool; linen and goat hair; ram skins dyed red, "
+    "tachash skins, and acacia wood; oil for lighting, spices for "
+    "the anointing oil and for the incense; shoham stones and "
+    "filling stones for the ephod and for the choshen. And they "
+    "shall make Me a sanctuary and I will dwell in their midst "
+    "according to all that I show you, the pattern of the Mishkan "
+    "and the pattern of all its vessels; and so shall you do. They "
+    "shall make an ark of acacia wood, two and a half cubits its "
+    "length, a cubit and a half its width, and a cubit and a half "
+    "its height. And you shall overlay it with pure gold; from "
+    "inside and from outside you shall overlay it, and you shall "
+    "make upon it a golden crown all around. And you shall cast "
+    "four golden rings for it, and you shall place them upon its "
+    "four corners, two rings on its one side, and two rings on its "
+    "other side. And you shall make poles of acacia wood and you "
+    "shall overlay them with gold. And you shall bring the poles "
+    "into the rings on the sides of the ark, to carry the ark with "
+    "them. The poles of the ark shall be in the rings; they shall "
+    "not be removed from it. And you shall place into the ark the "
+    "testimony, which I will give you. "
+    "And you shall make an ark cover of pure gold, two and a half "
+    "cubits its length and a cubit and a half its width. And you "
+    "shall make two golden cherubim; you shall make them of "
+    "hammered work, from the two ends of the ark cover. And make "
+    "one cherub from the one end and the other cherub from the "
+    "other end; from the ark cover you shall make the cherubim on "
+    "its two ends. The cherubim shall have their wings spread "
+    "upwards, shielding the ark cover with their wings, with their "
+    "faces toward one another; [turned] toward the ark cover shall "
+    "be the faces of the cherubim. And you shall place the ark "
+    "cover on the ark from above, and into the ark you shall place "
+    "the testimony, which I will give you. I will arrange My "
+    "meetings with you there, and I will speak with you from atop "
+    "the ark cover from between the two cherubim that are upon the "
+    "Ark of the Testimony, all that I will command you unto the "
+    "children of Israel. And you shall make a table of acacia "
+    "wood, two cubits its length, one cubit its width, and a cubit "
+    "and a half its height. And you shall overlay it with pure "
+    "gold, and you shall make for it a golden crown all around. "
+    "And you shall make for it a frame a handbreadth [wide] all "
+    "around, and you shall make a golden crown for its frame all "
+    "around. And you shall make for it four golden rings, and you "
+    "shall place the rings on the four corners that are on its "
+    "four legs. The rings shall be opposite the frame as holders "
+    "for the poles [with which] to carry the table. And you shall "
+    "make the poles of acacia wood, and you shall overlay them "
+    "with gold, and the table shall be carried with them. And you "
+    "shall make its forms, its spoons, its half pipes, and its "
+    "supports with which it will be covered; of pure gold you "
+    "shall make them. And you shall place on the table showbread "
+    "before Me at all times. "
+    "And you shall make a menorah of pure gold. The menorah shall "
+    "be made of hammered work; its base and its stem, its goblets, "
+    "its knobs, and its flowers shall [all] be [one piece] with "
+    "it. And six branches coming out of its sides: three menorah "
+    "branches from its one side and three menorah branches from "
+    "its second side. Three decorated goblets on one branch, a "
+    "knob and a flower, and three decorated goblets on one branch, "
+    "a knob and a flower; so for the six branches that come out of "
+    "the menorah. And on [the stem of] the menorah [shall be] four "
+    "decorated goblets, its knobs and its flowers. And a knob under "
+    "the two branches from it, and a knob under the two branches "
+    "from it, and a knob under the two branches from it; so for the "
+    "six branches that come out of the menorah. Their knobs and "
+    "their branches shall [all] be [one piece] with it; all of it "
+
+    "[shall be] one hammered mass of pure gold. And you shall make "
+    "its lamps seven, and he shall kindle its lamps [so that they] "
+    "shed light toward its face. And its tongs and its scoops "
+    "[shall be] of pure gold. He shall make it of a talent of pure "
+    "gold, with all these implements. Now see and make according "
+    "to their pattern, which you are shown on the mountain. "
+    "And the Mishkan you shall make out of ten curtains "
+    "[consisting] of twisted fine linen, and blue, purple, and "
+    "crimson wool. A cherubim design of the work of a master "
+    "weaver you shall make them. The length of one curtain [shall "
+    "be] twenty eight cubits, and the width of one curtain [shall "
+    "be] four cubits; the same measure for all the curtains. Five "
+    "of these curtains shall be joined to one another, and [the "
+    "other] five curtains shall [also] be joined to one another. "
+    "And you shall make loops of blue wool on the edge of one "
+    "curtain [that is] at the edge of the [first] set, and so "
+    "shall you do on the edge of the outermost curtain of the "
+    "second set. You shall make fifty loops on [the edge of] one "
+    "curtain, and you shall make fifty loops on the edge of the "
+    "curtain in the second set; the loops shall correspond to one "
+    "another. And you shall make fifty golden clasps, and you "
+    "shall fasten the curtains to one another with the clasps; so "
+    "shall the Mishkan become one. And [then] you shall make "
+    "curtains of goat hair for a tent over the Mishkan; you shall "
+    "make eleven curtains. The length of one curtain [shall be] "
+    "thirty cubits, and the width of one curtain four cubits; the "
+    "same measure for the eleven curtains. And you shall join the "
+    "five curtains by themselves, and the [other] six curtains by "
+    "themselves; and you shall fold the sixth curtain before the "
+    "front of the tent. And you shall make fifty loops on the edge "
+    "of one curtain, [which is] at the edge of the [first] set, and "
+    "fifty loops on the edge of the [outermost] curtain of the "
+    "second set. And you shall make fifty copper clasps; you shall "
+    "bring the clasps into the loops, and you shall fasten the "
+    "tent together so that it will become one. And the overhanging "
+    "excess in the curtains of the tent half of the extra curtain "
+    "shall hang over the rear of the Mishkan. And the cubit from "
+    "here and the cubit from there of the excess in the length of "
+    "the curtains of the tent shall hang over the sides of the "
+    "Mishkan from here and from there to cover it. And you shall "
+    "make a covering for the tent of ram skins dyed red and a "
+    "covering of tachash skins above.";
+
+struct text_sequence : public std::vector<char> {
+    text_sequence()
+        {
+            const char* c = 
+                "The Lord spoke to Moses saying: Speak to the children of "
+                "Israel, and have them take for Me an offering; from every "
+                "person whose heart inspires him to generosity, you shall take "
+                "My offering. And this is the offering that you shall take "
+                "from them: gold, silver, and copper; blue, purple, and "
+                "crimson wool; linen and goat hair; ram skins dyed red, "
+                "tachash skins, and acacia wood; oil for lighting, spices for "
+                "the anointing oil and for the incense; shoham stones and "
+                "filling stones for the ephod and for the choshen. And they "
+                "shall make Me a sanctuary and I will dwell in their midst "
+                "according to all that I show you, the pattern of the Mishkan "
+                "and the pattern of all its vessels; and so shall you do. They "
+                "shall make an ark of acacia wood, two and a half cubits its "
+                "length, a cubit and a half its width, and a cubit and a half "
+                "its height. And you shall overlay it with pure gold; from "
+                "inside and from outside you shall overlay it, and you shall "
+                "make upon it a golden crown all around. And you shall cast "
+                "four golden rings for it, and you shall place them upon its "
+                "four corners, two rings on its one side, and two rings on its "
+                "other side. And you shall make poles of acacia wood and you "
+                "shall overlay them with gold. And you shall bring the poles "
+                "into the rings on the sides of the ark, to carry the ark with "
+                "them. The poles of the ark shall be in the rings; they shall "
+                "not be removed from it. And you shall place into the ark the "
+                "testimony, which I will give you. "
+                "And you shall make an ark cover of pure gold, two and a half "
+                "cubits its length and a cubit and a half its width. And you "
+                "shall make two golden cherubim; you shall make them of "
+                "hammered work, from the two ends of the ark cover. And make "
+                "one cherub from the one end and the other cherub from the "
+                "other end; from the ark cover you shall make the cherubim on "
+                "its two ends. The cherubim shall have their wings spread "
+                "upwards, shielding the ark cover with their wings, with their "
+                "faces toward one another; [turned] toward the ark cover shall "
+                "be the faces of the cherubim. And you shall place the ark "
+                "cover on the ark from above, and into the ark you shall place "
+                "the testimony, which I will give you. I will arrange My "
+                "meetings with you there, and I will speak with you from atop "
+                "the ark cover from between the two cherubim that are upon the "
+                "Ark of the Testimony, all that I will command you unto the "
+                "children of Israel. And you shall make a table of acacia "
+                "wood, two cubits its length, one cubit its width, and a cubit "
+                "and a half its height. And you shall overlay it with pure "
+                "gold, and you shall make for it a golden crown all around. "
+                "And you shall make for it a frame a handbreadth [wide] all "
+                "around, and you shall make a golden crown for its frame all "
+                "around. And you shall make for it four golden rings, and you "
+                "shall place the rings on the four corners that are on its "
+                "four legs. The rings shall be opposite the frame as holders "
+                "for the poles [with which] to carry the table. And you shall "
+                "make the poles of acacia wood, and you shall overlay them "
+                "with gold, and the table shall be carried with them. And you "
+                "shall make its forms, its spoons, its half pipes, and its "
+                "supports with which it will be covered; of pure gold you "
+                "shall make them. And you shall place on the table showbread "
+                "before Me at all times. "
+                "And you shall make a menorah of pure gold. The menorah shall "
+                "be made of hammered work; its base and its stem, its goblets, "
+                "its knobs, and its flowers shall [all] be [one piece] with "
+                "it. And six branches coming out of its sides: three menorah "
+                "branches from its one side and three menorah branches from "
+                "its second side. Three decorated goblets on one branch, a "
+                "knob and a flower, and three decorated goblets on one branch, "
+                "a knob and a flower; so for the six branches that come out of "
+                "the menorah. And on [the stem of] the menorah [shall be] four "
+                "decorated goblets, its knobs and its flowers. And a knob under "
+                "the two branches from it, and a knob under the two branches "
+                "from it, and a knob under the two branches from it; so for the "
+                "six branches that come out of the menorah. Their knobs and "
+                "their branches shall [all] be [one piece] with it; all of it "
+
+                "[shall be] one hammered mass of pure gold. And you shall make "
+                "its lamps seven, and he shall kindle its lamps [so that they] "
+                "shed light toward its face. And its tongs and its scoops "
+                "[shall be] of pure gold. He shall make it of a talent of pure "
+                "gold, with all these implements. Now see and make according "
+                "to their pattern, which you are shown on the mountain. "
+                "And the Mishkan you shall make out of ten curtains "
+                "[consisting] of twisted fine linen, and blue, purple, and "
+                "crimson wool. A cherubim design of the work of a master "
+                "weaver you shall make them. The length of one curtain [shall "
+                "be] twenty eight cubits, and the width of one curtain [shall "
+                "be] four cubits; the same measure for all the curtains. Five "
+                "of these curtains shall be joined to one another, and [the "
+                "other] five curtains shall [also] be joined to one another. "
+                "And you shall make loops of blue wool on the edge of one "
+                "curtain [that is] at the edge of the [first] set, and so "
+                "shall you do on the edge of the outermost curtain of the "
+                "second set. You shall make fifty loops on [the edge of] one "
+                "curtain, and you shall make fifty loops on the edge of the "
+                "curtain in the second set; the loops shall correspond to one "
+                "another. And you shall make fifty golden clasps, and you "
+                "shall fasten the curtains to one another with the clasps; so "
+                "shall the Mishkan become one. And [then] you shall make "
+                "curtains of goat hair for a tent over the Mishkan; you shall "
+                "make eleven curtains. The length of one curtain [shall be] "
+                "thirty cubits, and the width of one curtain four cubits; the "
+                "same measure for the eleven curtains. And you shall join the "
+                "five curtains by themselves, and the [other] six curtains by "
+                "themselves; and you shall fold the sixth curtain before the "
+                "front of the tent. And you shall make fifty loops on the edge "
+                "of one curtain, [which is] at the edge of the [first] set, and "
+                "fifty loops on the edge of the [outermost] curtain of the "
+                "second set. And you shall make fifty copper clasps; you shall "
+                "bring the clasps into the loops, and you shall fasten the "
+                "tent together so that it will become one. And the overhanging "
+                "excess in the curtains of the tent half of the extra curtain "
+                "shall hang over the rear of the Mishkan. And the cubit from "
+                "here and the cubit from there of the excess in the length of "
+                "the curtains of the tent shall hang over the sides of the "
+                "Mishkan from here and from there to cover it. And you shall "
+                "make a covering for the tent of ram skins dyed red and a "
+                "covering of tachash skins above.";
+            std::vector<char>::size_type len = strlen(c);
+            this->reserve(len);
+            this->insert(this->end(), c, c + len);
+        }
+};
+
+
+//----------------------------------------------------------------------------//
+
+} } } // End namespaces test, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_SEQUENCE_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/detail/temp_file.hpp b/vendor/pdalboost/libs/iostreams/test/detail/temp_file.hpp
new file mode 100644
index 0000000..1f88c3d
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/detail/temp_file.hpp
@@ -0,0 +1,92 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_FILES_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_FILES_HPP_INCLUDED
+
+#include <cctype>                             // toupper, tolower
+#include <cstdio>                             // tmpname, TMP_MAX, remove
+#include <cstdlib>                            // rand, toupper, tolower (VC6)
+#include <fstream>
+#include <string>
+#include <boost/filesystem/operations.hpp>
+#include "./constants.hpp"
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+# undef toupper
+# undef tolower
+# undef remove
+# undef rand
+namespace std {
+    using ::toupper; using ::tolower; using ::remove; using ::rand;
+}
+#endif
+
+namespace pdalboost { namespace iostreams { namespace test {
+
+// Represents a temp file, deleted upon destruction.
+class temp_file {
+public:
+
+    // Constructs a temp file which does not initially exist.
+    temp_file() { set_name(); }
+    ~temp_file() { std::remove(name_.c_str()); }
+    const ::std::string name() const { return name_; }
+    operator const ::std::string() const { return name_; }
+private:
+    void set_name() {
+        name_ = pdalboost::filesystem::unique_path().string();
+    }
+
+    ::std::string name_;
+};
+
+struct test_file : public temp_file {
+    test_file()
+        {
+            BOOST_IOS::openmode mode = 
+                BOOST_IOS::out | BOOST_IOS::binary;
+            ::std::ofstream f(name().c_str(), mode);
+            const ::std::string n(name());
+            const char* buf = narrow_data();
+            for (int z = 0; z < data_reps; ++z)
+                f.write(buf, data_length());
+        }
+};
+
+
+struct uppercase_file : public temp_file {
+    uppercase_file()
+        {
+            BOOST_IOS::openmode mode = 
+                BOOST_IOS::out | BOOST_IOS::binary;
+            ::std::ofstream f(name().c_str(), mode);
+            const char* buf = narrow_data();
+            for (int z = 0; z < data_reps; ++z)
+                for (int w = 0; w < data_length(); ++w)
+                    f.put((char) std::toupper(buf[w]));
+        }
+};
+
+struct lowercase_file : public temp_file {
+    lowercase_file()
+        {
+            BOOST_IOS::openmode mode = 
+                BOOST_IOS::out | BOOST_IOS::binary;
+            ::std::ofstream f(name().c_str(), mode);
+            const char* buf = narrow_data();
+            for (int z = 0; z < data_reps; ++z)
+                for (int w = 0; w < data_length(); ++w)
+                    f.put((char) std::tolower(buf[w]));
+        }
+};
+
+//----------------------------------------------------------------------------//
+
+} } } // End namespaces test, iostreams, boost.
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_FILES_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/detail/utf8_codecvt_facet.cpp b/vendor/pdalboost/libs/iostreams/test/detail/utf8_codecvt_facet.cpp
new file mode 100644
index 0000000..26679f7
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/detail/utf8_codecvt_facet.cpp
@@ -0,0 +1,371 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// utf8_codecvt_facet.cpp
+
+// Copyright (c) 2001 Ronald Garcia, Indiana University (garcia at osl.iu.edu)
+// Andrew Lumsdaine, Indiana University (lums at osl.iu.edu). 
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+//#include <cstdlib> // for multi-byte converson routines
+
+// Jonathan Turkanis: 
+//   - Replaced test for BOOST_NO_STD_WSTREAMBUF with test for 
+//     BOOST_IOSTREAMS_NO_WIDE_STREAMS;
+//   - Derived from codecvt_helper instead of codecvt.
+
+#include <boost/config.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifdef BOOST_IOSTREAMS_NO_LOCALES
+# error "C++ locales not supported on this platform"
+#else
+
+#include <cassert>
+#include <cstddef>
+
+#include <boost/detail/workaround.hpp>
+#include "./utf8_codecvt_facet.hpp"
+
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x600)
+# pragma warn -sig // Conversion may lose significant digits
+# pragma warn -rng // Constant is out of range in comparison
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implementation for wchar_t
+
+// Translate incoming UTF-8 into UCS-4
+std::codecvt_base::result utf8_codecvt_facet_wchar_t::do_in(
+    std::mbstate_t&, 
+    const char * from,
+    const char * from_end, 
+    const char * & from_next,
+    wchar_t * to, 
+    wchar_t * to_end, 
+    wchar_t * & to_next
+) const {
+    // Basic algorithm:  The first octet determines how many
+    // octets total make up the UCS-4 character.  The remaining
+    // "continuing octets" all begin with "10". To convert, subtract
+    // the amount that specifies the number of octets from the first
+    // octet.  Subtract 0x80 (1000 0000) from each continuing octet,
+    // then mash the whole lot together.  Note that each continuing
+    // octet only uses 6 bits as unique values, so only shift by
+    // multiples of 6 to combine.
+    while (from != from_end && to != to_end) {
+
+        // Error checking   on the first octet
+        if (invalid_leading_octet(*from)){
+            from_next = from;
+            to_next = to;
+            return std::codecvt_base::error;
+        }
+
+        // The first octet is   adjusted by a value dependent upon 
+        // the number   of "continuing octets" encoding the character
+        const   int cont_octet_count = get_cont_octet_count(*from);
+        const   wchar_t octet1_modifier_table[] =   {
+            0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc
+        };
+
+        // The unsigned char conversion is necessary in case char is
+        // signed   (I learned this the hard way)
+        wchar_t ucs_result = 
+            (unsigned char)(*from++) - octet1_modifier_table[cont_octet_count];
+
+        // Invariants   : 
+        //   1) At the start of the loop,   'i' continuing characters have been
+        //    processed 
+        //   2) *from   points to the next continuing character to be processed.
+        int i   = 0;
+        while(i != cont_octet_count && from != from_end) {
+
+            // Error checking on continuing characters
+            if (invalid_continuing_octet(*from)) {
+                from_next   = from;
+                to_next =   to;
+                return std::codecvt_base::error;
+            }
+
+            ucs_result *= (1 << 6); 
+
+            // each continuing character has an extra (10xxxxxx)b attached to 
+            // it that must be removed.
+            ucs_result += (unsigned char)(*from++) - 0x80;
+            ++i;
+        }
+
+        // If   the buffer ends with an incomplete unicode character...
+        if (from == from_end && i   != cont_octet_count) {
+            // rewind "from" to before the current character translation
+            from_next = from - (i+1); 
+            to_next = to;
+            return std::codecvt_base::partial;
+        }
+        *to++   = ucs_result;
+    }
+    from_next = from;
+    to_next = to;
+
+    // Were we done converting or did we run out of destination space?
+    if(from == from_end) return std::codecvt_base::ok;
+    else return std::codecvt_base::partial;
+}
+
+std::codecvt_base::result utf8_codecvt_facet_wchar_t::do_out(
+    std::mbstate_t &, 
+    const wchar_t *   from,
+    const wchar_t * from_end, 
+    const wchar_t * & from_next,
+    char * to, 
+    char * to_end, 
+    char * & to_next
+) const
+{
+    // RG - consider merging this table with the other one
+    const wchar_t octet1_modifier_table[] = {
+        0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc
+    };
+
+    while (from != from_end && to != to_end) {
+
+#define BOOST_NULL // Prevent macro expansion
+        // Check for invalid UCS-4 character
+        if (*from  > std::numeric_limits<wchar_t>::max BOOST_NULL ()) {
+            from_next = from;
+            to_next = to;
+            return std::codecvt_base::error;
+        }
+#undef BOOST_NULL
+
+        int cont_octet_count = get_cont_octet_out_count(*from);
+
+        // RG  - comment this formula better
+        int shift_exponent = (cont_octet_count) *   6;
+
+        // Process the first character
+        *to++ = octet1_modifier_table[cont_octet_count] +
+            (unsigned char)(*from / (1 << shift_exponent));
+
+        // Process the continuation characters 
+        // Invariants: At   the start of the loop:
+        //   1) 'i' continuing octets   have been generated
+        //   2) '*to'   points to the next location to place an octet
+        //   3) shift_exponent is   6 more than needed for the next octet
+        int i   = 0;
+        while   (i != cont_octet_count && to != to_end) {
+            shift_exponent -= 6;
+            *to++ = 0x80 + ((*from / (1 << shift_exponent)) % (1 << 6));
+            ++i;
+        }
+        // If   we filled up the out buffer before encoding the character
+        if(to   == to_end && i != cont_octet_count) {
+            from_next = from;
+            to_next = to - (i+1);
+            return std::codecvt_base::partial;
+        }
+        *from++;
+    }
+    from_next = from;
+    to_next = to;
+    // Were we done or did we run out of destination space
+    if(from == from_end) return std::codecvt_base::ok;
+    else return std::codecvt_base::partial;
+}
+
+// How many char objects can I process to get <= max_limit
+// wchar_t objects?
+int utf8_codecvt_facet_wchar_t::do_length(
+    BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER std::mbstate_t &,
+    const char * from,
+    const char * from_end, 
+    std::size_t max_limit
+) const throw()
+{ 
+    // RG - this code is confusing!  I need a better way to express it.
+    // and test cases.
+
+    // Invariants:
+    // 1) last_octet_count has the size of the last measured character
+    // 2) char_count holds the number of characters shown to fit
+    // within the bounds so far (no greater than max_limit)
+    // 3) from_next points to the octet 'last_octet_count' before the
+    // last measured character.  
+    int last_octet_count=0;
+    std::size_t char_count = 0;
+    const char* from_next = from;
+    // Use "<" because the buffer may represent incomplete characters
+    while (from_next+last_octet_count <= from_end && char_count <= max_limit) {
+        from_next += last_octet_count;
+        last_octet_count = (get_octet_count(*from_next));
+        ++char_count;
+    }
+    return from_next-from_end;
+}
+
+unsigned int utf8_codecvt_facet_wchar_t::get_octet_count(
+    unsigned char   lead_octet
+){
+    // if the 0-bit (MSB) is 0, then 1 character
+    if (lead_octet <= 0x7f) return 1;
+
+    // Otherwise the count number of consecutive 1 bits starting at MSB
+    assert(0xc0 <= lead_octet && lead_octet <= 0xfd);
+
+    if (0xc0 <= lead_octet && lead_octet <= 0xdf) return 2;
+    else if (0xe0 <= lead_octet && lead_octet <= 0xef) return 3;
+    else if (0xf0 <= lead_octet && lead_octet <= 0xf7) return 4;
+    else if (0xf8 <= lead_octet && lead_octet <= 0xfb) return 5;
+    else return 6;
+}
+
+namespace {
+template<std::size_t s>
+int get_cont_octet_out_count_impl(wchar_t word){
+    if (word < 0x80) {
+        return 0;
+    }
+    if (word < 0x800) {
+        return 1;
+    }
+    return 2;
+}
+
+// note the following code will generate on some platforms where
+// wchar_t is defined as UCS2.  The warnings are superfluous as
+// the specialization is never instantitiated with such compilers.
+template<>
+int get_cont_octet_out_count_impl<4>(wchar_t word)
+{
+    if (word < 0x80) {
+        return 0;
+    }
+    if (word < 0x800) {
+        return 1;
+    }
+    if (word < 0x10000) {
+        return 2;
+    }
+    if (word < 0x200000) {
+        return 3;
+    }
+    if (word < 0x4000000) {
+        return 4;
+    }
+    return 5;
+}
+
+} // namespace anonymous
+
+// How many "continuing octets" will be needed for this word
+// ==   total octets - 1.
+int utf8_codecvt_facet_wchar_t::get_cont_octet_out_count(
+    wchar_t word
+) const {
+    return get_cont_octet_out_count_impl<sizeof(wchar_t)>(word);
+}
+
+#if 0 // not used?
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// implementation for char
+
+std::codecvt_base::result utf8_codecvt_facet_char::do_in(
+    std::mbstate_t & state, 
+    const char * from, 
+    const char * from_end, 
+    const char * & from_next,
+    char * to, 
+    char * to_end, 
+    char * & to_next
+) const
+{
+    while(from_next < from_end){
+        wchar_t w;
+        wchar_t *wnext = & w;
+        utf8_codecvt_facet_wchar_t::result ucs4_result;
+        ucs4_result = base_class::do_in(
+            state,
+            from, from_end, from_next,
+            wnext, wnext + 1, wnext
+        );
+        if(codecvt_base::ok != ucs4_result)
+            return ucs4_result;
+        // if the conversion succeeds. 
+        int length = std::wctomb(to_next, w);
+        assert(-1 != length);
+        to_next += length;
+    }
+    return codecvt_base::ok;
+}
+
+std::codecvt_base::result utf8_codecvt_facet_char::do_out(
+    mbstate_t & state, 
+    const char * from,
+    const char * from_end, 
+    const char * & from_next,
+    char * to, 
+    char * to_end, 
+    char * & to_next
+) const
+{
+    while(from_next < from_end){
+        wchar_t w;
+        int result = std::mbtowc(&w, from_next,  MB_LENGTH_MAX);
+        assert(-1 != result);
+        from_next += result;
+        utf8_codecvt_facet_wchar_t::result ucs4_result;
+
+        const wchar_t *wptr = & w;
+        ucs4_result = base_class::do_out(
+            state,
+            wptr, wptr+1, wptr,
+            to_next, to_end, to_next
+        );
+        if(codecvt_base::ok != ucs4_result)
+            return ucs4_result;     
+    }
+    return codecvt_base::ok;
+}
+
+// How many bytes objects can I process to get <= max_limit
+// char objects?
+int utf8_codecvt_facet_char::do_length(
+    // it seems that the standard doesn't use const so these librarires
+    // would be in error
+    BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER
+    utf8_codecvt_facet_wchar_t::mbstate_t & initial_state,
+    const char * from_next,
+    const char * from_end, 
+    std::size_t max_limit
+) const
+{
+    int total_length = 0;
+    const char *from = from_next;
+    mbstate_t state = initial_state;
+    while(from_next < from_end){
+        wchar_t w;
+        wchar_t *wnext = & w;
+        utf8_codecvt_facet_wchar_t::result ucs4_result;
+        ucs4_result = base_class::do_in(
+            state,
+            from_next, from_end, from_next,
+            wnext, wnext + 1, wnext
+        );
+
+        if(codecvt_base::ok != ucs4_result)
+            break;
+
+        char carray[MB_LENGTH_MAX];
+        std::size_t count = wctomb(carray, w);
+        if(count > max_limit)
+            break;
+
+        max_limit -= count;
+        total_length = from_next - from;
+    }
+    return total_length;
+}
+#endif
+
+#endif //BOOST_IOSTREAMS_NO_WIDE_STREAMS
diff --git a/vendor/pdalboost/libs/iostreams/test/detail/utf8_codecvt_facet.hpp b/vendor/pdalboost/libs/iostreams/test/detail/utf8_codecvt_facet.hpp
new file mode 100644
index 0000000..60456cf
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/detail/utf8_codecvt_facet.hpp
@@ -0,0 +1,200 @@
+#ifndef BOOST_UTF8_CODECVT_FACET_HPP
+#define BOOST_UTF8_CODECVT_FACET_HPP
+
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifdef BOOST_IOSTREAMS_NO_WIDE_STREAMS 
+# error wide streams not supported on this platform
+#endif
+
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// utf8_codecvt_facet.hpp
+
+// Copyright (c) 2001 Ronald Garcia, Indiana University (garcia at osl.iu.edu)
+// Andrew Lumsdaine, Indiana University (lums at osl.iu.edu).
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// Note:(Robert Ramey).  I have made the following alterations in the original
+// code.
+// a) Rendered utf8_codecvt<wchar_t, char>  with using templates
+// b) Move longer functions outside class definition to prevent inlining
+// and make code smaller
+// c) added on a derived class to permit translation to/from current
+// locale to utf8
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+// archives stored as text - note these ar templated on the basic
+// stream templates to accommodate wide (and other?) kind of characters
+//
+// note the fact that on libraries without wide characters, ostream is
+// is not a specialization of basic_ostream which in fact is not defined
+// in such cases.   So we can't use basic_ostream<OStream::char_type> but rather
+// use two template parameters
+//
+// utf8_codecvt_facet
+//   This is an implementation of a std::codecvt facet for translating 
+//   from UTF-8 externally to UCS-4.  Note that this is not tied to
+//   any specific types in order to allow customization on platforms
+//   where wchar_t is not big enough.
+//
+// NOTES:  The current implementation jumps through some unpleasant hoops in
+// order to deal with signed character types.  As a std::codecvt_base::result,
+// it is necessary  for the ExternType to be convertible to unsigned  char.
+// I chose not to tie the extern_type explicitly to char. But if any combination
+// of types other than <wchar_t,char_t> is used, then std::codecvt must be
+// specialized on those types for this to work.
+
+#include <locale>
+#include <cstddef> // size_t
+#include <cwchar>  // mbstate_t
+#include <boost/integer_traits.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include <boost/iostreams/detail/codecvt_helper.hpp>
+
+// maximum lenght of a multibyte string
+#define MB_LENGTH_MAX 8
+
+struct utf8_codecvt_facet_wchar_t 
+    : public pdalboost::iostreams::detail::codecvt_helper<wchar_t, char, std::mbstate_t>  
+{
+public:
+    explicit utf8_codecvt_facet_wchar_t(std::size_t no_locale_manage = 0)
+        : pdalboost::iostreams::detail::codecvt_helper<wchar_t, char, std::mbstate_t>
+              (no_locale_manage) 
+        { }
+protected:
+    virtual std::codecvt_base::result do_in(
+        std::mbstate_t& state, 
+        const char * from,
+        const char * from_end, 
+        const char * & from_next,
+        wchar_t * to, 
+        wchar_t * to_end, 
+        wchar_t*& to_next
+    ) const;
+
+    virtual std::codecvt_base::result do_out(
+        std::mbstate_t & state, const wchar_t * from,
+        const wchar_t * from_end, const wchar_t*  & from_next,
+        char * to, char * to_end, char * & to_next
+    ) const;
+
+    bool invalid_continuing_octet(unsigned char octet_1) const {
+        return (octet_1 < 0x80|| 0xbf< octet_1);
+    }
+
+    bool invalid_leading_octet(unsigned char octet_1)   const {
+        return (0x7f < octet_1 && octet_1 < 0xc0) ||
+            (octet_1 > 0xfd);
+    }
+
+    // continuing octets = octets except for the leading octet
+    static unsigned int get_cont_octet_count(unsigned   char lead_octet) {
+        return get_octet_count(lead_octet) - 1;
+    }
+
+    static unsigned int get_octet_count(unsigned char   lead_octet);
+
+    // How many "continuing octets" will be needed for this word
+    // ==   total octets - 1.
+    int get_cont_octet_out_count(wchar_t word) const ;
+
+    virtual bool do_always_noconv() const throw() { return false; }
+
+    // UTF-8 isn't really stateful since we rewind on partial conversions
+    virtual std::codecvt_base::result do_unshift(
+        std::mbstate_t&,
+        char * from,
+        char * /* to */,
+        char * & next
+    ) const{
+        next = from;
+        return ok;
+    }
+
+    virtual int do_encoding() const throw() {
+        const int variable_byte_external_encoding=0;
+        return variable_byte_external_encoding;
+    }
+
+    // How many char objects can I process to get <= max_limit
+    // wchar_t objects?
+    virtual int do_length(
+        BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER std::mbstate_t &,
+        const char * from,
+        const char * from_end, 
+        std::size_t max_limit
+    ) const throw();
+
+    // Largest possible value do_length(state,from,from_end,1) could return.
+    virtual int do_max_length() const throw () {
+        return 6; // largest UTF-8 encoding of a UCS-4 character
+    }
+};
+
+#if 0 // not used - incorrect in any case
+// Robert Ramey - use the above to make a code converter from multi-byte
+// char strings to utf8 encoding
+struct utf8_codecvt_facet_char : public utf8_codecvt_facet_wchar_t
+{
+    typedef utf8_codecvt_facet_wchar_t base_class;
+public:
+    explicit utf8_codecvt_facet_char(std::size_t no_locale_manage=0)
+        : base_class(no_locale_manage)
+    {}
+protected:
+    virtual std::codecvt_base::result do_in(
+        std::mbstate_t & state, 
+        const char * from, 
+        const char * from_end, 
+        const char * & from_next,
+        char * to, 
+        char * to_end, 
+        char * & to_next
+    ) const;
+
+    virtual std::codecvt_base::result do_out(
+        std::mbstate_t & state, 
+        const char * from,
+        const char * from_end, 
+        const char*  & from_next,
+        char * to, 
+        char * to_end, 
+        char * & to_next
+    ) const;
+
+    // How many char objects can I process to get <= max_limit
+    // char objects?
+    virtual int do_length(
+        const std::mbstate_t&, 
+        const char * from,
+        const char * from_end, 
+        std::size_t max_limit
+    ) const;
+};
+#endif
+
+template<class Internal, class External>
+struct utf8_codecvt_facet
+{};
+
+template<>
+struct utf8_codecvt_facet<wchar_t, char>
+    : public utf8_codecvt_facet_wchar_t
+{};
+
+#if 0
+template<>
+struct utf8_codecvt_facet<char, char>
+    : public utf8_codecvt_facet_char
+{};
+#endif
+
+#endif // BOOST_UTF8_CODECVT_FACET_HPP
+
diff --git a/vendor/pdalboost/libs/iostreams/test/detail/verification.hpp b/vendor/pdalboost/libs/iostreams/test/detail/verification.hpp
new file mode 100644
index 0000000..59279ea
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/detail/verification.hpp
@@ -0,0 +1,316 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+
+#ifndef BOOST_IOSTREAMS_TEST_VERIFICATION_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_VERIFICATION_HPP_INCLUDED
+
+#include <iostream>
+#include <exception>
+#include <string>
+#include <string.h>
+#include <fstream>
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# include <istream>
+# include <ostream>
+#else
+# include <iostream.h>
+#endif
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#include "./constants.hpp"
+
+// Code generation bugs cause tests to fail with global optimization.
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# pragma optimize("g", off)
+#endif
+
+// Included only by tests; no need to #undef.
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+# define BOOST_TEMPLATE_DECL template<typename Ch, typename Tr>
+# define BOOST_CHAR Ch
+# define BOOST_ISTREAM std::basic_istream<Ch, Tr>
+# define BOOST_OSTREAM std::basic_ostream<Ch, Tr>
+#else
+# define BOOST_TEMPLATE_DECL
+# define BOOST_CHAR char
+# define BOOST_ISTREAM std::istream
+# define BOOST_OSTREAM std::ostream
+#endif
+
+namespace pdalboost { namespace iostreams { namespace test {
+
+BOOST_TEMPLATE_DECL
+bool compare_streams_in_chars(BOOST_ISTREAM& first, BOOST_ISTREAM& second)
+{
+    for (int z = 0; z < data_reps; ++z)
+        for (int w = 0; w < data_length(); ++w)
+            if (first.eof() != second.eof() || first.get() != second.get())
+                return false;
+    return true;
+}
+
+BOOST_TEMPLATE_DECL
+bool compare_streams_in_chunks(BOOST_ISTREAM& first, BOOST_ISTREAM& second)
+{
+    int i = 0;
+    do {
+        BOOST_CHAR buf_one[chunk_size];
+        BOOST_CHAR buf_two[chunk_size];
+        first.read(buf_one, chunk_size);
+        second.read(buf_two, chunk_size);
+        std::streamsize amt = first.gcount();
+        if ( amt != static_cast<std::streamsize>(second.gcount()) ||
+             BOOST_IOSTREAMS_CHAR_TRAITS(BOOST_CHAR)::
+                compare(buf_one, buf_two, amt) != 0 )
+            return false;
+        ++i;
+    } while (!first.eof());
+    return true;
+}
+
+bool compare_files(const std::string& first, const std::string& second)
+{
+    using namespace std;
+    ifstream one(first.c_str(), BOOST_IOS::in | BOOST_IOS::binary);
+    ifstream two(second.c_str(), BOOST_IOS::in | BOOST_IOS::binary);
+    return compare_streams_in_chunks(one, two);
+}
+
+#ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES
+    template<typename Container, typename Ch, typename Tr>
+#else
+    template<typename Container>
+#endif
+bool compare_container_and_stream(Container& cnt, BOOST_ISTREAM& is)
+{
+    typename Container::iterator first = cnt.begin();
+    typename Container::iterator last = cnt.end();
+    do  {
+        if ((first == last) != is.eof()) return false;
+        if (first != last && *first++ != is.get()) return false;
+    } while (first != last);
+    return true;
+}
+
+template<typename Container>
+bool compare_container_and_file(Container& cnt, const std::string& file)
+{
+    std::ifstream fstrm(file.c_str(), BOOST_IOS::in | BOOST_IOS::binary);
+    return compare_container_and_stream(cnt, fstrm);
+}
+
+BOOST_TEMPLATE_DECL
+void write_data_in_chars(BOOST_OSTREAM& os)
+{
+    for (int z = 0; z < data_reps; ++z) 
+        for (int w = 0; w < data_length(); ++w) 
+            os.put(detail::data((BOOST_CHAR*)0)[w]);
+    os.flush();
+}
+
+BOOST_TEMPLATE_DECL
+void write_data_in_chunks(BOOST_OSTREAM& os)
+{
+    const BOOST_CHAR* buf = detail::data((BOOST_CHAR*)0);
+    for (int z = 0; z < data_reps; ++z)
+        os.write(buf, data_length());
+    os.flush();
+}
+
+bool test_seekable_in_chars(std::iostream& io)
+{
+    int i;  // old 'for' scope workaround.
+
+    // Test seeking with ios::cur
+    for (i = 0; i < data_reps; ++i) {
+        int j;
+        for (j = 0; j < chunk_size; ++j)
+            io.put(narrow_data()[j]);
+        io.seekp(-chunk_size, BOOST_IOS::cur);
+        for (j = 0; j < chunk_size; ++j)
+            if (io.get() != narrow_data()[j])
+               return false;
+        io.seekp(-chunk_size, BOOST_IOS::cur);
+        for (j = 0; j < chunk_size; ++j)
+            io.put(narrow_data()[j]);
+    }
+
+    // Test seeking with ios::beg
+    std::streamoff off = 0;
+    io.seekp(0, BOOST_IOS::beg);
+    for (i = 0; i < data_reps; ++i, off += chunk_size) {
+        int j;
+        for (j = 0; j < chunk_size; ++j)
+            io.put(narrow_data()[j]);
+        io.seekp(off, BOOST_IOS::beg);
+        for (j = 0; j < chunk_size; ++j)
+            if (io.get() != narrow_data()[j])
+               return false;
+        io.seekp(off, BOOST_IOS::beg);
+        for (j = 0; j < chunk_size; ++j)
+            io.put(narrow_data()[j]);
+    }
+
+    // Test seeking with ios::end
+    io.seekp(0, BOOST_IOS::end);
+    off = io.tellp();
+    io.seekp(-off, BOOST_IOS::end);
+    for (i = 0; i < data_reps; ++i, off -= chunk_size) {
+        int j;
+        for (j = 0; j < chunk_size; ++j)
+            io.put(narrow_data()[j]);
+        io.seekp(-off, BOOST_IOS::end);
+        for (j = 0; j < chunk_size; ++j)
+            if (io.get() != narrow_data()[j])
+               return false;
+        io.seekp(-off, BOOST_IOS::end);
+        for (j = 0; j < chunk_size; ++j)
+            io.put(narrow_data()[j]);
+    }
+    return true;
+}
+
+bool test_seekable_in_chunks(std::iostream& io)
+{
+    int i;  // old 'for' scope workaround.
+
+    // Test seeking with ios::cur
+    for (i = 0; i < data_reps; ++i) {
+        io.write(narrow_data(), chunk_size);
+        io.seekp(-chunk_size, BOOST_IOS::cur);
+        char buf[chunk_size];
+        io.read(buf, chunk_size);
+        if (strncmp(buf, narrow_data(), chunk_size) != 0)
+            return false;
+        io.seekp(-chunk_size, BOOST_IOS::cur);
+        io.write(narrow_data(), chunk_size);
+    }
+
+    // Test seeking with ios::beg
+    std::streamoff off = 0;
+    io.seekp(0, BOOST_IOS::beg);
+    for (i = 0; i < data_reps; ++i, off += chunk_size) {
+        io.write(narrow_data(), chunk_size);
+        io.seekp(off, BOOST_IOS::beg);
+        char buf[chunk_size];
+        io.read(buf, chunk_size);
+        if (strncmp(buf, narrow_data(), chunk_size) != 0)
+            return false;
+        io.seekp(off, BOOST_IOS::beg);
+        io.write(narrow_data(), chunk_size);
+    }
+    
+    // Test seeking with ios::end
+    io.seekp(0, BOOST_IOS::end);
+    off = io.tellp();
+    io.seekp(-off, BOOST_IOS::end);
+    for (i = 0; i < data_reps; ++i, off -= chunk_size) {
+        io.write(narrow_data(), chunk_size);
+        io.seekp(-off, BOOST_IOS::end);
+        char buf[chunk_size];
+        io.read(buf, chunk_size);
+        if (strncmp(buf, narrow_data(), chunk_size) != 0)
+            return false;
+        io.seekp(-off, BOOST_IOS::end);
+        io.write(narrow_data(), chunk_size);
+    }
+    return true;
+}
+
+bool test_input_seekable(std::istream& io)
+{
+    int i;  // old 'for' scope workaround.
+
+    // Test seeking with ios::cur
+    for (i = 0; i < data_reps; ++i) {
+        for (int j = 0; j < chunk_size; ++j)
+            if (io.get() != narrow_data()[j])
+               return false;
+        io.seekg(-chunk_size, BOOST_IOS::cur);
+        char buf[chunk_size];
+        io.read(buf, chunk_size);
+        if (strncmp(buf, narrow_data(), chunk_size) != 0)
+            return false;
+    }
+
+    // Test seeking with ios::beg
+    std::streamoff off = 0;
+    io.seekg(0, BOOST_IOS::beg);
+    for (i = 0; i < data_reps; ++i, off += chunk_size) {
+        for (int j = 0; j < chunk_size; ++j)
+            if (io.get() != narrow_data()[j])
+               return false;
+        io.seekg(off, BOOST_IOS::beg);
+        char buf[chunk_size];
+        io.read(buf, chunk_size);
+        if (strncmp(buf, narrow_data(), chunk_size) != 0)
+            return false;
+    }
+    
+    // Test seeking with ios::end
+    io.seekg(0, BOOST_IOS::end);
+    off = io.tellg();
+    io.seekg(-off, BOOST_IOS::end);
+    for (i = 0; i < data_reps; ++i, off -= chunk_size) {
+        for (int j = 0; j < chunk_size; ++j)
+            if (io.get() != narrow_data()[j])
+               return false;
+        io.seekg(-off, BOOST_IOS::end);
+        char buf[chunk_size];
+        io.read(buf, chunk_size);
+        if (strncmp(buf, narrow_data(), chunk_size) != 0)
+            return false;
+    }
+    return true;
+}
+
+bool test_output_seekable(std::ostream& io)
+{
+    int i;  // old 'for' scope workaround.
+
+    // Test seeking with ios::cur
+    for (i = 0; i < data_reps; ++i) {
+        for (int j = 0; j < chunk_size; ++j)
+            io.put(narrow_data()[j]);
+        io.seekp(-chunk_size, BOOST_IOS::cur);
+        io.write(narrow_data(), chunk_size);
+    }
+
+    // Test seeking with ios::beg
+    std::streamoff off = 0;
+    io.seekp(0, BOOST_IOS::beg);
+    for (i = 0; i < data_reps; ++i, off += chunk_size) {
+        for (int j = 0; j < chunk_size; ++j)
+            io.put(narrow_data()[j]);
+        io.seekp(off, BOOST_IOS::beg);
+        io.write(narrow_data(), chunk_size);
+    }
+    
+    // Test seeking with ios::end
+    io.seekp(0, BOOST_IOS::end);
+    off = io.tellp();
+    io.seekp(-off, BOOST_IOS::end);
+    for (i = 0; i < data_reps; ++i, off -= chunk_size) {
+        for (int j = 0; j < chunk_size; ++j)
+            io.put(narrow_data()[j]);
+        io.seekp(-off, BOOST_IOS::end);
+        io.write(narrow_data(), chunk_size);
+    }
+    return true;
+}
+
+} } } // End namespaces test, iostreams, boost.
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# pragma optimize("", on)
+#endif
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_VERIFICATION_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/direct_adapter_test.cpp b/vendor/pdalboost/libs/iostreams/test/direct_adapter_test.cpp
new file mode 100644
index 0000000..ac26d6d
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/direct_adapter_test.cpp
@@ -0,0 +1,111 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <algorithm> // equal.
+#include <fstream>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/detail/adapter/direct_adapter.hpp>
+#include <boost/iostreams/stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+using namespace std;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;
+
+void direct_adapter_test()
+{
+
+    typedef pdalboost::iostreams::detail::direct_adapter<array_source> 
+            indirect_array_source;
+    typedef pdalboost::iostreams::detail::direct_adapter<array_sink> 
+            indirect_array_sink;
+    typedef pdalboost::iostreams::detail::direct_adapter<pdalboost::iostreams::array> 
+            indirect_array;
+    typedef stream<indirect_array_source>
+            indirect_array_istream;
+    typedef stream<indirect_array_sink> 
+            indirect_array_ostream;
+    typedef stream<indirect_array> 
+            indirect_array_stream;
+
+    test_file        test;
+    test_sequence<>  seq;
+
+    //--------------indirect_array_istream------------------------------------//
+
+    {
+        indirect_array_istream  first(&seq[0], &seq[0] + seq.size());
+        ifstream                second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from indirect_array_istream in chars"
+        );
+    }
+
+    {
+        indirect_array_istream  first(&seq[0], &seq[0] + seq.size());
+        ifstream                second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from indirect_array_istream in chunks"
+        );
+    }
+
+    //--------------indirect_array_ostream------------------------------------//
+
+    {
+        vector<char>            dest(data_reps * data_length(), '?');
+        indirect_array_ostream  out(&dest[0], &dest[0] + dest.size());
+        write_data_in_chars(out);
+        BOOST_CHECK_MESSAGE(
+            std::equal(seq.begin(), seq.end(), dest.begin()),
+            "failed writing to indirect_array_ostream in chunks"
+        );
+    }
+
+    {
+        vector<char>            dest(data_reps * data_length(), '?');
+        indirect_array_ostream  out(&dest[0], &dest[0] + dest.size());
+        write_data_in_chunks(out);
+        BOOST_CHECK_MESSAGE(
+            std::equal(seq.begin(), seq.end(), dest.begin()),
+            "failed writing to indirect_array_ostream in chunks"
+        );
+    }
+
+    //--------------indirect_array_stream-------------------------------------//
+
+    {
+        vector<char> test(data_reps * data_length(), '?');
+        indirect_array_stream io(&test[0], &test[0] + test.size());
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chars(io),
+            "failed seeking within indirect_array_stream, in chars"
+        );
+    }
+
+    {
+        vector<char> test(data_reps * data_length(), '?');
+        indirect_array_stream io(&test[0], &test[0] + test.size());
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chunks(io),
+            "failed seeking within indirect_array_stream, in chunks"
+        );
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("direct_adapter test");
+    test->add(BOOST_TEST_CASE(&direct_adapter_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/example_test.cpp b/vendor/pdalboost/libs/iostreams/test/example_test.cpp
new file mode 100644
index 0000000..c36dd1b
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/example_test.cpp
@@ -0,0 +1,461 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <map>
+#include <boost/iostreams/detail/ios.hpp>  // failure.
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filter/test.hpp>
+#include <boost/iostreams/stream.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "../example/container_device.hpp"
+#include "../example/dictionary_filter.hpp"
+#include "../example/line_wrapping_filter.hpp"
+#include "../example/shell_comments_filter.hpp"
+#include "../example/tab_expanding_filter.hpp"
+#include "../example/unix2dos_filter.hpp"
+#include "./detail/verification.hpp"
+#include "./detail/sequence.hpp"
+#include "./detail/temp_file.hpp"
+
+using pdalboost::unit_test::test_suite;
+namespace io = pdalboost::iostreams;
+namespace ex = pdalboost::iostreams::example;
+
+//------------------container_device test-------------------------------------//
+
+void container_device_test()
+{
+    using namespace std;
+    using namespace pdalboost::iostreams::test;
+
+    typedef vector<char>                       vector_type;
+    typedef ex::container_source<vector_type>  vector_source;
+    typedef ex::container_sink<vector_type>    vector_sink;
+    typedef ex::container_device<vector_type>  vector_device;
+
+    {
+        test_sequence<>              seq;
+        test_file                    file;
+        io::stream<vector_source>    first(seq);
+        io::stream<io::file_source>  second(file.name(), in_mode);
+        BOOST_CHECK(compare_streams_in_chunks(first, second));
+    }
+
+    {
+        std::vector<char>        first;
+        test_sequence<>          second;
+        io::stream<vector_sink>  out(first);
+        write_data_in_chunks(out);
+        BOOST_CHECK(first == second);
+    }
+
+    {
+        vector<char>              v;
+        io::stream<vector_device> io(v);
+        BOOST_CHECK(test_seekable_in_chunks(io));
+    }
+}
+
+//------------------dictionary_filter test------------------------------------//
+
+void dictionary_filter_test()
+{
+    using namespace std;
+
+    io::example::dictionary d;
+
+    // See http://english2american.com.
+    d.add("answerphone",  "answering machine");
+    d.add("bloke",        "guy");
+    d.add("gearbox",      "transmission");
+    d.add("ironmonger",   "hardware shop");
+    d.add("loo",          "restroom");
+    d.add("lorry",        "truck");
+    d.add("rubber",       "eraser");
+    d.add("spanner",      "monkey wrench");
+    d.add("telly",        "TV");
+    d.add("tyre",         "tire");
+    d.add("waistcoat",    "vest");
+    d.add("windscreen",   "windshield");
+
+    const std::string input = // Note: last character is non-alphabetic.
+        "I had a message on my answerphone from the bloke at the car "
+        "dealership that the windscreen and tyre on my lorry were replaced. "
+        "However, the gearbox would not be ready until tomorrow since the "
+        "spanner that they needed was broken and they had to go to the "
+        "ironmonger to buy a replacement. Since my lorry was not ready, "
+        "I decided to take the bus downtown and buy a new waistcoat. I "
+        "also stopped at the liquor store to buy some wine. I came home "
+        "and watched the telly and drank my wine. I also worked on a "
+        "crossword puzzle. Fortunately I had a pencil with a new rubber. "
+        "During that evening I made frequent trips to the loo due to my "
+        "excessive drinking";
+
+    const std::string output = // Note: last character is non-alphabetic.
+        "I had a message on my answering machine from the guy at the car "
+        "dealership that the windshield and tire on my truck were replaced. "
+        "However, the transmission would not be ready until tomorrow since "
+        "the monkey wrench that they needed was broken and they had to go to "
+        "the hardware shop to buy a replacement. Since my truck was not ready, "
+        "I decided to take the bus downtown and buy a new vest. I also stopped "
+        "at the liquor store to buy some wine. I came home and watched the TV "
+        "and drank my wine. I also worked on a crossword puzzle. Fortunately I "
+        "had a pencil with a new eraser. During that evening I made frequent "
+        "trips to the restroom due to my excessive drinking";
+
+    BOOST_CHECK(
+        io::test_input_filter( io::example::dictionary_stdio_filter(d),
+                               input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_output_filter( io::example::dictionary_stdio_filter(d),
+                                input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_input_filter( io::example::dictionary_input_filter(d),
+                               input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_output_filter( io::example::dictionary_output_filter(d),
+                                input, output )
+    );
+}
+
+//------------------line_wrapping_filter test---------------------------------//
+
+void line_wrapping_filter_test()
+{
+    using namespace std;
+
+    const std::string input =
+        "I had a message on my answerphone from the bloke at the car \n"
+        "dealership that the windscreen and tyre on my lorry were replaced. \n"
+        "However, the gearbox would not be ready until tomorrow since the \n"
+        "spanner that they needed was broken and they had to go to the \n"
+        "ironmonger to buy a replacement. Since my lorry was not ready, \n"
+        "I decided to take the bus downtown and buy a new waistcoat. I \n"
+        "also stopped at the liquor store to buy some wine. I came home \n"
+        "and watched the telly and drank my wine. I also worked on a \n"
+        "crossword puzzle. Fortunately I had a pencil with a new rubber. \n"
+        "During that evening I made frequent trips to the loo due to my \n"
+        "excessive drinking.";
+
+    const std::string output =
+        "I had a message on my answerphone from t\n"
+        "he bloke at the car \n"
+        "dealership that the windscreen and tyre \n"
+        "on my lorry were replaced. \n"
+        "However, the gearbox would not be ready \n"
+        "until tomorrow since the \n"
+        "spanner that they needed was broken and \n"
+        "they had to go to the \n"
+        "ironmonger to buy a replacement. Since m\n"
+        "y lorry was not ready, \n"
+        "I decided to take the bus downtown and b\n"
+        "uy a new waistcoat. I \n"
+        "also stopped at the liquor store to buy \n"
+        "some wine. I came home \n"
+        "and watched the telly and drank my wine.\n"
+        " I also worked on a \n"
+        "crossword puzzle. Fortunately I had a pe\n"
+        "ncil with a new rubber. \n"
+        "During that evening I made frequent trip\n"
+        "s to the loo due to my \n"
+        "excessive drinking.";
+
+    BOOST_CHECK(
+        io::test_input_filter( io::example::line_wrapping_stdio_filter(40),
+                               input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_output_filter( io::example::line_wrapping_stdio_filter(40),
+                                input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_input_filter( io::example::line_wrapping_input_filter(40),
+                               input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_output_filter( io::example::line_wrapping_output_filter(40),
+                                input, output )
+    );
+}
+
+//------------------shell_comments_filter test--------------------------------//
+
+void shell_comments_filter_test()
+{
+    using namespace std;
+
+    const std::string input = // From <libs/filesystem/build/Jamfile>.
+        "lib boost_filesystem\n"
+        "     : ../src/$(SOURCES).cpp\n"
+        "     : # build requirements\n"
+        "       [ common-names ] # magic for install and auto-link features\n"
+        "       <include>$(BOOST_ROOT) <sysinclude>$(BOOST_ROOT)\n"
+        "       <no-warn>exception.cpp <no-warn>operations_posix_windows.cpp\n"
+        "     : debug release  # build variants\n"
+        "     ;\n"
+        "\n"
+        "dll boost_filesystem\n"
+        "     : ../src/$(SOURCES).cpp\n"
+        "     : # build requirements\n"
+        "       [ common-names ]  # magic for install and auto-link features\n"
+        "       <define>BOOST_FILESYSTEM_DYN_LINK=1  # tell source we're building dll's\n"
+        "       <runtime-link>dynamic  # build only for dynamic runtimes\n"
+        "       <include>$(BOOST_ROOT) <sysinclude>$(BOOST_ROOT)\n"
+        "       <no-warn>exception.cpp <no-warn>operations_posix_windows.cpp\n"
+        "     : debug release  # build variants\n"
+        "     ;";
+
+    const std::string output =
+        "lib boost_filesystem\n"
+        "     : ../src/$(SOURCES).cpp\n"
+        "     : \n"
+        "       [ common-names ] \n"
+        "       <include>$(BOOST_ROOT) <sysinclude>$(BOOST_ROOT)\n"
+        "       <no-warn>exception.cpp <no-warn>operations_posix_windows.cpp\n"
+        "     : debug release  \n"
+        "     ;\n"
+        "\n"
+        "dll boost_filesystem\n"
+        "     : ../src/$(SOURCES).cpp\n"
+        "     : \n"
+        "       [ common-names ]  \n"
+        "       <define>BOOST_FILESYSTEM_DYN_LINK=1  \n"
+        "       <runtime-link>dynamic  \n"
+        "       <include>$(BOOST_ROOT) <sysinclude>$(BOOST_ROOT)\n"
+        "       <no-warn>exception.cpp <no-warn>operations_posix_windows.cpp\n"
+        "     : debug release  \n"
+        "     ;";
+
+    BOOST_CHECK(
+        io::test_input_filter( io::example::shell_comments_stdio_filter(),
+                               input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_output_filter( io::example::shell_comments_stdio_filter(),
+                                input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_input_filter( io::example::shell_comments_input_filter(),
+                               input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_output_filter( io::example::shell_comments_output_filter(),
+                                input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_input_filter( io::example::shell_comments_dual_use_filter(),
+                               input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_output_filter( io::example::shell_comments_dual_use_filter(),
+                                input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_input_filter( io::example::shell_comments_multichar_input_filter(),
+                               input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_output_filter( io::example::shell_comments_multichar_output_filter(),
+                                input, output )
+    );
+}
+
+//------------------tab_expanding_filter test---------------------------------//
+
+void tab_expanding_filter_test()
+{
+    using namespace std;
+
+    const std::string input =
+        "class tab_expanding_stdio_filter : public stdio_filter {\n"
+        "public:\n"
+        "\texplicit tab_expanding_stdio_filter(int\ttab_size = 8)\n"
+        "\t\t: tab_size_(tab_size), col_no_(0)\n"
+        "\t{\n"
+        "\t\tassert(tab_size\t> 0);\n"
+        "\t}\n"
+        "private:\n"
+        "\tvoid do_filter()\n"
+        "\t{\n"
+        "\t\tint\tc;\n"
+        "\t\twhile ((c = std::cin.get()) != EOF) {\n"
+        "\t\t\tif (c == '\\t') {\n"
+        "\t\t\t\tint\tspaces = tab_size_ - (col_no_ %\ttab_size_);\n"
+        "\t\t\t\tfor\t(; spaces >\t0; --spaces)\n"
+        "\t\t\t\t\tput_char(' ');\n"
+        "\t\t\t} else {\n"
+        "\t\t\t\tput_char(c);\n"
+        "\t\t\t}\n"
+        "\t\t}\n"
+        "\t}\n"
+        "\tvoid do_close()\t{ col_no_ =\t0; }\n"
+        "\tvoid put_char(int c)\n"
+        "\t{\n"
+        "\t\tstd::cout.put(c);\n"
+        "\t\tif (c == '\\n') {\n"
+        "\t\t\tcol_no_\t= 0;\n"
+        "\t\t} else {\n"
+        "\t\t\t++col_no_;\n"
+        "\t\t}\n"
+        "\t}\n"
+        "\tint\t tab_size_;\n"
+        "\tint\t col_no_;\n"
+        "};";
+
+    const std::string output =
+        "class tab_expanding_stdio_filter : public stdio_filter {\n"
+        "public:\n"
+        "    explicit tab_expanding_stdio_filter(int tab_size = 8)\n"
+        "        : tab_size_(tab_size), col_no_(0)\n"
+        "    {\n"
+        "        assert(tab_size > 0);\n"
+        "    }\n"
+        "private:\n"
+        "    void do_filter()\n"
+        "    {\n"
+        "        int c;\n"
+        "        while ((c = std::cin.get()) != EOF) {\n"
+        "            if (c == '\\t') {\n"
+        "                int spaces = tab_size_ - (col_no_ % tab_size_);\n"
+        "                for (; spaces > 0; --spaces)\n"
+        "                    put_char(' ');\n"
+        "            } else {\n"
+        "                put_char(c);\n"
+        "            }\n"
+        "        }\n"
+        "    }\n"
+        "    void do_close() { col_no_ = 0; }\n"
+        "    void put_char(int c)\n"
+        "    {\n"
+        "        std::cout.put(c);\n"
+        "        if (c == '\\n') {\n"
+        "            col_no_ = 0;\n"
+        "        } else {\n"
+        "            ++col_no_;\n"
+        "        }\n"
+        "    }\n"
+        "    int  tab_size_;\n"
+        "    int  col_no_;\n"
+        "};";
+
+    BOOST_CHECK(
+        io::test_input_filter( io::example::tab_expanding_stdio_filter(4),
+                               input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_output_filter( io::example::tab_expanding_stdio_filter(4),
+                                input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_input_filter( io::example::tab_expanding_input_filter(4),
+                               input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_output_filter( io::example::tab_expanding_output_filter(4),
+                                input, output )
+    );
+}
+
+//------------------unix2dos_filter test--------------------------------------//
+
+void unix2dos_filter_test()
+{
+    using namespace std;
+
+    const std::string input =
+        "When I was one-and-twenty\n"
+        "I heard a wise man say,\n"
+        "'Give crowns and pounds and guineas\n"
+        "But not your heart away;\n"
+        "\n"
+        "Give pearls away and rubies\n"
+        "But keep your fancy free.'\n"
+        "But I was one-and-twenty,\n"
+        "No use to talk to me.\n"
+        "\n"
+        "When I was one-and-twenty\n"
+        "I heard him say again,\n"
+        "'The heart out of the bosom\n"
+        "Was never given in vain;\n"
+        "'Tis paid with sighs a plenty\n"
+        "And sold for endless rue.'\n"
+        "And I am two-and-twenty,\n"
+        "And oh, 'tis true, 'tis true.";
+
+    const std::string output =
+        "When I was one-and-twenty\r\n"
+        "I heard a wise man say,\r\n"
+        "'Give crowns and pounds and guineas\r\n"
+        "But not your heart away;\r\n"
+        "\r\n"
+        "Give pearls away and rubies\r\n"
+        "But keep your fancy free.'\r\n"
+        "But I was one-and-twenty,\r\n"
+        "No use to talk to me.\r\n"
+        "\r\n"
+        "When I was one-and-twenty\r\n"
+        "I heard him say again,\r\n"
+        "'The heart out of the bosom\r\n"
+        "Was never given in vain;\r\n"
+        "'Tis paid with sighs a plenty\r\n"
+        "And sold for endless rue.'\r\n"
+        "And I am two-and-twenty,\r\n"
+        "And oh, 'tis true, 'tis true.";
+
+    BOOST_CHECK(
+        io::test_input_filter( io::example::unix2dos_stdio_filter(),
+                               input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_output_filter( io::example::unix2dos_stdio_filter(),
+                                input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_input_filter( io::example::unix2dos_input_filter(),
+                               input, output )
+    );
+
+    BOOST_CHECK(
+        io::test_output_filter( io::example::unix2dos_output_filter(),
+                                input, output )
+    );
+}
+
+test_suite* init_unit_test_suite(int, char* [])
+{
+    test_suite* test = BOOST_TEST_SUITE("example test");
+    test->add(BOOST_TEST_CASE(&container_device_test));
+    test->add(BOOST_TEST_CASE(&dictionary_filter_test));
+    test->add(BOOST_TEST_CASE(&tab_expanding_filter_test));
+    test->add(BOOST_TEST_CASE(&line_wrapping_filter_test));
+    test->add(BOOST_TEST_CASE(&shell_comments_filter_test));
+    test->add(BOOST_TEST_CASE(&unix2dos_filter_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/execute_test.cpp b/vendor/pdalboost/libs/iostreams/test/execute_test.cpp
new file mode 100644
index 0000000..fb44537
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/execute_test.cpp
@@ -0,0 +1,660 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * Tests the function templates pdalboost::iostreams::detail::execute_all and
+ * pdalboost::iostreams::detail::execute_foreach
+ *
+ * File:        libs/iostreams/test/execute_test.cpp
+ * Date:        Thu Dec 06 13:21:54 MST 2007
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ */
+
+#include <boost/iostreams/detail/execute.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>  
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::detail;
+using pdalboost::unit_test::test_suite;
+
+// Function object that sets a boolean flag and returns a value
+// specified at construction
+template<typename Result>
+class operation {
+public:
+    typedef Result result_type;
+    explicit operation(Result r, bool& executed) 
+        : r_(r), executed_(executed) 
+        { }
+    Result operator()() const 
+    { 
+        executed_ = true;
+        return r_; 
+    }
+private:
+    operation& operator=(const operation&);
+    Result  r_;
+    bool&   executed_;  
+};
+
+// Specialization for void return
+template<>
+class operation<void> {
+public:
+    typedef void result_type;
+    explicit operation(bool& executed) : executed_(executed) { }
+    void operator()() const { executed_ = true; }
+private:
+    operation& operator=(const operation&);
+    bool& executed_; 
+};
+
+// Simple exception class with error code built in to type
+template<int Code>
+struct error { };
+
+// Function object that sets a boolean flag and throws an exception
+template<int Code>
+class thrower {
+public:
+    typedef void result_type;
+    explicit thrower(bool& executed) : executed_(executed) { }
+    void operator()() const 
+    { 
+        executed_ = true;
+        throw error<Code>(); 
+    }
+private:
+    thrower& operator=(const thrower&);
+    bool& executed_; 
+};
+
+// Function object for use by foreach_test
+class foreach_func {
+public:
+    typedef void result_type;
+    explicit foreach_func(int& count) : count_(count) { }
+    void operator()(int x) const
+    {
+        ++count_;
+        switch (x) {
+        case 0: throw error<0>();
+        case 1: throw error<1>();
+        case 2: throw error<2>();
+        case 3: throw error<3>();
+        case 4: throw error<4>();
+        case 5: throw error<5>();
+        case 6: throw error<6>();
+        case 7: throw error<7>();
+        case 8: throw error<8>();
+        case 9: throw error<9>();
+        default:
+            break;
+        }
+    }
+private:
+    foreach_func& operator=(const foreach_func&);
+    int&  count_; // Number of times operator() has been called
+};
+
+void success_test()
+{
+    // Test returning an int
+    {
+        bool executed = false;
+        BOOST_CHECK(execute_all(operation<int>(9, executed)) == 9);
+        BOOST_CHECK(executed);
+    }
+
+    // Test returning void
+    {
+        bool executed = false;
+        execute_all(operation<void>(executed));
+        BOOST_CHECK(executed);
+    }
+
+    // Test returning an int with one cleanup operation
+    {
+        bool executed = false, cleaned_up = false;
+        BOOST_CHECK(
+            execute_all(
+                operation<int>(9, executed),
+                operation<void>(cleaned_up)
+            ) == 9
+        );
+        BOOST_CHECK(executed && cleaned_up);
+    }
+
+    // Test returning void with one cleanup operation
+    {
+        bool executed = false, cleaned_up = false;
+        execute_all(
+            operation<void>(executed),
+            operation<void>(cleaned_up)
+        );
+        BOOST_CHECK(executed && cleaned_up);
+    }
+
+    // Test returning an int with two cleanup operations
+    {
+        bool executed = false, cleaned_up1 = false, cleaned_up2 = false;
+        BOOST_CHECK(
+            execute_all(
+                operation<int>(9, executed),
+                operation<void>(cleaned_up1),
+                operation<void>(cleaned_up2)
+            ) == 9
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2);
+    }
+
+    // Test returning void with two cleanup operations
+    {
+        bool executed = false, cleaned_up1 = false, cleaned_up2 = false;
+        execute_all(
+            operation<void>(executed),
+            operation<void>(cleaned_up1),
+            operation<void>(cleaned_up2)
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2);
+    }
+
+    // Test returning an int with three cleanup operations
+    {
+        bool executed = false, cleaned_up1 = false, 
+             cleaned_up2 = false, cleaned_up3 = false;
+        BOOST_CHECK(
+            execute_all(
+                operation<int>(9, executed),
+                operation<void>(cleaned_up1),
+                operation<void>(cleaned_up2),
+                operation<void>(cleaned_up3)
+            ) == 9
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2 && cleaned_up3);
+    }
+
+    // Test returning void with three cleanup operations
+    {
+        bool executed = false, cleaned_up1 = false, 
+             cleaned_up2 = false, cleaned_up3 = false;
+        execute_all(
+            operation<void>(executed),
+            operation<void>(cleaned_up1),
+            operation<void>(cleaned_up2),
+            operation<void>(cleaned_up3)
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2 && cleaned_up3);
+    }
+}
+
+void operation_throws_test()
+{
+    // Test primary operation throwing with no cleanup operations
+    {
+        bool executed = false;
+        BOOST_CHECK_THROW(
+            execute_all(thrower<0>(executed)),
+            error<0>
+        );
+        BOOST_CHECK(executed);
+    }
+
+    // Test primary operation throwing with one cleanup operation
+    {
+        bool executed = false, cleaned_up = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                thrower<0>(executed),
+                operation<void>(cleaned_up)
+            ),
+            error<0>
+        );
+        BOOST_CHECK(executed && cleaned_up);
+    }
+
+    // Test primary operation throwing with two cleanup operations
+    {
+        bool executed = false, cleaned_up1 = false, cleaned_up2 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                thrower<0>(executed),
+                operation<void>(cleaned_up1),
+                operation<void>(cleaned_up2)
+            ), 
+            error<0>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2);
+    }
+
+    // Test primary operation throwing with three cleanup operations
+    {
+        bool executed = false, cleaned_up1 = false, 
+             cleaned_up2 = false, cleaned_up3 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                thrower<0>(executed),
+                operation<void>(cleaned_up1),
+                operation<void>(cleaned_up2),
+                operation<void>(cleaned_up3)
+            ), 
+            error<0>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2 && cleaned_up3);
+    }
+}
+
+void cleanup_throws_test()
+{
+    // Test single cleanup operation that throws
+    {
+        bool executed = false, cleaned_up = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                operation<void>(executed),
+                thrower<1>(cleaned_up)
+            ),
+            error<1>
+        );
+        BOOST_CHECK(executed && cleaned_up);
+    }
+
+    // Test fist of two cleanup operations throwing
+    {
+        bool executed = false, cleaned_up1 = false, cleaned_up2 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                operation<void>(executed),
+                thrower<1>(cleaned_up1),
+                operation<void>(cleaned_up2)
+            ),
+            error<1>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2);
+    }
+
+    // Test second of two cleanup operations throwing
+    {
+        bool executed = false, cleaned_up1 = false, cleaned_up2 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                operation<void>(executed),
+                operation<void>(cleaned_up1),
+                thrower<2>(cleaned_up2)
+            ),
+            error<2>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2);
+    }
+
+    // Test first of three cleanup operations throwing
+    {
+        bool executed = false, cleaned_up1 = false, 
+             cleaned_up2 = false, cleaned_up3 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                operation<void>(executed),
+                thrower<1>(cleaned_up1),
+                operation<void>(cleaned_up2),
+                operation<void>(cleaned_up3)
+            ), 
+            error<1>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2 && cleaned_up3);
+    }
+
+    // Test second of three cleanup operations throwing
+    {
+        bool executed = false, cleaned_up1 = false, 
+             cleaned_up2 = false, cleaned_up3 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                operation<void>(executed),
+                operation<void>(cleaned_up1),
+                thrower<2>(cleaned_up2),
+                operation<void>(cleaned_up3)
+            ), 
+            error<2>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2 && cleaned_up3);
+    }
+
+    // Test third of three cleanup operations throwing
+    {
+        bool executed = false, cleaned_up1 = false, 
+             cleaned_up2 = false, cleaned_up3 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                operation<void>(executed),
+                operation<void>(cleaned_up1),
+                operation<void>(cleaned_up2),
+                thrower<3>(cleaned_up3)
+            ), 
+            error<3>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2 && cleaned_up3);
+    }
+}
+
+void multiple_exceptions_test()
+{
+    // Test primary operation and cleanup operation throwing
+    {
+        bool executed = false, cleaned_up = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                thrower<0>(executed),
+                thrower<1>(cleaned_up)
+            ),
+            error<0>
+        );
+        BOOST_CHECK(executed && cleaned_up);
+    }
+
+    // Test primary operation and first of two cleanup operations throwing
+    {
+        bool executed = false, cleaned_up1 = false, cleaned_up2 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                thrower<0>(executed),
+                thrower<1>(cleaned_up1),
+                operation<void>(cleaned_up2)
+            ),
+            error<0>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2);
+    }
+
+    // Test primary operation and second of two cleanup operations throwing
+    {
+        bool executed = false, cleaned_up1 = false, cleaned_up2 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                thrower<0>(executed),
+                operation<void>(cleaned_up1),
+                thrower<2>(cleaned_up2)
+            ),
+            error<0>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2);
+    }
+
+    // Test two cleanup operations throwing
+    {
+        bool executed = false, cleaned_up1 = false, cleaned_up2 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                operation<void>(executed),
+                thrower<1>(cleaned_up1),
+                thrower<2>(cleaned_up2)
+            ),
+            error<1>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2);
+    }
+
+    // Test primary operation and first of three cleanup operations throwing
+    {
+        bool executed = false, cleaned_up1 = false, 
+             cleaned_up2 = false, cleaned_up3 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                thrower<0>(executed),
+                thrower<1>(cleaned_up1),
+                operation<void>(cleaned_up2),
+                operation<void>(cleaned_up3)
+            ),
+            error<0>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2 && cleaned_up3);
+    }
+
+    // Test primary operation and second of three cleanup operations throwing
+    {
+        bool executed = false, cleaned_up1 = false, 
+             cleaned_up2 = false, cleaned_up3 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                thrower<0>(executed),
+                operation<void>(cleaned_up1),
+                thrower<2>(cleaned_up2),
+                operation<void>(cleaned_up3)
+            ),
+            error<0>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2 && cleaned_up3);
+    }
+
+    // Test primary operation and third of three cleanup operations throwing
+    {
+        bool executed = false, cleaned_up1 = false, 
+             cleaned_up2 = false, cleaned_up3 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                thrower<0>(executed),
+                operation<void>(cleaned_up1),
+                operation<void>(cleaned_up2),
+                thrower<3>(cleaned_up3)
+            ),
+            error<0>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2 && cleaned_up3);
+    }
+
+    // Test first and second of three cleanup operations throwing
+    {
+        bool executed = false, cleaned_up1 = false, 
+             cleaned_up2 = false, cleaned_up3 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                operation<void>(executed),
+                thrower<1>(cleaned_up1),
+                thrower<2>(cleaned_up2),
+                operation<void>(cleaned_up3)
+            ),
+            error<1>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2 && cleaned_up3);
+    }
+
+    // Test first and third of three cleanup operations throwing
+    {
+        bool executed = false, cleaned_up1 = false, 
+             cleaned_up2 = false, cleaned_up3 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                operation<void>(executed),
+                thrower<1>(cleaned_up1),
+                operation<void>(cleaned_up2),
+                thrower<3>(cleaned_up3)
+            ),
+            error<1>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2 && cleaned_up3);
+    }
+
+    // Test second and third of three cleanup operations throwing
+    {
+        bool executed = false, cleaned_up1 = false, 
+             cleaned_up2 = false, cleaned_up3 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                operation<void>(executed),
+                operation<void>(cleaned_up1),
+                thrower<2>(cleaned_up2),
+                thrower<3>(cleaned_up3)
+            ),
+            error<2>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2 && cleaned_up3);
+    }
+
+    // Test three cleanup operations throwing
+    {
+        bool executed = false, cleaned_up1 = false, 
+             cleaned_up2 = false, cleaned_up3 = false;
+        BOOST_CHECK_THROW(
+            execute_all(
+                operation<void>(executed),
+                thrower<1>(cleaned_up1),
+                thrower<2>(cleaned_up2),
+                thrower<3>(cleaned_up3)
+            ),
+            error<1>
+        );
+        BOOST_CHECK(executed && cleaned_up1 && cleaned_up2 && cleaned_up3);
+    }
+}
+
+#define ARRAY_SIZE(ar) (sizeof(ar) / sizeof(ar[0]))
+
+void foreach_test()
+{
+    // Test case where neither of two operations throws
+    {
+        int count = 0;
+        int seq[] = {-1, -1};
+        BOOST_CHECK_NO_THROW(
+            execute_foreach(seq, seq + ARRAY_SIZE(seq), foreach_func(count))
+        );
+        BOOST_CHECK(count == ARRAY_SIZE(seq));
+    }
+
+    // Test case where first of two operations throws
+    {
+        int count = 0;
+        int seq[] = {0, -1};
+        BOOST_CHECK_THROW(
+            execute_foreach(seq, seq + ARRAY_SIZE(seq), foreach_func(count)),
+            error<0>
+        );
+        BOOST_CHECK(count == ARRAY_SIZE(seq));
+    }
+
+    // Test case where second of two operations throws
+    {
+        int count = 0;
+        int seq[] = {-1, 1};
+        BOOST_CHECK_THROW(
+            execute_foreach(seq, seq + ARRAY_SIZE(seq), foreach_func(count)),
+            error<1>
+        );
+        BOOST_CHECK(count == ARRAY_SIZE(seq));
+    }
+
+    // Test case where both of two operations throw
+    {
+        int count = 0;
+        int seq[] = {0, 1};
+        BOOST_CHECK_THROW(
+            execute_foreach(seq, seq + ARRAY_SIZE(seq), foreach_func(count)),
+            error<0>
+        );
+        BOOST_CHECK(count == ARRAY_SIZE(seq));
+    }
+
+    // Test case where none of three operations throws
+    {
+        int count = 0;
+        int seq[] = {-1, -1, -1};
+        BOOST_CHECK_NO_THROW(
+            execute_foreach(seq, seq + ARRAY_SIZE(seq), foreach_func(count))
+        );
+        BOOST_CHECK(count == ARRAY_SIZE(seq));
+    }
+
+    // Test case where first of three operations throw
+    {
+        int count = 0;
+        int seq[] = {0, -1, -1};
+        BOOST_CHECK_THROW(
+            execute_foreach(seq, seq + ARRAY_SIZE(seq), foreach_func(count)),
+            error<0>
+        );
+        BOOST_CHECK(count == ARRAY_SIZE(seq));
+    }
+
+    // Test case where second of three operations throw
+    {
+        int count = 0;
+        int seq[] = {-1, 1, -1};
+        BOOST_CHECK_THROW(
+            execute_foreach(seq, seq + ARRAY_SIZE(seq), foreach_func(count)),
+            error<1>
+        );
+        BOOST_CHECK(count == ARRAY_SIZE(seq));
+    }
+
+    // Test case where third of three operations throw
+    {
+        int count = 0;
+        int seq[] = {-1, -1, 2};
+        BOOST_CHECK_THROW(
+            execute_foreach(seq, seq + ARRAY_SIZE(seq), foreach_func(count)),
+            error<2>
+        );
+        BOOST_CHECK(count == ARRAY_SIZE(seq));
+    }
+
+    // Test case where first and second of three operations throw
+    {
+        int count = 0;
+        int seq[] = {0, 1, -1};
+        BOOST_CHECK_THROW(
+            execute_foreach(seq, seq + ARRAY_SIZE(seq), foreach_func(count)),
+            error<0>
+        );
+        BOOST_CHECK(count == ARRAY_SIZE(seq));
+    }
+
+    // Test case where first and third of three operations throw
+    {
+        int count = 0;
+        int seq[] = {0, -1, 2};
+        BOOST_CHECK_THROW(
+            execute_foreach(seq, seq + ARRAY_SIZE(seq), foreach_func(count)),
+            error<0>
+        );
+        BOOST_CHECK(count == ARRAY_SIZE(seq));
+    }
+
+    // Test case where second and third of three operations throw
+    {
+        int count = 0;
+        int seq[] = {-1, 1, 2};
+        BOOST_CHECK_THROW(
+            execute_foreach(seq, seq + ARRAY_SIZE(seq), foreach_func(count)),
+            error<1>
+        );
+        BOOST_CHECK(count == ARRAY_SIZE(seq));
+    }
+
+    // Test case where three of three operations throw
+    {
+        int count = 0;
+        int seq[] = {0, 1, 2};
+        BOOST_CHECK_THROW(
+            execute_foreach(seq, seq + ARRAY_SIZE(seq), foreach_func(count)),
+            error<0>
+        );
+        BOOST_CHECK(count == ARRAY_SIZE(seq));
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("execute test");
+    test->add(BOOST_TEST_CASE(&success_test));
+    test->add(BOOST_TEST_CASE(&operation_throws_test));
+    test->add(BOOST_TEST_CASE(&cleanup_throws_test));
+    test->add(BOOST_TEST_CASE(&multiple_exceptions_test));
+    test->add(BOOST_TEST_CASE(&foreach_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/file_descriptor_test.cpp b/vendor/pdalboost/libs/iostreams/test/file_descriptor_test.cpp
new file mode 100644
index 0000000..f4fbbcf
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/file_descriptor_test.cpp
@@ -0,0 +1,642 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <fstream>
+#include <fcntl.h>
+#include <boost/iostreams/device/file_descriptor.hpp>
+#include <boost/iostreams/stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+#include "detail/file_handle.hpp"
+
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+namespace pdalboost_ios = pdalboost::iostreams;
+using std::ifstream;
+using pdalboost::unit_test::test_suite;   
+
+void file_descriptor_test()
+{
+
+    typedef stream<file_descriptor_source> fdistream;
+    typedef stream<file_descriptor_sink>   fdostream;
+    typedef stream<file_descriptor>        fdstream;
+
+    test_file  test1;       
+    test_file  test2;       
+                    
+    //--------------Test file_descriptor_source-------------------------------//
+
+    {
+        fdistream  first(file_descriptor_source(test1.name()), 0);
+        ifstream   second(test2.name().c_str());
+        BOOST_CHECK(first->is_open());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from file_descriptor_source in chars with no buffer"
+        );
+        first->close();
+        BOOST_CHECK(!first->is_open());
+    }
+
+    {
+        fdistream  first(file_descriptor_source(test1.name()), 0);
+        ifstream   second(test2.name().c_str());
+        BOOST_CHECK(first->is_open());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from file_descriptor_source in chunks with no buffer"
+        );
+        first->close();
+        BOOST_CHECK(!first->is_open());
+    }
+
+    {
+        file_descriptor_source  file(test1.name());
+        fdistream               first(file);
+        ifstream                second(test2.name().c_str());
+        BOOST_CHECK(first->is_open());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from file_descriptor_source in chars with buffer"
+        );
+        first->close();
+        BOOST_CHECK(!first->is_open());
+    }
+
+    {
+        file_descriptor_source  file(test1.name());
+        fdistream               first(file);
+        ifstream                second(test2.name().c_str());
+        BOOST_CHECK(first->is_open());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from file_descriptor_source in chunks with buffer"
+        );
+        first->close();
+        BOOST_CHECK(!first->is_open());
+    }
+
+    // test illegal flag combinations
+    {
+        BOOST_CHECK_THROW(
+            file_descriptor_source(test1.name(),
+                BOOST_IOS::app),
+            BOOST_IOSTREAMS_FAILURE);
+        BOOST_CHECK_THROW(
+            file_descriptor_source(test1.name(),
+                BOOST_IOS::trunc),
+            BOOST_IOSTREAMS_FAILURE);
+        BOOST_CHECK_THROW(
+            file_descriptor_source(test1.name(),
+                BOOST_IOS::app | BOOST_IOS::trunc),
+            BOOST_IOSTREAMS_FAILURE);
+        BOOST_CHECK_THROW(
+            file_descriptor_source(test1.name(),
+                BOOST_IOS::out),
+            BOOST_IOSTREAMS_FAILURE);
+        BOOST_CHECK_THROW(
+            file_descriptor_source(test1.name(),
+                BOOST_IOS::out | BOOST_IOS::app),
+            BOOST_IOSTREAMS_FAILURE);
+        BOOST_CHECK_THROW(
+            file_descriptor_source(test1.name(),
+                BOOST_IOS::out | BOOST_IOS::trunc),
+            BOOST_IOSTREAMS_FAILURE);
+        BOOST_CHECK_THROW(
+            file_descriptor_source(test1.name(),
+                BOOST_IOS::out | BOOST_IOS::app | BOOST_IOS::trunc),
+            BOOST_IOSTREAMS_FAILURE);
+    }
+
+    //--------------Test file_descriptor_sink---------------------------------//
+
+    {
+        temp_file             temp;
+        file_descriptor_sink  file(temp.name(), BOOST_IOS::trunc);
+        fdostream             out(file, 0);
+        BOOST_CHECK(out->is_open());
+        write_data_in_chars(out);
+        out.close();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test1.name(), temp.name()),
+            "failed writing to file_descriptor_sink in chars with no buffer"
+        );
+        file.close();
+        BOOST_CHECK(!file.is_open());
+    }
+
+    {
+        temp_file             temp;
+        file_descriptor_sink  file(temp.name(), BOOST_IOS::trunc);
+        fdostream             out(file, 0);
+        BOOST_CHECK(out->is_open());
+        write_data_in_chunks(out);
+        out.close();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test1.name(), temp.name()),
+            "failed writing to file_descriptor_sink in chunks with no buffer"
+        );
+        file.close();
+        BOOST_CHECK(!file.is_open());
+    }
+
+    {
+        temp_file             temp;
+        file_descriptor_sink  file(temp.name(), BOOST_IOS::trunc);
+        fdostream             out(file);
+        BOOST_CHECK(out->is_open());
+        write_data_in_chars(out);
+        out.close();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test1.name(), temp.name()),
+            "failed writing to file_descriptor_sink in chars with buffer"
+        );
+        file.close();
+        BOOST_CHECK(!file.is_open());
+    }
+
+    {
+        temp_file             temp;
+        file_descriptor_sink  file(temp.name(), BOOST_IOS::trunc);
+        fdostream             out(file);
+        BOOST_CHECK(out->is_open());
+        write_data_in_chunks(out);
+        out.close();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test1.name(), temp.name()),
+            "failed writing to file_descriptor_sink in chunks with buffer"
+        );
+        file.close();
+        BOOST_CHECK(!file.is_open());
+    }
+                                                    
+    {
+        temp_file             temp;
+        // set up the tests
+        {
+            file_descriptor_sink  file(temp.name(), BOOST_IOS::trunc);
+            fdostream             out(file);
+            write_data_in_chunks(out);
+            out.close();
+            file.close();
+        }
+        // test std::ios_base::app
+        {
+            file_descriptor_sink  file(temp.name(), BOOST_IOS::app);
+            fdostream             out(file);
+            BOOST_CHECK(out->is_open());
+            write_data_in_chars(out);
+            out.close();
+            std::string expected(narrow_data());
+            expected += narrow_data();
+            BOOST_CHECK_MESSAGE(
+                compare_container_and_file(expected, temp.name()),
+                "failed writing to file_descriptor_sink in append mode"
+            );
+            file.close();
+            BOOST_CHECK(!file.is_open());
+        }
+        // test std::ios_base::trunc
+        {
+            file_descriptor_sink  file(temp.name(), BOOST_IOS::trunc);
+            fdostream             out(file);
+            BOOST_CHECK(out->is_open());
+            write_data_in_chars(out);
+            out.close();
+            BOOST_CHECK_MESSAGE(
+                compare_files(test1.name(), temp.name()),
+                "failed writing to file_descriptor_sink in trunc mode"
+            );
+            file.close();
+            BOOST_CHECK(!file.is_open());
+        }
+        
+        // test illegal flag combinations
+        {
+            BOOST_CHECK_THROW(
+                file_descriptor_sink(temp.name(),
+                    BOOST_IOS::trunc | BOOST_IOS::app),
+                BOOST_IOSTREAMS_FAILURE);
+            BOOST_CHECK_THROW(
+                file_descriptor_sink(temp.name(),
+                    BOOST_IOS::in),
+                BOOST_IOSTREAMS_FAILURE);
+            BOOST_CHECK_THROW(
+                file_descriptor_sink(temp.name(),
+                    BOOST_IOS::in | BOOST_IOS::app),
+                BOOST_IOSTREAMS_FAILURE);
+            BOOST_CHECK_THROW(
+                file_descriptor_sink(temp.name(),
+                    BOOST_IOS::in | BOOST_IOS::trunc),
+                BOOST_IOSTREAMS_FAILURE);
+            BOOST_CHECK_THROW(
+                file_descriptor_sink(temp.name(),
+                    BOOST_IOS::in | BOOST_IOS::trunc | BOOST_IOS::app),
+                BOOST_IOSTREAMS_FAILURE);
+        }
+    }
+
+    //--Test seeking with file_descriptor_source and file_descriptor_sink-----//
+
+    test_file test3;
+    {
+        file_descriptor_sink  sink(test3.name());
+        fdostream             out(sink);
+        BOOST_CHECK(out->is_open());
+        BOOST_CHECK_MESSAGE(
+            test_output_seekable(out),
+            "failed seeking within a file_descriptor_sink"
+        );
+        out->close();
+        BOOST_CHECK(!out->is_open());
+
+        file_descriptor_source  source(test3.name());
+        fdistream               in(source);
+        BOOST_CHECK(in->is_open());
+        BOOST_CHECK_MESSAGE(
+            test_input_seekable(in),
+            "failed seeking within a file_descriptor_source"
+        );
+        in->close();
+        BOOST_CHECK(!in->is_open());
+    }
+
+    //--------------Test file_descriptor--------------------------------------//
+
+    {
+        temp_file                  temp;
+        file_descriptor            file( temp.name(),
+                                         BOOST_IOS::in | 
+                                         BOOST_IOS::out |
+                                         BOOST_IOS::trunc | 
+                                         BOOST_IOS::binary );
+        fdstream                   io(file, BUFSIZ);
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chars(io),
+            "failed seeking within a file_descriptor, in chars"
+        );
+    }
+
+    {
+        temp_file                  temp;
+        file_descriptor            file( temp.name(),
+                                         BOOST_IOS::in | 
+                                         BOOST_IOS::out |
+                                         BOOST_IOS::trunc | 
+                                         BOOST_IOS::binary );
+        fdstream                   io(file, BUFSIZ);
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chunks(io),
+            "failed seeking within a file_descriptor, in chunks"
+        );
+    }
+    
+    //--------------Test read-only file_descriptor----------------------------//
+    
+    {
+        fdstream   first(file_descriptor(test1.name(), BOOST_IOS::in), 0);
+        ifstream   second(test2.name().c_str());
+        BOOST_CHECK(first->is_open());
+        write_data_in_chars(first);
+        BOOST_CHECK(first.fail());
+        first.clear();
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from file_descriptor in chars with no buffer"
+        );
+        first->close();
+        BOOST_CHECK(!first->is_open());
+    }
+
+    {
+        fdstream   first(file_descriptor(test1.name(), BOOST_IOS::in), 0);
+        ifstream   second(test2.name().c_str());
+        BOOST_CHECK(first->is_open());
+        write_data_in_chunks(first);
+        BOOST_CHECK(first.fail());
+        first.clear();
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from file_descriptor in chunks with no buffer"
+        );
+        first->close();
+        BOOST_CHECK(!first->is_open());
+    }
+
+    {
+        file_descriptor         file(test1.name(), BOOST_IOS::in);
+        fdstream                first(file);
+        ifstream                second(test2.name().c_str());
+        BOOST_CHECK(first->is_open());
+        write_data_in_chars(first);
+        BOOST_CHECK(first.fail());
+        first.clear();
+        first.seekg(0, BOOST_IOS::beg);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from file_descriptor in chars with buffer"
+        );
+        first->close();
+        BOOST_CHECK(!first->is_open());
+    }
+
+    {
+        file_descriptor         file(test1.name(), BOOST_IOS::in);
+        fdstream                first(file);
+        ifstream                second(test2.name().c_str());
+        BOOST_CHECK(first->is_open());
+        write_data_in_chunks(first);
+        BOOST_CHECK(first.fail());
+        first.clear();
+        first.seekg(0, BOOST_IOS::beg);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from file_descriptor in chunks with buffer"
+        );
+        first->close();
+        BOOST_CHECK(!first->is_open());
+    }
+
+    //--------------Test write-only file_descriptor---------------------------//
+    {
+        temp_file             temp;
+        file_descriptor       file( temp.name(),
+                                    BOOST_IOS::out |
+                                    BOOST_IOS::trunc );
+        fdstream              out(file, 0);
+        BOOST_CHECK(out->is_open());
+        out.get();
+        BOOST_CHECK(out.fail());
+        out.clear();
+        write_data_in_chars(out);
+        out.seekg(0, BOOST_IOS::beg);
+        out.get();
+        BOOST_CHECK(out.fail());
+        out.clear();
+        out.close();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test1.name(), temp.name()),
+            "failed writing to file_descriptor in chars with no buffer"
+        );
+        file.close();
+        BOOST_CHECK(!file.is_open());
+    }
+
+    {
+        temp_file             temp;
+        file_descriptor       file( temp.name(),
+                                    BOOST_IOS::out |
+                                    BOOST_IOS::trunc );
+        fdstream              out(file, 0);
+        BOOST_CHECK(out->is_open());
+        out.get();
+        BOOST_CHECK(out.fail());
+        out.clear();
+        write_data_in_chunks(out);
+        out.seekg(0, BOOST_IOS::beg);
+        out.get();
+        BOOST_CHECK(out.fail());
+        out.clear();
+        out.close();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test1.name(), temp.name()),
+            "failed writing to file_descriptor_sink in chunks with no buffer"
+        );
+        file.close();
+        BOOST_CHECK(!file.is_open());
+    }
+
+    {
+        temp_file             temp;
+        file_descriptor       file( temp.name(),
+                                    BOOST_IOS::out |
+                                    BOOST_IOS::trunc );
+        fdstream              out(file);
+        BOOST_CHECK(out->is_open());
+        out.get();
+        BOOST_CHECK(out.fail());
+        out.clear();
+        write_data_in_chars(out);
+        out.seekg(0, BOOST_IOS::beg);
+        out.get();
+        BOOST_CHECK(out.fail());
+        out.clear();
+        out.close();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test1.name(), temp.name()),
+            "failed writing to file_descriptor_sink in chars with buffer"
+        );
+        file.close();
+        BOOST_CHECK(!file.is_open());
+    }
+
+    {
+        temp_file             temp;
+        file_descriptor       file( temp.name(),
+                                    BOOST_IOS::out |
+                                    BOOST_IOS::trunc );
+        fdstream              out(file);
+        BOOST_CHECK(out->is_open());
+        out.get();
+        BOOST_CHECK(out.fail());
+        out.clear();
+        write_data_in_chunks(out);
+        out.seekg(0, BOOST_IOS::beg);
+        out.get();
+        BOOST_CHECK(out.fail());
+        out.clear();
+        out.close();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test1.name(), temp.name()),
+            "failed writing to file_descriptor_sink in chunks with buffer"
+        );
+        file.close();
+        BOOST_CHECK(!file.is_open());
+    }
+
+    // test illegal flag combinations
+    {
+        BOOST_CHECK_THROW(
+            file_descriptor(test1.name(),
+                BOOST_IOS::openmode(0)),
+            BOOST_IOSTREAMS_FAILURE);
+        BOOST_CHECK_THROW(
+            file_descriptor(test1.name(),
+                BOOST_IOS::app),
+            BOOST_IOSTREAMS_FAILURE);
+        BOOST_CHECK_THROW(
+            file_descriptor(test1.name(),
+                BOOST_IOS::trunc),
+            BOOST_IOSTREAMS_FAILURE);
+        BOOST_CHECK_THROW(
+            file_descriptor(test1.name(),
+                BOOST_IOS::app | BOOST_IOS::trunc),
+            BOOST_IOSTREAMS_FAILURE);
+        BOOST_CHECK_THROW(
+            file_descriptor(test1.name(),
+                BOOST_IOS::in | BOOST_IOS::app),
+            BOOST_IOSTREAMS_FAILURE);
+        BOOST_CHECK_THROW(
+            file_descriptor(test1.name(),
+                BOOST_IOS::in | BOOST_IOS::trunc),
+            BOOST_IOSTREAMS_FAILURE);
+        BOOST_CHECK_THROW(
+            file_descriptor(test1.name(),
+                BOOST_IOS::in | BOOST_IOS::app | BOOST_IOS::trunc),
+            BOOST_IOSTREAMS_FAILURE);
+        BOOST_CHECK_THROW(
+            file_descriptor(test1.name(),
+                BOOST_IOS::out | BOOST_IOS::app | BOOST_IOS::trunc),
+            BOOST_IOSTREAMS_FAILURE);
+        BOOST_CHECK_THROW(
+            file_descriptor(test1.name(),
+                BOOST_IOS::in | BOOST_IOS::out | BOOST_IOS::app),
+            BOOST_IOSTREAMS_FAILURE);
+        BOOST_CHECK_THROW(
+            file_descriptor(test1.name(),
+                BOOST_IOS::in |
+                BOOST_IOS::out |
+                BOOST_IOS::app |
+                BOOST_IOS::trunc),
+            BOOST_IOSTREAMS_FAILURE);
+    }
+}
+
+template <class FileDescriptor>
+void file_handle_test_impl(FileDescriptor*)
+{
+    test_file  test1;       
+    test_file  test2;       
+
+    {
+        pdalboost_ios::detail::file_handle handle = open_file_handle(test1.name());
+        {
+            FileDescriptor device1(handle, pdalboost_ios::never_close_handle);
+            BOOST_CHECK(device1.handle() == handle);
+        }
+        BOOST_CHECK_HANDLE_OPEN(handle);
+        close_file_handle(handle);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle = open_file_handle(test1.name());
+        {
+            FileDescriptor device1(handle, pdalboost_ios::close_handle);
+            BOOST_CHECK(device1.handle() == handle);
+        }
+        BOOST_CHECK_HANDLE_CLOSED(handle);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle = open_file_handle(test1.name());
+        FileDescriptor device1(handle, pdalboost_ios::never_close_handle);
+        BOOST_CHECK(device1.handle() == handle);
+        device1.close();
+        BOOST_CHECK(!device1.is_open());
+        BOOST_CHECK_HANDLE_OPEN(handle);
+        close_file_handle(handle);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle = open_file_handle(test1.name());
+        FileDescriptor device1(handle, pdalboost_ios::close_handle);
+        BOOST_CHECK(device1.handle() == handle);
+        device1.close();
+        BOOST_CHECK(!device1.is_open());
+        BOOST_CHECK_HANDLE_CLOSED(handle);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle1 = open_file_handle(test1.name());
+        pdalboost_ios::detail::file_handle handle2 = open_file_handle(test2.name());
+        {
+            FileDescriptor device1(handle1, pdalboost_ios::never_close_handle);
+            BOOST_CHECK(device1.handle() == handle1);
+            device1.open(handle2, pdalboost_ios::never_close_handle);
+            BOOST_CHECK(device1.handle() == handle2);
+        }
+        BOOST_CHECK_HANDLE_OPEN(handle1);
+        BOOST_CHECK_HANDLE_OPEN(handle2);
+        close_file_handle(handle1);
+        close_file_handle(handle2);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle1 = open_file_handle(test1.name());
+        pdalboost_ios::detail::file_handle handle2 = open_file_handle(test2.name());
+        {
+            FileDescriptor device1(handle1, pdalboost_ios::close_handle);
+            BOOST_CHECK(device1.handle() == handle1);
+            device1.open(handle2, pdalboost_ios::close_handle);
+            BOOST_CHECK(device1.handle() == handle2);
+            BOOST_CHECK_HANDLE_CLOSED(handle1);
+            BOOST_CHECK_HANDLE_OPEN(handle2);
+        }
+        BOOST_CHECK_HANDLE_CLOSED(handle1);
+        BOOST_CHECK_HANDLE_CLOSED(handle2);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle1 = open_file_handle(test1.name());
+        pdalboost_ios::detail::file_handle handle2 = open_file_handle(test2.name());
+        {
+            FileDescriptor device1(handle1, pdalboost_ios::close_handle);
+            BOOST_CHECK(device1.handle() == handle1);
+            device1.open(handle2, pdalboost_ios::never_close_handle);
+            BOOST_CHECK(device1.handle() == handle2);
+            BOOST_CHECK_HANDLE_CLOSED(handle1);
+            BOOST_CHECK_HANDLE_OPEN(handle2);
+        }
+        BOOST_CHECK_HANDLE_CLOSED(handle1);
+        BOOST_CHECK_HANDLE_OPEN(handle2);
+        close_file_handle(handle2);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle = open_file_handle(test1.name());
+        {
+            FileDescriptor device1;
+            BOOST_CHECK(!device1.is_open());
+            device1.open(handle, pdalboost_ios::never_close_handle);
+            BOOST_CHECK(device1.handle() == handle);
+            BOOST_CHECK_HANDLE_OPEN(handle);
+        }
+        BOOST_CHECK_HANDLE_OPEN(handle);
+        close_file_handle(handle);
+    }
+
+    {
+        pdalboost_ios::detail::file_handle handle = open_file_handle(test1.name());
+        {
+            FileDescriptor device1;
+            BOOST_CHECK(!device1.is_open());
+            device1.open(handle, pdalboost_ios::close_handle);
+            BOOST_CHECK(device1.handle() == handle);
+            BOOST_CHECK_HANDLE_OPEN(handle);
+        }
+        BOOST_CHECK_HANDLE_CLOSED(handle);
+    }
+}
+
+void file_handle_test()
+{
+    file_handle_test_impl((pdalboost_ios::file_descriptor*) 0);
+    file_handle_test_impl((pdalboost_ios::file_descriptor_source*) 0);
+    file_handle_test_impl((pdalboost_ios::file_descriptor_sink*) 0);
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("file_descriptor test");
+    test->add(BOOST_TEST_CASE(&file_descriptor_test));
+    test->add(BOOST_TEST_CASE(&file_handle_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/file_test.cpp b/vendor/pdalboost/libs/iostreams/test/file_test.cpp
new file mode 100644
index 0000000..1739a28
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/file_test.cpp
@@ -0,0 +1,63 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <boost/iostreams/device/file.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using std::ifstream;
+using pdalboost::unit_test::test_suite;   
+
+void file_test()
+{
+    test_file  test;   
+                    
+    //--------------Test file_source------------------------------------------//
+
+    {
+        file_source f(test.name());
+        BOOST_CHECK(f.is_open());
+        f.close();
+        BOOST_CHECK(!f.is_open());
+        f.open(test.name());
+        BOOST_CHECK(f.is_open());
+    }
+
+    //--------------Test file_sink--------------------------------------------//
+                                                    
+    {
+        file_sink f(test.name());
+        BOOST_CHECK(f.is_open());
+        f.close();
+        BOOST_CHECK(!f.is_open());
+        f.open(test.name());
+        BOOST_CHECK(f.is_open());
+    }
+
+    //--------------Test file-------------------------------------------------//
+                                                    
+    {
+        file f(test.name());
+        BOOST_CHECK(f.is_open());
+        f.close();
+        BOOST_CHECK(!f.is_open());
+        f.open(test.name());
+        BOOST_CHECK(f.is_open());
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("file test");
+    test->add(BOOST_TEST_CASE(&file_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/filter_test.cpp b/vendor/pdalboost/libs/iostreams/test/filter_test.cpp
new file mode 100644
index 0000000..dc4ce92
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/filter_test.cpp
@@ -0,0 +1,98 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <string>
+#include <boost/iostreams/filter/test.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/filters.hpp"
+
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;
+
+const std::string lower = 
+    "in addition to providing an abstract framework the "
+    "library provides a number of concrete filters, sources "
+    "and sinks which serve as example applications of the "
+    "library but are also useful in their own right. these "
+    "include components for accessing memory-mapped files, "
+    "for file access via operating system file descriptors, "
+    "for code conversion, for text filtering with regular "
+    "expressions, for line-ending conversion and for "
+    "compression and decompression in the zlib, gzip and "
+    "bzip2 formats.";
+
+const std::string upper = 
+    "IN ADDITION TO PROVIDING AN ABSTRACT FRAMEWORK THE "
+    "LIBRARY PROVIDES A NUMBER OF CONCRETE FILTERS, SOURCES "
+    "AND SINKS WHICH SERVE AS EXAMPLE APPLICATIONS OF THE "
+    "LIBRARY BUT ARE ALSO USEFUL IN THEIR OWN RIGHT. THESE "
+    "INCLUDE COMPONENTS FOR ACCESSING MEMORY-MAPPED FILES, "
+    "FOR FILE ACCESS VIA OPERATING SYSTEM FILE DESCRIPTORS, "
+    "FOR CODE CONVERSION, FOR TEXT FILTERING WITH REGULAR "
+    "EXPRESSIONS, FOR LINE-ENDING CONVERSION AND FOR "
+    "COMPRESSION AND DECOMPRESSION IN THE ZLIB, GZIP AND "
+    "BZIP2 FORMATS.";
+
+struct toupper_dual_use_filter : public dual_use_filter {
+    template<typename Source>
+    int get(Source& s) 
+    { 
+        int c = pdalboost::iostreams::get(s);
+        return c != EOF && c != WOULD_BLOCK ?
+            std::toupper((unsigned char) c) :
+            c;
+    }
+    template<typename Sink>
+    bool put(Sink& s, char c)
+    { 
+        return pdalboost::iostreams::put(
+                   s, (char) std::toupper((unsigned char) c)
+               ); 
+    }
+};
+
+struct tolower_dual_use_filter : public dual_use_filter {
+    template<typename Source>
+    int get(Source& s) 
+    { 
+        int c = pdalboost::iostreams::get(s);
+        return c != EOF && c != WOULD_BLOCK ?
+            std::tolower((unsigned char) c) :
+            c;
+    }
+    template<typename Sink>
+    bool put(Sink& s, char c)
+    { 
+        return pdalboost::iostreams::put(
+                   s, (char) std::tolower((unsigned char) c)
+               ); 
+    }
+};
+
+void filter_test()
+{
+    BOOST_CHECK(test_input_filter(toupper_filter(), lower, upper));
+    BOOST_CHECK(test_input_filter(toupper_multichar_filter(), lower, upper));
+    BOOST_CHECK(test_input_filter(toupper_dual_use_filter(), lower, upper));
+    BOOST_CHECK(test_output_filter(tolower_filter(), upper, lower));
+    BOOST_CHECK(test_output_filter(tolower_multichar_filter(), upper, lower));
+    BOOST_CHECK(test_output_filter(tolower_dual_use_filter(), upper, lower));
+    BOOST_CHECK(test_filter_pair(tolower_filter(), toupper_filter(), upper));
+    BOOST_CHECK(
+        test_filter_pair( tolower_multichar_filter(), 
+                          toupper_multichar_filter(), upper )
+    );
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("filter test");
+    test->add(BOOST_TEST_CASE(&filter_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/filtering_stream_flush_test.hpp b/vendor/pdalboost/libs/iostreams/test/filtering_stream_flush_test.hpp
new file mode 100644
index 0000000..dd5879e
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/filtering_stream_flush_test.hpp
@@ -0,0 +1,36 @@
+// (C) Copyright 2011 Steven Watanabe
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <fstream>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void test_filtering_ostream_flush()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    lowercase_file lower;
+
+    {
+        temp_file          dest;
+        filtering_ostream  out;
+        out.push(tolower_filter());
+        out.push(file_sink(dest.name(), out_mode));
+        write_data_in_chars(out);
+        out.flush();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), lower.name()),
+            "failed writing to a filtering_ostream in chars with an "
+            "output filter"
+        );
+    }
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/filtering_stream_test.cpp b/vendor/pdalboost/libs/iostreams/test/filtering_stream_test.cpp
new file mode 100644
index 0000000..4b109cd
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/filtering_stream_test.cpp
@@ -0,0 +1,52 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <boost/test/unit_test.hpp>
+#include "read_input_test.hpp"
+#include "read_bidir_test.hpp"
+#include "read_seekable_test.hpp"
+#include "read_bidir_streambuf_test.hpp"
+#include "read_input_istream_test.hpp"
+#include "write_output_test.hpp"
+#include "write_bidir_test.hpp"
+#include "write_seekable_test.hpp"
+#include "write_output_iterator_test.hpp"
+#include "write_bidir_streambuf_test.hpp"
+#include "write_output_ostream_test.hpp"
+#include "read_input_filter_test.hpp"
+#include "read_bidir_filter_test.hpp"
+#include "write_output_filter_test.hpp"
+#include "write_bidir_filter_test.hpp"
+#include "seek_test.hpp"
+#include "putback_test.hpp"
+#include "filtering_stream_flush_test.hpp"
+
+using pdalboost::unit_test::test_suite;
+
+test_suite* init_unit_test_suite(int, char* [])
+{
+    test_suite* test = BOOST_TEST_SUITE("filtering_stream test");
+    test->add(BOOST_TEST_CASE(&read_input_test));
+    test->add(BOOST_TEST_CASE(&read_bidirectional_test));
+    test->add(BOOST_TEST_CASE(&read_seekable_test));
+    test->add(BOOST_TEST_CASE(&read_bidirectional_streambuf_test));
+    test->add(BOOST_TEST_CASE(&read_input_istream_test));
+    test->add(BOOST_TEST_CASE(&write_output_test));
+    test->add(BOOST_TEST_CASE(&write_bidirectional_test));
+    test->add(BOOST_TEST_CASE(&write_seekable_test));
+    test->add(BOOST_TEST_CASE(&write_output_iterator_test));
+    test->add(BOOST_TEST_CASE(&write_bidirectional_streambuf_test));
+    test->add(BOOST_TEST_CASE(&write_output_ostream_test));
+    test->add(BOOST_TEST_CASE(&read_input_filter_test));
+    test->add(BOOST_TEST_CASE(&read_bidirectional_filter_test));
+    test->add(BOOST_TEST_CASE(&write_output_filter_test));
+    test->add(BOOST_TEST_CASE(&write_bidirectional_filter_test));
+    test->add(BOOST_TEST_CASE(&seek_test));
+    test->add(BOOST_TEST_CASE(&putback_test));
+    test->add(BOOST_TEST_CASE(&test_filtering_ostream_flush));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/finite_state_filter_test.cpp b/vendor/pdalboost/libs/iostreams/test/finite_state_filter_test.cpp
new file mode 100644
index 0000000..158df3c
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/finite_state_filter_test.cpp
@@ -0,0 +1,182 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_LOCALE
+# error std::locale not supported on this platform
+#else
+
+# include <map>
+# include <boost/iostreams/detail/ios.hpp>  // failure.
+# include <boost/iostreams/filter/test.hpp>
+# include <boost/mpl/vector.hpp>
+# include <boost/test/test_tools.hpp>
+# include <boost/test/unit_test.hpp>
+# include "../example/finite_state_filter.hpp"
+
+using pdalboost::unit_test::test_suite;
+namespace io = pdalboost::iostreams;
+
+const std::string posix = // 'unix' is sometimes a macro.
+    "When I was one-and-twenty\n"
+    "I heard a wise man say,\n"
+    "'Give crowns and pounds and guineas\n"
+    "But not your heart away;\n"
+    "\n"
+    "Give pearls away and rubies\n"
+    "But keep your fancy free.'\n"
+    "But I was one-and-twenty,\n"
+    "No use to talk to me.\n"
+    "\n"
+    "When I was one-and-twenty\n"
+    "I heard him say again,\n"
+    "'The heart out of the bosom\n"
+    "Was never given in vain;\n"
+    "'Tis paid with sighs a plenty\n"
+    "And sold for endless rue.'\n"
+    "And I am two-and-twenty,\n"
+    "And oh, 'tis true, 'tis true.";
+
+const std::string dos =
+    "When I was one-and-twenty\r\n"
+    "I heard a wise man say,\r\n"
+    "'Give crowns and pounds and guineas\r\n"
+    "But not your heart away;\r\n"
+    "\r\n"
+    "Give pearls away and rubies\r\n"
+    "But keep your fancy free.'\r\n"
+    "But I was one-and-twenty,\r\n"
+    "No use to talk to me.\r\n"
+    "\r\n"
+    "When I was one-and-twenty\r\n"
+    "I heard him say again,\r\n"
+    "'The heart out of the bosom\r\n"
+    "Was never given in vain;\r\n"
+    "'Tis paid with sighs a plenty\r\n"
+    "And sold for endless rue.'\r\n"
+    "And I am two-and-twenty,\r\n"
+    "And oh, 'tis true, 'tis true.";
+
+const std::string comments =
+    "When I was /*one-and-twenty\n"
+    "I he*/ard a wise/ man say,\n"
+    "'Give cr//*owns *and po**/unds and guineas\n"
+    "But n*/ot yo*/ur he/*a*/rt /**/away;\n";
+
+const std::string no_comments =
+    "When I was "
+    "ard a wise/ man say,\n"
+    "'Give cr/unds and guineas\n"
+    "But n*/ot yo*/ur hert away;\n";
+
+struct identity_fsm
+    : io::finite_state_machine<identity_fsm, char>
+{
+    void on_any(char c) { push(c); }
+    typedef pdalboost::mpl::vector0<> transition_table;
+};
+
+struct dos2unix_fsm : io::finite_state_machine<dos2unix_fsm> {
+    BOOST_IOSTREAMS_FSM(dos2unix_fsm) // Define skip and push.
+    typedef dos2unix_fsm self;
+    typedef pdalboost::mpl::vector<
+                row<initial_state, is<'\r'>, initial_state, &self::skip>,
+                row<initial_state, is_any,   initial_state, &self::push>
+            > transition_table;
+};
+
+struct unix2dos_fsm : io::finite_state_machine<unix2dos_fsm> {
+    BOOST_IOSTREAMS_FSM(unix2dos_fsm) // Define skip and push.
+    typedef unix2dos_fsm self;
+
+    void on_lf(char) { push('\r'); push('\n'); }
+
+    typedef pdalboost::mpl::vector<
+                row<initial_state, is<'\n'>, initial_state, &self::on_lf>,
+                row<initial_state, is_any,   initial_state, &self::push>
+            > transition_table;
+};
+
+struct uncommenting_fsm : io::finite_state_machine<uncommenting_fsm> {
+    BOOST_IOSTREAMS_FSM(uncommenting_fsm) // Define skip and push.
+    typedef uncommenting_fsm self;
+
+    static const int no_comment   = initial_state;
+    static const int pre_comment  = no_comment + 1;
+    static const int comment      = pre_comment + 1;
+    static const int post_comment = comment + 1;
+
+    void push_slash(char c) { push('/'); push(c); }
+
+    typedef pdalboost::mpl::vector<
+                row<no_comment,   is<'/'>, pre_comment,  &self::skip>,
+                row<no_comment,   is_any,  no_comment,   &self::push>,
+                row<pre_comment,  is<'*'>, comment,      &self::skip>,
+                row<pre_comment,  is<'/'>, pre_comment,  &self::push>,
+                row<pre_comment,  is_any,  no_comment,   &self::push_slash>,
+                row<comment,      is<'*'>, post_comment, &self::skip>,
+                row<comment,      is_any,  comment,      &self::skip>,
+                row<post_comment, is<'/'>, no_comment,   &self::skip>,
+                row<post_comment, is<'*'>, post_comment, &self::skip>,
+                row<post_comment, is_any,  comment,      &self::skip>
+            > transition_table;
+};
+
+void finite_state_filter_test()
+{
+    using namespace std;
+
+    typedef io::finite_state_filter<identity_fsm>      identity_filter;
+    typedef io::finite_state_filter<dos2unix_fsm>      dos2unix_filter;
+    typedef io::finite_state_filter<unix2dos_fsm>      unix2dos_filter;
+    typedef io::finite_state_filter<uncommenting_fsm>  uncommenting_filter;
+
+        // Test identity_filter.
+
+    BOOST_CHECK(
+        io::test_input_filter(identity_filter(), dos, dos)
+    );
+    BOOST_CHECK(
+        io::test_output_filter(identity_filter(), dos, dos)
+    );
+
+        // Test dos2unix_filter.
+
+    BOOST_CHECK(
+        io::test_input_filter(dos2unix_filter(), dos, posix)
+    );
+    BOOST_CHECK(
+        io::test_output_filter(dos2unix_filter(), dos, posix)
+    );
+
+        // Test unix2dos_filter.
+
+    BOOST_CHECK(
+        io::test_input_filter(unix2dos_filter(), posix, dos)
+    );
+    BOOST_CHECK(
+        io::test_output_filter(unix2dos_filter(), posix, dos)
+    );
+
+        // Test uncommenting_filter.
+
+    BOOST_CHECK(
+        io::test_input_filter(uncommenting_filter(), comments, no_comments)
+    );
+    BOOST_CHECK(
+        io::test_output_filter(uncommenting_filter(), comments, no_comments)
+    );
+}
+
+test_suite* init_unit_test_suite(int, char* [])
+{
+    test_suite* test = BOOST_TEST_SUITE("example test");
+    test->add(BOOST_TEST_CASE(&finite_state_filter_test));
+    return test;
+}
+
+#endif // #ifdef BOOST_NO_STD_LOCALE //---------------------------------------//
diff --git a/vendor/pdalboost/libs/iostreams/test/flush_test.cpp b/vendor/pdalboost/libs/iostreams/test/flush_test.cpp
new file mode 100644
index 0000000..4e4b59c
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/flush_test.cpp
@@ -0,0 +1,145 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <algorithm>  // equal.
+#include <fstream>
+#include <boost/iostreams/device/back_inserter.hpp>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/device/null.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/iostreams/stream.hpp>
+#include <boost/iostreams/operations.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>  
+#include "detail/filters.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;
+
+void flush_test()
+{
+    {
+        stream_buffer<null_sink> null;
+        null.open(null_sink());
+        BOOST_CHECK_MESSAGE( 
+            iostreams::flush(null), 
+            "failed flushing stream_buffer"
+        );
+        BOOST_CHECK_MESSAGE( 
+            null.strict_sync(), 
+            "failed strict-syncing stream_buffer with "
+            "non-flushable resource"
+        );
+    }
+
+    {
+        stream<null_sink> null;
+        null.open(null_sink());
+        BOOST_CHECK_MESSAGE( 
+            iostreams::flush(null), 
+            "failed flushing stream"
+        );
+        BOOST_CHECK_MESSAGE( 
+            null.strict_sync(), 
+            "failed strict-syncing stream with "
+            "non-flushable resource"
+        );
+    }
+
+    {
+        filtering_ostream null;
+        null.push(null_sink());
+        BOOST_CHECK_MESSAGE( 
+            iostreams::flush(null), 
+            "failed flushing filtering_ostream"
+        );
+        BOOST_CHECK_MESSAGE( 
+            null.strict_sync(), 
+            "failed strict-syncing filtering_ostream with "
+            "non-flushable resource"
+        );
+    }
+
+    {
+        filtering_ostream null;
+        null.push(tolower_filter());
+        null.push(null_sink());
+        BOOST_CHECK_MESSAGE( 
+            iostreams::flush(null), 
+            "failed flushing filtering_ostream with non-flushable filter"
+        );
+        BOOST_CHECK_MESSAGE( 
+            !null.strict_sync(), 
+            "strict-syncing filtering_ostream with "
+            "non-flushable filter succeeded"
+        );
+    }
+
+    {
+        vector<char> dest1;
+        vector<char> dest2;
+        filtering_ostream out;
+        out.set_auto_close(false);
+        out.push(flushable_output_filter());
+
+        // Write to dest1.
+        out.push(iostreams::back_inserter(dest1));
+        write_data_in_chunks(out);
+        out.flush();
+
+        // Write to dest2.
+        out.pop();
+        out.push(iostreams::back_inserter(dest2));
+        write_data_in_chunks(out);
+        out.flush();
+
+        BOOST_CHECK_MESSAGE(
+            dest1.size() == dest2.size() && 
+            std::equal(dest1.begin(), dest1.end(), dest2.begin()),
+            "failed flush filtering_ostream with auto_close disabled"
+        );
+    }
+
+    {
+        vector<char> dest1;
+        vector<char> dest2;
+        filtering_ostream out;
+        out.set_auto_close(false);
+        out.push(flushable_output_filter());
+        out.push(flushable_output_filter());
+
+        // Write to dest1.
+        out.push(iostreams::back_inserter(dest1));
+        write_data_in_chunks(out);
+        out.flush();
+
+        // Write to dest2.
+        out.pop();
+        out.push(iostreams::back_inserter(dest2));
+        write_data_in_chunks(out);
+        out.flush();
+
+        BOOST_CHECK_MESSAGE(
+            dest1.size() == dest2.size() && 
+            std::equal(dest1.begin(), dest1.end(), dest2.begin()),
+            "failed flush filtering_ostream with two flushable filters "
+            "with auto_close disabled"
+        );
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("flush test");
+    test->add(BOOST_TEST_CASE(&flush_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/grep_test.cpp b/vendor/pdalboost/libs/iostreams/test/grep_test.cpp
new file mode 100644
index 0000000..3f3ffaa
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/grep_test.cpp
@@ -0,0 +1,282 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+
+ * File:        libs/iostreams/test/grep_test.cpp
+ * Date:        Mon May 26 17:48:45 MDT 2008
+ * Copyright:   2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ *
+ * Tests the class template basic_grep_filter.
+ */
+
+#include <iostream>
+
+#include <boost/config.hpp>  // Make sure ptrdiff_t is in std.
+#include <algorithm>
+#include <cstddef>           // std::ptrdiff_t
+#include <string>
+#include <boost/iostreams/compose.hpp>
+#include <boost/iostreams/copy.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/device/back_inserter.hpp>
+#include <boost/iostreams/filter/grep.hpp>
+#include <boost/iostreams/filter/test.hpp>
+#include <boost/ref.hpp>
+#include <boost/regex.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+namespace io = pdalboost::iostreams;
+using pdalboost::unit_test::test_suite;
+
+// List of addresses of US Appeals Courts, from uscourts.gov
+std::string addresses =
+    "John Joseph Moakley United States Courthouse, Suite 2500\n"
+    "One Courthouse Way\n"
+    "Boston, MA 02210-3002\n"
+    "\n"
+    "Thurgood Marshall United States Courthouse, 18th Floor\n"
+    "40 Centre Street\n"
+    "New York, NY 10007-1501\n"
+    "\n"
+    "21400 James A. Byrne United States Courthouse\n"
+    "601 Market Street\n"
+    "Philadelphia, PA 19106-1729\n"
+    "\n"
+    "Lewis F. Powell, Jr. United States Courthouse Annex, Suite 501\n"
+    "1100 East Main Street\n"
+    "Richmond, VA 23219-3525\n"
+    "\n"
+    "F. Edward Hebert Federal Bldg\n"
+    "600 South Maestri Place\n"
+    "New Orleans, LA 70130\n"
+    "\n"
+    "Bob Casey United States Courthouse, 1st Floor\n"
+    "515 Rusk Street\n"
+    "Houston, TX 77002-2600\n"
+    "\n"
+    "Potter Stewart United States Courthouse, Suite 540\n"
+    "100 East Fifth Street\n"
+    "Cincinnati, OH 45202\n"
+    "\n"
+    "2722 Everett McKinley Dirksen United States Courthouse\n"
+    "219 South Dearborn Street\n"
+    "Chicago, IL 60604\n";
+
+// Lines containing "United States Courthouse"
+std::string us_courthouse =
+    "John Joseph Moakley United States Courthouse, Suite 2500\n"
+    "Thurgood Marshall United States Courthouse, 18th Floor\n"
+    "21400 James A. Byrne United States Courthouse\n"
+    "Lewis F. Powell, Jr. United States Courthouse Annex, Suite 501\n"
+    "Bob Casey United States Courthouse, 1st Floor\n"
+    "Potter Stewart United States Courthouse, Suite 540\n"
+    "2722 Everett McKinley Dirksen United States Courthouse\n";
+
+// Lines not containing "United States Courthouse"
+std::string us_courthouse_inv = 
+    "One Courthouse Way\n"
+    "Boston, MA 02210-3002\n"
+    "\n"
+    "40 Centre Street\n"
+    "New York, NY 10007-1501\n"
+    "\n"
+    "601 Market Street\n"
+    "Philadelphia, PA 19106-1729\n"
+    "\n"
+    "1100 East Main Street\n"
+    "Richmond, VA 23219-3525\n"
+    "\n"
+    "F. Edward Hebert Federal Bldg\n"
+    "600 South Maestri Place\n"
+    "New Orleans, LA 70130\n"
+    "\n"
+    "515 Rusk Street\n"
+    "Houston, TX 77002-2600\n"
+    "\n"
+    "100 East Fifth Street\n"
+    "Cincinnati, OH 45202\n"
+    "\n"
+    "219 South Dearborn Street\n"
+    "Chicago, IL 60604\n";
+
+// Lines containing a state and zip
+std::string state_and_zip =
+    "Boston, MA 02210-3002\n"
+    "New York, NY 10007-1501\n"
+    "Philadelphia, PA 19106-1729\n"
+    "Richmond, VA 23219-3525\n"
+    "New Orleans, LA 70130\n"
+    "Houston, TX 77002-2600\n"
+    "Cincinnati, OH 45202\n"
+    "Chicago, IL 60604\n";
+
+// Lines not containing a state and zip
+std::string state_and_zip_inv =
+    "John Joseph Moakley United States Courthouse, Suite 2500\n"
+    "One Courthouse Way\n"
+    "\n"
+    "Thurgood Marshall United States Courthouse, 18th Floor\n"
+    "40 Centre Street\n"
+    "\n"
+    "21400 James A. Byrne United States Courthouse\n"
+    "601 Market Street\n"
+    "\n"
+    "Lewis F. Powell, Jr. United States Courthouse Annex, Suite 501\n"
+    "1100 East Main Street\n"
+    "\n"
+    "F. Edward Hebert Federal Bldg\n"
+    "600 South Maestri Place\n"
+    "\n"
+    "Bob Casey United States Courthouse, 1st Floor\n"
+    "515 Rusk Street\n"
+    "\n"
+    "Potter Stewart United States Courthouse, Suite 540\n"
+    "100 East Fifth Street\n"
+    "\n"
+    "2722 Everett McKinley Dirksen United States Courthouse\n"
+    "219 South Dearborn Street\n";
+
+// Lines containing at least three words
+std::string three_words =
+    "John Joseph Moakley United States Courthouse, Suite 2500\n"
+    "One Courthouse Way\n"
+    "Thurgood Marshall United States Courthouse, 18th Floor\n"
+    "40 Centre Street\n"
+    "21400 James A. Byrne United States Courthouse\n"
+    "601 Market Street\n"
+    "Lewis F. Powell, Jr. United States Courthouse Annex, Suite 501\n"
+    "1100 East Main Street\n"
+    "F. Edward Hebert Federal Bldg\n"
+    "600 South Maestri Place\n"
+    "Bob Casey United States Courthouse, 1st Floor\n"
+    "515 Rusk Street\n"
+    "Potter Stewart United States Courthouse, Suite 540\n"
+    "100 East Fifth Street\n"
+    "2722 Everett McKinley Dirksen United States Courthouse\n"
+    "219 South Dearborn Street\n";
+
+// Lines containing exactly three words
+std::string exactly_three_words =
+    "One Courthouse Way\n"
+    "40 Centre Street\n"
+    "601 Market Street\n"
+    "515 Rusk Street\n";
+
+// Lines that don't contain exactly three words
+std::string exactly_three_words_inv =
+    "John Joseph Moakley United States Courthouse, Suite 2500\n"
+    "Boston, MA 02210-3002\n"
+    "\n"
+    "Thurgood Marshall United States Courthouse, 18th Floor\n"
+    "New York, NY 10007-1501\n"
+    "\n"
+    "21400 James A. Byrne United States Courthouse\n"
+    "Philadelphia, PA 19106-1729\n"
+    "\n"
+    "Lewis F. Powell, Jr. United States Courthouse Annex, Suite 501\n"
+    "1100 East Main Street\n"
+    "Richmond, VA 23219-3525\n"
+    "\n"
+    "F. Edward Hebert Federal Bldg\n"
+    "600 South Maestri Place\n"
+    "New Orleans, LA 70130\n"
+    "\n"
+    "Bob Casey United States Courthouse, 1st Floor\n"
+    "Houston, TX 77002-2600\n"
+    "\n"
+    "Potter Stewart United States Courthouse, Suite 540\n"
+    "100 East Fifth Street\n"
+    "Cincinnati, OH 45202\n"
+    "\n"
+    "2722 Everett McKinley Dirksen United States Courthouse\n"
+    "219 South Dearborn Street\n"
+    "Chicago, IL 60604\n";
+
+void test_filter( grep_filter grep, 
+                  const std::string& input, 
+                  const std::string& output );
+
+void grep_filter_test()
+{
+    regex match_us_courthouse("\\bUnited States Courthouse\\b");
+    regex match_state_and_zip("\\b[A-Z]{2}\\s+[0-9]{5}(-[0-9]{4})?\\b");
+    regex match_three_words("\\b\\w+\\s+\\w+\\s+\\w+\\b");
+    regex_constants::match_flag_type match_default = 
+        regex_constants::match_default;
+
+    {
+        grep_filter grep(match_us_courthouse);
+        test_filter(grep, addresses, us_courthouse);
+    }
+
+    {
+        grep_filter grep(match_us_courthouse, match_default, grep::invert);
+        test_filter(grep, addresses, us_courthouse_inv);
+    }
+
+    {
+        grep_filter grep(match_state_and_zip);
+        test_filter(grep, addresses, state_and_zip);
+    }
+
+    {
+        grep_filter grep(match_state_and_zip, match_default, grep::invert);
+        test_filter(grep, addresses, state_and_zip_inv);
+    }
+
+    {
+        grep_filter grep(match_three_words);
+        test_filter(grep, addresses, three_words);
+    }
+
+    {
+        grep_filter grep(match_three_words, match_default, grep::whole_line);
+        test_filter(grep, addresses, exactly_three_words);
+    }
+
+    {
+        int options = grep::whole_line | grep::invert;
+        grep_filter grep(match_three_words, match_default, options);
+        test_filter(grep, addresses, exactly_three_words_inv);
+    }
+}
+
+void test_filter( grep_filter grep, 
+                  const std::string& input, 
+                  const std::string& output )
+{
+    // Count lines in output
+    std::ptrdiff_t count = std::count(output.begin(), output.end(), '\n');
+
+    // Test as input filter
+    {
+        array_source  src(input.data(), input.data() + input.size());
+        std::string   dest;
+        io::copy(compose(pdalboost::ref(grep), src), io::back_inserter(dest));
+        BOOST_CHECK(dest == output);
+        BOOST_CHECK(grep.count() == count);
+    }
+
+    // Test as output filter
+    {
+        array_source  src(input.data(), input.data() + input.size());
+        std::string   dest;
+        io::copy(src, compose(pdalboost::ref(grep), io::back_inserter(dest)));
+        BOOST_CHECK(dest == output);
+        BOOST_CHECK(grep.count() == count);
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* [])
+{
+    test_suite* test = BOOST_TEST_SUITE("grep_filter test");
+    test->add(BOOST_TEST_CASE(&grep_filter_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/gzip_test.cpp b/vendor/pdalboost/libs/iostreams/test/gzip_test.cpp
new file mode 100644
index 0000000..d89cf89
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/gzip_test.cpp
@@ -0,0 +1,162 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <cstddef>
+#include <string>
+#include <boost/iostreams/copy.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/device/back_inserter.hpp>
+#include <boost/iostreams/filter/gzip.hpp>
+#include <boost/iostreams/filter/test.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/ref.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/sequence.hpp"
+#include "detail/verification.hpp"
+
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+namespace io = pdalboost::iostreams;
+using pdalboost::unit_test::test_suite;     
+
+struct gzip_alloc : std::allocator<char> { };
+
+void compression_test()
+{
+    text_sequence      data;
+
+    // Test compression and decompression with metadata
+    for (int i = 0; i < 4; ++i) {
+        gzip_params params;
+        if (i & 1) {
+            params.file_name = "original file name";
+        }
+        if (i & 2) {
+            params.comment = "detailed file description";
+        }
+        gzip_compressor    out(params);
+        gzip_decompressor  in;
+        BOOST_CHECK(
+            test_filter_pair( pdalboost::ref(out), 
+                              pdalboost::ref(in), 
+                              std::string(data.begin(), data.end()) )
+        );
+        BOOST_CHECK(in.file_name() == params.file_name);
+        BOOST_CHECK(in.comment() == params.comment);
+    }
+
+    // Test compression and decompression with custom allocator
+    BOOST_CHECK(
+        test_filter_pair( basic_gzip_compressor<gzip_alloc>(), 
+                          basic_gzip_decompressor<gzip_alloc>(), 
+                          std::string(data.begin(), data.end()) )
+    );
+}
+
+void multiple_member_test()
+{
+    text_sequence      data;
+    std::vector<char>  temp, dest;
+
+    // Write compressed data to temp, twice in succession
+    filtering_ostream out;
+    out.push(gzip_compressor());
+    out.push(io::back_inserter(temp));
+    io::copy(make_iterator_range(data), out);
+    out.push(io::back_inserter(temp));
+    io::copy(make_iterator_range(data), out);
+
+    // Read compressed data from temp into dest
+    filtering_istream in;
+    in.push(gzip_decompressor());
+    in.push(array_source(&temp[0], temp.size()));
+    io::copy(in, io::back_inserter(dest));
+
+    // Check that dest consists of two copies of data
+    BOOST_REQUIRE_EQUAL(data.size() * 2, dest.size());
+    BOOST_CHECK(std::equal(data.begin(), data.end(), dest.begin()));
+    BOOST_CHECK(std::equal(data.begin(), data.end(), dest.begin() + dest.size() / 2));
+
+    dest.clear();
+    io::copy(
+        array_source(&temp[0], temp.size()),
+        io::compose(gzip_decompressor(), io::back_inserter(dest)));
+
+    // Check that dest consists of two copies of data
+    BOOST_REQUIRE_EQUAL(data.size() * 2, dest.size());
+    BOOST_CHECK(std::equal(data.begin(), data.end(), dest.begin()));
+    BOOST_CHECK(std::equal(data.begin(), data.end(), dest.begin() + dest.size() / 2));
+}
+
+void array_source_test()
+{
+    std::string data = "simple test string.";
+    std::string encoded;
+
+    filtering_ostream out;
+    out.push(gzip_compressor());
+    out.push(io::back_inserter(encoded));
+    io::copy(make_iterator_range(data), out);
+
+    std::string res;
+    io::array_source src(encoded.data(),encoded.length());
+    io::copy(io::compose(io::gzip_decompressor(), src), io::back_inserter(res));
+    
+    BOOST_CHECK_EQUAL(data, res);
+}
+
+void header_test()
+{
+    // This test is in response to https://svn.boost.org/trac/boost/ticket/5908
+    // which describes a problem parsing gzip headers with extra fields as
+    // defined in RFC 1952 (http://www.ietf.org/rfc/rfc1952.txt).
+    // The extra field data used here is characteristic of the tabix file
+    // format (http://samtools.sourceforge.net/tabix.shtml).
+    const char header_bytes[] = {
+        static_cast<char>(gzip::magic::id1),
+        static_cast<char>(gzip::magic::id2),
+        gzip::method::deflate, // Compression Method: deflate
+        gzip::flags::extra | gzip::flags::name | gzip::flags::comment, // flags
+        '\x22', '\x9c', '\xf3', '\x4e', // 4 byte modification time (little endian)
+        gzip::extra_flags::best_compression, // XFL
+        gzip::os_unix, // OS
+        6, 0, // 2 byte length of extra field (little endian, 6 bytes)
+        'B', 'C', 2, 0, 0, 0, // 6 bytes worth of extra field data
+        'a', 'b', 'c', 0, // original filename, null terminated
+        'n', 'o', ' ', 'c', 'o', 'm', 'm', 'e', 'n', 't', 0, // comment
+    };
+    size_t sz = sizeof(header_bytes)/sizeof(header_bytes[0]);
+
+    pdalboost::iostreams::detail::gzip_header hdr;
+    for (size_t i = 0; i < sz; ++i) {
+        hdr.process(header_bytes[i]);
+
+        // Require that we are done at the last byte, not before.
+        if (i == sz-1)
+            BOOST_REQUIRE(hdr.done());
+        else
+            BOOST_REQUIRE(!hdr.done());
+    }
+
+    BOOST_CHECK_EQUAL("abc", hdr.file_name());
+    BOOST_CHECK_EQUAL("no comment", hdr.comment());
+    BOOST_CHECK_EQUAL(0x4ef39c22, hdr.mtime());
+    BOOST_CHECK_EQUAL(gzip::os_unix, hdr.os());
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("gzip test");
+    test->add(BOOST_TEST_CASE(&compression_test));
+    test->add(BOOST_TEST_CASE(&multiple_member_test));
+    test->add(BOOST_TEST_CASE(&array_source_test));
+    test->add(BOOST_TEST_CASE(&header_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/invert_test.cpp b/vendor/pdalboost/libs/iostreams/test/invert_test.cpp
new file mode 100644
index 0000000..48e7b85
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/invert_test.cpp
@@ -0,0 +1,70 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filter/test.hpp>
+#include <boost/iostreams/invert.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/closable.hpp"
+#include "detail/filters.hpp"
+#include "detail/operation_sequence.hpp"
+#include "detail/temp_file.hpp"
+
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;
+namespace io = pdalboost::iostreams;
+
+void read_write_test()
+{
+
+    test_file       test;
+    lowercase_file  lower;
+    uppercase_file  upper;
+
+    BOOST_CHECK( test_input_filter(
+                    invert(tolower_filter()),
+                    file_source(test.name(), in_mode),
+                    file_source(lower.name(), in_mode) ) );
+
+    BOOST_CHECK( test_output_filter(
+                    invert(toupper_filter()),
+                    file_source(test.name(), in_mode),
+                    file_source(upper.name(), in_mode) ) );
+}
+
+void close_test()
+{
+    // Invert an output filter
+    {
+        operation_sequence  seq;
+        chain<input>        ch;
+        ch.push(io::invert(closable_filter<output>(seq.new_operation(2))));
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Invert an input filter
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(io::invert(closable_filter<input>(seq.new_operation(1))));
+        ch.push(closable_device<output>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("reverse test");
+    test->add(BOOST_TEST_CASE(&read_write_test));
+    test->add(BOOST_TEST_CASE(&close_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/large_file_test.cpp b/vendor/pdalboost/libs/iostreams/test/large_file_test.cpp
new file mode 100644
index 0000000..fffe662
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/large_file_test.cpp
@@ -0,0 +1,446 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * Tests seeking with a file_descriptor using large file offsets.
+ *
+ * File:        libs/iostreams/test/large_file_test.cpp
+ * Date:        Tue Dec 25 21:34:47 MST 2007
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ */
+
+#include <cstdio>            // SEEK_SET, etc.
+#include <ctime>
+#include <string>
+#include <boost/config.hpp>  // BOOST_STRINGIZE
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/detail/config/rtl.hpp>
+#include <boost/iostreams/detail/config/windows_posix.hpp>
+#include <boost/iostreams/detail/execute.hpp>
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/device/file_descriptor.hpp>
+#include <boost/iostreams/device/mapped_file.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include <iostream>
+
+    // OS-specific headers for low-level i/o.
+
+#include <fcntl.h>       // file opening flags.
+#include <sys/stat.h>    // file access permissions.
+#ifdef BOOST_IOSTREAMS_WINDOWS
+# include <io.h>         // low-level file i/o.
+# define WINDOWS_LEAN_AND_MEAN
+# include <windows.h>
+# ifndef INVALID_SET_FILE_POINTER
+#  define INVALID_SET_FILE_POINTER ((DWORD)-1)
+# endif
+#else
+# include <sys/types.h>  // mode_t.
+# include <unistd.h>     // low-level file i/o.
+#endif  
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using pdalboost::unit_test::test_suite;
+
+//------------------Definition of constants-----------------------------------//
+
+const stream_offset gigabyte = 1073741824;
+const stream_offset file_size = // Some compilers complain about "8589934593"
+    gigabyte * static_cast<stream_offset>(8) + static_cast<stream_offset>(1);
+const int offset_list[] = 
+    { 0, 1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1, // Seek by 1GB
+      0, 2, 1, 3, 2, 4, 3, 5, 4, 6, 5, 7, 6, 8,       // Seek by 2GB
+         6, 7, 5, 6, 4, 5, 3, 4, 2, 3, 1, 2, 
+      0, 3, 1, 4, 2, 5, 3, 6, 4, 7, 5, 8,             // Seek by 3GB
+         5, 7, 4, 6, 3, 5, 2, 4, 1,
+      0, 4, 1, 5, 2, 6, 3, 7, 4, 8,                   // Seek by 4GB
+         4, 7, 3, 6, 2, 5, 1, 4,
+      0, 5, 1, 6, 2, 7, 3, 8, 3, 7, 2, 6, 1, 5,       // Seek by 5GB
+      0, 6, 1, 7, 2, 8, 2, 7, 1, 6,                   // Seek by 6GB
+      0, 7, 1, 8, 1, 7,                               // Seek by 7GB
+      0, 8, 0 };                                      // Seek by 8GB
+const int offset_list_length = sizeof(offset_list) / sizeof(int);
+#ifdef LARGE_FILE_TEMP
+# define BOOST_FILE_NAME BOOST_STRINGIZE(LARGE_FILE_TEMP)
+# define BOOST_KEEP_FILE false
+#else
+# define BOOST_FILE_NAME BOOST_STRINGIZE(LARGE_FILE_KEEP)
+# define BOOST_KEEP_FILE true
+#endif
+
+//------------------Definition of remove_large_file---------------------------//
+
+// Removes the large file
+void remove_large_file()
+{
+#ifdef BOOST_IOSTREAMS_WINDOWS
+    DeleteFile(TEXT(BOOST_FILE_NAME));
+#else
+    unlink(BOOST_FILE_NAME);
+#endif
+}
+
+//------------------Definition of large_file_exists---------------------------//
+
+// Returns true if the large file exists, has the correct size, and has been
+// modified since the last commit affecting this source file; if the file exists
+// but is invalid, deletes the file.
+bool large_file_exists()
+{
+    // Last mod date
+    time_t last_mod;
+
+#ifdef BOOST_IOSTREAMS_WINDOWS
+
+    // Check existence
+    WIN32_FIND_DATA info;
+    HANDLE hnd = FindFirstFile(TEXT(BOOST_FILE_NAME), &info);
+    if (hnd == INVALID_HANDLE_VALUE) 
+        return false;
+
+    // Check size
+    FindClose(hnd);
+    stream_offset size = 
+        (static_cast<stream_offset>(info.nFileSizeHigh) << 32) + 
+        static_cast<stream_offset>(info.nFileSizeLow);
+    if (size != file_size) {
+        remove_large_file();
+        return false;
+    }
+
+    // Fetch last mod date
+    SYSTEMTIME stime;
+    if (!FileTimeToSystemTime(&info.ftLastWriteTime, &stime)) {
+        remove_large_file();
+        return false;    
+    }
+    tm ctime;
+    ctime.tm_year = stime.wYear - 1900;
+    ctime.tm_mon = stime.wMonth - 1;
+    ctime.tm_mday = stime.wDay;
+    ctime.tm_hour = stime.wHour;
+    ctime.tm_min = stime.wMinute;
+    ctime.tm_sec = stime.wSecond;
+    ctime.tm_isdst = 0;
+    last_mod = mktime(&ctime);
+
+#else
+
+    // Check existence
+    struct BOOST_IOSTREAMS_FD_STAT info;
+    if (BOOST_IOSTREAMS_FD_STAT(BOOST_FILE_NAME, &info))
+        return false;
+
+    // Check size
+    if (info.st_size != file_size) {
+        remove_large_file();
+        return false;
+    }
+
+    // Fetch last mod date
+    last_mod = info.st_mtime;
+
+#endif
+
+    // Fetch last mod date of this file ("large_file_test.cpp")
+    string timestamp = 
+        "$Date$";
+    if (timestamp.size() != 53) { // Length of auto-generated SVN timestamp
+        remove_large_file();
+        return false;
+    }
+    tm commit;
+    try {
+        commit.tm_year = lexical_cast<int>(timestamp.substr(7, 4)) - 1900;
+        commit.tm_mon = lexical_cast<int>(timestamp.substr(12, 2)) - 1;
+        commit.tm_mday = lexical_cast<int>(timestamp.substr(15, 2));
+        commit.tm_hour = lexical_cast<int>(timestamp.substr(18, 2));
+        commit.tm_min = lexical_cast<int>(timestamp.substr(21, 2));
+        commit.tm_sec = lexical_cast<int>(timestamp.substr(24, 2));
+    } catch (const bad_lexical_cast&) {
+        remove_large_file();
+        return false;
+    }
+
+    // If last commit was two days or more before file timestamp, existing 
+    // file is okay; otherwise, it must be regenerated (the two-day window 
+    // compensates for time zone differences)
+    return difftime(last_mod, mktime(&commit)) >= 60 * 60 * 48; 
+}
+
+//------------------Definition of map_large_file------------------------------//
+
+// Initializes the large file by mapping it in small segments. This is an
+// optimization for Win32; the straightforward implementation using WriteFile 
+// and SetFilePointer (see the Borland workaropund below) is painfully slow.
+bool map_large_file()
+{
+    for (stream_offset z = 0; z <= 8; ++z) {
+        try {
+            mapped_file_params params;
+            params.path = BOOST_FILE_NAME;
+            params.offset = z * gigabyte;
+            params.length = 1;
+            params.mode = BOOST_IOS::out;
+            mapped_file file(params);
+            file.begin()[0] = z + 1;
+        } catch (const std::exception&) {
+            remove_large_file();
+            return false;
+        }
+    }
+    return true;
+}
+
+//------------------Definition of create_large_file---------------------------//
+
+// Creates and initializes the large file if it does not already exist. The file 
+// looks like this:
+//     
+//     0     1GB   2GB   3GB   4GB   5GB   6GB   7GB   8GB
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//     1.....2.....3.....4.....5.....6.....7.....8.....9
+//     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+//
+// where the characters 1-9 appear at offsets that are multiples of 1GB and the
+// dots represent uninitialized data.
+bool create_large_file()
+{
+    // If file exists, has correct size, and is recent, we're done
+    if (BOOST_KEEP_FILE && large_file_exists())
+        return true;
+
+#ifdef BOOST_IOSTREAMS_WINDOWS
+
+    // Create file
+    HANDLE hnd =
+        CreateFile(
+            TEXT(BOOST_FILE_NAME),
+            GENERIC_WRITE,
+            0,
+            NULL,
+            CREATE_ALWAYS,
+            FILE_ATTRIBUTE_NORMAL,
+            NULL
+        );
+    if (!hnd)
+        return false;
+
+    // Set file pointer
+    LONG off_low = static_cast<LONG>(file_size & 0xffffffff);
+    LONG off_high = static_cast<LONG>(file_size >> 32);
+    if ( SetFilePointer(hnd, off_low, &off_high, FILE_BEGIN) == 
+            INVALID_SET_FILE_POINTER && 
+         GetLastError() != NO_ERROR ) 
+    {
+        CloseHandle(hnd);
+        remove_large_file();
+        return false;
+    }
+
+    // Set file size
+    if (!SetEndOfFile(hnd)) {
+        CloseHandle(hnd);
+        remove_large_file();
+        return false;
+    }
+
+# if !defined(__BORLANDC__) || __BORLANDC__ < 0x582 || __BORLANDC__ >= 0x592
+
+    // Close handle; all further access is via mapped_file
+    CloseHandle(hnd);
+
+    // Initialize file data
+    return map_large_file();
+
+# else // Borland >= 5.8.2 and Borland < 5.9.2
+
+    // Initialize file data (very slow, even though only 9 writes are required)
+    for (stream_offset z = 0; z <= 8; ++z) {
+
+        // Seek
+        LONG off_low = static_cast<LONG>((z * gigabyte) & 0xffffffff); // == 0
+        LONG off_high = static_cast<LONG>((z * gigabyte) >> 32);
+        if ( SetFilePointer(hnd, off_low, &off_high, FILE_BEGIN) == 
+                INVALID_SET_FILE_POINTER && 
+             GetLastError() != NO_ERROR ) 
+        {
+            CloseHandle(hnd);
+            remove_large_file();
+            return false;
+        }
+
+        // Write a character
+        char buf[1] = { z + 1 };
+        DWORD result;
+        BOOL success = WriteFile(hnd, buf, 1, &result, NULL);
+        if (!success || result != 1) {
+            CloseHandle(hnd);
+            remove_large_file();
+            return false;
+        }
+    }
+
+    // Close file
+    CloseHandle(hnd);
+    return true;
+
+# endif // Borland workaround
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS
+
+    // Create file
+    int oflag = O_WRONLY | O_CREAT;
+    #ifdef _LARGEFILE64_SOURCE
+        oflag |= O_LARGEFILE;
+    #endif
+    mode_t pmode = 
+        S_IRUSR | S_IWUSR |
+        S_IRGRP | S_IWGRP |
+        S_IROTH | S_IWOTH;
+    int fd = BOOST_IOSTREAMS_FD_OPEN(BOOST_FILE_NAME, oflag, pmode);
+    if (fd == -1)
+        return false;
+
+    // Set file size
+    if (BOOST_IOSTREAMS_FD_TRUNCATE(fd, file_size)) {
+        BOOST_IOSTREAMS_FD_CLOSE(fd);
+        return false;
+    }
+
+# ifndef __CYGWIN__
+
+    // Initialize file data
+    for (int z = 0; z <= 8; ++z) {
+
+        // Seek
+        BOOST_IOSTREAMS_FD_OFFSET off = 
+            BOOST_IOSTREAMS_FD_SEEK(
+                fd,
+                static_cast<BOOST_IOSTREAMS_FD_OFFSET>(z * gigabyte),
+                SEEK_SET
+            );
+        if (off == -1) {
+            BOOST_IOSTREAMS_FD_CLOSE(fd);
+            return false;
+        }
+
+        // Write a character
+        char buf[1] = { z + 1 };
+        if (BOOST_IOSTREAMS_FD_WRITE(fd, buf, 1) == -1) {
+            BOOST_IOSTREAMS_FD_CLOSE(fd);
+            return false;
+        }
+    }
+
+    // Close file
+    BOOST_IOSTREAMS_FD_CLOSE(fd);
+    return true;
+
+# else // Cygwin
+
+    // Close descriptor; all further access is via mapped_file
+    BOOST_IOSTREAMS_FD_CLOSE(fd);
+
+    // Initialize file data
+    return map_large_file();
+
+# endif 
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
+}
+
+//------------------Definition of large_file----------------------------------//
+
+// RAII utility
+class large_file {
+public:
+    large_file() { exists_ = create_large_file(); }
+    ~large_file() { if (!BOOST_KEEP_FILE) remove_large_file(); }
+    bool exists() const { return exists_; }
+    const char* path() const { return BOOST_FILE_NAME; }
+private:
+    bool exists_;
+};
+                    
+//------------------Definition of check_character-----------------------------//
+
+// Verify that the given file contains the given character at the current 
+// position
+bool check_character(file_descriptor_source& file, char value)
+{
+    char           buf[1];
+    int            amt;
+    BOOST_CHECK_NO_THROW(amt = file.read(buf, 1));
+    BOOST_CHECK_MESSAGE(amt == 1, "failed reading character");
+    BOOST_CHECK_NO_THROW(file.seek(-1, BOOST_IOS::cur));
+    return buf[0] == value;
+}
+
+//------------------Definition of large_file_test-----------------------------//
+
+void large_file_test()
+{
+    BOOST_REQUIRE_MESSAGE(
+        sizeof(stream_offset) >= 8,
+        "large offsets not supported"
+    );
+
+    // Prepare file and file descriptor
+    large_file              large;
+    file_descriptor_source  file;
+    BOOST_REQUIRE_MESSAGE(
+        large.exists(), "failed creating file \"" << BOOST_FILE_NAME << '"'
+    );
+    BOOST_CHECK_NO_THROW(file.open(large.path(), BOOST_IOS::binary));
+
+    // Test seeking using ios_base::beg
+    for (int z = 0; z < offset_list_length; ++z) {
+        char value = offset_list[z] + 1;
+        stream_offset off = 
+            static_cast<stream_offset>(offset_list[z]) * gigabyte;
+        BOOST_CHECK_NO_THROW(file.seek(off, BOOST_IOS::beg));
+        BOOST_CHECK_MESSAGE(
+            check_character(file, value), 
+            "failed validating seek"
+        );
+    }
+
+    // Test seeking using ios_base::end
+    for (int z = 0; z < offset_list_length; ++z) {
+        char value = offset_list[z] + 1;
+        stream_offset off = 
+            -static_cast<stream_offset>(8 - offset_list[z]) * gigabyte - 1;
+        BOOST_CHECK_NO_THROW(file.seek(off, BOOST_IOS::end));
+        BOOST_CHECK_MESSAGE(
+            check_character(file, value), 
+            "failed validating seek"
+        );
+    }
+
+    // Test seeking using ios_base::cur
+    for (int next, cur = 0, z = 0; z < offset_list_length; ++z, cur = next) {
+        next = offset_list[z];
+        char value = offset_list[z] + 1;
+        stream_offset off = static_cast<stream_offset>(next - cur) * gigabyte;
+        BOOST_CHECK_NO_THROW(file.seek(off, BOOST_IOS::cur));
+        BOOST_CHECK_MESSAGE(
+            check_character(file, value), 
+            "failed validating seek"
+        );
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("execute test");
+    test->add(BOOST_TEST_CASE(&large_file_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/line_filter_test.cpp b/vendor/pdalboost/libs/iostreams/test/line_filter_test.cpp
new file mode 100644
index 0000000..1b28b08
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/line_filter_test.cpp
@@ -0,0 +1,99 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <cctype>
+#include <boost/iostreams/copy.hpp>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filter/line.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>  
+#include "detail/constants.hpp"
+#include "detail/filters.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // BCC 5.x.
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;    
+
+struct toupper_line_filter : line_filter {
+    std::string do_filter(const std::string& line)
+    {
+        std::string result(line);
+        for ( std::string::size_type z = 0, len = line.size();
+              z < len; 
+              ++z )
+        {
+            result[z] = std::toupper((unsigned char) result[z]);
+        }
+        return result;
+    }
+};
+
+bool compare_streams_in_lines(std::istream& first, std::istream& second)
+{
+    do {
+        std::string line_one;
+        std::string line_two;
+        std::getline(first, line_one);
+        std::getline(second, line_two);
+        if (line_one != line_two || first.eof() != second.eof())
+            return false;
+    } while (!first.eof());
+    return true;
+}
+
+void read_line_filter()
+{
+    test_file          src;
+    uppercase_file     upper;
+    filtering_istream  first;
+    first.push(toupper_line_filter());
+    first.push(file_source(src.name(), in_mode));
+    ifstream second(upper.name().c_str(), in_mode);
+    BOOST_CHECK_MESSAGE(
+        compare_streams_in_lines(first, second),
+        "failed reading from a line_filter"
+    );
+}
+
+void write_line_filter() 
+{
+    test_file          data;
+    temp_file          dest;
+    uppercase_file     upper;
+
+    filtering_ostream  out;
+    out.push(toupper_line_filter());
+    out.push(file_sink(dest.name(), out_mode));
+    copy(file_source(data.name(), in_mode), out);
+    out.reset();
+
+    ifstream first(dest.name().c_str());
+    ifstream second(upper.name().c_str());
+    BOOST_CHECK_MESSAGE(
+        compare_streams_in_lines(first, second),
+        "failed writing to a line_filter"
+    );
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("line_filter test");
+    test->add(BOOST_TEST_CASE(&read_line_filter));
+    test->add(BOOST_TEST_CASE(&write_line_filter));
+    return test;
+}
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // BCC 5.x.
+
diff --git a/vendor/pdalboost/libs/iostreams/test/mapped_file_test.cpp b/vendor/pdalboost/libs/iostreams/test/mapped_file_test.cpp
new file mode 100644
index 0000000..ba3204f
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/mapped_file_test.cpp
@@ -0,0 +1,328 @@
+// (C) Copyright Jorge Lodos 2008
+// (C) Copyright Jonathan Turkanis 2004
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// This is the original (boost 1.34) pdalboost::iostream test for the mapped files with the
+// following modifications:
+// 1. The namespace for the mapped file was changed to seglib::filemap.
+// 2. Added test for privately mapped files.
+// 3. The test test_writeable was added for mapped files.
+// 4. The test test_resizeable was added for mapped files.
+//
+
+#include <fstream>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/test/unit_test.hpp>
+
+#include <boost/iostreams/stream.hpp>
+#include <boost/iostreams/device/mapped_file.hpp>
+#include <boost/filesystem/path.hpp>
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+// Code generation bugs cause tests to fail with global optimization.
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# pragma optimize("g", off)
+#endif
+
+namespace pdalboost { namespace iostreams { namespace test {
+
+bool test_writeable(mapped_file& mf)
+{
+    // Test writing
+    for (int i = 0; i < data_reps; ++i) {
+        memcpy(mf.data(), narrow_data(), chunk_size);
+        char buf[chunk_size];
+        memcpy(buf, mf.const_data(), chunk_size);
+        if (strncmp(buf, narrow_data(), chunk_size) != 0)
+            return false;
+        memset(mf.data(), 0, chunk_size);
+    }
+    return true;
+}
+
+bool test_resizeable(mapped_file& mf)
+{
+    // Test resizing
+    mapped_file::size_type size = mf.size();
+    if (size == 0)
+        return false;
+    mf.resize(size/2);
+    if (mf.size() != size/2)
+        return false;
+    mf.resize(size);
+    if (mf.size() != size)
+        return false;
+    return true;
+}
+
+} } } // End namespaces test, iostreams, boost.
+
+void mapped_file_test()
+{
+    using namespace pdalboost::iostreams;
+    BOOST_TEST_MESSAGE("about to begin");
+
+    //--------------Reading from a mapped_file_source-------------------------//
+
+    {
+        // Note: the ifstream second is placed in a nested scope because 
+        // closing and reopening a single ifstream failed for CW 9.4 on Windows.
+
+        // Test reading from a stream based on a mapped_file_source,
+        // in chars.
+        pdalboost::iostreams::test::test_file test1, test2;
+        pdalboost::iostreams::stream<mapped_file_source> first(test1.name());
+        {
+            std::ifstream second( test2.name().c_str(), 
+                             BOOST_IOS::in | BOOST_IOS::binary );
+            BOOST_CHECK_MESSAGE(
+                pdalboost::iostreams::test::compare_streams_in_chars(first, second),
+                "failed reading from stream<mapped_file_source> in chars"
+            );
+
+            BOOST_TEST_MESSAGE(
+                "done reading from stream<mapped_file_source> in chars"
+            );
+        }
+        first.close();
+
+        // Test reading from a stream based on a mapped_file_source,
+        // in chunks. (Also tests reopening the stream.)
+        first.open(mapped_file_source(test1.name()));
+        {
+            std::ifstream second( test2.name().c_str(), 
+                             BOOST_IOS::in | BOOST_IOS::binary );
+            BOOST_CHECK_MESSAGE(
+                pdalboost::iostreams::test::compare_streams_in_chunks(first, second),
+                "failed reading from stream<mapped_file_source> in chunks"
+            );
+
+            BOOST_TEST_MESSAGE(
+                "done reading from stream<mapped_file_source> in chunks"
+            );
+        }
+    }
+
+    //--------------Writing to a mapped_file_sink-----------------------------//
+
+    {
+        // Test writing to a stream based on a mapped_file_sink, in 
+        // chars.
+        pdalboost::iostreams::test::uppercase_file  first, second; // Will overwrite these.
+        pdalboost::iostreams::test::test_file       test;
+
+        pdalboost::iostreams::stream<mapped_file_sink> out;
+        out.open(mapped_file_sink(first.name()));
+        pdalboost::iostreams::test::write_data_in_chars(out);
+        out.close();
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::test::compare_files(first.name(), test.name()),
+            "failed writing to stream<mapped_file_sink> in chars"
+        );
+
+        BOOST_TEST_MESSAGE(
+            "done writing to stream<mapped_file_source> in chars"
+        );
+
+        // Test writing to a stream based on a mapped_file_sink, in 
+        // chunks. (Also tests reopening the stream.)
+        out.open(mapped_file_sink(second.name()));
+        pdalboost::iostreams::test::write_data_in_chunks(out);
+        out.close();
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::test::compare_files(second.name(), test.name()),
+            "failed writing to stream<mapped_file_sink> in chunks"
+        );
+
+        BOOST_TEST_MESSAGE(
+            "done writing to stream<mapped_file_source> in chunks"
+        );
+    }
+
+    //--------------Writing to a newly created file---------------------------//
+
+    {
+        // Test writing to a newly created mapped file.
+        pdalboost::iostreams::test::temp_file  first, second;
+        pdalboost::iostreams::test::test_file  test;
+
+        mapped_file_params p(first.name());
+        p.new_file_size = pdalboost::iostreams::test::data_reps * pdalboost::iostreams::test::data_length();
+        pdalboost::iostreams::stream<mapped_file_sink> out;
+        out.open(mapped_file_sink(p));
+        pdalboost::iostreams::test::write_data_in_chars(out);
+        out.close();
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::test::compare_files(first.name(), test.name()),
+            "failed writing to newly created mapped file in chars"
+        );
+
+        
+        // Test writing to a newly created mapped file. 
+        // (Also tests reopening the stream.)
+        p.path = second.name();
+        out.open(mapped_file_sink(p));
+        pdalboost::iostreams::test::write_data_in_chunks(out);
+        out.close();
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::test::compare_files(second.name(), test.name()),
+            "failed writing to newly created mapped file in chunks"
+        );
+    }
+
+    //--------------Writing to a pre-existing file---------------------------//
+    {
+        // Test for Bug #3953 - writing to a pre-existing mapped file.
+        pdalboost::iostreams::test::test_file  first, test;
+
+        mapped_file_params p(first.name());
+        p.new_file_size = pdalboost::iostreams::test::data_reps * pdalboost::iostreams::test::data_length();
+        pdalboost::iostreams::stream<mapped_file_sink> out;
+        out.open(mapped_file_sink(p));
+        pdalboost::iostreams::test::write_data_in_chars(out);
+        out.close();
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::test::compare_files(first.name(), test.name()),
+            "failed writing to pre-existing mapped file in chars"
+        );
+    }
+    
+    //--------------Random access with a mapped_file--------------------------//
+
+    {
+        // Test reading, writing and seeking within a stream based on a 
+        // mapped_file, in chars.
+        pdalboost::iostreams::test::test_file test;
+        pdalboost::iostreams::stream<mapped_file> io;
+        io.open(mapped_file(test.name()));
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::test::test_seekable_in_chars(io),
+            "failed seeking within stream<mapped_file> in chars"
+        );
+
+        BOOST_TEST_MESSAGE(
+            "done seeking within stream<mapped_file> in chars"
+        );
+
+        io.close();
+
+        // Test reading, writing and seeking within a stream based on a 
+        // mapped_file, in chunks. (Also tests reopening the 
+        // stream.)
+        io.open(mapped_file(test.name()));
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::test::test_seekable_in_chunks(io),
+            "failed seeking within stream<mapped_file> in chunks"
+        );
+
+        BOOST_TEST_MESSAGE(
+            "done seeking within stream<mapped_file> in chunks"
+        );
+    }
+
+    //--------------Resizing a mapped_file------------------------------------//
+
+    {
+        // Test resizing a mapped_file.
+        pdalboost::iostreams::test::test_file test;
+        mapped_file mf;
+        mf.open(test.name());
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::test::test_resizeable(mf),
+            "failed resizing a mapped_file"
+        );
+        
+        BOOST_TEST_MESSAGE(
+            "done resizing a mapped_file"
+        );
+    }
+
+    //--------------Random access with a private mapped_file------------------//
+
+    {
+        // Use 2 copies of the file to compare later
+        pdalboost::iostreams::test::test_file orig, copy;
+        
+        // Test reading and writing within a mapped_file. 
+        // Since the file is privately mapped, it should remain
+        // unchanged after writing when opened in readonly mode.
+        mapped_file mf;
+        mf.open(orig.name(), mapped_file::priv);
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::test::test_writeable(mf),
+            "failed seeking within private mapped_file"
+        );
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::test::compare_files(orig.name(), copy.name()),
+            "failed writing to private mapped_file"
+        );
+        
+        BOOST_TEST_MESSAGE(
+            "done seeking within private mapped_file"
+        );
+        
+        mf.close();
+
+        // Test reopening the mapped file.
+        mf.open(orig.name(), mapped_file::priv);
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::test::test_writeable(mf),
+            "failed reopening private mapped_file"
+        );
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::test::compare_files(orig.name(), copy.name()),
+            "failed writing to reopened private mapped_file"
+        );
+        
+        BOOST_TEST_MESSAGE(
+            "done reopening private mapped_file"
+        );
+    }
+
+    //-------------Check creating opening mapped_file with char*-------------//
+    
+    {
+        pdalboost::iostreams::test::test_file orig;
+        char name[50];
+        std::strcpy(name, orig.name().c_str());
+        
+        mapped_file mf((char*) name);
+
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::test::test_writeable(mf),
+            "failed seeking within private mapped_file"
+        );
+
+        mf.close();
+    }
+
+    //---------Check creating opening mapped_file with filesystem3 path------//
+    {
+        pdalboost::iostreams::test::test_file orig;
+        
+        mapped_file mf(pdalboost::filesystem::path(orig.name()));
+
+        BOOST_CHECK_MESSAGE(
+            pdalboost::iostreams::test::test_writeable(mf),
+            "failed seeking within private mapped_file"
+        );
+
+        mf.close();
+    }
+}
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# pragma optimize("", on)
+#endif
+
+pdalboost::unit_test::test_suite* init_unit_test_suite(int, char* []) 
+{
+    pdalboost::unit_test::test_suite* test = BOOST_TEST_SUITE("mapped_file test");
+    test->add(BOOST_TEST_CASE(&mapped_file_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/newline_test.cpp b/vendor/pdalboost/libs/iostreams/test/newline_test.cpp
new file mode 100644
index 0000000..5b77687
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/newline_test.cpp
@@ -0,0 +1,486 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <string>
+#include <boost/iostreams/compose.hpp>
+#include <boost/iostreams/copy.hpp>
+#include <boost/iostreams/device/back_inserter.hpp>
+#include <boost/iostreams/device/null.hpp>
+#include <boost/iostreams/filter/newline.hpp>
+#include <boost/iostreams/filter/test.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include <boost/utility/base_from_member.hpp>
+
+namespace io = pdalboost::iostreams;
+using pdalboost::unit_test::test_suite;
+
+const std::string posix =
+    "When I was one-and-twenty\n"
+    "I heard a wise man say,\n"
+    "'Give crowns and pounds and guineas\n"
+    "But not your heart away;\n"
+    "\n"
+    "Give pearls away and rubies\n"
+    "But keep your fancy free.'\n"
+    "But I was one-and-twenty,\n"
+    "No use to talk to me.\n"
+    "\n"
+    "When I was one-and-twenty\n"
+    "I heard him say again,\n"
+    "'The heart out of the bosom\n"
+    "Was never given in vain;\n"
+    "\n"
+    "'Tis paid with sighs a plenty\n"
+    "And sold for endless rue.'\n"
+    "And I am two-and-twenty,\n"
+    "And oh, 'tis true, 'tis true.\n";
+
+const std::string dos =
+    "When I was one-and-twenty\r\n"
+    "I heard a wise man say,\r\n"
+    "'Give crowns and pounds and guineas\r\n"
+    "But not your heart away;\r\n"
+    "\r\n"
+    "Give pearls away and rubies\r\n"
+    "But keep your fancy free.'\r\n"
+    "But I was one-and-twenty,\r\n"
+    "No use to talk to me.\r\n"
+    "\r\n"
+    "When I was one-and-twenty\r\n"
+    "I heard him say again,\r\n"
+    "'The heart out of the bosom\r\n"
+    "Was never given in vain;\r\n"
+    "\r\n"
+    "'Tis paid with sighs a plenty\r\n"
+    "And sold for endless rue.'\r\n"
+    "And I am two-and-twenty,\r\n"
+    "And oh, 'tis true, 'tis true.\r\n";
+
+const std::string mac =
+    "When I was one-and-twenty\r"
+    "I heard a wise man say,\r"
+    "'Give crowns and pounds and guineas\r"
+    "But not your heart away;\r"
+    "\r"
+    "Give pearls away and rubies\r"
+    "But keep your fancy free.'\r"
+    "But I was one-and-twenty,\r"
+    "No use to talk to me.\r"
+    "\r"
+    "When I was one-and-twenty\r"
+    "I heard him say again,\r"
+    "'The heart out of the bosom\r"
+    "Was never given in vain;\r"
+    "\r"
+    "'Tis paid with sighs a plenty\r"
+    "And sold for endless rue.'\r"
+    "And I am two-and-twenty,\r"
+    "And oh, 'tis true, 'tis true.\r";
+
+const std::string no_final_newline =
+    "When I was one-and-twenty\n"
+    "I heard a wise man say,\n"
+    "'Give crowns and pounds and guineas\n"
+    "But not your heart away;\n"
+    "\n"
+    "Give pearls away and rubies\n"
+    "But keep your fancy free.'\n"
+    "But I was one-and-twenty,\n"
+    "No use to talk to me.\n"
+    "\n"
+    "When I was one-and-twenty\n"
+    "I heard him say again,\n"
+    "'The heart out of the bosom\n"
+    "Was never given in vain;\n"
+    "\n"
+    "'Tis paid with sighs a plenty\n"
+    "And sold for endless rue.'\n"
+    "And I am two-and-twenty,\n"
+    "And oh, 'tis true, 'tis true.";
+
+const std::string mixed =
+    "When I was one-and-twenty\n"
+    "I heard a wise man say,\r\n"
+    "'Give crowns and pounds and guineas\r"
+    "But not your heart away;\n"
+    "\r\n"
+    "Give pearls away and rubies\r"
+    "But keep your fancy free.'\n"
+    "But I was one-and-twenty,\r\n"
+    "No use to talk to me.\r"
+    "\r"
+    "When I was one-and-twenty\r\n"
+    "I heard him say again,\r"
+    "'The heart out of the bosom\n"
+    "Was never given in vain;\r\n"
+    "\r"
+    "'Tis paid with sighs a plenty\n"
+    "And sold for endless rue.'\r\n"
+    "And I am two-and-twenty,\r"
+    "And oh, 'tis true, 'tis true.\n";
+
+struct string_source : pdalboost::base_from_member<std::string>, io::array_source {
+    typedef io::array_source                      base_type;
+    typedef pdalboost::base_from_member<std::string>  pbase_type;
+    string_source(const std::string& src)
+        : pbase_type(src), base_type(member.data(), member.size())
+        { }
+
+    string_source(const string_source& src)
+        : pbase_type(src.member), base_type(member.data(), member.size())
+        { }
+};
+
+void read_newline_filter()
+{
+    using namespace io;
+
+        // Test converting to posix format.
+
+    BOOST_CHECK(test_input_filter(newline_filter(newline::posix), posix, posix));
+    BOOST_CHECK(test_input_filter(newline_filter(newline::posix), dos, posix));
+    BOOST_CHECK(test_input_filter(newline_filter(newline::posix), mac, posix));
+    BOOST_CHECK(test_input_filter(newline_filter(newline::posix), mixed, posix));
+
+        // Test converting to dos format.
+
+    BOOST_CHECK(test_input_filter(newline_filter(newline::dos), posix, dos));
+    BOOST_CHECK(test_input_filter(newline_filter(newline::dos), dos, dos));
+    BOOST_CHECK(test_input_filter(newline_filter(newline::dos), mac, dos));
+    BOOST_CHECK(test_input_filter(newline_filter(newline::dos), mixed, dos));
+
+        // Test converting to mac format.
+
+    BOOST_CHECK(test_input_filter(newline_filter(newline::mac), posix, mac));
+    BOOST_CHECK(test_input_filter(newline_filter(newline::mac), dos, mac));
+    BOOST_CHECK(test_input_filter(newline_filter(newline::mac), mac, mac));
+    BOOST_CHECK(test_input_filter(newline_filter(newline::mac), mixed, mac));
+}
+
+// Verify that a filter works as expected with both a non-blocking sink
+// and a normal output stream.
+//
+// test_output_filter only tests for a non-blocking sink.
+// TODO: Other tests should probably test with an output stream.
+
+template<typename Filter>
+bool my_test_output_filter(Filter filter, 
+                         const std::string& input, 
+                         const std::string& output)
+{
+    const std::streamsize default_increment = 5;
+
+    for ( int inc = default_increment;
+          inc < default_increment * 40; 
+          inc += default_increment )
+    {
+        io::array_source src(input.data(), input.data() + input.size());
+
+        std::ostringstream stream;
+        io::copy(src, compose(filter, stream));
+        if (stream.str() != output )
+            return false;
+
+    }
+    return test_output_filter(filter, input, output);
+}
+
+void write_newline_filter()
+{
+    using namespace io;
+
+        // Test converting to posix format.
+
+    BOOST_CHECK(my_test_output_filter(newline_filter(newline::posix), posix, posix));
+    BOOST_CHECK(my_test_output_filter(newline_filter(newline::posix), dos, posix));
+    BOOST_CHECK(my_test_output_filter(newline_filter(newline::posix), mac, posix));
+    BOOST_CHECK(my_test_output_filter(newline_filter(newline::posix), mixed, posix));
+
+        // Test converting to dos format.
+
+    BOOST_CHECK(my_test_output_filter(newline_filter(newline::dos), posix, dos));
+    BOOST_CHECK(my_test_output_filter(newline_filter(newline::dos), dos, dos));
+    BOOST_CHECK(my_test_output_filter(newline_filter(newline::dos), mac, dos));
+    BOOST_CHECK(my_test_output_filter(newline_filter(newline::dos), mixed, dos));
+
+        // Test converting to mac format.
+
+    BOOST_CHECK(my_test_output_filter(newline_filter(newline::mac), posix, mac));
+    BOOST_CHECK(my_test_output_filter(newline_filter(newline::mac), dos, mac));
+    BOOST_CHECK(my_test_output_filter(newline_filter(newline::mac), mac, mac));
+    BOOST_CHECK(my_test_output_filter(newline_filter(newline::mac), mixed, mac));
+}
+
+void test_input_against_flags(int flags, const std::string& input, bool read)
+{
+    if (read) {
+        io::copy(
+            io::compose(
+                io::newline_checker(flags),
+                string_source(input)
+            ),
+            io::null_sink()
+        );
+    } else {
+        io::copy(
+            string_source(input),
+            io::compose(io::newline_checker(flags), io::null_sink())
+        );
+    }
+}
+
+void read_newline_checker()
+{
+    io::filtering_istream in;
+    io::newline_checker* checker = 0;
+
+        // Verify properties of ::posix.
+
+    in.push(io::newline_checker(io::newline::posix));
+    in.push(string_source(::posix));
+    BOOST_CHECK_NO_THROW(io::copy(in, io::null_sink()));
+    checker = BOOST_IOSTREAMS_COMPONENT(in, 0, io::newline_checker);
+    BOOST_CHECK(checker->is_posix());
+    BOOST_CHECK(!checker->is_dos());
+    BOOST_CHECK(!checker->is_mac());
+    BOOST_CHECK(!checker->is_mixed());
+    BOOST_CHECK(checker->has_final_newline());
+    in.pop(); // pop checker.
+
+        // Verify properties of ::dos.
+
+    in.push(io::newline_checker(io::newline::dos));
+    in.push(string_source(::dos));
+    try {
+        io::copy(in, io::null_sink());
+    } catch (io::newline_error&) {
+        BOOST_CHECK_MESSAGE(
+            false, "failed checking for dos line endings"
+        );
+    }
+    checker = BOOST_IOSTREAMS_COMPONENT(in, 0, io::newline_checker);
+    BOOST_CHECK(!checker->is_posix());
+    BOOST_CHECK(checker->is_dos());
+    BOOST_CHECK(!checker->is_mac());
+    BOOST_CHECK(!checker->is_mixed());
+    BOOST_CHECK(checker->has_final_newline());
+    in.pop(); // pop checker.
+
+        // Verify properties of ::mac.
+
+    in.push(io::newline_checker(io::newline::mac));
+    in.push(string_source(::mac));
+    BOOST_CHECK_NO_THROW(io::copy(in, io::null_sink()));
+    checker = BOOST_IOSTREAMS_COMPONENT(in, 0, io::newline_checker);
+    BOOST_CHECK(!checker->is_posix());
+    BOOST_CHECK(!checker->is_dos());
+    BOOST_CHECK(checker->is_mac());
+    BOOST_CHECK(!checker->is_mixed());
+    BOOST_CHECK(checker->has_final_newline());
+    in.pop(); // pop checker.
+
+        // Verify properties of no_final_newline.
+
+    in.push(io::newline_checker(io::newline::posix));
+    in.push(string_source(::no_final_newline));
+    BOOST_CHECK_NO_THROW(io::copy(in, io::null_sink()));
+    checker = BOOST_IOSTREAMS_COMPONENT(in, 0, io::newline_checker);
+    BOOST_CHECK(checker->is_posix());
+    BOOST_CHECK(!checker->is_dos());
+    BOOST_CHECK(!checker->is_mac());
+    BOOST_CHECK(!checker->is_mixed());
+    BOOST_CHECK(!checker->has_final_newline());
+    in.pop(); // pop checker.
+
+        // Verify properties of mixed.
+
+    in.push(io::newline_checker());
+    in.push(string_source(::mixed));
+    BOOST_CHECK_NO_THROW(io::copy(in, io::null_sink()));
+    checker = BOOST_IOSTREAMS_COMPONENT(in, 0, io::newline_checker);
+    BOOST_CHECK(!checker->is_posix());
+    BOOST_CHECK(!checker->is_dos());
+    BOOST_CHECK(!checker->is_mac());
+    BOOST_CHECK(checker->is_mixed_posix());
+    BOOST_CHECK(checker->is_mixed_dos());
+    BOOST_CHECK(checker->is_mixed_mac());
+    BOOST_CHECK(checker->is_mixed());
+    BOOST_CHECK(checker->has_final_newline());
+    in.pop(); // pop checker.
+
+        // Verify exceptions when input does not satisfy target conditions.
+
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::dos, ::posix, true),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::mac, ::posix, true),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::posix, ::dos, true),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::mac, ::dos, true),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::posix, ::mac, true),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::dos, ::mac, true),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::final_newline, ::no_final_newline, true),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::posix, ::mixed, true),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::dos, ::mixed, true),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::mac, ::mixed, true),
+        io::newline_error
+    );
+}
+
+void write_newline_checker()
+{
+    io::filtering_ostream out;
+    io::newline_checker* checker = 0;
+
+        // Verify properties of ::posix.
+
+    out.push(io::newline_checker(io::newline::posix));
+    out.push(io::null_sink());
+    BOOST_CHECK_NO_THROW(io::copy(string_source(::posix), out));
+    checker = BOOST_IOSTREAMS_COMPONENT(out, 0, io::newline_checker);
+    BOOST_CHECK(checker->is_posix());
+    BOOST_CHECK(!checker->is_dos());
+    BOOST_CHECK(!checker->is_mac());
+    BOOST_CHECK(!checker->is_mixed());
+    BOOST_CHECK(checker->has_final_newline());
+    out.pop(); // pop checker.
+
+        // Verify properties of ::dos.
+
+    out.push(io::newline_checker(io::newline::dos));
+    out.push(io::null_sink());
+    BOOST_CHECK_NO_THROW(io::copy(string_source(::dos), out));
+    checker = BOOST_IOSTREAMS_COMPONENT(out, 0, io::newline_checker);
+    BOOST_CHECK(!checker->is_posix());
+    BOOST_CHECK(checker->is_dos());
+    BOOST_CHECK(!checker->is_mac());
+    BOOST_CHECK(!checker->is_mixed());
+    BOOST_CHECK(checker->has_final_newline());
+    out.pop(); // pop checker.
+
+        // Verify properties of ::mac.
+
+    out.push(io::newline_checker(io::newline::mac));
+    out.push(io::null_sink());
+    BOOST_CHECK_NO_THROW(io::copy(string_source(::mac), out));
+    checker = BOOST_IOSTREAMS_COMPONENT(out, 0, io::newline_checker);
+    BOOST_CHECK(!checker->is_posix());
+    BOOST_CHECK(!checker->is_dos());
+    BOOST_CHECK(checker->is_mac());
+    BOOST_CHECK(!checker->is_mixed());
+    BOOST_CHECK(checker->has_final_newline());
+    out.pop(); // pop checker.
+
+        // Verify properties of no_final_newline.
+
+    out.push(io::newline_checker(io::newline::posix));
+    out.push(io::null_sink());
+    BOOST_CHECK_NO_THROW(io::copy(string_source(::no_final_newline), out));
+    checker = BOOST_IOSTREAMS_COMPONENT(out, 0, io::newline_checker);
+    BOOST_CHECK(checker->is_posix());
+    BOOST_CHECK(!checker->is_dos());
+    BOOST_CHECK(!checker->is_mac());
+    BOOST_CHECK(!checker->is_mixed());
+    BOOST_CHECK(!checker->has_final_newline());
+    out.pop(); // pop checker.
+
+        // Verify properties of mixed.
+
+    out.push(io::newline_checker());
+    out.push(io::null_sink());
+    BOOST_CHECK_NO_THROW(io::copy(string_source(::mixed), out));
+    checker = BOOST_IOSTREAMS_COMPONENT(out, 0, io::newline_checker);
+    BOOST_CHECK(!checker->is_posix());
+    BOOST_CHECK(!checker->is_dos());
+    BOOST_CHECK(!checker->is_mac());
+    BOOST_CHECK(checker->is_mixed_posix());
+    BOOST_CHECK(checker->is_mixed_dos());
+    BOOST_CHECK(checker->is_mixed_mac());
+    BOOST_CHECK(checker->is_mixed());
+    BOOST_CHECK(checker->has_final_newline());
+    out.pop(); // pop checker.
+
+        // Verify exceptions when input does not satisfy target conditions.
+
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::dos, ::posix, false),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::mac, ::posix, false),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::posix, ::dos, false),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::mac, ::dos, false),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::posix, ::mac, false),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::dos, ::mac, false),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::final_newline, ::no_final_newline, false),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::posix, ::mixed, false),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::dos, ::mixed, false),
+        io::newline_error
+    );
+    BOOST_CHECK_THROW(
+        test_input_against_flags(io::newline::mac, ::mixed, false),
+        io::newline_error
+    );
+}
+
+test_suite* init_unit_test_suite(int, char* [])
+{
+    test_suite* test = BOOST_TEST_SUITE("newline_filter test");
+    test->add(BOOST_TEST_CASE(&read_newline_filter));
+    test->add(BOOST_TEST_CASE(&write_newline_filter));
+    test->add(BOOST_TEST_CASE(&read_newline_checker));
+    test->add(BOOST_TEST_CASE(&write_newline_checker));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/null_test.cpp b/vendor/pdalboost/libs/iostreams/test/null_test.cpp
new file mode 100644
index 0000000..4e07850
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/null_test.cpp
@@ -0,0 +1,44 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <cctype>
+#include <boost/iostreams/device/null.hpp>
+#include <boost/iostreams/stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>  
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;    
+
+void read_null_source()
+{
+    stream<null_source> in;
+    in.open(null_source());
+    in.get();
+    BOOST_CHECK(in.eof());
+}
+
+void write_null_sink() 
+{
+    stream<null_sink> out;
+    out.open(null_sink());
+    write_data_in_chunks(out);
+    BOOST_CHECK(out.good());
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("null test");
+    test->add(BOOST_TEST_CASE(&read_null_source));
+    test->add(BOOST_TEST_CASE(&write_null_sink));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/operation_sequence_test.cpp b/vendor/pdalboost/libs/iostreams/test/operation_sequence_test.cpp
new file mode 100644
index 0000000..f8e89ae
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/operation_sequence_test.cpp
@@ -0,0 +1,268 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * Tests the facilities defined in the header
+ * libs/iostreams/test/detail/operation_sequence.hpp
+ *
+ * File:        libs/iostreams/test/operation_sequence_test.cpp
+ * Date:        Mon Dec 10 18:58:19 MST 2007
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ */
+
+#include <stdexcept>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>  
+#include "detail/operation_sequence.hpp"
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;
+
+        // Infrastructure for checking that operations are
+        // executed in the correct order
+
+void operation_sequence_test()
+{
+    // Test creating a duplicate operation
+    {
+        operation_sequence seq;
+        operation op = seq.new_operation(1);
+        BOOST_CHECK_THROW(seq.new_operation(1), runtime_error);
+    }
+
+    // Test reusing an operation id after first operation is destroyed
+    {
+        operation_sequence seq;
+        seq.new_operation(1);
+        BOOST_CHECK_NO_THROW(seq.new_operation(1));
+    }
+
+    // Test creating operations with illegal error codes
+    {
+        operation_sequence seq;
+        BOOST_CHECK_THROW(seq.new_operation(1, -100), runtime_error);
+        BOOST_CHECK_THROW(
+            seq.new_operation(1, BOOST_IOSTREAMS_TEST_MAX_OPERATION_ERROR + 1),
+            runtime_error
+        );
+    }
+
+    // Test two successful operations executed out of order
+    {
+        operation_sequence  seq;
+        operation           op1 = seq.new_operation(1);
+        operation           op2 = seq.new_operation(2);
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_NO_THROW(op2.execute());
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_NO_THROW(op1.execute());
+        BOOST_CHECK(seq.is_failure());
+    }
+
+    // Test executing an operation twice without resetting the sequence
+    {
+        operation_sequence  seq;
+        operation           op = seq.new_operation(1);
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_NO_THROW(op.execute());
+        BOOST_CHECK(seq.is_success());
+        BOOST_CHECK_NO_THROW(op.execute());
+        BOOST_CHECK(seq.is_failure());
+    }
+
+    // Test creating an operation after operation execution has commenced
+    {
+        operation_sequence  seq;
+        operation           op1 = seq.new_operation(1);
+        operation           op2 = seq.new_operation(2);
+        operation           op3;
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_NO_THROW(op1.execute());
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_THROW(op3 = seq.new_operation(3), runtime_error);
+        BOOST_CHECK_NO_THROW(op2.execute());
+        BOOST_CHECK(seq.is_success());
+    }
+
+    // Test three successful operations with consecutive ids, executed in order
+    {
+        operation_sequence  seq;
+        operation           op1 = seq.new_operation(1);
+        operation           op2 = seq.new_operation(2);
+        operation           op3 = seq.new_operation(3);
+
+        // First pass
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        op1.execute();
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        op2.execute();
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        op3.execute();
+        BOOST_CHECK(seq.is_success());
+
+        // Second pass
+        seq.reset();
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        op1.execute();
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        op2.execute();
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        op3.execute();
+        BOOST_CHECK(seq.is_success());
+    }
+
+    // Test three successful operations with non-consecutive ids, 
+    // executed in order
+    {
+        operation_sequence  seq;
+        operation           op2 = seq.new_operation(2);
+        operation           op3 = seq.new_operation(101);
+        operation           op1 = seq.new_operation(-43);
+
+        // First pass
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        op1.execute();
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        op2.execute();
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        op3.execute();
+        BOOST_CHECK(seq.is_success());
+
+        // Second pass
+        seq.reset();
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        op1.execute();
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        op2.execute();
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        op3.execute();
+        BOOST_CHECK(seq.is_success());
+    }
+
+    // Test checking for success after one of three operations
+    // has been destroyed
+    {
+        operation_sequence  seq;
+        operation           op1 = seq.new_operation(1);
+        operation           op3 = seq.new_operation(3);
+
+        {
+            operation       op2 = seq.new_operation(2);
+            BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+            op1.execute();
+            BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+            op2.execute();
+            BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+            op3.execute();
+        }
+        BOOST_CHECK(seq.is_success());
+    }
+
+    // Test executing an operation sequence twice, with one of the
+    // operations replaced with a new operation with the same id
+    // in the second pass
+    {
+        operation_sequence  seq;
+        operation           op1 = seq.new_operation(1);
+        operation           op3 = seq.new_operation(3);
+
+        // First pass
+        {
+            operation       op2 = seq.new_operation(2);
+            BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+            op1.execute();
+            BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+            op2.execute();
+            BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+            op3.execute();
+            BOOST_CHECK(seq.is_success());
+        }
+
+        // Second pass
+        seq.reset();
+        {
+            operation       op2 = seq.new_operation(2);
+            BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+            op1.execute();
+            BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+            op2.execute();
+            BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+            op3.execute();
+            BOOST_CHECK(seq.is_success());
+        }
+    }
+
+    // Test three operations executed in order, the first of which throws
+    {
+        operation_sequence  seq;
+        operation           op1 = seq.new_operation(1, 1);
+        operation           op2 = seq.new_operation(2);
+        operation           op3 = seq.new_operation(3);
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_THROW(op1.execute(), operation_error<1>);
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_NO_THROW(op2.execute());
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_NO_THROW(op3.execute());
+        BOOST_CHECK(seq.is_success());
+    }
+
+    // Test three operations executed in order, the second of which throws
+    {
+        operation_sequence  seq;
+        operation           op1 = seq.new_operation(1);
+        operation           op2 = seq.new_operation(2, 2);
+        operation           op3 = seq.new_operation(3);
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_NO_THROW(op1.execute());
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_THROW(op2.execute(), operation_error<2>);
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_NO_THROW(op3.execute());
+        BOOST_CHECK(seq.is_success());
+    }
+
+    // Test three operations executed in order, the third of which throws
+    {
+        operation_sequence  seq;
+        operation           op1 = seq.new_operation(1);
+        operation           op2 = seq.new_operation(2);
+        operation           op3 = seq.new_operation(3, 3);
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_NO_THROW(op1.execute());
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_NO_THROW(op2.execute());
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_THROW(op3.execute(), operation_error<3>);
+        BOOST_CHECK(seq.is_success());
+    }
+
+    // Test three operations executed in order, the first and 
+    // third of which throw
+    {
+        operation_sequence  seq;
+        operation           op1 = seq.new_operation(1, 1);
+        operation           op2 = seq.new_operation(2);
+        operation           op3 = seq.new_operation(3, 3);
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_THROW(op1.execute(), operation_error<1>);
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_NO_THROW(op2.execute());
+        BOOST_CHECK(!seq.is_failure() && !seq.is_success());
+        BOOST_CHECK_THROW(op3.execute(), operation_error<3>);
+        BOOST_CHECK(seq.is_success());
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("execute test");
+    test->add(BOOST_TEST_CASE(&operation_sequence_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/path_test.cpp b/vendor/pdalboost/libs/iostreams/test/path_test.cpp
new file mode 100644
index 0000000..7861f0e
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/path_test.cpp
@@ -0,0 +1,25 @@
+// (C) Copyright Daniel James 2011.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <boost/iostreams/detail/path.hpp>
+#include <boost/filesystem/path.hpp>
+
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+
+void path_test()
+{
+    pdalboost::filesystem::path orig("a/b");
+    pdalboost::iostreams::detail::path p(orig);
+    p = orig;
+}
+
+pdalboost::unit_test::test_suite* init_unit_test_suite(int, char* []) 
+{
+    pdalboost::unit_test::test_suite* test = BOOST_TEST_SUITE("mapped_file test");
+    test->add(BOOST_TEST_CASE(&path_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/pipeline_test.cpp b/vendor/pdalboost/libs/iostreams/test/pipeline_test.cpp
new file mode 100644
index 0000000..d9c535f
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/pipeline_test.cpp
@@ -0,0 +1,90 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <fstream>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>  
+#include "detail/filters.hpp"
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+using pdalboost::unit_test::test_suite;    
+
+void pipeline_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    {
+        test_file src;
+        filtering_istream 
+            in1( toupper_filter() | 
+                 file_source(src.name()) );
+        filtering_istream 
+            in2( toupper_filter() | 
+                 toupper_filter() | 
+                 file_source(src.name()) );
+        filtering_istream 
+            in3( toupper_filter() | 
+                 toupper_filter() | 
+                 toupper_filter() | 
+                 file_source(src.name()) );
+        filtering_istream 
+            in4( toupper_filter() | 
+                 toupper_filter() | 
+                 toupper_filter() | 
+                 toupper_filter() | 
+                 file_source(src.name()) );
+        BOOST_CHECK(in1.size() == 2);
+        BOOST_CHECK(in2.size() == 3);
+        BOOST_CHECK(in3.size() == 4);
+        BOOST_CHECK(in4.size() == 5);
+    }
+
+    {
+        test_file       src;
+        uppercase_file  upper;
+        filtering_istream 
+            first( toupper_filter() | 
+                   toupper_multichar_filter() | 
+                   file_source(src.name(), in_mode) );
+        ifstream second(upper.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from a filtering_istream in chunks with a "
+            "multichar input filter"
+        );
+    }    
+    
+    {
+        temp_file       dest;
+        lowercase_file  lower;
+        filtering_ostream  
+            out( tolower_filter() |
+                 tolower_multichar_filter() |
+                 file_sink(dest.name(), out_mode) );
+        write_data_in_chunks(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), lower.name()),
+            "failed writing to a filtering_ostream in chunks with a "
+            "multichar output filter with no buffer"
+        );
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("pipeline test");
+    test->add(BOOST_TEST_CASE(&pipeline_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/putback_test.hpp b/vendor/pdalboost/libs/iostreams/test/putback_test.hpp
new file mode 100644
index 0000000..eb9b1e5
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/putback_test.hpp
@@ -0,0 +1,167 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams/ for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_PUTBACK_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_PUTBACK_HPP_INCLUDED
+
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/iostreams/putback.hpp>
+#include "detail/constants.hpp"
+#include "detail/temp_file.hpp"
+
+using pdalboost::iostreams::test::chunk_size;
+
+bool putback_test_one(std::istream& is)
+{
+    try {
+        do {
+            char buf[chunk_size];
+            is.read(buf, chunk_size);
+            if (is.gcount() < static_cast<std::streamsize>(chunk_size))
+                break;
+            is.putback('a');
+            if (is.get() != 'a')
+                return false;
+        } while (!is.eof());
+        return true;
+    } catch (std::exception&) { return false; }
+}
+
+bool putback_test_two(std::istream& is)
+{
+    try {
+        do {
+            char buf[chunk_size];
+            is.read(buf, chunk_size);
+            if (is.gcount() < static_cast<std::streamsize>(chunk_size))
+                break;
+            is.putback('a');
+            is.putback('b');
+            is.putback('c');
+            is.putback('d');
+            if ( is.get() != 'd' || is.get() != 'c' ||
+                 is.get() != 'b' || is.get() != 'a' )
+            {
+                return false;
+            }
+        } while (!is.eof());
+        return true;
+    } catch (std::exception&) { return false; }
+}
+
+template<typename Source>
+bool putback_test_three(Source& src)
+{
+    try {
+        while (true) {
+            char buf[chunk_size];
+            if (pdalboost::iostreams::read(src, buf, chunk_size) < chunk_size)
+                break;
+            pdalboost::iostreams::putback(src, 'a');
+            if (pdalboost::iostreams::get(src) != 'a')
+                return false;
+        }
+        return true;
+    } catch (std::exception&) { return false; }
+}
+
+template<typename Source>
+bool putback_test_four(Source& src)
+{
+    try {
+        while (true) {
+            char buf[chunk_size];
+            if (pdalboost::iostreams::read(src, buf, chunk_size) < chunk_size)
+                break;
+            pdalboost::iostreams::putback(src, 'a');
+            pdalboost::iostreams::putback(src, 'b');
+            pdalboost::iostreams::putback(src, 'c');
+            pdalboost::iostreams::putback(src, 'd');
+            if ( pdalboost::iostreams::get(src) != 'd' || 
+                 pdalboost::iostreams::get(src) != 'c' ||
+                 pdalboost::iostreams::get(src) != 'b' || 
+                 pdalboost::iostreams::get(src) != 'a' )
+            {
+                return false;
+            }
+        }
+        return true;
+    } catch (std::exception&) { return false; }
+}
+
+void putback_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file test;
+
+    {
+        filtering_istream is;
+        is.set_device_buffer_size(0);
+        is.push(file_source(test.name()));
+        BOOST_CHECK_MESSAGE(
+            putback_test_one(is),
+            "failed putting back to unbuffered filtering_istream"
+        );
+    }
+
+    {
+        filtering_istream is;
+        is.set_pback_size(4);
+        is.push(file_source(test.name()));
+        BOOST_CHECK_MESSAGE(
+            putback_test_two(is),
+            "failed putting back to buffered filtering_istream"
+        );
+    }
+
+    {
+        filtering_istream is;
+        is.set_device_buffer_size(0);
+        is.push(file_source(test.name()));
+        BOOST_CHECK_MESSAGE(
+            putback_test_three(is),
+            "failed putting back to unbuffered filtering_istream"
+        );
+    }
+
+    {
+        filtering_istream is;
+        is.set_pback_size(4);
+        is.push(file_source(test.name()));
+        BOOST_CHECK_MESSAGE(
+            putback_test_four(is),
+            "failed putting back to buffered filtering_istream"
+        );
+    }
+
+    {
+        filtering_istreambuf sb;
+        sb.set_device_buffer_size(0);
+        sb.push(file_source(test.name()));
+        BOOST_CHECK_MESSAGE(
+            putback_test_three(sb),
+            "failed putting back to unbuffered filtering_istream"
+        );
+    }
+
+    {
+        filtering_istreambuf sb;
+        sb.set_pback_size(4);
+        sb.push(file_source(test.name()));
+        BOOST_CHECK_MESSAGE(
+            putback_test_four(sb),
+            "failed putting back to buffered filtering_istream"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_PUTBACK_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/read_bidir_filter_test.hpp b/vendor/pdalboost/libs/iostreams/test/read_bidir_filter_test.hpp
new file mode 100644
index 0000000..20b8483
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/read_bidir_filter_test.hpp
@@ -0,0 +1,131 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_READ_BIDIRECTIONAL_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_READ_BIDIRECTIONAL_FILTER_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/combine.hpp>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/filters.hpp"
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void read_bidirectional_filter_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    uppercase_file upper;
+
+    //{
+    //    test_file                        src;
+    //    temp_file                        dest; // Dummy.
+    //    filtering_stream<bidirectional>  first;
+    //    first.push(combine(toupper_filter(), tolower_filter()));
+    //    first.push(
+    //        combine(file_source(src.name()), file_sink(dest.name()))
+    //    );
+    //    ifstream second(upper.name().c_str());
+    //    BOOST_CHECK_MESSAGE(
+    //        compare_streams_in_chars(first, second),
+    //        "failed reading from filtering_stream<bidirectional> in chars with an "
+    //        "input filter"
+    //    );
+    //}
+
+    {
+        test_file                        src;
+        temp_file                        dest; // Dummy.
+        filtering_stream<bidirectional>  first;
+        first.push(combine(toupper_filter(), tolower_filter()));
+        first.push(
+            combine(file_source(src.name()), file_sink(dest.name()))
+        );
+        ifstream second(upper.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from filtering_stream<bidirectional> in chunks with an "
+            "input filter"
+        );
+    }
+
+    //{
+    //    test_file                        src;
+    //    temp_file                        dest; // Dummy.
+    //    filtering_stream<bidirectional>  first(
+    //        combine(toupper_multichar_filter(), tolower_filter()), 0
+    //    );
+    //    first.push(
+    //        combine(file_source(src.name()), file_sink(dest.name()))
+    //    );
+    //    ifstream second(upper.name().c_str());
+    //    BOOST_CHECK_MESSAGE(
+    //        compare_streams_in_chars(first, second),
+    //        "failed reading from filtering_stream<bidirectional> in chars with "
+    //        "a multichar input filter with no buffer"
+    //    );
+    //}
+
+    //{
+    //    test_file                        src;
+    //    temp_file                        dest; // Dummy.
+    //    filtering_stream<bidirectional>  first(
+    //        combine(toupper_multichar_filter(), tolower_filter()), 0
+    //    );
+    //    first.push(
+    //        combine(file_source(src.name()), file_sink(dest.name()))
+    //    );
+    //    ifstream second(upper.name().c_str());
+    //    BOOST_CHECK_MESSAGE(
+    //        compare_streams_in_chunks(first, second),
+    //        "failed reading from filtering_stream<bidirectional> in chunks "
+    //        "with a multichar input filter with no buffer"
+    //    );
+    //}
+
+    //{
+    //    test_file                        src;
+    //    temp_file                        dest; // Dummy.
+    //    filtering_stream<bidirectional>  first(
+    //        combine(toupper_multichar_filter(), tolower_filter())
+    //    );
+    //    first.push(
+    //        combine(file_source(src.name()), file_sink(dest.name()))
+    //    );
+    //    ifstream second(upper.name().c_str());
+    //    BOOST_CHECK_MESSAGE(
+    //        compare_streams_in_chars(first, second),
+    //        "failed reading from filtering_stream<bidirectional> in chars with a "
+    //        "multichar input filter"
+    //    );
+    //}
+
+    //{
+    //    test_file                        src;
+    //    temp_file                        dest; // Dummy.
+    //    filtering_stream<bidirectional>  first(
+    //        combine(toupper_multichar_filter(), tolower_filter())
+    //    );
+    //    first.push(
+    //        combine(file_source(src.name()), file_sink(dest.name()))
+    //    );
+    //    ifstream second(upper.name().c_str());
+    //    BOOST_CHECK_MESSAGE(
+    //        compare_streams_in_chunks(first, second),
+    //        "failed reading from filtering_stream<bidirectional> in chunks "
+    //        "with a multichar input filter"
+    //    );
+    //}
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_READ_BIDIRECTIONAL_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/read_bidir_streambuf_test.hpp b/vendor/pdalboost/libs/iostreams/test/read_bidir_streambuf_test.hpp
new file mode 100644
index 0000000..ca911f4
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/read_bidir_streambuf_test.hpp
@@ -0,0 +1,77 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_READ_BIDIRECTIONAL_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_READ_BIDIRECTIONAL_STREAMBUF_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void read_bidirectional_streambuf_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file  test1;       
+    test_file  test2;            
+
+    {
+        filebuf fb;
+        fb.open(test1.name().c_str(), BOOST_IOS::in);
+        filtering_stream<bidirectional> first(fb, 0);
+        ifstream second(test2.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from filtering_stream<bidirectional> based on a"
+            "streambuf in chars with no buffer"
+        );
+    }
+
+    {
+        filebuf fb;
+        fb.open(test1.name().c_str(), BOOST_IOS::in);
+        filtering_stream<bidirectional> first(fb, 0);
+        ifstream second(test2.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from filtering_stream<bidirectional> based on a"
+            "streambuf in chunks with no buffer"
+        );
+    }
+
+    {
+        filebuf fb;
+        fb.open(test1.name().c_str(), BOOST_IOS::in);
+        filtering_stream<bidirectional> first(fb);
+        ifstream second(test2.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from filtering_stream<bidirectional> based on a"
+            "streambuf in chars with large buffer"
+        );
+    }
+
+    {
+        filebuf fb;
+        fb.open(test1.name().c_str(), BOOST_IOS::in);
+        filtering_stream<bidirectional> first(fb);
+        ifstream second(test2.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from filtering_stream<bidirectional> based on a"
+            "streambuf in chunks with large buffer"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_READ_BIDIRECTIONAL_STREAMBUF_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/read_bidir_test.hpp b/vendor/pdalboost/libs/iostreams/test/read_bidir_test.hpp
new file mode 100644
index 0000000..745f767
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/read_bidir_test.hpp
@@ -0,0 +1,85 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_READ_BIDIRECTIONAL_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_READ_BIDIRECTIONAL_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/combine.hpp>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void read_bidirectional_test()
+{ 
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file test;          
+
+    {
+        test_file src;
+        temp_file dest; // Dummy.
+        filtering_stream<bidirectional> first(
+            combine(file_source(src.name()), file_sink(dest.name())), 0
+        );
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from filtering_stream<bidirectional>"
+            "in chars with no buffer"
+        );
+    }
+
+    {
+        test_file src;
+        temp_file dest; // Dummy.
+        filtering_stream<bidirectional> first(
+            combine(file_source(src.name()), file_sink(dest.name())), 0
+        );
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from filtering_stream<bidirectional>"
+            "in chunks with no buffer"
+        );
+    }
+
+    {
+        test_file src;
+        temp_file dest; // Dummy.
+        filtering_stream<bidirectional> first(
+            combine(file_source(src.name()), file_sink(dest.name()))
+        );
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from filtering_stream<bidirectional>"
+            "in chars with large buffer"
+        );
+    }
+
+    {
+        test_file src;
+        temp_file dest; // Dummy.
+        filtering_stream<bidirectional> first(
+            combine(file_source(src.name()), file_sink(dest.name()))
+        );
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from filtering_stream<bidirectional>"
+            "in chunks with large buffer"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_READ_BIDIRECTIONAL_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/read_input_filter_test.hpp b/vendor/pdalboost/libs/iostreams/test/read_input_filter_test.hpp
new file mode 100644
index 0000000..2739f93
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/read_input_filter_test.hpp
@@ -0,0 +1,105 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_READ_INPUT_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_READ_INPUT_FILTER_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/filters.hpp"
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void read_input_filter_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file       test;
+    uppercase_file  upper;
+
+    {
+        filtering_istream first;
+        first.push(toupper_filter());
+        first.push(file_source(test.name()));
+        ifstream second(upper.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from a filtering_istream in chars with an "
+            "input filter"
+        );
+    }
+
+    {
+        filtering_istream first;
+        first.push(toupper_filter());
+        first.push(file_source(test.name()));
+        ifstream second(upper.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from a filtering_istream in chunks with an "
+            "input filter"
+        );
+    }
+
+    {
+        filtering_istream first;
+        first.push(toupper_multichar_filter(), 0);
+        first.push(file_source(test.name()));
+        ifstream second(upper.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from a filtering_istream in chars with a "
+            "multichar input filter with no buffer"
+        );
+    }
+
+    {
+        filtering_istream first;
+        first.push(toupper_multichar_filter(), 0);
+        first.push(file_source(test.name()));
+        ifstream second(upper.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from a filtering_istream in chunks with a "
+            "multichar input filter with no buffer"
+        );
+    }
+
+    {
+        test_file src;
+        filtering_istream first;
+        first.push(toupper_multichar_filter());
+        first.push(file_source(src.name()));
+        ifstream second(upper.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from a filtering_istream in chars with a "
+            "multichar input filter"
+        );
+    }
+
+    {
+        test_file src;
+        filtering_istream first;
+        first.push(toupper_multichar_filter());
+        first.push(file_source(src.name()));
+        ifstream second(upper.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from a filtering_istream in chunks with a "
+            "multichar input filter"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_READ_INPUT_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/read_input_istream_test.hpp b/vendor/pdalboost/libs/iostreams/test/read_input_istream_test.hpp
new file mode 100644
index 0000000..6edffc9
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/read_input_istream_test.hpp
@@ -0,0 +1,76 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_READ_INPUT_ISTREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_READ_INPUT_ISTREAM_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void read_input_istream_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file test;      
+    test_file test2;
+
+    {
+        test_file test2;
+        ifstream src(test2.name().c_str());
+        filtering_istream first(src, 0);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from filtering_istream based on an istream"
+            "in chars with no buffer"
+        );
+    }
+
+    {
+        test_file test2;
+        ifstream src(test2.name().c_str());
+        filtering_istream first(src, 0);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from filtering_istream based on an istream"
+            "in chunks with no buffer"
+        );
+    }
+
+    {
+        test_file test2;
+        ifstream src(test2.name().c_str());
+        filtering_istream first(src);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from filtering_istream based on an istream"
+            "in chars with large buffer"
+        );
+    }
+
+    {
+        test_file test2;
+        ifstream src(test2.name().c_str());
+        filtering_istream first(src);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from filtering_istream based on an istream"
+            "in chunks with large buffer"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_READ_INPUT_ISTREAM_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/read_input_seq_test.hpp b/vendor/pdalboost/libs/iostreams/test/read_input_seq_test.hpp
new file mode 100644
index 0000000..ce8635f
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/read_input_seq_test.hpp
@@ -0,0 +1,70 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_READ_INPUT_SEQUENCE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_READ_INPUT_SEQUENCE_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void read_input_sequence_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file        file;     
+    test_sequence<>  seq;
+
+    {
+        filtering_stream<input> first(make_iterator_range(seq), 0);
+        ifstream second(file.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from range_adapter "
+            "in chars with no buffer"
+        );
+    }
+
+    {
+        filtering_stream<input> first(make_iterator_range(seq), 0);
+        ifstream second(file.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from range_adapter "
+            "in chars with no buffer"
+        );
+    }
+
+    {
+        filtering_stream<input> first(make_iterator_range(seq));
+        ifstream second(file.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from range_adapter "
+            "in chars with large buffer"
+        );
+    }
+
+    {
+        filtering_stream<input> first(make_iterator_range(seq));
+        ifstream second(file.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from range_adapter "
+            "in chars with large buffer"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_READ_INPUT_SEQUENCE_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/read_input_test.hpp b/vendor/pdalboost/libs/iostreams/test/read_input_test.hpp
new file mode 100644
index 0000000..32c2743
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/read_input_test.hpp
@@ -0,0 +1,65 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_READ_INPUT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_READ_INPUT_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void read_input_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file  test1;       
+    test_file  test2;       
+
+    {
+        filtering_istream  first(file_source(test1.name()), 0);
+        ifstream           second(test2.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from filtering_istream in chars with no buffer"
+        );
+    }
+
+    {
+        filtering_istream  first(file_source(test1.name()), 0);
+        ifstream           second(test2.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from filtering_istream in chunks with no buffer"
+        );
+    }
+
+    {
+        filtering_istream  first(file_source(test1.name()));
+        ifstream           second(test2.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from filtering_istream in chars with buffer"
+        );
+    }
+
+    {
+        filtering_istream  first(file_source(test1.name()));
+        ifstream           second(test2.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from filtering_istream in chunks with buffer"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_READ_INPUT_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/read_seekable_seq_test.hpp b/vendor/pdalboost/libs/iostreams/test/read_seekable_seq_test.hpp
new file mode 100644
index 0000000..a9eef76
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/read_seekable_seq_test.hpp
@@ -0,0 +1,71 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_READ_SEEKABLE_SEQUENCE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_READ_SEEKABLE_SEQUENCE_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void read_seekable_sequence_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file        file;     
+    test_sequence<>  seq;
+
+    {
+        filtering_stream<seekable>  first(make_iterator_range(seq), 0);
+        ifstream                    second(file.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from filtering_stream<seekable> based on a"
+            "sequence in chars with no buffer"
+        );
+    }
+
+    {
+        filtering_stream<seekable>  first(make_iterator_range(seq), 0);
+        ifstream                    second(file.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from filtering_stream<seekable> based on a"
+            "sequence in chunks with no buffer"
+        );
+    }
+
+    {
+        filtering_stream<seekable>  first(make_iterator_range(seq));
+        ifstream                    second(file.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from filtering_stream<seekable> based on a"
+            "sequence in chars with large buffer"
+        );
+    }
+
+    {
+        filtering_stream<seekable>  first(make_iterator_range(seq));
+        ifstream                    second(file.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from filtering_stream<seekable> based on a"
+            "sequence in chunks with large buffer"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_READ_SEEKABLE_SEQUENCE_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/read_seekable_test.hpp b/vendor/pdalboost/libs/iostreams/test/read_seekable_test.hpp
new file mode 100644
index 0000000..7b98b04
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/read_seekable_test.hpp
@@ -0,0 +1,69 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_READ_SEEKABLE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_READ_SEEKABLE_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void read_seekable_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file test1;     
+    test_file test2;  
+
+    {
+        filtering_stream<seekable> first(file(test1.name(), in_mode), 0);
+        ifstream second(test2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from filtering_stream<seekable>"
+            "in chars with no buffer"
+        );
+    }
+
+    {
+        filtering_stream<seekable> first(file(test1.name(), in_mode), 0);
+        ifstream second(test2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from filtering_stream<seekable>"
+            "in chars with no buffer"
+        );
+    }
+
+    {
+        filtering_stream<seekable> first(file(test1.name(), in_mode));
+        ifstream second(test2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from filtering_stream<seekable>"
+            "in chars with large buffer"
+        );
+    }
+
+    {
+        filtering_stream<seekable> first(file(test1.name(), in_mode));
+        ifstream second(test2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from filtering_stream<seekable>"
+            "in chars with large buffer"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_READ_SEEKABLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/regex_filter_test.cpp b/vendor/pdalboost/libs/iostreams/test/regex_filter_test.cpp
new file mode 100644
index 0000000..07963fb
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/regex_filter_test.cpp
@@ -0,0 +1,329 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <fstream>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/iostreams/filter/regex.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+using namespace std;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;    
+
+struct replace_lower {
+    std::string operator() (const pdalboost::match_results<const char*>&)
+    { return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; }
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+    std::wstring operator() (const pdalboost::match_results<const wchar_t*>&)
+    { return L"ABCDEFGHIJKLMNOPQRSTUVWXYZ"; }
+#endif
+};
+
+void regex_filter_test()
+{
+    // Note: Given the basic stream and filter tests, two regex tests 
+    // are probably sufficient: reading with a filter based on a function,
+    // and writing with a filter based on a format string.
+
+    test_file       test; 
+    uppercase_file  upper; 
+
+    pdalboost::regex match_lower("[a-z]+");
+    std::string fmt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+    {
+        // Note: the ifstream second is placed in a nested scope because 
+        // closing and reopening a single ifstream failed for CW 9.4 on Windows.
+
+        // Test reading from a regex filter based on a function in chars.
+        filtering_istream
+            first(pdalboost::iostreams::regex_filter(match_lower, replace_lower()));
+        first.push(file_source(test.name(), in_mode));
+        {
+            ifstream second(upper.name().c_str(), in_mode);  
+            BOOST_CHECK_MESSAGE(
+                compare_streams_in_chars(first, second),
+                "failed reading from function-based regex_filter in chars"
+            );
+        }
+        first.pop();
+
+        // Test reading from a regex filter based on a function in chunks.
+        // (Also tests reusing the regex filter.)
+        first.push(file_source(test.name(), in_mode));
+        {
+            ifstream second(upper.name().c_str(), in_mode);
+            BOOST_CHECK_MESSAGE(
+                compare_streams_in_chunks(first, second),
+                "failed reading from function-based regex_filter in chunks"
+            );
+        }
+    }
+
+    {
+        // Note: the ifstream second is placed in a nested scope because 
+        // closing and reopening a single ifstream failed for CW 9.4 on Windows.
+
+        // Test reading from a regex filter based on a format string in chars.
+        filtering_istream 
+            first(pdalboost::iostreams::regex_filter(match_lower, fmt));
+        first.push(file_source(test.name(), in_mode));
+        {
+            ifstream second(upper.name().c_str(), in_mode);
+            BOOST_CHECK_MESSAGE(
+                compare_streams_in_chars(first, second),
+                "failed reading from format-string-based regex_filter in chars"
+            );
+        }
+        first.pop();
+
+        // Test reading from a regex filter based on a format string in chunks.
+        // (Also tests reusing the regex filter.)
+        first.push(file_source(test.name(), in_mode));
+        {
+            ifstream second(upper.name().c_str(), in_mode);
+            BOOST_CHECK_MESSAGE(
+                compare_streams_in_chars(first, second),
+                "failed reading from format-string-based regex_filter in chunks"
+            );
+        }
+    }
+
+    {
+        test_file dest1;
+        test_file dest2;
+
+        // Test writing to a regex filter based on a function in chars.
+        filtering_ostream 
+            out(pdalboost::iostreams::regex_filter(match_lower, replace_lower()));
+        out.push(file_sink(dest1.name(), out_mode));
+        write_data_in_chars(out);
+        out.pop();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), upper.name()),
+            "failed writing to function-based regex_filter in chars"
+        );
+
+        // Test writing to a regex filter based on a function in chunks.
+        // (Also tests reusing the regex filter.)
+        out.push(file_sink(dest2.name(), out_mode));
+        write_data_in_chunks(out);
+        out.pop();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest2.name(), upper.name()),
+            "failed writing to function-based regex_filter in chunks"
+        );
+    }
+
+    {
+        test_file dest1;
+        test_file dest2;
+
+        // Test writing to a regex filter based on a format string in chars.
+        filtering_ostream  
+            out(pdalboost::iostreams::regex_filter(match_lower, fmt));
+        out.push(file_sink(dest1.name(), out_mode));
+        write_data_in_chars(out);
+        out.pop();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), upper.name()),
+            "failed writing to format-string-based regex_filter in chars"
+        );
+
+        // Test writing to a regex filter based on a format string in chunks.
+        // (Also tests reusing the regex filter.)
+        out.push(file_sink(dest2.name(), out_mode));
+        write_data_in_chunks(out);
+        out.pop();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest2.name(), upper.name()),
+            "failed writing to format-string-based regex_filter in chunks"
+        );
+    }
+
+    {
+        // Note: the ifstream second is placed in a nested scope because 
+        // closing and reopening a single ifstream failed for CW 9.4 on Windows.
+
+        // Test reading from a regex filter with no matches; this checks that
+        // Ticket #1139 is fixed
+        pdalboost::regex   match_xxx("xxx");
+        test_file      test2; 
+        filtering_istream
+            first(pdalboost::iostreams::regex_filter(match_xxx, replace_lower()));
+        first.push(file_source(test.name(), in_mode));
+        {
+            ifstream second(test2.name().c_str(), in_mode);  
+            BOOST_CHECK_MESSAGE(
+                compare_streams_in_chars(first, second),
+                "failed reading from a regex filter with no matches"
+            );
+        }
+    }
+}
+
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS 
+
+void wregex_filter_test()
+{
+    // Note: Given the basic stream and filter tests, two regex tests 
+    // are probably sufficient: reading with a filter based on a function,
+    // and writing with a filter based on a format string.
+
+    test_file       test; 
+    uppercase_file  upper; 
+
+    pdalboost::wregex match_lower(L"[a-z]+");
+    std::wstring fmt = L"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+    {
+        // Note: the ifstream second is placed in a nested scope because 
+        // closing and reopening a single ifstream failed for CW 9.4 on Windows.
+
+        // Test reading from a regex filter based on a function in chars.
+        filtering_wistream
+            first(pdalboost::iostreams::wregex_filter(match_lower, replace_lower()));
+        first.push(wfile_source(test.name(), in_mode));
+        {
+            wifstream second(upper.name().c_str(), in_mode);  
+            BOOST_CHECK_MESSAGE(
+                compare_streams_in_chars(first, second),
+                "failed reading from function-based regex_filter in chars"
+            );
+        }
+        first.pop();
+
+        // Test reading from a regex filter based on a function in chunks.
+        // (Also tests reusing the regex filter.)
+        first.push(wfile_source(test.name(), in_mode));
+        {
+            wifstream second(upper.name().c_str(), in_mode);
+            BOOST_CHECK_MESSAGE(
+                compare_streams_in_chunks(first, second),
+                "failed reading from function-based regex_filter in chunks"
+            );
+        }
+    }
+
+    {
+        // Note: the ifstream second is placed in a nested scope because 
+        // closing and reopening a single ifstream failed for CW 9.4 on Windows.
+
+        // Test reading from a regex filter based on a format string in chars.
+        filtering_wistream 
+            first(pdalboost::iostreams::wregex_filter(match_lower, fmt));
+        first.push(wfile_source(test.name(), in_mode));
+        {
+            wifstream second(upper.name().c_str(), in_mode);
+            BOOST_CHECK_MESSAGE(
+                compare_streams_in_chars(first, second),
+                "failed reading from format-string-based regex_filter in chars"
+            );
+        }
+        first.pop();
+
+        // Test reading from a regex filter based on a format string in chunks.
+        // (Also tests reusing the regex filter.)
+        first.push(wfile_source(test.name(), in_mode));
+        {
+            wifstream second(upper.name().c_str(), in_mode);
+            BOOST_CHECK_MESSAGE(
+                compare_streams_in_chars(first, second),
+                "failed reading from format-string-based regex_filter in chunks"
+            );
+        }
+    }
+
+    {
+        test_file dest1;
+        test_file dest2;
+
+        // Test writing to a regex filter based on a function in chars.
+        filtering_wostream 
+            out(pdalboost::iostreams::wregex_filter(match_lower, replace_lower()));
+        out.push(wfile_sink(dest1.name(), out_mode));
+        write_data_in_chars(out);
+        out.pop();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), upper.name()),
+            "failed writing to function-based regex_filter in chars"
+        );
+
+        // Test writing to a regex filter based on a function in chunks.
+        // (Also tests reusing the regex filter.)
+        out.push(wfile_sink(dest2.name(), out_mode));
+        write_data_in_chunks(out);
+        out.pop();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest2.name(), upper.name()),
+            "failed writing to function-based regex_filter in chunks"
+        );
+    }
+
+    {
+        test_file dest1;
+        test_file dest2;
+
+        // Test writing to a regex filter based on a format string in chars.
+        filtering_wostream  
+            out(pdalboost::iostreams::wregex_filter(match_lower, fmt));
+        out.push(wfile_sink(dest1.name(), out_mode));
+        write_data_in_chars(out);
+        out.pop();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), upper.name()),
+            "failed writing to format-string-based regex_filter in chars"
+        );
+
+        // Test writing to a regex filter based on a format string in chunks.
+        // (Also tests reusing the regex filter.)
+        out.push(wfile_sink(dest2.name(), out_mode));
+        write_data_in_chunks(out);
+        out.pop();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest2.name(), upper.name()),
+            "failed writing to format-string-based regex_filter in chunks"
+        );
+    }
+
+    {
+        // Note: the ifstream second is placed in a nested scope because 
+        // closing and reopening a single ifstream failed for CW 9.4 on Windows.
+
+        // Test reading from a regex filter with no matches; this checks that
+        // Ticket #1139 is fixed
+        pdalboost::wregex   match_xxx(L"xxx");
+        test_file      test2; 
+        filtering_wistream
+            first(pdalboost::iostreams::wregex_filter(match_xxx, replace_lower()));
+        first.push(wfile_source(test.name(), in_mode));
+        {
+            wifstream second(test2.name().c_str(), in_mode);  
+            BOOST_CHECK_MESSAGE(
+                compare_streams_in_chars(first, second),
+                "failed reading from a regex filter with no matches"
+            );
+        }
+    }
+}
+
+#endif
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("regex_filter test");
+    test->add(BOOST_TEST_CASE(&regex_filter_test));
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+    test->add(BOOST_TEST_CASE(&wregex_filter_test));
+#endif
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/restrict_test.cpp b/vendor/pdalboost/libs/iostreams/test/restrict_test.cpp
new file mode 100644
index 0000000..0d2f4bf
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/restrict_test.cpp
@@ -0,0 +1,690 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Allow this file to be used by slice_test.hpp. It is important not to 
+// replace BOOST_RESTRICT with BOOST_IOSTREAMS_RESTRICT here, since that
+// would interfere with the oepration of the header 
+// <boost/iostreams/restrict.hpp>
+#include <iostream>
+
+#if defined(BOOST_RESTRICT_USE_SLICE)
+#  include <boost/iostreams/slice.hpp>
+#  define BOOST_RESTRICT slice
+#else
+#  include <boost/iostreams/restrict.hpp>
+#  define BOOST_RESTRICT restrict
+#endif
+
+#include <algorithm>         // equal.
+#include <cctype>
+#include <iterator>          // back_inserter.
+#include <vector>
+#include <boost/iostreams/copy.hpp>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/device/null.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/closable.hpp"
+#include "detail/constants.hpp"
+#include "detail/filters.hpp"
+#include "detail/operation_sequence.hpp"
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+using namespace std;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;
+namespace io = pdalboost::iostreams;
+
+const char pad_char = '\n';
+const int small_padding = 50;
+const int large_padding = default_device_buffer_size + 50;
+
+void write_padding(std::ofstream& out, int len)
+{
+    for (int z = 0; z < len; ++z)
+        out.put(pad_char);
+}
+
+struct restricted_test_file : public temp_file {
+    restricted_test_file(int padding, bool half_open = false)
+        {
+            BOOST_IOS::openmode mode = 
+                BOOST_IOS::out | BOOST_IOS::binary;
+            ::std::ofstream f(name().c_str(), mode);
+            write_padding(f, padding);
+            const char* buf = narrow_data();
+            for (int z = 0; z < data_reps; ++z)
+                f.write(buf, data_length());
+            if (!half_open)
+                write_padding(f, padding);
+        }
+};
+
+struct restricted_test_sequence : public std::vector<char> {
+    restricted_test_sequence(int padding, bool half_open = false)
+        {
+            for (int z = 0; z < padding; ++z)
+                push_back(pad_char);
+            const char* buf = narrow_data();
+            for (int w = 0; w < data_reps; ++w)
+                insert(end(), buf, buf + data_length());
+            if (!half_open)
+                for (int x = 0; x < padding; ++x)
+                    push_back(pad_char);
+        }
+};
+
+struct restricted_uppercase_file : public temp_file {
+    restricted_uppercase_file(int padding, bool half_open = false)
+        {
+            BOOST_IOS::openmode mode = 
+                BOOST_IOS::out | BOOST_IOS::binary;
+            ::std::ofstream f(name().c_str(), mode);
+            write_padding(f, padding);
+            const char* buf = narrow_data();
+            for (int z = 0; z < data_reps; ++z)
+                for (int w = 0; w < data_length(); ++w)
+                    f.put((char) std::toupper(buf[w]));
+            if (!half_open)
+                write_padding(f, padding);
+        }
+};
+
+struct restricted_lowercase_file : public temp_file {
+    restricted_lowercase_file(int padding, bool half_open = false)
+        {
+            BOOST_IOS::openmode mode = 
+                BOOST_IOS::out | BOOST_IOS::binary;
+            ::std::ofstream f(name().c_str(), mode);
+            write_padding(f, padding);
+            const char* buf = narrow_data();
+            for (int z = 0; z < data_reps; ++z)
+                for (int w = 0; w < data_length(); ++w)
+                    f.put((char) std::tolower(buf[w]));
+            if (!half_open)
+                write_padding(f, padding);
+        }
+};
+
+// Can't have a restricted view of a non-seekble output filter.
+struct tolower_seekable_filter : public seekable_filter {
+    typedef char char_type;
+    struct category 
+        : output_seekable,
+          filter_tag
+        { };
+    template<typename Sink>
+    bool put(Sink& s, char c)
+    { return pdalboost::iostreams::put(s, (char) std::tolower(c)); }
+
+    template<typename Sink>
+    std::streampos seek(Sink& s, stream_offset off, BOOST_IOS::seekdir way)
+    { return pdalboost::iostreams::seek(s, off, way); }
+};
+
+void read_device()
+{
+    {
+        restricted_test_file   src1(small_padding);
+        test_file              src2;
+        stream_offset          off = small_padding,
+                               len = data_reps * data_length();
+        filtering_istream      first( 
+            BOOST_RESTRICT(file_source(src1.name(), in_mode), off, len));
+        ifstream               second(src2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from restriction<Device> with small padding"
+        );
+    }
+
+    {
+        restricted_test_file   src1(large_padding);
+        test_file              src2;
+        stream_offset          off = large_padding,
+                               len = data_reps * data_length();
+        filtering_istream      first(
+            BOOST_RESTRICT(file_source(src1.name(), in_mode), off, len));
+        ifstream               second(src2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from restriction<Device> with large padding"
+        );
+    }
+
+    {
+        restricted_test_file   src1(small_padding, true);
+        test_file              src2;
+        stream_offset          off = small_padding;
+        filtering_istream      first(
+            BOOST_RESTRICT(file_source(src1.name(), in_mode), off));
+        ifstream               second(src2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from half-open restriction<Device> "
+            "with small padding"
+        );
+    }
+
+    {
+        restricted_test_file   src1(large_padding, true);
+        test_file              src2;
+        stream_offset          off = large_padding;
+        filtering_istream      first(
+            BOOST_RESTRICT(file_source(src1.name(), in_mode), off));
+        ifstream               second(src2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from half-open restriction<Device> "
+            "with large padding"
+        );
+    }
+}
+
+void read_direct_device()
+{
+    {
+        test_sequence<char>       first;
+        restricted_test_sequence  src(small_padding);
+        array_source              array_src(&src[0], &src[0] + src.size());
+        stream_offset             off = small_padding,
+                                  len = data_reps * data_length();
+        filtering_istream         second(BOOST_RESTRICT(array_src, off, len));
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed reading from restriction<Direct>"
+        );
+    }
+
+    {
+        test_sequence<char>       first;
+        restricted_test_sequence  src(small_padding, true);
+        array_source              array_src(&src[0], &src[0] + src.size());
+        stream_offset             off = small_padding;
+        filtering_istream         second(BOOST_RESTRICT(array_src, off));
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed reading from half-open restriction<Direct>"
+        );
+    }
+}
+
+void read_filter()
+{
+    {
+        restricted_test_file   src1(small_padding);
+        uppercase_file         src2;
+        stream_offset          off = small_padding,
+                               len = data_reps * data_length();
+        filtering_istream      first;
+        first.push(BOOST_RESTRICT(toupper_filter(), off, len));
+        first.push(file_source(src1.name(), in_mode));
+        ifstream           second(src2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from restriction<Filter> with small padding"
+        );
+    }
+
+    {
+        restricted_test_file   src1(large_padding);
+        uppercase_file         src2;
+        stream_offset          off = large_padding,
+                               len = data_reps * data_length();
+        filtering_istream      first;
+        first.push(BOOST_RESTRICT(toupper_filter(), off, len));
+        first.push(file_source(src1.name(), in_mode));
+        ifstream           second(src2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from restriction<Filter> with large padding"
+        );
+    }
+
+    {
+        restricted_test_file   src1(small_padding, true);
+        uppercase_file         src2;
+        stream_offset          off = small_padding;
+        filtering_istream      first;
+        first.push(BOOST_RESTRICT(toupper_filter(), off));
+        first.push(file_source(src1.name(), in_mode));
+        ifstream           second(src2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from half-open restriction<Filter> "
+            "with small padding"
+        );
+    }
+
+    {
+        restricted_test_file   src1(large_padding, true);
+        uppercase_file         src2;
+        stream_offset          off = large_padding;
+        filtering_istream      first;
+        first.push(BOOST_RESTRICT(toupper_filter(), off));
+        first.push(file_source(src1.name(), in_mode));
+        ifstream           second(src2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from half-open restriction<Filter> "
+            "with large padding"
+        );
+    }
+}
+
+void write_device() 
+{
+    {
+        restricted_uppercase_file  dest1(small_padding);
+        restricted_test_file       dest2(small_padding);
+        stream_offset              off = small_padding,
+                                   len = data_reps * data_length();
+        filtering_ostream          out(
+            BOOST_RESTRICT(file(dest1.name(), BOOST_IOS::binary), off, len));
+        write_data_in_chunks(out);
+        out.reset();
+        ifstream                   first(dest1.name().c_str(), in_mode);
+        ifstream                   second(dest2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed writing to restriction<Device> with small padding"
+        );
+    }
+
+    {
+        restricted_uppercase_file  dest1(large_padding);
+        restricted_test_file       dest2(large_padding);
+        stream_offset              off = large_padding,
+                                   len = data_reps * data_length();
+        filtering_ostream          out
+            (BOOST_RESTRICT(file(dest1.name(), BOOST_IOS::binary), off, len));
+        write_data_in_chunks(out);
+        out.reset();
+        ifstream                   first(dest1.name().c_str(), in_mode);
+        ifstream                   second(dest2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed writing to restriction<Device> with large padding"
+        );
+    }
+
+    {
+        restricted_uppercase_file  dest1(small_padding, true);
+        restricted_test_file       dest2(small_padding, true);
+        stream_offset              off = small_padding;
+        filtering_ostream          out
+            (BOOST_RESTRICT(file(dest1.name(), BOOST_IOS::binary), off));
+        write_data_in_chunks(out);
+        out.reset();
+        ifstream                   first(dest1.name().c_str(), in_mode);
+        ifstream                   second(dest2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed writing to half-open restriction<Device> "
+            "with small padding"
+        );
+    }
+
+    {
+        restricted_uppercase_file  dest1(large_padding, true);
+        restricted_test_file       dest2(large_padding, true);
+        stream_offset              off = large_padding;
+        filtering_ostream          out
+            (BOOST_RESTRICT(file(dest1.name(), BOOST_IOS::binary), off));
+        write_data_in_chunks(out);
+        out.reset();
+        ifstream                   first(dest1.name().c_str(), in_mode);
+        ifstream                   second(dest2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed writing to half-open restriction<Device> "
+            "with large padding"
+        );
+    }
+}
+
+void write_direct_device() 
+{
+    {
+        vector<char>              dest1( data_reps * data_length() + 
+                                         2 * small_padding, 
+                                         '\n' );
+        restricted_test_sequence  dest2(small_padding);
+        stream_offset             off = small_padding,
+                                  len = data_reps * data_length();
+        array_sink                array(&dest1[0], &dest1[0] + dest1.size());
+        filtering_ostream         out(BOOST_RESTRICT(array, off, len));
+        write_data_in_chunks(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            std::equal(dest1.begin(), dest1.end(), dest2.begin()),
+            "failed writing to restriction<Direct>"
+        );
+    }
+
+    {
+        vector<char>              dest1(
+            data_reps * data_length() + small_padding, '\n');
+        restricted_test_sequence  dest2(small_padding, true);
+        stream_offset             off = small_padding;
+        array_sink                array(&dest1[0], &dest1[0] + dest1.size());
+        filtering_ostream         out(BOOST_RESTRICT(array, off));
+        write_data_in_chunks(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            std::equal(dest1.begin(), dest1.end(), dest2.begin()),
+            "failed writing to half-open restriction<Direct>"
+        );
+    }
+}
+
+void write_filter() 
+{
+    {
+        restricted_test_file       dest1(small_padding);
+        restricted_lowercase_file  dest2(small_padding);
+        stream_offset              off = small_padding,
+                                   len = data_reps * data_length();
+        filtering_ostream          out;
+        out.push(BOOST_RESTRICT(tolower_seekable_filter(), off, len));
+        out.push(file(dest1.name(), BOOST_IOS::binary));
+        write_data_in_chunks(out);
+        out.reset();
+        ifstream               first(dest1.name().c_str(), in_mode);
+        ifstream               second(dest2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed writing to restriction<Filter> with small padding"
+        );
+    }
+
+    {
+        restricted_test_file       dest1(large_padding);
+        restricted_lowercase_file  dest2(large_padding);
+        stream_offset              off = large_padding,
+                                   len = data_reps * data_length();
+        filtering_ostream          out;
+        out.push(BOOST_RESTRICT(tolower_seekable_filter(), off, len));
+        out.push(file(dest1.name(), BOOST_IOS::binary));
+        write_data_in_chunks(out);
+        out.reset();
+        ifstream               first(dest1.name().c_str(), in_mode);
+        ifstream               second(dest2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed writing to restriction<Filter> with large padding"
+        );
+    }
+
+    {
+        restricted_test_file       dest1(small_padding, true);
+        restricted_lowercase_file  dest2(small_padding, true);
+        stream_offset              off = small_padding;
+        filtering_ostream          out;
+        out.push(BOOST_RESTRICT(tolower_seekable_filter(), off));
+        out.push(file(dest1.name(), BOOST_IOS::binary));
+        write_data_in_chunks(out);
+        out.reset();
+        ifstream               first(dest1.name().c_str(), in_mode);
+        ifstream               second(dest2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed writing to restriction<Filter> with small padding"
+        );
+    }
+
+    {
+        restricted_test_file       dest1(large_padding, true);
+        restricted_lowercase_file  dest2(large_padding, true);
+        stream_offset              off = large_padding;
+        filtering_ostream          out;
+        out.push(BOOST_RESTRICT(tolower_seekable_filter(), off));
+        out.push(file(dest1.name(), BOOST_IOS::binary));
+        write_data_in_chunks(out);
+        out.reset();
+        ifstream                   first(dest1.name().c_str(), in_mode);
+        ifstream                   second(dest2.name().c_str(), in_mode);
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed writing to restriction<Filter> with large padding"
+        );
+    }
+}
+
+void seek_device()
+{
+    {
+        restricted_test_file       src(large_padding);
+        stream_offset              off = large_padding,
+                                   len = data_reps * data_length();
+        filtering_stream<seekable> io(
+            BOOST_RESTRICT(file(src.name(), BOOST_IOS::binary), off, len));
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chunks(io),
+            "failed seeking within restriction<Device>"
+        );
+    }
+
+    {
+        restricted_test_file       src(large_padding, true);
+        stream_offset              off = large_padding;
+        filtering_stream<seekable> io(
+            BOOST_RESTRICT(file(src.name(), BOOST_IOS::binary), off));
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chunks(io),
+            "failed seeking within half-open restriction<Device>"
+        );
+    }
+}
+
+void seek_direct_device()
+{
+    {
+        vector<char>               src(
+            data_reps * data_length() + 2 * small_padding, '\n');
+        stream_offset              off = small_padding,
+                                   len = data_reps * data_length();
+        io::array                  ar(&src[0], &src[0] + src.size());
+        filtering_stream<seekable> io(BOOST_RESTRICT(ar, off, len));
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chars(io),
+            "failed seeking within restriction<Direct> with small padding"
+        );
+    }
+
+    {
+        vector<char>               src(
+            data_reps * data_length() + small_padding, '\n');
+        stream_offset              off = small_padding;
+        io::array                  ar(&src[0], &src[0] + src.size());
+        filtering_stream<seekable> io(BOOST_RESTRICT(ar, off));
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chars(io),
+            "failed seeking within half-open restriction<Direct> "
+            "with small padding"
+        );
+    }
+}
+
+void seek_filter()
+{
+    {
+        restricted_test_file       src(small_padding);
+        stream_offset              off = large_padding,
+                                   len = data_reps * data_length();
+        filtering_stream<seekable> io;
+        io.push(BOOST_RESTRICT(identity_seekable_filter(), off, len));
+        io.push(file(src.name(), BOOST_IOS::binary));
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chars(io),
+            "failed seeking within restriction<Device>"
+        );
+    }
+
+    {
+        restricted_test_file       src(small_padding, true);
+        stream_offset              off = large_padding;
+        filtering_stream<seekable> io;
+        io.push(BOOST_RESTRICT(identity_seekable_filter(), off));
+        io.push(file(src.name(), BOOST_IOS::binary));
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chars(io),
+            "failed seeking within half-open restriction<Device>"
+        );
+    }
+}
+
+void close_device()
+{
+    // Restrict a source
+    {
+        operation_sequence  seq;
+        chain<input>        ch;
+        ch.push(
+            io::BOOST_RESTRICT(
+                closable_device<input>(seq.new_operation(1)), 
+                0
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Restrict a seekable device
+    {
+        operation_sequence  seq;
+        chain<seekable>     ch;
+        ch.push(
+            io::BOOST_RESTRICT(
+                closable_device<seekable>(seq.new_operation(1)), 
+                0
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Restrict a direct source
+    {
+        operation_sequence  seq;
+        chain<input>        ch;
+        ch.push(
+            io::BOOST_RESTRICT(
+                closable_device<direct_input>(seq.new_operation(1)), 
+                0
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Restrict a direct seekable device
+    {
+        operation_sequence  seq;
+        chain<seekable>     ch;
+        ch.push(
+            io::BOOST_RESTRICT(
+                closable_device<direct_seekable>(seq.new_operation(1)), 
+                0
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+}
+
+void close_filter()
+{
+    // Restrict an input filter
+    {
+        operation_sequence  seq;
+        chain<input>        ch;
+        ch.push(
+            io::BOOST_RESTRICT(
+                closable_filter<input>(seq.new_operation(2)), 
+                0
+            )
+        );
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Restrict a seekable filter
+    {
+        operation_sequence  seq;
+        chain<seekable>     ch;
+        ch.push(
+            io::BOOST_RESTRICT(
+                closable_filter<seekable>(seq.new_operation(1)), 
+                0
+            )
+        );
+        ch.push(closable_device<seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Restrict a dual_use filter for input
+    {
+        operation_sequence  seq;
+        chain<input>        ch;
+        operation           dummy;
+        ch.push(
+            io::BOOST_RESTRICT(
+                closable_filter<dual_use>(
+                    seq.new_operation(2),
+                    dummy
+                ),
+                0
+            )
+        );
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Restrict a dual_use filter for output
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        operation           dummy;
+        ch.push(
+            io::BOOST_RESTRICT(
+                closable_filter<dual_use>(
+                    dummy,
+                    seq.new_operation(1)
+                ),
+                0
+            )
+        );
+        ch.push(closable_device<output>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = 
+        BOOST_TEST_SUITE(BOOST_STRINGIZE(BOOST_RESTRICT) " test");
+    test->add(BOOST_TEST_CASE(&read_device));
+    test->add(BOOST_TEST_CASE(&read_direct_device));
+    test->add(BOOST_TEST_CASE(&read_filter));
+    test->add(BOOST_TEST_CASE(&write_device));
+    test->add(BOOST_TEST_CASE(&write_direct_device));
+    test->add(BOOST_TEST_CASE(&write_filter));
+    test->add(BOOST_TEST_CASE(&seek_device));
+    test->add(BOOST_TEST_CASE(&seek_direct_device));
+    test->add(BOOST_TEST_CASE(&close_device));
+    test->add(BOOST_TEST_CASE(&close_filter));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/seek_test.hpp b/vendor/pdalboost/libs/iostreams/test/seek_test.hpp
new file mode 100644
index 0000000..9eba3e1
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/seek_test.hpp
@@ -0,0 +1,51 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_SEEK_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_SEEK_HPP_INCLUDED
+
+
+#include <boost/config.hpp>         // BOOST_MSVC, make sure size_t is in std.
+#include <cstddef>                  // std::size_t.
+#include <string>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "../example/container_device.hpp"  // We use container_device instead
+#include "detail/verification.hpp"          // of make_iterator_range to 
+                                            // reduce dependence on Boost.Range
+
+void seek_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::example;
+    using namespace pdalboost::iostreams::test;
+
+    {
+        string                      test(data_reps * data_length(), '\0');
+        filtering_stream<seekable>  io;
+        io.push(container_device<string>(test));
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chars(io),
+            "failed seeking within a filtering_stream<seekable>, in chars"
+        );
+    }
+
+    {
+        string                      test(data_reps * data_length(), '\0');
+        filtering_stream<seekable>  io;
+        io.push(container_device<string>(test));
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chunks(io),
+            "failed seeking within a filtering_stream<seekable>, in chunks"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_SEEK_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/seekable_file_test.cpp b/vendor/pdalboost/libs/iostreams/test/seekable_file_test.cpp
new file mode 100644
index 0000000..5709a90
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/seekable_file_test.cpp
@@ -0,0 +1,56 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation. 
+
+#include <fstream>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;     
+
+void seekable_file_test()
+{
+    {
+        temp_file temp;
+        file f( temp.name(), 
+                BOOST_IOS::in | BOOST_IOS::out | 
+                BOOST_IOS::trunc | BOOST_IOS::binary);
+        filtering_stream<seekable> io(f);
+        io.exceptions(BOOST_IOS::failbit | BOOST_IOS::badbit);
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chars(io),
+            "failed seeking within a file, in chars"
+        );
+    }
+
+    {
+        temp_file temp;
+        file f( temp.name(), 
+                BOOST_IOS::in | BOOST_IOS::out | 
+                BOOST_IOS::trunc | BOOST_IOS::binary);
+        filtering_stream<seekable> io(f);
+        io.exceptions(BOOST_IOS::failbit | BOOST_IOS::badbit);
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chunks(io),
+            "failed seeking within a file, in chunks"
+        );
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("seekable file test");
+    test->add(BOOST_TEST_CASE(&seekable_file_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/seekable_filter_test.cpp b/vendor/pdalboost/libs/iostreams/test/seekable_filter_test.cpp
new file mode 100644
index 0000000..d2d7612
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/seekable_filter_test.cpp
@@ -0,0 +1,95 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <vector>
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/device/array.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "../example/container_device.hpp"  // We use container_device instead
+#include "detail/filters.hpp"               // of make_iterator_range to 
+#include "detail/temp_file.hpp"             // reduce dependence on Boost.Range
+#include "detail/verification.hpp"          
+                                            
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::example;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;  
+
+
+// Code generation bugs cause tests to fail with global optimization.
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# pragma optimize("g", off)
+#endif
+
+void seekable_filter_test()
+{
+    {
+        vector<char> test(data_reps * data_length(), '0');
+        filtering_stream<seekable> io;
+        io.push(identity_seekable_filter());
+        io.push(container_device< vector<char> >(test));
+        io.exceptions(BOOST_IOS::failbit | BOOST_IOS::badbit);
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chars(io),
+            "failed seeking within a file, in chars"
+        );
+    }
+
+    {
+        vector<char> test(data_reps * data_length(), '0');
+        filtering_stream<seekable> io;
+        io.push(identity_seekable_filter());
+        io.push(container_device< vector<char> >(test));
+        io.exceptions(BOOST_IOS::failbit | BOOST_IOS::badbit);
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chunks(io),
+            "failed seeking within a file, in chunks"
+        );
+    }
+
+    {
+        vector<char> test(data_reps * data_length(), '0');
+        filtering_stream<seekable> io;
+        io.push(identity_seekable_multichar_filter());
+        io.push(container_device< vector<char> >(test));
+        io.exceptions(BOOST_IOS::failbit | BOOST_IOS::badbit);
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chars(io),
+            "failed seeking within a file, in chars"
+        );
+    }
+
+    {
+        vector<char> test(data_reps * data_length(), '0');
+        filtering_stream<seekable> io;
+        io.push(identity_seekable_multichar_filter());
+        io.push(container_device< vector<char> >(test));
+        io.exceptions(BOOST_IOS::failbit | BOOST_IOS::badbit);
+        BOOST_CHECK_MESSAGE(
+            test_seekable_in_chunks(io),
+            "failed seeking within a file, in chunks"
+        );
+    }
+}
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# pragma optimize("", on)
+#endif
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("seekable filter test");
+    test->add(BOOST_TEST_CASE(&seekable_filter_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/sequence_test.cpp b/vendor/pdalboost/libs/iostreams/test/sequence_test.cpp
new file mode 100644
index 0000000..5589d66
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/sequence_test.cpp
@@ -0,0 +1,24 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <boost/test/unit_test.hpp>
+#include "read_input_seq_test.hpp"
+#include "read_seekable_seq_test.hpp"
+#include "write_output_seq_test.hpp"
+#include "write_seekable_seq_test.hpp"
+
+using pdalboost::unit_test::test_suite;
+
+test_suite* init_unit_test_suite(int, char* [])
+{
+    test_suite* test = BOOST_TEST_SUITE("sequence test");
+    test->add(BOOST_TEST_CASE(&read_input_sequence_test));
+    test->add(BOOST_TEST_CASE(&read_seekable_sequence_test));
+    test->add(BOOST_TEST_CASE(&write_output_sequence_test));
+    test->add(BOOST_TEST_CASE(&write_seekable_sequence_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/slice_test.cpp b/vendor/pdalboost/libs/iostreams/test/slice_test.cpp
new file mode 100644
index 0000000..a3b1481
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/slice_test.cpp
@@ -0,0 +1,17 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+
+ * File:        test/slice_test.hpp
+ * Date:        Sun Jan 06 12:57:30 MST 2008
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ *
+ * Tests the overloaded function template pdalboost::iostreams::slice.
+ */
+
+#define BOOST_RESTRICT_USE_SLICE
+#include "restrict_test.cpp"
diff --git a/vendor/pdalboost/libs/iostreams/test/stdio_filter_test.cpp b/vendor/pdalboost/libs/iostreams/test/stdio_filter_test.cpp
new file mode 100644
index 0000000..2407ed7
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/stdio_filter_test.cpp
@@ -0,0 +1,144 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <cctype>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filter/stdio.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/filters.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> // BCC 5.x.
+
+using namespace pdalboost::iostreams;
+using pdalboost::unit_test::test_suite;
+
+struct toupper_stdio_filter : stdio_filter {
+    void do_filter()
+    {
+        int c;
+        while ((c = std::cin.get()) != EOF)
+            std::cout.put(std::toupper((unsigned char)c));
+    }
+};
+
+struct tolower_stdio_filter : stdio_filter {
+    void do_filter()
+    {
+        int c;
+        while ((c = std::cin.get()) != EOF)
+            std::cout.put(std::tolower((unsigned char)c));
+    }
+};
+
+struct padding_stdio_filter : stdio_filter {
+    padding_stdio_filter(char pad_char) : pad_char_(pad_char) { }
+    void do_filter()
+    {
+        int c;
+        while ((c = std::cin.get()) != EOF) {
+            std::cout.put(c);
+            std::cout.put(pad_char_);
+        }
+    }
+    char pad_char_;
+};
+
+void read_stdio_filter()
+{
+    using namespace pdalboost::iostreams::test;
+
+    test_file          src1, src2;
+    filtering_istream  first, second;
+
+    first.push(toupper_filter());
+    first.push(padding_filter('a'));
+    first.push(file_source(src1.name(), in_mode));
+    second.push(toupper_stdio_filter());
+    second.push(padding_stdio_filter('a'));
+    second.push(file_source(src2.name(), in_mode));
+    BOOST_CHECK_MESSAGE(
+        compare_streams_in_chunks(first, second),
+        "failed reading from a stdio_filter"
+    );
+
+    first.reset();
+    first.push(padding_filter('a'));
+    first.push(toupper_filter());
+    first.push(file_source(src1.name(), in_mode));
+    second.reset();
+    second.push(padding_stdio_filter('a'));
+    second.push(toupper_stdio_filter());
+    second.push(file_source(src2.name(), in_mode));
+    BOOST_CHECK_MESSAGE(
+        compare_streams_in_chunks(first, second),
+        "failed reading from a stdio_filter"
+    );
+}
+
+void write_stdio_filter()
+{
+    using namespace std;
+    using namespace pdalboost::iostreams::test;
+
+    temp_file          dest1, dest2;
+    filtering_ostream  out1, out2;
+
+    out1.push(tolower_filter());
+    out1.push(padding_filter('a'));
+    out1.push(file_sink(dest1.name(), in_mode));
+    out2.push(tolower_stdio_filter());
+    out2.push(padding_stdio_filter('a'));
+    out2.push(file_sink(dest2.name(), in_mode));
+    write_data_in_chunks(out1);
+    write_data_in_chunks(out2);
+    out1.reset();
+    out2.reset();
+
+    {
+        ifstream first(dest1.name().c_str());
+        ifstream second(dest2.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed writing to a stdio_filter"
+        );
+    }
+
+    out1.push(padding_filter('a'));
+    out1.push(tolower_filter());
+    out1.push(file_sink(dest1.name(), in_mode));
+    out2.push(padding_stdio_filter('a'));
+    out2.push(tolower_stdio_filter());
+    out2.push(file_sink(dest2.name(), in_mode));
+    write_data_in_chunks(out1);
+    write_data_in_chunks(out2);
+    out1.reset();
+    out2.reset();
+
+    {
+        ifstream first(dest1.name().c_str());
+        ifstream second(dest2.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed writing to a stdio_filter"
+        );
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* [])
+{
+    test_suite* test = BOOST_TEST_SUITE("line_filter test");
+    test->add(BOOST_TEST_CASE(&read_stdio_filter));
+    test->add(BOOST_TEST_CASE(&write_stdio_filter));
+    return test;
+}
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp> // BCC 5.x.
diff --git a/vendor/pdalboost/libs/iostreams/test/stream_offset_32bit_test.cpp b/vendor/pdalboost/libs/iostreams/test/stream_offset_32bit_test.cpp
new file mode 100644
index 0000000..feec582
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/stream_offset_32bit_test.cpp
@@ -0,0 +1,51 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+
+ * File:        libs/iostreams/test/stream_offset_32bit_test.cpp
+ * Date:        Sun Dec 23 21:11:23 MST 2007
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ *
+ * Tests the functions defined in the header "boost/iostreams/positioning.hpp"
+ * with small (32-bit) file offsets.
+ */
+
+#include <boost/iostreams/positioning.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include <boost/type_traits/is_integral.hpp>
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using pdalboost::unit_test::test_suite;
+
+void stream_offset_32bit_test()
+{
+    stream_offset  small_file = 1000000;
+    stream_offset  off = -small_file;
+    streampos      pos = offset_to_position(off);
+
+    while (off < small_file)
+    {
+        BOOST_CHECK(off == position_to_offset(offset_to_position(off)));
+        BOOST_CHECK(pos == offset_to_position(position_to_offset(pos)));
+        off += 20000;
+        pos += 20000;
+        BOOST_CHECK(off == position_to_offset(offset_to_position(off)));
+        BOOST_CHECK(pos == offset_to_position(position_to_offset(pos)));
+        off -= 10000;
+        pos -= 10000;
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* [])
+{
+    test_suite* test = BOOST_TEST_SUITE("stream_offset 32-bit test");
+    test->add(BOOST_TEST_CASE(&stream_offset_32bit_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/stream_offset_64bit_test.cpp b/vendor/pdalboost/libs/iostreams/test/stream_offset_64bit_test.cpp
new file mode 100644
index 0000000..ae274aa
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/stream_offset_64bit_test.cpp
@@ -0,0 +1,85 @@
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying 
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ * 
+ * See http://www.boost.org/libs/iostreams for documentation.
+
+ * File:        libs/iostreams/test/stream_offset_64bit_test.cpp
+ * Date:        Sun Dec 23 21:11:23 MST 2007
+ * Copyright:   2007-2008 CodeRage, LLC
+ * Author:      Jonathan Turkanis
+ * Contact:     turkanis at coderage dot com
+ *
+ * Tests the functions defined in the header "boost/iostreams/positioning.hpp"
+ * with large (64-bit) file offsets.
+ */
+
+#include <cstdio>            // fpos_t
+#include <iostream>
+#include <sstream>
+#include <boost/config.hpp>  // BOOST_MSVC
+#include <boost/iostreams/detail/ios.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using pdalboost::unit_test::test_suite;
+
+#ifdef BOOST_MSVC
+# pragma warning(disable:4127)
+#endif
+
+void stream_offset_64bit_test()
+{
+    stream_offset  large_file = (stream_offset) 100 *
+                                (stream_offset) 1024 *
+                                (stream_offset) 1024 *
+                                (stream_offset) 1024;
+    stream_offset  first = -large_file - (-large_file) % 10000000;
+    stream_offset  last = large_file - large_file % 10000000;
+
+    for (stream_offset off = first; off < last; off += 10000000)
+    {
+        if (off != position_to_offset(offset_to_position(off))) {
+            cout << "****************************************\n"
+                 << "* sizeof(fpos_t) = " << sizeof(fpos_t) << "\n"
+                 << "* sizeof(streamoff) = " << sizeof(streamoff) << "\n"
+                 << "* sizeof(stream_offset) = " 
+                 << sizeof(stream_offset) << "\n"
+                 << "****************************************\n";
+            stringstream s;
+            s << "off != position_to_offset(offset_to_position(off)) "
+                 "failed for (off >> 32) == 0x" 
+              << hex
+              << static_cast<unsigned int>(off >> 32) 
+              << " and (off & 0xFFFFFFFF) == 0x"
+              << static_cast<unsigned int>(off & 0xFFFFFFFF)
+              << std::endl;
+            BOOST_REQUIRE_MESSAGE(0, s.str().c_str());
+        }
+    }
+}
+
+void stream_offset_64bit_test2()
+{
+    pdalboost::int64_t val = pdalboost::int64_t(1) << 31;
+    std::streampos pos = pdalboost::iostreams::offset_to_position(val);
+    pos -= 2;
+    BOOST_CHECK_EQUAL(val - 2, pdalboost::iostreams::position_to_offset(pos));
+
+    val = -val;
+    pos = pdalboost::iostreams::offset_to_position(val);
+    pos += 2;
+    BOOST_CHECK_EQUAL(val + 2, pdalboost::iostreams::position_to_offset(pos));
+}
+
+test_suite* init_unit_test_suite(int, char* [])
+{
+    test_suite* test = BOOST_TEST_SUITE("stream_offset 64-bit test");
+    test->add(BOOST_TEST_CASE(&stream_offset_64bit_test));
+    test->add(BOOST_TEST_CASE(&stream_offset_64bit_test2));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/stream_state_test.cpp b/vendor/pdalboost/libs/iostreams/test/stream_state_test.cpp
new file mode 100644
index 0000000..41e5255
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/stream_state_test.cpp
@@ -0,0 +1,161 @@
+// (C) Copyright Frank Birbacher 2007
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <boost/iostreams/categories.hpp>  // tags.
+#include <boost/iostreams/detail/ios.hpp>  // openmode, seekdir, int types.
+#include <boost/iostreams/detail/error.hpp>
+#include <boost/iostreams/positioning.hpp>
+#include <boost/iostreams/stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+
+using namespace pdalboost::iostreams;
+using pdalboost::unit_test::test_suite;
+
+/* 
+ * This test unit uses a custom device to trigger errors. The device supports
+ * input, output, and seek according to the SeekableDevice concept. And each
+ * of the required functions throw a special detail::bad_xxx exception. This
+ * should trigger the iostreams::stream to set the badbit status flag.
+ * Additionally the exception can be propagated to the caller if the exception
+ * mask of the stream allows exceptions.
+ *
+ * The stream offers four different functions: read, write, seekg, and seekp.
+ * Each of them is tested with three different error reporting concepts:
+ * test by reading status flags, test by propagated exception, and test by
+ * calling std::ios_base::exceptions when badbit is already set.
+ *
+ * In each case all of the status checking functions of a stream are checked.
+ */
+
+//------------------Definition of error_device--------------------------------//
+
+// Device whose member functions throw
+struct error_device {
+    typedef char                 char_type;
+    typedef seekable_device_tag  category;
+    error_device(char const*) {}
+    std::streamsize read(char_type*, std::streamsize)
+    {
+        throw detail::bad_read();
+    }
+    std::streamsize write(const char_type*, std::streamsize)
+    {
+        throw detail::bad_write();
+    }
+    std::streampos seek(stream_offset, BOOST_IOS::seekdir)
+    {
+        throw detail::bad_seek();
+    }
+};
+
+typedef stream<error_device> test_stream;
+
+//------------------Stream state tester---------------------------------------//
+
+void check_stream_for_badbit(std::iostream& str)
+{
+    BOOST_CHECK_MESSAGE(!str.good(), "stream still good");
+    BOOST_CHECK_MESSAGE(!str.eof(), "eofbit set but not expected");
+    BOOST_CHECK_MESSAGE(str.bad(), "stream did not set badbit");
+    BOOST_CHECK_MESSAGE(str.fail(), "stream did not fail");
+    BOOST_CHECK_MESSAGE(str.operator ! (),
+            "stream does not report failure by operator !");
+    BOOST_CHECK_MESSAGE(0 == str.operator void* (),
+            "stream does not report failure by operator void*");
+}
+
+//------------------Test case generators--------------------------------------//
+
+template<void (*const function)(std::iostream&)>
+struct wrap_nothrow {
+    static void execute()
+    {
+        test_stream stream("foo");
+        BOOST_CHECK_NO_THROW( function(stream) );
+        check_stream_for_badbit(stream);
+    }
+};
+
+template<void (*const function)(std::iostream&)>
+struct wrap_throw {
+    static void execute()
+    {
+        typedef std::ios_base ios;
+        test_stream stream("foo");
+        
+        stream.exceptions(ios::failbit | ios::badbit);
+        BOOST_CHECK_THROW( function(stream), std::exception );
+        
+        check_stream_for_badbit(stream);
+    }
+};
+
+template<void (*const function)(std::iostream&)>
+struct wrap_throw_delayed {
+    static void execute()
+    {
+        typedef std::ios_base ios;
+        test_stream stream("foo");
+        
+        function(stream);
+        BOOST_CHECK_THROW(
+                stream.exceptions(ios::failbit | ios::badbit),
+                ios::failure
+            );
+        
+        check_stream_for_badbit(stream);
+    }
+};
+
+//------------------Stream operations that throw------------------------------//
+
+void test_read(std::iostream& str)
+{
+    char data[10];
+    str.read(data, 10);
+}
+
+void test_write(std::iostream& str)
+{
+    char data[10] = {0};
+    str.write(data, 10);
+        //force use of streambuf
+    str.flush();
+}
+
+void test_seekg(std::iostream& str)
+{
+    str.seekg(10);
+}
+
+void test_seekp(std::iostream& str)
+{
+    str.seekp(10);
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("stream state test");
+    
+    test->add(BOOST_TEST_CASE(&wrap_nothrow      <&test_read>::execute));
+    test->add(BOOST_TEST_CASE(&wrap_throw        <&test_read>::execute));
+    test->add(BOOST_TEST_CASE(&wrap_throw_delayed<&test_read>::execute));
+    
+    test->add(BOOST_TEST_CASE(&wrap_nothrow      <&test_write>::execute));
+    test->add(BOOST_TEST_CASE(&wrap_throw        <&test_write>::execute));
+    test->add(BOOST_TEST_CASE(&wrap_throw_delayed<&test_write>::execute));
+    
+    test->add(BOOST_TEST_CASE(&wrap_nothrow      <&test_seekg>::execute));
+    test->add(BOOST_TEST_CASE(&wrap_throw        <&test_seekg>::execute));
+    test->add(BOOST_TEST_CASE(&wrap_throw_delayed<&test_seekg>::execute));
+    
+    test->add(BOOST_TEST_CASE(&wrap_nothrow      <&test_seekp>::execute));
+    test->add(BOOST_TEST_CASE(&wrap_throw        <&test_seekp>::execute));
+    test->add(BOOST_TEST_CASE(&wrap_throw_delayed<&test_seekp>::execute));
+    
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/symmetric_filter_test.cpp b/vendor/pdalboost/libs/iostreams/test/symmetric_filter_test.cpp
new file mode 100644
index 0000000..96c6af8
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/symmetric_filter_test.cpp
@@ -0,0 +1,182 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <boost/iostreams/detail/buffer.hpp>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filter/symmetric.hpp>
+#include <boost/iostreams/filter/test.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/closable.hpp"
+#include "./detail/constants.hpp"
+#include "detail/operation_sequence.hpp"
+#include "./detail/temp_file.hpp"
+#include "./detail/verification.hpp"
+
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp> 
+
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;  
+namespace io = pdalboost::iostreams; 
+
+// Note: The filter is given an internal buffer -- unnecessary in this simple
+// case -- to stress test symmetric_filter.
+struct toupper_symmetric_filter_impl {
+    typedef char char_type;
+    explicit toupper_symmetric_filter_impl( 
+                std::streamsize buffer_size = 
+                    default_filter_buffer_size 
+             ) 
+        : buf_(buffer_size) 
+    {
+        buf_.set(0, 0);
+    }
+    bool filter( const char*& src_begin, const char* src_end,
+                 char*& dest_begin, char* dest_end, bool /* flush */ )
+    {
+        while ( can_read(src_begin, src_end) || 
+                can_write(dest_begin, dest_end) ) 
+        {
+            if (can_read(src_begin, src_end)) 
+                read(src_begin, src_end);
+            if (can_write(dest_begin, dest_end)) 
+                write(dest_begin, dest_end);
+        }
+        bool result = buf_.ptr() != buf_.eptr();
+        return result;
+    }
+    void close() { buf_.set(0, 0); }
+    void read(const char*& src_begin, const char* src_end)
+    {
+        std::ptrdiff_t count =
+            (std::min) ( src_end - src_begin,
+                         static_cast<std::ptrdiff_t>(buf_.size()) - 
+                             (buf_.eptr() - buf_.data()) );
+        while (count-- > 0)
+            *buf_.eptr()++ = std::toupper(*src_begin++);
+    }
+    void write(char*& dest_begin, char* dest_end)
+    {
+        std::ptrdiff_t count =
+            (std::min) ( dest_end - dest_begin,
+                         buf_.eptr() - buf_.ptr() );
+        while (count-- > 0)
+            *dest_begin++ = *buf_.ptr()++;
+        if (buf_.ptr() == buf_.eptr())
+            buf_.set(0, 0);
+    }
+    bool can_read(const char*& src_begin, const char* src_end)
+    { return src_begin != src_end && buf_.eptr() != buf_.end(); }
+    bool can_write(char*& dest_begin, char* dest_end)
+    { return dest_begin != dest_end && buf_.ptr() != buf_.eptr(); }
+    pdalboost::iostreams::detail::buffer<char> buf_;
+};
+
+typedef symmetric_filter<toupper_symmetric_filter_impl>
+        toupper_symmetric_filter;
+
+void read_symmetric_filter()
+{
+    test_file       test;
+    uppercase_file  upper;
+    BOOST_CHECK(
+        test_input_filter( toupper_symmetric_filter(default_filter_buffer_size),
+                           file_source(test.name(), in_mode),
+                           file_source(upper.name(), in_mode) )
+    );
+} 
+
+void write_symmetric_filter()
+{
+    test_file       test;
+    uppercase_file  upper;
+    BOOST_CHECK(
+        test_output_filter( toupper_symmetric_filter(default_filter_buffer_size),
+                            file_source(test.name(), in_mode),
+                            file_source(upper.name(), in_mode) )
+    );
+}
+
+void close_symmetric_filter()
+{
+    // Test input
+    {
+        operation_sequence  seq;
+        chain<input>        ch;
+        ch.push(
+            io::symmetric_filter<closable_symmetric_filter>
+                (1, seq.new_operation(2))
+        );
+        ch.push(closable_device<input>(seq.new_operation(1)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Test output
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            io::symmetric_filter<closable_symmetric_filter>
+                (1, seq.new_operation(1))
+        );
+        ch.push(closable_device<output>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+}
+
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+
+struct wcopy_filter_impl {
+    typedef wchar_t char_type;
+    bool filter( const wchar_t*& src_begin, const wchar_t* src_end,
+                 wchar_t*& dest_begin, wchar_t* dest_end, bool /* flush */ )
+    {
+        if(src_begin != src_end && dest_begin != dest_end) {
+            *dest_begin++ = *src_begin++;
+        }
+        return false;
+    }
+    void close() {}
+};
+
+typedef symmetric_filter<wcopy_filter_impl> wcopy_filter;
+
+void wide_symmetric_filter()
+{
+    {
+        warray_source  src(wide_data(), wide_data() + data_length());
+        std::wstring   dest;
+        io::copy(src, io::compose(wcopy_filter(16), io::back_inserter(dest)));
+        BOOST_CHECK(dest == wide_data());
+    }
+    {
+        warray_source  src(wide_data(), wide_data() + data_length());
+        std::wstring   dest;
+        io::copy(io::compose(wcopy_filter(16), src), io::back_inserter(dest));
+        BOOST_CHECK(dest == wide_data());
+    }
+}
+
+#endif
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("symmetric_filter test");
+    test->add(BOOST_TEST_CASE(&read_symmetric_filter));
+    test->add(BOOST_TEST_CASE(&write_symmetric_filter));
+    test->add(BOOST_TEST_CASE(&close_symmetric_filter));
+#ifndef BOOST_IOSTREAMS_NO_WIDE_STREAMS
+    test->add(BOOST_TEST_CASE(&wide_symmetric_filter));
+#endif
+    return test;
+}
+
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
diff --git a/vendor/pdalboost/libs/iostreams/test/tee_test.cpp b/vendor/pdalboost/libs/iostreams/test/tee_test.cpp
new file mode 100644
index 0000000..6553e13
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/tee_test.cpp
@@ -0,0 +1,426 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <fstream>
+#include <boost/iostreams/compose.hpp>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/iostreams/tee.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/closable.hpp"
+#include "detail/operation_sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;  
+
+void read_write_test()
+{
+    {
+        test_file          src1, src2;
+        temp_file          dest;
+        filtering_istream  first, second;
+        first.push(tee(file_sink(dest.name(), out_mode)));
+        first.push(file_source(src1.name(), in_mode));
+        second.push(file_source(src2.name(), in_mode));
+        compare_streams_in_chars(first, second);  // ignore return value
+        first.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), src1.name()),
+            "failed reading from a tee_filter in chars"
+        );
+    }
+
+    {
+        test_file          src1, src2;
+        temp_file          dest;
+        filtering_istream  first, second;
+        first.push(tee(file_sink(dest.name(), out_mode)));
+        first.push(file_source(src1.name(), in_mode));
+        second.push(file_source(src2.name(), in_mode));
+        compare_streams_in_chunks(first, second);  // ignore return value
+        first.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), src1.name()),
+            "failed reading from a tee_filter in chunks"
+        );
+    }
+
+    {
+        temp_file          dest1;
+        temp_file          dest2;
+        filtering_ostream  out;
+        out.push(tee(file_sink(dest1.name(), out_mode)));
+        out.push(file_sink(dest2.name(), out_mode));
+        write_data_in_chars(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), dest2.name()),
+            "failed writing to a tee_filter in chars"
+        );
+    }
+
+    {
+        temp_file          dest1;
+        temp_file          dest2;
+        filtering_ostream  out;
+        out.push(tee(file_sink(dest1.name(), out_mode)));
+        out.push(file_sink(dest2.name(), out_mode));
+        write_data_in_chunks(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), dest2.name()),
+            "failed writing to a tee_filter in chunks"
+        );
+    }
+
+    {
+        test_file          src1, src2;
+        temp_file          dest;
+        filtering_istream  first, second;
+        first.push( tee( file_source(src1.name(), in_mode),
+                         file_sink(dest.name(), out_mode) ) );
+        second.push(file_source(src2.name(), in_mode));
+        compare_streams_in_chars(first, second);  // ignore return value
+        first.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), src1.name()),
+            "failed reading from a tee_device in chars"
+        );
+    }
+
+    {
+        test_file          src1, src2;
+        temp_file          dest;
+        filtering_istream  first, second;
+        first.push( tee( file_source(src1.name(), in_mode),
+                         file_sink(dest.name(), out_mode) ) );
+        second.push(file_source(src2.name(), in_mode));
+        compare_streams_in_chunks(first, second);  // ignore return value
+        first.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), src1.name()),
+            "failed reading from a tee_device in chunks"
+        );
+    }
+
+    {
+        temp_file          dest1;
+        temp_file          dest2;
+        filtering_ostream  out;
+        out.push( tee( file_sink(dest1.name(), out_mode),
+                       file_sink(dest2.name(), out_mode) ) );
+        write_data_in_chars(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), dest2.name()),
+            "failed writing to a tee_device in chars"
+        );
+    }
+
+    {
+        temp_file          dest1;
+        temp_file          dest2;
+        filtering_ostream  out;
+        out.push( tee( file_sink(dest1.name(), out_mode),
+                       file_sink(dest2.name(), out_mode) ) );
+        write_data_in_chunks(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), dest2.name()),
+            "failed writing to a tee_device in chunks"
+        );
+    }
+}
+
+void close_test()
+{
+    // Note: The implementation of tee_device closes the first
+    // sink before the second
+
+    // Tee two sinks (Borland <= 5.8.2 needs a little help compiling this case,
+    // but it executes the closing algorithm correctly)
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            pdalboost::iostreams::tee(
+                closable_device<output>(seq.new_operation(1)),
+                closable_device<
+                    #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+                        borland_output
+                    #else
+                        output
+                    #endif
+                >(seq.new_operation(2))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Tee two bidirectional devices
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            pdalboost::iostreams::tee(
+                closable_device<bidirectional>(
+                    seq.new_operation(1),
+                    seq.new_operation(2)
+                ),
+                closable_device<bidirectional>(
+                    seq.new_operation(3),
+                    seq.new_operation(4)
+                )
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Tee two seekable devices
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            pdalboost::iostreams::tee(
+                closable_device<seekable>(seq.new_operation(1)),
+                closable_device<seekable>(seq.new_operation(2))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Tee a sink
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(pdalboost::iostreams::tee(closable_device<output>(seq.new_operation(1))));
+        ch.push(closable_device<output>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Tee a bidirectional device
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            pdalboost::iostreams::tee(
+                closable_device<bidirectional>(
+                    seq.new_operation(1),
+                    seq.new_operation(2)
+                )
+            )
+        );
+        ch.push(closable_device<output>(seq.new_operation(3)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Tee a seekable device
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(pdalboost::iostreams::tee(closable_device<seekable>(seq.new_operation(1))));
+        ch.push(closable_device<seekable>(seq.new_operation(2)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+}
+
+void test_std_io()
+{
+    {
+        temp_file          dest1;
+        temp_file          dest2;
+        filtering_ostream  out;
+        std::ofstream      stream1(dest1.name().c_str(), out_mode);
+        out.push(tee(stream1));
+        out.push(file_sink(dest2.name(), out_mode));
+        write_data_in_chunks(out);
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), dest2.name()),
+            "failed writing to a tee_device in chunks"
+        );
+    }
+    {
+        temp_file          dest1;
+        temp_file          dest2;
+        filtering_ostream  out;
+        std::ofstream      stream1(dest1.name().c_str(), out_mode);
+        out.push( tee ( stream1,
+                        file_sink(dest2.name(), out_mode) ) );
+        write_data_in_chunks(out);
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), dest2.name()),
+            "failed writing to a tee_device in chunks"
+        );
+    }
+    {
+        temp_file          dest1;
+        temp_file          dest2;
+        filtering_ostream  out;
+        std::ofstream      stream2(dest2.name().c_str(), out_mode);
+        out.push( tee ( file_sink(dest1.name(), out_mode),
+                        stream2 ) );
+        write_data_in_chunks(out);
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), dest2.name()),
+            "failed writing to a tee_device in chunks"
+        );
+    }
+    {
+        temp_file          dest1;
+        temp_file          dest2;
+        filtering_ostream  out;
+        std::ofstream      stream1(dest1.name().c_str(), out_mode);
+        std::ofstream      stream2(dest2.name().c_str(), out_mode);
+        out.push(tee(stream1, stream2));
+        write_data_in_chunks(out);
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), dest2.name()),
+            "failed writing to a tee_device in chunks"
+        );
+    }
+}
+
+void tee_composite_test()
+{
+    // This test is probably redundant, given the above test and the tests in
+    // compose_test.cpp, but it verifies that ticket #1002 is fixed
+
+    // Tee a composite sink with a sink
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            pdalboost::iostreams::tee(
+                pdalboost::iostreams::compose(
+                    closable_filter<output>(seq.new_operation(1)),
+                    closable_device<output>(seq.new_operation(2))
+                ),
+                closable_device<output>(seq.new_operation(3))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Tee a composite bidirectional device with a sink
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            pdalboost::iostreams::tee(
+                pdalboost::iostreams::compose(
+                    closable_filter<bidirectional>(
+                        seq.new_operation(2),
+                        seq.new_operation(3)
+                    ),
+                    closable_device<bidirectional>(
+                        seq.new_operation(1),
+                        seq.new_operation(4)
+                    )
+                ),
+                closable_device<output>(seq.new_operation(5))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Tee a composite composite seekable device with a sink
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            pdalboost::iostreams::tee(
+                pdalboost::iostreams::compose(
+                    closable_filter<seekable>(seq.new_operation(1)),
+                    closable_device<seekable>(seq.new_operation(2))
+                ),
+                closable_device<output>(seq.new_operation(3))
+            )
+        );
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+
+    // Tee a composite sink
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            pdalboost::iostreams::tee(
+                pdalboost::iostreams::compose(
+                    closable_filter<output>(seq.new_operation(1)),
+                    closable_device<output>(seq.new_operation(2))
+                )
+            )
+        );
+        ch.push(closable_device<output>(seq.new_operation(3)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Tee a composite bidirectional device with a sink
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            pdalboost::iostreams::tee(
+                pdalboost::iostreams::compose(
+                    closable_filter<bidirectional>(
+                        seq.new_operation(2),
+                        seq.new_operation(3)
+                    ),
+                    closable_device<bidirectional>(
+                        seq.new_operation(1),
+                        seq.new_operation(4)
+                    )
+                )
+            )
+        );
+        ch.push(closable_device<output>(seq.new_operation(5)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+
+    // Tee a composite composite seekable device with a sink
+    {
+        operation_sequence  seq;
+        chain<output>       ch;
+        ch.push(
+            pdalboost::iostreams::tee(
+                pdalboost::iostreams::compose(
+                    closable_filter<seekable>(seq.new_operation(1)),
+                    closable_device<seekable>(seq.new_operation(2))
+                )
+            )
+        );
+        ch.push(closable_device<output>(seq.new_operation(3)));
+        BOOST_CHECK_NO_THROW(ch.reset());
+        BOOST_CHECK_OPERATION_SEQUENCE(seq);
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("tee test");
+    test->add(BOOST_TEST_CASE(&read_write_test));
+    test->add(BOOST_TEST_CASE(&close_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/wide_stream_test.cpp b/vendor/pdalboost/libs/iostreams/test/wide_stream_test.cpp
new file mode 100644
index 0000000..2a41006
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/wide_stream_test.cpp
@@ -0,0 +1,145 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <boost/iostreams/detail/config/wide_streams.hpp>
+#ifdef BOOST_IOSTREAMS_NO_WIDE_STREAMS 
+# error wide streams not supported on this platform
+#endif
+
+#include <sstream>
+#include <vector>
+#include <boost/iostreams/device/back_inserter.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "../example/container_device.hpp"  // We use container_device instead
+#include "detail/filters.hpp"               // of make_iterator_range to 
+#include "detail/sequence.hpp"              // reduce dependence on Boost.Range
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+using pdalboost::unit_test::test_suite;   
+
+void read_wide_input_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::example;
+    using namespace pdalboost::iostreams::test;
+
+    test_sequence<wchar_t>                      seq;
+    container_device< test_sequence<wchar_t> >  source(seq);
+
+    {
+        filtering_wistream            first(source, 0);
+        basic_istringstream<wchar_t>  second(
+            basic_string<wchar_t>(seq.begin(), seq.end())
+        );
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from a filter_wistream in chars with no buffer"
+        );
+    }
+
+    {
+        filtering_wistream            first(source, 0);
+        basic_istringstream<wchar_t>  second(
+            basic_string<wchar_t>(seq.begin(), seq.end())
+        );
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from a filter_wistream in chunks with no buffer"
+        );
+    }
+
+    {
+        filtering_wistream            first(source);
+        basic_istringstream<wchar_t>  second(
+            basic_string<wchar_t>(seq.begin(), seq.end())
+        );
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chars(first, second),
+            "failed reading from a filter_wistream in chars with large buffer"
+        );
+    }
+
+    {
+        filtering_wistream            first(source);
+        basic_istringstream<wchar_t>  second(
+            basic_string<wchar_t>(seq.begin(), seq.end())
+        );
+        BOOST_CHECK_MESSAGE(
+            compare_streams_in_chunks(first, second),
+            "failed reading from a filter_wistream in chunks with large buffer"
+        );
+    }
+}
+
+void write_wide_output_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    {
+        vector<wchar_t>         first;
+        test_sequence<wchar_t>  second;
+        filtering_wostream      out(iostreams::back_inserter(first), 0);
+        write_data_in_chars(out);
+        BOOST_CHECK_MESSAGE(
+            first.size() == second.size() && 
+                std::equal(first.begin(), first.end(), second.begin()),
+            "failed writing to filtering_wostream in chars with no buffer"
+        );
+    }
+
+    {
+        vector<wchar_t>         first;
+        test_sequence<wchar_t>  second;
+        filtering_wostream      out(iostreams::back_inserter(first), 0);
+        write_data_in_chunks(out);
+        BOOST_CHECK_MESSAGE(
+            first.size() == second.size() && 
+                std::equal(first.begin(), first.end(), second.begin()),
+            "failed writing to filtering_wostream in chunks with no buffer"
+        );
+    }
+
+    {
+        vector<wchar_t>         first;
+        test_sequence<wchar_t>  second;
+        filtering_wostream      out(iostreams::back_inserter(first), 0);
+        write_data_in_chars(out);
+        BOOST_CHECK_MESSAGE(
+            first.size() == second.size() && 
+                std::equal(first.begin(), first.end(), second.begin()),
+            "failed writing to filtering_wostream in chars with large buffer"
+        );
+    }
+
+    {
+        vector<wchar_t>         first;
+        test_sequence<wchar_t>  second;
+        filtering_wostream      out(iostreams::back_inserter(first));
+        write_data_in_chunks(out);
+        BOOST_CHECK_MESSAGE(
+            first.size() == second.size() && 
+                std::equal(first.begin(), first.end(), second.begin()),
+            "failed writing to filtering_wostream in chunks with large buffer"
+        );
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("wide stream test");
+    test->add(BOOST_TEST_CASE(&read_wide_input_test));
+    test->add(BOOST_TEST_CASE(&write_wide_output_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/windows_pipe_test.cpp b/vendor/pdalboost/libs/iostreams/test/windows_pipe_test.cpp
new file mode 100644
index 0000000..3fb961f
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/windows_pipe_test.cpp
@@ -0,0 +1,63 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// (C) Copyright 2012 Boris Schaeling
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <Windows.h>
+#include <boost/iostreams/device/file_descriptor.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/iostreams/get.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+
+using namespace pdalboost::iostreams;
+using pdalboost::unit_test::test_suite;
+
+void read_from_file_descriptor_source_test()
+{
+    HANDLE handles[2];
+    ::CreatePipe(&handles[0], &handles[1], NULL, 0);
+
+    char buffer[2] = { 'a', 'b' };
+    DWORD written;
+    ::WriteFile(handles[1], buffer, 2, &written, NULL);
+    ::CloseHandle(handles[1]);
+
+    file_descriptor_source is(handles[0], close_handle);
+
+    BOOST_CHECK_EQUAL('a', get(is));
+    BOOST_CHECK_EQUAL('b', get(is));
+    BOOST_CHECK_EQUAL(-1, get(is));
+    BOOST_CHECK_EQUAL(-1, get(is));
+}
+
+void read_from_filtering_istream_test()
+{
+    HANDLE handles[2];
+    ::CreatePipe(&handles[0], &handles[1], NULL, 0);
+
+    char buffer[2] = { 'a', 'b' };
+    DWORD written;
+    ::WriteFile(handles[1], buffer, 2, &written, NULL);
+    ::CloseHandle(handles[1]);
+
+    file_descriptor_source source(handles[0], close_handle);
+    filtering_istream is;
+    is.push(source);
+
+    BOOST_CHECK_EQUAL('a', get(is));
+    BOOST_CHECK_EQUAL('b', get(is));
+    BOOST_CHECK_EQUAL(-1, get(is));
+    BOOST_CHECK_EQUAL(-1, get(is));
+}
+
+test_suite* init_unit_test_suite(int, char* [])
+{
+    test_suite* test = BOOST_TEST_SUITE("Windows pipe test");
+    test->add(BOOST_TEST_CASE(&read_from_file_descriptor_source_test));
+    test->add(BOOST_TEST_CASE(&read_from_filtering_istream_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/iostreams/test/write_bidir_filter_test.hpp b/vendor/pdalboost/libs/iostreams/test/write_bidir_filter_test.hpp
new file mode 100644
index 0000000..a175828
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/write_bidir_filter_test.hpp
@@ -0,0 +1,134 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_WRITE_INOUT_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_WRITE_INOUT_FILTER_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/combine.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/filters.hpp"
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void write_bidirectional_filter_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    lowercase_file lower;
+    BOOST_IOS::openmode mode = out_mode | BOOST_IOS::trunc;
+
+    {
+        temp_file                        lower2;
+        filebuf                          dest;
+        filtering_stream<bidirectional>  out;
+        dest.open(lower2.name().c_str(), mode);
+        out.push(combine(toupper_filter(), tolower_filter()));
+        out.push(dest);
+        write_data_in_chars(out);
+        out.reset();
+        dest.close();
+        BOOST_CHECK_MESSAGE(
+            compare_files(lower2.name(), lower.name()),
+            "failed writing to a filtering_stream<bidirectional> in chars with an "
+            "output filter"
+        );
+    }
+
+    {
+        // OutputFilter.
+        temp_file                        lower2;
+        filebuf                          dest;
+        filtering_stream<bidirectional>  out;
+        out.push(combine(toupper_filter(), tolower_filter()));
+        dest.open(lower2.name().c_str(), mode);
+        out.push(dest);
+        write_data_in_chunks(out);
+        out.reset();
+        dest.close();
+        BOOST_CHECK_MESSAGE(
+            compare_files(lower2.name(), lower.name()),
+            "failed writing to a filtering_stream<bidirectional> in chunks with an "
+            "output filter"
+        );
+    }
+
+    {
+        temp_file                        lower2;
+        filebuf                          dest;
+        filtering_stream<bidirectional>  out;
+        out.push(combine(toupper_filter(), tolower_multichar_filter()), 0);
+        dest.open(lower2.name().c_str(), mode);
+        out.push(dest);
+        write_data_in_chars(out);
+        out.reset();
+        dest.close();
+        BOOST_CHECK_MESSAGE(
+            compare_files(lower2.name(), lower.name()),
+            "failed writing to a filtering_stream<bidirectional> in chars "
+            "with a multichar output filter with no buffer"
+        );
+    }
+
+    {
+        temp_file                        lower2;
+        filebuf                          dest;
+        filtering_stream<bidirectional>  out;
+        out.push(combine(toupper_filter(), tolower_multichar_filter()), 0);
+        dest.open(lower2.name().c_str(), mode);
+        out.push(dest);
+        write_data_in_chunks(out);
+        out.reset();
+        dest.close();
+        BOOST_CHECK_MESSAGE(
+            compare_files(lower2.name(), lower.name()),
+            "failed writing to a filtering_stream<bidirectional> in chunks "
+            "with a multichar output filter with no buffer"
+        );
+    }
+
+    {
+        temp_file                        lower2;
+        filebuf                          dest;
+        filtering_stream<bidirectional>  out;
+        out.push(combine(toupper_filter(), tolower_multichar_filter()));
+        dest.open(lower2.name().c_str(), mode);
+        out.push(dest);
+        write_data_in_chars(out);
+        out.reset();
+        dest.close();
+        BOOST_CHECK_MESSAGE(
+            compare_files(lower2.name(), lower.name()),
+            "failed writing to a filtering_stream<bidirectional> in chars "
+            "with a multichar output filter"
+        );
+    }
+
+    {
+        temp_file                        lower2;
+        filebuf                          dest;
+        filtering_stream<bidirectional>  out;
+        out.push(combine(toupper_filter(), tolower_multichar_filter()));
+        dest.open(lower2.name().c_str(), mode);
+        out.push(dest);
+        write_data_in_chunks(out);
+        out.reset();
+        dest.close();
+        BOOST_CHECK_MESSAGE(
+            compare_files(lower2.name(), lower.name()),
+            "failed writing to a filtering_stream<bidirectional> in chunks "
+            "with a buffered output filter"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_WRITE_BIDIRECTIONAL_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/write_bidir_streambuf_test.hpp b/vendor/pdalboost/libs/iostreams/test/write_bidir_streambuf_test.hpp
new file mode 100644
index 0000000..7df366b
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/write_bidir_streambuf_test.hpp
@@ -0,0 +1,87 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_WRITE_BIDIRECTIONAL_STREAMBUF_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_WRITE_BIDIRECTIONAL_STREAMBUF_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void write_bidirectional_streambuf_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file test;
+
+    {
+        temp_file test2;
+        {
+            filebuf dest;
+            dest.open(test2.name().c_str(), out_mode);
+            filtering_stream<bidirectional> out(dest, 0);
+            write_data_in_chars(out);
+        }
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_stream<bidirectional> based "
+            "on a streambuf in chars with no buffer"
+        );
+    }
+
+    {
+        temp_file test2;
+        {
+            filebuf dest;
+            dest.open(test2.name().c_str(), out_mode);
+            filtering_stream<bidirectional> out(dest, 0);
+            write_data_in_chunks(out);
+        }
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_stream<bidirectional> based "
+            "on a streambuf in chunks with no buffer"
+        );
+    }
+
+    {
+        temp_file test2;
+        {
+            filebuf dest;
+            dest.open(test2.name().c_str(), out_mode);
+            filtering_stream<bidirectional> out(dest);
+            write_data_in_chars(out);
+        }
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_stream<bidirectional> based "
+            "on a streambuf in chars with large buffer"
+        );
+    }
+
+    {
+        temp_file test2;
+        {
+            filebuf dest;
+            dest.open(test2.name().c_str(), out_mode);
+            filtering_stream<bidirectional> out(dest);
+            write_data_in_chunks(out);
+        }
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_stream<bidirectional> based "
+            "on a streambuf in chunks with large buffer"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_WRITE_BIDIRECTIONAL_STREAMBUF_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/write_bidir_test.hpp b/vendor/pdalboost/libs/iostreams/test/write_bidir_test.hpp
new file mode 100644
index 0000000..a565d11
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/write_bidir_test.hpp
@@ -0,0 +1,89 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_WRITE_BIDIRECTIONAL_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_WRITE_BIDIRECTIONAL_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/combine.hpp>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void write_bidirectional_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file test;
+
+    {
+        temp_file                        dest;
+        temp_file                        src; // Dummy;
+        filtering_stream<bidirectional>  out(
+           combine(file_source(src.name()), file_sink(dest.name(), out_mode)), 0
+        );
+        write_data_in_chars(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), test.name()),
+            "failed writing to filtering_stream<bidirectional> in chars "
+            "with no buffer"
+        );
+    }
+
+    {
+        temp_file                        dest;
+        temp_file                        src; // Dummy;
+        filtering_stream<bidirectional>  out(
+           combine(file_source(src.name()), file_sink(dest.name(), out_mode)), 0
+        );
+        write_data_in_chunks(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), test.name()),
+            "failed writing to filtering_stream<bidirectional> in chunks "
+            "with no buffer"
+        );
+    }
+
+    {
+        temp_file                        dest;
+        temp_file                        src; // Dummy;
+        filtering_stream<bidirectional>  out(
+           combine(file_source(src.name()), file_sink(dest.name(), out_mode))
+        );
+        write_data_in_chars(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), test.name()),
+            "failed writing to filtering_stream<bidirectional> in chars "
+            "with large buffer"
+        );
+    }
+
+    {
+        temp_file                        dest;
+        temp_file                        src; // Dummy;
+        filtering_stream<bidirectional>  out(
+           combine(file_source(src.name()), file_sink(dest.name(), out_mode))
+        );
+        write_data_in_chunks(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), test.name()),
+            "failed writing to filtering_stream<bidirectional> in chunks "
+            "with large buffer"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_WRITE_BIDIRECTIONAL_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/write_output_filter_test.hpp b/vendor/pdalboost/libs/iostreams/test/write_output_filter_test.hpp
new file mode 100644
index 0000000..850b528
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/write_output_filter_test.hpp
@@ -0,0 +1,114 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_WRITE_OUTPUT_FILTER_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_WRITE_OUTPUT_FILTER_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/filters.hpp"
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void write_output_filter_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    lowercase_file lower;
+
+    {
+        temp_file          dest;
+        filtering_ostream  out;
+        out.push(tolower_filter());
+        out.push(file_sink(dest.name(), out_mode));
+        write_data_in_chars(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), lower.name()),
+            "failed writing to a filtering_ostream in chars with an "
+            "output filter"
+        );
+    }
+
+    {
+        temp_file          dest;
+        filtering_ostream  out;
+        out.push(tolower_filter());
+        out.push(file_sink(dest.name(), out_mode));
+        write_data_in_chunks(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), lower.name()),
+            "failed writing to a filtering_ostream in chunks with an "
+            "output filter"
+        );
+    }
+
+    {
+        temp_file          dest;
+        filtering_ostream  out;
+        out.push(tolower_multichar_filter(), 0);
+        out.push(file_sink(dest.name(), out_mode));
+        write_data_in_chars(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), lower.name()),
+            "failed writing to a filtering_ostream in chars with a "
+            "multichar output filter with no buffer"
+        );
+    }
+
+    {
+        temp_file          dest;
+        filtering_ostream  out;
+        out.push(tolower_multichar_filter(), 0);
+        out.push(file_sink(dest.name(), out_mode));
+        write_data_in_chunks(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), lower.name()),
+            "failed writing to a filtering_ostream in chunks with a "
+            "multichar output filter with no buffer"
+        );
+    }
+
+    {
+        temp_file          dest;
+        filtering_ostream  out;
+        out.push(tolower_multichar_filter());
+        out.push(file_sink(dest.name(), out_mode));
+        write_data_in_chars(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), lower.name()),
+            "failed writing to a filtering_ostream in chars with a "
+            "multichar output filter"
+        );
+    }
+
+    {
+        temp_file          dest;
+        filtering_ostream  out;
+        out.push(tolower_multichar_filter());
+        out.push(file_sink(dest.name(), out_mode));
+        write_data_in_chunks(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest.name(), lower.name()),
+            "failed writing to a filtering_ostream in chunks with a "
+            "multichar output filter"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_WRITE_OUTPUT_FILTER_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/write_output_iterator_test.hpp b/vendor/pdalboost/libs/iostreams/test/write_output_iterator_test.hpp
new file mode 100644
index 0000000..5a17885
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/write_output_iterator_test.hpp
@@ -0,0 +1,85 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_WRITE_OUTPUT_ITERATOR_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_WRITE_OUTPUT_ITERATOR_HPP_INCLUDED
+
+#include <fstream>
+#include <iterator> // Back inserter.
+#include <vector>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+// Note: adding raw inserter iterators to chains is not supported
+// on VC6.
+
+void write_output_iterator_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file test;
+
+    {
+        vector<char> first;
+        filtering_ostream out;
+        out.push(std::back_inserter(first), 0);
+        write_data_in_chars(out);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed writing to filtering_ostream based on an "
+            "output iterator in chars with no buffer"
+        );
+    }
+
+    {
+        vector<char> first;
+        filtering_ostream out;
+        out.push(std::back_inserter(first), 0);
+        write_data_in_chunks(out);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed writing to filtering_ostream based on an "
+            "output iterator in chunks with no buffer"
+        );
+    }
+
+    {
+        vector<char> first;
+        filtering_ostream out;
+        out.push(std::back_inserter(first));
+        write_data_in_chars(out);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed writing to filtering_ostream based on an "
+            "output iterator in chars with large buffer"
+        );
+    }
+
+    {
+        vector<char> first;
+        filtering_ostream out;
+        out.push(std::back_inserter(first));
+        write_data_in_chunks(out);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed writing to filtering_ostream based on an "
+            "output iterator in chunks with large buffer"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_WRITE_OUTPUT_ITERATOR_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/write_output_ostream_test.hpp b/vendor/pdalboost/libs/iostreams/test/write_output_ostream_test.hpp
new file mode 100644
index 0000000..ec07cec
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/write_output_ostream_test.hpp
@@ -0,0 +1,84 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_WRITE_OUTPUT_OSTREAM_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_WRITE_OUTPUT_OSTREAM_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void write_output_ostream_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file test;
+
+    {
+        temp_file test2;
+        {
+            ofstream dest(test2.name().c_str(), out_mode);
+            filtering_ostream out(dest, 0);
+            write_data_in_chars(out);
+        }
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_ostream based on an ostream "
+            "in chars with no buffer"
+        );
+    }
+
+    {
+        temp_file test2;
+        {
+            ofstream dest(test2.name().c_str(), out_mode);
+            filtering_ostream out(dest, 0);
+            write_data_in_chunks(out);
+        }
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_ostream based on an ostream "
+            "in chunks with no buffer"
+        );
+    }
+
+    {
+        test_file test2;
+        {
+            ofstream dest(test2.name().c_str(), out_mode);
+            filtering_ostream out(dest);
+            write_data_in_chars(out);
+        }
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_ostream based on an ostream "
+            "in chars with large buffer"
+        );
+    }
+
+    {
+        temp_file test2;
+        {
+            ofstream dest(test2.name().c_str(), out_mode);
+            filtering_ostream out(dest);
+            write_data_in_chunks(out);
+        }
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_ostream based on an ostream "
+            "in chunks with large buffer"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_WRITE_OUTPUT_OSTREAM_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/write_output_seq_test.hpp b/vendor/pdalboost/libs/iostreams/test/write_output_seq_test.hpp
new file mode 100644
index 0000000..ffc3d2c
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/write_output_seq_test.hpp
@@ -0,0 +1,78 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_WRITE_OUTPUT_SEQUENCE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_WRITE_OUTPUT_SEQUENCE_HPP_INCLUDED
+
+#include <fstream>
+#include <vector>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void write_output_sequence_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file test;
+
+    {
+        vector<char>       first(data_reps * data_length(), '?');
+        filtering_ostream  out(make_iterator_range(first), 0);
+        write_data_in_chars(out);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed writing to filtering_ostream based on a sequence "
+            "in chars with no buffer"
+        );
+    }
+
+    {
+        vector<char>       first(data_reps * data_length(), '?');
+        filtering_ostream  out(make_iterator_range(first), 0);
+        write_data_in_chunks(out);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed writing to filtering_ostream based on a sequence "
+            "in chunks with no buffer"
+        );
+    }
+
+    {
+        vector<char>       first(data_reps * data_length(), '?');
+        filtering_ostream  out(make_iterator_range(first));
+        write_data_in_chars(out);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed writing to filtering_ostream based on a sequence "
+            "in chars with large buffer"
+        );
+    }
+
+    {
+        vector<char>       first(data_reps * data_length(), '?');
+        filtering_ostream  out(make_iterator_range(first));
+        write_data_in_chunks(out);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed writing to filtering_ostream based on a sequence "
+            "in chunks with large buffer"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_WRITE_OUTPUT_SEQUENCE_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/write_output_test.hpp b/vendor/pdalboost/libs/iostreams/test/write_output_test.hpp
new file mode 100644
index 0000000..b1ecc9f
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/write_output_test.hpp
@@ -0,0 +1,73 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_WRITE_OUTPUT_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_WRITE_OUTPUT_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void write_output_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file test;
+
+    {
+        temp_file          test2;
+        filtering_ostream  out(file_sink(test2.name(), out_mode), 0);
+        write_data_in_chars(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_ostream in chars with no buffer"
+        );
+    }
+
+    {
+        temp_file          test2;
+        filtering_ostream  out(file_sink(test2.name(), out_mode), 0);
+        write_data_in_chunks(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_ostream in chunks with no buffer"
+        );
+    }
+
+    {
+        temp_file          test2;
+        filtering_ostream  out(file_sink(test2.name(), out_mode));
+        write_data_in_chars(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_ostream in chars with buffer"
+        );
+    }
+
+    {
+        temp_file          test2;
+        filtering_ostream  out(file_sink(test2.name(), out_mode));
+        write_data_in_chunks(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_ostream in chunks with buffer"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_WRITE_OUTPUT_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/write_seekable_seq_test.hpp b/vendor/pdalboost/libs/iostreams/test/write_seekable_seq_test.hpp
new file mode 100644
index 0000000..e62420d
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/write_seekable_seq_test.hpp
@@ -0,0 +1,79 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+
+#ifndef BOOST_IOSTREAMS_TEST_WRITE_SEEKABLE_SEQUENCE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_WRITE_SEEKABLE_SEQUENCE_HPP_INCLUDED
+
+#include <fstream>
+#include <vector>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/range/iterator_range.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/sequence.hpp"
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void write_seekable_sequence_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file test;
+
+    {
+        vector<char> first(data_reps * data_length(), '?');
+        filtering_stream<seekable> out(make_iterator_range(first), 0);
+        write_data_in_chars(out);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed writing to filtering_stream<seekable> based on a "
+            "sequence in chars with no buffer"
+        );
+    }
+
+    {
+        vector<char> first(data_reps * data_length(), '?');
+        filtering_stream<seekable> out(make_iterator_range(first), 0);
+        write_data_in_chunks(out);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed writing to filtering_stream<seekable> based on a "
+            "sequence in chunks with no buffer"
+        );
+    }
+
+    {
+        vector<char> first(data_reps * data_length(), '?');
+        filtering_stream<seekable> out(make_iterator_range(first));
+        write_data_in_chars(out);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed writing to filtering_stream<seekable> based on a "
+            "sequence in chars with large buffer"
+        );
+    }
+
+    {
+        vector<char> first(data_reps * data_length(), '?');
+        filtering_stream<seekable> out(make_iterator_range(first));
+        write_data_in_chunks(out);
+        ifstream second(test.name().c_str());
+        BOOST_CHECK_MESSAGE(
+            compare_container_and_stream(first, second),
+            "failed writing to filtering_stream<seekable> based on a "
+            "sequence in chunks with large buffer"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_WRITE_SEEKABLE_SEQUENCE_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/write_seekable_test.hpp b/vendor/pdalboost/libs/iostreams/test/write_seekable_test.hpp
new file mode 100644
index 0000000..48a6859
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/write_seekable_test.hpp
@@ -0,0 +1,77 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#ifndef BOOST_IOSTREAMS_TEST_WRITE_SEEKABLE_HPP_INCLUDED
+#define BOOST_IOSTREAMS_TEST_WRITE_SEEKABLE_HPP_INCLUDED
+
+#include <fstream>
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include "detail/temp_file.hpp"
+#include "detail/verification.hpp"
+
+void write_seekable_test()
+{
+    using namespace std;
+    using namespace pdalboost;
+    using namespace pdalboost::iostreams;
+    using namespace pdalboost::iostreams::test;
+
+    test_file test;
+    BOOST_IOS::openmode mode = out_mode | BOOST_IOS::trunc;
+
+    {
+        temp_file                   test2;
+        filtering_stream<seekable>  out(file(test2.name(), mode), 0);
+        write_data_in_chars(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_stream<seekable> in chars with"
+            "no buffer"
+        );
+    }
+
+    {
+        temp_file                   test2;
+        filtering_stream<seekable>  out(file(test2.name(), mode), 0);
+        write_data_in_chunks(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_stream<seekable> in chunks with"
+            "no buffer"
+        );
+    }
+
+    {
+        temp_file                   test2;
+        filtering_stream<seekable>  out(file(test2.name(), mode));
+        write_data_in_chars(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_stream<seekable> in chars with"
+            "large buffer"
+        );
+    }
+
+    {
+        temp_file                   test2;
+        filtering_stream<seekable>  out(file(test2.name(), mode));
+        write_data_in_chunks(out);
+        out.reset();
+        BOOST_CHECK_MESSAGE(
+            compare_files(test2.name(), test.name()),
+            "failed writing to filtering_stream<seekable> in chunks with"
+            "large buffer"
+        );
+    }
+}
+
+#endif // #ifndef BOOST_IOSTREAMS_TEST_WRITE_SEEKABLE_HPP_INCLUDED
diff --git a/vendor/pdalboost/libs/iostreams/test/zlib_test.cpp b/vendor/pdalboost/libs/iostreams/test/zlib_test.cpp
new file mode 100644
index 0000000..4e923be
--- /dev/null
+++ b/vendor/pdalboost/libs/iostreams/test/zlib_test.cpp
@@ -0,0 +1,60 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+#include <string>
+#include <boost/iostreams/filter/test.hpp>
+#include <boost/iostreams/filter/zlib.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include "detail/sequence.hpp"
+#include "detail/verification.hpp"
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::iostreams;
+using namespace pdalboost::iostreams::test;
+using pdalboost::unit_test::test_suite;     
+
+struct zlib_alloc : std::allocator<char> { };
+
+void zlib_test()
+{
+    text_sequence data;
+    BOOST_CHECK(
+        test_filter_pair( zlib_compressor(), 
+                          zlib_decompressor(), 
+                          std::string(data.begin(), data.end()) )
+    );
+    BOOST_CHECK(
+        test_filter_pair( basic_zlib_compressor<zlib_alloc>(), 
+                          basic_zlib_decompressor<zlib_alloc>(), 
+                          std::string(data.begin(), data.end()) )
+    );
+    BOOST_CHECK(
+        test_filter_pair( zlib_compressor(), 
+                          zlib_decompressor(), 
+                          std::string() )
+    );
+    {
+        filtering_istream strm;
+        strm.push( zlib_compressor() );
+        strm.push( null_source() );
+    }
+    {
+        filtering_istream strm;
+        strm.push( zlib_decompressor() );
+        strm.push( null_source() );
+    }
+}
+
+test_suite* init_unit_test_suite(int, char* []) 
+{
+    test_suite* test = BOOST_TEST_SUITE("zlib test");
+    test->add(BOOST_TEST_CASE(&zlib_test));
+    return test;
+}
diff --git a/vendor/pdalboost/libs/program_options/doc/Jamfile.v2 b/vendor/pdalboost/libs/program_options/doc/Jamfile.v2
new file mode 100644
index 0000000..ddfc438
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/Jamfile.v2
@@ -0,0 +1,13 @@
+
+import toolset ;
+toolset.using doxygen ;
+
+boostbook program_option 
+    : program_options.xml 
+    : <implicit-dependency>autodoc 
+      <xsl:param>boost.root=../../../..
+      <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/doc/html
+    ;
+
+doxygen autodoc 
+    : [ glob ../../../boost/program_options/*.hpp ] ;
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/program_options/doc/acknowledgements.xml b/vendor/pdalboost/libs/program_options/doc/acknowledgements.xml
new file mode 100644
index 0000000..e72e33c
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/acknowledgements.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
+     "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd"
+[
+    <!ENTITY % entities SYSTEM "program_options.ent" >
+    %entities;
+]>
+<section>
+  <title>Acknowledgements</title>
+
+  <para>I'm very gratefull to all the people who helped with the development, 
+    by discussion, fixes, and as users. It was pleasant
+    to see all that involvement, which made the library much better than it
+    would be otherwise.
+  </para>
+
+  <para>In the early stages, the library was affected by discussions with 
+    Gennadiy Rozental, William Kempf and Alexander Okhotin.
+  </para>
+
+  <para>Hartmut Kaiser was the first person to try the library on his project
+    and send a number of suggestions and fixes.    
+  </para>
+
+  <para>The formal review lead to numerous comments and enhancements. Pavol
+  Droba helped with the option description semantic. Gennadiy Rozental has
+  criticised many aspects of the library which caused various simplifications.
+  Pavel Vozenilek did carefull review of the implementation. A number of
+  comments were made by:
+    <itemizedlist>
+      <listitem><para>David Abrahams</para></listitem>
+      <listitem><para>Neal D. Becker</para></listitem>
+      <listitem><para>Misha Bergal</para></listitem>
+      <listitem><para>James Curran</para></listitem>
+      <listitem><para>Carl Daniel</para></listitem>
+      <listitem><para>Beman Dawes</para></listitem>
+      <listitem><para>Tanton Gibbs</para></listitem>
+      <listitem><para>Holger Grund</para></listitem>
+      <listitem><para>Hartmut Kaiser</para></listitem>
+      <listitem><para>Petr Kocmid</para></listitem>
+      <listitem><para>Baptiste Lepilleur</para></listitem>
+      <listitem><para>Marcelo E. Magallon</para></listitem>
+      <listitem><para>Chuck Messenger</para></listitem>
+      <listitem><para>John Torjo</para></listitem>
+      <listitem><para>Matthias Troyer</para></listitem>
+    </itemizedlist>
+  </para>
+
+  <para>Doug Gregor and Reece Dunn helped to resolve the issues with Boostbook
+    version of the documentation.
+  </para>
+
+  <para>Even after review, a number of people have helped with further development:
+    <itemizedlist>
+      <listitem><para>Rob Lievaart</para></listitem>
+      <listitem><para>Thorsten Ottosen</para></listitem>
+      <listitem><para>Joseph Wu</para></listitem>
+      <listitem><para>Ferdinand Prantl</para></listitem>
+      <listitem><para>Miro Jurisic</para></listitem>
+      <listitem><para>John Maddock</para></listitem>
+      <listitem><para>Janusz Piwowarski</para></listitem>
+      <listitem><para>Charles Brockman</para></listitem>
+      <listitem><para>Jonathan Wakely</para></listitem>
+
+
+    </itemizedlist>
+  </para>
+
+
+
+
+
+
+
+
+</section>
+
+<!--
+     Local Variables:
+     mode: xml
+     sgml-indent-data: t     
+     sgml-parent-document: ("program_options.xml" "section")
+     sgml-set-face: t
+     End:
+-->
diff --git a/vendor/pdalboost/libs/program_options/doc/alternatives b/vendor/pdalboost/libs/program_options/doc/alternatives
new file mode 100644
index 0000000..9782e05
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/alternatives
@@ -0,0 +1,43 @@
+
+CLI (part of the Jarakta project)
+http://jakarta.apache.org/commons/cli/index.html
+
+This is Java library. 
+The interface seems to be similiar, except for data storage.
+1. Instead of variables_map, the library can store the data
+as Java system properties.
+2. The class Option, which uses to describe the data, is also
+   used to keep the value. In contract, I keep them in separate
+   place. This facilitate using the same options description
+   for different data sources.
+
+TODO: Need to check that Option.setType method does.
+
+Werken.opt
+http://sourceforge.net/projects/werken-opt/
+
+This is a much simpler library then CLI, which
+somewhat less features.
+
+JArgs
+http://jargs.sourceforge.net/
+
+Another Java library. Has a fixed set of value types it can
+handle.
+
+Options (by Brad Appleton)
+http://www.enteract.com/~bradapp/ftp/src/libs/C++/Options.html
+
+This is very lean library. It does not provide argument validation,
+and the only iterface is iteration over arguments. An interesting
+iterface decision is using chars to identify presense of option's parameters.
+This may be moved to my library (|, :, ?, *, +)
+
+Cmdline (by Brad Appleton)
+http://www.enteract.com/~bradapp/ftp/src/libs/C++/CmdLine.html
+
+This library provides options validation and storage. Unfortunately
+1. Only a fixed set of data types is supported.
+2. It's intrusive -- one has to declare variable of "class ArgChar" or
+something, and then extract data from there.
+
diff --git a/vendor/pdalboost/libs/program_options/doc/changes.xml b/vendor/pdalboost/libs/program_options/doc/changes.xml
new file mode 100644
index 0000000..5bd9ca2
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/changes.xml
@@ -0,0 +1,150 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
+     "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd"
+[
+    <!ENTITY % entities SYSTEM "program_options.ent" >
+    %entities;
+]>
+<section id="program_options.changes">
+  <title>Changes since formal review</title>
+
+  <para>During formal review, a large number of changes was suggested. To make
+  using the new version easier, the implemented changes are described
+  below.</para>
+
+  <para>Let's start with an example. The following is a typical code for the
+  reviewed version:<programlisting>
+      options_description desc;
+      desc.add_options()           
+          ("magic", parameter<int>("value"), "magic value for the program")
+          .default_value("43")
+
+      variables_map vm;
+      options_and_arguments oa1 = parse_command_line(ac, av, desc);
+      store(oa1, vm, desc)
+
+      variables_map vm2;
+      ifstream ifs("main.cfg");
+      options_and_arguments oa2 = parse_config_file(ifs, desc);
+      store(oa1, vm2, desc);
+
+      vm.next(&vm2);
+    </programlisting>The code for the current version would look like:
+    <programlisting>
+      options_description desc;
+      desc.add_options()           
+          ("magic", value<int>()->default_value(43), 
+                   "magic value for the program")
+
+      variables_map vm;
+
+      store(parse_command_line(ac, av, desc), vm);
+
+      ifstream ifs("main.cfg");
+      store(parse_command_line(ifs, desc), vm);
+
+      notify(vm);
+    </programlisting>
+  </para>
+    
+  <para>Let's examine all the changes in detail</para>
+
+  <section>
+    <title>Option description</title>      
+
+    <itemizedlist>
+      <listitem>
+        <para>The <code>parameter</code> function was renamed to          
+        <code>value</code>. Rationale: "paramater" is yet another term with no
+        clear definition, while "value" is already used everywhere in
+        docs.</para>
+      </listitem>
+      <listitem>
+        <para>The default value is specified in different place, and should
+        use the value of desired type, not string. Previous code was:
+          <programlisting>
+            ("magic", parameter<int>("value")).default_value("43")
+          </programlisting>
+          and the new code is
+          <programlisting>
+            ("magic", parameter<int>("value")->default_value(43));
+          </programlisting>          
+          Rationale: the new way is less restrictive. At the same time, the
+          new design allows to implement other behaviour, like validation of
+          the value, which require knowledge of the value type.         
+        </para>
+      </listitem>
+        
+      <listitem>
+        <para>The number of token value can take on command line, which was
+        specified using character suffix appended to value name, is now
+        specified using more explicit member calls. Moreover, it's not longer
+        possible to specify the "value name".
+          For example:
+<programlisting>("numbers", parameter<int>("n+"))</programlisting>
+          has became
+<programlisting>("numbers", value<int>()->multitoken())</programlisting>
+          Rationale: such modifiers tend to make command line usage less
+        clear. There's no need to make evil things too easy to do.
+          The "value name" had only two roles: specifying modifiers, and
+        telling what to output in automated help. The first role has became
+        obsolete, and the second was questionable too. It was very unclear how
+        to decide on the best "value name", and eventually the selection was randon.
+        </para>
+      </listitem>
+    </itemizedlist>
+
+  </section>
+
+  <section>
+    <title>Parsers</title>      
+
+    
+    <itemizedlist>
+      <listitem>
+        <para>The <code>options_and_argument</code> class was removed.</para>
+      </listitem>
+      <listitem>
+        <para>The <code>cmdline</code> and <code>config_file</code> classes
+        were removed from the public interface. Various command line styles
+        are now declared in the <code>command_line_style</code> subnamespace.          
+        </para>
+      </listitem>
+
+      <listitem>
+        <para>New function <code>parse_environment</code> was added.</para>
+      </listitem>
+
+      <listitem>
+        <para>Support for positional options was added</para>
+      </listitem>
+
+    </itemizedlist>
+  </section>
+    
+
+  <section>
+    <title>Storage</title>
+     
+    <itemizedlist>
+      <listitem>
+        <para>The <code>notify</code> function should be called after all
+        sources are stored in a <code>variales_map</code> instance. This is
+        done to property support priority of configuration sources.
+        </para>
+      </listitem>
+    </itemizedlist>    
+  </section>
+
+
+
+</section>
+
+<!--
+     Local Variables:
+     mode: xml
+     sgml-indent-data: t     
+     sgml-parent-document: ("program_options.xml" "section")
+     sgml-set-face: t
+     End:
+-->
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/program_options/doc/design.xml b/vendor/pdalboost/libs/program_options/doc/design.xml
new file mode 100644
index 0000000..0881500
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/design.xml
@@ -0,0 +1,213 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
+     "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd"
+[
+    <!ENTITY % entities SYSTEM "program_options.ent" >
+    %entities;
+]>
+<section id="program_options.design">
+  <title>Design Discussion</title>
+
+  <para>This section focuses on some of the design questions.
+  </para>
+
+  <section id="program_options.design.unicode">
+
+    <title>Unicode Support</title>
+
+    <para>Unicode support was one of the features specifically requested
+      during the formal review. Throughout this document "Unicode support" is
+      a synonym for "wchar_t" support, assuming that "wchar_t" always uses
+      Unicode encoding.  Also, when talking about "ascii" (in lowercase) we'll
+      not mean strict 7-bit ASCII encoding, but rather "char" strings in local
+      8-bit encoding.
+    </para>
+
+    <para>
+      Generally, "Unicode support" can mean
+      many things, but for the program_options library it means that:
+
+      <itemizedlist>
+        <listitem>
+          <para>Each parser should accept either <code>char*</code>
+          or <code>wchar_t*</code>, correctly split the input into option
+          names and option values and return the data.
+          </para>
+        </listitem>
+        <listitem>
+          <para>For each option, it should be possible to specify whether the conversion
+            from string to value uses ascii or Unicode.
+          </para>
+        </listitem>
+        <listitem>
+          <para>The library guarantees that:
+            <itemizedlist>
+              <listitem>
+                <para>ascii input is passed to an ascii value without change
+                </para>
+              </listitem>
+              <listitem>
+                <para>Unicode input is passed to a Unicode value without change</para>
+              </listitem>
+              <listitem>
+                <para>ascii input passed to a Unicode value, and Unicode input
+                  passed to an ascii value will be converted using a codecvt
+                  facet (which may be specified by the user).
+                </para>
+              </listitem>
+            </itemizedlist>
+          </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+
+    <para>The important point is that it's possible to have some "ascii
+      options" together with "Unicode options". There are two reasons for
+      this. First, for a given type you might not have the code to extract the
+      value from Unicode string and it's not good to require that such code be written.
+      Second, imagine a reusable library which has some options and exposes
+      options description in its interface. If <emphasis>all</emphasis>
+      options are either ascii or Unicode, and the library does not use any
+      Unicode strings, then the author is likely to use ascii options, making
+      the library unusable inside Unicode
+      applications. Essentially, it would be necessary to provide two versions
+      of the library -- ascii and Unicode.
+    </para>
+
+    <para>Another important point is that ascii strings are passed though
+      without modification. In other words, it's not possible to just convert
+      ascii to Unicode and process the Unicode further. The problem is that the
+      default conversion mechanism -- the <code>codecvt</code> facet -- might
+      not work with 8-bit input without additional setup.
+    </para>
+
+    <para>The Unicode support outlined above is not complete. For example, we
+      don't support Unicode option names. Unicode support is hard and
+      requires a Boost-wide solution. Even comparing two arbitrary Unicode
+      strings is non-trivial. Finally, using Unicode in option names is
+      related to internationalization, which has it's own
+      complexities. E.g. if option names depend on current locale, then all
+      program parts and other parts which use the name must be
+      internationalized too.
+    </para>
+
+    <para>The primary question in implementing the Unicode support is whether
+      to use templates and <code>std::basic_string</code> or to use some
+      internal encoding and convert between internal and external encodings on
+      the interface boundaries.
+    </para>
+
+    <para>The choice, mostly, is between code size and execution
+      speed. A templated solution would either link library code into every
+      application that uses the library (thereby making shared library
+      impossible), or provide explicit instantiations in the shared library
+      (increasing its size). The solution based on internal encoding would
+      necessarily make conversions in a number of places and will be somewhat slower.
+      Since speed is generally not an issue for this library, the second
+      solution looks more attractive, but we'll take a closer look at
+      individual components.
+    </para>
+
+    <para>For the parsers component, we have three choices:
+      <itemizedlist>
+        <listitem>
+          <para>Use a fully templated implementation: given a string of a
+            certain type, a parser will return a &parsed_options; instance
+            with strings of the same type (i.e. the &parsed_options; class
+            will be templated).</para>
+        </listitem>
+        <listitem>
+          <para>Use internal encoding: same as above, but strings will be converted to and
+            from the internal encoding.</para>
+        </listitem>
+        <listitem>
+          <para>Use and partly expose the internal encoding: same as above,
+            but the strings in the &parsed_options; instance will be in the
+            internal encoding. This might avoid a conversion if
+            &parsed_options; instance is passed directly to other components,
+            but can be also dangerous or confusing for a user.
+          </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+
+    <para>The second solution appears to be the best -- it does not increase
+    the code size much and is cleaner than the third. To avoid extra
+    conversions, the Unicode version of &parsed_options; can also store
+    strings in internal encoding.
+    </para>
+
+    <para>For the options descriptions component, we don't have much
+      choice. Since it's not desirable to have either all options use ascii or all
+      of them use Unicode, but rather have some ascii and some Unicode options, the
+      interface of the &value_semantic; must work with both. The only way is
+      to pass an additional flag telling if strings use ascii or internal encoding.
+      The instance of &value_semantic; can then convert into some
+      other encoding if needed.
+    </para>
+
+    <para>For the storage component, the only affected function is &store;.
+      For Unicode input, the &store; function should convert the value to the
+      internal encoding.  It should also inform the &value_semantic; class
+      about the used encoding.
+    </para>
+
+    <para>Finally, what internal encoding should we use? The
+    alternatives are:
+    <code>std::wstring</code> (using UCS-4 encoding) and
+    <code>std::string</code> (using UTF-8 encoding). The difference between
+    alternatives is:
+      <itemizedlist>
+        <listitem>
+          <para>Speed: UTF-8 is a bit slower</para>
+        </listitem>
+        <listitem>
+          <para>Space: UTF-8 takes less space when input is ascii</para>
+        </listitem>
+        <listitem>
+          <para>Code size: UTF-8 requires additional conversion code. However,
+            it allows one to use existing parsers without converting them to
+            <code>std::wstring</code> and such conversion is likely to create a
+            number of new instantiations.
+          </para>
+        </listitem>
+
+      </itemizedlist>
+      There's no clear leader, but the last point seems important, so UTF-8
+      will be used.
+    </para>
+
+    <para>Choosing the UTF-8 encoding allows the use of existing parsers,
+      because 7-bit ascii characters retain their values in UTF-8,
+      so searching for 7-bit strings is simple. However, there are
+      two subtle issues:
+      <itemizedlist>
+        <listitem>
+          <para>We need to assume the character literals use ascii encoding
+          and that inputs use Unicode encoding.</para>
+        </listitem>
+        <listitem>
+          <para>A Unicode character (say '=') can be followed by 'composing
+          character' and the combination is not the same as just '=', so a
+          simple search for '=' might find the wrong character.
+          </para>
+        </listitem>
+      </itemizedlist>
+      Neither of these issues appear to be critical in practice, since ascii is
+      almost universal encoding and since composing characters following '=' (and
+      other characters with special meaning to the library) are not likely to appear.
+    </para>
+
+  </section>
+
+
+</section>
+
+<!--
+     Local Variables:
+     mode: xml
+     sgml-indent-data: t
+     sgml-parent-document: ("program_options.xml" "section")
+     sgml-set-face: t
+     End:
+-->
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/program_options/doc/glossary.dox b/vendor/pdalboost/libs/program_options/doc/glossary.dox
new file mode 100644
index 0000000..8a410ef
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/glossary.dox
@@ -0,0 +1,19 @@
+/** @page glossary Glosary
+
+    <dl>
+    <dt>Token</dt><dd>A single whitespace-separated part of
+    command line. In other words, an element of <tt>argv</tt> array.</dd>
+
+    <dt>Option</dt><dd>No definition yet. Options typically correspond to
+    (name, value) pair. Then can spawn several tokens.</dd>
+
+    <dt>Argument</dt><dd>No definition yet.</dd>
+
+    <dt>Command line element</dt><dd>A complete part of command line. May
+    be either option or argument.</dd>
+
+    <dt>Parameter</dt><dd>The syntantic element which specify value of the
+    option</dd>
+
+    </dl>
+*/
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/program_options/doc/glossary.xml b/vendor/pdalboost/libs/program_options/doc/glossary.xml
new file mode 100644
index 0000000..c9ed728
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/glossary.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" standalone="yes"?>
+<glossary>
+    <title>Glossary</title>
+
+    <glossentry>
+        <glossterm>Token</glossterm>
+        <glossdef>
+            <para>A single whitespace-separated part of
+                command line. In other words, an element of <code>argv</code> array.
+            </para>
+        </glossdef>
+    </glossentry>
+    
+    <glossentry>
+        <glossterm>Option</glossterm>
+        <glossdef>
+            <para>No definition yet. Options typically correspond to
+                (name, value) pair. Then can spawn several tokens.
+            </para>
+        </glossdef>
+    </glossentry>
+
+    <glossentry>
+        <glossterm>Argument</glossterm>
+        <glossdef>
+            <para>No definition yet.
+            </para>
+        </glossdef>
+    </glossentry>
+
+    <glossentry>
+        <glossterm>Command line element</glossterm>
+        <glossdef>
+            <para>A complete part of command line. May
+                be either option or argument.
+            </para>
+        </glossdef>
+    </glossentry>
+
+    <glossentry>
+        <glossterm>Parameter</glossterm>
+        <glossdef>
+            <para>The syntactic element which specify value of an
+                option.
+            </para>
+        </glossdef>
+    </glossentry>
+</glossary>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/program_options/doc/howto.xml b/vendor/pdalboost/libs/program_options/doc/howto.xml
new file mode 100644
index 0000000..45ff25b
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/howto.xml
@@ -0,0 +1,447 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
+     "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd"
+[
+    <!ENTITY % entities SYSTEM "program_options.ent" >
+    %entities;
+]>
+<section id="program_options.howto">
+
+  <title>How To</title>
+
+  <para>This section describes how the library can be used in specific
+  situations.</para>
+
+<!--
+
+validators
+positional options
+options groups/hidden options
+
+-->
+  <section>
+    <title>Non-conventional Syntax</title>
+
+    <para>Sometimes, standard command line syntaxes are not enough. For
+    example, the gcc compiler has "-frtti" and -fno-rtti" options, and this
+    syntax is not directly supported.
+    </para>
+
+    <indexterm><primary>additional parser</primary></indexterm>
+    <para>For such cases, the library allows the user to provide an
+    <firstterm>additional parser</firstterm> -- a function which will be called on each
+    command line element, before any processing by the library. If the
+    additional parser recognises the syntax, it returns the option name and
+    value, which are used directly. The above example can be handled by the
+    following code:
+    </para>
+
+    <para>
+      <programlisting>
+pair<string, string> reg_foo(const string& s)
+{
+    if (s.find("-f") == 0) {
+        if (s.substr(2, 3) == "no-")
+            return make_pair(s.substr(5), string("false"));
+        else
+            return make_pair(s.substr(2), string("true"));
+    } else {
+        return make_pair(string(), string());
+    }
+}
+</programlisting>
+      Here's the definition of the additional parser. When parsing the command
+      line, we pass the additional parser:
+<programlisting>
+store(command_line_parser(ac, av).options(desc).extra_parser(reg_foo)
+        .run(), vm);
+</programlisting>
+      The complete example can be found in the "example/custom_syntax.cpp"
+      file.
+    </para>
+  </section>
+
+  <section>
+    <title>Response Files</title>
+
+    <indexterm><primary>response files</primary></indexterm>
+
+    <para>Some operating system have very low limits of the command line
+      length. The common way to work around those limitations is using
+      <firstterm>response files</firstterm>.  A response file is just a
+      configuration file which uses the same syntax as the command line. If
+      the command line specifies a name of response file to use, it's loaded
+      and parsed in addition to the command line.  The library does not
+      provide direct support for response files, so you'll need to write some
+      extra code.
+    </para>
+
+    <para>
+      First, you need to define an option for the response file:
+<programlisting>
+("response-file", value<string>(),
+     "can be specified with '@name', too")
+</programlisting>
+    </para>
+
+    <para>Second, you'll need an additional parser to support the standard syntax
+    for specifying response files: "@file":
+<programlisting><![CDATA[
+pair<string, string> at_option_parser(string const&s)
+{
+    if ('@' == s[0])
+        return std::make_pair(string("response-file"), s.substr(1));
+    else
+        return pair<string, string>();
+}
+]]>
+</programlisting>
+    </para>
+
+    <para>Finally, when the "response-file" option is found, you'll have to
+    load that file and pass it to the command line parser. This part is the
+    hardest. We'll use the Boost.Tokenizer library, which works but has some
+    limitations. You might also consider Boost.StringAlgo. The code is:
+<programlisting><![CDATA[
+if (vm.count("response-file")) {
+     // Load the file and tokenize it
+     ifstream ifs(vm["response-file"].as<string>().c_str());
+     if (!ifs) {
+         cout << "Could not open the response file\n";
+         return 1;
+     }
+     // Read the whole file into a string
+     stringstream ss;
+     ss << ifs.rdbuf();
+     // Split the file content
+     char_separator<char> sep(" \n\r");
+     std::string ResponsefileContents( ss.str() );
+     tokenizer<char_separator<char> > tok(ResponsefileContents, sep);
+     vector<string> args;
+     copy(tok.begin(), tok.end(), back_inserter(args));
+     // Parse the file and store the options
+     store(command_line_parser(args).options(desc).run(), vm);
+}
+]]>
+</programlisting>
+      The complete example can be found in the "example/response_file.cpp"
+      file.
+    </para>
+
+  </section>
+
+  <section>
+    <title>Winmain Command Line</title>
+
+    <para>On the Windows operating system, GUI applications receive the
+    command line as a single string, not split into elements. For that reason,
+    the command line parser cannot be used directly. At least on some
+    compilers, it is possible to obtain
+    the split command line, but it's not clear if all compilers support the
+    same mechanism on all versions of the operating system. The
+    <code>split_winmain</code> function is a portable mechanism provided
+    by the library.</para>
+
+    <para>Here's an example of use:
+<programlisting>
+vector<string> args = split_winmain(lpCmdLine);
+store(command_line_parser(args).options(desc).run(), vm);
+</programlisting>
+      The <code>split_winmain</code> function is overloaded for <code>wchar_t</code> strings, so can
+      also be used in Unicode applications.
+    </para>
+
+  </section>
+
+  <section>
+    <title>Option Groups and Hidden Options</title>
+
+    <para>Having a single instance of the &options_description; class with all
+    the program's options can be problematic:
+      <itemizedlist>
+        <listitem>
+          <para>Some options make sense only for specific source, for example,
+          configuration files.</para>
+        </listitem>
+        <listitem>
+          <para>The user would prefer some structure in the generated help message.</para>
+        </listitem>
+        <listitem>
+          <para>Some options shouldn't appear in the generated help message at all.</para>
+        </listitem>
+      </itemizedlist>
+    </para>
+
+    <para>To solve the above issues, the library allows a programmer to create several
+      instances of the &options_description; class, which can be merged in
+      different combinations. The following example will define three groups of
+      options: command line specific, and two options group for specific program
+      modules, only one of which is shown in the generated help message.
+    </para>
+
+    <para>Each group is defined using standard syntax. However, you should
+      use reasonable names for each &options_description; instance:
+<programlisting><![CDATA[
+options_description general("General options");
+general.add_options()
+    ("help", "produce a help message")
+    ("help-module", value<string>(),
+        "produce a help for a given module")
+    ("version", "output the version number")
+    ;
+
+options_description gui("GUI options");
+gui.add_options()
+    ("display", value<string>(), "display to use")
+    ;
+
+options_description backend("Backend options");
+backend.add_options()
+    ("num-threads", value<int>(), "the initial number of threads")
+    ;
+]]></programlisting>
+    </para>
+
+    <para>After declaring options groups, we merge them in two
+      combinations. The first will include all options and be used for parsing. The
+      second will be used for the "--help" option.
+<programlisting>
+// Declare an options description instance which will include
+// all the options
+options_description all("Allowed options");
+all.add(general).add(gui).add(backend);
+
+// Declare an options description instance which will be shown
+// to the user
+options_description visible("Allowed options");
+visible.add(general).add(gui);
+</programlisting>
+    </para>
+
+    <para>What is left is to parse and handle the options:
+<programlisting><![CDATA[
+variables_map vm;
+store(parse_command_line(ac, av, all), vm);
+
+if (vm.count("help"))
+{
+    cout << visible;
+    return 0;
+}
+if (vm.count("help-module")) {
+    const string& s = vm["help-module"].as<string>();
+    if (s == "gui") {
+        cout << gui;
+    } else if (s == "backend") {
+        cout << backend;
+    } else {
+        cout << "Unknown module '"
+             << s << "' in the --help-module option\n";
+        return 1;
+    }
+    return 0;
+}
+if (vm.count("num-threads")) {
+    cout << "The 'num-threads' options was set to "
+         << vm["num-threads"].as<int>() << "\n";
+}
+]]></programlisting>
+      When parsing the command line, all options are allowed. The "--help"
+      message, however, does not include the "Backend options" group -- the
+      options in that group are hidden. The user can explicitly force the
+      display of that options group by passing "--help-module backend"
+      option. The complete example can be found in the
+      "example/option_groups.cpp" file.
+    </para>
+
+  </section>
+
+  <section>
+    <title>Custom Validators</title>
+
+    <para>By default, the conversion of option's value from string into C++
+      type is done using iostreams, which sometimes is not convenient. The
+      library allows the user to customize the conversion for specific
+      classes. In order to do so, the user should provide suitable overload of
+      the <code>validate</code> function.
+    </para>
+
+    <para>
+      Let's first define a simple class:
+<programlisting><![CDATA[
+struct magic_number {
+public:
+    magic_number(int n) : n(n) {}
+    int n;
+};
+]]></programlisting> and then overload the <code>validate</code> function:
+<programlisting><![CDATA[
+void validate(boost::any& v,
+              const std::vector<std::string>& values,
+              magic_number* target_type, int)
+{
+    static regex r("\\d\\d\\d-(\\d\\d\\d)");
+
+    using namespace boost::program_options;
+
+    // Make sure no previous assignment to 'a' was made.
+    validators::check_first_occurrence(v);
+    // Extract the first string from 'values'. If there is more than
+    // one string, it's an error, and exception will be thrown.
+    const string& s = validators::get_single_string(values);
+
+    // Do regex match and convert the interesting part to
+    // int.
+    smatch match;
+    if (regex_match(s, match, r)) {
+        v = any(magic_number(lexical_cast<int>(match[1])));
+    } else {
+        throw validation_error(validation_error::invalid_option_value);
+    }
+}
+]]>
+</programlisting>The function takes four parameters. The first is the storage
+      for the value, and in this case is either empty or contains an instance of
+      the <code>magic_number</code> class. The second is the list of strings
+      found in the next occurrence of the option. The remaining two parameters
+      are needed to workaround the lack of partial template specialization and
+      partial function template ordering on some compilers.
+    </para>
+
+    <para>The function first checks that we don't try to assign to the same
+      option twice. Then it checks that only a single string was passed
+      in. Next the string is verified with the help of the Boost.Regex
+      library. If that test is passed, the parsed value is stored into the
+      <code>v</code> variable.
+    </para>
+
+    <para>The complete example can be found in the "example/regex.cpp" file.
+    </para>
+
+
+  </section>
+
+  <section>
+    <title>Unicode Support</title>
+
+    <para>To use the library with Unicode, you'd need to:
+      <itemizedlist>
+        <listitem>
+          <para>Use Unicode-aware parsers for Unicode input</para>
+        </listitem>
+        <listitem>
+          <para>Require Unicode support for options which need it</para>
+        </listitem>
+      </itemizedlist>
+    </para>
+
+    <para>Most of the parsers have Unicode versions. For example, the
+      &parse_command_line; function has an overload which takes
+      <code>wchar_t</code> strings, instead of ordinary <code>char</code>.
+    </para>
+
+    <para>Even if some of the parsers are Unicode-aware, it does not mean you
+    need to change definition of all the options. In fact, for many options,
+    like integer ones, it makes no sense. To make use of Unicode you'll need
+    <emphasis>some</emphasis> Unicode-aware options. They are different from
+    ordinary options in that they accept <code>wstring</code> input, and
+    process it using wide character streams. Creating an Unicode-aware option
+    is easy: just use the the <code>wvalue</code> function instead of the
+    regular <code>value</code>.
+    </para>
+
+    <para>When an ascii parser passes data to an ascii option, or a Unicode
+      parser passes data to a Unicode option, the data are not changed at
+      all. So, the ascii option will see a string in local 8-bit encoding, and
+      the Unicode option will see whatever string was passed as the Unicode
+      input.
+    </para>
+
+    <para>What happens when Unicode data is passed to an ascii option, and
+      vice versa? The library automatically performs the conversion from
+      Unicode to local 8-bit encoding. For example, if command line is in
+      ascii, but you use <code>wstring</code> options, then the ascii input
+      will be converted into Unicode.
+    </para>
+
+    <para>To perform the conversion, the library uses the <code>codecvt<wchar_t,
+    char></code> locale facet from the global locale. If
+    you want to work with strings that use local 8-bit encoding (as opposed to
+    7-bit ascii subset), your application should start with:
+      <programlisting>
+locale::global(locale(""));
+      </programlisting>
+      which would set up the conversion facet according to the user's selected
+      locale.
+    </para>
+
+    <para>It's wise to check the status of the C++ locale support on your
+      implementation, though. The quick test involves three steps:
+      <orderedlist>
+        <listitem>
+          <para>Go the the "test" directory and build the "test_convert" binary.</para>
+        </listitem>
+        <listitem>
+          <para>Set some non-ascii locale in the environment. On Linux, one can
+          run, for example: <screen>
+$ export LC_CTYPE=ru_RU.KOI8-R
+</screen>
+          </para>
+        </listitem>
+        <listitem>
+          <para>Run the "test_convert" binary with any non-ascii string in the
+            selected encoding as its parameter. If you see a list of Unicode codepoints,
+            everything's OK. Otherwise, locale support on your system might be
+            broken.</para>
+        </listitem>
+      </orderedlist>
+    </para>
+
+    </section>
+
+    <section>
+      <title>Allowing Unknown Options</title>
+
+      <para>Usually, the library throws an exception on unknown option names. This
+      behaviour can be changed. For example, only some part of your application uses
+      <libraryname>Program_options</libraryname>, and you wish to pass unrecognized options to another part of
+      the program, or even to another application.</para>
+
+      <para>To allow unregistered options on the command line, you need to use
+      the &basic_command_line_parser; class for parsing (not &parse_command_line;)
+      and call the <methodname alt="boost::program_options::basic_command_line_parser::allow_unregistered">allow_unregistered</methodname>
+      method of that class:
+      <programlisting>
+parsed_options parsed =
+    command_line_parser(argc, argv).options(desc).allow_unregistered().run();
+      </programlisting>
+
+      For each token that looks like an option, but does not have a known name,
+      an instance of &basic_option; will be added to the result.
+      The <code>string_key</code> and <code>value</code> fields of the instance will contain results
+      of syntactic parsing of the token, the <code>unregistered</code> field will be set to <code>true</code>,
+      and the <code>original_tokens</code> field will contain the token as it appeared on the command line.
+      </para>
+
+      <para>If you want to pass the unrecognized options further, the
+      <functionname alt="boost::program_options::collect_unrecognized">collect_unrecognized</functionname> function can be used.
+      The function will collect original tokens for all unrecognized values, and optionally, all found positional options.
+      Say, if your code handles a few options, but does not handle positional options at all, you can use the function like this:
+      <programlisting>
+vector<string> to_pass_further = collect_unrecognized(parsed.options, include_positional);
+      </programlisting>
+
+      </para>
+
+    </section>
+
+</section>
+
+<!--
+     Local Variables:
+     mode: nxml
+     sgml-indent-data: t
+     sgml-parent-document: ("userman.xml" "chapter")
+     sgml-set-face: t
+     End:
+-->
diff --git a/vendor/pdalboost/libs/program_options/doc/index.html b/vendor/pdalboost/libs/program_options/doc/index.html
new file mode 100644
index 0000000..83b096e
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/index.html
@@ -0,0 +1,14 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0; URL=../../../doc/html/program_options.html">
+</head>
+<body>
+Automatic redirection failed, please go to
+<a href="../../../doc/html/program_options.html">../../../doc/html/program_options.html</a> 
+ <hr>
+<p>� Copyright Beman Dawes, 2001</p>
+<p>Distributed under the Boost Software License, Version 1.0. (See accompanying 
+file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy 
+at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</p>
+</body>
+</html>
diff --git a/vendor/pdalboost/libs/program_options/doc/overview.xml b/vendor/pdalboost/libs/program_options/doc/overview.xml
new file mode 100644
index 0000000..f7de296
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/overview.xml
@@ -0,0 +1,652 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
+     "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd"
+[
+    <!ENTITY % entities SYSTEM "program_options.ent" >
+    %entities;
+]>
+<section id="program_options.overview">
+  <title>Library Overview</title>
+
+  <para>In the tutorial section, we saw several examples of library usage.
+    Here we will describe the overall library design including the primary
+    components and their function.
+  </para>
+
+  <para>The library has three main components:
+    <itemizedlist>
+      <listitem>
+        <para>The options description component, which describes the allowed options
+          and what to do with the values of the options.
+        </para>
+      </listitem>
+      <listitem>
+        <para>The parsers component, which uses this information to find option names
+          and values in the input sources and return them.
+        </para>
+      </listitem>
+      <listitem>
+        <para>The storage component, which provides the
+          interface to access the value of an option. It also converts the string
+          representation of values that parsers return into desired C++ types.
+        </para>
+      </listitem>
+    </itemizedlist>
+  </para>
+
+  <para>To be a little more concrete, the <code>options_description</code>
+  class is from the options description component, the
+  <code>parse_command_line</code> function is from the parsers component, and the
+  <code>variables_map</code> class is from the storage component. </para>
+
+  <para>In the tutorial we've learned how those components can be used by the
+    <code>main</code> function to parse the command line and config
+    file. Before going into the details of each component, a few notes about
+    the world outside of <code>main</code>.
+  </para>
+
+  <para>
+    For that outside world, the storage component is the most important. It
+    provides a class which stores all option values and that class can be
+    freely passed around your program to modules which need access to the
+    options. All the other components can be used only in the place where
+    the actual parsing is the done.  However, it might also make sense for the
+    individual program modules to describe their options and pass them to the
+    main module, which will merge all options. Of course, this is only
+    important when the number of options is large and declaring them in one
+    place becomes troublesome.
+  </para>
+
+<!--
+  <para>The design looks very simple and straight-forward, but it is worth
+  noting some important points:
+    <itemizedlist>
+      <listitem>
+        <para>The options description is not tied to specific source. Once
+        options are described, all parsers can use that description.</para>
+      </listitem>
+      <listitem>
+        <para>The parsers are intended to be fairly dumb. They just
+          split the input into (name, value) pairs, using strings to represent
+          names and values. No meaningful processing of values is done.
+        </para>
+      </listitem>
+      <listitem>
+        <para>The storage component is focused on storing options values. It
+        </para>
+      </listitem>
+
+
+    </itemizedlist>
+
+  </para>
+-->
+
+  <section>
+    <title>Options Description Component</title>
+
+    <para>The options description component has three main classes:
+      &option_description;, &value_semantic; and &options_description;. The
+      first two together describe a single option. The &option_description;
+      class contains the option's name, description and a pointer to &value_semantic;,
+      which, in turn, knows the type of the option's value and can parse the value,
+      apply the default value, and so on. The &options_description; class is a
+      container for instances of &option_description;.
+    </para>
+
+    <para>For almost every library, those classes could be created in a
+      conventional way: that is, you'd create new options using constructors and
+      then call the <code>add</code> method of &options_description;. However,
+      that's overly verbose for declaring 20 or 30 options. This concern led
+      to creation of the syntax that you've already seen:
+<programlisting>
+options_description desc;
+desc.add_options()
+    ("help", "produce help")
+    ("optimization", value<int>()->default_value(10), "optimization level")
+    ;
+</programlisting>
+    </para>
+
+    <para>The call to the <code>value</code> function creates an instance of
+      a class derived from the <code>value_semantic</code> class: <code>typed_value</code>.
+      That class contains the code to parse
+      values of a specific type, and contains a number of methods which can be
+      called by the user to specify additional information. (This
+      essentially emulates named parameters of the constructor.) Calls to
+      <code>operator()</code> on the object returned by <code>add_options</code>
+      forward arguments to the constructor of the <code>option_description</code>
+      class and add the new instance.
+    </para>
+
+    <para>
+      Note that in addition to the
+      <code>value</code>, library provides the <code>bool_switch</code>
+      function, and user can write his own function which will return
+      other subclasses of <code>value_semantic</code> with
+      different behaviour. For the remainder of this section, we'll talk only
+      about the <code>value</code> function.
+    </para>
+
+    <para>The information about an option is divided into syntactic and
+      semantic. Syntactic information includes the name of the option and the
+      number of tokens which can be used to specify the value. This
+      information is used by parsers to group tokens into (name, value) pairs,
+      where value is just a vector of strings
+      (<code>std::vector<std::string></code>). The semantic layer
+      is responsible for converting the value of the option into more usable C++
+      types.
+    </para>
+
+    <para>This separation is an important part of library design. The parsers
+      use only the syntactic layer, which takes away some of the freedom to
+      use overly complex structures. For example, it's not easy to parse
+      syntax like: <screen>calc --expression=1 + 2/3</screen> because it's not
+      possible to parse <screen>1 + 2/3</screen> without knowing that it's a C
+      expression. With a little help from the user the task becomes trivial,
+      and the syntax clear: <screen>calc --expression="1 + 2/3"</screen>
+    </para>
+
+    <section>
+      <title>Syntactic Information</title>
+      <para>The syntactic information is provided by the
+        <classname>boost::program_options::options_description</classname> class
+        and some methods of the
+        <classname>boost::program_options::value_semantic</classname> class
+        and includes:
+        <itemizedlist>
+          <listitem>
+            <para>
+              name of the option, used to identify the option inside the
+              program,
+            </para>
+          </listitem>
+          <listitem>
+            <para>
+              description of the option, which can be presented to the user,
+            </para>
+          </listitem>
+          <listitem>
+            <para>
+              the allowed number of source tokens that comprise options's
+              value, which is used during parsing.
+            </para>
+          </listitem>
+        </itemizedlist>
+      </para>
+
+      <para>Consider the following example:
+      <programlisting>
+options_description desc;
+desc.add_options()
+    ("help", "produce help message")
+    ("compression", value<string>(), "compression level")
+    ("verbose", value<string>()->implicit_value("0"), "verbosity level")
+    ("email", value<string>()->multitoken(), "email to send to")
+    ;
+      </programlisting>
+      For the first parameter, we specify only the name and the
+      description. No value can be specified in the parsed source.
+      For the first option, the user must specify a value, using a single
+      token. For the third option, the user may either provide a single token
+      for the value, or no token at all. For the last option, the value can
+      span several tokens. For example, the following command line is OK:
+      <screen>
+          test --help --compression 10 --verbose --email beadle at mars beadle2 at mars
+      </screen>
+      </para>
+
+      <section>
+        <title>Description formatting</title>
+
+        <para>
+          Sometimes the description can get rather long, for example, when
+          several option's values need separate documentation. Below we
+          describe some simple formatting mechanisms you can use.
+        </para>
+
+        <para>The description string has one or more paragraphs, separated by
+        the newline character ('\n'). When an option is output, the library
+        will compute the indentation for options's description. Each of the
+        paragraph is output as a separate line with that intentation. If
+        a paragraph does not fit on one line it is spanned over multiple
+        lines (which will have the same indentation).
+        </para>
+
+        <para>You may specify additional indent for the first specified by
+        inserting spaces at the beginning of a paragraph. For example:
+        <programlisting>
+options.add_options()
+    ("help", "   A long help msg a long help msg a long help msg a long help
+msg a long help msg a long help msg a long help msg a long help msg ")
+    ;
+        </programlisting>
+        will specify a four-space indent for the first line. The output will
+        look like:
+        <screen>
+  --help                    A long help msg a long
+                        help msg a long help msg
+                        a long help msg a long
+                        help msg a long help msg
+                        a long help msg a long
+                        help msg
+
+        </screen>
+        </para>
+
+        <para>For the case where line is wrapped, you can want an additional
+        indent for wrapped text. This can be done by
+        inserting a tabulator character ('\t') at the desired position. For
+        example:
+        <programlisting>
+options.add_options()
+      ("well_formated", "As you can see this is a very well formatted
+option description.\n"
+                        "You can do this for example:\n\n"
+                        "Values:\n"
+                        "  Value1: \tdoes this and that, bla bla bla bla
+bla bla bla bla bla bla bla bla bla bla bla\n"
+                        "  Value2: \tdoes something else, bla bla bla bla
+bla bla bla bla bla bla bla bla bla bla bla\n\n"
+                        "    This paragraph has a first line indent only,
+bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla");
+        </programlisting>
+        will produce:
+        <screen>
+  --well_formated       As you can see this is a
+                        very well formatted
+                        option description.
+                        You can do this for
+                        example:
+
+                        Values:
+                          Value1: does this and
+                                  that, bla bla
+                                  bla bla bla bla
+                                  bla bla bla bla
+                                  bla bla bla bla
+                                  bla
+                          Value2: does something
+                                  else, bla bla
+                                  bla bla bla bla
+                                  bla bla bla bla
+                                  bla bla bla bla
+                                  bla
+
+                            This paragraph has a
+                        first line indent only,
+                        bla bla bla bla bla bla
+                        bla bla bla bla bla bla
+                        bla bla bla
+        </screen>
+        The tab character is removed before output. Only one tabulator per
+        paragraph is allowed, otherwise an exception of type
+        program_options::error is thrown. Finally, the tabulator is ignored if
+        it is not on the first line of the paragraph or is on the last
+        possible position of the first line.
+        </para>
+
+      </section>
+
+    </section>
+
+    <section>
+      <title>Semantic Information</title>
+
+      <para>The semantic information is completely provided by the
+        <classname>boost::program_options::value_semantic</classname> class. For
+        example:
+<programlisting>
+options_description desc;
+desc.add_options()
+    ("compression", value<int>()->default_value(10), "compression level")
+    ("email", value< vector<string> >()
+        ->composing()->notifier(&your_function), "email")
+    ;
+</programlisting>
+        These declarations specify that default value of the first option is 10,
+        that the second option can appear several times and all instances should
+        be merged, and that after parsing is done, the library will  call
+        function <code>&your_function</code>, passing the value of the
+        "email" option as argument.
+      </para>
+    </section>
+
+    <section>
+      <title>Positional Options</title>
+
+      <para>Our definition of option as (name, value) pairs is simple and
+        useful, but in one special case of the command line, there's a
+        problem. A command line can include a <firstterm>positional option</firstterm>,
+        which does not specify any name at all, for example:
+        <screen>
+          archiver --compression=9 /etc/passwd
+        </screen>
+        Here, the "/etc/passwd" element does not have any option name.
+      </para>
+
+      <para>One solution is to ask the user to extract positional options
+        himself and process them as he likes. However, there's a nicer approach
+        -- provide a method to automatically assign the names for positional
+        options, so that the above command line can be interpreted the same way
+        as:
+        <screen>
+          archiver --compression=9 --input-file=/etc/passwd
+        </screen>
+      </para>
+
+      <para>The &positional_options_desc; class allows the command line
+        parser to assign the names. The class specifies how many positional options
+        are allowed, and for each allowed option, specifies the name. For example:
+<programlisting>
+positional_options_description pd; pd.add("input-file", 1);
+</programlisting> specifies that for exactly one, first, positional
+        option the name will be "input-file".
+      </para>
+
+      <para>It's possible to specify that a number, or even all positional options, be
+        given the same name.
+<programlisting>
+positional_options_description pd;
+pd.add("output-file", 2).add("input-file", -1);
+</programlisting>
+        In the above example, the first two positional options will be associated
+        with name "output-file", and any others with the name "input-file".
+      </para>
+
+    <warning>
+      <para>The &positional_options_desc; class only specifies translation from
+      position to name, and the option name should still be registered with
+      an instance of the &options_description; class.</para>
+    </warning>
+
+
+    </section>
+
+    <!-- Note that the classes are not modified during parsing -->
+
+  </section>
+
+  <section>
+    <title>Parsers Component</title>
+
+    <para>The parsers component splits input sources into (name, value) pairs.
+      Each parser looks for possible options and consults the options
+      description component to determine if the option is known and how its value
+      is specified. In the simplest case, the name is explicitly specified,
+      which allows the library to decide if such option is known. If it is known, the
+      &value_semantic; instance determines how the value is specified. (If
+      it is not known, an exception is thrown.) Common
+      cases are when the value is explicitly specified by the user, and when
+      the value cannot be specified by the user, but the presence of the
+      option implies some value (for example, <code>true</code>). So, the
+      parser checks that the value is specified when needed and not specified
+      when not needed, and returns new (name, value) pair.
+    </para>
+
+    <para>
+      To invoke a parser you typically call a function, passing the options
+      description and command line or config file or something else.
+      The results of parsing are returned as an instance of the &parsed_options;
+      class. Typically, that object is passed directly to the storage
+      component. However, it also can be used directly, or undergo some additional
+      processing.
+    </para>
+
+    <para>
+      There are three exceptions to the above model -- all related to
+      traditional usage of the command line. While they require some support
+      from the options description component, the additional complexity is
+      tolerable.
+      <itemizedlist>
+        <listitem>
+          <para>The name specified on the command line may be
+            different from the option name -- it's common to provide a "short option
+            name" alias to a longer name. It's also common to allow an abbreviated name
+            to be specified on the command line.
+          </para>
+        </listitem>
+        <listitem>
+          <para>Sometimes it's desirable to specify value as several
+          tokens. For example, an option "--email-recipient" may be followed
+          by several emails, each as a separate command line token. This
+          behaviour is supported, though it can lead to parsing ambiguities
+          and is not enabled by default.
+          </para>
+        </listitem>
+        <listitem>
+          <para>The command line may contain positional options -- elements
+            which don't have any name. The command line parser provides a
+            mechanism to guess names for such options, as we've seen in the
+            tutorial.
+          </para>
+        </listitem>
+      </itemizedlist>
+    </para>
+
+  </section>
+
+
+  <section>
+    <title>Storage Component</title>
+
+    <para>The storage component is responsible for:
+      <itemizedlist>
+        <listitem>
+          <para>Storing the final values of an option into a special class and in
+            regular variables</para>
+        </listitem>
+        <listitem>
+          <para>Handling priorities among different sources.</para>
+        </listitem>
+
+        <listitem>
+          <para>Calling user-specified <code>notify</code> functions with the final
+         values of options.</para>
+        </listitem>
+      </itemizedlist>
+    </para>
+
+    <para>Let's consider an example:
+<programlisting>
+variables_map vm;
+store(parse_command_line(argc, argv, desc), vm);
+store(parse_config_file("example.cfg", desc), vm);
+notify(vm);
+</programlisting>
+      The <code>variables_map</code> class is used to store the option
+      values. The two calls to the <code>store</code> function add values
+      found on the command line and in the config file. Finally the call to
+      the <code>notify</code> function runs the user-specified notify
+      functions and stores the values into regular variables, if needed.
+    </para>
+
+    <para>The priority is handled in a simple way: the <code>store</code>
+      function will not change the value of an option if it's already
+      assigned. In this case, if the command line specifies the value for an
+      option, any value in the config file is ignored.
+    </para>
+
+    <warning>
+      <para>Don't forget to call the <code>notify</code> function after you've
+      stored all parsed values.</para>
+    </warning>
+
+  </section>
+
+  <section>
+    <title>Specific parsers</title>
+
+    <section>
+      <title>Configuration file parser</title>
+
+      <para>The &parse_config_file; function implements parsing
+      of simple INI-like configuration files. Configuration file
+      syntax is line based:
+      </para>
+      <itemizedlist>
+        <listitem><para>A line in the form:</para>
+        <screen>
+<replaceable>name</replaceable>=<replaceable>value</replaceable>
+        </screen>
+        <para>gives a value to an option.</para>
+        </listitem>
+        <listitem><para>A line in the form:</para>
+        <screen>
+[<replaceable>section name</replaceable>]
+        </screen>
+        <para>introduces a new section in the configuration file.</para>
+        </listitem>
+        <listitem><para>The <literal>#</literal> character introduces a
+        comment that spans until the end of the line.</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>The option names are relative to the section names, so
+      the following configuration file part:</para>
+      <screen>
+[gui.accessibility]
+visual_bell=yes
+      </screen>
+      <para>is equivalent to</para>
+      <screen>
+gui.accessibility.visual_bell=yes
+      </screen>
+
+    </section>
+
+    <section>
+      <title>Environment variables parser</title>
+
+      <para><firstterm>Environment variables</firstterm> are string variables
+      which are available to all programs via the <code>getenv</code> function
+      of C runtime library. The operating system allows to set initial values
+      for a given user, and the values can be further changed on the command
+      line.  For example, on Windows one can use the
+      <filename>autoexec.bat</filename> file or (on recent versions) the
+      <filename>Control Panel/System/Advanced/Environment Variables</filename>
+      dialog, and on Unix &#x2014;, the <filename>/etc/profile</filename>,
+      <filename>~/.profile</filename> and <filename>~/.bash_profile</filename>
+      files. Because environment variables can be set for the entire system,
+      they are particularly suitable for options which apply to all programs.
+      </para>
+
+      <para>The environment variables can be parsed with the
+      &parse_environment; function. The function have several overloaded
+      versions. The first parameter is always an &options_description;
+      instance, and the second specifies what variables must be processed, and
+      what option names must correspond to it. To describe the second
+      parameter we need to consider naming conventions for environment
+      variables.</para>
+
+      <para>If you have an option that should be specified via environment
+      variable, you need make up the variable's name. To avoid name clashes,
+      we suggest that you use a sufficiently unique prefix for environment
+      variables. Also, while option names are most likely in lower case,
+      environment variables conventionally use upper case. So, for an option
+      name <literal>proxy</literal> the environment variable might be called
+      <envar>BOOST_PROXY</envar>. During parsing, we need to perform reverse
+      conversion of the names. This is accomplished by passing the choosen
+      prefix as the second parameter of the &parse_environment; function.
+      Say, if you pass <literal>BOOST_</literal> as the prefix, and there are
+      two variables, <envar>CVSROOT</envar> and <envar>BOOST_PROXY</envar>, the
+      first variable will be ignored, and the second one will be converted to
+      option <literal>proxy</literal>.
+      </para>
+
+      <para>The above logic is sufficient in many cases, but it is also
+      possible to pass, as the second parameter of the &parse_environment;
+      function, any function taking a <code>std::string</code> and returning
+      <code>std::string</code>. That function will be called for each
+      environment variable and should return either the name of the option, or
+      empty string if the variable should be ignored.
+      </para>
+
+    </section>
+  </section>
+
+  <section>
+    <title>Annotated List of Symbols</title>
+
+    <para>The following table describes all the important symbols in the
+      library, for quick access.</para>
+
+    <informaltable pgwide="1">
+
+      <tgroup cols="2">
+        <colspec colname='c1'/>
+        <colspec colname='c2'/>
+        <thead>
+
+          <row>
+            <entry>Symbol</entry>
+            <entry>Description</entry>
+          </row>
+        </thead>
+
+        <tbody>
+
+          <row>
+            <entry namest='c1' nameend='c2'>Options description component</entry>
+          </row>
+
+          <row>
+            <entry>&options_description;</entry>
+            <entry>describes a number of options</entry>
+          </row>
+          <row>
+            <entry>&value;</entry>
+            <entry>defines the option's value</entry>
+          </row>
+
+          <row>
+            <entry namest='c1' nameend='c2'>Parsers component</entry>
+          </row>
+
+          <row>
+            <entry>&parse_command_line;</entry>
+            <entry>parses command line (simpified interface)</entry>
+          </row>
+
+          <row>
+            <entry>&basic_command_line_parser;</entry>
+            <entry>parses command line (extended interface)</entry>
+          </row>
+
+
+          <row>
+            <entry>&parse_config_file;</entry>
+            <entry>parses config file</entry>
+          </row>
+
+          <row>
+            <entry>&parse_environment;</entry>
+            <entry>parses environment</entry>
+          </row>
+
+          <row>
+            <entry namest='c1' nameend='c2'>Storage component</entry>
+          </row>
+
+          <row>
+            <entry>&variables_map;</entry>
+            <entry>storage for option values</entry>
+          </row>
+
+        </tbody>
+      </tgroup>
+
+    </informaltable>
+
+  </section>
+
+</section>
+
+<!--
+     Local Variables:
+     mode: nxml
+     sgml-indent-data: t
+     sgml-parent-document: ("program_options.xml" "section")
+     sgml-set-face: t
+     End:
+-->
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/program_options/doc/post_review_plan.txt b/vendor/pdalboost/libs/program_options/doc/post_review_plan.txt
new file mode 100644
index 0000000..6b81144
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/post_review_plan.txt
@@ -0,0 +1,182 @@
+
+ Program options post-review development plan.
+
+0. Convert all documentation to BoostBook format
+
+1. (done)
+   Simplify and clarify interface.
+   
+   It turns out that most users are interested in 'variables_map' class, so
+   it must be possible to use it directly, without even knowing about
+   'options_and_arguments'. The proposed interface is:
+
+   options_description desc;
+   ....
+   variables_map vm;
+   load_from_command_line(vm, desc, argc, argv);
+
+2. (done)
+   Better separation of syntaxic and semantic processing, as suggested by
+   Pavol Droba. 
+
+   The problem with current 'option_description' interface is that the
+   'validator' and 'notifier' callbacks are not really usable by ordinary
+   users --- it's extender's interface. The current 'parameter' function uses
+   those callback to provide user-friendly semantic interface, but it's not
+   documented nor completely worked out.
+
+   In the new interface, the second parameter of 'option_description' ctor
+   will have two possibilities: just a string and a pointer to a new class
+   'value_descriptor'. When passed the latter, it will invoke the instance on
+   itself, and then delete the object. A function 'value' will be provided,
+   that will create value specific for a type.
+
+   Example
+       ("magic", value<int>("n", &n)->default_value(10), "magic value").
+
+   The 'value' function will create instances of 'typed_value_descriptor'
+   type, with the following methods:
+       - default_value
+       - interpreter
+       - validator
+       - notifier
+
+   The 'option_description' class we'll have two attributes to support
+   semantic operation: 'generator', which will handle conversion from string
+   into value (including application of default value), and 'notifier'. Similiar
+   to the the current design, those attributes will be set by
+   'value_descriptor' instances.
+   
+   Another function, "bool_switch" will create value descriptor for type bool,
+   with default value of false. The function is needed to avoid special-casing
+   'value' function on bool type, which was considered confusing (Neal D. Becker).
+
+3. (done) Support for positional options. 
+
+   Positional options will be treated uniformly with ordinary ones. User will
+   be able to specify that, for example, third positional option is to be
+   interpreted as option "output-file" with the same value.
+
+   The user interface will be simple: user will provide two instanes of
+   'options_description' to functions which parse command line. For example.
+
+   options_description desc;
+   desc.add_options()
+   ("magic", "n", "magic value")
+   ;
+
+   options_description pdesc;
+   pdesc.add_options()
+   ("output-file", "n", "output file")
+   ("input-files*", value< vector<string> >("n"), "files")
+   ;
+
+   variables_map vm;
+   load_from_command_line(vm, desc, pdesc, argc, argv);
+
+4. (done, except for registry) 
+   Multiple sources improvement.
+ 
+   Need to implement support for registry/environment.
+   Also, must devise a way to handle different naming of option in
+   sources. Lastly, the storing of values into program variables should
+   become part of 'variables_map' interface.
+
+5. Improve documentation.
+
+   Chuck Messenger:
+   "When code is given for an example program, after the code, give examples of
+   using the program, along with the expected output."
+
+   Pavol Droba:
+    "I would prefer a few chapters explaining various components of the
+    library, each followed by a reference."
+
+    Pavel Vozenilek:
+    > Documentation should contain list of compilers the library works on and
+    > also info whether MSVC 6 port is feasible or not.
+    >
+    > The non-Doxygen part of documentation can be also a bit expanded: e.g. I
+    > would welcome some high level overview of the algorithms and structures and
+    > info about expected CPU/memory consumption.
+    >
+    > Also info whether there are any internal limits (like option length) .
+    >
+    > Some examples may be bit more annotated, also contain what is expected
+    > output.
+
+    Syntax highligting.
+
+    Document "*" in option names 
+    Automated tests for examples?
+    (new) Comments inside code snippets?
+    (new) Table of all symbols
+
+
+6. (deferred) 
+   Unicode support
+
+   - unicode in argv/argc
+   - Unicode in config files not supported
+    (
+       The difference between ASCII and unicode files is:
+         - big endian UTF16 starts with 2 bytes FE FF 9mandatory by Unicode
+        standard) - little endian UTF16 starts with FF FE
+          - UTF8 text starts with EF BB BF
+
+        Pavel Vozenilek
+     )
+
+7. Config file improvements
+
+   - should have "allow_unregistered" for config_file.
+   - (done) bool options in config file do not work.
+   - "#" inside strings, in config files (Pavel Vozenilek)
+
+8. 
+   Cmdline improvements
+
+   - must be able to parse WinMain string
+   - support for response files
+
+9. Other changes.
+
+   - (outdated) get_value -> value (Beman)
+   - (done) is "argv" const in std, or not? Adjust docs if not.
+   - variables_map::count_if, find_if (Tanton Gibbs)
+   - Works with exceptions disabled.
+   - (outdated) disallow empty name for the 'parameter' function
+   - check for prefixes if 'allow_guessing' is on
+   - check for duplicate declaration of options. 
+   - test additional parser
+   - Show default values in help output
+   - Adaptive field width
+   - Mandatory options (2 votes (second Jonathan Graehl))
+   - (new) return vector from parsers by auto_ptr, not by value?
+   - (new) rename value_semantic into value_description
+   - (new) output for positional_options_description
+   - (new) variables_map should throw when value not found
+   - (important) decide where we check that the number of passed option
+      tokens is less than the allowed number. In parser or later?
+   - (important) what if the same option has different definitions?
+   - (new) We lost the ability to specify options_description instance
+     in call to 'store'. So now we can't store just subset of options.
+     Is it a problem?
+   - (new) Improve formatting of 'arg'.   
+   - (new) revive real and regexp examples.
+   - (new) even more simpler syntax for assignent to var?
+
+
+10. Uncertain
+    - Function to get program name
+    - Order of 'description' and 'value'.
+       
+
+11. (new) Look at all "TODO" comments.
+    (new) Check that all methods are documented.
+
+        
+12. Deferred 
+
+   - storing value to boost::optional 
+   - setting a flag when option is found 
diff --git a/vendor/pdalboost/libs/program_options/doc/program_options.dox b/vendor/pdalboost/libs/program_options/doc/program_options.dox
new file mode 100644
index 0000000..1e1e423
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/program_options.dox
@@ -0,0 +1,162 @@
+/** @mainpage Program options documentation 
+
+    @section scope Scope
+
+    Briefly, the library should allow program developers to obtain
+    <em>program options</em>, i.e. (name,value) pairs from the user,
+    via conventional methods such as command line and config file.
+    
+    Necessary facilities include:
+    - parse command line
+    - parse config files
+    - perform semantic validation on input, such as checking for correct
+      type of parameters, and storing values.
+    - combine all inputs together, so that all program options can
+      be obtained in one place.
+
+    @section goals Goals
+    The fundamental goals for this library were:
+    - it should be more convenient to use it than parse command line by hand,
+      even when the number of possible options is 2,
+    - all popular command line styles should be supported,
+    - "you pay for what you use" principle is important: simple utilities
+      need not be forced to depend on excessive amount of code.
+    - it must be possible to validate option values, convert them to required
+      types, and store either in program variables, or in data structures
+      maintained by the library.
+    - data from command line and config file should be usable together, and
+      alternative program option sources (such as registry) should be
+      possible.
+
+   @section design_overview Design overview
+
+   To meet the stated goals, the library uses a layered architecture.
+   -# At the bottom, there are two parser classes, 
+      boost::program_options::cmdline and 
+      boost::program_options::config_file.
+    They are responsible for syntax matters only and provide simple 
+    iterator-like interface.
+   -# The boost::program_options::options_and_arguments holds the result of parsing command line or
+    config file. It is still concerned with syntax only and holds precisely
+    what is found on command line. There's a couple of associated parse
+    functions (
+    @ref parse_cmdline_func "1",
+    @ref parse_config_file_func "2"), 
+    which relieve the user from the need to iterate over options 
+    and arguments manually.
+   -# The class boost::program_options::options_description is a high-level 
+    description of allowed
+    program options, which does not depend on concrete parser class. In
+    addition, it can be used to provide help message. There are parse
+    functions which return options_and_arguments given options_description.
+   -# The options_description class also has semantic responsibilities. It's
+    possible to specify validators for option, their default values, and the 
+    like. There's a function boost::program_options::perform_semantic_actions, 
+    which handles this information and returns a map of option values.
+   -# Finally, at the top, there boost::program_options::variables_map class. 
+    It's possible to
+    store options in it, and obtain them later. Another feature is that
+    different variable_map instances can be linked together, so that both
+    command line and config file data is used. Additional option sources can
+    be added at this level.
+   
+   @section futher_reading Futher reading
+
+   To get further information about the library, you might want to read
+   the documentation for the classes referenced above. Another possibility
+   is to look through the examples:
+   
+    -  @ref options_description "simple usage"
+    -  @ref variables_map "parsing with validation and assignment to program variables"
+    -  @ref multiple_sources "using command line and config file together"
+    -  @ref custom_syntax "customized options syntax"
+    -  @ref real_example "real example"
+    -  @ref custom_validator "custom validator"
+    -  @ref multiple_modules "possible approach for multi-module programs"
+    -  @ref cmdline "low level cmdline parsing"
+
+    Finally, you might want the check out the @ref recipes "recipes" page.
+*/
+
+/** @page examples Examples
+
+    -  @ref options_description "simple usage"
+    -  @ref variables_map "parsing with validation and assignment to program variables"
+    -  @ref multiple_sources "using command line and config file together"
+    -  @ref custom_syntax "customized options syntax"
+    -  @ref real_example "real example"
+    -  @ref custom_validator "custom validator"
+    -  @ref multiple_modules "possible approach for multi-module programs"
+    -  @ref cmdline "low level cmdline parsing"
+*/
+
+/** @page options_description Options description
+
+    Example of quite a simple usage. Options are registered and the 
+    command line is parsed. The user is responsible to interpreting the
+    option values. This also how automatic help message.
+
+    @include options_description.cpp
+*/
+
+/** @page variables_map Variables map
+
+    In this example, the <tt>parameter</tt> function is used to enable
+    validation of options (i.e. checking that they are of correct type).
+    The option values are also stored in program variables.
+
+    @include variables_map.cpp
+*/
+
+/** @page multiple_sources Multiple sources
+
+    It is possible for program options to come from different sources. 
+    Here, the command line and a config file are used, and the values
+    specified in both are combined, with preferrence given to the
+    command line.
+
+    @include multiple_sources.cpp
+*/
+
+/** @page custom_syntax Custom syntax
+
+    Some applications use a custom syntax for the command line. In this
+    example, the gcc style of "-fbar"/"-f" is handled.
+
+    @include custom_syntax.cpp
+*/
+
+/** @page real_example A real example
+
+    Shows how to use custom option description class and custom formatter.
+    Also validates some option relationship.
+
+    @include real.cpp
+*/
+
+/** @page multiple_modules Multiple modules
+
+    Large programs are likely to have several modules which want to use
+    some options. One possible approach is show here.
+    @sa @ref recipe_multiple_modules
+
+    @include multiple_modules.cpp 
+*/
+
+/** @page custom_validator Custom validator
+
+    It's possible to plug in arbitrary function for converting the string
+    value from the command line to the value used in your program. The
+    example below illustrates this.
+
+    @include regex.cpp
+*/
+
+/** @page cmdline The cmdline class
+
+    When validation or automatic help message are not needed, it's possible
+    to use low-level boost::program_options::cmdline class, like shown
+    in this example.
+
+    @include cmdline.cpp
+*/
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/program_options/doc/program_options.ent b/vendor/pdalboost/libs/program_options/doc/program_options.ent
new file mode 100644
index 0000000..084f605
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/program_options.ent
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!ENTITY positional_options_desc 
+     "<classname alt='boost::program_options::positional_options_description'>positional_options_description</classname>">
+
+<!ENTITY options_description
+     "<classname alt='boost::program_options::options_description'>options_description</classname>">
+
+<!ENTITY option_description
+     "<classname alt='boost::program_options::option_description'>option_description</classname>">
+
+<!ENTITY value_semantic
+     "<classname alt='boost::program_options::value_semantic'>value_semantic</classname>">
+
+<!ENTITY parsed_options
+     "<classname alt='boost::program_options::parsed_options'>parsed_options</classname>">
+
+<!ENTITY variables_map
+     "<classname alt='boost::program_options::variables_map'>variables_map</classname>">
+
+
+<!ENTITY value
+     "<functionname alt='boost::program_options::value'>value</functionname>">
+
+<!ENTITY parse_command_line
+     "<functionname
+     alt='boost::program_options::parse_command_line'>parse_command_line</functionname>">
+
+<!ENTITY parse_config_file
+     "<functionname alt='boost::program_options::parse_config_file'>parse_config_file</functionname>">
+
+<!ENTITY parse_environment
+     "<functionname alt='boost::program_options::parse_environment'>parse_environment</functionname>">
+
+<!ENTITY store
+     "<functionname alt='boost::program_options::store'>store</functionname>">
+
+<!ENTITY command_line_parser
+     "<classname alt='boost::program_options::command_line_parser'>command_line_parser</classname>">
+
+<!ENTITY basic_command_line_parser
+     "<classname alt='boost::program_options::basic_command_line_parser'>basic_command_line_parser</classname>">
+
+
+<!ENTITY basic_option
+     "<classname alt='boost::program_options::basic_option'>basic_option</classname>">
+
diff --git a/vendor/pdalboost/libs/program_options/doc/program_options.xml b/vendor/pdalboost/libs/program_options/doc/program_options.xml
new file mode 100644
index 0000000..cd879f7
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/program_options.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
+     "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd">
+<library 
+    name="Program_options"
+    dirname="program_options" id="program_options" 
+    last-revision="$Date$" 
+    xmlns:xi="http://www.w3.org/2001/XInclude">
+  <libraryinfo>
+    <author>
+      <firstname>Vladimir</firstname>
+      <surname>Prus</surname>
+    </author>
+    
+    <copyright>
+      <year>2002</year>
+      <year>2003</year>
+      <year>2004</year>
+      <holder>Vladimir Prus</holder>
+    </copyright>
+
+    <legalnotice>
+      <para>Distributed under the Boost Software License, Version 1.0.
+      (See accompanying file <filename>LICENSE_1_0.txt</filename> or copy at 
+      <ulink
+      url="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</ulink>)
+      </para>
+    </legalnotice>
+
+            
+    <librarypurpose>
+      Facilities to obtain configuration data from command line, config files
+      and other sources</librarypurpose>
+    <librarycategory name="category:data-structures"></librarycategory>
+  </libraryinfo>
+  
+  <title>Boost.Program_options</title>
+  
+  <section>
+    <title>Introduction</title>
+
+    <para>The program_options library allows program developers to obtain
+    <emphasis>program options</emphasis>, that is (name, value) pairs from the user,
+    via conventional methods such as command line and config file.</para>
+
+    <para>Why would you use such a library, and why is it better than parsing
+    your command line by straightforward hand-written code?
+      <itemizedlist>
+        <listitem>
+          <para>It's easier. The syntax for declaring options is simple, and
+          the library itself is small. Things like conversion of option values to
+          desired type and storing into program variables are handled
+          automatically.
+          </para>
+        </listitem>
+        <listitem>
+          <para>Error reporting is better. All the problems with the command line are
+            reported, while hand-written code can just misparse the input. In
+            addition, the usage message can be automatically generated, to
+            avoid falling out of sync with the real list of options.</para>
+        </listitem>
+        <listitem>
+          <para>Options can be read from anywhere. Sooner or later the command
+          line will be not enough for your users, and you'll want config files
+          or maybe even environment variables. These can be added without significant 
+          effort on your part.
+          </para>
+        </listitem>        
+      </itemizedlist>
+    </para>
+
+    <para>
+      Now let's see some examples of the library usage in the <xref
+      linkend="program_options.tutorial"/>.
+    </para>
+    
+  </section>
+
+  <xi:include href="tutorial.xml"/>  
+  <xi:include href="overview.xml"/>  
+  
+  <xi:include href="howto.xml"/>
+  <xi:include href="design.xml"/>
+  <xi:include href="acknowledgements.xml"/>    
+   
+  <xi:include href="autodoc.xml"/> 
+</library>
diff --git a/vendor/pdalboost/libs/program_options/doc/questions b/vendor/pdalboost/libs/program_options/doc/questions
new file mode 100644
index 0000000..f0f055f
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/questions
@@ -0,0 +1,16 @@
+
+Rename 'parameter' in option_description with something
+better, e.g. 'value_specification'?
+
+Approximate matching for variable_map access?
+
+Should be able to stack validators?
+
+Case with variables like this
+	'foo'	=	10
+	'foo.bar'	=	12
+	should become an error
+
+
+
+
diff --git a/vendor/pdalboost/libs/program_options/doc/questions.dox b/vendor/pdalboost/libs/program_options/doc/questions.dox
new file mode 100644
index 0000000..2cd8194
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/questions.dox
@@ -0,0 +1,12 @@
+/**	@page open_questions Open questions.
+
+	<ol>
+	<li> Shouldn't validators always use "C" locale?
+
+	<li> Shouldn't validator for intr check for different bases?  
+
+	<li> Does anyone need "getop_option_description"?.
+
+	</ol>		
+
+*/
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/program_options/doc/rationale b/vendor/pdalboost/libs/program_options/doc/rationale
new file mode 100644
index 0000000..03192a9
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/rationale
@@ -0,0 +1,15 @@
+
+We could either implement simple chaining for variable maps, or
+implement generic composition classes. The former was choosen,
+mostly because of simplicity.
+
+There were two implementation approaches for multiple option
+occurrences in options_and_arguments. First is store them
+separately. The advantage is that it's easy to obtain all
+occurrences before certain position on command line. The
+disadvantage is that we cannot return a reference to 
+vector<vector<string> > in get_all_values. It was considered
+that if support for position-dependent options is to be
+added, then we're be mostly interested in occurrences of
+a single option that were before some point. That's possible
+with vector<vector<string> > storage.
diff --git a/vendor/pdalboost/libs/program_options/doc/rationale.dox b/vendor/pdalboost/libs/program_options/doc/rationale.dox
new file mode 100644
index 0000000..388bba2
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/rationale.dox
@@ -0,0 +1,95 @@
+/** @page rationale Rationale
+
+    @section code_size Focus on code size
+
+    The program options library has two important properties:
+    - runtime performance is not important. After all, command line processing
+      is done only once, and the amount of data is small.
+    - code size matters. Since parsing command line is utility task, users
+    won't be glad to have lots of code linked to every binary which has
+    options.
+    
+    For the above reasons, the the library is designed so that it can be easily
+    used as shared library, with minimum code on the side of main application.
+    In particular, templates are used only where necessary, for example for 
+    validation of user-defined types. In other places, boost::function is
+    used to allow customization, but keep templates out of the public
+    interface.
+
+    @section string_vs_enums Strings vs. enums
+
+    In some places, the library uses strings to convey information that
+    could be represented by enumerations or values. For example, 
+    the program_options::option_description class allows to add "?" to the
+    parameter name to specify that the parameter is optional. For another
+    example, while program_options::cmdline class allows to obtain the
+    index of option, it does not require to specify an index for each option,
+    and it's possible to tell options by their names.
+
+    Such interface appears to be much more usable. If we were using
+    enumeration for different properties of parameter, there would be 
+    another argument to many functions, the need to type long, possible
+    qualified names, and little advantage. 
+
+    That little advantage is that if you type a wrong enumeration name,
+    you'd get a compile error. If you type '!' instead of '?' after parameter
+    name, you'd get incorrect behaviour.  However, such errors are deemed
+    rare.
+
+    @section char_vs_string const char* vs. std::string
+
+    Most of the interface uses const char* where std::string seems a natural 
+    choice. The reason is that those functions are called many times: for
+    example to declare all options. They are typically called with string
+    literals, and implicit conversion to string appears to take a lot of
+    code space. Providing both std::string and const char* version would
+    considerably bloat the interface. Since passing std::string is considered
+    rare, only const char* versions are provided.
+
+    @section init_syntax Initialization syntax
+
+    The syntax used for creating options_description instance was designed to 
+    be as easy as possible in the most common case. Consider:
+    @code
+    desc.add_options()
+            ("verbose", "", "verbosity level")
+            ("magic", "int", "magic value").notify(some_func)
+            ;
+    @endcode
+    Here, most common properties of options: name, presense of parameter and
+    description, are specified very concisely, and additional properties can
+    be given quite naturally, too.
+
+    Another possibility would be:
+    @code
+        option_description d1(...), d2(...);
+        desc.add(d1 & d2);
+    @endcode
+    or         
+    @code
+        option_description d1(...), d2(...);
+        desc = d1, d2;
+    @endcode
+
+    The drawback is the need to explicitly create new objects and give names
+    to them. The latter problem can be helped if objects are created inside
+    expressions:
+    @code
+        desc = option_description(...), option_description(...)
+    @endcode
+    but there's still extra typing.    
+
+    @section help_handling Handling of --help
+
+    It was suggested by Gennadiy Rozental that occurrence of <tt>--help</tt>
+    on command line results in throwing an exception. Actually, the 
+    "special" option must have been configurable. This was not 
+    implemented, because applications might reasonable want to process
+    the rest of command line even of <tt>--help</tt> was seen. For example,
+    <tt>--verbose</tt> option can control how much help should be output, 
+    or there may be several subcommand with different help screens.    
+  
+
+      
+
+*/
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/program_options/doc/recipes.dox b/vendor/pdalboost/libs/program_options/doc/recipes.dox
new file mode 100644
index 0000000..a3cd623
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/recipes.dox
@@ -0,0 +1,91 @@
+/** @page recipes Recipes
+
+    Here, we'll give solution for some desires which seem common.
+
+    @section recipe_parameter_validation How to check for correct option value types and assign them?
+
+    There's the boost::program_options::parameter function. It
+    returns a object, which, if passed as the second parameter
+    to boost::program_options::option_description constructor,
+    establishes correct validation routine. A simple example
+    is
+    @code
+    options_description desc;
+    desc.add_options()
+    ("foo", parameter<int>("arg"), "obscure option")
+    ;
+    @endcode
+
+    If you pass an address of <tt>int</tt> variable as the second
+    parameter of the <tt>parameter</tt> function, that variable will
+    be assigned the options's value.
+
+    @sa @ref variables_map
+
+    @section recipe_lazy What if I don't want to declare any options?
+
+    I'm not sure this is good idea. In particular, mistyped options
+    will be silently ignored, leading to possible user surprises. 
+    Futher, the boost::program_options::cmdline class was specially
+    designed to be very lightweight. 
+
+    Anyway, there's a version of the parse_command_line function
+    which does not take an options_description instance. Also, the
+    cmdline class ctor accepts an 'allow_unregistered' parameter. 
+    In both cases, all options will be allowed, and treated as if
+    they have optional parameter.
+
+    Note that with the default style, 
+    @verbatim
+    --foo bar
+    @endverbatim
+    will be taken as option "foo" with value "bar", which is
+    probably not correct. You should disable option parameter in
+    the next token to avoid problems.
+
+    @sa boost::program_options::cmdline
+
+    @section recipe_multiple_modules I have several separate modules which must controlled by options. What am I to do?
+
+    There are several solutions. 
+
+    @subsection sb1 Everything's global
+
+    You can create a single instance of the <tt>options_description</tt> class
+    somewhere near <tt>main</tt>. All the modules will export their own
+    options using other <tt>options_description</tt> instances which can
+    be added to the main one. After that, you'd parse command line and 
+    config files. The parsing results will be stored in one variables_map,
+    which will be passed to all modules, which can work with their own 
+    options.
+
+    @subsection sb2 Private option data
+
+    Assume one of the modules does not like to see irrelevant options.
+    For example, it outputs a configuration file for other program, and
+    irrelevant options will confuse that program. 
+
+    It's possible to give the module only the options that it has
+    registered. First, the module provides an options_description instance
+    which is added to the global one. Second the command line is parsed
+    to produce an options_and_arguments instance. Lastly, the <tt>store</tt>
+    function is called. If passed the options_description instance previously
+    returned by the module, it will store only options specified in that
+    instance. 
+    @sa @ref multiple_modules
+    
+
+    @subsection sb3 Unique option names
+
+    The most general solution would be to give unique names to options
+    for different modules. One module will declare option "module1.server",
+    and another would declare "module2.internal_checks". Of course, there
+    can be global options like "verbosity", declared by <tt>main</tt> and
+    used by all modules.
+
+    This solution avoids all possible name clashes between modules. On
+    the other hand, longer option names can be less user-friendly. This
+    problem can be alleviated if module prefix is used only for less 
+    common option, needed for fine-tuning.
+
+*/
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/program_options/doc/requirements-Rozental b/vendor/pdalboost/libs/program_options/doc/requirements-Rozental
new file mode 100644
index 0000000..580fb9c
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/requirements-Rozental
@@ -0,0 +1,209 @@
+From rogeeff at mail.com Fri Nov 16 19:57:49 2001
+Received: from imap.cs.msu.su (imap.cs.msu.su [158.250.10.15])
+	by redsun.cs.msu.su (8.9.3/8.9.3) with ESMTP id TAA06515
+	for <ghost at redsun.cs.msu.su>; Fri, 16 Nov 2001 19:59:43 +0300 (MSK)
+Received: from n15.groups.yahoo.com (n15.groups.yahoo.com [216.115.96.65])
+	by imap.cs.msu.su (8.11.6/8.11.6) with SMTP id fAGGtrd57869
+	for <ghost at cs.msu.su>; Fri, 16 Nov 2001 19:55:54 +0300 (MSK)
+	(envelope-from sentto-1234907-17382-1005929874-ghost=cs.msu.su at returns.groups.yahoo.com)
+X-eGroups-Return: sentto-1234907-17382-1005929874-ghost=cs.msu.su at returns.groups.yahoo.com
+Received: from [10.1.1.222] by n15.groups.yahoo.com with NNFMP; 16 Nov 2001 16:57:42 -0000
+X-Sender: rogeeff at mail.com
+X-Apparently-To: boost at yahoogroups.com
+Received: (EGP: mail-8_0_0_1); 16 Nov 2001 16:57:53 -0000
+Received: (qmail 2553 invoked from network); 16 Nov 2001 16:57:53 -0000
+Received: from unknown (216.115.97.172)
+  by m4.grp.snv.yahoo.com with QMQP; 16 Nov 2001 16:57:53 -0000
+Received: from unknown (HELO n6.groups.yahoo.com) (216.115.96.56)
+  by mta2.grp.snv.yahoo.com with SMTP; 16 Nov 2001 16:57:53 -0000
+X-eGroups-Return: rogeeff at mail.com
+Received: from [10.1.10.109] by n6.groups.yahoo.com with NNFMP; 16 Nov 2001 16:57:52 -0000
+To: boost at yahoogroups.com
+Message-ID: <9t3gid+hdf3 at eGroups.com>
+In-Reply-To: <E164iu4-00052e-00 at zigzag.cs.msu.su>
+User-Agent: eGroups-EW/0.82
+X-Mailer: eGroups Message Poster
+X-Originating-IP: 199.119.33.162
+From: "Gennadiy E. Rozental" <rogeeff at mail.com>
+X-Yahoo-Profile: rogeeff
+MIME-Version: 1.0
+Mailing-List: list boost at yahoogroups.com; contact boost-owner at yahoogroups.com
+Delivered-To: mailing list boost at yahoogroups.com
+Precedence: bulk
+List-Unsubscribe: <mailto:boost-unsubscribe at yahoogroups.com>
+Date: Fri, 16 Nov 2001 16:57:49 -0000
+Reply-To: boost at yahoogroups.com
+Subject: [boost] Re: arguments parsing, wildcard matcher
+Content-Transfer-Encoding: 7bit
+Content-Type: text/plain;
+  charset=US-ASCII
+Content-Length: 5662
+Status: R 
+X-Status: N
+
+--- In boost at y..., Vladimir Prus <ghost at c...> wrote:
+> 
+> > Just a couple of classes I wrote that I wondered if anyone thought
+> > any place in boost:
+> >
+> > arguments : simple command-line arguments and options parser:
+> >
+> > class arguments
+> > {
+> > public:
+> > 	arguments(int argc, char* argv[]);
+> >
+> > 	bool has_option(const char* name) const;
+> > 	bool get_option(const char* name, bool& value) const;
+> 
+> > Any interest? Already proposed? Wasting my time?
+> 
+> Actually, I'm already working on library with the same goals but 
+more 
+> elaborated. Moreover, it's almost finished. I planned to announce 
+it later, 
+> but have to do it now. My design goals were:
+>  - It should be resonable to use the library to parse as little as 
+2 command 
+> line options.
+> - It must be extandable to privide any resonable handling
+> - since command line is just a way to affect the program behaviour, 
+other 
+> ways to accomplish that must be provided, most notable is 
+configuration file
+> - library should provide a way to store information from command 
+line and 
+> config file in a way allowing easy retrieval and using to change 
+configurable 
+> parameters of the program.
+> 
+> The docs are available at:
+> http://chronos.cs.msu.su/~ghost/projects/config_db/doc/index.html
+> 
+> Let me know what you think.
+
+Privet, Volodya.
+
+Here what I am looking for to be supported by Command Line Argument 
+Framework directly or by means of easy extension:
+
+1. command line argument formats
+  a. -<one letter key> <value>
+  b. -<one letter key><value>
+  c. -<key> <value>
+  d. -<option> - any length
+  e. /<key> <value> - and all other cases like a,b,c but with / 
+instead
+  g. --<key> <value>
+  h. -<key substring> <value>
+    An example: let say you expecting argument -osagent_port
+    then following argument lists should be valid:
+       -o 15000
+       -osa 15000
+       -osagent_port 15000
+    On the other hand it should perform validity checks. For example
+    if you also expect another argument -osagent_host. then first 2
+    argument list above should generate runtime error and 3d should
+    pass. Arguments integrity check should also be performed, i.e. 
+    you should not allow for user to define 2 argument like this:
+     "-port"
+     "-port_type"
+
+2. argument types
+   I should be able to explicitle specify expected argument type. For 
+example: std::string, int, double, option(bool). The framework should 
+perform value validation. For example 1.23 is not valid for int 
+argument. The framework should allow to use user-defined classes as 
+expected types for command-line argument. In other word. If I provide 
+you a class with predefined psecification framework should try to 
+generate object of argument class. Some simple extention you can 
+provide youself. For example, using following command line you should 
+be able to generate std::list<int>
+     -values 2 5 7 8
+and using following command line you should be able to generate 
+std::list<std::string>
+     -files_to_test test1.td test2.td test3.td test4.td
+and using following command line user should be able to provide 
+argument class A to generate std::list<A>
+struct A{
+std::string key;
+int         value;
+};
+
+-parameters_mapping name1 4 name5 7 name6 8 name9 1123
+
+3. argument storage.
+  a. Framework should be able to generate and store arguments 
+internally. In this case framework in responsable for memory.
+  b. Framework should be able to generate and store argument into the 
+user-bound location. In this case user in responsable for memory.
+
+4. arguments can have default values
+
+5. arguments can be optional and required. The framework should 
+automatically check presence of of all required arguments.
+
+6. argument value access
+  a. if user passed storage location - he will be able to get value 
+from there
+  b. by name and type. If any of them is incorrect - error. The same 
+rules aplied here as in 1.h if argument matching algorithm allows 
+substrings.
+  c. is_present check - to be able to check presence of optional 
+arguments.
+
+7. usage line.
+  The framework should be able to generate a using line given a 
+difinition of all feilds. To support this you will probably need 
+argument description as one of the command line argument 
+constructor's argument. Thr framework should be able to configured to 
+use different usage line. If command line contain predefined keyword 
+(-help or /? for example) framework should print usage message.
+
+8. Framework Error
+  If any of the following condition occures during command line 
+processing the framework should generate an error and print a usage 
+line:
+   a. invalid aargument
+   b. ambiguous argument
+   c. invalid value for the argument
+   d. absence of required argument
+   e. framework meet -help (of any other predefined keyword)
+
+Invalid name or type should generate exception during value access.
+
+Here my view on the problem.
+
+Regards,
+
+Gennadiy.
+
+
+P.S. Did you look into Brat Appleton's work? It seems to be close to 
+what you are doing.
+
+> 
+> Concerning your proposal, I can mark two points, apart from it's 
+been a 
+> subset of mine:
+> 1. It uses get_options(const char* name, type& value) methods, 
+which are not 
+> extendable (and the similar thing is used in KConfig class in 
+KDE....) What I 
+> propose is
+> variables_map vm .....
+> int i = vm["magic"].as<int>()
+> FontName fn = vm["font"].as<FontName>()
+> 2. You propose wildcard expansions. This is good. But it is easy to 
+add it to 
+> any existing command line parsing library.
+> 
+> - Volodya
+
+
+Info: http://www.boost.org  Unsubscribe: <mailto:boost-unsubscribe at yahoogroups.com> 
+
+Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 
+
+
+
diff --git a/vendor/pdalboost/libs/program_options/doc/todo.txt b/vendor/pdalboost/libs/program_options/doc/todo.txt
new file mode 100644
index 0000000..b314587
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/todo.txt
@@ -0,0 +1,238 @@
+
+Say that variables_map is actually derived from std::map.
+
+Make parse_config_file("foo.cfg", desc) work.
+
+Document handling of positional options which depends on precedding options. 
+I.e scanning the parsed options and creating new variables_map when we see
+a positional option. (Email from Tony).
+
+> My instinctive reaction is to provide both via an options argument to
+> split_command_line (a name that would now be more appropriate). But I
+> haven't devoted much time to thinking this through, so I may be wrong. :-)
+> 
+> In any event, the tokenization isn't much fun. I'd expect the library to
+> provide a convenient mechanism for parsing a response file.
+
+
+> Similarly, is there some easy to use hook for customizing the "arg" to
+> indicate the type of the data (similar to how the textual representation
+> of the default argument can be changed, e.g.
+> value<Infile>(&forests_file)->default_value(default_in,"STDIN"), so that
+> I could get something like: "-f filename (=STDIN)   :" instead of "-f
+> arg (=STDIN)  :"?
+
+> A minor nit pick, with option groups (chained options_description), the
+> colons for the same group align but not across groups.
+
+
+There's another possibility:
+
+   value<type>(&variable, "filename")->......
+
+something like that was in the pre-review version, with the difference that the value name was also used to specify flags, e.g "filename?" would mean the value is optional.
+
+
+Should we also store the name specified on the command line in basic_option,
+so that validation_error can mention the *specified* option name?
+
+
+The config file is a bit different from command line. E.g. 'bool_switch' can't
+be specified in the config file. Further, it's not possible to specify a list
+of values in config file. For example, you can't write
+
+   include=a,b,c,d
+
+(or some other separator). You need:
+
+   include=a
+   ...
+   include=d
+
+
+ 
+> I often find it beneficial to start a log file, by tracing all options
+> in effect. Thus, it would be nice if one could iterate over all values
+> in a variable_map and get a string representation of all values. Perhaps
+> as an iterator range to the original string that was parsed into the
+> value in the first place. Using as<string> delegates to boost::any and
+> only succeeds if the value is indeed a string (a design decision I can
+> only applaud, btw), so I'm out of luck there.
+
+
+
+
+UML diagram?
+
+src/cmdline.cpp: function strncmp_nocase():
+>     maybe it can be replaced by something from string_algorithms
+>     library. AFAIK the library should be in 1.32.
+
+> 24. the documentation may contain info what source files are needed
+>     for which feature or whether they need to be included always all.
+
+The program_options.reference.html may contain one-liner
+   overview for every header and every class/typedef/function
+   listed here - just for quick browsing and overview.
+
+
+> > > 5. Maybe more overcommented code examples can be added into
+> > >    docs, each exploring single feature of library.
+> > >
+> > >    Some people learn mostly from such examples.
+> > >
+> > >    Later note: definitely would be useful, IMO.
+> >
+> > Maybe. Do you have specific ideas what the examples can be about?
+>
+> One tiny example concentrating on one feature as short/long options,
+> multiple sources, hidden options, positional options, INI handling etc.
+> Something what user can skim over and cut/paste into app.
+
+
+> I would prefer that all occurrences of ASCII be capitalized.  It is the
+> abbreviation of the name of the Standard.  You may show it in lower case,
+> though, to distinguish "char strings in local 8-bit encoding" from the
+> Standard but it may confuse some readers.  I can't think of a good
+> alternative right now.
+
+> [By the way, "positional options" _desperately_ needs an entry in the
+> glossary. It's the most mystifying term in the library.]
+
+> If not already stated, you should note that all options must appear in the
+> options description layer (or class or object).  No options may make their
+> first appearance in the runtime configuration file, for instance.  The
+> library doesn't like surprises.  (I bring this up because other
+> initialization libraries allow an option to be declared in the
+> configuration file alone.  The file reader stores the option and parses it
+> to determine its type, for example, Boolean, double, integer or string.)
+
+-----------
+> "In the simplest case, the name is explicitly specified, which allows the
+> program to decide if such an option is known."
+>
+> or
+>
+> "In the simplest case, the name is explicitly specified and the program
+> decides that the option is known."
+> (This paragraph is a bit hard to read.  Maybe when I understand the library
+> better I can suggest some wording which flows more smoothly.)
+
+Maybe some explanation can help. Most of the time, input source contains both 
+the name of option and the value, for example, --foo=10. In this case, we 
+just lookup the option name, decide we know this option, and process it.
+
+In one specific case -- positional command line options, we don't have 
+explicit name. For example:
+
+   my_prog 1 2 3
+
+so more complex logic is necessary.
+
+
+> Rather than clutter up this list it might be better for the word "sources"
+> to be a link to another part of the document which lists the sources and
+> the order of precedence.
+
+Style of 'screen' in docs.
+
+> Perhaps you should include some sample output to show correct and incorrect
+> locale support or include a link to somewhere else in Boost where the
+> reader can find more information.  I wouldn't know a Unicode if it came up
+> and bit me on the ankle.
+
+
+> "Common cases are when the value is explicitly specified by the user, and
+> when the value cannot be specified by the user, but the presense of the
+> option implies some value (for example, <code>true</code>). So, the parser
+> checks that the value is specified when needed and not specified when not
+> needed, and returns new (name, value) pair."
+>
+> This wording is quite stiff and I can't decipher it, especially the "not
+> specified when not needed" phrase.  Can you rewrite this?
+
+> While I'm thinking about it, can you add the "Last revised..." line at the
+> bottom of each HTML page as it is on program_options.html or it that
+> governed by an xsl file?
+
+> If it doesn't already exist, there should be something in the tutorial to
+> explicitly define the steps required prior to the use of a configuration
+> variable as:
+> 1. declaration
+> 2. addition or composition
+> 3. storage or insertion
+> 4. notification.
+
+
+> I think a few lines should be added to aid the library user with the test
+> programs.  You could place them here in howto.xml or elsewhere or in a new
+> section entirely.  Users will want to know if their compiler is known to
+> work with the library and should be directed to the Boost Compiler Status
+> Tables page (\status\compiler_status.html or similar) or directly to the
+> Compiler Status Summary (http://boost.sourceforge.net/regression-logs/).
+
+> Many users will want to run the test programs on their own computer.  Your
+> documentation should answer these questions:
+> Which libraries must be linked to build the programs? (Dynamic? Static?)
+> Are there any other special considerations or any compiler switches to be
+> set? For those without a full Boost package, which other Boost libraries
+> are "included" by the test programs and, therefore, must be available?
+
+Basically, it's assumed that test programs with be run with Boost.Build. 
+Maybe it's worth noting that if a user wants to compiler them himself, 
+he should link the program_options library.
+
+> If you decide to make a separate section to describe the implementation of
+> the test programs, you might move the "test_convert" paragraphs starting at
+> line 379 of howto.xml there and put a referring link in its place.
+
+> I thought there was a bit of correspondence on one of the Boost mailing
+> lists concerning the inability of program_options to show the stored
+> variables 'en masse' but I can't find it now.  You should include that in
+> the documentation. Most users will be searching for a method to verify that
+> command line and configuration file values were actually stored in place of
+> the default values, for instance.  You could put in a line or two stating
+> that there is no one function which will send the entire database to a file
+> for later review.  (I think it had something to do with the fact that
+> program_options doesn't "know" the type of each option.)  I think it will
+> acquire the status of a Frequently-Asked Question.)
+
+
+> > Agreed. Though it's no FAQ section yet.... maybe, I can add this to howto
+>
+> section, though a question without full solution is not good.
+>
+> For the time being, those who want to know if such a display function
+> exists will have their question answered and the reason for it.  I suppose
+> that the library user could insert a series of statements in his program
+> immediately after the "notify" function which would write each known option
+> to a file for later examination.  Some people may use a number of "assert"
+> statements instead. They would only come into play in the debug mode.
+
+More visibility for bool_switch.
+
+
+> BTW: I thought of one other comment. One of the things I missed a little
+> in the documentation is a description of the config file format, as well
+> as what can be achieved with the po::command_line_style::style_t enum. I
+> think most users will need this information sooner or later. A few
+> examples would be fine... But then again time is such a precious thing
+
+> Does the library supports sections in config files
+
+> What about the combination of (if some user-settable switch is thrown,
+> but not by default):
+> 
+> * allowing unknown options -- these are considered positional parameters
+> * rearranging the argument list such that all positional parameters
+> are moved to the end
+> 
+> This way:
+> 
+> program --unknown 42 --known-flag --known-arg value
+> 
+> is handled as if it were (in standard UNIX command-line-ese):
+> 
+> program --known-flag --known-arg value -- --unknown 42
+
+
diff --git a/vendor/pdalboost/libs/program_options/doc/tutorial.xml b/vendor/pdalboost/libs/program_options/doc/tutorial.xml
new file mode 100644
index 0000000..d3e447a
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/doc/tutorial.xml
@@ -0,0 +1,353 @@
+<?xml version="1.0" standalone="yes"?>
+<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
+     "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd"
+[
+    <!ENTITY % entities SYSTEM "program_options.ent" >
+    %entities;
+]>
+
+<section id="program_options.tutorial">
+  <title>Tutorial</title>
+  
+  <para>In this section, we'll take a look at the most common usage scenarios
+  of the program_options library, starting with the simplest one. The examples
+  show only the interesting code parts, but the complete programs can be found
+  in the "BOOST_ROOT/libs/program_options/example" directory. Through all the
+  examples, we'll assume that the following namespace alias is in effect:
+<programlisting>namespace po = boost::program_options;</programlisting>
+  </para>
+
+  <section>
+    <title>Getting Started</title>
+
+  <para>The first example is the simplest possible: it only handles two
+    options. Here's the source code (the full program is in
+    "example/first.cpp"):
+
+<programlisting>
+// Declare the supported options.
+po::options_description desc("Allowed options");
+desc.add_options()
+    ("help", "produce help message")
+    ("compression", po::value<int>(), "set compression level")
+;
+
+po::variables_map vm;
+po::store(po::parse_command_line(ac, av, desc), vm);
+po::notify(vm);    
+
+if (vm.count("help")) {
+    cout << desc << "\n";
+    return 1;
+}
+
+if (vm.count("compression")) {
+    cout << "Compression level was set to " 
+ << vm["compression"].as<int>() << ".\n";
+} else {
+    cout << "Compression level was not set.\n";
+}
+</programlisting>
+  </para>
+
+  <para>We start by declaring all allowed options using the
+    &options_description; class. The <code>add_options</code> method of that
+    class returns a special proxy object that defines
+    <code>operator()</code>. Calls to that operator actually declare
+    options. The parameters are option name, information about value, and option
+    description. In this example, the first option has no value, and the second
+    one has a value of type <code>int</code>.
+  </para>
+  
+  <para>After that, an object of class <code>variables_map</code> is
+    declared. That class is intended to store values of options, and can store
+    values of arbitrary types. Next, the calls to <code>store</code>,
+    <code>parse_command_line</code> and <code>notify</code> functions cause
+    <code>vm</code> to contain all the options found on the command
+    line.</para>
+
+  <para>And now, finally, we can use the options as we like. The
+    <code>variables_map</code> class can be used just like
+    <code>std::map</code>, except that values stored there must be retrieved
+    with the <code>as</code> method shown above. (If the type specified in the
+    call to the <code>as</code> method is different from the actually stored
+    type, an exception is thrown.)
+  </para>
+
+  <para>It's now a good time to try compiling the code yourself, but if
+    you're not yet ready, here's an example session:
+<screen>
+$ <userinput>bin/gcc/debug/first</userinput>
+Compression level was not set.
+$ <userinput>bin/gcc/debug/first --help</userinput>
+Allowed options:
+  --help                 : produce help message
+  --compression arg      : set compression level
+$ <userinput>bin/gcc/debug/first --compression 10</userinput>
+Compression level was set to 10.
+    </screen>
+  </para>
+    
+  </section>
+
+  <section>
+    <title>Option Details</title>
+    
+  <para>An option value, surely, can have other types than <code>int</code>, and
+  can have other interesting properties, which we'll discuss right now. The
+  complete version of the code snipped below can be found in
+  <filename>example/options_description.cpp</filename>.</para>
+
+  <para>Imagine we're writing a compiler. It should take the optimization
+    level, a number of include paths, and a number of input files, and perform some
+    interesting work. Let's describe the options:
+    <programlisting>
+int opt;
+po::options_description desc("Allowed options");
+desc.add_options()
+    ("help", "produce help message")
+    ("optimization", po::value<int>(&opt)->default_value(10), 
+  "optimization level")
+    ("include-path,I", po::value< vector<string> >(), 
+  "include path")
+    ("input-file", po::value< vector<string> >(), "input file")
+;
+</programlisting>
+  </para>
+
+  <para>The <literal>"help"</literal> option should be familiar from 
+  the previous example. It's a good idea to have this option in all cases.
+  </para>
+
+  <para>The <literal>"optimization"</literal> option shows two new features. First, we specify
+    the address of the variable(<code>&opt</code>). After storing values, that
+    variable will have the value of the option. Second, we specify a default
+    value of 10, which will be used if no value is specified by the user.
+  </para>
+
+  <para>The <literal>"include-path"</literal> option is an example of the 
+  only case where the interface of the <code>options_description</code> 
+  class serves only one
+    source -- the command line. Users typically like to use short option names
+    for common options, and the "include-path,I" name specifies that short
+    option name is "I". So, both "--include-path" and "-I" can be used.
+  </para>
+
+  <para>Note also that the type of the <literal>"include-path"</literal>
+  option is <type>std::vector</type>. The library provides special 
+  support for vectors -- it will be possible to specify the option several 
+  times, and all specified values will be collected in one vector.  
+  </para>
+    
+  <para>The "input-file" option specifies the list of files to
+    process. That's okay for a start, but, of course, writing something like:
+    <screen>
+<userinput>compiler --input-file=a.cpp</userinput>
+    </screen>
+    is a little non-standard, compared with
+    <screen>
+<userinput>compiler a.cpp</userinput>
+    </screen>
+    We'll address this in a moment.
+  </para>
+
+  <para>
+    The command line tokens which have no option name, as above, are
+    called "positional options" by this library. They can be handled
+    too. With a little help from the user, the library can decide that "a.cpp"
+    really means the same as "--input-file=a.cpp". Here's the additional code
+    we need:
+    <programlisting>
+po::positional_options_description p;
+p.add("input-file", -1);
+
+po::variables_map vm;
+po::store(po::command_line_parser(ac, av).
+          options(desc).positional(p).run(), vm);
+po::notify(vm);
+    </programlisting>    
+  </para>
+
+  <para>
+    The first two lines say that all positional options should be translated
+    into "input-file" options. Also note that we use the
+    &command_line_parser; class to parse the command
+    line, not the &parse_command_line;
+    function. The latter is a convenient wrapper for simple cases, but now we
+    need to pass additional information.
+  </para>
+
+  <para>By now, all options are described and parsed. We'll save ourselves the
+      trouble of implementing the rest of the compiler logic and only print the
+      options:
+    <programlisting>
+if (vm.count("include-path"))
+{
+    cout << "Include paths are: " 
+         << vm["include-path"].as< vector<string> >() << "\n";
+}
+
+if (vm.count("input-file"))
+{
+    cout << "Input files are: " 
+         << vm["input-file"].as< vector<string> >() << "\n";
+}
+
+cout << "Optimization level is " << opt << "\n";                
+</programlisting>
+  </para>
+
+  <para>Here's an example session:
+    <screen>
+$ <userinput>bin/gcc/debug/options_description --help</userinput>
+Usage: options_description [options]
+Allowed options:
+  --help                 : produce help message
+  --optimization arg     : optimization level
+  -I [ --include-path ] arg : include path
+  --input-file arg       : input file
+$ <userinput>bin/gcc/debug/options_description</userinput>
+Optimization level is 10
+$ <userinput>bin/gcc/debug/options_description --optimization 4 -I foo a.cpp</userinput>
+Include paths are: foo
+Input files are: a.cpp
+Optimization level is 4
+</screen>
+  </para>
+
+  <para>
+    Oops, there's a slight problem. It's still possible to specify the
+    "--input-file" option, and usage message says so, which can be confusing
+    for the user. It would be nice to hide this information, but let's wait
+    for the next example.
+  </para>
+
+  </section>
+
+  <section>
+    <title>Multiple Sources</title>
+
+    <para>It's quite likely that specifying all options to our compiler on the
+    command line will annoy users. What if a user installs a new library and
+    wants to always pass an additional command line element? What if he has
+    made some choices which should be applied on every run? It's desirable to
+    create a config file with common settings which will be used together with
+    the command line.
+    </para>
+
+    <para>Of course, there will be a need to combine the values from command
+    line and config file. For example, the optimization level specified on the
+    command line should override the value from the config file. On the other
+    hand, include paths should be combined.
+    </para>
+
+    <para>Let's see the code now. The complete program is in
+      "examples/multiple_sources.cpp". The option definition has two interesting
+      details. First, we declare several instances of the
+      <code>options_description</code> class. The reason is that, in general,
+      not all options are alike. Some options, like "input-file" above, should
+      not be presented in an automatic help message. Some options make sense only
+      in the config file. Finally, it's nice to have some structure in the help message,
+      not just a long list of options. Let's declare several option groups:
+      <programlisting>
+// Declare a group of options that will be 
+// allowed only on command line
+po::options_description generic("Generic options");
+generic.add_options()
+    ("version,v", "print version string")
+    ("help", "produce help message")    
+    ;
+    
+// Declare a group of options that will be 
+// allowed both on command line and in
+// config file
+po::options_description config("Configuration");
+config.add_options()
+    ("optimization", po::value<int>(&opt)->default_value(10), 
+          "optimization level")
+    ("include-path,I", 
+         po::value< vector<string> >()->composing(), 
+         "include path")
+    ;
+
+// Hidden options, will be allowed both on command line and
+// in config file, but will not be shown to the user.
+po::options_description hidden("Hidden options");
+hidden.add_options()
+    ("input-file", po::value< vector<string> >(), "input file")
+    ;        
+</programlisting>
+      Note the call to the <code>composing</code> method in the declaration of the
+      "include-path" option. It tells the library that values from different sources
+      should be composed together, as we'll see shortly.
+    </para>
+
+    <para>    
+      The <code>add</code> method of the <code>options_description</code>
+      class can be used to further group the options:
+      <programlisting>
+po::options_description cmdline_options;
+cmdline_options.add(generic).add(config).add(hidden);
+
+po::options_description config_file_options;
+config_file_options.add(config).add(hidden);
+
+po::options_description visible("Allowed options");
+visible.add(generic).add(config);
+      </programlisting>
+    </para>
+
+    <para>The parsing and storing of values follows the usual pattern, except that
+      we additionally call <functionname>parse_config_file</functionname>, and
+      call the &store; function twice. But what
+      happens if the same value is specified both on the command line and in
+      config file? Usually, the value stored first is preferred. This is what
+      happens for the "--optimization" option. For "composing" options, like
+      "include-file", the values are merged.
+    </para>
+
+    <para>Here's an example session:
+<screen>
+$ <userinput>bin/gcc/debug/multiple_sources</userinput>
+Include paths are: /opt
+Optimization level is 1
+$ <userinput>bin/gcc/debug/multiple_sources --help</userinput>
+Allows options:
+
+Generic options:
+  -v [ --version ]       : print version string
+  --help                 : produce help message
+
+Configuration:
+  --optimization n       : optimization level
+  -I [ --include-path ] path : include path
+
+$ <userinput>bin/gcc/debug/multiple_sources --optimization=4 -I foo a.cpp b.cpp</userinput>
+Include paths are: foo /opt
+Input files are: a.cpp b.cpp
+Optimization level is 4
+</screen>
+      The first invocation uses values from the configuration file. The second
+      invocation also uses values from command line. As we see, the include
+      paths on the command line and in the configuration file are merged,
+      while optimization is taken from the command line.
+    </para>
+      
+  </section>
+
+  
+
+  
+
+  
+        
+</section>
+
+<!--
+     Local Variables:
+     mode: nxml
+     sgml-indent-data: t     
+     sgml-parent-document: ("program_options.xml" "section")
+     sgml-set-face: t
+     End:
+-->
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/program_options/example/Jamfile.v2 b/vendor/pdalboost/libs/program_options/example/Jamfile.v2
new file mode 100644
index 0000000..86769bd
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/example/Jamfile.v2
@@ -0,0 +1,14 @@
+
+project 
+    : requirements <library>../build//pdalboost_program_options
+      <hardcode-dll-paths>true
+      <link>static
+    ;
+
+exe first : first.cpp ;
+exe options_description : options_description.cpp ;
+exe multiple_sources : multiple_sources.cpp ;
+exe custom_syntax : custom_syntax.cpp ;
+
+exe real : real.cpp ;
+exe regex : regex.cpp /boost/regex//pdalboost_regex ;
diff --git a/vendor/pdalboost/libs/program_options/example/custom_syntax.cpp b/vendor/pdalboost/libs/program_options/example/custom_syntax.cpp
new file mode 100644
index 0000000..2a5e62c
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/example/custom_syntax.cpp
@@ -0,0 +1,63 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/** This example shows how to support custom options syntax.
+
+    It's possible to install 'custom_parser'. It will be invoked on all command 
+    line tokens and can return name/value pair, or nothing. If it returns 
+    nothing, usual processing will be done.
+*/
+
+
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/parsers.hpp>
+#include <boost/program_options/variables_map.hpp>
+
+using namespace pdalboost::program_options;
+
+#include <iostream>
+using namespace std;
+
+/*  This custom option parse function recognize gcc-style 
+    option "-fbar" / "-fno-bar".
+*/
+pair<string, string> reg_foo(const string& s)
+{
+    if (s.find("-f") == 0) {
+        if (s.substr(2, 3) == "no-")
+            return make_pair(s.substr(5), string("false"));
+        else
+            return make_pair(s.substr(2), string("true"));
+    } else {
+        return make_pair(string(), string());
+    }    
+}
+
+int main(int ac, char* av[])
+{
+    try {
+        options_description desc("Allowed options");
+        desc.add_options()
+        ("help", "produce a help message")
+        ("foo", value<string>(), "just an option")
+        ;
+
+        variables_map vm;
+        store(command_line_parser(ac, av).options(desc).extra_parser(reg_foo)
+              .run(), vm);
+
+        if (vm.count("help")) {
+            cout << desc;
+            cout << "\nIn addition -ffoo and -fno-foo syntax are recognized.\n";
+        }
+        if (vm.count("foo")) {
+            cout << "foo value with the value of " 
+                 << vm["foo"].as<string>() << "\n";
+        }
+    }
+    catch(exception& e) {
+        cout << e.what() << "\n";
+    }
+}
diff --git a/vendor/pdalboost/libs/program_options/example/first.cpp b/vendor/pdalboost/libs/program_options/example/first.cpp
new file mode 100644
index 0000000..bd865cc
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/example/first.cpp
@@ -0,0 +1,51 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/* The simplest usage of the library.
+ */
+
+#include <boost/program_options.hpp>
+namespace po = pdalboost::program_options;
+
+#include <iostream>
+#include <iterator>
+using namespace std;
+
+int main(int ac, char* av[])
+{
+    try {
+
+        po::options_description desc("Allowed options");
+        desc.add_options()
+            ("help", "produce help message")
+            ("compression", po::value<double>(), "set compression level")
+        ;
+
+        po::variables_map vm;        
+        po::store(po::parse_command_line(ac, av, desc), vm);
+        po::notify(vm);    
+
+        if (vm.count("help")) {
+            cout << desc << "\n";
+            return 0;
+        }
+
+        if (vm.count("compression")) {
+            cout << "Compression level was set to " 
+                 << vm["compression"].as<double>() << ".\n";
+        } else {
+            cout << "Compression level was not set.\n";
+        }
+    }
+    catch(exception& e) {
+        cerr << "error: " << e.what() << "\n";
+        return 1;
+    }
+    catch(...) {
+        cerr << "Exception of unknown type!\n";
+    }
+
+    return 0;
+}
diff --git a/vendor/pdalboost/libs/program_options/example/multiple_sources.cfg b/vendor/pdalboost/libs/program_options/example/multiple_sources.cfg
new file mode 100644
index 0000000..6966d00
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/example/multiple_sources.cfg
@@ -0,0 +1,5 @@
+#
+# Comment out this line to use hard-coded default value of 10
+# 
+optimization = 1
+include-path = /opt
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/program_options/example/multiple_sources.cpp b/vendor/pdalboost/libs/program_options/example/multiple_sources.cpp
new file mode 100644
index 0000000..b21a574
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/example/multiple_sources.cpp
@@ -0,0 +1,121 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/* Shows how to use both command line and config file. */
+
+#include <boost/program_options.hpp>
+namespace po = pdalboost::program_options;
+
+
+#include <iostream>
+#include <fstream>
+#include <iterator>
+using namespace std;
+
+// A helper function to simplify the main part.
+template<class T>
+ostream& operator<<(ostream& os, const vector<T>& v)
+{
+    copy(v.begin(), v.end(), ostream_iterator<T>(os, " ")); 
+    return os;
+}
+
+
+int main(int ac, char* av[])
+{
+    try {
+        int opt;
+        string config_file;
+    
+        // Declare a group of options that will be 
+        // allowed only on command line
+        po::options_description generic("Generic options");
+        generic.add_options()
+            ("version,v", "print version string")
+            ("help", "produce help message")
+            ("config,c", po::value<string>(&config_file)->default_value("multiple_sources.cfg"),
+                  "name of a file of a configuration.")
+            ;
+    
+        // Declare a group of options that will be 
+        // allowed both on command line and in
+        // config file
+        po::options_description config("Configuration");
+        config.add_options()
+            ("optimization", po::value<int>(&opt)->default_value(10), 
+                  "optimization level")
+            ("include-path,I", 
+                 po::value< vector<string> >()->composing(), 
+                 "include path")
+            ;
+
+        // Hidden options, will be allowed both on command line and
+        // in config file, but will not be shown to the user.
+        po::options_description hidden("Hidden options");
+        hidden.add_options()
+            ("input-file", po::value< vector<string> >(), "input file")
+            ;
+
+        
+        po::options_description cmdline_options;
+        cmdline_options.add(generic).add(config).add(hidden);
+
+        po::options_description config_file_options;
+        config_file_options.add(config).add(hidden);
+
+        po::options_description visible("Allowed options");
+        visible.add(generic).add(config);
+        
+        po::positional_options_description p;
+        p.add("input-file", -1);
+        
+        po::variables_map vm;
+        store(po::command_line_parser(ac, av).
+              options(cmdline_options).positional(p).run(), vm);
+        notify(vm);
+        
+        ifstream ifs(config_file.c_str());
+        if (!ifs)
+        {
+            cout << "can not open config file: " << config_file << "\n";
+            return 0;
+        }
+        else
+        {
+            store(parse_config_file(ifs, config_file_options), vm);
+            notify(vm);
+        }
+    
+        if (vm.count("help")) {
+            cout << visible << "\n";
+            return 0;
+        }
+
+        if (vm.count("version")) {
+            cout << "Multiple sources example, version 1.0\n";
+            return 0;
+        }
+
+        if (vm.count("include-path"))
+        {
+            cout << "Include paths are: " 
+                 << vm["include-path"].as< vector<string> >() << "\n";
+        }
+
+        if (vm.count("input-file"))
+        {
+            cout << "Input files are: " 
+                 << vm["input-file"].as< vector<string> >() << "\n";
+        }
+
+        cout << "Optimization level is " << opt << "\n";                
+    }
+    catch(exception& e)
+    {
+        cout << e.what() << "\n";
+        return 1;
+    }    
+    return 0;
+}
diff --git a/vendor/pdalboost/libs/program_options/example/option_groups.cpp b/vendor/pdalboost/libs/program_options/example/option_groups.cpp
new file mode 100644
index 0000000..edfd4fb
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/example/option_groups.cpp
@@ -0,0 +1,97 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/** This example shows how to handle options groups.
+
+    For a test, run:
+
+    option_groups --help
+    option_groups --num-threads 10
+    option_groups --help-module backend
+
+    The first invocation would show to option groups, and will not show the
+    '--num-threads' options. The second invocation will still get the value of
+    the hidden '--num-threads' option. Finally, the third invocation will show
+    the options for the 'backend' module, including the '--num-threads' option.
+
+*/
+
+
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/parsers.hpp>
+#include <boost/program_options/variables_map.hpp>
+#include <boost/tokenizer.hpp>
+#include <boost/token_functions.hpp>
+using namespace pdalboost;
+using namespace pdalboost::program_options;
+
+#include <iostream>
+#include <fstream>
+#include <exception>
+using namespace std;
+
+int main(int ac, char* av[])
+{
+    try {
+        // Declare three groups of options.
+        options_description general("General options");
+        general.add_options()
+            ("help", "produce a help message")
+            ("help-module", value<string>(),
+                "produce a help for a given module")
+            ("version", "output the version number")
+            ;
+
+        options_description gui("GUI options");
+        gui.add_options()
+            ("display", value<string>(), "display to use")
+            ;
+
+        options_description backend("Backend options");
+        backend.add_options()
+            ("num-threads", value<int>(), "the initial number of threads")
+            ;
+            
+        // Declare an options description instance which will include
+        // all the options
+        options_description all("Allowed options");
+        all.add(general).add(gui).add(backend);
+
+        // Declare an options description instance which will be shown
+        // to the user
+        options_description visible("Allowed options");
+        visible.add(general).add(gui);
+           
+
+        variables_map vm;
+        store(parse_command_line(ac, av, all), vm);
+
+        if (vm.count("help")) 
+        {
+            cout << visible;
+            return 0;
+        }
+        if (vm.count("help-module")) {
+            const string& s = vm["help-module"].as<string>();
+            if (s == "gui") {
+                cout << gui;
+            } else if (s == "backend") {
+                cout << backend;
+            } else {
+                cout << "Unknown module '" 
+                     << s << "' in the --help-module option\n";
+                return 1;
+            }
+            return 0;
+        }
+        if (vm.count("num-threads")) {
+            cout << "The 'num-threads' options was set to "
+                 << vm["num-threads"].as<int>() << "\n";            
+        }                           
+    }
+    catch(std::exception& e) {
+        cout << e.what() << "\n";
+    }
+}
diff --git a/vendor/pdalboost/libs/program_options/example/options_description.cpp b/vendor/pdalboost/libs/program_options/example/options_description.cpp
new file mode 100644
index 0000000..00098f7
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/example/options_description.cpp
@@ -0,0 +1,86 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/program_options.hpp>
+
+using namespace pdalboost;
+namespace po = pdalboost::program_options;
+
+#include <iostream>
+#include <algorithm>
+#include <iterator>
+using namespace std;
+
+
+// A helper function to simplify the main part.
+template<class T>
+ostream& operator<<(ostream& os, const vector<T>& v)
+{
+    copy(v.begin(), v.end(), ostream_iterator<T>(os, " "));
+    return os;
+}
+
+int main(int ac, char* av[])
+{
+    try {
+        int opt;
+        int portnum;
+        po::options_description desc("Allowed options");
+        desc.add_options()
+            ("help", "produce help message")
+            ("optimization", po::value<int>(&opt)->default_value(10),
+                  "optimization level")
+            ("verbose,v", po::value<int>()->implicit_value(1),
+                  "enable verbosity (optionally specify level)")
+            ("listen,l", po::value<int>(&portnum)->implicit_value(1001)
+                  ->default_value(0,"no"),
+                  "listen on a port.")
+            ("include-path,I", po::value< vector<string> >(),
+                  "include path")
+            ("input-file", po::value< vector<string> >(), "input file")
+        ;
+
+        po::positional_options_description p;
+        p.add("input-file", -1);
+
+        po::variables_map vm;
+        po::store(po::command_line_parser(ac, av).
+                  options(desc).positional(p).run(), vm);
+        po::notify(vm);
+
+        if (vm.count("help")) {
+            cout << "Usage: options_description [options]\n";
+            cout << desc;
+            return 0;
+        }
+
+        if (vm.count("include-path"))
+        {
+            cout << "Include paths are: "
+                 << vm["include-path"].as< vector<string> >() << "\n";
+        }
+
+        if (vm.count("input-file"))
+        {
+            cout << "Input files are: "
+                 << vm["input-file"].as< vector<string> >() << "\n";
+        }
+
+        if (vm.count("verbose")) {
+            cout << "Verbosity enabled.  Level is " << vm["verbose"].as<int>()
+                 << "\n";
+        }
+
+        cout << "Optimization level is " << opt << "\n";
+
+        cout << "Listen port is " << portnum << "\n";
+    }
+    catch(std::exception& e)
+    {
+        cout << e.what() << "\n";
+        return 1;
+    }
+    return 0;
+}
diff --git a/vendor/pdalboost/libs/program_options/example/real.cpp b/vendor/pdalboost/libs/program_options/example/real.cpp
new file mode 100644
index 0000000..7fe2b48
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/example/real.cpp
@@ -0,0 +1,96 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <boost/program_options.hpp>
+using namespace pdalboost::program_options;
+
+#include <iostream>
+using namespace std;
+
+/* Auxiliary functions for checking input for validity. */
+
+/* Function used to check that 'opt1' and 'opt2' are not specified
+   at the same time. */
+void conflicting_options(const variables_map& vm, 
+                         const char* opt1, const char* opt2)
+{
+    if (vm.count(opt1) && !vm[opt1].defaulted() 
+        && vm.count(opt2) && !vm[opt2].defaulted())
+        throw logic_error(string("Conflicting options '") 
+                          + opt1 + "' and '" + opt2 + "'.");
+}
+
+/* Function used to check that of 'for_what' is specified, then
+   'required_option' is specified too. */
+void option_dependency(const variables_map& vm,
+                        const char* for_what, const char* required_option)
+{
+    if (vm.count(for_what) && !vm[for_what].defaulted())
+        if (vm.count(required_option) == 0 || vm[required_option].defaulted())
+            throw logic_error(string("Option '") + for_what 
+                              + "' requires option '" + required_option + "'.");
+}
+
+int main(int argc, char* argv[])
+{
+    try {
+        string ofile;
+        string macrofile, libmakfile;
+        bool t_given = false;
+        bool b_given = false;
+        string mainpackage;
+        string depends = "deps_file";
+        string sources = "src_file";
+        string root = ".";
+
+        options_description desc("Allowed options");
+        desc.add_options()
+        // First parameter describes option name/short name
+        // The second is parameter to option
+        // The third is description
+        ("help,h", "print usage message")
+        ("output,o", value(&ofile), "pathname for output")
+        ("macrofile,m", value(&macrofile), "full pathname of macro.h")
+        ("two,t", bool_switch(&t_given), "preprocess both header and body")
+        ("body,b", bool_switch(&b_given), "preprocess body in the header context")
+        ("libmakfile,l", value(&libmakfile), 
+             "write include makefile for library")
+        ("mainpackage,p", value(&mainpackage), 
+             "output dependency information")
+        ("depends,d", value(&depends), 
+         "write dependencies to <pathname>")
+        ("sources,s", value(&sources), "write source package list to <pathname>")
+        ("root,r", value(&root), "treat <dirname> as project root directory")
+        ;
+    
+        variables_map vm;
+        store(parse_command_line(argc, argv, desc), vm);
+
+        if (vm.count("help")) {  
+            cout << desc << "\n";
+            return 0;
+        }
+
+        conflicting_options(vm, "output", "two");
+        conflicting_options(vm, "output", "body");
+        conflicting_options(vm, "output", "mainpackage");
+        conflicting_options(vm, "two", "mainpackage");
+        conflicting_options(vm, "body", "mainpackage");
+
+        conflicting_options(vm, "two", "body");
+        conflicting_options(vm, "libmakfile", "mainpackage");
+        conflicting_options(vm, "libmakfile", "mainpackage");
+
+        option_dependency(vm, "depends", "mainpackage");
+        option_dependency(vm, "sources", "mainpackage");
+        option_dependency(vm, "root", "mainpackage");
+
+        cout << "two = " << vm["two"].as<bool>() << "\n";
+    }
+    catch(exception& e) {
+        cerr << e.what() << "\n";
+    }
+}
diff --git a/vendor/pdalboost/libs/program_options/example/regex.cpp b/vendor/pdalboost/libs/program_options/example/regex.cpp
new file mode 100644
index 0000000..13fd456
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/example/regex.cpp
@@ -0,0 +1,101 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// This example shows how a user-defined class can be parsed using
+// specific mechanism -- not the iostream operations used by default.
+//
+// A new class 'magic_number' is defined and the 'validate' method is overloaded
+// to validate the values of that class using Boost.Regex.
+// To test, run
+//   
+//    regex -m 123-456
+//    regex -m 123-4567
+// 
+// The first invocation should output:
+//
+//   The magic is "456"
+//
+// and the second invocation should issue an error message.
+
+#include <boost/program_options.hpp>
+#include <boost/regex.hpp>
+
+using namespace pdalboost;
+using namespace pdalboost::program_options;
+
+#include <iostream>
+using namespace std;
+
+/* Define a completely non-sensical class. */
+struct magic_number {
+public:
+    magic_number(int n) : n(n) {}
+    int n;
+};
+
+/* Overload the 'validate' function for the user-defined class.
+   It makes sure that value is of form XXX-XXX 
+   where X are digits and converts the second group to an integer.
+   This has no practical meaning, meant only to show how
+   regex can be used to validate values.
+*/
+void validate(pdalboost::any& v, 
+              const std::vector<std::string>& values,
+              magic_number*, int)
+{
+    static regex r("\\d\\d\\d-(\\d\\d\\d)");
+
+    using namespace pdalboost::program_options;
+
+    // Make sure no previous assignment to 'a' was made.
+    validators::check_first_occurrence(v);
+    // Extract the first string from 'values'. If there is more than
+    // one string, it's an error, and exception will be thrown.
+    const string& s = validators::get_single_string(values);
+
+    // Do regex match and convert the interesting part to 
+    // int.
+    smatch match;
+    if (regex_match(s, match, r)) {
+        v = any(magic_number(lexical_cast<int>(match[1])));
+    } else {
+        throw validation_error(validation_error::invalid_option_value);
+    }        
+}
+
+
+int main(int ac, char* av[])
+{
+    try {
+        options_description desc("Allowed options");
+        desc.add_options()
+            ("help", "produce a help screen")
+            ("version,v", "print the version number")
+            ("magic,m", value<magic_number>(), 
+                 "magic value (in NNN-NNN format)")
+            ;
+        
+        variables_map vm;
+        store(parse_command_line(ac, av, desc), vm);
+   
+        if (vm.count("help")) {
+            cout << "Usage: regex [options]\n";
+            cout << desc;
+            return 0;
+        }
+        if (vm.count("version")) {
+            cout << "Version 1.\n";
+            return 0;
+        }
+        if (vm.count("magic")) {
+            cout << "The magic is \"" 
+                 << vm["magic"].as<magic_number>().n << "\"\n";
+        }
+    }
+    catch(std::exception& e)
+    {
+        cout << e.what() << "\n";
+    }    
+}
diff --git a/vendor/pdalboost/libs/program_options/example/response_file.cpp b/vendor/pdalboost/libs/program_options/example/response_file.cpp
new file mode 100644
index 0000000..8b40c69
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/example/response_file.cpp
@@ -0,0 +1,94 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+/** This example shows how to handle response file.
+
+    For a test, build and run:
+       response_file -I foo @response_file.rsp
+
+    The expected output is:
+      Include paths: foo bar biz
+
+    Thanks to Hartmut Kaiser who raised the issue of response files
+    and discussed the possible approach.
+*/
+
+
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/parsers.hpp>
+#include <boost/program_options/variables_map.hpp>
+#include <boost/tokenizer.hpp>
+#include <boost/token_functions.hpp>
+using namespace pdalboost;
+using namespace pdalboost::program_options;
+
+#include <iostream>
+#include <fstream>
+using namespace std;
+
+// Additional command line parser which interprets '@something' as a
+// option "config-file" with the value "something"
+pair<string, string> at_option_parser(string const&s)
+{
+    if ('@' == s[0])
+        return std::make_pair(string("response-file"), s.substr(1));
+    else
+        return pair<string, string>();
+}
+
+int main(int ac, char* av[])
+{
+    try {
+        options_description desc("Allowed options");
+        desc.add_options()
+            ("help", "produce a help message")
+            ("include-path,I", value< vector<string> >()->composing(), 
+                 "include path")
+            ("magic", value<int>(), "magic value")
+            ("response-file", value<string>(), 
+                 "can be specified with '@name', too")
+        ;
+
+        variables_map vm;
+        store(command_line_parser(ac, av).options(desc)
+              .extra_parser(at_option_parser).run(), vm);
+
+        if (vm.count("help")) {
+            cout << desc;            
+        }
+        if (vm.count("response-file")) {
+            // Load the file and tokenize it
+            ifstream ifs(vm["response-file"].as<string>().c_str());
+            if (!ifs) {
+                cout << "Could not open the response file\n";
+                return 1;
+            }
+            // Read the whole file into a string
+            stringstream ss;
+            ss << ifs.rdbuf();
+            // Split the file content
+            char_separator<char> sep(" \n\r");
+            string sstr = ss.str();
+            tokenizer<char_separator<char> > tok(sstr, sep);
+            vector<string> args;
+            copy(tok.begin(), tok.end(), back_inserter(args));
+            // Parse the file and store the options
+            store(command_line_parser(args).options(desc).run(), vm);            
+        }
+
+        if (vm.count("include-path")) {
+            const vector<string>& s = vm["include-path"].as<vector< string> >();
+            cout << "Include paths: ";
+            copy(s.begin(), s.end(), ostream_iterator<string>(cout, " "));
+            cout << "\n";
+        }        
+        if (vm.count("magic")) {
+            cout << "Magic value: " << vm["magic"].as<int>() << "\n";
+        }
+    }
+    catch (std::exception& e) {
+        cout << e.what() << "\n";
+    }
+}
diff --git a/vendor/pdalboost/libs/program_options/example/response_file.rsp b/vendor/pdalboost/libs/program_options/example/response_file.rsp
new file mode 100644
index 0000000..d7c6777
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/example/response_file.rsp
@@ -0,0 +1,3 @@
+-I bar
+-I biz
+--magic 10
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/program_options/index.html b/vendor/pdalboost/libs/program_options/index.html
new file mode 100644
index 0000000..66cb529
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/index.html
@@ -0,0 +1,14 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0; URL=../../doc/html/program_options.html">
+</head>
+<body>
+Automatic redirection failed, please go to
+<a href="../../doc/html/program_options.html">../../doc/html/program_options.html</a> 
+ <hr>
+<p>� Copyright Beman Dawes, 2001</p>
+<p>Distributed under the Boost Software License, Version 1.0. (See accompanying 
+file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy 
+at <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/program_options/meta/libraries.json b/vendor/pdalboost/libs/program_options/meta/libraries.json
new file mode 100644
index 0000000..5fbf312
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/meta/libraries.json
@@ -0,0 +1,15 @@
+{
+    "key": "program_options",
+    "name": "Program Options",
+    "authors": [
+        "Vladimir Prus"
+    ],
+    "description": "The program_options library allows program developers to obtain program options, that is (name, value) pairs from the user, via conventional methods such as command line and config file.",
+    "category": [
+        "IO",
+        "Miscellaneous"
+    ],
+    "maintainers": [
+        "Vladimir Prus <vladimir.prus -at- gmail.com>"
+    ]
+}
diff --git a/vendor/pdalboost/libs/program_options/src/cmdline.cpp b/vendor/pdalboost/libs/program_options/src/cmdline.cpp
new file mode 100644
index 0000000..ebb42b7
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/src/cmdline.cpp
@@ -0,0 +1,719 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_PROGRAM_OPTIONS_SOURCE
+#include <boost/program_options/config.hpp>
+
+#include <boost/config.hpp>
+
+#include <boost/program_options/detail/cmdline.hpp>
+#include <boost/program_options/errors.hpp>
+#include <boost/program_options/value_semantic.hpp>
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/positional_options.hpp>
+#include <boost/throw_exception.hpp>
+
+#include <boost/bind.hpp>
+
+#include <string>
+#include <utility>
+#include <vector>
+#include <cassert>
+#include <cstring>
+#include <cctype>
+#include <climits>
+
+#include <cstdio>
+
+#include <iostream>
+
+namespace pdalboost { namespace program_options {
+
+    using namespace std;
+    using namespace pdalboost::program_options::command_line_style;
+    
+    
+    string 
+    invalid_syntax::get_template(kind_t kind)
+    {
+        // Initially, store the message in 'const char*' variable,
+        // to avoid conversion to string in all cases.
+        const char* msg;
+        switch(kind)
+        {
+        case empty_adjacent_parameter:
+            msg = "the argument for option '%canonical_option%' should follow immediately after the equal sign";
+            break;
+        case missing_parameter:
+            msg = "the required argument for option '%canonical_option%' is missing";
+            break;
+        case unrecognized_line:
+            msg = "the options configuration file contains an invalid line '%invalid_line%'";
+            break;
+        // none of the following are currently used:
+        case long_not_allowed:
+            msg = "the unabbreviated option '%canonical_option%' is not valid";
+            break;
+        case long_adjacent_not_allowed:
+            msg = "the unabbreviated option '%canonical_option%' does not take any arguments";
+            break;
+        case short_adjacent_not_allowed:
+            msg = "the abbreviated option '%canonical_option%' does not take any arguments";
+            break;
+        case extra_parameter:
+            msg = "option '%canonical_option%' does not take any arguments";
+            break;
+        default:
+            msg = "unknown command line syntax error for '%s'";
+        }
+        return msg;
+    }
+
+
+}}
+
+
+namespace pdalboost { namespace program_options { namespace detail {
+
+    // vc6 needs this, but borland chokes when this is added.
+#if BOOST_WORKAROUND(_MSC_VER, < 1300)
+    using namespace std;
+    using namespace program_options;
+#endif
+
+
+    cmdline::cmdline(const vector<string>& args)
+    {
+        init(args);
+    }
+
+    cmdline::cmdline(int argc, const char*const * argv)
+    {
+#if defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)
+        vector<string> args;
+        copy(argv+1, argv+argc+!argc, inserter(args, args.end()));
+        init(args);
+#else
+        init(vector<string>(argv+1, argv+argc+!argc));
+#endif
+    }
+
+    void
+    cmdline::init(const vector<string>& args)
+    {
+        this->args = args;        
+        m_style = command_line_style::default_style;
+        m_desc = 0;
+        m_positional = 0;
+        m_allow_unregistered = false;
+    }
+
+    void 
+    cmdline::style(int style)
+    {
+        if (style == 0) 
+            style = default_style;        
+
+        check_style(style);
+        this->m_style = style_t(style);
+    }
+    
+    void 
+    cmdline::allow_unregistered()
+    {
+        this->m_allow_unregistered = true;
+    }
+
+    void 
+    cmdline::check_style(int style) const
+    {
+        bool allow_some_long = 
+            (style & allow_long) || (style & allow_long_disguise);
+
+        const char* error = 0;
+        if (allow_some_long && 
+            !(style & long_allow_adjacent) && !(style & long_allow_next))
+            error = "pdalboost::program_options misconfiguration: "
+                    "choose one or other of 'command_line_style::long_allow_next' "
+                    "(whitespace separated arguments) or "
+                    "'command_line_style::long_allow_adjacent' ('=' separated arguments) for "
+                    "long options.";
+
+        if (!error && (style & allow_short) &&
+            !(style & short_allow_adjacent) && !(style & short_allow_next))
+            error = "pdalboost::program_options misconfiguration: "
+                    "choose one or other of 'command_line_style::short_allow_next' "
+                    "(whitespace separated arguments) or "
+                    "'command_line_style::short_allow_adjacent' ('=' separated arguments) for "
+                    "short options.";
+
+        if (!error && (style & allow_short) &&
+            !(style & allow_dash_for_short) && !(style & allow_slash_for_short))
+            error = "pdalboost::program_options misconfiguration: "
+                    "choose one or other of 'command_line_style::allow_slash_for_short' "
+                    "(slashes) or 'command_line_style::allow_dash_for_short' (dashes) for "
+                    "short options.";
+
+        if (error)
+            pdalboost::throw_exception(invalid_command_line_style(error));
+
+        // Need to check that if guessing and long disguise are enabled
+        // -f will mean the same as -foo
+    }
+    
+    bool 
+    cmdline::is_style_active(style_t style) const
+    {
+        return ((m_style & style) ? true : false);
+    }    
+
+    void 
+    cmdline::set_options_description(const options_description& desc)
+    {
+        m_desc = &desc;
+    }
+
+    void 
+    cmdline::set_positional_options(
+        const positional_options_description& positional)
+    {
+        m_positional = &positional;
+    }
+
+    int
+    cmdline::get_canonical_option_prefix()
+    {
+        if (m_style & allow_long)
+            return allow_long;
+
+        if (m_style & allow_long_disguise)
+            return allow_long_disguise;
+
+        if ((m_style & allow_short) && (m_style & allow_dash_for_short))
+            return allow_dash_for_short;
+
+        if ((m_style & allow_short) && (m_style & allow_slash_for_short))
+            return allow_slash_for_short;
+
+        return 0;
+    }
+
+    vector<option>
+    cmdline::run()
+    {
+        // The parsing is done by having a set of 'style parsers'
+        // and trying then in order. Each parser is passed a vector
+        // of unparsed tokens and can consume some of them (by
+        // removing elements on front) and return a vector of options.
+        //
+        // We try each style parser in turn, untill some input
+        // is consumed. The returned vector of option may contain the
+        // result of just syntactic parsing of token, say --foo will
+        // be parsed as option with name 'foo', and the style parser
+        // is not required to care if that option is defined, and how
+        // many tokens the value may take.
+        // So, after vector is returned, we validate them.
+        assert(m_desc);
+
+        vector<style_parser> style_parsers;      
+
+        if (m_style_parser)
+            style_parsers.push_back(m_style_parser);
+
+        if (m_additional_parser)
+            style_parsers.push_back(
+                pdalboost::bind(&cmdline::handle_additional_parser, this, _1));
+
+        if (m_style & allow_long)
+            style_parsers.push_back(
+                pdalboost::bind(&cmdline::parse_long_option, this, _1));
+
+        if ((m_style & allow_long_disguise))
+            style_parsers.push_back(
+                pdalboost::bind(&cmdline::parse_disguised_long_option, this, _1));
+
+        if ((m_style & allow_short) && (m_style & allow_dash_for_short))
+            style_parsers.push_back(
+                pdalboost::bind(&cmdline::parse_short_option, this, _1));
+
+        if ((m_style & allow_short) && (m_style & allow_slash_for_short))
+            style_parsers.push_back(pdalboost::bind(&cmdline::parse_dos_option, this, _1));
+
+        style_parsers.push_back(pdalboost::bind(&cmdline::parse_terminator, this, _1));
+
+        vector<option> result;
+        while(!args.empty())
+        {
+            bool ok = false;
+            for(unsigned i = 0; i < style_parsers.size(); ++i)
+            {
+                unsigned current_size = static_cast<unsigned>(args.size());
+                vector<option> next = style_parsers[i](args);
+
+                // Check that option names
+                // are valid, and that all values are in place.
+                if (!next.empty())
+                {
+                    vector<string> e;
+                    for(unsigned k = 0; k < next.size()-1; ++k) {
+                        finish_option(next[k], e, style_parsers);
+                    }
+                    // For the last option, pass the unparsed tokens
+                    // so that they can be added to next.back()'s values
+                    // if appropriate.
+                    finish_option(next.back(), args, style_parsers);
+                    for (unsigned j = 0; j < next.size(); ++j)
+                        result.push_back(next[j]);                    
+                }
+                                
+                if (args.size() != current_size) {
+                    ok = true;
+                    break;                
+                } 
+            }
+            
+            if (!ok) {
+                option opt;
+                opt.value.push_back(args[0]);
+                opt.original_tokens.push_back(args[0]);
+                result.push_back(opt);
+                args.erase(args.begin());
+            }
+        }
+
+        /* If an key option is followed by a positional option,
+           can can consume more tokens (e.g. it's multitoken option),
+           give those tokens to it.  */
+        vector<option> result2;
+        for (unsigned i = 0; i < result.size(); ++i)
+        {
+            result2.push_back(result[i]);
+            option& opt = result2.back();
+
+            if (opt.string_key.empty())
+                continue;
+
+            const option_description* xd;
+            try
+            {
+                xd = m_desc->find_nothrow(opt.string_key, 
+                                            is_style_active(allow_guessing),
+                                            is_style_active(long_case_insensitive),
+                                            is_style_active(short_case_insensitive));
+            } 
+            catch(error_with_option_name& e)
+            {
+                // add context and rethrow
+                e.add_context(opt.string_key, opt.original_tokens[0], get_canonical_option_prefix());
+                throw;
+            }
+
+            if (!xd)
+                continue;
+
+            if (xd->semantic()->adjacent_tokens_only())
+                continue;
+
+            unsigned min_tokens = xd->semantic()->min_tokens();
+            unsigned max_tokens = xd->semantic()->max_tokens();
+            if (min_tokens < max_tokens && opt.value.size() < max_tokens)
+            {
+                // This option may grab some more tokens.
+                // We only allow to grab tokens that are not already
+                // recognized as key options.
+
+                int can_take_more = max_tokens - static_cast<int>(opt.value.size());
+                unsigned j = i+1;
+                for (; can_take_more && j < result.size(); --can_take_more, ++j)
+                {
+                    option& opt2 = result[j];
+                    if (!opt2.string_key.empty())
+                        break;
+
+                    if (opt2.position_key == INT_MAX)
+                    {
+                        // We use INT_MAX to mark positional options that
+                        // were found after the '--' terminator and therefore
+                        // should stay positional forever.
+                        break;
+                    }
+
+                    assert(opt2.value.size() == 1);
+                    
+                    opt.value.push_back(opt2.value[0]);
+
+                    assert(opt2.original_tokens.size() == 1);
+
+                    opt.original_tokens.push_back(opt2.original_tokens[0]);
+                }
+                i = j-1;
+            }
+        }
+        result.swap(result2);
+        
+
+        // Assign position keys to positional options.
+        int position_key = 0;
+        for(unsigned i = 0; i < result.size(); ++i) {
+            if (result[i].string_key.empty())
+                result[i].position_key = position_key++;
+        }
+
+        if (m_positional)
+        {
+            unsigned position = 0;
+            for (unsigned i = 0; i < result.size(); ++i) {
+                option& opt = result[i];
+                if (opt.position_key != -1) {
+                    if (position >= m_positional->max_total_count())
+                    {
+                        pdalboost::throw_exception(too_many_positional_options_error());
+                    }
+                    opt.string_key = m_positional->name_for_position(position);
+                    ++position;
+                }
+            }
+        }
+        
+        // set case sensitive flag
+        for (unsigned i = 0; i < result.size(); ++i) {
+            if (result[i].string_key.size() > 2 ||
+                        (result[i].string_key.size() > 1 && result[i].string_key[0] != '-'))
+            {
+                // it is a long option
+                result[i].case_insensitive = is_style_active(long_case_insensitive);
+            }
+            else
+            {
+                // it is a short option
+                result[i].case_insensitive = is_style_active(short_case_insensitive);
+            }
+        }
+
+        return result;
+    }
+
+    void
+    cmdline::finish_option(option& opt,
+                           vector<string>& other_tokens,
+                           const vector<style_parser>& style_parsers)
+    {          
+        if (opt.string_key.empty())
+            return;
+
+        // 
+        // Be defensive:
+        // will have no original token if option created by handle_additional_parser()
+        std::string original_token_for_exceptions = opt.string_key;
+        if (opt.original_tokens.size())
+            original_token_for_exceptions = opt.original_tokens[0];
+
+        try
+        {
+            // First check that the option is valid, and get its description.
+            const option_description* xd = m_desc->find_nothrow(opt.string_key, 
+                    is_style_active(allow_guessing),
+                    is_style_active(long_case_insensitive),
+                    is_style_active(short_case_insensitive));
+
+            if (!xd)
+            {
+                if (m_allow_unregistered) {
+                    opt.unregistered = true;
+                    return;
+                } else {
+                    pdalboost::throw_exception(unknown_option());
+                }                
+            }
+            const option_description& d = *xd;
+
+            // Canonize the name
+            opt.string_key = d.key(opt.string_key);
+
+            // We check that the min/max number of tokens for the option
+            // agrees with the number of tokens we have. The 'adjacent_value'
+            // (the value in --foo=1) counts as a separate token, and if present
+            // must be consumed. The following tokens on the command line may be
+            // left unconsumed.
+
+            // We don't check if those tokens look like option, or not!
+
+            unsigned min_tokens = d.semantic()->min_tokens();
+            unsigned max_tokens = d.semantic()->max_tokens();
+            
+            unsigned present_tokens = static_cast<unsigned>(opt.value.size() + other_tokens.size());
+            
+            if (present_tokens >= min_tokens)
+            {
+                if (!opt.value.empty() && max_tokens == 0) 
+                {
+                    pdalboost::throw_exception(
+                        invalid_command_line_syntax(invalid_command_line_syntax::extra_parameter));
+                }
+                
+                // If an option wants, at minimum, N tokens, we grab them there,
+                // when adding these tokens as values to current option we check
+                // if they look like options
+                if (opt.value.size() <= min_tokens) 
+                {
+                    min_tokens -= static_cast<unsigned>(opt.value.size());
+                }
+                else
+                {
+                    min_tokens = 0;
+                }
+
+                // Everything's OK, move the values to the result.            
+                for(;!other_tokens.empty() && min_tokens--; ) 
+                {
+                    // check if extra parameter looks like a known option
+                    // we use style parsers to check if it is syntactically an option, 
+                    // additionally we check if an option_description exists
+                    vector<option> followed_option;  
+                    vector<string> next_token(1, other_tokens[0]);      
+                    for (unsigned i = 0; followed_option.empty() && i < style_parsers.size(); ++i)
+                    {
+                        followed_option = style_parsers[i](next_token);
+                    }
+                    if (!followed_option.empty()) 
+                    {
+                        original_token_for_exceptions = other_tokens[0];
+                        const option_description* od = m_desc->find_nothrow(other_tokens[0], 
+                                  is_style_active(allow_guessing),
+                                  is_style_active(long_case_insensitive),
+                                  is_style_active(short_case_insensitive));
+                        if (od) 
+                            pdalboost::throw_exception(
+                                invalid_command_line_syntax(invalid_command_line_syntax::missing_parameter));
+                    }
+                    opt.value.push_back(other_tokens[0]);
+                    opt.original_tokens.push_back(other_tokens[0]);
+                    other_tokens.erase(other_tokens.begin());
+                }
+            }
+            else
+            {
+                pdalboost::throw_exception(
+                            invalid_command_line_syntax(invalid_command_line_syntax::missing_parameter)); 
+
+            }
+        } 
+        // use only original token for unknown_option / ambiguous_option since by definition
+        //    they are unrecognised / unparsable
+        catch(error_with_option_name& e)
+        {
+            // add context and rethrow
+            e.add_context(opt.string_key, original_token_for_exceptions, get_canonical_option_prefix());
+            throw;
+        }
+
+    }
+
+    vector<option> 
+    cmdline::parse_long_option(vector<string>& args)
+    {
+        vector<option> result;
+        const string& tok = args[0];
+        if (tok.size() >= 3 && tok[0] == '-' && tok[1] == '-')
+        {   
+            string name, adjacent;
+
+            string::size_type p = tok.find('=');
+            if (p != tok.npos)
+            {
+                name = tok.substr(2, p-2);
+                adjacent = tok.substr(p+1);
+                if (adjacent.empty())
+                    pdalboost::throw_exception( invalid_command_line_syntax(
+                                                      invalid_command_line_syntax::empty_adjacent_parameter, 
+                                                      name,
+                                                      name,
+                                                      get_canonical_option_prefix()) );
+            }
+            else
+            {
+                name = tok.substr(2);
+            }
+            option opt;
+            opt.string_key = name;
+            if (!adjacent.empty())
+                opt.value.push_back(adjacent);
+            opt.original_tokens.push_back(tok);
+            result.push_back(opt);
+            args.erase(args.begin());
+        }
+        return result;
+    }
+
+
+    vector<option> 
+    cmdline::parse_short_option(vector<string>& args)
+    {
+        const string& tok = args[0];
+        if (tok.size() >= 2 && tok[0] == '-' && tok[1] != '-')
+        {   
+            vector<option> result;
+
+            string name = tok.substr(0,2);
+            string adjacent = tok.substr(2);
+
+            // Short options can be 'grouped', so that
+            // "-d -a" becomes "-da". Loop, processing one
+            // option at a time. We exit the loop when either
+            // we've processed all the token, or when the remainder
+            // of token is considered to be value, not further grouped
+            // option.
+            for(;;) {
+                const option_description* d;
+                try
+                {
+                     
+                    d = m_desc->find_nothrow(name, false, false,
+                                                is_style_active(short_case_insensitive));
+                } 
+                catch(error_with_option_name& e)
+                {
+                    // add context and rethrow
+                    e.add_context(name, name, get_canonical_option_prefix());
+                    throw;
+                }
+
+
+                // FIXME: check for 'allow_sticky'.
+                if (d && (m_style & allow_sticky) &&
+                    d->semantic()->max_tokens() == 0 && !adjacent.empty()) {
+                    // 'adjacent' is in fact further option.
+                    option opt;
+                    opt.string_key = name;
+                    result.push_back(opt);
+
+                    if (adjacent.empty())
+                    {
+                        args.erase(args.begin());
+                        break;
+                    }
+
+                    name = string("-") + adjacent[0];
+                    adjacent.erase(adjacent.begin());
+                } else {
+                    
+                    option opt;
+                    opt.string_key = name;
+                    opt.original_tokens.push_back(tok);
+                    if (!adjacent.empty())
+                        opt.value.push_back(adjacent);
+                    result.push_back(opt);
+                    args.erase(args.begin());                    
+                    break;
+                }
+            }
+            return result;
+        }
+        return vector<option>();
+    }
+
+    vector<option> 
+    cmdline::parse_dos_option(vector<string>& args)
+    {
+        vector<option> result;
+        const string& tok = args[0];
+        if (tok.size() >= 2 && tok[0] == '/')
+        {   
+            string name = "-" + tok.substr(1,1);
+            string adjacent = tok.substr(2);
+
+            option opt;
+            opt.string_key = name;
+            if (!adjacent.empty())
+                opt.value.push_back(adjacent);
+            opt.original_tokens.push_back(tok);
+            result.push_back(opt);
+            args.erase(args.begin());
+        }
+        return result;
+    }
+
+    vector<option> 
+    cmdline::parse_disguised_long_option(vector<string>& args)
+    {
+        const string& tok = args[0];
+        if (tok.size() >= 2 && 
+            ((tok[0] == '-' && tok[1] != '-') ||
+             ((m_style & allow_slash_for_short) && tok[0] == '/')))            
+        {
+            try
+            {
+                if (m_desc->find_nothrow(tok.substr(1, tok.find('=')-1), 
+                                         is_style_active(allow_guessing),
+                                         is_style_active(long_case_insensitive),
+                                         is_style_active(short_case_insensitive)))
+                {
+                    args[0].insert(0, "-");
+                    if (args[0][1] == '/')
+                        args[0][1] = '-';
+                    return parse_long_option(args);
+                }
+            } 
+            catch(error_with_option_name& e)
+            {
+                // add context and rethrow
+                e.add_context(tok, tok, get_canonical_option_prefix());
+                throw;
+            }
+        }
+        return vector<option>();
+    }
+
+    vector<option> 
+    cmdline::parse_terminator(vector<string>& args)
+    {
+        vector<option> result;
+        const string& tok = args[0];
+        if (tok == "--")
+        {
+            for(unsigned i = 1; i < args.size(); ++i)
+            {
+                option opt;
+                opt.value.push_back(args[i]);
+                opt.original_tokens.push_back(args[i]);
+                opt.position_key = INT_MAX;
+                result.push_back(opt);
+            }
+            args.clear();
+        }
+        return result;
+    }
+
+    vector<option> 
+    cmdline::handle_additional_parser(vector<string>& args)
+    {
+        vector<option> result;
+        pair<string, string> r = m_additional_parser(args[0]);
+        if (!r.first.empty()) {
+            option next;
+            next.string_key = r.first;
+            if (!r.second.empty())
+                next.value.push_back(r.second);
+            result.push_back(next);
+            args.erase(args.begin());
+        }
+        return result;
+    }
+
+    void 
+    cmdline::set_additional_parser(additional_parser p)
+    {
+        m_additional_parser = p;
+    }
+
+    void 
+    cmdline::extra_style_parser(style_parser s)
+    {
+        m_style_parser = s;
+    }
+
+
+
+}}}
diff --git a/vendor/pdalboost/libs/program_options/src/config_file.cpp b/vendor/pdalboost/libs/program_options/src/config_file.cpp
new file mode 100644
index 0000000..c2f2c52
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/src/config_file.cpp
@@ -0,0 +1,198 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#define BOOST_PROGRAM_OPTIONS_SOURCE
+#include <boost/program_options/config.hpp>
+
+#include <boost/program_options/detail/config_file.hpp>
+#include <boost/program_options/errors.hpp>
+#include <boost/program_options/detail/convert.hpp>
+#include <boost/throw_exception.hpp>
+
+#include <iostream>
+#include <fstream>
+#include <cassert>
+
+namespace pdalboost { namespace program_options { namespace detail {
+
+    using namespace std;
+
+    common_config_file_iterator::common_config_file_iterator(
+        const std::set<std::string>& allowed_options,
+        bool allow_unregistered)
+    : allowed_options(allowed_options),
+      m_allow_unregistered(allow_unregistered)
+    {
+        for(std::set<std::string>::const_iterator i = allowed_options.begin();
+            i != allowed_options.end(); 
+            ++i)
+        {
+            add_option(i->c_str());
+        }
+    }
+
+    void
+    common_config_file_iterator::add_option(const char* name)
+    {
+        string s(name);
+        assert(!s.empty());
+        if (*s.rbegin() == '*') {
+            s.resize(s.size()-1);
+            bool bad_prefixes(false);
+            // If 's' is a prefix of one of allowed suffix, then
+            // lower_bound will return that element.
+            // If some element is prefix of 's', then lower_bound will
+            // return the next element.
+            set<string>::iterator i = allowed_prefixes.lower_bound(s);
+            if (i != allowed_prefixes.end()) {
+                if (i->find(s) == 0)
+                    bad_prefixes = true;                    
+            }
+            if (i != allowed_prefixes.begin()) {
+                --i;
+                if (s.find(*i) == 0)
+                    bad_prefixes = true;
+            }
+            if (bad_prefixes)
+                pdalboost::throw_exception(error("options '" + string(name) + "' and '" +
+                                             *i + "*' will both match the same "
+                                             "arguments from the configuration file"));
+            allowed_prefixes.insert(s);
+        }
+    }
+
+    namespace {
+        string trim_ws(const string& s)
+        {
+            string::size_type n, n2;
+            n = s.find_first_not_of(" \t\r\n");
+            if (n == string::npos)
+                return string();
+            else {
+                n2 = s.find_last_not_of(" \t\r\n");
+                return s.substr(n, n2-n+1);
+            }
+        }
+    }
+
+
+    void common_config_file_iterator::get()
+    {
+        string s;
+        string::size_type n;
+        bool found = false;
+
+        while(this->getline(s)) {
+
+            // strip '#' comments and whitespace
+            if ((n = s.find('#')) != string::npos)
+                s = s.substr(0, n);
+            s = trim_ws(s);
+
+            if (!s.empty()) {
+                // Handle section name
+                if (*s.begin() == '[' && *s.rbegin() == ']') {
+                    m_prefix = s.substr(1, s.size()-2);
+                    if (*m_prefix.rbegin() != '.')
+                        m_prefix += '.';
+                }
+                else if ((n = s.find('=')) != string::npos) {
+
+                    string name = m_prefix + trim_ws(s.substr(0, n));
+                    string value = trim_ws(s.substr(n+1));
+
+                    bool registered = allowed_option(name);
+                    if (!registered && !m_allow_unregistered)
+                        pdalboost::throw_exception(unknown_option(name));
+
+                    found = true;
+                    this->value().string_key = name;
+                    this->value().value.clear();
+                    this->value().value.push_back(value);
+                    this->value().unregistered = !registered;
+                    this->value().original_tokens.clear();
+                    this->value().original_tokens.push_back(name);
+                    this->value().original_tokens.push_back(value);
+                    break;
+
+                } else {
+                    pdalboost::throw_exception(invalid_config_file_syntax(s, invalid_syntax::unrecognized_line));
+                }
+            }
+        }
+        if (!found)
+            found_eof();
+    }
+
+
+    bool 
+    common_config_file_iterator::allowed_option(const std::string& s) const
+    {
+        set<string>::const_iterator i = allowed_options.find(s);
+        if (i != allowed_options.end())
+            return true;        
+        // If s is "pa" where "p" is allowed prefix then
+        // lower_bound should find the element after "p". 
+        // This depends on 'allowed_prefixes' invariant.
+        i = allowed_prefixes.lower_bound(s);
+        if (i != allowed_prefixes.begin() && s.find(*--i) == 0)
+            return true;
+        return false;
+    }
+
+#if BOOST_WORKAROUND(__COMO_VERSION__, BOOST_TESTED_AT(4303)) || \
+        (defined(__sgi) && BOOST_WORKAROUND(_COMPILER_VERSION, BOOST_TESTED_AT(741)))
+    template<>
+    bool
+    basic_config_file_iterator<wchar_t>::getline(std::string& s)
+    {
+        std::wstring ws;
+        // On Comeau, using two-argument version causes
+        // call to some internal function with std::wstring, and '\n'
+        // (not L'\n') and compile can't resolve that call.
+
+        if (std::getline(*is, ws, L'\n')) {
+            s = to_utf8(ws);
+            return true;
+        } else {
+            return false;
+        }            
+    }
+#endif    
+
+}}}
+
+#if 0
+using pdalboost::program_options::config_file;
+
+#include <sstream>
+#include <cassert>
+
+int main()
+{
+    try {
+        stringstream s(
+            "a = 1\n"
+            "b = 2\n");
+
+        config_file cf(s);
+        cf.add_option("a");
+        cf.add_option("b");
+
+        assert(++cf);
+        assert(cf.name() == "a");
+        assert(cf.value() == "1");
+        assert(++cf);
+        assert(cf.name() == "b");
+        assert(cf.value() == "2");
+        assert(!++cf);
+    }
+    catch(exception& e)
+    {
+        cout << e.what() << "\n";
+    }
+}
+#endif
diff --git a/vendor/pdalboost/libs/program_options/src/convert.cpp b/vendor/pdalboost/libs/program_options/src/convert.cpp
new file mode 100644
index 0000000..271e65d
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/src/convert.cpp
@@ -0,0 +1,161 @@
+// Copyright Vladimir Prus 2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <fstream>
+#include <locale.h>
+#include <locale>
+#include <iostream>
+#include <string>
+#include <locale>
+#include <stdexcept>
+
+#include <boost/config.hpp>
+
+#define BOOST_PROGRAM_OPTIONS_SOURCE
+#include <boost/program_options/config.hpp>
+#include <boost/program_options/detail/convert.hpp>
+#include <boost/program_options/detail/utf8_codecvt_facet.hpp>
+#include <boost/throw_exception.hpp>
+
+#include <boost/bind.hpp>
+
+using namespace std;
+
+namespace pdalboost { namespace detail {
+
+    /* Internal function to actually perform conversion.
+       The logic in from_8_bit and to_8_bit function is exactly
+       the same, except that one calls 'in' method of codecvt and another
+       calls the 'out' method, and that syntax difference makes straightforward
+       template implementation impossible.
+
+       This functions takes a 'fun' argument, which should have the same 
+       parameters and return type and the in/out methods. The actual converting
+       function will pass functional objects created with pdalboost::bind.
+       Experiments show that the performance loss is less than 10%.
+    */
+    template<class ToChar, class FromChar, class Fun>
+    std::basic_string<ToChar>
+    convert(const std::basic_string<FromChar>& s, Fun fun)
+        
+    {
+        std::basic_string<ToChar> result;
+        
+        std::mbstate_t state = std::mbstate_t();
+
+        const FromChar* from = s.data();
+        const FromChar* from_end = s.data() + s.size();
+        // The interface of cvt is not really iterator-like, and it's
+        // not possible the tell the required output size without the conversion.
+        // All we can is convert data by pieces.
+        while(from != from_end) {
+            
+            // std::basic_string does not provide non-const pointers to the data,
+            // so converting directly into string is not possible.
+            ToChar buffer[32];
+            
+            ToChar* to_next = buffer;
+            // Need variable because pdalboost::bind doesn't work with rvalues.
+            ToChar* to_end = buffer + 32;
+            std::codecvt_base::result r = 
+                fun(state, from, from_end, from, buffer, to_end, to_next);
+            
+            if (r == std::codecvt_base::error)
+                pdalboost::throw_exception(
+                    std::logic_error("character conversion failed"));
+            // 'partial' is not an error, it just means not all source
+            // characters were converted. However, we need to check that at
+            // least one new target character was produced. If not, it means
+            // the source data is incomplete, and since we don't have extra
+            // data to add to source, it's error.
+            if (to_next == buffer)
+                pdalboost::throw_exception(
+                    std::logic_error("character conversion failed"));
+            
+            // Add converted characters
+            result.append(buffer, to_next);
+        }
+        
+        return result;        
+    }           
+}}
+
+namespace pdalboost {
+
+#ifndef BOOST_NO_STD_WSTRING
+    BOOST_PROGRAM_OPTIONS_DECL std::wstring 
+    from_8_bit(const std::string& s, 
+               const std::codecvt<wchar_t, char, std::mbstate_t>& cvt)
+    {
+        return detail::convert<wchar_t>(
+            s,                 
+            pdalboost::bind(&std::codecvt<wchar_t, char, mbstate_t>::in,
+                        &cvt,
+                        _1, _2, _3, _4, _5, _6, _7));
+    }
+
+    BOOST_PROGRAM_OPTIONS_DECL std::string 
+    to_8_bit(const std::wstring& s, 
+             const std::codecvt<wchar_t, char, std::mbstate_t>& cvt)
+    {
+        return detail::convert<char>(
+            s,                 
+            pdalboost::bind(&codecvt<wchar_t, char, mbstate_t>::out,
+                        &cvt,
+                        _1, _2, _3, _4, _5, _6, _7));
+    }
+
+
+    namespace {
+        pdalboost::program_options::detail::utf8_codecvt_facet
+            utf8_facet;
+    }
+    
+    BOOST_PROGRAM_OPTIONS_DECL std::wstring
+    from_utf8(const std::string& s)
+    {
+        return from_8_bit(s, utf8_facet);
+    }
+    
+    BOOST_PROGRAM_OPTIONS_DECL std::string
+    to_utf8(const std::wstring& s)
+    {
+        return to_8_bit(s, utf8_facet);
+    }
+
+    BOOST_PROGRAM_OPTIONS_DECL std::wstring
+    from_local_8_bit(const std::string& s)
+    {
+        typedef codecvt<wchar_t, char, mbstate_t> facet_type;
+        return from_8_bit(s, 
+                          BOOST_USE_FACET(facet_type, locale()));
+    }
+
+    BOOST_PROGRAM_OPTIONS_DECL std::string
+    to_local_8_bit(const std::wstring& s)
+    {
+        typedef codecvt<wchar_t, char, mbstate_t> facet_type;
+        return to_8_bit(s, 
+                        BOOST_USE_FACET(facet_type, locale()));                        
+    }
+#endif
+
+    namespace program_options
+    {
+        BOOST_PROGRAM_OPTIONS_DECL std::string to_internal(const std::string& s)
+        {
+            return s;
+        }
+
+#ifndef BOOST_NO_STD_WSTRING
+        BOOST_PROGRAM_OPTIONS_DECL std::string to_internal(const std::wstring& s)
+        {
+            return to_utf8(s);
+        }
+#endif
+    }
+
+
+}
diff --git a/vendor/pdalboost/libs/program_options/src/options_description.cpp b/vendor/pdalboost/libs/program_options/src/options_description.cpp
new file mode 100644
index 0000000..b70eacb
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/src/options_description.cpp
@@ -0,0 +1,664 @@
+// Copyright Vladimir Prus 2002-2004.
+// Copyright Bertolt Mildner 2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#define BOOST_PROGRAM_OPTIONS_SOURCE
+#include <boost/program_options/config.hpp>
+#include <boost/program_options/options_description.hpp>
+// FIXME: this is only to get multiple_occurrences class
+// should move that to a separate headers.
+#include <boost/program_options/parsers.hpp>
+
+
+#include <boost/lexical_cast.hpp>
+#include <boost/tokenizer.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/throw_exception.hpp>
+
+#include <cassert>
+#include <climits>
+#include <cstring>
+#include <cstdarg>
+#include <sstream>
+#include <iterator>
+using namespace std;
+
+namespace pdalboost { namespace program_options {
+
+   namespace {
+
+       template< class charT >
+       std::basic_string< charT >  tolower_(const std::basic_string< charT >& str)
+       {
+           std::basic_string< charT > result;
+           for (typename std::basic_string< charT >::size_type i = 0; i < str.size(); ++i)
+           {
+               result.append(1, static_cast< charT >(std::tolower(str[i])));
+           }   
+           return result;
+       }
+
+    }  // unnamed namespace
+
+
+    option_description::option_description()
+    {
+    }
+    
+    option_description::
+    option_description(const char* name,
+                       const value_semantic* s)
+    : m_value_semantic(s)
+    {
+        this->set_name(name);
+    }
+                                           
+
+    option_description::
+    option_description(const char* name,
+                       const value_semantic* s,
+                       const char* description)
+    : m_description(description), m_value_semantic(s)
+    {
+        this->set_name(name);
+    }
+
+    option_description::~option_description()
+    {
+    }
+
+    option_description::match_result
+    option_description::match(const std::string& option, 
+                              bool approx, 
+                              bool long_ignore_case,
+                              bool short_ignore_case) const
+    {
+        match_result result = no_match;        
+        
+        std::string local_long_name((long_ignore_case ? tolower_(m_long_name) : m_long_name));
+        
+        if (!local_long_name.empty()) {
+        
+            std::string local_option = (long_ignore_case ? tolower_(option) : option);
+
+            if (*local_long_name.rbegin() == '*')
+            {
+                // The name ends with '*'. Any specified name with the given
+                // prefix is OK.
+                if (local_option.find(local_long_name.substr(0, local_long_name.length()-1))
+                    == 0)
+                    result = approximate_match;
+            }
+
+            if (local_long_name == local_option)
+            {
+                result = full_match;
+            }
+            else if (approx)
+            {
+                if (local_long_name.find(local_option) == 0)
+                {
+                    result = approximate_match;
+                }
+            }
+        }
+         
+        if (result != full_match)
+        {
+            std::string local_option(short_ignore_case ? tolower_(option) : option);
+            std::string local_short_name(short_ignore_case ? tolower_(m_short_name) : m_short_name);
+
+            if (local_short_name == local_option)
+            {
+                result = full_match;
+            }
+        }
+
+        return result;        
+    }
+
+    const std::string& 
+    option_description::key(const std::string& option) const
+    {        
+        if (!m_long_name.empty()) 
+            if (m_long_name.find('*') != string::npos)
+                // The '*' character means we're long_name
+                // matches only part of the input. So, returning
+                // long name will remove some of the information,
+                // and we have to return the option as specified
+                // in the source.
+                return option;
+            else
+                return m_long_name;
+        else
+            return m_short_name;
+    }
+
+    std::string 
+    option_description::canonical_display_name(int prefix_style) const
+    {
+        if (!m_long_name.empty()) 
+        {
+            if (prefix_style == command_line_style::allow_long)
+                return "--" + m_long_name;
+            if (prefix_style == command_line_style::allow_long_disguise)
+                return "-" + m_long_name;
+        }
+        // sanity check: m_short_name[0] should be '-' or '/'
+        if (m_short_name.length() == 2)
+        {
+            if (prefix_style == command_line_style::allow_slash_for_short)
+                return string("/") + m_short_name[1];
+            if (prefix_style == command_line_style::allow_dash_for_short)
+                return string("-") + m_short_name[1];
+        }
+        if (!m_long_name.empty()) 
+            return m_long_name;
+        else
+            return m_short_name;
+    }
+
+
+    const std::string&
+    option_description::long_name() const
+    {
+        return m_long_name;
+    }
+
+    option_description&
+    option_description::set_name(const char* _name)
+    {
+        std::string name(_name);
+        string::size_type n = name.find(',');
+        if (n != string::npos) {
+            assert(n == name.size()-2);
+            m_long_name = name.substr(0, n);
+            m_short_name = '-' + name.substr(n+1,1);
+        } else {
+            m_long_name = name;
+        }
+        return *this;
+    }
+
+    const std::string&
+    option_description::description() const
+    {
+        return m_description;
+    }
+
+    shared_ptr<const value_semantic>
+    option_description::semantic() const
+    {
+        return m_value_semantic;
+    }
+    
+    std::string 
+    option_description::format_name() const
+    {
+        if (!m_short_name.empty())
+        {
+            return m_long_name.empty() 
+                ? m_short_name 
+                : string(m_short_name).append(" [ --").
+                  append(m_long_name).append(" ]");
+        }
+        return string("--").append(m_long_name);
+    }
+
+    std::string 
+    option_description::format_parameter() const
+    {
+        if (m_value_semantic->max_tokens() != 0)
+            return m_value_semantic->name();
+        else
+            return "";
+    }
+
+    options_description_easy_init::
+    options_description_easy_init(options_description* owner)
+    : owner(owner)
+    {}
+
+    options_description_easy_init&
+    options_description_easy_init::
+    operator()(const char* name,
+               const char* description)
+    {
+        // Create untypes semantic which accepts zero tokens: i.e. 
+        // no value can be specified on command line.
+        // FIXME: does not look exception-safe
+        shared_ptr<option_description> d(
+            new option_description(name, new untyped_value(true), description));
+
+        owner->add(d);
+        return *this;
+    }
+
+    options_description_easy_init&
+    options_description_easy_init::
+    operator()(const char* name,
+               const value_semantic* s)
+    {
+        shared_ptr<option_description> d(new option_description(name, s));
+        owner->add(d);
+        return *this;
+    }
+
+    options_description_easy_init&
+    options_description_easy_init::
+    operator()(const char* name,
+               const value_semantic* s,
+               const char* description)
+    {
+        shared_ptr<option_description> d(new option_description(name, s, description));
+
+        owner->add(d);
+        return *this;
+    }
+
+    const unsigned options_description::m_default_line_length = 80;
+
+    options_description::options_description(unsigned line_length,
+                                             unsigned min_description_length)
+    : m_line_length(line_length)
+    , m_min_description_length(min_description_length)
+    {
+        // we require a space between the option and description parts, so add 1.
+        assert(m_min_description_length < m_line_length - 1);    
+    }
+
+    options_description::options_description(const std::string& caption,
+                                             unsigned line_length,
+                                             unsigned min_description_length)
+    : m_caption(caption)
+    , m_line_length(line_length)
+    , m_min_description_length(min_description_length)
+    {
+        // we require a space between the option and description parts, so add 1.
+        assert(m_min_description_length < m_line_length - 1);
+    }
+    
+    void
+    options_description::add(shared_ptr<option_description> desc)
+    {
+        m_options.push_back(desc);
+        belong_to_group.push_back(false);
+    }
+
+    options_description&
+    options_description::add(const options_description& desc)
+    {
+        shared_ptr<options_description> d(new options_description(desc));
+        groups.push_back(d);
+
+        for (size_t i = 0; i < desc.m_options.size(); ++i) {
+            add(desc.m_options[i]);
+            belong_to_group.back() = true;
+        }
+
+        return *this;
+    }
+
+    options_description_easy_init
+    options_description::add_options()
+    {       
+        return options_description_easy_init(this);
+    }
+
+    const option_description&
+    options_description::find(const std::string& name, 
+                              bool approx,
+                              bool long_ignore_case,
+                              bool short_ignore_case) const
+    {
+        const option_description* d = find_nothrow(name, approx, 
+                                       long_ignore_case, short_ignore_case);
+        if (!d)
+            pdalboost::throw_exception(unknown_option());
+        return *d;
+    }
+
+    const std::vector< shared_ptr<option_description> >& 
+    options_description::options() const
+    {
+        return m_options;
+    }
+
+    const option_description*
+    options_description::find_nothrow(const std::string& name, 
+                                      bool approx,
+                                      bool long_ignore_case,
+                                      bool short_ignore_case) const
+    {
+        shared_ptr<option_description> found;
+        bool had_full_match = false;
+        vector<string> approximate_matches;
+        vector<string> full_matches;
+        
+        // We use linear search because matching specified option
+        // name with the declared option name need to take care about
+        // case sensitivity and trailing '*' and so we can't use simple map.
+        for(unsigned i = 0; i < m_options.size(); ++i)
+        {
+            option_description::match_result r = 
+                m_options[i]->match(name, approx, long_ignore_case, short_ignore_case);
+
+            if (r == option_description::no_match)
+                continue;
+
+            if (r == option_description::full_match)
+            {                
+                full_matches.push_back(m_options[i]->key(name));
+                found = m_options[i];
+                had_full_match = true;
+            } 
+            else 
+            {                        
+                // FIXME: the use of 'key' here might not
+                // be the best approach.
+                approximate_matches.push_back(m_options[i]->key(name));
+                if (!had_full_match)
+                    found = m_options[i];
+            }
+        }
+        if (full_matches.size() > 1) 
+            pdalboost::throw_exception(ambiguous_option(full_matches));
+        
+        // If we have a full match, and an approximate match,
+        // ignore approximate match instead of reporting error.
+        // Say, if we have options "all" and "all-chroots", then
+        // "--all" on the command line should select the first one,
+        // without ambiguity.
+        if (full_matches.empty() && approximate_matches.size() > 1)
+            pdalboost::throw_exception(ambiguous_option(approximate_matches));
+
+        return found.get();
+    }
+
+    BOOST_PROGRAM_OPTIONS_DECL
+    std::ostream& operator<<(std::ostream& os, const options_description& desc)
+    {
+        desc.print(os);
+        return os;
+    }
+
+    namespace {
+
+        /* Given a string 'par', that contains no newline characters
+           outputs it to 'os' with wordwrapping, that is, as several
+           line.
+
+           Each output line starts with 'indent' space characters, 
+           following by characters from 'par'. The total length of
+           line is no longer than 'line_length'.
+                                      
+        */
+        void format_paragraph(std::ostream& os,
+                              std::string par,
+                              unsigned indent,
+                              unsigned line_length)
+        {                    
+            // Through reminder of this function, 'line_length' will
+            // be the length available for characters, not including
+            // indent.
+            assert(indent < line_length);
+            line_length -= indent;
+
+            // index of tab (if present) is used as additional indent relative
+            // to first_column_width if paragrapth is spanned over multiple
+            // lines if tab is not on first line it is ignored
+            string::size_type par_indent = par.find('\t');
+
+            if (par_indent == string::npos)
+            {
+                par_indent = 0;
+            }
+            else
+            {
+                // only one tab per paragraph allowed
+                if (count(par.begin(), par.end(), '\t') > 1)
+                {
+                    pdalboost::throw_exception(program_options::error(
+                        "Only one tab per paragraph is allowed in the options description"));
+                }
+          
+                // erase tab from string
+                par.erase(par_indent, 1);
+
+                // this assert may fail due to user error or 
+                // environment conditions!
+                assert(par_indent < line_length);
+
+                // ignore tab if not on first line
+                if (par_indent >= line_length)
+                {
+                    par_indent = 0;
+                }            
+            }
+          
+            if (par.size() < line_length)
+            {
+                os << par;
+            }
+            else
+            {
+                string::const_iterator       line_begin = par.begin();
+                const string::const_iterator par_end = par.end();
+
+                bool first_line = true; // of current paragraph!        
+            
+                while (line_begin < par_end)  // paragraph lines
+                {
+                    if (!first_line)
+                    {
+                        // If line starts with space, but second character
+                        // is not space, remove the leading space.
+                        // We don't remove double spaces because those
+                        // might be intentianal.
+                        if ((*line_begin == ' ') &&
+                            ((line_begin + 1 < par_end) &&
+                             (*(line_begin + 1) != ' ')))
+                        {
+                            line_begin += 1;  // line_begin != line_end
+                        }
+                    }
+
+                    // Take care to never increment the iterator past
+                    // the end, since MSVC 8.0 (brokenly), assumes that
+                    // doing that, even if no access happens, is a bug.
+                    unsigned remaining = static_cast<unsigned>(std::distance(line_begin, par_end));
+                    string::const_iterator line_end = line_begin + 
+                        ((remaining < line_length) ? remaining : line_length);
+            
+                    // prevent chopped words
+                    // Is line_end between two non-space characters?
+                    if ((*(line_end - 1) != ' ') &&
+                        ((line_end < par_end) && (*line_end != ' ')))
+                    {
+                        // find last ' ' in the second half of the current paragraph line
+                        string::const_iterator last_space =
+                            find(reverse_iterator<string::const_iterator>(line_end),
+                                 reverse_iterator<string::const_iterator>(line_begin),
+                                 ' ')
+                            .base();
+                
+                        if (last_space != line_begin)
+                        {                 
+                            // is last_space within the second half ot the 
+                            // current line
+                            if (static_cast<unsigned>(std::distance(last_space, line_end)) < 
+                                (line_length / 2))
+                            {
+                                line_end = last_space;
+                            }
+                        }                                                
+                    } // prevent chopped words
+             
+                    // write line to stream
+                    copy(line_begin, line_end, ostream_iterator<char>(os));
+              
+                    if (first_line)
+                    {
+                        indent += static_cast<unsigned>(par_indent);
+                        line_length -= static_cast<unsigned>(par_indent); // there's less to work with now
+                        first_line = false;
+                    }
+
+                    // more lines to follow?
+                    if (line_end != par_end)
+                    {
+                        os << '\n';
+                
+                        for(unsigned pad = indent; pad > 0; --pad)
+                        {
+                            os.put(' ');
+                        }                                                        
+                    }
+              
+                    // next line starts after of this line
+                    line_begin = line_end;              
+                } // paragraph lines
+            }          
+        }                              
+        
+        void format_description(std::ostream& os,
+                                const std::string& desc, 
+                                unsigned first_column_width,
+                                unsigned line_length)
+        {
+            // we need to use one char less per line to work correctly if actual
+            // console has longer lines
+            assert(line_length > 1);
+            if (line_length > 1)
+            {
+                --line_length;
+            }
+
+            // line_length must be larger than first_column_width
+            // this assert may fail due to user error or environment conditions!
+            assert(line_length > first_column_width);
+
+            // Note: can't use 'tokenizer' as name of typedef -- borland
+            // will consider uses of 'tokenizer' below as uses of
+            // pdalboost::tokenizer, not typedef.
+            typedef pdalboost::tokenizer<pdalboost::char_separator<char> > tok;
+          
+            tok paragraphs(
+                desc,
+                char_separator<char>("\n", "", pdalboost::keep_empty_tokens));
+          
+            tok::const_iterator       par_iter = paragraphs.begin();                
+            const tok::const_iterator par_end = paragraphs.end();
+
+            while (par_iter != par_end)  // paragraphs
+            {
+                format_paragraph(os, *par_iter, first_column_width, 
+                                 line_length);
+            
+                ++par_iter;
+            
+                // prepair next line if any
+                if (par_iter != par_end)
+                {
+                    os << '\n';
+              
+                    for(unsigned pad = first_column_width; pad > 0; --pad)
+                    {
+                        os.put(' ');
+                    }                    
+                }            
+            }  // paragraphs
+        }
+    
+        void format_one(std::ostream& os, const option_description& opt, 
+                        unsigned first_column_width, unsigned line_length)
+        {
+            stringstream ss;
+            ss << "  " << opt.format_name() << ' ' << opt.format_parameter();
+            
+            // Don't use ss.rdbuf() since g++ 2.96 is buggy on it.
+            os << ss.str();
+
+            if (!opt.description().empty())
+            {
+                if (ss.str().size() >= first_column_width)
+                {
+                   os.put('\n'); // first column is too long, lets put description in new line
+                   for (unsigned pad = first_column_width; pad > 0; --pad)
+                   {
+                      os.put(' ');
+                   }
+                } else {
+                   for(unsigned pad = first_column_width - static_cast<unsigned>(ss.str().size()); pad > 0; --pad)
+                   {
+                      os.put(' ');
+                   }
+                }
+            
+                format_description(os, opt.description(),
+                                   first_column_width, line_length);
+            }
+        }
+    }
+
+    unsigned                                                                    
+    options_description::get_option_column_width() const                                
+    {
+        /* Find the maximum width of the option column */
+        unsigned width(23);
+        unsigned i; // vc6 has broken for loop scoping
+        for (i = 0; i < m_options.size(); ++i)
+        {
+            const option_description& opt = *m_options[i];
+            stringstream ss;
+            ss << "  " << opt.format_name() << ' ' << opt.format_parameter();
+            width = (max)(width, static_cast<unsigned>(ss.str().size()));            
+        }
+
+        /* Get width of groups as well*/
+        for (unsigned j = 0; j < groups.size(); ++j)                            
+            width = max(width, groups[j]->get_option_column_width());
+
+        /* this is the column were description should start, if first
+           column is longer, we go to a new line */
+        const unsigned start_of_description_column = m_line_length - m_min_description_length;
+
+        width = (min)(width, start_of_description_column-1);
+        
+        /* add an additional space to improve readability */
+        ++width;
+        return width;                                                       
+    }
+
+    void 
+    options_description::print(std::ostream& os, unsigned width) const
+    {
+        if (!m_caption.empty())
+            os << m_caption << ":\n";
+
+        if (!width)
+            width = get_option_column_width();
+
+        /* The options formatting style is stolen from Subversion. */
+        for (unsigned i = 0; i < m_options.size(); ++i)
+        {
+            if (belong_to_group[i])
+                continue;
+
+            const option_description& opt = *m_options[i];
+
+            format_one(os, opt, width, m_line_length);
+
+            os << "\n";
+        }
+
+        for (unsigned j = 0; j < groups.size(); ++j) {            
+            os << "\n";
+            groups[j]->print(os, width);
+        }
+    }
+
+}}
diff --git a/vendor/pdalboost/libs/program_options/src/parsers.cpp b/vendor/pdalboost/libs/program_options/src/parsers.cpp
new file mode 100644
index 0000000..fd9c2f6
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/src/parsers.cpp
@@ -0,0 +1,249 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <boost/config.hpp>
+
+#define BOOST_PROGRAM_OPTIONS_SOURCE
+#include <boost/program_options/config.hpp>
+#include <boost/program_options/parsers.hpp>
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/positional_options.hpp>
+#include <boost/program_options/detail/cmdline.hpp>
+#include <boost/program_options/detail/config_file.hpp>
+#include <boost/program_options/environment_iterator.hpp>
+#include <boost/program_options/detail/convert.hpp>
+
+#include <boost/bind.hpp>
+#include <boost/throw_exception.hpp>
+
+#include <cctype>
+#include <fstream>
+
+#if !defined(__GNUC__) || __GNUC__ < 3
+#include <iostream>
+#else
+#include <istream>
+#endif
+
+#ifdef _WIN32
+#include <stdlib.h>
+#else
+#include <unistd.h>
+#endif
+
+// The 'environ' should be declared in some cases. E.g. Linux man page says:
+// (This variable must be declared in the user program, but is declared in 
+// the header file unistd.h in case the header files came from libc4 or libc5, 
+// and in case they came from glibc and _GNU_SOURCE was defined.) 
+// To be safe, declare it here.
+
+// It appears that on Mac OS X the 'environ' variable is not
+// available to dynamically linked libraries.
+// See: http://article.gmane.org/gmane.comp.lib.boost.devel/103843
+// See: http://lists.gnu.org/archive/html/bug-guile/2004-01/msg00013.html
+#if defined(__APPLE__) && defined(__DYNAMIC__)
+// The proper include for this is crt_externs.h, however it's not
+// available on iOS. The right replacement is not known. See
+// https://svn.boost.org/trac/boost/ticket/5053
+extern "C" { extern char ***_NSGetEnviron(void); }
+#define environ (*_NSGetEnviron()) 
+#else
+#if defined(__MWERKS__)
+#include <crtl.h>
+#else
+#if !defined(_WIN32) || defined(__COMO_VERSION__)
+extern char** environ;
+#endif
+#endif
+#endif
+
+using namespace std;
+
+namespace pdalboost { namespace program_options {
+
+#ifndef BOOST_NO_STD_WSTRING
+    namespace {
+        woption woption_from_option(const option& opt)
+        {
+            woption result;
+            result.string_key = opt.string_key;
+            result.position_key = opt.position_key;
+            result.unregistered = opt.unregistered;
+            
+            std::transform(opt.value.begin(), opt.value.end(),
+                           back_inserter(result.value),
+                           pdalboost::bind(from_utf8, _1));
+
+            std::transform(opt.original_tokens.begin(), 
+                           opt.original_tokens.end(),
+                           back_inserter(result.original_tokens),
+                           pdalboost::bind(from_utf8, _1));
+            return result;
+        }
+    }
+
+    basic_parsed_options<wchar_t>
+    ::basic_parsed_options(const parsed_options& po)
+    : description(po.description),
+      utf8_encoded_options(po),
+      m_options_prefix(po.m_options_prefix)
+    {
+        for (unsigned i = 0; i < po.options.size(); ++i)
+            options.push_back(woption_from_option(po.options[i]));
+    }
+#endif
+
+    template<class charT>
+    basic_parsed_options<charT>
+    parse_config_file(std::basic_istream<charT>& is, 
+                      const options_description& desc,
+                      bool allow_unregistered)
+    {    
+        set<string> allowed_options;
+
+        const vector<shared_ptr<option_description> >& options = desc.options();
+        for (unsigned i = 0; i < options.size(); ++i)
+        {
+            const option_description& d = *options[i];
+
+            if (d.long_name().empty())
+                pdalboost::throw_exception(
+                    error("abbreviated option names are not permitted in options configuration files"));
+
+            allowed_options.insert(d.long_name());
+        }
+
+        // Parser return char strings
+        parsed_options result(&desc);        
+        copy(detail::basic_config_file_iterator<charT>(
+                 is, allowed_options, allow_unregistered), 
+             detail::basic_config_file_iterator<charT>(), 
+             back_inserter(result.options));
+        // Convert char strings into desired type.
+        return basic_parsed_options<charT>(result);
+    }
+
+    template
+    BOOST_PROGRAM_OPTIONS_DECL basic_parsed_options<char>
+    parse_config_file(std::basic_istream<char>& is, 
+                      const options_description& desc,
+                      bool allow_unregistered);
+
+#ifndef BOOST_NO_STD_WSTRING
+    template
+    BOOST_PROGRAM_OPTIONS_DECL basic_parsed_options<wchar_t>
+    parse_config_file(std::basic_istream<wchar_t>& is, 
+                      const options_description& desc,
+                      bool allow_unregistered);
+#endif
+
+    template<class charT>
+    basic_parsed_options<charT>
+    parse_config_file(const char* filename, 
+                      const options_description& desc,
+                      bool allow_unregistered)
+    { 
+        // Parser return char strings
+        std::basic_ifstream< charT > strm(filename);
+        if (!strm) 
+        {
+            pdalboost::throw_exception(reading_file(filename));
+        }
+        return parse_config_file(strm, desc, allow_unregistered);
+    }
+
+    template
+    BOOST_PROGRAM_OPTIONS_DECL basic_parsed_options<char>
+    parse_config_file(const char* filename, 
+                      const options_description& desc,
+                      bool allow_unregistered);
+
+#ifndef BOOST_NO_STD_WSTRING
+    template
+    BOOST_PROGRAM_OPTIONS_DECL basic_parsed_options<wchar_t>
+    parse_config_file(const char* filename, 
+                      const options_description& desc,
+                      bool allow_unregistered);
+#endif
+
+    
+// This versio, which accepts any options without validation, is disabled,
+// in the hope that nobody will need it and we cant drop it altogether.
+// Besides, probably the right way to handle all options is the '*' name.
+#if 0
+    BOOST_PROGRAM_OPTIONS_DECL parsed_options
+    parse_config_file(std::istream& is)
+    {
+        detail::config_file_iterator cf(is, false);
+        parsed_options result(0);
+        copy(cf, detail::config_file_iterator(), 
+             back_inserter(result.options));
+        return result;
+    }
+#endif
+
+    BOOST_PROGRAM_OPTIONS_DECL parsed_options
+    parse_environment(const options_description& desc, 
+                      const function1<std::string, std::string>& name_mapper)
+    {
+        parsed_options result(&desc);
+        
+        for(environment_iterator i(environ), e; i != e; ++i) {
+            string option_name = name_mapper(i->first);
+
+            if (!option_name.empty()) {
+                option n;
+                n.string_key = option_name;
+                n.value.push_back(i->second);
+                result.options.push_back(n);
+            }                
+        }
+
+        return result;
+    }
+
+    namespace detail {
+        class prefix_name_mapper {
+        public:
+            prefix_name_mapper(const std::string& prefix)
+            : prefix(prefix)
+            {}
+
+            std::string operator()(const std::string& s)
+            {
+                string result;
+                if (s.find(prefix) == 0) {
+                    for(string::size_type n = prefix.size(); n < s.size(); ++n) 
+                    {   
+                        // Intel-Win-7.1 does not understand
+            // push_back on string.         
+                        result += static_cast<char>(tolower(s[n]));
+                    }
+                }
+                return result;
+            }
+        private:
+            std::string prefix;
+        };
+    }
+
+    BOOST_PROGRAM_OPTIONS_DECL parsed_options
+    parse_environment(const options_description& desc, 
+                      const std::string& prefix)
+    {
+        return parse_environment(desc, detail::prefix_name_mapper(prefix));
+    }
+
+    BOOST_PROGRAM_OPTIONS_DECL parsed_options
+    parse_environment(const options_description& desc, const char* prefix)
+    {
+        return parse_environment(desc, string(prefix));
+    }
+
+
+
+
+}}
diff --git a/vendor/pdalboost/libs/program_options/src/positional_options.cpp b/vendor/pdalboost/libs/program_options/src/positional_options.cpp
new file mode 100644
index 0000000..1be1031
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/src/positional_options.cpp
@@ -0,0 +1,53 @@
+// Copyright Vladimir Prus 2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_PROGRAM_OPTIONS_SOURCE
+#include <boost/program_options/config.hpp>
+
+#include <boost/program_options/positional_options.hpp>
+
+#include <boost/limits.hpp>
+
+#include <cassert>
+
+namespace pdalboost { namespace program_options {
+
+    positional_options_description::positional_options_description()
+    {}
+
+    positional_options_description&
+    positional_options_description::add(const char* name, int max_count)
+    {
+        assert(max_count != -1 || m_trailing.empty());
+
+        if (max_count == -1)
+            m_trailing = name;
+        else {
+            m_names.resize(m_names.size() + max_count, name);
+        }
+        return *this;
+    }
+
+    unsigned
+    positional_options_description::max_total_count() const
+    {
+        return m_trailing.empty() ? 
+          static_cast<unsigned>(m_names.size()) : (std::numeric_limits<unsigned>::max)();
+    }
+    
+    const std::string& 
+    positional_options_description::name_for_position(unsigned position) const
+    {
+        assert(position < max_total_count());
+
+        if (position < m_names.size())
+            return m_names[position];
+        else
+            return m_trailing;
+    }
+
+
+}}
+
diff --git a/vendor/pdalboost/libs/program_options/src/split.cpp b/vendor/pdalboost/libs/program_options/src/split.cpp
new file mode 100644
index 0000000..fbdbe7c
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/src/split.cpp
@@ -0,0 +1,62 @@
+// Copyright Sascha Ochsenknecht 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_PROGRAM_OPTIONS_SOURCE
+
+#include <boost/program_options/parsers.hpp>
+#include <boost/tokenizer.hpp>
+
+#include <string>
+#include <vector>
+
+namespace pdalboost { namespace program_options { namespace detail {
+
+   template< class charT >
+   std::vector<std::basic_string<charT> > 
+   split_unix(
+         const std::basic_string<charT>& cmdline, 
+         const std::basic_string<charT>& seperator, 
+         const std::basic_string<charT>& quote, 
+         const std::basic_string<charT>& escape)
+   {   
+      typedef pdalboost::tokenizer< pdalboost::escaped_list_separator<charT>, 
+            typename std::basic_string<charT>::const_iterator, 
+            std::basic_string<charT> >  tokenizerT;
+         
+      tokenizerT tok(cmdline.begin(), cmdline.end(), 
+                pdalboost::escaped_list_separator< charT >(escape, seperator, quote));
+         
+      std::vector< std::basic_string<charT> > result;
+      for (typename tokenizerT::iterator cur_token(tok.begin()), end_token(tok.end()); cur_token != end_token; ++cur_token) {
+         if (!cur_token->empty())
+            result.push_back(*cur_token);
+      }
+      return result;
+   }
+   
+}}}   // namespace
+
+namespace pdalboost { namespace program_options {
+
+   // Take a command line string and splits in into tokens, according
+   // to the given collection of seperators chars.
+   BOOST_PROGRAM_OPTIONS_DECL std::vector<std::string> 
+   split_unix(const std::string& cmdline, const std::string& seperator, 
+         const std::string& quote, const std::string& escape)
+   {
+      return detail::split_unix< char >(cmdline, seperator, quote, escape);
+   }
+
+#ifndef BOOST_NO_STD_WSTRING
+   BOOST_PROGRAM_OPTIONS_DECL std::vector<std::wstring>
+   split_unix(const std::wstring& cmdline, const std::wstring& seperator, 
+         const std::wstring& quote, const std::wstring& escape)
+   {
+      return detail::split_unix< wchar_t >(cmdline, seperator, quote, escape);
+   }
+#endif
+
+}}  // namespace
+
diff --git a/vendor/pdalboost/libs/program_options/src/utf8_codecvt_facet.cpp b/vendor/pdalboost/libs/program_options/src/utf8_codecvt_facet.cpp
new file mode 100644
index 0000000..1429980
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/src/utf8_codecvt_facet.cpp
@@ -0,0 +1,21 @@
+// Copyright Vladimir Prus 2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_PROGRAM_OPTIONS_SOURCE
+#include <boost/program_options/config.hpp>
+
+#define BOOST_UTF8_BEGIN_NAMESPACE \
+     namespace pdalboost { namespace program_options { namespace detail {
+
+#define BOOST_UTF8_END_NAMESPACE }}}
+#define BOOST_UTF8_DECL BOOST_PROGRAM_OPTIONS_DECL
+
+#include <boost/detail/utf8_codecvt_facet.ipp>
+
+
+#undef BOOST_UTF8_BEGIN_NAMESPACE
+#undef BOOST_UTF8_END_NAMESPACE
+#undef BOOST_UTF8_DECL
+
diff --git a/vendor/pdalboost/libs/program_options/src/value_semantic.cpp b/vendor/pdalboost/libs/program_options/src/value_semantic.cpp
new file mode 100644
index 0000000..5816190
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/src/value_semantic.cpp
@@ -0,0 +1,428 @@
+// Copyright Vladimir Prus 2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_PROGRAM_OPTIONS_SOURCE
+#include <boost/program_options/config.hpp>
+#include <boost/program_options/value_semantic.hpp>
+#include <boost/program_options/detail/convert.hpp>
+#include <boost/program_options/detail/cmdline.hpp>
+#include <set>
+
+#include <cctype>
+
+namespace pdalboost { namespace program_options {
+
+    using namespace std;
+
+
+#ifndef BOOST_NO_STD_WSTRING
+    namespace
+    {
+        std::string convert_value(const std::wstring& s)
+        {
+            try {
+                return to_local_8_bit(s);
+            }
+            catch(const std::exception&) {
+                return "<unrepresentable unicode string>";
+            }
+        }
+    }
+#endif
+
+    void 
+    value_semantic_codecvt_helper<char>::
+    parse(pdalboost::any& value_store, 
+          const std::vector<std::string>& new_tokens,
+          bool utf8) const
+    {
+        if (utf8) {
+#ifndef BOOST_NO_STD_WSTRING
+            // Need to convert to local encoding.
+            std::vector<string> local_tokens;
+            for (unsigned i = 0; i < new_tokens.size(); ++i) {
+                std::wstring w = from_utf8(new_tokens[i]);
+                local_tokens.push_back(to_local_8_bit(w));
+            }
+            xparse(value_store, local_tokens);
+#else
+            pdalboost::throw_exception(
+                std::runtime_error("UTF-8 conversion not supported."));
+#endif
+        } else {
+            // Already in local encoding, pass unmodified
+            xparse(value_store, new_tokens);
+        }        
+    }
+
+#ifndef BOOST_NO_STD_WSTRING
+    void 
+    value_semantic_codecvt_helper<wchar_t>::
+    parse(pdalboost::any& value_store, 
+          const std::vector<std::string>& new_tokens,
+          bool utf8) const
+    {
+        std::vector<wstring> tokens;
+        if (utf8) {
+            // Convert from utf8
+            for (unsigned i = 0; i < new_tokens.size(); ++i) {
+                tokens.push_back(from_utf8(new_tokens[i]));
+            }
+               
+        } else {
+            // Convert from local encoding
+            for (unsigned i = 0; i < new_tokens.size(); ++i) {
+                tokens.push_back(from_local_8_bit(new_tokens[i]));
+            }
+        }      
+
+        xparse(value_store, tokens);  
+    }
+#endif
+
+    BOOST_PROGRAM_OPTIONS_DECL std::string arg("arg");
+
+    std::string
+    untyped_value::name() const
+    {
+        return arg;
+    }
+    
+    unsigned 
+    untyped_value::min_tokens() const
+    {
+        if (m_zero_tokens)
+            return 0;
+        else
+            return 1;
+    }
+
+    unsigned 
+    untyped_value::max_tokens() const
+    {
+        if (m_zero_tokens)
+            return 0;
+        else
+            return 1;
+    }
+
+
+    void 
+    untyped_value::xparse(pdalboost::any& value_store,
+                          const std::vector<std::string>& new_tokens) const
+    {
+        if (!value_store.empty()) 
+            pdalboost::throw_exception(
+                multiple_occurrences());
+        if (new_tokens.size() > 1)
+            pdalboost::throw_exception(multiple_values());
+        value_store = new_tokens.empty() ? std::string("") : new_tokens.front();
+    }
+
+    BOOST_PROGRAM_OPTIONS_DECL typed_value<bool>*
+    bool_switch()
+    {
+        return bool_switch(0);
+    }
+
+    BOOST_PROGRAM_OPTIONS_DECL typed_value<bool>*
+    bool_switch(bool* v)
+    {
+        typed_value<bool>* r = new typed_value<bool>(v);
+        r->default_value(0);
+        r->zero_tokens();
+
+        return r;
+    }
+
+    /* Validates bool value.
+        Any of "1", "true", "yes", "on" will be converted to "1".<br>
+        Any of "0", "false", "no", "off" will be converted to "0".<br>
+        Case is ignored. The 'xs' vector can either be empty, in which
+        case the value is 'true', or can contain explicit value.
+    */
+    BOOST_PROGRAM_OPTIONS_DECL void validate(any& v, const vector<string>& xs,
+                       bool*, int)
+    {
+        check_first_occurrence(v);
+        string s(get_single_string(xs, true));
+
+        for (size_t i = 0; i < s.size(); ++i)
+            s[i] = char(tolower(s[i]));
+
+        if (s.empty() || s == "on" || s == "yes" || s == "1" || s == "true")
+            v = any(true);
+        else if (s == "off" || s == "no" || s == "0" || s == "false")
+            v = any(false);
+        else
+            pdalboost::throw_exception(invalid_bool_value(s));
+    }
+
+    // This is blatant copy-paste. However, templating this will cause a problem,
+    // since wstring can't be constructed/compared with char*. We'd need to
+    // create auxiliary 'widen' routine to convert from char* into 
+    // needed string type, and that's more work.
+#if !defined(BOOST_NO_STD_WSTRING)
+    BOOST_PROGRAM_OPTIONS_DECL 
+    void validate(any& v, const vector<wstring>& xs, bool*, int)
+    {
+        check_first_occurrence(v);
+        wstring s(get_single_string(xs, true));
+
+        for (size_t i = 0; i < s.size(); ++i)
+            s[i] = wchar_t(tolower(s[i]));
+
+        if (s.empty() || s == L"on" || s == L"yes" || s == L"1" || s == L"true")
+            v = any(true);
+        else if (s == L"off" || s == L"no" || s == L"0" || s == L"false")
+            v = any(false);
+        else
+            pdalboost::throw_exception(invalid_bool_value(convert_value(s)));
+    }
+#endif
+    BOOST_PROGRAM_OPTIONS_DECL 
+    void validate(any& v, const vector<string>& xs, std::string*, int)
+    {
+        check_first_occurrence(v);
+        v = any(get_single_string(xs));
+    }
+
+#if !defined(BOOST_NO_STD_WSTRING)
+    BOOST_PROGRAM_OPTIONS_DECL 
+    void validate(any& v, const vector<wstring>& xs, std::string*, int)
+    {
+        check_first_occurrence(v);
+        v = any(get_single_string(xs));
+    }
+#endif
+
+    namespace validators {
+
+        BOOST_PROGRAM_OPTIONS_DECL 
+        void check_first_occurrence(const pdalboost::any& value)
+        {
+            if (!value.empty())
+                pdalboost::throw_exception(
+                    multiple_occurrences());
+        }
+    }
+
+
+    invalid_option_value::
+    invalid_option_value(const std::string& bad_value)
+    : validation_error(validation_error::invalid_option_value)
+    {
+        set_substitute("value", bad_value);
+    }
+
+#ifndef BOOST_NO_STD_WSTRING
+    invalid_option_value::
+    invalid_option_value(const std::wstring& bad_value)
+    : validation_error(validation_error::invalid_option_value)
+    {
+        set_substitute("value", convert_value(bad_value));
+    }
+#endif
+
+
+
+    invalid_bool_value::
+    invalid_bool_value(const std::string& bad_value)
+    : validation_error(validation_error::invalid_bool_value)
+    {
+        set_substitute("value", bad_value);
+    }
+
+
+
+
+
+
+    error_with_option_name::error_with_option_name( const std::string& template_,
+                                                  const std::string& option_name,
+                                                  const std::string& original_token,
+                                                  int option_style) : 
+                                        error(template_),
+                                        m_option_style(option_style),
+                                        m_error_template(template_)
+    {
+        //                     parameter            |     placeholder               |   value
+        //                     ---------            |     -----------               |   -----
+        set_substitute_default("canonical_option",  "option '%canonical_option%'",  "option");
+        set_substitute_default("value",             "argument ('%value%')",         "argument");
+        set_substitute_default("prefix",            "%prefix%",                     "");
+        m_substitutions["option"] = option_name;
+        m_substitutions["original_token"] = original_token;
+    }
+
+
+    const char* error_with_option_name::what() const throw()
+    {
+        // will substitute tokens each time what is run()
+        substitute_placeholders(m_error_template);
+
+        return m_message.c_str();
+    }
+
+    void error_with_option_name::replace_token(const string& from, const string& to) const
+    {
+        for (;;)
+        {
+            std::size_t pos = m_message.find(from.c_str(), 0, from.length());
+            // not found: all replaced
+            if (pos == std::string::npos)
+                return;
+            m_message.replace(pos, from.length(), to);
+        }
+    }
+
+    string error_with_option_name::get_canonical_option_prefix() const
+    {
+        switch (m_option_style)
+        {
+        case command_line_style::allow_dash_for_short:
+            return "-";
+        case command_line_style::allow_slash_for_short:
+            return "/";
+        case command_line_style::allow_long_disguise:
+            return "-";
+        case command_line_style::allow_long:
+            return "--";
+        case 0:
+            return "";
+        }
+        throw std::logic_error("error_with_option_name::m_option_style can only be "
+                               "one of [0, allow_dash_for_short, allow_slash_for_short, "
+                               "allow_long_disguise or allow_long]");
+    }
+
+
+    string error_with_option_name::get_canonical_option_name() const
+    {
+        if (!m_substitutions.find("option")->second.length())
+            return m_substitutions.find("original_token")->second;
+
+        string original_token   = strip_prefixes(m_substitutions.find("original_token")->second);
+        string option_name      = strip_prefixes(m_substitutions.find("option")->second);
+
+        //  For long options, use option name
+        if (m_option_style == command_line_style::allow_long        || 
+             m_option_style == command_line_style::allow_long_disguise)
+            return get_canonical_option_prefix() + option_name;
+
+        //  For short options use first letter of original_token
+        if (m_option_style && original_token.length())
+            return get_canonical_option_prefix() + original_token[0];
+
+        // no prefix
+        return option_name;
+    }
+
+
+    void error_with_option_name::substitute_placeholders(const string& error_template) const
+    {
+        m_message = error_template;
+        std::map<std::string, std::string> substitutions(m_substitutions);
+        substitutions["canonical_option"]   = get_canonical_option_name();
+        substitutions["prefix"]             = get_canonical_option_prefix();
+
+
+        //
+        //  replace placeholder with defaults if values are missing 
+        // 
+        for (map<string, string_pair>::const_iterator iter = m_substitution_defaults.begin();
+              iter != m_substitution_defaults.end(); ++iter)
+        {
+            // missing parameter: use default
+            if (substitutions.count(iter->first) == 0 ||
+                substitutions[iter->first].length() == 0)
+                replace_token(iter->second.first, iter->second.second);
+        }
+
+
+        //
+        //  replace placeholder with values
+        //  placeholder are denoted by surrounding '%'
+        // 
+        for (map<string, string>::iterator iter = substitutions.begin();
+              iter != substitutions.end(); ++iter)
+            replace_token('%' + iter->first + '%', iter->second);
+    }
+
+
+    void ambiguous_option::substitute_placeholders(const string& original_error_template) const
+    {
+        // For short forms, all alternatives must be identical, by
+        //      definition, to the specified option, so we don't need to
+        //      display alternatives
+        if (m_option_style == command_line_style::allow_dash_for_short || 
+            m_option_style == command_line_style::allow_slash_for_short)
+        {
+            error_with_option_name::substitute_placeholders(original_error_template);
+            return;
+        }
+
+
+        string error_template  = original_error_template;
+        // remove duplicates using std::set
+        std::set<std::string>   alternatives_set (m_alternatives.begin(), m_alternatives.end());
+        std::vector<std::string> alternatives_vec (alternatives_set.begin(), alternatives_set.end());
+
+        error_template += " and matches ";
+        // Being very cautious: should be > 1 alternative!
+        if (alternatives_vec.size() > 1)
+        {
+            for (unsigned i = 0; i < alternatives_vec.size() - 1; ++i)
+                error_template += "'%prefix%" + alternatives_vec[i] + "', ";
+            error_template += "and ";
+        }
+
+        // there is a programming error if multiple options have the same name...
+        if (m_alternatives.size() > 1 && alternatives_vec.size() == 1)
+            error_template += "different versions of ";
+
+        error_template += "'%prefix%" + alternatives_vec.back() + "'";
+
+
+        // use inherited logic
+        error_with_option_name::substitute_placeholders(error_template);
+    }
+
+
+
+
+
+
+    string 
+    validation_error::get_template(kind_t kind)
+    {
+        // Initially, store the message in 'const char*' variable,
+        // to avoid conversion to std::string in all cases.
+        const char* msg;
+        switch(kind)
+        {
+        case invalid_bool_value:
+            msg = "the argument ('%value%') for option '%canonical_option%' is invalid. Valid choices are 'on|off', 'yes|no', '1|0' and 'true|false'";
+            break;
+        case invalid_option_value:
+            msg = "the argument ('%value%') for option '%canonical_option%' is invalid";
+            break;
+        case multiple_values_not_allowed:
+            msg = "option '%canonical_option%' only takes a single argument";
+            break;
+        case at_least_one_value_required:
+            msg = "option '%canonical_option%' requires at least one argument";
+            break;
+        // currently unused
+        case invalid_option:
+            msg = "option '%canonical_option%' is not valid";
+            break;
+        default:
+            msg = "unknown error";
+        }
+        return msg;
+    }
+
+}}
diff --git a/vendor/pdalboost/libs/program_options/src/variables_map.cpp b/vendor/pdalboost/libs/program_options/src/variables_map.cpp
new file mode 100644
index 0000000..57f8848
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/src/variables_map.cpp
@@ -0,0 +1,249 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#define BOOST_PROGRAM_OPTIONS_SOURCE
+#include <boost/program_options/config.hpp>
+#include <boost/program_options/parsers.hpp>
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/value_semantic.hpp>
+#include <boost/program_options/variables_map.hpp>
+
+#include <cassert>
+
+namespace pdalboost { namespace program_options {
+
+    using namespace std;
+
+    // First, performs semantic actions for 'oa'.
+    // Then, stores in 'm' all options that are defined in 'desc'.
+    BOOST_PROGRAM_OPTIONS_DECL
+    void store(const parsed_options& options, variables_map& xm,
+               bool utf8)
+    {
+        // TODO: what if we have different definition
+        // for the same option name during different calls
+        // 'store'.
+        assert(options.description);
+        const options_description& desc = *options.description;
+
+        // We need to access map's operator[], not the overriden version
+        // variables_map. Ehmm.. messy.
+        std::map<std::string, variable_value>& m = xm;
+
+        std::set<std::string> new_final;
+
+        // Declared once, to please Intel in VC++ mode;
+        unsigned i;
+
+        // Declared here so can be used to provide context for exceptions
+        string option_name;
+        string original_token;
+
+        try
+        {
+
+            // First, convert/store all given options
+            for (i = 0; i < options.options.size(); ++i) {
+
+                option_name = options.options[i].string_key;
+                original_token = options.options[i].original_tokens.size() ?
+                                options.options[i].original_tokens[0] :
+                                option_name;
+                // Skip positional options without name
+                if (option_name.empty())
+                    continue;
+
+                // Ignore unregistered option. The 'unregistered'
+                // field can be true only if user has explicitly asked
+                // to allow unregistered options. We can't store them
+                // to variables map (lacking any information about paring),
+                // so just ignore them.
+                if (options.options[i].unregistered)
+                    continue;
+
+                // If option has final value, skip this assignment
+                if (xm.m_final.count(option_name))
+                    continue;
+
+                string original_token = options.options[i].original_tokens.size() ?
+                                        options.options[i].original_tokens[0]     : "";
+                const option_description& d = desc.find(option_name, false,
+                                                        false, false);
+
+                variable_value& v = m[option_name];
+                if (v.defaulted()) {
+                    // Explicit assignment here erases defaulted value
+                    v = variable_value();
+                }
+
+                d.semantic()->parse(v.value(), options.options[i].value, utf8);
+
+                v.m_value_semantic = d.semantic();
+
+                // The option is not composing, and the value is explicitly
+                // provided. Ignore values of this option for subsequent
+                // calls to 'store'. We store this to a temporary set,
+                // so that several assignment inside *this* 'store' call
+                // are allowed.
+                if (!d.semantic()->is_composing())
+                    new_final.insert(option_name);
+            }
+        }
+#ifndef BOOST_NO_EXCEPTIONS
+        catch(error_with_option_name& e)
+        {
+            // add context and rethrow
+            e.add_context(option_name, original_token, options.m_options_prefix);
+            throw;
+        }
+#endif
+        xm.m_final.insert(new_final.begin(), new_final.end());
+
+
+
+        // Second, apply default values and store required options.
+        const vector<shared_ptr<option_description> >& all = desc.options();
+        for(i = 0; i < all.size(); ++i)
+        {
+            const option_description& d = *all[i];
+            string key = d.key("");
+            // FIXME: this logic relies on knowledge of option_description
+            // internals.
+            // The 'key' is empty if options description contains '*'.
+            // In that
+            // case, default value makes no sense at all.
+            if (key.empty())
+            {
+                continue;
+            }
+            if (m.count(key) == 0) {
+
+                pdalboost::any def;
+                if (d.semantic()->apply_default(def)) {
+                    m[key] = variable_value(def, true);
+                    m[key].m_value_semantic = d.semantic();
+                }
+            }
+
+            // add empty value if this is an required option
+            if (d.semantic()->is_required()) {
+
+                // For option names specified in multiple ways, e.g. on the command line,
+                // config file etc, the following precedence rules apply:
+                //  "--"  >  ("-" or "/")  >  ""
+                //  Precedence is set conveniently by a single call to length()
+                string canonical_name = d.canonical_display_name(options.m_options_prefix);
+                if (canonical_name.length() > xm.m_required[key].length())
+                    xm.m_required[key] = canonical_name;
+            }
+        }
+    }
+
+    BOOST_PROGRAM_OPTIONS_DECL
+    void store(const wparsed_options& options, variables_map& m)
+    {
+        store(options.utf8_encoded_options, m, true);
+    }
+
+    BOOST_PROGRAM_OPTIONS_DECL
+    void notify(variables_map& vm)
+    {
+        vm.notify();
+    }
+
+    abstract_variables_map::abstract_variables_map()
+    : m_next(0)
+    {}
+
+    abstract_variables_map::
+    abstract_variables_map(const abstract_variables_map* next)
+    : m_next(next)
+    {}
+
+    const variable_value&
+    abstract_variables_map::operator[](const std::string& name) const
+    {
+        const variable_value& v = get(name);
+        if (v.empty() && m_next)
+            return (*m_next)[name];
+        else if (v.defaulted() && m_next) {
+            const variable_value& v2 = (*m_next)[name];
+            if (!v2.empty() && !v2.defaulted())
+                return v2;
+            else return v;
+        } else {
+            return v;
+        }
+    }
+
+    void
+    abstract_variables_map::next(abstract_variables_map* next)
+    {
+        m_next = next;
+    }
+
+    variables_map::variables_map()
+    {}
+
+    variables_map::variables_map(const abstract_variables_map* next)
+    : abstract_variables_map(next)
+    {}
+
+    void variables_map::clear()
+    {
+        std::map<std::string, variable_value>::clear();
+        m_final.clear();
+        m_required.clear();
+    }
+
+    const variable_value&
+    variables_map::get(const std::string& name) const
+    {
+        static variable_value empty;
+        const_iterator i = this->find(name);
+        if (i == this->end())
+            return empty;
+        else
+            return i->second;
+    }
+
+    void
+    variables_map::notify()
+    {
+        // This checks if all required options occur
+        for (map<string, string>::const_iterator r = m_required.begin();
+             r != m_required.end();
+             ++r)
+        {
+            const string& opt = r->first;
+            const string& display_opt = r->second;
+            map<string, variable_value>::const_iterator iter = find(opt);
+            if (iter == end() || iter->second.empty())
+            {
+                pdalboost::throw_exception(required_option(display_opt));
+
+            }
+        }
+
+        // Lastly, run notify actions.
+        for (map<string, variable_value>::iterator k = begin();
+             k != end();
+             ++k)
+        {
+            /* Users might wish to use variables_map to store their own values
+               that are not parsed, and therefore will not have value_semantics
+               defined. Do not crash on such values. In multi-module programs,
+               one module might add custom values, and the 'notify' function
+               will be called after that, so we check that value_sematics is
+               not NULL. See:
+                   https://svn.boost.org/trac/boost/ticket/2782
+            */
+            if (k->second.m_value_semantic)
+                k->second.m_value_semantic->notify(k->second.value());
+        }
+    }
+
+}}
diff --git a/vendor/pdalboost/libs/program_options/src/winmain.cpp b/vendor/pdalboost/libs/program_options/src/winmain.cpp
new file mode 100644
index 0000000..c945799
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/src/winmain.cpp
@@ -0,0 +1,102 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_PROGRAM_OPTIONS_SOURCE
+#include <boost/program_options/parsers.hpp>
+#include <cctype>
+
+using std::size_t;
+
+#ifdef _WIN32
+namespace pdalboost { namespace program_options {
+
+    // Take a command line string and splits in into tokens, according
+    // to the rules windows command line processor uses.
+    // 
+    // The rules are pretty funny, see
+    //    http://article.gmane.org/gmane.comp.lib.boost.user/3005
+    //    http://msdn.microsoft.com/library/en-us/vccelng/htm/progs_12.asp
+    BOOST_PROGRAM_OPTIONS_DECL
+    std::vector<std::string> split_winmain(const std::string& input)
+    {
+        std::vector<std::string> result;
+
+        std::string::const_iterator i = input.begin(), e = input.end();
+        for(;i != e; ++i)
+            if (!isspace((unsigned char)*i))
+                break;
+       
+        if (i != e) {
+   
+            std::string current;
+            bool inside_quoted = false;
+            bool empty_quote = false;
+            int backslash_count = 0;
+            
+            for(; i != e; ++i) {
+                if (*i == '"') {
+                    // '"' preceded by even number (n) of backslashes generates
+                    // n/2 backslashes and is a quoted block delimiter
+                    if (backslash_count % 2 == 0) {
+                        current.append(backslash_count / 2, '\\');
+                        empty_quote = inside_quoted && current.empty();
+                        inside_quoted = !inside_quoted;
+                        // '"' preceded by odd number (n) of backslashes generates
+                        // (n-1)/2 backslashes and is literal quote.
+                    } else {
+                        current.append(backslash_count / 2, '\\');                
+                        current += '"';                
+                    }
+                    backslash_count = 0;
+                } else if (*i == '\\') {
+                    ++backslash_count;
+                } else {
+                    // Not quote or backslash. All accumulated backslashes should be
+                    // added
+                    if (backslash_count) {
+                        current.append(backslash_count, '\\');
+                        backslash_count = 0;
+                    }
+                    if (isspace((unsigned char)*i) && !inside_quoted) {
+                        // Space outside quoted section terminate the current argument
+                        result.push_back(current);
+                        current.resize(0);
+                        empty_quote = false; 
+                        for(;i != e && isspace((unsigned char)*i); ++i)
+                            ;
+                        --i;
+                    } else {                  
+                        current += *i;
+                    }
+                }
+            }
+
+            // If we have trailing backslashes, add them
+            if (backslash_count)
+                current.append(backslash_count, '\\');
+        
+            // If we have non-empty 'current' or we're still in quoted
+            // section (even if 'current' is empty), add the last token.
+            if (!current.empty() || inside_quoted || empty_quote)
+                result.push_back(current);        
+        }
+        return result;
+    }
+
+#ifndef BOOST_NO_STD_WSTRING
+    BOOST_PROGRAM_OPTIONS_DECL std::vector<std::wstring>
+    split_winmain(const std::wstring& cmdline)
+    {
+        std::vector<std::wstring> result;
+        std::vector<std::string> aux = split_winmain(to_internal(cmdline));
+        for (size_t i = 0, e = aux.size(); i < e; ++i)
+            result.push_back(from_utf8(aux[i]));
+        return result;        
+    }
+#endif
+
+}}
+#endif
+
diff --git a/vendor/pdalboost/libs/program_options/test/Jamfile.v2 b/vendor/pdalboost/libs/program_options/test/Jamfile.v2
new file mode 100644
index 0000000..e05df00
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/Jamfile.v2
@@ -0,0 +1,40 @@
+
+project
+    : requirements 
+    <library>../build//pdalboost_program_options
+    <link>static
+    <variant>debug
+    
+#    <define>_GLIBCXX_CONCEPT_CHECKS
+#    <define>_GLIBCXX_DEBUG
+    ;
+    
+rule po-test ( source : input-file ? )
+{
+    return
+        [ run $(source) : : $(input-file) ]
+        [ run $(source) : : $(input-file) 
+          : <link>shared <define>BOOST_PROGRAM_OPTIONS_DYN_LINK=1
+          : $(source:B)_dll ] 
+    ;   
+}    
+
+test-suite program_options :
+
+    [ po-test options_description_test.cpp ] 
+    [ po-test parsers_test.cpp : config_test.cfg ]
+    [ po-test variable_map_test.cpp ]
+    [ po-test cmdline_test.cpp ]
+    [ po-test positional_options_test.cpp ]
+    [ po-test unicode_test.cpp ] 
+    [ po-test winmain.cpp ] 
+    [ po-test exception_test.cpp ]
+    [ po-test split_test.cpp ]
+    [ po-test unrecognized_test.cpp ]
+    [ po-test required_test.cpp : required_test.cfg ]
+    [ po-test exception_txt_test.cpp ]
+    [ run options_description_test.cpp : : : <rtti>off <define>BOOST_NO_RTTI <define>BOOST_NO_TYPEID : options_description_no_rtti_test ]
+    ;
+        
+exe test_convert : test_convert.cpp ;   
+
diff --git a/vendor/pdalboost/libs/program_options/test/cmdline_test.cpp b/vendor/pdalboost/libs/program_options/test/cmdline_test.cpp
new file mode 100644
index 0000000..e2a6b28
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/cmdline_test.cpp
@@ -0,0 +1,659 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/program_options/cmdline.hpp>
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/detail/cmdline.hpp>
+using namespace pdalboost::program_options;
+using pdalboost::program_options::detail::cmdline;
+
+#include <iostream>
+#include <sstream>
+#include <vector>
+#include <cassert>
+using namespace std;
+
+#include "minitest.hpp"
+
+/* To facilitate testing, declare a number of error codes. Otherwise,
+   we'd have to specify the type of exception that should be thrown.
+*/
+
+const int s_success = 0;
+const int s_unknown_option = 1;
+const int s_ambiguous_option = 2;
+const int s_long_not_allowed = 3;
+const int s_long_adjacent_not_allowed = 4;
+const int s_short_adjacent_not_allowed = 5;
+const int s_empty_adjacent_parameter = 6;
+const int s_missing_parameter = 7;
+const int s_extra_parameter = 8;
+const int s_unrecognized_line = 9;
+
+int translate_syntax_error_kind(invalid_command_line_syntax::kind_t k)
+{
+    invalid_command_line_syntax::kind_t table[] = {
+        invalid_command_line_syntax::long_not_allowed,
+        invalid_command_line_syntax::long_adjacent_not_allowed,
+        invalid_command_line_syntax::short_adjacent_not_allowed,
+        invalid_command_line_syntax::empty_adjacent_parameter,
+        invalid_command_line_syntax::missing_parameter,
+        invalid_command_line_syntax::extra_parameter,
+        invalid_command_line_syntax::unrecognized_line 
+    };
+    invalid_command_line_syntax::kind_t *b, *e, *i;
+    b = table;
+    e = table + sizeof(table)/sizeof(table[0]);
+    i = std::find(b, e, k);
+    assert(i != e);
+    return std::distance(b, i) + 3;
+}
+
+struct test_case {
+    const char* input;
+    int expected_status;
+    const char* expected_result;
+};
+
+
+/* Parses the syntax description in 'syntax' and initialized
+   'cmd' accordingly' 
+   The "pdalboost::program_options" in parameter type is needed because CW9 
+   has std::detail and it causes an ambiguity.
+*/
+void apply_syntax(options_description& desc,
+                  positional_options_description & m_positional,
+                  const char* syntax)
+{
+   
+    string s;
+    stringstream ss;
+    ss << syntax;
+    while(ss >> s) {
+        value_semantic* v = 0;
+        
+        if (*(s.end()-1) == '=') {
+            v = value<string>();
+            s.resize(s.size()-1);
+        } else if (*(s.end()-1) == '?') {
+            v = value<string>()->implicit_value("bar");
+            m_positional.add("positional", -1);
+            s.resize(s.size()-1);
+        } else if (*(s.end()-1) == '*') {
+            v = value<vector<string> >()->multitoken();
+            s.resize(s.size()-1);
+        } else if (*(s.end()-1) == '+') {
+            v = value<vector<string> >()->multitoken();
+            s.resize(s.size()-1);
+        }
+        if (v) {
+            desc.add_options()
+                (s.c_str(), v, "");
+        } else {
+            desc.add_options()
+                (s.c_str(), "");
+        }
+    }
+}
+
+void test_cmdline(const char* syntax, 
+                  command_line_style::style_t style,
+                  const test_case* cases)
+{
+    for (int i = 0; cases[i].input; ++i) {
+        // Parse input
+        vector<string> xinput;
+        {
+            string s;
+            stringstream ss;
+            ss << cases[i].input;
+            while (ss >> s) {
+                xinput.push_back(s);
+            }
+        }
+        options_description desc;
+        positional_options_description m_positional;
+        apply_syntax(desc, m_positional, syntax);
+
+        cmdline cmd(xinput);
+        cmd.style(style);
+        cmd.set_options_description(desc);
+        if(m_positional.max_total_count())
+            cmd.set_positional_options(m_positional);
+
+        string result;
+        int status = 0;
+
+        try {
+            vector<option> options = cmd.run();
+
+            for(unsigned j = 0; j < options.size(); ++j)
+            {
+                option opt = options[j];
+
+                if (opt.position_key != -1
+                    && (m_positional.max_total_count() == 0 || (size_t)opt.position_key >= m_positional.max_total_count()
+                     || m_positional.name_for_position(opt.position_key) != "positional")) {
+                    if (!result.empty())
+                        result += " ";
+                    result += opt.value[0];
+                } else {
+                    if (!result.empty())
+                        result += " ";
+                    result += opt.string_key + ":";
+                    for (size_t k = 0; k < opt.value.size(); ++k) {
+                        if (k != 0)
+                            result += "-";
+                        result += opt.value[k];
+                    }                    
+                }
+            }
+        }
+        catch(unknown_option&) {
+            status = s_unknown_option;
+        }
+        catch(ambiguous_option&) {
+            status = s_ambiguous_option;
+        }
+        catch(invalid_command_line_syntax& e) {
+            status = translate_syntax_error_kind(e.kind());
+        }
+        BOOST_CHECK_EQUAL(status, cases[i].expected_status);
+        BOOST_CHECK_EQUAL(result, cases[i].expected_result);
+    }
+}
+
+void test_long_options()
+{
+    using namespace command_line_style;
+    cmdline::style_t style = cmdline::style_t(
+        allow_long | long_allow_adjacent);
+
+    test_case test_cases1[] = {
+        // Test that long options are recognized and everything else
+        // is treated like arguments
+        {"--foo foo -123 /asd", s_success, "foo: foo -123 /asd"},
+
+        // Unknown option
+        {"--unk", s_unknown_option, ""},
+
+        // Test that abbreviated names do not work
+        {"--fo", s_unknown_option, ""},
+
+        // Test for disallowed parameter
+        {"--foo=13", s_extra_parameter, ""},
+
+        // Test option with required parameter
+        {"--bar=", s_empty_adjacent_parameter, ""},
+        {"--bar", s_missing_parameter, ""},
+
+        {"--bar=123", s_success, "bar:123"},
+        {0, 0, 0}
+    };
+    test_cmdline("foo bar=", style, test_cases1);
+
+
+    style = cmdline::style_t(
+        allow_long | long_allow_next);
+
+    test_case test_cases2[] = {
+        {"--bar 10", s_success, "bar:10"},
+        {"--bar", s_missing_parameter,  ""},
+        // Since --bar accepts a parameter, --foo is
+        // considered a value, even though it looks like
+        // an option.
+        {"--bar --foo", s_success, "bar:--foo"},
+        {0, 0, 0}
+    };
+    test_cmdline("foo bar=", style, test_cases2);
+    style = cmdline::style_t(
+        allow_long | long_allow_adjacent
+        | long_allow_next);
+
+    test_case test_cases3[] = {
+        {"--bar=10", s_success, "bar:10"},
+        {"--bar 11", s_success, "bar:11"},
+        {0, 0, 0}
+    };
+    test_cmdline("foo bar=", style, test_cases3);
+
+    style = cmdline::style_t(
+        allow_long | long_allow_adjacent
+        | long_allow_next | case_insensitive);
+
+    // Test case insensitive style.
+    // Note that option names are normalized to lower case.
+    test_case test_cases4[] = {
+        {"--foo", s_success, "foo:"},
+        {"--Foo", s_success, "foo:"},
+        {"--bar=Ab", s_success, "bar:Ab"},
+        {"--Bar=ab", s_success, "bar:ab"},
+        {"--giz", s_success, "Giz:"},
+        {0, 0, 0}
+    };
+    test_cmdline("foo bar= Giz", style, test_cases4);
+}
+
+void test_short_options()
+{
+    using namespace command_line_style;
+    cmdline::style_t style;
+
+    style = cmdline::style_t(
+        allow_short | allow_dash_for_short 
+        | short_allow_adjacent);
+
+    test_case test_cases1[] = {
+        {"-d d /bar", s_success, "-d: d /bar"},
+        // This is treated as error when long options are disabled
+        {"--foo", s_success, "--foo"},
+        {"-d13", s_extra_parameter, ""},
+        {"-f14", s_success, "-f:14"},
+        {"-g -f1", s_success, "-g: -f:1"},
+        {"-f", s_missing_parameter, ""},
+        {0, 0, 0}
+    };
+    test_cmdline(",d ,f= ,g", style, test_cases1);
+
+    style = cmdline::style_t(
+        allow_short | allow_dash_for_short
+        | short_allow_next);
+
+    test_case test_cases2[] = {
+        {"-f 13", s_success, "-f:13"},
+        {"-f -13", s_success, "-f:-13"},
+        {"-f", s_missing_parameter, ""},
+        {"-f /foo", s_success, "-f:/foo"},
+        {"-f -d", s_missing_parameter, ""},
+        {0, 0, 0}
+    };
+    test_cmdline(",d ,f=", style, test_cases2);
+
+    style = cmdline::style_t(
+        allow_short | short_allow_next
+        | allow_dash_for_short | short_allow_adjacent);
+
+    test_case test_cases3[] = {
+        {"-f10", s_success, "-f:10"},
+        {"-f 10", s_success, "-f:10"},
+        {"-f -d", s_missing_parameter, ""},
+        {0, 0, 0}
+    };
+    test_cmdline(",d ,f=", style, test_cases3);
+
+    style = cmdline::style_t(
+        allow_short | short_allow_next
+        | allow_dash_for_short
+        | short_allow_adjacent | allow_sticky);
+
+    test_case test_cases4[] = {
+        {"-de", s_success, "-d: -e:"},
+        {"-df10", s_success, "-d: -f:10"},
+        // FIXME: review
+        //{"-d12", s_extra_parameter, ""},
+        {"-f12", s_success, "-f:12"},
+        {"-fe", s_success, "-f:e"},
+        {0, 0, 0}
+    };
+    test_cmdline(",d ,f= ,e", style, test_cases4);
+
+}
+
+
+void test_dos_options()
+{
+    using namespace command_line_style;
+    cmdline::style_t style;
+
+    style = cmdline::style_t(
+        allow_short
+        | allow_slash_for_short | short_allow_adjacent);
+
+    test_case test_cases1[] = {
+        {"/d d -bar", s_success, "-d: d -bar"},
+        {"--foo", s_success, "--foo"},
+        {"/d13", s_extra_parameter, ""},
+        {"/f14", s_success, "-f:14"},
+        {"/f", s_missing_parameter, ""},
+        {0, 0, 0}
+    };
+    test_cmdline(",d ,f=", style, test_cases1);
+
+    style = cmdline::style_t(
+        allow_short 
+        | allow_slash_for_short | short_allow_next
+        | short_allow_adjacent | allow_sticky);
+
+    test_case test_cases2[] = {
+        {"/de", s_extra_parameter, ""},
+        {"/fe", s_success, "-f:e"},
+        {0, 0, 0}
+    };
+    test_cmdline(",d ,f= ,e", style, test_cases2);
+
+}
+
+
+void test_disguised_long()
+{
+    using namespace command_line_style;
+    cmdline::style_t style;
+
+    style = cmdline::style_t(
+        allow_short | short_allow_adjacent
+        | allow_dash_for_short
+        | short_allow_next | allow_long_disguise
+        | long_allow_adjacent);
+
+    test_case test_cases1[] = {
+        {"-foo -f", s_success, "foo: foo:"},
+        {"-goo=x -gy", s_success, "goo:x goo:y"},
+        {"-bee=x -by", s_success, "bee:x bee:y"},
+        {0, 0, 0}
+    };
+    test_cmdline("foo,f goo,g= bee,b=", style, test_cases1);
+
+    style = cmdline::style_t(style | allow_slash_for_short);
+    test_case test_cases2[] = {
+        {"/foo -f", s_success, "foo: foo:"},
+        {"/goo=x", s_success, "goo:x"},
+        {0, 0, 0}
+    };
+    test_cmdline("foo,f goo,g=", style, test_cases2);
+}
+
+void test_guessing()
+{
+    using namespace command_line_style;
+    cmdline::style_t style;
+
+    style = cmdline::style_t(
+        allow_short | short_allow_adjacent
+        | allow_dash_for_short        
+        | allow_long | long_allow_adjacent
+        | allow_guessing | allow_long_disguise);
+
+    test_case test_cases1[] = {
+        {"--opt1", s_success, "opt123:"},
+        {"--opt", s_ambiguous_option, ""},
+        {"--f=1", s_success, "foo:1"},
+        {"-far", s_success, "foo:ar"},
+        {0, 0, 0}
+    };
+    test_cmdline("opt123 opt56 foo,f=", style, test_cases1);
+
+    test_case test_cases2[] = { 
+        {"--fname file --fname2 file2", s_success, "fname: file fname2: file2"},
+        {"--fnam file --fnam file2", s_ambiguous_option, ""},
+        {"--fnam file --fname2 file2", s_ambiguous_option, ""},
+        {"--fname2 file2 --fnam file", s_ambiguous_option, ""},
+        {0, 0, 0} 
+    };
+    test_cmdline("fname fname2", style, test_cases2);
+}
+
+void test_arguments()
+{
+    using namespace command_line_style;
+    cmdline::style_t style;
+
+    style = cmdline::style_t(
+        allow_short | allow_long
+        | allow_dash_for_short
+        | short_allow_adjacent | long_allow_adjacent);
+
+    test_case test_cases1[] = {
+        {"-f file -gx file2", s_success, "-f: file -g:x file2"},
+        {"-f - -gx - -- -e", s_success, "-f: - -g:x - -e"},
+        {0, 0, 0}
+    };
+    test_cmdline(",f ,g= ,e", style, test_cases1);
+
+    // "--" should stop options regardless of whether long options are
+    // allowed or not.
+
+    style = cmdline::style_t(
+        allow_short | short_allow_adjacent
+        | allow_dash_for_short);
+
+    test_case test_cases2[] = {
+        {"-f - -gx - -- -e", s_success, "-f: - -g:x - -e"},
+        {0, 0, 0}
+    };
+    test_cmdline(",f ,g= ,e", style, test_cases2);
+}
+
+void test_prefix()
+{
+    using namespace command_line_style;
+    cmdline::style_t style;
+
+    style = cmdline::style_t(
+        allow_short | allow_long
+        | allow_dash_for_short
+        | short_allow_adjacent | long_allow_adjacent
+        );
+
+    test_case test_cases1[] = {
+        {"--foo.bar=12", s_success, "foo.bar:12"},
+        {0, 0, 0}
+    };
+
+    test_cmdline("foo*=", style, test_cases1);
+}
+
+
+pair<string, string> at_option_parser(string const&s)
+{
+    if ('@' == s[0])
+        return std::make_pair(string("response-file"), s.substr(1));
+    else
+        return pair<string, string>();
+}
+
+pair<string, string> at_option_parser_broken(string const&s)
+{
+    if ('@' == s[0])
+        return std::make_pair(string("some garbage"), s.substr(1));
+    else
+        return pair<string, string>();
+}
+
+
+
+void test_additional_parser()
+{
+    options_description desc;
+    desc.add_options()
+        ("response-file", value<string>(), "response file")
+        ("foo", value<int>(), "foo")
+        ;
+
+    vector<string> input;
+    input.push_back("@config");
+    input.push_back("--foo=1");
+
+    cmdline cmd(input);
+    cmd.set_options_description(desc);
+    cmd.set_additional_parser(at_option_parser);
+
+    vector<option> result = cmd.run();
+
+    BOOST_REQUIRE(result.size() == 2);
+    BOOST_CHECK_EQUAL(result[0].string_key, "response-file");
+    BOOST_CHECK_EQUAL(result[0].value[0], "config");
+    BOOST_CHECK_EQUAL(result[1].string_key, "foo");
+    BOOST_CHECK_EQUAL(result[1].value[0], "1");    
+
+    // Test that invalid options returned by additional style
+    // parser are detected.
+    cmdline cmd2(input);
+    cmd2.set_options_description(desc);
+    cmd2.set_additional_parser(at_option_parser_broken);
+
+    BOOST_CHECK_THROW(cmd2.run(), unknown_option);
+
+}
+
+vector<option> at_option_parser2(vector<string>& args)
+{
+    vector<option> result;
+    if ('@' == args[0][0]) {
+        // Simulate reading the response file.
+        result.push_back(option("foo", vector<string>(1, "1")));
+        result.push_back(option("bar", vector<string>(1, "1")));
+        args.erase(args.begin());
+    }
+    return result;
+}
+
+
+void test_style_parser()
+{
+    options_description desc;
+    desc.add_options()
+        ("foo", value<int>(), "foo")
+        ("bar", value<int>(), "bar")
+        ;
+
+    vector<string> input;
+    input.push_back("@config");
+
+    cmdline cmd(input);
+    cmd.set_options_description(desc);
+    cmd.extra_style_parser(at_option_parser2);
+
+    vector<option> result = cmd.run();
+
+    BOOST_REQUIRE(result.size() == 2);
+    BOOST_CHECK_EQUAL(result[0].string_key, "foo");
+    BOOST_CHECK_EQUAL(result[0].value[0], "1");    
+    BOOST_CHECK_EQUAL(result[1].string_key, "bar");
+    BOOST_CHECK_EQUAL(result[1].value[0], "1");    
+}
+
+void test_unregistered()
+{
+    // Check unregisted option when no options are registed at all.
+    options_description desc;
+
+    vector<string> input;
+    input.push_back("--foo=1");
+    input.push_back("--bar");
+    input.push_back("1");
+    input.push_back("-b");
+    input.push_back("-biz");
+
+    cmdline cmd(input);
+    cmd.set_options_description(desc);
+    cmd.allow_unregistered();
+    
+    vector<option> result = cmd.run();
+    BOOST_REQUIRE(result.size() == 5);
+    // --foo=1
+    BOOST_CHECK_EQUAL(result[0].string_key, "foo");
+    BOOST_CHECK_EQUAL(result[0].unregistered, true);
+    BOOST_CHECK_EQUAL(result[0].value[0], "1");
+    // --bar
+    BOOST_CHECK_EQUAL(result[1].string_key, "bar");
+    BOOST_CHECK_EQUAL(result[1].unregistered, true);
+    BOOST_CHECK(result[1].value.empty());
+    // '1' is considered a positional option, not a value to
+    // --bar
+    BOOST_CHECK(result[2].string_key.empty());
+    BOOST_CHECK(result[2].position_key == 0);
+    BOOST_CHECK_EQUAL(result[2].unregistered, false);
+    BOOST_CHECK_EQUAL(result[2].value[0], "1");
+    // -b
+    BOOST_CHECK_EQUAL(result[3].string_key, "-b");
+    BOOST_CHECK_EQUAL(result[3].unregistered, true);
+    BOOST_CHECK(result[3].value.empty());
+    // -biz
+    BOOST_CHECK_EQUAL(result[4].string_key, "-b");
+    BOOST_CHECK_EQUAL(result[4].unregistered, true);
+    BOOST_CHECK_EQUAL(result[4].value[0], "iz");
+
+    // Check sticky short options together with unregisted options.
+    
+    desc.add_options()
+        ("help,h", "")
+        ("magic,m", value<string>(), "")
+        ;
+
+    input.clear();
+    input.push_back("-hc");
+    input.push_back("-mc");
+
+
+    cmdline cmd2(input);
+    cmd2.set_options_description(desc);
+    cmd2.allow_unregistered();
+    
+    result = cmd2.run();
+
+    BOOST_REQUIRE(result.size() == 3);
+    BOOST_CHECK_EQUAL(result[0].string_key, "help");
+    BOOST_CHECK_EQUAL(result[0].unregistered, false);
+    BOOST_CHECK(result[0].value.empty());
+    BOOST_CHECK_EQUAL(result[1].string_key, "-c");
+    BOOST_CHECK_EQUAL(result[1].unregistered, true);
+    BOOST_CHECK(result[1].value.empty());
+    BOOST_CHECK_EQUAL(result[2].string_key, "magic");
+    BOOST_CHECK_EQUAL(result[2].unregistered, false);
+    BOOST_CHECK_EQUAL(result[2].value[0], "c");
+
+    // CONSIDER:
+    // There's a corner case:
+    //   -foo
+    // when 'allow_long_disguise' is set. Should this be considered
+    // disguised long option 'foo' or short option '-f' with value 'oo'?
+    // It's not clear yet, so I'm leaving the decision till later.
+}
+
+void test_implicit_value()
+{
+    using namespace command_line_style;
+    cmdline::style_t style;
+
+    style = cmdline::style_t(
+        allow_long | long_allow_adjacent
+        );
+
+    test_case test_cases1[] = {
+        {"--foo bar", s_success, "foo: positional:bar"},
+        {"--foo=bar foobar", s_success, "foo:bar positional:foobar"},
+        {0, 0, 0}
+    };
+
+    test_cmdline("positional= foo?", style, test_cases1);
+
+    style = cmdline::style_t(
+        allow_short | allow_dash_for_short 
+        | short_allow_adjacent);
+
+    test_case test_cases2[] = {
+        {"-f bar", s_success, "-f: positional:bar"},
+        {"-fbar foobar", s_success, "-f:bar positional:foobar"},
+        {0, 0, 0}
+    };
+    test_cmdline("positional= ,f?", style, test_cases2);
+}
+
+int main(int /*ac*/, char** /*av*/)
+{
+    test_long_options();
+    test_short_options();
+    test_dos_options();
+    test_disguised_long();
+    test_guessing();
+    test_arguments();
+    test_prefix();
+    test_additional_parser();
+    test_style_parser();
+    test_unregistered();
+    test_implicit_value();
+
+    return 0;
+}
diff --git a/vendor/pdalboost/libs/program_options/test/config_test.cfg b/vendor/pdalboost/libs/program_options/test/config_test.cfg
new file mode 100644
index 0000000..bd70991
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/config_test.cfg
@@ -0,0 +1,9 @@
+gv1 = 0#asd
+empty_value = 
+plug3 = 7
+b = true
+
+[m1]
+v1 = 1
+
+v2 = 2
diff --git a/vendor/pdalboost/libs/program_options/test/exception_test.cpp b/vendor/pdalboost/libs/program_options/test/exception_test.cpp
new file mode 100644
index 0000000..d9afd99
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/exception_test.cpp
@@ -0,0 +1,164 @@
+// Copyright Sascha Ochsenknecht 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <boost/program_options/parsers.hpp>
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/variables_map.hpp>
+#include <boost/program_options/cmdline.hpp>
+using namespace pdalboost::program_options;
+
+#include <iostream>
+#include <sstream>
+#include <vector>
+#include <cassert>
+using namespace std;
+
+#include "minitest.hpp"
+
+
+void test_ambiguous() 
+{
+    options_description desc; 
+    desc.add_options()
+        ("cfgfile,c", value<string>()->multitoken(), "the config file") 
+        ("output,c", value<string>(), "the output file") 
+        ("output,o", value<string>(), "the output file")
+    ;
+
+    const char* cmdline[] = {"program", "-c", "file", "-o", "anotherfile"};
+
+    variables_map vm;
+    try {
+       store(parse_command_line(sizeof(cmdline)/sizeof(const char*), 
+                                    const_cast<char**>(cmdline), desc), vm);
+    }
+    catch (ambiguous_option& e)
+    {
+        BOOST_CHECK_EQUAL(e.alternatives().size(), 2);
+        BOOST_CHECK_EQUAL(e.get_option_name(), "-c");      
+        BOOST_CHECK_EQUAL(e.alternatives()[0], "cfgfile");
+        BOOST_CHECK_EQUAL(e.alternatives()[1], "output");
+    }
+}
+
+
+
+void test_unknown_option() 
+{
+   options_description desc;
+   desc.add_options()
+        ("cfgfile,c", value<string>(), "the configfile")
+      ;
+
+   const char* cmdline[] = {"program", "-c", "file", "-f", "anotherfile"};
+   
+   variables_map vm;
+   try {
+      store(parse_command_line(sizeof(cmdline)/sizeof(const char*), 
+                                    const_cast<char**>(cmdline), desc), vm);
+   }
+   catch (unknown_option& e)
+   {
+      BOOST_CHECK_EQUAL(e.get_option_name(), "-f");      
+      BOOST_CHECK_EQUAL(string(e.what()), "unrecognised option '-f'");
+   }
+}
+
+
+
+void test_multiple_values() 
+{
+   options_description desc;
+   desc.add_options()
+        ("cfgfile,c", value<string>()->multitoken(), "the config file")
+        ("output,o", value<string>(), "the output file")
+      ;
+
+   const char* cmdline[] = { "program", "-o", "fritz", "hugo", "--cfgfile", "file", "c", "-o", "text.out" };
+   
+   variables_map vm;
+   try {
+      store(parse_command_line(sizeof(cmdline)/sizeof(const char*), 
+                                    const_cast<char**>(cmdline), desc), vm);
+      notify(vm);
+   }
+   catch (validation_error& e)
+   {
+      // TODO: this is currently validation_error, shouldn't it be multiple_values ???
+      // 
+      //   multiple_values is thrown only at one place untyped_value::xparse(),
+      //    but I think this can never be reached
+      //   because: untyped_value always has one value and this is filtered before reach specific
+      //   validation and parsing
+      //
+      BOOST_CHECK_EQUAL(e.get_option_name(), "--cfgfile");      
+      BOOST_CHECK_EQUAL(string(e.what()), "option '--cfgfile' only takes a single argument");
+   }
+}
+
+
+
+void test_multiple_occurrences()
+{
+   options_description desc;
+   desc.add_options()
+        ("cfgfile,c", value<string>(), "the configfile")
+      ;
+
+   const char* cmdline[] = {"program", "--cfgfile", "file", "-c", "anotherfile"};
+   
+   variables_map vm;
+   try {
+      store(parse_command_line(sizeof(cmdline)/sizeof(const char*), 
+                                    const_cast<char**>(cmdline), desc), vm);
+      notify(vm);
+   }
+   catch (multiple_occurrences& e)
+   {
+      BOOST_CHECK_EQUAL(e.get_option_name(), "--cfgfile");      
+      BOOST_CHECK_EQUAL(string(e.what()), "option '--cfgfile' cannot be specified more than once");
+   }
+}
+
+
+
+void test_missing_value()
+{
+    options_description desc;
+    desc.add_options()
+        ("cfgfile,c", value<string>()->multitoken(), "the config file") 
+        ("output,o", value<string>(), "the output file")
+    ;
+    // missing value for option '-c'
+    const char* cmdline[] = { "program", "-c", "-c", "output.txt"};
+    
+    variables_map vm;
+    
+    try {
+      store(parse_command_line(sizeof(cmdline)/sizeof(const char*), 
+                                       const_cast<char**>(cmdline), desc), vm);
+      notify(vm);
+   } 
+   catch (invalid_command_line_syntax& e)
+   {
+      BOOST_CHECK_EQUAL(e.kind(), invalid_syntax::missing_parameter);
+      BOOST_CHECK_EQUAL(e.tokens(), "--cfgfile");
+   }
+}
+
+
+
+int main(int /*ac*/, char** /*av*/)
+{
+   test_ambiguous();
+   test_unknown_option();
+   test_multiple_values();
+   test_multiple_occurrences();
+   test_missing_value();
+
+   return 0;
+}
+
diff --git a/vendor/pdalboost/libs/program_options/test/exception_txt_test.cpp b/vendor/pdalboost/libs/program_options/test/exception_txt_test.cpp
new file mode 100644
index 0000000..1e8e9bb
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/exception_txt_test.cpp
@@ -0,0 +1,672 @@
+// Copyright Leo Goodstadt 2012
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <boost/program_options/parsers.hpp>
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/variables_map.hpp>
+#include <boost/program_options/cmdline.hpp>
+using namespace pdalboost::program_options;
+
+#include <iostream>
+#include <sstream>
+#include <vector>
+#include <cassert>
+using namespace std;
+
+#include "minitest.hpp"
+
+
+
+// 
+//  like BOOST_CHECK_EQUAL but with more descriptive error message
+//
+#define CHECK_EQUAL(description, a, b) if (a != b) {std::cerr << "\n\nError:\n<<" << \
+        description << ">>\n  Expected text=\"" << b << "\"\n  Actual text  =\"" << a << "\"\n\n"; assert(a == b);}
+
+
+// Uncomment for Debugging, removes asserts so we can see more failures!
+//#define BOOST_ERROR(description) std::cerr << description; std::cerr << "\n"; 
+
+
+//8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+// 
+//  Uncomment to print out the complete set of diagnostic messages for the different test cases
+/*
+#define CHECK_EQUAL(description, a, b) if (a != b) {std::cerr << "\n\nError:  " << \
+    description << "\n  Expecting\n" << b << "\n  Found\n" << a << "\n\n"; } \
+    else {std::cout << description<< "\t" << b << "\n";}
+*/ 
+
+//8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
+
+
+// 
+//  test exception for each specified command line style, e.g. short dash or config file
+//
+template<typename EXCEPTION>
+void test_each_exception_message(const string& test_description, const vector<const char*>& argv, options_description& desc, int style, string exception_msg, istream& is = cin)
+{
+    if (exception_msg.length() == 0)
+        return;
+    variables_map vm;
+    unsigned argc = argv.size();
+
+
+    try {
+        if (style == -1)
+            store(parse_config_file(is, desc), vm);
+        else
+            store(parse_command_line(argv.size(), &argv[0], desc, style), vm);
+        notify(vm);    
+    } 
+    catch (EXCEPTION& e)
+    {
+       //cerr << "Correct:\n\t" << e.what() << "\n";
+       CHECK_EQUAL(test_description, e.what(), exception_msg);
+       return;
+    }
+    catch (std::exception& e)
+    {
+        // concatenate argv without pdalboost::algorithm::join
+        string argv_txt;
+        for (unsigned ii = 0; ii < argc - 1; ++ii)
+            argv_txt += argv[ii] + string(" ");
+        if (argc)
+            argv_txt += argv[argc - 1];
+
+       BOOST_ERROR("\n<<" + test_description + 
+                    string(">>\n  Unexpected exception type!\n  Actual text  =\"") + e.what() + 
+                    "\"\n  argv         =\"" + argv_txt +
+                    "\"\n  Expected text=\"" + exception_msg + "\"\n");
+       return;
+    }
+    BOOST_ERROR(test_description + ": No exception thrown. ");
+}
+
+
+
+
+// 
+//  test exception messages for all command line styles (unix/long/short/slash/config file)
+//
+//      try each command line style in turn
+const int unix_style = command_line_style::unix_style;
+const int short_dash = command_line_style::allow_dash_for_short | command_line_style::allow_short | command_line_style::short_allow_adjacent | command_line_style::allow_sticky;
+const int short_slash = command_line_style::allow_slash_for_short | command_line_style::allow_short | command_line_style::short_allow_adjacent;
+const int long_dash = command_line_style::allow_long | command_line_style::long_allow_adjacent | command_line_style::allow_guessing;
+
+
+
+template<typename EXCEPTION>
+void test_exception_message(const vector<vector<const char*> >& argv,
+                            options_description& desc,
+                            const string& error_description, 
+                            const char* expected_message_template[5])
+{
+    string expected_message;
+
+    // unix
+    expected_message = expected_message_template[0];
+    test_each_exception_message<EXCEPTION>(error_description + " -- unix", 
+                                  argv[0], desc, unix_style, expected_message);
+
+    // long dash only
+    expected_message = expected_message_template[1];
+    test_each_exception_message<EXCEPTION>(error_description + " -- long_dash", 
+                                  argv[1], desc, long_dash, expected_message);
+
+
+    // short dash only
+    expected_message = expected_message_template[2];
+    test_each_exception_message<EXCEPTION>(error_description + " -- short_dash", 
+                                  argv[2], desc, short_dash, expected_message);
+
+    // short slash only
+    expected_message = expected_message_template[3];
+    test_each_exception_message<EXCEPTION>(error_description + " -- short_slash", 
+                                  argv[3], desc, short_slash, expected_message);
+
+    // config file only
+    expected_message = expected_message_template[4];
+    if (expected_message.length())
+    {
+        istringstream istrm(argv[4][0]);
+        test_each_exception_message<EXCEPTION>(error_description + " -- config_file", 
+                                          argv[4], desc, -1, expected_message, istrm);
+    }
+
+}
+
+#define VEC_STR_PUSH_BACK(vec, c_array)  \
+    vec.push_back(vector<const char*>(c_array, c_array + sizeof(c_array) / sizeof(char*)));
+
+//________________________________________________________________________________________
+// 
+//  invalid_option_value
+//
+//________________________________________________________________________________________
+void test_invalid_option_value_exception_msg()
+{
+    options_description desc;
+    desc.add_options()
+        ("int-option,d", value< int >(),        "An option taking an integer")
+    ;
+
+    vector<vector<const char*> > argv;
+    const char* argv0[] = { "program", "-d", "A_STRING"}   ;  VEC_STR_PUSH_BACK(argv, argv0);
+    const char* argv1[] = { "program", "--int", "A_STRING"};  VEC_STR_PUSH_BACK(argv, argv1); 
+    const char* argv2[] = { "program", "-d", "A_STRING"}   ;  VEC_STR_PUSH_BACK(argv, argv2);
+    const char* argv3[] = { "program", "/d", "A_STRING"}   ;  VEC_STR_PUSH_BACK(argv, argv3); 
+    const char* argv4[] = { "int-option=A_STRING"}         ;  VEC_STR_PUSH_BACK(argv, argv4); 
+
+    const char* expected_msg[5] = {
+                                "the argument ('A_STRING') for option '--int-option' is invalid", 
+                                "the argument ('A_STRING') for option '--int-option' is invalid", 
+                                "the argument ('A_STRING') for option '-d' is invalid", 
+                                "the argument ('A_STRING') for option '/d' is invalid", 
+                                "the argument ('A_STRING') for option 'int-option' is invalid",
+    };
+
+
+    test_exception_message<invalid_option_value>(argv, desc, "invalid_option_value",
+                                                 expected_msg);
+
+
+}
+
+//________________________________________________________________________________________
+// 
+//  missing_value
+//
+//________________________________________________________________________________________
+void test_missing_value_exception_msg()
+{
+    options_description desc;
+    desc.add_options()
+        ("cfgfile,e", value<string>(), "the config file") 
+        ("output,o", value<string>(), "the output file")
+    ;
+    vector<vector<const char*> > argv;
+    const char* argv0[] = { "program", "-e", "-e", "output.txt"} ; VEC_STR_PUSH_BACK(argv, argv0);
+    const char* argv1[] = { "program", "--cfgfile"}              ; VEC_STR_PUSH_BACK(argv, argv1); 
+    const char* argv2[] = { "program", "-e", "-e", "output.txt"} ; VEC_STR_PUSH_BACK(argv, argv2);
+    const char* argv3[] = { "program", "/e", "/e", "output.txt"} ; VEC_STR_PUSH_BACK(argv, argv3); 
+    const char* argv4[] = { ""}    ;      VEC_STR_PUSH_BACK(argv, argv4); 
+
+    const char* expected_msg[5] = {
+                                "the required argument for option '--cfgfile' is missing",
+                                "the required argument for option '--cfgfile' is missing",
+                                "the required argument for option '-e' is missing",
+                                "", // Ignore probable bug in cmdline::finish_option
+                                    //"the required argument for option '/e' is missing",
+                                "",
+    };
+    test_exception_message<invalid_command_line_syntax>(argv, desc, 
+                                                        "invalid_syntax::missing_parameter", 
+                                                        expected_msg);
+}
+
+//________________________________________________________________________________________
+// 
+//  ambiguous_option
+//
+//________________________________________________________________________________________
+void test_ambiguous_option_exception_msg()
+{
+    options_description desc; 
+    desc.add_options()
+        ("cfgfile1,c", value<string>(), "the config file") 
+        ("cfgfile2,o",  value<string>(), "the config file") 
+        ("good,g",                          "good option") 
+        ("output,c",   value<string>(), "the output file") 
+        ("output",     value<string>(), "the output file") 
+    ;
+
+    vector<vector<const char*> > argv;
+    const char* argv0[] = {"program", "-ggc", "file", "-o", "anotherfile"}             ; VEC_STR_PUSH_BACK(argv, argv0);
+    const char* argv1[] = {"program", "--cfgfile", "file", "--cfgfile", "anotherfile"} ; VEC_STR_PUSH_BACK(argv, argv1); 
+    const char* argv2[] = {"program", "-ggc", "file", "-o", "anotherfile"}             ; VEC_STR_PUSH_BACK(argv, argv2);
+    const char* argv3[] = {"program", "/c", "file", "/o", "anotherfile"}               ; VEC_STR_PUSH_BACK(argv, argv3); 
+    const char* argv4[] = { "output=output.txt\n"}                                     ; VEC_STR_PUSH_BACK(argv, argv4); 
+    const char* expected_msg[5] = {
+                                "option '-c' is ambiguous and matches '--cfgfile1', and '--output'",
+                                "option '--cfgfile' is ambiguous and matches '--cfgfile1', and '--cfgfile2'",
+                                "option '-c' is ambiguous",
+                                "option '/c' is ambiguous",
+                                "option 'output' is ambiguous and matches different versions of 'output'",
+    };
+    test_exception_message<ambiguous_option>(argv, desc, "ambiguous_option",
+                                             expected_msg);
+}
+
+//________________________________________________________________________________________
+// 
+//  multiple_occurrences
+//
+//________________________________________________________________________________________
+void test_multiple_occurrences_exception_msg()
+{
+    options_description desc; 
+    desc.add_options()
+                ("cfgfile,c", value<string>(), "the configfile")
+    ;
+
+    vector<vector<const char*> > argv;
+    const char* argv0[] = {"program", "-c", "file", "-c", "anotherfile"}           ; VEC_STR_PUSH_BACK(argv, argv0);
+    const char* argv1[] = {"program", "--cfgfi", "file", "--cfgfi", "anotherfile"} ; VEC_STR_PUSH_BACK(argv, argv1); 
+    const char* argv2[] = {"program", "-c", "file", "-c", "anotherfile"}           ; VEC_STR_PUSH_BACK(argv, argv2);
+    const char* argv3[] = {"program", "/c", "file", "/c", "anotherfile"}           ; VEC_STR_PUSH_BACK(argv, argv3); 
+    const char* argv4[] = { "cfgfile=output.txt\ncfgfile=output.txt\n"}            ; VEC_STR_PUSH_BACK(argv, argv4); 
+    const char* expected_msg[5] = {
+                                "option '--cfgfile' cannot be specified more than once",
+                                "option '--cfgfile' cannot be specified more than once",
+                                "option '-c' cannot be specified more than once",
+                                "option '/c' cannot be specified more than once",
+                                "option 'cfgfile' cannot be specified more than once",
+    };
+    test_exception_message<multiple_occurrences>(argv, desc, "multiple_occurrences",
+                                                expected_msg);
+}
+
+//________________________________________________________________________________________
+// 
+//  unknown_option
+//
+//________________________________________________________________________________________
+void test_unknown_option_exception_msg()
+{
+    options_description desc; 
+    desc.add_options()
+        ("good,g",                          "good option") 
+    ;
+
+    vector<vector<const char*> > argv;
+    const char* argv0[] = {"program", "-ggc", "file"}      ; VEC_STR_PUSH_BACK(argv, argv0);
+    const char* argv1[] = {"program", "--cfgfile", "file"} ; VEC_STR_PUSH_BACK(argv, argv1); 
+    const char* argv2[] = {"program", "-ggc", "file"}      ; VEC_STR_PUSH_BACK(argv, argv2);
+    const char* argv3[] = {"program", "/c", "file"}        ; VEC_STR_PUSH_BACK(argv, argv3); 
+    const char* argv4[] = { "cfgfile=output.txt\n"}        ; VEC_STR_PUSH_BACK(argv, argv4); 
+    const char* expected_msg[5] = {
+                                "unrecognised option '-ggc'",
+                                "unrecognised option '--cfgfile'",
+                                "unrecognised option '-ggc'",
+                                "unrecognised option '/c'",
+                                "unrecognised option 'cfgfile'",
+    };
+    test_exception_message<unknown_option>(argv, desc, "unknown_option", expected_msg);
+}
+
+//________________________________________________________________________________________
+// 
+//  validation_error::invalid_bool_value
+//
+//________________________________________________________________________________________
+void test_invalid_bool_value_exception_msg()
+{
+    options_description desc; 
+    desc.add_options()
+        ("bool_option,b",       value< bool>(), "bool_option")
+        ;
+
+
+    vector<vector<const char*> > argv;
+    const char* argv0[] = {"program", "-b", "file"}           ; VEC_STR_PUSH_BACK(argv, argv0);
+    const char* argv1[] = {"program", "--bool_optio", "file"} ; VEC_STR_PUSH_BACK(argv, argv1); 
+    const char* argv2[] = {"program", "-b", "file"}           ; VEC_STR_PUSH_BACK(argv, argv2);
+    const char* argv3[] = {"program", "/b", "file"}           ; VEC_STR_PUSH_BACK(argv, argv3); 
+    const char* argv4[] = { "bool_option=output.txt\n"}       ; VEC_STR_PUSH_BACK(argv, argv4); 
+    const char* expected_msg[5] = {                               
+                                "the argument ('file') for option '--bool_option' is invalid. Valid choices are 'on|off', 'yes|no', '1|0' and 'true|false'",
+                                "the argument ('file') for option '--bool_option' is invalid. Valid choices are 'on|off', 'yes|no', '1|0' and 'true|false'",
+                                "the argument ('file') for option '-b' is invalid. Valid choices are 'on|off', 'yes|no', '1|0' and 'true|false'",
+                                "the argument ('file') for option '/b' is invalid. Valid choices are 'on|off', 'yes|no', '1|0' and 'true|false'",
+                                "the argument ('output.txt') for option 'bool_option' is invalid. Valid choices are 'on|off', 'yes|no', '1|0' and 'true|false'",
+    };
+    test_exception_message<validation_error>(argv, 
+                                desc,
+                                "validation_error::invalid_bool_value",
+                                expected_msg);
+}
+
+
+
+
+//________________________________________________________________________________________
+// 
+//  validation_error::multiple_values_not_allowed
+//
+//________________________________________________________________________________________
+//
+//  Strange exception: sole purpose seems to be catching multitoken() associated with a scalar
+//  validation_error::multiple_values_not_allowed seems thus to be a programmer error
+//  
+//
+void test_multiple_values_not_allowed_exception_msg()
+{
+    options_description desc; 
+    desc.add_options()
+         ("cfgfile,c", value<string>()->multitoken(), "the config file")
+         ("good,g",                                     "good option")
+         ("output,o", value<string>(),                  "the output file")
+       ;
+
+    vector<vector<const char*> > argv;
+    const char* argv0[] = { "program", "-c", "file", "c", "-o", "fritz", "hugo" }              ;      VEC_STR_PUSH_BACK(argv, argv0);
+    const char* argv1[] = { "program", "--cfgfil", "file", "c", "--outpu", "fritz", "hugo" }   ;      VEC_STR_PUSH_BACK(argv, argv1); 
+    const char* argv2[] = { "program", "-c", "file", "c", "-o", "fritz", "hugo"}               ;      VEC_STR_PUSH_BACK(argv, argv2);
+    const char* argv3[] = { "program", "/c", "file", "c", "/o", "fritz", "hugo"}               ;      VEC_STR_PUSH_BACK(argv, argv3); 
+    const char* argv4[] = { "" }                                                               ;      VEC_STR_PUSH_BACK(argv, argv4); 
+    const char* expected_msg[5] = {                               
+                                "option '--cfgfile' only takes a single argument",
+                                "option '--cfgfile' only takes a single argument",
+                                "option '-c' only takes a single argument",
+                                "option '/c' only takes a single argument",
+                                "",
+    };
+    test_exception_message<validation_error>(argv, 
+                                desc,
+                                "validation_error::multiple_values_not_allowed",
+                                expected_msg);
+}
+
+//________________________________________________________________________________________
+// 
+//  validation_error::at_least_one_value_required
+//
+//________________________________________________________________________________________
+//
+//  Strange exception: sole purpose seems to be catching zero_tokens() associated with a scalar
+//  validation_error::multiple_values_not_allowed seems thus to be a programmer error
+//  
+//
+void test_at_least_one_value_required_exception_msg()
+{
+
+
+    options_description desc; 
+    desc.add_options()
+         ("cfgfile,c", value<int>()->zero_tokens(), "the config file")
+         ("other,o", value<string>(), "other")
+       ;
+
+    vector<vector<const char*> > argv;
+    const char* argv0[] = { "program", "-c"                       }  ;      VEC_STR_PUSH_BACK(argv, argv0);
+    const char* argv1[] = { "program", "--cfg", "--o", "name"     }  ;      VEC_STR_PUSH_BACK(argv, argv1); 
+    const char* argv2[] = { "program", "-c"   , "-o"   , "name"   }  ;      VEC_STR_PUSH_BACK(argv, argv2);
+    const char* argv3[] = { "program", "/c"                       }  ;      VEC_STR_PUSH_BACK(argv, argv3); 
+    const char* argv4[] = { ""                                    }  ;      VEC_STR_PUSH_BACK(argv, argv4); 
+    const char* expected_msg[5] = {                               
+                                "option '--cfgfile' requires at least one argument",
+                                "option '--cfgfile' requires at least one argument",
+                                "option '-c' requires at least one argument",
+                                "option '/c' requires at least one argument",
+                                "",
+    };
+    test_exception_message<validation_error>(argv, 
+                                desc,
+                                "validation_error::at_least_one_value_required",
+                                expected_msg);
+}
+
+
+//________________________________________________________________________________________
+// 
+//  required_option
+//
+//________________________________________________________________________________________
+void test_required_option_exception_msg()
+{
+    options_description desc; 
+    desc.add_options()
+         ("cfgfile,c", value<string>()->required(), "the config file")
+         ("good,g",                                 "good option")
+         ("output,o", value<string>()->required(),  "the output file")
+       ;
+
+    vector<vector<const char*> > argv;            
+    const char* argv0[] = { "program", "-g" }    ;      VEC_STR_PUSH_BACK(argv, argv0);
+    const char* argv1[] = { "program", "--g" }   ;      VEC_STR_PUSH_BACK(argv, argv1); 
+    const char* argv2[] = { "program", "-g"}     ;      VEC_STR_PUSH_BACK(argv, argv2);
+    const char* argv3[] = { "program", "/g"}     ;      VEC_STR_PUSH_BACK(argv, argv3); 
+    const char* argv4[] = { "" }                 ;      VEC_STR_PUSH_BACK(argv, argv4); 
+    const char* expected_msg[5] = {                               
+                                "the option '--cfgfile' is required but missing",
+                                "the option '--cfgfile' is required but missing",
+                                "the option '-c' is required but missing",
+                                "the option '/c' is required but missing",
+                                "the option 'cfgfile' is required but missing",
+    };
+    test_exception_message<required_option>(argv, 
+                                desc,
+                                "required_option",
+                                expected_msg);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/** 
+ * Check if this is the expected exception with the right message is being thrown inside 
+ * func 
+*/
+template <typename EXCEPTION, typename FUNC>
+void test_exception(const string& test_name, const string& exception_txt, FUNC func)
+{
+
+    try {
+        options_description desc; 
+        variables_map vm;
+        func(desc, vm);
+    } 
+    catch (EXCEPTION& e)
+    {
+       CHECK_EQUAL(test_name, e.what(), exception_txt);
+       return;
+    }
+    catch (std::exception& e)
+    {
+       BOOST_ERROR(string(test_name + ":\nUnexpected exception. ") + e.what() + 
+                   "\nExpected text:\n" + exception_txt + "\n\n");
+       return;
+    }
+    BOOST_ERROR(test_name + ": No exception thrown. ");
+}
+
+
+
+//________________________________________________________________________________________
+// 
+//  check_reading_file
+//
+//________________________________________________________________________________________
+void check_reading_file(options_description& desc, variables_map& vm)
+{
+    desc.add_options()
+         ("output,o", value<string>(), "the output file");
+    
+    const char* file_name = "no_such_file";
+    store(parse_config_file<char>(file_name, desc, true), vm);
+
+}
+
+
+//________________________________________________________________________________________
+// 
+//  config_file_wildcard
+//
+//________________________________________________________________________________________
+void config_file_wildcard(options_description& desc, variables_map& vm)
+{
+    desc.add_options()
+         ("outpu*", value<string>(), "the output file1")
+         ("outp*",    value<string>(), "the output file2")
+       ;
+    istringstream is("output1=whichone\noutput2=whichone\n");
+    store(parse_config_file(is, desc), vm);
+}
+
+//________________________________________________________________________________________
+// 
+//  invalid_syntax::unrecognized_line
+//
+//________________________________________________________________________________________
+void unrecognized_line(options_description& desc, variables_map& vm)
+{
+    istringstream is("funny wierd line\n");
+    store(parse_config_file(is, desc), vm);
+}
+
+//________________________________________________________________________________________
+// 
+//  abbreviated_options_in_config_file
+//
+//________________________________________________________________________________________
+void abbreviated_options_in_config_file(options_description& desc, variables_map& vm)
+{
+    desc.add_options()(",o", value<string>(), "the output file");
+    istringstream is("o=output.txt\n");
+    store(parse_config_file(is, desc), vm);
+}
+
+
+//________________________________________________________________________________________
+// 
+//  too_many_positional_options
+//
+//________________________________________________________________________________________
+void too_many_positional_options(options_description& desc, variables_map& vm)
+{
+    const char* argv[] = {"program", "1", "2", "3"};
+    positional_options_description positional_args;
+    positional_args.add("two_positional_arguments", 2);
+    store(command_line_parser(4, argv).options(desc).positional(positional_args).run(), vm);
+}
+
+
+//________________________________________________________________________________________
+// 
+//  invalid_command_line_style
+//
+//________________________________________________________________________________________
+
+void test_invalid_command_line_style_exception_msg()
+{
+    string test_name = "invalid_command_line_style";
+    using namespace command_line_style;
+    options_description desc; 
+    desc.add_options()("output,o", value<string>(), "the output file");
+
+    vector<int> invalid_styles;
+    invalid_styles.push_back(allow_short | short_allow_adjacent);
+    invalid_styles.push_back(allow_short | allow_dash_for_short);
+    invalid_styles.push_back(allow_long);
+    vector<string> invalid_diagnostics;
+    invalid_diagnostics.push_back("pdalboost::program_options misconfiguration: choose one "
+                                  "or other of 'command_line_style::allow_slash_for_short' "
+                                  "(slashes) or 'command_line_style::allow_dash_for_short' "
+                                  "(dashes) for short options.");
+    invalid_diagnostics.push_back("pdalboost::program_options misconfiguration: choose one "
+                                  "or other of 'command_line_style::short_allow_next' "
+                                  "(whitespace separated arguments) or "
+                                  "'command_line_style::short_allow_adjacent' ('=' "
+                                  "separated arguments) for short options.");
+    invalid_diagnostics.push_back("pdalboost::program_options misconfiguration: choose one "
+                                  "or other of 'command_line_style::long_allow_next' "
+                                  "(whitespace separated arguments) or "
+                                  "'command_line_style::long_allow_adjacent' ('=' "
+                                  "separated arguments) for long options.");
+
+
+    const char* argv[] = {"program"};
+    variables_map vm;
+    for (unsigned ii = 0; ii < 3; ++ii)
+    {
+        bool exception_thrown = false;
+        try
+        {
+            store(parse_command_line(1, argv, desc, invalid_styles[ii]), vm);
+        }
+        catch (invalid_command_line_style& e)
+        {
+           string error_msg("arguments are not allowed for unabbreviated option names");
+           CHECK_EQUAL(test_name, e.what(), invalid_diagnostics[ii]);
+           exception_thrown = true;
+        }
+        catch (std::exception& e)
+        {
+           BOOST_ERROR(string(test_name + ":\nUnexpected exception. ") + e.what() + 
+                            "\nExpected text:\n" + invalid_diagnostics[ii] + "\n");
+           exception_thrown = true;
+        }
+        if (!exception_thrown)
+        {
+            BOOST_ERROR(test_name << ": No exception thrown. ");
+        }
+    }
+}
+
+
+
+int main(int /*ac*/, char** /*av*/)
+{
+   test_ambiguous_option_exception_msg();
+   test_unknown_option_exception_msg();
+   test_multiple_occurrences_exception_msg();
+   test_missing_value_exception_msg();
+   test_invalid_option_value_exception_msg();
+   test_invalid_bool_value_exception_msg();
+   test_multiple_values_not_allowed_exception_msg();
+   test_required_option_exception_msg();
+   test_at_least_one_value_required_exception_msg();
+
+   string test_name;
+   string expected_message;
+
+
+   // check_reading_file
+   test_name        = "check_reading_file";
+   expected_message = "can not read options configuration file 'no_such_file'";
+   test_exception<reading_file>(test_name, expected_message, check_reading_file);
+
+   // config_file_wildcard
+   test_name        = "config_file_wildcard";
+   expected_message = "options 'outpu*' and 'outp*' will both match the same arguments from the configuration file";
+   test_exception<error>(test_name, expected_message, config_file_wildcard);
+
+   // unrecognized_line
+   test_name        = "unrecognized_line";
+   expected_message = "the options configuration file contains an invalid line 'funny wierd line'";
+   test_exception<invalid_syntax>(test_name, expected_message, unrecognized_line);
+
+
+   // abbreviated_options_in_config_file
+   test_name        = "abbreviated_options_in_config_file";
+   expected_message = "abbreviated option names are not permitted in options configuration files";
+   test_exception<error>(test_name, expected_message, abbreviated_options_in_config_file);
+
+   test_name        = "too_many_positional_options";
+   expected_message = "too many positional options have been specified on the command line";
+   test_exception<too_many_positional_options_error>(
+                          test_name, expected_message, too_many_positional_options);
+
+   test_invalid_command_line_style_exception_msg();
+
+
+   return 0;
+}
+
diff --git a/vendor/pdalboost/libs/program_options/test/minitest.hpp b/vendor/pdalboost/libs/program_options/test/minitest.hpp
new file mode 100644
index 0000000..7d38efd
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/minitest.hpp
@@ -0,0 +1,25 @@
+#ifndef BOOST_PROGRAM_OPTIONS_MINITEST
+#define BOOST_PROGRAM_OPTIONS_MINITEST
+
+#include <assert.h>
+#include <iostream>
+#include <stdlib.h>
+
+#define BOOST_REQUIRE(b) assert(b)
+#define BOOST_CHECK(b) assert(b)
+#define BOOST_CHECK_EQUAL(a, b) assert(a == b)
+#define BOOST_ERROR(description) std::cerr << description; std::cerr << "\n"; abort();
+#define BOOST_CHECK_THROW(expression, exception) \
+    try \
+    { \
+        expression; \
+        BOOST_ERROR("expected exception not thrown");\
+        throw 10; \
+    } \
+    catch(exception &) \
+    { \
+    }
+
+
+
+#endif
diff --git a/vendor/pdalboost/libs/program_options/test/options_description_test.cpp b/vendor/pdalboost/libs/program_options/test/options_description_test.cpp
new file mode 100644
index 0000000..8ee49ae
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/options_description_test.cpp
@@ -0,0 +1,261 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <boost/program_options/options_description.hpp>
+using namespace pdalboost::program_options;
+
+#include <boost/function.hpp>
+using namespace pdalboost;
+
+#include <utility>
+#include <string>
+#include <sstream>
+using namespace std;
+
+#include "minitest.hpp"
+
+void test_type()
+{
+    options_description desc;
+    desc.add_options()
+        ("foo", value<int>(), "")
+        ("bar", value<string>(), "")
+        ;
+    
+#ifndef BOOST_NO_RTTI
+    const typed_value_base* b = dynamic_cast<const typed_value_base*>
+        (desc.find("foo", false).semantic().get());
+    BOOST_CHECK(b);
+    BOOST_CHECK(b->value_type() == typeid(int));
+
+    const typed_value_base* b2 = dynamic_cast<const typed_value_base*>
+        (desc.find("bar", false).semantic().get());
+    BOOST_CHECK(b2);
+    BOOST_CHECK(b2->value_type() == typeid(string));
+#endif
+}
+
+void test_approximation()
+{
+    options_description desc;
+    desc.add_options()
+        ("foo", new untyped_value())
+        ("fee", new untyped_value())
+        ("baz", new untyped_value())
+        ("all-chroots", new untyped_value())
+        ("all-sessions", new untyped_value())
+        ("all", new untyped_value())
+        ;
+
+    BOOST_CHECK_EQUAL(desc.find("fo", true).long_name(), "foo");
+
+    BOOST_CHECK_EQUAL(desc.find("all", true).long_name(), "all");
+    BOOST_CHECK_EQUAL(desc.find("all-ch", true).long_name(), "all-chroots");
+
+    options_description desc2;
+    desc2.add_options()
+        ("help", "display this message")
+        ("config", value<string>(), "config file name")
+        ("config-value", value<string>(), "single config value")
+        ;
+
+    BOOST_CHECK_EQUAL(desc2.find("config", true).long_name(), "config");
+    BOOST_CHECK_EQUAL(desc2.find("config-value", true).long_name(), 
+                      "config-value");
+
+
+//    BOOST_CHECK(desc.count_approx("foo") == 1);
+//    set<string> a = desc.approximations("f");
+//    BOOST_CHECK(a.size() == 2);
+//    BOOST_CHECK(*a.begin() == "fee");
+//    BOOST_CHECK(*(++a.begin()) == "foo");
+}
+
+void test_formatting()
+{
+    // Long option descriptions used to crash on MSVC-8.0.
+    options_description desc;
+    desc.add_options()(
+        "test", new untyped_value(),
+        "foo foo foo foo foo foo foo foo foo foo foo foo foo foo"
+        "foo foo foo foo foo foo foo foo foo foo foo foo foo foo"
+        "foo foo foo foo foo foo foo foo foo foo foo foo foo foo"
+        "foo foo foo foo foo foo foo foo foo foo foo foo foo foo")
+      ("list", new untyped_value(),
+         "a list:\n      \t"
+             "item1, item2, item3, item4, item5, item6, item7, item8, item9, "
+             "item10, item11, item12, item13, item14, item15, item16, item17, item18")
+      ("well_formated", new untyped_value(), 
+                        "As you can see this is a very well formatted option description.\n"
+                        "You can do this for example:\n\n"
+                        "Values:\n"
+                        "  Value1: \tdoes this and that, bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla\n"
+                        "  Value2: \tdoes something else, bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla\n\n"
+                        "    This paragraph has a first line indent only, bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla")
+      ;
+
+    stringstream ss;
+    ss << desc;
+    BOOST_CHECK_EQUAL(ss.str(),
+"  --test arg            foo foo foo foo foo foo foo foo foo foo foo foo foo \n"
+"                        foofoo foo foo foo foo foo foo foo foo foo foo foo foo \n"
+"                        foofoo foo foo foo foo foo foo foo foo foo foo foo foo \n"
+"                        foofoo foo foo foo foo foo foo foo foo foo foo foo foo \n"
+"                        foo\n"
+"  --list arg            a list:\n"
+"                              item1, item2, item3, item4, item5, item6, item7, \n"
+"                              item8, item9, item10, item11, item12, item13, \n"
+"                              item14, item15, item16, item17, item18\n"
+"  --well_formated arg   As you can see this is a very well formatted option \n"
+"                        description.\n"
+"                        You can do this for example:\n"
+"                        \n"
+"                        Values:\n"
+"                          Value1: does this and that, bla bla bla bla bla bla \n"
+"                                  bla bla bla bla bla bla bla bla bla\n"
+"                          Value2: does something else, bla bla bla bla bla bla \n"
+"                                  bla bla bla bla bla bla bla bla bla\n"
+"                        \n"
+"                            This paragraph has a first line indent only, bla \n"
+"                        bla bla bla bla bla bla bla bla bla bla bla bla bla bla\n"
+   );
+}
+
+void test_formatting_description_length()
+{
+    {
+        options_description desc("",
+                                 options_description::m_default_line_length,
+                                 options_description::m_default_line_length / 2U);
+        desc.add_options()
+            ("an-option-that-sets-the-max", new untyped_value(), // > 40 available for desc
+            "this description sits on the same line, but wrapping should still work correctly")
+            ("a-long-option-that-would-leave-very-little-space-for-description", new untyped_value(),
+            "the description of the long opt, but placed on the next line\n"
+            "    \talso ensure that the tabulation works correctly when a"
+            " description size has been set");
+
+        stringstream ss;
+        ss << desc;
+        BOOST_CHECK_EQUAL(ss.str(),
+        "  --an-option-that-sets-the-max arg     this description sits on the same line,\n"
+        "                                        but wrapping should still work \n"
+        "                                        correctly\n"
+        "  --a-long-option-that-would-leave-very-little-space-for-description arg\n"
+        "                                        the description of the long opt, but \n"
+        "                                        placed on the next line\n"
+        "                                            also ensure that the tabulation \n"
+        "                                            works correctly when a description \n"
+        "                                            size has been set\n");
+    }
+    {
+        // the default behaviour reserves 23 (+1 space) characters for the
+        // option column; this shows that the min_description_length does not
+        // breach that.
+        options_description desc("",
+                                 options_description::m_default_line_length,
+                                 options_description::m_default_line_length - 10U); // leaves < 23 (default option space)
+        desc.add_options()
+            ("an-option-that-encroaches-description", new untyped_value(),
+            "this description should always be placed on the next line, and wrapping should continue as normal");
+
+        stringstream ss;
+        ss << desc;
+        BOOST_CHECK_EQUAL(ss.str(),
+        "  --an-option-that-encroaches-description arg\n"
+       //123456789_123456789_
+        "          this description should always be placed on the next line, and \n"
+        "          wrapping should continue as normal\n");
+    }
+}
+
+void test_long_default_value()
+{
+    options_description desc;
+    desc.add_options()
+        ("cfgfile,c",
+         value<string>()->default_value("/usr/local/etc/myprogramXXXXXXXXX/configuration.conf"),
+         "the configfile")
+       ;
+
+    stringstream ss;
+    ss << desc;
+    BOOST_CHECK_EQUAL(ss.str(),
+"  -c [ --cfgfile ] arg (=/usr/local/etc/myprogramXXXXXXXXX/configuration.conf)\n"
+"                                        the configfile\n"
+   );
+}
+
+void test_word_wrapping()
+{
+   options_description desc("Supported options");
+   desc.add_options()
+      ("help",    "this is a sufficiently long text to require word-wrapping")
+      ("prefix", value<string>()->default_value("/h/proj/tmp/dispatch"), "root path of the dispatch installation")
+      ("opt1",    "this_is_a_sufficiently_long_text_to_require_word-wrapping_but_cannot_be_wrapped")
+      ("opt2",    "this_is_a_sufficiently long_text_to_require_word-wrapping")
+      ("opt3",    "this_is_a sufficiently_long_text_to_require_word-wrapping_but_will_not_be_wrapped")
+      ;
+    stringstream ss;
+    ss << desc;    
+    BOOST_CHECK_EQUAL(ss.str(),
+"Supported options:\n"
+"  --help                               this is a sufficiently long text to \n"
+"                                       require word-wrapping\n"
+"  --prefix arg (=/h/proj/tmp/dispatch) root path of the dispatch installation\n"
+"  --opt1                               this_is_a_sufficiently_long_text_to_requ\n"
+"                                       ire_word-wrapping_but_cannot_be_wrapped\n"
+"  --opt2                               this_is_a_sufficiently \n"
+"                                       long_text_to_require_word-wrapping\n"
+"  --opt3                               this_is_a sufficiently_long_text_to_requ\n"
+"                                       ire_word-wrapping_but_will_not_be_wrappe\n"
+"                                       d\n"
+   );
+}
+
+void test_default_values()
+{
+   options_description desc("Supported options");
+   desc.add_options()
+      ("maxlength", value<double>()->default_value(.1, "0.1"), "Maximum edge length to keep.")
+      ;
+   stringstream ss;
+   ss << desc;    
+   BOOST_CHECK_EQUAL(ss.str(),
+"Supported options:\n"
+"  --maxlength arg (=0.1) Maximum edge length to keep.\n"
+   );   
+}
+
+void test_value_name()
+{
+    options_description desc("Supported options");
+    desc.add_options()
+        ("include", value<string>()->value_name("directory"), "Search for headers in 'directory'.")
+        ;
+
+    stringstream ss;
+    ss << desc;
+   BOOST_CHECK_EQUAL(ss.str(),
+"Supported options:\n"
+"  --include directory   Search for headers in 'directory'.\n"
+   );
+}
+
+
+int main(int, char* [])
+{
+    test_type();
+    test_approximation();
+    test_formatting();
+    test_formatting_description_length();
+    test_long_default_value();
+    test_word_wrapping();
+    test_default_values();
+    test_value_name();
+    return 0;
+}
+
diff --git a/vendor/pdalboost/libs/program_options/test/parsers_test.cpp b/vendor/pdalboost/libs/program_options/test/parsers_test.cpp
new file mode 100644
index 0000000..8ac028b
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/parsers_test.cpp
@@ -0,0 +1,327 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <boost/program_options/parsers.hpp>
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/variables_map.hpp>
+using namespace pdalboost::program_options;
+// We'll use po::value everywhere to workaround vc6 bug.
+namespace po = pdalboost::program_options;
+
+#include <boost/function.hpp>
+using namespace pdalboost;
+
+#include <sstream>
+#include <iostream>
+using namespace std;
+
+#if defined(__sun)
+#include <stdlib.h> // for putenv on solaris
+#else
+#include <cstdlib> // for putenv
+#endif
+
+#include "minitest.hpp"
+
+#define TEST_CHECK_THROW(expression, exception, description) \
+    try \
+    { \
+        expression; \
+        BOOST_ERROR(description);\
+        throw 10; \
+    } \
+    catch(exception &) \
+    { \
+    }
+
+pair<string, vector< vector<string> > > msp(const string& s1)
+{
+    return std::make_pair(s1, vector< vector<string> >());
+}
+
+
+pair<string, vector< vector<string> > > msp(const string& s1, const string& s2)
+{
+    vector< vector<string> > v(1);
+    v[0].push_back(s2);
+    return std::make_pair(s1, v);
+}
+
+void check_value(const option& option, const char* name, const char* value)
+{
+    BOOST_CHECK(option.string_key == name);
+    BOOST_REQUIRE(option.value.size() == 1);
+    BOOST_CHECK(option.value.front() == value);
+}
+
+vector<string> sv(const char* array[], unsigned size)
+{
+    vector<string> r;
+    for (unsigned i = 0; i < size; ++i)
+        r.push_back(array[i]);
+    return r;
+}
+
+pair<string, string> additional_parser(const std::string&)
+{
+    return pair<string, string>();
+}
+
+void test_command_line()
+{
+    // The following commented out blocks used to test parsing
+    // command line without syntax specification behaviour.
+    // It is disabled now and probably will never be enabled again:
+    // it is not possible to figure out what command line means without
+    // user's help.
+    #if 0
+    char* cmdline1[] = { "--a", "--b=12", "-f", "-g4", "-", "file" };
+
+    options_and_arguments a1 =
+        parse_command_line(cmdline1,
+                           cmdline1 + sizeof(cmdline1)/sizeof(cmdline1[0]));
+
+    BOOST_REQUIRE(a1.options().size() == 4);
+    BOOST_CHECK(a1.options()[0] == msp("a", ""));
+    BOOST_CHECK(a1.options()[1] == msp("b", "12"));
+    BOOST_CHECK(a1.options()[2] == msp("-f", ""));
+    BOOST_CHECK(a1.options()[3] == msp("-g", "4"));
+    BOOST_REQUIRE(a1.arguments().size() == 2);
+    BOOST_CHECK(a1.arguments()[0] == "-");
+    BOOST_CHECK(a1.arguments()[1] == "file");
+
+    char* cmdline2[] = { "--a", "--", "file" };
+
+    options_and_arguments a2 =
+        parse_command_line(cmdline2,
+                           cmdline2 + sizeof(cmdline2)/sizeof(cmdline2[0]));
+
+    BOOST_REQUIRE(a2.options().size() == 1);
+    BOOST_CHECK(a2.options()[0] == msp("a", ""));
+    BOOST_CHECK(a2.arguments().size() == 1);
+    BOOST_CHECK(a2.arguments()[0] == "file");
+    #endif
+    
+    options_description desc;
+    desc.add_options()
+        ("foo,f", new untyped_value(), "")
+        // Explicit qualification is a workaround for vc6
+        ("bar,b", po::value<std::string>(), "")
+        ("baz", new untyped_value())
+        ("plug*", new untyped_value())
+        ;
+    const char* cmdline3_[] = { "--foo=12", "-f4", "--bar=11", "-b4",
+                          "--plug3=10"};
+    vector<string> cmdline3 = sv(cmdline3_,
+                                 sizeof(cmdline3_)/sizeof(const char*));
+    vector<option> a3 = 
+        command_line_parser(cmdline3).options(desc).run().options;
+                       
+    BOOST_CHECK_EQUAL(a3.size(), 5u);
+
+    check_value(a3[0], "foo", "12");
+    check_value(a3[1], "foo", "4");
+    check_value(a3[2], "bar", "11");
+    check_value(a3[3], "bar", "4");
+    check_value(a3[4], "plug3", "10");
+
+    // Regression test: check that '0' as style is interpreted as 
+    // 'default_style'
+    vector<option> a4 = 
+        parse_command_line(sizeof(cmdline3_)/sizeof(const char*), cmdline3_, 
+                                                               desc, 0, additional_parser).options;
+
+    BOOST_CHECK_EQUAL(a4.size(), 4u);
+    check_value(a4[0], "foo", "4");
+    check_value(a4[1], "bar", "11");
+
+    // Check that we don't crash on empty values of type 'string'
+    const char* cmdline4[] = {"", "--open", ""};
+    options_description desc2;
+    desc2.add_options()
+        ("open", po::value<string>())
+        ;
+    variables_map vm;
+    po::store(po::parse_command_line(sizeof(cmdline4)/sizeof(const char*), const_cast<char**>(cmdline4), desc2), vm);
+
+    const char* cmdline5[] = {"", "-p7", "-o", "1", "2", "3", "-x8"};
+    options_description desc3;
+    desc3.add_options()
+        (",p", po::value<string>())
+        (",o", po::value<string>()->multitoken())
+        (",x", po::value<string>())
+        ;
+    vector<option> a5 = 
+        parse_command_line(sizeof(cmdline5)/sizeof(const char*), const_cast<char**>(cmdline5), 
+                                                                     desc3, 0, additional_parser).options;
+    BOOST_CHECK_EQUAL(a5.size(), 3u);
+    check_value(a5[0], "-p", "7");
+    BOOST_REQUIRE(a5[1].value.size() == 3);
+    BOOST_CHECK_EQUAL(a5[1].string_key, "-o");
+    BOOST_CHECK_EQUAL(a5[1].value[0], "1");
+    BOOST_CHECK_EQUAL(a5[1].value[1], "2");
+    BOOST_CHECK_EQUAL(a5[1].value[2], "3");
+    check_value(a5[2], "-x", "8");   
+
+
+    po::options_description desc4( "" );
+    desc4.add_options()
+        ( "multitoken,m",
+          po::value< std::vector< std::string > >()->multitoken(),
+          "values"
+            )
+        ( "file",
+          po::value< std::string >(),
+          "the file to process"
+            )
+        ;
+
+    po::positional_options_description p;
+    p.add( "file", 1 );
+
+    const char* cmdline6[] = {"", "-m", "token1", "token2", "--", "some_file"};
+    vector<option> a6 = 
+        command_line_parser(sizeof(cmdline6)/sizeof(const char*), const_cast<char**>(cmdline6)).options(desc4).positional(p)
+        .run().options;
+    BOOST_CHECK_EQUAL(a6.size(), 2u);
+    BOOST_REQUIRE(a6[0].value.size() == 2);
+    BOOST_CHECK_EQUAL(a6[0].string_key, "multitoken");
+    BOOST_CHECK_EQUAL(a6[0].value[0], "token1");
+    BOOST_CHECK_EQUAL(a6[0].value[1], "token2");
+    BOOST_CHECK_EQUAL(a6[1].string_key, "file");
+    BOOST_REQUIRE(a6[1].value.size() == 1);
+    BOOST_CHECK_EQUAL(a6[1].value[0], "some_file");
+}
+
+void test_config_file(const char* config_file)
+{
+    options_description desc;
+    desc.add_options()
+        ("gv1", new untyped_value)
+        ("gv2", new untyped_value)
+        ("empty_value", new untyped_value)
+        ("plug*", new untyped_value)
+        ("m1.v1", new untyped_value)
+        ("m1.v2", new untyped_value)
+        ("b", bool_switch())
+    ;
+
+    const char content1[] =
+    " gv1 = 0#asd\n"
+    "empty_value = \n"
+    "plug3 = 7\n"
+    "b = true\n"
+    "[m1]\n"
+    "v1 = 1\n"
+    "\n"
+    "v2 = 2\n"    
+    ;
+
+    stringstream ss(content1);
+    vector<option> a1 = parse_config_file(ss, desc).options;
+    BOOST_REQUIRE(a1.size() == 6);
+    check_value(a1[0], "gv1", "0");
+    check_value(a1[1], "empty_value", "");
+    check_value(a1[2], "plug3", "7");
+    check_value(a1[3], "b", "true");
+    check_value(a1[4], "m1.v1", "1");
+    check_value(a1[5], "m1.v2", "2");
+    
+    // same test, but now options come from file 
+    vector<option> a2 = parse_config_file<char>(config_file, desc).options;
+    BOOST_REQUIRE(a2.size() == 6);
+    check_value(a2[0], "gv1", "0");
+    check_value(a2[1], "empty_value", "");
+    check_value(a2[2], "plug3", "7");
+    check_value(a2[3], "b", "true");
+    check_value(a2[4], "m1.v1", "1");
+    check_value(a2[5], "m1.v2", "2");
+}
+
+void test_environment()
+{
+    options_description desc;
+    desc.add_options()
+        ("foo", new untyped_value, "")
+        ("bar", new untyped_value, "")
+        ;
+
+#if defined(_WIN32) && ! defined(__BORLANDC__)
+    _putenv("PO_TEST_FOO=1");
+#else
+    putenv(const_cast<char*>("PO_TEST_FOO=1"));
+#endif
+    parsed_options p = parse_environment(desc, "PO_TEST_");
+
+    BOOST_REQUIRE(p.options.size() == 1);
+    BOOST_CHECK(p.options[0].string_key == "foo");
+    BOOST_REQUIRE(p.options[0].value.size() == 1);
+    BOOST_CHECK(p.options[0].value[0] == "1");
+
+    //TODO: since 'bar' does not allow a value, it cannot appear in environemt,
+    // which already has a value.
+}
+
+void test_unregistered()
+{
+    options_description desc;
+
+    const char* cmdline1_[] = { "--foo=12", "--bar", "1"};
+    vector<string> cmdline1 = sv(cmdline1_,
+                                 sizeof(cmdline1_)/sizeof(const char*));
+    vector<option> a1 = 
+        command_line_parser(cmdline1).options(desc).allow_unregistered().run()
+        .options;
+
+    BOOST_REQUIRE(a1.size() == 3);
+    BOOST_CHECK(a1[0].string_key == "foo");
+    BOOST_CHECK(a1[0].unregistered == true);
+    BOOST_REQUIRE(a1[0].value.size() == 1);
+    BOOST_CHECK(a1[0].value[0] == "12");
+    BOOST_CHECK(a1[1].string_key == "bar");
+    BOOST_CHECK(a1[1].unregistered == true);
+    BOOST_CHECK(a1[2].string_key == "");
+    BOOST_CHECK(a1[2].unregistered == false);
+    
+
+    vector<string> a2 = collect_unrecognized(a1, include_positional);
+    BOOST_CHECK(a2[0] == "--foo=12");
+    BOOST_CHECK(a2[1] == "--bar");
+    BOOST_CHECK(a2[2] == "1");
+
+    // Test that storing unregisted options has no effect
+    variables_map vm;
+    
+    store(command_line_parser(cmdline1).options(desc).
+          allow_unregistered().run(),
+          vm);
+
+    BOOST_CHECK_EQUAL(vm.size(), 0u);   
+
+
+    const char content1[] =
+    "gv1 = 0\n"
+    "[m1]\n"
+    "v1 = 1\n"
+    ;
+
+    stringstream ss(content1);
+    vector<option> a3 = parse_config_file(ss, desc, true).options;
+    BOOST_REQUIRE(a3.size() == 2);
+    cout << "XXX" << a3[0].value.front() << "\n";
+    check_value(a3[0], "gv1", "0");
+    check_value(a3[1], "m1.v1", "1");
+}
+
+int main(int, char* av[])
+{
+    test_command_line();
+    test_config_file(av[1]);
+    test_environment();
+    test_unregistered();
+    return 0;
+}
+
diff --git a/vendor/pdalboost/libs/program_options/test/positional_options_test.cpp b/vendor/pdalboost/libs/program_options/test/positional_options_test.cpp
new file mode 100644
index 0000000..c7c5174
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/positional_options_test.cpp
@@ -0,0 +1,91 @@
+// Copyright Vladimir Prus 2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/program_options/positional_options.hpp>
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/parsers.hpp>
+using namespace pdalboost::program_options;
+// We'll use po::value everywhere to workaround vc6 bug.
+namespace po = pdalboost::program_options;
+
+
+#include <boost/limits.hpp>
+
+#include "minitest.hpp"
+
+#include <vector>
+using namespace std;
+
+void test_positional_options()
+{
+    positional_options_description p;
+    p.add("first", 1);
+
+    BOOST_CHECK_EQUAL(p.max_total_count(), 1u);
+    BOOST_CHECK_EQUAL(p.name_for_position(0), "first");
+
+    p.add("second", 2);
+
+    BOOST_CHECK_EQUAL(p.max_total_count(), 3u);
+    BOOST_CHECK_EQUAL(p.name_for_position(0), "first");
+    BOOST_CHECK_EQUAL(p.name_for_position(1), "second");
+    BOOST_CHECK_EQUAL(p.name_for_position(2), "second");
+
+    p.add("third", -1);
+
+    BOOST_CHECK_EQUAL(p.max_total_count(), (std::numeric_limits<unsigned>::max)());
+    BOOST_CHECK_EQUAL(p.name_for_position(0), "first");
+    BOOST_CHECK_EQUAL(p.name_for_position(1), "second");
+    BOOST_CHECK_EQUAL(p.name_for_position(2), "second");
+    BOOST_CHECK_EQUAL(p.name_for_position(3), "third");
+    BOOST_CHECK_EQUAL(p.name_for_position(10000), "third");
+}
+
+void test_parsing()
+{
+    options_description desc;
+    desc.add_options()
+        ("first", po::value<int>())
+        ("second", po::value<int>())
+        ("input-file", po::value< vector<string> >())
+        ("some-other", po::value<string>())
+    ;
+
+    positional_options_description p;
+    p.add("input-file", 2).add("some-other", 1);
+
+    vector<string> args;
+    args.push_back("--first=10");
+    args.push_back("file1");
+    args.push_back("--second=10");
+    args.push_back("file2");
+    args.push_back("file3");
+
+    // Check that positional options are handled.
+    parsed_options parsed = 
+        command_line_parser(args).options(desc).positional(p).run();
+
+    BOOST_REQUIRE(parsed.options.size() == 5);
+    BOOST_CHECK_EQUAL(parsed.options[1].string_key, "input-file");
+    BOOST_CHECK_EQUAL(parsed.options[1].value[0], "file1");
+    BOOST_CHECK_EQUAL(parsed.options[3].string_key, "input-file");
+    BOOST_CHECK_EQUAL(parsed.options[3].value[0], "file2");
+    BOOST_CHECK_EQUAL(parsed.options[4].value[0], "file3");
+
+    args.push_back("file4");
+
+    // Check that excessive number of positional options is detected.
+    BOOST_CHECK_THROW(command_line_parser(args).options(desc).positional(p)
+                      .run(),
+                      too_many_positional_options_error);
+}
+
+int main(int, char* [])
+{
+    test_positional_options();
+    test_parsing();
+    return 0;
+}
+
diff --git a/vendor/pdalboost/libs/program_options/test/program_options_size_test.py b/vendor/pdalboost/libs/program_options/test/program_options_size_test.py
new file mode 100644
index 0000000..25ca2f7
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/program_options_size_test.py
@@ -0,0 +1,53 @@
+#!/usr/bin/python
+
+import os
+import string
+
+
+call = "   hook(10);\n";
+call = "   hook(10); hook2(10);hook3(0);hook4(0);\n";
+
+def run_test(num_calls, compiler_command):
+   f = open("program_options_test.cpp", "w")
+   f.write("""#include <boost/program_options.hpp>
+using namespace boost::program_options;   
+
+void do_it()
+{
+   boost::program_options::options_description desc;
+   desc.add_options()
+""")
+   for i in range(0, num_calls):
+      f.write("(\"opt%d\", value<int>())\n")
+   f.write(";\n}\n")   
+   f.close()
+   os.system(compiler_command + " -c -save-temps -I /home/ghost/Work/Boost/boost-svn program_options_test.cpp")
+
+   nm = os.popen("nm -S program_options_test.o")
+   for l in nm:
+      if string.find(l, "Z5do_itv") != -1:
+         break
+   size = int(string.split(l)[1], 16)
+   return size
+
+def run_tests(range, compiler_command):
+
+   last_size = None
+   first_size = None
+   for num in range:
+      size = run_test(num, compiler_command)
+      if last_size:
+         print "%2d calls: %5d bytes (+ %d)" % (num, size, size-last_size)
+      else:
+         print "%2d calls: %5d bytes" % (num, size)
+         first_size = size
+      last_size = size
+   print "Avarage: ", (last_size-first_size)/(range[-1]-range[0])
+
+if __name__ == '__main__':
+   for compiler in [ "g++ -Os", "g++ -O3"]:
+      print "****", compiler, "****"
+      run_tests(range(1, 20), compiler)
+
+
+ 
diff --git a/vendor/pdalboost/libs/program_options/test/required_test.cfg b/vendor/pdalboost/libs/program_options/test/required_test.cfg
new file mode 100644
index 0000000..4b25dd6
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/required_test.cfg
@@ -0,0 +1 @@
+cfgfile = file.cfg
diff --git a/vendor/pdalboost/libs/program_options/test/required_test.cpp b/vendor/pdalboost/libs/program_options/test/required_test.cpp
new file mode 100644
index 0000000..743b828
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/required_test.cpp
@@ -0,0 +1,98 @@
+// Copyright Sascha Ochsenknecht 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/program_options.hpp>
+using namespace pdalboost::program_options;
+
+#include <string>
+#include <iostream>
+#include <fstream>
+using namespace std;
+
+#include "minitest.hpp"
+
+
+void required_throw_test()
+{
+   options_description          opts;
+   opts.add_options()
+     ("cfgfile,c", value<string>()->required(), "the configfile")
+     ("fritz,f",   value<string>()->required(), "the output file")
+   ;
+
+   variables_map vm;
+   bool throwed = false;
+   {
+      // This test must throw exception
+      string cmdline = "prg -f file.txt";
+      vector< string > tokens =  split_unix(cmdline);
+      throwed = false;
+      try {
+         store(command_line_parser(tokens).options(opts).run(), vm);
+         notify(vm);    
+      } 
+      catch (required_option& e) {
+         BOOST_CHECK_EQUAL(e.what(), string("the option '--cfgfile' is required but missing"));
+         throwed = true;
+      }      
+      BOOST_CHECK(throwed);
+   }
+   
+   {
+      // This test mustn't throw exception
+      string cmdline = "prg -c config.txt";
+      vector< string > tokens =  split_unix(cmdline);
+      throwed = false;
+      try {
+         store(command_line_parser(tokens).options(opts).run(), vm);
+         notify(vm);    
+      } 
+      catch (required_option& e) {
+         throwed = true;
+      }
+      BOOST_CHECK(!throwed);
+   }
+}
+
+
+
+void simple_required_test(const char* config_file)
+{
+   options_description          opts;
+   opts.add_options()
+     ("cfgfile,c", value<string>()->required(), "the configfile")
+     ("fritz,f",   value<string>()->required(), "the output file")
+   ;
+
+   variables_map vm;
+   bool throwed = false;
+   {
+      // This test must throw exception
+      string cmdline = "prg -f file.txt";
+      vector< string > tokens =  split_unix(cmdline);
+      throwed = false;
+      try {
+         // options coming from different sources
+         store(command_line_parser(tokens).options(opts).run(), vm);
+         store(parse_config_file<char>(config_file, opts), vm);
+         notify(vm);    
+      } 
+      catch (required_option& e) {
+         throwed = true;
+      }      
+      BOOST_CHECK(!throwed);
+   }
+}
+
+
+
+int main(int /*argc*/, char* av[])
+{  
+   required_throw_test();
+   simple_required_test(av[1]);
+   
+   return 0;
+}
+
diff --git a/vendor/pdalboost/libs/program_options/test/split_test.cpp b/vendor/pdalboost/libs/program_options/test/split_test.cpp
new file mode 100644
index 0000000..5645d19
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/split_test.cpp
@@ -0,0 +1,189 @@
+// Copyright Sascha Ochsenknecht 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <boost/program_options/parsers.hpp>
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/variables_map.hpp>
+#include <boost/program_options/cmdline.hpp>
+using namespace pdalboost::program_options;
+
+#include <iostream>
+#include <sstream>
+#include <vector>
+#include <cassert>
+using namespace std;
+
+#include "minitest.hpp"
+
+void check_value(const string& option, const string& value)
+{
+    BOOST_CHECK(option == value);
+}
+
+void split_whitespace(const options_description& description)
+{
+
+   const char* cmdline = "prg --input input.txt \r --optimization 4  \t  --opt \n  option";
+   
+   vector< string > tokens =  split_unix(cmdline, " \t\n\r");
+   
+   BOOST_REQUIRE(tokens.size() == 7);
+   
+   check_value(tokens[0], "prg");
+   check_value(tokens[1], "--input");
+   check_value(tokens[2], "input.txt");
+   check_value(tokens[3], "--optimization");
+   check_value(tokens[4], "4");
+   check_value(tokens[5], "--opt");
+   check_value(tokens[6], "option");
+
+   variables_map vm;  
+   store(command_line_parser(tokens).options(description).run(), vm);
+   notify(vm);
+}
+
+void split_equalsign(const options_description& description)
+{
+
+   const char* cmdline = "prg --input=input.txt  --optimization=4 --opt=option";
+   
+   vector< string > tokens =  split_unix(cmdline, "= ");
+ 
+   BOOST_REQUIRE(tokens.size() == 7);
+   check_value(tokens[0], "prg");
+   check_value(tokens[1], "--input");
+   check_value(tokens[2], "input.txt");
+   check_value(tokens[3], "--optimization");
+   check_value(tokens[4], "4");
+   check_value(tokens[5], "--opt");
+   check_value(tokens[6], "option");
+
+   variables_map vm;  
+   store(command_line_parser(tokens).options(description).run(), vm);
+   notify(vm);
+}
+
+void split_semi(const options_description& description)
+{
+
+   const char* cmdline = "prg;--input input.txt;--optimization 4;--opt option";
+   
+   vector< string > tokens =  split_unix(cmdline, "; ");
+   
+   BOOST_REQUIRE(tokens.size() == 7);
+   check_value(tokens[0], "prg");
+   check_value(tokens[1], "--input");
+   check_value(tokens[2], "input.txt");
+   check_value(tokens[3], "--optimization");
+   check_value(tokens[4], "4");
+   check_value(tokens[5], "--opt");
+   check_value(tokens[6], "option");
+
+   variables_map vm;  
+   store(command_line_parser(tokens).options(description).run(), vm);
+   notify(vm);
+}
+
+void split_quotes(const options_description& description)
+{
+   const char* cmdline = "prg --input \"input.txt input.txt\" --optimization 4 --opt \"option1 option2\"";
+   
+   vector< string > tokens =  split_unix(cmdline, " ");
+ 
+   BOOST_REQUIRE(tokens.size() == 7);
+   check_value(tokens[0], "prg");
+   check_value(tokens[1], "--input");
+   check_value(tokens[2], "input.txt input.txt");
+   check_value(tokens[3], "--optimization");
+   check_value(tokens[4], "4");
+   check_value(tokens[5], "--opt");
+   check_value(tokens[6], "option1 option2");
+
+   variables_map vm;  
+   store(command_line_parser(tokens).options(description).run(), vm);
+   notify(vm);
+}
+
+void split_escape(const options_description& description)
+{
+   const char* cmdline = "prg --input \\\"input.txt\\\" --optimization 4 --opt \\\"option1\\ option2\\\"";
+   
+   vector< string > tokens =  split_unix(cmdline, " ");
+  
+   BOOST_REQUIRE(tokens.size() == 7);
+   check_value(tokens[0], "prg");
+   check_value(tokens[1], "--input");
+   check_value(tokens[2], "\"input.txt\"");
+   check_value(tokens[3], "--optimization");
+   check_value(tokens[4], "4");
+   check_value(tokens[5], "--opt");
+   check_value(tokens[6], "\"option1 option2\"");
+
+   variables_map vm;  
+   store(command_line_parser(tokens).options(description).run(), vm);
+   notify(vm);
+}
+
+
+void split_single_quote(const options_description& description)
+{
+   const char* cmdline = "prg --input 'input.txt input.txt' --optimization 4 --opt 'option1 option2'";
+   
+   vector< string > tokens =  split_unix(cmdline, " ", "'");
+ 
+   BOOST_REQUIRE(tokens.size() == 7);
+   check_value(tokens[0], "prg");
+   check_value(tokens[1], "--input");
+   check_value(tokens[2], "input.txt input.txt");
+   check_value(tokens[3], "--optimization");
+   check_value(tokens[4], "4");
+   check_value(tokens[5], "--opt");
+   check_value(tokens[6], "option1 option2");
+
+   variables_map vm;  
+   store(command_line_parser(tokens).options(description).run(), vm);
+   notify(vm);
+}
+
+void split_defaults(const options_description& description)
+{
+   const char* cmdline = "prg --input \t \'input file.txt\' \t   --optimization 4 --opt \\\"option1\\ option2\\\"";
+   
+   vector< string > tokens =  split_unix(cmdline);
+  
+   BOOST_REQUIRE(tokens.size() == 7);
+   check_value(tokens[0], "prg");
+   check_value(tokens[1], "--input");
+   check_value(tokens[2], "input file.txt");
+   check_value(tokens[3], "--optimization");
+   check_value(tokens[4], "4");
+   check_value(tokens[5], "--opt");
+   check_value(tokens[6], "\"option1 option2\"");
+
+   variables_map vm;  
+   store(command_line_parser(tokens).options(description).run(), vm);
+   notify(vm);
+}
+
+int main(int /*ac*/, char** /*av*/)
+{
+   options_description desc;
+   desc.add_options()
+        ("input,i", value<string>(), "the input file")
+        ("optimization,O", value<unsigned>(), "optimization level")
+        ("opt,o", value<string>(), "misc option")
+      ;
+
+   split_whitespace(desc);
+   split_equalsign(desc);
+   split_semi(desc);
+   split_quotes(desc);
+   split_escape(desc);
+   split_single_quote(desc);
+   split_defaults(desc);
+   
+   return 0;
+}
diff --git a/vendor/pdalboost/libs/program_options/test/test_convert.cpp b/vendor/pdalboost/libs/program_options/test/test_convert.cpp
new file mode 100644
index 0000000..b91e6fd
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/test_convert.cpp
@@ -0,0 +1,146 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <cstring>
+#include <cassert>
+#include <string>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+#include <boost/progress.hpp>
+#include <boost/bind.hpp>
+#include <boost/ref.hpp>
+
+#include <boost/program_options/detail/convert.hpp>
+#include <boost/program_options/detail/utf8_codecvt_facet.hpp>
+
+#include "minitest.hpp"
+
+using namespace std;
+
+string file_content(const string& filename)
+{
+    ifstream ifs(filename.c_str());
+    assert(ifs);
+    
+    stringstream ss;
+    ss << ifs.rdbuf();
+    
+    return ss.str();
+}
+
+// A version of from_8_bit which does not use functional object, for
+// performance comparison.
+std::wstring from_8_bit_2(const std::string& s, 
+                          const codecvt<wchar_t, char, mbstate_t>& cvt)
+{
+    std::wstring result;
+
+
+    std::mbstate_t state = std::mbstate_t();
+    
+    const char* from = s.data();
+    const char* from_end = s.data() + s.size();
+    // The interace of cvt is not really iterator-like, and it's
+    // not possible the tell the required output size without the conversion.
+    // All we can is convert data by pieces.
+    while(from != from_end) {
+            
+        // std::basic_string does not provide non-const pointers to the data,
+        // so converting directly into string is not possible.
+        wchar_t buffer[32];
+            
+        wchar_t* to_next = buffer;
+        // Try to convert remaining input.
+        std::codecvt_base::result r = 
+            cvt.in(state, from, from_end, from, buffer, buffer + 32, to_next);
+        
+        if (r == std::codecvt_base::error)
+            throw logic_error("character conversion failed");
+        // 'partial' is not an error, it just means not all source characters
+        // we converted. However, we need to check that at least one new target
+        // character was produced. If not, it means the source data is 
+        // incomplete, and since we don't have extra data to add to source, it's
+        // error.
+        if (to_next == buffer)
+            throw logic_error("character conversion failed");
+
+        // Add converted characters
+        result.append(buffer, to_next);
+    }
+
+    return result;        
+}
+
+
+void test_convert(const std::string& input, 
+                  const std::string& expected_output)
+{
+    pdalboost::program_options::detail::utf8_codecvt_facet facet;
+    
+    std::wstring output;
+    { 
+        pdalboost::progress_timer t;
+        for (int i = 0; i < 10000; ++i)
+            output = pdalboost::from_8_bit(
+                input,
+                facet);
+    }
+
+    {
+        pdalboost::progress_timer t;
+        for (int i = 0; i < 10000; ++i)
+            output = from_8_bit_2(
+                input,
+                facet);
+    }
+
+    BOOST_CHECK(output.size()*2 == expected_output.size());
+
+    for(unsigned i = 0; i < output.size(); ++i) {
+
+        {
+            unsigned low = output[i];
+            low &= 0xFF;
+            unsigned low2 = expected_output[2*i];
+            low2 &= 0xFF;
+            BOOST_CHECK(low == low2);
+        }
+        {        
+            unsigned high = output[i];
+            high >>= 8;
+            high &= 0xFF;
+            unsigned high2 = expected_output[2*i+1];            
+            BOOST_CHECK(high == high2);
+        }
+    }
+
+    string ref = pdalboost::to_8_bit(output, facet);
+
+    BOOST_CHECK(ref == input);
+}
+
+int main(int ac, char* av[])
+{       
+    std::string input = file_content("utf8.txt");
+    std::string expected = file_content("ucs2.txt");
+
+    test_convert(input, expected);
+    
+    if (ac > 1) {
+        cout << "Trying to convert the command line argument\n";
+    
+        locale::global(locale(""));
+        std::wstring w = pdalboost::from_local_8_bit(av[1]);
+ 
+        cout << "Got something, printing decimal code point values\n";
+        for (unsigned i = 0; i < w.size(); ++i) {
+            cout << (unsigned)w[i] << "\n";
+        }
+        
+    }
+    
+    return 0;
+}
diff --git a/vendor/pdalboost/libs/program_options/test/ucs2.txt b/vendor/pdalboost/libs/program_options/test/ucs2.txt
new file mode 100644
index 0000000..c4c0fe7
Binary files /dev/null and b/vendor/pdalboost/libs/program_options/test/ucs2.txt differ
diff --git a/vendor/pdalboost/libs/program_options/test/unicode_test.cpp b/vendor/pdalboost/libs/program_options/test/unicode_test.cpp
new file mode 100644
index 0000000..a630ed1
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/unicode_test.cpp
@@ -0,0 +1,163 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <boost/program_options/variables_map.hpp>
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/parsers.hpp>
+#include <boost/program_options/detail/utf8_codecvt_facet.hpp>
+using namespace pdalboost::program_options;
+// We'll use po::value everywhere to workaround vc6 bug.
+namespace po = pdalboost::program_options;
+
+#include <boost/function.hpp>
+using namespace pdalboost;
+
+#include <sstream>
+using namespace std;
+
+#include "minitest.hpp"
+
+// Test that unicode input is forwarded to unicode option without
+// problems.
+void test_unicode_to_unicode()
+{
+    options_description desc;
+
+    desc.add_options()
+        ("foo", po::wvalue<wstring>(), "unicode option")
+        ;
+
+    vector<wstring> args;
+    args.push_back(L"--foo=\x044F");
+
+    variables_map vm;
+    basic_parsed_options<wchar_t> parsed = 
+        wcommand_line_parser(args).options(desc).run();
+    store(parsed, vm);
+
+    BOOST_CHECK(vm["foo"].as<wstring>() == L"\x044F");
+    BOOST_CHECK(parsed.options[0].original_tokens.size() == 1);
+    BOOST_CHECK(parsed.options[0].original_tokens[0] == L"--foo=\x044F");
+}
+
+// Test that unicode input is property converted into
+// local 8 bit string. To test this, make local 8 bit encoding
+// be utf8.
+void test_unicode_to_native()
+{
+    std::codecvt<wchar_t, char, mbstate_t>* facet = 
+        new pdalboost::program_options::detail::utf8_codecvt_facet;
+    locale::global(locale(locale(), facet));
+
+    options_description desc;
+
+    desc.add_options()
+        ("foo", po::value<string>(), "unicode option")
+        ;
+
+    vector<wstring> args;
+    args.push_back(L"--foo=\x044F");
+
+    variables_map vm;
+    store(wcommand_line_parser(args).options(desc).run(), vm);
+
+    BOOST_CHECK(vm["foo"].as<string>() == "\xD1\x8F");    
+}
+
+void test_native_to_unicode()
+{
+    std::codecvt<wchar_t, char, mbstate_t>* facet = 
+        new pdalboost::program_options::detail::utf8_codecvt_facet;
+    locale::global(locale(locale(), facet));
+
+    options_description desc;
+
+    desc.add_options()
+        ("foo", po::wvalue<wstring>(), "unicode option")
+        ;
+
+    vector<string> args;
+    args.push_back("--foo=\xD1\x8F");
+
+    variables_map vm;
+    store(command_line_parser(args).options(desc).run(), vm);
+
+    BOOST_CHECK(vm["foo"].as<wstring>() == L"\x044F");    
+}
+
+vector<wstring> sv(const wchar_t* array[], unsigned size)
+{
+    vector<wstring> r;
+    for (unsigned i = 0; i < size; ++i)
+        r.push_back(array[i]);
+    return r;
+}
+
+void check_value(const woption& option, const char* name, const wchar_t* value)
+{
+    BOOST_CHECK(option.string_key == name);
+    BOOST_REQUIRE(option.value.size() == 1);
+    BOOST_CHECK(option.value.front() == value);
+}
+
+void test_command_line()
+{
+    options_description desc;
+    desc.add_options()
+        ("foo,f", new untyped_value(), "")
+        // Explicit qualification is a workaround for vc6
+        ("bar,b", po::value<std::string>(), "")
+        ("baz", new untyped_value())
+        ("plug*", new untyped_value())
+        ;
+
+    const wchar_t* cmdline4_[] = { L"--foo=1\u0FF52", L"-f4", L"--bar=11",
+                             L"-b4", L"--plug3=10"};
+    vector<wstring> cmdline4 = sv(cmdline4_,
+                                  sizeof(cmdline4_)/sizeof(cmdline4_[0]));
+    vector<woption> a4 = 
+        wcommand_line_parser(cmdline4).options(desc).run().options;
+
+    BOOST_REQUIRE(a4.size() == 5);
+
+    check_value(a4[0], "foo", L"1\u0FF52");
+    check_value(a4[1], "foo", L"4");
+    check_value(a4[2], "bar", L"11");
+}
+
+// Since we've already tested conversion between parser encoding and
+// option encoding, all we need to check for config file is that
+// when reading wistream, it generates proper UTF8 data.
+void test_config_file()
+{
+    std::codecvt<wchar_t, char, mbstate_t>* facet = 
+        new pdalboost::program_options::detail::utf8_codecvt_facet;
+    locale::global(locale(locale(), facet));
+
+    options_description desc;
+
+    desc.add_options()
+        ("foo", po::value<string>(), "unicode option")
+        ;
+
+    std::wstringstream stream(L"foo = \x044F");
+
+    variables_map vm;
+    store(parse_config_file(stream, desc), vm);
+
+    BOOST_CHECK(vm["foo"].as<string>() == "\xD1\x8F");    
+}
+
+int main(int, char* [])
+{
+    test_unicode_to_unicode();
+    test_unicode_to_native();
+    test_native_to_unicode();
+    test_command_line();
+    test_config_file();
+    return 0;
+}
+
diff --git a/vendor/pdalboost/libs/program_options/test/unrecognized_test.cpp b/vendor/pdalboost/libs/program_options/test/unrecognized_test.cpp
new file mode 100644
index 0000000..550527e
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/unrecognized_test.cpp
@@ -0,0 +1,88 @@
+// Copyright Sascha Ochsenknecht 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <boost/program_options/cmdline.hpp>
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/parsers.hpp>
+#include <boost/program_options/detail/cmdline.hpp>
+using namespace pdalboost::program_options;
+using pdalboost::program_options::detail::cmdline;
+
+#include <iostream>
+#include <sstream>
+#include <vector>
+#include <cassert>
+using namespace std;
+
+#include "minitest.hpp"
+
+
+// Test free function collect_unrecognized()
+//
+//  it collects the tokens of all not registered options. It can be used
+//  to pass them to an own parser implementation
+
+
+
+void test_unrecognize_cmdline() 
+{
+   options_description desc;
+   
+   string content = "prg --input input.txt --optimization 4 --opt option";   
+   vector< string > tokens =  split_unix(content);
+
+   cmdline cmd(tokens);
+   cmd.set_options_description(desc);
+   cmd.allow_unregistered();
+
+   vector< option > opts = cmd.run();
+   vector< string > result = collect_unrecognized(opts, include_positional);
+   
+   BOOST_CHECK_EQUAL(result.size(), 7);
+   BOOST_CHECK_EQUAL(result[0], "prg");
+   BOOST_CHECK_EQUAL(result[1], "--input");
+   BOOST_CHECK_EQUAL(result[2], "input.txt");
+   BOOST_CHECK_EQUAL(result[3], "--optimization");
+   BOOST_CHECK_EQUAL(result[4], "4");
+   BOOST_CHECK_EQUAL(result[5], "--opt");
+   BOOST_CHECK_EQUAL(result[6], "option");
+}
+
+
+
+void test_unrecognize_config() 
+{
+
+   options_description desc;
+   
+   string content  =
+    " input = input.txt\n"
+    " optimization = 4\n"
+    " opt = option\n"
+    ;
+
+   stringstream ss(content);
+   vector< option > opts = parse_config_file(ss, desc, true).options;
+   vector< string > result = collect_unrecognized(opts, include_positional);
+   
+   BOOST_CHECK_EQUAL(result.size(), 6);
+   BOOST_CHECK_EQUAL(result[0], "input");
+   BOOST_CHECK_EQUAL(result[1], "input.txt");
+   BOOST_CHECK_EQUAL(result[2], "optimization");
+   BOOST_CHECK_EQUAL(result[3], "4");
+   BOOST_CHECK_EQUAL(result[4], "opt");
+   BOOST_CHECK_EQUAL(result[5], "option");
+}
+
+
+
+int main(int /*ac*/, char** /*av*/)
+{
+   test_unrecognize_cmdline();
+   test_unrecognize_config();
+
+   return 0;
+}
diff --git a/vendor/pdalboost/libs/program_options/test/utf8.txt b/vendor/pdalboost/libs/program_options/test/utf8.txt
new file mode 100644
index 0000000..d97d360
Binary files /dev/null and b/vendor/pdalboost/libs/program_options/test/utf8.txt differ
diff --git a/vendor/pdalboost/libs/program_options/test/variable_map_test.cpp b/vendor/pdalboost/libs/program_options/test/variable_map_test.cpp
new file mode 100644
index 0000000..dcb2db2
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/variable_map_test.cpp
@@ -0,0 +1,290 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#include <boost/program_options/variables_map.hpp>
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/parsers.hpp>
+#include <boost/program_options/detail/utf8_codecvt_facet.hpp>
+using namespace pdalboost::program_options;
+// We'll use po::value everywhere to workaround vc6 bug.
+namespace po = pdalboost::program_options;
+
+#include <boost/function.hpp>
+using namespace pdalboost;
+
+#include <sstream>
+using namespace std;
+
+#include "minitest.hpp"
+
+vector<string> sv(const char* array[], unsigned size)
+{
+    vector<string> r;
+    for (unsigned i = 0; i < size; ++i)
+        r.push_back(array[i]);
+    return r;
+}
+
+void test_variable_map()
+{
+    options_description desc;
+    desc.add_options()
+        ("foo,f", new untyped_value)
+        ("bar,b", po::value<string>())
+        ("biz,z", po::value<string>())
+        ("baz", new untyped_value())
+        ("output,o", new untyped_value(), "")
+        ;
+    const char* cmdline3_[] = { "--foo='12'", "--bar=11", "-z3", "-ofoo" };
+    vector<string> cmdline3 = sv(cmdline3_,
+                                 sizeof(cmdline3_)/sizeof(const char*));
+    parsed_options a3 = command_line_parser(cmdline3).options(desc).run();
+    variables_map vm;
+    store(a3, vm);
+    notify(vm);
+    BOOST_REQUIRE(vm.size() == 4);
+    BOOST_CHECK(vm["foo"].as<string>() == "'12'");
+    BOOST_CHECK(vm["bar"].as<string>() == "11");
+    BOOST_CHECK(vm.count("biz") == 1);
+    BOOST_CHECK(vm["biz"].as<string>() == "3");
+    BOOST_CHECK(vm["output"].as<string>() == "foo");
+
+    int i;
+    desc.add_options()
+    ("zee", bool_switch(), "")
+    ("zak", po::value<int>(&i), "")
+    ("opt", bool_switch(), "");
+
+    const char* cmdline4_[] = { "--zee", "--zak=13" };
+    vector<string> cmdline4 = sv(cmdline4_,
+                                 sizeof(cmdline4_)/sizeof(const char*));
+    parsed_options a4 = command_line_parser(cmdline4).options(desc).run();
+
+    variables_map vm2;
+    store(a4, vm2);
+    notify(vm2);
+    BOOST_REQUIRE(vm2.size() == 3);
+    BOOST_CHECK(vm2["zee"].as<bool>() == true);
+    BOOST_CHECK(vm2["zak"].as<int>() == 13);
+    BOOST_CHECK(vm2["opt"].as<bool>() == false);
+    BOOST_CHECK(i == 13);
+
+    options_description desc2;
+    desc2.add_options()
+    ("vee", po::value<string>()->default_value("42"))
+    ("voo", po::value<string>())
+    ("iii", po::value<int>()->default_value(123))
+    ;
+    const char* cmdline5_[] = { "--voo=1" };
+    vector<string> cmdline5 = sv(cmdline5_,
+                                 sizeof(cmdline5_)/sizeof(const char*));
+    parsed_options a5 = command_line_parser(cmdline5).options(desc2).run();
+
+    variables_map vm3;
+    store(a5, vm3);
+    notify(vm3);
+    BOOST_REQUIRE(vm3.size() == 3);
+    BOOST_CHECK(vm3["vee"].as<string>() == "42");
+    BOOST_CHECK(vm3["voo"].as<string>() == "1");
+    BOOST_CHECK(vm3["iii"].as<int>() == 123);
+
+    options_description desc3;
+    desc3.add_options()
+    ("imp", po::value<int>()->implicit_value(100))
+    ("iim", po::value<int>()->implicit_value(200)->default_value(201))
+    ("mmp,m", po::value<int>()->implicit_value(123)->default_value(124))
+    ("foo", po::value<int>())
+    ;
+    /* The -m option is implicit. It does not have value in inside the token,
+       and we should not grab the next token.  */
+    const char* cmdline6_[] = {  "--imp=1", "-m", "--foo=1" };
+    vector<string> cmdline6 = sv(cmdline6_,
+                                 sizeof(cmdline6_)/sizeof(const char*));
+    parsed_options a6 = command_line_parser(cmdline6).options(desc3).run();
+
+    variables_map vm4;
+    store(a6, vm4);
+    notify(vm4);
+    BOOST_REQUIRE(vm4.size() == 4);
+    BOOST_CHECK(vm4["imp"].as<int>() == 1);
+    BOOST_CHECK(vm4["iim"].as<int>() == 201);
+    BOOST_CHECK(vm4["mmp"].as<int>() == 123);
+}
+
+int stored_value;
+void notifier(const vector<int>& v)
+{
+    stored_value = v.front();
+}
+
+void test_semantic_values()
+{
+    options_description desc;
+    desc.add_options()
+    ("foo", new untyped_value())
+    ("bar", po::value<int>())
+    ("biz", po::value< vector<string> >())
+    ("baz", po::value< vector<string> >()->multitoken())
+    ("int", po::value< vector<int> >()->notifier(&notifier))
+    ;
+
+       
+    parsed_options parsed(&desc);
+    vector<option>& options = parsed.options;
+    vector<string> v;
+    v.push_back("q");
+    options.push_back(option("foo", vector<string>(1, "1")));
+    options.push_back(option("biz", vector<string>(1, "a")));
+    options.push_back(option("baz", v));
+    options.push_back(option("bar", vector<string>(1, "1")));
+    options.push_back(option("biz", vector<string>(1, "b x")));
+    v.push_back("w");
+    options.push_back(option("baz", v));
+
+    variables_map vm;
+    store(parsed, vm);
+    notify(vm);
+    BOOST_REQUIRE(vm.count("biz") == 1);
+    BOOST_REQUIRE(vm.count("baz") == 1);
+    const vector<string> av = vm["biz"].as< vector<string> >();
+    const vector<string> av2 = vm["baz"].as< vector<string> >();
+    string exp1[] = { "a", "b x" };
+    BOOST_CHECK(av == vector<string>(exp1, exp1 + 2));
+    string exp2[] = { "q", "q", "w" };
+    BOOST_CHECK(av2 == vector<string>(exp2, exp2 + 3));
+
+    options.push_back(option("int", vector<string>(1, "13")));
+
+    variables_map vm2;
+    store(parsed, vm2);
+    notify(vm2);
+    BOOST_REQUIRE(vm2.count("int") == 1);
+    BOOST_CHECK(vm2["int"].as< vector<int> >() == vector<int>(1, 13));
+    BOOST_CHECK_EQUAL(stored_value, 13);
+
+    vector<option> saved_options = options;
+    
+    options.push_back(option("bar", vector<string>(1, "2")));
+    variables_map vm3;
+    BOOST_CHECK_THROW(store(parsed, vm3), multiple_occurrences);
+
+    options = saved_options;
+    // Now try passing two int in one 'argv' element.
+    // This should not work.
+    options.push_back(option("int", vector<string>(1, "2 3")));
+    variables_map vm4;
+    BOOST_CHECK_THROW(store(parsed, vm4), validation_error);
+}
+
+void test_priority()
+{
+    options_description desc;
+    desc.add_options()
+    // Value of this option will be specified in two sources,
+    // and only first one should be used.
+    ("first", po::value< vector<int > >())
+    // Value of this option will have default value in the first source,
+    // and explicit assignment in the second, so the second should be used.
+    ("second", po::value< vector<int > >()->default_value(vector<int>(1, 1), ""))
+    ("aux", po::value< vector<int > >())
+     // This will have values in both sources, and values should be combined
+    ("include", po::value< vector<int> >()->composing())
+    ;
+
+    const char* cmdline1_[] = { "--first=1", "--aux=10", "--first=3", "--include=1" };
+    vector<string> cmdline1 = sv(cmdline1_, 
+                                 sizeof(cmdline1_)/sizeof(const char*));
+
+    parsed_options p1 = command_line_parser(cmdline1).options(desc).run();
+
+    const char* cmdline2_[] = { "--first=12", "--second=7", "--include=7" };
+    vector<string> cmdline2 = sv(cmdline2_, 
+                                 sizeof(cmdline2_)/sizeof(const char*));
+
+    parsed_options p2 = command_line_parser(cmdline2).options(desc).run();
+
+    variables_map vm;
+    store(p1, vm);
+
+    BOOST_REQUIRE(vm.count("first") == 1);    
+    BOOST_REQUIRE(vm["first"].as< vector<int> >().size() == 2);
+    BOOST_CHECK_EQUAL(vm["first"].as< vector<int> >()[0], 1);
+    BOOST_CHECK_EQUAL(vm["first"].as< vector<int> >()[1], 3);
+
+    BOOST_REQUIRE(vm.count("second") == 1);    
+    BOOST_REQUIRE(vm["second"].as< vector<int> >().size() == 1);
+    BOOST_CHECK_EQUAL(vm["second"].as< vector<int> >()[0], 1);
+
+    store(p2, vm);
+
+    // Value should not change.
+    BOOST_REQUIRE(vm.count("first") == 1);    
+    BOOST_REQUIRE(vm["first"].as< vector<int> >().size() == 2);
+    BOOST_CHECK_EQUAL(vm["first"].as< vector<int> >()[0], 1);
+    BOOST_CHECK_EQUAL(vm["first"].as< vector<int> >()[1], 3);
+
+    // Value should change to 7
+    BOOST_REQUIRE(vm.count("second") == 1);    
+    BOOST_REQUIRE(vm["second"].as< vector<int> >().size() == 1);
+    BOOST_CHECK_EQUAL(vm["second"].as< vector<int> >()[0], 7);
+
+    BOOST_REQUIRE(vm.count("include") == 1);
+    BOOST_REQUIRE(vm["include"].as< vector<int> >().size() == 2);
+    BOOST_CHECK_EQUAL(vm["include"].as< vector<int> >()[0], 1);
+    BOOST_CHECK_EQUAL(vm["include"].as< vector<int> >()[1], 7);
+}
+
+void test_multiple_assignments_with_different_option_description()
+{
+    // Test that if we store option twice into the same variable_map,
+    // and some of the options stored the first time are not present
+    // in the options descrription provided the second time, we don't crash.
+
+    options_description desc1("");    
+    desc1.add_options()
+        ("help,h", "")
+        ("includes", po::value< vector<string> >()->composing(), "");
+        ;
+
+    options_description desc2("");
+    desc2.add_options()
+        ("output,o", "");
+
+    vector<string> input1;
+    input1.push_back("--help");
+    input1.push_back("--includes=a");
+    parsed_options p1 = command_line_parser(input1).options(desc1).run();
+
+    vector<string> input2;
+    input1.push_back("--output");
+    parsed_options p2 = command_line_parser(input2).options(desc2).run();
+
+    vector<string> input3;
+    input3.push_back("--includes=b");
+    parsed_options p3 = command_line_parser(input3).options(desc1).run();
+
+
+    variables_map vm;
+    store(p1, vm);
+    store(p2, vm);
+    store(p3, vm);
+
+    BOOST_REQUIRE(vm.count("help") == 1);
+    BOOST_REQUIRE(vm.count("includes") == 1);
+    BOOST_CHECK_EQUAL(vm["includes"].as< vector<string> >()[0], "a");
+    BOOST_CHECK_EQUAL(vm["includes"].as< vector<string> >()[1], "b");
+
+} 
+
+int main(int, char* [])
+{
+    test_variable_map();
+    test_semantic_values();
+    test_priority();
+    test_multiple_assignments_with_different_option_description();
+    return 0;
+}
+
diff --git a/vendor/pdalboost/libs/program_options/test/winmain.cpp b/vendor/pdalboost/libs/program_options/test/winmain.cpp
new file mode 100644
index 0000000..220a513
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/winmain.cpp
@@ -0,0 +1,74 @@
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if defined(_WIN32)
+#include <string>
+#include <vector>
+#include <cctype>
+#include <iostream>
+#include <stdlib.h>
+
+using namespace std;
+
+#include <boost/program_options/parsers.hpp>
+using namespace pdalboost::program_options;
+
+void check_equal(const std::vector<string>& actual, char **expected, int n)
+{
+    if (actual.size() != n)
+    {
+        std::cerr << "Size mismatch between expected and actual data\n";
+        abort();
+    }
+    for (int i = 0; i < n; ++i)
+    {
+        if (actual[i] != expected[i])
+        {
+            std::cerr << "Unexpected content\n";
+            abort();
+        }
+    }
+}
+
+#include <boost/preprocessor/cat.hpp>
+
+void test_winmain()
+{
+
+#define C ,
+#define TEST(input, expected) \
+    char* BOOST_PP_CAT(e, __LINE__)[] = expected;\
+    vector<string> BOOST_PP_CAT(v, __LINE__) = split_winmain(input);\
+    check_equal(BOOST_PP_CAT(v, __LINE__), BOOST_PP_CAT(e, __LINE__),\
+                sizeof(BOOST_PP_CAT(e, __LINE__))/sizeof(char*));    
+
+// The following expectations were obtained in Win2000 shell:
+    TEST("1 ", {"1"});
+    TEST("1\"2\" ", {"12"});
+    TEST("1\"2  ", {"12  "});
+    TEST("1\"\\\"2\" ", {"1\"2"});
+    TEST("\"1\" \"2\" ", {"1" C "2"});
+    TEST("1\\\" ", {"1\""});
+    TEST("1\\\\\" ", {"1\\ "});
+    TEST("1\\\\\\\" ", {"1\\\""});
+    TEST("1\\\\\\\\\" ", {"1\\\\ "});
+
+    TEST("1\" 1 ", {"1 1 "});
+    TEST("1\\\" 1 ", {"1\"" C "1"});
+    TEST("1\\1 ", {"1\\1"});
+    TEST("1\\\\1 ", {"1\\\\1"});    
+}
+
+int main(int, char*[])
+{
+    test_winmain();
+    return 0;
+}
+#else
+int main(int, char*[])
+{
+    return 0;
+}
+#endif
diff --git a/vendor/pdalboost/libs/program_options/test/winmain.py b/vendor/pdalboost/libs/program_options/test/winmain.py
new file mode 100644
index 0000000..5c43242
--- /dev/null
+++ b/vendor/pdalboost/libs/program_options/test/winmain.py
@@ -0,0 +1,39 @@
+
+from StringIO import StringIO
+import string
+
+testcases = r"""1 -> 1
+1"2" -> 12
+1"2  -> 12
+1"\"2" -> 1"2
+"1" "2" -> 1, 2
+1\" -> 1"
+1\\" -> 1\  
+1\\\" -> 1\"  
+1\\\\" -> 1\\  
+1" 1 -> 1 1
+1\" 1 -> 1", 1
+1\1 -> 1\1
+1\\1 -> 1\\1
+"""
+
+#testcases = r"""1\\\\" -> 1\\
+#"""
+
+t = StringIO(testcases)
+
+def quote(s):
+    result = s.replace("\\", r"\\")
+    result = result.replace("\"", "\\\"")
+    return '"' + result + '"'
+
+
+for s in t:
+    s = string.strip(s)
+    (value, result) = string.split(s, "->")
+#    print value, result
+    tokens = string.split(result, ",")
+    value = quote(value)
+    tokens = map(string.strip, tokens)
+    tokens = map(quote, tokens)
+    print "TEST(%s, {%s});" % (value, string.join(tokens, ","))
diff --git a/vendor/pdalboost/libs/property_tree/breaking_changes.txt b/vendor/pdalboost/libs/property_tree/breaking_changes.txt
new file mode 100644
index 0000000..f9044e4
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/breaking_changes.txt
@@ -0,0 +1,51 @@
+Copyright (C) 2009 Sebastian Redl
+Distributed under the Boost Software License, Version 1.0.
+See http://www.boost.org/LICENSE_1_0.txt
+
+
+List all breaking changes done to the interface during the update here.
+
+- Template parameters
+Template parameters have been thoroughly changed.
+Impact: If you were using a custom instantiation of basic_ptree, you have to
+  change your code.
+Rationale: The old order made no sense. It ordered the key comparison predicate
+           before the key, although it could easily be defaulted based on it,
+           and the path before the data type, when the path is something you
+           will very rarely want to change (and it could default, too).
+
+- put*
+The put and put_child functions of basic_ptree had add and add_child split from
+them, by separating along the lines of the do_not_replace parameter.
+Impact: If you were using the third parameter of these functions, you have to
+        change your code.
+Rationale: I'm not fond of using boolean parameters to change function behavior.
+           They're hard to remember and hard to read in code. When projects
+           adopt the convention of passing /*boolean=*/true,
+           /*parameters=*/false, /*like=*/false this, something's wrong.
+           It's even more wrong when the parameter has a negative name, as
+           do_not_replace had.
+
+- Custom paths
+Custom paths have been thoroughly changed.
+Impact: If you were using custom paths, you have to change your code. If you
+        referred to the basic_path template by name, you have to change your
+        code.
+Rationale: The old interface required a huge amount of repeated code for
+           custom paths. The new interface is a lot easier to implement.
+
+- Translators
+Translators have been thoroughly changed.
+Impact: If you were using translators at all, you probably have to change your
+        code.
+Rationale: The new interface makes it easier to pass custom translators to
+           specific get/put operations. It also keeps the translator out of
+           the tree's type.
+
+- find
+find() returns an assoc_iterator.
+Impact: If you use find, you may have to change your code. Most importantly,
+        you need to compare against not_found() instead of end().
+Rationale: equal_range() also returns assoc_iterators. equal_range() cannot
+           return normal iterators, since the conversion would not preserve
+           the equal range or even the range property.
diff --git a/vendor/pdalboost/libs/property_tree/doc/Jamfile.v2 b/vendor/pdalboost/libs/property_tree/doc/Jamfile.v2
new file mode 100644
index 0000000..96601b7
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/doc/Jamfile.v2
@@ -0,0 +1,47 @@
+# Boost.PropertyTree
+#
+# Copyright (c) 2006-2007 Matias Capeletto
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+
+# Quickbook
+# -----------------------------------------------------------------------------
+
+import doxygen ;
+import quickbook ;
+
+doxygen autodoc
+    :
+        [ glob ../../../boost/property_tree/*.hpp ]
+    :
+        <doxygen:param>EXTRACT_ALL=YES
+        <doxygen:param>"PREDEFINED=\"BOOST_PROPERTY_TREE_DOXYGEN_INVOKED\" \\
+                                   \"BOOST_DEDUCED_TYPENAME=typename\""
+        <doxygen:param>HIDE_UNDOC_MEMBERS=NO
+        <doxygen:param>EXTRACT_PRIVATE=NO
+        <doxygen:param>ENABLE_PREPROCESSING=YES
+        <doxygen:param>MACRO_EXPANSION=YES
+        <doxygen:param>EXPAND_ONLY_PREDEF=YES
+        <doxygen:param>SEARCH_INCLUDES=YES
+        <doxygen:param>INCLUDE_PATH=$(BOOST_ROOT)
+        <doxygen:param>EXAMPLE_PATH=$(BOOST_ROOT)/libs/property_tree/examples
+        <doxygen:param>BRIEF_MEMBER_DESC=YES
+        <doxygen:param>REPEAT_BRIEF=YES
+        <doxygen:param>ALWAYS_DETAILED_SEC=YES
+        <doxygen:param>MULTILINE_CPP_IS_BRIEF=YES
+    ;
+
+xml property_tree : property_tree.qbk ;
+
+boostbook standalone
+    : property_tree
+    : <xsl:param>boost.root=../../../..
+      <xsl:param>toc.max.depth=3
+      <xsl:param>toc.section.depth=2
+      <xsl:param>chunk.section.depth=3
+      <dependency>autodoc
+      <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/property_tree/doc/html
+    ;
diff --git a/vendor/pdalboost/libs/property_tree/doc/accessing.qbk b/vendor/pdalboost/libs/property_tree/doc/accessing.qbk
new file mode 100644
index 0000000..20f0bc4
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/doc/accessing.qbk
@@ -0,0 +1,94 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
+ / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section:accessing How to Access Data in a Property Tree]
+[/ __ptree_*__ macros expected from property_tree.qbk]
+[def __pi__ ['pi]] [/ mathematical constant]
+
+Property tree resembles (almost is) a standard container with value type of `pair<string, ptree>`. It has the usual member functions, such as __ptree_insert__, __ptree_push_back__, __ptree_find__, __ptree_erase__, etc. These can of course be used to populate and access the tree. For example the following code adds key `"pi"` with data (almost) equal to mathematical __pi__ value:
+
+ __ptree__ pt;
+ pt.__ptree_push_back__(__ptree__::__ptree_value_type__("pi", __ptree__("3.14159")));
+
+To find the value of `pi` we might do the following:
+
+ __ptree__::__ptree_const_iterator__ it = pt.__ptree_find__("pi");
+ double pi = boost::lexical_cast<double>(it->second.__ptree_data__());
+
+This looks quite cumbersome, and would be even more so if `pi` value was not stored so near the top of the tree, and we cared just a little bit more about errors. Fortunately, there is another, correct way of doing it:
+
+ ptree pt;
+ pt.__ptree_put__("pi", 3.14159);                // put double
+ double pi = pt.__ptree_get__<double>("pi");     // get double
+
+It doesn't get simpler than that. Basically, there are 2 families of member functions, __ptree_get__ and __ptree_put__, which allow intuitive access to data stored in the tree (direct children or not).
+
+[heading Three Ways of Getting Data]
+
+There are three versions of get: get, get (default-value version), and get_optional, which differ by failure handling strategy. All versions take path specifier, which determines in which key to search for a value. It can be a single key, or a path to key, where path elements are separated with a special character (a '.' if not specified differently). For example debug.logging.errorlevel might be a valid path with dot as a separator.
+
+# The throwing version (__ptree_get__):
+``
+__ptree__ pt;
+/* ... */
+float v = pt.__ptree_get__<float>("a.path.to.float.value");
+``
+This call locates the proper node in the tree and tries to translate its data string to a float value. If that fails, exception is thrown. If path does not exist, it will be __ptree_bad_path__ exception. If value could not be translated, it will be __ptree_bad_data__. Both of them derive from __ptree_error__ to make common handling possible.
+# The default-value version (__ptree_get_defaulted__):
+``
+__ptree__ pt;
+/* ... */
+float v = pt.__ptree_get_defaulted__("a.path.to.float.value", -1.f);
+``
+It will do the same as above, but if it fails, it will return the default value specified by second parameter (here -1.f) instead of throwing. This is very useful in common situations where one wants to allow omitting of some keys. Note that type specification needed in throwing version is normally not necessary here, because type is determined by the default value parameter.
+# The optional version (__ptree_get_optional__):
+``
+__ptree__ pt;
+/* ... */
+boost::optional<float> v = pt.__ptree_get_optional__<float>("a.path.to.float.value");
+``
+This version uses boost::optional class to handle extraction failure. On successful extraction, it will return boost::optional initialized with extracted value. Otherwise, it will return uninitialized boost::optional.
+
+To retrieve a value from this tree (not some subkey), use __ptree_get_value__, __ptree_get_value__ (default-value version), and __ptree_get_value_optional__. They have identical semantics to __ptree_get__ functions, except they don't take the __path__ parameter. Don't call __ptree_get__ with and empty __path__ to do this as it will try to extract contents of subkey with empty name.
+
+To use a separator character other than default '[^.]', you need to construct
+a path object explicitly. The path type for a __ptree__ is a string_path
+instantiation, so the easiest way to refer to it is __ptree__::path_type.
+This way you can use trees that have dots in their keys:
+
+ typedef ptree::path_type path;
+ pt.get<float>(path("p.a.t.h/t.o/v.a.l.u.e", '/'));
+ pt.get(path("p.a.t.h/t.o/v.a.l.u.e", '/'), 0, NULL);
+ pt.get_optional<std::string>(path("p.a.t.h/t.o/v.a.l.u.e", '/'));
+
+Note: the special overloads of __ptree_get__ and __ptree_get_optional__ taking
+a separator character that existed in pre-release versions of PropertyTree have
+been removed. This is because the overloads conflicted with using per-call data
+translators.
+
+[heading Two Ways of Putting Data]
+
+To complement __ptree_get__, there are __ptree_put__ and __ptree_add__. Contrary to __ptree_get__, they have only one variant each. This is because there is no need to deal with missing values when adding data. If the supplied value cannot be converted to the tree's data type, the functions will throw __ptree_bad_data__.
+
+ __ptree__ pt;
+ pt.__ptree_put__("a.path.to.float.value", 3.14f);
+ // Overwrites the value
+ pt.__ptree_put__("a.path.to.float.value", 2.72f);
+ // Adds a second node with the new value.
+ pt.__ptree_add__("a.path.to.float.value", 3.14f);
+
+Calling __ptree_put__ will insert a new value at specified path, so that a call to __ptree_get__ specifying the same path will retrieve it.  Further, __ptree_put__ will insert any missing path elements during path traversal. For example, calling `__ptree_put__("key1.key2.key3", 3.14f)` on an empty tree will insert three new children: `key1`, `key1.key2` and `key1.key2.key3`. The last one will receive a string `"3.14"` as data, while the two former ones will have empty data strings. __ptr [...]
+The difference between __ptree_put__ and __ptree_add__ is that put will overwrite existing values if there are any, while add will create a new node to hold the value even if the specified path references an existing node.
+
+Similar to __ptree_get_value__, there is also a __ptree_put_value__ function.  It does the same for this property tree what __ptree_put__ does for its children. Thus, it does not receive a __path__:
+
+ __ptree__ pt;
+ pt.__ptree_put_value__(3.14f);
+
+There is no add_value function.
+
+[endsect]
diff --git a/vendor/pdalboost/libs/property_tree/doc/cmd_line_parser.qbk b/vendor/pdalboost/libs/property_tree/doc/cmd_line_parser.qbk
new file mode 100644
index 0000000..5ae64fa
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/doc/cmd_line_parser.qbk
@@ -0,0 +1,80 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
+ / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section:cmdline_parser Command Line Parser]
+[def __read_cmdline__ [funcref boost::property_tree::cmdline_parser::read_cmdline read_cmdline]]
+This is a simple parser that converts command line parameters (in form of standard `argc` and `argv` arguments) into a property tree. There is no write function. The parser correctly recognizes simple command line styles, both from Unix and Windows worlds.
+
+During parse, parameters are converted to __ptree__ keys and grouped by their prefix, if any. Grouping means that they are inserted as children of a key representing appropriate group. Prefix is a single character that comes directly after so called "metacharacter", which is usually a dash '-' (on Unix) or a slash '/' (on Windows). For example, parameter [^-I/usr/include/foobar] has prefix [^I] after metacharacter '[^-]'. Parameters that do not start with a metacharacter (e.g. source fil [...]
+
+[pre myprogram.exe -c -I/usr/include -Lm -I/home/mammamia/stuff foo.c bar.c -g]
+
+will result in the following property tree being created:
+
+ "" bar.c                    ;"unnamed" group
+ {
+    "0" myprogram.exe        ;first argument is name of program
+    "1" foo.c
+    "2" bar.c
+ }
+ c                           ;no data
+ {
+    "0" ""                  ;no value associated with 'c' option
+ }
+ I /home/mammamia/stuff
+ {
+    "0" /usr/include
+    "1" /home/mammamia/stuff
+ }
+ L m
+ {
+    "0" m
+ }
+
+Within each group, parameters are numbered, starting from zero.
+
+Metacharacters can be specified as a parameter to read function. This code will parse command line using both dash and slash as metachatacters:
+
+ __ptree__ pt;
+ __read_cmdline__(argc, argv, "-/", pt);
+
+Once the command line is parsed into a __ptree__, the power of the __ptree_get__, __ptree_get_child__, and __ptree_get_value__ interfaces can be used to conveniently extract the values of options needed. In the simplest case, user only needs to query key with name of option to get its value. For example:
+
+ // default to 0 if -Nxx or /Nxx not specified on command line
+ int n = pt.__ptree_get_defaulted__("N", 0);
+
+or
+
+ // throw if -Nxx or /Nxx not specified on command line
+ int n = pt.__ptree_get__<int>("N");
+
+If there is more than one instance of 'N' in command line, they can be accessed as:
+
+ // Copy values of all -N arguments to vector
+ std::vector<int> vec;
+ BOOST_FOREACH(const __ptree__::__ptree_value_type__ &v, pt.__ptree_get_child__("N", empty_ptree()))
+    vec.push_back(v.second.__ptree_get_value__<int>());
+
+or:
+
+ // Use numbering to access specific instances of parameter -N
+ int first_n = pt.__ptree_get_defaulted__("N.0", default_n_value);
+ int second_n = pt.__ptree_get_defaulted__("N.1", default_n_value);
+ /* ... */
+ int tenth_n = pt.__ptree_get_defaulted__("N.9", default_n_value);
+
+If you want to know how many [^-N]'s were specified:
+
+ // Count -N parameters
+ size_t count = pt.__ptree_get_child__("N", empty_ptree<ptree>()).size();
+
+First argument, `argv[0]`, normally contains path to executable, which is rarely used for arguments parsing. To skip it, invoke the parser like in the following manner:
+
+ // Skip program path
+ __read_cmdline__(argc - 1, argv + 1, "-", pt)
+
+[endsect] [/cmd_line_parser]
diff --git a/vendor/pdalboost/libs/property_tree/doc/container.qbk b/vendor/pdalboost/libs/property_tree/doc/container.qbk
new file mode 100644
index 0000000..ea545d1
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/doc/container.qbk
@@ -0,0 +1,33 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
+ / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section:container Property Tree as a Container]
+[/ __ptree_*__ macros expected from property_tree.qbk]
+Every property tree node models the ReversibleSequence concept, providing
+access to its immediate children. This means that iterating over a __ptree__
+(which is the same as its root node - every __ptree__ node is also the
+subtree it starts) iterates only a single level of the hierarchy. There is no
+way to iterate over the entire tree.
+
+It is very important to remember that the property sequence is *not* ordered by
+the key. It preserves the order of insertion. It closely resembles a std::list.
+Fast access to children by name is provided via a separate lookup structure. Do
+not attempt to use algorithms that expect an ordered sequence (like
+binary_search) on a node's children.
+
+The property tree exposes a second container-like interface, called the
+associative view. Its iterator type is the nested type assoc_iterator (and its
+const counterpart const_assoc_iterator). You can get an ordered view of all
+children by using ordered_begin() and ordered_end(). 
+
+The associative view also provides find() and equal_range() members, which
+return assoc_iterators, but otherwise have the same semantics as the members
+of std::map of the same name.
+
+You can get a normal iterator from an assoc_iterator by using the to_iterator()
+member function. Converting the other way is not possible.
+[endsect] [/container]
diff --git a/vendor/pdalboost/libs/property_tree/doc/images/ptree2code.png b/vendor/pdalboost/libs/property_tree/doc/images/ptree2code.png
new file mode 100644
index 0000000..860bc9b
Binary files /dev/null and b/vendor/pdalboost/libs/property_tree/doc/images/ptree2code.png differ
diff --git a/vendor/pdalboost/libs/property_tree/doc/info_parser.qbk b/vendor/pdalboost/libs/property_tree/doc/info_parser.qbk
new file mode 100644
index 0000000..238e090
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/doc/info_parser.qbk
@@ -0,0 +1,54 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
+ / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section INFO Parser]
+The INFO format was created specifically for the property tree library. It
+provides a simple, efficient format that can be used to serialize property
+trees that are otherwise only stored in memory. It can also be used for any
+other purpose, although the lack of widespread existing use may prove to be an
+impediment.
+
+INFO provides several features that make it familiar to C++ programmers and
+efficient for medium-sized datasets, especially those used for test input. It
+supports C-style character escapes, nesting via curly braces, and file inclusion
+via #include.
+
+INFO is also used for visualization of property trees in this documentation.
+
+A typical INFO file might look like this:
+
+ key1 value1
+ key2
+ {
+    key3 value3
+    {
+       key4 "value4 with spaces"
+    }
+    key5 value5
+ }
+
+Here's a more complicated file demonstrating all of INFO's features:
+
+ ; A comment
+ key1 value1   ; Another comment
+ key2 "value with special characters in it {};#\n\t\"\0"
+ {
+    subkey "value split "\
+           "over three"\
+           "lines"
+    {
+       a_key_without_value ""
+       "a key with special characters in it {};#\n\t\"\0" ""
+       "" value    ; Empty key with a value
+       "" ""       ; Empty key with empty value!
+    }
+ }
+ #include "file.info"    ; included file
+
+INFO round-trips except for the loss of comments and include directives.
+
+[endsect] [/info_parser]
diff --git a/vendor/pdalboost/libs/property_tree/doc/ini_parser.qbk b/vendor/pdalboost/libs/property_tree/doc/ini_parser.qbk
new file mode 100644
index 0000000..560817a
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/doc/ini_parser.qbk
@@ -0,0 +1,37 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
+ / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section INI Parser]
+[def __ini__ [@http://en.wikipedia.org/wiki/INI INI format]]
+The __ini__ was once widely used in the world of Windows. It is now deprecated,
+but is still used by a surprisingly large number of applications. The reason is
+probably its simplicity, plus that Microsoft recommends using the registry as
+a replacement, which not all developers want to do.
+
+INI is a simple key-value format with a single level of sectioning. It is thus
+less rich than the property tree dataset, which means that not all property
+trees can be serialized as INI files.
+
+The INI parser creates a tree node for every section, and a child node for
+every property in that section. All properties not in a section are directly
+added to the root node. Empty sections are ignored. (They don't round-trip, as
+described below.)
+
+The INI serializer reverses this process. It first writes out every child of the
+root that contains data, but no child nodes, as properties. Then it creates a
+section for every child that contains child nodes, but no data. The children of
+the sections must only contain data. It is an error if the root node contains
+data, or any child of the root contains both data and content, or there's more
+than three levels of hierarchy. There must also not be any duplicate keys.
+
+An empty tree node is assumed to be an empty property. There is no way to create
+empty sections.
+
+Since the Windows INI parser discards trailing spaces and does not support
+quoting, the property tree parser follows this example. This means that
+property values containing trailing spaces do not round-trip.
+[endsect] [/ini_parser]
diff --git a/vendor/pdalboost/libs/property_tree/doc/intro.qbk b/vendor/pdalboost/libs/property_tree/doc/intro.qbk
new file mode 100644
index 0000000..354e0c0
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/doc/intro.qbk
@@ -0,0 +1,37 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
+ / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[template ptree2codeImage[] [$images/ptree2code.png]]
+[section:intro What is Property Tree?]
+The Property Tree library provides a data structure that stores an arbitrarily
+deeply nested tree of values, indexed at each level by some key. Each node of
+the tree stores its own value, plus an ordered list of its subnodes and their
+keys. The tree allows easy access to any of its nodes by means of a path, which
+is a concatenation of multiple keys.
+
+In addition, the library provides parsers and generators for a number of data
+formats that can be represented by such a tree, including XML, INI, and JSON.
+
+Property trees are versatile data structures, but are particularly suited for
+holding configuration data. The tree provides its own, tree-specific interface,
+and each node is also an STL-compatible Sequence for its child nodes.
+
+Conceptually, then, a node can be thought of as the following structure:
+
+   struct ptree
+   {
+      data_type data;                         // data associated with the node
+      list< pair<key_type, ptree> > children; // ordered list of named children
+   };
+
+Both key_type and data_type are configurable to some extent, but will usually be
+std::string or std::wstring, and the parsers only work with this kind of tree.
+
+Many software projects develop a similar tool at some point of their lifetime,
+and property tree originated the same way.  We hope the library can save many
+from reinventing the wheel.
+[endsect] [/intro]
diff --git a/vendor/pdalboost/libs/property_tree/doc/json_parser.qbk b/vendor/pdalboost/libs/property_tree/doc/json_parser.qbk
new file mode 100644
index 0000000..d27355c
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/doc/json_parser.qbk
@@ -0,0 +1,69 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
+ / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section JSON Parser]
+[def __json__ [@http://en.wikipedia.org/wiki/JSON JSON format]]
+The __json__ is a data interchange format derived from the object literal
+notation of JavaScript. (JSON stands for JavaScript Object Notation.)
+JSON is a simple, compact format for loosely structured node trees of any depth,
+very similar to the property tree dataset. It is less structured than XML and
+has no schema support, but has the advantage of being simpler, smaller and typed
+without the need for a complex schema.
+
+The property tree dataset is not typed, and does not support arrays as such.
+Thus, the following JSON / property tree mapping is used:
+
+* JSON objects are mapped to nodes. Each property is a child node.
+* JSON arrays are mapped to nodes. Each element is a child node with an empty
+  name. If a node has both named and unnamed child nodes, it cannot be mapped
+  to a JSON representation.
+* JSON values are mapped to nodes containing the value. However, all type
+  information is lost; numbers, as well as the literals "null", "true" and
+  "false" are simply mapped to their string form.
+* Property tree nodes containing both child nodes and data cannot be mapped.
+
+JSON round-trips, except for the type information loss.
+
+For example this JSON:
+
+ {
+    "menu": 
+    {
+       "foo": true,
+       "bar": "true",
+       "value": 102.3E+06,
+       "popup": 
+       [
+          {"value": "New", "onclick": "CreateNewDoc()"},
+          {"value": "Open", "onclick": "OpenDoc()"},
+       ]
+    }
+ }
+
+will be translated into the following property tree:
+
+ menu
+ {
+    foo true
+    bar true
+    value 102.3E+06
+    popup
+    {
+       ""
+       {
+          value New
+          onclick CreateNewDoc()
+       }
+       ""
+       {
+          value Open
+          onclick OpenDoc()
+       }
+    }
+ }
+
+[endsect] [/json_parser]
diff --git a/vendor/pdalboost/libs/property_tree/doc/parsers.qbk b/vendor/pdalboost/libs/property_tree/doc/parsers.qbk
new file mode 100644
index 0000000..d408611
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/doc/parsers.qbk
@@ -0,0 +1,24 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
+ / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section:parsers How to Populate a Property Tree]
+[include xml_parser.qbk]
+
+[include json_parser.qbk]
+
+[include ini_parser.qbk]
+
+[include info_parser.qbk]
+
+[/ These parsers will be dropped for now.]
+[/ include cmd_line_parser.qbk]
+
+[/ include windows_registry_parser.qbk]
+
+[/ include system_environment_parser.qbk]
+
+[endsect] [/parsers]
diff --git a/vendor/pdalboost/libs/property_tree/doc/property_tree.qbk b/vendor/pdalboost/libs/property_tree/doc/property_tree.qbk
new file mode 100644
index 0000000..83f6a6b
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/doc/property_tree.qbk
@@ -0,0 +1,118 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
+ / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+
+[library Boost.PropertyTree
+    [quickbook 1.6]
+    [copyright 2008-2010 Marcin Kalicinski]
+    [copyright 2010-2013 Sebastian Redl]
+    [purpose Property Tree library]
+    [license
+        Distributed under the Boost Software License, Version 1.0.
+        (See accompanying file LICENSE_1_0.txt or copy at
+        [@http://www.boost.org/LICENSE_1_0.txt])
+    ]
+    [authors [Kalicinski, Marcin], [Redl, Sebastian]]
+    [id property_tree]
+    [dirname property_tree]
+    [category container]
+    [category template]
+]
+
+[/ Tried to use templates here but got errors expanding them in [classref ...] etc.]
+[/ types]
+[def __ptree__ [classref boost::property_tree::ptree ptree]]
+[def __ptree_value_type__ [classref boost::property_tree::basic_ptree::value_type value_type]]
+[def __ptree_data_type__ [classref boost::property_tree::basic_ptree::data_type data_type]]
+[def __ptree_iterator__ [classref boost::property_tree::basic_ptree::iterator iterator]]
+[def __ptree_const_iterator__ [classref boost::property_tree::basic_ptree::const_iterator const_iterator]]
+[def __ptree_assoc_iterator__ [classref boost::property_tree::basic_ptree::assoc_iterator assoc_iterator]]
+[def __ptree_const_assoc_iterator__ [classref boost::property_tree::basic_ptree::const_assoc_iterator const_assoc_iterator]]
+[def __path__ [classref boost::property_tree::string_path path]]
+[def __ptree_error__ [classref boost::property_tree::ptree_error ptree_error]]
+[def __ptree_bad_data__ [classref boost::property_tree::ptree_bad_data ptree_bad_data]]
+[def __ptree_bad_path__ [classref boost::property_tree::ptree_bad_path ptree_bad_path]]
+
+[/ members]
+[def __ptree_data__ [memberref boost::property_tree::basic_ptree::data data]]
+[def __ptree_find__ [memberref boost::property_tree::basic_ptree::find find]]
+[def __ptree_insert__ [memberref boost::property_tree::basic_ptree::insert insert]]
+[def __ptree_push_front__ [memberref boost::property_tree::basic_ptree::push_front push_front]]
+[def __ptree_push_back__ [memberref boost::property_tree::basic_ptree::push_back push_back]]
+[def __ptree_erase__ [memberref boost::property_tree::basic_ptree::erase erase]]
+[def __ptree_sort__ [memberref boost::property_tree::basic_ptree::sort sort]]
+[def __ptree_get__ [memberref boost::property_tree::basic_ptree::get get]]
+[/ XXX: Don't know how to specify overloads]
+[def __ptree_get_defaulted__ [memberref boost::property_tree::basic_ptree::get get]]
+[def __ptree_get_optional__ [memberref boost::property_tree::basic_ptree::get_optional get_optional]]
+[def __ptree_get_value__ [memberref boost::property_tree::basic_ptree::get_value get_value]]
+[/ XXX: Don't know how to specify overloads]
+[def __ptree_get_value_defaulted__ [memberref boost::property_tree::basic_ptree::get_value get_value]]
+[def __ptree_get_value_optional__ [memberref boost::property_tree::basic_ptree::get_value_optional get_value_optional]]
+[def __ptree_get_child__ [memberref boost::property_tree::basic_ptree::get_child get_child]]
+[def __ptree_put__ [memberref boost::property_tree::basic_ptree::put put]]
+[def __ptree_add__ [memberref boost::property_tree::basic_ptree::add add]]
+[def __ptree_put_value__ [memberref boost::property_tree::basic_ptree::put_value put_value]]
+
+[/ free-functions]
+[def __read_xml__ [funcref boost::property_tree::xml_parser::read_xml read_xml]]
+[def __write_xml__ [funcref boost::property_tree::xml_parser::write_xml write_xml]]
+
+[include intro.qbk]
+
+[include tutorial.qbk]
+
+[include container.qbk]
+
+[include synopsis.qbk]
+
+[include parsers.qbk]
+
+[include accessing.qbk]
+
+[section Appendices]
+[heading Compatibility]
+Property tree uses partial class template specialization. There has been no
+attempt to work around lack of support for this. The library will therefore
+most probably not work with Visual C++ 7.0 or earlier, or gcc 2.x.
+
+Property tree has been tested (regressions successfully compiled and run)
+with the following compilers:
+
+* Visual C++ 8.0
+* gcc 3.4.2 (MinGW)
+* gcc 3.3.5 (Linux)
+* gcc 3.4.4 (Linux)
+* gcc 4.3.3 (Linux)
+* Intel C++ 9.0 (Linux)
+
+[heading Rationale]
+# [*Why are there 3 versions of __ptree_get__? Couldn't there be just one?]
+The three versions reflect experience gathered during several of years of using
+property tree in several different applications. During that time I tried hard
+to come up with one, proper form of the get function, and failed. I know of
+these three basic patterns of usage:
+
+ * ['Just get the data and I do not care if it cannot be done.]  This is used
+   when the programmer is fairly sure that data exists. Or in homework
+   assignments. Or when tomorrow is final deadline for your project.
+ * ['Get the data and revert to default value if it cannot be done.]  Used when
+   you want to allow omitting the key in question. Implemented by some similar
+   tools (windows INI file access functions).
+ * ['Get the data, but I care more whether you succeeded than I do for the data
+   itself.] Used when you want to vary control flow depending on get
+   success/failure. Or to check for presence of a key.
+
+[heading Future Development]
+* More parsers:  YAML, environment strings.
+* More robust XML parser.
+* Mathematical relations:  ptree difference, union, intersection.
+  Useful for finding configuration file changes etc.
+
+[endsect] [/ Appendices]
+
+[xinclude autodoc.xml]
diff --git a/vendor/pdalboost/libs/property_tree/doc/synopsis.qbk b/vendor/pdalboost/libs/property_tree/doc/synopsis.qbk
new file mode 100644
index 0000000..9a462d6
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/doc/synopsis.qbk
@@ -0,0 +1,35 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
+ / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section:synopsis Property Tree Synopsis]
+[def __basic_ptree__ [classref boost::property_tree::basic_ptree basic_ptree]]
+[def __ptree__ [classref boost::property_tree::ptree ptree]]
+[def __wptree__ [classref boost::property_tree::wptree wptree]]
+[def __iptree__ [classref boost::property_tree::iptree iptree]]
+[def __wiptree__ [classref boost::property_tree::wiptree wiptree]]
+[/ basic_ptree members]
+[def __ptree_get__ [memberref boost::property_tree::basic_ptree::get get]]
+[def __ptree_put__ [memberref boost::property_tree::basic_ptree::put put]]
+[def __ptree_get_value__ [memberref boost::property_tree::basic_ptree::get_value get_value]]
+[def __ptree_put_value__ [memberref boost::property_tree::basic_ptree::put_value put_value]]
+[def __ptree_get_child__ [memberref boost::property_tree::basic_ptree::get_child get_child]]
+[def __ptree_put_child__ [memberref boost::property_tree::basic_ptree::put_child put_child]]
+[def __ptree_data__ [memberref boost::property_tree::basic_ptree::data data]]
+The central component of the library is the __basic_ptree__ class template.
+Instances of this class are property trees. It is parametrized on key and data
+type, and key comparison policy; __ptree__, __wptree__, __iptree__ and
+__wiptree__ are typedefs of __basic_ptree__ using predefined combinations of
+template parameters.  Property tree is basically a somewhat simplified standard
+container (the closest being std::list), plus a bunch of extra member
+functions. These functions allow easy and effective access to the data stored
+in property tree. They are various variants of __ptree_get__, __ptree_put__,
+__ptree_get_value__, __ptree_put_value__, __ptree_get_child__,
+__ptree_put_child__. Additionally, there is a __ptree_data__ function to access
+node data directly.
+
+See the [classref boost::property_tree::basic_ptree basic_ptree class template synopsis] for more information.
+[endsect]
diff --git a/vendor/pdalboost/libs/property_tree/doc/system_environment_parser.qbk b/vendor/pdalboost/libs/property_tree/doc/system_environment_parser.qbk
new file mode 100644
index 0000000..eb3a673
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/doc/system_environment_parser.qbk
@@ -0,0 +1,10 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
+ / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section System Environment Parser]
+[note The system environment parser is not yet implemented.]
+[endsect] [/env_parser]
diff --git a/vendor/pdalboost/libs/property_tree/doc/tutorial.qbk b/vendor/pdalboost/libs/property_tree/doc/tutorial.qbk
new file mode 100644
index 0000000..9ef3a92
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/doc/tutorial.qbk
@@ -0,0 +1,56 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
+ / Copyright (c) 2009, 2013 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section:tutorial Five Minute Tutorial]
+[import ../examples/debug_settings.cpp]
+
+This tutorial uses XML. Note that the library is not specifically bound to XML,
+and any other supported format (such as INI or JSON) could be used instead.
+XML was chosen because the author thinks that a wide range of people is familiar
+with it.
+
+Suppose we are writing a logging system for some application, and need to read
+log configuration from a file when the program starts. The file with the log
+configuration looks like this:
+
+[pre
+<debug>
+    <filename>debug.log</filename>
+    <modules>
+        <module>Finance</module>
+        <module>Admin</module>
+        <module>HR</module>
+    </modules>
+    <level>2</level>
+</debug>
+]
+
+It contains the log filename, a list of modules where logging is enabled, and
+the debug level value.
+
+First we need some includes:
+
+[debug_settings_includes]
+
+To store the logging configuration in the program we create a debug_settings
+structure:
+
+[debug_settings_data]
+
+All that needs to be done now is to write implementations of load() and save()
+member functions. Let's first deal with load(). It contains just 7 lines of
+code, although it does all the necessary things, including error reporting:
+
+[debug_settings_load]
+
+Now the save() function. It is also 7 lines of code:
+
+[debug_settings_save]
+
+The full program [@boost:/libs/property_tree/examples/debug_settings.cpp debug_settings.cpp] is
+included in the examples directory.
+[endsect] [/tutorial]
diff --git a/vendor/pdalboost/libs/property_tree/doc/windows_registry_parser.qbk b/vendor/pdalboost/libs/property_tree/doc/windows_registry_parser.qbk
new file mode 100644
index 0000000..82d2aa8
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/doc/windows_registry_parser.qbk
@@ -0,0 +1,45 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
+ / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section:registry_parser Windows Registry Parser]
+[def __registry_parser.hpp__ [headerref boost/property_tree/registry_parser.hpp registry_parser.hpp]]
+[def __read_registry__ [funcref boost::property_tree::registry_parser::read_registry read_registry]]
+[def __translate__ [funcref boost::property_tree::registry_parser::translate translate]]
+[def __write_registry__ [funcref boost::property_tree::registry_parser::write_registry write_registry]]
+This parser supports reading and writing data from Windows registry. There is only a subset of registry functionality implemented, because property tree is not intended to replace registry API. For example, access rights are not supported, as well as some exotic value formats. Registry is a rich data source, providing hierarchy of keys, each of whose can have any number of named and typed values attached to it. Because of that - like in XML - some translation is necessary.
+
+[important This parser will only work on a Windows system because it uses Windows API to access the registry. You will need to link with [^advapi32.lib].  A minimalist version of the [^windows.h] Windows header file is included by __registry_parser.hpp__. If you want to include [^windows.h] header on your own, do it before including __registry_parser.hpp__.]
+
+[heading How Registry Keys are Translated to Property Trees (__read_registry__):]
+
+* Values of each registry key are stored in a subkey with name [^\values]. The preceding backslash is there to prevent name clashes with regular keys. Each subkey of [^\values] is one registry value. If [^\values] subkey does not exist or is empty, there are no values attached to that key.
+* Types of values of each registry key are stored in a subkey with name [^\types]. These subkeys contain an integer equal to type of data stored in its corresponding entry in [^\values] (correspondence is by name, not position).
+* So called "default value" (value attached to key itself), is translated directly to key data and is always assumed to be of type [^REG_SZ].
+* [^REG_BINARY] values are translated to textual format before placing in property tree. The format is the same as the one displayed by regedit application: a series of two-digit hexadecimal numbers representing bytes separated with spaces. To translate from this format to binary data, or vice versa, use the __translate__ function.
+* Supported value types are: [^REG_NONE], [^REG_SZ], [^REG_EXPAND_SZ], [^REG_DWORD], [^REG_QWORD], [^REG_BINARY].
+
+Translation of property tree back into registry (__write_registry__) assumes the same structure as outlined above. That means if you want to have named values, you need to create [^\values] and [^\types] subkeys, and put them there. Also, you have to convert all [^REG_BINARY] values to textual format. Passing "normal" property tree (i.e. not containing [^\types] and [^\values] keys) to the __write_registry__ function will put all data in "default value" section of each key. This is fine, [...]
+
+For example, when you read registry key [^HKEY_CURRENT_USER\Software\Microsoft\Notepad], under Windows XP, you will get property tree containing Notepad font settings (among other things):
+
+ Notepad
+ {
+    \values
+    {
+       lfFaceName  Courier
+       lfItalic    0
+       lfWeight    190
+    }
+    \types
+    {
+       lfFaceName  1  ; REG_SZ
+       lfItalic    4  ; REG_DWORD
+       lfWeight    4  ; REG_DWORD
+    }
+ }
+
+[endsect] [/win_reg_parser]
diff --git a/vendor/pdalboost/libs/property_tree/doc/xml_parser.qbk b/vendor/pdalboost/libs/property_tree/doc/xml_parser.qbk
new file mode 100644
index 0000000..8a9a9b1
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/doc/xml_parser.qbk
@@ -0,0 +1,54 @@
+[/
+ / Copyright (c) 2008 Marcin Kalicinski (kalita <at> poczta dot onet dot pl)
+ / Copyright (c) 2009 Sebastian Redl (sebastian dot redl <at> getdesigned dot at)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+[section XML Parser]
+[def __xml__ [@http://en.wikipedia.org/wiki/XML XML format]]
+[def __xml_parser.hpp__ [headerref boost/property_tree/xml_parser.hpp xml_parser.hpp]]
+[def __RapidXML__ [@http://rapidxml.sourceforge.net/ RapidXML]]
+[def __boost__ [@http://www.boost.org Boost]]
+The __xml__ is an industry standard for storing information in textual
+form. Unfortunately, there is no XML parser in __boost__ as of the
+time of this writing. The library therefore contains the fast and tiny
+__RapidXML__ parser (currently in version 1.13) to provide XML parsing support.
+RapidXML does not fully support the XML standard; it is not capable of parsing
+DTDs and therefore cannot do full entity substitution.
+
+By default, the parser will preserve most whitespace, but remove element content
+that consists only of whitespace. Encoded whitespaces (e.g.  ) does not
+count as whitespace in this regard. You can pass the trim_whitespace flag if you
+want all leading and trailing whitespace trimmed and all continuous whitespace
+collapsed into a single space.
+
+Please note that RapidXML does not understand the encoding specification. If
+you pass it a character buffer, it assumes the data is already correctly
+encoded; if you pass it a filename, it will read the file using the character
+conversion of the locale you give it (or the global locale if you give it none).
+This means that, in order to parse a UTF-8-encoded XML file into a wptree, you
+have to supply an alternate locale, either directly or by replacing the global
+one.
+
+XML / property tree conversion schema (__read_xml__ and __write_xml__):
+
+* Each XML element corresponds to a property tree node. The child elements
+  correspond to the children of the node.
+* The attributes of an XML element are stored in the subkey [^<xmlattr>]. There
+  is one child node per attribute in the attribute node. Existence of the
+  [^<xmlattr>] node is not guaranteed or necessary when there are no attributes.
+* XML comments are stored in nodes named [^<xmlcomment>], unless comment
+  ignoring is enabled via the flags.
+* Text content is stored in one of two ways, depending on the flags. The default
+  way concatenates all text nodes and stores them as the data of the element
+  node. This way, the entire content can be conveniently read, but the
+  relative ordering of text and child elements is lost. The other way stores
+  each text content as a separate node, all called [^<xmltext>].
+
+The XML storage encoding does not round-trip perfectly. A read-write cycle loses
+trimmed whitespace, low-level formatting information, and the distinction
+between normal data and CDATA nodes. Comments are only preserved when enabled.
+A write-read cycle loses trimmed whitespace; that is, if the origin tree has
+string data that starts or ends with whitespace, that whitespace is lost.
+[endsect] [/xml_parser]
diff --git a/vendor/pdalboost/libs/property_tree/examples/Jamfile.v2 b/vendor/pdalboost/libs/property_tree/examples/Jamfile.v2
new file mode 100644
index 0000000..07c382a
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/examples/Jamfile.v2
@@ -0,0 +1,12 @@
+# Boost PropertyTree Library Example Jamfile
+# Copyright (c) 2013 Sebastian Redl
+# Distributed under the Boost Software License, Version 1.0.
+# See http://www.boost.org/LICENSE_1_0.txt
+
+project
+    : requirements
+      <include>../../../
+    :
+		;
+
+exe debug_settings : debug_settings.cpp ;
diff --git a/vendor/pdalboost/libs/property_tree/examples/custom_data_type.cpp b/vendor/pdalboost/libs/property_tree/examples/custom_data_type.cpp
new file mode 100644
index 0000000..01653c5
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/examples/custom_data_type.cpp
@@ -0,0 +1,88 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+// This example shows what need to be done to customize data_type of ptree.
+//
+// It creates my_ptree type, which is a basic_ptree having pdalboost::any as its data
+// container (instead of std::string that standard ptree has).
+
+#include <boost/property_tree/ptree.hpp>
+#include <boost/any.hpp>
+#include <list>
+#include <string>
+#include <iostream>
+
+// Custom translator that works with pdalboost::any instead of std::string
+template <class Ext, class Int = pdalboost::any>
+struct variant_translator
+{
+    typedef Ext external_type;
+    typedef Int internal_type;
+
+    external_type
+    get_value(const internal_type &value) const
+    {
+        return pdalboost::any_cast<external_type>(value);
+    }
+    internal_type
+    put_value(const external_type &value) const
+    {
+        return value;
+    }
+};
+
+int main()
+{
+    
+    using namespace pdalboost::property_tree;
+    
+    // Property_tree with pdalboost::any as data type
+    // Key type:        std::string
+    // Data type:       pdalboost::any
+    // Key comparison:  default (std::less<std::string>)
+    typedef basic_ptree<std::string, pdalboost::any> my_ptree;
+    my_ptree pt;
+
+    // Put/get int value
+    typedef variant_translator<int> int_tran;
+    pt.put("int value", 3, int_tran());
+    int int_value = pt.get<int>("int value", int_tran());
+    std::cout << "Int value: " << int_value << "\n";
+
+    // Put/get string value
+    typedef variant_translator<std::string> string_tran;
+    pt.put<std::string>("string value", "foo bar", string_tran());
+    std::string string_value = pt.get<std::string>(
+        "string value"
+      , string_tran()
+    );
+    std::cout << "String value: " << string_value << "\n";
+
+    // Put/get list<int> value
+    typedef std::list<int> intlist;
+    typedef variant_translator<intlist> intlist_tran;
+    int list_data[] = { 1, 2, 3, 4, 5 };
+    pt.put<intlist>(
+        "list value"
+      , intlist(
+            list_data
+          , list_data + sizeof(list_data) / sizeof(*list_data)
+        )
+      , intlist_tran()
+    );
+    intlist list_value = pt.get<intlist>(
+        "list value"
+      , intlist_tran()
+    );
+    std::cout << "List value: ";
+    for (intlist::iterator it = list_value.begin(); it != list_value.end(); ++it)
+        std::cout << *it << ' ';
+    std::cout << '\n';
+}
diff --git a/vendor/pdalboost/libs/property_tree/examples/debug_settings.cpp b/vendor/pdalboost/libs/property_tree/examples/debug_settings.cpp
new file mode 100644
index 0000000..aaf2c44
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/examples/debug_settings.cpp
@@ -0,0 +1,95 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+//[debug_settings_includes
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/xml_parser.hpp>
+#include <boost/foreach.hpp>
+#include <string>
+#include <set>
+#include <exception>
+#include <iostream>
+namespace pt = pdalboost::property_tree;
+//]
+//[debug_settings_data
+struct debug_settings
+{
+    std::string m_file;               // log filename
+    int m_level;                      // debug level
+    std::set<std::string> m_modules;  // modules where logging is enabled
+    void load(const std::string &filename);
+    void save(const std::string &filename);
+};
+//]
+//[debug_settings_load
+void debug_settings::load(const std::string &filename)
+{
+    // Create empty property tree object
+    pt::ptree tree;
+
+    // Parse the XML into the property tree.
+    pt::read_xml(filename, tree);
+
+    // Use the throwing version of get to find the debug filename.
+    // If the path cannot be resolved, an exception is thrown.
+    m_file = tree.get<std::string>("debug.filename");
+
+    // Use the default-value version of get to find the debug level.
+    // Note that the default value is used to deduce the target type.
+    m_level = tree.get("debug.level", 0);
+
+    // Use get_child to find the node containing the modules, and iterate over
+    // its children. If the path cannot be resolved, get_child throws.
+    // A C++11 for-range loop would also work.
+    BOOST_FOREACH(pt::ptree::value_type &v, tree.get_child("debug.modules")) {
+        // The data function is used to access the data stored in a node.
+        m_modules.insert(v.second.data());
+    }
+
+}
+//]
+//[debug_settings_save
+void debug_settings::save(const std::string &filename)
+{
+    // Create an empty property tree object.
+    pt::ptree tree;
+
+    // Put the simple values into the tree. The integer is automatically
+    // converted to a string. Note that the "debug" node is automatically
+    // created if it doesn't exist.
+    tree.put("debug.filename", m_file);
+    tree.put("debug.level", m_level);
+
+    // Add all the modules. Unlike put, which overwrites existing nodes, add
+    // adds a new node at the lowest level, so the "modules" node will have
+    // multiple "module" children.
+    BOOST_FOREACH(const std::string &name, m_modules)
+        tree.add("debug.modules.module", name);
+
+    // Write property tree to XML file
+    pt::write_xml(filename, tree);
+}
+//]
+
+int main()
+{
+    try
+    {
+        debug_settings ds;
+        ds.load("debug_settings_xml");
+        ds.save("debug_settings_out.xml");
+        std::cout << "Success\n";
+    }
+    catch (std::exception &e)
+    {
+        std::cout << "Error: " << e.what() << "\n";
+    }
+    return 0;
+}
diff --git a/vendor/pdalboost/libs/property_tree/examples/debug_settings.xml b/vendor/pdalboost/libs/property_tree/examples/debug_settings.xml
new file mode 100644
index 0000000..2ac170e
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/examples/debug_settings.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright (C) 2006 Marcin Kalicinski
+Distributed under the Boost Software License, Version 1.0.
+See http://www.boost.org/LICENSE_1_0.txt
+-->
+<debug>
+    <filename>debug.log</filename>
+    <modules>
+        <module>Finance</module>
+        <module>Admin</module>
+        <module>HR</module>
+    </modules>
+    <level>2</level>
+</debug>
diff --git a/vendor/pdalboost/libs/property_tree/examples/empty_ptree_trick.cpp b/vendor/pdalboost/libs/property_tree/examples/empty_ptree_trick.cpp
new file mode 100644
index 0000000..1300493
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/examples/empty_ptree_trick.cpp
@@ -0,0 +1,71 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/info_parser.hpp>
+#include <iostream>
+#include <iomanip>
+#include <string>
+
+using namespace pdalboost::property_tree;
+
+// Process settings using empty ptree trick. Note that it is considerably simpler 
+// than version which does not use the "trick"
+void process_settings(const std::string &filename)
+{
+    ptree pt;
+    read_info(filename, pt);    
+    const ptree &settings = pt.get_child("settings", empty_ptree<ptree>());
+    std::cout << "\n    Processing " << filename << std::endl;
+    std::cout << "        Setting 1 is " << settings.get("setting1", 0) << std::endl;
+    std::cout << "        Setting 2 is " << settings.get("setting2", 0.0) << std::endl;
+    std::cout << "        Setting 3 is " << settings.get("setting3", "default") << std::endl;
+}
+
+// Process settings not using empty ptree trick. This one must duplicate much of the code.
+void process_settings_without_trick(const std::string &filename)
+{
+    ptree pt;
+    read_info(filename, pt);    
+    if (pdalboost::optional<ptree &> settings = pt.get_child_optional("settings"))
+    {
+        std::cout << "\n    Processing " << filename << std::endl;
+        std::cout << "        Setting 1 is " << settings.get().get("setting1", 0) << std::endl;
+        std::cout << "        Setting 2 is " << settings.get().get("setting2", 0.0) << std::endl;
+        std::cout << "        Setting 3 is " << settings.get().get("setting3", "default") << std::endl;
+    }
+    else
+    {
+        std::cout << "\n    Processing " << filename << std::endl;
+        std::cout << "        Setting 1 is " << 0 << std::endl;
+        std::cout << "        Setting 2 is " << 0.0 << std::endl;
+        std::cout << "        Setting 3 is " << "default" << std::endl;
+    }
+}
+
+int main()
+{
+    try
+    {
+        std::cout << "Processing settings with empty-ptree-trick:\n";
+        process_settings("settings_fully-existent.info");
+        process_settings("settings_partially-existent.info");
+        process_settings("settings_non-existent.info");
+        std::cout << "\nProcessing settings without empty-ptree-trick:\n";
+        process_settings_without_trick("settings_fully-existent.info");
+        process_settings_without_trick("settings_partially-existent.info");
+        process_settings_without_trick("settings_non-existent.info");
+    }
+    catch (std::exception &e)
+    {
+        std::cout << "Error: " << e.what() << "\n";
+    }
+    return 0;
+}
diff --git a/vendor/pdalboost/libs/property_tree/examples/info_grammar_spirit.cpp b/vendor/pdalboost/libs/property_tree/examples/info_grammar_spirit.cpp
new file mode 100644
index 0000000..1957261
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/examples/info_grammar_spirit.cpp
@@ -0,0 +1,152 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+/* This is grammar of INFO file format written in form of pdalboost::spirit rules.
+   For simplicity, it does not parse #include directive. Note that INFO parser 
+   included in property_tree library does not use Spirit.
+*/
+
+//#define BOOST_SPIRIT_DEBUG        // uncomment to enable debug output
+#include <boost/spirit.hpp>
+
+struct info_grammar: public pdalboost::spirit::grammar<info_grammar>
+{
+    
+    template<class Scanner>
+    struct definition
+    {
+        
+        pdalboost::spirit::rule<typename pdalboost::spirit::lexeme_scanner<Scanner>::type> chr, qchr, escape_seq;
+        pdalboost::spirit::rule<Scanner> string, qstring, cstring, key, value, entry, info;
+
+        definition(const info_grammar &self)
+        {
+
+            using namespace pdalboost::spirit;
+
+            escape_seq = chset_p("0abfnrtv\"\'\\");
+            chr = (anychar_p - space_p - '\\' - '{' - '}' - '#' - '"') | ('\\' >> escape_seq);
+            qchr = (anychar_p - '"' - '\n' - '\\') | ('\\' >> escape_seq);
+            string = lexeme_d[+chr];
+            qstring = lexeme_d['"' >> *qchr >> '"'];
+            cstring = lexeme_d['"' >> *qchr >> '"' >> '\\'];
+            key = string | qstring;
+            value = string | qstring | (+cstring >> qstring) | eps_p;
+            entry = key >> value >> !('{' >> *entry >> '}');
+            info = *entry >> end_p;
+
+            // Debug nodes
+            BOOST_SPIRIT_DEBUG_NODE(escape_seq);
+            BOOST_SPIRIT_DEBUG_NODE(chr);
+            BOOST_SPIRIT_DEBUG_NODE(qchr);
+            BOOST_SPIRIT_DEBUG_NODE(string);
+            BOOST_SPIRIT_DEBUG_NODE(qstring);
+            BOOST_SPIRIT_DEBUG_NODE(key);
+            BOOST_SPIRIT_DEBUG_NODE(value);
+            BOOST_SPIRIT_DEBUG_NODE(entry);
+            BOOST_SPIRIT_DEBUG_NODE(info);
+
+        }
+
+        const pdalboost::spirit::rule<Scanner> &start() const
+        {
+            return info;
+        }
+
+    };
+};
+
+void info_parse(const char *s)
+{
+
+    using namespace pdalboost::spirit;
+
+    // Parse and display result
+    info_grammar g;
+    parse_info<const char *> pi = parse(s, g, space_p | comment_p(";"));
+    std::cout << "Parse result: " << (pi.hit ? "Success" : "Failure") << "\n";
+    
+}
+
+int main()
+{
+
+    // Sample data 1
+    const char *data1 = 
+        "\n"
+        "key1 data1\n"
+        "{\n"
+        "\tkey data\n"
+        "}\n"
+        "key2 \"data2  \" {\n"
+        "\tkey data\n"
+        "}\n"
+        "key3 \"data\"\n"
+        "\t \"3\" {\n"
+        "\tkey data\n"
+        "}\n"
+        "\n"
+        "\"key4\" data4\n"
+        "{\n"
+        "\tkey data\n"
+        "}\n"
+        "\"key.5\" \"data.5\" { \n"
+        "\tkey data \n"
+        "}\n"
+        "\"key6\" \"data\"\n"
+        "\t   \"6\" {\n"
+        "\tkey data\n"
+        "}\n"
+        "   \n"
+        "key1 data1\n"
+        "{\n"
+        "\tkey data\n"
+        "}\n"
+        "key2 \"data2  \" {\n"
+        "\tkey data\n"
+        "}\n"
+        "key3 \"data\"\n"
+        "\t \"3\" {\n"
+        "\tkey data\n"
+        "}\n"
+        "\n"
+        "\"key4\" data4\n"
+        "{\n"
+        "\tkey data\n"
+        "}\n"
+        "\"key.5\" \"data.5\" {\n"
+        "\tkey data\n"
+        "}\n"
+        "\"key6\" \"data\"\n"
+        "\t   \"6\" {\n"
+        "\tkey data\n"
+        "}\n"
+        "\\\\key\\t7 data7\\n\\\"data7\\\"\n"
+        "{\n"
+        "\tkey data\n"
+        "}\n"
+        "\"\\\\key\\t8\" \"data8\\n\\\"data8\\\"\"\n"
+        "{\n"
+        "\tkey data\n"
+        "}\n"
+        "\n";
+
+    // Sample data 2
+    const char *data2 = 
+        "key1\n"
+        "key2\n"
+        "key3\n"
+        "key4\n";
+
+    // Parse sample data
+    info_parse(data1);
+    info_parse(data2);
+
+}
diff --git a/vendor/pdalboost/libs/property_tree/examples/settings_fully-existent.info b/vendor/pdalboost/libs/property_tree/examples/settings_fully-existent.info
new file mode 100644
index 0000000..bec7a64
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/examples/settings_fully-existent.info
@@ -0,0 +1,6 @@
+settings
+{
+	setting1 15
+	setting2 9.876
+	setting3 Alice in Wonderland
+}
diff --git a/vendor/pdalboost/libs/property_tree/examples/settings_non-existent.info b/vendor/pdalboost/libs/property_tree/examples/settings_non-existent.info
new file mode 100644
index 0000000..4f76b2a
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/examples/settings_non-existent.info
@@ -0,0 +1,6 @@
+;settings							// non-existent
+;{
+;	setting1 15
+;	setting2 9.876
+;	setting3 Alice in Wonderland
+;}
diff --git a/vendor/pdalboost/libs/property_tree/examples/settings_partially-existent.info b/vendor/pdalboost/libs/property_tree/examples/settings_partially-existent.info
new file mode 100644
index 0000000..ed5e8c2
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/examples/settings_partially-existent.info
@@ -0,0 +1,6 @@
+settings
+{
+	setting1 15
+	;setting2 9.876						// non-existent
+	;setting3 Alice in Wonderland		// non-existent
+}
diff --git a/vendor/pdalboost/libs/property_tree/examples/speed_test.cpp b/vendor/pdalboost/libs/property_tree/examples/speed_test.cpp
new file mode 100644
index 0000000..49247b7
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/examples/speed_test.cpp
@@ -0,0 +1,130 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+#define _HAS_ITERATOR_DEBUGGING 0
+
+#include <boost/property_tree/ptree.hpp>
+#include <boost/format.hpp>
+#include <boost/shared_array.hpp>
+#include <iostream>
+#include <ctime>
+#include <algorithm>
+
+using namespace std;
+using namespace pdalboost;
+using namespace pdalboost::property_tree;
+
+string dummy;
+vector<string> keys;
+vector<string> shuffled_keys;
+
+void prepare_keys(int size)
+{
+    // Prepare keys
+    keys.clear();
+    for (int i = 0; i < size; ++i)
+        keys.push_back((format("%d") % i).str());
+    shuffled_keys = keys;
+    srand(0);
+    random_shuffle(shuffled_keys.begin(), shuffled_keys.end());
+}
+
+void clock_push_back(int size)
+{
+    prepare_keys(size);
+    int max_repeats = 1000000 / size;
+    shared_array<ptree> pt_array(new ptree[max_repeats]);
+
+    int n = 0;
+    clock_t t1 = clock(), t2;
+    do
+    {
+        if (n >= max_repeats)
+            break;
+        ptree &pt = pt_array[n];
+        for (int i = 0; i < size; ++i)
+            pt.push_back(ptree::value_type(shuffled_keys[i], ptree()));
+        t2 = clock();
+        ++n;
+    } while (t2 - t1 < CLOCKS_PER_SEC);
+
+    cout << "  push_back (" << size << "): " << double(t2 - t1) / CLOCKS_PER_SEC / n * 1000 << " ms\n";
+
+}
+
+void clock_find(int size)
+{
+    prepare_keys(size);
+
+    ptree pt;
+    for (int i = 0; i < size; ++i)
+        pt.push_back(ptree::value_type(keys[i], ptree("data")));
+
+    int n = 0;
+    clock_t t1 = clock(), t2;
+    do
+    {
+        for (int i = 0; i < size; ++i)
+            pt.find(shuffled_keys[i]);
+        t2 = clock();
+        ++n;
+    } while (t2 - t1 < CLOCKS_PER_SEC);
+
+    cout << "  find (" << size << "): " << double(t2 - t1) / CLOCKS_PER_SEC / n * 1000 << " ms\n";
+
+}
+
+void clock_erase(int size)
+{
+    prepare_keys(size);
+
+    int max_repeats = 100000 / size;
+    shared_array<ptree> pt_array(new ptree[max_repeats]);
+
+    ptree pt;
+    for (int n = 0; n < max_repeats; ++n)
+        for (int i = 0; i < size; ++i)
+            pt_array[n].push_back(ptree::value_type(keys[i], ptree("data")));
+
+    int n = 0;
+    clock_t t1 = clock(), t2;
+    do
+    {
+        if (n >= max_repeats)
+            break;
+        ptree &pt = pt_array[n];
+        for (int i = 0; i < size; ++i)
+            pt.erase(shuffled_keys[i]);
+        t2 = clock();
+        ++n;
+    } while (t2 - t1 < CLOCKS_PER_SEC);
+
+    cout << "  erase (" << size << "): " << double(t2 - t1) / CLOCKS_PER_SEC / n * 1000 << " ms\n";
+}
+
+int main()
+{
+
+    // push_back
+    clock_push_back(10);
+    clock_push_back(100);
+    clock_push_back(1000);
+
+    // erase
+    clock_erase(10);
+    clock_erase(100);
+    clock_erase(1000);
+
+    // find
+    clock_find(10);
+    clock_find(100);
+    clock_find(1000);
+
+}
diff --git a/vendor/pdalboost/libs/property_tree/index.html b/vendor/pdalboost/libs/property_tree/index.html
new file mode 100644
index 0000000..5d80030
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/index.html
@@ -0,0 +1,14 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0; URL=../../doc/html/property_tree.html">
+</head>
+<body>
+Automatic redirection failed, please go to the 
+<a href="../../doc/html/property_tree.html">Boost.PropertyTree documentation</a>.
+<p>Copyright Sebastian Redl 2009</p>
+<p>Distributed under the Boost Software License, Version 1.0. (See accompanying file
+<a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy at
+<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>).
+</p>
+</body>
+</html>
diff --git a/vendor/pdalboost/libs/property_tree/meta/libraries.json b/vendor/pdalboost/libs/property_tree/meta/libraries.json
new file mode 100644
index 0000000..025c043
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/meta/libraries.json
@@ -0,0 +1,16 @@
+{
+    "key": "property_tree",
+    "name": "Property Tree",
+    "authors": [
+        "Marcin Kalicinski",
+        "Sebastian Redl"
+    ],
+    "description": "A tree data structure especially suited to storing configuration data.",
+    "category": [
+        "Containers",
+        "Data"
+    ],
+    "maintainers": [
+        "Sebastian Redl <sebastian.redl -at- getdesigned.at>"
+    ]
+}
diff --git a/vendor/pdalboost/libs/property_tree/test/Jamfile.v2 b/vendor/pdalboost/libs/property_tree/test/Jamfile.v2
new file mode 100644
index 0000000..75c7359
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/Jamfile.v2
@@ -0,0 +1,27 @@
+# Boost.PropertyTree
+#
+# Copyright (c) 2009 Sebastian Redl
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+# bring in rules for testing
+import testing ;
+
+project
+    : requirements
+      <link>static
+      <toolset>msvc:<define>_SCL_SECURE_NO_WARNINGS=1
+    ;
+
+test-suite "property_tree"
+   : [ run test_property_tree.cpp /boost/serialization//pdalboost_serialization ]
+     [ run test_info_parser.cpp ]
+     [ run test_json_parser.cpp ]
+     [ run test_json_parser2.cpp /boost/test//pdalboost_unit_test_framework ]
+     [ run test_ini_parser.cpp ]
+     [ run test_xml_parser_rapidxml.cpp ]
+
+     [ run test_multi_module1.cpp test_multi_module2.cpp ]
+;
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/debug_settings.xml b/vendor/pdalboost/libs/property_tree/test/custom-build/debug_settings.xml
new file mode 100644
index 0000000..2ac170e
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/debug_settings.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright (C) 2006 Marcin Kalicinski
+Distributed under the Boost Software License, Version 1.0.
+See http://www.boost.org/LICENSE_1_0.txt
+-->
+<debug>
+    <filename>debug.log</filename>
+    <modules>
+        <module>Finance</module>
+        <module>Admin</module>
+        <module>HR</module>
+    </modules>
+    <level>2</level>
+</debug>
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/gcc.mak b/vendor/pdalboost/libs/property_tree/test/custom-build/gcc.mak
new file mode 100644
index 0000000..c488d2c
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/gcc.mak
@@ -0,0 +1,14 @@
+# Boost.PropertyTree
+#
+# Copyright (c) 2009 Sebastian Redl
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+CC=g++
+CFLAGSREL=-Wall -pedantic -ftemplate-depth-255 -O3
+CFLAGSDBG=-Wall -pedantic -ftemplate-depth-255 -O0
+INCLUDE=-I../../../../../boost -I../../../..
+
+-include Makefile-Common
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/icc.mak b/vendor/pdalboost/libs/property_tree/test/custom-build/icc.mak
new file mode 100644
index 0000000..c7cb34e
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/icc.mak
@@ -0,0 +1,14 @@
+# Boost.PropertyTree
+#
+# Copyright (c) 2009 Sebastian Redl
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+CC=icc
+CFLAGSREL=-O3 -static
+CFLAGSDBG=-O0 -static
+INCLUDE=-I../../../../../boost -I../../../..
+
+-include Makefile-Common
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/sandbox.vcproj b/vendor/pdalboost/libs/property_tree/test/custom-build/sandbox.vcproj
new file mode 100644
index 0000000..b7bbd5c
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/sandbox.vcproj
@@ -0,0 +1,330 @@
+<?xml version="1.0" encoding="windows-1250"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="sandbox"
+	ProjectGUID="{85FA9AEF-966B-4D93-9431-F507754B0431}"
+	RootNamespace="test_property_tree"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				ExceptionHandling="1"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				TreatWChar_tAsBuiltInType="true"
+				RuntimeTypeInfo="false"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				WholeProgramOptimization="false"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				ExceptionHandling="2"
+				RuntimeLibrary="0"
+				BufferSecurityCheck="false"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="detail"
+			>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\exceptions_implementation.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\file_parser_error.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\info_parser_error.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\info_parser_read.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\info_parser_utils.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\info_parser_write.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\json_parser_error.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\json_parser_read.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\json_parser_write.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\path_implementation.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\ptree_implementation.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\ptree_utils.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\pugxml.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\rapidxml.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\translator_implementation.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\xml_parser_error.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\xml_parser_flags.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\xml_parser_read_pugixml.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\xml_parser_read_pugxml.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\xml_parser_read_rapidxml.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\xml_parser_read_spirit.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\xml_parser_read_tinyxml.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\xml_parser_utils.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\xml_parser_write.hpp"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\..\boost\property_tree\detail\xml_parser_writer_settings.hpp"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath="..\..\..\..\boost\property_tree\cmdline_parser.hpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\..\..\boost\property_tree\info_parser.hpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\..\..\boost\property_tree\ini_parser.hpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\..\..\boost\property_tree\json_parser.hpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\..\..\boost\property_tree\ptree.hpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\..\..\boost\property_tree\ptree_fwd.hpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\..\..\boost\property_tree\ptree_serialization.hpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\..\..\boost\property_tree\registry_parser.hpp"
+			>
+		</File>
+		<File
+			RelativePath="..\sandbox.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\..\..\..\boost\property_tree\xml_parser.hpp"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/settings_fully-existent.info b/vendor/pdalboost/libs/property_tree/test/custom-build/settings_fully-existent.info
new file mode 100644
index 0000000..bec7a64
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/settings_fully-existent.info
@@ -0,0 +1,6 @@
+settings
+{
+	setting1 15
+	setting2 9.876
+	setting3 Alice in Wonderland
+}
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/settings_non-existent.info b/vendor/pdalboost/libs/property_tree/test/custom-build/settings_non-existent.info
new file mode 100644
index 0000000..4f76b2a
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/settings_non-existent.info
@@ -0,0 +1,6 @@
+;settings							// non-existent
+;{
+;	setting1 15
+;	setting2 9.876
+;	setting3 Alice in Wonderland
+;}
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/settings_partially-existent.info b/vendor/pdalboost/libs/property_tree/test/custom-build/settings_partially-existent.info
new file mode 100644
index 0000000..ed5e8c2
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/settings_partially-existent.info
@@ -0,0 +1,6 @@
+settings
+{
+	setting1 15
+	;setting2 9.876						// non-existent
+	;setting3 Alice in Wonderland		// non-existent
+}
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/test_example_custom_data_type.vcproj b/vendor/pdalboost/libs/property_tree/test/custom-build/test_example_custom_data_type.vcproj
new file mode 100644
index 0000000..e7f240c
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/test_example_custom_data_type.vcproj
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="test_example_custom_data_type"
+	ProjectGUID="{87516DC2-FDF4-4ECC-8713-D6D955100D86}"
+	RootNamespace="test_property_tree"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				ExceptionHandling="2"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				WholeProgramOptimization="false"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				ExceptionHandling="2"
+				RuntimeLibrary="0"
+				BufferSecurityCheck="false"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\examples\custom_data_type.cpp"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/test_example_debug_settings.vcproj b/vendor/pdalboost/libs/property_tree/test/custom-build/test_example_debug_settings.vcproj
new file mode 100644
index 0000000..b91c196
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/test_example_debug_settings.vcproj
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="test_example_debug_settings"
+	ProjectGUID="{16D41CBD-3C58-4631-B4D4-29A42E47D619}"
+	RootNamespace="test_property_tree"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				ExceptionHandling="2"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				WholeProgramOptimization="false"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				ExceptionHandling="2"
+				RuntimeLibrary="0"
+				BufferSecurityCheck="false"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\examples\debug_settings.cpp"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/test_example_empty_ptree_trick.vcproj b/vendor/pdalboost/libs/property_tree/test/custom-build/test_example_empty_ptree_trick.vcproj
new file mode 100644
index 0000000..946c23e
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/test_example_empty_ptree_trick.vcproj
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="test_example_empty_ptree_trick"
+	ProjectGUID="{A242FE56-D039-4CEC-9FD3-AACABEA684C9}"
+	RootNamespace="test_property_tree"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				ExceptionHandling="2"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				WholeProgramOptimization="false"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				ExceptionHandling="2"
+				RuntimeLibrary="0"
+				BufferSecurityCheck="false"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\examples\empty_ptree_trick.cpp"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/test_info_grammar_spirit.vcproj b/vendor/pdalboost/libs/property_tree/test/custom-build/test_info_grammar_spirit.vcproj
new file mode 100644
index 0000000..9f02d63
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/test_info_grammar_spirit.vcproj
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="test_info_grammar_spirit"
+	ProjectGUID="{305891FE-2572-4F6A-A52B-3A1964A3CA76}"
+	RootNamespace="test_property_tree"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				ExceptionHandling="2"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				WholeProgramOptimization="false"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				ExceptionHandling="2"
+				RuntimeLibrary="0"
+				BufferSecurityCheck="false"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\..\examples\info_grammar_spirit.cpp"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/test_info_parser.vcproj b/vendor/pdalboost/libs/property_tree/test/custom-build/test_info_parser.vcproj
new file mode 100644
index 0000000..d490f80
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/test_info_parser.vcproj
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="test_info_parser"
+	ProjectGUID="{03A81E3E-895A-4E1D-A42C-EB155A2868E1}"
+	RootNamespace="test_property_tree"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				ExceptionHandling="2"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				WholeProgramOptimization="false"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				ExceptionHandling="2"
+				RuntimeLibrary="0"
+				BufferSecurityCheck="false"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\test_info_parser.cpp"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/test_ini_parser.vcproj b/vendor/pdalboost/libs/property_tree/test/custom-build/test_ini_parser.vcproj
new file mode 100644
index 0000000..1129c52
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/test_ini_parser.vcproj
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="test_ini_parser"
+	ProjectGUID="{20D5FE87-9284-4B1A-8505-7B913474C4AA}"
+	RootNamespace="test_property_tree"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				ExceptionHandling="2"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				WholeProgramOptimization="false"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				ExceptionHandling="2"
+				RuntimeLibrary="0"
+				BufferSecurityCheck="false"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\test_ini_parser.cpp"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/test_json_parser.vcproj b/vendor/pdalboost/libs/property_tree/test/custom-build/test_json_parser.vcproj
new file mode 100644
index 0000000..6930190
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/test_json_parser.vcproj
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="windows-1250"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="test_json_parser"
+	ProjectGUID="{CDDC4697-F51B-4B9A-A029-C2EB5271848F}"
+	RootNamespace="test_property_tree"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				ExceptionHandling="2"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				WholeProgramOptimization="false"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				ExceptionHandling="2"
+				RuntimeLibrary="0"
+				BufferSecurityCheck="false"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\test_json_parser.cpp"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/test_multi_module.vcproj b/vendor/pdalboost/libs/property_tree/test/custom-build/test_multi_module.vcproj
new file mode 100644
index 0000000..812bf50
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/test_multi_module.vcproj
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="test_multi_module"
+	ProjectGUID="{4B88BAC5-5CA8-403A-83E7-0F758405AB2D}"
+	RootNamespace="test_property_tree"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				ExceptionHandling="2"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				WholeProgramOptimization="false"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				ExceptionHandling="2"
+				RuntimeLibrary="0"
+				BufferSecurityCheck="false"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\test_multi_module1.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\test_multi_module2.cpp"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/test_property_tree.vcproj b/vendor/pdalboost/libs/property_tree/test/custom-build/test_property_tree.vcproj
new file mode 100644
index 0000000..2ce8fd3
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/test_property_tree.vcproj
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="test_property_tree"
+	ProjectGUID="{DB0C18AA-BBA4-4DBF-A76E-92B642E45A74}"
+	RootNamespace="test_property_tree"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				ExceptionHandling="2"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				TreatWChar_tAsBuiltInType="true"
+				RuntimeTypeInfo="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				WholeProgramOptimization="false"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				ExceptionHandling="2"
+				RuntimeLibrary="2"
+				BufferSecurityCheck="false"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\test_property_tree.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\test_property_tree.hpp"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/test_xml_parser.vcproj b/vendor/pdalboost/libs/property_tree/test/custom-build/test_xml_parser.vcproj
new file mode 100644
index 0000000..bf0e110
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/test_xml_parser.vcproj
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="windows-1250"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8,00"
+	Name="test_xml_parser"
+	ProjectGUID="{02D60AE7-3C50-45BB-AB12-ECCB22F1B9AF}"
+	RootNamespace="test_property_tree"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				ExceptionHandling="2"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ProjectName)/$(ConfigurationName)"
+			IntermediateDirectory="$(ProjectName)/$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="2"
+				EnableIntrinsicFunctions="true"
+				FavorSizeOrSpeed="1"
+				OmitFramePointers="true"
+				WholeProgramOptimization="false"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				ExceptionHandling="2"
+				RuntimeLibrary="0"
+				BufferSecurityCheck="false"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="..\test_xml_parser_common.hpp"
+			>
+		</File>
+		<File
+			RelativePath="..\test_xml_parser_rapidxml.cpp"
+			>
+		</File>
+		<File
+			RelativePath="..\xml_parser_test_data.hpp"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/vendor/pdalboost/libs/property_tree/test/custom-build/vc.mak b/vendor/pdalboost/libs/property_tree/test/custom-build/vc.mak
new file mode 100644
index 0000000..9129954
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/custom-build/vc.mak
@@ -0,0 +1,15 @@
+# Boost.PropertyTree
+#
+# Copyright (c) 2009 Sebastian Redl
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+CC=cl
+CFLAGSREL=-O2 -Ox -EHsc -DBOOST_DISABLE_WIN32 -nologo
+CFLAGSDBG=-EHsc -DBOOST_DISABLE_WIN32 -nologo
+EXTINCLUDE=
+EXTLIBS=
+
+-include Makefile-Common
diff --git a/vendor/pdalboost/libs/property_tree/test/prefixing_callbacks.hpp b/vendor/pdalboost/libs/property_tree/test/prefixing_callbacks.hpp
new file mode 100644
index 0000000..fc9a24e
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/prefixing_callbacks.hpp
@@ -0,0 +1,79 @@
+#ifndef JSON_PARSER_PREFIXING_CALLBACKS_HPP
+#define JSON_PARSER_PREFIXING_CALLBACKS_HPP
+
+#include <boost/property_tree/detail/json_parser/standard_callbacks.hpp>
+
+namespace constants
+{
+    template <typename Ch> const Ch* null_prefix();
+    template <> inline const char* null_prefix() { return "_:"; }
+    template <> inline const wchar_t* null_prefix() { return L"_:"; }
+
+    template <typename Ch> const Ch* boolean_prefix();
+    template <> inline const char* boolean_prefix() { return "b:"; }
+    template <> inline const wchar_t* boolean_prefix() { return L"b:"; }
+
+    template <typename Ch> const Ch* number_prefix();
+    template <> inline const char* number_prefix() { return "n:"; }
+    template <> inline const wchar_t* number_prefix() { return L"n:"; }
+
+    template <typename Ch> const Ch* string_prefix();
+    template <> inline const char* string_prefix() { return "s:"; }
+    template <> inline const wchar_t* string_prefix() { return L"s:"; }
+
+    template <typename Ch> const Ch* array_prefix();
+    template <> inline const char* array_prefix() { return "a:"; }
+    template <> inline const wchar_t* array_prefix() { return L"a:"; }
+
+    template <typename Ch> const Ch* object_prefix();
+    template <> inline const char* object_prefix() { return "o:"; }
+    template <> inline const wchar_t* object_prefix() { return L"o:"; }
+}
+
+template <typename Ptree>
+struct prefixing_callbacks
+        : pdalboost::property_tree::json_parser::detail::standard_callbacks<Ptree> {
+    typedef pdalboost::property_tree::json_parser::detail::standard_callbacks<Ptree>
+        base;
+    typedef typename base::string string;
+    typedef typename base::char_type char_type;
+
+    void on_null() {
+        base::on_null();
+        this->current_value().insert(0, constants::null_prefix<char_type>());
+    }
+
+    void on_boolean(bool b) {
+        base::on_boolean(b);
+        this->current_value().insert(0, constants::boolean_prefix<char_type>());
+    }
+
+    template <typename Range>
+    void on_number(Range code_units) {
+        base::on_number(code_units);
+        this->current_value().insert(0, constants::number_prefix<char_type>());
+    }
+    void on_begin_number() {
+        base::on_begin_number();
+        this->current_value() = constants::number_prefix<char_type>();
+    }
+
+    void on_begin_string() {
+        base::on_begin_string();
+        if (!this->is_key()) {
+            this->current_value() = constants::string_prefix<char_type>();
+        }
+    }
+
+    void on_begin_array() {
+        base::on_begin_array();
+        this->current_value() = constants::array_prefix<char_type>();
+    }
+
+    void on_begin_object() {
+        base::on_begin_object();
+        this->current_value() = constants::object_prefix<char_type>();
+    }
+};
+
+#endif
diff --git a/vendor/pdalboost/libs/property_tree/test/sandbox.cpp b/vendor/pdalboost/libs/property_tree/test/sandbox.cpp
new file mode 100644
index 0000000..cf52c9e
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/sandbox.cpp
@@ -0,0 +1,22 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2009 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+#define _CRT_SECURE_NO_DEPRECATE
+#include <boost/property_tree/xml_parser.hpp>
+#include <boost/property_tree/info_parser.hpp>
+#include <iostream>
+
+int main()
+{
+    using namespace pdalboost::property_tree;
+    ptree pt;
+    read_xml("simple_all.xml", pt);
+    write_info(std::cout, pt);
+}
diff --git a/vendor/pdalboost/libs/property_tree/test/test_info_parser.cpp b/vendor/pdalboost/libs/property_tree/test/test_info_parser.cpp
new file mode 100644
index 0000000..b943473
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/test_info_parser.cpp
@@ -0,0 +1,249 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+#include "test_utils.hpp"
+#include <boost/property_tree/info_parser.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// Test data
+
+const char *ok_data_1 = 
+    ";Test file for info_parser\n"
+    "\n"
+    "key1 data1\n"
+    "{\n"
+    "\tkey data\n"
+    "}\n"
+    "#include \"testok1_inc.info\"\n"
+    "key2 \"data2  \" {\n"
+    "\tkey data\n"
+    "}\n"
+    "#\tinclude \"testok1_inc.info\"\n"
+    "key3 \"data\"\n"
+    "\t \"3\" {\n"
+    "\tkey data\n"
+    "}\n"
+    "\t#include \"testok1_inc.info\"\n"
+    "\n"
+    "\"key4\" data4\n"
+    "{\n"
+    "\tkey data\n"
+    "}\n"
+    "#include \"testok1_inc.info\"\n"
+    "\"key.5\" \"data.5\" { \n"
+    "\tkey data \n"
+    "}\n"
+    "#\tinclude \"testok1_inc.info\"\n"
+    "\"key6\" \"data\"\n"
+    "\t   \"6\" {\n"
+    "\tkey data\n"
+    "}\n"
+    "\t#include \"testok1_inc.info\"\n"
+    "   \n"
+    "key1 data1; comment\n"
+    "{; comment\n"
+    "\tkey data; comment\n"
+    "}; comment\n"
+    "#include \"testok1_inc.info\"\n"
+    "key2 \"data2  \" {; comment\n"
+    "\tkey data; comment\n"
+    "}; comment\n"
+    "#\tinclude \"testok1_inc.info\"\n"
+    "key3 \"data\"; comment\n"
+    "\t \"3\" {; comment\n"
+    "\tkey data; comment\n"
+    "}; comment\n"
+    "\t#include \"testok1_inc.info\"\n"
+    "\n"
+    "\"key4\" data4; comment\n"
+    "{; comment\n"
+    "\tkey data; comment\n"
+    "}; comment\n"
+    "#include \"testok1_inc.info\"\n"
+    "\"key.5\" \"data.5\" {; comment\n"
+    "\tkey data; comment\n"
+    "}; comment\n"
+    "#\tinclude \"testok1_inc.info\"\n"
+    "\"key6\" \"data\"; comment\n"
+    "\t   \"6\" {; comment\n"
+    "\tkey data; comment\n"
+    "}; comment\n"
+    "\t#include \"testok1_inc.info\"\n"
+    "\\\\key\\t7 data7\\n\\\"data7\\\"\n"
+    "{\n"
+    "\tkey data\n"
+    "}\n"
+    "\"\\\\key\\t8\" \"data8\\n\\\"data8\\\"\"\n"
+    "{\n"
+    "\tkey data\n"
+    "}\n"
+    "\n";
+
+const char *ok_data_1_inc = 
+    ";Test file for info_parser\n"
+    "\n"
+    "inc_key inc_data ;;; comment\\";
+
+const char *ok_data_2 = 
+    "";
+
+const char *ok_data_3 = 
+    "key1 \"\"\n"
+    "key2 \"\"\n"
+    "key3 \"\"\n"
+    "key4 \"\"\n";
+
+const char *ok_data_4 = 
+    "key1 data key2 data";
+
+const char *ok_data_5 = 
+    "key { key \"\" key \"\" }\n";
+
+const char *ok_data_6 = 
+    "\"key with spaces\" \"data with spaces\"\n"
+    "\"key with spaces\" \"multiline data\"\\\n"
+    "\"cont\"\\\n" 
+    "\"cont\"";
+
+const char *error_data_1 = 
+    ";Test file for info_parser\n"
+    "#include \"bogus_file\"\n";                // Nonexistent include file
+
+const char *error_data_2 = 
+    ";Test file for info_parser\n"
+    "key \"data with bad escape: \\q\"\n";      // Bad escape
+
+const char *error_data_3 = 
+    ";Test file for info_parser\n"
+    "{\n";                                      // Opening brace without key
+
+const char *error_data_4 = 
+    ";Test file for info_parser\n"
+    "}\n";                                      // Closing brace without opening brace
+
+const char *error_data_5 = 
+    ";Test file for info_parser\n"
+    "key data\n"
+    "{\n"
+    "";                                         // No closing brace
+
+struct ReadFunc
+{
+    template<class Ptree>
+    void operator()(const std::string &filename, Ptree &pt) const
+    {
+        pdalboost::property_tree::read_info(filename, pt);
+    }
+};
+
+struct WriteFunc
+{
+    template<class Ptree>
+    void operator()(const std::string &filename, const Ptree &pt) const
+    {
+        pdalboost::property_tree::write_info(filename, pt);
+    }
+};
+
+template<class Ptree>
+void test_info_parser()
+{
+
+    using namespace pdalboost::property_tree;
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(), ok_data_1, ok_data_1_inc, 
+        "testok1.info", "testok1_inc.info", "testok1out.info", 45, 240, 192
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(), ok_data_2, NULL, 
+        "testok2.info", NULL, "testok2out.info", 1, 0, 0
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(), ok_data_3, NULL, 
+        "testok3.info", NULL, "testok3out.info", 5, 0, 16
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(), ok_data_4, NULL, 
+        "testok4.info", NULL, "testok4out.info", 3, 8, 8
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(), ok_data_5, NULL, 
+        "testok5.info", NULL, "testok5out.info", 4, 0, 9
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(), ok_data_6, NULL, 
+        "testok6.info", NULL, "testok6out.info", 3, 38, 30
+    );
+
+    generic_parser_test_error<Ptree, ReadFunc, WriteFunc, info_parser_error>
+    (
+        ReadFunc(), WriteFunc(), error_data_1, NULL,
+        "testerr1.info", NULL, "testerr1out.info", 2
+    );
+
+    generic_parser_test_error<Ptree, ReadFunc, WriteFunc, info_parser_error>
+    (
+        ReadFunc(), WriteFunc(), error_data_2, NULL,
+        "testerr2.info", NULL, "testerr2out.info", 2
+    );
+
+    generic_parser_test_error<Ptree, ReadFunc, WriteFunc, info_parser_error>
+    (
+        ReadFunc(), WriteFunc(), error_data_3, NULL,
+        "testerr3.info", NULL, "testerr3out.info", 2
+    );
+
+    generic_parser_test_error<Ptree, ReadFunc, WriteFunc, info_parser_error>
+    (
+        ReadFunc(), WriteFunc(), error_data_4, NULL,
+        "testerr4.info", NULL, "testerr4out.info", 2
+    );
+
+    generic_parser_test_error<Ptree, ReadFunc, WriteFunc, info_parser_error>
+    (
+        ReadFunc(), WriteFunc(), error_data_5, NULL,
+        "testerr5.info", NULL, "testerr5out.info", 4
+    );
+
+    // Test read with default ptree
+    {
+        Ptree pt, default_pt;
+        pt.put_value(1);
+        default_pt.put_value(2);
+        BOOST_CHECK(pt != default_pt);
+        read_info("nonexisting file.nonexisting file", pt, default_pt);
+        BOOST_CHECK(pt == default_pt);
+    }
+
+}
+
+int test_main(int argc, char *argv[])
+{
+    using namespace pdalboost::property_tree;
+    test_info_parser<ptree>();
+    test_info_parser<iptree>();
+#ifndef BOOST_NO_CWCHAR
+    test_info_parser<wptree>();
+    test_info_parser<wiptree>();
+#endif
+    return 0;
+}
diff --git a/vendor/pdalboost/libs/property_tree/test/test_ini_parser.cpp b/vendor/pdalboost/libs/property_tree/test/test_ini_parser.cpp
new file mode 100644
index 0000000..a09358f
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/test_ini_parser.cpp
@@ -0,0 +1,226 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+#include "test_utils.hpp"
+#include <boost/property_tree/ini_parser.hpp>
+#include <sstream>
+
+using namespace pdalboost::property_tree;
+
+///////////////////////////////////////////////////////////////////////////////
+// Test data
+
+// Correct data
+const char *ok_data_1 = 
+    "\n"
+    "; Comment\n"
+    "[Section1]\n"
+    "\t   \t; Comment\n"
+    "  Key1=Data1\n"
+    "            \n"
+    "   Key2   =   Data2\n"
+    "Key 3     =      Data 3  \n"
+    "Key4=Data4\n"
+    "[Section2] ;Comment\n"
+    "\t   \tKey1=Data4\n";
+
+// Correct data
+const char *ok_data_2 = 
+    "[Section1]\n"
+    "Key1=Data1";              // No eol
+
+// Correct data
+const char *ok_data_3 = 
+    "";
+
+// Correct data
+const char *ok_data_4 = 
+    ";Comment";
+
+// Correct data
+const char *ok_data_5 = 
+    "Key1=Data1\n"             // No section
+    "Key2=Data2\n";
+
+// Treat # as comment.
+const char *ok_data_6 =
+    "# Comment\n"
+    "[Section1]\n"
+    "Key1=Data1\n";
+
+// Erroneous data
+const char *error_data_1 = 
+    "[Section1]\n"
+    "Key1\n"                   // No equals sign
+    "Key2=Data2";
+
+// Erroneous data
+const char *error_data_2 = 
+    "[Section1]\n"
+    "Key1=Data1\n"
+    "=Data2\n";                // No key
+
+struct ReadFunc
+{
+    template<class Ptree>
+    void operator()(const std::string &filename, Ptree &pt) const
+    {
+        read_ini(filename, pt);
+    }
+};
+
+struct WriteFunc
+{
+    template<class Ptree>
+    void operator()(const std::string &filename, const Ptree &pt) const
+    {
+        write_ini(filename, pt);
+    }
+};
+
+void test_erroneous_write(const pdalboost::property_tree::ptree &pt)
+{
+    std::stringstream stream;
+    try
+    {
+        write_ini(stream, pt);
+        BOOST_ERROR("No required exception thrown");
+    }
+    catch (ini_parser_error &e)
+    {
+        (void)e;
+    }
+    catch (...)
+    {
+        BOOST_ERROR("Wrong exception type thrown");
+    }
+}
+
+template<class Ptree>
+void test_ini_parser()
+{
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(), ok_data_1, NULL, 
+        "testok1.ini", NULL, "testok1out.ini", 8, 26, 37
+    );
+    
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(), ok_data_2, NULL, 
+        "testok2.ini", NULL, "testok2out.ini", 3, 5, 12
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(), ok_data_3, NULL, 
+        "testok3.ini", NULL, "testok3out.ini", 1, 0, 0
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(), ok_data_4, NULL, 
+        "testok4.ini", NULL, "testok4out.ini", 1, 0, 0
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(), ok_data_5, NULL, 
+        "testok5.ini", NULL, "testok5out.ini", 3, 10, 8
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(), ok_data_6, NULL, 
+        "testok6.ini", NULL, "testok6out.ini", 3, 5, 12
+    );
+
+    generic_parser_test_error<Ptree, ReadFunc, WriteFunc, ini_parser_error>
+    (
+        ReadFunc(), WriteFunc(), error_data_1, NULL,
+        "testerr1.ini", NULL, "testerr1out.ini", 2
+    );
+
+    generic_parser_test_error<Ptree, ReadFunc, WriteFunc, ini_parser_error>
+    (
+        ReadFunc(), WriteFunc(), error_data_2, NULL,
+        "testerr2.ini", NULL, "testerr2out.ini", 3
+    );
+}
+
+void test_unmappable_trees()
+{
+    // Test too deep ptrees
+    {
+        ptree pt;
+        pt.put_child("section.key.bogus", ptree());
+        test_erroneous_write(pt);
+    }
+
+    // Test duplicate sections
+    {
+        ptree pt;
+        pt.push_back(std::make_pair("section", ptree()));
+        pt.push_back(std::make_pair("section", ptree()));
+        test_erroneous_write(pt);
+    }
+
+    // Test duplicate keys
+    {
+        ptree pt;
+        ptree &child = pt.put_child("section", ptree());
+        child.push_back(std::make_pair("key", ptree()));
+        child.push_back(std::make_pair("key", ptree()));
+        test_erroneous_write(pt);
+    }
+
+    // Test mixed data and children.
+    {
+        ptree pt;
+        ptree &child = pt.put_child("section", ptree("value"));
+        child.push_back(std::make_pair("key", ptree()));
+        child.push_back(std::make_pair("key", ptree()));
+        test_erroneous_write(pt);
+    }
+}
+
+void test_other_trees()
+{
+    // Top-level keys must be written before any section.
+    {
+        ptree pt;
+        pt.put("section.innerkey", "v1");
+        pt.put("nosection", "v2");
+        std::stringstream s;
+        write_ini(s, pt);
+        s.clear();
+        s.seekg(0, std::ios_base::beg);
+        ptree result;
+        read_ini(s, result);
+        BOOST_CHECK(result.get("section.innerkey", "bad") == "v1");
+        BOOST_CHECK(result.get("nosection", "bad") == "v2");
+    }
+}
+
+int test_main(int argc, char *argv[])
+{
+    test_ini_parser<ptree>();
+    test_ini_parser<iptree>();
+#ifndef BOOST_NO_CWCHAR
+    test_ini_parser<wptree>();
+    test_ini_parser<wiptree>();
+#endif
+
+    test_unmappable_trees();
+    test_other_trees();
+ 
+    return 0;
+
+}
diff --git a/vendor/pdalboost/libs/property_tree/test/test_json_parser.cpp b/vendor/pdalboost/libs/property_tree/test/test_json_parser.cpp
new file mode 100644
index 0000000..ce58e4d
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/test_json_parser.cpp
@@ -0,0 +1,443 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+#include "test_utils.hpp"
+#include <boost/property_tree/json_parser.hpp>
+
+///////////////////////////////////////////////////////////////////////////////
+// Test data
+
+const char *ok_data_1 = 
+    "{}";
+
+const char *ok_data_2 = 
+    "  \t {\n"
+    "  \t \"name 0\" : \"value\", \t \n"
+    "  \t \"name 1\" : \"\", \n"
+    "  \t \"name 2\" : true, \n"
+    "  \t \"name 3\" : false, \n"
+    "  \t \"name 4\" : null, \n"
+    "  \t \"name 5\" : 0, \n"
+    "  \t \"name 6\" : -5, \n"
+    "  \t \"name 7\" : 1.1, \n"
+    "  \t \"name 8\" : -956.45e+4, \n"
+    "  \t \"name 8\" : 5956.45E-11, \n"
+    "  \t \"name 9\" : [1,2,3,4], \n"
+    "  \t \"name 10\" : {\"a\":\"b\"} \n"
+    "  \t } \n";
+
+const char *ok_data_3 = 
+    "{\"a\":{\"b\":\"c\"}}";
+
+const char *ok_data_4 = 
+    "{\"a\":[{\"b\":\"c\"},{\"d\":\"e\"},1,2,3,4],\"f\":null}";
+
+const char *ok_data_6 = 
+    "{\"menu\": {\n"
+    "    \"header\": \"SVG Viewer\",\n"
+    "    \"items\": [\n"
+    "        {\"id\": \"Open\"},\n"
+    "        {\"id\": \"OpenNew\", \"label\": \"Open New\"},\n"
+    "        null,\n"
+    "        {\"id\": \"ZoomIn\", \"label\": \"Zoom In\"},\n"
+    "        {\"id\": \"ZoomOut\", \"label\": \"Zoom Out\"},\n"
+    "        {\"id\": \"OriginalView\", \"label\": \"Original View\"},\n"
+    "        null,\n"
+    "        {\"id\": \"Quality\"},\n"
+    "        {\"id\": \"Pause\"},\n"
+    "        {\"id\": \"Mute\"},\n"
+    "        null,\n"
+    "        {\"id\": \"Find\", \"label\": \"Find...\"},\n"
+    "        {\"id\": \"FindAgain\", \"label\": \"Find Again\"},\n"
+    "        {\"id\": \"Copy\"},\n"
+    "        {\"id\": \"CopyAgain\", \"label\": \"Copy Again\"},\n"
+    "        {\"id\": \"CopySVG\", \"label\": \"Copy SVG\"},\n"
+    "        {\"id\": \"ViewSVG\", \"label\": \"View SVG\"},\n"
+    "        {\"id\": \"ViewSource\", \"label\": \"View Source\"},\n"
+    "        {\"id\": \"SaveAs\", \"label\": \"Save As\"},\n"
+    "        null,\n"
+    "        {\"id\": \"Help\"},\n"
+    "        {\"id\": \"About\", \"label\": \"About Adobe CVG Viewer...\"}\n"
+    "    ]\n"
+    "}}\n";
+
+const char *ok_data_7 = 
+    "{\"web-app\": {\n"
+    "  \"servlet\": [    \n"
+    "    {\n"
+    "      \"servlet-name\": \"cofaxCDS\",\n"
+    "      \"servlet-class\": \"org.cofax.cds.CDSServlet\",\n"
+    "      \"init-param\": {\n"
+    "        \"configGlossary:installationAt\": \"Philadelphia, PA\",\n"
+    "        \"configGlossary:adminEmail\": \"ksm at pobox.com\",\n"
+    "        \"configGlossary:poweredBy\": \"Cofax\",\n"
+    "        \"configGlossary:poweredByIcon\": \"/images/cofax.gif\",\n"
+    "        \"configGlossary:staticPath\": \"/content/static\",\n"
+    "        \"templateProcessorClass\": \"org.cofax.WysiwygTemplate\",\n"
+    "        \"templateLoaderClass\": \"org.cofax.FilesTemplateLoader\",\n"
+    "        \"templatePath\": \"templates\",\n"
+    "        \"templateOverridePath\": \"\",\n"
+    "        \"defaultListTemplate\": \"listTemplate.htm\",\n"
+    "        \"defaultFileTemplate\": \"articleTemplate.htm\",\n"
+    "        \"useJSP\": false,\n"
+    "        \"jspListTemplate\": \"listTemplate.jsp\",\n"
+    "        \"jspFileTemplate\": \"articleTemplate.jsp\",\n"
+    "        \"cachePackageTagsTrack\": 200,\n"
+    "        \"cachePackageTagsStore\": 200,\n"
+    "        \"cachePackageTagsRefresh\": 60,\n"
+    "        \"cacheTemplatesTrack\": 100,\n"
+    "        \"cacheTemplatesStore\": 50,\n"
+    "        \"cacheTemplatesRefresh\": 15,\n"
+    "        \"cachePagesTrack\": 200,\n"
+    "        \"cachePagesStore\": 100,\n"
+    "        \"cachePagesRefresh\": 10,\n"
+    "        \"cachePagesDirtyRead\": 10,\n"
+    "        \"searchEngineListTemplate\": \"forSearchEnginesList.htm\",\n"
+    "        \"searchEngineFileTemplate\": \"forSearchEngines.htm\",\n"
+    "        \"searchEngineRobotsDb\": \"WEB-INF/robots.db\",\n"
+    "        \"useDataStore\": true,\n"
+    "        \"dataStoreClass\": \"org.cofax.SqlDataStore\",\n"
+    "        \"redirectionClass\": \"org.cofax.SqlRedirection\",\n"
+    "        \"dataStoreName\": \"cofax\",\n"
+    "        \"dataStoreDriver\": \"com.microsoft.jdbc.sqlserver.SQLServerDriver\",\n"
+    "        \"dataStoreUrl\": \"jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon\",\n"
+    "        \"dataStoreUser\": \"sa\",\n"
+    "        \"dataStorePassword\": \"dataStoreTestQuery\",\n"
+    "        \"dataStoreTestQuery\": \"SET NOCOUNT ON;select test='test';\",\n"
+    "        \"dataStoreLogFile\": \"/usr/local/tomcat/logs/datastore.log\",\n"
+    "        \"dataStoreInitConns\": 10,\n"
+    "        \"dataStoreMaxConns\": 100,\n"
+    "        \"dataStoreConnUsageLimit\": 100,\n"
+    "        \"dataStoreLogLevel\": \"debug\",\n"
+    "        \"maxUrlLength\": 500}},\n"
+    "    {\n"
+    "      \"servlet-name\": \"cofaxEmail\",\n"
+    "\n      \"servlet-class\": \"org.cofax.cds.EmailServlet\",\n"
+    "      \"init-param\": {\n"
+    "      \"mailHost\": \"mail1\",\n"
+    "      \"mailHostOverride\": \"mail2\"}},\n"
+    "    {\n"
+    "      \"servlet-name\": \"cofaxAdmin\",\n"
+    "      \"servlet-class\": \"org.cofax.cds.AdminServlet\"},\n"
+    " \n"
+    "    {\n"
+    "      \"servlet-name\": \"fileServlet\",\n"
+    "      \"servlet-class\": \"org.cofax.cds.FileServlet\"},\n"
+    "    {\n"
+    "      \"servlet-name\": \"cofaxTools\",\n"
+    "      \"servlet-class\": \"org.cofax.cms.CofaxToolsServlet\",\n"
+    "      \"init-param\": {\n"
+    "        \"templatePath\": \"toolstemplates/\",\n"
+    "        \"log\": 1,\n"
+    "        \"logLocation\": \"/usr/local/tomcat/logs/CofaxTools.log\",\n"
+    "        \"logMaxSize\": \"\",\n"
+    "        \"dataLog\": 1,\n"
+    "        \"dataLogLocation\": \"/usr/local/tomcat/logs/dataLog.log\",\n"
+    "        \"dataLogMaxSize\": \"\",\n"
+    "        \"removePageCache\": \"/content/admin/remove?cache=pages&id=\",\n"
+    "        \"removeTemplateCache\": \"/content/admin/remove?cache=templates&id=\",\n"
+    "        \"fileTransferFolder\": \"/usr/local/tomcat/webapps/content/fileTransferFolder\",\n"
+    "        \"lookInContext\": 1,\n"
+    "        \"adminGroupID\": 4,\n"
+    "        \"betaServer\": true}}],\n"
+    "  \"servlet-mapping\": {\n"
+    "    \"cofaxCDS\": \"/\",\n"
+    "    \"cofaxEmail\": \"/cofaxutil/aemail/*\",\n"
+    "    \"cofaxAdmin\": \"/admin/*\",\n"
+    "    \"fileServlet\": \"/static/*\",\n"
+    "    \"cofaxTools\": \"/tools/*\"},\n"
+    " \n"
+    "  \"taglib\": {\n"
+    "    \"taglib-uri\": \"cofax.tld\",\n"
+    "    \"taglib-location\": \"/WEB-INF/tlds/cofax.tld\"}}}\n";
+
+const char *ok_data_8 = 
+    "{\"widget\": {\n"
+    "    \"debug\": \"on\",\n"
+    "    \"window\": {\n"
+    "        \"title\": \"Sample Konfabulator Widget\",        \"name\": \"main_window\",        \"width\": 500,        \"height\": 500\n"
+    "    },    \"image\": { \n"
+    "        \"src\": \"Images/Sun.png\",\n"
+    "        \"name\": \"sun1\",        \"hOffset\": 250,        \"vOffset\": 250,        \"alignment\": \"center\"\n"
+    "    },    \"text\": {\n"
+    "        \"data\": \"Click Here\",\n"
+    "        \"size\": 36,\n"
+    "        \"style\": \"bold\",        \"name\": \"text1\",        \"hOffset\": 250,        \"vOffset\": 100,        \"alignment\": \"center\",\n"
+    "        \"onMouseUp\": \"sun1.opacity = (sun1.opacity / 100) * 90;\"\n"
+    "    }\n"
+    "}} \n";
+
+const char *ok_data_9 = 
+    "{\"menu\": {\n"
+    "  \"id\": \"file\",\n"
+    "  \"value\": \"File:\",\n"
+    "  \"popup\": {\n"
+    "    \"menuitem\": [\n"
+    "      {\"value\": \"New\", \"onclick\": \"CreateNewDoc()\"},\n"
+    "      {\"value\": \"Open\", \"onclick\": \"OpenDoc()\"},\n"
+    "\n      {\"value\": \"Close\", \"onclick\": \"CloseDoc()\"}\n"
+    "    ]\n"
+    "  }\n"
+    "}}\n";
+
+const char *ok_data_10 = 
+    "{\n"
+    "   \"glossary\": {\n"
+    "       \"title\": \"example glossary\",\n"
+    "       \"GlossDiv\": {\n"
+    "           \"title\": \"S\",\n"
+    "           \"GlossList\": [{\n"
+    "                \"ID\": \"SGML\",\n"
+    "                \"SortAs\": \"SGML\",\n"
+    "                \"GlossTerm\": \"Standard Generalized Markup Language\",\n"
+    "                \"Acronym\": \"SGML\",\n"
+    "                \"Abbrev\": \"ISO 8879:1986\",\n"
+    "                \"GlossDef\": \n"
+    "\"A meta-markup language, used to create markup languages such as DocBook.\",\n"
+    "                \"GlossSeeAlso\": [\"GML\", \"XML\", \"markup\"]\n"
+    "            }]\n"
+    "        }\n"
+    "    }\n"
+    "}\n";
+
+const char *ok_data_11 = 
+    "{\n"
+    "    \"data\" : [\n"
+    "        {\n"
+    "            \"First Name\" : \"Bob\",\n"
+    "            \"Last Name\" : \"Smith\",\n"
+    "            \"Email\" : \"bsmith at someurl.com\",\n"
+    "            \"Phone\" : \"(555) 555-1212\"\n"
+    "        },\n"
+    "        {\n"
+    "            \"First Name\" : \"Jan\",\n"
+    "            \"Last Name\" : \"Smith\",\n"
+    "            \"Email\" : \"jsmith at someurl.com\",\n"
+    "            \"Phone\" : \"(555) 555-3434\"\n"
+    "        },\n"
+    "        {\n"
+    "            \"First Name\" : \"Sue\",\n"
+    "            \"Last Name\" : \"Smith\",\n"
+    "            \"Email\" : \"ssmith at someurl.com\",\n"
+    "            \"Phone\" : \"(555) 555-5656\"\n"
+    "        }\n"
+    "    ]\n"
+    "}\n";
+
+const char *ok_data_12 = 
+    "{\"  \\\" \\\\ \\b \\f \\n \\r \\t  \" : \"\"}";
+
+const char *error_data_1 = 
+    "";   // No root object
+
+const char *error_data_2 = 
+    "{\n\"a\":1\n";      // Unclosed object brace
+
+const char *error_data_3 = 
+    "{\n\"a\":\n[1,2,3,4\n}";      // Unclosed array brace
+
+const char *error_data_4 = 
+    "{\n\"a\"\n}";      // No object
+
+const char *bug_data_pr4387 =
+    "[1, 2, 3]"; // Root array
+
+const char *bug_data_pr7180_1 =
+    "{\n"
+    "    \"a\": [\n"
+    "        \"1\",\n"
+    "        \"2\"\n"
+    "    ]\n"
+    "}\n";
+const char *bug_data_pr7180_2 =
+    "{\"a\":[\"1\",\"2\"]}\n";
+
+struct ReadFunc
+{
+    template<class Ptree>
+    void operator()(const std::string &filename, Ptree &pt) const
+    {
+        pdalboost::property_tree::read_json(filename, pt);
+    }
+    template <class Ptree>
+    void operator()(
+        std::basic_istream<typename Ptree::key_type::value_type>& is,
+        Ptree& pt) const
+    {
+        pdalboost::property_tree::read_json(is, pt);
+    }
+};
+
+struct WriteFunc
+{
+    WriteFunc(bool pretty = false) : pretty(pretty) {}
+
+    template<class Ptree>
+    void operator()(const std::string &filename, const Ptree &pt) const
+    {
+        pdalboost::property_tree::write_json(filename, pt, std::locale(), pretty);
+    }
+
+    template<class Ptree>
+    void operator()(
+        std::basic_ostream<typename Ptree::key_type::value_type>& os,
+        Ptree& pt) const
+    {
+        pdalboost::property_tree::write_json(os, pt, pretty);
+    }
+
+    bool pretty;
+};
+
+template<class Ptree>
+void test_json_parser()
+{
+
+    using namespace pdalboost::property_tree;
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(false), ok_data_1, NULL,
+        "testok1.json", NULL, "testok1out.json", 1, 0, 0
+    );
+    
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(false), ok_data_2, NULL, 
+        "testok2.json", NULL, "testok2out.json", 18, 50, 74
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(false), ok_data_3, NULL, 
+        "testok3.json", NULL, "testok3out.json", 3, 1, 2
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(false), ok_data_4, NULL, 
+        "testok4.json", NULL, "testok4out.json", 11, 10, 4
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(false), ok_data_6, NULL, 
+        "testok6.json", NULL, "testok6out.json", 56, 265, 111
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(false), ok_data_7, NULL, 
+        "testok7.json", NULL, "testok7out.json", 87, 1046, 1216
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(false), ok_data_8, NULL, 
+        "testok8.json", NULL, "testok8out.json", 23, 149, 125
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(false), ok_data_9, NULL, 
+        "testok9.json", NULL, "testok9out.json", 15, 54, 60
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(false), ok_data_10, NULL, 
+        "testok10.json", NULL, "testok10out.json", 17, 162, 85
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(false), ok_data_11, NULL, 
+        "testok11.json", NULL, "testok11out.json", 17, 120, 91
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(false), ok_data_12, NULL, 
+        "testok12.json", NULL, "testok12out.json", 2, 0, 17
+    );
+
+    generic_parser_test_error<ptree, ReadFunc, WriteFunc, json_parser_error>
+    (
+        ReadFunc(), WriteFunc(false), error_data_1, NULL,
+        "testerr1.json", NULL, "testerr1out.json", 1
+    );
+
+    generic_parser_test_error<ptree, ReadFunc, WriteFunc, json_parser_error>
+    (
+        ReadFunc(), WriteFunc(false), error_data_2, NULL,
+        "testerr2.json", NULL, "testerr2out.json", 3
+    );
+
+    generic_parser_test_error<ptree, ReadFunc, WriteFunc, json_parser_error>
+    (
+        ReadFunc(), WriteFunc(false), error_data_3, NULL,
+        "testerr3.json", NULL, "testerr3out.json", 4
+    );
+
+    generic_parser_test_error<ptree, ReadFunc, WriteFunc, json_parser_error>
+    (
+        ReadFunc(), WriteFunc(false), error_data_4, NULL,
+        "testerr4.json", NULL, "testerr4out.json", 3
+    );
+
+    generic_parser_test_ok<Ptree, ReadFunc, WriteFunc>
+    (
+        ReadFunc(), WriteFunc(false), bug_data_pr4387, NULL,
+        "testpr4387.json", NULL, "testpr4387out.json", 4, 3, 0
+    );
+
+    check_exact_roundtrip<Ptree>(ReadFunc(), WriteFunc(true),
+                                 bug_data_pr7180_1);
+    check_exact_roundtrip<Ptree>(ReadFunc(), WriteFunc(false),
+                                 bug_data_pr7180_2);
+
+}
+
+void test_escaping_utf8()
+{
+    // This is cyrillic text encoded as UTF-8
+    std::string str = "\xD0\x9C\xD0\xB0\xD0\xBC\xD0\xB0 "
+      "\xD0\xBC\xD1\x8B\xD0\xBB\xD0\xB0 \xD1\x80\xD0\xB0\xD0\xBC\xD1\x83";
+    // Should NOT escape UTF-8
+    BOOST_CHECK(pdalboost::property_tree::json_parser::create_escapes(str) == str);
+}
+
+void test_escaping_wide()
+{
+    // Should NOT escape characters within ASCII range.
+    std::wstring str1 = L"I am wstring with ASCII";
+    BOOST_CHECK(pdalboost::property_tree::json_parser::create_escapes(str1) == str1);
+    // Should escape characters outside ASCII range - this is NOT utf-8
+    // This is cyrillic text
+    std::wstring str2 = L"\u041C\u0430\u043C\u0430 "
+        L"\u043C\u044B\u043B\u0430 \u0440\u0430\u043C\u0443";
+    BOOST_CHECK(pdalboost::property_tree::json_parser::create_escapes(str2) ==
+        L"\\u041C\\u0430\\u043C\\u0430 "
+        L"\\u043C\\u044B\\u043B\\u0430 \\u0440\\u0430\\u043C\\u0443");
+}
+
+int test_main(int argc, char *argv[])
+{
+    using namespace pdalboost::property_tree;
+    test_json_parser<ptree>();
+    test_json_parser<iptree>();
+    test_escaping_utf8();
+#ifndef BOOST_NO_CWCHAR
+    test_json_parser<wptree>();
+    test_json_parser<wiptree>();
+    test_escaping_wide();
+#endif
+    return 0;
+}
diff --git a/vendor/pdalboost/libs/property_tree/test/test_json_parser2.cpp b/vendor/pdalboost/libs/property_tree/test/test_json_parser2.cpp
new file mode 100644
index 0000000..dd96040
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/test_json_parser2.cpp
@@ -0,0 +1,898 @@
+#include <boost/property_tree/detail/json_parser/parser.hpp>
+#include <boost/property_tree/detail/json_parser/narrow_encoding.hpp>
+#include <boost/property_tree/detail/json_parser/wide_encoding.hpp>
+#include <boost/property_tree/detail/json_parser/standard_callbacks.hpp>
+#include "prefixing_callbacks.hpp"
+
+#define BOOST_TEST_NO_MAIN
+#include <boost/test/unit_test.hpp>
+#include <boost/test/parameterized_test.hpp>
+
+#include <boost/property_tree/ptree.hpp>
+#include <boost/range/iterator_range.hpp>
+
+#include <cassert>
+#include <sstream>
+#include <vector>
+
+using namespace pdalboost::property_tree;
+
+template <typename Ch> struct encoding;
+template <> struct encoding<char>
+    : json_parser::detail::utf8_utf8_encoding
+{};
+template <> struct encoding<wchar_t>
+    : json_parser::detail::wide_wide_encoding
+{};
+
+template <typename Callbacks, typename Ch>
+struct test_parser
+{
+    Callbacks callbacks;
+    ::encoding<Ch> encoding;
+    typedef std::basic_string<Ch> string;
+    typedef basic_ptree<string, string> tree;
+    json_parser::detail::parser<Callbacks, ::encoding<Ch>,
+                                typename string::const_iterator,
+                                typename string::const_iterator>
+        parser;
+
+    test_parser() : parser(callbacks, encoding) {}
+
+    bool parse_null(const string& input, string& output) {
+        parser.set_input("", input);
+        bool result = parser.parse_null();
+        if (result) {
+            parser.finish();
+            output = callbacks.output().data();
+        }
+        return result;
+    }
+
+    bool parse_boolean(const string& input, string& output) {
+        parser.set_input("", input);
+        bool result = parser.parse_boolean();
+        if (result) {
+            parser.finish();
+            output = callbacks.output().data();
+        }
+        return result;
+    }
+
+    bool parse_number(const string& input, string& output) {
+        parser.set_input("", input);
+        bool result = parser.parse_number();
+        if (result) {
+            parser.finish();
+            output = callbacks.output().data();
+        }
+        return result;
+    }
+
+    bool parse_string(const string& input, string& output) {
+        parser.set_input("", input);
+        bool result = parser.parse_string();
+        if (result) {
+            parser.finish();
+            output = callbacks.output().data();
+        }
+        return result;
+    }
+
+    bool parse_array(const string& input, tree& output) {
+        parser.set_input("", input);
+        bool result = parser.parse_array();
+        if (result) {
+            parser.finish();
+            output = callbacks.output();
+        }
+        return result;
+    }
+
+    bool parse_object(const string& input, tree& output) {
+        parser.set_input("", input);
+        bool result = parser.parse_object();
+        if (result) {
+            parser.finish();
+            output = callbacks.output();
+        }
+        return result;
+    }
+
+    void parse_value(const string& input, tree& output) {
+        parser.set_input("", input);
+        parser.parse_value();
+        parser.finish();
+        output = callbacks.output();
+    }
+};
+
+template <typename Ch>
+struct standard_parser
+    : test_parser<
+        json_parser::detail::standard_callbacks<
+            basic_ptree<std::basic_string<Ch>, std::basic_string<Ch> > >,
+        Ch>
+{};
+
+template <typename Ch>
+struct prefixing_parser
+    : test_parser<
+        prefixing_callbacks<
+            basic_ptree<std::basic_string<Ch>, std::basic_string<Ch> > >,
+        Ch>
+{};
+
+namespace pdalboost { namespace test_tools { namespace tt_detail {
+    template<>
+    struct print_log_value<std::wstring> {
+        void operator()(std::ostream& os, const std::wstring& s) {
+            print_log_value<const wchar_t*>()(os, s.c_str());
+        }
+    };
+}}}
+BOOST_TEST_DONT_PRINT_LOG_VALUE(ptree::iterator)
+BOOST_TEST_DONT_PRINT_LOG_VALUE(ptree::const_iterator)
+BOOST_TEST_DONT_PRINT_LOG_VALUE(wptree::iterator)
+BOOST_TEST_DONT_PRINT_LOG_VALUE(wptree::const_iterator)
+
+BOOST_AUTO_TEST_CASE(null_parse_result_is_input) {
+    std::string parsed;
+    standard_parser<char> p;
+    BOOST_REQUIRE(p.parse_null("null", parsed));
+    BOOST_CHECK_EQUAL("null", parsed);
+}
+
+BOOST_AUTO_TEST_CASE(uses_traits_from_null)
+{
+    std::string parsed;
+    prefixing_parser<char> p;
+    BOOST_REQUIRE(p.parse_null("null", parsed));
+    BOOST_CHECK_EQUAL("_:null", parsed);
+}
+
+BOOST_AUTO_TEST_CASE(null_parse_result_is_input_w) {
+    std::wstring parsed;
+    standard_parser<wchar_t> p;
+    BOOST_REQUIRE(p.parse_null(L"null", parsed));
+    BOOST_CHECK_EQUAL(L"null", parsed);
+}
+
+BOOST_AUTO_TEST_CASE(uses_traits_from_null_w)
+{
+    std::wstring parsed;
+    prefixing_parser<wchar_t> p;
+    BOOST_REQUIRE(p.parse_null(L"null", parsed));
+    BOOST_CHECK_EQUAL(L"_:null", parsed);
+}
+
+void boolean_parse_result_is_input_n(const char* param) {
+    std::string parsed;
+    standard_parser<char> p;
+    BOOST_REQUIRE(p.parse_boolean(param, parsed));
+    BOOST_CHECK_EQUAL(param, parsed);
+}
+
+const char* const booleans_n[] = { "true", "false" };
+
+BOOST_AUTO_TEST_CASE(uses_traits_from_boolean_n)
+{
+    std::string parsed;
+    prefixing_parser<char> p;
+    BOOST_REQUIRE(p.parse_boolean("true", parsed));
+    BOOST_CHECK_EQUAL("b:true", parsed);
+}
+
+void boolean_parse_result_is_input_w(const wchar_t* param) {
+    std::wstring parsed;
+    standard_parser<wchar_t> p;
+    BOOST_REQUIRE(p.parse_boolean(param, parsed));
+    BOOST_CHECK_EQUAL(param, parsed);
+}
+
+const wchar_t* const booleans_w[] = { L"true", L"false" };
+
+BOOST_AUTO_TEST_CASE(uses_traits_from_boolean_w)
+{
+    std::wstring parsed;
+    prefixing_parser<wchar_t> p;
+    BOOST_REQUIRE(p.parse_boolean(L"true", parsed));
+    BOOST_CHECK_EQUAL(L"b:true", parsed);
+}
+
+void number_parse_result_is_input_n(const char* param) {
+    std::string parsed;
+    standard_parser<char> p;
+    BOOST_REQUIRE(p.parse_number(param, parsed));
+    BOOST_CHECK_EQUAL(param, parsed);
+}
+
+const char* const numbers_n[] = { "0", "-0", "1824", "-0.1", "123.142", "1e+0", "1E-0", "1.1e134" };
+
+BOOST_AUTO_TEST_CASE(uses_traits_from_number_n)
+{
+    std::string parsed;
+    prefixing_parser<char> p;
+    BOOST_REQUIRE(p.parse_number("12345", parsed));
+    BOOST_CHECK_EQUAL("n:12345", parsed);
+}
+
+void number_parse_result_is_input_w(const wchar_t* param) {
+    std::wstring parsed;
+    standard_parser<wchar_t> p;
+    BOOST_REQUIRE(p.parse_number(param, parsed));
+    BOOST_CHECK_EQUAL(param, parsed);
+}
+
+const wchar_t* const numbers_w[] = { L"0", L"-0", L"1824", L"-0.1", L"123.142", L"1e+0", L"1E-0", L"1.1e134" };
+
+BOOST_AUTO_TEST_CASE(uses_traits_from_number_w)
+{
+    std::wstring parsed;
+    prefixing_parser<wchar_t> p;
+    BOOST_REQUIRE(p.parse_number(L"12345", parsed));
+    BOOST_CHECK_EQUAL(L"n:12345", parsed);
+}
+
+struct string_input_n {
+    const char* encoded;
+    const char* expected;
+};
+
+void string_parsed_correctly_n(string_input_n param) {
+    std::string parsed;
+    standard_parser<char> p;
+    BOOST_REQUIRE(p.parse_string(param.encoded, parsed));
+    BOOST_CHECK_EQUAL(param.expected, parsed);
+}
+
+const string_input_n strings_n[] = {
+    {"\"\"", ""},
+    {"\"abc\"", "abc"},
+    {"\"a\\nb\"", "a\nb"},
+    {"\"\\\"\"", "\""},
+    {"\"\\\\\"", "\\"},
+    {"\"\\/\"", "/"},
+    {"\"\\b\"", "\b"},
+    {"\"\\f\"", "\f"},
+    {"\"\\r\"", "\r"},
+    {"\"\\t\"", "\t"},
+    {"\"\\u0001\\u00f2\\u28Ec\"", "\x01" "\xC3\xB2" "\xE2\xA3\xAC"},
+    {"\"\\ud801\\udc37\"", "\xf0\x90\x90\xb7"} // U+10437
+};
+
+BOOST_AUTO_TEST_CASE(uses_string_callbacks)
+{
+    std::string parsed;
+    prefixing_parser<char> p;
+    BOOST_REQUIRE(p.parse_string("\"a\"", parsed));
+    BOOST_CHECK_EQUAL("s:a", parsed);
+}
+
+struct string_input_w {
+    const wchar_t* encoded;
+    const wchar_t* expected;
+};
+
+void string_parsed_correctly_w(string_input_w param) {
+    std::wstring parsed;
+    standard_parser<wchar_t> p;
+    BOOST_REQUIRE(p.parse_string(param.encoded, parsed));
+    BOOST_CHECK_EQUAL(param.expected, parsed);
+}
+
+const string_input_w strings_w[] = {
+    {L"\"\"", L""},
+    {L"\"abc\"", L"abc"},
+    {L"\"a\\nb\"", L"a\nb"},
+    {L"\"\\\"\"", L"\""},
+    {L"\"\\\\\"", L"\\"},
+    {L"\"\\/\"", L"/"},
+    {L"\"\\b\"", L"\b"},
+    {L"\"\\f\"", L"\f"},
+    {L"\"\\r\"", L"\r"},
+    {L"\"\\t\"", L"\t"},
+    {L"\"\\u0001\\u00f2\\u28Ec\"", L"\x0001" L"\x00F2" L"\x28EC"}
+};
+
+BOOST_AUTO_TEST_CASE(empty_array) {
+    ptree tree;
+    standard_parser<char> p;
+    const char* input = " [ ]";
+    BOOST_REQUIRE(p.parse_array(input, tree));
+    BOOST_CHECK_EQUAL("", tree.data());
+    BOOST_CHECK_EQUAL(0u, tree.size());
+}
+
+BOOST_AUTO_TEST_CASE(array_gets_tagged) {
+    wptree tree;
+    prefixing_parser<wchar_t> p;
+    const wchar_t* input = L" [ ]";
+    BOOST_REQUIRE(p.parse_array(input, tree));
+    BOOST_CHECK_EQUAL(L"a:", tree.data());
+    BOOST_CHECK_EQUAL(0u, tree.size());
+}
+
+BOOST_AUTO_TEST_CASE(array_with_values) {
+    wptree tree;
+    standard_parser<wchar_t> p;
+    const wchar_t* input = L"[\n"
+L"      123, \"abc\" ,true ,\n"
+L"      null\n"
+L"  ]";
+    BOOST_REQUIRE(p.parse_array(input, tree));
+    BOOST_REQUIRE_EQUAL(4u, tree.size());
+    wptree::iterator it = tree.begin();
+    BOOST_CHECK_EQUAL(L"", it->first);
+    BOOST_CHECK_EQUAL(L"123", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL(L"", it->first);
+    BOOST_CHECK_EQUAL(L"abc", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL(L"", it->first);
+    BOOST_CHECK_EQUAL(L"true", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL(L"", it->first);
+    BOOST_CHECK_EQUAL(L"null", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL(tree.end(), it);
+}
+
+BOOST_AUTO_TEST_CASE(array_values_get_tagged) {
+    ptree tree;
+    prefixing_parser<char> p;
+    const char* input = "[\n"
+"       123, \"abc\" ,true ,\n"
+"       null\n"
+"   ]";
+    BOOST_REQUIRE(p.parse_array(input, tree));
+    BOOST_REQUIRE_EQUAL(4u, tree.size());
+    BOOST_CHECK_EQUAL("a:", tree.data());
+    ptree::iterator it = tree.begin();
+    BOOST_CHECK_EQUAL("", it->first);
+    BOOST_CHECK_EQUAL("n:123", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL("", it->first);
+    BOOST_CHECK_EQUAL("s:abc", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL("", it->first);
+    BOOST_CHECK_EQUAL("b:true", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL("", it->first);
+    BOOST_CHECK_EQUAL("_:null", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL(tree.end(), it);
+}
+
+BOOST_AUTO_TEST_CASE(nested_array) {
+    ptree tree;
+    standard_parser<char> p;
+    const char* input = "[[1,2],3,[4,5]]";
+    BOOST_REQUIRE(p.parse_array(input, tree));
+    BOOST_REQUIRE_EQUAL(3u, tree.size());
+    ptree::iterator it = tree.begin();
+    BOOST_CHECK_EQUAL("", it->first);
+    {
+        ptree& sub = it->second;
+        BOOST_CHECK_EQUAL("", sub.data());
+        BOOST_REQUIRE_EQUAL(2u, sub.size());
+        ptree::iterator iit = sub.begin();
+        BOOST_CHECK_EQUAL("", iit->first);
+        BOOST_CHECK_EQUAL("1", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL("", iit->first);
+        BOOST_CHECK_EQUAL("2", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL(sub.end(), iit);
+    }
+    ++it;
+    BOOST_CHECK_EQUAL("", it->first);
+    BOOST_CHECK_EQUAL("3", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL("", it->first);
+    {
+        ptree& sub = it->second;
+        BOOST_CHECK_EQUAL("", sub.data());
+        BOOST_REQUIRE_EQUAL(2u, sub.size());
+        ptree::iterator iit = sub.begin();
+        BOOST_CHECK_EQUAL("", iit->first);
+        BOOST_CHECK_EQUAL("4", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL("", iit->first);
+        BOOST_CHECK_EQUAL("5", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL(sub.end(), iit);
+    }
+    ++it;
+    BOOST_CHECK_EQUAL(tree.end(), it);
+}
+
+BOOST_AUTO_TEST_CASE(empty_object) {
+    ptree tree;
+    standard_parser<char> p;
+    const char* input = " { }";
+    BOOST_REQUIRE(p.parse_object(input, tree));
+    BOOST_CHECK_EQUAL("", tree.data());
+    BOOST_CHECK_EQUAL(0u, tree.size());
+}
+
+BOOST_AUTO_TEST_CASE(object_gets_tagged) {
+    wptree tree;
+    prefixing_parser<wchar_t> p;
+    const wchar_t* input = L" { }";
+    BOOST_REQUIRE(p.parse_object(input, tree));
+    BOOST_CHECK_EQUAL(L"o:", tree.data());
+    BOOST_CHECK_EQUAL(0u, tree.size());
+}
+
+BOOST_AUTO_TEST_CASE(object_with_values) {
+    wptree tree;
+    standard_parser<wchar_t> p;
+    const wchar_t* input = L"{\n"
+L"      \"1\":123, \"2\"\n"
+L"            :\"abc\" ,\"3\": true ,\n"
+L"      \"4\"   : null\n"
+L"  }";
+    BOOST_REQUIRE(p.parse_object(input, tree));
+    BOOST_REQUIRE_EQUAL(4u, tree.size());
+    wptree::iterator it = tree.begin();
+    BOOST_CHECK_EQUAL(L"1", it->first);
+    BOOST_CHECK_EQUAL(L"123", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL(L"2", it->first);
+    BOOST_CHECK_EQUAL(L"abc", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL(L"3", it->first);
+    BOOST_CHECK_EQUAL(L"true", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL(L"4", it->first);
+    BOOST_CHECK_EQUAL(L"null", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL(tree.end(), it);
+}
+
+BOOST_AUTO_TEST_CASE(object_values_get_tagged) {
+    ptree tree;
+    prefixing_parser<char> p;
+    const char* input = "{\n"
+        "\"1\": 123, \"2\": \"abc\" ,\"3\": true ,\n"
+        "\"4\": null\n"
+    "}";
+    BOOST_REQUIRE(p.parse_object(input, tree));
+    BOOST_REQUIRE_EQUAL(4u, tree.size());
+    BOOST_CHECK_EQUAL("o:", tree.data());
+    ptree::iterator it = tree.begin();
+    BOOST_CHECK_EQUAL("1", it->first);
+    BOOST_CHECK_EQUAL("n:123", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL("2", it->first);
+    BOOST_CHECK_EQUAL("s:abc", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL("3", it->first);
+    BOOST_CHECK_EQUAL("b:true", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL("4", it->first);
+    BOOST_CHECK_EQUAL("_:null", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL(tree.end(), it);
+}
+
+BOOST_AUTO_TEST_CASE(nested_object) {
+    ptree tree;
+    standard_parser<char> p;
+    const char* input = "{\"a\":{\"b\":1,\"c\":2},\"d\":3,\"e\":{\"f\":4,\"g\":5}}";
+    BOOST_REQUIRE(p.parse_object(input, tree));
+    BOOST_REQUIRE_EQUAL(3u, tree.size());
+    ptree::iterator it = tree.begin();
+    BOOST_CHECK_EQUAL("a", it->first);
+    {
+        ptree& sub = it->second;
+        BOOST_CHECK_EQUAL("", sub.data());
+        BOOST_REQUIRE_EQUAL(2u, sub.size());
+        ptree::iterator iit = sub.begin();
+        BOOST_CHECK_EQUAL("b", iit->first);
+        BOOST_CHECK_EQUAL("1", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL("c", iit->first);
+        BOOST_CHECK_EQUAL("2", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL(sub.end(), iit);
+    }
+    ++it;
+    BOOST_CHECK_EQUAL("d", it->first);
+    BOOST_CHECK_EQUAL("3", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL("e", it->first);
+    {
+        ptree& sub = it->second;
+        BOOST_CHECK_EQUAL("", sub.data());
+        BOOST_REQUIRE_EQUAL(2u, sub.size());
+        ptree::iterator iit = sub.begin();
+        BOOST_CHECK_EQUAL("f", iit->first);
+        BOOST_CHECK_EQUAL("4", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL("g", iit->first);
+        BOOST_CHECK_EQUAL("5", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL(sub.end(), iit);
+    }
+    ++it;
+    BOOST_CHECK_EQUAL(tree.end(), it);
+}
+
+BOOST_AUTO_TEST_CASE(array_in_object) {
+    ptree tree;
+    standard_parser<char> p;
+    const char* input = "{\"a\":[1,2],\"b\":3,\"c\":[4,5]}";
+    BOOST_REQUIRE(p.parse_object(input, tree));
+    BOOST_REQUIRE_EQUAL(3u, tree.size());
+    ptree::iterator it = tree.begin();
+    BOOST_CHECK_EQUAL("a", it->first);
+    {
+        ptree& sub = it->second;
+        BOOST_CHECK_EQUAL("", sub.data());
+        BOOST_REQUIRE_EQUAL(2u, sub.size());
+        ptree::iterator iit = sub.begin();
+        BOOST_CHECK_EQUAL("", iit->first);
+        BOOST_CHECK_EQUAL("1", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL("", iit->first);
+        BOOST_CHECK_EQUAL("2", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL(sub.end(), iit);
+    }
+    ++it;
+    BOOST_CHECK_EQUAL("b", it->first);
+    BOOST_CHECK_EQUAL("3", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL("c", it->first);
+    {
+        ptree& sub = it->second;
+        BOOST_CHECK_EQUAL("", sub.data());
+        BOOST_REQUIRE_EQUAL(2u, sub.size());
+        ptree::iterator iit = sub.begin();
+        BOOST_CHECK_EQUAL("", iit->first);
+        BOOST_CHECK_EQUAL("4", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL("", iit->first);
+        BOOST_CHECK_EQUAL("5", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL(sub.end(), iit);
+    }
+    ++it;
+    BOOST_CHECK_EQUAL(tree.end(), it);
+}
+
+BOOST_AUTO_TEST_CASE(object_in_array) {
+    ptree tree;
+    standard_parser<char> p;
+    const char* input = "[{\"a\":1,\"b\":2},3,{\"c\":4,\"d\":5}]";
+    BOOST_REQUIRE(p.parse_array(input, tree));
+    BOOST_REQUIRE_EQUAL(3u, tree.size());
+    ptree::iterator it = tree.begin();
+    BOOST_CHECK_EQUAL("", it->first);
+    {
+        ptree& sub = it->second;
+        BOOST_CHECK_EQUAL("", sub.data());
+        BOOST_REQUIRE_EQUAL(2u, sub.size());
+        ptree::iterator iit = sub.begin();
+        BOOST_CHECK_EQUAL("a", iit->first);
+        BOOST_CHECK_EQUAL("1", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL("b", iit->first);
+        BOOST_CHECK_EQUAL("2", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL(sub.end(), iit);
+    }
+    ++it;
+    BOOST_CHECK_EQUAL("", it->first);
+    BOOST_CHECK_EQUAL("3", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL("", it->first);
+    {
+        ptree& sub = it->second;
+        BOOST_CHECK_EQUAL("", sub.data());
+        BOOST_REQUIRE_EQUAL(2u, sub.size());
+        ptree::iterator iit = sub.begin();
+        BOOST_CHECK_EQUAL("c", iit->first);
+        BOOST_CHECK_EQUAL("4", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL("d", iit->first);
+        BOOST_CHECK_EQUAL("5", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL(sub.end(), iit);
+    }
+    ++it;
+    BOOST_CHECK_EQUAL(tree.end(), it);
+}
+
+BOOST_AUTO_TEST_CASE(parser_works_with_input_iterators) {
+    const char* input = " {\n"
+"       \"1\":123, \"2\"\n"
+"            :\"abc\" ,\"3\": true ,\n"
+"       \"4\"   : null, \"5\" : [ 1, 23\n"
+"            , 456 ]\n"
+"   }";
+
+    std::istringstream is(input);
+    typedef std::istreambuf_iterator<char> iterator;
+    json_parser::detail::standard_callbacks<ptree> callbacks;
+    json_parser::detail::utf8_utf8_encoding encoding;
+    json_parser::detail::parser<json_parser::detail::standard_callbacks<ptree>,
+                                json_parser::detail::utf8_utf8_encoding,
+                                iterator, iterator>
+        p(callbacks, encoding);
+
+    p.set_input("", pdalboost::make_iterator_range(iterator(is), iterator()));
+    p.parse_value();
+
+    const ptree& tree = callbacks.output();
+    BOOST_REQUIRE_EQUAL(5u, tree.size());
+    ptree::const_iterator it = tree.begin();
+    BOOST_CHECK_EQUAL("1", it->first);
+    BOOST_CHECK_EQUAL("123", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL("2", it->first);
+    BOOST_CHECK_EQUAL("abc", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL("3", it->first);
+    BOOST_CHECK_EQUAL("true", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL("4", it->first);
+    BOOST_CHECK_EQUAL("null", it->second.data());
+    ++it;
+    BOOST_CHECK_EQUAL("5", it->first);
+    {
+        const ptree& sub = it->second;
+        BOOST_CHECK_EQUAL("", sub.data());
+        BOOST_REQUIRE_EQUAL(3u, sub.size());
+        ptree::const_iterator iit = sub.begin();
+        BOOST_CHECK_EQUAL("", iit->first);
+        BOOST_CHECK_EQUAL("1", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL("", iit->first);
+        BOOST_CHECK_EQUAL("23", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL("", iit->first);
+        BOOST_CHECK_EQUAL("456", iit->second.data());
+        ++iit;
+        BOOST_CHECK_EQUAL(sub.end(), iit);
+    }
+    ++it;
+    BOOST_CHECK_EQUAL(tree.end(), it);
+}
+
+struct bad_parse_n {
+    const char* json;
+    const char* message_substring;
+};
+
+void parse_error_thrown_with_message_n(bad_parse_n param) {
+    try {
+        standard_parser<char> p;
+        ptree dummy;
+        p.parse_value(param.json, dummy);
+        BOOST_FAIL("expected exception");
+    } catch (json_parser::json_parser_error& e) {
+        std::string message = e.message();
+        BOOST_CHECK_MESSAGE(message.find(param.message_substring) !=
+                                std::string::npos,
+                            "bad error message on input '" << param.json
+                                << "', need: '" << param.message_substring
+                                << "' but found '" << message << "'");
+    }
+}
+
+const bad_parse_n errors_n[] = {
+    {"", "expected value"},
+    {"(", "expected value"},
+
+    {"n", "expected 'null'"},
+    {"nu", "expected 'null'"},
+    {"nul", "expected 'null'"},
+    {"n ", "expected 'null'"},
+    {"nu ", "expected 'null'"},
+    {"nul ", "expected 'null'"},
+    {"nx", "expected 'null'"},
+    {"nux", "expected 'null'"},
+    {"nulx", "expected 'null'"},
+
+    {"t", "expected 'true'"},
+    {"tr", "expected 'true'"},
+    {"tu", "expected 'true'"},
+    {"t ", "expected 'true'"},
+    {"tr ", "expected 'true'"},
+    {"tru ", "expected 'true'"},
+    {"tx", "expected 'true'"},
+    {"trx", "expected 'true'"},
+    {"trux", "expected 'true'"},
+
+    {"f", "expected 'false'"},
+    {"fa", "expected 'false'"},
+    {"fal", "expected 'false'"},
+    {"fals", "expected 'false'"},
+    {"f ", "expected 'false'"},
+    {"fa ", "expected 'false'"},
+    {"fal ", "expected 'false'"},
+    {"fals ", "expected 'false'"},
+    {"fx", "expected 'false'"},
+    {"fax", "expected 'false'"},
+    {"falx", "expected 'false'"},
+    {"falsx", "expected 'false'"},
+
+    {"-", "expected digits"},
+    {"01", "garbage after data"},
+    {"0.", "need at least one digit after '.'"},
+    {"0e", "need at least one digit in exponent"},
+    {"0e-", "need at least one digit in exponent"},
+
+    {"\"", "unterminated string"},
+    {"\"asd", "unterminated string"},
+    {"\"\n\"", "invalid code sequence"}, // control character
+    {"\"\xff\"", "invalid code sequence"}, // bad lead byte
+    {"\"\x80\"", "invalid code sequence"}, // stray trail byte
+    {"\"\xc0", "invalid code sequence"}, // eos after lead byte
+    {"\"\xc0\"", "invalid code sequence"}, // bad trail byte
+    {"\"\xc0m\"", "invalid code sequence"}, // also bad trail byte
+    {"\"\\", "invalid escape sequence"},
+    {"\"\\p\"", "invalid escape sequence"},
+    {"\"\\u", "invalid escape sequence"},
+    {"\"\\u\"", "invalid escape sequence"},
+    {"\"\\ug\"", "invalid escape sequence"},
+    {"\"\\u1\"", "invalid escape sequence"},
+    {"\"\\u1g\"", "invalid escape sequence"},
+    {"\"\\u11\"", "invalid escape sequence"},
+    {"\"\\u11g\"", "invalid escape sequence"},
+    {"\"\\u111\"", "invalid escape sequence"},
+    {"\"\\u111g\"", "invalid escape sequence"},
+    {"\"\\ude00\"", "stray low surrogate"},
+    {"\"\\ud900", "stray high surrogate"},
+    {"\"\\ud900foo\"", "stray high surrogate"},
+    {"\"\\ud900\\", "expected codepoint reference"},
+    {"\"\\ud900\\n\"", "expected codepoint reference"},
+    {"\"\\ud900\\u1000\"", "expected low surrogate"},
+
+    {"[", "expected value"},
+    {"[1", "expected ']' or ','"},
+    {"[1,", "expected value"},
+    {"[1,]", "expected value"},
+    {"[1}", "expected ']' or ','"},
+
+    {"{", "expected key string"},
+    {"{1:2}", "expected key string"},
+    {"{\"\"", "expected ':'"},
+    {"{\"\"}", "expected ':'"},
+    {"{\"\":", "expected value"},
+    {"{\"\":}", "expected value"},
+    {"{\"\":0", "expected '}' or ','"},
+    {"{\"\":0]", "expected '}' or ','"},
+    {"{\"\":0,", "expected key string"},
+    {"{\"\":0,}", "expected key string"},
+};
+
+struct bad_parse_w {
+    const wchar_t* json;
+    const char* message_substring;
+};
+
+void parse_error_thrown_with_message_w(bad_parse_w param) {
+    try {
+        standard_parser<wchar_t> p;
+        wptree dummy;
+        p.parse_value(param.json, dummy);
+        BOOST_FAIL("expected exception");
+    } catch (json_parser::json_parser_error& e) {
+        std::string message = e.message();
+        BOOST_CHECK_MESSAGE(message.find(param.message_substring) !=
+                                std::string::npos,
+                            "bad error message on input '" << param.json
+                                << "', need: '" << param.message_substring
+                                << "' but found '" << message << "'");
+    }
+}
+
+const bad_parse_w errors_w[] = {
+    {L"", "expected value"},
+    {L"(", "expected value"},
+
+    {L"n", "expected 'null'"},
+    {L"nu", "expected 'null'"},
+    {L"nul", "expected 'null'"},
+    {L"n ", "expected 'null'"},
+    {L"nu ", "expected 'null'"},
+    {L"nul ", "expected 'null'"},
+    {L"nx", "expected 'null'"},
+    {L"nux", "expected 'null'"},
+    {L"nulx", "expected 'null'"},
+
+    {L"t", "expected 'true'"},
+    {L"tr", "expected 'true'"},
+    {L"tu", "expected 'true'"},
+    {L"t ", "expected 'true'"},
+    {L"tr ", "expected 'true'"},
+    {L"tru ", "expected 'true'"},
+    {L"tx", "expected 'true'"},
+    {L"trx", "expected 'true'"},
+    {L"trux", "expected 'true'"},
+
+    {L"f", "expected 'false'"},
+    {L"fa", "expected 'false'"},
+    {L"fal", "expected 'false'"},
+    {L"fals", "expected 'false'"},
+    {L"f ", "expected 'false'"},
+    {L"fa ", "expected 'false'"},
+    {L"fal ", "expected 'false'"},
+    {L"fals ", "expected 'false'"},
+    {L"fx", "expected 'false'"},
+    {L"fax", "expected 'false'"},
+    {L"falx", "expected 'false'"},
+    {L"falsx", "expected 'false'"},
+
+    {L"-", "expected digits"},
+    {L"01", "garbage after data"},
+    {L"0.", "need at least one digit after '.'"},
+    {L"0e", "need at least one digit in exponent"},
+    {L"0e-", "need at least one digit in exponent"},
+
+    {L"\"", "unterminated string"},
+    {L"\"asd", "unterminated string"},
+    {L"\"\n\"", "invalid code sequence"}, // control character
+    // Encoding not known, so no UTF-16 encoding error tests.
+    {L"\"\\", "invalid escape sequence"},
+    {L"\"\\p\"", "invalid escape sequence"},
+    {L"\"\\u", "invalid escape sequence"},
+    {L"\"\\u\"", "invalid escape sequence"},
+    {L"\"\\ug\"", "invalid escape sequence"},
+    {L"\"\\u1\"", "invalid escape sequence"},
+    {L"\"\\u1g\"", "invalid escape sequence"},
+    {L"\"\\u11\"", "invalid escape sequence"},
+    {L"\"\\u11g\"", "invalid escape sequence"},
+    {L"\"\\u111\"", "invalid escape sequence"},
+    {L"\"\\u111g\"", "invalid escape sequence"},
+    {L"\"\\ude00\"", "stray low surrogate"},
+    {L"\"\\ud900", "stray high surrogate"},
+    {L"\"\\ud900foo\"", "stray high surrogate"},
+    {L"\"\\ud900\\", "expected codepoint reference"},
+    {L"\"\\ud900\\n\"", "expected codepoint reference"},
+    {L"\"\\ud900\\u1000\"", "expected low surrogate"},
+
+    {L"[", "expected value"},
+    {L"[1", "expected ']' or ','"},
+    {L"[1,", "expected value"},
+    {L"[1,]", "expected value"},
+    {L"[1}", "expected ']' or ','"},
+
+    {L"{", "expected key string"},
+    {L"{1:2}", "expected key string"},
+    {L"{\"\"", "expected ':'"},
+    {L"{\"\"}", "expected ':'"},
+    {L"{\"\":", "expected value"},
+    {L"{\"\":}", "expected value"},
+    {L"{\"\":0", "expected '}' or ','"},
+    {L"{\"\":0]", "expected '}' or ','"},
+    {L"{\"\":0,", "expected key string"},
+    {L"{\"\":0,}", "expected key string"},
+};
+
+template <typename T, std::size_t N>
+std::size_t arraysize(T(&)[N]) { return N; }
+
+#define ARRAY_TEST_CASE(fn, a) \
+    BOOST_PARAM_TEST_CASE(fn, (a), (a) + arraysize((a)))
+
+using namespace pdalboost::unit_test;
+
+test_suite* init_unit_test_suite(int, char*[]) 
+{
+    master_test_suite_t& ts = pdalboost::unit_test::framework::master_test_suite();
+    ts.add(ARRAY_TEST_CASE(boolean_parse_result_is_input_n, booleans_n));
+    ts.add(ARRAY_TEST_CASE(boolean_parse_result_is_input_w, booleans_w));
+    ts.add(ARRAY_TEST_CASE(number_parse_result_is_input_n, numbers_n));
+    ts.add(ARRAY_TEST_CASE(number_parse_result_is_input_w, numbers_w));
+    ts.add(ARRAY_TEST_CASE(string_parsed_correctly_n, strings_n));
+    ts.add(ARRAY_TEST_CASE(string_parsed_correctly_w, strings_w));
+    ts.add(ARRAY_TEST_CASE(parse_error_thrown_with_message_n, errors_n));
+    ts.add(ARRAY_TEST_CASE(parse_error_thrown_with_message_w, errors_w));
+
+    return 0;
+}
diff --git a/vendor/pdalboost/libs/property_tree/test/test_multi_module1.cpp b/vendor/pdalboost/libs/property_tree/test/test_multi_module1.cpp
new file mode 100644
index 0000000..3bb3bb4
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/test_multi_module1.cpp
@@ -0,0 +1,21 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/info_parser.hpp>
+#include <boost/property_tree/ini_parser.hpp>
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/property_tree/xml_parser.hpp>
+
+void f();
+
+int main()
+{
+    f();
+}
diff --git a/vendor/pdalboost/libs/property_tree/test/test_multi_module2.cpp b/vendor/pdalboost/libs/property_tree/test/test_multi_module2.cpp
new file mode 100644
index 0000000..6d35253
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/test_multi_module2.cpp
@@ -0,0 +1,18 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/info_parser.hpp>
+#include <boost/property_tree/ini_parser.hpp>
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/property_tree/xml_parser.hpp>
+
+void f()
+{
+}
diff --git a/vendor/pdalboost/libs/property_tree/test/test_property_tree.cpp b/vendor/pdalboost/libs/property_tree/test/test_property_tree.cpp
new file mode 100644
index 0000000..de6d7cd
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/test_property_tree.cpp
@@ -0,0 +1,203 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#include "test_utils.hpp"
+#include <boost/any.hpp>
+#include <boost/range.hpp>
+#include <list>
+#include <cmath>
+#include <iostream>
+
+// If using VC, disable some warnings that trip in pdalboost::serialization bowels
+#ifdef BOOST_MSVC
+    #pragma warning(disable:4267)   // Narrowing conversion
+    #pragma warning(disable:4996)   // Deprecated functions
+#endif
+
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/binary_iarchive.hpp>
+#include <boost/archive/binary_oarchive.hpp>
+#include <boost/archive/xml_iarchive.hpp>
+#include <boost/archive/xml_oarchive.hpp>
+#include <boost/property_tree/ptree_serialization.hpp>
+
+// Predicate for sorting keys
+template<class Ptree>
+struct SortPred
+{
+    bool operator()(const typename Ptree::value_type &v1,
+                    const typename Ptree::value_type &v2) const
+    {
+        return v1.first < v2.first;
+    }
+};
+
+// Predicate for sorting keys in reverse
+template<class Ptree>
+struct SortPredRev
+{
+    bool operator()(const typename Ptree::value_type &v1,
+                    const typename Ptree::value_type &v2) const
+    {
+        return v1.first > v2.first;
+    }
+};
+
+// Custom translator that works with pdalboost::any instead of std::string
+template <typename E>
+struct any_translator
+{
+    typedef pdalboost::any internal_type;
+    typedef E external_type;
+
+    pdalboost::optional<E> get_value(const internal_type &v) {
+        if(const E *p = pdalboost::any_cast<E>(&v)) {
+            return *p;
+        }
+        return pdalboost::optional<E>();
+    }
+    pdalboost::optional<internal_type> put_value(const E &v) {
+        return pdalboost::any(v);
+    }
+};
+
+namespace pdalboost { namespace property_tree {
+    template <typename E>
+    struct translator_between<pdalboost::any, E>
+    {
+        typedef any_translator<E> type;
+    };
+}}
+
+// Include char tests, case sensitive
+#define CHTYPE char
+#define T(s) s
+#define PTREE pdalboost::property_tree::ptree
+#define NOCASE 0
+#define WIDECHAR 0
+#   include "test_property_tree.hpp"
+#undef CHTYPE
+#undef T
+#undef PTREE
+#undef NOCASE
+#undef WIDECHAR
+
+// Include wchar_t tests, case sensitive
+#ifndef BOOST_NO_CWCHAR
+#   define CHTYPE wchar_t
+#   define T(s) L ## s
+#   define PTREE pdalboost::property_tree::wptree
+#   define NOCASE 0
+#   define WIDECHAR 1
+#       include "test_property_tree.hpp"
+#   undef CHTYPE
+#   undef T
+#   undef PTREE
+#   undef NOCASE
+#   undef WIDECHAR
+#endif
+
+// Include char tests, case insensitive
+#define CHTYPE char
+#define T(s) s
+#define PTREE pdalboost::property_tree::iptree
+#define NOCASE 1
+#   define WIDECHAR 0
+#   include "test_property_tree.hpp"
+#undef CHTYPE
+#undef T
+#undef PTREE
+#undef NOCASE
+#undef WIDECHAR
+
+// Include wchar_t tests, case insensitive
+#ifndef BOOST_NO_CWCHAR
+#   define CHTYPE wchar_t
+#   define T(s) L ## s
+#   define PTREE pdalboost::property_tree::wiptree
+#   define NOCASE 1
+#   define WIDECHAR 1
+#       include "test_property_tree.hpp"
+#   undef CHTYPE
+#   undef T
+#   undef PTREE
+#   undef NOCASE
+#   undef WIDECHAR
+#endif
+
+template <typename Ptree>
+void run_tests(Ptree* pt)
+{
+    test_debug(pt);
+    test_constructor_destructor_assignment(pt);
+    test_insertion(pt);
+    test_erasing(pt);
+    test_clear(pt);
+    test_pushpop(pt);
+    test_container_iteration(pt);
+    test_swap(pt);
+    test_sort_reverse(pt);
+    test_case(pt);
+    test_comparison(pt);
+    test_front_back(pt);
+    test_get_put(pt);
+    test_get_child_put_child(pt);
+    test_equal_range(pt);
+    test_path_separator(pt);
+    test_path(pt);
+    test_precision(pt);
+    test_locale(pt);
+    test_custom_data_type(pt);
+    test_empty_size_max_size(pt);
+    test_ptree_bad_path(pt);
+    test_ptree_bad_data(pt);
+    test_serialization(pt);
+    test_bool(pt);
+    test_char(pt);
+    test_float(pt);
+    test_sort(pt);
+    test_leaks(pt);                  // must be a final test
+}
+
+int test_main(int, char *[])
+{
+    
+    using namespace pdalboost::property_tree;
+    
+    // char tests, case sensitive
+    {
+        ptree *pt = 0;
+        run_tests(pt);
+    }
+
+    // wchar_t tests, case sensitive
+#ifndef BOOST_NO_CWCHAR
+    {
+        wptree *pt = 0;
+        run_tests(pt);
+    }
+#endif
+
+    // char tests, case insensitive
+    {
+        iptree *pt = 0;
+        run_tests(pt);
+    }
+
+    // wchar_t tests, case insensitive
+#ifndef BOOST_NO_CWCHAR
+    {
+        wiptree *pt = 0;
+        run_tests(pt);
+    }
+#endif
+
+    return 0;
+}
diff --git a/vendor/pdalboost/libs/property_tree/test/test_property_tree.hpp b/vendor/pdalboost/libs/property_tree/test/test_property_tree.hpp
new file mode 100644
index 0000000..18c1c70
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/test_property_tree.hpp
@@ -0,0 +1,1355 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+// Intentionally no include guards (to be included more than once)
+
+#if !defined(CHTYPE) || !defined(T) || !defined(PTREE) || !defined(NOCASE) || !defined(WIDECHAR)
+#   error No character type specified
+#endif
+
+void test_debug(PTREE *)
+{
+#if 0
+    // Check count
+    BOOST_CHECK(PTREE::debug_get_instances_count() == 0);
+
+    {
+
+        // Create ptrees
+        PTREE pt1, pt2;
+        BOOST_CHECK(PTREE::debug_get_instances_count() == 2);
+
+        // Create PTREE
+        PTREE *pt3 = new PTREE;
+        BOOST_CHECK(PTREE::debug_get_instances_count() == 3);
+
+        // Insert
+        pt1.push_back(std::make_pair(T("key"), *pt3));
+        BOOST_CHECK(PTREE::debug_get_instances_count() == 4);
+
+        // Insert
+        pt2.push_back(std::make_pair(T("key"), *pt3));
+        BOOST_CHECK(PTREE::debug_get_instances_count() == 5);
+
+        // Clear
+        pt1.clear();
+        BOOST_CHECK(PTREE::debug_get_instances_count() == 4);
+
+        // Clear
+        pt2.clear();
+        BOOST_CHECK(PTREE::debug_get_instances_count() == 3);
+
+        // Delete
+        delete pt3;
+        BOOST_CHECK(PTREE::debug_get_instances_count() == 2);
+
+    }
+
+    // Check count
+    BOOST_CHECK(PTREE::debug_get_instances_count() == 0);
+#endif
+}
+
+void test_constructor_destructor_assignment(PTREE *)
+{
+
+    {
+
+        // Test constructor from string
+        PTREE pt1(T("data"));
+        BOOST_CHECK(pt1.data() == T("data"));
+        //BOOST_CHECK(PTREE::debug_get_instances_count() == 1);
+
+        // Do insertions
+        PTREE &tmp1 = pt1.put(T("key1"), T("data1"));
+        PTREE &tmp2 = pt1.put(T("key2"), T("data2"));
+        tmp1.put(T("key3"), T("data3"));
+        tmp2.put(T("key4"), T("data4"));
+        //BOOST_CHECK(PTREE::debug_get_instances_count() == 5);
+
+        // Make a copy using copy constructor
+        PTREE *pt2 = new PTREE(pt1);
+        BOOST_CHECK(*pt2 == pt1);
+        //BOOST_CHECK(PTREE::debug_get_instances_count() == 10);
+
+        // Make a copy using = operator
+        PTREE *pt3 = new PTREE;
+        *pt3 = *pt2;
+        BOOST_CHECK(*pt3 == *pt2);
+        //BOOST_CHECK(PTREE::debug_get_instances_count() == 15);
+
+        // Test self assignment
+        pt1 = pt1;
+        BOOST_CHECK(pt1 == *pt2);
+        BOOST_CHECK(pt1 == *pt3);
+        //BOOST_CHECK(PTREE::debug_get_instances_count() == 15);
+
+        // Destroy
+        delete pt2;
+        //BOOST_CHECK(PTREE::debug_get_instances_count() == 10);
+
+        // Destroy
+        delete pt3;
+        //BOOST_CHECK(PTREE::debug_get_instances_count() == 5);
+
+    }
+
+    // Check count
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 0);
+
+}
+
+void test_insertion(PTREE *)
+{
+
+    // Do insertions
+    PTREE pt;
+    PTREE tmp1(T("data1"));
+    PTREE tmp2(T("data2"));
+    PTREE tmp3(T("data3"));
+    PTREE tmp4(T("data4"));
+    PTREE::iterator it1 = pt.insert(pt.end(), std::make_pair(T("key1"), tmp1));
+    PTREE::iterator it2 = pt.insert(it1, std::make_pair(T("key2"), tmp2));
+    PTREE::iterator it3 = it1->second.push_back(std::make_pair(T("key3"), tmp3));
+    PTREE::iterator it4 = it1->second.push_front(std::make_pair(T("key4"), tmp4));
+    it2->second.insert(it2->second.end(), it1->second.begin(), it1->second.end());
+
+    // Check instance count
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 11);
+
+    // Check contents
+    BOOST_CHECK(pt.get(T("key1"), T("")) == T("data1"));
+    BOOST_CHECK(pt.get(T("key2"), T("")) == T("data2"));
+    BOOST_CHECK(pt.get(T("key1.key3"), T("")) == T("data3"));
+    BOOST_CHECK(pt.get(T("key1.key4"), T("")) == T("data4"));
+    BOOST_CHECK(pt.get(T("key2.key3"), T("")) == T("data3"));
+    BOOST_CHECK(pt.get(T("key2.key4"), T("")) == T("data4"));
+
+    // Check sequence
+    PTREE::iterator it = it2;
+    ++it; BOOST_CHECK(it == it1);
+    ++it; BOOST_CHECK(it == pt.end());
+    it = it4; 
+    ++it; BOOST_CHECK(it == it3);
+    ++it; BOOST_CHECK(it == it1->second.end());
+
+}
+
+void test_erasing(PTREE *)
+{
+    
+    // Do insertions
+    PTREE pt;
+    PTREE tmp1(T("data1"));
+    PTREE tmp2(T("data2"));
+    PTREE tmp3(T("data3"));
+    PTREE tmp4(T("data4"));
+    PTREE::iterator it1 = pt.insert(pt.end(), std::make_pair(T("key1"), tmp1));
+    PTREE::iterator it2 = pt.insert(it1, std::make_pair(T("key2"), tmp2));
+    it1->second.push_back(std::make_pair(T("key"), tmp3));
+    it1->second.push_front(std::make_pair(T("key"), tmp4));
+    it2->second.insert(it2->second.end(), it1->second.begin(), it1->second.end());
+
+    // Check instance count
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 11);
+
+    // Test range erase
+    PTREE::iterator it = it1->second.erase(it1->second.begin(), it1->second.end());
+    BOOST_CHECK(it == it1->second.end());
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 9);
+
+    // Test single erase
+    PTREE::size_type n = pt.erase(T("key1"));
+    BOOST_CHECK(n == 1);
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 8);
+
+    // Test multiple erase
+    n = it2->second.erase(T("key"));
+    BOOST_CHECK(n == 2);
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 6);
+
+    // Test one more erase
+    n = pt.erase(T("key2"));
+    BOOST_CHECK(n == 1);
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 5);
+
+}
+
+void test_clear(PTREE *)
+{
+
+    // Do insertions
+    PTREE pt(T("data"));
+    pt.push_back(std::make_pair(T("key"), PTREE(T("data"))));
+
+    // Check instance count
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 2);
+
+    // Test clear
+    pt.clear();
+    BOOST_CHECK(pt.empty());
+    BOOST_CHECK(pt.data().empty());
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 1);
+
+}
+
+void test_pushpop(PTREE *)
+{
+
+    // Do insertions
+    PTREE pt;
+    PTREE tmp1(T("data1"));
+    PTREE tmp2(T("data2"));
+    PTREE tmp3(T("data3"));
+    PTREE tmp4(T("data4"));
+    pt.push_back(std::make_pair(T("key3"), tmp3));
+    pt.push_front(std::make_pair(T("key2"), tmp2));
+    pt.push_back(std::make_pair(T("key4"), tmp4));
+    pt.push_front(std::make_pair(T("key1"), tmp1));
+
+    // Check instance count
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 9);
+
+    // Check sequence
+    PTREE::iterator it = pt.begin();
+    BOOST_CHECK(it->first == T("key1")); ++it;
+    BOOST_CHECK(it->first == T("key2")); ++it;
+    BOOST_CHECK(it->first == T("key3")); ++it;
+    BOOST_CHECK(it->first == T("key4")); ++it;
+    BOOST_CHECK(it == pt.end());
+
+    // Test pops
+    pt.pop_back();
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 8);
+    BOOST_CHECK(pt.front().second.data() == T("data1"));
+    BOOST_CHECK(pt.back().second.data() == T("data3"));
+    pt.pop_front();
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 7);
+    BOOST_CHECK(pt.front().second.data() == T("data2"));
+    BOOST_CHECK(pt.back().second.data() == T("data3"));
+    pt.pop_back();
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 6);
+    BOOST_CHECK(pt.front().second.data() == T("data2"));
+    BOOST_CHECK(pt.back().second.data() == T("data2"));
+    pt.pop_front();
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 5);
+    BOOST_CHECK(pt.empty());
+
+}
+
+void test_container_iteration(PTREE *)
+{
+    
+    // Do insertions
+    PTREE pt;
+    pt.put(T("key3"), T(""));
+    pt.put(T("key1"), T(""));
+    pt.put(T("key4"), T(""));
+    pt.put(T("key2"), T(""));
+
+    // iterator
+    {
+        PTREE::iterator it = pt.begin();
+        BOOST_CHECK(it->first == T("key3")); ++it;
+        BOOST_CHECK(it->first == T("key1")); ++it;
+        BOOST_CHECK(it->first == T("key4")); ++it;
+        BOOST_CHECK(it->first == T("key2")); ++it;
+        BOOST_CHECK(it == pt.end());
+    }
+
+    // const_iterator
+    {
+        PTREE::const_iterator it = pt.begin();
+        BOOST_CHECK(it->first == T("key3")); ++it;
+        BOOST_CHECK(it->first == T("key1")); ++it;
+        BOOST_CHECK(it->first == T("key4")); ++it;
+        BOOST_CHECK(it->first == T("key2")); ++it;
+        BOOST_CHECK(it == pt.end());
+    }
+
+    // reverse_iterator
+    {
+        PTREE::reverse_iterator it = pt.rbegin();
+        BOOST_CHECK(it->first == T("key2")); ++it;
+        BOOST_CHECK(it->first == T("key4")); ++it;
+        BOOST_CHECK(it->first == T("key1")); ++it;
+        BOOST_CHECK(it->first == T("key3")); ++it;
+        BOOST_CHECK(it == pt.rend());
+    }
+
+    // const_reverse_iterator
+    {
+        PTREE::const_reverse_iterator it = pt.rbegin();
+        BOOST_CHECK(it->first == T("key2")); ++it;
+        BOOST_CHECK(it->first == T("key4")); ++it;
+        BOOST_CHECK(it->first == T("key1")); ++it;
+        BOOST_CHECK(it->first == T("key3")); ++it;
+        BOOST_CHECK(it == PTREE::const_reverse_iterator(pt.rend()));
+    }
+
+}
+
+void test_swap(PTREE *)
+{
+    
+    PTREE pt1, pt2;
+
+    // Do insertions
+    pt1.put(T("key1"), T(""));
+    pt1.put(T("key2"), T(""));
+    pt1.put(T("key1.key3"), T(""));
+    pt1.put(T("key1.key4"), T(""));
+
+    // Check counts
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 6);
+    BOOST_CHECK(pt1.size() == 2);
+    BOOST_CHECK(pt1.get_child(T("key1")).size() == 2);
+    BOOST_CHECK(pt2.size() == 0);
+
+    // Swap using member function
+    pt1.swap(pt2);
+    
+    // Check counts
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 6);
+    BOOST_CHECK(pt2.size() == 2);
+    BOOST_CHECK(pt2.get_child(T("key1")).size() == 2);
+    BOOST_CHECK(pt1.size() == 0);
+
+    // Swap using free function
+    swap(pt1, pt2);
+
+    // Check counts
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 6);
+    BOOST_CHECK(pt1.size() == 2);
+    BOOST_CHECK(pt1.get_child(T("key1")).size() == 2);
+    BOOST_CHECK(pt2.size() == 0);
+
+    // Swap using std algorithm
+    std::swap(pt1, pt2);
+
+    // Check counts
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 6);
+    BOOST_CHECK(pt2.size() == 2);
+    BOOST_CHECK(pt2.get_child(T("key1")).size() == 2);
+    BOOST_CHECK(pt1.size() == 0);
+
+}
+
+void test_sort_reverse(PTREE *)
+{
+    
+    PTREE pt;
+
+    // Do insertions
+    pt.put(T("key2"), T("data2"));
+    pt.put(T("key1"), T("data1"));
+    pt.put(T("key4"), T("data4"));
+    pt.put(T("key3"), T("data3"));
+    pt.put(T("key3.key1"), T(""));
+    pt.put(T("key4.key2"), T(""));
+
+    // Reverse
+    pt.reverse();
+
+    // Check sequence
+    {
+        PTREE::iterator it = pt.begin();
+        BOOST_CHECK(it->first == T("key3")); ++it;
+        BOOST_CHECK(it->first == T("key4")); ++it;
+        BOOST_CHECK(it->first == T("key1")); ++it;
+        BOOST_CHECK(it->first == T("key2")); ++it;
+        BOOST_CHECK(it == pt.end());
+    }
+    // Check sequence using find to check if index is ok
+    {
+        PTREE::iterator it = pt.begin();
+        BOOST_CHECK(it == pt.to_iterator(pt.find(T("key3")))); ++it;
+        BOOST_CHECK(it == pt.to_iterator(pt.find(T("key4")))); ++it;
+        BOOST_CHECK(it == pt.to_iterator(pt.find(T("key1")))); ++it;
+        BOOST_CHECK(it == pt.to_iterator(pt.find(T("key2")))); ++it;
+        BOOST_CHECK(it == pt.end());
+    }
+
+    // Sort
+    pt.sort(SortPred<PTREE>());
+
+    // Check sequence
+    {
+        PTREE::iterator it = pt.begin();
+        BOOST_CHECK(it->first == T("key1")); ++it;
+        BOOST_CHECK(it->first == T("key2")); ++it;
+        BOOST_CHECK(it->first == T("key3")); ++it;
+        BOOST_CHECK(it->first == T("key4")); ++it;
+        BOOST_CHECK(it == pt.end());
+    }
+    // Check sequence (using find to check if index is ok)
+    {
+        PTREE::iterator it = pt.begin();
+        BOOST_CHECK(it == pt.to_iterator(pt.find(T("key1")))); ++it;
+        BOOST_CHECK(it == pt.to_iterator(pt.find(T("key2")))); ++it;
+        BOOST_CHECK(it == pt.to_iterator(pt.find(T("key3")))); ++it;
+        BOOST_CHECK(it == pt.to_iterator(pt.find(T("key4")))); ++it;
+        BOOST_CHECK(it == pt.end());
+    }
+    
+    // Sort reverse
+    pt.sort(SortPredRev<PTREE>());
+
+    // Check sequence
+    {
+        PTREE::iterator it = pt.begin();
+        BOOST_CHECK(it->first == T("key4")); ++it;
+        BOOST_CHECK(it->first == T("key3")); ++it;
+        BOOST_CHECK(it->first == T("key2")); ++it;
+        BOOST_CHECK(it->first == T("key1")); ++it;
+        BOOST_CHECK(it == pt.end());
+    }
+    // Check sequence (using find to check if index is ok)
+    {
+        PTREE::iterator it = pt.begin();
+        BOOST_CHECK(it == pt.to_iterator(pt.find(T("key4")))); ++it;
+        BOOST_CHECK(it == pt.to_iterator(pt.find(T("key3")))); ++it;
+        BOOST_CHECK(it == pt.to_iterator(pt.find(T("key2")))); ++it;
+        BOOST_CHECK(it == pt.to_iterator(pt.find(T("key1")))); ++it;
+        BOOST_CHECK(it == pt.end());
+    }
+
+}
+
+void test_case(PTREE *)
+{
+    
+    // Do insertions
+    PTREE pt;
+    pt.put(T("key1"), T("data1"));
+    pt.put(T("KEY2"), T("data2"));
+    pt.put(T("kEy1.keY3"), T("data3"));
+    pt.put(T("KEY1.key4"), T("data4"));
+
+    // Check findings depending on traits type
+#if (NOCASE == 0)
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 7);
+    BOOST_CHECK(pt.get(T("key1"), T("")) == T("data1"));
+    BOOST_CHECK(pt.get(T("key2"), T("")) == T(""));
+    BOOST_CHECK(pt.get(T("key1.key3"), T("")) == T(""));
+    BOOST_CHECK(pt.get(T("KEY1.key4"), T("")) == T("data4"));
+#else
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 5);
+    BOOST_CHECK(pt.get(T("key1"), T("1")) == pt.get(T("KEY1"), T("2")));
+    BOOST_CHECK(pt.get(T("key2"), T("1")) == pt.get(T("KEY2"), T("2")));
+    BOOST_CHECK(pt.get(T("key1.key3"), T("1")) == pt.get(T("KEY1.KEY3"), T("2")));
+    BOOST_CHECK(pt.get(T("key1.key4"), T("1")) == pt.get(T("KEY1.KEY4"), T("2")));
+#endif
+
+    // Do more insertions
+    pt.push_back(PTREE::value_type(T("key1"), PTREE()));
+    pt.push_back(PTREE::value_type(T("key1"), PTREE()));
+
+    // Test counts
+#if (NOCASE == 0)
+    BOOST_CHECK(pt.count(T("key1")) == 3);
+    BOOST_CHECK(pt.count(T("KEY1")) == 1);
+    BOOST_CHECK(pt.count(T("key2")) == 0);
+    BOOST_CHECK(pt.count(T("KEY2")) == 1);
+    BOOST_CHECK(pt.count(T("key3")) == 0);
+    BOOST_CHECK(pt.count(T("KEY3")) == 0);
+#else
+    BOOST_CHECK(pt.count(T("key1")) == 3);
+    BOOST_CHECK(pt.count(T("KEY1")) == 3);
+    BOOST_CHECK(pt.count(T("key2")) == 1);
+    BOOST_CHECK(pt.count(T("KEY2")) == 1);
+    BOOST_CHECK(pt.count(T("key3")) == 0);
+    BOOST_CHECK(pt.count(T("KEY3")) == 0);
+#endif
+
+}
+
+void test_comparison(PTREE *)
+{
+
+    // Prepare original
+    PTREE pt_orig(T("data"));
+    pt_orig.put(T("key1"), T("data1"));
+    pt_orig.put(T("key1.key3"), T("data2"));
+    pt_orig.put(T("key1.key4"), T("data3"));
+    pt_orig.put(T("key2"), T("data4"));
+
+    // Test originals
+    {
+        PTREE pt1(pt_orig);
+        PTREE pt2(pt_orig);
+        BOOST_CHECK(pt1 == pt2);
+        BOOST_CHECK(pt2 == pt1);
+        BOOST_CHECK(!(pt1 != pt2));
+        BOOST_CHECK(!(pt2 != pt1));
+    }
+
+    // Test originals with modified case
+#if (NOCASE != 0)
+    {
+        PTREE pt1(pt_orig);
+        PTREE pt2(pt_orig);
+        pt1.pop_back();
+        pt1.put(T("KEY2"), T("data4"));
+        BOOST_CHECK(pt1 == pt2);
+        BOOST_CHECK(pt2 == pt1);
+        BOOST_CHECK(!(pt1 != pt2));
+        BOOST_CHECK(!(pt2 != pt1));
+    }
+#endif
+
+    // Test modified copies (both modified the same way)
+    {
+        PTREE pt1(pt_orig);
+        PTREE pt2(pt_orig);
+        pt1.put(T("key1.key5"), T("."));
+        pt2.put(T("key1.key5"), T("."));
+        BOOST_CHECK(pt1 == pt2);
+        BOOST_CHECK(pt2 == pt1);
+        BOOST_CHECK(!(pt1 != pt2));
+        BOOST_CHECK(!(pt2 != pt1));
+    }
+
+    // Test modified copies (modified root data)
+    {
+        PTREE pt1(pt_orig);
+        PTREE pt2(pt_orig);
+        pt1.data() = T("a");
+        pt2.data() = T("b");
+        BOOST_CHECK(!(pt1 == pt2));
+        BOOST_CHECK(!(pt2 == pt1));
+        BOOST_CHECK(pt1 != pt2);
+        BOOST_CHECK(pt2 != pt1);
+    }
+
+    // Test modified copies (added subkeys with different data)
+    {
+        PTREE pt1(pt_orig);
+        PTREE pt2(pt_orig);
+        pt1.put(T("key1.key5"), T("a"));
+        pt2.put(T("key1.key5"), T("b"));
+        BOOST_CHECK(!(pt1 == pt2));
+        BOOST_CHECK(!(pt2 == pt1));
+        BOOST_CHECK(pt1 != pt2);
+        BOOST_CHECK(pt2 != pt1);
+    }
+
+    // Test modified copies (added subkeys with different keys)
+    {
+        PTREE pt1(pt_orig);
+        PTREE pt2(pt_orig);
+        pt1.put(T("key1.key5"), T(""));
+        pt2.put(T("key1.key6"), T(""));
+        BOOST_CHECK(!(pt1 == pt2));
+        BOOST_CHECK(!(pt2 == pt1));
+        BOOST_CHECK(pt1 != pt2);
+        BOOST_CHECK(pt2 != pt1);
+    }
+
+    // Test modified copies (added subkey to only one copy)
+    {
+        PTREE pt1(pt_orig);
+        PTREE pt2(pt_orig);
+        pt1.put(T("key1.key5"), T(""));
+        BOOST_CHECK(!(pt1 == pt2));
+        BOOST_CHECK(!(pt2 == pt1));
+        BOOST_CHECK(pt1 != pt2);
+        BOOST_CHECK(pt2 != pt1);
+    }
+
+}
+
+void test_front_back(PTREE *)
+{
+    
+    // Do insertions
+    PTREE pt;
+    pt.put(T("key1"), T(""));
+    pt.put(T("key2"), T(""));
+
+    // Check front and back
+    BOOST_CHECK(pt.front().first == T("key1"));
+    BOOST_CHECK(pt.back().first == T("key2"));
+
+}
+
+void test_get_put(PTREE *)
+{
+    
+    typedef std::basic_string<CHTYPE> str_t;
+
+    // Temporary storage
+    str_t tmp_string;
+    pdalboost::optional<int> opt_int;
+    pdalboost::optional<long> opt_long;
+    pdalboost::optional<double> opt_double;
+    pdalboost::optional<float> opt_float;
+    pdalboost::optional<str_t> opt_string;
+    pdalboost::optional<CHTYPE> opt_char;
+    pdalboost::optional<bool> opt_bool;
+    
+    // Do insertions via put
+    PTREE pt;
+    PTREE &pt1 = pt.put(T("k1"), 1);
+    PTREE &pt2 = pt.put(T("k2.k"), 2.5);
+    PTREE &pt3 = pt.put(T("k3.k.k"), T("ala ma kota"));
+    PTREE &pt4 = pt.put(T("k4.k.k.k"), CHTYPE('c'));
+    PTREE &pt5 = pt.put(T("k5.k.k.k.f"), false);
+    PTREE &pt6 = pt.put(T("k5.k.k.k.t"), true);
+
+    // Check instances count
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 17);
+
+    // Check if const char * version returns std::string
+    BOOST_CHECK(typeid(pt.get_value(T(""))) == typeid(str_t));
+    
+    // Do extractions via get (throwing version)
+    BOOST_CHECK(pt.get<int>(T("k1")) == 1);
+    BOOST_CHECK(pt.get<long>(T("k1")) == 1);
+    BOOST_CHECK(pt.get<double>(T("k2.k")) == 2.5);
+    BOOST_CHECK(pt.get<float>(T("k2.k")) == 2.5f);
+    BOOST_CHECK(pt.get<str_t>(T("k3.k.k")) == str_t(T("ala ma kota")));
+    BOOST_CHECK(pt.get<CHTYPE>(T("k4.k.k.k")) == CHTYPE('c'));
+    BOOST_CHECK(pt.get<bool>(T("k5.k.k.k.f")) == false);
+    BOOST_CHECK(pt.get<bool>(T("k5.k.k.k.t")) == true);
+
+    // Do extractions via get (default value version)
+    BOOST_CHECK(pt.get(T("k1"), 0) == 1);
+    BOOST_CHECK(pt.get(T("k1"), 0L) == 1);
+    BOOST_CHECK(pt.get(T("k2.k"), 0.0) == 2.5);
+    BOOST_CHECK(pt.get(T("k2.k"), 0.0f) == 2.5f);
+    BOOST_CHECK(pt.get(T("k3.k.k"), str_t()) == str_t(T("ala ma kota")));
+    BOOST_CHECK(pt.get(T("k3.k.k"), T("")) == T("ala ma kota"));
+    BOOST_CHECK(pt.get(T("k4.k.k.k"), CHTYPE('\0')) == CHTYPE('c'));
+    BOOST_CHECK(pt.get(T("k5.k.k.k.f"), true) == false);
+    BOOST_CHECK(pt.get(T("k5.k.k.k.t"), false) == true);
+
+    // Do extractions via get (optional version)
+    opt_int = pt.get_optional<int>(T("k1"));
+    BOOST_CHECK(opt_int && *opt_int == 1);
+    opt_long = pt.get_optional<long>(T("k1"));
+    BOOST_CHECK(opt_long && *opt_long == 1);
+    opt_double = pt.get_optional<double>(T("k2.k"));
+    BOOST_CHECK(opt_double && *opt_double == 2.5);
+    opt_float = pt.get_optional<float>(T("k2.k"));
+    BOOST_CHECK(opt_float && *opt_float == 2.5f);
+    opt_string = pt.get_optional<str_t>(T("k3.k.k"));
+    BOOST_CHECK(opt_string && *opt_string == str_t(T("ala ma kota")));
+    opt_char = pt.get_optional<CHTYPE>(T("k4.k.k.k"));
+    BOOST_CHECK(opt_char && *opt_char == CHTYPE('c'));
+    opt_bool = pt.get_optional<bool>(T("k5.k.k.k.f"));
+    BOOST_CHECK(opt_bool && *opt_bool == false);
+    opt_bool = pt.get_optional<bool>(T("k5.k.k.k.t"));
+    BOOST_CHECK(opt_bool && *opt_bool == true);
+
+    // Do insertions via put_value
+    pt1.put_value(short(1));
+    pt2.put_value(2.5f);
+    pt3.put_value(str_t(T("ala ma kota")));
+    pt4.put_value(CHTYPE('c'));
+    pt5.put_value(false);
+    pt6.put_value(true);
+
+    // Do extractions via get_value (throwing version)
+    BOOST_CHECK(pt1.get_value<int>() == 1);
+    BOOST_CHECK(pt1.get_value<long>() == 1);
+    BOOST_CHECK(pt2.get_value<double>() == 2.5);
+    BOOST_CHECK(pt2.get_value<float>() == 2.5f);
+    BOOST_CHECK(pt3.get_value<str_t>() == str_t(T("ala ma kota")));
+    BOOST_CHECK(pt4.get_value<CHTYPE>() == CHTYPE('c'));
+    BOOST_CHECK(pt5.get_value<bool>() == false);
+    BOOST_CHECK(pt6.get_value<bool>() == true);
+
+    // Do extractions via get_value (default value version)
+    BOOST_CHECK(pt1.get_value(0) == 1);
+    BOOST_CHECK(pt1.get_value(0L) == 1);
+    BOOST_CHECK(pt2.get_value(0.0) == 2.5);
+    BOOST_CHECK(pt2.get_value(0.0f) == 2.5f);
+    BOOST_CHECK(pt3.get_value(str_t()) == str_t(T("ala ma kota")));
+    BOOST_CHECK(pt3.get_value(T("")) == T("ala ma kota"));
+    BOOST_CHECK(pt4.get_value(CHTYPE('\0')) == CHTYPE('c'));
+    BOOST_CHECK(pt5.get_value(true) == false);
+    BOOST_CHECK(pt6.get_value(false) == true);
+
+    // Do extractions via get_value (optional version)
+    opt_int = pt1.get_value_optional<int>();
+    BOOST_CHECK(opt_int && *opt_int == 1);
+    opt_long = pt1.get_value_optional<long>();
+    BOOST_CHECK(opt_long && *opt_long == 1);
+    opt_double = pt2.get_value_optional<double>();
+    BOOST_CHECK(opt_double && *opt_double == 2.5);
+    opt_float = pt2.get_value_optional<float>();
+    BOOST_CHECK(opt_float && *opt_float == 2.5f);
+    opt_string = pt3.get_value_optional<str_t>();
+    BOOST_CHECK(opt_string && *opt_string == str_t(T("ala ma kota")));
+    opt_char = pt4.get_value_optional<CHTYPE>();
+    BOOST_CHECK(opt_char && *opt_char == CHTYPE('c'));
+    opt_bool = pt5.get_value_optional<bool>();
+    BOOST_CHECK(opt_bool && *opt_bool == false);
+    opt_bool = pt6.get_value_optional<bool>();
+    BOOST_CHECK(opt_bool && *opt_bool == true);
+
+    // Do incorrect extractions (throwing version)
+    try
+    {
+        pt.get<int>(T("k2.k.bogus.path"));
+        BOOST_ERROR("No required exception thrown");
+    }
+    catch (pdalboost::property_tree::ptree_bad_path &) { }
+    catch (...)
+    {
+        BOOST_ERROR("Wrong exception type thrown");
+    }
+    try
+    {
+        pt.get<int>(T("k2.k"));
+        BOOST_ERROR("No required exception thrown");
+    }
+    catch (pdalboost::property_tree::ptree_bad_data &) { }
+    catch (...)
+    {
+        BOOST_ERROR("Wrong exception type thrown");
+    }
+
+    // Do incorrect extractions (default value version)
+    BOOST_CHECK(pt.get(T("k2.k"), -7) == -7);
+    BOOST_CHECK(pt.get(T("k3.k.k"), -7) == -7);
+    BOOST_CHECK(pt.get(T("k4.k.k.k"), -7) == -7);
+
+    // Do incorrect extractions (optional version)
+    BOOST_CHECK(!pt.get_optional<int>(T("k2.k")));
+    BOOST_CHECK(!pt.get_optional<int>(T("k3.k.k")));
+    BOOST_CHECK(!pt.get_optional<int>(T("k4.k.k.k")));
+
+    // Test multiple puts with the same key
+    {
+        PTREE pt;
+        pt.put(T("key"), 1);
+        BOOST_CHECK(pt.get<int>(T("key")) == 1);
+        BOOST_CHECK(pt.size() == 1);
+        pt.put(T("key"), 2);
+        BOOST_CHECK(pt.get<int>(T("key")) == 2);
+        BOOST_CHECK(pt.size() == 1);
+        pt.put(T("key.key.key"), 1);
+        PTREE &child = pt.get_child(T("key.key"));
+        BOOST_CHECK(pt.get<int>(T("key.key.key")) == 1);
+        BOOST_CHECK(child.size() == 1);
+        BOOST_CHECK(child.count(T("key")) == 1);
+        pt.put(T("key.key.key"), 2);
+        BOOST_CHECK(pt.get<int>(T("key.key.key")) == 2);
+        BOOST_CHECK(child.size() == 1);
+        BOOST_CHECK(child.count(T("key")) == 1);
+    }
+
+    // Test multiple puts with the same key
+    {
+        PTREE pt;
+        pt.put(T("key"), 1);
+        BOOST_CHECK(pt.get<int>(T("key")) == 1);
+        BOOST_CHECK(pt.size() == 1);
+        pt.put(T("key"), 2);
+        BOOST_CHECK(pt.get<int>(T("key")) == 2);
+        BOOST_CHECK(pt.size() == 1);
+        pt.put(T("key.key.key"), 1);
+        PTREE &child = pt.get_child(T("key.key"));
+        BOOST_CHECK(child.size() == 1);
+        BOOST_CHECK(child.count(T("key")) == 1);
+        pt.add(T("key.key.key"), 2);
+        BOOST_CHECK(child.size() == 2);
+        BOOST_CHECK(child.count(T("key")) == 2);
+    }
+
+    // Test that put does not destroy children
+    {
+        PTREE pt;
+        pt.put(T("key1"), 1);
+        pt.put(T("key1.key2"), 2);
+        BOOST_CHECK(pt.get<int>(T("key1"), 0) == 1);
+        BOOST_CHECK(pt.get<int>(T("key1.key2"), 0) == 2);
+        pt.put(T("key1"), 2);
+        BOOST_CHECK(pt.get<int>(T("key1"), 0) == 2);
+        BOOST_CHECK(pt.get<int>(T("key1.key2"), 0) == 2);
+    }
+
+    // Test that get of single character that is whitespace works
+    {
+        PTREE pt;
+        pt.put_value(T(' '));
+        CHTYPE ch = pt.get_value<CHTYPE>();
+        BOOST_CHECK(ch == T(' '));
+    }
+
+    // Test that get of non-char value with trailing and leading whitespace works
+    {
+        PTREE pt;
+        pt.put_value(T(" \t\n99 \t\n"));
+        BOOST_CHECK(pt.get_value<int>(0) == 99);
+    }
+
+}
+                                    
+void test_get_child_put_child(PTREE *)
+{
+    PTREE pt(T("ala ma kota"));
+
+    // Do insertions via put_child
+    PTREE pt1, pt2, pt3;
+    pt1.put_child(T("k1"), PTREE());
+    pt1.put_child(T("k2.k"), PTREE());
+    pt2.put_child(T("k1"), pt);
+    pt2.put_child(T("k2.k"), pt);
+
+    // Const references to test const versions of methods
+    const PTREE &cpt1 = pt1, &cpt2 = pt2;
+
+    // Do correct extractions via get_child (throwing version)
+    BOOST_CHECK(pt1.get_child(T("k1")).empty());
+    BOOST_CHECK(pt1.get_child(T("k2.k")).empty());
+    BOOST_CHECK(pt2.get_child(T("k1")) == pt);
+    BOOST_CHECK(pt2.get_child(T("k2.k")) == pt);
+    BOOST_CHECK(cpt1.get_child(T("k1")).empty());
+    BOOST_CHECK(cpt1.get_child(T("k2.k")).empty());
+    BOOST_CHECK(cpt2.get_child(T("k1")) == pt);
+    BOOST_CHECK(cpt2.get_child(T("k2.k")) == pt);
+
+    // Do correct extractions via get_child (default value version)
+    BOOST_CHECK(pt1.get_child(T("k1"), PTREE(T("def"))) != PTREE(T("def")));
+    BOOST_CHECK(pt1.get_child(T("k2.k"), PTREE(T("def"))) != PTREE(T("def")));
+    BOOST_CHECK(pt2.get_child(T("k1"), PTREE(T("def"))) == pt);
+    BOOST_CHECK(pt2.get_child(T("k2.k"), PTREE(T("def"))) == pt);
+    BOOST_CHECK(cpt1.get_child(T("k1"), PTREE(T("def"))) != PTREE(T("def")));
+    BOOST_CHECK(cpt1.get_child(T("k2.k"), PTREE(T("def"))) != PTREE(T("def")));
+    BOOST_CHECK(cpt2.get_child(T("k1"), PTREE(T("def"))) == pt);
+    BOOST_CHECK(cpt2.get_child(T("k2.k"), PTREE(T("def"))) == pt);
+
+    // Do correct extractions via get_child (optional version)
+    pdalboost::optional<PTREE &> opt;
+    pdalboost::optional<const PTREE &> copt;
+    opt = pt1.get_child_optional(T("k1"));
+    BOOST_CHECK(opt);
+    opt = pt1.get_child_optional(T("k2.k"));
+    BOOST_CHECK(opt);
+    opt = pt2.get_child_optional(T("k1"));
+    BOOST_CHECK(opt && *opt == pt);
+    opt = pt2.get_child_optional(T("k2.k"));
+    BOOST_CHECK(opt && *opt == pt);
+    copt = cpt1.get_child_optional(T("k1"));
+    BOOST_CHECK(copt);
+    copt = cpt1.get_child_optional(T("k2.k"));
+    BOOST_CHECK(copt);
+    copt = cpt2.get_child_optional(T("k1"));
+    BOOST_CHECK(copt && *copt == pt);
+    copt = cpt2.get_child_optional(T("k2.k"));
+    BOOST_CHECK(copt && *copt == pt);
+
+    // Do incorrect extractions via get_child (throwing version)
+    try
+    {
+        pt.get_child(T("k2.k.bogus.path"));
+        BOOST_ERROR("No required exception thrown");
+    }
+    catch (pdalboost::property_tree::ptree_bad_path &) { }
+    catch (...)
+    {
+        BOOST_ERROR("Wrong exception type thrown");
+    }
+
+    // Do incorrect extractions via get_child (default value version)
+    BOOST_CHECK(&pt.get_child(T("k2.k.bogus.path"), pt3) == &pt3);
+
+    // Do incorrect extractions via get_child (optional version)
+    BOOST_CHECK(!pt.get_child_optional(T("k2.k.bogus.path")));
+
+    // Test multiple puts with the same key
+    {
+        PTREE pt, tmp1(T("data1")), tmp2(T("data2"));
+        pt.put_child(T("key"), tmp1);
+        BOOST_CHECK(pt.get_child(T("key")) == tmp1);
+        BOOST_CHECK(pt.size() == 1);
+        pt.put_child(T("key"), tmp2);
+        BOOST_CHECK(pt.get_child(T("key")) == tmp2);
+        BOOST_CHECK(pt.size() == 1);
+        pt.put_child(T("key.key.key"), tmp1);
+        PTREE &child = pt.get_child(T("key.key"));
+        BOOST_CHECK(child.size() == 1);
+        pt.put_child(T("key.key.key"), tmp2);
+        BOOST_CHECK(child.size() == 1);
+    }
+
+    // Test multiple adds with the same key
+    {
+        PTREE pt, tmp1(T("data1")), tmp2(T("data2"));
+        pt.add_child(T("key"), tmp1);
+        BOOST_CHECK(pt.size() == 1);
+        pt.add_child(T("key"), tmp2);
+        BOOST_CHECK(pt.size() == 2);
+        BOOST_CHECK(pt.count(T("key")) == 2);
+        pt.add_child(T("key.key.key"), tmp1);
+        PTREE &child = pt.get_child(T("key.key"));
+        BOOST_CHECK(child.size() == 1);
+        BOOST_CHECK(child.count(T("key")) == 1);
+        pt.add_child(T("key.key.key"), tmp2);
+        BOOST_CHECK(child.size() == 2);
+        BOOST_CHECK(child.count(T("key")) == 2);
+    }
+
+    // Test assigning child to tree
+    {
+        PTREE pt;
+        pt.put(T("foo.bar"), T("baz"));
+        pt = pt.get_child(T("foo"));
+        BOOST_CHECK(pt.size() == 1);
+        BOOST_CHECK(pt.get< std::basic_string<CHTYPE> >(T("bar")) == T("baz"));
+    }
+
+}
+
+void test_equal_range(PTREE *)
+{
+    PTREE pt;
+    pt.add_child(T("k1"), PTREE());
+    pt.add_child(T("k2"), PTREE());
+    pt.add_child(T("k1"), PTREE());
+    pt.add_child(T("k3"), PTREE());
+    pt.add_child(T("k1"), PTREE());
+    pt.add_child(T("k2"), PTREE());
+
+    BOOST_CHECK(pdalboost::distance(pt.equal_range(T("k1"))) == 3);
+    BOOST_CHECK(pdalboost::distance(pt.equal_range(T("k2"))) == 2);
+    BOOST_CHECK(pdalboost::distance(pt.equal_range(T("k3"))) == 1);
+}
+
+void test_path_separator(PTREE *)
+{
+
+    typedef PTREE::path_type path;
+
+    // Check instances count
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 0);
+
+    // Do insertions
+    PTREE pt;
+    pt.put(T("key1"), T("1"));
+    pt.put(T("key2.key"), T("2"));
+    pt.put(T("key3.key.key"), T("3"));
+    pt.put(path(T("key4"), CHTYPE('/')), T("4"));
+    pt.put(path(T("key5/key"), CHTYPE('/')), T("5"));
+    pt.put(path(T("key6/key/key"), CHTYPE('/')), T("6"));
+
+    // Check instances count
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 13);
+
+    // Do correct extractions
+    BOOST_CHECK(pt.get(T("key1"), 0) == 1);
+    BOOST_CHECK(pt.get(T("key2.key"), 0) == 2);
+    BOOST_CHECK(pt.get(T("key3.key.key"), 0) == 3);
+    BOOST_CHECK(pt.get(path(T("key4"), CHTYPE('/')), 0) == 4);
+    BOOST_CHECK(pt.get(path(T("key5/key"), CHTYPE('/')), 0) == 5);
+    BOOST_CHECK(pt.get(path(T("key6/key/key"), CHTYPE('/')), 0) == 6);
+
+    // Do incorrect extractions
+    BOOST_CHECK(pt.get(T("key2/key"), 0) == 0);
+    BOOST_CHECK(pt.get(T("key3/key/key"), 0) == 0);
+    BOOST_CHECK(pt.get(path(T("key5.key"), CHTYPE('/')), 0) == 0);
+    BOOST_CHECK(pt.get(path(T("key6.key.key"), CHTYPE('/')), 0) == 0);
+
+}
+
+void test_path(PTREE *)
+{
+
+    typedef PTREE::path_type path;
+
+    // Insert
+    PTREE pt;
+    pt.put(T("key1.key2.key3"), 1);
+
+    // Test operator /=
+    {
+        path p;
+        p /= T("key1"); p /= T("key2"); p /= T("key3");
+        BOOST_CHECK(pt.get<int>(p, 0) == 1);
+    }
+
+    // Test operator /=
+    {
+        path p(T("key1"));
+        p /= T("key2.key3");
+        BOOST_CHECK(pt.get<int>(p, 0) == 1);
+    }
+
+    // Test operator /=
+    {
+        path p;
+        path p1(T("key1.key2"));
+        path p2(T("key3"));
+        p /= p1;
+        p /= p2;
+        BOOST_CHECK(pt.get<int>(p, 0) == 1);
+    }
+
+    // Test operator /
+    {
+        path p = path(T("key1")) / T("key2.key3");
+        BOOST_CHECK(pt.get<int>(p, 0) == 1);
+    }
+
+    // Test operator /
+    {
+        path p = T("key1.key2") / path(T("key3"));
+        BOOST_CHECK(pt.get<int>(p, 0) == 1);
+    }
+
+}
+
+void test_precision(PTREE *)
+{
+
+    typedef double real;
+
+    // Quite precise PI value
+    real pi = real(3.1415926535897932384626433832795028841971);
+
+    // Put and get
+    PTREE pt;
+    pt.put_value(pi);
+    real pi2 = pt.get_value<real>();
+
+    // Test if precision is "good enough", i.e. if stream precision increase worked
+    using namespace std;
+    real error = abs(pi - pi2) *
+        pow(real(numeric_limits<real>::radix), 
+            real(numeric_limits<real>::digits));
+    BOOST_CHECK(error < 100);
+
+}
+
+void test_locale(PTREE *)
+{
+    typedef pdalboost::property_tree::translator_between<
+        std::basic_string<CHTYPE>, double>::type translator;
+    try
+    {
+
+        // Write strings in english and french locales
+        PTREE pt;
+#ifdef BOOST_WINDOWS
+        std::locale loc_english("english");
+        std::locale loc_french("french");
+#else
+        std::locale loc_english("en_GB");
+        std::locale loc_french("fr_FR");
+#endif
+        pt.put(T("english"), 1.234, translator(loc_english));
+        pt.put(T("french"), 1.234, translator(loc_french));
+
+        // Test contents
+        BOOST_CHECK(pt.get<PTREE::data_type>(T("english")) == T("1.234"));
+        BOOST_CHECK(pt.get<PTREE::data_type>(T("french")) == T("1,234"));
+
+    }
+    catch (pdalboost::property_tree::ptree_error &)
+    {
+        throw;
+    }
+    catch (std::runtime_error &e)
+    {
+        std::cerr << "Required locale not supported by the platform. "
+                     "Skipping locale tests (caught std::runtime_error with message " << 
+                     e.what() << ").\n";
+    }
+
+}
+
+void test_custom_data_type(PTREE *)
+{
+
+    typedef std::basic_string<CHTYPE> Str;
+    typedef PTREE::key_compare Comp;
+
+    // Property_tree with pdalboost::any as data type
+    typedef pdalboost::property_tree::basic_ptree<Str, pdalboost::any, Comp> my_ptree;
+    my_ptree pt;
+
+    // Put/get int value
+    pt.put(T("int value"), 3);
+    int int_value = pt.get<int>(T("int value"));
+    BOOST_CHECK(int_value == 3);
+
+    // Put/get string value
+    pt.put<std::basic_string<CHTYPE> >(T("string value"), T("foo bar"));
+    std::basic_string<CHTYPE> string_value = pt.get<std::basic_string<CHTYPE> >(T("string value"));
+    BOOST_CHECK(string_value == T("foo bar"));
+
+    // Put/get list<int> value
+    int list_data[] = { 1, 2, 3, 4, 5 };
+    pt.put<std::list<int> >(T("list value"), std::list<int>(list_data, list_data + sizeof(list_data) / sizeof(*list_data)));
+    std::list<int> list_value = pt.get<std::list<int> >(T("list value"));
+    BOOST_CHECK(list_value.size() == 5);
+    BOOST_CHECK(list_value.front() == 1);
+    BOOST_CHECK(list_value.back() == 5);
+
+}
+
+void test_empty_size_max_size(PTREE *)
+{
+
+    PTREE pt;
+    BOOST_CHECK(pt.max_size());
+    BOOST_CHECK(pt.empty());
+    BOOST_CHECK(pt.size() == 0);
+
+    pt.put(T("test1"), 1);
+    BOOST_CHECK(pt.max_size());
+    BOOST_CHECK(!pt.empty());
+    BOOST_CHECK(pt.size() == 1);
+
+    pt.put(T("test2"), 2);
+    BOOST_CHECK(pt.max_size());
+    BOOST_CHECK(!pt.empty());
+    BOOST_CHECK(pt.size() == 2);
+
+}
+
+void test_ptree_bad_path(PTREE *)
+{
+
+    PTREE pt;
+
+    try
+    {
+        pt.get<int>(T("non.existent.path"));
+    }
+    catch (pdalboost::property_tree::ptree_bad_path &e)
+    {
+        PTREE::path_type path = e.path<PTREE::path_type>();
+        std::string what = e.what();
+        BOOST_CHECK(what.find("non.existent.path") != std::string::npos);
+        return;
+    }
+
+    BOOST_ERROR("No required exception thrown");
+
+}
+
+void test_ptree_bad_data(PTREE *)
+{
+
+    PTREE pt;
+    pt.put_value("non convertible to int");
+
+    try
+    {
+        pt.get_value<int>();
+    }
+    catch (pdalboost::property_tree::ptree_bad_data &e)
+    {
+        PTREE::data_type data = e.data<PTREE::data_type>();
+        std::string what = e.what();
+        // FIXME: Bring back what translation or make it more clear that it
+        // doesn't work.
+        //BOOST_CHECK(what.find("non convertible to int") != std::string::npos);
+        return;
+    }
+
+    BOOST_ERROR("No required exception thrown");
+}
+
+void test_serialization(PTREE *)
+{
+
+    // Prepare test tree
+    PTREE pt;
+    pt.put_value(1);
+    pt.put(T("key1"), 3);
+    pt.put(T("key1.key11)"), 3.3);
+    pt.put(T("key1.key12"), T("foo"));
+    pt.put(T("key2"), true);
+    pt.put(T("key2.key21.key211.key2111.key21111"), T("super deep!"));
+    pt.put_child(T("empty"), PTREE());
+    pt.put(T("loooooong"), PTREE::data_type(10000, CHTYPE('a')));
+
+    // Endforce const for input
+    const PTREE &pt1 = pt;
+    
+    // Test text archives
+    {
+        std::stringstream stream;
+        pdalboost::archive::text_oarchive oa(stream);
+        oa & pt1;
+        pdalboost::archive::text_iarchive ia(stream);
+        PTREE pt2;
+        ia & pt2;
+        BOOST_CHECK(pt1 == pt2);
+    }
+    
+    // Test binary archives
+    {
+        std::stringstream stream;
+        pdalboost::archive::binary_oarchive oa(stream);
+        oa & pt1;
+        pdalboost::archive::binary_iarchive ia(stream);
+        PTREE pt2;
+        ia & pt2;
+        BOOST_CHECK(pt1 == pt2);
+    }
+
+    // Test XML archives
+    {
+        std::stringstream stream;
+        pdalboost::archive::xml_oarchive oa(stream);
+        oa & pdalboost::serialization::make_nvp("pt", pt1);
+        pdalboost::archive::xml_iarchive ia(stream);
+        PTREE pt2;
+        ia & pdalboost::serialization::make_nvp("pt", pt2);
+        BOOST_CHECK(pt1 == pt2);
+    }
+
+}
+
+void test_bool(PTREE *)
+{
+
+    // Prepare test tree
+    PTREE pt;
+    pt.put(T("bool.false.1"), false);
+    pt.put(T("bool.false.2"), T("0"));
+    pt.put(T("bool.true.1"), true);
+    pt.put(T("bool.true.2"), 1);
+    pt.put(T("bool.invalid.1"), T(""));
+    pt.put(T("bool.invalid.2"), T("tt"));
+    pt.put(T("bool.invalid.3"), T("ff"));
+    pt.put(T("bool.invalid.4"), T("2"));
+    pt.put(T("bool.invalid.5"), T("-1"));
+
+    // Test false
+    for (PTREE::iterator it = pt.get_child(T("bool.false")).begin(); it != pt.get_child(T("bool.false")).end(); ++it)
+        BOOST_CHECK(it->second.get_value<bool>() == false);
+
+    // Test true
+    for (PTREE::iterator it = pt.get_child(T("bool.true")).begin(); it != pt.get_child(T("bool.true")).end(); ++it)
+        BOOST_CHECK(it->second.get_value<bool>() == true);
+
+    // Test invalid
+    for (PTREE::iterator it = pt.get_child(T("bool.invalid")).begin(); it != pt.get_child(T("bool.invalid")).end(); ++it)
+    {
+        BOOST_CHECK(it->second.get_value<bool>(false) == false);
+        BOOST_CHECK(it->second.get_value<bool>(true) == true);
+    }
+
+}
+
+void test_char(PTREE *)
+{
+    typedef signed char schar;
+    typedef unsigned char uchar;
+
+    // Prepare test tree
+    PTREE pt;
+#if WIDECHAR == 0
+    pt.put(T("char"), char('A'));
+#endif
+    pt.put(T("signed char"), static_cast<schar>('A'));
+    pt.put(T("unsigned char"), static_cast<uchar>('A'));
+    pt.put(T("signed char min"), (std::numeric_limits<schar>::min)());
+    pt.put(T("signed char max"), (std::numeric_limits<schar>::max)());
+    pt.put(T("signed char underflow"),
+           static_cast<int>((std::numeric_limits<schar>::min)()) - 1);
+    pt.put(T("signed char overflow"),
+           static_cast<int>((std::numeric_limits<schar>::max)()) + 1);
+    pt.put(T("unsigned char min"), (std::numeric_limits<uchar>::min)());
+    pt.put(T("unsigned char max"), (std::numeric_limits<uchar>::max)());
+    pt.put(T("unsigned char overflow"),
+           static_cast<unsigned>((std::numeric_limits<uchar>::max)()) + 1);
+
+    // Verify normal conversions
+#if WIDECHAR == 0
+    BOOST_CHECK(pt.get<char>(T("char")) == 'A');
+#endif
+    BOOST_CHECK(pt.get<schar>(T("signed char")) == static_cast<schar>('A'));
+    BOOST_CHECK(pt.get<uchar>(T("unsigned char")) == static_cast<uchar>('A'));
+
+    // Verify that numbers are saved for signed and unsigned char
+    BOOST_CHECK(pt.get<int>(T("signed char")) == int('A'));
+    BOOST_CHECK(pt.get<int>(T("unsigned char")) == int('A'));
+
+    // Verify ranges
+    BOOST_CHECK(pt.get<schar>(T("signed char min")) ==
+        (std::numeric_limits<schar>::min)());
+    BOOST_CHECK(pt.get<schar>(T("signed char max")) ==
+        (std::numeric_limits<schar>::max)());
+    BOOST_CHECK(pt.get<uchar>(T("unsigned char min")) ==
+        (std::numeric_limits<uchar>::min)());
+    BOOST_CHECK(pt.get<uchar>(T("unsigned char max")) ==
+        (std::numeric_limits<uchar>::max)());
+
+    // Check that out-of-range throws.
+    try {
+        pt.get<schar>(T("signed char underflow"));
+        BOOST_ERROR("expected ptree_bad_data, but nothing was thrown");
+    } catch (pdalboost::property_tree::ptree_bad_data&) {
+    } catch (...) {
+        BOOST_ERROR("expected ptree_bad_data, but something else was thrown");
+    }
+    try {
+        pt.get<schar>(T("signed char overflow"));
+        BOOST_ERROR("expected ptree_bad_data, but nothing was thrown");
+    } catch (pdalboost::property_tree::ptree_bad_data&) {
+    } catch (...) {
+        BOOST_ERROR("expected ptree_bad_data, but something else was thrown");
+    }
+    try {
+        pt.get<uchar>(T("unsigned char overflow"));
+        BOOST_ERROR("expected ptree_bad_data, but nothing was thrown");
+    } catch (pdalboost::property_tree::ptree_bad_data&) {
+    } catch (...) {
+        BOOST_ERROR("expected ptree_bad_data, but something else was thrown");
+    }
+}
+
+void test_float(PTREE*)
+{
+    const double difficult = -183.12345000098765e-10;
+    PTREE pt;
+    pt.put(T("num"), difficult);
+    double result = pt.get<double>(T("num"));
+
+    BOOST_CHECK(!(result < difficult || result > difficult));
+}
+
+void test_sort(PTREE *)
+{
+  PTREE pt;
+  pt.put(T("one"), T("v1"));
+  pt.put(T("two"), T("v2"));
+  pt.put(T("three"), T("v3"));
+  pt.put(T("four"), T("v4"));
+
+  pt.sort();
+
+  PTREE::iterator it = pt.begin();
+  BOOST_CHECK(std::distance(it, pt.end()) == 4);
+  BOOST_CHECK(it->first == T("four"));
+  BOOST_CHECK(it->second.data() == T("v4"));
+  ++it;
+  BOOST_CHECK(it->first == T("one"));
+  BOOST_CHECK(it->second.data() == T("v1"));
+  ++it;
+  BOOST_CHECK(it->first == T("three"));
+  BOOST_CHECK(it->second.data() == T("v3"));
+  ++it;
+  BOOST_CHECK(it->first == T("two"));
+  BOOST_CHECK(it->second.data() == T("v2"));
+}
+
+void test_leaks(PTREE *)
+{
+    //BOOST_CHECK(PTREE::debug_get_instances_count() == 0);
+}
diff --git a/vendor/pdalboost/libs/property_tree/test/test_utils.hpp b/vendor/pdalboost/libs/property_tree/test/test_utils.hpp
new file mode 100644
index 0000000..f92e0dd
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/test_utils.hpp
@@ -0,0 +1,252 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2005 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef BOOST_PROPERTY_TREE_TEST_UTILS_INCLUDED
+#define BOOST_PROPERTY_TREE_TEST_UTILS_INCLUDED
+
+#define BOOST_PROPERTY_TREE_DEBUG               // Enable ptree debugging
+#include <boost/property_tree/ptree.hpp>
+
+// Do not deprecate insecure CRT calls on VC8
+#if (defined(BOOST_MSVC) && (BOOST_MSVC >= 1400) && !defined(_CRT_SECURE_NO_DEPRECATE))
+#   define _CRT_SECURE_NO_DEPRECATE
+#endif
+
+#include <boost/test/minimal.hpp>
+#include <boost/property_tree/detail/ptree_utils.hpp>
+#include <fstream>
+#include <cstring>
+#include <sstream>
+
+template<class Ptree>
+typename Ptree::size_type total_size(const Ptree &pt)
+{
+    typename Ptree::size_type size = 1;
+    for (typename Ptree::const_iterator it = pt.begin(); it != pt.end(); ++it)
+        size += total_size(it->second);
+    return size;
+}
+
+template<class Ptree>
+typename Ptree::size_type total_keys_size(const Ptree &pt)
+{
+    typename Ptree::size_type size = 0;
+    for (typename Ptree::const_iterator it = pt.begin(); it != pt.end(); ++it)
+    {
+        size += it->first.size();
+        size += total_keys_size(it->second);
+    }
+    return size;
+}
+
+template<class Ptree>
+typename Ptree::size_type total_data_size(const Ptree &pt)
+{
+    typename Ptree::size_type size = pt.data().size();
+    for (typename Ptree::const_iterator it = pt.begin(); it != pt.end(); ++it)
+        size += total_data_size(it->second);
+    return size;
+}
+
+class test_file
+{
+public:
+    test_file(const char *test_data, const char *filename)
+    {
+        if (test_data && filename)
+        {
+            name = filename;
+            std::ofstream stream(name.c_str());
+            using namespace std;
+            stream.write(test_data, strlen(test_data));
+            BOOST_CHECK(stream.good());
+        }
+    }
+    ~test_file()
+    {
+        if (!name.empty())
+            remove(name.c_str());
+    }
+private:
+    std::string name;
+};
+
+template<class Ptree>
+Ptree get_test_ptree()
+{
+    using namespace pdalboost::property_tree;
+    typedef typename Ptree::key_type Str;
+    Ptree pt;
+    pt.put_value(detail::widen<Str>("data0"));
+    pt.put(detail::widen<Str>("key1"), detail::widen<Str>("data1"));
+    pt.put(detail::widen<Str>("key1.key"), detail::widen<Str>("data2"));
+    pt.put(detail::widen<Str>("key2"), detail::widen<Str>("data3"));
+    pt.put(detail::widen<Str>("key2.key"), detail::widen<Str>("data4"));
+    return pt;
+}
+
+// Generic test for file parser
+template<class Ptree, class ReadFunc, class WriteFunc>
+void generic_parser_test(Ptree &pt,
+                         ReadFunc rf, 
+                         WriteFunc wf,
+                         const char *test_data_1, 
+                         const char *test_data_2, 
+                         const char *filename_1,
+                         const char *filename_2,
+                         const char *filename_out)
+{
+
+    using namespace pdalboost::property_tree;
+
+    // Create test files
+    test_file file_1(test_data_1, filename_1);
+    test_file file_2(test_data_2, filename_2);
+    test_file file_out("", filename_out);
+
+    rf(filename_1, pt);        // Read file
+    wf(filename_out, pt);      // Write file
+    Ptree pt2;
+    rf(filename_out, pt2);     // Read file again
+
+    // Compare original with read
+    BOOST_CHECK(pt == pt2);
+
+}
+
+// Generic test for file parser with expected success
+template<class Ptree, class ReadFunc, class WriteFunc>
+void generic_parser_test_ok(ReadFunc rf, 
+                            WriteFunc wf,
+                            const char *test_data_1, 
+                            const char *test_data_2, 
+                            const char *filename_1,
+                            const char *filename_2,
+                            const char *filename_out,
+                            unsigned int total_size, 
+                            unsigned int total_data_size, 
+                            unsigned int total_keys_size)
+{
+
+    using namespace pdalboost::property_tree;
+
+    std::cerr << "(progress) Starting generic parser test with test file \"" << filename_1 << "\"\n";
+
+    // Make sure no instances exist
+    //BOOST_CHECK(Ptree::debug_get_instances_count() == 0);
+
+    try
+    {
+
+        // Read file
+        Ptree pt;
+        generic_parser_test<Ptree, ReadFunc, WriteFunc>(pt, rf, wf, 
+                                                        test_data_1, test_data_2, 
+                                                        filename_1, filename_2, filename_out);
+
+        // Determine total sizes
+        typename Ptree::size_type actual_total_size = ::total_size(pt);
+        typename Ptree::size_type actual_data_size = ::total_data_size(pt);
+        typename Ptree::size_type actual_keys_size = ::total_keys_size(pt);
+        if (actual_total_size != total_size ||
+            actual_data_size != total_data_size ||
+            actual_keys_size != total_keys_size)
+            std::cerr << "Sizes: " << (unsigned)::total_size(pt) << ", " << (unsigned)::total_data_size(pt) << ", " << (unsigned)::total_keys_size(pt) << "\n";
+
+        // Check total sizes
+        BOOST_CHECK(actual_total_size == total_size);
+        BOOST_CHECK(actual_data_size == total_data_size);
+        BOOST_CHECK(actual_keys_size == total_keys_size);
+
+    }
+    catch (std::runtime_error &e)
+    {
+        BOOST_ERROR(e.what());
+    }
+
+    // Test for leaks
+    //BOOST_CHECK(Ptree::debug_get_instances_count() == 0);
+
+}
+
+// Generic test for file parser with expected error
+template<class Ptree, class ReadFunc, class WriteFunc, class Error>
+void generic_parser_test_error(ReadFunc rf, 
+                               WriteFunc wf,
+                               const char *test_data_1, 
+                               const char *test_data_2, 
+                               const char *filename_1,
+                               const char *filename_2,
+                               const char *filename_out,
+                               unsigned long expected_error_line)
+{
+
+    std::cerr << "(progress) Starting generic parser test with test file \"" << filename_1 << "\"\n";
+    
+    // Make sure no instances exist
+    //BOOST_CHECK(Ptree::debug_get_instances_count() == 0);
+
+    {
+
+        // Create ptree as a copy of test ptree (to test if read failure does not damage ptree)
+        Ptree pt(get_test_ptree<Ptree>());
+        try
+        {
+            generic_parser_test<Ptree, ReadFunc, WriteFunc>(pt, rf, wf,
+                                                            test_data_1, test_data_2,
+                                                            filename_1, filename_2, filename_out);
+            BOOST_ERROR("No required exception thrown");
+        }
+        catch (Error &e)
+        {
+            BOOST_CHECK(e.line() == expected_error_line);           // Test line number
+            BOOST_CHECK(pt == get_test_ptree<Ptree>());             // Test if error damaged contents
+        }
+        catch (...)
+        {
+            BOOST_ERROR("Invalid exception type thrown");
+            throw;
+        }
+
+    }
+
+    // Test for leaks
+    //BOOST_CHECK(Ptree::debug_get_instances_count() == 0);
+
+}
+
+template <typename Ch> std::basic_ostream<Ch>& errstream();
+template <> inline
+std::basic_ostream<char>& errstream() { return std::cerr; }
+#ifndef BOOST_NO_CWCHAR
+template <> inline
+std::basic_ostream<wchar_t>& errstream() { return std::wcerr; }
+#endif
+
+template <class Ptree, class ReadFunc, class WriteFunc>
+void check_exact_roundtrip(ReadFunc rf, WriteFunc wf, const char *test_data) {
+    std::cerr << "(progress) Starting exact roundtrip test with test data:\n"
+              << test_data << "\n-----\n";
+    using namespace pdalboost::property_tree;
+    typedef typename Ptree::key_type::value_type Ch;
+    typedef typename Ptree::key_type Str;
+    Str native_test_data = detail::widen<Str>(test_data);
+
+    std::basic_istringstream<Ch> in_stream(native_test_data);
+    std::basic_ostringstream<Ch> out_stream;
+    Ptree tree;
+    rf(in_stream, tree);
+    wf(out_stream, tree);
+    std::cerr << "(progress) Roundtripped data:\n";
+    errstream<Ch>() << out_stream.str();
+    std::cerr << "\n-----\n";
+    BOOST_CHECK(native_test_data == out_stream.str());
+}
+
+#endif
diff --git a/vendor/pdalboost/libs/property_tree/test/test_xml_parser_common.hpp b/vendor/pdalboost/libs/property_tree/test/test_xml_parser_common.hpp
new file mode 100644
index 0000000..89ab5e4
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/test_xml_parser_common.hpp
@@ -0,0 +1,150 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+#ifndef TEST_XML_PARSER_COMMON_HPP_INCLUDED
+#define TEST_XML_PARSER_COMMON_HPP_INCLUDED
+
+#include "test_utils.hpp"
+#include <boost/property_tree/xml_parser.hpp>
+#include "xml_parser_test_data.hpp"
+
+struct ReadFuncWS
+{
+    template<class Ptree>
+    void operator()(const std::string &filename, Ptree &pt) const
+    {
+        pdalboost::property_tree::read_xml(filename, pt,
+          pdalboost::property_tree::xml_parser::no_concat_text);
+    }
+};
+
+struct WriteFuncWS
+{
+    template<class Ptree>
+    void operator()(const std::string &filename, const Ptree &pt) const
+    {
+        pdalboost::property_tree::write_xml(filename, pt);
+    }
+};
+
+struct ReadFuncNS
+{
+    template<class Ptree>
+    void operator()(const std::string &filename, Ptree &pt) const
+    {
+        pdalboost::property_tree::read_xml(filename, pt,
+          pdalboost::property_tree::xml_parser::trim_whitespace);
+    }
+};
+
+struct WriteFuncNS
+{
+    template<class Ptree>
+    void operator()(const std::string &filename, const Ptree &pt) const
+    {
+        pdalboost::property_tree::write_xml(filename, pt, std::locale(),
+            pdalboost::property_tree::xml_writer_make_settings<typename Ptree::key_type>(' ', 4));
+    }
+};
+
+template <typename Ch> int umlautsize();
+template <> inline int umlautsize<char>() { return 2; }
+template <> inline int umlautsize<wchar_t>() { return 1; }
+
+template<class Ptree>
+void test_xml_parser()
+{
+
+    using namespace pdalboost::property_tree;
+    typedef typename Ptree::data_type::value_type char_type;
+
+    generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS>
+    (
+        ReadFuncWS(), WriteFuncWS(), ok_data_1, NULL, 
+        "testok1.xml", NULL, "testok1out.xml", 2, 0, 5
+    );
+
+    generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS>
+    (
+        ReadFuncWS(), WriteFuncWS(), ok_data_2, NULL, 
+        "testok2a.xml", NULL, "testok2aout.xml", 15, 23, 89
+    );
+
+    generic_parser_test_ok<Ptree, ReadFuncNS, WriteFuncNS>
+    (
+        ReadFuncNS(), WriteFuncNS(), ok_data_2, NULL, 
+        "testok2b.xml", NULL, "testok2bout.xml", 6, 15, 8
+    );
+
+    generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS>
+    (
+        ReadFuncWS(), WriteFuncWS(), ok_data_3, NULL, 
+        "testok3a.xml", NULL, "testok3aout.xml", 1662, 35377, 11706
+    );
+
+    generic_parser_test_ok<Ptree, ReadFuncNS, WriteFuncNS>
+    (
+        ReadFuncNS(), WriteFuncNS(), ok_data_3, NULL, 
+        "testok3b.xml", NULL, "testok3bout.xml", 787, 31376, 3831
+    );
+
+    generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS>
+    (
+        ReadFuncWS(), WriteFuncWS(), ok_data_4, NULL, 
+        "testok4.xml", NULL, "testok4out.xml", 11, 7, 74
+    );
+
+    generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS>
+    (
+        ReadFuncWS(), WriteFuncWS(), ok_data_5, NULL, 
+        "testok5.xml", NULL, "testok5out.xml",
+        3, umlautsize<char_type>(), 12
+    );
+
+    generic_parser_test_error<Ptree, ReadFuncWS, WriteFuncWS, xml_parser_error>
+    (
+        ReadFuncWS(), WriteFuncWS(), error_data_1, NULL,
+        "testerr1.xml", NULL, "testerr1out.xml", 1
+    );
+
+    generic_parser_test_error<Ptree, ReadFuncWS, WriteFuncWS, xml_parser_error>
+    (
+        ReadFuncWS(), WriteFuncWS(), error_data_2, NULL,
+        "testerr2.xml", NULL, "testerr2out.xml", 2
+    );
+
+    generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS>
+    (
+        ReadFuncWS(), WriteFuncWS(), bug_data_pr2855, NULL,
+        "testpr2855.xml", NULL, "testpr2855out.xml", 3, 7, 14
+    );
+    
+    generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS>
+    (
+        ReadFuncWS(), WriteFuncWS(), bug_data_pr1678, NULL,
+        "testpr1678.xml", NULL, "testpr1678out.xml", 2, 0, 4
+    );
+
+    generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS>
+    (
+        ReadFuncWS(), WriteFuncWS(), bug_data_pr5203, NULL,
+        "testpr5203.xml", NULL, "testpr5203out.xml",
+        3, 4 * umlautsize<char_type>(), 13
+    );
+
+    generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS>
+    (
+        ReadFuncWS(), WriteFuncWS(), bug_data_pr4840, NULL,
+        "testpr4840.xml", NULL, "testpr4840out.xml",
+        4, 13, 15
+    );
+
+}
+
+#endif
diff --git a/vendor/pdalboost/libs/property_tree/test/test_xml_parser_rapidxml.cpp b/vendor/pdalboost/libs/property_tree/test/test_xml_parser_rapidxml.cpp
new file mode 100644
index 0000000..4b32c18
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/test_xml_parser_rapidxml.cpp
@@ -0,0 +1,34 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2009-2010 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+#include "test_xml_parser_common.hpp"
+#include <locale>
+#define BOOST_UTF8_BEGIN_NAMESPACE namespace pdalboost { namespace property_tree {
+#define BOOST_UTF8_END_NAMESPACE }}
+#define BOOST_UTF8_DECL
+#include <boost/detail/utf8_codecvt_facet.hpp>
+#include <boost/detail/utf8_codecvt_facet.ipp>
+
+int test_main(int argc, char *argv[])
+{
+    using namespace pdalboost::property_tree;
+    test_xml_parser<ptree>();
+    test_xml_parser<iptree>();
+#ifndef BOOST_NO_CWCHAR
+    using std::locale;
+    // We need a UTF-8-aware global locale now.
+    locale loc(locale(), new utf8_codecvt_facet);
+    locale::global(loc);
+    test_xml_parser<wptree>();
+    test_xml_parser<wiptree>();
+#endif
+    return 0;
+}
diff --git a/vendor/pdalboost/libs/property_tree/test/xml_parser_test_data.hpp b/vendor/pdalboost/libs/property_tree/test/xml_parser_test_data.hpp
new file mode 100644
index 0000000..d0b4c07
--- /dev/null
+++ b/vendor/pdalboost/libs/property_tree/test/xml_parser_test_data.hpp
@@ -0,0 +1,777 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2009 Sebastian Redl
+//
+// Distributed under the Boost Software License, Version 1.0. 
+// (See accompanying file LICENSE_1_0.txt or copy at 
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// For more information, see www.boost.org
+// ----------------------------------------------------------------------------
+
+#ifndef XML_PARSER_TEST_DATA_HPP_INCLUDED
+#define XML_PARSER_TEST_DATA_HPP_INCLUDED
+
+///////////////////////////////////////////////////////////////////////////////
+// Test data
+
+// Correct
+const char *ok_data_1 = 
+    "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+    "<start/>";
+
+// Correct
+const char *ok_data_2 = 
+    "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+    "<root>\n"
+    "<a><>&</a>\n"
+    "<b>1<2>3&4</b>\n"
+    "<c> < > & </c>\n"
+    "<d> </d>\n"
+    "</root>\n";
+
+// Correct
+const char *ok_data_3 =
+    "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+    "<!DOCTYPE spec PUBLIC \"-//W3C//DTD Specification::19990205//EN\" \"dtds/xmlspec.dtd\" [\n"
+    "<!ENTITY doc-type \"WD\">\n"
+    "<!ENTITY iso6.doc.date '29-May-1999'>\n"
+    "]>\n"
+    "<!--ArborText, Inc., 1988-1998, v.4002-->\n"
+    "<?Pub UDT _bookmark _target?>\n"
+    "<?Pub Inc?>\n"
+    "<?xml-stylesheet\n"
+    "href=\"file:///C|/Program%20Files/SoftQuad/XMetaL%201/display/xmlspec.css\"\n"
+    "type=\"text/css\"?>\n"
+    "<spec>\n"
+    "\n"
+    "<!-- Last edited: 27 May 1999 by bent -->\n"
+    "<header><?Pub Dtl?>\n"
+    "\t<title><![CDATA[XML Linking Language (XLink)]]></title>\n"
+    "\t<version>Version 1.0</version>\n"
+    "\t<w3c-designation>WD-xlink-19990527</w3c-designation>\n"
+    "\t<w3c-doctype>World Wide Web Consortium Working Draft</w3c-doctype>\n"
+    "\t<pubdate><day>29</day><month>May</month><year>1999</year></pubdate>\n"
+    "\t<notice>\n"
+    "\t<p>This draft is for public discussion.</p>\n"
+    "\t</notice>\n"
+    "\t<publoc><loc href=\"http://www.w3.org/XML/Group/1999/05/WD-xlink-current\">http://www.w3.org/XML/Group/1999/05/WD-xlink-current</loc></publoc>\n"
+    "\t<prevlocs>\n"
+    "\t<!--Check: was it actually August?-->\n"
+    "\t<loc href=\"http://www.w3.org/XML/Group/1999/05/WD-xlink-19990527\">http://www.w3.org/XML/Group/1999/05/WD-xlink-19990527</loc>\n"
+    "\t<loc href=\"http://www.w3.org/XML/Group/1999/05/WD-xlink-19990505\">http://www.w3.org/XML/Group/1999/05/WD-xlink-19990505</loc>\n"
+    "\t<loc href=\"http://www.w3.org/TR/1998/WD-xlink-19980303\">http://www.w3.org/TR/1998/WD-xlink-19980303</loc>\n"
+    "\t<loc href=\"http://www.w3.org/TR/WD-xml-link-970630\">http://www.w3.org/TR/WD-xml-link-970630</loc></prevlocs>\n"
+    "\n"
+    "   <authlist>\n"
+    "       <!--Updated author hrefs  dorchard-->\n"
+    "       <!-- Update Steve's email - bent --> \n"
+    "       <author>\n"
+    "           <name>Steve DeRose</name>\n"
+    "           <affiliation>Inso Corp. and Brown University</affiliation>\n"
+    "           <email href=\"mailto:Steven_DeRose at Brown.edu\">Steven_DeRose at Brown.edu</email>\n"
+    "       </author>\n"
+    "       <author>\n"
+    "           <name>David Orchard</name>\n"
+    "           <affiliation>IBM Corp.</affiliation>\n"
+    "           <email href=\"mailto:dorchard at ca.ibm.com\">dorchard at ca.ibm.com</email>\n"
+    "       </author>\n"
+    "       <author>\n"
+    "           <name>Ben Trafford</name>\n"
+    "           <affiliation>Invited Expert</affiliation>\n"
+    "           <email href=\"mailto:bent at exemplary.net\">bent at exemplary.net</email>\n"
+    "       </author>\n"
+    "       <!-- I suggest we move Eve and Tim down to the Acknowledgements section. We\n"
+    "       also ought to add Gabe Beged-Dov there, as well. bent\n"
+    "       how shall we cite Tim? sjd What about with an Acknowledgments section?\n"
+    "       -elm <AUTHOR> <NAME>Tim Bray</NAME> <AFFILIATION>Textuality</AFFILIATION>\n"
+    "       <EMAIL>tbray at textuality.com</EMAIL> </AUTHOR>-->\n"
+    "   </authlist>\n"
+    "\n"
+    "   <status>\n"
+    "       <p>This is a W3C Working Draft for review by W3C members and other interested parties. It is a draft document and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use W3C Working Drafts as reference material or to cite them as other than \"work in progress\". A list of current W3C working drafts can be found at <loc href=\"http://www.w3.org/TR\">http://www.w3.org/TR</loc>.</p>\n"
+    "       <p><emph>Note:</emph> Since working drafts are subject to frequent change, you are advised to reference the above URI, rather than the URIs for working drafts themselves. Some of the work remaining is described in <specref ref=\"unfinished\"/>. </p>\n"
+    "       <p>This work is part of the W3C XML Activity (for current status, see <loc href=\"http://www.w3.org/MarkUp/SGML/Activity\">http://www.w3.org/XML/Activity         </loc>). For information about the XPointer language which is expected to be used with XLink, see <loc href=\"http://www.w3.org/MarkUp/SGML/Activity\">http://www.w3.org/TR/WD-xptr</loc>.\n"
+    "       </p>\n"
+    "       <p>See <loc href=\"http://www.w3.org/TR/NOTE-xlink-principles\">http://www.w3.org/TR/NOTE-xlink-principles </loc> for additional background on the design principles informing XLink.</p>\n"
+    "       <p>Also see <loc href=\"http://www.w3.org/TR/NOTE-xlink-req/\">http://www.w3.org/TR/NOTE-xlink-req/</loc> for the XLink requirements that this document attempts to satisfy.</p>\n"
+    "   </status>\n"
+    "\n"
+    "   <abstract>\n"
+    "       <!-- edited the abstract for further clarity - bent -->\n"
+    "       <p>This specification defines constructs that may be inserted into XML DTDs, schemas and document instances to describe links between objects. It uses XML syntax to create structures that can describe the simple unidirectional hyperlinks of today's HTML as well as more sophisticated links.</p>\n"
+    "   </abstract>\n"
+    "\n"
+    "   <pubstmt>\n"
+    "       <p>Burlington, Seekonk, et al.: World-Wide Web Consortium, XML Working Group, 1998.</p>\n"
+    "   </pubstmt>\n"
+    "\n"
+    "   <sourcedesc>\n"
+    "       <p>Created in electronic form.</p>\n"
+    "   </sourcedesc>\n"
+    "\n"
+    "   <langusage>\n"
+    "       <language id=\"en\">English</language>\n"
+    "       <language id=\"ebnf\">Extended Backus-Naur Form (formal grammar)</language>\n"
+    "   </langusage>\n"
+    "\n"
+    "   <revisiondesc>\n"
+    "       <slist>\n"
+    "           <sitem>1997-01-15 : Skeleton draft by TB</sitem>\n"
+    "           <sitem>1997-01-24 : Fleshed out by sjd</sitem>\n"
+    "           <sitem>1997-04-08 : Substantive draft</sitem>\n"
+    "           <sitem>1997-06-30 : Public draft</sitem>\n"
+    "           <sitem>1997-08-01 : Public draft</sitem>\n"
+    "           <sitem>1997-08-05 : Prose/organization work by sjd</sitem>\n"
+    "           <sitem>1997-10-14: Conformance and design principles; a bit of cleanup by elm</sitem>\n"
+    "           <sitem>1997-11-07: Update for editorial issues per issues doc, by sjd.</sitem>\n"
+    "           <sitem>1997-12-01: Update for editorial issues per issues doc in preparation for F2F meeting, by sjd.</sitem>\n"
+    "           <sitem>1998-01-13: Editorial cleanup, addition of new design principles, by elm.</sitem>\n"
+    "           <sitem>1998-02-27: Splitting out of XLink and XPointer, by elm.</sitem>\n"
+    "           <sitem>1998-03-03: Moved most of the XPointer locator stuff here. elm</sitem>\n"
+    "           <sitem>1999-04-24: Editorial rewrites to represent new ideas on XLink, especially the inclusion of arcs. bent</sitem>\n"
+    "           <sitem>1999-05-05: Prose/organization work by dorchard. Moved much of the semantics section around, from: locators, link semantics, remote resource semantics, local resource semantics; to: resource semantics, locators, behavior semantics, link semantics, arc semantics</sitem>\n"
+    "           <sitem>1999-05-12: Prose/organization work. Re-organized some of the sections, removed XML constructs from the document, added descriptive prose, edited document text for clarity. Rewrote the link recognition section. bent</sitem>\n"
+    "           <sitem>1999-05-17: Further prose work. Added non-normative examples. Clarified arcs. bent</sitem>\n"
+    "           <sitem>1999-05-23: Edited for grammar and clarity. bent</sitem>\n"
+    "           <sitem>1999-05-27: Final once-over before sending to group. Fixed sjd's email address. bent</sitem>\n"
+    "       </slist>\n"
+    "   </revisiondesc>\n"
+    "</header>\n"
+    "\n"
+    "<body>\n"
+    "   <div1><?Pub Dtl?>\n"
+    "       <head>Introduction</head>\n"
+    "       <p>This specification defines constructs that may be inserted into XML DTDs, schemas, and document instances to describe links between objects. A <termref def=\"dt-link\">link</termref>, as the term is used here, is an explicit relationship between two or more data objects or portions of data objects. This specification is concerned with the syntax used to assert link existence and describe link characteristics. Implicit (unasserted) relationships, for example that of one wor [...]
+    "       <p>Links are asserted by <xtermref href=\"WD-xml-lang.html#dt-element\">elements </xtermref> contained in <xtermref href=\"WD-xml-lang.html#dt-xml-doc\">XML document instances</xtermref>. The simplest case is very like an HTML <code>A</code> link, and has these characteristics:\n"
+    "           <ulist>\n"
+    "               <item><p>The link is expressed at one of its ends (similar to the <code>A</code> element in some document)</p></item>\n"
+    "               <item><p>Users can only initiate travel from that end to the other</p></item>\n"
+    "               <item><p>The link's effect on windows, frames, go-back lists, stylesheets in use, and so on is mainly determined by browsers, not by the link itself. For example, traveral of <code>A</code> links normally replaces the current view, perhaps with a user option to open a new window.</p></item>\n"
+    "               <item><p>The link goes to only one destination (although a server may have great freedom in finding or dynamically creating that destination).</p></item>\n"
+    "           </ulist>\n"
+    "       </p>\n"
+    "       <p>While this set of characteristics is already very powerful and obviously has proven itself highly useful and effective, each of these assumptions also limits the range of hypertext functionality. The linking model defined here provides ways to create links that go beyond each of these specific characteristics, thus providing features previously available mostly in dedicated hypermedia systems.\n"
+    "       </p>\n"
+    "\n"
+    "<div2>\n"
+    "   <head>Origin and Goals</head>\n"
+    "   <p>Following is a summary of the design principles governing XLink:\n"
+    "       <olist>\n"
+    "           <item><p>XLink must be straightforwardly usable over the Internet. </p></item>\n"
+    "           <item><p>XLink must be usable by a wide variety of link usage domains and classes of linking application software.</p></item>\n"
+    "           <item><p>XLink must support HTML 4.0 linking constructs.</p></item>\n"
+    "           <item><p>The XLink expression language must be XML.</p></item>\n"
+    "           <item><p>The XLink design must be formal, concise, and illustrative.</p></item>\n"
+    "           <item><p>XLinks must be human-readable and human-writable.</p></item>\n"
+    "           <item><p>XLinks may reside within or outside the documents in which the\n"
+    "           participating resources reside. </p></item>\n"
+    "           <item><p>XLink must represent the abstract structure and significance of links.</p></item>\n"
+    "           <item><p>XLink must be feasible to implement.</p></item>\n"
+    "           <item><p>XLink must be informed by knowledge of established hypermedia systems and standards.</p></item>\n"
+    "       </olist>\n"
+    "   </p>\n"
+    "</div2>\n"
+    "<!--Changed the list of requirements to reflect current XLink requirements\n"
+    "document. bent-->\n"
+    "\n"
+    "<div2>\n"
+    "   <head>Relationship to Existing Standards</head>\n"
+    "   <p>Three standards have been especially influential:\n"
+    "       <ulist>\n"
+    "           <item><p><emph>HTML:</emph> Defines several SGML element types that represent links.</p></item>\n"
+    "           <item><p><emph>HyTime:</emph> Defines inline and out-of-line link structures and some semantic features, including traversal control and presentation of objects. <!--Changed from \"placement of objects into a display or other space\" -elm-->\n"
+    "           </p></item>\n"
+    "           <item><p><emph>Text Encoding Initiative Guidelines (TEI P3):</emph> Provides structures for creating links, aggregate objects, and link collections out of them.</p></item>\n"
+    "       </ulist>\n"
+    "   </p>\n"
+    "   <p>Many other linking systems have also informed this design, especially Dexter, FRESS, MicroCosm, and InterMedia.</p>\n"
+    "</div2>\n"
+    "\n"
+    "<div2>\n"
+    "   <head>Terminology</head>\n"
+    "   <p>The following basic terms apply in this document. <!--<IMG\n"
+    "   SRC=\"local://./linkdiag.gif\">(figure to be inserted)-->\n"
+    "       <glist>\n"
+    "           <gitem>\n"
+    "           <label><termdef id=\"dt-arc\" term=\"Arc\">arc</termdef></label>\n"
+    "           <def><p>A symbolic representation of traversal behavior in links, especially the direction, context and timing of traversal.</p></def>\n"
+    "           </gitem>\n"
+    "           <gitem>\n"
+    "               <label><termdef id=\"dt-eltree\" term=\"Element Tree\">element tree</termdef></label>\n"
+    "               <def><p>A representation of the relevant structure specified by the tags and attributes in an XML document, based on \"groves\" as defined in the ISO DSSSL standard. </p></def>\n"
+    "           </gitem>\n"
+    "           <gitem>\n"
+    "               <label><termdef id=\"dt-inline\" term=\"In-Line Link\">inline link</termdef></label>\n"
+    "               <def><p>Abstractly, a <termref def=\"dt-link\">link</termref> which serves as one of its own <termref def=\"dt-resource\">resources</termref>. Concretely, a link where the content of the <termref def=\"dt-linkel\">linking   element</termref> serves as a <termref def=\"dt-particip-resource\">participating resource</termref>.\n"
+    "               HTML <code>A</code>, HyTime <code>clink</code>, and TEI <code>XREF</code>\n"
+    "               are all inline links.</p></def>\n"
+    "           </gitem>\n"
+    "           <gitem>\n"
+    "               <label><termdef id=\"dt-link\" term=\"Link\">link</termdef></label>\n"
+    "               <def><p>An explicit relationship between two or more data objects or portions of data objects.</p></def>\n"
+    "           </gitem>\n"
+    "           <gitem>\n"
+    "               <label><termdef id=\"dt-linkel\" term=\"Linking Element\">linking element </termdef></label>\n"
+    "               <def><p>An <xtermref href=\"WD-xml-lang.html#dt-element\">element</xtermref> that asserts the existence and describes the characteristics of a <termref def=\"dt-link\"> link</termref>.</p></def>\n"
+    "           </gitem>\n"
+    "           <gitem>\n"
+    "               <label><termdef id=\"dt-local-resource\" term=\"Local Resource\">local resource</termdef></label>\n"
+    "               <def><p>The content of an <termref def=\"dt-inline\">inline</termref>linking element. Note that the content of the linking element could be explicitly pointed to by means of a regular <termref def=\"dt-locator\">locator</termref> in the same linking element, in which case the resource is considered <termref def=\"dt-remote-resource\"> remote</termref>, not local.</p></def>\n"
+    "           </gitem>\n"
+    "           <gitem>\n"
+    "               <label><termdef id=\"dt-locator\" term=\"Locator\">locator</termdef> </label>\n"
+    "               <def><p>Data, provided as part of a link, which identifies a\n"
+    "               <termref def=\"dt-resource\">resource</termref>.</p></def>\n"
+    "           </gitem>\n"
+    "           <gitem>\n"
+    "               <label><termdef id=\"dt-multidir\" term=\"Multi-Directional Link\">multidirectional link</termdef></label>\n"
+    "               <def><p>A <termref def=\"dt-link\">link</termref> whose <termref def=\"dt-traversal\"> traversal</termref> can be initiated from more than one of its <termref  def=\"dt-particip-resource\"> participating resources</termref>. Note that being able to \"go back\" after following a one-directional link does not make the link multidirectional.</p></def>\n"
+    "           </gitem>\n"
+    "           <gitem>\n"
+    "               <label><termdef id=\"dt-outofline\" term=\"Out-of-line Link\">out-of-line link</termdef></label>\n"
+    "               <def><p>A <termref def=\"dt-link\">link</termref> whose content does not serve as one of the link's <termref def=\"dt-particip-resource\">participating resources </termref>. Such links                        presuppose a notion like <termref def=\"dt-xlg\">extended link groups</termref>, which instruct application software where to look for links. Out-of-line links are generally required for supporting multidirectional <termref def=\"dt-traversal\">traversal</termref> [...]
+    "           </gitem>\n"
+    "           <gitem>\n"
+    "               <label><termdef id=\"dt-parsedq\" term=\"Parsed\">parsed</termdef></label> <def><p>In the context of link behavior, a parsed link is any link           whose content is transcluded into the document where the link originated. The   use of the term \"parsed\" directly refers to the concept in XML of a\n"
+    "               parsed entity.</p></def>\n"
+    "           </gitem>\n"
+    "           <gitem>\n"
+    "               <label><termdef id=\"dt-particip-resource\" term=\"Participating Resource\"> participating resource</termdef></label>\n"
+    "               <def><p>A <termref def=\"dt-resource\">resource</termref> that belongs to a link. All resources are potential contributors to a link; participating resources are the actual contributors to a particular link.</p></def>\n"
+    "           </gitem>\n"
+    "           <gitem>\n"
+    "               <label><termdef id=\"dt-remote-resource\" term=\"Remote Resource\">remote resource</termdef></label>\n"
+    "               <def><p>Any participating resource of a link that is pointed to with a locator. </p></def>\n"
+    "           </gitem>\n"
+    "           <gitem>\n"
+    "               <label><termdef id=\"dt-resource\" term=\"Resource\">resource</termdef></label>\n"
+    "               <def><p>In the abstract sense, an addressable unit of information or service that is participating in a <termref def=\"dt-link\">link</termref>. Examples include files, images, documents, programs, and query results. Concretely, anything reachable by the use of a <termref def=\"dt-locator\">locator</termref> in some <termref def=\"dt-linkel\">linking    element</termref>. Note that this term and its definition are taken from the basic specifications governing the Worl [...]
+    "                </p></def>\n"
+    "           </gitem>\n"
+    "           <gitem>\n"
+    "               <label><termdef id=\"dt-subresource\" term=\"sub-Resource\">sub-resource</termdef></label>\n"
+    "               <def><p>A portion of a resource, pointed to as the precise  destination of a link. As one example, a link might specify that an entire  document be retrieved and displayed, but that some specific part(s) of it is the specific linked data, to be treated in an application-appropriate manner such as indication by highlighting, scrolling, etc.</p></def>\n"
+    "           </gitem>\n"
+    "           <gitem>\n"
+    "               <label><termdef id=\"dt-traversal\" term=\"Traversal\">traversal</termdef></label>\n"
+    "               <def><p>The action of using a <termref def=\"dt-link\">link</termref>; that is, of accessing a <termref def=\"dt-resource\">resource</termref>. Traversal may be initiated by a user action (for example, clicking on the displayed content of a <termref def=\"dt-linkel\">linking element</termref>) or occur under program control.</p></def>\n"
+    "           </gitem>\n"
+    "       </glist>\n"
+    "   </p>\n"
+    "</div2>\n"
+    "\n"
+    "<div2>\n"
+    "   <head>Notation</head>\n"
+    "   <p>The formal grammar for <termref def=\"dt-locator\">locators</termref> is given using a simple Extended Backus-Naur Form (EBNF) location, as described in <xspecref href=\"http://www.w3.org/TR/REC-xml#sec-notation\">the XML specification</xspecref>.</p>\n"
+    "   <!-- fixed link to XML spec - bent -->\n"
+    "</div2>\n"
+    "</div1>\n"
+    "\n"
+    "<div1 id=\"addressing\"><?Pub Dtl?>\n"
+    "   <head>Locator Syntax</head>\n"
+    "   <p>The locator for a <termref def=\"dt-resource\">resource</termref> is typically provided by means of a Uniform Resource Identifier, or URI. XPointers can be used in conjunction with the URI structure, as fragment identifiers, to specify a more precise sub-resource. </p>\n"
+    "   <!-- Removed the discussion of queries from the previous paragraph, due to contention within the WG. bent -->\n"
+    "   <p>A locator generally contains a URI, as described in IETF RFCs <bibref ref=\"rfc1738\"/> and <bibref ref=\"rfc1808\"/>. As these RFCs state, the URI may include a trailing <emph>query</emph> (marked by a leading \"<code>?</code>\"), and be followed by a \"<code>#</code>\" and a <emph>fragment identifier</emph>, with the query interpreted by the host providing the indicated resource, and the interpretation of the fragment identifier dependent on the data type of the indicated re [...]
+    "   <!--Is there some restriction on URNs having queries and/or fragment identifiers?  Since these RFCs don't mention URIs explicitly, should the wording here lead from URLs to URIs more explicitly? -elm-->\n"
+    "   <p>In order to locate XML documents and portions of documents, a locator value may contain either a <xtermref href=\"http://www.w3.org/Addressing/rfc1738.txt\"> URI</xtermref> or a fragment identifier, or both. Any fragment identifier for pointing into XML must be an <xtermref href=\"http://www.w3.org/TR/WD-xptr#dt-xpointer\"> XPointer</xtermref>.</p>\n"
+    "   <p>Special syntax may be used to request the use of particular processing models in accessing the locator's resource. This is designed to reflect the realities of network operation, where it may or may not be desirable to exercise fine control over the distribution of work between local and remote processors. \n"
+    "       <scrap id=\"locator\" lang=\"ebnf\">\n"
+    "           <head>Locator</head>\n"
+    "           <prod id=\"nt-locator\">\n"
+    "               <lhs>Locator</lhs>\n"
+    "               <rhs><nt def=\"nt-uri\">URI</nt></rhs>\n"
+    "               <rhs>| <nt def=\"nt-connector\">Connector</nt> (<xnt href=\"http://www.w3.org/TR/WD-xptr\">XPointer</xnt> | <xnt href=\"WD-xml-lang.html#NT-Name\">Name</xnt>)</rhs>\n"
+    "               <rhs>| <nt def=\"nt-uri\">URI</nt> <nt def=\"nt-connector\">Connector</nt> (<xnt href=\"http://www.w3.org/TR/WD-xptr\">XPointer</xnt> | <xnt href=\"WD-xml-lang.html#NT-Name\">Name</xnt>)</rhs>\n"
+    "           </prod>\n"
+    "           <prod id=\"nt-connector\">\n"
+    "               <lhs>Connector</lhs><rhs>'#' | '|'</rhs>\n"
+    "           </prod>\n"
+    "           <prod id=\"nt-uri\">\n"
+    "               <lhs>URI</lhs><rhs><xnt href=\"WD-xml-lang.html#NT-URLchar\">URIchar*</xnt></rhs>\n"
+    "           </prod>\n"
+    "       </scrap>\n"
+    "   </p>\n"
+    "   <p><termdef id=\"dt-designated\" term=\"Designated Resource\">In this discussion, the term <term>designated resource</term> refers to the resource which an entire locator serves to locate.</termdef> The following rules apply:\n"
+    "       <ulist>\n"
+    "           <item>\n"
+    "               <p><termdef id=\"dt-containing-resource\" term=\"Containing Resource\">       The URI, if provided, locates a resource called the <term>containing resource</term>.</termdef></p>\n"
+    "           </item>\n"
+    "           <item>\n"
+    "               <p>If the URI is not provided, the containing resource is considered to be the document in which the linking element is contained. \n"
+    "               </p></item>\n"
+    "           <item>\n"
+    "               <p><termdef id=\"dt-sub-resource\" term=\"Sub-Resource\">If an XPointer               is provided, the designated resource is a <term>sub-resource</term>\n"
+    "               of the containing resource; otherwise the designated resource is the\n"
+    "               containing resource.</termdef></p>\n"
+    "           </item>\n"
+    "           <!--Is this now incorrect, given the nature of the switch from here() to origin()? -elm \n"
+    "           Oy, yes, i think so. it will require some fun wording, though, so i haven't fixed it yet here -sjd-->\n"
+    "           <item>\n"
+    "               <p>If the <nt def=\"nt-connector\">Connector</nt> is followed directly by a <xnt href=\"http://www.w3.org/TR/REC-xml#NT-Name\">Name</xnt>, the <xnt href=\"http://www.w3.org/TR/REC-xml#NT-Name\">Name</xnt> is shorthand for the XPointer\"<code>id(Name)</code>\"; that is, the sub-resource is the element in the containing resource that has an XML <xtermref href=\"http://www.w3.org/TR/REC-xml#sec-attrtypes\">ID attribute</xtermref> whose value <xtermref href=\"http://www.w [...]
+    "           </item>\n"
+    "           <!-- fixed links to the XML recommendation - bent -->\n"
+    "           <item>\n"
+    "               <p>If the connector is \"<code>#</code>\", this signals an intent that the containing resource is to be fetched as a whole from the host that provides it, and that the XPointer processing to extract the sub-resource\n"
+    "               is to be performed on the client, that is to say on the same system where the linking element is recognized and processed.</p>\n"
+    "           </item>\n"
+    "           <item>\n"
+    "               <p>If the connector is \"<code>|</code>\", no intent is signaled as to what processing model is to be used to go about accessing the designated resource.</p>\n"
+    "           </item>\n"
+    "       </ulist>\n"
+    "   </p>\n"
+    "   <p>Note that the definition of a URI includes an optional query component. </p>\n"
+    "   <p>In the case where the URI contains a query (to be interpreted by the server), information providers and authors of server software are urged to use queries as follows: \n"
+    "       <scrap id=\"querysyntax\" lang=\"ebnf\">\n"
+    "           <head>Query</head>\n"
+    "           <prod id=\"nt-query\">\n"
+    "               <lhs>Query</lhs><rhs>'XML-XPTR=' (<xnt href=\"http://www.w3.org/TR/WD-xptr\"> XPointer</xnt> | <xnt href=\"http://www.w3.org/TR/REC-xml#NT-Name\">Name</xnt>)</rhs>\n"
+    "           </prod>\n"
+    "       </scrap>\n"
+    "   </p>\n"
+    "   <!-- fixed link to XML recommendation - bent -->\n"
+    "</div1>\n"
+    "\n"
+    "<div1><?Pub Dtl?>\n"
+    "   <head>Link Recognition</head>\n"
+    "   <p>The existence of a <termref def=\"dt-link\">link</termref> is asserted by a <termref def=\"dt-linkel\">linking element</termref>. Linking elements must be recognized reliably by application software in order to provide appropriate display and behavior. There are several ways link recognition could be accomplished: for example, reserving element type names, reserving attributes names, leaving the matter of recognition entirely up to stylesheets and application software, or usin [...]
+    "   <p>The two approaches to identifying linking elements are relatively simple to implement. For example, here's how the HTML <code>A</code> element would be declared using attributes within the XLink namespace, and then how an element within the XLink namespace might do the same:\n"
+    "       <eg><A xlink:type=\"simple\" xlink:href=\"http://www.w3.org/TR/wd-xlink/\"\n"
+    "xlink:title=\"The Xlink Working Draft\">The XLink Working Draft.</A></eg>\n"
+    "       <eg><xlink:simple href=\"http://www.w3.org/TR/wd-xlink/\"\n"
+    "title=\"The XLink Working Draft\">The XLink Working Draft</xlink:simple></eg>\n"
+    "   Any arbitrary element can be made into an XLink by using the <code>xlink:type</code> attribute. And, of course, the explicit XLink elements may be used, as well. This document will go on to describe the linking attributes that are associated with linking elements. It may be assumed by the reader that these attributes would require the <code>xlink</code> namespace prefix if they existed within an arbitrary element, or that they may be used directly if they exist within an explicit [...]
+    "       <!-- heavily modified this section to accomodate namespace-aware link recognition - bent -->\n"
+    "</div1>\n"
+    "\n"
+    "<!-- Rewrote this entire section. - bent -->\n"
+    "<div1>\n"
+    "   <head>Linking Attributes</head>\n"
+    "   <p>XLink has several attributes associated with the variety of links it may represent. These attributes define four main concepts: locators, arcs, behaviors, and semantics. <emph>Locators</emph> define where the actual resource is located. <emph>Arcs</emph> define the traversal of links. Where does the link come from? Where does it go to? All this information can be stored in the arc attributes. <emph>Behaviors</emph> define how the link is activated, and what the application sho [...]
+    "   \n"
+    "   <div2 id=\"link-locators\">\n"
+    "       <head>Locator Attributes</head>\n"
+    "       <p>The only locator attribute at this time is <code>href</code>. This attribute must contain either a string in the form of a URI that defines the remote resource being linked to, a string containing a fragment identifier that links to a local resource, or a string containing a URI with a fragment identifier concacenated onto it.</p>\n"
+    "   </div2>\n"
+    "\n"
+    "   <div2 id=\"link-arcs\">\n"
+    "       <head>Arc Attributes</head>\n"
+    "       <p>Arcs contain two attributes, <code>from</code> and <code>to</code>. The <code>from</code> attribute may contain a string containing the content of a <code>role</code> attribute from the resource being linked from. The purpose of the <code>from</code> attribute is to define where this link is being actuated from.</p>\n"
+    "       <p>The <code>to</code> attribute may contain a string containing the content of a <code>role</code> attribute from the resource being linked to. The purpose of the <code>to</code> attribute is to define where this link traverses to.</p>\n"
+    "       <p>The application may use this information in a number of ways, especially in a complex hypertext system, but it is mainly useful in providing context for application behavior.</p>\n"
+    "       <!-- I'm at a loss as to how to describe arcs more clearly than this. I don't want to devolve into discussions of directed graphs and n-ary links. -bent -->\n"
+    "   </div2>\n"
+    "\n"
+    "   <div2 id=\"link-behaviors\">\n"
+    "       <head>Behavior Attributes</head>\n"
+    "       <p>There are two attributes associated with behavior: <code>show</code> and <code>actuate</code>. The <code>show</code> attribute defines how the remote resource is to be revealed to the user. It has three options: <code>new</code>, <code>parsed</code>, and <code>replace</code>. The <code>new</code> option indicates that the remote resource should be shown in a new window (or other device context) without replacing the previous content. The <code>parsed</code> option, relatin [...]
+    "       <p>The <code>actuate</code> attribute defines how the link is initiated. It has two options: <code>user</code> and <code>auto</code>. The <code>user</code> option indicates that the link must be initiated by some sort of human-initiated selection, such as clicking on an HTML anchor. The <code>auto</code> option indicates that the link is automatically initiated when the application deems that the user has reached the link. It then follows the behavior set out in the <code>sho [...]
+    "       <!-- Something should be put here in terms of an example. Idea: \"A\" link versus automatically updating encyclopedia. -bent -->\n"
+    "   </div2>\n"
+    "\n"
+    "   <div2 id=\"link-semantics\">\n"
+    "       <head>Semantic Attributes</head>\n"
+    "       <p>There are two attributes associated with semantics, <code>role</code> and <code>title</code>. The <code>role</code> attribute is a generic string used to describe the function of the link's content. For example, a poem might have a link with a <code>role=\"stanza\"</code>. The <code>role</code> is also used as an identifier for the <code>from</code> and <code>to</code> attributes of arcs.</p>\n"
+    "       <p>The <code>title</code> attribute is designed to provide human-readable text describing the link. It is very useful for those who have text-based applications, whether that be due to a constricted device that cannot display the link's content, or if it's being read by an application to a visually-impaired user, or if it's being used to create a table of links. The <code>title</code> attribute contains a simple, descriptive string.</p>\n"
+    "   </div2>\n"
+    "</div1>\n"
+    "\n"
+    "<div1 id=\"linking-elements\">\n"
+    "   <head>Linking Elements</head>\n"
+    "   <p>There are several kinds of linking elements in XLink: <code>simple</code> links, <code>locators</code>, <code>arcs</code>, and <code>extended</code> links. These elements may be instantiated via element declarations from the XLink namespace, or they may be instantiated via attribute declarations from the XLink namespace. Both kinds of instantiation are described in the definition of each linking element.</p>\n"
+    "   <p>The <code>simple</code> link is used to declare a link that approximates the functionality of the HTML <code>A</code> element. It has, however, a few added features to increase its value, including the potential declaration of semantics and behavior. The <code>locator</code> elements are used to define the resource being linked to. Some links may contain multiple locators, representing a choice of potential links to be traversed. The <code>arcs</code> are used to define the tr [...]
+    "\n"
+    "<div2 id=\"simple-links\">\n"
+    "   <head>Simple Links</head>\n"
+    "   <p id=\"dt-simplelink\"><termdef id=\"dt-simpleline\" term=\"Simple Link\"><term>Simple links</term> can be used for purposes that approximate the functionality of a basic HTML <code>A</code> link, but they can also support a limited amount of additional functionality. Simple links have only one locator and thus, for convenience, combine the functions of a linking element and a locator into a single element.</termdef> As a result of this combination, the simple linking element of [...]
+    "   <p>The following are two examples of linking elements, each showing all the possible attributes that can be associated with a simple link. Here is the explicit XLink simple linking element.\n"
+    "   <eg><!ELEMENT xlink:simple ANY>\n"
+    "<!ATTLIST xlink:slink\n"
+    "    href           CDATA                   #REQUIRED\n"
+    "    role           CDATA                   #IMPLIED\n"
+    "    title          CDATA                   #IMPLIED\n"
+    "    show           (new|parsed|replace)    \"replace\"\n"
+    "    actuate        (user|auto)                 \"user\"\n"
+    "></eg>\n"
+    "   And here is how to make an arbitrary element into a simple link.\n"
+    "   <eg><!ELEMENT xlink:simple ANY>\n"
+    "<!ATTLIST foo\n"
+    "   xlink:type     (simple|extended|locator|arc) #FIXED \"simple\"      \n"
+    "    xlink:href     CDATA                   #REQUIRED\n"
+    "    xlink:role     CDATA                   #IMPLIED\n"
+    "    xlink:title    CDATA                   #IMPLIED\n"
+    "    xlink:show     (new|parsed|replace)    \"replace\"\n"
+    "    xlink:actuate  (user|auto)                 \"user\"\n"
+    "></eg>\n"
+    "   Here is how the first example might look in a document:\n"
+    "<eg><xlink:simple href=\"http://www.w3.org/TR/wd-xlink\" role=\"working draft\" \n"
+    "   title=\"The XLink Working Draft\" show=\"replace\" actuate=\"user\">\n"
+    "The XLink Working Draft.</xlink:simple></eg>\n"
+    "<eg><foo xlink:href=\"http://www.w3.org/TR/wd-xlink\" xlink:role=\"working draft\"\n"
+    "   xlink:title=\"The XLink Working Draft\" xlink:show=\"new\" xlink:actuate=\"user\">\n"
+    "The XLink Working Draft.</foo></eg>\n"
+    "   Alternately, a simple link could be as terse as this:\n"
+    "<eg><foo xlink:href=\"#stanza1\">The First Stanza.</foo></eg>\n"
+    "   </p>\n"
+    "   <p>\n"
+    "   There are no constraints on the contents of a simple linking element. In\n"
+    "   the sample declaration above, it is given a content model of <code>ANY</code>\n"
+    "   to illustrate that any content model or declared content is acceptable. In\n"
+    "   a valid document, every element that is significant to XLink must still conform\n"
+    "   to the constraints expressed in its governing DTD.</p>\n"
+    "   <p>Note that it is meaningful to have an out-of-line simple link, although\n"
+    "   such links are uncommon. They are called \"one-ended\" and are typically used\n"
+    "   to associate discrete semantic properties with locations. The properties might\n"
+    "   be expressed by attributes on the link, the link's element type name, or in\n"
+    "   some other way, and are not considered full-fledged resources of the link.\n"
+    "   Most out-of-line links are extended links, as these have a far wider range\n"
+    "   of uses.</p>\n"
+    "</div2>\n"
+    "\n"
+    "<div2 id=\"extended-link\">\n"
+    "<head>Extended Links</head>\n"
+    "   <p><termdef id=\"dt-extendedlink\" term=\"Extended Link\">An <term>extended link</term> differs from a simple link in that it can connect any number of resources, not just one local resource (optionally) and one remote resource, and in that extended links are more often out-of-line than simple links.</termdef></p>\n"
+    "   <p>These additional capabilities of extended links are required for:  \n"
+    "       <ulist>\n"
+    "           <item>\n"
+    "               <p>Enabling outgoing links in documents that cannot be modified to add an inline link</p>\n"
+    "           </item>\n"
+    "           <item>\n"
+    "               <p>Creating links to and from resources in formats with no native support for embedded links (such as most multimedia formats)</p>\n"
+    "           </item>\n"
+    "           <item>\n"
+    "               <p>Applying and filtering sets of relevant links on demand</p>\n"
+    "           </item>\n"
+    "           <item><p>Enabling other advanced hypermedia capabilities</p></item>\n"
+    "       </ulist>\n"
+    "   </p>\n"
+    "   <p>Application software might be expected to provide traversal among all of a link's participating resources (subject to semantic constraints outside the scope of this specification) and to signal the fact that a given resource or sub-resource participates in one or more links when it is displayed (even though there is no markup at exactly that point to signal it).</p>\n"
+    "   <p>A linking element for an extended link contains a series of <xtermref href=\"http://www.w3.org/TR/REC-xml/#dt-parentchild\">child elements</xtermref> that serve as locators and arcs. Because an extended link can have more than one remote resource, it separates out linking itself from the mechanisms used to locate each resource (whereas a simple link combines the two).</p>\n"
+    "   <p>The <code>xlink:type</code> attribute value for an extended link must be <code> extended</code>, if the link is being instantiated on an arbitrary element. Note that extended links introduce variants of the <code>show</code> and <code>actuate</code> behavior attributes. These attributes, the <code>showdefault</code> and <code>actuatedefault</code> define the same behavior as their counterparts. However, in this case, they are considered to define the default behavior for all t [...]
+    "   <p>However, when a linking element within an extended link has a <code>show</code> or <code>actuate</code> attribute of its own, that attribute overrides the defaults set on the extended linking element.</p>\n"
+    "   <p>The extended linking element itself retains those attributes relevant to the link as a whole, and to its local resource if any. Following are two sample declaration for an extended link. The first is an example of the explicit XLink extended link:\n"
+    "   \n"
+    "<eg><!ELEMENT xlink:extended ((xlink:arc | xlink:locator)*)>\n"
+    "<!ATTLIST xlink:extended\n"
+    "   role           CDATA                    #IMPLIED\n"
+    "   title          CDATA                    #IMPLIED\n"
+    "   showdefault    (new|parsed|replace)     #IMPLIED \n"
+    "    actuatedefault (user|auto)                 #IMPLIED ></eg>\n"
+    "\n"
+    "   The second is an example of an arbitrary element being used an extended link:\n"
+    "\n"
+    "<eg><!ELEMENT foo ((xlink:arc | xlink:locator)*)>\n"
+    "<!ATTLIST foo\n"
+    "   xlink:type      (simple|extended|locator|arc)   #FIXED \"extended\"\n"
+    "   xlink:role           CDATA                      #IMPLIED\n"
+    "   xlink:title          CDATA                      #IMPLIED\n"
+    "   xlink:showdefault    (new|parsed|replace)       #IMPLIED \n"
+    "    xlink:actuatedefault (user|auto)               #IMPLIED ></eg>\n"
+    "\n"
+    "   The following two examples demonstrate how each of the above might appear within a document instance. Note that the content of these examples would be other elements. For brevity's sake, they've been left blank. The first example shows how the link might appear, using an explicit XLink extended link:\n"
+    "\n"
+    "<eg><xlink:extended role=\"address book\" title=\"Ben's Address Book\" showdefault=\"replace\" actuatedefault=\"user\"> ... </xlink:extended></eg>\n"
+    "\n"
+    "   And the second shows how the link might appear, using an arbitrary element:\n"
+    "\n"
+    "<eg><foo xlink:type=\"extended\" xlink:role=\"address book\" xlink:title=\"Ben's Address Book\" xlink:showdefault=\"replace\" xlink:actuatedefault=\"user\"> ... </foo></eg>\n"
+    "   </p>\n"
+    "\n"
+    "</div2>\n"
+    "\n"
+    "<div2 id=\"xlink-arcs\">\n"
+    "   <head>Arc Elements</head>\n"
+    "   <p><termdef id=\"dt-arc\" term=\"Arc\">An <term>arc</term> is contained within an extended link for the purpose of defining traversal behavior.</termdef> More than one arc may be associated with a link. Otherwise, arc elements function exactly as the arc attributes might lead on to expect.</p>\n"
+    "   <!-- More here? -bent -->\n"
+    "</div2>\n"
+    "\n"
+    "</div1>\n"
+    "<div1>\n"
+    "<head>Conformance</head>\n"
+    "<p>An element conforms to XLink if:  <olist>\n"
+    "<item><p>The element has an <code>xml:link</code> attribute whose value is\n"
+    "one of the attribute values prescribed by this specification, and</p></item>\n"
+    "<item><p>the element and all of its attributes and content adhere to the\n"
+    "syntactic\n"
+    "requirements imposed by the chosen <code>xml:link</code> attribute value,\n"
+    "as prescribed in this specification.</p></item>\n"
+    "</olist></p>\n"
+    "<p>Note that conformance is assessed at the level of individual elements,\n"
+    "rather than whole XML documents, because XLink and non-XLink linking mechanisms\n"
+    "may be used side by side in any one document.</p>\n"
+    "<p>An application conforms to XLink if it interprets XLink-conforming elements\n"
+    "according to all required semantics prescribed by this specification and,\n"
+    "for any optional semantics it chooses to support, supports them in the way\n"
+    "prescribed. <!--If/when we split out the XLinkfunctionality\n"
+    "(e.g. inline links and out-of-line links), the\n"
+    "conformance language will have to address the different\n"
+    "levels of support. -elm--> </p>\n"
+    "</div1>\n"
+    "</body><back>\n"
+    "<div1 id=\"unfinished\">\n"
+    "<head>Unfinished Work</head>\n"
+    "<div2>\n"
+    "<head>Structured Titles</head>\n"
+    "<p>The simple title mechanism described in this draft is insufficient to cope\n"
+    "with internationalization or the use of multimedia in link titles. A future\n"
+    "version will provide a mechanism for the use of structured link titles.</p>\n"
+    "</div2>\n"
+    "</div1>\n"
+    "<div1>\n"
+    "<head>References</head>\n"
+    "<blist>\n"
+    "<bibl id=\"xptr\" key=\"XPTR\">Eve Maler and Steve DeRose, editors. <titleref>\n"
+    "XML Pointer Language (XPointer) V1.0</titleref>. ArborText, Inso, and Brown\n"
+    "University. Burlington, Seekonk, et al.: World Wide Web Consortium, 1998.\n"
+    "(See <loc href=\"http://www.w3.org/TR/WD-xptr\">http://www.w3.org/TR/WD-xptr\n"
+    " </loc>.)</bibl>\n"
+    "<bibl id=\"iso10744\" key=\"ISO/IEC 10744\">ISO (International Organization for\n"
+    "Standardization). <titleref>ISO/IEC 10744-1992 (E). Information technology\n"
+    "- Hypermedia/Time-based Structuring Language (HyTime).</titleref> [Geneva]:\n"
+    "International Organization for Standardization, 1992. <titleref>Extended\n"
+    "Facilities\n"
+    "Annex.</titleref> [Geneva]: International Organization for Standardization,\n"
+    "1996. (See  <loc\n"
+    "href=\"http://www.ornl.gov/sgml/wg8/hytime/html/is10744r.html\">http://www.ornl.go\n"
+    "v/sgml/wg8/hytime/html/is10744r.html </loc> <!--p m-r says this link is\n"
+    "broken. elm --> ).</bibl>\n"
+    "<bibl id=\"rfc1738\" key=\"IETF RFC 1738\">IETF (Internet Engineering Task\n"
+    "Force). <titleref>\n"
+    "RFC 1738: Uniform Resource Locators</titleref>. 1991. (See  <loc\n"
+    "href=\"http://www.w3.org/Addressing/rfc1738.txt\">\n"
+    "http://www.w3.org/Addressing/rfc1738.txt</loc>).</bibl>\n"
+    "<bibl id=\"rfc1808\" key=\"IETF RFC 1808\">IETF (Internet Engineering Task\n"
+    "Force). <titleref>\n"
+    "RFC 1808: Relative Uniform Resource Locators</titleref>. 1995. (See  <loc\n"
+    "href=\"http://www.w3.org/Addressing/rfc1808.txt\">http://www.w3.org/Addressing/rfc\n"
+    "1808.txt </loc>).</bibl>\n"
+    "<bibl id=\"tei\" key=\"TEI\">C. M. Sperberg-McQueen and Lou Burnard, editors.\n"
+    "<titleref>\n"
+    "Guidelines for Electronic Text Encoding and Interchange</titleref>. Association\n"
+    "for Computers and the Humanities (ACH), Association for Computational\n"
+    "Linguistics\n"
+    "(ACL), and Association for Literary and Linguistic Computing (ALLC). Chicago,\n"
+    "Oxford: Text Encoding Initiative, 1994. <!-- add cite to DOM work --> </bibl>\n"
+    "<bibl id=\"chum\" key=\"CHUM\">]Steven J. DeRose and David G. Durand. 1995. \"The\n"
+    "TEI Hypertext Guidelines.\" In <titleref>Computing and the Humanities\n"
+    "</titleref>29(3).\n"
+    "Reprinted in <titleref>Text Encoding Initiative: Background and\n"
+    "Context</titleref>,\n"
+    "ed. Nancy Ide and Jean ronis <!-- fix this name -->, ISBN 0-7923-3704-2. </bibl>\n"
+    "</blist></div1>\n"
+    "</back></spec>\n"
+    "<?Pub *0000052575?>\n";
+
+// Correct
+const char *ok_data_4 =
+    "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"
+    "<!DOCTYPE rss [\n"
+    "<!--\n"
+    "\n"
+    "  Rich Site Summary (RSS) 0.91 official DTD, proposed.\n"
+    "  \n"
+    "  RSS is an XML vocabulary for describing\n"
+    "  metadata about websites, and enabling the display of\n"
+    "  \"channels\" on the \"My Netscape\" website.\n"
+    "  \n"
+    "  RSS Info can be found at http://my.netscape.com/publish/\n"
+    "  XML Info can be found at http://www.w3.org/XML/ \n"
+    "  \n"
+    "  copyright Netscape Communications, 1999\n"
+    "\n"
+    "  Dan Libby - danda at netscape.com\n"
+    "  \n"
+    "  Based on RSS DTD originally created by\n"
+    "  Lars Marius Garshol - larsga at ifi.uio.no.\n"
+    "  \n"
+    "-->\n"
+    "<!ELEMENT rss (channel)>\n"
+    "<!ATTLIST rss version CDATA #REQUIRED>\n"
+    "<!-- must be \"0.91\"> --><!ELEMENT channel (title | description | link \n"
+    "| language | item+ | rating? | image? | textinput? | copyright? | \n"
+    "pubDate? | lastBuildDate? | docs? | managingEditor? | webMaster? | \n"
+    "skipHours? | skipDays?)*>\n"
+    "<!ELEMENT title (#PCDATA)>\n"
+    "<!ELEMENT description (#PCDATA)>\n"
+    "<!ELEMENT link (#PCDATA)>\n"
+    "<!ELEMENT image (title | url | link | width? | height? | description?)*>\n"
+    "<!ELEMENT url (#PCDATA)>\n"
+    "<!ELEMENT item (title | link | description)*>\n"
+    "<!ELEMENT textinput (title | description | name | link)*>\n"
+    "<!ELEMENT name (#PCDATA)>\n"
+    "<!ELEMENT rating (#PCDATA)>\n"
+    "<!ELEMENT language (#PCDATA)>\n"
+    "<!ELEMENT width (#PCDATA)>\n"
+    "<!ELEMENT height (#PCDATA)>\n"
+    "<!ELEMENT copyright (#PCDATA)>\n"
+    "<!ELEMENT pubDate (#PCDATA)>\n"
+    "<!ELEMENT lastBuildDate (#PCDATA)>\n"
+    "<!ELEMENT docs (#PCDATA)>\n"
+    "<!ELEMENT managingEditor (#PCDATA)>\n"
+    "<!ELEMENT webMaster (#PCDATA)>\n"
+    "<!ELEMENT hour (#PCDATA)>\n"
+    "<!ELEMENT day (#PCDATA)>\n"
+    "<!ELEMENT skipHours (hour)+>\n"
+    "<!ELEMENT skipDays (day)+>\n"
+    "<!--\n"
+    "     Copied from HTML 3.2 DTD, with modifications (removed CDATA)\n"
+    "     http://www.w3.org/TR/REC-html32.html#dtd\n"
+    "     =============== BEGIN ===================\n"
+    "-->\n"
+    "<!-- \n"
+    "     Character Entities for ISO Latin-1\n"
+    "     \n"
+    "     (C) International Organization for Standardization 1986\n"
+    "     Permission to copy in any form is granted for use with\n"
+    "     conforming SGML systems and applications as defined in\n"
+    "     ISO 8879, provided this notice is included in all copies.\n"
+    "     This has been extended for use with HTML to cover the full\n"
+    "     set of codes in the range 160-255 decimal.\n"
+    "-->\n"
+    "<!-- Character entity set. Typical invocation:\n"
+    "     <!ENTITY % ISOlat1 PUBLIC\n"
+    "       \"ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML\">\n"
+    "     %ISOlat1;\n"
+    "-->\n"
+    "<!ENTITY nbsp \" \"> <!-- no-break space -->\n"
+    "<!ENTITY iexcl \"¡\">\n"
+    "<!-- inverted exclamation mark --><!ENTITY cent \"¢\">\n"
+    "<!-- cent sign --><!ENTITY pound \"£\">\n"
+    "<!-- pound sterling sign --><!ENTITY curren \"¤\">\n"
+    "<!-- general currency sign --><!ENTITY yen \"¥\">\n"
+    "<!-- yen sign --><!ENTITY brvbar \"¦\">\n"
+    "<!-- broken (vertical) bar --><!ENTITY sect \"§\">\n"
+    "<!-- section sign --><!ENTITY uml \"¨\">\n"
+    "<!-- umlaut (dieresis) --><!ENTITY copy \"©\">\n"
+    "<!-- copyright sign --><!ENTITY ordf \"ª\">\n"
+    "<!-- ordinal indicator, feminine --><!ENTITY laquo \"«\">\n"
+    "<!-- angle quotation mark, left --><!ENTITY not \"¬\">\n"
+    "<!-- not sign --><!ENTITY shy \"­\">\n"
+    "<!-- soft hyphen --><!ENTITY reg \"®\">\n"
+    "<!-- registered sign --><!ENTITY macr \"¯\">\n"
+    "<!-- macron --><!ENTITY deg \"°\">\n"
+    "<!-- degree sign --><!ENTITY plusmn \"±\">\n"
+    "<!-- plus-or-minus sign --><!ENTITY sup2 \"²\">\n"
+    "<!-- superscript two --><!ENTITY sup3 \"³\">\n"
+    "<!-- superscript three --><!ENTITY acute \"´\">\n"
+    "<!-- acute accent --><!ENTITY micro \"µ\">\n"
+    "<!-- micro sign --><!ENTITY para \"¶\">\n"
+    "<!-- pilcrow (paragraph sign) --><!ENTITY middot \"·\">\n"
+    "<!-- middle dot --><!ENTITY cedil \"¸\">\n"
+    "<!-- cedilla --><!ENTITY sup1 \"¹\">\n"
+    "<!-- superscript one --><!ENTITY ordm \"º\">\n"
+    "<!-- ordinal indicator, masculine --><!ENTITY raquo \"»\">\n"
+    "<!-- angle quotation mark, right --><!ENTITY frac14 \"¼\">\n"
+    "<!-- fraction one-quarter --><!ENTITY frac12 \"½\">\n"
+    "<!-- fraction one-half --><!ENTITY frac34 \"¾\">\n"
+    "<!-- fraction three-quarters --><!ENTITY iquest \"¿\">\n"
+    "<!-- inverted question mark --><!ENTITY Agrave \"À\">\n"
+    "<!-- capital A, grave accent --><!ENTITY Aacute \"Á\">\n"
+    "<!-- capital A, acute accent --><!ENTITY Acirc \"Â\">\n"
+    "<!-- capital A, circumflex accent --><!ENTITY Atilde \"Ã\">\n"
+    "<!-- capital A, tilde --><!ENTITY Auml \"Ä\">\n"
+    "<!-- capital A, dieresis or umlaut mark --><!ENTITY Aring \"Å\">\n"
+    "<!-- capital A, ring --><!ENTITY AElig \"Æ\">\n"
+    "<!-- capital AE diphthong (ligature) --><!ENTITY Ccedil \"Ç\">\n"
+    "<!-- capital C, cedilla --><!ENTITY Egrave \"È\">\n"
+    "<!-- capital E, grave accent --><!ENTITY Eacute \"É\">\n"
+    "<!-- capital E, acute accent --><!ENTITY Ecirc \"Ê\">\n"
+    "<!-- capital E, circumflex accent --><!ENTITY Euml \"Ë\">\n"
+    "<!-- capital E, dieresis or umlaut mark --><!ENTITY Igrave \"Ì\">\n"
+    "<!-- capital I, grave accent --><!ENTITY Iacute \"Í\">\n"
+    "<!-- capital I, acute accent --><!ENTITY Icirc \"Î\">\n"
+    "<!-- capital I, circumflex accent --><!ENTITY Iuml \"Ï\">\n"
+    "<!-- capital I, dieresis or umlaut mark --><!ENTITY ETH \"Ð\">\n"
+    "<!-- capital Eth, Icelandic --><!ENTITY Ntilde \"Ñ\">\n"
+    "<!-- capital N, tilde --><!ENTITY Ograve \"Ò\">\n"
+    "<!-- capital O, grave accent --><!ENTITY Oacute \"Ó\">\n"
+    "<!-- capital O, acute accent --><!ENTITY Ocirc \"Ô\">\n"
+    "<!-- capital O, circumflex accent --><!ENTITY Otilde \"Õ\">\n"
+    "<!-- capital O, tilde --><!ENTITY Ouml \"Ö\">\n"
+    "<!-- capital O, dieresis or umlaut mark --><!ENTITY times \"×\">\n"
+    "<!-- multiply sign --><!ENTITY Oslash \"Ø\">\n"
+    "<!-- capital O, slash --><!ENTITY Ugrave \"Ù\">\n"
+    "<!-- capital U, grave accent --><!ENTITY Uacute \"Ú\">\n"
+    "<!-- capital U, acute accent --><!ENTITY Ucirc \"Û\">\n"
+    "<!-- capital U, circumflex accent --><!ENTITY Uuml \"Ü\">\n"
+    "<!-- capital U, dieresis or umlaut mark --><!ENTITY Yacute \"Ý\">\n"
+    "<!-- capital Y, acute accent --><!ENTITY THORN \"Þ\">\n"
+    "<!-- capital THORN, Icelandic --><!ENTITY szlig \"ß\">\n"
+    "<!-- small sharp s, German (sz ligature) --><!ENTITY agrave \"à\">\n"
+    "<!-- small a, grave accent --><!ENTITY aacute \"á\">\n"
+    "<!-- small a, acute accent --><!ENTITY acirc \"â\">\n"
+    "<!-- small a, circumflex accent --><!ENTITY atilde \"ã\">\n"
+    "<!-- small a, tilde --><!ENTITY auml \"ä\">\n"
+    "<!-- small a, dieresis or umlaut mark --><!ENTITY aring \"å\">\n"
+    "<!-- small a, ring --><!ENTITY aelig \"æ\">\n"
+    "<!-- small ae diphthong (ligature) --><!ENTITY ccedil \"ç\">\n"
+    "<!-- small c, cedilla --><!ENTITY egrave \"è\">\n"
+    "<!-- small e, grave accent --><!ENTITY eacute \"é\">\n"
+    "<!-- small e, acute accent --><!ENTITY ecirc \"ê\">\n"
+    "<!-- small e, circumflex accent --><!ENTITY euml \"ë\">\n"
+    "<!-- small e, dieresis or umlaut mark --><!ENTITY igrave \"ì\">\n"
+    "<!-- small i, grave accent --><!ENTITY iacute \"í\">\n"
+    "<!-- small i, acute accent --><!ENTITY icirc \"î\">\n"
+    "<!-- small i, circumflex accent --><!ENTITY iuml \"ï\">\n"
+    "<!-- small i, dieresis or umlaut mark --><!ENTITY eth \"ð\">\n"
+    "<!-- small eth, Icelandic --><!ENTITY ntilde \"ñ\">\n"
+    "<!-- small n, tilde --><!ENTITY ograve \"ò\">\n"
+    "<!-- small o, grave accent --><!ENTITY oacute \"ó\">\n"
+    "<!-- small o, acute accent --><!ENTITY ocirc \"ô\">\n"
+    "<!-- small o, circumflex accent --><!ENTITY otilde \"õ\">\n"
+    "<!-- small o, tilde --><!ENTITY ouml \"ö\">\n"
+    "<!-- small o, dieresis or umlaut mark --><!ENTITY divide \"÷\">\n"
+    "<!-- divide sign --><!ENTITY oslash \"ø\">\n"
+    "<!-- small o, slash --><!ENTITY ugrave \"ù\">\n"
+    "<!-- small u, grave accent --><!ENTITY uacute \"ú\">\n"
+    "<!-- small u, acute accent --><!ENTITY ucirc \"û\">\n"
+    "<!-- small u, circumflex accent --><!ENTITY uuml \"ü\">\n"
+    "<!-- small u, dieresis or umlaut mark --><!ENTITY yacute \"ý\">\n"
+    "<!-- small y, acute accent --><!ENTITY thorn \"þ\">\n"
+    "<!-- small thorn, Icelandic --><!ENTITY yuml \"ÿ\">\n"
+    "<!-- small y, dieresis or umlaut mark --><!--\n"
+    "     Copied from HTML 3.2 DTD, with modifications (removed CDATA)\n"
+    "     http://www.w3.org/TR/REC-html32.html#dtd\n"
+    "     ================= END ===================\n"
+    "-->\n"
+    "]>\n"
+    "<rss>\n"
+    "<channel>\n"
+    "<image/>\n"
+    "<title>PP</title>\n"
+    "</channel>\n"
+    "</rss>\n";
+
+// Correct, with UTF-8 data
+const char ok_data_5[] =
+    "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" /*39 chars*/
+    "<doc>\xC3\xA4</doc>";
+
+// Erroneous
+const char *error_data_1 = 
+    "a";      // bogus character
+
+// Erroneous
+const char *error_data_2 = 
+    "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"    
+    "<start>";      // XML tag not closed
+
+const char *bug_data_pr2855 =
+    "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+    "<start> notrim</start>";
+
+// byte order mark
+const char *bug_data_pr1678 =
+    "\xEF\xBB\xBF<?xml version=\"1.0\" encoding=\"utf-8\"?><root/>";
+
+// russian
+const char *bug_data_pr5203 =
+    "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+    "<name>\xD0\xAE\xD0\xBD\xD0\xB8\xD1\x82</name>";
+
+// Quoting attributes
+const char *bug_data_pr4840 =
+    "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+    "<start a=\"hello "world"\"/>";
+
+#endif
diff --git a/vendor/pdalboost/libs/random/src/random_device.cpp b/vendor/pdalboost/libs/random/src/random_device.cpp
new file mode 100644
index 0000000..c042ec9
--- /dev/null
+++ b/vendor/pdalboost/libs/random/src/random_device.cpp
@@ -0,0 +1,246 @@
+/* boost random_device.cpp implementation
+ *
+ * Copyright Jens Maurer 2000
+ * Copyright Steven Watanabe 2010-2011
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * $Id$
+ *
+ */
+
+#define BOOST_RANDOM_SOURCE
+
+#include <boost/random/random_device.hpp>
+#include <boost/config.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/assert.hpp>
+#include <boost/detail/workaround.hpp>
+#include <boost/system/system_error.hpp>
+#include <boost/system/error_code.hpp>
+#include <string>
+
+#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) && !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+//  A definition is required even for integral static constants
+const bool pdalboost::random::random_device::has_fixed_range;
+#endif
+
+// WinRT target.
+#if !defined(BOOST_RANDOM_WINDOWS_RUNTIME)
+# if defined(__cplusplus_winrt)
+#  include <winapifamily.h>
+#  if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
+#   define BOOST_RANDOM_WINDOWS_RUNTIME 1
+#  endif
+# endif
+#endif
+
+#if defined(BOOST_WINDOWS)
+
+#if !defined(BOOST_RANDOM_WINDOWS_RUNTIME)
+#include <windows.h>
+#include <wincrypt.h>
+#include <stdexcept>  // std::invalid_argument
+#else
+using namespace Platform;
+using namespace Windows::Security::Cryptography;
+#endif
+
+#define BOOST_AUTO_LINK_NOMANGLE
+#define BOOST_LIB_NAME "Advapi32"
+#include <boost/config/auto_link.hpp>
+
+#ifdef __MINGW32__
+
+extern "C" {
+
+// mingw's wincrypt.h appears to be missing some things
+WINADVAPI
+BOOL
+WINAPI
+CryptEnumProvidersA(
+    DWORD dwIndex,
+    DWORD *pdwReserved,
+    DWORD dwFlags,
+    DWORD *pdwProvType,
+    LPSTR szProvName,
+    DWORD *pcbProvName
+    );
+
+}
+
+#endif
+
+namespace {
+#if !defined(BOOST_RANDOM_WINDOWS_RUNTIME)
+const char * const default_token = MS_DEF_PROV_A;
+#else
+const char * const default_token = "";
+#endif
+}
+
+class pdalboost::random::random_device::impl
+{
+public:
+  impl(const std::string & token) : provider(token) {
+#if !defined(BOOST_RANDOM_WINDOWS_RUNTIME)
+    char buffer[80];
+    DWORD type;
+    DWORD len;
+
+    // Find the type of a specific provider
+    for(DWORD i = 0; ; ++i) {
+      len = sizeof(buffer);
+      if(!CryptEnumProvidersA(i, NULL, 0, &type, buffer, &len)) {
+        if (GetLastError() == ERROR_NO_MORE_ITEMS) break;
+        continue;
+      }
+      if(buffer == provider) {
+        break;
+      }
+    }
+
+    if(!CryptAcquireContextA(&hProv, NULL, provider.c_str(), type,
+        CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) {
+      error("Could not acquire CSP context");
+    }
+#endif
+  }
+
+#if !defined(BOOST_RANDOM_WINDOWS_RUNTIME)
+  ~impl() {
+    if(!CryptReleaseContext(hProv, 0)) error("Could not release CSP context");
+  }
+#endif
+
+  unsigned int next() {
+    unsigned int result;
+
+#if !defined(BOOST_RANDOM_WINDOWS_RUNTIME)
+    if(!CryptGenRandom(hProv, sizeof(result),
+        static_cast<BYTE*>(static_cast<void*>(&result)))) {
+      error("error while reading");
+    }
+#else
+    auto buffer = CryptographicBuffer::GenerateRandom(sizeof(result));
+    auto data = ref new Array<unsigned char>(buffer->Length);
+    CryptographicBuffer::CopyToByteArray(buffer, &data);
+    memcpy(&result, data->begin(), data->end() - data->begin());
+#endif
+
+    return result;
+  }
+
+private:
+#if !defined(BOOST_RANDOM_WINDOWS_RUNTIME)
+  void error(const char * msg) {
+    DWORD error_code = GetLastError();
+    pdalboost::throw_exception(
+      pdalboost::system::system_error(
+        error_code, pdalboost::system::system_category(),
+        std::string("pdalboost::random_device: ") + msg + 
+        " Cryptographic Service Provider " + provider));
+  }
+  HCRYPTPROV hProv;
+#endif
+  const std::string provider;
+};
+
+#else
+
+namespace {
+// the default is the unlimited capacity device, using some secure hash
+// try "/dev/random" for blocking when the entropy pool has drained
+const char * const default_token = "/dev/urandom";
+}
+
+/*
+ * This uses the POSIX interface for unbuffered reading.
+ * Using buffered std::istream would consume entropy which may
+ * not actually be used.  Entropy is a precious good we avoid
+ * wasting.
+ */
+
+#if defined(__GNUC__) && defined(_CXXRT_STD_NAME)
+// I have severe difficulty to get the POSIX includes to work with
+// -fhonor-std and Dietmar Kuhl's standard C++ library.  Hack around that
+// problem for now.
+extern "C" {
+static const int O_RDONLY = 0;
+extern int open(const char *__file, int __oflag, ...);
+extern int read(int __fd, __ptr_t __buf, size_t __nbytes);
+extern int close(int __fd);
+}
+#else
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>    // open
+#include <unistd.h>   // read, close
+#endif
+
+#include <errno.h>    // errno
+#include <string.h>   // strerror
+#include <stdexcept>  // std::invalid_argument
+
+
+class pdalboost::random::random_device::impl
+{
+public:
+  impl(const std::string & token) : path(token) {
+    fd = open(token.c_str(), O_RDONLY);
+    if(fd < 0)
+      error("cannot open");
+  }
+
+  ~impl() { if(close(fd) < 0) error("could not close"); }
+
+  unsigned int next() {
+    unsigned int result;
+    long sz = read(fd, reinterpret_cast<char *>(&result), sizeof(result));
+    if(sz == -1)
+      error("error while reading");
+    else if(sz != sizeof(result)) {
+      errno = 0;
+      error("EOF while reading");
+    }
+    return result;
+  }
+
+private:
+  void error(const char * msg) {
+    int error_code = errno;
+    pdalboost::throw_exception(
+      pdalboost::system::system_error(
+        error_code, pdalboost::system::system_category(),
+        std::string("pdalboost::random_device: ") + msg + 
+        " random-number pseudo-device " + path));
+  }
+  const std::string path;
+  int fd;
+};
+
+#endif // BOOST_WINDOWS
+
+BOOST_RANDOM_DECL pdalboost::random::random_device::random_device()
+  : pimpl(new impl(default_token))
+{}
+
+BOOST_RANDOM_DECL pdalboost::random::random_device::random_device(const std::string& token)
+  : pimpl(new impl(token))
+{}
+
+BOOST_RANDOM_DECL pdalboost::random_device::~random_device()
+{
+  delete pimpl;
+}
+
+BOOST_RANDOM_DECL double pdalboost::random_device::entropy() const
+{
+  return 10;
+}
+
+BOOST_RANDOM_DECL unsigned int pdalboost::random_device::operator()()
+{
+  return pimpl->next();
+}
diff --git a/vendor/pdalboost/libs/regex/src/c_regex_traits.cpp b/vendor/pdalboost/libs/regex/src/c_regex_traits.cpp
new file mode 100644
index 0000000..c0f4e47
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/c_regex_traits.cpp
@@ -0,0 +1,206 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE:        c_regex_traits.cpp
+  *   VERSION:     see <boost/version.hpp>
+  *   DESCRIPTION: Implements out of line c_regex_traits<char> members
+  */
+
+
+#define BOOST_REGEX_SOURCE
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+#include "internals.hpp"
+
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x560)
+
+#include <boost/regex/v4/c_regex_traits.hpp>
+#include <boost/regex/v4/primary_transform.hpp>
+#include <boost/regex/v4/regex_traits_defaults.hpp>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{
+   using ::strxfrm; using ::isspace;
+   using ::ispunct; using ::isalpha;
+   using ::isalnum; using ::iscntrl;
+   using ::isprint; using ::isupper;
+   using ::islower; using ::isdigit;
+   using ::isxdigit; using ::strtol;
+}
+#endif
+
+#ifdef BOOST_HAS_ABI_HEADERS
+#  include BOOST_ABI_PREFIX
+#endif
+
+namespace pdalboost{
+
+c_regex_traits<char>::string_type BOOST_REGEX_CALL c_regex_traits<char>::transform(const char* p1, const char* p2)
+{ 
+   std::string result(10, ' ');
+   std::size_t s = result.size();
+   std::size_t r;
+   std::string src(p1, p2);
+   while(s < (r = std::strxfrm(&*result.begin(), src.c_str(), s)))
+   {
+#if defined(_CPPLIB_VER)
+      //
+      // A bug in VC11 and 12 causes the program to hang if we pass a null-string
+      // to std::strxfrm, but only for certain locales :-(
+      // Probably effects Intel and Clang or any compiler using the VC std library (Dinkumware).
+      //
+      if(r == INT_MAX)
+      {
+         result.erase();
+         result.insert(result.begin(), static_cast<char>(0));
+         return result;
+      }
+#endif
+      result.append(r - s + 3, ' ');
+      s = result.size();
+   }
+   result.erase(r);
+   return result; 
+}
+
+c_regex_traits<char>::string_type BOOST_REGEX_CALL c_regex_traits<char>::transform_primary(const char* p1, const char* p2)
+{
+   static char s_delim;
+   static const int s_collate_type = ::pdalboost::BOOST_REGEX_DETAIL_NS::find_sort_syntax(static_cast<c_regex_traits<char>*>(0), &s_delim);
+   std::string result;
+   //
+   // What we do here depends upon the format of the sort key returned by
+   // sort key returned by this->transform:
+   //
+   switch(s_collate_type)
+   {
+   case ::pdalboost::BOOST_REGEX_DETAIL_NS::sort_C:
+   case ::pdalboost::BOOST_REGEX_DETAIL_NS::sort_unknown:
+      // the best we can do is translate to lower case, then get a regular sort key:
+      {
+         result.assign(p1, p2);
+         for(std::string::size_type i = 0; i < result.size(); ++i)
+            result[i] = static_cast<char>((std::tolower)(static_cast<unsigned char>(result[i])));
+         result = transform(&*result.begin(), &*result.begin() + result.size());
+         break;
+      }
+   case ::pdalboost::BOOST_REGEX_DETAIL_NS::sort_fixed:
+      {
+         // get a regular sort key, and then truncate it:
+         result = transform(p1, p2);
+         result.erase(s_delim);
+         break;
+      }
+   case ::pdalboost::BOOST_REGEX_DETAIL_NS::sort_delim:
+         // get a regular sort key, and then truncate everything after the delim:
+         result = transform(p1, p2);
+         if(result.size() && (result[0] == s_delim))
+            break;
+         std::size_t i;
+         for(i = 0; i < result.size(); ++i)
+         {
+            if(result[i] == s_delim)
+               break;
+         }
+         result.erase(i);
+         break;
+   }
+   if(result.empty())
+      result = std::string(1, char(0));
+   return result;
+}
+
+c_regex_traits<char>::char_class_type BOOST_REGEX_CALL c_regex_traits<char>::lookup_classname(const char* p1, const char* p2)
+{
+   static const char_class_type masks[] = 
+   {
+      0,
+      char_class_alnum, 
+      char_class_alpha,
+      char_class_blank,
+      char_class_cntrl,
+      char_class_digit,
+      char_class_digit,
+      char_class_graph,
+      char_class_horizontal,
+      char_class_lower,
+      char_class_lower,
+      char_class_print,
+      char_class_punct,
+      char_class_space,
+      char_class_space,
+      char_class_upper,
+      char_class_unicode,
+      char_class_upper,
+      char_class_vertical,
+      char_class_alnum | char_class_word, 
+      char_class_alnum | char_class_word, 
+      char_class_xdigit,
+   };
+
+   int idx = ::pdalboost::BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2);
+   if(idx < 0)
+   {
+      std::string s(p1, p2);
+      for(std::string::size_type i = 0; i < s.size(); ++i)
+         s[i] = static_cast<char>((std::tolower)(static_cast<unsigned char>(s[i])));
+      idx = ::pdalboost::BOOST_REGEX_DETAIL_NS::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
+   }
+   BOOST_ASSERT(std::size_t(idx+1) < sizeof(masks) / sizeof(masks[0]));
+   return masks[idx+1];
+}
+
+bool BOOST_REGEX_CALL c_regex_traits<char>::isctype(char c, char_class_type mask)
+{
+   return
+      ((mask & char_class_space) && (std::isspace)(static_cast<unsigned char>(c)))
+      || ((mask & char_class_print) && (std::isprint)(static_cast<unsigned char>(c)))
+      || ((mask & char_class_cntrl) && (std::iscntrl)(static_cast<unsigned char>(c)))
+      || ((mask & char_class_upper) && (std::isupper)(static_cast<unsigned char>(c)))
+      || ((mask & char_class_lower) && (std::islower)(static_cast<unsigned char>(c)))
+      || ((mask & char_class_alpha) && (std::isalpha)(static_cast<unsigned char>(c)))
+      || ((mask & char_class_digit) && (std::isdigit)(static_cast<unsigned char>(c)))
+      || ((mask & char_class_punct) && (std::ispunct)(static_cast<unsigned char>(c)))
+      || ((mask & char_class_xdigit) && (std::isxdigit)(static_cast<unsigned char>(c)))
+      || ((mask & char_class_blank) && (std::isspace)(static_cast<unsigned char>(c)) && !::pdalboost::BOOST_REGEX_DETAIL_NS::is_separator(c))
+      || ((mask & char_class_word) && (c == '_'))
+      || ((mask & char_class_vertical) && (::pdalboost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == '\v')))
+      || ((mask & char_class_horizontal) && (std::isspace)(static_cast<unsigned char>(c)) && !::pdalboost::BOOST_REGEX_DETAIL_NS::is_separator(c) && (c != '\v'));
+}
+
+c_regex_traits<char>::string_type BOOST_REGEX_CALL c_regex_traits<char>::lookup_collatename(const char* p1, const char* p2)
+{
+   std::string s(p1, p2);
+   s = ::pdalboost::BOOST_REGEX_DETAIL_NS::lookup_default_collate_name(s);
+   if(s.empty() && (p2-p1 == 1))
+      s.append(1, *p1);
+   return s;
+}
+
+int BOOST_REGEX_CALL c_regex_traits<char>::value(char c, int radix)
+{
+   char b[2] = { c, '\0', };
+   char* ep;
+   int result = std::strtol(b, &ep, radix);
+   if(ep == b)
+      return -1;
+   return result;
+}
+
+}
+#ifdef BOOST_HAS_ABI_HEADERS
+#  include BOOST_ABI_SUFFIX
+#endif
+
+#endif
diff --git a/vendor/pdalboost/libs/regex/src/cpp_regex_traits.cpp b/vendor/pdalboost/libs/regex/src/cpp_regex_traits.cpp
new file mode 100644
index 0000000..1b512e0
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/cpp_regex_traits.cpp
@@ -0,0 +1,117 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+ 
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE         cpp_regex_traits.cpp
+  *   VERSION      see <boost/version.hpp>
+  *   DESCRIPTION: Implements cpp_regex_traits<char> (and associated helper classes).
+  */
+
+#define BOOST_REGEX_SOURCE
+#include <boost/config.hpp>
+#ifndef BOOST_NO_STD_LOCALE
+#include <boost/regex/regex_traits.hpp>
+#include <boost/regex/pattern_except.hpp>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{
+   using ::memset;
+}
+#endif
+
+namespace pdalboost{ namespace BOOST_REGEX_DETAIL_NS{
+
+void cpp_regex_traits_char_layer<char>::init() 
+{
+   // we need to start by initialising our syntax map so we know which
+   // character is used for which purpose:
+   std::memset(m_char_map, 0, sizeof(m_char_map));
+#ifndef BOOST_NO_STD_MESSAGES
+#ifndef __IBMCPP__
+   std::messages<char>::catalog cat = static_cast<std::messages<char>::catalog>(-1);
+#else
+   std::messages<char>::catalog cat = reinterpret_cast<std::messages<char>::catalog>(-1);
+#endif
+   std::string cat_name(cpp_regex_traits<char>::get_catalog_name());
+   if(cat_name.size() && (m_pmessages != 0))
+   {
+      cat = this->m_pmessages->open(
+         cat_name, 
+         this->m_locale);
+      if((int)cat < 0)
+      {
+         std::string m("Unable to open message catalog: ");
+         std::runtime_error err(m + cat_name);
+         pdalboost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err);
+      }
+   }
+   //
+   // if we have a valid catalog then load our messages:
+   //
+   if((int)cat >= 0)
+   {
+#ifndef BOOST_NO_EXCEPTIONS
+      try{
+#endif
+         for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i)
+         {
+            string_type mss = this->m_pmessages->get(cat, 0, i, get_default_syntax(i));
+            for(string_type::size_type j = 0; j < mss.size(); ++j)
+            {
+               m_char_map[static_cast<unsigned char>(mss[j])] = i;
+            }
+         }
+         this->m_pmessages->close(cat);
+#ifndef BOOST_NO_EXCEPTIONS
+      }
+      catch(...)
+      {
+         this->m_pmessages->close(cat);
+         throw;
+      }
+#endif
+   }
+   else
+   {
+#endif
+      for(regex_constants::syntax_type j = 1; j < regex_constants::syntax_max; ++j)
+      {
+         const char* ptr = get_default_syntax(j);
+         while(ptr && *ptr)
+         {
+            m_char_map[static_cast<unsigned char>(*ptr)] = j;
+            ++ptr;
+         }
+      }
+#ifndef BOOST_NO_STD_MESSAGES
+   }
+#endif
+   //
+   // finish off by calculating our escape types:
+   //
+   unsigned char i = 'A';
+   do
+   {
+      if(m_char_map[i] == 0)
+      {
+         if(this->m_pctype->is(std::ctype_base::lower, i)) 
+            m_char_map[i] = regex_constants::escape_type_class;
+         else if(this->m_pctype->is(std::ctype_base::upper, i)) 
+            m_char_map[i] = regex_constants::escape_type_not_class;
+      }
+   }while(0xFF != i++);
+}
+
+} // BOOST_REGEX_DETAIL_NS
+} // boost
+#endif
+
diff --git a/vendor/pdalboost/libs/regex/src/cregex.cpp b/vendor/pdalboost/libs/regex/src/cregex.cpp
new file mode 100644
index 0000000..5e3fffa
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/cregex.cpp
@@ -0,0 +1,660 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE:        cregex.cpp
+  *   VERSION:     see <boost/version.hpp>
+  *   DESCRIPTION: Implements high level class pdalboost::RexEx
+  */
+
+
+#define BOOST_REGEX_SOURCE
+
+#include <boost/regex.hpp>
+#include <boost/cregex.hpp>
+#if !defined(BOOST_NO_STD_STRING)
+#include <map>
+#include <list>
+#include <boost/regex/v4/fileiter.hpp>
+typedef pdalboost::match_flag_type match_flag_type;
+#include <cstdio>
+
+#ifdef BOOST_MSVC
+#pragma warning(disable:4309)
+#endif
+#ifdef BOOST_INTEL
+#pragma warning(disable:981 383)
+#endif
+
+namespace pdalboost{
+
+#ifdef __BORLANDC__
+#if __BORLANDC__ < 0x530
+//
+// we need to instantiate the vector classes we use
+// since declaring a reference to type doesn't seem to
+// do the job...
+std::vector<std::size_t> inst1;
+std::vector<std::string> inst2;
+#endif
+#endif
+
+namespace{
+
+template <class iterator>
+std::string to_string(iterator i, iterator j)
+{
+   std::string s;
+   while(i != j)
+   {
+      s.append(1, *i);
+      ++i;
+   }
+   return s;
+}
+
+inline std::string to_string(const char* i, const char* j)
+{
+   return std::string(i, j);
+}
+
+}
+namespace BOOST_REGEX_DETAIL_NS{
+
+class RegExData
+{
+public:
+   enum type
+   {
+      type_pc,
+      type_pf,
+      type_copy
+   };
+   regex e;
+   cmatch m;
+#ifndef BOOST_REGEX_NO_FILEITER
+   match_results<mapfile::iterator> fm;
+#endif
+   type t;
+   const char* pbase;
+#ifndef BOOST_REGEX_NO_FILEITER
+   mapfile::iterator fbase;
+#endif
+   std::map<int, std::string, std::less<int> > strings;
+   std::map<int, std::ptrdiff_t, std::less<int> > positions;
+   void update();
+   void clean();
+   RegExData() : e(), m(),
+#ifndef BOOST_REGEX_NO_FILEITER
+   fm(),
+#endif
+   t(type_copy), pbase(0),
+#ifndef BOOST_REGEX_NO_FILEITER
+   fbase(),
+#endif
+   strings(), positions() {}
+};
+
+void RegExData::update()
+{
+   strings.erase(strings.begin(), strings.end());
+   positions.erase(positions.begin(), positions.end());
+   if(t == type_pc)
+   {
+      for(unsigned int i = 0; i < m.size(); ++i)
+      {
+         if(m[i].matched) strings[i] = std::string(m[i].first, m[i].second);
+         positions[i] = m[i].matched ? m[i].first - pbase : -1;
+      }
+   }
+#ifndef BOOST_REGEX_NO_FILEITER
+   else
+   {
+      for(unsigned int i = 0; i < fm.size(); ++i)
+      {
+         if(fm[i].matched) strings[i] = to_string(fm[i].first, fm[i].second);
+         positions[i] = fm[i].matched ? fm[i].first - fbase : -1;
+      }
+   }
+#endif
+   t = type_copy;
+}
+
+void RegExData::clean()
+{
+#ifndef BOOST_REGEX_NO_FILEITER
+   fbase = mapfile::iterator();
+   fm = match_results<mapfile::iterator>();
+#endif
+}
+
+} // namespace
+
+RegEx::RegEx()
+{
+   pdata = new BOOST_REGEX_DETAIL_NS::RegExData();
+}
+
+RegEx::RegEx(const RegEx& o)
+{
+   pdata = new BOOST_REGEX_DETAIL_NS::RegExData(*(o.pdata));
+}
+
+RegEx::~RegEx()
+{
+   delete pdata;
+}
+
+RegEx::RegEx(const char* c, bool icase)
+{
+   pdata = new BOOST_REGEX_DETAIL_NS::RegExData();
+   SetExpression(c, icase);
+}
+
+RegEx::RegEx(const std::string& s, bool icase)
+{
+   pdata = new BOOST_REGEX_DETAIL_NS::RegExData();
+   SetExpression(s.c_str(), icase);
+}
+
+RegEx& RegEx::operator=(const RegEx& o)
+{
+   *pdata = *(o.pdata);
+   return *this;
+}
+
+RegEx& RegEx::operator=(const char* p)
+{
+   SetExpression(p, false);
+   return *this;
+}
+
+unsigned int RegEx::SetExpression(const char* p, bool icase)
+{
+   pdalboost::uint_fast32_t f = icase ? regex::normal | regex::icase : regex::normal;
+   return pdata->e.set_expression(p, f);
+}
+
+unsigned int RegEx::error_code()const
+{
+   return pdata->e.error_code();
+}
+
+
+std::string RegEx::Expression()const
+{
+   return pdata->e.expression();
+}
+
+//
+// now matching operators:
+//
+bool RegEx::Match(const char* p, match_flag_type flags)
+{
+   pdata->t = BOOST_REGEX_DETAIL_NS::RegExData::type_pc;
+   pdata->pbase = p;
+   const char* end = p;
+   while(*end)++end;
+
+   if(regex_match(p, end, pdata->m, pdata->e, flags))
+   {
+      pdata->update();
+      return true;
+   }
+   return false;
+}
+
+bool RegEx::Search(const char* p, match_flag_type flags)
+{
+   pdata->t = BOOST_REGEX_DETAIL_NS::RegExData::type_pc;
+   pdata->pbase = p;
+   const char* end = p;
+   while(*end)++end;
+
+   if(regex_search(p, end, pdata->m, pdata->e, flags))
+   {
+      pdata->update();
+      return true;
+   }
+   return false;
+}
+namespace BOOST_REGEX_DETAIL_NS{
+struct pred1
+{
+   GrepCallback cb;
+   RegEx* pe;
+   pred1(GrepCallback c, RegEx* i) : cb(c), pe(i) {}
+   bool operator()(const cmatch& m)
+   {
+      pe->pdata->m = m;
+      return cb(*pe);
+   }
+};
+}
+unsigned int RegEx::Grep(GrepCallback cb, const char* p, match_flag_type flags)
+{
+   pdata->t = BOOST_REGEX_DETAIL_NS::RegExData::type_pc;
+   pdata->pbase = p;
+   const char* end = p;
+   while(*end)++end;
+
+   unsigned int result = regex_grep(BOOST_REGEX_DETAIL_NS::pred1(cb, this), p, end, pdata->e, flags);
+   if(result)
+      pdata->update();
+   return result;
+}
+namespace BOOST_REGEX_DETAIL_NS{
+struct pred2
+{
+   std::vector<std::string>& v;
+   RegEx* pe;
+   pred2(std::vector<std::string>& o, RegEx* e) : v(o), pe(e) {}
+   bool operator()(const cmatch& m)
+   {
+      pe->pdata->m = m;
+      v.push_back(std::string(m[0].first, m[0].second));
+      return true;
+   }
+private:
+   pred2& operator=(const pred2&);
+};
+}
+
+unsigned int RegEx::Grep(std::vector<std::string>& v, const char* p, match_flag_type flags)
+{
+   pdata->t = BOOST_REGEX_DETAIL_NS::RegExData::type_pc;
+   pdata->pbase = p;
+   const char* end = p;
+   while(*end)++end;
+
+   unsigned int result = regex_grep(BOOST_REGEX_DETAIL_NS::pred2(v, this), p, end, pdata->e, flags);
+   if(result)
+      pdata->update();
+   return result;
+}
+namespace BOOST_REGEX_DETAIL_NS{
+struct pred3
+{
+   std::vector<std::size_t>& v;
+   const char* base;
+   RegEx* pe;
+   pred3(std::vector<std::size_t>& o, const char* pb, RegEx* p) : v(o), base(pb), pe(p) {}
+   bool operator()(const cmatch& m)
+   {
+      pe->pdata->m = m;
+      v.push_back(static_cast<std::size_t>(m[0].first - base));
+      return true;
+   }
+private:
+   pred3& operator=(const pred3&);
+};
+}
+unsigned int RegEx::Grep(std::vector<std::size_t>& v, const char* p, match_flag_type flags)
+{
+   pdata->t = BOOST_REGEX_DETAIL_NS::RegExData::type_pc;
+   pdata->pbase = p;
+   const char* end = p;
+   while(*end)++end;
+
+   unsigned int result = regex_grep(BOOST_REGEX_DETAIL_NS::pred3(v, p, this), p, end, pdata->e, flags);
+   if(result)
+      pdata->update();
+   return result;
+}
+#ifndef BOOST_REGEX_NO_FILEITER
+namespace BOOST_REGEX_DETAIL_NS{
+struct pred4
+{
+   GrepFileCallback cb;
+   RegEx* pe;
+   const char* file;
+   bool ok;
+   pred4(GrepFileCallback c, RegEx* i, const char* f) : cb(c), pe(i), file(f), ok(true) {}
+   bool operator()(const match_results<mapfile::iterator>& m)
+   {
+      pe->pdata->t = RegExData::type_pf;
+      pe->pdata->fm = m;
+      pe->pdata->update();
+      ok = cb(file, *pe);
+      return ok;
+   }
+};
+}
+namespace{
+void BuildFileList(std::list<std::string>* pl, const char* files, bool recurse)
+{
+   file_iterator start(files);
+   file_iterator end;
+   if(recurse)
+   {
+      // go through sub directories:
+      char buf[MAX_PATH];
+      BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(buf, MAX_PATH, start.root()));
+      if(*buf == 0)
+      {
+         BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(buf, MAX_PATH, "."));
+         BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcat_s(buf, MAX_PATH, directory_iterator::separator()));
+         BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcat_s(buf, MAX_PATH, "*"));
+      }
+      else
+      {
+         BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcat_s(buf, MAX_PATH, directory_iterator::separator()));
+         BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcat_s(buf, MAX_PATH, "*"));
+      }
+      directory_iterator dstart(buf);
+      directory_iterator dend;
+
+      // now get the file mask bit of "files":
+      const char* ptr = files;
+      while(*ptr) ++ptr;
+      while((ptr != files) && (*ptr != *directory_iterator::separator()) && (*ptr != '/'))--ptr;
+      if(ptr != files) ++ptr;
+
+      while(dstart != dend)
+      {
+         // Verify that sprintf will not overflow:
+         if(std::strlen(dstart.path()) + std::strlen(directory_iterator::separator()) + std::strlen(ptr) >= MAX_PATH)
+         {
+            // Oops overflow, skip this item:
+            ++dstart;
+            continue;
+         }
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(_WIN32_WCE) && !defined(UNDER_CE)
+         int r = (::sprintf_s)(buf, sizeof(buf), "%s%s%s", dstart.path(), directory_iterator::separator(), ptr);
+#else
+         int r = (std::sprintf)(buf, "%s%s%s", dstart.path(), directory_iterator::separator(), ptr);
+#endif
+         if(r < 0)
+         {
+            // sprintf failed, skip this item:
+            ++dstart;
+            continue;
+         }
+         BuildFileList(pl, buf, recurse);
+         ++dstart;
+      }
+   }
+   while(start != end)
+   {
+      pl->push_back(*start);
+      ++start;
+   }
+}
+}
+
+unsigned int RegEx::GrepFiles(GrepFileCallback cb, const char* files, bool recurse, match_flag_type flags)
+{
+   unsigned int result = 0;
+   std::list<std::string> file_list;
+   BuildFileList(&file_list, files, recurse);
+   std::list<std::string>::iterator start, end;
+   start = file_list.begin();
+   end = file_list.end();
+
+   while(start != end)
+   {
+      mapfile map((*start).c_str());
+      pdata->t = BOOST_REGEX_DETAIL_NS::RegExData::type_pf;
+      pdata->fbase = map.begin();
+      BOOST_REGEX_DETAIL_NS::pred4 pred(cb, this, (*start).c_str());
+      int r = regex_grep(pred, map.begin(), map.end(), pdata->e, flags);
+      result += r;
+      ++start;
+      pdata->clean();
+      if(pred.ok == false)
+         return result;
+   }
+
+   return result;
+}
+
+
+unsigned int RegEx::FindFiles(FindFilesCallback cb, const char* files, bool recurse, match_flag_type flags)
+{
+   unsigned int result = 0;
+   std::list<std::string> file_list;
+   BuildFileList(&file_list, files, recurse);
+   std::list<std::string>::iterator start, end;
+   start = file_list.begin();
+   end = file_list.end();
+
+   while(start != end)
+   {
+      mapfile map((*start).c_str());
+      pdata->t = BOOST_REGEX_DETAIL_NS::RegExData::type_pf;
+      pdata->fbase = map.begin();
+
+      if(regex_search(map.begin(), map.end(), pdata->fm, pdata->e, flags))
+      {
+         ++result;
+         if(false == cb((*start).c_str()))
+            return result;
+      }
+      //pdata->update();
+      ++start;
+      //pdata->clean();
+   }
+
+   return result;
+}
+#endif
+
+#ifdef BOOST_REGEX_V3
+#define regex_replace regex_merge
+#endif
+
+std::string RegEx::Merge(const std::string& in, const std::string& fmt,
+                    bool copy, match_flag_type flags)
+{
+   std::string result;
+   BOOST_REGEX_DETAIL_NS::string_out_iterator<std::string> i(result);
+   if(!copy) flags |= format_no_copy;
+   regex_replace(i, in.begin(), in.end(), pdata->e, fmt.c_str(), flags);
+   return result;
+}
+
+std::string RegEx::Merge(const char* in, const char* fmt,
+                    bool copy, match_flag_type flags)
+{
+   std::string result;
+   if(!copy) flags |= format_no_copy;
+   BOOST_REGEX_DETAIL_NS::string_out_iterator<std::string> i(result);
+   regex_replace(i, in, in + std::strlen(in), pdata->e, fmt, flags);
+   return result;
+}
+
+std::size_t RegEx::Split(std::vector<std::string>& v, 
+                      std::string& s,
+                      match_flag_type flags,
+                      unsigned max_count)
+{
+   return regex_split(std::back_inserter(v), s, pdata->e, flags, max_count);
+}
+
+
+
+//
+// now operators for returning what matched in more detail:
+//
+std::size_t RegEx::Position(int i)const
+{
+   switch(pdata->t)
+   {
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pc:
+      return pdata->m[i].matched ? pdata->m[i].first - pdata->pbase : RegEx::npos;
+#ifndef BOOST_REGEX_NO_FILEITER
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pf:
+      return pdata->fm[i].matched ? pdata->fm[i].first - pdata->fbase : RegEx::npos;
+#endif
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_copy:
+      {
+      std::map<int, std::ptrdiff_t, std::less<int> >::iterator pos = pdata->positions.find(i);
+      if(pos == pdata->positions.end())
+         return RegEx::npos;
+      return (*pos).second;
+      }
+   }
+   return RegEx::npos;
+}
+
+std::size_t RegEx::Marks()const
+{
+   return pdata->e.mark_count();
+}
+
+
+std::size_t RegEx::Length(int i)const
+{
+   switch(pdata->t)
+   {
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pc:
+      return pdata->m[i].matched ? pdata->m[i].second - pdata->m[i].first : RegEx::npos;
+#ifndef BOOST_REGEX_NO_FILEITER
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pf:
+      return pdata->fm[i].matched ? pdata->fm[i].second - pdata->fm[i].first : RegEx::npos;
+#endif
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_copy:
+      {
+      std::map<int, std::string, std::less<int> >::iterator pos = pdata->strings.find(i);
+      if(pos == pdata->strings.end())
+         return RegEx::npos;
+      return (*pos).second.size();
+      }
+   }
+   return RegEx::npos;
+}
+
+bool RegEx::Matched(int i)const
+{
+   switch(pdata->t)
+   {
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pc:
+      return pdata->m[i].matched;
+#ifndef BOOST_REGEX_NO_FILEITER
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pf:
+      return pdata->fm[i].matched;
+#endif      
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_copy:
+      {
+      std::map<int, std::string, std::less<int> >::iterator pos = pdata->strings.find(i);
+      if(pos == pdata->strings.end())
+         return false;
+      return true;
+      }
+   }
+   return false;
+}
+
+
+std::string RegEx::What(int i)const
+{
+   std::string result;
+   switch(pdata->t)
+   {
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pc:
+      if(pdata->m[i].matched) 
+         result.assign(pdata->m[i].first, pdata->m[i].second);
+      break;
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_pf:
+      if(pdata->m[i].matched) 
+         result.assign(to_string(pdata->m[i].first, pdata->m[i].second));
+      break;
+   case BOOST_REGEX_DETAIL_NS::RegExData::type_copy:
+      {
+      std::map<int, std::string, std::less<int> >::iterator pos = pdata->strings.find(i);
+      if(pos != pdata->strings.end())
+         result = (*pos).second;
+      break;
+      }
+   }
+   return result;
+}
+
+const std::size_t RegEx::npos = ~static_cast<std::size_t>(0);
+
+} // namespace pdalboost
+
+#if defined(__BORLANDC__) && (__BORLANDC__ >= 0x550) && (__BORLANDC__ <= 0x551) && !defined(_RWSTD_COMPILE_INSTANTIATE)
+//
+// this is an ugly hack to work around an ugly problem:
+// by default this file will produce unresolved externals during
+// linking unless _RWSTD_COMPILE_INSTANTIATE is defined (Borland bug).
+// However if _RWSTD_COMPILE_INSTANTIATE is defined then we get separate
+// copies of basic_string's static data in the RTL and this DLL, this messes
+// with basic_string's memory management and results in run-time crashes,
+// Oh sweet joy of Catch 22....
+//
+namespace std{
+template<> template<>
+basic_string<char>& BOOST_REGEX_DECL
+basic_string<char>::replace<const char*>(char* f1, char* f2, const char* i1, const char* i2)
+{
+   unsigned insert_pos = f1 - begin();
+   unsigned remove_len = f2 - f1;
+   unsigned insert_len = i2 - i1;
+   unsigned org_size = size();
+   if(insert_len > remove_len)
+   {
+      append(insert_len-remove_len, ' ');
+      std::copy_backward(begin() + insert_pos + remove_len, begin() + org_size, end());
+      std::copy(i1, i2, begin() + insert_pos);
+   }
+   else
+   {
+      std::copy(begin() + insert_pos + remove_len, begin() + org_size, begin() + insert_pos + insert_len);
+      std::copy(i1, i2, begin() + insert_pos);
+      erase(size() + insert_len - remove_len);
+   }
+   return *this;
+}
+template<> template<>
+basic_string<wchar_t>& BOOST_REGEX_DECL
+basic_string<wchar_t>::replace<const wchar_t*>(wchar_t* f1, wchar_t* f2, const wchar_t* i1, const wchar_t* i2)
+{
+   unsigned insert_pos = f1 - begin();
+   unsigned remove_len = f2 - f1;
+   unsigned insert_len = i2 - i1;
+   unsigned org_size = size();
+   if(insert_len > remove_len)
+   {
+      append(insert_len-remove_len, ' ');
+      std::copy_backward(begin() + insert_pos + remove_len, begin() + org_size, end());
+      std::copy(i1, i2, begin() + insert_pos);
+   }
+   else
+   {
+      std::copy(begin() + insert_pos + remove_len, begin() + org_size, begin() + insert_pos + insert_len);
+      std::copy(i1, i2, begin() + insert_pos);
+      erase(size() + insert_len - remove_len);
+   }
+   return *this;
+}
+} // namespace std
+#endif
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vendor/pdalboost/libs/regex/src/fileiter.cpp b/vendor/pdalboost/libs/regex/src/fileiter.cpp
new file mode 100644
index 0000000..d6d64e9
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/fileiter.cpp
@@ -0,0 +1,928 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+ 
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE:        fileiter.cpp
+  *   VERSION:     see <boost/version.hpp>
+  *   DESCRIPTION: Implements file io primitives + directory searching for class pdalboost::RegEx.
+  */
+
+
+#define BOOST_REGEX_SOURCE
+
+#include <boost/config.hpp>
+#include <climits>
+#include <stdexcept>
+#include <string>
+#include <boost/throw_exception.hpp>
+#include <boost/regex/v4/fileiter.hpp>
+#include <boost/regex/v4/regex_workaround.hpp>
+#include <boost/regex/pattern_except.hpp>
+
+#include <cstdio>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+   using ::sprintf;
+   using ::fseek;
+   using ::fread;
+   using ::ftell;
+   using ::fopen;
+   using ::fclose;
+   using ::FILE;
+   using ::strcpy;
+   using ::strcpy;
+   using ::strcat;
+   using ::strcmp;
+   using ::strlen;
+}
+#endif
+
+
+#ifndef BOOST_REGEX_NO_FILEITER
+
+#if defined(__CYGWIN__) || defined(__CYGWIN32__)
+#include <sys/cygwin.h>
+#endif
+
+#ifdef BOOST_MSVC
+#  pragma warning(disable: 4800)
+#endif
+
+namespace pdalboost{
+   namespace BOOST_REGEX_DETAIL_NS{
+// start with the operating system specific stuff:
+
+#if (defined(__BORLANDC__) || defined(BOOST_REGEX_FI_WIN32_DIR) || defined(BOOST_MSVC)) && !defined(BOOST_RE_NO_WIN32)
+
+// platform is DOS or Windows
+// directories are separated with '\\'
+// and names are insensitive of case
+
+BOOST_REGEX_DECL const char* _fi_sep = "\\";
+const char* _fi_sep_alt = "/";
+#define BOOST_REGEX_FI_TRANSLATE(c) std::tolower(c)
+
+#else
+
+// platform is not DOS or Windows
+// directories are separated with '/'
+// and names are sensitive of case
+
+BOOST_REGEX_DECL const char* _fi_sep = "/";
+const char* _fi_sep_alt = _fi_sep;
+#define BOOST_REGEX_FI_TRANSLATE(c) c
+
+#endif
+
+#ifdef BOOST_REGEX_FI_WIN32_MAP
+
+void mapfile::open(const char* file)
+{
+#if defined(BOOST_NO_ANSI_APIS)
+   int filename_size = strlen(file);
+   LPWSTR wide_file = (LPWSTR)_alloca( (filename_size + 1) * sizeof(WCHAR) );
+   if(::MultiByteToWideChar(CP_ACP, 0,  file, filename_size,  wide_file, filename_size + 1) == 0)
+      hfile = INVALID_HANDLE_VALUE;
+   else
+      hfile = CreateFileW(wide_file, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
+#elif defined(__CYGWIN__)||defined(__CYGWIN32__)
+   char win32file[ MAX_PATH ];
+   cygwin_conv_to_win32_path( file, win32file );
+   hfile = CreateFileA(win32file, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
+#else
+   hfile = CreateFileA(file, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
+#endif
+   if(hfile != INVALID_HANDLE_VALUE)
+   {
+      hmap = CreateFileMapping(hfile, 0, PAGE_READONLY, 0, 0, 0);
+      if((hmap == INVALID_HANDLE_VALUE) || (hmap == NULL))
+      {
+         CloseHandle(hfile);
+         hmap = 0;
+         hfile = 0;
+         std::runtime_error err("Unable to create file mapping.");
+         pdalboost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err);
+      }
+      _first = static_cast<const char*>(MapViewOfFile(hmap, FILE_MAP_READ, 0, 0, 0));
+      if(_first == 0)
+      {
+         CloseHandle(hmap);
+         CloseHandle(hfile);
+         hmap = 0;
+         hfile = 0;
+         std::runtime_error err("Unable to create file mapping.");
+      }
+      _last = _first + GetFileSize(hfile, 0);
+   }
+   else
+   {
+      hfile = 0;
+#ifndef BOOST_NO_EXCEPTIONS
+      throw std::runtime_error("Unable to open file.");
+#else
+      BOOST_REGEX_NOEH_ASSERT(hfile != INVALID_HANDLE_VALUE);
+#endif
+   }
+}
+
+void mapfile::close()
+{
+   if(hfile != INVALID_HANDLE_VALUE)
+   {
+      UnmapViewOfFile((void*)_first);
+      CloseHandle(hmap);
+      CloseHandle(hfile);
+      hmap = hfile = 0;
+      _first = _last = 0;
+   }
+}
+
+#elif !defined(BOOST_RE_NO_STL)
+
+mapfile_iterator& mapfile_iterator::operator = (const mapfile_iterator& i)
+{
+   if(file && node)
+      file->unlock(node);
+   file = i.file;
+   node = i.node;
+   offset = i.offset;
+   if(file)
+      file->lock(node);
+   return *this;
+}
+
+mapfile_iterator& mapfile_iterator::operator++ ()
+{
+   if((++offset == mapfile::buf_size) && file)
+   {
+      ++node;
+      offset = 0;
+      file->lock(node);
+      file->unlock(node-1);
+   }
+   return *this;
+}
+
+mapfile_iterator mapfile_iterator::operator++ (int)
+{
+   mapfile_iterator temp(*this);
+   if((++offset == mapfile::buf_size) && file)
+   {
+      ++node;
+      offset = 0;
+      file->lock(node);
+      file->unlock(node-1);
+   }
+   return temp;
+}
+
+mapfile_iterator& mapfile_iterator::operator-- ()
+{
+   if((offset == 0) && file)
+   {
+      --node;
+      offset = mapfile::buf_size - 1;
+      file->lock(node);
+      file->unlock(node + 1);
+   }
+   else
+      --offset;
+   return *this;
+}
+
+mapfile_iterator mapfile_iterator::operator-- (int)
+{
+   mapfile_iterator temp(*this);
+   if((offset == 0) && file)
+   {
+      --node;
+      offset = mapfile::buf_size - 1;
+      file->lock(node);
+      file->unlock(node + 1);
+   }
+   else
+      --offset;
+   return temp;
+}
+
+mapfile_iterator operator + (const mapfile_iterator& i, long off)
+{
+   mapfile_iterator temp(i);
+   temp += off;
+   return temp;
+}
+
+mapfile_iterator operator - (const mapfile_iterator& i, long off)
+{
+   mapfile_iterator temp(i);
+   temp -= off;
+   return temp;
+}
+
+mapfile::iterator mapfile::begin()const
+{
+   return mapfile_iterator(this, 0);
+}
+
+mapfile::iterator mapfile::end()const
+{
+   return mapfile_iterator(this, _size);
+}
+
+void mapfile::lock(pointer* node)const
+{
+   BOOST_ASSERT(node >= _first);
+   BOOST_ASSERT(node <= _last);
+   if(node < _last)
+   {
+      if(*node == 0)
+      {
+         if(condemed.empty())
+         {
+            *node = new char[sizeof(int) + buf_size];
+            *(reinterpret_cast<int*>(*node)) = 1;
+         }
+         else
+         {
+            pointer* p = condemed.front();
+            condemed.pop_front();
+            *node = *p;
+            *p = 0;
+            *(reinterpret_cast<int*>(*node)) = 1;
+         }
+ 
+        std::size_t read_size = 0; 
+        int read_pos = std::fseek(hfile, (node - _first) * buf_size, SEEK_SET); 
+
+        if(0 == read_pos && node == _last - 1) 
+           read_size = std::fread(*node + sizeof(int), _size % buf_size, 1, hfile); 
+        else
+           read_size = std::fread(*node + sizeof(int), buf_size, 1, hfile);
+        if((read_size == 0) || (std::ferror(hfile)))
+        { 
+#ifndef BOOST_NO_EXCEPTIONS 
+           unlock(node);
+           throw std::runtime_error("Unable to read file."); 
+#else 
+           BOOST_REGEX_NOEH_ASSERT((0 == std::ferror(hfile)) && (read_size != 0)); 
+#endif 
+        } 
+      }
+      else
+      {
+         if(*reinterpret_cast<int*>(*node) == 0)
+         {
+            *reinterpret_cast<int*>(*node) = 1;
+            condemed.remove(node);
+         }
+         else
+            ++(*reinterpret_cast<int*>(*node));
+      }
+   }
+}
+
+void mapfile::unlock(pointer* node)const
+{
+   BOOST_ASSERT(node >= _first);
+   BOOST_ASSERT(node <= _last);
+   if(node < _last)
+   {
+      if(--(*reinterpret_cast<int*>(*node)) == 0)
+      {
+         condemed.push_back(node);
+      }
+   }
+}
+
+long int get_file_length(std::FILE* hfile)
+{
+   long int result;
+   std::fseek(hfile, 0, SEEK_END);
+   result = std::ftell(hfile);
+   std::fseek(hfile, 0, SEEK_SET);
+   return result;
+}
+
+
+void mapfile::open(const char* file)
+{
+   hfile = std::fopen(file, "rb");
+#ifndef BOOST_NO_EXCEPTIONS
+   try{
+#endif
+   if(hfile != 0)
+   {
+      _size = get_file_length(hfile);
+      long cnodes = (_size + buf_size - 1) / buf_size;
+
+      // check that number of nodes is not too high:
+      if(cnodes > (long)((INT_MAX) / sizeof(pointer*)))
+      {
+         std::fclose(hfile);
+         hfile = 0;
+         _size = 0;
+         return;
+      }
+
+      _first = new pointer[(int)cnodes];
+      _last = _first + cnodes;
+      std::memset(_first, 0, cnodes*sizeof(pointer));
+   }
+   else
+   {
+       std::runtime_error err("Unable to open file.");
+   }
+#ifndef BOOST_NO_EXCEPTIONS
+   }catch(...)
+   { close(); throw; }
+#endif
+}
+
+void mapfile::close()
+{
+   if(hfile != 0)
+   {
+      pointer* p = _first;
+      while(p != _last)
+      {
+         if(*p)
+            delete[] *p;
+         ++p;
+      }
+      delete[] _first;
+      _size = 0;
+      _first = _last = 0;
+      std::fclose(hfile);
+      hfile = 0;
+      condemed.erase(condemed.begin(), condemed.end());
+   }
+}
+
+
+#endif
+
+inline _fi_find_handle find_first_file(const char* wild,  _fi_find_data& data)
+{
+#ifdef BOOST_NO_ANSI_APIS
+   std::size_t wild_size = std::strlen(wild);
+   LPWSTR wide_wild = (LPWSTR)_alloca( (wild_size + 1) * sizeof(WCHAR) );
+   if (::MultiByteToWideChar(CP_ACP, 0,  wild, wild_size,  wide_wild, wild_size + 1) == 0)
+      return _fi_invalid_handle;
+
+   return FindFirstFileW(wide_wild, &data);
+#else
+   return FindFirstFileA(wild, &data);
+#endif
+}
+
+inline bool find_next_file(_fi_find_handle hf,  _fi_find_data& data)
+{
+#ifdef BOOST_NO_ANSI_APIS
+   return FindNextFileW(hf, &data);
+#else
+   return FindNextFileA(hf, &data);
+#endif
+}
+   
+inline void copy_find_file_result_with_overflow_check(const _fi_find_data& data,  char* path, size_t max_size)
+{
+#ifdef BOOST_NO_ANSI_APIS
+   if (::WideCharToMultiByte(CP_ACP, 0,  data.cFileName, -1,  path, max_size,  NULL, NULL) == 0)
+      BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(1);
+#else
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(path, max_size,  data.cFileName));
+#endif
+}
+
+inline bool is_not_current_or_parent_path_string(const _fi_find_data& data)
+{
+#ifdef BOOST_NO_ANSI_APIS
+   return (std::wcscmp(data.cFileName, L".") && std::wcscmp(data.cFileName, L".."));
+#else
+   return (std::strcmp(data.cFileName, ".") && std::strcmp(data.cFileName, ".."));
+#endif
+}
+
+
+file_iterator::file_iterator()
+{
+   _root = _path = 0;
+   ref = 0;
+#ifndef BOOST_NO_EXCEPTIONS
+   try{
+#endif
+   _root = new char[MAX_PATH];
+   BOOST_REGEX_NOEH_ASSERT(_root)
+   _path = new char[MAX_PATH];
+   BOOST_REGEX_NOEH_ASSERT(_path)
+   ptr = _path;
+   *_path = 0;
+   *_root = 0;
+   ref = new file_iterator_ref();
+   BOOST_REGEX_NOEH_ASSERT(ref)
+   ref->hf = _fi_invalid_handle;
+   ref->count = 1;
+#ifndef BOOST_NO_EXCEPTIONS
+   }
+   catch(...)
+   {
+      delete[] _root;
+      delete[] _path;
+      delete ref;
+      throw;
+   }
+#endif
+}
+
+file_iterator::file_iterator(const char* wild)
+{
+   _root = _path = 0;
+   ref = 0;
+#ifndef BOOST_NO_EXCEPTIONS
+   try{
+#endif
+   _root = new char[MAX_PATH];
+   BOOST_REGEX_NOEH_ASSERT(_root)
+   _path = new char[MAX_PATH];
+   BOOST_REGEX_NOEH_ASSERT(_path)
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_root, MAX_PATH, wild));
+   ptr = _root;
+   while(*ptr)++ptr;
+   while((ptr > _root) && (*ptr != *_fi_sep) && (*ptr != *_fi_sep_alt))--ptr;
+   if((ptr == _root) && ( (*ptr== *_fi_sep) || (*ptr==*_fi_sep_alt) ) )
+   {
+     _root[1]='\0';
+     BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, _root));
+   }
+   else
+   {
+     *ptr = 0;
+     BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, _root));
+     if(*_path == 0)
+       BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, "."));
+     BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcat_s(_path, MAX_PATH, _fi_sep));
+   }
+   ptr = _path + std::strlen(_path);
+
+   ref = new file_iterator_ref();
+   BOOST_REGEX_NOEH_ASSERT(ref)
+   ref->hf = find_first_file(wild,  ref->_data);
+   ref->count = 1;
+
+   if(ref->hf == _fi_invalid_handle)
+   {
+      *_path = 0;
+      ptr = _path;
+   }
+   else
+   {
+      copy_find_file_result_with_overflow_check(ref->_data,  ptr, (MAX_PATH - (ptr - _path)));
+      if(ref->_data.dwFileAttributes & _fi_dir)
+         next();
+   }
+#ifndef BOOST_NO_EXCEPTIONS
+   }
+   catch(...)
+   {
+      delete[] _root;
+      delete[] _path;
+      delete ref;
+      throw;
+   }
+#endif
+}
+
+file_iterator::file_iterator(const file_iterator& other)
+{
+   _root = _path = 0;
+   ref = 0;
+#ifndef BOOST_NO_EXCEPTIONS
+   try{
+#endif
+   _root = new char[MAX_PATH];
+   BOOST_REGEX_NOEH_ASSERT(_root)
+   _path = new char[MAX_PATH];
+   BOOST_REGEX_NOEH_ASSERT(_path)
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_root, MAX_PATH, other._root));
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, other._path));
+   ptr = _path + (other.ptr - other._path);
+   ref = other.ref;
+#ifndef BOOST_NO_EXCEPTIONS
+   }
+   catch(...)
+   {
+      delete[] _root;
+      delete[] _path;
+      throw;
+   }
+#endif
+   ++(ref->count);
+}
+
+file_iterator& file_iterator::operator=(const file_iterator& other)
+{
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_root, MAX_PATH, other._root));
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, other._path));
+   ptr = _path + (other.ptr - other._path);
+   if(--(ref->count) == 0)
+   {
+      if(ref->hf != _fi_invalid_handle)
+         FindClose(ref->hf);
+      delete ref;
+   }
+   ref = other.ref;
+   ++(ref->count);
+   return *this;
+}
+
+
+file_iterator::~file_iterator()
+{
+   delete[] _root;
+   delete[] _path;
+   if(--(ref->count) == 0)
+   {
+      if(ref->hf != _fi_invalid_handle)
+         FindClose(ref->hf);
+      delete ref;
+   }
+}
+
+file_iterator file_iterator::operator++(int)
+{
+   file_iterator temp(*this);
+   next();
+   return temp;
+}
+
+
+void file_iterator::next()
+{
+   if(ref->hf != _fi_invalid_handle)
+   {
+      bool cont = true;
+      while(cont)
+      {
+         cont = find_next_file(ref->hf, ref->_data);
+         if(cont && ((ref->_data.dwFileAttributes & _fi_dir) == 0))
+            break;
+      }
+      if(!cont)
+      {
+         // end of sequence
+         FindClose(ref->hf);
+         ref->hf = _fi_invalid_handle;
+         *_path = 0;
+         ptr = _path;
+      }
+      else
+         copy_find_file_result_with_overflow_check(ref->_data,  ptr, MAX_PATH - (ptr - _path));
+   }
+}
+
+
+
+directory_iterator::directory_iterator()
+{
+   _root = _path = 0;
+   ref = 0;
+#ifndef BOOST_NO_EXCEPTIONS
+   try{
+#endif
+   _root = new char[MAX_PATH];
+   BOOST_REGEX_NOEH_ASSERT(_root)
+   _path = new char[MAX_PATH];
+   BOOST_REGEX_NOEH_ASSERT(_path)
+   ptr = _path;
+   *_path = 0;
+   *_root = 0;
+   ref = new file_iterator_ref();
+   BOOST_REGEX_NOEH_ASSERT(ref)
+   ref->hf = _fi_invalid_handle;
+   ref->count = 1;
+#ifndef BOOST_NO_EXCEPTIONS
+   }
+   catch(...)
+   {
+      delete[] _root;
+      delete[] _path;
+      delete ref;
+      throw;
+   }
+#endif
+}
+
+directory_iterator::directory_iterator(const char* wild)
+{
+   _root = _path = 0;
+   ref = 0;
+#ifndef BOOST_NO_EXCEPTIONS
+   try{
+#endif
+   _root = new char[MAX_PATH];
+   BOOST_REGEX_NOEH_ASSERT(_root)
+   _path = new char[MAX_PATH];
+   BOOST_REGEX_NOEH_ASSERT(_path)
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_root, MAX_PATH, wild));
+   ptr = _root;
+   while(*ptr)++ptr;
+   while((ptr > _root) && (*ptr != *_fi_sep) && (*ptr != *_fi_sep_alt))--ptr;
+
+   if((ptr == _root) && ( (*ptr== *_fi_sep) || (*ptr==*_fi_sep_alt) ) )
+   {
+     _root[1]='\0';
+     BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, _root));
+   }
+   else
+   {
+     *ptr = 0;
+     BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, _root));
+     if(*_path == 0)
+       BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, "."));
+     BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcat_s(_path, MAX_PATH, _fi_sep));
+   }
+   ptr = _path + std::strlen(_path);
+
+   ref = new file_iterator_ref();
+   BOOST_REGEX_NOEH_ASSERT(ref)
+   ref->count = 1;
+   ref->hf = find_first_file(wild,  ref->_data);
+   if(ref->hf == _fi_invalid_handle)
+   {
+      *_path = 0;
+      ptr = _path;
+   }
+   else
+   {
+      copy_find_file_result_with_overflow_check(ref->_data,  ptr, MAX_PATH - (ptr - _path));
+      if(((ref->_data.dwFileAttributes & _fi_dir) == 0) || (std::strcmp(ptr, ".") == 0) || (std::strcmp(ptr, "..") == 0))
+         next();
+   }
+#ifndef BOOST_NO_EXCEPTIONS
+   }
+   catch(...)
+   {
+      delete[] _root;
+      delete[] _path;
+      delete ref;
+      throw;
+   }
+#endif
+}
+
+directory_iterator::~directory_iterator()
+{
+   delete[] _root;
+   delete[] _path;
+   if(--(ref->count) == 0)
+   {
+      if(ref->hf != _fi_invalid_handle)
+         FindClose(ref->hf);
+      delete ref;
+   }
+}
+
+directory_iterator::directory_iterator(const directory_iterator& other)
+{
+   _root = _path = 0;
+   ref = 0;
+#ifndef BOOST_NO_EXCEPTIONS
+   try{
+#endif
+   _root = new char[MAX_PATH];
+   BOOST_REGEX_NOEH_ASSERT(_root)
+   _path = new char[MAX_PATH];
+   BOOST_REGEX_NOEH_ASSERT(_path)
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_root, MAX_PATH, other._root));
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, other._path));
+   ptr = _path + (other.ptr - other._path);
+   ref = other.ref;
+#ifndef BOOST_NO_EXCEPTIONS
+   }
+   catch(...)
+   {
+      delete[] _root;
+      delete[] _path;
+      throw;
+   }
+#endif
+   ++(ref->count);
+}
+
+directory_iterator& directory_iterator::operator=(const directory_iterator& other)
+{
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_root, MAX_PATH, other._root));
+   BOOST_REGEX_DETAIL_NS::overflow_error_if_not_zero(BOOST_REGEX_DETAIL_NS::strcpy_s(_path, MAX_PATH, other._path));
+   ptr = _path + (other.ptr - other._path);
+   if(--(ref->count) == 0)
+   {
+      if(ref->hf != _fi_invalid_handle)
+         FindClose(ref->hf);
+      delete ref;
+   }
+   ref = other.ref;
+   ++(ref->count);
+   return *this;
+}
+
+directory_iterator directory_iterator::operator++(int)
+{
+   directory_iterator temp(*this);
+   next();
+   return temp;
+}
+
+void directory_iterator::next()
+{
+   if(ref->hf != _fi_invalid_handle)
+   {
+      bool cont = true;
+      while(cont)
+      {
+         cont = find_next_file(ref->hf, ref->_data);
+         if(cont && (ref->_data.dwFileAttributes & _fi_dir))
+         {
+            if(is_not_current_or_parent_path_string(ref->_data))
+               break;
+         }
+      }
+      if(!cont)
+      {
+         // end of sequence
+         FindClose(ref->hf);
+         ref->hf = _fi_invalid_handle;
+         *_path = 0;
+         ptr = _path;
+      }
+      else
+         copy_find_file_result_with_overflow_check(ref->_data,  ptr, MAX_PATH - (ptr - _path));
+   }
+}
+
+
+#ifdef BOOST_REGEX_FI_POSIX_DIR
+
+struct _fi_priv_data
+{
+   char root[MAX_PATH];
+   char* mask;
+   DIR* d;
+   _fi_priv_data(const char* p);
+};
+
+_fi_priv_data::_fi_priv_data(const char* p)
+{
+   std::strcpy(root, p);
+   mask = root;
+   while(*mask) ++mask;
+   while((mask > root) && (*mask != *_fi_sep) && (*mask != *_fi_sep_alt)) --mask;
+   if(mask == root && ((*mask== *_fi_sep) || (*mask == *_fi_sep_alt)) )
+   {
+      root[1] = '\0';
+      std::strcpy(root+2, p+1);
+      mask = root+2;
+   }
+   else if(mask == root)
+   {
+      root[0] = '.';
+      root[1] = '\0';
+      std::strcpy(root+2, p);
+      mask = root+2;
+   }
+   else
+   {
+      *mask = 0;
+      ++mask;
+   }
+}
+
+bool iswild(const char* mask, const char* name)
+{
+   while(*mask && *name)
+   {
+      switch(*mask)
+      {
+      case '?':
+         ++name;
+         ++mask;
+         continue;
+      case '*':
+         ++mask;
+         if(*mask == 0)
+            return true;
+         while(*name)
+         {
+            if(iswild(mask, name))
+               return true;
+            ++name;
+         }
+         return false;
+      case '.':
+         if(0 == *name)
+         {
+            ++mask;
+            continue;
+         }
+         // fall through:
+      default:
+         if(BOOST_REGEX_FI_TRANSLATE(*mask) != BOOST_REGEX_FI_TRANSLATE(*name))
+            return false;
+         ++mask;
+         ++name;
+         continue;
+      }
+   }
+   if(*mask != *name)
+      return false;
+   return true;
+}
+
+unsigned _fi_attributes(const char* root, const char* name)
+{
+   char buf[MAX_PATH];
+   // verify that we can not overflow:
+   if(std::strlen(root) + std::strlen(_fi_sep) + std::strlen(name) >= MAX_PATH)
+      return 0;
+   int r;
+   if( ( (root[0] == *_fi_sep) || (root[0] == *_fi_sep_alt) ) && (root[1] == '\0') )
+      r = (std::sprintf)(buf, "%s%s", root, name);
+   else
+      r = (std::sprintf)(buf, "%s%s%s", root, _fi_sep, name);
+   if(r < 0)
+      return 0; // sprintf failed
+   DIR* d = opendir(buf);
+   if(d)
+   {
+      closedir(d);
+      return _fi_dir;
+   }
+   return 0;
+}
+
+_fi_find_handle _fi_FindFirstFile(const char* lpFileName, _fi_find_data* lpFindFileData)
+{
+   _fi_find_handle dat = new _fi_priv_data(lpFileName);
+
+   DIR* h = opendir(dat->root);
+   dat->d = h;
+   if(h != 0)
+   {
+      if(_fi_FindNextFile(dat, lpFindFileData))
+         return dat;
+      closedir(h);
+   }
+   delete dat;
+   return 0;
+}
+
+bool _fi_FindNextFile(_fi_find_handle dat, _fi_find_data* lpFindFileData)
+{
+   dirent* d;
+   do
+   {
+      d = readdir(dat->d);
+   } while(d && !iswild(dat->mask, d->d_name));
+
+   if(d)
+   {
+      std::strcpy(lpFindFileData->cFileName, d->d_name);
+      lpFindFileData->dwFileAttributes = _fi_attributes(dat->root, d->d_name);
+      return true;
+   }
+   return false;
+}
+
+bool _fi_FindClose(_fi_find_handle dat)
+{
+   closedir(dat->d);
+   delete dat;
+   return true;
+}
+
+#endif
+
+} // namespace BOOST_REGEX_DETAIL_NS
+} // namspace boost
+
+#endif    // BOOST_REGEX_NO_FILEITER
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vendor/pdalboost/libs/regex/src/icu.cpp b/vendor/pdalboost/libs/regex/src/icu.cpp
new file mode 100644
index 0000000..0e60d15
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/icu.cpp
@@ -0,0 +1,507 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE         icu.cpp
+  *   VERSION      see <boost/version.hpp>
+  *   DESCRIPTION: Unicode regular expressions on top of the ICU Library.
+  */
+#define BOOST_REGEX_SOURCE
+
+#include <boost/regex/config.hpp>
+#ifdef BOOST_HAS_ICU
+#define BOOST_REGEX_ICU_INSTANTIATE
+#include <boost/regex/icu.hpp>
+
+#ifdef BOOST_INTEL
+#pragma warning(disable:981 2259 383)
+#endif
+
+namespace pdalboost{
+
+namespace BOOST_REGEX_DETAIL_NS{
+
+icu_regex_traits_implementation::string_type icu_regex_traits_implementation::do_transform(const char_type* p1, const char_type* p2, const U_NAMESPACE_QUALIFIER Collator* pcoll) const
+{
+   // TODO make thread safe!!!! :
+   typedef u32_to_u16_iterator<const char_type*, ::UChar> itt;
+   itt i(p1), j(p2);
+#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+   std::vector< ::UChar> t(i, j);
+#else
+   std::vector< ::UChar> t;
+   while(i != j)
+      t.push_back(*i++);
+#endif
+   ::uint8_t result[100];
+   ::int32_t len;
+   if(t.size())
+      len = pcoll->getSortKey(&*t.begin(), static_cast< ::int32_t>(t.size()), result, sizeof(result));
+   else
+      len = pcoll->getSortKey(static_cast<UChar const*>(0), static_cast< ::int32_t>(0), result, sizeof(result));
+   if(std::size_t(len) > sizeof(result))
+   {
+      scoped_array< ::uint8_t> presult(new ::uint8_t[len+1]);
+      if(t.size())
+         len = pcoll->getSortKey(&*t.begin(), static_cast< ::int32_t>(t.size()), presult.get(), len+1);
+      else
+         len = pcoll->getSortKey(static_cast<UChar const*>(0), static_cast< ::int32_t>(0), presult.get(), len+1);
+      if((0 == presult[len-1]) && (len > 1))
+         --len;
+#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+      return string_type(presult.get(), presult.get()+len);
+#else
+      string_type sresult;
+      ::uint8_t const* ia = presult.get();
+      ::uint8_t const* ib = presult.get()+len;
+      while(ia != ib)
+         sresult.push_back(*ia++);
+      return sresult;
+#endif
+   }
+   if((0 == result[len-1]) && (len > 1))
+      --len;
+#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+   return string_type(result, result+len);
+#else
+   string_type sresult;
+   ::uint8_t const* ia = result;
+   ::uint8_t const* ib = result+len;
+   while(ia != ib)
+      sresult.push_back(*ia++);
+   return sresult;
+#endif
+}
+
+}
+
+icu_regex_traits::size_type icu_regex_traits::length(const char_type* p)
+{
+   size_type result = 0;
+   while(*p)
+   {
+      ++p;
+      ++result;
+   }
+   return result;
+}
+
+//
+// define our bitmasks:
+//
+const icu_regex_traits::char_class_type icu_regex_traits::mask_blank = icu_regex_traits::char_class_type(1) << offset_blank;
+const icu_regex_traits::char_class_type icu_regex_traits::mask_space = icu_regex_traits::char_class_type(1) << offset_space;
+const icu_regex_traits::char_class_type icu_regex_traits::mask_xdigit = icu_regex_traits::char_class_type(1) << offset_xdigit;
+const icu_regex_traits::char_class_type icu_regex_traits::mask_underscore = icu_regex_traits::char_class_type(1) << offset_underscore;
+const icu_regex_traits::char_class_type icu_regex_traits::mask_unicode = icu_regex_traits::char_class_type(1) << offset_unicode;
+const icu_regex_traits::char_class_type icu_regex_traits::mask_any = icu_regex_traits::char_class_type(1) << offset_any;
+const icu_regex_traits::char_class_type icu_regex_traits::mask_ascii = icu_regex_traits::char_class_type(1) << offset_ascii;
+const icu_regex_traits::char_class_type icu_regex_traits::mask_horizontal = icu_regex_traits::char_class_type(1) << offset_horizontal;
+const icu_regex_traits::char_class_type icu_regex_traits::mask_vertical = icu_regex_traits::char_class_type(1) << offset_vertical;
+
+icu_regex_traits::char_class_type icu_regex_traits::lookup_icu_mask(const ::UChar32* p1, const ::UChar32* p2)
+{
+   static const ::UChar32 prop_name_table[] = {
+      /* any */  'a', 'n', 'y', 
+      /* ascii */  'a', 's', 'c', 'i', 'i', 
+      /* assigned */  'a', 's', 's', 'i', 'g', 'n', 'e', 'd', 
+      /* c* */  'c', '*', 
+      /* cc */  'c', 'c', 
+      /* cf */  'c', 'f', 
+      /* closepunctuation */  'c', 'l', 'o', 's', 'e', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', 
+      /* cn */  'c', 'n', 
+      /* co */  'c', 'o', 
+      /* connectorpunctuation */  'c', 'o', 'n', 'n', 'e', 'c', 't', 'o', 'r', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', 
+      /* control */  'c', 'o', 'n', 't', 'r', 'o', 'l', 
+      /* cs */  'c', 's', 
+      /* currencysymbol */  'c', 'u', 'r', 'r', 'e', 'n', 'c', 'y', 's', 'y', 'm', 'b', 'o', 'l', 
+      /* dashpunctuation */  'd', 'a', 's', 'h', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', 
+      /* decimaldigitnumber */  'd', 'e', 'c', 'i', 'm', 'a', 'l', 'd', 'i', 'g', 'i', 't', 'n', 'u', 'm', 'b', 'e', 'r', 
+      /* enclosingmark */  'e', 'n', 'c', 'l', 'o', 's', 'i', 'n', 'g', 'm', 'a', 'r', 'k', 
+      /* finalpunctuation */  'f', 'i', 'n', 'a', 'l', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', 
+      /* format */  'f', 'o', 'r', 'm', 'a', 't', 
+      /* initialpunctuation */  'i', 'n', 'i', 't', 'i', 'a', 'l', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', 
+      /* l* */  'l', '*', 
+      /* letter */  'l', 'e', 't', 't', 'e', 'r', 
+      /* letternumber */  'l', 'e', 't', 't', 'e', 'r', 'n', 'u', 'm', 'b', 'e', 'r', 
+      /* lineseparator */  'l', 'i', 'n', 'e', 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r', 
+      /* ll */  'l', 'l', 
+      /* lm */  'l', 'm', 
+      /* lo */  'l', 'o', 
+      /* lowercaseletter */  'l', 'o', 'w', 'e', 'r', 'c', 'a', 's', 'e', 'l', 'e', 't', 't', 'e', 'r', 
+      /* lt */  'l', 't', 
+      /* lu */  'l', 'u', 
+      /* m* */  'm', '*', 
+      /* mark */  'm', 'a', 'r', 'k', 
+      /* mathsymbol */  'm', 'a', 't', 'h', 's', 'y', 'm', 'b', 'o', 'l', 
+      /* mc */  'm', 'c', 
+      /* me */  'm', 'e', 
+      /* mn */  'm', 'n', 
+      /* modifierletter */  'm', 'o', 'd', 'i', 'f', 'i', 'e', 'r', 'l', 'e', 't', 't', 'e', 'r', 
+      /* modifiersymbol */  'm', 'o', 'd', 'i', 'f', 'i', 'e', 'r', 's', 'y', 'm', 'b', 'o', 'l', 
+      /* n* */  'n', '*', 
+      /* nd */  'n', 'd', 
+      /* nl */  'n', 'l', 
+      /* no */  'n', 'o', 
+      /* nonspacingmark */  'n', 'o', 'n', 's', 'p', 'a', 'c', 'i', 'n', 'g', 'm', 'a', 'r', 'k', 
+      /* notassigned */  'n', 'o', 't', 'a', 's', 's', 'i', 'g', 'n', 'e', 'd', 
+      /* number */  'n', 'u', 'm', 'b', 'e', 'r', 
+      /* openpunctuation */  'o', 'p', 'e', 'n', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', 
+      /* other */  'o', 't', 'h', 'e', 'r', 
+      /* otherletter */  'o', 't', 'h', 'e', 'r', 'l', 'e', 't', 't', 'e', 'r', 
+      /* othernumber */  'o', 't', 'h', 'e', 'r', 'n', 'u', 'm', 'b', 'e', 'r', 
+      /* otherpunctuation */  'o', 't', 'h', 'e', 'r', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', 
+      /* othersymbol */  'o', 't', 'h', 'e', 'r', 's', 'y', 'm', 'b', 'o', 'l', 
+      /* p* */  'p', '*', 
+      /* paragraphseparator */  'p', 'a', 'r', 'a', 'g', 'r', 'a', 'p', 'h', 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r', 
+      /* pc */  'p', 'c', 
+      /* pd */  'p', 'd', 
+      /* pe */  'p', 'e', 
+      /* pf */  'p', 'f', 
+      /* pi */  'p', 'i', 
+      /* po */  'p', 'o', 
+      /* privateuse */  'p', 'r', 'i', 'v', 'a', 't', 'e', 'u', 's', 'e', 
+      /* ps */  'p', 's', 
+      /* punctuation */  'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', 
+      /* s* */  's', '*', 
+      /* sc */  's', 'c', 
+      /* separator */  's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r', 
+      /* sk */  's', 'k', 
+      /* sm */  's', 'm', 
+      /* so */  's', 'o', 
+      /* spaceseparator */  's', 'p', 'a', 'c', 'e', 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r', 
+      /* spacingcombiningmark */  's', 'p', 'a', 'c', 'i', 'n', 'g', 'c', 'o', 'm', 'b', 'i', 'n', 'i', 'n', 'g', 'm', 'a', 'r', 'k', 
+      /* surrogate */  's', 'u', 'r', 'r', 'o', 'g', 'a', 't', 'e', 
+      /* symbol */  's', 'y', 'm', 'b', 'o', 'l', 
+      /* titlecase */  't', 'i', 't', 'l', 'e', 'c', 'a', 's', 'e', 
+      /* titlecaseletter */  't', 'i', 't', 'l', 'e', 'c', 'a', 's', 'e', 'l', 'e', 't', 't', 'e', 'r', 
+      /* uppercaseletter */  'u', 'p', 'p', 'e', 'r', 'c', 'a', 's', 'e', 'l', 'e', 't', 't', 'e', 'r', 
+      /* z* */  'z', '*', 
+      /* zl */  'z', 'l', 
+      /* zp */  'z', 'p', 
+      /* zs */  'z', 's', 
+   };
+
+   static const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32> range_data[] = {
+      { prop_name_table+0, prop_name_table+3, }, // any
+      { prop_name_table+3, prop_name_table+8, }, // ascii
+      { prop_name_table+8, prop_name_table+16, }, // assigned
+      { prop_name_table+16, prop_name_table+18, }, // c*
+      { prop_name_table+18, prop_name_table+20, }, // cc
+      { prop_name_table+20, prop_name_table+22, }, // cf
+      { prop_name_table+22, prop_name_table+38, }, // closepunctuation
+      { prop_name_table+38, prop_name_table+40, }, // cn
+      { prop_name_table+40, prop_name_table+42, }, // co
+      { prop_name_table+42, prop_name_table+62, }, // connectorpunctuation
+      { prop_name_table+62, prop_name_table+69, }, // control
+      { prop_name_table+69, prop_name_table+71, }, // cs
+      { prop_name_table+71, prop_name_table+85, }, // currencysymbol
+      { prop_name_table+85, prop_name_table+100, }, // dashpunctuation
+      { prop_name_table+100, prop_name_table+118, }, // decimaldigitnumber
+      { prop_name_table+118, prop_name_table+131, }, // enclosingmark
+      { prop_name_table+131, prop_name_table+147, }, // finalpunctuation
+      { prop_name_table+147, prop_name_table+153, }, // format
+      { prop_name_table+153, prop_name_table+171, }, // initialpunctuation
+      { prop_name_table+171, prop_name_table+173, }, // l*
+      { prop_name_table+173, prop_name_table+179, }, // letter
+      { prop_name_table+179, prop_name_table+191, }, // letternumber
+      { prop_name_table+191, prop_name_table+204, }, // lineseparator
+      { prop_name_table+204, prop_name_table+206, }, // ll
+      { prop_name_table+206, prop_name_table+208, }, // lm
+      { prop_name_table+208, prop_name_table+210, }, // lo
+      { prop_name_table+210, prop_name_table+225, }, // lowercaseletter
+      { prop_name_table+225, prop_name_table+227, }, // lt
+      { prop_name_table+227, prop_name_table+229, }, // lu
+      { prop_name_table+229, prop_name_table+231, }, // m*
+      { prop_name_table+231, prop_name_table+235, }, // mark
+      { prop_name_table+235, prop_name_table+245, }, // mathsymbol
+      { prop_name_table+245, prop_name_table+247, }, // mc
+      { prop_name_table+247, prop_name_table+249, }, // me
+      { prop_name_table+249, prop_name_table+251, }, // mn
+      { prop_name_table+251, prop_name_table+265, }, // modifierletter
+      { prop_name_table+265, prop_name_table+279, }, // modifiersymbol
+      { prop_name_table+279, prop_name_table+281, }, // n*
+      { prop_name_table+281, prop_name_table+283, }, // nd
+      { prop_name_table+283, prop_name_table+285, }, // nl
+      { prop_name_table+285, prop_name_table+287, }, // no
+      { prop_name_table+287, prop_name_table+301, }, // nonspacingmark
+      { prop_name_table+301, prop_name_table+312, }, // notassigned
+      { prop_name_table+312, prop_name_table+318, }, // number
+      { prop_name_table+318, prop_name_table+333, }, // openpunctuation
+      { prop_name_table+333, prop_name_table+338, }, // other
+      { prop_name_table+338, prop_name_table+349, }, // otherletter
+      { prop_name_table+349, prop_name_table+360, }, // othernumber
+      { prop_name_table+360, prop_name_table+376, }, // otherpunctuation
+      { prop_name_table+376, prop_name_table+387, }, // othersymbol
+      { prop_name_table+387, prop_name_table+389, }, // p*
+      { prop_name_table+389, prop_name_table+407, }, // paragraphseparator
+      { prop_name_table+407, prop_name_table+409, }, // pc
+      { prop_name_table+409, prop_name_table+411, }, // pd
+      { prop_name_table+411, prop_name_table+413, }, // pe
+      { prop_name_table+413, prop_name_table+415, }, // pf
+      { prop_name_table+415, prop_name_table+417, }, // pi
+      { prop_name_table+417, prop_name_table+419, }, // po
+      { prop_name_table+419, prop_name_table+429, }, // privateuse
+      { prop_name_table+429, prop_name_table+431, }, // ps
+      { prop_name_table+431, prop_name_table+442, }, // punctuation
+      { prop_name_table+442, prop_name_table+444, }, // s*
+      { prop_name_table+444, prop_name_table+446, }, // sc
+      { prop_name_table+446, prop_name_table+455, }, // separator
+      { prop_name_table+455, prop_name_table+457, }, // sk
+      { prop_name_table+457, prop_name_table+459, }, // sm
+      { prop_name_table+459, prop_name_table+461, }, // so
+      { prop_name_table+461, prop_name_table+475, }, // spaceseparator
+      { prop_name_table+475, prop_name_table+495, }, // spacingcombiningmark
+      { prop_name_table+495, prop_name_table+504, }, // surrogate
+      { prop_name_table+504, prop_name_table+510, }, // symbol
+      { prop_name_table+510, prop_name_table+519, }, // titlecase
+      { prop_name_table+519, prop_name_table+534, }, // titlecaseletter
+      { prop_name_table+534, prop_name_table+549, }, // uppercaseletter
+      { prop_name_table+549, prop_name_table+551, }, // z*
+      { prop_name_table+551, prop_name_table+553, }, // zl
+      { prop_name_table+553, prop_name_table+555, }, // zp
+      { prop_name_table+555, prop_name_table+557, }, // zs
+   };
+
+   static const icu_regex_traits::char_class_type icu_class_map[] = {
+      icu_regex_traits::mask_any, // any
+      icu_regex_traits::mask_ascii, // ascii
+      (0x3FFFFFFFu) & ~(U_GC_CN_MASK), // assigned
+      U_GC_C_MASK, // c*
+      U_GC_CC_MASK, // cc
+      U_GC_CF_MASK, // cf
+      U_GC_PE_MASK, // closepunctuation
+      U_GC_CN_MASK, // cn
+      U_GC_CO_MASK, // co
+      U_GC_PC_MASK, // connectorpunctuation
+      U_GC_CC_MASK, // control
+      U_GC_CS_MASK, // cs
+      U_GC_SC_MASK, // currencysymbol
+      U_GC_PD_MASK, // dashpunctuation
+      U_GC_ND_MASK, // decimaldigitnumber
+      U_GC_ME_MASK, // enclosingmark
+      U_GC_PF_MASK, // finalpunctuation
+      U_GC_CF_MASK, // format
+      U_GC_PI_MASK, // initialpunctuation
+      U_GC_L_MASK, // l*
+      U_GC_L_MASK, // letter
+      U_GC_NL_MASK, // letternumber
+      U_GC_ZL_MASK, // lineseparator
+      U_GC_LL_MASK, // ll
+      U_GC_LM_MASK, // lm
+      U_GC_LO_MASK, // lo
+      U_GC_LL_MASK, // lowercaseletter
+      U_GC_LT_MASK, // lt
+      U_GC_LU_MASK, // lu
+      U_GC_M_MASK, // m*
+      U_GC_M_MASK, // mark
+      U_GC_SM_MASK, // mathsymbol
+      U_GC_MC_MASK, // mc
+      U_GC_ME_MASK, // me
+      U_GC_MN_MASK, // mn
+      U_GC_LM_MASK, // modifierletter
+      U_GC_SK_MASK, // modifiersymbol
+      U_GC_N_MASK, // n*
+      U_GC_ND_MASK, // nd
+      U_GC_NL_MASK, // nl
+      U_GC_NO_MASK, // no
+      U_GC_MN_MASK, // nonspacingmark
+      U_GC_CN_MASK, // notassigned
+      U_GC_N_MASK, // number
+      U_GC_PS_MASK, // openpunctuation
+      U_GC_C_MASK, // other
+      U_GC_LO_MASK, // otherletter
+      U_GC_NO_MASK, // othernumber
+      U_GC_PO_MASK, // otherpunctuation
+      U_GC_SO_MASK, // othersymbol
+      U_GC_P_MASK, // p*
+      U_GC_ZP_MASK, // paragraphseparator
+      U_GC_PC_MASK, // pc
+      U_GC_PD_MASK, // pd
+      U_GC_PE_MASK, // pe
+      U_GC_PF_MASK, // pf
+      U_GC_PI_MASK, // pi
+      U_GC_PO_MASK, // po
+      U_GC_CO_MASK, // privateuse
+      U_GC_PS_MASK, // ps
+      U_GC_P_MASK, // punctuation
+      U_GC_S_MASK, // s*
+      U_GC_SC_MASK, // sc
+      U_GC_Z_MASK, // separator
+      U_GC_SK_MASK, // sk
+      U_GC_SM_MASK, // sm
+      U_GC_SO_MASK, // so
+      U_GC_ZS_MASK, // spaceseparator
+      U_GC_MC_MASK, // spacingcombiningmark
+      U_GC_CS_MASK, // surrogate
+      U_GC_S_MASK, // symbol
+      U_GC_LT_MASK, // titlecase
+      U_GC_LT_MASK, // titlecaseletter
+      U_GC_LU_MASK, // uppercaseletter
+      U_GC_Z_MASK, // z*
+      U_GC_ZL_MASK, // zl
+      U_GC_ZP_MASK, // zp
+      U_GC_ZS_MASK, // zs
+   };
+
+
+   static const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32>* ranges_begin = range_data;
+   static const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32>* ranges_end = range_data + (sizeof(range_data)/sizeof(range_data[0]));
+   
+   BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32> t = { p1, p2, };
+   const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32>* p = std::lower_bound(ranges_begin, ranges_end, t);
+   if((p != ranges_end) && (t == *p))
+      return icu_class_map[p - ranges_begin];
+   return 0;
+}
+
+icu_regex_traits::char_class_type icu_regex_traits::lookup_classname(const char_type* p1, const char_type* p2) const
+{
+   static const char_class_type masks[] = 
+   {
+      0,
+      U_GC_L_MASK | U_GC_ND_MASK, 
+      U_GC_L_MASK,
+      mask_blank,
+      U_GC_CC_MASK | U_GC_CF_MASK | U_GC_ZL_MASK | U_GC_ZP_MASK,
+      U_GC_ND_MASK,
+      U_GC_ND_MASK,
+      (0x3FFFFFFFu) & ~(U_GC_CC_MASK | U_GC_CF_MASK | U_GC_CS_MASK | U_GC_CN_MASK | U_GC_Z_MASK),
+      mask_horizontal,
+      U_GC_LL_MASK,
+      U_GC_LL_MASK,
+      ~(U_GC_C_MASK),
+      U_GC_P_MASK,
+      char_class_type(U_GC_Z_MASK) | mask_space,
+      char_class_type(U_GC_Z_MASK) | mask_space,
+      U_GC_LU_MASK,
+      mask_unicode,
+      U_GC_LU_MASK,
+      mask_vertical,
+      char_class_type(U_GC_L_MASK | U_GC_ND_MASK | U_GC_MN_MASK) | mask_underscore, 
+      char_class_type(U_GC_L_MASK | U_GC_ND_MASK | U_GC_MN_MASK) | mask_underscore, 
+      char_class_type(U_GC_ND_MASK) | mask_xdigit,
+   };
+
+   int idx = ::pdalboost::BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2);
+   if(idx >= 0)
+      return masks[idx+1];
+   char_class_type result = lookup_icu_mask(p1, p2);
+   if(result != 0)
+      return result;
+
+   if(idx < 0)
+   {
+      string_type s(p1, p2);
+      string_type::size_type i = 0;
+      while(i < s.size())
+      {
+         s[i] = static_cast<char>((::u_tolower)(s[i]));
+         if(::u_isspace(s[i]) || (s[i] == '-') || (s[i] == '_'))
+            s.erase(s.begin()+i, s.begin()+i+1);
+         else
+         {
+            s[i] = static_cast<char>((::u_tolower)(s[i]));
+            ++i;
+         }
+      }
+      if(s.size())
+         idx = ::pdalboost::BOOST_REGEX_DETAIL_NS::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
+      if(idx >= 0)
+         return masks[idx+1];
+      if(s.size())
+         result = lookup_icu_mask(&*s.begin(), &*s.begin() + s.size());
+      if(result != 0)
+         return result;
+   }
+   BOOST_ASSERT(std::size_t(idx+1) < sizeof(masks) / sizeof(masks[0]));
+   return masks[idx+1];
+}
+
+icu_regex_traits::string_type icu_regex_traits::lookup_collatename(const char_type* p1, const char_type* p2) const
+{
+   string_type result;
+   if(std::find_if(p1, p2, std::bind2nd(std::greater< ::UChar32>(), 0x7f)) == p2)
+   {
+#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+      std::string s(p1, p2);
+#else
+      std::string s;
+      const char_type* p3 = p1;
+      while(p3 != p2)
+         s.append(1, *p3++);
+#endif
+      // Try Unicode name:
+      UErrorCode err = U_ZERO_ERROR;
+      UChar32 c = ::u_charFromName(U_UNICODE_CHAR_NAME, s.c_str(), &err);
+      if(U_SUCCESS(err))
+      {
+         result.push_back(c);
+         return result;
+      }
+      // Try Unicode-extended name:
+      err = U_ZERO_ERROR;
+      c = ::u_charFromName(U_EXTENDED_CHAR_NAME, s.c_str(), &err);
+      if(U_SUCCESS(err))
+      {
+         result.push_back(c);
+         return result;
+      }
+      // try POSIX name:
+      s = ::pdalboost::BOOST_REGEX_DETAIL_NS::lookup_default_collate_name(s);
+#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
+      result.assign(s.begin(), s.end());
+#else
+      result.clear();
+      std::string::const_iterator si, sj;
+      si = s.begin();
+      sj = s.end();
+      while(si != sj)
+         result.push_back(*si++);
+#endif
+   }
+   if(result.empty() && (p2-p1 == 1))
+      result.push_back(*p1);
+   return result;
+}
+
+bool icu_regex_traits::isctype(char_type c, char_class_type f) const
+{
+   // check for standard catagories first:
+   char_class_type m = char_class_type(1u << u_charType(c));
+   if((m & f) != 0) 
+      return true;
+   // now check for special cases:
+   if(((f & mask_blank) != 0) && u_isblank(c))
+      return true;
+   if(((f & mask_space) != 0) && u_isspace(c))
+      return true;
+   if(((f & mask_xdigit) != 0) && (u_digit(c, 16) >= 0))
+      return true;
+   if(((f & mask_unicode) != 0) && (c >= 0x100))
+      return true;
+   if(((f & mask_underscore) != 0) && (c == '_'))
+      return true;
+   if(((f & mask_any) != 0) && (c <= 0x10FFFF))
+      return true;
+   if(((f & mask_ascii) != 0) && (c <= 0x7F))
+      return true;
+   if(((f & mask_vertical) != 0) && (::pdalboost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == static_cast<char_type>('\v')) || (m == U_GC_ZL_MASK) || (m == U_GC_ZP_MASK)))
+      return true;
+   if(((f & mask_horizontal) != 0) && !::pdalboost::BOOST_REGEX_DETAIL_NS::is_separator(c) && u_isspace(c) && (c != static_cast<char_type>('\v')))
+      return true;
+   return false;
+}
+
+}
+
+#endif // BOOST_HAS_ICU
diff --git a/vendor/pdalboost/libs/regex/src/instances.cpp b/vendor/pdalboost/libs/regex/src/instances.cpp
new file mode 100644
index 0000000..69d72ad
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/instances.cpp
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE:        instances.cpp
+  *   VERSION:     see <boost/version.hpp>
+  *   DESCRIPTION: regex narrow character template instances.
+  */
+
+#define BOOST_REGEX_SOURCE
+
+#include <boost/regex/config.hpp>
+
+#if !defined(BOOST_REGEX_NO_EXTERNAL_TEMPLATES)
+#define BOOST_REGEX_NARROW_INSTANTIATE
+
+#ifdef __BORLANDC__
+#pragma hrdstop
+#endif
+
+#include <boost/regex.hpp>
+
+#endif
diff --git a/vendor/pdalboost/libs/regex/src/internals.hpp b/vendor/pdalboost/libs/regex/src/internals.hpp
new file mode 100644
index 0000000..3a15cc6
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/internals.hpp
@@ -0,0 +1,35 @@
+/*
+ *
+ * Copyright (c) 2011
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+
+#ifndef BOOST_REGEX_SRC_INTERNALS_HPP
+#define BOOST_REGEX_SRC_INTERNALS_HPP
+
+enum
+{
+   char_class_space=1<<0, 
+   char_class_print=1<<1, 
+   char_class_cntrl=1<<2, 
+   char_class_upper=1<<3, 
+   char_class_lower=1<<4,
+   char_class_alpha=1<<5, 
+   char_class_digit=1<<6, 
+   char_class_punct=1<<7, 
+   char_class_xdigit=1<<8,
+   char_class_alnum=char_class_alpha|char_class_digit, 
+   char_class_graph=char_class_alnum|char_class_punct,
+   char_class_blank=1<<9,
+   char_class_word=1<<10,
+   char_class_unicode=1<<11,
+   char_class_horizontal=1<<12,
+   char_class_vertical=1<<13
+};
+
+#endif // BOOST_REGEX_SRC_INTERNALS_HPP
diff --git a/vendor/pdalboost/libs/regex/src/posix_api.cpp b/vendor/pdalboost/libs/regex/src/posix_api.cpp
new file mode 100644
index 0000000..fd7f067
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/posix_api.cpp
@@ -0,0 +1,293 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+ 
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE:        posix_api.cpp
+  *   VERSION:     see <boost/version.hpp>
+  *   DESCRIPTION: Implements the Posix API wrappers.
+  */
+
+#define BOOST_REGEX_SOURCE
+
+#include <boost/config.hpp>
+#include <cstdio>
+#include <boost/regex.hpp>
+#include <boost/cregex.hpp>
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+   using ::sprintf;
+   using ::strcpy;
+   using ::strcmp;
+}
+#endif
+
+
+namespace pdalboost{
+
+namespace{
+
+unsigned int magic_value = 25631;
+
+const char* names[] = {
+      "REG_NOERROR",
+      "REG_NOMATCH",
+      "REG_BADPAT",
+      "REG_ECOLLATE",
+      "REG_ECTYPE",
+      "REG_EESCAPE",
+      "REG_ESUBREG",
+      "REG_EBRACK",
+      "REG_EPAREN",
+      "REG_EBRACE",
+      "REG_BADBR",
+      "REG_ERANGE",
+      "REG_ESPACE",
+      "REG_BADRPT",
+      "REG_EEND",
+      "REG_ESIZE",
+      "REG_ERPAREN",
+      "REG_EMPTY",
+      "REG_ECOMPLEXITY",
+      "REG_ESTACK",
+      "REG_E_PERL",
+      "REG_E_UNKNOWN",
+};
+} // namespace
+
+typedef pdalboost::basic_regex<char, c_regex_traits<char> > c_regex_type;
+
+BOOST_REGEX_DECL int BOOST_REGEX_CCALL regcompA(regex_tA* expression, const char* ptr, int f)
+{
+#ifndef BOOST_NO_EXCEPTIONS
+   try{
+#endif
+      expression->guts = new c_regex_type();
+#ifndef BOOST_NO_EXCEPTIONS
+   } catch(...)
+   {
+      expression->guts = 0;
+      return REG_ESPACE;
+   }
+#else
+   if(0 == expression->guts)
+      return REG_E_MEMORY;
+#endif
+   // set default flags:
+   pdalboost::uint_fast32_t flags = (f & REG_PERLEX) ? 0 : ((f & REG_EXTENDED) ? regex::extended : regex::basic);
+   expression->eflags = (f & REG_NEWLINE) ? match_not_dot_newline : match_default;
+   // and translate those that are actually set:
+
+   if(f & REG_NOCOLLATE)
+   {
+      flags |= regex::nocollate;
+#ifndef BOOST_REGEX_V3
+      flags &= ~regex::collate;
+#endif
+   }
+
+   if(f & REG_NOSUB)
+   {
+      //expression->eflags |= match_any;
+      flags |= regex::nosubs;
+   }
+
+   if(f & REG_NOSPEC)
+      flags |= regex::literal;
+   if(f & REG_ICASE)
+      flags |= regex::icase;
+   if(f & REG_ESCAPE_IN_LISTS)
+      flags &= ~regex::no_escape_in_lists;
+   if(f & REG_NEWLINE_ALT)
+      flags |= regex::newline_alt;
+
+   const char* p2;
+   if(f & REG_PEND)
+      p2 = expression->re_endp;
+   else p2 = ptr + std::strlen(ptr);
+
+   int result;
+
+#ifndef BOOST_NO_EXCEPTIONS
+   try{
+#endif
+      expression->re_magic = magic_value;
+      static_cast<c_regex_type*>(expression->guts)->set_expression(ptr, p2, flags);
+      expression->re_nsub = static_cast<c_regex_type*>(expression->guts)->mark_count();
+      result = static_cast<c_regex_type*>(expression->guts)->error_code();
+#ifndef BOOST_NO_EXCEPTIONS
+   } 
+   catch(const pdalboost::regex_error& be)
+   {
+      result = be.code();
+   }
+   catch(...)
+   {
+      result = REG_E_UNKNOWN;
+   }
+#endif
+   if(result)
+      regfreeA(expression);
+   return result;
+
+}
+
+BOOST_REGEX_DECL regsize_t BOOST_REGEX_CCALL regerrorA(int code, const regex_tA* e, char* buf, regsize_t buf_size)
+{
+   std::size_t result = 0;
+   if(code & REG_ITOA)
+   {
+      code &= ~REG_ITOA;
+      if(code <= (int)REG_E_UNKNOWN)
+      {
+         result = std::strlen(names[code]) + 1;
+         if(buf_size >= result)
+            BOOST_REGEX_DETAIL_NS::strcpy_s(buf, buf_size, names[code]);
+         return result;
+      }
+      return result;
+   }
+   if(code == REG_ATOI)
+   {
+      char localbuf[5];
+      if(e == 0)
+         return 0;
+      for(int i = 0; i <= (int)REG_E_UNKNOWN; ++i)
+      {
+         if(std::strcmp(e->re_endp, names[i]) == 0)
+         {
+            //
+            // We're converting an integer i to a string, and since i <= REG_E_UNKNOWN
+            // a five character string is *always* large enough:
+            //
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(_WIN32_WCE) && !defined(UNDER_CE)
+            int r = (::sprintf_s)(localbuf, 5, "%d", i);
+#else
+            int r = (std::sprintf)(localbuf, "%d", i);
+#endif
+            if(r < 0)
+               return 0; // sprintf failed
+            if(std::strlen(localbuf) < buf_size)
+               BOOST_REGEX_DETAIL_NS::strcpy_s(buf, buf_size, localbuf);
+            return std::strlen(localbuf) + 1;
+         }
+      }
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(_WIN32_WCE) && !defined(UNDER_CE)
+      (::sprintf_s)(localbuf, 5, "%d", 0);
+#else
+      (std::sprintf)(localbuf, "%d", 0);
+#endif
+      if(std::strlen(localbuf) < buf_size)
+         BOOST_REGEX_DETAIL_NS::strcpy_s(buf, buf_size, localbuf);
+      return std::strlen(localbuf) + 1;
+   }
+   if(code <= (int)REG_E_UNKNOWN)
+   {
+      std::string p;
+      if((e) && (e->re_magic == magic_value))
+         p = static_cast<c_regex_type*>(e->guts)->get_traits().error_string(static_cast< ::pdalboost::regex_constants::error_type>(code));
+      else
+      {
+         p = BOOST_REGEX_DETAIL_NS::get_default_error_string(static_cast< ::pdalboost::regex_constants::error_type>(code));
+      }
+      std::size_t len = p.size();
+      if(len < buf_size)
+      {
+         BOOST_REGEX_DETAIL_NS::strcpy_s(buf, buf_size, p.c_str());
+      }
+      return len + 1;
+   }
+   if(buf_size)
+      *buf = 0;
+   return 0;
+}
+
+BOOST_REGEX_DECL int BOOST_REGEX_CCALL regexecA(const regex_tA* expression, const char* buf, regsize_t n, regmatch_t* array, int eflags)
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4267)
+#endif
+   bool result = false;
+   match_flag_type flags = match_default | expression->eflags;
+   const char* end;
+   const char* start;
+   cmatch m;
+   
+   if(eflags & REG_NOTBOL)
+      flags |= match_not_bol;
+   if(eflags & REG_NOTEOL)
+      flags |= match_not_eol;
+   if(eflags & REG_STARTEND)
+   {
+      start = buf + array[0].rm_so;
+      end = buf + array[0].rm_eo;
+   }
+   else
+   {
+      start = buf;
+      end = buf + std::strlen(buf);
+   }
+
+#ifndef BOOST_NO_EXCEPTIONS
+   try{
+#endif
+   if(expression->re_magic == magic_value)
+   {
+      result = regex_search(start, end, m, *static_cast<c_regex_type*>(expression->guts), flags);
+   }
+   else
+      return result;
+#ifndef BOOST_NO_EXCEPTIONS
+   } catch(...)
+   {
+      return REG_E_UNKNOWN;
+   }
+#endif
+
+   if(result)
+   {
+      // extract what matched:
+      std::size_t i;
+      for(i = 0; (i < n) && (i < expression->re_nsub + 1); ++i)
+      {
+         array[i].rm_so = (m[i].matched == false) ? -1 : (m[i].first - buf);
+         array[i].rm_eo = (m[i].matched == false) ? -1 : (m[i].second - buf);
+      }
+      // and set anything else to -1:
+      for(i = expression->re_nsub + 1; i < n; ++i)
+      {
+         array[i].rm_so = -1;
+         array[i].rm_eo = -1;
+      }
+      return 0;
+   }
+   return REG_NOMATCH;
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+BOOST_REGEX_DECL void BOOST_REGEX_CCALL regfreeA(regex_tA* expression)
+{
+   if(expression->re_magic == magic_value)
+   {
+      delete static_cast<c_regex_type*>(expression->guts);
+   }
+   expression->re_magic = 0;
+}
+
+} // namespace pdalboost
+
+
+
+
diff --git a/vendor/pdalboost/libs/regex/src/regex.cpp b/vendor/pdalboost/libs/regex/src/regex.cpp
new file mode 100644
index 0000000..c70fb72
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/regex.cpp
@@ -0,0 +1,227 @@
+/*
+ *
+ * Copyright (c) 1998-2004
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE:        regex.cpp
+  *   VERSION:     see <boost/version.hpp>
+  *   DESCRIPTION: Misc pdalboost::regbase member funnctions.
+  */
+
+
+#define BOOST_REGEX_SOURCE
+
+#include <boost/config.hpp>
+#include <new>
+#include <boost/regex.hpp>
+#include <boost/throw_exception.hpp>
+
+#if defined(BOOST_REGEX_HAS_MS_STACK_GUARD) && defined(_MSC_VER) && (_MSC_VER >= 1300)
+#  include <malloc.h>
+#endif
+#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD
+#define WIN32_LEAN_AND_MEAN
+#ifndef NOMINMAX
+#  define NOMINMAX
+#endif
+#define NOGDI
+#define NOUSER
+#include <windows.h>
+#endif
+
+#if defined(BOOST_REGEX_NON_RECURSIVE) && !defined(BOOST_REGEX_V3)
+#if BOOST_REGEX_MAX_CACHE_BLOCKS == 0
+#include <new>
+#else
+#include <boost/regex/v4/mem_block_cache.hpp>
+#endif
+#endif
+
+#ifdef BOOST_INTEL
+#pragma warning(disable:383)
+#endif
+
+namespace pdalboost{
+
+//
+// fix: these are declared out of line here to ensure
+// that dll builds contain the Virtual table for these
+// types - this ensures that exceptions can be thrown
+// from the dll and caught in an exe.
+regex_error::regex_error(const std::string& s, regex_constants::error_type err, std::ptrdiff_t pos) 
+   : std::runtime_error(s)
+   , m_error_code(err)
+   , m_position(pos) 
+{
+}
+
+regex_error::regex_error(regex_constants::error_type err) 
+   : std::runtime_error(::pdalboost::BOOST_REGEX_DETAIL_NS::get_default_error_string(err))
+   , m_error_code(err)
+   , m_position(0) 
+{
+}
+
+regex_error::~regex_error() throw() 
+{
+}
+
+void regex_error::raise()const
+{
+#ifndef BOOST_NO_EXCEPTIONS
+   ::pdalboost::throw_exception(*this);
+#endif
+}
+
+
+
+namespace BOOST_REGEX_DETAIL_NS{
+
+BOOST_REGEX_DECL void BOOST_REGEX_CALL raise_runtime_error(const std::runtime_error& ex)
+{
+   ::pdalboost::throw_exception(ex);
+}
+//
+// error checking API:
+//
+BOOST_REGEX_DECL void BOOST_REGEX_CALL verify_options(pdalboost::regex::flag_type /*ef*/, match_flag_type mf)
+{
+#ifndef BOOST_REGEX_V3
+   //
+   // can't mix match_extra with POSIX matching rules:
+   //
+   if((mf & match_extra) && (mf & match_posix))
+   {
+      std::logic_error msg("Usage Error: Can't mix regular expression captures with POSIX matching rules");
+      throw_exception(msg);
+   }
+#endif
+}
+
+#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD
+
+static void execute_eror()
+{
+   // we only get here after a stack overflow,
+   // this has to be a separate proceedure because we 
+   // can't mix __try{}__except block with local objects  
+   // that have destructors:
+   reset_stack_guard_page();
+   std::runtime_error err("Out of stack space, while attempting to match a regular expression.");
+   raise_runtime_error(err);
+}
+
+bool BOOST_REGEX_CALL abstract_protected_call::execute()const
+{
+   __try{
+      return this->call();
+   }__except(EXCEPTION_STACK_OVERFLOW == GetExceptionCode())
+   {
+      execute_eror();
+   }
+   // We never really get here at all:
+   return false;
+}
+
+BOOST_REGEX_DECL void BOOST_REGEX_CALL reset_stack_guard_page()
+{
+#if defined(BOOST_REGEX_HAS_MS_STACK_GUARD) && defined(_MSC_VER) && (_MSC_VER >= 1300)
+   _resetstkoflw();
+#else
+   //
+   // We need to locate the current page being used by the stack,
+   // move to the page below it and then deallocate and protect
+   // that page.  Note that ideally we would protect only the lowest
+   // stack page that has been allocated: in practice there
+   // seems to be no easy way to locate this page, in any case as
+   // long as the next page is protected, then Windows will figure
+   // the rest out for us...
+   //
+   SYSTEM_INFO si;
+   GetSystemInfo(&si);
+   MEMORY_BASIC_INFORMATION mi;
+   DWORD previous_protection_status;
+   //
+   // this is an address in our stack space:
+   //
+   LPBYTE page = (LPBYTE)&page;
+   //
+   // Get the current memory page in use:
+   //
+   VirtualQuery(page, &mi, sizeof(mi));
+   //
+   // Go to the page one below this:
+   //
+   page = (LPBYTE)(mi.BaseAddress)-si.dwPageSize;
+   //
+   // Free and protect everything from the start of the
+   // allocation range, to the end of the page below the
+   // one in use:
+   //
+   if (!VirtualFree(mi.AllocationBase, (LPBYTE)page - (LPBYTE)mi.AllocationBase, MEM_DECOMMIT)
+      || !VirtualProtect(page, si.dwPageSize, PAGE_GUARD | PAGE_READWRITE, &previous_protection_status))
+   {
+      throw std::bad_exception();
+   }
+#endif
+}
+#endif
+
+#if defined(BOOST_REGEX_NON_RECURSIVE) && !defined(BOOST_REGEX_V3)
+
+#if BOOST_REGEX_MAX_CACHE_BLOCKS == 0
+
+BOOST_REGEX_DECL void* BOOST_REGEX_CALL get_mem_block()
+{
+   return ::operator new(BOOST_REGEX_BLOCKSIZE);
+}
+
+BOOST_REGEX_DECL void BOOST_REGEX_CALL put_mem_block(void* p)
+{
+   ::operator delete(p);
+}
+
+#else
+
+#ifdef BOOST_HAS_THREADS
+mem_block_cache block_cache = { 0, 0, BOOST_STATIC_MUTEX_INIT, };
+#else
+mem_block_cache block_cache = { 0, 0, };
+#endif
+
+BOOST_REGEX_DECL void* BOOST_REGEX_CALL get_mem_block()
+{
+   return block_cache.get();
+}
+
+BOOST_REGEX_DECL void BOOST_REGEX_CALL put_mem_block(void* p)
+{
+   block_cache.put(p);
+}
+
+#endif
+
+#endif
+
+} // namespace BOOST_REGEX_DETAIL_NS
+
+
+
+} // namespace pdalboost
+
+#if defined(BOOST_RE_USE_VCL) && defined(BOOST_REGEX_DYN_LINK)
+
+int WINAPI DllEntryPoint(HINSTANCE , unsigned long , void*)
+{
+   return 1;
+}
+#endif
+
diff --git a/vendor/pdalboost/libs/regex/src/regex_debug.cpp b/vendor/pdalboost/libs/regex/src/regex_debug.cpp
new file mode 100644
index 0000000..9306a82
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/regex_debug.cpp
@@ -0,0 +1,59 @@
+/*
+ *
+ * Copyright (c) 1998-2004
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE:        regex_debug.cpp
+  *   VERSION:     see <boost/version.hpp>
+  *   DESCRIPTION: Misc. debugging helpers.
+  */
+
+
+#define BOOST_REGEX_SOURCE
+
+#include <boost/regex/config.hpp>
+
+
+//
+// regex configuration information: this prints out the settings used
+// when the library was built - include in debugging builds only:
+//
+#ifdef BOOST_REGEX_CONFIG_INFO
+
+#define print_macro regex_lib_print_macro
+#define print_expression regex_lib_print_expression
+#define print_byte_order regex_lib_print_byte_order
+#define print_sign regex_lib_print_sign
+#define print_compiler_macros regex_lib_print_compiler_macros
+#define print_stdlib_macros regex_lib_print_stdlib_macros
+#define print_platform_macros regex_lib_print_platform_macros
+#define print_boost_macros regex_lib_print_boost_macros
+#define print_separator regex_lib_print_separator
+#define OLD_MAIN regex_lib_main
+#define NEW_MAIN regex_lib_main2
+#define NO_RECURSE
+
+#include <libs/regex/test/config_info/regex_config_info.cpp>
+
+BOOST_REGEX_DECL void BOOST_REGEX_CALL print_regex_library_info()
+{
+   std::cout << "\n\n";
+   print_separator();
+   std::cout << "Regex library build configuration:\n\n";
+   regex_lib_main2();
+}
+
+#endif
+
+
+
+
+
diff --git a/vendor/pdalboost/libs/regex/src/regex_raw_buffer.cpp b/vendor/pdalboost/libs/regex/src/regex_raw_buffer.cpp
new file mode 100644
index 0000000..82959ad
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/regex_raw_buffer.cpp
@@ -0,0 +1,72 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE         regex_raw_buffer.cpp
+  *   VERSION      see <boost/version.hpp>
+  *   DESCRIPTION: Member functions for class raw_storage.
+  */
+
+
+#define BOOST_REGEX_SOURCE
+#include <boost/config.hpp>
+#include <memory>
+#include <cstring>
+#include <boost/assert.hpp>
+#include <boost/regex/v4/regex_raw_buffer.hpp>
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+   using ::memcpy;
+   using ::memmove;
+}
+#endif
+
+
+namespace pdalboost{ namespace BOOST_REGEX_DETAIL_NS{
+
+void BOOST_REGEX_CALL raw_storage::resize(size_type n)
+{
+   size_type newsize = start ? last - start : 1024;
+   while(newsize < n)
+      newsize *= 2;
+   size_type datasize = end - start;
+   // extend newsize to WORD/DWORD boundary:
+   newsize = (newsize + padding_mask) & ~(padding_mask);
+
+   // allocate and copy data:
+   pointer ptr = static_cast<pointer>(::operator new(newsize));
+   BOOST_REGEX_NOEH_ASSERT(ptr)
+   if(start)
+      std::memcpy(ptr, start, datasize);
+
+   // get rid of old buffer:
+   ::operator delete(start);
+
+   // and set up pointers:
+   start = ptr;
+   end = ptr + datasize;
+   last = ptr + newsize;
+}
+
+void* BOOST_REGEX_CALL raw_storage::insert(size_type pos, size_type n)
+{
+   BOOST_ASSERT(pos <= size_type(end - start));
+   if(size_type(last - end) < n)
+      resize(n + (end - start));
+   void* result = start + pos;
+   std::memmove(start + pos + n, start + pos, (end - start) - pos);
+   end += n;
+   return result;
+}
+
+}} // namespaces
diff --git a/vendor/pdalboost/libs/regex/src/regex_traits_defaults.cpp b/vendor/pdalboost/libs/regex/src/regex_traits_defaults.cpp
new file mode 100644
index 0000000..d2a7d86
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/regex_traits_defaults.cpp
@@ -0,0 +1,692 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+ 
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE         regex_traits_defaults.cpp
+  *   VERSION      see <boost/version.hpp>
+  *   DESCRIPTION: Declares API's for access to regex_traits default properties.
+  */
+
+#define BOOST_REGEX_SOURCE
+#include <boost/regex/regex_traits.hpp>
+
+#include <cctype>
+#ifndef BOOST_NO_WREGEX
+#include <cwctype>
+#endif
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+   using ::tolower;
+   using ::toupper;
+#ifndef BOOST_NO_WREGEX
+   using ::towlower;
+   using ::towupper;
+#endif
+}
+#endif
+
+
+namespace pdalboost{ namespace BOOST_REGEX_DETAIL_NS{
+
+BOOST_REGEX_DECL const char* BOOST_REGEX_CALL get_default_syntax(regex_constants::syntax_type n)
+{
+   // if the user hasn't supplied a message catalog, then this supplies
+   // default "messages" for us to load in the range 1-100.
+   const char* messages[] = {
+         "",
+         "(",
+         ")",
+         "$",
+         "^",
+         ".",
+         "*",
+         "+",
+         "?",
+         "[",
+         "]",
+         "|",
+         "\\",
+         "#",
+         "-",
+         "{",
+         "}",
+         "0123456789",
+         "b",
+         "B",
+         "<",
+         ">",
+         "",
+         "",
+         "A`",
+         "z'",
+         "\n",
+         ",",
+         "a",
+         "f",
+         "n",
+         "r",
+         "t",
+         "v",
+         "x",
+         "c",
+         ":",
+         "=",
+         "e",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "E",
+         "Q",
+         "X",
+         "C",
+         "Z",
+         "G",
+         "!",
+         "p",
+         "P",
+         "N",
+         "gk",
+         "K",
+         "R",
+   };
+
+   return ((n >= (sizeof(messages) / sizeof(messages[1]))) ? "" : messages[n]);
+}
+
+BOOST_REGEX_DECL const char* BOOST_REGEX_CALL get_default_error_string(regex_constants::error_type n)
+{
+   static const char* const s_default_error_messages[] = {
+      "Success",                                                            /* REG_NOERROR 0 error_ok */
+      "No match",                                                           /* REG_NOMATCH 1 error_no_match */
+      "Invalid regular expression.",                                        /* REG_BADPAT 2 error_bad_pattern */
+      "Invalid collation character.",                                       /* REG_ECOLLATE 3 error_collate */
+      "Invalid character class name, collating name, or character range.",  /* REG_ECTYPE 4 error_ctype */
+      "Invalid or unterminated escape sequence.",                           /* REG_EESCAPE 5 error_escape */
+      "Invalid back reference: specified capturing group does not exist.",  /* REG_ESUBREG 6 error_backref */
+      "Unmatched [ or [^ in character class declaration.",                  /* REG_EBRACK 7 error_brack */
+      "Unmatched marking parenthesis ( or \\(.",                            /* REG_EPAREN 8 error_paren */
+      "Unmatched quantified repeat operator { or \\{.",                     /* REG_EBRACE 9 error_brace */
+      "Invalid content of repeat range.",                                   /* REG_BADBR 10 error_badbrace */
+      "Invalid range end in character class",                               /* REG_ERANGE 11 error_range */
+      "Out of memory.",                                                     /* REG_ESPACE 12 error_space NOT USED */
+      "Invalid preceding regular expression prior to repetition operator.", /* REG_BADRPT 13 error_badrepeat */
+      "Premature end of regular expression",                                /* REG_EEND 14 error_end NOT USED */
+      "Regular expression is too large.",                                   /* REG_ESIZE 15 error_size NOT USED */
+      "Unmatched ) or \\)",                                                 /* REG_ERPAREN 16 error_right_paren NOT USED */
+      "Empty regular expression.",                                          /* REG_EMPTY 17 error_empty */
+      "The complexity of matching the regular expression exceeded predefined bounds.  "
+      "Try refactoring the regular expression to make each choice made by the state machine unambiguous.  "
+      "This exception is thrown to prevent \"eternal\" matches that take an "
+      "indefinite period time to locate.",                                  /* REG_ECOMPLEXITY 18 error_complexity */
+      "Ran out of stack space trying to match the regular expression.",     /* REG_ESTACK 19 error_stack */
+      "Invalid or unterminated Perl (?...) sequence.",                      /* REG_E_PERL 20 error_perl */
+      "Unknown error.",                                                     /* REG_E_UNKNOWN 21 error_unknown */
+   };
+
+   return (n > ::pdalboost::regex_constants::error_unknown) ? s_default_error_messages[ ::pdalboost::regex_constants::error_unknown] : s_default_error_messages[n];
+}
+
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL is_combining_implementation(pdalboost::uint_least16_t c)
+{
+   const pdalboost::uint_least16_t combining_ranges[] = { 0x0300, 0x0361, 
+                           0x0483, 0x0486, 
+                           0x0903, 0x0903, 
+                           0x093E, 0x0940, 
+                           0x0949, 0x094C,
+                           0x0982, 0x0983,
+                           0x09BE, 0x09C0,
+                           0x09C7, 0x09CC,
+                           0x09D7, 0x09D7,
+                           0x0A3E, 0x0A40,
+                           0x0A83, 0x0A83,
+                           0x0ABE, 0x0AC0,
+                           0x0AC9, 0x0ACC,
+                           0x0B02, 0x0B03,
+                           0x0B3E, 0x0B3E,
+                           0x0B40, 0x0B40,
+                           0x0B47, 0x0B4C,
+                           0x0B57, 0x0B57,
+                           0x0B83, 0x0B83,
+                           0x0BBE, 0x0BBF,
+                           0x0BC1, 0x0BCC,
+                           0x0BD7, 0x0BD7,
+                           0x0C01, 0x0C03,
+                           0x0C41, 0x0C44,
+                           0x0C82, 0x0C83,
+                           0x0CBE, 0x0CBE,
+                           0x0CC0, 0x0CC4,
+                           0x0CC7, 0x0CCB,
+                           0x0CD5, 0x0CD6,
+                           0x0D02, 0x0D03,
+                           0x0D3E, 0x0D40,
+                           0x0D46, 0x0D4C,
+                           0x0D57, 0x0D57,
+                           0x0F7F, 0x0F7F,
+                           0x20D0, 0x20E1, 
+                           0x3099, 0x309A,
+                           0xFE20, 0xFE23, 
+                           0xffff, 0xffff, };
+
+      const pdalboost::uint_least16_t* p = combining_ranges + 1;
+   while(*p < c) p += 2;
+   --p;
+   if((c >= *p) && (c <= *(p+1)))
+         return true;
+   return false;
+}
+
+//
+// these are the POSIX collating names:
+//
+BOOST_REGEX_DECL const char* def_coll_names[] = {
+"NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "alert", "backspace", "tab", "newline", 
+"vertical-tab", "form-feed", "carriage-return", "SO", "SI", "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", 
+"SYN", "ETB", "CAN", "EM", "SUB", "ESC", "IS4", "IS3", "IS2", "IS1", "space", "exclamation-mark", 
+"quotation-mark", "number-sign", "dollar-sign", "percent-sign", "ampersand", "apostrophe", 
+"left-parenthesis", "right-parenthesis", "asterisk", "plus-sign", "comma", "hyphen", 
+"period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", 
+"colon", "semicolon", "less-than-sign", "equals-sign", "greater-than-sign", 
+"question-mark", "commercial-at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", 
+"Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "left-square-bracket", "backslash", 
+"right-square-bracket", "circumflex", "underscore", "grave-accent", "a", "b", "c", "d", "e", "f", 
+"g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "left-curly-bracket", 
+"vertical-line", "right-curly-bracket", "tilde", "DEL", "", 
+};
+
+// these multi-character collating elements
+// should keep most Western-European locales
+// happy - we should really localise these a
+// little more - but this will have to do for
+// now:
+
+BOOST_REGEX_DECL const char* def_multi_coll[] = {
+   "ae",
+   "Ae",
+   "AE",
+   "ch",
+   "Ch",
+   "CH",
+   "ll",
+   "Ll",
+   "LL",
+   "ss",
+   "Ss",
+   "SS",
+   "nj",
+   "Nj",
+   "NJ",
+   "dz",
+   "Dz",
+   "DZ",
+   "lj",
+   "Lj",
+   "LJ",
+   "",
+};
+
+
+
+BOOST_REGEX_DECL std::string BOOST_REGEX_CALL lookup_default_collate_name(const std::string& name)
+{
+   unsigned int i = 0;
+   while(*def_coll_names[i])
+   {
+      if(def_coll_names[i] == name)
+      {
+         return std::string(1, char(i));
+      }
+      ++i;
+   }
+   i = 0;
+   while(*def_multi_coll[i])
+   {
+      if(def_multi_coll[i] == name)
+      {
+         return def_multi_coll[i];
+      }
+      ++i;
+   }
+   return std::string();
+}
+
+BOOST_REGEX_DECL char BOOST_REGEX_CALL do_global_lower(char c)
+{
+   return static_cast<char>((std::tolower)((unsigned char)c));
+}
+
+BOOST_REGEX_DECL char BOOST_REGEX_CALL do_global_upper(char c)
+{
+   return static_cast<char>((std::toupper)((unsigned char)c));
+}
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL do_global_lower(wchar_t c)
+{
+   return (std::towlower)(c);
+}
+
+BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL do_global_upper(wchar_t c)
+{
+   return (std::towupper)(c);
+}
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL do_global_lower(unsigned short c)
+{
+   return (std::towlower)(c);
+}
+
+BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL do_global_upper(unsigned short c)
+{
+   return (std::towupper)(c);
+}
+#endif
+
+#endif
+
+BOOST_REGEX_DECL regex_constants::escape_syntax_type BOOST_REGEX_CALL get_default_escape_syntax_type(char c)
+{
+   //
+   // char_syntax determines how the compiler treats a given character
+   // in a regular expression.
+   //
+   static regex_constants::escape_syntax_type char_syntax[] = {
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,     /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /* */    // 32
+      regex_constants::escape_type_identity,        /*!*/
+      regex_constants::escape_type_identity,        /*"*/
+      regex_constants::escape_type_identity,        /*#*/
+      regex_constants::escape_type_identity,        /*$*/
+      regex_constants::escape_type_identity,        /*%*/
+      regex_constants::escape_type_identity,        /*&*/
+      regex_constants::escape_type_end_buffer,        /*'*/
+      regex_constants::syntax_open_mark,        /*(*/
+      regex_constants::syntax_close_mark,        /*)*/
+      regex_constants::escape_type_identity,        /***/
+      regex_constants::syntax_plus,                 /*+*/
+      regex_constants::escape_type_identity,        /*,*/
+      regex_constants::escape_type_identity,        /*-*/
+      regex_constants::escape_type_identity,        /*.*/
+      regex_constants::escape_type_identity,        /*/*/
+      regex_constants::escape_type_decimal,        /*0*/
+      regex_constants::escape_type_backref,        /*1*/
+      regex_constants::escape_type_backref,        /*2*/
+      regex_constants::escape_type_backref,        /*3*/
+      regex_constants::escape_type_backref,        /*4*/
+      regex_constants::escape_type_backref,        /*5*/
+      regex_constants::escape_type_backref,        /*6*/
+      regex_constants::escape_type_backref,        /*7*/
+      regex_constants::escape_type_backref,        /*8*/
+      regex_constants::escape_type_backref,        /*9*/
+      regex_constants::escape_type_identity,        /*:*/
+      regex_constants::escape_type_identity,        /*;*/
+      regex_constants::escape_type_left_word,        /*<*/
+      regex_constants::escape_type_identity,        /*=*/
+      regex_constants::escape_type_right_word,        /*>*/
+      regex_constants::syntax_question,              /*?*/
+      regex_constants::escape_type_identity,         /*@*/
+      regex_constants::escape_type_start_buffer,     /*A*/
+      regex_constants::escape_type_not_word_assert,  /*B*/
+      regex_constants::escape_type_C,                /*C*/
+      regex_constants::escape_type_not_class,        /*D*/
+      regex_constants::escape_type_E,                /*E*/
+      regex_constants::escape_type_not_class,        /*F*/
+      regex_constants::escape_type_G,                /*G*/
+      regex_constants::escape_type_not_class,        /*H*/
+      regex_constants::escape_type_not_class,        /*I*/
+      regex_constants::escape_type_not_class,        /*J*/
+      regex_constants::escape_type_reset_start_mark, /*K*/
+      regex_constants::escape_type_not_class,        /*L*/
+      regex_constants::escape_type_not_class,        /*M*/
+      regex_constants::escape_type_named_char,       /*N*/
+      regex_constants::escape_type_not_class,        /*O*/
+      regex_constants::escape_type_not_property,     /*P*/
+      regex_constants::escape_type_Q,                /*Q*/
+      regex_constants::escape_type_line_ending,      /*R*/
+      regex_constants::escape_type_not_class,        /*S*/
+      regex_constants::escape_type_not_class,        /*T*/
+      regex_constants::escape_type_not_class,        /*U*/
+      regex_constants::escape_type_not_class,        /*V*/
+      regex_constants::escape_type_not_class,        /*W*/
+      regex_constants::escape_type_X,                /*X*/
+      regex_constants::escape_type_not_class,        /*Y*/
+      regex_constants::escape_type_Z,                /*Z*/
+      regex_constants::escape_type_identity,        /*[*/
+      regex_constants::escape_type_identity,        /*\*/
+      regex_constants::escape_type_identity,        /*]*/
+      regex_constants::escape_type_identity,        /*^*/
+      regex_constants::escape_type_identity,        /*_*/
+      regex_constants::escape_type_start_buffer,        /*`*/
+      regex_constants::escape_type_control_a,        /*a*/
+      regex_constants::escape_type_word_assert,        /*b*/
+      regex_constants::escape_type_ascii_control,        /*c*/
+      regex_constants::escape_type_class,        /*d*/
+      regex_constants::escape_type_e,        /*e*/
+      regex_constants::escape_type_control_f,       /*f*/
+      regex_constants::escape_type_extended_backref,  /*g*/
+      regex_constants::escape_type_class,        /*h*/
+      regex_constants::escape_type_class,        /*i*/
+      regex_constants::escape_type_class,        /*j*/
+      regex_constants::escape_type_extended_backref, /*k*/
+      regex_constants::escape_type_class,        /*l*/
+      regex_constants::escape_type_class,        /*m*/
+      regex_constants::escape_type_control_n,       /*n*/
+      regex_constants::escape_type_class,           /*o*/
+      regex_constants::escape_type_property,        /*p*/
+      regex_constants::escape_type_class,           /*q*/
+      regex_constants::escape_type_control_r,       /*r*/
+      regex_constants::escape_type_class,           /*s*/
+      regex_constants::escape_type_control_t,       /*t*/
+      regex_constants::escape_type_class,         /*u*/
+      regex_constants::escape_type_control_v,       /*v*/
+      regex_constants::escape_type_class,           /*w*/
+      regex_constants::escape_type_hex,             /*x*/
+      regex_constants::escape_type_class,           /*y*/
+      regex_constants::escape_type_end_buffer,      /*z*/
+      regex_constants::syntax_open_brace,           /*{*/
+      regex_constants::syntax_or,                   /*|*/
+      regex_constants::syntax_close_brace,          /*}*/
+      regex_constants::escape_type_identity,        /*~*/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+      regex_constants::escape_type_identity,        /**/
+   };
+
+   return char_syntax[(unsigned char)c];
+}
+
+BOOST_REGEX_DECL regex_constants::syntax_type BOOST_REGEX_CALL get_default_syntax_type(char c)
+{
+   //
+   // char_syntax determines how the compiler treats a given character
+   // in a regular expression.
+   //
+   static regex_constants::syntax_type char_syntax[] = {
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_newline,     /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /* */    // 32
+      regex_constants::syntax_not,        /*!*/
+      regex_constants::syntax_char,        /*"*/
+      regex_constants::syntax_hash,        /*#*/
+      regex_constants::syntax_dollar,        /*$*/
+      regex_constants::syntax_char,        /*%*/
+      regex_constants::syntax_char,        /*&*/
+      regex_constants::escape_type_end_buffer,  /*'*/
+      regex_constants::syntax_open_mark,        /*(*/
+      regex_constants::syntax_close_mark,        /*)*/
+      regex_constants::syntax_star,        /***/
+      regex_constants::syntax_plus,        /*+*/
+      regex_constants::syntax_comma,        /*,*/
+      regex_constants::syntax_dash,        /*-*/
+      regex_constants::syntax_dot,        /*.*/
+      regex_constants::syntax_char,        /*/*/
+      regex_constants::syntax_digit,        /*0*/
+      regex_constants::syntax_digit,        /*1*/
+      regex_constants::syntax_digit,        /*2*/
+      regex_constants::syntax_digit,        /*3*/
+      regex_constants::syntax_digit,        /*4*/
+      regex_constants::syntax_digit,        /*5*/
+      regex_constants::syntax_digit,        /*6*/
+      regex_constants::syntax_digit,        /*7*/
+      regex_constants::syntax_digit,        /*8*/
+      regex_constants::syntax_digit,        /*9*/
+      regex_constants::syntax_colon,        /*:*/
+      regex_constants::syntax_char,        /*;*/
+      regex_constants::escape_type_left_word, /*<*/
+      regex_constants::syntax_equal,        /*=*/
+      regex_constants::escape_type_right_word, /*>*/
+      regex_constants::syntax_question,        /*?*/
+      regex_constants::syntax_char,        /*@*/
+      regex_constants::syntax_char,        /*A*/
+      regex_constants::syntax_char,        /*B*/
+      regex_constants::syntax_char,        /*C*/
+      regex_constants::syntax_char,        /*D*/
+      regex_constants::syntax_char,        /*E*/
+      regex_constants::syntax_char,        /*F*/
+      regex_constants::syntax_char,        /*G*/
+      regex_constants::syntax_char,        /*H*/
+      regex_constants::syntax_char,        /*I*/
+      regex_constants::syntax_char,        /*J*/
+      regex_constants::syntax_char,        /*K*/
+      regex_constants::syntax_char,        /*L*/
+      regex_constants::syntax_char,        /*M*/
+      regex_constants::syntax_char,        /*N*/
+      regex_constants::syntax_char,        /*O*/
+      regex_constants::syntax_char,        /*P*/
+      regex_constants::syntax_char,        /*Q*/
+      regex_constants::syntax_char,        /*R*/
+      regex_constants::syntax_char,        /*S*/
+      regex_constants::syntax_char,        /*T*/
+      regex_constants::syntax_char,        /*U*/
+      regex_constants::syntax_char,        /*V*/
+      regex_constants::syntax_char,        /*W*/
+      regex_constants::syntax_char,        /*X*/
+      regex_constants::syntax_char,        /*Y*/
+      regex_constants::syntax_char,        /*Z*/
+      regex_constants::syntax_open_set,        /*[*/
+      regex_constants::syntax_escape,        /*\*/
+      regex_constants::syntax_close_set,        /*]*/
+      regex_constants::syntax_caret,        /*^*/
+      regex_constants::syntax_char,        /*_*/
+      regex_constants::syntax_char,        /*`*/
+      regex_constants::syntax_char,        /*a*/
+      regex_constants::syntax_char,        /*b*/
+      regex_constants::syntax_char,        /*c*/
+      regex_constants::syntax_char,        /*d*/
+      regex_constants::syntax_char,        /*e*/
+      regex_constants::syntax_char,        /*f*/
+      regex_constants::syntax_char,        /*g*/
+      regex_constants::syntax_char,        /*h*/
+      regex_constants::syntax_char,        /*i*/
+      regex_constants::syntax_char,        /*j*/
+      regex_constants::syntax_char,        /*k*/
+      regex_constants::syntax_char,        /*l*/
+      regex_constants::syntax_char,        /*m*/
+      regex_constants::syntax_char,        /*n*/
+      regex_constants::syntax_char,        /*o*/
+      regex_constants::syntax_char,        /*p*/
+      regex_constants::syntax_char,        /*q*/
+      regex_constants::syntax_char,        /*r*/
+      regex_constants::syntax_char,        /*s*/
+      regex_constants::syntax_char,        /*t*/
+      regex_constants::syntax_char,        /*u*/
+      regex_constants::syntax_char,        /*v*/
+      regex_constants::syntax_char,        /*w*/
+      regex_constants::syntax_char,        /*x*/
+      regex_constants::syntax_char,        /*y*/
+      regex_constants::syntax_char,        /*z*/
+      regex_constants::syntax_open_brace,        /*{*/
+      regex_constants::syntax_or,        /*|*/
+      regex_constants::syntax_close_brace,        /*}*/
+      regex_constants::syntax_char,        /*~*/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+      regex_constants::syntax_char,        /**/
+   };
+
+   return char_syntax[(unsigned char)c];
+}
+
+
+} // BOOST_REGEX_DETAIL_NS
+} // boost
diff --git a/vendor/pdalboost/libs/regex/src/static_mutex.cpp b/vendor/pdalboost/libs/regex/src/static_mutex.cpp
new file mode 100644
index 0000000..16b9641
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/static_mutex.cpp
@@ -0,0 +1,183 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+ 
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE         static_mutex.cpp
+  *   VERSION      see <boost/version.hpp>
+  *   DESCRIPTION: Declares static_mutex lock type.
+  */
+
+#define BOOST_REGEX_SOURCE
+#include <boost/config.hpp>
+#include <boost/assert.hpp>
+
+#ifdef BOOST_HAS_THREADS
+
+#include <boost/regex/pending/static_mutex.hpp>
+
+#if defined(BOOST_HAS_WINTHREADS)
+#ifndef NOMINMAX
+#  define NOMINMAX
+#endif
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <boost/static_assert.hpp>
+#endif
+
+
+namespace pdalboost{
+
+#if defined(BOOST_HAS_PTHREADS) && defined(PTHREAD_MUTEX_INITIALIZER)
+
+scoped_static_mutex_lock::scoped_static_mutex_lock(static_mutex& m, bool lk)
+: m_mutex(m), m_have_lock(false)
+{
+   if(lk)
+      lock();
+}
+
+scoped_static_mutex_lock::~scoped_static_mutex_lock()
+{
+   if(m_have_lock)
+      unlock();
+}
+
+void scoped_static_mutex_lock::lock()
+{
+   if(0 == m_have_lock)
+   {
+      // Client code will throw if this fails:
+      m_have_lock = (pthread_mutex_lock(&(m_mutex.m_mutex)) == 0);
+   }
+}
+
+void scoped_static_mutex_lock::unlock()
+{
+   if(m_have_lock)
+   {
+      // If this fails there's nothing we can do except assert,
+      // exceptions are out of the question as this code is called
+      // from the lock's destructor:
+      BOOST_VERIFY(pthread_mutex_unlock(&(m_mutex.m_mutex)) == 0);
+      m_have_lock = false;
+   }
+}
+
+#elif defined(BOOST_HAS_WINTHREADS)
+
+BOOST_STATIC_ASSERT(sizeof(LONG) == sizeof(pdalboost::int32_t));
+
+scoped_static_mutex_lock::scoped_static_mutex_lock(static_mutex& m, bool lk)
+: m_mutex(m), m_have_lock(false)
+{
+   if(lk)
+      lock();
+}
+
+scoped_static_mutex_lock::~scoped_static_mutex_lock()
+{
+   if(m_have_lock)
+      unlock();
+}
+
+void scoped_static_mutex_lock::lock()
+{
+   if(0 == m_have_lock)
+   {
+#if !defined(InterlockedCompareExchangePointer)
+      while(0 != InterlockedCompareExchange(reinterpret_cast<void**>((pdalboost::uint_least16_t*)&(m_mutex.m_mutex)), (void*)1, 0))
+#else
+      while(0 != InterlockedCompareExchange(reinterpret_cast<LONG*>(&(m_mutex.m_mutex)), 1, 0))
+#endif
+      {
+         Sleep(0);
+      }
+      m_have_lock = true;
+   }
+}
+
+void scoped_static_mutex_lock::unlock()
+{
+   if(m_have_lock)
+   {
+#if !defined(InterlockedCompareExchangePointer)
+      InterlockedExchange((LONG*)&(m_mutex.m_mutex), 0);
+#else
+      InterlockedExchange(reinterpret_cast<LONG*>(&(m_mutex.m_mutex)), 0);
+#endif
+      m_have_lock = false;
+   }
+}
+
+#else
+//
+// Portable version of a static mutex based on Boost.Thread library:
+//
+#include <stdlib.h>
+#include <boost/assert.hpp>
+
+pdalboost::recursive_mutex* static_mutex::m_pmutex = 0;
+pdalboost::once_flag static_mutex::m_once = BOOST_ONCE_INIT;
+
+extern "C" BOOST_REGEX_DECL void pdalboost_regex_free_static_mutex()
+{
+   delete static_mutex::m_pmutex;
+   static_mutex::m_pmutex = 0;
+}
+
+void static_mutex::init()
+{
+   m_pmutex = new pdalboost::recursive_mutex();
+   int r = atexit(pdalboost_regex_free_static_mutex);
+   BOOST_ASSERT(0 == r);
+}
+
+scoped_static_mutex_lock::scoped_static_mutex_lock(static_mutex& , bool lk)
+: m_plock(0), m_have_lock(false)
+{
+   if(lk)
+      lock();
+}
+
+scoped_static_mutex_lock::~scoped_static_mutex_lock()
+{
+   if(m_have_lock)
+      unlock();
+   delete m_plock;
+}
+
+void scoped_static_mutex_lock::lock()
+{
+   if(0 == m_have_lock)
+   {
+       pdalboost::call_once(static_mutex::m_once,&static_mutex::init);
+      if(0 == m_plock)
+         m_plock = new pdalboost::unique_lock<pdalboost::recursive_mutex>(*static_mutex::m_pmutex, pdalboost::defer_lock);
+      m_plock->lock();
+      m_have_lock = true;
+   }
+}
+
+void scoped_static_mutex_lock::unlock()
+{
+   if(m_have_lock)
+   {
+      m_plock->unlock();
+      m_have_lock = false;
+   }
+}
+
+#endif
+
+}
+
+#endif // BOOST_HAS_THREADS
diff --git a/vendor/pdalboost/libs/regex/src/usinstances.cpp b/vendor/pdalboost/libs/regex/src/usinstances.cpp
new file mode 100644
index 0000000..44ebd28
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/usinstances.cpp
@@ -0,0 +1,81 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE:        winstances.cpp
+  *   VERSION:     see <boost/version.hpp>
+  *   DESCRIPTION: regex unsigned short template instances (MSVC only).
+  */
+
+#define BOOST_REGEX_SOURCE
+#ifdef _MSC_VER
+#pragma warning(disable:4506) // 'no definition for inline function'
+#endif
+
+#include <boost/detail/workaround.hpp>
+#include <memory>
+#include <string>
+
+#if defined(_DLL_CPPLIB) && !defined(_M_CEE_PURE) && defined(_NATIVE_WCHAR_T_DEFINED) \
+   && !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) || defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER))\
+   && BOOST_WORKAROUND(BOOST_MSVC, <1600)
+//
+// This is a horrible workaround, but without declaring these symbols extern we get
+// duplicate symbol errors when linking if the application is built without
+// /Zc:wchar_t
+//
+#ifdef _CRTIMP2_PURE
+#  define BOOST_REGEX_STDLIB_DECL _CRTIMP2_PURE
+#else
+#  define BOOST_REGEX_STDLIB_DECL _CRTIMP2
+#endif
+
+namespace std{
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+template class BOOST_REGEX_STDLIB_DECL allocator<unsigned short>;
+template class BOOST_REGEX_STDLIB_DECL _String_val<unsigned short, allocator<unsigned short> >;
+template class BOOST_REGEX_STDLIB_DECL basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >;
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, > 1300) && BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400))
+template<> BOOST_REGEX_STDLIB_DECL std::size_t __cdecl char_traits<unsigned short>::length(unsigned short const*);
+#endif
+
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==(
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==(
+   const unsigned short *,
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==(
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
+   const unsigned short *);
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator<(
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator>(
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
+}
+#endif
+
+#include <boost/regex/config.hpp>
+
+#if !defined(BOOST_NO_WREGEX) && defined(BOOST_REGEX_HAS_OTHER_WCHAR_T) && !defined(BOOST_REGEX_NO_EXTERNAL_TEMPLATES)
+#define BOOST_REGEX_US_INSTANTIATE
+
+#include <boost/regex.hpp>
+
+#endif
+
+
diff --git a/vendor/pdalboost/libs/regex/src/w32_regex_traits.cpp b/vendor/pdalboost/libs/regex/src/w32_regex_traits.cpp
new file mode 100644
index 0000000..5943b0c
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/w32_regex_traits.cpp
@@ -0,0 +1,652 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+ 
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE         w32_regex_traits.cpp
+  *   VERSION      see <boost/version.hpp>
+  *   DESCRIPTION: Implements w32_regex_traits<char> (and associated helper classes).
+  */
+
+#define BOOST_REGEX_SOURCE
+#include <boost/regex/config.hpp>
+
+#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32) && !defined(BOOST_REGEX_NO_WIN32_LOCALE)
+#include <boost/regex/regex_traits.hpp>
+#include <boost/regex/pattern_except.hpp>
+
+#define WIN32_LEAN_AND_MEAN
+#ifndef NOMINMAX
+#  define NOMINMAX
+#endif
+#define NOGDI
+#include <windows.h>
+
+#if defined(_MSC_VER) && !defined(_WIN32_WCE) && !defined(UNDER_CE)
+#pragma comment(lib, "user32.lib")
+#endif
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std{
+   using ::memset;
+}
+#endif
+
+namespace pdalboost{ namespace BOOST_REGEX_DETAIL_NS{
+
+#ifdef BOOST_NO_ANSI_APIS
+UINT get_code_page_for_locale_id(lcid_type idx)
+{
+   WCHAR code_page_string[7];
+   if (::GetLocaleInfoW(idx, LOCALE_IDEFAULTANSICODEPAGE, code_page_string, 7) == 0)
+       return 0;
+
+   return static_cast<UINT>(_wtol(code_page_string));
+}
+#endif
+
+
+void w32_regex_traits_char_layer<char>::init() 
+{
+   // we need to start by initialising our syntax map so we know which
+   // character is used for which purpose:
+   std::memset(m_char_map, 0, sizeof(m_char_map));
+   cat_type cat;
+   std::string cat_name(w32_regex_traits<char>::get_catalog_name());
+   if(cat_name.size())
+   {
+      cat = ::pdalboost::BOOST_REGEX_DETAIL_NS::w32_cat_open(cat_name);
+      if(!cat)
+      {
+         std::string m("Unable to open message catalog: ");
+         std::runtime_error err(m + cat_name);
+         ::pdalboost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err);
+      }
+   }
+   //
+   // if we have a valid catalog then load our messages:
+   //
+   if(cat)
+   {
+      for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i)
+      {
+         string_type mss = ::pdalboost::BOOST_REGEX_DETAIL_NS::w32_cat_get(cat, this->m_locale, i, get_default_syntax(i));
+         for(string_type::size_type j = 0; j < mss.size(); ++j)
+         {
+            m_char_map[static_cast<unsigned char>(mss[j])] = i;
+         }
+      }
+   }
+   else
+   {
+      for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i)
+      {
+         const char* ptr = get_default_syntax(i);
+         while(ptr && *ptr)
+         {
+            m_char_map[static_cast<unsigned char>(*ptr)] = i;
+            ++ptr;
+         }
+      }
+   }
+   //
+   // finish off by calculating our escape types:
+   //
+   unsigned char i = 'A';
+   do
+   {
+      if(m_char_map[i] == 0)
+      {
+         if(::pdalboost::BOOST_REGEX_DETAIL_NS::w32_is(this->m_locale, 0x0002u, (char)i)) 
+            m_char_map[i] = regex_constants::escape_type_class;
+         else if(::pdalboost::BOOST_REGEX_DETAIL_NS::w32_is(this->m_locale, 0x0001u, (char)i)) 
+            m_char_map[i] = regex_constants::escape_type_not_class;
+      }
+   }while(0xFF != i++);
+
+   //
+   // fill in lower case map:
+   //
+   char char_map[1 << CHAR_BIT];
+   for(int ii = 0; ii < (1 << CHAR_BIT); ++ii)
+      char_map[ii] = static_cast<char>(ii);
+#ifndef BOOST_NO_ANSI_APIS
+   int r = ::LCMapStringA(this->m_locale, LCMAP_LOWERCASE, char_map, 1 << CHAR_BIT, this->m_lower_map, 1 << CHAR_BIT);
+   BOOST_ASSERT(r != 0);
+#else
+   UINT code_page = get_code_page_for_locale_id(this->m_locale);
+   BOOST_ASSERT(code_page != 0);
+
+   WCHAR wide_char_map[1 << CHAR_BIT];
+   int conv_r = ::MultiByteToWideChar(code_page, 0,  char_map, 1 << CHAR_BIT,  wide_char_map, 1 << CHAR_BIT);
+   BOOST_ASSERT(conv_r != 0);
+
+   WCHAR wide_lower_map[1 << CHAR_BIT];
+   int r = ::LCMapStringW(this->m_locale, LCMAP_LOWERCASE,  wide_char_map, 1 << CHAR_BIT,  wide_lower_map, 1 << CHAR_BIT);
+   BOOST_ASSERT(r != 0);
+
+   conv_r = ::WideCharToMultiByte(code_page, 0,  wide_lower_map, r,  this->m_lower_map, 1 << CHAR_BIT,  NULL, NULL);
+   BOOST_ASSERT(conv_r != 0);
+#endif
+   if(r < (1 << CHAR_BIT))
+   {
+      // if we have multibyte characters then not all may have been given
+      // a lower case mapping:
+      for(int jj = r; jj < (1 << CHAR_BIT); ++jj)
+         this->m_lower_map[jj] = static_cast<char>(jj);
+   }
+
+#ifndef BOOST_NO_ANSI_APIS
+   r = ::GetStringTypeExA(this->m_locale, CT_CTYPE1, char_map, 1 << CHAR_BIT, this->m_type_map);
+#else
+   r = ::GetStringTypeExW(this->m_locale, CT_CTYPE1, wide_char_map, 1 << CHAR_BIT, this->m_type_map);
+#endif
+   BOOST_ASSERT(0 != r);
+}
+
+BOOST_REGEX_DECL lcid_type BOOST_REGEX_CALL w32_get_default_locale()
+{
+   return ::GetUserDefaultLCID();
+}
+
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(char c, lcid_type idx)
+{
+#ifndef BOOST_NO_ANSI_APIS
+   WORD mask;
+   if(::GetStringTypeExA(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_LOWER))
+      return true;
+   return false;
+#else
+   UINT code_page = get_code_page_for_locale_id(idx);
+   if (code_page == 0)
+       return false;
+
+   WCHAR wide_c;
+   if (::MultiByteToWideChar(code_page, 0,  &c, 1,  &wide_c, 1) == 0)
+       return false;
+
+   WORD mask;
+   if(::GetStringTypeExW(idx, CT_CTYPE1, &wide_c, 1, &mask) && (mask & C1_LOWER))
+      return true;
+   return false;
+#endif
+}
+
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(wchar_t c, lcid_type idx)
+{
+   WORD mask;
+   if(::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_LOWER))
+      return true;
+   return false;
+}
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_lower(unsigned short ca, lcid_type idx)
+{
+   WORD mask;
+   wchar_t c = ca;
+   if(::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_LOWER))
+      return true;
+   return false;
+}
+#endif
+
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(char c, lcid_type idx)
+{
+#ifndef BOOST_NO_ANSI_APIS
+   WORD mask;
+   if(::GetStringTypeExA(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_UPPER))
+      return true;
+   return false;
+#else
+   UINT code_page = get_code_page_for_locale_id(idx);
+   if (code_page == 0)
+       return false;
+
+   WCHAR wide_c;
+   if (::MultiByteToWideChar(code_page, 0,  &c, 1,  &wide_c, 1) == 0)
+       return false;
+
+   WORD mask;
+   if(::GetStringTypeExW(idx, CT_CTYPE1, &wide_c, 1, &mask) && (mask & C1_UPPER))
+      return true;
+   return false;
+#endif
+}
+
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(wchar_t c, lcid_type idx)
+{
+   WORD mask;
+   if(::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_UPPER))
+      return true;
+   return false;
+}
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is_upper(unsigned short ca, lcid_type idx)
+{
+   WORD mask;
+   wchar_t c = ca;
+   if(::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_UPPER))
+      return true;
+   return false;
+}
+#endif
+
+void free_module(void* mod)
+{
+   ::FreeLibrary(static_cast<HMODULE>(mod));
+}
+
+BOOST_REGEX_DECL cat_type BOOST_REGEX_CALL w32_cat_open(const std::string& name)
+{
+#ifndef BOOST_NO_ANSI_APIS
+   cat_type result(::LoadLibraryA(name.c_str()), &free_module);
+   return result;
+#else
+   LPWSTR wide_name = (LPWSTR)_alloca( (name.size() + 1) * sizeof(WCHAR) );
+   if (::MultiByteToWideChar(CP_ACP, 0,  name.c_str(), name.size(),  wide_name, name.size() + 1) == 0)
+       return cat_type();
+
+   cat_type result(::LoadLibraryW(wide_name), &free_module);
+   return result;
+#endif
+}
+
+BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type, int i, const std::string& def)
+{
+#ifndef BOOST_NO_ANSI_APIS
+   char buf[256];
+   if(0 == ::LoadStringA(
+      static_cast<HMODULE>(cat.get()),
+      i,
+      buf,
+      256
+   ))
+   {
+      return def;
+   }
+#else
+   WCHAR wbuf[256];
+   int r = ::LoadStringW(
+      static_cast<HMODULE>(cat.get()),
+      i,
+      wbuf,
+      256
+   );
+   if (r == 0)
+      return def;
+
+
+   int buf_size = 1 + ::WideCharToMultiByte(CP_ACP, 0,  wbuf, r,  NULL, 0,  NULL, NULL);
+   LPSTR buf = (LPSTR)_alloca(buf_size);
+   if (::WideCharToMultiByte(CP_ACP, 0,  wbuf, r,  buf, buf_size,  NULL, NULL) == 0)
+      return def; // failed conversion.
+#endif
+   return std::string(buf);
+}
+
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL std::wstring BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type, int i, const std::wstring& def)
+{
+   wchar_t buf[256];
+   if(0 == ::LoadStringW(
+      static_cast<HMODULE>(cat.get()),
+      i,
+      buf,
+      256
+   ))
+   {
+      return def;
+   }
+   return std::wstring(buf);
+}
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+BOOST_REGEX_DECL std::basic_string<unsigned short> BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type, int i, const std::basic_string<unsigned short>& def)
+{
+   unsigned short buf[256];
+   if(0 == ::LoadStringW(
+      static_cast<HMODULE>(cat.get()),
+      i,
+      (LPWSTR)buf,
+      256
+   ))
+   {
+      return def;
+   }
+   return std::basic_string<unsigned short>(buf);
+}
+#endif
+#endif
+BOOST_REGEX_DECL std::string BOOST_REGEX_CALL w32_transform(lcid_type idx, const char* p1, const char* p2)
+{
+#ifndef BOOST_NO_ANSI_APIS
+   int bytes = ::LCMapStringA(
+      idx,       // locale identifier
+      LCMAP_SORTKEY,  // mapping transformation type
+      p1,  // source string
+      static_cast<int>(p2 - p1),        // number of characters in source string
+      0,  // destination buffer
+      0        // size of destination buffer
+      );
+   if(!bytes)
+      return std::string(p1, p2);
+   std::string result(++bytes, '\0');
+   bytes = ::LCMapStringA(
+      idx,       // locale identifier
+      LCMAP_SORTKEY,  // mapping transformation type
+      p1,  // source string
+      static_cast<int>(p2 - p1),        // number of characters in source string
+      &*result.begin(),  // destination buffer
+      bytes        // size of destination buffer
+      );
+#else
+   UINT code_page = get_code_page_for_locale_id(idx);
+   if(code_page == 0)
+      return std::string(p1, p2);
+
+   int src_len = static_cast<int>(p2 - p1);
+   LPWSTR wide_p1 = (LPWSTR)_alloca( (src_len + 1) * 2 );
+   if(::MultiByteToWideChar(code_page, 0,  p1, src_len,  wide_p1, src_len + 1) == 0)
+      return std::string(p1, p2);
+
+   int bytes = ::LCMapStringW(
+      idx,       // locale identifier
+      LCMAP_SORTKEY,  // mapping transformation type
+      wide_p1,  // source string
+      src_len,        // number of characters in source string
+      0,  // destination buffer
+      0        // size of destination buffer
+      );
+   if(!bytes)
+      return std::string(p1, p2);
+   std::string result(++bytes, '\0');
+   bytes = ::LCMapStringW(
+      idx,       // locale identifier
+      LCMAP_SORTKEY,  // mapping transformation type
+      wide_p1,  // source string
+      src_len,        // number of characters in source string
+      (LPWSTR)&*result.begin(),  // destination buffer
+      bytes        // size of destination buffer
+      );
+#endif
+   if(bytes > static_cast<int>(result.size()))
+      return std::string(p1, p2);
+   while(result.size() && result[result.size()-1] == '\0')
+   {
+      result.erase(result.size()-1);
+   }
+   return result;
+}
+
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL std::wstring BOOST_REGEX_CALL w32_transform(lcid_type idx, const wchar_t* p1, const wchar_t* p2)
+{
+   int bytes = ::LCMapStringW(
+      idx,       // locale identifier
+      LCMAP_SORTKEY,  // mapping transformation type
+      p1,  // source string
+      static_cast<int>(p2 - p1),        // number of characters in source string
+      0,  // destination buffer
+      0        // size of destination buffer
+      );
+   if(!bytes)
+      return std::wstring(p1, p2);
+   std::string result(++bytes, '\0');
+   bytes = ::LCMapStringW(
+      idx,       // locale identifier
+      LCMAP_SORTKEY,  // mapping transformation type
+      p1,  // source string
+      static_cast<int>(p2 - p1),        // number of characters in source string
+      reinterpret_cast<wchar_t*>(&*result.begin()),  // destination buffer *of bytes*
+      bytes        // size of destination buffer
+      );
+   if(bytes > static_cast<int>(result.size()))
+      return std::wstring(p1, p2);
+   while(result.size() && result[result.size()-1] == L'\0')
+   {
+      result.erase(result.size()-1);
+   }
+   std::wstring r2;
+   for(std::string::size_type i = 0; i < result.size(); ++i)
+      r2.append(1, static_cast<wchar_t>(static_cast<unsigned char>(result[i])));
+   return r2;
+}
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+BOOST_REGEX_DECL std::basic_string<unsigned short> BOOST_REGEX_CALL w32_transform(lcid_type idx, const unsigned short* p1, const unsigned short* p2)
+{
+   int bytes = ::LCMapStringW(
+      idx,       // locale identifier
+      LCMAP_SORTKEY,  // mapping transformation type
+      (LPCWSTR)p1,  // source string
+      static_cast<int>(p2 - p1),        // number of characters in source string
+      0,  // destination buffer
+      0        // size of destination buffer
+      );
+   if(!bytes)
+      return std::basic_string<unsigned short>(p1, p2);
+   std::string result(++bytes, '\0');
+   bytes = ::LCMapStringW(
+      idx,       // locale identifier
+      LCMAP_SORTKEY,  // mapping transformation type
+      (LPCWSTR)p1,  // source string
+      static_cast<int>(p2 - p1),        // number of characters in source string
+      reinterpret_cast<wchar_t*>(&*result.begin()),  // destination buffer *of bytes*
+      bytes        // size of destination buffer
+      );
+   if(bytes > static_cast<int>(result.size()))
+      return std::basic_string<unsigned short>(p1, p2);
+   while(result.size() && result[result.size()-1] == L'\0')
+   {
+      result.erase(result.size()-1);
+   }
+   std::basic_string<unsigned short> r2;
+   for(std::string::size_type i = 0; i < result.size(); ++i)
+      r2.append(1, static_cast<unsigned short>(static_cast<unsigned char>(result[i])));
+   return r2;
+}
+#endif
+#endif
+BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_tolower(char c, lcid_type idx)
+{
+   char result[2];
+#ifndef BOOST_NO_ANSI_APIS
+   int b = ::LCMapStringA(
+      idx,       // locale identifier
+      LCMAP_LOWERCASE,  // mapping transformation type
+      &c,  // source string
+      1,        // number of characters in source string
+      result,  // destination buffer
+      1);        // size of destination buffer
+   if(b == 0)
+      return c;
+#else
+   UINT code_page = get_code_page_for_locale_id(idx);
+   if (code_page == 0)
+      return c;
+
+   WCHAR wide_c;
+   if (::MultiByteToWideChar(code_page, 0,  &c, 1,  &wide_c, 1) == 0)
+      return c;
+
+   WCHAR wide_result;
+   int b = ::LCMapStringW(
+      idx,       // locale identifier
+      LCMAP_LOWERCASE,  // mapping transformation type
+      &wide_c,  // source string
+      1,        // number of characters in source string
+      &wide_result,  // destination buffer
+      1);        // size of destination buffer
+   if(b == 0)
+      return c;
+
+   if (::WideCharToMultiByte(code_page, 0,  &wide_result, 1,  result, 2,  NULL, NULL) == 0)
+       return c;  // No single byte lower case equivalent available
+#endif
+   return result[0];
+}
+
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL w32_tolower(wchar_t c, lcid_type idx)
+{
+   wchar_t result[2];
+   int b = ::LCMapStringW(
+      idx,       // locale identifier
+      LCMAP_LOWERCASE,  // mapping transformation type
+      &c,  // source string
+      1,        // number of characters in source string
+      result,  // destination buffer
+      1);        // size of destination buffer
+   if(b == 0)
+      return c;
+   return result[0];
+}
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL w32_tolower(unsigned short c, lcid_type idx)
+{
+   wchar_t result[2];
+   int b = ::LCMapStringW(
+      idx,       // locale identifier
+      LCMAP_LOWERCASE,  // mapping transformation type
+      (wchar_t const*)&c,  // source string
+      1,        // number of characters in source string
+      result,  // destination buffer
+      1);        // size of destination buffer
+   if(b == 0)
+      return c;
+   return result[0];
+}
+#endif
+#endif
+BOOST_REGEX_DECL char BOOST_REGEX_CALL w32_toupper(char c, lcid_type idx)
+{
+   char result[2];
+#ifndef BOOST_NO_ANSI_APIS
+   int b = ::LCMapStringA(
+      idx,       // locale identifier
+      LCMAP_UPPERCASE,  // mapping transformation type
+      &c,  // source string
+      1,        // number of characters in source string
+      result,  // destination buffer
+      1);        // size of destination buffer
+   if(b == 0)
+      return c;
+#else
+   UINT code_page = get_code_page_for_locale_id(idx);
+   if(code_page == 0)
+       return c;
+
+   WCHAR wide_c;
+   if (::MultiByteToWideChar(code_page, 0,  &c, 1,  &wide_c, 1) == 0)
+       return c;
+
+   WCHAR wide_result;
+   int b = ::LCMapStringW(
+      idx,       // locale identifier
+      LCMAP_UPPERCASE,  // mapping transformation type
+      &wide_c,  // source string
+      1,        // number of characters in source string
+      &wide_result,  // destination buffer
+      1);        // size of destination buffer
+   if(b == 0)
+      return c;
+
+   if (::WideCharToMultiByte(code_page, 0,  &wide_result, 1,  result, 2,  NULL, NULL) == 0)
+       return c;  // No single byte upper case equivalent available.
+#endif
+   return result[0];
+}
+
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL wchar_t BOOST_REGEX_CALL w32_toupper(wchar_t c, lcid_type idx)
+{
+   wchar_t result[2];
+   int b = ::LCMapStringW(
+      idx,       // locale identifier
+      LCMAP_UPPERCASE,  // mapping transformation type
+      &c,  // source string
+      1,        // number of characters in source string
+      result,  // destination buffer
+      1);        // size of destination buffer
+   if(b == 0)
+      return c;
+   return result[0];
+}
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+BOOST_REGEX_DECL unsigned short BOOST_REGEX_CALL w32_toupper(unsigned short c, lcid_type idx)
+{
+   wchar_t result[2];
+   int b = ::LCMapStringW(
+      idx,       // locale identifier
+      LCMAP_UPPERCASE,  // mapping transformation type
+      (wchar_t const*)&c,  // source string
+      1,        // number of characters in source string
+      result,  // destination buffer
+      1);        // size of destination buffer
+   if(b == 0)
+      return c;
+   return result[0];
+}
+#endif
+#endif
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type idx, pdalboost::uint32_t m, char c)
+{
+   WORD mask;
+#ifndef BOOST_NO_ANSI_APIS
+   if(::GetStringTypeExA(idx, CT_CTYPE1, &c, 1, &mask) && (mask & m & w32_regex_traits_implementation<char>::mask_base))
+      return true;
+#else
+   UINT code_page = get_code_page_for_locale_id(idx);
+   if(code_page == 0)
+       return false;
+
+   WCHAR wide_c;
+   if (::MultiByteToWideChar(code_page, 0,  &c, 1,  &wide_c, 1) == 0)
+       return false;
+
+   if(::GetStringTypeExW(idx, CT_CTYPE1, &wide_c, 1, &mask) && (mask & m & w32_regex_traits_implementation<char>::mask_base))
+      return true;
+#endif
+   if((m & w32_regex_traits_implementation<char>::mask_word) && (c == '_'))
+      return true;
+   return false;
+}
+
+#ifndef BOOST_NO_WREGEX
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type idx, pdalboost::uint32_t m, wchar_t c)
+{
+   WORD mask;
+   if(::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & m & w32_regex_traits_implementation<wchar_t>::mask_base))
+      return true;
+   if((m & w32_regex_traits_implementation<wchar_t>::mask_word) && (c == '_'))
+      return true;
+   if((m & w32_regex_traits_implementation<wchar_t>::mask_unicode) && (c > 0xff))
+      return true;
+   return false;
+}
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+BOOST_REGEX_DECL bool BOOST_REGEX_CALL w32_is(lcid_type idx, pdalboost::uint32_t m, unsigned short c)
+{
+   WORD mask;
+   if(::GetStringTypeExW(idx, CT_CTYPE1, (wchar_t const*)&c, 1, &mask) && (mask & m & w32_regex_traits_implementation<wchar_t>::mask_base))
+      return true;
+   if((m & w32_regex_traits_implementation<wchar_t>::mask_word) && (c == '_'))
+      return true;
+   if((m & w32_regex_traits_implementation<wchar_t>::mask_unicode) && (c > 0xff))
+      return true;
+   return false;
+}
+#endif
+#endif
+
+} // BOOST_REGEX_DETAIL_NS
+} // boost
+
+#endif
+
diff --git a/vendor/pdalboost/libs/regex/src/wc_regex_traits.cpp b/vendor/pdalboost/libs/regex/src/wc_regex_traits.cpp
new file mode 100644
index 0000000..b5fb0e7
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/wc_regex_traits.cpp
@@ -0,0 +1,314 @@
+/*
+ *
+ * Copyright (c) 2004
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE:        wc_regex_traits.cpp
+  *   VERSION:     see <boost/version.hpp>
+  *   DESCRIPTION: Implements out of line members for c_regex_traits<wchar_t>
+  */
+
+
+#define BOOST_REGEX_SOURCE
+
+#include <boost/detail/workaround.hpp>
+#include <memory>
+#include <string>
+#include "internals.hpp"
+
+#if defined(_DLL_CPPLIB) && !defined(_M_CEE_PURE) && defined(_NATIVE_WCHAR_T_DEFINED) \
+   && !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) || defined(__STD_RWCOMPILER_H__) || defined(_RWSTD_VER))\
+   && BOOST_WORKAROUND(BOOST_MSVC, <1600)
+//
+// This is a horrible workaround, but without declaring these symbols extern we get
+// duplicate symbol errors when linking if the application is built without
+// /Zc:wchar_t
+//
+#ifdef _CRTIMP2_PURE
+#  define BOOST_REGEX_STDLIB_DECL _CRTIMP2_PURE
+#else
+#  define BOOST_REGEX_STDLIB_DECL _CRTIMP2
+#endif
+
+namespace std{
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+template class BOOST_REGEX_STDLIB_DECL allocator<unsigned short>;
+template class BOOST_REGEX_STDLIB_DECL _String_val<unsigned short, allocator<unsigned short> >;
+template class BOOST_REGEX_STDLIB_DECL basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >;
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, > 1300) && BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400))
+template<> BOOST_REGEX_STDLIB_DECL std::size_t __cdecl char_traits<unsigned short>::length(unsigned short const*);
+#endif
+
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==(
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==(
+   const unsigned short *,
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator==(
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
+   const unsigned short *);
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator<(
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
+template BOOST_REGEX_STDLIB_DECL bool __cdecl operator>(
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&,
+   const basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short> >&);
+}
+#endif
+
+#include <boost/regex/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#if !BOOST_WORKAROUND(__BORLANDC__, < 0x560)
+
+#include <boost/regex/v4/c_regex_traits.hpp>
+#ifndef BOOST_NO_WREGEX
+#include <boost/regex/v4/primary_transform.hpp>
+#include <boost/regex/v4/regex_traits_defaults.hpp>
+
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+   using ::wcstol;
+}
+#endif
+
+namespace pdalboost{
+
+c_regex_traits<wchar_t>::string_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::transform(const wchar_t* p1, const wchar_t* p2) 
+{ 
+   std::size_t r;
+   std::size_t s = 10;
+   std::wstring src(p1, p2);
+   std::wstring result(s, L' ');
+   while(s < (r = std::wcsxfrm(&*result.begin(), src.c_str(), s)))
+   {
+#if defined(_CPPLIB_VER)
+      //
+      // A bug in VC11 and 12 causes the program to hang if we pass a null-string
+      // to std::strxfrm, but only for certain locales :-(
+      // Probably effects Intel and Clang or any compiler using the VC std library (Dinkumware).
+      //
+      if(r == INT_MAX)
+      {
+         result.erase();
+         result.insert(result.begin(), static_cast<wchar_t>(0));
+         return result;
+      }
+#endif
+      result.append(r - s + 3, L' ');
+      s = result.size();
+   }
+   result.erase(r);
+   return result; 
+}
+
+c_regex_traits<wchar_t>::string_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::transform_primary(const wchar_t* p1, const wchar_t* p2) 
+{
+   static wchar_t s_delim;
+   static const int s_collate_type = ::pdalboost::BOOST_REGEX_DETAIL_NS::find_sort_syntax(static_cast<const c_regex_traits<wchar_t>*>(0), &s_delim);
+   std::wstring result;
+   //
+   // What we do here depends upon the format of the sort key returned by
+   // sort key returned by this->transform:
+   //
+   switch(s_collate_type)
+   {
+   case ::pdalboost::BOOST_REGEX_DETAIL_NS::sort_C:
+   case ::pdalboost::BOOST_REGEX_DETAIL_NS::sort_unknown:
+      // the best we can do is translate to lower case, then get a regular sort key:
+      {
+         result.assign(p1, p2);
+         for(std::wstring::size_type i = 0; i < result.size(); ++i)
+            result[i] = (std::towlower)(result[i]);
+         result = c_regex_traits<wchar_t>::transform(&*result.begin(), &*result.begin() + result.size());
+         break;
+      }
+   case ::pdalboost::BOOST_REGEX_DETAIL_NS::sort_fixed:
+      {
+         // get a regular sort key, and then truncate it:
+         result = c_regex_traits<wchar_t>::transform(&*result.begin(), &*result.begin() + result.size());
+         result.erase(s_delim);
+         break;
+      }
+   case ::pdalboost::BOOST_REGEX_DETAIL_NS::sort_delim:
+         // get a regular sort key, and then truncate everything after the delim:
+         result = c_regex_traits<wchar_t>::transform(&*result.begin(), &*result.begin() + result.size());
+         if(result.size() && (result[0] == s_delim))
+            break;
+         std::size_t i;
+         for(i = 0; i < result.size(); ++i)
+         {
+            if(result[i] == s_delim)
+               break;
+         }
+         result.erase(i);
+         break;
+   }
+   if(result.empty())
+      result = std::wstring(1, char(0));
+   return result;
+}
+
+c_regex_traits<wchar_t>::char_class_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::lookup_classname(const wchar_t* p1, const wchar_t* p2) 
+{
+   static const char_class_type masks[] = 
+   {
+      0,
+      char_class_alnum, 
+      char_class_alpha,
+      char_class_blank,
+      char_class_cntrl,
+      char_class_digit,
+      char_class_digit,
+      char_class_graph,
+      char_class_horizontal,
+      char_class_lower,
+      char_class_lower,
+      char_class_print,
+      char_class_punct,
+      char_class_space,
+      char_class_space,
+      char_class_upper,
+      char_class_unicode,
+      char_class_upper,
+      char_class_vertical,
+      char_class_alnum | char_class_word, 
+      char_class_alnum | char_class_word, 
+      char_class_xdigit,
+   };
+
+   int idx = ::pdalboost::BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2);
+   if(idx < 0)
+   {
+      std::wstring s(p1, p2);
+      for(std::wstring::size_type i = 0; i < s.size(); ++i)
+         s[i] = (std::towlower)(s[i]);
+      idx = ::pdalboost::BOOST_REGEX_DETAIL_NS::get_default_class_id(&*s.begin(), &*s.begin() + s.size());
+   }
+   BOOST_ASSERT(idx+1 < static_cast<int>(sizeof(masks) / sizeof(masks[0])));
+   return masks[idx+1];
+}
+
+bool BOOST_REGEX_CALL c_regex_traits<wchar_t>::isctype(wchar_t c, char_class_type mask) 
+{
+   return
+      ((mask & char_class_space) && (std::iswspace)(c))
+      || ((mask & char_class_print) && (std::iswprint)(c))
+      || ((mask & char_class_cntrl) && (std::iswcntrl)(c))
+      || ((mask & char_class_upper) && (std::iswupper)(c))
+      || ((mask & char_class_lower) && (std::iswlower)(c))
+      || ((mask & char_class_alpha) && (std::iswalpha)(c))
+      || ((mask & char_class_digit) && (std::iswdigit)(c))
+      || ((mask & char_class_punct) && (std::iswpunct)(c))
+      || ((mask & char_class_xdigit) && (std::iswxdigit)(c))
+      || ((mask & char_class_blank) && (std::iswspace)(c) && !::pdalboost::BOOST_REGEX_DETAIL_NS::is_separator(c))
+      || ((mask & char_class_word) && (c == '_'))
+      || ((mask & char_class_unicode) && (c & ~static_cast<wchar_t>(0xff)))
+      || ((mask & char_class_vertical) && (::pdalboost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == L'\v')))
+      || ((mask & char_class_horizontal) && (std::iswspace)(c) && !::pdalboost::BOOST_REGEX_DETAIL_NS::is_separator(c) && (c != L'\v'));
+}
+
+c_regex_traits<wchar_t>::string_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::lookup_collatename(const wchar_t* p1, const wchar_t* p2) 
+{
+#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\
+               && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\
+               && !BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)
+   std::string name(p1, p2);
+#else
+   std::string name;
+   const wchar_t* p0 = p1;
+   while(p0 != p2)
+      name.append(1, char(*p0++));
+#endif
+   name = ::pdalboost::BOOST_REGEX_DETAIL_NS::lookup_default_collate_name(name);
+#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\
+               && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)\
+               && !BOOST_WORKAROUND(__BORLANDC__, <= 0x0551)
+   if(name.size())
+      return string_type(name.begin(), name.end());
+#else
+   if(name.size())
+   {
+      string_type result;
+      typedef std::string::const_iterator iter;
+      iter b = name.begin();
+      iter e = name.end();
+      while(b != e)
+         result.append(1, wchar_t(*b++));
+      return result;
+   }
+#endif
+   if(p2 - p1 == 1)
+      return string_type(1, *p1);
+   return string_type();
+}
+
+int BOOST_REGEX_CALL c_regex_traits<wchar_t>::value(wchar_t c, int radix) 
+{
+#ifdef __BORLANDC__
+   // workaround for broken wcstol:
+   if((std::iswxdigit)(c) == 0)
+      return -1;
+#endif
+   wchar_t b[2] = { c, '\0', };
+   wchar_t* ep;
+   int result = std::wcstol(b, &ep, radix);
+   if(ep == b)
+      return -1;
+   return result;
+}
+
+#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T
+c_regex_traits<unsigned short>::string_type BOOST_REGEX_CALL c_regex_traits<unsigned short>::transform(const unsigned short* p1, const unsigned short* p2)
+{
+   std::wstring result = c_regex_traits<wchar_t>::transform((const wchar_t*)p1, (const wchar_t*)p2);
+   return string_type(result.begin(), result.end());
+}
+
+c_regex_traits<unsigned short>::string_type BOOST_REGEX_CALL c_regex_traits<unsigned short>::transform_primary(const unsigned short* p1, const unsigned short* p2)
+{
+   std::wstring result = c_regex_traits<wchar_t>::transform_primary((const wchar_t*)p1, (const wchar_t*)p2);
+   return string_type(result.begin(), result.end());
+}
+
+c_regex_traits<unsigned short>::char_class_type BOOST_REGEX_CALL c_regex_traits<unsigned short>::lookup_classname(const unsigned short* p1, const unsigned short* p2)
+{
+   return c_regex_traits<wchar_t>::lookup_classname((const wchar_t*)p1, (const wchar_t*)p2);
+}
+
+c_regex_traits<unsigned short>::string_type BOOST_REGEX_CALL c_regex_traits<unsigned short>::lookup_collatename(const unsigned short* p1, const unsigned short* p2)
+{
+   std::wstring result = c_regex_traits<wchar_t>::lookup_collatename((const wchar_t*)p1, (const wchar_t*)p2);
+   return string_type(result.begin(), result.end());
+}
+
+bool BOOST_REGEX_CALL c_regex_traits<unsigned short>::isctype(unsigned short c, char_class_type m)
+{
+   return c_regex_traits<wchar_t>::isctype(c, m);
+}
+
+int BOOST_REGEX_CALL c_regex_traits<unsigned short>::value(unsigned short c, int radix)
+{
+   return c_regex_traits<wchar_t>::value(c, radix);
+}
+
+#endif
+
+}
+
+#endif // BOOST_NO_WREGEX
+
+#endif // __BORLANDC__
+
diff --git a/vendor/pdalboost/libs/regex/src/wide_posix_api.cpp b/vendor/pdalboost/libs/regex/src/wide_posix_api.cpp
new file mode 100644
index 0000000..d99887a
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/wide_posix_api.cpp
@@ -0,0 +1,312 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+ 
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE:        wide_posix_api.cpp
+  *   VERSION:     see <boost/version.hpp>
+  *   DESCRIPTION: Implements the wide character POSIX API wrappers.
+  */
+
+#define BOOST_REGEX_SOURCE
+
+#include <boost/regex/config.hpp>
+
+#ifndef BOOST_NO_WREGEX
+
+#include <boost/regex.hpp>
+#include <boost/cregex.hpp>
+
+#include <cwchar>
+#include <cstring>
+#include <cstdio>
+
+#ifdef BOOST_INTEL
+#pragma warning(disable:981)
+#endif
+
+#if defined(BOOST_NO_STDC_NAMESPACE) || defined(__NetBSD__)
+namespace std{
+#  ifndef BOOST_NO_SWPRINTF
+      using ::swprintf;
+#  endif
+}
+#endif
+
+
+namespace pdalboost{
+
+namespace {
+
+unsigned int wmagic_value = 28631;
+
+const wchar_t* wnames[] = {
+      L"REG_NOERROR",
+      L"REG_NOMATCH",
+      L"REG_BADPAT",
+      L"REG_ECOLLATE",
+      L"REG_ECTYPE",
+      L"REG_EESCAPE",
+      L"REG_ESUBREG",
+      L"REG_EBRACK",
+      L"REG_EPAREN",
+      L"REG_EBRACE",
+      L"REG_BADBR",
+      L"REG_ERANGE",
+      L"REG_ESPACE",
+      L"REG_BADRPT",
+      L"REG_EEND",
+      L"REG_ESIZE",
+      L"REG_ERPAREN",
+      L"REG_EMPTY",
+      L"REG_ECOMPLEXITY",
+      L"REG_ESTACK",
+      L"REG_E_PERL",
+      L"REG_E_UNKNOWN",
+};
+}
+
+typedef pdalboost::basic_regex<wchar_t, c_regex_traits<wchar_t> > wc_regex_type;
+
+BOOST_REGEX_DECL int BOOST_REGEX_CCALL regcompW(regex_tW* expression, const wchar_t* ptr, int f)
+{
+#ifndef BOOST_NO_EXCEPTIONS
+   try{
+#endif
+      expression->guts = new wc_regex_type();
+#ifndef BOOST_NO_EXCEPTIONS
+   } catch(...)
+   {
+      expression->guts = 0;
+      return REG_ESPACE;
+   }
+#else
+   if(0 == expression->guts)
+      return REG_E_MEMORY;
+#endif
+   // set default flags:
+   pdalboost::uint_fast32_t flags = (f & REG_PERLEX) ? 0 : ((f & REG_EXTENDED) ? wregex::extended : wregex::basic);
+   expression->eflags = (f & REG_NEWLINE) ? match_not_dot_newline : match_default;
+
+   // and translate those that are actually set:
+   if(f & REG_NOCOLLATE)
+   {
+      flags |= wregex::nocollate;
+#ifndef BOOST_REGEX_V3
+      flags &= ~wregex::collate;
+#endif
+   }
+
+   if(f & REG_NOSUB)
+   {
+      //expression->eflags |= match_any;
+      flags |= wregex::nosubs;
+   }
+
+   if(f & REG_NOSPEC)
+      flags |= wregex::literal;
+   if(f & REG_ICASE)
+      flags |= wregex::icase;
+   if(f & REG_ESCAPE_IN_LISTS)
+      flags &= ~wregex::no_escape_in_lists;
+   if(f & REG_NEWLINE_ALT)
+      flags |= wregex::newline_alt;
+
+   const wchar_t* p2;
+   if(f & REG_PEND)
+      p2 = expression->re_endp;
+   else p2 = ptr + std::wcslen(ptr);
+
+   int result;
+
+#ifndef BOOST_NO_EXCEPTIONS
+   try{
+#endif
+      expression->re_magic = wmagic_value;
+      static_cast<wc_regex_type*>(expression->guts)->set_expression(ptr, p2, flags);
+      expression->re_nsub = static_cast<wc_regex_type*>(expression->guts)->mark_count();
+      result = static_cast<wc_regex_type*>(expression->guts)->error_code();
+#ifndef BOOST_NO_EXCEPTIONS
+   } 
+   catch(const pdalboost::regex_error& be)
+   {
+      result = be.code();
+   }
+   catch(...)
+   {
+      result = REG_E_UNKNOWN;
+   }
+#endif
+   if(result)
+      regfreeW(expression);
+   return result;
+
+}
+
+BOOST_REGEX_DECL regsize_t BOOST_REGEX_CCALL regerrorW(int code, const regex_tW* e, wchar_t* buf, regsize_t buf_size)
+{
+   std::size_t result = 0;
+   if(code & REG_ITOA)
+   {
+      code &= ~REG_ITOA;
+      if((code <= (int)REG_E_UNKNOWN) && (code >= 0))
+      {
+         result = std::wcslen(wnames[code]) + 1;
+         if(buf_size >= result)
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(_WIN32_WCE) && !defined(UNDER_CE)
+            ::wcscpy_s(buf, buf_size, wnames[code]);
+#else
+            std::wcscpy(buf, wnames[code]);
+#endif
+         return result;
+      }
+      return result;
+   }
+#if !defined(BOOST_NO_SWPRINTF)
+   if(code == REG_ATOI)
+   {
+      wchar_t localbuf[5];
+      if(e == 0)
+         return 0;
+      for(int i = 0; i <= (int)REG_E_UNKNOWN; ++i)
+      {
+         if(std::wcscmp(e->re_endp, wnames[i]) == 0)
+         {
+#if defined(_WIN32_WCE) && !defined(UNDER_CE)
+            (std::swprintf)(localbuf, L"%d", i);
+#else
+            (std::swprintf)(localbuf, 5, L"%d", i);
+#endif
+            if(std::wcslen(localbuf) < buf_size)
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(_WIN32_WCE) && !defined(UNDER_CE)
+               ::wcscpy_s(buf, buf_size, localbuf);
+#else
+               std::wcscpy(buf, localbuf);
+#endif
+            return std::wcslen(localbuf) + 1;
+         }
+      }
+#if defined(_WIN32_WCE) && !defined(UNDER_CE)
+      (std::swprintf)(localbuf, L"%d", 0);
+#else
+      (std::swprintf)(localbuf, 5, L"%d", 0);
+#endif
+      if(std::wcslen(localbuf) < buf_size)
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(_WIN32_WCE) && !defined(UNDER_CE)
+         ::wcscpy_s(buf, buf_size, localbuf);
+#else
+         std::wcscpy(buf, localbuf);
+#endif
+      return std::wcslen(localbuf) + 1;
+   }
+#endif
+   if(code <= (int)REG_E_UNKNOWN)
+   {
+      std::string p;
+      if((e) && (e->re_magic == wmagic_value))
+         p = static_cast<wc_regex_type*>(e->guts)->get_traits().error_string(static_cast< ::pdalboost::regex_constants::error_type>(code));
+      else
+      {
+         p = BOOST_REGEX_DETAIL_NS::get_default_error_string(static_cast< ::pdalboost::regex_constants::error_type>(code));
+      }
+      std::size_t len = p.size();
+      if(len < buf_size)
+      {
+         BOOST_REGEX_DETAIL_NS::copy(p.c_str(), p.c_str() + p.size() + 1, buf);
+      }
+      return len + 1;
+   }
+   if(buf_size)
+      *buf = 0;
+   return 0;
+}
+
+BOOST_REGEX_DECL int BOOST_REGEX_CCALL regexecW(const regex_tW* expression, const wchar_t* buf, regsize_t n, regmatch_t* array, int eflags)
+{
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4267)
+#endif
+   bool result = false;
+   match_flag_type flags = match_default | expression->eflags;
+   const wchar_t* end;
+   const wchar_t* start;
+   wcmatch m;
+   
+   if(eflags & REG_NOTBOL)
+      flags |= match_not_bol;
+   if(eflags & REG_NOTEOL)
+      flags |= match_not_eol;
+   if(eflags & REG_STARTEND)
+   {
+      start = buf + array[0].rm_so;
+      end = buf + array[0].rm_eo;
+   }
+   else
+   {
+      start = buf;
+      end = buf + std::wcslen(buf);
+   }
+
+#ifndef BOOST_NO_EXCEPTIONS
+   try{
+#endif
+   if(expression->re_magic == wmagic_value)
+   {
+      result = regex_search(start, end, m, *static_cast<wc_regex_type*>(expression->guts), flags);
+   }
+   else
+      return result;
+#ifndef BOOST_NO_EXCEPTIONS
+   } catch(...)
+   {
+      return REG_E_UNKNOWN;
+   }
+#endif
+   if(result)
+   {
+      // extract what matched:
+      std::size_t i;
+      for(i = 0; (i < n) && (i < expression->re_nsub + 1); ++i)
+      {
+         array[i].rm_so = (m[i].matched == false) ? -1 : (m[i].first - buf);
+         array[i].rm_eo = (m[i].matched == false) ? -1 : (m[i].second - buf);
+      }
+      // and set anything else to -1:
+      for(i = expression->re_nsub + 1; i < n; ++i)
+      {
+         array[i].rm_so = -1;
+         array[i].rm_eo = -1;
+      }
+      return 0;
+   }
+   return REG_NOMATCH;
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+}
+
+BOOST_REGEX_DECL void BOOST_REGEX_CCALL regfreeW(regex_tW* expression)
+{
+   if(expression->re_magic == wmagic_value)
+   {
+      delete static_cast<wc_regex_type*>(expression->guts);
+   }
+   expression->re_magic = 0;
+}
+
+} // namespace pdalboost;
+
+#endif
+
+
+
+
diff --git a/vendor/pdalboost/libs/regex/src/winstances.cpp b/vendor/pdalboost/libs/regex/src/winstances.cpp
new file mode 100644
index 0000000..1e0b859
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/src/winstances.cpp
@@ -0,0 +1,35 @@
+/*
+ *
+ * Copyright (c) 1998-2002
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+
+ /*
+  *   LOCATION:    see http://www.boost.org for most recent version.
+  *   FILE:        winstances.cpp
+  *   VERSION:     see <boost/version.hpp>
+  *   DESCRIPTION: regex wide character template instances.
+  */
+
+#define BOOST_REGEX_SOURCE
+
+#include <boost/regex/config.hpp>
+
+#if !defined(BOOST_NO_WREGEX) && !defined(BOOST_REGEX_NO_EXTERNAL_TEMPLATES)
+#define BOOST_REGEX_WIDE_INSTANTIATE
+
+#ifdef __BORLANDC__
+#pragma hrdstop
+#endif
+
+#include <boost/regex.hpp>
+
+#endif
+
+
+
diff --git a/vendor/pdalboost/libs/regex/test/config_info/regex_config_info.cpp b/vendor/pdalboost/libs/regex/test/config_info/regex_config_info.cpp
new file mode 100644
index 0000000..211e9ec
--- /dev/null
+++ b/vendor/pdalboost/libs/regex/test/config_info/regex_config_info.cpp
@@ -0,0 +1,73 @@
+/*
+ *
+ * Copyright (c) 2003
+ * John Maddock
+ *
+ * Use, modification and distribution are subject to the 
+ * Boost Software License, Version 1.0. (See accompanying file 
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+
+//
+// This program extends config_info to print out regex library
+// configuration information.  We do this by redfining the main
+// provided by config_info, our real main will call it later:
+//
+#ifndef OLD_MAIN
+#  define OLD_MAIN info_main
+#endif
+
+#define main OLD_MAIN
+#include <libs/config/test/config_info.cpp>
+#undef main
+#ifndef NEW_MAIN
+#  define NEW_MAIN main
+#endif
+#include <boost/regex.hpp>
+
+int NEW_MAIN()
+{
+   OLD_MAIN();
+
+   print_separator();
+   PRINT_MACRO(BOOST_REGEX_USER_CONFIG);
+   PRINT_MACRO(BOOST_REGEX_USE_C_LOCALE);
+   PRINT_MACRO(BOOST_REGEX_USE_CPP_LOCALE);
+   PRINT_MACRO(BOOST_REGEX_HAS_DLL_RUNTIME);
+   PRINT_MACRO(BOOST_REGEX_DYN_LINK);
+   PRINT_MACRO(BOOST_REGEX_NO_LIB);
+   PRINT_MACRO(BOOST_REGEX_NO_TEMPLATE_SWITCH_MERGE);
+   PRINT_MACRO(BOOST_REGEX_NO_W32);
+   PRINT_MACRO(BOOST_REGEX_NO_BOOL);
+   PRINT_MACRO(BOOST_REGEX_NO_EXTERNAL_TEMPLATES);
+   PRINT_MACRO(BOOST_REGEX_NO_FWD);
+   PRINT_MACRO(BOOST_REGEX_V3);
+   PRINT_MACRO(BOOST_REGEX_HAS_MS_STACK_GUARD);
+   PRINT_MACRO(BOOST_REGEX_RECURSIVE);
+   PRINT_MACRO(BOOST_REGEX_NON_RECURSIVE);
+   PRINT_MACRO(BOOST_REGEX_BLOCKSIZE);
+   PRINT_MACRO(BOOST_REGEX_MAX_BLOCKS);
+   PRINT_MACRO(BOOST_REGEX_MAX_CACHE_BLOCKS);
+   PRINT_MACRO(BOOST_NO_WREGEX);
+   PRINT_MACRO(BOOST_REGEX_NO_FILEITER);
+   PRINT_MACRO(BOOST_REGEX_STATIC_LINK);
+   PRINT_MACRO(BOOST_REGEX_DYN_LINK);
+   PRINT_MACRO(BOOST_REGEX_DECL);
+   PRINT_MACRO(BOOST_REGEX_CALL);
+   PRINT_MACRO(BOOST_REGEX_CCALL);
+   PRINT_MACRO(BOOST_REGEX_MAX_STATE_COUNT);
+   PRINT_MACRO(BOOST_REGEX_BUGGY_CTYPE_FACET);
+   PRINT_MACRO(BOOST_REGEX_MATCH_EXTRA);
+   PRINT_MACRO(BOOST_HAS_ICU);
+   PRINT_MACRO(BOOST_REGEX_HAS_OTHER_WCHAR_T);
+
+#if defined(BOOST_REGEX_CONFIG_INFO) && !defined(NO_RECURSE)
+   print_regex_library_info();
+#endif
+
+   return 0;
+}
+
+
+
diff --git a/vendor/pdalboost/libs/serialization/src/archive_exception.cpp b/vendor/pdalboost/libs/serialization/src/archive_exception.cpp
new file mode 100644
index 0000000..6c0d785
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/archive_exception.cpp
@@ -0,0 +1,137 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// archive_exception.cpp:
+
+// (C) Copyright 2009 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <exception>
+#include <string>
+#include <cstring>
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/archive_exception.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+BOOST_ARCHIVE_DECL
+unsigned int
+archive_exception::append(unsigned int l, const char * a){
+    while(l < (sizeof(m_buffer) - 1)){
+        char c = *a++;
+        if('\0' == c)
+            break;
+        m_buffer[l++] = c;
+    }
+    m_buffer[l] = '\0';
+    return l;
+}
+
+BOOST_ARCHIVE_DECL
+archive_exception::archive_exception(
+    exception_code c, 
+    const char * e1,
+    const char * e2
+) BOOST_NOEXCEPT :
+    code(c)
+{
+    unsigned int length = 0;
+    switch(code){
+    case no_exception:
+        length = append(length, "uninitialized exception");
+        break;
+    case unregistered_class:
+        length = append(length, "unregistered class");
+        if(NULL != e1){
+            length = append(length, " - ");
+            length = append(length, e1);
+        }    
+        break;
+    case invalid_signature:
+        length = append(length, "invalid signature");
+        break;
+    case unsupported_version:
+        length = append(length, "unsupported version");
+        break;
+    case pointer_conflict:
+        length = append(length, "pointer conflict");
+        break;
+    case incompatible_native_format:
+        length = append(length, "incompatible native format");
+        if(NULL != e1){
+            length = append(length, " - ");
+            length = append(length, e1);
+        }    
+        break;
+    case array_size_too_short:
+        length = append(length, "array size too short");
+        break;
+    case input_stream_error:
+        length = append(length, "input stream error");
+        break;
+    case invalid_class_name:
+        length = append(length, "class name too long");
+        break;
+    case unregistered_cast:
+        length = append(length, "unregistered void cast ");
+        length = append(length, (NULL != e1) ? e1 : "?");
+        length = append(length, "<-");
+        length = append(length, (NULL != e2) ? e2 : "?");
+        break;
+    case unsupported_class_version:
+        length = append(length, "class version ");
+        length = append(length, (NULL != e1) ? e1 : "<unknown class>");
+        break;
+    case other_exception:
+        // if get here - it indicates a derived exception 
+        // was sliced by passing by value in catch
+        length = append(length, "unknown derived exception");
+        break;
+    case multiple_code_instantiation:
+        length = append(length, "code instantiated in more than one module");
+        if(NULL != e1){
+            length = append(length, " - ");
+            length = append(length, e1);
+        }    
+        break;
+    case output_stream_error:
+        length = append(length, "output stream error");
+        break;
+    default:
+        BOOST_ASSERT(false);
+        length = append(length, "programming error");
+        break;
+    }
+}
+
+BOOST_ARCHIVE_DECL
+archive_exception::archive_exception(archive_exception const & oth) BOOST_NOEXCEPT :
+	std::exception(oth),
+	code(oth.code)
+{
+	std::memcpy(m_buffer,oth.m_buffer,sizeof m_buffer);
+}
+
+BOOST_ARCHIVE_DECL
+archive_exception::~archive_exception() BOOST_NOEXCEPT_OR_NOTHROW {}
+
+BOOST_ARCHIVE_DECL const char *
+archive_exception::what() const BOOST_NOEXCEPT_OR_NOTHROW {
+    return m_buffer;
+}
+
+BOOST_ARCHIVE_DECL
+archive_exception::archive_exception() BOOST_NOEXCEPT :
+    code(no_exception)
+{}
+
+} // archive
+} // boost
diff --git a/vendor/pdalboost/libs/serialization/src/basic_archive.cpp b/vendor/pdalboost/libs/serialization/src/basic_archive.cpp
new file mode 100644
index 0000000..6d3164e
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/basic_archive.cpp
@@ -0,0 +1,85 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_archive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+//////////////////////////////////////////////////////////////////////
+//
+//  objects are stored as
+//
+//      class_id*   // -1 for a null pointer
+//      if a new class id
+//      [
+//          exported key - class name*
+//          tracking level - always/never
+//          class version
+//      ]
+//
+//      if tracking
+//      [
+//          object_id
+//      ]
+//          
+//      [   // if a new object id
+//          data...
+//      ]
+//
+//  * required only for pointers - optional for objects
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/basic_archive.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+///////////////////////////////////////////////////////////////////////
+// constants used in archive signature
+//This should never ever change. note that is not an std::string
+// string.
+BOOST_SYMBOL_VISIBLE const char * 
+BOOST_ARCHIVE_SIGNATURE(){
+    return "serialization::archive";
+}
+
+// this should change if the capabilities are added to the library
+// such that archives can be created which can't be read by previous
+// versions of this library
+// 1 - initial version
+// 2 - made address tracking optional
+// 3 - numerous changes - can't guarentee compatibility with previous versions
+// 4 - Boost 1.34
+//     added item_version to properly support versioning for collections 
+// 5 - Boost 1.36
+//     changed serialization of collections: adding version even for primitive
+//     types caused backwards compatibility breaking change in 1.35
+// 6 - Boost 1.41 17 Nov 2009
+//     serializing collection sizes as std::size_t
+// 7   Boost 1.42 2 Feb 2010
+//     error - changed binary version to 16 bits w/o changing library version #
+//     That is - binary archives are recorded with #6 even though they are
+//     different from the previous versions.  This means that binary archives
+//     created with versions 1.42 and 1.43 will have to be fixed with a special
+//     program which fixes the library version # in the header
+//     Boost 1.43 6 May 2010
+//     no change
+// 8 - Boost 1.44
+//     separated version_type into library_version_type and class_version_type
+//     changed version_type to be stored as 8 bits.
+// 10- fixed base64 output/input.
+// 11- not changes
+// 12- improved serialization of collections
+// 13- simplified visibility, removed Borland, removed pfto
+// 14- improved visibility, refactor map/set
+
+BOOST_SYMBOL_VISIBLE library_version_type
+BOOST_ARCHIVE_VERSION(){
+    return library_version_type(14);
+}
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/basic_iarchive.cpp b/vendor/pdalboost/libs/serialization/src/basic_iarchive.cpp
new file mode 100644
index 0000000..cc9745b
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/basic_iarchive.cpp
@@ -0,0 +1,592 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_archive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp> // msvc 6.0 needs this to suppress warnings
+
+#include <boost/assert.hpp>
+#include <set>
+#include <list>
+#include <vector>
+#include <cstddef> // size_t, NULL
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::size_t; 
+} // namespace std
+#endif
+
+#include <boost/integer_traits.hpp>
+#include <boost/serialization/state_saver.hpp>
+#include <boost/serialization/throw_exception.hpp>
+#include <boost/serialization/tracking.hpp>
+
+#define BOOST_ARCHIVE_SOURCE
+// include this to prevent linker errors when the
+// same modules are marked export and import.
+#define BOOST_SERIALIZATION_SOURCE
+
+#include <boost/archive/archive_exception.hpp>
+
+#include <boost/archive/detail/decl.hpp>
+#include <boost/archive/basic_archive.hpp>
+#include <boost/archive/detail/basic_iserializer.hpp>
+#include <boost/archive/detail/basic_pointer_iserializer.hpp>
+#include <boost/archive/detail/basic_iarchive.hpp>
+
+#include <boost/archive/detail/auto_link_archive.hpp>
+
+using namespace pdalboost::serialization;
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+class basic_iarchive_impl {
+    friend class basic_iarchive;
+    library_version_type m_archive_library_version;
+    unsigned int m_flags;
+
+    //////////////////////////////////////////////////////////////////////
+    // information about each serialized object loaded
+    // indexed on object_id
+    struct aobject
+    {
+        void * address;
+        bool loaded_as_pointer;
+        class_id_type class_id;
+        aobject(
+            void *a,
+            class_id_type class_id_
+        ) :
+            address(a),
+            loaded_as_pointer(false),
+            class_id(class_id_)
+        {}
+        aobject() : 
+            address(NULL),
+            loaded_as_pointer(false),
+            class_id(-2) 
+        {}
+    };
+    typedef std::vector<aobject> object_id_vector_type;
+    object_id_vector_type object_id_vector;
+
+    //////////////////////////////////////////////////////////////////////
+    // used to implement the reset_object_address operation.
+    struct moveable_objects {
+        object_id_type start;
+        object_id_type end;
+        object_id_type recent;
+        bool is_pointer;
+        moveable_objects() :
+            start(0),
+            end(0),
+            recent(0),
+            is_pointer(false)
+        {}
+    } m_moveable_objects;
+
+    void reset_object_address(
+        const void * new_address, 
+        const void *old_address
+    );
+
+    //////////////////////////////////////////////////////////////////////
+    // used by load object to look up class id given basic_serializer
+    struct cobject_type
+    {
+        const basic_iserializer * m_bis;
+        const class_id_type m_class_id;
+        cobject_type(
+            std::size_t class_id,
+            const basic_iserializer & bis
+        ) : 
+            m_bis(& bis),
+            m_class_id(class_id)
+        {}
+        cobject_type(const cobject_type & rhs) : 
+            m_bis(rhs.m_bis),
+            m_class_id(rhs.m_class_id)
+        {}
+        // the following cannot be defined because of the const
+        // member.  This will generate a link error if an attempt
+        // is made to assign.  This should never be necessary
+        cobject_type & operator=(const cobject_type & rhs);
+        bool operator<(const cobject_type &rhs) const
+        {
+            return *m_bis < *(rhs.m_bis);
+        }
+    };
+    typedef std::set<cobject_type> cobject_info_set_type;
+    cobject_info_set_type cobject_info_set;
+
+    //////////////////////////////////////////////////////////////////////
+    // information about each serialized class indexed on class_id
+    class cobject_id 
+    {
+    public:
+        cobject_id & operator=(const cobject_id & rhs){
+            bis_ptr = rhs.bis_ptr;
+            bpis_ptr = rhs.bpis_ptr;
+            file_version = rhs.file_version;
+            tracking_level = rhs.tracking_level;
+            initialized = rhs.initialized;
+            return *this;
+        }
+        const basic_iserializer * bis_ptr;
+        const basic_pointer_iserializer * bpis_ptr;
+        version_type file_version;
+        tracking_type tracking_level;
+        bool initialized;
+
+        cobject_id(const basic_iserializer & bis_) :
+            bis_ptr(& bis_),
+            bpis_ptr(NULL),
+            file_version(0),
+            tracking_level(track_never),
+            initialized(false)
+        {}
+        cobject_id(const cobject_id &rhs): 
+            bis_ptr(rhs.bis_ptr),
+            bpis_ptr(rhs.bpis_ptr),
+            file_version(rhs.file_version),
+            tracking_level(rhs.tracking_level),
+            initialized(rhs.initialized)
+        {}
+    };
+    typedef std::vector<cobject_id> cobject_id_vector_type;
+    cobject_id_vector_type cobject_id_vector;
+
+    //////////////////////////////////////////////////////////////////////
+    // address of the most recent object serialized as a poiner
+    // whose data itself is now pending serialization
+    struct pending {
+        void * object;
+        const basic_iserializer * bis;
+        version_type version;
+        pending() :
+            object(NULL),
+            bis(NULL),
+            version(0)
+        {}
+    } m_pending;
+
+    basic_iarchive_impl(unsigned int flags) :
+        m_archive_library_version(BOOST_ARCHIVE_VERSION()),
+        m_flags(flags)
+    {}
+    void set_library_version(library_version_type archive_library_version){
+        m_archive_library_version = archive_library_version;
+    }
+    bool
+    track(
+        basic_iarchive & ar,
+        void * & t
+    );
+    void
+    load_preamble(
+        basic_iarchive & ar,
+        cobject_id & co
+    );
+    class_id_type register_type(
+        const basic_iserializer & bis
+    );
+
+    // redirect through virtual functions to load functions for this archive
+    template<class T>
+    void load(basic_iarchive & ar, T & t){
+        ar.vload(t);
+    }
+
+//public:
+    void
+    next_object_pointer(void * t){
+        m_pending.object = t;
+    }
+    void delete_created_pointers();
+    class_id_type register_type(
+        const basic_pointer_iserializer & bpis
+    );
+    void load_object(
+        basic_iarchive & ar,
+        void * t,
+        const basic_iserializer & bis
+    );
+    const basic_pointer_iserializer * load_pointer(
+        basic_iarchive & ar,
+        void * & t, 
+        const basic_pointer_iserializer * bpis,
+        const basic_pointer_iserializer * (*finder)(
+            const pdalboost::serialization::extended_type_info & type
+        )
+    );
+};
+
+inline void 
+basic_iarchive_impl::reset_object_address(
+    void const * const new_address, 
+    void const * const old_address
+){
+    if(m_moveable_objects.is_pointer)
+        return;
+
+    // this code handles a couple of situations.
+    // a) where reset_object_address is applied to an untracked object.
+    //    In such a case the call is really superfluous and its really an
+    //    an error.  But we don't have access to the types here so we can't
+    //    know that.  However, this code will effectively turn this situation
+    //    into a no-op and every thing will work fine - albeat with a small
+    //    execution time penalty.
+    // b) where the call to reset_object_address doesn't immediatly follow
+    //    the << operator to which it corresponds.  This would be a bad idea
+    //    but the code may work anyway.  Naturally, a bad practice on the part
+    //    of the programmer but we can't detect it - as above.  So maybe we
+    //    can save a few more people from themselves as above.
+    object_id_type i = m_moveable_objects.recent;
+    for(; i < m_moveable_objects.end; ++i){
+        if(old_address == object_id_vector[i].address)
+            break;
+    }
+    for(; i < m_moveable_objects.end; ++i){
+        void const * const this_address = object_id_vector[i].address;
+        // calculate displacement from this level
+        // warning - pointer arithmetic on void * is in herently non-portable
+        // but expected to work on all platforms in current usage
+        if(this_address > old_address){
+            std::size_t member_displacement
+                = reinterpret_cast<std::size_t>(this_address) 
+                - reinterpret_cast<std::size_t>(old_address);
+            object_id_vector[i].address = reinterpret_cast<void *>(
+                reinterpret_cast<std::size_t>(new_address) + member_displacement
+            );
+        }
+        else{
+            std::size_t member_displacement
+                = reinterpret_cast<std::size_t>(old_address)
+                - reinterpret_cast<std::size_t>(this_address); 
+            object_id_vector[i].address = reinterpret_cast<void *>(
+                reinterpret_cast<std::size_t>(new_address) - member_displacement
+            );
+       }
+    }
+}
+
+inline void 
+basic_iarchive_impl::delete_created_pointers()
+{
+    object_id_vector_type::iterator i;
+    for(
+        i = object_id_vector.begin();
+        i != object_id_vector.end(); 
+        ++i
+    ){
+        if(i->loaded_as_pointer){
+            // borland complains without this minor hack
+            const int j = i->class_id;
+            const cobject_id & co = cobject_id_vector[j];
+            //const cobject_id & co = cobject_id_vector[i->class_id];
+            // with the appropriate input serializer, 
+            // delete the indicated object
+            co.bis_ptr->destroy(i->address);
+        }
+    }
+}
+
+inline class_id_type
+basic_iarchive_impl::register_type(
+    const basic_iserializer & bis
+){
+    class_id_type cid(cobject_info_set.size());
+    cobject_type co(cid, bis);
+    std::pair<cobject_info_set_type::const_iterator, bool>
+        result = cobject_info_set.insert(co);
+
+    if(result.second){
+        cobject_id_vector.push_back(cobject_id(bis));
+        BOOST_ASSERT(cobject_info_set.size() == cobject_id_vector.size());
+    }
+    cid = result.first->m_class_id;
+    // borland complains without this minor hack
+    const int tid = cid;
+    cobject_id & coid = cobject_id_vector[tid];
+    coid.bpis_ptr = bis.get_bpis_ptr();
+    return cid;
+}
+
+void
+basic_iarchive_impl::load_preamble(
+    basic_iarchive & ar,
+    cobject_id & co
+){
+    if(! co.initialized){
+        if(co.bis_ptr->class_info()){
+            class_id_optional_type cid(class_id_type(0));
+            load(ar, cid);    // to be thrown away
+            load(ar, co.tracking_level);
+            load(ar, co.file_version);
+        }
+        else{
+            // override tracking with indicator from class information
+            co.tracking_level = co.bis_ptr->tracking(m_flags);
+            co.file_version = version_type(
+                co.bis_ptr->version()
+            );
+        }
+        co.initialized = true;
+    }
+}
+
+bool
+basic_iarchive_impl::track(
+    basic_iarchive & ar,
+    void * & t
+){
+    object_id_type oid;
+    load(ar, oid);
+
+    // if its a reference to a old object
+    if(object_id_type(object_id_vector.size()) > oid){
+        // we're done
+        t = object_id_vector[oid].address;
+        return false;
+    }
+    return true;
+}
+
+inline void
+basic_iarchive_impl::load_object(
+    basic_iarchive & ar,
+    void * t,
+    const basic_iserializer & bis
+){
+    m_moveable_objects.is_pointer = false;
+    serialization::state_saver<bool> ss_is_pointer(m_moveable_objects.is_pointer);
+    // if its been serialized through a pointer and the preamble's been done
+    if(t == m_pending.object && & bis == m_pending.bis){
+        // read data
+        (bis.load_object_data)(ar, t, m_pending.version);
+        return;
+    }
+
+    const class_id_type cid = register_type(bis);
+    const int i = cid;
+    cobject_id & co = cobject_id_vector[i];
+
+    load_preamble(ar, co);
+
+    // save the current move stack position in case we want to truncate it
+    pdalboost::serialization::state_saver<object_id_type> ss_start(m_moveable_objects.start);
+
+    // note: extra line used to evade borland issue
+    const bool tracking = co.tracking_level;
+
+    object_id_type this_id;
+    m_moveable_objects.start =
+    this_id = object_id_type(object_id_vector.size());
+
+    // if we tracked this object when the archive was saved
+    if(tracking){ 
+        // if it was already read
+        if(!track(ar, t))
+            // we're done
+            return;
+        // add a new enty into the tracking list
+        object_id_vector.push_back(aobject(t, cid));
+        // and add an entry for this object
+        m_moveable_objects.end = object_id_type(object_id_vector.size());
+    }
+    // read data
+    (bis.load_object_data)(ar, t, co.file_version);
+    m_moveable_objects.recent = this_id;
+}
+
+inline const basic_pointer_iserializer *
+basic_iarchive_impl::load_pointer(
+    basic_iarchive &ar,
+    void * & t,
+    const basic_pointer_iserializer * bpis_ptr,
+    const basic_pointer_iserializer * (*finder)(
+        const pdalboost::serialization::extended_type_info & type_
+    )
+){
+    m_moveable_objects.is_pointer = true;
+    serialization::state_saver<bool> w(m_moveable_objects.is_pointer);
+
+    class_id_type cid;
+    load(ar, cid);
+
+    if(NULL_POINTER_TAG == cid){
+        t = NULL;
+        return bpis_ptr;
+    }
+
+    // if its a new class type - i.e. never been registered
+    if(class_id_type(cobject_info_set.size()) <= cid){
+        // if its either abstract
+        if(NULL == bpis_ptr
+        // or polymorphic
+        || bpis_ptr->get_basic_serializer().is_polymorphic()){
+            // is must have been exported
+            char key[BOOST_SERIALIZATION_MAX_KEY_SIZE];
+            class_name_type class_name(key);
+            load(ar, class_name);
+            // if it has a class name
+            const serialization::extended_type_info *eti = NULL;
+            if(0 != key[0])
+                eti = serialization::extended_type_info::find(key);
+            if(NULL == eti)
+                pdalboost::serialization::throw_exception(
+                    archive_exception(archive_exception::unregistered_class)
+                );
+            bpis_ptr = (*finder)(*eti);
+        }
+        BOOST_ASSERT(NULL != bpis_ptr);
+        // class_id_type new_cid = register_type(bpis_ptr->get_basic_serializer());
+        BOOST_VERIFY(register_type(bpis_ptr->get_basic_serializer()) == cid);
+        int i = cid;
+        cobject_id_vector[i].bpis_ptr = bpis_ptr;
+    }
+    int i = cid;
+    cobject_id & co = cobject_id_vector[i];
+    bpis_ptr = co.bpis_ptr;
+
+    load_preamble(ar, co);
+
+    // extra line to evade borland issue
+    const bool tracking = co.tracking_level;
+    // if we're tracking and the pointer has already been read
+    if(tracking && ! track(ar, t))
+        // we're done
+        return bpis_ptr;
+
+    // save state
+    serialization::state_saver<object_id_type> w_start(m_moveable_objects.start);
+
+    // allocate space on the heap for the object - to be constructed later
+    t = bpis_ptr->heap_allocation();
+    BOOST_ASSERT(NULL != t);
+
+    if(! tracking){
+        bpis_ptr->load_object_ptr(ar, t, co.file_version);
+    }
+    else{
+        serialization::state_saver<void *> x(m_pending.object);
+        serialization::state_saver<const basic_iserializer *> y(m_pending.bis);
+        serialization::state_saver<version_type> z(m_pending.version);
+
+        m_pending.bis = & bpis_ptr->get_basic_serializer();
+        m_pending.version = co.file_version;
+
+        // predict next object id to be created
+        const unsigned int ui = object_id_vector.size();
+
+        serialization::state_saver<object_id_type> w_end(m_moveable_objects.end);
+
+        
+        // add to list of serialized objects so that we can properly handle
+        // cyclic strucures
+        object_id_vector.push_back(aobject(t, cid));
+
+        // remember that that the address of these elements could change
+        // when we make another call so don't use the address
+        bpis_ptr->load_object_ptr(
+            ar,
+            t,
+            m_pending.version
+        );
+        object_id_vector[ui].loaded_as_pointer = true;
+    }
+
+    return bpis_ptr;
+}
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
+
+//////////////////////////////////////////////////////////////////////
+// implementation of basic_iarchive functions
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+BOOST_ARCHIVE_DECL void
+basic_iarchive::next_object_pointer(void *t){
+    pimpl->next_object_pointer(t);
+}
+
+BOOST_ARCHIVE_DECL
+basic_iarchive::basic_iarchive(unsigned int flags) : 
+    pimpl(new basic_iarchive_impl(flags))
+{}
+
+BOOST_ARCHIVE_DECL
+basic_iarchive::~basic_iarchive()
+{}
+
+BOOST_ARCHIVE_DECL void
+basic_iarchive::set_library_version(library_version_type archive_library_version){
+    pimpl->set_library_version(archive_library_version);
+}
+
+BOOST_ARCHIVE_DECL void
+basic_iarchive::reset_object_address(
+    const void * new_address, 
+    const void * old_address
+){
+    pimpl->reset_object_address(new_address, old_address);
+}
+
+BOOST_ARCHIVE_DECL void
+basic_iarchive::load_object(
+    void *t, 
+    const basic_iserializer & bis
+){
+    pimpl->load_object(*this, t, bis);
+}
+
+// load a pointer object
+BOOST_ARCHIVE_DECL const basic_pointer_iserializer *
+basic_iarchive::load_pointer(
+    void * &t, 
+    const basic_pointer_iserializer * bpis_ptr,
+    const basic_pointer_iserializer * (*finder)(
+        const pdalboost::serialization::extended_type_info & type_
+    )
+
+){
+    return pimpl->load_pointer(*this, t, bpis_ptr, finder);
+}
+
+BOOST_ARCHIVE_DECL void
+basic_iarchive::register_basic_serializer(const basic_iserializer & bis){
+    pimpl->register_type(bis);
+}
+
+BOOST_ARCHIVE_DECL void
+basic_iarchive::delete_created_pointers()
+{
+    pimpl->delete_created_pointers();
+}
+
+BOOST_ARCHIVE_DECL pdalboost::archive::library_version_type
+basic_iarchive::get_library_version() const{
+    return pimpl->m_archive_library_version;
+}
+
+BOOST_ARCHIVE_DECL unsigned int
+basic_iarchive::get_flags() const{
+    return pimpl->m_flags;
+}
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/basic_iserializer.cpp b/vendor/pdalboost/libs/serialization/src/basic_iserializer.cpp
new file mode 100644
index 0000000..5bd8600
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/basic_iserializer.cpp
@@ -0,0 +1,33 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_iserializer.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // NULL
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/basic_iserializer.hpp>
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+BOOST_ARCHIVE_DECL 
+basic_iserializer::basic_iserializer(
+    const pdalboost::serialization::extended_type_info & eti
+) :
+    basic_serializer(eti), 
+    m_bpis(NULL)
+{}
+
+BOOST_ARCHIVE_DECL 
+basic_iserializer::~basic_iserializer(){}
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/basic_oarchive.cpp b/vendor/pdalboost/libs/serialization/src/basic_oarchive.cpp
new file mode 100644
index 0000000..c813ff0
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/basic_oarchive.cpp
@@ -0,0 +1,468 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_oarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp> // msvc 6.0 needs this for warning suppression
+
+#include <boost/assert.hpp>
+#include <set>
+#include <cstddef> // NULL
+
+#include <boost/limits.hpp>
+#include <boost/serialization/state_saver.hpp>
+#include <boost/serialization/throw_exception.hpp>
+
+// including this here to work around an ICC in intel 7.0
+// normally this would be part of basic_oarchive.hpp below.
+#define BOOST_ARCHIVE_SOURCE
+// include this to prevent linker errors when the
+// same modules are marked export and import.
+#define BOOST_SERIALIZATION_SOURCE
+
+#include <boost/archive/detail/decl.hpp>
+#include <boost/archive/basic_archive.hpp>
+#include <boost/archive/detail/basic_oserializer.hpp>
+#include <boost/archive/detail/basic_pointer_oserializer.hpp>
+#include <boost/archive/detail/basic_oarchive.hpp>
+#include <boost/archive/archive_exception.hpp>
+#include <boost/serialization/extended_type_info.hpp>
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4251 4231 4660 4275)
+#endif
+
+using namespace pdalboost::serialization;
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+class basic_oarchive_impl {
+    friend class basic_oarchive;
+    unsigned int m_flags;
+
+    //////////////////////////////////////////////////////////////////////
+    // information about each serialized object saved
+    // keyed on address, class_id
+    struct aobject
+    {
+        const void * address;
+        class_id_type class_id;
+        object_id_type object_id;
+
+        bool operator<(const aobject &rhs) const
+        {
+            BOOST_ASSERT(NULL != address);
+            BOOST_ASSERT(NULL != rhs.address);
+            if( address < rhs.address )
+                return true;
+            if( address > rhs.address )
+                return false;
+            return class_id < rhs.class_id;
+        }
+        aobject & operator=(const aobject & rhs)
+        {
+            address = rhs.address;
+            class_id = rhs.class_id;
+            object_id = rhs.object_id;
+            return *this;
+        }
+        aobject(
+            const void *a,
+            class_id_type class_id_,
+            object_id_type object_id_
+        ) :
+            address(a),
+            class_id(class_id_),
+            object_id(object_id_)
+        {}
+        aobject() : address(NULL){}
+    };
+    // keyed on class_id, address
+    typedef std::set<aobject> object_set_type;
+    object_set_type object_set;
+
+    //////////////////////////////////////////////////////////////////////
+    // information about each serialized class saved
+    // keyed on type_info
+    struct cobject_type
+    {
+        const basic_oserializer * m_bos_ptr;
+        const class_id_type m_class_id;
+        bool m_initialized;
+        cobject_type(
+            std::size_t class_id,
+            const basic_oserializer & bos
+        ) :
+            m_bos_ptr(& bos),
+            m_class_id(class_id),
+            m_initialized(false)
+        {}
+        cobject_type(const basic_oserializer & bos)
+            : m_bos_ptr(& bos)
+        {}
+        cobject_type(
+            const cobject_type & rhs
+        ) :
+            m_bos_ptr(rhs.m_bos_ptr),
+            m_class_id(rhs.m_class_id),
+            m_initialized(rhs.m_initialized)
+        {}
+        // the following cannot be defined because of the const
+        // member.  This will generate a link error if an attempt
+        // is made to assign.  This should never be necessary
+        // use this only for lookup argument 
+        cobject_type & operator=(const cobject_type &rhs);
+        bool operator<(const cobject_type &rhs) const {
+            return *m_bos_ptr < *(rhs.m_bos_ptr);
+        }
+    };
+    // keyed on type_info
+    typedef std::set<cobject_type> cobject_info_set_type;
+    cobject_info_set_type cobject_info_set;
+
+    // list of objects initially stored as pointers - used to detect errors
+    // keyed on object id
+    std::set<object_id_type> stored_pointers;
+
+    // address of the most recent object serialized as a poiner
+    // whose data itself is now pending serialization
+    const void * pending_object;
+    const basic_oserializer * pending_bos;
+
+    basic_oarchive_impl(unsigned int flags) :
+        m_flags(flags),
+        pending_object(NULL),
+        pending_bos(NULL)
+    {}
+
+    const cobject_type &
+    find(const basic_oserializer & bos);
+    const basic_oserializer *  
+    find(const serialization::extended_type_info &ti) const;
+
+//public:
+    const cobject_type &
+    register_type(const basic_oserializer & bos);
+    void save_object(
+        basic_oarchive & ar,
+        const void *t,
+        const basic_oserializer & bos
+    );
+    void save_pointer(
+        basic_oarchive & ar,
+        const void * t, 
+        const basic_pointer_oserializer * bpos
+    );
+};
+
+//////////////////////////////////////////////////////////////////////
+// basic_oarchive implementation functions
+
+// given a type_info - find its bos
+// return NULL if not found
+inline const basic_oserializer *
+basic_oarchive_impl::find(const serialization::extended_type_info & ti) const {
+    #ifdef BOOST_MSVC
+    #  pragma warning(push)
+    #  pragma warning(disable : 4511 4512)
+    #endif
+    class bosarg : 
+        public basic_oserializer
+    {
+        bool class_info() const {
+            BOOST_ASSERT(false); 
+            return false;
+        }
+        // returns true if objects should be tracked
+        bool tracking(const unsigned int) const {
+            BOOST_ASSERT(false);
+            return false;
+        }
+        // returns class version
+        version_type version() const {
+            BOOST_ASSERT(false);
+            return version_type(0);
+        }
+        // returns true if this class is polymorphic
+        bool is_polymorphic() const{
+            BOOST_ASSERT(false);
+            return false;
+        }
+        void save_object_data(      
+            basic_oarchive & /*ar*/, const void * /*x*/
+        ) const {
+            BOOST_ASSERT(false);
+        }
+    public:
+        bosarg(const serialization::extended_type_info & eti) :
+          pdalboost::archive::detail::basic_oserializer(eti)
+        {}
+    };
+    #ifdef BOOST_MSVC
+    #pragma warning(pop)
+    #endif
+    bosarg bos(ti);
+    cobject_info_set_type::const_iterator cit 
+        = cobject_info_set.find(cobject_type(bos));
+    // it should already have been "registered" - see below
+    if(cit == cobject_info_set.end()){
+        // if an entry is not found in the table it is because a pointer
+        // of a derived class has been serialized through its base class
+        // but the derived class hasn't been "registered" 
+        return NULL;
+    }
+    // return pointer to the real class
+    return cit->m_bos_ptr;
+}
+
+inline const basic_oarchive_impl::cobject_type &
+basic_oarchive_impl::find(const basic_oserializer & bos)
+{
+    std::pair<cobject_info_set_type::iterator, bool> cresult = 
+        cobject_info_set.insert(cobject_type(cobject_info_set.size(), bos));
+    return *(cresult.first);
+}
+
+inline const basic_oarchive_impl::cobject_type &
+basic_oarchive_impl::register_type(
+    const basic_oserializer & bos
+){
+    cobject_type co(cobject_info_set.size(), bos);
+    std::pair<cobject_info_set_type::const_iterator, bool>
+        result = cobject_info_set.insert(co);
+    return *(result.first);
+}
+
+inline void
+basic_oarchive_impl::save_object(
+    basic_oarchive & ar,
+    const void *t,
+    const basic_oserializer & bos
+){
+    // if its been serialized through a pointer and the preamble's been done
+    if(t == pending_object && pending_bos == & bos){
+        // just save the object data
+        ar.end_preamble();
+        (bos.save_object_data)(ar, t);
+        return;
+    }
+
+    // get class information for this object
+    const cobject_type & co = register_type(bos);
+    if(bos.class_info()){
+        if( ! co.m_initialized){
+            ar.vsave(class_id_optional_type(co.m_class_id));
+            ar.vsave(tracking_type(bos.tracking(m_flags)));
+            ar.vsave(version_type(bos.version()));
+            (const_cast<cobject_type &>(co)).m_initialized = true;
+        }
+    }
+
+    // we're not tracking this type of object
+    if(! bos.tracking(m_flags)){
+        // just windup the preamble - no object id to write
+        ar.end_preamble();
+        // and save the data
+        (bos.save_object_data)(ar, t);
+        return;
+    }
+
+    // look for an existing object id
+    object_id_type oid(object_set.size());
+    // lookup to see if this object has already been written to the archive
+    basic_oarchive_impl::aobject ao(t, co.m_class_id, oid);
+    std::pair<basic_oarchive_impl::object_set_type::const_iterator, bool>
+        aresult = object_set.insert(ao);
+    oid = aresult.first->object_id;
+
+    // if its a new object
+    if(aresult.second){
+        // write out the object id
+        ar.vsave(oid);
+        ar.end_preamble();
+        // and data
+        (bos.save_object_data)(ar, t);
+        return;
+    }
+
+    // check that it wasn't originally stored through a pointer
+    if(stored_pointers.end() != stored_pointers.find(oid)){
+        // this has to be a user error.  loading such an archive
+        // would create duplicate objects
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::pointer_conflict)
+        );
+    }
+    // just save the object id
+    ar.vsave(object_reference_type(oid));
+    ar.end_preamble();
+    return;
+}
+
+// save a pointer to an object instance
+inline void
+basic_oarchive_impl::save_pointer(
+    basic_oarchive & ar,
+    const void * t, 
+    const basic_pointer_oserializer * bpos_ptr
+){
+    const basic_oserializer & bos = bpos_ptr->get_basic_serializer();
+    std::size_t original_count = cobject_info_set.size();
+    const cobject_type & co = register_type(bos);
+    if(! co.m_initialized){
+        ar.vsave(co.m_class_id);
+        // if its a previously unregistered class 
+        if((cobject_info_set.size() > original_count)){
+            if(bos.is_polymorphic()){
+                const serialization::extended_type_info *eti = & bos.get_eti();
+                const char * key = NULL;
+                if(NULL != eti)
+                    key = eti->get_key();
+                if(NULL != key){
+                    // the following is required by IBM C++ compiler which
+                    // makes a copy when passing a non-const to a const.  This
+                    // is permitted by the standard but rarely seen in practice
+                    const class_name_type cn(key);
+                    if(cn.size() > (BOOST_SERIALIZATION_MAX_KEY_SIZE - 1))
+                        pdalboost::serialization::throw_exception(
+                            pdalboost::archive::archive_exception(
+                                pdalboost::archive::archive_exception::
+                                    invalid_class_name)
+                            );
+                    // write out the external class identifier
+                    ar.vsave(cn);
+                }
+                else
+                    // without an external class name
+                    // we won't be able to de-serialize it so bail now
+                    pdalboost::serialization::throw_exception(
+                        archive_exception(archive_exception::unregistered_class)
+                    );
+            }
+        }
+        if(bos.class_info()){
+            ar.vsave(tracking_type(bos.tracking(m_flags)));
+            ar.vsave(version_type(bos.version()));
+        }
+        (const_cast<cobject_type &>(co)).m_initialized = true;
+    }
+    else{
+        ar.vsave(class_id_reference_type(co.m_class_id));
+    }
+
+    // if we're not tracking
+    if(! bos.tracking(m_flags)){
+        // just save the data itself
+        ar.end_preamble();
+        serialization::state_saver<const void *> x(pending_object);
+        serialization::state_saver<const basic_oserializer *> y(pending_bos);
+        pending_object = t;
+        pending_bos = & bpos_ptr->get_basic_serializer();
+        bpos_ptr->save_object_ptr(ar, t);
+        return;
+    }
+
+    object_id_type oid(object_set.size());
+    // lookup to see if this object has already been written to the archive
+    basic_oarchive_impl::aobject ao(t, co.m_class_id, oid);
+    std::pair<basic_oarchive_impl::object_set_type::const_iterator, bool>
+        aresult = object_set.insert(ao);
+    oid = aresult.first->object_id;
+    // if the saved object already exists
+    if(! aresult.second){
+        // append the object id to he preamble
+        ar.vsave(object_reference_type(oid));
+        // and windup.
+        ar.end_preamble();
+        return;
+    }
+
+    // append id of this object to preamble
+    ar.vsave(oid);
+    ar.end_preamble();
+
+    // and save the object itself
+    serialization::state_saver<const void *> x(pending_object);
+    serialization::state_saver<const basic_oserializer *> y(pending_bos);
+    pending_object = t;
+    pending_bos = & bpos_ptr->get_basic_serializer();
+    bpos_ptr->save_object_ptr(ar, t);
+    // add to the set of object initially stored through pointers
+    stored_pointers.insert(oid);
+}
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
+
+//////////////////////////////////////////////////////////////////////
+// implementation of basic_oarchive functions
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+BOOST_ARCHIVE_DECL 
+basic_oarchive::basic_oarchive(unsigned int flags)
+    : pimpl(new basic_oarchive_impl(flags))
+{}
+
+BOOST_ARCHIVE_DECL 
+basic_oarchive::~basic_oarchive()
+{}
+
+BOOST_ARCHIVE_DECL void 
+basic_oarchive::save_object(
+    const void *x, 
+    const basic_oserializer & bos
+){
+    pimpl->save_object(*this, x, bos);
+}
+
+BOOST_ARCHIVE_DECL void 
+basic_oarchive::save_pointer(
+    const void * t, 
+    const basic_pointer_oserializer * bpos_ptr
+){
+    pimpl->save_pointer(*this, t, bpos_ptr);
+}
+
+BOOST_ARCHIVE_DECL void 
+basic_oarchive::register_basic_serializer(const basic_oserializer & bos){
+    pimpl->register_type(bos);
+}
+
+BOOST_ARCHIVE_DECL library_version_type
+basic_oarchive::get_library_version() const{
+    return BOOST_ARCHIVE_VERSION();
+}
+
+BOOST_ARCHIVE_DECL unsigned int
+basic_oarchive::get_flags() const{
+    return pimpl->m_flags;
+}
+
+BOOST_ARCHIVE_DECL void 
+basic_oarchive::end_preamble(){
+}
+
+BOOST_ARCHIVE_DECL helper_collection &
+basic_oarchive::get_helper_collection(){
+	return *this;
+}
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
diff --git a/vendor/pdalboost/libs/serialization/src/basic_oserializer.cpp b/vendor/pdalboost/libs/serialization/src/basic_oserializer.cpp
new file mode 100644
index 0000000..53e379b
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/basic_oserializer.cpp
@@ -0,0 +1,33 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_oserializer.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstddef> // NULL
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/basic_oserializer.hpp>
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+BOOST_ARCHIVE_DECL 
+basic_oserializer::basic_oserializer(
+        const pdalboost::serialization::extended_type_info & eti
+) :
+    basic_serializer(eti), 
+    m_bpos(NULL)
+{}
+
+BOOST_ARCHIVE_DECL 
+basic_oserializer::~basic_oserializer(){}
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/basic_pointer_iserializer.cpp b/vendor/pdalboost/libs/serialization/src/basic_pointer_iserializer.cpp
new file mode 100644
index 0000000..aa3d93e
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/basic_pointer_iserializer.cpp
@@ -0,0 +1,30 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_pointer_iserializer.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/basic_pointer_iserializer.hpp>
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+BOOST_ARCHIVE_DECL 
+basic_pointer_iserializer::basic_pointer_iserializer(
+    const pdalboost::serialization::extended_type_info & eti
+) :
+    basic_serializer(eti)
+{}
+
+BOOST_ARCHIVE_DECL 
+basic_pointer_iserializer::~basic_pointer_iserializer() {}
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/basic_pointer_oserializer.cpp b/vendor/pdalboost/libs/serialization/src/basic_pointer_oserializer.cpp
new file mode 100644
index 0000000..eb97880
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/basic_pointer_oserializer.cpp
@@ -0,0 +1,30 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_pointer_oserializer.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/basic_pointer_oserializer.hpp>
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+BOOST_ARCHIVE_DECL 
+basic_pointer_oserializer::basic_pointer_oserializer(
+    const pdalboost::serialization::extended_type_info & eti
+) :
+    basic_serializer(eti)
+{}
+
+BOOST_ARCHIVE_DECL 
+basic_pointer_oserializer::~basic_pointer_oserializer() {}
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/basic_serializer_map.cpp b/vendor/pdalboost/libs/serialization/src/basic_serializer_map.cpp
new file mode 100644
index 0000000..9d41fad
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/basic_serializer_map.cpp
@@ -0,0 +1,112 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// serializer_map.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <set>
+#include <utility>
+
+#define BOOST_ARCHIVE_SOURCE
+// include this to prevent linker errors when the
+// same modules are marked export and import.
+#define BOOST_SERIALIZATION_SOURCE
+
+#include <boost/archive/archive_exception.hpp>
+#include <boost/serialization/throw_exception.hpp>
+
+#include <boost/archive/detail/basic_serializer.hpp>
+#include <boost/archive/detail/basic_serializer_map.hpp>
+
+namespace pdalboost {
+    namespace serialization {
+        class extended_type_info;
+    }
+namespace archive {
+namespace detail {
+
+bool  
+basic_serializer_map::type_info_pointer_compare::operator()(
+    const basic_serializer * lhs, const basic_serializer * rhs
+) const {
+    return *lhs < *rhs;
+}
+
+BOOST_ARCHIVE_DECL bool
+basic_serializer_map::insert(const basic_serializer * bs){
+    // attempt to insert serializer into it's map
+    // the following is commented out - rather than being just
+    // deleted as a reminder not to try this.
+
+    // const std::pair<map_type::iterator, bool> result =
+        m_map.insert(bs);
+
+    // At first it seemed like a good idea.  It enforced the
+    // idea that a type be exported from at most one code module
+    // (DLL or mainline).  This would enforce a "one definition rule" 
+    // across code modules. This seems a good idea to me.  
+    // But it seems that it's just too hard for many users to implement.
+
+    // Ideally, I would like to make this exception a warning -
+    // but there isn't anyway to do that.
+
+    // if this fails, it's because it's been instantiated
+    // in multiple modules - DLLS - a recipe for problems.
+    // So trap this here
+    // if(!result.second){
+    //     pdalboost::serialization::throw_exception(
+    //         archive_exception(
+    //             archive_exception::multiple_code_instantiation,
+    //             bs->get_debug_info()
+    //         )
+    //     );
+    // }
+    return true;
+}
+
+BOOST_ARCHIVE_DECL void 
+basic_serializer_map::erase(const basic_serializer * bs){
+    map_type::iterator it = m_map.begin();
+    map_type::iterator it_end = m_map.end();
+
+    while(it != it_end){
+        // note item 9 from Effective STL !!! it++
+        if(*it == bs)
+            m_map.erase(it++);
+        else
+            it++;
+    }
+    // note: we can't do this since some of the eti records
+    // we're pointing to might be expired and the comparison
+    // won't work.  Leave this as a reminder not to "optimize" this.
+    //it = m_map.find(bs);
+    //assert(it != m_map.end());
+    //if(*it == bs)
+    //    m_map.erase(it);
+}
+BOOST_ARCHIVE_DECL const basic_serializer *
+basic_serializer_map::find(
+    const pdalboost::serialization::extended_type_info & eti
+) const {
+    const basic_serializer_arg bs(eti);
+    map_type::const_iterator it;
+    it = m_map.find(& bs);
+    if(it == m_map.end()){
+        BOOST_ASSERT(false);
+        return 0;
+    }
+    return *it;
+}
+
+} // namespace detail
+} // namespace archive
+} // namespace pdalboost
+
diff --git a/vendor/pdalboost/libs/serialization/src/basic_text_iprimitive.cpp b/vendor/pdalboost/libs/serialization/src/basic_text_iprimitive.cpp
new file mode 100644
index 0000000..efc7f8d
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/basic_text_iprimitive.cpp
@@ -0,0 +1,28 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_iprimitive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <istream>
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/impl/basic_text_iprimitive.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+// explicitly instantiate for this type of text stream
+template class basic_text_iprimitive<std::istream> ;
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/basic_text_oprimitive.cpp b/vendor/pdalboost/libs/serialization/src/basic_text_oprimitive.cpp
new file mode 100644
index 0000000..d3d9000
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/basic_text_oprimitive.cpp
@@ -0,0 +1,28 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_oprimitive.cpp:
+
+// (C) Copyright 2004 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <ostream>
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/auto_link_archive.hpp>
+#include <boost/archive/impl/basic_text_oprimitive.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+// explicitly instantiate for this type of text stream
+template class basic_text_oprimitive<std::ostream> ;
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/basic_text_wiprimitive.cpp b/vendor/pdalboost/libs/serialization/src/basic_text_wiprimitive.cpp
new file mode 100644
index 0000000..6f531bc
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/basic_text_wiprimitive.cpp
@@ -0,0 +1,35 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_wiprimitive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <istream>
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/detail/auto_link_warchive.hpp>
+#include <boost/archive/impl/basic_text_iprimitive.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+template class basic_text_iprimitive<std::wistream> ;
+
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
diff --git a/vendor/pdalboost/libs/serialization/src/basic_text_woprimitive.cpp b/vendor/pdalboost/libs/serialization/src/basic_text_woprimitive.cpp
new file mode 100644
index 0000000..fb64b5c
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/basic_text_woprimitive.cpp
@@ -0,0 +1,35 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_text_woprimitive.cpp:
+
+// (C) Copyright 2004 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <ostream>
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/detail/auto_link_warchive.hpp>
+#include <boost/archive/impl/basic_text_oprimitive.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+template class basic_text_oprimitive<std::wostream> ;
+
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
diff --git a/vendor/pdalboost/libs/serialization/src/basic_xml_archive.cpp b/vendor/pdalboost/libs/serialization/src/basic_xml_archive.cpp
new file mode 100644
index 0000000..702d086
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/basic_xml_archive.cpp
@@ -0,0 +1,51 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_archive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/basic_xml_archive.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+BOOST_SYMBOL_VISIBLE const char *
+BOOST_ARCHIVE_XML_OBJECT_ID(){
+    return "object_id";
+}
+BOOST_SYMBOL_VISIBLE const char *
+BOOST_ARCHIVE_XML_OBJECT_REFERENCE(){
+    return "object_id_reference";
+}
+BOOST_SYMBOL_VISIBLE const char *
+BOOST_ARCHIVE_XML_CLASS_ID(){
+    return "class_id";
+}
+BOOST_SYMBOL_VISIBLE const char *
+BOOST_ARCHIVE_XML_CLASS_ID_REFERENCE(){
+    return "class_id_reference";
+}
+BOOST_SYMBOL_VISIBLE const char *
+BOOST_ARCHIVE_XML_CLASS_NAME(){
+    return "class_name";
+}
+BOOST_SYMBOL_VISIBLE const char *
+BOOST_ARCHIVE_XML_TRACKING(){
+    return "tracking_level";
+}
+BOOST_SYMBOL_VISIBLE const char *
+BOOST_ARCHIVE_XML_VERSION(){
+    return "version";
+}
+BOOST_SYMBOL_VISIBLE const char *
+BOOST_ARCHIVE_XML_SIGNATURE(){
+    return "signature";
+}
+
+}// namespace archive
+}// namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/basic_xml_grammar.ipp b/vendor/pdalboost/libs/serialization/src/basic_xml_grammar.ipp
new file mode 100644
index 0000000..570155e
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/basic_xml_grammar.ipp
@@ -0,0 +1,467 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// basic_xml_grammar.ipp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <istream>
+#include <algorithm>
+#include <boost/config.hpp> // typename
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4244 4511 4512)
+#endif
+
+// spirit stuff
+#include <boost/spirit/include/classic_operators.hpp>
+#include <boost/spirit/include/classic_actions.hpp>
+#include <boost/spirit/include/classic_numerics.hpp>
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+// for head_iterator test
+//#include <boost/bind.hpp> 
+#include <boost/function.hpp>
+
+#include <boost/io/ios_state.hpp>
+#include <boost/serialization/throw_exception.hpp>
+#include <boost/archive/impl/basic_xml_grammar.hpp>
+#include <boost/archive/xml_archive_exception.hpp>
+#include <boost/archive/basic_xml_archive.hpp>
+#include <boost/archive/iterators/xml_unescape.hpp>
+
+using namespace pdalboost::spirit::classic;
+
+namespace pdalboost {
+namespace archive {
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// template code for basic_xml_grammar of both wchar_t and char types
+
+namespace xml { // anonymous
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+template<class T>
+struct assign_impl {
+    T & t;
+    void operator()(const T t_) const {
+        t = t_;
+    }
+    assign_impl(T &  t_)
+        : t(t_)
+    {}
+};
+
+template<>
+struct assign_impl<std::string> {
+    std::string & t;
+    void operator()(
+        std::string::const_iterator b, 
+        std::string::const_iterator e
+    ) const {
+        t.resize(0);
+        while(b != e){
+            t += * b;
+            ++b;
+        }
+    }
+    assign_impl<std::string> & operator=(
+        assign_impl<std::string> & rhs
+    );
+    assign_impl(std::string & t_)
+        : t(t_)
+    {}
+};
+
+#ifndef BOOST_NO_STD_WSTRING
+template<>
+struct assign_impl<std::wstring> {
+    std::wstring & t;
+    void operator()(
+        std::wstring::const_iterator b, 
+        std::wstring::const_iterator e
+    ) const {
+        t.resize(0);
+        while(b != e){
+            t += * b;
+            ++b;
+        }
+    }
+    assign_impl(std::wstring & t_)
+        : t(t_)
+    {}
+};
+#endif
+
+template<class T>
+assign_impl<T> assign_object(T &t){
+    return assign_impl<T>(t);
+} 
+
+struct assign_level {
+    tracking_type & tracking_level;
+    void operator()(const unsigned int tracking_level_) const {
+        tracking_level = (0 == tracking_level_) ? false : true;
+    }
+    assign_level(tracking_type &  tracking_level_)
+        : tracking_level(tracking_level_)
+    {}
+};
+
+template<class String, class Iterator>
+struct append_string {
+    String & contents;
+    void operator()(Iterator start, Iterator end) const {
+    #if 0
+        typedef pdalboost::archive::iterators::xml_unescape<Iterator> translator;
+        contents.append(
+            translator(BOOST_MAKE_PFTO_WRAPPER(start)), 
+            translator(BOOST_MAKE_PFTO_WRAPPER(end))
+        );
+    #endif
+        contents.append(start, end);
+    }
+    append_string(String & contents_)
+        : contents(contents_)
+    {}
+};
+
+template<class String>
+struct append_char {
+    String & contents;
+    void operator()(const unsigned int char_value) const {
+        const typename String::value_type z = char_value;
+        contents += z;
+    }
+    append_char(String & contents_)
+        : contents(contents_)
+    {}
+};
+
+template<class String, unsigned int c>
+struct append_lit {
+    String & contents;
+    template<class X, class Y>
+    void operator()(const X & /*x*/, const Y & /*y*/) const {
+        const typename String::value_type z = c;
+        contents += z;
+    }
+    append_lit(String & contents_)
+        : contents(contents_)
+    {}
+};
+
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+} // namespace anonymous
+
+template<class CharType>
+bool basic_xml_grammar<CharType>::my_parse(
+    typename basic_xml_grammar<CharType>::IStream & is,
+    const rule_t & rule_,
+    CharType delimiter
+) const {
+    if(is.fail()){
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::input_stream_error)
+        );
+    }
+    
+    pdalboost::io::ios_flags_saver ifs(is);
+    is >> std::noskipws;
+
+    std::basic_string<CharType> arg;
+    
+    CharType val;
+    do{
+        typename basic_xml_grammar<CharType>::IStream::int_type
+            result = is.get();
+        if(is.fail())
+            return false;
+        val = static_cast<CharType>(result);
+        arg += val;
+    }
+    while(val != delimiter);
+    
+    // read just one more character.  This will be the newline after the tag
+    // this is so that the next operation will return fail if the archive
+    // is terminated.  This will permit the archive to be used for debug
+    // and transaction data logging in the standard way.
+    
+    parse_info<typename std::basic_string<CharType>::iterator> 
+        result = pdalboost::spirit::classic::parse(arg.begin(), arg.end(), rule_);
+    return result.hit;
+}
+
+template<class CharType>
+bool basic_xml_grammar<CharType>::parse_start_tag(
+    typename basic_xml_grammar<CharType>::IStream & is
+){
+    rv.class_name.resize(0);
+    return my_parse(is, STag);
+}
+
+template<class CharType>
+bool basic_xml_grammar<CharType>::parse_end_tag(IStream & is) const {
+    return my_parse(is, ETag);
+}
+
+template<class CharType>
+bool basic_xml_grammar<CharType>::parse_string(IStream & is, StringType & s){
+    rv.contents.resize(0);
+    bool result = my_parse(is, content, '<');
+    // note: unget caused a problem with dinkumware.  replace with
+ // is.unget();
+    // putback another dilimiter instead
+    is.putback('<');
+    if(result)
+        s = rv.contents;
+    return result;
+}
+
+template<class CharType>
+basic_xml_grammar<CharType>::basic_xml_grammar(){
+    init_chset();
+
+    S =
+        +(Sch)
+    ;
+
+    // refactoring to workaround template depth on darwin
+    NameHead = (Letter | '_' | ':');
+    NameTail = *NameChar ;
+    Name =
+      NameHead >> NameTail
+    ;
+
+    Eq =
+        !S >> '=' >> !S
+    ;
+
+    AttributeList = 
+        *(S >> Attribute)
+    ;
+    
+    STag =
+        !S
+        >> '<'
+        >> Name  [xml::assign_object(rv.object_name)]
+        >> AttributeList
+        >> !S
+        >> '>'
+    ;
+
+    ETag =
+        !S
+        >> "</"
+        >> Name [xml::assign_object(rv.object_name)]
+        >> !S 
+        >> '>'
+    ;
+
+    // refactoring to workaround template depth on darwin
+    CharDataChars = +(anychar_p - chset_p(L"&<"));
+    CharData =  
+        CharDataChars [
+            xml::append_string<
+                StringType, 
+                typename std::basic_string<CharType>::const_iterator
+            >(rv.contents)
+        ]
+    ;
+
+    // slight factoring works around ICE in msvc 6.0
+    CharRef1 = 
+        str_p(L"&#") >> uint_p [xml::append_char<StringType>(rv.contents)] >> L';'
+    ;
+    CharRef2 =
+        str_p(L"&#x") >> hex_p [xml::append_char<StringType>(rv.contents)] >> L';'
+    ;
+    CharRef = CharRef1 | CharRef2 ;
+
+    AmpRef = str_p(L"&")[xml::append_lit<StringType, L'&'>(rv.contents)];
+    LTRef = str_p(L"<")[xml::append_lit<StringType, L'<'>(rv.contents)];
+    GTRef = str_p(L">")[xml::append_lit<StringType, L'>'>(rv.contents)];
+    AposRef = str_p(L"'")[xml::append_lit<StringType, L'\''>(rv.contents)];
+    QuoteRef = str_p(L""")[xml::append_lit<StringType, L'"'>(rv.contents)];
+
+    Reference =
+        AmpRef
+        | LTRef
+        | GTRef
+        | AposRef
+        | QuoteRef
+        | CharRef
+    ;
+
+    content = 
+        L"<" // should be end_p
+        | +(Reference | CharData) >> L"<"
+    ;
+
+    ClassIDAttribute = 
+        str_p(BOOST_ARCHIVE_XML_CLASS_ID()) >> NameTail
+        >> Eq 
+        >> L'"'
+        >> int_p [xml::assign_object(rv.class_id)]
+        >> L'"'
+      ;
+
+    ObjectIDAttribute = (
+        str_p(BOOST_ARCHIVE_XML_OBJECT_ID()) 
+        | 
+        str_p(BOOST_ARCHIVE_XML_OBJECT_REFERENCE()) 
+        )
+        >> NameTail
+        >> Eq 
+        >> L'"'
+        >> L'_'
+        >> uint_p [xml::assign_object(rv.object_id)]
+        >> L'"'
+    ;
+        
+    AmpName = str_p(L"&")[xml::append_lit<StringType, L'&'>(rv.class_name)];
+    LTName = str_p(L"<")[xml::append_lit<StringType, L'<'>(rv.class_name)];
+    GTName = str_p(L">")[xml::append_lit<StringType, L'>'>(rv.class_name)];
+    ClassNameChar = 
+        AmpName
+        | LTName
+        | GTName
+        | (anychar_p - chset_p(L"\"")) [xml::append_char<StringType>(rv.class_name)]
+    ;
+    
+    ClassName =
+        * ClassNameChar
+    ;
+    
+    ClassNameAttribute = 
+        str_p(BOOST_ARCHIVE_XML_CLASS_NAME()) 
+        >> Eq 
+        >> L'"'
+        >> ClassName
+        >> L'"'
+    ;
+
+    TrackingAttribute = 
+        str_p(BOOST_ARCHIVE_XML_TRACKING())
+        >> Eq
+        >> L'"'
+        >> uint_p [xml::assign_level(rv.tracking_level)]
+        >> L'"'
+    ;
+
+    VersionAttribute = 
+        str_p(BOOST_ARCHIVE_XML_VERSION())
+        >> Eq
+        >> L'"'
+        >> uint_p [xml::assign_object(rv.version)]
+        >> L'"'
+    ;
+
+    UnusedAttribute = 
+        Name
+        >> Eq
+        >> L'"'
+        >> !CharData
+        >> L'"'
+    ;
+
+    Attribute =
+        ClassIDAttribute
+        | ObjectIDAttribute
+        | ClassNameAttribute
+        | TrackingAttribute
+        | VersionAttribute
+        | UnusedAttribute
+    ;
+
+    XMLDeclChars = *(anychar_p - chset_p(L"?>"));
+    XMLDecl =
+        !S
+        >> str_p(L"<?xml")
+        >> S
+        >> str_p(L"version")
+        >> Eq
+        >> str_p(L"\"1.0\"")
+        >> XMLDeclChars
+        >> !S
+        >> str_p(L"?>")
+    ;
+
+    DocTypeDeclChars = *(anychar_p - chset_p(L">"));
+    DocTypeDecl =
+        !S
+        >> str_p(L"<!DOCTYPE")
+        >> DocTypeDeclChars
+        >> L'>'
+    ;
+
+    SignatureAttribute = 
+        str_p(L"signature") 
+        >> Eq 
+        >> L'"'
+        >> Name [xml::assign_object(rv.class_name)]
+        >> L'"'
+    ;
+    
+    SerializationWrapper =
+        !S
+        >> str_p(L"<boost_serialization")
+        >> S
+        >> ( (SignatureAttribute >> S >> VersionAttribute)
+           | (VersionAttribute >> S >> SignatureAttribute)
+           )
+        >> !S
+        >> L'>'
+    ;
+}
+
+template<class CharType>
+void basic_xml_grammar<CharType>::init(IStream & is){
+    init_chset();
+    if(! my_parse(is, XMLDecl))
+        pdalboost::serialization::throw_exception(
+            xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+        );
+    if(! my_parse(is, DocTypeDecl))
+        pdalboost::serialization::throw_exception(
+            xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+        );
+    if(! my_parse(is, SerializationWrapper))
+        pdalboost::serialization::throw_exception(
+            xml_archive_exception(xml_archive_exception::xml_archive_parsing_error)
+        );
+    if(! std::equal(rv.class_name.begin(), rv.class_name.end(), BOOST_ARCHIVE_SIGNATURE()))
+        pdalboost::serialization::throw_exception(
+            archive_exception(archive_exception::invalid_signature)
+        );
+}
+
+template<class CharType>
+void basic_xml_grammar<CharType>::windup(IStream & is){
+    if(is.fail() || is.eof())
+        return;
+    // uh-oh - don't throw exception from code called by a destructor !
+    // so just ignore any failure.
+    my_parse(is, ETag);
+}
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/binary_iarchive.cpp b/vendor/pdalboost/libs/serialization/src/binary_iarchive.cpp
new file mode 100644
index 0000000..462cf48
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/binary_iarchive.cpp
@@ -0,0 +1,39 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_iarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <istream>
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/binary_iarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_binary_iprimitive.ipp>
+#include <boost/archive/impl/basic_binary_iarchive.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+// explicitly instantiate for this type of stream
+template class detail::archive_serializer_map<binary_iarchive>;
+template class basic_binary_iprimitive<
+    binary_iarchive,
+    std::istream::char_type, 
+    std::istream::traits_type
+>;
+template class basic_binary_iarchive<binary_iarchive> ;
+template class binary_iarchive_impl<
+    binary_iarchive, 
+    std::istream::char_type, 
+    std::istream::traits_type
+>;
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/binary_oarchive.cpp b/vendor/pdalboost/libs/serialization/src/binary_oarchive.cpp
new file mode 100644
index 0000000..59e0f4b
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/binary_oarchive.cpp
@@ -0,0 +1,39 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_oarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <ostream>
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/binary_oarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of binary stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_binary_oprimitive.ipp>
+#include <boost/archive/impl/basic_binary_oarchive.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+template class detail::archive_serializer_map<binary_oarchive>;
+template class basic_binary_oprimitive<
+    binary_oarchive, 
+    std::ostream::char_type, 
+    std::ostream::traits_type
+>;
+template class basic_binary_oarchive<binary_oarchive> ;
+template class binary_oarchive_impl<
+    binary_oarchive, 
+    std::ostream::char_type, 
+    std::ostream::traits_type
+>;
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/binary_wiarchive.cpp b/vendor/pdalboost/libs/serialization/src/binary_wiarchive.cpp
new file mode 100644
index 0000000..2d938f4
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/binary_wiarchive.cpp
@@ -0,0 +1,47 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_wiarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/binary_wiarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_binary_iprimitive.ipp>
+#include <boost/archive/impl/basic_binary_iarchive.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+// explicitly instantiate for this type of text stream
+template class detail::archive_serializer_map<binary_wiarchive>;
+template class basic_binary_iprimitive<
+    binary_wiarchive,
+    wchar_t, 
+    std::char_traits<wchar_t> 
+>;
+template class basic_binary_iarchive<binary_wiarchive> ;
+template class binary_iarchive_impl<
+    binary_wiarchive, 
+    wchar_t, 
+    std::char_traits<wchar_t> 
+>;
+
+} // namespace archive
+} // namespace pdalboost
+
+#endif  // BOOST_NO_STD_WSTREAMBUF
+
diff --git a/vendor/pdalboost/libs/serialization/src/binary_woarchive.cpp b/vendor/pdalboost/libs/serialization/src/binary_woarchive.cpp
new file mode 100644
index 0000000..d3ad445
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/binary_woarchive.cpp
@@ -0,0 +1,44 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_woarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/binary_woarchive.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_binary_oprimitive.ipp>
+#include <boost/archive/impl/basic_binary_oarchive.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+template class detail::archive_serializer_map<binary_woarchive>;
+template class basic_binary_oprimitive<
+    binary_woarchive, 
+    wchar_t, 
+    std::char_traits<wchar_t> 
+>;
+template class basic_binary_oarchive<binary_woarchive> ;
+template class binary_oarchive_impl<
+    binary_woarchive, 
+    wchar_t, 
+    std::char_traits<wchar_t> 
+>;
+
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
diff --git a/vendor/pdalboost/libs/serialization/src/codecvt_null.cpp b/vendor/pdalboost/libs/serialization/src/codecvt_null.cpp
new file mode 100644
index 0000000..66f82e9
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/codecvt_null.cpp
@@ -0,0 +1,83 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// codecvt_null.cpp
+
+// Copyright (c) 2004 Robert Ramey, Indiana University (garcia at osl.iu.edu)
+// Andrew Lumsdaine, Indiana University (lums at osl.iu.edu). 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/codecvt_null.hpp>
+
+// codecvt implementation for passing wchar_t objects to char output
+// without any translation whatever.  Used to implement binary output
+// of wchar_t objects.
+
+namespace pdalboost {
+namespace archive {
+
+BOOST_WARCHIVE_DECL std::codecvt_base::result
+codecvt_null<wchar_t>::do_out(
+    std::mbstate_t & /*state*/,
+    const wchar_t * first1, 
+    const wchar_t * last1,
+    const wchar_t * & next1,
+    char * first2, 
+    char * last2, 
+    char * & next2
+) const {
+    while(first1 != last1){
+        // Per std::22.2.1.5.2/2, we can store no more that
+        // last2-first2 characters. If we need to more encode
+        // next internal char type, return 'partial'.
+        if(static_cast<int>(sizeof(wchar_t)) > (last2 - first2)){
+            next1 = first1;
+            next2 = first2;
+            return std::codecvt_base::partial;
+        }
+        * reinterpret_cast<wchar_t *>(first2) = * first1++;
+        first2 += sizeof(wchar_t);
+
+    }
+    next1 = first1;
+    next2 = first2;
+    return std::codecvt_base::ok;
+}
+
+BOOST_WARCHIVE_DECL std::codecvt_base::result
+codecvt_null<wchar_t>::do_in(
+    std::mbstate_t & /*state*/,
+    const char * first1, 
+    const char * last1, 
+    const char * & next1,
+    wchar_t * first2,
+    wchar_t * last2,
+    wchar_t * & next2
+) const {
+    // Process input characters until we've run of them,
+    // or the number of remaining characters is not
+    // enough to construct another output character,
+    // or we've run out of place for output characters.
+    while(first2 != last2){
+        // Have we converted all input characters? 
+        // Return with 'ok', if so.
+        if (first1 == last1)
+             break;
+        // Do we have less input characters than needed
+        // for a single output character?        
+        if(static_cast<int>(sizeof(wchar_t)) > (last1 - first1)){
+            next1 = first1;
+            next2 = first2;
+            return std::codecvt_base::partial; 
+        }
+        *first2++ = * reinterpret_cast<const wchar_t *>(first1);
+        first1 += sizeof(wchar_t);
+    }
+    next1 = first1;
+    next2 = first2;
+    return std::codecvt_base::ok;
+}
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/extended_type_info.cpp b/vendor/pdalboost/libs/serialization/src/extended_type_info.cpp
new file mode 100644
index 0000000..80cfcbc
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/extended_type_info.cpp
@@ -0,0 +1,188 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// extended_type_info.cpp: implementation for portable version of type_info
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <algorithm>
+#include <set>
+#include <utility>
+#include <boost/assert.hpp>
+#include <cstddef> // NULL
+
+#include <boost/config.hpp> // msvc needs this to suppress warning
+
+#include <cstring>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ using ::strcmp; }
+#endif
+
+#include <boost/core/no_exceptions_support.hpp>
+#include <boost/serialization/singleton.hpp>
+#include <boost/serialization/force_include.hpp>
+
+#define BOOST_SERIALIZATION_SOURCE
+#include <boost/serialization/extended_type_info.hpp>
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+namespace pdalboost { 
+namespace serialization {
+namespace detail {
+
+struct key_compare
+{
+    bool
+    operator()(
+        const extended_type_info * lhs, 
+        const extended_type_info * rhs
+    ) const {
+        // performance shortcut
+        if(lhs == rhs)
+            return false;
+        const char * l = lhs->get_key();
+        BOOST_ASSERT(NULL != l);
+        const char * r = rhs->get_key();
+        BOOST_ASSERT(NULL != r);
+        // performance shortcut
+        // shortcut to exploit string pooling
+        if(l == r)
+            return false;
+        // for exported types, use the string key so that
+        // multiple instances in different translation units
+        // can be matched up
+        return std::strcmp(l, r) < 0;
+    }
+};
+
+typedef std::multiset<const extended_type_info *, key_compare> ktmap;
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+class extended_type_info_arg : public extended_type_info
+{
+    virtual bool
+    is_less_than(const extended_type_info & /*rhs*/) const {
+        BOOST_ASSERT(false);
+        return false;
+    };
+    virtual bool
+    is_equal(const extended_type_info & /*rhs*/) const {
+        BOOST_ASSERT(false);
+        return false;
+    };
+    virtual const char * get_debug_info() const {
+        return get_key();
+    }
+    virtual void * construct(unsigned int /*count*/, ...) const{
+        BOOST_ASSERT(false);
+        return NULL;
+    }
+    virtual void destroy(void const * const /*p*/) const {
+        BOOST_ASSERT(false);
+    }
+public:
+    extended_type_info_arg(const char * key) :
+        extended_type_info(0, key)
+    {}
+
+    ~extended_type_info_arg(){
+    }
+};
+
+#ifdef BOOST_MSVC
+#  pragma warning(pop)
+#endif
+
+} // namespace detail
+
+BOOST_SERIALIZATION_DECL void  
+extended_type_info::key_register() const{
+    if(NULL == get_key())
+        return;
+    singleton<detail::ktmap>::get_mutable_instance().insert(this);
+}
+
+BOOST_SERIALIZATION_DECL void  
+extended_type_info::key_unregister() const{
+    if(NULL == get_key())
+        return;
+    if(! singleton<detail::ktmap>::is_destroyed()){
+        detail::ktmap & x = singleton<detail::ktmap>::get_mutable_instance();
+        detail::ktmap::iterator start = x.lower_bound(this);
+        detail::ktmap::iterator end = x.upper_bound(this);
+        // remove entry in map which corresponds to this type
+        for(;start != end; ++start){
+            if(this == *start){
+                x.erase(start);
+                break;
+            }
+        }
+    }
+}
+
+BOOST_SERIALIZATION_DECL const extended_type_info *
+extended_type_info::find(const char *key) {
+    BOOST_ASSERT(NULL != key);
+    const detail::ktmap & k = singleton<detail::ktmap>::get_const_instance();
+    const detail::extended_type_info_arg eti_key(key);
+    const detail::ktmap::const_iterator it = k.find(& eti_key);
+    if(k.end() == it)
+        return NULL;
+    return *(it);
+}
+
+BOOST_SERIALIZATION_DECL
+extended_type_info::extended_type_info(
+    const unsigned int type_info_key,
+    const char * key
+) :
+    m_type_info_key(type_info_key),
+    m_key(key)
+{
+}
+
+BOOST_SERIALIZATION_DECL 
+extended_type_info::~extended_type_info(){
+}
+
+BOOST_SERIALIZATION_DECL bool
+extended_type_info::operator<(const extended_type_info &rhs) const {
+    // short cut for a common cases
+    if(this == & rhs)
+        return false;
+    if(m_type_info_key == rhs.m_type_info_key){
+        return is_less_than(rhs);
+    }
+    if(m_type_info_key < rhs.m_type_info_key)
+        return true;
+    return false;
+}
+
+BOOST_SERIALIZATION_DECL bool
+extended_type_info::operator==(const extended_type_info &rhs) const {
+    // short cut for a common cases
+    if(this == & rhs)
+        return true;
+    if(m_type_info_key != rhs.m_type_info_key){
+        return false;
+    }
+    return is_equal(rhs);
+}
+
+} // namespace serialization
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/extended_type_info_no_rtti.cpp b/vendor/pdalboost/libs/serialization/src/extended_type_info_no_rtti.cpp
new file mode 100644
index 0000000..8cdf2bc
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/extended_type_info_no_rtti.cpp
@@ -0,0 +1,85 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// extended_type_info_no_rtti.cpp: specific implementation of type info
+// that is NOT based on typeid
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <cstring>
+#include <cstddef> // NULL
+#include <boost/assert.hpp>
+
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ using ::strcmp; }
+#endif
+
+#define BOOST_SERIALIZATION_SOURCE
+#include <boost/serialization/extended_type_info_no_rtti.hpp>
+
+#define EXTENDED_TYPE_INFO_NO_RTTI_KEY 2
+
+namespace pdalboost { 
+namespace serialization { 
+namespace no_rtti_system { 
+
+BOOST_SERIALIZATION_DECL  
+extended_type_info_no_rtti_0::extended_type_info_no_rtti_0(
+    const char * key
+) :
+    extended_type_info(EXTENDED_TYPE_INFO_NO_RTTI_KEY, key)
+{}
+
+BOOST_SERIALIZATION_DECL bool
+extended_type_info_no_rtti_0::is_less_than(
+    const pdalboost::serialization::extended_type_info &rhs) const 
+{
+    // shortcut for common case
+    if(this == & rhs)
+        return false;
+    const char * l = get_key();
+    const char * r = rhs.get_key();
+    // if this assertion is triggered, it could mean one of the following
+    // a) This class was never exported - make sure all calls which use
+    // this method of type id are in fact exported.
+    // b) This class was used (e.g. serialized through a pointer) before
+    // it was exported.  Make sure that classes which use this method
+    // of type id are NOT "automatically" registered by serializating 
+    // through a pointer to the to most derived class.  OR make sure
+    // that the BOOST_CLASS_EXPORT is included in every file
+    // which does this.
+    BOOST_ASSERT(NULL != l);
+    BOOST_ASSERT(NULL != r);
+    return std::strcmp(l, r) < 0;
+}
+
+BOOST_SERIALIZATION_DECL bool
+extended_type_info_no_rtti_0::is_equal(
+    const pdalboost::serialization::extended_type_info &rhs) const 
+{
+    // shortcut for common case
+    if(this == & rhs)
+        return true;
+    // null keys don't match with anything
+    const char * l = get_key();
+    BOOST_ASSERT(NULL != l);
+    if(NULL == l)
+        return false;
+    const char * r = rhs.get_key();
+    BOOST_ASSERT(NULL != r);
+    if(NULL == r)
+        return false;
+    return 0 == std::strcmp(l, r);
+}
+
+BOOST_SERIALIZATION_DECL  
+extended_type_info_no_rtti_0::~extended_type_info_no_rtti_0()
+{}
+
+} // namespece detail
+} // namespace serialization
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/extended_type_info_typeid.cpp b/vendor/pdalboost/libs/serialization/src/extended_type_info_typeid.cpp
new file mode 100644
index 0000000..ddebcd7
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/extended_type_info_typeid.cpp
@@ -0,0 +1,161 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// extended_type_info_typeid.cpp: specific implementation of type info
+// that is based on typeid
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <algorithm>
+#include <set>
+#include <boost/assert.hpp>
+#include <typeinfo>
+#include <cstddef> // NULL
+
+#include <boost/core/no_exceptions_support.hpp>
+
+#include <boost/serialization/singleton.hpp>
+
+#define BOOST_SERIALIZATION_SOURCE
+#include <boost/serialization/extended_type_info_typeid.hpp>
+
+namespace pdalboost { 
+namespace serialization { 
+namespace typeid_system {
+
+#define EXTENDED_TYPE_INFO_TYPE_KEY 1
+
+struct type_compare
+{
+    bool
+    operator()(
+        const extended_type_info_typeid_0 * lhs,
+        const extended_type_info_typeid_0 * rhs
+    ) const {
+        return lhs->is_less_than(*rhs);
+    }
+};
+
+typedef std::multiset<
+    const extended_type_info_typeid_0 *,
+    type_compare
+> tkmap;
+    
+BOOST_SERIALIZATION_DECL bool
+extended_type_info_typeid_0::is_less_than(
+    const pdalboost::serialization::extended_type_info & rhs
+) const {
+    // shortcut for common case
+    if(this == & rhs)
+        return false;
+    return 0 != m_ti->before(
+        *(static_cast<const extended_type_info_typeid_0 &>(rhs).m_ti)
+    );
+}
+
+BOOST_SERIALIZATION_DECL bool
+extended_type_info_typeid_0::is_equal(
+    const pdalboost::serialization::extended_type_info & rhs
+) const {
+    return 
+        // note: std::type_info == operator returns an int !!!
+        // the following permits conversion to bool without a warning.
+        ! (
+        * m_ti 
+        != *(static_cast<const extended_type_info_typeid_0 &>(rhs).m_ti)
+        )
+    ;
+}
+
+BOOST_SERIALIZATION_DECL
+extended_type_info_typeid_0::extended_type_info_typeid_0(
+    const char * key
+) :
+    extended_type_info(EXTENDED_TYPE_INFO_TYPE_KEY, key),
+    m_ti(NULL)
+{}
+
+BOOST_SERIALIZATION_DECL
+extended_type_info_typeid_0::~extended_type_info_typeid_0()
+{}
+
+BOOST_SERIALIZATION_DECL void 
+extended_type_info_typeid_0::type_register(const std::type_info & ti){
+    m_ti = & ti;
+    singleton<tkmap>::get_mutable_instance().insert(this);
+}
+
+BOOST_SERIALIZATION_DECL void 
+extended_type_info_typeid_0::type_unregister()
+{
+    if(NULL != m_ti){
+        if(! singleton<tkmap>::is_destroyed()){
+            tkmap & x = singleton<tkmap>::get_mutable_instance();
+            tkmap::iterator start = x.lower_bound(this);
+            tkmap::iterator end = x.upper_bound(this);
+            BOOST_ASSERT(start != end);
+
+            // remove entry in map which corresponds to this type
+            do{
+            if(this == *start)
+                x.erase(start++);
+            else
+                ++start;
+            }while(start != end);
+        }
+    }
+    m_ti = NULL;
+}
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+// this derivation is used for creating search arguments
+class extended_type_info_typeid_arg : 
+    public extended_type_info_typeid_0
+{
+    virtual void * construct(unsigned int /*count*/, ...) const{
+        BOOST_ASSERT(false);
+        return NULL;
+    }
+    virtual void destroy(void const * const /*p*/) const {
+        BOOST_ASSERT(false);
+    }
+public:
+    extended_type_info_typeid_arg(const std::type_info & ti) :
+        extended_type_info_typeid_0(NULL)
+    { 
+        // note absense of self register and key as this is used only as
+        // search argument given a type_info reference and is not to 
+        // be added to the map.
+        m_ti = & ti;
+    }
+    ~extended_type_info_typeid_arg(){
+        m_ti = NULL;
+    }
+};
+
+#ifdef BOOST_MSVC
+#  pragma warning(pop)
+#endif
+
+BOOST_SERIALIZATION_DECL const extended_type_info *
+extended_type_info_typeid_0::get_extended_type_info(
+    const std::type_info & ti
+) const {
+    typeid_system::extended_type_info_typeid_arg etia(ti);
+    const tkmap & t = singleton<tkmap>::get_const_instance();
+    const tkmap::const_iterator it = t.find(& etia);
+    if(t.end() == it)
+        return NULL;
+    return *(it);
+}
+
+} // namespace detail
+} // namespace serialization
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/polymorphic_iarchive.cpp b/vendor/pdalboost/libs/serialization/src/polymorphic_iarchive.cpp
new file mode 100644
index 0000000..76a802f
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/polymorphic_iarchive.cpp
@@ -0,0 +1,29 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_iarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/polymorphic_iarchive.hpp>
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+template class archive_serializer_map<polymorphic_iarchive>;
+
+} // detail
+} // archive
+} // boost
diff --git a/vendor/pdalboost/libs/serialization/src/polymorphic_oarchive.cpp b/vendor/pdalboost/libs/serialization/src/polymorphic_oarchive.cpp
new file mode 100644
index 0000000..9425d27
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/polymorphic_oarchive.cpp
@@ -0,0 +1,29 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// polymorphic_oarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/polymorphic_oarchive.hpp>
+
+namespace pdalboost {
+namespace archive {
+namespace detail {
+
+template class archive_serializer_map<polymorphic_oarchive>;
+
+} // detail
+} // archive
+} // boost
diff --git a/vendor/pdalboost/libs/serialization/src/stl_port.cpp b/vendor/pdalboost/libs/serialization/src/stl_port.cpp
new file mode 100644
index 0000000..b34a3b2
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/stl_port.cpp
@@ -0,0 +1,42 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// stl_port.cpp: implementation of run-time casting of void pointers
+
+// (C) Copyright 2005 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+// this befuddles the msvc 6 compiler so we can't use it
+#if ! ((defined _MSC_VER) && (_MSC_VER <= 1300)) 
+
+#include <boost/config.hpp>
+
+#if defined(__SGI_STL_PORT) && (__SGI_STL_PORT < 0x500)
+
+#include <boost/archive/codecvt_null.hpp>
+
+// explicit instantiation
+
+namespace std {
+
+template
+locale::locale(
+    const locale& __loc, pdalboost::archive::codecvt_null<char> * __f
+);
+
+template
+locale::locale(
+    const locale& __loc, pdalboost::archive::codecvt_null<wchar_t> * __f
+);
+
+} // namespace std
+
+#endif
+
+#endif
diff --git a/vendor/pdalboost/libs/serialization/src/text_iarchive.cpp b/vendor/pdalboost/libs/serialization/src/text_iarchive.cpp
new file mode 100644
index 0000000..a45f5ba
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/text_iarchive.cpp
@@ -0,0 +1,32 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_iarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_text_iarchive.ipp>
+#include <boost/archive/impl/text_iarchive_impl.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+template class detail::archive_serializer_map<text_iarchive>;
+template class basic_text_iarchive<text_iarchive> ;
+template class text_iarchive_impl<text_iarchive> ;
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/text_oarchive.cpp b/vendor/pdalboost/libs/serialization/src/text_oarchive.cpp
new file mode 100644
index 0000000..cb045d1
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/text_oarchive.cpp
@@ -0,0 +1,33 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_oarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_text_oarchive.ipp>
+#include <boost/archive/impl/text_oarchive_impl.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+//template class basic_text_oprimitive<std::ostream> ;
+template class detail::archive_serializer_map<text_oarchive>;
+template class basic_text_oarchive<text_oarchive> ;
+template class text_oarchive_impl<text_oarchive> ;
+
+} // namespace serialization
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/text_wiarchive.cpp b/vendor/pdalboost/libs/serialization/src/text_wiarchive.cpp
new file mode 100644
index 0000000..3ebd30b
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/text_wiarchive.cpp
@@ -0,0 +1,37 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_wiarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/text_wiarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_text_iarchive.ipp>
+#include <boost/archive/impl/text_wiarchive_impl.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+template class detail::archive_serializer_map<text_wiarchive>;
+template class basic_text_iarchive<text_wiarchive> ;
+template class text_wiarchive_impl<text_wiarchive> ;
+
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+
diff --git a/vendor/pdalboost/libs/serialization/src/text_woarchive.cpp b/vendor/pdalboost/libs/serialization/src/text_woarchive.cpp
new file mode 100644
index 0000000..1b100cd
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/text_woarchive.cpp
@@ -0,0 +1,35 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// text_woarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/text_woarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_text_oarchive.ipp>
+#include <boost/archive/impl/text_woarchive_impl.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+template class detail::archive_serializer_map<text_woarchive>;
+template class basic_text_oarchive<text_woarchive> ;
+template class text_woarchive_impl<text_woarchive> ;
+
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
diff --git a/vendor/pdalboost/libs/serialization/src/utf8_codecvt_facet.cpp b/vendor/pdalboost/libs/serialization/src/utf8_codecvt_facet.cpp
new file mode 100644
index 0000000..a2b5c2f
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/utf8_codecvt_facet.cpp
@@ -0,0 +1,20 @@
+// Copyright Vladimir Prus 2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+    #ifdef BOOST_NO_CXX11_HDR_CODECVT
+        #define BOOST_UTF8_BEGIN_NAMESPACE \
+             namespace pdalboost { namespace archive { namespace detail {
+        #define BOOST_UTF8_DECL
+        #define BOOST_UTF8_END_NAMESPACE }}}
+        #include <boost/detail/utf8_codecvt_facet.ipp>
+        #undef BOOST_UTF8_END_NAMESPACE
+        #undef BOOST_UTF8_DECL
+        #undef BOOST_UTF8_BEGIN_NAMESPACE
+    #endif // BOOST_NO_CXX11_HDR_CODECVT
+#endif // BOOST_NO_STD_WSTREAMBUF
diff --git a/vendor/pdalboost/libs/serialization/src/void_cast.cpp b/vendor/pdalboost/libs/serialization/src/void_cast.cpp
new file mode 100644
index 0000000..479e9bd
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/void_cast.cpp
@@ -0,0 +1,375 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// void_cast.cpp: implementation of run-time casting of void pointers
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// <gennadiy.rozental at tfn.com>
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+# pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#include <boost/assert.hpp>
+#include <cstddef> // NULL
+#ifdef BOOST_SERIALIZATION_LOG
+#include <iostream>
+#endif
+
+// STL
+#include <set>
+#include <functional>
+#include <algorithm>
+#include <boost/assert.hpp>
+
+// BOOST
+#define BOOST_SERIALIZATION_SOURCE
+#include <boost/serialization/config.hpp>
+#include <boost/serialization/singleton.hpp>
+#include <boost/serialization/extended_type_info.hpp>
+#include <boost/serialization/void_cast.hpp>
+
+namespace pdalboost { 
+namespace serialization {
+namespace void_cast_detail {
+
+// note that void_casters are keyed on value of
+// member extended type info records - NOT their
+// addresses.  This is necessary in order for the
+// void cast operations to work across dll and exe
+// module boundries.
+bool void_caster::operator<(const void_caster & rhs) const {
+    // include short cut to save time and eliminate
+    // problems when when base class aren't virtual
+    if(m_derived != rhs.m_derived){
+        if(*m_derived < *rhs.m_derived)
+            return true;
+        if(*rhs.m_derived < *m_derived)
+            return false;
+    }
+    // m_derived == rhs.m_derived
+    if(m_base != rhs.m_base)
+        return *m_base < *rhs.m_base;
+    else
+        return false;
+}
+
+struct void_caster_compare {
+    bool operator()(const void_caster * lhs, const void_caster * rhs) const {
+        return *lhs < *rhs;
+    }
+};
+
+typedef std::set<const void_caster *, void_caster_compare> set_type;
+typedef pdalboost::serialization::singleton<set_type> void_caster_registry;
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+// implementation of shortcut void caster
+class void_caster_shortcut : public void_caster
+{
+    bool m_includes_virtual_base;
+
+    void const * 
+    vbc_upcast(
+        void const * const t
+    ) const;
+    void const *
+    vbc_downcast(
+        void const * const t
+    ) const;
+    virtual void const *
+    upcast(void const * const t) const{
+        if(m_includes_virtual_base)
+            return vbc_upcast(t);
+        return static_cast<const char *> ( t ) - m_difference;
+    }
+    virtual void const *
+    downcast(void const * const t) const{
+        if(m_includes_virtual_base)
+            return vbc_downcast(t);
+        return static_cast<const char *> ( t ) + m_difference;
+    }
+    virtual bool is_shortcut() const {
+        return true;
+    }
+    virtual bool has_virtual_base() const {
+        return m_includes_virtual_base;
+    }
+public:
+    void_caster_shortcut(
+        extended_type_info const * derived,
+        extended_type_info const * base,
+        std::ptrdiff_t difference,
+        bool includes_virtual_base,
+        void_caster const * const parent
+    ) :
+        void_caster(derived, base, difference, parent),
+        m_includes_virtual_base(includes_virtual_base)
+    {
+        recursive_register(includes_virtual_base);
+    }
+    virtual ~void_caster_shortcut(){
+        recursive_unregister();
+    }
+};
+
+#ifdef BOOST_MSVC
+#  pragma warning(pop)
+#endif
+
+void const * 
+void_caster_shortcut::vbc_downcast(
+    void const * const t
+) const {
+    // try to find a chain that gives us what we want
+    const void_cast_detail::set_type & s
+        = void_cast_detail::void_caster_registry::get_const_instance();
+    void_cast_detail::set_type::const_iterator it;
+    for(it = s.begin(); it != s.end(); ++it){
+        // if the current candidate casts to the desired target type
+        if ((*it)->m_derived == m_derived){
+            // and if it's not us
+            if ((*it)->m_base != m_base){
+                // try to cast from the candidate base to our base
+                const void * t_new;
+                t_new = void_downcast(*(*it)->m_base, *m_base, t);
+                // if we were successful
+                if(NULL != t_new){
+                    // recast to our derived
+                    const void_caster * vc = *it;
+                    return vc->downcast(t_new);
+                }
+            }
+        }
+    }
+    return NULL;
+}
+
+void const * 
+void_caster_shortcut::vbc_upcast(
+    void const * const t
+) const {
+    // try to find a chain that gives us what we want
+    const void_cast_detail::set_type & s
+        = void_cast_detail::void_caster_registry::get_const_instance();
+    void_cast_detail::set_type::const_iterator it;
+    for(it = s.begin(); it != s.end(); ++it){
+        // if the current candidate casts from the desired base type
+        if((*it)->m_base == m_base){
+            // and if it's not us
+            if ((*it)->m_derived != m_derived){
+                // try to cast from the candidate derived to our our derived
+                const void * t_new;
+                t_new = void_upcast(*m_derived, *(*it)->m_derived, t);
+                if(NULL != t_new)
+                    return (*it)->upcast(t_new);
+            }
+        }
+    }
+    return NULL;
+}
+
+#ifdef BOOST_MSVC
+#  pragma warning(push)
+#  pragma warning(disable : 4511 4512)
+#endif
+
+// just used as a search key
+class void_caster_argument : public void_caster
+{
+    virtual void const *
+    upcast(void const * const /*t*/) const {
+        BOOST_ASSERT(false);
+        return NULL;
+    }
+    virtual void const *
+    downcast( void const * const /*t*/) const {
+        BOOST_ASSERT(false);
+        return NULL;
+    }
+    virtual bool has_virtual_base() const {
+        BOOST_ASSERT(false);
+        return false;
+    }
+public:
+    void_caster_argument(
+        extended_type_info const * derived,
+        extended_type_info const * base
+    ) :
+        void_caster(derived, base)
+    {}
+    virtual ~void_caster_argument(){};
+};
+
+#ifdef BOOST_MSVC
+#  pragma warning(pop)
+#endif
+
+// implementation of void caster base class
+BOOST_SERIALIZATION_DECL void
+void_caster::recursive_register(bool includes_virtual_base) const {
+    void_cast_detail::set_type & s
+        = void_cast_detail::void_caster_registry::get_mutable_instance();
+
+    #ifdef BOOST_SERIALIZATION_LOG
+    std::clog << "recursive_register\n";
+    std::clog << m_derived->get_debug_info();
+    std::clog << "<-";
+    std::clog << m_base->get_debug_info();
+    std::clog << "\n";
+    #endif
+
+    std::pair<void_cast_detail::set_type::const_iterator, bool> result;
+    // comment this out for now.  
+    result = s.insert(this);
+    //assert(result.second);
+
+    // generate all implied void_casts.
+    void_cast_detail::set_type::const_iterator it;
+    for(it = s.begin(); it != s.end(); ++it){
+        if(* m_derived == * (*it)->m_base){
+            const void_caster_argument vca(
+                (*it)->m_derived, 
+                m_base
+            );
+            void_cast_detail::set_type::const_iterator i;
+            i = s.find(& vca);
+            if(i == s.end()){
+                new void_caster_shortcut(
+                    (*it)->m_derived, 
+                    m_base,
+                    m_difference + (*it)->m_difference,
+                    (*it)->has_virtual_base() || includes_virtual_base,
+                    this
+                );
+            }
+        }
+        if(* (*it)->m_derived == * m_base){
+            const void_caster_argument vca(
+                m_derived, 
+                (*it)->m_base
+            );
+            void_cast_detail::set_type::const_iterator i;
+            i = s.find(& vca);
+            if(i == s.end()){
+                new void_caster_shortcut(
+                    m_derived, 
+                    (*it)->m_base, 
+                    m_difference + (*it)->m_difference,
+                    (*it)->has_virtual_base() || includes_virtual_base,
+                    this
+                );
+            }
+        }
+    }
+}
+
+BOOST_SERIALIZATION_DECL void
+void_caster::recursive_unregister() const {
+    if(void_caster_registry::is_destroyed())
+        return;
+
+    #ifdef BOOST_SERIALIZATION_LOG
+    std::clog << "recursive_unregister\n";
+    std::clog << m_derived->get_debug_info();
+    std::clog << "<-";
+    std::clog << m_base->get_debug_info();
+    std::clog << "\n";
+    #endif
+
+    void_cast_detail::set_type & s 
+        = void_caster_registry::get_mutable_instance();
+
+    // delete all shortcuts which use this primitive
+    void_cast_detail::set_type::iterator it;
+    for(it = s.begin(); it != s.end();){
+        const void_caster * vc = *it;
+        if(vc == this){
+            s.erase(it++);
+        }
+        else
+        if(vc->m_parent == this){
+            s.erase(it);
+            delete vc;
+            it = s.begin();
+        }
+        else
+            it++;
+    }
+}
+
+} // namespace void_cast_detail
+
+BOOST_SYMBOL_VISIBLE void const *
+void_upcast(
+    extended_type_info const & derived,
+    extended_type_info const & base,
+    void const * const t
+);
+
+// Given a void *, assume that it really points to an instance of one type
+// and alter it so that it would point to an instance of a related type.
+// Return the altered pointer. If there exists no sequence of casts that
+// can transform from_type to to_type, return a NULL.  
+BOOST_SERIALIZATION_DECL void const *
+void_upcast(
+    extended_type_info const & derived,
+    extended_type_info const & base,
+    void const * const t
+){
+    // same types - trivial case
+    if (derived == base)
+        return t;
+
+    // check to see if base/derived pair is found in the registry
+    const void_cast_detail::set_type & s
+        = void_cast_detail::void_caster_registry::get_const_instance();
+    const void_cast_detail::void_caster_argument ca(& derived, & base);
+
+    void_cast_detail::set_type::const_iterator it;
+    it = s.find(& ca);
+    if (s.end() != it)
+        return (*it)->upcast(t);
+
+    return NULL;
+}
+
+BOOST_SYMBOL_VISIBLE void const *
+void_downcast(
+    extended_type_info const & derived,
+    extended_type_info const & base,
+    void const * const t
+);
+
+BOOST_SERIALIZATION_DECL void const *
+void_downcast(
+    extended_type_info const & derived,
+    extended_type_info const & base,
+    void const * const t
+){
+    // same types - trivial case
+    if (derived == base)
+        return t;
+
+    // check to see if base/derived pair is found in the registry
+    const void_cast_detail::set_type & s
+        = void_cast_detail::void_caster_registry::get_const_instance();
+    const void_cast_detail::void_caster_argument ca(& derived, & base);
+
+    void_cast_detail::set_type::const_iterator it;
+    it = s.find(&ca);
+    if (s.end() != it)
+        return(*it)->downcast(t);
+
+    return NULL;
+}
+
+} // namespace serialization
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/xml_archive_exception.cpp b/vendor/pdalboost/libs/serialization/src/xml_archive_exception.cpp
new file mode 100644
index 0000000..9c681eb
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/xml_archive_exception.cpp
@@ -0,0 +1,64 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_archive_exception.cpp:
+
+// (C) Copyright 2009 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+
+#include <exception>
+#include <boost/assert.hpp>
+#include <string>
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/xml_archive_exception.hpp>
+
+namespace pdalboost {
+namespace archive {
+
+BOOST_ARCHIVE_DECL
+xml_archive_exception::xml_archive_exception(
+        exception_code c, 
+        const char * e1,
+        const char * e2
+    ) : 
+        archive_exception(other_exception, e1, e2)
+    {
+        switch(c){
+        case xml_archive_parsing_error:
+            archive_exception::append(0, "unrecognized XML syntax");
+            break;
+        case xml_archive_tag_mismatch:
+            archive_exception::append(0, "XML start/end tag mismatch");
+            if(NULL != e1){
+                archive_exception::append(0, " - ");
+                archive_exception::append(0, e1);
+            }    
+            break;
+        case xml_archive_tag_name_error:
+            archive_exception::append(0, "Invalid XML tag name");
+            break;
+        default:
+            BOOST_ASSERT(false);
+            archive_exception::append(0, "programming error");
+            break;
+        }
+    }
+    
+BOOST_ARCHIVE_DECL
+xml_archive_exception::xml_archive_exception(xml_archive_exception const & oth) :
+ 	archive_exception(oth)
+	{
+	}
+	
+BOOST_ARCHIVE_DECL xml_archive_exception::~xml_archive_exception() BOOST_NOEXCEPT_OR_NOTHROW {}
+
+} // archive
+} // boost
diff --git a/vendor/pdalboost/libs/serialization/src/xml_grammar.cpp b/vendor/pdalboost/libs/serialization/src/xml_grammar.cpp
new file mode 100644
index 0000000..4979f2c
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/xml_grammar.cpp
@@ -0,0 +1,73 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_grammar.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/impl/basic_xml_grammar.hpp>
+
+using namespace pdalboost::spirit::classic;
+
+#include <boost/config.hpp>
+
+// fixup for borland
+// The following code will be put into Boost.Config in a later revision
+#if ! defined(__SGI_STL_PORT) \
+&& defined(BOOST_RWSTD_VER) && BOOST_RWSTD_VER<=0x020101
+#include <string>
+namespace std {
+    template<>
+    inline string & 
+    string::replace (
+        char * first1, 
+        char * last1,
+        const char * first2,
+        const char * last2
+    ){
+        replace(first1-begin(),last1-first1,first2,last2-first2,0,last2-first2);
+        return *this;
+    }
+} // namespace std
+#endif
+
+namespace pdalboost {
+namespace archive {
+
+typedef basic_xml_grammar<char> xml_grammar;
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// specific definitions for char based XML
+
+template<>
+void xml_grammar::init_chset(){
+    Char = chset_t("\x9\xA\xD\x20-\x7f\x80\x81-\xFF"); 
+    Letter = chset_t("\x41-\x5A\x61-\x7A\xC0-\xD6\xD8-\xF6\xF8-\xFF");
+    Digit = chset_t("0-9");
+    Extender = chset_t('\xB7');
+    Sch = chset_t("\x20\x9\xD\xA");
+    NameChar = Letter | Digit | chset_p("._:-") | Extender ;
+}
+
+} // namespace archive
+} // namespace pdalboost
+
+#include "basic_xml_grammar.ipp"
+
+namespace pdalboost {
+namespace archive {
+
+// explicit instantiation of xml for 8 bit characters
+template class basic_xml_grammar<char>;
+
+} // namespace archive
+} // namespace pdalboost
+
diff --git a/vendor/pdalboost/libs/serialization/src/xml_iarchive.cpp b/vendor/pdalboost/libs/serialization/src/xml_iarchive.cpp
new file mode 100644
index 0000000..8b9c060
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/xml_iarchive.cpp
@@ -0,0 +1,36 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_iarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_ARCHIVE_SOURCE
+
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <boost/archive/xml_iarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of xml stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_xml_iarchive.ipp>
+#include <boost/archive/impl/xml_iarchive_impl.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+template class detail::archive_serializer_map<xml_iarchive>;
+template class basic_xml_iarchive<xml_iarchive> ;
+template class xml_iarchive_impl<xml_iarchive> ;
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/xml_oarchive.cpp b/vendor/pdalboost/libs/serialization/src/xml_oarchive.cpp
new file mode 100644
index 0000000..7516871
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/xml_oarchive.cpp
@@ -0,0 +1,32 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_oarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_ARCHIVE_SOURCE
+#include <boost/archive/xml_oarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of xml stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_xml_oarchive.ipp>
+#include <boost/archive/impl/xml_oarchive_impl.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+template class detail::archive_serializer_map<xml_oarchive>;
+template class basic_xml_oarchive<xml_oarchive> ;
+template class xml_oarchive_impl<xml_oarchive> ;
+
+} // namespace archive
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/serialization/src/xml_wgrammar.cpp b/vendor/pdalboost/libs/serialization/src/xml_wgrammar.cpp
new file mode 100644
index 0000000..d7ed9b0
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/xml_wgrammar.cpp
@@ -0,0 +1,157 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_wgrammar.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/impl/basic_xml_grammar.hpp>
+
+using namespace pdalboost::spirit::classic;
+
+// fixup for RogueWave
+#include <boost/config.hpp>
+#if ! defined(__SGI_STL_PORT) \
+&& defined(BOOST_RWSTD_VER) && BOOST_RWSTD_VER<=0x020101
+#include <string>
+namespace std {
+    template<>
+    inline wstring & 
+    wstring::replace (
+        wchar_t * first1, 
+        wchar_t * last1,
+        const wchar_t * first2,
+        const wchar_t * last2
+    ){
+        replace(first1-begin(),last1-first1,first2,last2-first2,0,last2-first2);
+        return *this;
+    }
+} // namespace std
+#endif
+
+namespace pdalboost {
+namespace archive {
+
+typedef basic_xml_grammar<wchar_t> xml_wgrammar;
+
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// specific definitions for wchar_t based XML
+
+template<>
+void xml_wgrammar::init_chset(){
+    Char = chset_t(
+        #if defined(__GNUC__) && defined(linux)
+            L"\x9\xA\xD\x20-\xD7FF\xE000-\xFFFD\x10000-\x10FFFF"
+        #else
+            L"\x9\xA\xD\x20-\xD7FF\xE000-\xFFFD"
+        #endif
+    );
+
+    Sch = chset_t(L"\x20\x9\xD\xA");
+
+    BaseChar = chset_t(
+        L"\x41-\x5A\x61-\x7A\xC0-\xD6\xD8-\xF6\xF8-\xFF\x100-\x131\x134-\x13E"
+        L"\x141-\x148\x14A-\x17E\x180-\x1C3\x1CD-\x1F0\x1F4-\x1F5\x1FA-\x217"
+        L"\x250-\x2A8\x2BB-\x2C1\x386\x388-\x38A\x38C\x38E-\x3A1\x3A3-\x3CE"
+        L"\x3D0-\x3D6\x3DA\x3DC\x3DE\x3E0\x3E2-\x3F3\x401-\x40C\x40E-\x44F"
+        L"\x451-\x45C\x45E-\x481\x490-\x4C4\x4C7-\x4C8\x4CB-\x4CC\x4D0-\x4EB"
+        L"\x4EE-\x4F5\x4F8-\x4F9\x531-\x556\x559\x561-\x586\x5D0-\x5EA"
+        L"\x5F0-\x5F2\x621-\x63A\x641-\x64A\x671-\x6B7\x6BA-\x6BE\x6C0-\x6CE"
+        L"\x6D0-\x6D3\x6D5\x6E5-\x6E6\x905-\x939\x93D\x958-\x961\x985-\x98C"
+        L"\x98F-\x990\x993-\x9A8\x9AA-\x9B0\x9B2\x9B6-\x9B9\x9DC-\x9DD"
+        L"\x9DF-\x9E1\x9F0-\x9F1\xA05-\xA0A\xA0F-\xA10\xA13-\xA28\xA2A-\xA30"
+        L"\xA32-\xA33\xA35-\xA36\xA38-\xA39\xA59-\xA5C\xA5E\xA72-\xA74"
+        L"\xA85-\xA8B\xA8D\xA8F-\xA91\xA93-\xAA8\xAAA-\xAB0\xAB2-\xAB3"
+        L"\xAB5-\xAB9\xABD\xAE0\xB05-\xB0C\xB0F-\xB10\xB13-\xB28\xB2A-\xB30"
+        L"\xB32-\xB33\xB36-\xB39\xB3D\xB5C-\xB5D\xB5F-\xB61\xB85-\xB8A"
+        L"\xB8E-\xB90\xB92-\xB95\xB99-\xB9A\xB9C\xB9E-\xB9F\xBA3-\xBA4"
+        L"\xBA8-\xBAA\xBAE-\xBB5\xBB7-\xBB9\xC05-\xC0C\xC0E-\xC10\xC12-\xC28"
+        L"\xC2A-\xC33\xC35-\xC39\xC60-\xC61\xC85-\xC8C\xC8E-\xC90\xC92-\xCA8"
+        L"\xCAA-\xCB3\xCB5-\xCB9\xCDE\xCE0-\xCE1\xD05-\xD0C\xD0E-\xD10"
+        L"\xD12-\xD28\xD2A-\xD39\xD60-\xD61\xE01-\xE2E\xE30\xE32-\xE33"
+        L"\xE40-\xE45\xE81-\xE82\xE84\xE87-\xE88\xE8A\xE8D\xE94-\xE97"
+        L"\xE99-\xE9F\xEA1-\xEA3\xEA5\xEA7\xEAA-\xEAB\xEAD-\xEAE\xEB0"
+        L"\xEB2-\xEB3\xEBD\xEC0-\xEC4\xF40-\xF47\xF49-\xF69\x10A0-\x10C5"
+        L"\x10D0-\x10F6\x1100\x1102-\x1103\x1105-\x1107\x1109\x110B-\x110C"
+        L"\x110E-\x1112\x113C\x113E\x1140\x114C\x114E\x1150\x1154-\x1155"
+        L"\x1159\x115F-\x1161\x1163\x1165\x1167\x1169\x116D-\x116E"
+        L"\x1172-\x1173\x1175\x119E\x11A8\x11AB\x11AE-\x11AF\x11B7-\x11B8"
+        L"\x11BA\x11BC-\x11C2\x11EB\x11F0\x11F9\x1E00-\x1E9B\x1EA0-\x1EF9"
+        L"\x1F00-\x1F15\x1F18-\x1F1D\x1F20-\x1F45\x1F48-\x1F4D\x1F50-\x1F57"
+        L"\x1F59\x1F5B\x1F5D\x1F5F-\x1F7D\x1F80-\x1FB4\x1FB6-\x1FBC\x1FBE"
+        L"\x1FC2-\x1FC4\x1FC6-\x1FCC\x1FD0-\x1FD3\x1FD6-\x1FDB\x1FE0-\x1FEC"
+        L"\x1FF2-\x1FF4\x1FF6-\x1FFC\x2126\x212A-\x212B\x212E\x2180-\x2182"
+        L"\x3041-\x3094\x30A1-\x30FA\x3105-\x312C\xAC00-\xD7A3"
+    );
+
+    Ideographic = chset_t(L"\x4E00-\x9FA5\x3007\x3021-\x3029");
+
+    Letter = BaseChar | Ideographic;
+
+    CombiningChar = chset_t(
+        L"\x0300-\x0345\x0360-\x0361\x0483-\x0486\x0591-\x05A1\x05A3-\x05B9"
+        L"\x05BB-\x05BD\x05BF\x05C1-\x05C2\x05C4\x064B-\x0652\x0670"
+        L"\x06D6-\x06DC\x06DD-\x06DF\x06E0-\x06E4\x06E7-\x06E8\x06EA-\x06ED"
+        L"\x0901-\x0903\x093C\x093E-\x094C\x094D\x0951-\x0954\x0962-\x0963"
+        L"\x0981-\x0983\x09BC\x09BE\x09BF\x09C0-\x09C4\x09C7-\x09C8"
+        L"\x09CB-\x09CD\x09D7\x09E2-\x09E3\x0A02\x0A3C\x0A3E\x0A3F"
+        L"\x0A40-\x0A42\x0A47-\x0A48\x0A4B-\x0A4D\x0A70-\x0A71\x0A81-\x0A83"
+        L"\x0ABC\x0ABE-\x0AC5\x0AC7-\x0AC9\x0ACB-\x0ACD\x0B01-\x0B03\x0B3C"
+        L"\x0B3E-\x0B43\x0B47-\x0B48\x0B4B-\x0B4D\x0B56-\x0B57\x0B82-\x0B83"
+        L"\x0BBE-\x0BC2\x0BC6-\x0BC8\x0BCA-\x0BCD\x0BD7\x0C01-\x0C03"
+        L"\x0C3E-\x0C44\x0C46-\x0C48\x0C4A-\x0C4D\x0C55-\x0C56\x0C82-\x0C83"
+        L"\x0CBE-\x0CC4\x0CC6-\x0CC8\x0CCA-\x0CCD\x0CD5-\x0CD6\x0D02-\x0D03"
+        L"\x0D3E-\x0D43\x0D46-\x0D48\x0D4A-\x0D4D\x0D57\x0E31\x0E34-\x0E3A"
+        L"\x0E47-\x0E4E\x0EB1\x0EB4-\x0EB9\x0EBB-\x0EBC\x0EC8-\x0ECD"
+        L"\x0F18-\x0F19\x0F35\x0F37\x0F39\x0F3E\x0F3F\x0F71-\x0F84"
+        L"\x0F86-\x0F8B\x0F90-\x0F95\x0F97\x0F99-\x0FAD\x0FB1-\x0FB7\x0FB9"
+        L"\x20D0-\x20DC\x20E1\x302A-\x302F\x3099\x309A"
+    );
+
+    Digit = chset_t(
+        L"\x0030-\x0039\x0660-\x0669\x06F0-\x06F9\x0966-\x096F\x09E6-\x09EF"
+        L"\x0A66-\x0A6F\x0AE6-\x0AEF\x0B66-\x0B6F\x0BE7-\x0BEF\x0C66-\x0C6F"
+        L"\x0CE6-\x0CEF\x0D66-\x0D6F\x0E50-\x0E59\x0ED0-\x0ED9\x0F20-\x0F29"
+    );
+
+    Extender = chset_t(
+        L"\x00B7\x02D0\x02D1\x0387\x0640\x0E46\x0EC6\x3005\x3031-\x3035"
+        L"\x309D-\x309E\x30FC-\x30FE"
+    );
+
+    NameChar =
+        Letter 
+        | Digit 
+        | L'.'
+        | L'-'
+        | L'_'
+        | L':'
+        | CombiningChar 
+        | Extender
+    ;
+}
+} // namespace archive
+} // namespace pdalboost
+
+#include "basic_xml_grammar.ipp"
+
+namespace pdalboost {
+namespace archive {
+
+// explicit instantiation of xml for wide characters
+template class basic_xml_grammar<wchar_t>;
+
+} // namespace archive
+} // namespace pdalboost
+
+#endif
diff --git a/vendor/pdalboost/libs/serialization/src/xml_wiarchive.cpp b/vendor/pdalboost/libs/serialization/src/xml_wiarchive.cpp
new file mode 100644
index 0000000..1c3f3b2
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/xml_wiarchive.cpp
@@ -0,0 +1,42 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_wiarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#include <boost/detail/workaround.hpp>
+
+#if (defined _MSC_VER) && (_MSC_VER == 1200)
+#  pragma warning (disable : 4786) // too long name, harmless warning
+#endif
+
+#define BOOST_WARCHIVE_SOURCE
+
+#include <boost/archive/xml_wiarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of xml stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_xml_iarchive.ipp>
+#include <boost/archive/impl/xml_wiarchive_impl.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+template class detail::archive_serializer_map<xml_wiarchive>;
+template class basic_xml_iarchive<xml_wiarchive> ;
+template class xml_wiarchive_impl<xml_wiarchive> ;
+
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
diff --git a/vendor/pdalboost/libs/serialization/src/xml_woarchive.cpp b/vendor/pdalboost/libs/serialization/src/xml_woarchive.cpp
new file mode 100644
index 0000000..21bff71
--- /dev/null
+++ b/vendor/pdalboost/libs/serialization/src/xml_woarchive.cpp
@@ -0,0 +1,35 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// xml_woarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/xml_woarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_xml_oarchive.ipp>
+#include <boost/archive/impl/xml_woarchive_impl.ipp>
+
+namespace pdalboost {
+namespace archive {
+
+template class detail::archive_serializer_map<xml_woarchive>;
+template class basic_xml_oarchive<xml_woarchive> ;
+template class xml_woarchive_impl<xml_woarchive> ;
+
+} // namespace archive
+} // namespace pdalboost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
diff --git a/vendor/pdalboost/libs/smart_ptr/src/sp_collector.cpp b/vendor/pdalboost/libs/smart_ptr/src/sp_collector.cpp
new file mode 100644
index 0000000..26dcc83
--- /dev/null
+++ b/vendor/pdalboost/libs/smart_ptr/src/sp_collector.cpp
@@ -0,0 +1,270 @@
+//
+//  sp_collector.cpp
+//
+//  Copyright (c) 2002, 2003 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+
+#include <boost/assert.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/detail/lightweight_mutex.hpp>
+#include <cstdlib>
+#include <map>
+#include <deque>
+#include <iostream>
+
+typedef std::map< void const *, std::pair<void *, size_t> > map_type;
+
+static map_type & get_map()
+{
+    static map_type m;
+    return m;
+}
+
+typedef pdalboost::detail::lightweight_mutex mutex_type;
+
+static mutex_type & get_mutex()
+{
+    static mutex_type m;
+    return m;
+}
+
+static void * init_mutex_before_main = &get_mutex();
+
+namespace
+{
+    class X;
+
+    struct count_layout
+    {
+        pdalboost::detail::sp_counted_base * pi;
+        int id;
+    };
+
+    struct shared_ptr_layout
+    {
+        X * px;
+        count_layout pn;
+    };
+}
+
+// assume 4 byte alignment for pointers when scanning
+size_t const pointer_align = 4;
+
+typedef std::map<void const *, long> map2_type;
+
+static void scan_and_count(void const * area, size_t size, map_type const & m, map2_type & m2)
+{
+    unsigned char const * p = static_cast<unsigned char const *>(area);
+
+    for(size_t n = 0; n + sizeof(shared_ptr_layout) <= size; p += pointer_align, n += pointer_align)
+    {
+        shared_ptr_layout const * q = reinterpret_cast<shared_ptr_layout const *>(p);
+
+        if(q->pn.id == pdalboost::detail::shared_count_id && q->pn.pi != 0 && m.count(q->pn.pi) != 0)
+        {
+            ++m2[q->pn.pi];
+        }
+    }
+}
+
+typedef std::deque<void const *> open_type;
+
+static void scan_and_mark(void const * area, size_t size, map2_type & m2, open_type & open)
+{
+    unsigned char const * p = static_cast<unsigned char const *>(area);
+
+    for(size_t n = 0; n + sizeof(shared_ptr_layout) <= size; p += pointer_align, n += pointer_align)
+    {
+        shared_ptr_layout const * q = reinterpret_cast<shared_ptr_layout const *>(p);
+
+        if(q->pn.id == pdalboost::detail::shared_count_id && q->pn.pi != 0 && m2.count(q->pn.pi) != 0)
+        {
+            open.push_back(q->pn.pi);
+            m2.erase(q->pn.pi);
+        }
+    }
+}
+
+static void find_unreachable_objects_impl(map_type const & m, map2_type & m2)
+{
+    // scan objects for shared_ptr members, compute internal counts
+
+    {
+        std::cout << "... " << m.size() << " objects in m.\n";
+
+        for(map_type::const_iterator i = m.begin(); i != m.end(); ++i)
+        {
+            pdalboost::detail::sp_counted_base const * p = static_cast<pdalboost::detail::sp_counted_base const *>(i->first);
+
+            BOOST_ASSERT(p->use_count() != 0); // there should be no inactive counts in the map
+
+            m2[ i->first ];
+
+            scan_and_count(i->second.first, i->second.second, m, m2);
+        }
+
+        std::cout << "... " << m2.size() << " objects in m2.\n";
+    }
+
+    // mark reachable objects
+
+    {
+        open_type open;
+
+        for(map2_type::iterator i = m2.begin(); i != m2.end(); ++i)
+        {
+            pdalboost::detail::sp_counted_base const * p = static_cast<pdalboost::detail::sp_counted_base const *>(i->first);
+            if(p->use_count() != i->second) open.push_back(p);
+        }
+
+        std::cout << "... " << open.size() << " objects in open.\n";
+
+        for(open_type::iterator j = open.begin(); j != open.end(); ++j)
+        {
+            m2.erase(*j);
+        }
+
+        while(!open.empty())
+        {
+            void const * p = open.front();
+            open.pop_front();
+
+            map_type::const_iterator i = m.find(p);
+            BOOST_ASSERT(i != m.end());
+
+            scan_and_mark(i->second.first, i->second.second, m2, open);
+        }
+    }
+
+    // m2 now contains the unreachable objects
+}
+
+std::size_t find_unreachable_objects(bool report)
+{
+    map2_type m2;
+
+#ifdef BOOST_HAS_THREADS
+
+    // This will work without the #ifdef, but some compilers warn
+    // that lock is not referenced
+
+    mutex_type::scoped_lock lock(get_mutex());
+
+#endif
+
+    map_type const & m = get_map();
+
+    find_unreachable_objects_impl(m, m2);
+
+    if(report)
+    {
+        for(map2_type::iterator j = m2.begin(); j != m2.end(); ++j)
+        {
+            map_type::const_iterator i = m.find(j->first);
+            BOOST_ASSERT(i != m.end());
+            std::cout << "Unreachable object at " << i->second.first << ", " << i->second.second << " bytes long.\n";
+        }
+    }
+
+    return m2.size();
+}
+
+typedef std::deque< pdalboost::shared_ptr<X> > free_list_type;
+
+static void scan_and_free(void * area, size_t size, map2_type const & m2, free_list_type & free)
+{
+    unsigned char * p = static_cast<unsigned char *>(area);
+
+    for(size_t n = 0; n + sizeof(shared_ptr_layout) <= size; p += pointer_align, n += pointer_align)
+    {
+        shared_ptr_layout * q = reinterpret_cast<shared_ptr_layout *>(p);
+
+        if(q->pn.id == pdalboost::detail::shared_count_id && q->pn.pi != 0 && m2.count(q->pn.pi) != 0 && q->px != 0)
+        {
+            pdalboost::shared_ptr<X> * ppx = reinterpret_cast< pdalboost::shared_ptr<X> * >(p);
+            free.push_back(*ppx);
+            ppx->reset();
+        }
+    }
+}
+
+void free_unreachable_objects()
+{
+    free_list_type free;
+
+    {
+        map2_type m2;
+
+#ifdef BOOST_HAS_THREADS
+
+        mutex_type::scoped_lock lock(get_mutex());
+
+#endif
+
+        map_type const & m = get_map();
+
+        find_unreachable_objects_impl(m, m2);
+
+        for(map2_type::iterator j = m2.begin(); j != m2.end(); ++j)
+        {
+            map_type::const_iterator i = m.find(j->first);
+            BOOST_ASSERT(i != m.end());
+            scan_and_free(i->second.first, i->second.second, m2, free);
+        }
+    }
+
+    std::cout << "... about to free " << free.size() << " objects.\n";
+}
+
+// debug hooks
+
+namespace pdalboost
+{
+
+void sp_scalar_constructor_hook(void *)
+{
+}
+
+void sp_scalar_constructor_hook(void * px, std::size_t size, void * pn)
+{
+#ifdef BOOST_HAS_THREADS
+
+    mutex_type::scoped_lock lock(get_mutex());
+
+#endif
+
+    get_map()[pn] = std::make_pair(px, size);
+}
+
+void sp_scalar_destructor_hook(void *)
+{
+}
+
+void sp_scalar_destructor_hook(void *, std::size_t, void * pn)
+{
+#ifdef BOOST_HAS_THREADS
+
+    mutex_type::scoped_lock lock(get_mutex());
+
+#endif
+
+    get_map().erase(pn);
+}
+
+void sp_array_constructor_hook(void *)
+{
+}
+
+void sp_array_destructor_hook(void *)
+{
+}
+
+} // namespace pdalboost
+
+#endif // defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
diff --git a/vendor/pdalboost/libs/smart_ptr/src/sp_debug_hooks.cpp b/vendor/pdalboost/libs/smart_ptr/src/sp_debug_hooks.cpp
new file mode 100644
index 0000000..4625462
--- /dev/null
+++ b/vendor/pdalboost/libs/smart_ptr/src/sp_debug_hooks.cpp
@@ -0,0 +1,243 @@
+//
+//  sp_debug_hooks.cpp
+//
+//  Copyright (c) 2002, 2003 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
+
+#include <boost/assert.hpp>
+#include <new>
+#include <cstdlib>
+
+int const m = 2; // m * sizeof(int) must be aligned appropriately
+
+// magic values to mark heap blocks with
+
+int const allocated_scalar  = 0x1234560C;
+int const allocated_array   = 0x1234560A;
+int const adopted_scalar    = 0x0567890C;
+int const adopted_array     = 0x0567890A;
+int const deleted           = 0x498769DE;
+
+using namespace std; // for compilers where things aren't in std
+
+// operator new
+
+static new_handler get_new_handler()
+{
+    new_handler p = set_new_handler(0);
+    set_new_handler(p);
+    return p;
+}
+
+static void * allocate(size_t n, int mark)
+{
+    int * pm;
+
+    for(;;)
+    {
+        pm = static_cast<int*>(malloc(n + m * sizeof(int)));
+
+        if(pm != 0) break;
+
+        if(new_handler pnh = get_new_handler())
+        {
+            pnh();
+        }
+        else
+        {
+            return 0;
+        }
+    }
+
+    *pm = mark;
+
+    return pm + m;
+}
+
+void * operator new(size_t n) throw(bad_alloc)
+{
+    void * p = allocate(n, allocated_scalar);
+
+#if !defined(BOOST_NO_EXCEPTIONS)
+
+    if(p == 0) throw bad_alloc();
+
+#endif
+
+    return p;
+}
+
+#if !defined(__BORLANDC__) || (__BORLANDC__ > 0x551)
+
+void * operator new(size_t n, nothrow_t const &) throw()
+{
+    return allocate(n, allocated_scalar);
+}
+
+#endif
+
+void * operator new[](size_t n) throw(bad_alloc)
+{
+    void * p = allocate(n, allocated_array);
+
+#if !defined(BOOST_NO_EXCEPTIONS)
+
+    if(p == 0) throw bad_alloc();
+
+#endif
+
+    return p;
+}
+
+#if !defined(__BORLANDC__) || (__BORLANDC__ > 0x551)
+
+void * operator new[](size_t n, nothrow_t const &) throw()
+{
+    return allocate(n, allocated_array);
+}
+
+#endif
+
+// debug hooks
+
+namespace pdalboost
+{
+
+void sp_scalar_constructor_hook(void * p)
+{
+    if(p == 0) return;
+
+    int * pm = static_cast<int*>(p);
+    pm -= m;
+
+    BOOST_ASSERT(*pm != adopted_scalar);    // second smart pointer to the same address
+    BOOST_ASSERT(*pm != allocated_array);   // allocated with new[]
+    BOOST_ASSERT(*pm == allocated_scalar);  // not allocated with new
+
+    *pm = adopted_scalar;
+}
+
+void sp_scalar_constructor_hook(void * px, std::size_t, void *)
+{
+    sp_scalar_constructor_hook(px);
+}
+
+void sp_scalar_destructor_hook(void * p)
+{
+    if(p == 0) return;
+
+    int * pm = static_cast<int*>(p);
+    pm -= m;
+
+    BOOST_ASSERT(*pm == adopted_scalar);    // attempt to destroy nonmanaged block
+
+    *pm = allocated_scalar;
+}
+
+void sp_scalar_destructor_hook(void * px, std::size_t, void *)
+{
+    sp_scalar_destructor_hook(px);
+}
+
+// It is not possible to handle the array hooks in a portable manner.
+// The implementation typically reserves a bit of storage for the number
+// of objects in the array, and the argument of the array hook isn't
+// equal to the return value of operator new[].
+
+void sp_array_constructor_hook(void * /* p */)
+{
+/*
+    if(p == 0) return;
+
+    // adjust p depending on the implementation
+
+    int * pm = static_cast<int*>(p);
+    pm -= m;
+
+    BOOST_ASSERT(*pm != adopted_array);     // second smart array pointer to the same address
+    BOOST_ASSERT(*pm != allocated_scalar);  // allocated with new
+    BOOST_ASSERT(*pm == allocated_array);   // not allocated with new[]
+
+    *pm = adopted_array;
+*/
+}
+
+void sp_array_destructor_hook(void * /* p */)
+{
+/*
+    if(p == 0) return;
+
+    // adjust p depending on the implementation
+
+    int * pm = static_cast<int*>(p);
+    pm -= m;
+
+    BOOST_ASSERT(*pm == adopted_array); // attempt to destroy nonmanaged block
+
+    *pm = allocated_array;
+*/
+}
+
+} // namespace pdalboost
+
+// operator delete
+
+void operator delete(void * p) throw()
+{
+    if(p == 0) return;
+
+    int * pm = static_cast<int*>(p);
+    pm -= m;
+
+    BOOST_ASSERT(*pm != deleted);           // double delete
+    BOOST_ASSERT(*pm != adopted_scalar);    // delete p.get();
+    BOOST_ASSERT(*pm != allocated_array);   // allocated with new[]
+    BOOST_ASSERT(*pm == allocated_scalar);  // not allocated with new
+
+    *pm = deleted;
+
+    free(pm);
+}
+
+#if !defined(__BORLANDC__) || (__BORLANDC__ > 0x551)
+
+void operator delete(void * p, nothrow_t const &) throw()
+{
+    ::operator delete(p);
+}
+
+#endif
+
+void operator delete[](void * p) throw()
+{
+    if(p == 0) return;
+
+    int * pm = static_cast<int*>(p);
+    pm -= m;
+
+    BOOST_ASSERT(*pm != deleted);           // double delete
+    BOOST_ASSERT(*pm != adopted_scalar);    // delete p.get();
+    BOOST_ASSERT(*pm != allocated_scalar);  // allocated with new
+    BOOST_ASSERT(*pm == allocated_array);   // not allocated with new[]
+
+    *pm = deleted;
+
+    free(pm);
+}
+
+#if !defined(__BORLANDC__) || (__BORLANDC__ > 0x551)
+
+void operator delete[](void * p, nothrow_t const &) throw()
+{
+    ::operator delete[](p);
+}
+
+#endif
+
+#endif // defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
diff --git a/vendor/pdalboost/libs/system/doc/index.html b/vendor/pdalboost/libs/system/doc/index.html
new file mode 100644
index 0000000..e89df5a
--- /dev/null
+++ b/vendor/pdalboost/libs/system/doc/index.html
@@ -0,0 +1,163 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Boost System Library</title>
+<link rel="stylesheet" type="text/css" href="../../../doc/src/minimal.css">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td width="277">
+<a href="../../../index.html">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86" border="0"></a></td>
+    <td width="337" align="middle">
+    <font size="7">System Library</font>
+    </td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="../../../index.htm">Boost Home</a>    <a href="index.html">
+    Library Home</a>   Tutorial   <a href="reference.html">
+    Reference</a></td>
+  </tr>
+</table>
+
+<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" align="right">
+  <tr>
+    <td width="100%" bgcolor="#D7EEFF" align="center">
+      <i><b>Contents</b></i></td>
+  </tr>
+  <tr>
+    <td width="100%" bgcolor="#E8F5FF">
+      <a href="#Introduction">Introduction</a><br>
+      <a href="#Release_History">Release History</a><br>
+      <a href="#Design_Rationale">Design Rationale</a><br>
+      <a href="#History">History</a><br>
+      <a href="#Acknowledgements">Acknowledgements</a>
+    </td>
+  </tr>
+  <tr>
+    <td width="100%" bgcolor="#D7EEFF" align="center">
+      <b><i>Headers</i></b></td>
+  </tr>
+  <tr>
+    <td width="100%" bgcolor="#E8F5FF">
+      <a href="reference.html#Header-error_code"><boost/system/error_code.hpp></a><br>
+      <a href="reference.html#Header-system_error">
+      <boost/system/system_error.hpp></a><br>
+      <a href="../../../boost/system/cygwin_error.hpp">
+      <boost/system/cygwin_error.hpp></a><br>
+      <a href="../../../boost/system/linux_error.hpp">
+      <boost/system/linux_error.hpp></a><br>
+      <a href="../../../boost/system/windows_error.hpp">
+      <boost/system/windows_error.hpp></a></td>
+  </tr>
+</table>
+
+<h2><a name="Introduction">Introduction</a></h2>
+
+<p>Error conditions originating from the operating system or other low-level 
+application program interfaces (API's) are typically reported via an integer 
+representing an error code. When these low-level API calls are wrapped in 
+portable code, such as in a portable library, some users want to deal with the 
+error codes in portable ways. Other users need to get at the system specific 
+error codes, so they can deal with system specific needs. The Boost System 
+library provides simple, light-weight <a href="reference.html#Class-error_code">
+error_code</a> objects that encapsulate system-specific error code values, yet 
+also provide access to more abstract and portable error conditions via
+<a href="reference.html#Class-error_condition">error_condition</a> objects. 
+Because error_code objects can represent errors from sources other than the 
+operating system, including user-defined sources, each error_code and 
+error_condition has an associated <a href="reference.html#Class-error_category">
+error_category</a>.</p>
+
+<p>An exception class,  <a href="reference.html#Class-system_error">
+system_error</a>, is provided. Derived from std::runtime_error, it captures the 
+underlying error_code for the problem causing the exception so that this 
+important information is not lost.</p>
+<p>While exceptions are the preferred C++ default error code reporting 
+mechanism, users of libraries dependent on low-level API's often need overloads 
+reporting error conditions via error code arguments and/or return values rather 
+than via throwing exceptions. Otherwise, when errors are not exceptional 
+occurrences and must be dealt with as they arise, programs become littered with 
+try/catch blocks, unreadable, and very inefficient. The Boost System library 
+supports both error reporting by exception and by error code.</p>
+<p>In addition to portable errors codes and conditions supported by the <code>
+error_code.hpp</code> header, system-specific headers support the Cygwin, Linux, 
+and Windows platforms. These headers are effectively no-ops if included for 
+platforms other than their intended target.</p>
+<table border="1" cellpadding="10" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td>The Boost System Library is part of the C++11 Standard Library. 
+    A number of changes, particularly to names, were made by the C++ committee 
+    during standardization. The Boost implementation is tracking those changes. 
+    See <a href="reference.html#Deprecated-names">Deprecated names</a> for 
+    synonyms provided to prevent breakage of existing user code. See
+    <a href="reference.html#Breaking-changes">Breaking changes</a> for changes 
+    that unavoidably break existing user code. All breaking changes are noisy 
+    and will cause compile-time errors.</td>
+  </tr>
+</table>
+<h2><a name="Release_History">Release History</a></h2>
+<p><code>system-2014-06-02</code>: First modular Boost release. Minor 
+maintenance changes.</p>
+<h2><a name="Design_Rationale">Design Rationale</a></h2>
+<p>Class <code>error_code</code>  and <code>error_condition</code> are designed as a value types so 
+they can be copied 
+without slicing and do not requiring heap allocation, but still have polymorphic 
+behavior based on the error category. This is achieved by abstract base class
+<code>error_category</code> supplying the polymorphic behavior, and <code>
+error_code</code> and <code>error_condition</code> containing a pointer to an object of a type derived from <code>
+error_category</code>.</p>
+<p>Many of the detailed design decisions were driven by the requirements that 
+users to be able to add additional error categories, and that it be no more 
+difficult to write portable code than system-specific code.</p>
+<p>The <code>operator<<</code> overload for <code>error_code</code> eliminates a 
+misleading conversion to bool in code like <code>cout << ec</code>, where <code>
+ec</code> is of type <code>error_code</code>. It is also useful in its own 
+right.</p>
+<h2><a name="History">History</a></h2>
+<p><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1975.html">
+N1975</a>, Filesystem Library Proposal for TR2, accepted for Library Technical 
+Report 2 (TR2) at the Berlin meeting, included additional components to 
+supplement the Standard Library's Diagnostics clause. Since then, these error 
+reporting components have received wider public scrutiny and enhancements have 
+been made to the design. The enhanced version has been used by N2054, Networking 
+Library Proposal for TR2, demonstrating that these error reporting components 
+are useful beyond the original Filesystem Library.</p>
+<p>The original proposal viewed error categories as a binary choice between
+<code>errno</code> (i.e. POSIX-style) and the native operating system's error 
+codes. The proposed components now allow as many additional error categories as 
+are needed by either implementations or by users. The need to support additional 
+error categories, for example, occurs in some networking library implementations 
+because they are built on top of the POSIX <code>getaddrinfo</code> API that 
+uses error codes not based on <code>errno</code>.</p>
+<h2><a name="Acknowledgements">Acknowledgements</a></h2>
+<p>Christopher Kohlhoff and Peter Dimov made important contributions to the 
+design. Comments and suggestions were also received from Pavel Vozenilek, 
+Gennaro Prota, Dave Abrahams, Jeff Garland, Iain Hanson, Oliver Kowalke, and 
+Oleg Abrosimov. Christopher Kohlhoff suggested several improvements to the N2066 
+paper. Johan Nilsson's comments led to several of the refinements in N2066 .</p>
+<hr>
+
+<p>Revised 
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%B %d, %Y" startspan -->June 02, 2014<!--webbot bot="Timestamp" endspan i-checksum="13984" --> </font>
+</p>
+
+<p>� Copyright Beman Dawes, 1999</p>
+
+<p>Distributed under the Boost Software License, Version 1.0.
+(See file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a>
+or  <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>) </p>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/system/doc/reference.html b/vendor/pdalboost/libs/system/doc/reference.html
new file mode 100644
index 0000000..5671435
--- /dev/null
+++ b/vendor/pdalboost/libs/system/doc/reference.html
@@ -0,0 +1,831 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>System Library Reference</title>
+<link rel="stylesheet" type="text/css" href="../../../doc/src/minimal.css">
+</head>
+
+<body>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="637">
+  <tr>
+    <td width="277">
+<a href="../../../index.htm">
+<img src="../../../boost.png" alt="boost.png (6897 bytes)" align="middle" width="277" height="86" border="0"></a></td>
+    <td width="337" align="middle">
+    <font size="7">System Library</font>
+    </td>
+  </tr>
+</table>
+
+<table border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" bgcolor="#D7EEFF" width="100%">
+  <tr>
+    <td><a href="../../../index.htm">Boost Home</a>    <a href="index.html">
+    Library Home</a>   Tutorial   <a href="reference.html">
+    Reference</a></td>
+  </tr>
+</table>
+
+<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" align="right">
+  <tr>
+    <td width="100%" bgcolor="#D7EEFF" align="center">
+      <i><b>Contents</b></i></td>
+  </tr>
+  <tr>
+    <td width="100%" bgcolor="#E8F5FF">
+      <a href="#Introduction">Introduction</a><br>
+      <a href="#C++11">C++11</a><br>
+      <a href="#Macros">Macros</a><br>
+      <a href="#Deprecated-names">Deprecated names</a><br>
+      <a href="#Breaking-changes">Breaking changes</a><br>
+      <a href="#Header-error_code">Header <boost/system/error_code.hpp></a><br>
+      <a href="#Class-error_category">Class <code>error_category</code></a><br>
+         <a href="#Class-error_category-synopsis">Class <code>error_category</code> synopsis</a><br>
+         <a href="#Class-error_category-virtual-members">Class <code>error_category</code> virtual members</a><br>
+         <a href="#Class-error_category-non-virtual-members">Class <code>error_category</code> non-virtual members</a><br>
+   <a href="#Class-error_category-non-member-functions">Class <code>error_category</code> 
+      non-member functions</a><br>
+         <a href="#Class-error_category-predefined-objects">Class <code>error_category</code> predefined objects</a><br>
+      <a href="#Class-error_code">Class <code>error_code</code></a><br>
+         <a href="#Class-error_code-synopsis">Class <code>error_code</code> synopsis</a><br>
+         <a href="#Class-error_code-constructors">Class <code>error_code</code> constructors</a><br>
+         <a href="#Class-error_code-modifiers">Class <code>error_code</code> modifiers</a><br>
+         <a href="#Class-error_code-observers">Class <code>error_code</code> observers</a><br>
+      <a href="#Class-error_condition">Class <code>error_condition</code></a><br>
+         <a href="#Class-error_condition-synopsis">Class <code>error_condition</code> synopsis</a><br>
+         <a href="#Class-error_condition-constructors">Class <code>error_condition</code> constructors</a><br>
+         <a href="#Class-error_condition-modifiers">Class <code>error_condition</code> modifiers</a><br>
+         <a href="#Class-error_condition-observers">Class <code>error_condition</code> observers</a><br>
+      <a href="#throws-object"><code>throws</code> object</a><br>
+      <a href="#Semantics-of-throws">Semantics of <code>throws</code> object</a><br>
+      <a href="#Non-member-functions">Non-member functions</a><br>
+      <a href="#Header-system_error">Header <boost/system/system_error.hpp></a><br>
+         <a href="#Class-system_error">Class <code>system_error</code></a><br>
+    </td>
+  </tr>
+</table>
+
+<h2><a name="Introduction">Introduction</a></h2>
+
+<p>This reference documentation describes components that programs may use to report error conditions originating from the operating 
+system or other low-level application program interfaces.</p>
+<p>Boost.System library components never change the value of <code>
+errno</code>.</p>
+<h2><a name="C++11">C++11</a></h2>
+<p>The library is documented to use several C++11 features, including <code>
+noexcept</code> and explicit conversion operators. The actual implementation 
+uses C++11 features only when they are available, and otherwise falls back on 
+C++03 features.</p>
+<h2><a name="Macros">Macros</a></h2>
+<p>Users may defined the following macros if desired. Sensible defaults are 
+provided, so users may ignore these macros if they prefer.</p>
+<table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" height="368">
+  <tr>
+    <td height="16"><b><i>Macro Name</i></b></td>
+    <td height="16"><b><i>Default</i></b></td>
+    <td height="16"><b><i>Effect if defined</i></b></td>
+  </tr>
+  <tr>
+    <td valign="top" height="64"><code>BOOST_ERROR_CODE_HEADER_ONLY</code></td>
+    <td valign="top" height="64">Not defined.</td>
+    <td valign="top" height="64">The implementation is header-only, and the 
+    Boost.System library is not built. Overrides other link and library macros.</td>
+  </tr>
+  <tr>
+    <td valign="top" height="64"><code>BOOST_SYSTEM_DYN_LINK</code></td>
+    <td valign="top" height="64">Defined if <code>BOOST_ALL_DYN_LINK</code> is defined, 
+    otherwise not defined.</td>
+    <td valign="top" height="64">Boost.System library is dynamically linked. If not defined, 
+    static linking is assumed.</td>
+  </tr>
+  <tr>
+    <td valign="top" height="47"><code>BOOST_SYSTEM_NO_LIB</code></td>
+    <td valign="top" height="47">Defined if <code>BOOST_ALL_NO_LIB</code> is defined, 
+    otherwise not defined.</td>
+    <td valign="top" height="47">Boost.System library does not use the Boost auto-link 
+    facility.</td>
+  </tr>
+  <tr>
+    <td valign="top" height="32"><code>BOOST_SYSTEM_NO_DEPRECATED</code></td>
+    <td valign="top" height="32">Not defined.</td>
+    <td valign="top" height="32">Deprecated features are excluded.</td>
+  </tr>
+  </table>
+<h2><a name="Deprecated-names">Deprecated names</a></h2>
+<p>In the process of adding Boost.System to C++0x standard library, the C++ 
+committee changed some  
+names. To ease transition, Boost.System deprecates the old 
+names, but continues to provide them unless macro <code>BOOST_SYSTEM_NO_DEPRECATED</code> 
+is defined.</p>
+<table border="1" cellpadding="5" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td><b><i>Old usage, now deprecated</i></b></td>
+    <td><b><i>Replacement</i></b></td>
+  </tr>
+  <tr>
+    <td><code>get_generic_category()</code></td>
+    <td><code>generic_category()</code></td>
+  </tr>
+  <tr>
+    <td><code>get_system_category()</code></td>
+    <td><code>system_category()</code></td>
+  </tr>
+  <tr>
+    <td><code>namespace posix</code></td>
+    <td><code>namespace errc</code></td>
+  </tr>
+  <tr>
+    <td><code>namespace posix_error</code></td>
+    <td><code>namespace errc</code></td>
+  </tr>
+  <tr>
+    <td><code>enum posix_errno</code></td>
+    <td><code>enum errc_t</code></td>
+  </tr>
+  <tr>
+    <td><code>get_posix_category()</code></td>
+    <td><code>generic_category()</code></td>
+  </tr>
+  <tr>
+    <td><code>posix_category</code></td>
+    <td><code>generic_category()</code></td>
+  </tr>
+  <tr>
+    <td><code>errno_ecat</code></td>
+    <td><code>generic_category()</code></td>
+  </tr>
+  <tr>
+    <td><code>native_ecat</code></td>
+    <td><code>system_category()</code></td>
+  </tr>
+</table>
+<h2><a name="Breaking-changes">Breaking changes</a></h2>
+<p>Two static consts are replaced by functions. These are breaking changes best 
+fixed by globally adding () to these names to turn them into function calls.</p>
+<table border="1" cellpadding="5" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111">
+  <tr>
+    <td><b><i>Old usage, now broken</i></b></td>
+    <td><b><i>Replacement</i></b></td>
+  </tr>
+  <tr>
+    <td><code>generic_category</code></td>
+    <td><code>generic_category()</code></td>
+  </tr>
+  <tr>
+    <td><code>system_category</code></td>
+    <td><code>system_category()</code></td>
+  </tr>
+  </table>
+<p>User-defined BOOST_POSIX_API and BOOST_WINDOWS_API macros are no longer supported.</p>
+<h2><a name="Header-error_code">Header <boost/system/error_code.hpp></a></h2>
+<h3><boost/system/error_code.hpp> synopsis</h3>
+<blockquote>
+<pre>namespace boost
+{
+  namespace system
+  {
+    class <a href="#Class-error_category">error_category</a>;
+    const error_category &  <a href="#system_category">system_category</a>() noexcept;
+    const error_category &  <a href="#generic_category">generic_category</a>() noexcept;
+
+    class <a href="#Class-error_code">error_code</a>;
+    class <a href="#Class-error_condition">error_condition</a>;
+
+    //  "Concept" helpers
+    template< class T="" >
+      struct is_error_code_enum { static const bool value = false; };
+
+    template< class T="" >
+      struct is_error_condition_enum { static const bool value = false; };
+
+    //  generic error_conditions
+    namespace errc
+    {
+      enum errc_t
+      {
+        success = 0,
+        address_family_not_supported,   //EAFNOSUPPORT
+        address_in_use,                 //EADDRINUSE
+        address_not_available,          //EADDRNOTAVAIL
+        already_connected,              //EISCONN
+        argument_list_too_long,         //E2BIG
+        argument_out_of_domain,         //EDOM
+        bad_address,                    //EFAULT
+        bad_file_descriptor,            //EBADF
+        bad_message,                    //EBADMSG
+        broken_pipe,                    //EPIPE
+        connection_aborted,             //ECONNABORTED
+        connection_already_in_progress, //EALREADY
+        connection_refused,             //ECONNREFUSED
+        connection_reset,               //ECONNRESET
+        cross_device_link,              //EXDEV
+        destination_address_required,   //EDESTADDRREQ
+        device_or_resource_busy,        //EBUSY
+        directory_not_empty,            //ENOTEMPTY
+        executable_format_error,        //ENOEXEC
+        file_exists,                    //EEXIST
+        file_too_large,                 //EFBIG
+        filename_too_long,              //ENAMETOOLONG
+        function_not_supported,         //ENOSYS
+        host_unreachable,               //EHOSTUNREACH
+        identifier_removed,             //EIDRM
+        illegal_byte_sequence,          //EILSEQ
+        inappropriate_io_control_operation,//ENOTTY
+        interrupted,                    //EINTR
+        invalid_argument,               //EINVAL
+        invalid_seek,                   //ESPIPE
+        io_error,                       //EIO
+        is_a_directory,                 //EISDIR
+        message_size,                   //EMSGSIZE
+        network_down,                   //ENETDOWN
+        network_reset,                  //ENETRESET
+        network_unreachable,            //ENETUNREACH
+        no_buffer_space,                //ENOBUFS
+        no_child_process,               //ECHILD
+        no_link,                        //ENOLINK
+        no_lock_available,              //ENOLCK
+        no_message_available,           //ENODATA
+        no_message,                     //ENOMSG
+        no_protocol_option,             //ENOPROTOOPT
+        no_space_on_device,             //ENOSPC
+        no_stream_resources,            //ENOSR
+        no_such_device_or_address,      //ENXIO
+        no_such_device,                 //ENODEV
+        no_such_file_or_directory,      //ENOENT
+        no_such_process,                //ESRCH
+        not_a_directory,                //ENOTDIR
+        not_a_socket,                   //ENOTSOCK
+        not_a_stream,                   //ENOSTR
+        not_connected,                  //ENOTCONN
+        not_enough_memory,              //ENOMEM
+        not_supported,                  //ENOTSUP
+        operation_canceled,             //ECANCELED
+        operation_in_progress,          //EINPROGRESS
+        operation_not_permitted,        //EPERM
+        operation_not_supported,        //EOPNOTSUPP
+        operation_would_block,          //EWOULDBLOCK
+        owner_dead,                     //EOWNERDEAD
+        permission_denied,              //EACCES
+        protocol_error,                 //EPROTO
+        protocol_not_supported,         //EPROTONOSUPPORT
+        read_only_file_system,          //EROFS
+        resource_deadlock_would_occur,  //EDEADLK
+        resource_unavailable_try_again, //EAGAIN
+        result_out_of_range,            //ERANGE
+        state_not_recoverable,          //ENOTRECOVERABLE
+        stream_timeout,                 //ETIME
+        text_file_busy,                 //ETXTBSY
+        timed_out,                      //ETIMEDOUT
+        too_many_files_open_in_system,  //ENFILE
+        too_many_files_open,            //EMFILE
+        too_many_links,                 //EMLINK
+        too_many_synbolic_link_levels,  //ELOOP
+        value_too_large,                //EOVERFLOW
+        wrong_protocol_type             //EPROTOTYPE
+      };
+
+    } // namespace errc
+
+    template<> struct is_error_condition_enum<posix::posix_errno><errc::errc_t>
+      { static const bool value = true; };
+
+    //  <a href="#Non-member-functions">non-member functions</a>
+
+    bool operator==( const error_code & lhs, const error_code & rhs ) noexcept;
+    bool operator==( const error_code & code, const error_condition & condition ) noexcept;
+    bool operator==( const error_condition & condition, const error_code & code ) noexcept;
+    bool operator==( const error_condition & lhs, const error_condition & rhs ) noexcept;
+
+    bool operator!=( const error_code & lhs, const error_code & rhs ) noexcept;
+    bool operator!=( const error_code & code, const error_condition & condition ) noexcept;
+    bool operator!=( const error_condition & condition, const error_code & code ) noexcept;
+    bool operator!=( const error_condition & lhs, const error_condition & rhs ) noexcept;
+
+    bool operator<( const error_code & lhs, const error_code & rhs ) noexcept;
+    bool operator<( const error_condition & lhs, const error_condition & rhs ) noexcept;
+
+    error_code make_error_code( errc::errc_t e ) noexcept;
+    error_condition make_error_condition( errc::errc_t e ) noexcept;
+
+    template <class charT, class traits>
+      std::basic_ostream<charT,traits>&
+        operator<<( basic_ostream<charT,traits>& os, const error_code & ec );
+
+    size_t hash_value( const error_code & ec );
+  }
+}</pre>
+</blockquote>
+<p>The value of each<code> errc_t</code> constant shall be the same as the 
+value of the <code><cerrno></code> macro shown in the above synopsis.</p>
+<p>Users may specialize <code>is_error_code_enum</code> and <code>
+is_error_condition_enum</code> templates to indicate that a type is eligible for 
+class <code>error_code</code> and <code>error_condition</code> automatic 
+conversions respectively.</p>
+
+<pre>const error_category & <a name="system_category">system_category</a>();</pre>
+<blockquote>
+  <p><i>Returns:</i> A reference to a <code>error_category</code> object 
+  identifying errors originating from the operating system.</p>
+</blockquote>
+<pre>const error_category & <a name="generic_category">generic_category</a>();</pre>
+<blockquote>
+  <p><i>Returns:</i> A reference to a <code>error_category</code> object 
+  identifying portable error conditions.</p>
+</blockquote>
+
+<h2><a name="Class-error_category">Class <code>error_category</code></a></h2>
+<p>The class <code>error_category</code> defines the base class for types used 
+to identify the source and encoding of a particular category of error code.</p>
+<p><i>[Note:</i> Classes may be derived from <code>error_category</code> 
+to support additional categories of errors. <i>--end note]</i></p>
+<p>The class <code>error_category</code> serves as a base class for types used 
+to identify the source and encoding of a particular category of error code. 
+Classes may be derived from <code>error_category</code> to support categories of 
+errors in addition to those defined in the Boost System library. Such classes 
+shall behave as specified in this subclause. [<i> Note:</i> <code>error_category</code> 
+objects are passed by reference, and two such objects are equal if they have the 
+same address. This means that applications using custom <code>error_category</code> 
+types should create a single object of each such type. <i>�end note</i> ]</p>
+<h3><a name="Class-error_category-synopsis">Class <code>error_category</code> synopsis</a></h3>
+<blockquote>
+<pre>namespace boost
+{
+  namespace system
+  {
+    class error_category : public noncopyable
+    {
+    public:
+      virtual ~error_category();
+
+      virtual const char *     name() const noexcept = 0;
+      virtual string           message( int ev ) const = 0;
+      virtual error_condition  default_error_condition( int ev ) const noexcept;
+      virtual bool             equivalent( int code, const error_condition & condition )
+                                 const noexcept;
+      virtual bool             equivalent( const error_code & code, int condition ) const noexcept;
+
+      bool operator==( const error_category & rhs ) const noexcept;
+      bool operator!=( const error_category & rhs ) const noexcept;
+      bool operator< ( const error_category & rhs ) const noexcept;
+    };
+  }
+}</pre>
+</blockquote>
+<h3><a name="Class-error_category-virtual-members">Class <code>error_category</code> virtual members</a></h3>
+<p>Classes derived from <code>error_category</code> shall behave as specified in 
+this subclause.</p>
+<pre>virtual const char * name() const noexcept =0;</pre>
+<blockquote>
+  <p><i>Returns: </i>a string naming the error category.</p>
+</blockquote>
+<pre>virtual string message( int ev ) const noexcept =0;</pre>
+<blockquote>
+  <p><i>Returns:</i> A string that describes the error denoted by
+  <code>ev</code>.</p>
+</blockquote>
+<pre>virtual error_condition default_error_condition( int ev ) const noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i>  <code>error_condition( ev, *this )</code>.</p>
+  <blockquote>
+    <p dir="ltr"> [<i>--Note:</i> Derived classes will typically convert <code>ev</code> 
+    to some portable <code>error_category</code>, such as <code>generic_category()</code>, 
+    and return it as an <code>error_condition</code> for that category. <i>--end 
+    note</i>]</p>
+  </blockquote>
+  </blockquote>
+<pre>virtual bool equivalent( int code, const error_condition & condition ) const noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>default_error_condition( code ) == condition</code>.</p>
+  </blockquote>
+<pre>virtual bool equivalent( const error_code & code, int condition ) const noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>*this == code.category() && code.value() == condition</code>.</p>
+  </blockquote>
+<h3><a name="Class-error_category-non-virtual-members">Class <code>error_category</code> non-virtual members</a></h3>
+<pre>bool operator==( const error_category & rhs ) const noexcept;</pre>
+<blockquote>
+<p><i>Returns:</i> <code>this == &rhs</code>.</p>
+</blockquote>
+<pre>bool operator!=( const error_category & rhs ) const noexcept;</pre>
+<blockquote>
+<p><i>Returns:</i> <code>this != &rhs</code>.</p>
+</blockquote>
+
+<pre>bool operator<( const error_category & rhs ) const noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>std::less<const error_category*>()( this, &rhs  
+  noexcept)</code>.</p>
+  <blockquote>
+    <p><i>[Note:</i> <code>std::less</code> provides a total ordering for 
+    pointers. <i>--end note]</i></p>
+  </blockquote>
+</blockquote>
+<h2><a name="Class-error_code">Class <code>
+error_code</code></a></h2>
+<p>The class <code>error_code</code> describes an object used to hold error code 
+values, such as those originating from the operating<br>
+system or other low-level application program interfaces. <i>[ Note: </i>Class
+<code>error_code</code> is an adjunct to error reporting by<br>
+exception. <i>�end note ]</i></p>
+<h3><a name="Class-error_code-synopsis">Class <code>
+error_code</code> synopsis</a></h3>
+<blockquote>
+<pre>namespace boost
+{
+  namespace system
+  {
+    class error_code {
+    public:
+
+      // constructors:
+      error_code() noexcept;
+      error_code( val, const error_category & cat ) noexcept;
+      template <class <code>ErrorCodeEnum</code>>
+        error_code(<code> ErrorCodeEnum</code> e ) noexcept;
+
+      // modifiers:
+      void assign( int val, const error_category & cat ) noexcept;
+      template<typename <code>ErrorCodeEnum</code>>
+        error_code & operator=( <code>ErrorCodeEnum</code> val ) noexcept;
+      void clear() noexcept;
+
+      // observers:
+      int                    value() const noexcept;
+      cont error_category &  category() const noexcept;
+      error_condition        default_error_condition() const noexcept;
+      string                 message() const;
+      operator unspecified-bool-type() const;
+
+    private:
+      int val_;                     // <i>exposition only</i>
+      const error_category * cat_;  // <i>exposition only</i>
+    };
+  }
+}</pre>
+</blockquote>
+<h3><a name="Class-error_code-constructors">Class <code>
+error_code</code> constructors</a></h3>
+<pre>error_code() noexcept;</pre>
+<blockquote>
+  <p><i>Effects: </i>Constructs an object of type <code>error_code</code>.</p>
+  <p><i>Postconditions:</i> <code>val_ == 0 && cat_ == &system_category()</code>.</p>
+</blockquote>
+<pre>error_code( int val, const error_category & cat ) noexcept;</pre>
+<blockquote>
+  <p><i>Effects: </i>Constructs an object of type <code>error_code</code>.</p>
+  <p><i>Postconditions:</i> <code>val_ == val && cat_ == &cat</code>.</p>
+</blockquote>
+<pre>template <class <code>ErrorCodeEnum</code>>
+  error_code(<code> ErrorCodeEnum</code> val ) noexcept;</pre>
+<blockquote>
+  <p><i>Effects: </i>Constructs an object of type <code>error_code</code>.</p>
+  <p><i>Postconditions:</i> <code>*this == make_error_code( val )</code>.</p>
+  <p><i>Remarks:</i> This constructor shall not participate in overload 
+  resolution unless <code>is_error_code_enum<ErrorCodeEnum>::value</code> is
+  <code>true</code>.</p>
+</blockquote>
+<h3><a name="Class-error_code-modifiers">Class <code>
+error_code</code> modifiers</a></h3>
+<pre>void assign( int val, const error_category & cat ) noexcept;</pre>
+<blockquote>
+  <p><i>Postconditions:</i> <code>val_ == val && cat_ == &cat</code>.</p>
+</blockquote>
+<pre>template<typename <code>ErrorCodeEnum</code>>
+  error_code & operator=( <code>ErrorCodeEnum</code> val ) noexcept;</pre>
+<blockquote>
+  <p><i>Postconditions:</i> <code>*this == make_error_code( val )</code>.</p>
+  <p><i>Remarks:</i> This operator shall not participate in overload resolution 
+  unless <code>is_error_code_enum<ErrorCodeEnum>::value</code> is <code>true</code>.</p>
+</blockquote>
+<pre><code>void clear() noexcept;</code></pre>
+<blockquote>
+  <p><i>postcondition:</i> <code>value() == 0 && category() == 
+  system_category()</code></p>
+</blockquote>
+  <h3><a name="Class-error_code-observers">Class <code>
+error_code</code> observers</a></h3>
+  <pre><code>int value() const noexcept;</code></pre>
+<blockquote>
+<p><i>Returns:</i> <code>val_</code>.</p>
+  </blockquote>
+<pre><code>const error_category & category() const noexcept;</code></pre>
+<blockquote>
+<p><i>Returns:</i> <code>*cat_</code>.</p>
+  </blockquote>
+  <pre>error_condition default_error_condition() const noexcept;</pre>
+<blockquote>
+<p><i>Returns:</i>  <code>category().default_error_condition( value())</code>.</p>
+</blockquote>
+  <pre><code>string message() const;</code></pre>
+<blockquote>
+<p><i>Returns:</i>  <code>category().message( value())</code>.</p>
+  <p><i>Throws:</i> Nothing.</p>
+</blockquote>
+<pre>operator unspecified-bool-type() const;</pre>
+<blockquote>
+<p><i>Returns:</i> if <code>value() != 0</code>, returns a value that will evaluate
+<code>true</code> in a boolean context; otherwise, returns a value that will 
+evaluate <code>false</code> in a boolean context. The value type returned shall 
+not be convertible to <code>int</code>.</p>
+<p><i>Throws:</i> nothing.</p>
+<p><i>[Note: </i>This conversion can be used in contexts where a <code>bool</code> 
+is expected ( e.g., an <code>if</code> condition ); however, implicit conversions 
+( e.g., to <code>int</code>) that can occur with <code>bool</code> are not 
+allowed, eliminating some sources of user error. One possible implementation 
+choice for this type is pointer-to-member. <i>--end note ]</i></p>
+</blockquote>
+<h2><a name="Class-error_condition">Class <code>error_condition</code></a></h2>
+<p>The class <code>error_condition</code> describes an object used to hold 
+values identifying error conditions. <i>[ Note: </i><code>error_condition</code> 
+values are portable abstractions, while <code>error_code</code> values are 
+implementation specific. <i>--end note ]</i></p>
+<h3><a name="Class-error_condition-synopsis">Class <code>error_condition</code> synopsis</a></h3>
+<blockquote>
+<pre>namespace boost
+{
+  namespace system
+  {
+    class error_condition
+    {
+    public:
+
+      // constructors:
+      error_condition() noexcept;
+      error_condition( int val, const error_category & cat ) noexcept;
+      template <class ErrorConditionEnum>
+        error_condition( errorConditionEnum val ) noexcept;
+
+      // modifiers:
+      void assign( int val, const error_category & cat ) noexcept;
+      template<typename ErrorConditionEnum>
+        error_condition & operator=( ErrorConditionEnum val ) noexcept;
+      void clear() noexcept;
+
+      // observers:
+      int value() const noexcept;
+      const error_category & category() const noexcept;
+      string message() const;
+      operator unspecified-bool-type () const noexcept;
+
+    private:
+      int val_;                      // <i>exposition only</i>
+      const error_category * cat_;   // <i>exposition only</i>
+    };
+  }
+}</pre>
+</blockquote>
+<h3><a name="Class-error_condition-constructors">Class <code>error_condition</code> 
+constructors</a></h3>
+<pre>error_condition() noexcept; </pre>
+<blockquote>
+  <p><i>Effects:</i> Constructs an object of type <code>error_condition</code>.</p>
+  <p><i>Postconditions:</i> <code>val_ == 0 and cat_ == &generic_category()</code>.</p>
+</blockquote>
+<pre>error_condition( int val, const error_category & cat ) noexcept;</pre>
+<blockquote>
+  <p><i>Effects: </i>Constructs an object of type error_condition.</p>
+  <p><i>Postconditions:</i> <code>val_ == val and cat_ == &cat</code>.</p>
+</blockquote>
+<pre>template <class ErrorConditionEnum>
+  error_condition( ErrorConditionEnum e ) noexcept;</pre>
+<blockquote>
+  <p><i>Effects:</i> Constructs an object of type <code>error_condition</code>.</p>
+  <p><i>Postconditions:</i> <code>*this == make_error_condition(e)</code>.</p>
+  <p><i>Remarks:</i> This constructor shall not participate in overload 
+  resolution unless <code>is_error_condition_enum<ErrorConditionEnum>::value</code> 
+  is <code>true</code>.</p>
+</blockquote>
+<h3><a name="Class-error_condition-modifiers">Class <code>error_condition</code> 
+modifiers</a></h3>
+<pre>void assign( int val, const error_category & cat ) noexcept; </pre>
+<blockquote>
+  <p><i>Postconditions:</i> <code>val_ == val and cat_ == &cat</code>. </p>
+</blockquote>
+<pre>template<typename ErrorConditionEnum>
+  error_condition & operator=( ErrorConditionEnum e ) noexcept;</pre>
+<blockquote>
+  <p><i>Postconditions:</i> <code>*this == make_error_condition( e )</code>.</p>
+  <p><i>Returns:</i> <code>*this</code>.</p>
+  <p><i>Remarks:</i> This operator shall not participate in overload resolution 
+  unless <code>is_error_condition_enum<ErrorConditionEnum>::value</code> is
+  <code>true</code>.</p>
+</blockquote>
+<pre>void clear() noexcept;</pre>
+<blockquote>
+  <p><i>Postcondition:</i> <code>value() == 0 && category() == generic_category()</code></p>
+</blockquote>
+<h3><a name="Class-error_condition-observers">Class <code>error_condition</code> 
+observers</a></h3>
+<pre>int value() const noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>val_</code>.</p>
+</blockquote>
+<pre>const error_category & category() const noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>*cat_</code>.</p>
+</blockquote>
+<pre>string message() const;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>category().message( value() )</code>.</p>
+</blockquote>
+<pre>operator unspecified-bool-type () const;</pre>
+<blockquote>
+  <p><i>Returns: </i>If <code>value() != 0</code>, returns a value that will 
+  evaluate <code>true</code> in a boolean context; otherwise, returns a value 
+  that will evaluate <code>false</code>. The return type shall not be 
+  convertible to <code>int</code>. </p>
+  <p><i>Throws:</i> Nothing.</p>
+  <p><i> [ Note:</i> This conversion can be used in contexts where a <code>bool</code> 
+  is expected ( e.g., an if condition ); however, implicit conversions ( e.g., to
+  <code>int</code>) that can occur with <code>bool</code> are not allowed, 
+  eliminating some sources of user error. One possible implementation choice for 
+  this type is pointer to member. <i>--end note</i> <i>]</i></p>
+</blockquote>
+  <h2><a name="throws-object"><code>throws</code> object</a></h2>
+  <pre>extern error_code throws;</pre>
+<p>The predefined <code>error_code</code> object <code>throws</code> is supplied 
+for use as a "throw on error" tag.</p>
+<h2><a name="Semantics-of-throws">Semantics of <code>throws</code></a> object</h2>
+<p>Functions that specify an argument in the form <code>error_code& ec=throws</code>, 
+with appropriate namespace qualifiers, have the following error handling 
+semantics:</p>
+<blockquote>
+  <p><i>Postconditions:</i></p>
+  <blockquote>
+    <p>If <code>&ec != &throws</code> and an error occurred:</p>
+    <ul>
+      <li> <code>ec.value()</code> returns the implementation specific error 
+      number for the particular error that occurred.</li>
+      <li><code>ec.category()</code> returns the <code>
+    <a href="#Class-error_category">error_category</a></code> for <code>ec.value()</code>.</li>
+    </ul>
+    <p>if <code>&ec != &throws</code> and an error did not occur, <code>ec.clear()</code>.</p>
+  </blockquote>
+  <p><i>Throws:</i></p>
+  <blockquote>
+  <p>If an error occurs and <code>&ec == &throws</code>, throws an exception of type
+  <code><a href="#Class-system_error">system_error</a></code> or of a type 
+  derived from <code><a href="#Class-system_error">system_error</a></code>. The 
+  exception's <code>code()</code> member function returns a reference to an
+  <code>error_code</code> object with the behavior specified in <i>
+  Postconditions</i>.</p>
+  </blockquote>
+</blockquote>
+<h2><a name="Non-member-functions">Non-member functions</a></h2>
+  <pre>bool operator==( const error_code & lhs, const error_code & rhs ) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>lhs.category() == rhs.category() && lhs.value() == 
+  rhs.value()</code>.</p>
+</blockquote>
+<pre>bool operator==( const error_code & code, const error_condition & condition ) noexcept;
+bool operator==( const error_condition & condition, const error_code & code ) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>code.category().equivalent( code.value(), condition )<br>
+  || condition.category().equivalent( code, condition.value() )</code>.</p>
+</blockquote>
+<pre>bool operator==( const error_condition & lhs, const error_condition & rhs ) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>lhs.category() == rhs.category() && lhs.value() == 
+  rhs.value()</code>.</p>
+</blockquote>
+<pre>bool operator!=( const error_code & lhs, const error_code & rhs ) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>!(lhs == rhs )</code>.</p>
+</blockquote>
+<pre>bool operator!=( const error_code & code, const error_condition & condition ) noexcept;
+bool operator!=( const error_condition & condition, const error_code & code ) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i><code> !( code ==  condition )</code>.</p>
+</blockquote>
+<pre>bool operator!=( const error_condition & lhs, const error_condition & rhs ) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>!(lhs == rhs )</code>.</p>
+</blockquote>
+<pre>bool operator<( const error_code & lhs, const error_code & rhs ) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>lhs.category() < rhs.category()<br>
+    || (lhs.category() == rhs.category() && lhs.value() < rhs.value())</code>.</p>
+</blockquote>
+<pre>bool operator<( const error_condition & lhs, const error_condition & rhs ) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>lhs.category() < rhs.category()<br>
+    || (lhs.category() == rhs.category() && lhs.value() < rhs.value())</code>.</p>
+</blockquote>
+<pre>error_code make_error_code( errc::errc_t e ) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>error_code( e, generic_category())</code>.</p>
+</blockquote>
+<pre>error_condition make_error_condition( errc::errc_t e ) noexcept;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>error_condition( static_cast<int>( e ), generic_category())</code>.</p>
+</blockquote>
+
+<pre>template <class charT, class traits>
+  std::basic_ostream<charT,traits>&
+    operator<<( basic_ostream<charT,traits>& os, const error_code & ec );</pre>
+<blockquote>
+<p><i>Effects:</i> <code>os << ec.category().name() << ':' << ec.value()</code>.</p>
+<p><i>Returns:</i> <code>os</code>.</p>
+</blockquote>
+<pre>size_t <a name="hash_value">hash_value</a>( const error_code & ec );</pre>
+<blockquote>
+  <p><i>Returns: </i> A hash value representing <code>ec</code>.</p>
+</blockquote>
+
+<h2><a name="Header-system_error">Header <boost/system/system_error.hpp></a></h2>
+
+<h3><a name="Class-system_error">Class <code>
+system_error</code></a></h3>
+<p>The class <code>system_error</code> describes an exception object used to 
+report errors that have an associated <code><a href="#Class-error_code">error_code</a></code>. Such errors typically originate from operating system or other low-level 
+application program interfaces.</p>
+<blockquote>
+<pre>namespace boost
+{
+  namespace system
+  {
+    class system_error : public std::runtime_error
+    {
+    public:
+      system_error( error_code ec );
+      system_error( error_code ec, const char * what_arg );
+      system_error( error_code ec, const std::string & what_arg );
+      system_error( int ev, const error_category & ecat,
+                    const char * what_arg );
+      system_error( int ev, const error_category & ecat,
+                    const std::string & what_arg );
+      system_error( int ev, const error_category & ecat);
+
+      const error_code & code() const throw();
+      const char *       what() const throw();
+    };
+  }
+}</pre>
+</blockquote>
+<pre>system_error( error_code ec );</pre>
+<blockquote>
+  <p><i>Effects:</i> Constructs an object of class <code>system_error</code>.</p>
+  <p><i>Postcondition:</i> <code>code() == ec <br>
+  && std::strcmp( this->runtime_error::what(), "" ) == 0</code></p>
+</blockquote>
+<pre>system_error( error_code ec, const char * what_arg );</pre>
+<blockquote>
+  <p><i>Effects:</i> Constructs an object of class <code>system_error</code>.</p>
+  <p><i>Postcondition:</i> <code>code() == ec <br>
+  && std::strcmp( this->runtime_error::what(), what_arg ) == 0</code></p>
+</blockquote>
+<pre>system_error( error_code ec, const std::string & what_arg );</pre>
+<blockquote>
+  <p><i>Effects:</i> Constructs an object of class <code>system_error</code>.</p>
+  <p><i>Postcondition:</i> <code>code() == ec <br>
+  && std::strcmp( this->runtime_error::what(), what_arg.c_str() ) == 0</code></p>
+</blockquote>
+<pre>system_error( int ev, const error_category & ecat,
+             const char * what_arg );</pre>
+<blockquote>
+  <p><i>Effects:</i> Constructs an object of class <code>system_error</code>.</p>
+  <p><i>Postcondition:</i> <code>code() == error_code( ev, ecat )<br>
+  && std::strcmp( this->runtime_error::what(), what_arg ) == 0</code></p>
+</blockquote>
+<pre>system_error( int ev, const error_category & ecat,
+             const std::string & what_arg );</pre>
+<blockquote>
+  <p><i>Effects:</i> Constructs an object of class <code>system_error</code>.</p>
+  <p><i>Postcondition:</i> <code>code() == error_code( ev, ecat )<br>
+  && std::strcmp( this->runtime_error::what(), what_arg.c_str() ) == 0</code></p>
+</blockquote>
+<pre>system_error( int ev, const error_category & ecat );</pre>
+<blockquote>
+  <p><i>Effects:</i> Constructs an object of class <code>system_error</code>.</p>
+  <p><i>Postcondition:</i> <code>code() == error_code( ev, ecat )<br>
+  && std::strcmp( this->runtime_error::what(), "" ) == 0</code></p>
+</blockquote>
+<pre>const error_code & code() const;</pre>
+<blockquote>
+  <p><i>Returns:</i> <code>ec</code> or <code>error_code( ev, ecat )</code>, from 
+  the constructor, as appropriate.</p>
+</blockquote>
+<pre>const char * what() const;</pre>
+<blockquote>
+  <p><i>Returns: </i>A string incorporating <code>
+  this->runtime_error::what()</code> and <code>
+  code.message()</code>.</p>
+</blockquote>
+<hr>
+
+<p>Revised 
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%B %d, %Y" startspan -->January 06, 2014<!--webbot bot="Timestamp" endspan i-checksum="31400" --> </font>
+</p>
+
+<p>� Copyright Beman Dawes, 2006, 2007, 2008, 2013</p>
+
+<p>Distributed under the Boost Software License, Version 1.0. See
+<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a></p>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/system/index.html b/vendor/pdalboost/libs/system/index.html
new file mode 100644
index 0000000..7fe9a07
--- /dev/null
+++ b/vendor/pdalboost/libs/system/index.html
@@ -0,0 +1,14 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0; URL=doc/index.html">
+</head>
+<body>
+Automatic redirection failed, please go to
+<a href="doc/index.html">doc/index.html</a>.
+<hr>
+<p>� Copyright Beman Dawes, 2003</p>
+<p> Distribution under the Boost Software License, Version 1.0.
+(See accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a>)</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/system/meta/libraries.json b/vendor/pdalboost/libs/system/meta/libraries.json
new file mode 100644
index 0000000..90d1218
--- /dev/null
+++ b/vendor/pdalboost/libs/system/meta/libraries.json
@@ -0,0 +1,11 @@
+{
+    "key": "system",
+    "name": "System",
+    "authors": [
+        "Beman Dawes"
+    ],
+    "description": "Operating system support, including the diagnostics support that will be part of the C++0x standard library.",
+    "category": [
+        "System"
+    ]
+}
diff --git a/vendor/pdalboost/libs/system/src/error_code.cpp b/vendor/pdalboost/libs/system/src/error_code.cpp
new file mode 100644
index 0000000..aa628ab
--- /dev/null
+++ b/vendor/pdalboost/libs/system/src/error_code.cpp
@@ -0,0 +1,20 @@
+//  error_code support implementation file  ----------------------------------//
+
+//  Copyright Beman Dawes 2002, 2006
+
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/system
+
+//----------------------------------------------------------------------------//
+
+// define BOOST_SYSTEM_SOURCE so that <boost/system/config.hpp> knows
+// the library is being built (possibly exporting rather than importing code)
+#define BOOST_SYSTEM_SOURCE
+
+#include <boost/system/error_code.hpp>
+
+#ifndef BOOST_ERROR_CODE_HEADER_ONLY
+#include <boost/system/detail/error_code.ipp>
+#endif
diff --git a/vendor/pdalboost/libs/system/test/Jamfile.v2 b/vendor/pdalboost/libs/system/test/Jamfile.v2
new file mode 100644
index 0000000..911e26d
--- /dev/null
+++ b/vendor/pdalboost/libs/system/test/Jamfile.v2
@@ -0,0 +1,58 @@
+# Boost System Library test Jamfile
+
+# Copyright Beman Dawes 2003, 2006
+
+# Distributed under the Boost Software License, Version 1.0.
+# See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt
+
+# See library home page at http://www.boost.org/libs/system
+
+
+project
+    : requirements
+      <library>/boost/system//pdalboost_system
+      <toolset>msvc:<asynch-exceptions>on
+    ;
+    
+   lib throw_test
+     : throw_test.cpp
+     : <link>shared:<define>BOOST_SYSTEM_DYN_LINK=1
+       <link>static:<define>BOOST_SYSTEM_STATIC_LINK=1
+     ;
+   
+
+   test-suite "system"
+       : [ run error_code_test.cpp
+           : # command line
+           : # input files
+           : # requirements
+                   <link>static
+         ]
+         [ run error_code_test.cpp
+           :  :  : <link>shared : error_code_test_shared
+         ]
+         [ run error_code_user_test.cpp
+           :  :  : <link>static
+         ]
+         [ run error_code_user_test.cpp
+           :  :  : <link>shared : error_code_user_test_shared
+         ]
+         [ run system_error_test.cpp
+           :  :  : <link>static
+         ]
+         [ run system_error_test.cpp
+            :  :  : <link>shared : system_error_test_shared
+         ]
+         [ run dynamic_link_test.cpp throw_test
+           :  :  : <link>shared : throw_test_shared
+         ]
+         [ run initialization_test.cpp
+            :  :  : <link>shared : initialization_test_shared
+         ]
+         [ run header_only_test.cpp
+           :  :  : <link>static
+         ]
+         [ run config_test.cpp
+           :  :  : <test-info>always_show_run_output 
+         ]
+         ;
diff --git a/vendor/pdalboost/libs/system/test/config_test.cpp b/vendor/pdalboost/libs/system/test/config_test.cpp
new file mode 100644
index 0000000..eef8ab4
--- /dev/null
+++ b/vendor/pdalboost/libs/system/test/config_test.cpp
@@ -0,0 +1,65 @@
+//  error_code_test.cpp  ---------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2014
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+//  See library home page at http://www.boost.org/libs/system
+
+#include <boost/system/config.hpp>
+#include <iostream>
+
+using std::cout;
+using std::endl;
+
+int main()
+{
+#ifdef BOOST_WINDOWS_API
+  std::cout << "BOOST_WINDOWS_API is defined" << std::endl;
+#else
+  std::cout << "BOOST_WINDOWS_API is not defined" << std::endl;
+#endif
+#ifdef _MSC_VER
+  std::cout << "_MSC_VER is defined as " <<  _MSC_VER << std::endl;
+#else
+  std::cout << "_MSC_VER is not defined" << std::endl;
+#endif
+#ifdef  __CYGWIN__
+  std::cout << "__CYGWIN__ is defined" << std::endl;
+#else
+  std::cout << "__CYGWIN__ is not defined" << std::endl;
+#endif
+#ifdef __MINGW32__
+  std::cout << "__MINGW32__ is defined" << std::endl;
+#else
+  std::cout << "__MINGW32__ is not defined" << std::endl;
+#endif
+#ifdef BOOST_POSIX_API
+  std::cout << "BOOST_POSIX_API is defined" << std::endl;
+#else
+  std::cout << "BOOST_POSIX_API is not defined" << std::endl;
+#endif
+#ifdef BOOST_PLAT_WINDOWS_DESKTOP
+  std::cout << "BOOST_PLAT_WINDOWS_DESKTOP is defined as "
+    << BOOST_PLAT_WINDOWS_DESKTOP << std::endl;
+#else
+  std::cout << "BOOST_PLAT_WINDOWS_DESKTOP is not defined" << std::endl;
+#endif
+#ifdef BOOST_NO_ANSI_APIS
+  std::cout << "BOOST_NO_ANSI_APIS is defined" << std::endl;
+#else
+  std::cout << "BOOST_NO_ANSI_APIS is not defined" << std::endl;
+#endif
+#ifdef BOOST_NO_CXX11_NOEXCEPT
+  std::cout << "BOOST_NO_CXX11_NOEXCEPT is defined" << std::endl;
+#else
+  std::cout << "BOOST_NO_CXX11_NOEXCEPT is not defined" << std::endl;
+#endif
+#ifdef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+  std::cout << "BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS is defined" << std::endl;
+#else
+  std::cout << "BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS is not defined" << std::endl;
+#endif
+  return 0;
+}
diff --git a/vendor/pdalboost/libs/system/test/dynamic_link_test.cpp b/vendor/pdalboost/libs/system/test/dynamic_link_test.cpp
new file mode 100644
index 0000000..7e15ec0
--- /dev/null
+++ b/vendor/pdalboost/libs/system/test/dynamic_link_test.cpp
@@ -0,0 +1,55 @@
+//  dynamic_link_test.cpp  -------------------------------------------------------------//
+
+//  Copyright Beman Dawes 2010
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See www.boost.org/LICENSE_1_0.txt
+
+//  Library home page is www.boost.org/libs/system
+
+//--------------------------------------------------------------------------------------// 
+
+//  Dynamic link libraries (DLL's), also know as dynamic shared objects (DSO's),
+//  can cause symbol visability problems unless carefully configured. One of the
+//  manifestations, particularly with GCC, is that a system_error exception thrown from
+//  a DLL or DSO is not caught.
+//
+//  The purpose of this program is to test for that error.
+
+//--------------------------------------------------------------------------------------// 
+
+#include <boost/system/system_error.hpp>
+
+#include <iostream>
+
+namespace pdalboost
+{
+  namespace system
+  {
+    BOOST_SYSTEM_DECL void throw_test();
+  }
+}
+
+int main()
+{
+  try
+  {
+    pdalboost::system::throw_test();
+  }
+  catch (const pdalboost::system::system_error& ex)
+  {
+    std::cout << "  caught pdalboost::system::system_error as expected\n";
+    std::cout << "  what() reports " << ex.what() << '\n';
+    return 0;
+  }
+
+  catch (const std::runtime_error& ex)
+  {
+    std::cout << "  error: caught std::runtime_error instead of pdalboost::system::system_error\n";
+    std::cout << "  what() reports " << ex.what() << '\n';
+    return 1;
+  }
+
+  std::cout << "  error: failed to catch pdalboost::system::system_error\n";
+  return 1;
+}
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/system/test/error_code_test.cpp b/vendor/pdalboost/libs/system/test/error_code_test.cpp
new file mode 100644
index 0000000..089172e
--- /dev/null
+++ b/vendor/pdalboost/libs/system/test/error_code_test.cpp
@@ -0,0 +1,279 @@
+//  error_code_test.cpp  -----------------------------------------------------//
+
+//  Copyright Beman Dawes 2006
+
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/system
+
+//----------------------------------------------------------------------------//
+
+//  test without deprecated features
+#define BOOST_SYSTEM_NO_DEPRECATED
+
+#include <boost/config/warning_disable.hpp>
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/system/cygwin_error.hpp>
+#include <boost/system/linux_error.hpp>
+#include <boost/system/windows_error.hpp>
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <cstring>
+#include <functional>
+#include <boost/cerrno.hpp>
+
+//  Although using directives are not the best programming practice, testing
+//  with a pdalboost::system using directive increases use scenario coverage.
+using namespace pdalboost::system;
+
+# if defined( BOOST_WINDOWS_API )
+#   include "winerror.h"
+#   define BOOST_ACCESS_ERROR_MACRO ERROR_ACCESS_DENIED
+# elif defined( BOOST_POSIX_API )
+#   define BOOST_ACCESS_ERROR_MACRO EACCES
+# else
+#   error "Only supported for POSIX and Windows"
+# endif
+
+namespace
+{
+  void check_ostream( error_code ec, const char * expected )
+  {
+    std::stringstream ss;
+    std::string s;
+
+    ss << ec;
+    ss >> s;
+    BOOST_TEST( s == expected );
+  }
+}
+
+//  main  ------------------------------------------------------------------------------//
+
+// TODO: add hash_value tests
+
+int main( int, char ** )
+{
+
+  std::cout << "Conversion use cases...\n";
+  error_condition x1( errc::file_exists );
+  //error_code x2( errc::file_exists ); // should fail to compile
+  make_error_code(errc::file_exists);
+  make_error_condition(errc::file_exists);
+
+  std::cout << "General tests...\n";
+  // unit tests:
+
+  BOOST_TEST( generic_category() == generic_category() );
+  BOOST_TEST( system_category() == system_category() );
+  BOOST_TEST( generic_category() != system_category() );
+  BOOST_TEST( system_category() != generic_category() );
+
+  if ( std::less<const error_category*>()( &generic_category(), &system_category() ) )
+  {
+    BOOST_TEST( generic_category() < system_category() );
+    BOOST_TEST( !(system_category() < generic_category()) );
+  }
+  else
+  {
+    BOOST_TEST( system_category() < generic_category() );
+    BOOST_TEST( !(generic_category() < system_category()) );
+  }
+
+
+  error_code ec;
+  error_condition econd;
+  BOOST_TEST( !ec );
+  BOOST_TEST( ec.value() == 0 );
+  econd = ec.default_error_condition();
+  BOOST_TEST( econd.value() == 0 );
+  BOOST_TEST( econd.category() == generic_category() );
+  BOOST_TEST( ec == errc::success );
+  BOOST_TEST( ec.category() == system_category() );
+  BOOST_TEST( std::strcmp( ec.category().name(), "system") == 0 );
+  BOOST_TEST( !(ec < error_code( 0, system_category() )) );
+  BOOST_TEST( !(error_code( 0, system_category() ) < ec) );
+  BOOST_TEST( ec < error_code( 1, system_category() ) );
+  BOOST_TEST( !(error_code( 1, system_category() ) < ec) );
+
+  error_code ec_0_system( 0, system_category() );
+  BOOST_TEST( !ec_0_system );
+  BOOST_TEST( ec_0_system.value() == 0 );
+  econd = ec_0_system.default_error_condition();
+  BOOST_TEST( econd.value() == 0 );
+  BOOST_TEST( econd.category() == generic_category() );
+  BOOST_TEST( ec_0_system == errc::success );
+  BOOST_TEST( ec_0_system.category() == system_category() );
+  BOOST_TEST( std::strcmp( ec_0_system.category().name(), "system") == 0 );
+  check_ostream( ec_0_system, "system:0" );
+
+  BOOST_TEST( ec_0_system == ec );
+
+  error_code ec_1_system( 1, system_category() );
+  BOOST_TEST( ec_1_system );
+  BOOST_TEST( ec_1_system.value() == 1 );
+  BOOST_TEST( ec_1_system.value() != 0 );
+  BOOST_TEST( ec != ec_1_system );
+  BOOST_TEST( ec_0_system != ec_1_system );
+  check_ostream( ec_1_system, "system:1" );
+
+  ec = error_code( BOOST_ACCESS_ERROR_MACRO, system_category() );
+  BOOST_TEST( ec );
+  BOOST_TEST( ec.value() == BOOST_ACCESS_ERROR_MACRO );
+  econd = ec.default_error_condition();
+  BOOST_TEST( econd.value() == static_cast<int>(errc::permission_denied) );
+  BOOST_TEST( econd.category() == generic_category() );
+  BOOST_TEST( econd == error_condition( errc::permission_denied, generic_category() ) );
+  BOOST_TEST( econd == errc::permission_denied );
+  BOOST_TEST( errc::permission_denied == econd );
+  BOOST_TEST( ec == errc::permission_denied );
+  BOOST_TEST( ec.category() == system_category() );
+  BOOST_TEST( std::strcmp( ec.category().name(), "system") == 0 );
+
+  // test the explicit make_error_code conversion for errc
+  ec = make_error_code( errc::bad_message );
+  BOOST_TEST( ec );
+  BOOST_TEST( ec == errc::bad_message );
+  BOOST_TEST( errc::bad_message == ec );
+  BOOST_TEST( ec != errc::permission_denied );
+  BOOST_TEST( errc::permission_denied != ec );
+  BOOST_TEST( ec.category() == generic_category() );
+
+  //// test the deprecated predefined error_category synonyms
+  //BOOST_TEST( &system_category() == &native_ecat );
+  //BOOST_TEST( &generic_category() == &errno_ecat );
+  //BOOST_TEST( system_category() == native_ecat );
+  //BOOST_TEST( generic_category() == errno_ecat );
+
+  // test error_code and error_condition message();
+  // see Boost.Filesystem operations_test for code specific message() tests
+  ec = error_code( -1, system_category() );
+  std::cout << "error_code message for -1 is \"" << ec.message() << "\"\n";
+  std::cout << "error_code message for 0 is \"" << ec_0_system.message() << "\"\n";
+#if defined(BOOST_WINDOWS_API)
+  // Borland appends newline, so just check text
+  BOOST_TEST( ec.message().substr(0,13) == "Unknown error" );
+  BOOST_TEST( ec_0_system.message().substr(0,36) == "The operation completed successfully" );
+#elif  defined(linux) || defined(__linux) || defined(__linux__)
+  // Linux appends value to message as unsigned, so it varies with # of bits
+  BOOST_TEST( ec.message().substr(0,13) == "Unknown error" );
+#elif defined(__hpux)
+  BOOST_TEST( ec.message() == "" );
+#elif defined(__osf__)
+  BOOST_TEST( ec.message() == "Error -1 occurred." );
+#elif defined(__vms)
+  BOOST_TEST( ec.message() == "error -1" );
+#endif
+
+  ec = error_code( BOOST_ACCESS_ERROR_MACRO, system_category() );
+  BOOST_TEST( ec.message() != "" );
+  BOOST_TEST( ec.message().substr( 0, 13) != "Unknown error" );
+
+  econd = error_condition( -1, generic_category() );
+  error_condition econd_ok;
+  std::cout << "error_condition message for -1 is \"" << econd.message() << "\"\n";
+  std::cout << "error_condition message for 0 is \"" << econd_ok.message() << "\"\n";
+#if defined(BOOST_WINDOWS_API)
+  // Borland appends newline, so just check text
+  BOOST_TEST( econd.message().substr(0,13) == "Unknown error" );
+  BOOST_TEST( econd_ok.message().substr(0,8) == "No error" );
+#elif  defined(linux) || defined(__linux) || defined(__linux__)
+  // Linux appends value to message as unsigned, so it varies with # of bits
+  BOOST_TEST( econd.message().substr(0,13) == "Unknown error" );
+#elif defined(__hpux)
+  BOOST_TEST( econd.message() == "" );
+#elif defined(__osf__)
+  BOOST_TEST( econd.message() == "Error -1 occurred." );
+#elif defined(__vms)
+  BOOST_TEST( econd.message() == "error -1" );
+#endif
+
+  econd = error_condition( BOOST_ACCESS_ERROR_MACRO, generic_category() );
+  BOOST_TEST( econd.message() != "" );
+  BOOST_TEST( econd.message().substr( 0, 13) != "Unknown error" );
+
+#ifdef BOOST_WINDOWS_API
+  std::cout << "Windows tests...\n";
+  // these tests probe the Windows errc decoder
+  //   test the first entry in the decoder table:
+  ec = error_code( ERROR_ACCESS_DENIED, system_category() );
+  BOOST_TEST( ec.value() == ERROR_ACCESS_DENIED );
+  BOOST_TEST( ec == errc::permission_denied );
+  BOOST_TEST( ec.default_error_condition().value() == errc::permission_denied );
+  BOOST_TEST( ec.default_error_condition().category() == generic_category() );
+
+  //   test the second entry in the decoder table:
+  ec = error_code( ERROR_ALREADY_EXISTS, system_category() );
+  BOOST_TEST( ec.value() == ERROR_ALREADY_EXISTS );
+  BOOST_TEST( ec == errc::file_exists );
+  BOOST_TEST( ec.default_error_condition().value() == errc::file_exists );
+  BOOST_TEST( ec.default_error_condition().category() == generic_category() );
+
+  //   test the third entry in the decoder table:
+  ec = error_code( ERROR_BAD_UNIT, system_category() );
+  BOOST_TEST( ec.value() == ERROR_BAD_UNIT );
+  BOOST_TEST( ec == errc::no_such_device );
+  BOOST_TEST( ec.default_error_condition().value() == errc::no_such_device );
+  BOOST_TEST( ec.default_error_condition().category() == generic_category() );
+
+  //   test the last non-Winsock entry in the decoder table:
+  ec = error_code( ERROR_WRITE_PROTECT, system_category() );
+  BOOST_TEST( ec.value() == ERROR_WRITE_PROTECT );
+  BOOST_TEST( ec == errc::permission_denied );
+  BOOST_TEST( ec.default_error_condition().value() == errc::permission_denied );
+  BOOST_TEST( ec.default_error_condition().category() == generic_category() );
+
+  //   test the last Winsock entry in the decoder table:
+  ec = error_code( WSAEWOULDBLOCK, system_category() );
+  BOOST_TEST( ec.value() == WSAEWOULDBLOCK );
+  BOOST_TEST( ec == errc::operation_would_block );
+  BOOST_TEST( ec.default_error_condition().value() == errc::operation_would_block );
+  BOOST_TEST( ec.default_error_condition().category() == generic_category() );
+
+  //   test not-in-table condition:
+  ec = error_code( 1234567890, system_category() );
+  BOOST_TEST( ec.value() == 1234567890 );
+  BOOST_TEST( ec.default_error_condition().value() == 1234567890 );
+  BOOST_TEST( ec.default_error_condition().category() == system_category() );
+
+#else // POSIX
+
+  std::cout << "POSIX tests...\n";
+  ec = error_code( EACCES, system_category() );
+  BOOST_TEST( ec == error_code( errc::permission_denied, system_category() ) );
+  BOOST_TEST( error_code( errc::permission_denied, system_category() ) == ec );
+  BOOST_TEST( ec == errc::permission_denied );
+  BOOST_TEST( errc::permission_denied == ec );
+  BOOST_TEST( ec.default_error_condition().value() == errc::permission_denied );
+  BOOST_TEST( ec.default_error_condition().category() == generic_category() );
+
+# ifdef __CYGWIN__
+
+  std::cout << "Cygwin tests...\n";
+  ec = cygwin_error::no_package;
+  BOOST_TEST( ec == cygwin_error::no_package );
+  BOOST_TEST( ec == error_code( ENOPKG, system_category() ) );
+  BOOST_TEST( ec == error_code( cygwin_error::no_package, system_category() ) );
+  BOOST_TEST( ec.default_error_condition().category() == system_category() );
+
+# elif defined(linux) || defined(__linux) || defined(__linux__)
+
+  std::cout << "Linux tests...\n";
+  ec = linux_error::dot_dot_error;
+  BOOST_TEST( ec == linux_error::dot_dot_error );
+  BOOST_TEST( ec == error_code( EDOTDOT, system_category() ) );
+  BOOST_TEST( ec == error_code( linux_error::dot_dot_error, system_category() ) );
+  BOOST_TEST( ec.default_error_condition().category() == system_category() );
+
+# endif
+
+#endif
+  
+  return ::pdalboost::report_errors();
+}
+
+
diff --git a/vendor/pdalboost/libs/system/test/error_code_user_test.cpp b/vendor/pdalboost/libs/system/test/error_code_user_test.cpp
new file mode 100644
index 0000000..6cdf4f1
--- /dev/null
+++ b/vendor/pdalboost/libs/system/test/error_code_user_test.cpp
@@ -0,0 +1,404 @@
+//  error_code_user_test.cpp  ------------------------------------------------//
+
+//  Copyright Beman Dawes 2006
+
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/system
+
+//  ------------------------------------------------------------------------  //
+
+//  This program demonstrates creation and use of new categories of error
+//  codes. Several scenarios are demonstrated and tested.
+
+//  Motivation was a Boost posting by Christopher Kohlhoff on June 28, 2006.
+
+#define BOOST_SYSTEM_NO_DEPRECATED
+
+#include <boost/system/error_code.hpp>
+#include <boost/cerrno.hpp>
+#include <string>
+#include <cstdio>
+#include <boost/detail/lightweight_test.hpp>
+
+#ifdef BOOST_POSIX_API
+# include <sys/stat.h>
+#else
+# include <windows.h>
+#endif
+
+//  ------------------------------------------------------------------------  //
+
+//  Library 1: User function passes through an error code from the
+//  operating system. 
+
+
+pdalboost::system::error_code my_mkdir( const std::string & path )
+{
+  return pdalboost::system::error_code(
+#   ifdef BOOST_POSIX_API
+      ::mkdir( path.c_str(), S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH ) == 0 ? 0 : errno,
+#   else
+      ::CreateDirectoryA( path.c_str(), 0 ) != 0 ? 0 : ::GetLastError(),
+#   endif
+      pdalboost::system::system_category() );
+}
+
+//  ------------------------------------------------------------------------  //
+
+//  Library 2: User function passes through errno from the C-runtime. 
+
+#include <cstdio>
+
+pdalboost::system::error_code my_remove( const std::string & path )
+{
+  return pdalboost::system::error_code(
+    std::remove( path.c_str() ) == 0 ? 0 : errno,
+    pdalboost::system::generic_category() ); // OK for both Windows and POSIX
+                                     // Alternatively, could use generic_category()
+                                     // on Windows and system_category() on
+                                     // POSIX-based systems.
+}
+
+//  ------------------------------------------------------------------------  //
+
+//  Library 3: Library uses enum to identify library specific errors.
+
+//  This particular example is for a library within the parent namespace. For
+//  an example of a library not within the parent namespace, see library 4.
+
+//  header lib3.hpp:
+
+namespace pdalboost
+{
+  namespace lib3
+  {
+    // lib3 has its own error_category:
+    const pdalboost::system::error_category & get_lib3_error_category() BOOST_SYSTEM_NOEXCEPT;
+    const pdalboost::system::error_category & lib3_error_category = get_lib3_error_category();
+    
+    enum error
+    {
+      boo_boo=123,
+      big_boo_boo
+    };
+  }
+
+  namespace system
+  {
+    template<> struct is_error_code_enum<pdalboost::lib3::error>
+      { static const bool value = true; };
+  }
+
+  namespace lib3
+  {
+    inline pdalboost::system::error_code make_error_code(error e)
+      { return pdalboost::system::error_code(e,lib3_error_category); }
+  }
+
+}
+
+//  implementation file lib3.cpp:
+
+//  #include <lib3.hpp>
+
+namespace pdalboost
+{
+  namespace lib3
+  {
+    class lib3_error_category_imp : public pdalboost::system::error_category
+    {
+    public:
+      lib3_error_category_imp() : pdalboost::system::error_category() { }
+
+      const char * name() const BOOST_SYSTEM_NOEXCEPT
+      {
+        return "lib3";
+      }
+
+      pdalboost::system::error_condition default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT
+      {
+        return ev == boo_boo
+          ? pdalboost::system::error_condition( pdalboost::system::errc::io_error,
+              pdalboost::system::generic_category() )
+          : pdalboost::system::error_condition( ev,
+              pdalboost::lib3::lib3_error_category );
+      }
+      
+      std::string message( int ev ) const
+      {
+        if ( ev == boo_boo ) return std::string("boo boo");
+        if ( ev == big_boo_boo ) return std::string("big boo boo");
+        return std::string("unknown error");
+      }
+
+    };
+
+    const pdalboost::system::error_category & get_lib3_error_category() BOOST_SYSTEM_NOEXCEPT
+    {
+      static const lib3_error_category_imp l3ecat;
+      return l3ecat;
+    }
+  }
+}
+
+//  ------------------------------------------------------------------------  //
+
+//  Library 4: Library uses const error_code's to identify library specific
+//  errors. 
+
+//  This particular example is for a library not within the parent namespace.
+//  For an example of a library within the parent namespace, see library 3.
+
+//  header lib4.hpp:
+
+namespace lib4
+{
+  // lib4 has its own error_category:
+  const pdalboost::system::error_category & get_lib4_error_category() BOOST_SYSTEM_NOEXCEPT;
+  const pdalboost::system::error_category & lib4_error_category = get_lib4_error_category();
+  
+  extern const pdalboost::system::error_code boo_boo;
+  extern const pdalboost::system::error_code big_boo_boo;
+}
+
+//  implementation file lib4.cpp:
+
+//  #include <lib4.hpp>
+
+namespace lib4
+{
+  class lib4_error_category_imp : public pdalboost::system::error_category
+  {
+  public:
+    lib4_error_category_imp() : pdalboost::system::error_category() { }
+
+    const char * name() const BOOST_SYSTEM_NOEXCEPT
+    {
+      return "lib4";
+    }
+
+    pdalboost::system::error_condition default_error_condition( int ev ) const  BOOST_SYSTEM_NOEXCEPT
+    {
+      return ev == boo_boo.value()
+        ? pdalboost::system::error_condition( pdalboost::system::errc::io_error,
+            pdalboost::system::generic_category() )
+        : pdalboost::system::error_condition( ev, lib4::lib4_error_category );
+    }
+    
+    std::string message( int ev ) const
+    {
+      if ( ev == boo_boo.value() ) return std::string("boo boo");
+      if ( ev == big_boo_boo.value() ) return std::string("big boo boo");
+      return std::string("unknown error");
+    }
+  };
+
+  const pdalboost::system::error_category & get_lib4_error_category() BOOST_SYSTEM_NOEXCEPT
+  {
+    static const lib4_error_category_imp l4ecat;
+    return l4ecat;
+  }
+
+  const pdalboost::system::error_code boo_boo( 456, lib4_error_category );
+  const pdalboost::system::error_code big_boo_boo( 789, lib4_error_category );
+
+}
+
+//  ------------------------------------------------------------------------  //
+
+// Chris Kolhoff's Test3, modified to work with error_code.hpp
+
+// Test3
+// =====
+// Define error classes to check for success, permission_denied and
+// out_of_memory, but add additional mappings for a user-defined error category.
+//
+
+//namespace test3 {
+
+//  enum user_err
+//  {
+//    user_success = 0,
+//    user_permission_denied,
+//    user_out_of_memory
+//  };
+//
+//  class user_error_category_imp : public pdalboost::system::error_category
+//  {
+//  public:
+//    const std::string & name() const
+//    {
+//      static std::string s( "test3" );
+//      return s;
+//    }
+//
+//    pdalboost::system::error_code portable_error_code( int ev ) const
+//    {
+//      switch (ev)
+//      {
+//        case user_success:
+//          return pdalboost::system::error_code(pdalboost::system::errc::success, pdalboost::system::generic_category());
+//        case user_permission_denied:
+//          return pdalboost::system::error_code(pdalboost::system::errc::permission_denied, pdalboost::system::generic_category());
+//        case user_out_of_memory:
+//          return pdalboost::system::error_code(pdalboost::system::errc::not_enough_memory, pdalboost::system::generic_category());
+//        default:
+//          break;
+//      }
+//      return pdalboost::system::error_code(pdalboost::system::errc::no_posix_equivalent, pdalboost::system::generic_category());
+//    }
+//    
+//  };
+//
+//  const user_error_category_imp user_error_category_const;
+//
+//  const pdalboost::system::error_category & user_error_category
+//    = user_error_category_const;
+//
+//  template<> inline pdalboost::system::error_code make_error_code(user_err e)
+//  {
+//    return pdalboost::system::error_code(e, user_error_category);
+//  }
+//
+//  // test code
+//
+//  void check_success(const pdalboost::system::error_code& ec, bool expect)
+//  {
+//    BOOST_TEST( (ec == pdalboost::system::errc::success) == expect );
+//    if (ec == pdalboost::system::errc::success)
+//      std::cout << "yes... " << (expect ? "ok" : "fail") << '\n';
+//    else
+//      std::cout << "no...  " << (expect ? "fail" : "ok") << '\n';
+//  }
+//
+//  void check_permission_denied(const pdalboost::system::error_code& ec, bool expect)
+//  {
+//    BOOST_TEST( (ec == pdalboost::system::errc::permission_denied) == expect );
+//    if (ec ==  pdalboost::system::errc::permission_denied)
+//      std::cout << "yes... " << (expect ? "ok" : "fail") << '\n';
+//    else
+//      std::cout << "no...  " << (expect ? "fail" : "ok") << '\n';
+//  }
+//
+//  void check_out_of_memory(const pdalboost::system::error_code& ec, bool expect)
+//  {
+//    BOOST_TEST( (ec == pdalboost::system::errc::not_enough_memory) == expect );
+//    if (ec ==  pdalboost::system::errc::not_enough_memory)
+//      std::cout << "yes... " << (expect ? "ok" : "fail") << '\n';
+//    else
+//      std::cout << "no...  " << (expect ? "fail" : "ok") << '\n';
+//  }
+//
+//  void run()
+//  {
+//    printf("Test3\n");
+//    printf("=====\n");
+//    pdalboost::system::error_code ec;
+//    check_success(ec, true);
+//    check_success(pdalboost::system::errc::success, true);
+//    check_success(pdalboost::system::errc::permission_denied, false);
+//    check_success(pdalboost::system::errc::not_enough_memory, false);
+//    check_success(user_success, true);
+//    check_success(user_permission_denied, false);
+//    check_success(user_out_of_memory, false);
+//    check_permission_denied(ec, false);
+//    check_permission_denied(pdalboost::system::errc::success, false);
+//    check_permission_denied(pdalboost::system::errc::permission_denied, true);
+//    check_permission_denied(pdalboost::system::errc::not_enough_memory, false);
+//    check_permission_denied(user_success, false);
+//    check_permission_denied(user_permission_denied, true);
+//    check_permission_denied(user_out_of_memory, false);
+//    check_out_of_memory(ec, false);
+//    check_out_of_memory(pdalboost::system::errc::success, false);
+//    check_out_of_memory(pdalboost::system::errc::permission_denied, false);
+//    check_out_of_memory(pdalboost::system::errc::not_enough_memory, true);
+//    check_out_of_memory(user_success, false);
+//    check_out_of_memory(user_permission_denied, false);
+//    check_out_of_memory(user_out_of_memory, true);
+//
+//# ifdef BOOST_WINDOWS_API
+//    check_success(pdalboost::system::windows::success, true);
+//    check_success(pdalboost::system::windows::access_denied, false);
+//    check_success(pdalboost::system::windows::not_enough_memory, false);
+//    check_permission_denied(pdalboost::system::windows::success, false);
+//    check_permission_denied(pdalboost::system::windows::access_denied, true);
+//    check_permission_denied(pdalboost::system::windows::not_enough_memory, false);
+//    check_out_of_memory(pdalboost::system::windows::success, false);
+//    check_out_of_memory(pdalboost::system::windows::access_denied, false);
+//    check_out_of_memory(pdalboost::system::windows::not_enough_memory, true);
+//# endif
+//
+//    printf("\n");
+//  }
+//
+//} // namespace test3
+
+
+
+//  ------------------------------------------------------------------------  //
+
+int main( int, char *[] )
+{
+  pdalboost::system::error_code ec;
+
+  // Library 1 tests:
+  
+  ec = my_mkdir( "/no-such-file-or-directory/will-not-succeed" );
+  std::cout << "ec.value() is " << ec.value() << '\n';
+
+  BOOST_TEST( ec );
+  BOOST_TEST( ec == pdalboost::system::errc::no_such_file_or_directory );
+  BOOST_TEST( ec.category() == pdalboost::system::system_category() );
+
+  // Library 2 tests:
+
+  ec = my_remove( "/no-such-file-or-directory" );
+  std::cout << "ec.value() is " << ec.value() << '\n';
+
+  BOOST_TEST( ec );
+  BOOST_TEST( ec == pdalboost::system::errc::no_such_file_or_directory );
+  BOOST_TEST( ec.category() == pdalboost::system::generic_category() );
+
+  // Library 3 tests:
+
+  ec = pdalboost::lib3::boo_boo;
+  std::cout << "ec.value() is " << ec.value() << '\n';
+
+  BOOST_TEST( ec );
+  BOOST_TEST( ec == pdalboost::lib3::boo_boo );
+  BOOST_TEST( ec.value() == pdalboost::lib3::boo_boo );
+  BOOST_TEST( ec.category() == pdalboost::lib3::lib3_error_category );
+
+  BOOST_TEST( ec == pdalboost::system::errc::io_error );
+
+  pdalboost::system::error_code ec3( pdalboost::lib3::boo_boo+100,
+    pdalboost::lib3::lib3_error_category );
+  BOOST_TEST( ec3.category() == pdalboost::lib3::lib3_error_category );
+  BOOST_TEST( ec3.default_error_condition().category()
+    == pdalboost::lib3::lib3_error_category );
+
+  // Library 4 tests:
+
+  ec = lib4::boo_boo;
+  std::cout << "ec.value() is " << ec.value() << '\n';
+
+  BOOST_TEST( ec );
+  BOOST_TEST( ec == lib4::boo_boo );
+  BOOST_TEST( ec.value() == lib4::boo_boo.value() );
+  BOOST_TEST( ec.category() == lib4::lib4_error_category );
+
+  BOOST_TEST( ec == pdalboost::system::errc::io_error );
+
+  pdalboost::system::error_code ec4( lib4::boo_boo.value()+100,
+    lib4::lib4_error_category );
+  BOOST_TEST( ec4.default_error_condition().category()
+    == lib4::lib4_error_category );
+
+  // Test 3
+
+  //test3::run();
+
+  return ::pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/system/test/header_only_test.cpp b/vendor/pdalboost/libs/system/test/header_only_test.cpp
new file mode 100644
index 0000000..36b51e2
--- /dev/null
+++ b/vendor/pdalboost/libs/system/test/header_only_test.cpp
@@ -0,0 +1,23 @@
+//  error_code_test.cpp  -----------------------------------------------------//
+
+//  Copyright Beman Dawes 2007
+
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/system
+
+//----------------------------------------------------------------------------// 
+
+#include <boost/config/warning_disable.hpp>
+
+#define BOOST_ERROR_CODE_HEADER_ONLY
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/system/error_code.hpp>
+
+int main( int, char*[] )
+{
+  pdalboost::system::error_code ec( 0, pdalboost::system::system_category() );
+  return ::pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/system/test/initialization_test.cpp b/vendor/pdalboost/libs/system/test/initialization_test.cpp
new file mode 100644
index 0000000..4e7f548
--- /dev/null
+++ b/vendor/pdalboost/libs/system/test/initialization_test.cpp
@@ -0,0 +1,28 @@
+//  initialization_test.cpp  -------------------------------------------------//
+
+//  Copyright Christoper Kohlhoff 2007
+
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/system
+
+//  This test verifiies that the error_category vtable does not suffer from
+//  order-of-initialization problems.
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/system/error_code.hpp>
+
+struct foo
+{
+  foo()
+  {
+    pdalboost::system::error_code ec;
+    ec == pdalboost::system::posix::permission_denied;
+  }
+} f;
+
+int main( int, char ** )
+{
+  return ::pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/system/test/system/common.props b/vendor/pdalboost/libs/system/test/system/common.props
new file mode 100644
index 0000000..345d38e
--- /dev/null
+++ b/vendor/pdalboost/libs/system/test/system/common.props
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ImportGroup Label="PropertySheets" />
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup />
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <AdditionalIncludeDirectories>../../../../..</AdditionalIncludeDirectories>
+    </ClCompile>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <WarningLevel>Level4</WarningLevel>
+      <PreprocessorDefinitions>BOOST_ALL_NO_LIB;BOOST_ALL_DYN_LINK;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ExceptionHandling>Async</ExceptionHandling>
+    </ClCompile>
+    <PostBuildEvent>
+      <Command>"$(TargetDir)\$(TargetName).exe"</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup />
+</Project>
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/system/test/system_error_test.cpp b/vendor/pdalboost/libs/system/test/system_error_test.cpp
new file mode 100644
index 0000000..b9fd675
--- /dev/null
+++ b/vendor/pdalboost/libs/system/test/system_error_test.cpp
@@ -0,0 +1,109 @@
+//  system_error_test.cpp  ---------------------------------------------------//
+
+//  Copyright Beman Dawes 2006
+//  Copyright (c) Microsoft Corporation 2014
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See library home page at http://www.boost.org/libs/system
+
+//----------------------------------------------------------------------------// 
+
+//  test without deprecated features
+#define BOOST_SYSTEM_NO_DEPRECATED
+
+#include <boost/config/warning_disable.hpp>
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/system/system_error.hpp>
+#include <iostream>
+#include <string>
+
+#ifdef BOOST_WINDOWS_API
+#include <windows.h>
+#endif
+
+using pdalboost::system::system_error;
+using pdalboost::system::error_code;
+using pdalboost::system::system_category;
+using std::string;
+
+#define TEST(x,v,w) test(#x,x,v,w)
+
+namespace
+{
+  void test( const char * desc, const system_error & ex,
+    int v, const char * str )
+  {
+    std::cout << "test " << desc << "\n what() returns \"" << ex.what() << "\"\n";
+    BOOST_TEST( ex.code().value() == v );
+    BOOST_TEST( ex.code().category() == system_category() );
+# ifdef BOOST_WINDOWS_API
+    LANGID language_id;
+#   if !defined(__MINGW32__) && !defined(__CYGWIN__) && !BOOST_PLAT_WINDOWS_RUNTIME
+      language_id = ::GetUserDefaultUILanguage();
+#   else
+      language_id = 0x0409; // Assume US English
+#   endif
+    // std::cout << "GetUserDefaultUILanguage() returns " << language_id << '\n';
+    if ( language_id == 0x0409 )  // English (United States)
+    {
+      BOOST_TEST( std::string( ex.what() ) == str );
+      if ( std::string( ex.what() ) != str )
+        std::cout << "expected \"" << str << "\", but what() returned \""
+          << ex.what() << "\"\n";
+    }
+# endif
+  }
+
+  const pdalboost::uint_least32_t uvalue = 2u;
+}
+
+int main( int, char *[] )
+{
+  // all constructors, in the same order as they appear in the header:
+
+  system_error c1_0( error_code(0, system_category()) ); 
+  system_error c1_1( error_code(1, system_category()) );
+  system_error c1_2u( error_code(uvalue, system_category()) );
+
+  system_error c2_0( error_code(0, system_category()), string("c2_0") ); 
+  system_error c2_1( error_code(1, system_category()), string("c2_1") );
+
+  system_error c3_0( error_code(0, system_category()), "c3_0" ); 
+  system_error c3_1( error_code(1, system_category()), "c3_1" );
+
+  system_error c4_0( 0, system_category() ); 
+  system_error c4_1( 1, system_category() );
+  system_error c4_2u( uvalue, system_category() );
+
+  system_error c5_0( 0, system_category(), string("c5_0") ); 
+  system_error c5_1( 1, system_category(), string("c5_1") );
+
+  system_error c6_0( 0, system_category(), "c6_0" ); 
+  system_error c6_1( 1, system_category(), "c6_1" );
+
+  TEST( c1_0, 0, "The operation completed successfully" );
+  TEST( c1_1, 1, "Incorrect function" );
+  TEST( c1_2u, 2, "The system cannot find the file specified" );
+
+  TEST( c2_0, 0, "c2_0: The operation completed successfully" );
+  TEST( c2_1, 1, "c2_1: Incorrect function" );
+
+  TEST( c3_0, 0, "c3_0: The operation completed successfully" );
+  TEST( c3_1, 1, "c3_1: Incorrect function" );
+
+  TEST( c4_0, 0, "The operation completed successfully" );
+  TEST( c4_1, 1, "Incorrect function" );
+  TEST( c4_2u, 2, "The system cannot find the file specified" );
+
+  TEST( c5_0, 0, "c5_0: The operation completed successfully" );
+  TEST( c5_1, 1, "c5_1: Incorrect function" );
+
+  TEST( c6_0, 0, "c6_0: The operation completed successfully" );
+  TEST( c6_1, 1, "c6_1: Incorrect function" );
+
+  return ::pdalboost::report_errors();
+}
+
+
diff --git a/vendor/pdalboost/libs/system/test/throw_test.cpp b/vendor/pdalboost/libs/system/test/throw_test.cpp
new file mode 100644
index 0000000..b9e1b30
--- /dev/null
+++ b/vendor/pdalboost/libs/system/test/throw_test.cpp
@@ -0,0 +1,31 @@
+//  throw_test.cpp  --------------------------------------------------------===========-//
+
+//  Copyright Beman Dawes 2010
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See www.boost.org/LICENSE_1_0.txt
+
+//  Library home page is www.boost.org/libs/system
+
+//--------------------------------------------------------------------------------------// 
+
+//  See dynamic_link_test.cpp comments for use case.
+
+//--------------------------------------------------------------------------------------// 
+
+// define BOOST_SYSTEM_SOURCE so that <boost/system/config.hpp> knows
+// the library is being built (possibly exporting rather than importing code)
+#define BOOST_SYSTEM_SOURCE 
+
+#include <boost/system/system_error.hpp>
+
+namespace pdalboost
+{
+  namespace system
+  {
+    BOOST_SYSTEM_DECL void throw_test()
+    {
+      throw system_error(9999, system_category(), "boo boo");
+    }
+  }
+}
diff --git a/vendor/pdalboost/libs/test/src/compiler_log_formatter.cpp b/vendor/pdalboost/libs/test/src/compiler_log_formatter.cpp
new file mode 100644
index 0000000..e1508c2
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/compiler_log_formatter.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/compiler_log_formatter.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/cpp_main.cpp b/vendor/pdalboost/libs/test/src/cpp_main.cpp
new file mode 100644
index 0000000..ab92ba5
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/cpp_main.cpp
@@ -0,0 +1,19 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/cpp_main.ipp>
+
+// EOF
+
diff --git a/vendor/pdalboost/libs/test/src/debug.cpp b/vendor/pdalboost/libs/test/src/debug.cpp
new file mode 100644
index 0000000..04c6e0a
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/debug.cpp
@@ -0,0 +1,24 @@
+//  (C) Copyright Gennadiy Rozental 2006-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/debug.ipp>
+
+// ***************************************************************************
+//  Revision History :
+//  
+//  $Log$
+// ***************************************************************************
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/decorator.cpp b/vendor/pdalboost/libs/test/src/decorator.cpp
new file mode 100644
index 0000000..3972407
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/decorator.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2011.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/decorator.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/execution_monitor.cpp b/vendor/pdalboost/libs/test/src/execution_monitor.cpp
new file mode 100644
index 0000000..e7fdfb9
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/execution_monitor.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/execution_monitor.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/framework.cpp b/vendor/pdalboost/libs/test/src/framework.cpp
new file mode 100644
index 0000000..52e7614
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/framework.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/framework.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/plain_report_formatter.cpp b/vendor/pdalboost/libs/test/src/plain_report_formatter.cpp
new file mode 100644
index 0000000..95cf64f
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/plain_report_formatter.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/plain_report_formatter.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/progress_monitor.cpp b/vendor/pdalboost/libs/test/src/progress_monitor.cpp
new file mode 100644
index 0000000..1d4afc7
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/progress_monitor.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/progress_monitor.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/results_collector.cpp b/vendor/pdalboost/libs/test/src/results_collector.cpp
new file mode 100644
index 0000000..5d8e0b7
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/results_collector.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/results_collector.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/results_reporter.cpp b/vendor/pdalboost/libs/test/src/results_reporter.cpp
new file mode 100644
index 0000000..205cba5
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/results_reporter.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/results_reporter.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/test_main.cpp b/vendor/pdalboost/libs/test/src/test_main.cpp
new file mode 100644
index 0000000..f7ae352
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/test_main.cpp
@@ -0,0 +1,15 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+/// @file
+/// @brief forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/test_main.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/test_tools.cpp b/vendor/pdalboost/libs/test/src/test_tools.cpp
new file mode 100644
index 0000000..d9d2960
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/test_tools.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/test_tools.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/test_tree.cpp b/vendor/pdalboost/libs/test/src/test_tree.cpp
new file mode 100644
index 0000000..bc273ed
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/test_tree.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/test_tree.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/unit_test_log.cpp b/vendor/pdalboost/libs/test/src/unit_test_log.cpp
new file mode 100644
index 0000000..c09437c
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/unit_test_log.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/unit_test_log.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/unit_test_main.cpp b/vendor/pdalboost/libs/test/src/unit_test_main.cpp
new file mode 100644
index 0000000..74b0b84
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/unit_test_main.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/unit_test_main.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/unit_test_monitor.cpp b/vendor/pdalboost/libs/test/src/unit_test_monitor.cpp
new file mode 100644
index 0000000..ffc6461
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/unit_test_monitor.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/unit_test_monitor.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/unit_test_parameters.cpp b/vendor/pdalboost/libs/test/src/unit_test_parameters.cpp
new file mode 100644
index 0000000..e82694e
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/unit_test_parameters.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/unit_test_parameters.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/xml_log_formatter.cpp b/vendor/pdalboost/libs/test/src/xml_log_formatter.cpp
new file mode 100644
index 0000000..ca497a9
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/xml_log_formatter.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/xml_log_formatter.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/test/src/xml_report_formatter.cpp b/vendor/pdalboost/libs/test/src/xml_report_formatter.cpp
new file mode 100644
index 0000000..18ff1d8
--- /dev/null
+++ b/vendor/pdalboost/libs/test/src/xml_report_formatter.cpp
@@ -0,0 +1,18 @@
+//  (C) Copyright Gennadiy Rozental 2005-2010.
+//  Distributed under the Boost Software License, Version 1.0.
+//  (See accompanying file LICENSE_1_0.txt or copy at 
+//  http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/test for the library home page.
+//
+//  File        : $RCSfile$
+//
+//  Version     : $Revision$
+//
+//  Description : forwarding source
+// ***************************************************************************
+
+#define BOOST_TEST_SOURCE
+#include <boost/test/impl/xml_report_formatter.ipp>
+
+// EOF
diff --git a/vendor/pdalboost/libs/thread/src/future.cpp b/vendor/pdalboost/libs/thread/src/future.cpp
new file mode 100644
index 0000000..9b3d304
--- /dev/null
+++ b/vendor/pdalboost/libs/thread/src/future.cpp
@@ -0,0 +1,64 @@
+// (C) Copyright 2012 Vicente J. Botet Escriba
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/thread/detail/config.hpp>
+#ifndef BOOST_NO_EXCEPTIONS
+
+
+#include <boost/thread/futures/future_error_code.hpp>
+#include <string>
+
+namespace pdalboost
+{
+
+  namespace thread_detail
+  {
+
+    class  future_error_category :
+      public pdalboost::system::error_category
+    {
+    public:
+        virtual const char* name() const BOOST_NOEXCEPT;
+        virtual std::string message(int ev) const;
+    };
+
+    const char*
+    future_error_category::name() const BOOST_NOEXCEPT
+    {
+        return "future";
+    }
+
+    std::string
+    future_error_category::message(int ev) const
+    {
+        switch (BOOST_SCOPED_ENUM_NATIVE(future_errc)(ev))
+        {
+        case future_errc::broken_promise:
+            return std::string("The associated promise has been destructed prior "
+                          "to the associated state becoming ready.");
+        case future_errc::future_already_retrieved:
+            return std::string("The future has already been retrieved from "
+                          "the promise or packaged_task.");
+        case future_errc::promise_already_satisfied:
+            return std::string("The state of the promise has already been set.");
+        case future_errc::no_state:
+            return std::string("Operation not permitted on an object without "
+                          "an associated state.");
+        }
+        return std::string("unspecified future_errc value\n");
+    }
+    future_error_category future_error_category_var;
+  }
+
+  BOOST_THREAD_DECL
+  const system::error_category&
+  future_category() BOOST_NOEXCEPT
+  {
+      return thread_detail::future_error_category_var;
+  }
+
+}
+#endif
+
diff --git a/vendor/pdalboost/libs/thread/src/pthread/once.cpp b/vendor/pdalboost/libs/thread/src/pthread/once.cpp
new file mode 100644
index 0000000..c8e907b
--- /dev/null
+++ b/vendor/pdalboost/libs/thread/src/pthread/once.cpp
@@ -0,0 +1,78 @@
+// Copyright (C) 2007 Anthony Williams
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/thread/detail/config.hpp>
+#ifdef BOOST_THREAD_ONCE_ATOMIC
+#include "./once_atomic.cpp"
+#else
+#define __STDC_CONSTANT_MACROS
+#include <boost/thread/pthread/pthread_mutex_scoped_lock.hpp>
+#include <boost/thread/once.hpp>
+#include <boost/assert.hpp>
+#include <boost/throw_exception.hpp>
+#include <pthread.h>
+#include <stdlib.h>
+#include <memory>
+#include <string.h> // memcmp.
+namespace pdalboost
+{
+    namespace thread_detail
+    {
+        BOOST_THREAD_DECL uintmax_atomic_t once_global_epoch=BOOST_THREAD_DETAIL_UINTMAX_ATOMIC_MAX_C;
+        BOOST_THREAD_DECL pthread_mutex_t once_epoch_mutex=PTHREAD_MUTEX_INITIALIZER;
+        BOOST_THREAD_DECL pthread_cond_t once_epoch_cv = PTHREAD_COND_INITIALIZER;
+
+        namespace
+        {
+            pthread_key_t epoch_tss_key;
+            pthread_once_t epoch_tss_key_flag=PTHREAD_ONCE_INIT;
+
+            extern "C"
+            {
+                static void delete_epoch_tss_data(void* data)
+                {
+                    free(data);
+                }
+
+                static void create_epoch_tss_key()
+                {
+                    BOOST_VERIFY(!pthread_key_create(&epoch_tss_key,delete_epoch_tss_data));
+                }
+            }
+
+            const pthread_once_t pthread_once_init_value=PTHREAD_ONCE_INIT;
+            struct BOOST_THREAD_DECL delete_epoch_tss_key_on_dlclose_t
+            {
+                delete_epoch_tss_key_on_dlclose_t()
+                {
+                }
+                ~delete_epoch_tss_key_on_dlclose_t()
+                {
+                    if(memcmp(&epoch_tss_key_flag, &pthread_once_init_value, sizeof(pthread_once_t)))
+                    {
+                        pthread_key_delete(epoch_tss_key);
+                    }
+                }
+            };
+            delete_epoch_tss_key_on_dlclose_t delete_epoch_tss_key_on_dlclose;
+        }
+
+        uintmax_atomic_t& get_once_per_thread_epoch()
+        {
+            BOOST_VERIFY(!pthread_once(&epoch_tss_key_flag,create_epoch_tss_key));
+            void* data=pthread_getspecific(epoch_tss_key);
+            if(!data)
+            {
+                data=malloc(sizeof(thread_detail::uintmax_atomic_t));
+                if(!data) BOOST_THROW_EXCEPTION(std::bad_alloc());
+                BOOST_VERIFY(!pthread_setspecific(epoch_tss_key,data));
+                *static_cast<thread_detail::uintmax_atomic_t*>(data)=BOOST_THREAD_DETAIL_UINTMAX_ATOMIC_MAX_C;
+            }
+            return *static_cast<thread_detail::uintmax_atomic_t*>(data);
+        }
+    }
+
+}
+#endif //
diff --git a/vendor/pdalboost/libs/thread/src/pthread/once_atomic.cpp b/vendor/pdalboost/libs/thread/src/pthread/once_atomic.cpp
new file mode 100644
index 0000000..1399ad0
--- /dev/null
+++ b/vendor/pdalboost/libs/thread/src/pthread/once_atomic.cpp
@@ -0,0 +1,90 @@
+//  (C) Copyright 2013 Andrey Semashev
+//  (C) Copyright 2013 Vicente J. Botet Escriba
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//#define __STDC_CONSTANT_MACROS
+#include <boost/thread/detail/config.hpp>
+#include <boost/thread/once.hpp>
+#include <boost/thread/pthread/pthread_mutex_scoped_lock.hpp>
+#include <boost/assert.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/atomic.hpp>
+#include <boost/memory_order.hpp>
+#include <pthread.h>
+
+namespace pdalboost
+{
+  namespace thread_detail
+  {
+
+    enum flag_states
+    {
+      uninitialized, in_progress, initialized
+    };
+
+
+#ifndef BOOST_THREAD_PROVIDES_ONCE_CXX11
+    BOOST_STATIC_ASSERT_MSG(sizeof(atomic_int_type) == sizeof(atomic_type), "Boost.Thread: unsupported platform");
+#endif
+
+    static pthread_mutex_t once_mutex = PTHREAD_MUTEX_INITIALIZER;
+    static pthread_cond_t once_cv = PTHREAD_COND_INITIALIZER;
+
+    BOOST_THREAD_DECL bool enter_once_region(once_flag& flag) BOOST_NOEXCEPT
+    {
+      atomic_type& f = get_atomic_storage(flag);
+      if (f.load(memory_order_acquire) != initialized)
+      {
+        pthread::pthread_mutex_scoped_lock lk(&once_mutex);
+        if (f.load(memory_order_acquire) != initialized)
+        {
+          while (true)
+          {
+            atomic_int_type expected = uninitialized;
+            if (f.compare_exchange_strong(expected, in_progress, memory_order_acq_rel, memory_order_acquire))
+            {
+              // We have set the flag to in_progress
+              return true;
+            }
+            else if (expected == initialized)
+            {
+              // Another thread managed to complete the initialization
+              return false;
+            }
+            else
+            {
+              // Wait until the initialization is complete
+              //pthread::pthread_mutex_scoped_lock lk(&once_mutex);
+              BOOST_VERIFY(!pthread_cond_wait(&once_cv, &once_mutex));
+            }
+          }
+        }
+      }
+      return false;
+    }
+
+    BOOST_THREAD_DECL void commit_once_region(once_flag& flag) BOOST_NOEXCEPT
+    {
+      atomic_type& f = get_atomic_storage(flag);
+      {
+        pthread::pthread_mutex_scoped_lock lk(&once_mutex);
+        f.store(initialized, memory_order_release);
+      }
+      BOOST_VERIFY(!pthread_cond_broadcast(&once_cv));
+    }
+
+    BOOST_THREAD_DECL void rollback_once_region(once_flag& flag) BOOST_NOEXCEPT
+    {
+      atomic_type& f = get_atomic_storage(flag);
+      {
+        pthread::pthread_mutex_scoped_lock lk(&once_mutex);
+        f.store(uninitialized, memory_order_release);
+      }
+      BOOST_VERIFY(!pthread_cond_broadcast(&once_cv));
+    }
+
+  } // namespace thread_detail
+
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/thread/src/pthread/thread.cpp b/vendor/pdalboost/libs/thread/src/pthread/thread.cpp
new file mode 100644
index 0000000..6109a8c
--- /dev/null
+++ b/vendor/pdalboost/libs/thread/src/pthread/thread.cpp
@@ -0,0 +1,842 @@
+// Copyright (C) 2001-2003
+// William E. Kempf
+// Copyright (C) 2007-8 Anthony Williams
+// (C) Copyright 2011-2012 Vicente J. Botet Escriba
+//
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/thread/detail/config.hpp>
+
+#include <boost/thread/thread_only.hpp>
+#if defined BOOST_THREAD_USES_DATETIME
+#include <boost/thread/xtime.hpp>
+#endif
+#include <boost/thread/condition_variable.hpp>
+#include <boost/thread/locks.hpp>
+#include <boost/thread/once.hpp>
+#include <boost/thread/tss.hpp>
+#include <boost/thread/future.hpp>
+
+#ifdef __GLIBC__
+#include <sys/sysinfo.h>
+#elif defined(__APPLE__) || defined(__FreeBSD__)
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#elif defined BOOST_HAS_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <boost/algorithm/string/split.hpp>
+#include <boost/algorithm/string/trim.hpp>
+#include <boost/lexical_cast.hpp>
+
+#include <fstream>
+#include <string>
+#include <set>
+#include <vector>
+#include <string.h> // memcmp.
+
+namespace pdalboost
+{
+    namespace detail
+    {
+        thread_data_base::~thread_data_base()
+        {
+            for (notify_list_t::iterator i = notify.begin(), e = notify.end();
+                    i != e; ++i)
+            {
+                i->second->unlock();
+                i->first->notify_all();
+            }
+            for (async_states_t::iterator i = async_states_.begin(), e = async_states_.end();
+                    i != e; ++i)
+            {
+                (*i)->make_ready();
+            }
+        }
+
+        struct thread_exit_callback_node
+        {
+            pdalboost::detail::thread_exit_function_base* func;
+            thread_exit_callback_node* next;
+
+            thread_exit_callback_node(pdalboost::detail::thread_exit_function_base* func_,
+                                      thread_exit_callback_node* next_):
+                func(func_),next(next_)
+            {}
+        };
+
+        namespace
+        {
+#ifdef BOOST_THREAD_PROVIDES_ONCE_CXX11
+          pdalboost::once_flag current_thread_tls_init_flag;
+#else
+            pdalboost::once_flag current_thread_tls_init_flag=BOOST_ONCE_INIT;
+#endif
+            pthread_key_t current_thread_tls_key;
+
+            extern "C"
+            {
+                static void tls_destructor(void* data)
+                {
+                    //pdalboost::detail::thread_data_base* thread_info=static_cast<pdalboost::detail::thread_data_base*>(data);
+                    pdalboost::detail::thread_data_ptr thread_info = static_cast<pdalboost::detail::thread_data_base*>(data)->shared_from_this();
+
+                    if(thread_info)
+                    {
+                        while(!thread_info->tss_data.empty() || thread_info->thread_exit_callbacks)
+                        {
+
+                            while(thread_info->thread_exit_callbacks)
+                            {
+                                detail::thread_exit_callback_node* const current_node=thread_info->thread_exit_callbacks;
+                                thread_info->thread_exit_callbacks=current_node->next;
+                                if(current_node->func)
+                                {
+                                    (*current_node->func)();
+                                    delete current_node->func;
+                                }
+                                delete current_node;
+                            }
+                            while (!thread_info->tss_data.empty())
+                            {
+                                std::map<void const*,detail::tss_data_node>::iterator current
+                                    = thread_info->tss_data.begin();
+                                if(current->second.func && (current->second.value!=0))
+                                {
+                                    (*current->second.func)(current->second.value);
+                                }
+                                thread_info->tss_data.erase(current);
+                            }
+                        }
+                        thread_info->self.reset();
+                    }
+                }
+            }
+
+            struct  delete_current_thread_tls_key_on_dlclose_t
+            {
+                delete_current_thread_tls_key_on_dlclose_t()
+                {
+                }
+                ~delete_current_thread_tls_key_on_dlclose_t()
+                {
+                    const pdalboost::once_flag uninitialized = BOOST_ONCE_INIT;
+                    if (memcmp(&current_thread_tls_init_flag, &uninitialized, sizeof(pdalboost::once_flag)))
+                    {
+                        pthread_key_delete(current_thread_tls_key);
+                    }
+                }
+            };
+            delete_current_thread_tls_key_on_dlclose_t delete_current_thread_tls_key_on_dlclose;
+
+            void create_current_thread_tls_key()
+            {
+                BOOST_VERIFY(!pthread_key_create(&current_thread_tls_key,&tls_destructor));
+            }
+        }
+
+        pdalboost::detail::thread_data_base* get_current_thread_data()
+        {
+            pdalboost::call_once(current_thread_tls_init_flag,create_current_thread_tls_key);
+            return (pdalboost::detail::thread_data_base*)pthread_getspecific(current_thread_tls_key);
+        }
+
+        void set_current_thread_data(detail::thread_data_base* new_data)
+        {
+            pdalboost::call_once(current_thread_tls_init_flag,create_current_thread_tls_key);
+            BOOST_VERIFY(!pthread_setspecific(current_thread_tls_key,new_data));
+        }
+    }
+
+    namespace
+    {
+        extern "C"
+        {
+            static void* thread_proxy(void* param)
+            {
+                //pdalboost::detail::thread_data_ptr thread_info = static_cast<pdalboost::detail::thread_data_base*>(param)->self;
+                pdalboost::detail::thread_data_ptr thread_info = static_cast<pdalboost::detail::thread_data_base*>(param)->shared_from_this();
+                thread_info->self.reset();
+                detail::set_current_thread_data(thread_info.get());
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+                BOOST_TRY
+                {
+#endif
+                    thread_info->run();
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+
+                }
+                BOOST_CATCH (thread_interrupted const&)
+                {
+                }
+// Removed as it stops the debugger identifying the cause of the exception
+// Unhandled exceptions still cause the application to terminate
+//                 BOOST_CATCH(...)
+//                 {
+//                   throw;
+//
+//                     std::terminate();
+//                 }
+                BOOST_CATCH_END
+#endif
+                detail::tls_destructor(thread_info.get());
+                detail::set_current_thread_data(0);
+                pdalboost::lock_guard<pdalboost::mutex> lock(thread_info->data_mutex);
+                thread_info->done=true;
+                thread_info->done_condition.notify_all();
+
+                return 0;
+            }
+        }
+    }
+    namespace detail
+    {
+        struct externally_launched_thread:
+            detail::thread_data_base
+        {
+            externally_launched_thread()
+            {
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+                interrupt_enabled=false;
+#endif
+            }
+            ~externally_launched_thread() {
+              BOOST_ASSERT(notify.empty());
+              notify.clear();
+              BOOST_ASSERT(async_states_.empty());
+              async_states_.clear();
+            }
+            void run()
+            {}
+            void notify_all_pdalboostat_thread_exit(condition_variable*, mutex*)
+            {}
+
+        private:
+            externally_launched_thread(externally_launched_thread&);
+            void operator=(externally_launched_thread&);
+        };
+
+        thread_data_base* make_external_thread_data()
+        {
+            thread_data_base* const me(detail::heap_new<externally_launched_thread>());
+            me->self.reset(me);
+            set_current_thread_data(me);
+            return me;
+        }
+
+
+        thread_data_base* get_or_make_current_thread_data()
+        {
+            thread_data_base* current_thread_data(get_current_thread_data());
+            if(!current_thread_data)
+            {
+                current_thread_data=make_external_thread_data();
+            }
+            return current_thread_data;
+        }
+
+    }
+
+
+    thread::thread() BOOST_NOEXCEPT
+    {}
+
+    bool thread::start_thread_noexcept()
+    {
+        thread_info->self=thread_info;
+        int const res = pthread_create(&thread_info->thread_handle, 0, &thread_proxy, thread_info.get());
+        if (res != 0)
+        {
+            thread_info->self.reset();
+            return false;
+        }
+        return true;
+    }
+
+    bool thread::start_thread_noexcept(const attributes& attr)
+    {
+        thread_info->self=thread_info;
+        const attributes::native_handle_type* h = attr.native_handle();
+        int res = pthread_create(&thread_info->thread_handle, h, &thread_proxy, thread_info.get());
+        if (res != 0)
+        {
+            thread_info->self.reset();
+            return false;
+        }
+        int detached_state;
+        res = pthread_attr_getdetachstate(h, &detached_state);
+        if (res != 0)
+        {
+            thread_info->self.reset();
+            return false;
+        }
+        if (PTHREAD_CREATE_DETACHED==detached_state)
+        {
+          detail::thread_data_ptr local_thread_info;
+          thread_info.swap(local_thread_info);
+
+          if(local_thread_info)
+          {
+              //lock_guard<mutex> lock(local_thread_info->data_mutex);
+              if(!local_thread_info->join_started)
+              {
+                  //BOOST_VERIFY(!pthread_detach(local_thread_info->thread_handle));
+                  local_thread_info->join_started=true;
+                  local_thread_info->joined=true;
+              }
+          }
+        }
+        return true;
+    }
+
+
+
+    detail::thread_data_ptr thread::get_thread_info BOOST_PREVENT_MACRO_SUBSTITUTION () const
+    {
+        return thread_info;
+    }
+
+    bool thread::join_noexcept()
+    {
+        detail::thread_data_ptr const local_thread_info=(get_thread_info)();
+        if(local_thread_info)
+        {
+            bool do_join=false;
+
+            {
+                unique_lock<mutex> lock(local_thread_info->data_mutex);
+                while(!local_thread_info->done)
+                {
+                    local_thread_info->done_condition.wait(lock);
+                }
+                do_join=!local_thread_info->join_started;
+
+                if(do_join)
+                {
+                    local_thread_info->join_started=true;
+                }
+                else
+                {
+                    while(!local_thread_info->joined)
+                    {
+                        local_thread_info->done_condition.wait(lock);
+                    }
+                }
+            }
+            if(do_join)
+            {
+                void* result=0;
+                BOOST_VERIFY(!pthread_join(local_thread_info->thread_handle,&result));
+                lock_guard<mutex> lock(local_thread_info->data_mutex);
+                local_thread_info->joined=true;
+                local_thread_info->done_condition.notify_all();
+            }
+
+            if(thread_info==local_thread_info)
+            {
+                thread_info.reset();
+            }
+            return true;
+        }
+        else
+        {
+          return false;
+        }
+    }
+
+    bool thread::do_try_join_until_noexcept(struct timespec const &timeout, bool& res)
+    {
+        detail::thread_data_ptr const local_thread_info=(get_thread_info)();
+        if(local_thread_info)
+        {
+            bool do_join=false;
+
+            {
+                unique_lock<mutex> lock(local_thread_info->data_mutex);
+                while(!local_thread_info->done)
+                {
+                    if(!local_thread_info->done_condition.do_wait_until(lock,timeout))
+                    {
+                      res=false;
+                      return true;
+                    }
+                }
+                do_join=!local_thread_info->join_started;
+
+                if(do_join)
+                {
+                    local_thread_info->join_started=true;
+                }
+                else
+                {
+                    while(!local_thread_info->joined)
+                    {
+                        local_thread_info->done_condition.wait(lock);
+                    }
+                }
+            }
+            if(do_join)
+            {
+                void* result=0;
+                BOOST_VERIFY(!pthread_join(local_thread_info->thread_handle,&result));
+                lock_guard<mutex> lock(local_thread_info->data_mutex);
+                local_thread_info->joined=true;
+                local_thread_info->done_condition.notify_all();
+            }
+
+            if(thread_info==local_thread_info)
+            {
+                thread_info.reset();
+            }
+            res=true;
+            return true;
+        }
+        else
+        {
+          return false;
+        }
+    }
+
+    bool thread::joinable() const BOOST_NOEXCEPT
+    {
+        return (get_thread_info)()?true:false;
+    }
+
+
+    void thread::detach()
+    {
+        detail::thread_data_ptr local_thread_info;
+        thread_info.swap(local_thread_info);
+
+        if(local_thread_info)
+        {
+            lock_guard<mutex> lock(local_thread_info->data_mutex);
+            if(!local_thread_info->join_started)
+            {
+                BOOST_VERIFY(!pthread_detach(local_thread_info->thread_handle));
+                local_thread_info->join_started=true;
+                local_thread_info->joined=true;
+            }
+        }
+    }
+
+    namespace this_thread
+    {
+      namespace no_interruption_point
+      {
+        namespace hiden
+        {
+          void BOOST_THREAD_DECL sleep_for(const timespec& ts)
+          {
+
+                if (pdalboost::detail::timespec_ge(ts, pdalboost::detail::timespec_zero()))
+                {
+
+    #   if defined(BOOST_HAS_PTHREAD_DELAY_NP)
+    #     if defined(__IBMCPP__) ||  defined(_AIX)
+                  BOOST_VERIFY(!pthread_delay_np(const_cast<timespec*>(&ts)));
+    #     else
+                  BOOST_VERIFY(!pthread_delay_np(&ts));
+    #     endif
+    #   elif defined(BOOST_HAS_NANOSLEEP)
+                  //  nanosleep takes a timespec that is an offset, not
+                  //  an absolute time.
+                  nanosleep(&ts, 0);
+    #   else
+                  mutex mx;
+                  unique_lock<mutex> lock(mx);
+                  condition_variable cond;
+                  cond.do_wait_for(lock, ts);
+    #   endif
+                }
+          }
+
+          void BOOST_THREAD_DECL sleep_until(const timespec& ts)
+          {
+                timespec now = pdalboost::detail::timespec_now();
+                if (pdalboost::detail::timespec_gt(ts, now))
+                {
+                  for (int foo=0; foo < 5; ++foo)
+                  {
+
+    #   if defined(BOOST_HAS_PTHREAD_DELAY_NP)
+                    timespec d = pdalboost::detail::timespec_minus(ts, now);
+                    BOOST_VERIFY(!pthread_delay_np(&d));
+    #   elif defined(BOOST_HAS_NANOSLEEP)
+                    //  nanosleep takes a timespec that is an offset, not
+                    //  an absolute time.
+                    timespec d = pdalboost::detail::timespec_minus(ts, now);
+                    nanosleep(&d, 0);
+    #   else
+                    mutex mx;
+                    unique_lock<mutex> lock(mx);
+                    condition_variable cond;
+                    cond.do_wait_until(lock, ts);
+    #   endif
+                    timespec now2 = pdalboost::detail::timespec_now();
+                    if (pdalboost::detail::timespec_ge(now2, ts))
+                    {
+                      return;
+                    }
+                  }
+                }
+          }
+
+        }
+      }
+      namespace hiden
+      {
+        void BOOST_THREAD_DECL sleep_for(const timespec& ts)
+        {
+            pdalboost::detail::thread_data_base* const thread_info=pdalboost::detail::get_current_thread_data();
+
+            if(thread_info)
+            {
+              unique_lock<mutex> lk(thread_info->sleep_mutex);
+              while( thread_info->sleep_condition.do_wait_for(lk,ts)) {}
+            }
+            else
+            {
+              pdalboost::this_thread::no_interruption_point::hiden::sleep_for(ts);
+            }
+        }
+
+        void BOOST_THREAD_DECL sleep_until(const timespec& ts)
+        {
+            pdalboost::detail::thread_data_base* const thread_info=pdalboost::detail::get_current_thread_data();
+
+            if(thread_info)
+            {
+              unique_lock<mutex> lk(thread_info->sleep_mutex);
+              while(thread_info->sleep_condition.do_wait_until(lk,ts)) {}
+            }
+            else
+            {
+              pdalboost::this_thread::no_interruption_point::hiden::sleep_until(ts);
+            }
+        }
+      } // hiden
+    } // this_thread
+
+    namespace this_thread
+    {
+        void yield() BOOST_NOEXCEPT
+        {
+#   if defined(BOOST_HAS_SCHED_YIELD)
+            BOOST_VERIFY(!sched_yield());
+#   elif defined(BOOST_HAS_PTHREAD_YIELD)
+            BOOST_VERIFY(!pthread_yield());
+//#   elif defined BOOST_THREAD_USES_DATETIME
+//            xtime xt;
+//            xtime_get(&xt, TIME_UTC_);
+//            sleep(xt);
+//            sleep_for(chrono::milliseconds(0));
+#   else
+#error
+            timespec ts;
+            ts.tv_sec= 0;
+            ts.tv_nsec= 0;
+            hiden::sleep_for(ts);
+#   endif
+        }
+    }
+    unsigned thread::hardware_concurrency() BOOST_NOEXCEPT
+    {
+#if defined(PTW32_VERSION) || defined(__hpux)
+        return pthread_num_processors_np();
+#elif defined(__APPLE__) || defined(__FreeBSD__)
+        int count;
+        size_t size=sizeof(count);
+        return sysctlbyname("hw.ncpu",&count,&size,NULL,0)?0:count;
+#elif defined(BOOST_HAS_UNISTD_H) && defined(_SC_NPROCESSORS_ONLN)
+        int const count=sysconf(_SC_NPROCESSORS_ONLN);
+        return (count>0)?count:0;
+#elif defined(__GLIBC__)
+        return get_nprocs();
+#else
+        return 0;
+#endif
+    }
+
+    unsigned thread::physical_concurrency() BOOST_NOEXCEPT
+    {
+#ifdef __linux__
+        try {
+            using namespace std;
+
+            ifstream proc_cpuinfo ("/proc/cpuinfo");
+
+            const string physical_id("physical id"), core_id("core id");
+
+            typedef std::pair<unsigned, unsigned> core_entry; // [physical ID, core id]
+
+            std::set<core_entry> cores;
+
+            core_entry current_core_entry;
+
+            string line;
+            while ( getline(proc_cpuinfo, line) ) {
+                if (line.empty())
+                    continue;
+
+                vector<string> key_val(2);
+                pdalboost::split(key_val, line, pdalboost::is_any_of(":"));
+
+                if (key_val.size() != 2)
+                  return hardware_concurrency();
+
+                string key   = key_val[0];
+                string value = key_val[1];
+                pdalboost::trim(key);
+                pdalboost::trim(value);
+
+                if (key == physical_id) {
+                    current_core_entry.first = pdalboost::lexical_cast<unsigned>(value);
+                    continue;
+                }
+
+                if (key == core_id) {
+                    current_core_entry.second = pdalboost::lexical_cast<unsigned>(value);
+                    cores.insert(current_core_entry);
+                    continue;
+                }
+            }
+            // Fall back to hardware_concurrency() in case
+            // /proc/cpuinfo is formatted differently than we expect.
+            return cores.size() != 0 ? cores.size() : hardware_concurrency();
+        } catch(...) {
+          return hardware_concurrency();
+        }
+#elif defined(__APPLE__)
+        int count;
+        size_t size=sizeof(count);
+        return sysctlbyname("hw.physicalcpu",&count,&size,NULL,0)?0:count;
+#else
+        return hardware_concurrency();
+#endif
+    }
+
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+    void thread::interrupt()
+    {
+        detail::thread_data_ptr const local_thread_info=(get_thread_info)();
+        if(local_thread_info)
+        {
+            lock_guard<mutex> lk(local_thread_info->data_mutex);
+            local_thread_info->interrupt_requested=true;
+            if(local_thread_info->current_cond)
+            {
+                pdalboost::pthread::pthread_mutex_scoped_lock internal_lock(local_thread_info->cond_mutex);
+                BOOST_VERIFY(!pthread_cond_broadcast(local_thread_info->current_cond));
+            }
+        }
+    }
+
+    bool thread::interruption_requested() const BOOST_NOEXCEPT
+    {
+        detail::thread_data_ptr const local_thread_info=(get_thread_info)();
+        if(local_thread_info)
+        {
+            lock_guard<mutex> lk(local_thread_info->data_mutex);
+            return local_thread_info->interrupt_requested;
+        }
+        else
+        {
+            return false;
+        }
+    }
+#endif
+
+    thread::native_handle_type thread::native_handle()
+    {
+        detail::thread_data_ptr const local_thread_info=(get_thread_info)();
+        if(local_thread_info)
+        {
+            lock_guard<mutex> lk(local_thread_info->data_mutex);
+            return local_thread_info->thread_handle;
+        }
+        else
+        {
+            return pthread_t();
+        }
+    }
+
+
+
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+    namespace this_thread
+    {
+        void interruption_point()
+        {
+#ifndef BOOST_NO_EXCEPTIONS
+            pdalboost::detail::thread_data_base* const thread_info=detail::get_current_thread_data();
+            if(thread_info && thread_info->interrupt_enabled)
+            {
+                lock_guard<mutex> lg(thread_info->data_mutex);
+                if(thread_info->interrupt_requested)
+                {
+                    thread_info->interrupt_requested=false;
+                    throw thread_interrupted();
+                }
+            }
+#endif
+        }
+
+        bool interruption_enabled() BOOST_NOEXCEPT
+        {
+            pdalboost::detail::thread_data_base* const thread_info=detail::get_current_thread_data();
+            return thread_info && thread_info->interrupt_enabled;
+        }
+
+        bool interruption_requested() BOOST_NOEXCEPT
+        {
+            pdalboost::detail::thread_data_base* const thread_info=detail::get_current_thread_data();
+            if(!thread_info)
+            {
+                return false;
+            }
+            else
+            {
+                lock_guard<mutex> lg(thread_info->data_mutex);
+                return thread_info->interrupt_requested;
+            }
+        }
+
+        disable_interruption::disable_interruption() BOOST_NOEXCEPT:
+            interruption_was_enabled(interruption_enabled())
+        {
+            if(interruption_was_enabled)
+            {
+                detail::get_current_thread_data()->interrupt_enabled=false;
+            }
+        }
+
+        disable_interruption::~disable_interruption() BOOST_NOEXCEPT
+        {
+            if(detail::get_current_thread_data())
+            {
+                detail::get_current_thread_data()->interrupt_enabled=interruption_was_enabled;
+            }
+        }
+
+        restore_interruption::restore_interruption(disable_interruption& d) BOOST_NOEXCEPT
+        {
+            if(d.interruption_was_enabled)
+            {
+                detail::get_current_thread_data()->interrupt_enabled=true;
+            }
+        }
+
+        restore_interruption::~restore_interruption() BOOST_NOEXCEPT
+        {
+            if(detail::get_current_thread_data())
+            {
+                detail::get_current_thread_data()->interrupt_enabled=false;
+            }
+        }
+    }
+#endif
+
+    namespace detail
+    {
+        void add_thread_exit_function(thread_exit_function_base* func)
+        {
+            detail::thread_data_base* const current_thread_data(get_or_make_current_thread_data());
+            thread_exit_callback_node* const new_node=
+                heap_new<thread_exit_callback_node>(func,current_thread_data->thread_exit_callbacks);
+            current_thread_data->thread_exit_callbacks=new_node;
+        }
+
+        tss_data_node* find_tss_data(void const* key)
+        {
+            detail::thread_data_base* const current_thread_data(get_current_thread_data());
+            if(current_thread_data)
+            {
+                std::map<void const*,tss_data_node>::iterator current_node=
+                    current_thread_data->tss_data.find(key);
+                if(current_node!=current_thread_data->tss_data.end())
+                {
+                    return &current_node->second;
+                }
+            }
+            return 0;
+        }
+
+        void* get_tss_data(void const* key)
+        {
+            if(tss_data_node* const current_node=find_tss_data(key))
+            {
+                return current_node->value;
+            }
+            return 0;
+        }
+
+        void add_new_tss_node(void const* key,
+                              pdalboost::shared_ptr<tss_cleanup_function> func,
+                              void* tss_data)
+        {
+            detail::thread_data_base* const current_thread_data(get_or_make_current_thread_data());
+            current_thread_data->tss_data.insert(std::make_pair(key,tss_data_node(func,tss_data)));
+        }
+
+        void erase_tss_node(void const* key)
+        {
+            detail::thread_data_base* const current_thread_data(get_current_thread_data());
+            if(current_thread_data)
+            {
+                current_thread_data->tss_data.erase(key);
+            }
+        }
+
+        void set_tss_data(void const* key,
+                          pdalboost::shared_ptr<tss_cleanup_function> func,
+                          void* tss_data,bool cleanup_existing)
+        {
+            if(tss_data_node* const current_node=find_tss_data(key))
+            {
+                if(cleanup_existing && current_node->func && (current_node->value!=0))
+                {
+                    (*current_node->func)(current_node->value);
+                }
+                if(func || (tss_data!=0))
+                {
+                    current_node->func=func;
+                    current_node->value=tss_data;
+                }
+                else
+                {
+                    erase_tss_node(key);
+                }
+            }
+            else if(func || (tss_data!=0))
+            {
+                add_new_tss_node(key,func,tss_data);
+            }
+        }
+    }
+
+    BOOST_THREAD_DECL void notify_all_pdalboostat_thread_exit(condition_variable& cond, unique_lock<mutex> lk)
+    {
+      detail::thread_data_base* const current_thread_data(detail::get_current_thread_data());
+      if(current_thread_data)
+      {
+        current_thread_data->notify_all_pdalboostat_thread_exit(&cond, lk.release());
+      }
+    }
+namespace detail {
+
+    void BOOST_THREAD_DECL make_ready_pdalboostat_thread_exit(shared_ptr<shared_state_base> as)
+    {
+      detail::thread_data_base* const current_thread_data(detail::get_current_thread_data());
+      if(current_thread_data)
+      {
+        current_thread_data->make_ready_pdalboostat_thread_exit(as);
+      }
+    }
+}
+
+
+
+}
diff --git a/vendor/pdalboost/libs/thread/src/tss_null.cpp b/vendor/pdalboost/libs/thread/src/tss_null.cpp
new file mode 100644
index 0000000..c72495b
--- /dev/null
+++ b/vendor/pdalboost/libs/thread/src/tss_null.cpp
@@ -0,0 +1,38 @@
+// (C) Copyright Michael Glassford 2004.
+// (C) Copyright 2007 Anthony Williams
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/thread/detail/config.hpp>
+
+#if defined(BOOST_HAS_WINTHREADS) && (defined(BOOST_THREAD_BUILD_LIB) || defined(BOOST_THREAD_TEST) || defined(UNDER_CE)) && (!defined(_MSC_VER) || defined(UNDER_CE))
+
+namespace pdalboost
+{
+    /*
+    This file is a "null" implementation of tss cleanup; it's
+    purpose is to to eliminate link errors in cases
+    where it is known that tss cleanup is not needed.
+    */
+
+    void pdalboosttss_cleanup_implemented(void)
+    {
+        /*
+        This function's sole purpose is to cause a link error in cases where
+        automatic tss cleanup is not implemented by Boost.Threads as a
+        reminder that user code is responsible for calling the necessary
+        functions at the appropriate times (and for implementing an a
+        pdalboosttss_cleanup_implemented() function to eliminate the linker's
+        missing symbol error).
+
+        If Boost.Threads later implements automatic tss cleanup in cases
+        where it currently doesn't (which is the plan), the duplicate
+        symbol error will warn the user that their custom solution is no
+        longer needed and can be removed.
+        */
+    }
+
+}
+
+#endif //defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_LIB) && !defined(_MSC_VER)
diff --git a/vendor/pdalboost/libs/thread/src/win32/thread.cpp b/vendor/pdalboost/libs/thread/src/win32/thread.cpp
new file mode 100644
index 0000000..051bb26
--- /dev/null
+++ b/vendor/pdalboost/libs/thread/src/win32/thread.cpp
@@ -0,0 +1,1048 @@
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007 David Deakins
+// (C) Copyright 2011-2013 Vicente J. Botet Escriba
+
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x400
+#endif
+
+#ifndef WINVER
+#define WINVER 0x400
+#endif
+//#define BOOST_THREAD_VERSION 3
+
+#include <boost/thread/thread_only.hpp>
+#include <boost/thread/once.hpp>
+#include <boost/thread/tss.hpp>
+#include <boost/thread/condition_variable.hpp>
+#include <boost/thread/detail/tss_hooks.hpp>
+#include <boost/thread/future.hpp>
+#include <boost/assert.hpp>
+#include <boost/cstdint.hpp>
+#if defined BOOST_THREAD_USES_DATETIME
+#include <boost/date_time/posix_time/conversion.hpp>
+#endif
+#include <boost/thread/csbl/memory/unique_ptr.hpp>
+#include <memory>
+#include <algorithm>
+#ifndef UNDER_CE
+#include <process.h>
+#endif
+#include <stdio.h>
+#include <windows.h>
+#include <boost/predef/platform.h>
+
+#if BOOST_PLAT_WINDOWS_RUNTIME
+#include <mutex>
+#include <atomic>
+#include <Activation.h>
+#include <wrl\client.h>
+#include <wrl\event.h>
+#include <wrl\wrappers\corewrappers.h>
+#include <wrl\ftm.h>
+#include <windows.system.threading.h>
+#pragma comment(lib, "runtimeobject.lib")
+#endif
+
+namespace pdalboost
+{
+  namespace detail
+  {
+    thread_data_base::~thread_data_base()
+    {
+        for (notify_list_t::iterator i = notify.begin(), e = notify.end();
+                i != e; ++i)
+        {
+            i->second->unlock();
+            i->first->notify_all();
+        }
+        for (async_states_t::iterator i = async_states_.begin(), e = async_states_.end();
+                i != e; ++i)
+        {
+            (*i)->make_ready();
+        }
+    }
+  }
+
+    namespace
+    {
+#ifdef BOOST_THREAD_PROVIDES_ONCE_CXX11
+        pdalboost::once_flag current_thread_tls_init_flag;
+#else
+        pdalboost::once_flag current_thread_tls_init_flag=BOOST_ONCE_INIT;
+#endif
+#if defined(UNDER_CE)
+        // Windows CE does not define the TLS_OUT_OF_INDEXES constant.
+#define TLS_OUT_OF_INDEXES 0xFFFFFFFF
+#endif
+#if !BOOST_PLAT_WINDOWS_RUNTIME
+        DWORD current_thread_tls_key=TLS_OUT_OF_INDEXES;
+#else
+        __declspec(thread) pdalboost::detail::thread_data_base* current_thread_data_base;
+#endif
+
+        void create_current_thread_tls_key()
+        {
+            pdalboosttss_cleanup_implemented(); // if anyone uses TSS, we need the cleanup linked in
+#if !BOOST_PLAT_WINDOWS_RUNTIME
+            current_thread_tls_key=TlsAlloc();
+            BOOST_ASSERT(current_thread_tls_key!=TLS_OUT_OF_INDEXES);
+#endif
+        }
+
+        void cleanup_tls_key()
+        {
+#if !BOOST_PLAT_WINDOWS_RUNTIME
+            if(current_thread_tls_key!=TLS_OUT_OF_INDEXES)
+            {
+                TlsFree(current_thread_tls_key);
+                current_thread_tls_key=TLS_OUT_OF_INDEXES;
+            }
+#endif
+        }
+
+        void set_current_thread_data(detail::thread_data_base* new_data)
+        {
+            pdalboost::call_once(current_thread_tls_init_flag,create_current_thread_tls_key);
+#if BOOST_PLAT_WINDOWS_RUNTIME
+            current_thread_data_base = new_data;
+#else
+            if (current_thread_tls_key != TLS_OUT_OF_INDEXES)
+            {
+                BOOST_VERIFY(TlsSetValue(current_thread_tls_key, new_data));
+            }
+            else
+            {
+                BOOST_VERIFY(false);
+                //pdalboost::throw_exception(thread_resource_error());
+            }
+#endif
+        }
+    }
+
+    namespace detail
+    {
+      thread_data_base* get_current_thread_data()
+      {
+#if BOOST_PLAT_WINDOWS_RUNTIME
+          return current_thread_data_base;
+#else
+          if (current_thread_tls_key == TLS_OUT_OF_INDEXES)
+          {
+              return 0;
+          }
+          return (detail::thread_data_base*)TlsGetValue(current_thread_tls_key);
+#endif
+      }
+    }
+
+    namespace
+    {
+#ifndef BOOST_HAS_THREADEX
+// Windows CE doesn't define _beginthreadex
+
+        struct ThreadProxyData
+        {
+            typedef unsigned (__stdcall* func)(void*);
+            func start_address_;
+            void* arglist_;
+            ThreadProxyData(func start_address,void* arglist) : start_address_(start_address), arglist_(arglist) {}
+        };
+
+        DWORD WINAPI ThreadProxy(LPVOID args)
+        {
+            pdalboost::csbl::unique_ptr<ThreadProxyData> data(reinterpret_cast<ThreadProxyData*>(args));
+            DWORD ret=data->start_address_(data->arglist_);
+            return ret;
+        }
+
+        //typedef void* uintptr_t;
+
+        inline uintptr_t _beginthreadex(void* security, unsigned stack_size, unsigned (__stdcall* start_address)(void*),
+                                              void* arglist, unsigned initflag, unsigned* thrdaddr)
+        {
+            DWORD threadID;
+            ThreadProxyData* data = new ThreadProxyData(start_address,arglist);
+            HANDLE hthread=CreateThread(static_cast<LPSECURITY_ATTRIBUTES>(security),stack_size,ThreadProxy,
+                                        data,initflag,&threadID);
+            if (hthread==0) {
+              delete data;
+              return 0;
+            }
+            *thrdaddr=threadID;
+            return reinterpret_cast<uintptr_t const>(hthread);
+        }
+
+#endif
+
+    }
+
+    namespace detail
+    {
+        struct thread_exit_callback_node
+        {
+            pdalboost::detail::thread_exit_function_base* func;
+            thread_exit_callback_node* next;
+
+            thread_exit_callback_node(pdalboost::detail::thread_exit_function_base* func_,
+                                      thread_exit_callback_node* next_):
+                func(func_),next(next_)
+            {}
+        };
+
+    }
+
+#if BOOST_PLAT_WINDOWS_RUNTIME
+    namespace detail
+    {
+        std::atomic_uint threadCount;
+
+        bool win32::scoped_winrt_thread::start(thread_func address, void *parameter, unsigned int *thrdId)
+        {
+            Microsoft::WRL::ComPtr<ABI::Windows::System::Threading::IThreadPoolStatics> threadPoolFactory;
+            HRESULT hr = ::Windows::Foundation::GetActivationFactory(
+                Microsoft::WRL::Wrappers::HStringReference(RuntimeClass_Windows_System_Threading_ThreadPool).Get(),
+                &threadPoolFactory);
+            if (hr != S_OK)
+            {
+                return false;
+            }
+
+            // Create event for tracking work item completion.
+            *thrdId = ++threadCount;
+            handle completionHandle = CreateEventExW(NULL, NULL, 0, EVENT_ALL_ACCESS);
+            if (!completionHandle)
+            {
+                return false;
+            }
+            m_completionHandle = completionHandle;
+
+            // Create new work item.
+            Microsoft::WRL::ComPtr<ABI::Windows::System::Threading::IWorkItemHandler> workItem =
+                Microsoft::WRL::Callback<Microsoft::WRL::Implements<Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>, ABI::Windows::System::Threading::IWorkItemHandler, Microsoft::WRL::FtmBase>>
+                ([address, parameter, completionHandle](ABI::Windows::Foundation::IAsyncAction *)
+            {
+                // Add a reference since we need to access the completionHandle after the thread_start_function.
+                // This is to handle cases where detach() was called and run_thread_exit_callbacks() would end
+                // up closing the handle.
+                ::pdalboost::detail::thread_data_base* const thread_info(reinterpret_cast<::pdalboost::detail::thread_data_base*>(parameter));
+                intrusive_ptr_add_ref(thread_info);
+
+                __try
+                {
+                    address(parameter);
+                }
+                __finally
+                {
+                    SetEvent(completionHandle);
+                    intrusive_ptr_release(thread_info);
+                }
+                return S_OK;
+            });
+
+            // Schedule work item on the threadpool.
+            Microsoft::WRL::ComPtr<ABI::Windows::Foundation::IAsyncAction> asyncAction;
+            hr = threadPoolFactory->RunWithPriorityAndOptionsAsync(
+                workItem.Get(),
+                ABI::Windows::System::Threading::WorkItemPriority_Normal,
+                ABI::Windows::System::Threading::WorkItemOptions_TimeSliced,
+                &asyncAction);
+            return hr == S_OK;
+        }
+    }
+#endif
+
+    namespace
+    {
+        void run_thread_exit_callbacks()
+        {
+            detail::thread_data_ptr current_thread_data(detail::get_current_thread_data(),false);
+            if(current_thread_data)
+            {
+                while(! current_thread_data->tss_data.empty() || current_thread_data->thread_exit_callbacks)
+                {
+                    while(current_thread_data->thread_exit_callbacks)
+                    {
+                        detail::thread_exit_callback_node* const current_node=current_thread_data->thread_exit_callbacks;
+                        current_thread_data->thread_exit_callbacks=current_node->next;
+                        if(current_node->func)
+                        {
+                            (*current_node->func)();
+                            pdalboost::detail::heap_delete(current_node->func);
+                        }
+                        pdalboost::detail::heap_delete(current_node);
+                    }
+                    while (!current_thread_data->tss_data.empty())
+                    {
+                        std::map<void const*,detail::tss_data_node>::iterator current
+                            = current_thread_data->tss_data.begin();
+                        if(current->second.func && (current->second.value!=0))
+                        {
+                            (*current->second.func)(current->second.value);
+                        }
+                        current_thread_data->tss_data.erase(current);
+                    }
+                }
+                set_current_thread_data(0);
+            }
+        }
+
+        unsigned __stdcall thread_start_function(void* param)
+        {
+            detail::thread_data_base* const thread_info(reinterpret_cast<detail::thread_data_base*>(param));
+            set_current_thread_data(thread_info);
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+            BOOST_TRY
+            {
+#endif
+                thread_info->run();
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+            }
+            BOOST_CATCH(thread_interrupted const&)
+            {
+            }
+// Removed as it stops the debugger identifying the cause of the exception
+// Unhandled exceptions still cause the application to terminate
+//             BOOST_CATCH(...)
+//             {
+//                 std::terminate();
+//             }
+            BOOST_CATCH_END
+#endif
+            run_thread_exit_callbacks();
+            return 0;
+        }
+    }
+
+    thread::thread() BOOST_NOEXCEPT
+    {}
+
+    bool thread::start_thread_noexcept()
+    {
+#if BOOST_PLAT_WINDOWS_RUNTIME
+         intrusive_ptr_add_ref(thread_info.get());
+         if (!thread_info->thread_handle.start(&thread_start_function, thread_info.get(), &thread_info->id))
+         {
+             intrusive_ptr_release(thread_info.get());
+//           pdalboost::throw_exception(thread_resource_error());
+             return false;
+         }
+         return true;
+#else
+        uintptr_t const new_thread=_beginthreadex(0,0,&thread_start_function,thread_info.get(),CREATE_SUSPENDED,&thread_info->id);
+        if(!new_thread)
+        {
+            return false;
+//            pdalboost::throw_exception(thread_resource_error());
+        }
+        intrusive_ptr_add_ref(thread_info.get());
+        thread_info->thread_handle=(detail::win32::handle)(new_thread);
+        ResumeThread(thread_info->thread_handle);
+        return true;
+#endif
+    }
+
+    bool thread::start_thread_noexcept(const attributes& attr)
+    {
+#if BOOST_PLAT_WINDOWS_RUNTIME
+        // Stack size isn't supported with Windows Runtime.
+        attr;
+        return start_thread_noexcept();
+#else
+      //uintptr_t const new_thread=_beginthreadex(attr.get_security(),attr.get_stack_size(),&thread_start_function,thread_info.get(),CREATE_SUSPENDED,&thread_info->id);
+      uintptr_t const new_thread=_beginthreadex(0,static_cast<unsigned int>(attr.get_stack_size()),&thread_start_function,thread_info.get(),CREATE_SUSPENDED,&thread_info->id);
+      if(!new_thread)
+      {
+        return false;
+//          pdalboost::throw_exception(thread_resource_error());
+      }
+      intrusive_ptr_add_ref(thread_info.get());
+      thread_info->thread_handle=(detail::win32::handle)(new_thread);
+      ResumeThread(thread_info->thread_handle);
+      return true;
+#endif
+    }
+
+    thread::thread(detail::thread_data_ptr data):
+        thread_info(data)
+    {}
+
+    namespace
+    {
+        struct externally_launched_thread:
+            detail::thread_data_base
+        {
+            externally_launched_thread()
+            {
+                ++count;
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+                interruption_enabled=false;
+#endif
+            }
+            ~externally_launched_thread() {
+              BOOST_ASSERT(notify.empty());
+              notify.clear();
+              BOOST_ASSERT(async_states_.empty());
+              async_states_.clear();
+            }
+
+            void run()
+            {}
+            void notify_all_pdalboostat_thread_exit(condition_variable*, mutex*)
+            {}
+
+        private:
+            externally_launched_thread(externally_launched_thread&);
+            void operator=(externally_launched_thread&);
+        };
+
+        void make_external_thread_data()
+        {
+            externally_launched_thread* me=detail::heap_new<externally_launched_thread>();
+            BOOST_TRY
+            {
+                set_current_thread_data(me);
+            }
+            BOOST_CATCH(...)
+            {
+                detail::heap_delete(me);
+                BOOST_RETHROW
+            }
+            BOOST_CATCH_END
+        }
+
+        detail::thread_data_base* get_or_make_current_thread_data()
+        {
+            detail::thread_data_base* current_thread_data(detail::get_current_thread_data());
+            if(!current_thread_data)
+            {
+                make_external_thread_data();
+                current_thread_data=detail::get_current_thread_data();
+            }
+            return current_thread_data;
+        }
+    }
+
+    thread::id thread::get_id() const BOOST_NOEXCEPT
+    {
+#if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
+        detail::thread_data_ptr local_thread_info=(get_thread_info)();
+        if(!local_thread_info)
+        {
+            return 0;
+        }
+        return local_thread_info->id;
+#else
+        return thread::id((get_thread_info)());
+#endif
+    }
+
+    bool thread::joinable() const BOOST_NOEXCEPT
+    {
+        detail::thread_data_ptr local_thread_info = (get_thread_info)();
+        if(!local_thread_info)
+        {
+            return false;
+        }
+        return true;
+    }
+    bool thread::join_noexcept()
+    {
+        detail::thread_data_ptr local_thread_info=(get_thread_info)();
+        if(local_thread_info)
+        {
+            this_thread::interruptible_wait(this->native_handle(),detail::timeout::sentinel());
+            release_handle();
+            return true;
+        }
+        else
+        {
+          return false;
+        }
+    }
+
+#if defined BOOST_THREAD_USES_DATETIME
+    bool thread::timed_join(pdalboost::system_time const& wait_until)
+    {
+      return do_try_join_until(get_milliseconds_until(wait_until));
+    }
+#endif
+    bool thread::do_try_join_until_noexcept(uintmax_t milli, bool& res)
+    {
+      detail::thread_data_ptr local_thread_info=(get_thread_info)();
+      if(local_thread_info)
+      {
+          if(!this_thread::interruptible_wait(this->native_handle(),milli))
+          {
+            res=false;
+            return true;
+          }
+          release_handle();
+          res=true;
+          return true;
+      }
+      else
+      {
+        return false;
+      }
+    }
+
+    void thread::detach()
+    {
+        release_handle();
+    }
+
+    void thread::release_handle()
+    {
+        thread_info=0;
+    }
+
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+    void thread::interrupt()
+    {
+        detail::thread_data_ptr local_thread_info=(get_thread_info)();
+        if(local_thread_info)
+        {
+            local_thread_info->interrupt();
+        }
+    }
+
+    bool thread::interruption_requested() const BOOST_NOEXCEPT
+    {
+        detail::thread_data_ptr local_thread_info=(get_thread_info)();
+        return local_thread_info.get() && (detail::win32::WaitForSingleObjectEx(local_thread_info->interruption_handle,0,0)==0);
+    }
+
+#endif
+
+    unsigned thread::hardware_concurrency() BOOST_NOEXCEPT
+    {
+        detail::win32::system_info info;
+        detail::win32::get_system_info(&info);
+        return info.dwNumberOfProcessors;
+    }
+
+    unsigned thread::physical_concurrency() BOOST_NOEXCEPT
+    {
+      // a bit too strict: Windows XP with SP3 would be sufficient
+#if BOOST_PLAT_WINDOWS_RUNTIME                                    \
+    || ( BOOST_USE_WINAPI_VERSION <= BOOST_WINAPI_VERSION_WINXP ) \
+    || ( ( defined(__MINGW32__) && !defined(__MINGW64__) ) && _WIN32_WINNT < 0x0600)
+        return 0;
+#else
+        unsigned cores = 0;
+        DWORD size = 0;
+
+        GetLogicalProcessorInformation(NULL, &size);
+        if (ERROR_INSUFFICIENT_BUFFER != GetLastError())
+            return 0;
+
+        std::vector<SYSTEM_LOGICAL_PROCESSOR_INFORMATION> buffer(size);
+        if (GetLogicalProcessorInformation(&buffer.front(), &size) == FALSE)
+            return 0;
+
+        const size_t Elements = size / sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
+
+        for (size_t i = 0; i < Elements; ++i) {
+            if (buffer[i].Relationship == RelationProcessorCore)
+                ++cores;
+        }
+        return cores;
+#endif
+    }
+
+    thread::native_handle_type thread::native_handle()
+    {
+        detail::thread_data_ptr local_thread_info=(get_thread_info)();
+        if(!local_thread_info)
+        {
+            return detail::win32::invalid_handle_value;
+        }
+#if BOOST_PLAT_WINDOWS_RUNTIME
+        // There is no 'real' Win32 handle so we return a handle that at least can be waited on.
+        return local_thread_info->thread_handle.waitable_handle();
+#else
+        return (detail::win32::handle)local_thread_info->thread_handle;
+#endif
+    }
+
+    detail::thread_data_ptr thread::get_thread_info BOOST_PREVENT_MACRO_SUBSTITUTION () const
+    {
+        return thread_info;
+    }
+
+    namespace this_thread
+    {
+        namespace
+        {
+            LARGE_INTEGER get_due_time(detail::timeout const&  target_time)
+            {
+                LARGE_INTEGER due_time={{0,0}};
+                if(target_time.relative)
+                {
+                    detail::win32::ticks_type const elapsed_milliseconds=detail::win32::GetTickCount64_()()-target_time.start;
+                    LONGLONG const remaining_milliseconds=(target_time.milliseconds-elapsed_milliseconds);
+                    LONGLONG const hundred_nanoseconds_in_one_millisecond=10000;
+
+                    if(remaining_milliseconds>0)
+                    {
+                        due_time.QuadPart=-(remaining_milliseconds*hundred_nanoseconds_in_one_millisecond);
+                    }
+                }
+                else
+                {
+                    SYSTEMTIME target_system_time={0,0,0,0,0,0,0,0};
+                    target_system_time.wYear=target_time.abs_time.date().year();
+                    target_system_time.wMonth=target_time.abs_time.date().month();
+                    target_system_time.wDay=target_time.abs_time.date().day();
+                    target_system_time.wHour=(WORD)target_time.abs_time.time_of_day().hours();
+                    target_system_time.wMinute=(WORD)target_time.abs_time.time_of_day().minutes();
+                    target_system_time.wSecond=(WORD)target_time.abs_time.time_of_day().seconds();
+
+                    if(!SystemTimeToFileTime(&target_system_time,((FILETIME*)&due_time)))
+                    {
+                        due_time.QuadPart=0;
+                    }
+                    else
+                    {
+                        long const hundred_nanoseconds_in_one_second=10000000;
+                        posix_time::time_duration::tick_type const ticks_per_second=
+                            target_time.abs_time.time_of_day().ticks_per_second();
+                        if(ticks_per_second>hundred_nanoseconds_in_one_second)
+                        {
+                            posix_time::time_duration::tick_type const
+                                ticks_per_hundred_nanoseconds=
+                                ticks_per_second/hundred_nanoseconds_in_one_second;
+                            due_time.QuadPart+=
+                                target_time.abs_time.time_of_day().fractional_seconds()/
+                                ticks_per_hundred_nanoseconds;
+                        }
+                        else
+                        {
+                            due_time.QuadPart+=
+                                target_time.abs_time.time_of_day().fractional_seconds()*
+                                (hundred_nanoseconds_in_one_second/ticks_per_second);
+                        }
+                    }
+                }
+                return due_time;
+            }
+        }
+
+#ifndef UNDER_CE
+#if !BOOST_PLAT_WINDOWS_RUNTIME
+        namespace detail_
+        {
+            typedef struct _REASON_CONTEXT {
+                ULONG Version;
+                DWORD Flags;
+                union {
+                    LPWSTR SimpleReasonString;
+                    struct {
+                        HMODULE LocalizedReasonModule;
+                        ULONG   LocalizedReasonId;
+                        ULONG   ReasonStringCount;
+                        LPWSTR  *ReasonStrings;
+                    } Detailed;
+                } Reason;
+            } REASON_CONTEXT, *PREASON_CONTEXT;
+            //static REASON_CONTEXT default_reason_context={0/*POWER_REQUEST_CONTEXT_VERSION*/, 0x00000001/*POWER_REQUEST_CONTEXT_SIMPLE_STRING*/, (LPWSTR)L"generic"};
+            typedef BOOL (WINAPI *setwaitabletimerex_t)(HANDLE, const LARGE_INTEGER *, LONG, PTIMERAPCROUTINE, LPVOID, PREASON_CONTEXT, ULONG);
+            static inline BOOL WINAPI SetWaitableTimerEx_emulation(HANDLE hTimer, const LARGE_INTEGER *lpDueTime, LONG lPeriod, PTIMERAPCROUTINE pfnCompletionRoutine, LPVOID lpArgToCompletionRoutine, PREASON_CONTEXT WakeContext, ULONG TolerableDelay)
+            {
+                return SetWaitableTimer(hTimer, lpDueTime, lPeriod, pfnCompletionRoutine, lpArgToCompletionRoutine, FALSE);
+            }
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable: 6387) // MSVC sanitiser warns that GetModuleHandleA() might fail
+#endif
+            static inline setwaitabletimerex_t SetWaitableTimerEx()
+            {
+                static setwaitabletimerex_t setwaitabletimerex_impl;
+                if(setwaitabletimerex_impl)
+                    return setwaitabletimerex_impl;
+                void (*addr)()=(void (*)()) GetProcAddress(
+#if !defined(BOOST_NO_ANSI_APIS)
+                    GetModuleHandleA("KERNEL32.DLL"),
+#else
+                    GetModuleHandleW(L"KERNEL32.DLL"),
+#endif
+                    "SetWaitableTimerEx");
+                if(addr)
+                    setwaitabletimerex_impl=(setwaitabletimerex_t) addr;
+                else
+                    setwaitabletimerex_impl=&SetWaitableTimerEx_emulation;
+                return setwaitabletimerex_impl;
+            }
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+        }
+#endif
+#endif
+        bool interruptible_wait(detail::win32::handle handle_to_wait_for,detail::timeout target_time)
+        {
+            detail::win32::handle handles[4]={0};
+            unsigned handle_count=0;
+            unsigned wait_handle_index=~0U;
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+            unsigned interruption_index=~0U;
+#endif
+            unsigned timeout_index=~0U;
+            if(handle_to_wait_for!=detail::win32::invalid_handle_value)
+            {
+                wait_handle_index=handle_count;
+                handles[handle_count++]=handle_to_wait_for;
+            }
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+            if(detail::get_current_thread_data() && detail::get_current_thread_data()->interruption_enabled)
+            {
+                interruption_index=handle_count;
+                handles[handle_count++]=detail::get_current_thread_data()->interruption_handle;
+            }
+#endif
+            detail::win32::handle_manager timer_handle;
+
+#ifndef UNDER_CE
+#if !BOOST_PLAT_WINDOWS_RUNTIME
+            // Preferentially use coalescing timers for better power consumption and timer accuracy
+            if(!target_time.is_sentinel())
+            {
+                detail::timeout::remaining_time const time_left=target_time.remaining_milliseconds();
+                timer_handle=CreateWaitableTimer(NULL,false,NULL);
+                if(timer_handle!=0)
+                {
+                    ULONG tolerable=32; // Empirical testing shows Windows ignores this when <= 26
+                    if(time_left.milliseconds/20>tolerable)  // 5%
+                        tolerable=time_left.milliseconds/20;
+                    LARGE_INTEGER due_time=get_due_time(target_time);
+                    //bool const set_time_succeeded=detail_::SetWaitableTimerEx()(timer_handle,&due_time,0,0,0,&detail_::default_reason_context,tolerable)!=0;
+                    bool const set_time_succeeded=detail_::SetWaitableTimerEx()(timer_handle,&due_time,0,0,0,NULL,tolerable)!=0;
+                    if(set_time_succeeded)
+                    {
+                        timeout_index=handle_count;
+                        handles[handle_count++]=timer_handle;
+                    }
+                }
+            }
+#endif
+#endif
+
+            bool const using_timer=timeout_index!=~0u;
+            detail::timeout::remaining_time time_left(0);
+
+            do
+            {
+                if(!using_timer)
+                {
+                    time_left=target_time.remaining_milliseconds();
+                }
+
+                if(handle_count)
+                {
+                    unsigned long const notified_index=detail::win32::WaitForMultipleObjectsEx(handle_count,handles,false,using_timer?INFINITE:time_left.milliseconds, 0);
+                    if(notified_index<handle_count)
+                    {
+                        if(notified_index==wait_handle_index)
+                        {
+                            return true;
+                        }
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+                        else if(notified_index==interruption_index)
+                        {
+                            detail::win32::ResetEvent(detail::get_current_thread_data()->interruption_handle);
+                            throw thread_interrupted();
+                        }
+#endif
+                        else if(notified_index==timeout_index)
+                        {
+                            return false;
+                        }
+                    }
+                }
+                else
+                {
+                    detail::win32::sleep(time_left.milliseconds);
+                }
+                if(target_time.relative)
+                {
+                    target_time.milliseconds-=detail::timeout::max_non_infinite_wait;
+                }
+            }
+            while(time_left.more);
+            return false;
+        }
+
+        namespace no_interruption_point
+        {
+        bool non_interruptible_wait(detail::win32::handle handle_to_wait_for,detail::timeout target_time)
+        {
+            detail::win32::handle handles[3]={0};
+            unsigned handle_count=0;
+            unsigned wait_handle_index=~0U;
+            unsigned timeout_index=~0U;
+            if(handle_to_wait_for!=detail::win32::invalid_handle_value)
+            {
+                wait_handle_index=handle_count;
+                handles[handle_count++]=handle_to_wait_for;
+            }
+            detail::win32::handle_manager timer_handle;
+
+#ifndef UNDER_CE
+#if !BOOST_PLAT_WINDOWS_RUNTIME
+            // Preferentially use coalescing timers for better power consumption and timer accuracy
+            if(!target_time.is_sentinel())
+            {
+                detail::timeout::remaining_time const time_left=target_time.remaining_milliseconds();
+                timer_handle=CreateWaitableTimer(NULL,false,NULL);
+                if(timer_handle!=0)
+                {
+                    ULONG tolerable=32; // Empirical testing shows Windows ignores this when <= 26
+                    if(time_left.milliseconds/20>tolerable)  // 5%
+                        tolerable=time_left.milliseconds/20;
+                    LARGE_INTEGER due_time=get_due_time(target_time);
+                    //bool const set_time_succeeded=detail_::SetWaitableTimerEx()(timer_handle,&due_time,0,0,0,&detail_::default_reason_context,tolerable)!=0;
+                    bool const set_time_succeeded=detail_::SetWaitableTimerEx()(timer_handle,&due_time,0,0,0,NULL,tolerable)!=0;
+                    if(set_time_succeeded)
+                    {
+                        timeout_index=handle_count;
+                        handles[handle_count++]=timer_handle;
+                    }
+                }
+            }
+#endif
+#endif
+
+            bool const using_timer=timeout_index!=~0u;
+            detail::timeout::remaining_time time_left(0);
+
+            do
+            {
+                if(!using_timer)
+                {
+                    time_left=target_time.remaining_milliseconds();
+                }
+
+                if(handle_count)
+                {
+                    unsigned long const notified_index=detail::win32::WaitForMultipleObjectsEx(handle_count,handles,false,using_timer?INFINITE:time_left.milliseconds, 0);
+                    if(notified_index<handle_count)
+                    {
+                        if(notified_index==wait_handle_index)
+                        {
+                            return true;
+                        }
+                        else if(notified_index==timeout_index)
+                        {
+                            return false;
+                        }
+                    }
+                }
+                else
+                {
+                    detail::win32::sleep(time_left.milliseconds);
+                }
+                if(target_time.relative)
+                {
+                    target_time.milliseconds-=detail::timeout::max_non_infinite_wait;
+                }
+            }
+            while(time_left.more);
+            return false;
+        }
+        }
+
+        thread::id get_id() BOOST_NOEXCEPT
+        {
+#if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
+#if BOOST_PLAT_WINDOWS_RUNTIME
+            detail::thread_data_base* current_thread_data(detail::get_current_thread_data());
+            if (current_thread_data)
+            {
+                return current_thread_data->id;
+            }
+#endif
+            return detail::win32::GetCurrentThreadId();
+#else
+            return thread::id(get_or_make_current_thread_data());
+#endif
+        }
+
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+        void interruption_point()
+        {
+            if(interruption_enabled() && interruption_requested())
+            {
+                detail::win32::ResetEvent(detail::get_current_thread_data()->interruption_handle);
+                throw thread_interrupted();
+            }
+        }
+
+        bool interruption_enabled() BOOST_NOEXCEPT
+        {
+            return detail::get_current_thread_data() && detail::get_current_thread_data()->interruption_enabled;
+        }
+
+        bool interruption_requested() BOOST_NOEXCEPT
+        {
+            return detail::get_current_thread_data() && (detail::win32::WaitForSingleObjectEx(detail::get_current_thread_data()->interruption_handle,0,0)==0);
+        }
+#endif
+
+        void yield() BOOST_NOEXCEPT
+        {
+            detail::win32::sleep(0);
+        }
+
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+        disable_interruption::disable_interruption() BOOST_NOEXCEPT:
+            interruption_was_enabled(interruption_enabled())
+        {
+            if(interruption_was_enabled)
+            {
+                detail::get_current_thread_data()->interruption_enabled=false;
+            }
+        }
+
+        disable_interruption::~disable_interruption() BOOST_NOEXCEPT
+        {
+            if(detail::get_current_thread_data())
+            {
+                detail::get_current_thread_data()->interruption_enabled=interruption_was_enabled;
+            }
+        }
+
+        restore_interruption::restore_interruption(disable_interruption& d) BOOST_NOEXCEPT
+        {
+            if(d.interruption_was_enabled)
+            {
+                detail::get_current_thread_data()->interruption_enabled=true;
+            }
+        }
+
+        restore_interruption::~restore_interruption() BOOST_NOEXCEPT
+        {
+            if(detail::get_current_thread_data())
+            {
+                detail::get_current_thread_data()->interruption_enabled=false;
+            }
+        }
+#endif
+    }
+
+    namespace detail
+    {
+        void add_thread_exit_function(thread_exit_function_base* func)
+        {
+            detail::thread_data_base* const current_thread_data(get_or_make_current_thread_data());
+            thread_exit_callback_node* const new_node=
+                heap_new<thread_exit_callback_node>(
+                    func,current_thread_data->thread_exit_callbacks);
+            current_thread_data->thread_exit_callbacks=new_node;
+        }
+
+        tss_data_node* find_tss_data(void const* key)
+        {
+            detail::thread_data_base* const current_thread_data(get_current_thread_data());
+            if(current_thread_data)
+            {
+                std::map<void const*,tss_data_node>::iterator current_node=
+                    current_thread_data->tss_data.find(key);
+                if(current_node!=current_thread_data->tss_data.end())
+                {
+                    return &current_node->second;
+                }
+            }
+            return NULL;
+        }
+
+        void* get_tss_data(void const* key)
+        {
+            if(tss_data_node* const current_node=find_tss_data(key))
+            {
+                return current_node->value;
+            }
+            return NULL;
+        }
+
+        void add_new_tss_node(void const* key,
+                              pdalboost::shared_ptr<tss_cleanup_function> func,
+                              void* tss_data)
+        {
+            detail::thread_data_base* const current_thread_data(get_or_make_current_thread_data());
+            current_thread_data->tss_data.insert(std::make_pair(key,tss_data_node(func,tss_data)));
+        }
+
+        void erase_tss_node(void const* key)
+        {
+            detail::thread_data_base* const current_thread_data(get_or_make_current_thread_data());
+            current_thread_data->tss_data.erase(key);
+        }
+
+        void set_tss_data(void const* key,
+                          pdalboost::shared_ptr<tss_cleanup_function> func,
+                          void* tss_data,bool cleanup_existing)
+        {
+            if(tss_data_node* const current_node=find_tss_data(key))
+            {
+                if(cleanup_existing && current_node->func && (current_node->value!=0))
+                {
+                    (*current_node->func)(current_node->value);
+                }
+                if(func || (tss_data!=0))
+                {
+                    current_node->func=func;
+                    current_node->value=tss_data;
+                }
+                else
+                {
+                    erase_tss_node(key);
+                }
+            }
+            else if(func || (tss_data!=0))
+            {
+                add_new_tss_node(key,func,tss_data);
+            }
+        }
+    }
+
+    BOOST_THREAD_DECL void __cdecl pdalbooston_process_enter()
+    {}
+
+    BOOST_THREAD_DECL void __cdecl pdalbooston_thread_enter()
+    {}
+
+    BOOST_THREAD_DECL void __cdecl pdalbooston_process_exit()
+    {
+        pdalboost::cleanup_tls_key();
+    }
+
+    BOOST_THREAD_DECL void __cdecl pdalbooston_thread_exit()
+    {
+        pdalboost::run_thread_exit_callbacks();
+    }
+
+    BOOST_THREAD_DECL void notify_all_pdalboostat_thread_exit(condition_variable& cond, unique_lock<mutex> lk)
+    {
+      detail::thread_data_base* const current_thread_data(detail::get_current_thread_data());
+      if(current_thread_data)
+      {
+        current_thread_data->notify_all_pdalboostat_thread_exit(&cond, lk.release());
+      }
+    }
+//namespace detail {
+//
+//    void BOOST_THREAD_DECL make_ready_pdalboostat_thread_exit(shared_ptr<shared_state_base> as)
+//    {
+//      detail::thread_data_base* const current_thread_data(detail::get_current_thread_data());
+//      if(current_thread_data)
+//      {
+//        current_thread_data->make_ready_pdalboostat_thread_exit(as);
+//      }
+//    }
+//}
+}
+
diff --git a/vendor/pdalboost/libs/thread/src/win32/tss_dll.cpp b/vendor/pdalboost/libs/thread/src/win32/tss_dll.cpp
new file mode 100644
index 0000000..20acaac
--- /dev/null
+++ b/vendor/pdalboost/libs/thread/src/win32/tss_dll.cpp
@@ -0,0 +1,85 @@
+// (C) Copyright Michael Glassford 2004.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/thread/detail/config.hpp>
+
+
+#if defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_DLL)
+
+    #include <boost/thread/detail/tss_hooks.hpp>
+
+    #define WIN32_LEAN_AND_MEAN
+    #include <windows.h>
+
+    #if defined(__BORLANDC__)
+        extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE /*hInstance*/, DWORD dwReason, LPVOID /*lpReserved*/)
+    #elif defined(_WIN32_WCE)
+        extern "C" BOOL WINAPI DllMain(HANDLE /*hInstance*/, DWORD dwReason, LPVOID /*lpReserved*/)
+    #else
+        extern "C" BOOL WINAPI DllMain(HINSTANCE /*hInstance*/, DWORD dwReason, LPVOID /*lpReserved*/)
+    #endif
+    {
+        switch(dwReason)
+        {
+            case DLL_PROCESS_ATTACH:
+            {
+                pdalboost::pdalbooston_process_enter();
+                pdalboost::pdalbooston_thread_enter();
+                break;
+            }
+
+            case DLL_THREAD_ATTACH:
+            {
+                pdalboost::pdalbooston_thread_enter();
+                break;
+            }
+
+            case DLL_THREAD_DETACH:
+            {
+                pdalboost::pdalbooston_thread_exit();
+                break;
+            }
+
+            case DLL_PROCESS_DETACH:
+            {
+                pdalboost::pdalbooston_thread_exit();
+                pdalboost::pdalbooston_process_exit();
+                break;
+            }
+        }
+
+        return TRUE;
+    }
+
+namespace pdalboost
+{
+    void pdalboosttss_cleanup_implemented()
+    {
+        /*
+        This function's sole purpose is to cause a link error in cases where
+        automatic tss cleanup is not implemented by Boost.Threads as a
+        reminder that user code is responsible for calling the necessary
+        functions at the appropriate times (and for implementing an a
+        pdalboosttss_cleanup_implemented() function to eliminate the linker's
+        missing symbol error).
+
+        If Boost.Threads later implements automatic tss cleanup in cases
+        where it currently doesn't (which is the plan), the duplicate
+        symbol error will warn the user that their custom solution is no
+        longer needed and can be removed.
+        */
+    }
+}
+
+#else //defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_DLL)
+
+#ifdef _MSC_VER
+// Prevent LNK4221 warning with link=static
+namespace pdalboost { namespace link_static_warning_inhibit {
+    extern __declspec(dllexport) void foo() { }
+} }
+#endif
+
+#endif //defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_DLL)
diff --git a/vendor/pdalboost/libs/thread/src/win32/tss_pe.cpp b/vendor/pdalboost/libs/thread/src/win32/tss_pe.cpp
new file mode 100644
index 0000000..afa69b4
--- /dev/null
+++ b/vendor/pdalboost/libs/thread/src/win32/tss_pe.cpp
@@ -0,0 +1,325 @@
+// $Id$
+// (C) Copyright Aaron W. LaFramboise, Roland Schwarz, Michael Glassford 2004.
+// (C) Copyright 2007 Roland Schwarz
+// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007 David Deakins
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/thread/detail/config.hpp>
+
+#if defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_LIB) 
+
+#if (defined(__MINGW32__) && !defined(_WIN64)) || defined(__MINGW64__) || (__MINGW64_VERSION_MAJOR)
+
+#include <boost/thread/detail/tss_hooks.hpp>
+
+#include <windows.h>
+
+#include <cstdlib>
+
+namespace pdalboost
+{
+    void pdalboosttss_cleanup_implemented() {}
+}
+
+namespace {
+    void NTAPI on_tls_callback(void* , DWORD dwReason, PVOID )
+    {
+        switch (dwReason)
+        {
+        case DLL_THREAD_DETACH:
+        {
+            pdalboost::pdalbooston_thread_exit();
+            break;
+        }
+        }
+    }
+}
+
+#if defined(__MINGW64__) || (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION >3) ||             \
+    ((__MINGW32_MAJOR_VERSION==3) && (__MINGW32_MINOR_VERSION>=18))
+extern "C"
+{
+    PIMAGE_TLS_CALLBACK __crt_xl_tls_callback__ __attribute__ ((section(".CRT$XLB"))) = on_tls_callback;
+}
+#else
+extern "C" {
+
+    void (* after_ctors )() __attribute__((section(".ctors")))     = pdalboost::pdalbooston_process_enter;
+    void (* before_dtors)() __attribute__((section(".dtors")))     = pdalboost::pdalbooston_thread_exit;
+    void (* after_dtors )() __attribute__((section(".dtors.zzz"))) = pdalboost::pdalbooston_process_exit;
+
+    ULONG __tls_index__ = 0;
+    char __tls_end__ __attribute__((section(".tls$zzz"))) = 0;
+    char __tls_start__ __attribute__((section(".tls"))) = 0;
+
+
+    PIMAGE_TLS_CALLBACK __crt_xl_start__ __attribute__ ((section(".CRT$XLA"))) = 0;
+    PIMAGE_TLS_CALLBACK __crt_xl_end__ __attribute__ ((section(".CRT$XLZ"))) = 0;
+}
+extern "C" const IMAGE_TLS_DIRECTORY32 _tls_used __attribute__ ((section(".rdata$T"))) =
+{
+        (DWORD) &__tls_start__,
+        (DWORD) &__tls_end__,
+        (DWORD) &__tls_index__,
+        (DWORD) (&__crt_xl_start__+1),
+        (DWORD) 0,
+        (DWORD) 0
+};
+#endif
+
+
+#elif  defined(_MSC_VER) && !defined(UNDER_CE)
+
+    #include <boost/thread/detail/tss_hooks.hpp>
+
+    #include <stdlib.h>
+
+    #define WIN32_LEAN_AND_MEAN
+    #include <windows.h>
+
+
+// _pRawDllMainOrig can be defined by including boost/thread/win32/mfc_thread_init.hpp
+// into your dll; it ensures that MFC-Dll-initialization will be done properly
+// The following code is adapted from the MFC-Dll-init code
+/*
+ * _pRawDllMainOrig MUST be an extern const variable, which will be aliased to
+ * _pDefaultRawDllMainOrig if no real user definition is present, thanks to the
+ * alternatename directive.
+ */
+
+// work at least with _MSC_VER 1500 (MSVC++ 9.0, VS 2008)
+#if (_MSC_VER >= 1500)
+
+extern "C" {
+extern BOOL (WINAPI * const _pRawDllMainOrig)(HANDLE, DWORD, LPVOID);
+extern BOOL (WINAPI * const _pDefaultRawDllMainOrig)(HANDLE, DWORD, LPVOID) = NULL;
+#if defined (_M_IX86)
+#pragma comment(linker, "/alternatename:__pRawDllMainOrig=__pDefaultRawDllMainOrig")
+#elif defined (_M_X64) || defined (_M_ARM)
+#pragma comment(linker, "/alternatename:_pRawDllMainOrig=_pDefaultRawDllMainOrig")
+#else  /* defined (_M_X64) || defined (_M_ARM) */
+#error Unsupported platform
+#endif  /* defined (_M_X64) || defined (_M_ARM) */
+}
+
+#endif
+
+
+
+
+    //Definitions required by implementation
+
+    #if (_MSC_VER < 1300) // 1300 == VC++ 7.0
+        typedef void (__cdecl *_PVFV)();
+        #define INIRETSUCCESS
+        #define PVAPI void __cdecl
+    #else
+        typedef int (__cdecl *_PVFV)();
+        #define INIRETSUCCESS 0
+        #define PVAPI int __cdecl
+    #endif
+
+    typedef void (NTAPI* _TLSCB)(HINSTANCE, DWORD, PVOID);
+
+    //Symbols for connection to the runtime environment
+
+    extern "C"
+    {
+        extern DWORD _tls_used; //the tls directory (located in .rdata segment)
+        extern _TLSCB __xl_a[], __xl_z[];    //tls initializers */
+    }
+
+    namespace
+    {
+        //Forward declarations
+
+        static PVAPI on_tls_prepare();
+        static PVAPI on_process_init();
+        static PVAPI on_process_term();
+        static void NTAPI on_tls_callback(HINSTANCE, DWORD, PVOID);
+
+        //The .CRT$Xxx information is taken from Codeguru:
+        //http://www.codeguru.com/Cpp/misc/misc/threadsprocesses/article.php/c6945__2/
+
+#if (_MSC_VER >= 1400)
+#pragma section(".CRT$XIU",long,read)
+#pragma section(".CRT$XCU",long,read)
+#pragma section(".CRT$XTU",long,read)
+#pragma section(".CRT$XLC",long,read)
+        __declspec(allocate(".CRT$XLC")) _TLSCB __xl_ca=on_tls_callback;
+        __declspec(allocate(".CRT$XIU"))_PVFV p_tls_prepare = on_tls_prepare;
+        __declspec(allocate(".CRT$XCU"))_PVFV p_process_init = on_process_init;
+        __declspec(allocate(".CRT$XTU"))_PVFV p_process_term = on_process_term;
+#else
+        #if (_MSC_VER >= 1300) // 1300 == VC++ 7.0
+        #   pragma data_seg(push, old_seg)
+        #endif
+            //Callback to run tls glue code first.
+            //I don't think it is necessary to run it
+            //at .CRT$XIB level, since we are only
+            //interested in thread detachement. But
+            //this could be changed easily if required.
+
+            #pragma data_seg(".CRT$XIU")
+            static _PVFV p_tls_prepare = on_tls_prepare;
+            #pragma data_seg()
+
+            //Callback after all global ctors.
+
+            #pragma data_seg(".CRT$XCU")
+            static _PVFV p_process_init = on_process_init;
+            #pragma data_seg()
+
+            //Callback for tls notifications.
+
+            #pragma data_seg(".CRT$XLB")
+            _TLSCB p_thread_callback = on_tls_callback;
+            #pragma data_seg()
+            //Callback for termination.
+
+            #pragma data_seg(".CRT$XTU")
+            static _PVFV p_process_term = on_process_term;
+            #pragma data_seg()
+        #if (_MSC_VER >= 1300) // 1300 == VC++ 7.0
+        #   pragma data_seg(pop, old_seg)
+        #endif
+#endif
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4189)
+#endif
+
+        PVAPI on_tls_prepare()
+        {
+            //The following line has an important side effect:
+            //if the TLS directory is not already there, it will
+            //be created by the linker. In other words, it forces a tls
+            //directory to be generated by the linker even when static tls
+            //(i.e. __declspec(thread)) is not used.
+            //The volatile should prevent the optimizer
+            //from removing the reference.
+
+            DWORD volatile dw = _tls_used;
+
+            #if (_MSC_VER < 1300) // 1300 == VC++ 7.0
+                _TLSCB* pfbegin = __xl_a;
+                _TLSCB* pfend = __xl_z;
+                _TLSCB* pfdst = pfbegin;
+                //pfdst = (_TLSCB*)_tls_used.AddressOfCallBacks;
+
+                //The following loop will merge the address pointers
+                //into a contiguous area, since the tlssup code seems
+                //to require this (at least on MSVC 6)
+
+                while (pfbegin < pfend)
+                {
+                    if (*pfbegin != 0)
+                    {
+                        *pfdst = *pfbegin;
+                        ++pfdst;
+                    }
+                    ++pfbegin;
+                }
+
+                *pfdst = 0;
+            #endif
+
+            return INIRETSUCCESS;
+        }
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+        PVAPI on_process_init()
+        {
+            //Schedule pdalbooston_thread_exit() to be called for the main
+            //thread before destructors of global objects have been
+            //called.
+
+            //It will not be run when 'quick' exiting the
+            //library; however, this is the standard behaviour
+            //for destructors of global objects, so that
+            //shouldn't be a problem.
+
+            atexit(pdalboost::pdalbooston_thread_exit);
+
+            //Call Boost process entry callback here
+
+            pdalboost::pdalbooston_process_enter();
+
+            return INIRETSUCCESS;
+        }
+
+        PVAPI on_process_term()
+        {
+            pdalboost::pdalbooston_process_exit();
+            return INIRETSUCCESS;
+        }
+
+        void NTAPI on_tls_callback(HINSTANCE /*h*/, DWORD dwReason, PVOID /*pv*/)
+        {
+            switch (dwReason)
+            {
+            case DLL_THREAD_DETACH:
+                pdalboost::pdalbooston_thread_exit();
+                break;
+            }
+        }
+
+#if (_MSC_VER >= 1500)
+        BOOL WINAPI dll_callback(HANDLE hInstance, DWORD dwReason, LPVOID lpReserved)
+#else
+        BOOL WINAPI dll_callback(HANDLE, DWORD dwReason, LPVOID)
+#endif
+        {
+            switch (dwReason)
+            {
+            case DLL_THREAD_DETACH:
+                pdalboost::pdalbooston_thread_exit();
+                break;
+            case DLL_PROCESS_DETACH:
+                pdalboost::pdalbooston_process_exit();
+                break;
+            }
+
+#if (_MSC_VER >= 1500)
+            if( _pRawDllMainOrig )
+            {
+                return _pRawDllMainOrig(hInstance, dwReason, lpReserved);
+            }
+#endif
+            return true;
+        }
+    } //namespace
+
+extern "C"
+{
+    extern BOOL (WINAPI * const _pRawDllMain)(HANDLE, DWORD, LPVOID)=&dll_callback;
+}
+namespace pdalboost
+{
+    void pdalboosttss_cleanup_implemented()
+    {
+        /*
+        This function's sole purpose is to cause a link error in cases where
+        automatic tss cleanup is not implemented by Boost.Threads as a
+        reminder that user code is responsible for calling the necessary
+        functions at the appropriate times (and for implementing an a
+        pdalboosttss_cleanup_implemented() function to eliminate the linker's
+        missing symbol error).
+
+        If Boost.Threads later implements automatic tss cleanup in cases
+        where it currently doesn't (which is the plan), the duplicate
+        symbol error will warn the user that their custom solution is no
+        longer needed and can be removed.
+        */
+    }
+}
+
+#endif //defined(_MSC_VER) && !defined(UNDER_CE)
+
+#endif //defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_LIB)
diff --git a/vendor/pdalboost/libs/timer/src/auto_timers_construction.cpp b/vendor/pdalboost/libs/timer/src/auto_timers_construction.cpp
new file mode 100644
index 0000000..ad3b016
--- /dev/null
+++ b/vendor/pdalboost/libs/timer/src/auto_timers_construction.cpp
@@ -0,0 +1,46 @@
+//  boost auto_timers_construction.cpp  ------------------------------------------------//
+
+//  Copyright Beman Dawes 2007, 2011
+
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/timer for documentation.
+
+//--------------------------------------------------------------------------------------//
+
+//  These constructors are in a separate file so that this translation unit will
+//  not be linked in except when one of the constructors is actually used. This
+//  is important since header <iostream> is required, and it incurs the cost of
+//  the standard stream objects even if they are not used.
+
+//--------------------------------------------------------------------------------------//
+
+// define BOOST_TIMER_SOURCE so that <boost/timer/config.hpp> knows
+// the library is being built (possibly exporting rather than importing code)
+#define BOOST_TIMER_SOURCE 
+
+#include <boost/timer/timer.hpp>
+#include <iostream>
+
+namespace
+{
+  // CAUTION: must be identical to same constant in cpu_timer.cpp
+  const std::string default_fmt(" %ws wall, %us user + %ss system = %ts CPU (%p%)\n");
+}
+
+namespace pdalboost
+{
+  namespace timer
+  {
+    auto_cpu_timer::auto_cpu_timer(short places)                                  // #1
+      : m_places(places), m_os(&std::cout), m_format(default_fmt) { start(); }
+
+    auto_cpu_timer::auto_cpu_timer(short places, const std::string& format)       // #2
+      : m_places(places), m_os(&std::cout), m_format(format) { start(); }
+
+    auto_cpu_timer::auto_cpu_timer(const std::string& format)                     // #3
+      : m_places(default_places), m_os(&std::cout), m_format(format) { start(); }
+
+  } // namespace timer
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/timer/src/cpu_timer.cpp b/vendor/pdalboost/libs/timer/src/cpu_timer.cpp
new file mode 100644
index 0000000..9d2f01e
--- /dev/null
+++ b/vendor/pdalboost/libs/timer/src/cpu_timer.cpp
@@ -0,0 +1,261 @@
+//  boost cpu_timer.cpp  ---------------------------------------------------------------//
+
+//  Copyright Beman Dawes 1994-2006, 2011
+
+//  Distributed under the Boost Software License, Version 1.0. (See accompanying
+//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/timer for documentation.
+
+//--------------------------------------------------------------------------------------//
+
+// define BOOST_TIMER_SOURCE so that <boost/timer/config.hpp> knows
+// the library is being built (possibly exporting rather than importing code)
+#define BOOST_TIMER_SOURCE
+
+#include <boost/timer/timer.hpp>
+#include <boost/chrono/chrono.hpp>
+#include <boost/io/ios_state.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/cerrno.hpp>
+#include <cstring>
+#include <sstream>
+#include <cassert>
+
+# if defined(BOOST_WINDOWS_API)
+#   include <windows.h>
+# elif defined(BOOST_POSIX_API)
+#   include <unistd.h>
+#   include <sys/times.h>
+# else
+# error unknown API
+# endif
+
+using pdalboost::timer::nanosecond_type;
+using pdalboost::timer::cpu_times;
+using pdalboost::system::error_code;
+
+namespace
+{
+
+  void show_time(const cpu_times& times,
+    std::ostream& os, const std::string& fmt, short places)
+  //  NOTE WELL: Will truncate least-significant digits to LDBL_DIG, which may
+  //  be as low as 10, although will be 15 for many common platforms.
+  {
+    if (places > 9)
+      places = 9;
+    else if (places < 0)
+      places = pdalboost::timer::default_places;
+ 
+    pdalboost::io::ios_flags_saver ifs(os);
+    pdalboost::io::ios_precision_saver ips(os);
+    os.setf(std::ios_base::fixed, std::ios_base::floatfield);
+    os.precision(places);
+
+    const double sec = 1000000000.0L;
+    nanosecond_type total = times.system + times.user;
+    double wall_sec = static_cast<double>(times.wall) / sec;
+    double total_sec = static_cast<double>(total) / sec;
+
+    for (const char* format = fmt.c_str(); *format; ++format)
+    {
+      if (*format != '%' || !*(format+1) || !std::strchr("wustp", *(format+1)))
+        os << *format;  // anything except % followed by a valid format character
+                        // gets sent to the output stream
+      else
+      {
+        ++format;
+        switch (*format)
+        {
+        case 'w':
+          os << wall_sec;
+          break;
+        case 'u':
+          os << static_cast<double>(times.user) / sec;
+          break;
+        case 's':
+          os << static_cast<double>(times.system) / sec;
+          break;
+        case 't':
+          os << total_sec;
+          break;
+        case 'p':
+          os.precision(1);
+          if (wall_sec > 0.001L && total_sec > 0.001L)
+            os << (total_sec/wall_sec) * 100.0;
+          else
+            os << "n/a";
+          os.precision(places);
+          break;
+        }
+      }
+    }
+  }
+
+# if defined(BOOST_POSIX_API)
+  pdalboost::int_least64_t tick_factor() // multiplier to convert ticks
+                                     //  to nanoseconds; -1 if unknown
+  {
+    static pdalboost::int_least64_t tick_factor = 0;
+    if (!tick_factor)
+    {
+      if ((tick_factor = ::sysconf(_SC_CLK_TCK)) <= 0)
+        tick_factor = -1;
+      else
+      {
+        assert(tick_factor <= 1000000000LL); // logic doesn't handle large ticks
+        tick_factor = 1000000000LL / tick_factor;  // compute factor
+        if (!tick_factor)
+          tick_factor = -1;
+      }
+    }
+    return tick_factor;
+  }
+# endif
+
+  void get_cpu_times(pdalboost::timer::cpu_times& current)
+  {
+    pdalboost::chrono::duration<pdalboost::int64_t, pdalboost::nano>
+      x (pdalboost::chrono::high_resolution_clock::now().time_since_epoch());
+    current.wall = x.count();
+
+# if defined(BOOST_WINDOWS_API)
+
+    FILETIME creation, exit;
+    if (::GetProcessTimes(::GetCurrentProcess(), &creation, &exit,
+            (LPFILETIME)&current.system, (LPFILETIME)&current.user))
+    {
+      current.user   *= 100;  // Windows uses 100 nanosecond ticks
+      current.system *= 100;
+    }
+    else
+    {
+      current.system = current.user = pdalboost::timer::nanosecond_type(-1);
+    }
+# else
+    tms tm;
+    clock_t c = ::times(&tm);
+    if (c == static_cast<clock_t>(-1)) // error
+    {
+      current.system = current.user = pdalboost::timer::nanosecond_type(-1);
+    }
+    else
+    {
+      current.system = pdalboost::timer::nanosecond_type(tm.tms_stime + tm.tms_cstime);
+      current.user = pdalboost::timer::nanosecond_type(tm.tms_utime + tm.tms_cutime);
+      pdalboost::int_least64_t factor;
+      if ((factor = tick_factor()) != -1)
+      {
+        current.user *= factor;
+        current.system *= factor;
+      }
+      else
+      {
+        current.user = current.system = pdalboost::timer::nanosecond_type(-1);
+      }
+    }
+# endif
+  }
+
+  // CAUTION: must be identical to same constant in auto_timers_construction.cpp
+  const std::string default_fmt(" %ws wall, %us user + %ss system = %ts CPU (%p%)\n");
+
+} // unnamed namespace
+
+namespace pdalboost
+{
+  namespace timer
+  {
+    //  format  ------------------------------------------------------------------------//
+
+    BOOST_TIMER_DECL
+    std::string format(const cpu_times& times, short places, const std::string& fmt)
+    {
+      std::stringstream ss;
+      ss.exceptions(std::ios_base::badbit | std::ios_base::failbit);
+      show_time(times, ss, fmt, places);
+      return ss.str();
+    }
+ 
+    BOOST_TIMER_DECL
+    std::string format(const cpu_times& times, short places)
+    {
+      return format(times, places, default_fmt);
+    }
+
+    //  cpu_timer  ---------------------------------------------------------------------//
+
+    void cpu_timer::start() BOOST_NOEXCEPT
+    {
+      m_is_stopped = false;
+      get_cpu_times(m_times);
+    }
+
+    void cpu_timer::stop() BOOST_NOEXCEPT
+    {
+      if (is_stopped())
+        return;
+      m_is_stopped = true;
+      
+      cpu_times current;
+      get_cpu_times(current);
+      m_times.wall = (current.wall - m_times.wall);
+      m_times.user = (current.user - m_times.user);
+      m_times.system = (current.system - m_times.system);
+    }
+
+    cpu_times cpu_timer::elapsed() const BOOST_NOEXCEPT
+    {
+      if (is_stopped())
+        return m_times;
+      cpu_times current;
+      get_cpu_times(current);
+      current.wall -= m_times.wall;
+      current.user -= m_times.user;
+      current.system -= m_times.system;
+      return current;
+    }
+
+    void cpu_timer::resume() BOOST_NOEXCEPT
+    {
+      if (is_stopped())
+      {
+        cpu_times current (m_times);
+        start();
+        m_times.wall   -= current.wall;
+        m_times.user   -= current.user;
+        m_times.system -= current.system;
+      }
+    }
+
+    //  auto_cpu_timer  ----------------------------------------------------------------//
+
+    auto_cpu_timer::auto_cpu_timer(std::ostream& os, short places)        // #5
+      : m_places(places), m_os(&os), m_format(default_fmt)
+    { 
+      start();
+    }
+
+    void auto_cpu_timer::report()
+    {
+        show_time(elapsed(), ostream(), format_string(), places());
+    }
+
+    auto_cpu_timer::~auto_cpu_timer()
+    { 
+      if (!is_stopped())
+      {
+        stop();  // the sooner we stop(), the better
+        try
+        {
+          report();
+        }
+        catch (...) // eat any exceptions
+        {
+        }
+      }
+    }
+
+  } // namespace timer
+} // namespace pdalboost
diff --git a/vendor/pdalboost/libs/uuid/index.html b/vendor/pdalboost/libs/uuid/index.html
new file mode 100644
index 0000000..03de8aa
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/index.html
@@ -0,0 +1,43 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Boost Uuid Library</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+  <tr>
+    <td bgcolor="#FFFFFF"><img src="../../boost.png" alt="boost.png (6897 bytes)" WIDTH="277" HEIGHT="86"></td>
+    <td><a href="../../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td>
+    <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td>
+    <td><a href="http://www.boost.org/users/people.html"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td>
+    <td><a href="http://www.boost.org/users/faq.html"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td>
+    <td><a href="../../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td>
+  </tr>
+</table>
+
+<h1>Uuid library</h1>
+
+<p>The header uuid.hpp provides an implementation of Universally Unique Identifiers.
+</p>
+
+<p>This implementation is intended for general use.</p>
+
+<ul>
+  <li><a href="uuid.html">Documentation</a> (HTML).</li>
+  <li>Header <a href="../../boost/uuid/uuid.hpp">uuid.hpp</a>.</li>
+  <li>See the <a href="uuid.html">documentation</a> for links to sample programs.</li>
+  <li>Submitted by Andy Tompkins</a>.</li>
+</ul>
+
+<p>Revised  May 14, 2007</p>
+
+<hr>
+<p>� Copyright Andy Tompkins, 2006</p>
+<p> Distributed under the Boost Software 
+License, Version 1.0. (See accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a>)</p>
+</body>
+</html>
diff --git a/vendor/pdalboost/libs/uuid/meta/libraries.json b/vendor/pdalboost/libs/uuid/meta/libraries.json
new file mode 100644
index 0000000..8b41acc
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/meta/libraries.json
@@ -0,0 +1,15 @@
+{
+    "key": "uuid",
+    "name": "Uuid",
+    "authors": [
+        "Andy Tompkins"
+    ],
+    "description": "A universally unique identifier.",
+    "category": [
+        "Data",
+        "Domain"
+    ],
+    "maintainers": [
+        "Andy Tompkins <atompkins -at- fastmail.fm>"
+    ]
+}
diff --git a/vendor/pdalboost/libs/uuid/test/Jamfile.v2 b/vendor/pdalboost/libs/uuid/test/Jamfile.v2
new file mode 100644
index 0000000..6c99f67
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/Jamfile.v2
@@ -0,0 +1,61 @@
+# Copyright 2007 Andy Tompkins.
+# Distributed under the Boost Software License, Version 1.0. (See
+# accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+import testing ;
+
+test-suite uuid :
+    # make sure each header file is self-contained
+    [ compile compile_uuid.cpp ]
+    [ compile compile_uuid.cpp : <define>BOOST_UUID_NO_TYPE_TRAITS : compile_uuid_no_type_traits ]
+    [ compile compile_uuid_io.cpp ]
+    [ compile compile_uuid_serialize.cpp ]
+    [ compile compile_uuid_generators.cpp ]
+    [ compile compile_nil_generator.cpp ]
+    [ compile compile_name_generator.cpp ]
+    [ compile compile_string_generator.cpp ]
+    [ compile compile_random_generator.cpp ]
+    [ compile compile_seed_rng.cpp ]
+
+    # test inclucing all .hpp files in 2 translations units
+    # to look for issues when using multiple translation units
+    # eg. missing inline on a global functionstate is not missing
+    [ run test_include1.cpp test_include2.cpp ]
+
+    # main test
+    [ run test_uuid.cpp ]
+    [ run test_uuid_no_simd.cpp ]
+
+    # test uuid_io.hpp
+    [ run test_io.cpp ]
+
+    # test generators
+    [ run test_nil_generator.cpp ]
+    [ run test_name_generator.cpp ]
+    [ run test_string_generator.cpp ]
+    [ run test_random_generator.cpp ]
+
+    # test tagging an object
+    [ run test_tagging.cpp ]
+
+    # test use cases
+    [ run test_uuid_class.cpp ]
+    [ run test_uuid_in_map.cpp ]
+
+    # test serializing uuids
+    [ run test_serialization.cpp ../../serialization/build//pdalboost_serialization ]
+    # TODO - This test fails to like with pdalboost_wserialization
+    #[ run test_wserialization.cpp
+    #    ../../serialization/build//pdalboost_serialization
+    #    ../../serialization/build//pdalboost_wserialization
+    #    : : : <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
+    #]
+
+    # test sha1 hash function
+    [ run test_sha1.cpp ]
+    
+    # test MSVC 12 (VS2013) optimizer bug with SIMD operations. See https://svn.boost.org/trac/boost/ticket/8509#comment:3.
+    # Only happens in Release x64 builds.
+    [ run test_msvc_simd_bug981648_main.cpp test_msvc_simd_bug981648_foo.cpp : : : <variant>release <debug-symbols>on : test_msvc_simd_bug981648 ]
+    ;
diff --git a/vendor/pdalboost/libs/uuid/test/compile_name_generator.cpp b/vendor/pdalboost/libs/uuid/test/compile_name_generator.cpp
new file mode 100644
index 0000000..6610975
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/compile_name_generator.cpp
@@ -0,0 +1,13 @@
+//  (C) Copyright Andy Tompkins 2010. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Purpose to make sure that a translation unit consisting of just the contents
+// of the header file will compile successfully.
+
+#include <boost/uuid/name_generator.hpp>
diff --git a/vendor/pdalboost/libs/uuid/test/compile_nil_generator.cpp b/vendor/pdalboost/libs/uuid/test/compile_nil_generator.cpp
new file mode 100644
index 0000000..d103f3c
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/compile_nil_generator.cpp
@@ -0,0 +1,13 @@
+//  (C) Copyright Andy Tompkins 2010. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Purpose to make sure that a translation unit consisting of just the contents 
+// of the header file will compile successfully.
+
+#include <boost/uuid/nil_generator.hpp>
diff --git a/vendor/pdalboost/libs/uuid/test/compile_random_generator.cpp b/vendor/pdalboost/libs/uuid/test/compile_random_generator.cpp
new file mode 100644
index 0000000..4913ffc
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/compile_random_generator.cpp
@@ -0,0 +1,13 @@
+//  (C) Copyright Andy Tompkins 2010. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Purpose to make sure that a translation unit consisting of just the contents
+// of the header file will compile successfully.
+
+#include <boost/uuid/random_generator.hpp>
diff --git a/vendor/pdalboost/libs/uuid/test/compile_seed_rng.cpp b/vendor/pdalboost/libs/uuid/test/compile_seed_rng.cpp
new file mode 100644
index 0000000..c30546b
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/compile_seed_rng.cpp
@@ -0,0 +1,14 @@
+//  (C) Copyright Andy Tompkins 2008. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Purpose to make sure that a translation unit consisting of just the contents 
+// of the header file will compile successfully.
+
+#include <boost/uuid/seed_rng.hpp>
+#include <boost/random/random_device.hpp> // to test issue #5974
diff --git a/vendor/pdalboost/libs/uuid/test/compile_string_generator.cpp b/vendor/pdalboost/libs/uuid/test/compile_string_generator.cpp
new file mode 100644
index 0000000..ae4595a
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/compile_string_generator.cpp
@@ -0,0 +1,13 @@
+//  (C) Copyright Andy Tompkins 2010. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Purpose to make sure that a translation unit consisting of just the contents
+// of the header file will compile successfully.
+
+#include <boost/uuid/string_generator.hpp>
diff --git a/vendor/pdalboost/libs/uuid/test/compile_uuid.cpp b/vendor/pdalboost/libs/uuid/test/compile_uuid.cpp
new file mode 100644
index 0000000..39f1ebb
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/compile_uuid.cpp
@@ -0,0 +1,13 @@
+//  (C) Copyright Andy Tompkins 2008. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Purpose to make sure that a translation unit consisting of just the contents
+// of the header file will compile successfully.
+
+#include <boost/uuid/uuid.hpp>
diff --git a/vendor/pdalboost/libs/uuid/test/compile_uuid_generators.cpp b/vendor/pdalboost/libs/uuid/test/compile_uuid_generators.cpp
new file mode 100644
index 0000000..da7a8f1
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/compile_uuid_generators.cpp
@@ -0,0 +1,13 @@
+//  (C) Copyright Andy Tompkins 2008. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Purpose to make sure that a translation unit consisting of just the contents 
+// of the header file will compile successfully.
+
+#include <boost/uuid/uuid_generators.hpp>
diff --git a/vendor/pdalboost/libs/uuid/test/compile_uuid_io.cpp b/vendor/pdalboost/libs/uuid/test/compile_uuid_io.cpp
new file mode 100644
index 0000000..2970fc7
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/compile_uuid_io.cpp
@@ -0,0 +1,13 @@
+//  (C) Copyright Andy Tompkins 2008. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Purpose to make sure that a translation unit consisting of just the contents 
+// of the header file will compile successfully.
+
+#include <boost/uuid/uuid_io.hpp>
diff --git a/vendor/pdalboost/libs/uuid/test/compile_uuid_serialize.cpp b/vendor/pdalboost/libs/uuid/test/compile_uuid_serialize.cpp
new file mode 100644
index 0000000..6ddb053
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/compile_uuid_serialize.cpp
@@ -0,0 +1,13 @@
+//  (C) Copyright Andy Tompkins 2008. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Purpose to make sure that a translation unit consisting of just the contents 
+// of the header file will compile successfully.
+
+#include <boost/uuid/uuid_serialize.hpp>
diff --git a/vendor/pdalboost/libs/uuid/test/test_generators.cpp b/vendor/pdalboost/libs/uuid/test/test_generators.cpp
new file mode 100644
index 0000000..c1a612f
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_generators.cpp
@@ -0,0 +1,137 @@
+//  (C) Copyright Andy Tompkins 2009. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  libs/uuid/test/test_generators.cpp  -------------------------------//
+
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_generators.hpp>
+#include <boost/uuid/uuid_io.hpp>
+
+#include <boost/test/included/test_exec_monitor.hpp>
+#include <boost/test/test_tools.hpp>
+
+#include <boost/random.hpp>
+
+template <typename RandomUuidGenerator>
+void check_random_generator(RandomUuidGenerator& uuid_gen)
+{
+    pdalboost::uuids::uuid u1 = uuid_gen();
+    pdalboost::uuids::uuid u2 = uuid_gen();
+
+    BOOST_CHECK_NE(u1, u2);
+
+    // check variant
+    BOOST_CHECK_EQUAL(u1.variant(), pdalboost::uuids::uuid::variant_rfc_4122);
+//    BOOST_CHECK_EQUAL( *(u1.begin()+8) & 0xC0, 0x80);
+    // version
+    BOOST_CHECK_EQUAL( *(u1.begin()+6) & 0xF0, 0x40);
+}
+
+int test_main(int, char*[])
+{
+    using namespace pdalboost::uuids;
+    using pdalboost::test_tools::output_test_stream;
+
+    { // test nil generator
+        uuid u1 = nil_generator()();
+        uuid u2 = {{0}};
+        BOOST_CHECK_EQUAL(u1, u2);
+
+        uuid u3 = nil_uuid();
+        BOOST_CHECK_EQUAL(u3, u2);
+    }
+    
+    { // test string_generator
+        string_generator gen;
+        uuid u = gen("00000000-0000-0000-0000-000000000000");
+        BOOST_CHECK_EQUAL(u, nil_uuid());
+        BOOST_CHECK_EQUAL(u.is_nil(), true);
+
+        const uuid u_increasing = {{ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }};
+        const uuid u_decreasing = {{ 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }};
+
+        u = gen("0123456789abcdef0123456789ABCDEF");
+        BOOST_CHECK_EQUAL(u, u_increasing);
+        
+        u = gen("{0123456789abcdef0123456789ABCDEF}");
+        BOOST_CHECK_EQUAL(u, u_increasing);
+
+        u = gen("{01234567-89AB-CDEF-0123-456789abcdef}");
+        BOOST_CHECK_EQUAL(u, u_increasing);
+
+        u = gen("01234567-89AB-CDEF-0123-456789abcdef");
+        BOOST_CHECK_EQUAL(u, u_increasing);
+        
+        u = gen(std::string("fedcba98-7654-3210-fedc-ba9876543210"));
+        BOOST_CHECK_EQUAL(u, u_decreasing);
+
+#ifndef BOOST_NO_STD_WSTRING
+        u = gen(L"fedcba98-7654-3210-fedc-ba9876543210");
+        BOOST_CHECK_EQUAL(u, u_decreasing);
+
+        u = gen(std::wstring(L"01234567-89ab-cdef-0123-456789abcdef"));
+        BOOST_CHECK_EQUAL(u, u_increasing);
+#endif //BOOST_NO_STD_WSTRING
+    }
+    
+    { // test name_generator
+        uuid dns_namespace_uuid = {{0x6b, 0xa7, 0xb8, 0x10, 0x9d, 0xad, 0x11, 0xd1, 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8}};
+        uuid correct = {{0x21, 0xf7, 0xf8, 0xde, 0x80, 0x51, 0x5b, 0x89, 0x86, 0x80, 0x01, 0x95, 0xef, 0x79, 0x8b, 0x6a}};
+        uuid wcorrect = {{0xb9, 0x50, 0x66, 0x13, 0x2c, 0x04, 0x51, 0x2d, 0xb8, 0xfe, 0xbf, 0x8d, 0x0b, 0xa1, 0xb2, 0x71}};
+
+        name_generator gen(dns_namespace_uuid);
+
+        uuid u = gen("www.widgets.com");
+        BOOST_CHECK_EQUAL(u, correct);
+        BOOST_CHECK_EQUAL(u.variant(), pdalboost::uuids::uuid::variant_rfc_4122);
+
+        u = gen(L"www.widgets.com");
+        BOOST_CHECK_EQUAL(u, wcorrect);
+        BOOST_CHECK_EQUAL(u.variant(), pdalboost::uuids::uuid::variant_rfc_4122);
+
+        u = gen(std::string("www.widgets.com"));
+        BOOST_CHECK_EQUAL(u, correct);
+        BOOST_CHECK_EQUAL(u.variant(), pdalboost::uuids::uuid::variant_rfc_4122);
+
+        u = gen(std::wstring(L"www.widgets.com"));
+        BOOST_CHECK_EQUAL(u, wcorrect);
+        BOOST_CHECK_EQUAL(u.variant(), pdalboost::uuids::uuid::variant_rfc_4122);
+
+        char name[] = "www.widgets.com";
+        u = gen(name, 15);
+        BOOST_CHECK_EQUAL(u, correct);
+        BOOST_CHECK_EQUAL(u.variant(), pdalboost::uuids::uuid::variant_rfc_4122);
+    }
+
+    { // test random_generator
+        // default random number generator
+        random_generator uuid_gen1;
+        check_random_generator(uuid_gen1);
+        
+        // specific random number generator
+        basic_random_generator<pdalboost::rand48> uuid_gen2;
+        check_random_generator(uuid_gen2);
+        
+        // pass by reference
+        pdalboost::ecuyer1988 ecuyer1988_gen;
+        basic_random_generator<pdalboost::ecuyer1988> uuid_gen3(ecuyer1988_gen);
+        check_random_generator(uuid_gen3);
+        
+        // pass by pointer
+        pdalboost::lagged_fibonacci607 lagged_fibonacci607_gen;
+        basic_random_generator<pdalboost::lagged_fibonacci607> uuid_gen4(&lagged_fibonacci607_gen);
+        check_random_generator(uuid_gen4);
+
+        // random device
+        //basic_random_generator<pdalboost::random_device> uuid_gen5;
+        //check_random_generator(uuid_gen5);
+    }
+    
+    return 0;
+}
diff --git a/vendor/pdalboost/libs/uuid/test/test_include1.cpp b/vendor/pdalboost/libs/uuid/test/test_include1.cpp
new file mode 100644
index 0000000..b4f168c
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_include1.cpp
@@ -0,0 +1,24 @@
+//  (C) Copyright Andy Tompkins 2009. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  libs/uuid/test/test_include1.cpp  -------------------------------//
+
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_io.hpp>
+#include <boost/uuid/uuid_serialize.hpp>
+#include <boost/uuid/uuid_generators.hpp>
+#include <boost/uuid/nil_generator.hpp>
+#include <boost/uuid/name_generator.hpp>
+#include <boost/uuid/string_generator.hpp>
+#include <boost/uuid/random_generator.hpp>
+
+int main(int, char*[])
+{
+    return 0;
+}
diff --git a/vendor/pdalboost/libs/uuid/test/test_include2.cpp b/vendor/pdalboost/libs/uuid/test/test_include2.cpp
new file mode 100644
index 0000000..8c3252c
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_include2.cpp
@@ -0,0 +1,19 @@
+//  (C) Copyright Andy Tompkins 2009. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  libs/uuid/test/test_include2.cpp  -------------------------------//
+
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_io.hpp>
+#include <boost/uuid/uuid_generators.hpp>
+#include <boost/uuid/uuid_serialize.hpp>
+#include <boost/uuid/nil_generator.hpp>
+#include <boost/uuid/name_generator.hpp>
+#include <boost/uuid/string_generator.hpp>
+#include <boost/uuid/random_generator.hpp>
diff --git a/vendor/pdalboost/libs/uuid/test/test_io.cpp b/vendor/pdalboost/libs/uuid/test/test_io.cpp
new file mode 100644
index 0000000..a79a55e
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_io.cpp
@@ -0,0 +1,154 @@
+//  (C) Copyright Andy Tompkins 2009. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  libs/uuid/test/test_io.cpp  -------------------------------//
+
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_io.hpp>
+#include <boost/detail/lightweight_test.hpp>
+
+#include <boost/lexical_cast.hpp>
+#include <string>
+#include <sstream>
+#include <iomanip>
+
+#ifndef BOOST_NO_STD_WSTRING
+namespace std {
+template <typename Elem, typename Traits>
+std::basic_ostream<Elem, Traits>& operator<<(std::basic_ostream<Elem, Traits>& os, std::wstring const& s) {
+    // convert to string
+    std::string temp(s.begin(), s.end());
+    os << temp;
+    return os;
+}
+} // namespace std
+#endif
+
+int main(int, char*[])
+{
+    using namespace pdalboost::uuids;
+
+    const uuid u1 = {{0}};
+    const uuid u2 = {{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}};
+    const uuid u3 = {{0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef,0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef}};
+
+    { // test insert/extract operators
+        std::stringstream ss1;
+        ss1 << u1;
+        BOOST_TEST_EQ(ss1.str(), "00000000-0000-0000-0000-000000000000");
+
+        std::stringstream ss2;
+        ss2 << u2;
+        BOOST_TEST_EQ(ss2.str(), "00010203-0405-0607-0809-0a0b0c0d0e0f");
+
+        std::stringstream ss3;
+        ss3 << u3;
+        BOOST_TEST_EQ(ss3.str(), "12345678-90ab-cdef-1234-567890abcdef");
+        
+        std::stringstream ss4;
+        ss4 << std::uppercase << u3;
+        BOOST_TEST_EQ(ss4.str(), "12345678-90AB-CDEF-1234-567890ABCDEF");
+        
+        std::stringstream ss5;
+        ss5 << 'a' << std::right << std::setfill('*') << std::setw(40) << u1 << 'a';
+        BOOST_TEST_EQ(ss5.str(), "a****00000000-0000-0000-0000-000000000000a");
+        
+        std::stringstream ss6;
+        ss6 << std::left << std::setfill('*') << std::setw(45) << u1;
+        BOOST_TEST_EQ(ss6.str(), "00000000-0000-0000-0000-000000000000*********");
+    }
+
+ #ifndef BOOST_NO_STD_WSTRING
+    { // test insert/extract operators
+        std::wstringstream ss1;
+        ss1 << u1;
+        BOOST_TEST_EQ(ss1.str(), L"00000000-0000-0000-0000-000000000000");
+
+        std::wstringstream ss2;
+        ss2 << u2;
+        BOOST_TEST_EQ(ss2.str(), L"00010203-0405-0607-0809-0a0b0c0d0e0f");
+
+        std::wstringstream ss3;
+        ss3 << u3;
+        BOOST_TEST_EQ(ss3.str(), L"12345678-90ab-cdef-1234-567890abcdef");
+        
+        std::wstringstream ss4;
+        ss4 << std::uppercase << u3;
+        BOOST_TEST_EQ(ss4.str(), L"12345678-90AB-CDEF-1234-567890ABCDEF");
+        
+        std::wstringstream ss5;
+        ss5 << L'a' << std::right << std::setfill(L'*') << std::setw(40) << u1 << L'a';
+        BOOST_TEST_EQ(ss5.str(), L"a****00000000-0000-0000-0000-000000000000a");
+        
+        std::wstringstream ss6;
+        ss6 << std::left << std::setfill(L'*') << std::setw(45) << u1;
+        BOOST_TEST_EQ(ss6.str(), L"00000000-0000-0000-0000-000000000000*********");
+    }
+#endif
+
+    {
+        uuid u;
+
+        std::stringstream ss;
+        ss << "00000000-0000-0000-0000-000000000000";
+        ss >> u;
+        BOOST_TEST_EQ(u, u1);
+
+        ss << "12345678-90ab-cdef-1234-567890abcdef";
+        ss >> u;
+        BOOST_TEST_EQ(u, u3);
+    }
+
+ #ifndef BOOST_NO_STD_WSTRING
+   {
+        uuid u;
+
+        std::wstringstream ss;
+        ss << L"00000000-0000-0000-0000-000000000000";
+        ss >> u;
+        BOOST_TEST_EQ(u, u1);
+
+        ss << L"12345678-90ab-cdef-1234-567890abcdef";
+        ss >> u;
+        BOOST_TEST_EQ(u, u3);
+    }
+#endif
+
+    { // test with lexical_cast
+        BOOST_TEST_EQ(pdalboost::lexical_cast<std::string>(u1), std::string("00000000-0000-0000-0000-000000000000"));
+        BOOST_TEST_EQ(pdalboost::lexical_cast<uuid>("00000000-0000-0000-0000-000000000000"), u1);
+
+        BOOST_TEST_EQ(pdalboost::lexical_cast<std::string>(u3), std::string("12345678-90ab-cdef-1234-567890abcdef"));
+        BOOST_TEST_EQ(pdalboost::lexical_cast<uuid>("12345678-90ab-cdef-1234-567890abcdef"), u3);
+    }
+
+#ifndef BOOST_NO_STD_WSTRING
+    { // test with lexical_cast
+        BOOST_TEST_EQ(pdalboost::lexical_cast<std::wstring>(u1), std::wstring(L"00000000-0000-0000-0000-000000000000"));
+        BOOST_TEST_EQ(pdalboost::lexical_cast<uuid>(L"00000000-0000-0000-0000-000000000000"), u1);
+
+        BOOST_TEST_EQ(pdalboost::lexical_cast<std::wstring>(u3), std::wstring(L"12345678-90ab-cdef-1234-567890abcdef"));
+        BOOST_TEST_EQ(pdalboost::lexical_cast<uuid>(L"12345678-90ab-cdef-1234-567890abcdef"), u3);
+    }
+#endif
+    
+    { // test to_string
+        BOOST_TEST_EQ(to_string(u1), std::string("00000000-0000-0000-0000-000000000000"));
+        BOOST_TEST_EQ(to_string(u3), std::string("12345678-90ab-cdef-1234-567890abcdef"));
+    }
+    
+#ifndef BOOST_NO_STD_WSTRING
+    { // test to_wstring
+        BOOST_TEST_EQ(to_wstring(u1), std::wstring(L"00000000-0000-0000-0000-000000000000"));
+        BOOST_TEST_EQ(to_wstring(u3), std::wstring(L"12345678-90ab-cdef-1234-567890abcdef"));
+    }
+#endif
+
+    return pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/uuid/test/test_msvc_simd_bug981648.hpp b/vendor/pdalboost/libs/uuid/test/test_msvc_simd_bug981648.hpp
new file mode 100644
index 0000000..2f35088
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_msvc_simd_bug981648.hpp
@@ -0,0 +1,34 @@
+/*
+* Copyright 2014 Andrey Semashev
+*
+* Distributed under the Boost Software License, Version 1.0.
+* See accompanying file LICENSE_1_0.txt or copy at
+* http://www.boost.org/LICENSE_1_0.txt
+*/
+/*
+* This is a part of the test for a workaround for MSVC 12 (VS2013) optimizer bug
+* which causes incorrect SIMD code generation for operator==. See:
+*
+* https://svn.boost.org/trac/boost/ticket/8509#comment:3
+* https://connect.microsoft.com/VisualStudio/feedbackdetail/view/981648#tabs
+*
+* The header contains common definitions for the two source files.
+*/
+#include <boost/uuid/uuid.hpp>
+using pdalboost::uuids::uuid;
+class headerProperty
+{
+public:
+virtual ~headerProperty() {}
+};
+class my_obj:
+public headerProperty
+{
+public:
+// This char tmp[8] forces the following uuid to be misaligned.
+char tmp[8];
+// This m_uuid is misaligned (not 16-byte aligned) and causes the != operator to crash.
+uuid m_uuid;
+const uuid &get_marker_id() const { return m_uuid; }
+uuid get_id() const { return m_uuid; }
+};
diff --git a/vendor/pdalboost/libs/uuid/test/test_msvc_simd_bug981648_foo.cpp b/vendor/pdalboost/libs/uuid/test/test_msvc_simd_bug981648_foo.cpp
new file mode 100644
index 0000000..5e2cc79
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_msvc_simd_bug981648_foo.cpp
@@ -0,0 +1,31 @@
+/*
+* Copyright 2014 Andrey Semashev
+*
+* Distributed under the Boost Software License, Version 1.0.
+* See accompanying file LICENSE_1_0.txt or copy at
+* http://www.boost.org/LICENSE_1_0.txt
+*/
+/*
+* This is a part of the test for a workaround for MSVC 12 (VS2013) optimizer bug
+* which causes incorrect SIMD code generation for operator==. See:
+*
+* https://svn.boost.org/trac/boost/ticket/8509#comment:3
+* https://connect.microsoft.com/VisualStudio/feedbackdetail/view/981648#tabs
+*
+* The file contains the function that actually causes the crash. Reproduces only
+* in Release x64 builds.
+*/
+#include <cstdio>
+#include "test_msvc_simd_bug981648.hpp"
+void mp_grid_update_marker_parameters(headerProperty* header_prop, my_obj &current_marker)
+{
+headerProperty *old_header_prop = NULL;
+my_obj *p = dynamic_cast<my_obj*>(header_prop);
+/*
+* This != statement crashes with a GP.
+* */
+if (p != NULL && (current_marker.get_id() != p->get_marker_id())) {
+std::printf("works okay, if it reaches this printf: %p\n",p);
+old_header_prop = header_prop;
+}
+}
diff --git a/vendor/pdalboost/libs/uuid/test/test_msvc_simd_bug981648_main.cpp b/vendor/pdalboost/libs/uuid/test/test_msvc_simd_bug981648_main.cpp
new file mode 100644
index 0000000..35d3a11
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_msvc_simd_bug981648_main.cpp
@@ -0,0 +1,40 @@
+/*
+* Copyright 2014 Andrey Semashev
+*
+* Distributed under the Boost Software License, Version 1.0.
+* See accompanying file LICENSE_1_0.txt or copy at
+* http://www.boost.org/LICENSE_1_0.txt
+*/
+/*
+* This is a part of the test for a workaround for MSVC 12 (VS2013) optimizer bug
+* which causes incorrect SIMD code generation for operator==. See:
+*
+* https://svn.boost.org/trac/boost/ticket/8509#comment:3
+* https://connect.microsoft.com/VisualStudio/feedbackdetail/view/981648#tabs
+*
+* This file contains the main entry point.
+*/
+#include <cstdio>
+#include "test_msvc_simd_bug981648.hpp"
+extern void mp_grid_update_marker_parameters(headerProperty* header_prop, my_obj &current_marker);
+static my_obj g_my_obj;
+int main(int argc, char* argv[])
+{
+my_obj *p = &g_my_obj;
+p->m_uuid = uuid();
+uuid one, two;
+one.data[0] = 0; two.data[0] = 1;
+//*****************************************
+// This != statement generates two movdqu statements or pcmpeqd with a memory operand which crashes
+if (one != two) {
+std::printf("The first != operator works okay if it reaches this printf.\n");
+}
+my_obj a;
+a.m_uuid.data[0] = 1;
+std::printf("There should be a another printf coming next.\n");
+//*****************************************
+// The != statement in this function generates a movups and a movdqu statement.
+// It also crashes because the optimizer also creates a pcmpeqd for a non-aligned memory location.
+mp_grid_update_marker_parameters(p, a);
+return 0;
+}
\ No newline at end of file
diff --git a/vendor/pdalboost/libs/uuid/test/test_name_generator.cpp b/vendor/pdalboost/libs/uuid/test/test_name_generator.cpp
new file mode 100644
index 0000000..646b041
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_name_generator.cpp
@@ -0,0 +1,49 @@
+//  (C) Copyright Andy Tompkins 2010. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  libs/uuid/test/test_name_generator.cpp  -------------------------------//
+
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_io.hpp>
+#include <boost/uuid/name_generator.hpp>
+#include <boost/detail/lightweight_test.hpp>
+
+int main(int, char*[])
+{
+    using namespace pdalboost::uuids;
+
+    uuid dns_namespace_uuid = {{0x6b, 0xa7, 0xb8, 0x10, 0x9d, 0xad, 0x11, 0xd1, 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8}};
+    uuid correct = {{0x21, 0xf7, 0xf8, 0xde, 0x80, 0x51, 0x5b, 0x89, 0x86, 0x80, 0x01, 0x95, 0xef, 0x79, 0x8b, 0x6a}};
+    uuid wcorrect = {{0xc3, 0x15, 0x27, 0x0b, 0xa4, 0x66, 0x58, 0x72, 0xac, 0xa4, 0x96, 0x26, 0xce, 0xc0, 0xf4, 0xbe}};
+
+    name_generator gen(dns_namespace_uuid);
+
+    uuid u = gen("www.widgets.com");
+    BOOST_TEST_EQ(u, correct);
+    BOOST_TEST_EQ(u.variant(), pdalboost::uuids::uuid::variant_rfc_4122);
+
+    u = gen(L"www.widgets.com");
+    BOOST_TEST_EQ(u, wcorrect);
+    BOOST_TEST_EQ(u.variant(), pdalboost::uuids::uuid::variant_rfc_4122);
+
+    u = gen(std::string("www.widgets.com"));
+    BOOST_TEST_EQ(u, correct);
+    BOOST_TEST_EQ(u.variant(), pdalboost::uuids::uuid::variant_rfc_4122);
+
+    u = gen(std::wstring(L"www.widgets.com"));
+    BOOST_TEST_EQ(u, wcorrect);
+    BOOST_TEST_EQ(u.variant(), pdalboost::uuids::uuid::variant_rfc_4122);
+
+    char name[] = "www.widgets.com";
+    u = gen(name, 15);
+    BOOST_TEST_EQ(u, correct);
+    BOOST_TEST_EQ(u.variant(), pdalboost::uuids::uuid::variant_rfc_4122);
+
+    return pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/uuid/test/test_nil_generator.cpp b/vendor/pdalboost/libs/uuid/test/test_nil_generator.cpp
new file mode 100644
index 0000000..da31283
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_nil_generator.cpp
@@ -0,0 +1,29 @@
+//  (C) Copyright Andy Tompkins 2010. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  libs/uuid/test/test_nil_generator.cpp  -------------------------------//
+
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_io.hpp>
+#include <boost/uuid/nil_generator.hpp>
+#include <boost/detail/lightweight_test.hpp>
+
+int main(int, char*[])
+{
+    using namespace pdalboost::uuids;
+
+    uuid u1 = nil_generator()();
+    uuid u2 = {{0}};
+    BOOST_TEST_EQ(u1, u2);
+
+    uuid u3 = nil_uuid();
+    BOOST_TEST_EQ(u3, u2);
+
+    return pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/uuid/test/test_random_generator.cpp b/vendor/pdalboost/libs/uuid/test/test_random_generator.cpp
new file mode 100644
index 0000000..72dc2dd
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_random_generator.cpp
@@ -0,0 +1,71 @@
+//  (C) Copyright Andy Tompkins 2010. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  libs/uuid/test/test_random_generator.cpp  -------------------------------//
+
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/random_generator.hpp>
+#include <boost/uuid/uuid_io.hpp>
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/random.hpp>
+
+template <typename RandomUuidGenerator>
+void check_random_generator(RandomUuidGenerator& uuid_gen)
+{
+    pdalboost::uuids::uuid u1 = uuid_gen();
+    pdalboost::uuids::uuid u2 = uuid_gen();
+
+    BOOST_TEST_NE(u1, u2);
+
+    // check variant
+    BOOST_TEST_EQ(u1.variant(), pdalboost::uuids::uuid::variant_rfc_4122);
+
+    // version
+    BOOST_TEST_EQ(u1.version(), pdalboost::uuids::uuid::version_random_number_based);
+}
+
+int main(int, char*[])
+{
+    using namespace pdalboost::uuids;
+
+    // default random number generator
+    random_generator uuid_gen1;
+    check_random_generator(uuid_gen1);
+    
+    // specific random number generator
+    basic_random_generator<pdalboost::rand48> uuid_gen2;
+    check_random_generator(uuid_gen2);
+    
+    // pass by reference
+    pdalboost::ecuyer1988 ecuyer1988_gen;
+    basic_random_generator<pdalboost::ecuyer1988> uuid_gen3(ecuyer1988_gen);
+    check_random_generator(uuid_gen3);
+
+    // pass by pointer
+    pdalboost::lagged_fibonacci607 lagged_fibonacci607_gen;
+    basic_random_generator<pdalboost::lagged_fibonacci607> uuid_gen4(&lagged_fibonacci607_gen);
+    check_random_generator(uuid_gen4);
+
+    // random device
+    //basic_random_generator<pdalboost::random_device> uuid_gen5;
+    //check_random_generator(uuid_gen5);
+    
+    // there was a bug in basic_random_generator where it did not
+    // produce very random numbers.  This checks for that bug.
+    uuid u = random_generator()();
+    if ( (u.data[4] == u.data[12]) &&
+         (u.data[5] == u.data[9] && u.data[5] == u.data[13]) &&
+         (u.data[7] == u.data[11] && u.data[7] == u.data[15]) &&
+         (u.data[10] == u.data[14]) )
+    {
+        BOOST_ERROR("basic_random_generator is not producing random uuids");
+    }
+
+    return pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/uuid/test/test_serialization.cpp b/vendor/pdalboost/libs/uuid/test/test_serialization.cpp
new file mode 100644
index 0000000..5ae54f3
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_serialization.cpp
@@ -0,0 +1,71 @@
+//  (C) Copyright Andy Tompkins 2007. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Purpose to test serializing uuids with narrow archives
+
+#include <boost/detail/lightweight_test.hpp>
+#include <sstream>
+#include <iostream>
+
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_serialize.hpp>
+#include <boost/uuid/uuid_io.hpp>
+
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
+#include <boost/archive/xml_oarchive.hpp>
+#include <boost/archive/xml_iarchive.hpp>
+
+#include <boost/archive/binary_oarchive.hpp>
+#include <boost/archive/binary_iarchive.hpp>
+
+template <class OArchiveType, class IArchiveType, class OStringStreamType, class IStringStreamType>
+void test_archive()
+{
+    using namespace std;
+    using namespace pdalboost::uuids;
+    
+    OStringStreamType o_stream;
+    
+    uuid u1 = {{0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef, 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef}};
+
+    uuid u2;
+    
+    // save
+    {
+        OArchiveType oa(o_stream);
+        
+        oa << BOOST_SERIALIZATION_NVP(u1);
+    }
+    
+    //cout << "stream:" << o_stream.str() << "\n\n";
+    
+    // load
+    {
+        IStringStreamType i_stream(o_stream.str());
+        IArchiveType ia(i_stream);
+        
+        ia >> BOOST_SERIALIZATION_NVP(u2);
+    }
+    
+    BOOST_TEST_EQ(u1, u2);
+}
+
+int main( int /* argc */, char* /* argv */[] )
+{
+    using namespace std;
+    using namespace pdalboost::archive;
+    
+    test_archive<text_oarchive, text_iarchive, ostringstream, istringstream>();
+    test_archive<xml_oarchive, xml_iarchive, ostringstream, istringstream>();
+    test_archive<binary_oarchive, binary_iarchive, ostringstream, istringstream>();
+
+    return pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/uuid/test/test_sha1.cpp b/vendor/pdalboost/libs/uuid/test/test_sha1.cpp
new file mode 100644
index 0000000..cf8859b
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_sha1.cpp
@@ -0,0 +1,306 @@
+//  (C) Copyright Andy Tompkins 2007. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  libs/uuid/test/test_sha1.cpp  -------------------------------//
+
+#include <boost/uuid/sha1.hpp>
+#include <boost/detail/lightweight_test.hpp>
+#include <algorithm>
+#include <cstring>
+#include <cstddef>
+
+#ifdef BOOST_NO_STDC_NAMESPACE
+namespace std {
+  using ::strlen;
+  using ::size_t;
+} //namespace std
+#endif
+
+void test_sha1_digest_equal_array(char const * file, int line, char const * function,
+                          const unsigned int (&lhs)[5], const unsigned int (&rhs)[5])
+{
+    for (size_t i=0; i<5; i++) {
+        if ( lhs[i] != rhs[i]) {
+            std::cerr << file << "(" << line << "): sha1 digest [";
+            for (size_t l=0; l<5; l++) {
+                if (l != 0) {
+                    std::cerr << " ";
+                }
+                std::cerr << std::hex << (int)lhs[l];
+            }
+
+            std::cerr << "] not equal [";
+            for (size_t r=0; r<5; r++) {
+                if (r != 0) {
+                    std::cerr << " ";
+                }
+                std::cerr << std::hex << (int)rhs[r];
+            }
+            std::cerr << "] in function '" << function << "'" << std::endl;
+            ++pdalboost::detail::test_errors();
+            return;
+        }
+    }
+}
+
+
+#define BOOST_TEST_SHA1_DIGEST(lhs, rhs) ( test_sha1_digest_equal_array(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION, lhs, rhs) )
+
+void test_sha1(char const*const message, unsigned int length, const unsigned int (&correct_digest)[5])
+{
+    pdalboost::uuids::detail::sha1 sha;
+    sha.process_bytes(message, length);
+
+    unsigned int digest[5];
+    sha.get_digest(digest);
+
+    BOOST_TEST_SHA1_DIGEST(digest, correct_digest);
+}
+
+void test_quick()
+{
+    struct test_case
+    {
+        char const* message;
+        unsigned int digest[5];
+    };
+    test_case cases[] =
+    { { "",
+        { 0xda39a3ee, 0x5e6b4b0d, 0x3255bfef, 0x95601890, 0xafd80709 } }
+    , { "The quick brown fox jumps over the lazy dog",
+        { 0x2fd4e1c6, 0x7a2d28fc, 0xed849ee1, 0xbb76e739, 0x1b93eb12 } }
+    , { "The quick brown fox jumps over the lazy cog",
+        { 0xde9f2c7f, 0xd25e1b3a, 0xfad3e85a, 0x0bd17d9b, 0x100db4b3 } }
+    };
+
+    for (int i=0; i!=sizeof(cases)/sizeof(cases[0]); ++i) {
+        test_case const& tc = cases[i];
+        test_sha1(tc.message, std::strlen(tc.message), tc.digest);
+    }
+}
+
+//SHA Test Vector for Hashing Byte-Oriented Messages
+//http://csrc.nist.gov/cryptval/shs.htm
+//http://csrc.nist.gov/cryptval/shs/shabytetestvectors.zip
+//values from SHA1ShortMsg.txt
+void test_short_messages()
+{
+    struct test_case
+    {
+        char const* message;
+        unsigned int digest[5];
+    };
+    test_case cases[] =
+    { { "",
+         { 0xda39a3ee, 0x5e6b4b0d, 0x3255bfef, 0x95601890, 0xafd80709 } }
+    , { "a8", 
+         { 0x99f2aa95, 0xe36f95c2, 0xacb0eaf2, 0x3998f030, 0x638f3f15 } }
+    , { "3000", 
+         { 0xf944dcd6, 0x35f9801f, 0x7ac90a40, 0x7fbc4799, 0x64dec024 } }
+    , { "42749e", 
+         { 0xa444319e, 0x9b6cc1e8, 0x464c511e, 0xc0969c37, 0xd6bb2619 } }
+    , { "9fc3fe08", 
+         { 0x16a0ff84, 0xfcc156fd, 0x5d3ca3a7, 0x44f20a23, 0x2d172253 } }
+    , { "b5c1c6f1af", 
+         { 0xfec9deeb, 0xfcdedaf6, 0x6dda525e, 0x1be43597, 0xa73a1f93 } }
+    , { "e47571e5022e", 
+         { 0x8ce05118, 0x1f0ed5e9, 0xd0c498f6, 0xbc4caf44, 0x8d20deb5 } }
+    , { "3e1b28839fb758", 
+         { 0x67da5383, 0x7d89e03b, 0xf652ef09, 0xc369a341, 0x5937cfd3 } }
+    , { "a81350cbb224cb90", 
+         { 0x305e4ff9, 0x888ad855, 0xa78573cd, 0xdf4c5640, 0xcce7e946 } }
+    , { "c243d167923dec3ce1", 
+         { 0x5902b77b, 0x3265f023, 0xf9bbc396, 0xba1a93fa, 0x3509bde7 } }
+    , { "50ac18c59d6a37a29bf4", 
+         { 0xfcade5f5, 0xd156bf6f, 0x9af97bdf, 0xa9c19bcc, 0xfb4ff6ab } }
+    , { "98e2b611ad3b1cccf634f6", 
+         { 0x1d20fbe0, 0x0533c10e, 0x3cbd6b27, 0x088a5de0, 0xc632c4b5 } }
+    , { "73fe9afb68e1e8712e5d4eec", 
+         { 0x7e1b7e0f, 0x7a8f3455, 0xa9c03e95, 0x80fd63ae, 0x205a2d93 } }
+    , { "9e701ed7d412a9226a2a130e66", 
+         { 0x706f0677, 0x146307b2, 0x0bb0e8d6, 0x311e3299, 0x66884d13 } }
+    , { "6d3ee90413b0a7cbf69e5e6144ca", 
+         { 0xa7241a70, 0x3aaf0d53, 0xfe142f86, 0xbf2e8492, 0x51fa8dff } }
+    , { "fae24d56514efcb530fd4802f5e71f", 
+         { 0x400f5354, 0x6916d33a, 0xd01a5e6d, 0xf66822df, 0xbdc4e9e6 } }
+    , { "c5a22dd6eda3fe2bdc4ddb3ce6b35fd1", 
+         { 0xfac8ab93, 0xc1ae6c16, 0xf0311872, 0xb984f729, 0xdc928ccd } }
+    , { "d98cded2adabf08fda356445c781802d95", 
+         { 0xfba6d750, 0xc18da58f, 0x6e2aab10, 0x112b9a5e, 0xf3301b3b } }
+    , { "bcc6d7087a84f00103ccb32e5f5487a751a2", 
+         { 0x29d27c2d, 0x44c205c8, 0x107f0351, 0xb05753ac, 0x708226b6 } }
+    , { "36ecacb1055434190dbbc556c48bafcb0feb0d", 
+         { 0xb971bfc1, 0xebd6f359, 0xe8d74cb7, 0xecfe7f89, 0x8d0ba845 } }
+    , { "5ff9edb69e8f6bbd498eb4537580b7fba7ad31d0", 
+         { 0x96d08c43, 0x0094b9fc, 0xc164ad2f, 0xb6f72d0a, 0x24268f68 } }
+    , { "c95b441d8270822a46a798fae5defcf7b26abace36", 
+         { 0xa287ea75, 0x2a593d52, 0x09e28788, 0x1a09c49f, 0xa3f0beb1 } }
+    , { "83104c1d8a55b28f906f1b72cb53f68cbb097b44f860", 
+         { 0xa06c7137, 0x79cbd885, 0x19ed4a58, 0x5ac0cb8a, 0x5e9d612b } }
+    , { "755175528d55c39c56493d697b790f099a5ce741f7754b", 
+         { 0xbff7d52c, 0x13a36881, 0x32a1d407, 0xb1ab40f5, 0xb5ace298 } }
+    , { "088fc38128bbdb9fd7d65228b3184b3faac6c8715f07272f", 
+         { 0xc7566b91, 0xd7b6f56b, 0xdfcaa978, 0x1a7b6841, 0xaacb17e9 } }
+    , { "a4a586eb9245a6c87e3adf1009ac8a49f46c07e14185016895", 
+         { 0xffa30c0b, 0x5c550ea4, 0xb1e34f8a, 0x60ec9295, 0xa1e06ac1 } }
+    , { "8e7c555270c006092c2a3189e2a526b873e2e269f0fb28245256", 
+         { 0x29e66ed2, 0x3e914351, 0xe872aa76, 0x1df6e4f1, 0xa07f4b81 } }
+    , { "a5f3bfa6bb0ba3b59f6b9cbdef8a558ec565e8aa3121f405e7f2f0", 
+         { 0xb28cf5e5, 0xb806a014, 0x91d41f69, 0xbd924876, 0x5c5dc292 } }
+    , { "589054f0d2bd3c2c85b466bfd8ce18e6ec3e0b87d944cd093ba36469", 
+         { 0x60224fb7, 0x2c460696, 0x52cd78bc, 0xd08029ef, 0x64da62f3 } }
+    , { "a0abb12083b5bbc78128601bf1cbdbc0fdf4b862b24d899953d8da0ff3", 
+         { 0xb72c4a86, 0xf72608f2, 0x4c05f3b9, 0x088ef92f, 0xba431df7 } }
+    , { "82143f4cea6fadbf998e128a8811dc75301cf1db4f079501ea568da68eeb", 
+         { 0x73779ad5, 0xd6b71b9b, 0x8328ef72, 0x20ff12eb, 0x167076ac } }
+    , { "9f1231dd6df1ff7bc0b0d4f989d048672683ce35d956d2f57913046267e6f3", 
+         { 0xa09671d4, 0x452d7cf5, 0x0015c914, 0xa1e31973, 0xd20cc1a0 } }
+    , { "041c512b5eed791f80d3282f3a28df263bb1df95e1239a7650e5670fc2187919", 
+         { 0xe88cdcd2, 0x33d99184, 0xa6fd260b, 0x8fca1b7f, 0x7687aee0 } }
+    , { "17e81f6ae8c2e5579d69dafa6e070e7111461552d314b691e7a3e7a4feb3fae418", 
+         { 0x010def22, 0x850deb11, 0x68d525e8, 0xc84c2811, 0x6cb8a269 } }
+    , { "d15976b23a1d712ad28fad04d805f572026b54dd64961fda94d5355a0cc98620cf77", 
+         { 0xaeaa40ba, 0x1717ed54, 0x39b1e6ea, 0x901b294b, 0xa500f9ad } }
+    , { "09fce4d434f6bd32a44e04b848ff50ec9f642a8a85b37a264dc73f130f22838443328f", 
+         { 0xc6433791, 0x238795e3, 0x4f080a5f, 0x1f1723f0, 0x65463ca0 } }
+    , { "f17af27d776ec82a257d8d46d2b46b639462c56984cc1be9c1222eadb8b26594a25c709d", 
+         { 0xe21e22b8, 0x9c1bb944, 0xa32932e6, 0xb2a2f20d, 0x491982c3 } }
+    , { "b13ce635d6f8758143ffb114f2f601cb20b6276951416a2f94fbf4ad081779d79f4f195b22", 
+         { 0x575323a9, 0x661f5d28, 0x387964d2, 0xba6ab92c, 0x17d05a8a } }
+    , { "5498793f60916ff1c918dde572cdea76da8629ba4ead6d065de3dfb48de94d234cc1c5002910", 
+         { 0xfeb44494, 0xaf72f245, 0xbfe68e86, 0xc4d7986d, 0x57c11db7 } }
+    , { "498a1e0b39fa49582ae688cd715c86fbaf8a81b8b11b4d1594c49c902d197c8ba8a621fd6e3be5", 
+         { 0xcff2290b, 0x3648ba28, 0x31b98dde, 0x436a72f9, 0xebf51eee } }
+    , { "3a36ae71521f9af628b3e34dcb0d4513f84c78ee49f10416a98857150b8b15cb5c83afb4b570376e", 
+         { 0x9b4efe9d, 0x27b96590, 0x5b0c3dab, 0x67b8d7c9, 0xebacd56c } }
+    , { "dcc76b40ae0ea3ba253e92ac50fcde791662c5b6c948538cffc2d95e9de99cac34dfca38910db2678f", 
+         { 0xafedb0ff, 0x156205bc, 0xd831cbdb, 0xda43db8b, 0x0588c113 } }
+    , { "5b5ec6ec4fd3ad9c4906f65c747fd4233c11a1736b6b228b92e90cddabb0c7c2fcf9716d3fad261dff33", 
+         { 0x8deb1e85, 0x8f88293a, 0x5e5e4d52, 0x1a34b2a4, 0xefa70fc4 } }
+    , { "df48a37b29b1d6de4e94717d60cdb4293fcf170bba388bddf7a9035a15d433f20fd697c3e4c8b8c5f590ab", 
+         { 0x95cbdac0, 0xf74afa69, 0xcebd0e5c, 0x7defbc6f, 0xaf0cbeaf } }
+    , { "1f179b3b82250a65e1b0aee949e218e2f45c7a8dbfd6ba08de05c55acfc226b48c68d7f7057e5675cd96fcfc", 
+         { 0xf0307bcb, 0x92842e5a, 0xe0cd4f4f, 0x14f3df7f, 0x877fbef2 } }
+    , { "ee3d72da3a44d971578972a8e6780ce64941267e0f7d0179b214fa97855e1790e888e09fbe3a70412176cb3b54", 
+         { 0x7b13bb0d, 0xbf14964b, 0xd63b133a, 0xc85e2210, 0x0542ef55 } }
+    , { "d4d4c7843d312b30f610b3682254c8be96d5f6684503f8fbfbcd15774fc1b084d3741afb8d24aaa8ab9c104f7258", 
+         { 0xc314d2b6, 0xcf439be6, 0x78d2a74e, 0x890d96cf, 0xac1c02ed } }
+    , { "32c094944f5936a190a0877fb9178a7bf60ceae36fd530671c5b38c5dbd5e6a6c0d615c2ac8ad04b213cc589541cf6", 
+         { 0x4d0be361, 0xe410b47a, 0x9d67d8ce, 0x0bb6a8e0, 0x1c53c078 } }
+    , { "e5d3180c14bf27a5409fa12b104a8fd7e9639609bfde6ee82bbf9648be2546d29688a65e2e3f3da47a45ac14343c9c02", 
+         { 0xe5353431, 0xffae097f, 0x675cbf49, 0x8869f6fb, 0xb6e1c9f2 } }
+    , { "e7b6e4b69f724327e41e1188a37f4fe38b1dba19cbf5a7311d6e32f1038e97ab506ee05aebebc1eed09fc0e357109818b9", 
+         { 0xb8720a70, 0x68a085c0, 0x18ab1896, 0x1de2765a, 0xa6cd9ac4 } }
+    , { "bc880cb83b8ac68ef2fedc2da95e7677ce2aa18b0e2d8b322701f67af7d5e7a0d96e9e33326ccb7747cfff0852b961bfd475", 
+         { 0xb0732181, 0x568543ba, 0x85f2b6da, 0x602b4b06, 0x5d9931aa } }
+    , { "235ea9c2ba7af25400f2e98a47a291b0bccdaad63faa2475721fda5510cc7dad814bce8dabb611790a6abe56030b798b75c944", 
+         { 0x9c22674c, 0xf3222c3b, 0xa9216726, 0x94aafee4, 0xce67b96b } }
+    , { "07e3e29fed63104b8410f323b975fd9fba53f636af8c4e68a53fb202ca35dd9ee07cb169ec5186292e44c27e5696a967f5e67709",
+         { 0xd128335f, 0x4cecca90, 0x66cdae08, 0x958ce656, 0xff0b4cfc } }
+    , { "65d2a1dd60a517eb27bfbf530cf6a5458f9d5f4730058bd9814379547f34241822bf67e6335a6d8b5ed06abf8841884c636a25733f", 
+         { 0x0b67c57a, 0xc578de88, 0xa2ae055c, 0xaeaec8bb, 0x9b0085a0 } }
+    , { "dcc86b3bd461615bab739d8daafac231c0f462e819ad29f9f14058f3ab5b75941d4241ea2f17ebb8a458831b37a9b16dead4a76a9b0e", 
+         { 0xc766f912, 0xa89d4ccd, 0xa88e0cce, 0x6a713ef5, 0xf178b596 } }
+    , { "4627d54f0568dc126b62a8c35fb46a9ac5024400f2995e51635636e1afc4373dbb848eb32df23914230560b82477e9c3572647a7f2bb92", 
+         { 0x9aa3925a, 0x9dcb177b, 0x15ccff9b, 0x78e70cf3, 0x44858779 } }
+    , { "ba531affd4381168ef24d8b275a84d9254c7f5cc55fded53aa8024b2c5c5c8aa7146fe1d1b83d62b70467e9a2e2cb67b3361830adbab28d7", 
+         { 0x4811fa30, 0x042fc076, 0xacf37c8e, 0x2274d025, 0x307e5943 } }
+    , { "8764dcbcf89dcf4282eb644e3d568bdccb4b13508bfa7bfe0ffc05efd1390be22109969262992d377691eb4f77f3d59ea8466a74abf57b2ef4", 
+         { 0x67430184, 0x50c97307, 0x61ee2b13, 0x0df9b91c, 0x1e118150 } }
+    , { "497d9df9ddb554f3d17870b1a31986c1be277bc44feff713544217a9f579623d18b5ffae306c25a45521d2759a72c0459b58957255ab592f3be4", 
+         { 0x71ad4a19, 0xd37d92a5, 0xe6ef3694, 0xddbeb5aa, 0x61ada645 } }
+    , { "72c3c2e065aefa8d9f7a65229e818176eef05da83f835107ba90ec2e95472e73e538f783b416c04654ba8909f26a12db6e5c4e376b7615e4a25819", 
+         { 0xa7d9dc68, 0xdacefb7d, 0x61161860, 0x48cb355c, 0xc548e11d } }
+    , { "7cc9894454d0055ab5069a33984e2f712bef7e3124960d33559f5f3b81906bb66fe64da13c153ca7f5cabc89667314c32c01036d12ecaf5f9a78de98", 
+         { 0x142e429f, 0x0522ba5a, 0xbf5131fa, 0x81df82d3, 0x55b96909 } }
+    , { "74e8404d5a453c5f4d306f2cfa338ca65501c840ddab3fb82117933483afd6913c56aaf8a0a0a6b2a342fc3d9dc7599f4a850dfa15d06c61966d74ea59", 
+         { 0xef72db70, 0xdcbcab99, 0x1e963797, 0x6c6faf00, 0xd22caae9 } }
+    , { "46fe5ed326c8fe376fcc92dc9e2714e2240d3253b105adfbb256ff7a19bc40975c604ad7c0071c4fd78a7cb64786e1bece548fa4833c04065fe593f6fb10", 
+         { 0xf220a745, 0x7f4588d6, 0x39dc2140, 0x7c942e98, 0x43f8e26b } }
+    , { "836dfa2524d621cf07c3d2908835de859e549d35030433c796b81272fd8bc0348e8ddbc7705a5ad1fdf2155b6bc48884ac0cd376925f069a37849c089c8645", 
+         { 0xddd2117b, 0x6e309c23, 0x3ede85f9, 0x62a0c2fc, 0x215e5c69 } }
+    , { "7e3a4c325cb9c52b88387f93d01ae86d42098f5efa7f9457388b5e74b6d28b2438d42d8b64703324d4aa25ab6aad153ae30cd2b2af4d5e5c00a8a2d0220c6116", 
+         { 0xa3054427, 0xcdb13f16, 0x4a610b34, 0x8702724c, 0x808a0dcc } }
+    };
+
+    char const xdigits[17] = "0123456789abcdef";
+    char const*const xdigits_end = xdigits+16;
+
+    for (std::size_t i=0; i!=sizeof(cases)/sizeof(cases[0]); ++i) {
+        test_case const& tc = cases[i];
+
+        pdalboost::uuids::detail::sha1 sha;
+        std::size_t message_length = std::strlen(tc.message);
+        BOOST_TEST_EQ(message_length % 2, 0u);
+
+        for (std::size_t b=0; b<message_length; b+=2) {
+            char c = tc.message[b];
+            char const* f = std::find(xdigits, xdigits_end, c);
+            BOOST_TEST_NE(f, xdigits_end);
+            
+            unsigned char byte = static_cast<unsigned char>(std::distance(&xdigits[0], f));
+
+            c = tc.message[b+1];
+            f = std::find(xdigits, xdigits_end, c);
+            BOOST_TEST_NE(f, xdigits_end);
+
+            byte <<= 4;
+            byte |= static_cast<unsigned char>(std::distance(&xdigits[0], f));
+
+            sha.process_byte(byte);
+        }
+
+        unsigned int digest[5];
+        sha.get_digest(digest);
+
+        BOOST_TEST_SHA1_DIGEST(digest, tc.digest);
+    }
+}
+
+// test long strings of 'a's
+void test_long()
+{
+
+    // test 1 million 'a's
+    struct test_case
+    {
+        unsigned int count;
+        unsigned int digest[5];
+    };
+    test_case cases[] =
+    { { 1000000, { 0x34aa973c, 0xd4c4daa4, 0xf61eeb2b, 0xdbad2731, 0x6534016f } }
+    , { 1000000000, { 0xd0f3e4f2, 0xf31c665a, 0xbbd8f518, 0xe848d5cb, 0x80ca78f7 } }
+    //, { 2000000000, { 0xda19be1b, 0x5ec3bc13, 0xda5533bd, 0x0c225a2f, 0x38da50ed } }
+    //, { 2147483647, { 0x1e5b490b, 0x10255e37, 0xfd96d096, 0x4f2fbfb9, 0x1ed47536 } }
+    //, { 4294967295 /*2^32 - 1*/, { 0xd84b866e, 0x70f6348f, 0xb0ddc21f, 0x373fe956, 0x1bf1005d } }
+    };
+
+    for (size_t iCase=0; iCase<sizeof(cases)/sizeof(cases[0]); iCase++) {
+        test_case const& tc = cases[iCase];
+
+        pdalboost::uuids::detail::sha1 sha;
+        for (size_t i=0; i<tc.count; i++) {
+            sha.process_byte('a');
+        }
+
+        unsigned int digest[5];
+        sha.get_digest(digest);
+
+        BOOST_TEST_SHA1_DIGEST(digest, tc.digest);
+    }
+}
+
+int main(int, char*[])
+{
+    test_quick();
+    test_short_messages();
+    test_long();
+    
+    return pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/uuid/test/test_string_generator.cpp b/vendor/pdalboost/libs/uuid/test/test_string_generator.cpp
new file mode 100644
index 0000000..bf53366
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_string_generator.cpp
@@ -0,0 +1,58 @@
+//  (C) Copyright Andy Tompkins 2010. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  libs/uuid/test/test_string_generator.cpp  -------------------------------//
+
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_io.hpp>
+#include <boost/uuid/string_generator.hpp>
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/config.hpp>
+#include <string>
+
+int main(int, char*[])
+{
+    using namespace pdalboost::uuids;
+    
+    uuid nil_uuid = {{0}};
+    BOOST_TEST_EQ(nil_uuid.is_nil(), true);
+
+    string_generator gen;
+    uuid u = gen("00000000-0000-0000-0000-000000000000");
+    BOOST_TEST_EQ(u, nil_uuid);
+    BOOST_TEST_EQ(u.is_nil(), true);
+
+    const uuid u_increasing = {{ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }};
+    const uuid u_decreasing = {{ 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }};
+
+    u = gen("0123456789abcdef0123456789ABCDEF");
+    BOOST_TEST_EQ(u, u_increasing);
+    
+    u = gen("{0123456789abcdef0123456789ABCDEF}");
+    BOOST_TEST_EQ(u, u_increasing);
+
+    u = gen("{01234567-89AB-CDEF-0123-456789abcdef}");
+    BOOST_TEST_EQ(u, u_increasing);
+
+    u = gen("01234567-89AB-CDEF-0123-456789abcdef");
+    BOOST_TEST_EQ(u, u_increasing);
+    
+    u = gen(std::string("fedcba98-7654-3210-fedc-ba9876543210"));
+    BOOST_TEST_EQ(u, u_decreasing);
+
+#ifndef BOOST_NO_STD_WSTRING
+    u = gen(L"fedcba98-7654-3210-fedc-ba9876543210");
+    BOOST_TEST_EQ(u, u_decreasing);
+
+    u = gen(std::wstring(L"01234567-89ab-cdef-0123-456789abcdef"));
+    BOOST_TEST_EQ(u, u_increasing);
+#endif //BOOST_NO_STD_WSTRING
+
+    return pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/uuid/test/test_tagging.cpp b/vendor/pdalboost/libs/uuid/test/test_tagging.cpp
new file mode 100644
index 0000000..106d7d2
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_tagging.cpp
@@ -0,0 +1,80 @@
+//  (C) Copyright Andy Tompkins 2009. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  libs/uuid/test/test_tagging.cpp  -------------------------------//
+
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_generators.hpp>
+#include <boost/detail/lightweight_test.hpp>
+
+class object
+{
+public:
+    object()
+        : tag(pdalboost::uuids::random_generator()())
+        , state(0)
+    {}
+
+    explicit object(int state)
+        : tag(pdalboost::uuids::random_generator()())
+        , state(state)
+    {}
+    
+    object(object const& rhs)
+        : tag(rhs.tag)
+        , state(rhs.state)
+    {}
+    
+    bool operator==(object const& rhs) const {
+        return tag == rhs.tag;
+    }
+    bool operator!=(object const& rhs) const {
+      return !(operator==(rhs));
+    }
+    
+    object& operator=(object const& rhs) {
+        tag = rhs.tag;
+        state = rhs.state;
+        return *this;
+    }
+    
+    int get_state() const { return state; }
+    void set_state(int new_state) { state = new_state; }
+    
+private:
+    pdalboost::uuids::uuid tag;
+    
+    int state;
+};
+
+template <typename elem, typename traits>
+std::basic_ostream<elem, traits>& operator<<(std::basic_ostream<elem, traits>& os, object const& o)
+{
+    os << o.get_state();
+    return os;
+}
+
+int main(int, char*[])
+{
+    object o1(1);
+
+    object o2 = o1;
+    BOOST_TEST_EQ(o1, o2);
+
+    o2.set_state(2);
+    BOOST_TEST_EQ(o1, o2);
+    
+    object o3;
+    o3.set_state(3);
+
+    BOOST_TEST_NE(o1, o3);
+    BOOST_TEST_NE(o2, o3);
+    
+    return pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/uuid/test/test_uuid.cpp b/vendor/pdalboost/libs/uuid/test/test_uuid.cpp
new file mode 100644
index 0000000..c9a7232
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_uuid.cpp
@@ -0,0 +1,245 @@
+//  (C) Copyright Andy Tompkins 2007. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  libs/uuid/test/test_uuid.cpp  -------------------------------//
+
+#include <iostream>
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_io.hpp>
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/functional/hash.hpp>
+#include <boost/current_function.hpp>
+
+void test_uuid_equal_array(char const * file, int line, char const * function,
+                           pdalboost::uuids::uuid const& lhs, const unsigned char (&rhs)[16])
+{
+    for (size_t i=0; i<16; i++) {
+        if ( *(lhs.begin()+i) != rhs[i]) {
+            std::cerr << file << "(" << line << "): uuid " << lhs << " not equal " << "{";
+            for (size_t j=0; j<16; j++) {
+                if (j != 0) {
+                    std::cerr << " ";
+                }
+                std::cerr << std::hex << (int)rhs[j];
+            }
+            std::cerr << "} in function '" << function << "'" << std::endl;
+            ++pdalboost::detail::test_errors();
+            return;
+        }
+    }
+}
+
+
+#define BOOST_TEST_UUID(lhs, rhs) ( test_uuid_equal_array(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION, lhs, rhs) )
+
+int main(int, char*[])
+{
+    using namespace pdalboost::uuids;
+
+    // uuid::static_size
+    BOOST_TEST_EQ(uuid::static_size(), 16U);
+
+    { // uuid::operator=()
+        uuid u1 = {{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}};
+        uuid u2 = u1;
+        BOOST_TEST_EQ(u2, u1);
+    }
+
+    { // uuid::begin(), end()
+        uuid u = {{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}};
+        unsigned char values[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+        BOOST_TEST_UUID(u, values);
+    }
+
+    { // uuid::begin() const, end() const
+        const uuid u = {{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}};
+        unsigned char values[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+        BOOST_TEST_UUID(u, values);
+    }
+
+     { // uuid::size()
+        uuid u; // uninitialized
+        BOOST_TEST_EQ(u.size(), 16U);
+    }
+
+    { // uuid::is_nil()
+        uuid u1 = {{0}};
+        BOOST_TEST_EQ(u1.is_nil(), true);
+
+        uuid u2 = {{1,0}};
+        BOOST_TEST_EQ(u2.is_nil(), false);
+    }
+
+    { // uuid::variant()
+        struct Test {
+            unsigned char octet7;
+            pdalboost::uuids::uuid::variant_type variant;
+        };
+        const Test tests[] =
+            { { 0x00, pdalboost::uuids::uuid::variant_ncs }
+            , { 0x10, pdalboost::uuids::uuid::variant_ncs }
+            , { 0x20, pdalboost::uuids::uuid::variant_ncs }
+            , { 0x30, pdalboost::uuids::uuid::variant_ncs }
+            , { 0x40, pdalboost::uuids::uuid::variant_ncs }
+            , { 0x50, pdalboost::uuids::uuid::variant_ncs }
+            , { 0x60, pdalboost::uuids::uuid::variant_ncs }
+            , { 0x70, pdalboost::uuids::uuid::variant_ncs }
+            , { 0x80, pdalboost::uuids::uuid::variant_rfc_4122 }
+            , { 0x90, pdalboost::uuids::uuid::variant_rfc_4122 }
+            , { 0xa0, pdalboost::uuids::uuid::variant_rfc_4122 }
+            , { 0xb0, pdalboost::uuids::uuid::variant_rfc_4122 }
+            , { 0xc0, pdalboost::uuids::uuid::variant_microsoft }
+            , { 0xd0, pdalboost::uuids::uuid::variant_microsoft }
+            , { 0xe0, pdalboost::uuids::uuid::variant_future }
+            , { 0xf0, pdalboost::uuids::uuid::variant_future }
+            };
+        for (size_t i=0; i<sizeof(tests)/sizeof(Test); i++) {
+            uuid u = {};
+            u.data[8] = tests[i].octet7; // note that octet7 is array index 8
+
+            BOOST_TEST_EQ(u.variant(), tests[i].variant);
+        }
+    }
+
+     { // uuid::version()
+        struct Test {
+            unsigned char octet9;
+            pdalboost::uuids::uuid::version_type version;
+        };
+        const Test tests[] =
+            { { 0x00, pdalboost::uuids::uuid::version_unknown }
+            , { 0x10, pdalboost::uuids::uuid::version_time_based }
+            , { 0x20, pdalboost::uuids::uuid::version_dce_security }
+            , { 0x30, pdalboost::uuids::uuid::version_name_based_md5 }
+            , { 0x40, pdalboost::uuids::uuid::version_random_number_based }
+            , { 0x50, pdalboost::uuids::uuid::version_name_based_sha1 }
+            , { 0x60, pdalboost::uuids::uuid::version_unknown }
+            , { 0x70, pdalboost::uuids::uuid::version_unknown }
+            , { 0x80, pdalboost::uuids::uuid::version_unknown }
+            , { 0x90, pdalboost::uuids::uuid::version_unknown }
+            , { 0xa0, pdalboost::uuids::uuid::version_unknown }
+            , { 0xb0, pdalboost::uuids::uuid::version_unknown }
+            , { 0xc0, pdalboost::uuids::uuid::version_unknown }
+            , { 0xd0, pdalboost::uuids::uuid::version_unknown }
+            , { 0xe0, pdalboost::uuids::uuid::version_unknown }
+            , { 0xf0, pdalboost::uuids::uuid::version_unknown }
+            };
+        for (size_t i=0; i<sizeof(tests)/sizeof(Test); i++) {
+            uuid u = {{0}};
+            u.data[6] = tests[i].octet9; // note that octet9 is array index 8
+
+            BOOST_TEST_EQ(u.version(), tests[i].version);
+        }
+    }
+
+    { // uuid::swap(), swap()
+        uuid u1 = {{0}};
+        uuid u2 = {{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}};
+        u1.swap(u2);
+
+        unsigned char values1[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+        unsigned char values2[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+        BOOST_TEST_UUID(u1, values2);
+        BOOST_TEST_UUID(u2, values1);
+
+        swap(u1, u2);
+        BOOST_TEST_UUID(u1, values1);
+        BOOST_TEST_UUID(u2, values2);
+    }
+
+    { // test comparsion
+        uuid u1 = {{0}};
+        uuid u2 = {{1,0}};
+        uuid u3 = {{255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255}};
+        uuid u4 = {{0,1,0}};
+        uuid u5 = {{0,255,0}};
+
+        BOOST_TEST_EQ(u1, u1);
+
+        BOOST_TEST_NE(u1, u2);
+
+        BOOST_TEST(u1 < u2);
+        BOOST_TEST(u2 < u3);
+        BOOST_TEST(u1 < u4);
+        BOOST_TEST(u1 < u5);
+        BOOST_TEST(u4 < u5);
+        BOOST_TEST(u4 < u2);
+        BOOST_TEST(u5 < u2);
+
+        BOOST_TEST(u1 <= u1);
+        BOOST_TEST(u1 <= u2);
+        BOOST_TEST(u2 <= u3);
+
+        BOOST_TEST(u2 >= u1);
+        BOOST_TEST(u3 >= u1);
+
+        BOOST_TEST(u3 >= u3);
+        BOOST_TEST(u2 >= u1);
+        BOOST_TEST(u3 >= u1);
+    }
+
+    { // ticket 10510
+        // the uuids in the report
+        uuid u6 = {{0x14,0x5c,0xfc,0x95,0x80,0x50,0x45,0x5a,0x83,0x82,0x44,0xca,0x57,0xc1,0x48,0x3b}};
+        uuid u7 = {{0x14,0x5c,0xfc,0x95,0x80,0x50,0x45,0x5a,0x83,0x82,0x44,0xca,0x57,0xc1,0x48,0x3c}};
+
+        // simple uuids to reproduce problem
+        uuid u8 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}};
+        uuid u9 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2}};
+        uuid u10 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254}};
+        uuid u11 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255}};
+
+        // some additional uuids for testing boundary cases
+        uuid u12 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}};
+        uuid u13 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,2}};
+        uuid u14 = {{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}};
+        uuid u15 = {{255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255}};
+
+        BOOST_TEST(u6 < u7);
+        BOOST_TEST(!(u7 < u6));
+
+        BOOST_TEST(u8 < u9);
+        BOOST_TEST(!(u9 < u8));
+        BOOST_TEST(u8 < u10);
+        BOOST_TEST(!(u10 < u8));
+        BOOST_TEST(u8 < u11);
+        BOOST_TEST(!(u11 < u8));
+
+        BOOST_TEST(u9 < u10);
+        BOOST_TEST(!(u10 < u9));
+        BOOST_TEST(u9 < u11);
+        BOOST_TEST(!(u11 < u9));
+
+        BOOST_TEST(u10 < u11);
+        BOOST_TEST(!(u11 < u10));
+
+        BOOST_TEST(u12 < u13);
+        BOOST_TEST(!(u13 < u12));
+        BOOST_TEST(u14 < u15);
+        BOOST_TEST(!(u15 < u14));
+    }
+
+    { // test hash
+        uuid u1 = {{0}};
+        uuid u2 = {{1,0}};
+        uuid u3 = {{255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255}};
+
+        pdalboost::hash<uuid> uuid_hasher;
+
+        BOOST_TEST_EQ(uuid_hasher(u1), pdalboost::hash_range(u1.begin(), u1.end()));
+        BOOST_TEST_EQ(uuid_hasher(u2), pdalboost::hash_range(u2.begin(), u2.end()));
+        BOOST_TEST_EQ(uuid_hasher(u3), pdalboost::hash_range(u3.begin(), u3.end()));
+    }
+
+    { // test is_pod
+        BOOST_TEST_EQ(pdalboost::is_pod<uuid>::value, true);
+    }
+
+    return pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/uuid/test/test_uuid_class.cpp b/vendor/pdalboost/libs/uuid/test/test_uuid_class.cpp
new file mode 100644
index 0000000..f222c3f
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_uuid_class.cpp
@@ -0,0 +1,42 @@
+//  (C) Copyright Andy Tompkins 2009. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  libs/uuid/test/test_uuid_class.cpp  -------------------------------//
+
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_generators.hpp>
+#include <boost/uuid/uuid_io.hpp>
+
+#include <boost/detail/lightweight_test.hpp>
+
+class uuid_class : public pdalboost::uuids::uuid
+{
+public:
+    uuid_class()
+        : pdalboost::uuids::uuid(pdalboost::uuids::random_generator()())
+    {}
+    
+    explicit uuid_class(pdalboost::uuids::uuid const& u)
+        : pdalboost::uuids::uuid(u)
+    {}
+};
+
+int main(int, char*[])
+{
+    uuid_class u1;
+    uuid_class u2;
+    BOOST_TEST_NE(u1, u2);
+    BOOST_TEST_EQ(u1.is_nil(), false);
+    BOOST_TEST_EQ(u2.is_nil(), false);
+
+    u2 = u1;
+    BOOST_TEST_EQ(u1, u2);
+
+    return pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/uuid/test/test_uuid_in_map.cpp b/vendor/pdalboost/libs/uuid/test/test_uuid_in_map.cpp
new file mode 100644
index 0000000..123347f
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_uuid_in_map.cpp
@@ -0,0 +1,36 @@
+//  (C) Copyright Andy Tompkins 2011. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// libs/uuid/test/test_uuid_in_map.cpp  -------------------------------//
+
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_generators.hpp>
+#include <map>
+
+#include <boost/detail/lightweight_test.hpp>
+
+int main(int, char*[])
+{
+    pdalboost::uuids::random_generator gen;
+
+    pdalboost::uuids::uuid u1 = gen();
+    pdalboost::uuids::uuid u2 = gen();
+    pdalboost::uuids::uuid u3 = gen();
+
+    std::map<pdalboost::uuids::uuid, int> uuid_map;
+    uuid_map[u1] = 1;
+    uuid_map[u2] = 2;
+    uuid_map[u3] = 3;
+
+    BOOST_TEST_EQ(1, uuid_map[u1]);
+    BOOST_TEST_EQ(2, uuid_map[u2]);
+    BOOST_TEST_EQ(3, uuid_map[u3]);
+
+    return pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/uuid/test/test_uuid_no_simd.cpp b/vendor/pdalboost/libs/uuid/test/test_uuid_no_simd.cpp
new file mode 100644
index 0000000..6c6ffb8
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_uuid_no_simd.cpp
@@ -0,0 +1,153 @@
+//  (C) Copyright Andy Tompkins 2007. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+//  libs/uuid/test/test_uuid_no_simd.cpp  -------------------------------//
+
+// This test is a subset of libs/uuid/test/test_uuid.cpp, compiled without any
+// SIMD optimizations. The test specifically verifies generic implementations
+// of the routines.
+
+#define BOOST_UUID_NO_SIMD
+
+#include <iostream>
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_io.hpp>
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/current_function.hpp>
+
+void test_uuid_equal_array(char const * file, int line, char const * function,
+                           pdalboost::uuids::uuid const& lhs, const unsigned char (&rhs)[16])
+{
+    for (size_t i=0; i<16; i++) {
+        if ( *(lhs.begin()+i) != rhs[i]) {
+            std::cerr << file << "(" << line << "): uuid " << lhs << " not equal " << "{";
+            for (size_t j=0; j<16; j++) {
+                if (j != 0) {
+                    std::cerr << " ";
+                }
+                std::cerr << std::hex << (int)rhs[j];
+            }
+            std::cerr << "} in function '" << function << "'" << std::endl;
+            ++pdalboost::detail::test_errors();
+            return;
+        }
+    }
+}
+
+
+#define BOOST_TEST_UUID(lhs, rhs) ( test_uuid_equal_array(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION, lhs, rhs) )
+
+
+int main(int, char*[])
+{
+    using namespace pdalboost::uuids;
+
+    { // uuid::operator=()
+        uuid u1 = {{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}};
+        uuid u2 = u1;
+        BOOST_TEST_EQ(u2, u1);
+    }
+
+    { // uuid::is_nil()
+        uuid u1 = {{0}};
+        BOOST_TEST_EQ(u1.is_nil(), true);
+
+        uuid u2 = {{1,0}};
+        BOOST_TEST_EQ(u2.is_nil(), false);
+    }
+
+    { // uuid::swap(), swap()
+        uuid u1 = {{0}};
+        uuid u2 = {{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}};
+        u1.swap(u2);
+
+        unsigned char values1[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+        unsigned char values2[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+        BOOST_TEST_UUID(u1, values2);
+        BOOST_TEST_UUID(u2, values1);
+
+        swap(u1, u2);
+        BOOST_TEST_UUID(u1, values1);
+        BOOST_TEST_UUID(u2, values2);
+    }
+
+    { // test comparsion
+        uuid u1 = {{0}};
+        uuid u2 = {{1,0}};
+        uuid u3 = {{255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255}};
+        uuid u4 = {{0,1,0}};
+        uuid u5 = {{0,255,0}};
+
+        BOOST_TEST_EQ(u1, u1);
+
+        BOOST_TEST_NE(u1, u2);
+
+        BOOST_TEST(u1 < u2);
+        BOOST_TEST(u2 < u3);
+        BOOST_TEST(u1 < u4);
+        BOOST_TEST(u1 < u5);
+        BOOST_TEST(u4 < u5);
+        BOOST_TEST(u4 < u2);
+        BOOST_TEST(u5 < u2);
+
+        BOOST_TEST(u1 <= u1);
+        BOOST_TEST(u1 <= u2);
+        BOOST_TEST(u2 <= u3);
+
+        BOOST_TEST(u2 >= u1);
+        BOOST_TEST(u3 >= u1);
+
+        BOOST_TEST(u3 >= u3);
+        BOOST_TEST(u2 >= u1);
+        BOOST_TEST(u3 >= u1);
+    }
+
+    { // ticket 10510
+        // the uuids in the report
+        uuid u6 = {{0x14,0x5c,0xfc,0x95,0x80,0x50,0x45,0x5a,0x83,0x82,0x44,0xca,0x57,0xc1,0x48,0x3b}};
+        uuid u7 = {{0x14,0x5c,0xfc,0x95,0x80,0x50,0x45,0x5a,0x83,0x82,0x44,0xca,0x57,0xc1,0x48,0x3c}};
+
+        // simple uuids to reproduce problem
+        uuid u8 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}};
+        uuid u9 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2}};
+        uuid u10 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254}};
+        uuid u11 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255}};
+
+        // some additional uuids for testing boundary cases
+        uuid u12 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}};
+        uuid u13 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,2}};
+        uuid u14 = {{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}};
+        uuid u15 = {{255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255}};
+
+        BOOST_TEST(u6 < u7);
+        BOOST_TEST(!(u7 < u6));
+
+        BOOST_TEST(u8 < u9);
+        BOOST_TEST(!(u9 < u8));
+        BOOST_TEST(u8 < u10);
+        BOOST_TEST(!(u10 < u8));
+        BOOST_TEST(u8 < u11);
+        BOOST_TEST(!(u11 < u8));
+
+        BOOST_TEST(u9 < u10);
+        BOOST_TEST(!(u10 < u9));
+        BOOST_TEST(u9 < u11);
+        BOOST_TEST(!(u11 < u9));
+
+        BOOST_TEST(u10 < u11);
+        BOOST_TEST(!(u11 < u10));
+
+        BOOST_TEST(u12 < u13);
+        BOOST_TEST(!(u13 < u12));
+        BOOST_TEST(u14 < u15);
+        BOOST_TEST(!(u15 < u14));
+    }
+
+    return pdalboost::report_errors();
+}
diff --git a/vendor/pdalboost/libs/uuid/test/test_wserialization.cpp b/vendor/pdalboost/libs/uuid/test/test_wserialization.cpp
new file mode 100644
index 0000000..288f3b6
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/test/test_wserialization.cpp
@@ -0,0 +1,71 @@
+//  (C) Copyright Andy Tompkins 2008. Permission to copy, use, modify, sell and
+//  distribute this software is granted provided this copyright notice appears
+//  in all copies. This software is provided "as is" without express or implied
+//  warranty, and with no claim as to its suitability for any purpose.
+
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// Purpose to test serializing uuids with wide stream archives
+
+#include <boost/detail/lightweight_test.hpp>
+#include <sstream>
+#include <iostream>
+
+#include <boost/uuid/uuid.hpp>
+#include <boost/uuid/uuid_serialize.hpp>
+#include <boost/uuid/uuid_io.hpp>
+
+#include <boost/archive/text_woarchive.hpp>
+#include <boost/archive/text_wiarchive.hpp>
+
+#include <boost/archive/xml_woarchive.hpp>
+#include <boost/archive/xml_wiarchive.hpp>
+
+#include <boost/archive/binary_woarchive.hpp>
+#include <boost/archive/binary_wiarchive.hpp>
+
+template <class OArchiveType, class IArchiveType, class OStringStreamType, class IStringStreamType>
+void test_archive()
+{
+    using namespace std;
+    using namespace pdalboost::uuids;
+    
+    OStringStreamType o_stream;
+    
+    uuid u1 = {{0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef, 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef}};
+
+    uuid u2;
+    
+    // save
+    {
+        OArchiveType oa(o_stream);
+        
+        oa << BOOST_SERIALIZATION_NVP(u1);
+    }
+    
+    //wcout << "stream:" << o_stream.str() << "\n\n";
+    
+    // load
+    {
+        IStringStreamType i_stream(o_stream.str());
+        IArchiveType ia(i_stream);
+        
+        ia >> BOOST_SERIALIZATION_NVP(u2);
+    }
+    
+    BOOST_TEST_EQ(u1, u2);
+}
+
+int test_main( int /* argc */, char* /* argv */[] )
+{
+    using namespace std;
+    using namespace pdalboost::archive;
+    
+    test_archive<text_woarchive, text_wiarchive, wostringstream, wistringstream>();
+    test_archive<xml_woarchive, xml_wiarchive, wostringstream, wistringstream>();
+    test_archive<binary_woarchive, binary_wiarchive, wostringstream, wistringstream>();
+
+    return report_errors();
+}
diff --git a/vendor/pdalboost/libs/uuid/uuid.html b/vendor/pdalboost/libs/uuid/uuid.html
new file mode 100644
index 0000000..03f4e7c
--- /dev/null
+++ b/vendor/pdalboost/libs/uuid/uuid.html
@@ -0,0 +1,689 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Uuid Library</title>
+<style type="text/css">
+    pre { margin: 1em; padding: 1em; border: 1px solid #ddd; }
+</style>
+</head>
+<body>
+<h1><img src="../../boost.png" alt="Boost" WIDTH="277" HEIGHT="86">Uuid</h1>
+
+<h2><a name="Contents">Contents</a></h2>
+
+<ol>
+    <li><a href="#Introduction">Introduction</a></li>
+    <li><a href="#Configuration">Configuration</a></li>
+    <li><a href="#Examples">Examples</a></li>
+    <ul>
+        <li><a href="#Tagging">Tagging</a></li>
+        <li><a href="#POD Efficiencies">POD Efficiencies</a></li>
+        <li><a href="#Byte Extraction">Byte Extraction</a></li>
+    </ul
+    <li><a href="#Reference">Reference</a></li>
+    <ul>
+        <li><a href="#boost/uuid/uuid.hpp">boost/uuid/uuid.hpp</a></li>
+        <ul>
+            <li><a href="#Synopsis">Synopsis</a></li>
+            <li><a href="#Size">Size</a></li>
+            <li><a href="#Iteration">Iteration</a></li>
+            <li><a href="#Nil">Nil uuid</a></li>
+            <li><a href="#Variant">Variant</a></li>
+            <li><a href="#Version">Version</a></li>
+            <li><a href="#Swap">Swap</a></li>
+            <li><a href="#Operators">Operators</a></li>
+            <li><a href="#Hash">Hash</a></li>
+        </ul>
+        <li><a href="#boost/uuid/uuid_generators.hpp">boost/uuid/uuid_generators.hpp</a></li>
+        <ul>
+            <li><a href="#Synopsis_generators">Synopsis</a></li>
+        </ul>
+        <li><a href="#boost/uuid/nil_generator.hpp">boost/uuid/nil_generator.hpp</a></li>
+        <ul>
+            <li><a href="#Synopsis_nil_generator">Synopsis</a></li>
+            <li><a href="#Nil Generator">Nil Generator</a></li>
+        </ul>
+        <li><a href="#boost/uuid/string_generator.hpp">boost/uuid/string_generator.hpp</a></li>
+        <ul>
+            <li><a href="#Synopsis_string_generator">Synopsis</a></li>
+            <li><a href="#String Generator">String Generator</a></li>
+        </ul>
+        <li><a href="#boost/uuid/name_generator.hpp">boost/uuid/name_generator.hpp</a></li>
+        <ul>
+            <li><a href="#Synopsis_name_generator">Synopsis</a></li>
+            <li><a href="#Name Generator">Name Generator</a></li>
+        </ul>
+        <li><a href="#boost/uuid/random_generator.hpp">boost/uuid/random_generator.hpp</a></li>
+        <ul>
+            <li><a href="#Synopsis_random_generator">Synopsis</a></li>
+            <li><a href="#Random Generator">Random Generator</a></li>
+        </ul>
+        <li><a href="#boost/uuid/uuid_io.hpp">boost/uuid/uuid_io.hpp</a></li>
+        <ul>
+            <li><a href="#Synopsis_io">Synopsis</a></li>
+            <li><a href="#Stream_operators">Stream Operators</a></li>
+            <li><a href="#to_string">To String</a></li>
+        </ul>
+        <li><a href="#boost/uuid/uuid_serialize.hpp">boost/uuid/uuid_serialize.hpp</a></li>
+        <ul>
+            <li><a href="#Synopsis_serialize">Synopsis</a></li>
+            <li><a href="#Serialization">Serialization</a></li>
+        </ul>
+    </ul>
+    <li><a href="#Design notes">Design notes</a></li>
+    <li><a href="#History and Acknowledgements">History and Acknowledgements</a></li>
+</ol>
+
+<h2><a name="Introduction">Introduction</a></h2>
+<p>
+A UUID, or Universally unique identifier, is intended to uniquely identify
+information in a distributed environment without significant central
+coordination.  It can be used to tag objects with very short lifetimes, or 
+to reliably identify very persistent objects across a network.
+<p>
+UUIDs have many applications.  Some examples follow:  Databases may use UUIDs 
+to identify rows or records in order to ensure that they are unique across 
+different databases, or for publication/subscription services.  Network messages
+may be identified with a UUID to ensure that different parts of a message are put 
+back together again.  Distributed computing may use UUIDs to identify a remote 
+procedure call.  Transactions and classes involved in serialization may be
+identified by UUIDs.  Microsoft's component object model (COM) uses UUIDs to 
+distinguish different software component interfaces.  UUIDs are inserted into 
+documents from Microsoft Office programs.  UUIDs identify audio or 
+video streams in the Advanced Systems Format (ASF).  UUIDs are also a basis 
+for OIDs (object identifiers), and URNs (uniform resource name).
+
+<p>
+An attractive feature of UUIDs when compared to alternatives is their relative 
+small size, of 128-bits, or 16-bytes.  Another is that the creation of UUIDs 
+does not require a centralized authority.
+
+<p>When UUIDs are generated by one of the defined
+mechanisms, they are either guaranteed to be unique, different from all other
+generated UUIDs (that is, it has never been generated before and it will
+never be generated again), or it is extremely likely to be unique (depending
+on the mechanism).
+
+<h2><a name="Configuration">Configuration</a></h2>
+
+<p>
+The library does not require building or any special configuration to be used.
+However, there are a few options that can be enabled by defining macros prior to
+including library headers. These macros are summarized in the following table.
+
+<p>
+<table border="1">
+<tr>
+<th>Macro</th><th>Description</th>
+</tr>
+<tr>
+<td><tt>BOOST_UUID_NO_SIMD</tt></td><td>If defined, disables any optimizations for <a href="http://en.wikipedia.org/wiki/SIMD">SIMD</a>-enabled processors. Generic versions of algorithms will be used instead. This may result in suboptimal performance. By default, optimized algorithms are used, when the library is able to detect the availability of SIMD extensions at compile time.</td>
+</tr>
+<tr>
+<td><tt>BOOST_UUID_USE_SSE2</tt></td><td>If defined, enables optimizations for <a href="http://en.wikipedia.org/wiki/SSE2">SSE2</a> exstensions available in modern x86 processors.</td>
+</tr>
+<tr>
+<td><tt>BOOST_UUID_USE_SSE3</tt></td><td>If defined, enables optimizations for <a href="http://en.wikipedia.org/wiki/SSE3">SSE3</a> exstensions available in modern x86 processors.</td>
+</tr>
+<tr>
+<td><tt>BOOST_UUID_USE_SSE41</tt></td><td>If defined, enables optimizations for <a href="http://en.wikipedia.org/wiki/SSE4#SSE4.1">SSE4.1</a> exstensions available in modern x86 processors.</td>
+</tr>
+</table>
+
+<p>
+By default the library attempts to detect the availability of SIMD extensions in the target CPU at compile time and automatically defines the appropriate macros if succeeded. The <tt>BOOST_UUID_USE_SSE*</tt> macros can be defined by users, if auto-detection fails and it is known that the target CPU will have the extension. Do not enable these extensions unless you're certain that they will always be available on any machine that will run your program. The library performs no run time che [...]
+
+<h2><a name="Examples">Examples</a></h2>
+<h3><a name="Tagging">Tagging</a></h3>
+<pre>
+// example of tagging an object with a uuid
+// see <a href="./test/test_tagging.cpp"><tt>boost/libs/uuid/test/test_tagging.cpp</tt></a>
+
+#include <<a href="./../../boost/uuid/uuid.hpp"><tt>boost/uuid/uuid.hpp</tt></a>>
+#include <<a href="./../../boost/uuid/uuid_generators.hpp"><tt>boost/uuid/uuid_generators.hpp</tt></a>>
+
+class object
+{
+public:
+    object()
+        : tag(boost::uuids::random_generator()())
+        , state(0)
+    {}
+
+    explicit object(int state)
+        : tag(boost::uuids::random_generator()())
+        , state(state)
+    {}
+
+    object(object const& rhs)
+        : tag(rhs.tag)
+        , state(rhs.state)
+    {}
+
+    bool operator==(object const& rhs) const {
+        return tag == rhs.tag;
+    }
+
+    object& operator=(object const& rhs) {
+        tag = rhs.tag;
+        state = rhs.state;
+    }
+
+    int get_state() const { return state; }
+    void set_state(int new_state) { state = new_state; }
+
+private:
+    boost::uuids::uuid tag;
+
+    int state;
+};
+
+object o1(1);
+object o2 = o1;
+o2.set_state(2);
+assert(o1 == o2);
+
+object o3(3);
+assert(o1 != o3);
+assert(o2 != o3);
+</pre>
+
+<h3><a name="POD Efficiencies">POD Efficiencies</a></h3>
+<p>
+This library implements a UUID as a POD allowing a UUID
+to be used in the most efficient ways, including using memcpy, 
+and aggregate initializers.  A drawback is that a POD can 
+not have any constructors, and thus declaring a UUID will not 
+initialize it to a value generated by one of the defined 
+mechanisms.  But a class based on a UUID can be defined 
+that does initialize itself to a value generated by one of 
+the defined mechanisms.
+<p>
+Note that <tt>boost::is_pod</tt> is specialized for <tt>boost::uuids::uuid</tt>
+and depends on <a href="http://www.boost.org/libs/type_traits">Boost.TypeTraits</a>.
+Define <tt>BOOST_UUID_NO_TYPE_TRAITS</tt> before including <a href="./../../boost/uuid/uuid.hpp"><tt>boost/uuid/uuid.hpp</tt></a>
+to remove the dependency on <a href="http://www.boost.org/libs/type_traits">Boost.TypeTraits</a>.
+<pre>
+// example using memcpy and aggregate initializers
+// example of a class uuid see <a href="./test/test_uuid_class.cpp"><tt>boost/libs/uuid/test/test_uuid_class.cpp</tt></a>
+
+#include <<a href="./../../boost/uuid/uuid.hpp"><tt>boost/uuid/uuid.hpp</tt></a>>
+#include <<a href="./../../boost/uuid/uuid_generators.hpp"><tt>boost/uuid/uuid_generators.hpp</tt></a>>
+
+{ // example using memcpy
+    unsigned char uuid_data[16];
+    // fill uuid_data
+
+    boost::uuids::uuid u;
+
+    memcpy(&u, uuid_data, 16);
+}
+
+{ // example using aggregate initializers
+    boost::uuids::uuid u =
+    { 0x12 ,0x34, 0x56, 0x78
+    , 0x90, 0xab
+    , 0xcd, 0xef
+    , 0x12, 0x34
+    , 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef
+    };
+}
+
+// example of creating a uuid class that
+// initializes the uuid in the constructor
+// using a defined mechanism
+
+class uuid_class : public boost::uuids::uuid
+{
+public:
+    uuid_class()
+        : boost::uuids::uuid(boost::uuids::random_generator()())
+    {}
+
+    explicit uuid_class(boost::uuids::uuid const& u)
+        : boost::uuids::uuid(u)
+    {}
+
+    operator boost::uuids::uuid() {
+        return static_cast<boost::uuids::uuid&>(*this);
+    }
+
+    operator boost::uuids::uuid() const {
+        return static_cast<boost::uuids::uuid const&>(*this);
+    }
+};
+
+uuid_class u1;
+uuid_class u2;
+
+assert(u1 != u2);
+</pre>
+
+<h3><a name="Byte Extraction">Byte Extraction</a></h3>
+<p>It is sometimes useful to get at the 16 bytes of a <b>uuid</b> directly.  
+Typical use is as follows:
+
+<pre>
+boost::uuids::uuid u;
+std::vector<char> v(u.size());
+std::copy(u.begin(), u.end(), v.begin());
+</pre>
+
+<p>Note: <tt>boost::uuids::uuid::size()</tt> always returns 16.
+
+<h2><a name="Reference">Reference</a></h2>
+<h3><a name="boost/uuid/uuid.hpp" href="./../../boost/uuid/uuid.hpp">boost/uuid/uuid.hpp</a></h3>
+<h4><a name="Synopsis">Synopsis</a></h4>
+<pre>
+namespace boost {
+namespace uuids {
+
+class uuid {
+public:
+    typedef uint8_t value_type;
+    typedef uint8_t& reference;
+    typedef uint8_t const& const_reference;
+    typedef uint8_t* iterator;
+    typedef uint8_t const* const_iterator;
+    typedef std::size_t size_type;
+    typedef std::ptrdiff_t difference_type;
+
+    static constexpr size_type static_size() noexcept;
+
+    // iteration
+    iterator begin() noexcept;
+    iterator end() noexcept;
+    const_iterator begin() const noexcept;
+    const_iterator end() const noexcept;
+
+    constexpr size_type size() const noexcept;
+
+    bool is_nil() const noexcept;
+
+    enum variant_type {
+        variant_ncs, // NCS backward compatibility
+        variant_rfc_4122, // defined in RFC 4122 document
+        variant_microsoft, // Microsoft Corporation backward compatibility
+        variant_future // future definition
+    };
+    variant_type variant() const noexcept;
+
+    enum version_type {
+        version_unknown = -1,
+        version_time_based = 1,
+        version_dce_security = 2,
+        version_name_based_md5 = 3,
+        version_random_number_based = 4,
+        version_name_based_sha1 = 5
+    };
+    version_type version() const noexcept;
+
+    // Swap function
+    void swap(uuid& rhs) noexcept;
+
+    uint8_t data[static_size()];
+};
+
+// standard operators
+bool operator==(uuid const& lhs, uuid const& rhs) noexcept;
+bool operator!=(uuid const& lhs, uuid const& rhs) noexcept;
+bool operator<(uuid const& lhs, uuid const& rhs) noexcept;
+bool operator>(uuid const& lhs, uuid const& rhs) noexcept;
+bool operator<=(uuid const& lhs, uuid const& rhs) noexcept;
+bool operator>=(uuid const& lhs, uuid const& rhs) noexcept;
+
+void swap(uuid& lhs, uuid& rhs) noexcept;
+
+std::size_t hash_value(uuid const& u) noexcept;
+
+}} // namespace boost::uuids
+</pre>
+
+<h4><a name="Size">Size</a></h4>
+
+<p>The size of a <b>uuid</b> (in bytes) can be obtained either by
+calling the function <tt>boost::uuids::uuid::size()</tt> or by 
+calling the static function <tt>boost::uuids::uuid::static_size()</tt>, 
+both always return 16.
+<pre>
+    boost::uuids::uuid u;
+    assert(16 == u.size());
+    assert(16 == boost::uuids::uuid::static_size());
+</pre>
+
+<h4><a name="Iteration">Iteration</a></h4>
+
+<p>Both iterators and constant iterators are provided.
+<pre>
+    boost::uuids::uuid u;
+    for (boost::uuids::uuid::const_iterator it=u.begin(); it!=u.end(); ++it) {
+        boost::uuids::uuid::value_type v = *it;
+    }
+    for (boost::uuids::uuid::iterator it=u.begin(); it!=u.end(); ++it) {
+        *it = 0;
+    }
+</pre>
+
+<h4><a name="Nil">Nil uuid</a></h4>
+<p>The function, <tt>boost::uuids::uuid::is_nil()</tt> returns true if and
+only if the <b>uuid</b> is equal to {00000000-0000-0000-0000-000000000000}.
+</p>
+
+<h4><a name="Variant">Variant</a></h4>
+<p>Three bits of a <b>uuid</b> determine the variant.</p>
+<pre>
+    boost::uuids::uuid u;
+    boost::uuids::uuid::variant_type v = u.variant();
+</pre>
+
+<h4><a name="Version">Version</a></h4>
+<p>Four bits of a <b>uuid</b> determine the variant, that is the mechanism
+used to generate the <b>uuid</b>.
+</p>
+<pre>
+    boost::uuids::uuid u;
+    boost::uuids::uuid::version_type v = u.version();
+</pre>
+
+<h4><a name="Swap">Swap</a></h4>
+<p>Both <tt>boost::uuids::uuid::swap()</tt> and <tt>boost::uuids::swap()</tt> 
+are provided.
+</p>
+<pre>
+    boost::uuids::uuid u1, u2;
+    u1.swap(u2);
+    swap(u1, u2);
+</pre>
+
+<h4><a name="Operators">Operators</a></h4>
+<p>
+All of the standard numeric operators are defined for the <b>uuid</b>
+class. These include:
+<pre>
+    operator==
+    operator!=
+    operator<
+    operator>
+    operator<=
+    operator>=
+</pre>
+
+<h4><a name="Hash">Hash Function</a></h4>
+<p>
+This function allows <b>uuid</b>s to be used with 
+<a href="http://www.boost.org/doc/html/hash.html"><b>boost::hash</b></a>
+
+<pre>
+boost::hash<boost::uuids::uuid> uuid_hasher;
+std::size_t uuid_hash_value = uuid_hasher(boost::uuids::uuid());
+</pre>
+
+<h3><a name="boost/uuid/uuid_generators.hpp" href="./../../boost/uuid/uuid_generators.hpp">boost/uuid/uuid_generators.hpp</a></h3>
+<h4><a name="Synopsis_generators">Synopsis</a></h4>
+This file includes all the <b>uuid</b> generators for convenience.
+<pre>
+#include <<a href="./../../boost/uuid/nil_generator.hpp"><tt>boost/uuid/nil_generator.hpp</tt></a>>
+#include <<a href="./../../boost/uuid/string_generator.hpp"><tt>boost/uuid/string_generator.hpp</tt></a>>
+#include <<a href="./../../boost/uuid/name_generator.hpp"><tt>boost/uuid/name_generator.hpp</tt></a>>
+#include <<a href="./../../boost/uuid/random_generator.hpp"><tt>boost/uuid/random_generator.hpp</tt></a>>
+</pre>
+
+<h3><a name="boost/uuid/nil_generator.hpp" href="./../../boost/uuid/nil_generator.hpp">boost/uuid/nil_generator.hpp</a></h3>
+<h4><a name="Synopsis_nil_generator">Synopsis</a></h4>
+<pre>
+namespace boost {
+namespace uuids {
+
+struct nil_generator {
+    typedef uuid result_type;
+    
+    uuid operator()() const;
+};
+uuid nil_uuid();
+
+}} //namespace boost::uuids
+</pre>
+
+<h4><a name="Nil Generator">Nil Generator</a></h4>
+<p>The <tt>boost::uuids::nil_generator</tt> class always generates a nil <b>uuid</b>.
+<pre>
+boost::uuids::nil_generator gen;
+boost::uuids::uuid u = gen();
+assert(u.is_nil() == true);
+
+// or for convenience
+boost::uuids::uuid u = boost::uuids::nil_uuid();
+assert(u.is_nil() == true);
+</pre>
+
+<h3><a name="boost/uuid/string_generator.hpp" href="./../../boost/uuid/string_generator.hpp">boost/uuid/string_generator.hpp</a></h3>
+<h4><a name="Synopsis_string_generator">Synopsis</a></h4>
+
+<pre>
+namespace boost {
+namespace uuids {
+
+struct string_generator {
+    typedef uuid result_type;
+
+    template <typename ch, typename char_traits, typename alloc>
+        uuid operator()(std::basic_string<ch, char_traits, alloc> const& s) const;
+};
+
+}} //namespace boost::uuids
+</pre>
+
+<h4><a name="String Generator">String Generator</a></h4>
+<p>The <tt>boost::uuids::string_generator</tt> class generates a <b>uuid</b> from a string.
+<pre>
+boost::uuids::string_generator gen;
+boost::uuids::uuid u1 = gen("{01234567-89ab-cdef-0123-456789abcdef}");
+boost::uuids::uuid u2 = gen(L"01234567-89ab-cdef-0123-456789abcdef");
+boost::uuids::uuid u3 = gen(std::string("0123456789abcdef0123456789abcdef"));
+boost::uuids::uuid u4 = gen(std::wstring(L"01234567-89ab-cdef-0123-456789abcdef"));
+</pre>
+
+<h3><a name="boost/uuid/name_generator.hpp" href="./../../boost/uuid/name_generator.hpp">boost/uuid/name_generator.hpp</a></h3>
+<h4><a name="Synopsis_name_generator">Synopsis</a></h4>
+
+<pre>
+namespace boost {
+namespace uuids {
+
+class name_generator {
+public:
+    typedef uuid result_type;
+    
+    explicit name_generator(uuid const& namespace_uuid);
+
+    uuid operator()(const char* name) const;
+    uuid operator()(const wchar_t* name) const;
+    tempate <typename ch, typename char_traits, typename alloc>
+        uuid operator()(std::basic_string<ch, char_traits, alloc> const& name) const;
+    uuid operator()(void const* buffer, std::size_t byte_count) const;
+};
+
+}} //namespace boost::uuids
+</pre>
+
+<h4><a name="Name Generator">Name Generator</a></h4>
+<p>
+The <tt>boost::uuids::name_generator</tt> class generates a name based <b>uuid</b> from a
+namespace uuid and a name.
+<pre>
+boost::uuids::uuid dns_namespace_uuid; // initialize to {6ba7b810-9dad-11d1-80b4-00c04fd430c8}
+
+boost::uuids::name_generator gen(dns_namespace_uuid);
+boost::uuids::uuid u = gen("boost.org");
+</pre>
+
+<h3><a name="boost/uuid/random_generator.hpp" href="./../../boost/uuid/random_generator.hpp">boost/uuid/random_generator.hpp</a></h3>
+<h4><a name="Synopsis_random_generator">Synopsis</a></h4>
+
+<pre>
+namespace boost {
+namespace uuids {
+
+template <typename UniformRandomNumberGenerator>
+class basic_random_generator {
+public:
+    typedef uuid result_type;
+    
+    basic_random_generator();
+    explicit basic_random_generator(UniformRandomNumberGenerator& gen);
+    explicit basic_random_generator(UniformRandomNumberGenerator* pGen);
+    
+    uuid operator()();
+};
+typedef basic_random_generator<mt19937> random_generator;
+
+}} // namespace boost::uuids
+</pre>
+
+<h4><a name="Random Generator">Random Generator</a></h4>
+<p>
+The <tt>boost::uuids::basic_random_generator</tt> class generates a random number
+based uuid from a random number generator (one that conforms to the 
+<a href="http://www.boost.org/libs/random/random-concepts.html#uniform-rng">UniformRandomNumberGenerator</a>
+concept).
+<pre>
+//default construct the random number generator and seed it
+boost::uuids::basic_random_generator<boost::mt19937> gen;
+boost::uuids::uuid u = gen();
+
+//for convenience boost::uuids::random_generator
+//is equivalent to boost::uuids::basic_random_generator<boost::mt19937>
+boost::uuids::random_generator gen;
+boost::uuids::uuid u = gen();
+
+//use an existing random number generator
+//pass either a reference or a pointer to the random number generator
+boost::mt19937 ran;
+boost::uuids::basic_random_generator<boost::mt19937> gen(&ran);
+boost::uuids::uuid u = gen();
+</pre>
+
+<h3><a name="boost/uuid/uuid_io.hpp" href="./../../boost/uuid/uuid_io.hpp">boost/uuid/uuid_io.hpp</a></h3>
+<h4><a name="Synopsis_io">Synopsis</a></h4>
+<pre>
+namespace boost {
+namespace uuids {
+
+template <typename ch, typename char_traits>
+    std::basic_ostream<ch, char_traits>& operator<<(std::basic_ostream<ch, char_traits> &os, uuid const& u);
+
+template <typename ch, typename char_traits>
+    std::basic_istream<ch, char_traits>& operator>>(std::basic_istream<ch, char_traits> &is, uuid &u);
+    
+std::string to_string(uuid const& u);
+std::wstring to_wstring(uuid const& u);
+
+}} // namespace boost::uuids
+</pre>
+
+<h4><a name="Stream_operators">Stream Operators</a></h4>
+<p>
+The standard input and output stream operators <tt><<</tt> and <tt>>></tt>
+are provided by including <a href="../../boost/uuid/uuid_io.hpp"><tt>boost/uuid/uuid_io.hpp</tt></a>.
+The string representation of a <b>uuid</b> is <tt>hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh</tt> 
+where <tt>h</tt> is a hexidecimal digit.
+<pre>
+boost::uuids::uuid u1; // initialize uuid
+
+std::stringstream ss;
+ss << u1;
+
+boost::uuids::uuid u2;
+ss >> u2;
+
+assert(u1, u2);
+</pre>
+
+<p>
+One can also use <a href="http://www.boost.org/libs/conversion/lexical_cast.htm"><tt>boost::lexical_cast</tt></a>.
+<pre>
+boost::uuids::uuid u1; // initialize uuid
+
+std::string s = boost::lexical_cast<std::string>(u);
+boost::uuids::uuid u2 = boost::lexical_cast<boost::uuids::uuid>(s);
+
+assert(u1 == u2);
+</pre>
+
+<h4><a name="to_string">To String</a></h4>
+<p>
+The functions <tt>to_string</tt> and <tt>to_wstring</tt> are provided as a 
+convenience to convert a <b>uuid</b> to a string.  They are also likely faster than
+the stream operators or using <a href="http://www.boost.org/libs/conversion/lexical_cast.htm"><tt>boost::lexical_cast</tt></a>.
+<pre>
+boost::uuids::uuid u; // initialize uuid
+
+std::string s1 = to_string(u);
+
+std::wstring s2 = to_wstring(u);
+</pre>
+
+<h3><a name="boost/uuid/uuid_serialize.hpp" href="./../../boost/uuid/uuid_serialize.hpp">boost/uuid/uuid_serialize.hpp</a></h3>
+<h4><a name="Synopsis_serialize">Synopsis</a></h4>
+<pre>
+namespace boost {
+namespace uuids {
+
+BOOST_CLASS_IMPLEMENTATION(boost::uuids::uuid, boost::serialization::primitive_type)
+
+}} // namespace boost::uuids
+</pre>
+
+<h4><a name="Serialization">Serialization</a></h4>
+<p>
+Serialization is accomplished with the <a href="http://www.boost.org/libs/serialization/doc/index.html">
+Boost Serialization</a> library.  A <b>uuid</b> is serialized as a 
+<a href="http://www.boost.org/libs/serialization/doc/serialization.html#primitiveoperators">
+primitive type</a>, thus only the <b>uuid</b> value will be saved to/loaded from an archive.
+<p>
+Include <a href="../../boost/uuid/uuid_serialize.hpp"><tt>boost/uuid/uuid_serialize.hpp</tt></a> to enable serialization for <b>uuid</b>s.
+
+<h2><a name="Design notes">Design notes</a></h2>
+<p>
+The document, <a href="http://www.itu.int/ITU-T/studygroups/com17/oid/X.667-E.pdf">
+http://www.itu.int/ITU-T/studygroups/com17/oid/X.667-E.pdf</a>, was used to design
+and implement the <b>boost::uuids::uuid</b> struct.
+
+<p>The <tt>boost::uuids::basic_random_generator</tt> class' default constructor 
+seeds the random number generator with a SHA-1 hash of a number of different
+values including <tt>std::time(0)</tt>, <tt>std::clock()</tt>, uninitialized
+data, value return from <tt>new unsigned int</tt>, etc..
+
+<p>Using <a href="http://valgrind.org/">Valgrind</a> produces a number of false
+positives with the default constructor of <tt>boost::uuids::basic_random_generator</tt>.  
+One solution is to suppress the errors as described in
+<a href="http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress">Valgrind's documentation</a>.
+Another solution is to use a different constructor of <tt>boost::uuids::basic_random_generator</tt>
+and explicitly pass in a random number generator.
+<pre>
+boost::mt19937 ran;
+ran.seed(time(NULL)); // one should likely seed in a better way
+boost::uuids::basic_random_generator<boost::mt19937> gen(&ran);
+boost::uuids::uuid u = gen();
+</pre>
+
+<p>The <tt>boost::uuids::name_generator</tt> class uses the SHA-1 hash function to
+compute the <b>uuid</b>.
+
+<p>All functions are re-entrant.  Classes are as thread-safe as an int.  That is an 
+instance can not be shared between threads without proper synchronization.
+
+<h2><a name="History and Acknowledgements">History and Acknowledgements</a></h2>
+<p>
+A number of people on the <a href="http://www.boost.org/">boost.org</a> 
+mailing list provided useful comments and greatly helped to shape the library.
+
+<p>Revised  February 6, 2010</p>
+
+<hr>
+<p>� Copyright Andy Tompkins, 2006</p>
+<p> Distributed under the Boost Software 
+License, Version 1.0. (See accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
+www.boost.org/LICENSE_1_0.txt</a>)</p>
+</body>
+</html>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/pdal.git



More information about the Pkg-grass-devel mailing list